[
  {
    "path": ".gitignore",
    "content": "*~\n*.bak\n*.pyc\n*.swp\n.DS_Store\n.crew\n.tramp_history\nThumbs.db\nlocal.properties\nbuild.xml\nplatforms/\npackages/\npostpone/\nsources/crystax/tests/\nsources/crystax/vendor/\ntoolchains/\n/ndk-stack*\n/ndk-depends*\n/host-tools/\nprebuilt/android-arm/\nprebuilt/android-arm64/\nprebuilt/android-mips/\nprebuilt/android-mips64/\nprebuilt/android-x86/\nprebuilt/android-x86_64/\nprebuilt/linux-x86/\nprebuilt/linux-x86_64/\nprebuilt/darwin-x86/\nprebuilt/darwin-x86_64/\nprebuilt/windows/\nprebuilt/windows-x86_64/\nprebuilt/common/scan-build/\nprebuilt/common/scan-view/\ntests/abcc/prebuilts/\ntests/device/crystax-test-big-switch/jni/main.c\ntests/device/crystax-test-big-switch/jni/switch.c\n"
  },
  {
    "path": "Android.mk",
    "content": "# Please try to keep this file empty by only including what is necessary to\n# build the Android platform. This is not the normal usage of the NDK.\n\ninclude ndk/sources/android/cpufeatures/Android.mk\n"
  },
  {
    "path": "BACKERS.md",
    "content": "# Bountysource Backers\n\nThank you to everyone who backed our [Bountysource fundraiser](https://www.bountysource.com/teams/crystaxndk/fundraiser)!\n\n### Your name in BACKERS.md.\n\n- pj\n- sword1024\n\n### Your name and URL in BACKERS.md.\n\n- 1bsyl (https://github.com/1bsyl)\n- Alex Besogonov (https://github.com/Cyberax)\n- Antony Polukhin (https://github.com/apolukhin)\n\n### Anonymous Supporters\n\nThere were also other people who didn't claim any level of reward but contributed to the fundraiser. Thank you all for the support!\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "Changelog\n=========\n\nWe've moved our bug tracker to GitHub: https://github.com/android-ndk/ndk/issues\n\nClang\n-----\n\n * **PSA: Everyone should be switching to Clang.**\n * Clang has been updated to 3.8svn (r243773, build 2481030).\n     * Note that this is now a nearly pure upstream clang.\n     * Also note that Clang packaged in the Windows 64 NDK is actually 32-bit.\n * Support for emulated TLS.\n     * `__thread` is now supported by the compiler by emulating ELF TLS with\n       pthread thread-specific data.\n     * C++11 `thread_local` will work in some cases, but will not work for data\n       with non-trivial destructors except when running on Marshmallow\n       (android-23) or newer because those cases require support from libc.\n     * Does not yet work with Aarch64 when TLS variables are accessed from a\n       shared library.\n\nGCC\n---\n\n * **GCC in the NDK is now deprecated.**\n     * Time to start using Clang if you haven’t already. If you have problems\n       with Clang, please file bugs!\n     * The NDK will not be upgrading to 5.x, nor will we be accepting\n       non-critical backports.\n     * Maintenance for miscompiles and internal compiler errors in 4.9 will be\n       handled on a case by case basis.\n * GCC 4.8 has been removed. All targets now use GCC 4.9.\n * Synchronized with `google/gcc-4_9` to r224707 (from r214835).\n\nNDK\n---\n\n * The samples are no longer included in the NDK. They are instead available on\n   [GitHub].\n * The documentation is no longer included in the NDK. It is instead available\n   on the [Android Developer website].\n * Make ARM standalone toolchains default to arm7.\n     * The old behavior can be restored by passing\n       `-target armv5te-linux-androideabi`.\n * Use `-isystem` for platform includes.\n     * Warnings caused by bionic will no longer break app builds.\n * Fixed segfault when throwing exceptions via gabi++ (see\n   http://b.android.com/179410).\n * Change libc++’s inline namespace to `std::__ndk1` to prevent ODR issues with\n   platform libc++.\n * Support for mips64r2 has been partially dropped. The rest will be dropped in\n   the future.\n * All libc++ libraries are now built with libc++abi.\n * Bump default `APP_PLATFORM` to Gingerbread.\n     * Expect support for Froyo and older to be dropped in a future release.\n * Updated gabi++ `_Unwind_Exception` struct for 64 bits.\n * cpufeatures: Detect SSE4.1 and SSE4.2 as well.\n * cpufeatures: Detect cpu features on x86\\_64 as well.\n * Update libc++abi to upstream r231075.\n * Added native tracing API to android-23.\n * Added native multinetwork API to android-23.\n * `byteswap.h`, `endian.h`, `sys/procfs.h`, `sys/ucontext.h`, `sys/user.h`, and\n   `uchar.h` have all been updated from ToT Bionic.\n * `sys/cdefs.h` has been synchronized across all API levels.\n * Support for `_WCHAR_IS_8BIT` has been removed.\n * Fixed `fegetenv` and `fesetenv` for arm\n * Fix end pointer size/alignment of `crtend_*` for mips64 and x86\\_64\n * Removed sed.\n * Removed mclinker.\n * Removed Perl.\n * Removed symbols which are not exported by the current platform libc/m/dl from\n   all versions of NDK libc/m/dl\n * libc/m/dl provide versioned symbols starting with v21\n * Added Vulkan headers and library to API level 24.\n\nBinutils\n--------\n\n * Unified binutils source between Android and ChromiumOS.\n * For full details see https://android-review.googlesource.com/#/c/182865/.\n * Gold for aarch64 should now be much more reliable. Use `-fuse-ld=gold` at\n   link time to use gold instead of bfd. The default will likely switch in the\n   next release.\n * Good linking time improvement for huge binaries for Gold ARM backend (up to\n   50% linking time reduction for debuggable Chrome Browser).\n * New option: `--pic-veneer`.\n * The 32-bit Windows package no longer contains ld.gold. It is available in\n   the 64-bit package.\n     * Current gold no longer builds when targeting 32-bit Windows (causes\n       internal compiler failures in mingw).\n\nGDB\n---\n\n * gdb has been updated to version 7.10.\n * ndk-gdb has been removed in favor of ndk-gdb.py.\n * ndk-gdb.py has been significantly rewritten.\n   * Performance should be somewhat better.\n   * Error messages have been significantly improved.\n   * Relative project paths should always work now.\n   * Ctrl-C no longer kills the backgrounded gdbserver.\n   * Improve Windows support.\n\nYasm\n----\n\n * Yasm has been updated to version 1.3.0.\n\nKnown Issues\n------------\n\n * This is not intended to be a comprehensive list of all outstanding bugs.\n * x86 ASAN does not currently work. See discussion on\n   https://android-review.googlesource.com/#/c/186276/\n * The combination of Clang, x86, `stlport_static`, and optimization levels\n   higher than `-O0` causes test failures with `dynamic_cast`. See\n   https://android-review.googlesource.com/#/c/185920\n * Exception handling will often fail when using `c++_shared` on ARM32. The root\n   cause is incompatibility between the LLVM unwinder used by libc++abi for\n   ARM32 and libgcc. This is not a regression from r10e.\n\n[GitHub]: https://github.com/googlesamples/android-ndk\n[Android Developer website]: http://developer.android.com/ndk/index.html\n"
  },
  {
    "path": "CleanSpec.mk",
    "content": "# Copyright (C) 2007 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# If you don't need to do a full clean build but would like to touch\n# a file or delete some intermediate files, add a clean step to the end\n# of the list.  These steps will only be run once, if they haven't been\n# run before.\n#\n# E.g.:\n#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)\n#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)\n#\n# Always use \"touch -c\" and \"rm -f\" or \"rm -rf\" to gracefully deal with\n# files that are missing or have been moved.\n#\n# Use $(PRODUCT_OUT) to get to the \"out/target/product/blah/\" directory.\n# Use $(OUT_DIR) to refer to the \"out\" directory.\n#\n# If you need to re-do something that's already mentioned, just copy\n# the command and add it to the bottom of the list.  E.g., if a change\n# that you made last week required touching a file and a change you\n# made today requires touching the same file, just copy the old\n# touch step and add it to the end of the list.\n#\n# ************************************************\n# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST\n# ************************************************\n\n# For example:\n#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)\n#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)\n#$(call add-clean-step, find $(OUT_DIR) -type f -name \"IGTalkSession*\" -print0 | xargs -0 rm -f)\n#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)\n\n# ************************************************\n# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST\n# ************************************************\n"
  },
  {
    "path": "OWNERS",
    "content": "danalbert\nenh\njmgao\n\n# For questions rather than code review, send email to:\n#\n# android-ndk@google.com (Googlers only)\n# android-ndk@googlegroups.com (public)\n#\n# Ask on Stack Overflow: http://stackoverflow.com/questions/tagged/android-ndk.\n"
  },
  {
    "path": "README.md",
    "content": "Android Native Development Kit (NDK)\n====================================\n\nThe latest version of this document is available at\nhttps://android.googlesource.com/platform/ndk/+/master/README.md.\n\n**Note:** This document is for developers _of_ the NDK, not developers\nthat use the NDK.\n\nThe NDK allows Android application developers to include\nnative code in their Android application packages, compiled as JNI shared\nlibraries.\n\nOther Resources\n---------------\n\nThis doc gives a high level overview of the NDK's build, packaging, and test\nprocess. For other use cases, or more in depth documentation, refer to the\nfollowing sources:\n\n * User documentation is available on the [Android Developer website].\n * Adding a new NDK API or platform version? Check [Generating Sysroots].\n * Working on Clang or GCC? See [Toolchains.md].\n * Discussions related to the Android NDK happen on the [android-ndk Google\n   Group].\n * File bugs against the NDK at https://github.com/android-ndk/ndk/issues.\n\n[Android Developer website]: https://developer.android.com/ndk/index.html\n[android-ndk Google Group]: http://groups.google.com/group/android-ndk\n[Generating Sysroots]: docs/GeneratingSysroots.md\n[Toolchains.md]: docs/Toolchains.md\n\nBuilding the NDK\n================\n\nBoth Linux and Windows host binaries are built on Linux machines. Windows host\nbinaries are built via MinGW cross compiler. Systems without a working MinGW\ncompiler can use `build/tools/build-mingw64-toolchain.sh` to generate their own\nand be added to the `PATH` for build scripts to discover.\n\nBuilding binaries for Mac OS X requires at least 10.8.\n\nTarget headers and binaries are built on Linux.\n\nComponents\n----------\n\nThe NDK consists of three parts: host binaries, target prebuilts, and others\n(build system, docs, samples, tests).\n\n### Host Binaries\n\n* `toolchains/` contains GCC and Clang toolchains.\n    * `$TOOLCHAIN/config.mk` contains ARCH and ABIS this toolchain can handle.\n    * `$TOOLCHAIN/setup.mk` contains toolchain-specific default CFLAGS/LDFLAGS\n      when this toolchain is used.\n* `prebuilt/$HOST_TAG` contains build dependencies and additional tools.\n    * make, awk, python, yasm, and for Windows: cmp.exe and echo.exe\n    * `ndk-depends`, `ndk-stack` and `ndk-gdb` can also be found here.\n\n### Target Headers and Binaries\n\n* `platforms/android-$VERSION/arch-$ARCH_NAME/` contains headers and libraries\n  for each API level.\n    * The build system sets `--sysroot` to one of these directories based on\n      user-specified `APP_ABI` and `APP_PLATFORM`.\n* `sources/cxx-stl/$STL` contains the headers and libraries for the various C++\n  STLs.\n* `prebuilt/android-$ARCH/gdbserver` contains gdbserver.\n\n### Others\n\n* `build/` contains the ndk-build system and scripts to rebuild NDK.\n* `sources/android` and `sources/third_party` contain modules that can be used\n  in apps (cpufeatures, native\\_app\\_glue, etc) via `$(call import-module,\n  $MODULE)`\n* `tests/`\n\nPrerequisites\n-------------\n\n* [AOSP NDK Repository](http://source.android.com/source/downloading.html)\n    * Check out the branch `master-ndk`\n\n        ```bash\n        repo init -u https://android.googlesource.com/platform/manifest \\\n            -b master-ndk\n\n        # Googlers, use\n        repo init -u \\\n            persistent-https://android.git.corp.google.com/platform/manifest \\\n            -b master-ndk\n        ```\n\n* Additional Linux Dependencies (available from apt):\n    * bison\n    * flex\n    * libtool\n    * mingw-w64\n    * pbzip2 (optional, improves packaging times)\n    * texinfo\n    * python3 (used for Vulkan validation layer generation)\n    * python-lxml (used for Vulkan validation layer generation)\n* Mac OS X also requires Xcode.\n\nHost/Target prebuilts\n---------------------\n\n### For Linux or Darwin:\n\n```bash\n$ python checkbuild.py\n```\n\n### For Windows, from Linux:\n\n```bash\n$ python checkbuild.py --system windows  # Or windows64.\n```\n\n`checkbuild.py` also accepts a variety of other options to speed up local\nbuilds, namely `--arch` and `--module`.\n\nPackaging\n---------\n\nBy default, `checkbuild.py` will also package the NDK and run basic tests. To\nskip the packaging step, use the `--no-package` flag. Note that running the\ntests does require the packaging step.\n\nIf you need to re-run just the packaging step without going through a build,\npackaging is handled by `build/tools/package.py`.\n\nTesting\n-------\n\nTesting is discussed in [Testing.md](docs/Testing.md).\n"
  },
  {
    "path": "build/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "build/awk/check-awk.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is used to check that a given awk executable\n# implements the match() and substr() functions appropriately.\n#\n# These were introduced in nawk/gawk, but the original awk\n# does not have them.\n#\nBEGIN {\n    RSTART=0\n    RLENGTH=0\n    s1=\"A real world example\"\n    if (! match(s1,\"world\")) {\n        print \"Fail match\"\n    } else if (RSTART != 8) {\n        print \"Fail RSTART =\"RSTART\n    } else if (RLENGTH != 5) {\n        print \"Fail RLENGTH =\"RLENGTH\n    } else {\n        s2=substr(s1,RSTART,RLENGTH)\n        if (s2 != \"world\") {\n            print \"Fail substr=\"s2\n        } else {\n            print \"Pass\"\n        }\n    }\n}\n"
  },
  {
    "path": "build/awk/extract-debuggable.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# A nawk/gawk script used to extract the debuggable flag from an\n# application's manifest (i.e. AndroidManifest.xml). Usage:\n#\n#   awk -f <this-script> AndroidManifest.xml\n#\n\nBEGIN {\n    DEBUGGABLE = \"\";\n    while ( xml_event() ) {\n        # simply extract the 'android:debuggable' attribute value from\n        # the first <manifest><application> element we find.\n        if ( XML_TYPE == \"BEGIN\" && XML_TAG == \"APPLICATION\" &&\n             XML_RPATH == \"APPLICATION/MANIFEST/\" ) {\n            DEBUGGABLE = XML_ATTR[\"android:debuggable\"];\n            break;\n        }\n    }\n    # ensure the value is either \"true\" or \"false\"\n    if ( DEBUGGABLE != \"true\" )\n        DEBUGGABLE = \"false\";\n\n    print DEBUGGABLE;\n}\n\n#\n# the following is copied directly from xml.awk - see this file for\n# usage and implementation details.\n#\nfunction xml_event () {\n    RS=\">\";\n    XML_TAG=XML_TYPE=\"\";\n    split(\"\", XML_ATTR);\n    while ( 1 ) {\n        if (_xml_closing) { # delayed direct tag closure\n            XML_TAG = _xml_closing;\n            XML_TYPE = \"END\";\n            _xml_closing = \"\";\n            _xml_exit(XML_TAG);\n            return 1;\n        }\n        if (getline <= 0) return 0; # read new input line\n        _xml_p = index($0, \"<\"); # get start marker\n        if (_xml_p == 0) return 0; # end of file (or malformed input)\n        $0 = substr($0, _xml_p) # remove anything before '<'\n        # ignore CData / Comments / Processing instructions / Declarations\n        if (_xml_in_section(\"<!\\\\[[Cc][Dd][Aa][Tt][Aa]\\\\[\", \"]]\") ||\n            _xml_in_section(\"<!--\", \"--\") ||\n            _xml_in_section(\"<\\\\?\", \"\\\\?\") ||\n            _xml_in_section(\"<!\", \"\")) {\n            continue;\n        }\n        if (substr($0, 1, 2) == \"</\") { # is it a closing tag ?\n            XML_TYPE = \"END\";\n            $0 = substr($0, 3);\n        } else { # nope, it's an opening one\n            XML_TYPE = \"BEGIN\";\n            $0 = substr($0, 2);\n        }\n        XML_TAG = $0\n        sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # extract tag name\n        XML_TAG = toupper(XML_TAG);       # uppercase it\n        if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ )  # validate it\n            _xml_panic(\"Invalid tag name: \" XML_TAG);\n        if (XML_TYPE == \"BEGIN\") {  # update reverse path\n            _xml_enter(XML_TAG);\n        } else {\n            _xml_exit(XML_TAG);\n        }\n        sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0); # get rid of tag and spaces\n        while ($0) { # process attributes\n            if ($0 == \"/\") {  # deal with direct closing tag, e.g. </foo>\n                _xml_closing = XML_TAG; # record delayed tag closure.\n                break\n            }\n            _xml_attrib = $0;\n            sub(/=.*$/,\"\",_xml_attrib);  # extract attribute name\n            sub(/^[^=]*/,\"\",$0);         # remove it from record\n            _xml_attrib = tolower(_xml_attrib);\n            if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ ) # validate it\n                _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n            if (substr($0,1,2) == \"=\\\"\") { # value is =\"something\"\n                _xml_value = substr($0,3);\n                sub(/\".*$/,\"\",_xml_value);\n                sub(/^=\"[^\"]*\"/,\"\",$0);\n            } else if (substr($0,1,2) == \"='\") { # value is ='something'\n                _xml_value = substr($0,3);\n                sub(/'.*$/,\"\",_xml_value);\n                sub(/^='[^']*'/,\"\",$0);\n            } else {\n                _xml_panic(\"Invalid attribute value syntax for \" _xml_attrib \": \" $0);\n            }\n            XML_ATTR[_xml_attrib] = _xml_value;  # store attribute name/value\n            sub(/^[ \\t\\r\\n]*/,\"\",$0); # get rid of remaining leading spaces\n        }\n        return 1; # now return, XML_TYPE/TAG/ATTR/RPATH are set\n    }\n}\n\nfunction _xml_panic (msg) {\n    print msg > \"/dev/stderr\"\n    exit(1)\n}\n\nfunction _xml_in_section (sec_begin, sec_end) {\n    if (!match( $0, \"^\" sec_begin )) return 0;\n    while (!match($0, sec_end \"$\")) {\n        if (getline <= 0) _xml_panic(\"Unexpected EOF: \" ERRNO);\n    }\n    return 1;\n}\n\nfunction _xml_enter (tag) {\n    XML_RPATH = tag \"/\" XML_RPATH;\n}\n\nfunction _xml_exit (tag) {\n    _xml_p = index(XML_RPATH, \"/\");\n    _xml_expected = substr(XML_RPATH, 1, _xml_p-1);\n    if (_xml_expected != XML_TAG)\n        _xml_panic(\"Unexpected close tag: \" XML_TAG \", expecting \" _xml_expected);\n    XML_RPATH = substr(XML_RPATH, _xml_p+1);\n}\n"
  },
  {
    "path": "build/awk/extract-launchable.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# A nawk/gawk script used to extract the list of launchable activities\n# from an application's manifest (i.e. AndroidManifest.xml). Usage:\n#\n#   awk -f <this-script> AndroidManifest.xml\n#\n\n#\n# Explanation:\n#\n# A given application can have several activities, and each activity\n# can have several intent filters. We want to only list, in the final\n# output, the activities which have a intent-filter that contains the\n# following elements:\n#\n#   <action android:name=\"android.intent.action.MAIN\" />\n#   <category android:name=\"android.intent.category.LAUNCHER\" />\n#\n# To do this, we need hooks called when entering and exiting <activity>\n# and <intent-filter> elements.\n#\n\nBEGIN {\n    while ( xml_event() ) {\n        # concat xml event type and tag for simpler comparisons\n        event = XML_TYPE \"-\" XML_TAG;\n        # When entering a new <activity>, extract its name and set\n        # the 'launchable' flag to false.\n        if ( event == \"BEGIN-ACTIVITY\" && \n             XML_RPATH == \"ACTIVITY/APPLICATION/MANIFEST/\" ) {\n            name = XML_ATTR[\"android:name\"];\n            launchable = 0;\n        }\n        # When exiting an <activity>, check that it has a name and\n        # is launchable. If so, print its name to the output\n        else if ( event == \"END-ACTIVITY\" &&\n                  XML_RPATH == \"APPLICATION/MANIFEST/\" ) {\n            if ( name && launchable ) {\n                # If the name doesn't contain any dot, we consider\n                # that it is just missing the initial one.\n                if (index(name, \".\") == 0) {\n                    name = \".\" name\n                }\n                print name;\n            }\n        }\n        # When entering an <intent-filter> inside an <activity>, clear\n        # the 'action' and 'category' variables. They are updated when\n        # we enter the corresponding elements within the intent-filter.\n        else if ( event == \"BEGIN-INTENT-FILTER\" &&\n                 XML_RPATH == \"INTENT-FILTER/ACTIVITY/APPLICATION/MANIFEST/\" ) {\n            action_main = 0;\n            category_launcher = 0;\n        }\n        # When exiting an <intent-filter>, set the 'launchable' flag to true\n        # for the current activity if both 'action' and 'category' have the\n        # correct name.\n        else if ( event == \"END-INTENT-FILTER\" &&\n                  XML_RPATH == \"ACTIVITY/APPLICATION/MANIFEST/\" ) {\n            if ( category_launcher ) {\n                launchable = 1;\n            }\n        }\n        # When entering an <action> element inside an <intent-filter>, record\n        # its name.\n        else if ( event == \"BEGIN-ACTION\" &&\n                  XML_RPATH == \"ACTION/INTENT-FILTER/ACTIVITY/APPLICATION/MANIFEST/\" ) {\n            action_main = 0;\n            if ( XML_ATTR[\"android:name\"] == \"android.intent.action.MAIN\" ) {\n                action_main = 1;\n            }\n        }\n        # When entering a <category> element inside an <intent-filter>, record\n        # its name.\n        else if ( event == \"BEGIN-CATEGORY\" &&\n                  XML_RPATH == \"CATEGORY/INTENT-FILTER/ACTIVITY/APPLICATION/MANIFEST/\" ) {\n            if ( action_main && XML_ATTR[\"android:name\"] == \"android.intent.category.LAUNCHER\" ) {\n                category_launcher = 1;\n            }\n        }\n    }\n}\n\n\n#\n# the following is copied directly from xml.awk - see this file for\n# usage and implementation details.\n#\nfunction xml_event () {\n    RS=\">\";\n    XML_TAG=XML_TYPE=\"\";\n    split(\"\", XML_ATTR);\n    while ( 1 ) {\n        if (_xml_closing) { # delayed direct tag closure\n            XML_TAG = _xml_closing;\n            XML_TYPE = \"END\";\n            _xml_closing = \"\";\n            _xml_exit(XML_TAG);\n            return 1;\n        }\n        if (getline <= 0) return 0; # read new input line\n        _xml_p = index($0, \"<\"); # get start marker\n        if (_xml_p == 0) return 0; # end of file (or malformed input)\n        $0 = substr($0, _xml_p) # remove anything before '<'\n        # ignore CData / Comments / Processing instructions / Declarations\n        if (_xml_in_section(\"<!\\\\[[Cc][Dd][Aa][Tt][Aa]\\\\[\", \"]]\") ||\n            _xml_in_section(\"<!--\", \"--\") ||\n            _xml_in_section(\"<\\\\?\", \"\\\\?\") ||\n            _xml_in_section(\"<!\", \"\")) {\n            continue;\n        }\n        if (substr($0, 1, 2) == \"</\") { # is it a closing tag ?\n            XML_TYPE = \"END\";\n            $0 = substr($0, 3);\n        } else { # nope, it's an opening one\n            XML_TYPE = \"BEGIN\";\n            $0 = substr($0, 2);\n        }\n        XML_TAG = $0\n        sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # extract tag name\n        XML_TAG = toupper(XML_TAG);       # uppercase it\n        if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ )  # validate it\n            _xml_panic(\"Invalid tag name: \" XML_TAG);\n        if (XML_TYPE == \"BEGIN\") {  # update reverse path\n            _xml_enter(XML_TAG);\n        } else {\n            _xml_exit(XML_TAG);\n        }\n        sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0); # get rid of tag and spaces\n        while ($0) { # process attributes\n            if ($0 == \"/\") {  # deal with direct closing tag, e.g. </foo>\n                _xml_closing = XML_TAG; # record delayed tag closure.\n                break\n            }\n            _xml_attrib = $0;\n            sub(/=.*$/,\"\",_xml_attrib);  # extract attribute name\n            sub(/^[^=]*/,\"\",$0);         # remove it from record\n            _xml_attrib = tolower(_xml_attrib);\n            if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ ) # validate it\n                _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n            if (substr($0,1,2) == \"=\\\"\") { # value is =\"something\"\n                _xml_value = substr($0,3);\n                sub(/\".*$/,\"\",_xml_value);\n                sub(/^=\"[^\"]*\"/,\"\",$0);\n            } else if (substr($0,1,2) == \"='\") { # value is ='something'\n                _xml_value = substr($0,3);\n                sub(/'.*$/,\"\",_xml_value);\n                sub(/^='[^']*'/,\"\",$0);\n            } else {\n                _xml_panic(\"Invalid attribute value syntax for \" _xml_attrib \": \" $0);\n            }\n            XML_ATTR[_xml_attrib] = _xml_value;  # store attribute name/value\n            sub(/^[ \\t\\r\\n]*/,\"\",$0); # get rid of remaining leading spaces\n        }\n        return 1; # now return, XML_TYPE/TAG/ATTR/RPATH are set\n    }\n}\n\nfunction _xml_panic (msg) {\n    print msg > \"/dev/stderr\"\n    exit(1)\n}\n\nfunction _xml_in_section (sec_begin, sec_end) {\n    if (!match( $0, \"^\" sec_begin )) return 0;\n    while (!match($0, sec_end \"$\")) {\n        if (getline <= 0) _xml_panic(\"Unexpected EOF: \" ERRNO);\n    }\n    return 1;\n}\n\nfunction _xml_enter (tag) {\n    XML_RPATH = tag \"/\" XML_RPATH;\n}\n\nfunction _xml_exit (tag) {\n    _xml_p = index(XML_RPATH, \"/\");\n    _xml_expected = substr(XML_RPATH, 1, _xml_p-1);\n    if (_xml_expected != XML_TAG)\n        _xml_panic(\"Unexpected close tag: \" XML_TAG \", expecting \" _xml_expected);\n    XML_RPATH = substr(XML_RPATH, _xml_p+1);\n}\n"
  },
  {
    "path": "build/awk/extract-minsdkversion.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# A nawk/gawk script used to extract the value of min. SDK version from an\n# application's manifest (i.e. AndroidManifest.xml). Usage:\n#\n#   awk -f <this-script> AndroidManifest.xml\n#\n\nBEGIN {\n    MIN_SDK_VERSION = \"\";\n    while ( xml_event() ) {\n        # simply extract the 'android:minSdkVersion' attribute value from\n        # the first <manifest><uses-sdk> element we find.\n        if ( XML_TYPE == \"BEGIN\" && XML_TAG == \"USES-SDK\" &&\n             XML_RPATH == \"USES-SDK/MANIFEST/\" ) {\n            MIN_SDK_VERSION = XML_ATTR[\"android:minsdkversion\"];\n            break;\n        }\n    }\n\n    print MIN_SDK_VERSION;\n}\n\n#\n# the following is copied directly from xml.awk - see this file for\n# usage and implementation details.\n#\nfunction xml_event () {\n    RS=\">\";\n    XML_TAG=XML_TYPE=\"\";\n    split(\"\", XML_ATTR);\n    while ( 1 ) {\n        if (_xml_closing) { # delayed direct tag closure\n            XML_TAG = _xml_closing;\n            XML_TYPE = \"END\";\n            _xml_closing = \"\";\n            _xml_exit(XML_TAG);\n            return 1;\n        }\n        if (getline <= 0) return 0; # read new input line\n        _xml_p = index($0, \"<\"); # get start marker\n        if (_xml_p == 0) return 0; # end of file (or malformed input)\n        $0 = substr($0, _xml_p) # remove anything before '<'\n        # ignore CData / Comments / Processing instructions / Declarations\n        if (_xml_in_section(\"<!\\\\[[Cc][Dd][Aa][Tt][Aa]\\\\[\", \"]]\") ||\n            _xml_in_section(\"<!--\", \"--\") ||\n            _xml_in_section(\"<\\\\?\", \"\\\\?\") ||\n            _xml_in_section(\"<!\", \"\")) {\n            continue;\n        }\n        if (substr($0, 1, 2) == \"</\") { # is it a closing tag ?\n            XML_TYPE = \"END\";\n            $0 = substr($0, 3);\n        } else { # nope, it's an opening one\n            XML_TYPE = \"BEGIN\";\n            $0 = substr($0, 2);\n        }\n        XML_TAG = $0\n        sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # extract tag name\n        XML_TAG = toupper(XML_TAG);       # uppercase it\n        if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ )  # validate it\n            _xml_panic(\"Invalid tag name: \" XML_TAG);\n        if (XML_TYPE == \"BEGIN\") {  # update reverse path\n            _xml_enter(XML_TAG);\n        } else {\n            _xml_exit(XML_TAG);\n        }\n        sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0); # get rid of tag and spaces\n        while ($0) { # process attributes\n            if ($0 == \"/\") {  # deal with direct closing tag, e.g. </foo>\n                _xml_closing = XML_TAG; # record delayed tag closure.\n                break\n            }\n            _xml_attrib = $0;\n            sub(/=.*$/,\"\",_xml_attrib);  # extract attribute name\n            sub(/^[^=]*/,\"\",$0);         # remove it from record\n            _xml_attrib = tolower(_xml_attrib);\n            if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ ) # validate it\n                _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n            if (substr($0,1,2) == \"=\\\"\") { # value is =\"something\"\n                _xml_value = substr($0,3);\n                sub(/\".*$/,\"\",_xml_value);\n                sub(/^=\"[^\"]*\"/,\"\",$0);\n            } else if (substr($0,1,2) == \"='\") { # value is ='something'\n                _xml_value = substr($0,3);\n                sub(/'.*$/,\"\",_xml_value);\n                sub(/^='[^']*'/,\"\",$0);\n            } else {\n                _xml_panic(\"Invalid attribute value syntax for \" _xml_attrib \": \" $0);\n            }\n            XML_ATTR[_xml_attrib] = _xml_value;  # store attribute name/value\n            sub(/^[ \\t\\r\\n]*/,\"\",$0); # get rid of remaining leading spaces\n        }\n        return 1; # now return, XML_TYPE/TAG/ATTR/RPATH are set\n    }\n}\n\nfunction _xml_panic (msg) {\n    print msg > \"/dev/stderr\"\n    exit(1)\n}\n\nfunction _xml_in_section (sec_begin, sec_end) {\n    if (!match( $0, \"^\" sec_begin )) return 0;\n    while (!match($0, sec_end \"$\")) {\n        if (getline <= 0) _xml_panic(\"Unexpected EOF: \" ERRNO);\n    }\n    return 1;\n}\n\nfunction _xml_enter (tag) {\n    XML_RPATH = tag \"/\" XML_RPATH;\n}\n\nfunction _xml_exit (tag) {\n    _xml_p = index(XML_RPATH, \"/\");\n    _xml_expected = substr(XML_RPATH, 1, _xml_p-1);\n    if (_xml_expected != XML_TAG)\n        _xml_panic(\"Unexpected close tag: \" XML_TAG \", expecting \" _xml_expected);\n    XML_RPATH = substr(XML_RPATH, _xml_p+1);\n}\n"
  },
  {
    "path": "build/awk/extract-package-name.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# A nawk/gawk script used to extract the package name from an application's\n# manifest (i.e. AndroidManifest.xml). Usage is:\n#\n#   awk -f <this-script> AndroidManifest.xml\n#\n# The name itself is the value of the 'package' attribute in the\n# 'manifest' element.\n#\n\nBEGIN {\n    PACKAGE=\"\";\n    while (xml_event()) {\n        # Simply extract the value of the 'name' attribute from\n        # the top-level <manifest> element.\n        if ( XML_TYPE == \"BEGIN\" && XML_RPATH == \"MANIFEST/\" ) {\n            PACKAGE = XML_ATTR[\"package\"];\n            break;\n        }\n    }\n    if (!PACKAGE)\n        PACKAGE = \"<none>\";\n\n    print PACKAGE;\n}\n\n#\n# the following is copied directly from xml.awk - see this file for\n# usage and implementation details.\n#\nfunction xml_event () {\n    RS=\">\";\n    XML_TAG=XML_TYPE=\"\";\n    split(\"\", XML_ATTR);\n    while ( 1 ) {\n        if (_xml_closing) { # delayed direct tag closure\n            XML_TAG = _xml_closing;\n            XML_TYPE = \"END\";\n            _xml_closing = \"\";\n            _xml_exit(XML_TAG);\n            return 1;\n        }\n        if (getline <= 0) return 0; # read new input line\n        _xml_p = index($0, \"<\"); # get start marker\n        if (_xml_p == 0) return 0; # end of file (or malformed input)\n        $0 = substr($0, _xml_p) # remove anything before '<'\n        # ignore CData / Comments / Processing instructions / Declarations\n        if (_xml_in_section(\"<!\\\\[[Cc][Dd][Aa][Tt][Aa]\\\\[\", \"]]\") ||\n            _xml_in_section(\"<!--\", \"--\") ||\n            _xml_in_section(\"<\\\\?\", \"\\\\?\") ||\n            _xml_in_section(\"<!\", \"\")) {\n            continue;\n        }\n        if (substr($0, 1, 2) == \"</\") { # is it a closing tag ?\n            XML_TYPE = \"END\";\n            $0 = substr($0, 3);\n        } else { # nope, it's an opening one\n            XML_TYPE = \"BEGIN\";\n            $0 = substr($0, 2);\n        }\n        XML_TAG = $0\n        sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # extract tag name\n        XML_TAG = toupper(XML_TAG);       # uppercase it\n        if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ )  # validate it\n            _xml_panic(\"Invalid tag name: \" XML_TAG);\n        if (XML_TYPE == \"BEGIN\") {  # update reverse path\n            _xml_enter(XML_TAG);\n        } else {\n            _xml_exit(XML_TAG);\n        }\n        sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0); # get rid of tag and spaces\n        while ($0) { # process attributes\n            if ($0 == \"/\") {  # deal with direct closing tag, e.g. </foo>\n                _xml_closing = XML_TAG; # record delayed tag closure.\n                break\n            }\n            _xml_attrib = $0;\n            sub(/=.*$/,\"\",_xml_attrib);  # extract attribute name\n            sub(/^[^=]*/,\"\",$0);         # remove it from record\n            _xml_attrib = tolower(_xml_attrib);\n            if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ ) # validate it\n                _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n            if (substr($0,1,2) == \"=\\\"\") { # value is =\"something\"\n                _xml_value = substr($0,3);\n                sub(/\".*$/,\"\",_xml_value);\n                sub(/^=\"[^\"]*\"/,\"\",$0);\n            } else if (substr($0,1,2) == \"='\") { # value is ='something'\n                _xml_value = substr($0,3);\n                sub(/'.*$/,\"\",_xml_value);\n                sub(/^='[^']*'/,\"\",$0);\n            } else {\n                _xml_panic(\"Invalid attribute value syntax for \" _xml_attrib \": \" $0);\n            }\n            XML_ATTR[_xml_attrib] = _xml_value;  # store attribute name/value\n            sub(/^[ \\t\\r\\n]*/,\"\",$0); # get rid of remaining leading spaces\n        }\n        return 1; # now return, XML_TYPE/TAG/ATTR/RPATH are set\n    }\n}\n\nfunction _xml_panic (msg) {\n    print msg > \"/dev/stderr\"\n    exit(1)\n}\n\nfunction _xml_in_section (sec_begin, sec_end) {\n    if (!match( $0, \"^\" sec_begin )) return 0;\n    while (!match($0, sec_end \"$\")) {\n        if (getline <= 0) _xml_panic(\"Unexpected EOF: \" ERRNO);\n    }\n    return 1;\n}\n\nfunction _xml_enter (tag) {\n    XML_RPATH = tag \"/\" XML_RPATH;\n}\n\nfunction _xml_exit (tag) {\n    _xml_p = index(XML_RPATH, \"/\");\n    _xml_expected = substr(XML_RPATH, 1, _xml_p-1);\n    if (_xml_expected != XML_TAG)\n        _xml_panic(\"Unexpected close tag: \" XML_TAG \", expecting \" _xml_expected);\n    XML_RPATH = substr(XML_RPATH, _xml_p+1);\n}\n"
  },
  {
    "path": "build/awk/extract-pid.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Extract the pid of a given package name. This assumes that the\n# input is the product of 'adb shell ps' with all \\r\\n line endings\n# converted to \\n, and that the PACKAGE variable has been initialized\n# to the package's name. In other words, this should be used as:\n#\n#   adb shell ps | awk -f <this-script> -v PACKAGE=<name>\n#\n# The printed value will be 0 if the package is not found.\n#\n\nBEGIN {\n    FS=\" \"\n\n    # A default package name, used _only_ for unit-testing\n    # com.google.android.apps.maps is interesting because\n    # in our unit test input files, 'ps' lists several sub-processes\n    # that implement services (e.g. com.google.android.apps.maps:<something>)\n    # and we explicitely don't want to match them.\n    #\n    if (PACKAGE == \"\") {\n        PACKAGE=\"com.google.android.apps.maps\"\n    }\n\n    PID=0\n\n    # The default column where we expect the PID to appear, this\n    # matches the default Android toolbox 'ps', but some devices seem\n    # to have a different version installed (e.g. Busybox) that place\n    # it somewhere else. We will probe the output to detect this, but\n    # this is a good fallback value.\n    PID_COLUMN=2\n}\n\n{\n    # First, remove any trailing \\r from the input line. This is important\n    # because the output of \"adb shell <cmd>\" seems to use \\r\\n line ending.\n    gsub(\"\\r\",\"\",$NF)\n\n    if (NR == 1) {\n        # The first line of the 'ps' output should list the columns, so we're going\n        # to parse it to try to update PID_COLUMN\n        for (n = 1; n <= NF; n++) {\n            if ($n == \"PID\") {\n                PID_COLUMN=n;\n            }\n        }\n    } else {\n        # Not the first line, compare the package name, which shall always\n        # be the last field.\n    if ($NF == PACKAGE) {\n        PID=$PID_COLUMN\n        }\n    }\n}\n\nEND {\n    print PID\n}\n"
  },
  {
    "path": "build/awk/extract-platform.awk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# A nawk/gawk script used to extract the application's platform name from\n# its project.properties file. It is called from build/core/add-application.mk\n#\n\n# we look for a line that looks like one of:\n#    target=android-<api>\n#    target=<vendor>:<name>:<api>\n#\n# <api> is a number, but can also be \"Donut\" for the first form,\n# as a special case.\n#\nBEGIN {\n    android_regex=\"android-[0-9A-Za-z_-]+\"\n    vendor_regex=\":[0-9]+\\\\s*$\"\n    API=unknown\n}\n\n/^target\\s*=\\s*.*/ {\n    if (match($0,android_regex)) {\n        API=substr($0,RSTART,RLENGTH)\n    }\n    else if (match($0,vendor_regex)) {\n        API=\"android-\" substr($0,RSTART+1,RLENGTH)\n    }\n}\n\nEND {\n    printf(\"%s\", API)\n}\n"
  },
  {
    "path": "build/awk/gen-cygwin-deps-converter.awk",
    "content": "# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is used to generate a shell script that will be\n# run by the NDK build system to process dependency files generated by\n# GCC on Windows, and convert them to a format that is suitable for\n# Cygwin's GNU Make.\n#\n# The main issue to solve here is that the dependency files generated\n# by GCC use native windows path names, as in:\n#\n#    C:/Foo/foo.o: \\\n#      C:/Foo/src/foo.h \\\n#      C:/Foo/src/foo.c \\\n#      D:/Bar/bar/bar.h\n#\n# And the file needs to be processed to convert each such path into\n# a Cygwin-specific one, as in:\n#\n#    /cygdrive/c/Foo/foo.o: \\\n#      /cygdrive/c/Foo/src/foo.h \\\n#      /cygdrive/c/Foo/src/foo.c \\\n#      /cygdrive/d/Bar/bar/bar.h\n#\n# Previously, this conversion was done with an awk script that assumed\n# that the cygwin drive prefix was always 'cygdrive'. This didn't work\n# well when this was not the case, or when using drive-less mounts\n# (e.g. when  /home/mnt would map to //server/subdir)\n#\n# To solve the issue correctly, we need to parse the output of the\n# Cygwin mount table (i.e. the output of the 'mount' command), and\n# build a sed script that will properly replace host paths into the\n# corresponding cygwin equivalent.\n#\n# NOTE: The sed script will be run during command execution, not during the\n# parse phase.\n#\n# This awk script expects its input to be the output of the Cygwin \"mount\" command\n# as in:\n#\n#  C:/cygwin/bin on /usr/bin type ntfs (binary,auto)\n#  C:/cygwin/lib on /usr/lib type ntfs (binary,auto)\n#  C:/cygwin on / type ntfs (binary,auto)\n#  C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)\n#  D: on /cygdrive/d type udf (binary,posix=0,user,noumount,auto)\n#  //server/subdir on /home/mnt.2$ type ....\n#\n# It first builds a sed script that convert all windows path in the\n# an input file into the cygwin equivalent. For example, this would look\n# like the following (but all on a single line):\n#\n#  s!^//server/subdir!/home/mnt\\.2\\$!ig;\n#  s! //server/subdir! /home/mnt\\.2\\$!ig;\n#  s!^C:/cygwin/bin!/usr/bin!ig;\n#  s! C:/cygwin/bin! /usr/bin!ig;\n#  s!^C:/cygwin/lib!/usr/lib!ig;\n#  s! C:/cygwin/lib! /usr/lib!ig;\n#  s!^C:/cygwin/!/!ig;\n#  s! C:/cygwin/! /!ig;\n#  s!^C:!/cygdrive/c!ig;\n#  s! C:! /cygdrive/c!ig;\n#  s!^D:!/cygdrive/d!ig;\n#  s! D:! /cygdrive/d!ig;\n#\n# Note that we properly escape regex meta characters like . or $\n# to avoid confusing sed. Also deal with the cases where the path\n# is the first in the line, or prefixed with a space in the deps file.\n#\n# After this, the sed invokation is hard-coded into a generated shell\n# script that can be invoked directly at build time.\n#\nBEGIN {\n  # setup our count\n  count = 0\n}\n\n$2 == \"on\" {\n    # record a new (host-path,cygwin-path) pair\n    count ++\n\n    # Convert backwards slashes into forward ones in the host path.\n    # This is to support MSys' mount command, which outputs Windows-style\n    # separators, unlike Cygwin's version of the same tool.\n    gsub(\"\\\\\\\\\",\"/\",$1)\n\n    host[count] = $1\n    cygwin[count] = $3\n}\n\nEND {\n    # We have recorded all (host,cygwin) path pairs,\n    # now try to sort them so that the ones with the longest host path\n    # appear first\n    for (ii = 2; ii <= count; ii++) {\n        for (jj = ii-1; jj > 0; jj--) {\n            if (length(host[jj]) > length(host[jj+1])) {\n                break;\n            }\n            if (length(host[jj]) == length(host[jj+1]) &&\n                host[jj] > host[jj+1]) {\n                break\n            }\n            tmp = cygwin[jj]\n            cygwin[jj] = cygwin[jj+1]\n            cygwin[jj+1] = tmp\n            tmp = host[jj]\n            host[jj] = host[jj+1]\n            host[jj+1] = tmp\n        }\n    }\n\n    # build/core/init.mk defines VERBOSE to 1 when it needs to dump the\n    # list of substitutions in a human-friendly format, generally when\n    # NDK_LOG is defined in the environment\n    #\n    # Otherwise, just generate the corresponding sed script\n    #\n    if (VERBOSE == 1) {\n        for (nn = 1; nn <= count; nn++) {\n            printf( \"$(info %s => %s)\", cygwin[nn], host[nn]);\n        }\n    } else {\n        RESULT = \"\"\n        for (nn = 1; nn <= count; nn++) {\n            add_drive_rule(host[nn], cygwin[nn])\n        }\n\n        # Note: the role of the generated shell script is to first check\n        #       that $1.org exists. If this is not the case, this simply\n        #       means that GCC didn't generate a depedency file (e.g. when\n        #       compiling an assembler file).\n        #\n        #       If the file exists, it is processed with our sed script,\n        #       the output is written to $1, and we remove the original $1.org\n        #\n        print \"#!/bin/sh\"\n        print \"# AUTO-GENERATED FILE, DO NOT EDIT!\"\n        print \"if [ -f $1.org ]; then\"\n        print \"  sed -e '\" RESULT \"' $1.org > $1 && rm -f $1.org\"\n        print \"fi\"\n    }\n}\n\n# We need to quote some characters so that 'sed' doesn't\n# believe they are regex operators. For example, if a path\n# contains a dot (.), we need to escape it into \"\\.\"\n#\nfunction sed_quote_path (str)\n{\n    # Windows path names cannot contain any of: <>:\"|?*\n    # see msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx\n    #\n    # Anything else is valid. The regex meta characters are: ^.[]$()|*+?{}\\\n    #\n    # This means we need to escape these when they appear in path names: ^.[]$()+{}\\\n    #\n    gsub(\"\\\\^\",\"\\\\^\",str)\n    gsub(\"\\\\.\",\"\\\\.\",str)\n    gsub(\"\\\\[\",\"\\\\[\",str)\n    gsub(\"\\\\]\",\"\\\\]\",str)\n    gsub(\"\\\\$\",\"\\\\$\",str)\n    gsub(\"\\\\(\",\"\\\\(\",str)\n    gsub(\"\\\\)\",\"\\\\)\",str)\n    gsub(\"\\\\+\",\"\\\\+\",str)\n    gsub(\"\\\\{\",\"\\\\{\",str)\n    gsub(\"\\\\}\",\"\\\\}\",str)\n\n    return str\n}\n\nfunction add_drive_rule (hostpath,cygpath)\n{\n    hostpath = sed_quote_path(hostpath)\n\tcygpath = sed_quote_path(cygpath)\n\t\n    # The root directory is a special case, because we need\n\t# to add a slash at the end of the corresponding host path\n\t# otherwise c:/cygwin/foo will be translated into //foo\n\t# instead of /foo.\n\t#\n    if (cygpath == \"/\") {\n        hostpath = hostpath \"/\"\n    }\n\t# when the hostpath starts the line\n    RESULT = RESULT \"s!^\" hostpath \"!\" cygpath \"!ig;\"\n\n\t# when the hostpath does not start the line (it will always be after a space)\n\tRESULT = RESULT \"s! \" hostpath \"! \" cygpath \"!ig;\"\n}\n"
  },
  {
    "path": "build/awk/gen-windows-host-path.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is used to generate a Makefile fragment that will be evaluated\n# at runtime by the NDK build system during its initialization pass.\n#\n# The purpose of this generated fragment is to define a function, named\n# 'cygwin-to-host-path' that will transform a Cygwin-specific path into the\n# corresponding Windows specific one, i.e. calling\n#\n#   $(call cygwin-to-host-path,/cygdrive/c/Stuff/)  --> c:/Stuff\n#\n# A naive implementation of this function would be the following:\n#\n#   cygwin-to-host-path = $(shell cygpath -m $1)\n#\n# Unfortunately, calling 'cygpath -m' from GNU Make is horridly slow and people\n# have complained that this was adding several minutes to their builds, even in\n# the case where there is nothing to do.\n#\n# The script expects its input to be the output of the Cygwin \"mount\" command\n# as in:\n#\n#  C:/cygwin/bin on /usr/bin type ntfs (binary,auto)\n#  C:/cygwin/lib on /usr/lib type ntfs (binary,auto)\n#  C:/cygwin on / type ntfs (binary,auto)\n#  C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)\n#  D: on /cygdrive/d type udf (binary,posix=0,user,noumount,auto)\n#\n# The script's output will be passed to the GNU Make 'eval' function\n# and will look like:\n#\n#  $(patsubst /%,C:/cygwin/,\n#  $(patsubst /usr/bin/%,C:/cygwin/bin/,\n#  $(patsubst /usr/lib/%,C:/cygwin/lib/,\n#  $(patsubst /cygdrive/C/%,C:/,\n#  $(patsubst /cygdrive/D/%,D:/,\n#  $(patsubst /cygdrive/c/%,C:/,\n#  $(patsubst /cygdrive/d/%,D:/,$1)))))\n#\nBEGIN {\n  # setup our count\n  count = 0\n}\n\n$2 == \"on\" {\n    # record a new (host-path,cygwin-path) pair\n    count ++\n    host[count] = $1\n    cygwin[count] = $3\n}\n\nEND {\n    # Drive letters are special cases because we must match both\n    # the upper and lower case versions to the same drive, i.e.\n    # if \"mount\" lists that /cygdrive/c maps to C:, we need to\n    # map both /cygdrive/c and /cygdrive/C to C: in our final rules.\n    #\n    count1 = count\n    for (nn = 1; nn <= count1; nn++) {\n        if (!match(host[nn],\"^[A-Za-z]:$\")) {\n            # not a driver letter mapping, skip this pair\n            continue\n        }\n        letter = substr(host[nn],1,1)\n        lo     = tolower(letter)\n        up     = toupper(letter)\n\n        # If the cygwin path ends in /<lo>, then substitute it with /<up>\n        # to create a new pair.\n        if (match(cygwin[nn],\"/\"lo\"$\")) {\n            count++\n            host[count] = host[nn]\n            cygwin[count] = substr(cygwin[nn],1,length(cygwin[nn])-1) up\n            continue\n        }\n\n        # If the cygwin path ends in /<up>, then substitute it with /<lo>\n        # to create a new pair.\n        if (match(cygwin[nn],\"/\"up\"$\")) {\n            count++\n            host[count] = host[nn]\n            cygwin[count] = substr(cygwin[nn],1,length(cygwin[nn])-1) lo\n            continue\n        }\n    }\n\n    # We have recorded all (host,cygwin) path pairs,\n    # now try to sort them so that the ones with the longest cygwin path\n    # appear first\n    for (ii = 2; ii <= count; ii++) {\n        for (jj = ii-1; jj > 0; jj--) {\n            if (length(cygwin[jj]) > length(cygwin[jj+1])) {\n                break;\n            }\n            if (length(cygwin[jj]) == length(cygwin[jj+1]) &&\n                cygwin[jj] > cygwin[jj+1]) {\n                break\n            }\n            tmp = cygwin[jj]\n            cygwin[jj] = cygwin[jj+1]\n            cygwin[jj+1] = tmp\n            tmp = host[jj]\n            host[jj] = host[jj+1]\n            host[jj+1] = tmp\n        }\n    }\n\n    # build/core/init.mk defines VERBOSE to 1 when it needs to dump the\n    # list of substitutions in a human-friendly format, generally when\n    # NDK_LOG is defined in the environment\n    #\n    # Otherwise, just generate the corresponding Make function definition\n    #\n    if (VERBOSE == 1) {\n        for (nn = 1; nn <= count; nn++) {\n            printf( \"$(info %s => %s)\", cygwin[nn], host[nn]);\n        }\n    } else {\n        RESULT = \"$1\"\n        for (nn = 1; nn <= count; nn++) {\n            add_drive_rule(host[nn], cygwin[nn])\n        }\n        print RESULT\n    }\n}\n\nfunction add_drive_rule (hostpath,cygpath)\n{\n    if (cygpath == \"/\") {\n        # Special case for /\n        RESULT = \"$(patsubst /%,\" hostpath \"/%,\\n\" RESULT \")\"\n        return\n    }\n    # default rule otherwise\n    RESULT = \"$(patsubst \" cygpath \"/%,\" hostpath \"/%,\\n\" RESULT \")\"\n}\n"
  },
  {
    "path": "build/awk/xml.awk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Tiny XML parser implementation in awk.\n#\n# This file is not meant to be used directly, instead copy the\n# functions it defines here into your own script then specialize\n# it appropriately.\n#\n\n# See further below for usage instructions and implementation details.\n#\n\n# ---------------------------- cut here ---------------------------\n\nfunction xml_event () {\n    RS=\">\";\n    XML_TAG=XML_TYPE=\"\";\n    split(\"\", XML_ATTR);\n    while ( 1 ) {\n        if (_xml_closing) { # delayed direct tag closure\n            XML_TAG = _xml_closing;\n            XML_TYPE = \"END\";\n            _xml_closing = \"\";\n            _xml_exit(XML_TAG);\n            return 1;\n        }\n        if (getline <= 0) return 0; # read new input line\n        _xml_p = index($0, \"<\"); # get start marker\n        if (_xml_p == 0) return 0; # end of file (or malformed input)\n        $0 = substr($0, _xml_p) # remove anything before '<'\n        # ignore CData / Comments / Processing instructions / Declarations\n        if (_xml_in_section(\"<!\\\\[[Cc][Dd][Aa][Tt][Aa]\\\\[\", \"]]\") ||\n            _xml_in_section(\"<!--\", \"--\") ||\n            _xml_in_section(\"<\\\\?\", \"\\\\?\") ||\n            _xml_in_section(\"<!\", \"\")) {\n            continue;\n        }\n        if (substr($0, 1, 2) == \"</\") { # is it a closing tag ?\n            XML_TYPE = \"END\";\n            $0 = substr($0, 3);\n        } else { # nope, it's an opening one\n            XML_TYPE = \"BEGIN\";\n            $0 = substr($0, 2);\n        }\n        XML_TAG = $0\n        sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # extract tag name\n        XML_TAG = toupper(XML_TAG);       # uppercase it\n        if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ )  # validate it\n            _xml_panic(\"Invalid tag name: \" XML_TAG);\n        if (XML_TYPE == \"BEGIN\") {  # update reverse path\n            _xml_enter(XML_TAG);\n        } else {\n            _xml_exit(XML_TAG);\n        }\n        sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0); # get rid of tag and spaces\n        while ($0) { # process attributes\n            if ($0 == \"/\") {  # deal with direct closing tag, e.g. </foo>\n                _xml_closing = XML_TAG; # record delayed tag closure.\n                break\n            }\n            _xml_attrib = $0;\n            sub(/=.*$/,\"\",_xml_attrib);  # extract attribute name\n            sub(/^[^=]*/,\"\",$0);         # remove it from record\n            _xml_attrib = tolower(_xml_attrib);\n            if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ ) # validate it\n                _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n            if (substr($0,1,2) == \"=\\\"\") { # value is =\"something\"\n                _xml_value = substr($0,3);\n                sub(/\".*$/,\"\",_xml_value);\n                sub(/^=\"[^\"]*\"/,\"\",$0);\n            } else if (substr($0,1,2) == \"='\") { # value is ='something'\n                _xml_value = substr($0,3);\n                sub(/'.*$/,\"\",_xml_value);\n                sub(/^='[^']*'/,\"\",$0);\n            } else {\n                _xml_panic(\"Invalid attribute value syntax for \" _xml_attrib \": \" $0);\n            }\n            XML_ATTR[_xml_attrib] = _xml_value;  # store attribute name/value\n            sub(/^[ \\t\\r\\n]*/,\"\",$0); # get rid of remaining leading spaces\n        }\n        return 1; # now return, XML_TYPE/TAG/ATTR/RPATH are set\n    }\n}\n\nfunction _xml_panic (msg) {\n    print msg > \"/dev/stderr\"\n    exit(1)\n}\n\nfunction _xml_in_section (sec_begin, sec_end) {\n    if (!match( $0, \"^\" sec_begin )) return 0;\n    while (!match($0, sec_end \"$\")) {\n        if (getline <= 0) _xml_panic(\"Unexpected EOF: \" ERRNO);\n    }\n    return 1;\n}\n\nfunction _xml_enter (tag) {\n    XML_RPATH = tag \"/\" XML_RPATH;\n}\n\nfunction _xml_exit (tag) {\n    _xml_p = index(XML_RPATH, \"/\");\n    _xml_expected = substr(XML_RPATH, 1, _xml_p-1);\n    if (_xml_expected != XML_TAG)\n        _xml_panic(\"Unexpected close tag: \" XML_TAG \", expecting \" _xml_expected);\n    XML_RPATH = substr(XML_RPATH, _xml_p+1);\n}\n\n# ---------------------------- cut here ---------------------------\n\n# USAGE:\n#\n# The functions provided here are used to extract the tags and attributes of a\n# given XML file. They do not support extraction of data, CDATA, comments,\n# processing instructions and declarations at all.\n#\n# You should use this from the BEGIN {} action of your awk script (it will\n# not work from an END {} action).\n#\n# Call xml_event() in a while loop. This functions returns 1 for each XML\n# 'event' encountered, or 0 when the end of input is reached. Note that in\n# case of malformed output, an error will be printed and the script will\n# force an exit(1)\n#\n# After each succesful xml_event() call, the following variables will be set:\n#\n#    XML_TYPE:  type of event: \"BEGIN\" -> mean an opening tag, \"END\" a\n#               closing one.\n#\n#    XML_TAG:   name of the tag, always in UPPERCASE!\n#\n#    XML_ATTR:  a map of attributes for the type. Only set for \"BEGIN\" types.\n#               all attribute names are in lowercase.\n#\n#               beware: values are *not* unescaped !\n#\n#    XML_RPATH: the _reversed_ element path, using \"/\" as a separator.\n#               if you are within the <manifest><application> tag, then\n#               it will be set to \"APPLICATION/MANIFEST/\"\n#               (note the trailing slash).\n#\n\n# This is a simple example that dumps the output of the parsing.\n#\nBEGIN {\n    while ( xml_event() ) {\n        printf \"XML_TYPE=%s XML_TAG=%s XML_RPATH=%s\", XML_TYPE, XML_TAG, XML_RPATH;\n        if (XML_TYPE == \"BEGIN\") {\n            for (attr in XML_ATTR) {\n                printf \" %s='%s'\", attr, XML_ATTR[attr];\n            }\n        }\n        printf \"\\n\";\n    }\n}\n\n# IMPLEMENTATION DETAILS:\n#\n# 1. '>' as the record separator:\n#\n# RS is set to '>' to use this character as the record separator, instead of\n# the default '\\n'. This means that something like the following:\n#\n#   <foo><bar attrib=\"value\">stuff</bar></foo>\n#\n# will be translated into the following successive 'records':\n#\n#  <foo\n#  <bar attrib=\"value\"\n#  stuff</bar\n#  </foo\n#\n# Note that the '>' is never part of the records and thus will not be matched.\n# If the record does not contain a single '<', the input is either\n# malformed XML, or we reached the end of file with data after the last\n# '>'.\n#\n# Newlines in the original input are kept in the records as-is.\n#\n# 2. Getting rid of unwanted stuff:\n#\n# We don't need any of the data within elements, so we get rid of them by\n# simply ignoring anything before the '<' in the current record. This is\n# done with code like this:\n#\n#     p = index($0, \"<\");       # get index of '<'\n#     if (p == 0) -> return 0;  # malformed input or end of file\n#     $0 = substr($0, p+1);     # remove anything before the '<' in record\n#\n# We also want to ignore certain sections like CDATA, comments, declarations,\n# etc.. These begin with a certain pattern and end with another one, e.g.\n# \"<!--\" and \"-->\" for comments. This is handled by the _xml_in_section()\n# function that accepts two patterns as input:\n#\n#    sec_begin: is the pattern for the start of the record.\n#    sec_end:   is the pattern for the end of the record (minus trailing '>').\n#\n# The function deals with the fact that these section can embed a valid '>'\n# and will then span multiple records, i.e. something like:\n#\n#  <!-- A comment with an embedded > right here ! -->\n#\n# will be decomposed into two records:\n#\n#   \"<!-- A comment with an embedded \"\n#   \" right here ! --\"\n#\n# The function deals with this case, and exits when such a section is not\n# properly terminated in the input.\n#\n# _xml_in_section() returns 1 if an ignorable section was found, or 0 otherwise.\n#\n# 3. Extracting the tag name:\n#\n# </foo> is a closing tag, and <foo> an opening tag, this is handled\n# by the following code:\n#\n#       if (substr($0, 1, 2) == \"</\") {\n#           XML_TYPE = \"END\";\n#           $0 = substr($0, 3);\n#       } else {\n#           XML_TYPE = \"BEGIN\";\n#           $0 = substr($0, 2);\n#       }\n#\n# which defines XML_TYPE, and removes the leading \"</\" or \"<\" from the record.\n# The tag is later extracted and converted to uppercase with:\n#\n#       XML_TAG = $0                        # copy record\n#       sub(\"[ \\r\\n\\t/].*$\", \"\", XML_TAG);  # remove anything after tag name\n#       XML_TAG = toupper(XML_TAG);         # conver to uppercase\n#       # validate tag\n#       if ( XML_TAG !~ /^[A-Z][-+_.:0-9A-Z]*$/ ) -> panic\n#\n# Then the record is purged from the tag name and the spaces after it:\n#\n#       # get rid of tag and spaces after it in $0\n#       sub(\"[^ \\r\\n\\t]*[ \\r\\n\\t]*\", \"\", $0);\n#\n# 4. Maintaining XML_RPATH:\n#\n# The _xml_enter() and _xml_exit() functions are called to maintain the\n# XML_RPATH variable when entering and exiting specific tags. _xml_exit()\n# will also validate the input, checking proper tag enclosure (or exit(1)\n# in case of error).\n#\n#       if (XML_TYPE == \"BEGIN\") {\n#           _xml_enter(XML_TAG);\n#       } else {\n#           _xml_exit(XML_TAG);\n#       }\n#\n# 5. Extracting attributes:\n#\n# A loop is implemented to parse attributes, the idea is to get the attribute\n# name, which is always followed by a '=' character:\n#\n#           _xml_attrib = $0;              # copy record.\n#           sub(/=.*$/,\"\",_xml_attrib);    # get rid of '=' and anything after.\n#           sub(/^[^=]*/,\"\",$0);           # remove attribute name from $0\n#           _xml_attrib = tolower(_xml_attrib);\n#           if ( _xml_attrib !~ /^[a-z][-+_0-9a-z:]*$/ )\n#               _xml_panic(\"Invalid attribute name: \" _xml_attrib);\n#\n# Now get the value, which is enclosed by either (\") or (')\n#\n#          if (substr($0,1,2) == \"=\\\"\") {        # if $0 begins with =\"\n#               _xml_value = substr($0,3);       # extract value\n#               sub(/\".*$/,\"\",_xml_value);  \n#               sub(/^=\"[^\"]*\"/,\"\",$0);          # remove it from $0\n#           } else if (substr($0,1,2) == \"='\") { # if $0 begins with ='\n#               _xml_value = substr($0,3);       # extract value\n#               sub(/'.*$/,\"\",_xml_value);\n#               sub(/^='[^']*'/,\"\",$0);          # remove it from $0\n#           } else {\n#               -> panic (malformed input)\n#           }\n#\n# After that, we simply store the value into the XML_ATTR associative\n# array, and cleanup $0 from leading spaces:\n#\n#           XML_ATTR[_xml_attrib] = _xml_value;\n#           sub(/^[ \\t\\r\\n]*/,\"\",$0);\n#\n#\n# 6. Handling direct tag closure:\n#\n# When a tag is closed directly (as in <foo/>), A single '/' will be\n# parsed in the attribute parsing loop. We need to record this for the\n# next call to xml_event(), since the current one should return a\"BEGIN\"\n# for the \"FOO\" tag instead.\n#\n# We do this by setting the special _xml_closing variable, as in:\n#\n#          if ($0 == \"/\") {\n#               # record a delayed tag closure for the next call\n#               _xml_closing = XML_TAG;\n#               break\n#           }\n#\n# This variable is checked at the start of xml_event() like this:\n#\n#       # delayed tag closure - see below\n#       if (_xml_closing) {\n#           XML_TAG = _xml_closing;\n#           XML_TYPE = \"END\";\n#           _xml_closing = \"\";\n#           _xml_exit(XML_TAG);\n#           return 1;\n#       }\n#\n# Note the call to _xml_exit() to update XML_RPATH here.\n#\n"
  },
  {
    "path": "build/core/add-application.mk",
    "content": "# Copyright (C) 2009, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this script is used to record an application definition in the\n# NDK build system, before performing any build whatsoever.\n#\n# It is included repeatedly from build/core/main.mk and expects a\n# variable named '_application_mk' which points to a given Application.mk\n# file that will be included here. The latter must define a few variables\n# to describe the application to the build system, and the rest of the\n# code here will perform book-keeping and basic checks\n#\n\n$(call assert-defined, _application_mk _app)\n$(call ndk_log,Parsing $(_application_mk))\n\n$(call clear-vars, $(NDK_APP_VARS))\n\n# Check that NDK_DEBUG is properly defined. If it is\n# the only valid states are: undefined, 0, 1, false and true\n#\n# We set APP_DEBUG to <undefined>, 'true' or 'false'.\n#\nAPP_DEBUG := $(strip $(NDK_DEBUG))\nifeq ($(APP_DEBUG),0)\n  APP_DEBUG:= false\nendif\nifeq ($(APP_DEBUG),1)\n  APP_DEBUG := true\nendif\nifdef APP_DEBUG\n  ifneq (,$(filter-out true false,$(APP_DEBUG)))\n    $(call __ndk_warning,NDK_DEBUG is defined to the unsupported value '$(NDK_DEBUG)', will be ignored!)\n  endif\nendif\n\ninclude $(_application_mk)\n\n$(call check-required-vars,$(NDK_APP_VARS_REQUIRED),$(_application_mk))\n\n_map := NDK_APP.$(_app)\n\n# strip the 'lib' prefix in front of APP_MODULES modules\nAPP_MODULES := $(call strip-lib-prefix,$(APP_MODULES))\n\nAPP_PROJECT_PATH := $(strip $(APP_PROJECT_PATH))\nifndef APP_PROJECT_PATH\n    APP_PROJECT_PATH := $(NDK_PROJECT_PATH)\nendif\n\nifeq (null,$(APP_PROJECT_PATH))\n\nifndef APP_PLATFORM\n    APP_PLATFORM := android-9\n    $(call ndk_log,  Defaulted to APP_PLATFORM=$(APP_PLATFORM))\nendif\n\nelse\n\n# check whether APP_PLATFORM is defined. If not, look for project.properties in\n# the $(APP_PROJECT_PATH) and extract the value with awk's help. If nothing is here,\n# revert to the default value (i.e. \"android-3\").\n#\nAPP_PLATFORM := $(strip $(APP_PLATFORM))\nifndef APP_PLATFORM\n    _local_props := $(strip $(wildcard $(APP_PROJECT_PATH)/project.properties))\n    ifndef _local_props\n        # NOTE: project.properties was called default.properties before\n        _local_props := $(strip $(wildcard $(APP_PROJECT_PATH)/default.properties))\n    endif\n    ifdef _local_props\n        APP_PLATFORM := $(strip $(shell $(HOST_AWK) -f $(BUILD_AWK)/extract-platform.awk $(call host-path,$(_local_props))))\n        $(call ndk_log,  Found APP_PLATFORM=$(APP_PLATFORM) in $(_local_props))\n    else\n        APP_PLATFORM := android-9\n        $(call ndk_log,  Defaulted to APP_PLATFORM=$(APP_PLATFORM))\n    endif\nendif\n\nifeq ($(APP_PLATFORM),android-L)\n$(call __ndk_warning,WARNING: android-L is renamed as android-21)\noverride APP_PLATFORM := android-21\nendif\n\nendif # APP_PROJECT_PATH == null\n\n# SPECIAL CASES:\n# 1) android-6 and android-7 are the same thing as android-5\n# 2) android-10 and android-11 are the same thing as android-9\n# 3) android-20 is the same thing as android-19\n# ADDITIONAL CASES for remote server where total number of files is limited\n# 5) android-13 is the same thing as android-12\n# 6) android-15 is the same thing as android-14\n# 7) android-17 is the same thing as android-16\nAPP_PLATFORM_LEVEL := $(strip $(subst android-,,$(APP_PLATFORM)))\nifneq (,$(filter 6 7,$(APP_PLATFORM_LEVEL)))\n    override APP_PLATFORM := android-5\nendif\nifneq (,$(filter 10 11,$(APP_PLATFORM_LEVEL)))\n    override APP_PLATFORM := android-9\nendif\nifneq (,$(filter 20,$(APP_PLATFORM_LEVEL)))\n    override APP_PLATFORM := android-19\nendif\n\nifneq ($(strip $(subst android-,,$(APP_PLATFORM))),$(APP_PLATFORM_LEVEL))\n    $(call ndk_log,  Adjusting APP_PLATFORM android-$(APP_PLATFORM_LEVEL) to $(APP_PLATFORM))\nendif\n\n# If APP_PIE isn't defined, set it to true for android-$(NDK_FIRST_PIE_PLATFORM_LEVEL) and above\n#\nAPP_PIE := $(strip $(APP_PIE))\n$(call ndk_log,  APP_PIE is $(APP_PIE))\nifndef APP_PIE\n    ifneq (,$(call gte,$(APP_PLATFORM_LEVEL),$(NDK_FIRST_PIE_PLATFORM_LEVEL)))\n        APP_PIE := true\n        $(call ndk_log,  Enabling -fPIE)\n    else\n        APP_PIE := false\n    endif\nendif\n\n# Check that the value of APP_PLATFORM corresponds to a known platform\n# If not, we're going to use the max supported platform value.\n#\n_bad_platform := $(strip $(filter-out $(NDK_ALL_PLATFORMS),$(APP_PLATFORM)))\nifdef _bad_platform\n    $(call ndk_log,Application $(_app) targets unknown platform '$(_bad_platform)')\n    override APP_PLATFORM := android-$(NDK_MAX_PLATFORM_LEVEL)\n    $(call ndk_log,Switching to $(APP_PLATFORM))\nendif\n\nifneq (null,$(APP_PROJECT_PATH))\n\n# Check platform level (after adjustment) against android:minSdkVersion in AndroidManifest.xml\n#\nAPP_MANIFEST := $(strip $(wildcard $(APP_PROJECT_PATH)/AndroidManifest.xml))\nAPP_PLATFORM_LEVEL := $(strip $(subst android-,,$(APP_PLATFORM)))\nifdef APP_MANIFEST\n  APP_MIN_PLATFORM_LEVEL := $(strip $(shell $(HOST_AWK) -f $(BUILD_AWK)/extract-minsdkversion.awk $(call host-path,$(APP_MANIFEST))))\n  ifdef APP_MIN_PLATFORM_LEVEL\n    ifneq (,$(call gt,$(APP_PLATFORM_LEVEL),$(APP_MIN_PLATFORM_LEVEL)))\n      $(call __ndk_info,WARNING: APP_PLATFORM $(APP_PLATFORM) is larger than android:minSdkVersion $(APP_MIN_PLATFORM_LEVEL) in $(APP_MANIFEST))\n    endif\n  endif\nendif\n\nendif # APP_PROJECT_PATH == null\n\n# Check that the value of APP_ABI corresponds to known ABIs\n# 'all' is a special case that means 'all supported ABIs'\n#\n# It will be handled in setup-app.mk. We can't hope to change\n# the value of APP_ABI is the user enforces it on the command-line\n# with a call like:  ndk-build APP_ABI=all\n#\n# Because GNU Make makes the APP_ABI variable read-only (any assignments\n# to it will be ignored)\n#\nAPP_ABI := $(subst $(comma),$(space),$(strip $(APP_ABI)))\nifndef APP_ABI\n    APP_ABI := $(NDK_DEFAULT_ABIS)\nendif\nifneq ($(APP_ABI),all)\n    _bad_abis := $(strip $(filter-out $(NDK_ALL_ABIS),$(APP_ABIS)))\n    ifdef _bad_abis\n        $(call __ndk_info,Application $(_app) targets unknown ABI '$(_bad_abis)')\n        $(call __ndk_info,Please fix the APP_ABI definition in $(_application_mk))\n        $(call __ndk_info,to use a set of the following values: $(NDK_ALL_ABIS))\n        $(call __ndk_error,Aborting)\n    endif\nendif\n\n# If APP_BUILD_SCRIPT is defined, check that the file exists.\n# If undefined, look in $(APP_PROJECT_PATH)/jni/Android.mk\n#\nAPP_BUILD_SCRIPT := $(strip $(APP_BUILD_SCRIPT))\nifdef APP_BUILD_SCRIPT\n    _build_script := $(strip $(wildcard $(APP_BUILD_SCRIPT)))\n    ifndef _build_script\n        $(call __ndk_info,Your APP_BUILD_SCRIPT points to an unknown file: $(APP_BUILD_SCRIPT))\n        $(call __ndk_error,Aborting...)\n    endif\n    APP_BUILD_SCRIPT := $(_build_script)\n    $(call ndk_log,  Using build script $(APP_BUILD_SCRIPT))\nelse\n    ifeq (null,$(APP_PROJECT_PATH))\n      $(call __ndk_info,NDK_PROJECT_PATH==null.  Please explicitly set APP_BUILD_SCRIPT.)\n      $(call __ndk_error,Aborting.)\n    endif\n\n    _build_script := $(strip $(wildcard $(APP_PROJECT_PATH)/jni/Android.mk))\n    ifndef _build_script\n        $(call __ndk_info,There is no Android.mk under $(APP_PROJECT_PATH)/jni)\n        $(call __ndk_info,If this is intentional, please define APP_BUILD_SCRIPT to point)\n        $(call __ndk_info,to a valid NDK build script.)\n        $(call __ndk_error,Aborting...)\n    endif\n    APP_BUILD_SCRIPT := $(_build_script)\n    $(call ndk_log,  Defaulted to APP_BUILD_SCRIPT=$(APP_BUILD_SCRIPT))\nendif\n\n# Determine whether the application should be debuggable.\n# - If APP_DEBUG is set to 'true', then it always should.\n# - If APP_DEBUG is set to 'false', then it never should\n# - Otherwise, extract the android:debuggable attribute from the manifest.\n#\nifdef APP_DEBUG\n  APP_DEBUGGABLE := $(APP_DEBUG)\n  ifeq ($(NDK_LOG),1)\n    ifeq ($(APP_DEBUG),true)\n      $(call ndk_log,Application '$(_app)' forced debuggable through NDK_DEBUG)\n    else\n      $(call ndk_log,Application '$(_app)' forced *not* debuggable through NDK_DEBUG)\n    endif\n  endif\nelse\n  # NOTE: To make unit-testing simpler, handle the case where there is no manifest.\n  APP_DEBUGGABLE := false\n  ifdef APP_MANIFEST\n    APP_DEBUGGABLE := $(shell $(HOST_AWK) -f $(BUILD_AWK)/extract-debuggable.awk $(call host-path,$(APP_MANIFEST)))\n  endif\n  ifeq ($(NDK_LOG),1)\n    ifeq ($(APP_DEBUGGABLE),true)\n      $(call ndk_log,Application '$(_app)' *is* debuggable)\n    else\n      $(call ndk_log,Application '$(_app)' is not debuggable)\n    endif\n  endif\nendif\n\n# LOCAL_BUILD_MODE will be either release or debug\n#\n# If APP_OPTIM is defined in the Application.mk, just use this.\n#\n# Otherwise, set to 'debug' if android:debuggable is set to TRUE,\n# and to 'release' if not.\n#\nifneq ($(APP_OPTIM),)\n    # check that APP_OPTIM, if defined, is either 'release' or 'debug'\n    $(if $(filter-out release debug,$(APP_OPTIM)),\\\n        $(call __ndk_info, The APP_OPTIM defined in $(_application_mk) must only be 'release' or 'debug')\\\n        $(call __ndk_error,Aborting)\\\n    )\n    $(call ndk_log,Selecting optimization mode through Application.mk: $(APP_OPTIM))\nelse\n    ifeq ($(APP_DEBUGGABLE),true)\n        $(call ndk_log,Selecting debug optimization mode (app is debuggable))\n        APP_OPTIM := debug\n    else\n        $(call ndk_log,Selecting release optimization mode (app is not debuggable))\n        APP_OPTIM := release\n    endif\nendif\n\nAPP_CFLAGS := $(strip $(APP_CFLAGS))\nAPP_CONLYFLAGS := $(strip $(APP_CONLYFLAGS))\nAPP_CPPFLAGS := $(strip $(APP_CPPFLAGS))\nAPP_CXXFLAGS := $(strip $(APP_CXXFLAGS))\nAPP_RENDERSCRIPT_FLAGS := $(strip $(APP_RENDERSCRIPT_FLAGS))\nAPP_ASMFLAGS := $(strip $(APP_ASMFLAGS))\nAPP_LDFLAGS  := $(strip $(APP_LDFLAGS))\n\nifndef APP_LIBCRYSTAX\n    APP_LIBCRYSTAX := shared\nelse\n    APP_LIBCRYSTAX := $(strip $(APP_LIBCRYSTAX))\n    $(if $(filter-out shared static,$(APP_LIBCRYSTAX)),\\\n        $(call __ndk_info,Invalid APP_LIBCRYSTAX value: $(APP_LIBCRYSTAX))\\\n        $(call __ndk_info,Please use one of the following instead: 'static' or 'shared')\\\n        $(call __ndk_error,Aborting))\nendif\n$(call ndk_log,Using APP_LIBCRYSTAX: $(APP_LIBCRYSTAX))\n\nifndef APP_OBJC\n    APP_OBJC := $(DEFAULT_LIBOBJC)\nelse\n    APP_OBJC := $(strip $(APP_OBJC))\n    $(call ndk-objc-check,$(APP_OBJC))\nendif\n$(call ndk_log,Using APP_OBJC: $(APP_OBJC))\n\n# Check that APP_STL is defined. If not, use the default value\n# otherwise, check that the name is correct.\nifndef APP_STL\n    APP_STL := $(DEFAULT_LIBSTDCXX)_shared\nelse\n    APP_STL := $(strip $(APP_STL))\n    $(call ndk-stl-check,$(APP_STL))\nendif\n$(call ndk_log,Using APP_STL: $(APP_STL))\n\n$(if $(call get,$(_map),defined),\\\n  $(call __ndk_info,Weird, the application $(_app) is already defined by $(call get,$(_map),defined))\\\n  $(call __ndk_error,Aborting)\\\n)\n\n$(call set,$(_map),defined,$(_application_mk))\n\n# Record all app-specific variable definitions\n$(foreach __name,$(NDK_APP_VARS),\\\n  $(call set,$(_map),$(__name),$($(__name)))\\\n)\n\n# Record the Application.mk for debugging\n$(call set,$(_map),Application.mk,$(_application_mk))\n\nNDK_ALL_APPS += $(_app)\n"
  },
  {
    "path": "build/core/add-platform.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n$(call assert-defined,_platform NDK_PLATFORMS_ROOT)\n\n# For each platform, determine the corresponding supported ABIs\n# And record them in NDK_PLATFORM_$(platform)_ABIS\n#\n_abis := $(strip $(notdir $(wildcard $(NDK_PLATFORMS_ROOT)/$(_platform)/arch-*)))\n_abis := $(_abis:arch-%=%)\n\n$(call ndk_log,PLATFORM $(_platform) supports: $(_abis))\n\nNDK_PLATFORM_$(_platform)_ABIS    := $(_abis)\n\n# Record the sysroots for each supported ABI\n#\n$(foreach _abi,$(_abis),\\\n  $(eval NDK_PLATFORM_$(_platform)_$(_abi)_SYSROOT := $(NDK_PLATFORMS_ROOT)/$(_platform)/arch-$(_abi))\\\n  $(call ndk_log,  ABI $(_abi) sysroot is: $(NDK_PLATFORM_$(_platform)_$(_abi)_SYSROOT))\\\n)\n"
  },
  {
    "path": "build/core/add-toolchain.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this script is included repeatedly by main.mk to add a new toolchain\n# definition to the NDK build system.\n#\n# '_config_mk' must be defined as the path of a toolchain\n# configuration file (config.mk) that will be included here.\n#\n$(call assert-defined, _config_mk)\n\n# The list of variables that must or may be defined\n# by the toolchain configuration file\n#\nNDK_TOOLCHAIN_VARS_REQUIRED := TOOLCHAIN_ABIS TOOLCHAIN_ARCH\nNDK_TOOLCHAIN_VARS_OPTIONAL :=\n\n# Clear variables that are supposed to be defined by the config file\n$(call clear-vars,$(NDK_TOOLCHAIN_VARS_REQUIRED))\n$(call clear-vars,$(NDK_TOOLCHAIN_VARS_OPTIONAL))\n\n# Include the config file\ninclude $(_config_mk)\n\n# Plug in the undefined\nifeq ($(TOOLCHAIN_ABIS)$(TOOLCHAIN_ARCH),)\nifeq (1,$(words $(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS))))\nTOOLCHAIN_ARCH := $(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS))\nTOOLCHAIN_ABIS := $(TOOLCHAIN_ARCH) $(NDK_KNOWN_ABIS:%=$(TOOLCHAIN_ARCH)%) $(NDK_KNOWN_ABIS:%=$(TOOLCHAIN_ARCH)bc%)\nendif\nendif\n\nifeq ($(TOOLCHAIN_ABIS)$(TOOLCHAIN_ARCH),)\n# Ignore if both TOOLCHAIN_ABIS and TOOLCHAIN_ARCH are not defined\nelse\n\n# Check that the proper variables were defined\n$(call check-required-vars,$(NDK_TOOLCHAIN_VARS_REQUIRED),$(_config_mk))\n\n# Check that the file didn't do something stupid\n$(call assert-defined, _config_mk)\n\n# Now record the toolchain-specific information\n_dir  := $(patsubst %/,%,$(dir $(_config_mk)))\n_name := $(notdir $(_dir))\n_arch := $(TOOLCHAIN_ARCH)\n_abis := $(TOOLCHAIN_ABIS)\n\n_toolchain := NDK_TOOLCHAIN.$(_name)\n\n# check that the toolchain name is unique\n$(if $(strip $($(_toolchain).defined)),\\\n  $(call __ndk_error,Toolchain $(_name) defined in $(_parent) is\\\n                     already defined in $(NDK_TOOLCHAIN.$(_name).defined)))\n\n$(_toolchain).defined := $(_toolchain_config)\n$(_toolchain).arch    := $(_arch)\n$(_toolchain).abis    := $(_abis)\n$(_toolchain).setup   := $(wildcard $(_dir)/setup.mk)\n\n$(if $(strip $($(_toolchain).setup)),,\\\n  $(call __ndk_error, Toolchain $(_name) lacks a setup.mk in $(_dir)))\n\nNDK_ALL_TOOLCHAINS += $(_name)\nNDK_ALL_ARCHS      += $(_arch)\nNDK_ALL_ABIS       += $(_abis)\n\n# NDK_ABI.<abi>.toolchains records the list of toolchains that support\n# a given ABI\n#\n$(foreach _abi,$(_abis),\\\n    $(eval NDK_ABI.$(_abi).toolchains += $(_name)) \\\n    $(eval NDK_ABI.$(_abi).arch := $(sort $(NDK_ABI.$(_abi).arch) $(_arch)))\\\n)\n\nNDK_ARCH.$(_arch).toolchains += $(_name)\nNDK_ARCH.$(_arch).abis := $(sort $(NDK_ARCH.$(_arch).abis) $(_abis))\n\nendif\n\n# done\n"
  },
  {
    "path": "build/core/build-all.mk",
    "content": "# Copyright (C) 2009-2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n#\n# This script is used to build all wanted NDK binaries. It is included\n# by several scripts.\n#\n\n# ensure that the following variables are properly defined\n$(call assert-defined,NDK_APPS NDK_APP_OUT)\n\n# ====================================================================\n#\n# Prepare the build for parsing Android.mk files\n#\n# ====================================================================\n\n# These phony targets are used to control various stages of the build\n.PHONY: all \\\n        host_libraries host_executables \\\n        installed_modules \\\n        executables libraries static_libraries shared_libraries \\\n        clean clean-objs-dir \\\n        clean-executables clean-libraries \\\n        clean-installed-modules \\\n        clean-installed-binaries\n\n# These macros are used in Android.mk to include the corresponding\n# build script that will parse the LOCAL_XXX variable definitions.\n#\nCLEAR_VARS                := $(BUILD_SYSTEM)/clear-vars.mk\nBUILD_HOST_EXECUTABLE     := $(BUILD_SYSTEM)/build-host-executable.mk\nBUILD_HOST_STATIC_LIBRARY := $(BUILD_SYSTEM)/build-host-static-library.mk\nBUILD_STATIC_LIBRARY      := $(BUILD_SYSTEM)/build-static-library.mk\nBUILD_SHARED_LIBRARY      := $(BUILD_SYSTEM)/build-shared-library.mk\nBUILD_EXECUTABLE          := $(BUILD_SYSTEM)/build-executable.mk\nPREBUILT_SHARED_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-shared-library.mk\nPREBUILT_STATIC_LIBRARY   := $(BUILD_SYSTEM)/prebuilt-static-library.mk\n\nANDROID_MK_INCLUDED := \\\n  $(CLEAR_VARS) \\\n  $(BUILD_HOST_EXECUTABLE) \\\n  $(BUILD_HOST_STATIC_LIBRARY) \\\n  $(BUILD_STATIC_LIBRARY) \\\n  $(BUILD_SHARED_LIBRARY) \\\n  $(BUILD_EXECUTABLE) \\\n  $(PREBUILT_SHARED_LIBRARY) \\\n\n\n# this is the list of directories containing dependency information\n# generated during the build. It will be updated by build scripts\n# when module definitions are parsed.\n#\nALL_DEPENDENCY_DIRS :=\n\n# this is the list of all generated files that we would need to clean\nALL_HOST_EXECUTABLES      :=\nALL_HOST_STATIC_LIBRARIES :=\nALL_STATIC_LIBRARIES      :=\nALL_SHARED_LIBRARIES      :=\nALL_EXECUTABLES           :=\n\nWANTED_INSTALLED_MODULES  :=\n\n# the first rule\nall: installed_modules host_libraries host_executables\n\n\n$(foreach _app,$(NDK_APPS),\\\n  $(eval include $(BUILD_SYSTEM)/setup-app.mk)\\\n)\n\nifeq (,$(strip $(WANTED_INSTALLED_MODULES)))\n    ifneq (,$(strip $(NDK_APP_MODULES)))\n        $(call __ndk_warning,WARNING: No modules to build, your APP_MODULES definition is probably incorrect!)\n    else\n        $(call __ndk_warning,WARNING: There are no modules to build in this project!)\n    endif\nendif\n\n# On Cygwin, we generate a temporary shell script that is capable of\n# process GCC-generated dependency files to convert all path references\n# in them from the Windows to the corresponding Cygwin convention.\n# (e.g. C:/Foo/foo -> /cygdrive/c/Foo/foo)\n#\n# This shell script is generated by passing the output of the cygwin\n# 'mount' command to a special Awk script.\n#\nifeq ($(HOST_OS),cygwin)\n  GEN_CYGWIN_DEPS_CONVERTER := mount | tr '\\\\' '/' | awk -f $(BUILD_AWK)/gen-cygwin-deps-converter.awk\n  ifeq ($(NDK_LOG),1)\n    $(call __ndk_info,Cygwin dependency file conversion script:)\n    $(info ----- start of script ----)\n    $(info $(shell $(GEN_CYGWIN_DEPS_CONVERTER)))\n    $(info ------ end of script -----)\n  endif\n$(NDK_DEPENDENCIES_CONVERTER):\n\t$(call host-echo-build-step,$(NDK_APP_ABI),Cygwin) Generating dependency file converter script\n\t$(hide) mkdir -p $(dir $@)\n\t$(hide) $(GEN_CYGWIN_DEPS_CONVERTER) > $@ && chmod +x $@\n\nclean-dependency-converter:\n\t$(hide) $(call host-rm,$(NDK_DEPENDENCIES_CONVERTER))\n\nendif\n\n# ====================================================================\n#\n# Now finish the build preparation with a few rules that depend on\n# what has been effectively parsed and recorded previously\n#\n# ====================================================================\n\nclean: clean-intermediates clean-installed-binaries\n\ndistclean: clean\n\ninstalled_modules: clean-installed-binaries libraries $(WANTED_INSTALLED_MODULES)\nhost_libraries: $(HOST_STATIC_LIBRARIES)\nhost_executables: $(HOST_EXECUTABLES)\n\nstatic_libraries: $(STATIC_LIBRARIES)\nshared_libraries: $(SHARED_LIBRARIES)\nexecutables: $(EXECUTABLES)\n\nlibraries: static_libraries shared_libraries\n\nclean-host-intermediates:\n\t$(hide) $(call host-rm,$(HOST_EXECUTABLES) $(HOST_STATIC_LIBRARIES))\n\nclean-intermediates: clean-host-intermediates\n\t$(hide) $(call host-rm,$(EXECUTABLES) $(STATIC_LIBRARIES) $(SHARED_LIBRARIES))\n\nifeq ($(HOST_OS),cygwin)\nclean: clean-dependency-converter\nendif\n\t\n# include dependency information\nALL_DEPENDENCY_DIRS := $(patsubst %/,%,$(sort $(ALL_DEPENDENCY_DIRS)))\n-include $(wildcard $(ALL_DEPENDENCY_DIRS:%=%/*.d))\n"
  },
  {
    "path": "build/core/build-binary.mk",
    "content": "# Copyright (C) 2008, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Check that LOCAL_MODULE is defined, then restore its LOCAL_XXXX values\n$(call assert-defined,LOCAL_MODULE)\n$(call module-restore-locals,$(LOCAL_MODULE))\n\n# For now, only support target (device-specific modules).\n# We may want to introduce support for host modules in the future\n# but that is too experimental for now.\n#\nmy := TARGET_\n\n# LOCAL_MAKEFILE must also exist and name the Android.mk that\n# included the module build script.\n#\n$(call assert-defined,LOCAL_MAKEFILE LOCAL_BUILD_SCRIPT LOCAL_BUILT_MODULE)\n\n# A list of LOCAL_XXX variables that are ignored for static libraries.\n# Print a warning if they are present inside a module definition to let\n# the user know this won't do what he/she expects.\nnot_in_static_libs := \\\n    LOCAL_LDFLAGS \\\n    LOCAL_LDLIBS \\\n    LOCAL_ALLOW_UNDEFINED_SYMBOLS\n\nifeq ($(call module-get-class,$(LOCAL_MODULE)),STATIC_LIBRARY)\n$(foreach _notvar,$(not_in_static_libs),\\\n    $(if $(strip $($(_notvar))),\\\n        $(call __ndk_info,WARNING:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): $(_notvar) is always ignored for static libraries)\\\n    )\\\n)\nendif\n\n# Some developers like to add library names (e.g. -lfoo) to LOCAL_LDLIBS\n# and LOCAL_LDFLAGS directly. This is very fragile and can lead to broken\n# builds and other nasty surprises, because it doesn't tell ndk-build\n# that the corresponding module depends on these files. Emit a warning\n# when we detect this case.\nlibs_in_ldflags := $(filter -l% %.so %.a,$(LOCAL_LDLIBS) $(LOCAL_LDFLAGS))\n\n# Remove the system libraries we know about from the warning, it's ok\n# (and actually expected) to link them with -l<name>.\nsystem_libs := \\\n    android \\\n    c \\\n    dl \\\n    jnigraphics \\\n    log \\\n    m \\\n    m_hard \\\n    stdc++ \\\n    z \\\n    EGL \\\n    GLESv1_CM \\\n    GLESv2 \\\n    GLESv3 \\\n    vulkan \\\n    OpenSLES \\\n    OpenMAXAL \\\n    mediandk \\\n    atomic\n\nlibs_in_ldflags := $(filter-out $(addprefix -l,$(system_libs)), $(libs_in_ldflags))\n\nifneq (,$(strip $(libs_in_ldflags)))\n  $(call __ndk_info,WARNING:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): non-system libraries in linker flags: $(libs_in_ldflags))\n  $(call __ndk_info,    This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES)\n  $(call __ndk_info,    or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the)\n  $(call __ndk_info,    current module)\nendif\n\ninclude $(BUILD_SYSTEM)/import-locals.mk\n\n# Check for LOCAL_THIN_ARCHIVE / APP_THIN_ARCHIVE and print a warning if\n# it is defined for non-static library modules.\nthin_archive := $(strip $(LOCAL_THIN_ARCHIVE))\nifdef thin_archive\nifneq (STATIC_LIBRARY,$(call module-get-class,$(LOCAL_MODULE)))\n    $(call __ndk_info,WARNING:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_THIN_ARCHIVE is for building static libraries)\nendif\nendif\n\nifndef thin_archive\n    thin_archive := $(strip $(NDK_APP_THIN_ARCHIVE))\nendif\n# Print a warning if the value is not 'true', 'false' or empty.\nifneq (,$(filter-out true false,$(thin_archive)))\n    $(call __ndk_info,WARNING:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): Invalid LOCAL_THIN_ARCHIVE value '$(thin_archive)' ignored!)\n    thin_archive :=\nendif\n\n#\n# Ensure that 'make <module>' and 'make clean-<module>' work\n#\n.PHONY: $(LOCAL_MODULE)\n$(LOCAL_MODULE): $(LOCAL_BUILT_MODULE)\n\ncleantarget := clean-$(LOCAL_MODULE)-$(TARGET_ARCH_ABI)\n.PHONY: $(cleantarget)\nclean: $(cleantarget)\n\n$(cleantarget): PRIVATE_ABI         := $(TARGET_ARCH_ABI)\n$(cleantarget): PRIVATE_MODULE      := $(LOCAL_MODULE)\nifneq ($(LOCAL_BUILT_MODULE_NOT_COPIED),true)\n$(cleantarget): PRIVATE_CLEAN_FILES := $(LOCAL_BUILT_MODULE) \\\n                                       $($(my)OBJS)\nelse\n$(cleantarget): PRIVATE_CLEAN_FILES := $($(my)OBJS)\nendif\n$(cleantarget)::\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Clean) \"$(PRIVATE_MODULE) [$(PRIVATE_ABI)]\"\n\t$(hide) $(call host-rmdir,$(PRIVATE_CLEAN_FILES))\n\nifeq ($(NDK_APP_DEBUGGABLE),true)\n$(NDK_APP_GDBSETUP): PRIVATE_SRC_DIRS += $(LOCAL_C_INCLUDES) $(LOCAL_PATH)\nendif\n\n# list of generated object files\nLOCAL_OBJECTS :=\n\n# list of generated object files from RS files, subset of LOCAL_OBJECTS\nLOCAL_RS_OBJECTS :=\n\n# always define ANDROID when building binaries\n#\nLOCAL_CFLAGS := -DANDROID $(LOCAL_CFLAGS)\n\n#\n# Add the default system shared libraries to the build\n#\nifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)\n  LOCAL_SHARED_LIBRARIES += $(TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES)\nelse\n  LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)\nendif\n\n#\n# Check LOCAL_CPP_EXTENSION\n#\nbad_cpp_extensions := $(strip $(filter-out .%,$(LOCAL_CPP_EXTENSION)))\nifdef bad_cpp_extensions\n    $(call __ndk_info,WARNING: Invalid LOCAL_CPP_EXTENSION values: $(bad_cpp_extensions))\n    LOCAL_CPP_EXTENSION := $(filter $(bad_cpp_extensions),$(LOCAL_CPP_EXTENSIONS))\nendif\nLOCAL_CPP_EXTENSION := $(strip $(LOCAL_CPP_EXTENSION))\nifeq ($(LOCAL_CPP_EXTENSION),)\n  # Match the default GCC C++ extensions.\n  LOCAL_CPP_EXTENSION := $(default-c++-extensions)\nendif\nLOCAL_RS_EXTENSION := $(default-rs-extensions)\n\nLOCAL_LDFLAGS += -Wl,--build-id\n\n#\n# Check LOCAL_OBJC_EXTENSION, use '.m' by default\n#\nbad_objc_extensions := $(strip $(filter-out .%,$(LOCAL_OBJC_EXTENSION)))\nifdef bad_objc_extensions\n    $(call __ndk_info,WARNING: Invalid LOCAL_OBJC_EXTENSION values: $(bad_objc_extensions))\n    LOCAL_OBJC_EXTENSION := $(filter $(bad_objc_extensions),$(LOCAL_OBJC_EXTENSION))\nendif\nLOCAL_OBJC_EXTENSION := $(strip $(LOCAL_OBJC_EXTENSION))\nifeq ($(LOCAL_OBJC_EXTENSION),)\n    LOCAL_OBJC_EXTENSION := .m\nendif\n\n#\n# Check LOCAL_OBJCPP_EXTENSION, use '.mm' by default\n#\nbad_objcpp_extensions := $(strip $(filter-out .%,$(LOCAL_OBJCPP_EXTENSION)))\nifdef bad_objcpp_extensions\n    $(call __ndk_info,WARNING: Invalid LOCAL_OBJCPP_EXTENSION values: $(bad_objcpp_extensions))\n    LOCAL_OBJCPP_EXTENSION := $(filter $(bad_objcpp_extensions),$(LOCAL_OBJCPP_EXTENSION))\nendif\nLOCAL_OBJCPP_EXTENSION := $(strip $(LOCAL_OBJCPP_EXTENSION))\nifeq ($(LOCAL_OBJCPP_EXTENSION),)\n    LOCAL_OBJCPP_EXTENSION := .mm\nendif\n\n#\n# If LOCAL_ALLOW_UNDEFINED_SYMBOLS is not true, the linker will allow the generation\n# of a binary that uses undefined symbols.\n#\nifneq ($(LOCAL_ALLOW_UNDEFINED_SYMBOLS),true)\n  LOCAL_LDFLAGS += $($(my)NO_UNDEFINED_LDFLAGS)\nendif\n\n# Toolchain by default disallows generated code running from the heap and stack.\n# If LOCAL_DISABLE_NO_EXECUTE is true, we allow that\n#\nifeq ($(LOCAL_DISABLE_NO_EXECUTE),true)\n  LOCAL_CFLAGS += $($(my)DISABLE_NO_EXECUTE_CFLAGS)\n  LOCAL_LDFLAGS += $($(my)DISABLE_NO_EXECUTE_LDFLAGS)\nelse\n  LOCAL_CFLAGS += $($(my)NO_EXECUTE_CFLAGS)\n  LOCAL_LDFLAGS += $($(my)NO_EXECUTE_LDFLAGS)\nendif\n\n# Toolchain by default provides relro and GOT protections.\n# If LOCAL_DISABLE_RELRO is true, we disable the protections.\n#\nifeq ($(LOCAL_DISABLE_RELRO),true)\n  LOCAL_LDFLAGS += $($(my)DISABLE_RELRO_LDFLAGS)\nelse\n  LOCAL_LDFLAGS += $($(my)RELRO_LDFLAGS)\nendif\n\n# We enable shared text relocation warnings by default. These are not allowed in\n# current versions of Android (android-21 for LP64 ABIs, android-23 for LP32\n# ABIs).\nLOCAL_LDFLAGS += -Wl,--warn-shared-textrel\n\n# We enable fatal linker warnings by default.\n# If LOCAL_DISABLE_FATAL_LINKER_WARNINGS is true, we don't enable this check.\nifneq ($(LOCAL_DISABLE_FATAL_LINKER_WARNINGS),true)\n  LOCAL_LDFLAGS += -Wl,--fatal-warnings\nendif\n\n# By default, we protect against format string vulnerabilities\n# If LOCAL_DISABLE_FORMAT_STRING_CHECKS is true, we disable the protections.\nifeq ($(LOCAL_DISABLE_FORMAT_STRING_CHECKS),true)\n  LOCAL_CFLAGS += $($(my)DISABLE_FORMAT_STRING_CFLAGS)\nelse\n  LOCAL_CFLAGS += $($(my)FORMAT_STRING_CFLAGS)\nendif\n\n# enable PIE for executable beyond certain API level, unless \"-static\"\nifneq (,$(filter true,$(NDK_APP_PIE) $(TARGET_PIE)))\n  ifeq ($(call module-get-class,$(LOCAL_MODULE)),EXECUTABLE)\n    ifeq (,$(filter -static,$(TARGET_LDFLAGS) $(LOCAL_LDFLAGS) $(NDK_APP_LDFLAGS)))\n      LOCAL_CFLAGS += -fPIE\n      LOCAL_LDFLAGS += -fPIE -pie\n    endif\n  endif\nendif\n\n#\n# The original Android build system allows you to use the .arm prefix\n# to a source file name to indicate that it should be defined in either\n# 'thumb' or 'arm' mode, depending on the value of LOCAL_ARM_MODE\n#\n# First, check LOCAL_ARM_MODE, it should be empty, 'thumb' or 'arm'\n# We make the default 'thumb'\n#\nLOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE))\nifdef LOCAL_ARM_MODE\n  ifneq ($(words $(LOCAL_ARM_MODE)),1)\n      $(call __ndk_info,   LOCAL_ARM_MODE in $(LOCAL_MAKEFILE) must be one word, not '$(LOCAL_ARM_MODE)')\n      $(call __ndk_error, Aborting)\n  endif\n  # check that LOCAL_ARM_MODE is defined to either 'arm' or 'thumb'\n  $(if $(filter-out thumb arm, $(LOCAL_ARM_MODE)),\\\n      $(call __ndk_info,   LOCAL_ARM_MODE must be defined to either 'arm' or 'thumb' in $(LOCAL_MAKEFILE) not '$(LOCAL_ARM_MODE)')\\\n      $(call __ndk_error, Aborting)\\\n  )\n  my_link_arm_mode := $(LOCAL_ARM_MODE)\nelse\n  my_link_arm_mode := thumb\nendif\n\n# As a special case, the original Android build system\n# allows one to specify that certain source files can be\n# forced to build in ARM mode by using a '.arm' suffix\n# after the extension, e.g.\n#\n#  LOCAL_SRC_FILES := foo.c.arm\n#\n# to build source file $(LOCAL_PATH)/foo.c as ARM\n#\n\n$(call clear-all-src-tags)\n\n# As a special extension, the NDK also supports the .neon extension suffix\n# to indicate that a single file can be compiled with ARM NEON support\n# We must support both foo.c.neon and foo.c.arm.neon here\n#\n# Also, if LOCAL_ARM_NEON is set to 'true', force Neon mode for all source\n# files\n#\n\nneon_sources  := $(filter %.neon,$(LOCAL_SRC_FILES))\nneon_sources  := $(neon_sources:%.neon=%)\n\nLOCAL_ARM_NEON := $(strip $(LOCAL_ARM_NEON))\nifdef LOCAL_ARM_NEON\n  $(if $(filter-out true false,$(LOCAL_ARM_NEON)),\\\n    $(call __ndk_info,LOCAL_ARM_NEON must be defined either to 'true' or 'false' in $(LOCAL_MAKEFILE), not '$(LOCAL_ARM_NEON)')\\\n    $(call __ndk_error,Aborting) \\\n  )\nendif\nifeq ($(LOCAL_ARM_NEON),true)\n  neon_sources += $(LOCAL_SRC_FILES:%.neon=%)\n  # tag the precompiled header with 'neon' tag if it exists\n  ifneq (,$(LOCAL_PCH))\n    $(call tag-src-files,$(LOCAL_PCH),neon)\n  endif\nendif\n\nneon_sources := $(strip $(neon_sources))\nifdef neon_sources\n  ifeq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard arm64-v8a x86 x86_64),)\n    $(call __ndk_info,NEON support is only possible for armeabi-v7a ABI, its variant armeabi-v7a-hard, and arm64-v8a, x86 and x86_64 ABIs)\n    $(call __ndk_info,Please add checks against TARGET_ARCH_ABI in $(LOCAL_MAKEFILE))\n    $(call __ndk_error,Aborting)\n  endif\n  $(call tag-src-files,$(neon_sources:%.arm=%),neon)\nendif\n\nLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.neon=%)\n\n# strip the .arm suffix from LOCAL_SRC_FILES\n# and tag the relevant sources with the 'arm' tag\n#\narm_sources     := $(filter %.arm,$(LOCAL_SRC_FILES))\narm_sources     := $(arm_sources:%.arm=%)\nthumb_sources   := $(filter-out %.arm,$(LOCAL_SRC_FILES))\nLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.arm=%)\n\nifeq ($(LOCAL_ARM_MODE),arm)\n    arm_sources := $(LOCAL_SRC_FILES)\n    # tag the precompiled header with 'arm' tag if it exists\n    ifneq (,$(LOCAL_PCH))\n        $(call tag-src-files,$(LOCAL_PCH),arm)\n    endif\nendif\nifeq ($(LOCAL_ARM_MODE),thumb)\n    arm_sources := $(empty)\nendif\n$(call tag-src-files,$(arm_sources),arm)\n\n# tag debug if APP_OPTIM is 'debug'\n#\nifeq ($(APP_OPTIM),debug)\n    $(call tag-src-files,$(LOCAL_SRC_FILES),debug)\n    ifneq (,$(LOCAL_PCH))\n        $(call tag-src-files,$(LOCAL_PCH),debug)\n    endif\nendif\n\n# add PCH to LOCAL_SRC_FILES so that TARGET-process-src-files-tags could process it\nifneq (,$(LOCAL_PCH))\n    LOCAL_SRC_FILES += $(LOCAL_PCH)\nendif\n\n# Process all source file tags to determine toolchain-specific\n# target compiler flags, and text.\n#\n$(call TARGET-process-src-files-tags)\n\n# now remove PCH from LOCAL_SRC_FILES to prevent getting NDK warning about\n# unsupported source file extensions\nifneq (,$(LOCAL_PCH))\n    LOCAL_SRC_FILES := $(filter-out $(LOCAL_PCH),$(LOCAL_SRC_FILES))\nendif\n\n# only call dump-src-file-tags during debugging\n#$(dump-src-file-tags)\n\nLOCAL_DEPENDENCY_DIRS :=\n\n# all_source_patterns contains the list of filename patterns that correspond\n# to source files recognized by our build system\nifneq ($(filter x86 x86_64, $(TARGET_ARCH_ABI)),)\nall_source_extensions := .c .s .S .asm $(LOCAL_CPP_EXTENSION) $(LOCAL_RS_EXTENSION) $(LOCAL_OBJC_EXTENSION) $(LOCAL_OBJCPP_EXTENSION)\nelse\nall_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION) $(LOCAL_RS_EXTENSION) $(LOCAL_OBJC_EXTENSION) $(LOCAL_OBJCPP_EXTENSION)\nendif\nall_source_patterns   := $(foreach _ext,$(all_source_extensions),%$(_ext))\nall_cpp_patterns      := $(foreach _ext,$(LOCAL_CPP_EXTENSION),%$(_ext))\nall_rs_patterns       := $(foreach _ext,$(LOCAL_RS_EXTENSION),%$(_ext))\nall_objc_patterns     := $(foreach _ext,$(LOCAL_OBJC_EXTENSION),%$(_ext))\nall_objcpp_patterns   := $(foreach _ext,$(LOCAL_OBJCPP_EXTENSION),%$(_ext))\n\nunknown_sources := $(strip $(filter-out $(all_source_patterns),$(LOCAL_SRC_FILES)))\nifdef unknown_sources\n    $(call __ndk_info,WARNING: Unsupported source file extensions in $(LOCAL_MAKEFILE) for module $(LOCAL_MODULE))\n    $(call __ndk_info,  $(unknown_sources))\nendif\n\n# LOCAL_OBJECTS will list all object files corresponding to the sources\n# listed in LOCAL_SRC_FILES, in the *same* order.\n#\nLOCAL_OBJECTS := $(LOCAL_SRC_FILES)\n$(foreach _ext,$(all_source_extensions),\\\n    $(eval LOCAL_OBJECTS := $$(LOCAL_OBJECTS:%$(_ext)=%$$(TARGET_OBJ_EXTENSION)))\\\n)\nLOCAL_OBJECTS := $(filter %$(TARGET_OBJ_EXTENSION),$(LOCAL_OBJECTS))\nLOCAL_OBJECTS := $(subst ../,__/,$(LOCAL_OBJECTS))\nLOCAL_OBJECTS := $(subst :,_,$(LOCAL_OBJECTS))\nLOCAL_OBJECTS := $(foreach _obj,$(LOCAL_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))\n\nLOCAL_RS_OBJECTS := $(filter $(all_rs_patterns),$(LOCAL_SRC_FILES))\n$(foreach _ext,$(LOCAL_RS_EXTENSION),\\\n    $(eval LOCAL_RS_OBJECTS := $$(LOCAL_RS_OBJECTS:%$(_ext)=%$$(TARGET_OBJ_EXTENSION)))\\\n)\nLOCAL_RS_OBJECTS := $(filter %$(TARGET_OBJ_EXTENSION),$(LOCAL_RS_OBJECTS))\nLOCAL_RS_OBJECTS := $(subst ../,__/,$(LOCAL_RS_OBJECTS))\nLOCAL_RS_OBJECTS := $(subst :,_,$(LOCAL_RS_OBJECTS))\nLOCAL_RS_OBJECTS := $(foreach _obj,$(LOCAL_RS_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))\n\nifneq (,$(call module-has-objc-sources,$(LOCAL_MODULE)))\n    objc_cflags  :=\n    objc_ldflags :=\n    #objc_cflags  += objc-exception\n    ifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\n        objc_cflags += objc-arc\n        objc_ldflags += objc-arc\n    endif\n    $(foreach __f,$(objc_cflags),\\\n        $(eval LOCAL_OBJCFLAGS += $(if $(filter -f$(__f) -fno-$(__f),$(foreach __t,TARGET LOCAL NDK_APP,$(foreach __l,C OBJC,$($(__t)_$(__l)FLAGS)))),,-f$(__f)))\\\n    )\n    $(foreach __f,$(objc_ldflags),\\\n        $(eval LOCAL_LDFLAGS += $(if $(filter -f$(__f) -fno-$(__f),$(foreach __t,TARGET LOCAL NDK_APP,$($(__t)_LDFLAGS))),,-f$(__f)))\\\n    )\nendif\n\n# If the module has any kind of C++ features, enable them in LOCAL_CPPFLAGS\n#\nifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti))\n    LOCAL_CPPFLAGS += -frtti\nendif\nifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),exceptions))\n    LOCAL_CPPFLAGS += -fexceptions\nendif\n\nifeq ($(filter -std=%,$(LOCAL_CFLAGS) $(LOCAL_CPPFLAGS)),)\nifneq ($(TARGET_CXX_STANDARD),)\nLOCAL_CPPFLAGS += -std=$(TARGET_CXX_STANDARD)\nendif\nendif\n\n# If we're using the 'system' STL and use rtti or exceptions, then\n# automatically link against the GNU libsupc++ for now.\n#\nifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti exceptions))\n    ifeq (system,$(NDK_APP_STL))\n      LOCAL_LDLIBS := $(LOCAL_LDLIBS) $(call host-path,$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libsupc++$(TARGET_LIB_EXTENSION))\n    endif\nendif\n\n# Set include patch for renderscript\n\n\nifneq ($(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE),)\n    LOCAL_RENDERSCRIPT_INCLUDES := $(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE)\nelse\n    LOCAL_RENDERSCRIPT_INCLUDES := \\\n        $(RENDERSCRIPT_TOOLCHAIN_HEADER) \\\n        $(LOCAL_RENDERSCRIPT_INCLUDES)\nendif\n\nRS_COMPAT :=\nifneq ($(call module-is-shared-library,$(LOCAL_MODULE)),)\n    RS_COMPAT := true\nendif\n\n\n# Build PCH\n\nget-pch-name = $(strip \\\n    $(subst ../,__/,\\\n        $(eval __pch := $1)\\\n        $(eval __pch := $(__pch:%.h=%.precompiled.h))\\\n        $(__pch)\\\n    ))\n\nifneq (,$(LOCAL_PCH))\n    # Build PCH into obj directory\n    LOCAL_BUILT_PCH := $(call get-pch-name,$(LOCAL_PCH))\n\n    # Clang whines about a \"c-header\" (.h rather than .hpp) being used in C++\n    # mode (note that we use compile-cpp-source to build the header).\n    LOCAL_SRC_FILES_TARGET_CFLAGS.$(LOCAL_PCH) += -x c++-header\n\n    # Build PCH\n    $(call compile-cpp-source,$(LOCAL_PCH),$(LOCAL_BUILT_PCH).gch)\n\n    # Filter obj files that are dependent on the PCH (only those without tags)\n    ifeq (true,$(LOCAL_ARM_NEON))\n        TAGS_TO_FILTER=arm\n    else\n        TAGS_TO_FILTER=arm neon\n    endif\n\n    allowed_src := $(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\\\n        $(if $(filter $(TAGS_TO_FILTER),$(LOCAL_SRC_FILES_TAGS.$(src))),,$(src))\\\n    )\n    # All files without tags depend on PCH\n    $(foreach src,$(allowed_src),\\\n        $(eval $(LOCAL_OBJS_DIR)/$(call get-object-name,$(src)) : $(LOCAL_OBJS_DIR)/$(LOCAL_BUILT_PCH).gch)\\\n    )\n    # Make sure those files are built with PCH\n    $(call add-src-files-target-cflags,$(allowed_src),-Winvalid-pch -include $(LOCAL_OBJS_DIR)/$(LOCAL_BUILT_PCH))\n\n    # Insert PCH dir at beginning of include search path\n    LOCAL_C_INCLUDES := \\\n        $(LOCAL_OBJS_DIR) \\\n        $(LOCAL_C_INCLUDES)\nendif\n\n# Build the sources to object files\n#\n\n$(foreach src,$(filter %.c,$(LOCAL_SRC_FILES)), $(call compile-c-source,$(src),$(call get-object-name,$(src))))\n$(foreach src,$(filter %.S %.s,$(LOCAL_SRC_FILES)), $(call compile-s-source,$(src),$(call get-object-name,$(src))))\n$(foreach src,$(filter $(all_objc_patterns),$(LOCAL_SRC_FILES)),\\\n    $(call compile-objc-source,$(src),$(call get-object-name,$(src)))\\\n)\n$(foreach src,$(filter $(all_objcpp_patterns),$(LOCAL_SRC_FILES)),\\\n    $(call compile-objc++-source,$(src),$(call get-object-name,$(src)))\\\n)\n$(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\\\n    $(call compile-cpp-source,$(src),$(call get-object-name,$(src)))\\\n)\n\n$(foreach src,$(filter $(all_rs_patterns),$(LOCAL_SRC_FILES)),\\\n    $(call compile-rs-source,$(src),$(call get-rs-scriptc-name,$(src)),$(call get-rs-bc-name,$(src)),$(call get-rs-so-name,$(src)),$(call get-object-name,$(src)),$(RS_COMPAT))\\\n)\n\nifneq ($(filter x86 x86_64, $(TARGET_ARCH_ABI)),)\n$(foreach src,$(filter %.asm,$(LOCAL_SRC_FILES)), $(call compile-asm-source,$(src),$(call get-object-name,$(src))))\nendif\n\n#\n# The compile-xxx-source calls updated LOCAL_OBJECTS and LOCAL_DEPENDENCY_DIRS\n#\nALL_DEPENDENCY_DIRS += $(sort $(LOCAL_DEPENDENCY_DIRS))\nCLEAN_OBJS_DIRS     += $(LOCAL_OBJS_DIR)\n\n#\n# Handle the static and shared libraries this module depends on\n#\n\n# If LOCAL_LDLIBS contains anything like -l<library> then\n# prepend a -L$(SYSROOT_LINK)/usr/lib to it to ensure that the linker\n# looks in the right location\n#\nifneq ($(filter -l%,$(LOCAL_LDLIBS)),)\n    LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT_LINK)/usr/lib) $(LOCAL_LDLIBS)\n    ifneq ($(filter x86_64 mips64,$(TARGET_ARCH_ABI)),)\n        LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT_LINK)/usr/lib64) $(LOCAL_LDLIBS)\n    endif\nendif\n\nmy_ldflags := $(TARGET_LDFLAGS) $(LOCAL_LDFLAGS) $(NDK_APP_LDFLAGS)\nifneq ($(filter armeabi%,$(TARGET_ARCH_ABI)),)\n    my_ldflags += $(TARGET_$(my_link_arm_mode)_LDFLAGS)\nendif\n\n# When LOCAL_SHORT_COMMANDS is defined to 'true' we are going to write the\n# list of all object files and/or static/shared libraries that appear on the\n# command line to a file, then use the @<listfile> syntax to invoke it.\n#\n# This allows us to link or archive a huge number of stuff even on Windows\n# with its puny 8192 max character limit on its command-line.\n#\nLOCAL_SHORT_COMMANDS := $(strip $(LOCAL_SHORT_COMMANDS))\nifndef LOCAL_SHORT_COMMANDS\n    LOCAL_SHORT_COMMANDS := $(strip $(NDK_APP_SHORT_COMMANDS))\nendif\n\ndefine libcrystax-link-type\n$(strip \\\n    $(call assert-defined,LOCAL_LDFLAGS NDK_APP_LIBCRYSTAX)\\\n    $(if \\\n        $(or \\\n            $(filter -static,$(LOCAL_LDFLAGS)),\\\n            $(filter static,$(NDK_APP_LIBCRYSTAX))\\\n        ),\\\n        static,\\\n        dynamic\\\n    )\\\n)\nendef\n\n# $1: Target ABI\ndefine libcrystax-libpath\n$(strip \\\n    $(eval __libcrystax_libpath := $(crystax-dir)/libs/$(1)$(if $(filter armeabi%,$(1)),/thumb))\\\n    $(if $(wildcard $(__libcrystax_libpath)),\\\n        $(__libcrystax_libpath),\\\n        $(call __ndk_info,Could not find libcrystax libraries: $(call pretty-dir,$(__libcrystax_libpath)) (broken NDK?))\\\n        $(call __ndk_error,Aborting)\\\n    )\\\n)\nendef\n\n# - Ensure -lcrystax is _always_ before -lc\n# - Properly detect how to link libcrystax - statically or dynamically\n# - Specify path to empty libcrystax.a stub to make linker happy when it\n#   use -lcrystax (according to built-in linker spec)\n# - Specify proper path to libcrystax binary\n# - Force __crystax_on_load/__crystax_on_unload to be undefined in case of static\n#   libcrystax linking. This way we ensure they will not be thrown away by linker.\n# - Enable 'muldefs' option when statically linking.\n#   This way app will use functions from libcrystax and link successfully\n#   even if there are symbols with the same name in subsequent static libraries (libc etc)\n# - Force -Wl,--eh-frame-hdr for static executables if not yet specified\n# Parameters:\n# $1: List of linker '-lxxx' options to adjust\ndefine interpose-libcrystax\n$(strip \\\n    $(call assert-defined,TARGET_ARCH_ABI LOCAL_LDFLAGS)\\\n    $(filter-out -lc -lm,$(1)) \\\n    $(if $(filter static,$(libcrystax-link-type)),\\\n        -u __crystax_on_load \\\n        -u __crystax_on_unload \\\n    ) \\\n    $(if $(filter -static,$(LOCAL_LDFLAGS)),\\\n        $(eval __libcrystax_muldefs := -Wl,-z,muldefs) \\\n        $(__libcrystax_muldefs) \\\n    ) \\\n    $(if $(filter -static,$(LOCAL_LDFLAGS)),\\\n        $(eval __libcrystax_static_eh_frame_hdr := -Wl,--eh-frame-hdr) \\\n        $(if $(filter $(__libcrystax_static_eh_frame_hdr),$(LOCAL_LDFLAGS)),,$(__libcrystax_static_eh_frame_hdr)) \\\n    ) \\\n    -L$(crystax-dir)/empty \\\n    $(call libcrystax-libpath,$(TARGET_ARCH_ABI))/libcrystax.$(if $(filter static,$(libcrystax-link-type)),a,so) \\\n    -lc \\\n)\nendef\n\n$(call generate-file-dir,$(LOCAL_BUILT_MODULE))\n\n$(LOCAL_BUILT_MODULE): PRIVATE_OBJECTS := $(LOCAL_OBJECTS)\n$(LOCAL_BUILT_MODULE): PRIVATE_LIBGCC := $(TARGET_LIBGCC)\n\n$(LOCAL_BUILT_MODULE): PRIVATE_LD := $(TARGET_LD)\n$(LOCAL_BUILT_MODULE): PRIVATE_LDFLAGS := $(my_ldflags)\n$(LOCAL_BUILT_MODULE): PRIVATE_LDLIBS  := $(call interpose-libcrystax,$(LOCAL_LDLIBS) $(TARGET_LDLIBS))\n\n$(LOCAL_BUILT_MODULE): PRIVATE_NAME := $(notdir $(LOCAL_BUILT_MODULE))\n$(LOCAL_BUILT_MODULE): PRIVATE_CXX := $(TARGET_CXX)\n$(LOCAL_BUILT_MODULE): PRIVATE_CC := $(TARGET_CC)\n$(LOCAL_BUILT_MODULE): PRIVATE_SYSROOT_LINK := $(SYSROOT_LINK)\n\nifeq ($(call module-get-class,$(LOCAL_MODULE)),STATIC_LIBRARY)\n\n#\n# This is a static library module, things are very easy. We only need\n# to build the object files and archive them with 'ar'. Note that module\n# dependencies can be ignored here, i.e. if the module depends on other\n# static or shared libraries, there is no need to actually build them\n# before, so don't add Make dependencies to them.\n#\n# In other words, consider the following graph:\n#\n#     libfoo.so -> libA.a ->libB.a\n#\n# then libA.a and libB.a can be built in parallel, only linking libfoo.so\n# depends on their completion.\n#\n\nar_objects := $(call host-path,$(LOCAL_OBJECTS))\n\nifeq ($(LOCAL_SHORT_COMMANDS),true)\n    $(call ndk_log,Building static library module '$(LOCAL_MODULE)' with linker list file)\n    ar_list_file := $(LOCAL_OBJS_DIR)/archiver.list\n    $(call generate-list-file,$(ar_objects),$(ar_list_file))\n    ar_objects   := @$(call host-path,$(ar_list_file))\n    $(LOCAL_BUILT_MODULE): $(ar_list_file)\nendif\n\n# Compute 'ar' flags. Thin archives simply require 'T' here.\nar_flags := $(TARGET_ARFLAGS)\nifeq (true,$(thin_archive))\n    $(call ndk_log,$(TARGET_ARCH_ABI):Building static library '$(LOCAL_MODULE)' as thin archive)\n    ar_flags := $(ar_flags)T\nendif\n\n$(LOCAL_BUILT_MODULE): PRIVATE_ABI := $(TARGET_ARCH_ABI)\n$(LOCAL_BUILT_MODULE): PRIVATE_AR := $(TARGET_AR) $(ar_flags)\n$(LOCAL_BUILT_MODULE): PRIVATE_AR_OBJECTS := $(ar_objects)\n$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_STATIC_LIB := $(cmd-build-static-library)\n\n$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)\n\t$(call host-echo-build-step,$(PRIVATE_ABI),StaticLibrary) \"$(PRIVATE_NAME)\"\n\t$(hide) $(call host-rm,$@)\n\t$(hide) $(PRIVATE_BUILD_STATIC_LIB)\n\nALL_STATIC_LIBRARIES += $(LOCAL_BUILT_MODULE)\n\nendif\n\nifneq (,$(filter SHARED_LIBRARY EXECUTABLE,$(call module-get-class,$(LOCAL_MODULE))))\n\n#\n# This is a shared library or an executable, so computing dependencies properly is\n# crucial. The general rule to apply is the following:\n#\n#   - collect the list of all static libraries that need to be part\n#     of the link, and in the right order. To do so, get the transitive\n#     closure of LOCAL_STATIC_LIBRARIES and LOCAL_WHOLE_STATIC_LIBRARIES\n#     and ensure they are ordered topologically.\n#\n#  - collect the list of all shared libraries that need to be part of\n#    the link. This is the transitive closure of the list of\n#    LOCAL_SHARED_LIBRARIES for the module and all its dependent static\n#    libraries identified in the step above. Of course, need to be\n#    ordered topologically too.\n#\n#  - add Make dependencies to ensure that all these libs are built\n#    before the module itself too.\n#\n# A few quick examples:\n#\n#    main.exe -> libA.a -> libB.a -> libfoo.so -> libC.a\n#\n#      static_libs(main.exe) = libA.a libB.a  (i.e. no libC.a)\n#      shared_libs(main.exe) = libfoo.so\n#      static_libs(libfoo.so) = libC.a\n#\n#    main.exe -> libA.a ---> libB.a\n#                  |           ^\n#                  v           |\n#                libC.a  ------\n#\n#      static_libs(main.exe) = libA.a libC.a libB.a\n#             (i.e. libB.a must appear after all libraries that depend on it).\n#\nall_libs := $(call module-get-link-libs,$(LOCAL_MODULE))\nshared_libs := $(call module-filter-shared-libraries,$(all_libs))\nstatic_libs := $(call module-filter-static-libraries,$(all_libs))\nwhole_static_libs := $(call module-extract-whole-static-libs,$(LOCAL_MODULE),$(static_libs))\nstatic_libs := $(filter-out $(whole_static_libs),$(static_libs))\n\n$(call -ndk-mod-debug,module $(LOCAL_MODULE) [$(LOCAL_BUILT_MODULE)])\n$(call -ndk-mod-debug,.  all_libs='$(all_libs)')\n$(call -ndk-mod-debug,.  shared_libs='$(shared_libs)')\n$(call -ndk-mod-debug,.  static_libs='$(static_libs)')\n$(call -ndk-mod-debug,.  whole_static_libs='$(whole_static_libs)')\n\nshared_libs       := $(call map,module-get-built,$(shared_libs))\\\n                     $(TARGET_PREBUILT_SHARED_LIBRARIES)\nstatic_libs       := $(call map,module-get-built,$(static_libs))\nwhole_static_libs := $(call map,module-get-built,$(whole_static_libs))\n\n$(call -ndk-mod-debug,.  built_shared_libs='$(shared_libs)')\n$(call -ndk-mod-debug,.  built_static_libs='$(static_libs)')\n$(call -ndk-mod-debug,.  built_whole_static_libs='$(whole_static_libs)')\n\n# The list of object/static/shared libraries passed to the linker when\n# building shared libraries and executables. order is important.\n#\n# Cannot use immediate evaluation because PRIVATE_LIBGCC may not be defined at this point.\nlinker_objects_and_libraries = $(strip $(call TARGET-get-linker-objects-and-libraries,\\\n    $(LOCAL_OBJECTS), \\\n    $(static_libs), \\\n    $(whole_static_libs), \\\n    $(shared_libs)))\n\nifeq ($(LOCAL_SHORT_COMMANDS),true)\n    $(call ndk_log,Building ELF binary module '$(LOCAL_MODULE)' with linker list file)\n    linker_options   := $(linker_objects_and_libraries)\n    linker_list_file := $(LOCAL_OBJS_DIR)/linker.list\n    linker_objects_and_libraries := @$(call host-path,$(linker_list_file))\n    $(call generate-list-file,$(linker_options),$(linker_list_file))\n    $(LOCAL_BUILT_MODULE): $(linker_list_file)\nendif\n\n$(LOCAL_BUILT_MODULE): $(shared_libs) $(static_libs) $(whole_static_libs)\n$(LOCAL_BUILT_MODULE): PRIVATE_ABI := $(TARGET_ARCH_ABI)\n$(LOCAL_BUILT_MODULE): PRIVATE_LINKER_OBJECTS_AND_LIBRARIES := $(linker_objects_and_libraries)\n$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libs)\n$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(whole_static_libs)\n$(LOCAL_BUILT_MODULE): PRIVATE_SHARED_LIBRARIES := $(shared_libs)\n\nendif\n\n#\n# If this is a shared library module\n#\nifeq ($(call module-get-class,$(LOCAL_MODULE)),SHARED_LIBRARY)\n$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_SHARED_LIB := $(cmd-build-shared-library)\n$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)\n\t$(call host-echo-build-step,$(PRIVATE_ABI),SharedLibrary) \"$(PRIVATE_NAME)\"\n\t$(hide) $(PRIVATE_BUILD_SHARED_LIB)\n\nALL_SHARED_LIBRARIES += $(LOCAL_BUILT_MODULE)\nendif\n\n#\n# If this is an executable module\n#\nifeq ($(call module-get-class,$(LOCAL_MODULE)),EXECUTABLE)\n$(LOCAL_BUILT_MODULE): PRIVATE_ABI := $(TARGET_ARCH_ABI)\n$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_EXECUTABLE := $(cmd-build-executable)\n$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Executable) \"$(PRIVATE_NAME)\"\n\t$(hide) $(PRIVATE_BUILD_EXECUTABLE)\n\nALL_EXECUTABLES += $(LOCAL_BUILT_MODULE)\nendif\n\n#\n# If this is a copyable prebuilt module\n#\nifeq ($(call module-is-copyable,$(LOCAL_MODULE)),$(true))\n$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Prebuilt) \"$(PRIVATE_NAME) <= $(call pretty-dir,$(dir $<))\"\n\t$(hide) $(call host-cp,$<,$@)\nendif\n\n#\n# If this is an installable module\n#\nifeq ($(call module-is-installable,$(LOCAL_MODULE)),$(true))\n$(LOCAL_INSTALLED): PRIVATE_ABI         := $(TARGET_ARCH_ABI)\n$(LOCAL_INSTALLED): PRIVATE_NAME        := $(notdir $(LOCAL_BUILT_MODULE))\n$(LOCAL_INSTALLED): PRIVATE_SRC         := $(LOCAL_BUILT_MODULE)\n$(LOCAL_INSTALLED): PRIVATE_DST_DIR     := $(NDK_APP_DST_DIR)\n$(LOCAL_INSTALLED): PRIVATE_DST         := $(LOCAL_INSTALLED)\n$(LOCAL_INSTALLED): PRIVATE_STRIP       := $(TARGET_STRIP)\n$(LOCAL_INSTALLED): PRIVATE_STRIP_CMD   := $(call cmd-strip, $(PRIVATE_DST))\n$(LOCAL_INSTALLED): PRIVATE_OBJCOPY     := $(TARGET_OBJCOPY)\n$(LOCAL_INSTALLED): PRIVATE_OBJCOPY_CMD := $(call cmd-add-gnu-debuglink, $(PRIVATE_DST), $(PRIVATE_SRC))\n\nLIBCRYSTAX_INSTALLED := $(subst //,/,$(call parent-dir,$(LOCAL_INSTALLED))/libcrystax.so)\n\n$(LOCAL_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries $(if $(filter dynamic,$(libcrystax-link-type)),$(LIBCRYSTAX_INSTALLED))\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Install) \"$(PRIVATE_NAME) => $(call pretty-dir,$(PRIVATE_DST))\"\n\t$(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))\n\t$(hide) $(PRIVATE_STRIP_CMD)\n\n#$(hide) $(PRIVATE_OBJCOPY_CMD)\n\n$(call generate-file-dir,$(LOCAL_INSTALLED))\n\nifeq (,$(GLOBAL_LIBCRYSTAX_INSTALL_RULE_DEFINED.$(TARGET_ARCH_ABI)))\n\n$(LIBCRYSTAX_INSTALLED): PRIVATE_LIBCRYSTAX_ABI := $(TARGET_ARCH_ABI)\n\n$(LIBCRYSTAX_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries\n\t$(call host-echo-build-step,$(PRIVATE_LIBCRYSTAX_ABI),Install) \"$(notdir $@) => $(call pretty-dir,$@)\"\n\t$(hide) $(call host-install,$(call libcrystax-libpath,$(PRIVATE_LIBCRYSTAX_ABI))/libcrystax.so,$@)\n\t$(hide) $(call cmd-strip,$@)\n\n$(call generate-file-dir,$(LIBCRYSTAX_INSTALLED))\n\nGLOBAL_LIBCRYSTAX_INSTALL_RULE_DEFINED.$(TARGET_ARCH_ABI) := true\n\nendif\n\nendif\n"
  },
  {
    "path": "build/core/build-executable.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from Android.mk files to build a target-specific\n# executable program\n#\n\nLOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE\nLOCAL_MAKEFILE     := $(local-makefile)\n\n$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))\n$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n$(call check-LOCAL_MODULE_FILENAME)\n\n# we are building target objects\nmy := TARGET_\n\n$(call handle-module-filename,,)\n$(call handle-module-built)\n\nLOCAL_MODULE_CLASS := EXECUTABLE\ninclude $(BUILD_SYSTEM)/build-module.mk\n"
  },
  {
    "path": "build/core/build-local.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This file is designed to be called from the 'ndk-build' script\n# or similar wrapper tool.\n#\n\n# Detect the NDK installation path by processing this Makefile's location.\n# This assumes we are located under $NDK_ROOT/build/core/main.mk\n#\n\n# Don't output to stdout if we're being invoked to dump a variable\nDUMP_VAR := $(patsubst DUMP_%,%,$(filter DUMP_%,$(MAKECMDGOALS)))\nifneq (,$(DUMP_VAR))\n    NDK_NO_INFO := 1\n    NDK_NO_WARNINGS := 1\nendif\n\nNDK_ROOT := $(dir $(lastword $(MAKEFILE_LIST)))\nNDK_ROOT := $(subst \\,/,$(NDK_ROOT))\nNDK_ROOT := $(strip $(NDK_ROOT:%build/core/=%))\nNDK_ROOT := $(NDK_ROOT:%/=%)\nifeq ($(NDK_ROOT),)\n    # for the case when we're invoked from the NDK install path\n    NDK_ROOT := .\nendif\nifeq ($(NDK_LOG),1)\n    $(info Android NDK: NDK installation path auto-detected: '$(NDK_ROOT)')\nendif\nifneq ($(words $(NDK_ROOT)),1)\n    $(info Android NDK: Your NDK installation path contains spaces.)\n    $(info Android NDK: Please re-install to a different location to fix the issue !)\n    $(error Aborting.)\nendif\n\ninclude $(NDK_ROOT)/build/core/init.mk\n\n# ====================================================================\n#\n# If NDK_PROJECT_PATH is not defined, find the application's project\n# path by looking at the manifest file in the current directory or\n# any of its parents. If none is found, try again with 'jni/Android.mk'\n#\n# Note that we first look at the current directory to avoid using\n# absolute NDK_PROJECT_PATH values. This reduces the length of all\n# source, object and binary paths that are passed to build commands.\n#\n# It turns out that some people use ndk-build to generate static\n# libraries without a full Android project tree.\n#\n# If NDK_PROJECT_PATH=null, ndk-build make no attempt to look for it, but does\n# need the following variables depending on NDK_PROJECT_PATH to be explicitly\n# specified (from the default, if any):\n#\n#   NDK_OUT\n#   NDK_LIBS_OUT\n#   APP_BUILD_SCRIPT\n#   NDK_DEBUG (optional, default to 0)\n#   Other APP_* used to be in Application.mk\n#\n# This behavior may be useful in an integrated build system.\n#\n# ====================================================================\n\nfind-project-dir = $(strip $(call find-project-dir-inner,$(abspath $1),$2))\n\nfind-project-dir-inner = \\\n    $(eval __found_project_path := )\\\n    $(eval __find_project_path := $1)\\\n    $(eval __find_project_file := $2)\\\n    $(call find-project-dir-inner-2)\\\n    $(__found_project_path)\n\nfind-project-dir-inner-2 = \\\n    $(call ndk_log,Looking for $(__find_project_file) in $(__find_project_path))\\\n    $(eval __find_project_manifest := $(strip $(wildcard $(__find_project_path)/$(__find_project_file))))\\\n    $(if $(__find_project_manifest),\\\n        $(call ndk_log,    Found it !)\\\n        $(eval __found_project_path := $(__find_project_path))\\\n        ,\\\n        $(eval __find_project_parent := $(call parent-dir,$(__find_project_path)))\\\n        $(if $(__find_project_parent),\\\n            $(eval __find_project_path := $(__find_project_parent))\\\n            $(call find-project-dir-inner-2)\\\n        )\\\n    )\n\nNDK_PROJECT_PATH := $(strip $(NDK_PROJECT_PATH))\nAPP_PROJECT_PATH := $(strip $(APP_PROJECT_PATH))\n\nifneq (,$(APP_PROJECT_PATH))\n    ifeq (,$(NDK_PROJECT_PATH))\n        # If NDK_PROJECT_PATH isn't set and APP_PROJECT_PATH is present, use APP_PROJECT_PATH\n        $(call ndk_log,Use APP_PROJECT_PATH for NDK_PROJECT_PATH: $(APP_PROJECT_PATH))\n        NDK_PROJECT_PATH := $(APP_PROJECT_PATH)\n    else\n        # If both NDK_PROJECT_PATH and APP_PROJECT_PATH are present, check consistency\n        ifneq ($(NDK_PROJECT_PATH),$(APP_PROJECT_PATH))\n            $(call __ndk_info,WARNING: NDK_PROJECT_PATH and APP_PROJECT_PATH are both set but not equal literally)\n            $(call __ndk_info,  NDK_PROJECT_PATH = $(NDK_PROJECT_PATH))\n            $(call __ndk_info,  APP_PROJECT_PATH = $(APP_PROJECT_PATH))\n        endif\n    endif\nendif\n\nifeq (null,$(NDK_PROJECT_PATH))\n\n$(call ndk_log,Make no attempt to look for NDK_PROJECT_PATH.)\n\nelse\n\n# To keep paths as short as possible during the build, we first look if the\n# current directory is the top of our project path. If this is the case, we\n# will define NDK_PROJECT_PATH to simply '.'\n#\n# Otherwise, we will use find-project-dir which will first get the absolute\n# path of the current directory the climb back the hierarchy until we find\n# something. The result will always be a much longer definition for\n# NDK_PROJECT_PATH\n#\nifndef NDK_PROJECT_PATH\n    ifneq (,$(strip $(wildcard AndroidManifest.xml)))\n        NDK_PROJECT_PATH := .\n    else\n        ifneq (,$(strip $(wildcard jni/Android.mk)))\n            NDK_PROJECT_PATH := .\n        endif\n    endif\nendif\nifndef NDK_PROJECT_PATH\n    NDK_PROJECT_PATH := $(call find-project-dir,.,jni/Android.mk)\nendif\nifndef NDK_PROJECT_PATH\n    NDK_PROJECT_PATH := $(call find-project-dir,.,AndroidManifest.xml)\nendif\nifndef NDK_PROJECT_PATH\n    $(call __ndk_info,Could not find application project directory !)\n    $(call __ndk_info,Please define the NDK_PROJECT_PATH variable to point to it.)\n    $(call __ndk_error,Aborting)\nendif\n\n# Check that there are no spaces in the project path, or bad things will happen\nifneq ($(words $(NDK_PROJECT_PATH)),1)\n    $(call __ndk_info,Your Android application project path contains spaces: '$(NDK_PROJECT_PATH)')\n    $(call __ndk_info,The Android NDK build cannot work here. Please move your project to a different location.)\n    $(call __ndk_error,Aborting.)\nendif\n\n$(call ndk_log,Found project path: $(NDK_PROJECT_PATH))\n\nNDK_APPLICATION_MK := $(strip $(wildcard $(NDK_PROJECT_PATH)/jni/Application.mk))\n\nendif # NDK_PROJECT_PATH == null\n\nifndef NDK_APPLICATION_MK\n    NDK_APPLICATION_MK := $(NDK_ROOT)/build/core/default-application.mk\nendif\n\n\n# Place all generated intermediate files here\nNDK_APP_OUT := $(strip $(NDK_OUT))\nifndef NDK_APP_OUT\n  ifeq (null,$(NDK_PROJECT_PATH))\n    $(call __ndk_info,NDK_PROJECT_PATH==null.  Please explicitly set NDK_OUT to directory for all generated intermediate files.)\n    $(call __ndk_error,Aborting.)\n  endif\n  NDK_APP_OUT := $(NDK_PROJECT_PATH)/obj\nendif\n$(call ndk_log,Ouput path for intermediate files: $(NDK_APP_OUT))\n\n# Place all generated library files here.  This is rarely changed since aapt expects the default libs/\nNDK_APP_LIBS_OUT := $(strip $(NDK_LIBS_OUT))\nifndef NDK_APP_LIBS_OUT\n  ifeq (null,$(NDK_PROJECT_PATH))\n    $(call __ndk_info,NDK_PROJECT_PATH==null.  Please explicitly set NDK_LIBS_OUT to directory for generated library files.)\n    $(call __ndk_error,Aborting.)\n  endif\n  NDK_APP_LIBS_OUT := $(NDK_PROJECT_PATH)/libs\nendif\n$(call ndk_log,Ouput path for generated library files: $(NDK_APP_LIBS_OUT))\n\n# Fake an application named 'local'\n_app            := local\n_application_mk := $(NDK_APPLICATION_MK)\nNDK_APPS        := $(_app)\n\ninclude $(BUILD_SYSTEM)/add-application.mk\n\n# For cygwin, put generated dependency conversion script here\n# Do not define this variable for other host platforms\n#\nifeq ($(HOST_OS),cygwin)\nNDK_DEPENDENCIES_CONVERTER := $(NDK_APP_OUT)/convert-dependencies.sh\nendif\n\n# If a goal is DUMP_xxx then we dump a variable xxx instead\n# of building anything\n#\nMAKECMDGOALS := $(filter-out DUMP_$(DUMP_VAR),$(MAKECMDGOALS))\n\ninclude $(BUILD_SYSTEM)/setup-imports.mk\n\nifneq (,$(DUMP_VAR))\n\n# We only support a single DUMP_XXX goal at a time for now.\nifneq ($(words $(DUMP_VAR)),1)\n    $(call __ndk_error,!!TOO-MANY-DUMP-VARIABLES!!)\nendif\n\n$(foreach _app,$(NDK_APPS),\\\n  $(eval include $(BUILD_SYSTEM)/setup-app.mk)\\\n)\n\nDUMP_$(DUMP_VAR):\n\t@echo $($(DUMP_VAR))\nelse\n    # Build it\n    include $(BUILD_SYSTEM)/build-all.mk\nendif\n"
  },
  {
    "path": "build/core/build-module.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))\n$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n\n# This file is used to record the LOCAL_XXX definitions of a given\n# module. It is included by BUILD_STATIC_LIBRARY, BUILD_SHARED_LIBRARY\n# and others.\n#\nLOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS))\nifndef LOCAL_MODULE_CLASS\n$(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_CLASS definition is missing !)\n$(call __ndk_error,Aborting)\nendif\n\n$(if $(call module-class-check,$(LOCAL_MODULE_CLASS)),,\\\n$(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): Unknown LOCAL_MODULE_CLASS value: $(LOCAL_MODULE_CLASS))\\\n$(call __ndk_error,Aborting)\\\n)\n\n$(call module-add,$(LOCAL_MODULE))\n"
  },
  {
    "path": "build/core/build-shared-library.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from Android.mk files to build a target-specific\n# shared library\n#\n\nLOCAL_BUILD_SCRIPT := BUILD_SHARED_LIBRARY\nLOCAL_MAKEFILE     := $(local-makefile)\n\n$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))\n$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n$(call check-LOCAL_MODULE_FILENAME)\n\n# we are building target objects\nmy := TARGET_\n\n$(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION))\n$(call handle-module-built)\n\nLOCAL_MODULE_CLASS := SHARED_LIBRARY\ninclude $(BUILD_SYSTEM)/build-module.mk\n"
  },
  {
    "path": "build/core/build-static-library.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from Android.mk files to build a target-specific\n# static library\n#\n\nLOCAL_BUILD_SCRIPT := BUILD_STATIC_LIBRARY\nLOCAL_MAKEFILE     := $(local-makefile)\n\n$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))\n$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n\n# we are building target objects\nmy := TARGET_\n\n$(call handle-module-filename,lib,$(TARGET_LIB_EXTENSION))\n$(call handle-module-built)\n\nLOCAL_MODULE_CLASS := STATIC_LIBRARY\ninclude $(BUILD_SYSTEM)/build-module.mk\n\n"
  },
  {
    "path": "build/core/check-cygwin-make.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Check that we have a Cygwin-compatible make.\n#\n# For some reason, a lot of application developers on Windows\n# have another GNU Make installed in their path, that fails\n# miserably with our build scripts. If we can detect this use\n# case, early, we will be able to dump a human-readable error\n# message with some help to fix the issue.\n#\n\n.PHONY: all\nall:\n\n# Get the cygwin-specific path to the make executable\n# (e.g. /cygdrive/c/cygwin/usr/bin/make), then strip the\n# .exe suffix, if any.\n#\nCYGWIN_MAKE := $(shell cygpath --unix --absolute $(firstword $(MAKE)))\nCYGWIN_MAKE := $(CYGWIN_MAKE:%.exe=%)\n\n# Now try to find it on the file system, a non-cygwin compatible\n# GNU Make, even if launched from a Cygwin shell, will not\n#\nSELF_MAKE := $(strip $(wildcard $(CYGWIN_MAKE).exe))\nifeq ($(SELF_MAKE),)\n    $(error Android NDK: $(firstword $(MAKE)) is not cygwin-compatible)\nendif\n\n# that's all\n"
  },
  {
    "path": "build/core/clear-vars.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included repeatedly from Android.mk files in order to clean\n# the module-specific variables from the environment,\n\n$(call clear-src-tags)\n\n# Note: As a special exception, we don't want to clear LOCAL_PATH\n$(call clear-vars, $(filter-out LOCAL_PATH,$(modules-LOCALS:%=LOCAL_%)))\n\n# strip LOCAL_PATH\nLOCAL_PATH := $(strip $(LOCAL_PATH))\n"
  },
  {
    "path": "build/core/default-application.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This is the default Application.mk that is being used for applications\n# that don't provide $PROJECT_PATH/jni/Application.mk\n#\nAPP_PROJECT_PATH := $(NDK_PROJECT_PATH)\n\n# We expect the build script to be located here\nifndef APP_BUILD_SCRIPT\n  ifeq (null,$(NDK_PROJECT_PATH))\n    $(call __ndk_info,NDK_PROJECT_PATH==null.  Please explicitly set APP_BUILD_SCRIPT.)\n    $(call __ndk_error,Aborting.)\n  endif\n  APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk\nendif"
  },
  {
    "path": "build/core/default-build-commands.mk",
    "content": "# The following definitions are the defaults used by all toolchains.\n# This is included in setup-toolchain.mk just before the inclusion\n# of the toolchain's specific setup.mk file which can then override\n# these definitions.\n#\n\n# These flags are used to ensure that a binary doesn't reference undefined\n# flags.\nTARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined\n\n\n# Return the list of object, static libraries and shared libraries as they\n# must appear on the final static linker command (order is important).\n#\n# This can be over-ridden by a specific toolchain. Note that by default\n# we always put libgcc _after_ all static libraries and _before_ shared\n# libraries. This ensures that any libgcc function used by the final\n# executable will be copied into it. Otherwise, it could contain\n# symbol references to the same symbols as exported by shared libraries\n# and this causes binary compatibility problems when they come from\n# system libraries (e.g. libc.so and others).\n#\n# IMPORTANT: The result must use the host path convention.\n#\n# $1: object files\n# $2: static libraries\n# $3: whole static libraries\n# $4: shared libraries\n#\nTARGET-get-linker-objects-and-libraries = \\\n    $(call host-path, $1) \\\n    $(call link-whole-archives,$3) \\\n    $(call host-path, $2) $(PRIVATE_LIBGCC) $(call host-path, $4) \\\n\n\n# These flags are used to enforce the NX (no execute) security feature in the\n# generated machine code. This adds a special section to the generated shared\n# libraries that instruct the Linux kernel to disable code execution from\n# the stack and the heap.\nTARGET_NO_EXECUTE_CFLAGS  := -Wa,--noexecstack\nTARGET_NO_EXECUTE_LDFLAGS := -Wl,-z,noexecstack\n\n# These flags disable the above security feature\nTARGET_DISABLE_NO_EXECUTE_CFLAGS  := -Wa,--execstack\nTARGET_DISABLE_NO_EXECUTE_LDFLAGS := -Wl,-z,execstack\n\n# These flags are used to mark certain regions of the resulting\n# executable or shared library as being read-only after the dynamic\n# linker has run. This makes GOT overwrite security attacks harder to\n# exploit.\nTARGET_RELRO_LDFLAGS := -Wl,-z,relro -Wl,-z,now\n\n# These flags disable the above security feature\nTARGET_DISABLE_RELRO_LDFLAGS := -Wl,-z,norelro -Wl,-z,lazy\n\n# This flag are used to provide compiler protection against format\n# string vulnerabilities.\nTARGET_FORMAT_STRING_CFLAGS := -Wformat -Werror=format-security\n\n# This flag disables the above security checks\nTARGET_DISABLE_FORMAT_STRING_CFLAGS := -Wno-error=format-security\n\n# NOTE: Ensure that TARGET_LIBGCC is placed after all private objects\n#       and static libraries, but before any other library in the link\n#       command line when generating shared libraries and executables.\n#\n#       This ensures that all libgcc.a functions required by the target\n#       will be included into it, instead of relying on what's available\n#       on other libraries like libc.so, which may change between system\n#       releases due to toolchain or library changes.\n#\ndefine cmd-build-shared-library\n$(PRIVATE_CXX) \\\n    -Wl,-soname,$(notdir $(LOCAL_BUILT_MODULE)) \\\n    -shared \\\n    --sysroot=$(call host-path,$(PRIVATE_SYSROOT_LINK)) \\\n    $(PRIVATE_LINKER_OBJECTS_AND_LIBRARIES) \\\n    $(PRIVATE_LDFLAGS) \\\n    $(PRIVATE_LDLIBS) \\\n    -o $(call host-path,$(LOCAL_BUILT_MODULE))\nendef\n\n# zuav: with /usr/lib mips64 fails to link when objs and libs are built with default options\nifneq ($(filter mips64,$(TARGET_ARCH_ABI)),)\n    USR_LIB_SUFFIX := /usr/lib64\nelse\n    USR_LIB_SUFFIX := /usr/lib\nendif\n\n# The following -rpath-link= are needed for ld.bfd (default for MIPS) when\n# linking executables to supress warning about missing symbol from libraries not\n# directly needed. ld.gold (default for ARM and X86) doesn't emulate this buggy\n# behavior, and ignores -rpath-link completely.\ndefine cmd-build-executable\n$(PRIVATE_CXX) \\\n    -Wl,--gc-sections \\\n    -Wl,-z,nocopyreloc \\\n    --sysroot=$(call host-path,$(PRIVATE_SYSROOT_LINK)) \\\n    -Wl,-rpath-link=$(call host-path,$(PRIVATE_SYSROOT_LINK)$(USR_LIB_SUFFIX)) \\\n    -Wl,-rpath-link=$(call host-path,$(TARGET_OUT)) \\\n    $(PRIVATE_LINKER_OBJECTS_AND_LIBRARIES) \\\n    $(PRIVATE_LDFLAGS) \\\n    $(PRIVATE_LDLIBS) \\\n    -o $(call host-path,$(LOCAL_BUILT_MODULE))\nendef\n\ndefine cmd-build-static-library\n$(PRIVATE_AR) $(call host-path,$(LOCAL_BUILT_MODULE)) $(PRIVATE_AR_OBJECTS)\nendef\n\n# The strip command is only used for shared libraries and executables.\n# It is thus safe to use --strip-unneeded, which is only dangerous\n# when applied to static libraries or object files.\ncmd-strip = $(PRIVATE_STRIP) --strip-unneeded $(call host-path,$1)\n\n# The command objcopy --add-gnu-debuglink= will be needed for Valgrind\ncmd-add-gnu-debuglink = $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$(strip $(call host-path,$2)) $(call host-path,$1)\n\nTARGET_LIBGCC = -lgcc\nTARGET_LDLIBS := -lc -lm\n\n#\n# IMPORTANT: The following definitions must use lazy assignment because\n# the value of TOOLCHAIN_PREFIX or TARGET_CFLAGS can be changed later by\n# the toolchain's setup.mk script.\n#\n\nifneq ($(findstring ccc-analyzer,$(CC)),)\nTARGET_CC       = $(CC)\nelse\nTARGET_CC       = $(TOOLCHAIN_PREFIX)gcc\nendif\nTARGET_CFLAGS   =\nTARGET_CONLYFLAGS =\n\nifneq ($(findstring c++-analyzer,$(CXX)),)\nTARGET_CXX      = $(CXX)\nelse\nTARGET_CXX      = $(TOOLCHAIN_PREFIX)g++\nendif\nTARGET_CXXFLAGS = $(TARGET_CFLAGS) -fno-exceptions -fno-rtti\n\nTARGET_RS_CC    = $(RENDERSCRIPT_TOOLCHAIN_PREFIX)llvm-rs-cc\nTARGET_RS_BCC   = $(RENDERSCRIPT_TOOLCHAIN_PREFIX)bcc_compat\nTARGET_RS_FLAGS = -Wall -Werror\nifeq (,$(findstring 64,$(TARGET_ARCH_ABI)))\nTARGET_RS_FLAGS += -m32\nelse\nTARGET_RS_FLAGS += -m64\nendif\n\nTARGET_ASM      = $(HOST_PREBUILT)/yasm\nTARGET_ASMFLAGS =\n\nTARGET_LD       = $(TOOLCHAIN_PREFIX)ld\nTARGET_LDFLAGS :=\n\n# Use *-gcc-ar instead of *-ar for better LTO support, except for\n# gcc4.6 which doesn't have gcc-ar\nifneq (clang,$(NDK_TOOLCHAIN_VERSION))\nTARGET_AR       = $(TOOLCHAIN_PREFIX)gcc-ar\nelse\nTARGET_AR       = $(TOOLCHAIN_PREFIX)ar\nendif\n\nTARGET_ARFLAGS := crsD\n\nTARGET_STRIP    = $(TOOLCHAIN_PREFIX)strip\n\nTARGET_OBJCOPY  = $(TOOLCHAIN_PREFIX)objcopy\n\nTARGET_OBJ_EXTENSION := .o\nTARGET_LIB_EXTENSION := .a\nTARGET_SONAME_EXTENSION := .so\n"
  },
  {
    "path": "build/core/defaults.mk",
    "content": "DEFAULT_CXX_STANDARD := gnu++11\nDEFAULT_LIBSTDCXX    := gnustl\nDEFAULT_LIBOBJC      := cocotron\n"
  },
  {
    "path": "build/core/definitions-graph.mk",
    "content": "# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Definitions of various graph-related generic functions, used by\n# ndk-build internally.\n#\n\n# Coding style note:\n#\n# All internal variables in this file begin with '_ndk_mod_'\n# All internal functions in this file begin with '-ndk-mod-'\n#\n\n# Set this to true if you want to debug the functions here.\n_ndk_mod_debug := $(if $(NDK_DEBUG_MODULES),true)\n_ndk_topo_debug := $(if $(NDK_DEBUG_TOPO),true)\n\n# Use $(call -ndk-mod-debug,<message>) to print a debug message only\n# if _ndk_mod_debug is set to 'true'. Useful for debugging the functions\n# available here.\n#\nifeq (true,$(_ndk_mod_debug))\n-ndk-mod-debug = $(info $1)\nelse\n-ndk-mod-debug := $(empty)\nendif\n\nifeq (true,$(_ndk_topo_debug))\n-ndk-topo-debug = $(info $1)\nelse\n-ndk-topo-debug = $(empty)\nendif\n\n#######################################################################\n# Filter a list of module with a predicate function\n# $1: list of module names.\n# $2: predicate function, will be called with $(call $2,<name>), if the\n#     result is not empty, <name> will be added to the result.\n# Out: subset of input list, where each item passes the predicate.\n#######################################################################\n-ndk-mod-filter = $(strip \\\n    $(foreach _ndk_mod_filter_n,$1,\\\n        $(if $(call $2,$(_ndk_mod_filter_n)),$(_ndk_mod_filter_n))\\\n    ))\n\n-test-ndk-mod-filter = \\\n    $(eval -local-func = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call -ndk-mod-filter,,-local-func))\\\n    $(call test-expect,foo,$(call -ndk-mod-filter,foo,-local-func))\\\n    $(call test-expect,foo,$(call -ndk-mod-filter,foo bar,-local-func))\\\n    $(call test-expect,foo foo,$(call -ndk-mod-filter,aaa foo bar foo,-local-func))\\\n    $(eval -local-func = $$(call sne,foo,$$1))\\\n    $(call test-expect,,$(call -ndk-mod-filter,,-local-func))\\\n    $(call test-expect,,$(call -ndk-mod-filter,foo,-local-func))\\\n    $(call test-expect,bar,$(call -ndk-mod-filter,foo bar,-local-func))\\\n    $(call test-expect,aaa bar,$(call -ndk-mod-filter,aaa foo bar,-local-func))\n\n\n#######################################################################\n# Filter out a list of modules with a predicate function\n# $1: list of module names.\n# $2: predicate function, will be called with $(call $2,<name>), if the\n#     result is not empty, <name> will be added to the result.\n# Out: subset of input list, where each item doesn't pass the predicate.\n#######################################################################\n-ndk-mod-filter-out = $(strip \\\n    $(foreach _ndk_mod_filter_n,$1,\\\n        $(if $(call $2,$(_ndk_mod_filter_n)),,$(_ndk_mod_filter_n))\\\n    ))\n\n-test-ndk-mod-filter-out = \\\n    $(eval -local-func = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call -ndk-mod-filter-out,,-local-func))\\\n    $(call test-expect,,$(call -ndk-mod-filter-out,foo,-local-func))\\\n    $(call test-expect,bar,$(call -ndk-mod-filter-out,foo bar,-local-func))\\\n    $(call test-expect,aaa bar,$(call -ndk-mod-filter-out,aaa foo bar foo,-local-func))\\\n    $(eval -local-func = $$(call sne,foo,$$1))\\\n    $(call test-expect,,$(call -ndk-mod-filter-out,,-local-func))\\\n    $(call test-expect,foo,$(call -ndk-mod-filter-out,foo,-local-func))\\\n    $(call test-expect,foo,$(call -ndk-mod-filter-out,foo bar,-local-func))\\\n    $(call test-expect,foo foo,$(call -ndk-mod-filter-out,aaa foo bar foo,-local-func))\n\n\n#######################################################################\n# Find the first item in a list that checks a valid predicate.\n# $1: list of names.\n# $2: predicate function, will be called with $(call $2,<name>), if the\n#     result is not empty, <name> will be added to the result.\n# Out: subset of input list.\n#######################################################################\n-ndk-mod-find-first = $(firstword $(call -ndk-mod-filter,$1,$2))\n\n-test-ndk-mod-find-first.empty = \\\n    $(eval -local-pred = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call -ndk-mod-find-first,,-local-pred))\\\n    $(call test-expect,,$(call -ndk-mod-find-first,bar,-local-pred))\n\n-test-ndk-mod-find-first.simple = \\\n    $(eval -local-pred = $$(call seq,foo,$$1))\\\n    $(call test-expect,foo,$(call -ndk-mod-find-first,foo,-local-pred))\\\n    $(call test-expect,foo,$(call -ndk-mod-find-first,aaa foo bar,-local-pred))\\\n    $(call test-expect,foo,$(call -ndk-mod-find-first,aaa foo foo bar,-local-pred))\n\n########################################################################\n# Many tree walking operations require setting a 'visited' flag on\n# specific graph nodes. The following helper functions help implement\n# this while hiding details to the callers.\n#\n# Technical note:\n#  _ndk_mod_tree_visited.<name> will be 'true' if the node was visited,\n#  or empty otherwise.\n#\n#  _ndk_mod_tree_visitors lists all visited nodes, used to clean all\n#  _ndk_mod_tree_visited.<name> variables in -ndk-mod-tree-setup-visit.\n#\n#######################################################################\n\n# Call this before tree traversal.\n-ndk-mod-tree-setup-visit = \\\n    $(foreach _ndk_mod_tree_visitor,$(_ndk_mod_tree_visitors),\\\n        $(eval _ndk_mod_tree_visited.$$(_ndk_mod_tree_visitor) :=))\\\n    $(eval _ndk_mod_tree_visitors :=)\n\n# Returns non-empty if a node was visited.\n-ndk-mod-tree-is-visited = \\\n    $(_ndk_mod_tree_visited.$1)\n\n# Set the visited state of a node to 'true'\n-ndk-mod-tree-set-visited = \\\n    $(eval _ndk_mod_tree_visited.$1 := true)\\\n    $(eval _ndk_mod_tree_visitors += $1)\n\n########################################################################\n# Many graph walking operations require a work queue and computing\n# dependencies / children nodes. Here are a few helper functions that\n# can be used to make their code clearer. This uses a few global\n# variables that should be defined as follows during the operation:\n#\n#  _ndk_mod_module     current graph node name.\n#  _ndk_mod_wq         current node work queue.\n#  _ndk_mod_list       current result (list of nodes).\n#  _ndk_mod_depends    current graph node's children.\n#                      you must call -ndk-mod-get-depends to set this.\n#\n#######################################################################\n\n# Pop first item from work-queue into _ndk_mod_module.\n-ndk-mod-pop-first = \\\n    $(eval _ndk_mod_module := $$(call first,$$(_ndk_mod_wq)))\\\n    $(eval _ndk_mod_wq     := $$(call rest,$$(_ndk_mod_wq)))\n\n-test-ndk-mod-pop-first = \\\n    $(eval _ndk_mod_wq := A B C)\\\n    $(call -ndk-mod-pop-first)\\\n    $(call test-expect,A,$(_ndk_mod_module))\\\n    $(call test-expect,B C,$(_ndk_mod_wq))\\\n\n\n# Push list of items at the back of the work-queue.\n-ndk-mod-push-back = \\\n    $(eval _ndk_mod_wq := $(strip $(_ndk_mod_wq) $1))\n\n-test-ndk-mod-push-back = \\\n  $(eval _ndk_mod_wq := A B C)\\\n  $(call -ndk-mod-push-back, D    E)\\\n  $(call test-expect,A B C D E,$(_ndk_mod_wq))\n\n# Set _ndk_mod_depends to the direct dependencies of _ndk_mod_module\n-ndk-mod-get-depends = \\\n    $(eval _ndk_mod_depends := $$(call $$(_ndk_mod_deps_func),$$(_ndk_mod_module)))\n\n# Set _ndk_mod_depends to the direct dependencies of _ndk_mod_module that\n# are not already in _ndk_mod_list.\n-ndk-mod-get-new-depends = \\\n    $(call -ndk-mod-get-depends)\\\n    $(eval _ndk_mod_depends := $$(filter-out $$(_ndk_mod_list),$$(_ndk_mod_depends)))\n\n##########################################################################\n# Compute the transitive closure\n# $1: list of modules.\n# $2: dependency function, $(call $2,<module>) should return all the\n#     module that <module> depends on.\n# Out: transitive closure of all modules from those in $1. Always includes\n#      the modules in $1. Order is random.\n#\n# Implementation note:\n#   we use the -ndk-mod-tree-xxx functions to flag 'visited' nodes\n#   in the graph. A node is visited once it has been put into the work\n#   queue. For each item in the work queue, get the dependencies and\n#   append all those that were not visited yet.\n#######################################################################\n-ndk-mod-get-closure = $(strip \\\n    $(eval _ndk_mod_wq :=)\\\n    $(eval _ndk_mod_list :=)\\\n    $(eval _ndk_mod_deps_func := $2)\\\n    $(call -ndk-mod-tree-setup-visit)\\\n    $(foreach _ndk_mod_module,$1,\\\n        $(call -ndk-mod-closure-visit,$(_ndk_mod_module))\\\n    )\\\n    $(call -ndk-mod-closure-recursive)\\\n    $(eval _ndk_mod_deps :=)\\\n    $(_ndk_mod_list)\\\n    )\n\n# Used internally to visit a new node during -ndk-mod-get-closure.\n# This appends the node to the work queue, and set its 'visit' flag.\n-ndk-mod-closure-visit = \\\n    $(call -ndk-mod-push-back,$1)\\\n    $(call -ndk-mod-tree-set-visited,$1)\n\n-ndk-mod-closure-recursive = \\\n    $(call -ndk-mod-pop-first)\\\n    $(eval _ndk_mod_list += $$(_ndk_mod_module))\\\n    $(call -ndk-mod-get-depends)\\\n    $(foreach _ndk_mod_dep,$(_ndk_mod_depends),\\\n        $(if $(call -ndk-mod-tree-is-visited,$(_ndk_mod_dep)),,\\\n        $(call -ndk-mod-closure-visit,$(_ndk_mod_dep))\\\n        )\\\n    )\\\n    $(if $(_ndk_mod_wq),$(call -ndk-mod-closure-recursive))\n\n-test-ndk-mod-get-closure.empty = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(call test-expect,,$(call -ndk-mod-get-closure,,-local-deps))\n\n-test-ndk-mod-get-closure.single = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends :=)\\\n    $(call test-expect,A,$(call -ndk-mod-get-closure,A,-local-deps))\n\n-test-ndk-mod-get-closure.double = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends :=)\\\n    $(call test-expect,A B,$(call -ndk-mod-get-closure,A,-local-deps))\n\n-test-ndk-mod-get-closure.circular-deps = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends := C)\\\n    $(eval C_depends := A)\\\n    $(call test-expect,A B C,$(call -ndk-mod-get-closure,A,-local-deps))\n\n-test-ndk-mod-get-closure.ABCDE = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends := D)\\\n    $(eval C_depends := D E)\\\n    $(eval D_depends :=)\\\n    $(eval E_depends :=)\\\n    $(call test-expect,A B C D E,$(call -ndk-mod-get-closure,A,-local-deps))\n\n\n#########################################################################\n# For topological sort, we need to count the number of incoming edges\n# in each graph node. The following helper functions implement this and\n# hide implementation details.\n#\n# Count the number of incoming edges for each node during topological\n# sort with a string of xxxxs. I.e.:\n#  0 edge  -> ''\n#  1 edge  -> 'x'\n#  2 edges -> 'xx'\n#  3 edges -> 'xxx'\n#  etc.\n#########################################################################\n\n# zero the incoming edge counter for module $1\n-ndk-mod-topo-zero-incoming = \\\n    $(eval _ndk_mod_topo_incoming.$1 :=)\n\n# increment the incoming edge counter for module $1\n-ndk-mod-topo-increment-incoming = \\\n    $(eval _ndk_mod_topo_incoming.$1 := $$(_ndk_mod_topo_incoming.$1)x)\n\n# decrement the incoming edge counter for module $1\n-ndk-mod-topo-decrement-incoming = \\\n    $(eval _ndk_mod_topo_incoming.$1 := $$(_ndk_mod_topo_incoming.$1:%x=%))\n\n# return non-empty if the module $1's incoming edge counter is > 0\n-ndk-mod-topo-has-incoming = $(_ndk_mod_topo_incoming.$1)\n\n# Find first node in a list that has zero incoming edges.\n# $1: list of nodes\n# Out: first node that has zero incoming edges, or empty.\n-ndk-mod-topo-find-first-zero-incoming = $(firstword $(call -ndk-mod-filter-out,$1,-ndk-mod-topo-has-incoming))\n\n# Only use for debugging:\n-ndk-mod-topo-dump-count = \\\n    $(foreach _ndk_mod_module,$1,\\\n        $(info .. $(_ndk_mod_module) incoming='$(_ndk_mod_topo_incoming.$(_ndk_mod_module))'))\n\n\n\n#########################################################################\n# Return the topologically ordered closure of all nodes from a top-level\n# one. This means that a node A, in the result, will always appear after\n# node B if A depends on B. Assumes that the graph is a DAG (if there are\n# circular dependencies, this property cannot be guaranteed, but at least\n# the function should not loop infinitely).\n#\n# $1: top-level node name.\n# $2: dependency function, i.e. $(call $2,<name>) returns the children\n#     nodes for <name>.\n# Return: list of nodes, include $1, which will always be the first.\n#########################################################################\n-ndk-mod-get-topo-list = $(strip \\\n    $(eval _ndk_mod_top_module := $1)\\\n    $(eval _ndk_mod_deps_func := $2)\\\n    $(eval _ndk_mod_nodes := $(call -ndk-mod-get-closure,$1,$2))\\\n    $(call -ndk-mod-topo-count,$(_ndk_mod_nodes))\\\n    $(eval _ndk_mod_list :=)\\\n    $(eval _ndk_mod_wq := $(call -ndk-mod-topo-find-first-zero-incoming,$(_ndk_mod_nodes)))\\\n    $(call -ndk-mod-topo-sort)\\\n    $(_ndk_mod_list) $(_ndk_mod_nodes)\\\n    )\n\n# Given a closure list of nodes, count their incoming edges.\n# $1: list of nodes, must be a graph closure.\n-ndk-mod-topo-count = \\\n    $(foreach _ndk_mod_module,$1,\\\n        $(call -ndk-mod-topo-zero-incoming,$(_ndk_mod_module)))\\\n    $(foreach _ndk_mod_module,$1,\\\n        $(call -ndk-mod-get-depends)\\\n        $(foreach _ndk_mod_dep,$(_ndk_mod_depends),\\\n        $(call -ndk-mod-topo-increment-incoming,$(_ndk_mod_dep))\\\n        )\\\n    )\n\n-ndk-mod-topo-sort = \\\n    $(call -ndk-topo-debug,-ndk-mod-topo-sort: wq='$(_ndk_mod_wq)' list='$(_ndk_mod_list)')\\\n    $(call -ndk-mod-pop-first)\\\n    $(if $(_ndk_mod_module),\\\n        $(eval _ndk_mod_list += $(_ndk_mod_module))\\\n        $(eval _ndk_mod_nodes := $(filter-out $(_ndk_mod_module),$(_ndk_mod_nodes)))\\\n        $(call -ndk-mod-topo-decrement-incoming,$(_ndk_mod_module))\\\n        $(call -ndk-mod-get-depends)\\\n        $(call -ndk-topo-debug,-ndk-mod-topo-sort:   deps='$(_ndk_mod_depends)')\\\n        $(foreach _ndk_mod_dep,$(_ndk_mod_depends),\\\n            $(call -ndk-mod-topo-decrement-incoming,$(_ndk_mod_dep))\\\n            $(if $(call -ndk-mod-topo-has-incoming,$(_ndk_mod_dep)),,\\\n                $(call -ndk-mod-push-back,$(_ndk_mod_dep))\\\n            )\\\n        )\\\n        $(call -ndk-mod-topo-sort)\\\n    )\n\n\n-test-ndk-mod-get-topo-list.empty = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(call test-expect,,$(call -ndk-mod-get-topo-list,,-local-deps))\n\n-test-ndk-mod-get-topo-list.single = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends :=)\\\n    $(call test-expect,A,$(call -ndk-mod-get-topo-list,A,-local-deps))\n\n-test-ndk-mod-get-topo-list.no-infinite-loop = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends := C)\\\n    $(eval C_depends := A)\\\n    $(call test-expect,A B C,$(call -ndk-mod-get-topo-list,A,-local-deps))\n\n-test-ndk-mod-get-topo-list.ABC = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends :=)\\\n    $(eval C_depends := B)\\\n    $(call test-expect,A C B,$(call -ndk-mod-get-topo-list,A,-local-deps))\n\n-test-ndk-mod-get-topo-list.ABCD = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends := D)\\\n    $(eval C_depends := B)\\\n    $(eval D_depends :=)\\\n    $(call test-expect,A C B D,$(call -ndk-mod-get-topo-list,A,-local-deps))\n\n-test-ndk-mod-get-topo-list.ABC.circular = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends := C)\\\n    $(eval C_depends := B)\\\n    $(call test-expect,A B C,$(call -ndk-mod-get-topo-list,A,-local-deps))\n\n#########################################################################\n# Return the topologically ordered closure of all dependencies from a\n# top-level node.\n#\n# $1: top-level node name.\n# $2: dependency function, i.e. $(call $2,<name>) returns the children\n#     nodes for <name>.\n# Return: list of nodes, include $1, which will never be included.\n#########################################################################\n-ndk-mod-get-topological-depends = $(call rest,$(call -ndk-mod-get-topo-list,$1,$2))\n\n-test-ndk-mod-get-topological-depends.simple = \\\n    $(eval -local-get-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends :=)\\\n    $(eval topo_deps := $$(call -ndk-mod-get-topological-depends,A,-local-get-deps))\\\n    $(call test-expect,B,$(topo_deps),topo dependencies)\n\n-test-ndk-mod-get-topological-depends.ABC = \\\n    $(eval -local-get-deps = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends :=)\\\n    $(eval C_depends := B)\\\n    $(eval bfs_deps := $$(call -ndk-mod-get-bfs-depends,A,-local-get-deps))\\\n    $(eval topo_deps := $$(call -ndk-mod-get-topological-depends,A,-local-get-deps))\\\n    $(call test-expect,B C,$(bfs_deps),dfs dependencies)\\\n    $(call test-expect,C B,$(topo_deps),topo dependencies)\n\n-test-ndk-mod-get-topological-depends.circular = \\\n    $(eval -local-get-deps = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends := C)\\\n    $(eval C_depends := B)\\\n    $(eval bfs_deps := $$(call -ndk-mod-get-bfs-depends,A,-local-get-deps))\\\n    $(eval topo_deps := $$(call -ndk-mod-get-topological-depends,A,-local-get-deps))\\\n    $(call test-expect,B C,$(bfs_deps),dfs dependencies)\\\n    $(call test-expect,B C,$(topo_deps),topo dependencies)\n\n#########################################################################\n# Return breadth-first walk of a graph, starting from an arbitrary\n# node.\n#\n# This performs a breadth-first walk of the graph and will return a\n# list of nodes. Note that $1 will always be the first in the list.\n#\n# $1: root node name.\n# $2: dependency function, i.e. $(call $2,<name>) returns the nodes\n#     that <name> depends on.\n# Result: list of dependent modules, $1 will be part of it.\n#########################################################################\n-ndk-mod-get-bfs-list = $(strip \\\n    $(eval _ndk_mod_wq := $(call strip-lib-prefix,$1)) \\\n    $(eval _ndk_mod_deps_func := $2)\\\n    $(eval _ndk_mod_list :=)\\\n    $(call -ndk-mod-tree-setup-visit)\\\n    $(call -ndk-mod-tree-set-visited,$(_ndk_mod_wq))\\\n    $(call -ndk-mod-bfs-recursive) \\\n    $(_ndk_mod_list))\n\n# Recursive function used to perform a depth-first scan.\n# Must initialize _ndk_mod_list, _ndk_mod_field, _ndk_mod_wq\n# before calling this.\n-ndk-mod-bfs-recursive = \\\n    $(call -ndk-mod-debug,-ndk-mod-bfs-recursive wq='$(_ndk_mod_wq)' list='$(_ndk_mod_list)' visited='$(_ndk_mod_tree_visitors)')\\\n    $(call -ndk-mod-pop-first)\\\n    $(eval _ndk_mod_list += $$(_ndk_mod_module))\\\n    $(call -ndk-mod-get-depends)\\\n    $(call -ndk-mod-debug,.  node='$(_ndk_mod_module)' deps='$(_ndk_mod_depends)')\\\n    $(foreach _ndk_mod_child,$(_ndk_mod_depends),\\\n        $(if $(call -ndk-mod-tree-is-visited,$(_ndk_mod_child)),,\\\n            $(call -ndk-mod-tree-set-visited,$(_ndk_mod_child))\\\n            $(call -ndk-mod-push-back,$(_ndk_mod_child))\\\n        )\\\n    )\\\n    $(if $(_ndk_mod_wq),$(call -ndk-mod-bfs-recursive))\n\n-test-ndk-mod-get-bfs-list.empty = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(call test-expect,,$(call -ndk-mod-get-bfs-list,,-local-deps))\n\n-test-ndk-mod-get-bfs-list.A = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends :=)\\\n    $(call test-expect,A,$(call -ndk-mod-get-bfs-list,A,-local-deps))\n\n-test-ndk-mod-get-bfs-list.ABCDEF = \\\n    $(eval -local-deps = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends := D E)\\\n    $(eval C_depends := F E)\\\n    $(eval D_depends :=)\\\n    $(eval E_depends :=)\\\n    $(eval F_depends :=)\\\n    $(call test-expect,A B C D E F,$(call -ndk-mod-get-bfs-list,A,-local-deps))\n\n#########################################################################\n# Return breadth-first walk of a graph, starting from an arbitrary\n# node.\n#\n# This performs a breadth-first walk of the graph and will return a\n# list of nodes. Note that $1 will _not_ be part of the list.\n#\n# $1: root node name.\n# $2: dependency function, i.e. $(call $2,<name>) returns the nodes\n#     that <name> depends on.\n# Result: list of dependent modules, $1 will not be part of it.\n#########################################################################\n-ndk-mod-get-bfs-depends = $(call rest,$(call -ndk-mod-get-bfs-list,$1,$2))\n\n-test-ndk-mod-get-bfs-depends.simple = \\\n    $(eval -local-deps-func = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends :=)\\\n    $(eval deps := $$(call -ndk-mod-get-bfs-depends,A,-local-deps-func))\\\n    $(call test-expect,B,$(deps))\n\n-test-ndk-mod-get-bfs-depends.ABC = \\\n    $(eval -local-deps-func = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends :=)\\\n    $(eval C_depends := B)\\\n    $(eval deps := $$(call -ndk-mod-get-bfs-depends,A,-local-deps-func))\\\n    $(call test-expect,B C,$(deps))\\\n\n-test-ndk-mod-get-bfs-depends.ABCDE = \\\n    $(eval -local-deps-func = $$($$1_depends))\\\n    $(eval A_depends := B C)\\\n    $(eval B_depends := D)\\\n    $(eval C_depends := D E F)\\\n    $(eval D_depends :=)\\\n    $(eval E_depends :=)\\\n    $(eval F_depends :=)\\\n    $(eval deps := $$(call -ndk-mod-get-bfs-depends,A,-local-deps-func))\\\n    $(call test-expect,B C D E F,$(deps))\\\n\n-test-ndk-mod-get-bfs-depends.loop = \\\n    $(eval -local-deps-func = $$($$1_depends))\\\n    $(eval A_depends := B)\\\n    $(eval B_depends := A)\\\n    $(eval deps := $$(call -ndk-mod-get-bfs-depends,A,-local-deps-func))\\\n    $(call test-expect,B,$(deps))\n"
  },
  {
    "path": "build/core/definitions-host.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# These definitions contain a few host-specific functions. I.e. they are\n# typically used to generate shell commands during the build and their\n# implementation will depend on the value of the HOST_OS variable.\n#\n\n# -----------------------------------------------------------------------------\n# Function : host-path\n# Arguments: 1: file path\n# Returns  : file path, as understood by the host file system\n# Usage    : $(call host-path,<path>)\n# Rationale: This function is used to translate Cygwin paths into\n#            Cygwin-specific ones. On other platforms, it will just\n#            return its argument.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),cygwin)\nhost-path = $(if $(strip $1),$(call cygwin-to-host-path,$1))\nelse\nhost-path = $1\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-rm\n# Arguments: 1: list of files\n# Usage    : $(call host-rm,<files>)\n# Rationale: This function expands to the host-specific shell command used\n#            to remove some files.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-rm = \\\n    $(eval __host_rm_files := $(foreach __host_rm_file,$1,$(subst /,\\,$(wildcard $(__host_rm_file)))))\\\n    $(if $(__host_rm_files),del /f/q $(__host_rm_files) >NUL 2>NUL)\nelse\nhost-rm = rm -f $1\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-rmdir\n# Arguments: 1: list of files or directories\n# Usage    : $(call host-rm,<files>)\n# Rationale: This function expands to the host-specific shell command used\n#            to remove some files _and_ directories.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-rmdir = \\\n    $(eval __host_rmdir_files := $(foreach __host_rmdir_file,$1,$(subst /,\\,$(wildcard $(__host_rmdir_file)))))\\\n    $(if $(__host_rmdir_files),del /f/s/q $(__host_rmdir_files) >NUL 2>NUL)\nelse\nhost-rmdir = rm -rf $1\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-mkdir\n# Arguments: 1: directory path\n# Usage    : $(call host-mkdir,<path>\n# Rationale: This function expands to the host-specific shell command used\n#            to create a path if it doesn't exist.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-mkdir = md $(subst /,\\,\"$1\") >NUL 2>NUL || rem\nelse\nhost-mkdir = mkdir -p $1\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-cp\n# Arguments: 1: source file\n#            2: target file\n# Usage    : $(call host-cp,<src-file>,<dst-file>)\n# Rationale: This function expands to the host-specific shell command used\n#            to copy a single file\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-cp = copy /b/y $(subst /,\\,\"$1\" \"$2\") > NUL\nelse\nhost-cp = cp -f $1 $2\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-mv\n# Arguments: 1: source file\n#            2: target file\n# Usage    : $(call host-mv,<src-file>,<dst-file>)\n# Rationale: This function expands to the host-specific shell command used\n#            to move a single file\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-mv = move /y $(subst /,\\,\"$1\" \"$2\") > NUL\nelse\nhost-mv = mv -f $1 $2\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-install\n# Arguments: 1: source file\n#            2: target file\n# Usage    : $(call host-install,<src-file>,<dst-file>)\n# Rationale: This function expands to the host-specific shell command used\n#            to install a file or directory, while preserving its timestamps\n#            (if possible).\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-install = copy /b/y $(subst /,\\,\"$1\" \"$2\") > NUL\nelse\nhost-install = install -p $1 $2\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-echo-build-step\n# Arguments: 1: ABI\n#            2: Step description (e.g. 'Compile C++', or 'StaticLibrary')\n# Usage    : ---->|$(call host-echo-build-step,Compile) ....other text...\n# Rationale: This function expands to the host-specific shell command used\n#            to print the prefix of a given build step / command.\n# -----------------------------------------------------------------------------\nhost-echo-build-step = @ $(HOST_ECHO) [$1] $(call left-justify-quoted-15,$2):\n\n# -----------------------------------------------------------------------------\n# Function : host-c-includes\n# Arguments: 1: list of file paths (e.g. \"foo bar\")\n# Returns  : list of include compiler options (e.g. \"-Ifoo -Ibar\")\n# Usage    : $(call host-c-includes,<paths>)\n# Rationale: This function is used to translate Cygwin paths into\n#            Cygwin-specific ones. On other platforms, it will just\n#            return its argument.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),cygwin)\nhost-c-includes = $(patsubst %,-I%,$(call host-path,$1))\nelse\nhost-c-includes = $(1:%=-I%)\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-copy-if-differ\n# Arguments: 1: source file\n#            2: destination file\n# Usage    : $(call host-copy-if-differ,<src-file>,<dst-file>)\n# Rationale: This function copy source file to destination file if contents are\n#            different.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\nhost-copy-if-differ = $(HOST_CMP) -s $1 $2 > NUL || copy /b/y $(subst /,\\,\"$1\" \"$2\") > NUL\nelse\nhost-copy-if-differ = $(HOST_CMP) -s $1 $2 > /dev/null 2>&1 || cp -f $1 $2\nendif\n\n\n# -----------------------------------------------------------------------------\n# Function : host-path-is-absolute\n# Arguments: 1: file path\n# Usage    : $(call host-path-is-absolute,<path>)\n# Rationale: This function returns a non-empty result if the input path is\n#            absolute on the host filesystem.\n# -----------------------------------------------------------------------------\n\n# On Windows, we need to take care drive prefix in file paths, e.g.:\n#    /foo       -> top-level 'foo' directory on current drive.\n#    //bar/foo  -> top-level 'foo' on network share 'bar'\n#    c:/foo     -> top-level 'foo' directory on C drive.\n#    c:foo      -> 'foo' subdirectory on C drive's current directory.\n#\n# Treat all of them as absolute. Filtering the first two cases is easy\n# by simply looking at the first character. The other ones are more\n# complicated and the simplest way is still to try all alphabet letters\n# directly. Anything else involves very complicated GNU Make parsing\n# voodoo.\nndk-windows-drive-letters := a b c d e f g h i j k l m n o p q r s t u v w x y z \\\n                             A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n\nndk-windows-drive-patterns := $(foreach _drive,$(ndk-windows-drive-letters),$(_drive):%)\n\nwindows-path-is-absolute = $(if $(filter /% $(ndk-windows-drive-patterns),$(subst \\,/,$1)),true)\n\nifeq ($(HOST_OS),windows)\nhost-path-is-absolute = $(call windows-path-is-absolute,$1)\nelse\nhost-path-is-absolute = $(if $(filter /%,$1),true)\nendif\n\n-test-host-path-is-absolute.relative-paths = \\\n  $(call test-expect,,$(call host-path-is-absolute,foo))\\\n  $(call test-expect,,$(call host-path-is-absolute,foo/bar))\\\n  $(call test-expect,,$(call host-path-is-absolute,.))\\\n  $(call test-expect,,$(call host-path-is-absolute,..))\n\n-test-host-path-is-absolute.absolute-paths = \\\n  $(call test-expect,true,$(call host-path-is-absolute,/))\\\n  $(call test-expect,true,$(call host-path-is-absolute,/foo))\\\n  $(call test-expect,true,$(call host-path-is-absolute,/foo/bar))\\\n  $(call test-expect,true,$(call host-path-is-absolute,//foo))\\\n  $(call test-expect,true,$(call host-path-is-absolute,/.))\n\n-test-host-path-is-asbolute.windows-relative-paths = \\\n  $(call test-expect,$(call windows-path-is-absolute,foo))\\\n  $(call test-expect,$(call windows-path-is-absolute,foo/bar))\\\n  $(call test-expect,$(call windows-path-is-absolute,.))\\\n  $(call test-expect,$(call windows-path-is-absolute,..))\n\n-test-host-path-is-asbolute.windows-absolute-paths = \\\n  $(call test-expect,true,$(call windows-path-is-absolute,c:/))\\\n  $(call test-expect,true,$(call windows-path-is-absolute,x:))\\\n  $(call test-expect,true,$(call windows-path-is-absolute,K:foo))\\\n  $(call test-expect,true,$(call windows-path-is-absolute,C:\\Foo\\Bar))\\\n  $(call test-expect,true,$(call windows-path-is-absolute,\\Foo))\n"
  },
  {
    "path": "build/core/definitions-tests.mk",
    "content": "# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Definitions for the Android NDK build system's internal unit tests.\n#\n\n#\n# A function which names begin with -test- (e.g. -test-foo) is assumed\n# to be an internal unit test. It will be run automatically by ndk-build\n# if NDK_UNIT_TESTS is defined in your environment.\n#\n# Each test should call one of the following functions that will\n# register a failure:\n#\n#   $(call test-expect,<expected-value>,<actual-value>)\n#\n#      This will check that <actual-value> is equal to <expected-value>.\n#      If not, this will print an error message and increment the failure\n#      counter.\n#\n#   $(call test-assert,<expected-value>,<actual-value>)\n#\n#      This is similar to test-expect, though it will abort the program\n#      immediately after displaying an error message.\n#\n# Here's an example that checks that the 'filter' function works correctly:\n#\n#   -test-filter = \\\n#     $(call test-expect,foo,$(filter bar,foo bar))\n#\n#\n\n-ndk-test-start = \\\n  $(eval _test_name := $1)\\\n  $(eval _test_list += $1)\\\n  $(eval _test_failed :=)\\\n  $(info [$1  RUN])\n\n# End current unit test.\n#\n-ndk-test-end = \\\n  $(if $(_test_failed),\\\n    $(info [$(_test_name) FAIL])$(error Aborting)\\\n    $(eval _test_failures += $$(_test_name))\\\n  ,\\\n    $(info [$(_test_name)   OK])\\\n  )\n\n# Define NDK_UNIT_TESTS to 2 to dump each test-expect/assert check.\n#\nifeq (2,$(NDK_UNIT_TESTS))\n-ndk-test-log = $(info .  $(_test_name): $1)\nelse\n-ndk-test-log = $(empty)\nendif\n\ntest-expect = \\\n  $(call -ndk-test-log,expect '$2' == '$1')\\\n  $(if $(call sne,$1,$2),\\\n    $(info ERROR <$(_test_name)>:$3)\\\n    $(info .  expected value:'$1')\\\n    $(info .  actual value:  '$2')\\\n    $(eval _test_failed := true)\\\n  )\n\ntest-assert = \\\n  $(call -ndk-test-log,assert '$2' == '$1')\\\n  $(if $(call sne,$1,$2),\\\n    $(info ASSERT <$(_test_name)>:$3)\\\n    $(info .  expected value:'$1')\\\n    $(info .  actual value:  '$2')\\\n    $(eval _test_failed := true)\\\n    $(error Aborting.)\\\n  )\n\n# Run all the tests, i.e. all functions that are defined with a -test-\n# prefix will be called now in succession.\nndk-run-all-tests = \\\n  $(info ================= STARTING NDK-BUILD UNIT TESTS =================)\\\n  $(eval _test_list :=)\\\n  $(eval _test_failures :=)\\\n  $(foreach _test,$(filter -test-%,$(.VARIABLES)),\\\n    $(call -ndk-test-start,$(_test))\\\n    $(call $(_test))\\\n    $(call -ndk-test-end)\\\n  )\\\n  $(eval _test_count := $$(words $$(_test_list)))\\\n  $(eval _test_fail_count := $$(words $$(_test_failures)))\\\n  $(if $(_test_failures),\\\n    $(info @@@@@@@@@@@ FAILED $(_test_fail_count) of $(_test_count) NDK-BUILD UNIT TESTS @@@@@@@)\\\n    $(foreach _test_name,$(_test_failures),\\\n      $(info .  $(_test_name)))\\\n  ,\\\n    $(info =================== PASSED $(_test_count) NDK-BUILD UNIT TESTS =================)\\\n  )\n"
  },
  {
    "path": "build/core/definitions-utils.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Common utility functions.\n#\n# NOTE: All the functions here should be purely functional, i.e. avoid\n#       using global variables or depend on the file system / environment\n#       variables. This makes testing easier.\n\n# -----------------------------------------------------------------------------\n# Macro    : empty\n# Returns  : an empty macro\n# Usage    : $(empty)\n# -----------------------------------------------------------------------------\nempty :=\n\n# -----------------------------------------------------------------------------\n# Macro    : space\n# Returns  : a single space\n# Usage    : $(space)\n# -----------------------------------------------------------------------------\nspace  := $(empty) $(empty)\n\nspace4 := $(space)$(space)$(space)$(space)\n\n# -----------------------------------------------------------------------------\n# Macro    : comma\n# Returns  : a single comma\n# Usage    : $(comma)\n# -----------------------------------------------------------------------------\ncomma := ,\n\n# -----------------------------------------------------------------------------\n# Macro    : colon\n# Returns  : a single colon\n# Usage    : $(colon)\n# -----------------------------------------------------------------------------\ncolon := :\n\n# -----------------------------------------------------------------------------\n# Function : remove-duplicates\n# Arguments: a list\n# Returns  : the list with duplicate items removed, order is preserved.\n# Usage    : $(call remove-duplicates, <LIST>)\n# Note     : This is equivalent to the 'uniq' function provided by GMSL,\n#            however this implementation is non-recursive and *much*\n#            faster. It will also not explode the stack with a lot of\n#            items like 'uniq' does.\n# -----------------------------------------------------------------------------\nremove-duplicates = $(strip \\\n  $(eval __uniq_ret :=) \\\n  $(foreach __uniq_item,$1,\\\n    $(if $(findstring $(__uniq_item),$(__uniq_ret)),,\\\n      $(eval __uniq_ret += $(__uniq_item))\\\n    )\\\n  )\\\n  $(__uniq_ret))\n\n-test-remove-duplicates = \\\n  $(call test-expect,,$(call remove-duplicates))\\\n  $(call test-expect,foo bar,$(call remove-duplicates,foo bar))\\\n  $(call test-expect,foo bar,$(call remove-duplicates,foo bar foo bar))\\\n  $(call test-expect,foo bar,$(call remove-duplicates,foo foo bar bar bar))\n\n# -----------------------------------------------------------------------------\n# Function : clear-vars\n# Arguments: 1: list of variable names\n#            2: file where the variable should be defined\n# Returns  : None\n# Usage    : $(call clear-vars, VAR1 VAR2 VAR3...)\n# Rationale: Clears/undefines all variables in argument list\n# -----------------------------------------------------------------------------\nclear-vars = $(foreach __varname,$1,$(eval $(__varname) := $(empty)))\n\n# -----------------------------------------------------------------------------\n# Function : filter-by\n# Arguments: 1: list\n#            2: predicate function, will be called as $(call $2,<name>)\n#               and it this returns a non-empty value, then <name>\n#               will be appended to the result.\n# Returns  : elements of $1 that satisfy the predicate function $2\n# -----------------------------------------------------------------------------\nfilter-by = $(strip \\\n  $(foreach __filter_by_n,$1,\\\n    $(if $(call $2,$(__filter_by_n)),$(__filter_by_n))))\n\n-test-filter-by = \\\n    $(eval -local-func = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call filter-by,,-local-func))\\\n    $(call test-expect,foo,$(call filter-by,foo,-local-func))\\\n    $(call test-expect,foo,$(call filter-by,foo bar,-local-func))\\\n    $(call test-expect,foo foo,$(call filter-by,aaa foo bar foo,-local-func))\\\n    $(eval -local-func = $$(call sne,foo,$$1))\\\n    $(call test-expect,,$(call filter-by,,-local-func))\\\n    $(call test-expect,,$(call filter-by,foo,-local-func))\\\n    $(call test-expect,bar,$(call filter-by,foo bar,-local-func))\\\n    $(call test-expect,aaa bar,$(call filter-by,aaa foo bar,-local-func))\n\n# -----------------------------------------------------------------------------\n# Function : filter-out-by\n# Arguments: 1: list\n#            2: predicate function, will be called as $(call $2,<name>)\n#               and it this returns an empty value, then <name>\n#               will be appended to the result.\n# Returns  : elements of $1 that do not satisfy the predicate function $2\n# -----------------------------------------------------------------------------\nfilter-out-by = $(strip \\\n  $(foreach __filter_out_by_n,$1,\\\n    $(if $(call $2,$(__filter_out_by_n)),,$(__filter_out_by_n))))\n\n-test-filter-out-by = \\\n    $(eval -local-func = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call filter-out-by,,-local-func))\\\n    $(call test-expect,,$(call filter-out-by,foo,-local-func))\\\n    $(call test-expect,bar,$(call filter-out-by,foo bar,-local-func))\\\n    $(call test-expect,aaa bar,$(call filter-out-by,aaa foo bar foo,-local-func))\\\n    $(eval -local-func = $$(call sne,foo,$$1))\\\n    $(call test-expect,,$(call filter-out-by,,-local-func))\\\n    $(call test-expect,foo,$(call filter-out-by,foo,-local-func))\\\n    $(call test-expect,foo,$(call filter-out-by,foo bar,-local-func))\\\n    $(call test-expect,foo foo,$(call filter-out-by,aaa foo bar foo,-local-func))\n\n# -----------------------------------------------------------------------------\n# Function : find-first\n# Arguments: 1: list\n#            2: predicate function, will be called as $(call $2,<name>).\n# Returns  : the first item of $1 that satisfies the predicate.\n# -----------------------------------------------------------------------------\nfind-first = $(firstword $(call filter-by,$1,$2))\n\n-test-find-first.empty = \\\n    $(eval -local-pred = $$(call seq,foo,$$1))\\\n    $(call test-expect,,$(call find-first,,-local-pred))\\\n    $(call test-expect,,$(call find-first,bar,-local-pred))\n\n-test-find-first.simple = \\\n    $(eval -local-pred = $$(call seq,foo,$$1))\\\n    $(call test-expect,foo,$(call find-first,foo,-local-pred))\\\n    $(call test-expect,foo,$(call find-first,aaa foo bar,-local-pred))\\\n    $(call test-expect,foo,$(call find-first,aaa foo foo bar,-local-pred))\n\n# -----------------------------------------------------------------------------\n# Function : parent-dir\n# Arguments: 1: path\n# Returns  : Parent dir or path of $1, with final separator removed.\n# -----------------------------------------------------------------------------\nifeq ($(HOST_OS),windows)\n# On Windows, defining parent-dir is a bit more tricky because the\n# GNU Make $(dir ...) function doesn't return an empty string when it\n# reaches the top of the directory tree, and we want to enforce this to\n# avoid infinite loops.\n#\n#   $(dir C:)     -> C:       (empty expected)\n#   $(dir C:/)    -> C:/      (empty expected)\n#   $(dir C:\\)    -> C:\\      (empty expected)\n#   $(dir C:/foo) -> C:/      (correct)\n#   $(dir C:\\foo) -> C:\\      (correct)\n#\nparent-dir = $(patsubst %/,%,$(strip \\\n    $(eval __dir_node := $(patsubst %/,%,$(subst \\,/,$1)))\\\n    $(eval __dir_parent := $(dir $(__dir_node)))\\\n    $(filter-out $1,$(__dir_parent))\\\n    ))\nelse\nparent-dir = $(patsubst %/,%,$(dir $(1:%/=%)))\nendif\n\n-test-parent-dir = \\\n  $(call test-expect,,$(call parent-dir))\\\n  $(call test-expect,.,$(call parent-dir,foo))\\\n  $(call test-expect,foo,$(call parent-dir,foo/bar))\\\n  $(call test-expect,foo,$(call parent-dir,foo/bar/))\n\n# -----------------------------------------------------------------------------\n# Strip any 'lib' prefix in front of a given string.\n#\n# Function : strip-lib-prefix\n# Arguments: 1: module name\n# Returns  : module name, without any 'lib' prefix if any\n# Usage    : $(call strip-lib-prefix,$(LOCAL_MODULE))\n# -----------------------------------------------------------------------------\nstrip-lib-prefix = $(1:lib%=%)\n\n-test-strip-lib-prefix = \\\n  $(call test-expect,,$(call strip-lib-prefix,))\\\n  $(call test-expect,foo,$(call strip-lib-prefix,foo))\\\n  $(call test-expect,foo,$(call strip-lib-prefix,libfoo))\\\n  $(call test-expect,nolibfoo,$(call strip-lib-prefix,nolibfoo))\\\n  $(call test-expect,foolib,$(call strip-lib-prefix,foolib))\\\n  $(call test-expect,foo bar,$(call strip-lib-prefix,libfoo libbar))\n\n# -----------------------------------------------------------------------------\n# Left-justify input string with spaces to fill a width of 15.\n# Function: left-justify-quoted-15\n# Arguments: 1: Input text\n# Returns: A quoted string that can be used in command scripts to print\n#          the left-justified input with host-echo.\n#\n# Usage:  ---->@$(call host-echo, $(call left-justify-quoted-15,$(_TEXT)): Do stuff)\n#         Where ----> is a TAB character.\n# -----------------------------------------------------------------------------\nleft-justify-quoted-15 = $(call -left-justify,$1,xxxxxxxxxxxxxxx)\n\n-test-left-justify-quoted-15 = \\\n  $(call test-expect,\"               \",$(call left-justify-quoted-15,))\\\n  $(call test-expect,\"Foo Bar        \",$(call left-justify-quoted-15,Foo Bar))\\\n  $(call test-expect,\"Very long string over 15 characters wide\",$(strip \\\n    $(call left-justify-quoted-15,Very long string over 15 characters wide)))\n\n# Used internally to compute a quoted left-justified text string.\n# $1: Input string.\n# $2: A series of contiguous x's, its length determines the full width to justify to.\n# Return: A quoted string with the input text left-justified appropriately.\n-left-justify = $(strip \\\n    $(eval __lj_temp := $(subst $(space),x,$1))\\\n    $(foreach __lj_a,$(__gmsl_characters),$(eval __lj_temp := $$(subst $$(__lj_a),x,$(__lj_temp))))\\\n    $(eval __lj_margin := $$(call -justification-margin,$(__lj_temp),$2)))\"$1$(subst x,$(space),$(__lj_margin))\"\n\n-test-left-justify = \\\n  $(call test-expect,\"\",$(call -left-justify,,))\\\n  $(call test-expect,\"foo\",$(call -left-justify,foo,xxx))\\\n  $(call test-expect,\"foo \",$(call -left-justify,foo,xxxx))\\\n  $(call test-expect,\"foo   \",$(call -left-justify,foo,xxxxxx))\\\n  $(call test-expect,\"foo         \",$(call -left-justify,foo,xxxxxxxxxxxx))\\\n  $(call test-expect,\"very long string\",$(call -left-justify,very long string,xxx))\\\n\n# Used internally to compute a justification margin.\n# Expects $1 to be defined to a string of consecutive x's (e.g. 'xxxx')\n# Expects $2 to be defined to a maximum string of x's (e.g. 'xxxxxxxxx')\n# Returns a string of x's such as $1 + $(result) is equal to $2\n# If $1 is larger than $2, return empty string..\n-justification-margin = $(strip \\\n    $(if $2,\\\n      $(if $1,\\\n        $(call -justification-margin-inner,$1,$2),\\\n        $2\\\n      ),\\\n    $1))\n\n-justification-margin-inner = $(if $(findstring $2,$1),,x$(call -justification-margin-inner,x$1,$2))\n\n-test-justification-margin = \\\n  $(call test-expect,,$(call -justification-margin,,))\\\n  $(call test-expect,,$(call -justification-margin,xxx,xxx))\\\n  $(call test-expect,xxxxxx,$(call -justification-margin,,xxxxxx))\\\n  $(call test-expect,xxxxx,$(call -justification-margin,x,xxxxxx))\\\n  $(call test-expect,xxxx,$(call -justification-margin,xx,xxxxxx))\\\n  $(call test-expect,xxx,$(call -justification-margin,xxx,xxxxxx))\\\n  $(call test-expect,xx,$(call -justification-margin,xxxx,xxxxxx))\\\n  $(call test-expect,x,$(call -justification-margin,xxxxx,xxxxxx))\\\n  $(call test-expect,,$(call -justification-margin,xxxxxx,xxxxxx))\\\n  $(call test-expect,,$(call -justification-margin,xxxxxxxxxxx,xxxxxx))\\\n\n"
  },
  {
    "path": "build/core/definitions.mk",
    "content": "# Copyright (C) 2009, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Common definitions for the Android NDK build system\n#\n\n# We use the GNU Make Standard Library\ninclude $(NDK_ROOT)/build/gmsl/gmsl\n\ninclude $(BUILD_SYSTEM)/definitions-tests.mk\ninclude $(BUILD_SYSTEM)/definitions-utils.mk\ninclude $(BUILD_SYSTEM)/definitions-host.mk\ninclude $(BUILD_SYSTEM)/definitions-graph.mk\n\ndefine crystax-dir\n$(strip \\\n    $(call assert-defined,NDK_ROOT)\\\n    $(eval __crystax_dir := $(call host-path,$(NDK_ROOT)/sources/crystax))\\\n    $(if $(strip $(wildcard $(__crystax_dir))),\\\n        $(__crystax_dir),\\\n        $(call __ndk_info,Could not find libcrystax directory: $(call pretty-dir,$(__crystax_dir)) (broken NDK?))\\\n        $(call __ndk_error,Aborting)\\\n    )\n)\nendef\n\n# -----------------------------------------------------------------------------\n# Macro    : this-makefile\n# Returns  : the name of the current Makefile in the inclusion stack\n# Usage    : $(this-makefile)\n# -----------------------------------------------------------------------------\nthis-makefile = $(lastword $(MAKEFILE_LIST))\n\n# -----------------------------------------------------------------------------\n# Macro    : local-makefile\n# Returns  : the name of the last parsed Android.mk file\n# Usage    : $(local-makefile)\n# -----------------------------------------------------------------------------\nlocal-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))\n\n# -----------------------------------------------------------------------------\n# Function : assert-defined\n# Arguments: 1: list of variable names\n# Returns  : None\n# Usage    : $(call assert-defined, VAR1 VAR2 VAR3...)\n# Rationale: Checks that all variables listed in $1 are defined, or abort the\n#            build\n# -----------------------------------------------------------------------------\nassert-defined = $(foreach __varname,$(strip $1),\\\n  $(if $(strip $($(__varname))),,\\\n    $(call __ndk_error, Assertion failure: $(__varname) is not defined)\\\n  )\\\n)\n\n# -----------------------------------------------------------------------------\n# Function : check-required-vars\n# Arguments: 1: list of variable names\n#            2: file where the variable(s) should be defined\n# Returns  : None\n# Usage    : $(call check-required-vars, VAR1 VAR2 VAR3..., <file>)\n# Rationale: Checks that all required vars listed in $1 were defined by $2\n#            or abort the build with an error\n# -----------------------------------------------------------------------------\ncheck-required-vars = $(foreach __varname,$1,\\\n  $(if $(strip $($(__varname))),,\\\n    $(call __ndk_info, Required variable $(__varname) is not defined by $2)\\\n    $(call __ndk_error,Aborting)\\\n  )\\\n)\n\n# The list of default C++ extensions supported by GCC.\ndefault-c++-extensions := .cc .cp .cxx .cpp .CPP .c++ .C\n\n# The list of default RS extensions supported by llvm-rs-cc\ndefault-rs-extensions := .rs .fs\n\n# -----------------------------------------------------------------------------\n# Function : generate-dir\n# Arguments: 1: directory path\n# Returns  : Generate a rule, but not dependency, to create a directory with\n#            host-mkdir.\n# Usage    : $(call generate-dir,<path>)\n# -----------------------------------------------------------------------------\ndefine ev-generate-dir\n__ndk_dir := $1\nifeq (,$$(__ndk_dir_flag__$$(__ndk_dir)))\n# Note that the following doesn't work because path in windows may contain\n# ':' if ndk-build is called inside jni/ directory when path is expanded\n# to full-path, eg. C:/path/to/project/jni/\n#\n#    __ndk_dir_flag__$1 := true\n#\n__ndk_dir_flag__$$(__ndk_dir) := true\n$1:\n\t$$(hide) $$(call host-mkdir,$$@)\nendif\nendef\n\ngenerate-dir = $(eval $(call ev-generate-dir,$1))\n\n# -----------------------------------------------------------------------------\n# Function : generate-file-dir\n# Arguments: 1: file path\n# Returns  : Generate a dependency and a rule to ensure that the parent\n#            directory of the input file path will be created before it.\n#            This is used to enforce a call to host-mkdir.\n# Usage    : $(call generate-file-dir,<file>)\n# Rationale: Many object files will be stored in the same output directory.\n#            Introducing a dependency on the latter avoids calling mkdir -p\n#            for every one of them.\n#\n# -----------------------------------------------------------------------------\n\ndefine ev-generate-file-dir\n__ndk_file_dir := $(call parent-dir,$1)\n$$(call generate-dir,$$(__ndk_file_dir))\n$1:| $$(__ndk_file_dir)\nendef\n\ngenerate-file-dir = $(eval $(call ev-generate-file-dir,$1))\n\n# -----------------------------------------------------------------------------\n# Function : generate-list-file\n# Arguments: 1: list of strings (possibly very long)\n#            2: file name\n# Returns  : write the content of a possibly very long string list to a file.\n#            this shall be used in commands and will work around limitations\n#            of host command-line lengths.\n# Usage    : $(call host-echo-to-file,<string-list>,<file>)\n# Rationale: When there is a very large number of objects and/or libraries at\n#            link time, the size of the command becomes too large for the\n#            host system's maximum. Various tools however support the\n#            @<listfile> syntax, where <listfile> is the path of a file\n#            which content will be parsed as if they were options.\n#\n#            This function is used to generate such a list file from a long\n#            list of strings in input.\n#\n# -----------------------------------------------------------------------------\n\n# Helper functions because the GNU Make $(word ...) function does\n# not accept a 0 index, so we need to bump any of these to 1 when\n# we find them.\n#\nindex-is-zero = $(filter 0 00 000 0000 00000 000000 0000000,$1)\nbump-0-to-1 = $(if $(call index-is-zero,$1),1,$1)\n\n-test-bump-0-to-1 = \\\n  $(call test-expect,$(call bump-0-to-1))\\\n  $(call test-expect,1,$(call bump-0-to-1,0))\\\n  $(call test-expect,1,$(call bump-0-to-1,1))\\\n  $(call test-expect,2,$(call bump-0-to-1,2))\\\n  $(call test-expect,1,$(call bump-0-to-1,00))\\\n  $(call test-expect,1,$(call bump-0-to-1,000))\\\n  $(call test-expect,1,$(call bump-0-to-1,0000))\\\n  $(call test-expect,1,$(call bump-0-to-1,00000))\\\n  $(call test-expect,1,$(call bump-0-to-1,000000))\\\n  $(call test-expect,10,$(call bump-0-to-1,10))\\\n  $(call test-expect,100,$(call bump-0-to-1,100))\n\n# Same as $(wordlist ...) except the start index, if 0, is bumped to 1\nindex-word-list = $(wordlist $(call bump-0-to-1,$1),$2,$3)\n\n-test-index-word-list = \\\n  $(call test-expect,,$(call index-word-list,1,1))\\\n  $(call test-expect,a b,$(call index-word-list,0,2,a b c d))\\\n  $(call test-expect,b c,$(call index-word-list,2,3,a b c d))\\\n\n# NOTE: With GNU Make $1 and $(1) are equivalent, which means\n#       that $10 is equivalent to $(1)0, and *not* $(10).\n\n# Used to generate a slice of up to 10 items starting from index $1,\n# If $1 is 0, it will be bumped to 1 (and only 9 items will be printed)\n# $1: start (tenth) index. Can be 0\n# $2: word list\n#\ndefine list-file-start-gen-10\n\t$$(hide) $$(HOST_ECHO_N) \"$(call index-word-list,$10,$19,$2) \" >> $$@\nendef\n\n# Used to generate a slice of always 10 items starting from index $1\n# $1: start (tenth) index. CANNOT BE 0\n# $2: word list\ndefine list-file-always-gen-10\n\t$$(hide) $$(HOST_ECHO_N) \"$(wordlist $10,$19,$2) \" >> $$@\nendef\n\n# Same as list-file-always-gen-10, except that the word list might be\n# empty at position $10 (i.e. $(1)0)\ndefine list-file-maybe-gen-10\nifneq ($(word $10,$2),)\n\t$$(hide) $$(HOST_ECHO_N) \"$(wordlist $10,$19,$2) \" >> $$@\nendif\nendef\n\ndefine list-file-start-gen-100\n$(call list-file-start-gen-10,$10,$2)\n$(call list-file-always-gen-10,$11,$2)\n$(call list-file-always-gen-10,$12,$2)\n$(call list-file-always-gen-10,$13,$2)\n$(call list-file-always-gen-10,$14,$2)\n$(call list-file-always-gen-10,$15,$2)\n$(call list-file-always-gen-10,$16,$2)\n$(call list-file-always-gen-10,$17,$2)\n$(call list-file-always-gen-10,$18,$2)\n$(call list-file-always-gen-10,$19,$2)\nendef\n\ndefine list-file-always-gen-100\n$(call list-file-always-gen-10,$10,$2)\n$(call list-file-always-gen-10,$11,$2)\n$(call list-file-always-gen-10,$12,$2)\n$(call list-file-always-gen-10,$13,$2)\n$(call list-file-always-gen-10,$14,$2)\n$(call list-file-always-gen-10,$15,$2)\n$(call list-file-always-gen-10,$16,$2)\n$(call list-file-always-gen-10,$17,$2)\n$(call list-file-always-gen-10,$18,$2)\n$(call list-file-always-gen-10,$19,$2)\nendef\n\ndefine list-file-maybe-gen-100\nifneq ($(word $(call bump-0-to-1,$100),$2),)\nifneq ($(word $199,$2),)\n$(call list-file-start-gen-10,$10,$2)\n$(call list-file-always-gen-10,$11,$2)\n$(call list-file-always-gen-10,$12,$2)\n$(call list-file-always-gen-10,$13,$2)\n$(call list-file-always-gen-10,$14,$2)\n$(call list-file-always-gen-10,$15,$2)\n$(call list-file-always-gen-10,$16,$2)\n$(call list-file-always-gen-10,$17,$2)\n$(call list-file-always-gen-10,$18,$2)\n$(call list-file-always-gen-10,$19,$2)\nelse\nifneq ($(word $150,$2),)\n$(call list-file-start-gen-10,$10,$2)\n$(call list-file-always-gen-10,$11,$2)\n$(call list-file-always-gen-10,$12,$2)\n$(call list-file-always-gen-10,$13,$2)\n$(call list-file-always-gen-10,$14,$2)\n$(call list-file-maybe-gen-10,$15,$2)\n$(call list-file-maybe-gen-10,$16,$2)\n$(call list-file-maybe-gen-10,$17,$2)\n$(call list-file-maybe-gen-10,$18,$2)\n$(call list-file-maybe-gen-10,$19,$2)\nelse\n$(call list-file-start-gen-10,$10,$2)\n$(call list-file-maybe-gen-10,$11,$2)\n$(call list-file-maybe-gen-10,$12,$2)\n$(call list-file-maybe-gen-10,$13,$2)\n$(call list-file-maybe-gen-10,$14,$2)\nendif\nendif\nendif\nendef\n\ndefine list-file-maybe-gen-1000\nifneq ($(word $(call bump-0-to-1,$1000),$2),)\nifneq ($(word $1999,$2),)\n$(call list-file-start-gen-100,$10,$2)\n$(call list-file-always-gen-100,$11,$2)\n$(call list-file-always-gen-100,$12,$2)\n$(call list-file-always-gen-100,$13,$2)\n$(call list-file-always-gen-100,$14,$2)\n$(call list-file-always-gen-100,$15,$2)\n$(call list-file-always-gen-100,$16,$2)\n$(call list-file-always-gen-100,$17,$2)\n$(call list-file-always-gen-100,$18,$2)\n$(call list-file-always-gen-100,$19,$2)\nelse\nifneq ($(word $1500,$2),)\n$(call list-file-start-gen-100,$10,$2)\n$(call list-file-always-gen-100,$11,$2)\n$(call list-file-always-gen-100,$12,$2)\n$(call list-file-always-gen-100,$13,$2)\n$(call list-file-always-gen-100,$14,$2)\n$(call list-file-maybe-gen-100,$15,$2)\n$(call list-file-maybe-gen-100,$16,$2)\n$(call list-file-maybe-gen-100,$17,$2)\n$(call list-file-maybe-gen-100,$18,$2)\n$(call list-file-maybe-gen-100,$19,$2)\nelse\n$(call list-file-start-gen-100,$10,$2)\n$(call list-file-maybe-gen-100,$11,$2)\n$(call list-file-maybe-gen-100,$12,$2)\n$(call list-file-maybe-gen-100,$13,$2)\n$(call list-file-maybe-gen-100,$14,$2)\nendif\nendif\nendif\nendef\n\n\ndefine generate-list-file-ev\n__list_file := $2\n\n.PHONY: $$(__list_file).tmp\n\n$$(call generate-file-dir,$$(__list_file).tmp)\n\n$$(__list_file).tmp:\n\t$$(hide) $$(HOST_ECHO_N) \"\" > $$@\n$(call list-file-maybe-gen-1000,0,$1)\n$(call list-file-maybe-gen-1000,1,$1)\n$(call list-file-maybe-gen-1000,2,$1)\n$(call list-file-maybe-gen-1000,3,$1)\n$(call list-file-maybe-gen-1000,4,$1)\n$(call list-file-maybe-gen-1000,5,$1)\n\n$$(__list_file): $$(__list_file).tmp\n\t$$(hide) $$(call host-copy-if-differ,$$@.tmp,$$@)\n\t$$(hide) $$(call host-rm,$$@.tmp)\n\nendef\n\ngenerate-list-file = $(eval $(call generate-list-file-ev,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Function : link-whole-archives\n# Arguments: 1: list of whole static libraries\n# Returns  : linker flags to use the whole static libraries\n# Usage    : $(call link-whole-archives,<libraries>)\n# Rationale: This function is used to put the list of whole static libraries\n#            inside a -Wl,--whole-archive ... -Wl,--no-whole-archive block.\n#            If the list is empty, it returns an empty string.\n#            This function also calls host-path to translate the library\n#            paths.\n# -----------------------------------------------------------------------------\nlink-whole-archives = $(if $(strip $1),$(call link-whole-archive-flags,$1))\nlink-whole-archive-flags = -Wl,--whole-archive $(call host-path,$1) -Wl,--no-whole-archive\n\n-test-link-whole-archive = \\\n  $(call test-expect,,$(call link-whole-archives))\\\n  $(eval _start := -Wl,--whole-archive)\\\n  $(eval _end := -Wl,--no-whole-archive)\\\n  $(call test-expect,$(_start) foo $(_end),$(call link-whole-archives,foo))\\\n  $(call test-expect,$(_start) foo bar $(_end),$(call link-whole-archives,foo bar))\n\n# =============================================================================\n#\n# Modules database\n#\n# The following declarations are used to manage the list of modules\n# defined in application's Android.mk files.\n#\n# Technical note:\n#    We use __ndk_modules to hold the list of all modules corresponding\n#    to a given application.\n#\n#    For each module 'foo', __ndk_modules.foo.<field> is used\n#    to store module-specific information.\n#\n#        type         -> type of module (e.g. 'static', 'shared', ...)\n#        depends      -> list of other modules this module depends on\n#\n#    Also, LOCAL_XXXX values defined for a module are recorded in XXXX, e.g.:\n#\n#        PATH   -> recorded LOCAL_PATH for the module\n#        CFLAGS -> recorded LOCAL_CFLAGS for the module\n#        ...\n#\n#    Some of these are created by build scripts like BUILD_STATIC_LIBRARY:\n#\n#        MAKEFILE -> The Android.mk where the module is defined.\n#        LDFLAGS  -> Final linker flags\n#        OBJECTS  -> List of module objects\n#        BUILT_MODULE -> location of module built file (e.g. obj/<app>/<abi>/libfoo.so)\n#\n#    Note that some modules are never installed (e.g. static libraries).\n#\n# =============================================================================\n\n# The list of LOCAL_XXXX variables that are recorded for each module definition\n# These are documented by docs/ANDROID-MK.TXT. Exception is LOCAL_MODULE\n#\nmodules-LOCALS := \\\n    MODULE \\\n    MODULE_FILENAME \\\n    PATH \\\n    SRC_FILES \\\n    CPP_EXTENSION \\\n    OBJC_EXTENSION \\\n    OBJCPP_EXTENSION \\\n    C_INCLUDES \\\n    CFLAGS \\\n    OBJCFLAGS \\\n    CONLYFLAGS \\\n    CXXFLAGS \\\n    CPPFLAGS \\\n    ASMFLAGS \\\n    STATIC_LIBRARIES \\\n    WHOLE_STATIC_LIBRARIES \\\n    SHARED_LIBRARIES \\\n    LDLIBS \\\n    ALLOW_UNDEFINED_SYMBOLS \\\n    ARM_MODE \\\n    ARM_NEON \\\n    DISABLE_NO_EXECUTE \\\n    DISABLE_RELRO \\\n    DISABLE_FORMAT_STRING_CHECKS \\\n    DISABLE_FATAL_LINKER_WARNINGS \\\n    EXPORT_CFLAGS \\\n    EXPORT_CONLYFLAGS \\\n    EXPORT_CPPFLAGS \\\n    EXPORT_ASMFLAGS \\\n    EXPORT_LDFLAGS \\\n    EXPORT_LDLIBS \\\n    EXPORT_C_INCLUDES \\\n    FILTER_ASM \\\n    CPP_FEATURES \\\n    SHORT_COMMANDS \\\n    BUILT_MODULE_NOT_COPIED \\\n    THIN_ARCHIVE \\\n    PCH \\\n    RENDERSCRIPT_INCLUDES \\\n    RENDERSCRIPT_INCLUDES_OVERRIDE \\\n    RENDERSCRIPT_FLAGS \\\n    RENDERSCRIPT_TARGET_API\n\n# The following are generated by the build scripts themselves\n\n# LOCAL_MAKEFILE will contain the path to the Android.mk defining the module\nmodules-LOCALS += MAKEFILE\n\n# LOCAL_LDFLAGS will contain the set of final linker flags for the module\nmodules-LOCALS += LDFLAGS\n\n# LOCAL_OBJECTS will contain the list of object files generated from the\n# module's sources, if any.\nmodules-LOCALS += OBJECTS\n\n# LOCAL_BUILT_MODULE will contain the location of the symbolic version of\n# the generated module (i.e. the one containing all symbols used during\n# native debugging). It is generally under $PROJECT/obj/local/\nmodules-LOCALS += BUILT_MODULE\n\n# LOCAL_OBJS_DIR will contain the location where the object files for\n# this module will be stored. Usually $PROJECT/obj/local/<module>/obj\nmodules-LOCALS += OBJS_DIR\n\n# LOCAL_INSTALLED will contain the location of the installed version\n# of the module. Usually $PROJECT/libs/<abi>/<prefix><module><suffix>\n# where <prefix> and <suffix> depend on the module class.\nmodules-LOCALS += INSTALLED\n\n# LOCAL_MODULE_CLASS will contain the type of the module\n# (e.g. STATIC_LIBRARY, SHARED_LIBRARY, etc...)\nmodules-LOCALS += MODULE_CLASS\n\n# the list of managed fields per module\nmodules-fields = depends \\\n                 $(modules-LOCALS)\n\n# -----------------------------------------------------------------------------\n# Function : modules-clear\n# Arguments: None\n# Returns  : None\n# Usage    : $(call modules-clear)\n# Rationale: clears the list of defined modules known by the build system\n# -----------------------------------------------------------------------------\nmodules-clear = \\\n    $(foreach __mod,$(__ndk_modules),\\\n        $(foreach __field,$(modules-fields),\\\n            $(eval __ndk_modules.$(__mod).$(__field) := $(empty))\\\n        )\\\n    )\\\n    $(eval __ndk_modules := $(empty_set)) \\\n    $(eval __ndk_top_modules := $(empty)) \\\n    $(eval __ndk_import_list := $(empty)) \\\n    $(eval __ndk_import_depth := $(empty))\n\n# -----------------------------------------------------------------------------\n# Function : modules-get-list\n# Arguments: None\n# Returns  : The list of all recorded modules\n# Usage    : $(call modules-get-list)\n# -----------------------------------------------------------------------------\nmodules-get-list = $(__ndk_modules)\n\n# -----------------------------------------------------------------------------\n# Function : modules-get-top-list\n# Arguments: None\n# Returns  : The list of all recorded non-imported modules\n# Usage    : $(call modules-get-top-list)\n# -----------------------------------------------------------------------------\nmodules-get-top-list = $(__ndk_top_modules)\n\n# -----------------------------------------------------------------------------\n# Function : module-add\n# Arguments: 1: module name\n# Returns  : None\n# Usage    : $(call module-add,<modulename>)\n# Rationale: add a new module. If it is already defined, print an error message\n#            and abort. This will record all LOCAL_XXX variables for the module.\n# -----------------------------------------------------------------------------\nmodule-add = \\\n  $(call assert-defined,LOCAL_MAKEFILE LOCAL_BUILT_MODULE LOCAL_OBJS_DIR LOCAL_MODULE_CLASS)\\\n  $(if $(call set_is_member,$(__ndk_modules),$1),\\\n    $(call __ndk_info,Trying to define local module '$1' in $(LOCAL_MAKEFILE).)\\\n    $(call __ndk_info,But this module was already defined by $(__ndk_modules.$1.MAKEFILE).)\\\n    $(call __ndk_error,Aborting.)\\\n  )\\\n  $(eval __ndk_modules := $(call set_insert,$(__ndk_modules),$1))\\\n  $(if $(strip $(__ndk_import_depth)),,\\\n    $(eval __ndk_top_modules := $(call set_insert,$(__ndk_top_modules),$1))\\\n  )\\\n  $(if $(call module-class-is-installable,$(LOCAL_MODULE_CLASS)),\\\n    $(eval LOCAL_INSTALLED := $(NDK_APP_DST_DIR)/$(notdir $(LOCAL_BUILT_MODULE))),\\\n    $(eval LOCAL_INSTALLED := $(LOCAL_BUILT_MODULE))\\\n  )\\\n  $(foreach __field,STATIC_LIBRARIES WHOLE_STATIC_LIBRARIES SHARED_LIBRARIES,\\\n    $(eval LOCAL_$(__field) := $(call strip-lib-prefix,$(LOCAL_$(__field)))))\\\n  $(foreach __local,$(modules-LOCALS),\\\n    $(eval __ndk_modules.$1.$(__local) := $(LOCAL_$(__local)))\\\n  )\\\n  $(call module-handle-c++-features,$1)\n\n\n# Retrieve the class of module $1\nmodule-get-class = $(__ndk_modules.$1.MODULE_CLASS)\n\n# Retrieve built location of module $1\nmodule-get-built = $(__ndk_modules.$1.BUILT_MODULE)\n\n# Returns $(true) is module $1 is installable\n# An installable module is one that will be copied to $PROJECT/libs/<abi>/\n# (e.g. shared libraries).\n#\nmodule-is-installable = $(call module-class-is-installable,$(call module-get-class,$1))\n\n# Returns $(true) if module $1 is a copyable prebuilt\n# A copyable prebuilt module is one that will be copied to $NDK_OUT/<abi>/\n# at build time. At the moment, this is only used for prebuilt shared\n# libraries, since it helps ndk-gdb.\n#\nmodule-is-copyable = $(call module-class-is-copyable,$(call module-get-class,$1))\n\n# -----------------------------------------------------------------------------\n# Function : module-get-export\n# Arguments: 1: module name\n#            2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS')\n# Returns  : Exported value\n# Usage    : $(call module-get-export,<modulename>,<varname>)\n# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for module $1\n# -----------------------------------------------------------------------------\nmodule-get-export = $(__ndk_modules.$1.EXPORT_$2)\n\n# -----------------------------------------------------------------------------\n# Function : module-get-listed-export\n# Arguments: 1: list of module names\n#            2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS')\n# Returns  : Exported values\n# Usage    : $(call module-get-listed-export,<module-list>,<varname>)\n# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for modules\n#            listed in $1.\n# -----------------------------------------------------------------------------\nmodule-get-listed-export = $(strip \\\n    $(foreach __listed_module,$1,\\\n        $(call module-get-export,$(__listed_module),$2)\\\n    ))\n\n# -----------------------------------------------------------------------------\n# Function : modules-restore-locals\n# Arguments: 1: module name\n# Returns  : None\n# Usage    : $(call module-restore-locals,<modulename>)\n# Rationale: Restore the recorded LOCAL_XXX definitions for a given module.\n# -----------------------------------------------------------------------------\nmodule-restore-locals = \\\n    $(foreach __local,$(modules-LOCALS),\\\n        $(eval LOCAL_$(__local) := $(__ndk_modules.$1.$(__local)))\\\n    )\n\n# Dump all module information. Only use this for debugging\nmodules-dump-database = \\\n    $(info Modules [$(TARGET_ARCH_ABI)]: $(__ndk_modules)) \\\n    $(foreach __mod,$(__ndk_modules),\\\n        $(info $(space4)$(__mod):)\\\n        $(foreach __field,$(modules-fields),\\\n            $(eval __fieldval := $(strip $(__ndk_modules.$(__mod).$(__field))))\\\n            $(if $(__fieldval),\\\n                $(if $(filter 1,$(words $(__fieldval))),\\\n                    $(info $(space4)$(space4)$(__field): $(__fieldval)),\\\n                    $(info $(space4)$(space4)$(__field): )\\\n                    $(foreach __fielditem,$(__fieldval),\\\n                        $(info $(space4)$(space4)$(space4)$(__fielditem))\\\n                    )\\\n                )\\\n            )\\\n        )\\\n    )\\\n    $(info Top modules: $(__ndk_top_modules))\\\n    $(info --- end of modules list)\n\n\n# -----------------------------------------------------------------------------\n# Function : module-add-static-depends\n# Arguments: 1: module name\n#            2: list/set of static library modules this module depends on.\n# Returns  : None\n# Usage    : $(call module-add-static-depends,<modulename>,<list of module names>)\n# Rationale: Record that a module depends on a set of static libraries.\n#            Use module-get-static-dependencies to retrieve final list.\n# -----------------------------------------------------------------------------\nmodule-add-static-depends = \\\n    $(call module-add-depends-any,$1,$2,depends) \\\n\n# -----------------------------------------------------------------------------\n# Function : module-add-shared-depends\n# Arguments: 1: module name\n#            2: list/set of shared library modules this module depends on.\n# Returns  : None\n# Usage    : $(call module-add-shared-depends,<modulename>,<list of module names>)\n# Rationale: Record that a module depends on a set of shared libraries.\n#            Use modulge-get-shared-dependencies to retrieve final list.\n# -----------------------------------------------------------------------------\nmodule-add-shared-depends = \\\n    $(call module-add-depends-any,$1,$2,depends) \\\n\n# Used internally by module-add-static-depends and module-add-shared-depends\n# NOTE: this function must not modify the existing dependency order when new depends are added.\n#\nmodule-add-depends-any = \\\n    $(eval __ndk_modules.$1.$3 += $(filter-out $(__ndk_modules.$1.$3),$2))\n\n\n# -----------------------------------------------------------------------------\n# Returns non-empty if a module is a static library\n# Arguments: 1: module name\n# Returns     : non-empty iff the module is a static library.\n# Usage       : $(if $(call module-is-static-library,<name>),...)\n# -----------------------------------------------------------------------------\nmodule-is-static-library = $(strip \\\n  $(filter STATIC_LIBRARY PREBUILT_STATIC_LIBRARY,\\\n    $(call module-get-class,$1)))\n\n# -----------------------------------------------------------------------------\n# Returns non-empty if a module is a shared library\n# Arguments: 1: module name\n# Returns     : non-empty iff the module is a shared library.\n# Usage       : $(if $(call module-is-shared-library,<name>),...)\n# -----------------------------------------------------------------------------\nmodule-is-shared-library = $(strip \\\n  $(filter SHARED_LIBRARY PREBUILT_SHARED_LIBRARY,\\\n    $(call module-get-class,$1)))\n\n# -----------------------------------------------------------------------------\n# Filter a list of module names to retain only the static libraries.\n# Arguments: 1: module name list\n# Returns     : input list modules which are static libraries.\n# -----------------------------------------------------------------------------\nmodule-filter-static-libraries = $(call filter-by,$1,module-is-static-library)\n\n# -----------------------------------------------------------------------------\n# Filter a list of module names to retain only the shared libraries.\n# Arguments: 1: module name list\n# Returns     : input list modules which are shared libraries.\n# -----------------------------------------------------------------------------\nmodule-filter-shared-libraries = $(call filter-by,$1,module-is-shared-library)\n\n# -----------------------------------------------------------------------------\n# Return the LOCAL_LDFLAGS for a given module.\n# Arguments: 1: module name\n# Returns     : List of linker flags\n# -----------------------------------------------------------------------------\nmodule-get-ldflags = $(__ndk_modules.$1.LDFLAGS)\n\n# -----------------------------------------------------------------------------\n# Return the LOCAL_STATIC_LIBRARIES for a given module.\n# Arguments: 1: module name\n# Returns     : List of static library modules.\n# -----------------------------------------------------------------------------\nmodule-get-static-libs = $(__ndk_modules.$1.STATIC_LIBRARIES)\n\n# -----------------------------------------------------------------------------\n# Return the LOCAL_WHOLE_STATIC_LIBRARIES for a given module.\n# Arguments: 1: module name\n# Returns     : List of whole static library modules.\n# -----------------------------------------------------------------------------\nmodule-get-whole-static-libs = $(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES)\n\n# -----------------------------------------------------------------------------\n# Return all static libraries for a given module.\n# Arguments: 1: module name\n# Returns     : List of static library modules (whole or not).\n# -----------------------------------------------------------------------------\nmodule-get-all-static-libs = $(strip \\\n  $(__ndk_modules.$1.STATIC_LIBRARIES) \\\n  $(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES))\n\n# -----------------------------------------------------------------------------\n# Return the list of LOCAL_SHARED_LIBRARIES for a given module.\n# Arguments: 1: module name\n# Returns     : List of shared library modules.\n# -----------------------------------------------------------------------------\nmodule-get-shared-libs = $(__ndk_modules.$1.SHARED_LIBRARIES)\n\n# -----------------------------------------------------------------------------\n# Return the list of all libraries a modules depends directly on.\n# This is the concatenation of its LOCAL_STATIC_LIBRARIES,\n# LOCAL_WHOLE_STATIC_LIBRARIES, and LOCAL_SHARED_LIBRARIES variables.\n# Arguments: 1: module name\n# Returns     : List of library modules (static or shared).\n# -----------------------------------------------------------------------------\nmodule-get-direct-libs = $(strip \\\n  $(__ndk_modules.$1.STATIC_LIBRARIES) \\\n  $(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES) \\\n  $(__ndk_modules.$1.SHARED_LIBRARIES))\n\n\n# -----------------------------------------------------------------------------\n# Computes the full closure of a module and its dependencies. Order is\n# defined by a breadth-first walk of the graph.\n# $1 will be the first item in the result.\n#\n# Arguments: 1: module name\n# Returns     : List of all modules $1 depends on.\n#\n# Note: Do not use this to determine build dependencies. The returned list\n#       is much too large for this. For example consider the following\n#       dependency graph:\n#\n#   main.exe -> libA.a -> libfoo.so -> libB.a\n#\n#       This function will return all four modules in the result, while\n#       at link time building main.exe only requires the first three.\n#\n# -----------------------------------------------------------------------------\nmodule-get-all-dependencies = $(call -ndk-mod-get-closure,$1,module-get-depends)\n\n# -----------------------------------------------------------------------------\n# Compute the list of all static and shared libraries required to link a\n# given module.\n#\n# Note that the result is topologically ordered, i.e. if library A depends\n# on library B, then A will always appear after B in the result.\n#\n# Arguments: 1: module name\n# Returns     : List of all library $1 depends at link time.\n#\n# Note: This doesn't differentiate between regular and whole static\n#       libraries. Use module-extract-whole-static-libs to filter the\n#       result returned by this function.\n# -----------------------------------------------------------------------------\nmodule-get-link-libs = $(strip \\\n  $(eval _ndk_mod_link_module := $1) \\\n  $(call -ndk-mod-get-topological-depends,$1,-ndk-mod-link-deps))\n\n# Special dependency function used by module-get-link-libs.\n# The rules to follow are the following:\n#  - if $1 is the link module, or if it is a static library, then all direct\n#    dependencies.\n#  - if $1 is a shared library, then only those direct dependencies which\n#    are shared libraries too.\n#  - otherwise, don't add build deps.\n-ndk-mod-link-deps = \\\n  $(strip $(or \\\n    $(if $(or $(call seq,$1,$(_ndk_mod_link_module)),$(call module-is-static-library,$1)),\\\n      $(call module-get-direct-libs,$1)\\\n    ),\\\n    $(if $(call module-is-shared-library,$1),\\\n      $(call module-get-shared-libs)\\\n    )\\\n  ))\n\n# -----------------------------------------------------------------------------\n# This function is used to extract the list of static libraries that need\n# to be linked as whole, i.e. placed in a special section on the final\n# link command.\n# Arguments: $1: module name.\n#            $2: list of all static link-time libraries (regular or whole).\n# Returns  : list of static libraries from '$2' that need to be linked\n#            as whole.\n# -----------------------------------------------------------------------------\nmodule-extract-whole-static-libs = $(strip \\\n  $(eval _ndk_mod_whole_all := $(call map,module-get-whole-static-libs,$1 $2))\\\n  $(eval _ndk_mod_whole_result := $(filter $(_ndk_mod_whole_all),$2))\\\n  $(_ndk_mod_whole_result))\n\n# Used to recompute all dependencies once all module information has been recorded.\n#\nmodules-compute-dependencies = \\\n    $(foreach __module,$(__ndk_modules),\\\n        $(call module-compute-depends,$(__module))\\\n    )\n\nmodule-compute-depends = \\\n    $(call module-add-static-depends,$1,$(__ndk_modules.$1.STATIC_LIBRARIES))\\\n    $(call module-add-static-depends,$1,$(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES))\\\n    $(call module-add-shared-depends,$1,$(__ndk_modules.$1.SHARED_LIBRARIES))\\\n\nmodule-get-installed = $(__ndk_modules.$1.INSTALLED)\n\nmodule-get-depends = $(__ndk_modules.$1.depends)\n\n# -----------------------------------------------------------------------------\n# Function : modules-get-all-installable\n# Arguments: 1: list of module names\n# Returns  : List of all the installable modules $1 depends on transitively.\n# Usage    : $(call modules-all-get-installable,<list of module names>)\n# Rationale: This computes the closure of all installable module dependencies starting from $1\n# -----------------------------------------------------------------------------\n# For now, only the closure of LOCAL_SHARED_LIBRARIES is enough\nmodules-get-all-installable = $(strip \\\n    $(foreach __alldep,$(call module-get-all-dependencies,$1),\\\n        $(if $(call module-is-installable,$(__alldep)),$(__alldep))\\\n    ))\n\n# Return the Obj-C extension of a given module\n# $1: module name\nmodule-get-objc-extension = $(strip \\\n    $(if $(__ndk_modules.$1.OBJC_EXTENSION),\\\n        $(__ndk_modules.$1.OBJC_EXTENSION),\\\n        .m\\\n    ))\n\n# Return the Obj-C++ extension of a given module\n# $1: module name\nmodule-get-objc++-extension = $(strip \\\n    $(if $(__ndk_modules.$1.OBJCPP_EXTENSION),\\\n        $(__ndk_modules.$1.OBJCPP_EXTENSION),\\\n        .mm\\\n    ))\n\n# Return the C++ extension(s) of a given module\n# $1: module name\nmodule-get-c++-extensions = $(strip \\\n    $(if $(__ndk_modules.$1.CPP_EXTENSION),\\\n        $(__ndk_modules.$1.CPP_EXTENSION),\\\n        $(default-c++-extensions)\\\n    ))\n\n# Return the list of Obj-C sources of a given module\n#\nmodule-get-objc-sources = \\\n    $(eval __files := $(__ndk_modules.$1.SRC_FILES:%.neon=%))\\\n    $(eval __files := $(__files:%.arm=%))\\\n    $(eval __files := $(or \\\n        $(filter %$(call module-get-objc-extension,$1),$(__files)),\\\n        $(filter %$(call module-get-objc++-extension),$(__files))))\\\n    $(__files)\n\n# Return the list of Obj-C++ sources of a given module\n#\nmodule-get-objc++-sources = \\\n    $(eval __files := $(__ndk_modules.$1.SRC_FILES:%.neon=%))\\\n    $(eval __files := $(__files:%.arm=%))\\\n    $(eval __files := \\\n        $(filter %$(call module-get-objc++-extension),$(__files)))\\\n    $(__files)\n\n# Return the list of C++ sources of a given module\n#\nmodule-get-c++-sources = \\\n    $(eval __files := $(__ndk_modules.$1.SRC_FILES:%.neon=%)) \\\n    $(eval __files := $(__files:%.arm=%)) \\\n    $(eval __extensions := $(call module-get-c++-extensions,$1))\\\n    $(filter $(foreach __extension,$(__extensions),%$(__extension)),$(__files))\n\n# Returns true if a module has Obj-C sources\n#\nmodule-has-objc-sources = $(strip $(call module-get-objc-sources,$1))\n\n# Returns true if a module has Obj-C++ sources\n#\nmodule-has-objc++-sources = $(strip $(call module-get-objc++-sources,$1))\n\n# Returns true if a module has C++ sources\n#\nmodule-has-c++-sources = $(strip $(call module-get-c++-sources,$1))\n\n\n# Add C++ dependencies to any module that has C++ sources.\n# $1: list of C++ runtime static libraries (if any)\n# $2: list of C++ runtime shared libraries (if any)\n# $3: list of C++ runtime ldlibs (if any)\n#\nmodules-add-c++-dependencies = \\\n    $(foreach __module,$(__ndk_modules),\\\n        $(if $(or $(call module-has-c++-sources,$(__module)),$(call module-has-objc++-sources,$(__module))),\\\n            $(call ndk_log,Module '$(__module)' has C++ sources)\\\n            $(call module-add-deps,$(__module),$1,$2,$3)\\\n        )\\\n    )\n\n\n# Return the compiler flags used to compile a C++ module\n# Order matters and should match the one used by the build command\nmodule-get-c++-flags = $(strip \\\n    $(__ndk_modules.$1.CFLAGS) \\\n    $(__ndk_modules.$1.CPPFLAGS) \\\n    $(__ndk_modules.$1.CXXFLAGS))\n\n# This function is used to remove certain flags from a module compiler flags\n# $1: Module name\n# $2: List of flags to remove\n#\nmodule-filter-out-compiler-flags = \\\n    $(eval __ndk_modules.$1.CFLAGS     := $(filter-out $2,$(__ndk_modules.$1.CFLAGS)))\\\n    $(eval __ndk_modules.$1.CONLYFLAGS := $(filter-out $2,$(__ndk_modules.$1.CONLYFLAGS)))\\\n    $(eval __ndk_modules.$1.CPPFLAGS   := $(filter-out $2,$(__ndk_modules.$1.CPPFLAGS)))\\\n    $(eval __ndk_modules.$1.CXXFLAGS   := $(filter-out $2,$(__ndk_modules.$1.CXXFLAGS)))\\\n    $(eval __ndk_modules.$1.ASMFLAGS   := $(filter-out $2,$(__ndk_modules.$1.ASMFLAGS)))\n\n# Return true if a module's compiler flags enable rtti\n# We just look at -frtti and -fno-rtti on the command-line\n# and keep the last one of these flags.\nmodule-flags-have-rtti = $(strip \\\n        $(filter -frtti,\\\n            $(lastword $(filter -frtti -fno-rtti,$(call module-get-c++-flags,$1)))\\\n        )\\\n    )\n\n# Same with C++ exception support (i.e. -fexceptions and -fno-exceptions)\n#\nmodule-flags-have-exceptions = $(strip \\\n        $(filter -fexceptions,\\\n            $(lastword $(filter -fexceptions -fno-execeptions,$(call module-get-c++-flags,$1)))\\\n        )\\\n    )\n\n# Handle the definition of LOCAL_CPP_FEATURES, i.e.:\n#\n#  - If it is defined, check that it only contains valid values\n#  - If it is undefined, try to compute its value automatically by\n#    looking at the C++ compiler flags used to build the module\n#\n# After this, we remove all features flags from the module's command-line\n# And add only the correct ones back in LOCAL_CPP_FLAGS\n#\nmodule-handle-c++-features = \\\n    $(if $(strip $(__ndk_modules.$1.CPP_FEATURES)),\\\n        $(eval __cxxbad := $(filter-out rtti exceptions,$(__ndk_modules.$1.CPP_FEATURES)))\\\n        $(if $(__cxxbad),\\\n            $(call __ndk_info,WARNING: Ignoring invalid values in LOCAL_CPP_FEATURES definition in $(__ndk_modules.$1.MAKEFILE): $(__cxxbad))\\\n            $(eval __ndk_modules.$1.CPP_FEATURES := $(strip $(filter-out $(__cxxbad),$(__ndk_modules.$1.CPP_FEATURES))))\\\n        )\\\n    ,\\\n        $(eval __ndk_modules.$1.CPP_FEATURES := $(strip \\\n            $(if $(call module-flags-have-rtti,$1),rtti) \\\n            $(if $(call module-flags-have-exceptions,$1),exceptions) \\\n        )) \\\n    )\\\n    $(call module-filter-out-compiler-flags,$1,-frtti -fno-rtti -fexceptions -fno-exceptions)\\\n\n# Returns true if a module or its dependencies have specific C++ features\n# (i.e. RTTI or Exceptions)\n#\n# $1: module name\n# $2: list of features (e.g. 'rtti' or 'exceptions')\n#\nmodule-has-c++-features = $(strip \\\n    $(eval __cxxdeps  := $(call module-get-all-dependencies,$1))\\\n    $(eval __cxxflags := $(foreach __cxxdep,$(__cxxdeps),$(__ndk_modules.$(__cxxdep).CPP_FEATURES)))\\\n    $(if $(filter $2,$(__cxxflags)),true,)\\\n    )\n\n# Add standard dependencies to a given module\n#\n# $1: module name\n# $2: list of C++ runtime static libraries (if any)\n# $3: list of C++ runtime shared libraries (if any)\n# $4: list of C++ runtime ldlibs (if any)\n#\nmodule-add-deps = \\\n    $(if $(call strip,$2),$(call ndk_log,Add dependency '$(call strip,$2)' to module '$1'))\\\n    $(eval __ndk_modules.$1.STATIC_LIBRARIES += $(2))\\\n    $(if $(call strip,$3),$(call ndk_log,Add dependency '$(call strip,$3)' to module '$1'))\\\n    $(eval __ndk_modules.$1.SHARED_LIBRARIES += $(3))\\\n    $(if $(call strip,$4),$(call ndk_log,Add dependency '$(call strip,$4)' to module '$1'))\\\n    $(eval __ndk_modules.$1.LDLIBS += $(4))\n\n\n# =============================================================================\n#\n# Utility functions\n#\n# =============================================================================\n\n# -----------------------------------------------------------------------------\n# Function : pretty-dir\n# Arguments: 1: path\n# Returns  : Remove NDK_PROJECT_PATH prefix from a given path. This can be\n#            used to perform pretty-printing for logs.\n# -----------------------------------------------------------------------------\npretty-dir = $(patsubst $(NDK_ROOT)/%,<NDK>/%,\\\n                 $(patsubst $(NDK_PROJECT_PATH)/%,%,$1))\n\n# Note: NDK_PROJECT_PATH is typically defined after this test is run.\n-test-pretty-dir = \\\n  $(eval NDK_PROJECT_PATH ?= .)\\\n  $(call test-expect,foo,$(call pretty-dir,foo))\\\n  $(call test-expect,foo,$(call pretty-dir,$(NDK_PROJECT_PATH)/foo))\\\n  $(call test-expect,foo/bar,$(call pretty-dir,$(NDK_PROJECT_PATH)/foo/bar))\\\n  $(call test-expect,<NDK>/foo,$(call pretty-dir,$(NDK_ROOT)/foo))\\\n  $(call test-expect,<NDK>/foo/bar,$(call pretty-dir,$(NDK_ROOT)/foo/bar))\n\n# -----------------------------------------------------------------------------\n# Function : check-user-define\n# Arguments: 1: name of variable that must be defined by the user\n#            2: name of Makefile where the variable should be defined\n#            3: name/description of the Makefile where the check is done, which\n#               must be included by $2\n# Returns  : None\n# -----------------------------------------------------------------------------\ncheck-user-define = $(if $(strip $($1)),,\\\n  $(call __ndk_error,Missing $1 before including $3 in $2))\n\n# -----------------------------------------------------------------------------\n# This is used to check that LOCAL_MODULE is properly defined by an Android.mk\n# file before including one of the $(BUILD_SHARED_LIBRARY), etc... files.\n#\n# Function : check-user-LOCAL_MODULE\n# Arguments: 1: name/description of the included build Makefile where the\n#               check is done\n# Returns  : None\n# Usage    : $(call check-user-LOCAL_MODULE, BUILD_SHARED_LIBRARY)\n# -----------------------------------------------------------------------------\ncheck-defined-LOCAL_MODULE = \\\n  $(call check-user-define,LOCAL_MODULE,$(local-makefile),$(1)) \\\n  $(if $(call seq,$(words $(LOCAL_MODULE)),1),,\\\n    $(call __ndk_info,LOCAL_MODULE definition in $(local-makefile) must not contain space)\\\n    $(call __ndk_error,Please correct error. Aborting)\\\n  )\n\n# -----------------------------------------------------------------------------\n# This is used to check that LOCAL_MODULE_FILENAME, if defined, is correct.\n#\n# Function : check-user-LOCAL_MODULE_FILENAME\n# Returns  : None\n# Usage    : $(call check-user-LOCAL_MODULE_FILENAME)\n# -----------------------------------------------------------------------------\ncheck-LOCAL_MODULE_FILENAME = \\\n  $(if $(strip $(LOCAL_MODULE_FILENAME)),\\\n    $(if $(call seq,$(words $(LOCAL_MODULE_FILENAME)),1),,\\\n        $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain spaces)\\\n        $(call __ndk_error,Plase correct error. Aborting)\\\n    )\\\n    $(if $(filter %$(TARGET_LIB_EXTENSION) %$(TARGET_SONAME_EXTENSION),$(LOCAL_MODULE_FILENAME)),\\\n        $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME should not include file extensions)\\\n    )\\\n  )\n\n# -----------------------------------------------------------------------------\n# Function  : handle-module-filename\n# Arguments : 1: default file prefix\n#             2: file suffix\n# Returns   : None\n# Usage     : $(call handle-module-filename,<prefix>,<suffix>)\n# Rationale : To be used to check and or set the module's filename through\n#             the LOCAL_MODULE_FILENAME variable.\n# -----------------------------------------------------------------------------\nhandle-module-filename = $(eval $(call ev-handle-module-filename,$1,$2))\n\n#\n# Check that LOCAL_MODULE_FILENAME is properly defined\n# - with one single item\n# - without a library file extension\n# - with no directory separators\n#\ndefine ev-check-module-filename\nifneq (1,$$(words $$(LOCAL_MODULE_FILENAME)))\n    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain any space)\n    $$(call __ndk_error,Aborting)\nendif\nifneq (,$$(filter %$$(TARGET_LIB_EXTENSION) %$$(TARGET_SONAME_EXTENSION),$$(LOCAL_MODULE_FILENAME)))\n    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain a file extension)\n    $$(call __ndk_error,Aborting)\nendif\nifneq (1,$$(words $$(subst /, ,$$(LOCAL_MODULE_FILENAME))))\n    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain directory separators)\n    $$(call __ndk_error,Aborting)\nendif\nendef\n\n#\n# Check the definition of LOCAL_MODULE_FILENAME. If none exists,\n# infer it from the LOCAL_MODULE name.\n#\n# $1: default file prefix\n# $2: default file suffix\n#\ndefine ev-handle-module-filename\nLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME))\nifndef LOCAL_MODULE_FILENAME\n    LOCAL_MODULE_FILENAME := $1$$(LOCAL_MODULE)\nendif\n$$(eval $$(call ev-check-module-filename))\nLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$2\nendef\n\nhandle-prebuilt-module-filename = $(eval $(call ev-handle-prebuilt-module-filename,$1))\n\n#\n# Check the definition of LOCAL_MODULE_FILENAME for a _prebuilt_ module.\n# If none exists, infer it from $(LOCAL_SRC_FILES)\n#\n# $1: default file suffix\n#\ndefine ev-handle-prebuilt-module-filename\nLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME))\nifndef LOCAL_MODULE_FILENAME\n    LOCAL_MODULE_FILENAME := $$(notdir $(LOCAL_SRC_FILES))\n    LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%$$(TARGET_LIB_EXTENSION)=%)\n    LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%$$(TARGET_SONAME_EXTENSION)=%)\nendif\nLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$1\n$$(eval $$(call ev-check-module-filename))\nendef\n\n\n# -----------------------------------------------------------------------------\n# Function  : handle-module-built\n# Returns   : None\n# Usage     : $(call handle-module-built)\n# Rationale : To be used to automatically compute the location of the generated\n#             binary file, and the directory where to place its object files.\n# -----------------------------------------------------------------------------\nhandle-module-built = \\\n    $(eval LOCAL_BUILT_MODULE := $(TARGET_OUT)/$(LOCAL_MODULE_FILENAME))\\\n    $(eval LOCAL_OBJS_DIR     := $(TARGET_OBJS)/$(LOCAL_MODULE))\n\n# -----------------------------------------------------------------------------\n# Compute the real path of a prebuilt file.\n#\n# Function : local-prebuilt-path\n# Arguments: 1: prebuilt path (as listed in $(LOCAL_SRC_FILES))\n# Returns  : full path. If $1 begins with a /, the path is considered\n#            absolute and returned as-is. Otherwise, $(LOCAL_PATH)/$1 is\n#            returned instead.\n# Usage    : $(call local-prebuilt-path,$(LOCAL_SRC_FILES))\n# -----------------------------------------------------------------------------\nlocal-prebuilt-path = $(call local-source-file-path,$1)\n\n# -----------------------------------------------------------------------------\n# This is used to strip any lib prefix from LOCAL_MODULE, then check that\n# the corresponding module name is not already defined.\n#\n# Function : check-user-LOCAL_MODULE\n# Arguments: 1: path of Android.mk where this LOCAL_MODULE is defined\n# Returns  : None\n# Usage    : $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n# -----------------------------------------------------------------------------\ncheck-LOCAL_MODULE = \\\n  $(eval LOCAL_MODULE := $$(call strip-lib-prefix,$$(LOCAL_MODULE)))\n\n# -----------------------------------------------------------------------------\n# Macro    : my-dir\n# Returns  : the directory of the current Makefile\n# Usage    : $(my-dir)\n# -----------------------------------------------------------------------------\nmy-dir = $(call parent-dir,$(lastword $(MAKEFILE_LIST)))\n\n# -----------------------------------------------------------------------------\n# Function : all-makefiles-under\n# Arguments: 1: directory path\n# Returns  : a list of all makefiles immediately below some directory\n# Usage    : $(call all-makefiles-under, <some path>)\n# -----------------------------------------------------------------------------\nall-makefiles-under = $(wildcard $1/*/Android.mk)\n\n# -----------------------------------------------------------------------------\n# Macro    : all-subdir-makefiles\n# Returns  : list of all makefiles in subdirectories of the current Makefile's\n#            location\n# Usage    : $(all-subdir-makefiles)\n# -----------------------------------------------------------------------------\nall-subdir-makefiles = $(call all-makefiles-under,$(call my-dir))\n\n# =============================================================================\n#\n# Source file tagging support.\n#\n# Each source file listed in LOCAL_SRC_FILES can have any number of\n# 'tags' associated to it. A tag name must not contain space, and its\n# usage can vary.\n#\n# For example, the 'debug' tag is used to sources that must be built\n# in debug mode, the 'arm' tag is used for sources that must be built\n# using the 32-bit instruction set on ARM platforms, and 'neon' is used\n# for sources that must be built with ARM Advanced SIMD (a.k.a. NEON)\n# support.\n#\n# More tags might be introduced in the future.\n#\n#  LOCAL_SRC_TAGS contains the list of all tags used (initially empty)\n#  LOCAL_SRC_FILES contains the list of all source files.\n#  LOCAL_SRC_TAG.<tagname> contains the set of source file names tagged\n#      with <tagname>\n#  LOCAL_SRC_FILES_TAGS.<filename> contains the set of tags for a given\n#      source file name\n#\n# Tags are processed by a toolchain-specific function (e.g. TARGET-compute-cflags)\n# which will call various functions to compute source-file specific settings.\n# These are currently stored as:\n#\n#  LOCAL_SRC_FILES_TARGET_CFLAGS.<filename> contains the list of\n#      target-specific C compiler flags used to compile a given\n#      source file. This is set by the function TARGET-set-cflags\n#      defined in the toolchain's setup.mk script.\n#\n#  LOCAL_SRC_FILES_TEXT.<filename> contains the 'text' that will be\n#      displayed along the label of the build output line. For example\n#      'thumb' or 'arm  ' with ARM-based toolchains.\n#\n# =============================================================================\n\n# -----------------------------------------------------------------------------\n# Macro    : escape-colon-in-path\n# Returns  : replace colon in $1 with $(colon)\n# Usage    : $(escape-colon-in-path,<file>)\n# -----------------------------------------------------------------------------\nescape-colon-in-path = $(subst $(colon),$$(colon),$1)\n\n# -----------------------------------------------------------------------------\n# Macro    : clear-all-src-tags\n# Returns  : remove all source file tags and associated data.\n# Usage    : $(clear-all-src-tags)\n# -----------------------------------------------------------------------------\nclear-all-src-tags = \\\n$(foreach __tag,$(LOCAL_SRC_TAGS), \\\n    $(eval LOCAL_SRC_TAG.$(__tag) := $(empty)) \\\n) \\\n$(foreach __src,$(LOCAL_SRC_FILES), \\\n    $(eval LOCAL_SRC_FILES_TAGS.$(call escape-colon-in-path,$(__src)) := $(empty)) \\\n    $(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(call escape-colon-in-path,$(__src)) := $(empty)) \\\n    $(eval LOCAL_SRC_FILES_TEXT.$(call escape-colon-in-path,$(__src)) := $(empty)) \\\n) \\\n$(eval LOCAL_SRC_TAGS := $(empty_set))\n\n# -----------------------------------------------------------------------------\n# Macro    : tag-src-files\n# Arguments: 1: list of source files to tag\n#            2: tag name (must not contain space)\n# Usage    : $(call tag-src-files,<list-of-source-files>,<tagname>)\n# Rationale: Add a tag to a list of source files\n# -----------------------------------------------------------------------------\ntag-src-files = \\\n$(eval LOCAL_SRC_TAGS := $(call set_insert,$2,$(LOCAL_SRC_TAGS))) \\\n$(eval LOCAL_SRC_TAG.$2 := $(call set_union,$1,$(LOCAL_SRC_TAG.$2))) \\\n$(foreach __src,$1, \\\n    $(eval LOCAL_SRC_FILES_TAGS.$(call escape-colon-in-path,$(__src)) += $2) \\\n)\n\n# -----------------------------------------------------------------------------\n# Macro    : get-src-files-with-tag\n# Arguments: 1: tag name\n# Usage    : $(call get-src-files-with-tag,<tagname>)\n# Return   : The list of source file names that have been tagged with <tagname>\n# -----------------------------------------------------------------------------\nget-src-files-with-tag = $(LOCAL_SRC_TAG.$1)\n\n# -----------------------------------------------------------------------------\n# Macro    : get-src-files-without-tag\n# Arguments: 1: tag name\n# Usage    : $(call get-src-files-without-tag,<tagname>)\n# Return   : The list of source file names that have NOT been tagged with <tagname>\n# -----------------------------------------------------------------------------\nget-src-files-without-tag = $(filter-out $(LOCAL_SRC_TAG.$1),$(LOCAL_SRC_FILES))\n\n# -----------------------------------------------------------------------------\n# Macro    : set-src-files-target-cflags\n# Arguments: 1: list of source files\n#            2: list of compiler flags\n# Usage    : $(call set-src-files-target-cflags,<sources>,<flags>)\n# Rationale: Set or replace the set of compiler flags that will be applied\n#            when building a given set of source files. This function should\n#            normally be called from the toolchain-specific function that\n#            computes all compiler flags for all source files.\n# -----------------------------------------------------------------------------\nset-src-files-target-cflags = \\\n    $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(call escape-colon-in-path,$(__src)) := $2))\n\n# -----------------------------------------------------------------------------\n# Macro    : add-src-files-target-cflags\n# Arguments: 1: list of source files\n#            2: list of compiler flags\n# Usage    : $(call add-src-files-target-cflags,<sources>,<flags>)\n# Rationale: A variant of set-src-files-target-cflags that can be used\n#            to append, instead of replace, compiler flags for specific\n#            source files.\n# -----------------------------------------------------------------------------\nadd-src-files-target-cflags = \\\n    $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(call escape-colon-in-path,$(__src)) += $2))\n\n# -----------------------------------------------------------------------------\n# Macro    : get-src-file-target-cflags\n# Arguments: 1: single source file name\n# Usage    : $(call get-src-file-target-cflags,<source>)\n# Rationale: Return the set of target-specific compiler flags that must be\n#            applied to a given source file. These must be set prior to this\n#            call using set-src-files-target-cflags or add-src-files-target-cflags\n# -----------------------------------------------------------------------------\nget-src-file-target-cflags = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$1)\n\n# -----------------------------------------------------------------------------\n# Macro    : set-src-files-text\n# Arguments: 1: list of source files\n#            2: text\n# Usage    : $(call set-src-files-text,<sources>,<text>)\n# Rationale: Set or replace the 'text' associated to a set of source files.\n#            The text is a very short string that complements the build\n#            label. For example, it will be either 'thumb' or 'arm  ' for\n#            ARM-based toolchains. This function must be called by the\n#            toolchain-specific functions that processes all source files.\n# -----------------------------------------------------------------------------\nset-src-files-text = \\\n    $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TEXT.$(call escape-colon-in-path,$(__src)) := $2))\n\n# -----------------------------------------------------------------------------\n# Macro    : get-src-file-text\n# Arguments: 1: single source file\n# Usage    : $(call get-src-file-text,<source>)\n# Rationale: Return the 'text' associated to a given source file when\n#            set-src-files-text was called.\n# -----------------------------------------------------------------------------\nget-src-file-text = $(LOCAL_SRC_FILES_TEXT.$1)\n\n# This should only be called for debugging the source files tagging system\ndump-src-file-tags = \\\n$(info LOCAL_SRC_TAGS := $(LOCAL_SRC_TAGS)) \\\n$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES)) \\\n$(foreach __tag,$(LOCAL_SRC_TAGS),$(info LOCAL_SRC_TAG.$(__tag) = $(LOCAL_SRC_TAG.$(__tag)))) \\\n$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TAGS.$(__src) = $(LOCAL_SRC_FILES_TAGS.$(__src)))) \\\n$(info WITH arm = $(call get-src-files-with-tag,arm)) \\\n$(info WITHOUT arm = $(call get-src-files-without-tag,arm)) \\\n$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src)))) \\\n$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TEXT.$(__src) = $(LOCAL_SRC_FILES_TEXT.$(__src)))) \\\n\n\n# =============================================================================\n#\n# Application.mk support\n#\n# =============================================================================\n\n# the list of variables that *must* be defined in Application.mk files\nNDK_APP_VARS_REQUIRED :=\n\n# the list of variables that *may* be defined in Application.mk files\nNDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CONLYFLAGS APP_CXXFLAGS \\\n                         APP_LDFLAGS APP_PLATFORM APP_BUILD_SCRIPT APP_ABI APP_MODULES \\\n                         APP_PROJECT_PATH APP_STL APP_SHORT_COMMANDS \\\n                         APP_PIE APP_THIN_ARCHIVE \\\n                         APP_LIBCRYSTAX APP_OBJC APP_CXX_STANDARD\n\n# the list of all variables that may appear in an Application.mk file\n# or defined by the build scripts.\nNDK_APP_VARS := $(NDK_APP_VARS_REQUIRED) \\\n                $(NDK_APP_VARS_OPTIONAL) \\\n                APP_DEBUG \\\n                APP_DEBUGGABLE \\\n                APP_MANIFEST\n\n# =============================================================================\n#\n# Android.mk support\n#\n# =============================================================================\n\n# =============================================================================\n#\n# Build commands support\n#\n# =============================================================================\n\nget-object-name = $(strip \\\n    $(subst ../,__/,\\\n      $(subst :,_,\\\n        $(eval __obj := $1)\\\n        $(foreach __ext,.c .s .S .asm $(LOCAL_CPP_EXTENSION) $(LOCAL_RS_EXTENSION) $(LOCAL_OBJC_EXTENSION) $(LOCAL_OBJCPP_EXTENSION),\\\n            $(eval __obj := $(__obj:%$(__ext)=%$(TARGET_OBJ_EXTENSION)))\\\n        )\\\n        $(__obj)\\\n    )))\n\n-test-get-object-name = \\\n  $(eval TARGET_OBJ_EXTENSION=.o)\\\n  $(eval LOCAL_CPP_EXTENSION ?= .cpp)\\\n  $(eval LOCAL_OBJC_EXTENSION ?= .m)\\\n  $(eval LOCAL_OBJCPP_EXTENSION ?= .mm)\\\n  $(eval LOCAL_RS_EXTENSION ?= .rs)\\\n  $(call test-expect,foo.o,$(call get-object-name,foo.c))\\\n  $(call test-expect,bar.o,$(call get-object-name,bar.s))\\\n  $(call test-expect,zoo.o,$(call get-object-name,zoo.S))\\\n  $(call test-expect,tot.o,$(call get-object-name,tot.cpp))\\\n  $(call test-expect,baz.o,$(call get-object-name,baz.m))\\\n  $(call test-expect,moo.o,$(call get-object-name,moo.mm))\\\n  $(call test-expect,RS.o,$(call get-object-name,RS.rs))\\\n  $(call test-expect,goo.o,$(call get-object-name,goo.asm))\n\nget-rs-scriptc-name = $(strip \\\n    $(subst ../,__/,\\\n      $(subst :,_,\\\n        $(eval __obj := $1)\\\n        $(foreach __ext,$(LOCAL_RS_EXTENSION),\\\n            $(eval __obj := $(__obj:%$(__ext)=%.cpp))\\\n        )\\\n        $(dir $(__obj))ScriptC_$(notdir $(__obj))\\\n    )))\n\nget-rs-bc-name = $(strip \\\n    $(subst ../,__/,\\\n      $(subst :,_,\\\n        $(eval __obj := $1)\\\n        $(foreach __ext,$(LOCAL_RS_EXTENSION),\\\n            $(eval __obj := $(__obj:%$(__ext)=%.bc))\\\n        )\\\n        $(__obj)\\\n    )))\n\nget-rs-so-name = $(strip \\\n    $(subst ../,__/,\\\n      $(subst :,_,\\\n        $(eval __obj := $1)\\\n        $(foreach __ext,$(LOCAL_RS_EXTENSION),\\\n            $(eval __obj := $(__obj:%$(__ext)=%$(TARGET_SONAME_EXTENSION)))\\\n        )\\\n        $(notdir $(__obj))\\\n    )))\n\n# -----------------------------------------------------------------------------\n# Macro    : hide\n# Returns  : nothing\n# Usage    : $(hide)<make commands>\n# Rationale: To be used as a prefix for Make build commands to hide them\n#            by default during the build. To show them, set V=1 in your\n#            environment or command-line.\n#\n#            For example:\n#\n#                foo.o: foo.c\n#                -->|$(hide) <build-commands>\n#\n#            Where '-->|' stands for a single tab character.\n#\n# -----------------------------------------------------------------------------\nifeq ($(V),1)\nhide = $(empty)\nelse\nhide = @\nendif\n\n\n# -----------------------------------------------------------------------------\n# Function  : local-source-file-path\n# Parameters: $1: source file (as listed in LOCAL_SRC_FILES)\n# Returns   : full source file path of $1\n# Usage     : $(call local-source-file-path,$1)\n# Rationale : Used to compute the full path of a source listed in\n#             LOCAL_SRC_FILES. If it is an absolute path, then this\n#             returns the input, otherwise, prepends $(LOCAL_PATH)/\n#             to the result.\n# -----------------------------------------------------------------------------\nlocal-source-file-path = $(if $(call host-path-is-absolute,$1),$1,$(LOCAL_PATH)/$1)\n\n# cmd-convert-deps\n#\n# On Cygwin, we need to convert the .d dependency file generated by\n# the gcc toolchain by transforming any Windows paths inside it into\n# Cygwin paths that GNU Make can understand (i.e. C:/Foo => /cygdrive/c/Foo)\n#\n# To do that, we will force the compiler to write the dependency file to\n# <foo>.d.org, which will will later convert through a clever sed script\n# that is auto-generated by our build system.\n#\n# The script is invoked with:\n#\n#    $(NDK_DEPENDENCIES_CONVERTER) foo.d\n#\n# It will look if foo.d.org exists, and if so, process it\n# to generate foo.d, then remove the original foo.d.org.\n#\n# On other systems, we simply tell the compiler to write to the .d file directly.\n#\n# NOTE: In certain cases, no dependency file will be generated by the\n#       compiler (e.g. when compiling an assembly file as foo.s)\n#\n# convert-deps is used to compute the name of the compiler-generated dependency file\n# cmd-convert-deps is a command used to convert it to a Cygwin-specific path\n#\nifeq ($(HOST_OS),cygwin)\nconvert-deps = $1.org\ncmd-convert-deps = && $(NDK_DEPENDENCIES_CONVERTER) $1\nelse\nconvert-deps = $1\ncmd-convert-deps =\nendif\n\n# Extract -IPATH/platforms/android-X/arch-Y/include from passed argument\ndefine extract-platforms-include\n$(strip $(foreach __opt,$(1),\\\n    $(if \\\n        $(and \\\n            $(filter -I%,$(__opt)),\\\n            $(findstring /platforms/,$(__opt)),\\\n            $(findstring /android-,$(__opt)),\\\n            $(findstring /arch-,$(__opt))\\\n        ),\\\n        $(__opt)\\\n    )\\\n))\nendef\n\n# Put platforms include option to the end of list, ensuring CrystaX include option going right before that\n# We use subst function here to workaround the fact that '-isystem /some/path' is 2 words while '-I/some/path' is one.\ndefine interpose-crystax-headers\n$(strip \\\n    $(filter-out $(call extract-platforms-include,$(subst -isystem ,-I,$(1))),$(subst -isystem ,-I,$(1))) \\\n    $(eval __libcrystax_incpath := $(crystax-dir)/include)\\\n    $(if $(wildcard $(__libcrystax_incpath)),\\\n        -I$(__libcrystax_incpath),\\\n        $(call __ndk_info,Could not find libcrystax headers: $(call pretty-dir,$(__libcrystax_incpath)) (broken NDK?))\\\n        $(call __ndk_error,Aborting)\\\n    )\\\n    $(subst -I,-isystem ,$(call extract-platforms-include,$(subst -isystem ,-I,$(1))))\\\n)\nendef\n\n# This assumes that many variables have been pre-defined:\n# _SRC: source file\n# _OBJ: destination file\n# _CC: 'compiler' command\n# _FLAGS: 'compiler' flags\n# _TEXT: Display text (e.g. \"Compile++ thumb\", must be EXACTLY 15 chars long)\n#\ndefine ev-build-file\n$$(_OBJ): PRIVATE_ABI      := $$(TARGET_ARCH_ABI)\n$$(_OBJ): PRIVATE_SRC      := $$(_SRC)\n$$(_OBJ): PRIVATE_OBJ      := $$(_OBJ)\n$$(_OBJ): PRIVATE_DEPS     := $$(call host-path,$$(_OBJ).d)\n$$(_OBJ): PRIVATE_MODULE   := $$(LOCAL_MODULE)\n$$(_OBJ): PRIVATE_TEXT     := $$(_TEXT)\n$$(_OBJ): PRIVATE_CC       := $$(_CC)\n$$(_OBJ): PRIVATE_CFLAGS   := $$(call interpose-crystax-headers,$$(_FLAGS))\n\nifeq ($$(LOCAL_SHORT_COMMANDS),true)\n_OPTIONS_LISTFILE := $$(_OBJ).cflags\n$$(_OBJ): $$(call generate-list-file,$$(_FLAGS),$$(_OPTIONS_LISTFILE))\n$$(_OBJ): PRIVATE_CFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE))\n$$(_OBJ): $$(_OPTIONS_LISTFILE)\nendif\n\n$$(call generate-file-dir,$$(_OBJ))\n$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER) $(LOCAL_RS_OBJECTS)\n\t$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) \"$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))\"\n\t$$(hide) $$(PRIVATE_CC) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \\\n\t$$(call cmd-convert-deps,$$(PRIVATE_DEPS))\nendef\n\n\n# For renderscript: slightly different from the above ev-build-file\n# _RS_SRC: RS source file\n# _CPP_SRC: ScriptC_RS.cpp source file\n# _BC_SRC: Bitcode source file\n# _BC_SO: Bitcode SO name, no path\n# _OBJ: destination file\n# _RS_CC: 'compiler' command for _RS_SRC\n# _RS_BCC: 'compiler' command for _BC_SRC\n# _CXX: 'compiler' command for _CPP_SRC\n# _RS_FLAGS: 'compiler' flags for _RS_SRC\n# _CPP_FLAGS: 'compiler' flags for _CPP_SRC\n# _LD_FLAGS: 'compiler' flags for linking\n# _TEXT: Display text (e.g. \"Compile RS\")\n# _OUT: output dir\n# _COMPAT: 'true' if bcc_compat is required\n#\ndefine ev-build-rs-file\n$$(_OBJ): PRIVATE_ABI       := $$(TARGET_ARCH_ABI)\n$$(_OBJ): PRIVATE_RS_SRC    := $$(_RS_SRC)\n$$(_OBJ): PRIVATE_CPP_SRC   := $$(_CPP_SRC)\n$$(_OBJ): PRIVATE_BC_SRC    := $$(_BC_SRC)\n$$(_OBJ): PRIVATE_OBJ       := $$(_OBJ)\n$$(_OBJ): PRIVATE_BC_OBJ    := $$(_BC_SRC)$(TARGET_OBJ_EXTENSION)\n$$(_OBJ): PRIVATE_BC_SO     := $$(_BC_SO)\n$$(_OBJ): PRIVATE_DEPS      := $$(call host-path,$$(_OBJ).d)\n$$(_OBJ): PRIVATE_MODULE    := $$(LOCAL_MODULE)\n$$(_OBJ): PRIVATE_TEXT      := $$(_TEXT)\n$$(_OBJ): PRIVATE_RS_CC     := $$(_RS_CC)\n$$(_OBJ): PRIVATE_RS_BCC    := $$(_RS_BCC)\n$$(_OBJ): PRIVATE_CXX       := $$(_CXX)\n$$(_OBJ): PRIVATE_RS_FLAGS  := $$(_RS_FLAGS)\n$$(_OBJ): PRIVATE_CPPFLAGS  := $$(_CPP_FLAGS)\n$$(_OBJ): PRIVATE_LDFLAGS   := $$(_LD_FLAGS)\n$$(_OBJ): PRIVATE_OUT       := $$(NDK_APP_DST_DIR)\n$$(_OBJ): PRIVATE_RS_TRIPLE := $$(RS_TRIPLE)\n$$(_OBJ): PRIVATE_COMPAT    := $$(_COMPAT)\n\nifeq ($$(LOCAL_SHORT_COMMANDS),true)\n_OPTIONS_LISTFILE := $$(_OBJ).cflags\n$$(_OBJ): $$(call generate-list-file,$$(_CPP_FLAGS),$$(_OPTIONS_LISTFILE))\n$$(_OBJ): PRIVATE_CPPFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE))\n$$(_OBJ): $$(_OPTIONS_LISTFILE)\nendif\n\n# llvm-rc-cc.exe has problem accepting input *.rs with path. To workaround:\n# cd ($dir $(_SRC)) ; llvm-rs-cc $(notdir $(_SRC)) -o ...full-path...\n#\nifeq ($$(_COMPAT),true)\n$$(_OBJ): $$(_RS_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER)\n\t$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) \"$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_RS_SRC))\"\n\t$$(hide) \\\n\tcd $$(call host-path,$$(dir $$(PRIVATE_RS_SRC))) && $$(PRIVATE_RS_CC) -o $$(call host-path,$$(abspath $$(dir $$(PRIVATE_OBJ))))/ -d $$(abspath $$(call host-path,$$(dir $$(PRIVATE_OBJ)))) -MD -reflect-c++ -target-api $(strip $(subst android-,,$(APP_PLATFORM))) $$(PRIVATE_RS_FLAGS) $$(notdir $$(PRIVATE_RS_SRC))\n\t$$(hide) \\\n\t$$(PRIVATE_RS_BCC) -O3 -o $$(call host-path,$$(PRIVATE_BC_OBJ)) -fPIC -shared -rt-path $$(call host-path,$(SYSROOT_LINK)/usr/lib/rs/libclcore.bc) -mtriple $$(PRIVATE_RS_TRIPLE) $$(call host-path,$$(PRIVATE_BC_SRC)) && \\\n\t$$(PRIVATE_CXX) -shared -Wl,-soname,librs.$$(PRIVATE_BC_SO) -nostdlib $$(call host-path,$$(PRIVATE_BC_OBJ)) $$(call host-path,$(SYSROOT_LINK)/usr/lib/rs/libcompiler_rt.a) -o $$(call host-path,$$(PRIVATE_OUT)/librs.$$(PRIVATE_BC_SO)) -L $$(call host-path,$(SYSROOT_LINK)/usr/lib) -L $$(call host-path,$(SYSROOT_LINK)/usr/lib/rs) $$(PRIVATE_LDFLAGS) -lRSSupport -lm -lc && \\\n\t$$(PRIVATE_CXX) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CPPFLAGS) $$(call host-path,$$(PRIVATE_CPP_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \\\n\t$$(call cmd-convert-deps,$$(PRIVATE_DEPS))\nelse\n$$(_OBJ): $$(_RS_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER)\n\t$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) \"$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_RS_SRC))\"\n\t$$(hide) \\\n\tcd $$(call host-path,$$(dir $$(PRIVATE_RS_SRC))) && $$(PRIVATE_RS_CC) -o $$(call host-path,$$(abspath $$(dir $$(PRIVATE_OBJ))))/ -d $$(abspath $$(call host-path,$$(dir $$(PRIVATE_OBJ)))) -MD -reflect-c++ -target-api $(strip $(subst android-,,$(APP_PLATFORM))) $$(PRIVATE_RS_FLAGS) $$(notdir $$(PRIVATE_RS_SRC))\n\t$$(hide) \\\n\t$$(PRIVATE_CXX) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CPPFLAGS) $$(call host-path,$$(PRIVATE_CPP_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \\\n\t$$(call cmd-convert-deps,$$(PRIVATE_DEPS))\nendif\nendef\n\n# This assumes the same things than ev-build-file, but will handle\n# the definition of LOCAL_FILTER_ASM as well.\ndefine ev-build-source-file\nLOCAL_DEPENDENCY_DIRS += $$(dir $$(_OBJ))\nifndef LOCAL_FILTER_ASM\n  # Trivial case: Directly generate an object file\n  $$(eval $$(call ev-build-file))\nelse\n  # This is where things get hairy, we first transform\n  # the source into an assembler file, send it to the\n  # filter, then generate a final object file from it.\n  #\n\n  # First, remember the original settings and compute\n  # the location of our temporary files.\n  #\n  _ORG_SRC := $$(_SRC)\n  _ORG_OBJ := $$(_OBJ)\n  _ORG_FLAGS := $$(_FLAGS)\n  _ORG_TEXT  := $$(_TEXT)\n\n  _OBJ_ASM_ORIGINAL := $$(patsubst %$$(TARGET_OBJ_EXTENSION),%.s,$$(_ORG_OBJ))\n  _OBJ_ASM_FILTERED := $$(patsubst %$$(TARGET_OBJ_EXTENSION),%.filtered.s,$$(_ORG_OBJ))\n\n  # If the source file is a plain assembler file, we're going to\n  # use it directly in our filter.\n  ifneq (,$$(filter %.s,$$(_SRC)))\n    _OBJ_ASM_ORIGINAL := $$(_SRC)\n  endif\n\n  #$$(info SRC=$$(_SRC) OBJ=$$(_OBJ) OBJ_ORIGINAL=$$(_OBJ_ASM_ORIGINAL) OBJ_FILTERED=$$(_OBJ_ASM_FILTERED))\n\n  # We need to transform the source into an assembly file, instead of\n  # an object. The proper way to do that depends on the file extension.\n  #\n  # For C and C++ source files, simply replace the -c by an -S in the\n  # compilation command (this forces the compiler to generate an\n  # assembly file).\n  #\n  # For assembler templates (which end in .S), replace the -c with -E\n  # to send it to the preprocessor instead.\n  #\n  # Don't do anything for plain assembly files (which end in .s)\n  #\n  ifeq (,$$(filter %.s,$$(_SRC)))\n    _OBJ   := $$(_OBJ_ASM_ORIGINAL)\n    ifneq (,$$(filter %.S,$$(_SRC)))\n      _FLAGS := $$(patsubst -c,-E,$$(_ORG_FLAGS))\n    else\n      _FLAGS := $$(patsubst -c,-S,$$(_ORG_FLAGS))\n    endif\n    $$(eval $$(call ev-build-file))\n  endif\n\n  # Next, process the assembly file with the filter\n  $$(_OBJ_ASM_FILTERED): PRIVATE_ABI    := $$(TARGET_ARCH_ABI)\n  $$(_OBJ_ASM_FILTERED): PRIVATE_SRC    := $$(_OBJ_ASM_ORIGINAL)\n  $$(_OBJ_ASM_FILTERED): PRIVATE_DST    := $$(_OBJ_ASM_FILTERED)\n  $$(_OBJ_ASM_FILTERED): PRIVATE_FILTER := $$(LOCAL_FILTER_ASM)\n  $$(_OBJ_ASM_FILTERED): PRIVATE_MODULE := $$(LOCAL_MODULE)\n  $$(_OBJ_ASM_FILTERED): $$(_OBJ_ASM_ORIGINAL)\n\t$$(call host-echo-build-step,$$(PRIVATE_ABI),AsmFilter) \"$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))\"\n\t$$(hide) $$(PRIVATE_FILTER) $$(PRIVATE_SRC) $$(PRIVATE_DST)\n\n  # Then, generate the final object, we need to keep assembler-specific\n  # flags which look like -Wa,<option>:\n  _SRC   := $$(_OBJ_ASM_FILTERED)\n  _OBJ   := $$(_ORG_OBJ)\n  _FLAGS := $$(filter -Wa%,$$(_ORG_FLAGS)) -c\n  _TEXT  := Assembly\n  $$(eval $$(call ev-build-file))\nendif\nendef\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-c-source\n# Arguments : 1: single C source file name (relative to LOCAL_PATH)\n#             2: target object file (without path)\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-c-source,<srcfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-c-source and\n#             compile-s-source\n# -----------------------------------------------------------------------------\ndefine  ev-compile-c-source\n_SRC:=$$(call local-source-file-path,$(1))\n_OBJ:=$$(LOCAL_OBJS_DIR:%/=%)/$(2)\n\n_FLAGS := $$($$(my)CFLAGS) \\\n          $$(call get-src-file-target-cflags,$(1)) \\\n          $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_CFLAGS) \\\n          $$(LOCAL_CONLYFLAGS) \\\n          $$(NDK_APP_CFLAGS) \\\n          $$(NDK_APP_CONLYFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          -c \\\n\n_TEXT := Compile $$(call get-src-file-text,$1)\n_CC   := $$(NDK_CCACHE) $$(TARGET_CC)\n\n$$(eval $$(call ev-build-source-file))\nendef\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-asm-source\n# Arguments : 1: single ASM source file name (relative to LOCAL_PATH)\n#             2: target object file (without path)\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-asm-source,<srcfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-asm-source\n# -----------------------------------------------------------------------------\ndefine  ev-compile-asm-source\n_SRC:=$$(call local-source-file-path,$(1))\n_OBJ:=$$(LOCAL_OBJS_DIR:%/=%)/$(2)\n\n_FLAGS := $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_ASMFLAGS) \\\n          $$(NDK_APP_ASMFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          $$(if $$(filter x86_64, $$(TARGET_ARCH_ABI)), -f elf64, -f elf32 -m x86)\n\n_TEXT := Assemble $$(call get-src-file-text,$1)\n_CC   := $$(NDK_CCACHE) $$(TARGET_ASM)\n\n$$(_OBJ): PRIVATE_ABI      := $$(TARGET_ARCH_ABI)\n$$(_OBJ): PRIVATE_SRC      := $$(_SRC)\n$$(_OBJ): PRIVATE_OBJ      := $$(_OBJ)\n$$(_OBJ): PRIVATE_MODULE   := $$(LOCAL_MODULE)\n$$(_OBJ): PRIVATE_TEXT     := $$(_TEXT)\n$$(_OBJ): PRIVATE_CC       := $$(_CC)\n$$(_OBJ): PRIVATE_CFLAGS   := $$(_FLAGS)\n\nifeq ($$(LOCAL_SHORT_COMMANDS),true)\n_OPTIONS_LISTFILE := $$(_OBJ).cflags\n$$(_OBJ): $$(call generate-list-file,$$(_FLAGS),$$(_OPTIONS_LISTFILE))\n$$(_OBJ): PRIVATE_CFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE))\n$$(_OBJ): $$(_OPTIONS_LISTFILE)\nendif\n\n$$(call generate-file-dir,$$(_OBJ))\n$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER) $(LOCAL_RS_OBJECTS)\n\t$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) \"$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))\"\n\t$$(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ))\nendef\n\n# -----------------------------------------------------------------------------\n# Function  : compile-c-source\n# Arguments : 1: single C source file name (relative to LOCAL_PATH)\n#             2: object file\n# Returns   : None\n# Usage     : $(call compile-c-source,<srcfile>,<objfile>)\n# Rationale : Setup everything required to build a single C source file\n# -----------------------------------------------------------------------------\ncompile-c-source = $(eval $(call ev-compile-c-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Function  : compile-s-source\n# Arguments : 1: single Assembly source file name (relative to LOCAL_PATH)\n#             2: object file\n# Returns   : None\n# Usage     : $(call compile-s-source,<srcfile>,<objfile>)\n# Rationale : Setup everything required to build a single Assembly source file\n# -----------------------------------------------------------------------------\ncompile-s-source = $(eval $(call ev-compile-c-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Function  : compile-asm-source\n# Arguments : 1: single Assembly source file name (relative to LOCAL_PATH)\n#             2: object file\n# Returns   : None\n# Usage     : $(call compile-asm-source,<srcfile>,<objfile>)\n# Rationale : Setup everything required to build a single Assembly source file\n# -----------------------------------------------------------------------------\ncompile-asm-source = $(eval $(call ev-compile-asm-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-objc-source\n# Arguments : 1: single Obj-C source file name (relative to LOCAL_PATH)\n#             2: target object file (without path)\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-objc-source,<srcfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-objc-source\n# -----------------------------------------------------------------------------\ndefine  ev-compile-objc-source\n_SRC:=$$(LOCAL_PATH)/$(1)\n_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)\n\n_FLAGS := $$($$(my)CFLAGS) \\\n          $$(if $$(filter %clang %clang.exe %clang++ %clang++.exe,$$(TARGET_CC)),-fintegrated-as) \\\n          $$(call get-src-file-target-cflags,$(1)) \\\n          $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_CFLAGS) \\\n          $$(LOCAL_OBJCFLAGS) \\\n          $$(NDK_APP_CFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          -c \\\n\n_TEXT := \"Compile $$(call get-src-file-text,$1)\"\n_CC   := $$(NDK_CCACHE) $$(TARGET_CC)\n\n$$(eval $$(call ev-build-source-file))\nendef\n\n# -----------------------------------------------------------------------------\n# Function  : compile-objc-source\n# Arguments : 1: single Obj-C source file name (relative to LOCAL_PATH)\n#             2: object file\n# Returns   : None\n# Usage     : $(call compile-objc-source,<srcfile>,<objfile>)\n# Rationale : Setup everything required to build a single Obj-C source file\n# -----------------------------------------------------------------------------\ncompile-objc-source = $(eval $(call ev-compile-objc-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-cpp-source\n# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)\n#             2: target object file (without path)\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-cpp-source,<srcfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-cpp-source\n# -----------------------------------------------------------------------------\n\ndefine  ev-compile-cpp-source\n_SRC:=$$(call local-source-file-path,$(1))\n_OBJ:=$$(LOCAL_OBJS_DIR:%/=%)/$(2)\n_FLAGS := $$($$(my)CXXFLAGS) \\\n          $$(call get-src-file-target-cflags,$(1)) \\\n          $$(call host-c-includes, $$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_CFLAGS) \\\n          $$(LOCAL_CPPFLAGS) \\\n          $$(LOCAL_CXXFLAGS) \\\n          $$(NDK_APP_CFLAGS) \\\n          $$(NDK_APP_CPPFLAGS) \\\n          $$(NDK_APP_CXXFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          -c \\\n\n_CC   := $$(NDK_CCACHE) $$($$(my)CXX)\n_TEXT := Compile++ $$(call get-src-file-text,$1)\n\n$$(eval $$(call ev-build-source-file))\nendef\n\n# -----------------------------------------------------------------------------\n# Function  : compile-cpp-source\n# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)\n#           : 2: object file name\n# Returns   : None\n# Usage     : $(call compile-cpp-source,<srcfile>)\n# Rationale : Setup everything required to build a single C++ source file\n# -----------------------------------------------------------------------------\ncompile-cpp-source = $(eval $(call ev-compile-cpp-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-objc++-source\n# Arguments : 1: single Obj-C++ source file name (relative to LOCAL_PATH)\n#             2: target object file (without path)\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-objc++-source,<srcfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-objc++-source\n# -----------------------------------------------------------------------------\n\ndefine  ev-compile-objc++-source\n_SRC:=$$(LOCAL_PATH)/$(1)\n_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)\n_FLAGS := $$($$(my)CXXFLAGS) \\\n          $$(if $$(filter %clang %clang.exe %clang++ %clang++.exe,$$(TARGET_CC)),-integrated-as) \\\n          $$(call get-src-file-target-cflags,$(1)) \\\n          $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_CFLAGS) \\\n          $$(LOCAL_OBJCFLAGS) \\\n          $$(LOCAL_CPPFLAGS) \\\n          $$(LOCAL_CXXFLAGS) \\\n          $$(NDK_APP_CFLAGS) \\\n          $$(NDK_APP_CPPFLAGS) \\\n          $$(NDK_APP_CXXFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          -c \\\n\n_CC   := $$(NDK_CCACHE) $$($$(my)CXX)\n_TEXT := \"Compile++ $$(call get-src-file-text,$1)\"\n\n$$(eval $$(call ev-build-source-file))\nendef\n\n# -----------------------------------------------------------------------------\n# Function  : compile-objc++-source\n# Arguments : 1: single Obj-C++ source file name (relative to LOCAL_PATH)\n#           : 2: object file name\n# Returns   : None\n# Usage     : $(call compile-objc++-source,<srcfile>)\n# Rationale : Setup everything required to build a single Obj-C++ source file\n# -----------------------------------------------------------------------------\ncompile-objc++-source = $(eval $(call ev-compile-objc++-source,$1,$2))\n\n# -----------------------------------------------------------------------------\n# Template  : ev-compile-rs-source\n# Arguments : 1: single RS source file name (relative to LOCAL_PATH)\n#             2: intermediate cpp file (without path)\n#             3: intermediate bc file (without path)\n#             4: so file from bc (without path)\n#             5: target object file (without path)\n#             6: 'true' if bcc_compat is required\n# Returns   : None\n# Usage     : $(eval $(call ev-compile-rs-source,<srcfile>,<cppfile>,<objfile>)\n# Rationale : Internal template evaluated by compile-rs-source\n# -----------------------------------------------------------------------------\n\ndefine  ev-compile-rs-source\n_RS_SRC:=$$(call local-source-file-path,$(1))\n_CPP_SRC:=$$(LOCAL_OBJS_DIR:%/=%)/$(2)\n_BC_SRC:=$$(LOCAL_OBJS_DIR:%/=%)/$(3)\n_BC_SO:=$(4)\n_OBJ:=$$(LOCAL_OBJS_DIR:%/=%)/$(5)\n_COMPAT := $(6)\n_CPP_FLAGS := $$($$(my)CXXFLAGS) \\\n          $$(call get-src-file-target-cflags,$(1)) \\\n          $$(call host-c-includes, $$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \\\n          $$(LOCAL_CFLAGS) \\\n          $$(LOCAL_CPPFLAGS) \\\n          $$(LOCAL_CXXFLAGS) \\\n          $$(NDK_APP_CFLAGS) \\\n          $$(NDK_APP_CPPFLAGS) \\\n          $$(NDK_APP_CXXFLAGS) \\\n          -isystem $$(call host-path,$$(SYSROOT_INC)/usr/include) \\\n          -fno-rtti \\\n          -c \\\n\n_LD_FLAGS := $$(TARGET_LDFLAGS)\n\n_RS_FLAGS := $$(call host-c-includes, $$(LOCAL_RENDERSCRIPT_INCLUDES) $$(LOCAL_PATH)) \\\n          $$($$(my)RS_FLAGS) \\\n          $$(LOCAL_RENDERSCRIPT_FLAGS) \\\n          $$(call host-c-includes,$$($(my)RENDERSCRIPT_INCLUDES)) \\\n\n_RS_CC  := $$(NDK_CCACHE) $$($$(my)RS_CC)\n_RS_BCC := $$(NDK_CCACHE) $$($$(my)RS_BCC)\n_CXX    := $$(NDK_CCACHE) $$($$(my)CXX)\n_TEXT   := Compile RS\n_OUT    := $$($$(my)OUT)\n\n$$(eval $$(call ev-build-rs-file))\nendef\n\n# -----------------------------------------------------------------------------\n# Function  : compile-rs-source\n# Arguments : 1: single RS source file name (relative to LOCAL_PATH)\n#             2: intermediate cpp file name\n#             3: intermediate bc file\n#             4: so file from bc (without path)\n#             5: object file name\n#             6: 'true' if bcc_compat is required\n# Returns   : None\n# Usage     : $(call compile-rs-source,<srcfile>)\n# Rationale : Setup everything required to build a single RS source file\n# -----------------------------------------------------------------------------\ncompile-rs-source = $(eval $(call ev-compile-rs-source,$1,$2,$3,$4,$5,$6))\n\n#\n#  Module imports\n#\n\n# Initialize import list\nimport-init = $(eval __ndk_import_dirs :=)\n\n# Add an optional single directory to the list of import paths\n#\nimport-add-path-optional = \\\n  $(if $(strip $(wildcard $1)),\\\n    $(call ndk_log,Adding import directory: $1)\\\n    $(eval __ndk_import_dirs += $1)\\\n  )\\\n\n# Add a directory to the list of import paths\n# This will warn if the directory does not exist\n#\nimport-add-path = \\\n  $(if $(strip $(wildcard $1)),\\\n    $(call ndk_log,Adding import directory: $1)\\\n    $(eval __ndk_import_dirs += $1)\\\n  ,\\\n    $(call __ndk_info,WARNING: Ignoring unknown import directory: $1)\\\n  )\\\n\nimport-find-module = $(strip \\\n      $(eval __imported_module :=)\\\n      $(foreach __import_dir,$(__ndk_import_dirs),\\\n        $(if $(__imported_module),,\\\n          $(call ndk_log,  Probing $(__import_dir)/$1/Android.mk)\\\n          $(if $(strip $(wildcard $(__import_dir)/$1/Android.mk)),\\\n            $(eval __imported_module := $(__import_dir)/$1)\\\n          )\\\n        )\\\n      )\\\n      $(__imported_module)\\\n    )\n\n# described in docs/IMPORT-MODULE.TXT\n# $1: tag name for the lookup\n#\n# Small technical note on __ndk_import_depth: we use this variable to\n# record the depth of recursive import-module calls. The variable is\n# initially empty, and we append a \"x\" to it each time import-module is\n# called. I.e. for three recursive calls to import-module, we would get\n# the values:\n#\n#   first call:   x\n#   second call:  xx\n#   third call:   xxx\n#\n# This is used in module-add to add the top-level modules (i.e. those\n# that are not added with import-module) to __ndk_top_modules, corresponding\n# to the default list of wanted modules (see setup-toolchain.mk).\n#\nimport-module = \\\n    $(eval __import_tag := $(strip $1))\\\n    $(if $(call seq,$(words $(__import_tag)),1),,\\\n      $(call __ndk_info,$(call local-makefile): Cannot import module with spaces in tag: '$(__import_tag)')\\\n    )\\\n    $(if $(call set_is_member,$(__ndk_import_list),$(__import_tag)),\\\n      $(call ndk_log,Skipping duplicate import for module with tag '$(__import_tag)')\\\n    ,\\\n      $(call ndk_log,Looking for imported module with tag '$(__import_tag)')\\\n      $(eval __imported_path := $(call import-find-module,$(__import_tag)))\\\n      $(if $(__imported_path),\\\n        $(call ndk_log,    Found in $(__imported_path))\\\n        $(eval __ndk_import_depth := $(__ndk_import_depth)x) \\\n        $(eval __ndk_import_list := $(call set_insert,$(__ndk_import_list),$(__import_tag)))\\\n        $(eval include $(__imported_path)/Android.mk)\\\n        $(eval __ndk_import_depth := $(__ndk_import_depth:%x=%))\\\n      ,\\\n        $(call __ndk_info,$(call local-makefile): Cannot find module with tag '$(__import_tag)' in import path)\\\n        $(call __ndk_info,Are you sure your NDK_MODULE_PATH variable is properly defined ?)\\\n        $(call __ndk_info,The following directories were searched:)\\\n        $(for __import_dir,$(__ndk_import_dirs),\\\n          $(call __ndk_info,    $(__import_dir))\\\n        )\\\n        $(call __ndk_error,Aborting.)\\\n      )\\\n   )\n\n# Only used for debugging\n#\nimport-debug = \\\n    $(info IMPORT DIRECTORIES:)\\\n    $(foreach __dir,$(__ndk_import_dirs),\\\n      $(info -- $(__dir))\\\n    )\\\n\n#\n#  Module classes\n#\nNDK_MODULE_CLASSES :=\n\n# Register a new module class\n# $1: class name (e.g. STATIC_LIBRARY)\n# $2: optional file prefix (e.g. 'lib')\n# $3: optional file suffix (e.g. '.so')\n#\nmodule-class-register = \\\n    $(eval NDK_MODULE_CLASSES += $1) \\\n    $(eval NDK_MODULE_CLASS.$1.FILE_PREFIX := $2) \\\n    $(eval NDK_MODULE_CLASS.$1.FILE_SUFFIX := $3) \\\n    $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(false)) \\\n\n# Same a module-class-register, for installable modules\n#\n# An installable module is one that will be copied to $PROJECT/libs/<abi>/\n# during the NDK build.\n#\n# $1: class name\n# $2: optional file prefix\n# $3: optional file suffix\n#\nmodule-class-register-installable = \\\n    $(call module-class-register,$1,$2,$3) \\\n    $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(true))\n\n# Returns $(true) if $1 is a valid/registered LOCAL_MODULE_CLASS value\n#\nmodule-class-check = $(call set_is_member,$(NDK_MODULE_CLASSES),$1)\n\n# Returns $(true) if $1 corresponds to an installable module class\n#\nmodule-class-is-installable = $(if $(NDK_MODULE_CLASS.$1.INSTALLABLE),$(true),$(false))\n\n# Returns $(true) if $1 corresponds to a copyable prebuilt module class\n#\nmodule-class-is-copyable = $(if $(call seq,$1,PREBUILT_SHARED_LIBRARY),$(true),$(false))\n\n#\n# Register valid module classes\n#\n\n# static libraries:\n# <foo> -> lib<foo>.a by default\n$(call module-class-register,STATIC_LIBRARY,lib,$(TARGET_LIB_EXTENSION))\n\n# shared libraries:\n# <foo> -> lib<foo>.so\n# a shared library is installable.\n$(call module-class-register-installable,SHARED_LIBRARY,lib,$(TARGET_SONAME_EXTENSION))\n\n# executable\n# <foo> -> <foo>\n# an executable is installable.\n$(call module-class-register-installable,EXECUTABLE,,)\n\n# prebuilt shared library\n# <foo> -> <foo>  (we assume it is already well-named)\n# it is installable\n$(call module-class-register-installable,PREBUILT_SHARED_LIBRARY,,)\n\n# prebuilt static library\n# <foo> -> <foo> (we assume it is already well-named)\n$(call module-class-register,PREBUILT_STATIC_LIBRARY,,)\n\n#\n# Objective-C support\n#\n\n# The list of registered Objective-C runtimes we support\nNDK_OBJC_LIST :=\n\n# Used internally to register a given Objective-C runtime, see below\n#\n# $1: Objective-C runtime name as it appears in APP_OBJC (e.g. cocotron)\n# $2: Objective-C runtime module name (e.g. objc/cocotron)\n# $3: list of static libraries all modules will depend on\n# $4: list of shared libraries all modules will depend on\n#\nndk-objc-register = \\\n    $(eval __ndk_objc := $(strip $1)) \\\n    $(eval NDK_OBJC_LIST += $(__ndk_objc)) \\\n    $(eval NDK_OBJC.$(__ndk_objc).IMPORT_MODULE := $(strip $2)) \\\n    $(eval NDK_OBJC.$(__ndk_objc).STATIC_LIBS := $(strip $3)) \\\n    $(eval NDK_OBJC.$(__ndk_objc).SHARED_LIBS := $(strip $4)) \\\n    $(eval NDK_OBJC.$(__ndk_objc).LDLIBS := $(strip $5))\n\n# Called to check that the value of APP_OBJC is a valid one.\n# $1: Objective-C runtime name as it apperas in APP_OBJC (e.g. 'cocotron')\n#\nndk-objc-check = \\\n    $(if $(call set_is_member,$(NDK_OBJC_LIST),$1),,\\\n        $(call __ndk_info,Invalid APP_OBJC value: $1)\\\n        $(call __ndk_info,Please use one of the following instead: $(NDK_OBJC_LIST))\\\n        $(call __ndk_error,Aborting))\n\n# Called before the top-level Android.mk is parsed to\n# select the Objective-C runtime.\n# $1: Objective-C runtime name as it appears in APP_OBJC (e.g. cocotron)\n#\nndk-objc-select = \\\n    $(if $(strip \\\n        $(foreach __module,$(__ndk_modules),\\\n            $(call module-has-objc-sources,$(__module)) \\\n            $(call module-has-objc++-sources,$(__module)) \\\n        )),\\\n        $(call import-module,$(NDK_OBJC.$1.IMPORT_MODULE))\\\n    )\n\n# Called after all Android.mk files are parsed to add\n# proper Objective-C dependencies to every Objective-C module.\n# $1: Objective-C runtime name as it appears in APP_OBJC (e.g. cocotron)\n#\nndk-objc-add-dependencies = \\\n    $(foreach __module,$(__ndk_modules),\\\n        $(if $(or $(call module-has-objc-sources,$(__module)),$(call module-has-objc++-sources,$(__module))),\\\n            $(call ndk_log,Module '$(__module)' has Objective-C sources)\\\n            $(call module-add-deps,$(__module),$(NDK_OBJC.$1.STATIC_LIBS),$(NDK_OBJC.$1.SHARED_LIBS),$(NDK_OBJC.$1.LDLIBS))\\\n        )\\\n    )\n\n# Register the 'none' Objective-C runtime\n$(call ndk-objc-register,\\\n    none,\\\n    objc/none\\\n    )\n\n# Register the 'cocotron' Objective-C runtime\n$(call ndk-objc-register,\\\n    cocotron,\\\n    objc/cocotron/0.1.0,\\\n    ,\\\n    Foundation CoreVideo CoreText CoreData CoreGraphics CoreFoundation CFNetwork CoreServices objc2rt_shared\\\n    )\n\n#\n# C++ STL support\n#\n\n# The list of registered STL implementations we support\nNDK_STL_LIST :=\n\n# Used internally to register a given STL implementation, see below.\n#\n# $1: STL name as it appears in APP_STL (e.g. system)\n# $2: STL module name (e.g. cxx-stl/system)\n# $3: list of static libraries all modules will depend on\n# $4: list of shared libraries all modules will depend on\n# $5: list of ldlibs all modules will link\n#\nndk-stl-register = \\\n    $(eval __ndk_stl := $(strip $1)) \\\n    $(eval NDK_STL_LIST += $(__ndk_stl)) \\\n    $(eval NDK_STL.$(__ndk_stl).IMPORT_MODULE := $(strip $2)) \\\n    $(eval NDK_STL.$(__ndk_stl).STATIC_LIBS := $(strip $(call strip-lib-prefix,$3))) \\\n    $(eval NDK_STL.$(__ndk_stl).SHARED_LIBS := $(strip $(call strip-lib-prefix,$4))) \\\n    $(eval NDK_STL.$(__ndk_stl).LDLIBS := $(strip $5))\n\n# Called to check that the value of APP_STL is a valid one.\n# $1: STL name as it apperas in APP_STL (e.g. 'system')\n#\nndk-stl-check = \\\n    $(if $(call set_is_member,$(NDK_STL_LIST),$1),,\\\n        $(call __ndk_info,Invalid APP_STL value: $1)\\\n        $(call __ndk_info,Please use one of the following instead: $(NDK_STL_LIST))\\\n        $(call __ndk_error,Aborting))\n\n# Called before the top-level Android.mk is parsed to\n# select the STL implementation.\n# $1: STL name as it appears in APP_STL (e.g. system)\n#\nndk-stl-select = \\\n    $(call import-module,$(NDK_STL.$1.IMPORT_MODULE))\n\n# Called after all Android.mk files are parsed to add\n# proper STL dependencies to every C++ module.\n# $1: STL name as it appears in APP_STL (e.g. system)\n#\nndk-stl-add-dependencies = \\\n    $(call modules-add-c++-dependencies,\\\n        $(NDK_STL.$1.STATIC_LIBS),\\\n        $(NDK_STL.$1.SHARED_LIBS),\\\n        $(NDK_STL.$1.LDLIBS))\n\n#\n#\n\n# Register the 'system' STL implementation\n#\n$(call ndk-stl-register,\\\n    system,\\\n    cxx-stl/system,\\\n    libstdc++,\\\n    ,\\\n    \\\n    )\n\n# Register the 'gnustl_static' STL implementation\n#\n$(call ndk-stl-register,\\\n    gnustl_static,\\\n    cxx-stl/gnu-libstdc++,\\\n    gnustl_static,\\\n    ,\\\n    \\\n    )\n\n# Register the 'gnustl_shared' STL implementation\n#\n$(call ndk-stl-register,\\\n    gnustl_shared,\\\n    cxx-stl/gnu-libstdc++,\\\n    ,\\\n    gnustl_shared,\\\n    \\\n    )\n\n# Register the 'c++_static' STL implementation\n#\n$(call ndk-stl-register,\\\n    c++_static,\\\n    cxx-stl/llvm-libc++,\\\n    c++_static,\\\n    ,\\\n    -ldl\\\n    )\n\n# Register the 'c++_shared' STL implementation\n#\n$(call ndk-stl-register,\\\n    c++_shared,\\\n    cxx-stl/llvm-libc++,\\\n    ,\\\n    c++_shared,\\\n    \\\n    )\n\n# The 'none' APP_STL value corresponds to no C++ support at\n# all. Used by some of the test projects.\n#\n$(call ndk-stl-register,\\\n    none,\\\n    cxx-stl/system,\\\n    )\n\nifneq (,$(NDK_UNIT_TESTS))\n$(call ndk-run-all-tests)\nendif\n"
  },
  {
    "path": "build/core/import-locals.mk",
    "content": "# Copyright (C) 2009, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Handle local variable expor/import during the build\n#\n\n$(call assert-defined,LOCAL_MODULE)\n\n# For LOCAL_CFLAGS, LOCAL_CONLYFLAGS, LOCAL_OBJCFLAGS, LOCAL_CPPFLAGS and LOCAL_C_INCLUDES, etc,\n# we need to use the exported definitions of the closure of all modules\n# we depend on.\n#\n# I.e. If module 'foo' depends on 'bar' which depends on 'zoo',\n# then 'foo' will get the CFLAGS/CONLYFLAGS/CPPFLAGS/C_INCLUDES/... of both 'bar'\n# and 'zoo'\n#\n\nall_depends := $(call module-get-all-dependencies,$(LOCAL_MODULE))\nall_depends := $(filter-out $(LOCAL_MODULE),$(all_depends))\n\nimported_CFLAGS     := $(call module-get-listed-export,$(all_depends),CFLAGS)\nimported_CONLYFLAGS := $(call module-get-listed-export,$(all_depends),CONLYFLAGS)\nimported_OBJCFLAGS  := $(call module-get-listed-export,$(all_depends),OBJCFLAGS)\nimported_CPPFLAGS   := $(call module-get-listed-export,$(all_depends),CPPFLAGS)\nimported_RENDERSCRIPT_FLAGS := $(call module-get-listed-export,$(all_depends),RENDERSCRIPT_FLAGS)\nimported_ASMFLAGS   := $(call module-get-listed-export,$(all_depends),ASMFLAGS)\nimported_C_INCLUDES := $(call module-get-listed-export,$(all_depends),C_INCLUDES)\nimported_LDFLAGS    := $(call module-get-listed-export,$(all_depends),LDFLAGS)\n\nifdef NDK_DEBUG_IMPORTS\n    $(info Imports for module $(LOCAL_MODULE):)\n    $(info   CFLAGS='$(imported_CFLAGS)')\n    $(info   CONLYFLAGS='$(imported_CONLYFLAGS)')\n    $(info   OBJCFLAGS='$(imported_OBJCFLAGS)')\n    $(info   CPPFLAGS='$(imported_CPPFLAGS)')\n    $(info   RENDERSCRIPT_FLAGS='$(imported_RENDERSCRIPT_FLAGS)')\n    $(info   ASMFLAGS='$(imported_ASMFLAGS)')\n    $(info   C_INCLUDES='$(imported_C_INCLUDES)')\n    $(info   LDFLAGS='$(imported_LDFLAGS)')\n    $(info All depends='$(all_depends)')\nendif\n\n#\n# The imported compiler flags are prepended to their LOCAL_XXXX value\n# (this allows the module to override them).\n#\nLOCAL_CFLAGS     := $(strip $(imported_CFLAGS) $(LOCAL_CFLAGS))\nLOCAL_CONLYFLAGS := $(strip $(imported_CONLYFLAGS) $(LOCAL_CONLYFLAGS))\nLOCAL_OBJCFLAGS  := $(strip $(imported_OBJCFLAGS) $(LOCAL_OBJCFLAGS))\nLOCAL_CPPFLAGS   := $(strip $(imported_CPPFLAGS) $(LOCAL_CPPFLAGS))\nLOCAL_RENDERSCRIPT_FLAGS := $(strip $(imported_RENDERSCRIPT_FLAGS) $(LOCAL_RENDERSCRIPT_FLAGS))\nLOCAL_ASMFLAGS := $(strip $(imported_ASMFLAGS) $(LOCAL_ASMFLAGS))\nLOCAL_LDFLAGS    := $(strip $(imported_LDFLAGS) $(LOCAL_LDFLAGS))\n\n#\n# The imported include directories are appended to their LOCAL_XXX value\n# (this allows the module to override them)\n#\nLOCAL_C_INCLUDES := $(strip $(LOCAL_C_INCLUDES) $(imported_C_INCLUDES))\n\n# Similarly, you want the imported flags to appear _after_ the LOCAL_LDLIBS\n# due to the way Unix linkers work (depending libraries must appear before\n# dependees on final link command).\n#\nimported_LDLIBS := $(call module-get-listed-export,$(all_depends),LDLIBS)\n\nLOCAL_LDLIBS := $(strip $(LOCAL_LDLIBS) $(imported_LDLIBS))\n\n# We're done here\n"
  },
  {
    "path": "build/core/init.mk",
    "content": "# Copyright (C) 2009-2010, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Initialization of the NDK build system. This file is included by\n# several build scripts.\n#\n\n# Disable GNU Make implicit rules\n\n# this turns off the suffix rules built into make\n.SUFFIXES:\n\n# this turns off the RCS / SCCS implicit rules of GNU Make\n% : RCS/%,v\n% : RCS/%\n% : %,v\n% : s.%\n% : SCCS/s.%\n\n# If a rule fails, delete $@.\n.DELETE_ON_ERROR:\n\n\n# Define NDK_LOG=1 in your environment to display log traces when\n# using the build scripts. See also the definition of ndk_log below.\n#\nNDK_LOG := $(strip $(NDK_LOG))\nifeq ($(NDK_LOG),true)\n    override NDK_LOG := 1\nendif\n\n# Check that we have at least GNU Make 3.81\n# We do this by detecting whether 'lastword' is supported\n#\nMAKE_TEST := $(lastword a b c d e f)\nifneq ($(MAKE_TEST),f)\n    $(error Android NDK: GNU Make version $(MAKE_VERSION) is too low (should be >= 3.81))\nendif\nifeq ($(NDK_LOG),1)\n    $(info Android NDK: GNU Make version $(MAKE_VERSION) detected)\nendif\n\n# NDK_ROOT *must* be defined and point to the root of the NDK installation\nNDK_ROOT := $(strip $(NDK_ROOT))\nifndef NDK_ROOT\n    $(error ERROR while including init.mk: NDK_ROOT must be defined !)\nendif\nifneq ($(words $(NDK_ROOT)),1)\n    $(info,The Android NDK installation path contains spaces: '$(NDK_ROOT)')\n    $(error,Please fix the problem by reinstalling to a different location.)\nendif\n\n# ====================================================================\n#\n# Define a few useful variables and functions.\n# More stuff will follow in definitions.mk.\n#\n# ====================================================================\n\n# Used to output warnings and error from the library, it's possible to\n# disable any warnings or errors by overriding these definitions\n# manually or by setting NDK_NO_WARNINGS or NDK_NO_ERRORS\n\n__ndk_name    := Android NDK\n__ndk_info     = $(info $(__ndk_name): $1 $2 $3 $4 $5)\n__ndk_warning  = $(warning $(__ndk_name): $1 $2 $3 $4 $5)\n__ndk_error    = $(error $(__ndk_name): $1 $2 $3 $4 $5)\n\nifdef NDK_NO_INFO\n__ndk_info :=\nendif\nifdef NDK_NO_WARNINGS\n__ndk_warning :=\nendif\nifdef NDK_NO_ERRORS\n__ndk_error :=\nendif\n\n# -----------------------------------------------------------------------------\n# Function : ndk_log\n# Arguments: 1: text to print when NDK_LOG is defined to 1\n# Returns  : None\n# Usage    : $(call ndk_log,<some text>)\n# -----------------------------------------------------------------------------\nifeq ($(NDK_LOG),1)\nndk_log = $(info $(__ndk_name): $1)\nelse\nndk_log :=\nendif\n\n# -----------------------------------------------------------------------------\n# Function : host-toolchain-path\n# Arguments: 1: NDK root\n#            2: Toolchain name\n# Returns  : The parent path of all toolchains for this host. Note that\n#            HOST_TAG64 == HOST_TAG for 32-bit systems.\n# -----------------------------------------------------------------------------\nifeq ($(NDK_NEW_TOOLCHAINS_LAYOUT),true)\n    host-toolchain-path = $1/$(HOST_TAG64)/$2\nelse\n    host-toolchain-path = $1/$2/prebuilt/$(HOST_TAG64)\nendif\n\n# -----------------------------------------------------------------------------\n# Function : get-toolchain-root\n# Arguments: 1: Toolchain name\n# Returns  : Path to the given prebuilt toolchain.\n# -----------------------------------------------------------------------------\nget-toolchain-root = $(call host-toolchain-path,$(NDK_TOOLCHAINS_ROOT),$1)\n\n# -----------------------------------------------------------------------------\n# Function : get-binutils-root\n# Arguments: 1: NDK root\n#            2: Toolchain name (no version number)\n# Returns  : Path to the given prebuilt binutils.\n# -----------------------------------------------------------------------------\nget-binutils-root = $1/binutils/$2\n\n# -----------------------------------------------------------------------------\n# Function : get-gcclibs-path\n# Arguments: 1: NDK root\n#            2: Toolchain name (no version number)\n# Returns  : Path to the given prebuilt gcclibs.\n# -----------------------------------------------------------------------------\nget-gcclibs-path = $1/gcclibs/$2\n\n# ====================================================================\n#\n# Host system auto-detection.\n#\n# ====================================================================\n\n#\n# Determine host system and architecture from the environment\n#\nHOST_OS := $(strip $(HOST_OS))\nifndef HOST_OS\n    # On all modern variants of Windows (including Cygwin and Wine)\n    # the OS environment variable is defined to 'Windows_NT'\n    #\n    # The value of PROCESSOR_ARCHITECTURE will be x86 or AMD64\n    #\n    ifeq ($(OS),Windows_NT)\n        HOST_OS := windows\n    else\n        # For other systems, use the `uname` output\n        UNAME := $(shell uname -s)\n        ifneq (,$(findstring Linux,$(UNAME)))\n            HOST_OS := linux\n        endif\n        ifneq (,$(findstring Darwin,$(UNAME)))\n            HOST_OS := darwin\n        endif\n        # We should not be there, but just in case !\n        ifneq (,$(findstring CYGWIN,$(UNAME)))\n            HOST_OS := windows\n        endif\n        ifeq ($(HOST_OS),)\n            $(call __ndk_info,Unable to determine HOST_OS from uname -s: $(UNAME))\n            $(call __ndk_info,Please define HOST_OS in your environment.)\n            $(call __ndk_error,Aborting.)\n        endif\n    endif\n    $(call ndk_log,Host OS was auto-detected: $(HOST_OS))\nelse\n    $(call ndk_log,Host OS from environment: $(HOST_OS))\nendif\n\n# For all systems, we will have HOST_OS_BASE defined as\n# $(HOST_OS), except on Cygwin where we will have:\n#\n#  HOST_OS      == cygwin\n#  HOST_OS_BASE == windows\n#\n# Trying to detect that we're running from Cygwin is tricky\n# because we can't use $(OSTYPE): It's a Bash shell variable\n# that is not exported to sub-processes, and isn't defined by\n# other shells (for those with really weird setups).\n#\n# Instead, we assume that a program named /bin/uname.exe\n# that can be invoked and returns a valid value corresponds\n# to a Cygwin installation.\n#\nHOST_OS_BASE := $(HOST_OS)\n\nifeq ($(HOST_OS),windows)\n    ifneq (,$(strip $(wildcard /bin/uname.exe)))\n        $(call ndk_log,Found /bin/uname.exe on Windows host, checking for Cygwin)\n        # NOTE: The 2>NUL here is for the case where we're running inside the\n        #       native Windows shell. On cygwin, this will create an empty NUL file\n        #       that we're going to remove later (see below).\n        UNAME := $(shell /bin/uname.exe -s 2>NUL)\n        $(call ndk_log,uname -s returned: $(UNAME))\n        ifneq (,$(filter CYGWIN%,$(UNAME)))\n            $(call ndk_log,Cygwin detected: $(shell uname -a))\n            HOST_OS := cygwin\n            DUMMY := $(shell rm -f NUL) # Cleaning up\n        else\n            ifneq (,$(filter MINGW32%,$(UNAME)))\n                $(call ndk_log,MSys detected: $(shell uname -a))\n                HOST_OS := cygwin\n            else\n                $(call ndk_log,Cygwin *not* detected!)\n            endif\n        endif\n    endif\nendif\n\nifneq ($(HOST_OS),$(HOST_OS_BASE))\n    $(call ndk_log, Host operating system detected: $(HOST_OS), base OS: $(HOST_OS_BASE))\nelse\n    $(call ndk_log, Host operating system detected: $(HOST_OS))\nendif\n\n# Always use /usr/bin/file on Darwin to avoid relying on broken Ports\n# version. See http://b.android.com/53769 .\nHOST_FILE_PROGRAM := file\nifeq ($(HOST_OS),darwin)\nHOST_FILE_PROGRAM := /usr/bin/file\nendif\n\nHOST_ARCH := $(strip $(HOST_ARCH))\nHOST_ARCH64 :=\nifndef HOST_ARCH\n    ifeq ($(HOST_OS_BASE),windows)\n        HOST_ARCH := $(PROCESSOR_ARCHITECTURE)\n        ifeq ($(HOST_ARCH),AMD64)\n            HOST_ARCH := x86\n        endif\n        # Windows is 64-bit if either ProgramW6432 or ProgramFiles(x86) is set\n        ifneq (\"/\",$(shell echo \"%ProgramW6432%/%ProgramFiles(x86)%\"))\n            HOST_ARCH64 := x86_64\n        endif\n    else # HOST_OS_BASE != windows\n        UNAME := $(shell uname -m)\n        ifneq (,$(findstring 86,$(UNAME)))\n            HOST_ARCH := x86\n            ifneq (,$(shell $(HOST_FILE_PROGRAM) -L $(SHELL) | grep 'x86[_-]64'))\n                HOST_ARCH64 := x86_64\n            endif\n        endif\n        # We should probably should not care at all\n        ifneq (,$(findstring Power,$(UNAME)))\n            HOST_ARCH := ppc\n        endif\n        ifeq ($(HOST_ARCH),)\n            $(call __ndk_info,Unsupported host architecture: $(UNAME))\n            $(call __ndk_error,Aborting)\n        endif\n    endif # HOST_OS_BASE != windows\n    $(call ndk_log,Host CPU was auto-detected: $(HOST_ARCH))\nelse\n    $(call ndk_log,Host CPU from environment: $(HOST_ARCH))\nendif\n\nifeq (,$(HOST_ARCH64))\n    HOST_ARCH64 := $(HOST_ARCH)\nendif\n\nHOST_TAG := $(HOST_OS_BASE)-$(HOST_ARCH)\nHOST_TAG64 := $(HOST_OS_BASE)-$(HOST_ARCH64)\n\n# The directory separator used on this host\nHOST_DIRSEP := :\nifeq ($(HOST_OS),windows)\n  HOST_DIRSEP := ;\nendif\n\n# The host executable extension\nHOST_EXEEXT :=\nifeq ($(HOST_OS),windows)\n  HOST_EXEEXT := .exe\nendif\n\nifeq ($(HOST_TAG),windows-x86)\n    # If we are on Windows, we need to check that we are not running Cygwin 1.5,\n    # which is deprecated and won't run our toolchain binaries properly.\n    ifeq ($(HOST_OS),cygwin)\n        # On cygwin, 'uname -r' returns something like 1.5.23(0.225/5/3)\n        # We recognize 1.5. as the prefix to look for then.\n        CYGWIN_VERSION := $(shell uname -r)\n        ifneq ($(filter XX1.5.%,XX$(CYGWIN_VERSION)),)\n            $(call __ndk_info,You seem to be running Cygwin 1.5, which is not supported.)\n            $(call __ndk_info,Please upgrade to Cygwin 1.7 or higher.)\n            $(call __ndk_error,Aborting.)\n        endif\n    endif\n\n    # special-case the host-tag\n    HOST_TAG := windows\n\n    # For 32-bit systems, HOST_TAG64 should be HOST_TAG, but we just updated\n    # HOST_TAG, so update HOST_TAG64 to match.\n    ifeq ($(HOST_ARCH64),x86)\n        HOST_TAG64 = $(HOST_TAG)\n    endif\nendif\n\n$(call ndk_log,HOST_TAG set to $(HOST_TAG))\n\n# Check for NDK-specific versions of our host tools\nHOST_TOOLS_ROOT := $(NDK_ROOT)/prebuilt/$(HOST_TAG64)\nHOST_PREBUILT := $(strip $(wildcard $(HOST_TOOLS_ROOT)/bin))\nHOST_AWK := $(strip $(NDK_HOST_AWK))\nHOST_MAKE := $(strip $(NDK_HOST_MAKE))\nHOST_PYTHON := $(strip $(NDK_HOST_PYTHON))\nifdef HOST_PREBUILT\n    $(call ndk_log,Host tools prebuilt directory: $(HOST_PREBUILT))\n    # The windows prebuilt binaries are for ndk-build.cmd\n    # On cygwin, we must use the Cygwin version of these tools instead.\n    ifneq ($(HOST_OS),cygwin)\n        ifndef HOST_AWK\n            HOST_AWK := $(wildcard $(HOST_PREBUILT)/awk$(HOST_EXEEXT))\n        endif\n        ifndef HOST_MAKE\n            HOST_MAKE := $(wildcard $(HOST_PREBUILT)/make$(HOST_EXEEXT))\n        endif\n       ifndef HOST_PYTHON\n            HOST_PYTHON := $(wildcard $(HOST_PREBUILT)/python$(HOST_EXEEXT))\n        endif\n    endif\nelse\n    $(call ndk_log,Host tools prebuilt directory not found, using system tools)\nendif\n\nHOST_ECHO := $(strip $(NDK_HOST_ECHO))\nifdef HOST_PREBUILT\n    ifndef HOST_ECHO\n        # Special case, on Cygwin, always use the host echo, not our prebuilt one\n        # which adds \\r\\n at the end of lines.\n        ifneq ($(HOST_OS),cygwin)\n            HOST_ECHO := $(strip $(wildcard $(HOST_PREBUILT)/echo$(HOST_EXEEXT)))\n        endif\n    endif\nendif\nifndef HOST_ECHO\n    HOST_ECHO := echo\nendif\n$(call ndk_log,Host 'echo' tool: $(HOST_ECHO))\n\n# Define HOST_ECHO_N to perform the equivalent of 'echo -n' on all platforms.\nifeq ($(HOST_OS),windows)\n  # Our custom toolbox echo binary supports -n.\n  HOST_ECHO_N := $(HOST_ECHO) -n\nelse\n  # On Posix, just use bare printf.\n  HOST_ECHO_N := printf %s\nendif\n$(call ndk_log,Host 'echo -n' tool: $(HOST_ECHO_N))\n\nHOST_CMP := $(strip $(NDK_HOST_CMP))\nifdef HOST_PREBUILT\n    ifndef HOST_CMP\n        HOST_CMP := $(strip $(wildcard $(HOST_PREBUILT)/cmp$(HOST_EXEEXT)))\n    endif\nendif\nifndef HOST_CMP\n    HOST_CMP := cmp\nendif\n$(call ndk_log,Host 'cmp' tool: $(HOST_CMP))\n\n#\n# Verify that the 'awk' tool has the features we need.\n# Both Nawk and Gawk do.\n#\nHOST_AWK := $(strip $(HOST_AWK))\nifndef HOST_AWK\n    HOST_AWK := awk\nendif\n$(call ndk_log,Host 'awk' tool: $(HOST_AWK))\n\n# Location of all awk scripts we use\nBUILD_AWK := $(NDK_ROOT)/build/awk\n\nAWK_TEST := $(shell $(HOST_AWK) -f $(BUILD_AWK)/check-awk.awk)\n$(call ndk_log,Host 'awk' test returned: $(AWK_TEST))\nifneq ($(AWK_TEST),Pass)\n    $(call __ndk_info,Host 'awk' tool is outdated. Please define NDK_HOST_AWK to point to Gawk or Nawk !)\n    $(call __ndk_error,Aborting.)\nendif\n\n#\n# On Cygwin/MSys, define the 'cygwin-to-host-path' function here depending on the\n# environment. The rules are the following:\n#\n# 1/ If NDK_USE_CYGPATH=1 and cygpath does exist in your path, cygwin-to-host-path\n#    calls \"cygpath -m\" for each host path.  Since invoking 'cygpath -m' from GNU\n#    Make for each source file is _very_ slow, this is only a backup plan in\n#    case our automatic substitution function (described below) doesn't work.\n#\n# 2/ Generate a Make function that performs the mapping from cygwin/msys to host\n#    paths through simple substitutions.  It's really a series of nested patsubst\n#    calls, that loo like:\n#\n#     cygwin-to-host-path = $(patsubst /cygdrive/c/%,c:/%,\\\n#                             $(patsusbt /cygdrive/d/%,d:/%, \\\n#                              $1)\n#    or in MSys:\n#     cygwin-to-host-path = $(patsubst /c/%,c:/%,\\\n#                             $(patsusbt /d/%,d:/%, \\\n#                              $1)\n#\n# except that the actual definition is built from the list of mounted\n# drives as reported by \"mount\" and deals with drive letter cases (i.e.\n# '/cygdrive/c' and '/cygdrive/C')\n#\nifeq ($(HOST_OS),cygwin)\n    CYGPATH := $(strip $(HOST_CYGPATH))\n    ifndef CYGPATH\n        $(call ndk_log, Probing for 'cygpath' program)\n        CYGPATH := $(strip $(shell which cygpath 2>/dev/null))\n        ifndef CYGPATH\n            $(call ndk_log, 'cygpath' was *not* found in your path)\n        else\n            $(call ndk_log, 'cygpath' found as: $(CYGPATH))\n        endif\n    endif\n\n    ifeq ($(NDK_USE_CYGPATH),1)\n        ifndef CYGPATH\n            $(call __ndk_info,No cygpath)\n            $(call __ndk_error,Aborting)\n        endif\n        $(call ndk_log, Forced usage of 'cygpath -m' through NDK_USE_CYGPATH=1)\n        cygwin-to-host-path = $(strip $(shell $(CYGPATH) -m $1))\n    else\n        # Call an awk script to generate a Makefile fragment used to define a function\n        WINDOWS_HOST_PATH_FRAGMENT := $(shell mount | tr '\\\\' '/' | $(HOST_AWK) -f $(BUILD_AWK)/gen-windows-host-path.awk)\n        ifeq ($(NDK_LOG),1)\n            $(info Using cygwin substitution rules:)\n            $(eval $(shell mount | tr '\\\\' '/' | $(HOST_AWK) -f $(BUILD_AWK)/gen-windows-host-path.awk -vVERBOSE=1))\n        endif\n        $(eval cygwin-to-host-path = $(WINDOWS_HOST_PATH_FRAGMENT))\n    endif\nendif # HOST_OS == cygwin\n\n# The location of the build system files\nBUILD_SYSTEM := $(NDK_ROOT)/build/core\n\n# Include default values\ninclude $(BUILD_SYSTEM)/defaults.mk\n\n# Include common definitions\ninclude $(BUILD_SYSTEM)/definitions.mk\n\n# ====================================================================\n#\n# Read all platform-specific configuration files.\n#\n# Each platform must be located in build/platforms/android-<apilevel>\n# where <apilevel> corresponds to an API level number, with:\n#   3 -> Android 1.5\n#   4 -> next platform release\n#\n# ====================================================================\n\n# The platform files were moved in the Android source tree from\n# $TOP/ndk/build/platforms to $TOP/development/ndk/platforms. However,\n# the official NDK release packages still place them under the old\n# location for now, so deal with this here\n#\nNDK_PLATFORMS_ROOT := $(strip $(NDK_PLATFORMS_ROOT))\nifndef NDK_PLATFORMS_ROOT\n    NDK_PLATFORMS_ROOT := $(strip $(wildcard $(NDK_ROOT)/platforms))\n    ifndef NDK_PLATFORMS_ROOT\n        NDK_PLATFORMS_ROOT := $(strip $(wildcard $(NDK_ROOT)/build/platforms))\n    endif\n\n    ifndef NDK_PLATFORMS_ROOT\n        $(call __ndk_info,Could not find platform files (headers and libraries))\n        $(if $(strip $(wildcard $(NDK_ROOT)/RELEASE.TXT)),\\\n            $(call __ndk_info,Please define NDK_PLATFORMS_ROOT to point to a valid directory.)\\\n        ,\\\n            $(call __ndk_info,Please run build/tools/gen-platforms.sh to build the corresponding directory.)\\\n        )\n        $(call __ndk_error,Aborting)\n    endif\n\n    $(call ndk_log,Found platform root directory: $(NDK_PLATFORMS_ROOT))\nendif\nifeq ($(strip $(wildcard $(NDK_PLATFORMS_ROOT)/android-*)),)\n    $(call __ndk_info,Your NDK_PLATFORMS_ROOT points to an invalid directory)\n    $(call __ndk_info,Current value: $(NDK_PLATFORMS_ROOT))\n    $(call __ndk_error,Aborting)\nendif\n\nNDK_ALL_PLATFORMS := $(strip $(notdir $(wildcard $(NDK_PLATFORMS_ROOT)/android-*)))\n$(call ndk_log,Found supported platforms: $(NDK_ALL_PLATFORMS))\n\n$(foreach _platform,$(NDK_ALL_PLATFORMS),\\\n  $(eval include $(BUILD_SYSTEM)/add-platform.mk)\\\n)\n\n# we're going to find the maximum platform number of the form android-<number>\n# ignore others, which could correspond to special and experimental cases\nNDK_PREVIEW_LEVEL := L\nNDK_ALL_PLATFORM_LEVELS := $(filter android-%,$(NDK_ALL_PLATFORMS))\nNDK_ALL_PLATFORM_LEVELS := $(patsubst android-%,%,$(NDK_ALL_PLATFORM_LEVELS))\nifneq (,$(filter $(NDK_PREVIEW_LEVEL),$(NDK_ALL_PLATFORM_LEVELS)))\n    $(call __ndk_info,Please remove stale preview platforms/android-$(NDK_PREVIEW_LEVEL))\n    $(call __ndk_info,API level android-L is renamed as android-21.)\n    $(call __ndk_error,Aborting)\nendif\n$(call ndk_log,Found stable platform levels: $(NDK_ALL_PLATFORM_LEVELS))\n\nNDK_MAX_PLATFORM_LEVEL := 3\n$(foreach level,$(NDK_ALL_PLATFORM_LEVELS),\\\n  $(eval NDK_MAX_PLATFORM_LEVEL := $$(call max,$$(NDK_MAX_PLATFORM_LEVEL),$$(level)))\\\n)\n\n$(call ndk_log,Found max platform level: $(NDK_MAX_PLATFORM_LEVEL))\n\n# Allow the user to point at an alternate location for the toolchains. This is\n# particularly helpful if we want to use prebuilt toolchains for building an NDK\n# module. Specifically, we use this to build libc++ using ndk-build instead of\n# the old build-cxx-stl.sh and maintaining two sets of build rules.\nNDK_TOOLCHAINS_ROOT := $(strip $(NDK_TOOLCHAINS_ROOT))\nifndef NDK_TOOLCHAINS_ROOT\n    NDK_TOOLCHAINS_ROOT := $(strip $(NDK_ROOT)/toolchains)\nendif\n\n# ====================================================================\n#\n# Read all toolchain-specific configuration files.\n#\n# Each toolchain must have a corresponding config.mk file located\n# in build/toolchains/<name>/ that will be included here.\n#\n# Each one of these files should define the following variables:\n#   TOOLCHAIN_NAME   toolchain name (e.g. arm-linux-androideabi-4.9)\n#   TOOLCHAIN_ABIS   list of target ABIs supported by the toolchain.\n#\n# Then, it should include $(ADD_TOOLCHAIN) which will perform\n# book-keeping for the build system.\n#\n# ====================================================================\n\n# the build script to include in each toolchain config.mk\nADD_TOOLCHAIN := $(BUILD_SYSTEM)/add-toolchain.mk\n\n# the list of known abis and archs\nNDK_KNOWN_DEVICE_ABI64S := arm64-v8a x86_64 mips64\nNDK_KNOWN_DEVICE_ABI32S := armeabi-v7a x86 mips\nNDK_KNOWN_DEVICE_ABIS := $(NDK_KNOWN_DEVICE_ABI64S) $(NDK_KNOWN_DEVICE_ABI32S)\nNDK_KNOWN_ABIS     := armeabi-v7a-hard $(NDK_KNOWN_DEVICE_ABIS)\nNDK_KNOWN_ABI32S   := armeabi-v7a-hard $(NDK_KNOWN_DEVICE_ABI32S)\nNDK_KNOWN_ARCHS    := arm x86 mips arm64 x86_64 mips64\n_archs := $(sort $(strip $(notdir $(wildcard $(NDK_PLATFORMS_ROOT)/android-*/arch-*))))\nNDK_FOUND_ARCHS    := $(_archs:arch-%=%)\n\n# the list of abis 'APP_ABI=all' is expanded to\nifneq (,$(filter yes all all32 all64,$(_NDK_TESTING_ALL_)))\nNDK_APP_ABI_ALL_EXPANDED := $(NDK_KNOWN_ABIS)\nNDK_APP_ABI_ALL32_EXPANDED := $(NDK_KNOWN_ABI32S)\nelse\nNDK_APP_ABI_ALL_EXPANDED := $(NDK_KNOWN_DEVICE_ABIS)\nNDK_APP_ABI_ALL32_EXPANDED := $(NDK_KNOWN_DEVICE_ABI32S)\nendif\nNDK_APP_ABI_ALL64_EXPANDED := $(NDK_KNOWN_DEVICE_ABI64S)\n\n# For testing purpose\nifeq ($(_NDK_TESTING_ALL_),all32)\nNDK_APP_ABI_ALL_EXPANDED := $(NDK_APP_ABI_ALL32_EXPANDED)\nelse\nifeq ($(_NDK_TESTING_ALL_),all64)\nNDK_APP_ABI_ALL_EXPANDED := $(NDK_APP_ABI_ALL64_EXPANDED)\nendif\nendif\n\n# The first API level ndk-build enforces -fPIE for executable\nNDK_FIRST_PIE_PLATFORM_LEVEL := 16\n\n# the list of all toolchains in this NDK\nNDK_ALL_TOOLCHAINS :=\nNDK_ALL_ABIS       :=\nNDK_ALL_ARCHS      :=\n\nTOOLCHAIN_CONFIGS := $(wildcard $(NDK_ROOT)/build/core/toolchains/*/config.mk)\n$(foreach _config_mk,$(TOOLCHAIN_CONFIGS),\\\n  $(eval include $(BUILD_SYSTEM)/add-toolchain.mk)\\\n)\n\nNDK_ALL_TOOLCHAINS   := $(sort $(NDK_ALL_TOOLCHAINS))\nNDK_ALL_ABIS         := $(sort $(NDK_ALL_ABIS))\nNDK_ALL_ARCHS        := $(sort $(NDK_ALL_ARCHS))\n\nNDK_DEFAULT_ABIS := all\n\n# Check that each ABI has a single architecture definition\n$(foreach _abi,$(strip $(NDK_ALL_ABIS)),\\\n  $(if $(filter-out 1,$(words $(NDK_ABI.$(_abi).arch))),\\\n    $(call __ndk_info,INTERNAL ERROR: The $(_abi) ABI should have exactly one architecture definitions. Found: '$(NDK_ABI.$(_abi).arch)')\\\n    $(call __ndk_error,Aborting...)\\\n  )\\\n)\n\n# Allow the user to define NDK_TOOLCHAIN to a custom toolchain name.\n# This is normally used when the NDK release comes with several toolchains\n# for the same architecture (generally for backwards-compatibility).\n#\nNDK_TOOLCHAIN := $(strip $(NDK_TOOLCHAIN))\nifdef NDK_TOOLCHAIN\n    # check that the toolchain name is supported\n    $(if $(filter-out $(NDK_ALL_TOOLCHAINS),$(NDK_TOOLCHAIN)),\\\n      $(call __ndk_info,NDK_TOOLCHAIN is defined to the unsupported value $(NDK_TOOLCHAIN)) \\\n      $(call __ndk_info,Please use one of the following values: $(NDK_ALL_TOOLCHAINS))\\\n      $(call __ndk_error,Aborting)\\\n    ,)\n    $(call ndk_log, Using specific toolchain $(NDK_TOOLCHAIN))\nendif\n\n# Allow the user to define NDK_TOOLCHAIN_VERSION to override the toolchain\n# version number. Unlike NDK_TOOLCHAIN, this only changes the suffix of\n# the toolchain path we're using.\n#\n# For example, if GCC 4.8 is the default, defining NDK_TOOLCHAIN_VERSION=4.9\n# will ensure that ndk-build uses the following toolchains, depending on\n# the target architecture:\n#\n#    arm -> arm-linux-androideabi-4.9\n#    x86 -> x86-android-linux-4.9\n#    mips -> mipsel-linux-android-4.9\n#\n# This is used in setup-toolchain.mk\n#\nNDK_TOOLCHAIN_VERSION := $(strip $(NDK_TOOLCHAIN_VERSION))\n\n$(call ndk_log, This NDK supports the following target architectures and ABIS:)\n$(foreach arch,$(NDK_ALL_ARCHS),\\\n    $(call ndk_log, $(space)$(space)$(arch): $(NDK_ARCH.$(arch).abis))\\\n)\n$(call ndk_log, This NDK supports the following toolchains and target ABIs:)\n$(foreach tc,$(NDK_ALL_TOOLCHAINS),\\\n    $(call ndk_log, $(space)$(space)$(tc):  $(NDK_TOOLCHAIN.$(tc).abis))\\\n)\n"
  },
  {
    "path": "build/core/main.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# ====================================================================\n#\n# Define the main configuration variables, and read the host-specific\n# configuration file that is normally generated by build/host-setup.sh\n#\n# ====================================================================\n\n# Detect the NDK installation path by processing this Makefile's location.\n# This assumes we are located under $NDK_ROOT/build/core/main.mk\n#\nNDK_ROOT := $(lastword $(MAKEFILE_LIST))\nNDK_ROOT := $(strip $(NDK_ROOT:%build/core/main.mk=%))\nifeq ($(NDK_ROOT),)\n    # for the case when we're invoked from the NDK install path\n    NDK_ROOT := .\nelse\n    # get rid of trailing slash\n    NDK_ROOT := $(NDK_ROOT:%/=%)\nendif\nifeq ($(NDK_LOG),1)\n    $(info Android NDK: NDK installation path auto-detected: '$(NDK_ROOT)')\nendif\n\ninclude $(NDK_ROOT)/build/core/init.mk\n\n# ====================================================================\n#\n# Read all application configuration files\n#\n# Each 'application' must have a corresponding Application.mk file\n# located in apps/<name> where <name> is a liberal name that doesn't\n# contain any space in it, used to uniquely identify the\n#\n# See docs/ANDROID-MK.TXT for their specification.\n#\n# ====================================================================\n\nNDK_ALL_APPS :=\nNDK_APPS_ROOT := $(NDK_ROOT)/apps\n\n# Get the list of apps listed under apps/*\nNDK_APPLICATIONS := $(wildcard $(NDK_APPS_ROOT)/*)\nNDK_ALL_APPS     := $(NDK_APPLICATIONS:$(NDK_APPS_ROOT)/%=%)\n\n# Check that APP is not empty\nAPP := $(strip $(APP))\nifndef APP\n  $(call __ndk_info,\\\n    The APP variable is undefined or empty.)\n  $(call __ndk_info,\\\n    Please define it to one of: $(NDK_ALL_APPS))\n  $(call __ndk_info,\\\n    You can also add new applications by writing an Application.mk file.)\n  $(call __ndk_info,\\\n    See docs/APPLICATION-MK.TXT for details.)\n  $(call __ndk_error, Aborting)\nendif\n\n# Check that all apps listed in APP do exist\n_bad_apps := $(strip $(filter-out $(NDK_ALL_APPS),$(APP)))\nifdef _bad_apps\n  $(call __ndk_info,\\\n    APP variable defined to unknown applications: $(_bad_apps))\n  $(call __ndk_info,\\\n    You might want to use one of the following: $(NDK_ALL_APPS))\n  $(call __ndk_error, Aborting)\nendif\n\n# Check that all apps listed in APP have an Application.mk\n\n$(foreach _app,$(APP),\\\n  $(eval _application_mk := $(strip $(wildcard $(NDK_ROOT)/apps/$(_app)/Application.mk))) \\\n  $(call ndk_log,Parsing $(_application_mk))\\\n  $(if $(_application_mk),\\\n    $(eval include $(BUILD_SYSTEM)/add-application.mk)\\\n  ,\\\n    $(call __ndk_info,\\\n      Missing file: apps/$(_app)/Application.mk !)\\\n    $(call __ndk_error, Aborting)\\\n  )\\\n)\n\n# clean up environment, just to be safe\n$(call clear-vars, $(NDK_APP_VARS))\n\nifeq ($(strip $(NDK_ALL_APPS)),)\n  $(call __ndk_info,\\\n    The NDK could not find a proper application description under apps/*/Application.mk)\n  $(call __ndk_info,\\\n    Please follow the instructions in docs/NDK-APPS.TXT to write one.)\n  $(call __ndk_error, Aborting)\nendif\n\n# now check that APP doesn't contain an unknown app name\n# if it does, we ignore them if there is at least one known\n# app name in the list. Otherwise, abort with an error message\n#\n_unknown_apps := $(filter-out $(NDK_ALL_APPS),$(APP))\n_known_apps   := $(filter     $(NDK_ALL_APPS),$(APP))\n\nNDK_APPS := $(APP)\n\n$(if $(_unknown_apps),\\\n  $(if $(_known_apps),\\\n    $(call __ndk_info,WARNING:\\\n        Removing unknown names from APP variable: $(_unknown_apps))\\\n    $(eval NDK_APPS := $(_known_apps))\\\n   ,\\\n    $(call __ndk_info,\\\n        The APP variable contains unknown app names: $(_unknown_apps))\\\n    $(call __ndk_info,\\\n        Please use one of: $(NDK_ALL_APPS))\\\n    $(call __ndk_error, Aborting)\\\n  )\\\n)\n\n$(call __ndk_info,Building for application '$(NDK_APPS)')\n\n# Where all app-specific generated files will be stored\nNDK_APP_OUT := $(NDK_ROOT)/out/apps\n\ninclude $(BUILD_SYSTEM)/setup-imports.mk\ninclude $(BUILD_SYSTEM)/build-all.mk\n"
  },
  {
    "path": "build/core/prebuilt-library.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from prebuilt-shared-library.mk or\n# prebuilt-static-library.mk to declare prebuilt library binaries.\n#\n\n$(call assert-defined, LOCAL_BUILD_SCRIPT LOCAL_MAKEFILE LOCAL_PREBUILT_PREFIX LOCAL_PREBUILT_SUFFIX)\n\n$(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))\n$(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))\n$(call check-LOCAL_MODULE_FILENAME)\n\n# Check that LOCAL_SRC_FILES contains only the path to one library\nifneq ($(words $(LOCAL_SRC_FILES)),1)\n$(call __ndk_info,ERROR:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): The LOCAL_SRC_FILES for a prebuilt library should only contain one item))\n$(call __ndk_error,Aborting)\nendif\n\nbad_prebuilts := $(filter-out %$(LOCAL_PREBUILT_SUFFIX),$(LOCAL_SRC_FILES))\nifdef bad_prebuilts\n$(call __ndk_info,ERROR:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_SRC_FILES should point to a file ending with \"$(LOCAL_PREBUILT_SUFFIX)\")\n$(call __ndk_info,The following file is unsupported: $(bad_prebuilts))\n$(call __ndk_error,Aborting)\nendif\n\nprebuilt_path := $(call local-prebuilt-path,$(LOCAL_SRC_FILES))\nprebuilt := $(strip $(wildcard $(prebuilt_path)))\n\nifndef prebuilt\n$(call __ndk_info,ERROR:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_SRC_FILES points to a missing file)\n$(call __ndk_info,Check that $(prebuilt_path) exists, or that its path is correct)\n$(call __ndk_error,Aborting)\nendif\n\n# If LOCAL_MODULE_FILENAME is defined, it will be used to name the file\n# in the TARGET_OUT directory, and then the installation one. Note that\n# it shouldn't have an .a or .so extension nor contain directory separators.\n#\n# If the variable is not defined, we determine its value from LOCAL_SRC_FILES\n#\nLOCAL_MODULE_FILENAME := $(strip $(LOCAL_MODULE_FILENAME))\nifndef LOCAL_MODULE_FILENAME\n    LOCAL_MODULE_FILENAME := $(notdir $(LOCAL_SRC_FILES))\n    LOCAL_MODULE_FILENAME := $(LOCAL_MODULE_FILENAME:%$(LOCAL_PREBUILT_SUFFIX)=%)\nendif\n$(eval $(call ev-check-module-filename))\n\n# If LOCAL_BUILT_MODULE is not defined, then ensure that the prebuilt is\n# copied to TARGET_OUT during the build.\nLOCAL_BUILT_MODULE := $(strip $(LOCAL_BUILT_MODULE))\nifndef LOCAL_BUILT_MODULE\n  LOCAL_BUILT_MODULE := $(TARGET_OUT)/$(LOCAL_MODULE_FILENAME)$(LOCAL_PREBUILT_SUFFIX)\n  LOCAL_OBJECTS      := $(prebuilt)\n\n  $(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)\nendif\n\nLOCAL_OBJS_DIR  := $(TARGET_OBJS)/$(LOCAL_MODULE)\nLOCAL_SRC_FILES :=\n\ninclude $(BUILD_SYSTEM)/build-module.mk\n"
  },
  {
    "path": "build/core/prebuilt-shared-library.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from Android.mk files to build a target-specific\n# shared library\n#\n\nLOCAL_BUILD_SCRIPT := PREBUILT_SHARED_LIBRARY\nLOCAL_MODULE_CLASS := PREBUILT_SHARED_LIBRARY\nLOCAL_MAKEFILE     := $(local-makefile)\n\nLOCAL_PREBUILT_PREFIX := lib\nLOCAL_PREBUILT_SUFFIX := $(TARGET_SONAME_EXTENSION)\n\ninclude $(BUILD_SYSTEM)/prebuilt-library.mk\n"
  },
  {
    "path": "build/core/prebuilt-static-library.mk",
    "content": "# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included from Android.mk files to build a target-specific\n# shared library\n#\n\nLOCAL_BUILD_SCRIPT := PREBUILT_STATIC_LIBRARY\nLOCAL_MODULE_CLASS := PREBUILT_STATIC_LIBRARY\nLOCAL_MAKEFILE     := $(local-makefile)\n\nLOCAL_PREBUILT_PREFIX := lib\nLOCAL_PREBUILT_SUFFIX := $(TARGET_LIB_EXTENSION)\n\n# Prebuilt static libraries don't need to be copied to TARGET_OUT\n# to facilitate debugging, so use the prebuilt version directly\n# at link time.\nLOCAL_BUILT_MODULE := $(call local-prebuilt-path,$(LOCAL_SRC_FILES))\nLOCAL_BUILT_MODULE_NOT_COPIED := true\n\ninclude $(BUILD_SYSTEM)/prebuilt-library.mk\n"
  },
  {
    "path": "build/core/setup-abi.mk",
    "content": "# Copyright (C) 2009, 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included multiple times by build/core/setup-app.mk\n#\n\n$(call ndk_log,Building application '$(NDK_APP_NAME)' for ABI '$(TARGET_ARCH_ABI)')\n\nTARGET_ARCH := $(strip $(NDK_ABI.$(TARGET_ARCH_ABI).arch))\nifndef TARGET_ARCH\n    $(call __ndk_info,ERROR: The $(TARGET_ARCH_ABI) ABI has no associated architecture!)\n    $(call __ndk_error,Aborting...)\nendif\n\nTARGET_OUT := $(NDK_APP_OUT)/$(_app)/$(TARGET_ARCH_ABI)\n\n# For x86 and mips: the minimal platform level is android-9\nTARGET_PLATFORM_SAVED := $(TARGET_PLATFORM)\nifneq ($(filter %x86 %mips,$(TARGET_ARCH_ABI)),)\n$(foreach _plat,3 4 5 8,\\\n    $(eval TARGET_PLATFORM := $$(subst android-$(_plat),android-9,$$(TARGET_PLATFORM)))\\\n)\nendif\n\n# For 64-bit ABIs: the minimal platform level is android-21\nifneq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),)\n$(foreach _plat,3 4 5 8 9 10 11 12 13 14 15 16 17 18 19 20,\\\n    $(eval TARGET_PLATFORM := $$(subst android-$(_plat),android-21,$$(TARGET_PLATFORM)))\\\n)\nendif\n\nTARGET_PLATFORM_LEVEL := $(strip $(subst android-,,$(TARGET_PLATFORM)))\nifneq (,$(call gte,$(TARGET_PLATFORM_LEVEL),$(NDK_FIRST_PIE_PLATFORM_LEVEL)))\n    TARGET_PIE := true\n    $(call ndk_log,  Enabling -fPIE for TARGET_PLATFORM $(TARGET_PLATFORM))\nelse\n    TARGET_PIE := false\nendif\n\n# Separate the debug and release objects. This prevents rebuilding\n# everything when you switch between these two modes. For projects\n# with lots of C++ sources, this can be a considerable time saver.\nifeq ($(NDK_APP_OPTIM),debug)\nTARGET_OBJS := $(TARGET_OUT)/objs-debug\nelse\nTARGET_OBJS := $(TARGET_OUT)/objs\nendif\n\nTARGET_GDB_SETUP := $(TARGET_OUT)/setup.gdb\n\n# RS triple\nifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)\n  RS_TRIPLE := armv7-none-linux-gnueabi\nendif\nifeq ($(TARGET_ARCH_ABI),mips)\n  RS_TRIPLE := mipsel-unknown-linux\nendif\nifeq ($(TARGET_ARCH_ABI),x86)\n  RS_TRIPLE := i686-unknown-linux\nendif\n\n\ninclude $(BUILD_SYSTEM)/setup-toolchain.mk\n\n# Restore TARGET_PLATFORM, see above.\nTARGET_PLATFORM := $(TARGET_PLATFORM_SAVED)\n"
  },
  {
    "path": "build/core/setup-app.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included repeatedly from build/core/main.mk\n# and is used to prepare for app-specific build rules.\n#\n\n$(call assert-defined,_app)\n\n_map := NDK_APP.$(_app)\n\n# ok, let's parse all Android.mk source files in order to build\n# the modules for this app.\n#\n\n# Restore the APP_XXX variables just for this pass as NDK_APP_XXX\n#\nNDK_APP_NAME           := $(_app)\nNDK_APP_APPLICATION_MK := $(call get,$(_map),Application.mk)\n\n$(foreach __name,$(NDK_APP_VARS),\\\n  $(eval NDK_$(__name) := $(call get,$(_map),$(__name)))\\\n)\n\n# make the application depend on the modules it requires\n.PHONY: ndk-app-$(_app)\nndk-app-$(_app): $(NDK_APP_MODULES)\nall: ndk-app-$(_app)\n\n# which platform/abi/toolchain are we going to use?\nTARGET_PLATFORM := $(call get,$(_map),APP_PLATFORM)\nifeq ($(TARGET_PLATFORM),android-L)\n$(call __ndk_warning,WARNING: android-L is renamed as android-21)\nTARGET_PLATFORM := android-21\nendif\n\n# The ABI(s) to use\nNDK_APP_ABI := $(subst $(comma),$(space),$(strip $(NDK_APP_ABI)))\nifndef NDK_APP_ABI\n    NDK_APP_ABI := $(NDK_DEFAULT_ABIS)\nendif\n\nNDK_ABI_FILTER := $(strip $(NDK_ABI_FILTER))\nifdef NDK_ABI_FILTER\n    $(eval $(NDK_ABI_FILTER))\nendif\n\n# If APP_ABI is 'all', then set it to all supported ABIs\n# Otherwise, check that we don't have an invalid value here.\n#\nifeq ($(NDK_APP_ABI),all)\n    NDK_APP_ABI := $(NDK_APP_ABI_ALL_EXPANDED)\n    _abis_without_toolchain := $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI))\n    ifneq (,$(_abis_without_toolchain))\n        $(call ndk_log,Remove the following abis expanded from 'all' due to no toolchain: $(_abis_without_toolchain))\n        NDK_APP_ABI := $(filter-out $(_abis_without_toolchain),$(NDK_APP_ABI))\n    endif\nelse\nifeq ($(NDK_APP_ABI),all32)\n    NDK_APP_ABI := $(NDK_APP_ABI_ALL32_EXPANDED)\n    _abis_without_toolchain := $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI))\n    ifneq (,$(_abis_without_toolchain))\n        $(call ndk_log,Remove the following abis expanded from 'all32' due to no toolchain: $(_abis_without_toolchain))\n        NDK_APP_ABI := $(filter-out $(_abis_without_toolchain),$(NDK_APP_ABI))\n    endif\nelse\nifeq ($(NDK_APP_ABI),all64)\n    NDK_APP_ABI := $(NDK_APP_ABI_ALL64_EXPANDED)\n    _abis_without_toolchain := $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI))\n    ifneq (,$(_abis_without_toolchain))\n        $(call ndk_log,Remove the following abis expanded from 'all64' due to no toolchain: $(_abis_without_toolchain))\n        NDK_APP_ABI := $(filter-out $(_abis_without_toolchain),$(NDK_APP_ABI))\n    endif\nelse\n    # Plug in the unknown\n    _unknown_abis := $(strip $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI)))\n    ifneq ($(_unknown_abis),)\n        ifeq (1,$(words $(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS))))\n            ifneq ($(filter %bcall,$(_unknown_abis)),)\n                 _unknown_abis_prefix := $(_unknown_abis:%bcall=%)\n                 NDK_APP_ABI := $(NDK_KNOWN_ABI32S:%=$(_unknown_abis_prefix)bc%)\n            else\n                ifneq ($(filter %all,$(_unknown_abis)),)\n                    _unknown_abis_prefix := $(_unknown_abis:%all=%)\n                    NDK_APP_ABI := $(NDK_KNOWN_ABIS:%=$(_unknown_abis_prefix)%)\n                else\n                    $(foreach _abi,$(NDK_KNOWN_ABIS),\\\n                        $(eval _unknown_abis := $(subst $(_abi),,$(subst bc$(_abi),,$(_unknown_abis)))) \\\n                    )\n                    _unknown_abis_prefix := $(sort $(_unknown_abis))\n                endif\n            endif\n            ifeq (1,$(words $(_unknown_abis_prefix)))\n                NDK_APP_ABI := $(subst $(_unknown_abis_prefix),$(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS)),$(NDK_APP_ABI))\n            endif\n        endif\n\tTARGET_PLATFORM := android-21\n    endif\n    # check the target ABIs for this application\n    _bad_abis = $(strip $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI)))\n    ifneq ($(_bad_abis),)\n        $(call __ndk_info,NDK Application '$(_app)' targets unknown ABI(s): $(_bad_abis))\n        $(call __ndk_info,Please fix the APP_ABI definition in $(NDK_APP_APPLICATION_MK))\n        $(call __ndk_error,Aborting)\n    endif\nendif\nendif\nendif\n\nifndef NDK_APP_CXX_STANDARD\n    NDK_APP_CXX_STANDARD := $(DEFAULT_CXX_STANDARD)\nelse\n    NDK_APP_CXX_STANDARD := $(strip $(NDK_APP_CXX_STANDARD))\n    ifneq (,$(filter-out c++98 gnu++98 c++03 gnu++03 c++11 gnu++11,$(NDK_APP_CXX_STANDARD)))\n        $(call __ndk_info,Wrong value of APP_CXX_STANDARD: $(NDK_APP_CXX_STANDARD))\n        $(call __ndk_info,The only allowed values are: c++98 gnu++98 c++03 gnu++03 c++11 gnu++11)\n        $(call __ndk_error,Aborting)\n    endif\nendif\nTARGET_CXX_STANDARD := $(NDK_APP_CXX_STANDARD)\n\n# Clear all installed binaries for this application\n# This ensures that if the build fails, you're not going to mistakenly\n# package an obsolete version of it. Or if you change the ABIs you're targetting,\n# you're not going to leave a stale shared library for the old one.\n#\nifeq ($(NDK_APP.$(_app).cleaned_binaries),)\n    NDK_APP.$(_app).cleaned_binaries := true\n    clean-installed-binaries::\n\t$(hide) $(call host-rm,$(NDK_ALL_ABIS:%=$(NDK_APP_LIBS_OUT)/%/lib*$(TARGET_SONAME_EXTENSION)))\n\t$(hide) $(call host-rm,$(NDK_ALL_ABIS:%=$(NDK_APP_LIBS_OUT)/%/gdbserver))\n\t$(hide) $(call host-rm,$(NDK_ALL_ABIS:%=$(NDK_APP_LIBS_OUT)/%/gdb.setup))\nendif\n\n# Renderscript\n\nRENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,renderscript)\nRENDERSCRIPT_TOOLCHAIN_PREFIX := $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/bin/\nRENDERSCRIPT_TOOLCHAIN_HEADER := $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/lib/clang/3.5/include\n\n# Each ABI\n$(foreach _abi,$(NDK_APP_ABI),\\\n    $(eval TARGET_ARCH_ABI := $(_abi))\\\n    $(eval include $(BUILD_SYSTEM)/setup-abi.mk) \\\n)\n"
  },
  {
    "path": "build/core/setup-imports.mk",
    "content": "# Copyright (C) 2009-2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# ====================================================================\n#\n# Check the import path\n#\n# ====================================================================\n\nNDK_MODULE_PATH := $(strip $(NDK_MODULE_PATH))\nifdef NDK_MODULE_PATH\n  ifneq ($(words $(NDK_MODULE_PATH)),1)\n    $(call __ndk_info,ERROR: You NDK_MODULE_PATH variable contains spaces)\n    $(call __ndk_info,Please fix the error and start again.)\n    $(call __ndk_error,Aborting)\n  endif\nendif\n\n$(call import-init)\n$(foreach __path,$(subst $(HOST_DIRSEP),$(space),$(NDK_MODULE_PATH)),\\\n  $(call import-add-path,$(__path))\\\n)\nifneq (,$(strip $(NDK_PACKAGES_ROOT)))\n$(call import-add-path-optional,$(strip $(NDK_PACKAGES_ROOT)))\nendif\n$(call import-add-path-optional,$(NDK_ROOT)/sources)\n$(call import-add-path-optional,$(NDK_ROOT)/packages)\n$(call import-add-path-optional,$(NDK_ROOT)/../development/ndk/sources)\n"
  },
  {
    "path": "build/core/setup-toolchain.mk",
    "content": "# Copyright (C) 2009, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# this file is included repeatedly from build/core/setup-abi.mk and is used\n# to setup the target toolchain for a given platform/abi combination.\n#\n\n$(call assert-defined,TARGET_PLATFORM TARGET_ARCH TARGET_ARCH_ABI)\n$(call assert-defined,NDK_APPS NDK_APP_STL NDK_APP_OBJC)\n\nDEFAULT_LLVM_VERSION := 3.7\nDEFAULT_GCC_VERSION := 5\n\nifeq (,$(strip $(DEFAULT_LLVM_VERSION)))\n$(error Can not detect default LLVM version!)\nendif\n\nifeq (,$(strip $(DEFAULT_GCC_VERSION)))\n$(error Can not detect default GCC version!)\nendif\n\n# Check that we have a toolchain that supports the current ABI.\n# NOTE: If NDK_TOOLCHAIN is defined, we're going to use it.\n#\nifndef NDK_TOOLCHAIN\n    # This is a sorted list of toolchains that support the given ABI. For older\n    # NDKs this was a bit more complicated, but now we just have the GCC and the\n    # Clang toolchains with GCC being first (named \"*-4.9\", whereas clang is\n    # \"*-clang\").\n    TARGET_TOOLCHAIN_LIST := $(strip $(sort $(NDK_ABI.$(TARGET_ARCH_ABI).toolchains)))\n\n    # Filter out the Clang toolchain, so that we can keep GCC as the default\n    # toolchain.\n    $(foreach __ndk_target_toolchain,$(TARGET_TOOLCHAIN_LIST),\\\n        $(if $(findstring clang,$(__ndk_target_toolchain)),\\\n            $(eval TARGET_TOOLCHAIN_LIST := \\\n                $(filter-out $(__ndk_target_toolchain),$(TARGET_TOOLCHAIN_LIST)))))\n\n    ifndef TARGET_TOOLCHAIN_LIST\n        $(call __ndk_info,There is no toolchain that supports the $(TARGET_ARCH_ABI) ABI.)\n        $(call __ndk_info,Please modify the APP_ABI definition in $(NDK_APP_APPLICATION_MK) to use)\n        $(call __ndk_info,a set of the following values: $(NDK_ALL_ABIS))\n        $(call __ndk_error,Aborting)\n    endif\n\n    TARGET_TOOLCHAIN := $(filter %-$(DEFAULT_GCC_VERSION),$(TARGET_TOOLCHAIN_LIST))\n\n    # If NDK_TOOLCHAIN_VERSION is defined, we replace the toolchain version\n    # suffix with it.\n    ifdef NDK_TOOLCHAIN_VERSION\n        # Replace \"gcc\" with default gcc version\n        ifeq ($(NDK_TOOLCHAIN_VERSION),gcc)\n            override NDK_TOOLCHAIN_VERSION := gcc$(DEFAULT_GCC_VERSION)\n        endif\n        # Replace \"clang\" with default clang verion\n        ifeq ($(NDK_TOOLCHAIN_VERSION),clang)\n            override NDK_TOOLCHAIN_VERSION := clang$(DEFAULT_LLVM_VERSION)\n        endif\n        # Replace \"gcc-X\" and \"gccX\" with just \"X\"\n        override NDK_TOOLCHAIN_VERSION := $(patsubst gcc-%,%,$(NDK_TOOLCHAIN_VERSION))\n        override NDK_TOOLCHAIN_VERSION := $(patsubst gcc%,%,$(NDK_TOOLCHAIN_VERSION))\n        # We assume the toolchain name uses dashes (-) as separators and doesn't\n        # contain any space. The following is a bit subtle, but essentially\n        # does the following:\n        #\n        #   1/ Use 'subst' to convert dashes into spaces, this generates a list\n        #   2/ Use 'chop' to remove the last element of the list\n        #   3/ Use 'subst' again to convert the spaces back into dashes\n        #\n        # So it TARGET_TOOLCHAIN is 'foo-bar-zoo-xxx', then\n        # TARGET_TOOLCHAIN_BASE will be 'foo-bar-zoo'\n        #\n        TARGET_TOOLCHAIN_BASE := $(subst $(space),-,$(call chop,$(subst -,$(space),$(TARGET_TOOLCHAIN))))\n        # if TARGET_TOOLCHAIN_BASE is llvm, remove clang from NDK_TOOLCHAIN_VERSION\n        VERSION := $(NDK_TOOLCHAIN_VERSION)\n        TARGET_TOOLCHAIN := $(TARGET_TOOLCHAIN_BASE)-$(VERSION)\n        $(call ndk_log,Using target toolchain '$(TARGET_TOOLCHAIN)' for '$(TARGET_ARCH_ABI)' ABI (through NDK_TOOLCHAIN_VERSION))\n    else\n        $(call ndk_log,Using target toolchain '$(TARGET_TOOLCHAIN)' for '$(TARGET_ARCH_ABI)' ABI)\n    endif\nelse # NDK_TOOLCHAIN is not empty\n    TARGET_TOOLCHAIN_LIST := $(strip $(filter $(NDK_TOOLCHAIN),$(NDK_ABI.$(TARGET_ARCH_ABI).toolchains)))\n    ifndef TARGET_TOOLCHAIN_LIST\n        $(call __ndk_info,The selected toolchain ($(NDK_TOOLCHAIN)) does not support the $(TARGET_ARCH_ABI) ABI.)\n        $(call __ndk_info,Please modify the APP_ABI definition in $(NDK_APP_APPLICATION_MK) to use)\n        $(call __ndk_info,a set of the following values: $(NDK_TOOLCHAIN.$(NDK_TOOLCHAIN).abis))\n        $(call __ndk_info,Or change your NDK_TOOLCHAIN definition.)\n        $(call __ndk_error,Aborting)\n    endif\n    TARGET_TOOLCHAIN := $(NDK_TOOLCHAIN)\nendif # NDK_TOOLCHAIN is not empty\n\nTARGET_ABI := $(TARGET_PLATFORM)-$(TARGET_ARCH_ABI)\n\n# setup sysroot variable.\n# SYSROOT_INC points to a directory that contains all public header\n# files for a given platform, and\n# SYSROOT_LIB points to libraries and object files used for linking\n# the generated target files properly.\n#\nSYSROOT_INC := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-$(TARGET_ARCH)\nSYSROOT_LINK := $(SYSROOT_INC)\n\nTARGET_PREBUILT_SHARED_LIBRARIES :=\n\n# Define default values for TOOLCHAIN_NAME, this can be overriden in\n# the setup file.\nTOOLCHAIN_NAME   := $(TARGET_TOOLCHAIN)\nTOOLCHAIN_VERSION := $(call last,$(subst -,$(space),$(TARGET_TOOLCHAIN)))\n\n# Define the root path where toolchain prebuilts are stored\nTOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,$(TOOLCHAIN_NAME))\n\n# Do the same for TOOLCHAIN_PREFIX. Note that we must chop the version\n# number from the toolchain name, e.g. arm-eabi-4.4.0 -> path/bin/arm-eabi-\n# to do that, we split at dashes, remove the last element, then merge the\n# result. Finally, add the complete path prefix.\n#\nTOOLCHAIN_PREFIX := $(call merge,-,$(call chop,$(call split,-,$(TOOLCHAIN_NAME))))-\nTOOLCHAIN_PREFIX := $(TOOLCHAIN_PREBUILT_ROOT)/bin/$(TOOLCHAIN_PREFIX)\n\n# We expect the gdbserver binary for this toolchain to be located at its root.\nTARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-$(TARGET_ARCH)/gdbserver/gdbserver\n\n# compute NDK_APP_DST_DIR as the destination directory for the generated files\nNDK_APP_DST_DIR := $(NDK_APP_LIBS_OUT)/$(TARGET_ARCH_ABI)\n# install armeabi-v7a-hard to lib/armeabi-v7a, unless under testing where env. var. _NDK_TESTING_ALL_\n# is set to one of yes, all, all32, or all64\nifeq (,$(filter yes all all32 all64,$(_NDK_TESTING_ALL_)))\nifeq ($(TARGET_ARCH_ABI),armeabi-v7a-hard)\nNDK_APP_DST_DIR := $(NDK_APP_LIBS_OUT)/armeabi-v7a\nendif\nendif\n\n# Default build commands, can be overriden by the toolchain's setup script\ninclude $(BUILD_SYSTEM)/default-build-commands.mk\n\n# now call the toolchain-specific setup script\ninclude $(NDK_TOOLCHAIN.$(TARGET_TOOLCHAIN).setup)\n\nclean-installed-binaries::\n\n# Ensure that for debuggable applications, gdbserver will be copied to\n# the proper location\n\nNDK_APP_GDBSERVER := $(NDK_APP_DST_DIR)/gdbserver\nNDK_APP_GDBSETUP := $(NDK_APP_DST_DIR)/gdb.setup\n\nifeq ($(NDK_APP_DEBUGGABLE),true)\nifeq ($(TARGET_SONAME_EXTENSION),.so)\n\ninstalled_modules: $(NDK_APP_GDBSERVER)\n\n$(NDK_APP_GDBSERVER): PRIVATE_ABI     := $(TARGET_ARCH_ABI)\n$(NDK_APP_GDBSERVER): PRIVATE_NAME    := $(TOOLCHAIN_NAME)\n$(NDK_APP_GDBSERVER): PRIVATE_SRC     := $(TARGET_GDBSERVER)\n$(NDK_APP_GDBSERVER): PRIVATE_DST     := $(NDK_APP_GDBSERVER)\n\n$(call generate-file-dir,$(NDK_APP_GDBSERVER))\n\n$(NDK_APP_GDBSERVER): clean-installed-binaries\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Gdbserver) \"[$(PRIVATE_NAME)] $(call pretty-dir,$(PRIVATE_DST))\"\n\t$(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))\nendif\n\n# Install gdb.setup for both .so and .bc projects\nifneq (,$(filter $(TARGET_SONAME_EXTENSION),.so .bc))\ninstalled_modules: $(NDK_APP_GDBSETUP)\n\n$(NDK_APP_GDBSETUP): PRIVATE_ABI := $(TARGET_ARCH_ABI)\n$(NDK_APP_GDBSETUP): PRIVATE_DST := $(NDK_APP_GDBSETUP)\n$(NDK_APP_GDBSETUP): PRIVATE_SOLIB_PATH := $(TARGET_OUT)\n$(NDK_APP_GDBSETUP): PRIVATE_SRC_DIRS := $(SYSROOT_INC)/usr/include\n\n\n$(NDK_APP_GDBSETUP):\n\t$(call host-echo-build-step,$(PRIVATE_ABI),Gdbsetup) \"$(call pretty-dir,$(PRIVATE_DST))\"\n\t$(hide) $(HOST_ECHO) \"set solib-search-path $(call host-path,$(PRIVATE_SOLIB_PATH))\" > $(PRIVATE_DST)\n\t$(hide) $(HOST_ECHO) \"set breakpoint pending on\" >> $(PRIVATE_DST)\n\t$(hide) $(HOST_ECHO) \"source $(call host-path,$(NDK_ROOT)/prebuilt/common/gdb/common.setup)\" >> $(PRIVATE_DST)\n\t$(hide) $(HOST_ECHO) \"directory $(call host-path,$(call remove-duplicates,$(PRIVATE_SRC_DIRS)))\" >> $(PRIVATE_DST)\n\n$(call generate-file-dir,$(NDK_APP_GDBSETUP))\n\n# This prevents parallel execution to clear gdb.setup after it has been written to\n$(NDK_APP_GDBSETUP): clean-installed-binaries\nendif\nendif\n\n# free the dictionary of LOCAL_MODULE definitions\n$(call modules-clear)\n\n# now parse the Android.mk for the application, this records all\n# module declarations, but does not populate the dependency graph yet.\ninclude $(NDK_APP_BUILD_SCRIPT)\n\n$(call ndk-objc-select,$(NDK_APP_OBJC))\n$(call ndk-stl-select,$(NDK_APP_STL))\n\n$(call ndk-stl-add-dependencies,$(NDK_APP_STL))\n$(call ndk-objc-add-dependencies,$(NDK_APP_OBJC))\n\n# recompute all dependencies between modules\n$(call modules-compute-dependencies)\n\n# for debugging purpose\nifdef NDK_DEBUG_MODULES\n$(call modules-dump-database)\nendif\n\n# now, really build the modules, the second pass allows one to deal\n# with exported values\n$(foreach __pass2_module,$(__ndk_modules),\\\n    $(eval LOCAL_MODULE := $(__pass2_module))\\\n    $(eval include $(BUILD_SYSTEM)/build-binary.mk)\\\n)\n\n# Now compute the closure of all module dependencies.\n#\n# If APP_MODULES is not defined in the Application.mk, we\n# will build all modules that were listed from the top-level Android.mk\n# and the installable imported ones they depend on\n#\nifeq ($(strip $(NDK_APP_MODULES)),)\n    WANTED_MODULES := $(call modules-get-all-installable,$(modules-get-top-list))\n    ifeq (,$(strip $(WANTED_MODULES)))\n        WANTED_MODULES := $(modules-get-top-list)\n        $(call ndk_log,[$(TARGET_ARCH_ABI)] No installable modules in project - forcing static library build)\n    endif\nelse\n    WANTED_MODULES := $(call module-get-all-dependencies,$(NDK_APP_MODULES))\nendif\n\n$(call ndk_log,[$(TARGET_ARCH_ABI)] Modules to build: $(WANTED_MODULES))\n\nWANTED_INSTALLED_MODULES += $(call map,module-get-installed,$(WANTED_MODULES))\n"
  },
  {
    "path": "build/gmsl/README",
    "content": "GNU Make Standard Library\n-------------------------\n\n1. Visit http://gmsl.sf.net for more details\n\n2. To use the GMSL in your Makefile make sure that you have the files\n\n   gmsl\n   __gmsl\n\n   Add \n\n   include gmsl\n\n   to your Makefile(s).\n\n3. To run the GMSL test suite have \n\n   gmsl\n   __gmsl\n   gmsl-tests\n\n   And then run\n\n   make -f gmsl-tests\n\n "
  },
  {
    "path": "build/gmsl/__gmsl",
    "content": "# ----------------------------------------------------------------------------\n#\n# GNU Make Standard Library (GMSL)\n#\n# A library of functions to be used with GNU Make's $(call) that\n# provides functionality not available in standard GNU Make.\n#\n# Copyright (c) 2005-2007 John Graham-Cumming\n#\n# This file is part of GMSL\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n# \n# Redistributions in binary form must reproduce the above copyright\n# notice, this list of conditions and the following disclaimer in the\n# documentation and/or other materials provided with the distribution.\n#\n# Neither the name of the John Graham-Cumming nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n#\n# ----------------------------------------------------------------------------\n\n# This is the GNU Make Standard Library version number as a list with\n# three items: major, minor, revision\n\ngmsl_version := 1 0 11\n\n# Used to output warnings and error from the library, it's possible to\n# disable any warnings or errors by overriding these definitions\n# manually or by setting GMSL_NO_WARNINGS or GMSL_NO_ERRORS\n\n__gmsl_name := GNU Make Standard Library\n__gmsl_warning = $(warning $(__gmsl_name): $1)\n__gmsl_error = $(error $(__gmsl_name): $1)\n\nifdef GMSL_NO_WARNINGS\n__gmsl_warning :=\nendif\nifdef GMSL_NO_ERRORS\n__gmsl_error :=\nendif\n\n# If GMSL_TRACE is enabled then calls to the library functions are\n# traced to stdout using warning messages with their arguments\n\nifdef GMSL_TRACE\n__gmsl_tr1 = $(warning $0('$1'))\n__gmsl_tr2 = $(warning $0('$1','$2'))\n__gmsl_tr3 = $(warning $0('$1','$2','$3'))\nelse\n__gmsl_tr1 :=\n__gmsl_tr2 :=\n__gmsl_tr3 :=\nendif\n\n# Figure out whether we have $(eval) or not (GNU Make 3.80 and above)\n# if we do not then output a warning message, if we do then some\n# functions will be enabled.\n\n__gmsl_have_eval := $(false)\n__gmsl_ignore := $(eval __gmsl_have_eval := $(true))\n\n# If this is being run with Electric Cloud's emake then warn that\n# their $(eval) support is incomplete.\n\nifdef ECLOUD_BUILD_ID\n$(warning You are using Electric Cloud's emake which has incomplete $$(eval) support)\n__gmsl_have_eval := $(false)\nendif\n\n# See if we have $(lastword) (GNU Make 3.81 and above)\n\n__gmsl_have_lastword := $(lastword $(false) $(true))\n\n# See if we have native or and and (GNU Make 3.81 and above)\n\n__gmsl_have_or := $(if $(filter-out undefined,  \\\n    $(origin or)),$(call or,$(true),$(false)))\n__gmsl_have_and := $(if $(filter-out undefined, \\\n    $(origin and)),$(call and,$(true),$(true)))\n\nifneq ($(__gmsl_have_eval),$(true))\n$(call __gmsl_warning,GNU Make $(MAKE_VERSION) does not support $$$$(eval): some functions disabled)\nendif\n\n# ----------------------------------------------------------------------------\n# Function:  gmsl_compatible\n# Arguments: List containing the desired library version number (maj min rev)\n# Returns:   $(true) if this version of the library is compatible\n#            with the requested version number, otherwise $(false)\n# ----------------------------------------------------------------------------\ngmsl_compatible = $(strip                                                 \\\n    $(if $(call gt,$(word 1,$1),$(word 1,$(gmsl_version))),               \\\n        $(false),                                                         \\\n        $(if $(call lt,$(word 1,$1),$(word 1,$(gmsl_version))),           \\\n            $(true),                                                      \\\n            $(if $(call gt,$(word 2,$1),$(word 2,$(gmsl_version))),       \\\n                $(false),                                                 \\\n                $(if $(call lt,$(word 2,$1),$(word 2,$(gmsl_version))),   \\\n                    $(true),                                              \\\n                    $(call lte,$(word 3,$1),$(word 3,$(gmsl_version))))))))\n\n# ###########################################################################\n# LOGICAL OPERATORS\n# ###########################################################################\n\n# not is defined in gmsl\n\n# ----------------------------------------------------------------------------\n# Function:  and\n# Arguments: Two boolean values\n# Returns:   Returns $(true) if both of the booleans are true\n# ----------------------------------------------------------------------------\nifneq ($(__gmsl_have_and),$(true))\nand = $(__gmsl_tr2)$(if $1,$(if $2,$(true),$(false)),$(false))\nendif\n\n# ----------------------------------------------------------------------------\n# Function:  or\n# Arguments: Two boolean values\n# Returns:   Returns $(true) if either of the booleans is true\n# ----------------------------------------------------------------------------\nifneq ($(__gmsl_have_or),$(true))\nor = $(__gmsl_tr2)$(if $1$2,$(true),$(false))\nendif\n\n# ----------------------------------------------------------------------------\n# Function:  xor\n# Arguments: Two boolean values\n# Returns:   Returns $(true) if exactly one of the booleans is true\n# ----------------------------------------------------------------------------\nxor = $(__gmsl_tr2)$(if $1,$(if $2,$(false),$(true)),$(if $2,$(true),$(false)))\n\n# ----------------------------------------------------------------------------\n# Function:  nand\n# Arguments: Two boolean values\n# Returns:   Returns value of 'not and'\n# ----------------------------------------------------------------------------\nnand = $(__gmsl_tr2)$(if $1,$(if $2,$(false),$(true)),$(true))\n\n# ----------------------------------------------------------------------------\n# Function:  nor\n# Arguments: Two boolean values\n# Returns:   Returns value of 'not or'\n# ----------------------------------------------------------------------------\nnor = $(__gmsl_tr2)$(if $1$2,$(false),$(true))\n\n# ----------------------------------------------------------------------------\n# Function:  xnor\n# Arguments: Two boolean values\n# Returns:   Returns value of 'not xor'\n# ----------------------------------------------------------------------------\nxnor =$(__gmsl_tr2)$(if $1,$(if $2,$(true),$(false)),$(if $2,$(false),$(true)))\n\n# ###########################################################################\n# LIST MANIPULATION FUNCTIONS\n# ###########################################################################\n\n# ----------------------------------------------------------------------------\n# Function:  first (same as LISP's car, or head)\n# Arguments: 1: A list\n# Returns:   Returns the first element of a list\n# ----------------------------------------------------------------------------\nfirst = $(__gmsl_tr1)$(firstword $1)\n\n# ----------------------------------------------------------------------------\n# Function:  last\n# Arguments: 1: A list\n# Returns:   Returns the last element of a list\n# ----------------------------------------------------------------------------\nifeq ($(__gmsl_have_lastword),$(true))\nlast = $(__gmsl_tr1)$(lastword $1)\nelse\nlast = $(__gmsl_tr1)$(if $1,$(word $(words $1),$1))\nendif\n\n# ----------------------------------------------------------------------------\n# Function:  rest (same as LISP's cdr, or tail)\n# Arguments: 1: A list\n# Returns:   Returns the list with the first element removed\n# ----------------------------------------------------------------------------\nrest = $(__gmsl_tr1)$(wordlist 2,$(words $1),$1)\n\n# ----------------------------------------------------------------------------\n# Function:  chop\n# Arguments: 1: A list\n# Returns:   Returns the list with the last element removed\n# ----------------------------------------------------------------------------\nchop = $(__gmsl_tr1)$(wordlist 2,$(words $1),x $1)\n\n# ----------------------------------------------------------------------------\n# Function:  map\n# Arguments: 1: Name of function to $(call) for each element of list\n#            2: List to iterate over calling the function in 1\n# Returns:   The list after calling the function on each element\n# ----------------------------------------------------------------------------\nmap = $(__gmsl_tr2)$(strip $(foreach a,$2,$(call $1,$a)))\n\n# ----------------------------------------------------------------------------\n# Function:  pairmap\n# Arguments: 1: Name of function to $(call) for each pair of elements\n#            2: List to iterate over calling the function in 1\n#            3: Second list to iterate over calling the function in 1\n# Returns:   The list after calling the function on each pair of elements\n# ----------------------------------------------------------------------------\npairmap = $(strip $(__gmsl_tr3)\\\n          $(if $2$3,$(call $1,$(call first,$2),$(call first,$3))     \\\n                        $(call pairmap,$1,$(call rest,$2),$(call rest,$3))))\n\n# ----------------------------------------------------------------------------\n# Function:  leq\n# Arguments: 1: A list to compare against...\n#            2: ...this list\n# Returns:   Returns $(true) if the two lists are identical\n# ----------------------------------------------------------------------------\nleq = $(__gmsl_tr2)$(strip $(if $(call seq,$(words $1),$(words $2)),     \\\n          $(call __gmsl_list_equal,$1,$2),$(false)))\n\n__gmsl_list_equal = $(if $(strip $1),                                       \\\n                        $(if $(call seq,$(call first,$1),$(call first,$2)), \\\n                            $(call __gmsl_list_equal,                       \\\n                                $(call rest,$1),                            \\\n                                $(call rest,$2)),                           \\\n                            $(false)),                                      \\\n                     $(true))\n\n# ----------------------------------------------------------------------------\n# Function:  lne\n# Arguments: 1: A list to compare against...\n#            2: ...this list\n# Returns:   Returns $(true) if the two lists are different\n# ----------------------------------------------------------------------------\nlne = $(__gmsl_tr2)$(call not,$(call leq,$1,$2))\n\n# ----------------------------------------------------------------------------\n# Function:  reverse\n# Arguments: 1: A list to reverse\n# Returns:   The list with its elements in reverse order\n# ----------------------------------------------------------------------------\nreverse =$(__gmsl_tr1)$(strip $(if $1,$(call reverse,$(call rest,$1)) \\\n                        $(call first,$1)))\n\n# ----------------------------------------------------------------------------\n# Function:  uniq\n# Arguments: 1: A list from which to remove repeated elements\n# Returns:   The list with duplicate elements removed without reordering\n# ----------------------------------------------------------------------------\nuniq = $(strip $(__gmsl_tr1)$(if $1,$(call uniq,$(call chop,$1)) \\\n            $(if $(filter $(call last,$1),$(call chop,$1)),,$(call last,$1))))\n\n# ----------------------------------------------------------------------------\n# Function:  length\n# Arguments: 1: A list\n# Returns:   The number of elements in the list\n# ----------------------------------------------------------------------------\nlength = $(__gmsl_tr1)$(words $1)\n\n# ###########################################################################\n# STRING MANIPULATION FUNCTIONS\n# ###########################################################################\n\n# Helper function that translates any GNU Make 'true' value (i.e. a\n# non-empty string) to our $(true)\n\n__gmsl_make_bool = $(if $(strip $1),$(true),$(false))\n\n# ----------------------------------------------------------------------------\n# Function:  seq\n# Arguments: 1: A string to compare against...\n#            2: ...this string\n# Returns:   Returns $(true) if the two strings are identical\n# ----------------------------------------------------------------------------\nseq = $(__gmsl_tr2)$(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),$(false),$(true))\n\n# ----------------------------------------------------------------------------\n# Function:  sne\n# Arguments: 1: A string to compare against...\n#            2: ...this string\n# Returns:   Returns $(true) if the two strings are not the same\n# ----------------------------------------------------------------------------\nsne = $(__gmsl_tr2)$(call not,$(call seq,$1,$2))\n\n# ----------------------------------------------------------------------------\n# Function:  split\n# Arguments: 1: The character to split on\n#            2: A string to split\n# Returns:   Splits a string into a list separated by spaces at the split\n#            character in the first argument\n# ----------------------------------------------------------------------------\nsplit = $(__gmsl_tr2)$(strip $(subst $1, ,$2))\n\n# ----------------------------------------------------------------------------\n# Function:  merge\n# Arguments: 1: The character to put between fields\n#            2: A list to merge into a string\n# Returns:   Merges a list into a single string, list elements are separated\n#            by the character in the first argument\n# ----------------------------------------------------------------------------\nmerge = $(__gmsl_tr2)$(strip $(if $2,                                     \\\n            $(if $(call seq,1,$(words $2)),                               \\\n                $2,$(call first,$2)$1$(call merge,$1,$(call rest,$2)))))\n\nifdef __gmsl_have_eval\n# ----------------------------------------------------------------------------\n# Function:  tr\n# Arguments: 1: The list of characters to translate from \n#            2: The list of characters to translate to\n#            3: The text to translate\n# Returns:   Returns the text after translating characters\n# ----------------------------------------------------------------------------\ntr = $(strip $(__gmsl_tr3)$(call assert_no_dollar,$0,$1$2$3)              \\\n     $(eval __gmsl_t := $3)                                               \\\n     $(foreach c,                                                         \\\n         $(join $(addsuffix :,$1),$2),                                    \\\n         $(eval __gmsl_t :=                                               \\\n             $(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)), \\\n                 $(__gmsl_t))))$(__gmsl_t))\n\n# Common character classes for use with the tr function.  Each of\n# these is actually a variable declaration and must be wrapped with\n# $() or ${} to be used.\n\n[A-Z] := A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #\n[a-z] := a b c d e f g h i j k l m n o p q r s t u v w x y z #\n[0-9] := 0 1 2 3 4 5 6 7 8 9 #\n[A-F] := A B C D E F #\n\n# ----------------------------------------------------------------------------\n# Function:  uc\n# Arguments: 1: Text to upper case\n# Returns:   Returns the text in upper case\n# ----------------------------------------------------------------------------\nuc = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(call tr,$([a-z]),$([A-Z]),$1)\n\n# ----------------------------------------------------------------------------\n# Function:  lc\n# Arguments: 1: Text to lower case\n# Returns:   Returns the text in lower case\n# ----------------------------------------------------------------------------\nlc = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(call tr,$([A-Z]),$([a-z]),$1)\n\n# ----------------------------------------------------------------------------\n# Function:  strlen\n# Arguments: 1: A string\n# Returns:   Returns the length of the string\n# ----------------------------------------------------------------------------\n__gmsl_characters := A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n__gmsl_characters += a b c d e f g h i j k l m n o p q r s t u v w x y z\n__gmsl_characters += 0 1 2 3 4 5 6 7 8 9\n__gmsl_characters += ` ~ ! @ \\# $$ % ^ & * ( ) - _ = +\n__gmsl_characters += { } [ ] \\ : ; ' \" < > , . / ? |\n\n# Aside: if you read the above you might think that the lower-case\n# letter x is missing, and that that's an error.  It is missing, but\n# it's not an error.  __gmsl_characters is used by the strlen\n# function.  strlen works by transforming every character and space\n# into the letter x and then counting the x's.  Since there's no need\n# to transform x into x I omitted it.\n\n# This results in __gmsl_space containing just a space\n\n__gmsl_space := \n__gmsl_space +=\n\nstrlen = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(strip $(eval __temp := $(subst $(__gmsl_space),x,$1))$(foreach a,$(__gmsl_characters),$(eval __temp := $$(subst $$a,x,$(__temp))))$(eval __temp := $(subst x,x ,$(__temp)))$(words $(__temp)))\n\n# This results in __gmsl_newline containing just a newline\n\ndefine __gmsl_newline\n\n\nendef\n\n# This results in __gmsl_tab containing a tab\n\n__gmsl_tab :=\t#\n\n# ----------------------------------------------------------------------------\n# Function:  substr\n# Arguments: 1: A string\n# \t     2: Start position (first character is 1)\n#\t     3: End position (inclusive)\n# Returns:   A substring.  \n# Note:      The string in $1 must not contain a \n# ----------------------------------------------------------------------------\n\nsubstr = $(__gmsl_tr3)$(call assert_no_dollar,$0,$1$2$3)$(strip $(eval __temp := $$(subst $$(__gmsl_space), ,$$1))$(foreach a,$(__gmsl_characters),$(eval __temp := $$(subst $$a,$$a$$(__gmsl_space),$(__temp))))$(eval __temp := $(wordlist $2,$3,$(__temp))))$(subst ,$(__gmsl_space),$(subst $(__gmsl_space),,$(__temp)))\n\nendif # __gmsl_have_eval\n\n# ###########################################################################\n# SET MANIPULATION FUNCTIONS\n# ###########################################################################\n\n# Sets are represented by sorted, deduplicated lists.  To create a set\n# from a list use set_create, or start with the empty_set and\n# set_insert individual elements\n\n# This is the empty set\nempty_set := \n\n# ----------------------------------------------------------------------------\n# Function:  set_create\n# Arguments: 1: A list of set elements\n# Returns:   Returns the newly created set\n# ----------------------------------------------------------------------------\nset_create = $(__gmsl_tr1)$(sort $1)\n\n# ----------------------------------------------------------------------------\n# Function:  set_insert\n# Arguments: 1: A single element to add to a set\n#            2: A set\n# Returns:   Returns the set with the element added\n# ----------------------------------------------------------------------------\nset_insert = $(__gmsl_tr2)$(sort $1 $2)\n\n# ----------------------------------------------------------------------------\n# Function:  set_remove\n# Arguments: 1: A single element to remove from a set\n#            2: A set\n# Returns:   Returns the set with the element removed\n# ----------------------------------------------------------------------------\nset_remove = $(__gmsl_tr2)$(filter-out $1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  set_is_member\n# Arguments: 1: A single element \n#            2: A set\n# Returns:   Returns $(true) if the element is in the set\n# ----------------------------------------------------------------------------\nset_is_member = $(__gmsl_tr2)$(if $(filter $1,$2),$(true),$(false))\n\n# ----------------------------------------------------------------------------\n# Function:  set_union\n# Arguments: 1: A set\n#            2: Another set\n# Returns:   Returns the union of the two sets\n# ----------------------------------------------------------------------------\nset_union = $(__gmsl_tr2)$(sort $1 $2)\n\n# ----------------------------------------------------------------------------\n# Function:  set_intersection\n# Arguments: 1: A set\n#            2: Another set\n# Returns:   Returns the intersection of the two sets\n# ----------------------------------------------------------------------------\nset_intersection = $(__gmsl_tr2)$(filter $1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  set_is_subset\n# Arguments: 1: A set\n#            2: Another set\n# Returns:   Returns $(true) if the first set is a subset of the second\n# ----------------------------------------------------------------------------\nset_is_subset = $(__gmsl_tr2)$(call set_equal,$(call set_intersection,$1,$2),$1)\n\n# ----------------------------------------------------------------------------\n# Function:  set_equal\n# Arguments: 1: A set\n#            2: Another set\n# Returns:   Returns $(true) if the two sets are identical\n# ----------------------------------------------------------------------------\nset_equal = $(__gmsl_tr2)$(call seq,$1,$2)\n\n# ###########################################################################\n# ARITHMETIC LIBRARY\n# ###########################################################################\n\n# Integers a represented by lists with the equivalent number of x's.\n# For example the number 4 is x x x x.  The maximum integer that the\n# library can handle as _input_ is __gmsl_input_int which is defined\n# here as 65536\n\n__gmsl_sixteen := x x x x x x x x x x x x x x x x\n__gmsl_input_int := $(foreach a,$(__gmsl_sixteen),         \\\n                        $(foreach b,$(__gmsl_sixteen),     \\\n                            $(foreach c,$(__gmsl_sixteen), \\\n                                $(__gmsl_sixteen)))))\n\n# ----------------------------------------------------------------------------\n# Function:  int_decode\n# Arguments: 1: A number of x's representation\n# Returns:   Returns the integer for human consumption that is represented\n#            by the string of x's\n# ----------------------------------------------------------------------------\nint_decode = $(__gmsl_tr1)$(words $1)\n\n# ----------------------------------------------------------------------------\n# Function:  int_encode\n# Arguments: 1: A number in human-readable integer form\n# Returns:   Returns the integer encoded as a string of x's\n# ----------------------------------------------------------------------------\nint_encode = $(__gmsl_tr1)$(wordlist 1,$1,$(__gmsl_input_int))\n\n# The arithmetic library functions come in two forms: one form of each\n# function takes integers as arguments and the other form takes the\n# encoded form (x's created by a call to int_encode).  For example,\n# there are two plus functions:\n#\n# plus        Called with integer arguments and returns an integer\n# int_plus    Called with encoded arguments and returns an encoded result\n#\n# plus will be slower than int_plus because its arguments and result\n# have to be translated between the x's format and integers.  If doing\n# a complex calculation use the int_* forms with a single encoding of\n# inputs and single decoding of the output.  For simple calculations\n# the direct forms can be used.\n\n# Helper function used to wrap an int_* function into a function that\n# takes a pair of integers, perhaps a function and returns an integer\n# result\n__gmsl_int_wrap = $(call int_decode,$(call $1,$(call int_encode,$2),$(call int_encode,$3)))\n__gmsl_int_wrap1 = $(call int_decode,$(call $1,$(call int_encode,$2)))\n__gmsl_int_wrap2 = $(call $1,$(call int_encode,$2),$(call int_encode,$3))\n\n# ----------------------------------------------------------------------------\n# Function:  int_plus\n# Arguments: 1: A number in x's representation\n#            2: Another number in x's represntation\n# Returns:   Returns the sum of the two numbers in x's representation\n# ----------------------------------------------------------------------------\nint_plus = $(strip $(__gmsl_tr2)$1 $2)\n\n# ----------------------------------------------------------------------------\n# Function:  plus (wrapped version of int_plus)\n# Arguments: 1: An integer\n#            2: Another integer\n# Returns:   Returns the sum of the two integers\n# ----------------------------------------------------------------------------\nplus = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_plus,$1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  int_subtract\n# Arguments: 1: A number in x's representation\n#            2: Another number in x's represntation\n# Returns:   Returns the difference of the two numbers in x's representation,\n#            or outputs an error on a numeric underflow\n# ----------------------------------------------------------------------------\nint_subtract = $(strip $(__gmsl_tr2)$(if $(call int_gte,$1,$2), \\\n                $(filter-out xx,$(join $1,$2)),                 \\\n                $(call __gmsl_warning,Subtraction underflow)))\n\n# ----------------------------------------------------------------------------\n# Function:  subtract (wrapped version of int_subtract)\n# Arguments: 1: An integer\n#            2: Another integer\n# Returns:   Returns the difference of the two integers,\n#            or outputs an error on a numeric underflow\n# ----------------------------------------------------------------------------\nsubtract = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_subtract,$1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  int_multiply\n# Arguments: 1: A number in x's representation\n#            2: Another number in x's represntation\n# Returns:   Returns the product of the two numbers in x's representation\n# ----------------------------------------------------------------------------\nint_multiply = $(strip $(__gmsl_tr2)$(foreach a,$1,$2))\n\n# ----------------------------------------------------------------------------\n# Function:  multiply (wrapped version of int_multiply)\n# Arguments: 1: An integer\n#            2: Another integer\n# Returns:   Returns the product of the two integers\n# ----------------------------------------------------------------------------\nmultiply = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_multiply,$1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  int_divide\n# Arguments: 1: A number in x's representation\n#            2: Another number in x's represntation\n# Returns:   Returns the result of integer division of argument 1 divided\n#            by argument 2 in x's representation\n# ----------------------------------------------------------------------------\nint_divide = $(__gmsl_tr2)$(strip $(if $2,                                 \\\n                 $(if $(call int_gte,$1,$2),                               \\\n                     x $(call int_divide,$(call int_subtract,$1,$2),$2),), \\\n                 $(call __gmsl_error,Division by zero)))\n\n# ----------------------------------------------------------------------------\n# Function:  divide (wrapped version of int_divide)\n# Arguments: 1: An integer\n#            2: Another integer\n# Returns:   Returns the integer division of the first argument by the second\n# ----------------------------------------------------------------------------\ndivide = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_divide,$1,$2)\n\n# ----------------------------------------------------------------------------\n# Function:  int_max, int_min\n# Arguments: 1: A number in x's representation\n#            2: Another number in x's represntation\n# Returns:   Returns the maximum or minimum of its arguments in x's\n#            representation\n# ----------------------------------------------------------------------------\nint_max = $(__gmsl_tr2)$(subst xx,x,$(join $1,$2))\nint_min = $(__gmsl_tr2)$(subst xx,x,$(filter xx,$(join $1,$2)))\n\n# ----------------------------------------------------------------------------\n# Function:  max, min\n# Arguments: 1: An integer\n#            2: Another integer\n# Returns:   Returns the maximum or minimum of its integer arguments\n# ----------------------------------------------------------------------------\nmax = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_max,$1,$2)\nmin = $(__gmsl_tr2)$(call __gmsl_int_wrap,int_min,$1,$2)\n\n# ----------------------------------------------------------------------------\n# Function: int_gt, int_gte, int_lt, int_lte, int_eq, int_ne\n# Arguments: Two x's representation numbers to be compared\n# Returns:   $(true) or $(false)\n#\n# int_gt    First argument greater than second argument\n# int_gte   First argument greater than or equal to second argument\n# int_lt    First argument less than second argument \n# int_lte   First argument less than or equal to second argument\n# int_eq    First argument is numerically equal to the second argument\n# int_ne    First argument is not numerically equal to the second argument\n# ----------------------------------------------------------------------------\nint_gt = $(__gmsl_tr2)$(call __gmsl_make_bool,      \\\n                          $(filter-out $(words $2), \\\n                              $(words $(call int_max,$1,$2))))\nint_gte = $(__gmsl_tr2)$(call __gmsl_make_bool,     \\\n                           $(call int_gt,$1,$2)$(call int_eq,$1,$2))\nint_lt = $(__gmsl_tr2)$(call __gmsl_make_bool,      \\\n                          $(filter-out $(words $1), \\\n                              $(words $(call int_max,$1,$2))))\nint_lte = $(__gmsl_tr2)$(call __gmsl_make_bool,     \\\n                           $(call int_lt,$1,$2)$(call int_eq,$1,$2))\nint_eq = $(__gmsl_tr2)$(call __gmsl_make_bool,      \\\n                          $(filter $(words $1),$(words $2)))\nint_ne = $(__gmsl_tr2)$(call __gmsl_make_bool,      \\\n                          $(filter-out $(words $1),$(words $2)))\n\n# ----------------------------------------------------------------------------\n# Function: gt, gte, lt, lte, eq, ne\n# Arguments: Two integers to be compared\n# Returns:   $(true) or $(false)\n#\n# gt    First argument greater than second argument\n# gte   First argument greater than or equal to second argument\n# lt    First argument less than second argument \n# lte   First argument less than or equal to second argument\n# eq    First argument is numerically equal to the second argument\n# ne    First argument is not numerically equal to the second argument\n# ----------------------------------------------------------------------------\ngt = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_gt,$1,$2)\ngte = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_gte,$1,$2)\nlt = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_lt,$1,$2)\nlte = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_lte,$1,$2)\neq = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_eq,$1,$2)\nne = $(__gmsl_tr2)$(call __gmsl_int_wrap2,int_ne,$1,$2)\n\n# increment adds 1 to its argument, decrement subtracts 1.  Note that\n# decrement does not range check and hence will not underflow, but\n# will incorrectly say that 0 - 1 = 0\n\n# ----------------------------------------------------------------------------\n# Function:  int_inc\n# Arguments: 1: A number in x's representation\n# Returns:   The number incremented by 1 in x's representation\n# ----------------------------------------------------------------------------\nint_inc = $(strip $(__gmsl_tr1)$1 x)\n\n# ----------------------------------------------------------------------------\n# Function:  inc\n# Arguments: 1: An integer\n# Returns:   The argument incremented by 1\n# ----------------------------------------------------------------------------\ninc = $(__gmsl_tr1)$(call __gmsl_int_wrap1,int_inc,$1)\n\n# ----------------------------------------------------------------------------\n# Function:  int_dec\n# Arguments: 1: A number in x's representation\n# Returns:   The number decremented by 1 in x's representation\n# ----------------------------------------------------------------------------\nint_dec = $(__gmsl_tr1)$(strip $(if $(call sne,0,$(words $1)), \\\n              $(wordlist 2,$(words $1),$1),                    \\\n              $(call __gmsl_warning,Decrement underflow)))\n\n# ----------------------------------------------------------------------------\n# Function:  dec\n# Arguments: 1: An integer\n# Returns:   The argument decremented by 1\n# ----------------------------------------------------------------------------\ndec = $(__gmsl_tr1)$(call __gmsl_int_wrap1,int_dec,$1)\n\n# double doubles its argument, and halve halves it\n\n# ----------------------------------------------------------------------------\n# Function:  int_double\n# Arguments: 1: A number in x's representation\n# Returns:   The number doubled (i.e. * 2) and returned in x's representation\n# ----------------------------------------------------------------------------\nint_double = $(strip $(__gmsl_tr1)$1 $1)\n\n# ----------------------------------------------------------------------------\n# Function:  double\n# Arguments: 1: An integer\n# Returns:   The integer times 2\n# ----------------------------------------------------------------------------\ndouble = $(__gmsl_tr1)$(call __gmsl_int_wrap1,int_double,$1)\n\n# ----------------------------------------------------------------------------\n# Function:  int_halve\n# Arguments: 1: A number in x's representation\n# Returns:   The number halved (i.e. / 2) and returned in x's representation\n# ----------------------------------------------------------------------------\nint_halve = $(__gmsl_tr1)$(strip $(subst xx,x,$(filter-out xy x y, \\\n                             $(join $1,$(foreach a,$1,y x)))))\n\n# ----------------------------------------------------------------------------\n# Function:  halve\n# Arguments: 1: An integer\n# Returns:   The integer divided by 2\n# ----------------------------------------------------------------------------\nhalve = $(__gmsl_tr1)$(call __gmsl_int_wrap1,int_halve,$1)\n\nifdef __gmsl_have_eval\n# ###########################################################################\n# ASSOCIATIVE ARRAYS\n# ###########################################################################\n\n# ----------------------------------------------------------------------------\n# Function:  set\n# Arguments: 1: Name of associative array\n#            2: The key value to associate\n#            3: The value associated with the key\n# Returns:   None\n# ----------------------------------------------------------------------------\nset = $(__gmsl_tr3)$(call assert_no_dollar,$0,$1$2$3)$(eval __gmsl_aa_$1_$2 = $3)\n\n# ----------------------------------------------------------------------------\n# Function:  get\n# Arguments: 1: Name of associative array\n#            2: The key to retrieve\n# Returns:   The value stored in the array for that key\n# ----------------------------------------------------------------------------\nget = $(strip $(__gmsl_tr2)$(call assert_no_dollar,$0,$1$2)$(if $(filter-out undefined,$(origin __gmsl_aa_$1_$2)), \\\n    $(__gmsl_aa_$1_$2)))\n\n# ----------------------------------------------------------------------------\n# Function:  keys\n# Arguments: 1: Name of associative array\n# Returns:   Returns a list of all defined keys in the array\n# ----------------------------------------------------------------------------\nkeys = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(sort $(patsubst __gmsl_aa_$1_%,%, \\\n                  $(filter __gmsl_aa_$1_%,$(.VARIABLES))))\n\n# ----------------------------------------------------------------------------\n# Function:  defined\n# Arguments: 1: Name of associative array\n#            2: The key to test\n# Returns:   Returns true if the key is defined (i.e. not empty)\n# ----------------------------------------------------------------------------\ndefined = $(__gmsl_tr2)$(call assert_no_dollar,$0,$1$2)$(call sne,$(call get,$1,$2),)\n\nendif # __gmsl_have_eval\n\nifdef __gmsl_have_eval\n# ###########################################################################\n# NAMED STACKS\n# ###########################################################################\n\n# ----------------------------------------------------------------------------\n# Function:  push\n# Arguments: 1: Name of stack\n#            2: Value to push onto the top of the stack (must not contain\n#               a space)\n# Returns:   None\n# ----------------------------------------------------------------------------\npush = $(__gmsl_tr2)$(call assert_no_dollar,$0,$1$2)$(eval __gmsl_stack_$1 := $2 $(if $(filter-out undefined,\\\n    $(origin __gmsl_stack_$1)),$(__gmsl_stack_$1)))\n\n# ----------------------------------------------------------------------------\n# Function:  pop\n# Arguments: 1: Name of stack\n# Returns:   Top element from the stack after removing it\n# ----------------------------------------------------------------------------\npop = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(strip $(if $(filter-out undefined,$(origin __gmsl_stack_$1)), \\\n    $(call first,$(__gmsl_stack_$1))                                       \\\n    $(eval __gmsl_stack_$1 := $(call rest,$(__gmsl_stack_$1)))))\n\n# ----------------------------------------------------------------------------\n# Function:  peek\n# Arguments: 1: Name of stack\n# Returns:   Top element from the stack without removing it\n# ----------------------------------------------------------------------------\npeek = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(call first,$(__gmsl_stack_$1))\n\n# ----------------------------------------------------------------------------\n# Function:  depth\n# Arguments: 1: Name of stack\n# Returns:   Number of items on the stack\n# ----------------------------------------------------------------------------\ndepth = $(__gmsl_tr1)$(call assert_no_dollar,$0,$1)$(words $(__gmsl_stack_$1))\n\nendif # __gmsl_have_eval\n\n# ###########################################################################\n# DEBUGGING FACILITIES\n# ###########################################################################\n\n# ----------------------------------------------------------------------------\n# Target:    gmsl-print-%\n# Arguments: The % should be replaced by the name of a variable that you\n#            wish to print out.\n# Action:    Echos the name of the variable that matches the % and its value.\n#            For example, 'make gmsl-print-SHELL' will output the value of\n#            the SHELL variable\n# ----------------------------------------------------------------------------\ngmsl-print-%: ; @echo $* = $($*)\n\n# ----------------------------------------------------------------------------\n# Function:  assert\n# Arguments: 1: A boolean that must be true or the assertion will fail\n#            2: The message to print with the assertion\n# Returns:   None\n# ----------------------------------------------------------------------------\nassert = $(if $1,,$(call __gmsl_error,Assertion failure: $2))\n\n# ----------------------------------------------------------------------------\n# Function:  assert_exists\n# Arguments: 1: Name of file that must exist, if it is missing an assertion\n#               will be generated\n# Returns:   None\n# ----------------------------------------------------------------------------\nassert_exists = $(call assert,$(wildcard $1),file '$1' missing)\n\n# ----------------------------------------------------------------------------\n# Function:  assert_no_dollar\n# Arguments: 1: Name of a function being executd\n#            2: Arguments to check\n# Returns:   None\n# ----------------------------------------------------------------------------\nassert_no_dollar = $(call assert,$(call not,$(findstring $$,$2)),$1 called with a dollar sign in argument)\n"
  },
  {
    "path": "build/gmsl/gmsl",
    "content": "# ----------------------------------------------------------------------------\n#\n# GNU Make Standard Library (GMSL)\n#\n# A library of functions to be used with GNU Make's $(call) that\n# provides functionality not available in standard GNU Make.\n#\n# Copyright (c) 2005-2008 John Graham-Cumming\n#\n# This file is part of GMSL\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n# \n# Redistributions in binary form must reproduce the above copyright\n# notice, this list of conditions and the following disclaimer in the\n# documentation and/or other materials provided with the distribution.\n#\n# Neither the name of the John Graham-Cumming nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n#\n# ----------------------------------------------------------------------------\n\n# Determine if the library has already been included and if so don't\n# bother including it again\n\nifndef __gmsl_included\n\n# Standard definitions for true and false.  true is any non-empty\n# string, false is an empty string. These are intended for use with\n# $(if).\n\ntrue  := T\nfalse :=\n\n# ----------------------------------------------------------------------------\n# Function:  not\n# Arguments: 1: A boolean value\n# Returns:   Returns the opposite of the arg. (true -> false, false -> true)\n# ----------------------------------------------------------------------------\nnot = $(if $1,$(false),$(true))\n\n# Prevent reinclusion of the library\n\n__gmsl_included := $(true)\n\n# Try to determine where this file is located.  If the caller did\n# include /foo/gmsl then extract the /foo/ so that __gmsl gets\n# included transparently\n\nifneq ($(MAKEFILE_LIST),)\n__gmsl_root := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))\n\n# If there are any spaces in the path in __gmsl_root then give up\n\nifeq (1,$(words $(__gmsl_root)))\n__gmsl_root := $(patsubst %gmsl,%,$(__gmsl_root))\nelse\n__gmsl_root :=\nendif\n\ninclude $(__gmsl_root)__gmsl\n\nelse\n\ninclude __gmsl\n\nendif\n\nendif # __gmsl_included\n\n"
  },
  {
    "path": "build/gmsl/gmsl-tests",
    "content": "# ----------------------------------------------------------------------------\n#\n# GNU Make Standard Library (GMSL) Test Suite\n#\n# Test suite for the GMSL\n#\n# Copyright (c) 2005-2007 John Graham-Cumming\n#\n# This file is part of GMSL\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n# \n# Redistributions in binary form must reproduce the above copyright\n# notice, this list of conditions and the following disclaimer in the\n# documentation and/or other materials provided with the distribution.\n#\n# Neither the name of the John Graham-Cumming nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n#\n# ----------------------------------------------------------------------------\n\n.PHONY: all\nall:\n\t@echo\n\t@echo Test Summary\n\t@echo ------------\n\t@echo \"$(call int_decode,$(passed)) tests passed; $(call int_decode,$(failed)) tests failed\"\n\ninclude gmsl\n\npassed :=\nfailed :=\n\nECHO := /bin/echo\n\nstart_test = $(shell $(ECHO) -n \"Testing '$1': \" >&2)$(eval current_test := OK)\nstop_test  = $(shell $(ECHO) \" $(current_test)\" >&2)\ntest_pass = .$(eval passed := $(call int_inc,$(passed)))\ntest_fail = X$(eval failed := $(call int_inc,$(failed)))$(eval current_test := ERROR '$1' != '$2')\ntest_assert = $(if $(filter undefined,$(origin 2)),$(eval 2 :=))$(shell $(ECHO) -n $(if $(call seq,$1,$2),$(call test_pass,$1,$2),$(call test_fail,$1,$2)) >&2)\n\n$(call start_test,not)\n$(call test_assert,$(call not,$(true)),$(false))\n$(call test_assert,$(call not,$(false)),$(true))\n$(call stop_test)\n\n$(call start_test,or)\n$(call test_assert,$(call or,$(true),$(true)),$(true))\n$(call test_assert,$(call or,$(true),$(false)),$(true))\n$(call test_assert,$(call or,$(false),$(true)),$(true))\n$(call test_assert,$(call or,$(false),$(false)),$(false))\n$(call stop_test)\n\n$(call start_test,and)\n$(call test_assert,$(call and,$(true),$(true)),$(true))\n$(call test_assert,$(call and,$(true),$(false)),$(false))\n$(call test_assert,$(call and,$(false),$(true)),$(false))\n$(call test_assert,$(call and,$(false),$(false)),$(false))\n$(call stop_test)\n\n$(call start_test,xor)\n$(call test_assert,$(call xor,$(true),$(true)),$(false))\n$(call test_assert,$(call xor,$(true),$(false)),$(true))\n$(call test_assert,$(call xor,$(false),$(true)),$(true))\n$(call test_assert,$(call xor,$(false),$(false)),$(false))\n$(call stop_test)\n\n$(call start_test,nand)\n$(call test_assert,$(call nand,$(true),$(true)),$(false))\n$(call test_assert,$(call nand,$(true),$(false)),$(true))\n$(call test_assert,$(call nand,$(false),$(true)),$(true))\n$(call test_assert,$(call nand,$(false),$(false)),$(true))\n$(call stop_test)\n\n$(call start_test,nor)\n$(call test_assert,$(call nor,$(true),$(true)),$(false))\n$(call test_assert,$(call nor,$(true),$(false)),$(false))\n$(call test_assert,$(call nor,$(false),$(true)),$(false))\n$(call test_assert,$(call nor,$(false),$(false)),$(true))\n$(call stop_test)\n\n$(call start_test,xnor)\n$(call test_assert,$(call xnor,$(true),$(true)),$(true))\n$(call test_assert,$(call xnor,$(true),$(false)),$(false))\n$(call test_assert,$(call xnor,$(false),$(true)),$(false))\n$(call test_assert,$(call xnor,$(false),$(false)),$(true))\n$(call stop_test)\n\n$(call start_test,first)\n$(call test_assert,$(call first,1 2 3),1)\n$(call test_assert,$(call first,1),1)\n$(call test_assert,$(call first,),)\n$(call stop_test)\n\n$(call start_test,last)\n$(call test_assert,$(call last,1 2 3),3)\n$(call test_assert,$(call last,1),1)\n$(call test_assert,$(call last,),)\n$(call stop_test)\n\n$(call start_test,rest)\n$(call test_assert,$(call rest,1 2 3),2 3)\n$(call test_assert,$(call rest,1),)\n$(call test_assert,$(call rest,),)\n$(call stop_test)\n\n$(call start_test,chop)\n$(call test_assert,$(call chop,1 2 3),1 2)\n$(call test_assert,$(call chop,1 2 3 4),1 2 3)\n$(call test_assert,$(call chop,1),)\n$(call test_assert,$(call chop,),)\n$(call stop_test)\n\n$(call start_test,length)\n$(call test_assert,$(call length,1 2 3),3)\n$(call test_assert,$(call length,1 2 3 4),4)\n$(call test_assert,$(call length,1),1)\n$(call test_assert,$(call length,),0)\n$(call stop_test)\n\n$(call start_test,map)\n$(call test_assert,$(call map,origin,__undefined map MAKE),undefined file default)\n$(call test_assert,$(call map,origin,),)\n$(call stop_test)\n\njoinem = $1$2\n$(call start_test,pairmap)\n$(call test_assert,$(call pairmap,addsuffix,2 1 3,a b c),a2 b1 c3)\n$(call test_assert,$(call pairmap,addprefix,2 1 3,a b c d),2a 1b 3c d)\n$(call test_assert,$(call pairmap,addprefix,2 1 3 4,a b c),2a 1b 3c)\n$(call test_assert,$(call pairmap,joinem,2 1 3 4,a b c),2a 1b 3c 4)\n$(call stop_test)\n\n$(call start_test,seq)\n$(call test_assert,$(call seq,abc,abc),T)\n$(call test_assert,$(call seq,x,),)\n$(call test_assert,$(call seq,,x),)\n$(call test_assert,$(call seq,x,x),T)\n$(call test_assert,$(call seq,a%c,abc),)\n$(call test_assert,$(call seq,abc,a%c),)\n$(call test_assert,$(call seq,abc,ABC),)\n$(call test_assert,$(call seq,abc,),)\n$(call test_assert,$(call seq,,),T)\n$(call test_assert,$(call seq,a b c,a b c),T)\n$(call test_assert,$(call seq,aa% bb% cc,aa% bb% cc),T)\n$(call test_assert,$(call seq,aa% bb% cc,aa% bb cc),)\n$(call test_assert,$(call seq,aa% bb% cc,xx yy zz),)\n$(call stop_test)\n\n$(call start_test,sne)\n$(call test_assert,$(call sne,abc,abc),)\n$(call test_assert,$(call sne,x,),T)\n$(call test_assert,$(call sne,,x),T)\n$(call test_assert,$(call sne,x,x),)\n$(call test_assert,$(call sne,abc,ABC),T)\n$(call test_assert,$(call sne,abc,),T)\n$(call test_assert,$(call sne,,),)\n$(call test_assert,$(call sne,a b c,a b c),)\n$(call test_assert,$(call sne,aa% bb% cc,aa% bb% cc),)\n$(call test_assert,$(call sne,aa% bb% cc,aa% bb cc),T)\n$(call stop_test)\n\n$(call start_test,strlen)\n$(call test_assert,$(call strlen,),0)\n$(call test_assert,$(call strlen,a),1)\n$(call test_assert,$(call strlen,a b),3)\n$(call test_assert,$(call strlen,a ),2)\n$(call test_assert,$(call strlen, a),2)\n$(call test_assert,$(call strlen,  ),2)\n$(call test_assert,$(call strlen,   ),3)\n$(call test_assert,$(call strlen,    ),4)\n$(call stop_test)\n\n$(call start_test,substr)\n$(call test_assert,$(call substr,xyz,1,1),x)\n$(call test_assert,$(call substr,xyz,1,2),xy)\n$(call test_assert,$(call substr,xyz,2,3),yz)\n$(call test_assert,$(call substr,some string,1,1),s)\n$(call test_assert,$(call substr,some string,1,2),so)\n$(call test_assert,$(call substr,some string,1,3),som)\n$(call test_assert,$(call substr,some string,1,4),some)\n$(call test_assert,$(call substr,some string,1,5),some )\n$(call test_assert,$(call substr,some string,1,6),some s)\n$(call test_assert,$(call substr,some string,5,5), )\n$(call test_assert,$(call substr,some string,5,6), s)\n$(call test_assert,$(call substr,some string,5,7), st)\n$(call test_assert,$(call substr,some string,5,8), str)\n$(call test_assert,$(call substr,some string,1,100),some string)\n$(call stop_test)\n\n$(call start_test,lc)\n$(call test_assert,$(call lc,The Quick Brown Fox),the quick brown fox)\n$(call test_assert,$(call lc,the1 quick2 brown3 fox4),the1 quick2 brown3 fox4)\n$(call test_assert,$(call lc,The_),the_)\n$(call test_assert,$(call lc,),)\n$(call stop_test)\n\n$(call start_test,uc)\n$(call test_assert,$(call uc,The Quick Brown Fox),THE QUICK BROWN FOX)\n$(call test_assert,$(call uc,the1 quick2 brown3 fox4),THE1 QUICK2 BROWN3 FOX4)\n$(call test_assert,$(call uc,The_),THE_)\n$(call test_assert,$(call uc,),)\n$(call stop_test)\n\n$(call start_test,tr)\n$(call test_assert,$(call tr,A B C,1 2 3,CAPITAL),31PIT1L)\n$(call test_assert,$(call tr,a b c,1 2 3,CAPITAL),CAPITAL)\n$(call test_assert,$(call tr,E L I,3 1 1,I AM ELITE),1 AM 311T3)\n$(call stop_test)\n\n$(call start_test,leq)\n$(call test_assert,$(call leq,1 2 3,1 2 3),T)\n$(call test_assert,$(call leq,1 2 3,1 2 3 4),)\n$(call test_assert,$(call leq,1 2 3 4,1 2 3),)\n$(call test_assert,$(call leq,1,1),T)\n$(call test_assert,$(call leq,,),T)\n$(call stop_test)\n\n$(call start_test,lne)\n$(call test_assert,$(call lne,1 2 3,1 2 3),)\n$(call test_assert,$(call lne,1 2 3,1 2 3 4),T)\n$(call test_assert,$(call lne,1 2 3 4,1 2 3),T)\n$(call test_assert,$(call lne,1,1),)\n$(call test_assert,$(call lne,,),)\n$(call stop_test)\n\n$(call start_test,empty_set)\n$(call test_assert,$(empty_set),)\n$(call test_assert,$(empty_set),$(call set_create,))\n$(call stop_test)\n\n$(call start_test,set_create)\n$(call test_assert,$(call set_create,),)\n$(call test_assert,$(call set_create,1 2 2 3),1 2 3)\n$(call test_assert,$(call set_create,2 1 1 2 2 3),1 2 3)\n$(call test_assert,$(call set_create,1),1)\n$(call stop_test)\n\n$(call start_test,set_insert)\n$(call test_assert,$(call set_insert,1,$(empty_set)),1)\n$(call test_assert,$(call set_insert,1,$(call set_create,1)),1)\n$(call test_assert,$(call set_insert,1,$(call set_create,1 2)),1 2)\n$(call test_assert,$(call set_insert,0,$(call set_create,1 2)),0 1 2)\n$(call stop_test)\n\n$(call start_test,set_remove)\n$(call test_assert,$(call set_remove,1,$(empty_set)),$(empty_set))\n$(call test_assert,$(call set_remove,1,$(call set_create,1 2)),2)\n$(call test_assert,$(call set_remove,1,$(call set_create,1 11 2)),11 2)\n$(call test_assert,$(call set_remove,0,$(call set_create,1 2)),1 2)\n$(call stop_test)\n\n$(call start_test,set_is_member)\n$(call test_assert,$(call set_is_member,1,$(empty_set)),)\n$(call test_assert,$(call set_is_member,1,$(call set_create,2 3)),)\n$(call test_assert,$(call set_is_member,1,$(call set_create,1 2 3)),T)\n$(call test_assert,$(call set_is_member,1,$(call set_create,1)),T)\n$(call stop_test)\n\n$(call start_test,set_union)\n$(call test_assert,$(call set_union,,),)\n$(call test_assert,$(call set_union,1 2,),1 2)\n$(call test_assert,$(call set_union,,3 4),3 4)\n$(call test_assert,$(call set_union,1 2,3 4),1 2 3 4)\n$(call test_assert,$(call set_union,1 2 3,3 4 5),1 2 3 4 5)\n$(call stop_test)\n\n$(call start_test,set_intersection)\n$(call test_assert,$(call set_intersection,,),)\n$(call test_assert,$(call set_intersection,1 2,),)\n$(call test_assert,$(call set_intersection,,3 4),)\n$(call test_assert,$(call set_intersection,1 2,3 4),)\n$(call test_assert,$(call set_intersection,1 2 3 4,3 4 5),3 4)\n$(call stop_test)\n\n$(call start_test,set_is_subset)\n$(call test_assert,$(call set_is_subset,,),T)\n$(call test_assert,$(call set_is_subset,1 2,),)\n$(call test_assert,$(call set_is_subset,,3 4),T)\n$(call test_assert,$(call set_is_subset,1 2,3 4),)\n$(call test_assert,$(call set_is_subset,1 2,1 2 3 4 5),T)\n$(call test_assert,$(call set_is_subset,1 2,1 2),T)\n$(call test_assert,$(call set_is_subset,1 2,1 3 4 5),)\n$(call stop_test)\n\n$(call start_test,set_equal)\n$(call test_assert,$(call set_equal,,),T)\n$(call test_assert,$(call set_equal,1,),)\n$(call test_assert,$(call set_equal,,1),)\n$(call test_assert,$(call set_equal,1,1),T)\n$(call test_assert,$(call set_equal,1 2,),)\n$(call test_assert,$(call set_equal,,1 2),)\n$(call test_assert,$(call set_equal,1 2,1 2 3),)\n$(call stop_test)\n\n$(call start_test,int_encode)\n$(call test_assert,$(call int_encode,0),)\n$(call test_assert,$(call int_encode,1),x)\n$(call test_assert,$(call int_encode,2),x x)\n$(call test_assert,$(call int_encode,10),x x x x x x x x x x)\n$(call stop_test)\n\n$(call start_test,int_decode)\n$(call test_assert,$(call int_decode,),0)\n$(call test_assert,$(call int_decode,x),1)\n$(call test_assert,$(call int_decode,x x),2)\n$(call test_assert,$(call int_decode,x x x x x x x x x x),10)\n$(call stop_test)\n\n$(call start_test,int_plus)\n$(call test_assert,$(call int_plus,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,7))\n$(call test_assert,$(call int_plus,$(call int_encode,0),$(call int_encode,4)),$(call int_encode,4))\n$(call test_assert,$(call int_plus,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,3))\n$(call test_assert,$(call int_plus,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_plus,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,1))\n$(call stop_test)\n\n$(call start_test,plus)\n$(call test_assert,$(call plus,3,4),7)\n$(call test_assert,$(call plus,4,3),7)\n$(call test_assert,$(call plus,0,4),4)\n$(call test_assert,$(call plus,3,0),3)\n$(call test_assert,$(call plus,0,0),0)\n$(call stop_test)\n\n__gmsl_warning = $1\n$(call start_test,int_subtract)\n$(call test_assert,$(call int_subtract,$(call int_encode,3),$(call int_encode,4)),Subtraction underflow)\n$(call test_assert,$(call int_subtract,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,1))\n$(call test_assert,$(call int_subtract,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,3))\n$(call test_assert,$(call int_subtract,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_subtract,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,1))\n$(call stop_test)\n\n__gmsl_warning = x x x x x x x x x x\n$(call start_test,subtract)\n$(call test_assert,$(call subtract,3,4),10)\n$(call test_assert,$(call subtract,4,3),1)\n$(call test_assert,$(call subtract,3,0),3)\n$(call test_assert,$(call subtract,0,0),0)\n$(call stop_test)\n\n$(call start_test,int_multiply)\n$(call test_assert,$(call int_multiply,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,12))\n$(call test_assert,$(call int_multiply,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,12))\n$(call test_assert,$(call int_multiply,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_multiply,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_multiply,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,0))\n$(call stop_test)\n\n$(call start_test,multiply)\n$(call test_assert,$(call multiply,3,4),12)\n$(call test_assert,$(call multiply,4,3),12)\n$(call test_assert,$(call multiply,3,0),0)\n$(call test_assert,$(call multiply,0,3),0)\n$(call test_assert,$(call multiply,0,0),0)\n$(call stop_test)\n\n__gmsl_error = $1\n$(call start_test,int_divide)\n$(call test_assert,$(call int_divide,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,0))\n$(call test_assert,$(call int_divide,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,1))\n$(call test_assert,$(call int_divide,$(call int_encode,31),$(call int_encode,3)),$(call int_encode,10))\n$(call test_assert,$(call int_divide,$(call int_encode,30),$(call int_encode,3)),$(call int_encode,10))\n$(call test_assert,$(call int_divide,$(call int_encode,29),$(call int_encode,3)),$(call int_encode,9))\n$(call test_assert,$(call int_divide,$(call int_encode,0),$(call int_encode,1)),$(call int_encode,0))\n$(call test_assert,$(call int_divide,$(call int_encode,1),$(call int_encode,0)),Division by zero)\n$(call stop_test)\n\n__gmsl_error = x x x x x x x x x x\n$(call start_test,divide)\n$(call test_assert,$(call divide,3,4),0)\n$(call test_assert,$(call divide,4,3),1)\n$(call test_assert,$(call divide,21,2),10)\n$(call test_assert,$(call divide,20,2),10)\n$(call test_assert,$(call divide,19,2),9)\n$(call test_assert,$(call divide,1,0),10)\n$(call stop_test)\n\n$(call start_test,associative array)\n$(call test_assert,$(call get,myarray,key1),)\n$(call set,myarray,key1,value1)\n$(call test_assert,$(call get,myarray,key1),value1)\n$(call test_assert,$(call get,myarray,key2),)\n$(call test_assert,$(call get,myarray1,key1),)\n$(call test_assert,$(call defined,myarray,key1),T)\n$(call test_assert,$(call defined,myarray,key2),)\n$(call test_assert,$(call defined,myarray1,key1),)\n$(call set,myarray,key2,value2)\n$(call test_assert,$(call keys,myarray),key1 key2)\n$(call test_assert,$(call keys,myarray1),)\n$(call stop_test)\n\n$(call start_test,named stack)\n$(call test_assert,$(call pop,mystack),)\n$(call test_assert,$(call push,mystack,e2))\n$(call push,mystack,e1)\n$(call test_assert,$(call pop,mystack),e1)\n$(call test_assert,$(call pop,mystack),e2)\n$(call push,mystack,f3)\n$(call push,mystack,f1)\n$(call test_assert,$(call pop,mystack),f1)\n$(call push,mystack,f2)\n$(call test_assert,$(call peek,mystack),f2)\n$(call test_assert,$(call depth,mystack),2)\n$(call test_assert,$(call pop,mystack),f2)\n$(call test_assert,$(call depth,mystack),1)\n$(call test_assert,$(call pop,myotherstack),)\n$(call stop_test)\n\n$(call start_test,reverse)\n$(call test_assert,$(call reverse,),)\n$(call test_assert,$(call reverse,1),1)\n$(call test_assert,$(call reverse,1 2),2 1)\n$(call test_assert,$(call reverse,1 2 3),3 2 1)\n$(call stop_test)\n\n$(call start_test,uniq)\n$(call test_assert,$(call uniq,),)\n$(call test_assert,$(call uniq,a),a)\n$(call test_assert,$(call uniq,a a),a)\n$(call test_assert,$(call uniq,a aa),a aa)\n$(call test_assert,$(call uniq,a aa a),a aa)\n$(call test_assert,$(call uniq,a b ba ab b a a ba a),a b ba ab)\n$(call stop_test)\n\nc:=,\n$(call start_test,split)\n$(call test_assert,$(call split,$c,comma$cseparated$cstring),comma separated string)\n$(call test_assert,$(call split,*,star*field*record),star field record)\n$(call test_assert,$(call split,*,star*),star)\n$(call test_assert,$(call split,*,star*field),star field)\n$(call test_assert,$(call split,*,star****field),star field)\n$(call test_assert,$(call split,*,),)\n$(call stop_test)\n\n$(call start_test,merge)\n$(call test_assert,$(call merge,$c,list of things),list$cof$cthings)\n$(call test_assert,$(call merge,*,list of things),list*of*things)\n$(call test_assert,$(call merge,*,list),list)\n$(call test_assert,$(call merge,*,),)\n$(call stop_test)\n\n$(call start_test,int_max)\n$(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,1)),$(call int_encode,2))\n$(call test_assert,$(call int_max,$(call int_encode,1),$(call int_encode,2)),$(call int_encode,2))\n$(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,0)),$(call int_encode,2))\n$(call test_assert,$(call int_max,$(call int_encode,0),$(call int_encode,2)),$(call int_encode,2))\n$(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,2)),$(call int_encode,2))\n$(call test_assert,$(call int_max,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))\n$(call stop_test)\n\n$(call start_test,max)\n$(call test_assert,$(call max,2,1),2)\n$(call test_assert,$(call max,1,2),2)\n$(call test_assert,$(call max,2,0),2)\n$(call test_assert,$(call max,0,2),2)\n$(call test_assert,$(call max,2,2),2)\n$(call test_assert,$(call max,0,0),0)\n$(call stop_test)\n\n$(call start_test,int_min)\n$(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,1)),$(call int_encode,1))\n$(call test_assert,$(call int_min,$(call int_encode,1),$(call int_encode,2)),$(call int_encode,1))\n$(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_min,$(call int_encode,0),$(call int_encode,2)),$(call int_encode,0))\n$(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,2)),$(call int_encode,2))\n$(call test_assert,$(call int_min,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))\n$(call stop_test)\n\n$(call start_test,min)\n$(call test_assert,$(call min,2,1),1)\n$(call test_assert,$(call min,1,2),1)\n$(call test_assert,$(call min,2,0),0)\n$(call test_assert,$(call min,0,2),0)\n$(call test_assert,$(call min,2,2),2)\n$(call test_assert,$(call min,0,0),0)\n$(call stop_test)\n\n__gmsl_error = $1\n$(call start_test,assert functions)\n$(call test_assert,$(call assert,$(true),ignore),)\n$(call test_assert,$(call assert,$(false),failed),Assertion failure: failed)\n$(call test_assert,$(call assert_exists,gmsl-tests),)\n$(call test_assert,$(call assert_exists,MISSING-gmsl-tests),Assertion failure: file 'MISSING-gmsl-tests' missing)\n$(call stop_test)\n\n$(call start_test,int_inc)\n$(call test_assert,$(call int_inc,$(call int_encode,0)),$(call int_encode,1))\n$(call test_assert,$(call int_inc,$(call int_encode,1)),$(call int_encode,2))\n$(call test_assert,$(call int_inc,$(call int_encode,4)),$(call int_encode,5))\n$(call test_assert,$(call int_inc,$(call int_encode,10)),$(call int_encode,11))\n$(call stop_test)\n\n$(call start_test,inc)\n$(call test_assert,$(call inc,0),1)\n$(call test_assert,$(call inc,1),2)\n$(call test_assert,$(call inc,4),5)\n$(call test_assert,$(call inc,10),11)\n$(call stop_test)\n\n__gmsl_warning = $1\n$(call start_test,int_dec)\n$(call test_assert,$(call int_dec,$(call int_encode,0)),Decrement underflow)\n$(call test_assert,$(call int_dec,$(call int_encode,1)),$(call int_encode,0))\n$(call test_assert,$(call int_dec,$(call int_encode,4)),$(call int_encode,3))\n$(call test_assert,$(call int_dec,$(call int_encode,10)),$(call int_encode,9))\n$(call stop_test)\n\n__gmsl_warning = x x x x x x x x x x\n$(call start_test,dec)\n$(call test_assert,$(call dec,0),10)\n$(call test_assert,$(call dec,1),0)\n$(call test_assert,$(call dec,4),3)\n$(call test_assert,$(call dec,10),9)\n$(call stop_test)\n\n$(call start_test,int_double)\n$(call test_assert,$(call int_double,$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_double,$(call int_encode,1)),$(call int_encode,2))\n$(call test_assert,$(call int_double,$(call int_encode,4)),$(call int_encode,8))\n$(call stop_test)\n\n$(call start_test,double)\n$(call test_assert,$(call double,0),0)\n$(call test_assert,$(call double,1),2)\n$(call test_assert,$(call double,4),8)\n$(call stop_test)\n\n$(call start_test,int_halve)\n$(call test_assert,$(call int_halve,$(call int_encode,0)),$(call int_encode,0))\n$(call test_assert,$(call int_halve,$(call int_encode,2)),$(call int_encode,1))\n$(call test_assert,$(call int_halve,$(call int_encode,8)),$(call int_encode,4))\n$(call test_assert,$(call int_halve,$(call int_encode,7)),$(call int_encode,3))\n$(call stop_test)\n\n$(call start_test,halve)\n$(call test_assert,$(call halve,0),0)\n$(call test_assert,$(call halve,2),1)\n$(call test_assert,$(call halve,8),4)\n$(call test_assert,$(call halve,7),3)\n$(call stop_test) \n\n$(call start_test,gt)\n$(call test_assert,$(call gt,2,3),)\n$(call test_assert,$(call gt,3,2),$(true))\n$(call test_assert,$(call gt,2,2),)\n$(call stop_test)\n\n$(call start_test,gte)\n$(call test_assert,$(call gte,2,3),)\n$(call test_assert,$(call gte,3,2),$(true))\n$(call test_assert,$(call gte,2,2),$(true))\n$(call stop_test)\n\n$(call start_test,lt)\n$(call test_assert,$(call lt,2,3),$(true))\n$(call test_assert,$(call lt,3,2),)\n$(call test_assert,$(call lt,2,2),)\n$(call stop_test)\n\n$(call start_test,lte)\n$(call test_assert,$(call lte,2,3),$(true))\n$(call test_assert,$(call lte,3,2),)\n$(call test_assert,$(call lte,2,2),$(true))\n$(call stop_test)\n\n$(call start_test,eq)\n$(call test_assert,$(call eq,2,3),)\n$(call test_assert,$(call eq,3,2),)\n$(call test_assert,$(call eq,2,2),$(true))\n$(call stop_test)\n\n$(call start_test,ne)\n$(call test_assert,$(call ne,2,3),$(true))\n$(call test_assert,$(call ne,3,2),$(true))\n$(call test_assert,$(call ne,2,2),)\n$(call stop_test)\n\n$(call start_test,int_gt)\n$(call test_assert,$(call int_gt,$(call int_encode,2),$(call int_encode,3)),)\n$(call test_assert,$(call int_gt,$(call int_encode,3),$(call int_encode,2)),$(true))\n$(call test_assert,$(call int_gt,$(call int_encode,2),$(call int_encode,2)),)\n$(call stop_test)\n\n$(call start_test,int_gte)\n$(call test_assert,$(call int_gte,$(call int_encode,2),$(call int_encode,3)),)\n$(call test_assert,$(call int_gte,$(call int_encode,3),$(call int_encode,2)),$(true))\n$(call test_assert,$(call int_gte,$(call int_encode,2),$(call int_encode,2)),$(true))\n$(call stop_test)\n\n$(call start_test,int_lt)\n$(call test_assert,$(call int_lt,$(call int_encode,2),$(call int_encode,3)),$(true))\n$(call test_assert,$(call int_lt,$(call int_encode,3),$(call int_encode,2)),)\n$(call test_assert,$(call int_lt,$(call int_encode,2),$(call int_encode,2)),)\n$(call stop_test)\n\n$(call start_test,int_lte)\n$(call test_assert,$(call int_lte,$(call int_encode,2),$(call int_encode,3)),$(true))\n$(call test_assert,$(call int_lte,$(call int_encode,3),$(call int_encode,2)),)\n$(call test_assert,$(call int_lte,$(call int_encode,2),$(call int_encode,2)),$(true))\n$(call stop_test)\n\n$(call start_test,int_eq)\n$(call test_assert,$(call int_eq,$(call int_encode,2),$(call int_encode,3)),)\n$(call test_assert,$(call int_eq,$(call int_encode,3),$(call int_encode,2)),)\n$(call test_assert,$(call int_eq,$(call int_encode,2),$(call int_encode,2)),$(true))\n$(call stop_test)\n\n$(call start_test,int_ne)\n$(call test_assert,$(call int_ne,$(call int_encode,2),$(call int_encode,3)),$(true))\n$(call test_assert,$(call int_ne,$(call int_encode,3),$(call int_encode,2)),$(true))\n$(call test_assert,$(call int_ne,$(call int_encode,2),$(call int_encode,2)),)\n$(call stop_test)\n\n$(call start_test,gmsl_compatible)\n$(call test_assert,$(call gmsl_compatible,$(gmsl_version)),$(true))\n$(call test_assert,$(call gmsl_compatible,0 9 0),$(true))\n$(call test_assert,$(call gmsl_compatible,0 0 1),$(true))\n$(call test_assert,$(call gmsl_compatible,0 0 0),$(true))\n$(call test_assert,$(call gmsl_compatible,2 0 0),)\n$(call test_assert,$(call gmsl_compatible,1 1 0),)\n$(call test_assert,$(call gmsl_compatible,1 0 8),$(true))\n$(call test_assert,$(call gmsl_compatible,1 0 8),$(true))\n$(call test_assert,$(call gmsl_compatible,1 0 10),$(true))\n$(call test_assert,$(call gmsl_compatible,1 0 11),$(true))\n$(call test_assert,$(call gmsl_compatible,1 0 12),)\n$(call stop_test)\n"
  },
  {
    "path": "build/gmsl/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head>\n  <meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">\n  <title>GNU Make Standard Library</title></head>\n\n<body>\n<h1>GNU Make Standard Library</h1>\nThe GNU Make Standard Library (GMSL) is a collection of functions\nimplemented using native GNU Make functionality that provide list and\nstring manipulation, integer arithmetic, associative arrays, stacks,\nand debugging facilities.&nbsp; The GMSL is released under the BSD License.<br>\n<br>\n<a href=\"http://sourceforge.net/projects/gmsl/\">[Project Page]</a> <a href=\"http://sourceforge.net/project/showfiles.php?group_id=129887\">[Download]</a>\n<a href=\"http://sourceforge.net/forum/forum.php?forum_id=443916\">[Discussion\nForum]</a><br>\n<h2>Using GMSL</h2>\nThe two files needed are <span style=\"font-family: monospace;\">gmsl</span>\nand <span style=\"font-family: monospace;\">__gmsl</span>.&nbsp; To\ninclude the GMSL in your Makefile do<br>\n<pre style=\"margin-left: 40px;\">include gmsl</pre>\n<span style=\"font-family: monospace;\">gmsl</span> automatically includes<span style=\"font-family: monospace;\"> __gmsl</span>.&nbsp; To check that\nyou have the right version of <span style=\"font-family: monospace;\">gmsl</span>\nuse the <span style=\"font-family: monospace;\">gmsl_compatible</span>\nfunction (see\nbelow). The current version is <span style=\"font-family: monospace;\">1\n0 11</span>.<br>\n<br>\nThe GMSL package also includes a test suite for GMSL.&nbsp; Just run <span style=\"font-family: monospace;\">make -f gmsl-tests</span>.<br>\n<h2>Logical Operators</h2>GMSL has boolean $(true) (a non-empty string)\nand $(false) (an empty string).&nbsp; The following operators can be\nused with those variables.<br>\n<br>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-weight: bold;\">not</span><br>\n\n<br>\n\n<span style=\"font-family: monospace;\">Arguments: A boolean value</span><br style=\"font-family: monospace;\">\n\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns $(true) if the boolean is $(false) and vice versa</span><br style=\"font-family: monospace;\">\n\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\"></span><span style=\"font-weight: bold;\">and</span><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns $(true) if both of the booleans are true</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\">or</span><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns $(true) if either of the booleans is true</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\">xor</span><br style=\"font-weight: bold;\">\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns $(true) if exactly one of the booleans is true</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\">nand</span><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns value of 'not and'</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\">nor</span><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns value of 'not or'</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\"><span style=\"font-weight: bold;\">xnor</span><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two boolean values</span><br style=\"font-family: monospace;\">\n<span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp; Returns value of 'not xor'</span><br style=\"font-family: monospace;\">\n<hr style=\"width: 100%; height: 2px; font-family: monospace;\">\n<h2>List Manipulation Functions</h2>\n&nbsp;A list is a string of characters; the list separator is a space.<br>\n\n<br>\n<hr style=\"width: 100%; height: 2px;\"><b>first</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the first element of a list<br>\n</span>\n<hr><b>last</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the last element of a list<br>\n</span>\n<hr><b>rest</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the list with the first element\nremoved<br>\n</span>\n<hr><b>chop</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the list with the last element removed<br>\n</span>\n<hr><b>map</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of function to\n$(call) for each element of list<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: List to\niterate over calling the function in 1<br>\nReturns:&nbsp;&nbsp;&nbsp;The list after calling the function on each\nelement<br>\n</span>\n<hr><b>pairmap</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of function to\n$(call) for each pair of elements<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: List to\niterate over calling the function in 1<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3: Second\nlist to iterate over calling the function in 1<br>\nReturns:&nbsp;&nbsp;&nbsp;The list after calling the function on each\npair of elements<br>\n</span>\n<hr><b>leq</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list to compare\nagainst...<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: ...this\nlist<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the two lists are identical<br>\n</span>\n<hr><b>lne</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list to compare\nagainst...<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: ...this\nlist<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the two lists are different<br>\n</span>\n<hr><b>reverse</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list to reverse<br>\nReturns:&nbsp;&nbsp;&nbsp;The list with its elements in reverse order<br>\n</span>\n<hr><b>uniq</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list to deduplicate<br>\nReturns:&nbsp;&nbsp;&nbsp;The list with elements in order without duplicates<br>\n</span>\n<hr><b>length</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list<br>\nReturns:&nbsp;&nbsp;&nbsp;The number of elements in the list<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>String Manipulation Functions</h2>\nA string is any sequence of characters.<br>\n<br>\n<hr style=\"width: 100%; height: 2px;\"><b>seq</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A string to compare\nagainst...<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: ...this\nstring<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the two strings are\nidentical<br>\n</span>\n<hr><b>sne</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A string to compare\nagainst...<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: ...this\nstring<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the two strings are not\nthe same<br>\n</span>\n<hr><b>strlen</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A string<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the length of the string<br>\n</span>\n<hr><b>substr</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A string<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Start offset (first character is 1)<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3: Ending offset (inclusive)<br>Returns:&nbsp;&nbsp;&nbsp;Returns a substring<br>\n</span>\n<hr><b>split</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: The character to\nsplit on<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: A\nstring to split<br>\nReturns:&nbsp;&nbsp;&nbsp;Splits a string into a list separated by\nspaces at the split<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; character\nin the first argument<br>\n</span>\n<hr><b>merge</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: The character to\nput between fields<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: A list\nto merge into a string<br>\nReturns:&nbsp;&nbsp;&nbsp;Merges a list into a single string, list\nelements are separated<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; by the\ncharacter in the first argument<br>\n</span>\n<hr><b>tr</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: The list of\ncharacters to translate from <br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: The\nlist of characters to translate to<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3: The\ntext to translate<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the text after translating characters<br>\n</span>\n<hr><b>uc</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Text to upper case<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the text in upper case<br>\n</span>\n<hr><b>lc</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Text to lower case<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the text in lower case<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>Set Manipulation Functions</h2>\nSets are represented by sorted, deduplicated lists.  To create a set\nfrom a list use <span style=\"font-family:\nmonospace;\">set_create</span>, or start with the <span\nstyle=\"font-family: monospace;\">empty_set</span> and <span\nstyle=\"font-family: monospace;\">set_insert</span> individual elements.\nThe empty set is defined as <span style=\"font-family:\nmonospace;\">empty_set</span>.<p>\n\n<hr><b>set_create</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A list of set elements<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the newly created set<br>\n</span>\n\n<hr><b>set_insert</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A single element to add to a set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: A set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the set with the element added<br>\n</span>\n\n<hr><b>set_remove</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A single element to remove from a set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: A set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the set with the element removed<br>\n</span>\n\n<hr><b>set_is_member</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A single element<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: A set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the element is in the set<br>\n</span>\n\n<hr><b>set_union</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: Another set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the union of the two sets<br>\n</span>\n\n<hr><b>set_intersection</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: Another set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the intersection of the two sets<br>\n</span>\n\n<hr><b>set_is_subset</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: Another set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the first set is a subset of the second<br>\n</span>\n\n<hr><b>set_equal</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A set<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2: Another set<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns $(true) if the two sets are identical<br>\n</span>\n\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>Integer Arithmetic Functions</h2>\nIntegers are represented by lists with the equivalent number of\nx's.&nbsp; For example the number 4 is x x x x.&nbsp; The maximum\ninteger that the library can handle as <span style=\"font-style: italic;\">input</span> (i.e. as the argument to a\ncall to <span style=\"font-family: monospace;\">int_encode</span>) is\n65536. There is no limit on integer size for internal computations or\noutput.<br>\n<br>\nThe arithmetic library functions come in two forms: one form of each\nfunction takes integers as arguments and the other form takes the\nencoded form (x's created by a call to <span style=\"font-family: monospace;\">int_encode</span>).&nbsp; For example,\nthere are two plus functions: <span style=\"font-family: monospace;\">plus</span>\n(called with integer arguments and returns an integer) and <span style=\"font-family: monospace;\">int_plus</span> (called with encoded\narguments and returns an encoded result).<br>\n<br>\n<span style=\"font-family: monospace;\">plus</span> will be slower than <span style=\"font-family: monospace;\">int_plus</span> because its arguments\nand result have to be translated between the x's format and\nintegers.&nbsp; If doing a complex calculation use the <span style=\"font-family: monospace;\">int_*</span> forms with a single\nencoding of inputs and single decoding of the output.&nbsp; For simple\ncalculations the direct forms can be used.<br>\n<br>\n<hr style=\"width: 100%; height: 2px;\"><b>int_decode</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number of x's\nrepresentation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the integer for human consumption\nthat is represented<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; by the\nstring of x's<br>\n</span>\n<hr><b>int_encode</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in\nhuman-readable integer form<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the integer encoded as a string of x's<br>\n</span>\n<hr><b>int_plus</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\nnumber in x's represntation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the sum of the two numbers in x's\nrepresentation<br>\n</span>\n<hr><b>plus (wrapped version of int_plus)</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\ninteger<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the sum of the two integers<br>\n</span>\n<hr><b>int_subtract</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\nnumber in x's represntation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the difference of the two numbers in\nx's representation,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or outputs\nan error on a numeric underflow<br>\n</span>\n<hr><b>subtract (wrapped version of int_subtract)</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\ninteger<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the difference of the two integers,<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or outputs\nan error on a numeric underflow<br>\n</span>\n<hr><b>int_multiply</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\nnumber in x's represntation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the product of the two numbers in x's\nrepresentation<br>\n</span>\n<hr><b>multiply (wrapped version of int_multiply)</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\ninteger<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the product of the two integers<br>\n</span>\n<hr><b>int_divide</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\nnumber in x's represntation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the result of integer division of\nargument 1 divided<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; by\nargument 2 in x's representation<br>\n</span>\n<hr><b>divide (wrapped version of int_divide)</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\ninteger<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the integer division of the first\nargument by the second<br>\n</span>\n<hr><b>int_max, int_min</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\nnumber in x's represntation<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the maximum or minimum of its\narguments in x's<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\nrepresentation<br>\n</span>\n<hr><b>max, min</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Another\ninteger<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns the maximum or minimum of its integer\narguments<br>\n</span>\n<hr><b>int_gt, int_gte, int_lt, int_lte, int_eq, int_ne</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two x's representation\nnumbers to be compared<br>\nReturns:&nbsp;&nbsp;&nbsp;$(true) or $(false)<br>\n<br>\nint_gt First argument greater than second argument<br>\nint_gte First argument greater than or equal to second argument<br>\nint_lt First argument less than second argument <br>\nint_lte First argument less than or equal to second argument<br>\nint_eq First argument is numerically equal to the second argument<br>\nint_ne First argument is not numerically equal to the second argument<br>\n</span>\n<hr><b>gt, gte, lt, lte, eq, ne</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: Two integers to be\ncompared<br>\nReturns:&nbsp;&nbsp;&nbsp;$(true) or $(false)<br>\n<br>\ngt First argument greater than second argument<br>\ngte First argument greater than or equal to second argument<br>\nlt First argument less than second argument <br>\nlte First argument less than or equal to second argument<br>\neq First argument is numerically equal to the second argument<br>\nne First argument is not numerically equal to the second argument<br>\n</span>\nincrement adds 1 to its argument, decrement subtracts 1. Note that<br>\ndecrement does not range check and hence will not underflow, but<br>\nwill incorrectly say that 0 - 1 = 0<br>\n<hr><b>int_inc</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\nReturns:&nbsp;&nbsp;&nbsp;The number incremented by 1 in x's\nrepresentation<br>\n</span>\n<hr><b>inc</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\nReturns:&nbsp;&nbsp;&nbsp;The argument incremented by 1<br>\n</span>\n<hr><b>int_dec</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\nReturns:&nbsp;&nbsp;&nbsp;The number decremented by 1 in x's\nrepresentation<br>\n</span>\n<hr><b>dec</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\nReturns:&nbsp;&nbsp;&nbsp;The argument decremented by 1<br>\n</span>\n<hr><b>int_double</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\nReturns:&nbsp;&nbsp;&nbsp;The number doubled (i.e. * 2) and returned in\nx's representation<br>\n</span>\n<hr><b>double</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\nReturns:&nbsp;&nbsp;&nbsp;The integer times 2<br>\n</span>\n<hr><b>int_halve</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A number in x's\nrepresentation<br>\nReturns:&nbsp;&nbsp;&nbsp;The number halved (i.e. / 2) and returned in\nx's representation<br>\n</span>\n<hr><b>halve</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: An integer<br>\nReturns:&nbsp;&nbsp;&nbsp;The integer divided by 2<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>Associative Arrays</h2>\nAn associate array maps a key value (a string with no spaces in it) to\na single value (any string).&nbsp;&nbsp;&nbsp; <br>\n<b><br>\n</b>\n<hr style=\"width: 100%; height: 2px;\"><b>set</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of associative\narray<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: The key\nvalue to associate<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3: The\nvalue associated with the key<br>\nReturns:&nbsp;&nbsp;&nbsp;None<br>\n</span>\n<hr><b>get</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of associative\narray<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: The key\nto retrieve<br>\nReturns:&nbsp;&nbsp;&nbsp;The value stored in the array for that key<br>\n</span>\n<hr><b>keys</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of associative\narray<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns a list of all defined keys in the\narray<br>\n</span>\n<hr><b>defined</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of associative\narray<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: The key\nto test<br>\nReturns:&nbsp;&nbsp;&nbsp;Returns true if the key is defined (i.e. not\nempty)<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>Named Stacks</h2>\nA stack is an ordered list of strings (with no spaces in them).<br>\n<br>\n<hr style=\"width: 100%; height: 2px;\"><b>push</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of stack<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: Value\nto push onto the top of the stack (must not contain<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a space)<br>\nReturns:&nbsp;&nbsp;&nbsp;None<br>\n</span>\n<hr><b>pop</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of stack<br>\nReturns:&nbsp;&nbsp;&nbsp;Top element from the stack after removing it<br>\n</span>\n<hr><b>peek</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of stack<br>\nReturns:&nbsp;&nbsp;&nbsp;Top element from the stack without removing it<br>\n</span>\n<hr><b>depth</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of stack<br>\nReturns:&nbsp;&nbsp;&nbsp;Number of items on the stack<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><span style=\"font-family: monospace;\"></span>\n<h2>Miscellaneous and Debugging Facilities</h2>\nGMSL defines the following constants; all are accessed as normal GNU\nMake variables by wrapping them in <span style=\"font-family: monospace;\">$()</span> or <span style=\"font-family: monospace;\">${}</span>.<br>\n<br>\n<table style=\"text-align: left;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n  <tbody>\n    <tr>\n      <td><span style=\"font-style: italic;\">Constant</span><br>\n      </td>\n      <td><span style=\"font-style: italic;\">Value</span><br>\n      </td>\n      <td><span style=\"font-style: italic;\">Purpose</span><br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">true</span><br>\n      </td>\n      <td><span style=\"font-family: monospace;\">T</span><br>\n      </td>\n      <td>Boolean for <span style=\"font-family: monospace;\">$(if)</span>\nand return from&nbsp; GMSL functions<br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">false</span><br>\n      </td>\n      <td><br>\n      </td>\n      <td>Boolean for <span style=\"font-family: monospace;\">$(if)</span>\nand return from GMSL functions<br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">gmsl_version</span><br>\n      </td>\n      <td><span style=\"font-family: monospace;\">1 0 0</span><br>\n      </td>\n      <td>GMSL version number as list: major minor revision<br>\n      </td>\n    </tr>\n  </tbody>\n</table>\n<span style=\"font-weight: bold;\"><br>\ngmsl_compatible</span><span style=\"font-family: monospace;\"><br>\n<br>\nArguments: List containing the desired library version number (maj min\nrev)<br>\n</span><span style=\"font-family: monospace;\">Returns:&nbsp;&nbsp;\n$(true) if this version of the library is compatible<br>\n</span><span style=\"font-family: monospace;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\nwith the requested version number, otherwise $(false)</span>\n<hr><b>gmsl-print-% (target not a function)</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: The % should be\nreplaced by the name of a variable that you<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wish to\nprint out.<br>\nAction:&nbsp;&nbsp;&nbsp; Echos the name of the variable that matches\nthe % and its value.<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For\nexample, 'make gmsl-print-SHELL' will output the value of<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the SHELL\nvariable<br>\n</span>\n<hr><b>assert</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: A boolean that must\nbe true or the assertion will fail<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: The\nmessage to print with the assertion<br>\nReturns:&nbsp;&nbsp;&nbsp;None<br>\n</span>\n<hr><b>assert_exists</b><br>\n<br>\n<span style=\"font-family: monospace;\">Arguments: 1: Name of file that\nmust exist, if it is missing an assertion<br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; will be\ngenerated<br>\nReturns:&nbsp;&nbsp;&nbsp;None<br>\n</span>\n<hr style=\"width: 100%; height: 2px;\"><br>\nGMSL has a number of environment variables (or command-line overrides)\nthat control various bits of functionality:<br>\n<br>\n<table style=\"text-align: left;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n  <tbody>\n    <tr>\n      <td><span style=\"font-style: italic;\">Variable</span><br>\n      </td>\n      <td><span style=\"font-style: italic;\">Purpose</span><br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">GMSL_NO_WARNINGS</span><br>\n      </td>\n      <td>If set prevents GMSL from outputting warning messages:\nartithmetic functions generate underflow warnings.<br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">GMSL_NO_ERRORS</span><br>\n      </td>\n      <td>If set prevents GMSL from generating fatal errors: division\nby zero or failed assertions are fatal.<br>\n      </td>\n    </tr>\n    <tr>\n      <td><span style=\"font-family: monospace;\">GMSL_TRACE</span><br>\n      </td>\n      <td>Enables function tracing.&nbsp; Calls to GMSL functions will\nresult in name and arguments being traced.<br>\n      </td>\n    </tr>\n  </tbody>\n</table>\n<span style=\"font-family: monospace;\"></span><br>\n<hr>\nCopyright (c) 2005-2006 <a href=\"http://www.jgc.org/\">John Graham-Cumming</a>.<br>\n<hr style=\"width: 100%; height: 2px;\">\n<table style=\"width: 100%; text-align: left;\" border=\"0\" cellpadding=\"2\" cellspacing=\"2\">\n  <tbody>\n    <tr>\n      <td style=\"width: 50%;\">John Graham-Cumming's work on this\nproject was sponsored by <a href=\"http://www.electric-cloud.com/\">Electric\nCloud, Inc</a>.<br>\n      <a href=\"http://www.electric-cloud.com/\"><img alt=\"\" src=\"http://gmsl.sf.net/ec_logo.gif\" style=\"border: 0px solid ; width: 223px; height: 47px;\"></a><br>\n      </td>\n      <td align=\"right\">\n      <p><a href=\"http://sourceforge.net/\"><img src=\"http://sourceforge.net/sflogo.php?group_id=129887&amp;type=1\" alt=\"SourceForge.net Logo\" border=\"0\" height=\"31\" width=\"88\"></a></p>\n      </td>\n    </tr>\n  </tbody>\n</table>\n</body></html>\n"
  },
  {
    "path": "build/instruments/README.md",
    "content": "This directory contains a number of shell scripts, which we will\ncall the \"dev-scripts\", that are only used to develop the NDK\nitself, i.e. they are not needed when using ndk-build to build\napplicative native code.\n\nTheir purpose is to handle various sophisticated issues:\n\n * Rebuilding host cross-toolchains for our supported CPU ABIs.\n\n * Rebuilding other required host tools (e.g. ndk-stack) from sources.\n\n * Rebuilding all target-specific prebuilt binaries from sources (this requires\n   working host cross-toolchains).\n\n * Packaging final NDK release tarballs, including adding samples and\n   documentation which normally live in $NDK/../development/ndk.\n\nThis document is here to explain how to use these dev-scripts and how everything\nis architected / designed, in case you want to maintain it.\n\nGenerally, everything dev-script supports the --help option to display a\ndescription of the program and the list of all supported options. Also, debug\ntraces can be activated by using the --verbose option. Use it several times to\nincrease the level of verbosity.\n\nNote that all Windows host programs can be built on Linux if you have the\n`mingw32` cross-toolchain installed (`apt-get install mingw32` on Debian or\nUbuntu). You will need to add the `--mingw` option when invoking the script.\n\nAll dev-scripts rebuilding host programs on Linux and Darwin will only generate\n32-bit programs by default. You can experiment with 64-bit binary generation by\nadding the `--try-64` option. Note that as of now, 64-bit binaries are never\ndistributed as part of official NDK releases.\n\nWhen building 32-bit Linux host programs, the dev-scripts will look for\n`$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8`,\nwhich is part of the Android platform source tree. It is a special toolchain\nthat ensures that the generated programs can run on old systems like Ubuntu 8.04\nthat only have GLibc 2.7. Otherwise, the corresponding binaries may not run due\nto ABI changes in more recent versions of GLibc.\n\nI. Organization:\n================\n\nFirst, a small description of the NDK's overall directory structure:\n\nbuild/core\n----------\n\nContains the main NDK build system used when `ndk-build`. Relies heavily on GNU\nMake 3.81+ but isn't used by any of the scripts described here.\n\nbuild/instruments\n-----------\n\nContains all the dev-scripts that are described in this document. More on this\nlater.\n\nsources/host-tools\n------------------\n\nContains sources of various libraries or programs that will be compiled to\ngenerate useful host programs for the final NDK installation. For example,\n$NDK/sources/host-tools/ndk-stack/ contains the sources of the `ndk-stack`\nprogram.\n\nsources/cxx-stl\n---------------\n\nContains the sources of various C++ runtime and libraries that can be used with\n`ndk-build`. See docs/CPLUSPLUS-SUPPORT.html for more details.\n\nsources/cxx-stl/llvm-libc++\n---------------------------\n\nContains the sources of a port of LLVM's libc++ that can be used with ndk-build.\nThe dev-script `build-cxx-stl.sh` can be used to generate prebuilt libraries\nfrom these sources, that will be copied under this directory.\n\nsources/cxx-stl/gnu-libstdc++\n-----------------------------\n\nThis directory doesn't contain sources at all, only an Android.mk. The\ndev-script `build-gnu-libstdc++.sh` is used to generate prebuilt libraries from\nthe sources that are located in the toolchain source tree instead.\n\nsources/cxx-stl/system\n----------------------\n\nThis directory contains a few headers used to use the native system Android C++\nruntime (with _very_ limited capabilities), a.k.a. /system/lib/libstdc++.so. The\nprebuilt version of this library is generated by the `gen-platform.sh`\ndev-script described later, but it never placed in this directory.\n\nsources/android/libthread\\_db\n-----------------------------\n\nThis directory contains the sources of the libthread\\_db implementation that is\nlinked into the prebuilt target gdbserver binary.\n\nsources\n-------\n\nThe rest of `sources` is used to store the sources of helper libraries used with\n`ndk-build`. For example, the `cpu-features` helper library is under\n`sources/android/cpu-features`.\n\n$DEVNDK a.k.a $NDK/../development/ndk\n-------------------------------------\n\nThis directory contains platform-specific files. The reason why it it is\nseparate from $NDK is because it is not primarily developed in the open.\n\nMore specifically:\n\n * All $NDK development happens in the public AOSP repository ndk.git.\n\n * Any $DEVNDK development that happens in the public AOSP development.git\n   repository is auto-merged to the internal tree maintained by Google.\n\n * $DEVNDK developments that are specific to an yet-unreleased version of the\n   system happen only in the internal tree. They get back-ported to the public\n   tree only when the corresponding system release is open-sourced.\n\n$DEVNDK/platforms/android-$PLATFORM\n-----------------------------------\n\nContains all files that are specific to a given API level `$PLATFORM`, that were\nnot already defined for the previous API level.\n\nFor example, android-3 corresponds to Android 1.5, and android-4 corresponds to\nAndroid 1.6. The platforms/android-4 directory only contains files that are\neither new or modified, compared to android-3.\n\n$DEVNDK/platforms/android-$PLATFORM/include\n-------------------------------------------\n\nContains all system headers exposed by the NDK for a given platform. All these\nheaders are independent from the CPU architecture of target devices.\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH\n----------------------------------------------\n\nContains all files that are specific to a given $PLATFORM level and a specific\nCPU architecture. $ARCH is typically 'arm' or 'x86'\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/include\n------------------------------------------------------\n\nContains all the architecture-specific headers for a given API level.\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/lib\n--------------------------------------------------\n\nContains several CPU-specific object files and static libraries that are\nrequired to build the host cross-toolchains properly.\n\nBefore NDK r7, this also contains prebuilt system shared libraries that had been\nhand-picked from various platform builds. These have been replaced by symbol\nlist files instead (see below).\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/symbols\n------------------------------------------------------\n\nContains, for each system shared library exposed by the NDK, two files\ndescribing the dynamic symbols it exports, for example, for the C library:\n\n    libc.so.functions.txt -> list of exported function names\n    libc.so.variables.txt -> list of exported variable names\n\nThese files were introduced in NDK r7 and are used to generate stub shared\nlibraries that can be used by ndk-build at link time. These shared libraries\ncontain the same symbols that make the NDK ABI for the given version, but do not\nfunction.\n\nThese files can be generated from a given platform build using the\n`dev-platform-import.sh` dev-script, described later in this document.\n\nThis is handy to compare which symbols were added between platform releases (and\ncheck that nothing disappeared).\n\n$DEVNDK/platforms/android-$PLATFORM/samples\n-------------------------------------------\n\nContains samples that are specific to a given API level. These are\nusually copied into $INSTALLED\\_NDK/samples/ by the `gen-platforms.sh`\nscript.\n\n$NDK/platforms\n--------------\n\nNot to be confused with $DEVNDK/platforms/, this directory is not part of the\nNDK git directory (and is specifically listed in $NDK/.gitignore) but of its final\ninstallation.\n\nIts purpose is to hold the fully expanded platform-specific files. This means\nthat, unlike $DEVNDK/platforms/android-$PLATFORM, the\n$NDK/platforms/android-$PLATFORM will contain _all_ the files that are specific\nto API level $PLATFORM.\n\nMoreover, the directory is organized slightly differently, i.e. as toolchain\nsysroot, i.e. for each supported $PLATFORM and $ARCH values, it provides two\ndirectories:\n\n    $NDK/platforms/android-$PLATFORM/arch-$ARCH/usr/include\n    $NDK/platforms/android-$PLATFORM/arch-$ARCH/usr/lib\n\nNotice the `usr` subdirectory here. It is required by GCC to be able to use the\ndirectories with --with-sysroot. For example, to generate binaries that target\nAPI level 5 for the arm architecture, one would use:\n\n    $TOOLCHAIN_PREFIX-gcc --with-sysroot=$NDK/platforms/android-5/arch-arm\n\nWhere `$TOOLCHAIN_PREFIX` depends on the exact toolchain being used.\n\nThe dev-script `gen-platforms.sh` is used to populate $NDK/platforms. Note that\nby default, the script does more, see its detailed description below.\n\nII. Host toolchains:\n====================\n\nThe host toolchains are the compiler, linker, debugger and other crucial\nprograms used to generate machine code for the target Android system supported\nby the NDK.\n\nII.1 Getting the toolchain sources:\n-----------------------------------\n\nThe AOSP toolchain/ repository contains the source for the toolchains used to\nbuild the Android platform and in the NDK.\n\nThe master-ndk branch of AOSP contains an already checked out and patched\nversion of the toolchain repository at toolchain/. The old process of using\ndownload-toolchain-sources.sh is now obsolete.\n\nThe toolchains binaries are typically placed under the directory\n$NDK/toolchains/$NAME/prebuilt/$SYSTEM, where $NAME is the toolchain name's full\nname (e.g. arm-linux-androideabi-4.8), and $SYSTEM is the name of the host\nsystem it is meant to run on (e.g. `linux-x86`, `windows` or `darwin-x86`)\n\nI.2. Building the toolchains:\n-----------------------------\n\nFirst you will need to build a proper \"sysroot\" directory before being able to\nconfigure/build them.\n\nA sysroot is a directory containing system headers and libraries that the\ncompiler will use to build a few required target-specific binaries (e.g.\nlibgcc.a)\n\nTo do that, use:\n\n    $NDK/build/instruments/gen-platforms.sh --minimal\n\nThis will populate $NDK/platforms/ with just the files necessary to rebuild the\ntoolchains. Note that without the --minimal option, the script will fail without\nprebuilt toolchain binaries.\n\nOnce the sysroots are in place, use `build-gcc.sh` by providing the path to the\ntoolchain sources root directory, a destination NDK installation directory to\nbuild, and the full toolchain name.\n\nFor example, to rebuild the arm and x86 prebuilt toolchain binaries in the\ncurrent NDK directory (which can be handy if you want to later use them to\nrebuild other target prebuilts or run tests), do:\n\n    $NDK/build/instruments/build-gcc.sh /tmp/ndk-$USER/src $NDK \\\n        arm-linux-androideabi-4.8\n    $NDK/build/instruments/build-gcc.sh /tmp/ndk-$USER/src $NDK x86-4.8\n\nHere, we assume you're using the master-ndk branch as described in the previous\nsection.\n\nThis operation can take some time. The script automatically performs a parallel\nbuild to speed up the build on multi-core machine (use the -j<number> option to\ncontrol this), but the GCC sources are very large, so expect to wait a few\nminutes.\n\nFor the record, on a 2.4 GHz Xeon with 16 Hyper-threaded cores and 12GB of\nmemory, rebuilding each toolchain takes between 2 and 4 minutes.\n\nYou need to be on Linux to build the Windows binaries, using the \"mingw32\"\ncross-toolchain (install it with \"apt-get install mingw32\" on Ubuntu). To do so\nuse the \"--mingw\" option, as in:\n\n    $NDK/build/instruments/build-gcc.sh --mingw \\\n        /tmp/ndk-$USER/src $NDK arm-linux-androideabi-4.8\n\n    $NDK/build/instruments/build-gcc.sh --mingw \\\n        /tmp/ndk-$USER/src $NDK x86-4.8\n\nThe corresponding binaries are installed under\n$NDK/toolchains/$NAME/prebuilt/windows Note that these are native Windows\nprograms, not Cygwin ones.\n\nBuilding the Windows toolchains under MSys and Cygwin is completely unsupported\nand highly un-recommended: even if it works, it will probably take several\nhours, even on a powerful machine :-(\n\nThe Darwin binaries must be generated on a Darwin machine. Note that the script\nwill try to use the 10.5 XCode SDK if it is installed on your system. This\nensures that the generated binaries run on Leopard, even if you're building on a\nmore recent version of the system.\n\nOnce you've completed your builds, you should be able to generate the other\ntarget-specific prebuilts.\n\nIII. Target-specific prebuilt binaries:\n=======================================\n\nA final NDK installation comes with a lot of various target-specific prebuilt\nbinaries that must be generated from sources once you have working host\ntoolchains.\n\nIII.1.: Preparation of platform sysroots:\n-----------------------------------------\n\nEach target prebuilt is handled by a specific dev-script. HOWEVER, all these\nscript require that you generate a fully populated $NDK/platforms/ directory\nfirst. To do that, simply run:\n\n    $NDK/gen-platforms.sh\n\nNote that we used this script with the --minimal option to generate the host\ntoolchains. That's because without this flag, the script will also auto-generate\ntiny versions of the system shared libraries that will be used at link-time when\nbuilding our target prebuilts.\n\nIII.2.: Generation of gdbserver:\n---------------------------------\n\nA target-specific `gdbserver` binary is required. This is a small program that\nis run on the device through `ndk-gdb` during debugging. For a variety of\ntechnical reasons, it must be copied into a debuggable project's output\ndirectory when `ndk-build` is called.\n\nThe prebuilt binary is placed under $NDK/toolchains/$NAME/prebuilt/gdbserver in\nthe final NDK installation. You can generate with `build-gdbserver.sh` and takes\nthe same parameters than `build-gcc.sh`. So one can do:\n\n    $NDK/build/instruments/build-gcc.sh /tmp/ndk-$USER/src $NDK \\\n        arm-linux-androideabi-4.8\n    $NDK/build/instruments/build-gcc.sh /tmp/ndk-$USER/src $NDK x86-4.8\n\n\nIII.3. Generating C++ runtime prebuilt binaries:\n-----------------------------------------------\n\nSources and support files for several C++ runtimes / standard libraries are\nprovided under $NDK/sources/cxx-stl/. Several dev-scripts are provided to\nrebuild their binaries. The scripts place them to their respective location\nunless you use the --out-dir=<path> option.\n\nNote that:\n\n * Each script will generate the binaries for all the CPU ABIs supported by the\n   NDK, e.g. armeabi-v7a, x86 and mips. You can restrict them using the\n   --abis=<list> option though.\n\n - The GNU libstdc++ dev-script requires the path to the toolchain sources,\n   since this is where the library's sources are located.\n\nAn example usage would be:\n\n    $NDK/build/instruments/build-llvm-libc++.sh\n    $NDK/build/instruments/build-gnu-libstdc++.sh /tmp/ndk-$USER/src\n\nNote that generating such binaries can take a few minutes. You can follow the\nbuild by using the --verbose option to display what's going on.\n\nIV. Other host prebuilt binaries:\n=================================\n\nThere are a few other host prebuilt binaries that are needed for a full NDK\ninstallation. Their sources are typically installed under\n$NDK/sources/host-tools/\n\nNote that the corresponding dev-script recognize the --mingw and --try-64\noptions described at the end of section I above.\n\nIV.1.: Building `ndk-stack`:\n---------------------------\n\nThe `build-ndk-stack.sh` script can be used to rebuild the `ndk-stack` helper\nhost program. See docs/NDK-STACK.html for a usage description.  To build it,\njust do:\n\n    $NDK/build/instruments/build-ndk-stack.sh\n\nIV.2.: Building `ndk-depends`:\n-----------------------------\n\nSimilar to `ndk-stack`, see the `build-ndk-depends.sh` script.\n\nV. Packaging all prebuilts:\n===========================\n\nGenerating all the prebuilt binaries takes a lot of time and is no fun.  To\navoid doing it again and again, it is useful to place all the generated files\naside in special tarballs.\n\nMost dev-scripts generating them typically support a --package-dir=<path> option\nto do this, where <path> points to a directory that will store compressed\ntarballs of the generated binaries.\n\nA dev-script is provided to rebuild _and_ package all prebuilts. It is called\n`rebuild-all-prebuilt.sh`. Note that by default, it will automatically place the\nprebuilt tarballs under /tmp/ndk-$USER/prebuilt-$DATE, where $DATE is the\ncurrent date in ISO order.\n\nBy default, this only rebuilds the host prebuilts for the current host system.\nYou can use --mingw to force the generation of Windows binaries on Linux.\n\nAdditionally, you can use the --darwin-ssh=<hostname> option to launch the build\nof the Darwin binaries from a Linux machine, by using ssh to access a remote\nDarwin machine. The script will package all required sources into a temporary\ntarball, copy it to the remote machine, launch the build there, then copy back\nall binaries to your own machine.\n\nThis means that it is possible to generate the host binaries for all supported\nhost systems from Linux (provided you have ssh access to a Darwin machine).\n\nAlternatively, you can run `rebuild-all-prebuilt.sh` on a Darwin machine.\n\nOnce you have used the script three times (once per supported host systems), you\nshould have plenty of files under /tmp/ndk-$USER/prebuilt-$DATE.  For the\nrecord, with NDK r7, the list was:\n\nVI. Packaging NDK releases:\n===========================\n\nUse the `package-release.sh` dev-script to generate full NDK release packages.\nThese contain everything needed by a typical NDK user, including:\n\n * All prebuilt binaries (host toolchains, host tools, target libs, etc...).\n * All samples (including those collected from $DEVNDK/platforms/).\n * All documentation.\n\nYou need to have a directory containing prebuilt tarballs, as described in the\nprevious section. You can use it as:\n\n    $NDK/build/instruments/package-release.sh \\\n        --release=<name> \\\n        --systems=<list> \\\n        --arch=<list> \\\n        --prebuilt-dir=<path>\n\nThe --release option is optional and allows you to provide a name for your\ngenerated NDK archive. More specifically, the archive file name will be\nsomething like android-ndk-$RELEASE-$SYSTEM.tar.bz2, where $RELEASE is the\nrelease name, and $SYSTEM the supported host system (e.g. linux-x86).\n\nBy default, i.e. without the option, $RELEASE will be set to the current $DATE.\n\nThe --systems=<list> is optional, but can be used to limit the number of host\nsystems you want to generate for. <list> must be a comma-separated list of\nsystem names (from `linux-x86`, `windows` and `darwin-x86`). This is useful if\nyou're working on a experimental feature and don't have the time to regenerate\nthe host toolchains for all systems. It allows you to generate an experimental\npackage that you can distribute to third-party for experimentation.\n\nBy default, i.e. without the option, the scripts tries to build NDK archives for\nall supported host systems.\n\nThe --arch=<list> is also optional, but can be used to limit the number of\ntarget architectures you want to generate for. <list> must be a comma-separated\nlist of CPU architectures (e.g. from `arm` and `x86`). Without the option, this\nwill try to build packages that support all architectures.\n\nFinally, --prebuilt-dir=<path> must point to the directory that contains the\nprebuilt tarballs described in section V. Following our previous example, one\ncould use --prebuilt-dir=/tmp/ndk-$USER/prebuilt here.\n\nVI. Testing:\n============\n\nThe $NDK/tests directory contains a number of NDK unit-tests that can be used to\nverify that the generated NDK packages or the working NDK tree still behave\ncorrectly.\n\nIf you have an NDK package archive, you can run the following to run the test\nsuite against it:\n\n    $NDK/tests/run-tests.sh --package=<ndk-archive>\n\nThis will uncompress the NDK archive in a temporary directory, then run all the\ntests with it. When all tests have run, the temporary directory is removed\nautomatically.\n\nYou can also point to an existing NDK installation with --ndk=<path>, as in:\n\n    $NDK/tests/run-tests.sh --ndk=<path>\n\nWhere <path> points to another NDK installation. The script will run the test\nsuite present under $NDK/tests/, not the one in the remote NDK directory.\n\nIf you don't use any option, the test suite will be run with the current NDK\ndirectory. This can only work if you have generated or unpacked all prebuilt\narchives into it before that.\n\nYou can get more traces from the tests by using --verbose. Use it twice to see\neven more traces.\n\nThere are several kinds of tests:\n\n * 'build tests' are used to test the building capabilities of the NDK.\n   I.e. the tests will only use them to check that the NDK build system\n   didn't regress. The corresponding generated binaries are never used\n   otherwise.\n\n * 'device tests' are used to test both the build and the behaviour of\n   the generated code. If the `adb` program is in your path, and have\n   one device or emulator connected to your host machine, `run-tests.sh`\n   will automatically upload, run and cleanup these tests for you.\n\n   If adb is not in your path, or no device is connected, run-tests.sh\n   will simply print a warning and carry on.\n\n\nWhenever you add a feature to the NDK, or fix a bug, it is recommended to add a\nunit test to check the feature or the fix. Use $NDK/tests/build for build tests,\nand $NDK/tests/device for device tests.\n"
  },
  {
    "path": "build/instruments/build-analyzer.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to copy clang tool \"scan-build\" and \"scan-view\"\n#  for the Android NDK.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Copy clang static code analyzer for the Android NDK.\n\nWhere <src-dir> is the location of toolchain sources, <ndk-dir> is\nthe top-level NDK installation path and <toolchain> is the name of\nthe toolchain to use (e.g. llvm-3.1).\"\n\nRELEASE=`date +%Y%m%d`\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Create archive tarball in specific directory\"\n\nextract_parameters \"$@\"\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    SCAN_BUILD_SRC_DIR=$SRC_DIR/$TOOLCHAIN/clang/tools/scan-build\n    if [ ! -d \"$SCAN_BUILD_SRC_DIR\" ] ; then\n        echo \"ERROR: Source directory does not contain scan-build: $SCAN_BUILD_SRC_DIR\"\n        exit 1\n    fi\n\n    SCAN_VIEW_SRC_DIR=$SRC_DIR/$TOOLCHAIN/clang/tools/scan-view\n    if [ ! -d \"$SCAN_VIEW_SRC_DIR\" ] ; then\n        echo \"ERROR: Source directory does not contain scan-view: $SCAN_VIEW_SRC_DIR\"\n        exit 1\n    fi\n\n    LICENSE_FILE=$SRC_DIR/$TOOLCHAIN/clang/LICENSE.TXT\n    if [ ! -f \"$LICENSE_FILE\" ] ; then\n        echo \"ERROR: Source directory does not contain clang license file: $LICENSE_FILE\"\n        exit 1\n    fi\n\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        fail_panic \"Could not create target NDK installation path: $NDK_DIR\"\n    fi\n\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\n# copy scan_build and scan_view\nSCAN_BUILD_SUBDIR=\"prebuilt/common/scan-build\"\nrun copy_directory \"$SCAN_BUILD_SRC_DIR\" \"$NDK_DIR/$SCAN_BUILD_SUBDIR\"\ncp -p \"$LICENSE_FILE\" \"$NDK_DIR/$SCAN_BUILD_SUBDIR\"\nrm -f $NDK_DIR/$SCAN_BUILD_SUBDIR/scan-build.1\n\nSCAN_VIEW_SUBDIR=\"prebuilt/common/scan-view\"\nrun copy_directory \"$SCAN_VIEW_SRC_DIR\" \"$NDK_DIR/$SCAN_VIEW_SUBDIR\"\ncp -p \"$LICENSE_FILE\" \"$NDK_DIR/$SCAN_VIEW_SUBDIR\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    ARCHIVE=\"scan-build-view.tar.xz\"\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SCAN_BUILD_SUBDIR\" \"$SCAN_VIEW_SUBDIR\"\nfi\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/instruments/build-boost.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Boost libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$BOOST_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nBOOST_VERSION=\nregister_var_option \"--version=<ver>\" BOOST_VERSION \"Boost version to build\"\n\nICU_VERSION=\nregister_var_option \"--with-icu=<version>\" ICU_VERSION \"ICU version to build with [without ICU]\"\n\nSTDLIBS=\"\"\nfor VERSION in $DEFAULT_GCC_VERSION_LIST; do\n    STDLIBS=\"$STDLIBS gnu-$VERSION\"\ndone\nfor VERSION in $DEFAULT_LLVM_VERSION_LIST; do\n    STDLIBS=\"$STDLIBS llvm-$VERSION\"\ndone\nSTDLIBS=$(spaces_to_commas $STDLIBS)\nregister_var_option \"--stdlibs=<list>\" STDLIBS \"List of Standard C++ Library implementations to build with\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nif [ -z \"$BOOST_VERSION\" ]; then\n    echo \"ERROR: Please specify Boost version\" 1>&2\n    exit 1\nfi\n\nBOOST_MAJOR_VERSION=$(echo $BOOST_VERSION | cut -d . -f 1)\nBOOST_MINOR_VERSION=$(echo $BOOST_VERSION | cut -d . -f 2)\n\nBOOST_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$BOOST_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Boost source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$BOOST_SRCDIR/$BOOST_VERSION\" ]; then\n    echo \"ERROR: No such directory: '$BOOST_SRCDIR/$BOOST_VERSION'\"\n    exit 1\nfi\n\nBOOST_SRCDIR=$BOOST_SRCDIR/$BOOST_VERSION\n\nif [ -n \"$ICU_VERSION\" ]; then\n    BOOST_SUBDIR=\"${BOOST_SUBDIR}+icu\"\nfi\n\nBOOST_DSTDIR=$NDK_DIR/$BOOST_SUBDIR/$BOOST_VERSION\nmkdir -p $BOOST_DSTDIR\nfail_panic \"Could not create Boost $BOOST_VERSION destination directory: $BOOST_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nSTDLIBS=$(commas_to_spaces $STDLIBS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-boost\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ \"$HOST_ARCH\" = \"x86_64\" ]; then\n    TRY64=yes\nfi\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\nmktool()\n{\n    local tool\n    for tool in \"$@\"; do\n        cat >$tool\n        fail_panic \"Could not create tool $tool\"\n        chmod +x $tool\n        fail_panic \"Could not chmod +x $tool\"\n    done\n}\n\n# $1: LIBSTDCXX\n# $2: SRCDIR\n# $3: BUILD_STEP : [generic, py2, py3]\ngenerate_boost_project_config ()\n{\n    local LIBSTDCXX=$1\n    local SRCDIR=$2\n    local BUILD_STEP=$3\n\n    local PY2_LIBNAME PY3_LIBNAME PY2_LIBDIR PY3_LIBDIR\n    local PYTHON_VERSION\n    for PYTHON_VERSION in $PYTHON_VERSIONS; do\n        case $PYTHON_VERSION in\n            2.*)\n                PY2_VER=$PYTHON_VERSION\n                PY2_DIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION\"\n                PY2_INCDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/include/python\"\n                PY2_LIBDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/shared/$ABI/libs\"\n                ;;\n            3.*)\n                PY3_VER=$PYTHON_VERSION\n                PY3_DIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION\"\n                PY3_INCDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/include/python\"\n                PY3_LIBDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/shared/$ABI/libs\"\n                ;;\n            *)\n                panic \"Unknown python version: '$PYTHON_VERSION'\"\n                ;;\n        esac\n    done\n\n    {\n        echo \"import option ;\"\n        echo \"import feature ;\"\n        if [ \"$BUILD_STEP\" = \"py2\" ]; then\n            echo \"using python : $PY2_VER : $PY2_DIR : $PY2_INCDIR : $PY2_LIBDIR : <target-os>android ;\"\n        fi\n        if [ \"$BUILD_STEP\" = \"py3\" ]; then\n            echo \"import python ;\"\n            echo \"using python : $PY3_VER : $PY3_DIR : $PY3_INCDIR : $PY3_LIBDIR : <target-os>android ;\"\n        fi\n\n        case $LIBSTDCXX in\n            gnu-*)\n                echo \"using gcc : $ARCH : g++ ;\"\n                echo \"project : default-build <toolset>gcc ;\"\n                ;;\n            llvm-*)\n                echo \"using clang : $ARCH : clang++ ;\"\n                echo \"project : default-build <toolset>clang ;\"\n                ;;\n            *)\n                echo \"ERROR: Wrong C++ stdlib: '$LIBSTDCXX'\" 1>&2\n                exit 1\n        esac\n        echo \"libraries = ;\"\n        echo \"option.set keep-going : false ;\"\n    } | cat >\"$SRCDIR/project-config.jam\"\n    fail_panic \"Could not create project-config.jam\"\n}\n\n# $1: ABI\n# $2: build directory\n# $3: C++ Standard Library implementation\nbuild_boost_for_abi ()\n{\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local LIBSTDCXX=\"$3\"\n\n    local V\n    if [ \"$VERBOSE2\" = \"yes\" ]; then\n        V=1\n    fi\n\n    local LVERSION=\"$BOOST_VERSION\"\n    if [ -n \"$ICU_VERSION\" ]; then\n        LVERSION=\"$LVERSION (with ICU $ICU_VERSION)\"\n    fi\n\n    dump \"Building Boost $LVERSION $ABI libraries (C++ stdlib: $LIBSTDCXX)\"\n\n    local APILEVEL=9\n    if [ ${ABI%%64*} != ${ABI} ]; then\n        APILEVEL=21\n    fi\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    local TCNAME\n    case $ABI in\n        armeabi*)\n            TCNAME=arm-linux-androideabi\n            ;;\n        arm64*)\n            TCNAME=aarch64-linux-android\n            ;;\n        mips)\n            TCNAME=mipsel-linux-android\n            ;;\n        mips64)\n            TCNAME=mips64el-linux-android\n            ;;\n        x86|x86_64)\n            TCNAME=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    local TCPREFIX\n    case $ABI in\n        x86)\n            TCPREFIX=i686-linux-android\n            ;;\n        x86_64)\n            TCPREFIX=x86_64-linux-android\n            ;;\n        *)\n            TCPREFIX=$TCNAME\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    local FLAGS LFLAGS\n    case $ABI in\n        armeabi)\n            FLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            ;;\n        armeabi-v7a-hard)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            LFLAGS=\"$LFLAGS -Wl,--no-warn-mismatch\"\n            ;;\n        arm64-v8a)\n            FLAGS=\"\"\n            ;;\n        x86)\n            FLAGS=\"-m32\"\n            ;;\n        x86_64)\n            FLAGS=\"-m64\"\n            ;;\n        mips)\n            FLAGS=\"-mabi=32 -mips32\"\n            ;;\n        mips64)\n            FLAGS=\"-mabi=64 -mips64r6\"\n            ;;\n    esac\n\n    local LLVMTRIPLE\n    case $ABI in\n        armeabi)\n            LLVMTRIPLE=\"armv5te-none-linux-androideabi\"\n            ;;\n        armeabi-v7a*)\n            LLVMTRIPLE=\"armv7-none-linux-androideabi\"\n            ;;\n        arm64-v8a)\n            LLVMTRIPLE=\"aarch64-none-linux-android\"\n            ;;\n        x86)\n            LLVMTRIPLE=\"i686-none-linux-android\"\n            ;;\n        x86_64)\n            LLVMTRIPLE=\"x86_64-none-linux-android\"\n            ;;\n        mips)\n            LLVMTRIPLE=\"mipsel-none-linux-android\"\n            ;;\n        mips64)\n            LLVMTRIPLE=\"mips64el-none-linux-android\"\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local GCC_VERSION\n    case $LIBSTDCXX in\n        gnu-*)\n            GCC_VERSION=$(expr \"$LIBSTDCXX\" : \"^gnu-\\(.*\\)$\")\n            ;;\n        *)\n            GCC_VERSION=$DEFAULT_GCC_VERSION\n    esac\n\n    local LLVM_VERSION\n    case $LIBSTDCXX in\n        llvm-*)\n            LLVM_VERSION=$(expr \"$LIBSTDCXX\" : \"^llvm-\\(.*\\)$\")\n            ;;\n        *)\n            LLVM_VERSION=$DEFAULT_LLVM_VERSION\n    esac\n\n    local GCC_DIR=$NDK_DIR/toolchains/$TCNAME-$GCC_VERSION/prebuilt/$HOST_TAG\n    local LLVM_DIR=$NDK_DIR/toolchains/llvm-$LLVM_VERSION/prebuilt/$HOST_TAG\n\n    local SRCDIR=$BUILDDIR/src\n    copy_directory $BOOST_SRCDIR $SRCDIR\n\n    cd $SRCDIR\n    fail_panic \"Couldn't CD to temporary Boost $BOOST_VERSION sources directory\"\n\n    if [ ! -x ./b2 ]; then\n        local TMPHOSTTCDIR=$BUILDDIR/host-bin\n        run mkdir $TMPHOSTTCDIR\n        fail_panic \"Couldn't create temporary directory for host toolchain wrappers\"\n\n        {\n            echo \"#!/bin/sh\"\n            echo \"\"\n            echo \"exec $CC $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n        } | mktool $TMPHOSTTCDIR/cc\n\n        PATH=$TMPHOSTTCDIR:$SAVED_PATH\n        export PATH\n\n        run ./bootstrap.sh --with-toolset=cc\n        fail_panic \"Could not bootstrap Boost build\"\n    fi\n\n    {\n        echo \"using mpi ;\"\n    } | cat >user-config.jam\n    fail_panic \"Could not create user-config.jam\"\n\n    local TMPTARGETTCDIR=$BUILDDIR/target-bin\n    run mkdir $TMPTARGETTCDIR\n    fail_panic \"Couldn't create temporary directory for target $ABI toolchain wrappers\"\n\n    local SYSROOT=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\n    local LIBCRYSTAX=$NDK_DIR/$CRYSTAX_SUBDIR\n\n    local ICU_CFLAGS ICU_LDFLAGS\n    if [ -n \"$ICU_VERSION\" ]; then\n        local ICU=$NDK_DIR/sources/icu/$ICU_VERSION\n        ICU_CFLAGS=\"-I$ICU/include\"\n        ICU_LDFLAGS=\"-L$ICU/libs/$ABI\"\n    else\n        ICU_CFLAGS=\"\"\n        ICU_LDFLAGS=\"\"\n    fi\n\n    local CXX CXXNAME\n    local LIBSTDCXX_CFLAGS LIBSTDCXX_LDFLAGS LIBSTDCXX_LDLIBS\n    case $LIBSTDCXX in\n        gnu-*)\n            CXX=$GCC_DIR/bin/$TCPREFIX-g++\n            CXXNAME=g++\n            local GNULIBCXX=$NDK_DIR/sources/cxx-stl/gnu-libstdc++/$(expr \"$LIBSTDCXX\" : \"^gnu-\\(.*\\)$\")\n            LIBSTDCXX_CFLAGS=\"-I$GNULIBCXX/include -I$GNULIBCXX/libs/$ABI/include\"\n            LIBSTDCXX_LDFLAGS=\"-L$GNULIBCXX/libs/$ABI\"\n            LIBSTDCXX_LDLIBS=\"-lgnustl_shared\"\n            ;;\n        llvm-*)\n            CXX=\"$LLVM_DIR/bin/clang++ -target $LLVMTRIPLE -gcc-toolchain $GCC_DIR\"\n            CXXNAME=clang++\n            local LLVMLIBCXX=$NDK_DIR/sources/cxx-stl/llvm-libc++/$(expr \"$LIBSTDCXX\" : \"^llvm-\\(.*\\)$\")\n            local LLVMLIBCXXABI=$NDK_DIR/sources/cxx-stl/llvm-libc++abi\n            LIBSTDCXX_CFLAGS=\"-I$LLVMLIBCXX/libcxx/include -I$LLVMLIBCXXABI/libcxxabi/include\"\n            LIBSTDCXX_LDFLAGS=\"-L$LLVMLIBCXX/libs/$ABI\"\n            LIBSTDCXX_LDLIBS=\"-lc++_shared\"\n            FLAGS=\"$FLAGS -fno-integrated-as\"\n            ;;\n        *)\n            echo \"ERROR: Unknown C++ Standard Library: '$LIBSTDCXX'\" 1>&2\n            exit 1\n    esac\n\n    FLAGS=\"$FLAGS --sysroot=$SYSROOT\"\n    FLAGS=\"$FLAGS -fPIC\"\n\n    local PY2_LIBNAME PY3_LIBNAME PY2_LIBDIR PY3_LIBDIR\n    local PYTHON_VERSION\n    for PYTHON_VERSION in $PYTHON_VERSIONS; do\n        case $PYTHON_VERSION in\n            2.*)\n                PY2_LIBNAME=\"python${PYTHON_VERSION}\"\n                PY2_LIBDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/shared/$ABI/libs\"\n                ;;\n            3.*)\n                PY3_LIBNAME=\"python${PYTHON_VERSION}m\"\n                PY3_LIBDIR=\"$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION/shared/$ABI/libs\"\n                ;;\n            *)\n                panic \"Unknown python version: '$PYTHON_VERSION'\"\n                ;;\n        esac\n    done\n\n    mktool $TMPTARGETTCDIR/$CXXNAME <<EOF\n#!/bin/sh\n\nif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -c; then\n    LINKER=no\nelif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -emit-pth; then\n    LINKER=no\nelse\n    LINKER=yes\nfi\n\nPY2_LIBNAME=$PY2_LIBNAME\nPY3_LIBNAME=$PY3_LIBNAME\nPY2_LIBDIR=$PY2_LIBDIR\nPY3_LIBDIR=$PY3_LIBDIR\n\n# Remove any -m32/-m64 from input parameters\nPARAMS=\\`echo \"\\$@\" | tr ' ' '\\\\n' | grep -v -x -e -m32 | grep -v -x -e -m64 | tr '\\\\n' ' '\\`\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    # Fix SONAME for shared libraries\n    NPARAMS=\"\"\n    NEXT_PARAM_IS_LIBNAME=no\n    for p in \\$PARAMS; do\n        if [ \"x\\$NEXT_PARAM_IS_LIBNAME\" = \"xyes\" ]; then\n            LIBNAME=\\`expr \"x\\$p\" : \"^x.*\\\\(lib[^\\\\.]*\\\\.so\\\\)\"\\`\n            p=\"-Wl,\\$LIBNAME\"\n            NEXT_PARAM_IS_LIBNAME=no\n        else\n            case \\$p in\n                -Wl,-soname|-Wl,-h|-install_name)\n                    p=\"-Wl,-soname\"\n                    NEXT_PARAM_IS_LIBNAME=yes\n                    ;;\n                -Wl,-soname,lib*|-Wl,-h,lib*)\n                    LIBNAME=\\`expr \"x\\$p\" : \"^x.*\\\\(lib[^\\\\.]*\\\\.so\\\\)\"\\`\n                    p=\"-Wl,-soname,-l\\$LIBNAME\"\n                    ;;\n                -dynamiclib)\n                    p=\"-shared\"\n                    ;;\n                -undefined)\n                    p=\"-u\"\n                    ;;\n                -single_module)\n                    p=\"\"\n                    ;;\n                -lpthread|-lutil)\n                    p=\"\"\n                    ;;\n            esac\n        fi\n        NPARAMS=\"\\$NPARAMS \\$p\"\n    done\n    PARAMS=\\$NPARAMS\nfi\n\nPY_LDFLAGS=\"\"\nFLAGS=\"$FLAGS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    FLAGS=\"\\$FLAGS $LFLAGS\"\n    FLAGS=\"\\$FLAGS $ICU_LDFLAGS\"\n    if [ \"\\$LIBNAME\" = \"libboost_python.so\" ]; then\n        PY_LDFLAGS=\"-L\\$PY2_LIBDIR -l\\$PY2_LIBNAME\"\n    fi\n    if [ \"\\$LIBNAME\" = \"libboost_python3.so\" ]; then\n        PY_LDFLAGS=\"-L\\$PY3_LIBDIR -l\\$PY3_LIBNAME\"\n    fi\n    FLAGS=\"\\$FLAGS -L$LIBCRYSTAX/libs/$ABI\"\n    FLAGS=\"\\$FLAGS $LIBSTDCXX_LDFLAGS\"\nelse\n    FLAGS=\"\\$FLAGS $ICU_CFLAGS\"\n    FLAGS=\"\\$FLAGS $LIBSTDCXX_CFLAGS\"\n    FLAGS=\"\\$FLAGS -I$LIBCRYSTAX/include\"\n    FLAGS=\"\\$FLAGS -Wno-long-long\"\nfi\n\nPARAMS=\"\\$FLAGS \\$PARAMS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    PARAMS=\"\\$PARAMS \\$PY_LDFLAGS $LIBSTDCXX_LDLIBS\"\nfi\n\nrun()\n{\n    if [ -n \"\\$NDK_LOGFILE\" ]; then\n        echo \"## COMMAND: \\$@\" >>\\$NDK_LOGFILE\n    fi\n    exec \"\\$@\"\n}\n\nrun $CXX \\$PARAMS\nEOF\n    fail_panic \"Could not create target '$CXXNAME' wrapper\"\n\n    for TOOL in as ar ranlib strip; do\n        {\n            echo \"#!/bin/sh\"\n            echo \"exec $GCC_DIR/bin/$TCPREFIX-$TOOL \\\"\\$@\\\"\"\n        } | mktool $TMPTARGETTCDIR/$TOOL\n        fail_panic \"Could not create target '$TOOL' wrapper\"\n    done\n\n    PATH=$TMPTARGETTCDIR:$SAVED_PATH\n    export PATH\n\n    local BJAMARCH\n    local BJAMABI\n    case $ARCH in\n        arm|arm64)\n            BJAMARCH=arm\n            BJAMABI=aapcs\n            ;;\n        x86|x86_64)\n            BJAMARCH=x86\n            BJAMABI=sysv\n            ;;\n        mips)\n            BJAMARCH=mips1\n            BJAMABI=o32\n            ;;\n        mips64)\n            BJAMARCH=mips1\n            BJAMABI=o64\n            ;;\n        *)\n            echo \"ERROR: Unsupported CPU architecture: '$ARCH'\" 1>&2\n            exit 1\n    esac\n\n    local BJAMADDRMODEL\n    if [ ${ARCH%%64} != ${ARCH} ]; then\n        BJAMADDRMODEL=64\n    else\n        BJAMADDRMODEL=32\n    fi\n\n    local WITHOUT=\"\"\n\n    # Boost.Context in 1.57.0 and earlier don't support arm64\n    # Boost.Context in 1.62.0 and earlier don't support mips64\n    if [ \\( \"$ARCH\" = \"arm64\"  -a $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -le 57 \\) -o \\\n         \\( \"$ARCH\" = \"mips64\" -a $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -le 62 \\) ]; then\n        WITHOUT=\"$WITHOUT --without-context\"\n    fi\n\n    # Boost.Coroutine depends on Boost.Context\n    if echo \"$WITHOUT\" | grep -q -e \"--without-context\"; then\n        WITHOUT=\"$WITHOUT --without-coroutine\"\n        # Starting from 1.59.0, there is Boost.Coroutine2 library, which depends on Boost.Context too\n        if [ $BOOST_MAJOR_VERSION -gt 1 -o \\( $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -ge 59 \\) ]; then\n            WITHOUT=\"$WITHOUT --without-coroutine2\"\n        fi\n    fi\n\n    # export BOOST_BUILD_PATH to avoid clashes with preinstalled Boost.Build (can happen on Gentoo based systems)\n    export BOOST_BUILD_PATH=$SRCDIR/tools/build\n\n    local PREFIX=$BUILDDIR/install\n\n    local BUILD_STEP WITHOUT_STEP BUILDDIR_STEP PREFIX_STEP\n    for BUILD_STEP in py2 py3 generic; do\n        WITHOUT_STEP=$WITHOUT\n        if [ \"$BUILD_STEP\" = \"generic\" ]; then\n            WITHOUT_STEP=\"$WITHOUT --without-python\"\n            PREFIX_STEP=$PREFIX\n            BUILDDIR_STEP=\"$BUILDDIR/build\"\n        else\n            WITHOUT_STEP=\"$WITHOUT\"\n            PREFIX_STEP=\"$BUILDDIR/install-$BUILD_STEP\"\n            BUILDDIR_STEP=\"$BUILDDIR/build-$BUILD_STEP\"\n        fi\n\n        generate_boost_project_config $LIBSTDCXX $SRCDIR $BUILD_STEP\n\n        if [ \"$BUILD_STEP\" = \"py2\" -o \"$BUILD_STEP\" = \"py3\" ]; then\n            cd \"$SRCDIR/libs/python/build\"\n            fail_panic \"Couldn't CD to temporary Boost $BOOST_VERSION python sources directory\"\n        else\n            cd $SRCDIR\n            fail_panic \"Couldn't CD to temporary Boost $BOOST_VERSION sources directory\"\n        fi\n\n        run $SRCDIR/b2 -d+2 -q -j$NUM_JOBS \\\n            variant=release \\\n            link=static,shared \\\n            runtime-link=shared \\\n            threading=multi \\\n            target-os=android \\\n            binary-format=elf \\\n            address-model=$BJAMADDRMODEL \\\n            architecture=$BJAMARCH \\\n            abi=$BJAMABI \\\n            --user-config=$SRCDIR/user-config.jam \\\n            --layout=system \\\n            --prefix=$PREFIX_STEP \\\n            --build-dir=$BUILDDIR_STEP \\\n            $WITHOUT_STEP \\\n            install\n\n        fail_panic \"Couldn't build Boost $BOOST_VERSION $ABI libraries, step='$BUILD_STEP'\"\n    done\n\n    cd $SRCDIR\n    fail_panic \"Couldn't CD to temporary Boost $BOOST_VERSION sources directory\"\n\n    run rm -rf \"$BUILDDIR/install-py2/include\"\n    fail_panic \"Couldn't remove headers generated by custom build of python-2\"\n\n    run rm -rf \"$BUILDDIR/install-py3/include\"\n    fail_panic \"Couldn't remove headers generated by custom build of python-3\"\n\n    run cp -pR \"$BUILDDIR/install-py2/lib\" $PREFIX\n    fail_panic \"Couldn't copy libs generated by custom build of python-2\"\n\n    run cp -pR \"$BUILDDIR/install-py3/lib\" $PREFIX\n    fail_panic \"Couldn't copy libs generated by custom build of python-3\"\n\n    if [ \"$BOOST_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install Boost $BOOST_VERSION headers into $BOOST_DSTDIR\"\n        run rm -Rf $BOOST_DSTDIR/include\n        run cp -pR $PREFIX/include $BOOST_DSTDIR/\n        fail_panic \"Couldn't install Boost $BOOST_VERSION headers\"\n        BOOST_HEADERS_INSTALLED=yes\n        export BOOST_HEADERS_INSTALLED\n    fi\n\n    local INSTALLDIR=$BOOST_DSTDIR/libs/$ABI/$LIBSTDCXX\n\n    log \"Install Boost $BOOST_VERSION $ABI libraries into $BOOST_DSTDIR\"\n    run mkdir -p $INSTALLDIR\n    fail_panic \"Couldn't create Boost $BOOST_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        rm -f $INSTALLDIR/lib*.$LIBSUFFIX\n\n        for f in $(find $PREFIX -name \"lib*.$LIBSUFFIX\" -print); do\n            local bf=$(basename $f)\n            run cp -pRH $f $INSTALLDIR/$bf\n            fail_panic \"Couldn't install Boost $BOOST_VERSION $ABI $bf library\"\n        done\n    done\n\n    log \"Boost $BOOST_VERSION $ABI binaries built successfully\"\n}\n\nSAVED_PATH=$PATH\n\nPNAME=boost\nif [ -n \"$ICU_VERSION\" ]; then\n    PNAME=\"${PNAME}+icu\"\nfi\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        BOOST_BUILD_FILES_NEED_PACKAGE=no\n    else\n        BOOST_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        BOOST_HEADERS_NEED_PACKAGE=no\n    else\n        BOOST_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    for STDLIB in $STDLIBS; do\n        DO_BUILD_PACKAGE=\"yes\"\n        if [ -n \"$PACKAGE_DIR\" ]; then\n            PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-libs-$STDLIB-$ABI.tar.xz\"\n            echo \"Look for: $PACKAGE_NAME\"\n            try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n            if [ $? -eq 0 ]; then\n                if [ \"$BOOST_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                    BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n                else\n                    DO_BUILD_PACKAGE=\"no\"\n                fi\n            else\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            fi\n        fi\n        if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n            build_boost_for_abi $ABI \"$BUILD_DIR/$ABI/$STDLIB\" \"$STDLIB\"\n\n            if [ -n \"$PACKAGE_DIR\" ]; then\n                if [ \"$BOOST_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n                    FILES=\"$BOOST_SUBDIR/$BOOST_VERSION/include\"\n                    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-headers.tar.xz\"\n                    PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n                    dump \"Packaging: $PACKAGE\"\n                    pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n                    fail_panic \"Could not package Boost $BOOST_VERSION headers!\"\n                    cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n                fi\n\n                FILES=\"$BOOST_SUBDIR/$BOOST_VERSION/libs/$ABI/$STDLIB\"\n                PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-libs-$STDLIB-$ABI.tar.xz\"\n                PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n                dump \"Packaging: $PACKAGE\"\n                pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n                fail_panic \"Could not package $ABI Boost $BOOST_VERSION (C++ stdlib: $STDLIB) binaries!\"\n                cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n            fi\n        fi\n    done\ndone\n\n# Restore PATH\nPATH=$SAVED_PATH\nexport PATH\n\n# Copy license\nlog \"Copying Boost $BOOST_VERSION license\"\nrun cp -f $BOOST_SRCDIR/LICENSE_1_0.txt $BOOST_DSTDIR/\nfail_panic \"Couldn't copy Boost $BOOST_VERSION license\"\n\nget_objdump_for_abi()\n{\n    local ABI=$1\n    local OBJDUMP\n    case $ABI in\n        armeabi*)\n            OBJDUMP=$NDK_DIR/toolchains/arm-linux-androideabi-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/arm-linux-androideabi-objdump\n            ;;\n        arm64*)\n            OBJDUMP=$NDK_DIR/toolchains/aarch64-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/aarch64-linux-android-objdump\n            ;;\n        x86)\n            OBJDUMP=$NDK_DIR/toolchains/x86-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/i686-linux-android-objdump\n            ;;\n        x86_64)\n            OBJDUMP=$NDK_DIR/toolchains/x86_64-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/x86_64-linux-android-objdump\n            ;;\n        mips)\n            OBJDUMP=$NDK_DIR/toolchains/mipsel-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/mipsel-linux-android-objdump\n            ;;\n        mips64)\n            OBJDUMP=$NDK_DIR/toolchains/mips64el-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/mips64el-linux-android-objdump\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$BOOST_ABI'\" 1>&2\n            exit 1\n    esac\n\n    if [ ! -e $OBJDUMP ]; then\n        echo \"ERROR: Can't find $ABI objdump: $OBJDUMP\" 1>&2\n        exit 1\n    fi\n\n    echo $OBJDUMP\n}\n\nget_library_dependencies()\n{\n    local LIB=$1\n    local ABI=$2\n    local OBJDUMP=$(get_objdump_for_abi $ABI)\n\n    $OBJDUMP -p $LIB 2>/dev/null | \\\n        grep \"^ *NEEDED\\>\" | awk '{print $2}' | \\\n        grep -v \"^lib\\(c\\|dl\\|crystax\\|stdc++\\|gnustl_shared\\|c++_shared\\)\\.so$\" | \\\n        sed 's,^lib\\([^\\.]*\\)\\..*$,\\1,' | sort | uniq | grep -v '^$' | tr '\\n' ' '\n}\n\ngenerate_build_files()\n{\n    local BOOST_ABIS=$(ls -1 $BOOST_DSTDIR/libs | grep \"^\\(armeabi\\|armeabi-v7a\\|armeabi-v7a-hard\\|x86\\|mips\\|arm64-v8a\\|x86_64\\|mips64\\)\" | sort)\n    if [ -z \"$BOOST_ABIS\" ]; then\n        echo \"ERROR: Can't detect Boost ABIs!\" 1>&2\n        exit 1\n    fi\n\n    # Generate Android.mk\n    log \"Generating $BOOST_DSTDIR/Android.mk\"\n    {\n        echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n        echo \"\"\n        cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n        echo \"\"\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo ''\n        echo '__boost_libstdcxx_subdir := $(strip $(or \\'\n        echo '        $(if $(filter gnustl_static gnustl_shared,$(APP_STL)),gnu),\\'\n        echo '        $(if $(filter c++_static c++_shared,$(APP_STL)),llvm),\\'\n        echo '        $(error We do not support APP_STL '\"'\"'$(APP_STL)'\"'\"' for Boost libraries! \\'\n        echo '            Please use either \"gnustl_shared\", \"gnustl_static\", \"c++_shared\" or \"c++_static\". \\'\n        echo '        )\\'\n        echo '    ))-$(strip $(or \\'\n        echo '        $(if $(filter gnustl_static gnustl_shared,$(APP_STL)),$(or $(GCC_VERSION),$(DEFAULT_GCC_VERSION))),\\'\n        echo '        $(if $(filter c++_static c++_shared,$(APP_STL)),$(or $(LLVM_VERSION),$(DEFAULT_LLVM_VERSION))),\\'\n        echo '        $(error We do not support APP_STL '\"'\"'$(APP_STL)'\"'\"' for Boost libraries! \\'\n        echo '            Please use either \"gnustl_shared\", \"gnustl_static\", \"c++_shared\" or \"c++_static\". \\'\n        echo '        )\\'\n        echo '    ))'\n    } | cat >$BOOST_DSTDIR/Android.mk\n\n    local ALL_BOOST_LIBS=$(find $BOOST_DSTDIR/libs -name 'libboost_*' -exec basename '{}' \\; \\\n        | sed 's,^lib\\(boost_[^\\.]*\\)\\..*$,\\1,' | sort | uniq | tr '\\n' ' ')\n    log \"Found Boost libraries: '$ALL_BOOST_LIBS'\"\n\n    local BOOST_LIB\n    for BOOST_LIB in $ALL_BOOST_LIBS; do\n        log \"Determining dependencies for $BOOST_LIB ...\"\n\n        local BOOST_LIB_DEPS=\"\"\n        local BOOST_ABI\n        for BOOST_ABI in $BOOST_ABIS; do\n            local DEPS=$(get_library_dependencies $BOOST_DSTDIR/libs/$BOOST_ABI/gnu-$DEFAULT_GCC_VERSION/lib${BOOST_LIB}.so $BOOST_ABI)\n            BOOST_LIB_DEPS=\"$BOOST_LIB_DEPS $DEPS\"\n        done\n        BOOST_LIB_DEPS=$(echo \"$BOOST_LIB_DEPS\" | tr ' ' '\\n' | sort | uniq | tr '\\n' ' ' | sed 's,^ *,,' | sed 's, *$,,')\n        log \"Determined  dependencies for $BOOST_LIB: '$BOOST_LIB_DEPS'\"\n\n        local LIBTYPE\n        local SUFFIX\n        for LIBTYPE in static shared; do\n            case $LIBTYPE in\n                static)\n                    SUFFIX=a\n                    ;;\n                shared)\n                    SUFFIX=so\n                    ;;\n                *)\n                    echo \"ERROR: Wrong LIBTYPE: '$LIBTYPE' (must be either 'static' or 'shared')\" 1>&2\n                    exit 1\n            esac\n\n            local BOOST_LIB_FILE=$(find $BOOST_DSTDIR/libs -name lib${BOOST_LIB}.${SUFFIX} -exec basename '{}' \\; | sort | uniq)\n            if [ -z \"$BOOST_LIB_FILE\" ]; then\n                continue\n            fi\n\n            local LIBTYPE_UPPERCASE=$(echo $LIBTYPE | tr '[a-z]' '[A-Z]')\n\n            local FILTERED_OUT_ABIS=\"\"\n            case $BOOST_LIB in\n                boost_context|boost_coroutine)\n                    FILTERED_OUT_ABIS=\"mips64\"\n                    ;;\n            esac\n\n            {\n                echo ''\n                if [ -n \"$FILTERED_OUT_ABIS\" ]; then\n                    echo 'ifeq (,$(filter '$FILTERED_OUT_ABIS',$(TARGET_ARCH_ABI)))'\n                fi\n                echo 'include $(CLEAR_VARS)'\n                echo 'LOCAL_MODULE := '$BOOST_LIB'_'$LIBTYPE\n                echo 'LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/$(__boost_libstdcxx_subdir)/lib'$BOOST_LIB'.'$SUFFIX\n                echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n                echo 'ifneq (,$(strip $(LLVM_VERSION)))'\n                echo 'LOCAL_EXPORT_LDLIBS := -latomic'\n                echo 'endif'\n                local d\n                for d in $BOOST_LIB_DEPS; do\n                    case $d in\n                        z)\n                            echo 'LOCAL_EXPORT_LDLIBS += -l'${d}\n                            ;;\n                        *)\n                            echo \"LOCAL_${LIBTYPE_UPPERCASE}_LIBRARIES += ${d}_${LIBTYPE}\"\n                    esac\n                done\n                echo 'include $(PREBUILT_'$LIBTYPE_UPPERCASE'_LIBRARY)'\n                if [ -n \"$FILTERED_OUT_ABIS\" ]; then\n                    echo 'endif'\n                fi\n            } | cat >>$BOOST_DSTDIR/Android.mk\n        done\n    done\n\n    log \"Generated $BOOST_DSTDIR/Android.mk\"\n}\n\ngenerate_build_files\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$BOOST_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk LICENSE_1_0.txt; do\n            FILES=\"$FILES $BOOST_SUBDIR/$BOOST_VERSION/$F\"\n        done\n        PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package Boost $BOOST_VERSION build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-ccache.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to download the sources of the ccache\n#  tool that can be used to speed-up rebuilds of NDK binaries.\n#\n#  We use a special patched version of ccache 2.4 that works\n#  well on Win32 and handles the dependency generation compiler\n#  flags (-MMD -MP -MF) properly.\n#\n#  Beta versions of ccache 3.0 are supposed to do that as well but\n#  have not been checked yet.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<ndk-dir>\"\nPROGRAM_DESCRIPTION=\"Rebuild the prebuilt ccache binary for the Android NDK toolchain.\"\n\nCCACHE_VERSION=ccache-2.4-android-20070905\nCCACHE_PACKAGE=$CCACHE_VERSION.tar.gz\nDOWNLOAD_ROOT=http://android.git.kernel.org/pub\nCCACHE_URL=$DOWNLOAD_ROOT/$CCACHE_PACKAGE\n\nOPTION_PACKAGE=no\n\nBUILD_OUT=$NDK_TMPDIR/build-ccache\nOPTION_BUILD_OUT=\nOPTION_FROM=\n\nregister_option \"--from=<url>\" do_from \"Specify source package\" \"$PACKAGE\"\nregister_option \"--build-out=<path>\" do_build_out \"Set temporary build directory\" \"$TMPDIR/<random>\"\n\ndo_from () { CCACHE_URL=$1; CCACHE_PACKAGE=`basename $1`; }\ndo_build_out () { OPTION_BUILD_OUT=$1; }\n\nextract_parameters \"$@\"\n\nset_parameters ()\n{\n    if [ -n \"$2\" ] ; then\n        echo \"ERROR: Too many parameters. See --help for usage.\"\n        exit 1\n    fi\n\n    NDK_DIR=$1\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing required ndk directory. See --help for usage.\"\n        exit 1\n    fi\n\n    mkdir -p $NDK_DIR\n    if [ $? != 0 ] ; then\n        echo \"ERROR: Could not create NDK target directory: $NDK_DIR\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nprepare_host_build\n\nfix_option BUILD_OUT \"$OPTION_BUILD_OUT\" \"build directory\"\n\n# Check for md5sum\ncheck_md5sum\n\nprepare_download\n\nrun rm -rf $BUILD_OUT && run mkdir -p $BUILD_OUT\nif [ $? != 0 ] ; then\n    echo \"ERROR: Could not create build directory: $BUILD_OUT\"\n    exit 1\nfi\n\ndump \"Getting sources from $CCACHE_URL\"\n\ndownload_file $CCACHE_URL $BUILD_OUT/$CCACHE_PACKAGE\nif [ $? != 0 ] ; then\n    dump \"Could not download $CCACHE_URL\"\n    dump \"Aborting.\"\n    exit 1\nfi\n\ncd $BUILD_OUT && tar xzf $BUILD_OUT/$CCACHE_PACKAGE\nif [ $? != 0 ] ; then\n    dump \"Could not unpack $CCACHE_PACKAGE in $BUILD_OUT\"\n    exit 1\nfi\n\necho \"Building ccache from sources...\"\ncd $BUILD_OUT/$CCACHE_VERSION && run make clean && run make unpack && run make build\nif [ $? != 0 ] ; then\n    dump \"Could not build ccache in $BUILD_OUT\"\nfi\n\nPREBUILT_DIR=$NDK_DIR/build/prebuilt/$HOST_TAG/ccache\nmkdir -p $PREBUILT_DIR && cp -p $BUILD_OUT/$CCACHE_VERSION/ccache $PREBUILT_DIR\nif [ $? != 0 ] ; then\n    dump \"Could not copy ccache binary!\"\n    exit 1\nfi\n\ndump \"Done\"\n"
  },
  {
    "path": "build/instruments/build-cocotron.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Cocotron for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$COCOTRON_SUBDIR, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nCOCOTRON_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$COCOTRON_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Cocotron source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$COCOTRON_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$COCOTRON_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-cocotron\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_cocotron_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n\n    dump \"Building $ABI Cocotron\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $COCOTRON_SRCDIR/android -j$NUM_JOBS install \\\n        V=1 \\\n        NDK=$NDK_DIR \\\n        PREFIX=$NDK_DIR/$COCOTRON_SUBDIR/frameworks \\\n        ABIS=$ABI \\\n        LLVM_VERSION=$DEFAULT_LLVM_VERSION \\\n        GCC_VERSION=$DEFAULT_GCC_VERSION \\\n        OUT=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Cocotron\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"cocotron-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_cocotron_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$COCOTRON_SUBDIR/frameworks/$ABI\"\n        PACKAGE_NAME=\"cocotron-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Cocotron binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-compiler-rt.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild compiler-rt for the Android NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$COMPILER_RT_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nSRC_DIR=\nregister_var_option \"--src-dir=<path>\" SRC_DIR \"Specify compiler-rt source dir.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nGCC_VERSION=\nregister_var_option \"--gcc-version=<ver>\" GCC_VERSION \"Specify GCC version\"\n\nLLVM_VERSION=\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-compiler-rt\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ -z \"$SRC_DIR\" -o ! -d \"$SRC_DIR\" ]; then\n    dump \"Could not found compiler-rt source directory: $SRC_DIR\"\n    dump \"Use --src-dir=<dir> to specify source directory.\"\n    exit 1\nfi\n\n# Compiler flags we want to use\nCOMPILER_RT_CFLAGS=\"-fPIC -O2 -DANDROID -D__ANDROID__ -ffunction-sections\"\nCOMPILER_RT_CFLAGS=$COMPILER_RT_CFLAGS\" -I$SRC_DIR/include -I$SRC_DIR/lib\"\nCOMPILER_RT_LDFLAGS=\"-nostdlib\"\n\n# List of sources to compile\nCOMPILER_RT_GENERIC_SOURCES=$(cd $SRC_DIR && ls lib/builtins/*.c)\n\n# filter out the sources we don't need\nUNUSED_SOURCES=\"lib/builtins/apple_versioning.c lib/builtins/gcc_personality_v0.c\"\nCOMPILER_RT_GENERIC_SOURCES=$(filter_out \"$UNUSED_SOURCES\" \"$COMPILER_RT_GENERIC_SOURCES\")\n\n# ARM specific\nCOMPILER_RT_ARM_SOURCES=\"\nlib/builtins/arm/aeabi_dcmp.S \\\nlib/builtins/arm/aeabi_div0.c \\\nlib/builtins/arm/aeabi_fcmp.S \\\nlib/builtins/arm/aeabi_idivmod.S \\\nlib/builtins/arm/aeabi_ldivmod.S \\\nlib/builtins/arm/aeabi_memcmp.S \\\nlib/builtins/arm/aeabi_memcpy.S \\\nlib/builtins/arm/aeabi_memmove.S \\\nlib/builtins/arm/aeabi_memset.S \\\nlib/builtins/arm/aeabi_uidivmod.S \\\nlib/builtins/arm/aeabi_uldivmod.S \\\nlib/builtins/arm/comparesf2.S\nlib/builtins/arm/divmodsi4.S\nlib/builtins/arm/divsi3.S\nlib/builtins/arm/modsi3.S\nlib/builtins/arm/udivmodsi4.S\nlib/builtins/arm/udivsi3.S\nlib/builtins/arm/umodsi3.S\"\n\n# X86 specific\nCOMPILER_RT_X86_SOURCES=\"\nlib/builtins/i386/ashldi3.S \\\nlib/builtins/i386/ashrdi3.S \\\nlib/builtins/i386/divdi3.S \\\nlib/builtins/i386/floatdidf.S \\\nlib/builtins/i386/floatdisf.S \\\nlib/builtins/i386/floatdixf.S \\\nlib/builtins/i386/floatundidf.S \\\nlib/builtins/i386/floatundisf.S \\\nlib/builtins/i386/floatundixf.S \\\nlib/builtins/i386/lshrdi3.S \\\nlib/builtins/i386/moddi3.S \\\nlib/builtins/i386/muldi3.S \\\nlib/builtins/i386/udivdi3.S \\\nlib/builtins/i386/umoddi3.S\"\n\n# Mips specific\nCOMPILER_RT_MIPS_SOURCES=\n\n# X86_64 specific\nCOMPILER_RT_X86_64_SOURCES=\"\nlib/builtins/x86_64/floatdidf.c \\\nlib/builtins/x86_64/floatdisf.c \\\nlib/builtins/x86_64/floatdixf.c \\\nlib/builtins/x86_64/floatundidf.S \\\nlib/builtins/x86_64/floatundisf.S \\\nlib/builtins/x86_64/floatundixf.S\n\"\n\n# If the --no-makefile flag is not used, we're going to put all build\n# commands in a temporary Makefile that we will be able to invoke with\n# -j$NUM_JOBS to build stuff in parallel.\n#\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\n# prepare_compiler_rt_source_for_abi\n# $1: ABI\nprepare_compiler_rt_source_for_abi ()\n{\n    local ABI=$1\n    local ARCH_SOURCES GENERIC_SOURCES FOUND\n\n    if [ $ABI = \"armeabi\" -o $ABI = \"armeabi-v7a\" -o $ABI = \"armeabi-v7a-hard\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_ARM_SOURCES\"\n    elif [ $ABI = \"x86\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_X86_SOURCES\"\n    elif [ $ABI = \"mips\" -o $ABI = \"mips32r6\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_MIPS_SOURCES\"\n    elif [ $ABI = \"x86_64\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_X86_64_SOURCES\"\n    fi\n\n    for SOURCE in $COMPILER_RT_GENERIC_SOURCES; do\n        FILENAME=`basename $SOURCE`\n        FILENAME=$\"${FILENAME/\\.c/}\"\n        # if we have lib/$ABI/*.S, skip lib/*.c\n        FOUND=$(echo $ARCH_SOURCES | grep $FILENAME)\n        if [ -z \"$FOUND\" ]; then\n            GENERIC_SOURCES=\"$GENERIC_SOURCES $SOURCE\"\n        fi\n    done\n\n    echo \"$ARCH_SOURCES $GENERIC_SOURCES\"\n}\n\n# build_compiler_rt_libs_for_abi\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\n# $4: (optional) installation directory\nbuild_compiler_rt_libs_for_abi ()\n{\n    local ARCH BINPREFIX\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local TYPE=\"$3\"\n    local DSTDIR=\"$4\"\n    local GCCVER\n\n    mkdir -p \"$BUILDDIR\"\n\n    # If the output directory is not specified, use default location\n    if [ -z \"$DSTDIR\" ]; then\n        DSTDIR=$NDK_DIR/$COMPILER_RT_SUBDIR/libs/$ABI\n    fi\n\n    mkdir -p \"$DSTDIR\"\n\n    if [ -n \"$GCC_VERSION\" ]; then\n        GCCVER=$GCC_VERSION\n    else\n        local ARCH=$(convert_abi_to_arch $ABI)\n        GCCVER=$(get_default_gcc_version_for_arch $ARCH)\n    fi\n\n    if [ \"$LLVM_VERSION\" \\> \"3.4\" ]; then\n        # Turn on integrated-as for clang >= 3.5 otherwise file like\n        # can't be compiled\n        COMPILER_RT_CFLAGS=\"$COMPILER_RT_CFLAGS -fintegrated-as\"\n    fi\n\n    if [ -z \"$PLATFORM\" ]; then\n        PLATFORM=\"android-$FIRST_API64_LEVEL\"\n    fi\n\n    builder_begin_android $ABI \"$BUILDDIR\" \"$GCCVER\" \"$LLVM_VERSION\" \"$MAKEFILE\" \"$PLATFORM\"\n    builder_set_srcdir \"$SRC_DIR\"\n    builder_set_dstdir \"$DSTDIR\"\n\n    builder_cflags \"$COMPILER_RT_CFLAGS\"\n\n    if [ $ABI = \"armeabi\" -o $ABI = \"armeabi-v7a\" -o $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-D__ARM_EABI__\"\n        if [ $ABI = \"armeabi-v7a-hard\" ]; then\n            builder_cflags \"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n        fi\n    fi\n\n    builder_ldflags \"$COMPILER_RT_LDFLAGS\"\n    if [ $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-Wl,--no-warn-mismatch -lm_hard\"\n    fi\n\n    builder_sources $(prepare_compiler_rt_source_for_abi $ABI)\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        log \"Building $DSTDIR/libcompiler_rt_static.a\"\n        builder_static_library libcompiler_rt_static\n    else\n        log \"Building $DSTDIR/libcompiler_rt_shared.so\"\n        builder_ldflags \"-lc\"\n        if [ $ABI != \"armeabi-v7a-hard\" ]; then\n            builder_ldflags \"-lm\"\n        fi\n        builder_nostdlib_shared_library libcompiler_rt_shared\n    fi\n    builder_end\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"compiler-rt-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_compiler_rt_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\"\n        build_compiler_rt_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for LIB in libcompiler_rt_static.a libcompiler_rt_shared.so; do\n            FILES=\"$FILES $COMPILER_RT_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=\"compiler-rt-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI compiler-rt binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-crystax.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild libcrystax for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$CRYSTAX_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nTOOLCHAIN_VERSION=gcc4.9\nregister_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nPATCH_SYSROOT=\nregister_option \"--patch-sysroot\" do_patch_sysroot \"Patch sysroot with CrystaX libraries after build\"\ndo_patch_sysroot() { PATCH_SYSROOT=yes; }\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-crystax\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\nbuild_crystax_libs_for_abi ()\n{\n    local ABI=$1\n    local OBJDIR=\"$2\"\n    local TYPE=\"$3\"\n\n    local V\n    if [ \"$VERBOSE2\" = \"yes\" ]; then\n        V=1\n    fi\n\n    dump \"Building $TYPE $ABI libcrystax\"\n\n    rm -Rf $OBJDIR\n    mkdir -p $OBJDIR\n    fail_panic \"Couldn't create temporary build directory $OBJDIR\"\n\n    run make -C $NDK_DIR/$CRYSTAX_SUBDIR -j$NUM_JOBS $TYPE V=$V NDK=$NDK_DIR ABI=$ABI OBJDIR=$OBJDIR TVS=$TOOLCHAIN_VERSION\n    fail_panic \"Couldn't build $TYPE libcrystax\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"crystax-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_crystax_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\"\n        build_crystax_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\"\n    fi\ndone\n\nif [ -n \"$BUILT_ABIS\" ]; then\n    $NDK_DIR/$CRYSTAX_SUBDIR/bin/check-symbols --abis=$(spaces_to_commas $BUILT_ABIS)\n    fail_panic \"Symbols check failed\"\nfi\n\nif [ \"$PATCH_SYSROOT\" = \"yes\" ]; then\n    $NDK_DIR/$CRYSTAX_SUBDIR/bin/patch-sysroot --libraries --fast-copy\n    fail_panic \"Couldn't patch sysroot with CrystaX libraries\"\nfi\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for MLIB in $($NDK_DIR/$CRYSTAX_SUBDIR/bin/config --multilibs --abi=$ABI); do\n            LIBPATH=$($NDK_DIR/$CRYSTAX_SUBDIR/bin/config --libpath --abi=$ABI --multilib=$MLIB)\n            for LIB in libcrystax.a libcrystax.so; do\n                FILES=\"$FILES $CRYSTAX_SUBDIR/$LIBPATH/$LIB\"\n            done\n        done\n        PACKAGE_NAME=\"crystax-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI libcrystax binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-docs.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nDEFAULT_OUT_DIR=$TMPDIR/docs\n\nIN_DIR=\nOUT_DIR=$DEFAULT_OUT_DIR\nFORCE=\nRUN_CHECKS=\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"Rebuild the HTML documentation from the Markdown text.\n\nRebuild the NDK html documentation from the Markdown input source files\nin \\$NDK/docs/text. See \\$NDK/docs/tools/README for the input file format.\n\nBuilds are incremental, but you can use --force to rebuild everything.\n\nOutput files are placed in $DEFAULT_OUT_DIR, unless --out-dir=<path>\nis used.\"\n\nregister_var_option \"--force\" FORCE \"Rebuild all documentation\"\n\nregister_var_option \"--run-checks\" RUN_CHECKS \"Run internal consistency checks\"\n\nregister_option \"--in-dir=<path>\" do_in_dir \"Specify input directory\" \"\\$NDK/docs/text\"\ndo_in_dir () {\n  IN_DIR=$1\n}\n\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory\"\n\nMARKDOWN=markdown_py\nregister_var_option \"--markdown=<executable>\" MARKDOWN \"Specify markdown executable to use\"\n\nextract_parameters \"$@\"\n\n# Path to a Markdown filter program that is used to perform a few NDK-specific\n# substitution in the input .text files. Note that this tool generates Markdown\n# text, not HTML. TODO(digit): Use Markdown Extensions API to perform something\n# similar, which is a lot more work though.\nSUBST_PROGRAM=$ANDROID_NDK_ROOT/docs/tools/ndk-markdown-substitutions.py\n\nif [ \"$RUN_CHECKS\" ]; then\n  # Run unit tests for our $SUBST_PROGRAM\n  $SUBST_PROGRAM --run-checks\n  exit $?\nfi\n\nif [ -z \"$IN_DIR\" ]; then\n  IN_DIR=$ANDROID_NDK_ROOT/docs/text\nfi\nIN_DIR=${IN_DIR%%/}\nlog \"Input directory: $IN_DIR\"\n\nif [ -z \"$OUT_DIR\" ]; then\n  OUT_DIR=$ANDROID_NDK_ROOT/docs\nfi\nOUT_DIR=${OUT_DIR%%/}\nlog \"Output directory: $OUT_DIR\"\n\nTEMP_DIR=$NDK_TMPDIR/build-docs\nmkdir -p \"$TEMP_DIR\"\nfail_panic \"Could not create temporary directory\"\n\nSRC_FILES=$(find \"$IN_DIR\" -name \"*.text\" 2>/dev/null)\nfor SRC_FILE in $SRC_FILES; do\n  # Compute destination file.\n  DST_FILE=${SRC_FILE%%.text}.html\n  DST_FILE=$OUT_DIR${DST_FILE##$IN_DIR}\n  DST_DIR=$(dirname \"$DST_FILE\")\n  # Only rebuild file is source is older than destination, unless --force\n  # is being used.\n  if [ -z \"$FORCE\" -a -f \"$DST_FILE\" -a \"$SRC_FILE\" -ot \"$DST_FILE\" ]; then\n    log \"Skipping: $SRC_FILE --> $DST_FILE\"\n  else\n    log \"Converting: $SRC_FILE --> $DST_FILE\"\n    mkdir -p \"$DST_DIR\"\n    fail_panic \"Could not create output directory: $DST_DIR\"\n    # Apply custom substitutions.\n    TMP_FILE=$TEMP_DIR/$(basename \"$DST_FILE\").temp\n    run $SUBST_PROGRAM --output \"$TMP_FILE\" \"$SRC_FILE\"\n    fail_panic \"Could not pre-process $SRC_FILE!\"\n    # Process with Markdown.\n    run run $MARKDOWN --file=\"$DST_FILE\" \"$TMP_FILE\"\n    fail_panic \"Could not convert $SRC_FILE!\"\n  fi\ndone\n\nrun rm -rf \"$TEMP_DIR\"\n\nif [ \"$OUT_DIR\" != \"$DEFAULT_OUT_DIR\" ]; then\n  dump \"Done!\"\nelse\n  dump \"Done, see $OUT_DIR\"\nfi\n\n"
  },
  {
    "path": "build/instruments/build-gcc.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the gcc and toolchain binaries\n#  for the Android NDK.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the gcc toolchain prebuilt binaries for the Android NDK.\n\nWhere <src-dir> is the location of toolchain sources, <ndk-dir> is\nthe top-level NDK installation path and <toolchain> is the name of\nthe toolchain to use (e.g. arm-linux-androideabi-4.9).\"\n\nRELEASE=`date +%Y%m%d`\nBUILD_OUT=$TMPDIR/build/toolchain\nOPTION_BUILD_OUT=\nregister_var_option \"--build-out=<path>\" OPTION_BUILD_OUT \"Set temporary build directory\"\n\n# Note: platform API level 9 or higher is needed for proper C++ support\nregister_var_option \"--platform=<name>\"  PLATFORM \"Specify platform name\"\n\nOPTION_SYSROOT=\nregister_var_option \"--sysroot=<path>\"   OPTION_SYSROOT   \"Specify sysroot directory directly\"\n\nGDB_VERSION=$DEFAULT_GDB_VERSION\nEXPLICIT_GDB_VERSION=\nregister_option \"--gdb-version=<version>\"  do_gdb_version \"Specify gdb version\" \"$GDB_VERSION\"\ndo_gdb_version () {\n    GDB_VERSION=$1\n    EXPLICIT_GDB_VERSION=true\n}\n\nBINUTILS_VERSION=$DEFAULT_BINUTILS_VERSION\nEXPLICIT_BINUTILS_VERSION=\nregister_option \"--binutils-version=<version>\" do_binutils_version \"Specify binutils version\" \"$BINUTILS_VERSION\"\ndo_binutils_version () {\n    BINUTILS_VERSION=$1\n    EXPLICIT_BINUTILS_VERSION=true\n}\n\nGMP_VERSION=$DEFAULT_GMP_VERSION\nregister_var_option \"--gmp-version=<version>\" GMP_VERSION \"Specify gmp version\"\n\nMPFR_VERSION=$DEFAULT_MPFR_VERSION\nregister_var_option \"--mpfr-version=<version>\" MPFR_VERSION \"Specify mpfr version\"\n\nMPC_VERSION=$DEFAULT_MPC_VERSION\nregister_var_option \"--mpc-version=<version>\" MPC_VERSION \"Specify mpc version\"\n\nCLOOG_VERSION=$DEFAULT_CLOOG_VERSION\nEXPLICIT_CLOOG_VERSION=\nregister_option \"--cloog-version=<version>\" do_cloog_version \"Specify cloog version\" \"$CLOOG_VERSION\"\ndo_cloog_version() {\n    CLOOG_VERSION=$1\n    EXPLICIT_CLOOG_VERSION=true\n}\n\nISL_VERSION=$DEFAULT_ISL_VERSION\nEXPLICIT_ISL_VERSION=\nregister_option \"--isl-version=<version>\" do_isl_version \"Specify ISL version\" \"$ISL_VERSION\"\ndo_isl_version() {\n    ISL_VERSION=$1\n    EXPLICIT_ISL_VERSION=true\n}\n\nPPL_VERSION=$DEFAULT_PPL_VERSION\nregister_var_option \"--ppl-version=<version>\" PPL_VERSION \"Specify ppl version\"\n\nWITH_PYTHON=\nregister_var_option \"--with-python=<path/to/python-config.sh>\" WITH_PYTHON \"Specify python config script, or prebuilt\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Create archive tarball in specific directory\"\n\nENABLE_LANGUAGES=\"c,c++,objc,obj-c++\"\nregister_var_option \"--enable-languages=<name>\" ENABLE_LANGUAGES \"Experimental: specify which languages to build\"\n\nregister_jobs_option\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\nprepare_canadian_toolchain $TMPDIR/build\n\nfix_option BUILD_OUT \"$OPTION_BUILD_OUT\" \"build directory\"\nsetup_default_log_file $BUILD_OUT/config.log\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    GCC_SRC_DIR=\"$SRC_DIR/gcc\"\n    if [ ! -d  \"$GCC_SRC_DIR\" ] ; then\n        echo \"ERROR: Source directory does not contain gcc sources: $SRC_DIR\"\n        exit 1\n    fi\n    SRC_DIR=`cd $SRC_DIR; pwd`\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not create target NDK installation path: $NDK_DIR\"\n            exit 1\n        fi\n    fi\n    NDK_DIR=`cd $NDK_DIR; pwd`\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nprepare_target_build\nparse_toolchain_name $TOOLCHAIN\n\nGCC_BASE_VERSION=$(cat $GCC_SRC_DIR/gcc-$GCC_VERSION/gcc/BASE-VER)\n\n#\n# Try cached package\n# We need previous two lines because ARCH is set in parse_toolchain_name\n#\nset_cache_host_tag\nARCHIVE=\"$TOOLCHAIN-$CACHE_HOST_TAG.tar.xz\"\nif [ \"$PACKAGE_DIR\" ]; then\n    # try for libgccunwind packages\n    ABIS=$(commas_to_spaces $(convert_archs_to_abis $ARCH))\n    for ABI in $ABIS; do\n        PACKAGE_NAME=\"libgccunwind-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    done\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\nif [ -z \"$PLATFORM\" ]; then\n   PLATFORM=\"android-\"$(get_default_api_level_for_arch $ARCH)\nfi\n\nfix_sysroot \"$OPTION_SYSROOT\"\n\ncheck_toolchain_src_dir \"$SRC_DIR\"\n\nif [ ! -d $SRC_DIR/gdb/gdb-$GDB_VERSION ] ; then\n    echo \"ERROR: Missing gdb sources: $SRC_DIR/gdb/gdb-$GDB_VERSION\"\n    echo \"       Use --gdb-version=<version> to specify alternative.\"\n    exit 1\nfi\n\nif [ -z \"$EXPLICIT_CLOOG_VERSION\" ]; then\n    case $TOOLCHAIN in\n        *-4.9)\n            CLOOG_VERSION=$DEFAULT_CLOOG_VERSION_FOR_GCC49\n            ;;\n        *)\n            CLOOG_VERSION=$DEFAULT_CLOOG_VERSION\n    esac\n    dump \"Auto-config: --cloog-version=$CLOOG_VERSION\"\nfi\n\nif [ -z \"$EXPLICIT_ISL_VERSION\" ]; then\n    case $TOOLCHAIN in\n        *-6)\n            ISL_VERSION=$DEFAULT_ISL_VERSION_FOR_GCC6\n            ;;\n        *)\n            ISL_VERSION=$DEFAULT_ISL_VERSION\n    esac\n    dump \"Auto-config: --isl-version=$ISL_VERSION\"\nfi\n\nif [ -z \"$EXPLICIT_BINUTILS_VERSION\" ]; then\n    BINUTILS_VERSION=$(get_default_binutils_version_for_gcc $TOOLCHAIN)\n    dump \"Auto-config: --binutils-version=$BINUTILS_VERSION\"\nfi\n\nif [ ! -d $SRC_DIR/binutils/binutils-$BINUTILS_VERSION ] ; then\n    echo \"ERROR: Missing binutils sources: $SRC_DIR/binutils/binutils-$BINUTILS_VERSION\"\n    echo \"       Use --binutils-version=<version> to specify alternative.\"\n    exit 1\nfi\n\nif [ -z \"$EXPLICIT_GDB_VERSION\" ]; then\n    GDB_VERSION=$(get_default_gdb_version_for_gcc $TOOLCHAIN)\n    dump \"Auto-config: --gdb-version=$GDB_VERSION\"\nfi\n\nif [ ! -d $SRC_DIR/gdb/gdb-$GDB_VERSION ] ; then\n    echo \"ERROR: Missing gdb sources: $SRC_DIR/gdb/gdb-$GDB_VERSION\"\n    echo \"       Use --gdb-version=<version> to specify alternative.\"\n    exit 1\nfi\n\nif [ ! -z \"$WITH_PYTHON\" ] ; then\n    if [ \"$WITH_PYTHON\" = \"prebuilt\" ] ; then\n        WITH_PYTHON_SCRIPT=\"$ANDROID_NDK_ROOT/prebuilt/$HOST_TAG/bin/python-config.sh\"\n    fi\n    if [ ! -f \"$WITH_PYTHON_SCRIPT\" ] ; then\n        echo \"ERROR: --with-python ($WITH_PYTHON_SCRIPT)\"\n        echo \"       Does not exist!\"\n        exit 1\n    else\n        WITH_PYTHON=\"--with-python=$WITH_PYTHON_SCRIPT\"\n    fi\nfi\n\nfix_option MPFR_VERSION \"$OPTION_MPFR_VERSION\" \"mpfr version\"\nif [ ! -f $SRC_DIR/mpfr/mpfr-$MPFR_VERSION.tar.bz2 ] ; then\n    echo \"ERROR: Missing mpfr sources: $SRC_DIR/mpfr/mpfr-$MPFR_VERSION.tar.bz2\"\n    echo \"       Use --mpfr-version=<version> to specify alternative.\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\nset_toolchain_ndk $NDK_DIR $TOOLCHAIN\n\nif [ \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ] ; then\n    dump \"Using C compiler: $CC\"\n    dump \"Using C++ compiler: $CXX\"\nfi\n\nrm -rf $BUILD_OUT\nmkdir -p $BUILD_OUT\n\n# Location where the toolchain license files are\nTOOLCHAIN_LICENSES=$ANDROID_NDK_ROOT/build/instruments/toolchain-licenses\n\n# Without option \"--sysroot\" (and its variations), GCC will attempt to\n# search path specified by \"--with-sysroot\" at build time for headers/libs.\n# Path at --with-sysroot contains minimal headers and libs to boostrap\n# toolchain build, and it's not needed afterward (NOTE: NDK provides\n# sysroot at specified API level,and Android build explicit lists header/lib\n# dependencies.\n#\n# It's better to point --with-sysroot to local directory otherwise the\n# path may be found at compile-time and bad things can happen: eg.\n#  1) The path exists and contain incorrect headers/libs\n#  2) The path exists at remote server and blocks GCC for seconds\n#  3) The path exists but not accessible, which crashes GCC!\n#\n# For canadian build --with-sysroot has to be sub-directory of --prefix.\n# Put TOOLCHAIN_BUILD_PREFIX to BUILD_OUT which is in $TMPDIR by default,\n# and TOOLCHAIN_BUILD_SYSROOT underneath.\n\nTOOLCHAIN_BUILD_PREFIX=$BUILD_OUT/prefix\nTOOLCHAIN_BUILD_SYSROOT=$TOOLCHAIN_BUILD_PREFIX/sysroot\ndump \"Sysroot  : Copying: $SYSROOT --> $TOOLCHAIN_BUILD_SYSROOT\"\nmkdir -p $TOOLCHAIN_BUILD_SYSROOT && (cd $SYSROOT && tar chf - *) | (cd $TOOLCHAIN_BUILD_SYSROOT && tar xf -)\nif [ $? != 0 ] ; then\n    echo \"Error while copying sysroot files. See $TMPLOG\"\n    exit 1\nfi\n\ndump \"Sysroot  : Copying empty libcrystax stubs --> $TOOLCHAIN_BUILD_SYSROOT\"\ncase \"$TOOLCHAIN\" in\n    mips64el-*)\n        dirlist=\"lib lib64 lib64r2 libr2 libr6\"\n        ;;\n    *)\n        dirlist=\"lib\"\nesac\n\nfor dir in $dirlist; do\n    mkdir -p \"$TOOLCHAIN_BUILD_SYSROOT/usr/$dir\"\n    for lib in libcrystax.a libstdc++.a libm.a; do\n        test -f \"$TOOLCHAIN_BUILD_SYSROOT/usr/$dir/$lib\" && continue\n        cp \"$NDK_DIR/$CRYSTAX_SUBDIR/empty/libcrystax.a\" \"$TOOLCHAIN_BUILD_SYSROOT/usr/$dir/$lib\"\n        fail_panic \"Error while copying libcrystax stubs ($dir, $lib). See $TMPLOG for details.\"\n    done\ndone\n\n# configure the toolchain\n#\ndump \"Configure: $TOOLCHAIN toolchain build\"\n# Old versions of the toolchain source packages placed the\n# configure script at the top-level. Newer ones place it under\n# the build directory though. Probe the file system to check\n# this.\nBUILD_SRCDIR=$SRC_DIR/build\nif [ ! -d $BUILD_SRCDIR ] ; then\n    BUILD_SRCDIR=$SRC_DIR\nfi\nOLD_ABI=\"${ABI}\"\nexport CC CXX\nexport CFLAGS_FOR_TARGET=\"$ABI_CFLAGS_FOR_TARGET\"\nexport CXXFLAGS_FOR_TARGET=\"$ABI_CXXFLAGS_FOR_TARGET\"\n# Needed to build a 32-bit gmp on 64-bit systems\nexport ABI=$HOST_GMP_ABI\n\n# Note that the following flags only apply for \"build\" in canadian\n# -Wno-error is needed because our gdb-6.6 sources use -Werror by default\n# and fail to build with recent GCC versions.\nCFLAGS_FOR_BUILD=\"-O2 -s -Wno-error\"\nLDFLAGS_FOR_BUILD=\n\nif [ \"$MINGW\" = \"yes\" ] ; then\n    CFLAGS_FOR_BUILD=$CFLAGS_FOR_BUILD\" -D__USE_MINGW_ANSI_STDIO=1\"\nfi\n\nCFLAGS=\"$CFLAGS_FOR_BUILD $HOST_CFLAGS -static-libgcc -static-libstdc++\"\nLDFLAGS=\"$LDFLAGS_FOR_BUILD $HOST_LDFLAGS\"\n\nexport CFLAGS LDFLAGS CFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD\n\n# This extra flag is used to slightly speed up the build\nEXTRA_CONFIG_FLAGS=\"--disable-bootstrap\"\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # Disable plugin because in canadian cross build, plugin gengtype\n    # will be incorrectly linked with build's library and fails.\n    # ToDo\n    EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --disable-plugin\"\nelse\n    EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-plugins\"\nfi\n\n# Enable OpenMP\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-libgomp\"\n\n# Enable indirect functions.\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-gnu-indirect-function\"\n\n# Disable libcilkrts which needs C++ for now, because libstdlibc++ in NDK is\n# built separately...\ncase \"$TOOLCHAIN\" in\n    x86*-4.9) EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --disable-libcilkrts\"\nesac\n\n# Disable libsanitizer (which depends on libstdc++ built separately) for now\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --disable-libsanitizer\"\n\n# Enable Gold\n\nENABLE_GOLD_FLAGS=\ncase \"$TOOLCHAIN\" in\n    # Note that only ARM/X86 >= GCC 4.6 and AARCH64 >= GCC 4.9 are supported\n    mips*)\n        # Don't use gold for mips/mips64.\n    ;;\n    aarch64*)\n        # Enable ld.gold but ld.bfd remain the default\n        ENABLE_GOLD_FLAGS=\"--enable-gold --enable-ld=default\"\n    ;;\n    *)\n        # Enable ld.gold as default\n        ENABLE_GOLD_FLAGS=\"--enable-gold=default\"\n    ;;\nesac\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" \"$ENABLE_GOLD_FLAGS\n\nif [ \"$MINGW\" != \"yes\" ] ; then\n    EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-threads\"\nfi\n\n# Enable Graphite\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-graphite=yes --with-cloog-version=$CLOOG_VERSION --with-isl-version=$ISL_VERSION\"\n\n# Enable linker option -eh-frame-hdr also for static executable\nEXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" --enable-eh-frame-hdr-for-static\"\n\n# Enable aarch64 workaround for Cortex-A53 Erratum number 835769 and 843419\ncase \"$TOOLCHAIN\" in\n    aarch64*)\n        EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS\" \\\n            --enable-fix-cortex-a53-835769 \\\n            --enable-fix-cortex-a53-843419 \\\n            \"\nesac\n\nMAY_FAIL_DUE_TO_RACE_CONDITION=\nif [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ]; then\n   MAY_FAIL_DUE_TO_RACE_CONDITION=yes\nfi\n\n# Build GNU sed so the configure script works for MIPS/MIPS64 on Darwin.\n# http://b/22099482\ncd $BUILD_OUT && run $SRC_DIR/sed/configure\nif [ $? != 0 ] ; then\n    dump \"Error while trying to configure sed. See $TMPLOG\"\n    exit 1\nfi\nrun make -j$NUM_JOBS\nif [ $? != 0 ] ; then\n    dump \"Error while trying to build sed. See $TMPLOG\"\n    exit 1\nfi\n\n# Put our freshly-built GNU sed ahead of the system one on the path.\nexport PATH=$BUILD_OUT/sed/:$PATH\n\ncd $BUILD_OUT && run \\\n$BUILD_SRCDIR/configure --target=$ABI_CONFIGURE_TARGET \\\n                        --enable-initfini-array \\\n                        --host=$ABI_CONFIGURE_HOST \\\n                        --build=$ABI_CONFIGURE_BUILD \\\n                        --disable-nls \\\n                        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n                        --with-sysroot=$TOOLCHAIN_BUILD_SYSROOT \\\n                        --with-binutils-version=$BINUTILS_VERSION \\\n                        --with-mpfr-version=$MPFR_VERSION \\\n                        --with-mpc-version=$MPC_VERSION \\\n                        --with-gmp-version=$GMP_VERSION \\\n                        --with-gcc-version=$GCC_VERSION \\\n                        --with-gdb-version=$GDB_VERSION \\\n                        $WITH_PYTHON \\\n                        --with-gxx-include-dir=$TOOLCHAIN_BUILD_PREFIX/include/c++/$GCC_BASE_VERSION \\\n                        --with-bugurl=$DEFAULT_ISSUE_TRACKER_URL \\\n                        --enable-languages=$ENABLE_LANGUAGES \\\n                        $EXTRA_CONFIG_FLAGS \\\n                        $ABI_CONFIGURE_EXTRA_FLAGS\nif [ $? != 0 ] ; then\n    dump \"Error while trying to configure toolchain build. See $TMPLOG\"\n    exit 1\nfi\n\nABI=\"$OLD_ABI\"\n# build the toolchain\ndump \"Building : $TOOLCHAIN toolchain [this can take a long time].\"\ncd $BUILD_OUT\nexport CC CXX\nexport ABI=$HOST_GMP_ABI\nexport NUM_JOBS\n\nwhile [ -n \"1\" ]; do\n    run make -j$NUM_JOBS\n    if [ $? = 0 ] ; then\n        break\n    else\n        if [ \"$MAY_FAIL_DUE_TO_RACE_CONDITION\" = \"yes\" ] ; then\n            # Unfortunately, there is a bug in the GCC build scripts that prevent\n            # parallel mingw/darwin canadian cross builds to work properly on some\n            # multi-core machines (but not all, sounds like a race condition). Detect\n            # this and restart in less parallelism, until -j1 also fail\n            NUM_JOBS=$((NUM_JOBS/2))\n            export NUM_JOBS\n            if [ $NUM_JOBS -lt 1 ] ; then\n                echo \"Error while building mingw/darwin toolchain. See $TMPLOG\"\n                exit 1\n            fi\n            dump \"Parallel canadian build failed - continuing in less parallelism -j$NUM_JOBS\"\n        else\n            echo \"Error while building toolchain. See $TMPLOG\"\n            exit 1\n        fi\n    fi\ndone\n\nABI=\"$OLD_ABI\"\n\n# install the toolchain to its final location.\ndump \"Install  : $TOOLCHAIN toolchain binaries.\"\ncd $BUILD_OUT && run make install\nif [ $? != 0 ] ; then\n    # try \"-j1\", eg.  for aarch64-linux-android-4.8 with libatomic may fail to install due to race condition (missing prefix/lib/../lib64/./libiberty.an)\n    NUM_JOBS=1\n    export NUM_JOBS\n    run make install -j$NUM_JOBS\n    if [ $? != 0 ] ; then\n        echo \"Error while installing toolchain. See $TMPLOG\"\n        exit 1\n    fi\nfi\n\nunwind_library_for_abi ()\n{\n    local ABI=\"$1\"\n    local BASE_DIR OBJS UNWIND_OBJS\n\n    case $ABI in\n    armeabi)\n    BASE_DIR=\"$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/libgcc/\"\n    OBJS=\"unwind-arm.o \\\n          libunwind.o \\\n          pr-support.o \\\n          unwind-c.o\"\n    ;;\n    armeabi-v7a)\n    BASE_DIR=\"$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/armv7-a/libgcc/\"\n    OBJS=\"unwind-arm.o \\\n          libunwind.o \\\n          pr-support.o \\\n          unwind-c.o\"\n    ;;\n    armeabi-v7a-hard)\n    BASE_DIR=\"$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/armv7-a/hard/libgcc/\"\n    OBJS=\"unwind-arm.o \\\n          libunwind.o \\\n          pr-support.o \\\n          unwind-c.o\"\n    ;;\n    x86|mips|mips32r6)\n    BASE_DIR=\"$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/libgcc/\"\n    OBJS=\"unwind-c.o \\\n          unwind-dw2-fde-dip.o \\\n          unwind-dw2.o\"\n    ;;\n    arm64-v8a|x86_64|mips64)\n    BASE_DIR=\"$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/libgcc/\"\n    OBJS=\"unwind-c.o \\\n       unwind-dw2-fde-dip.o \\\n       unwind-dw2.o\"\n    ;;\n    esac\n\n    for OBJ in $OBJS; do\n        UNWIND_OBJS=$UNWIND_OBJS\" $BASE_DIR/$OBJ\"\n    done\n    echo $UNWIND_OBJS\n}\n\n# Create libgccunwind.a for app linking\n# $1: arch name\n# $2: NDK_DIR\ncreate_unwind_library ()\n{\n    local ARCH=\"$1\"\n    local NDK_DIR=\"$2\"\n    local ABIS=\"$(commas_to_spaces $(convert_archs_to_abis $ARCH))\"\n    local AR=$BUILD_OUT/binutils-$BINUTILS_VERSION/binutils/ar\n    local ABI UNWIND_OBJS UNWIND_LIB\n    for ABI in $ABIS; do\n        UNWIND_OBJS=$(unwind_library_for_abi $ABI)\n        UNWIND_LIB_DIR=\"$NDK_DIR/$GCCUNWIND_SUBDIR/libs/$ABI/\"\n        run mkdir -p $UNWIND_LIB_DIR\n        run $AR crsD $UNWIND_LIB_DIR/libgccunwind.a $UNWIND_OBJS\n    done\n}\n\n# Only create libgccunwind.a when building default version of gcc\nDEFAULT_GCC_VERSION=$(get_default_gcc_version_for_arch $ARCH)\nif [ \"$GCC_VERSION\" = \"$DEFAULT_GCC_VERSION\" ]; then\n    run create_unwind_library $ARCH $NDK_DIR\nfi\n\n# copy to toolchain path\nrun copy_directory \"$TOOLCHAIN_BUILD_PREFIX\" \"$TOOLCHAIN_PATH\"\n\nif [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ] ; then\n    # For some reasons, libraries in $ABI_CONFIGURE_TARGET (*) are not installed.\n    # Hack here to copy them over.\n    # (*) FYI: libgcc.a and libgcov.a not installed there in the first place\n    INSTALL_TARGET_LIB_PATH=\"$BUILD_OUT/host-$ABI_CONFIGURE_BUILD/install/$ABI_CONFIGURE_TARGET/lib\"\n    TOOLCHAIN_TARGET_LIB_PATH=\"$TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib\"\n    (cd \"$INSTALL_TARGET_LIB_PATH\" &&\n        find . \\( -name \"*.a\" -o -name \"*.la\" -o -name \"*.spec\" \\) -exec install -D \"{}\" \"$TOOLCHAIN_TARGET_LIB_PATH/{}\" \\;)\n    # these lines required to put libatomic.a into arm64/x86_64 package\n    INSTALL_TARGET_LIB_PATH_64=\"$BUILD_OUT/host-$ABI_CONFIGURE_BUILD/install/$ABI_CONFIGURE_TARGET/lib64\"\n    TOOLCHAIN_TARGET_LIB_PATH_64=\"$TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib64\"\n    if [ -d \"$INSTALL_TARGET_LIB_PATH_64\" ]; then\n        (cd \"$INSTALL_TARGET_LIB_PATH_64\" &&\n                find . \\( -name \"*.a\" -o -name \"*.la\" -o -name \"*.spec\" \\) -exec install -D \"{}\" \"$TOOLCHAIN_TARGET_LIB_PATH_64/{}\" \\;)\n    fi\nfi\n\n# build the gdb stub and replace gdb with it. This is done post-install\n# so files are in the correct place when determining the relative path.\nif [ -n \"$WITH_PYTHON\" -a \"$MINGW\" = \"yes\" ] ; then\n    WITH_PYTHON_PREFIX=$(dirname $(dirname \"$WITH_PYTHON_SCRIPT\"))\n    dump \"Building : $TOOLCHAIN GDB stub. \"$TOOLCHAIN_PATH/bin/${ABI_CONFIGURE_TARGET}-gdb.exe\", \"$WITH_PYTHON_PREFIX\", $ABI_CONFIGURE_HOST-gcc\"\n    GCC_FOR_STUB=$ABI_CONFIGURE_HOST-gcc\n    if [ \"$TRY64\" != \"yes\" ]; then\n        # The i586-mingw32msvc-gcc is missing CreateJobObject, SetInformationJobObject, and\n        # AssignProcessToJobObject needed for gdb-stub.c.  Hack to use i686-w64-mingw32-gcc.  ToDo:\n        GCC_FOR_STUB_TARGET=`$GCC_FOR_STUB -dumpmachine`\n        if [ \"$GCC_FOR_STUB_TARGET\" = \"i586-mingw32msvc\" ]; then\n            GCC_FOR_STUB=i686-w64-mingw32-gcc\n            dump \"Override compiler for gdb-stub: $GCC_FOR_STUB\"\n\tfi\n    fi\n    run $NDK_DIR/build/instruments/build-gdb-stub.sh --gdb-executable-path=\"$TOOLCHAIN_PATH/bin/${ABI_CONFIGURE_TARGET}-gdb.exe\" \\\n                                                     --python-prefix-dir=${WITH_PYTHON_PREFIX} \\\n                                                     --mingw-w64-gcc=$GCC_FOR_STUB\n    fail_panic \"Could not build gdb-stub\"\nfi\n\n# don't forget to copy the GPL and LGPL license files\nrun cp -f $TOOLCHAIN_LICENSES/COPYING* $TOOLCHAIN_PATH\n\n# remove some unneeded files\nrun rm -f $TOOLCHAIN_PATH/bin/*-gccbug\nrun rm -f $TOOLCHAIN_PATH/bin/*gdbtui$HOST_EXE\nrun rm -f $TOOLCHAIN_PATH/bin/*-run$HOST_EXE\nrun rm -rf $TOOLCHAIN_PATH/info\nrun rm -rf $TOOLCHAIN_PATH/man\nrun rm -rf $TOOLCHAIN_PATH/share/info\nrun rm -rf $TOOLCHAIN_PATH/share/man\nrun rm -rf $TOOLCHAIN_PATH/lib/gcc/$ABI_CONFIGURE_TARGET/*/install-tools\nrun rm -rf $TOOLCHAIN_PATH/lib/gcc/$ABI_CONFIGURE_TARGET/*/plugin\nrun rm -rf $TOOLCHAIN_PATH/libexec/gcc/$ABI_CONFIGURE_TARGET/*/install-tools\nrun rm -rf $TOOLCHAIN_PATH/lib/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/lib32/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/lib64/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/lib/x86_64/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib/*/libiberty.a\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib/*/*/libiberty.a\nfind $TOOLCHAIN_PATH -name \"*.la\" -exec rm -f {} \\;\n# Remove host install in cross compilation\nif [ \"$ABI_CONFIGURE_HOST\" != \"$ABI_CONFIGURE_TARGET\" ]; then\n    run rm -rf \"$TOOLCHAIN_PATH/$ABI_CONFIGURE_HOST\"\nfi\n# remove sysroot\nrun rm -rf \"$TOOLCHAIN_PATH/sysroot\"\n\n# Remove libstdc++ for now (will add it differently later)\n# We had to build it to get libsupc++ which we keep.\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib/libstdc++.*\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/lib/*/libstdc++.*\nrun rm -rf $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/include/c++\n\n# strip binaries to reduce final package size\ntest -z \"$STRIP\" && STRIP=strip\n# because libpython is statically linked to GDB, it introduces symbols\n# that are only used by Python modules that must not be stripped. This\n# is not true of Windows which dynamically links to Python.\nif [ \"$MINGW\" = \"yes\" ] ; then\n    run $STRIP $TOOLCHAIN_PATH/bin/*\nelse\n    find $TOOLCHAIN_PATH/bin -type f -not -name \"*gdb\" \\\n        | while read EXECUTABLE; do run $STRIP \"$EXECUTABLE\"; done\nfi\nrun $STRIP $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/bin/*\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/cc1$HOST_EXE\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/cc1plus$HOST_EXE\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/cc1obj$HOST_EXE\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/cc1objplus$HOST_EXE\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/collect2$HOST_EXE\nrun $STRIP $TOOLCHAIN_PATH/libexec/gcc/*/*/lto*$HOST_EXE\n\n# Some of the files should really be links to save space.\n# This is mostly to reduce the size of the Windows zip archives,\n# since:\n#  - The toolchain install script actually use hard-links\n#  - Tar automatically detects hard links and will only store a\n#    single copy of each file anyway.\n\n# $1: Source file (will be changed to a link)\n# $2: Destination (relative to source).\ndo_relink () {\n    log \"Relink: $1 --> $2\"\n    local BASENAME DIRNAME\n    DIRNAME=$(dirname \"$1\")\n    BASENAME=$(basename \"$1\")\n    ( cd \"$DIRNAME\" && rm -f \"$BASENAME\" && ln -s \"$2\" \"$BASENAME\" )\n    fail_panic \"Can't relink $1 to $2\"\n}\n\n# <config>/bin/<name> should point to ../../<config>-<name>\nLINK_FILES=$(cd $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/bin && ls * 2>/dev/null)\nfor LINK_FILE in $LINK_FILES; do\n  do_relink $TOOLCHAIN_PATH/$ABI_CONFIGURE_TARGET/bin/$LINK_FILE ../../bin/$ABI_CONFIGURE_TARGET-$LINK_FILE\ndone\n\n# $1: Source file prefix (e.g. 'c++')\n# $2: Destination file prefix (e.g. 'g++')\n# $3: Alternative file prefix if $2 doesn't exist (eg. ld.bfd)\ndo_relink_bin () {\n    local DST_FILE=$2\n    if [ ! -f \"$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET-$DST_FILE$HOST_EXE\" ]; then\n        DST_FILE=$3\n    fi\n    if [ ! -f \"$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET-$DST_FILE$HOST_EXE\" ]; then\n        echo \"ERROR: Can't relink $1 to $DST_FILE because $DST_FILE doesn't exist\"\n        exit 1\n    fi\n    do_relink \\\n        $TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET-$1$HOST_EXE \\\n        $ABI_CONFIGURE_TARGET-$DST_FILE$HOST_EXE\n}\n\ndo_relink_bin c++ g++\ndo_relink_bin gcc-$GCC_VERSION gcc\nif [ \"$GCC_VERSION\" != \"$GCC_BASE_VERSION\" ]; then\n    do_relink_bin gcc-$GCC_BASE_VERSION gcc\nfi\n# symlink ld to either ld.gold or ld.bfd\ncase \"$TOOLCHAIN\" in\n    aarch64*)\n    # Don't make ld.gold as default for now because it's new\n    do_relink_bin ld ld.bfd ld.gold\n    ;;\n    *)\n    do_relink_bin ld ld.gold ld.bfd\n    ;;\nesac\n\n# copy SOURCES file if present\nif [ -f \"$SRC_DIR/SOURCES\" ]; then\n    cp \"$SRC_DIR/SOURCES\" \"$TOOLCHAIN_PATH/SOURCES\"\nfi\n\n# check GLIBC/GLBICXX symbols\nif [ \"$HOST_OS\" = \"linux\" ]; then\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    $ANDROID_NDK_ROOT/build/instruments/check-glibc.sh $NDK_DIR/$SUBDIR\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\n    # package libgccunwind.a\n    if [ \"$GCC_VERSION\" = \"$DEFAULT_GCC_VERSION\" ]; then\n        ABIS=$(commas_to_spaces $(convert_archs_to_abis $ARCH))\n        for ABI in $ABIS; do\n            FILES=\"$GCCUNWIND_SUBDIR/libs/$ABI/libgccunwind.a\"\n            PACKAGE_FILE_NAME=\"libgccunwind-libs-$ABI.tar.xz\"\n            PACKAGE=\"$PACKAGE_DIR/$PACKAGE_FILE_NAME\"\n            pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n            fail_panic \"Could not package $ABI libgccunwind binaries!\"\n            dump \"Packaging: $PACKAGE\"\n            cache_package \"$PACKAGE_DIR\" \"$PACKAGE_FILE_NAME\"\n        done\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_OUT\" ] ; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_OUT\nelse\n    log \"Don't forget to cleanup: $BUILD_OUT\"\nfi\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/instruments/build-gdb-stub.sh",
    "content": "#!/bin/bash\n\nNDK_BUILDTOOLS_PATH=\"$(dirname $0)\"\n. \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\"\n. \"$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh\"\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"\\\nThis program is used to build the gdb stub for Windows and replace a\ngdb executable with it. Because of the replacing nature of this, I\ncheck to see if there's a gdb-orig.exe there already and if so, 'undo'\nthe process first by putting it back. Sample usage:\n\n$0 --gdb-executable-path=\\$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb.exe \\\\\n   --python-prefix-dir=\\$NDK/prebuilt/windows \\\\\n   --mingw-w64-gcc-path=\\$HOME/i686-w64-mingw32/bin/i686-w64-mingw32-gcc\n\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\n\nPYTHON_PREFIX_DIR=\nregister_var_option \"--python-prefix-dir=<path>\" PYTHON_PREFIX_DIR \"Python prefix directory.\"\n\nGDB_EXECUTABLE_PATH=\nregister_var_option \"--gdb-executable-path=<path>\" GDB_EXECUTABLE_PATH \"GDB executable file to stubify.\"\n\nMINGW_W64_GCC=\nregister_var_option \"--mingw-w64-gcc=<program>\" MINGW_W64_GCC \"MinGW-w64 gcc program to use.\"\n\nDEBUG_STUB=\nregister_var_option \"--debug\" DEBUG_STUB \"Build stub in debug mode.\"\n\nextract_parameters \"$@\"\n\nif [ -n \"$DEBUG_STUB\" ]; then\n    STUB_CFLAGS=\"-O0 -g -D_DEBUG\"\nelse\n    STUB_CFLAGS=\"-O2 -s -DNDEBUG\"\nfi\n\nif [ ! -f \"$GDB_EXECUTABLE_PATH\" ]; then\n    panic \"GDB executable $GDB_EXECUTABLE_PATH doesn't exist!\"\nfi\n\nif [ ! -d \"$PYTHON_PREFIX_DIR\" ]; then\n    panic \"Python prefix dir $PYTHON_PREFIX_DIR doesn't exist!\"\nfi\n\nif [ -z \"$MINGW_W64_GCC\" ]; then\n    panic \"Please specify an existing MinGW-w64 cross compiler with --mingw-w64-gcc=<program>\"\nfi\n\nGDB_BIN_DIR=$(cd $(dirname \"$GDB_EXECUTABLE_PATH\"); pwd)\nPYTHON_PREFIX_DIR=$(cd \"$PYTHON_PREFIX_DIR\"; pwd)\nPYTHON_BIN_DIR=${PYTHON_PREFIX_DIR}/bin\n\n# Sed is used to get doubled up Windows style dir separators.\nGDB_TO_PYTHON_REL_DIR=$(relpath \"$GDB_BIN_DIR\" \"$PYTHON_BIN_DIR\" | sed -e s./.\\\\\\\\\\\\\\\\.g)\nPYTHONHOME_REL_DIR=$(relpath \"$GDB_BIN_DIR\" \"$PYTHON_PREFIX_DIR\" | sed -e s./.\\\\\\\\\\\\\\\\.g)\ndump \"GDB_TO_PYTHON_REL_DIR=$GDB_TO_PYTHON_REL_DIR\"\ndump \"PYTHONHOME_REL_DIR=$PYTHONHOME_REL_DIR\"\n\nGDB_EXECUTABLE_ORIG=$(dirname \"$GDB_EXECUTABLE_PATH\")/$(basename \"$GDB_EXECUTABLE_PATH\" \".exe\")-orig.exe\nif [ -f \"$GDB_EXECUTABLE_ORIG\" ] ; then\n    echo \"Warning : Found an existing gdb-stub called $GDB_EXECUTABLE_ORIG so will un-do a previous run of this script.\"\n    cp \"$GDB_EXECUTABLE_ORIG\" \"$GDB_EXECUTABLE_PATH\"\nfi\ncp \"$GDB_EXECUTABLE_PATH\" \"$GDB_EXECUTABLE_ORIG\"\n\nGDB_EXECUTABLE_ORIG_FILENAME=$(basename \"$GDB_EXECUTABLE_ORIG\")\n\n# Build the stub in-place of the real gdb.\nrun $MINGW_W64_GCC $STUB_CFLAGS \"$NDK_DIR/sources/host-tools/gdb-stub/gdb-stub.c\" \\\n                    -o \"$GDB_EXECUTABLE_PATH\" \\\n                    -DGDB_TO_PYTHON_REL_DIR=\\\"$GDB_TO_PYTHON_REL_DIR\\\" \\\n                    -DPYTHONHOME_REL_DIR=\\\"$PYTHONHOME_REL_DIR\\\" \\\n                    -DGDB_EXECUTABLE_ORIG_FILENAME=\\\"$GDB_EXECUTABLE_ORIG_FILENAME\\\"\n\nfail_panic \"Can't build gdb stub!\"\n\ndump \"GDB Stub done!\"\n"
  },
  {
    "path": "build/instruments/build-gdbserver.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the gdbserver binary from\n#  the Android NDK's prebuilt binaries.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the gdbserver prebuilt binary for the Android NDK toolchain.\n\nWhere <src-dir> is the location of the gdbserver sources,\n<ndk-dir> is the top-level NDK installation path and <toolchain>\nis the name of the toolchain to use (e.g. arm-linux-androideabi-4.8).\n\nThe final binary is placed under:\n\n    <ndk-dir>/toolchains <toolchain>/prebuilt/gdbserver\n\nNOTE: The --platform option is ignored if --sysroot is used.\"\n\nVERBOSE=no\n\nOPTION_BUILD_OUT=\nBUILD_OUT=$TMPDIR/build/gdbserver\nregister_option \"--build-out=<path>\" do_build_out \"Set temporary build directory\"\ndo_build_out () { OPTION_BUILD_OUT=\"$1\"; }\n\nregister_var_option \"--platform=<name>\"  PLATFORM \"Target specific platform\"\n\nSYSROOT=\nregister_var_option \"--sysroot=<path>\" SYSROOT \"Specify sysroot directory directly\"\n\nNOTHREADS=no\nregister_var_option \"--disable-threads\" NOTHREADS \"Disable threads support\"\n\nGDB_VERSION=\nregister_var_option \"--gdb-version=<name>\" GDB_VERSION \"Use specific gdb version.\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nsetup_default_log_file\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n    GDBVER=\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ -n \"$GDB_VERSION\" ]; then\n        GDBVER=$GDB_VERSION\n    else\n        GDBVER=$(get_default_gdbserver_version_for_gcc $TOOLCHAIN)\n    fi\n\n    SRC_DIR2=\"$SRC_DIR/gdb/gdb-$GDBVER/gdb/gdbserver\"\n    if [ -d \"$SRC_DIR2\" ] ; then\n        SRC_DIR=\"$SRC_DIR2\"\n        log \"Found gdbserver source directory: $SRC_DIR\"\n    fi\n\n    if [ ! -f \"$SRC_DIR/gdbreplay.c\" ] ; then\n        echo \"ERROR: Source directory does not contain gdbserver sources: $SRC_DIR\"\n        exit 1\n    fi\n\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exist: $NDK_DIR\"\n        exit 1\n    fi\n\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\nprepare_target_build\n\nparse_toolchain_name $TOOLCHAIN\ncheck_toolchain_install $NDK_DIR $TOOLCHAIN\n\n#\n# Try cached package\n#\nARCHIVE=$ARCH-gdbserver.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\n    # will exit 0 if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nif [ -z \"$PLATFORM\" ]; then\n    PLATFORM=\"android-\"$(get_default_api_level_for_arch $ARCH)\nfi\n\n# Check build directory\n#\nfix_sysroot \"$SYSROOT\"\nlog \"Using sysroot: $SYSROOT\"\n\nif [ -n \"$OPTION_BUILD_OUT\" ] ; then\n    BUILD_OUT=\"$OPTION_BUILD_OUT\"\nfi\nlog \"Using build directory: $BUILD_OUT\"\nrun rm -rf \"$BUILD_OUT\"\nrun mkdir -p \"$BUILD_OUT\"\n\n# Copy the sysroot to a temporary build directory\nBUILD_SYSROOT=\"$BUILD_OUT/sysroot\"\nrun mkdir -p \"$BUILD_SYSROOT\"\nrun cp -RHL \"$SYSROOT\"/* \"$BUILD_SYSROOT\"\n\nABI=$(echo $(commas_to_spaces $(convert_arch_to_abi $ARCH)) | tr -s ' ' '\\n' | head -n 1)\nrun mkdir -p \"$BUILD_SYSROOT/usr/lib\"\n\nfor DIR in lib lib64 lib64r2 libr2 libr6 ; do\n    if [ -n \"$BUILD_SYSROOT/usr/$LIB\" ] ; then\n        run cp -RHL $NDK_DIR/$CRYSTAX_SUBDIR/empty/libcrystax.a \"$BUILD_SYSROOT/usr/$DIR\"\n        fail_panic \"Couldn't copy libcrystax.a stub to $BUILD_SYSROOT/usr/$DIR\"\n    fi\ndone\n\n# Don't use CrystaX headers when building gdbserver\nlog \"Restore Google's headers in $BUILD_SYSROOT ...\"\n(cd $BUILD_SYSROOT/usr/include/crystax/google && tar chf - *) | (cd $BUILD_SYSROOT/usr/include && tar xf -)\nif [ $? != 0 ]; then\n    dump \"ERROR: Could not restore Google's headers in $BUILD_SYSROOT!\"\n    exit 1\nfi\nrm -Rf $BUILD_SYSROOT/usr/include/crystax*\n\nLIBDIR=$(get_default_libdir_for_arch $ARCH)\n\n# Remove libthread_db to ensure we use exactly the one we want.\nrm -f $BUILD_SYSROOT/usr/$LIBDIR/libthread_db*\nrm -f $BUILD_SYSROOT/usr/include/thread_db.h\n\nif [ \"$NOTHREADS\" != \"yes\" ] ; then\n    # We're going to rebuild libthread_db.o from its source\n    # that is under sources/android/libthread_db and place its header\n    # and object file into the build sysroot.\n    LIBTHREAD_DB_DIR=$ANDROID_NDK_ROOT/sources/android/libthread_db\n    if [ ! -d \"$LIBTHREAD_DB_DIR\" ] ; then\n        dump \"ERROR: Missing directory: $LIBTHREAD_DB_DIR\"\n        exit 1\n    fi\n\n    run cp $LIBTHREAD_DB_DIR/thread_db.h $BUILD_SYSROOT/usr/include/\n    run $TOOLCHAIN_PREFIX-gcc --sysroot=$BUILD_SYSROOT -o $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.o -c $LIBTHREAD_DB_DIR/libthread_db.c\n    run $TOOLCHAIN_PREFIX-ar -rD $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.a $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.o\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Could not compile libthread_db.c!\"\n        exit 1\n    fi\nfi\n\nlog \"Using build sysroot: $BUILD_SYSROOT\"\n\n# configure the gdbserver build now\ndump \"Configure: $TOOLCHAIN gdbserver-$GDBVER build with $PLATFORM\"\n\n# This flag is required to link libthread_db statically to our\n# gdbserver binary. Otherwise, the program will try to dlopen()\n# the threads binary, which is not possible since we build a\n# static executable.\nCONFIGURE_FLAGS=\"--with-libthread-db=$BUILD_SYSROOT/usr/$LIBDIR/libthread_db.a\"\n# Disable libinproctrace.so which needs crtbegin_so.o and crtbend_so.o instead of\n# CRTBEGIN/END above.  Clean it up and re-enable it in the future.\nCONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --disable-inprocess-agent\"\n# gdb 7.7 builds with -Werror by default, but they redefine constants such as\n# HWCAP_VFPv3 in a way that's compatible with glibc's headers but not our\n# kernel uapi headers. We should send a patch upstream to add the missing\n# #ifndefs, but for now just build gdbserver without -Werror.\nCONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --enable-werror=no\"\n\ncd $BUILD_OUT &&\nexport CC=\"$TOOLCHAIN_PREFIX-gcc --sysroot=$BUILD_SYSROOT\" &&\nexport AR=\"$TOOLCHAIN_PREFIX-ar\" &&\nexport RANLIB=\"$TOOLCHAIN_PREFIX-ranlib\" &&\nexport CFLAGS=\"-O2 $GDBSERVER_CFLAGS\"  &&\nexport LDFLAGS=\"-lcrystax -lm -lc -static -Wl,-z,muldefs -Wl,-z,nocopyreloc -Wl,--no-undefined\" &&\nrun $SRC_DIR/configure \\\n--host=$GDBSERVER_HOST \\\n$CONFIGURE_FLAGS\nif [ $? != 0 ] ; then\n    dump \"Could not configure gdbserver build. See $TMPLOG\"\n    exit 1\nfi\n\n# build gdbserver\ndump \"Building : $TOOLCHAIN gdbserver.\"\ncd $BUILD_OUT &&\nrun make -j$NUM_JOBS\nif [ $? != 0 ] ; then\n    dump \"Could not build $TOOLCHAIN gdbserver. Use --verbose to see why.\"\n    exit 1\nfi\n\n# install gdbserver\n#\n# note that we install it in the toolchain bin directory\n# not in $SYSROOT/usr/bin\n#\nif [ \"$NOTHREADS\" = \"yes\" ] ; then\n    DSTFILE=\"gdbserver-nothreads\"\nelse\n    DSTFILE=\"gdbserver\"\nfi\ndump \"Install  : $TOOLCHAIN $DSTFILE.\"\nDEST=$ANDROID_NDK_ROOT/prebuilt/android-$ARCH/gdbserver\nmkdir -p $DEST &&\nrun $TOOLCHAIN_PREFIX-objcopy --strip-unneeded $BUILD_OUT/gdbserver $DEST/$DSTFILE\nif [ $? != 0 ] ; then\n    dump \"Could not install $DSTFILE. See $TMPLOG\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    dump \"Packaging: $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$ANDROID_NDK_ROOT\" \"prebuilt/android-$ARCH/gdbserver/$DSTFILE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up.\"\nif [ -z \"$OPTION_BUILD_OUT\" ] ; then\n    run rm -rf $BUILD_OUT\nfi\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/instruments/build-gnu-libstdc++.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the prebuilt GNU libsupc++ and\n#  libstdc++ binaries from their sources. It requires an NDK installation\n#  that contains valid plaforms files and toolchain binaries.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt GNU libsupc++ / libstdc++ binaries for the Android NDK.\n\nThis script is called when packaging a new NDK release. It will simply\nrebuild the GNU libsupc++ and libstdc++ static and shared libraries from\nsources.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding gcc source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$GNUSTL_SUBDIR/<gcc-version>, but you can override this with the --out-dir=<path>\noption.\n\"\n\nGCC_VERSION_LIST=$(spaces_to_commas $DEFAULT_GCC_VERSION_LIST)\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"List of GCC versions\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nVISIBLE_LIBGNUSTL_STATIC=\nregister_var_option \"--visible-libgnustl-static\" VISIBLE_LIBGNUSTL_STATIC \"Do not use hidden visibility for libgnustl_static.a\"\n\nWITH_DEBUG_INFO=\nregister_var_option \"--with-debug-info\" WITH_DEBUG_INFO \"Build with -g.  STL is still built with optimization but with debug info\"\n\nWITH_LIBSUPPORT=\nregister_var_option \"--with-libsupport\" WITH_LIBSUPPORT \"Build with -landroid_support.\"\n\nregister_jobs_option\nregister_try64_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nGCC_VERSION_LIST=$(commas_to_spaces $GCC_VERSION_LIST)\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\ncheck_toolchain_src_dir \"$SRCDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnustl\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\n\nHOST_TAG_LIST=\"$HOST_TAG $HOST_TAG32\"\n\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI name\n# $2: Build directory\n# $3: \"static\" or \"shared\"\n# $4: GCC version\n# $5: optional \"thumb\"\nbuild_gnustl_for_abi ()\n{\n    local ARCH BINPREFIX SYSROOT GNUSTL_SRCDIR\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local LIBTYPE=\"$3\"\n    local GCC_VERSION=\"$4\"\n    local THUMB=\"$5\"\n    local DSTDIR=$NDK_DIR/$GNUSTL_SUBDIR/$GCC_VERSION/libs/$ABI/$THUMB\n    local SRC OBJ OBJECTS CFLAGS CXXFLAGS CPPFLAGS\n\n    prepare_target_build $ABI $PLATFORM $NDK_DIR\n    fail_panic \"Could not setup target build.\"\n\n    INSTALLDIR=$BUILDDIR/install-$ABI-$GCC_VERSION/$THUMB\n    BUILDDIR=$BUILDDIR/$LIBTYPE-${ABI}${THUMB}-$GCC_VERSION\n\n    mkdir -p $DSTDIR\n\n    ARCH=$(convert_abi_to_arch $ABI)\n    for TAG in $HOST_TAG_LIST; do\n        BINPREFIX=$NDK_DIR/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\n        if [ -f ${BINPREFIX}gcc ]; then\n            break;\n        fi\n    done\n    GNUSTL_SRCDIR=$SRCDIR/gcc/gcc-$GCC_VERSION/libstdc++-v3\n    # Sanity check\n    if [ ! -d \"$GNUSTL_SRCDIR\" ]; then\n        echo \"ERROR: Not a valid toolchain source tree.\"\n        echo \"Can't find: $GNUSTL_SRCDIR\"\n        exit 1\n    fi\n\n    if [ ! -f \"$GNUSTL_SRCDIR/configure\" ]; then\n        echo \"ERROR: Configure script missing: $GNUSTL_SRCDIR/configure\"\n        exit 1\n    fi\n\n    SYSROOT=$NDK_DIR/$(get_default_platform_sysroot_for_arch $ARCH)\n    LDIR=$SYSROOT\"/usr/\"$(get_default_libdir_for_arch $ARCH)\n    # Sanity check\n    if [ ! -f \"$LDIR/libcrystax.a\" ]; then\n        echo \"ERROR: Empty sysroot! you probably need to run gen-platforms.sh before this script.\"\n        exit 1\n    fi\n    if [ ! -f \"$LDIR/libcrystax.so\" ]; then\n        echo \"ERROR: Sysroot misses shared libraries! you probably need to run gen-platforms.sh\"\n        echo \"*without* the --minimal flag before running this script.\"\n        exit 1\n    fi\n\n    EXTRA_CFLAGS=\"-ffunction-sections -fdata-sections\"\n    EXTRA_LDFLAGS=\n    if [ -n \"$THUMB\" ] ; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mthumb\"\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -mthumb\"\n    fi\n\n    case $ARCH in\n        arm)\n            BUILD_HOST=arm-linux-androideabi\n            ;;\n        arm64)\n            BUILD_HOST=aarch64-linux-android\n            ;;\n        x86)\n            BUILD_HOST=i686-linux-android\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mstackrealign\"\n            ;;\n        x86_64)\n            BUILD_HOST=x86_64-linux-android\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mstackrealign\"\n            ;;\n        mips)\n            BUILD_HOST=mipsel-linux-android\n            ;;\n        mips64)\n            BUILD_HOST=mips64el-linux-android\n            ;;\n    esac\n\n    CFLAGS=\"-fPIC $CFLAGS --sysroot=$SYSROOT -fexceptions -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS\"\n    CXXFLAGS=\"-fPIC $CXXFLAGS --sysroot=$SYSROOT -fexceptions -frtti -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS\"\n    CPPFLAGS=\"$CPPFLAGS --sysroot=$SYSROOT\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        CFLAGS=\"$CFLAGS -g\"\n        CXXFLAGS=\"$CXXFLAGS -g\"\n    fi\n    if [ \"$WITH_LIBSUPPORT\" ]; then\n        panic \"Building with WITH_LIBSUPPORT is not supported for Crystax NDK\"\n        CFLAGS=\"$CFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include\"\n        CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include\"\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -L$NDK_DIR/$SUPPORT_SUBDIR/libs/$ABI -landroid_support\"\n    fi\n    export CFLAGS CXXFLAGS CPPFLAGS\n\n    export CC=${BINPREFIX}gcc\n    export CXX=${BINPREFIX}g++\n    export AS=${BINPREFIX}as\n    export LD=${BINPREFIX}ld\n    export AR=${BINPREFIX}ar\n    export RANLIB=${BINPREFIX}ranlib\n    export STRIP=${BINPREFIX}strip\n\n    setup_ccache\n\n    local CRYSTAX_LDFLAGS\n    # We MUST NOT specify path to libcrystax binaries, because it cause\n    # conflict on configure stage for toolchains with more than one incompatible\n    # multilib variants (such as mips64).\n    # To the moment this script called, we already have sysroot patched,\n    # with libcrystax binaries copied to proper folders, taking into account\n    # different multilibs variants, so configure scripts find them there.\n    CRYSTAX_LDFLAGS=\"\"\n    CRYSTAX_LDFLAGS=\"$CRYSTAX_LDFLAGS -lcrystax\"\n\n    export LDFLAGS=\"$CRYSTAX_LDFLAGS $EXTRA_LDFLAGS -lc\"\n\n    case $ABI in\n        armeabi-v7a|armeabi-v7a-hard)\n            CXXFLAGS=$CXXFLAGS\" -march=armv7-a -mfpu=vfpv3-d16\"\n            LDFLAGS=$LDFLAGS\" -Wl,--fix-cortex-a8\"\n            if [ \"$ABI\" != \"armeabi-v7a-hard\" ]; then\n                CXXFLAGS=$CXXFLAGS\" -mfloat-abi=softfp\"\n            else\n                CXXFLAGS=$CXXFLAGS\" -mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n                LDFLAGS=$LDFLAGS\" -Wl,--no-warn-mismatch -lm_hard\"\n            fi\n            ;;\n        arm64-v8a)\n            CFLAGS=\"$CFLAGS -mfix-cortex-a53-835769\"\n            CXXFLAGS=$CXXFLAGS\" -mfix-cortex-a53-835769\"\n            ;;\n    esac\n\n    if [ \"$ABI\" = \"armeabi\" -o \"$ABI\" = \"armeabi-v7a\" -o \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        CFLAGS=$CFLAGS\" -minline-thumb1-jumptable\"\n        CXXFLAGS=$CXXFLAGS\" -minline-thumb1-jumptable\"\n    fi\n\n    LIBTYPE_FLAGS=\n    if [ $LIBTYPE = \"static\" ]; then\n        # Ensure we disable visibility for the static library to reduce the\n        # size of the code that will be linked against it.\n        if [ -z \"$VISIBLE_LIBGNUSTL_STATIC\" ] ; then\n            LIBTYPE_FLAGS=\"--enable-static --disable-shared\"\n            if [ $GCC_VERSION = \"4.4.3\" -o $GCC_VERSION = \"4.6\" ]; then\n                LIBTYPE_FLAGS=$LIBTYPE_FLAGS\" --disable-visibility\"\n            else\n                LIBTYPE_FLAGS=$LIBTYPE_FLAGS\" --disable-libstdcxx-visibility\"\n            fi\n            CXXFLAGS=$CXXFLAGS\" -fvisibility=hidden -fvisibility-inlines-hidden\"\n        fi\n    else\n        LIBTYPE_FLAGS=\"--disable-static --enable-shared\"\n        #LDFLAGS=$LDFLAGS\" -lsupc++\"\n    fi\n\n    if [ \"$ARCH\" = \"x86_64\" -o \"$ARCH\" = \"mips64\" -o \"$ARCH\" = \"mips\" ] ; then\n        MULTILIB_FLAGS=\n    else\n        MULTILIB_FLAGS=--disable-multilib\n    fi\n\n    PROJECT=\"gnustl_$LIBTYPE gcc-$GCC_VERSION $ABI $THUMB\"\n    echo \"$PROJECT: configuring\"\n    mkdir -p $BUILDDIR && rm -rf $BUILDDIR/* &&\n    cd $BUILDDIR &&\n    run $GNUSTL_SRCDIR/configure \\\n        --prefix=$INSTALLDIR \\\n        --host=$BUILD_HOST \\\n        $LIBTYPE_FLAGS \\\n        --enable-libstdcxx-time \\\n        --disable-symvers \\\n        $MULTILIB_FLAGS \\\n        --disable-nls \\\n        --disable-sjlj-exceptions \\\n        --disable-tls \\\n        --disable-libstdcxx-pch \\\n        --with-gxx-include-dir=$INSTALLDIR/include/c++/$GCC_VERSION\n\n    fail_panic \"Could not configure $PROJECT\"\n\n    echo \"$PROJECT: compiling\"\n    run make -j$NUM_JOBS\n    fail_panic \"Could not build $PROJECT\"\n\n    echo \"$PROJECT: installing\"\n    run make install\n    fail_panic \"Could not create $ABI $THUMB prebuilts for GNU libsupc++/libstdc++\"\n}\n\n\nHAS_COMMON_HEADERS=\n\n# $1: ABI\n# $2: Build directory\n# $3: GCC_VERSION\ncopy_gnustl_libs ()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n    local ARCH=$(convert_abi_to_arch $ABI)\n    local GCC_VERSION=\"$3\"\n    local PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n    PREFIX=${PREFIX%%-}\n\n    local SDIR=\"$BUILDDIR/install-$ABI-$GCC_VERSION\"\n    local DDIR=\"$NDK_DIR/$GNUSTL_SUBDIR/$GCC_VERSION\"\n\n    local GCC_VERSION_NO_DOT=$(echo $GCC_VERSION|sed 's/\\./_/g')\n    # Copy the common headers only once per gcc version\n    if [ -z `var_value HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT` ]; then\n        copy_directory \"$SDIR/include/c++/$GCC_VERSION\" \"$DDIR/include\"\n        rm -rf \"$DDIR/include/$PREFIX\"\n\teval HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT=true\n    fi\n\n    rm -rf \"$DDIR/libs/$ABI\" &&\n    mkdir -p \"$DDIR/libs/$ABI/include\"\n\n    # Copy the ABI-specific headers\n    copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/bits\" \"$DDIR/libs/$ABI/include/bits\"\n    case \"$ARCH\" in\n        x86_64)\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/bits\" \"$DDIR/libs/$ABI/include/32/bits\"\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/x32/bits\" \"$DDIR/libs/$ABI/include/x32/bits\"\n            ;;\n        mips64)\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r1/bits\" \"$DDIR/libs/$ABI/include/32/mips-r1/bits\"\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r2/bits\" \"$DDIR/libs/$ABI/include/32/mips-r2/bits\"\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r6/bits\" \"$DDIR/libs/$ABI/include/32/mips-r6/bits\"\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/mips64-r2/bits\" \"$DDIR/libs/$ABI/include/mips64-r2/bits\"\n            ;;\n        mips)\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/mips-r2/bits\" \"$DDIR/libs/$ABI/include/mips-r2/bits\"\n            copy_directory \"$SDIR/include/c++/$GCC_VERSION/$PREFIX/mips-r6/bits\" \"$DDIR/libs/$ABI/include/mips-r6/bits\"\n            ;;\n    esac\n\n    LDIR=lib\n    if [ \"$ABI\" = \"mips32r6\" ]; then\n        LDIR=libr6\n    elif [ \"$ARCH\" != \"${ARCH%%64*}\" ]; then\n        #Can't call $(get_default_libdir_for_arch $ARCH) which contain hack for arm64\n        LDIR=lib64\n    fi\n\n    # Copy the ABI-specific libraries\n    # Note: the shared library name is libgnustl_shared.so due our custom toolchain patch\n    copy_file_list \"$SDIR/$LDIR\" \"$DDIR/libs/$ABI\" libsupc++.a libgnustl_shared.so\n    # Note: we need to rename libgnustl_shared.a to libgnustl_static.a\n    cp \"$SDIR/$LDIR/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libgnustl_static.a\"\n    case \"$ARCH\" in\n       # for multilib we copy full set. Keep native libs in $ABI dir for compatibility.\n       # TODO: remove it in $ABI top directory\n        x86_64)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/lib64\" \"$DDIR/libs/$ABI/lib64\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libx32\" \"$DDIR/libs/$ABI/libx32\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/lib64/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib64/libgnustl_static.a\"\n            cp \"$SDIR/libx32/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libx32/libgnustl_static.a\"\n            ;;\n        mips64)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr2\" \"$DDIR/libs/$ABI/libr2\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr6\" \"$DDIR/libs/$ABI/libr6\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/lib64\" \"$DDIR/libs/$ABI/lib64\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/lib64r2\" \"$DDIR/libs/$ABI/lib64r2\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/libr2/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr2/libgnustl_static.a\"\n            cp \"$SDIR/libr6/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr6/libgnustl_static.a\"\n            cp \"$SDIR/lib64/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib64/libgnustl_static.a\"\n            cp \"$SDIR/lib64r2/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib64r2/libgnustl_static.a\"\n            ;;\n        mips)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr2\" \"$DDIR/libs/$ABI/libr2\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr6\" \"$DDIR/libs/$ABI/libr6\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/libr2/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr2/libgnustl_static.a\"\n            cp \"$SDIR/libr6/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr6/libgnustl_static.a\"\n            ;;\n    esac\n\n    if [ -d \"$SDIR/thumb\" ] ; then\n        copy_file_list \"$SDIR/thumb/$LDIR\" \"$DDIR/libs/$ABI/thumb\" libsupc++.a libgnustl_shared.so\n        cp \"$SDIR/thumb/$LDIR/libgnustl_shared.a\" \"$DDIR/libs/$ABI/thumb/libgnustl_static.a\"\n    fi\n}\n\n# get_libstdcpp_package_name_for_abi\n# $1: GCC version\n# $2: ABI\nget_libstdcpp_package_name_for_abi ()\n{\n    local package_name\n    \n    package_name=\"gnu-libstdc++-libs-$1-$2\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        package_name=\"${package_name}-g\"\n    fi\n    package_name=\"${package_name}.tar.xz\"\n\n    echo \"$package_name\"\n}\n\nBUILT_GCC_VERSION_LIST=\"\"\nBUILT_ABIS=\"\"\nfor VERSION in $GCC_VERSION_LIST; do\n    PACKAGE_NAME=\"gnu-libstdc++-headers-$VERSION.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\ndone\nfor ABI in $ABIS; do\n    ARCH=$(convert_abi_to_arch $ABI)\n    for VERSION in $GCC_VERSION_LIST; do\n        DO_BUILD_PACKAGE=\"yes\"\n        if [ -n \"$PACKAGE_DIR\" ]; then\n            PACKAGE_NAME=$(get_libstdcpp_package_name_for_abi $VERSION $ABI)\n            echo \"Look for: $PACKAGE_NAME\"\n            try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n            if [ $? = 0 ]; then\n                DO_BUILD_PACKAGE=\"no\"\n            else\n                BUILT_GCC_VERSION_LIST=\"$BUILT_GCC_VERSION_LIST $VERSION\"\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            fi\n        fi\n        if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n            build_gnustl_for_abi $ABI \"$BUILD_DIR\" static $VERSION\n            build_gnustl_for_abi $ABI \"$BUILD_DIR\" shared $VERSION\n            # build thumb version of libraries for 32-bit arm\n            if [ \"$ABI\" != \"${ABI%%arm*}\" -a \"$ABI\" = \"${ABI%%64*}\" ] ; then\n                build_gnustl_for_abi $ABI \"$BUILD_DIR\" static $VERSION thumb\n                build_gnustl_for_abi $ABI \"$BUILD_DIR\" shared $VERSION thumb\n            fi\n            copy_gnustl_libs $ABI \"$BUILD_DIR\" $VERSION\n        fi\n    done\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for VERSION in $BUILT_GCC_VERSION_LIST; do\n        # First, the headers as a single package for a given gcc version\n        PACKAGE_NAME=\"gnu-libstdc++-headers-$VERSION.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$GNUSTL_SUBDIR/$VERSION/include\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n\n        # Then, one package per version/ABI for libraries\n        PACKAGE_NAME=\"\"\n        for ABI in $BUILT_ABIS; do\n            if [ ! -d \"$NDK_DIR/$GNUSTL_SUBDIR/$VERSION/libs/$ABI\" ]; then\n                continue\n            fi\n            FILES=\"\"\n            case \"$ABI\" in\n                x86_64)\n                    MULTILIB=\"include/32/bits include/x32/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libx32/libsupc++.a libx32/libgnustl_static.a libx32/libgnustl_shared.so\n                              lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so\"\n                    ;;\n                mips64)\n                    MULTILIB=\"include/32/mips-r1/bits include/32/mips-r2/bits include/32/mips-r6/bits include/bits include/mips64-r2/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so\n                              libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so\n                              lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so\n                              lib64r2/libsupc++.a lib64r2/libgnustl_static.a lib64r2/libgnustl_shared.so\"\n                    ;;\n                mips|mips32r6)\n                    MULTILIB=\"include/mips-r2/bits include/mips-r6/bits include/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so\n                              libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so\"\n                    ;;\n                *)\n                    MULTILIB=\n                    ;;\n            esac\n            for LIB in include/bits $MULTILIB libsupc++.a libgnustl_static.a libgnustl_shared.so; do\n                FILES=\"$FILES $GNUSTL_SUBDIR/$VERSION/libs/$ABI/$LIB\"\n                THUMB_FILE=\"$GNUSTL_SUBDIR/$VERSION/libs/$ABI/thumb/$LIB\"\n                if [ -f \"$NDK_DIR/$THUMB_FILE\" ] ; then\n                    FILES=\"$FILES $THUMB_FILE\"\n                fi\n            done\n            PACKAGE_NAME=$(get_libstdcpp_package_name_for_abi $VERSION $ABI)\n            PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n            dump \"Packaging: $PACKAGE\"\n            pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n            fail_panic \"Could not package $ABI GNU libstdc++ binaries!\"\n            cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n        done\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-gnustep-libobjc2.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNUstep libobjc2 for the Android NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$GNUSTEP_OBJC2_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nTOOLCHAIN_VERSION=clang${DEFAULT_LLVM_VERSION}\nregister_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBOBJC2_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBOBJC2_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNUstep libobjc2 source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBOBJC2_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBOBJC2_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnustep-libobjc2\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_libobjc2_for_abi ()\n{\n    local ABI=$1\n    local BLDDIR=\"$2\"\n\n    local BUILDDIR=\"$BLDDIR/build\"\n    local INSTALLDIR=\"$BLDDIR/install\"\n\n    mkdir -p \"$BUILDDIR\"\n    fail_panic \"Couldn't create GNUstep libobjc2 build directory for $ABI\"\n\n    dump \"=== Building GNUstep libobjc2 for $ABI\"\n    run make -C $LIBOBJC2_SRCDIR/android -j$NUM_JOBS install \\\n        WITH_TESTS=NO \\\n        BUILDDIR=\"$BUILDDIR\" \\\n        INSTALLDIR=\"$INSTALLDIR\" \\\n        NDK=\"$NDK_DIR\" \\\n        ABI=$ABI \\\n        TOOLCHAIN_VERSION=$TOOLCHAIN_VERSION \\\n        VERBOSE=1\n\n    fail_panic \"Couldn't build GNUstep libobjc2 for $ABI\"\n\n    if [ -z \"$OBJC2_HEADERS_INSTALLED\" ]; then\n        run rm -Rf $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include\n        run mkdir -p $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include\n        fail_panic \"Can't create directory for headers\"\n\n        run cp -r $INSTALLDIR/include/* $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include/\n        fail_panic \"Can't install headers\"\n\n        OBJC2_HEADERS_INSTALLED=yes\n        export OBJC2_HEADERS_INSTALLED\n    fi\n\n    run rm -Rf $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    run mkdir -p $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    fail_panic \"Can't create directory for $ABI libraries\"\n\n    run cp $INSTALLDIR/lib/* $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    fail_panic \"Can't install $ABI libraries\"\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"gnustep-objc2-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_NAME\" \"$PACKAGE_DIR\" no_exit\n    if [ $? -eq 0 ]; then\n        OBJC2_HEADERS_NEED_PACKAGE=no\n    else\n        OBJC2_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nOBJC2_HEADERS_INSTALLED=\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"gnustep-objc2-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            if [ \"$OBJC2_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libobjc2_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$OBJC2_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=$GNUSTEP_OBJC2_SUBDIR/include\n        PACKAGE_NAME=\"gnustep-objc2-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package GNUstep objc2 headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for LIB in libobjc.so; do\n            FILES=\"$FILES $GNUSTEP_OBJC2_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=\"gnustep-objc2-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNUstep objc2 binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-host-awk.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Build the host version of the awk executable and place it\n# at the right location\n\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the host awk tool used by the NDK.\"\n\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK install directory\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive to package directory\"\n\nGNUMAKE=make\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program\"\n\nextract_parameters \"$@\"\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=ndk-awk-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nSUBDIR=$(get_prebuilt_host_exec awk)\nOUT=$NDK_DIR/$SUBDIR\n\nAWK_VERSION=20071023\nAWK_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/nawk-$AWK_VERSION\nif [ ! -d \"$AWK_SRCDIR\" ]; then\n    echo \"ERROR: Can't find nawk-$AWK_VERSION source tree: $AWK_SRCDIR\"\n    exit 1\nfi\n\nlog \"Using sources from: $AWK_SRCDIR\"\n\nprepare_host_build\n\nBUILD_DIR=$NDK_TMPDIR\nBUILD_MINGW=\nif [ \"$MINGW\" = \"yes\" ]; then\n  BUILD_MINGW=yes\nfi\nif [ \"$TRY64\" = \"yes\" ]; then\n  BUILD_TRY64=yes\nfi\n\nlog \"Configuring the build\"\nmkdir -p $BUILD_DIR && rm -rf $BUILD_DIR/*\nprepare_canadian_toolchain $BUILD_DIR\nlog \"Building $HOST_TAG awk\"\nexport HOST_CC=\"$CC\" &&\nexport CFLAGS=$HOST_CFLAGS\" -O2 -s\" &&\nexport LDFLAGS=$HOST_LDFLAGS &&\nexport NATIVE_CC=\"gcc\" &&\nexport NATIVE_CFLAGS=\" -O2 -s -I$BUILD_DIR -I.\" &&\nexport NATIVE_LDFLAGS= &&\nrun $GNUMAKE \\\n    -C \"$AWK_SRCDIR\" \\\n    -j $NUM_JOBS \\\n    BUILD_DIR=\"$BUILD_DIR\" \\\n    MINGW=\"$BUILD_MINGW\" \\\n    TRY64=\"$BUILD_TRY64\" \\\n    V=1\nfail_panic \"Failed to build the awk-$AWK_VERSION executable!\"\n\nlog \"Copying executable to prebuilt location\"\nrun mkdir -p $(dirname \"$OUT\") && cp \"$BUILD_DIR/$(get_host_exec_name ndk-awk)\" \"$OUT\"\nfail_panic \"Could not copy executable to: $OUT\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    dump \"Packaging: $ARCHIVE\"\n    mkdir -p \"$PACKAGE_DIR\" &&\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not package archive: $PACKAGE_DIR/$ARCHIVE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up\"\nrm -rf $BUILD_DIR\n\nlog \"Done.\"\n"
  },
  {
    "path": "build/instruments/build-host-gdb.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Rebuild the host GDB binaries from sources.\n#\n\n# include common function and variable definitions\nNDK_BUILDTOOLS_PATH=\"$(dirname $0)\"\n. \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\"\n. \"$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh\"\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"\\\nThis program is used to rebuild one or more NDK gdb client programs from\nsources.\n\nBy default, the script rebuilds GDB for your host system [$HOST_TAG],\nbut you can use --systems=<tag1>,<tag2>,.. to ask binaries that can run on\nseveral distinct systems. Each <tag> value in the list can be one of the\nfollowing:\n\n   linux-x86\n   linux-x86_64\n   windows\n   windows-x86  (equivalent to 'windows')\n   windows-x86_64\n   darwin-x86\n   darwin-x86_64\n\nFor example, here's how to rebuild the ARM toolchains on Linux\nfor four different systems:\n\n  $PROGNAME --toolchain-src-dir=/path/to/toolchain/src \\\n    --systems=linux-x86,linux-x86_64,windows,windows-x86_64 \\\n    --arch=arm\"\n\nTOOLCHAIN_SRC_DIR=\nregister_var_option \"--toolchain-src-dir=<path>\" TOOLCHAIN_SRC_DIR \"Select toolchain source directory\"\n\nGDB_VERSION=\"6.6 7.3.x\"\nregister_var_option \"--gdb-version=<version>\" GDB_VERSION \"Select GDB version(s).\"\n\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Build GDB into directory\"\n\nPYTHON_VERSION=\nregister_var_option \"--python-version=<version>\" PYTHON_VERSION \"Python version.\"\n\nPYTHON_BUILD_DIR=\nregister_var_option \"--python-build-dir=<path>\" PYTHON_BUILD_DIR \"Python build directory.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Select NDK install directory.\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Package prebuilt tarballs into directory.\"\n\nARCHS=$DEFAULT_ARCHS\nregister_var_option \"--arch=<list>\" ARCHS \"Build GDB client for these CPU architectures.\"\n\nbh_register_options\n\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nif [ -n \"$PARAMETERS\" ]; then\n    panic \"This script doesn't take parameters, only options. See --help\"\nfi\n\nif [ -z \"$TOOLCHAIN_SRC_DIR\" ]; then\n    panic \"Please use --toolchain-src-dir=<path> to select toolchain source directory.\"\nfi\n\nBH_HOST_SYSTEMS=$(commas_to_spaces $BH_HOST_SYSTEMS)\n\n# Sanity check for all GDB versions\nfor VERSION in $(commas_to_spaces $GDB_VERSION); do\n    GDB_SRCDIR=$TOOLCHAIN_SRC_DIR/gdb/gdb-$VERSION\n    if [ ! -d \"$GDB_SRCDIR\" ]; then\n        panic \"Missing source directory: $GDB_SRCDIR\"\n    fi\ndone\n\nif [ -z \"$BUILD_DIR\" ] ; then\n    BUILD_DIR=$TMPDIR/buildgdb\nfi\n\nbh_setup_build_dir $BUILD_DIR\n\n# Sanity check that we have the right compilers for all hosts\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\ndone\n\n# Return the build install directory of a given GDB version\n# $1: host system tag\n# $2: target system tag\n# $3: gdb version\ngdb_build_install_dir ()\n{\n    echo \"$BH_BUILD_DIR/install/$1/gdb-$(get_toolchain_name_for_arch $(bh_tag_to_arch $2))-$3\"\n}\n\n# $1: host system tag\n# $2: target system tag\n# $3: gdb version\ngdb_ndk_package_name ()\n{\n    echo \"gdb-$(get_toolchain_name_for_arch $(bh_tag_to_arch $2))-$3-$1\"\n}\n\n\n# Same as gdb_build_install_dir, but for the final NDK installation\n# directory. Relative to $NDK_DIR.\ngdb_ndk_install_dir ()\n{\n    echo \"toolchains/gdb-$(get_toolchain_name_for_arch $(bh_tag_to_arch $2))-$3/prebuilt/$(install_dir_from_host_tag $1)\"\n}\n\npython_build_install_dir ()\n{\n    echo \"$PYTHON_BUILD_DIR/install/prebuilt/$(install_dir_from_host_tag $1)\"\n}\n\n# $1: host system tag\nbuild_expat ()\n{\n    local ARGS\n    local SRCDIR=$TOOLCHAIN_SRC_DIR/expat/expat-2.0.1\n    local BUILDDIR=$BH_BUILD_DIR/build-expat-2.0.1-$1\n    local INSTALLDIR=$BH_BUILD_DIR/install-host-$1\n\n    ARGS=\" --prefix=$INSTALLDIR\"\n    ARGS=$ARGS\" --disable-shared --enable-static\"\n    ARGS=$ARGS\" --build=$BH_BUILD_CONFIG\"\n    ARGS=$ARGS\" --host=$BH_HOST_CONFIG\"\n\n    TEXT=\"$(bh_host_text) expat:\"\n\n    mkdir -p \"$BUILDDIR\" && rm -rf \"$BUILDDIR\"/* &&\n    cd \"$BUILDDIR\" &&\n    dump \"$TEXT Building\"\n    run \"$SRCDIR\"/configure $ARGS &&\n    run make -j$NUM_JOBS &&\n    run make -j$NUM_JOBS install\n}\n\nneed_build_expat ()\n{\n    bh_stamps_do host-expat-$1 build_expat $1\n}\n\n# $1: host system tag\n# $2: target tag\n# $3: gdb version\nbuild_host_gdb ()\n{\n    local SRCDIR=$TOOLCHAIN_SRC_DIR/gdb/gdb-$3\n    local BUILDDIR=$BH_BUILD_DIR/build-gdb-$1-$2-$3\n    local INSTALLDIR=$(gdb_build_install_dir $1 $2 $3)\n    local ARGS TEXT\n\n    if [ ! -f \"$SRCDIR/configure\" ]; then\n        panic \"Missing configure script in $SRCDIR\"\n    fi\n\n    bh_set_target_tag $2\n    bh_setup_host_env\n\n    need_build_expat $1\n    local EXPATPREFIX=$BH_BUILD_DIR/install-host-$1\n\n    ARGS=\" --prefix=$INSTALLDIR\"\n    ARGS=$ARGS\" --disable-shared\"\n    ARGS=$ARGS\" --build=$BH_BUILD_CONFIG\"\n    ARGS=$ARGS\" --host=$BH_HOST_CONFIG\"\n    ARGS=$ARGS\" --target=$(bh_tag_to_config_triplet $2)\"\n    ARGS=$ARGS\" --disable-werror\"\n    ARGS=$ARGS\" --disable-nls\"\n    ARGS=$ARGS\" --disable-docs\"\n    ARGS=$ARGS\" --with-expat\"\n    ARGS=$ARGS\" --with-libexpat-prefix=$EXPATPREFIX\"\n    if [ -n \"$PYTHON_VERSION\" ]; then\n        ARGS=$ARGS\" --with-python=$(python_build_install_dir $BH_HOST_TAG)/bin/python-config.sh\"\n        if [ $1 = windows-x86 -o $1 = windows-x86_64 ]; then\n            # This is necessary for the Python integration to build.\n            CFLAGS=$CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            CXXFLAGS=$CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n        fi\n    fi\n    TEXT=\"$(bh_host_text) gdb-$BH_TARGET_ARCH-$3:\"\n\n    mkdir -p \"$BUILDDIR\" && rm -rf \"$BUILDDIR\"/* &&\n    cd \"$BUILDDIR\" &&\n    dump \"$TEXT Building\"\n    run \"$SRCDIR\"/configure $ARGS &&\n    run make -j$NUM_JOBS &&\n    run make -j$NUM_JOBS install\n    fail_panic \"Failed to configure/make/install gdb\"\n}\n\nneed_build_host_gdb ()\n{\n    bh_stamps_do host-gdb-$1-$2-$3 build_host_gdb $1 $2 $3\n}\n\n# Install host GDB binaries and support files to the NDK install dir.\n# $1: host tag\n# $2: target tag\n# $3: gdb version\ninstall_host_gdb ()\n{\n    local SRCDIR=\"$(gdb_build_install_dir $1 $2 $3)\"\n    local DSTDIR=\"$NDK_DIR/$(gdb_ndk_install_dir $1 $2 $3)\"\n    local PYDIR=\"$NDK_DIR/$(python_ndk_install_dir $1)\"\n\n    need_build_host_gdb $1 $2 $3\n\n    bh_set_target_tag $2\n\n    dump \"$(bh_host_text) gdb-$BH_TARGET_ARCH-$3: Installing\"\n    run copy_directory \"$SRCDIR/bin\" \"$DSTDIR/bin\"\n    if [ -d \"$SRCDIR/share/gdb\" ]; then\n        run copy_directory \"$SRCDIR/share/gdb\" \"$DSTDIR/share/gdb\"\n    fi\n\n    # build the gdb stub and replace gdb with it. This is done post-install\n    # so files are in the correct place when determining the relative path.\n\n    case \"$1\" in\n        windows*)\n            dump \"$TEXT Building gdb-stub\"\n            bh_setup_host_env\n            GCC_FOR_STUB=${BH_HOST_CONFIG}-gcc\n            GCC_FOR_STUB_TARGET=`$GCC_FOR_STUB -dumpmachine`\n            if [ \"$GCC_FOR_STUB_TARGET\" = \"i586-mingw32msvc\" ]; then\n                GCC_FOR_STUB=i686-w64-mingw32-gcc\n                dump \"Override compiler for gdb-stub: $GCC_FOR_STUB\"\n            fi\n\n            # Uses $TOOLCHAIN_PATH/bin/$(bh_tag_to_config_triplet $2)-gdb.exe (1) instead of\n            # ${DSTDIR}/bin/$(bh_tag_to_config_triplet $2)-gdb.exe (2) because\n            # the final layout is to (1) which is a folder deeper than (2).\n            # Sample (1):\n            #  $NDK/gdb-arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb.exe\n            # Sample (2):\n            #  $NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/bin/arm-linux-androideabi-gdb.exe\n            run $NDK_BUILDTOOLS_PATH/build-gdb-stub.sh \\\n                --gdb-executable-path=${DSTDIR}/bin/$(bh_tag_to_config_triplet $2)-gdb.exe \\\n                --python-prefix-dir=${PYDIR} \\\n                --mingw-w64-gcc=${GCC_FOR_STUB}\n            fail_panic \"Failed to build gdb-sutb\"\n            ;;\n        *)\n            ;;\n    esac\n}\n\nneed_install_host_gdb ()\n{\n    bh_stamps_do install-host-gdb-$1-$2-$3 install_host_gdb $1 $2 $3\n}\n\n# Package host GDB binaries into a tarball\n# $1: host tag\n# $2: target tag\n# $3: gdb version\npackage_host_gdb ()\n{\n    local SRCDIR=\"$(gdb_ndk_install_dir $1 $2 $3)\"\n    local PACKAGENAME=$(gdb_ndk_package_name $1 $2 $3).tar.xz\n    local PACKAGE=\"$PACKAGE_DIR/$PACKAGENAME\"\n\n    need_install_host_gdb $1 $2 $3\n\n    bh_set_target_tag $2\n\n    dump \"$(bh_host_text) $PACKAGENAME: Packaging\"\n    run pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$SRCDIR\"\n}\n\nGDB_VERSION=$(commas_to_spaces $GDB_VERSION)\nARCHS=$(commas_to_spaces $ARCHS)\n\n# Let's build this\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\n    for ARCH in $ARCHS; do\n        for VERSION in $GDB_VERSION; do\n            need_install_host_gdb $SYSTEM android-$ARCH $VERSION\n        done\n    done\ndone\n\nif [ \"$PACKAGE_DIR\" ]; then\n    for SYSTEM in $BH_HOST_SYSTEMS; do\n        bh_setup_build_for_host $SYSTEM\n        for ARCH in $ARCHS; do\n            for VERSION in $GDB_VERSION; do\n                bh_stamps_do package_host_gdb-$SYSTEM-$ARCH-$VERSION package_host_gdb $SYSTEM android-$ARCH $VERSION\n            done\n        done\n    done\nfi\n"
  },
  {
    "path": "build/instruments/build-host-make.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Build the host version of the make executable and place it\n# at the right location\n\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the host GNU Make tool used by the NDK.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Install to specific NDK directory\"\n\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nOUT=\nCUSTOM_OUT=\nregister_option \"--out=<file>\" do_out \"Specify output executable path\" \"$OUT\"\ndo_out () { CUSTOM_OUT=true; OUT=$1; }\n\nGNUMAKE=make\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program for the build\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binaries into package directory\"\n\nextract_parameters \"$@\"\n\nif [ -z \"$CUSTOM_OUT\" ]; then\n    SUBDIR=$(get_prebuilt_host_exec make)\n    OUT=$NDK_DIR/$SUBDIR\n    log \"Auto-config: --out=$OUT\"\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=ndk-make-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nGNUMAKE_VERSION=3.81\nGNUMAKE_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/make-$GNUMAKE_VERSION\nif [ ! -d \"$GNUMAKE_SRCDIR\" ]; then\n    echo \"ERROR: Can't find make-$GNUMAKE_VERSION source tree: $GNUMAKE_SRCDIR\"\n    exit 1\nfi\n\nlog \"Using sources from: $GNUMAKE_SRCDIR\"\n\nprepare_abi_configure_build\nprepare_host_build\n\nTMP_SRCDIR=$NDK_TMPDIR/src\n\n# We need to copy the sources to a temporary directory because\n# the build system will modify some documentation files in the\n# source directory. Sigh...\nlog \"Copying sources to temporary directory: $TMP_SRCDIR\"\nmkdir -p \"$TMP_SRCDIR\" && copy_directory \"$GNUMAKE_SRCDIR\" \"$TMP_SRCDIR\"\nfail_panic \"Could not copy GNU Make sources to: $TMP_SRCDIR\"\n\nBUILD_DIR=$NDK_TMPDIR/build\n\nCONFIGURE_FLAGS=\"--disable-nls --disable-rpath\"\nif [ \"$MINGW\" = \"yes\" ]; then\n    # Required for a proper mingw cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=i586-pc-mingw32\"\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # Required for a proper darwin cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=$ABI_CONFIGURE_HOST\"\nfi\n\nlog \"Configuring the build\"\nmkdir -p $BUILD_DIR && rm -rf $BUILD_DIR/*\nprepare_canadian_toolchain $BUILD_DIR\ncd $BUILD_DIR &&\nCFLAGS=$HOST_CFLAGS\" -O2 -s\" &&\nexport CC CFLAGS &&\nrun $TMP_SRCDIR/configure $CONFIGURE_FLAGS --build=$ABI_CONFIGURE_BUILD\nfail_panic \"Failed to configure the make-$GNUMAKE_VERSION build!\"\n\nlog \"Building make\"\nrun $GNUMAKE -j $NUM_JOBS\nfail_panic \"Failed to build the make-$GNUMAKE_VERSION executable!\"\n\nlog \"Copying executable to prebuilt location\"\nrun mkdir -p $(dirname \"$OUT\") && cp $(get_host_exec_name make) $OUT\nfail_panic \"Could not copy executable to: $OUT\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    dump \"Packaging: $ARCHIVE\"\n    mkdir -p \"$PACKAGE_DIR\" &&\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not package archive: $PACKAGE_DIR/$ARCHIVE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up\"\nrm -rf $BUILD_DIR $TMP_SRCDIR\n\nlog \"Done.\"\n"
  },
  {
    "path": "build/instruments/build-host-prebuilts.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Rebuild all host toolchains and programs\n#\n\nPROGDIR=$(dirname $0)\nSCRIPTS_DIR=$(dirname $PROGDIR)/scripts\n. $PROGDIR/prebuilt-common.sh\n\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"NDK installation directory\"\n\nSYSTEMS=$HOST_TAG\n# Replace x86_64 by x86 at the end of SYSTEMS since we will produce\n# 32-bit toolchains by default, i.e. unless you use the --try-64 flag\nif [ \"${SYSTEMS%%x86_64}\" != \"$SYSTEMS\" ]; then\n    SYSTEMS=${SYSTEMS%%x86_64}x86\nfi\n# If we are on Linux, we are able to generate the Windows binaries\n# with the mingw32 cross-toolchain.\nif [ \"$SYSTEMS\" = \"linux-x86\" ]; then\n    SYSTEMS=$SYSTEMS\",windows\"\n    # If darwin toolchain exist, build darwin too\n    if [ -f \"${DARWIN_TOOLCHAIN}-gcc\" ]; then\n        SYSTEMS=$SYSTEMS\",darwin-x86\"\n    fi\nfi\nCUSTOM_SYSTEMS=\nregister_option \"--systems=<names>\" do_SYSTEMS \"List of host systems to build for\"\ndo_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; }\n\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<list>\" ARCHS \"List of target archs to build for\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Package toolchain into this directory\"\n\nDARWIN_SSH=\nregister_var_option \"--darwin-ssh=<hostname>\" DARWIN_SSH \"Generate darwin packages on remote host\"\n\nNO_GEN_PLATFORMS=\nregister_var_option \"--no-gen-platforms\" NO_GEN_PLATFORMS \"Don't generate platforms/ directory, use existing one\"\n\nGCC_VERSION_LIST=\"default\" # it's arch defined by default so use default keyword\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"List of GCC release versions\"\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<vers>\" LLVM_VERSION_LIST \"List of LLVM release versions\"\n\nCHECK_FLAG=\ndo_check_option () { CHECK_FLAG=\"--check\"; }\nregister_option \"--check\" do_check_option \"Check host prebuilts\"\n\nregister_try64_option\n\nPROGRAM_PARAMETERS=\"<toolchain-src-dir>\"\nPROGRAM_DESCRIPTION=\"This script can be used to rebuild all the host NDK toolchains at once.\"\n\nextract_parameters \"$@\"\n\n# Check toolchain source path\nSRC_DIR=\"$PARAMETERS\"\nif [ -z \"$SRC_DIR\" ]; then\n    echo \"ERROR: Please provide the path to the toolchain source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$SRC_DIR\" ]; then\n    echo \"ERROR: Not a directory: '$SRC_DIR'\"\n    exit 1\nfi\n\nif [ ! -f \"$SRC_DIR/build/configure\" -o ! -d \"$SRC_DIR/gcc/gcc-$DEFAULT_GCC32_VERSION\" -o ! -d \"$SRC_DIR/gcc/gcc-$DEFAULT_GCC64_VERSION\" ]; then\n    echo \"ERROR: The file $SRC_DIR/build/configure or\"\n    echo \"       the directory $SRC_DIR/gcc/gcc-$DEFAULT_GCC32_VERSION or\"\n    echo \"       $SRC_DIR/gcc/gcc-$DEFAULT_GCC64_VERSION does not exist\"\n    echo \"This is not the top of a toolchain tree: $SRC_DIR\"\n    exit 1\nfi\n\nVENDOR_SRC_DIR=$(cd $SRC_DIR/../vendor && pwd)\n\n# Now we can do the build\nBUILDTOOLS=$ANDROID_NDK_ROOT/build/instruments\n\nif [ -z \"$NO_GEN_PLATFORMS\" ]; then\n    echo \"Preparing the build...\"\n    run $BUILDTOOLS/gen-platforms.sh --minimal --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS)\n    fail_panic \"Could not generate minimal sysroot!\"\nelse\n    if [ ! -d \"$NDK_DIR/platforms\" ]; then\n        echo \"ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms\"\n        exit 1\n    fi\nfi\n\nSYSTEMS=$(commas_to_spaces $SYSTEMS)\nARCHS=$(commas_to_spaces $ARCHS)\n\nLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)\n\nif [ \"$DARWIN_SSH\" -a -z \"$CUSTOM_SYSTEMS\" ]; then\n    SYSTEMS=\" darwin-x86\"\nfi\n\nFLAGS=\nif [ \"$DRYRUN\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --dryrun\"\nfi\nif [ \"$VERBOSE\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --verbose\"\nfi\nif [ \"$TRY64\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --try-64\"\nelse\n    force_32bit_binaries\nfi\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\n    FLAGS=$FLAGS\" --package-dir=$PACKAGE_DIR\"\nfi\n\ndo_remote_host_build ()\n{\n    local SYSTEM=\"$1\"\n    local ARCH=\"$2\"\n    local REMOTE_HOST=\"$3\"\n\n    # 1/ Copy the NDK toolchain build scripts\n    # 2/ Copy the toolchain sources/package\n    # 3/ Ssh to unpack the build scripts, and run them\n    # 4/ Copy back the generated prebuilt binaries\n    #\n    dump \"Preparing remote build on $REMOTE_HOST...\"\n\n    # First try to create a remote temp directory on the remote host\n    # Do it first so we can fail fast, not after spending time preparing\n    # large tarballs.\n    dump \"Creating remote temp directory\"\n    TMPREMOTE=$TMPDIR/darwin-prebuild\n    run ssh $REMOTE_HOST \"mkdir -p $TMPREMOTE && rm -rf $TMPREMOTE/*\"\n    fail_panic \"Could not create temporary build directory on $REMOTE_HOST\"\n\n    # Now, package all the stuff we're going to send in a temporary\n    # directory here on the machine, except toolchain sources\n    TMPDARWIN=$NDK_TMPDIR/darwin  # Where we're going to package stuff\n    log \"Using temporary work directory: $TMPDARWIN\"\n    mkdir -p \"$TMPDARWIN\"\n    dump \"Prepare NDK build scripts\"\n    copy_directory \"$ANDROID_NDK_ROOT/build\" \"$TMPDARWIN/ndk/build\"\n    copy_file_list \"$ANDROID_NDK_ROOT\" \"$TMPDARWIN/ndk\" sources/android/libthread_db\n    copy_file_list \"$ANDROID_NDK_ROOT\" \"$TMPDARWIN/ndk\" sources/host-tools\n    dump \"Prepare platforms files\"\n    copy_directory \"$NDK_DIR/platforms\" \"$TMPDARWIN/ndk/platforms\"\n    dump \"Copying NDK build scripts and platform files to remote...\"\n    (cd \"$TMPDARWIN\" && tar czf - ndk) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE)\n    fail_panic \"Could not copy!\"\n    rm -rf $TMPDARWIN\n\n    # Copy the toolchain sources\n    dump \"Copy toolchain sources to remote\"\n    ssh $REMOTE_HOST mkdir -p $TMPREMOTE/toolchain &&\n    (cd \"$SRC_DIR\" && tar czf - .) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE/toolchain)\n    fail_panic \"Could not copy toolchain!\"\n\n    # Time to run the show :-)\n    for ARCH in $(commas_to_spaces $ARCHS); do\n        dump \"Running remote $ARCH toolchain build...\"\n        SYSROOT=$TMPREMOTE/ndk/platforms/android-$(get_default_api_level_for_arch $ARCH)/arch-$ARCH\n        run ssh $REMOTE_HOST \"$TMPREMOTE/ndk/build/instruments/build-host-prebuilts.sh $TMPREMOTE/toolchain --package-dir=$TMPREMOTE/packages --arch=$ARCH --ndk-dir=$TMPREMOTE/ndk --no-gen-platforms\"\n        fail_panic \"Could not build prebuilt $ARCH toolchain on Darwin!\"\n    done\n    # Get the results\n    dump \"Copying back Darwin prebuilt packages...\"\n    mkdir -p $TMPDARWIN/packages && rm -rf $TMPDARWIN/packages/*\n    run scp $REMOTE_HOST:$TMPREMOTE/packages/*-darwin-* $TMPDARWIN/packages\n    fail_panic \"Could not grab Darwin packages!\"\n\n    for PACK in $TMPDARWIN/packages/*; do\n        if [ \"$PACKAGE_DIR\" ]; then\n            echo \"Copying $(basename $PACK) to $PACKAGE_DIR...\"\n            cp $PACK $PACKAGE_DIR/\n        else\n            echo \"Unpacking $(basename $PACK) into $NDK_DIR...\"\n            unpack_archive $PACK $NDK_DIR\n        fi\n        fail_panic \"\"\n    done\n\n    dump \"Cleaning up remote machine...\"\n    run ssh $REMOTE_HOST rm -rf $TMPREMOTE\n}\n\nfor SYSTEM in $SYSTEMS; do\n\n    # Add --mingw/--darwin flag\n    TOOLCHAIN_FLAGS=$FLAGS\n    CANADIAN_BUILD=no\n    if [ \"$HOST_TAG32\" = \"linux-x86\" ]; then\n        case \"$SYSTEM\" in\n            windows)\n                TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS\" --mingw\"\n                CANADIAN_BUILD=yes\n                ;;\n            darwin-x86)\n                TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS\" --darwin\"\n                CANADIAN_BUILD=yes\n                ;;\n        esac\n    fi\n\n    # Should we do a remote build?\n    if [ \"$SYSTEM\" != \"$HOST_TAG32\" -a \"$CANADIAN_BUILD\" != \"yes\" ]; then\n        case $SYSTEM in\n            darwin-*)\n                if [ \"$DARWIN_SSH\" ]; then\n                    do_remote_host_build \"$SYSTEM\" \"$ARCH\" \"$DARWIN_SSH\"\n                else\n                    echo \"WARNING: Can't build $SYSTEM binaries on this system!\"\n                    echo \"Consider using the --darwin-ssh option.\"\n                fi\n                continue\n        esac\n    fi\n\n    # Determin the display system name\n    SYSNAME=$SYSTEM\n    if [ \"$TRY64\" = \"yes\" ]; then\n        case $SYSTEM in\n            darwin-x86|linux-x86)\n                SYSNAME=${SYSTEM%%x86}x86_64\n                ;;\n            windows)\n                SYSNAME=windows-x86_64\n                ;;\n        esac\n    fi\n\n    # First, ndk-stack\n    echo \"Building $SYSNAME ndk-stack\"\n    run $BUILDTOOLS/build-ndk-stack.sh $TOOLCHAIN_FLAGS --src-dir=$SRC_DIR\n    fail_panic \"ndk-stack build failure!\"\n\n    echo \"Building $SYSNAME ndk-depends\"\n    run $BUILDTOOLS/build-ndk-stack.sh $TOOLCHAIN_FLAGS --src-dir=$SRC_DIR --program-name=ndk-depends\n    fail_panic \"ndk-depends build failure!\"\n    fail_panic \"ndk-stack build failure!\"\n\n    echo \"Building $SYSNAME ndk-make\"\n    run $BUILDTOOLS/build-host-make.sh $TOOLCHAIN_FLAGS\n    fail_panic \"make build failure!\"\n\n    echo \"Building $SYSNAME ndk-awk\"\n    run $BUILDTOOLS/build-host-awk.sh $TOOLCHAIN_FLAGS\n    fail_panic \"awk build failure!\"\n\n    echo \"Building $SYSNAME ndk-python\"\n    run $BUILDTOOLS/build-host-python.sh $TOOLCHAIN_FLAGS \"--toolchain-src-dir=$SRC_DIR\" \"--systems=$SYSTEM\" \"--force\"\n    fail_panic \"python build failure!\"\n\n    echo \"Building $SYSNAME ndk-yasm\"\n    run $BUILDTOOLS/build-host-yasm.sh \"$SRC_DIR\" \"$NDK_DIR\" $TOOLCHAIN_FLAGS\n    fail_panic \"yasm build failure!\"\n\n    if [ \"$SYSTEM\" = \"windows\" ]; then\n        echo \"Building $SYSNAME toolbox\"\n        run $BUILDTOOLS/build-host-toolbox.sh $FLAGS\n        fail_panic \"Windows toolbox build failure!\"\n    fi\n\n    for PYTHON_VERSION in $PYTHON_VERSIONS; do\n        echo \"Building $SYSNAME ndk-vendor-host-python-$PYTHON_VERSION\"\n        run $BUILDTOOLS/build-vendor-host-python.sh $TOOLCHAIN_FLAGS \"--systems=$SYSTEM\" \"--force\" $VENDOR_SRC_DIR/python/python-$PYTHON_VERSION\n        fail_panic \"vendor-python build failure!\"\n    done\n\n    # Then the toolchains\n    for ARCH in $ARCHS; do\n        if [ \"$GCC_VERSION_LIST\" != \"default\" ]; then\n            VERSIONS=$(spaces_to_commas $GCC_VERSION_LIST)\n            TOOLCHAIN_NAMES=$(get_toolchain_name_list_for_arch $ARCH $VERSIONS)\n        else\n            TOOLCHAIN_NAMES=$(get_toolchain_name_list_for_arch $ARCH)\n        fi\n        if [ -z \"$TOOLCHAIN_NAMES\" ]; then\n            echo \"ERROR: Toolchains: \"$(spaces_to_commas $GCC_VERSION_LIST)\" are not available for arch: $ARCH\"\n            exit 1\n        fi\n\n        for TOOLCHAIN_NAME in $TOOLCHAIN_NAMES; do\n            echo \"Building $SYSNAME toolchain for $ARCH architecture: $TOOLCHAIN_NAME\"\n            run $BUILDTOOLS/build-gcc.sh \"$SRC_DIR\" \"$NDK_DIR\" $TOOLCHAIN_NAME $TOOLCHAIN_FLAGS --with-python=prebuilt -j$BUILD_NUM_CPUS\n            fail_panic \"Could not build $TOOLCHAIN_NAME-$SYSNAME!\"\n        done\n    done\n\n    # Build llvm and clang\n    POLLY_FLAGS=\n    if [ \"$TRY64\" != \"yes\" -a \"$SYSTEM\" != \"windows\" ]; then\n        POLLY_FLAGS=\"--with-polly\"\n    fi\n    for LLVM_VERSION in $LLVM_VERSION_LIST; do\n        echo \"Building $SYSNAME clang/llvm-$LLVM_VERSION\"\n        run $BUILDTOOLS/build-llvm.sh \"$SRC_DIR\" \"$NDK_DIR\" \"llvm-$LLVM_VERSION\" $TOOLCHAIN_FLAGS $POLLY_FLAGS $CHECK_FLAG -j$BUILD_NUM_CPUS\n        fail_panic \"Could not build llvm for $SYSNAME\"\n    done\n\n    # Cleanup prebuilt libraries after building vendor utils\n    # todo: zuav: what's the reason?\n    #find $NDK_DIR/prebuilt/$HOST_TAG/lib -name 'lib*.a' -a -not -name 'libpython*.a' -delete\n\n    # We're done for this system\ndone\n\nrun $BUILDTOOLS/build-renderscript.sh --systems=\"$SYSTEMS\" $FLAGS\nfail_panic \"Could not build RenderScript binaries!\"\n\n# Build tools common to all system\nrun $BUILDTOOLS/build-analyzer.sh \"$SRC_DIR\" \"$NDK_DIR\" \"llvm-$DEFAULT_LLVM_VERSION\" --package-dir=\"$PACKAGE_DIR\"\nfail_panic \"Could not build analyzer!\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    echo \"Done, please look at $PACKAGE_DIR\"\nelse\n    echo \"Done\"\nfi\n\nexit 0\n"
  },
  {
    "path": "build/instruments/build-host-python.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012, 2014 The Android Open Source Project\n# Copyright (C) 2012 Ray Donnelly <mingw.android at gmail.com>\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Rebuild the host Python binaries from sources.\n# Also copies any gnu libstdc++ pretty-printers\n# found in $TOOLCHAIN_SRC_DIR/gcc/gcc-*\n# and Joachim Reichel's stlport pretty printers\n# found in sources/host-tools/gdb-pretty-printers/stlport\n#\n\n# include common function and variable definitions\nNDK_BUILDTOOLS_PATH=\"$(dirname $0)\"\n. \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\"\n. \"$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh\"\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"\\\nThis program is used to rebuild one or more Python client programs from\nsources.\n\nBy default, the script rebuilds Python for you host system [$HOST_TAG],\nbut you can use --systems=<tag1>,<tag2>,.. to ask binaries that can run on\nseveral distinct systems. Each <tag> value in the list can be one of the\nfollowing:\n\n   linux-x86\n   linux-x86_64\n   windows\n   windows-x86  (equivalent to 'windows')\n   windows-x86_64\n   darwin-x86\n   darwin-x86_64\n\nFor example, here's how to rebuild Python 2.7.5 on Linux\nfor six different systems:\n\n  $PROGNAME --build-dir=/path/to/toolchain/src \\n \\\n    --python-version=2.7.5 \\n \\\n    --systems=linux-x86,linux-x86_64,windows,windows-x86_64,darwin-x86,darwin-x86_64\"\n\nTOOLCHAIN_SRC_DIR=\nregister_var_option \"--toolchain-src-dir=<path>\" TOOLCHAIN_SRC_DIR \"Select toolchain source directory\"\n\nPYTHON_VERSION=$DEFAULT_PYTHON_VERSION\nregister_var_option \"--python-version=<version>\" PYTHON_VERSION \"Select Python version.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Select NDK install directory.\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Package prebuilt tarballs into directory.\"\n\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Build Python into directory\"\n\nbh_register_options\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nif [ -n \"$PARAMETERS\" ]; then\n    panic \"This script doesn't take parameters, only options. See --help\"\nfi\n\nif [ -z \"$TOOLCHAIN_SRC_DIR\" ]; then\n    panic \"Please use --toolchain-src-dir=<path> to select toolchain source directory.\"\nfi\ncheck_toolchain_src_dir \"$TOOLCHAIN_SRC_DIR\"\nTOOLCHAIN_SRC_DIR=`cd $TOOLCHAIN_SRC_DIR; pwd`\n\nBH_HOST_SYSTEMS=$(commas_to_spaces $BH_HOST_SYSTEMS)\nAUTO_BUILD=\"no\"\n\nif [ \"$MINGW\" = \"yes\" ]; then\n    BH_HOST_SYSTEMS=\"windows\"\n    log \"Auto-config: --systems=windows\"\n    find_mingw_toolchain\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    BH_HOST_SYSTEMS=\"darwin-x86\"\n    log \"Auto-config: --systems=darwin-x86\"\nfi\n\ndetermine_systems ()\n{\n    local IN_SYSTEMS=\"$1\"\n    local OUT_SYSTEMS\n\n    for SYSTEM in $IN_SYSTEMS; do\n        if [ \"$TRY64\" = \"yes\" ]; then\n            case $SYSTEM in\n                darwin-x86|linux-x86|windows-x86)\n                    SYSTEM=${SYSTEM%%x86}x86_64\n                    ;;\n                windows)\n                    SYSTEM=windows-x86_64\n                    ;;\n            esac\n        else\n            # 'windows-x86' causes substitution\n            # failure at the packing stage.\n            case $SYSTEM in\n                windows-x86)\n                    SYSTEM=windows\n                    ;;\n            esac\n        fi\n        OUT_SYSTEMS=\"$OUT_SYSTEMS $SYSTEM\"\n    done\n    echo $OUT_SYSTEMS\n}\n\nBH_HOST_SYSTEMS=$(determine_systems \"$BH_HOST_SYSTEMS\")\n\n# Build python for build machine automatically\nif [ \"$(bh_list_contains $BH_BUILD_TAG $BH_HOST_SYSTEMS)\" = \"no\" ]; then\n    BH_HOST_SYSTEMS=\"$BH_BUILD_TAG $BH_HOST_SYSTEMS\"\n    AUTO_BUILD=\"yes\"\nfi\n\n# Python needs to execute itself during its build process, so must build the build\n# Python first. It should also be an error if not asked to build for build machine.\nBH_HOST_SYSTEMS=$(bh_sort_systems_build_first \"$BH_HOST_SYSTEMS\")\n\ndownload_package ()\n{\n    # Assume the packages are already downloaded under $ARCHIVE_DIR\n    local PKG_URL=$1\n    local PKG_NAME=$(basename $PKG_URL)\n\n    case $PKG_NAME in\n        *.tar.bz2)\n            PKG_BASENAME=${PKG_NAME%%.tar.bz2}\n            ;;\n        *.tar.gz)\n            PKG_BASENAME=${PKG_NAME%%.tar.gz}\n            ;;\n        *)\n            panic \"Unknown archive type: $PKG_NAME\"\n    esac\n\n    if [ ! -f \"$ARCHIVE_DIR/$PKG_NAME\" ]; then\n        log \"Downloading $PKG_URL...\"\n        (cd $ARCHIVE_DIR && run curl -L -o \"$PKG_NAME\" \"$PKG_URL\")\n        fail_panic \"Can't download '$PKG_URL'\"\n    fi\n\n    if [ ! -d \"$SRC_DIR/$PKG_BASENAME\" ]; then\n        log \"Uncompressing $PKG_URL into $SRC_DIR\"\n        case $PKG_NAME in\n            *.tar.bz2)\n                run tar xjf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR\n                ;;\n            *.tar.gz)\n                run tar xzf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR\n                ;;\n            *)\n                panic \"Unknown archive type: $PKG_NAME\"\n                ;;\n        esac\n        fail_panic \"Can't uncompress $ARCHIVE_DIR/$PKG_NAME\"\n    fi\n}\n\nif [ -z \"$BUILD_DIR\" ] ; then\n    BUILD_DIR=$TMPDIR/buildhost\nfi\n\nbh_setup_build_dir $BUILD_DIR\n\nif [ \"$BH_BUILD_MODE\" = \"debug\" ] ; then\n   PYDEBUG=\"-with-pydebug\"\nfi\n\n# Sanity check that we have the right compilers for all hosts\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\ndone\n\nTEMP_DIR=$BUILD_DIR/tmp\n# Download and unpack source packages from official sites\nARCHIVE_DIR=$TEMP_DIR/archive\nSTAMP_DIR=$TEMP_DIR/timestamps\nBUILD_DIR=$TEMP_DIR/build-$HOST_TAG\n\nmkdir -p $BUILD_DIR\n\nPROGDIR=`dirname $0`\nPROGDIR=$(cd $PROGDIR && pwd)\n\n# Sanity check for all Python versions.\nfor VERSION in $(commas_to_spaces $PYTHON_VERSION); do\n    PYTHON_SRCDIR=$TOOLCHAIN_SRC_DIR/python/Python-$VERSION\n    if [ ! -d \"$PYTHON_SRCDIR\" ]; then\n        panic \"Missing source directory: $PYTHON_SRCDIR\"\n    fi\ndone\n\narch_to_qemu_arch ()\n{\n    case $1 in\n        x86)\n            echo i386\n            ;;\n        *)\n            echo $1\n            ;;\n    esac\n}\n\n# $1: host system tag\n# $2: python version\nbuild_host_python ()\n{\n    local SRCDIR=$TOOLCHAIN_SRC_DIR/python/Python-$2\n    local BUILDDIR=$BH_BUILD_DIR/build-python-$1-$2\n    local INSTALLDIR=$(python_build_install_dir $1 $2)\n    local ARGS TEXT\n\n    if [ ! -f \"$SRCDIR/configure\" ]; then\n        panic \"Missing configure script in $SRCDIR\"\n    fi\n\n    # Currently, 2.7.5 and 3.3.0 builds generate $SRCDIR/Lib/_sysconfigdata.py, unless it\n    # already exists (in which case it ends up wrong anyway!)... this should really be in\n    # the build directory instead.\n    if [ ! -f \"$SRCDIR/Lib/_sysconfigdata.py\" ]; then\n        log \"Removing old $SRCDIR/Lib/_sysconfigdata.py\"\n        rm -f $SRCDIR/Lib/_sysconfigdata.py\n    fi\n\n    ARGS=\" --prefix=$INSTALLDIR\"\n\n    local BUILDCONFIG=$BH_BUILD_CONFIG\n    local HOSTCONFIG=$BH_HOST_CONFIG\n    # If we're building linux toolchain on linux-x86_64 host, or darwin toolchain on darwin-x86_64,\n    # set --build variable to the same value as --host value. This is done to avoid \"cross compilation\"\n    # from Python's configure point of view, in which case many native extensions (such as 'itertools',\n    # for example) are not included in build process.\n    # This is safe since --host value could be either 'x86_64-pc-linux-gnu' or 'i686-pc-linux-gnu' on linux,\n    # or 'x86_64-apple-darwin' or 'i686-apple-darwin' on darwin, and anyway $HOST_TAG host match it.\n    case $1 in\n        linux*)\n            if [ \"$HOST_TAG\" = \"linux-x86_64\" ]; then\n                BUILDCONFIG=$BH_HOST_CONFIG\n                # WARNING!!! This is quick&dirty solution to force Python build scripts use sysroot\n                # included to own prebuilt toolchain.\n                # If it isn't found in a specified path, just ignore it and go further as usual.\n                # However, if it's found, force using it when building Python to avoid conflicts\n                # with system-installed headers and libraries (this is the case when we're building\n                # Python on Ubuntu 16.04.\n                local LINUX_SYSROOT=\"$(dirname $NDK_DIR)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/sysroot\"\n                if [ -d \"$LINUX_SYSROOT\" ]; then\n                    ARGS=$ARGS\" --with-build-sysroot=$LINUX_SYSROOT\"\n                fi\n            fi\n            ;;\n        darwin*)\n            if [ \"$HOST_TAG\" = \"darwin-x86_64\" ]; then\n                BUILDCONFIG=$BH_HOST_CONFIG\n            fi\n            ;;\n    esac\n\n    ARGS=$ARGS\" --build=$BUILDCONFIG\"\n    ARGS=$ARGS\" --host=$HOSTCONFIG\"\n    #ARGS=$ARGS\" --with-build-sysroot\"\n    ARGS=$ARGS\" $PYDEBUG\"\n    ARGS=$ARGS\" --disable-ipv6\"\n\n    mkdir -p \"$BUILDDIR\" && rm -rf \"$BUILDDIR\"/*\n    cd \"$BUILDDIR\" &&\n    bh_setup_host_env\n\n    CFG_SITE=\n    # Need to add -L$HOST_STATIC_LIBDIR to LDSHARED if need\n    # any static host libs.\n    export LDSHARED=\"$CC -shared \"\n    if [ ! $BH_HOST_TAG = $BH_BUILD_TAG ]; then\n\n        # Cross compiling.\n        CFG_SITE=$BUILDDIR/config.site\n\n        # Ideally would remove all of these configury hacks by\n        # patching the issues.\n\n        if [ $1 = darwin-x86 -o $1 = darwin-x86_64 ]; then\n            echo \"ac_cv_file__dev_ptmx=no\"              > $CFG_SITE\n            echo \"ac_cv_file__dev_ptc=no\"              >> $CFG_SITE\n            echo \"ac_cv_have_long_long_format=yes\"     >> $CFG_SITE\n            if [ $1 = darwin-x86 ] ; then\n                echo \"ac_osx_32bit=yes\"                >> $CFG_SITE\n            elif [ $1 = darwin-x86_64 ] ; then\n                echo \"ac_osx_32bit=no\"                 >> $CFG_SITE\n            fi\n            echo \"ac_cv_have_sendfile=no\"              >> $CFG_SITE\n            # I could change AC_MSG_CHECKING(LDSHARED) in configure.ac\n            # to check $host instead of $ac_sys_system/$ac_sys_release\n            # but it handles loads of platforms\n            # and I can only test on three, so instead...\n            export LDSHARED=\"$CC -bundle -undefined dynamic_lookup\"\n        elif [ $1 = windows-x86 -o $1 = windows-x86_64 ]; then\n            echo \"ac_cv_file__dev_ptmx=no\"              > $CFG_SITE\n            echo \"ac_cv_file__dev_ptc=no\"              >> $CFG_SITE\n            CFLAGS=$CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            CXXFLAGS=$CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n        elif [ $1 = linux-x86 -o $1 = linux-x86_64 ]; then\n            echo \"ac_cv_file__dev_ptmx=yes\"             > $CFG_SITE\n            echo \"ac_cv_file__dev_ptc=no\"              >> $CFG_SITE\n            echo \"ac_cv_have_long_long_format=yes\"     >> $CFG_SITE\n            echo \"ac_cv_pthread_system_supported=yes\"  >> $CFG_SITE\n            echo \"ac_cv_working_tzset=yes\"             >> $CFG_SITE\n            echo \"ac_cv_little_endian_double=yes\"      >> $CFG_SITE\n        fi\n\n        if [ \"$BH_HOST_OS\" = \"$BH_BUILD_OS\" ]; then\n            # Only cross compiling from arch perspective.\n            # qemu causes failures as cross-compilation is not detected\n            # if a test executable can be run successfully, so we test\n            # for qemu-${BH_HOST_ARCH} and qemu-${BH_HOST_ARCH}-static\n            # and panic if either are found.\n            QEMU_HOST_ARCH=$(arch_to_qemu_arch $BH_HOST_ARCH)\n            if [ ! -z \"$(which qemu-$QEMU_HOST_ARCH 2>/dev/null)\" -o \\\n                 ! -z \"$(which qemu-$QEMU_HOST_ARCH-static 2>/dev/null)\" ] ; then\n               dump \"Installed qemu(s) ($(which qemu-$QEMU_HOST_ARCH 2>/dev/null) $(which qemu-$QEMU_HOST_ARCH-static 2>/dev/null))\" \\\n                      \"will prevent this build from working.\"\n            fi\n        fi\n    else\n        if [ $1 = darwin-x86 -o $1 = darwin-x86_64 ]; then\n            export LDSHARED=\"$CC -bundle -undefined dynamic_lookup\"\n        fi\n    fi\n\n    if [ \"$HOST_OS\" = \"linux\" ]; then\n        CFLAGS=\"$CFLAGS -fPIC\"\n    fi\n\n    TEXT=\"$(bh_host_text) python-$BH_HOST_CONFIG-$2:\"\n\n    touch $SRCDIR/Include/graminit.h\n    touch $SRCDIR/Python/graminit.c\n    echo \"\" > $SRCDIR/Parser/pgen.stamp\n    touch $SRCDIR/Parser/Python.asdl\n    touch $SRCDIR/Parser/asdl.py\n    touch $SRCDIR/Parser/asdl_c.py\n    touch $SRCDIR/Include/Python-ast.h\n    touch $SRCDIR/Python/Python-ast.c\n\n    # By default, the Python build will force the following compiler flags\n    # after our own CFLAGS:\n    #   -g -fwrap -O3 -Wall -Wstrict-prototypes\n    #\n    # The '-g' is unfortunate because it makes the generated binaries\n    # much larger than necessary, and stripping them after the fact is\n    # a bit delicate when cross-compiling. To avoid this, define a\n    # custom OPT variable here (see Python-2.7.5/configure.ac) when\n    # generating non stripped builds.\n    if [ \"$BH_BUILD_MODE\" = \"release\" ]; then\n      OPT=\"-fwrapv -O3 -Wall -Wstrict-prototypes\"\n      export OPT\n    fi\n\n    dump \"$TEXT Building\"\n    export CONFIG_SITE=$CFG_SITE &&\n    run \"$SRCDIR\"/configure $ARGS\n    fail_panic \"Could not configure Python!\"\n\n    #\n    # Note 1:\n    # sharedmods is a phony target, but it's a dependency of both \"make all\" and also\n    # \"make install\", this causes it to fail on Windows as it tries to rename pydoc3\n    # to pydoc3.3 twice, and the second time aroud the file exists. So instead, we\n    # just do make install.\n    #\n    # Note 2:\n    # Can't run make install with -j as from the Makefile:\n    # install:\t altinstall bininstall maninstall\n    #  meaning altinstall and bininstall are kicked off at the same time\n    #  but actually, bininstall depends on altinstall being run first\n    #  due to libainstall: doing\n    #  $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config\n    #  and bininstall: doing\n    #  (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python2-config)\n    #  Though the real fix is to make bininstall depend on libainstall.\n    run make -j$NUM_JOBS\n    fail_panic \"Could not build Python!\"\n\n    run make install\n    fail_panic \"Could not install Python!\"\n\n    # Pretty printers.\n    PYPPDIR=\"$INSTALLDIR/share/pretty-printers/\"\n\n    # .. for gnu stdlibc++\n    GCC_DIRS=$(find $TOOLCHAIN_SRC_DIR/gcc/ -maxdepth 1 -name \"gcc-*\" -type d)\n    for GCC_DIR in $GCC_DIRS; do\n        (\n        if [ -d \"$GCC_DIR/libstdc++-v3/python\" ]; then\n            cd \"$GCC_DIR/libstdc++-v3/python\"\n            [ -d \"$PYPPDIR/libstdcxx/$(basename $GCC_DIR)\" ] || mkdir -p \"$PYPPDIR/libstdcxx/$(basename $GCC_DIR)\"\n            run find . -path \"*.py\" -exec cp {} \"$PYPPDIR/libstdcxx/$(basename $GCC_DIR)/\" \\;\n        fi\n        )\n    done\n\n    # .. for STLPort\n    run cp -rf $NDK_DIR/sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2 $PYPPDIR/stlport\n\n    # remove python modules which require OpenSSL\n    # we don't need SSL in prebuilt host python\n    # and we don't want to distribute something SSL-enabled\n    # without explicit need in that\n    run find \"$INSTALLDIR/lib\" -name _hashlib.so -delete\n    run find \"$INSTALLDIR/lib\" -name _ssl.so -delete\n\n    # Generate proper python-config wrapper\n    local PYCONFIG\n    for PYCONFIG in $INSTALLDIR/bin/python*-config; do\n        test -L $PYCONFIG && continue\n        if [ ! -f ${PYCONFIG}.py ]; then\n            run mv $PYCONFIG ${PYCONFIG}.py\n            fail_panic \"Can't move $PYCONFIG to ${PYCONFIG}.py\"\n        fi\n        cat >$PYCONFIG <<EOF\n#!/bin/sh\n\nexec \\`dirname \\$0\\`/python \\`dirname \\$0\\`/$(basename $PYCONFIG).py \"\\$@\"\nEOF\n        fail_panic \"Can't generate $PYCONFIG\"\n        run chmod +x $PYCONFIG\n        fail_panic \"Can't chmod +x $PYCONFIG\"\n        case $1 in\n            windows*)\n                cat >${PYCONFIG}.cmd <<EOF\n@echo off\nset BINDIR=%~dp0\n\"%BINDIR%/python\" \"%BINDIR%/$(basename $PYCONFIG).py\" %*\nEOF\n                fail_panic \"Can't generate ${PYCONFIG}.cmd\"\n        esac\n    done\n}\n\nneed_build_host_python ()\n{\n    bh_stamps_do host-python-$1-$2 build_host_python $1 $2\n}\n\n# Install host Python binaries and support files to the NDK install dir.\n# $1: host tag\n# $2: python version\ninstall_host_python ()\n{\n    local SRCDIR=\"$(python_build_install_dir $1 $2)\"\n    local DSTDIR=\"$NDK_DIR/$(python_ndk_install_dir $1 $2)\"\n\n    need_build_host_python $1 $2\n\n    if [ $AUTO_BUILD != \"yes\" -o $1 != $BH_BUILD_TAG ]; then\n        dump \"$(bh_host_text) python-$BH_HOST_ARCH-$2: Installing\"\n        run copy_directory \"$SRCDIR/bin\"     \"$DSTDIR/bin\"\n        run copy_directory \"$SRCDIR/lib\"     \"$DSTDIR/lib\"\n        run copy_directory \"$SRCDIR/share\"   \"$DSTDIR/share\"\n        run copy_directory \"$SRCDIR/include\" \"$DSTDIR/include\"\n        # remove unneeded files\n        run rm -rf \"$DSTDIR/share/man\"\n        run rm -rf \"$DSTDIR/share/pretty-printers/libstdcxx/gcc-4.9.*\"\n        run rm -rf \"$DSTDIR/share/pretty-printers/libstdcxx/gcc-4.9-*\"\n        run rm -rf \"$DSTDIR/share/pretty-printers/libstdcxx/gcc-[lm]*\"\n    fi\n}\n\n# $1: host tag\n# $2: python version\nneed_install_host_python ()\n{\n    local SRCDIR=\"$(python_build_install_dir $1 $2)\"\n\n    bh_stamps_do install-host-python-$1-$2 install_host_python $1 $2\n\n    # make sharedmods (setup.py) needs to use the build machine's Python\n    # for the other hosts to build correctly.\n    if [ $BH_BUILD_TAG = $BH_HOST_TAG ]; then\n        export PATH=$SRCDIR/bin:$PATH\n    fi\n}\n\n# Package host Python binaries into a tarball\n# $1: host tag\n# $2: python version\npackage_host_python ()\n{\n    local BLDDIR=\"$(python_build_install_dir $1 $2)\"\n    local SRCDIR=\"$(python_ndk_install_dir $1 $2)\"\n    # This is similar to BLDDIR=${BLDDIR%%$SRCDIR} (and requires we use windows and not windows-x86)\n    BLDDIR=$(echo \"$BLDDIR\" | sed \"s/$(echo \"$SRCDIR\" | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\//\\\\\\//g' -e 's/&/\\\\\\&/g')//g\")\n    local PACKAGENAME=ndk-python-$(install_dir_from_host_tag $1).tar.xz\n    local PACKAGE=\"$PACKAGE_DIR/$PACKAGENAME\"\n\n    need_install_host_python $1 $2\n\n    dump \"$(bh_host_text) $PACKAGENAME: Packaging\"\n    run pack_archive \"$PACKAGE\" \"$BLDDIR\" \"$SRCDIR\"\n    dump \"$(bh_host_text) $PACKAGENAME: Caching\"\n    run cache_package \"$PACKAGE_DIR\" \"$PACKAGENAME\"\n}\n\nneed_package_host_python ()\n{\n    bh_stamps_do package-host-python-$1-$2 package_host_python $1 $2\n}\n\nPYTHON_VERSION=$(commas_to_spaces $PYTHON_VERSION)\nARCHS=$(commas_to_spaces $ARCHS)\n\n# Check for cached packages\nNOT_CACHED_SYSTEMS=\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    for VERSION in $PYTHON_VERSION; do\n        PACKAGENAME=ndk-python-$(install_dir_from_host_tag $SYSTEM).tar.xz\n        echo \"Look for: $PACKAGENAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGENAME\" no_exit\n        if [ $? != 0 ]; then\n            if [ -z $NOT_CACHED_SYSTEMS ] ; then\n                NOT_CACHED_SYSTEMS=$SYSTEM\n            else\n                NOT_CACHED_SYSTEMS=\"$NOT_CACHED_SYSTEMS $SYSTEM\"\n            fi\n        fi\n    done\ndone\n\nif [ -z \"$NOT_CACHED_SYSTEMS\" ] ; then\n    dump \"For all systems were found cached packages.\"\n    exit 0;\nelif [ \"$NOT_CACHED_SYSTEMS\" == $BH_BUILD_TAG -a $AUTO_BUILD == \"yes\" ] ; then\n    dump \"Skip build python for build machine only: $BH_BUILD_TAG\"\n    exit 0;\nelse\n    dump \"Not cached systems: $NOT_CACHED_SYSTEMS\"\n    BH_HOST_SYSTEMS=$NOT_CACHED_SYSTEMS\nfi\n\n# Let's build this\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\n    for VERSION in $PYTHON_VERSION; do\n        need_install_host_python $SYSTEM $VERSION\n    done\ndone\n\nif [ \"$PACKAGE_DIR\" ]; then\n    for SYSTEM in $BH_HOST_SYSTEMS; do\n        bh_setup_build_for_host $SYSTEM\n        if [ $AUTO_BUILD != \"yes\" -o $SYSTEM != $BH_BUILD_TAG ]; then\n            for VERSION in $PYTHON_VERSION; do\n                need_package_host_python $SYSTEM $VERSION\n            done\n        fi\n    done\nfi\n"
  },
  {
    "path": "build/instruments/build-host-toolbox.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the toolbox programs which sources\n#  are under $NDK/sources/host-tools/toolbox\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt host toolbox binaries for the Android NDK.\n\nThese are simple command-line programs used by the NDK build script.\n\nBy default, this will try to place the binaries inside the current NDK\ndirectory, unless you use the --ndk-dir=<path> option.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binaries into package directory\"\n\nregister_jobs_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\n#\n# Try cached package\n#\n# This script is run only for windows* systems.\n# Since MINGW is not set here the 'set_cache_tag function works incorrectly.\n# Hence we're setting cache host tag directly.\n#\nif [ \"$TRY64\" = \"yes\" ]; then\n    CACHE_HOST_TAG=windows-x86_64\nelse\n    CACHE_HOST_TAG=windows\nfi\nARCHIVE=toolbox-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-toolbox\n    log \"Auto-config: --build-dir=$BUILD_DIR\"\n    rm -rf $BUILD_DIR/* && mkdir -p $BUILD_DIR\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\nTOOLBOX_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/toolbox\n\nBUILD_WINDOWS_SOURCES=yes\n\nif [ \"$BUILD_WINDOWS_SOURCES\" ]; then\n    ORIGINAL_HOST_TAG=$HOST_TAG\n    MINGW=yes\n    handle_canadian_build\n    prepare_canadian_toolchain $BUILD_DIR\n\n    SUBDIR=$(get_prebuilt_install_prefix $HOST_TAG)/bin\n    DSTDIR=$NDK_DIR/$SUBDIR\n    mkdir -p \"$DSTDIR\"\n    fail_panic \"Could not create destination directory: $DSTDIR\"\n\n    # Build echo.exe\n    HOST_TAG=$ORIGINAL_HOST_TAG\n    builder_begin_host \"$BUILD_DIR\" \"$MAKEFILE\"\n    builder_set_srcdir \"$TOOLBOX_SRCDIR\"\n    builder_set_dstdir \"$DSTDIR\"\n    builder_sources echo_win.c\n    builder_host_executable echo\n    builder_end\n\n    # Build cmp.exe\n    HOST_TAG=$ORIGINAL_HOST_TAG\n    builder_begin_host \"$BUILD_DIR\" \"$MAKEFILE\"\n    builder_set_srcdir \"$TOOLBOX_SRCDIR\"\n    builder_set_dstdir \"$DSTDIR\"\n    builder_sources cmp_win.c\n    builder_host_executable cmp\n    builder_end\n\n    if [ \"$PACKAGE_DIR\" ]; then\n        assert_cache_host_tag\n        dump \"Packaging : $ARCHIVE\"\n        pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR/echo.exe\" \"$SUBDIR/cmp.exe\"\n        fail_panic \"Could not package toolbox binaires\"\n        cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\n    fi\nfi\n"
  },
  {
    "path": "build/instruments/build-host-yasm.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Build the host version of the yasm executable and place it\n# at the right location\n\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir>\"\nPROGRAM_DESCRIPTION=\\\n\"Rebuild yasm tool used by the NDK.\"\n\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nBUILD_OUT=$TMPDIR/build/yasm\nOPTION_BUILD_OUT=\nregister_var_option \"--build-out=<path>\" OPTION_BUILD_OUT \"Set temporary build directory\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binaries into package directory\"\n\nextract_parameters \"$@\"\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=ndk-yasm-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR/yasm\" ] ; then\n        echo \"ERROR: Source directory does not contain llvm sources: $SRC_DIR/yasm\"\n        exit 1\n    fi\n\n    SRC_DIR=`cd $SRC_DIR; pwd`\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not create target NDK installation path: $NDK_DIR\"\n            exit 1\n        fi\n    fi\n    NDK_DIR=`cd $NDK_DIR; pwd`\n    log \"Using NDK directory: $NDK_DIR\"\n}\n\nset_parameters $PARAMETERS\n\nprepare_abi_configure_build\nprepare_host_build\n\nfix_option BUILD_OUT \"$OPTION_BUILD_OUT\" \"build directory\"\nsetup_default_log_file $BUILD_OUT/config.log\n\nrm -rf $BUILD_OUT\nmkdir -p $BUILD_OUT\n\nlog \"Copying yasm sources to $BUILD_OUT/src\"\nmkdir -p \"$BUILD_OUT/src\" && copy_directory \"$SRC_DIR/yasm\" \"$BUILD_OUT/src\"\nfail_panic \"Could not copy yasm sources to: $BUILD_OUT/src\"\n\nCONFIGURE_FLAGS=\"--disable-nls --disable-rpath --prefix=$BUILD_OUT/prefix\"\nif [ \"$MINGW\" = \"yes\" ]; then\n    # Required for a proper mingw cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=i586-pc-mingw32\"\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # Required for a proper darwin cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=$ABI_CONFIGURE_HOST\"\nfi\n\nprepare_canadian_toolchain $BUILD_OUT\n\nCFLAGS=$HOST_CFLAGS\" -O2 -s\"\nexport CC CFLAGS\n\nlog \"Configuring the build\"\ncd $BUILD_OUT/src && run ./configure $CONFIGURE_FLAGS --build=$ABI_CONFIGURE_BUILD\nfail_panic \"configure failed in $BUILD_OUT/yasm!\"\n\nlog \"Building yasm\"\n# build yasm in -j1 to avoid a race condition not well understood at this moment\n# which causes failure with error message reads:\n#   perfect.c: Duplicates keys!\n#   make: *** [x86insn_nasm.c] Error 1\n#   make: *** Waiting for unfinished jobs....\nrun make -j1 # -j$NUM_JOBS\nfail_panic \"Failed to build the $BUILD_OUT/yasm!\"\n\nlog \"Installing yasm\"\nrun make install\nfail_panic \"Failed to install $BUILD_OUT/yasm!\"\n\nrun rm -rf $BUILD_OUT/prefix/share\n\nlog \"Stripping yasm\"\ntest -z \"$STRIP\" && STRIP=strip\nfind $BUILD_OUT/prefix/bin -maxdepth 1 -type f -exec $STRIP {} \\;\n\nlog \"Copying yasm\"\n#run copy_directory \"$BUILD_OUT/prefix\" \"$(get_prebuilt_install_prefix)\"\nSUBDIR=$(get_prebuilt_host_exec yasm)\nOUT=$NDK_DIR/$SUBDIR\nrun mkdir -p $(dirname \"$OUT\") && cp $BUILD_OUT/prefix/bin/$(get_host_exec_name yasm) $OUT\nfail_panic \"Could not copy yasm\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    dump \"Packaging: $ARCHIVE\"\n    mkdir -p \"$PACKAGE_DIR\" &&\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not package archive: $PACKAGE_DIR/$ARCHIVE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up\"\nif [ -z \"$OPTION_BUILD_OUT\" ] ; then\n    rm -rf $BUILD_OUT\nfi\n"
  },
  {
    "path": "build/instruments/build-icu.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild ICU libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$ICU_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nTOOLCHAIN_VERSION=4.9\n#register_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nICU_VERSION=$(echo $ICU_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\nregister_var_option \"--version=<ver>\" ICU_VERSION \"ICU version\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nICU_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$ICU_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the ICU source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$ICU_SRCDIR\" ]; then\n    echo \"ERROR: Not a directory: '$ICU_SRCDIR'\"\n    exit 1\nfi\n\nICU_TAG=release-$(echo $ICU_VERSION | tr '.' '-')\nGITHASH=$(git -C $ICU_SRCDIR rev-parse --verify $ICU_TAG 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag $ICU_TAG in $ICU_SRCDIR\" 1>&2\n    exit 1\nfi\n\nICU_DSTDIR=$NDK_DIR/$ICU_SUBDIR/$ICU_VERSION\nmkdir -p $ICU_DSTDIR\nfail_panic \"Could not create ICU $ICU_VERSION destination directory: $ICU_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-icu\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nTMP_SRCDIR=\"$BUILD_DIR/src\"\nrun git clone -b $ICU_TAG $ICU_SRCDIR $TMP_SRCDIR\nfail_panic \"Can't copy icu-$ICU_VERSION sources to temporary directory\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\nmktool()\n{\n    local tool\n    for tool in \"$@\"; do\n        cat >$tool\n        fail_panic \"Could not create tool $tool\"\n        chmod +x $tool\n        fail_panic \"Could not chmod +x $tool\"\n    done\n}\n\n# $1: build directory\nbuild_icu_for_host()\n{\n    local BUILDDIR=\"$1\"\n\n    dump \"Building ICU $ICU_VERSION host ($HOST_OS) binaries\"\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    cd $BUILDDIR\n    fail_panic \"Couldn't CD to temporary build directory $BUILDDIR\"\n\n    local TMPHOSTTCDIR=$BUILDDIR/host-bin\n    run mkdir $TMPHOSTTCDIR\n    fail_panic \"Couldn't create temporary directory for host toolchain wrappers\"\n\n    {\n        echo \"#!/bin/sh\"\n        echo \"\"\n        echo \"exec $CC $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n    } | mktool $TMPHOSTTCDIR/gcc\n\n    {\n        echo \"#!/bin/sh\"\n        echo \"\"\n        echo \"exec $CXX $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n    } | mktool $TMPHOSTTCDIR/g++\n\n    PATH=$TMPHOSTTCDIR:$SAVED_PATH\n    export PATH\n\n    local ICU_HOST_OS\n    case $HOST_OS in\n        darwin)\n            ICU_HOST_OS=MacOSX/GCC\n            ;;\n        linux)\n            ICU_HOST_OS=Linux/gcc\n            ;;\n        *)\n            echo \"ERROR: Unsupported host OS: $HOST_OS\" 1>&2\n            exit 1\n    esac\n\n    run $TMP_SRCDIR/source/runConfigureICU $ICU_HOST_OS\n    fail_panic \"Couldn't configure host build of ICU $ICU_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't build host ICU $ICU_VERSION\"\n}\n\n# $1: ABI\n# $2: host ICU build directory\n# $3: build directory\nbuild_icu_for_abi ()\n{\n    local ABI=$1\n    local ICUHOSTBUILDDIR=\"$2\"\n    local BUILDDIR=\"$3\"\n\n    dump \"Building ICU $ICU_VERSION $ABI libraries\"\n\n    local APILEVEL=9\n    if [ ${ABI%%64*} != ${ABI} ]; then\n        APILEVEL=21\n    fi\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    local TCNAME\n    case $ABI in\n        armeabi*)\n            TCNAME=arm-linux-androideabi\n            ;;\n        arm64*)\n            TCNAME=aarch64-linux-android;\n            ;;\n        mips)\n            TCNAME=mipsel-linux-android\n            ;;\n        mips64)\n            TCNAME=mips64el-linux-android\n            ;;\n        x86|x86_64)\n            TCNAME=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    local TCPREFIX\n    case $ABI in\n        x86)\n            TCPREFIX=i686-linux-android\n            ;;\n        x86_64)\n            TCPREFIX=x86_64-linux-android\n            ;;\n        *)\n            TCPREFIX=$TCNAME\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm;\n            ;;\n        arm64*)\n            ARCH=arm64;\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    local FLAGS LFLAGS\n    case $ABI in\n        armeabi)\n            FLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            ;;\n        armeabi-v7a-hard)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            LFLAGS=\"$LFLAGS -Wl,--no-warn-mismatch\"\n            ;;\n        arm64-v8a)\n            FLAGS=\"\"\n            ;;\n        x86)\n            FLAGS=\"-m32\"\n            ;;\n        x86_64)\n            FLAGS=\"-m64\"\n            ;;\n        mips)\n            FLAGS=\"-mabi=32 -mips32\"\n            ;;\n        mips64)\n            FLAGS=\"-mabi=64 -mips64r6\"\n            ;;\n    esac\n\n    local TCPATH=$NDK_DIR/toolchains/$TCNAME-$TOOLCHAIN_VERSION/prebuilt/$HOST_TAG\n\n    local TMPTARGETTCDIR=$BUILDDIR/target-bin\n    run mkdir $TMPTARGETTCDIR\n    fail_panic \"Couldn't create temporary directory for target $ABI toolchain wrappers\"\n\n    local SYSROOT=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\n    local LIBCRYSTAX=$NDK_DIR/$CRYSTAX_SUBDIR\n    local GNULIBCXX=$NDK_DIR/sources/cxx-stl/gnu-libstdc++/$TOOLCHAIN_VERSION\n\n    FLAGS=\"$FLAGS --sysroot=$SYSROOT\"\n    FLAGS=\"$FLAGS -fPIC\"\n    FLAGS=\"$FLAGS -DU_USING_ICU_NAMESPACE=0\"\n    FLAGS=\"$FLAGS -DU_CHARSET_IS_UTF8=1\"\n\n    local TOOL\n\n    for TOOL in gcc g++ cpp; do\n        mktool $TMPTARGETTCDIR/$TOOL <<EOF\n#!/bin/sh\n\nif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -c; then\n    LINKER=no\nelse\n    LINKER=yes\nfi\n\n# Remove any -m32/-m64 from input parameters\nPARAMS=\\`echo \"\\$@\" | tr ' ' '\\\\n' | grep -v -x -e -m32 | grep -v -x -e -m64 | tr '\\\\n' ' '\\`\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    # Fix SONAME for shared libraries\n    NPARAMS=\"\"\n    SONAME_DETECTED=no\n    for p in \\$PARAMS; do\n        if [ \"x\\$p\" = \"x-Wl,-soname\" -o \"x\\$p\" = \"x-Wl,-h\" ]; then\n            SONAME_DETECTED=yes\n        elif [ \"x\\$SONAME_DETECTED\" = \"xyes\" ]; then\n            p=\\`echo \\$p | sed 's!^\\\\(-Wl,lib[^\\\\.]*\\\\.so\\\\)\\\\..*\\$!\\\\1!'\\`\n            SONAME_DETECTED=no\n        fi\n        NPARAMS=\"\\$NPARAMS \\$p\"\n    done\n    PARAMS=\\$NPARAMS\nfi\n\nFLAGS=\"$FLAGS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    FLAGS=\"\\$FLAGS $LFLAGS\"\n    FLAGS=\"\\$FLAGS -L$GNULIBCXX/libs/$ABI\"\n    FLAGS=\"\\$FLAGS -L$LIBCRYSTAX/libs/$ABI\"\nelse\n    FLAGS=\"\\$FLAGS -I$GNULIBCXX/include\"\n    FLAGS=\"\\$FLAGS -I$GNULIBCXX/libs/$ABI/include\"\n    FLAGS=\"\\$FLAGS -I$LIBCRYSTAX/include\"\nfi\n\nPARAMS=\"\\$FLAGS \\$PARAMS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    PARAMS=\"\\$PARAMS -lgnustl_shared\"\nfi\n\nexec $TCPATH/bin/$TCPREFIX-$TOOL \\$PARAMS\nEOF\n        fail_panic \"Could not create target tool $TOOL\"\n    done\n\n    for TOOL in as ar ranlib strip; do\n        {\n            echo \"#!/bin/sh\"\n            echo \"exec $TCPATH/bin/$TCPREFIX-$TOOL \\\"\\$@\\\"\"\n        } | mktool $TMPTARGETTCDIR/$TOOL\n        fail_panic \"Could not create target tool $TOOL\"\n    done\n\n    PATH=$TMPTARGETTCDIR:$SAVED_PATH\n    export PATH\n\n    local TMPTARGETBUILD=$BUILDDIR/target-build\n    run mkdir -p $TMPTARGETBUILD\n    fail_panic \"Couldn't create temporary directory for $ABI target build\"\n\n    cd $TMPTARGETBUILD\n    fail_panic \"Couldn't CD to temporary directory for $ABI target build\"\n\n    CC=gcc\n    CXX=g++\n    CPP=cpp\n    export CC CXX CPP\n\n    local PREFIX=$BUILDDIR/install\n\n    run $TMP_SRCDIR/source/configure        \\\n        --prefix=$PREFIX                    \\\n        --host=$TCPREFIX                    \\\n        --with-cross-build=$ICUHOSTBUILDDIR \\\n        --enable-shared                     \\\n        --enable-static                     \\\n\n    fail_panic \"Couldn't configure $ABI ICU $ICU_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't build $ABI ICU $ICU_VERSION\"\n\n    run make install\n    fail_panic \"Couldn't install $ABI ICU $ICU_VERSION\"\n\n    if [ \"$ICU_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install ICU $ICU_VERSION headers into $ICU_DSTDIR\"\n        run rm -Rf $ICU_DSTDIR/include\n        run cp -pR $PREFIX/include $ICU_DSTDIR/\n        fail_panic \"Couldn't install ICU $ICU_VERSION headers\"\n        ICU_HEADERS_INSTALLED=yes\n        export ICU_HEADERS_INSTALLED\n    fi\n\n    log \"Install ICU $ICU_VERSION $ABI libraries into $ICU_DSTDIR\"\n    run mkdir -p $ICU_DSTDIR/libs/$ABI\n    fail_panic \"Couldn't create ICU $ICU_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        run rm -f $ICU_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n\n        for f in $(find $PREFIX -name \"lib*.$LIBSUFFIX\" -print); do\n            run cp -pRH $f $ICU_DSTDIR/libs/$ABI/$(basename $f)\n            fail_panic \"Couldn't install ICU $ICU_VERSION target $ABI $(basename $f)\"\n        done\n    done\n\n    log \"ICU $ICU_VERSION $ABI binaries built successfully\"\n}\n\nSAVED_PATH=$PATH\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"icu-$ICU_VERSION-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        ICU_BUILD_FILES_NEED_PACKAGE=no\n    else\n        ICU_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"icu-$ICU_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        ICU_HEADERS_NEED_PACKAGE=no\n    else\n        ICU_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"icu-$ICU_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$ICU_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        if [ -z \"$ICU_HOST_BUILD\" ]; then\n            build_icu_for_host \"$BUILD_DIR/host\"\n            ICU_HOST_BUILD=\"$BUILD_DIR/host\"\n        fi\n        build_icu_for_abi $ABI \"$ICU_HOST_BUILD\" \"$BUILD_DIR/$ABI/shared\"\n    fi\ndone\n\n# Restore PATH\nPATH=$SAVED_PATH\nexport PATH\n\n# Copy license\nlog \"Copying ICU $ICU_VERSION license\"\nrun cp -f $TMP_SRCDIR/license.html $ICU_DSTDIR/\nfail_panic \"Couldn't copy ICU $ICU_VERSION license\"\n\n# Generate Android.mk\nlog \"Generating $ICU_DSTDIR/Android.mk\"\n{\n    echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n    echo \"\"\n    cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n    echo \"\"\n    echo 'LOCAL_PATH := $(call my-dir)'\n\n    for suffix in a so; do\n        if [ \"$suffix\" = \"a\" ]; then\n            type=static\n        else\n            type=shared\n        fi\n        find $ICU_DSTDIR/libs -name \"libicu*.$suffix\" -exec basename '{}' \\; | \\\n            sed \"s,^lib\\\\([^\\\\.]*\\\\)\\\\.${suffix}$,\\\\1,\" | sort | uniq | \\\n        {\n            while read lib; do\n                echo ''\n                echo 'include $(CLEAR_VARS)'\n                echo \"LOCAL_MODULE := ${lib}_${type}\"\n                echo \"LOCAL_SRC_FILES := libs/\\$(TARGET_ARCH_ABI)/lib${lib}.${suffix}\"\n                echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n                echo \"include \\$(PREBUILT_$(echo $type | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n            done\n        }\n    done\n} | cat >$ICU_DSTDIR/Android.mk\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$ICU_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk license.html; do\n            FILES=\"$FILES $ICU_SUBDIR/$ICU_VERSION/$F\"\n        done\n        PACKAGE_NAME=\"icu-$ICU_VERSION-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package ICU $ICU_VERSION build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    if [ \"$ICU_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$ICU_SUBDIR/$ICU_VERSION/include\"\n        PACKAGE_NAME=\"icu-$ICU_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package ICU $ICU_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$ICU_SUBDIR/$ICU_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"icu-$ICU_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI ICU $ICU_VERSION binaries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-libjpeg-turbo.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libjpeg-turbo binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libjpeg-turbo source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBJPEGTURBO_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBJPEGTURBO_VERSION=\nregister_var_option \"--version=<ver>\" LIBJPEGTURBO_VERSION \"Specify libjpeg-turbo version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBJPEGTURBO_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBJPEGTURBO_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libjpeg-turbo source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBJPEGTURBO_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBJPEGTURBO_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBJPEGTURBO_VERSION\" ]; then\n    echo \"ERROR: Please specify libjpeg-turbo version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBJPEGTURBO_SRCDIR rev-parse --verify v$LIBJPEGTURBO_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBJPEGTURBO_VERSION in $LIBJPEGTURBO_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBJPEGTURBO_DSTDIR=$NDK_DIR/$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION\nmkdir -p $LIBJPEGTURBO_DSTDIR\nfail_panic \"Can't create libjpeg-turbo-$LIBJPEGTURBO_VERSION destination directory: $LIBJPEGTURBO_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libjpeg-turbo\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libjpeg_turbo_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libjpeg-turbo-$LIBJPEGTURBO_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBJPEGTURBO_VERSION $LIBJPEGTURBO_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libjpeg-turbo-$LIBJPEGTURBO_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,\\.so.*$,.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    local EXTRA_OPTS=\"\"\n    case $ABI in\n        mips)\n            EXTRA_OPTS=\"--without-simd\"\n    esac\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --disable-ld-version-script \\\n        $EXTRA_OPTS\n\n    fail_panic \"Can't configure $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    if [ \"$LIBJPEGTURBO_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libjpeg-turbo-$LIBJPEGTURBO_VERSION headers into $LIBJPEGTURBO_DSTDIR\"\n\n        run rm -Rf $LIBJPEGTURBO_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBJPEGTURBO_DSTDIR/\n        fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION headers\"\n\n        LIBJPEGTURBO_HEADERS_INSTALLED=yes\n        export LIBJPEGTURBO_HEADERS_INSTALLED\n    fi\n\n    log \"Install libjpeg-turbo-$LIBJPEGTURBO_VERSION $ABI libraries into $LIBJPEGTURBO_DSTDIR\"\n    run mkdir -p $LIBJPEGTURBO_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libjpeg-turbo-$LIBJPEGTURBO_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBJPEGTURBO_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBJPEGTURBO_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBJPEGTURBO_HEADERS_NEED_PACKAGE=no\n    else\n        LIBJPEGTURBO_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBJPEGTURBO_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libjpeg_turbo_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBJPEGTURBO_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION/include\"\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libjpeg-turbo-$LIBJPEGTURBO_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-libjpeg.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libjpeg binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libjpeg source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBJPEG_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBJPEG_VERSION=\nregister_var_option \"--version=<ver>\" LIBJPEG_VERSION \"Specify libjpeg version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBJPEG_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBJPEG_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libjpeg source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBJPEG_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBJPEG_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBJPEG_VERSION\" ]; then\n    echo \"ERROR: Please specify libjpeg version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBJPEG_SRCDIR rev-parse --verify v$LIBJPEG_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBJPEG_VERSION in $LIBJPEG_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBJPEG_DSTDIR=$NDK_DIR/$LIBJPEG_SUBDIR/$LIBJPEG_VERSION\nmkdir -p $LIBJPEG_DSTDIR\nfail_panic \"Can't create libjpeg-$LIBJPEG_VERSION destination directory: $LIBJPEG_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libjpeg\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libjpeg_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libjpeg-$LIBJPEG_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBJPEG_VERSION $LIBJPEG_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libjpeg-$LIBJPEG_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,\\.so.*$,.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --disable-ld-version-script \\\n\n    fail_panic \"Can't configure $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    if [ \"$LIBJPEG_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libjpeg-$LIBJPEG_VERSION headers into $LIBJPEG_DSTDIR\"\n\n        run rm -Rf $LIBJPEG_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBJPEG_DSTDIR/\n        fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION headers\"\n\n        LIBJPEG_HEADERS_INSTALLED=yes\n        export LIBJPEG_HEADERS_INSTALLED\n    fi\n\n    log \"Install libjpeg-$LIBJPEG_VERSION $ABI libraries into $LIBJPEG_DSTDIR\"\n    run mkdir -p $LIBJPEG_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libjpeg-$LIBJPEG_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBJPEG_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBJPEG_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBJPEG_HEADERS_NEED_PACKAGE=no\n    else\n        LIBJPEG_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBJPEG_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libjpeg_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBJPEG_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBJPEG_SUBDIR/$LIBJPEG_VERSION/include\"\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libjpeg-$LIBJPEG_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBJPEG_SUBDIR/$LIBJPEG_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libjpeg-$LIBJPEG_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-libpng.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libpng binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libpng source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBPNG_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBPNG_VERSION=\nregister_var_option \"--version=<ver>\" LIBPNG_VERSION \"Specify libpng version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBPNG_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBPNG_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libpng source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBPNG_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBPNG_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBPNG_VERSION\" ]; then\n    echo \"ERROR: Please specify libpng version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBPNG_SRCDIR rev-parse --verify v$LIBPNG_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBPNG_VERSION in $LIBPNG_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBPNG_DSTDIR=$NDK_DIR/$LIBPNG_SUBDIR/$LIBPNG_VERSION\nmkdir -p $LIBPNG_DSTDIR\nfail_panic \"Can't create libpng-$LIBPNG_VERSION destination directory: $LIBPNG_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libpng\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libpng_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libpng-$LIBPNG_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBPNG_VERSION $LIBPNG_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libpng-$LIBPNG_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    run ./autogen.sh\n    fail_panic \"Can't create autotools scripts\"\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    local EXTRA_ARGS=\"\"\n    case $ABI in\n        armeabi-v7a*)\n            EXTRA_ARGS=\"$EXTRA_ARGS --enable-arm-neon=api\"\n    esac\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,libpng.*\\.so.*$,libpng.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --enable-werror \\\n        --enable-unversioned-links \\\n        --with-pic \\\n        $EXTRA_ARGS\n    fail_panic \"Can't configure $ABI libpng-$LIBPNG_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libpng-$LIBPNG_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION\"\n\n    if [ \"$LIBPNG_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libpng-$LIBPNG_VERSION headers into $LIBPNG_DSTDIR\"\n\n        run rm -Rf $LIBPNG_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBPNG_DSTDIR/\n        fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION headers\"\n\n        LIBPNG_HEADERS_INSTALLED=yes\n        export LIBPNG_HEADERS_INSTALLED\n    fi\n\n    log \"Install libpng-$LIBPNG_VERSION $ABI libraries into $LIBPNG_DSTDIR\"\n    run mkdir -p $LIBPNG_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libpng-$LIBPNG_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        rm -f $LIBPNG_DSTDIR/libs/$ABI/libpng.$LIBSUFFIX\n        run rsync -aL $INSTALLDIR/lib/libpng.$LIBSUFFIX $LIBPNG_DSTDIR/libs/$ABI\n        fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION libraries\"\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBPNG_HEADERS_NEED_PACKAGE=no\n    else\n        LIBPNG_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBPNG_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libpng_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBPNG_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBPNG_SUBDIR/$LIBPNG_VERSION/include\"\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libpng-$LIBPNG_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBPNG_SUBDIR/$LIBPNG_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libpng-$LIBPNG_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-libtiff.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libtiff binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libtiff source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBTIFF_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBTIFF_VERSION=\nregister_var_option \"--version=<ver>\" LIBTIFF_VERSION \"Specify libtiff version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBTIFF_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBTIFF_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libtiff source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBTIFF_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBTIFF_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBTIFF_VERSION\" ]; then\n    echo \"ERROR: Please specify libtiff version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBTIFF_SRCDIR rev-parse --verify v$LIBTIFF_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBTIFF_VERSION in $LIBTIFF_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBTIFF_DSTDIR=$NDK_DIR/$LIBTIFF_SUBDIR/$LIBTIFF_VERSION\nmkdir -p $LIBTIFF_DSTDIR\nfail_panic \"Can't create libtiff-$LIBTIFF_VERSION destination directory: $LIBTIFF_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libtiff\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libtiff_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libtiff-$LIBTIFF_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    rm -Rf $SRCDIR\n    run git clone -b v$LIBTIFF_VERSION $LIBTIFF_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libtiff-$LIBTIFF_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    CFLAGS=\"\"\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    CXXFLAGS=\"$CFLAGS\"\n    CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/include\"\n    CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI/include\"\n\n    LDFLAGS=\"-Wl,--no-undefined\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI\"\n\n    local HOST_OS=$(uname -s | tr '[A-Z]' '[a-z]')\n    local HOST_ARCH=$(uname -m)\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/${HOST_OS}-${HOST_ARCH}\n\n    local LIBJPEG_VERSION=$(echo $LIBJPEG_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\n    local LIBJPEG=$NDK_DIR/$LIBJPEG_SUBDIR/$LIBJPEG_VERSION\n\n    CXX=$BUILDDIR/c++\n    {\n        cat <<EOF\n#!/bin/bash\n\nARGS=\"\"\nfor p in \"\\$@\"; do\n    case \\$p in\n        -lstdc++)\n            p=\"-lgnustl_shared \\$p\"\n            ;;\n    esac\n    ARGS=\"\\$ARGS \\$p\"\ndone\n\nexec $TCPREFIX/bin/${HOST}-g++ \\$ARGS\nEOF\n    } >$CXX\n    fail_panic \"Can't create c++ wrapper\"\n    chmod +x $CXX\n    fail_panic \"Can't chmod +x c++ wrapper\"\n\n    CC=$TCPREFIX/bin/${HOST}-gcc\n    CPP=\"$CC $CFLAGS -E\"\n    CXXCPP=\"$CXX $CXXFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP CXX CXXCPP AR RANLIB\n    export CFLAGS CXXFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --with-jpeg-include-dir=$LIBJPEG/include \\\n        --with-jpeg-lib-dir=$LIBJPEG/libs/$ABI \\\n        --disable-jbig \\\n        --disable-lzma \\\n        --enable-cxx \\\n\n    fail_panic \"Can't configure $ABI libtiff-$LIBTIFF_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libtiff-$LIBTIFF_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION\"\n\n    if [ \"$LIBTIFF_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libtiff-$LIBTIFF_VERSION headers into $LIBTIFF_DSTDIR\"\n\n        run rm -Rf $LIBTIFF_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBTIFF_DSTDIR/\n        fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION headers\"\n\n        LIBTIFF_HEADERS_INSTALLED=yes\n        export LIBTIFF_HEADERS_INSTALLED\n    fi\n\n    log \"Install libtiff-$LIBTIFF_VERSION $ABI libraries into $LIBTIFF_DSTDIR\"\n    run mkdir -p $LIBTIFF_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libtiff-$LIBTIFF_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBTIFF_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBTIFF_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBTIFF_HEADERS_NEED_PACKAGE=no\n    else\n        LIBTIFF_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBTIFF_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libtiff_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBTIFF_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBTIFF_SUBDIR/$LIBTIFF_VERSION/include\"\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libtiff-$LIBTIFF_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBTIFF_SUBDIR/$LIBTIFF_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libtiff-$LIBTIFF_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    #rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-llvm-libc++.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild one of the NDK C++ STL\n#  implementations from sources.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild LLVM C++ Standard Library.\n\nThis script is called when pacakging a new NDK release. It will simply\nrebuild the static and shared libraries of a given C++ runtime from\nsources.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/sources/cxx-stl/$CXX_STL_SUBDIR, but you can override this with\nthe --out-dir=<path> option.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nVISIBLE_STATIC=\nregister_var_option \"--visible-static\" VISIBLE_STATIC \"Do not use hidden visibility for the static library\"\n\nWITH_DEBUG_INFO=\nregister_var_option \"--with-debug-info\" WITH_DEBUG_INFO \"Build with -g.  STL is still built with optimization but with debug info\"\n\nLLVM_VERSION=$DEFAULT_LLVM_VERSION\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n  if [ ! -d \"$NDK_DIR\" ]; then\n    panic \"NDK directory does not exist: $NDK_DIR\"\n  fi\nfi\n\n# Handle OUT_DIR\nif [ -z \"$OUT_DIR\" ] ; then\n  OUT_DIR=$ANDROID_NDK_ROOT\n  log \"Auto-config: --out-dir=$OUT_DIR\"\nelse\n  mkdir -p \"$OUT_DIR\"\n  fail_panic \"Could not create directory: $OUT_DIR\"\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libc++\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# Location of the various C++ runtime source trees.  Use symlink from\n# $BUILD_DIR instead of $NDK which may contain full path of builder's working dir\n\nrm -f $BUILD_DIR/ndk\nln -sf $ANDROID_NDK_ROOT $BUILD_DIR/ndk\n\nCRYSTAX_SRCDIR=$BUILD_DIR/ndk/$CRYSTAX_SUBDIR\nLIBCXX_SRCDIR=$BUILD_DIR/ndk/$LIBCXX_SUBDIR/$LLVM_VERSION\nLIBCXXABI_SRCDIR=$BUILD_DIR/ndk/$LIBCXXABI_SUBDIR\n\nLIBCXX_INCLUDES=\"-I$LIBCXX_SRCDIR/libcxx/include -I$LIBCXXABI_SRCDIR/include\"\nLIBCXX_INCLUDES=\"$LIBCXX_INCLUDES -I$CRYSTAX_SRCDIR/include\"\n\nCOMMON_C_CXX_FLAGS=\"-fPIC -O2 -ffunction-sections -fdata-sections\"\nCOMMON_CXXFLAGS=\"-fexceptions -frtti -fuse-cxa-atexit\"\n\nif [ \"$WITH_DEBUG_INFO\" ]; then\n    COMMON_C_CXX_FLAGS=\"$COMMON_C_CXX_FLAGS -g\"\nfi\n\n# Determine Libc++ build parameters\nLIBCXX_LINKER_SCRIPT=export_symbols.txt\nLIBCXX_CFLAGS=\"$COMMON_C_CXX_FLAGS $LIBCXX_INCLUDES -Drestrict=__restrict__\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CFLAGS -DLIBCXXABI=1 -std=c++11 -D__STDC_FORMAT_MACROS\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Wall -Wextra\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Werror\"\nif [ -f \"$_BUILD_SRCDIR/$LIBCXX_LINKER_SCRIPT\" ]; then\n    LIBCXX_LDFLAGS=\"-Wl,--version-script,\\$_BUILD_SRCDIR/$LIBCXX_LINKER_SCRIPT\"\nfi\nLIBCXX_SOURCES=\\\n\"libcxx/src/algorithm.cpp \\\nlibcxx/src/bind.cpp \\\nlibcxx/src/chrono.cpp \\\nlibcxx/src/condition_variable.cpp \\\nlibcxx/src/debug.cpp \\\nlibcxx/src/exception.cpp \\\nlibcxx/src/future.cpp \\\nlibcxx/src/hash.cpp \\\nlibcxx/src/ios.cpp \\\nlibcxx/src/iostream.cpp \\\nlibcxx/src/locale.cpp \\\nlibcxx/src/memory.cpp \\\nlibcxx/src/mutex.cpp \\\nlibcxx/src/new.cpp \\\nlibcxx/src/optional.cpp \\\nlibcxx/src/random.cpp \\\nlibcxx/src/regex.cpp \\\nlibcxx/src/shared_mutex.cpp \\\nlibcxx/src/stdexcept.cpp \\\nlibcxx/src/string.cpp \\\nlibcxx/src/strstream.cpp \\\nlibcxx/src/system_error.cpp \\\nlibcxx/src/thread.cpp \\\nlibcxx/src/typeinfo.cpp \\\nlibcxx/src/utility.cpp \\\nlibcxx/src/valarray.cpp \\\n\"\n\nLIBCXXABI_SOURCES=\\\n\"abort_message.cpp \\\ncxa_aux_runtime.cpp \\\ncxa_default_handlers.cpp \\\ncxa_demangle.cpp \\\ncxa_exception.cpp \\\ncxa_exception_storage.cpp \\\ncxa_guard.cpp \\\ncxa_handlers.cpp \\\ncxa_new_delete.cpp \\\ncxa_personality.cpp \\\ncxa_thread_atexit.cpp \\\ncxa_unexpected.cpp \\\ncxa_vector.cpp \\\ncxa_virtual.cpp \\\nexception.cpp \\\nprivate_typeinfo.cpp \\\nstdexcept.cpp \\\ntypeinfo.cpp\n\"\n\nLIBCXXABI_SOURCES=$(echo $LIBCXXABI_SOURCES | tr ' ' '\\n' | grep -v '^$' | sed 's,^,../../llvm-libc++abi/libcxxabi/src/,' | tr '\\n' ' ')\n\nLIBCXXABI_UNWIND_SOURCES=\\\n\"Unwind/libunwind.cpp \\\nUnwind/Unwind-EHABI.cpp \\\nUnwind/Unwind-sjlj.c \\\nUnwind/UnwindLevel1.c \\\nUnwind/UnwindLevel1-gcc-ext.c \\\nUnwind/UnwindRegistersRestore.S \\\nUnwind/UnwindRegistersSave.S \\\n\"\n\nLIBCXXABI_UNWIND_SOURCES=$(echo $LIBCXXABI_UNWIND_SOURCES | tr ' ' '\\n' | grep -v '^$' | sed 's,^,../../llvm-libc++abi/libcxxabi/src/,' | tr '\\n' ' ')\n\n# If the --no-makefile flag is not used, we're going to put all build\n# commands in a temporary Makefile that we will be able to invoke with\n# -j$NUM_JOBS to build stuff in parallel.\n#\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\n# Define a few common variables based on parameters.\nCXX_STL_LIB=libc++\nCXX_STL_SUBDIR=$LIBCXX_SUBDIR/$LLVM_VERSION\nCXX_STL_SRCDIR=$LIBCXX_SRCDIR\nCXX_STL_CFLAGS=$LIBCXX_CFLAGS\nCXX_STL_CXXFLAGS=$LIBCXX_CXXFLAGS\nCXX_STL_LDFLAGS=$LIBCXX_LDFLAGS\nCXX_STL_SOURCES=$LIBCXX_SOURCES\nCXX_STL_PACKAGE=libcxx\n\nHIDDEN_VISIBILITY_FLAGS=\"-fvisibility=hidden -fvisibility-inlines-hidden\"\n\n# By default, all static libraries include hidden ELF symbols, except\n# if one uses the --visible-static option.\nif [ -z \"$VISIBLE_STATIC\" ]; then\n    STATIC_CONLYFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\n    STATIC_CXXFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\nelse\n    STATIC_CONLYFLAGS=\n    STATIC_CXXFLAGS=\nfi\nSHARED_CONLYFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\nSHARED_CXXFLAGS=\n\n\n# build_stl_libs_for_abi\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\n# $4: installation directory\n# $5: (optional) thumb\nbuild_stl_libs_for_abi ()\n{\n    local ARCH BINPREFIX SYSROOT\n    local ABI=$1\n    local THUMB=\"$5\"\n    local BUILDDIR=\"$2\"/$THUMB\n    local TYPE=\"$3\"\n    local DSTDIR=\"$4\"\n    local FLOAT_ABI=\"\"\n    local DEFAULT_CFLAGS DEFAULT_CXXFLAGS\n    local SRC OBJ OBJECTS EXTRA_CFLAGS EXTRA_CXXFLAGS EXTRA_LDFLAGS LIB_SUFFIX GCCVER\n\n    EXTRA_CFLAGS=\"\"\n    EXTRA_CXXFLAGS=\"\"\n    EXTRA_LDFLAGS=\"\"\n\n    case $ABI in\n        armeabi-v7a-hard)\n            EXTRA_CFLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n            EXTRA_CXXFLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n            EXTRA_LDFLAGS=\"-Wl,--no-warn-mismatch -lm_hard\"\n            FLOAT_ABI=\"hard\"\n            ;;\n        arm64-v8a)\n            #if [ -n \"$GCC_VERSION\" ]; then\n            #    EXTRA_CFLAGS=\"-mfix-cortex-a53-835769\"\n            #    EXTRA_CXXFLAGS=\"-mfix-cortex-a53-835769\"\n            #fi\n            ;;\n        x86|x86_64)\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"-mstackrealign\"\n            EXTRA_CXXFLAGS=\"-mstackrealign\"\n            ;;\n        mips32r6)\n            EXTRA_CFLAGS=\"-mips32r6\"\n            EXTRA_CXXFLAGS=\"-mips32r6\"\n            EXTRA_LDFLAGS=\"-mips32r6\"\n            ;;\n        mips64)\n            EXTRA_CFLAGS=\"-mips64r6\"\n            EXTRA_CXXFLAGS=$EXTRA_CFLAGS\n            ;;\n    esac\n\n    USE_LLVM_UNWIND=\n    case $ABI in\n        armeabi*)\n            EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=1\"\n            USE_LLVM_UNWIND=true\n            ;;\n        *)\n            EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=0\"\n            ;;\n    esac\n\n    if [ -n \"$THUMB\" ]; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mthumb\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -mthumb\"\n    fi\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS $STATIC_CONLYFLAGS\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS $STATIC_CXXFLAGS\"\n    else\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS $SHARED_CONLYFLAGS\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS $SHARED_CXXFLAGS\"\n    fi\n\n    DSTDIR=$DSTDIR/$CXX_STL_SUBDIR/libs/$ABI/$THUMB\n    LIB_SUFFIX=\"$(get_lib_suffix_for_abi $ABI)\"\n\n    mkdir -p \"$BUILDDIR\"\n    mkdir -p \"$DSTDIR\"\n\n    ARCH=$(convert_abi_to_arch $ABI)\n    GCCVER=$(get_default_gcc_version_for_arch $ARCH)\n\n    # clang3.5+ use integrated-as as default, which has trouble compiling\n    # llvm-libc++abi/libcxxabi/src/Unwind/UnwindRegistersRestore.S\n    EXTRA_CFLAGS=\"${EXTRA_CFLAGS} -fno-integrated-as\"\n    EXTRA_CXXFLAGS=\"${EXTRA_CXXFLAGS} -fno-integrated-as\"\n    # libc++ built with clang (for ABI armeabi-only) produces\n    # libc++_shared.so and libc++_static.a with undefined __atomic_fetch_add_4\n    # Add -latomic.\n    if [ \"$ABI\" = \"armeabi\" ]; then\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -latomic\"\n    fi\n\n    builder_begin_android $ABI \"$BUILDDIR\" \"$GCCVER\" \"$LLVM_VERSION\" \"$MAKEFILE\"\n\n    builder_set_dstdir \"$DSTDIR\"\n    builder_reset_cflags DEFAULT_CFLAGS\n    builder_reset_cxxflags DEFAULT_CXXFLAGS\n\n    builder_set_srcdir \"$CXX_STL_SRCDIR\"\n    builder_reset_cflags\n    builder_cflags \"$DEFAULT_CFLAGS $CXX_STL_CFLAGS $EXTRA_CFLAGS\"\n    builder_reset_cxxflags\n    builder_cxxflags \"$DEFAULT_CXXFLAGS $CXX_STL_CXXFLAGS $EXTRA_CXXFLAGS\"\n    builder_ldflags \"$CXX_STL_LDFLAGS $EXTRA_LDFLAGS\"\n    builder_sources $CXX_STL_SOURCES\n    if [ \"$USE_LLVM_UNWIND\" = \"true\" ]; then\n      builder_sources $LIBCXXABI_SOURCES $LIBCXXABI_UNWIND_SOURCES\n    else\n      builder_sources $LIBCXXABI_SOURCES\n    fi\n    builder_ldflags \"-ldl\"\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        log \"Building $DSTDIR/${CXX_STL_LIB}_static.a\"\n        builder_static_library ${CXX_STL_LIB}_static\n    else\n        log \"Building $DSTDIR/${CXX_STL_LIB}_shared${LIB_SUFFIX}\"\n        builder_shared_library ${CXX_STL_LIB}_shared $LIB_SUFFIX \"$FLOAT_ABI\"\n    fi\n\n    builder_end\n}\n\n# get_libstdcxx_package_name_for_abi\n# $1: ABI\nget_libstdcxx_package_name_for_abi ()\n{\n    local ABI=$1\n    local package_name\n\n    package_name=\"${CXX_STL_PACKAGE}-libs-${LLVM_VERSION}-$ABI\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        package_name=\"${package_name}-g\"\n    fi\n    package_name=\"${package_name}.tar.xz\"\n\n    echo \"$package_name\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=$(get_libstdcxx_package_name_for_abi $ABI)\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\"\n        build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\"\n        # build thumb version of libraries for 32-bit arm\n        if [ \"$ABI\" != \"${ABI%%arm*}\" -a \"$ABI\" = \"${ABI%%64*}\" ] ; then\n            build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\" thumb\n            build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\" thumb\n        fi\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        LIB_SUFFIX=\"$(get_lib_suffix_for_abi $ABI)\"\n        for LIB in ${CXX_STL_LIB}_static.a ${CXX_STL_LIB}_shared${LIB_SUFFIX}; do\n        if [ -d \"$CXX_STL_SUBDIR/libs/$ABI/thumb\" ]; then\n                FILES=\"$FILES $CXX_STL_SUBDIR/libs/$ABI/thumb/$LIB\"\n            fi\n            FILES=\"$FILES $CXX_STL_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=$(get_libstdcxx_package_name_for_abi $ABI)\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$OUT_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI libc++ binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-llvm.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Packages the platform's LLVM for the NDK.\"\"\"\nimport argparse\nimport datetime\nimport os\nimport tarfile\nimport sys\n\n\ndef android_top():\n    top = os.getenv('ANDROID_BUILD_TOP', '')\n    if not top:\n        sys.exit('ANDROID_BUILD_TOP not set. Cannot continue.\\n'\n                 'Please set ANDROID_BUILD_TOP to point to the root of an '\n                 'Android tree.')\n    return top\n\n\ndef get_default_package_dir():\n    tmp_dir = '/tmp'\n    if 'TMPDIR' in os.environ:\n        tmp_dir = os.getenv('TMPDIR')\n    datestamp = datetime.date.today().isoformat().replace('-', '')\n    return os.path.join(tmp_dir, 'prebuilt-{}'.format(datestamp))\n\n\ndef get_llvm_prebuilt_path(host, version):\n    rel_prebuilt_path = 'prebuilts/clang/{}/host/{}'.format(\n        host, version)\n    prebuilt_path = os.path.join(android_top(), rel_prebuilt_path)\n    if not os.path.isdir(prebuilt_path):\n        sys.exit('Could not find prebuilt LLVM at {}'.format(prebuilt_path))\n    return prebuilt_path\n\n\nclass ArgParser(argparse.ArgumentParser):\n    def __init__(self):\n        super(ArgParser, self).__init__(\n            description=\"Package the platform's LLVM for the NDK.\")\n\n        self.add_argument(\n            '--host', required=True,\n            choices=('darwin', 'linux', 'windows', 'windows64'),\n            help='Package binaries for given OS (e.g. linux).')\n        self.add_argument(\n            '--package-dir', help='Directory to place the packaged LLVM.',\n            default=get_default_package_dir())\n\n\ndef main():\n    LLVM_VERSION = '3.6'\n\n    args = ArgParser().parse_args()\n    host = args.host\n    package_dir = args.package_dir\n\n    # TODO(danalbert): Fix 64-bit Windows LLVM.\n    # This wrongly packages 32-bit Windows LLVM for 64-bit as well, but the\n    # real bug here is that we don't have a 64-bit Windows LLVM.\n    # http://b/22414702\n    os_name = host\n    if os_name == 'windows64':\n        os_name = 'windows'\n    prebuilt_path = get_llvm_prebuilt_path(os_name + '-x86', LLVM_VERSION)\n\n    if host == 'darwin':\n        host = 'darwin-x86_64'\n    elif host == 'linux':\n        host = 'linux-x86_64'\n    elif host == 'windows':\n        host = 'windows'\n    elif host == 'windows64':\n        host = 'windows-x86_64'\n\n    package_name = 'llvm-{}-{}.tar.bz2'.format(LLVM_VERSION, host)\n    package_path = os.path.join(package_dir, package_name)\n    with tarfile.TarFile.open(package_path, 'w:bz2') as tarball:\n        arcname = 'toolchains/llvm-{}/prebuilt/{}'.format(LLVM_VERSION, host)\n\n        def package_filter(tarinfo):\n            if os.path.basename(tarinfo.name) == '.git':\n                return None\n            if os.path.splitext(tarinfo.name)[1] == '.sh':\n                return None\n            return tarinfo\n        tarball.add(prebuilt_path, arcname, filter=package_filter)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "build/instruments/build-llvm.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the llvm and clang binaries\n#  for the Android NDK.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the LLVM prebuilt binaries for the Android NDK.\n\nWhere <src-dir> is the location of toolchain sources, <ndk-dir> is\nthe top-level NDK installation path and <toolchain> is the name of\nthe toolchain to use (e.g. llvm-3.6).\"\n\nRELEASE=`date +%Y%m%d`\nBUILD_OUT=/tmp/ndk-$USER/build/toolchain\nOPTION_BUILD_OUT=\nregister_var_option \"--build-out=<path>\" OPTION_BUILD_OUT \"Set temporary build directory\"\n\n# Note: platform API level 9 or higher is needed for proper C++ support\nregister_var_option \"--platform=<name>\"  PLATFORM \"Specify platform name\"\n\nGMP_VERSION=$DEFAULT_GMP_VERSION\nregister_var_option \"--gmp-version=<version>\" GMP_VERSION \"Specify gmp version\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Create archive tarball in specific directory\"\n\nPOLLY=no\ndo_polly_option () { POLLY=yes; }\nregister_option \"--with-polly\" do_polly_option \"Enable Polyhedral optimizations for LLVM\"\n\nCHECK=no\ndo_check_option () { CHECK=yes; }\nregister_option \"--check\" do_check_option \"Check LLVM\"\n\nUSE_PYTHON_BC2NATIVE=no\ndo_use_python_bc2native_option () { USE_PYTHON_BC2NATIVE=yes; }\nregister_option \"--use-python-bc2native\" do_use_python_bc2native_option \"Use python bc2native instead of integrated one\"\n\nINCREMENTAL=no\ndo_incremental_option () { INCREMENTAL=yes; }\nregister_option \"--incremental\" do_incremental_option \"Build incremenally\"\n\nregister_jobs_option\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\nprepare_canadian_toolchain /tmp/ndk-$USER/build\n\nfix_option BUILD_OUT \"$OPTION_BUILD_OUT\" \"build directory\"\nsetup_default_log_file $BUILD_OUT/config.log\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR/$TOOLCHAIN/llvm\" ] ; then\n        echo \"ERROR: Source directory does not contain llvm sources: $SRC_DIR/$TOOLCHAIN/llvm\"\n        exit 1\n    fi\n\n    if [ -e \"$SRC_DIR/$TOOLCHAIN/llvm/tools/polly\" -a ! -h \"$SRC_DIR/$TOOLCHAIN/llvm/tools/polly\" ] ; then\n        echo \"ERROR: polly, if exist, needs to be a symbolic link: $SRC_DIR/$TOOLCHAIN/llvm/tools/polly\"\n        exit 1\n    fi\n\n    GMP_SOURCE=$SRC_DIR/gmp/gmp-$GMP_VERSION.tar.bz2\n    if [ ! -f \"$GMP_SOURCE\" ] ; then\n        echo \"ERROR: Source directory does not contain gmp: $GMP_SOURCE\"\n        exit 1\n    fi\n    SRC_DIR=`cd $SRC_DIR; pwd`\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not create target NDK installation path: $NDK_DIR\"\n            exit 1\n        fi\n    fi\n    NDK_DIR=`cd $NDK_DIR; pwd`\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ -z \"$PLATFORM\" ]; then\n   PLATFORM=\"android-\"$(get_default_api_level_for_arch $ARCH)\nfi\n\nprepare_target_build\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\nset_toolchain_ndk $NDK_DIR $TOOLCHAIN\n\nif [ \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ] ; then\n    dump \"Using C compiler: $CC\"\n    dump \"Using C++ compiler: $CXX\"\n    if [ -n \"$OBJCXX\" ]; then\n        dump \"Using Objective-C++ compiler: $OBJCXX\"\n    fi\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=\"$TOOLCHAIN-$CACHE_HOST_TAG.tar.xz\"\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\nif [ \"$MINGW\" = \"yes\" -a \"$TRY64\" != \"yes\" ]; then\n    # Clang3.5+ needs gcc4.7+ to build, and some of\n    # cross toolchain \"i586-*\" we search for in find_mingw_toolchain()\n    # can no longer build.  One solution is to provide DEBIAN_NAME=mingw32\n    # BINPREFIX=i686-pc-mingw32msvc- MINGW_GCC=/path/to/i686-w64-mingw32,\n    # but ABI_CONFIGURE_HOST is still hard-coded to i586-pc-mingw32msvc.\n    # Fixup ABI_CONFIGURE_HOST in this case.\n    if [ \"$ABI_CONFIGURE_HOST\" = \"i586-pc-mingw32msvc\" ]; then\n        MINGW_GCC_BASENAME=`basename $MINGW_GCC`\n        if [ \"$MINGW_GCC_BASENAME\" = \"${MINGW_GCC_BASENAME%%i585*}\" ]; then\n            ABI_CONFIGURE_HOST=${MINGW_GCC_BASENAME%-gcc}\n\t    STRIP=$ABI_CONFIGURE_HOST-strip\n        fi\n    fi\nfi\n\nif [ \"$INCREMENTAL\" != \"yes\" ]; then\n    rm -rf $BUILD_OUT\nfi\nmkdir -p $BUILD_OUT\n\nMAKE_FLAGS=\"VERBOSE=1\"\n\nTOOLCHAIN_BUILD_PREFIX=$BUILD_OUT/prefix\n\nARCH=$HOST_ARCH\n\n# Disable futimens@GLIBC_2.6 not available in system on server with very old libc.so\nCFLAGS_FOR_BUILD=\"-O2 -I$TOOLCHAIN_BUILD_PREFIX/include -DDISABLE_FUTIMENS\"\nLDFLAGS_FOR_BUILD=\"-L$TOOLCHAIN_BUILD_PREFIX/lib\"\n\n# Statically link stdc++ to eliminate dependency on outdated libctdc++.so in old 32-bit\n# linux system, and libgcc_s_sjlj-1.dll and libstdc++-6.dll on windows\nLLVM_VERSION=\"`echo $TOOLCHAIN | tr '-' '\\n' | tail -n 1`\"\nLDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static-libstdc++\"\nif [ \"$CC\" = \"${CC%%clang*}\" ]; then\n    LDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static-libgcc\"\nfi\n\n# Static link to avoid dependencies on libwinpthread-1.dll in mingw\nif [ \"$MINGW\" = \"yes\" ]; then\n    LDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static\"\nfi\n\n# Starting from llvm-3.7 lib/Support/Signals.cpp needs set_abort_behavior() doesn't exist in\n# Windows until -lmsvcr90\nif [ \"$MINGW\" = \"yes\" -a \"$LLVM_VERSION\" \\> \"3.5\" ]; then\n    XXX_MAKE_FLAGS=\"$MAKE_FLAGS LIBS=-lmsvcr90\"\nfi\n\nif [ \"$HOST_OS\" = \"darwin\" -a -n \"$DARWIN_SYSROOT\" ]; then\n    PATH=$DARWIN_SYSROOT/usr/bin:$PATH\n    export PATH\n\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -I$DARWIN_SYSROOT/usr/include\"\n    LDFLAGS_FOR_BUILD=\"$LDFLAGS_FOR_BUILD -L$DARWIN_SYSROOT/usr/lib\"\n\n    # Disable wchar support for libedit since it require recent C++11 support which we don't\n    # have yet in used x86_64-apple-darwin-4.9.2 prebuilt toolchain\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -DLLDB_EDITLINE_USE_WCHAR=0\"\nfi\n\nif [ \"$MINGW\" = \"yes\" ]; then\n    # lldb doesnt' support python and curses on Windows\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -DLLDB_DISABLE_PYTHON -DLLDB_DISABLE_CURSES\"\nelse\n    PYTHONHOME=$NDK_DIR/prebuilt/$HOST_TAG\n    if [ ! -d $PYTHONHOME ]; then\n        echo \"ERROR: $PYTHONHOME folder not found!\" 1>&2\n        exit 1\n    fi\n    export PYTHONHOME\n\n    PATH=$PYTHONHOME/bin:$PATH\n    export PATH\n\n    PYTHON=$PYTHONHOME/bin/python\n    PYTHON_VERSION=$($PYTHON -c \"import sys; print('%s.%s' % sys.version_info[:2])\")\n    if [ -z \"$PYTHON_VERSION\" ]; then\n        echo \"ERROR: Can't detect Python version: $PYTHON\" 1>&2\n        exit 1\n    fi\n    echo \"Auto-detect: Python $PYTHON_VERSION\"\n\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -I$PYTHONHOME/include/python${PYTHON_VERSION}\"\n    LDFLAGS_FOR_BUILD=\"$LDFLAGS_FOR_BUILD -L$PYTHONHOME/lib\"\nfi\n\n# Enable 64-bit off_t even for 32-bit binaries\nCFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64\"\n\nCFLAGS=\"$CFLAGS $CFLAGS_FOR_BUILD $HOST_CFLAGS\"\nCXXFLAGS=\"$CXXFLAGS $CFLAGS_FOR_BUILD $HOST_CFLAGS\"  # polly doesn't look at CFLAGS !\nLDFLAGS=\"$LDFLAGS $LDFLAGS_FOR_BUILD $HOST_LDFLAGS\"\nexport CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD REQUIRES_RTTI=1 ARCH\n\nif [ \"$MINGW\" != \"yes\" ]; then\n    dump \"Building libedit (needed for lldb)...\"\n\n    LIBEDIT_BUILD_OUT=$BUILD_OUT/libedit\n    mkdir -p $LIBEDIT_BUILD_OUT && cd $LIBEDIT_BUILD_OUT\n    fail_panic \"Can't cd into libedit build path: $LIBEDIT_BUILD_OUT\"\n\n    if [ \"$INCREMENTAL\" != \"yes\" -o ! -f $LIBEDIT_BUILD_OUT/.libedit-configured ]; then\n        run $SRC_DIR/libedit/configure \\\n            --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n            --host=$ABI_CONFIGURE_HOST \\\n            --enable-static \\\n            --disable-shared \\\n            --with-pic \\\n            --enable-widec\n        fail_panic \"Can't configure libedit\"\n        touch $LIBEDIT_BUILD_OUT/.libedit-configured\n    fi\n\n    run make -j $NUM_JOBS\n    fail_panic \"Can't build libedit\"\n\n    run make install\n    fail_panic \"Can't install libedit to $TOOLCHAIN_BUILD_PREFIX\"\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # To stop /usr/bin/install -s calls strip on darwin binary\n    export KEEP_SYMBOLS=1\n    # Disable polly for now\n    POLLY=no\nfi\n\nif [ \"$POLLY\" = \"yes\" -a ! -d \"$SRC_DIR/$TOOLCHAIN/polly\" ] ; then\n    dump \"Disable polly because $SRC_DIR/$TOOLCHAIN/polly doesn't exist\"\n    POLLY=no\nfi\n\nEXTRA_CONFIG_FLAGS=\nrm -rf $SRC_DIR/$TOOLCHAIN/llvm/tools/polly\nif [ \"$POLLY\" = \"yes\" ]; then\n    # crate symbolic link\n    ln -s ../../polly $SRC_DIR/$TOOLCHAIN/llvm/tools\n\n    # build polly dependencies\n    unpack_archive \"$GMP_SOURCE\" \"$BUILD_OUT\"\n    fail_panic \"Couldn't unpack $SRC_DIR/gmp/gmp-$GMP_VERSION to $BUILD_OUT\"\n\n    GMP_BUILD_OUT=$BUILD_OUT/gmp-$GMP_VERSION\n    cd $GMP_BUILD_OUT\n    fail_panic \"Couldn't cd into gmp build path: $GMP_BUILD_OUT\"\n\n    OLD_ABI=\"${ABI}\"\n    export ABI=$HOST_GMP_ABI  # needed to build 32-bit on 64-bit host\n    run ./configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --disable-shared \\\n        --disable-nls \\\n        --enable-cxx\n    fail_panic \"Couldn't configure gmp\"\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't compile gmp\"\n    run make install\n    fail_panic \"Couldn't install gmp to $TOOLCHAIN_BUILD_PREFIX\"\n    ABI=\"$OLD_ABI\"\n\n    CLOOG_BUILD_OUT=$BUILD_OUT/cloog\n    mkdir -p $CLOOG_BUILD_OUT && cd $CLOOG_BUILD_OUT\n    fail_panic \"Couldn't create cloog build path: $CLOOG_BUILD_OUT\"\n\n    run $SRC_DIR/$TOOLCHAIN/llvm/tools/polly/utils/cloog_src/configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --with-gmp-prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --disable-shared \\\n        --disable-nls\n    fail_panic \"Couldn't configure cloog\"\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't compile cloog\"\n    run make install\n    fail_panic \"Couldn't install cloog to $TOOLCHAIN_BUILD_PREFIX\"\n\n    EXTRA_CONFIG_FLAGS=\"--with-cloog=$TOOLCHAIN_BUILD_PREFIX --with-isl=$TOOLCHAIN_BUILD_PREFIX\"\n\n    # Allow text relocs when linking LLVMPolly.dylib against statically linked libgmp.a\n    if [ \"$HOST_TAG32\" = \"darwin-x86\" -o \"$DARWIN\" = \"yes\" ]; then   # -a \"$HOST_ARCH\" = \"x86\"\n        LDFLAGS=\"$LDFLAGS -read_only_relocs suppress\"\n        export LDFLAGS\n    fi\nfi # POLLY = yes\n\n# configure the toolchain\ndump \"Configure: $TOOLCHAIN toolchain build\"\nLLVM_BUILD_OUT=$BUILD_OUT/llvm\nmkdir -p $LLVM_BUILD_OUT && cd $LLVM_BUILD_OUT\nfail_panic \"Couldn't cd into llvm build path: $LLVM_BUILD_OUT\"\n\nBINUTILS_VERSION=$(get_default_binutils_version_for_llvm $TOOLCHAIN)\n\nif [ \"$MINGW\" != \"yes\" ]; then\n    EXTRA_CONFIG_FLAGS=\"$EXTRA_CONFIG_FLAGS --with-python=$PYTHON\"\nfi\n\nif [ \"$INCREMENTAL\" != \"yes\" -o ! -f $LLVM_BUILD_OUT/.llvm-configured ]; then\n    run $SRC_DIR/$TOOLCHAIN/llvm/configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL \\\n        --enable-targets=arm,mips,x86,aarch64 \\\n        --enable-optimized \\\n        --with-binutils-include=$SRC_DIR/binutils/binutils-$BINUTILS_VERSION/include \\\n        --disable-lldb \\\n        --disable-debugserver \\\n        $EXTRA_CONFIG_FLAGS\n    fail_panic \"Couldn't configure llvm toolchain\"\n    touch $LLVM_BUILD_OUT/.llvm-configured\nfi\n\n# build llvm/clang\ndump \"Building : llvm toolchain [this can take a long time].\"\ncd $LLVM_BUILD_OUT\nrun make -j$NUM_JOBS $MAKE_FLAGS\nfail_panic \"Couldn't compile llvm toolchain\"\n\nif [ \"$CHECK\" = \"yes\" -a \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ] ; then\n    # run the regression test\n    dump \"Running  : llvm toolchain regression test\"\n    cd $LLVM_BUILD_OUT\n    run make check-all\n    fail_warning \"Couldn't pass all llvm regression test\"  # change to fail_panic later\n    if [ \"$POLLY\" = \"yes\" ]; then\n        dump \"Running  : polly toolchain regression test\"\n        cd $LLVM_BUILD_OUT\n        run make polly-test -C tools/polly/test\n        fail_warning \"Couldn't pass all polly regression test\"  # change to fail_panic later\n    fi\nfi\n\n# install the toolchain to its final location\ndump \"Install  : llvm toolchain binaries\"\ncd $LLVM_BUILD_OUT && run make install $MAKE_FLAGS\nfail_panic \"Couldn't install llvm toolchain to $TOOLCHAIN_BUILD_PREFIX\"\n\n# copy arm_neon_x86.h from GCC\nGCC_SRC_DIR=$SRC_DIR/gcc/gcc-$DEFAULT_GCC32_VERSION\ncp -a $GCC_SRC_DIR/gcc/config/i386/arm_neon.h $TOOLCHAIN_BUILD_PREFIX/lib/clang/$LLVM_VERSION/include/arm_neon_x86.h\n\n# Since r156448, llvm installs a separate llvm-config-host when cross-compiling. Use llvm-config-host if this\n# exists otherwise llvm-config.\n# Note, llvm-config-host should've really been called llvm-config-build and the following changes fix this by\n# doing this rename and also making a proper llvm-config-host;\n# https://android-review.googlesource.com/#/c/64261/\n# https://android-review.googlesource.com/#/c/64263/\n# .. with these fixes in place Wine is not needed for Windows cross\n# To my mind, llvm-config-host is a misnomer and it should be llvm-config-build.\nLLVM_CONFIG=$TOOLCHAIN_BUILD_PREFIX/bin/llvm-config\nif [ -f $TOOLCHAIN_BUILD_PREFIX/bin/llvm-config-host ] ; then\n    LLVM_CONFIG=$TOOLCHAIN_BUILD_PREFIX/bin/llvm-config-host\nfi\n\n# remove redundant bits\nrm -rf $TOOLCHAIN_BUILD_PREFIX/docs\nrm -rf $TOOLCHAIN_BUILD_PREFIX/include\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/*.a\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/*.la\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/pkgconfig\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/lib[cp]*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/lib[cp]*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/B*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/B*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/LLVMH*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/LLVMH*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/share\n\nUNUSED_LLVM_EXECUTABLES=\"\nbugpoint c-index-test clang-check clang-format clang-tblgen lli llvm-bcanalyzer\nllvm-config llvm-config-host llvm-cov llvm-diff llvm-dsymutil llvm-dwarfdump llvm-extract llvm-ld\nllvm-mc llvm-nm llvm-mcmarkup llvm-objdump llvm-prof llvm-ranlib llvm-readobj llvm-rtdyld\nllvm-size llvm-stress llvm-stub llvm-symbolizer llvm-tblgen llvm-vtabledump macho-dump cloog\nllvm-vtabledump lli-child-target not count FileCheck llvm-profdata obj2yaml yaml2obj verify-uselistorder\"\n\nfor i in $UNUSED_LLVM_EXECUTABLES; do\n    rm -f $TOOLCHAIN_BUILD_PREFIX/bin/$i\n    rm -f $TOOLCHAIN_BUILD_PREFIX/bin/$i.exe\ndone\n\ntest -z \"$STRIP\" && STRIP=strip\nfind $TOOLCHAIN_BUILD_PREFIX/bin -maxdepth 1 -type f -exec $STRIP {} \\;\n# Note that MacOSX strip generate the follow error on .dylib:\n# \"symbols referenced by indirect symbol table entries that can't be stripped \"\nfind $TOOLCHAIN_BUILD_PREFIX/lib -maxdepth 1 -type f \\( -name \"*.dll\" -o -name \"*.so\" \\) -exec $STRIP {} \\;\n\n# For now, le64-tools is just like le32 ones\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-link${HOST_EXE}\" ]; then\n    run ln -s ndk-link${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-link${HOST_EXE}\n    run ln -s ndk-link${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-link${HOST_EXE}\nfi\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-strip${HOST_EXE}\" ]; then\n    run ln -s ndk-strip${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-strip${HOST_EXE}\n    run ln -s ndk-strip${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-strip${HOST_EXE}\nfi\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-translate${HOST_EXE}\" ]; then\n    run ln -s ndk-translate${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-translate${HOST_EXE}\n    run ln -s ndk-translate${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-translate${HOST_EXE}\nfi\n\n# install script\nif [ \"$USE_PYTHON_BC2NATIVE\" != \"yes\" ]; then\n    # Remove those intermediate cpp\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.cpp\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.c\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.h\nelse\n    cp -p \"$SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/ndk-bc2native.py\" \"$TOOLCHAIN_BUILD_PREFIX/bin/\"\nfi\n\nfor LLDBFILE in $(ls -1 $TOOLCHAIN_BUILD_PREFIX/bin/lldb* 2>/dev/null); do\n    echo $LLDBFILE | grep -q '\\.bin$' && continue\n    test -e ${LLDBFILE}.bin && continue\n\n    mv -f $LLDBFILE ${LLDBFILE}.bin\n    fail_panic \"Can't mv $LLDBFILE to ${LLDBFILE}.bin\"\n\n    cat >$LLDBFILE <<EOF\n#!/bin/sh\n\nHOST_TAG=\\`dirname \\$0\\`/..\nHOST_TAG=\\`cd \\$HOST_TAG && pwd\\`\nHOST_TAG=\\`basename \\$HOST_TAG\\`\n\nPYTHONHOME=\\`dirname \\$0\\`/../../../../../prebuilt/\\$HOST_TAG\nPYTHONHOME=\\`cd \\$PYTHONHOME && pwd\\`\nexport PYTHONHOME\n\nexec \\`dirname \\$0\\`/$(basename $LLDBFILE).bin \"\\$@\"\nEOF\n    fail_panic \"Can't generate $LLDBFILE\"\n\n    chmod +x $LLDBFILE\n    fail_panic \"Can't chmod +x $LLDBFILE\"\ndone\n\n# copy to toolchain path\nrun copy_directory \"$TOOLCHAIN_BUILD_PREFIX\" \"$TOOLCHAIN_PATH\"\n\n# create analyzer/++ scripts\nABIS=$PREBUILT_ABIS\n# temp hack before 64-bit ABIs are part of PREBUILT_ABIS\nif [ \"$ABIS\" != \"${ABIS%%64*}\" ]; then\n    ABIS=\"$PREBUILT_ABIS arm64-v8a x86_64 mips64\"\nfi\nABIS=$ABIS\nfor ABI in $ABIS; do\n    ANALYZER_PATH=\"$TOOLCHAIN_PATH/bin/$ABI\"\n    ANALYZER=\"$ANALYZER_PATH/analyzer\"\n    mkdir -p \"$ANALYZER_PATH\"\n    case \"$ABI\" in\n      armeabi)\n          LLVM_TARGET=armv5te-none-linux-androideabi\n          ;;\n      armeabi-v7a|armeabi-v7a-hard)\n          LLVM_TARGET=armv7-none-linux-androideabi\n          ;;\n      arm64-v8a)\n          LLVM_TARGET=aarch64-none-linux-android\n          ;;\n      x86)\n          LLVM_TARGET=i686-none-linux-android\n          ;;\n      x86_64)\n          LLVM_TARGET=x86_64-none-linux-android\n          ;;\n      mips|mips32r6)\n          LLVM_TARGET=mipsel-none-linux-android\n          ;;\n      mips64)\n          LLVM_TARGET=mips64el-none-linux-android\n          ;;\n      *)\n        dump \"ERROR: Unsupported NDK ABI: $ABI\"\n        exit 1\n    esac\n\n    cat > \"${ANALYZER}\" <<EOF\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/../clang -target $LLVM_TARGET \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/../clang \"\\$@\"\nfi\nEOF\n    cat > \"${ANALYZER}++\" <<EOF\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/../clang++ -target $LLVM_TARGET \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/../clang++ \"\\$@\"\nfi\nEOF\n    chmod 0755 \"${ANALYZER}\" \"${ANALYZER}++\"\n\n    if [ -n \"$HOST_EXE\" ] ; then\n        cat > \"${ANALYZER}.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\..\\\\clang${HOST_EXE} -target $LLVM_TARGET %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\..\\\\clang${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n        cat > \"${ANALYZER}++.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\..\\\\clang++${HOST_EXE} -target $LLVM_TARGET %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\..\\\\clang++${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n        chmod 0755 \"${ANALYZER}.cmd\" \"${ANALYZER}++.cmd\"\n    fi\ndone\n\n# copy SOURCES file if present\nif [ -f \"$SRC_DIR/SOURCES\" ]; then\n    cp \"$SRC_DIR/SOURCES\" \"$TOOLCHAIN_PATH/SOURCES\"\nfi\n\n# check GLIBC/GLBICXX symbols\nif [ \"$HOST_OS\" = \"linux\" ]; then\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    $ANDROID_NDK_ROOT/build/instruments/check-glibc.sh $NDK_DIR/$SUBDIR\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\ndump \"Done.\"\nif [ -z \"$OPTION_BUILD_OUT\" -a \"$INCREMENTAL\" != \"yes\" ] ; then\n    rm -rf $BUILD_OUT\nfi\n"
  },
  {
    "path": "build/instruments/build-mingw64-toolchain.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Rebuild the mingw64 cross-toolchain from scratch\n#\n# See --help for usage example.\n\nPROGNAME=$(basename $0)\nPROGDIR=$(dirname $0)\nPROGDIR=$(cd $PROGDIR && pwd)\n\nHELP=\nVERBOSE=1\n\n# This will be reset later.\nLOG_FILE=/dev/null\n\npanic ()\n{\n    1>&2 echo \"Error: $@\"\n    exit 1\n}\n\nfail_panic ()\n{\n    if [ $? != 0 ]; then\n        panic \"$@\"\n    fi\n}\n\nvar_value ()\n{\n    eval echo \\\"$1\\\"\n}\n\nvar_append ()\n{\n    local _varname=$1\n    local _varval=$(var_value $_varname)\n    shift\n    if [ -z \"$_varval\" ]; then\n        eval $_varname=\\\"$*\\\"\n    else\n        eval $_varname=\\$$_varname\\\" $*\\\"\n    fi\n}\n\nrun ()\n{\n    if [ \"$VERBOSE\" -gt 0 ]; then\n        echo \"COMMAND: >>>> $@\" >> $LOG_FILE\n    fi\n    if [ \"$VERBOSE\" -gt 1 ]; then\n        echo \"COMMAND: >>>> $@\"\n    fi\n    if [ \"$VERBOSE\" -gt 1 ]; then\n        \"$@\"\n    else\n       \"$@\" > /dev/null 2>&1\n    fi\n}\n\nlog ()\n{\n    if [ \"$LOG_FILE\" ]; then\n        echo \"$@\" >> $LOG_FILE\n    fi\n    if [ \"$VERBOSE\" -gt 0 ]; then\n        echo \"$@\"\n    fi\n}\n\n# For now, only tested on Linux\nOS=$(uname -s)\nEXEEXT= # executable extension\ncase $OS in\n    Linux) OS=linux;;\n    Darwin) OS=darwin;;\n    CYGWIN*|*_NT-*) OS=windows;\n        if [ \"$OSTYPE\" = cygwgin ]; then\n            OS=cygwin\n        fi\n        EXEEXT=.exe\n        ;;\nesac\n\nARCH=$(uname -m)\ncase $ARCH in\n    i?86) ARCH=i686;;\n    amd64) ARCH=x86_64;;\nesac\n\ncase $OS in\n    linux)\n        NUM_CORES=$(grep -c -e '^processor' /proc/cpuinfo)\n        ;;\n    darwin|freebsd)\n        NUM_CORES=`sysctl -n hw.ncpu`\n        ;;\n    windows|cygwin)\n        NUM_CORES=$NUMBER_OF_PROCESSORS\n        ;;\n    *)  # let's play safe here\n        NUM_CORES=1\n        ;;\nesac\n\n# Warn our users, because the script probably fails on anything but Linux\n# at that point (e.g. there are strange libtool build breakages on darwin).\nif [ \"$OS\" != \"linux\" ]; then\n    echo \"WARNING: WARNING: WARNING: THIS SCRIPT PROBABLY ONLY WORKS ON LINUX!!\"\nfi\n\n# GMP moving home?\n# GMP_VERSION=5.1.0\n# GMP_URL=ftp://ftp.gmplib.org/pub/gmp-$GMP_VERSION/\n# ..but the old one is still there:\nGMP_VERSION=5.0.5\nGMP_URL=http://ftp.gnu.org/gnu/gmp/\n\nMPFR_VERSION=3.1.1\nMPC_VERSION=1.0.1\nBINUTILS_VERSION=2.24\nGCC_VERSION=4.8.3\n\n# Need at least revision 5166\n# For reference, I've built a working NDK with 5445\n# (latest as of Sun Feb 3 2013 is 5578)\nMINGW_W64_VERSION=svn@5861\n\nJOBS=$(( $NUM_CORES * 2 ))\n\n\nHOST_BINPREFIX=\nTARGET_ARCH=x86_64\nTARGET_MULTILIBS=true  # not empty to enable multilib\nPACKAGE_DIR=\nFORCE_ALL=\nFORCE_BUILD=\nCLEANUP=\n\nTEMP_DIR=$TMPDIR/build-mingw64-toolchain-$USER\n\nfor opt; do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case $opt in\n        -h|-?|--help) HELP=true;;\n        --verbose) VERBOSE=$(( $VERBOSE + 1 ));;\n        --quiet) VERBOSE=$(( $VERBOSE - 1 ));;\n        --binprefix=*) HOST_BINPREFIX=$optarg;;\n        -j*|--jobs=*) JOBS=$optarg;;\n        --target-arch=*) TARGET_ARCH=$optarg;;\n        --no-multilib) TARGET_MULTILIBS=\"\";;\n        --force-build) FORCE_BUILD=true;;\n        --force-all) FORCE_ALL=true;;\n        --work-dir=*) TEMP_DIR=$optarg;;\n        --package-dir=*) PACKAGE_DIR=$optarg;;\n        --cleanup) CLEANUP=true;;\n        --gcc-version=*) GCC_VERSION=$optarg;;\n        --binutils-version=*) BINUTILS_VERSION=$optarg;;\n        --gmp-version=*) GMP_VERSION=$optarg;;\n        --mpfr-version=*) MPFR_VERSION=$optarg;;\n        --mpc-version=*) MPC_VERSION=$optarg;;\n        --mingw-version=*) MINGW_W64_VERSION=$optarg;;\n        -*) panic \"Unknown option '$opt', see --help for list of valid ones.\";;\n        *) panic \"This script doesn't take any parameter, see --help for details.\";;\n    esac\ndone\n\n\nif [ \"$HELP\" ]; then\n    cat <<EOF\nUsage: $PROGNAME [options]\n\nThis program is used to rebuild a mingw64 cross-toolchain from scratch.\n\nIt uses your host 'gcc' by default to generate a cross-toolchain named\neither x86_64-w64-mingw32 or i686-w64-mingw32, depending on your compiler's\ntarget bitness. For example:\n\n    /path/to/build-mingw64-toolchain.sh\n\nAll toolchain binaries can generate both Win32 and Win64 executables.\nThe default target is Win64, but you can change this to Win32 by using\nthe '--target-arch=i686' option. Otherwise, use -m32 or -m64 at compile/link\ntime to select a specific target.\n\nIt is possible to use --binprefix=<prefix> to specify an alternative host\ntoolchain prefix, e.g. <prefix>-gcc to compile. For example, to generate\n64-bit binaries that can run on older Linux distributions, using the Android\nSDK's compatibility Linux toolchain, one can do the following:\n\n    SDK_TOOLCHAIN=<some-dir>\n    PREBUILTS=https://android.googlesource.com/platform/prebuilts\n    git clone \\$PREBUILTS/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 \\\\\n        \\$SDK_TOOLCHAIN\n    PATH=\\$SDK_TOOLCHAIN/bin:\\$PATH \\\\\n    /path/to/build-mingw64-toolchain.sh --binprefix=x86_64-linux\n\nIn the example above, the script will use 'x86_64-linux-gcc' and related\ntools to build the final binaries.\n\nIt is recommended to use --package-dir=<path> to generate tarballs of the\ngenerated toolchains under <path>/, for easier redistribution.\n\nValid options:\n  -h|-?|--help                 Print this message.\"\n  --verbose                    Increase verbosity.\"\n  --quiet                      Decrease verbosity.\"\n  --gcc-version=<version>      Select gcc version [$GCC_VERSION].\"\n  --binutil-version=<version>  Select binutils version [$BINUTILS_VERSION].\"\n  --gmp-version=<version>      Select libgmp version [$GMP_VERSION].\"\n  --mpfr-version=<version>     Select libmpfr version [$MPFR_VERSION].\"\n  --mpc-version=<version>      Select libmpc version [$MPC_VERSION].\"\n  --mingw-version=<version>    Select mingw-w64 version [$MINGW_W64_VERSION].\"\n  --jobs=<num>                 Run <num> build tasks in parallel [$JOBS].\"\n  -j<num>                      Same as --jobs=<num>.\"\n  --binprefix=<prefix>         Specify bin prefix for host toolchain.\"\n  --no-multilib                Disable multilib toolchain build.\"\n  --target-arch=<arch>         Select default target architecture [$TARGET_ARCH].\"\n  --force-all                  Redo everything from scratch.\"\n  --force-build                Force a rebuild (keep sources).\"\n  --cleanup                    Remove all temp files after build.\"\n  --work-dir=<path>            Specify work/build directory [$TEMP_DIR].\"\n  --package-dir=<path>         Package toolchain to directory.\"\n\nEOF\n    exit 0\nfi\n\nif [ \"$CLEANUP\" ]; then\n    if [ -z \"$PACKAGE_DIR\" ]; then\n        panic \"You should only use --cleanup with --package-dir=<path> !\".\n    fi\nfi\n\nBUILD_TAG64=x86_64-linux-gnu\nBUILD_TAG32=i686-linux-gnu\n\n# We don't want debug executables\nBUILD_CFLAGS=\"-O2 -fomit-frame-pointer -s\"\nBUILD_LDFLAGS=\"\"\n\n# On Darwin, we want to use the 10.4 / 10.5 / 10.6 SDKs to generate binaries\n# that work on \"old\" platform releases.\nif [ \"$OS\" = darwin ]; then\n    # Use the check for the availability of a compatibility SDK in Darwin\n    # this can be used to generate binaries compatible with either Tiger or\n    # Leopard.\n    #\n    # $1: SDK root path\n    # $2: MacOS X minimum version (e.g. 10.4)\n    check_darwin_sdk ()\n    {\n        if [ -d \"$1\" ] ; then\n            var_append BUILD_CFLAGS \"-isysroot $1 -mmacosx-version-min=$2 -DMAXOSX_DEPLOYEMENT_TARGET=$2\"\n            var_append BUILD_LDFLAGS \"-Wl,-syslibroot,$sdk -mmacosx-version-min=$2\"\n            return 0  # success\n        fi\n        return 1\n    }\n\n    if check_darwin_sdk /Developer/SDKs/MacOSX10.4.sdku 10.4; then\n        log \"Generating Tiger-compatible binaries!\"\n    elif check_darwin_sdk /Developer/SDKs/MacOSX10.5.sdk 10.5; then\n        log \"Generating Leopard-compatible binaries!\"\n    elif check_darwin_sdk /Developer/SDKs/MacOSX10.6.sdk 10.6; then\n        log \"Generating Snow Leopard-compatible binaries!\"\n    else\n        osx_version=`sw_vers -productVersion`\n        log \"Generating $osx_version-compatible binaries!\"\n    fi\nfi\n\nmkdir -p $TEMP_DIR\nif [ \"$FORCE_ALL\" ]; then\n    log \"Cleaning up work directory...\"\n    rm -rf $TEMP_DIR/*\nfi\n\nLOG_FILE=$TEMP_DIR/build.log\nrm -f $LOG_FILE && touch $LOG_FILE\nif [ \"$VERBOSE\" -eq 1 ]; then\n    echo  \"To follow build, use in another terminal: tail -F $LOG_FILE\"\nfi\n\ncase $TARGET_ARCH in\n    x86_64) TARGET_BITS=64;;\n    i686) TARGET_BITS=32;;\n    *) panic \"Invalid --target parameter. Valid values are: x86_64 i686\";;\nesac\nTARGET_TAG=$TARGET_ARCH-w64-mingw32\nlog \"Target arch: $TARGET_TAG\"\nlog \"Target bits: $TARGET_BITS\"\n\n# Determine bitness of host architecture\nPROBE_CC=${CC:-gcc}\nif [ -n \"$HOST_BINPREFIX\" ]; then\n    # If $HOST_BINPREFIX is a directory but not ends with '/', append '/'.\n    # Otherwise, append '-'.\n    if [ -d \"$HOST_BINPREFIX\" ] ; then\n        if [ -n \"${HOST_BINPREFIX##*/}\" ] ; then\n\t    HOST_BINPREFIX=\"${HOST_BINPREFIX}/\"\n\tfi\n    else\n        HOST_BINPREFIX=\"${HOST_BINPREFIX}-\"\n    fi\n    PROBE_CC=${HOST_BINPREFIX}gcc\nfi\necho \"Using GCC: $PROBE_CC\"\necho \"int main() { return 0; }\" > $TEMP_DIR/test-host-cc.c\n$PROBE_CC -c $TEMP_DIR/test-host-cc.c -o $TEMP_DIR/test-host-cc.o > /dev/null\nfail_panic \"Host compiler doesn't work: $PROBE_CC\"\n\nfile $TEMP_DIR/test-host-cc.o | grep -q -e \"x86[_-]64\"\nif [ $? != 0 ]; then\n    log \"Host compiler generates 32-bit code: $PROBE_CC\"\n    HOST_ARCH=i686\n    HOST_BITS=32\nelse\n    log \"Host compiler generates 64-bit code: $PROBE_CC\"\n    HOST_ARCH=x86_64\n    HOST_BITS=64\nfi\n\ncase $OS in\n    linux) HOST_TAG=$HOST_ARCH-linux-gnu;;\n    darwin) HOST_TAG=$HOST_ARCH-apple-darwinx11;;\n    cygwin) HOST_TAG=$HOST_ARCH-pc-cygwin;;\n    *) panic \"Unsupported host operating system!\"\nesac\nlog \"Host arch: $HOST_TAG\"\n\ndownload_package ()\n{\n    # Assume the packages are already downloaded under $ARCHIVE_DIR\n    local PKG_URL=$1\n    local PKG_NAME=$(basename $PKG_URL)\n\n    case $PKG_NAME in\n        *.tar.bz2)\n            PKG_BASENAME=${PKG_NAME%%.tar.bz2}\n            ;;\n        *.tar.gz)\n            PKG_BASENAME=${PKG_NAME%%.tar.gz}\n            ;;\n        *)\n            panic \"Unknown archive type: $PKG_NAME\"\n    esac\n\n    if [ ! -f \"$ARCHIVE_DIR/$PKG_NAME\" ]; then\n        log \"Downloading $PKG_URL...\"\n        (cd $ARCHIVE_DIR && run curl -L -o \"$PKG_NAME\" \"$PKG_URL\")\n        fail_panic \"Can't download '$PKG_URL'\"\n    fi\n\n    MD5SUM=$(md5sum $ARCHIVE_DIR/$PKG_NAME | cut -d\" \" -f1)\n    echo \"$MD5SUM  $PKG_URL\" >> $INSTALL_DIR/README\n\n    if [ ! -d \"$SRC_DIR/$PKG_BASENAME\" ]; then\n        log \"Uncompressing $PKG_URL into $SRC_DIR\"\n        case $PKG_NAME in\n            *.tar.bz2)\n                run tar xjf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR\n                ;;\n            *.tar.gz)\n                run tar xzf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR\n                ;;\n            *)\n                panic \"Unknown archive type: $PKG_NAME\"\n                ;;\n        esac\n        fail_panic \"Can't uncompress $ARCHIVE_DIR/$PKG_NAME\"\n    fi\n}\n\n# Download and unpack source packages from official sites\nARCHIVE_DIR=$TEMP_DIR/archive\nSRC_DIR=$TEMP_DIR/src\nSTAMP_DIR=$TEMP_DIR/timestamps\n\nmkdir -p $ARCHIVE_DIR\nmkdir -p $SRC_DIR\nmkdir -p $STAMP_DIR\n\nINSTALL_DIR=$TEMP_DIR/install-$HOST_TAG/$TARGET_TAG\nBUILD_DIR=$TEMP_DIR/build-$HOST_TAG\n\nif [ \"$FORCE_BUILD\" ]; then\n    rm -f $STAMP_DIR/*\n    rm -rf $INSTALL_DIR\n    rm -rf $BUILD_DIR\nfi\n\n# Make temp install directory\nmkdir -p $INSTALL_DIR\nmkdir -p $BUILD_DIR\n\n# Copy this script\ncp $0 $INSTALL_DIR/ &&\necho \"This file has been automatically generated on $(date) with the following command:\" > $INSTALL_DIR/README &&\necho \"$PROGNAME $@\" >> $INSTALL_DIR/README &&\necho \"\" >> $INSTALL_DIR/README &&\necho \"The MD5 hashes for the original sources packages are:\" >> $INSTALL_DIR/README\nfail_panic \"Could not copy script to installation directory.\"\n\ndownload_package ${GMP_URL}gmp-${GMP_VERSION}.tar.bz2\ndownload_package http://ftp.gnu.org/gnu/mpfr/mpfr-$MPFR_VERSION.tar.bz2\ndownload_package http://www.multiprecision.org/mpc/download/mpc-$MPC_VERSION.tar.gz\ndownload_package http://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.bz2\ndownload_package http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.bz2\n\nPREFIX_FOR_TARGET=$INSTALL_DIR/$TARGET_TAG\nWITH_WIDL=$INSTALL_DIR/bin\nMINGW_W64_REVISION=\nMINGW_W64_VERSION_NO_REV=$(echo $MINGW_W64_VERSION | awk 'BEGIN { FS=\"@\" }; { print $1 }')\nif [ \"$MINGW_W64_VERSION_NO_REV\" = \"svn\" ];  then\n    MINGW_W64_REVISION=$(echo $MINGW_W64_VERSION | awk 'BEGIN { FS=\"@\" }; { print $2 }')\n    if [ ! -z \"$MINGW_W64_REVISION\" ] ; then\n        if [ $MINGW_W64_REVISION -lt 5186 ] ; then\n            PREFIX_FOR_TARGET=$INSTALL_DIR\n        fi\n        if [ $MINGW_W64_REVISION -lt 5252 ] ; then\n            WITH_WIDL=mingw-w64-widl\n        elif [ $MINGW_W64_REVISION -lt 5258 ] ; then\n            WITH_WIDL=$TARGET_TAG-widl\n        fi\n        MINGW_W64_REVISION2=-r$MINGW_W64_REVISION\n        MINGW_W64_REVISION=@${MINGW_W64_REVISION}\n    fi\n    MINGW_W64_SRC=$SRC_DIR/mingw-w64-svn$MINGW_W64_REVISION2\n    MINGW_W64_VERSION=svn\nfi\n\nif [ -z \"$MINGW_W64_REVISION\" ] ; then\n    # Released versions of MinGW-w64 don't provide easily accessible information\n    # about the svn revision which this script needs to know.\n    fail_panic \"Building MinGW-w64 toolchain requires specifying an svn version\"\nfi\n\nif [ ! -d $MINGW_W64_SRC ]; then\n    MINGW64_SVN_URL=https://svn.code.sf.net/p/mingw-w64/code/trunk$MINGW_W64_REVISION\n    echo \"Checking out $MINGW64_SVN_URL $MINGW_W64_SRC\"\n    run svn co $MINGW64_SVN_URL $MINGW_W64_SRC\n    PATCHES_DIR=\"$PROGDIR/toolchain-patches-host/mingw-w64\"\n    if [ -d \"$PATCHES_DIR\" ] ; then\n        PATCHES=$(find \"$PATCHES_DIR\" -name \"*.patch\" | sort)\n        for PATCH in $PATCHES; do\n            echo \"Patching mingw-w64-$MINGW_W64_REVISION with $PATCH\"\n            (cd $MINGW_W64_SRC && run patch -p0 < $PATCH)\n        done\n    fi\nfi\n\n# Let's generate the licenses/ directory\nLICENSES_DIR=$INSTALL_DIR/licenses/\nmkdir -p $LICENSES_DIR\nif [ ! -f $STAMP_DIR/licenses ]; then\n    LICENSE_FILES=$(cd $SRC_DIR && find . -name \"COPYING*\")\n    # Copy all license files to $LICENSES_DIR\n    (tar cf - -C $SRC_DIR $LICENSE_FILES) | (tar xf - -C $LICENSES_DIR)\n    touch $STAMP_DIR/licenses\nfi\n\nsetup_build_env ()\n{\n    local BINPREFIX=$1\n\n    if [ \"$BINPREFIX\" ]; then\n        CC=${BINPREFIX}gcc\n        CXX=${BINPREFIX}g++\n        LD=${BINPREFIX}ld\n        AS=${BINPREFIX}as\n        AR=${BINPREFIX}ar\n        RANLIB=${BINPREFIX}ranlib\n        STRIP=${BINPREFIX}strip\n        export CC CXX LD AS AR RANLIB STRIP\n    elif [ \"$OS\" = darwin ]; then\n        # Needed on OS X otherwise libtool will try to use gcc and $BUILD_CFLAGS\n        LD=ld\n    fi\n\n    export CFLAGS=\"$BUILD_CFLAGS\"\n    export CXXFLAGS=\"$BUILD_CFLAGS\"\n    export LDFLAGS=\"$BUILD_LDFLAGS\"\n}\n\nsetup_install_env ()\n{\n    export PATH=$INSTALL_DIR/bin:$PATH\n}\n\nbuild_host_package ()\n{\n    local PKGNAME=$1\n    shift\n\n    if [ ! -f $STAMP_DIR/$PKGNAME ]; then\n        (\n            mkdir -p $BUILD_DIR/$PKGNAME &&\n            cd $BUILD_DIR/$PKGNAME &&\n            setup_build_env $HOST_BINPREFIX &&\n            log \"$PKGNAME: Configuring\" &&\n            run $SRC_DIR/$PKGNAME/configure \"$@\"\n            fail_panic \"Can't configure $PKGNAME !!\"\n\n            log \"$PKGNAME: Building\" &&\n            run make -j$JOBS\n            fail_panic \"Can't build $PKGNAME !!\"\n\n            log \"$PKGNAME: Installing\" &&\n            run make install\n            fail_panic \"Can't install $PKGNAME\"\n        ) || exit 1\n        touch $STAMP_DIR/$PKGNAME\n    fi\n}\n\nexport ABI=$HOST_BITS\nBASE_HOST_OPTIONS=\"--prefix=$INSTALL_DIR --disable-shared\"\nbuild_host_package gmp-$GMP_VERSION $BASE_HOST_OPTIONS\nvar_append BASE_HOST_OPTIONS \"--with-gmp=$INSTALL_DIR\"\n\nbuild_host_package mpfr-$MPFR_VERSION $BASE_HOST_OPTIONS\nvar_append BASE_HOST_OPTIONS \"--with-mpfr=$INSTALL_DIR\"\n\nbuild_host_package mpc-$MPC_VERSION $BASE_HOST_OPTIONS\nvar_append BASE_HOST_OPTIONS \"--with-mpc=$INSTALL_DIR\"\n\nBINUTILS_CONFIGURE_OPTIONS=$BASE_HOST_OPTIONS\nvar_append BINUTILS_CONFIGURE_OPTIONS \"--target=$TARGET_TAG --disable-nls\"\nif [ \"$TARGET_MULTILIBS\" ]; then\n    var_append BINUTILS_CONFIGURE_OPTIONS \"--enable-targets=x86_64-w64-mingw32,i686-w64-mingw32\"\nfi\n\nvar_append BINUTILS_CONFIGURE_OPTIONS \"--with-sysroot=$INSTALL_DIR\"\n\nbuild_host_package binutils-$BINUTILS_VERSION $BINUTILS_CONFIGURE_OPTIONS\n\nbuild_mingw_tools ()\n{\n    local PKGNAME=$1\n    echo \"$STAMP_DIR/$PKGNAME\"\n    if [ ! -f \"$STAMP_DIR/$PKGNAME\" ]; then\n        (\n            mkdir -p $BUILD_DIR/$PKGNAME &&\n            cd $BUILD_DIR/$PKGNAME &&\n            log \"$PKGNAME: Configuring\" &&\n            run $MINGW_W64_SRC/mingw-w64-tools/widl/configure --prefix=$INSTALL_DIR --target=$TARGET_TAG\n            fail_panic \"Can't configure mingw-64-tools\"\n            log \"$PKGNAME: Installing\" &&\n            run make install -j$JOBS\n        ) || exit 1\n        touch $STAMP_DIR/$PKGNAME\n    fi\n}\n\n# Install the right mingw64 headers into the sysroot\nbuild_mingw_headers ()\n{\n    local PKGNAME=$1\n    if [ ! -f \"$STAMP_DIR/$PKGNAME\" ]; then\n        (\n            # If --with-widl only identifies the program name (svn version dependent)...\n            if [ $(basename \"$WITH_WIDL\") = \"$WITH_WIDL\" ] ; then\n                # ...then need to add the right path too.\n                export PATH=$PATH:$INSTALL_DIR/bin\n            fi\n            fail_panic \"Can't find widl\"\n            mkdir -p $BUILD_DIR/$PKGNAME &&\n            cd $BUILD_DIR/$PKGNAME &&\n            log \"$PKGNAME: Configuring\" &&\n            run $MINGW_W64_SRC/mingw-w64-headers/configure --prefix=$PREFIX_FOR_TARGET --host=$TARGET_TAG \\\n                --build=$HOST_TAG --with-widl=$WITH_WIDL --enable-sdk=all\n            fail_panic \"Can't configure mingw-64-headers\"\n\n            run make\n            log \"$PKGNAME: Installing\" &&\n            run make install -j$JOBS &&\n            run cd $INSTALL_DIR &&\n            run ln -s $TARGET_TAG mingw &&\n            run cd $INSTALL_DIR/mingw &&\n            run ln -s lib lib$TARGET_BITS\n            fail_panic \"Can't install mingw-64-headers\"\n        ) || exit 1\n        touch $STAMP_DIR/$PKGNAME\n    fi\n}\n\n# Slightly different from build_host_package because we need to call\n# 'make all-gcc' and 'make install-gcc' as a special case.\n#\nbuild_core_gcc ()\n{\n    local PKGNAME=$1\n    shift\n\n    if [ ! -f \"$STAMP_DIR/core-$PKGNAME\" ]; then\n        (\n            mkdir -p $BUILD_DIR/$PKGNAME &&\n            cd $BUILD_DIR/$PKGNAME &&\n            setup_build_env $HOST_BINPREFIX &&\n            log \"core-$PKGNAME: Configuring\" &&\n            run $SRC_DIR/$PKGNAME/configure \"$@\"\n            fail_panic \"Can't configure $PKGNAME !!\"\n\n            log \"core-$PKGNAME: Building\" &&\n            run make -j$JOBS all-gcc\n            fail_panic \"Can't build $PKGNAME !!\"\n\n            log \"core-$PKGNAME: Installing\" &&\n            run make -j$JOBS install-gcc\n            fail_panic \"Can't install $PKGNAME\"\n        ) || exit 1\n        touch $STAMP_DIR/core-$PKGNAME\n    fi\n}\n\n\n# Build and install the C runtime files needed by the toolchain\nbuild_mingw_crt ()\n{\n    local PKGNAME=$1\n    shift\n\n    if [ ! -f $STAMP_DIR/$PKGNAME ]; then\n        (\n            mkdir -p $BUILD_DIR/$PKGNAME &&\n            cd $BUILD_DIR/$PKGNAME &&\n            export PATH=$INSTALL_DIR/bin:$PATH\n            log \"$PKGNAME: Configuring\" &&\n            run $MINGW_W64_SRC/mingw-w64-crt/configure \"$@\"\n            fail_panic \"Can't configure $PKGNAME !!\"\n\n            log \"$PKGNAME: Building\" &&\n            run make -j$JOBS\n            fail_panic \"Can't build $PKGNAME !!\"\n\n            log \"$PKGNAME: Installing\" &&\n            run make -j$JOBS install\n            fail_panic \"Can't install $PKGNAME\"\n        ) || exit 1\n        touch $STAMP_DIR/$PKGNAME\n    fi\n}\n\n\nbuild_libgcc ()\n{\n    local PKGNAME=$1\n    shift\n\n    if [ ! -f \"$STAMP_DIR/libgcc-$PKGNAME\" ]; then\n        (\n            # No configure step here! We're resuming work that was started\n            # in build_core_gcc.\n            cd $BUILD_DIR/$PKGNAME &&\n            setup_build_env $HOST_BINPREFIX &&\n            log \"libgcc-$PKGNAME: Building\" &&\n            run make -j$JOBS\n            fail_panic \"Can't build libgcc-$PKGNAME !!\"\n\n            log \"libgcc-$PKGNAME: Installing\" &&\n            run make -j$JOBS install\n            fail_panic \"Can't install libgcc-$PKGNAME\"\n        ) || exit 1\n\n        touch \"$STAMP_DIR/libgcc-$PKGNAME\"\n    fi\n}\n\nGCC_CONFIGURE_OPTIONS=$BASE_HOST_OPTIONS\nvar_append GCC_CONFIGURE_OPTIONS \"--target=$TARGET_TAG\"\nif [ \"$TARGET_MULTILIBS\" ]; then\n    var_append GCC_CONFIGURE_OPTIONS \"--enable-targets=all\"\nfi\nvar_append GCC_CONFIGURE_OPTIONS \"--enable-languages=c,c++\"\nvar_append GCC_CONFIGURE_OPTIONS \"--with-sysroot=$INSTALL_DIR\"\n\n# A bug in MinGW-w64 forces us to build and use widl.\nbuild_mingw_tools mingw-w64-tools\nbuild_mingw_headers mingw-w64-headers\n\nbuild_core_gcc gcc-$GCC_VERSION $GCC_CONFIGURE_OPTIONS\n\nCRT_CONFIGURE_OPTIONS=\"--host=$TARGET_TAG --with-sysroot=$INSTALL_DIR --prefix=$PREFIX_FOR_TARGET\"\nif [ \"$TARGET_MULTILIBS\" ]; then\n    var_append CRT_CONFIGURE_OPTIONS \"--enable-lib32\"\nfi\n\nbuild_mingw_crt mingw-w64-crt $CRT_CONFIGURE_OPTIONS\n\nbuild_libgcc gcc-$GCC_VERSION\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p $PACKAGE_DIR\n    fail_panic \"Could not create packaging directory: $PACKAGE_DIR\"\n    PACKAGE_NAME=$PACKAGE_DIR/$TARGET_TAG-$OS-$HOST_ARCH.tar.bz2\n    log \"Packaging $TARGET_TAG toolchain to $PACKAGE_NAME\"\n    run tar cjf $PACKAGE_NAME -C $(dirname $INSTALL_DIR) $TARGET_TAG/\n    fail_panic \"Could not package $TARGET_TAG toolchain!\"\n    log \"Done. See $PACKAGE_DIR:\"\n    ls -l $PACKAGE_NAME\nelse\n    log \"Done. See: $INSTALL_DIR\"\nfi\n\nif [ \"$CLEANUP\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $TEMP_DIR/*\nfi\n\nexit 0\n"
  },
  {
    "path": "build/instruments/build-ndk-stack.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to rebuild the host 'ndk-stack' tool from the\n# sources under sources/host-tools/ndk-stack.\n#\n# Note: The tool is installed under prebuilt/$HOST_TAG/bin/ndk-stack\n#       by default.\n#\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to rebuild the host ndk-stack binary program.\"\n\nregister_jobs_option\n\nOPTION_BUILD_DIR=\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Specify build directory\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Place binary in NDK installation path\"\n\nGNUMAKE=\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program\"\n\nDEBUG=\nregister_var_option \"--debug\" DEBUG \"Build debug version\"\n\nSRC_DIR=\nregister_var_option \"--src-dir=<path>\" SRC_DIR \"Specify binutils source dir.  Must be set for --with-libbfd\"\n\nPROGNAME=ndk-stack\nregister_var_option \"--program-name=<name>\" PROGNAME \"Alternate NDK tool program name\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\n# ndk-stack uses libbfd, but ndk-depends doesn't.\nWITH_LIBBFD=\nif [ \"$PROGNAME\" = \"ndk-stack\" ]; then\n    WITH_LIBBFD=true\nfi\n\nif [ \"$WITH_LIBBFD\" ]; then\n    if [ -z \"$SRC_DIR\" ]; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=$PROGNAME-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nprepare_abi_configure_build\nprepare_host_build\n\n# Choose a build directory if not specified by --build-dir\nif [ -z \"$BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-$PROGNAME\n    log \"Auto-config: --build-dir=$BUILD_DIR\"\nelse\n    OPTION_BUILD_DIR=\"yes\"\nfi\n\nrm -rf $BUILD_DIR\nmkdir -p $BUILD_DIR\n\nprepare_canadian_toolchain $BUILD_DIR\n\nCFLAGS=$HOST_CFLAGS\" -O2 -s -ffunction-sections -fdata-sections\"\nLDFLAGS=$HOST_LDFLAGS\nEXTRA_CONFIG=\n\nif [ \"$HOST_OS\" != \"darwin\" -a \"$DARWIN\" != \"yes\" ]; then\n    LDFLAGS=$LDFLAGS\" -Wl,-gc-sections\"\nelse\n    # In darwin libbfd has to be built with some *linux* target or it won't understand ELF\n    # zuav:  --enable-werror=no\n    EXTRA_CONFIG=\"-target=arm-linux-androideabi --enable-werror=no\"\nfi\n\nBINUTILS_BUILD_DIR=$BUILD_DIR/binutils\nBINUTILS_SRC_DIR=$SRC_DIR/binutils/binutils-$DEFAULT_BINUTILS_VERSION\nif [ \"$WITH_LIBBFD\" ]; then\n    # build binutils first\n    if [ -z \"$ABI_CONFIGURE_HOST\" ]; then\n        ABI_CONFIGURE_HOST=$ABI_CONFIGURE_BUILD\n    fi\n    run mkdir -p $BINUTILS_BUILD_DIR\n    run export CC CFLAGS LDFLAGS\n    run cd $BINUTILS_BUILD_DIR && \\\n    run $BINUTILS_SRC_DIR/configure \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --disable-nls \\\n        --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL \\\n\t$EXTRA_CONFIG\n    fail_panic \"Can't configure $BINUTILS_SRC_DIR\"\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $BINUTILS_SRC_DIR\"\n\nfi\n\nOUT=$NDK_DIR/$(get_host_exec_name $PROGNAME)\n\n# GNU Make\nif [ -z \"$GNUMAKE\" ]; then\n    GNUMAKE=make\n    log \"Auto-config: --make=$GNUMAKE\"\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\n# Create output directory\nmkdir -p $(dirname $OUT)\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not create output directory: $(dirname $OUT)\"\n    exit 1\nfi\n\nSRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/$PROGNAME\n\n# Let's roll\nif [ \"$WITH_LIBBFD\" ]; then\n    CFLAGS=\"$CFLAGS \\\n       -DHAVE_CONFIG_H \\\n       -I$BINUTILS_BUILD_DIR/binutils \\\n       -I$BINUTILS_SRC_DIR/binutils \\\n       -I$BINUTILS_BUILD_DIR/bfd \\\n       -I$BINUTILS_SRC_DIR/bfd \\\n       -I$BINUTILS_SRC_DIR/include \\\n       \"\n    LDFLAGS=\"$LDFLAGS \\\n       $BINUTILS_BUILD_DIR/binutils/bucomm.o \\\n       $BINUTILS_BUILD_DIR/binutils/version.o \\\n       $BINUTILS_BUILD_DIR/binutils/filemode.o \\\n       $BINUTILS_BUILD_DIR/bfd/libbfd.a \\\n       $BINUTILS_BUILD_DIR/libiberty/libiberty.a \\\n       \"\n    if [ \"$MINGW\" != \"yes\" ]; then\n        LDFLAGS=\"$LDFLAGS -ldl -lz\"\n    fi\nfi\n\nexport CFLAGS LDFLAGS\nrun $GNUMAKE -C $SRCDIR -f $SRCDIR/GNUmakefile \\\n    -B -j$NUM_JOBS \\\n    PROGNAME=\"$OUT\" \\\n    BUILD_DIR=\"$BUILD_DIR\" \\\n    CC=\"$CC\" CXX=\"$CXX\" \\\n    STRIP=\"$STRIP\" \\\n    DEBUG=$DEBUG\n\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not build host program!\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    SUBDIR=$(get_host_exec_name $PROGNAME $HOST_TAG)\n    dump \"Packaging: $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not create package: $PACKAGE_DIR/$ARCHIVE from $OUT\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nif [ \"$OPTION_BUILD_DIR\" != \"yes\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "build/instruments/build-ndk-sysroot.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2009, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# build-ndk-sysroot.sh\n#\n# collect files from an Android tree to assemble a sysroot suitable for\n# building a standable toolchain.\n#\n# after that, you may use build/instruments/package-ndk-sysroot.sh to package\n# the resulting files for distribution.\n#\n# NOTE: this is different from the Android toolchain original build-sysroot.sh\n#       script because we place target files differently.\n#\n# WARNING: For now, only a single target ABI/Architecture us supported\n#\n\n. `dirname $0`/ndk-common.sh\n\n# PLATFORM is the name of the current Android system platform\nPLATFORM=android-3\n\n# ABI is the target ABI name for the NDK\nABI=arm\n\nOPTION_HELP=no\nOPTION_BUILD_OUT=\nOPTION_PLATFORM=\nOPTION_PACKAGE=no\nOPTION_ABI=\n\nfor opt do\n  optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n  case \"$opt\" in\n  --help|-h|-\\?) OPTION_HELP=yes\n  ;;\n  --verbose)\n    VERBOSE=yes\n    ;;\n  --platform=*)\n    OPTION_PLATFORM=$optarg\n    ;;\n  --build-out=*)\n    OPTION_BUILD_OUT=$optarg\n    ;;\n  --package)\n    OPTION_PACKAGE=yes\n    ;;\n  --abi=*)\n    OPTION_ABI=$optarg\n    ;;\n  *)\n    echo \"unknown option '$opt', use --help\"\n    exit 1\n  esac\ndone\n\nif [ $OPTION_HELP = \"yes\" ] ; then\n    echo \"Collect files from an Android build tree and assembles a sysroot\"\n    echo \"suitable for building a standalone toolchain or be used by the\"\n    echo \"Android NDK.\"\n    echo \"\"\n    echo \"options:\"\n    echo \"\"\n    echo \"  --help             print this message\"\n    echo \"  --verbose          enable verbose messages\"\n    echo \"  --platform=<name>  generate sysroot for platform <name> (default is $PLATFORM)\"\n    echo \"  --abi=<name>       generate sysroot for abi <name> (default is $ABI)\"\n    echo \"  --build-out=<path> set Android build out directory\"\n    echo \"  --package          generate sysroot package tarball\"\n    echo \"\"\n    exit 0\nfi\n\nif [ -n \"$OPTION_PLATFORM\" ] ; then\n    PLATFORM=$OPTION_PLATFORM\nfi\n\nif [ -n \"$OPTION_ABI\" ] ; then\n    ABI=$OPTION_ABI\nfi\n\ncase \"$ABI\" in\narm*)\n    ARCH=arm\n    ;;\n*)\n    ARCH=$ABI\n    ;;\nesac\n\n\n# Get the root of the NDK from the current program location\nNDK_ROOT=`dirname $0`\nNDK_ROOT=`dirname $NDK_ROOT`\nNDK_ROOT=`dirname $NDK_ROOT`\n\n# Get the Android out directory\nif [ -z \"$OPTION_BUILD_OUT\" ] ; then\n    if [ -z \"$ANDROID_PRODUCT_OUT\" ] ; then\n        echo \"ANDROID_PRODUCT_OUT is not defined in your environment. Aborting\"\n        exit 1\n    fi\n    if [ ! -d $ANDROID_PRODUCT_OUT ] ; then\n        echo \"ANDROID_PRODUCT_OUT does not point to a valid directory. Aborting\"\n        exit 1\n    fi\nelse\n    ANDROID_PRODUCT_OUT=$OPTION_BUILD_OUT\n    if [ ! -d $ANDROID_PRODUCT_OUT ] ; then\n        echo \"The build out path is not a valid directory: $OPTION_BUILD_OUT\"\n        exit 1\n    fi\nfi\n\nPRODUCT_DIR=$ANDROID_PRODUCT_OUT\nSYSROOT=$NDK_ROOT/build/platforms/$PLATFORM/arch-$ABI\nCOMMON_ROOT=$NDK_ROOT/build/platforms/$PLATFORM/common\n\n# clean up everything in existing sysroot\nrm -rf $SYSROOT\nmkdir -p $SYSROOT\n\nrm -rf $COMMON_ROOT\nmkdir -p $COMMON_ROOT\n\nLIB_ROOT=$SYSROOT/usr/lib\n\ninstall_file ()\n{\n    mkdir -p $2/`dirname $1`\n    cp -fp $1 $2/$1\n}\n\ninstall_helper ()\n{\n  (cd $1 && find . -type f | while read ff; do install_file $ff $2; done)\n}\n\nTOP=$PRODUCT_DIR/../../../..\n\n# CRT objects that need to be copied\nCRT_OBJS_DIR=$PRODUCT_DIR/obj/lib\nCRT_OBJS=\"$CRT_OBJS_DIR/crtbegin_static.o \\\n$CRT_OBJS_DIR/crtbegin_dynamic.o \\\n$CRT_OBJS_DIR/crtend_android.o\"\n\n# static libraries that need to be copied.\nSTATIC_LIBS_DIR=$PRODUCT_DIR/obj/STATIC_LIBRARIES\nSTATIC_LIBS=\"$STATIC_LIBS_DIR/libc_intermediates/libc.a \\\n$STATIC_LIBS_DIR/libm_intermediates/libm.a \\\n$STATIC_LIBS_DIR/libstdc++_intermediates/libstdc++.a\n$STATIC_LIBS_DIR/libthread_db_intermediates/libthread_db.a\"\n\n# dynamic libraries that need to be copied.\nDYNAMIC_LIBS_DIR=$PRODUCT_DIR/symbols/system/lib\nDYNAMIC_LIBS=\"$DYNAMIC_LIBS_DIR/libdl.so \\\n$DYNAMIC_LIBS_DIR/libc.so \\\n$DYNAMIC_LIBS_DIR/libm.so \\\n$DYNAMIC_LIBS_DIR/libstdc++.so \\\n$DYNAMIC_LIBS_DIR/libthread_db.so\"\n\n# Copy all CRT objects and libraries\nrm -rf $LIB_ROOT\nmkdir -p $LIB_ROOT\ncp -f $CRT_OBJS $STATIC_LIBS $DYNAMIC_LIBS $LIB_ROOT\n\n# Check $TOP/bionic to see if this is new source layout.\nif [ -d $TOP/bionic ] ;then\n  BIONIC_ROOT=$TOP/bionic\n  LIBC_ROOT=$BIONIC_ROOT/libc\nelse\n  BIONIC_ROOT=$TOP/system\n  LIBC_ROOT=$BIONIC_ROOT/bionic\nfi\n\n# Copy headers.  This need to be done in the reverse order of inclusion\n# in case there are different headers with the same name.\nARCH_INCLUDE=$SYSROOT/usr/include\nrm -rf $ARCH_INCLUDE\nmkdir -p $ARCH_INCLUDE\n\nCOMMON_INCLUDE=$COMMON_ROOT/include\nrm -rf $COMMON_INCLUDE\nmkdir -p $COMMON_INCLUDE\n\n# Install a common header and create the appropriate arch-specific\n# directory for it.\n#\n# $1: source directory\n# $2: header path, relative to source directory\n#\ncommon_header ()\n{\n    echo \"Copy: $COMMON_INCLUDE/$2\"\n    mkdir -p `dirname $COMMON_INCLUDE/$2`\n    install $1/$2 $COMMON_INCLUDE/$2\n    # just to be safe\n    chmod a-x $COMMON_INCLUDE/$2\n\n    # the link prefix, used to point to common/\n    # from arch-$ARCH/usr/\n    link_prefix=../../common/include\n\n    # we need to count the number of directory separators in $2\n    # for each one of them, we're going to prepend ../ to the\n    # link prefix\n    for item in `echo $2 | tr '/' ' '`; do\n        link_prefix=../$link_prefix\n    done\n\n    echo \"Link: $ARCH_INCLUDE/$2\"\n    mkdir -p `dirname $ARCH_INCLUDE/$2`\n    ln -s $link_prefix/$2 $ARCH_INCLUDE/$2\n}\n\ncommon_headers ()\n{\n    srcs=`cd $1 && find . -type f`\n    # remove leading ./\n    srcs=`echo $srcs | sed -e \"s%\\./%%g\"`\n\n    for src in $srcs; do\n        common_header $1 $src\n    done\n}\n\narch_header ()\n{\n    echo \"Copy: $ARCH_INCLUDE/$2\"\n    mkdir -p `dirname $ARCH_INCLUDE/$2`\n    install $1/$2 $ARCH_INCLUDE/$2\n    # just to be safe\n    chmod a-x $ARCH_INCLUDE/$2\n}\n\narch_headers ()\n{\n    srcs=`cd $1 && find . -type f`\n    # remove leading ./\n    srcs=`echo $srcs | sed -e \"s%\\./%%g\"`\n\n    for src in $srcs; do\n        arch_header $1 $src\n    done\n}\n\n# ZLib headers\ncommon_header  $TOP/external/zlib zlib.h\ncommon_header  $TOP/external/zlib zconf.h\n\n# Jni header\ncommon_header  $TOP/libnativehelper/include/nativehelper jni.h\n\n# libthread_db headers, not sure if this is needed for the NDK\ncommon_headers $BIONIC_ROOT/libthread_db/include\n\n# for libm, just copy math.h and fenv.h\ncommon_header $BIONIC_ROOT/libm/include math.h\nif [ \"$ARCH\" = \"x86\" ]; then\n    arch_header   $BIONIC_ROOT/libm/include i387/fenv.h\nelse\n    arch_header   $BIONIC_ROOT/libm/include $ARCH/fenv.h\nfi\n\n# our tiny C++ standard library\ncommon_headers $BIONIC_ROOT/libstdc++/include\n\n# C library kernel headers\ncommon_headers $LIBC_ROOT/kernel/common\narch_headers   $LIBC_ROOT/kernel/arch-$ARCH\n\n# C library headers\ncommon_headers $LIBC_ROOT/include\narch_headers   $LIBC_ROOT/arch-$ARCH/include\n\n# Do we need to package the result\nif [ $OPTION_PACKAGE = yes ] ; then\n    DATE=`date +%Y%m%d`\n    PKGFILE=$TMPDIR/android-ndk-sysroot-$DATE.tar.bz2\n    tar cjf $PKGFILE build/platforms/$PLATFORM/arch-$ARCH\n    echo \"Packaged in $PKGFILE\"\nfi\n"
  },
  {
    "path": "build/instruments/build-python/_sitebuiltins.py",
    "content": "\"\"\"\nThe objects used by the site module to add custom builtins.\n\"\"\"\n\n# Those objects are almost immortal and they keep a reference to their module\n# globals.  Defining them in the site module would keep too many references\n# alive.\n# Note this means this module should also avoid keep things alive in its\n# globals.\n\nimport sys\n\nclass Quitter(object):\n    def __init__(self, name, eof):\n        self.name = name\n        self.eof = eof\n    def __repr__(self):\n        return 'Use %s() or %s to exit' % (self.name, self.eof)\n    def __call__(self, code=None):\n        # Shells like IDLE catch the SystemExit, but listen when their\n        # stdin wrapper is closed.\n        try:\n            sys.stdin.close()\n        except:\n            pass\n        raise SystemExit(code)\n\n\nclass _Printer(object):\n    \"\"\"interactive prompt objects for printing the license text, a list of\n    contributors and the copyright notice.\"\"\"\n\n    MAXLINES = 23\n\n    def __init__(self, name, data, files=(), dirs=()):\n        import os\n        self.__name = name\n        self.__data = data\n        self.__lines = None\n        self.__filenames = [os.path.join(dir, filename)\n                            for dir in dirs\n                            for filename in files]\n\n    def __setup(self):\n        if self.__lines:\n            return\n        data = None\n        for filename in self.__filenames:\n            try:\n                with open(filename, \"r\") as fp:\n                    data = fp.read()\n                break\n            except OSError:\n                pass\n            except IOError:\n                pass\n        if not data:\n            data = self.__data\n        self.__lines = data.split('\\n')\n        self.__linecnt = len(self.__lines)\n\n    def __repr__(self):\n        self.__setup()\n        if len(self.__lines) <= self.MAXLINES:\n            return \"\\n\".join(self.__lines)\n        else:\n            return \"Type %s() to see the full %s text\" % ((self.__name,)*2)\n\n    def __call__(self):\n        self.__setup()\n        prompt = 'Hit Return for more, or q (and Return) to quit: '\n        lineno = 0\n        while 1:\n            try:\n                for i in range(lineno, lineno + self.MAXLINES):\n                    print(self.__lines[i])\n            except IndexError:\n                break\n            else:\n                lineno += self.MAXLINES\n                key = None\n                while key is None:\n                    key = input(prompt)\n                    if key not in ('', 'q'):\n                        key = None\n                if key == 'q':\n                    break\n\n\nclass _Helper(object):\n    \"\"\"Define the builtin 'help'.\n\n    This is a wrapper around pydoc.help that provides a helpful message\n    when 'help' is typed at the Python interactive prompt.\n\n    Calling help() at the Python prompt starts an interactive help session.\n    Calling help(thing) prints help for the python object 'thing'.\n    \"\"\"\n\n    def __repr__(self):\n        return \"Type help() for interactive help, \" \\\n               \"or help(object) for help about object.\"\n    def __call__(self, *args, **kwds):\n        import pydoc\n        return pydoc.help(*args, **kwds)\n"
  },
  {
    "path": "build/instruments/build-python/_sysconfigdata.py",
    "content": "# system configuration generated and used by the sysconfig module\nbuild_time_vars = {}\n"
  },
  {
    "path": "build/instruments/build-python/android.mk.2.7",
    "content": "MY_PYCORE_SRC_FILES := \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Python/_warnings.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/asdl.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/ast.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/bltinmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/ceval.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/codecs.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/compile.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/dtoa.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/dynload_shlib.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/errors.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/formatter_string.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/formatter_unicode.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/future.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getargs.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getcompiler.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getcopyright.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getopt.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getplatform.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getversion.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/graminit.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/import.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/importdl.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/marshal.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/modsupport.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/mysnprintf.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/mystrtoul.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/peephole.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyarena.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyctype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyfpe.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pymath.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystate.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystrcmp.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystrtod.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/Python-ast.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pythonrun.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/random.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/structmember.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/symtable.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/sysmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/thread.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/traceback.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/acceler.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/bitset.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/firstsets.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/grammar.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/grammar1.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/listnode.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/metagrammar.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/myreadline.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/node.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/parser.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/parsetok.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/tokenizer.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/abstract.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/boolobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bufferobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bytearrayobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bytes_methods.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/capsule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/cellobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/classobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/cobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/codeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/complexobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/descrobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/dictobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/enumobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/exceptions.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/fileobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/floatobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/frameobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/funcobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/genobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/intobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/iterobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/listobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/longobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/memoryobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/methodobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/moduleobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/object.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/obmalloc.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/rangeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/setobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/sliceobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/stringobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/structseq.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/tupleobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/typeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/unicodectype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/unicodeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/weakrefobject.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_bisectmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_codecsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_collectionsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_csv.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_functoolsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_heapqmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_hotshot.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/_iomodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/bufferedio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/bytesio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/fileio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/iobase.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/stringio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/textio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_json.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_localemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_lsprof.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_math.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_randommodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_sre.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_struct.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_weakref.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/arraymodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/audioop.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/binascii.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_cn.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_hk.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_iso2022.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_jp.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_kr.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_tw.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/multibytecodec.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cmathmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cPickle.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cStringIO.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/datetimemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/errnomodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/fcntlmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/future_builtins.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/gcmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/getbuildinfo.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/itertoolsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/main.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/mathmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/md5.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/md5module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/mmapmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/operator.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/parsermodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/posixmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/pwdmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/resource.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/rotatingtree.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/sha256module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/sha512module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/shamodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/signalmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/stropmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/symtablemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/termios.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/threadmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/timemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/zipimport.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/zlibmodule.c\n"
  },
  {
    "path": "build/instruments/build-python/android.mk.3.5",
    "content": "MY_PYCORE_SRC_FILES := \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Python/_warnings.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/asdl.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/ast.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/bltinmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/ceval.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/codecs.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/compile.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/dtoa.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/dynamic_annotations.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/dynload_shlib.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/errors.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/fileutils.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/formatter_unicode.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/future.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getargs.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getcompiler.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getcopyright.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getopt.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getplatform.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/getversion.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/graminit.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/import.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/importdl.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/marshal.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/modsupport.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/mysnprintf.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/mystrtoul.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/peephole.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyarena.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyctype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyfpe.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pyhash.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pylifecycle.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pymath.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystate.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystrcmp.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystrhex.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pystrtod.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/Python-ast.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pythonrun.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/pytime.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/random.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/structmember.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/symtable.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/sysmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/thread.c \\\n  $(MY_PYTHON_SRC_ROOT)/Python/traceback.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/acceler.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/bitset.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/firstsets.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/grammar.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/grammar1.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/listnode.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/metagrammar.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/myreadline.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/node.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/parser.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/parsetok.c \\\n  $(MY_PYTHON_SRC_ROOT)/Parser/tokenizer.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/abstract.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/accu.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/boolobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bytearrayobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bytes_methods.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/bytesobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/capsule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/cellobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/classobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/codeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/complexobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/descrobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/dictobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/enumobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/exceptions.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/fileobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/floatobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/frameobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/funcobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/genobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/iterobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/listobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/longobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/memoryobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/methodobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/moduleobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/namespaceobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/object.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/obmalloc.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/odictobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/rangeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/setobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/sliceobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/structseq.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/tupleobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/typeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/unicodectype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/unicodeobject.c \\\n  $(MY_PYTHON_SRC_ROOT)/Objects/weakrefobject.c \\\n  \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_bisectmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_codecsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_collectionsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_csv.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_datetimemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_functoolsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_heapqmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/_iomodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/bufferedio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/bytesio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/fileio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/iobase.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/stringio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_io/textio.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_json.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_localemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_lsprof.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_math.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_opcode.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_operator.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_pickle.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_posixsubprocess.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_randommodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_sre.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_stat.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_struct.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_threadmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_tracemalloc.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/_weakref.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/arraymodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/atexitmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/audioop.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/binascii.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_cn.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_hk.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_iso2022.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_jp.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_kr.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_tw.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/multibytecodec.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/cmathmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/errnomodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/faulthandler.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/fcntlmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/gcmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/getbuildinfo.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/hashtable.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/itertoolsmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/main.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/mathmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/md5module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/mmapmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/parsermodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/posixmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/pwdmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/resource.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/rotatingtree.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/sha1module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/sha256module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/sha512module.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/signalmodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/symtablemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/termios.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/timemodule.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/zipimport.c \\\n  $(MY_PYTHON_SRC_ROOT)/Modules/zlibmodule.c\n"
  },
  {
    "path": "build/instruments/build-python/build_stdlib.py",
    "content": "import sys\nif sys.version_info[0] < 3:\n    import ConfigParser as configparser\nelse:\n    import configparser\nimport argparse\nimport os.path\nimport zipfile\n\n\nclass StdlibConfig:\n    def __init__(self, ignore_dir_list, ignore_file_list):\n        self.ignore_dir_list = ignore_dir_list\n        self.ignore_file_list = ignore_file_list\n\n\ndef dir_in_interest(config, arch_path):\n    for exclusion in config.ignore_dir_list:\n        if arch_path == exclusion:\n            return False\n    return True\n\n\ndef file_in_interest(config, arch_path):\n    if arch_path in config.ignore_file_list:\n        return False\n    return True\n\n\ndef in_interest(config, arch_path, is_dir, pathbits):\n    name = pathbits[-1]\n    if is_dir:\n        if (name == '__pycache__' or name == 'test' or name == 'tests'):\n            return False\n        if arch_path.startswith('plat-'):\n            return False\n    else:\n        if not arch_path.endswith('.py'):\n            return False\n    if is_dir:\n        return dir_in_interest(config, arch_path)\n    else:\n        return file_in_interest(config, arch_path)\n\n\ndef enum_content(config, seed, catalog, pathbits = None):\n    if pathbits is None:\n        fs_path = seed\n        is_dir = True\n    else:\n        fs_path = os.path.join(seed, *pathbits)\n        is_dir = os.path.isdir(fs_path)\n    if pathbits is not None:\n        arc_path = '/'.join(pathbits)\n        if not in_interest(config, arc_path, is_dir, pathbits):\n            return\n        if not is_dir:\n            catalog.append((fs_path, arc_path))\n    else:\n        pathbits = []\n    if is_dir:\n        files = []\n        dirs = []\n        for name in os.listdir(fs_path):\n            p = os.path.join(fs_path, name)\n            if os.path.isdir(p):\n                dirs.append(name)\n            else:\n                files.append(name)\n        for name in sorted(dirs):\n            pathbits.append(name)\n            enum_content(config, seed, catalog, pathbits)\n            del pathbits[-1]\n        for name in sorted(files):\n            pathbits.append(name)\n            enum_content(config, seed, catalog, pathbits)\n            del pathbits[-1]\n\n\n\n\ndef load_build_config():\n    conf_path = os.path.join(os.path.normpath(os.path.abspath(os.path.dirname(__file__))), 'stdlib.config')\n    config = configparser.RawConfigParser()\n    config.read(conf_path)\n    return config\n\n\ndef get_conf_strings(config, section, option):\n    return config.get(section, option).split()\n\n\ndef build_stdlib():\n    build_config = load_build_config()\n    ignore_dir_list = get_conf_strings(build_config, 'CONFIG', 'IGNORE_DIR')\n    ignore_file_list = get_conf_strings(build_config, 'CONFIG', 'IGNORE_FILE')\n    config = StdlibConfig(ignore_dir_list=ignore_dir_list, ignore_file_list=ignore_file_list)\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--pysrc-root', required=True)\n    parser.add_argument('--output-zip', required=True)\n    parser.add_argument('--py2', action='store_true')\n    args = parser.parse_args()\n\n    dirhere = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))\n    stdlib_srcdir = os.path.normpath(os.path.abspath(os.path.join(args.pysrc_root, 'Lib')))\n    zipfilename = os.path.normpath(os.path.abspath(args.output_zip))\n    display_zipname = os.path.basename(zipfilename)\n\n    catalog = []\n    enum_content(config, stdlib_srcdir, catalog)\n    catalog += [\n        (os.path.join(dirhere, 'site.py'), 'site.py'),\n        (os.path.join(dirhere, 'sysconfig.py'), 'sysconfig.py'),\n        (os.path.join(dirhere, '_sysconfigdata.py'), '_sysconfigdata.py'),\n    ]\n    if args.py2:\n        catalog += [(os.path.join(dirhere, '_sitebuiltins.py'), '_sitebuiltins.py')]\n\n    print(\"::: compiling python-stdlib zip package '{0}' ...\".format(zipfilename))\n    with zipfile.ZipFile(zipfilename, \"w\", zipfile.ZIP_DEFLATED) as fzip:\n        for entry in catalog:\n            fname, arcname = entry[0], entry[1]\n            fzip.write(fname, arcname)\n            print(\"::: {0} >>> {1}/{2}\".format(fname, display_zipname, arcname))\n\n\nif __name__ == '__main__':\n    build_stdlib()\n"
  },
  {
    "path": "build/instruments/build-python/config.c.2.7",
    "content": "#include <Python.h>\n\nextern void initposix(void);\nextern void initpwd(void);\nextern void initfcntl(void);\nextern void inittermios(void);\nextern void initresource(void);\nextern void initaudioop(void);\nextern void init_locale(void);\nextern void initarray(void);\nextern void initbinascii(void);\nextern void initcmath(void);\nextern void initerrno(void);\nextern void initfuture_builtins(void);\nextern void initgc(void);\nextern void initmath(void);\nextern void init_md5(void);\nextern void initnt(void);\nextern void initoperator(void);\nextern void initsignal(void);\nextern void init_sha(void);\nextern void init_sha256(void);\nextern void init_sha512(void);\nextern void initstrop(void);\nextern void inittime(void);\nextern void initthread(void);\nextern void initcStringIO(void);\nextern void initcPickle(void);\nextern void init_codecs(void);\nextern void init_weakref(void);\nextern void init_hotshot(void);\nextern void initxxsubtype(void);\nextern void initzipimport(void);\nextern void init_random(void);\nextern void inititertools(void);\nextern void init_collections(void);\nextern void init_heapq(void);\nextern void init_bisect(void);\nextern void init_symtable(void);\nextern void initmmap(void);\nextern void init_csv(void);\nextern void init_sre(void);\nextern void initparser(void);\nextern void init_struct(void);\nextern void initdatetime(void);\nextern void init_functools(void);\nextern void init_json(void);\nextern void initzlib(void);\n\nextern void init_multibytecodec(void);\nextern void init_codecs_cn(void);\nextern void init_codecs_hk(void);\nextern void init_codecs_iso2022(void);\nextern void init_codecs_jp(void);\nextern void init_codecs_kr(void);\nextern void init_codecs_tw(void);\nextern void init_subprocess(void);\nextern void init_lsprof(void);\nextern void init_ast(void);\nextern void init_io(void);\nextern void _PyWarnings_Init(void);\n\nextern void PyMarshal_Init(void);\nextern void initimp(void);\n\nstruct _inittab _PyImport_Inittab[] = {\n    {\"posix\", initposix},\n    {\"pwd\", initpwd},\n    {\"fcntl\", initfcntl},\n    {\"termios\", inittermios},\n    {\"resource\", initresource},\n    {\"array\", initarray},\n    {\"_ast\", init_ast},\n    {\"audioop\", initaudioop},\n    {\"binascii\", initbinascii},\n    {\"cmath\", initcmath},\n    {\"errno\", initerrno},\n    {\"future_builtins\", initfuture_builtins},\n    {\"gc\", initgc},\n    {\"math\", initmath},\n    {\"_md5\", init_md5},\n    {\"operator\", initoperator},\n    {\"signal\", initsignal},\n    {\"_sha\", init_sha},\n    {\"_sha256\", init_sha256},\n    {\"_sha512\", init_sha512},\n    {\"strop\", initstrop},\n    {\"time\", inittime},\n    {\"thread\", initthread},\n    {\"cStringIO\", initcStringIO},\n    {\"cPickle\", initcPickle},\n    {\"_locale\", init_locale},\n    {\"_codecs\", init_codecs},\n    {\"_weakref\", init_weakref},\n    {\"_hotshot\", init_hotshot},\n    {\"_random\", init_random},\n    {\"_bisect\", init_bisect},\n    {\"_heapq\", init_heapq},\n    {\"_lsprof\", init_lsprof},\n    {\"itertools\", inititertools},\n    {\"_collections\", init_collections},\n    {\"_symtable\", init_symtable},\n    {\"mmap\", initmmap},\n    {\"_csv\", init_csv},\n    {\"_sre\", init_sre},\n    {\"parser\", initparser},\n    {\"_struct\", init_struct},\n    {\"datetime\", initdatetime},\n    {\"_functools\", init_functools},\n    {\"_json\", init_json},\n    {\"xxsubtype\", initxxsubtype},\n    {\"zipimport\", initzipimport},\n    {\"zlib\", initzlib},\n\n    /* CJK codecs */\n    {\"_multibytecodec\", init_multibytecodec},\n    {\"_codecs_cn\", init_codecs_cn},\n    {\"_codecs_hk\", init_codecs_hk},\n    {\"_codecs_iso2022\", init_codecs_iso2022},\n    {\"_codecs_jp\", init_codecs_jp},\n    {\"_codecs_kr\", init_codecs_kr},\n    {\"_codecs_tw\", init_codecs_tw},\n\n    /* This module \"lives in\" with marshal.c */\n    {\"marshal\", PyMarshal_Init},\n\n    /* This lives it with import.c */\n    {\"imp\", initimp},\n\n    /* These entries are here for sys.builtin_module_names */\n    {\"__main__\", NULL},\n    {\"__builtin__\", NULL},\n    {\"sys\", NULL},\n    {\"exceptions\", NULL},\n    {\"_warnings\", _PyWarnings_Init},\n\n    {\"_io\", init_io},\n\n    /* Sentinel */\n    {0, 0}\n};\n"
  },
  {
    "path": "build/instruments/build-python/config.c.3.5",
    "content": "#include <Python.h>\n\nextern PyObject* PyInit_posix(void);\nextern PyObject* PyInit_pwd(void);\nextern PyObject* PyInit_fcntl(void);\nextern PyObject* PyInit__posixsubprocess(void);\nextern PyObject* PyInit_termios(void);\nextern PyObject* PyInit_resource(void);\nextern PyObject* PyInit_audioop(void);\nextern PyObject* PyInit__locale(void);\nextern PyObject* PyInit_array(void);\nextern PyObject* PyInit_binascii(void);\nextern PyObject* PyInit_cmath(void);\nextern PyObject* PyInit_errno(void);\nextern PyObject* PyInit_faulthandler(void);\nextern PyObject* PyInit__tracemalloc(void);\nextern PyObject* PyInit_gc(void);\nextern PyObject* PyInit_math(void);\nextern PyObject* PyInit__md5(void);\nextern PyObject* PyInit__operator(void);\nextern PyObject* PyInit__signal(void);\nextern PyObject* PyInit__sha1(void);\nextern PyObject* PyInit__sha256(void);\nextern PyObject* PyInit__sha512(void);\nextern PyObject* PyInit_time(void);\nextern PyObject* PyInit__thread(void);\nextern PyObject* PyInit__codecs(void);\nextern PyObject* PyInit__weakref(void);\nextern PyObject* PyInit_xxsubtype(void);\nextern PyObject* PyInit_zipimport(void);\nextern PyObject* PyInit__random(void);\nextern PyObject* PyInit_itertools(void);\nextern PyObject* PyInit__collections(void);\nextern PyObject* PyInit__heapq(void);\nextern PyObject* PyInit__bisect(void);\nextern PyObject* PyInit__symtable(void);\nextern PyObject* PyInit_mmap(void);\nextern PyObject* PyInit__csv(void);\nextern PyObject* PyInit__sre(void);\nextern PyObject* PyInit_parser(void);\nextern PyObject* PyInit__struct(void);\nextern PyObject* PyInit__datetime(void);\nextern PyObject* PyInit__functools(void);\nextern PyObject* PyInit__json(void);\nextern PyObject* PyInit_zlib(void);\nextern PyObject* PyInit__multibytecodec(void);\nextern PyObject* PyInit__codecs_cn(void);\nextern PyObject* PyInit__codecs_hk(void);\nextern PyObject* PyInit__codecs_iso2022(void);\nextern PyObject* PyInit__codecs_jp(void);\nextern PyObject* PyInit__codecs_kr(void);\nextern PyObject* PyInit__codecs_tw(void);\nextern PyObject* PyInit__winapi(void);\nextern PyObject* PyInit__lsprof(void);\nextern PyObject* PyInit__ast(void);\nextern PyObject* PyInit__io(void);\nextern PyObject* PyInit__pickle(void);\nextern PyObject* PyInit_atexit(void);\nextern PyObject* _PyWarnings_Init(void);\nextern PyObject* PyInit__string(void);\nextern PyObject* PyInit__stat(void);\nextern PyObject* PyInit__opcode(void);\nextern PyObject* PyMarshal_Init(void);\nextern PyObject* PyInit_imp(void);\n\nstruct _inittab _PyImport_Inittab[] = {\n    {\"posix\", PyInit_posix},\n    {\"pwd\", PyInit_pwd},\n    {\"fcntl\", PyInit_fcntl},\n    {\"_posixsubprocess\", PyInit__posixsubprocess},\n    {\"termios\", PyInit_termios},\n    {\"resource\", PyInit_resource},\n    {\"audioop\", PyInit_audioop},\n    {\"_locale\", PyInit__locale},\n    {\"array\", PyInit_array},\n    {\"_ast\", PyInit__ast},\n    {\"binascii\", PyInit_binascii},\n    {\"cmath\", PyInit_cmath},\n    {\"errno\", PyInit_errno},\n    {\"faulthandler\", PyInit_faulthandler},\n    {\"gc\", PyInit_gc},\n    {\"math\", PyInit_math},\n    {\"_operator\", PyInit__operator},\n    {\"_signal\", PyInit__signal},\n    {\"_md5\", PyInit__md5},\n    {\"_sha1\", PyInit__sha1},\n    {\"_sha256\", PyInit__sha256},\n    {\"_sha512\", PyInit__sha512},\n    {\"time\", PyInit_time},\n    {\"_thread\", PyInit__thread},\n    {\"_tracemalloc\", PyInit__tracemalloc},\n    {\"_codecs\", PyInit__codecs},\n    {\"_weakref\", PyInit__weakref},\n    {\"_random\", PyInit__random},\n    {\"_bisect\", PyInit__bisect},\n    {\"_heapq\", PyInit__heapq},\n    {\"_lsprof\", PyInit__lsprof},\n    {\"itertools\", PyInit_itertools},\n    {\"_collections\", PyInit__collections},\n    {\"_symtable\", PyInit__symtable},\n    {\"mmap\", PyInit_mmap},\n    {\"_csv\", PyInit__csv},\n    {\"_sre\", PyInit__sre},\n    {\"parser\", PyInit_parser},\n    {\"_struct\", PyInit__struct},\n    {\"_datetime\", PyInit__datetime},\n    {\"_functools\", PyInit__functools},\n    {\"_json\", PyInit__json},\n\n    {\"xxsubtype\", PyInit_xxsubtype},\n    {\"zipimport\", PyInit_zipimport},\n    {\"zlib\", PyInit_zlib},\n\n    /* CJK codecs */\n    {\"_multibytecodec\", PyInit__multibytecodec},\n    {\"_codecs_cn\", PyInit__codecs_cn},\n    {\"_codecs_hk\", PyInit__codecs_hk},\n    {\"_codecs_iso2022\", PyInit__codecs_iso2022},\n    {\"_codecs_jp\", PyInit__codecs_jp},\n    {\"_codecs_kr\", PyInit__codecs_kr},\n    {\"_codecs_tw\", PyInit__codecs_tw},\n\n    /* This module \"lives in\" with marshal.c */\n    {\"marshal\", PyMarshal_Init},\n\n    /* This lives it with import.c */\n    {\"_imp\", PyInit_imp},\n\n    /* These entries are here for sys.builtin_module_names */\n    {\"builtins\", NULL},\n    {\"sys\", NULL},\n    {\"_warnings\", _PyWarnings_Init},\n    {\"_string\", PyInit__string},\n\n    {\"_io\", PyInit__io},\n    {\"_pickle\", PyInit__pickle},\n    {\"atexit\", PyInit_atexit},\n    {\"_stat\", PyInit__stat},\n    {\"_opcode\", PyInit__opcode},\n\n    /* Sentinel */\n    {0, 0}\n};\n\n"
  },
  {
    "path": "build/instruments/build-python/freeze_stdlib.py",
    "content": "from __future__ import print_function\nimport sys\nif sys.version_info[0] < 3:\n    import ConfigParser as configparser\nelse:\n    import configparser\nimport argparse\nimport io\nimport marshal\nimport os.path\n\n\nFROZEN_H = 'python-stdlib.h'\nFROZEN_C = 'python-stdlib.c'\nFROZEN_C_TABLE = '_PyImport_FrozenStdlibModules'\nFROZEN_MK = 'python-stdlib.list'\n\n\nPY2_ENCODING_ISO_8859_1 = (\n    'encodings/punycode.py',\n    'encodings/string_escape.py',\n    'sqlite3/__init__.py',\n    'sqlite3/dbapi2.py',\n    'inspect.py',\n    'shlex.py',\n    'tarfile.py',\n)\n\nPY2_ENCODING_UTF8 = (\n    'ast.py',\n    'sre_compile.py',\n)\n\nPY2_ENCODING_LATIN_1 = (\n    'heapq.py',\n    'pydoc.py',\n)\n\n\nclass StdlibConfig:\n    def __init__(self, ignore_dir_list, ignore_file_list):\n        self.ignore_dir_list = ignore_dir_list\n        self.ignore_file_list = ignore_file_list\n\n\ndef dir_in_interest(config, arch_path):\n    for exclusion in config.ignore_dir_list:\n        if arch_path == exclusion:\n            return False\n    return True\n\n\ndef file_in_interest(config, arch_path):\n    if arch_path in config.ignore_file_list:\n        return False\n    return True\n\n\ndef in_interest(config, arch_path, is_dir, pathbits):\n    name = pathbits[-1]\n    if is_dir:\n        if (name == '__pycache__' or name == 'test' or name == 'tests'):\n            return False\n        if arch_path.startswith('plat-'):\n            return False\n    else:\n        if not arch_path.endswith('.py'):\n            return False\n    if is_dir:\n        return dir_in_interest(config, arch_path)\n    else:\n        return file_in_interest(config, arch_path)\n\n\ndef enum_content(config, seed, catalog, pathbits = None):\n    if pathbits is None:\n        fs_path = seed\n        is_dir = True\n    else:\n        fs_path = os.path.join(seed, *pathbits)\n        is_dir = os.path.isdir(fs_path)\n    if pathbits is not None:\n        arc_path = '/'.join(pathbits)\n        if not in_interest(config, arc_path, is_dir, pathbits):\n            return\n        if not is_dir:\n            catalog.append((fs_path, arc_path))\n    else:\n        pathbits = []\n    if is_dir:\n        files = []\n        dirs = []\n        for name in os.listdir(fs_path):\n            p = os.path.join(fs_path, name)\n            if os.path.isdir(p):\n                dirs.append(name)\n            else:\n                files.append(name)\n        for name in sorted(dirs):\n            pathbits.append(name)\n            enum_content(config, seed, catalog, pathbits)\n            del pathbits[-1]\n        for name in sorted(files):\n            pathbits.append(name)\n            enum_content(config, seed, catalog, pathbits)\n            del pathbits[-1]\n\n\ndef load_build_config():\n    conf_path = os.path.join(os.path.normpath(os.path.abspath(os.path.dirname(__file__))), 'stdlib.config')\n    config = configparser.RawConfigParser()\n    config.read(conf_path)\n    return config\n\n\ndef get_conf_strings(config, section, option):\n    return config.get(section, option).split()\n\n\nclass ModuleInfo:\n    def __init__(self, py_name, c_name, c_sz_name, frozen_size, c_file):\n        self.py_name = py_name\n        self.c_name = c_name\n        self.c_sz_name = c_sz_name\n        self.frozen_size = frozen_size\n        self.c_file = c_file\n\n\ndef strip_coding_comment(pytext):\n    import re\n    lines = pytext.splitlines(True)\n    coding_re = re.compile(r\"^\\s*#.*coding[:=]\\s*([-\\w.]+)\", re.UNICODE)\n    for i in range(2):\n        if i < len(lines):\n            if coding_re.match(lines[i]):\n                lines[i] = \"\"\n    return ''.join(lines)\n\n\ndef assemble_source(co_fname, mangled, source_file, output, py2):\n    encoding = 'utf8'\n    if py2:\n        if co_fname in PY2_ENCODING_ISO_8859_1:\n            encoding = 'iso-8859-1'\n        elif co_fname in PY2_ENCODING_LATIN_1:\n         encoding = 'latin-1'\n    with io.open(source_file, mode='rt', encoding=encoding) as source:\n        pytext = source.read()\n    if py2:\n        if co_fname in PY2_ENCODING_ISO_8859_1 or co_fname in PY2_ENCODING_UTF8 or co_fname in PY2_ENCODING_LATIN_1:\n            pytext = strip_coding_comment(pytext)\n    ast = compile(pytext, co_fname, 'exec', 0, 1)\n    code = marshal.dumps(ast)\n    output.write('unsigned char {0}[] = {{'.format(mangled))\n    for i in range(0, len(code), 16):\n        output.write('\\n    ')\n        for c in code[i:i+16]:\n            if sys.version_info[0] < 3:\n                output.write('{: >3d}, '.format(ord(c)))\n            else:\n                output.write('{: >3d}, '.format(c))\n    output.write('\\n};\\n')\n    return len(code)\n\n\ndef to_string(v):\n    if sys.version_info[0] < 3:\n        if isinstance(v, unicode):\n            return v\n        return unicode(v)\n    else:\n        if isinstance(v, str):\n            return v\n        return str(v)\n\n\ndef freeze_stdlib():\n    build_config = load_build_config()\n    ignore_dir_list = get_conf_strings(build_config, 'CONFIG', 'IGNORE_DIR')\n    ignore_file_list = get_conf_strings(build_config, 'CONFIG', 'IGNORE_FILE')\n    config = StdlibConfig(ignore_dir_list=ignore_dir_list, ignore_file_list=ignore_file_list)\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--stdlib-dir', required=True)\n    parser.add_argument('--output-dir', required=True)\n    parser.add_argument('--py2', action='store_true')\n    args = parser.parse_args()\n\n    dirhere = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))\n\n    catalog = []\n    enum_content(config, args.stdlib_dir, catalog)\n    catalog += [\n        (os.path.join(dirhere, 'site.py'), 'site.py'),\n        (os.path.join(dirhere, 'sysconfig.py'), 'sysconfig.py'),\n        (os.path.join(dirhere, '_sysconfigdata.py'), '_sysconfigdata.py'),\n    ]\n    if args.py2:\n        catalog += [(os.path.join(dirhere, '_sitebuiltins.py'), '_sitebuiltins.py')]\n\n    print(\"::: Generating byte-code for python-stdlib in '{}' ...\".format(args.output_dir))\n    inittab = []\n    bootstrap = []\n    for entry in catalog:\n        source_file, arcname = entry[0], entry[1]\n\n        fbits = arcname.split('/')\n        is_package = False\n        if len(fbits) > 1 and fbits[-1] == '__init__.py':\n            is_package = True\n            mod_name = '.'.join(fbits[0: len(fbits) - 1])\n        else:\n            modbits = fbits[:]\n            modbits[-1] = modbits[-1].partition('.')[0]\n            mod_name = '.'.join(modbits)\n        mangled_origin = mod_name.replace('.', '_')\n        mangled = '_Py_M_{}'.format(mangled_origin)\n        sz_mangled = '_Py_Msz_{}'.format(mangled_origin)\n        c_output_file = 'M_{}.c'.format(mangled_origin)\n\n        print('::: freeze ::: {} >>> {}'.format(arcname, c_output_file))\n\n        with open(os.path.join(args.output_dir, c_output_file), mode='w') as output:\n            frozen_size = assemble_source(arcname, mangled, source_file, output, args.py2)\n        if is_package:\n            frozen_size = -frozen_size\n\n        m = ModuleInfo(py_name=mod_name, c_name=mangled, c_sz_name=sz_mangled, frozen_size=frozen_size, c_file=c_output_file)\n        inittab.append(m)\n\n        if not args.py2:\n            if mod_name == \"importlib._bootstrap\":\n                print('::: link ::: {} >>> {}'.format('_frozen_importlib', 'importlib._bootstrap'))\n                bootstrap += [('_frozen_importlib', mangled, sz_mangled)]\n            elif mod_name == \"importlib._bootstrap_external\":\n                print('::: link ::: {} >>> {}'.format('_frozen_importlib_external', 'importlib._bootstrap_external'))\n                bootstrap += [('_frozen_importlib_external', mangled, sz_mangled)]\n\n    print('::: generate ::: {}'.format(FROZEN_H))\n    with io.open(os.path.join(args.output_dir, FROZEN_H), mode='wt', encoding='ascii') as frozen_h:\n        frozen_h.write(to_string('#pragma once\\n\\n'))\n        for i in range(len(inittab)):\n            m = inittab[i]\n            frozen_h.write(to_string('extern unsigned char {}[];\\n'.format(m.c_name)))\n            frozen_h.write(to_string('#define {} ((int)({}))\\n'.format(m.c_sz_name, m.frozen_size)))\n            if (i + 1) < len(inittab):\n                frozen_h.write(to_string('\\n'))\n\n    print('::: generate ::: {}'.format(FROZEN_C))\n    with io.open(os.path.join(args.output_dir, FROZEN_C), mode='wt', encoding='ascii') as frozen_c:\n        frozen_c.write(to_string('#include <Python.h>\\n'))\n        frozen_c.write(to_string('#include <{}>\\n'.format(FROZEN_H)))\n        frozen_c.write(to_string('\\n'))\n        frozen_c.write(to_string('struct _frozen {}[] = {{\\n'.format(FROZEN_C_TABLE)))\n        for py_name, c_name, c_sz_name in bootstrap:\n            frozen_c.write(to_string('    {{\"{}\", {}, {}}},\\n'.format(py_name, c_name, c_sz_name)))\n        for m in inittab:\n            frozen_c.write(to_string('    {{\"{}\", {}, {}}},\\n'.format(m.py_name, m.c_name, m.c_sz_name)))\n        frozen_c.write(to_string('    {0, 0, 0}\\n'))\n        frozen_c.write(to_string('};\\n'))\n\n    print('::: generate ::: {}'.format(FROZEN_MK))\n    with io.open(os.path.join(args.output_dir, FROZEN_MK), mode='wt', encoding='ascii') as frozen_mk:\n        for m in inittab:\n            frozen_mk.write(to_string('{}\\n'.format(m.c_file)))\n\n\nif __name__ == '__main__':\n    freeze_stdlib()\n"
  },
  {
    "path": "build/instruments/build-python/frozen.c.2.7",
    "content": "/* Minimal frozen modules initializer */\n\n#include <Python.h>\n\nstatic struct _frozen _PyImport_FrozenModules[] = {\n    {0, 0, 0}\n};\n\nstruct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules;\n"
  },
  {
    "path": "build/instruments/build-python/frozen.c.3.x",
    "content": "/* Minimal frozen modules initializer */\n\n#include <Python.h>\n#include <importlib.h>\n#include <importlib_external.h>\n\n\nstatic const struct _frozen _PyImport_FrozenModules[] = {\n    {\"_frozen_importlib\", _Py_M__importlib, (int)sizeof(_Py_M__importlib)},\n    {\"_frozen_importlib_external\", _Py_M__importlib_external, (int)sizeof(_Py_M__importlib_external)},\n    {0, 0, 0}\n};\n\nconst struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules;\n"
  },
  {
    "path": "build/instruments/build-python/getpath.c.2.7",
    "content": "#include <Python.h>\n#include <osdefs.h>\n\nstatic char EMPTY_STR[1] = {0};\nstatic char prog_path[MAXPATHLEN+1] = {0};\nstatic char* module_search_path = NULL;\nstatic int calculated = 0;\n\nstatic char* prefix = EMPTY_STR;\nstatic char* exec_prefix = EMPTY_STR;\n\nstatic void eval_full_path_of_executable()\n{\n    char* preset_progpath = Py_GetProgramName();\n    if (preset_progpath && (preset_progpath[0] == '/'))\n    {\n        strcpy(prog_path, preset_progpath);\n        return;\n    }\n    int size = readlink(\"/proc/self/exe\", prog_path, MAXPATHLEN);\n    if (size < 0)\n        size = 0;\n    prog_path[size] = 0;\n}\n\n#ifdef Py_ENABLE_SHARED\n\nstatic int is_file(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISREG(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic int is_dir(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISDIR(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic void eval_dirname_of_this_dso(char* dso_path)\n{\n    /* For some android platforms dladdr() doesn't work properly, so just scan '/proc/self/maps' directly */\n\n    void* self = &eval_dirname_of_this_dso;\n    FILE *stream = NULL;\n    char *line = NULL;\n    size_t len = 0;\n    ssize_t read;\n    int ret = 1;\n    int i;\n    void* addr1;\n    void* addr2;\n    char perm[64];\n    char offset[64];\n    char device[64];\n    char inode[64];\n    char path[MAXPATHLEN + 1];\n\n    stream = fopen(\"/proc/self/maps\", \"r\");\n    if (stream != NULL)\n    {\n        while ((read = getline(&line, &len, stream)) != -1)\n        {\n            if ((7 == sscanf(line, \"%p-%p %s %s %s %s %s\", &addr1, &addr2, perm, offset, device, inode, path)) && (path[0] == '/'))\n            {\n                if ((addr1 <= self) && (self < addr2))\n                {\n                    strncpy(dso_path, path, MAXPATHLEN);\n                    ret = 0;\n                    break;\n                }\n            }\n        }\n        free(line);\n        fclose(stream);\n    }\n    if (ret)\n    {\n        Py_FatalError(\"Cannot eval dirname of dso from '/proc/self/maps'\");\n    }\n    for (i = strlen(dso_path); i >= 0; --i)\n    {\n        if (dso_path[i] == '/')\n        {\n            dso_path[i + 1] = 0;\n            break;\n        }\n    }\n}\n\nstatic void calculate_path(void)\n{\n    eval_full_path_of_executable();\n\n    char dso_dir_path[MAXPATHLEN + 1];\n    eval_dirname_of_this_dso(dso_dir_path);\n\n    char exe_dir_path[MAXPATHLEN + 1];\n    strcpy(exe_dir_path, prog_path);\n    int i = strlen(exe_dir_path);\n    for (; i >= 0; --i)\n    {\n        if (exe_dir_path[i] == '/')\n        {\n            exe_dir_path[i + 1] = 0;\n            break;\n        }\n    }\n\n    char stdlib_zip_fname[32];\n    char stdlib_zip_path[MAXPATHLEN + 1];\n    snprintf(stdlib_zip_fname, 32, \"python%d%d.zip\", PY_MAJOR_VERSION, PY_MINOR_VERSION);\n    strcpy(stdlib_zip_path, dso_dir_path);\n    strcat(stdlib_zip_path, stdlib_zip_fname);\n    if (!is_file(stdlib_zip_path))\n    {\n        char error_message[2*MAXPATHLEN];\n        sprintf(error_message, \"stdlib not found by path '%s'\", stdlib_zip_path);\n        Py_FatalError(error_message);\n    }\n\n    char modules_path[MAXPATHLEN + 1];\n    strcpy(modules_path, exe_dir_path);\n    strcat(modules_path, \"modules\");\n    int have_modules_dir = is_dir(modules_path);\n\n    size_t search_path_len = 1 + strlen(stdlib_zip_path);\n    if (have_modules_dir)\n    {\n        search_path_len += 1 + strlen(modules_path);\n    }\n\n    char delim[2] = {DELIM, 0};\n    module_search_path = (char*)malloc(search_path_len);\n    strcpy(module_search_path, stdlib_zip_path);\n\n    if (have_modules_dir)\n    {\n        if (module_search_path[0])\n            strcat(module_search_path, delim);\n        strcat(module_search_path, modules_path);\n    }\n\n    calculated = 1;\n}\n\n#else\n\nstatic void calculate_path(void)\n{\n    eval_full_path_of_executable();\n    module_search_path = EMPTY_STR;\n    calculated = 1;\n}\n\n#endif /*Py_ENABLE_SHARED*/\n\n\n/* External interface */\n\nchar *\nPy_GetPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return module_search_path;\n}\n\nchar *\nPy_GetPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prefix;\n}\n\nchar *\nPy_GetExecPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return exec_prefix;\n}\n\nchar *\nPy_GetProgramFullPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prog_path;\n}\n"
  },
  {
    "path": "build/instruments/build-python/getpath.c.3.x",
    "content": "#include <Python.h>\n#include <osdefs.h>\n\nstatic wchar_t EMPTY_STR[1] = {0};\nstatic wchar_t* module_search_path = NULL;\nstatic wchar_t* prog_path = NULL;\nstatic int calculated = 0;\n\nstatic wchar_t* prefix = EMPTY_STR;\nstatic wchar_t* exec_prefix = EMPTY_STR;\n\n#ifdef Py_ENABLE_SHARED\n\nstatic int is_file(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISREG(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic int is_dir(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISDIR(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic void eval_full_path_of_executable(char* filename)\n{\n    int size = readlink(\"/proc/self/exe\", filename, MAXPATHLEN);\n    if (size < 0)\n        size = 0;\n    filename[size] = 0;\n}\n\nstatic void eval_dirname_of_this_dso(char* dso_path)\n{\n    /* For some android platforms dladdr() doesn't work properly, so just scan '/proc/self/maps' directly */\n\n    void* self = &eval_dirname_of_this_dso;\n    FILE *stream = NULL;\n    char *line = NULL;\n    size_t len = 0;\n    ssize_t read;\n    int ret = 1;\n    int i;\n    void* addr1;\n    void* addr2;\n    char perm[64];\n    char offset[64];\n    char device[64];\n    char inode[64];\n    char path[MAXPATHLEN + 1];\n\n    stream = fopen(\"/proc/self/maps\", \"r\");\n    if (stream != NULL)\n    {\n        while ((read = getline(&line, &len, stream)) != -1)\n        {\n            if ((7 == sscanf(line, \"%p-%p %s %s %s %s %s\", &addr1, &addr2, perm, offset, device, inode, path)) && (path[0] == '/'))\n            {\n                if ((addr1 <= self) && (self < addr2))\n                {\n                    strncpy(dso_path, path, MAXPATHLEN);\n                    ret = 0;\n                    break;\n                }\n            }\n        }\n        free(line);\n        fclose(stream);\n    }\n    if (ret)\n    {\n        Py_FatalError(\"Cannot eval dirname of dso from '/proc/self/maps'\");\n    }\n    for (i = strlen(dso_path); i >= 0; --i)\n    {\n        if (dso_path[i] == '/')\n        {\n            dso_path[i + 1] = 0;\n            break;\n        }\n    }\n}\n\n#endif /*Py_ENABLE_SHARED*/\n\nstatic void calculate_path(void)\n{\n    char exe_path[MAXPATHLEN + 1];\n    eval_full_path_of_executable(exe_path);\n\n#ifdef Py_ENABLE_SHARED\n    char dso_dir_path[MAXPATHLEN + 1];\n    eval_dirname_of_this_dso(dso_dir_path);\n#endif\n\n    if (!calculated)\n    {\n        wchar_t* preset_progpath = Py_GetProgramName();\n        if (preset_progpath && (preset_progpath[0] == '/'))\n            prog_path = preset_progpath;\n        else\n            prog_path = Py_DecodeLocale(exe_path, NULL);\n    }\n\n    int i = strlen(exe_path);\n    for (; i >= 0; --i)\n    {\n        if (exe_path[i] == '/')\n        {\n            exe_path[i + 1] = 0;\n            break;\n        }\n    }\n\n    wchar_t* stdlib_zip_path_w = NULL;\n    int have_stdlib_zip = 0;\n\n    wchar_t* modules_path_w = NULL;\n    int have_modules_dir = 0;\n\n#ifdef Py_ENABLE_SHARED\n    char stdlib_zip_fname[32];\n    snprintf(stdlib_zip_fname, 32, \"python%d%d.zip\", PY_MAJOR_VERSION, PY_MINOR_VERSION);\n\n    char stdlib_zip_path[MAXPATHLEN + 1];\n    strcpy(stdlib_zip_path, dso_dir_path);\n    strcat(stdlib_zip_path, stdlib_zip_fname);\n    have_stdlib_zip = is_file(stdlib_zip_path);\n    if (!have_stdlib_zip)\n    {\n        char error_message[2*MAXPATHLEN];\n        sprintf(error_message, \"stdlib not found by path '%s'\", stdlib_zip_path);\n        Py_FatalError(error_message);\n    }\n    stdlib_zip_path_w = Py_DecodeLocale(stdlib_zip_path, NULL);\n\n    char modules_path[MAXPATHLEN + 1];\n    strcpy(modules_path, exe_path);\n    strcat(modules_path, \"modules\");\n    have_modules_dir = is_dir(modules_path);\n    if (have_modules_dir)\n    {\n        modules_path_w = Py_DecodeLocale(modules_path, NULL);\n    }\n#endif\n\n    size_t search_path_len = 0;\n    if (have_stdlib_zip)\n    {\n        search_path_len += 1 + wcslen(stdlib_zip_path_w);\n    }\n    if (have_modules_dir)\n    {\n        search_path_len += 1 + wcslen(modules_path_w);\n    }\n    if (module_search_path && module_search_path[0])\n    {\n        search_path_len += 1 + wcslen(module_search_path);\n    }\n\n    wchar_t delim[2] = {DELIM, 0};\n    wchar_t* new_search_path = (wchar_t*)PyMem_RawMalloc(search_path_len * sizeof(wchar_t));\n    new_search_path[0] = 0;\n\n    if (have_stdlib_zip)\n    {\n        if (new_search_path[0])\n            wcscat(new_search_path, delim);\n        wcscat(new_search_path, stdlib_zip_path_w);\n    }\n    if (have_modules_dir)\n    {\n        if (new_search_path[0])\n            wcscat(new_search_path, delim);\n        wcscat(new_search_path, modules_path_w);\n    }\n    if (module_search_path && module_search_path[0])\n    {\n        if (new_search_path[0])\n            wcscat(new_search_path, delim);\n        wcscat(new_search_path, module_search_path);\n    }\n\n    if (stdlib_zip_path_w)\n        PyMem_RawFree(stdlib_zip_path_w);\n\n    if (modules_path_w)\n        PyMem_RawFree(modules_path_w);\n\n    if (module_search_path)\n        PyMem_RawFree(module_search_path);\n\n    module_search_path = new_search_path;\n    calculated = 1;\n}\n\n/* External interface */\n\nwchar_t* Py_GetPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return module_search_path;\n}\n\nwchar_t* Py_GetPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prefix;\n}\n\nwchar_t* Py_GetExecPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return exec_prefix;\n}\n\nwchar_t* Py_GetProgramFullPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prog_path;\n}\n\nvoid Py_SetPath(const wchar_t *path)\n{\n    if (module_search_path != NULL)\n    {\n        PyMem_RawFree(module_search_path);\n        module_search_path = NULL;\n    }\n    if (path != NULL)\n    {\n        module_search_path = (wchar_t*)PyMem_RawMalloc((wcslen(path) + 1) * sizeof(wchar_t));\n        wcscpy(module_search_path, path);\n    }\n    calculate_path();\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/CMakeLists.txt.2.7",
    "content": "set(CMAKE_BUILD_TYPE RELEASE)\n\nif(UNIX AND NOT APPLE)\n  set(LINUX TRUE)\nendif()\n\nif(WIN32)\n  set(PYCORE_TARGET_NAME \"python27\")\nelse()\n  set(PYCORE_TARGET_NAME \"python2.7\")\nendif()\n\nif(LINUX)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE -DPLATFORM=\\\\\\\"linux\\\\\\\"\")\n  set(CMAKE_SHARED_LINKER_FLAGS \"-Wl,--no-undefined\")\n  set(MY_DL_LIBS m pthread util dl)\nelseif(APPLE)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE -DPLATFORM=\\\\\\\"darwin\\\\\\\"\")\n  set(CMAKE_SHARED_LINKER_FLAGS \"-framework SystemConfiguration -framework CoreFoundation\")\n  set(MY_DL_LIBS m pthread util dl)\nelseif(WIN32)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE\")\nelse()\n  message(FATAL_ERROR \"Unknown platform\")\nendif()\n\ninclude_directories(${MY_PYTHON_SRC_ROOT}/Include)\ninclude_directories(${MY_PYTHON_SRC_ROOT}/Modules/zlib)\ninclude_directories(${CMAKE_CURRENT_LIST_DIR})\n\nset(SRC_FILES\n  ${CMAKE_CURRENT_LIST_DIR}/config.c\n  ${CMAKE_CURRENT_LIST_DIR}/getpath.c\n\n  ${MY_PYTHON_SRC_ROOT}/Python/_warnings.c\n  ${MY_PYTHON_SRC_ROOT}/Python/asdl.c\n  ${MY_PYTHON_SRC_ROOT}/Python/ast.c\n  ${MY_PYTHON_SRC_ROOT}/Python/bltinmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Python/ceval.c\n  ${MY_PYTHON_SRC_ROOT}/Python/codecs.c\n  ${MY_PYTHON_SRC_ROOT}/Python/compile.c\n  ${MY_PYTHON_SRC_ROOT}/Python/dtoa.c\n  ${MY_PYTHON_SRC_ROOT}/Python/errors.c\n  ${MY_PYTHON_SRC_ROOT}/Python/formatter_string.c\n  ${MY_PYTHON_SRC_ROOT}/Python/formatter_unicode.c\n  ${MY_PYTHON_SRC_ROOT}/Python/frozen.c\n  ${MY_PYTHON_SRC_ROOT}/Python/future.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getargs.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getcompiler.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getcopyright.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getopt.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getplatform.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getversion.c\n  ${MY_PYTHON_SRC_ROOT}/Python/graminit.c\n  ${MY_PYTHON_SRC_ROOT}/Python/import.c\n  ${MY_PYTHON_SRC_ROOT}/Python/importdl.c\n  ${MY_PYTHON_SRC_ROOT}/Python/marshal.c\n  ${MY_PYTHON_SRC_ROOT}/Python/modsupport.c\n  ${MY_PYTHON_SRC_ROOT}/Python/mysnprintf.c\n  ${MY_PYTHON_SRC_ROOT}/Python/mystrtoul.c\n  ${MY_PYTHON_SRC_ROOT}/Python/peephole.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyarena.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyctype.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyfpe.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pymath.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystate.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystrcmp.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystrtod.c\n  ${MY_PYTHON_SRC_ROOT}/Python/Python-ast.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pythonrun.c\n  ${MY_PYTHON_SRC_ROOT}/Python/random.c\n  ${MY_PYTHON_SRC_ROOT}/Python/structmember.c\n  ${MY_PYTHON_SRC_ROOT}/Python/symtable.c\n  ${MY_PYTHON_SRC_ROOT}/Python/sysmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Python/thread.c\n  ${MY_PYTHON_SRC_ROOT}/Python/traceback.c\n\n  ${MY_PYTHON_SRC_ROOT}/Parser/acceler.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/bitset.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/firstsets.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/grammar.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/grammar1.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/listnode.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/metagrammar.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/myreadline.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/node.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/parser.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/parsetok.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/tokenizer.c\n\n  ${MY_PYTHON_SRC_ROOT}/Objects/abstract.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/boolobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bufferobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bytearrayobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bytes_methods.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/capsule.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/cellobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/classobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/cobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/codeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/complexobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/descrobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/dictobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/enumobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/exceptions.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/fileobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/floatobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/frameobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/funcobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/genobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/intobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/iterobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/listobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/longobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/memoryobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/methodobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/moduleobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/object.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/obmalloc.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/rangeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/setobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/sliceobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/stringobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/structseq.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/tupleobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/typeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/unicodectype.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/unicodeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/weakrefobject.c\n\n  ${MY_PYTHON_SRC_ROOT}/Modules/_bisectmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_codecsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_collectionsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_csv.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_functoolsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_heapqmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_hotshot.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/_iomodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/_iomodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/bufferedio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/bytesio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/fileio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/iobase.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/stringio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/textio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_json.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_localemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_lsprof.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_math.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_randommodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_sre.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_struct.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_weakref.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/arraymodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/audioop.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/binascii.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_cn.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_hk.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_iso2022.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_jp.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_kr.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_tw.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/multibytecodec.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cmathmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cPickle.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cStringIO.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/datetimemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/errnomodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/future_builtins.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/gcmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/getbuildinfo.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/itertoolsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/main.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/mathmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/md5.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/md5module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/mmapmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/operator.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/parsermodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/rotatingtree.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/sha256module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/sha512module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/shamodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/signalmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/stropmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/symtablemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/threadmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/timemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/xxsubtype.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zipimport.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/adler32.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/crc32.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/deflate.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/infback.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inffast.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inflate.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inftrees.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/trees.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/zutil.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlibmodule.c\n)\n\nset(SRC_FILES_POSIX\n  ${MY_PYTHON_SRC_ROOT}/Modules/fcntlmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/pwdmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/termios.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/posixmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Python/dynload_shlib.c\n)\n\nset(SRC_FILES_WINAPI\n  ${MY_PYTHON_SRC_ROOT}/PC/_subprocess.c\n  ${MY_PYTHON_SRC_ROOT}/PC/_winreg.c\n  ${MY_PYTHON_SRC_ROOT}/PC/dl_nt.c\n  ${MY_PYTHON_SRC_ROOT}/PC/import_nt.c\n  ${MY_PYTHON_SRC_ROOT}/PC/msvcrtmodule.c\n  ${CMAKE_CURRENT_LIST_DIR}/dynload_win.c\n  ${CMAKE_CURRENT_LIST_DIR}/posixmodule.c\n)\n\nset(SRC_FILES_DARWIN\n  ${MY_PYTHON_SRC_ROOT}/Mac/Modules/_scproxy.c\n)\n\nif(WIN32)\n  list(APPEND SRC_FILES ${SRC_FILES_WINAPI})\nelse()\n  list(APPEND SRC_FILES ${SRC_FILES_POSIX})\nendif()\n\nif(APPLE)\n  list(APPEND SRC_FILES ${SRC_FILES_DARWIN})\nendif()\n\nadd_library(${PYCORE_TARGET_NAME} SHARED ${SRC_FILES})\ntarget_link_libraries(${PYCORE_TARGET_NAME} ${MY_DL_LIBS})\nset_target_properties(${PYCORE_TARGET_NAME} PROPERTIES DEFINE_SYMBOL \"Py_ENABLE_SHARED\")\n\nif(WIN32)\n  set_target_properties(${PYCORE_TARGET_NAME} PROPERTIES PREFIX \"\")\nendif()\n\nif (APPLE)\n  set_target_properties(${PYCORE_TARGET_NAME} PROPERTIES SUFFIX \".so\")\n  add_custom_command(TARGET ${PYCORE_TARGET_NAME} POST_BUILD COMMAND\n    install_name_tool -id lib${PYCORE_TARGET_NAME}.so lib${PYCORE_TARGET_NAME}.so)\nendif()\n"
  },
  {
    "path": "build/instruments/build-python/host/CMakeLists.txt.3.5",
    "content": "set(CMAKE_BUILD_TYPE RELEASE)\n\nif(UNIX AND NOT APPLE)\n  set(LINUX TRUE)\nendif()\n\nif(WIN32)\n  set(PYCORE_TARGET_NAME \"python35\")\nelse()\n  set(PYCORE_TARGET_NAME \"python3.5m\")\nendif()\n\nif(LINUX)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE -DPLATFORM=\\\\\\\"linux\\\\\\\" -DSOABI=\\\\\\\"cpython-3.5m\\\\\\\"\")\n  set(CMAKE_SHARED_LINKER_FLAGS \"-Wl,--no-undefined\")\n  set(MY_DL_LIBS m pthread util rt dl)\nelseif(APPLE)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE -DPLATFORM=\\\\\\\"darwin\\\\\\\" -DSOABI=\\\\\\\"cpython-3.5m\\\\\\\"\")\n  set(CMAKE_SHARED_LINKER_FLAGS \"-framework SystemConfiguration -framework CoreFoundation\")\n  set(MY_DL_LIBS m pthread util dl)\nelseif(WIN32)\n  set(CMAKE_C_FLAGS \"-DPy_BUILD_CORE -D_WIN32_WINNT=0x0600\")\n  set(MY_DL_LIBS ws2_32)\nelse()\n  message(FATAL_ERROR \"Unknown platform\")\nendif()\n\ninclude_directories(${MY_PYTHON_SRC_ROOT}/Include)\ninclude_directories(${MY_PYTHON_SRC_ROOT}/Modules/zlib)\ninclude_directories(${CMAKE_CURRENT_LIST_DIR})\nif(WIN32)\n  include_directories(${MY_PYTHON_SRC_ROOT}/Modules)\nendif()\n\nset(SRC_FILES\n  ${CMAKE_CURRENT_LIST_DIR}/config.c\n  ${CMAKE_CURRENT_LIST_DIR}/getpath.c\n\n  ${MY_PYTHON_SRC_ROOT}/Python/_warnings.c\n  ${MY_PYTHON_SRC_ROOT}/Python/asdl.c\n  ${MY_PYTHON_SRC_ROOT}/Python/ast.c\n  ${MY_PYTHON_SRC_ROOT}/Python/bltinmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Python/ceval.c\n  ${MY_PYTHON_SRC_ROOT}/Python/codecs.c\n  ${MY_PYTHON_SRC_ROOT}/Python/compile.c\n  ${MY_PYTHON_SRC_ROOT}/Python/dtoa.c\n  ${MY_PYTHON_SRC_ROOT}/Python/dynamic_annotations.c\n  ${MY_PYTHON_SRC_ROOT}/Python/errors.c\n  ${MY_PYTHON_SRC_ROOT}/Python/fileutils.c\n  ${MY_PYTHON_SRC_ROOT}/Python/formatter_unicode.c\n  ${MY_PYTHON_SRC_ROOT}/Python/frozen.c\n  ${MY_PYTHON_SRC_ROOT}/Python/future.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getargs.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getcompiler.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getcopyright.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getopt.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getplatform.c\n  ${MY_PYTHON_SRC_ROOT}/Python/getversion.c\n  ${MY_PYTHON_SRC_ROOT}/Python/graminit.c\n  ${MY_PYTHON_SRC_ROOT}/Python/import.c\n  ${MY_PYTHON_SRC_ROOT}/Python/importdl.c\n  ${MY_PYTHON_SRC_ROOT}/Python/marshal.c\n  ${MY_PYTHON_SRC_ROOT}/Python/modsupport.c\n  ${MY_PYTHON_SRC_ROOT}/Python/mysnprintf.c\n  ${MY_PYTHON_SRC_ROOT}/Python/mystrtoul.c\n  ${MY_PYTHON_SRC_ROOT}/Python/peephole.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyarena.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyctype.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyfpe.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pyhash.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pylifecycle.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pymath.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystate.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystrcmp.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystrhex.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pystrtod.c\n  ${MY_PYTHON_SRC_ROOT}/Python/Python-ast.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pythonrun.c\n  ${MY_PYTHON_SRC_ROOT}/Python/pytime.c\n  ${MY_PYTHON_SRC_ROOT}/Python/random.c\n  ${MY_PYTHON_SRC_ROOT}/Python/structmember.c\n  ${MY_PYTHON_SRC_ROOT}/Python/symtable.c\n  ${MY_PYTHON_SRC_ROOT}/Python/sysmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Python/thread.c\n  ${MY_PYTHON_SRC_ROOT}/Python/traceback.c\n\n  ${MY_PYTHON_SRC_ROOT}/Parser/acceler.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/bitset.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/firstsets.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/grammar.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/grammar1.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/listnode.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/metagrammar.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/myreadline.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/node.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/parser.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/parsetok.c\n  ${MY_PYTHON_SRC_ROOT}/Parser/tokenizer.c\n\n  ${MY_PYTHON_SRC_ROOT}/Objects/abstract.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/accu.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/boolobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bytearrayobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bytes_methods.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/bytesobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/capsule.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/cellobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/classobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/codeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/complexobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/descrobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/dictobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/enumobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/exceptions.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/fileobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/floatobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/frameobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/funcobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/genobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/iterobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/listobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/longobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/memoryobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/methodobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/moduleobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/namespaceobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/object.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/obmalloc.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/odictobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/rangeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/setobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/sliceobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/structseq.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/tupleobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/typeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/unicodectype.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/unicodeobject.c\n  ${MY_PYTHON_SRC_ROOT}/Objects/weakrefobject.c\n\n  ${MY_PYTHON_SRC_ROOT}/Modules/_bisectmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_codecsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_collectionsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_csv.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_datetimemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_functoolsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_heapqmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/_iomodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/bufferedio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/bytesio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/fileio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/iobase.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/stringio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_io/textio.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_json.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_localemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_lsprof.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_math.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_opcode.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_operator.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_pickle.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_randommodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_sre.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_stat.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_struct.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_threadmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_tracemalloc.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_weakref.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/arraymodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/atexitmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/audioop.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/binascii.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_cn.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_hk.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_iso2022.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_jp.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_kr.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/_codecs_tw.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cjkcodecs/multibytecodec.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/cmathmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/errnomodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/faulthandler.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/gcmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/getbuildinfo.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/hashtable.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/itertoolsmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/main.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/mathmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/md5module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/mmapmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/parsermodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/rotatingtree.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/sha1module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/sha256module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/sha512module.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/signalmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/symtablemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/timemodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/xxsubtype.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zipimport.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/adler32.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/crc32.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/deflate.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/infback.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inffast.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inflate.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inftrees.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/trees.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/zutil.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/zlibmodule.c\n)\n\nset(SRC_FILES_POSIX\n  ${MY_PYTHON_SRC_ROOT}/Modules/_posixsubprocess.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/fcntlmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/posixmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/pwdmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/termios.c\n  ${MY_PYTHON_SRC_ROOT}/Python/dynload_shlib.c\n)\n\nset(SRC_FILES_WINAPI\n  ${CMAKE_CURRENT_LIST_DIR}/dynload_win.c\n  ${CMAKE_CURRENT_LIST_DIR}/posixmodule.c\n  ${MY_PYTHON_SRC_ROOT}/Modules/_winapi.c\n  ${MY_PYTHON_SRC_ROOT}/PC/dl_nt.c\n  ${MY_PYTHON_SRC_ROOT}/PC/msvcrtmodule.c\n  ${MY_PYTHON_SRC_ROOT}/PC/winreg.c\n)\n\nset(SRC_FILES_DARWIN\n  ${MY_PYTHON_SRC_ROOT}/Modules/_scproxy.c\n)\n\nif(WIN32)\n  list(APPEND SRC_FILES ${SRC_FILES_WINAPI})\nelse()\n  list(APPEND SRC_FILES ${SRC_FILES_POSIX})\nendif()\n\nif(APPLE)\n  list(APPEND SRC_FILES ${SRC_FILES_DARWIN})\nendif()\n\nadd_library(${PYCORE_TARGET_NAME} SHARED ${SRC_FILES})\ntarget_link_libraries(${PYCORE_TARGET_NAME} ${MY_DL_LIBS})\nset_target_properties(${PYCORE_TARGET_NAME} PROPERTIES DEFINE_SYMBOL \"Py_ENABLE_SHARED\")\n\nif(WIN32)\n  set_target_properties(${PYCORE_TARGET_NAME} PROPERTIES PREFIX \"\")\nendif()\n\nif (APPLE)\n  set_target_properties(${PYCORE_TARGET_NAME} PROPERTIES SUFFIX \".so\")\n  add_custom_command(TARGET ${PYCORE_TARGET_NAME} POST_BUILD COMMAND\n    install_name_tool -id lib${PYCORE_TARGET_NAME}.so lib${PYCORE_TARGET_NAME}.so)\nendif()\n"
  },
  {
    "path": "build/instruments/build-python/host/callproc.c.2.7.mingw.patch",
    "content": "--- callproc.c\t2016-01-27 10:53:11.000000000 +0300\n+++ callproc.c.2.7.mingw\t2016-03-31 07:20:15.000000000 +0300\n@@ -779,7 +779,7 @@\n     int *space;\n     ffi_cif cif;\n     int cc;\n-#ifdef MS_WIN32\n+#if defined(MS_WIN32) && !defined(__MINGW32__)\n     int delta;\n #ifndef DONT_USE_SEH\n     DWORD dwExceptionCode = 0;\n@@ -831,8 +831,10 @@\n #ifndef DONT_USE_SEH\n     __try {\n #endif\n+#ifndef __MINGW32__\n         delta =\n #endif\n+#endif\n                 ffi_call(&cif, (void *)pProc, resmem, avalues);\n #ifdef MS_WIN32\n #ifndef DONT_USE_SEH\n@@ -865,6 +867,7 @@\n         return -1;\n     }\n #endif\n+#ifndef __MINGW32__\n #ifdef MS_WIN64\n     if (delta != 0) {\n         PyErr_Format(PyExc_RuntimeError,\n@@ -895,6 +898,7 @@\n     }\n #endif\n #endif\n+#endif\n     if ((flags & FUNCFLAG_PYTHONAPI) && PyErr_Occurred())\n         return -1;\n     return 0;\n"
  },
  {
    "path": "build/instruments/build-python/host/callproc.c.3.5.mingw.patch",
    "content": "--- callproc.c\t2016-01-27 10:54:56.000000000 +0300\n+++ callproc.c.3.5.mingw\t2016-03-31 07:40:58.000000000 +0300\n@@ -754,7 +754,7 @@\n     int *space;\n     ffi_cif cif;\n     int cc;\n-#ifdef MS_WIN32\n+#if defined(MS_WIN32) && !defined(__MINGW32__)\n     int delta;\n #ifndef DONT_USE_SEH\n     DWORD dwExceptionCode = 0;\n@@ -806,8 +806,10 @@\n #ifndef DONT_USE_SEH\n     __try {\n #endif\n+#ifndef __MINGW32__\n         delta =\n #endif\n+#endif\n                 ffi_call(&cif, (void *)pProc, resmem, avalues);\n #ifdef MS_WIN32\n #ifndef DONT_USE_SEH\n@@ -840,6 +842,7 @@\n         return -1;\n     }\n #endif\n+#ifndef __MINGW32__\n #ifdef MS_WIN64\n     if (delta != 0) {\n         PyErr_Format(PyExc_RuntimeError,\n@@ -870,6 +873,7 @@\n     }\n #endif\n #endif\n+#endif\n     if ((flags & FUNCFLAG_PYTHONAPI) && PyErr_Occurred())\n         return -1;\n     return 0;\n"
  },
  {
    "path": "build/instruments/build-python/host/config.c.2.7",
    "content": "#include <Python.h>\n\n#ifdef _WIN32\nextern void initnt(void);\nextern void init_winreg(void);\nextern void initmsvcrt(void);\nextern void init_subprocess(void);\n#else\nextern void initposix(void);\nextern void initpwd(void);\nextern void initfcntl(void);\nextern void inittermios(void);\n#endif\n#ifdef __APPLE__\nextern PyObject* init_scproxy(void);\n#endif\n\nextern void initaudioop(void);\nextern void init_locale(void);\nextern void initarray(void);\nextern void initbinascii(void);\nextern void initcmath(void);\nextern void initerrno(void);\nextern void initfuture_builtins(void);\nextern void initgc(void);\nextern void initmath(void);\nextern void init_md5(void);\nextern void initoperator(void);\nextern void initsignal(void);\nextern void init_sha(void);\nextern void init_sha256(void);\nextern void init_sha512(void);\nextern void initstrop(void);\nextern void inittime(void);\nextern void initthread(void);\nextern void initcStringIO(void);\nextern void initcPickle(void);\nextern void init_codecs(void);\nextern void init_weakref(void);\nextern void init_hotshot(void);\nextern void initxxsubtype(void);\nextern void initzipimport(void);\nextern void init_random(void);\nextern void inititertools(void);\nextern void init_collections(void);\nextern void init_heapq(void);\nextern void init_bisect(void);\nextern void init_symtable(void);\nextern void initmmap(void);\nextern void init_csv(void);\nextern void init_sre(void);\nextern void initparser(void);\nextern void init_struct(void);\nextern void initdatetime(void);\nextern void init_functools(void);\nextern void init_json(void);\nextern void initzlib(void);\n\nextern void init_multibytecodec(void);\nextern void init_codecs_cn(void);\nextern void init_codecs_hk(void);\nextern void init_codecs_iso2022(void);\nextern void init_codecs_jp(void);\nextern void init_codecs_kr(void);\nextern void init_codecs_tw(void);\nextern void init_lsprof(void);\nextern void init_ast(void);\nextern void init_io(void);\nextern void _PyWarnings_Init(void);\n\nextern void PyMarshal_Init(void);\nextern void initimp(void);\n\nstruct _inittab _PyImport_Inittab[] = {\n#ifdef _WIN32\n    {\"msvcrt\", initmsvcrt},\n    {\"nt\", initnt},\n    {\"_winreg\", init_winreg},\n    {\"_subprocess\", init_subprocess},\n#else\n    {\"posix\", initposix},\n    {\"pwd\", initpwd},\n    {\"fcntl\", initfcntl},\n    {\"termios\", inittermios},\n#endif\n#ifdef __APPLE__\n    {\"_scproxy\", init_scproxy},\n#endif\n    {\"array\", initarray},\n    {\"_ast\", init_ast},\n    {\"audioop\", initaudioop},\n    {\"binascii\", initbinascii},\n    {\"cmath\", initcmath},\n    {\"errno\", initerrno},\n    {\"future_builtins\", initfuture_builtins},\n    {\"gc\", initgc},\n    {\"math\", initmath},\n    {\"_md5\", init_md5},\n    {\"operator\", initoperator},\n    {\"signal\", initsignal},\n    {\"_sha\", init_sha},\n    {\"_sha256\", init_sha256},\n    {\"_sha512\", init_sha512},\n    {\"strop\", initstrop},\n    {\"time\", inittime},\n    {\"thread\", initthread},\n    {\"cStringIO\", initcStringIO},\n    {\"cPickle\", initcPickle},\n    {\"_locale\", init_locale},\n    {\"_codecs\", init_codecs},\n    {\"_weakref\", init_weakref},\n    {\"_hotshot\", init_hotshot},\n    {\"_random\", init_random},\n    {\"_bisect\", init_bisect},\n    {\"_heapq\", init_heapq},\n    {\"_lsprof\", init_lsprof},\n    {\"itertools\", inititertools},\n    {\"_collections\", init_collections},\n    {\"_symtable\", init_symtable},\n    {\"mmap\", initmmap},\n    {\"_csv\", init_csv},\n    {\"_sre\", init_sre},\n    {\"parser\", initparser},\n    {\"_struct\", init_struct},\n    {\"datetime\", initdatetime},\n    {\"_functools\", init_functools},\n    {\"_json\", init_json},\n    {\"xxsubtype\", initxxsubtype},\n    {\"zipimport\", initzipimport},\n    {\"zlib\", initzlib},\n\n    /* CJK codecs */\n    {\"_multibytecodec\", init_multibytecodec},\n    {\"_codecs_cn\", init_codecs_cn},\n    {\"_codecs_hk\", init_codecs_hk},\n    {\"_codecs_iso2022\", init_codecs_iso2022},\n    {\"_codecs_jp\", init_codecs_jp},\n    {\"_codecs_kr\", init_codecs_kr},\n    {\"_codecs_tw\", init_codecs_tw},\n\n    /* This module \"lives in\" with marshal.c */\n    {\"marshal\", PyMarshal_Init},\n\n    /* This lives it with import.c */\n    {\"imp\", initimp},\n\n    /* These entries are here for sys.builtin_module_names */\n    {\"__main__\", NULL},\n    {\"__builtin__\", NULL},\n    {\"sys\", NULL},\n    {\"exceptions\", NULL},\n    {\"_warnings\", _PyWarnings_Init},\n\n    {\"_io\", init_io},\n\n    /* Sentinel */\n    {0, 0}\n};\n"
  },
  {
    "path": "build/instruments/build-python/host/config.c.3.5",
    "content": "#include <Python.h>\n\n#ifdef _WIN32\nextern PyObject* PyInit_nt(void);\nextern PyObject* PyInit_msvcrt(void);\nextern PyObject* PyInit__winapi(void);\nextern PyObject* PyInit_winreg(void);\n#else\nextern PyObject* PyInit_posix(void);\nextern PyObject* PyInit_pwd(void);\nextern PyObject* PyInit_fcntl(void);\nextern PyObject* PyInit__posixsubprocess(void);\nextern PyObject* PyInit_termios(void);\n#endif\n#ifdef __APPLE__\nextern PyObject* PyInit__scproxy(void);\n#endif\n\nextern PyObject* PyInit_audioop(void);\nextern PyObject* PyInit__locale(void);\nextern PyObject* PyInit_array(void);\nextern PyObject* PyInit_binascii(void);\nextern PyObject* PyInit_cmath(void);\nextern PyObject* PyInit_errno(void);\nextern PyObject* PyInit_faulthandler(void);\nextern PyObject* PyInit__tracemalloc(void);\nextern PyObject* PyInit_gc(void);\nextern PyObject* PyInit_math(void);\nextern PyObject* PyInit__md5(void);\nextern PyObject* PyInit__operator(void);\nextern PyObject* PyInit__signal(void);\nextern PyObject* PyInit__sha1(void);\nextern PyObject* PyInit__sha256(void);\nextern PyObject* PyInit__sha512(void);\nextern PyObject* PyInit_time(void);\nextern PyObject* PyInit__thread(void);\nextern PyObject* PyInit__codecs(void);\nextern PyObject* PyInit__weakref(void);\nextern PyObject* PyInit_xxsubtype(void);\nextern PyObject* PyInit_zipimport(void);\nextern PyObject* PyInit__random(void);\nextern PyObject* PyInit_itertools(void);\nextern PyObject* PyInit__collections(void);\nextern PyObject* PyInit__heapq(void);\nextern PyObject* PyInit__bisect(void);\nextern PyObject* PyInit__symtable(void);\nextern PyObject* PyInit_mmap(void);\nextern PyObject* PyInit__csv(void);\nextern PyObject* PyInit__sre(void);\nextern PyObject* PyInit_parser(void);\nextern PyObject* PyInit__struct(void);\nextern PyObject* PyInit__datetime(void);\nextern PyObject* PyInit__functools(void);\nextern PyObject* PyInit__json(void);\nextern PyObject* PyInit_zlib(void);\nextern PyObject* PyInit__multibytecodec(void);\nextern PyObject* PyInit__codecs_cn(void);\nextern PyObject* PyInit__codecs_hk(void);\nextern PyObject* PyInit__codecs_iso2022(void);\nextern PyObject* PyInit__codecs_jp(void);\nextern PyObject* PyInit__codecs_kr(void);\nextern PyObject* PyInit__codecs_tw(void);\nextern PyObject* PyInit__winapi(void);\nextern PyObject* PyInit__lsprof(void);\nextern PyObject* PyInit__ast(void);\nextern PyObject* PyInit__io(void);\nextern PyObject* PyInit__pickle(void);\nextern PyObject* PyInit_atexit(void);\nextern PyObject* _PyWarnings_Init(void);\nextern PyObject* PyInit__string(void);\nextern PyObject* PyInit__stat(void);\nextern PyObject* PyInit__opcode(void);\nextern PyObject* PyMarshal_Init(void);\nextern PyObject* PyInit_imp(void);\n\nstruct _inittab _PyImport_Inittab[] = {\n#ifdef _WIN32\n    {\"msvcrt\", PyInit_msvcrt},\n    {\"nt\", PyInit_nt},\n    {\"_winapi\", PyInit__winapi},\n    {\"winreg\", PyInit_winreg},\n#else\n    {\"posix\", PyInit_posix},\n    {\"pwd\", PyInit_pwd},\n    {\"fcntl\", PyInit_fcntl},\n    {\"_posixsubprocess\", PyInit__posixsubprocess},\n    {\"termios\", PyInit_termios},\n#endif\n#ifdef __APPLE__\n    {\"_scproxy\", PyInit__scproxy},\n#endif\n    {\"audioop\", PyInit_audioop},\n    {\"_locale\", PyInit__locale},\n    {\"array\", PyInit_array},\n    {\"_ast\", PyInit__ast},\n    {\"binascii\", PyInit_binascii},\n    {\"cmath\", PyInit_cmath},\n    {\"errno\", PyInit_errno},\n    {\"faulthandler\", PyInit_faulthandler},\n    {\"gc\", PyInit_gc},\n    {\"math\", PyInit_math},\n    {\"_operator\", PyInit__operator},\n    {\"_signal\", PyInit__signal},\n    {\"_md5\", PyInit__md5},\n    {\"_sha1\", PyInit__sha1},\n    {\"_sha256\", PyInit__sha256},\n    {\"_sha512\", PyInit__sha512},\n    {\"time\", PyInit_time},\n    {\"_thread\", PyInit__thread},\n    {\"_tracemalloc\", PyInit__tracemalloc},\n    {\"_codecs\", PyInit__codecs},\n    {\"_weakref\", PyInit__weakref},\n    {\"_random\", PyInit__random},\n    {\"_bisect\", PyInit__bisect},\n    {\"_heapq\", PyInit__heapq},\n    {\"_lsprof\", PyInit__lsprof},\n    {\"itertools\", PyInit_itertools},\n    {\"_collections\", PyInit__collections},\n    {\"_symtable\", PyInit__symtable},\n    {\"mmap\", PyInit_mmap},\n    {\"_csv\", PyInit__csv},\n    {\"_sre\", PyInit__sre},\n    {\"parser\", PyInit_parser},\n    {\"_struct\", PyInit__struct},\n    {\"_datetime\", PyInit__datetime},\n    {\"_functools\", PyInit__functools},\n    {\"_json\", PyInit__json},\n\n    {\"xxsubtype\", PyInit_xxsubtype},\n    {\"zipimport\", PyInit_zipimport},\n    {\"zlib\", PyInit_zlib},\n\n    /* CJK codecs */\n    {\"_multibytecodec\", PyInit__multibytecodec},\n    {\"_codecs_cn\", PyInit__codecs_cn},\n    {\"_codecs_hk\", PyInit__codecs_hk},\n    {\"_codecs_iso2022\", PyInit__codecs_iso2022},\n    {\"_codecs_jp\", PyInit__codecs_jp},\n    {\"_codecs_kr\", PyInit__codecs_kr},\n    {\"_codecs_tw\", PyInit__codecs_tw},\n\n    /* This module \"lives in\" with marshal.c */\n    {\"marshal\", PyMarshal_Init},\n\n    /* This lives it with import.c */\n    {\"_imp\", PyInit_imp},\n\n    /* These entries are here for sys.builtin_module_names */\n    {\"builtins\", NULL},\n    {\"sys\", NULL},\n    {\"_warnings\", _PyWarnings_Init},\n    {\"_string\", PyInit__string},\n\n    {\"_io\", PyInit__io},\n    {\"_pickle\", PyInit__pickle},\n    {\"atexit\", PyInit_atexit},\n    {\"_stat\", PyInit__stat},\n    {\"_opcode\", PyInit__opcode},\n\n    /* Sentinel */\n    {0, 0}\n};\n"
  },
  {
    "path": "build/instruments/build-python/host/dynload_win.c.2.7.mingw.patch",
    "content": "--- dynload_win.c\t2016-01-27 10:53:11.000000000 +0300\n+++ dynload_win.c.2.7.mingw\t2016-03-24 01:41:30.000000000 +0300\n@@ -28,6 +28,7 @@\n /* Case insensitive string compare, to avoid any dependencies on particular\n    C RTL implementations */\n \n+#ifndef __MINGW32__\n static int strcasecmp (char *string1, char *string2)\n {\n     int first, second;\n@@ -41,6 +42,7 @@\n \n     return (first - second);\n }\n+#endif\n \n \n /* Function to return the name of the \"python\" DLL that the supplied module\n"
  },
  {
    "path": "build/instruments/build-python/host/dynload_win.c.3.5.mingw.patch",
    "content": "--- dynload_win.c\t2016-01-27 10:54:56.000000000 +0300\n+++ dynload_win.c.3.5.mingw\t2016-03-25 11:08:08.969689462 +0300\n@@ -43,6 +43,7 @@\n /* Case insensitive string compare, to avoid any dependencies on particular\n    C RTL implementations */\n \n+#ifndef __MINGW32__\n static int strcasecmp (char *string1, char *string2)\n {\n     int first, second;\n@@ -56,7 +57,7 @@\n \n     return (first - second);\n }\n-\n+#endif\n \n /* Function to return the name of the \"python\" DLL that the supplied module\n    directly imports.  Looks through the list of imported modules and\n"
  },
  {
    "path": "build/instruments/build-python/host/getpath.c.2.7",
    "content": "#include <Python.h>\n#include <osdefs.h>\n\n#ifdef _WIN32\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#else\n#include <dlfcn.h>\n#endif\n\n#ifdef __APPLE__\n#include <libproc.h>\n#endif\n\nstatic char EMPTY_STR[1] = {0};\nstatic char prog_path[MAXPATHLEN+1] = {0};\nstatic char* module_search_path = NULL;\nstatic int calculated = 0;\n\nstatic char* prefix = EMPTY_STR;\nstatic char* exec_prefix = EMPTY_STR;\n\nstatic int is_file(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISREG(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic int is_dir(const char* filename)\n{\n    struct stat buf;\n    if (stat(filename, &buf) != 0)\n        return 0;\n    if (!S_ISDIR(buf.st_mode))\n        return 0;\n    return 1;\n}\n\nstatic int is_full_path(const char* path)\n{\n#ifdef _WIN32\n    char letter = 0;\n    char anchor = 0;\n    if (path && path[0] && path[1])\n    {\n        letter = path[0];\n        letter &= ~0x20;\n        anchor = path[1];\n    }\n    if (anchor == ':' && 'A' <= letter && letter <= 'Z')\n    {\n      return 1;\n    }\n    return 0;\n#else\n    if (path && path[0] == '/')\n    {\n        return 1;\n    }\n    return 0;\n#endif\n}\n\nstatic void eval_full_path_of_executable()\n{\n    char* preset_progpath = Py_GetProgramName();\n    if (is_full_path(preset_progpath))\n    {\n        strcpy(prog_path, preset_progpath);\n        return;\n    }\n#ifdef _WIN32\n    wchar_t buffer[MAXPATHLEN + 1];\n    wchar_t reparsed_path[MAXPATHLEN + 1];\n    DWORD attr;\n    DWORD size;\n    DWORD (WINAPI* GetFinalPathNameByHandleW_Ptr)(HANDLE, LPWSTR, DWORD, DWORD);\n    HANDLE fh_exe;\n    size = GetModuleFileNameW(NULL, buffer, MAXPATHLEN);\n    if (size == 0)\n        Py_FatalError(\"Cannot eval path of executable: got 0 from GetModuleFileNameW\");\n    if (size  > MAXPATHLEN)\n        size = MAXPATHLEN;\n    buffer[size] = 0;\n    GetFinalPathNameByHandleW_Ptr = (DWORD (WINAPI *)(HANDLE, LPWSTR, DWORD, DWORD))GetProcAddress(GetModuleHandle(\"kernel32\"), \"GetFinalPathNameByHandleW\");\n    if (GetFinalPathNameByHandleW_Ptr)\n    {\n        attr = GetFileAttributesW(buffer);\n        if (attr == INVALID_FILE_ATTRIBUTES)\n            Py_FatalError(\"Cannot eval path of executable: got INVALID_FILE_ATTRIBUTES from GetFileAttributesW\");\n        if (attr & FILE_ATTRIBUTE_REPARSE_POINT)\n        {\n            fh_exe = CreateFileW(buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n            if (fh_exe == INVALID_HANDLE_VALUE)\n                Py_FatalError(\"Cannot eval path of executable: got INVALID_HANDLE_VALUE from CreateFileW\");\n            size = (*GetFinalPathNameByHandleW_Ptr)(fh_exe, reparsed_path, MAX_PATH, 0);\n            if (size == 0)\n            {\n                CloseHandle(fh_exe);\n                Py_FatalError(\"Cannot eval path of executable: got 0 from GetFinalPathNameByHandleW\");\n            }\n            CloseHandle(fh_exe);\n            if (size > MAX_PATH)\n              size = MAX_PATH;\n            reparsed_path[size] = 0;\n            if (wcsncmp(L\"\\\\\\\\?\\\\\", reparsed_path, 4) == 0)\n                wcsncpy(buffer, &reparsed_path[4], MAX_PATH - 3);\n            else\n                wcsncpy(buffer, reparsed_path, MAX_PATH + 1);\n        }\n    }\n    WideCharToMultiByte(CP_ACP, 0, buffer, -1, prog_path, MAXPATHLEN+1, NULL, NULL);\n#else\n#ifdef __APPLE__\n    int size = proc_pidpath(getpid(), prog_path, MAXPATHLEN);\n#else\n    int size = readlink(\"/proc/self/exe\", prog_path, MAXPATHLEN);\n#endif\n    if (size < 0)\n        size = 0;\n    prog_path[size] = 0;\n#endif\n}\n\nstatic void eval_dirname_of_this_dso(char* dso_path)\n{\n    dso_path[0] = 0;\n#ifdef _WIN32\n    extern HANDLE PyWin_DLLhModule;\n    if (PyWin_DLLhModule == NULL)\n    {\n        Py_FatalError(\"Cannot eval dirname of dso: HANDLE PyWin_DLLhModule is NULL\");\n    }\n    wchar_t buffer[MAXPATHLEN + 1];\n    GetModuleFileNameW(PyWin_DLLhModule, buffer, MAXPATHLEN);\n    size_t i = wcslen(buffer);\n    for (; i >= 0; --i)\n    {\n        if (buffer[i] == '\\\\')\n        {\n            buffer[i + 1] = 0;\n            break;\n        }\n    }\n    WideCharToMultiByte(CP_ACP, 0, buffer, -1, dso_path, MAXPATHLEN+1, NULL, NULL);\n#else\n    Dl_info dl;\n    memset(&dl, 0, sizeof(dl));\n    int ret = dladdr((void*)eval_dirname_of_this_dso, &dl);\n    if (!ret || !dl.dli_fname || (dl.dli_fname[0] != '/'))\n    {\n        Py_FatalError(\"Cannot eval dirname of dso: bad result in dladdr()\");\n    }\n    strcpy(dso_path, dl.dli_fname);\n    size_t i = strlen(dso_path);\n    for (; i >= 0; --i)\n    {\n        if (dso_path[i] == '/')\n        {\n            dso_path[i + 1] = 0;\n            break;\n        }\n    }\n#endif\n}\n\nstatic void calculate_path(void)\n{\n    eval_full_path_of_executable();\n\n    char dso_dir_path[MAXPATHLEN + 1];\n    eval_dirname_of_this_dso(dso_dir_path);\n\n    char stdlib_zip_fname[32];\n    snprintf(stdlib_zip_fname, 32, \"python%d%d.zip\", PY_MAJOR_VERSION, PY_MINOR_VERSION);\n    char stdlib_zip_path[MAXPATHLEN + 1];\n    strcpy(stdlib_zip_path, dso_dir_path);\n    strcat(stdlib_zip_path, stdlib_zip_fname);\n    int have_stdlib_zip = is_file(stdlib_zip_path);\n\n    int have_py_home = 0;\n    const char* py_home = NULL;\n    if (!have_stdlib_zip)\n    {\n        py_home = Py_GetPythonHome();\n        if (py_home && py_home[0])\n            have_py_home = is_dir(py_home);\n    }\n\n    char modules_path[MAXPATHLEN + 1];\n    strcpy(modules_path, dso_dir_path);\n    strcat(modules_path, \"modules\");\n    int have_modules_dir = is_dir(modules_path);\n\n    size_t search_path_len = 0;\n    if (have_stdlib_zip)\n    {\n        search_path_len += 1 + strlen(stdlib_zip_path);\n    }\n    if (have_py_home)\n    {\n        search_path_len += 1 + strlen(py_home);\n    }\n    if (have_modules_dir)\n    {\n        search_path_len += 1 + strlen(modules_path);\n    }\n\n    char delim[2] = {DELIM, 0};\n    module_search_path = (char*) malloc(search_path_len);\n    module_search_path[0] = 0;\n\n    if (have_stdlib_zip)\n    {\n        if (module_search_path[0])\n            strcat(module_search_path, delim);\n        strcat(module_search_path, stdlib_zip_path);\n    }\n    if (have_py_home)\n    {\n        if (module_search_path[0])\n            strcat(module_search_path, delim);\n        strcat(module_search_path, py_home);\n    }\n    if (have_modules_dir)\n    {\n        if (module_search_path[0])\n            strcat(module_search_path, delim);\n        strcat(module_search_path, modules_path);\n    }\n\n    calculated = 1;\n}\n\n/* External interface */\n\nchar* Py_GetPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return module_search_path;\n}\n\nchar* Py_GetPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prefix;\n}\n\nchar* Py_GetExecPrefix(void)\n{\n    if (!calculated)\n        calculate_path();\n    return exec_prefix;\n}\n\nchar* Py_GetProgramFullPath(void)\n{\n    if (!calculated)\n        calculate_path();\n    return prog_path;\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/getpath.c.3.x",
    "content": "#include <Python.h>\r\n#include <osdefs.h>\r\n\r\n#ifdef _WIN32\r\n#define WIN32_LEAN_AND_MEAN\r\n#include <windows.h>\r\n#else\r\n#include <dlfcn.h>\r\n#endif\r\n\r\n#ifdef __APPLE__\r\n#include <libproc.h>\r\n#endif\r\n\r\nstatic wchar_t EMPTY_STR[1] = {0};\r\nstatic wchar_t* module_search_path = NULL;\r\nstatic wchar_t* prog_path = NULL;\r\nstatic int calculated = 0;\r\n\r\nstatic wchar_t* prefix = EMPTY_STR;\r\nstatic wchar_t* exec_prefix = EMPTY_STR;\r\n\r\nstatic int py_wstat(const wchar_t* path, struct stat *buf)\r\n{\r\n    int err;\r\n    char *fname;\r\n    fname = Py_EncodeLocale(path, NULL);\r\n    if (fname == NULL)\r\n    {\r\n        errno = EINVAL;\r\n        return -1;\r\n    }\r\n    err = stat(fname, buf);\r\n    PyMem_Free(fname);\r\n    return err;\r\n}\r\n\r\nstatic int is_file(wchar_t* filename)\r\n{\r\n    struct stat buf;\r\n    if (py_wstat(filename, &buf) != 0)\r\n        return 0;\r\n    if (!S_ISREG(buf.st_mode))\r\n        return 0;\r\n    return 1;\r\n}\r\n\r\nstatic int is_dir(wchar_t* filename)\r\n{\r\n    struct stat buf;\r\n    if (py_wstat(filename, &buf) != 0)\r\n        return 0;\r\n    if (!S_ISDIR(buf.st_mode))\r\n        return 0;\r\n    return 1;\r\n}\r\n\r\nstatic int is_full_path(const wchar_t* path)\r\n{\r\n#ifdef _WIN32\r\n    wchar_t letter = 0;\r\n    wchar_t anchor = 0;\r\n    if (path && path[0] && path[1])\r\n    {\r\n        letter = path[0];\r\n        letter &= ~0x20;\r\n        anchor = path[1];\r\n    }\r\n    if (anchor == ':' && 'A' <= letter && letter <= 'Z')\r\n    {\r\n      return 1;\r\n    }\r\n    return 0;\r\n#else\r\n    if (path && path[0] == '/')\r\n    {\r\n        return 1;\r\n    }\r\n    return 0;\r\n#endif\r\n}\r\n\r\nstatic wchar_t* eval_full_path_of_executable()\r\n{\r\n    wchar_t* exe_path_w = NULL;\r\n#ifdef _WIN32\r\n    wchar_t buffer[MAXPATHLEN + 1];\r\n    wchar_t reparsed_path[MAXPATHLEN + 1];\r\n    DWORD attr;\r\n    DWORD size;\r\n    DWORD (WINAPI* GetFinalPathNameByHandleW_Ptr)(HANDLE, LPWSTR, DWORD, DWORD);\r\n    HANDLE fh_exe;\r\n    size = GetModuleFileNameW(NULL, buffer, MAXPATHLEN);\r\n    if (size == 0)\r\n        Py_FatalError(\"Cannot eval path of executable: got 0 from GetModuleFileNameW\");\r\n    if (size  > MAXPATHLEN)\r\n        size = MAXPATHLEN;\r\n    buffer[size] = 0;\r\n    GetFinalPathNameByHandleW_Ptr = (DWORD (WINAPI *)(HANDLE, LPWSTR, DWORD, DWORD))GetProcAddress(GetModuleHandle(\"kernel32\"), \"GetFinalPathNameByHandleW\");\r\n    if (GetFinalPathNameByHandleW_Ptr)\r\n    {\r\n        attr = GetFileAttributesW(buffer);\r\n        if (attr == INVALID_FILE_ATTRIBUTES)\r\n            Py_FatalError(\"Cannot eval path of executable: got INVALID_FILE_ATTRIBUTES from GetFileAttributesW\");\r\n        if (attr & FILE_ATTRIBUTE_REPARSE_POINT)\r\n        {\r\n            fh_exe = CreateFileW(buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\r\n            if (fh_exe == INVALID_HANDLE_VALUE)\r\n                Py_FatalError(\"Cannot eval path of executable: got INVALID_HANDLE_VALUE from CreateFileW\");\r\n            size = (*GetFinalPathNameByHandleW_Ptr)(fh_exe, reparsed_path, MAX_PATH, 0);\r\n            if (size == 0)\r\n            {\r\n                CloseHandle(fh_exe);\r\n                Py_FatalError(\"Cannot eval path of executable: got 0 from GetFinalPathNameByHandleW\");\r\n            }\r\n            CloseHandle(fh_exe);\r\n            if (size > MAX_PATH)\r\n              size = MAX_PATH;\r\n            reparsed_path[size] = 0;\r\n            if (wcsncmp(L\"\\\\\\\\?\\\\\", reparsed_path, 4) == 0)\r\n                wcsncpy(buffer, &reparsed_path[4], MAX_PATH - 3);\r\n            else\r\n                wcsncpy(buffer, reparsed_path, MAX_PATH + 1);\r\n        }\r\n    }\r\n    exe_path_w = PyMem_RawMalloc((wcslen(buffer) + 1) * sizeof(wchar_t));\r\n    wcscpy(exe_path_w, buffer);\r\n#else\r\n    char exe_path[MAXPATHLEN + 1];\r\n#ifdef __APPLE__\r\n    int size = proc_pidpath(getpid(), exe_path, MAXPATHLEN);\r\n#else\r\n    int size = readlink(\"/proc/self/exe\", exe_path, MAXPATHLEN);\r\n#endif\r\n    if (size < 0)\r\n        size = 0;\r\n    exe_path[size] = 0;\r\n    exe_path_w = Py_DecodeLocale(exe_path, NULL);\r\n#endif\r\n    return exe_path_w;\r\n}\r\n\r\nstatic wchar_t* eval_dirname_of_this_dso()\r\n{\r\n    wchar_t* dso_path = NULL;\r\n#ifdef _WIN32\r\n    extern HANDLE PyWin_DLLhModule;\r\n    if (PyWin_DLLhModule == NULL)\r\n    {\r\n        Py_FatalError(\"Cannot eval dirname of dso: HANDLE PyWin_DLLhModule is NULL\");\r\n    }\r\n    wchar_t buffer[MAXPATHLEN + 1];\r\n    GetModuleFileNameW(PyWin_DLLhModule, buffer, MAXPATHLEN);\r\n    size_t i = wcslen(buffer);\r\n    for (; i >= 0; --i)\r\n    {\r\n        if (buffer[i] == '\\\\')\r\n        {\r\n            buffer[i + 1] = 0;\r\n            break;\r\n        }\r\n    }\r\n    dso_path = PyMem_RawMalloc((wcslen(buffer) + 1) * sizeof(wchar_t));\r\n    wcscpy(dso_path, buffer);\r\n#else\r\n    Dl_info dl;\r\n    memset(&dl, 0, sizeof(dl));\r\n    int ret = dladdr((void*)eval_dirname_of_this_dso, &dl);\r\n    if (!ret || !dl.dli_fname || (dl.dli_fname[0] != '/'))\r\n    {\r\n        Py_FatalError(\"Cannot eval dirname of dso: bad result in dladdr()\");\r\n    }\r\n\r\n    dso_path = Py_DecodeLocale(dl.dli_fname, NULL);\r\n    size_t i = wcslen(dso_path);\r\n    for (; i >= 0; --i)\r\n    {\r\n        if (dso_path[i] == '/')\r\n        {\r\n            dso_path[i + 1] = 0;\r\n            break;\r\n        }\r\n    }\r\n#endif\r\n    return dso_path;\r\n}\r\n\r\nstatic void calculate_path(void)\r\n{\r\n    if (!calculated)\r\n    {\r\n        wchar_t* preset_progpath = Py_GetProgramName();\r\n        if (is_full_path(preset_progpath))\r\n        {\r\n            prog_path = preset_progpath;\r\n        }\r\n        else\r\n        {\r\n            prog_path = eval_full_path_of_executable();\r\n        }\r\n    }\r\n\r\n    wchar_t* dso_dir_path = eval_dirname_of_this_dso();\r\n\r\n    wchar_t stdlib_zip_fname[32];\r\n    swprintf(stdlib_zip_fname, 32, L\"python%d%d.zip\", PY_MAJOR_VERSION, PY_MINOR_VERSION);\r\n    wchar_t stdlib_zip_path[MAXPATHLEN + 1];\r\n    wcscpy(stdlib_zip_path, dso_dir_path);\r\n    wcscat(stdlib_zip_path, stdlib_zip_fname);\r\n    int have_stdlib_zip = is_file(stdlib_zip_path);\r\n\r\n    int have_py_home = 0;\r\n    wchar_t* py_home = NULL;\r\n    if (!have_stdlib_zip)\r\n    {\r\n        py_home = Py_GetPythonHome();\r\n        if (py_home && py_home[0])\r\n            have_py_home = is_dir(py_home);\r\n    }\r\n\r\n    wchar_t modules_path[MAXPATHLEN + 1];\r\n    wcscpy(modules_path, dso_dir_path);\r\n    wcscat(modules_path, L\"modules\");\r\n    int have_modules_dir = is_dir(modules_path);\r\n\r\n    size_t search_path_len = 0;\r\n    if (have_stdlib_zip)\r\n    {\r\n        search_path_len += 1 + wcslen(stdlib_zip_path);\r\n    }\r\n    if (have_py_home)\r\n    {\r\n        search_path_len += 1 + wcslen(py_home);\r\n    }\r\n    if (have_modules_dir)\r\n    {\r\n        search_path_len += 1 + wcslen(modules_path);\r\n    }\r\n    if (module_search_path && module_search_path[0])\r\n    {\r\n        search_path_len += 1 + wcslen(module_search_path);\r\n    }\r\n\r\n    wchar_t delim[2] = {DELIM, 0};\r\n    wchar_t* new_search_path = (wchar_t*)PyMem_RawMalloc(search_path_len * sizeof(wchar_t));\r\n    new_search_path[0] = 0;\r\n\r\n    if (have_stdlib_zip)\r\n    {\r\n        if (new_search_path[0])\r\n            wcscat(new_search_path, delim);\r\n        wcscat(new_search_path, stdlib_zip_path);\r\n    }\r\n    if (have_py_home)\r\n    {\r\n        if (new_search_path[0])\r\n            wcscat(new_search_path, delim);\r\n        wcscat(new_search_path, py_home);\r\n    }\r\n    if (have_modules_dir)\r\n    {\r\n        if (new_search_path[0])\r\n            wcscat(new_search_path, delim);\r\n        wcscat(new_search_path, modules_path);\r\n    }\r\n    if (module_search_path && module_search_path[0])\r\n    {\r\n        if (new_search_path[0])\r\n            wcscat(new_search_path, delim);\r\n        wcscat(new_search_path, module_search_path);\r\n    }\r\n\r\n    PyMem_RawFree(dso_dir_path);\r\n\r\n    if (module_search_path)\r\n        PyMem_RawFree(module_search_path);\r\n\r\n    module_search_path = new_search_path;\r\n    calculated = 1;\r\n}\r\n\r\n/* External interface */\r\n\r\n#ifdef _WIN32\r\nint _Py_CheckPython3()\r\n{\r\n    return 0;\r\n}\r\n#endif\r\n\r\nwchar_t* Py_GetPath(void)\r\n{\r\n    if (!calculated)\r\n        calculate_path();\r\n    return module_search_path;\r\n}\r\n\r\nwchar_t* Py_GetPrefix(void)\r\n{\r\n    if (!calculated)\r\n        calculate_path();\r\n    return prefix;\r\n}\r\n\r\nwchar_t* Py_GetExecPrefix(void)\r\n{\r\n    if (!calculated)\r\n        calculate_path();\r\n    return exec_prefix;\r\n}\r\n\r\nwchar_t* Py_GetProgramFullPath(void)\r\n{\r\n    if (!calculated)\r\n        calculate_path();\r\n    return prog_path;\r\n}\r\n\r\nvoid Py_SetPath(const wchar_t* path)\r\n{\r\n    if (module_search_path != NULL)\r\n    {\r\n        PyMem_RawFree(module_search_path);\r\n        module_search_path = NULL;\r\n    }\r\n    if (path != NULL)\r\n    {\r\n        module_search_path = (wchar_t*)PyMem_RawMalloc((wcslen(path) + 1) * sizeof(wchar_t));\r\n        wcscpy(module_search_path, path);\r\n    }\r\n    calculate_path();\r\n}\r\n"
  },
  {
    "path": "build/instruments/build-python/host/interpreter-posix.c.2.7",
    "content": "#include <stdio.h>\n#include <limits.h>\n#include <unistd.h>\n#include <string.h>\n#include <dlfcn.h>\n#include <stdlib.h>\n\n#if defined(__linux__)\n#  define MY_POSIX_MAX_PATH PATH_MAX\n#elif defined(__APPLE__)\n#  include <libproc.h>\n#  define MY_POSIX_MAX_PATH PROC_PIDPATHINFO_MAXSIZE\n#endif\n\n#ifndef PYTHON_DSO_REL_PATH\n#error PYTHON_DSO_REL_PATH - must be defined in Makefile\n#endif\n\nstatic char NULL_PTR_STR[] = \"NULL\";\n\n#if defined(__linux__)\nstatic void GetExecutablePath(char* path)\n{\n  int size = readlink(\"/proc/self/exe\", path, MY_POSIX_MAX_PATH);\n  if (size < 0)\n    size = 0;\n  path[size] = 0;\n}\n#elif defined(__APPLE__)\nstatic void GetExecutablePath(char* path)\n{\n  int size = proc_pidpath(getpid(), path, MY_POSIX_MAX_PATH);\n  if (size < 0)\n    size = 0;\n  path[size] = 0;\n}\n#endif\n\nstatic void GetRelativePathFormat(char* base, char* fmt)\n{\n  unsigned idx;\n  char *p, *end;\n  end = strrchr(base, '/');\n  for (idx = 0, p = base; *p; ++p, ++idx)\n  {\n    fmt[idx] = *p;\n    if (p == end)\n      break;\n  }\n  fmt[++idx] = '%';\n  fmt[++idx] = 's';\n  fmt[++idx] = 0;\n}\n\ntypedef int (*Py_MainPtr)(int, char **);\n\nint main(int argc, char** argv)\n{\n  char executable[MY_POSIX_MAX_PATH + 1] = {0};\n  char pthfmt[MY_POSIX_MAX_PATH + 1]     = {0};\n  char corepath[MY_POSIX_MAX_PATH + 1]   = {0};\n  void* core = NULL;\n  int retcode = 126;\n\n  Py_MainPtr Py_Main = NULL;\n\n  GetExecutablePath(executable);\n  GetRelativePathFormat(executable, pthfmt);\n\n  snprintf(corepath, MY_POSIX_MAX_PATH, pthfmt, PYTHON_DSO_REL_PATH);\n\n  core = dlopen(corepath, RTLD_LAZY);\n  if (core == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load library: '%s', dlerror: %s\\n\", corepath, lasterr);\n    goto exit;\n  }\n\n  Py_Main = (Py_MainPtr)dlsym(core, \"Py_Main\");\n  if (Py_Main == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load symbol: '%s' from library '%s', dlerror: %s\\n\", \"Py_Main\", corepath, lasterr);\n    goto exit;\n  }\n\n  retcode = Py_Main(argc, argv);\n\nexit:\n  if (core != NULL)\n    dlclose(core);\n\n  return retcode;\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/interpreter-posix.c.3.x",
    "content": "#include <stdio.h>\n#include <limits.h>\n#include <unistd.h>\n#include <string.h>\n#include <dlfcn.h>\n#include <wchar.h>\n#include <locale.h>\n#include <stdlib.h>\n\n#if defined(__linux__)\n#  define MY_POSIX_MAX_PATH PATH_MAX\n#elif defined(__APPLE__)\n#  include <libproc.h>\n#  define MY_POSIX_MAX_PATH PROC_PIDPATHINFO_MAXSIZE\n#endif\n\n#ifndef PYTHON_DSO_REL_PATH\n#error PYTHON_DSO_REL_PATH - must be defined in Makefile\n#endif\n\nstatic char NULL_PTR_STR[] = \"NULL\";\n\n#if defined(__linux__)\nstatic void GetExecutablePath(char* path)\n{\n  int size = readlink(\"/proc/self/exe\", path, MY_POSIX_MAX_PATH);\n  if (size < 0)\n    size = 0;\n  path[size] = 0;\n}\n#elif defined(__APPLE__)\nstatic void GetExecutablePath(char* path)\n{\n  int size = proc_pidpath(getpid(), path, MY_POSIX_MAX_PATH);\n  if (size < 0)\n    size = 0;\n  path[size] = 0;\n}\n#endif\n\nstatic void GetRelativePathFormat(char* base, char* fmt)\n{\n  unsigned idx;\n  char *p, *end;\n  end = strrchr(base, '/');\n  for (idx = 0, p = base; *p; ++p, ++idx)\n  {\n    fmt[idx] = *p;\n    if (p == end)\n      break;\n  }\n  fmt[++idx] = '%';\n  fmt[++idx] = 's';\n  fmt[++idx] = 0;\n}\n\ntypedef int (*Py_MainPtr)(int, wchar_t**);\ntypedef void* (*PyMem_RawMallocPtr)(size_t);\ntypedef void (*PyMem_RawFreePtr)(void*);\ntypedef wchar_t* (*Py_DecodeLocalePtr)(const char*, size_t*);\n\n\nint main(int argc, char** argv)\n{\n  char executable[MY_POSIX_MAX_PATH + 1] = {0};\n  char pthfmt[MY_POSIX_MAX_PATH + 1]     = {0};\n  char corepath[MY_POSIX_MAX_PATH + 1]   = {0};\n  void* core = NULL;\n  int retcode = 126;\n  int i;\n\n  Py_MainPtr Py_Main = NULL;\n  PyMem_RawMallocPtr PyMem_RawMalloc = NULL;\n  PyMem_RawFreePtr PyMem_RawFree = NULL;\n  Py_DecodeLocalePtr Py_DecodeLocale = NULL;\n\n  GetExecutablePath(executable);\n  GetRelativePathFormat(executable, pthfmt);\n\n  snprintf(corepath, MY_POSIX_MAX_PATH, pthfmt, PYTHON_DSO_REL_PATH);\n\n  core = dlopen(corepath, RTLD_LAZY);\n  if (core == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load library: '%s', dlerror: %s\\n\", corepath, lasterr);\n    goto exit;\n  }\n\n  Py_Main = (Py_MainPtr)dlsym(core, \"Py_Main\");\n  if (Py_Main == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load symbol: '%s' from library '%s', dlerror: %s\\n\", \"Py_Main\", corepath, lasterr);\n    goto exit;\n  }\n\n  PyMem_RawMalloc = (PyMem_RawMallocPtr)dlsym(core, \"PyMem_RawMalloc\");\n  if (PyMem_RawMalloc == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load symbol: '%s' from library '%s', dlerror: %s\\n\", \"PyMem_RawMalloc\", corepath, lasterr);\n    goto exit;\n  }\n\n  PyMem_RawFree = (PyMem_RawFreePtr)dlsym(core, \"PyMem_RawFree\");\n  if (PyMem_RawFree == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load symbol: '%s' from library '%s', dlerror: %s\\n\", \"PyMem_RawFree\", corepath, lasterr);\n    goto exit;\n  }\n\n  Py_DecodeLocale = (Py_DecodeLocalePtr)dlsym(core, \"Py_DecodeLocale\");\n  if (Py_DecodeLocale == NULL)\n  {\n    const char* lasterr = dlerror();\n    if (lasterr == NULL)\n      lasterr = NULL_PTR_STR;\n    fprintf(stderr, \"Fatal Python error: cannot load symbol: '%s' from library '%s', dlerror: %s\\n\", \"Py_DecodeLocale\", corepath, lasterr);\n    goto exit;\n  }\n\n  wchar_t** argv_copy = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*)*(argc+1));\n  wchar_t** argv_copy2 = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*)*(argc+1));\n\n  char* oldloc = strdup(setlocale(LC_ALL, NULL));\n  setlocale(LC_ALL, \"\");\n  for (i = 0; i < argc; ++i)\n  {\n    argv_copy[i] = Py_DecodeLocale(argv[i], NULL);\n    if (argv_copy[i] == NULL)\n    {\n      free(oldloc);\n      fprintf(stderr, \"Fatal Python error: unable to decode the command line argument #%i\\n\", i + 1);\n      goto exit;\n    }\n    argv_copy2[i] = argv_copy[i];\n  }\n  argv_copy2[argc] = argv_copy[argc] = NULL;\n  setlocale(LC_ALL, oldloc);\n  free(oldloc);\n\n  retcode = Py_Main(argc, argv_copy);\n\n  for (i = 0; i < argc; i++)\n  {\n    PyMem_RawFree(argv_copy2[i]);\n  }\n  PyMem_RawFree(argv_copy);\n  PyMem_RawFree(argv_copy2);\n\nexit:\n  if (core != NULL)\n    dlclose(core);\n\n  return retcode;\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/interpreter-winapi.c.2.7",
    "content": "#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <stdio.h>\n\n#ifndef PYTHON_DSO_REL_PATH\n#error PYTHON_DSO_REL_PATH - must be defined in Makefile\n#endif\n\nstatic int GetExecutablePath(wchar_t* path)\n{\n  DWORD code;\n  DWORD attr;\n  DWORD size;\n  wchar_t reparsed_path[MAX_PATH + 1];\n  HANDLE fh_exe;\n  DWORD (WINAPI* GetFinalPathNameByHandleW_Ptr)(HANDLE, LPWSTR, DWORD, DWORD);\n\n  size = GetModuleFileNameW(NULL, path, MAX_PATH);\n  if (size == 0)\n  {\n    code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetModuleFileNameW error code: %d\\n\", code);\n    return 0;\n  }\n  if (size > MAX_PATH)\n    size = MAX_PATH;\n  path[size] = 0;\n  GetFinalPathNameByHandleW_Ptr = (DWORD (WINAPI *)(HANDLE, LPWSTR, DWORD, DWORD))GetProcAddress(GetModuleHandle(\"kernel32\"), \"GetFinalPathNameByHandleW\");\n  if (GetFinalPathNameByHandleW_Ptr == NULL)\n    return 1;\n\n  attr = GetFileAttributesW(path);\n  if (attr == INVALID_FILE_ATTRIBUTES)\n  {\n    code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetFileAttributesW error code: %d\\n\", code);\n    return 0;\n  }\n  if (attr & FILE_ATTRIBUTE_REPARSE_POINT)\n  {\n    fh_exe = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (fh_exe == INVALID_HANDLE_VALUE)\n    {\n      code = GetLastError();\n      _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, CreateFileW error code: %d\\n\", code);\n      return 0;\n    }\n    size = (*GetFinalPathNameByHandleW_Ptr)(fh_exe, reparsed_path, MAX_PATH, 0);\n    if (size == 0)\n    {\n      code = GetLastError();\n      CloseHandle(fh_exe);\n      _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetFinalPathNameByHandleW error code: %d\\n\", code);\n      return 0;\n    }\n    CloseHandle(fh_exe);\n    if (size > MAX_PATH)\n      size = MAX_PATH;\n    reparsed_path[size] = 0;\n\n    if (wcsncmp(L\"\\\\\\\\?\\\\\", reparsed_path, 4) == 0)\n      wcsncpy(path, &reparsed_path[4], MAX_PATH - 3);\n    else\n      wcsncpy(path, reparsed_path, MAX_PATH + 1);\n  }\n  return 1;\n}\n\nstatic void GetRelativePathFormat(wchar_t* base, wchar_t* fmt)\n{\n  unsigned idx;\n  wchar_t *p, *end;\n  end = wcsrchr(base, '\\\\');\n  for (idx = 0, p = base; *p; ++p, ++idx)\n  {\n    fmt[idx] = *p;\n    if (p == end)\n      break;\n  }\n  fmt[++idx] = '%';\n  fmt[++idx] = 's';\n  fmt[++idx] = 0;\n}\n\ntypedef int (*Py_MainPtr)(int, char **);\n\n\nint main(int argc, char** argv)\n{\n  wchar_t executable[MAX_PATH + 1] = {0};\n  wchar_t pthfmt[MAX_PATH + 1]     = {0};\n  wchar_t corepath[MAX_PATH + 1]   = {0};\n  HMODULE core = NULL;\n  int retcode = 126;\n\n  Py_MainPtr Py_Main = NULL;\n\n  if (!GetExecutablePath(executable))\n    goto exit;\n\n  GetRelativePathFormat(executable, pthfmt);\n\n  _snwprintf(corepath, MAX_PATH, pthfmt, PYTHON_DSO_REL_PATH);\n\n  core = LoadLibraryExW(corepath, NULL, 0);\n  if (core == NULL)\n  {\n    DWORD code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot load library: '%s', LoadLibraryExW error code: %d\\n\", corepath, code);\n    goto exit;\n  }\n\n  Py_Main = (Py_MainPtr)GetProcAddress(core, \"Py_Main\");\n  if (Py_Main == NULL)\n  {\n    DWORD code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot load symbol: '%s' from library '%s', GetProcAddress error code: %d\\n\", L\"Py_Main\", corepath, code);\n    goto exit;\n  }\n\n  retcode = Py_Main(argc, argv);\n\nexit:\n  if (core != NULL)\n    FreeLibrary(core);\n\n  return retcode;\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/interpreter-winapi.c.3.x",
    "content": "#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <stdio.h>\n\n#ifndef PYTHON_DSO_REL_PATH\n#error PYTHON_DSO_REL_PATH - must be defined in Makefile\n#endif\n\nstatic int GetExecutablePath(wchar_t* path)\n{\n  DWORD code;\n  DWORD attr;\n  DWORD size;\n  wchar_t reparsed_path[MAX_PATH + 1];\n  HANDLE fh_exe;\n  DWORD (WINAPI* GetFinalPathNameByHandleW_Ptr)(HANDLE, LPWSTR, DWORD, DWORD);\n\n  size = GetModuleFileNameW(NULL, path, MAX_PATH);\n  if (size == 0)\n  {\n    code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetModuleFileNameW error code: %d\\n\", code);\n    return 0;\n  }\n  if (size > MAX_PATH)\n    size = MAX_PATH;\n  path[size] = 0;\n  GetFinalPathNameByHandleW_Ptr = (DWORD (WINAPI *)(HANDLE, LPWSTR, DWORD, DWORD))GetProcAddress(GetModuleHandle(\"kernel32\"), \"GetFinalPathNameByHandleW\");\n  if (GetFinalPathNameByHandleW_Ptr == NULL)\n    return 1;\n\n  attr = GetFileAttributesW(path);\n  if (attr == INVALID_FILE_ATTRIBUTES)\n  {\n    code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetFileAttributesW error code: %d\\n\", code);\n    return 0;\n  }\n  if (attr & FILE_ATTRIBUTE_REPARSE_POINT)\n  {\n    fh_exe = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (fh_exe == INVALID_HANDLE_VALUE)\n    {\n      code = GetLastError();\n      _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, CreateFileW error code: %d\\n\", code);\n      return 0;\n    }\n    size = (*GetFinalPathNameByHandleW_Ptr)(fh_exe, reparsed_path, MAX_PATH, 0);\n    if (size == 0)\n    {\n      code = GetLastError();\n      CloseHandle(fh_exe);\n      _fwprintf_p(stderr, L\"Fatal Python error: cannot eval path of executable, GetFinalPathNameByHandleW error code: %d\\n\", code);\n      return 0;\n    }\n    CloseHandle(fh_exe);\n    if (size > MAX_PATH)\n      size = MAX_PATH;\n    reparsed_path[size] = 0;\n\n    if (wcsncmp(L\"\\\\\\\\?\\\\\", reparsed_path, 4) == 0)\n      wcsncpy(path, &reparsed_path[4], MAX_PATH - 3);\n    else\n      wcsncpy(path, reparsed_path, MAX_PATH + 1);\n  }\n  return 1;\n}\n\nstatic void GetRelativePathFormat(wchar_t* base, wchar_t* fmt)\n{\n  unsigned idx;\n  wchar_t *p, *end;\n  end = wcsrchr(base, '\\\\');\n  for (idx = 0, p = base; *p; ++p, ++idx)\n  {\n    fmt[idx] = *p;\n    if (p == end)\n      break;\n  }\n  fmt[++idx] = '%';\n  fmt[++idx] = 's';\n  fmt[++idx] = 0;\n}\n\ntypedef int (*Py_MainPtr)(int, wchar_t**);\n\n\nint wmain(int argc, wchar_t** argv)\n{\n  wchar_t executable[MAX_PATH + 1] = {0};\n  wchar_t pthfmt[MAX_PATH + 1]     = {0};\n  wchar_t corepath[MAX_PATH + 1]   = {0};\n  HMODULE core = NULL;\n  int retcode = 126;\n\n  Py_MainPtr Py_Main = NULL;\n\n  if (!GetExecutablePath(executable))\n    goto exit;\n\n  GetRelativePathFormat(executable, pthfmt);\n\n  _snwprintf(corepath, MAX_PATH, pthfmt, PYTHON_DSO_REL_PATH);\n\n  core = LoadLibraryExW(corepath, NULL, 0);\n  if (core == NULL)\n  {\n    DWORD code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot load library: '%s', LoadLibraryExW error code: %d\\n\", corepath, code);\n    goto exit;\n  }\n\n  Py_Main = (Py_MainPtr)GetProcAddress(core, \"Py_Main\");\n  if (Py_Main == NULL)\n  {\n    DWORD code = GetLastError();\n    _fwprintf_p(stderr, L\"Fatal Python error: cannot load symbol: '%s' from library '%s', GetProcAddress error code: %d\\n\", L\"Py_Main\", corepath, code);\n    goto exit;\n  }\n\n  retcode = Py_Main(argc, argv);\n\nexit:\n  if (core != NULL)\n    FreeLibrary(core);\n\n  return retcode;\n}\n"
  },
  {
    "path": "build/instruments/build-python/host/posixmodule.c.2.7.mingw.patch",
    "content": "--- posixmodule.c\t2016-01-27 10:53:11.000000000 +0300\n+++ posixmodule.c.2.7.mingw\t2016-03-24 01:22:16.392646043 +0300\n@@ -132,6 +132,18 @@\n #define HAVE_FSYNC      1\n #define fsync _commit\n #else\n+#ifdef __MINGW32__\n+#define HAVE_UNISTD_H\n+#define HAVE_GETCWD     1\n+#define HAVE_SPAWNV     1\n+#define HAVE_EXECV      1\n+#define HAVE_PIPE       1\n+#define HAVE_POPEN      1\n+#define HAVE_SYSTEM     1\n+#define HAVE_CWAIT      1\n+#define HAVE_FSYNC      1\n+#define fsync _commit\n+#else\n #if defined(PYOS_OS2) && defined(PYCC_GCC) || defined(__VMS)\n /* Everything needed is defined in PC/os2emx/pyconfig.h or vms/pyconfig.h */\n #else                   /* all other compilers */\n@@ -158,6 +170,7 @@\n #define HAVE_TTYNAME    1\n #endif  /* PYOS_OS2 && PYCC_GCC && __VMS */\n #endif  /* _MSC_VER */\n+#endif  /* __MINGW__ */\n #endif  /* __BORLANDC__ */\n #endif  /* ! __WATCOMC__ || __QNX__ */\n #endif /* ! __IBMC__ */\n@@ -277,6 +290,12 @@\n #define pclose  _pclose\n #endif /* _MSC_VER */\n \n+#ifdef __MINGW32__\n+#include <process.h>\n+#include <windows.h>\n+#include \"osdefs.h\"\n+#endif\n+\n #if defined(PYCC_VACPP) && defined(PYOS_OS2)\n #include <io.h>\n #endif /* OS2 */\n@@ -9447,7 +9466,7 @@\n }\n \n \n-#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__)\n+#if (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__)\n #define INITFUNC initnt\n #define MODNAME \"nt\"\n \n"
  },
  {
    "path": "build/instruments/build-python/host/posixmodule.c.3.5.1.mingw.patch",
    "content": "--- posixmodule.c\t2016-01-27 10:54:56.000000000 +0300\n+++ posixmodule.c.3.5.mingw\t2016-03-25 11:00:27.519578146 +0300\n@@ -154,6 +154,17 @@\n #define HAVE_CWAIT      1\n #define HAVE_FSYNC      1\n #define fsync _commit\n+#ifdef __MINGW32__\n+#define HAVE_UNISTD_H\n+#define HAVE_GETPPID    1\n+#define HAVE_GETLOGIN   1\n+#define HAVE_SPAWNV     1\n+#define HAVE_EXECV      1\n+#define HAVE_PIPE       1\n+#define HAVE_SYSTEM     1\n+#define HAVE_CWAIT      1\n+#define HAVE_FSYNC      1\n+#define fsync _commit\n #else\n /* Unix functions that the configure script doesn't check for */\n #define HAVE_EXECV      1\n@@ -173,6 +184,7 @@\n #define HAVE_WAIT       1\n #define HAVE_TTYNAME    1\n #endif  /* _MSC_VER */\n+#endif  /* __MINGW32__ */\n #endif  /* ! __WATCOMC__ || __QNX__ */\n \n \n@@ -182,7 +194,7 @@\n [clinic start generated code]*/\n /*[clinic end generated code: output=da39a3ee5e6b4b0d input=94a0f0f978acae17]*/\n \n-#ifndef _MSC_VER\n+#if !defined(_MSC_VER) && !defined(__MINGW32__)\n \n #if defined(__sgi)&&_COMPILER_VERSION>=700\n /* declare ctermid_r if compiling with MIPSPro 7.x in ANSI C mode\n@@ -307,6 +319,13 @@\n #endif\n #endif /* _MSC_VER */\n \n+#ifdef __MINGW32__\n+#include <process.h>\n+#include <windows.h>\n+#include \"osdefs.h\"\n+#endif\n+\n+\n #ifndef MAXPATHLEN\n #if defined(PATH_MAX) && PATH_MAX > 1024\n #define MAXPATHLEN PATH_MAX\n@@ -1351,10 +1370,10 @@\n \n     if(!SetCurrentDirectoryW(path))\n         return FALSE;\n-    result = GetCurrentDirectoryW(Py_ARRAY_LENGTH(new_path), new_path);\n+    result = GetCurrentDirectoryW(Py_ARRAY_LENGTH(_new_path), new_path);\n     if (!result)\n         return FALSE;\n-    if (result > Py_ARRAY_LENGTH(new_path)) {\n+    if (result > Py_ARRAY_LENGTH(_new_path)) {\n         new_path = PyMem_RawMalloc(result * sizeof(wchar_t));\n         if (!new_path) {\n             SetLastError(ERROR_OUTOFMEMORY);\n"
  },
  {
    "path": "build/instruments/build-python/host/posixmodule.c.3.5.x.mingw.patch",
    "content": "--- posixmodule.c\t2016-06-26 00:38:38.000000000 +0300\n+++ posixmodule.c.3.5.mingw\t2016-09-10 10:40:23.000000000 +0300\n@@ -156,6 +156,17 @@\n #define HAVE_CWAIT      1\n #define HAVE_FSYNC      1\n #define fsync _commit\n+#ifdef __MINGW32__\n+#define HAVE_UNISTD_H\n+#define HAVE_GETPPID    1\n+#define HAVE_GETLOGIN   1\n+#define HAVE_SPAWNV     1\n+#define HAVE_EXECV      1\n+#define HAVE_PIPE       1\n+#define HAVE_SYSTEM     1\n+#define HAVE_CWAIT      1\n+#define HAVE_FSYNC      1\n+#define fsync _commit\n #else\n /* Unix functions that the configure script doesn't check for */\n #define HAVE_EXECV      1\n@@ -175,6 +186,7 @@\n #define HAVE_WAIT       1\n #define HAVE_TTYNAME    1\n #endif  /* _MSC_VER */\n+#endif  /* __MINGW32__ */\n #endif  /* ! __WATCOMC__ || __QNX__ */\n \n \n@@ -184,7 +196,7 @@\n [clinic start generated code]*/\n /*[clinic end generated code: output=da39a3ee5e6b4b0d input=94a0f0f978acae17]*/\n \n-#ifndef _MSC_VER\n+#if !defined(_MSC_VER) && !defined(__MINGW32__)\n \n #if defined(__sgi)&&_COMPILER_VERSION>=700\n /* declare ctermid_r if compiling with MIPSPro 7.x in ANSI C mode\n@@ -309,6 +321,13 @@\n #endif\n #endif /* _MSC_VER */\n \n+#ifdef __MINGW32__\n+#include <process.h>\n+#include <windows.h>\n+#include \"osdefs.h\"\n+#endif\n+\n+\n #ifndef MAXPATHLEN\n #if defined(PATH_MAX) && PATH_MAX > 1024\n #define MAXPATHLEN PATH_MAX\n"
  },
  {
    "path": "build/instruments/build-python/host/pyconfig.h.2.7.mingw.patch",
    "content": "--- pyconfig.h\t2016-01-27 10:53:11.000000000 +0300\n+++ pyconfig.h.2.7.mingw\t2016-03-28 11:46:24.000000000 +0300\n@@ -102,6 +102,12 @@\n \n /* Compiler specific defines */\n \n+#ifdef __MINGW32__\n+#ifdef _WIN64\n+#define MS_WIN64\n+#endif\n+#endif\n+\n /* ------------------------------------------------------------------------*/\n /* Microsoft C defines _MSC_VER */\n #ifdef _MSC_VER\n"
  },
  {
    "path": "build/instruments/build-python/host/pyconfig.h.3.5.mingw.patch",
    "content": "--- pyconfig.h\t2016-01-27 10:54:56.000000000 +0300\n+++ pyconfig.h.3.5.mingw\t2016-03-28 11:46:48.000000000 +0300\n@@ -100,6 +100,12 @@\n \n /* Compiler specific defines */\n \n+#ifdef __MINGW32__\n+#ifdef _WIN64\n+#define MS_WIN64\n+#endif\n+#endif\n+\n /* ------------------------------------------------------------------------*/\n /* Microsoft C defines _MSC_VER */\n #ifdef _MSC_VER\n"
  },
  {
    "path": "build/instruments/build-python/interpreter-static.c.2.7",
    "content": "#include <Python.h>\n\n#include <python_module__ctypes.h>\n#include <python_module__multiprocessing.h>\n#include <python_module__socket.h>\n#include <python_module__ssl.h>\n#include <python_module__sqlite3.h>\n#include <python_module_pyexpat.h>\n#include <python_module_select.h>\n#include <python_module_unicodedata.h>\n\nextern struct _frozen _PyImport_FrozenStdlibModules[];\n\nstatic struct _inittab extensions[] = {\n  {\"_ctypes\", init_ctypes},\n  {\"_multiprocessing\", init_multiprocessing},\n  {\"_socket\", init_socket},\n  {\"_ssl\", init_ssl},\n  {\"_sqlite3\", init_sqlite3},\n  {\"pyexpat\", initpyexpat},\n  {\"select\", initselect},\n  {\"unicodedata\", initunicodedata},\n  {0, 0}\n};\n\nint main(int argc, char** argv)\n{\n  PyImport_FrozenModules = _PyImport_FrozenStdlibModules;\n  PyImport_ExtendInittab(extensions);\n\n  return Py_Main(argc, argv);\n}\n"
  },
  {
    "path": "build/instruments/build-python/interpreter-static.c.3.x",
    "content": "#include <Python.h>\n\n#include <python_module__ctypes.h>\n#include <python_module__multiprocessing.h>\n#include <python_module__socket.h>\n#include <python_module__ssl.h>\n#include <python_module__sqlite3.h>\n#include <python_module_pyexpat.h>\n#include <python_module_select.h>\n#include <python_module_unicodedata.h>\n\nextern struct _frozen _PyImport_FrozenStdlibModules[];\n\nstatic struct _inittab extensions[] = {\n  {\"_ctypes\", PyInit__ctypes},\n  {\"_multiprocessing\", PyInit__multiprocessing},\n  {\"_socket\", PyInit__socket},\n  {\"_ssl\", PyInit__ssl},\n  {\"_sqlite3\", PyInit__sqlite3},\n  {\"pyexpat\", PyInit_pyexpat},\n  {\"select\", PyInit_select},\n  {\"unicodedata\", PyInit_unicodedata},\n  {0, 0}\n};\n\nint main(int argc, char** argv)\n{\n  int retcode = 126;\n  int i;\n\n  char* oldloc = strdup(setlocale(LC_ALL, 0));\n  setlocale(LC_ALL, \"\");\n\n  wchar_t** argv_copy = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*)*(argc+1));\n  wchar_t** argv_copy2 = (wchar_t **)PyMem_RawMalloc(sizeof(wchar_t*)*(argc+1));\n\n  for (i = 0; i < argc; ++i)\n  {\n    argv_copy[i] = Py_DecodeLocale(argv[i], 0);\n    if (argv_copy[i] == 0)\n    {\n      free(oldloc);\n      fprintf(stderr, \"Fatal Python error: unable to decode the command line argument #%i\\n\", i + 1);\n      goto exit;\n    }\n    argv_copy2[i] = argv_copy[i];\n  }\n  argv_copy2[argc] = argv_copy[argc] = 0;\n  setlocale(LC_ALL, oldloc);\n  free(oldloc);\n\n  PyImport_FrozenModules = _PyImport_FrozenStdlibModules;\n  PyImport_ExtendInittab(extensions);\n\n  retcode = Py_Main(argc, argv_copy);\n\n  for (i = 0; i < argc; i++)\n  {\n    PyMem_RawFree(argv_copy2[i]);\n  }\n  PyMem_RawFree(argv_copy);\n  PyMem_RawFree(argv_copy2);\n\nexit:\n  return retcode;\n}\n"
  },
  {
    "path": "build/instruments/build-python/pyconfig.h",
    "content": "#if defined(__ARM_ARCH_5TE__)\n#include \"pyconfig_armeabi.h\"\n#elif defined(__ARM_ARCH_7A__) && !defined(__ARM_PCS_VFP)\n#include \"pyconfig_armeabi_v7a.h\"\n#elif defined(__ARM_ARCH_7A__) && defined(__ARM_PCS_VFP)\n#include \"pyconfig_armeabi_v7a_hard.h\"\n#elif defined(__aarch64__)\n#include \"pyconfig_arm64_v8a.h\"\n#elif defined(__i386__)\n#include \"pyconfig_x86.h\"\n#elif defined(__x86_64__)\n#include \"pyconfig_x86_64.h\"\n#elif defined(__mips__) && !defined(__mips64)\n#include \"pyconfig_mips.h\"\n#elif defined(__mips__) && defined(__mips64)\n#include \"pyconfig_mips64.h\"\n#else\n#error \"Unsupported ABI\"\n#endif\n\n"
  },
  {
    "path": "build/instruments/build-python/site.py",
    "content": "from __future__ import print_function\nimport sys\nimport os\nif sys.version_info < (3, 0):\n    import __builtin__ as builtins\nelse:\n    import builtins\nimport _sitebuiltins\n\n\ndef makepath(*paths):\n    dir = os.path.join(*paths)\n    try:\n        dir = os.path.abspath(dir)\n    except OSError:\n        pass\n    return dir, os.path.normcase(dir)\n\n\ndef abs_paths():\n    \"\"\"Set all module __file__ and __cached__ attributes to an absolute path\"\"\"\n    for m in set(sys.modules.values()):\n        if (getattr(getattr(m, '__loader__', None), '__module__', None) !=\n                '_frozen_importlib'):\n            continue   # don't mess with a PEP 302-supplied __file__\n        try:\n            m.__file__ = os.path.abspath(m.__file__)\n        except (AttributeError, OSError):\n            pass\n        try:\n            m.__cached__ = os.path.abspath(m.__cached__)\n        except (AttributeError, OSError):\n            pass\n\n\ndef addpackage(sitedir, name, known_paths):\n    \"\"\"Process a .pth file within the site-packages directory:\n       For each line in the file, either combine it with sitedir to a path\n       and add that to known_paths, or execute it if it starts with 'import '.\n    \"\"\"\n    fullname = os.path.join(sitedir, name)\n    try:\n        f = open(fullname, \"r\")\n    except OSError:\n        return\n    with f:\n        for n, line in enumerate(f):\n            if line.startswith(\"#\"):\n                continue\n            try:\n                if line.startswith((\"import \", \"import\\t\")):\n                    exec(line)\n                    continue\n                line = line.rstrip()\n                dir, dircase = makepath(sitedir, line)\n                if not dircase in known_paths and os.path.exists(dir):\n                    sys.path.append(dir)\n                    known_paths.add(dircase)\n            except Exception:\n                print(\"Error processing line {:d} of {}:\\n\".format(n+1, fullname),\n                      file=sys.stderr)\n                import traceback\n                for record in traceback.format_exception(*sys.exc_info()):\n                    for line in record.splitlines():\n                        print('  '+line, file=sys.stderr)\n                print(\"\\nRemainder of file ignored\", file=sys.stderr)\n                break\n\n\ndef add_zip_package(sitedir, zip_name, known_paths):\n    dir, dircase = makepath(sitedir, zip_name)\n    if not dircase in known_paths and os.path.exists(dir):\n        sys.path.append(dir)\n\n\ndef addsitedir(sitedir, known_paths):\n    sitedir, sitedircase = makepath(sitedir)\n    if not sitedircase in known_paths:\n        sys.path.append(sitedir)\n        known_paths.add(sitedircase)\n    try:\n        names = os.listdir(sitedir)\n    except OSError:\n        return\n    pth_names = [name for name in names if name.endswith(\".pth\")]\n    for name in sorted(pth_names):\n        addpackage(sitedir, name, known_paths)\n    for site_endpath in known_paths:\n        ext_names = []\n        try:\n            ext_names = os.listdir(site_endpath)\n        except OSError:\n            pass\n        zip_names = [name for name in ext_names if name.endswith(\".zip\")]\n        for name in sorted(zip_names):\n            add_zip_package(site_endpath, name, known_paths)\n\n\ndef setquit():\n    \"\"\"Define new builtins 'quit' and 'exit'.\n\n    These are objects which make the interpreter exit when called.\n    The repr of each object contains a hint at how it works.\n\n    \"\"\"\n    if os.sep == ':':\n        eof = 'Cmd-Q'\n    elif os.sep == '\\\\':\n        eof = 'Ctrl-Z plus Return'\n    else:\n        eof = 'Ctrl-D (i.e. EOF)'\n\n    builtins.quit = _sitebuiltins.Quitter('quit', eof)\n    builtins.exit = _sitebuiltins.Quitter('exit', eof)\n\n\ndef setcopyright():\n    \"\"\"Set 'copyright' and 'credits' in builtins\"\"\"\n    builtins.copyright = _sitebuiltins._Printer(\"copyright\", sys.copyright)\n    builtins.credits = _sitebuiltins._Printer(\"credits\", \"\"\"\\\n    Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands\n    for supporting Python development.  See www.python.org for more information.\"\"\")\n    builtins.license = _sitebuiltins._Printer(\n        \"license\",\n        \"See https://www.python.org/psf/license/\")\n\n\ndef sethelper():\n    builtins.help = _sitebuiltins._Helper()\n\n\ndef aliasmbcs():\n    if sys.platform == 'win32':\n        if sys.version_info < (3, 0):\n            import locale, codecs\n            enc = locale.getdefaultlocale()[1]\n        else:\n            import _bootlocale, codecs\n            enc = _bootlocale.getpreferredencoding(False)\n        if enc.startswith('cp'):\n            try:\n                codecs.lookup(enc)\n            except LookupError:\n                import encodings\n                encodings._cache[enc] = encodings._unknown\n                encodings.aliases.aliases[enc] = 'mbcs'\n\n\ndef main():\n    abs_paths()\n    sitedir = os.path.join(os.path.dirname(sys.executable), \"site-packages\")\n    if os.path.isdir(sitedir):\n        known_paths = set()\n        addsitedir(sitedir, known_paths)\n\n    setquit()\n    setcopyright()\n    sethelper()\n    aliasmbcs()\n\n\nif not sys.flags.no_site:\n    main()\n"
  },
  {
    "path": "build/instruments/build-python/stdlib.config",
    "content": "[CONFIG]\n\nIGNORE_DIR =\n  site-packages\n  curses\n  dbm\n  distutils\n  idlelib\n  lib2to3\n  msilib\n  pydoc_data\n  tkinter\n  turtledemo\n  venv\n  ensurepip\n  bsddb\n  lib-tk\n\n\nIGNORE_FILE =\n  site.py\n  sysconfig.py\n  turtle.py\n  tabnanny.py\n  this.py\n  __phello__.foo.py\n  _osx_support.py\n  asyncio/test_utils.py\n  anydbm.py\n  user.py\n  whichdb.py\n"
  },
  {
    "path": "build/instruments/build-python/sysconfig.py",
    "content": "\"\"\"Access to Python's configuration information.\"\"\"\n\nfrom __future__ import print_function\nimport os\nimport sys\nimport os.path\n\n__all__ = [\n    'get_config_var',\n    'get_config_vars',\n    'get_path',\n    'get_path_names',\n    'get_paths',\n    'get_platform',\n    'get_python_version',\n    'get_scheme_names',\n]\n\n_INSTALL_SCHEMES = {\n    'bundled': {\n        'stdlib': '{{bundled_root}}/python{0}{1}.zip'.format(sys.version_info[0], sys.version_info[1]),\n        'platstdlib': '{bundled_root}/modules',\n        'purelib': '{bundled_root}/site-packages',\n        'platlib': '{bundled_root}/site-packages',\n        },\n    }\n\n_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib')\n_PY_VERSION_SHORT = '{0}.{1}'.format(sys.version_info[0], sys.version_info[1])\n_CONFIG_VARS = None\n\n\ndef _subst_vars(s, local_vars):\n    try:\n        return s.format(**local_vars)\n    except KeyError:\n        try:\n            return s.format(**os.environ)\n        except KeyError as var:\n            raise AttributeError('{%s}' % var)\n\ndef _extend_dict(target_dict, other_dict):\n    target_keys = target_dict.keys()\n    for key, value in other_dict.items():\n        if key in target_keys:\n            continue\n        target_dict[key] = value\n\n\ndef _expand_vars(scheme, vars):\n    res = {}\n    if vars is None:\n        vars = {}\n    _extend_dict(vars, {'bundled_root': os.path.dirname(sys.executable)})\n\n    for key, value in _INSTALL_SCHEMES[scheme].items():\n        normalized_path = os.path.normpath(_subst_vars(value, vars))\n        if os.path.exists(normalized_path):\n            res[key] = normalized_path\n    return res\n\n\ndef _get_default_scheme():\n    return 'bundled'\n\n\ndef _init_config_vars(vars):\n    from _sysconfigdata import build_time_vars\n    vars.update(build_time_vars)\n\n#\n# public APIs\n#\n\ndef get_scheme_names():\n    \"\"\"Return a tuple containing the schemes names.\"\"\"\n    return tuple(sorted(_INSTALL_SCHEMES))\n\n\ndef get_path_names():\n    \"\"\"Return a tuple containing the paths names.\"\"\"\n    return _SCHEME_KEYS\n\n\ndef get_paths(scheme=_get_default_scheme(), vars=None, expand=True):\n    \"\"\"Return a mapping containing an install scheme.\n\n    ``scheme`` is the install scheme name. If not provided, it will\n    return the default scheme for the current platform.\n    \"\"\"\n    if expand:\n        return _expand_vars(scheme, vars)\n    else:\n        return _INSTALL_SCHEMES[scheme]\n\n\ndef get_path(name, scheme=_get_default_scheme(), vars=None, expand=True):\n    \"\"\"Return a path corresponding to the scheme.\n\n    ``scheme`` is the install scheme name.\n    \"\"\"\n    return get_paths(scheme, vars, expand)[name]\n\n\ndef get_config_vars(*args):\n    \"\"\"With no arguments, return a dictionary of all configuration\n    variables relevant for the current platform.\n\n    With arguments, return a list of values that result from looking up\n    each argument in the configuration variable dictionary.\n    \"\"\"\n    global _CONFIG_VARS\n    if _CONFIG_VARS is None:\n        _CONFIG_VARS = {}\n        _init_config_vars(_CONFIG_VARS)\n\n    if args:\n        vals = []\n        for name in args:\n            vals.append(_CONFIG_VARS.get(name))\n        return vals\n    else:\n        return _CONFIG_VARS\n\n\ndef get_config_var(name):\n    \"\"\"Return the value of a single variable using the dictionary returned by\n    'get_config_vars()'.\n\n    Equivalent to get_config_vars().get(name)\n    \"\"\"\n    return get_config_vars().get(name)\n\n\ndef get_platform():\n    \"\"\"Return a string that identifies the current platform.\"\"\"\n    if os.name == 'nt':\n        if sys.maxsize >= 2**32:\n            return 'win-amd64'\n        return 'win32'\n\n    osname, host, release, version, machine = os.uname()\n\n    osname = osname.lower().replace('/', '')\n    machine = machine.replace(' ', '_')\n    machine = machine.replace('/', '-')\n\n    if osname[:6] == 'darwin':\n        osname = 'macosx'\n        machine = 'i386'\n        if sys.maxsize >= 2**32:\n            machine = 'x86_64'\n\n    return \"%s-%s\" % (osname, machine)\n\n\ndef get_python_version():\n    return _PY_VERSION_SHORT\n\n\ndef _print_dict(title, data):\n    for index, (key, value) in enumerate(sorted(data.items())):\n        if index == 0:\n            print('%s: ' % (title))\n        print('\\t%s = \"%s\"' % (key, value))\n\n\ndef _main():\n    print('Platform: \"%s\"' % get_platform())\n    print('Python version: \"%s\"' % get_python_version())\n    print('Current installation scheme: \"%s\"' % _get_default_scheme())\n    _print_dict('Paths', get_paths())\n    _print_dict('Variables', get_config_vars())\n\n\nif __name__ == '__main__':\n    _main()\n"
  },
  {
    "path": "build/instruments/build-renderscript.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to rebuild the host 'ndk-stack' tool from the\n# sources under sources/host-tools/ndk-stack.\n#\n# Note: The tool is installed under prebuilt/$HOST_TAG/bin/ndk-stack\n#       by default.\n#\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to copy RenderScript prebuilts into specified dir.\"\n\n# the list of supported host development systems\nSYSTEMS=$DEFAULT_SYSTEMS\nregister_var_option \"--systems=<list>\" SYSTEMS \"Specify host systems\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$ANDROID_NDK_ROOT/../../platform/prebuilts/rs\n\nif [ -z \"$PACKAGE_DIR\" ]; then\n    fail_panic \"PACKAGE_DIR parameter is required\"\nelse\n    cp \"$SRCDIR/renderscript.tar.xz\" \"$PACKAGE_DIR/\"\n    fail_panic \"Failed to copy $SRCDIR/renderscript.tar.xz to $PACKAGE_DIR/\"\n    for SYSTEM in $SYSTEMS; do\n        SYSNAME=$SYSTEM\n        if [ \"$TRY64\" = \"yes\" ]; then\n            case $SYSTEM in\n                darwin-x86|linux-x86)\n                    SYSNAME=${SYSTEM%%x86}x86_64\n                    ;;\n                windows)\n                    SYSNAME=windows-x86_64\n                    ;;\n            esac\n        fi\n        cp \"$SRCDIR/renderscript-$SYSNAME.tar.xz\" \"$PACKAGE_DIR/\"\n        fail_panic \"Failed to copy $SRCDIR/renderscript-$SYSNAME.tar.xz to $PACKAGE_DIR/\"\n    done\nfi\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "build/instruments/build-sqlite3.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild sqlite3 libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$SQLITE3_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$PREBUILT_ABIS\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSQLITE3_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SQLITE3_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the sqlite3 source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$SQLITE3_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SQLITE3_SRCDIR'\"\n    exit 1\nfi\n\nSQLITE3_SRCDIR=$(cd $SQLITE3_SRCDIR && pwd)\n\nSQLITE3_DSTDIR=$NDK_DIR/$SQLITE3_SUBDIR\nmkdir -p $SQLITE3_DSTDIR\nfail_panic \"Can't create sqlite3 destination directory: $SQLITE3_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-sqlite3\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\n# $3: type (static or shared)\nbuild_sqlite3_for_abi ()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n    local TYPE=\"$3\"\n\n    dump \"Building sqlite3 $ABI $TYPE libraries\"\n\n    run mkdir -p $BUILDDIR/jni\n    fail_panic \"Can't create $BUILDDIR/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := sqlite3'\n        echo \"LOCAL_SRC_FILES := $SQLITE3_SRCDIR/sqlite3.c\"\n        echo \"LOCAL_INCLUDES := $SQLITE3_SRCDIR/\"\n        echo 'LOCAL_CFLAGS := -Wall -Wno-unused -Wno-multichar -Wno-strict-aliasing -Werror'\n        # todo: zuav:\n        #echo 'LOCAL_CFLAGS := -Wall -Wno-unused -Wno-multichar -Wstrict-aliasing=2 -Werror'\n        #case $ABI in\n        #    x86|x86_64|arm64-v8a)\n        #        echo 'LOCAL_CFLAGS += -Wno-strict-aliasing'\n        #        ;;\n        #esac\n        echo 'LOCAL_CFLAGS += -fno-exceptions -fmessage-length=0'\n        echo 'LOCAL_CFLAGS += -DSQLITE_THREADSAFE=1'\n        echo \"include \\$(BUILD_$(echo $TYPE | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n    } | cat >$BUILDDIR/jni/Android.mk\n    fail_panic \"Can't generate Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR APP_ABI=$ABI V=1\n    fail_panic \"Can't build sqlite3 $ABI $TYPE library\"\n\n    if [ \"$SQLITE3_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install sqlite3 headers into $SQLITE3_DSTDIR\"\n        run rm -Rf $SQLITE3_DSTDIR/include\n        run mkdir -p $SQLITE3_DSTDIR/include && \\\n        run cp -p $SQLITE3_SRCDIR/*.h $SQLITE3_DSTDIR/include\n        fail_panic \"Can't install sqlite3 headers\"\n        SQLITE3_HEADERS_INSTALLED=yes\n        export SQLITE3_HEADERS_INSTALLED\n    fi\n\n    log \"Install sqlite3 $TYPE $ABI libraries into $SQLITE3_DSTDIR\"\n    run mkdir -p $SQLITE3_DSTDIR/libs/$ABI\n    fail_panic \"Can't create $SQLITE3_DSTDIR/libs/$ABI\"\n\n    local LIBSUFFIX\n    if [ \"$TYPE\" = \"shared\" ]; then\n        LIBSUFFIX=so\n    else\n        LIBSUFFIX=a\n    fi\n\n    local OBJDIR=$BUILDDIR/obj/local/$ABI\n\n    run cp -fpH $OBJDIR/libsqlite3.$LIBSUFFIX $SQLITE3_DSTDIR/libs/$ABI\n    fail_panic \"Can't install sqlite3 $TYPE $ABI library\"\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"sqlite3-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        SQLITE3_BUILD_FILES_NEED_PACKAGE=no\n    else\n        SQLITE3_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"sqlite3-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        SQLITE3_HEADERS_NEED_PACKAGE=no\n    else\n        SQLITE3_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"sqlite3-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$SQLITE3_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        for TYPE in static shared; do\n            build_sqlite3_for_abi $ABI \"$BUILD_DIR/$ABI/$TYPE\" \"$TYPE\"\n        done\n    fi\ndone\n\nlog \"Generating $SQLITE3_DSTDIR/Android.mk\"\n{\n    echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n    echo \"\"\n    cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n    echo \"\"\n    echo 'LOCAL_PATH := $(call my-dir)'\n\n    for suffix in a so; do\n        if [ \"$suffix\" = \"a\" ]; then\n            type=static\n        else\n            type=shared\n        fi\n\n        echo ''\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := sqlite3_${type}\"\n        echo \"LOCAL_SRC_FILES := libs/\\$(TARGET_ARCH_ABI)/libsqlite3.${suffix}\"\n        echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n        echo \"include \\$(PREBUILT_$(echo $type | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n    done\n} | cat >$SQLITE3_DSTDIR/Android.mk\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$SQLITE3_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk; do\n            FILES=\"$FILES $SQLITE3_SUBDIR/$F\"\n        done\n        PACKAGE_NAME=\"sqlite3-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package sqlite3 build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    if [ \"$SQLITE3_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$SQLITE3_SUBDIR/include\"\n        PACKAGE_NAME=\"sqlite3-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package sqlite3 headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$SQLITE3_SUBDIR/libs/$ABI\"\n        PACKAGE_NAME=\"sqlite3-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI sqlite3 binaries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-support.sh",
    "content": "#!/bin/sh\n#\n# Copyright (C) 2013 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild android support library for the Android NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$SUPPORT_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nGCC_VERSION=\nregister_var_option \"--gcc-version=<ver>\" GCC_VERSION \"Specify GCC version\"\n\nLLVM_VERSION=\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-support\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# Compiler flags we want to use\nSUPPORT_CFLAGS=\"-fPIC -O2 -DANDROID -D__ANDROID__ -ffunction-sections -std=c99\"\nSUPPORT_CFLAGS=$SUPPORT_CFLAGS\" -I$SUPPORT_SUBDIR/include\"\nSUPPORT_LDFLAGS=\"\"\n\n# android/support files for libc++\nSUPPORT32_SOURCES=\\\n\"src/locale_support.c \\\nsrc/math_support.c \\\nsrc/stdlib_support.c \\\nsrc/wchar_support.c \\\nsrc/locale/duplocale.c \\\nsrc/locale/freelocale.c \\\nsrc/locale/localeconv.c \\\nsrc/locale/newlocale.c \\\nsrc/locale/uselocale.c \\\nsrc/stdio/stdio_impl.c \\\nsrc/stdio/strtod.c \\\nsrc/stdio/vfprintf.c \\\nsrc/stdio/vfwprintf.c \\\nsrc/msun/e_log2.c \\\nsrc/msun/e_log2f.c \\\nsrc/msun/s_nan.c \\\nsrc/musl-multibyte/btowc.c \\\nsrc/musl-multibyte/internal.c \\\nsrc/musl-multibyte/mblen.c \\\nsrc/musl-multibyte/mbrlen.c \\\nsrc/musl-multibyte/mbrtowc.c \\\nsrc/musl-multibyte/mbsinit.c \\\nsrc/musl-multibyte/mbsnrtowcs.c \\\nsrc/musl-multibyte/mbsrtowcs.c \\\nsrc/musl-multibyte/mbstowcs.c \\\nsrc/musl-multibyte/mbtowc.c \\\nsrc/musl-multibyte/wcrtomb.c \\\nsrc/musl-multibyte/wcsnrtombs.c \\\nsrc/musl-multibyte/wcsrtombs.c \\\nsrc/musl-multibyte/wcstombs.c \\\nsrc/musl-multibyte/wctob.c \\\nsrc/musl-multibyte/wctomb.c \\\nsrc/musl-ctype/iswalnum.c \\\nsrc/musl-ctype/iswalpha.c \\\nsrc/musl-ctype/iswblank.c \\\nsrc/musl-ctype/iswcntrl.c \\\nsrc/musl-ctype/iswctype.c \\\nsrc/musl-ctype/iswdigit.c \\\nsrc/musl-ctype/iswgraph.c \\\nsrc/musl-ctype/iswlower.c \\\nsrc/musl-ctype/iswprint.c \\\nsrc/musl-ctype/iswpunct.c \\\nsrc/musl-ctype/iswspace.c \\\nsrc/musl-ctype/iswupper.c \\\nsrc/musl-ctype/iswxdigit.c \\\nsrc/musl-ctype/isxdigit.c \\\nsrc/musl-ctype/towctrans.c \\\nsrc/musl-ctype/wcswidth.c \\\nsrc/musl-ctype/wctrans.c \\\nsrc/musl-ctype/wcwidth.c \\\nsrc/musl-locale/catclose.c \\\nsrc/musl-locale/catgets.c \\\nsrc/musl-locale/catopen.c \\\nsrc/musl-locale/iconv.c \\\nsrc/musl-locale/intl.c \\\nsrc/musl-locale/isalnum_l.c \\\nsrc/musl-locale/isalpha_l.c \\\nsrc/musl-locale/isblank_l.c \\\nsrc/musl-locale/iscntrl_l.c \\\nsrc/musl-locale/isdigit_l.c \\\nsrc/musl-locale/isgraph_l.c \\\nsrc/musl-locale/islower_l.c \\\nsrc/musl-locale/isprint_l.c \\\nsrc/musl-locale/ispunct_l.c \\\nsrc/musl-locale/isspace_l.c \\\nsrc/musl-locale/isupper_l.c \\\nsrc/musl-locale/iswalnum_l.c \\\nsrc/musl-locale/iswalpha_l.c \\\nsrc/musl-locale/iswblank_l.c \\\nsrc/musl-locale/iswcntrl_l.c \\\nsrc/musl-locale/iswctype_l.c \\\nsrc/musl-locale/iswdigit_l.c \\\nsrc/musl-locale/iswgraph_l.c \\\nsrc/musl-locale/iswlower_l.c \\\nsrc/musl-locale/iswprint_l.c \\\nsrc/musl-locale/iswpunct_l.c \\\nsrc/musl-locale/iswspace_l.c \\\nsrc/musl-locale/iswupper_l.c \\\nsrc/musl-locale/iswxdigit_l.c \\\nsrc/musl-locale/isxdigit_l.c \\\nsrc/musl-locale/langinfo.c \\\nsrc/musl-locale/strcasecmp_l.c \\\nsrc/musl-locale/strcoll.c \\\nsrc/musl-locale/strerror_l.c \\\nsrc/musl-locale/strfmon.c \\\nsrc/musl-locale/strftime_l.c \\\nsrc/musl-locale/strncasecmp_l.c \\\nsrc/musl-locale/strxfrm.c \\\nsrc/musl-locale/tolower_l.c \\\nsrc/musl-locale/toupper_l.c \\\nsrc/musl-locale/towctrans_l.c \\\nsrc/musl-locale/towlower_l.c \\\nsrc/musl-locale/towupper_l.c \\\nsrc/musl-locale/wcscoll.c \\\nsrc/musl-locale/wcsxfrm.c \\\nsrc/musl-locale/wctrans_l.c \\\nsrc/musl-locale/wctype_l.c \\\nsrc/musl-math/frexpf.c \\\nsrc/musl-math/frexpl.c \\\nsrc/musl-math/frexp.c \\\nsrc/musl-stdio/swprintf.c \\\nsrc/musl-stdio/vwprintf.c \\\nsrc/musl-stdio/wprintf.c \\\nsrc/musl-stdio/printf.c \\\nsrc/musl-stdio/snprintf.c \\\nsrc/musl-stdio/sprintf.c \\\nsrc/musl-stdio/vprintf.c \\\nsrc/musl-stdio/vsprintf.c \\\nsrc/wcstox/intscan.c \\\nsrc/wcstox/floatscan.c \\\nsrc/wcstox/shgetc.c \\\nsrc/wcstox/wcstod.c \\\nsrc/wcstox/wcstol.c \\\n\"\n# Replaces broken implementations in x86 libm.so\nSUPPORT32_SOURCES_x86=\\\n\"src/musl-math/scalbln.c \\\nsrc/musl-math/scalblnf.c \\\nsrc/musl-math/scalblnl.c \\\nsrc/musl-math/scalbnl.c \\\n\"\n\n# android/support files for libc++\nSUPPORT64_SOURCES=\\\n\"src/musl-locale/catclose.c \\\nsrc/musl-locale/catgets.c \\\nsrc/musl-locale/catopen.c \\\n\"\n\n# If the --no-makefile flag is not used, we're going to put all build\n# commands in a temporary Makefile that we will be able to invoke with\n# -j$NUM_JOBS to build stuff in parallel.\n#\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\n# build_support_libs_for_abi\n# $1: ABI\n# $2: build directory\n# $3: (optional) installation directory\nbuild_support_libs_for_abi ()\n{\n    local ARCH BINPREFIX\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local DSTDIR=\"$3\"\n    local GCCVER\n\n    mkdir -p \"$BUILDDIR\"\n\n    # If the output directory is not specified, use default location\n    if [ -z \"$DSTDIR\" ]; then\n        DSTDIR=$NDK_DIR/$SUPPORT_SUBDIR/libs/$ABI\n    fi\n\n    mkdir -p \"$DSTDIR\"\n    ARCH=$(convert_abi_to_arch $ABI)\n    if [ -n \"$GCC_VERSION\" ]; then\n        GCCVER=$GCC_VERSION\n    else\n        GCCVER=$(get_default_gcc_version_for_arch $ARCH)\n    fi\n\n    builder_begin_android $ABI \"$BUILDDIR\" \"$GCCVER\" \"$LLVM_VERSION\" \"$MAKEFILE\"\n    builder_set_srcdir \"$SUPPORT_SUBDIR\"\n    builder_set_dstdir \"$DSTDIR\"\n\n    builder_cflags \"$SUPPORT_CFLAGS\"\n\n    if [ $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n    fi\n\n    builder_ldflags \"$SUPPORT_LDFLAGS\"\n    if [ $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-Wl,--no-warn-mismatch -lm_hard\"\n    fi\n\n    if [ \"$ABI\" = \"${ABI%%64*}\" ]; then\n        if [ \"$ABI\" = \"x86\" ]; then\n            builder_sources $SUPPORT32_SOURCES $SUPPORT32_SOURCES_x86\n        else\n            builder_sources $SUPPORT32_SOURCES\n        fi\n    else\n        builder_sources $SUPPORT64_SOURCES\n    fi\n\n    log \"Building $DSTDIR/libandroid_support.a\"\n    builder_static_library libandroid_support\n\n    builder_end\n}\n\nfor ABI in $ABIS; do\n    build_support_libs_for_abi $ABI \"$BUILD_DIR/$ABI\" \"$OUT_DIR\"\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $ABIS; do\n        FILES=\"$SUPPORT_SUBDIR/libs/$ABI/libandroid_support.a\"\n        PACKAGE=\"$PACKAGE_DIR/support-libs-$ABI.tar.bz2\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI support binary!\"\n        dump \"Packaging: $PACKAGE\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-bash.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Bash for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/bash/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Bash source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting Bash version... \"\nBASH_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/doc/version.texi 2>/dev/null | sed 's,^.*\\([1-9][0-9]*\\.[1-9][0-9]*\\)$,\\1,')\nif [ -z \"$BASH_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect Bash version!\" 1>&2\n    exit 1\nfi\ndump \"$BASH_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-bash\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_bash_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/bash/$BASH_VERSION/$ABI\"\n\n    dump \"Building $ABI Bash\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Bash\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/bash $INSTALLDIR/\n    fail_panic \"Can't install $ABI Bash\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-bash-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_bash_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/bash/$BASH_VERSION/$ABI/bash\"\n        PACKAGE_NAME=\"android-bash-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Bash binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-cpulimit.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild cpulimit for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/cpulimit/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the cpulimit source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting cpulimit version... \"\nPACKAGE_VERSION=$(cat $SRCDIR/VERSION)\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect cpulimit version!\" 1>&2\n    exit 1\nfi\ndump \"$PACKAGE_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-cpulimit\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_cpulimit_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/cpulimit/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI cpulimit\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI cpulimit\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/cpulimit $INSTALLDIR/\n    fail_panic \"Can't install $ABI cpulimit\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-cpulimit-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_cpulimit_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/cpulimit/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-cpulimit-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI cpulimit binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-ffmpeg.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild ffmpeg for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/ffmpeg/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the ffmpeg source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-ffmpeg\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting ffmpeg version... \"\nPACKAGE_VERSION=$(cd $SRCDIR && ./version.sh)\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    panic \"Couldn't detect ffmpeg version!\"\nfi\ndump \"$PACKAGE_VERSION\"\n\n# $1: ABI\n# $2: build directory\nbuild_ffmpeg_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/ffmpeg/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI ffmpeg\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI ffmpeg\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    rm -Rf $OUTDIR/install/share $OUTDIR/install/lib/pkgconfig\n\n    run rsync -a --delete $OUTDIR/install/ $INSTALLDIR/\n    fail_panic \"Can't install $ABI ffmpeg\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-ffmpeg-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_ffmpeg_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/ffmpeg/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-ffmpeg-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI ffmpeg binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-coreutils.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU coreutils for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/gnu-coreutils/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU coreutils source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting GNU coreutils version... \"\nGNU_COREUTILS_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/doc/version.texi 2>/dev/null | sed 's,^.*\\([1-9][0-9]*\\.[1-9][0-9]*\\)$,\\1,')\nif [ -z \"$GNU_COREUTILS_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU coreutils version!\" 1>&2\n    exit 1\nfi\ndump \"$GNU_COREUTILS_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-coreutils\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: sources directory\n# $3: build directory\nbuild_coreutils_for_abi ()\n{\n    local ABI=$1\n    local SRCDIR=\"$2\"\n    local OUTDIR=\"$3\"\n    local INSTALLDIR=\"$NDK/packages/gnu-coreutils/$GNU_COREUTILS_VERSION/$ABI\"\n\n    dump \"Building $ABI Coreutils\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Coreutils\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/coreutils $INSTALLDIR/\n    fail_panic \"Can't install $ABI Coreutils\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-coreutils-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        rm -Rf \"$BUILD_DIR/$ABI/src\" && \\\n        mkdir -p \"$BUILD_DIR/$ABI\" && \\\n        cp -r \"$SRCDIR\" \"$BUILD_DIR/$ABI/src\"\n        fail_panic \"Can't copy sources for $ABI\"\n        build_coreutils_for_abi $ABI \"$BUILD_DIR/$ABI/src\" \"$BUILD_DIR/$ABI/out\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-coreutils/$GNU_COREUTILS_VERSION/$ABI/coreutils\"\n        PACKAGE_NAME=\"android-gnu-coreutils-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Coreutils binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-grep.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU grep for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/gnu-grep/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU grep source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting GNU grep version... \"\nGNU_GREP_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/doc/version.texi 2>/dev/null | sed 's,^.*\\([1-9][0-9]*\\.[1-9][0-9]*\\)$,\\1,')\nif [ -z \"$GNU_GREP_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU grep version!\" 1>&2\n    exit 1\nfi\ndump \"$GNU_GREP_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-grep\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_grep_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/gnu-grep/$GNU_GREP_VERSION/$ABI\"\n\n    dump \"Building $ABI GNU grep\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI GNU grep\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/grep $INSTALLDIR/\n    fail_panic \"Can't install $ABI GNU grep\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-grep-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_grep_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-grep/$GNU_GREP_VERSION/$ABI/grep\"\n        PACKAGE_NAME=\"android-gnu-grep-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU grep binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-less.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU less for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/gnu-less/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU less source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-less\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting GNU less version... \"\nPACKAGE_VERSION=$(grep '^char  *version\\>' $SRCDIR/version.c | sed 's,^[^\"]*\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    panic \"Couldn't detect GNU less version!\"\nfi\ndump \"$PACKAGE_VERSION\"\n\ndump_n \"Detecting ncurses version...\"\nNCURSES_VERSION=$(ls -1 $NDK_DIR/packages/ncurses/ | sort | uniq | tail -n 1)\nif [ -z \"$NCURSES_VERSION\" ]; then\n    panic \"Couldn't detect ncurses version!\"\nfi\ndump \"$NCURSES_VERSION\"\nNCURSES=$NDK_DIR/packages/ncurses/$NCURSES_VERSION\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_less_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/gnu-less/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI GNU less\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n        NCURSES=$NCURSES/$ABI \\\n\n    fail_panic \"Couldn't build $ABI GNU less\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    for p in less lessecho lesskey; do\n        run cp -f $OUTDIR/install/bin/$p $INSTALLDIR/\n        fail_panic \"Can't install $ABI GNU less\"\n    done\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-less-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_less_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-less/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-gnu-less-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU less binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-sed.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU sed for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/prebuilt/android-\\$ARCH, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU sed source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting GNU sed version... \"\nGNU_SED_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/doc/version.texi 2>/dev/null | sed 's,^[^0-9]*\\([1-9][0-9]*\\(\\.[1-9][0-9]*\\)*\\)$,\\1,')\nif [ -z \"$GNU_SED_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU sed version!\" 1>&2\n    exit 1\nfi\ndump \"$GNU_SED_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-sed\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_sed_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/gnu-sed/$GNU_SED_VERSION/$ABI\"\n\n    dump \"Building $ABI GNU sed\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI GNU sed\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/sed $INSTALLDIR/\n    fail_panic \"Can't install $ABI GNU sed\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-sed-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_sed_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-sed/$GNU_SED_VERSION/$ABI/sed\"\n        PACKAGE_NAME=\"android-gnu-sed-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU sed binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-tar.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU tar for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/gnu-tar/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU tar source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting GNU tar version... \"\nGNU_TAR_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/doc/version.texi 2>/dev/null | sed 's,^[^0-9]*\\([1-9][0-9]*\\(\\.[1-9][0-9]*\\)*\\)$,\\1,')\nif [ -z \"$GNU_TAR_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU tar version!\" 1>&2\n    exit 1\nfi\ndump \"$GNU_TAR_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-tar\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_tar_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/gnu-tar/$GNU_TAR_VERSION/$ABI\"\n\n    dump \"Building $ABI GNU tar\"\n\n    rm -Rf $OUTDIR\n    mkdir -p $OUTDIR/ && cp -r \"$SRCDIR\" \"$OUTDIR/src\"\n    fail_panic \"Couldn't copy sources for $ABI build\"\n\n    run make -C $OUTDIR/src/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR/out \\\n\n    fail_panic \"Couldn't build $ABI GNU tar\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/out/install/bin/tar $INSTALLDIR/\n    fail_panic \"Can't install $ABI GNU tar\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-tar-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_tar_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-tar/$GNU_TAR_VERSION/$ABI/tar\"\n        PACKAGE_NAME=\"android-gnu-tar-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU tar binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-which.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU which for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/prebuilt/android-\\$ARCH, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU which source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump \"Detecting GNU which version...\"\nGNU_WHICH_VERSION=$(grep \"^@set  *VERSION\\>\" $SRCDIR/version.texi 2>/dev/null | sed 's,^.*\\([1-9][0-9]*\\.[1-9][0-9]*\\)$,\\1,')\nif [ -z \"$GNU_WHICH_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU which version!\" 1>&2\n    exit 1\nfi\ndump \"GNU which version: $GNU_WHICH_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-which\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_which_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=$NDK/packages/gnu-which/$GNU_WHICH_VERSION/$ABI\n\n    dump \"Building $ABI GNU which v${GNU_WHICH_VERSION}\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI GNU which\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/which $INSTALLDIR/\n    fail_panic \"Can't install $ABI GNU which\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-which-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_which_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/gnu-which/$GNU_WHICH_VERSION/$ABI/which\"\n        PACKAGE_NAME=\"android-gnu-which-${ABI}.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU which binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-gnu-zip.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNU zip for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/gnu-zip/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNU zip source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting GNU zip version... \"\nPACKAGE_VERSION=$(grep \"^#define  *VERSION\\>\" $SRCDIR/revision.h | sed 's,^[^\"]*\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect GNU zip version!\" 1>&2\n    exit 1\nfi\ndump \"$PACKAGE_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnu-zip\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_gnu_zip_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/gnu-zip/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI GNU zip\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI GNU zip\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    local f\n    for f in gzip gunzip zcat; do\n        run cp -f $OUTDIR/install/bin/$f $INSTALLDIR/\n        fail_panic \"Can't install $ABI GNU zip\"\n    done\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-gnu-zip-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_gnu_zip_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for f in $NDK/packages/gnu-zip/$PACKAGE_VERSION/$ABI/*; do\n            FILES=\"$FILES packages/gnu-zip/$PACKAGE_VERSION/$ABI/$(basename $f)\"\n        done\n        PACKAGE_NAME=\"android-gnu-zip-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNU zip binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-htop.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild htop for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/htop/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the htop source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-htop\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting htop version... \"\nHTOP_VERSION=$(grep '^#define  *VERSION\\>' $SRCDIR/config.h | sed 's,^[^\"]*\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$HTOP_VERSION\" ]; then\n    panic \"Couldn't detect htop version!\"\nfi\ndump \"$HTOP_VERSION\"\n\ndump_n \"Detecting ncurses version...\"\nNCURSES_VERSION=$(ls -1 $NDK_DIR/packages/ncurses/ | sort | uniq | tail -n 1)\nif [ -z \"$NCURSES_VERSION\" ]; then\n    panic \"Couldn't detect ncurses version!\"\nfi\ndump \"$NCURSES_VERSION\"\nNCURSES=$NDK_DIR/packages/ncurses/$NCURSES_VERSION\n\n# $1: ABI\n# $2: build directory\nbuild_htop_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/htop/$HTOP_VERSION/$ABI\"\n\n    dump \"Building $ABI htop\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n        NCURSES=$NCURSES/$ABI \\\n\n    fail_panic \"Couldn't build $ABI htop\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/htop $INSTALLDIR/\n    fail_panic \"Can't install $ABI htop\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-htop-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_htop_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/htop/$HTOP_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-htop-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI htop binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-info-unzip.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Info-UNZIP for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/info-unzip/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Info-UNZIP source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting Info-UNZIP version... \"\nINFO_UNZIP_VERSION=$(grep \"^ *#define  *UZ_VER_STRING\\>\" $SRCDIR/unzvers.h 2>/dev/null | sed 's,^ *#define  *UZ_VER_STRING  *\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$INFO_UNZIP_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect Info-UNZIP version!\" 1>&2\n    exit 1\nfi\ndump \"$INFO_UNZIP_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-info-unzip\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_info_unzip_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/info-unzip/$INFO_UNZIP_VERSION/$ABI\"\n\n    dump \"Building $ABI Info-UNZIP\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Info-UNZIP\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/unzip $INSTALLDIR/\n    fail_panic \"Can't install $ABI Info-UNZIP\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-info-unzip-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_info_unzip_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/info-unzip/$INFO_UNZIP_VERSION/$ABI/unzip\"\n        PACKAGE_NAME=\"android-info-unzip-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Info-UNZIP binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-info-zip.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Info-ZIP for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/info-zip/\\$VERSION, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Info-ZIP source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\ndump_n \"Detecting Info-ZIP version... \"\nINFO_ZIP_VERSION=$(grep \"^ *#define  *VERSION\\>\" $SRCDIR/revision.h 2>/dev/null | sed 's,^ *#define  *VERSION  *\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$INFO_ZIP_VERSION\" ]; then\n    echo \"*** ERROR: Can't detect Info-ZIP version!\" 1>&2\n    exit 1\nfi\ndump \"$INFO_ZIP_VERSION\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-info-zip\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_info_zip_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK/packages/info-zip/$INFO_ZIP_VERSION/$ABI\"\n\n    dump \"Building $ABI Info-ZIP\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Info-ZIP\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/zip $INSTALLDIR/\n    fail_panic \"Can't install $ABI Info-ZIP\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-info-zip-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_info_zip_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/info-zip/$INFO_ZIP_VERSION/$ABI/zip\"\n        PACKAGE_NAME=\"android-info-zip-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Info-ZIP binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-ncurses.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild ncurses for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/ncurses/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the ncurses source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-ncurses\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting ncurses version... \"\nNCURSES_VERSION=$(awk '{print $2}' $SRCDIR/VERSION)\nif [ -z \"$NCURSES_VERSION\" ]; then\n    panic \"Couldn't detect ncurses version!\"\nfi\ndump \"$NCURSES_VERSION\"\n\n# $1: ABI\n# $2: build directory\nbuild_ncurses_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/ncurses/$NCURSES_VERSION/$ABI\"\n\n    dump \"Building $ABI ncurses\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI ncurses\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    ( cd $OUTDIR/install && run tar czf $OUTDIR/install/share.tar.gz share ) && \\\n    run rm -Rf $OUTDIR/install/share && \\\n    run rm -Rf $OUTDIR/install/bin/ncurses*-config && \\\n    run rm -Rf $OUTDIR/install/lib/terminfo && \\\n    run rsync -aL --delete $OUTDIR/install/ $INSTALLDIR/\n    fail_panic \"Can't install $ABI ncurses\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-ncurses-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_ncurses_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/ncurses/$NCURSES_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-ncurses-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI ncurses binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-net-tools.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild net-tools for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/net-tools/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the net-tools source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-net-tools\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting net-tools version... \"\nPACKAGE_VERSION=$(grep \"^RELEASE\\s*=\" $SRCDIR/Makefile | sed 's,^RELEASE\\s*=\\s*\\(\\S*\\).*$,\\1,')\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    panic \"Couldn't detect net-tools version!\"\nfi\ndump \"$PACKAGE_VERSION\"\n\n# $1: ABI\n# $2: build directory\nbuild_net_tools_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/net-tools/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI net-tools\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI net-tools\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run cp -f $OUTDIR/install/bin/hostname $INSTALLDIR/ && \\\n    run cp -f $OUTDIR/install/bin/netstat  $INSTALLDIR/ && \\\n    run cp -f $OUTDIR/install/sbin/* $INSTALLDIR/\n    fail_panic \"Can't install $ABI net-tools\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-net-tools-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_net_tools_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/net-tools/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-net-tools-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI net-tools binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-openssh.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild OpenSSH for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/openssh/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the OpenSSH source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-openssh\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump \"Detecting OpenSSH version...\"\n\nOPENSSH_VERSION=\"\"\n\ncat >\"$BUILD_DIR/print-openssh-version.c\" <<EOF\n#include <stdio.h>\n#include \"$SRCDIR/version.h\"\nint main()\n{\n    printf(\"%s\\\\n\", SSH_RELEASE);\n    return 0;\n}\nEOF\ncc -o \"$BUILD_DIR/print-openssh-version\" \"$BUILD_DIR/print-openssh-version.c\" && \\\nOPENSSH_VERSION=$(\"$BUILD_DIR/print-openssh-version\" | sed 's,^OpenSSH_,,')\n\nif [ -z \"$OPENSSH_VERSION\" ]; then\n    panic \"Couldn't detect OpenSSH version!\"\nfi\n\ndump \"OpenSSH version: $OPENSSH_VERSION\"\n\n# $1: ABI\n# $2: build directory\nbuild_openssh_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/openssh/$OPENSSH_VERSION/$ABI\"\n\n    dump \"Building $ABI OpenSSH\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI OpenSSH\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run rsync -a --delete $OUTDIR/install/ $INSTALLDIR/ && \\\n    run rm -Rf $INSTALLDIR/share && \\\n    run rm -Rf $INSTALLDIR/var\n    fail_panic \"Can't install $ABI OpenSSH\"\n\n    local f\n    for f in ssh_config sshd_config; do\n        run sed -i \"s,$OUTDIR/install,\\$DEPLOY_ROOT,g\" $INSTALLDIR/etc/$f\n        fail_panic \"Can't process $ABI OpenSSH config file '$f'\"\n    done\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-openssh-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_openssh_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/openssh/$OPENSSH_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-openssh-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI OpenSSH binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-openssl.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild OpenSSL libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$OPENSSL_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$PREBUILT_ABIS\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nOPENSSL_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$OPENSSL_SRCDIR\" ]; then\n    panic \"Please provide the path to the OpenSSL source tree. See --help\"\nfi\n\nif [ ! -d \"$OPENSSL_SRCDIR\" ]; then\n    panic \"No such directory: '$OPENSSL_SRCDIR'\"\nfi\n\nOPENSSL_SRCDIR=$(cd $OPENSSL_SRCDIR && pwd)\nOPENSSL_SRC_VERSION=\\\n$(cat $OPENSSL_SRCDIR/crypto/opensslv.h | sed -n 's/#[ \\t]*define[ \\t]*OPENSSL_VERSION_TEXT[ \\t]*\"OpenSSL[ \\t]*\\([0-9\\.]*[A-Za-z]\\?\\)[A-Za-z0-9 \\.]*\"/\\1/p')\n\nif [ -z \"$OPENSSL_SRC_VERSION\" ]; then\n    panic \"Can't detect OpenSSL version.\"\nfi\n\nOPENSSL_DSTDIR=$NDK_DIR/$OPENSSL_SUBDIR/$OPENSSL_SRC_VERSION\nmkdir -p $OPENSSL_DSTDIR\nfail_panic \"Can't create OpenSSL destination directory: $OPENSSL_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=\"$NDK_TMPDIR/build-openssl\"\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\n\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Can't create build directory: $BUILD_DIR\"\n\n\n# $1: ABI\n# $2: build directory\nbuild_openssl_for_abi ()\n{\n    dump \"Building OpenSSL-$OPENSSL_SRC_VERSION for $ABI\"\n\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n    esac\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n    esac\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            OPENSSL_TARGET=linux-elf\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n    esac\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n\n    local LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    local BIN_WRAP_DIR=\"$BUILDDIR/bin-ndk\"\n    mkdir -p \"$BIN_WRAP_DIR\"\n    fail_panic \"Can't create directory: $BIN_WRAP_DIR\"\n\n    # gcc wrapper\n    local MY_GCC=\"$BIN_WRAP_DIR/${HOST}-gcc\"\n    {\n        echo '#!/bin/bash -e'\n        echo \"MY_CFLAGS=\\\"$CFLAGS\\\"\"\n        echo \"MY_LDFLAGS=\\\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\\\"\"\n        echo 'ARGS='\n        echo 'BUILD_DSO=yes'\n        echo 'for p in \"$@\"; do'\n        echo '    ARG_IS_SONAME=no'\n        echo '    ARG_IS_RPATH=no'\n        echo '    case $p in'\n        echo '        -c)'\n        echo '            BUILD_DSO=no'\n        echo '            ;;'\n        echo '        -Wl,-rpath,*)'\n        echo '            ARG_IS_RPATH=yes'\n        echo '            ;;'\n        echo '        -Wl,-soname=*)'\n        echo '            ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '    esac'\n        echo '    if [ \"$ARG_IS_RPATH\" = \"yes\" ]; then'\n        echo '        p='\n        echo '    fi'\n        echo '    if [ \"$ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '        p=$(echo $p | sed -n \"s/\\(.*\\.so\\).*/\\1/p\")'\n        echo '    fi'\n        echo '    if [ -n \"$p\" ]; then'\n        echo '        ARGS=\"$ARGS $p\"'\n        echo '    fi'\n        echo 'done'\n        echo 'if [ \"$BUILD_DSO\" = \"yes\" ]; then'\n        echo '    ARGS=\"$ARGS $MY_LDFLAGS\"'\n        echo 'else'\n        echo '    ARGS=\"$MY_CFLAGS $ARGS\"'\n        echo 'fi'\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH \\$ARGS\"\n    } >$MY_GCC\n    fail_panic \"Can't create gcc wrapper\"\n    chmod +x $MY_GCC\n    fail_panic \"Can't chmod +x gcc wrapper\"\n\n    # script to init obj-tree\n    local OBJTREE_WRAPPER=$BUILDDIR/mkobjtree.sh\n    {\n        echo '#!/bin/bash -e'\n        echo 'DIR_HERE=$(cd $(dirname $0) && pwd)'\n        echo \"OPENSSL_SOURCE=\\\"$OPENSSL_SRCDIR\\\"\"\n        echo 'mkdir -p $DIR_HERE/objtree'\n        echo 'cd $DIR_HERE/objtree'\n        echo 'echo \"Preparing OpenSSL obj-tree in $(pwd) ...\"'\n        echo '(cd $OPENSSL_SOURCE; find . -type f) | while read F; do'\n        echo '    mkdir -p $(dirname $F)'\n        echo '    rm -f $F'\n        echo '    if [ \"$F\" = \"./crypto/opensslconf.h\" ]; then'\n        echo '        cp -fpH $OPENSSL_SOURCE/crypto/opensslconf.h ./crypto'\n        echo '    elif [ \"$F\" = \"./crypto/cryptlib.h\" ]; then'\n        echo '        cp -fpH $OPENSSL_SOURCE/crypto/cryptlib.h ./crypto'\n        echo '    elif [ \"$F\" = \"./Makefile.org\" ]; then'\n        echo '        cp -fpH $OPENSSL_SOURCE/Makefile.org .'\n        echo '    else'\n        echo '        ln -s $OPENSSL_SOURCE/$F $F'\n        echo '    fi'\n        echo 'done'\n    } >$OBJTREE_WRAPPER\n    fail_panic \"Can't create OpenSSL objtree wrapper\"\n    chmod +x $OBJTREE_WRAPPER\n    fail_panic \"Can't chmod +x OpenSSL objtree wrapper\"\n\n    local OPENSSL_TARGET\n    case $ABI in\n        x86)\n            OPENSSL_TARGET=linux-elf\n            ;;\n        x86_64)\n            OPENSSL_TARGET=linux-x86_64\n            ;;\n        armeabi*)\n            OPENSSL_TARGET=linux-armv4\n            ;;\n        arm64-v8a)\n            OPENSSL_TARGET=linux-aarch64\n            ;;\n        mips)\n            # Looks like asm code in OpenSSL doesn't support MIPS32r6\n            OPENSSL_TARGET=linux-generic32\n            ;;\n        mips64)\n            # Looks like asm code in OpenSSL doesn't support MIPS64r6\n            OPENSSL_TARGET=linux-generic64\n            ;;\n        *)\n            panic \"ERROR: Unknown ABI: '$ABI'\"\n    esac\n\n    local OPENSSL_OPTIONS='shared zlib-dynamic -DOPENSSL_NO_DEPRECATED'\n\n    # script for build\n    local BUILD_WRAPPER=$BUILDDIR/build.sh\n    {\n        echo '#!/bin/bash -e'\n        echo 'DIR_HERE=$(cd $(dirname $0) && pwd)'\n        echo \"export PATH=\\\"$BIN_WRAP_DIR:$TCPREFIX/bin:\\$PATH\\\"\"\n        echo 'cd $DIR_HERE'\n        echo './mkobjtree.sh'\n        echo 'cd objtree'\n        echo \"perl -p -i -e 's/^(install:.*)\\\\binstall_docs\\\\b(.*)$/\\$1 \\$2/g' Makefile.org\"\n        echo \"perl ./Configure --openssldir=/system/etc/security --prefix=/pkg --cross-compile-prefix=\\\"${HOST}-\\\" $OPENSSL_OPTIONS $OPENSSL_TARGET\"\n        echo \"perl -p -i -e 's/^(#\\\\s*define\\\\s+ENGINESDIR\\\\s+).*$/\\$1NULL/g' crypto/opensslconf.h\"\n        echo \"perl -p -i -e 's/^(#\\\\s*define\\\\s+X509_CERT_DIR\\\\s+OPENSSLDIR\\\\s+).*$/\\$1\\\"\\\\/cacerts\\\"/g' crypto/cryptlib.h\"\n        echo \"make -j$NUM_JOBS\"\n        echo \"make INSTALL_PREFIX=$BUILDDIR/install install\"\n    } >$BUILD_WRAPPER\n    fail_panic \"Can't create OpenSSL build wrapper\"\n    chmod +x $BUILD_WRAPPER\n    fail_panic \"Can't chmod +x OpenSSL build wrapper\"\n\n    run $BUILD_WRAPPER\n    fail_panic \"Can't make OpenSSL-$OPENSSL_SRC_VERSION for $ABI\"\n\n    local OPENSSL_ABI_CONFIG_MAKE=\"$BUILDDIR/install/pkg/include/openssl/opensslconf.h\"\n    local OPENSSL_ABI_CONFIG=\"$BUILDDIR/install/pkg/include/openssl/opensslconf_$(echo $ABI | tr '-' '_').h\"\n    mv $OPENSSL_ABI_CONFIG_MAKE $OPENSSL_ABI_CONFIG\n    fail_panic \"Can't rename $OPENSSL_ABI_CONFIG_MAKE in $OPENSSL_ABI_CONFIG\"\n\n    local OPENSSL_HEADERS_DSTDIR=\"$OPENSSL_DSTDIR/include/openssl\"\n    if [ \"$OPENSSL_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install OpenSSL headers into $OPENSSL_HEADERS_DSTDIR\"\n        run rm -Rf $OPENSSL_HEADERS_DSTDIR && run mkdir -p $OPENSSL_HEADERS_DSTDIR\n        fail_panic \"Can't create directory: $OPENSSL_HEADERS_DSTDIR\"\n        {\n            echo '#if defined(__ARM_ARCH_5TE__)'\n            echo '#include \"opensslconf_armeabi.h\"'\n            echo '#elif defined(__ARM_ARCH_7A__) && !defined(__ARM_PCS_VFP)'\n            echo '#include \"opensslconf_armeabi_v7a.h\"'\n            echo '#elif defined(__ARM_ARCH_7A__) && defined(__ARM_PCS_VFP)'\n            echo '#include \"opensslconf_armeabi_v7a_hard.h\"'\n            echo '#elif defined(__aarch64__)'\n            echo '#include \"opensslconf_arm64_v8a.h\"'\n            echo '#elif defined(__i386__)'\n            echo '#include \"opensslconf_x86.h\"'\n            echo '#elif defined(__x86_64__)'\n            echo '#include \"opensslconf_x86_64.h\"'\n            echo '#elif defined(__mips__) && !defined(__mips64)'\n            echo '#include \"opensslconf_mips.h\"'\n            echo '#elif defined(__mips__) && defined(__mips64)'\n            echo '#include \"opensslconf_mips64.h\"'\n            echo '#else'\n            echo '#error \"Unsupported ABI\"'\n            echo '#endif'\n        } >\"$OPENSSL_HEADERS_DSTDIR/opensslconf.h\"\n        fail_panic \"Can't generate $OPENSSL_HEADERS_DSTDIR/opensslconf.h\"\n        run cp -p $BUILDDIR/install/pkg/include/openssl/*.h $OPENSSL_HEADERS_DSTDIR\n        fail_panic \"Can't install OpenSSL headers\"\n        OPENSSL_HEADERS_INSTALLED=yes\n        export OPENSSL_HEADERS_INSTALLED\n    else\n        run cp -p $OPENSSL_ABI_CONFIG $OPENSSL_HEADERS_DSTDIR\n        fail_panic \"Can't install $OPENSSL_ABI_CONFIG\"\n    fi\n\n    log \"Install OpenSSL binaries into $OPENSSL_DSTDIR\"\n    run rm -Rf $OPENSSL_DSTDIR/libs/$ABI && \\\n    run mkdir -p $OPENSSL_DSTDIR/libs/$ABI && \\\n    run cp -p \\\n      $BUILDDIR/install/pkg/lib/libcrypto.a \\\n      $BUILDDIR/install/pkg/lib/libcrypto.so \\\n      $BUILDDIR/install/pkg/lib/libssl.a \\\n      $BUILDDIR/install/pkg/lib/libssl.so \\\n      $OPENSSL_DSTDIR/libs/$ABI && \\\n    run chmod 0644 $OPENSSL_DSTDIR/libs/$ABI/lib*\n    fail_panic \"Can't install OpenSSL binaries\"\n\n    log \"Build openssl tool for $ABI\"\n    local BUILDDIR_OPENSSL_TOOL=\"$BUILDDIR/tool\"\n    local OBJDIR_OPENSSL_TOOL=\"$BUILDDIR_OPENSSL_TOOL/obj/local/$ABI\"\n    run mkdir -p $BUILDDIR_OPENSSL_TOOL/jni\n    fail_panic \"Can't create directory: $BUILDDIR_OPENSSL_TOOL/jni\"\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := openssl'\n        echo \"MY_OPENSSL_SRC_ROOT := $OPENSSL_SRCDIR\"\n        echo 'LOCAL_CFLAGS := -DMONOLITH -DOPENSSL_NO_DEPRECATED'\n        echo 'LOCAL_C_INCLUDES := $(MY_OPENSSL_SRC_ROOT)'\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/app_rand.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/apps.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/asn1pars.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ca.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ciphers.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/cms.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/crl.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/crl2p7.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/dgst.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/dh.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/dhparam.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/dsa.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/dsaparam.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ec.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ecparam.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/enc.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/engine.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/errstr.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/gendh.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/gendsa.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/genpkey.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/genrsa.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/nseq.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ocsp.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/openssl.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/passwd.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkcs12.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkcs7.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkcs8.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkey.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkeyparam.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/pkeyutl.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/prime.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/rand.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/req.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/rsa.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/rsautl.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/s_cb.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/s_client.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/s_server.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/s_socket.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/s_time.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/sess_id.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/smime.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/speed.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/spkac.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/srp.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/ts.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/verify.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/version.c \\'\n        echo '  $(MY_OPENSSL_SRC_ROOT)/apps/x509.c'\n        echo ''\n        echo 'LOCAL_STATIC_LIBRARIES := openssl_static opencrypto_static'\n        echo 'include $(BUILD_EXECUTABLE)'\n        echo \"\\$(call import-module,openssl/$OPENSSL_SRC_VERSION)\"\n    } >$BUILDDIR_OPENSSL_TOOL/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_OPENSSL_TOOL/jni/Android.mk\"\n\n    local EXE_PLATFORM\n    case $ABI in\n        x86|armeabi*|mips)\n            EXE_PLATFORM=android-16\n            ;;\n        x86_64|arm64-v8a|mips64)\n            EXE_PLATFORM=android-21\n            ;;\n        *)\n            panic \"ERROR: Unknown ABI: '$ABI'\"\n    esac\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_OPENSSL_TOOL -j$NUM_JOBS APP_ABI=$ABI V=1 APP_PLATFORM=$EXE_PLATFORM APP_PIE=true\n    fail_panic \"Can't build build openssl tool for $ABI\"\n\n    local OPENSSL_INSTALLDIR_BIN=\"$OPENSSL_DSTDIR/bin/$ABI\"\n    run mkdir -p $OPENSSL_INSTALLDIR_BIN\n    fail_panic \"Can't create directory: $OPENSSL_INSTALLDIR_BIN\"\n\n    log \"Install openssl tool in $OPENSSL_INSTALLDIR_BIN\"\n    run cp -p -T \"$OBJDIR_OPENSSL_TOOL/openssl\" \"$OPENSSL_INSTALLDIR_BIN/openssl\"\n    fail_panic \"Can't install openssl tool in $OPENSSL_INSTALLDIR_BIN\"\n}\n\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"openssl-${OPENSSL_SRC_VERSION}-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        OPENSSL_HEADERS_NEED_PACKAGE=no\n    else\n        OPENSSL_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"openssl-${OPENSSL_SRC_VERSION}-binaries-${ABI}.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$OPENSSL_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_openssl_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$OPENSSL_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$OPENSSL_SUBDIR/${OPENSSL_SRC_VERSION}/include\"\n        PACKAGE_NAME=\"openssl-${OPENSSL_SRC_VERSION}-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package openssl headers\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for SUBDIR in libs/$ABI bin/$ABI; do\n            FILES=\"$FILES $OPENSSL_SUBDIR/${OPENSSL_SRC_VERSION}/$SUBDIR\"\n        done\n        PACKAGE_NAME=\"openssl-${OPENSSL_SRC_VERSION}-binaries-${ABI}.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package openssl $ABI binaries\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-prebuilts.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Rebuild all target-specific prebuilts\n#\n\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"NDK installation directory\"\n\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<list>\" ARCHS \"List of target archs to build for\"\n\nNO_GEN_PLATFORMS=\nregister_var_option \"--no-gen-platforms\" NO_GEN_PLATFORMS \"Don't generate platforms/ directory, use existing one\"\n\nGCC_VERSION_LIST=\"default\" # it's arch defined by default so use default keyword\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"GCC version list (libgnustl should be built per each GCC version)\"\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<vers>\" LLVM_VERSION_LIST \"LLVM version list\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Package toolchain into this directory\"\n\nVISIBLE_LIBGNUSTL_STATIC=\nregister_var_option \"--visible-libgnustl-static\" VISIBLE_LIBGNUSTL_STATIC \"Do not use hidden visibility for libgnustl_static.a\"\n\nregister_jobs_option\n\nregister_try64_option\n\nPROGRAM_PARAMETERS=\"<toolchain-src-dir>\"\nPROGRAM_DESCRIPTION=\"This script can be used to rebuild all the target NDK prebuilts at once.\"\n\nextract_parameters \"$@\"\n\n# Pickup one GCC_VERSION for the cases where we want only one build\n# That's actually all cases except libgnustl where we are building for each GCC version\nGCC_VERSION=$DEFAULT_GCC_VERSION\nif [ \"$GCC_VERSION_LIST\" != \"default\" ]; then\n   GCC_VERSIONS=$(commas_to_spaces $GCC_VERSION_LIST)\n   GCC_VERSION=${GCC_VERSIONS%% *}\nfi\n\nLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)\n\nBUILD_TOOLCHAIN=\"--gcc-version=$GCC_VERSION\"\n\n# Check toolchain source path\nSRC_DIR=\"$PARAMETERS\"\ncheck_toolchain_src_dir \"$SRC_DIR\"\nSRC_DIR=`cd $SRC_DIR; pwd`\n\nVENDOR_SRC_DIR=$(cd $SRC_DIR/../vendor && pwd)\n\n# Now we can do the build\nBUILDTOOLS=$ANDROID_NDK_ROOT/build/instruments\n\ndump \"Building platforms and samples...\"\n\nif [ -z \"$NO_GEN_PLATFORMS\" ]; then\n    echo \"Preparing the build...\"\n    PLATFORMS_BUILD_TOOLCHAIN=\n    if [ ! -z \"$GCC_VERSION\" ]; then\n\tPLATFORMS_BUILD_TOOLCHAIN=\"--gcc-version=$GCC_VERSION\"\n    fi\n    run $BUILDTOOLS/gen-platforms.sh --samples --fast-copy --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS) $PLATFORMS_BUILD_TOOLCHAIN\n    fail_panic \"Could not generate platforms and samples directores!\"\nelse\n    if [ ! -d \"$NDK_DIR/platforms\" ]; then\n        echo \"ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms\"\n        exit 1\n    fi\nfi\n\nARCHS=$(commas_to_spaces $ARCHS)\n\nFLAGS=\nif [ \"$DRYRUN\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --dryrun\"\nfi\nif [ \"$VERBOSE\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --verbose\"\nfi\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\n    FLAGS=$FLAGS\" --package-dir=\\\"$PACKAGE_DIR\\\"\"\nfi\nif [ \"$TRY64\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --try-64\"\nfi\nFLAGS=$FLAGS\" -j$NUM_JOBS\"\n\n# First, gdbserver\nfor ARCH in $ARCHS; do\n    if [ -z \"$GCC_VERSION\" ]; then\n       GDB_TOOLCHAIN=$(get_default_toolchain_name_for_arch $ARCH)\n    else\n       GDB_TOOLCHAIN=$(get_toolchain_name_for_arch $ARCH $GCC_VERSION)\n    fi\n    GDB_VERSION=\"--gdb-version=\"$(get_default_gdb_version_for_gcc $GDB_TOOLCHAIN)\n    dump \"Building $GDB_TOOLCHAIN gdbserver binaries...\"\n    run $BUILDTOOLS/build-gdbserver.sh \"$SRC_DIR\" \"$NDK_DIR\" \"$GDB_TOOLCHAIN\" \"$GDB_VERSION\" $FLAGS --platform=android-21\n    fail_panic \"Could not build $GDB_TOOLCHAIN gdb-server!\"\ndone\n\nFLAGS=$FLAGS\" --ndk-dir=\\\"$NDK_DIR\\\"\"\nABIS=$(convert_archs_to_abis $ARCHS)\n\ndump \"Building $ABIS libcrystax binaries...\"\nrun $BUILDTOOLS/build-crystax.sh --abis=\"$ABIS\" --patch-sysroot $FLAGS\nfail_panic \"Could not build libcrystax!\"\n\ndump \"Building $ABIS compiler-rt binaries...\"\nrun $BUILDTOOLS/build-compiler-rt.sh --abis=\"$ABIS\" $FLAGS --src-dir=\"$SRC_DIR/llvm-$DEFAULT_LLVM_VERSION/compiler-rt\" $BUILD_TOOLCHAIN --llvm-version=$DEFAULT_LLVM_VERSION\nfail_panic \"Could not build compiler-rt!\"\n\nfor VERSION in $LLVM_VERSION_LIST; do\n    dump \"Building $ABIS LLVM libc++ $VERSION binaries... with libc++abi\"\n    run $BUILDTOOLS/build-llvm-libc++.sh --abis=\"$ABIS\" $FLAGS --with-debug-info --llvm-version=$VERSION\n    fail_panic \"Could not build LLVM libc++ $VERSION!\"\ndone\n\nif [ ! -z $VISIBLE_LIBGNUSTL_STATIC ]; then\n    GNUSTL_STATIC_VIS_FLAG=--visible-libgnustl-static\nfi\n\nif [ ! -z \"$GCC_VERSION_LIST\" ]; then\n    if [ \"$GCC_VERSION_LIST\" = \"default\" ]; then\n        STDCXX_GCC_VERSIONS=\"$DEFAULT_GCC_VERSION_LIST\"\n    else\n        STDCXX_GCC_VERSIONS=\"$GCC_VERSION_LIST\"\n    fi\n    for VERSION in $(commas_to_spaces $STDCXX_GCC_VERSIONS); do\n        dump \"Building $ABIS GNU libstdc++ $VERSION binaries...\"\n        run $BUILDTOOLS/build-gnu-libstdc++.sh --abis=\"$ABIS\" $FLAGS $GNUSTL_STATIC_VIS_FLAG \"$SRC_DIR\" \\\n            --with-debug-info --gcc-version-list=$VERSION\n        fail_panic \"Could not build GNU libstdc++ $VERSION!\"\n    done\nfi\n\ndump \"Building $ABIS Objective-C v2 runtime...\"\nrun $BUILDTOOLS/build-gnustep-libobjc2.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/libobjc2\nfail_panic \"Could not build Objective-C v2 runtime\"\n\ndump \"Building $ABIS Cocotron frameworks...\"\nrun $BUILDTOOLS/build-cocotron.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/cocotron\nfail_panic \"Could not build Cocotron frameworks\"\n\ndump \"Building $ABIS sqlite3 binaries...\"\nrun $BUILDTOOLS/build-sqlite3.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/sqlite3\nfail_panic \"Could not build sqlite3\"\n\ndump \"Building $ABIS OpenSSL...\"\nrun $BUILDTOOLS/build-target-openssl.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/openssl\nfail_panic \"Could not build OpenSSL\"\n\nfor PYTHON_VERSION in $PYTHON_VERSIONS; do\n    dump \"Building $ABIS python-${PYTHON_VERSION} binaries...\"\n    run $BUILDTOOLS/build-target-python.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/python/python-$PYTHON_VERSION\n    fail_panic \"Could not build python-${PYTHON_VERSION}\"\ndone\n\nfor LIBPNG_VERSION in $LIBPNG_VERSIONS; do\n    dump \"Building $ABIS libpng-$LIBPNG_VERSION binaries...\"\n    run $BUILDTOOLS/build-libpng.sh $FLAGS --abis=\"$ABIS\" --version=$LIBPNG_VERSION $VENDOR_SRC_DIR/libpng\n    fail_panic \"Could not build libpng-$LIBPNG_VERSION\"\ndone\n\nfor LIBJPEG_VERSION in $LIBJPEG_VERSIONS; do\n    dump \"Building $ABIS libjpeg-$LIBJPEG_VERSION binaries...\"\n    run $BUILDTOOLS/build-libjpeg.sh $FLAGS --abis=\"$ABIS\" --version=$LIBJPEG_VERSION $VENDOR_SRC_DIR/libjpeg\n    fail_panic \"Could not build libjpeg-$LIBJPEG_VERSION\"\ndone\n\nfor LIBJPEGTURBO_VERSION in $LIBJPEGTURBO_VERSIONS; do\n    dump \"Building $ABIS libjpeg-turbo-$LIBJPEGTURBO_VERSION binaries...\"\n    run $BUILDTOOLS/build-libjpeg-turbo.sh $FLAGS --abis=\"$ABIS\" --version=$LIBJPEGTURBO_VERSION $VENDOR_SRC_DIR/libjpeg-turbo\n    fail_panic \"Could not build libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\ndone\n\nfor LIBTIFF_VERSION in $LIBTIFF_VERSIONS; do\n    dump \"Building $ABIS libtiff-$LIBTIFF_VERSION binaries...\"\n    run $BUILDTOOLS/build-libtiff.sh $FLAGS --abis=\"$ABIS\" --version=$LIBTIFF_VERSION $VENDOR_SRC_DIR/libtiff\n    fail_panic \"Could not build libtiff-$LIBTIFF_VERSION\"\ndone\n\nICU_VERSION=$(echo $ICU_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\ndump \"Building $ABIS ICU-$ICU_VERSION binaries...\"\nrun $BUILDTOOLS/build-icu.sh $FLAGS --version=$ICU_VERSION --abis=\"$ABIS\" $VENDOR_SRC_DIR/icu\nfail_panic \"Could not build ICU-$ICU_VERSION!\"\n\nCXXSTDLIBS=\"\"\nfor VERSION in $DEFAULT_GCC_VERSION_LIST; do\n    CXXSTDLIBS=\"$CXXSTDLIBS gnu-$VERSION\"\ndone\nfor VERSION in $DEFAULT_LLVM_VERSION_LIST; do\n    CXXSTDLIBS=\"$CXXSTDLIBS llvm-$VERSION\"\ndone\n\nfor VERSION in $BOOST_VERSIONS; do\n    for CXXSTDLIB in $CXXSTDLIBS; do\n        dump \"Building $ABIS boost-$VERSION (with $CXXSTDLIB C++ Standard Library) binaries...\"\n        run $BUILDTOOLS/build-boost.sh $FLAGS --version=$VERSION --abis=\"$ABIS\" --stdlibs=$CXXSTDLIB $VENDOR_SRC_DIR/boost\n        fail_panic \"Could not build Boost-$VERSION!\"\n    done\n\n    #for CXXSTDLIB in $CXXSTDLIBS; do\n    #    dump \"Building $ABIS boost+icu-$VERSION (with $CXXSTDLIB C++ Standard Library) binaries...\"\n    #    run $BUILDTOOLS/build-boost.sh $FLAGS --version=$VERSION --abis=\"$ABIS\" --stdlibs=$CXXSTDLIB --with-icu=$ICU_VERSION $VENDOR_SRC_DIR/boost\n    #    fail_panic \"Could not build Boost+ICU-$VERSION!\"\n    #done\ndone\n\ndump \"Building $ABIS Bash...\"\nrun $BUILDTOOLS/build-target-bash.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/bash\nfail_panic \"Could not build Bash\"\n\ndump \"Building $ABIS GNU coreutils...\"\nrun $BUILDTOOLS/build-target-gnu-coreutils.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/coreutils\nfail_panic \"Could not build GNU coreutils\"\n\ndump \"Building $ABIS GNU grep...\"\nrun $BUILDTOOLS/build-target-gnu-grep.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-grep\nfail_panic \"Could not build GNU grep\"\n\ndump \"Building $ABIS GNU sed...\"\nrun $BUILDTOOLS/build-target-gnu-sed.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-sed\nfail_panic \"Could not build GNU sed\"\n\ndump \"Building $ABIS GNU tar...\"\nrun $BUILDTOOLS/build-target-gnu-tar.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-tar\nfail_panic \"Could not build GNU tar\"\n\ndump \"Building $ABIS GNU zip...\"\nrun $BUILDTOOLS/build-target-gnu-zip.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-zip\nfail_panic \"Could not build GNU zip\"\n\ndump \"Building $ABIS GNU which...\"\nrun $BUILDTOOLS/build-target-gnu-which.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-which\nfail_panic \"Could not build GNU which\"\n\ndump \"Building $ABIS Info-ZIP...\"\nrun $BUILDTOOLS/build-target-info-zip.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/info-zip\nfail_panic \"Could not build Info-ZIP\"\n\ndump \"Building $ABIS Info-UNZIP...\"\nrun $BUILDTOOLS/build-target-info-unzip.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/info-unzip\nfail_panic \"Could not build Info-UNZIP\"\n\ndump \"Building $ABIS OpenSSH...\"\nrun $BUILDTOOLS/build-target-openssh.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/openssh\nfail_panic \"Could not build OpenSSH\"\n\ndump \"Building $ABIS net-tools...\"\nrun $BUILDTOOLS/build-target-net-tools.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/net-tools\nfail_panic \"Could not build net-tools\"\n\ndump \"Building $ABIS cpulimit...\"\nrun $BUILDTOOLS/build-target-cpulimit.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/cpulimit\nfail_panic \"Could not build cpulimit\"\n\ndump \"Building $ABIS ncurses...\"\nrun $BUILDTOOLS/build-target-ncurses.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/ncurses\nfail_panic \"Could not build ncurses\"\n\ndump \"Building $ABIS GNU less...\"\nrun $BUILDTOOLS/build-target-gnu-less.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/gnu-less\nfail_panic \"Could not build GNU less\"\n\ndump \"Building $ABIS procps-ng...\"\nrun $BUILDTOOLS/build-target-procps-ng.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/procps-ng\nfail_panic \"Could not build procps-ng\"\n\ndump \"Building $ABIS htop...\"\nrun $BUILDTOOLS/build-target-htop.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/htop\nfail_panic \"Could not build htop\"\n\ndump \"Building $ABIS VIM...\"\nrun $BUILDTOOLS/build-target-vim.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/vim\nfail_panic \"Could not build VIM\"\n\ndump \"Building $ABIS x264...\"\nrun $BUILDTOOLS/build-target-x264.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/x264\nfail_panic \"Could not build x264\"\n\ndump \"Building $ABIS ffmpeg...\"\nrun $BUILDTOOLS/build-target-ffmpeg.sh $FLAGS --abis=\"$ABIS\" $VENDOR_SRC_DIR/ffmpeg\nfail_panic \"Could not build ffmpeg\"\n\ndump \"Cleanup sysroot folders...\"\nrun find $NDK_DIR/platforms -name 'libcrystax.*' -delete\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    dump \"Packaging platforms and samples...\"\n    run $BUILDTOOLS/package-platforms.sh --samples --ndk-dir=$NDK_DIR --package-dir=$PACKAGE_DIR\n    fail_panic \"Can't package platforms\"\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    dump \"Done, see $PACKAGE_DIR\"\nelse\n    dump \"Done\"\nfi\n\nexit 0\n"
  },
  {
    "path": "build/instruments/build-target-procps-ng.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild procps-ng for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/procps-ng/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the procps-ng source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-procps-ng\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting procps-ng version... \"\nPACKAGE_VERSION=$(cat $SRCDIR/.tarball-version)\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    panic \"Couldn't detect procps-ng version!\"\nfi\ndump \"$PACKAGE_VERSION\"\n\ndump_n \"Detecting ncurses version...\"\nNCURSES_VERSION=$(ls -1 $NDK_DIR/packages/ncurses/ | sort | uniq | tail -n 1)\nif [ -z \"$NCURSES_VERSION\" ]; then\n    panic \"Couldn't detect ncurses version!\"\nfi\ndump \"$NCURSES_VERSION\"\nNCURSES=$NDK_DIR/packages/ncurses/$NCURSES_VERSION\n\n# $1: ABI\n# $2: build directory\nbuild_procps_ng_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/procps-ng/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI procps-ng\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n        NCURSES=$NCURSES/$ABI \\\n\n    fail_panic \"Couldn't build $ABI procps-ng\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run mkdir -p $INSTALLDIR/include/ && \\\n    run cp -r $OUTDIR/install/include/* $INSTALLDIR/include/ && \\\n    run mkdir -p $INSTALLDIR/lib/ && \\\n    run cp -r $OUTDIR/install/lib/lib*.a $INSTALLDIR/lib/ && \\\n    ( cd $OUTDIR/install/ && tar czf $INSTALLDIR/procps-ng.tar.gz bin sbin )\n    fail_panic \"Can't install $ABI procps-ng\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-procps-ng-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_procps_ng_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/procps-ng/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-procps-ng-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI procps-ng binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-python.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild python libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$PYTHON_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$PREBUILT_ABIS\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nPYTHON_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$PYTHON_SRCDIR\" ]; then\n    panic \"Please provide the path to the python source tree. See --help\"\nfi\n\nif [ ! -d \"$PYTHON_SRCDIR\" ]; then\n    panic \"No such directory: '$PYTHON_SRCDIR'\"\nfi\n\nPYTHON_SRCDIR=$(cd $PYTHON_SRCDIR && pwd)\n\nPYTHON_MAJOR_VERSION=\\\n$(cat $PYTHON_SRCDIR/Include/patchlevel.h | sed -n 's/#define[ \\t]*PY_MAJOR_VERSION[ \\t]*\\([0-9]*\\).*/\\1/p')\n\nPYTHON_MINOR_VERSION=\\\n$(cat $PYTHON_SRCDIR/Include/patchlevel.h | sed -n 's/#define[ \\t]*PY_MINOR_VERSION[ \\t]*\\([0-9]*\\).*/\\1/p')\n\nif [ -z \"$PYTHON_MAJOR_VERSION\" ]; then\n    panic \"Can't detect python major version.\"\nfi\n\nif [ -z \"$PYTHON_MINOR_VERSION\" ]; then\n    panic \"Can't detect python minor version.\"\nfi\n\nPYTHON_ABI=\"${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}\"\n\nPYTHON_FOR_BUILD=\"$NDK_DIR/prebuilt/$HOST_TAG/opt/python${PYTHON_ABI}/python\"\nif [ ! -f \"$PYTHON_FOR_BUILD\" ]; then\n    panic \"Can't find python for build: '$PYTHON_FOR_BUILD'.\"\nfi\n\nPYTHON_DSTDIR=$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_ABI\nmkdir -p $PYTHON_DSTDIR\nfail_panic \"Can't create python destination directory: $PYTHON_DSTDIR\"\n\nPYTHON_BUILD_UTILS_DIR=$(cd $(dirname $0)/build-python && pwd)\nif [ ! -d \"$PYTHON_BUILD_UTILS_DIR\" ]; then\n    panic \"No such directory: '$PYTHON_BUILD_UTILS_DIR'\"\nfi\n\nPY_C_CONFIG_FILE=\"$PYTHON_BUILD_UTILS_DIR/config.c.$PYTHON_ABI\"\nif [ ! -f \"$PY_C_CONFIG_FILE\" ]; then\n    panic \"Build of python $PYTHON_ABI is not supported, no such file: $PY_C_CONFIG_FILE\"\nfi\n\nif [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n    PY_C_INTERPRETER_FILE=\"$PYTHON_SRCDIR/Modules/python.c\"\nelse\n    PY_C_INTERPRETER_FILE=\"$PYTHON_SRCDIR/Programs/python.c\"\nfi\nif [ ! -f \"$PY_C_INTERPRETER_FILE\" ]; then\n    panic \"Build of python $PYTHON_ABI is not supported, no such file: $PY_C_INTERPRETER_FILE\"\nfi\n\nif [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n    PY_C_INTERPRETER_STATIC_FILE=\"$PYTHON_BUILD_UTILS_DIR/interpreter-static.c.2.7\"\nelse\n    PY_C_INTERPRETER_STATIC_FILE=\"$PYTHON_BUILD_UTILS_DIR/interpreter-static.c.3.x\"\nfi\nif [ ! -f \"$PY_C_INTERPRETER_STATIC_FILE\" ]; then\n    panic \"Build of python $PYTHON_ABI is not supported, no such file: $PY_C_INTERPRETER_STATIC_FILE\"\nfi\n\nPY_ANDROID_MK_TEMPLATE_FILE=\"$PYTHON_BUILD_UTILS_DIR/android.mk.$PYTHON_ABI\"\nif [ ! -f \"$PY_ANDROID_MK_TEMPLATE_FILE\" ]; then\n    panic \"Build of python $PYTHON_ABI is not supported, no such file: $PY_ANDROID_MK_TEMPLATE_FILE\"\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-python\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\n\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Can't create build directory: $BUILD_DIR\"\n\n\n# $1: module name\n# $2: target directory\ngenerate_python_module_header ()\n{\n    local PYMOD_NAME=$1\n    local TARGET_DIR=$2\n    local HEADER_FNAME=\"python_module_${PYMOD_NAME}.h\"\n    local HEADER_FPATH=\"$TARGET_DIR/$HEADER_FNAME\"\n    {\n        echo '#pragma once'\n        echo ''\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo \"extern void init${PYMOD_NAME}(void);\"\n        else\n            echo '#include <Python.h>'\n            echo ''\n            echo \"extern PyObject* PyInit_${PYMOD_NAME}(void);\"\n        fi\n    } > $HEADER_FPATH\n    fail_panic \"Can't generate c-header '$HEADER_FPATH'\"\n}\n\n# $1: ABI\n# $2: build directory\nbuild_python_for_abi ()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n    local PYBIN_INSTALLDIR=\"$PYTHON_DSTDIR/shared/$ABI\"\n    local PYBIN_INSTALLDIR_MODULES=\"$PYBIN_INSTALLDIR/modules\"\n    local PYBIN_INSTALLDIR_STATIC_LIBS=\"$PYTHON_DSTDIR/static/libs/$ABI\"\n    local PYBIN_INSTALLDIR_STATIC_BIN=\"$PYTHON_DSTDIR/static/bin/$ABI\"\n\n    log \"Building python$PYTHON_ABI for $ABI\"\n\n# Step 1: configure\n    local BUILDDIR_CONFIG=\"$BUILDDIR/config\"\n    local BUILDDIR_CORE=\"$BUILDDIR/core\"\n    local OBJDIR_CORE=\"$BUILDDIR_CORE/obj/local/$ABI\"\n    local BUILDDIR_CORE_STATIC=\"$BUILDDIR/core-static\"\n    local OBJDIR_CORE_STATIC=\"$BUILDDIR_CORE_STATIC/obj/local/$ABI\"\n\n    run mkdir -p $BUILDDIR_CONFIG\n    fail_panic \"Can't create directory: $BUILDDIR_CONFIG\"\n    run mkdir -p $BUILDDIR_CORE\n    fail_panic \"Can't create directory: $BUILDDIR_CORE\"\n    run mkdir -p $BUILDDIR_CORE_STATIC\n    fail_panic \"Can't create directory: $BUILDDIR_CORE_STATIC\"\n\n    local BUILD_ON_PLATFORM=$($PYTHON_SRCDIR/config.guess)\n    if [ -z \"$BUILD_ON_PLATFORM\" ]; then\n        panic \"Can't resolve platform being built python on.\"\n    fi\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n            ;;\n    esac\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n            ;;\n    esac\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n            ;;\n    esac\n\n    local EXE_PLATFORM\n    case $ABI in\n        x86|armeabi*|mips)\n            EXE_PLATFORM=android-16\n            ;;\n        x86_64|arm64-v8a|mips64)\n            EXE_PLATFORM=android-21\n            ;;\n        *)\n            panic \"ERROR: Unknown ABI: '$ABI'\"\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n            ;;\n    esac\n\n    local CFLAGS\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n            ;;\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n            ;;\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    local LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n\n    local CC=$TCPREFIX/bin/${HOST}-gcc\n    local CPP=\"$CC $CFLAGS -E\"\n    local AR=$TCPREFIX/bin/${HOST}-ar\n    local RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    local READELF=$TCPREFIX/bin/${HOST}-readelf\n    local CONFIG_SITE=$PYTHON_TOOLS_DIR/config.site\n\n    local CONFIG_SITE=$BUILDDIR_CONFIG/config.site\n    {\n        echo 'ac_cv_little_endian_double=yes'\n        echo 'ac_cv_file__dev_ptmx=no'\n        echo 'ac_cv_file__dev_ptc=no'\n        echo 'ac_cv_func_gethostbyname_r=no'\n        if [ \"$PYTHON_MAJOR_VERSION\" == \"3\" ]; then\n            echo 'ac_cv_func_faccessat=no'\n        fi\n    } >$CONFIG_SITE\n    fail_panic \"Can't create config.site wrapper\"\n\n    local CONFIGURE_WRAPPER=$BUILDDIR_CONFIG/configure.sh\n    {\n        echo \"#!/bin/bash -e\"\n        echo ''\n        echo \"export CC=\\\"$CC\\\"\"\n        echo \"export CPP=\\\"$CPP\\\"\"\n        echo \"export AR=\\\"$AR\\\"\"\n        echo \"export CFLAGS=\\\"$CFLAGS\\\"\"\n        echo \"export LDFLAGS=\\\"$LDFLAGS\\\"\"\n        echo \"export RANLIB=\\\"$RANLIB\\\"\"\n        echo \"export READELF=\\\"$READELF\\\"\"\n        echo \"export PYTHON_FOR_BUILD=\\\"$PYTHON_FOR_BUILD\\\"\"\n        echo \"export CONFIG_SITE=\\\"$CONFIG_SITE\\\"\"\n        echo ''\n        echo 'cd $(dirname $0)'\n        echo ''\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n            echo \"    --host=$HOST \\\\\"\n            echo \"    --build=$BUILD_ON_PLATFORM \\\\\"\n            echo \"    --prefix=$BUILDDIR_CONFIG/install \\\\\"\n            echo \"    --enable-shared \\\\\"\n            echo \"    --with-threads \\\\\"\n            echo \"    --enable-ipv6 \\\\\"\n            echo \"    --enable-unicode=ucs4 \\\\\"\n            echo \"    --without-ensurepip\"\n        else\n            echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n            echo \"    --host=$HOST \\\\\"\n            echo \"    --build=$BUILD_ON_PLATFORM \\\\\"\n            echo \"    --prefix=$BUILDDIR_CONFIG/install \\\\\"\n            echo \"    --enable-shared \\\\\"\n            echo \"    --with-threads \\\\\"\n            echo \"    --enable-ipv6 \\\\\"\n            echo \"    --with-computed-gotos \\\\\"\n            echo \"    --without-ensurepip\"\n        fi\n    } >$CONFIGURE_WRAPPER\n    fail_panic \"Can't create configure wrapper\"\n\n    chmod +x $CONFIGURE_WRAPPER\n    fail_panic \"Can't chmod +x configure wrapper\"\n\n    run $CONFIGURE_WRAPPER\n    fail_panic \"Can't configure python$PYTHON_ABI for $ABI\"\n\n# Step 2: build python-core\n    run mkdir -p $BUILDDIR_CORE/jni\n    fail_panic \"Can't create directory: $BUILDDIR_CORE/jni\"\n\n    local PY_C_GETPATH\n    local PY_C_FROZEN\n\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR/getpath.c.2.7\"\n        PY_C_FROZEN=\"$PYTHON_BUILD_UTILS_DIR/frozen.c.2.7\"\n    else\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR/getpath.c.3.x\"\n        PY_C_FROZEN=\"$PYTHON_BUILD_UTILS_DIR/frozen.c.3.x\"\n    fi\n\n    run cp -p -T $PY_C_CONFIG_FILE \"$BUILDDIR_CORE/jni/config.c\" && \\\n        cp -p -T $PY_C_FROZEN \"$BUILDDIR_CORE/jni/frozen.c\" && \\\n        cp -p -T $PY_C_GETPATH \"$BUILDDIR_CORE/jni/getpath.c\" && \\\n        cp -p -t \"$BUILDDIR_CORE/jni\" \"$PYTHON_BUILD_UTILS_DIR/pyconfig.h\"\n    fail_panic \"Can't copy config.c frozen.c getpath.c pyconfig.h to $BUILDDIR_CORE/jni\"\n\n    local PYCONFIG_FOR_ABI=\"$BUILDDIR_CORE/jni/pyconfig_$(echo $ABI | tr '-' '_').h\"\n    run cp -p -T $BUILDDIR_CONFIG/pyconfig.h $PYCONFIG_FOR_ABI\n    fail_panic \"Can't copy $BUILDDIR_CONFIG/pyconfig.h to $PYCONFIG_FOR_ABI\"\n\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        local PYTHON_CORE_MODULE_NAME=\"python${PYTHON_ABI}\"\n    else\n        local PYTHON_CORE_MODULE_NAME=\"python${PYTHON_ABI}m\"\n        local PYTHON_SOABI=\"cpython-${PYTHON_ABI}m\"\n    fi\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := $PYTHON_CORE_MODULE_NAME\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include $(MY_PYTHON_SRC_ROOT)/Python'\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo \"LOCAL_CFLAGS := -DPy_BUILD_CORE -DPy_ENABLE_SHARED -DPLATFORM=\\\\\\\"linux\\\\\\\"\"\n        else\n            echo \"LOCAL_CFLAGS := -DSOABI=\\\\\\\"$PYTHON_SOABI\\\\\\\" -DPy_BUILD_CORE -DPy_ENABLE_SHARED -DPLATFORM=\\\\\\\"linux\\\\\\\"\"\n        fi\n        echo 'LOCAL_LDLIBS := -lz'\n        echo ''\n        cat $PY_ANDROID_MK_TEMPLATE_FILE\n        echo ''\n        echo 'LOCAL_SRC_FILES := config.c frozen.c getpath.c $(MY_PYCORE_SRC_FILES)'\n        echo ''\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n    } >$BUILDDIR_CORE/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_CORE/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_CORE -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI core\"\n\n    if [ \"$PYTHON_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install python$PYTHON_ABI headers into $PYTHON_DSTDIR\"\n        run rm -Rf $PYTHON_DSTDIR/include/python && \\\n            mkdir -p $PYTHON_DSTDIR/include/python && \\\n            cp -p $PYTHON_BUILD_UTILS_DIR/pyconfig.h $PYTHON_SRCDIR/Include/*.h $PYTHON_DSTDIR/include/python\n        fail_panic \"Can't install python$PYTHON_ABI headers\"\n        PYTHON_HEADERS_INSTALLED=yes\n        export PYTHON_HEADERS_INSTALLED\n    fi\n    log \"Install $(basename $PYCONFIG_FOR_ABI) into $PYTHON_DSTDIR\"\n    run cp -p $PYCONFIG_FOR_ABI $PYTHON_DSTDIR/include/python\n    fail_panic \"Can't install $PYCONFIG_FOR_ABI\"\n\n    run mkdir -p $PYBIN_INSTALLDIR/libs\n    fail_panic \"Can't create $PYBIN_INSTALLDIR/libs\"\n    run mkdir -p $PYBIN_INSTALLDIR_MODULES\n    fail_panic \"Can't create directory: $PYBIN_INSTALLDIR_MODULES\"\n\n    log \"Install python$PYTHON_ABI-$ABI core in '$PYBIN_INSTALLDIR/libs'\"\n    run cp -fpH $OBJDIR_CORE/lib$PYTHON_CORE_MODULE_NAME.so $PYBIN_INSTALLDIR/libs\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI core in '$PYBIN_INSTALLDIR/libs'\"\n\n# build static python-core\n    run mkdir -p $BUILDDIR_CORE_STATIC/jni\n    fail_panic \"Can't create directory: $BUILDDIR_CORE_STATIC/jni\"\n\n    run cp -p -T $PY_C_CONFIG_FILE \"$BUILDDIR_CORE_STATIC/jni/config.c\" && \\\n        cp -p -T $PY_C_FROZEN \"$BUILDDIR_CORE_STATIC/jni/frozen.c\" && \\\n        cp -p -T $PY_C_GETPATH \"$BUILDDIR_CORE_STATIC/jni/getpath.c\" && \\\n        cp -p -t \"$BUILDDIR_CORE_STATIC/jni\" \"$PYTHON_BUILD_UTILS_DIR/pyconfig.h\"\n    fail_panic \"Can't copy config.c frozen.c getpath.c pyconfig.h to $BUILDDIR_CORE_STATIC/jni\"\n\n    local PYCONFIG_FOR_ABI_STATIC=\"$BUILDDIR_CORE_STATIC/jni/pyconfig_$(echo $ABI | tr '-' '_').h\"\n    run cp -p -T $BUILDDIR_CONFIG/pyconfig.h $PYCONFIG_FOR_ABI_STATIC\n    fail_panic \"Can't copy $BUILDDIR_CONFIG/pyconfig.h to $PYCONFIG_FOR_ABI_STATIC\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := $PYTHON_CORE_MODULE_NAME\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include $(MY_PYTHON_SRC_ROOT)/Python'\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo \"LOCAL_CFLAGS := -DPy_BUILD_CORE -DPLATFORM=\\\\\\\"linux\\\\\\\"\"\n        else\n            echo \"LOCAL_CFLAGS := -DSOABI=\\\\\\\"$PYTHON_SOABI\\\\\\\" -DPy_BUILD_CORE -DPLATFORM=\\\\\\\"linux\\\\\\\"\"\n        fi\n        echo ''\n        cat $PY_ANDROID_MK_TEMPLATE_FILE\n        echo ''\n        echo 'LOCAL_SRC_FILES := config.c frozen.c getpath.c $(MY_PYCORE_SRC_FILES)'\n        echo ''\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_CORE_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_CORE_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_CORE_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static core\"\n\n    run mkdir -p $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't create directory: $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    log \"Install python$PYTHON_ABI-$ABI static core in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_CORE_STATIC/lib${PYTHON_CORE_MODULE_NAME}.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static core in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n# Step 3: build python stdlib\n    local PY_STDLIB_ZIPFILE=\"$PYBIN_INSTALLDIR/libs/python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.zip\"\n    log \"Install python$PYTHON_ABI-$ABI stdlib as $PYSTDLIB_ZIPFILE\"\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/build_stdlib.py --py2 --pysrc-root $PYTHON_SRCDIR --output-zip $PY_STDLIB_ZIPFILE\n        fail_panic \"Can't install python$PYTHON_ABI-$ABI stdlib\"\n    else\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/build_stdlib.py --pysrc-root $PYTHON_SRCDIR --output-zip $PY_STDLIB_ZIPFILE\n        fail_panic \"Can't install python$PYTHON_ABI-$ABI stdlib\"\n    fi\n\n# freeze python stdlib\n    local BUILDDIR_STDLIB_FREEZE=\"$BUILDDIR/stdlib-freeze\"\n    log \"Freeze python$PYTHON_ABI stdlib\"\n    run rm -Rf $BUILDDIR_STDLIB_FREEZE && mkdir -p $BUILDDIR_STDLIB_FREEZE\n    fail_panic \"Can't create directory: $BUILDDIR_STDLIB_FREEZE\"\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/freeze_stdlib.py --py2 --stdlib-dir \"$PYTHON_SRCDIR/Lib\" --output-dir $BUILDDIR_STDLIB_FREEZE\n        fail_panic \"Can't freeze python$PYTHON_ABI-$ABI stdlib\"\n    else\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/freeze_stdlib.py --stdlib-dir \"$PYTHON_SRCDIR/Lib\" --output-dir $BUILDDIR_STDLIB_FREEZE\n        fail_panic \"Can't freeze python$PYTHON_ABI-$ABI stdlib\"\n    fi\n    if [ \"$PYTHON_STDLIB_FROZEN_HEADERS_INSTALLED\" != \"yes\" ]; then\n        run rm -Rf $PYTHON_DSTDIR/include/frozen && \\\n            mkdir -p $PYTHON_DSTDIR/include/frozen && \\\n        run cp -p \"$BUILDDIR_STDLIB_FREEZE/python-stdlib.h\" \"$PYTHON_DSTDIR/include/frozen\"\n        fail_panic \"Can't install headers of python$PYTHON_ABI frozen stdlib\"\n        PYTHON_STDLIB_FROZEN_HEADERS_INSTALLED=yes\n        export PYTHON_STDLIB_FROZEN_HEADERS_INSTALLED\n    fi\n\n# build frozen python stdlib as static library\n    local BUILDDIR_STDLIB_FROZEN=\"$BUILDDIR/stdlib-frozen\"\n    run mkdir -p $BUILDDIR_STDLIB_FROZEN/jni\n    fail_panic \"Can't create directory: $BUILDDIR_STDLIB_FROZEN/jni\"\n    local STDLIB_FROZEN_SRC_CATALOG=\"$BUILDDIR_STDLIB_FREEZE/python-stdlib.list\"\n    if [ ! -f \"$STDLIB_FROZEN_SRC_CATALOG\" ]; then\n        panic \"File '$STDLIB_FROZEN_SRC_CATALOG' not found.\"\n    fi\n    local STDLIB_FROZEN_SRC_LIST=$(cat $STDLIB_FROZEN_SRC_CATALOG)\n    if [ -z \"$STDLIB_FROZEN_SRC_LIST\" ]; then\n        panic \"Can't resolve sources list for frozen stdlib.\"\n    fi\n\n    run cd $BUILDDIR_STDLIB_FREEZE && cp -p $STDLIB_FROZEN_SRC_LIST \"$BUILDDIR_STDLIB_FROZEN/jni\"\n    fail_panic \"Can't copy sources of frozen stdlib to '$BUILDDIR_STDLIB_FROZEN/jni'\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}_stdlib\"\n        echo 'LOCAL_SRC_FILES := \\'\n        for src in $STDLIB_FROZEN_SRC_LIST; do\n            echo \"  $src \\\\\"\n        done\n        echo ''\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_STDLIB_FROZEN/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_STDLIB_FROZEN/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_STDLIB_FROZEN -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI frozen stdlib\"\n\n    log \"Install python$PYTHON_ABI-$ABI frozen stdlib in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$BUILDDIR_STDLIB_FROZEN/obj/local/$ABI/libpython${PYTHON_ABI}_stdlib.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI frozen stdlib in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n# Step 4: build python-interpreter\n    local BUILDDIR_INTERPRETER=\"$BUILDDIR/interpreter\"\n    local OBJDIR_INTERPRETER=\"$BUILDDIR_INTERPRETER/obj/local/$ABI\"\n\n    run mkdir -p $BUILDDIR_INTERPRETER/jni\n    fail_panic \"Can't create directory: $BUILDDIR_INTERPRETER/jni\"\n\n    run cp -p -T $PY_C_INTERPRETER_FILE $BUILDDIR_INTERPRETER/jni/interpreter.c\n    fail_panic \"Can't copy $PY_C_INTERPRETER_FILE to $BUILDDIR_INTERPRETER/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := python'\n        echo 'LOCAL_SRC_FILES := interpreter.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'LOCAL_LDLIBS := -lz'\n        echo 'include $(BUILD_EXECUTABLE)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_INTERPRETER/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_INTERPRETER/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_INTERPRETER -j$NUM_JOBS APP_ABI=$ABI V=1 APP_PLATFORM=$EXE_PLATFORM APP_PIE=true\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI interpreter\"\n\n    log \"Install python$PYTHON_ABI-$ABI interpreter in $PYBIN_INSTALLDIR\"\n    run cp -p -T \"$OBJDIR_INTERPRETER/python\" \"$PYBIN_INSTALLDIR/python\"\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI interpreter in $PYBIN_INSTALLDIR\"\n\n# Step 5: site-packages\n    local SITE_README_SRCDIR=\"$PYTHON_SRCDIR/Lib/site-packages\"\n    local SITE_README_DSTDIR=\"$PYBIN_INSTALLDIR/site-packages\"\n    log \"Install python$PYTHON_ABI-$ABI site-packages\"\n    run mkdir -p $SITE_README_DSTDIR && cp -fpH $SITE_README_SRCDIR/README $SITE_README_DSTDIR\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI site-packages\"\n\n# Step 6: build python modules\n# _ctypes\n    local BUILDDIR_CTYPES_CONFIG=\"$BUILDDIR/ctypes/config\"\n    run mkdir -p $BUILDDIR_CTYPES_CONFIG\n    fail_panic \"Can't create directory: $BUILDDIR_CTYPES_CONFIG\"\n\n    local BUILDDIR_CTYPES=\"$BUILDDIR/ctypes/shared\"\n    local OBJDIR_CTYPES=\"$BUILDDIR_CTYPES/obj/local/$ABI\"\n    local BUILDDIR_CTYPES_STATIC=\"$BUILDDIR/ctypes/static\"\n    local OBJDIR_CTYPES_STATIC=\"$BUILDDIR_CTYPES_STATIC/obj/local/$ABI\"\n\n    local LIBFFI_CONFIGURE_WRAPPER=$BUILDDIR_CTYPES_CONFIG/configure.sh\n    {\n        echo \"#!/bin/bash -e\"\n        echo ''\n        echo \"export CC=\\\"$CC\\\"\"\n        echo \"export CFLAGS=\\\"$CFLAGS\\\"\"\n        echo \"export LDFLAGS=\\\"$LDFLAGS\\\"\"\n        echo \"export CPP=\\\"$CPP\\\"\"\n        echo \"export AR=\\\"$AR\\\"\"\n        echo \"export RANLIB=\\\"$RANLIB\\\"\"\n        echo ''\n        echo 'cd $(dirname $0)'\n        echo ''\n        echo \"exec $PYTHON_SRCDIR/Modules/_ctypes/libffi/configure \\\\\"\n        echo \"    --host=$HOST \\\\\"\n        echo \"    --build=$BUILD_ON_PLATFORM \\\\\"\n        echo \"    --prefix=$BUILDDIR_CTYPES_CONFIG/install \\\\\"\n    } >$LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't create configure wrapper for libffi\"\n\n    chmod +x $LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't chmod +x configure wrapper for libffi\"\n\n    run $LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't configure libffi for $ABI\"\n\n    run mkdir -p \"$BUILDDIR_CTYPES/jni/include\"\n    fail_panic \"Can't create directory: $BUILDDIR_CTYPES/jni/include\"\n\n    run mkdir -p \"$BUILDDIR_CTYPES_STATIC/jni/include\"\n    fail_panic \"Can't create directory: $BUILDDIR_CTYPES_STATIC/jni/include\"\n\n    run cp -p $BUILDDIR_CTYPES_CONFIG/fficonfig.h $BUILDDIR_CTYPES_CONFIG/include/*.h $BUILDDIR_CTYPES/jni/include && \\\n        cp -p $BUILDDIR_CTYPES_CONFIG/fficonfig.h $BUILDDIR_CTYPES_CONFIG/include/*.h $BUILDDIR_CTYPES_STATIC/jni/include\n    fail_panic \"Can't copy configured libffi headers\"\n\n    local FFI_SRC_LIST\n    case $ABI in\n        x86)\n            FFI_SRC_LIST=\"src/x86/ffi.c src/x86/sysv.S src/x86/win32.S\"\n            ;;\n        x86_64)\n            FFI_SRC_LIST=\"src/x86/ffi64.c src/x86/unix64.S\"\n            ;;\n        armeabi*)\n            FFI_SRC_LIST=\"src/arm/ffi.c src/arm/sysv.S\"\n            ;;\n        arm64-v8a)\n            FFI_SRC_LIST=\"src/aarch64/ffi.c src/aarch64/sysv.S\"\n            ;;\n        mips)\n            FFI_SRC_LIST=\"src/mips/ffi.c src/mips/o32.S\"\n            ;;\n        mips64)\n            FFI_SRC_LIST=\"src/mips/ffi.c src/mips/o32.S src/mips/n32.S\"\n            ;;\n        *)\n            panic \"Unknown ABI: '$ABI'\"\n            ;;\n    esac\n    FFI_SRC_LIST=\"$FFI_SRC_LIST src/prep_cif.c\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := _ctypes'\n        echo 'LOCAL_C_INCLUDES := $(LOCAL_PATH)/include'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        for ffi_src in $FFI_SRC_LIST; do\n            echo \"  \\$(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/libffi/$ffi_src \\\\\"\n        done\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/callbacks.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/callproc.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/cfield.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/malloc_closure.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/stgdict.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/_ctypes.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_CTYPES/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_CTYPES/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_CTYPES -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module '_ctypes'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module '_ctypes' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_CTYPES/lib_ctypes.so $PYBIN_INSTALLDIR_MODULES/_ctypes.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module '_ctypes' in $PYBIN_INSTALLDIR_MODULES\"\n\n# _ctypes static\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}__ctypes\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python \\$(LOCAL_PATH)/include\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        for ffi_src in $FFI_SRC_LIST; do\n            echo \"  \\$(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/libffi/$ffi_src \\\\\"\n        done\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/callbacks.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/callproc.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/cfield.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/malloc_closure.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/stgdict.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/_ctypes.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_CTYPES_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_CTYPES_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_CTYPES_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module '_ctypes'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module '_ctypes' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_CTYPES_STATIC/libpython${PYTHON_ABI}__ctypes.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module '_ctypes' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_CTYPES_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header _ctypes $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_CTYPES_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_CTYPES_STATIC_HEADERS_INSTALLED\n    fi\n\n# _multiprocessing\n    local BUILDDIR_MULTIPROCESSING=\"$BUILDDIR/multiprocessing\"\n    local OBJDIR_MULTIPROCESSING=\"$BUILDDIR_MULTIPROCESSING/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_MULTIPROCESSING/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_MULTIPROCESSING/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := _multiprocessing'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/socket_connection.c \\'\n        fi\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/multiprocessing.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/semaphore.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_MULTIPROCESSING/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_MULTIPROCESSING/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_MULTIPROCESSING -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module '_multiprocessing'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module '_multiprocessing' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_MULTIPROCESSING/lib_multiprocessing.so $PYBIN_INSTALLDIR_MODULES/_multiprocessing.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module '_multiprocessing' in $PYBIN_INSTALLDIR_MODULES\"\n\n# _multiprocessing static\n    local BUILDDIR_MULTIPROCESSING_STATIC=\"$BUILDDIR/multiprocessing-static\"\n    local OBJDIR_MULTIPROCESSING_STATIC=\"$BUILDDIR_MULTIPROCESSING_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_MULTIPROCESSING_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_MULTIPROCESSING_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}__multiprocessing\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/socket_connection.c \\'\n        fi\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/multiprocessing.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_multiprocessing/semaphore.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_MULTIPROCESSING_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_MULTIPROCESSING_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_MULTIPROCESSING_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module '_multiprocessing'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module '_multiprocessing' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_MULTIPROCESSING_STATIC/libpython${PYTHON_ABI}__multiprocessing.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module '_multiprocessing' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_MULTIPROCESSING_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header _multiprocessing $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_MULTIPROCESSING_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_MULTIPROCESSING_STATIC_HEADERS_INSTALLED\n    fi\n\n# _socket\n    local BUILDDIR_SOCKET=\"$BUILDDIR/socket\"\n    local OBJDIR_SOCKET=\"$BUILDDIR_SOCKET/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SOCKET/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SOCKET/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := _socket'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/socketmodule.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_SOCKET/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SOCKET/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SOCKET -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module '_socket'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module '_socket' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_SOCKET/lib_socket.so $PYBIN_INSTALLDIR_MODULES/_socket.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module '_socket' in $PYBIN_INSTALLDIR_MODULES\"\n\n# _socket static\n    local BUILDDIR_SOCKET_STATIC=\"$BUILDDIR/socket-static\"\n    local OBJDIR_SOCKET_STATIC=\"$BUILDDIR_SOCKET_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SOCKET_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SOCKET_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}__socket\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/socketmodule.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_SOCKET_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SOCKET_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SOCKET_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module '_socket'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module '_socket' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_SOCKET_STATIC/libpython${PYTHON_ABI}__socket.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module '_socket' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_SOCKET_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header _socket $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_SOCKET_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_SOCKET_STATIC_HEADERS_INSTALLED\n    fi\n\n# _ssl\n    local BUILDDIR_SSL=\"$BUILDDIR/ssl\"\n    local OBJDIR_SSL=\"$BUILDDIR_SSL/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SSL/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SSL/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := _ssl'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ssl.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared openssl_static opencrypto_static'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n        echo \"\\$(call import-module,openssl/$DEFAULT_OPENSSL_VERSION)\"\n    } >$BUILDDIR_SSL/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SSL/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SSL -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module '_ssl'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module '_ssl' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_SSL/lib_ssl.so $PYBIN_INSTALLDIR_MODULES/_ssl.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module '_ssl' in $PYBIN_INSTALLDIR_MODULES\"\n\n# _ssl static\n    local BUILDDIR_SSL_STATIC=\"$BUILDDIR/ssl-static\"\n    local OBJDIR_SSL_STATIC=\"$BUILDDIR_SSL_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SSL_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SSL_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}__ssl\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_ssl.c'\n        echo 'LOCAL_STATIC_LIBRARIES := openssl_static'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n        echo \"\\$(call import-module,openssl/$DEFAULT_OPENSSL_VERSION)\"\n    } >$BUILDDIR_SSL_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SSL_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SSL_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module '_ssl'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module '_ssl' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_SSL_STATIC/libpython${PYTHON_ABI}__ssl.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module '_ssl' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_SSL_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header _ssl $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_SSL_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_SSL_STATIC_HEADERS_INSTALLED\n    fi\n\n# _sqlite3\n    local BUILDDIR_SQLITE3=\"$BUILDDIR/sqlite3\"\n    local OBJDIR_SQLITE3=\"$BUILDDIR_SQLITE3/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SQLITE3/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SQLITE3/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := _sqlite3'\n        echo 'LOCAL_CFLAGS := -DMODULE_NAME=\\\"sqlite3\\\"'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/cache.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/connection.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/cursor.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/microprotocols.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/module.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/prepare_protocol.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/row.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/statement.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/util.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared sqlite3_static'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n        echo '$(call import-module,sqlite/3)'\n    } >$BUILDDIR_SQLITE3/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SQLITE3/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SQLITE3 -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module '_sqlite3'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module '_sqlite3' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_SQLITE3/lib_sqlite3.so $PYBIN_INSTALLDIR_MODULES/_sqlite3.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module '_sqlite3' in $PYBIN_INSTALLDIR_MODULES\"\n\n# _sqlite3 static\n    local BUILDDIR_SQLITE3_STATIC=\"$BUILDDIR/sqlite3-static\"\n    local OBJDIR_SQLITE3_STATIC=\"$BUILDDIR_SQLITE3_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SQLITE3_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SQLITE3_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}__sqlite3\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo 'LOCAL_CFLAGS := -DMODULE_NAME=\\\"sqlite3\\\"'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/cache.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/connection.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/cursor.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/microprotocols.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/module.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/prepare_protocol.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/row.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/statement.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/_sqlite/util.c'\n        echo 'LOCAL_STATIC_LIBRARIES := sqlite3_static'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n        echo '$(call import-module,sqlite/3)'\n    } >$BUILDDIR_SQLITE3_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SQLITE3_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SQLITE3_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module '_sqlite3'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module '_sqlite3' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_SQLITE3_STATIC/libpython${PYTHON_ABI}__sqlite3.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module '_sqlite3' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_SQLITE3_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header _sqlite3 $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_SQLITE3_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_SQLITE3_STATIC_HEADERS_INSTALLED\n    fi\n\n# pyexpat\n    local BUILDDIR_PYEXPAT=\"$BUILDDIR/pyexpat\"\n    local OBJDIR_PYEXPAT=\"$BUILDDIR_PYEXPAT/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_PYEXPAT/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_PYEXPAT/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := pyexpat'\n        echo 'LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H -DXML_STATIC'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo \"LOCAL_C_INCLUDES := \\$(MY_PYTHON_SRC_ROOT)/Modules/expat\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlparse.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlrole.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmltok.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/pyexpat.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_PYEXPAT/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_PYEXPAT/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_PYEXPAT -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module 'pyexpat'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module 'pyexpat' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_PYEXPAT/libpyexpat.so $PYBIN_INSTALLDIR_MODULES/pyexpat.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module 'pyexpat' in $PYBIN_INSTALLDIR_MODULES\"\n\n# pyexpat static\n    local BUILDDIR_PYEXPAT_STATIC=\"$BUILDDIR/pyexpat-static\"\n    local OBJDIR_PYEXPAT_STATIC=\"$BUILDDIR_PYEXPAT_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_PYEXPAT_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_PYEXPAT_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}_pyexpat\"\n        echo 'LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H -DXML_STATIC'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python \\$(MY_PYTHON_SRC_ROOT)/Modules/expat\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlparse.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlrole.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmltok.c \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/pyexpat.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_PYEXPAT_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_PYEXPAT_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_PYEXPAT_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module 'pyexpat'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module 'pyexpat' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_PYEXPAT_STATIC/libpython${PYTHON_ABI}_pyexpat.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module 'pyexpat' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_PYEXPAT_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header pyexpat $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_PYEXPAT_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_PYEXPAT_STATIC_HEADERS_INSTALLED\n    fi\n\n# select\n    local BUILDDIR_SELECT=\"$BUILDDIR/select\"\n    local OBJDIR_SELECT=\"$BUILDDIR_SELECT/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SELECT/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SELECT/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := select'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/selectmodule.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_SELECT/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SELECT/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SELECT -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module 'select'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module 'select' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_SELECT/libselect.so $PYBIN_INSTALLDIR_MODULES/select.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module 'select' in $PYBIN_INSTALLDIR_MODULES\"\n\n# select static\n    local BUILDDIR_SELECT_STATIC=\"$BUILDDIR/select-static\"\n    local OBJDIR_SELECT_STATIC=\"$BUILDDIR_SELECT_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_SELECT_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_SELECT_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}_select\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/selectmodule.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_SELECT_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_SELECT_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_SELECT_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module 'select'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module 'select' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_SELECT_STATIC/libpython${PYTHON_ABI}_select.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module 'select' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_SELECT_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header select $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_SELECT_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_SELECT_STATIC_HEADERS_INSTALLED\n    fi\n\n# unicodedata\n    local BUILDDIR_UNICODEDATA=\"$BUILDDIR/unicodedata\"\n    local OBJDIR_UNICODEDATA=\"$BUILDDIR_UNICODEDATA/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_UNICODEDATA/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_UNICODEDATA/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := unicodedata'\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/unicodedata.c'\n        echo 'LOCAL_STATIC_LIBRARIES := python_shared'\n        echo 'include $(BUILD_SHARED_LIBRARY)'\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n    } >$BUILDDIR_UNICODEDATA/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_UNICODEDATA/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_UNICODEDATA -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI module 'unicodedata'\"\n\n    log \"Install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES\"\n    run cp -p -T $OBJDIR_UNICODEDATA/libunicodedata.so $PYBIN_INSTALLDIR_MODULES/unicodedata.so\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES\"\n\n# unicodedata static\n    local BUILDDIR_UNICODEDATA_STATIC=\"$BUILDDIR/unicodedata-static\"\n    local OBJDIR_UNICODEDATA_STATIC=\"$BUILDDIR_UNICODEDATA_STATIC/obj/local/$ABI\"\n\n    run mkdir -p \"$BUILDDIR_UNICODEDATA_STATIC/jni\"\n    fail_panic \"Can't create directory: $BUILDDIR_UNICODEDATA_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := python${PYTHON_ABI}_unicodedata\"\n        echo \"LOCAL_C_INCLUDES := $PYTHON_DSTDIR/include/python\"\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  $(MY_PYTHON_SRC_ROOT)/Modules/unicodedata.c'\n        echo 'include $(BUILD_STATIC_LIBRARY)'\n    } >$BUILDDIR_UNICODEDATA_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_UNICODEDATA_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_UNICODEDATA_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static module 'unicodedata'\"\n\n    log \"Install python$PYTHON_ABI-$ABI static module 'unicodedata' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n    run cp -fpH \"$OBJDIR_UNICODEDATA_STATIC/libpython${PYTHON_ABI}_unicodedata.a\" $PYBIN_INSTALLDIR_STATIC_LIBS\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static module 'unicodedata' in $PYBIN_INSTALLDIR_STATIC_LIBS\"\n\n    if [ \"$PYTHON_MODULE_UNICODEDATA_STATIC_HEADERS_INSTALLED\" != \"yes\" ]; then\n        generate_python_module_header unicodedata $PYTHON_DSTDIR/include/frozen\n        PYTHON_MODULE_UNICODEDATA_STATIC_HEADERS_INSTALLED=yes\n        export PYTHON_MODULE_UNICODEDATA_STATIC_HEADERS_INSTALLED\n    fi\n\n# Step 7: build static interpreter\n    local BUILDDIR_INTERPRETER_STATIC=\"$BUILDDIR/interpreter-static\"\n    local OBJDIR_INTERPRETER_STATIC=\"$BUILDDIR_INTERPRETER_STATIC/obj/local/$ABI\"\n\n    run mkdir -p $PYBIN_INSTALLDIR_STATIC_BIN\n    fail_panic \"Can't create directory: $PYBIN_INSTALLDIR_STATIC_BIN\"\n\n    run mkdir -p $BUILDDIR_INTERPRETER_STATIC/jni\n    fail_panic \"Can't create directory: $BUILDDIR_INTERPRETER_STATIC/jni\"\n\n    run cp -p -T $PY_C_INTERPRETER_STATIC_FILE $BUILDDIR_INTERPRETER_STATIC/jni/interpreter.c\n    fail_panic \"Can't copy $PY_C_INTERPRETER_STATIC_FILE to $BUILDDIR_INTERPRETER/jni\"\n\n    run cp -fpH \"$BUILDDIR_STDLIB_FREEZE/python-stdlib.c\" $BUILDDIR_INTERPRETER_STATIC/jni\n    fail_panic \"Can't copy $BUILDDIR_STDLIB_FREEZE/python-stdlib.c to $BUILDDIR_INTERPRETER_STATIC/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := python'\n        echo ''\n        echo \"MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR\"\n        echo 'LOCAL_SRC_FILES := \\'\n        echo '  interpreter.c python-stdlib.c \\'\n        echo '  \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/adler32.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/crc32.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/deflate.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/infback.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inffast.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inflate.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/inftrees.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/trees.c \\'\n        echo '  ${MY_PYTHON_SRC_ROOT}/Modules/zlib/zutil.c'\n        echo ''\n        echo 'LOCAL_STATIC_LIBRARIES := \\'\n        echo '  python_static \\'\n        echo '  python_stdlib_static \\'\n        echo '  python_module__ctypes \\'\n        echo '  python_module__multiprocessing \\'\n        echo '  python_module__socket \\'\n        echo '  python_module__ssl openssl_static opencrypto_static \\'\n        echo '  python_module__sqlite3 sqlite3_static \\'\n        echo '  python_module_pyexpat \\'\n        echo '  python_module_select \\'\n        echo '  python_module_unicodedata'\n        echo ''\n        echo 'include $(BUILD_EXECUTABLE)'\n        echo ''\n        echo \"\\$(call import-module,python/$PYTHON_ABI)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/stdlib)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/_ctypes)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/_multiprocessing)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/_socket)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/_ssl)\"\n        echo \"\\$(call import-module,openssl/$DEFAULT_OPENSSL_VERSION)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/_sqlite3)\"\n        echo \"\\$(call import-module,sqlite/3)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/pyexpat)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/select)\"\n        echo \"\\$(call import-module,python/$PYTHON_ABI/frozen/unicodedata)\"\n    } >$BUILDDIR_INTERPRETER_STATIC/jni/Android.mk\n    fail_panic \"Can't generate $BUILDDIR_INTERPRETER_STATIC/jni/Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR_INTERPRETER_STATIC -j$NUM_JOBS APP_ABI=$ABI V=1 APP_PLATFORM=$EXE_PLATFORM APP_PIE=true\n    fail_panic \"Can't build python$PYTHON_ABI-$ABI static interpreter\"\n\n    log \"Install python$PYTHON_ABI-$ABI static interpreter in $PYBIN_INSTALLDIR_STATIC_BIN\"\n    run cp -p -T \"$OBJDIR_INTERPRETER_STATIC/python\" \"$PYBIN_INSTALLDIR_STATIC_BIN/python\"\n    fail_panic \"Can't install python$PYTHON_ABI-$ABI static interpreter in $PYBIN_INSTALLDIR_STATIC_BIN\"\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        PYTHON_HEADERS_NEED_PACKAGE=no\n    else\n        PYTHON_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}-binaries-${ABI}.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$PYTHON_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_python_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$PYTHON_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$PYTHON_SUBDIR/$PYTHON_ABI/include\"\n        PACKAGE_NAME=\"python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package python headers\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for SUBDIR in shared/$ABI static/bin/$ABI static/libs/$ABI; do\n            FILES=\"$FILES $PYTHON_SUBDIR/$PYTHON_ABI/$SUBDIR\"\n        done\n        PACKAGE_NAME=\"python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}-binaries-${ABI}.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package python $ABI binaries\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-vim.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild VIM for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/vim/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the VIM source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-vim\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting VIM version... \"\nVIM_VERSION=$(grep '^#define  *VIM_VERSION_SHORT\\>' $SRCDIR/src/version.h | sed 's,^[^\"]*\"\\([^\"]*\\)\".*$,\\1,')\nif [ -z \"$VIM_VERSION\" ]; then\n    panic \"Couldn't detect VIM version!\"\nfi\ndump \"$VIM_VERSION\"\n\ndump_n \"Detecting ncurses version...\"\nNCURSES_VERSION=$(ls -1 $NDK_DIR/packages/ncurses/ | sort | uniq | tail -n 1)\nif [ -z \"$NCURSES_VERSION\" ]; then\n    panic \"Couldn't detect ncurses version!\"\nfi\ndump \"$NCURSES_VERSION\"\nNCURSES=$NDK_DIR/packages/ncurses/$NCURSES_VERSION\n\n# $1: ABI\n# $2: build directory\nbuild_vim_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/vim/$VIM_VERSION/$ABI\"\n\n    dump \"Building $ABI VIM\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n        NCURSES=$NCURSES/$ABI \\\n\n    fail_panic \"Couldn't build $ABI VIM\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    run rm -Rf $OUTDIR/install/share/man && \\\n    run mv $OUTDIR/install/share/vim/vim*/* $OUTDIR/install/share/vim/ && \\\n    run rmdir $OUTDIR/install/share/vim/vim*/ &&\n    ( cd $OUTDIR/install && run tar czf $INSTALLDIR/vim.tar.gz bin share )\n    fail_panic \"Can't install $ABI VIM\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-vim-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_vim_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/vim/$VIM_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-vim-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI VIM binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-target-x264.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild x264 for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/packages/x264/\\$VERSION/\\$ABI, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the x264 source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-x264\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\ndump_n \"Detecting x264 version... \"\nPACKAGE_VERSION=$(cd $SRCDIR && ./version.sh | grep \"^#define  *\\<X264_REV\\>\" | sed 's,^#define  *X264_REV *\\([0-9]*\\).*$,r\\1,')\nif [ -z \"$PACKAGE_VERSION\" ]; then\n    panic \"Couldn't detect x264 version!\"\nfi\ndump \"$PACKAGE_VERSION\"\n\n# $1: ABI\n# $2: build directory\nbuild_x264_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n    local INSTALLDIR=\"$NDK_DIR/packages/x264/$PACKAGE_VERSION/$ABI\"\n\n    dump \"Building $ABI x264\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $SRCDIR/android \\\n        NDK=$NDK_DIR \\\n        ABI=$ABI \\\n        OUTDIR=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI x264\"\n\n    run mkdir -p $INSTALLDIR/\n    fail_panic \"Can't create $ABI install folder\"\n\n    rm -Rf $OUTDIR/install/lib/pkgconfig\n\n    run rsync -a --delete $OUTDIR/install/ $INSTALLDIR/\n    fail_panic \"Can't install $ABI x264\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"android-x264-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_x264_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"packages/x264/$PACKAGE_VERSION/$ABI\"\n        PACKAGE_NAME=\"android-x264-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI x264 binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/build-vendor-host-python.sh",
    "content": "#!/bin/bash\n#\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n\nNDK_BUILDTOOLS_PATH=\"$(dirname $0)\"\n. \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\"\n. \"$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh\"\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"\\\nThis program is used to rebuild Python client programs from sources for the systems\nspecified in command line: --systems=<tag-1>[,<tag-2>, ...>]\nEach <tag> value can be one of the following:\n   linux-x86\n   linux-x86_64\n   windows\n   windows-x86_64\n   darwin-x86\n   darwin-x86_64\n\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Select NDK install directory.\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Package prebuilt tarballs into directory.\"\n\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Build Python into directory\"\n\nbh_register_options\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\n# setup var BH_BUILD_DIR\nbh_setup_build_dir $BUILD_DIR\n\nCMAKE_MIN_VERSION=\"2.8.3\"\n\nPYTHON_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$PYTHON_SRCDIR\" ]; then\n    panic \"Please provide the path to the python source tree. See --help\"\nfi\n\nif [ ! -d \"$PYTHON_SRCDIR\" ]; then\n    panic \"No such directory: '$PYTHON_SRCDIR'\"\nfi\n\nPYTHON_SRCDIR=$(cd $PYTHON_SRCDIR && pwd)\n\nPYTHON_MAJOR_VERSION=\\\n$(cat $PYTHON_SRCDIR/Include/patchlevel.h | sed -n 's/#define[ \\t]*PY_MAJOR_VERSION[ \\t]*\\([0-9]*\\).*/\\1/p')\nif [ -z \"$PYTHON_MAJOR_VERSION\" ]; then\n    panic \"Can't detect python major version.\"\nfi\n\nPYTHON_MINOR_VERSION=\\\n$(cat $PYTHON_SRCDIR/Include/patchlevel.h | sed -n 's/#define[ \\t]*PY_MINOR_VERSION[ \\t]*\\([0-9]*\\).*/\\1/p')\nif [ -z \"$PYTHON_MINOR_VERSION\" ]; then\n    panic \"Can't detect python minor version.\"\nfi\n\nPYTHON_MICRO_VERSION=\\\n$(cat $PYTHON_SRCDIR/Include/patchlevel.h | sed -n 's/#define[ \\t]*PY_MICRO_VERSION[ \\t]*\\([0-9]*\\).*/\\1/p')\nif [ -z \"$PYTHON_MICRO_VERSION\" ]; then\n    panic \"Can't detect python micro version.\"\nfi\n\nPYTHON_ABI=\"$PYTHON_MAJOR_VERSION\"'.'\"$PYTHON_MINOR_VERSION\"\n\nPYTHON_BUILD_UTILS_DIR=$(cd $(dirname $0)/build-python && pwd)\nPYTHON_BUILD_UTILS_DIR_HOST=\"$PYTHON_BUILD_UTILS_DIR/host\"\nif [ ! -d \"$PYTHON_BUILD_UTILS_DIR_HOST\" ]; then\n    panic \"No such directory: '$PYTHON_BUILD_UTILS_DIR_HOST'\"\nfi\n\nPY_CMAKE_TEMPLATE_FILE=\"$PYTHON_BUILD_UTILS_DIR_HOST/CMakeLists.txt.$PYTHON_ABI\"\nif [ ! -f \"$PY_CMAKE_TEMPLATE_FILE\" ]; then\n    panic \"Build of host python $PYTHON_ABI is not supported, no such file: $PY_CMAKE_TEMPLATE_FILE\"\nfi\n\nPY_C_CONFIG_FILE=\"$PYTHON_BUILD_UTILS_DIR_HOST/config.c.$PYTHON_ABI\"\nif [ ! -f \"$PY_C_CONFIG_FILE\" ]; then\n    panic \"Build of host python $PYTHON_ABI is not supported, no such file: $PY_C_CONFIG_FILE\"\nfi\n\ndetermine_systems ()\n{\n    local IN_SYSTEMS=\"$1\"\n    local OUT_SYSTEMS\n\n    for SYSTEM in $IN_SYSTEMS; do\n        if [ \"$TRY64\" = \"yes\" ]; then\n            case $SYSTEM in\n                darwin-x86|linux-x86|windows-x86)\n                    SYSTEM=${SYSTEM%%x86}x86_64\n                    ;;\n                windows)\n                    SYSTEM=windows-x86_64\n                    ;;\n            esac\n        else\n            case $SYSTEM in\n                windows-x86)\n                    SYSTEM=windows\n                    ;;\n            esac\n        fi\n        OUT_SYSTEMS=\"$OUT_SYSTEMS $SYSTEM\"\n    done\n    echo $OUT_SYSTEMS\n}\n\nBH_HOST_SYSTEMS=$(commas_to_spaces $BH_HOST_SYSTEMS)\nif [ \"$MINGW\" = \"yes\" ]; then\n    BH_HOST_SYSTEMS=\"windows\"\n    log \"Auto-config: --systems=windows\"\n    find_mingw_toolchain\nfi\nif [ \"$DARWIN\" = \"yes\" ]; then\n    BH_HOST_SYSTEMS=\"darwin-x86\"\n    log \"Auto-config: --systems=darwin-x86\"\nfi\nBH_HOST_SYSTEMS=$(determine_systems \"$BH_HOST_SYSTEMS\")\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\ndone\n\n# Generate shell wrapper for cmake\n# $1: wrapper file name\n# $2: optional path of file with cmake toolchain description\ngenerate_cmake_wrapper ()\n{\n    local WRAPPER_FNAME=$1\n    local CMAKE_TOOLCHAIN_DESCRIPTION=$2\n    local TOOLCHAIN_OPTION\n    if [ -n \"$CMAKE_TOOLCHAIN_DESCRIPTION\" ]; then\n        TOOLCHAIN_OPTION=\"-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_DESCRIPTION\"\n    fi\n    {\n        echo '#!/bin/bash -e'\n        echo 'DIR_HERE=$(cd $(dirname $0) && pwd)'\n        echo 'DIR_BUILD=\"$DIR_HERE/build\"'\n        echo 'rm -rf $DID_BUILD && mkdir -p $DIR_BUILD && cd $DIR_BUILD'\n        echo \"cmake $TOOLCHAIN_OPTION \\$DIR_HERE\"\n        echo 'make -j'$NUM_JOBS' VERBOSE=1'\n    } >$WRAPPER_FNAME\n    fail_panic \"Can't create cmake build wrapper: '$WRAPPER_FNAME'\"\n    run chmod +x $WRAPPER_FNAME\n    fail_panic \"Can't chmod +x cmake build wrapper: '$WRAPPER_FNAME'\"\n}\n\n# Build python stub for internal purposes\n# $1: output directory\nbuild_python_stub ()\n{\n    local BUILDDIR_PYSTUB=\"$1\"\n    local BUILDDIR_PYSTUB_CONFIG=\"$BUILDDIR_PYSTUB/config\"\n    local BUILDDIR_PYSTUB_CORE=\"$BUILDDIR_PYSTUB/core\"\n    local BUILDDIR_PYSTUB_INTERPRETER=\"$BUILDDIR_PYSTUB/interpreter\"\n    local BUILDDIR_PYSTUB_BIN=\"$BUILDDIR_PYSTUB/bin\"\n    run mkdir -p $BUILDDIR_PYSTUB_CONFIG\n    fail_panic \"Can't create directory: $BUILDDIR_PYSTUB_CONFIG\"\n    local PYSTUB_CONFIGURE_WRAPPER=\"$BUILDDIR_PYSTUB_CONFIG/configure.sh\"\n    {\n        echo \"#!/bin/bash -e\"\n        echo ''\n        echo 'cd $(dirname $0)'\n        echo ''\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n            echo \"    --prefix=$BUILDDIR_PYSTUB_CONFIG/install \\\\\"\n            echo \"    --enable-shared \\\\\"\n            echo \"    --with-threads \\\\\"\n            echo \"    --enable-ipv6 \\\\\"\n            echo \"    --enable-unicode=ucs4 \\\\\"\n            echo \"    --without-ensurepip\"\n        else\n            echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n            echo \"    --prefix=$BUILDDIR_PYSTUB_CONFIG/install \\\\\"\n            echo \"    --enable-shared \\\\\"\n            echo \"    --with-threads \\\\\"\n            echo \"    --enable-ipv6 \\\\\"\n            echo \"    --with-computed-gotos \\\\\"\n            echo \"    --without-ensurepip\"\n        fi\n    } >$PYSTUB_CONFIGURE_WRAPPER\n    fail_panic \"Can't create configure wrapper: $PYSTUB_CONFIGURE_WRAPPER\"\n    run chmod +x $PYSTUB_CONFIGURE_WRAPPER\n    fail_panic \"Can't chmod +x configure wrapper: $PYSTUB_CONFIGURE_WRAPPER\"\n    log \"configure python-$PYTHON_ABI for $BH_BUILD_TAG ...\"\n    run $PYSTUB_CONFIGURE_WRAPPER\n    fail_panic \"Can't configure python-$PYTHON_ABI for $BH_BUILD_TAG\"\n\n    run mkdir -p $BUILDDIR_PYSTUB_CORE\n    fail_panic \"Can't create directory: $BUILDDIR_PYSTUB_CORE\"\n    local PYSTUB_CORE_CMAKE_DESCRIPTION=\"$BUILDDIR_PYSTUB_CORE/CMakeLists.txt\"\n    {\n        echo \"cmake_minimum_required (VERSION $CMAKE_MIN_VERSION)\"\n        echo \"set(MY_PYTHON_SRC_ROOT \\\"$PYTHON_SRCDIR\\\")\"\n        cat $PY_CMAKE_TEMPLATE_FILE\n    } >$PYSTUB_CORE_CMAKE_DESCRIPTION\n    fail_panic \"Can't generate $PYSTUB_CORE_CMAKE_DESCRIPTION\"\n\n    local PYSTUB_CORE_BUILD_WRAPPER=\"$BUILDDIR_PYSTUB_CORE/build.sh\"\n    generate_cmake_wrapper $PYSTUB_CORE_BUILD_WRAPPER\n\n    run cp -p -T $PY_C_CONFIG_FILE \"$BUILDDIR_PYSTUB_CORE/config.c\" && \\\n        cp -p -t \"$BUILDDIR_PYSTUB_CORE\" \"$BUILDDIR_PYSTUB_CONFIG/pyconfig.h\"\n    fail_panic \"Can't copy config.c pyconfig.h to $BUILDDIR_PYSTUB_CORE\"\n\n    local PY_C_GETPATH\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR_HOST/getpath.c.2.7\"\n        run cp -p -T $PY_C_GETPATH \"$BUILDDIR_PYSTUB_CORE/getpath.c\"\n        fail_panic \"Can't copy $PY_C_GETPATH to $BUILDDIR_PYSTUB_CORE\"\n    else\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR_HOST/getpath.c.3.x\"\n        run cp -p -T $PY_C_GETPATH \"$BUILDDIR_PYSTUB_CORE/getpath.c\"\n        fail_panic \"Can't copy $PY_C_GETPATH to $BUILDDIR_PYSTUB_CORE\"\n    fi\n    log \"build python-$PYTHON_ABI core for $BH_BUILD_TAG ...\"\n    run $PYSTUB_CORE_BUILD_WRAPPER\n    fail_panic \"Can't build python-$PYTHON_ABI core for $BH_BUILD_TAG\"\n    run mkdir -p $BUILDDIR_PYSTUB_BIN\n    fail_panic \"Can't create directory: $BUILDDIR_PYSTUB_BIN\"\n    local PY_CORE_FNAME\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        PY_CORE_FNAME=\"libpython${PYTHON_ABI}.so\"\n    else\n        PY_CORE_FNAME=\"libpython${PYTHON_ABI}m.so\"\n    fi\n    run cp -p -t \"$BUILDDIR_PYSTUB_BIN\" \"$BUILDDIR_PYSTUB_CORE/build/$PY_CORE_FNAME\"\n    fail_panic \"Can't copy '$PY_CORE_FNAME' from $BUILDDIR_PYSTUB_CORE/build to '$BUILDDIR_PYSTUB_BIN'\"\n\n    run mkdir -p $BUILDDIR_PYSTUB_INTERPRETER\n    fail_panic \"Can't create directory: $BUILDDIR_PYSTUB_INTERPRETER\"\n    local PYSTUB_INTERPRETER_CMAKE_DESCRIPTION=\"$BUILDDIR_PYSTUB_INTERPRETER/CMakeLists.txt\"\n    {\n        echo \"cmake_minimum_required (VERSION $CMAKE_MIN_VERSION)\"\n        echo 'set(CMAKE_BUILD_TYPE RELEASE)'\n        echo 'link_libraries(dl)'\n        echo \"add_executable(python \\${CMAKE_CURRENT_LIST_DIR}/interpreter.c)\"\n        echo \"set(CMAKE_C_FLAGS \\\"-DPYTHON_DSO_REL_PATH=\\\\\\\\\\\\\\\"$PY_CORE_FNAME\\\\\\\\\\\\\\\"\\\")\"\n    } >$PYSTUB_INTERPRETER_CMAKE_DESCRIPTION\n    fail_panic \"Can't generate $PYSTUB_INTERPRETER_CMAKE_DESCRIPTION\"\n\n    local PYSTUB_INTERPRETER_BUILD_WRAPPER=\"$BUILDDIR_PYSTUB_INTERPRETER/build.sh\"\n    generate_cmake_wrapper $PYSTUB_INTERPRETER_BUILD_WRAPPER\n\n    local PY_C_INTERPRETER_STUB_FILE\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        PY_C_INTERPRETER_STUB_FILE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-posix.c.2.7\"\n    else\n        PY_C_INTERPRETER_STUB_FILE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-posix.c.3.x\"\n    fi\n    run cp -p -T $PY_C_INTERPRETER_STUB_FILE \"$BUILDDIR_PYSTUB_INTERPRETER/interpreter.c\"\n    fail_panic \"Can't copy $PY_C_INTERPRETER_STUB_FILE to $BUILDDIR_PYSTUB_INTERPRETER\"\n    log \"build python-$PYTHON_ABI interpreter stub for $BH_BUILD_TAG ...\"\n    run $PYSTUB_INTERPRETER_BUILD_WRAPPER\n    fail_panic \"Can't build python-$PYTHON_ABI interpreter stub for $BH_BUILD_TAG\"\n    run cp -p -t \"$BUILDDIR_PYSTUB_BIN\" \"$BUILDDIR_PYSTUB_INTERPRETER/build/python\"\n    fail_panic \"Can't copy python from $BUILDDIR_PYSTUB_INTERPRETER/build to $BUILDDIR_PYSTUB_BIN\"\n\n    log \"build python-$PYTHON_ABI stdlib for $BH_BUILD_TAG ...\"\n    local STDLIB_GEN_WRAPPER=\"$BUILDDIR_PYSTUB_BIN/gen_stdlib.sh\"\n    {\n        echo '#!/bin/bash -e'\n        echo 'DIR_HERE=$(cd $(dirname $0) && pwd)'\n        echo \"export PYTHONHOME=$PYTHON_SRCDIR/Lib\"\n        echo \"\\$DIR_HERE/python -B -S $PYTHON_BUILD_UTILS_DIR/build_stdlib.py \\\\\"\n        if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n            echo '    --py2 \\'\n        fi\n        echo \"    --pysrc-root $PYTHON_SRCDIR \\\\\"\n        echo \"    --output-zip \\$DIR_HERE/python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.zip\"\n    } >$STDLIB_GEN_WRAPPER\n    fail_panic \"Can't build wrapper for stdlib generation: $STDLIB_GEN_WRAPPER\"\n\n    run chmod +x $STDLIB_GEN_WRAPPER\n    fail_panic \"Can't chmod +x stdlib build wrapper: '$STDLIB_GEN_WRAPPER'\"\n\n    run $STDLIB_GEN_WRAPPER\n    fail_panic \"Can't generate python $PYTHON_ABI stdlib\"\n\n    run rm -f \"$STDLIB_GEN_WRAPPER\"\n    fail_panic \"Can't remove $'STDLIB_GEN_WRAPPER'\"\n}\n\n# Build python module\n# $1: host system tag\n# $2: module name\n# $3: sources, comma separated list\n# $4: build dir\n# $5: cmake toolchain file\n# $6: include dirs, comma separated list\n# $7: lib dir\n# $8: output dir\nbuild_python_module ()\n{\n    local HOST_SYSTEM_TAG=$1\n    local MOD_NAME=$2\n    local MOD_SOURCES=$(commas_to_spaces $3)\n    local MOD_BUILD_DIR=$4\n    local CMAKE_TOOLCHAIN_DESCRIPTION=$5\n    local INCLUDE_DIR_LIST=$(commas_to_spaces $6)\n    local LIB_DIR=$7\n    local OUTPUT_DIR=$8\n    local MODS_OUTPUT_DIR=\"$OUTPUT_DIR/modules\"\n\n    log \"build python-$PYTHON_ABI module '$MOD_NAME' for $HOST_SYSTEM_TAG ...\"\n\n    run mkdir -p $MOD_BUILD_DIR\n    fail_panic \"Can't create directory: $MOD_BUILD_DIR\"\n    run mkdir -p $MODS_OUTPUT_DIR\n    fail_panic \"Can't create directory: $MODS_OUTPUT_DIR\"\n\n    local PYCORE_LIBNAME\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            PYCORE_LIBNAME=\"python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}\"\n            ;;\n        *)\n            if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n                PYCORE_LIBNAME=\"python${PYTHON_ABI}\"\n            else\n                PYCORE_LIBNAME=\"python${PYTHON_ABI}m\"\n            fi\n            ;;\n    esac\n\n    local MOD_LIBLIST=\"$PYCORE_LIBNAME\"\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            case $MOD_NAME in\n                _multiprocessing|_socket|select)\n                    MOD_LIBLIST=\"$MOD_LIBLIST ws2_32\"\n                    ;;\n            esac\n            ;;\n        *)\n            case $MOD_NAME in\n                _ctypes)\n                    MOD_LIBLIST=\"$MOD_LIBLIST dl\"\n                    ;;\n                _multiprocessing)\n                    MOD_LIBLIST=\"$MOD_LIBLIST pthread\"\n                    ;;\n            esac\n            ;;\n    esac\n\n    local MOD_CMAKE_DESCRIPTION=\"$MOD_BUILD_DIR/CMakeLists.txt\"\n    {\n        echo \"cmake_minimum_required (VERSION $CMAKE_MIN_VERSION)\"\n        if [ \"$MOD_NAME\" = \"_ctypes\" ]; then\n            echo \"enable_language(C ASM)\"\n            case $HOST_SYSTEM_TAG in\n                windows*)\n                    if [ \"$HOST_SYSTEM_TAG\" != \"windows-x86_64\" ]; then\n                        echo 'set(CMAKE_ASM_FLAGS \"-DSYMBOL_UNDERSCORE=1\")'\n                    fi\n                    ;;\n            esac\n        elif [ \"$MOD_NAME\" = \"pyexpat\" ]; then\n            case $HOST_SYSTEM_TAG in\n                windows*)\n                    echo 'set(CMAKE_C_FLAGS \"-DCOMPILED_FROM_DSP -DXML_STATIC\")'\n                    ;;\n                *)\n                    echo 'set(CMAKE_C_FLAGS \"-DHAVE_EXPAT_CONFIG_H -DXML_STATIC\")'\n                    ;;\n            esac\n        fi\n        echo \"set(MY_PYTHON_SRC_ROOT \\\"$PYTHON_SRCDIR\\\")\"\n        echo \"set(CMAKE_BUILD_TYPE RELEASE)\"\n        echo \"set(CMAKE_SKIP_RPATH TRUE)\"\n        echo \"\"\n        echo \"if(UNIX AND NOT APPLE)\"\n        echo \"    set(LINUX TRUE)\"\n        echo \"endif()\"\n        echo \"\"\n        echo \"if(LINUX)\"\n        echo \"    set(CMAKE_SHARED_LINKER_FLAGS \\\"-Wl,--no-undefined\\\")\"\n        echo \"endif()\"\n        echo \"\"\n        echo \"set(PYMOD_TARGET_NAME \\\"$MOD_NAME\\\")\"\n        echo \"\"\n        echo \"include_directories(\\${MY_PYTHON_SRC_ROOT}/Include)\"\n        for incd in $INCLUDE_DIR_LIST; do\n            case $incd in\n                /*)\n                    echo \"include_directories($incd)\"\n                    ;;\n                *)\n                    echo \"include_directories(\\${MY_PYTHON_SRC_ROOT}/$incd)\"\n                    ;;\n            esac\n        done\n        echo \"\"\n        echo \"link_directories(\\\"$LIB_DIR\\\")\"\n        echo \"\"\n        echo \"set(SRC_FILES\"\n        for src in $MOD_SOURCES; do\n            case $src in\n                /*)\n                    echo \"  $src\"\n                    ;;\n                *)\n                    echo \"  \\${MY_PYTHON_SRC_ROOT}/$src\"\n                    ;;\n            esac\n        done\n        echo \")\"\n        echo \"\"\n        echo \"add_library(\\${PYMOD_TARGET_NAME} SHARED \\${SRC_FILES})\"\n        echo \"target_link_libraries(\\${PYMOD_TARGET_NAME} $MOD_LIBLIST)\"\n        echo \"set_target_properties(\\${PYMOD_TARGET_NAME} PROPERTIES DEFINE_SYMBOL \\\"Py_BUILD_CORE_MODULE\\\")\"\n        echo \"\"\n        echo \"if(WIN32)\"\n        echo \"  set_target_properties(\\${PYMOD_TARGET_NAME} PROPERTIES PREFIX \\\"\\\")\"\n        echo \"endif()\"\n        echo \"\"\n        echo \"if (APPLE)\"\n        echo \"  set_target_properties(\\${PYMOD_TARGET_NAME} PROPERTIES SUFFIX \\\".so\\\")\"\n        echo \"  add_custom_command(TARGET \\${PYMOD_TARGET_NAME} POST_BUILD COMMAND\"\n        echo \"    install_name_tool -id lib\\${PYMOD_TARGET_NAME}.so lib\\${PYMOD_TARGET_NAME}.so)\"\n        echo \"  add_custom_command(TARGET \\${PYMOD_TARGET_NAME} POST_BUILD COMMAND\"\n        echo \"    install_name_tool -change lib${PYCORE_LIBNAME}.so @loader_path/../lib${PYCORE_LIBNAME}.so lib\\${PYMOD_TARGET_NAME}.so)\"\n        echo \"endif()\"\n    } >$MOD_CMAKE_DESCRIPTION\n    fail_panic \"Can't generate '$MOD_CMAKE_DESCRIPTION'\"\n\n    local MOD_BUILD_WRAPPER=\"$MOD_BUILD_DIR/build.sh\"\n    generate_cmake_wrapper $MOD_BUILD_WRAPPER $CMAKE_TOOLCHAIN_DESCRIPTION\n\n    log \"build python-$PYTHON_ABI module '$MOD_NAME' for $HOST_SYSTEM_TAG ...\"\n    run $MOD_BUILD_WRAPPER\n    fail_panic \"Can't build python-$PYTHON_ABI module '$MOD_NAME' for $HOST_SYSTEM_TAG\"\n\n    local MOD_BUILD_FNAME\n    local MOD_OUTPUT_FNAME\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            MOD_BUILD_FNAME=\"${MOD_NAME}.dll\"\n            MOD_OUTPUT_FNAME=\"${MOD_NAME}.pyd\"\n            ;;\n        *)\n            MOD_BUILD_FNAME=\"lib${MOD_NAME}.so\"\n            MOD_OUTPUT_FNAME=\"${MOD_NAME}.so\"\n            ;;\n    esac\n\n    run cp -p -T \"$MOD_BUILD_DIR/build/$MOD_BUILD_FNAME\" \"$MODS_OUTPUT_DIR/$MOD_OUTPUT_FNAME\"\n    fail_panic \"Can't copy '$MOD_BUILD_DIR/build/$MOD_BUILD_FNAME' as '$MODS_OUTPUT_DIR/$MOD_OUTPUT_FNAME'\"\n}\n\n# Build Python binaries for host\n# $1: host system tag\nbuild_host_python ()\n{\n# Define directories to be used\n    local HOST_SYSTEM_TAG=$1\n    local OBJ_DIR=\"$BH_BUILD_DIR/py$PYTHON_ABI-$HOST_SYSTEM_TAG\"\n    run mkdir -p $OBJ_DIR\n    fail_panic \"Can't create directory: $OBJ_DIR\"\n\n    local CONFIG_INCLUDE_DIR=\"$OBJ_DIR/include\"\n    run mkdir -p $CONFIG_INCLUDE_DIR\n    fail_panic \"Can't create directory: $CONFIG_INCLUDE_DIR\"\n\n    local PY_HOST_LINK_LIB_DIR=\"$OBJ_DIR/lib\"\n    run mkdir -p $PY_HOST_LINK_LIB_DIR\n    fail_panic \"Can't create directory: $PY_HOST_LINK_LIB_DIR\"\n\n    local OUTPUT_DIR=\"$(python_build_install_dir $HOST_SYSTEM_TAG)/opt/python$PYTHON_ABI\"\n    run mkdir -p $OUTPUT_DIR\n    fail_panic \"Can't create directory: $OUTPUT_DIR\"\n\n    local MINGW_ROOT\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            MINGW_ROOT=$(cd \"$MINGW_PATH/..\" && pwd)\n            if [ ! -d \"$MINGW_ROOT\" ]; then\n                panic \"MINGW root not a directory: '$MINGW_ROOT'\"\n            else\n                log \"MINGW: '$MINGW_ROOT'\"\n            fi\n            ;;\n    esac\n\n\n# Step 1: build python stub once\n    local PY_STUB_DIR=\"$BH_BUILD_DIR/py$PYTHON_ABI-stub\"\n    bh_stamps_do \"build-vendor-python$PYTHON_ABI-stub\" build_python_stub $PY_STUB_DIR\n    local PYTHON_FOR_BUILD=\"$PY_STUB_DIR/bin/python\"\n\n# Step 2: prepare cmake toolchain wrappers for host\n    local TOOLCHAIN_WRAPPER_PREFIX\n    local CMAKE_CROSS_SYSTEM_NAME\n    case $HOST_SYSTEM_TAG in\n        windows-x86_64)\n            TOOLCHAIN_WRAPPER_PREFIX=\"x86_64-w64-mingw32\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Windows\"\n            ;;\n        windows*)\n            TOOLCHAIN_WRAPPER_PREFIX=\"i686-w64-mingw32msvc\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Windows\"\n            ;;\n        linux-x86_64)\n            TOOLCHAIN_WRAPPER_PREFIX=\"x86_64-linux-gnu\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Linux\"\n            ;;\n        linux-x86)\n            TOOLCHAIN_WRAPPER_PREFIX=\"i686-linux-gnu\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Linux\"\n            ;;\n        darwin-x86_64)\n            TOOLCHAIN_WRAPPER_PREFIX=\"x86_64-apple-darwin\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Darwin\"\n            ;;\n        darwin-x86)\n            TOOLCHAIN_WRAPPER_PREFIX=\"i686-apple-darwin\"\n            CMAKE_CROSS_SYSTEM_NAME=\"Darwin\"\n            ;;\n        *)\n            panic \"Unknown platform: $HOST_SYSTEM_TAG\"\n            ;;\n    esac\n    local CMAKE_TOOLCHAIN_DESCRIPTION=\"$OBJ_DIR/toolchain.cmake\"\n    {\n        echo \"set(CMAKE_SYSTEM_NAME $CMAKE_CROSS_SYSTEM_NAME)\"\n        echo \"set(CMAKE_C_COMPILER $BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-gcc)\"\n        echo \"set(CMAKE_CXX_COMPILER $BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-g++)\"\n        case $HOST_SYSTEM_TAG in\n            windows*)\n                echo \"set(CMAKE_RC_COMPILER $BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-windres)\"\n            ;;\n        esac\n    } >$CMAKE_TOOLCHAIN_DESCRIPTION\n    fail_panic \"Can't create cmake-toolchain wrapper: '$CMAKE_TOOLCHAIN_DESCRIPTION'\"\n\n# Step 3: build python core for host\n    local BUILDDIR_CORE=\"$OBJ_DIR/core\"\n    run mkdir -p $BUILDDIR_CORE\n    fail_panic \"Can't create directory: $BUILDDIR_CORE\"\n    local CORE_CMAKE_DESCRIPTION=\"$BUILDDIR_CORE/CMakeLists.txt\"\n    {\n        echo \"cmake_minimum_required (VERSION $CMAKE_MIN_VERSION)\"\n        echo \"set(MY_PYTHON_SRC_ROOT \\\"$PYTHON_SRCDIR\\\")\"\n        cat $PY_CMAKE_TEMPLATE_FILE\n    } >$CORE_CMAKE_DESCRIPTION\n    fail_panic \"Can't generate $CORE_CMAKE_DESCRIPTION\"\n\n    local CORE_BUILD_WRAPPER=\"$BUILDDIR_CORE/build.sh\"\n    generate_cmake_wrapper $CORE_BUILD_WRAPPER $CMAKE_TOOLCHAIN_DESCRIPTION\n\n    local PY_C_GETPATH\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR_HOST/getpath.c.2.7\"\n    else\n        PY_C_GETPATH=\"$PYTHON_BUILD_UTILS_DIR_HOST/getpath.c.3.x\"\n    fi\n\n    run cp -p -T $PY_C_GETPATH \"$BUILDDIR_CORE/getpath.c\"\n    fail_panic \"Can't copy $PY_C_GETPATH to $BUILDDIR_CORE\"\n\n    run cp -p -T $PY_C_CONFIG_FILE \"$BUILDDIR_CORE/config.c\"\n    fail_panic \"Can't copy config.c to $BUILDDIR_CORE\"\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            run cp -p -t \"$BUILDDIR_CORE\" \\\n                \"$PYTHON_SRCDIR/PC/pyconfig.h\" \\\n                \"$PYTHON_SRCDIR/PC/errmap.h\" \\\n                \"$PYTHON_SRCDIR/Python/importdl.h\" \\\n                \"$PYTHON_SRCDIR/Python/dynload_win.c\" \\\n                \"$PYTHON_SRCDIR/Modules/posixmodule.c\"\n            fail_panic \"Can't copy pyconfig.h errmap.h importdl.h dynload_win.c posixmodule.c to $BUILDDIR_CORE\"\n            run patch \"$BUILDDIR_CORE/pyconfig.h\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/pyconfig.h.$PYTHON_ABI.mingw.patch\"\n            fail_panic \"Can't patch pyconfig.h\"\n            # fix CamelCase inclusions for windows.h and mstcpip.h\n            run find $MINGW_ROOT -name \"windows.h\" -exec ln -s {} \"$BUILDDIR_CORE/Windows.h\" \\;\n            fail_panic \"Can't create symlink for Windows.h\"\n            run find $MINGW_ROOT -name \"mstcpip.h\" -exec ln -s {} \"$BUILDDIR_CORE/MSTcpIP.h\" \\;\n            fail_panic \"Can't create symlink for mstcpip.h\"\n            if [ \"$PYTHON_ABI\" = \"3.5\" ]; then\n                if [ \"$PYTHON_MICRO_VERSION\" -lt \"2\" ]; then\n                    run patch \"$BUILDDIR_CORE/posixmodule.c\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/posixmodule.c.3.5.1.mingw.patch\"\n                    fail_panic \"Can't patch posixmodule.c\"\n                else\n                    run patch \"$BUILDDIR_CORE/posixmodule.c\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/posixmodule.c.3.5.x.mingw.patch\"\n                    fail_panic \"Can't patch posixmodule.c\"\n                fi\n            else\n                run patch \"$BUILDDIR_CORE/posixmodule.c\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/posixmodule.c.$PYTHON_ABI.mingw.patch\"\n                fail_panic \"Can't patch posixmodule.c\"\n            fi\n            run patch \"$BUILDDIR_CORE/dynload_win.c\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/dynload_win.c.$PYTHON_ABI.mingw.patch\"\n            fail_panic \"Can't patch dynload_win.c\"\n            ;;\n\n        darwin*)\n            run cp -p -t \"$BUILDDIR_CORE\" \"$PY_STUB_DIR/config/pyconfig.h\"\n            fail_panic \"Can't copy pyconfig.h to $BUILDDIR_CORE\"\n            ;;\n\n        linux*)\n            local BUILDDIR_CONFIG=\"$OBJ_DIR/config\"\n            run mkdir -p $BUILDDIR_CONFIG\n            fail_panic \"Can't create directory: $BUILDDIR_CONFIG\"\n            local CONFIG_SITE=\"$BUILDDIR_CONFIG/config.site\"\n            {\n                echo 'ac_cv_file__dev_ptmx=yes'\n                echo 'ac_cv_file__dev_ptc=no'\n            } >$CONFIG_SITE\n            fail_panic \"Can't create config.site wrapper: '$CONFIG_SITE'\"\n\n            local CONFIGURE_WRAPPER=$BUILDDIR_CONFIG/configure.sh\n            {\n                echo \"#!/bin/bash -e\"\n                echo ''\n                echo \"export CC=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-gcc\\\"\"\n                echo \"export CPP=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-gcc -E\\\"\"\n                echo \"export AR=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-ar\\\"\"\n                echo \"export RANLIB=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-ranlib\\\"\"\n                echo \"export READELF=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-readelf\\\"\"\n                echo \"export PYTHON_FOR_BUILD=\\\"$PYTHON_FOR_BUILD\\\"\"\n                echo \"export CONFIG_SITE=\\\"$CONFIG_SITE\\\"\"\n                echo ''\n                echo 'cd $(dirname $0)'\n                echo ''\n                if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n                    echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n                    echo \"    --host=$BH_HOST_CONFIG \\\\\"\n                    echo \"    --build=$BH_BUILD_CONFIG \\\\\"\n                    echo \"    --prefix=$BUILDDIR_CONFIG/install \\\\\"\n                    echo \"    --enable-shared \\\\\"\n                    echo \"    --with-threads \\\\\"\n                    echo \"    --enable-ipv6 \\\\\"\n                    echo \"    --enable-unicode=ucs4 \\\\\"\n                    echo \"    --without-ensurepip\"\n                else\n                    echo \"exec $PYTHON_SRCDIR/configure \\\\\"\n                    echo \"    --host=$BH_HOST_CONFIG \\\\\"\n                    echo \"    --build=$BH_BUILD_CONFIG \\\\\"\n                    echo \"    --prefix=$BUILDDIR_CONFIG/install \\\\\"\n                    echo \"    --enable-shared \\\\\"\n                    echo \"    --with-threads \\\\\"\n                    echo \"    --enable-ipv6 \\\\\"\n                    echo \"    --with-computed-gotos \\\\\"\n                    echo \"    --without-ensurepip\"\n                fi\n            } >$CONFIGURE_WRAPPER\n            fail_panic \"Can't create configure wrapper: '$CONFIGURE_WRAPPER'\"\n            run chmod +x $CONFIGURE_WRAPPER\n            fail_panic \"Can't chmod +x configure wrapper: '$CONFIGURE_WRAPPER'\"\n            log \"configure python-$PYTHON_ABI for $HOST_SYSTEM_TAG ...\"\n            run $CONFIGURE_WRAPPER\n            fail_panic \"Can't configure python-$PYTHON_ABI for $HOST_SYSTEM_TAG\"\n            run cp -p -t \"$BUILDDIR_CORE\" \"$BUILDDIR_CONFIG/pyconfig.h\"\n            fail_panic \"Can't copy pyconfig.h to $BUILDDIR_CORE\"\n            ;;\n        *)\n            panic \"Unknown platform: $HOST_SYSTEM_TAG\"\n            ;;\n    esac\n\n    log \"build python-$PYTHON_ABI core for $HOST_SYSTEM_TAG ...\"\n    run $CORE_BUILD_WRAPPER\n    fail_panic \"Can't build python-$PYTHON_ABI core for $HOST_SYSTEM_TAG\"\n\n    local PY_CORE_FNAME\n    local PY_CORE_LIB_FNAME\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            PY_CORE_FNAME=\"python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.dll\"\n            PY_CORE_LIB_FNAME=\"libpython${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.dll.a\"\n            ;;\n        *)\n            if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n                PY_CORE_FNAME=\"libpython${PYTHON_ABI}.so\"\n            else\n                PY_CORE_FNAME=\"libpython${PYTHON_ABI}m.so\"\n            fi\n            PY_CORE_LIB_FNAME=\"$PY_CORE_FNAME\"\n            ;;\n    esac\n    run cp -p -t \"$OUTPUT_DIR\" \"$BUILDDIR_CORE/build/$PY_CORE_FNAME\"\n    fail_panic \"Can't copy '$PY_CORE_FNAME' to '$OUTPUT_DIR'\"\n    run cp -p -t \"$PY_HOST_LINK_LIB_DIR\" \"$BUILDDIR_CORE/build/$PY_CORE_LIB_FNAME\"\n    fail_panic \"Can't copy '$PY_CORE_LIB_FNAME' to '$PY_HOST_LINK_LIB_DIR'\"\n    run cp -p -t \"$CONFIG_INCLUDE_DIR\" \"$BUILDDIR_CORE/pyconfig.h\"\n    fail_panic \"Can't copy '$BUILDDIR_CORE/pyconfig.h' to 'CONFIG_INCLUDE_DIR'\"\n\n# Step 4: build python interpreter for host\n    local BUILDDIR_INTERPRETER=\"$OBJ_DIR/interpreter\"\n\n    run mkdir -p $BUILDDIR_INTERPRETER\n    fail_panic \"Can't create directory: $BUILDDIR_INTERPRETER\"\n    local INTERPRETER_CMAKE_DESCRIPTION=\"$BUILDDIR_INTERPRETER/CMakeLists.txt\"\n    {\n        echo \"cmake_minimum_required (VERSION $CMAKE_MIN_VERSION)\"\n        echo 'set(CMAKE_BUILD_TYPE RELEASE)'\n        case $HOST_SYSTEM_TAG in\n            windows*)\n                if [ \"$PYTHON_MAJOR_VERSION\" = \"3\" ]; then\n                    echo 'set(CMAKE_EXE_LINKER_FLAGS \"-municode\")'\n                fi\n                ;;\n            *)\n                echo 'link_libraries(dl)'\n                ;;\n        esac\n        echo \"add_executable(python \\${CMAKE_CURRENT_LIST_DIR}/interpreter.c)\"\n        case $HOST_SYSTEM_TAG in\n            windows*)\n                echo \"set(CMAKE_C_FLAGS \\\"-DPYTHON_DSO_REL_PATH=L\\\\\\\\\\\\\\\"$PY_CORE_FNAME\\\\\\\\\\\\\\\"\\\")\"\n                ;;\n            *)\n                echo \"set(CMAKE_C_FLAGS \\\"-DPYTHON_DSO_REL_PATH=\\\\\\\\\\\\\\\"$PY_CORE_FNAME\\\\\\\\\\\\\\\"\\\")\"\n                ;;\n        esac\n    } >$INTERPRETER_CMAKE_DESCRIPTION\n    fail_panic \"Can't generate $INTERPRETER_CMAKE_DESCRIPTION\"\n\n    local INTERPRETER_BUILD_WRAPPER=\"$BUILDDIR_INTERPRETER/build.sh\"\n    generate_cmake_wrapper $INTERPRETER_BUILD_WRAPPER $CMAKE_TOOLCHAIN_DESCRIPTION\n\n    local INTERPRETER_SOURCE\n    local PY_INTERPRETER_FNAME\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n                INTERPRETER_SOURCE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-winapi.c.2.7\"\n            else\n                INTERPRETER_SOURCE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-winapi.c.3.x\"\n            fi\n            PY_INTERPRETER_FNAME=\"python.exe\"\n            ;;\n        *)\n            if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n                INTERPRETER_SOURCE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-posix.c.2.7\"\n            else\n                INTERPRETER_SOURCE=\"$PYTHON_BUILD_UTILS_DIR_HOST/interpreter-posix.c.3.x\"\n            fi\n            PY_INTERPRETER_FNAME=\"python\"\n            ;;\n    esac\n    run cp -p -T \"$INTERPRETER_SOURCE\" \"$BUILDDIR_INTERPRETER/interpreter.c\"\n    fail_panic \"Can't copy '$INTERPRETER_SOURCE' to '$BUILDDIR_INTERPRETER'\"\n\n    log \"build python-$PYTHON_ABI interpreter for $HOST_SYSTEM_TAG ...\"\n    run $INTERPRETER_BUILD_WRAPPER\n    fail_panic \"Can't build python-$PYTHON_ABI interpreter for $HOST_SYSTEM_TAG\"\n\n    run cp -p -t \"$OUTPUT_DIR\" \"$BUILDDIR_INTERPRETER/build/$PY_INTERPRETER_FNAME\"\n    fail_panic \"Can't copy '$PY_INTERPRETER_FNAME' to '$OUTPUT_DIR'\"\n\n# Step 5: build python stdlib for host\n    log \"build python-$PYTHON_ABI stdlib for $HOST_SYSTEM_TAG ...\"\n    local PY_STDLIB_ZIPFILE=\"$OUTPUT_DIR/python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.zip\"\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/build_stdlib.py --py2 --pysrc-root $PYTHON_SRCDIR --output-zip $PY_STDLIB_ZIPFILE\n        fail_panic \"Can't build python-$PYTHON_ABI stdlib for $HOST_SYSTEM_TAG\"\n    else\n        run $PYTHON_FOR_BUILD $PYTHON_BUILD_UTILS_DIR/build_stdlib.py --pysrc-root $PYTHON_SRCDIR --output-zip $PY_STDLIB_ZIPFILE\n        fail_panic \"Can't build python-$PYTHON_ABI stdlib for $HOST_SYSTEM_TAG\"\n    fi\n\n# Step 6: build python modules\n# _ctypes\n    local BUILDDIR_CTYPES=\"$OBJ_DIR/ctypes\"\n    local BUILDDIR_CTYPES_CONFIG=\"$BUILDDIR_CTYPES/config\"\n    local BUILDDIR_CTYPES_INC=\"$BUILDDIR_CTYPES/include\"\n    run mkdir -p $BUILDDIR_CTYPES_CONFIG\n    fail_panic \"Can't create directory: $BUILDDIR_CTYPES_CONFIG\"\n    run mkdir -p $BUILDDIR_CTYPES_INC\n    fail_panic \"Can't create directory: $BUILDDIR_CTYPES_INC\"\n    local LIBFFI_CONFIGURE_WRAPPER=\"$BUILDDIR_CTYPES_CONFIG/configure.sh\"\n    {\n        echo \"#!/bin/bash -e\"\n        echo ''\n        echo \"export CC=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-gcc\\\"\"\n        echo \"export CPP=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-gcc -E\\\"\"\n        echo \"export AR=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-ar\\\"\"\n        echo \"export RANLIB=\\\"$BH_BUILD_DIR/toolchain-wrappers/$TOOLCHAIN_WRAPPER_PREFIX-ranlib\\\"\"\n        echo ''\n        echo 'cd $(dirname $0)'\n        echo ''\n        echo \"exec $PYTHON_SRCDIR/Modules/_ctypes/libffi/configure \\\\\"\n        echo \"    --host=$BH_HOST_CONFIG \\\\\"\n        echo \"    --build=$BH_BUILD_CONFIG \\\\\"\n        echo \"    --prefix=$BUILDDIR_CTYPES_CONFIG/install \\\\\"\n    } >$LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't create configure wrapper for libffi: '$LIBFFI_CONFIGURE_WRAPPER'\"\n    chmod +x $LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't chmod +x configure wrapper for libffi\"\n    run $LIBFFI_CONFIGURE_WRAPPER\n    fail_panic \"Can't configure libffi for $HOST_SYSTEM_TAG\"\n    run cp -p $BUILDDIR_CTYPES_CONFIG/fficonfig.h $BUILDDIR_CTYPES_CONFIG/include/*.h $BUILDDIR_CTYPES_INC\n    fail_panic \"Can't copy configured libffi headers to '$BUILDDIR_CTYPES_INC'\"\n\n    local CTYPES_SRC_LIST\n    local CTYPES_INC_DIR_LIST=\"$CONFIG_INCLUDE_DIR,$BUILDDIR_CTYPES_INC\"\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            run cp -p -t \"$BUILDDIR_CTYPES\" \"$PYTHON_SRCDIR/Modules/_ctypes/callproc.c\"\n            fail_panic \"Can't copy callproc.c to '$BUILDDIR_CTYPES'\"\n            run patch \"$BUILDDIR_CTYPES/callproc.c\" < \"$PYTHON_BUILD_UTILS_DIR_HOST/callproc.c.$PYTHON_ABI.mingw.patch\"\n            fail_panic \"Can't patch callproc.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,$BUILDDIR_CTYPES/callproc.c\"\n            CTYPES_INC_DIR_LIST=\"$CTYPES_INC_DIR_LIST,Modules/_ctypes\"\n            ;;\n        *)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/callproc.c\"\n            ;;\n    esac\n\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/callbacks.c\"\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/cfield.c\"\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/malloc_closure.c\"\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/stgdict.c\"\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/_ctypes.c\"\n    CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/prep_cif.c\"\n\n    case $HOST_SYSTEM_TAG in\n        linux-x86_64)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi64.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/unix64.S\"\n            ;;\n        linux-x86)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/sysv.S\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/win32.S\"\n            ;;\n        darwin-x86_64)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi64.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/darwin64.S\"\n            ;;\n        darwin-x86)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/darwin.S\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/win32.S\"\n            ;;\n        windows-x86_64)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/win64.S\"\n            ;;\n        windows*)\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/ffi.c\"\n            CTYPES_SRC_LIST=\"$CTYPES_SRC_LIST,Modules/_ctypes/libffi/src/x86/win32.S\"\n            ;;\n    esac\n\n    build_python_module $HOST_SYSTEM_TAG '_ctypes' $CTYPES_SRC_LIST $BUILDDIR_CTYPES \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION $CTYPES_INC_DIR_LIST $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n\n# _multiprocessing\n    local MULTIPROCESSING_SRC_LIST\n    if [ \"$PYTHON_MAJOR_VERSION\" = \"2\" ]; then\n        MULTIPROCESSING_SRC_LIST=\"$MULTIPROCESSING_SRC_LIST,Modules/_multiprocessing/socket_connection.c\"\n        case $HOST_SYSTEM_TAG in\n            windows*)\n                MULTIPROCESSING_SRC_LIST=\"$MULTIPROCESSING_SRC_LIST,Modules/_multiprocessing/win32_functions.c\"\n                MULTIPROCESSING_SRC_LIST=\"$MULTIPROCESSING_SRC_LIST,Modules/_multiprocessing/pipe_connection.c\"\n            ;;\n        esac\n    fi\n    MULTIPROCESSING_SRC_LIST=\"$MULTIPROCESSING_SRC_LIST,Modules/_multiprocessing/multiprocessing.c\"\n    MULTIPROCESSING_SRC_LIST=\"$MULTIPROCESSING_SRC_LIST,Modules/_multiprocessing/semaphore.c\"\n\n    build_python_module $HOST_SYSTEM_TAG '_multiprocessing' $MULTIPROCESSING_SRC_LIST \"$OBJ_DIR/multiprocessing\" \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION $CONFIG_INCLUDE_DIR $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n\n# _socket\n    local BUILDDIR_SOCKET=\"$OBJ_DIR/socket\"\n    run mkdir -p $BUILDDIR_SOCKET\n    fail_panic \"Can't create directory: $BUILDDIR_SOCKET\"\n    local SOCKET_INC_DIR_LIST=\"$CONFIG_INCLUDE_DIR\"\n    case $HOST_SYSTEM_TAG in\n        windows*)\n            SOCKET_INC_DIR_LIST=\"$SOCKET_INC_DIR_LIST,$BUILDDIR_SOCKET\"\n            # fix CamelCase inclusions for mstcpip.h\n            run find $MINGW_ROOT -name \"mstcpip.h\" -exec ln -s {} \"$BUILDDIR_SOCKET/MSTcpIP.h\" \\;\n            fail_panic \"Can't create symlink for mstcpip.h\"\n        ;;\n    esac\n\n    build_python_module $HOST_SYSTEM_TAG '_socket' 'Modules/socketmodule.c' \"$BUILDDIR_SOCKET\" \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION $SOCKET_INC_DIR_LIST $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n\n# pyexpat\n    local PYEXPAT_SRC_LIST\n    PYEXPAT_SRC_LIST=\"$PYEXPAT_SRC_LIST,Modules/expat/xmlparse.c\"\n    PYEXPAT_SRC_LIST=\"$PYEXPAT_SRC_LIST,Modules/expat/xmlrole.c\"\n    PYEXPAT_SRC_LIST=\"$PYEXPAT_SRC_LIST,Modules/expat/xmltok.c\"\n    PYEXPAT_SRC_LIST=\"$PYEXPAT_SRC_LIST,Modules/pyexpat.c\"\n\n    build_python_module $HOST_SYSTEM_TAG 'pyexpat' $PYEXPAT_SRC_LIST \"$OBJ_DIR/pyexpat\" \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION \"$CONFIG_INCLUDE_DIR,Modules/expat\" $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n\n# select\n    build_python_module $HOST_SYSTEM_TAG 'select' 'Modules/selectmodule.c' \"$OBJ_DIR/select\" \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION $CONFIG_INCLUDE_DIR $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n\n# unicodedata\n    build_python_module $HOST_SYSTEM_TAG 'unicodedata' 'Modules/unicodedata.c' \"$OBJ_DIR/unicodedata\" \\\n        $CMAKE_TOOLCHAIN_DESCRIPTION $CONFIG_INCLUDE_DIR $PY_HOST_LINK_LIB_DIR $OUTPUT_DIR\n}\n\n# $1: host tag\nneed_build_host_python ()\n{\n    bh_stamps_do \"build-vendor-host-python$PYTHON_ABI-$1\" build_host_python $1\n}\n\n# Install host Python binaries and support files to the NDK install dir.\n# $1: host tag\ninstall_host_python ()\n{\n    need_build_host_python $1\n\n    local SRCDIR=\"$(python_build_install_dir $1)\"\n    local DSTDIR=\"$NDK_DIR/$(python_ndk_install_dir $1)\"\n\n    log \"$(bh_host_text) python-$PYTHON_ABI: Installing\"\n    run copy_directory \"$SRCDIR/opt/python$PYTHON_ABI\" \"$DSTDIR/opt/python$PYTHON_ABI\"\n}\n\n# $1: host tag\nneed_install_host_python ()\n{\n    bh_stamps_do \"install-vendor-host-python$PYTHON_ABI-$1\" install_host_python $1\n}\n\n# Package host Python binaries into a tarball\n# $1: host tag\npackage_host_python ()\n{\n    need_install_host_python $1\n\n    local PACKAGENAME=\"ndk-vendor-host-python$PYTHON_ABI-$(install_dir_from_host_tag $SYSTEM).tar.xz\"\n    local PACKAGE=\"$PACKAGE_DIR/$PACKAGENAME\"\n\n    local BLDDIR=\"$(python_build_install_dir $1)\"\n    local SRCDIR=\"$(python_ndk_install_dir $1)\"\n    # This is similar to BLDDIR=${BLDDIR%%$SRCDIR} (and requires we use windows and not windows-x86)\n    BLDDIR=$(echo \"$BLDDIR\" | sed \"s/$(echo \"$SRCDIR\" | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\//\\\\\\//g' -e 's/&/\\\\\\&/g')//g\")\n\n    log \"$(bh_host_text) $PACKAGENAME: Packaging\"\n    run pack_archive \"$PACKAGE\" \"$BLDDIR\" \"$SRCDIR\"\n    log \"$(bh_host_text) $PACKAGENAME: Caching\"\n    run cache_package \"$PACKAGE_DIR\" \"$PACKAGENAME\"\n}\n\n# $1: host tag\nneed_package_host_python ()\n{\n    bh_stamps_do \"package-vendor-host-python$PYTHON_ABI-$1\" package_host_python $1\n}\n\n# Check for cached packages\nNOT_CACHED_SYSTEMS=\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    PACKAGENAME=\"ndk-vendor-host-python$PYTHON_ABI-$(install_dir_from_host_tag $SYSTEM).tar.xz\"\n    echo \"Look for: $PACKAGENAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGENAME\" no_exit\n    if [ $? != 0 ]; then\n        if [ -z $NOT_CACHED_SYSTEMS ] ; then\n            NOT_CACHED_SYSTEMS=$SYSTEM\n        else\n            NOT_CACHED_SYSTEMS=\"$NOT_CACHED_SYSTEMS $SYSTEM\"\n        fi\n    fi\ndone\n\nif [ -z \"$NOT_CACHED_SYSTEMS\" ]; then\n    log \"For all systems were found cached packages.\"\n    exit 0\nelse\n    log \"Not cached systems: $NOT_CACHED_SYSTEMS\"\n    BH_HOST_SYSTEMS=$NOT_CACHED_SYSTEMS\nfi\n\n# Let's build this\nfor SYSTEM in $BH_HOST_SYSTEMS; do\n    bh_setup_build_for_host $SYSTEM\n    need_install_host_python $SYSTEM\ndone\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    for SYSTEM in $BH_HOST_SYSTEMS; do\n        bh_setup_build_for_host $SYSTEM\n        need_package_host_python $SYSTEM\n    done\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/builder-funcs.sh",
    "content": "#\n# Copyright (C) 2011, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This file contains various shell function definitions that can be\n#  used to either build a static and shared libraries from sources, or\n#  generate a Makefile to do it in parallel.\n#\n\n_BUILD_TAB=$(echo \" \" | tr ' ' '\\t')\n\nbuilder_command ()\n{\n    if [ -z \"$_BUILD_MK\" ]; then\n        echo \"$@\"\n        \"$@\"\n    else\n        echo \"${_BUILD_TAB}$@\" >> $_BUILD_MK\n    fi\n}\n\n\nbuilder_log ()\n{\n    if [ \"$_BUILD_MK\" ]; then\n        echo \"${_BUILD_TAB}echo $@\" >> $_BUILD_MK\n    else\n        log \"$@\"\n    fi\n}\n\n# $1: Build directory\n# $2: Optional Makefile name\nbuilder_begin ()\n{\n    _BUILD_DIR_NEW=\n    _BUILD_DIR=$1\n    if [ ! -d \"$_BUILD_DIR\" ]; then\n        mkdir -p \"$_BUILD_DIR\"\n        fail_panic \"Can't create build directory: $_BUILD_DIR\"\n        _BUILD_DIR_NEW=true\n    else\n        rm -rf \"$_BUILD_DIR/*\"\n        fail_panic \"Can't cleanup build directory: $_BUILD_DIR\"\n    fi\n    _BUILD_TARGETS=\n    _BUILD_PREFIX=\n    _BUILD_MK=$2\n    if [ -n \"$_BUILD_MK\" ]; then\n        log \"Creating temporary build Makefile: $_BUILD_MK\"\n        rm -f $_BUILD_MK &&\n        echo \"# Auto-generated by $0 - do not edit!\" > $_BUILD_MK\n        echo \".PHONY: all\" >> $_BUILD_MK\n        echo \"all:\" >> $_BUILD_MK\n    fi\n\n    builder_begin_module\n}\n\n# $1: Variable name\n# out: Variable value\n_builder_varval ()\n{\n    eval echo \"\\$$1\"\n}\n\n_builder_varadd ()\n{\n    local _varname=\"$1\"\n    local _varval=\"$(_builder_varval $_varname)\"\n    shift\n    if [ -z \"$_varval\" ]; then\n        eval $_varname=\\\"$@\\\"\n    else\n        eval $_varname=\\$$_varname\\\" $@\\\"\n    fi\n}\n\n\nbuilder_set_prefix ()\n{\n    _BUILD_PREFIX=\"$@\"\n}\n\nbuilder_begin_module ()\n{\n    _BUILD_CC=\n    _BUILD_CXX=\n    _BUILD_AR=\n    _BUILD_C_INCLUDES=\n    _BUILD_CFLAGS=\n    _BUILD_CXXFLAGS=\n    _BUILD_CRYSTAX_LIBDIR=\n    _BUILD_LDFLAGS_BEGIN_SO=\n    _BUILD_LDFLAGS_END_SO=\n    _BUILD_LDFLAGS_BEGIN_EXE=\n    _BUILD_LDFLAGS_END_EXE=\n    _BUILD_LDFLAGS=\n    _BUILD_BINPREFIX=\n    _BUILD_DSTDIR=\n    _BUILD_SRCDIR=.\n    _BUILD_OBJECTS=\n    _BUILD_STATIC_LIBRARIES=\n    _BUILD_SHARED_LIBRARIES=\n    _BUILD_COMPILER_RUNTIME_LDFLAGS=-lgcc\n}\n\nbuilder_set_binprefix ()\n{\n    _BUILD_BINPREFIX=$1\n    _BUILD_CC=${1}gcc\n    _BUILD_CXX=${1}g++\n    _BUILD_AR=${1}ar\n}\n\nbuilder_set_binprefix_llvm ()\n{\n    _BUILD_BINPREFIX=$1\n    _BUILD_CC=${1}/clang\n    _BUILD_CXX=${1}/clang++\n    _BUILD_AR=${2}ar\n}\n\nbuilder_set_builddir ()\n{\n    _BUILD_DIR=$1\n}\n\nbuilder_set_srcdir ()\n{\n    _BUILD_SRCDIR=$1\n}\n\nbuilder_set_dstdir ()\n{\n    _BUILD_DSTDIR=$1\n}\n\nbuilder_ldflags ()\n{\n    _builder_varadd _BUILD_LDFLAGS \"$@\"\n}\n\nbuilder_ldflags_exe ()\n{\n    _builder_varadd _BUILD_LDFLAGS_EXE \"$@\"\n}\n\nbuilder_cflags ()\n{\n    _builder_varadd _BUILD_CFLAGS \"$@\"\n}\n\nbuilder_cxxflags ()\n{\n    _builder_varadd _BUILD_CXXFLAGS \"$@\"\n}\n\nbuilder_c_includes ()\n{\n    _builder_varadd _BUILD_C_INCLUDES \"$@\"\n}\n\n# $1: optional var to hold the original cflags before reset\nbuilder_reset_cflags ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_CFLAGS\\\"\n    fi\n    _BUILD_CFLAGS=\n}\n\n# $1: optional var to hold the original cxxflags before reset\nbuilder_reset_cxxflags ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_CXXFLAGS\\\"\n    fi\n    _BUILD_CXXFLAGS=\n}\n\n# $1: optional var to hold the original c_includes before reset\nbuilder_reset_c_includes ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_C_INCLUDES\\\"\n    fi\n    _BUILD_C_INCLUDES=\n}\n\nbuilder_compiler_runtime_ldflags ()\n{\n    _BUILD_COMPILER_RUNTIME_LDFLAGS=$1\n}\n\nbuilder_link_with ()\n{\n    local LIB\n    for LIB; do\n        case $LIB in\n            *.a)\n                _builder_varadd _BUILD_STATIC_LIBRARIES $LIB\n                ;;\n            *.so)\n                _builder_varadd _BUILD_SHARED_LIBRARIES $LIB\n                ;;\n            *)\n                echo \"ERROR: Unknown link library extension: $LIB\"\n                exit 1\n        esac\n    done\n}\n\nbuilder_sources ()\n{\n    local src srcfull obj cc cflags text\n    if [ -z \"$_BUILD_DIR\" ]; then\n        panic \"Build directory not set!\"\n    fi\n    if [ -z \"$_BUILD_CC\" ]; then\n        _BUILD_CC=${CC:-gcc}\n    fi\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n    for src in \"$@\"; do\n        srcfull=$_BUILD_SRCDIR/$src\n        if [ ! -f \"$srcfull\" ]; then\n            echo \"ERROR: Missing source file: $srcfull\"\n            exit 1\n        fi\n        obj=$src\n        cflags=\"\"\n        for inc in $_BUILD_C_INCLUDES; do\n            cflags=$cflags\" -I$inc\"\n        done\n        cflags=$cflags\" -I$_BUILD_SRCDIR\"\n        case $obj in\n            *.c)\n                obj=${obj%%.c}\n                text=\"C\"\n                cc=$_BUILD_CC\n                cflags=\"$cflags $_BUILD_CFLAGS\"\n                ;;\n            *.cpp)\n                obj=${obj%%.cpp}\n                text=\"C++\"\n                cc=$_BUILD_CXX\n                cflags=\"$cflags $_BUILD_CXXFLAGS\"\n                ;;\n            *.cc)\n                obj=${obj%%.cc}\n                text=\"C++\"\n                cc=$_BUILD_CXX\n                cflags=\"$cflags $_BUILD_CXXFLAGS\"\n                ;;\n            *.S|*.s)\n                obj=${obj%%.$obj}\n                text=\"ASM\"\n                cc=$_BUILD_CC\n                cflags=\"$cflags $_BUILD_CFLAGS\"\n                ;;\n            *)\n                echo \"Unknown source file extension: $obj\"\n                exit 1\n                ;;\n        esac\n\n        # Source file path can include ../ path items, ensure\n        # that the generated object do not back up the output\n        # directory by translating them to __/\n        obj=$(echo \"$obj\" | tr '../' '__/')\n\n        # Ensure we have unwind tables in the generated machine code\n        # This is useful to get good stack traces\n        cflags=$cflags\" -funwind-tables\"\n\n        obj=$_BUILD_DIR/$obj.o\n        if [ \"$_BUILD_MK\" ]; then\n            echo \"$obj: $srcfull\" >> $_BUILD_MK\n        fi\n        builder_log \"${_BUILD_PREFIX}$text: $src\"\n        builder_command mkdir -p $(dirname \"$obj\")\n        builder_command $NDK_CCACHE $cc -c -o \"$obj\" \"$srcfull\" $cflags\n        fail_panic \"Could not compile ${_BUILD_PREFIX}$src\"\n        _BUILD_OBJECTS=$_BUILD_OBJECTS\" $obj\"\n    done\n}\n\nbuilder_static_library ()\n{\n    local lib libname arflags\n    libname=$1\n    if [ -z \"$_BUILD_DSTDIR\" ]; then\n        panic \"Destination directory not set\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.a}.a\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    if [ -z \"${_BUILD_AR}\" ]; then\n        _BUILD_AR=${AR:-ar}\n    fi\n    builder_log \"${_BUILD_PREFIX}Archive: $libname\"\n    rm -f \"$lib\"\n    arflags=\"crs\"\n    case $HOST_TAG in\n        darwin*)\n            # XCode 'ar' doesn't support D flag\n            ;;\n        *)\n            arflags=\"${arflags}D\"\n            ;;\n    esac\n    builder_command ${_BUILD_AR} $arflags \"$lib\" \"$_BUILD_OBJECTS\"\n    fail_panic \"Could not archive ${_BUILD_PREFIX}$libname objects!\"\n}\n\nbuilder_host_static_library ()\n{\n    local lib libname\n    libname=$1\n    if [ -z \"$_BUILD_DSTDIR\" ]; then\n        panic \"Destination directory not set\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.a}.a\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    if [ -z \"$BUILD_AR\" ]; then\n        _BUILD_AR=${AR:-ar}\n    fi\n    builder_log \"${_BUILD_PREFIX}Archive: $libname\"\n    rm -f \"$lib\"\n    builder_command ${_BUILD_AR} crsD \"$lib\" \"$_BUILD_OBJECTS\"\n    fail_panic \"Could not archive ${_BUILD_PREFIX}$libname objects!\"\n}\n\nbuilder_shared_library ()\n{\n    local lib libname suffix libm\n    libname=$1\n    suffix=$2\n    armeabi_v7a_float_abi=$3\n\n    if [ -z \"$suffix\" ]; then\n        suffix=\".so\"\n    fi\n    libm=\"-lm\"\n    if [ \"$armeabi_v7a_float_abi\" = \"hard\" ]; then\n        libm=\"-lm_hard\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%${suffix}}${suffix}\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    #            Also $libm must come before -lc because bionic libc\n    #            accidentally exports a soft-float version of ldexp.\n    builder_command ${_BUILD_CXX} \\\n        -Wl,-soname,$(basename $lib) \\\n        -Wl,-shared \\\n        $_BUILD_LDFLAGS_BEGIN_SO \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_COMPILER_RUNTIME_LDFLAGS \\\n        $_BUILD_SHARED_LIBRARIES \\\n        -L$_BUILD_CRYSTAX_LIBDIR -lcrystax \\\n        $libm -lc \\\n        $_BUILD_LDFLAGS \\\n        $_BUILD_LDFLAGS_END_SO \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\n# Same as builder_shared_library, but do not link the default libs\nbuilder_nostdlib_shared_library ()\n{\n    local lib libname suffix\n    libname=$1\n    suffix=$2\n    if [ -z \"$suffix\" ]; then\n        suffix=\".so\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%${suffix}}${suffix}\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    builder_command ${_BUILD_CXX} \\\n        -Wl,-soname,$(basename $lib) \\\n        -Wl,-shared \\\n        $_BUILD_LDFLAGS_BEGIN_SO \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        $_BUILD_LDFLAGS_END_SO \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\nbuilder_host_shared_library ()\n{\n    local lib libname\n    libname=$1\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.so}.so\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    builder_command ${_BUILD_CXX} \\\n        -shared -s \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\nbuilder_host_executable ()\n{\n    local exe exename\n    exename=$1\n    exe=$_BUILD_DSTDIR/$exename$HOST_EXE\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $exe\"\n        echo \"$exe: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}Executable: $exename$HOST_EXE\"\n\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    builder_command ${_BUILD_CXX} \\\n        -s \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        -o $exe\n    fail_panic \"Could not create ${_BUILD_PREFIX}executable $libname\"\n}\n\n\nbuilder_end ()\n{\n    if [ \"$_BUILD_MK\" ]; then\n        echo \"all: $_BUILD_TARGETS\" >> $_BUILD_MK\n        run make -j$NUM_JOBS -f $_BUILD_MK\n        fail_panic \"Could not build project!\"\n    fi\n\n    if [ \"$_BUILD_DIR_NEW\" ]; then\n        log \"Cleaning up build directory: $_BUILD_DIR\"\n        rm -rf \"$_BUILD_DIR\"\n        _BUILD_DIR_NEW=\n    fi\n}\n\n# Same as builder_begin, but to target Android with a specific ABI\n# $1: ABI name (e.g. armeabi)\n# $2: Build directory\n# $3: Gcc version\n# $4: Optional llvm version\n# $5: Optional Makefile name\n# $6: Platform (android-X)\nbuilder_begin_android ()\n{\n    local ABI BUILDDIR LLVM_VERSION MAKEFILE\n    local ARCH SYSROOT LDIR FLAGS\n    local CRTBEGIN_SO_O CRTEND_SO_O CRTBEGIN_EXE_SO CRTEND_SO_O\n    local BINPREFIX GCC_TOOLCHAIN LLVM_TRIPLE GCC_VERSION\n    local SCRATCH_FLAGS PLATFORM\n    local CRYSTAX_SRCDIR\n    if [ -z \"$NDK_DIR\" ]; then\n        panic \"NDK_DIR is not defined!\"\n    elif [ ! -d \"$NDK_DIR/platforms\" ]; then\n        panic \"Missing directory: $NDK_DIR/platforms\"\n    fi\n    ABI=$1\n    BUILDDIR=$2\n    GCC_VERSION=$3\n    LLVM_VERSION=$4\n    MAKEFILE=$5\n    ARCH=$(convert_abi_to_arch $ABI)\n    PLATFORM=$6\n\n    if [ -n \"$LLVM_VERSION\" ]; then\n        # override GCC_VERSION to pick $DEFAULT_LLVM_GCC??_VERSION instead\n        if [ \"$ABI\" != \"${ABI%%64*}\" ]; then\n            GCC_VERSION=$DEFAULT_LLVM_GCC64_VERSION\n        else\n            GCC_VERSION=$DEFAULT_LLVM_GCC32_VERSION\n        fi\n    fi\n    for TAG in $HOST_TAG $HOST_TAG32; do\n        BINPREFIX=$NDK_DIR/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\n        if [ -f ${BINPREFIX}gcc ]; then\n            break;\n        fi\n    done\n    if [ -n \"$LLVM_VERSION\" ]; then\n        GCC_TOOLCHAIN=`dirname $BINPREFIX`\n        GCC_TOOLCHAIN=`dirname $GCC_TOOLCHAIN`\n        GCC_BINPREFIX=$BINPREFIX\n        BINPREFIX=$(get_llvm_toolchain_binprefix $LLVM_VERSION $TAG)\n    fi\n\n    if [ -z \"$PLATFORM\" ]; then\n      SYSROOT=$NDK_DIR/$(get_default_platform_sysroot_for_arch $ARCH)\n    else\n      SYSROOT=$NDK_DIR/platforms/$PLATFORM/arch-$ARCH\n    fi\n    LDIR=$SYSROOT\"/usr/\"$(get_default_libdir_for_abi $ABI)\n\n    CRTBEGIN_EXE_O=$LDIR/crtbegin_dynamic.o\n    CRTEND_EXE_O=$LDIR/crtend_android.o\n\n    CRTBEGIN_SO_O=$LDIR/crtbegin_so.o\n    CRTEND_SO_O=$LDIR/crtend_so.o\n    if [ ! -f \"$CRTBEGIN_SO_O\" ]; then\n        CRTBEGIN_SO_O=$CRTBEGIN_EXE_O\n    fi\n    if [ ! -f \"$CRTEND_SO_O\" ]; then\n        CRTEND_SO_O=$CRTEND_EXE_O\n    fi\n\n    builder_begin \"$BUILDDIR\" \"$MAKEFILE\"\n    builder_set_prefix \"$ABI \"\n    if [ -z \"$LLVM_VERSION\" ]; then\n        builder_set_binprefix \"$BINPREFIX\"\n    else\n        builder_set_binprefix_llvm \"$BINPREFIX\" \"$GCC_BINPREFIX\"\n        case $ABI in\n            armeabi)\n                LLVM_TRIPLE=armv5te-none-linux-androideabi\n                ;;\n            armeabi-v7a|armeabi-v7a-hard)\n                LLVM_TRIPLE=armv7-none-linux-androideabi\n                ;;\n            arm64-v8a)\n                LLVM_TRIPLE=aarch64-none-linux-android\n                ;;\n            x86)\n                LLVM_TRIPLE=i686-none-linux-android\n                ;;\n            x86_64)\n                LLVM_TRIPLE=x86_64-none-linux-android\n                ;;\n            mips|mips32r6)\n                LLVM_TRIPLE=mipsel-none-linux-android\n                ;;\n            mips64)\n                LLVM_TRIPLE=mips64el-none-linux-android\n                ;;\n        esac\n        SCRATCH_FLAGS=\"-target $LLVM_TRIPLE $FLAGS\"\n        builder_ldflags \"$SCRATCH_FLAGS\"\n        if [ \"$LLVM_VERSION\" \\> \"3.4\" ]; then\n            # Turn off integrated-as for clang >= 3.5 due to ill-formed object it produces\n            # involving inline-assembly .pushsection/.popsection which crashes ld.gold\n            # BUG=18589643\n            SCRATCH_FLAGS=\"$SCRATCH_FLAGS -fno-integrated-as\"\n        fi\n        builder_cflags  \"$SCRATCH_FLAGS\"\n        builder_cxxflags \"$SCRATCH_FLAGS\"\n        if [ ! -z $GCC_TOOLCHAIN ]; then\n            SCRATCH_FLAGS=\"-gcc-toolchain $GCC_TOOLCHAIN\"\n            builder_cflags \"$SCRATCH_FLAGS\"\n            builder_cxxflags \"$SCRATCH_FLAGS\"\n            builder_ldflags \"$SCRATCH_FLAGS\"\n        fi\n    fi\n\n    SCRATCH_FLAGS=\"--sysroot=$SYSROOT\"\n    builder_cflags \"$SCRATCH_FLAGS\"\n    builder_cxxflags \"$SCRATCH_FLAGS\"\n\n    SCRATCH_FLAGS=\"--sysroot=$SYSROOT -nostdlib\"\n    _BUILD_LDFLAGS_BEGIN_SO=\"$SCRATCH_FLAGS $CRTBEGIN_SO_O\"\n    _BUILD_LDFLAGS_BEGIN_EXE=\"$SCRATCH_FLAGS $CRTBEGIN_EXE_O\"\n\n    _BUILD_LDFLAGS_END_SO=\"$CRTEND_SO_O\"\n    _BUILD_LDFLAGS_END_EXE=\"$CRTEND_EXE_O\"\n\n    CRYSTAX_SRCDIR=\"$NDK_DIR/$CRYSTAX_SUBDIR\"\n    _BUILD_CRYSTAX_LIBDIR=\"$CRYSTAX_SRCDIR/\"`$CRYSTAX_SRCDIR/bin/config --libpath --abi=$ABI`\n\n    case $ABI in\n        armeabi)\n            if [ -z \"$LLVM_VERSION\" ]; then\n                # add -minline-thumb1-jumptable such that gabi++/stlport/libc++ can be linked\n                # with compiler-rt where helpers __gnu_thumb1_case_* (in libgcc.a) don't exist\n                SCRATCH_FLAGS=\"-minline-thumb1-jumptable\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n            else\n                builder_cflags \"\"\n                builder_cxxflags \"\"\n            fi\n            ;;\n        armeabi-v7a|armeabi-v7a-hard)\n            SCRATCH_FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16\"\n            builder_cflags \"$SCRATCH_FLAGS\"\n            builder_cxxflags \"$SCRATCH_FLAGS\"\n            builder_ldflags \"-march=armv7-a -Wl,--fix-cortex-a8\"\n            if [ \"$ABI\" != \"armeabi-v7a-hard\" ]; then\n                SCRATCH_FLAGS=\"-mfloat-abi=softfp\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n            else\n                SCRATCH_FLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n                builder_ldflags \"-Wl,--no-warn-mismatch -lm_hard\"\n            fi\n            ;;\n    esac\n}\n\n# $1: Build directory\n# $2: Optional Makefile name\nbuilder_begin_host ()\n{\n    prepare_host_build\n    builder_begin \"$1\" \"$2\"\n    builder_set_prefix \"$HOST_TAG \"\n}\n"
  },
  {
    "path": "build/instruments/check-glibc.sh",
    "content": "#!/bin/sh\n\n# Check if ELF depends on GLIBC/GLIBCXX symbols known to be absent from\n# libc.so in server\n\n# ToDo: GLBICXX too broad (essencially ask app statically link libstdc++).\n#       Only need to check GLIBCXX_3.4.9 .. GLIBCXX_3.4.18\n\nVERBOSE=\nFOUND=\n\ncheck_sym()\n{\n    local OUT=$1\n    local PASS=$2\n    local SYMBOLS=\"\\\n futimens@GLIBC_2.6\\\n GLIBC_2.7\\\n GLIBC_2.11\\\n GLIBCXX\\\n\"\n    if [ \"$PASS\" = \"1\" ]; then\n        for sym in $SYMBOLS; do\n            echo \"$OUT\" | grep -q $sym\n            if [ $? = 0 ]; then\n                FOUND=yes\n                return 0\n            fi\n        done\n        return 1\n    else\n        for sym in $SYMBOLS; do\n            echo \"$OUT\" | grep $sym\n        done\n    fi\n}\n\ncheck_file()\n{\n    local FILE=\"$1\"\n    local OUT=`readelf -aW \"$FILE\" | grep GLIBC`\n    check_sym \"$OUT\" 1\n    if [ $? = 0 ]; then\n        echo $FILE\n        check_sym \"$OUT\" 2\n    elif [ \"$VERBOSE\" = \"yes\" ]; then\n        echo $FILE\n    fi\n}\n\ncheck_dir()\n{\n    local DIR=\"$1\"\n    local FILES=`find \"$DIR\" -type f`\n    for f in $FILES; do\n        file $f | grep -q ELF\n        if [ $? = 0 ]; then\n            check_file $f\n        fi\n    done\n}\n\nARG=\"$1\"\nif [ \"$ARG\" = \"-v\" ]; then\n    ARG=\"$2\"\n    VERBOSE=yes\nfi\n\nif [ -f \"$ARG\" ]; then\n    check_file $ARG\nelif [ -d \"$ARG\" ]; then\n    check_dir $ARG\nelse\n    echo \"Usage: check-glibc.sh [file|dir]\"\n    echo \"$ARG is neither file nor dir\"\n    exit 1\nfi\n\nif [ \"$FOUND\" = \"yes\" ]; then\n    exit 1\nelse\n    exit 0\nfi"
  },
  {
    "path": "build/instruments/cleanup-apps.sh",
    "content": "#!/bin/bash\n#\n# This is used to cleanup the project directories before making a commit or\n# a clean release. This will get rid of auto-generated files in the\n# apps/<name>/project directories.\n#\nfor projectPath in `find apps/*/project` ; do\n    rm -rf $projectPath/bin\n    rm -rf $projectPath/gen\n    rm -f  $projectPath/build.xml\n    rm -f  $projectPath/local.properties\ndone\n"
  },
  {
    "path": "build/instruments/common-build-host-funcs.sh",
    "content": "# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# A set of function shared by the 'build-host-xxxx.sh' scripts.\n# They are mostly related to building host libraries.\n#\n# NOTE: This script uses various prefixes:\n#\n#    BH_       Used for public macros\n#    bh_       Use for public functions\n#\n#    _BH_      Used for private macros\n#    _bh_      Used for private functions\n#\n# Callers should only rely on the public macros and functions defined here.\n#\n\n# List of macros defined by the functions here:\n#\n#   defined by 'bh_set_build_tag'\n#\n#   BH_BUILD_CONFIG     Generic GNU config triplet for build system\n#   BH_BUILD_OS         NDK system name\n#   BH_BUILD_ARCH       NDK arch name\n#   BH_BUILD_TAG        NDK system tag ($OS-$ARCH)\n#   BH_BUILD_BITS       build system bitness (32 or 64)\n#\n#   defined by 'bh_set_host_tag'\n#                          7\n#   BH_HOST_CONFIG\n#   BH_HOST_OS\n#   BH_HOST_ARCH\n#   BH_HOST_TAG\n#   BH_HOST_BITS\n#\n#   defined by 'bh_set_target_tag'\n#\n#   BH_TARGET_CONFIG\n#   BH_TARGET_OS\n#   BH_TARGET_ARCH\n#   BH_TARGET_TAG\n#   BH_TARGET_BITS\n#\n#\n\n\n# The values of HOST_OS/ARCH/TAG will be redefined during the build to\n# match those of the system the generated compiler binaries will run on.\n#\n# Save the original ones into BUILD_XXX variants, corresponding to the\n# machine where the build happens.\n#\nBH_BUILD_OS=$HOST_OS\nBH_BUILD_ARCH=$HOST_ARCH\nBH_BUILD_TAG=$HOST_TAG\n\n# Map an NDK system tag to an OS name\n# $1: system tag (e.g. linux-x86)\n# Out: system name (e.g. linux)\nbh_tag_to_os ()\n{\n    local RET\n    case $1 in\n        android-*) RET=\"android\";;\n        linux-*) RET=\"linux\";;\n        darwin-*) RET=\"darwin\";;\n        windows|windows-*) RET=\"windows\";;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to an architecture name\n# $1: system tag (e.g. linux-x86)\n# Out: arch name (e.g. x86)\nbh_tag_to_arch ()\n{\n    local RET\n    case $1 in\n        *-arm) RET=arm;;\n        *-mips) RET=mips;;\n        windows|*-x86) RET=x86;;\n        *-x86_64) RET=x86_64;;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to a bit number\n# $1: system tag (e.g. linux-x86)\n# Out: bit number (32 or 64)\nbh_tag_to_bits ()\n{\n    local RET\n    case $1 in\n        windows|*-x86|*-arm|*-mips) RET=32;;\n        *-x86_64) RET=64;;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to the corresponding GNU configuration triplet.\n# $1: NDK system tag\n# Out: GNU configuration triplet\nbh_tag_to_config_triplet ()\n{\n    local RET\n    case $1 in\n        linux-x86) RET=i686-linux-gnu;;\n        linux-x86_64) RET=x86_64-linux-gnu;;\n        darwin-x86) RET=i686-apple-darwin;;\n        darwin-x86_64) RET=x86_64-apple-darwin;;\n        windows|windows-x86) RET=i586-pc-mingw32msvc;;\n        windows-x86_64) RET=x86_64-w64-mingw32;;\n        android-arm) RET=arm-linux-androideabi;;\n        android-x86) RET=i686-linux-android;;\n        android-mips) RET=mipsel-linux-android;;\n    esac\n    echo \"$RET\"\n}\n\n\nbh_set_build_tag ()\n{\n  BH_BUILD_OS=$(bh_tag_to_os $1)\n  BH_BUILD_ARCH=$(bh_tag_to_arch $1)\n  BH_BUILD_BITS=$(bh_tag_to_bits $1)\n  BH_BUILD_TAG=$BH_BUILD_OS-$BH_BUILD_ARCH\n  BH_BUILD_CONFIG=$(bh_tag_to_config_triplet $1)\n}\n\n# Set default BH_BUILD macros.\nbh_set_build_tag $HOST_TAG\n\nbh_set_host_tag ()\n{\n  BH_HOST_OS=$(bh_tag_to_os $1)\n  BH_HOST_ARCH=$(bh_tag_to_arch $1)\n  BH_HOST_BITS=$(bh_tag_to_bits $1)\n  BH_HOST_TAG=$BH_HOST_OS-$BH_HOST_ARCH\n  BH_HOST_CONFIG=$(bh_tag_to_config_triplet $1)\n}\n\nbh_set_target_tag ()\n{\n  BH_TARGET_OS=$(bh_tag_to_os $1)\n  BH_TARGET_ARCH=$(bh_tag_to_arch $1)\n  BH_TARGET_BITS=$(bh_tag_to_bits $1)\n  BH_TARGET_TAG=$BH_TARGET_OS-$BH_TARGET_ARCH\n  BH_TARGET_CONFIG=$(bh_tag_to_config_triplet $1)\n}\n\nbh_sort_systems_build_first ()\n{\n  local IN_SYSTEMS=\"$1\"\n  local OUT_SYSTEMS\n  # Pull out the host if there\n  for IN_SYSTEM in $IN_SYSTEMS; do\n    if [ \"$IN_SYSTEM\" = \"$BH_BUILD_TAG\" ]; then\n        OUT_SYSTEMS=$IN_SYSTEM\n    fi\n  done\n  # Append the rest\n  for IN_SYSTEM in $IN_SYSTEMS; do\n    if [ ! \"$IN_SYSTEM\" = \"$BH_BUILD_TAG\" ]; then\n        OUT_SYSTEMS=$OUT_SYSTEMS\" $IN_SYSTEM\"\n    fi\n  done\n  echo $OUT_SYSTEMS\n}\n\n# $1 is the string to search for\n# $2... is the list to search in\n# Returns first, yes or no.\nbh_list_contains ()\n{\n  local SEARCH=\"$1\"\n  shift\n  # For dash, this has to be split over 2 lines.\n  # Seems to be a bug with dash itself:\n  # https://bugs.launchpad.net/ubuntu/+source/dash/+bug/141481\n  local LIST\n  LIST=$@\n  local RESULT=first\n  # Pull out the host if there\n  for ELEMENT in $LIST; do\n    if [ \"$ELEMENT\" = \"$SEARCH\" ]; then\n      echo $RESULT\n      return 0\n    fi\n    RESULT=yes\n  done\n  echo no\n  return 1\n}\n\n\n# Use this function to enable/disable colored output\n# $1: 'true' or 'false'\nbh_set_color_mode ()\n{\n  local DO_COLOR=\n  case $1 in\n    on|enable|true) DO_COLOR=true\n    ;;\n  esac\n  if [ \"$DO_COLOR\" ]; then\n    _BH_COLOR_GREEN=\"\\033[32m\"\n    _BH_COLOR_PURPLE=\"\\033[35m\"\n    _BH_COLOR_CYAN=\"\\033[36m\"\n    _BH_COLOR_END=\"\\033[0m\"\n  else\n    _BH_COLOR_GREEN=\n    _BH_COLOR_PURPLE=\n    _BH_COLOR_CYAN=\n    _BH_COLOR_END=\n  fi\n}\n\n# By default, enable color mode\nbh_set_color_mode true\n\n# Pretty printing with colors!\nbh_host_text ()\n{\n    printf \"[${_BH_COLOR_GREEN}${BH_HOST_TAG}${_BH_COLOR_END}]\"\n}\n\nbh_toolchain_text ()\n{\n    printf \"[${_BH_COLOR_PURPLE}${BH_TOOLCHAIN}${_BH_COLOR_END}]\"\n}\n\nbh_target_text ()\n{\n    printf \"[${_BH_COLOR_CYAN}${BH_TARGET_TAG}${_BH_COLOR_END}]\"\n}\n\nbh_arch_text ()\n{\n    # Print arch name in cyan\n    printf \"[${_BH_COLOR_CYAN}${BH_TARGET_ARCH}${_BH_COLOR_END}]\"\n}\n\n# Check that a given compiler generates code correctly\n#\n# This is to detect bad/broken toolchains, e.g. amd64-mingw32msvc\n# is totally broken on Ubuntu 10.10 and 11.04\n#\n# $1: compiler\n# $2: optional extra flags\n#\nbh_check_compiler ()\n{\n    local CC=\"$1\"\n    local TMPC=$TMPDIR/build-host-$USER-$$.c\n    local TMPE=${TMPC%%.c}\n    local TMPL=$TMPC.log\n    local RET\n    shift\n    cat > $TMPC <<EOF\nint main(void) { return 0; }\nEOF\n    log_n \"Checking compiler code generation ($CC)... \"\n    $CC -o $TMPE $TMPC \"$@\" >$TMPL 2>&1\n    RET=$?\n    rm -f $TMPC $TMPE $TMPL\n    if [ \"$RET\" = 0 ]; then\n        log \"yes\"\n    else\n        log \"no\"\n    fi\n    return $RET\n}\n\n\n# $1: toolchain install dir\n# $2: toolchain prefix, no trailing dash (e.g. arm-linux-androideabi)\n# $3: optional -m32 or -m64.\n_bh_try_host_fullprefix ()\n{\n    local PREFIX=\"$1/bin/$2\"\n    shift; shift;\n    if [ -z \"$HOST_FULLPREFIX\" ]; then\n        local GCC=\"$PREFIX-gcc\"\n        if [ -f \"$GCC\" ]; then\n            if bh_check_compiler \"$GCC\" \"$@\"; then\n                HOST_FULLPREFIX=\"${GCC%%gcc}\"\n                dump \"$(bh_host_text) Using host gcc: $GCC $@\"\n            else\n                dump \"$(bh_host_text) Ignoring broken host gcc: $GCC $@\"\n            fi\n        fi\n    fi\n}\n\n# $1: host prefix, no trailing slash (e.g. i686-linux-android)\n# $2: optional compiler args (should be empty, -m32 or -m64)\n_bh_try_host_prefix ()\n{\n    local PREFIX=\"$1\"\n    shift\n    if [ -z \"$HOST_FULLPREFIX\" ]; then\n        local GCC=\"$(which $PREFIX-gcc 2>/dev/null)\"\n        if [ \"$GCC\" -a -e \"$GCC\" ]; then\n            if bh_check_compiler \"$GCC\" \"$@\"; then\n                HOST_FULLPREFIX=${GCC%%gcc}\n                dump \"$(bh_host_text) Using host gcc: ${HOST_FULLPREFIX}gcc $@\"\n            else\n                dump \"$(bh_host_text) Ignoring broken host gcc: $GCC $@\"\n            fi\n        fi\n    fi\n}\n\n# Used to determine the minimum possible Darwin version that a Darwin SDK\n# can target. This actually depends from the host architecture.\n# $1: Host architecture name\n# out: SDK version number (e.g. 10.4 or 10.5)\n_bh_darwin_arch_to_min_version ()\n{\n  if [ \"$1\" = \"x86\" ]; then\n    echo \"10.4\"\n  else\n    echo \"10.5\"\n  fi\n}\n\n# Use the check for the availability of a compatibility SDK in Darwin\n# this can be used to generate binaries compatible with either Tiger or\n# Leopard.\n#\n# $1: SDK root path\n# $2: Darwin compatibility minimum version\n_bh_check_darwin_sdk ()\n{\n    if [ -d \"$1\" -a -z \"$HOST_CFLAGS\" ] ; then\n        HOST_CFLAGS=\"-isysroot $1 -mmacosx-version-min=$2 -DMAXOSX_DEPLOYEMENT_TARGET=$2\"\n        HOST_CXXFLAGS=$HOST_CFLAGS\n        HOST_LDFLAGS=\"-syslibroot $1 -mmacosx-version-min=$2\"\n        dump \"Generating $2-compatible binaries.\"\n        return 0  # success\n    fi\n    return 1\n}\n\n# Check that a given compiler generates 32 or 64 bit code.\n# $1: compiler full path (.e.g  /path/to/fullprefix-gcc)\n# $2: 32 or 64\n# $3: extract compiler flags\n# Return: success iff the compiler generates $2-bits code\n_bh_check_compiler_bitness ()\n{\n    local CC=\"$1\"\n    local BITS=\"$2\"\n    local TMPC=$TMPDIR/build-host-gcc-bits-$USER-$$.c\n    local TMPL=$TMPC.log\n    local RET\n    shift; shift;\n    cat > $TMPC <<EOF\n/* this program will fail to compile if the compiler doesn't generate BITS-bits code */\nint tab[1-2*(sizeof(void*)*8 != BITS)];\nEOF\n    dump_n \"$(bh_host_text) Checking that the compiler generates $BITS-bits code ($@)... \"\n    $CC -c -DBITS=$BITS -o /dev/null $TMPC $HOST_CFLAGS \"$@\" > $TMPL 2>&1\n    RET=$?\n    rm -f $TMPC $TMPL\n    if [ \"$RET\" = 0 ]; then\n        dump \"yes\"\n    else\n        dump \"no\"\n    fi\n    return $RET\n}\n\n# This function probes the system to find the best toolchain or cross-toolchain\n# to build binaries that run on a given host system. After that, it generates\n# a wrapper toolchain under $2 with a prefix of ${BH_HOST_CONFIG}-\n# where $BH_HOST_CONFIG is a GNU configuration name.\n#\n# Important: this script might redefine $BH_HOST_CONFIG to a different value!\n#\n# $1: NDK system tag (e.g. linux-x86)\n#\n# The following can be defined, otherwise they'll be auto-detected and set.\n#\n#  DARWIN_MIN_VERSION   -> Darwmin minimum compatibility version\n#  DARWIN_SDK_VERSION   -> Darwin SDK version\n#\n# The following can be defined for extra features:\n#\n#  DARWIN_TOOLCHAIN     -> Path to Darwin cross-toolchain (cross-compile only).\n#  DARWIN_SYSROOT       -> Path to Darwin SDK sysroot (cross-compile only).\n#  NDK_CCACHE           -> Ccache binary to use to speed up rebuilds.\n#  ANDROID_NDK_ROOT     -> Top-level NDK directory, for automatic probing\n#                          of prebuilt platform toolchains.\n#\n_bh_select_toolchain_for_host ()\n{\n    local HOST_CFLAGS HOST_CXXFLAGS HOST_LDFLAGS HOST_FULLPREFIX DARWIN_ARCH\n    local DARWIN_ARCH DARWIN_SDK_SUBDIR\n\n    # We do all the complex auto-detection magic in the setup phase,\n    # then save the result in host-specific global variables.\n    #\n    # In the build phase, we will simply restore the values into the\n    # global HOST_FULLPREFIX / HOST_BUILD_DIR\n    # variables.\n    #\n\n    # Try to find the best toolchain to do that job, assuming we are in\n    # a full Android platform source checkout, we can look at the prebuilts/\n    # directory.\n    case $1 in\n        linux-x86)\n            # If possible, automatically use our custom toolchain to generate\n            # 32-bit executables that work on Ubuntu 8.04 and higher.\n            _bh_try_host_fullprefix \"$(dirname $ANDROID_NDK_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\" x86_64-linux\n            _bh_try_host_prefix i686-linux-gnu\n            _bh_try_host_prefix i686-linux\n            _bh_try_host_prefix x86_64-linux-gnu -m32\n            _bh_try_host_prefix x86_64-linux -m32\n            ;;\n\n        linux-x86_64)\n            # If possible, automaticaly use our custom toolchain to generate\n            # 64-bit executables that work on Ubuntu 8.04 and higher.\n            _bh_try_host_fullprefix \"$(dirname $ANDROID_NDK_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\" x86_64-linux\n            _bh_try_host_prefix x86_64-linux-gnu\n            _bh_try_host_prefix x84_64-linux\n            _bh_try_host_prefix i686-linux-gnu -m64\n            _bh_try_host_prefix i686-linux -m64\n            ;;\n\n        darwin-*)\n            DARWIN_ARCH=$(bh_tag_to_arch $1)\n            if [ -z \"$DARWIN_MIN_VERSION\" ]; then\n                DARWIN_MIN_VERSION=$(_bh_darwin_arch_to_min_version $DARWIN_ARCH)\n            fi\n            case $BH_BUILD_OS in\n                darwin)\n                    if [ \"$DARWIN_SDK_VERSION\" ]; then\n                        # Compute SDK subdirectory name\n                        case $DARWIN_SDK_VERSION in\n                            10.4) DARWIN_SDK_SUBDIR=$DARWIN_SDK.sdku;;\n                            *) DARWIN_SDK_SUBDIR=$DARWIN_SDK.sdk;;\n                        esac\n                        # Since xCode moved to the App Store the SDKs have been 'sandboxed' into the Xcode.app folder.\n                        _bh_check_darwin_sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$DARWIN_SDK_SUBDIR $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX$DARWIN_SDK_SUBDIR $DARWIN_MIN_VERSION\n                    else\n                        # Since xCode moved to the App Store the SDKs have been 'sandboxed' into the Xcode.app folder.\n                        _bh_check_darwin_sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX10.7.sdk  $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX10.6.sdk  $DARWIN_MIN_VERSION\n                        # NOTE: The 10.5.sdk on Lion is buggy and cannot build basic C++ programs\n                        #_bh_check_darwin_sdk /Developer/SDKs/MacOSX10.5.sdk  $DARWIN_ARCH\n                        # NOTE: The 10.4.sdku is not available anymore and could not be tested.\n                        #_bh_check_darwin_sdk /Developer/SDKs/MacOSX10.4.sdku $DARWIN_ARCH\n                    fi\n                    if [ -z \"$HOST_CFLAGS\" ]; then\n                        local version=\"$(sw_vers -productVersion)\"\n                        log \"Generating $version-compatible binaries!\"\n                    fi\n                    ;;\n                *)\n                    if [ -z \"$DARWIN_TOOLCHAIN\" -o -z \"$DARWIN_SYSROOT\" ]; then\n                        dump \"If you want to build Darwin binaries on a non-Darwin machine,\"\n                        dump \"Please define DARWIN_TOOLCHAIN to name it, and DARWIN_SYSROOT to point\"\n                        dump \"to the SDK. For example:\"\n                        dump \"\"\n                        dump \"   DARWIN_TOOLCHAIN=\\\"i686-apple-darwin11\\\"\"\n                        dump \"   DARWIN_SYSROOT=\\\"~/darwin-cross/MacOSX10.7.sdk\\\"\"\n                        dump \"   export DARWIN_TOOLCHAIN DARWIN_SYSROOT\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    _bh_check_darwin_sdk $DARWIN_SYSROOT $DARWIN_MIN_VERSION\n                    _bh_try_host_prefix \"$DARWIN_TOOLCHAIN\" -m$(bh_tag_to_bits $1) --sysroot \"$DARWIN_SYSROOT\"\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"It looks like $DARWIN_TOOLCHAIN-gcc is not in your path, or does not work correctly!\"\n                        exit 1\n                    fi\n                    dump \"Using darwin cross-toolchain: ${HOST_FULLPREFIX}gcc\"\n                    ;;\n            esac\n            ;;\n\n        windows|windows-x86)\n            case $BH_BUILD_OS in\n                linux)\n                    # We favor these because they are more recent, and because\n                    # we have a script to rebuild them from scratch. See\n                    # build-mingw64-toolchain.sh.\n                    _bh_try_host_prefix x86_64-w64-mingw32 -m32\n                    _bh_try_host_prefix i686-w64-mingw32\n                    # Typically provided by the 'mingw32' package on Debian\n                    # and Ubuntu systems.\n                    _bh_try_host_prefix i586-mingw32msvc\n                    # Special note for Fedora: this distribution used\n                    # to have a mingw32-gcc package that provided a 32-bit\n                    # only cross-toolchain named i686-pc-mingw32.\n                    # Later versions of the distro now provide a new package\n                    # named mingw-gcc which provides i686-w64-mingw32 and\n                    # x86_64-w64-mingw32 instead.\n                    _bh_try_host_prefix i686-pc-mingw32\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"There is no Windows cross-compiler. Ensure that you\"\n                        dump \"have one of these installed and in your path:\"\n                        dump \"   x86_64-w64-mingw32-gcc  (see build-mingw64-toolchain.sh)\"\n                        dump \"   i686-w64-mingw32-gcc    (see build-mingw64-toolchain.sh)\"\n                        dump \"   i586-mingw32msvc-gcc    ('mingw32' Debian/Ubuntu package)\"\n                        dump \"   i686-pc-mingw32         (on Fedora)\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    # Adjust $HOST to match the toolchain to ensure proper builds.\n                    # I.e. chose configuration triplets that are known to work\n                    # with the gmp/mpfr/mpc/binutils/gcc configure scripts.\n                    case $HOST_FULLPREFIX in\n                        *-mingw32msvc-*|i686-pc-mingw32)\n                            BH_HOST_CONFIG=i586-pc-mingw32msvc\n                            ;;\n                        *)\n                            BH_HOST_CONFIG=i686-w64-mingw32msvc\n                            ;;\n                    esac\n                    ;;\n                *) panic \"Sorry, this script only supports building windows binaries on Linux.\"\n                ;;\n            esac\n            HOST_CFLAGS=$HOST_CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            HOST_CXXFLAGS=$HOST_CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            ;;\n\n        windows-x86_64)\n            case $BH_BUILD_OS in\n                linux)\n                    # See comments above for windows-x86\n                    _bh_try_host_prefix x86_64-w64-mingw32\n                    _bh_try_host_prefix i686-w64-mingw32 -m64\n                    # Beware that this package is completely broken on many\n                    # versions of no vinegar Ubuntu (i.e. it fails at building trivial\n                    # programs).\n                    _bh_try_host_prefix amd64-mingw32msvc\n                    # There is no x86_64-pc-mingw32 toolchain on Fedora.\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"There is no Windows cross-compiler in your path. Ensure you\"\n                        dump \"have one of these installed and in your path:\"\n                        dump \"   x86_64-w64-mingw32-gcc  (see build-mingw64-toolchain.sh)\"\n                        dump \"   i686-w64-mingw32-gcc    (see build-mingw64-toolchain.sh)\"\n                        dump \"   amd64-mingw32msvc-gcc   (Debian/Ubuntu - broken until Ubuntu 11.10)\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    # See comment above for windows-x86\n                    case $HOST_FULLPREFIX in\n                        *-mingw32msvc*)\n                            # Actually, this has never been tested.\n                            BH_HOST=amd64-pc-mingw32msvc\n                            ;;\n                        *)\n                            BH_HOST=x86_64-w64-mingw32\n                            ;;\n                    esac\n                    ;;\n\n                *) panic \"Sorry, this script only supports building windows binaries on Linux.\"\n                ;;\n            esac\n            HOST_CFLAGS=$HOST_CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            HOST_CXXFLAGS=$HOST_CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            ;;\n    esac\n\n    # Determine the default bitness of our compiler. It it doesn't match\n    # HOST_BITS, tries to see if it supports -m32 or -m64 to change it.\n    if ! _bh_check_compiler_bitness ${HOST_FULLPREFIX}gcc $BH_HOST_BITS; then\n        local TRY_CFLAGS\n        case $BH_HOST_BITS in\n            32) TRY_CFLAGS=-m32;;\n            64) TRY_CFLAGS=-m64;;\n        esac\n        if ! _bh_check_compiler_bitness ${HOST_FULLPREFIX}gcc $BH_HOST_BITS $TRY_CFLAGS; then\n            panic \"Can't find a way to generate $BH_HOST_BITS binaries with this compiler: ${HOST_FULLPREFIX}gcc\"\n        fi\n        HOST_CFLAGS=$HOST_CFLAGS\" \"$TRY_CFLAGS\n        HOST_CXXFLAGS=$HOST_CXXFLAGS\" \"$TRY_CFLAGS\n    fi\n\n    # Support for ccache, to speed up rebuilds.\n    DST_PREFIX=$HOST_FULLPREFIX\n    local CCACHE=\n    if [ \"$NDK_CCACHE\" ]; then\n        CCACHE=\"--ccache=$NDK_CCACHE\"\n    fi\n\n    # We're going to generate a wrapper toolchain with the $HOST prefix\n    # i.e. if $HOST is 'i686-linux-gnu', then we're going to generate a\n    # wrapper toolchain named 'i686-linux-gnu-gcc' that will redirect\n    # to whatever HOST_FULLPREFIX points to, with appropriate modifier\n    # compiler/linker flags.\n    #\n    # This helps tremendously getting stuff to compile with the GCC\n    # configure scripts.\n    #\n    run mkdir -p \"$BH_WRAPPERS_DIR\" &&\n    run $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh \"$BH_WRAPPERS_DIR\" \\\n        --src-prefix=\"$BH_HOST_CONFIG-\" \\\n        --dst-prefix=\"$DST_PREFIX\" \\\n        --cflags=\"$HOST_CFLAGS\" \\\n        --cxxflags=\"$HOST_CXXFLAGS\" \\\n        --ldflags=\"$HOST_LDFLAGS\" \\\n        $CCACHE\n}\n\n\n# Setup the build directory, i.e. a directory where all intermediate\n# files will be placed.\n#\n# $1: Build directory. If empty, a random one will be selected.\n#\n# $2: Either 'preserve' or 'remove'. Indicates what to do of\n#     existing files in the build directory, if any.\n#\n# $3: Either 'release' or 'debug'. Compilation mode.\n#\nbh_setup_build_dir ()\n{\n    BH_BUILD_DIR=\"$1\"\n    if [ -z \"$BH_BUILD_DIR\" ]; then\n        BH_BUILD_DIR=$TMPDIR/buildhost\n    fi\n    mkdir -p \"$BH_BUILD_DIR\"\n    fail_panic \"Could not create build directory: $BH_BUILD_DIR\"\n\n    setup_default_log_file $BH_BUILD_DIR/build.log\n\n    if [ \"$_BH_OPTION_FORCE\" ]; then\n        rm -rf \"$BH_BUILD_DIR\"/*\n    fi\n\n    if [ \"$_BH_OPTION_NO_STRIP\" ]; then\n        BH_BUILD_MODE=debug\n    else\n        BH_BUILD_MODE=release\n    fi\n\n    # The directory that will contain our toolchain wrappers\n    BH_WRAPPERS_DIR=$BH_BUILD_DIR/toolchain-wrappers\n    rm -rf \"$BH_WRAPPERS_DIR\" && mkdir \"$BH_WRAPPERS_DIR\"\n    fail_panic \"Could not create wrappers dir: $BH_WRAPPERS_DIR\"\n\n    # The directory that will contain our timestamps\n    BH_STAMPS_DIR=$BH_BUILD_DIR/timestamps\n    mkdir -p \"$BH_STAMPS_DIR\"\n    fail_panic \"Could not create timestamps dir\"\n}\n\n# Call this before anything else to setup a few important variables that are\n# used consistently to build any host-specific binaries.\n#\n# $1: Host system name (e.g. linux-x86), this is the name of the host system\n#     where the generated GCC binaries will run, not the current machine's\n#     type (this one is in $ORIGINAL_HOST_TAG instead).\n#\nbh_setup_build_for_host ()\n{\n    local HOST_VARNAME=$(dashes_to_underscores $1)\n    local HOST_VAR=_BH_HOST_${HOST_VARNAME}\n\n    # Determine the host configuration triplet in $HOST\n    bh_set_host_tag $1\n\n    # Note: since _bh_select_toolchain_for_host can change the value of\n    # $BH_HOST_CONFIG, we need to save it in a variable to later get the\n    # correct one when this function is called again.\n    if [ -z \"$(var_value ${HOST_VAR}_SETUP)\" ]; then\n        _bh_select_toolchain_for_host $1\n        var_assign ${HOST_VAR}_CONFIG $BH_HOST_CONFIG\n        var_assign ${HOST_VAR}_SETUP true\n    else\n        BH_HOST_CONFIG=$(var_value ${HOST_VAR}_CONFIG)\n    fi\n}\n\n# This function is used to setup the build environment whenever we\n# generate host-specific binaries. You should call it before invoking\n# a configure script or make.\n#\n# It assume sthat bh_setup_build_for_host was called with the right\n# host system tag and wrappers directory.\n#\nbh_setup_host_env ()\n{\n    CC=$BH_HOST_CONFIG-gcc\n    CXX=$BH_HOST_CONFIG-g++\n    LD=$BH_HOST_CONFIG-ld\n    AR=$BH_HOST_CONFIG-ar\n    AS=$BH_HOST_CONFIG-as\n    RANLIB=$BH_HOST_CONFIG-ranlib\n    NM=$BH_HOST_CONFIG-nm\n    STRIP=$BH_HOST_CONFIG-strip\n    STRINGS=$BH_HOST_CONFIG-strings\n    export CC CXX LD AR AS RANLIB NM STRIP STRINGS\n\n    CFLAGS=\n    CXXFLAGS=\n    LDFLAGS=\n    case $BH_BUILD_MODE in\n        release)\n            CFLAGS=\"-O2 -Os -fomit-frame-pointer -s\"\n            CXXFLAGS=$CFLAGS\n            ;;\n        debug)\n            CFLAGS=\"-O0 -g\"\n            CXXFLAGS=$CFLAGS\n            ;;\n    esac\n    export CFLAGS CXXFLAGS LDFLAGS\n\n    export PATH=$BH_WRAPPERS_DIR:$PATH\n}\n\n_bh_option_no_color ()\n{\n    bh_set_color_mode off\n}\n\n# This function is used to register a few command-line options that\n# impact the build of host binaries. Call it before invoking\n# extract_parameters to add them automatically.\n#\nbh_register_options ()\n{\n    BH_HOST_SYSTEMS=\"$BH_BUILD_TAG\"\n    register_var_option \"--systems=<list>\" BH_HOST_SYSTEMS \"Build binaries that run on these systems.\"\n\n    _BH_OPTION_FORCE=\n    register_var_option \"--force\" _BH_OPTION_FORCE \"Force rebuild.\"\n\n    _BH_OPTION_NO_STRIP=\n    register_var_option \"--no-strip\" _BH_OPTION_NO_STRIP \"Don't strip generated binaries.\"\n\n    register_option \"--no-color\" _bh_option_no_color \"Don't output colored text.\"\n\n    if [ \"$HOST_OS\" = darwin ]; then\n        DARWIN_SDK_VERSION=\n        register_var_option \"--darwin-sdk-version=<version>\" DARWIN_SDK \"Select Darwin SDK version.\"\n\n        DARWIN_MIN_VERSION=\n        register_var_option \"--darwin-min-version=<version>\" DARWIN_MIN_VERSION \"Select minimum OS X version of generated host toolchains.\"\n    fi\n}\n\n# Execute a given command if the corresponding timestamp hasn't been touched\n#\n# NOTE: The command is run in its own sub-shell to avoid environment\n#        contamination.\n#\n# $1: timestamps name\n# $2+: command\nbh_stamps_do ()\n{\n    local STAMP_NAME=$1\n    shift\n    if [ ! -f \"$BH_STAMPS_DIR/$STAMP_NAME\" ]; then\n        (\"$@\")\n        fail_panic\n        mkdir -p \"$BH_STAMPS_DIR\" && touch \"$BH_STAMPS_DIR/$STAMP_NAME\"\n    fi\n}\n\n# Return host tag with only translation that windows-x86 -> windows\n#\n# $1: host system tag\ninstall_dir_from_host_tag ()\n{\n    case $1 in\n        windows-x86)\n            echo \"windows\"\n            ;;\n        *)\n            echo \"$1\"\n            ;;\n    esac\n}\n\n# Return the build install directory of a given Python version\n#\n# $1: host system tag\n# $2: python version\n# The suffix of this has to match python_ndk_install_dir\n#  as I package them from the build folder, substituting\n#  the end part of python_build_install_dir matching\n#  python_ndk_install_dir with nothing.\npython_build_install_dir ()\n{\n    echo \"$BH_BUILD_DIR/install/prebuilt/$(install_dir_from_host_tag $1)\"\n}\n\n# Same as python_build_install_dir, but for the final NDK installation\n# directory. Relative to $NDK_DIR.\n#\n# $1: host system tag\npython_ndk_install_dir ()\n{\n    echo \"prebuilt/$(install_dir_from_host_tag $1)\"\n}\n"
  },
  {
    "path": "build/instruments/dev-defaults.sh",
    "content": "if [ -z \"$NDK\" ]; then\n    THISFILE=\"\"\n    if [ \"x$BASH_VERSION\" != \"x\" ]; then\n        THISFILE=${BASH_SOURCE[0]}\n    elif [ \"x$ZSH_VERSION\" != \"x\" ]; then\n        THISFILE=${(%):-%x}\n    else\n        echo \"we're running in unknown shell (only BASH or ZSH are supported)!\" 1>&2\n        return 1\n    fi\n    if [ \"x$THISFILE\" = \"x\" ]; then\n        echo \"Can't detect path of sourced file! Please check you're running in BASH or ZSH!\" 1>&2\n        return 1\n    fi\n    NDK=$(cd $(dirname $THISFILE)/../.. && pwd)\n    unset THISFILE\nfi\nsource $NDK/build/tools/dev-defaults.sh\n"
  },
  {
    "path": "build/instruments/dev-platform-compress.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# dev-platform-compress.sh\n#\n# Compressed expanded platform files into development/ndk/platforms/\n# structure.\n#\n\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to compress an expanded platforms NDK tree\ninto the compressed/minimal structure used in development/ndk/platforms.\n\nThe main idea is that in the destination directory, a file only appears\nonce, even if it is provided by several platforms. I.e. if we have:\n\n  file1 = \\$SRC/android-3/foo\n  file2 = \\$SRC/android-4/foo\n  file3 = \\$SRC/android-5/foo\n\nWe will always store a copy of file1 under \\$DST/android-3/foo\nIf file2 is identical to file1, we remove its copy in \\$DST/android-4/foo,\notherwise we do copy it to the same location\n\nIf file3 is identical to file2, we remove its copy in \\$DST/android-4/foo,\notherwise we copy it to the same location.\n\nRepeat for all files under \\$SRC/android-N for increasing values of N.\n\"\n\nSRCDIR=$TMPDIR/platforms\nregister_var_option \"--src-dir=<path>\" SRCDIR \"Specify source platforms directory\"\n\nDSTDIR=$TMPDIR/platforms-compressed\nregister_var_option \"--dst-dir=<path>\" DSTDIR \"Specify destination directory\"\n\nAPI_LEVELS=$(spaces_to_commas $API_LEVELS)\nregister_var_option \"--platforms=<list>\" API_LEVELS \"Specify all API levels\"\n\nextract_parameters \"$@\"\n\nAPI_LEVELS=$(commas_to_spaces $API_LEVELS)\n\n# Sanity check\nfor PLATFORM in $API_LEVELS; do\n    SDIR=$SRCDIR/android-$PLATFORM\n    if [ ! -d \"$SDIR\" ]; then\n        echo \"ERROR: Missing source platform directory: $SDIR\"\n        exit 1\n    fi\ndone\n\n# Let's roll\nPREV_PLATFORM=\nfor PLATFORM in $API_LEVELS; do\n    SDIR=$SRCDIR/android-$PLATFORM\n    DDIR=$DSTDIR/android-$PLATFORM\n    if [ -z \"$PREV_PLATFORM\" ]; then\n        # Copy everything here\n        log \"Copying directory: $SDIR --> $DDIR\"\n        copy_directory \"$SDIR\" \"$DDIR\"\n    else\n        # For each file, check whether it is new or\n        # different from the one in the previous platform level\n        log \"Compressing directory: $SDIR\"\n        PDIR=$SRCDIR/android-$PREV_PLATFORM\n        FILES=$(cd $SDIR && find . -type f)\n        echo \"Files found:\"\n        echo \"$FILES\" | tr ' ' '\\n'\n        for FILENAME in $FILES; do\n            FILENAME=${FILENAME##./}  # Get rid of leading ./\n            PFILE=$PDIR/$FILENAME\n            CFILE=$SDIR/$FILENAME\n            DFILE=$DDIR/$FILENAME\n            if [ -f \"$PFILE\" ]; then\n                log \"Comparing $CFILE with $PFILE\"\n                if cmp --quiet $PFILE $CFILE; then\n                    # Files are identical, remove it from destination\n                    # if it exists there, it's not longer relevant.\n                    if [ -f \"$DFILE\" ]; then\n                        log \"Removing obsolete $DFILE\"\n                        rm -f $DFILE\n                    else\n                        log \"Skipping $CFILE\"\n                    fi\n                    continue\n                fi\n            fi\n            # New or modified file, copy it\n            DFILE=$DDIR/$FILENAME\n            log \"Copying $SFILE --> $DFILE\"\n            mkdir -p $(dirname \"$DFILE\") && cp $CFILE $DFILE\n            fail_panic \"Could not copy $CFILE to $DFILE\"\n        done\n    fi\n    PREV_PLATFORM=$PLATFORM\ndone\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "build/instruments/dev-platform-expand-all.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# dev-platform-expand-all.sh\n#\n# Call dev-platform-expand.sh for all API levels.\n#\n\n. `dirname $0`/prebuilt-common.sh\nPROGDIR=$(dirname $0)\n\n# We take by default stuff from $NDK/../development/ndk\nSRCDIR=\"$(cd $ANDROID_NDK_ROOT/../development/ndk/platforms && pwd)\"\nregister_var_option \"--src-dir=<path>\" SRCDIR \"Source for compressed platforms\"\n\n# The default destination directory is a temporary one\nDSTDIR=$TMPDIR/platforms\nregister_var_option \"--dst-dir=<path>\" DSTDIR \"Destination directory\"\n\n# Default architecture, note we can have several ones here\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<name>\" ARCHS \"List of target architectures\"\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Call dev-platform-expand.sh for all API levels.\"\n\nextract_parameters \"$@\"\n\n# Check source directory\nif [ ! -d \"$SRCDIR\" ] ; then\n    echo \"ERROR: Source directory doesn't exist: $SRCDIR\"\n    exit 1\nfi\nif [ ! -d \"$SRCDIR/android-3\" ]; then\n    echo \"ERROR: Source directory doesn't seem to be valid: $SRCDIR\"\n    exit 1\nfi\nlog \"Using source directory: $SRCDIR\"\nlog \"Using destination directory: $DSTDIR\"\nlog \"Using architectures: $ARCHS\"\n\nfor PLATFORM in $API_LEVELS; do\n    dump \"Expanding files for android-$PLATFORM\"\n    $PROGDIR/dev-platform-expand.sh --platform=$PLATFORM --src-dir=$SRCDIR --dst-dir=$DSTDIR --arch=$(spaces_to_commas $ARCHS)\n    fail_panic \"Could not expand android-$PLATFORM files!\"\ndone\n\nlog \"Done! See $DSTDIR\"\nexit 0\n"
  },
  {
    "path": "build/instruments/dev-platform-expand.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# dev-platform-expand.sh\n#\n# This tool is used to expand the content of development/ndk/platforms\n# into a _single_ directory containing all headers / libraries corresponding\n# to a given API level and architecture.\n#\n# The idea is that the content of $SRC/android-N/ only contains stuff\n# that is relevant to API level N, and not contain anything that is already\n# provided by API level N-1, N-2, etc..\n#\n# More precisely, for each architecture A:\n#  $SRC/android-N/include        --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/include --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/lib     --> $DST/android-N/arch-A/usr/lib\n#\n# If we target level $API, we're going to copy the contents of android-3 to\n# android-$API to the destination directory.\n#\n\n. `dirname $0`/prebuilt-common.sh\n\n# Return the list of platform supported from $1/platforms\n# as a single space-separated list of levels. (e.g. \"3 4 5 8 9\")\n# $1: source directory\nextract_platforms_from ()\n{\n    local RET\n    if [ -d \"$1\" ] ; then\n        RET=$((cd \"$1/platforms\" && ls -d android-*) | sed -e \"s!android-!!\" | sort -g)\n    else\n        RET=\"\"\n    fi\n    RET=$(echo $RET)  # converts newlines to spaces\n    echo $RET\n}\n\n# The default platform is the last entry in the API_LEVELS default variable\nPLATFORM=android-$(echo $API_LEVELS | tr ' ' '\\n' | tail -1)\nregister_var_option \"--platform=<level>\" PLATFORM \"Target API level\"\n\n# We take by default stuff from $NDK/../development/ndk\nSRCDIR=\"$(cd $ANDROID_NDK_ROOT/../development/ndk/platforms && pwd)\"\nregister_var_option \"--src-dir=<path>\" SRCDIR \"Source for compressed platforms\"\n\n# The default destination directory is a temporary one\nDSTDIR=$TMPDIR/platforms\nregister_var_option \"--dst-dir=<path>\" DSTDIR \"Destination directory\"\n\n# Default architecture, note we can have several ones here\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<name>\" ARCHS \"List of target architectures\"\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Uncompress the platform files (headers/libraries) correspond to a given\nplatform into a single directory. The main idea is that the files are stored\nin a platform-specific way under SRC=$$NDK/../development/ndk, i.e.:\n\n  \\$SRC/platforms/android-3/  -> all files corresponding to API level 3\n  \\$SRC/platforms/android-4/  -> only new/modified files corresponding to API level 4\n  \\$SRC/platforms/android-5/  -> only new/modified files corresponding to API level 5\n  ...\n\nAs an example, expanding android-5 would mean:\n\n  1 - copy all files from android-3 to \\$DST directory\n\n  2 - copy all files from android-4 to \\$DST, eventually overwriting stuff\n      from android-3 that was modified in API level 4\n\n  3 - copy all files from android-5 to \\$DST, eventually overwriting stuff\n      from android-4 that was modified in API level 5\n\nThe script 'dev-platform-compress.sh' can be used to perform the opposite\noperation, and knows which files are part of which API level.\n\"\n\nextract_parameters \"$@\"\n\n# Check source directory\nif [ ! -d \"$SRCDIR\" ] ; then\n    echo \"ERROR: Source directory doesn't exist: $SRCDIR\"\n    exit 1\nfi\nif [ ! -d \"$SRCDIR/android-3\" ]; then\n    echo \"ERROR: Source directory doesn't seem to be valid: $SRCDIR\"\n    exit 1\nfi\nlog \"Using source directory: $SRCDIR\"\n\n# Check platform (normalize it, i.e. android-9 -> 9}\nPLATFORM=${PLATFORM##android-}\nif [ ! -d \"$SRCDIR/android-$PLATFORM\" ]; then\n    echo \"ERROR: Platform directory doesn't exist: $SRCDIR/android-$PLATFORM\"\n    exit 1\nfi\nlog \"Using platform: $PLATFORM\"\n\nif [ ! -d \"$DSTDIR\" ]; then\n    mkdir -p \"$DSTDIR\"\n    if [ $? != 0 ]; then\n        echo \"ERROR: Could not create destination directory: $DSTDIR\"\n        exit 1\n    fi\nfi\nlog \"Using destination directory: $DSTDIR\"\n\n# Handle architecture list\n#\n# We support both --arch and --abi for backwards compatibility reasons\n# --arch is the new hotness, --abi is deprecated.\n#\nif [ -n \"$OPTION_ARCH\" ]; then\n    OPTION_ARCH=$(commas_to_spaces $OPTION_ARCH)\nfi\n\nif [ -n \"$OPTION_ABI\" ] ; then\n    echo \"WARNING: --abi=<names> is deprecated. Use --arch=<names> instead!\"\n    OPTION_ABI=$(commas_to_spaces $OPTION_ABI)\n    if [ -n \"$OPTION_ARCH\" -a \"$OPTION_ARCH\" != \"$OPTION_ABI\" ]; then\n        echo \"ERROR: You can't use both --abi and --arch with different values!\"\n        exit 1\n    fi\n    OPTION_ARCH=$OPTION_ABI\nfi\n\nARCHS=$(commas_to_spaces $ARCHS)\nlog \"Using architectures: $(commas_to_spaces $ARCHS)\"\n\n# log \"Checking source platform architectures.\"\n# BAD_ARCHS=\n# for ARCH in $ARCHS; do\n#     eval CHECK_$ARCH=no\n# done\n# for ARCH in $ARCHS; do\n#     DIR=\"$SRCDIR/android-$PLATFORM/arch-$ARCH\"\n#     if [ -d $DIR ] ; then\n#         log \"  $DIR\"\n#         eval CHECK_$ARCH=yes\n#     fi\n# done\n# \n# BAD_ARCHS=\n# for ARCH in $ARCHS; do\n#     CHECK=`var_value CHECK_$ARCH`\n#     log \"  $ARCH check: $CHECK\"\n#     if [ \"$CHECK\" = no ] ; then\n#         if [ -z \"$BAD_ARCHS\" ] ; then\n#             BAD_ARCHS=$ARCH\n#         else\n#             BAD_ARCHS=\"$BAD_ARCHS $ARCH\"\n#         fi\n#     fi\n# done\n# \n# if [ -n \"$BAD_ARCHS\" ] ; then\n#     echo \"ERROR: Source directory doesn't support these ARCHs: $BAD_ARCHS\"\n#     exit 3\n# fi\n\ncopy_optional_directory ()\n{\n    if [ -d \"$1\" ]; then\n        copy_directory \"$1\" \"$2\"\n    fi\n}\n\n# Copy platform sysroot and samples into your destination\n#\n\n# $SRC/android-$PLATFORM/include --> $DST/platforms/android-$PLATFORM/arch-$ARCH/usr/include\n# $SRC/android-$PLATFORM/arch-$ARCH/include --> $DST/platforms/android-$PLATFORM/arch-$ARCH/usr/include\n# for compatibility:\n# $SRC/android-$PLATFORM/arch-$ARCH/usr/include --> $DST/platforms/android-$PLATFORM/arch-$ARCH/usr/include\n\n\n\n# $SRC/android-$PLATFORM/arch-$ARCH/usr --> $DST/platforms/android-$PLATFORM/arch-$ARCH/usr\n# $SRC/android-$PLATFORM/samples       --> $DST/samples\n#\nfor LEVEL in $API_LEVELS; do\n    if [ \"$LEVEL\" -gt \"$PLATFORM\" ]; then\n        break\n    fi\n    log \"Copying android-$LEVEL platform files\"\n    for ARCH in $ARCHS; do\n        SDIR=\"$SRCDIR/android-$LEVEL\"\n        DDIR=\"$DSTDIR/android-$PLATFORM\"\n        if [ -d \"$SDIR\" ]; then\n            copy_directory \"$SDIR/include\" \"$DDIR/include\"\n        fi\n        ARCH_SDIR=\"$SDIR/arch-$ARCH\"\n        ARCH_DDIR=\"$DDIR/arch-$ARCH\"\n        if [ -d \"$ARCH_SDIR\" ]; then\n            copy_optional_directory \"$ARCH_SDIR/include\" \"$ARCH_DDIR/include\"\n            copy_optional_directory \"$ARCH_SDIR/lib\"     \"$ARCH_DDIR/lib\"\n            rm -f \"$ARCH_DDIR\"/lib/*.so\n            copy_optional_directory \"$ARCH_SDIR/symbols\" \"$ARCH_DDIR/symbols\"\n            rm -f \"$ARCH_DDIR\"/symbols/*.so.txt\n        fi\n    done\ndone\n\nlog \"Done !\"\nexit 0\n"
  },
  {
    "path": "build/instruments/dev-platform-import.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n. `dirname $0`/prebuilt-common.sh\nPROGDIR=`dirname $0`\nPROGNAME=`basename $0`\n\n# This sets HOST_TAG to linux-x86 or darwin-x86 on 64-bit systems\nforce_32bit_binaries\n\nPLATFORM=\nregister_option \"--platform=<name>\" do_platform \"Specify API level [autodetect]\"\ndo_platform () { PLATFORM=$1; }\n\nARCH=\nregister_option \"--arch=<name>\" do_arch \"Specify architecture name [autodetect]\"\ndo_arch () { ARCH=$1; }\n\nOUT_DIR=$TMPDIR/platforms-import\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory\"\n\nTOOLCHAIN_PREFIX=\n\nPROGRAM_PARAMETERS=\"<build-path>\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to import the NDK-exposed system libraries and headers from\nan existing platform build, and copy them to a temporary directory that will later\nbe processed by another script (dev-platform-pack.sh) to archive them properly into\nthe NDK directory structure (e.g. under development/ndk/platforms/).\n\nBy default, the files will be copied to $OUT_DIR, but you can\noverride this with the --out-dir=<path> option.\n\nThe script also extracts the list of dynamic symbols exported by system libraries,\nfiltering those that should not be exposed through the NDK. You can disable this\nwith the --no-symbol-filtering option.\n\nThe <build-path> parameter must point to the platform build output directory\nof a valid Android reference platform build. This is the value of the\n\\$ANDROID_PRODUCT_OUT variable when doing a build configured with the 'lunch'\nutility. It usually looks like <top>/out/target/product/<name> where <top> is\nthe top-level Android source tree, and <name> is the build product name\n(e.g. 'generic' or 'generic_x86' for emulator-specific builds).\n\nThe API level is auto-detected from the content of <build-path>, but you\ncan override it with --platform=<number>.\n\nThis script is really in charge of the following tasks:\n  \n  1/ Detect the platform build's API level by parsing the build.prop\n     file. This can overriden with --platform=<number>\n\n  2/ Detect the platform build's target CPU architecture by parsing\n     the build.prop file. This can be overriden with --arch=<name>\n\n  3/ Copy system headers from \\$ANDROID/framework/base/ and other\n     locations into \\$OUT_DIR/android-\\$API/include or\n     \\$OUT_DIR/android-\\$API/arch-\\$ARCH/include\n\n  4/ Locate system shared libraries from \\$ANDROID_PRODUCT_OUT/system/lib\n     and generate symbol files in \\$OUT_DIR/android-\\$API/arch-\\$ARCH/symbols.\n\n  5/ Copy a few system static libraries (libc.a, libm.a, etc...) used\n     to generate static executables. As well as a few key object files\n     required by the C runtime (e.g. crtbegin_dynamic.o), when needed.\n\n\"\n\n\nextract_parameters \"$@\"\n\nif [ -z \"$PARAMETERS\" ] ; then\n    if [ -z \"$ANDROID_PRODUCT_OUT\" ]; then\n        dump \"ERROR: Missing path parameter to platform build, see --help for details\"\n        exit 1\n    fi\n    # ANDROID_PRODUCT_OUT is defined, so use it\n    log \"Auto-config: using build path: $ANDROID_PRODUCT_OUT\"\nelse\n    ANDROID_PRODUCT_OUT=$PARAMETERS\nfi\n\n# Sanity checks for the Android build path\nif [ ! -d \"$ANDROID_PRODUCT_OUT\" ]; then\n    dump \"ERROR: Not a directory: $ANDROID_PRODUCT_OUT\"\n    dump \"Please point to a valid and complete Android build directory\"\n    exit 1\nfi\n\nBUILD_PROP=$ANDROID_PRODUCT_OUT/system/build.prop\nif [ ! -f \"$BUILD_PROP\" ]; then\n    dump \"ERROR: Missing file: $BUILD_PROP\"\n    dump \"Please point to a valid and complete Android build directory\"\n    exit 1\nfi\nlog \"Extracting build properties from: $BUILD_PROP\"\n\n# Try to get the architecture from build.prop if needed\nif [ -z \"$ARCH\" ]; then\n    CPU_ABI=$(awk -F '=' '$1 == \"ro.product.cpu.abi\"  { print $2; }' $BUILD_PROP)\n    if [ $? != 0 ]; then\n        dump \"ERROR: Could not extract CPU ABI from $BUILD_PROP\"\n        dump \"Please use --arch=<name> to override this. See --help\"\n        exit 1\n    fi\n    log \"Found target CPU ABI: $CPU_ABI\"\n    ARCH=$(convert_abi_to_arch $CPU_ABI)\n    if [ -z \"$ARCH\" ]; then\n        dump \"ERROR: Can't translate $CPU_ABI ABI into CPU architecture!\"\n        exit 1\n    fi\n    log \"Auto-config: --arch=$ARCH\"\nfi\n\n# Try to get the API level from build.prop if needed\nif [ -z \"$PLATFORM\" ]; then\n    PLATFORM=$(awk -F '=' '$1 == \"ro.build.version.sdk\" { print $2; }' $BUILD_PROP)\n    if [ $? != 0 ] ; then\n        dump \"WARNING: Could not extract default platform level from $BUILD_PROP!\"\n        dump \"Please use --platform=<name> to override this. See --help\"\n        exit 1\n    fi\n    if [ -z \"$PLATFORM\" ]; then\n        dump \"ERROR: Couldn't extract API level from: $BUILD_PROP\"\n        exit 1\n    fi\n    log \"Auto-config: --platform=$PLATFORM\"\nfi\n\n# Normalize platform name, i.e.\n#  3         -> 3\n#  android-3 -> 3\n#\nPLATFORM=${PLATFORM##android-}\n\nPLATFORM_ROOT=$OUT_DIR/android-$PLATFORM/arch-$ARCH\nlog \"Using platform destination path: $PLATFORM_ROOT\"\n\n# Return the list of files under a given directory\n# $1: directory\n# $2: (optional) file patterns\nlist_regular_files_in ()\n{\n    local DIR=\"$1\"\n    shift\n    local PATTERNS=\"$@\"\n    if [ -z \"$PATTERNS\" ]; then\n        PATTERNS=\".\"\n    fi\n    cd \"$DIR\" && find $PATTERNS -type f | sed -e 's!^./!!g'\n}\n\n# Check that a given platform level was listed on the command line\n# $1: Platform numerical level (e.g. '3')\n# returns true if the platform is listed\nplatform_check ()\n{\n    [ \"$PLATFORM\" -ge \"$1\" ]\n}\n\n# Determine Android build tree root\nANDROID_ROOT=`cd $ANDROID_PRODUCT_OUT/../../../.. && pwd`\nlog \"Android build tree root: $ANDROID_ROOT\"\nlog \"Android product out: $ANDROID_PRODUCT_OUT\"\n\nif [ -z \"$TOOLCHAIN_PREFIX\" ]; then\n    TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)\n    TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n    TOOLCHAIN_PREFIX=$(get_toolchain_install $ANDROID_NDK_ROOT $TOOLCHAIN_NAME)/bin/$TOOLCHAIN_PREFIX\n    TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX%%-}\n    if [ -z \"$TOOLCHAIN_PREFIX\" ]; then\n        echo \"ERROR: Unsupported architecture\"\n        exit 1\n    fi\n    log \"Auto-config: --toolchain-prefix=$TOOLCHAIN_PREFIX\"\nfi\n\nif [ ! -d \"$(dirname $TOOLCHAIN_PREFIX)\" ]; then\n    echo \"ERROR: Toolchain not installed, missing directory: $(dirname $TOOLCHAIN_PREFIX)\"\n    exit 1\nfi\n\nif [ ! -f \"$TOOLCHAIN_PREFIX-readelf\" ]; then\n    echo \"ERROR: Toolchain not installed, missing program: $TOOLCHAIN_PREFIX-readelf\"\n    exit 1\nfi\n\n\n# 'Copy' a given system library. This really reads the shared library to\n# to generate a small shell version that will be installed at the destination\n# $1: Library name (e.g. libEGL.so)\n#\ncopy_system_shared_library ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/system/lib/$1.so\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system library: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.so\"\n    mkdir -p `dirname \"$dst\"` && cp \"$src\" \"$dst\"\n}\n\ncopy_system_static_library ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/$1_intermediates/$1.a\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system static library: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.a\"\n    log \"Copying system static library: $1.a\"\n    mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n}\n\ncopy_system_object_file ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/obj/lib/$1.o\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system object file: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.o\"\n    log \"Copying system object file: $1.o\"\n    mkdir -p `dirname \"$dst\"` &&\n    cp -f \"$src\" \"$dst\"\n}\n\n# Copy the content of a given directory to $SYSROOT/usr/include\n# $1: Source directory\n# $2+: List of headers\ncopy_system_headers ()\n{\n    local srcdir=\"$1\"\n    shift\n    local header\n    log \"Copying system headers from: $srcdir\"\n    for header; do\n        log \"  $header\"\n        local src=\"$srcdir/$header\"\n        local dst=\"$PLATFORM_ROOT/../include/$header\"\n        if [ ! -f \"$srcdir/$header\" ] ; then\n            dump \"ERROR: Missing system header: $srcdir/$header\"\n            exit 1\n        fi\n        mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Could not copy system header: $src\"\n            dump \"Target location: $dst\"\n            exit 1\n        fi\n    done\n}\n\n# Copy all headers found under $1\n# $1: source directory\ncopy_system_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\")\n    copy_system_headers $1 $headers\n}\n\n# Same as copy_system_headers, but for arch-specific files\n# $1: Source directory\n# $2+: List of headers\ncopy_arch_system_headers ()\n{\n    local srcdir=\"$1\"\n    shift\n    local header\n    for header; do\n        log \"Copying $arch system header: $header\"\n        local src=\"$srcdir/$header\"\n        local dst=\"$PLATFORM_ROOT/include/$header\"\n        if [ ! -f \"$srcdir/$header\" ] ; then\n            dump \"ERROR: Missing $ARCH system header: $srcdir/$header\"\n            exit 1\n        fi\n        mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Could not copy $ARCH system header: $src\"\n            dump \"Target location: $dst\"\n            exit 1\n        fi\n    done\n}\n\ncopy_arch_system_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\")\n    copy_arch_system_headers $1 $headers\n}\n\ncopy_arch_kernel_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\" asm)\n    copy_arch_system_headers $1 $headers\n}\n\n# Probe for the location of the OpenSLES sources in the\n# platform tree. This used to be system/media/opensles but\n# was moved to system/media/wilhelm in Android 4.0\nOPENSLES_SUBDIR=system/media/wilhelm\nif [ ! -d \"$ANDROID_ROOT/$OPENSLES_SUBDIR\" ]; then\n    OPENSLES_SUBDIR=system/media/opensles\nfi\n\n# Now do the work\n\n# API level 3\nif platform_check 3; then\n    copy_system_shared_library libc\n    copy_system_static_library libc\n    copy_system_headers_from $ANDROID_ROOT/bionic/libc/include\n    copy_arch_system_headers_from $ANDROID_ROOT/bionic/libc/arch-$ARCH/include\n    copy_arch_kernel_headers_from $ANDROID_ROOT/bionic/libc/kernel/arch-$ARCH\n\n    copy_system_object_file crtbegin_dynamic\n    copy_system_object_file crtbegin_static\n    copy_system_object_file crtend_android\n    case $ARCH in\n    x86)\n        copy_system_object_file crtbegin_so\n        copy_system_object_file crtend_so\n        ;;\n    esac\n\n    copy_system_shared_library libm\n    copy_system_static_library libm\n    copy_system_headers $ANDROID_ROOT/bionic/libm/include math.h\n    case \"$ARCH\" in\n    x86 )\n        copy_arch_system_headers $ANDROID_ROOT/bionic/libm/include/i387 fenv.h\n        ;;\n    * )\n        copy_arch_system_headers $ANDROID_ROOT/bionic/libm/$ARCH fenv.h\n        ;;\n    esac\n\n    # The <dlfcn.h> header was already copied from bionic/libc/include\n    copy_system_shared_library libdl\n    # There is no libdl.a at the moment, we might need one in\n    # the future to build gdb-7.1.x though.\n\n    copy_system_shared_library libz\n    copy_system_static_library libz\n    copy_system_headers $ANDROID_ROOT/external/zlib zconf.h zlib.h\n\n    copy_system_shared_library liblog\n    copy_system_headers $ANDROID_ROOT/system/core/include android/log.h\n\n    # NOTE: We do not copy the C++ headers, they are part of the NDK\n    #        under $NDK/source/cxx-stl. They were separated from the rest\n    #        of the platform headers in order to make room for other STL\n    #        implementations (e.g. STLport or GNU Libstdc++-v3)\n    #\n    copy_system_shared_library libstdc++\n    copy_system_static_library libstdc++\n\n    copy_system_headers $ANDROID_ROOT/libnativehelper/include/nativehelper jni.h\nfi\n\n# API level 4\nif platform_check 4; then\n    copy_system_shared_library libGLESv1_CM\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        GLES/gl.h \\\n        GLES/glext.h \\\n        GLES/glplatform.h\n\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        KHR/khrplatform.h\nfi\n\n# API level 5\nif platform_check 5; then\n    copy_system_shared_library libGLESv2\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        GLES2/gl2.h \\\n        GLES2/gl2ext.h \\\n        GLES2/gl2platform.h\nfi\n\n# API level 8\nif platform_check 8; then\n    copy_system_shared_library libandroid\n    copy_system_shared_library libjnigraphics\n    copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \\\n        android/bitmap.h\nfi\n\n# API level 9\nif platform_check 9; then\n    case $ARCH in\n    arm)\n        copy_system_object_file crtbegin_so\n        copy_system_object_file crtend_so\n        ;;\n    esac\n\n    copy_system_shared_library libandroid\n    copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \\\n        android/asset_manager.h \\\n        android/asset_manager_jni.h \\\n        android/configuration.h \\\n        android/input.h \\\n        android/keycodes.h \\\n        android/looper.h \\\n        android/native_activity.h \\\n        android/native_window.h \\\n        android/native_window_jni.h \\\n        android/obb.h \\\n        android/rect.h \\\n        android/sensor.h \\\n        android/storage_manager.h \\\n        android/window.h\n\n    copy_system_shared_library libEGL\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        EGL/egl.h \\\n        EGL/eglext.h \\\n        EGL/eglplatform.h\n\n    copy_system_shared_library libOpenSLES\n    copy_system_headers $ANDROID_ROOT/$OPENSLES_SUBDIR/include \\\n        SLES/OpenSLES.h \\\n        SLES/OpenSLES_Android.h \\\n        SLES/OpenSLES_AndroidConfiguration.h \\\n        SLES/OpenSLES_Platform.h\nfi\n\n# API level 14\nif platform_check 14; then\n    copy_system_shared_library libOpenMAXAL\n    copy_system_headers $ANDROID_ROOT/system/media/wilhelm/include \\\n\tOMXAL/OpenMAXAL.h \\\n        OMXAL/OpenMAXAL_Android.h \\\n        OMXAL/OpenMAXAL_Platform.h\n\n    # This header is new in API level 14\n    copy_system_headers $ANDROID_ROOT/$OPENSLES_SUBDIR/include \\\n        SLES/OpenSLES_AndroidMetadata.h\nfi\n\n# Now extract dynamic symbols from the copied shared libraries\n# Note that this script will also filter unwanted symbols\nlog \"Generating symbol files\"\n$PROGDIR/gen-system-symbols.sh \"$PLATFORM_ROOT/lib\" \"$PLATFORM_ROOT/symbols\"\n\n# Remove copied shared libraries, we don't need them anymore\n# They will be replaced by auto-generated shells by gen-platforms.sh\n#\nlog \"Cleaning: $PLATFORM_ROOT/lib/lib*.so\"\nrm -f \"$PLATFORM_ROOT\"/lib/lib*.so\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/dev-system-import.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n. `dirname $0`/prebuilt-common.sh\nPROGDIR=`dirname $0`\nPROGNAME=`basename $0`\n\nif [ -z \"$ANDROID_PRODUCT_OUT\" ] ; then\n    echo \"ERROR: The environment variable ANDROID_PRODUCT_OUT is not defined!\"\nfi\n\n# This sets HOST_TAG to linux-x86 or darwin-x86 on 64-bit systems\nforce_32bit_binaries\n\n# We need to extract the auto-detected platform level to display it in\n# the help. Do not barf if we can't do it right now, to keep --help working\n# in this case.\n#\nBUILD_PROP=$ANDROID_PRODUCT_OUT/system/build.prop\nif [ ! -f \"$BUILD_PROP\" ] ; then\n    # Use this as default if the build.prop file does not exist\n    # We will generate an error after the extract_parameters call\n    # in this specific case, but we want --help to work before that.\n    PLATFORM=9\nelse\n    PLATFORM=`awk -F '=' '$1 == \"ro.build.version.sdk\" { print $2; }' $BUILD_PROP`\n    if [ $? != 0 ] ; then\n        dump \"WARNING: Could not extract default platform level from $BUILD_PROP!\"\n        PLATFORM=9\n        dump \"Defaulting to $PLATFORM\"\n    fi\nfi\n\nPROGRAM_PARAMETERS=\"<level> [<level2>...]\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to update the NDK's platform headers and system libraries\nfrom those generated after a full build of the Android platform. Run it after\nmodifying and rebuilding one of the public libraries exposed through the NDK.\n\nThe first parameter must be a platform/API level. For example, to update the\nNDK definitions for the 'android-9' platform, use one of:\n\n    $PROGNAME android-9\n    $PROGNAME 9\n\nYou can also use several values to update several levels at once, e.g.:\n\n    $PROGNAME $API_LEVELS\n\nNOTE: The currently auto-detected API level for your build is $PLATFORM,\n      but this value may be incorrect if your platform has not been assigned\n      a new API level yet.\n\nThis script is really in charge of the following tasks:\n\n  1/ Import system headers from \\$ANDROID/framework/base/ and other\n     locations in the full system source tree.\n\n  2/ Locate system shared libraries from \\$ANDROID_PRODUCT_OUT/system/lib\n     and convert them into small \\\"shell\\\" .so files that only export the\n     same functions and variables. These can be used with the NDK at link\n     time, are much smaller, and also do not require the use of special\n     linker flags when used with the standalone NDK toolchain\n     (i.e. -Wl,--allow-shlib-undefined)\n\n  3/ For each shared library, also generate a list of symbols exported\n     by the shell. This makes it easier to see with 'git diff' which\n     symbols were added (or even removed) since the last invocation.\n\n  4/ Copy a few system static libraries (libc.a, libm.a, etc...) used\n     to generate static executables. As well as a few key object files\n     required by the C runtime (e.g. crtbegin_dynamic.o), when needed.\n\nBy default, all files are placed under \\$ANDROID/development/ndk\nbut you can override this with the --out-dir=<path> option.\n\nBy default, the build-specific platform/API level is autodetected, and\nonly the files under \\$ANDROID_ROOT/development/ndk/platforms/android-<level>/\nwill be affected. This ensures you don't accidentally overwrite files\ncorresponding to previous releases.\n\"\n\nARCH=arm\nregister_var_option \"--arch=<name>\" ARCH \"Specify architecture name.\"\n\nFORCE=no\nregister_var_option \"--force\" FORCE \"Force-copy all files.\"\n\nDEVDIR=\"$ANDROID_NDK_ROOT/../development/ndk\"\nif [ -d \"$DEVDIR\" ] ; then\n    OUT_DIR=`cd $DEVDIR && pwd`\nelse\n    OUT_DIR=\nfi\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory.\"\n\nTOOLCHAIN_PREFIX=\nregister_var_option \"--toolchain-prefix=<path>\" TOOLCHAIN_PREFIX \"Path and prefix for the toolchain\"\nlog \"Toolchain prefix: $TOOLCHAIN_PREFIX\"\n\nextract_parameters \"$@\"\n\nif [ -z \"$PARAMETERS\" ] ; then\n    dump \"ERROR: Missing required API/platform level. See --help for usage instructions.\"\n    exit 1\nfi\n\n# Normalize platform names, i.e. get rid of android- prefix in a list of\n# platform levels\n#\n#  3 android-4 foo-5 -> 3 4 foo-5  (foo-5 is invalid name)\n#\n# $1: list of platform levels\n#\nnormalize_platforms ()\n{\n    local RET=$(echo \"$@\" | tr ' ' '\\n' | sed -e 's!android-!!g' | tr '\\n' ' ')\n    echo ${RET%% }\n}\n\nPLATFORMS=`normalize_platforms $PARAMETERS`\nlog \"Target platform levels: $PLATFORMS\"\n\nif [ \"$FORCE\" = \"yes\" ] ;then\n    # We can't accept several platform levels in --force mode.\n    NUM_PLATFORMS=$(echo $PLATFORMS | tr ' ' '\\n' | wc -l)\n    if [ \"$NUM_PLATFORMS\" != 1 ]; then\n        echo \"ERROR: You can only use a single platform level when using --force ($NUM_PLATFORMS)\"\n        exit 1\n    fi\nfi\n\n# Return the list of files under a given directory\n# $1: directory\n# $2: (optional) file patterns\nlist_regular_files_in ()\n{\n    local DIR=\"$1\"\n    shift\n    local PATTERNS=\"$@\"\n    if [ -z \"$PATTERNS\" ]; then\n        PATTERNS=\".\"\n    fi\n    cd \"$DIR\" && find $PATTERNS -type f | sed -e 's!^./!!g'\n}\n\n# Check that a given platform level was listed on the command line\n# $1: Platform numerical level (e.g. '3')\n# returns true if the platform is listed\nplatform_check ()\n{\n    if [ \"$FORCE\" = \"yes\" ]; then\n        PLATFORM_ROOT=\"$OUT_DIR/platforms/android-$PLATFORMS/arch-$ARCH\"\n        log \"Platform root (forced): $PLATFORM_ROOT\"\n        return 0\n    fi\n    echo \"$PLATFORMS\" | tr ' ' '\\n' | fgrep -q \"$1\"\n    if [ $? != 0 ] ; then\n        # Not listed, return an error code for 'if'\n        return 1\n    else\n        PLATFORM_ROOT=\"$OUT_DIR/platforms/android-$1/arch-$ARCH\"\n        log \"Platform root: $PLATFORM_ROOT\"\n        return 0\n    fi\n}\n\n# Determine Android build tree root\nANDROID_ROOT=`cd $ANDROID_PRODUCT_OUT/../../../.. && pwd`\nlog \"Android build tree root: $ANDROID_ROOT\"\nlog \"Android product out: $ANDROID_PRODUCT_OUT\"\n\ncase $ARCH in\n    arm)\n        TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_arm\n        PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm\n        ;;\n    x86)\n        TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_x86\n        PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86\n        ;;\n    mips)\n        TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_mips\n        PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips\n        ;;\n    *)\n        echo \"ERROR: Unsupported architecture: $ARCH\"\n        exit 1\nesac\n\nif [ -z \"$TOOLCHAIN_PREFIX\" ]; then\n    TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)\n    TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n    TOOLCHAIN_PREFIX=$(get_toolchain_install $ANDROID_NDK_ROOT $TOOLCHAIN_NAME)/bin/$TOOLCHAIN_PREFIX\n    TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX%%-}\n    if [ -z \"$TOOLCHAIN_PREFIX\" ]; then\n        echo \"ERROR: Unsupported architecture\"\n        exit 1\n    fi\n    echo \"Autoconfig: --toolchain-prefix=$TOOLCHAIN_PREFIX\"\nfi\n\nif [ ! -d \"$(dirname $TOOLCHAIN_PREFIX)\" ]; then\n    echo \"ERROR: Toolchain not installed, missing directory: $(dirname $TOOLCHAIN_PREFIX)\"\n    exit 1\nfi\n\nif [ ! -f \"$TOOLCHAIN_PREFIX-readelf\" ]; then\n    echo \"ERROR: Toolchain not installed, missing program: $TOOLCHAIN_PREFIX-readelf\"\n    exit 1\nfi\n\nif [ -z \"$OUT_DIR\" ] ; then\n    dump \"ERROR: Could not find valid output directory (e.g. \\$NDK/../development/ndk).\"\n    dump \"Please use --out-dir=<path> to specify one!\"\n    exit 1\nfi\n\n# Check the platform value and set PLATFORM_ROOT\n#\n\n# Normalize the value: android-3 -> android-3   3 -> android-3\nPLATFORM=${PLATFORM##android-}\nPLATFORM=android-$PLATFORM\n\n\n# Temp file used to list shared library symbol exclusions\n# See set_symbol_excludes and extract_shared_library_xxxx functions below\nSYMBOL_EXCLUDES=$TMPDIR/ndk-symbol-excludes.txt\n\n# Temp file used to list shared library symbol inclusions, these\n# are essentially overrides to the content of SYMBOL_EXCLUDES\nSYMBOL_INCLUDES=$TMPDIR/ndk-symbol-includes.txt\n\n# Reset the symbol exclusion list to its default\nreset_symbol_excludes ()\n{\n    # By default, do not export C++ mangled symbol, which all start with _Z\n    echo '^_Z' > $SYMBOL_EXCLUDES\n    > $SYMBOL_INCLUDES\n}\n\n# Add new exclusion patterns to SYMBOL_EXCLUDES\nset_symbol_excludes ()\n{\n    (echo \"$@\" | tr ' ' '\\n') >> $SYMBOL_EXCLUDES\n}\n\n# Add new inclusion patterns to SYMBOL_INCLUDES\nset_symbol_includes ()\n{\n    (echo \"$@\" | tr ' ' '\\n') >> $SYMBOL_INCLUDES\n}\n\n# Clear symbol exclusion/inclusion files\nclear_symbol_excludes ()\n{\n    rm -f $SYMBOL_EXCLUDES $SYMBOL_INCLUDES\n}\n\n# Filter the list of symbols from a file\n# $1: path to symbol list file\nfilter_symbols ()\n{\n    (grep -v -f $SYMBOL_EXCLUDES $1 ; grep -f $SYMBOL_INCLUDES $1) | sort -u\n}\n\n#\n# Dump the list of dynamic functions exported by a given shared library\n# $1: Path to shared library object\nextract_shared_library_functions ()\n{\n    $TOOLCHAIN_PREFIX-readelf -s -D -W $1 | awk '$5 ~ /FUNC/ && $6 ~ /GLOBAL/ && $8 !~ /UND/ { print $9; }' > $TMPC\n    filter_symbols $TMPC\n}\n\n# Dump the list of global variables exposed by a given shared library\n# $1: Path to shared library object\nextract_shared_library_variables ()\n{\n    $TOOLCHAIN_PREFIX-readelf -s -D -W $1 | awk '$5 ~ /OBJECT/ && $6 ~ /GLOBAL/ && $8 !~ /UND/ { print $9; }' > $TMPC\n    filter_symbols $TMPC\n}\n\n# Generate link library, i.e. a special tiny shell .so that exports the\n# same symbols as a reference shared library, and can be used during\n# link with the NDK toolchain.\n#\n# Having these shells allows two things:\n#\n# - Reduce the size of the NDK release package (some libs are very large)\n# - Use the standalone toolchain without -Wl,--allow-shlib-undefined\n#\n# Note that the list of symbols for each generated library is stored\n# under arch-$ARCH/symbols/<libname>.txt\n#\n# $1: Path to reference shared library\n# $2: Path to output shared library (can be the same as $1)\n#\ngenerate_shell_library ()\n{\n    # First, extract the list of functions and variables exported by the\n    # reference library.\n    local funcs=\"`extract_shared_library_functions $1`\"\n    local vars=\"`extract_shared_library_variables $1`\"\n    local numfuncs=`echo $funcs | wc -w`\n    local numvars=`echo $vars | wc -w`\n    dump \"Generating shell library for `basename $1` ($numfuncs functions + $numvars variables)\"\n\n    # Now generate a small C source file that contains similarly-named stubs\n    echo \"/* Auto-generated file, do not edit */\" > $TMPC\n    local func var\n    for func in $funcs; do\n        echo \"void $func(void) {}\" >> $TMPC\n    done\n    for var in $vars; do\n        echo \"int $var;\" >> $TMPC\n    done\n\n    # Build it with our cross-compiler. It will complain about conflicting\n    # types for built-in functions, so just shut it up.\n    $TOOLCHAIN_PREFIX-gcc -Wl,-shared,-Bsymbolic -nostdlib -o $TMPO $TMPC 1>/dev/null 2>&1\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't generate shell library for: $1\"\n        dump \"See the content of $TMPC for details.\"\n        exit 1\n    fi\n\n    # Sanity check: the generated shared library must export the same\n    # functions and variables, or something is really rotten!\n    local newfuncs=\"`extract_shared_library_functions $TMPO`\"\n    local newvars=\"`extract_shared_library_variables $TMPO`\"\n    if [ \"$newfuncs\" != \"$funcs\" ] ; then\n        dump \"ERROR: mismatch in generated functions list\"\n        exit 1\n    fi\n    if [ \"$newvars\" != \"$vars\" ] ; then\n        dump \"ERROR: mismatch in generated variables list\"\n        exit 1\n    fi\n\n    # Copy to our destination now\n    local libdir=`dirname \"$2\"`\n    mkdir -p \"$libdir\" && cp -f $TMPO \"$2\"\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't copy shell library for: $1\"\n        dump \"target location is: $2\"\n        exit 1\n    fi\n\n    # Write the functions and variables to a symbols file now\n    local symdir=`dirname \"$libdir\"`/symbols\n    local symfile=\"$symdir/`basename $1.txt`\"\n\n    dump \"Generating symbol file: $symfile\"\n    mkdir -p \"$symdir\" && > $symfile\n    (echo \"$funcs\" | tr ' ' '\\n') >>     $symfile\n    (echo \"$vars\" | tr ' ' '\\n') >> $symfile\n\n    # Clear the export exclusion list\n    reset_symbol_excludes\n}\n\n# 'Copy' a given system library. This really reads the shared library to\n# to generate a small shell version that will be installed at the destination\n# $1: Library name (e.g. libEGL.so)\n#\ncopy_system_shared_library ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/system/lib/$1.so\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system library: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.so\"\n    mkdir -p `dirname \"$dst\"` &&\n    generate_shell_library \"$src\" \"$dst\"\n}\n\ncopy_system_static_library ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/$1_intermediates/$1.a\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system static library: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.a\"\n    dump \"Copying system static library: $1.a\"\n    mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n}\n\ncopy_system_object_file ()\n{\n    local src=\"$ANDROID_PRODUCT_OUT/obj/lib/$1.o\"\n    if [ ! -f \"$src\" ] ; then\n        dump \"ERROR: Missing system object file: $src\"\n        exit 1\n    fi\n    local dst=\"$PLATFORM_ROOT/lib/$1.o\"\n    dump \"Copying system object file: $1.o\"\n    mkdir -p `dirname \"$dst\"` &&\n    cp -f \"$src\" \"$dst\"\n}\n\n# Copy the content of a given directory to $SYSROOT/usr/include\n# $1: Source directory\n# $2+: List of headers\ncopy_system_headers ()\n{\n    local srcdir=\"$1\"\n    shift\n    local header\n    dump \"Copying system headers from: $srcdir\"\n    for header; do\n        dump \"  $header\"\n        local src=\"$srcdir/$header\"\n        local dst=\"$PLATFORM_ROOT/../include/$header\"\n        if [ ! -f \"$srcdir/$header\" ] ; then\n            dump \"ERROR: Missing system header: $srcdir/$header\"\n            exit 1\n        fi\n        mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Could not copy system header: $src\"\n            dump \"Target location: $dst\"\n            exit 1\n        fi\n    done\n}\n\n# Copy all headers found under $1\n# $1: source directory\ncopy_system_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\")\n    copy_system_headers $1 $headers\n}\n\n# Same as copy_system_headers, but for arch-specific files\n# $1: Source directory\n# $2+: List of headers\ncopy_arch_system_headers ()\n{\n    local srcdir=\"$1\"\n    shift\n    local header\n    for header; do\n        dump \"Copying $arch system header: $header from $srcdir\"\n        local src=\"$srcdir/$header\"\n        local dst=\"$PLATFORM_ROOT/include/$header\"\n        if [ ! -f \"$srcdir/$header\" ] ; then\n            dump \"ERROR: Missing $ARCH system header: $srcdir/$header\"\n            exit 1\n        fi\n        mkdir -p `dirname \"$dst\"` && cp -f \"$src\" \"$dst\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Could not copy $ARCH system header: $src\"\n            dump \"Target location: $dst\"\n            exit 1\n        fi\n    done\n}\n\ncopy_arch_system_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\")\n    copy_arch_system_headers $1 $headers\n}\n\ncopy_arch_kernel_headers_from ()\n{\n    local headers=$(list_regular_files_in \"$1\" asm)\n    copy_arch_system_headers $1 $headers\n}\n\n# Now do the work\n\nreset_symbol_excludes\n\n# API level 3\nif platform_check 3; then\n    # Remove a few internal symbols that should not be exposed\n    # from the C library (we plan to clean that up soon by using the\n    # \"hidden\" visibility attribute in the near future).\n    #\n    set_symbol_excludes \\\n        '^the_' '^dns_' 'load_domain_search_list' 'res_get_dns_changed' \\\n        '^_resolv_cache' '^_dns_getht' '^_thread_atexit' \\\n        '^free_malloc_leak_info' 'fake_gmtime_r' 'fake_localtime_r' \\\n        '^gAllocationsMutex' '^gHashTable' '^gMallocLeakZygoteChild' \\\n\n    copy_system_shared_library libc\n    copy_system_static_library libc\n    copy_system_headers_from $ANDROID_ROOT/bionic/libc/include\n    copy_arch_system_headers_from $ANDROID_ROOT/bionic/libc/arch-$ARCH/include\n    copy_arch_kernel_headers_from $ANDROID_ROOT/bionic/libc/kernel/arch-$ARCH\n\n    copy_system_object_file crtbegin_dynamic\n    copy_system_object_file crtbegin_static\n    copy_system_object_file crtend_android\n    case $ARCH in\n    x86)\n        copy_system_object_file crtbegin_so\n        copy_system_object_file crtend_so\n        ;;\n    esac\n\n    copy_system_shared_library libm\n    copy_system_static_library libm\n    copy_system_headers $ANDROID_ROOT/bionic/libm/include math.h\n    case \"$ARCH\" in\n    x86 )\n        copy_arch_system_headers $ANDROID_ROOT/bionic/libm/include/i387 fenv.h\n        ;;\n    * )\n        copy_arch_system_headers $ANDROID_ROOT/bionic/libm/$ARCH fenv.h\n        ;;\n    esac\n\n    # The <dlfcn.h> header was already copied from bionic/libc/include\n    copy_system_shared_library libdl\n    # There is no libdl.a at the moment, we might need one in\n    # the future to build gdb-7.1.x though.\n\n    copy_system_shared_library libz\n    copy_system_static_library libz\n    copy_system_headers $ANDROID_ROOT/external/zlib zconf.h zlib.h\n\n    set_symbol_excludes '^.*'         # exclude everything\n    set_symbol_includes '^__android_' # except __android_xxxx functions\n    copy_system_shared_library liblog\n    copy_system_headers $ANDROID_ROOT/system/core/include android/log.h\n\n    # NOTE: We do not copy the C++ headers, they are part of the NDK\n    #        under $NDK/source/cxx-stl. They were separated from the rest\n    #        of the platform headers in order to make room for other STL\n    #        implementations (e.g. STLport or GNU Libstdc++-v3)\n    #\n    # This is the only library that is allowed to export C++ symbols for now.\n    set_symbol_includes '^_Z.*'\n    copy_system_shared_library libstdc++\n    copy_system_static_library libstdc++\n\n    # We link gdbserver statically with libthreadb, so there is no point\n    # in copying the shared library (which by the way has an unstable ABI\n    # anyway).\n    copy_system_static_library libthread_db\n    copy_system_headers $ANDROID_ROOT/bionic/libthread_db/include thread_db.h sys/procfs.h\n\n    copy_system_headers $ANDROID_ROOT/libnativehelper/include/nativehelper jni.h\nfi\n\n# API level 4\nif platform_check 4; then\n    copy_system_shared_library libGLESv1_CM\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        GLES/gl.h \\\n        GLES/glext.h \\\n        GLES/glplatform.h\n\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        KHR/khrplatform.h\nfi\n\n# API level 5\nif platform_check 5; then\n    copy_system_shared_library libGLESv2\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        GLES2/gl2.h \\\n        GLES2/gl2ext.h \\\n        GLES2/gl2platform.h\nfi\n\n# API level 8\nif platform_check 8; then\n    copy_system_shared_library libandroid\n    copy_system_shared_library libjnigraphics\n    copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \\\n        android/bitmap.h\nfi\n\n# API level 9\nif platform_check 9; then\n    case $ARCH in\n    arm)\n        copy_system_object_file crtbegin_so\n        copy_system_object_file crtend_so\n        ;;\n    esac\n\n    copy_system_shared_library libandroid\n    copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \\\n        android/asset_manager.h \\\n        android/asset_manager_jni.h \\\n        android/configuration.h \\\n        android/input.h \\\n        android/keycodes.h \\\n        android/looper.h \\\n        android/native_activity.h \\\n        android/native_window.h \\\n        android/native_window_jni.h \\\n        android/obb.h \\\n        android/rect.h \\\n        android/sensor.h \\\n        android/storage_manager.h \\\n        android/window.h\n\n    copy_system_shared_library libEGL\n    copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \\\n        EGL/egl.h \\\n        EGL/eglext.h \\\n        EGL/eglplatform.h\n\n    set_symbol_excludes '^_' '^MPH_' # remove MPH_to_xxx definitions\n    copy_system_shared_library libOpenSLES\n    copy_system_headers $ANDROID_ROOT/system/media/wilhelm/include \\\n        SLES/OpenSLES.h \\\n        SLES/OpenSLES_Android.h \\\n        SLES/OpenSLES_AndroidConfiguration.h \\\n        SLES/OpenSLES_AndroidMetadata.h \\\n        SLES/OpenSLES_Platform.h\nfi\n\n# API level 14\nif platform_check 14; then\n    set_symbol_excludes '^_' '^MPH_' # remove MPH_to_xxx definitions\n    copy_system_shared_library libOpenMAXAL\n    copy_system_headers $ANDROID_ROOT/system/media/wilhelm/include \\\n        OMXAL/OpenMAXAL.h \\\n        OMXAL/OpenMAXAL_Android.h \\\n        OMXAL/OpenMAXAL_Platform.h\nfi\n\nclear_symbol_excludes\n\ndump \"Done!\"\n"
  },
  {
    "path": "build/instruments/find-case-duplicates.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2009, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is used to find case-insensitive duplicate file names\n# from the git repository. This is used to remove them when generating\n# a new sysroot.\n\n# location of the root ndk directory. we assume this script is under build/instruments\nNDK_ROOT_DIR=`dirname $0`/../..\nNDK_ROOT_DIR=`cd $NDK_ROOT_DIR && pwd`\n\nORG_FILES=`(cd $NDK_ROOT_DIR && git ls-files) | sort -f`\nNEW_FILES=\n\nPREVFILE=\nPREVUPFILE=XXXXXX\nfor FILE in $ORG_FILES; do\n    # don't use [:lower:] and [:upper:] since they can produce\n    # strange results based on the current locale.\n    UPFILE=`echo $FILE | tr [a-z] [A-Z]`\n    if [ \"$UPFILE\" != \"$PREVUPFILE\" ] ; then\n      NEW_FILES=\"$NEW_FILES $FILE\"\n    else\n      echo \"$PREVFILE\"\n      echo \"$FILE\"\n    fi\n    PREVFILE=$FILE\n    PREVUPFILE=$UPFILE\ndone\n"
  },
  {
    "path": "build/instruments/gen-platforms.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# gen-platforms.sh\n#\n# This tool is used when packaging a new release, or when developing\n# the NDK itself. It will populate DST ($NDK/platforms by default)\n# with the content of SRC ($NDK/../development/ndk/platforms/ by default).\n#\n# The idea is that the content of $SRC/android-N/ only contains stuff\n# that is relevant to API level N, and not contain anything that is already\n# provided by API level N-1, N-2, etc..\n#\n# More precisely, for each architecture A:\n#  $SRC/android-N/include        --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/include --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/lib     --> $DST/android-N/arch-A/usr/lib\n#\n# Also, we generate on-the-fly shared dynamic libraries from list of symbols:\n#\n#  $SRC/android-N/arch-A/symbols --> $DST/android-N/arch-A/usr/lib\n#\n# Repeat after that for N+1, N+2, etc..\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\n# Return the list of platform supported from $1/platforms\n# as a single space-separated sorted list of levels. (e.g. \"3 4 5 8 9 14\")\n# $1: source directory\nextract_platforms_from ()\n{\n    if [ -d \"$1\" ] ; then\n        (cd \"$1/platforms\" && ls -d android-*) | sed -e \"s!android-!!\" | sort -g | tr '\\n' ' '\n    else\n        echo \"\"\n    fi\n}\n\n# Override tmp file to be predictable\nTMPC=$TMPDIR/tmp/tests/tmp-platform.c\nTMPO=$TMPDIR/tmp/tests/tmp-platform.o\nTMPE=$TMPDIR/tmp/tests/tmp-platform$EXE\nTMPL=$TMPDIR/tmp/tests/tmp-platform.log\n\nSRCDIR=\"../development/ndk\"\nDSTDIR=\"$ANDROID_NDK_ROOT\"\n\nARCHS=\"$DEFAULT_ARCHS\"\nPLATFORMS=`extract_platforms_from \"$SRCDIR\"`\nNDK_DIR=$ANDROID_NDK_ROOT\n\nOPTION_HELP=no\nOPTION_PLATFORMS=\nOPTION_SRCDIR=\nOPTION_DSTDIR=\nOPTION_SAMPLES=\nOPTION_FAST_COPY=\nOPTION_MINIMAL=\nOPTION_ARCH=\nOPTION_ABI=\nOPTION_DEBUG_LIBS=\nOPTION_OVERLAY=\nOPTION_GCC_VERSION=\"default\"\nOPTION_LLVM_VERSION=$DEFAULT_LLVM_VERSION\nPACKAGE_DIR=\n\nVERBOSE=no\n\nfor opt do\n  optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n  case \"$opt\" in\n  --help|-h|-\\?) OPTION_HELP=yes\n  ;;\n  --verbose)\n    VERBOSE=yes\n    ;;\n  --src-dir=*)\n    OPTION_SRCDIR=\"$optarg\"\n    ;;\n  --dst-dir=*)\n    OPTION_DSTDIR=\"$optarg\"\n    ;;\n  --ndk-dir=*)\n    NDK_DIR=$optarg\n    ;;\n  --platform=*)\n    OPTION_PLATFORM=$optarg\n    ;;\n  --arch=*)\n    OPTION_ARCH=$optarg\n    ;;\n  --abi=*)  # We still support this for backwards-compatibility\n    OPTION_ABI=$optarg\n    ;;\n  --samples)\n    OPTION_SAMPLES=yes\n    ;;\n  --fast-copy)\n    OPTION_FAST_COPY=yes\n    ;;\n  --minimal)\n    OPTION_MINIMAL=yes\n    ;;\n  --package-dir=*)\n    PACKAGE_DIR=$optarg\n    ;;\n  --debug-libs)\n    OPTION_DEBUG_LIBS=true\n    ;;\n  --overlay)\n    OPTION_OVERLAY=true\n    ;;\n  --gcc-version=*)\n    OPTION_GCC_VERSION=$optarg\n    ;;\n  --llvm-version=*)\n    OPTION_LLVM_VERSION=$optarg\n    ;;\n  *)\n    echo \"unknown option '$opt', use --help\"\n    exit 1\n  esac\ndone\n\nif [ $OPTION_HELP = \"yes\" ] ; then\n    echo \"Collect files from an Android NDK development tree and assemble\"\n    echo \"the platform files appropriately into a final release structure.\"\n    echo \"\"\n    echo \"options:\"\n    echo \"\"\n    echo \"  --help                Print this message\"\n    echo \"  --verbose             Enable verbose messages\"\n    echo \"  --src-dir=<path>      Source directory for development platform files [$SRCDIR]\"\n    echo \"  --dst-dir=<path>      Destination directory [$DSTDIR]\"\n    echo \"  --ndk-dir=<path>      Use toolchains from this NDK directory [$NDK_DIR]\"\n    echo \"  --platform=<list>     List of API levels [$PLATFORMS]\"\n    echo \"  --arch=<list>         List of CPU architectures [$ARCHS]\"\n    echo \"  --minimal             Ignore samples, symlinks and generated shared libs.\"\n    echo \"  --fast-copy           Don't create symlinks, copy files instead\"\n    echo \"  --samples             Also generate samples directories.\"\n    echo \"  --package-dir=<path>  Package platforms archive in specific path.\"\n    echo \"  --debug-libs          Also generate C source file for generated libraries.\"\n    echo \"\"\n    echo \"Use the --minimal flag if you want to generate minimal sysroot directories\"\n    echo \"that will be used to generate prebuilt toolchains. Otherwise, the script\"\n    echo \"will require these toolchains to be pre-installed and will use them to\"\n    echo \"generate shared system shared libraries from the symbol list files.\"\n    exit 0\nfi\n\nif [ -n \"$OPTION_SRCDIR\" ] ; then\n    SRCDIR=\"$OPTION_SRCDIR\";\n    if [ ! -d \"$SRCDIR\" ] ; then\n        echo \"ERROR: Source directory $SRCDIR does not exist !\"\n        exit 1\n    fi\n    if [ ! -d \"$SRCDIR/platforms/android-3\" ] ; then\n        echo \"ERROR: Invalid source directory: $SRCDIR\"\n        echo \"Please make sure it contains platforms/android-3 etc...\"\n        exit 1\n    fi\nelse\n    SRCDIR=`dirname $ANDROID_NDK_ROOT`/development/ndk\n    log \"Using source directory: $SRCDIR\"\nfi\n\nif [ -n \"$OPTION_PLATFORM\" ] ; then\n    PLATFORMS=$(commas_to_spaces $OPTION_PLATFORM)\nelse\n    # Build the list from the content of SRCDIR\n    PLATFORMS=`extract_platforms_from \"$SRCDIR\"`\n    log \"Using platforms: $PLATFORMS\"\nfi\n\n# Remove the android- prefix of any platform name\nPLATFORMS=$(echo $PLATFORMS | tr ' ' '\\n' | sed -e 's!^android-!!g' | tr '\\n' ' ')\n\nif [ -n \"$OPTION_DSTDIR\" ] ; then\n    DSTDIR=\"$OPTION_DSTDIR\"\nelse\n    log \"Using destination directory: $DSTDIR\"\nfi\n\n# Handle architecture list\n#\n# We support both --arch and --abi for backwards compatibility reasons\n# --arch is the new hotness, --abi is deprecated.\n#\nif [ -n \"$OPTION_ARCH\" ]; then\n    OPTION_ARCH=$(commas_to_spaces $OPTION_ARCH)\nfi\n\nif [ -n \"$OPTION_ABI\" ] ; then\n    echo \"WARNING: --abi=<names> is deprecated. Use --arch=<names> instead!\"\n    OPTION_ABI=$(commas_to_spaces $OPTION_ABI)\n    if [ -n \"$OPTION_ARCH\" -a \"$OPTION_ARCH\" != \"$OPTION_ABI\" ]; then\n        echo \"ERROR: You can't use both --abi and --arch with different values!\"\n        exit 1\n    fi\n    OPTION_ARCH=$OPTION_ABI\nfi\n\nif [ -n \"$OPTION_ARCH\" ] ; then\n    ARCHS=\"$OPTION_ARCH\"\nfi\nlog \"Using architectures: $(commas_to_spaces $ARCHS)\"\n\nlog \"Checking source platforms.\"\nfor PLATFORM in $PLATFORMS; do\n    DIR=\"$SRCDIR/platforms/android-$PLATFORM\"\n    if [ ! -d $DIR ] ; then\n        echo \"ERROR: Directory missing: $DIR\"\n        echo \"Please check your --platform=<list> option and try again.\"\n        exit 2\n    else\n        log \"  $DIR\"\n    fi\ndone\n\nlog \"Checking source platform architectures.\"\nBAD_ARCHS=\nfor ARCH in $ARCHS; do\n    eval CHECK_$ARCH=no\ndone\nfor PLATFORM in $PLATFORMS; do\n    for ARCH in $ARCHS; do\n        DIR=\"$SRCDIR/platforms/android-$PLATFORM/arch-$ARCH\"\n        if [ -d $DIR ] ; then\n            log \"  $DIR\"\n            eval CHECK_$ARCH=yes\n        fi\n    done\ndone\n\nif [ \"$OPTION_MINIMAL\" ]; then\n    OPTION_SAMPLES=\n    OPTION_FAST_COPY=yes\nfi\n\nif [ -z \"$OPTION_FAST_COPY\" ]; then\n    realpath --version 2>/dev/null | grep -iq gnu\n    if [ $? -ne 0 ]; then\n        log \"GNU realpath not available (coreutils not installed?); force --fast-copy mode\"\n        OPTION_FAST_COPY=yes\n    fi\nfi\n\nBAD_ARCHS=\nfor ARCH in $ARCHS; do\n    CHECK=`var_value CHECK_$ARCH`\n    log \"  $ARCH check: $CHECK\"\n    if [ \"$CHECK\" = no ] ; then\n        if [ -z \"$BAD_ARCHS\" ] ; then\n            BAD_ARCHS=$ARCH\n        else\n            BAD_ARCHS=\"$BAD_ARCHS $ARCH\"\n        fi\n    fi\ndone\n\nif [ -n \"$BAD_ARCHS\" ] ; then\n    echo \"ERROR: Source directory doesn't support these ARCHs: $BAD_ARCHS\"\n    exit 3\nfi\n\n# $1: source directory (relative to $SRCDIR)\n# $2: destination directory (relative to $DSTDIR)\n# $3: description of directory contents (e.g. \"sysroot\" or \"samples\")\ncopy_src_directory ()\n{\n    local SDIR=\"$SRCDIR/$1\"\n    local DDIR=\"$DSTDIR/$2\"\n    if [ -d \"$SDIR\" ] ; then\n        log \"Copying $3 from \\$SRC/$1 to \\$DST/$2.\"\n        mkdir -p \"$DDIR\" && (cd \"$SDIR\" && 2>/dev/null tar chf - *) | (tar xf - -C \"$DDIR\")\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not copy $3 directory $SDIR into $DDIR !\"\n            exit 5\n        fi\n    fi\n}\n\n# $1: source dir\n# $2: destination dir\n# $3: reverse path\n#\nsymlink_src_directory_inner ()\n{\n    local files file subdir rev\n    mkdir -p \"$DSTDIR/$2\"\n    rev=$3\n    files=$(cd $DSTDIR/$1 && ls -1p)\n    for file in $files; do\n        if [ \"$file\" = \"${file%%/}\" ]; then\n            log \"Link \\$DST/$2/$file --> $rev/$1/$file\"\n            ln -s $rev/$1/$file $DSTDIR/$2/$file\n        else\n            file=${file%%/}\n            symlink_src_directory_inner \"$1/$file\" \"$2/$file\" \"$rev/..\"\n        fi\n    done\n}\n# Create a symlink-copy of directory $1 into $2\n# This function is recursive.\n#\n# $1: source directory (relative to $SRCDIR)\n# $2: destination directory (relative to $DSTDIR)\nsymlink_src_directory ()\n{\n    symlink_src_directory_inner \"$1\" \"$2\" \"$(reverse_path $1)\"\n}\n\n# Remove unwanted symbols\n# $1: symbol file (one symbol per line)\n# $2+: Input symbol list\n# Out: Input symbol file, without any unwanted symbol listed by $1\nremove_unwanted_symbols_from ()\n{\n  local SYMBOL_FILE=\"$1\"\n  shift\n  if [ -f \"$SYMBOL_FILE\" ]; then\n    echo \"$@\" | tr ' ' '\\n' | grep -v -F -x -f $SYMBOL_FILE | tr '\\n' ' '\n  else\n    echo \"$@\"\n  fi\n}\n\n# Remove unwanted symbols from a library's functions list.\n# $1: Architecture name\n# $2: Library name (e.g. libc.so)\n# $3+: Input symbol list\n# Out: Input symbol list without any unwanted symbols.\nremove_unwanted_function_symbols ()\n{\n  local ARCH LIBRARY SYMBOL_FILE\n  ARCH=$1\n  LIBRARY=$2\n  shift; shift\n  SYMBOL_FILE=$PROGDIR/unwanted-symbols/$ARCH/$LIBRARY.functions.txt\n  remove_unwanted_symbols_from $SYMBOL_FILE \"$@\"\n}\n\n# Same as remove_unwanted_functions_symbols, but for variable names.\n#\nremove_unwanted_variable_symbols ()\n{\n  local ARCH LIBRARY SYMBOL_FILE\n  ARCH=$1\n  LIBRARY=$2\n  shift; shift\n  SYMBOL_FILE=$PROGDIR/unwanted-symbols/$ARCH/$LIBRARY.variables.txt\n  remove_unwanted_symbols_from $SYMBOL_FILE \"$@\"\n}\n\n# $1: Architecture\n# Out: compiler command\nget_default_compiler_for_arch()\n{\n    local ARCH=$1\n    local TOOLCHAIN_PREFIX CC GCC_VERSION\n\n    if [ -n \"$OPTION_GCC_VERSION\" -a \"$OPTION_GCC_VERSION\" != \"default\" ]; then\n        GCC_VERSION=$OPTION_GCC_VERSION\n    else\n        GCC_VERSION=$(get_default_gcc_version_for_arch $ARCH)\n    fi\n\n    for TAG in $HOST_TAG $HOST_TAG32; do\n        TOOLCHAIN_PREFIX=\"$NDK_DIR/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\"\n        TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX%-}\n        CC=\"$TOOLCHAIN_PREFIX-gcc\"\n        if [ -f \"$CC\" ]; then\n            break;\n        fi\n    done\n\n    if [ ! -f \"$CC\" ]; then\n        dump \"ERROR: $ARCH toolchain not installed: $CC\"\n        dump \"Important: Use the --minimal flag to use this script without generated system shared libraries.\"\n        dump \"This is generally useful when you want to generate the host cross-toolchain programs.\"\n        exit 1\n    fi\n    echo \"$CC\"\n}\n\n# $1: library name\n# $2: functions list\n# $3: variables list\n# $4: destination file\n# $5: compiler command\ngen_shared_lib ()\n{\n    local LIBRARY=$1\n    local FUNCS=\"$2\"\n    local VARS=\"$3\"\n    local DSTFILE=\"$4\"\n    local CC=\"$5\"\n\n    # Now generate a small C source file that contains similarly-named stubs\n    echo \"/* Auto-generated file, do not edit */\" > $TMPC\n    local func var\n    for func in $FUNCS; do\n        echo \"void $func(void) {}\" >> $TMPC\n    done\n    for var in $VARS; do\n        echo \"int $var = 0;\" >> $TMPC\n    done\n\n    # Build it with our cross-compiler. It will complain about conflicting\n    # types for built-in functions, so just shut it up.\n    COMMAND=\"$CC -Wl,-shared,-Bsymbolic -Wl,-soname,$LIBRARY -nostdlib -o $TMPO $TMPC -Wl,--exclude-libs,libgcc.a\"\n    echo \"## COMMAND: $COMMAND\" > $TMPL\n    $COMMAND 1>>$TMPL 2>&1\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't generate shared library for: $LIBRARY\"\n        dump \"See the content of $TMPC and $TMPL for details.\"\n        cat $TMPL | tail -10\n        exit 1\n    fi\n\n    # Copy to our destination now\n    local libdir=$(dirname \"$DSTFILE\")\n    mkdir -p \"$libdir\" && rm -f \"$DSTFILE\" && cp -f $TMPO \"$DSTFILE\"\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't copy shared library for: $LIBRARY\"\n        dump \"target location is: $DSTFILE\"\n        exit 1\n    fi\n    if [ \"$LIBRARY\" = \"libc.so\" ]; then\n        cp -f \"$DSTFILE\" \"$libdir/libbionic.so\"\n        if [ $? != 0 ]; then\n            dump \"ERROR: Can't copy shared library for: libbionic.so\"\n            dump \"target location is: $libdir/libbionic.so\"\n            exit 1\n        fi\n    fi\n\n    if [ \"$OPTION_DEBUG_LIBS\" ]; then\n      cp $TMPC $DSTFILE.c\n      echo \"$FUNCS\" | tr ' ' '\\n' > $DSTFILE.functions.txt\n      echo \"$VARS\" | tr ' ' '\\n' > $DSTFILE.variables.txt\n    fi\n}\n\n# $1: Architecture\n# $2: symbol source directory (relative to $SRCDIR)\n# $3: destination directory for generated libs (relative to $DSTDIR)\n# $4: compiler flags (optional)\ngen_shared_libraries ()\n{\n    local ARCH=$1\n    local SYMDIR=\"$SRCDIR/$2\"\n    local DSTDIR=\"$DSTDIR/$3\"\n    local FLAGS=\"$4\"\n    local CC funcs vars numfuncs numvars\n\n    # Let's locate the toolchain we're going to use\n    CC=$(get_default_compiler_for_arch $ARCH)\" $FLAGS\"\n    if [ $? != 0 ]; then\n        echo $CC\n        exit 1\n    fi\n\n    # In certain cases, the symbols directory doesn't exist,\n    # e.g. on x86 for PLATFORM < 9\n    if [ ! -d \"$SYMDIR\" ]; then\n        return\n    fi\n\n    # Let's list the libraries we're going to generate\n    LIBS=$( (cd $SYMDIR && 2>/dev/null ls *.functions.txt) | sort -u | sed -e 's!\\.functions\\.txt$!!g')\n\n    for LIB in $LIBS; do\n        funcs=$(cat \"$SYMDIR/$LIB.functions.txt\" 2>/dev/null)\n        vars=$(cat \"$SYMDIR/$LIB.variables.txt\" 2>/dev/null)\n        funcs=$(remove_unwanted_function_symbols $ARCH libgcc.a $funcs)\n        funcs=$(remove_unwanted_function_symbols $ARCH $LIB $funcs)\n        vars=$(remove_unwanted_variable_symbols $ARCH libgcc.a $vars)\n        vars=$(remove_unwanted_variable_symbols $ARCH $LIB $vars)\n        numfuncs=$(echo $funcs | wc -w)\n        numvars=$(echo $vars | wc -w)\n        log \"Generating $ARCH shared library for $LIB ($numfuncs functions + $numvars variables)\"\n\n        gen_shared_lib $LIB \"$funcs\" \"$vars\" \"$DSTDIR/$LIB\" \"$CC\"\n    done\n}\n\n# $1: platform number\n# $2: architecture name\n# $3: common source directory (for crtbrand.c, etc)\n# $4: source directory (for *.S files)\n# $5: destination directory\n# $6: flags for compiler (optional)\ngen_crt_objects ()\n{\n    local API=$1\n    local ARCH=$2\n    local COMMON_SRC_DIR=\"$SRCDIR/$3\"\n    local SRC_DIR=\"$SRCDIR/$4\"\n    local DST_DIR=\"$DSTDIR/$5\"\n    local FLAGS=\"$6\"\n    local SRC_FILE DST_FILE\n    local CC\n\n    if [ ! -d \"$SRC_DIR\" ]; then\n        return\n    fi\n\n    # Let's locate the toolchain we're going to use\n    CC=$(get_default_compiler_for_arch $ARCH)\" $FLAGS\"\n    if [ $? != 0 ]; then\n        echo $CC\n        exit 1\n    fi\n\n    CRTBRAND_S=$DST_DIR/crtbrand.s\n    log \"Generating platform $API crtbrand assembly code: $CRTBRAND_S\"\n    (cd \"$COMMON_SRC_DIR\" && mkdir -p `dirname $CRTBRAND_S` && $CC -DPLATFORM_SDK_VERSION=$API -fpic -S -o - crtbrand.c | \\\n        sed -e '/\\.note\\.ABI-tag/s/progbits/note/' > \"$CRTBRAND_S\") 1>>$TMPL 2>&1\n    if [ $? != 0 ]; then\n        dump \"ERROR: Could not generate $CRTBRAND_S from $COMMON_SRC_DIR/crtbrand.c\"\n        dump \"Please see the content of $TMPL for details!\"\n        cat $TMPL | tail -10\n        exit 1\n    fi\n\n    for SRC_FILE in $(cd \"$SRC_DIR\" && ls crt*.[cS]); do\n        DST_FILE=${SRC_FILE%%.c}\n        DST_FILE=${DST_FILE%%.S}.o\n\n        case \"$DST_FILE\" in\n            \"crtend.o\")\n                # Special case: crtend.S must be compiled as crtend_android.o\n                # This is for long historical reasons, i.e. to avoid name conflicts\n                # in the past with other crtend.o files. This is hard-coded in the\n                # Android toolchain configuration, so switch the name here.\n                DST_FILE=crtend_android.o\n                ;;\n            \"crtbegin_dynamic.o\"|\"crtbegin_static.o\")\n                # Add .note.ABI-tag section\n                SRC_FILE=$SRC_FILE\" $CRTBRAND_S\"\n                ;;\n            \"crtbegin.o\")\n                # If we have a single source for both crtbegin_static.o and\n                # crtbegin_dynamic.o we generate one and make a copy later.\n                DST_FILE=crtbegin_dynamic.o\n                # Add .note.ABI-tag section\n                SRC_FILE=$SRC_FILE\" $CRTBRAND_S\"\n                ;;\n        esac\n\n        log \"Generating $ARCH C runtime object: $DST_FILE\"\n        (cd \"$SRC_DIR\" && $CC \\\n                 -I$SRCDIR/../../bionic/libc/include \\\n                 -I$SRCDIR/../../bionic/libc/arch-common/bionic \\\n                 -I$SRCDIR/../../bionic/libc/arch-$ARCH/include \\\n                 -DPLATFORM_SDK_VERSION=$API \\\n                 -O2 -fpic -Wl,-r -nostdlib -o \"$DST_DIR/$DST_FILE\" $SRC_FILE) 1>>$TMPL 2>&1\n        if [ $? != 0 ]; then\n            dump \"ERROR: Could not generate $DST_FILE from $SRC_DIR/$SRC_FILE\"\n            dump \"Please see the content of $TMPL for details!\"\n            cat $TMPL | tail -10\n            exit 1\n        fi\n        if [ ! -s \"$DST_DIR/crtbegin_static.o\" ]; then\n            cp \"$DST_DIR/crtbegin_dynamic.o\" \"$DST_DIR/crtbegin_static.o\"\n        fi\n    done\n    rm -f \"$CRTBRAND_S\"\n}\n\n# $1: platform number\n# $2: architecture\n# $3: target NDK directory\ngenerate_api_level ()\n{\n    local API=$1\n    local ARCH=$2\n    local HEADER=\"platforms/android-$API/arch-$ARCH/usr/include/android/api-level.h\"\n    log \"Generating: $HEADER\"\n    rm -f \"$3/$HEADER\"  # Remove symlink if any.\n    cat > \"$3/$HEADER\" <<EOF\n/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n#ifndef ANDROID_API_LEVEL_H\n#define ANDROID_API_LEVEL_H\n\n#define __ANDROID_API__ $API\n\n#endif /* ANDROID_API_LEVEL_H */\nEOF\n}\n\n# Copy platform sysroot and samples into your destination\n#\n\n# if $SRC/android-$PLATFORM/arch-$ARCH exists\n#   $SRC/android-$PLATFORM/include --> $DST/android-$PLATFORM/arch-$ARCH/usr/include\n#   $SRC/android-$PLATFORM/arch-$ARCH/include --> $DST/android-$PLATFORM/arch-$ARCH/usr/include\n#   $SRC/android-$PLATFORM/arch-$ARCH/lib --> $DST/android-$PLATFORM/arch-$ARCH/usr/lib\n#\nif [ -z \"$OPTION_OVERLAY\" ]; then\n    rm -rf $DSTDIR/platforms && mkdir -p $DSTDIR/platforms\nfi\nfor ARCH in $ARCHS; do\n    echo \"## Generating arch: $ARCH\"\n    # Find first platform for this arch\n    PREV_SYSROOT_DST=\n    PREV_PLATFORM_SRC_ARCH=\n    LIBDIR=$(get_default_libdir_for_arch $ARCH)\n\n    for PLATFORM in $PLATFORMS; do\n        echo \"## Generating platform: $PLATFORM\"\n        PLATFORM_DST=platforms/android-$PLATFORM   # Relative to $DSTDIR\n        PLATFORM_SRC=$PLATFORM_DST                 # Relative to $SRCDIR\n        SYSROOT_DST=$PLATFORM_DST/arch-$ARCH/usr\n        # Skip over if there is no arch-specific file for this platform\n        # and no destination platform directory was created. This is needed\n        # because x86 and MIPS don't have files for API levels 3-8.\n        if [ -z \"$PREV_SYSROOT_DST\" -a \\\n           ! -d \"$SRCDIR/$PLATFORM_SRC/arch-$ARCH\" ]; then\n            log \"Skipping: \\$SRC/$PLATFORM_SRC/arch-$ARCH\"\n            continue\n        fi\n\n        log \"Populating \\$DST/platforms/android-$PLATFORM/arch-$ARCH\"\n\n        # If this is not the first destination directory, copy over, or\n        # symlink the files from the previous one now.\n        if [ \"$PREV_SYSROOT_DST\" ]; then\n            if [ \"$OPTION_FAST_COPY\" ]; then\n                log \"Copying \\$DST/$PREV_SYSROOT_DST to \\$DST/$SYSROOT_DST\"\n                copy_directory \"$DSTDIR/$PREV_SYSROOT_DST\" \"$DSTDIR/$SYSROOT_DST\"\n            else\n                log \"Symlink-copying \\$DST/$PREV_SYSROOT_DST to \\$DST/$SYSROOT_DST\"\n                symlink_src_directory $PREV_SYSROOT_DST $SYSROOT_DST\n            fi\n        fi\n\n        # If this is the first destination directory, copy the common\n        # files from previous platform directories into this one.\n        # This helps copy the common headers from android-3 to android-8\n        # into the x86 and mips android-9 directories.\n        if [ -z \"$PREV_SYSROOT_DST\" ]; then\n            for OLD_PLATFORM in $PLATFORMS; do\n                if [ \"$OLD_PLATFORM\" = \"$PLATFORM\" ]; then\n                    break\n                fi\n                copy_src_directory platforms/android-$OLD_PLATFORM/include \\\n                                   $SYSROOT_DST/include \\\n                                   \"common android-$OLD_PLATFORM headers\"\n            done\n        fi\n\n        # There are two set of bionic headers: the original ones haven't been updated since\n        # gingerbread except for bug fixing, and the new ones in android-$FIRST_API64_LEVEL\n        # with 64-bit support.  Before the old bionic headers are deprecated/removed, we need\n        # to remove stale old headers when createing platform = $FIRST_API64_LEVEL\n        if [ \"$PLATFORM\" = \"$FIRST_API64_LEVEL\" ]; then\n            log \"Removing stale bionic headers in \\$DST/$SYSROOT_DST/include\"\n            nonbionic_files=\"android EGL GLES GLES2 GLES3 KHR media OMXAL SLES jni.h thread_db.h zconf.h zlib.h\"\n            if [ -d \"$DSTDIR/$SYSROOT_DST/include/\" ]; then\n                files=$(cd \"$DSTDIR/$SYSROOT_DST/include/\" && ls)\n                for file in $files; do\n                    if [ \"$nonbionic_files\" = \"${nonbionic_files%%${file}*}\" ]; then\n                        rm -rf \"$DSTDIR/$SYSROOT_DST/include/$file\"\n                    fi\n                done\n            fi\n        fi\n\n        # Now copy over all non-arch specific include files\n        copy_src_directory $PLATFORM_SRC/include $SYSROOT_DST/include \"common system headers\"\n        copy_src_directory $PLATFORM_SRC/arch-$ARCH/include $SYSROOT_DST/include \"$ARCH system headers\"\n\n        generate_api_level \"$PLATFORM\" \"$ARCH\" \"$DSTDIR\"\n\n        # If --minimal is not used, copy or generate binary files.\n        if [ -z \"$OPTION_MINIMAL\" ]; then\n            # Copy the prebuilt static libraries.  We need full set for multilib compiler for some arch\n            case \"$ARCH\" in\n                x86_64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"x86 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64 $SYSROOT_DST/lib64 \"x86_64 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libx32 $SYSROOT_DST/libx32 \"x32 sysroot libs\"\n                    ;;\n                mips64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64r2 $SYSROOT_DST/lib64r2 \"mips -mabi=64 -mips64r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64 $SYSROOT_DST/lib64 \"mips -mabi=64 -mips64r6 sysroot libs\"\n                    ;;\n                mips)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs\"\n                    ;;\n                *)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/$LIBDIR $SYSROOT_DST/$LIBDIR \"$ARCH sysroot libs\"\n                    ;;\n            esac\n\n            # Generate C runtime object files when available\n            PLATFORM_SRC_ARCH=$PLATFORM_SRC/arch-$ARCH/src\n            if [ ! -d \"$SRCDIR/$PLATFORM_SRC_ARCH\" ]; then\n                PLATFORM_SRC_ARCH=$PREV_PLATFORM_SRC_ARCH\n            else\n                PREV_PLATFORM_SRC_ARCH=$PLATFORM_SRC_ARCH\n            fi\n\n            # Genreate crt objects\n            case \"$ARCH\" in\n                x86_64)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-m32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64 \"-m64\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libx32 \"-mx32\"\n                    ;;\n                mips64)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64r2 \"-mabi=64 -mips64r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64 \"-mabi=64 -mips64r6\"\n                    ;;\n                mips)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    ;;\n                *)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/$LIBDIR\n                    ;;\n            esac\n\n            # Generate shared libraries from symbol files\n            case \"$ARCH\" in\n                x86_64)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-m32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64 \"-m64\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libx32 \"-mx32\"\n                    ;;\n                mips64)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64r2 \"-mabi=64 -mips64r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64 \"-mabi=64 -mips64r6\"\n                    ;;\n                mips)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    ;;\n                *)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/$LIBDIR\n                    ;;\n            esac\n        else\n            # Copy the prebuilt binaries to bootstrap GCC\n            case \"$ARCH\" in\n                x86_64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"x86 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64 $SYSROOT_DST/lib64 \"x86_64 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libx32 $SYSROOT_DST/libx32 \"x32 sysroot libs (boostrap)\"\n                    ;;\n                mips64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64r2 $SYSROOT_DST/lib64r2 \"mips -mabi=64 -mips64r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64 $SYSROOT_DST/lib64 \"mips -mabi=64 -mips64r6 sysroot libs (boostrap)\"\n                    ;;\n                mips)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs (boostrap)\"\n                    ;;\n                *)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap $SYSROOT_DST/$LIBDIR \"$ARCH sysroot libs (boostrap)\"\n                    ;;\n            esac\n        fi\n        PREV_SYSROOT_DST=$SYSROOT_DST\n    done\ndone\n\nCRYSTAX_OPTIONS=\nif [ \"$OPTION_FAST_COPY\" = \"yes\" ]; then\n    CRYSTAX_OPTIONS=\"$CRYSTAX_OPTIONS --fast-copy\"\nfi\nCRYSTAX_OPTIONS=\"$CRYSTAX_OPTIONS --headers\"\n$NDK_DIR/$CRYSTAX_SUBDIR/bin/patch-sysroot $CRYSTAX_OPTIONS\nfail_panic \"Couldn't generate libcrystax headers\"\n\n#\n# $SRC/android-$PLATFORM/samples --> $DST/samples\n#\nif [ \"$OPTION_SAMPLES\" ] ; then\n    # Copy platform samples and generic samples into your destination\n    #\n    # $SRC/samples/ --> $DST/samples/\n    # $SRC/android-$PLATFORM/samples/ --> $DST/samples\n    #\n    dump \"Copying generic samples\"\n    if [ -z \"$OPTION_OVERLAY\" ]; then\n        for d in `cat $DSTDIR/samples/.gitignore | tr -d '/' | tr '\\n' ' '`; do\n            rm -rf $DSTDIR/samples/$d\n        done\n    fi\n    copy_src_directory  samples samples samples\n\n    for PLATFORM in $PLATFORMS; do\n        dump \"Copy android-$PLATFORM samples\"\n        # $SRC/platform-$PLATFORM/samples --> $DST/samples\n        copy_src_directory platforms/android-$PLATFORM/samples samples samples\n    done\n\n    # Cleanup generated files in samples\n    rm -rf \"$DSTDIR/samples/*/obj\"\n    rm -rf \"$DSTDIR/samples/*/libs\"\nfi\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    FLAGS=\"--package-dir=$PACKAGE_DIR\"\n    if [ \"$OPTION_SAMPLES\" ]; then\n        FLAGS=\"$FLAGS --samples\"\n    fi\n    run $NDK_DIR/build/instruments/package-platforms.sh $FLAGS\n    fail_panic \"Can't package platforms\"\nfi\n\nlog \"Done !\"\n"
  },
  {
    "path": "build/instruments/gen-system-symbols.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# gen-system-symbols.sh\n#\n# This tool is used to read the shared library from a source directory\n# (SRC) and extract the list of functions and variables.\n#\n# Then, for each library, it will generate in (DST) two text files\n# named <library>.functions.txt and <library>.variables.txt\n#\n\n# Only runs on Linux because it requires the \"readelf\" utility\n#\n\n. `dirname $0`/prebuilt-common.sh\n\nVERBOSE=no\n\nPROGRAM_PARAMETERS=\"<src-dir> <dst-dir>\"\nPROGRAM_DESCRIPTION=\\\n\"This program is used to parse all shared libraries in <src-dir>\nand extract, for each one of them, the list of functions and variables\nthat it exports.\n\nFor some of these libraries, it will remove symbols that are not meant\nto be imported (unless you use --no-symbol-filtering)\n\nThese lists will then be saved into two files:\n\n  <dst-dir>/<libname>.functions.txt\n  <dst-dir>/<libname>.variables.txt\n\"\n\nNO_FILTERING=\nregister_var_option \"--no-symbol-filtering\" NO_FILTERING \"Disable symbol filtering\"\n\nextract_parameters \"$@\"\n\nparse_params ()\n{\n    SRCDIR=$1\n    DSTDIR=$2\n\n    if [ -z \"$SRCDIR\" ]; then\n        dump \"ERROR: Missing first parameter (source directory path), see --help\"\n        exit 1\n    fi\n\n    if [ -z \"$DSTDIR\" ]; then\n        dump \"ERROR: Missing second parameter (destination directory path), see --help\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRCDIR\" ]; then\n        dump \"ERROR: Not a source directory: $SRCDIR\"\n        exit 1\n    fi\n\n    mkdir -p $DSTDIR\n    fail_panic \"Could not create destination directory: $DSTDIR\"\n}\n\nparse_params $PARAMETERS\n\nREADELF=readelf\n\n# $1: shared library path\nget_library_functions ()\n{\n    $READELF -s -D -W $1 | awk '$5 ~ /FUNC/ && $6 ~ /GLOBAL|WEAK/ && $8 !~ /UND/ { print $9; }' | sort -u\n}\n\n# $1: shared library path\nget_library_variables ()\n{\n    $READELF -s -D -W $1 | awk '$5 ~ /OBJECT/ && $6 ~ /GLOBAL|WEAK/ && $8 !~ /UND/ { print $9; }' | sort -u\n}\n\n# Temp file used to list shared library symbol exclusions\n# See set_symbol_excludes and extract_shared_library_xxxx functions below\nSYMBOL_EXCLUDES=$TMPDIR/ndk-symbol-excludes.txt\n\n# Temp file used to list shared library symbol inclusions, these\n# are essentially overrides to the content of SYMBOL_EXCLUDES\nSYMBOL_INCLUDES=$TMPDIR/ndk-symbol-includes.txt\n\n# Temp file used to filter symbols\nSYMBOL_TMPFILE=$TMPDIR/ndk-symbols-list.txt\n\n# Reset the symbol exclusion list to its default\nreset_symbol_excludes ()\n{\n    # By default, do not export C++ mangled symbol, which all start with _Z\n    echo '^_Z' > $SYMBOL_EXCLUDES\n\n    # __INIT_ARRAY__, __FINI_ARRAY__ and _GLOBAL_OFFSET_TABLE_ are special symbols\n    # that should normally be hidden.\n    echo \"^__INIT_ARRAY__\" >> $SYMBOL_EXCLUDES\n    echo \"^__FINI_ARRAY__\" >> $SYMBOL_EXCLUDES\n    echo \"^_GLOBAL_OFFSET_TABLE_\" >> $SYMBOL_EXCLUDES\n    > $SYMBOL_INCLUDES\n}\n\n# Add new exclusion patterns to SYMBOL_EXCLUDES\nset_symbol_excludes ()\n{\n    (echo \"$@\" | tr ' ' '\\n') >> $SYMBOL_EXCLUDES\n}\n\n# Add new inclusion patterns to SYMBOL_INCLUDES\nset_symbol_includes ()\n{\n    (echo \"$@\" | tr ' ' '\\n') >> $SYMBOL_INCLUDES\n}\n\n# Clear symbol exclusion/inclusion files\nclear_symbol_excludes ()\n{\n    rm -f $SYMBOL_EXCLUDES $SYMBOL_INCLUDES\n}\n\n# Filter the list of symbols from a file\n# $1: path to symbol list file\nfilter_symbols ()\n{\n    (grep -v -f $SYMBOL_EXCLUDES $1 ; grep -f $SYMBOL_INCLUDES $1) | sort -u\n}\n\n# $1: Library name\n# $2+: List of symbols (functions or variables)\n# Out: sorted list of filtered symbols, based on library name\nfilter_library_symbols ()\n{\n    local LIB=$1\n    shift\n    local SYMBOLS=\"$@\"\n    (echo \"$SYMBOLS\" | tr ' ' '\\n' | sort -u) > $SYMBOL_TMPFILE\n\n    reset_symbol_excludes\n\n    case $LIB in\n        libc.so)\n            # Remove a few internal symbols that should not be exposed\n            # from the C library (we plan to clean that up soon by using the\n            # \"hidden\" visibility attribute in the near future).\n            #\n            set_symbol_excludes \\\n                '^the_' '^dns_' 'load_domain_search_list' 'res_get_dns_changed' \\\n                '^_resolv_cache' '^_dns_getht' '^_thread_atexit' \\\n                '^free_malloc_leak_info' 'fake_gmtime_r' 'fake_localtime_r' \\\n                '^gAllocationsMutex' '^gHashTable' '^gMallocLeakZygoteChild'\n            # libc.so now absort libstdc++ use to have, thus contains C++ symbols from now on\n            set_symbol_includes '^_Z.*'\n            ;;\n        libstdc++.so)\n            # This used to be the only library that is allowed to export C++ symbols for now.\n            set_symbol_includes '^_Z.*'\n            ;;\n        liblog.so)\n            set_symbol_excludes '^.*'         # exclude everything\n            set_symbol_includes '^__android_' # except __android_xxxx functions\n            ;;\n        libOpenSLES.so)\n            set_symbol_excludes '^_' '^MPH_' # remove MPH_to_xxx definitions\n            ;;\n        libGLESv*.so)\n            # Exclude non-OES extension entry points\n            set_symbol_excludes 'EXT$'\n            set_symbol_excludes 'AMD$'\n            set_symbol_excludes 'ANGLE$'\n            set_symbol_excludes 'APPLE$'\n            set_symbol_excludes 'IMG$'\n            set_symbol_excludes 'NV$'\n            set_symbol_excludes 'QCOM$'\n            ;;\n    esac\n    filter_symbols \"$SYMBOL_TMPFILE\"\n}\n\nfor LIB in $(cd $SRCDIR && ls lib*.so); do\n    SRCLIB=$SRCDIR/$LIB\n    log \"Extracting symbols from $LIB\"\n    FUNCS=$(get_library_functions $SRCLIB)\n    VARS=$(get_library_variables $SRCLIB)\n    if [ -z \"$NO_FILTERING\" ]; then\n        FUNCS=$(filter_library_symbols $LIB $FUNCS)\n        VARS=$(filter_library_symbols $LIB $VARS)\n    fi\n    NUMFUNCS=$(echo $FUNCS | wc -w)\n    NUMVARS=$(echo $VARS | wc -w)\n    log \"    Found $NUMFUNCS functions and $NUMVARS variables\"\n    (echo \"$FUNCS\" | tr ' ' '\\n') > $DSTDIR/$LIB.functions.txt\n    (echo \"$VARS\" | tr ' ' '\\n') > $DSTDIR/$LIB.variables.txt\ndone\n"
  },
  {
    "path": "build/instruments/gen-toolchain-wrapper.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the gcc and toolchain binaries\n#  for the Android NDK.\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\nPROGRAM_PARAMETERS=\"<dst-dir>\"\nPROGRAM_DESCRIPTION=\"\\\nThis script allows you to generate a 'wrapper toolchain', i.e. a set of\nsimple scripts that act as toolchain binaries (e.g. my-cc, my-c++, my-ld,\netc...) but call another installed toolchain instead, possibly with additional\ncommand-line options.\n\nFor example, imagine we want a toolchain that generates 32-bit binaries while\nrunning on a 64-bit system, we could call this script as:\n\n   $PROGNAME --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m32\" /tmp/my-toolchain\n\nThen, this will create programs like:\n\n   /tmp/my-toolchain/my-cc\n   /tmp/my-toolchain/my-gcc\n   /tmp/my-toolchain/my-c++\n   /tmp/my-toolchain/my-g++\n   /tmp/my-toolchain/my-ld\n   ...\n\nWhere the compilers and linkers will add the -m32 flag to the command-line before\ncalling the host version of 'cc', 'gcc', etc...\n\nGenerally speaking:\n\n  - The 'destination toolchain' is the one that will be called by the\n    generated wrapper script. It is identified by a 'destination prefix'\n    (e.g. 'x86_64-linux-gnu-', note the dash at the end).\n\n    If is empty by default, but can be changed with --dst-prefix=<prefix>\n\n  - The 'source prefix' is the prefix added to the generated toolchain scripts,\n    it is 'my-' by default, but can be changed with --src-prefix=<prefix>\n\n  - You can use --cflags, --cxxflags, --ldflags, etc... to add extra\n    command-line flags for the generated compiler, linker, etc.. scripts\n\n\"\n\nDEFAULT_SRC_PREFIX=\"my-\"\nDEFAULT_DST_PREFIX=\"\"\n\nSRC_PREFIX=$DEFAULT_SRC_PREFIX\nregister_var_option \"--src-prefix=<prefix>\" SRC_PREFIX \"Set source toolchain prefix\"\n\nDST_PREFIX=$DEFAULT_DST_PREFIX\nregister_var_option \"--dst-prefix=<prefix>\" DST_PREFIX \"Set destination toolchain prefix\"\n\nEXTRA_CFLAGS=\nregister_var_option \"--cflags=<options>\" EXTRA_CFLAGS \"Add extra C compiler flags\"\n\nEXTRA_CXXFLAGS=\nregister_var_option \"--cxxflags=<options>\" EXTRA_CXXFLAGS \"Add extra C++ compiler flags\"\n\nEXTRA_LDFLAGS=\nregister_var_option \"--ldflags=<options>\" EXTRA_LDFLAGS \"Add extra linker flags\"\n\nEXTRA_ASFLAGS=\nregister_var_option \"--asflags=<options>\" EXTRA_ASFLAGS \"Add extra assembler flags\"\n\nEXTRA_ARFLAGS=\nregister_var_option \"--arflags=<options>\" EXTRA_ARFLAGS \"Add extra archiver flags\"\n\nCCACHE=\nregister_var_option \"--ccache=<prefix>\" CCACHE \"Use ccache compiler driver\"\n\nPROGRAMS=\"cc gcc c++ g++ cpp as ld ar ranlib readelf strip strings nm objdump dlltool\"\nregister_var_option \"--programs=<list>\" PROGRAMS \"List of programs to generate wrapper for\"\n\nextract_parameters \"$@\"\n\nPROGRAMS=$(commas_to_spaces \"$PROGRAMS\")\nif [ -z \"$PROGRAMS\" ]; then\n    panic \"Empty program list, nothing to do!\"\nfi\n\nDST_DIR=\"$PARAMETERS\"\nif [ -z \"$DST_DIR\" ]; then\n    panic \"Please provide a destination directory as a parameter! See --help for details.\"\nfi\n\nmkdir -p \"$DST_DIR\"\nfail_panic \"Could not create destination directory: $DST_DIR\"\n\n# Check if mingw compiler has dlfcn.h\n# $1: mignw compiler\n#\nmingw_has_dlfcn_h ()\n{\n   local CC=\"$1\"\n\n   if [ ! -f \"$CC\" ]; then\n       # compiler not found\n       return 1\n   fi\n   \"$CC\" -xc /dev/null -dM -E | grep -q MINGW\n   if [ $? != 0 ]; then\n       # not a mingw compiler\n       return 1\n   fi\n\n   \"$CC\" -xc -c /dev/null -include dlfcn.h -o /dev/null > /dev/null 2>&1\n}\n\n# Generate a small wrapper program\n#\n# $1: program name, without any prefix (e.g. gcc, g++, ar, etc..)\n# $2: source prefix (e.g. 'i586-mingw32msvc-')\n# $3: destination prefix (e.g. 'i586-px-mingw32msvc-')\n# $4: destination directory for the generate program\n#\ngen_wrapper_program ()\n{\n    local PROG=\"$1\"\n    local SRC_PREFIX=\"$2\"\n    local DST_PREFIX=\"$3\"\n    local DST_FILE=\"$4/${SRC_PREFIX}$PROG\"\n    local FLAGS=\"\"\n    local LDFLAGS=\"\"\n\n    case $PROG in\n      cc|gcc|cpp)\n          FLAGS=$FLAGS\" $EXTRA_CFLAGS\"\n          if mingw_has_dlfcn_h ${DST_PREFIX}$PROG; then\n              LDFLAGS=\"-ldl\"\n          fi\n          ;;\n      c++|g++)\n          FLAGS=$FLAGS\" $EXTRA_CXXFLAGS\"\n          if mingw_has_dlfcn_h ${DST_PREFIX}$PROG; then\n              LDFLAGS=\"-ldl\"\n          fi\n          ;;\n      ar) FLAGS=$FLAGS\" $EXTRA_ARFLAGS\";;\n      as) FLAGS=$FLAGS\" $EXTRA_ASFLAGS\";;\n      ld|ld.bfd|ld.gold) FLAGS=$FLAGS\" $EXTRA_LDFLAGS\";;\n    esac\n\n    # Add -m32 for x86_64 C/C++ compilers intended to produce 32-bit code\n    case $PROG in\n        cc|gcc|cpp|c++|g++)\n            case $SRC_PREFIX in\n                i[3456]86-*)\n                    case $DST_PREFIX in\n                        x86_64-*)\n                            FLAGS=$FLAGS\" -m32\"\n                            ;;\n                    esac\n                    ;;\n            esac\n            ;;\n    esac\n\n    if [ -n \"$CCACHE\" ]; then\n        DST_PREFIX=$CCACHE\" \"$DST_PREFIX\n    fi\n\n    cat > \"$DST_FILE\" << EOF\n#!/bin/sh\n# Auto-generated, do not edit\n${DST_PREFIX}$PROG $FLAGS \"\\$@\" $LDFLAGS\nEOF\n    chmod +x \"$DST_FILE\"\n    log \"Generating: ${SRC_PREFIX}$PROG\"\n}\n\nlog \"Generating toolchain wrappers in: $DST_DIR\"\n\nfor PROG in $PROGRAMS; do\n  gen_wrapper_program $PROG \"$SRC_PREFIX\" \"$DST_PREFIX\" \"$DST_DIR\"\ndone\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/instruments/make-release.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010, 2014, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to build an NDK release package *from* scratch !!\n# While handy, this is *not* the best way to generate NDK release packages.\n# See docs/DEVELOPMENT.TXT for details.\n#\n\n. `dirname $0`/prebuilt-common.sh\n\nforce_32bit_binaries\n\n# The default release name (use today's date)\nRELEASE=`date +%Y%m%d`\nregister_var_option \"--release=<name>\" RELEASE \"Specify release name\"\n\n# The package prefix\nPREFIX=android-ndk\nregister_var_option \"--prefix=<name>\" PREFIX \"Specify package prefix\"\n\n# Find the location of the platforms root directory\nDEVELOPMENT_ROOT=`dirname $ANDROID_NDK_ROOT`/development/ndk\nregister_var_option \"--development=<path>\" DEVELOPMENT_ROOT \"Path to development/ndk directory\"\n\n# Default location for final packages\nOUT_DIR=$TMPDIR/release\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Path to output directory\"\n\n# Force the build\nFORCE=no\nregister_var_option \"--force\" FORCE \"Force build (do not ask initial question)\"\n\n# Use --incremental to implement incremental release builds.\n# This is only useful to debug this script or the ones it calls.\nINCREMENTAL=no\nregister_var_option \"--incremental\" INCREMENTAL \"Enable incremental packaging (debug only).\"\n\nDARWIN_SSH=\nif [ \"$HOST_OS\" = \"linux\" ] ; then\nregister_var_option \"--darwin-ssh=<hostname>\" DARWIN_SSH \"Specify Darwin hostname to ssh to for the build.\"\nfi\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<vers>\" LLVM_VERSION_LIST \"List of LLVM release versions\"\n\nSKIP_HOST_PREBUILTS=no\nregister_var_option \"--skip-host-prebuilts\" SKIP_HOST_PREBUILTS \"Skip build of host prebuilts (toolchains etc)\"\n\nSKIP_TARGET_PREBUILTS=no\nregister_var_option \"--skip-target-prebuilts\" SKIP_TARGET_PREBUILTS \"Skip build of target prebuilts (libraries etc)\"\n\nSKIP_PACKAGING=no\nregister_var_option \"--skip-packaging\" SKIP_PACKAGING \"Skip packaging of just built release\"\n\n# Determine the host platforms we can build for.\n# This is the current host platform, and eventually windows if\n# we are on Linux and have the mingw32 compiler installed and\n# in our path.\n#\nHOST_SYSTEMS=\"$HOST_TAG32\"\n\nMINGW_GCC=\nCANADIAN_DARWIN_BUILD=no\nif [ \"$HOST_TAG\" = \"linux-x86\" ] ; then\n    find_mingw_toolchain\n    if [ -n \"$MINGW_GCC\" ] ; then\n        HOST_SYSTEMS=\"$HOST_SYSTEMS,windows\"\n    fi\n    # If darwin toolchain exist, build darwin too\n    if [ -z \"$DARWIN_SSH\" -a -f \"${DARWIN_TOOLCHAIN}-gcc\" ]; then\n        HOST_SYSTEMS=\"$HOST_SYSTEMS,darwin-x86\"\n        CANADIAN_DARWIN_BUILD=yes\n    fi\nfi\nif [ -n \"$DARWIN_SSH\" -a \"$HOST_SYSTEMS\" = \"${HOST_SYSTEMS%darwin-x86*}\" ]; then\n    HOST_SYSTEMS=\"$HOST_SYSTEMS,darwin-x86\"\nfi\n\nregister_var_option \"--systems=<list>\" HOST_SYSTEMS \"List of host systems to build for\"\n\nALSO_64_FLAG=\nSEPARATE_64_FLAG=\nregister_option \"--also-64\" do_ALSO_64 \"Also build 64-bit host toolchain\"\ndo_ALSO_64 () { ALSO_64_FLAG=\"--also-64\"; SEPARATE_64_FLAG=\"--separate-64\"; }\n\nONLY_64_FLAG=\nregister_option \"--only-64\" do_ONLY_64 \"Build only 64-bit host toolchain\"\ndo_ONLY_64 () { ONLY_64_FLAG=\"--try-64\"; SEPARATE_64_FLAG=\"--try-64\"; }\n\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<arch>\" ARCHS \"Specify target architectures\"\n\nTOOLCHAIN_SRCDIR=\nregister_var_option \"--toolchain-src-dir=<path>\" TOOLCHAIN_SRCDIR \"Use toolchain sources from <path>\"\n\nextract_parameters \"$@\"\n\nLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)\n\nVERBOSE_FLAG=\nif [ \"$VERBOSE\" = \"yes\" ]; then\n    VERBOSE_FLAG=\"--verbose\"\nfi\n\n# check that only one of --also-64 and --only-64 was specified\nif [ -n \"$ALSO_64_FLAG\" -a -n \"$ONLY_64_FLAG\" ] ; then\n    echo \"ERROR: Can't use both --also-64 and --only-64 at the same time\"\n    exit 1\nfi\n\n# Check if windows is specified w/o linux-x86\nif [ \"$HOST_SYSTEMS\" != \"${HOST_SYSTEMS%windows*}\" ] ; then\n    if [ -z \"$MINGW_GCC\" ]; then\n        echo \"ERROR: Can't find mingw tool with --systems=windows\"\n        exit 1\n    fi\n    if [ \"$HOST_SYSTEMS\" = \"windows\" ] ; then\n        dump \"Warning: for windows only builds only host toolchains will be built\"\n    fi\nfi\nHOST_FLAGS=\"--systems=$HOST_SYSTEMS $ALSO_64_FLAG $ONLY_64_FLAG\"\nif [ -z \"$CANADIAN_DARWIN_BUILD\" ]; then\n    # Filter out darwin-x86 in $HOST_FLAGS, because\n    # 1) On linux when cross-compiling is done via \"--darwin-ssh\", keeping darwin-x86 in --systems list\n    #    actually disable --darwin-ssh later on.\n    # 2) On MacOSX, darwin-x86 is the default, no need to be explicit.\n    #\n    HOST_FLAGS=$(echo \"$HOST_FLAGS\" | sed -e 's/darwin-x86//')\nfi\n\nif [ \"$SKIP_HOST_PREBUILTS\" != \"no\" ]; then\n    HOST_FLAGS=\"$HOST_FLAGS --skip-host-prebuilts\"\nfi\n\nif [ \"$SKIP_TARGET_PREBUILTS\" != \"no\" ]; then\n    HOST_FLAGS=\"$HOST_FLAGS --skip-target-prebuilts\"\nfi\n\n# Print a warning and ask the user if he really wants to do that !\n#\nif [ \"$FORCE\" = \"no\" -a \"$INCREMENTAL\" = \"no\" ] ; then\n    echo \"IMPORTANT WARNING !!\"\n    echo \"\"\n    echo \"This script is used to generate an NDK release package from scratch\"\n    echo \"for the following host platforms: $HOST_SYSTEMS\"\n    echo \"\"\n    echo \"This process is EXTREMELY LONG and may take SEVERAL HOURS on a dual-core\"\n    echo \"machine. If you plan to do that often, please read docs/DEVELOPMENT.TXT\"\n    echo \"that provides instructions on how to do that more easily.\"\n    echo \"\"\n    echo \"Are you sure you want to do that [y/N] \"\n    read YESNO\n    case \"$YESNO\" in\n        y|Y|yes|YES)\n            ;;\n        *)\n            echo \"Aborting !\"\n            exit 0\n    esac\nfi\n\nPROGRAM_PARAMETERS=\nPROGRAM_DESCRIPTION=\\\n\"This script is used to generate an NDK release package from scratch.\n\nThis process is EXTREMELY LONG and consists in the following steps:\n\n  - downloading toolchain sources from the Internet\n  - patching them appropriately (if needed)\n  - rebuilding the toolchain binaries for the host system\n  - rebuilding the platforms and samples directories from ../development/ndk\n  - packaging everything into a host-specific archive\n\nThis can take several hours on a dual-core machine, even assuming a very\nnice Internet connection and plenty of RAM and disk space.\n\nNote that on Linux, if you have the 'mingw32' package installed, the script\nwill also automatically generate a windows release package. You can prevent\nthat by using the --platforms option.\n\nIMPORTANT:\n        If you intend to package NDK releases often, please read the\n        file named docs/DEVELOPMENT.TXT which provides ways to do that\n        more quickly, by preparing toolchain binary tarballs that can be\n        reused for each package operation. This will save you hours of\n        your time compared to using this script!\n\"\n\n# Create directory where everything will be performed.\nRELEASE_DIR=$NDK_TMPDIR/release-$RELEASE\nunset NDK_TMPDIR  # prevent later script from reusing/removing it\nif [ \"$INCREMENTAL\" = \"no\" ] ; then\n    rm -rf $RELEASE_DIR && mkdir -p $RELEASE_DIR\nelse\n    if [ ! -d \"$RELEASE_DIR\" ] ; then\n        echo \"ERROR: Can't make incremental, missing release dir: $RELEASE_DIR\"\n        exit 1\n    fi\nfi\n\n\n#\n# Timestamp management\nTIMESTAMP_DIR=\"$RELEASE_DIR/timestamps\"\nmkdir -p \"$TIMESTAMP_DIR\"\nif [ \"$INCREMENTAL\" = \"no\" ] ; then\n    run rm -rf \"$TIMESTAMP_DIR/*\"\nfi\n\ntimestamp_set ()\n{\n    touch \"$TIMESTAMP_DIR/$1\"\n}\n\ntimestamp_clear ()\n{\n    rm -f \"$TIMESTAMP_DIR/$1\"\n}\n\ntimestamp_check ()\n{\n    if [ -f \"$TIMESTAMP_DIR/$1\" ] ; then\n        return 1\n    else\n        return 0\n    fi\n}\n\ndump \"Building for target architectures: $ARCHS\"\n\n# Step 1, If needed, download toolchain sources into a temporary directory\nif [ -n \"$TOOLCHAIN_SRCDIR\" ] ; then\n    dump \"Using toolchain source directory: $TOOLCHAIN_SRCDIR\"\n    timestamp_set   toolchain-download-sources\nelse\n    if timestamp_check toolchain-download-sources; then\n        dump \"Downloading toolchain sources...\"\n        TOOLCHAIN_SRCDIR=\"$RELEASE_DIR/toolchain-src\"\n        log \"Using toolchain source directory: $TOOLCHAIN_SRCDIR\"\n        run $ANDROID_NDK_ROOT/build/instruments/download-toolchain-sources.sh \"$TOOLCHAIN_SRCDIR\"\n        if [ \"$?\" != 0 ] ; then\n            dump \"ERROR: Could not download toolchain sources\"\n            exit 1\n        fi\n        timestamp_set   toolchain-download-sources\n        timestamp_clear build-prebuilts\n        timestamp_clear build-host-prebuilts\n        timestamp_clear build-darwin-prebuilts\n        timestamp_clear build-mingw-prebuilts\n    fi\nfi\n\n# Step 2, build the host toolchain binaries and package them\nif timestamp_check build-prebuilts; then\n    PREBUILT_DIR=\"$RELEASE_DIR/prebuilt\"\n    if timestamp_check build-host-prebuilts; then\n        dump \"Building host toolchain binaries...\"\n        run $ANDROID_NDK_ROOT/build/instruments/rebuild-all-prebuilt.sh \\\n            --package-dir=\"$PREBUILT_DIR\" \\\n            --arch=\"$ARCHS\" \\\n            --build-dir=\"$RELEASE_DIR/build\" \\\n            --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n            $HOST_FLAGS \\\n            \"$TOOLCHAIN_SRCDIR\"\n        fail_panic \"Can't build $HOST_SYSTEM binaries.\"\n        timestamp_set build-host-prebuilts\n    fi\n    if [ -n \"$DARWIN_SSH\" ] ; then\n        if timestamp_check build-darwin-prebuilts; then\n            dump \"Building Darwin prebuilts through ssh to $DARWIN_SSH...\"\n            run $ANDROID_NDK_ROOT/build/instruments/rebuild-all-prebuilt.sh \\\n                --package-dir=\"$PREBUILT_DIR\" \\\n                --arch=\"$ARCHS\" \\\n                --darwin-ssh=\"$DARWIN_SSH\" \\\n                --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n                $HOST_FLAGS \\\n                \"$TOOLCHAIN_SRCDIR\"\n            fail_panic \"Can't build Darwin binaries!\"\n            timestamp_set build-darwin-prebuilts\n        fi\n    fi\n    timestamp_set build-prebuilts\n    timestamp_clear make-packages\nfi\n\n# Step 3, package a release with everything\nif timestamp_check make-packages; then\n    if [ \"$SKIP_PACKAGING\" = \"no\" ]; then\n        dump \"Generating NDK release packages\"\n        run $ANDROID_NDK_ROOT/build/instruments/package-release.sh \\\n            $VERBOSE_FLAG \\\n            --release=$RELEASE \\\n            --prefix=$PREFIX \\\n            --out-dir=\"$OUT_DIR\" \\\n            --arch=\"$(spaces_to_commas $ARCHS)\" \\\n            --prebuilt-dir=\"$PREBUILT_DIR\" \\\n            --systems=\"$HOST_SYSTEMS\" \\\n            --development-root=\"$DEVELOPMENT_ROOT\" \\\n            --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n            \"$SEPARATE_64_FLAG\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Can't generate proper release packages.\"\n            exit 1\n        fi\n    fi # SKIP_PACKAGING\n    timestamp_set make-packages\nfi\n\ndump \"All clear. Good work! See $OUT_DIR\"\n"
  },
  {
    "path": "build/instruments/ndk-ccache-g++.sh",
    "content": "#!/bin/bash\n$NDK_CCACHE $NDK_CCACHE_CXX \"$@\"\n"
  },
  {
    "path": "build/instruments/ndk-ccache-gcc.sh",
    "content": "#!/bin/bash\n$NDK_CCACHE $NDK_CCACHE_CC \"$@\"\n"
  },
  {
    "path": "build/instruments/ndk-common.sh",
    "content": "# Copyright (C) 2009, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# A collection of shell function definitions used by various build scripts\n# in the Android NDK (Native Development Kit)\n#\n\n# Get current script name into PROGNAME\nPROGNAME=`basename $0`\n\n# Set package cache directory\nNDK_CACHE_DIR=\"/var/tmp/ndk-cache-$USER\" \nif [ ! -d \"$NDK_CACHE_DIR\" ]; then\n    mkdir -p \"$NDK_CACHE_DIR\"\n    if [ $? != 0 ]; then\n        echo \"Failed to create cache dir $NDK_CACHE_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$CRYSTAX_NDK_BASE_TMP_DIR\" ]; then\n    TMPDIR=/tmp/ndk-$USER\nelse\n    TMPDIR=\"$CRYSTAX_NDK_BASE_TMP_DIR/ndk-$USER\"\nfi\nexport TMPDIR\n\nOS=`uname -s`\nif [ \"$OS\" == \"Darwin\" -a -z \"$MACOSX_DEPLOYMENT_TARGET\" ]; then\n    export MACOSX_DEPLOYMENT_TARGET=\"10.8\"\nfi\n\n# Find the Android NDK root, assuming we are invoked from a script\n# within its directory structure.\n#\n# $1: Variable name that will receive the path\n# $2: Path of invoking script\nfind_ndk_root ()\n{\n    # Try to auto-detect the NDK root by walking up the directory\n    # path to the current script.\n    local PROGDIR=\"`dirname \\\"$2\\\"`\"\n    while [ -n \"1\" ] ; do\n        if [ -d \"$PROGDIR/build/core\" ] ; then\n            break\n        fi\n        if [ -z \"$PROGDIR\" -o \"$PROGDIR\" = '/' ] ; then\n            return 1\n        fi\n        PROGDIR=\"`cd \\\"$PROGDIR/..\\\" && pwd`\"\n    done\n    eval $1=\"$PROGDIR\"\n}\n\n# Put location of Android NDK into ANDROID_NDK_ROOT and\n# perform a tiny amount of sanity check\n#\nif [ -z \"$ANDROID_NDK_ROOT\" ] ; then\n    find_ndk_root ANDROID_NDK_ROOT \"$0\"\n    if [ $? != 0 ]; then\n        echo \"Please define ANDROID_NDK_ROOT to point to the root of your\"\n        echo \"Android NDK installation.\"\n        exit 1\n    fi\nfi\n\necho \"$ANDROID_NDK_ROOT\" | grep -q -e \" \"\nif [ $? = 0 ] ; then\n    echo \"ERROR: The Android NDK installation path contains a space !\"\n    echo \"Please install to a different location.\"\n    exit 1\nfi\n\nif [ ! -d $ANDROID_NDK_ROOT ] ; then\n    echo \"ERROR: Your ANDROID_NDK_ROOT variable does not point to a directory.\"\n    exit 1\nfi\n\nif [ ! -f $ANDROID_NDK_ROOT/build/instruments/ndk-common.sh ] ; then\n    echo \"ERROR: Your ANDROID_NDK_ROOT variable does not point to a valid directory.\"\n    exit 1\nfi\n\n## Use DRYRUN to find out top-level commands.\nDRYRUN=${DRYRUN-no}\n\n## Logging support\n##\nVERBOSE=${VERBOSE-yes}\n\n\n# If NDK_LOGFILE is defined in the environment, use this as the log file\nTMPLOG=\nif [ -n \"$NDK_LOGFILE\" ] ; then\n    mkdir -p `dirname \"$NDK_LOGFILE\"` && touch \"$NDK_LOGFILE\"\n    TMPLOG=\"$NDK_LOGFILE\"\nfi\n\n# Setup a log file where all log() output will be sent\n#\n# $1: log file path  (optional)\n#\nsetup_default_log_file ()\n{\n    if [ -n \"$NDK_LOGFILE\" ] ; then\n        return\n    fi\n    if [ -n \"$1\" ] ; then\n        NDK_LOGFILE=\"$1\"\n    else\n        NDK_LOGFILE=$TMPDIR/ndk-log-$$.txt\n    fi\n    export NDK_LOGFILE\n    TMPLOG=\"$NDK_LOGFILE\"\n    rm -rf \"$TMPLOG\" && mkdir -p `dirname \"$TMPLOG\"` && touch \"$TMPLOG\"\n    echo \"To follow build in another terminal, please use: tail -F $TMPLOG\"\n}\n\ndump ()\n{\n    if [ -n \"$TMPLOG\" ] ; then\n        echo \"$@\" >> $TMPLOG\n    fi\n    echo \"$@\"\n}\n\ndump_n ()\n{\n    if [ -n \"$TMPLOG\" ] ; then\n        printf %s \"$@\" >> $TMPLOG\n    fi\n    printf %s \"$@\"\n}\n\nlog ()\n{\n    if [ \"$VERBOSE\" = \"yes\" ] ; then\n        echo \"$@\"\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            echo \"$@\" >> $TMPLOG\n        fi\n    fi\n}\n\nlog_n ()\n{\n    if [ \"$VERBOSE\" = \"yes\" ] ; then\n        printf %s \"$@\"\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            printf %s \"$@\" >> $TMPLOG\n        fi\n    fi\n}\n\nrun ()\n{\n    if [ \"$DRYRUN\" = \"yes\" ] ; then\n        echo \"## SKIP COMMAND: $@\"\n    elif [ \"$VERBOSE\" = \"yes\" ] ; then\n        echo \"## COMMAND: $@\"\n        if [ -n \"$TMPLOG\" ] ; then\n            echo \"## COMMAND: $@\" >> $TMPLOG\n        fi\n        \"$@\" 2>&1\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            echo \"## COMMAND: $@\" >> $TMPLOG\n            \"$@\" >>$TMPLOG 2>&1\n        else\n            \"$@\" > /dev/null 2>&1\n        fi\n    fi\n}\n\npanic ()\n{\n    dump \"ERROR: $@\"\n    exit 1\n}\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        dump \"ERROR: $@\"\n        exit 1\n    fi\n}\n\nfail_warning ()\n{\n    if [ $? != 0 ] ; then\n        dump \"WARNING: $@\"\n    fi\n}\n\n\n## Utilities\n##\n\n# Return the value of a given named variable\n# $1: variable name\n#\n# example:\n#    FOO=BAR\n#    BAR=ZOO\n#    echo `var_value $FOO`\n#    will print 'ZOO'\n#\nvar_value ()\n{\n    # find a better way to do that ?\n    eval echo \"$`echo $1`\"\n}\n\n# convert to uppercase\n# assumes tr is installed on the platform ?\n#\nto_uppercase ()\n{\n    echo $1 | tr \"[:lower:]\" \"[:upper:]\"\n}\n\n## First, we need to detect the HOST CPU, because proper HOST_ARCH detection\n## requires platform-specific tricks.\n##\nHOST_EXE=\"\"\nHOST_OS=`uname -s`\ncase \"$HOST_OS\" in\n    Darwin)\n        HOST_OS=darwin\n        ;;\n    Linux)\n        # note that building  32-bit binaries on x86_64 is handled later\n        HOST_OS=linux\n        ;;\n    FreeBsd)  # note: this is not tested\n        HOST_OS=freebsd\n        ;;\n    CYGWIN*|*_NT-*)\n        HOST_OS=windows\n        HOST_EXE=.exe\n        if [ \"x$OSTYPE\" = xcygwin ] ; then\n            HOST_OS=cygwin\n        fi\n        ;;\nesac\n\n#log \"HOST_OS=$HOST_OS\"\n#log \"HOST_EXE=$HOST_EXE\"\n\n## Now find the host architecture. This must correspond to the bitness of\n## the binaries we're going to run with this NDK. Certain platforms allow\n## you to use a 64-bit kernel with a 32-bit userland, and unfortunately\n## commands like 'uname -m' only report the kernel bitness.\n##\nHOST_ARCH=`uname -m`\ncase \"$HOST_ARCH\" in\n    i?86) HOST_ARCH=x86\n    # \"uname -m\" reports i386 on Snow Leopard even though its architecture is\n    # 64-bit. In order to use it to build 64-bit toolchains we need to fix the\n    # reporting anomoly here.\n    if [ \"$HOST_OS\" = darwin ] ; then\n        if ! echo __LP64__ | (CCOPTS= gcc -E - 2>/dev/null) | grep -q __LP64__ ; then\n        # or if gcc -dM -E - < /dev/null | grep -q __LP64__; then\n            HOST_ARCH=x86_64\n        fi\n    fi\n    ;;\n    amd64) HOST_ARCH=x86_64\n    ;;\n    powerpc) HOST_ARCH=ppc\n    ;;\nesac\n\nHOST_FILE_PROGRAM=\"file\"\ncase \"$HOST_OS-$HOST_ARCH\" in\n  linux-x86_64|darwin-x86_64)\n    ## On Linux or Darwin, a 64-bit kernel doesn't mean that the user-land\n    ## is always 32-bit, so use \"file\" to determine the bitness of the shell\n    ## that invoked us. The -L option is used to de-reference symlinks.\n    ##\n    ## Note that on Darwin, a single executable can contain both x86 and\n    ## x86_64 machine code, so just look for x86_64 (darwin) or x86-64 (Linux)\n    ## in the output.\n    ##\n    ## Also note that some versions of 'file' in MacPort may report erroneous\n    ## result.  See http://b.android.com/53769.  Use /usr/bin/file if exists.\n    if [ \"$HOST_OS\" = \"darwin\" ]; then\n        SYSTEM_FILE_PROGRAM=\"/usr/bin/file\"\n        test -x \"$SYSTEM_FILE_PROGRAM\" && HOST_FILE_PROGRAM=\"$SYSTEM_FILE_PROGRAM\"\n    fi\n    \"$HOST_FILE_PROGRAM\" -L \"$SHELL\" | grep -q \"x86[_-]64\"\n    if [ $? != 0 ]; then\n      # $SHELL is not a 64-bit executable, so assume our userland is too.\n      log \"Detected 32-bit userland on 64-bit kernel system!\"\n      HOST_ARCH=x86\n    fi\n    ;;\nesac\n\n#log \"HOST_ARCH=$HOST_ARCH\"\n\n# at this point, the supported values for HOST_ARCH are:\n#   x86\n#   x86_64\n#   ppc\n#\n# other values may be possible but haven't been tested\n#\n# at this point, the value of HOST_OS should be one of the following:\n#   linux\n#   darwin\n#    windows (MSys)\n#    cygwin\n#\n# Note that cygwin is treated as a special case because it behaves very differently\n# for a few things. Other values may be possible but have not been tested\n#\n\n# define HOST_TAG as a unique tag used to identify both the host OS and CPU\n# supported values are:\n#\n#   linux-x86\n#   linux-x86_64\n#   darwin-x86\n#   darwin-x86_64\n#   darwin-ppc\n#   windows\n#   windows-x86_64\n#\n# other values are possible but were not tested.\n#\ncompute_host_tag ()\n{\n    HOST_TAG=${HOST_OS}-${HOST_ARCH}\n    # Special case for windows-x86 => windows\n    case $HOST_TAG in\n        windows-x86|cygwin-x86)\n            HOST_TAG=\"windows\"\n            ;;\n    esac\n    #log \"HOST_TAG=$HOST_TAG\"\n}\n\ncompute_host_tag\n\n# Compute the number of host CPU cores an HOST_NUM_CPUS\n#\ncase \"$HOST_OS\" in\n    linux)\n        HOST_NUM_CPUS=`cat /proc/cpuinfo | grep processor | wc -l`\n        ;;\n    darwin|freebsd)\n        HOST_NUM_CPUS=`sysctl -n hw.ncpu`\n        ;;\n    windows|cygwin)\n        HOST_NUM_CPUS=$NUMBER_OF_PROCESSORS\n        if [ -z \"$HOST_NUM_CPUS\" ]; then\n            # In case we're running shell from Cygwin SSH, we have no $NUMBER_OF_PROCESSORS\n            # In such case detect it in another way\n            HOST_NUM_CPUS=`cmd /c \"echo %NUMBER_OF_PROCESSORS%\" 2>/dev/null | tr -d '\\r'`\n        fi\n        ;;\n    *)  # let's play safe here\n        HOST_NUM_CPUS=1\nesac\n\ntest -z \"$HOST_NUM_CPUS\" && HOST_NUM_CPUS=1\ntest $HOST_NUM_CPUS -lt 1 && HOST_NUM_CPUS=1\n\n#log \"HOST_NUM_CPUS=$HOST_NUM_CPUS\"\n\n# If BUILD_NUM_CPUS is not already defined in your environment,\n# define it as the double of HOST_NUM_CPUS. This is used to\n# run Make commands in parralles, as in 'make -j$BUILD_NUM_CPUS'\n#\nif [ -z \"$BUILD_NUM_CPUS\" ] ; then\n    BUILD_NUM_CPUS=`expr $HOST_NUM_CPUS \\* 2`\nfi\n\n#log \"BUILD_NUM_CPUS=$BUILD_NUM_CPUS\"\n\n\n##  HOST TOOLCHAIN SUPPORT\n##\n\n# force the generation of 32-bit binaries on 64-bit systems\n#\nFORCE_32BIT=no\nforce_32bit_binaries ()\n{\n    if [ \"$HOST_ARCH\" = x86_64 ] ; then\n        log \"Forcing generation of 32-bit host binaries on $HOST_ARCH\"\n        FORCE_32BIT=yes\n        HOST_ARCH=x86\n        log \"HOST_ARCH=$HOST_ARCH\"\n        compute_host_tag\n    fi\n}\n\n# On Windows, cygwin binaries will be generated by default, but\n# you can force mingw ones that do not link to cygwin.dll if you\n# call this function.\n#\ndisable_cygwin ()\n{\n    if [ $HOST_OS = cygwin ] ; then\n        log \"Disabling cygwin binaries generation\"\n        CFLAGS=\"$CFLAGS -mno-cygwin\"\n        LDFLAGS=\"$LDFLAGS -mno-cygwin\"\n        HOST_OS=windows\n        compute_host_tag\n    fi\n}\n\n# Various probes are going to need to run a small C program\nmkdir -p $TMPDIR/tmp/tests\n\nTMPC=$TMPDIR/tmp/tests/test-$$.c\nTMPO=$TMPDIR/tmp/tests/test-$$.o\nTMPE=$TMPDIR/tmp/tests/test-$$$EXE\nTMPL=$TMPDIR/tmp/tests/test-$$.log\n\n# cleanup temporary files\nclean_temp ()\n{\n    rm -f $TMPC $TMPO $TMPL $TMPE\n}\n\n# cleanup temp files then exit with an error\nclean_exit ()\n{\n    clean_temp\n    exit 1\n}\n\n# this function will setup the compiler and linker and check that they work as advertised\n# note that you should call 'force_32bit_binaries' before this one if you want it to\n# generate 32-bit binaries on 64-bit systems (that support it).\n#\nsetup_toolchain ()\n{\n    if [ -z \"$CC\" ] ; then\n        CC=gcc\n    fi\n    if [ -z \"$CXX\" ] ; then\n        CXX=g++\n    fi\n    if [ -z \"$CXXFLAGS\" ] ; then\n        CXXFLAGS=\"$CFLAGS\"\n    fi\n    if [ -z \"$LD\" ] ; then\n        LD=\"$CC\"\n    fi\n\n    log \"Using '$CC' as the C compiler\"\n\n    # check that we can compile a trivial C program with this compiler\n    mkdir -p $(dirname \"$TMPC\")\n    cat > $TMPC <<EOF\nint main(void) {}\nEOF\n\n    if [ \"$FORCE_32BIT\" = yes ] ; then\n        CC=\"$CC -m32\"\n        CXX=\"$CXX -m32\"\n        LD=\"$LD -m32\"\n        compile\n        if [ $? != 0 ] ; then\n            # sometimes, we need to also tell the assembler to generate 32-bit binaries\n            # this is highly dependent on your GCC installation (and no, we can't set\n            # this flag all the time)\n            CFLAGS=\"$CFLAGS -Wa,--32\"\n            compile\n        fi\n    fi\n\n    compile\n    if [ $? != 0 ] ; then\n        echo \"your C compiler doesn't seem to work:\"\n        cat $TMPL\n        clean_exit\n    fi\n    log \"CC         : compiler check ok ($CC)\"\n\n    # check that we can link the trivial program into an executable\n    link\n    if [ $? != 0 ] ; then\n        OLD_LD=\"$LD\"\n        LD=\"$CC\"\n        compile\n        link\n        if [ $? != 0 ] ; then\n            LD=\"$OLD_LD\"\n            echo \"your linker doesn't seem to work:\"\n            cat $TMPL\n            clean_exit\n        fi\n    fi\n    log \"Using '$LD' as the linker\"\n    log \"LD         : linker check ok ($LD)\"\n\n    # check the C++ compiler\n    log \"Using '$CXX' as the C++ compiler\"\n\n    cat > $TMPC <<EOF\n#include <iostream>\nusing namespace std;\nint main()\n{\n  cout << \"Hello World!\" << endl;\n  return 0;\n}\nEOF\n\n    compile_cpp\n    if [ $? != 0 ] ; then\n        echo \"your C++ compiler doesn't seem to work\"\n        cat $TMPL\n        clean_exit\n    fi\n\n    log \"CXX        : C++ compiler check ok ($CXX)\"\n\n    # XXX: TODO perform AR checks\n    AR=ar\n    ARFLAGS=\n}\n\n# try to compile the current source file in $TMPC into an object\n# stores the error log into $TMPL\n#\ncompile ()\n{\n    log \"Object     : $CC -o $TMPO -c $CFLAGS $TMPC\"\n    $CC -o $TMPO -c $CFLAGS $TMPC 2> $TMPL\n}\n\ncompile_cpp ()\n{\n    log \"Object     : $CXX -o $TMPO -c $CXXFLAGS $TMPC\"\n    $CXX -o $TMPO -c $CXXFLAGS $TMPC 2> $TMPL\n}\n\n# try to link the recently built file into an executable. error log in $TMPL\n#\nlink()\n{\n    log \"Link      : $LD -o $TMPE $TMPO $LDFLAGS\"\n    $LD -o $TMPE $TMPO $LDFLAGS 2> $TMPL\n}\n\n# run a command\n#\nexecute()\n{\n    log \"Running: $*\"\n    $*\n}\n\n# perform a simple compile / link / run of the source file in $TMPC\ncompile_exec_run()\n{\n    log \"RunExec    : $CC -o $TMPE $CFLAGS $TMPC\"\n    compile\n    if [ $? != 0 ] ; then\n        echo \"Failure to compile test program\"\n        cat $TMPC\n        cat $TMPL\n        clean_exit\n    fi\n    link\n    if [ $? != 0 ] ; then\n        echo \"Failure to link test program\"\n        cat $TMPC\n        echo \"------\"\n        cat $TMPL\n        clean_exit\n    fi\n    $TMPE\n}\n\npattern_match ()\n{\n    echo \"$2\" | grep -q -E -e \"$1\"\n}\n\n# Let's check that we have a working md5sum here\ncheck_md5sum ()\n{\n    A_MD5=`echo \"A\" | md5sum | cut -d' ' -f1`\n    if [ \"$A_MD5\" != \"bf072e9119077b4e76437a93986787ef\" ] ; then\n        echo \"Please install md5sum on this machine\"\n        exit 2\n    fi\n}\n\n# Find if a given shell program is available.\n# We need to take care of the fact that the 'which <foo>' command\n# may return either an empty string (Linux) or something like\n# \"no <foo> in ...\" (Darwin). Also, we need to redirect stderr\n# to /dev/null for Cygwin\n#\n# $1: variable name\n# $2: program name\n#\n# Result: set $1 to the full path of the corresponding command\n#         or to the empty/undefined string if not available\n#\nfind_program ()\n{\n    local PROG RET\n    PROG=`which $2 2>/dev/null`\n    RET=$?\n    if [ $RET != 0 ]; then\n        PROG=\n    fi\n    eval $1=\\\"$PROG\\\"\n    return $RET\n}\n\nprepare_download ()\n{\n    find_program CMD_WGET wget\n    find_program CMD_CURL curl\n    find_program CMD_SCRP scp\n}\n\nfind_pbzip2 ()\n{\n    if [ -z \"$_PBZIP2_initialized\" ] ; then\n        find_program PBZIP2 pbzip2\n        _PBZIP2_initialized=\"yes\"\n    fi\n}\n\n# Download a file with either 'curl', 'wget' or 'scp'\n#\n# $1: source URL (e.g. http://foo.com, ssh://blah, /some/path)\n# $2: target file\ndownload_file ()\n{\n    # Is this HTTP, HTTPS or FTP ?\n    if pattern_match \"^(http|https|ftp):.*\" \"$1\"; then\n        if [ -n \"$CMD_WGET\" ] ; then\n            run $CMD_WGET -O $2 $1\n        elif [ -n \"$CMD_CURL\" ] ; then\n            run $CMD_CURL -o $2 $1\n        else\n            echo \"Please install wget or curl on this machine\"\n            exit 1\n        fi\n        return\n    fi\n\n    # Is this SSH ?\n    # Accept both ssh://<path> or <machine>:<path>\n    #\n    if pattern_match \"^(ssh|[^:]+):.*\" \"$1\"; then\n        if [ -n \"$CMD_SCP\" ] ; then\n            scp_src=`echo $1 | sed -e s%ssh://%%g`\n            run $CMD_SCP $scp_src $2\n        else\n            echo \"Please install scp on this machine\"\n            exit 1\n        fi\n        return\n    fi\n\n    # Is this a file copy ?\n    # Accept both file://<path> or /<path>\n    #\n    if pattern_match \"^(file://|/).*\" \"$1\"; then\n        cp_src=`echo $1 | sed -e s%^file://%%g`\n        run cp -f $cp_src $2\n        return\n    fi\n}\n\n# Form the relative path between from one abs path to another\n#\n# $1 : start path\n# $2 : end path\n#\n# From:\n# http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current-directory\nrelpath ()\n{\n    [ $# -ge 1 ] && [ $# -le 2 ] || return 1\n    current=\"${2:+\"$1\"}\"\n    target=\"${2:-\"$1\"}\"\n    [ \"$target\" != . ] || target=/\n    target=\"/${target##/}\"\n    [ \"$current\" != . ] || current=/\n    current=\"${current:=\"/\"}\"\n    current=\"/${current##/}\"\n    appendix=\"${target##/}\"\n    relative=''\n    while appendix=\"${target#\"$current\"/}\"\n        [ \"$current\" != '/' ] && [ \"$appendix\" = \"$target\" ]; do\n        if [ \"$current\" = \"$appendix\" ]; then\n            relative=\"${relative:-.}\"\n            echo \"${relative#/}\"\n            return 0\n        fi\n        current=\"${current%/*}\"\n        relative=\"$relative${relative:+/}..\"\n    done\n    relative=\"$relative${relative:+${appendix:+/}}${appendix#/}\"\n    echo \"$relative\"\n}\n\n# Unpack a given archive\n#\n# $1: archive file path\n# $2: optional target directory (current one if omitted)\n#\nunpack_archive ()\n{\n    local ARCHIVE=\"$1\"\n    local DIR=${2-.}\n    local RESULT TARFLAGS ZIPFLAGS\n    mkdir -p \"$DIR\"\n    TARFLAGS=\"xpf\"\n    # todo: zuav: ZIPFLAGS=\"-qo\"\n    ZIPFLAGS=\"q\"\n    case \"$ARCHIVE\" in\n        *.zip)\n            (cd $DIR && run unzip $ZIPFLAGS \"$ARCHIVE\")\n            ;;\n        *.tar)\n            run tar $TARFLAGS \"$ARCHIVE\" -C $DIR\n            ;;\n        *.tar.gz)\n            run tar z$TARFLAGS \"$ARCHIVE\" -C $DIR\n            ;;\n        *.tar.bz2)\n            find_pbzip2\n            if [ -n \"$PBZIP2\" ] ; then\n                run tar --use-compress-prog=pbzip2 -$TARFLAGS \"$ARCHIVE\" -C $DIR\n            else\n                run tar j$TARFLAGS \"$ARCHIVE\" -C $DIR\n            fi\n            # remove ._* files by MacOSX to preserve resource forks we don't need\n            find $DIR -name \"\\._*\" -exec rm {} \\;\n            ;;\n        *.tar.xz)\n            run tar J$TARFLAGS \"$ARCHIVE\" -C $DIR\n            ;;\n        *)\n            panic \"Cannot unpack archive with unknown extension: $ARCHIVE\"\n            ;;\n    esac\n}\n\n# Pack a given archive\n#\n# $1: archive file path (including extension)\n# $2: source directory for archive content\n# $3+: list of files (including patterns), all if empty\npack_archive ()\n{\n    local ARCHIVE=\"$1\"\n    local SRCDIR=\"$2\"\n    local SRCFILES\n    local TARFLAGS ZIPFLAGS\n    shift; shift;\n    if [ -z \"$1\" ] ; then\n        SRCFILES=\"*\"\n    else\n        SRCFILES=\"$@\"\n    fi\n    if [ \"`basename $ARCHIVE`\" = \"$ARCHIVE\" ] ; then\n        ARCHIVE=\"`pwd`/$ARCHIVE\"\n    fi\n    mkdir -p `dirname $ARCHIVE`\n    TARFLAGS=\"cf\"\n    ZIPFLAGS=\"-9qr\"\n    # Ensure symlinks are stored as is in zip files. for toolchains\n    # this can save up to 7 MB in the size of the final archive\n    #ZIPFLAGS=\"$ZIPFLAGS --symlinks\"\n    case \"$ARCHIVE\" in\n        *.zip)\n            (cd $SRCDIR && run zip $ZIPFLAGS \"$ARCHIVE\" $SRCFILES)\n            ;;\n        *.tar)\n            (cd $SRCDIR && run tar $TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            ;;\n        *.tar.gz)\n            (cd $SRCDIR && run tar z$TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            ;;\n        *.tar.bz2)\n            find_pbzip2\n            if [ -n \"$PBZIP2\" ] ; then\n                (cd $SRCDIR && run tar --use-compress-prog=pbzip2 -$TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            else\n                (cd $SRCDIR && run tar j$TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            fi\n            ;;\n        *.tar.xz)\n            (cd $SRCDIR && run tar J$TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            ;;\n        *)\n            panic \"Unsupported archive format: $ARCHIVE\"\n            ;;\n    esac\n}\n\n# Copy a directory, create target location if needed\n#\n# $1: source directory\n# $2: target directory location\n#\ncopy_directory ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't copy from non-directory: $SRCDIR\"\n    fi\n    log \"Copying directory: \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && 2>/dev/null tar cf - *) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy to directory: $DSTDIR\"\n}\n\n# Move a directory, create target location if needed\n#\n# $1: source directory\n# $2: target directory location\n#\nmove_directory ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't move from non-directory: $SRCDIR\"\n    fi\n    log \"Move directory: \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (mv \"$SRCDIR\"/* \"$DSTDIR\")\n    fail_panic \"Cannot move to directory: $DSTDIR\"\n}\n\n# This is the same than copy_directory(), but symlinks will be replaced\n# by the file they actually point to instead.\ncopy_directory_nolinks ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't copy from non-directory: $SRCDIR\"\n    fi\n    log \"Copying directory (without symlinks): \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && tar chf - *) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy to directory: $DSTDIR\"\n}\n\n# Copy certain files from one directory to another one\n# $1: source directory\n# $2: target directory\n# $3+: file list (including patterns)\ncopy_file_list ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    shift; shift;\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Cant' copy from non-directory: $SRCDIR\"\n    fi\n    # todo zuav: check for number of arguments?\n    #log \"Copying file: $@\"\n    log \"Copying file: $1 $2 $3 ...\"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && (echo $@ | tr ' ' '\\n' | tar cf - -T -)) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy files to directory: $DSTDIR\"\n}\n\n# Rotate a log file\n# If the given log file exist, add a -1 to the end of the file.\n# If older log files exist, rename them to -<n+1>\n# $1: log file\n# $2: maximum version to retain [optional]\nrotate_log ()\n{\n    # Default Maximum versions to retain\n    local MAXVER=\"5\"\n    local LOGFILE=\"$1\"\n    shift;\n    if [ ! -z \"$1\" ] ; then\n        local tmpmax=\"$1\"\n        shift;\n        tmpmax=`expr $tmpmax + 0`\n        if [ $tmpmax -lt 1 ] ; then\n            panic \"Invalid maximum log file versions '$tmpmax' invalid; defaulting to $MAXVER\"\n        else\n            MAXVER=$tmpmax;\n        fi\n    fi\n\n    # Do Nothing if the log file does not exist\n    if [ ! -f \"${LOGFILE}\" ] ; then\n        return\n    fi\n\n    # Rename existing older versions\n    ver=$MAXVER\n    while [ $ver -ge 1 ]\n    do\n        local prev=$(( $ver - 1 ))\n        local old=\"-$prev\"\n\n        # Instead of old version 0; use the original filename\n        if [ $ver -eq 1 ] ; then\n            old=\"\"\n        fi\n\n        if [ -f \"${LOGFILE}${old}\" ] ; then\n            mv -f \"${LOGFILE}${old}\" \"${LOGFILE}-${ver}\"\n        fi\n\n        ver=$prev\n    done\n}\n\n# Copy a given package to the cache directory\n#\n# $1: package dir\n# $2: archive file name\ncache_package ()\n{\n    local package_dir=$1\n    local archive=$2\n    log \"Copying $package_dir/$archive to cache dir $NDK_CACHE_DIR.\"\n    cp \"$package_dir/$archive\" \"$NDK_CACHE_DIR\"\n    fail_panic \"Could not cache package: $archive\"\n}\n\n# Copy a given cached package if found to the given package directory\n# NB\n#    This function will exit a script on succes!\n#\n# $1: package dir\n# $2: archive file name\n# $3: optional, can be anything, prevents exit\ntry_cached_package ()\n{\n    local package_dir=$1\n    local archive=$2\n\n    if [ \"$package_dir\" -a -e \"$NDK_CACHE_DIR/$archive\" ]; then\n        dump \"Found cached package: $NDK_CACHE_DIR/$archive\"\n        mkdir -p \"$package_dir\"\n        cp \"$NDK_CACHE_DIR/$archive\" \"$package_dir\"\n        fail_panic \"Could not copy $archive from cache directory.\"\n        if [ -n \"$3\" ]; then\n            return 0\n        else\n            log \"Done\"\n            exit 0\n        fi\n    fi\n\n    return 1\n}\n\n# check that every member of the specified list is a member\n# of the second list\n#\n# $1: list of strings separated by blanks\n# $2: list of standard (permitted) values separated by blanks\n# $3: error message, optional\ncheck_list_values ()\n{\n    #echo \"1: $1\"\n    #echo \"2: $2\"\n    #echo \"3: $3\"\n\n    local list=$1\n    local standard_list=$2\n    local err_msg=\"bad value\"\n\n    if [ -n \"$3\" ]; then\n        err_msg=$3\n    fi\n\n    local val=\n    local defval=\n    local good=\n    local defsys=\n    for val in $list ; do \n        good=\"\"\n        for defval in $standard_list ; do\n            if [ \"$val\" = \"$defval\" ] ; then\n                good=\"yes\"\n                break\n            fi\n        done\n        if [ \"$good\" != \"yes\" ] ; then\n            panic \"$err_msg: $val\"\n        fi\n    done\n}\n\n# Dereference symlink\n# $1+: directories\ndereference_symlink ()\n{\n    local DIRECTORY SYMLINKS DIR FILE LINK\n    for DIRECTORY in \"$@\"; do\n        if [ -d \"$DIRECTORY\" ]; then\n            while true; do\n                # Find all symlinks in this directory.\n                SYMLINKS=`find $DIRECTORY -type l`\n                if [ -z \"$SYMLINKS\" ]; then\n                    break;\n                fi\n                # Iterate symlinks\n                for SYMLINK in $SYMLINKS; do\n                    if [ -L \"$SYMLINK\" ]; then\n                        DIR=`dirname \"$SYMLINK\"`\n                        FILE=`basename \"$SYMLINK\"`\n                        # Note that if `readlink $FILE` is also a link, we want to deal\n                        # with it in the next iteration.  There is potential infinite-loop\n                        # situation for cicular link doesn't exist in our case, though.\n                        (cd \"$DIR\" && \\\n                         LINK=`readlink \"$FILE\"` && \\\n                         test ! -L \"$LINK\" && \\\n                         rm -f \"$FILE\" && \\\n                         cp -a \"$LINK\" \"$FILE\")\n                    fi\n                done\n            done\n        fi\n    done\n}\n"
  },
  {
    "path": "build/instruments/package-platforms.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# package-platforms.sh\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\n\nOPTION_SAMPLES=\nPACKAGE_DIR=\n\nusage()\n{\n    echo \"Package platform files from an Android NDK tree\"\n    echo \"\"\n    echo \"options:\"\n    echo \"\"\n    echo \"  --help                Print this message\"\n    echo \"  --ndk-dir=<path>      Use platforms from this NDK directory [$NDK_DIR]\"\n    echo \"  --samples             Also package samples\"\n    echo \"  --package-dir=<path>  Package platforms archive in specific path.\"\n    echo \"\"\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n        --help|-h|-\\?)\n            usage\n            exit 0\n            ;;\n        --ndk-dir=*)\n            NDK_DIR=$optarg\n            ;;\n        --samples)\n            OPTION_SAMPLES=yes\n            ;;\n        --package-dir=*)\n            PACKAGE_DIR=$optarg\n            ;;\n        *)\n            echo \"*** ERROR: unknown option '$opt'\" 1>&2\n            usage 1>&2\n            exit 1\n    esac\ndone\n\nif [ -z \"$PACKAGE_DIR\" ]; then\n    echo \"*** ERROR: Package directory was not specified!\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nmkdir -p \"$PACKAGE_DIR\"\nfail_panic \"Could not create package directory: $PACKAGE_DIR\"\nARCHIVE=platforms.tar.xz\ndump \"Packaging $ARCHIVE\"\npack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"platforms\"\nfail_panic \"Could not package platforms\"\ncache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nif [ \"$OPTION_SAMPLES\" ]; then\n    ARCHIVE=samples.tar.xz\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"samples\"\n    fail_panic \"Could not package samples\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Done !\"\n"
  },
  {
    "path": "build/instruments/package-release.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2009-2010, 2014, 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to package complete Android NDK release packages.\n#\n# You will need prebuilt toolchain binary tarballs or a previous\n# NDK release package to do that.\n#\n\n. `dirname $0`/prebuilt-common.sh\n\nNDK_ROOT_DIR=\"$ANDROID_NDK_ROOT\"\n\n# the list of platforms / API levels we want to package in\n# this release. This can be overriden with the --platforms\n# option, see below.\n#\nPLATFORMS=\"$API_LEVELS\"\n\n# the default release name (use today's date)\nRELEASE=`date +%Y%m%d`\nregister_var_option \"--release=<name>\" RELEASE \"Specify release name\"\n\n# the directory containing all prebuilts\nPREBUILT_DIR=\nregister_var_option \"--prebuilt-dir=<path>\" PREBUILT_DIR \"Specify prebuilt directory\"\n\n# the list of supported host development systems\nSYSTEMS=$DEFAULT_SYSTEMS\nregister_var_option \"--systems=<list>\" SYSTEMS \"Specify host systems\"\n\n# ARCH to build for\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<arch>\" ARCHS \"Specify target architecture(s)\"\n\n# set to 'yes' if we should use 'git ls-files' to list the files to\n# be copied into the archive.\nNO_GIT=no\nregister_var_option \"--no-git\" NO_GIT \"Don't use git to list input files, take all of them.\"\n\n# set of toolchain prebuilts we need to package\nOPTION_TOOLCHAINS=\nregister_var_option \"--toolchains=<list>\" OPTION_TOOLCHAINS \"Specify list of toolchains.\"\n\n# set of platforms to package (all by default)\nregister_var_option \"--platforms=<list>\" PLATFORMS \"Specify API levels\"\n\n# the package prefix\nPREFIX=android-ndk\nregister_var_option \"--prefix=<name>\" PREFIX \"Specify package prefix\"\n\n# default location for generated packages\nOUT_DIR=$TMPDIR/release\nOPTION_OUT_DIR=\nregister_var_option \"--out-dir=<path>\" OPTION_OUT_DIR \"Specify output package directory\" \"$OUT_DIR\"\n\n# Find the location of the platforms root directory\nDEVELOPMENT_ROOT=`dirname $ANDROID_NDK_ROOT`/development/ndk\nregister_var_option \"--development-root=<path>\" DEVELOPMENT_ROOT \"Specify platforms/samples directory\"\n\nGCC_VERSION_LIST=\"default\" # it's arch defined by default so use default keyword\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"List of GCC release versions\"\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<versions>\" LLVM_VERSION_LIST \"List of LLVM release versions\"\n\nregister_try64_option\n\nSEPARATE_64=no\nregister_option \"--separate-64\" do_SEPARATE_64 \"Separate 64-bit host toolchain to its own package\"\ndo_SEPARATE_64 ()\n{\n    if [ \"$TRY64\" = \"yes\" ]; then\n        echo \"ERROR: You cannot use both --try-64 and --separate-64 at the same time.\"\n        exit 1\n    fi\n    SEPARATE_64=yes;\n}\n\nPROGRAM_PARAMETERS=\nPROGRAM_DESCRIPTION=\\\n\"Package a new set of release packages for the Android NDK.\n\nYou will need to have generated one or more prebuilt binary tarballs\nwith the build/instruments/rebuild-all-prebuilts.sh script. These files should\nbe named like <toolname>-<system>.tar.xz, where <toolname> is an arbitrary\ntool name, and <system> is one of: $SYSTEMS\n\nUse the --prebuilt-dir=<path> option to build release packages from the\nbinary tarballs stored in <path>.\n\nAlternatively, you can use --prebuilt-ndk=<file> where <file> is the path\nto a previous NDK release package. It will be used to extract the toolchain\nbinaries and copy them to your new release. Only use this for experimental\npackage releases.\n\nThe generated release packages will be stored in a temporary directory that\nwill be printed at the end of the generation process.\n\"\n\nextract_parameters \"$@\"\n\n# Ensure that SYSTEMS is space-separated\nSYSTEMS=$(commas_to_spaces $SYSTEMS)\n\nARCHS=$(commas_to_spaces $ARCHS)\n\n# Compute ABIS from ARCHS\nABIS=\nfor ARCH in $ARCHS; do\n    DEFAULT_ABIS=$(get_default_abis_for_arch $ARCH)\n    if [ -z \"$ABIS\" ]; then\n        ABIS=$DEFAULT_ABIS\n    else\n        ABIS=$ABIS\" $DEFAULT_ABIS\"\n    fi\ndone\n\n# Convert comma-separated list to space-separated list\nLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)\n\n# If --arch is used to list x86 as a target architecture, Add x86-4.8 to\n# the list of default toolchains to package. That is, unless you also\n# explicitely use --toolchains=<list>\n#\n# Ensure that TOOLCHAINS is space-separated after this.\n#\nif [ \"$OPTION_TOOLCHAINS\" != \"$TOOLCHAINS\" ]; then\n    TOOLCHAINS=$(commas_to_spaces $OPTION_TOOLCHAINS)\nelse\n    for ARCH in $ARCHS; do\n       case $ARCH in\n           arm|arm64|x86|x86_64|mips|mips64) TOOLCHAINS=$TOOLCHAINS\" \"$(get_toolchain_name_list_for_arch $ARCH) ;;\n           *) echo \"ERROR: Unknown arch to package: $ARCH\"; exit 1 ;;\n       esac\n    done\n    TOOLCHAINS=$(commas_to_spaces $TOOLCHAINS)\nfi\n\nif [ \"$GCC_VERSION_LIST\" != \"default\" ]; then\n    TOOLCHAIN_NAMES=\n    for VERSION in $(commas_to_spaces $GCC_VERSION_LIST); do\n        for TOOLCHAIN in $TOOLCHAINS; do\n            if [ $TOOLCHAIN != ${TOOLCHAIN%%$VERSION} ]; then\n                TOOLCHAIN_NAMES=\"$TOOLCHAIN $TOOLCHAIN_NAMES\"\n            fi\n        done\n    done\n    TOOLCHAINS=$TOOLCHAIN_NAMES\nelse\n    GCC_VERSION_LIST=\"$DEFAULT_GCC_VERSION_LIST\"\nfi\n\nGCC_VERSION_LIST=$(commas_to_spaces $GCC_VERSION_LIST)\n\nBOOST_CXX_STDLIBS=\"\"\nfor VERSION in $GCC_VERSION_LIST; do\n    BOOST_CXX_STDLIBS=\"$BOOST_CXX_STDLIBS gnu-$VERSION\"\ndone\nfor VERSION in $LLVM_VERSION_LIST; do\n    BOOST_CXX_STDLIBS=\"$BOOST_CXX_STDLIBS llvm-$VERSION\"\ndone\n\n# Check the prebuilt path\n#\nif [ -z \"$PREBUILT_DIR\" ] ; then\n    echo \"ERROR: You haven't specified --prebuilt-dir. See --help for details.\"\n    exit 1\nfi\n\n# Check the option directory.\nif [ -n \"$OPTION_OUT_DIR\" ] ; then\n    OUT_DIR=\"$OPTION_OUT_DIR\"\n    mkdir -p $OUT_DIR\n    if [ $? != 0 ] ; then\n        echo \"ERROR: Could not create output directory: $OUT_DIR\"\n        exit 1\n    fi\nelse\n    rm -rf $OUT_DIR && mkdir -p $OUT_DIR\nfi\n\n# Handle the prebuilt binaries now\n#\nif [ -n \"$PREBUILT_DIR\" ] ; then\n    if [ ! -d \"$PREBUILT_DIR\" ] ; then\n        echo \"ERROR: the --prebuilt-dir argument is not a directory: $PREBUILT_DIR\"\n        exit 1\n    fi\n    if [ -z \"$SYSTEMS\" ] ; then\n        echo \"ERROR: Your systems list is empty, use --systems=LIST to specify a different one.\"\n        exit 1\n    fi\nfi\n\necho \"Architectures: $ARCHS\"\necho \"CPU ABIs: $ABIS\"\necho \"GCC Toolchains: $TOOLCHAINS\"\necho \"LLVM Toolchains: $LLVM_VERSION_LIST\"\necho \"Host systems: $SYSTEMS\"\n\n\n# The list of git files to copy into the archives\nif [ \"$NO_GIT\" != \"yes\" ] ; then\n    echo \"Collecting sources from git (use --no-git to copy all files instead).\"\n    GIT_FILES=`cd $NDK_ROOT_DIR && git ls-files`\nelse\n    echo \"Collecting all sources files under tree.\"\n    # Cleanup everything that is likely to not be part of the final NDK\n    # i.e. generated files...\n    rm -rf $NDK_ROOT_DIR/samples/*/obj\n    rm -rf $NDK_ROOT_DIR/samples/*/libs\n    # Get all files under the NDK root\n    GIT_FILES=`cd $NDK_ROOT_DIR && find .`\n    GIT_FILES=`echo $GIT_FILES | sed -e \"s!\\./!!g\"`\nfi\n\n# temporary directory used for packaging\nTMPDIR=$NDK_TMPDIR\n\nRELEASE_PREFIX=$PREFIX-$RELEASE\n\n# ensure that the generated files are ug+rx\numask 0022\n\n# Translate name to 64-bit's counterpart\n# $1: prebuilt name\nname64 ()\n{\n    local NAME=$1\n    case $NAME in\n        *windows)\n            NAME=${NAME}-x86_64\n            ;;\n        *linux-x86|*darwin-x86|*windows-x86)\n            NAME=${NAME}_64\n            ;;\n    esac\n    echo $NAME\n}\n\n# Unpack a prebuilt into specified destination directory\n# $1: prebuilt name, relative to $PREBUILT_DIR\n# $2: destination directory\n# $3: optional destination directory for 64-bit toolchain\n# $4: optional flag to use 32-bit prebuilt in place of 64-bit\nunpack_prebuilt ()\n{\n    local NAME=$1\n    local PREBUILT=\n    local PREBUILT64=\n    local DDIR=\"$2\"\n    local DDIR64=\"${3:-$DDIR}\"\n    local USE32=\"${4:-no}\"\n\n    if [ \"$TRY64\" = \"yes\" -a \"$USE32\" = \"no\" ]; then\n        PREBUILT=$(name64 $NAME)\n        PREBUILT64=$PREBUILT\n    else\n        PREBUILT=$NAME\n        PREBUILT64=$(name64 $NAME)\n    fi\n\n    PREBUILT=${PREBUILT}.tar.xz\n    PREBUILT64=${PREBUILT64}.tar.xz\n\n    # zuav: we do not unpack 32 bit host tools for linux and darwin\n    if [ ! -f \"$PREBUILT_DIR/$PREBUILT\" ]; then\n        if [ $NAME != ${NAME%\"linux-x86\"} -o $NAME != ${NAME%\"darwin-x86\"} ]; then\n            echo \"Skipping non-existing archive $PREBUILT_DIR/$PREBUILT\"\n        else\n            fail_panic \"Could not unpack NON-existing prebuilt $PREBUILT_DIR/$PREBUILT. Aborting.\"\n        fi\n    else\n        echo \"Unpacking $PREBUILT\"\n        unpack_archive \"$PREBUILT_DIR/$PREBUILT\" \"$DDIR\"\n        fail_panic \"Could not unpack prebuilt $PREBUILT. Aborting.\"\n    fi\n\n    test \"$PREBUILT\" = \"$PREBUILT64\" && return\n\n    echo \"Unpacking $PREBUILT64\"\n    unpack_archive \"$PREBUILT_DIR/$PREBUILT64\" \"$DDIR64\"\n    fail_panic \"Could not unpack prebuilt $PREBUILT64. Aborting.\"\n}\n\n# Copy a prebuilt directory from the previous\n# $1: Source directory relative to\ncopy_prebuilt ()\n{\n    local SUBDIR=\"$1\"\n    if [ -d \"$1\" ] ; then\n        echo \"Copying: $SUBDIR\"\n        copy_directory \"$SUBDIR\" \"$DSTDIR/$2\"\n    else\n        echo \"Copying: $1\"\n        copy_file_list \"$(dirname $1)\" \"$DSTDIR/$2\" \"$(basename $1)\"\n    fi\n}\n\n# Pack a release\n#\n# $1: archive file path (including extension)\n# $2: source directory for archive content\n# $3: directory to pack\npack_release ()\n{\n    local archive=\"$1\"\n    local srcdir=\"$2\"\n    local reldir=\"$3\"\n\n    if [ \"`basename $archive`\" = \"$archive\" ] ; then\n        archive=\"`pwd`/$archive\"\n    fi\n\n    local packcmd\n    case $archive in\n        *.7z)\n            if [ -f $NDK_ROOT_DIR/../prebuilts/7zip/windows/64/7z.exe ]; then\n                packcmd=\"wine $NDK_ROOT_DIR/../prebuilts/7zip/windows/64/7z.exe\"\n            else\n                packcmd=\"7z\"\n            fi\n            packcmd=\"$packcmd a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on\"\n            ;;\n        *.tar.xz)\n            packcmd=\"tar cJvf\"\n            ;;\n        *)\n            panic \"Don't know how to package $archive\"\n    esac\n\n    mkdir -p $(dirname $archive)\n    (\n        cd $srcdir || exit 1\n        export XZ_OPT=-9e\n        $packcmd \"$archive\" \"$reldir\" | {\n            cnt=0\n            total=0\n            while read line; do\n                let cnt+=1\n                test $cnt -ge 5000 || continue\n                let total+=$cnt\n                cnt=0\n                echo \"Packed $total files\"\n            done\n            let total+=$cnt\n            test $cnt -eq 0 || echo \"Packed $total files\"\n        }\n        test ${PIPESTATUS[0]} -eq 0 || exit 1\n    )\n    fail_panic \"Can't pack $archive\"\n}\n\nrm -rf $TMPDIR && mkdir -p $TMPDIR\n\n# first create the reference ndk directory from the git reference\necho \"Creating reference from source files\"\nREFERENCE=$TMPDIR/reference && rm -rf $REFERENCE/* &&\ncopy_file_list \"$NDK_ROOT_DIR\" \"$REFERENCE\" $GIT_FILES &&\nrm -f $REFERENCE/Android.mk\nfail_panic \"Could not create reference. Aborting.\"\n\nfor VERSION in $LLVM_VERSION_LIST; do\n    THIS_LLVM_LIBCXX_SUBDIR=\"sources/cxx-stl/llvm-libc++/$VERSION/libcxx\"\n    echo \"Copying LLVM-$VERSION libc++ headers and sources\"\n    # first remove symlink\n    rm \"$REFERENCE/$THIS_LLVM_LIBCXX_SUBDIR\"\n    fail_panic \"Could not remove LLVM-$VERSION libc++ link. Aborting.\"\n    # create dir and copy headers and sources\n    mkdir -p \"$REFERENCE/$THIS_LLVM_LIBCXX_SUBDIR\"\n    cp -r \"$NDK_ROOT_DIR/$THIS_LLVM_LIBCXX_SUBDIR/include\" \"$REFERENCE/$THIS_LLVM_LIBCXX_SUBDIR/\"\n    fail_panic \"Could not copy LLVM-$VERSION libc++ include files. Aborting.\"\n    cp -r \"$NDK_ROOT_DIR/$THIS_LLVM_LIBCXX_SUBDIR/src\" \"$REFERENCE/$THIS_LLVM_LIBCXX_SUBDIR/\"\n    fail_panic \"Could not copy LLVM-$VERSION libc++ src files. Aborting.\"\n    cp -r \"$NDK_ROOT_DIR/$THIS_LLVM_LIBCXX_SUBDIR/test\" \"$REFERENCE/$THIS_LLVM_LIBCXX_SUBDIR/\"\n    fail_panic \"Could not copy LLVM-$VERSION libc++ test files. Aborting.\"\ndone\n\necho \"Copying Bionic tests\"\nBIONIC_TESTS_SUBDIR=\"sources/crystax/tests/bionic\"\nBIONIC_TESTS_SRCDIR=\"$NDK_ROOT_DIR/$BIONIC_TESTS_SUBDIR\"\nBIONIC_TESTS_DSTDIR=\"$REFERENCE/$BIONIC_TESTS_SUBDIR\"\nrm -Rf \"$BIONIC_TESTS_DSTDIR\" && mkdir -p \"$BIONIC_TESTS_DSTDIR\" && rsync -aL \"$BIONIC_TESTS_SRCDIR/\" \"$BIONIC_TESTS_DSTDIR/\"\nfail_panic \"Could not copy Bionic tests\"\n\necho \"Copying OpenPTS sources\"\nOPENPTS_SUBDIR=\"sources/crystax/tests/openpts\"\nOPENPTS_SRCDIR=\"$NDK_ROOT_DIR/$OPENPTS_SUBDIR\"\nOPENPTS_DSTDIR=\"$REFERENCE/$OPENPTS_SUBDIR\"\nrm -Rf \"$OPENPTS_DSTDIR\" && mkdir -p \"$OPENPTS_DSTDIR\" && rsync -aL --exclude=/.git \"$OPENPTS_SRCDIR/\" \"$OPENPTS_DSTDIR/\"\nfail_panic \"Could not copy OpenPTS sources\"\n\necho \"Copying libkqueue tests\"\nLIBKQUEUE_TESTS_SUBDIR=\"sources/crystax/tests/libkqueue\"\nLIBKQUEUE_TESTS_SRCDIR=\"$NDK_ROOT_DIR/$LIBKQUEUE_TESTS_SUBDIR\"\nLIBKQUEUE_TESTS_DSTDIR=\"$REFERENCE/$LIBKQUEUE_TESTS_SUBDIR\"\nrm -Rf \"$LIBKQUEUE_TESTS_DSTDIR\" && mkdir -p \"$LIBKQUEUE_TESTS_DSTDIR\" && rsync -aL \"$LIBKQUEUE_TESTS_SRCDIR/\" \"$LIBKQUEUE_TESTS_DSTDIR/\"\nfail_panic \"Could not copy libkqueue tests sources\"\n\necho \"Copying libpwq tests\"\nLIBPWQ_TESTS_SUBDIR=\"sources/crystax/tests/libpwq\"\nLIBPWQ_TESTS_SRCDIR=\"$NDK_ROOT_DIR/$LIBPWQ_TESTS_SUBDIR\"\nLIBPWQ_TESTS_DSTDIR=\"$REFERENCE/$LIBPWQ_TESTS_SUBDIR\"\nrm -Rf \"$LIBPWQ_TESTS_DSTDIR\" && mkdir -p \"$LIBPWQ_TESTS_DSTDIR\" && rsync -aL \"$LIBPWQ_TESTS_SRCDIR/\" \"$LIBPWQ_TESTS_DSTDIR/\"\nfail_panic \"Could not copy libpwq tests sources\"\n\n# Copy platform and sample files\necho \"Unpacking platform files\" &&\nunpack_archive \"$PREBUILT_DIR/platforms.tar.xz\" \"$REFERENCE\" &&\necho \"Unpacking samples files\" &&\nunpack_archive \"$PREBUILT_DIR/samples.tar.xz\" \"$REFERENCE\"\nfail_panic \"Could not unpack platform and sample files\"\n\n# Remove the source for host tools to make the final package smaller\nrm -rf $REFERENCE/sources/host-tools\n\n# Remove leftovers, just in case...\nrm -rf $REFERENCE/samples/*/{obj,libs,build.xml,local.properties,Android.mk} &&\nrm -rf $REFERENCE/tests/build/*/{obj,libs} &&\nrm -rf $REFERENCE/tests/device/*/{obj,libs}\n\n# copy sources files\nif [ -d $DEVELOPMENT_ROOT/sources ] ; then\n    echo \"Copying NDK sources files\"\n    copy_file_list \"$DEVELOPMENT_ROOT\" \"$REFERENCE\" \"sources\"\n    fail_panic \"Could not copy sources. Aborting.\"\nfi\n\n# Unpack prebuilt Objective-C, C++ runtimes headers and libraries\n#\n\n# Unpack gdbserver\nfor ARCH in $ARCHS; do\n    unpack_prebuilt $ARCH-gdbserver \"$REFERENCE\"\ndone\n# Unpack Objective-C, C++ runtimes\nfor VERSION in $GCC_VERSION_LIST; do\n    unpack_prebuilt gnu-libstdc++-headers-$VERSION \"$REFERENCE\"\ndone\nunpack_prebuilt gnustep-objc2-headers \"$REFERENCE\"\n\nunpack_prebuilt sqlite3-build-files \"$REFERENCE\"\nunpack_prebuilt sqlite3-headers \"$REFERENCE\"\nfor VERSION in $OPENSSL_VERSIONS; do\n    unpack_prebuilt openssl-${VERSION}-headers \"$REFERENCE\"\ndone\nfor VERSION in $PYTHON_VERSIONS; do\n    unpack_prebuilt python${VERSION}-headers \"$REFERENCE\"\ndone\nfor VERSION in $LIBPNG_VERSIONS; do\n    unpack_prebuilt libpng-$VERSION-headers \"$REFERENCE\"\ndone\nfor VERSION in $LIBJPEG_VERSIONS; do\n    unpack_prebuilt libjpeg-$VERSION-headers \"$REFERENCE\"\ndone\nfor VERSION in $LIBJPEGTURBO_VERSIONS; do\n    unpack_prebuilt libjpeg-turbo-$VERSION-headers \"$REFERENCE\"\ndone\nfor VERSION in $LIBTIFF_VERSIONS; do\n    unpack_prebuilt libtiff-$VERSION-headers \"$REFERENCE\"\ndone\nfor VERSION in $ICU_VERSIONS; do\n    unpack_prebuilt icu-$VERSION-build-files \"$REFERENCE\"\n    unpack_prebuilt icu-$VERSION-headers \"$REFERENCE\"\ndone\nfor VERSION in $BOOST_VERSIONS; do\n    unpack_prebuilt boost-$VERSION-build-files \"$REFERENCE\"\n    unpack_prebuilt boost-$VERSION-headers \"$REFERENCE\"\ndone\nfor ABI in $ABIS; do\n    unpack_prebuilt crystax-libs-$ABI \"$REFERENCE\"\n    for VERSION in $LLVM_VERSION_LIST; do\n        unpack_prebuilt libcxx-libs-$VERSION-$ABI-g \"$REFERENCE\"\n    done\n    for VERSION in $GCC_VERSION_LIST; do\n        unpack_prebuilt gnu-libstdc++-libs-$VERSION-$ABI-g \"$REFERENCE\"\n    done\n    unpack_prebuilt gnustep-objc2-libs-$ABI \"$REFERENCE\"\n    unpack_prebuilt cocotron-$ABI \"$REFERENCE\"\n    unpack_prebuilt sqlite3-libs-$ABI \"$REFERENCE\"\n    for VERSION in $OPENSSL_VERSIONS; do\n        unpack_prebuilt openssl-${VERSION}-binaries-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $PYTHON_VERSIONS; do\n        unpack_prebuilt python${VERSION}-binaries-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $LIBPNG_VERSIONS; do\n        unpack_prebuilt libpng-$VERSION-libs-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $LIBJPEG_VERSIONS; do\n        unpack_prebuilt libjpeg-$VERSION-libs-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $LIBJPEGTURBO_VERSIONS; do\n        unpack_prebuilt libjpeg-turbo-$VERSION-libs-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $LIBTIFF_VERSIONS; do\n        unpack_prebuilt libtiff-$VERSION-libs-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $ICU_VERSIONS; do\n        unpack_prebuilt icu-$VERSION-libs-$ABI \"$REFERENCE\"\n    done\n    for VERSION in $BOOST_VERSIONS; do\n        for STDLIB in $BOOST_CXX_STDLIBS; do\n            unpack_prebuilt boost-$VERSION-libs-$STDLIB-$ABI \"$REFERENCE\"\n        done\n    done\n    unpack_prebuilt compiler-rt-libs-$ABI \"$REFERENCE\"\n    unpack_prebuilt libgccunwind-libs-$ABI \"$REFERENCE\"\n\n    unpack_prebuilt android-bash-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-coreutils-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-grep-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-sed-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-tar-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-zip-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-which-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-info-zip-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-info-unzip-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-openssh-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-cpulimit-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-ncurses-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-gnu-less-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-procps-ng-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-htop-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-vim-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-x264-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-ffmpeg-$ABI \"$REFERENCE\"\n    unpack_prebuilt android-net-tools-$ABI \"$REFERENCE\"\ndone\n\nRELEASE_VERSION=${RELEASE_PREFIX%%-b*}\n# create a release file named 'RELEASE.TXT' containing the release\n# name. This is used by the build script to detect whether you're\n# invoking the NDK from a release package or from the development\n# tree.\n#\nif [ \"$TRY64\" = \"yes\" ]; then\n    echo \"$RELEASE_VERSION (64-bit)\" > $REFERENCE/RELEASE.TXT\nelse\n    echo \"$RELEASE_VERSION\" > $REFERENCE/RELEASE.TXT\nfi\n\n# Patch sysroot\n$REFERENCE/sources/crystax/bin/patch-sysroot --libraries\nfail_panic \"Could not patch sysroot\"\n\n# Remove auto-generated libcrystax.* stubs from platforms\nfind $REFERENCE/platforms -name 'libcrystax.*' -delete\n\n# Remove un-needed files\nrm -f $REFERENCE/CleanSpec.mk\nrm -Rf $REFERENCE/sources/crystax/vendor\n\n# now, for each system, create a package\n#\nDSTDIR=$TMPDIR/$RELEASE_VERSION\nDSTDIR64=${DSTDIR}\nif [ \"$SEPARATE_64\" = \"yes\" ] ; then\n    DSTDIR64=$TMPDIR/64/${RELEASE_VERSION}\nfi\n\nSCRIPTS_DIR=$(dirname $(dirname $0))/scripts\n\nfor SYSTEM in $SYSTEMS; do\n    echo \"Preparing package for system $SYSTEM.\"\n    BIN_RELEASE=$RELEASE_PREFIX-$SYSTEM\n    rm -rf \"$DSTDIR\" \"$DSTDIR64\" &&\n    mkdir -p \"$DSTDIR\" \"$DSTDIR64\" &&\n    copy_directory \"$REFERENCE\" \"$DSTDIR\"\n    fail_panic \"Could not copy reference. Aborting.\"\n\n    if [ \"$DSTDIR\" != \"$DSTDIR64\" ]; then\n        copy_directory \"$DSTDIR\" \"$DSTDIR64\"\n        echo \"$RELEASE_VERSION (64-bit)\" > $DSTDIR64/RELEASE.TXT\n    fi\n\n    # Unpack toolchains\n    for TC in $TOOLCHAINS; do\n        unpack_prebuilt $TC-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n        echo \"Removing sysroot for $TC\"\n        rm -rf $DSTDIR/toolchains/$TC/prebuilt/$SYSTEM/sysroot\n        rm -rf $DSTDIR64/toolchains/$TC/prebuilt/${SYSTEM}_64/sysroot\n        rm -rf $DSTDIR64/toolchains/$TC/prebuilt/${SYSTEM}-x86_64/sysroot\n    done\n\n    # Unpack clang/llvm\n    for LLVM_VERSION in $LLVM_VERSION_LIST; do\n        # TODO(danalbert): Fix 64-bit Windows LLVM.\n        # This wrongly packages 32-bit Windows LLVM for 64-bit as well, but\n        # the real bug here is that we don't have a 64-bit Windows LLVM.\n        # http://b/22414702\n        LLVM_32=\n        if [ \"$SYSTEM\" = \"windows\" -a \"$TRY64\" = \"yes\" ]; then\n            LLVM_32=yes\n        fi\n        unpack_prebuilt \\\n            llvm-$LLVM_VERSION-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\" $LLVM_32\n    done\n\n    rm -rf $DSTDIR/toolchains/*l\n    rm -rf $DSTDIR64/toolchains/*l\n\n    # Unpack renderscript tools; http://b/22377128.\n    #echo \"WARNING: no renderscript-$SYSTEM tools! http://b/22377128\"\n    unpack_prebuilt renderscript-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n\n    # Unpack prebuilt ndk-stack and other host tools\n    unpack_prebuilt ndk-stack-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\" \"yes\"\n    unpack_prebuilt ndk-depends-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\" \"yes\"\n    unpack_prebuilt ndk-make-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n    unpack_prebuilt ndk-awk-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n    unpack_prebuilt ndk-python-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n    unpack_prebuilt ndk-yasm-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n\n    if [ \"$SYSTEM\" = \"windows\" ]; then\n        unpack_prebuilt toolbox-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n    fi\n\n    for VERSION in $PYTHON_VERSIONS; do\n        unpack_prebuilt ndk-vendor-host-python$VERSION-$SYSTEM \"$DSTDIR\" \"$DSTDIR64\"\n    done\n\n    # Unpack other host tools\n    unpack_prebuilt scan-build-view \"$DSTDIR\" \"$DSTDIR64\"\n\n    # Unpack renderscript headers/libs; http://b/22377128.\n    #echo \"WARNING: no renderscript headers/libs! http://b/22377128\"\n    unpack_prebuilt renderscript \"$DSTDIR\" \"$DSTDIR64\"\n\n    # Unpack misc stuff\n    if [ -f \"$PREBUILT_DIR/misc.tar.xz\" ]; then\n        unpack_prebuilt misc \"$DSTDIR\" \"$DSTDIR64\"\n    fi\n\n    # Remove duplicated files in case-insensitive file system\n    if [ \"$SYSTEM\" = \"windows\" -o \"$SYSTEM\" = \"darwin-x86\" ]; then\n        rm -rf $DSTDIR/tests/build/c++-stl-source-extensions\n        rm -rf $DSTDIR64/tests/build/c++-stl-source-extensions\n        find \"$DSTDIR/platforms\" | sort -f | uniq -di | xargs rm -f\n        find \"$DSTDIR64/platforms\" | sort -f | uniq -di | xargs rm -f\n    fi\n\n    # Remove include-fixed/linux/a.out.h.   See b.android.com/73728\n    find \"$DSTDIR/toolchains\" \"$DSTDIR64/toolchains\" -name a.out.h | grep include-fixed/ | xargs rm -f\n\n    # Remove redundant pretty-printers/libstdcxx\n    rm -rf $DSTDIR/prebuilt/*/share/pretty-printers/libstdcxx/gcc-l*\n    rm -rf $DSTDIR/prebuilt/*/share/pretty-printers/libstdcxx/gcc-4.9-*\n    rm -rf $DSTDIR64/prebuilt/*/share/pretty-printers/libstdcxx/gcc-l*\n    rm -rf $DSTDIR64/prebuilt/*/share/pretty-printers/libstdcxx/gcc-4.9-*\n\n    # Remove python tests\n    find $DSTDIR/prebuilt/*/lib/python* -name test -exec rm -rf {} \\;\n    find $DSTDIR64/prebuilt/*/lib/python* -name test -exec rm -rf {} \\;\n\n    # Remove python *.pyc and *.pyo files\n    find $DSTDIR/prebuilt/*/lib/python* -name \"*.pyc\" -exec rm -rf {} \\;\n    find $DSTDIR/prebuilt/*/lib/python* -name \"*.pyo\" -exec rm -rf {} \\;\n    find $DSTDIR64/prebuilt/*/lib/python* -name \"*.pyc\"  -exec rm -rf {} \\;\n    find $DSTDIR64/prebuilt/*/lib/python* -name \"*.pyo\"  -exec rm -rf {} \\;\n\n    # Remove .git*\n    find $DSTDIR -name \".git*\" -exec rm -rf {} \\;\n    find $DSTDIR64 -name \".git*\" -exec rm -rf {} \\;\n\n    # install crew utils and crew\n    #   first, remove crew related files that were copied from source dir\n    rm -rf $DSTDIR/prebuilt/*/crew\n    rm -rf $DSTDIR/tools/crew\n    rm -rf $DSTDIR64/prebuilt/*/crew\n    rm -rf $DSTDIR64/tools/crew\n    #   2nd, install 32 and 64 bit versions of the crew utilties\n    #   NB: the code below will work correctly only wneh both 32 and 64 bit releases are build\n    #       I hope we'll change the whole build proccess really soon\n    #-#echo $SCRIPTS_DIR/install-crew-utils --target-os=\"${SYSTEM%%-*}\" --target-cpu=x86 --out-dir=\"$DSTDIR\" --log-file=$NDK_LOGFILE\n    #-#$SCRIPTS_DIR/install-crew-utils --target-os=\"${SYSTEM%%-*}\" --target-cpu=x86 --out-dir=\"$DSTDIR\" --log-file=$NDK_LOGFILE\n    #-#fail_panic \"Could not install 32-bit crew utils\"\n    #-#echo $SCRIPTS_DIR/install-crew-utils --target-os=\"${SYSTEM%%-*}\" --target-cpu=\"x86_64\" --out-dir=\"$DSTDIR64\" --log-file=$NDK_LOGFILE\n    #-#$SCRIPTS_DIR/install-crew-utils --target-os=\"${SYSTEM%%-*}\" --target-cpu=\"x86_64\" --out-dir=\"$DSTDIR64\" --log-file=$NDK_LOGFILE\n    #-#fail_panic \"Could not install 64-bit crew utils\"\n    #-##   3rd, install crew\n    #-#echo \"$SCRIPTS_DIR/install-crew --out-dir=$DSTDIR/tools\"\n    #-#$SCRIPTS_DIR/install-crew --out-dir=\"$DSTDIR/tools\"\n    #-#fail_panic \"Could not install CREW\"\n\n    # Create an archive for the final package. Extension depends on the\n    # host system.\n    ARCHIVE=$BIN_RELEASE\n    if [ \"$TRY64\" = \"yes\" ]; then\n        ARCHIVE=`name64 $ARCHIVE`\n    elif [ \"$SYSTEM\" = \"windows\" ]; then\n        ARCHIVE=$ARCHIVE-x86\n    fi\n    case \"$SYSTEM\" in\n        windows)\n            SHORT_SYSTEM=\"windows\"\n            ;;\n        *)\n            SHORT_SYSTEM=$SYSTEM\n            ;;\n    esac\n\n    case \"$SYSTEM\" in\n        windows*)\n            EXT=7z\n            ;;\n        *)\n            EXT=tar.xz\n    esac\n\n    ARCHIVE64=\"${ARCHIVE}_64.${EXT}\"\n    ARCHIVE=\"${ARCHIVE}.${EXT}\"\n    if [ \"$TRY64\" = \"yes\" ]; then\n        ARCHIVE=$ARCHIVE64\n    fi\n\n    # make all file universally readable, and all executable (including directory)\n    # universally executable, punt intended\n    find $DSTDIR $DSTDIR64 -exec chmod a+r {} \\;\n    find $DSTDIR $DSTDIR64 -executable -exec chmod a+x {} \\;\n    # we do not build 32 bit version for linux and darwin\n    if [ \"$SYSTEM\" = \"windows\" ]; then\n        echo \"Creating $ARCHIVE\"\n        pack_release \"$OUT_DIR/$ARCHIVE\" \"$TMPDIR\" \"$RELEASE_VERSION\"\n        fail_panic \"Could not create archive: $OUT_DIR/$ARCHIVE\"\n    fi\n    if [ \"$SEPARATE_64\" = \"yes\" ] ; then\n        rm -rf \"$DSTDIR/prebuilt/common\"\n        rm -rf \"$DSTDIR/prebuilt/$SHORT_SYSTEM\"\n        find \"$DSTDIR/toolchains\" -type d -name prebuilt | xargs rm -rf\n        cp -r \"$DSTDIR64\"/* \"$DSTDIR\"/\n        rm -rf \"$DSTDIR64\"\n        echo \"Creating $ARCHIVE64\"\n        pack_release \"$OUT_DIR/$ARCHIVE64\" \"$TMPDIR\" \"$RELEASE_VERSION\"\n        fail_panic \"Could not create archive: $OUT_DIR/$ARCHIVE64\"\n    fi\ndone\n\necho \"Cleaning up.\"\nrm -rf $TMPDIR/reference\nrm -rf $TMPDIR/prev-ndk\n\necho \"Done, please see packages in $OUT_DIR:\"\nls -lh $OUT_DIR | tee $OUT_DIR/artifacts.txt\n"
  },
  {
    "path": "build/instruments/patch-sources.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Script used to patch a source directory from a series of patches\n# located under a directory hierarchy\n\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <patches-dir>\"\nPROGRAM_DESCRIPTION=\\\n\"Patch a target source directory with a series of patches taken\nfrom another directory hierarchy. The idea is that anything that\nis found under <patches-dir>/subdir/foo.patch will be applied with\n'patch -p1' in <src-dir>/subdir.\n\nPatches are applied in the order they are found by 'find'.\"\n\nOPTION_REVERSE=no\nregister_var_option \"--reverse\" OPTION_REVERSE \"Reverse the patches applied previously\"\n\nparse_parameters ()\n{\n    SRC_DIR=$1\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory. See --help for usage.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Invalid target source directory: $SRC_DIR\"\n        exit 1\n    fi\n\n    PATCHES_DIR=$2\n    if [ -z \"$PATCHES_DIR\" ] ; then\n        echo \"ERROR: Missing patches directory. See --help for usage.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$PATCHES_DIR\" ] ; then\n        echo \"ERROR: Invalid patches directory: $PATCHES_DIR\"\n        exit 1\n    fi\n}\n\nextract_parameters \"$@\"\nparse_parameters $PARAMETERS\n\nif [ \"$OPTION_REVERSE\" = \"yes\" ]; then\n    SORT=\"-r\"\n    REVERSE=\"-R\"\nfi\n\nPATCHES=`(cd $PATCHES_DIR && find . -name \"*.patch\" | sort $SORT) 2> /dev/null`\n\nif [ -z \"$PATCHES\" ] ; then\n    log \"No patches files in $PATCHES_DIR\"\n    exit 0\nfi\nPATCHES=`echo $PATCHES | sed -e s%^\\./%%g`\nfor PATCH in $PATCHES; do\n    PATCHDIR=`dirname $PATCH`\n    PATCHNAME=`basename $PATCH`\n    if [ -d $SRC_DIR/$PATCHDIR ]; then\n        log \"Applying $PATCHNAME into $SRC_DIR/$PATCHDIR\"\n        cd $SRC_DIR/$PATCHDIR && patch $REVERSE -p1 < $PATCHES_DIR/$PATCH\n        fail_panic \"Patch failure with $PATCHES_DIR/$PATCH!! !! Please check your patches directory!\"\n    else\n        echo \"Ignore non-existance $SRC_DIR/$PATCHDIR\"\n    fi\ndone\n\ndump \"Done!\"\n"
  },
  {
    "path": "build/instruments/prebuilt-common.sh",
    "content": "# Common functions for all prebuilt-related scripts\n# This is included/sourced by other scripts\n#\n\n# ensure stable sort order\nexport LC_ALL=C\n\n# NDK_BUILDTOOLS_PATH should point to the directory containing\n# this script. If it is not defined, assume that this is one of\n# the scripts in the same directory that sourced this file.\n#\nif [ -z \"$NDK_BUILDTOOLS_PATH\" ]; then\n    NDK_BUILDTOOLS_PATH=$(dirname $0)\n    if [ ! -f \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\" ]; then\n        echo \"INTERNAL ERROR: Please define NDK_BUILDTOOLS_PATH to point to \\$NDK/build/instruments\"\n        exit 1\n    fi\nfi\n\n# Warn if /bin/sh isn't bash.\nif [ -z \"$BASH_VERSION\" ] ; then\n    echo \"WARNING: The shell running this script isn't bash.  Although we try to avoid bashism in scripts, things can happen.\"\nfi\n\nNDK_BUILDTOOLS_ABSPATH=$(cd $NDK_BUILDTOOLS_PATH && pwd)\n\n. $NDK_BUILDTOOLS_PATH/ndk-common.sh\n. $NDK_BUILDTOOLS_PATH/dev-defaults.sh\n\n# Given an input string of the form <foo>-<bar>-<version>, where\n# <version> can be <major>.<minor>, extract <major>\nextract_version ()\n{\n    echo $1 | tr '-' '\\n' | tail -1\n}\n\n# $1: versioned name (e.g. arm-linux-androideabi-4.8)\n# Out: major version (e.g. 4)\n#\n# Examples:  arm-linux-androideabi-4.4.3 -> 4\n#            gmp-0.81 -> 0\n#\nextract_major_version ()\n{\n    local RET=$(extract_version $1 | cut -d . -f 1)\n    RET=${RET:-0}\n    echo $RET\n}\n\n# Same as extract_major_version, but for the minor version number\n# $1: versioned named\n# Out: minor version\n#\nextract_minor_version ()\n{\n    local RET=$(extract_version $1 | cut -d . -f 2)\n    RET=${RET:-0}\n    echo $RET\n}\n\n# Compare two version numbers and only succeeds if the first one is\n# greater than or equal to the second one.\n#\n# $1: first version (e.g. 4.9)\n# $2: second version (e.g. 4.8)\n#\n# Example: version_is_at_least 4.9 4.8 --> success\n#\nversion_is_at_least ()\n{\n    local A_MAJOR A_MINOR B_MAJOR B_MINOR\n    A_MAJOR=$(extract_major_version $1)\n    B_MAJOR=$(extract_major_version $2)\n\n    if [ $A_MAJOR -lt $B_MAJOR ]; then\n        return 1\n    elif [ $A_MAJOR -gt $B_MAJOR ]; then\n        return 0\n    fi\n\n    # We have A_MAJOR == B_MAJOR here\n\n    A_MINOR=$(extract_minor_version $1)\n    B_MINOR=$(extract_minor_version $2)\n\n    if [ $A_MINOR -lt $B_MINOR ]; then\n        return 0\n    else\n        return 1\n    fi\n}\n\n#====================================================\n#\n#  UTILITY FUNCTIONS\n#\n#====================================================\n\n# Return the maximum length of a series of strings\n#\n# Usage:  len=`max_length <string1> <string2> ...`\n#\nmax_length ()\n{\n    echo \"$@\" | tr ' ' '\\n' | awk 'BEGIN {max=0} {len=length($1); if (len > max) max=len} END {print max}'\n}\n\n# Translate dashes to underscores\n# Usage:  str=`dashes_to_underscores <values>`\ndashes_to_underscores ()\n{\n    echo \"$@\" | tr '-' '_'\n}\n\n# Translate underscores to dashes\n# Usage: str=`underscores_to_dashes <values>`\nunderscores_to_dashes ()\n{\n    echo \"$@\" | tr '_' '-'\n}\n\n# Translate commas to spaces\n# Usage: str=`commas_to_spaces <list>`\ncommas_to_spaces ()\n{\n    echo \"$@\" | tr ',' ' '\n}\n\n# Translate spaces to commas\n# Usage: list=`spaces_to_commas <string>`\nspaces_to_commas ()\n{\n    echo \"$@\" | tr ' ' ','\n}\n\n# Remove trailing path of a path\n# $1: path\nremove_trailing_slash () {\n    echo ${1%%/}\n}\n\n# Reverse a file path directory\n# foo -> .\n# foo/bar -> ..\n# foo/bar/zoo -> ../..\nreverse_path ()\n{\n    local path cur item\n    path=${1%%/} # remove trailing slash\n    cur=\".\"\n    if [ \"$path\" != \".\" ] ; then\n        for item in $(echo \"$path\" | tr '/' ' '); do\n            cur=\"../$cur\"\n        done\n    fi\n    echo ${cur%%/.}\n}\n\n# test_reverse_path ()\n# {\n#     rr=`reverse_path $1`\n#     if [ \"$rr\" != \"$2\" ] ; then\n#         echo \"ERROR: reverse_path '$1' -> '$rr' (expected '$2')\"\n#     fi\n# }\n#\n# test_reverse_path . .\n# test_reverse_path ./ .\n# test_reverse_path foo ..\n# test_reverse_path foo/ ..\n# test_reverse_path foo/bar ../..\n# test_reverse_path foo/bar/ ../..\n# test_reverse_path foo/bar/zoo ../../..\n# test_reverse_path foo/bar/zoo/ ../../..\n\n# Sort a space-separated list and remove duplicates\n# $1+: slist\n# Output: new slist\nsort_uniq ()\n{\n    local RET\n    RET=$(echo \"$@\" | tr ' ' '\\n' | sort -u)\n    echo $RET\n}\n\n# Return the list of all regular files under a given directory\n# $1: Directory path\n# Output: list of files, relative to $1\nlist_files_under ()\n{\n    if [ -d \"$1\" ]; then\n        (cd $1 && find . -type f | sed -e \"s!./!!\" | sort -u)\n    else\n        echo \"\"\n    fi\n}\n\n# Returns all words in text that do not match any of the pattern\n# $1: pattern\n# $2: text\nfilter_out ()\n{\n    local PATTERN=\"$1\"\n    local TEXT=\"$2\"\n    for pat in $PATTERN; do\n        pat=$\"${pat//\\//\\\\/}\"\n        TEXT=$(echo $TEXT | sed -e 's/'$pat' //g' -e 's/'$pat'$//g')\n    done\n    echo $TEXT\n}\n\n# Assign a value to a variable\n# $1: Variable name\n# $2: Value\nvar_assign ()\n{\n    eval $1=\\\"$2\\\"\n}\n\n#====================================================\n#\n#  OPTION PROCESSING\n#\n#====================================================\n\n# We recognize the following option formats:\n#\n#  -f\n#  --flag\n#\n#  -s<value>\n#  --setting=<value>\n#\n\n# NOTE: We translate '-' into '_' when storing the options in global variables\n#\n\nOPTIONS=\"\"\nOPTION_FLAGS=\"\"\nOPTION_SETTINGS=\"\"\n\n# Set a given option attribute\n# $1: option name\n# $2: option attribute\n# $3: attribute value\n#\noption_set_attr ()\n{\n    eval OPTIONS_$1_$2=\\\"$3\\\"\n}\n\n# Get a given option attribute\n# $1: option name\n# $2: option attribute\n#\noption_get_attr ()\n{\n    echo `var_value OPTIONS_$1_$2`\n}\n\n# Register a new option\n# $1: option\n# $2: small abstract for the option\n# $3: optional. default value\n#\nregister_option_internal ()\n{\n    optlabel=\n    optname=\n    optvalue=\n    opttype=\n    while [ -n \"1\" ] ; do\n        # Check for something like --setting=<value>\n        echo \"$1\" | grep -q -E -e '^--[^=]+=<.+>$'\n        if [ $? = 0 ] ; then\n            optlabel=`expr -- \"$1\" : '\\(--[^=]*\\)=.*'`\n            optvalue=`expr -- \"$1\" : '--[^=]*=\\(<.*>\\)'`\n            opttype=\"long_setting\"\n            break\n        fi\n\n        # Check for something like --flag\n        echo \"$1\" | grep -q -E -e '^--[^=]+$'\n        if [ $? = 0 ] ; then\n            optlabel=\"$1\"\n            opttype=\"long_flag\"\n            break\n        fi\n\n        # Check for something like -f<value>\n        echo \"$1\" | grep -q -E -e '^-[A-Za-z0-9]<.+>$'\n        if [ $? = 0 ] ; then\n            optlabel=`expr -- \"$1\" : '\\(-.\\).*'`\n            optvalue=`expr -- \"$1\" : '-.\\(<.+>\\)'`\n            opttype=\"short_setting\"\n            break\n        fi\n\n        # Check for something like -f\n        echo \"$1\" | grep -q -E -e '^-.$'\n        if [ $? = 0 ] ; then\n            optlabel=\"$1\"\n            opttype=\"short_flag\"\n            break\n        fi\n\n        echo \"ERROR: Invalid option format: $1\"\n        echo \"       Check register_option call\"\n        exit 1\n    done\n\n    log \"new option: type='$opttype' name='$optlabel' value='$optvalue'\"\n\n    optname=`dashes_to_underscores $optlabel`\n    OPTIONS=\"$OPTIONS $optname\"\n    OPTIONS_TEXT=\"$OPTIONS_TEXT $1\"\n    option_set_attr $optname label \"$optlabel\"\n    option_set_attr $optname otype \"$opttype\"\n    option_set_attr $optname value \"$optvalue\"\n    option_set_attr $optname text \"$1\"\n    option_set_attr $optname abstract \"$2\"\n    option_set_attr $optname default \"$3\"\n}\n\n# Register a new option with a function callback.\n#\n# $1: option\n# $2: name of function that will be called when the option is parsed\n# $3: small abstract for the option\n# $4: optional. default value\n#\nregister_option ()\n{\n    local optname optvalue opttype optlabel\n    register_option_internal \"$1\" \"$3\" \"$4\"\n    option_set_attr $optname funcname \"$2\"\n}\n\n# Register a new option with a variable store\n#\n# $1: option\n# $2: name of variable that will be set by this option\n# $3: small abstract for the option\n#\n# NOTE: The current value of $2 is used as the default\n#\nregister_var_option ()\n{\n    local optname optvalue opttype optlabel\n    register_option_internal \"$1\" \"$3\" \"`var_value $2`\"\n    option_set_attr $optname varname \"$2\"\n}\n\n\nMINGW=no\nDARWIN=no\ndo_mingw_option ()\n{\n    if [ \"$DARWIN\" = \"yes\" ]; then\n        echo \"Can not have both --mingw and --darwin\"\n        exit 1\n    fi\n    MINGW=yes;\n}\ndo_darwin_option ()\n{\n    if [ \"$MINGW\" = \"yes\" ]; then\n        echo \"Can not have both --mingw and --darwin\"\n        exit 1\n    fi\n    DARWIN=yes; \n}\n\nregister_canadian_option ()\n{\n    if [ \"$HOST_OS\" = \"linux\" ] ; then\n        register_option \"--mingw\" do_mingw_option \"Generate windows binaries on Linux.\"\n        register_option \"--darwin\" do_darwin_option \"Generate darwin binaries on Linux.\"\n    fi\n}\n\nTRY64=no\ndo_try64_option () { TRY64=yes; }\n\nregister_try64_option ()\n{\n    register_option \"--try-64\" do_try64_option \"Generate 64-bit only binaries.\"\n}\n\n\nregister_jobs_option ()\n{\n    NUM_JOBS=$BUILD_NUM_CPUS\n    register_var_option \"-j<number>\" NUM_JOBS \"Use <number> parallel build jobs\"\n}\n\n# Print the help, including a list of registered options for this program\n# Note: Assumes PROGRAM_PARAMETERS and PROGRAM_DESCRIPTION exist and\n#       correspond to the parameters list and the program description\n#\nprint_help ()\n{\n    local opt text abstract default\n\n    echo \"Usage: $PROGNAME [options] $PROGRAM_PARAMETERS\"\n    echo \"\"\n    if [ -n \"$PROGRAM_DESCRIPTION\" ] ; then\n        echo \"$PROGRAM_DESCRIPTION\"\n        echo \"\"\n    fi\n    echo \"Valid options (defaults are in brackets):\"\n    echo \"\"\n\n    maxw=`max_length \"$OPTIONS_TEXT\"`\n    AWK_SCRIPT=`echo \"{ printf \\\"%-${maxw}s\\\", \\\\$1 }\"`\n    for opt in $OPTIONS; do\n        text=`option_get_attr $opt text | awk \"$AWK_SCRIPT\"`\n        abstract=`option_get_attr $opt abstract`\n        default=`option_get_attr $opt default`\n        if [ -n \"$default\" ] ; then\n            echo \"  $text     $abstract [$default]\"\n        else\n            echo \"  $text     $abstract\"\n        fi\n    done\n    echo \"\"\n}\n\noption_panic_no_args ()\n{\n    echo \"ERROR: Option '$1' does not take arguments. See --help for usage.\"\n    exit 1\n}\n\noption_panic_missing_arg ()\n{\n    echo \"ERROR: Option '$1' requires an argument. See --help for usage.\"\n    exit 1\n}\n\nextract_parameters ()\n{\n    local opt optname otype value name fin funcname\n    PARAMETERS=\"\"\n    while [ -n \"$1\" ] ; do\n        # If the parameter does not begin with a dash\n        # it is not an option.\n        param=`expr -- \"$1\" : '^\\([^\\-].*\\)$'`\n        if [ -n \"$param\" ] ; then\n            if [ -z \"$PARAMETERS\" ] ; then\n                PARAMETERS=\"$1\"\n            else\n                PARAMETERS=\"$PARAMETERS $1\"\n            fi\n            shift\n            continue\n        fi\n\n        while [ -n \"1\" ] ; do\n            # Try to match a long setting, i.e. --option=value\n            opt=`expr -- \"$1\" : '^\\(--[^=]*\\)=.*$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"long_setting\"\n                value=`expr -- \"$1\" : '^--[^=]*=\\(.*\\)$'`\n                break\n            fi\n\n            # Try to match a long flag, i.e. --option\n            opt=`expr -- \"$1\" : '^\\(--.*\\)$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"long_flag\"\n                value=\"yes\"\n                break\n            fi\n\n            # Try to match a short setting, i.e. -o<value>\n            opt=`expr -- \"$1\" : '^\\(-[A-Za-z0-9]\\)..*$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"short_setting\"\n                value=`expr -- \"$1\" : '^-.\\(.*\\)$'`\n                break\n            fi\n\n            # Try to match a short flag, i.e. -o\n            opt=`expr -- \"$1\" : '^\\(-.\\)$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"short_flag\"\n                value=\"yes\"\n                break\n            fi\n\n            echo \"ERROR: Unknown option '$1'. Use --help for list of valid values.\"\n            exit 1\n        done\n\n        #echo \"Found opt='$opt' otype='$otype' value='$value'\"\n\n        name=`dashes_to_underscores $opt`\n        found=0\n        for xopt in $OPTIONS; do\n            if [ \"$name\" != \"$xopt\" ] ; then\n                continue\n            fi\n            # Check that the type is correct here\n            #\n            # This also allows us to handle -o <value> as -o<value>\n            #\n            xotype=`option_get_attr $name otype`\n            if [ \"$otype\" != \"$xotype\" ] ; then\n                case \"$xotype\" in\n                \"short_flag\")\n                    option_panic_no_args $opt\n                    ;;\n                \"short_setting\")\n                    if [ -z \"$2\" ] ; then\n                        option_panic_missing_arg $opt\n                    fi\n                    value=\"$2\"\n                    shift\n                    ;;\n                \"long_flag\")\n                    option_panic_no_args $opt\n                    ;;\n                \"long_setting\")\n                    option_panic_missing_arg $opt\n                    ;;\n                esac\n            fi\n            found=1\n            break\n            break\n        done\n        if [ \"$found\" = \"0\" ] ; then\n            echo \"ERROR: Unknown option '$opt'. See --help for usage.\"\n            exit 1\n        fi\n        # Set variable or launch option-specific function.\n        varname=`option_get_attr $name varname`\n        if [ -n \"$varname\" ] ; then\n            eval ${varname}=\\\"$value\\\"\n        else\n            eval `option_get_attr $name funcname` \\\"$value\\\"\n        fi\n        shift\n    done\n}\n\ndo_option_help ()\n{\n    print_help\n    exit 0\n}\n\nVERBOSE=no\ndo_option_verbose ()\n{\n    VERBOSE=yes\n}\n\nDRYRUN=no\ndo_option_dryrun ()\n{\n    DRYRUN=yes\n}\n\nregister_option \"--help\"          do_option_help     \"Print this help.\"\nregister_option \"--verbose\"       do_option_verbose  \"Enable verbose mode.\"\nregister_option \"--dryrun\"        do_option_dryrun   \"Set to dryrun mode.\"\n\n#====================================================\n#\n#  TOOLCHAIN AND ABI PROCESSING\n#\n#====================================================\n\n# Determine optional variable value\n# $1: final variable name\n# $2: option variable name\n# $3: small description for the option\nfix_option ()\n{\n    if [ -n \"$2\" ] ; then\n        eval $1=\"$2\"\n        log \"Using specific $3: $2\"\n    else\n        log \"Using default $3: `var_value $1`\"\n    fi\n}\n\n\n# If SYSROOT is empty, check that $1/$2 contains a sysroot\n# and set the variable to it.\n#\n# $1: sysroot path\n# $2: platform/arch suffix\ncheck_sysroot ()\n{\n    if [ -z \"$SYSROOT\" ] ; then\n        log \"Probing directory for sysroot: $1/$2\"\n        if [ -d $1/$2 ] ; then\n            SYSROOT=$1/$2\n        fi\n    fi\n}\n\n# Determine sysroot\n# $1: Option value (or empty)\n#\nfix_sysroot ()\n{\n    if [ -n \"$1\" ] ; then\n        eval SYSROOT=\"$1\"\n        log \"Using specified sysroot: $1\"\n    else\n        SYSROOT_SUFFIX=$PLATFORM/arch-$ARCH\n        SYSROOT=\n        check_sysroot $NDK_DIR/platforms $SYSROOT_SUFFIX\n        check_sysroot $ANDROID_NDK_ROOT/platforms $SYSROOT_SUFFIX\n        check_sysroot `dirname $ANDROID_NDK_ROOT`/development/ndk/platforms $SYSROOT_SUFFIX\n\n        if [ -z \"$SYSROOT\" ] ; then\n            echo \"ERROR: Could not find NDK sysroot path for $SYSROOT_SUFFIX.\"\n            echo \"       Use --sysroot=<path> to specify one.\"\n            exit 1\n        fi\n    fi\n\n    if [ ! -f $SYSROOT/usr/include/stdlib.h ] ; then\n        echo \"ERROR: Invalid sysroot path: $SYSROOT\"\n        echo \"       Use --sysroot=<path> to indicate a valid one.\"\n        exit 1\n    fi\n}\n\n# Check for the availability of a compatibility SDK in Darwin\n# this can be used to generate binaries compatible with either Tiger or\n# Leopard.\n#\n# $1: SDK root path\n# $2: Optional MacOS X minimum version (e.g. 10.5)\nDARWIN_MINVER=10.6\ncheck_darwin_sdk ()\n{\n    local MACSDK=\"$1\"\n    local MINVER=$2\n\n    if [ -z \"$MINVER\" ] ; then\n        # expect SDK root path ended up with either MacOSX##.#.sdk or MacOSX##.#u.sdk\n        MINVER=${MACSDK##*MacOSX}\n        MINVER=${MINVER%%.sdk*}\n        if [ \"$MINVER\" = \"10.4u\" ]; then\n            MINVER=10.4\n        fi\n    fi\n    if [ -d \"$MACSDK\" ] ; then\n        HOST_CFLAGS=$HOST_CFLAGS\" -isysroot $MACSDK -mmacosx-version-min=$MINVER -DMACOSX_DEPLOYMENT_TARGET=$MINVER\"\n        HOST_LDFLAGS=$HOST_LDFLAGS\" -Wl,-syslibroot,$MACSDK -mmacosx-version-min=$MINVER\"\n        DARWIN_MINVER=$MINVER\n        return 0  # success\n    fi\n    return 1\n}\n\n# Probe Darwin SDK in specified diectory $DARWIN_SYSROOT, or\n# /Developer/SDKs/MacOSX10.6.sdk\n#\nprobe_darwin_sdk ()\n{\n    if [ -n \"$DARWIN_SYSROOT\" ]; then\n        if check_darwin_sdk \"$DARWIN_SYSROOT\"; then\n            log \"Use darwin sysroot $DARWIN_SYSROOT\"\n        else\n            echo \"darwin sysroot $DARWIN_SYSROOT is not valid\"\n            exit 1\n        fi\n    elif check_darwin_sdk /Developer/SDKs/MacOSX10.6.sdk 10.6; then\n        log \"Generating Snow Leopard-compatible binaries!\"\n    else\n        local version=`sw_vers -productVersion`\n        log \"Generating $version-compatible binaries!\"\n    fi\n}\n\nhandle_canadian_build ()\n{\n    HOST_EXE=\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ] ; then\n        case $HOST_TAG in\n            linux-*)\n                ;;\n            *)\n                echo \"ERROR: Can only enable --mingw or --darwin on Linux platforms !\"\n                exit 1\n                ;;\n        esac\n        if [ \"$MINGW\" = \"yes\" ] ; then\n            # NOTE: Use x86_64-pc-mingw32msvc or i586-pc-mingw32msvc because wrappers are generated\n            #       using these names\n            if [ \"$TRY64\" = \"yes\" ]; then\n                ABI_CONFIGURE_HOST=x86_64-pc-mingw32msvc\n                HOST_TAG=windows-x86_64\n            else\n                ABI_CONFIGURE_HOST=i586-pc-mingw32msvc\n                HOST_TAG=windows\n            fi\n            HOST_OS=windows\n            HOST_EXE=.exe\n        else\n            if [ \"$TRY64\" = \"yes\" ]; then\n                ABI_CONFIGURE_HOST=x86_64-apple-darwin\n                HOST_TAG=darwin-x86_64\n            else\n                ABI_CONFIGURE_HOST=i686-apple-darwin\n                HOST_TAG=darwin-x86\n            fi\n            HOST_OS=darwin\n        fi\n    fi\n}\n\n# Find mingw toolchain\n#\n# Set MINGW_GCC to the found mingw toolchain\n#\nfind_mingw_toolchain ()\n{\n    if [ \"$DEBIAN_NAME\" -a \"$BINPREFIX\" -a \"$MINGW_GCC\" ]; then\n        return\n    fi\n    # IMPORTANT NOTE: binutils 2.21 requires a cross toolchain named\n    # i585-pc-mingw32msvc-gcc, or it will fail its configure step late\n    # in the toolchain build. Note that binutils 2.19 can build properly\n    # with i585-mingw32mvsc-gcc, which is the name used by the 'mingw32'\n    # toolchain install on Debian/Ubuntu.\n    #\n    # To solve this dilemma, we create a wrapper toolchain named\n    # i586-pc-mingw32msvc-gcc that really calls i586-mingw32msvc-gcc,\n    # this works with all versions of binutils.\n    #\n    # We apply the same logic to the 64-bit Windows cross-toolchain\n    #\n    # Fedora note: On Fedora it's x86_64-w64-mingw32- or i686-w64-mingw32-\n    # On older Fedora it's 32-bit only and called i686-pc-mingw32-\n    # so we just add more prefixes to the list to check.\n    if [ \"$HOST_ARCH\" = \"x86_64\" -a \"$TRY64\" = \"yes\" ]; then\n        BINPREFIX=x86_64-pc-mingw32msvc-\n        #BINPREFIXLST=\"x86_64-w64-mingw32- x86_64-pc-mingw32msvc- amd64-mingw32msvc-\"\n        #MINGW_GCC=x86_64-w64-mingw32-gcc\n        DEBIAN_NAME=mingw64\n        #MINGW_PATH=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin\"\n    else\n        # we are trying 32 bit anyway, so forcing it to avoid build issues\n        force_32bit_binaries\n        BINPREFIX=i586-pc-mingw32msvc-\n        #BINPREFIXLST=\"i686-w64-mingw32- i586-pc-mingw32msvc- i686-pc-mingw32- i586-mingw32msvc-\"\n        #MINGW_GCC=i686-w64-mingw32-gcc\n        DEBIAN_NAME=mingw32\n        #MINGW_PATH=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/linux-x86/host/i686-w64-mingw32-4.8/bin\"\n    fi\n    MINGW_GCC=x86_64-w64-mingw32-gcc\n    MINGW_PATH=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.9.3/bin\"\n\n    export PATH=\"$MINGW_PATH:$PATH\"\n    dump \"Will use mingw toolchain in: $MINGW_PATH\"\n\n\n    # Scan $BINPREFIXLST list to find installed mingw toolchain. It will be\n    # wrapped later with $BINPREFIX.\n    #for i in $BINPREFIXLST; do\n    #    find_program MINGW_GCC ${i}gcc\n    #    if [ -n \"$MINGW_GCC\" ]; then\n    #        dump \"Found mingw toolchain: $MINGW_GCC\"\n    #        break\n    #    fi\n    #done\n}\n\n# Check there is a working cross-toolchain installed.\n#\n# $1: install directory for mingw/darwin wrapper toolchain\n#\nprepare_canadian_toolchain ()\n{\n    if [ \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ]; then\n        return\n    fi\n    CROSS_GCC=\n    if [ \"$MINGW\" = \"yes\" ]; then\n        find_mingw_toolchain\n        if [ -z \"$MINGW_GCC\" ]; then\n            echo \"ERROR: Could not find in your PATH any of:\"\n            for i in $BINPREFIXLST; do echo \"   ${i}gcc\"; done\n            echo \"Please install the corresponding cross-toolchain and re-run this script\"\n            echo \"TIP: On Debian or Ubuntu, try: sudo apt-get install $DEBIAN_NAME\"\n            exit 1\n        fi\n        CROSS_GCC=$MINGW_GCC\n    else\n        if [ -z \"$DARWIN_TOOLCHAIN\" ]; then\n            echo \"Please set DARWIN_TOOLCHAIN to darwin cross-toolchain\"\n            exit 1\n        fi\n        if [ ! -f \"${DARWIN_TOOLCHAIN}-gcc\" ]; then\n            echo \"darwin cross-toolchain $DARWIN_TOOLCHAIN-gcc doesn't exist\"\n            exit 1\n        fi\n        if [ \"$HOST_ARCH\" = \"x86_64\" -a \"$TRY64\" = \"yes\" ]; then\n            BINPREFIX=x86_64-apple-darwin-\n            DEBIAN_NAME=darwin64\n            HOST_CFLAGS=$HOST_CFLAGS\" -m64\"\n        else\n            force_32bit_binaries\n            BINPREFIX=i686-apple-darwin-\n            DEBIAN_NAME=darwin32\n            HOST_CFLAGS=$HOST_CFLAGS\" -m32\"\n        fi\n        CROSS_GCC=${DARWIN_TOOLCHAIN}-gcc\n        probe_darwin_sdk\n    fi\n\n    # Create a wrapper toolchain, and prepend its dir to our PATH\n    CROSS_WRAP_DIR=\"$1\"/$DEBIAN_NAME-wrapper\n    rm -rf \"$CROSS_WRAP_DIR\"\n    mkdir -p \"$CROSS_WRAP_DIR\"\n\n    if [ \"$DARWIN\" = \"yes\" ] ; then\n        cat > \"$CROSS_WRAP_DIR/sw_vers\" <<EOF\n#!/bin/sh\n# Tiny utility for the real sw_vers some Makefiles need\ncase \\$1 in\n    -productVersion)\n        echo $DARWIN_MINVER\n        ;;\n    *)\n        echo \"ERROR: Unknown switch \\$1\"\n        exit 1\nesac\nEOF\n    chmod 0755 \"$CROSS_WRAP_DIR/sw_vers\"\n    fi\n\n    DST_PREFIX=${CROSS_GCC%gcc}\n    if [ \"$NDK_CCACHE\" ]; then\n        DST_PREFIX=\"$NDK_CCACHE $DST_PREFIX\"\n    fi\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=$BINPREFIX --dst-prefix=\"$DST_PREFIX\" \"$CROSS_WRAP_DIR\" \\\n        --cflags=\"$HOST_CFLAGS\" --cxxflags=\"$HOST_CFLAGS\" --ldflags=\"$HOST_LDFLAGS\"\n    # generate wrappers for BUILD toolchain\n    # this is required for mingw/darwin build to avoid tools canadian cross configuration issues\n    # 32-bit BUILD toolchain\n    LEGACY_TOOLCHAIN_DIR=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \\\n            --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m elf_i386\" --asflags=\"--32\" \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \\\n            --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m elf_i386\" --asflags=\"--32\" \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    # 64-bit BUILD toolchain.  libbfd is still built in 32-bit.\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    fail_panic \"Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR\"\n\n    export PATH=$CROSS_WRAP_DIR:$PATH\n    dump \"Using $DEBIAN_NAME wrapper: $CROSS_WRAP_DIR/${BINPREFIX}gcc\"\n}\n\nhandle_host ()\n{\n    if [ \"$TRY64\" != \"yes\" ]; then\n        force_32bit_binaries  # to modify HOST_TAG and others\n        HOST_BITS=32\n    fi\n    handle_canadian_build\n}\n\nsetup_ccache ()\n{\n    # Support for ccache compilation\n    # We can't use this here when building Windows/darwin binaries on Linux with\n    # binutils 2.21, because defining CC/CXX in the environment makes the\n    # configure script fail later\n    #\n    if [ \"$NDK_CCACHE\" -a \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ]; then\n        NDK_CCACHE_CC=$CC\n        NDK_CCACHE_CXX=$CXX\n        # Unfortunately, we can just do CC=\"$NDK_CCACHE $CC\" because some\n        # configure scripts are not capable of dealing with this properly\n        # E.g. the ones used to rebuild the GCC toolchain from scratch.\n        # So instead, use a wrapper script\n        CC=$NDK_BUILDTOOLS_ABSPATH/ndk-ccache-gcc.sh\n        CXX=$NDK_BUILDTOOLS_ABSPATH/ndk-ccache-g++.sh\n        export NDK_CCACHE_CC NDK_CCACHE_CXX\n        log \"Using ccache compilation\"\n        log \"NDK_CCACHE_CC=$NDK_CCACHE_CC\"\n        log \"NDK_CCACHE_CXX=$NDK_CCACHE_CXX\"\n    fi\n}\n\nprepare_common_build ()\n{\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ]; then\n        if [ \"$TRY64\" = \"yes\" ]; then\n            HOST_BITS=64\n        else\n            HOST_BITS=32\n        fi\n        if [ \"$MINGW\" = \"yes\" ]; then\n            log \"Generating $HOST_BITS-bit Windows binaries\"\n        else\n            log \"Generating $HOST_BITS-bit Darwin binaries\"\n        fi\n        # Do *not* set CC and CXX when building the Windows/Darwin binaries in canadian build.\n        # Otherwise, the GCC configure/build script will mess that Canadian cross\n        # build in weird ways. Instead we rely on the toolchain detected or generated\n        # previously in prepare_canadian_toolchain.\n        unset CC CXX\n        return\n    fi\n\n    # On Linux, detect our legacy-compatible toolchain when in the Android\n    # source tree, and use it to force the generation of glibc-2.7 compatible\n    # binaries.\n    #\n    # We only do this if the CC variable is not defined to a given value\n    if [ -z \"$CC\" ]; then\n        LEGACY_TOOLCHAIN_DIR=\n        if [ \"$HOST_OS\" = \"linux\" ]; then\n            LEGACY_TOOLCHAIN_DIR=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin\"\n            LEGACY_TOOLCHAIN_PREFIX=\"$LEGACY_TOOLCHAIN_DIR/x86_64-linux-\"\n        elif [ \"$HOST_OS\" = \"darwin\" ]; then\n            local GCCVER=4.9.3\n            local LLVMVER=3.7.0\n            local GCCDIR=\"$ANDROID_NDK_ROOT/../prebuilts/gcc/darwin-x86/host/x86_64-apple-darwin-$GCCVER\"\n            local LLVMDIR=\"$ANDROID_NDK_ROOT/../prebuilts/clang/darwin-x86/host/x86_64-apple-darwin-$LLVMVER\"\n\n            LEGACY_TOOLCHAIN_DIR=\"$GCCDIR/bin\"\n            LEGACY_TOOLCHAIN_PREFIX=\"$LEGACY_TOOLCHAIN_DIR/\"\n\n            # For compilation LLDB's Objective-C++ sources we need use clang++, since g++ have a bug\n            # not distinguishing between Objective-C call and definition of C++11 lambda:\n            # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57607\n            # To workaround this, we're using prebuilt clang++\n            # with includes from our g++, to keep binary compatibility of produced code\n            CXXINC=\"$LEGACY_TOOLCHAIN_DIR/../include/c++/$GCCVER\"\n            CXXBITSINC=\"$CXXINC/x86_64-apple-darwin\"\n            if [ \"$TRY64\" != \"yes\" ]; then\n                CXXBITSINC=\"$CXXBITSINC/i386\"\n            fi\n            OBJCXX=\"$LLVMDIR/bin/clang++ -I$CXXBITSINC -I$CXXINC\"\n            export OBJCXX\n        fi\n        if [ -d \"$LEGACY_TOOLCHAIN_DIR\" ] ; then\n            log \"Forcing generation of $HOST_OS binaries with legacy toolchain\"\n            CC=\"${LEGACY_TOOLCHAIN_PREFIX}gcc\"\n            CXX=\"${LEGACY_TOOLCHAIN_PREFIX}g++\"\n        fi\n    fi\n\n    CC=${CC:-gcc}\n    CXX=${CXX:-g++}\n    STRIP=${STRIP:-strip}\n    case $HOST_TAG in\n        darwin-*)\n            probe_darwin_sdk\n            ;;\n    esac\n\n    # Force generation of 32-bit binaries on 64-bit systems.\n    # We used to test the value of $HOST_TAG for *-x86_64, but this is\n    # not sufficient on certain systems.\n    #\n    # For example, Snow Leopard can be booted with a 32-bit kernel, running\n    # a 64-bit userland, with a compiler that generates 64-bit binaries by\n    # default *even* though \"gcc -v\" will report --target=i686-apple-darwin10!\n    #\n    # So know, simply probe for the size of void* by performing a small runtime\n    # compilation test.\n    #\n    cat > $TMPC <<EOF\n    /* this test should fail if the compiler generates 64-bit machine code */\n    int test_array[1-2*(sizeof(void*) != 4)];\nEOF\n    log_n \"Checking whether the compiler generates 32-bit binaries...\"\n    log $CC $HOST_CFLAGS -c -o $TMPO $TMPC\n    $NDK_CCACHE $CC $HOST_CFLAGS -c -o $TMPO $TMPC >$TMPL 2>&1\n    if [ $? != 0 ] ; then\n        log \"no\"\n        if [ \"$TRY64\" != \"yes\" ]; then\n            # NOTE: We need to modify the definitions of CC and CXX directly\n            #        here. Just changing the value of CFLAGS / HOST_CFLAGS\n            #        will not work well with the GCC toolchain scripts.\n            CC=\"$CC -m32\"\n            CXX=\"$CXX -m32\"\n        fi\n    else\n        log \"yes\"\n        if [ \"$TRY64\" = \"yes\" ]; then\n            CC=\"$CC -m64\"\n            CXX=\"$CXX -m64\"\n        fi\n    fi\n\n    if [ \"$TRY64\" = \"yes\" ]; then\n        HOST_BITS=64\n    else\n        force_32bit_binaries  # to modify HOST_TAG and others\n        HOST_BITS=32\n    fi\n}\n\nprepare_host_build ()\n{\n    prepare_common_build\n\n    # Now deal with mingw or darwin\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ]; then\n        handle_canadian_build\n        CC=$ABI_CONFIGURE_HOST-gcc\n        CXX=$ABI_CONFIGURE_HOST-g++\n        CPP=$ABI_CONFIGURE_HOST-cpp\n        LD=$ABI_CONFIGURE_HOST-ld\n        AR=$ABI_CONFIGURE_HOST-ar\n        AS=$ABI_CONFIGURE_HOST-as\n        RANLIB=$ABI_CONFIGURE_HOST-ranlib\n        STRIP=$ABI_CONFIGURE_HOST-strip\n        export CC CXX CPP LD AR AS RANLIB STRIP\n    fi\n\n    setup_ccache\n}\n\nprepare_abi_configure_build ()\n{\n    # detect build tag\n    case $HOST_TAG in\n        linux-x86)\n            ABI_CONFIGURE_BUILD=i386-linux-gnu\n            ;;\n        linux-x86_64)\n            ABI_CONFIGURE_BUILD=x86_64-linux-gnu\n            ;;\n        darwin-x86)\n            ABI_CONFIGURE_BUILD=i686-apple-darwin\n            ;;\n        darwin-x86_64)\n            ABI_CONFIGURE_BUILD=x86_64-apple-darwin\n            ;;\n        windows)\n            ABI_CONFIGURE_BUILD=i686-pc-cygwin\n            ;;\n        *)\n            echo \"ERROR: Unsupported HOST_TAG: $HOST_TAG\"\n            echo \"Please update 'prepare_host_flags' in build/instruments/prebuilt-common.sh\"\n            ;;\n    esac\n}\n\nprepare_target_build ()\n{\n    prepare_abi_configure_build\n\n    # By default, assume host == build\n    ABI_CONFIGURE_HOST=\"$ABI_CONFIGURE_BUILD\"\n\n    prepare_common_build\n    HOST_GMP_ABI=$HOST_BITS\n\n    # Now handle the --mingw/--darwin flag\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ] ; then\n        handle_canadian_build\n        STRIP=$ABI_CONFIGURE_HOST-strip\n        if [ \"$MINGW\" = \"yes\" ] ; then\n            # It turns out that we need to undefine this to be able to\n            # perform a canadian-cross build with mingw. Otherwise, the\n            # GMP configure scripts will not be called with the right options\n            HOST_GMP_ABI=\n        fi\n    fi\n\n    setup_ccache\n}\n\n# $1: Toolchain name\n#\nparse_toolchain_name ()\n{\n    TOOLCHAIN=$1\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name!\"\n        exit 1\n    fi\n\n    ABI_CFLAGS_FOR_TARGET=\n    ABI_CXXFLAGS_FOR_TARGET=\n\n    # Determine ABI based on toolchain name\n    #\n    case \"$TOOLCHAIN\" in\n    arm-linux-androideabi-*)\n        ARCH=\"arm\"\n        ABI=\"armeabi\"\n        ABI_CONFIGURE_TARGET=\"arm-linux-androideabi\"\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=armv5te\"\n        ;;\n    arm-eabi-*)\n        ARCH=\"arm\"\n        ABI=\"armeabi\"\n        ABI_CONFIGURE_TARGET=\"arm-eabi\"\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=armv5te --disable-gold --disable-libgomp\"\n        ;;\n    aarch64-linux-android-*)\n        ARCH=\"arm64\"\n        ABI=\"arm64-v8a\"\n        ABI_CONFIGURE_TARGET=\"aarch64-linux-android\"\n        ;;\n    x86-*)\n        ARCH=\"x86\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"x86\"\n        ABI_CONFIGURE_TARGET=\"i686-linux-android\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        ABI_CFLAGS_FOR_TARGET=\"-fPIC\"\n        ;;\n    x86_64-*)\n        ARCH=\"x86_64\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"x86_64\"\n        ABI_CONFIGURE_TARGET=\"x86_64-linux-android\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        ABI_CFLAGS_FOR_TARGET=\"-fPIC\"\n        ;;\n    mipsel*)\n        ARCH=\"mips\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"mips\"\n        ABI_CONFIGURE_TARGET=\"mipsel-linux-android\"\n        # Set default to mips32\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=mips32\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        # Add -fpic, because MIPS NDK will need to link .a into .so.\n        ABI_CFLAGS_FOR_TARGET=\"-fexceptions -fpic\"\n        ABI_CXXFLAGS_FOR_TARGET=\"-frtti -fpic\"\n        # Add --disable-fixed-point to disable fixed-point support\n        ABI_CONFIGURE_EXTRA_FLAGS=\"$ABI_CONFIGURE_EXTRA_FLAGS --disable-fixed-point\"\n        ;;\n    mips64el*)\n        ARCH=\"mips64\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"mips64\"\n        ABI_CONFIGURE_TARGET=\"mips64el-linux-android\"\n        # Set default to mips64r6\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=mips64r6\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        # Add -fpic, because MIPS NDK will need to link .a into .so.\n        ABI_CFLAGS_FOR_TARGET=\"-fexceptions -fpic\"\n        ABI_CXXFLAGS_FOR_TARGET=\"-frtti -fpic\"\n        # Add --disable-fixed-point to disable fixed-point support\n        ABI_CONFIGURE_EXTRA_FLAGS=\"$ABI_CONFIGURE_EXTRA_FLAGS --disable-fixed-point\"\n        ;;\n    * )\n        echo \"Invalid toolchain specified. Expected (arm-linux-androideabi-*|arm-eabi-*|x86-*|mipsel*|mips64el*)\"\n        echo \"\"\n        print_help\n        exit 1\n        ;;\n    esac\n\n    log \"Targetting CPU: $ARCH\"\n\n    GCC_VERSION=`expr -- \"$TOOLCHAIN\" : '.*-\\([0-9x\\.]*\\)'`\n    log \"Using GCC version: $GCC_VERSION\"\n\n    # Determine --host value when building gdbserver\n\n    case \"$TOOLCHAIN\" in\n    arm-*)\n        GDBSERVER_HOST=arm-eabi-linux\n        GDBSERVER_CFLAGS=\"-fno-short-enums\"\n        GDBSERVER_LDFLAGS=\n        ;;\n    aarch64-*)\n        GDBSERVER_HOST=aarch64-eabi-linux\n        GDBSERVER_CFLAGS=\"-fno-short-enums -DUAPI_HEADERS\"\n        GDBSERVER_LDFLAGS=\n        ;;\n    x86-*)\n        GDBSERVER_HOST=i686-linux-android\n        GDBSERVER_CFLAGS=\n        GDBSERVER_LDFLAGS=\n        ;;\n    x86_64-*)\n        GDBSERVER_HOST=x86_64-linux-android\n        GDBSERVER_CFLAGS=-DUAPI_HEADERS\n        GDBSERVER_LDFLAGS=\n        ;;\n    mipsel-*)\n        GDBSERVER_HOST=mipsel-linux-android\n        GDBSERVER_CFLAGS=\n        GDBSERVER_LDFLAGS=\n        ;;\n    mips64el-*)\n        GDBSERVER_HOST=mips64el-linux-android\n        GDBSERVER_CFLAGS=-DUAPI_HEADERS\n        GDBSERVER_LDFLAGS=\n        ;;\n    *)\n        echo \"Unknown TOOLCHAIN=$TOOLCHAIN\"\n        exit\n    esac\n}\n\n# Return the host \"tag\" used to identify prebuilt host binaries.\n# NOTE: Handles the case where '$MINGW = true' or '$DARWIN = true'\n# For now, valid values are: linux-x86, darwin-x86 and windows\nget_prebuilt_host_tag ()\n{\n    local RET=$HOST_TAG\n    if [ \"$MINGW\" = \"yes\" ]; then\n        if [ \"$TRY64\" = \"no\" ]; then\n            RET=windows\n        else\n            RET=windows-x86_64\n        fi\n    fi\n    if [ \"$DARWIN\" = \"yes\" ]; then\n        RET=darwin-x86_64  # let the following handles 32-bit case\n    fi\n    case $RET in\n        linux-x86_64)\n            if [ \"$TRY64\" = \"no\" ]; then\n                RET=linux-x86\n            fi\n            ;;\n        darwin-x86_64)\n            if [ \"$TRY64\" = \"no\" ]; then\n                RET=darwin-x86\n            fi\n            ;;\n    esac\n    echo $RET\n}\n\n# Return the executable suffix corresponding to host executables\nget_prebuilt_host_exe_ext ()\n{\n    if [ \"$MINGW\" = \"yes\" ]; then\n        echo \".exe\"\n    else\n        echo \"\"\n    fi\n}\n\n# Get library suffix for given ABI\n# $1: ABI\n# Return: .so or .bc\nget_lib_suffix_for_abi ()\n{\n    local ABI=$1\n    echo \".so\"\n}\n\n# Convert an ABI name into an Architecture name\n# $1: ABI name\n# Result: Arch name\nconvert_abi_to_arch ()\n{\n    local RET\n    local ABI=$1\n    case $ABI in\n        armeabi-v7a|armeabi-v7a-hard)\n            RET=arm\n            ;;\n        x86|mips|x86_64|mips64)\n            RET=$ABI\n            ;;\n        mips32r6)\n            RET=mips\n            ;;\n        arm64-v8a)\n            RET=arm64\n            ;;\n        *)\n            >&2 echo \"ERROR: Unsupported ABI name: $ABI, use one of: armeabi-v7a, x86, mips, armeabi-v7a-hard, arm64-v8a, x86_64 or mips64\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n# Take architecture name as input, and output the list of corresponding ABIs\n# Inverse for convert_abi_to_arch\n# $1: ARCH name\n# Out: ABI names list (comma-separated)\nconvert_arch_to_abi ()\n{\n    local RET\n    local ARCH=$1\n    case $ARCH in\n        arm)\n            RET=armeabi-v7a,armeabi-v7a-hard\n            ;;\n        x86|x86_64|mips|mips64)\n            RET=$ARCH\n            ;;\n        arm64)\n            RET=arm64-v8a\n            ;;\n        *)\n            >&2 echo \"ERROR: Unsupported ARCH name: $ARCH, use one of: arm, x86, mips\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n# Take a list of architecture names as input, and output the list of corresponding ABIs\n# $1: ARCH names list (separated by spaces or commas)\n# Out: ABI names list (comma-separated)\nconvert_archs_to_abis ()\n{\n    local RET\n    for ARCH in $(commas_to_spaces $@); do\n       ABI=$(convert_arch_to_abi $ARCH)\n       if [ -n \"$ABI\" ]; then\n          if [ -n \"$RET\" ]; then\n             RET=$RET\",$ABI\"\n          else\n             RET=$ABI\n          fi\n       else   # Error message is printed by convert_arch_to_abi\n          exit 1\n       fi\n    done\n    echo \"$RET\"\n}\n\n# Return the default toolchain binary path prefix for given architecture and gcc version\n# For example: arm 4.8 -> toolchains/arm-linux-androideabi-4.8/prebuilt/<system>/bin/arm-linux-androideabi-\n# $1: Architecture name\n# $2: GCC version\n# $3: optional, system name, defaults to $HOST_TAG\nget_toolchain_binprefix_for_arch ()\n{\n    local NAME PREFIX DIR BINPREFIX\n    local SYSTEM=${3:-$(get_prebuilt_host_tag)}\n    NAME=$(get_toolchain_name_for_arch $1 $2)\n    PREFIX=$(get_default_toolchain_prefix_for_arch $1)\n    DIR=$(get_toolchain_install . $NAME $SYSTEM)\n    BINPREFIX=${DIR#./}/bin/$PREFIX-\n    echo \"$BINPREFIX\"\n}\n\n# Return llvm toolchain binary path prefix for given llvm version\n# $1: llvm version\n# $2: optional, system name, defaults to $HOST_TAG\nget_llvm_toolchain_binprefix ()\n{\n    local NAME DIR BINPREFIX\n    local SYSTEM=${2:-$(get_prebuilt_host_tag)}\n    NAME=llvm-$1\n    DIR=$(get_toolchain_install . $NAME $SYSTEM)\n    BINPREFIX=${DIR#./}/bin/\n    echo \"$BINPREFIX\"\n}\n\n# Return default API level for a given arch\n# This is the level used to build the toolchains.\n#\n# $1: Architecture name\nget_default_api_level_for_arch ()\n{\n    # For now, always build the toolchain against API level 9 for 32-bit arch\n    # and API level $FIRST_API64_LEVEL for 64-bit arch\n    case $1 in\n        *64) echo $FIRST_API64_LEVEL ;;\n        *) echo 9 ;;\n    esac\n}\n\n# Return the default platform sysroot corresponding to a given architecture\n# This is the sysroot used to build the toolchain and other binaries\n# $1: Architecture name\nget_default_platform_sysroot_for_arch ()\n{\n    local ARCH=$1\n    local LEVEL=$(get_default_api_level_for_arch $ARCH)\n\n    if [ \"$ARCH\" != \"${ARCH%%64*}\" ] ; then\n        LEVEL=$FIRST_API64_LEVEL\n    fi\n    echo \"platforms/android-$LEVEL/arch-$ARCH\"\n}\n\n# Return the default platform sysroot corresponding to a given abi\n# $1: ABI\nget_default_platform_sysroot_for_abi ()\n{\n    local ARCH=$(convert_abi_to_arch $1)\n    $(get_default_platform_sysroot_for_arch $ARCH)\n}\n\n# Return the default libs dir corresponding to a given architecture\n# $1: Architecture name\n# $2: Optional llvm version\nget_default_libdir_for_arch ()\n{\n    case $1 in\n      x86_64|mips64) echo \"lib64\" ;;\n      arm64) echo \"lib\" ;; # return \"lib\" until aarch64 is built to look for sysroot/usr/lib64\n      *) echo \"lib\" ;;\n    esac\n}\n\n# Return the default libs dir corresponding to a given abi\n# $1: ABI\n# $2: Optional llvm version\nget_default_libdir_for_abi ()\n{\n    local ARCH\n\n    case $1 in\n      mips32r6) echo \"libr6\" ;;\n      *)\n        local ARCH=$(convert_abi_to_arch $1)\n        echo \"$(get_default_libdir_for_arch $ARCH $2)\"\n        ;;\n    esac\n}\n\n# Return the host/build specific path for prebuilt toolchain binaries\n# relative to $1.\n#\n# $1: target root NDK directory\n# $2: toolchain name\n# $3: optional, host system name\n#\nget_toolchain_install ()\n{\n    local NDK=\"$1\"\n    shift\n    echo \"$NDK/$(get_toolchain_install_subdir \"$@\")\"\n}\n\n# $1: toolchain name\n# $2: optional, host system name\nget_toolchain_install_subdir ()\n{\n    local SYSTEM=${2:-$(get_prebuilt_host_tag)}\n    echo \"toolchains/$1/prebuilt/$SYSTEM\"\n}\n\n# Return the relative install prefix for prebuilt host\n# executables (relative to the NDK top directory).\n# NOTE: This deals with MINGW==yes or DARWIN==yes appropriately\n#\n# $1: optional, system name\n# Out: relative path to prebuilt install prefix\nget_prebuilt_install_prefix ()\n{\n    local TAG=${1:-$(get_prebuilt_host_tag)}\n    echo \"prebuilt/$TAG\"\n}\n\n# Return the relative path of an installed prebuilt host\n# executable\n# NOTE: This deals with MINGW==yes or DARWIN==yes appropriately.\n#\n# $1: executable name\n# $2: optional, host system name\n# Out: path to prebuilt host executable, relative\nget_prebuilt_host_exec ()\n{\n    local PREFIX EXE\n    PREFIX=$(get_prebuilt_install_prefix $2)\n    EXE=$(get_prebuilt_host_exe_ext)\n    echo \"$PREFIX/bin/$1$EXE\"\n}\n\n# Return the name of a given host executable\n# $1: executable base name\n# Out: executable name, with optional suffix (e.g. .exe for windows)\nget_host_exec_name ()\n{\n    local EXE=$(get_prebuilt_host_exe_ext)\n    echo \"$1$EXE\"\n}\n\n# Return the directory where host-specific binaries are installed.\n# $1: target root NDK directory\nget_host_install ()\n{\n    echo \"$1/$(get_prebuilt_install_prefix)\"\n}\n\n# Set the toolchain target NDK location.\n# this sets TOOLCHAIN_PATH and TOOLCHAIN_PREFIX\n# $1: target NDK path\n# $2: toolchain name\nset_toolchain_ndk ()\n{\n    TOOLCHAIN_PATH=`get_toolchain_install \"$1\" $2`\n    log \"Using toolchain path: $TOOLCHAIN_PATH\"\n\n    TOOLCHAIN_PREFIX=$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET\n    log \"Using toolchain prefix: $TOOLCHAIN_PREFIX\"\n}\n\n# Check that a toolchain is properly installed at a target NDK location\n#\n# $1: target root NDK directory\n# $2: toolchain name\n#\ncheck_toolchain_install ()\n{\n    TOOLCHAIN_PATH=`get_toolchain_install \"$1\" $2`\n    if [ ! -d \"$TOOLCHAIN_PATH\" ] ; then\n        echo \"ERROR: Cannot find directory '$TOOLCHAIN_PATH'!\"\n        echo \"       Toolchain '$2' not installed in '$NDK_DIR'!\"\n        echo \"       Ensure that the toolchain has been installed there before.\"\n        exit 1\n    fi\n\n    set_toolchain_ndk $1 $2\n}\n\n# $1: toolchain source directory\ncheck_toolchain_src_dir ()\n{\n    local SRC_DIR=\"$1\"\n    if [ -z \"$SRC_DIR\" ]; then\n        echo \"ERROR: Please provide the path to the toolchain source tree. See --help\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR\" ]; then\n        echo \"ERROR: Not a directory: '$SRC_DIR'\"\n        exit 1\n    fi\n\n    if [ ! -f \"$SRC_DIR/build/configure\" -o ! -d \"$SRC_DIR/gcc\" ]; then\n        echo \"ERROR: Either the file $SRC_DIR/build/configure or\"\n        echo \"       the directory $SRC_DIR/gcc does not exist.\"\n        echo \"This is not the top of a toolchain tree: $SRC_DIR\"\n        exit 1\n    fi\n}\n\n#\n# The NDK_TMPDIR variable is used to specify a root temporary directory\n# when invoking toolchain build scripts. If it is not defined, we will\n# create one here, and export the value to ensure that any scripts we\n# call after that use the same one.\n#\nif [ -z \"$NDK_TMPDIR\" ]; then\n    \n    NDK_TMPDIR=$TMPDIR/tmp/build-$$\n    mkdir -p $NDK_TMPDIR\n    if [ $? != 0 ]; then\n        echo \"ERROR: Could not create NDK_TMPDIR: $NDK_TMPDIR\"\n        exit 1\n    fi\n    export NDK_TMPDIR\nfi\n\n# Define HOST_TAG32, as the 32-bit version of HOST_TAG\n# We do this by replacing an -x86_64 suffix by -x86\nHOST_TAG32=$HOST_TAG\ncase $HOST_TAG32 in\n    *-x86_64)\n        HOST_TAG32=${HOST_TAG%%_64}\n        ;;\nesac\n\n# this function should be called after all options are extracted\nCACHE_HOST_TAG=linux-x86\nset_cache_host_tag ()\n{\n    if [ \"$MINGW\" = \"yes\" ] ; then\n        if [ \"$TRY64\" = \"yes\" ]; then\n            CACHE_HOST_TAG=windows-x86_64\n        else\n            CACHE_HOST_TAG=windows\n        fi\n    elif [ \"$DARWIN\" = \"yes\" -o \"$HOST_OS\" = \"darwin\" ] ; then\n        if [ \"$TRY64\" = \"yes\" ]; then\n            CACHE_HOST_TAG=darwin-x86_64\n        else\n            CACHE_HOST_TAG=darwin-x86\n        fi\n    else\n        if [ \"$TRY64\" = \"yes\" ]; then\n            CACHE_HOST_TAG=linux-x86_64\n        fi        \n    fi\n}\n\nassert_cache_host_tag ()\n{\n    if [ \"$CACHE_HOST_TAG\" != \"$HOST_TAG\" ]; then\n        fail_panic \"ASSERT in $PROGNAME: $CACHE_HOST_TAG != $HOST_TAG\"\n    fi\n}\n"
  },
  {
    "path": "build/instruments/rebuild-all-prebuilt.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Rebuild all prebuilts. This requires that you have a toolchain source tree\n#\n\n. `dirname $0`/prebuilt-common.sh\nPROGDIR=`dirname $0`\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Put binaries into NDK install directory\"\n\nBUILD_DIR=$TMPDIR/build\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Specify temporary build directory\"\n\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<arch>\" ARCHS \"Specify target architectures\"\n\nNO_GEN_PLATFORMS=\nregister_var_option \"--no-gen-platforms\" NO_GEN_PLATFORMS \"Don't generate platforms/ directory, use existing one\"\n\nGCC_VERSION_LIST=\"default\" # it's arch defined by default so use default keyword\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"List of GCC release versions\"\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<vers>\" LLVM_VERSION_LIST \"List of LLVM release versions\"\n\nSYSTEMS=$HOST_TAG32\nCUSTOM_SYSTEMS=\nregister_option \"--systems=<list>\" do_SYSTEMS \"Specify host systems\"\ndo_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; }\n\nALSO_64=\nregister_option \"--also-64\" do_ALSO_64 \"Also build 64-bit host toolchain\"\ndo_ALSO_64 () { ALSO_64=yes; }\n\nRELEASE=`date +%Y%m%d`\nPACKAGE_DIR=$TMPDIR/prebuilt-$RELEASE\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nDARWIN_SSH=\nif [ \"$HOST_OS\" = \"linux\" ] ; then\nregister_var_option \"--darwin-ssh=<hostname>\" DARWIN_SSH \"Specify Darwin hostname for remote build.\"\nfi\n\nSKIP_HOST_PREBUILTS=no\nregister_var_option \"--skip-host-prebuilts\" SKIP_HOST_PREBUILTS \"Skip build of host prebuilts (toolchains etc)\"\n\nSKIP_TARGET_PREBUILTS=no\nregister_var_option \"--skip-target-prebuilts\" SKIP_TARGET_PREBUILTS \"Skip build of target prebuilts (libraries etc)\"\n\nregister_try64_option\n\nPROGRAM_PARAMETERS=\"<toolchain-src-dir>\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to rebuild all host and target prebuilts from scratch.\n\nUnless you use the --ndk-dir option, all binaries will be installed to the\ncurrent NDK directory.\n\nAll prebuilts will then be archived into tarball that will be stored into a\nspecific 'package directory'. Unless you use the --package-dir option, this\nwill be: $PACKAGE_DIR\n\nPlease read docs/DEV-SCRIPTS-USAGE.TXT for more usage information about this\nscript.\n\"\n\nextract_parameters \"$@\"\n\nSRC_DIR=\"$PARAMETERS\"\ncheck_toolchain_src_dir \"$SRC_DIR\"\n\nif [ \"$DARWIN_SSH\" -a -z \"$CUSTOM_SYSTEMS\" ]; then\n    SYSTEMS=$SYSTEMS\",darwin-x86\"\nfi\n\nFLAGS=\nif [ \"$DRYRUN\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --dryrun\"\nfi\nif [ \"$VERBOSE\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --verbose\"\nfi\nFLAGS=$FLAGS\" --ndk-dir=$NDK_DIR\"\nFLAGS=$FLAGS\" --package-dir=$PACKAGE_DIR\"\nFLAGS=$FLAGS\" --arch=$(spaces_to_commas $ARCHS)\"\n\nif [ ! -z \"$NO_GEN_PLATFORMS\" ]; then\n    FLAGS=$FLAGS\" --no-gen-platforms\"\nfi\n\nif [ \"$TRY64\" = \"yes\" ]; then\n    FLAGS=$FLAGS\" --try-64\"\nfi\n\nHOST_FLAGS=\"$FLAGS\"\nif [ \"$GCC_VERSION_LIST\" != \"default\" ]; then\n    HOST_FLAGS=$HOST_FLAGS\" --gcc-version-list=$(spaces_to_commas $GCC_VERSION_LIST)\"\nfi\nHOST_FLAGS=$HOST_FLAGS\" --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST)\"\n\nTARGET_FLAGS=$FLAGS\n\nif [ \"$TRY64\" = \"yes\" ]; then\n    HOST_FLAGS=$HOST_FLAGS\" --try-64\"\n    # If we build only 64-bit host we need to use this flag as well so that correct toolchain is found on target tools build\n    TARGET_FLAGS=$TARGET_FLAGS\" --try-64\"\nfi\n\nif [ \"$DARWIN_SSH\" ]; then\n    HOST_FLAGS=$HOST_FLAGS\" --darwin-ssh=$DARWIN_SSH\"\nfi\n\nif [ \"$SKIP_HOST_PREBUILTS\" = \"no\" ]; then\n    for SYSTEM in $(commas_to_spaces $SYSTEMS); do\n        if [ \"$ALSO_64\" = \"yes\" -a \"$TRY64\" != \"yes\" ] ; then\n            dump \"## COMMAND: $PROGDIR/build-host-prebuilts.sh --systems=$SYSTEM $HOST_FLAGS $SRC_DIR --try-64\"\n            $PROGDIR/build-host-prebuilts.sh --systems=$SYSTEM $HOST_FLAGS \"$SRC_DIR\" --try-64\n            fail_panic \"Could not build host $SYSTEM prebuilts in 64-bit!\"\n        fi\n        if [ \"${SYSTEM##windows}\" != \"$SYSTEM\" ]; then\n            dump \"## COMMAND: $PROGDIR/build-host-prebuilts.sh --systems=$SYSTEM $HOST_FLAGS $SRC_DIR\"\n            $PROGDIR/build-host-prebuilts.sh --systems=$SYSTEM $HOST_FLAGS \"$SRC_DIR\"\n            fail_panic \"Could not build host $SYSTEM prebuilts!\"\n        fi\n    done\nfi # SKIP_HOST_PREBUILTS\n\nif [ -n \"$LLVM_VERSION_LIST\" ]; then\n    TARGET_FLAGS=$TARGET_FLAGS\" --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST)\"\nfi\nif [ \"$GCC_VERSION_LIST\" != \"default\" ]; then\n    TARGET_FLAGS=$TARGET_FLAGS\" --gcc-version-list=$(spaces_to_commas $GCC_VERSION_LIST)\"\nfi\n\nif [ \"$TRY64\" = \"yes\" -o \"$ALSO_64\" = \"yes\" ]; then\n    TARGET_FLAGS=$TARGET_FLAGS\" --try-64\"\nfi\n\nif [ \"$SKIP_TARGET_PREBUILTS\" = \"no\" ]; then\nif [ \"$SYSTEMS\" = \"windows\" ] ; then\n    dump \"Done, host toolchains were built for windows only build.\"\nelse\n    dump \"## COMMAND: $PROGDIR/build-target-prebuilts.sh $TARGET_FLAGS $SRC_DIR\"\n    $PROGDIR/build-target-prebuilts.sh $TARGET_FLAGS \"$SRC_DIR\"\n    fail_panic \"Could not build target prebuilts!\"\n\n    echo \"Done, see $PACKAGE_DIR:\"\n    ls -l $PACKAGE_DIR\nfi\nfi # SKIP_TARGET_PREBUILTS\n\nexit 0\n"
  },
  {
    "path": "build/instruments/regenerate-platforms",
    "content": "#!/bin/bash\n\ncd $(dirname $0)/../../ || exit 1\n\nNDK=$(pwd)\nexport NDK\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\necho \"=== Generating platforms headers and libraries...\"\nrun ./build/instruments/gen-platforms.sh --fast-copy || exit 1\n\necho \"=== Patching sysroot...\"\nrun ./sources/crystax/bin/patch-sysroot --libraries || exit 1\n\necho \"=== Cleanup sysroot...\"\nrun find platforms -name 'libcrystax.*' -delete || exit 1\n\necho \"=== Check sysroot...\"\nrun ./tests/build/crystax-test-patched-sysroot/build.sh || exit 1\n\necho \"=== DONE\"\n"
  },
  {
    "path": "build/instruments/toolchain-licenses/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year  name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "build/instruments/toolchain-licenses/COPYING.LIB",
    "content": "\n                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n\t51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations\nbelow.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it\nbecomes a de-facto standard.  To achieve this, non-free programs must\nbe allowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control\ncompilation and installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at least\n    three years, to give the same user the materials specified in\n    Subsection 6a, above, for a charge no more than the cost of\n    performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply, and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License\nmay add an explicit geographical distribution limitation excluding those\ncountries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms\nof the ordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.\nIt is safest to attach them to the start of each source file to most\neffectively convey the exclusion of warranty; and each file should\nhave at least the \"copyright\" line and a pointer to where the full\nnotice is found.\n\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or\nyour school, if any, to sign a \"copyright disclaimer\" for the library,\nif necessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James\n  Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n\n\n"
  },
  {
    "path": "build/instruments/toolchain-licenses/COPYING.RUNTIME",
    "content": "GCC RUNTIME LIBRARY EXCEPTION\n\nVersion 3.1, 31 March 2009\n\nCopyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\nThis GCC Runtime Library Exception (\"Exception\") is an additional\npermission under section 7 of the GNU General Public License, version\n3 (\"GPLv3\"). It applies to a given file (the \"Runtime Library\") that\nbears a notice placed by the copyright holder of the file stating that\nthe file is governed by GPLv3 along with this Exception.\n\nWhen you use GCC to compile a program, GCC may combine portions of\ncertain GCC header files and runtime libraries with the compiled\nprogram. The purpose of this Exception is to allow compilation of\nnon-GPL (including proprietary) programs to use, in this way, the\nheader files and runtime libraries covered by this Exception.\n\n0. Definitions.\n\nA file is an \"Independent Module\" if it either requires the Runtime\nLibrary for execution after a Compilation Process, or makes use of an\ninterface provided by the Runtime Library, but is not otherwise based\non the Runtime Library.\n\n\"GCC\" means a version of the GNU Compiler Collection, with or without\nmodifications, governed by version 3 (or a specified later version) of\nthe GNU General Public License (GPL) with the option of using any\nsubsequent versions published by the FSF.\n\n\"GPL-compatible Software\" is software whose conditions of propagation,\nmodification and use would permit combination with GCC in accord with\nthe license of GCC.\n\n\"Target Code\" refers to output from any compiler for a real or virtual\ntarget processor architecture, in executable form or suitable for\ninput to an assembler, loader, linker and/or execution\nphase. Notwithstanding that, Target Code does not include data in any\nformat that is used as a compiler intermediate representation, or used\nfor producing a compiler intermediate representation.\n\nThe \"Compilation Process\" transforms code entirely represented in\nnon-intermediate languages designed for human-written code, and/or in\nJava Virtual Machine byte code, into Target Code. Thus, for example,\nuse of source code generators and preprocessors need not be considered\npart of the Compilation Process, since the Compilation Process can be\nunderstood as starting with the output of the generators or\npreprocessors.\n\nA Compilation Process is \"Eligible\" if it is done using GCC, alone or\nwith other GPL-compatible software, or if it is done without using any\nwork based on GCC. For example, using non-GPL-compatible Software to\noptimize any GCC intermediate representations would not qualify as an\nEligible Compilation Process.\n\n1. Grant of Additional Permission.\n\nYou have permission to propagate a work of Target Code formed by\ncombining the Runtime Library with Independent Modules, even if such\npropagation would otherwise violate the terms of GPLv3, provided that\nall Target Code was generated by Eligible Compilation Processes. You\nmay then convey such a combination under terms of your choice,\nconsistent with the licensing of the Independent Modules.\n\n2. No Weakening of GCC Copyleft.\n\nThe availability of this Exception does not imply any general\npresumption that third-party software is unaffected by the copyleft\nrequirements of the license of GCC.\n\n"
  },
  {
    "path": "build/instruments/toolchain-licenses/COPYING3",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "build/instruments/toolchain-licenses/COPYING3.LIB",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions. \n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version. \n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "build/instruments/toolchain-patches-host/mingw-w64/mingw-w64-widl.patch",
    "content": "Index: mingw-w64-headers/Makefile.am\n===================================================================\n--- mingw-w64-headers/Makefile.am\t(revision 5578)\n+++ mingw-w64-headers/Makefile.am\t(working copy)\n@@ -118,10 +118,14 @@\n BUILT_SOURCES = $(IDL_SRCS:.idl=.h)\n \n .idl.h: crt/_mingw.h\n-\t$(WIDL) -DBOOL=WINBOOL -I$(srcdir)/include -I$(srcdir)/direct-x/include -Icrt -I$(srcdir)/crt -h -o $(srcdir)/$@ $<\n+\t$(WIDL) -DBOOL=WINBOOL -I$(srcdir)/include -I$(srcdir)/direct-x/include -Icrt -I$(srcdir)/crt -h -o $@ $<\n \n+if SRCDIR_NEQ_BUILDDIR\n+$(warning \"srcdir != builddir, debugging comments in idl files will be sub-optimal\")\n endif\n \n+endif\n+\n _mingw_directx.h: $(srcdir)/crt/sdks/_mingw_directx.h.in\n \t$(SED) s/MINGW_HAS_DX$$/@MINGW_HAS_DX@/ $< > $@\n \nIndex: mingw-w64-headers/Makefile.in\n===================================================================\n--- mingw-w64-headers/Makefile.in\t(revision 5578)\n+++ mingw-w64-headers/Makefile.in\t(working copy)\n@@ -1016,8 +1016,10 @@\n \tfind $(distdir) -name \".svn\" -type d -delete\n \n @HAVE_WIDL_TRUE@.idl.h: crt/_mingw.h\n-@HAVE_WIDL_TRUE@\t$(WIDL) -DBOOL=WINBOOL -I$(srcdir)/include -I$(srcdir)/direct-x/include -Icrt -I$(srcdir)/crt -h -o $(srcdir)/$@ $<\n+@HAVE_WIDL_TRUE@\t$(WIDL) -DBOOL=WINBOOL -I$(srcdir)/include -I$(srcdir)/direct-x/include -Icrt -I$(srcdir)/crt -h -o $@ $<\n \n+@HAVE_WIDL_TRUE@@SRCDIR_NEQ_BUILDDIR_TRUE@$(warning \"srcdir != builddir, debugging comments in idl files will be sub-optimal\")\n+\n _mingw_directx.h: $(srcdir)/crt/sdks/_mingw_directx.h.in\n \t$(SED) s/MINGW_HAS_DX$$/@MINGW_HAS_DX@/ $< > $@\n \nIndex: mingw-w64-headers/configure\n===================================================================\n--- mingw-w64-headers/configure\t(revision 5578)\n+++ mingw-w64-headers/configure\t(working copy)\n@@ -617,6 +617,8 @@\n build_vendor\n build_cpu\n build\n+SRCDIR_NEQ_BUILDDIR_FALSE\n+SRCDIR_NEQ_BUILDDIR_TRUE\n MAINT\n MAINTAINER_MODE_FALSE\n MAINTAINER_MODE_TRUE\n@@ -2310,6 +2312,16 @@\n \n \n \n+# Check so we can warn about this.\n+ if test ! \"$srcdir\" = \"$builddir\"; then\n+  SRCDIR_NEQ_BUILDDIR_TRUE=\n+  SRCDIR_NEQ_BUILDDIR_FALSE='#'\n+else\n+  SRCDIR_NEQ_BUILDDIR_TRUE='#'\n+  SRCDIR_NEQ_BUILDDIR_FALSE=\n+fi\n+\n+\n # Make sure we can run config.sub.\n $SHELL \"$ac_aux_dir/config.sub\" sun4 >/dev/null 2>&1 ||\n   as_fn_error $? \"cannot run $SHELL $ac_aux_dir/config.sub\" \"$LINENO\" 5\n@@ -2831,6 +2843,10 @@\n   as_fn_error $? \"conditional \\\"MAINTAINER_MODE\\\" was never defined.\n Usually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\n fi\n+if test -z \"${SRCDIR_NEQ_BUILDDIR_TRUE}\" && test -z \"${SRCDIR_NEQ_BUILDDIR_FALSE}\"; then\n+  as_fn_error $? \"conditional \\\"SRCDIR_NEQ_BUILDDIR\\\" was never defined.\n+Usually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\n+fi\n if test -z \"${HAVE_WIDL_TRUE}\" && test -z \"${HAVE_WIDL_FALSE}\"; then\n   as_fn_error $? \"conditional \\\"HAVE_WIDL\\\" was never defined.\n Usually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nIndex: mingw-w64-headers/configure.ac\n===================================================================\n--- mingw-w64-headers/configure.ac\t(revision 5578)\n+++ mingw-w64-headers/configure.ac\t(working copy)\n@@ -10,6 +10,9 @@\n AM_INIT_AUTOMAKE([foreign])\n AM_MAINTAINER_MODE\n \n+# Check so we can warn about this.\n+AM_CONDITIONAL([SRCDIR_NEQ_BUILDDIR],[test ! \"$srcdir\" = \"$builddir\"])\n+\n AC_CANONICAL_HOST\n \n # Checks for programs.\n"
  },
  {
    "path": "build/instruments/unpack-build-cache",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. $(dirname $0)/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Unpack prebuilt packages from cache.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nCACHE_DIR=/var/tmp/ndk-cache-$USER\nregister_var_option \"--cache-dir=<path>\" CACHE_DIR \"Specify build cache directory\"\n\nextract_parameters \"$@\"\n\ncd $NDK_DIR\nfail_panic \"Can't CD to $NDK_DIR\"\n\nfor f in $(ls -1 $CACHE_DIR/* 2>/dev/null | sort); do\n    printf \"=== [UNP] $f ... \"\n    case $f in\n        *.7z)\n            7z x $f >/dev/null\n            ;;\n        *.tar.bz2)\n            bzcat $f | tar xf -\n            test $? -eq 0 -a ${PIPESTATUS[0]} -eq 0\n            ;;\n        *.tar.xz)\n            xzcat $f | tar xf -\n            test $? -eq 0 -a ${PIPESTATUS[0]} -eq 0\n            ;;\n        *)\n            echo \"ERROR: Don't know how to unpack $f\" 1>&2\n            exit 1\n    esac\n    fail_panic \"Can't unpack $f\"\n\n    echo \"OK\"\ndone\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm/libc.so.functions.txt",
    "content": "atexit\ndlmalloc\nfree_malloc_leak_info\nget_malloc_leak_info\n__srget\n__swbuf\n__srefill\n__swsetup\n__sflags\n__sfp\n__sinit\n__smakebuf\n__sflush\n__sread\n__swrite\n__sseek\n__sclose\n_fwalk\n__get_thread\n__wait4\n__futex_wake\n__open\n__get_tls\n__getdents64\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm/libc.so.variables.txt",
    "content": "__dso_handle\n__sdidinit\n__sglue"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__adddf3\n__addsf3\n__addvdi3\n__addvsi3\n__aeabi_cdcmpeq\n__aeabi_cdcmple\n__aeabi_cdrcmple\n__aeabi_cfcmpeq\n__aeabi_cfcmple\n__aeabi_cfrcmple\n__aeabi_d2f\n__aeabi_d2iz\n__aeabi_d2lz\n__aeabi_d2uiz\n__aeabi_d2ulz\n__aeabi_dadd\n__aeabi_dcmpeq\n__aeabi_dcmpge\n__aeabi_dcmpgt\n__aeabi_dcmple\n__aeabi_dcmplt\n__aeabi_dcmpun\n__aeabi_ddiv\n__aeabi_dmul\n__aeabi_dneg\n__aeabi_drsub\n__aeabi_dsub\n__aeabi_f2d\n__aeabi_f2iz\n__aeabi_f2lz\n__aeabi_f2uiz\n__aeabi_f2ulz\n__aeabi_fadd\n__aeabi_fcmpeq\n__aeabi_fcmpge\n__aeabi_fcmpgt\n__aeabi_fcmple\n__aeabi_fcmplt\n__aeabi_fcmpun\n__aeabi_fdiv\n__aeabi_fmul\n__aeabi_fneg\n__aeabi_frsub\n__aeabi_fsub\n__aeabi_i2d\n__aeabi_i2f\n__aeabi_idiv\n__aeabi_idiv0\n__aeabi_idivmod\n__aeabi_l2d\n__aeabi_l2f\n__aeabi_lasr\n__aeabi_lcmp\n__aeabi_ldiv0\n__aeabi_ldivmod\n__aeabi_llsl\n__aeabi_llsr\n__aeabi_lmul\n__aeabi_ui2d\n__aeabi_ui2f\n__aeabi_uidiv\n__aeabi_uidivmod\n__aeabi_ul2d\n__aeabi_ul2f\n__aeabi_ulcmp\n__aeabi_uldivmod\n__aeabi_unwind_cpp_pr0\n__aeabi_unwind_cpp_pr1\n__aeabi_unwind_cpp_pr2\n__aeabi_uread4\n__aeabi_uread8\n__aeabi_uwrite4\n__aeabi_uwrite8\n_arm_return\n_arm_return_r11\n_arm_return_r7\n__ashldi3\n__ashrdi3\n__bswapdi2\n__bswapsi2\n_call_via_fp\n_call_via_ip\n_call_via_lr\n_call_via_r0\n_call_via_r1\n_call_via_r2\n_call_via_r3\n_call_via_r4\n_call_via_r5\n_call_via_r6\n_call_via_r7\n_call_via_r8\n_call_via_r9\n_call_via_sl\n_call_via_sp\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdf2\n__cmpdi2\n__cmpsf2\n__ctzdi2\n__ctzsi2\n__div0\n__divdc3\n__divdf3\n__divdi3\n__divsc3\n__divsf3\n__divsi3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__extendsfdf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixdfsi\n__fixsfdi\n__fixsfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__floatdidf\n__floatdisf\n__floatsidf\n__floatsisf\n__floatundidf\n__floatundisf\n__floatunsidf\n__floatunsisf\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__gnu_addda3\n__gnu_adddq3\n__gnu_addha3\n__gnu_addhq3\n__gnu_addqq3\n__gnu_addsa3\n__gnu_addsq3\n__gnu_adduda3\n__gnu_addudq3\n__gnu_adduha3\n__gnu_adduhq3\n__gnu_adduqq3\n__gnu_addusa3\n__gnu_addusq3\n__gnu_ashlda3\n__gnu_ashldq3\n__gnu_ashlha3\n__gnu_ashlhelperda\n__gnu_ashlhelperdq\n__gnu_ashlhelperha\n__gnu_ashlhelperhq\n__gnu_ashlhelperqq\n__gnu_ashlhelpersa\n__gnu_ashlhelpersq\n__gnu_ashlhelperuda\n__gnu_ashlhelperudq\n__gnu_ashlhelperuha\n__gnu_ashlhelperuhq\n__gnu_ashlhelperuqq\n__gnu_ashlhelperusa\n__gnu_ashlhelperusq\n__gnu_ashlhq3\n__gnu_ashlqq3\n__gnu_ashlsa3\n__gnu_ashlsq3\n__gnu_ashluda3\n__gnu_ashludq3\n__gnu_ashluha3\n__gnu_ashluhq3\n__gnu_ashluqq3\n__gnu_ashlusa3\n__gnu_ashlusq3\n__gnu_ashrda3\n__gnu_ashrdq3\n__gnu_ashrha3\n__gnu_ashrhq3\n__gnu_ashrqq3\n__gnu_ashrsa3\n__gnu_ashrsq3\n__gnu_cmpda2\n__gnu_cmpdq2\n__gnu_cmpha2\n__gnu_cmphq2\n__gnu_cmpqq2\n__gnu_cmpsa2\n__gnu_cmpsq2\n__gnu_cmpuda2\n__gnu_cmpudq2\n__gnu_cmpuha2\n__gnu_cmpuhq2\n__gnu_cmpuqq2\n__gnu_cmpusa2\n__gnu_cmpusq2\n__gnu_divda3\n__gnu_divdq3\n__gnu_divha3\n__gnu_divhelperda\n__gnu_divhelperdq\n__gnu_divhelperha\n__gnu_divhelperhq\n__gnu_divhelperqq\n__gnu_divhelpersa\n__gnu_divhelpersq\n__gnu_divhelperuda\n__gnu_divhelperudq\n__gnu_divhelperuha\n__gnu_divhelperuhq\n__gnu_divhelperuqq\n__gnu_divhelperusa\n__gnu_divhelperusq\n__gnu_divhq3\n__gnu_divqq3\n__gnu_divsa3\n__gnu_divsq3\n__gnu_f2h_alternative\n__gnu_f2h_ieee\n__gnu_fractdadf\n__gnu_fractdadi\n__gnu_fractdadq\n__gnu_fractdaha2\n__gnu_fractdahi\n__gnu_fractdahq\n__gnu_fractdaqi\n__gnu_fractdaqq\n__gnu_fractdasa2\n__gnu_fractdasf\n__gnu_fractdasi\n__gnu_fractdasq\n__gnu_fractdauda\n__gnu_fractdaudq\n__gnu_fractdauha\n__gnu_fractdauhq\n__gnu_fractdauqq\n__gnu_fractdausa\n__gnu_fractdausq\n__gnu_fractdfda\n__gnu_fractdfdq\n__gnu_fractdfha\n__gnu_fractdfhq\n__gnu_fractdfqq\n__gnu_fractdfsa\n__gnu_fractdfsq\n__gnu_fractdfuda\n__gnu_fractdfudq\n__gnu_fractdfuha\n__gnu_fractdfuhq\n__gnu_fractdfuqq\n__gnu_fractdfusa\n__gnu_fractdfusq\n__gnu_fractdida\n__gnu_fractdidq\n__gnu_fractdiha\n__gnu_fractdihq\n__gnu_fractdiqq\n__gnu_fractdisa\n__gnu_fractdisq\n__gnu_fractdiuda\n__gnu_fractdiudq\n__gnu_fractdiuha\n__gnu_fractdiuhq\n__gnu_fractdiuqq\n__gnu_fractdiusa\n__gnu_fractdiusq\n__gnu_fractdqda\n__gnu_fractdqdf\n__gnu_fractdqdi\n__gnu_fractdqha\n__gnu_fractdqhi\n__gnu_fractdqhq2\n__gnu_fractdqqi\n__gnu_fractdqqq2\n__gnu_fractdqsa\n__gnu_fractdqsf\n__gnu_fractdqsi\n__gnu_fractdqsq2\n__gnu_fractdquda\n__gnu_fractdqudq\n__gnu_fractdquha\n__gnu_fractdquhq\n__gnu_fractdquqq\n__gnu_fractdqusa\n__gnu_fractdqusq\n__gnu_fracthada2\n__gnu_fracthadf\n__gnu_fracthadi\n__gnu_fracthadq\n__gnu_fracthahi\n__gnu_fracthahq\n__gnu_fracthaqi\n__gnu_fracthaqq\n__gnu_fracthasa2\n__gnu_fracthasf\n__gnu_fracthasi\n__gnu_fracthasq\n__gnu_fracthauda\n__gnu_fracthaudq\n__gnu_fracthauha\n__gnu_fracthauhq\n__gnu_fracthauqq\n__gnu_fracthausa\n__gnu_fracthausq\n__gnu_fracthida\n__gnu_fracthidq\n__gnu_fracthiha\n__gnu_fracthihq\n__gnu_fracthiqq\n__gnu_fracthisa\n__gnu_fracthisq\n__gnu_fracthiuda\n__gnu_fracthiudq\n__gnu_fracthiuha\n__gnu_fracthiuhq\n__gnu_fracthiuqq\n__gnu_fracthiusa\n__gnu_fracthiusq\n__gnu_fracthqda\n__gnu_fracthqdf\n__gnu_fracthqdi\n__gnu_fracthqdq2\n__gnu_fracthqha\n__gnu_fracthqhi\n__gnu_fracthqqi\n__gnu_fracthqqq2\n__gnu_fracthqsa\n__gnu_fracthqsf\n__gnu_fracthqsi\n__gnu_fracthqsq2\n__gnu_fracthquda\n__gnu_fracthqudq\n__gnu_fracthquha\n__gnu_fracthquhq\n__gnu_fracthquqq\n__gnu_fracthqusa\n__gnu_fracthqusq\n__gnu_fractqida\n__gnu_fractqidq\n__gnu_fractqiha\n__gnu_fractqihq\n__gnu_fractqiqq\n__gnu_fractqisa\n__gnu_fractqisq\n__gnu_fractqiuda\n__gnu_fractqiudq\n__gnu_fractqiuha\n__gnu_fractqiuhq\n__gnu_fractqiuqq\n__gnu_fractqiusa\n__gnu_fractqiusq\n__gnu_fractqqda\n__gnu_fractqqdf\n__gnu_fractqqdi\n__gnu_fractqqdq2\n__gnu_fractqqha\n__gnu_fractqqhi\n__gnu_fractqqhq2\n__gnu_fractqqqi\n__gnu_fractqqsa\n__gnu_fractqqsf\n__gnu_fractqqsi\n__gnu_fractqqsq2\n__gnu_fractqquda\n__gnu_fractqqudq\n__gnu_fractqquha\n__gnu_fractqquhq\n__gnu_fractqquqq\n__gnu_fractqqusa\n__gnu_fractqqusq\n__gnu_fractsada2\n__gnu_fractsadf\n__gnu_fractsadi\n__gnu_fractsadq\n__gnu_fractsaha2\n__gnu_fractsahi\n__gnu_fractsahq\n__gnu_fractsaqi\n__gnu_fractsaqq\n__gnu_fractsasf\n__gnu_fractsasi\n__gnu_fractsasq\n__gnu_fractsauda\n__gnu_fractsaudq\n__gnu_fractsauha\n__gnu_fractsauhq\n__gnu_fractsauqq\n__gnu_fractsausa\n__gnu_fractsausq\n__gnu_fractsfda\n__gnu_fractsfdq\n__gnu_fractsfha\n__gnu_fractsfhq\n__gnu_fractsfqq\n__gnu_fractsfsa\n__gnu_fractsfsq\n__gnu_fractsfuda\n__gnu_fractsfudq\n__gnu_fractsfuha\n__gnu_fractsfuhq\n__gnu_fractsfuqq\n__gnu_fractsfusa\n__gnu_fractsfusq\n__gnu_fractsida\n__gnu_fractsidq\n__gnu_fractsiha\n__gnu_fractsihq\n__gnu_fractsiqq\n__gnu_fractsisa\n__gnu_fractsisq\n__gnu_fractsiuda\n__gnu_fractsiudq\n__gnu_fractsiuha\n__gnu_fractsiuhq\n__gnu_fractsiuqq\n__gnu_fractsiusa\n__gnu_fractsiusq\n__gnu_fractsqda\n__gnu_fractsqdf\n__gnu_fractsqdi\n__gnu_fractsqdq2\n__gnu_fractsqha\n__gnu_fractsqhi\n__gnu_fractsqhq2\n__gnu_fractsqqi\n__gnu_fractsqqq2\n__gnu_fractsqsa\n__gnu_fractsqsf\n__gnu_fractsqsi\n__gnu_fractsquda\n__gnu_fractsqudq\n__gnu_fractsquha\n__gnu_fractsquhq\n__gnu_fractsquqq\n__gnu_fractsqusa\n__gnu_fractsqusq\n__gnu_fractudada\n__gnu_fractudadf\n__gnu_fractudadi\n__gnu_fractudadq\n__gnu_fractudaha\n__gnu_fractudahi\n__gnu_fractudahq\n__gnu_fractudaqi\n__gnu_fractudaqq\n__gnu_fractudasa\n__gnu_fractudasf\n__gnu_fractudasi\n__gnu_fractudasq\n__gnu_fractudaudq\n__gnu_fractudauha2\n__gnu_fractudauhq\n__gnu_fractudauqq\n__gnu_fractudausa2\n__gnu_fractudausq\n__gnu_fractudqda\n__gnu_fractudqdf\n__gnu_fractudqdi\n__gnu_fractudqdq\n__gnu_fractudqha\n__gnu_fractudqhi\n__gnu_fractudqhq\n__gnu_fractudqqi\n__gnu_fractudqqq\n__gnu_fractudqsa\n__gnu_fractudqsf\n__gnu_fractudqsi\n__gnu_fractudqsq\n__gnu_fractudquda\n__gnu_fractudquha\n__gnu_fractudquhq2\n__gnu_fractudquqq2\n__gnu_fractudqusa\n__gnu_fractudqusq2\n__gnu_fractuhada\n__gnu_fractuhadf\n__gnu_fractuhadi\n__gnu_fractuhadq\n__gnu_fractuhaha\n__gnu_fractuhahi\n__gnu_fractuhahq\n__gnu_fractuhaqi\n__gnu_fractuhaqq\n__gnu_fractuhasa\n__gnu_fractuhasf\n__gnu_fractuhasi\n__gnu_fractuhasq\n__gnu_fractuhauda2\n__gnu_fractuhaudq\n__gnu_fractuhauhq\n__gnu_fractuhauqq\n__gnu_fractuhausa2\n__gnu_fractuhausq\n__gnu_fractuhqda\n__gnu_fractuhqdf\n__gnu_fractuhqdi\n__gnu_fractuhqdq\n__gnu_fractuhqha\n__gnu_fractuhqhi\n__gnu_fractuhqhq\n__gnu_fractuhqqi\n__gnu_fractuhqqq\n__gnu_fractuhqsa\n__gnu_fractuhqsf\n__gnu_fractuhqsi\n__gnu_fractuhqsq\n__gnu_fractuhquda\n__gnu_fractuhqudq2\n__gnu_fractuhquha\n__gnu_fractuhquqq2\n__gnu_fractuhqusa\n__gnu_fractuhqusq2\n__gnu_fractunsdadi\n__gnu_fractunsdahi\n__gnu_fractunsdaqi\n__gnu_fractunsdasi\n__gnu_fractunsdida\n__gnu_fractunsdidq\n__gnu_fractunsdiha\n__gnu_fractunsdihq\n__gnu_fractunsdiqq\n__gnu_fractunsdisa\n__gnu_fractunsdisq\n__gnu_fractunsdiuda\n__gnu_fractunsdiudq\n__gnu_fractunsdiuha\n__gnu_fractunsdiuhq\n__gnu_fractunsdiuqq\n__gnu_fractunsdiusa\n__gnu_fractunsdiusq\n__gnu_fractunsdqdi\n__gnu_fractunsdqhi\n__gnu_fractunsdqqi\n__gnu_fractunsdqsi\n__gnu_fractunshadi\n__gnu_fractunshahi\n__gnu_fractunshaqi\n__gnu_fractunshasi\n__gnu_fractunshida\n__gnu_fractunshidq\n__gnu_fractunshiha\n__gnu_fractunshihq\n__gnu_fractunshiqq\n__gnu_fractunshisa\n__gnu_fractunshisq\n__gnu_fractunshiuda\n__gnu_fractunshiudq\n__gnu_fractunshiuha\n__gnu_fractunshiuhq\n__gnu_fractunshiuqq\n__gnu_fractunshiusa\n__gnu_fractunshiusq\n__gnu_fractunshqdi\n__gnu_fractunshqhi\n__gnu_fractunshqqi\n__gnu_fractunshqsi\n__gnu_fractunsqida\n__gnu_fractunsqidq\n__gnu_fractunsqiha\n__gnu_fractunsqihq\n__gnu_fractunsqiqq\n__gnu_fractunsqisa\n__gnu_fractunsqisq\n__gnu_fractunsqiuda\n__gnu_fractunsqiudq\n__gnu_fractunsqiuha\n__gnu_fractunsqiuhq\n__gnu_fractunsqiuqq\n__gnu_fractunsqiusa\n__gnu_fractunsqiusq\n__gnu_fractunsqqdi\n__gnu_fractunsqqhi\n__gnu_fractunsqqqi\n__gnu_fractunsqqsi\n__gnu_fractunssadi\n__gnu_fractunssahi\n__gnu_fractunssaqi\n__gnu_fractunssasi\n__gnu_fractunssida\n__gnu_fractunssidq\n__gnu_fractunssiha\n__gnu_fractunssihq\n__gnu_fractunssiqq\n__gnu_fractunssisa\n__gnu_fractunssisq\n__gnu_fractunssiuda\n__gnu_fractunssiudq\n__gnu_fractunssiuha\n__gnu_fractunssiuhq\n__gnu_fractunssiuqq\n__gnu_fractunssiusa\n__gnu_fractunssiusq\n__gnu_fractunssqdi\n__gnu_fractunssqhi\n__gnu_fractunssqqi\n__gnu_fractunssqsi\n__gnu_fractunsudadi\n__gnu_fractunsudahi\n__gnu_fractunsudaqi\n__gnu_fractunsudasi\n__gnu_fractunsudqdi\n__gnu_fractunsudqhi\n__gnu_fractunsudqqi\n__gnu_fractunsudqsi\n__gnu_fractunsuhadi\n__gnu_fractunsuhahi\n__gnu_fractunsuhaqi\n__gnu_fractunsuhasi\n__gnu_fractunsuhqdi\n__gnu_fractunsuhqhi\n__gnu_fractunsuhqqi\n__gnu_fractunsuhqsi\n__gnu_fractunsuqqdi\n__gnu_fractunsuqqhi\n__gnu_fractunsuqqqi\n__gnu_fractunsuqqsi\n__gnu_fractunsusadi\n__gnu_fractunsusahi\n__gnu_fractunsusaqi\n__gnu_fractunsusasi\n__gnu_fractunsusqdi\n__gnu_fractunsusqhi\n__gnu_fractunsusqqi\n__gnu_fractunsusqsi\n__gnu_fractuqqda\n__gnu_fractuqqdf\n__gnu_fractuqqdi\n__gnu_fractuqqdq\n__gnu_fractuqqha\n__gnu_fractuqqhi\n__gnu_fractuqqhq\n__gnu_fractuqqqi\n__gnu_fractuqqqq\n__gnu_fractuqqsa\n__gnu_fractuqqsf\n__gnu_fractuqqsi\n__gnu_fractuqqsq\n__gnu_fractuqquda\n__gnu_fractuqqudq2\n__gnu_fractuqquha\n__gnu_fractuqquhq2\n__gnu_fractuqqusa\n__gnu_fractuqqusq2\n__gnu_fractusada\n__gnu_fractusadf\n__gnu_fractusadi\n__gnu_fractusadq\n__gnu_fractusaha\n__gnu_fractusahi\n__gnu_fractusahq\n__gnu_fractusaqi\n__gnu_fractusaqq\n__gnu_fractusasa\n__gnu_fractusasf\n__gnu_fractusasi\n__gnu_fractusasq\n__gnu_fractusauda2\n__gnu_fractusaudq\n__gnu_fractusauha2\n__gnu_fractusauhq\n__gnu_fractusauqq\n__gnu_fractusausq\n__gnu_fractusqda\n__gnu_fractusqdf\n__gnu_fractusqdi\n__gnu_fractusqdq\n__gnu_fractusqha\n__gnu_fractusqhi\n__gnu_fractusqhq\n__gnu_fractusqqi\n__gnu_fractusqqq\n__gnu_fractusqsa\n__gnu_fractusqsf\n__gnu_fractusqsi\n__gnu_fractusqsq\n__gnu_fractusquda\n__gnu_fractusqudq2\n__gnu_fractusquha\n__gnu_fractusquhq2\n__gnu_fractusquqq2\n__gnu_fractusqusa\n__gnu_h2f_alternative\n__gnu_h2f_ieee\n__gnu_h2f_internal\n__gnu_ldivmod_helper\n__gnu_lshruda3\n__gnu_lshrudq3\n__gnu_lshruha3\n__gnu_lshruhq3\n__gnu_lshruqq3\n__gnu_lshrusa3\n__gnu_lshrusq3\n__gnu_mulda3\n__gnu_muldq3\n__gnu_mulha3\n__gnu_mulhelperda\n__gnu_mulhelperdq\n__gnu_mulhelperha\n__gnu_mulhelperhq\n__gnu_mulhelperqq\n__gnu_mulhelpersa\n__gnu_mulhelpersq\n__gnu_mulhelperuda\n__gnu_mulhelperudq\n__gnu_mulhelperuha\n__gnu_mulhelperuhq\n__gnu_mulhelperuqq\n__gnu_mulhelperusa\n__gnu_mulhelperusq\n__gnu_mulhq3\n__gnu_mulqq3\n__gnu_mulsa3\n__gnu_mulsq3\n__gnu_muluda3\n__gnu_muludq3\n__gnu_muluha3\n__gnu_muluhq3\n__gnu_muluqq3\n__gnu_mulusa3\n__gnu_mulusq3\n__gnu_negda2\n__gnu_negdq2\n__gnu_negha2\n__gnu_neghq2\n__gnu_negqq2\n__gnu_negsa2\n__gnu_negsq2\n__gnu_neguda2\n__gnu_negudq2\n__gnu_neguha2\n__gnu_neguhq2\n__gnu_neguqq2\n__gnu_negusa2\n__gnu_negusq2\n__gnu_satfractdadq\n__gnu_satfractdaha2\n__gnu_satfractdahq\n__gnu_satfractdaqq\n__gnu_satfractdasa2\n__gnu_satfractdasq\n__gnu_satfractdauda\n__gnu_satfractdaudq\n__gnu_satfractdauha\n__gnu_satfractdauhq\n__gnu_satfractdauqq\n__gnu_satfractdausa\n__gnu_satfractdausq\n__gnu_satfractdfda\n__gnu_satfractdfdq\n__gnu_satfractdfha\n__gnu_satfractdfhq\n__gnu_satfractdfqq\n__gnu_satfractdfsa\n__gnu_satfractdfsq\n__gnu_satfractdfuda\n__gnu_satfractdfudq\n__gnu_satfractdfuha\n__gnu_satfractdfuhq\n__gnu_satfractdfuqq\n__gnu_satfractdfusa\n__gnu_satfractdfusq\n__gnu_satfractdida\n__gnu_satfractdidq\n__gnu_satfractdiha\n__gnu_satfractdihq\n__gnu_satfractdiqq\n__gnu_satfractdisa\n__gnu_satfractdisq\n__gnu_satfractdiuda\n__gnu_satfractdiudq\n__gnu_satfractdiuha\n__gnu_satfractdiuhq\n__gnu_satfractdiuqq\n__gnu_satfractdiusa\n__gnu_satfractdiusq\n__gnu_satfractdqda\n__gnu_satfractdqha\n__gnu_satfractdqhq2\n__gnu_satfractdqqq2\n__gnu_satfractdqsa\n__gnu_satfractdqsq2\n__gnu_satfractdquda\n__gnu_satfractdqudq\n__gnu_satfractdquha\n__gnu_satfractdquhq\n__gnu_satfractdquqq\n__gnu_satfractdqusa\n__gnu_satfractdqusq\n__gnu_satfracthada2\n__gnu_satfracthadq\n__gnu_satfracthahq\n__gnu_satfracthaqq\n__gnu_satfracthasa2\n__gnu_satfracthasq\n__gnu_satfracthauda\n__gnu_satfracthaudq\n__gnu_satfracthauha\n__gnu_satfracthauhq\n__gnu_satfracthauqq\n__gnu_satfracthausa\n__gnu_satfracthausq\n__gnu_satfracthida\n__gnu_satfracthidq\n__gnu_satfracthiha\n__gnu_satfracthihq\n__gnu_satfracthiqq\n__gnu_satfracthisa\n__gnu_satfracthisq\n__gnu_satfracthiuda\n__gnu_satfracthiudq\n__gnu_satfracthiuha\n__gnu_satfracthiuhq\n__gnu_satfracthiuqq\n__gnu_satfracthiusa\n__gnu_satfracthiusq\n__gnu_satfracthqda\n__gnu_satfracthqdq2\n__gnu_satfracthqha\n__gnu_satfracthqqq2\n__gnu_satfracthqsa\n__gnu_satfracthqsq2\n__gnu_satfracthquda\n__gnu_satfracthqudq\n__gnu_satfracthquha\n__gnu_satfracthquhq\n__gnu_satfracthquqq\n__gnu_satfracthqusa\n__gnu_satfracthqusq\n__gnu_satfractqida\n__gnu_satfractqidq\n__gnu_satfractqiha\n__gnu_satfractqihq\n__gnu_satfractqiqq\n__gnu_satfractqisa\n__gnu_satfractqisq\n__gnu_satfractqiuda\n__gnu_satfractqiudq\n__gnu_satfractqiuha\n__gnu_satfractqiuhq\n__gnu_satfractqiuqq\n__gnu_satfractqiusa\n__gnu_satfractqiusq\n__gnu_satfractqqda\n__gnu_satfractqqdq2\n__gnu_satfractqqha\n__gnu_satfractqqhq2\n__gnu_satfractqqsa\n__gnu_satfractqqsq2\n__gnu_satfractqquda\n__gnu_satfractqqudq\n__gnu_satfractqquha\n__gnu_satfractqquhq\n__gnu_satfractqquqq\n__gnu_satfractqqusa\n__gnu_satfractqqusq\n__gnu_satfractsada2\n__gnu_satfractsadq\n__gnu_satfractsaha2\n__gnu_satfractsahq\n__gnu_satfractsaqq\n__gnu_satfractsasq\n__gnu_satfractsauda\n__gnu_satfractsaudq\n__gnu_satfractsauha\n__gnu_satfractsauhq\n__gnu_satfractsauqq\n__gnu_satfractsausa\n__gnu_satfractsausq\n__gnu_satfractsfda\n__gnu_satfractsfdq\n__gnu_satfractsfha\n__gnu_satfractsfhq\n__gnu_satfractsfqq\n__gnu_satfractsfsa\n__gnu_satfractsfsq\n__gnu_satfractsfuda\n__gnu_satfractsfudq\n__gnu_satfractsfuha\n__gnu_satfractsfuhq\n__gnu_satfractsfuqq\n__gnu_satfractsfusa\n__gnu_satfractsfusq\n__gnu_satfractsida\n__gnu_satfractsidq\n__gnu_satfractsiha\n__gnu_satfractsihq\n__gnu_satfractsiqq\n__gnu_satfractsisa\n__gnu_satfractsisq\n__gnu_satfractsiuda\n__gnu_satfractsiudq\n__gnu_satfractsiuha\n__gnu_satfractsiuhq\n__gnu_satfractsiuqq\n__gnu_satfractsiusa\n__gnu_satfractsiusq\n__gnu_satfractsqda\n__gnu_satfractsqdq2\n__gnu_satfractsqha\n__gnu_satfractsqhq2\n__gnu_satfractsqqq2\n__gnu_satfractsqsa\n__gnu_satfractsquda\n__gnu_satfractsqudq\n__gnu_satfractsquha\n__gnu_satfractsquhq\n__gnu_satfractsquqq\n__gnu_satfractsqusa\n__gnu_satfractsqusq\n__gnu_satfractudada\n__gnu_satfractudadq\n__gnu_satfractudaha\n__gnu_satfractudahq\n__gnu_satfractudaqq\n__gnu_satfractudasa\n__gnu_satfractudasq\n__gnu_satfractudaudq\n__gnu_satfractudauha2\n__gnu_satfractudauhq\n__gnu_satfractudauqq\n__gnu_satfractudausa2\n__gnu_satfractudausq\n__gnu_satfractudqda\n__gnu_satfractudqdq\n__gnu_satfractudqha\n__gnu_satfractudqhq\n__gnu_satfractudqqq\n__gnu_satfractudqsa\n__gnu_satfractudqsq\n__gnu_satfractudquda\n__gnu_satfractudquha\n__gnu_satfractudquhq2\n__gnu_satfractudquqq2\n__gnu_satfractudqusa\n__gnu_satfractudqusq2\n__gnu_satfractuhada\n__gnu_satfractuhadq\n__gnu_satfractuhaha\n__gnu_satfractuhahq\n__gnu_satfractuhaqq\n__gnu_satfractuhasa\n__gnu_satfractuhasq\n__gnu_satfractuhauda2\n__gnu_satfractuhaudq\n__gnu_satfractuhauhq\n__gnu_satfractuhauqq\n__gnu_satfractuhausa2\n__gnu_satfractuhausq\n__gnu_satfractuhqda\n__gnu_satfractuhqdq\n__gnu_satfractuhqha\n__gnu_satfractuhqhq\n__gnu_satfractuhqqq\n__gnu_satfractuhqsa\n__gnu_satfractuhqsq\n__gnu_satfractuhquda\n__gnu_satfractuhqudq2\n__gnu_satfractuhquha\n__gnu_satfractuhquqq2\n__gnu_satfractuhqusa\n__gnu_satfractuhqusq2\n__gnu_satfractunsdida\n__gnu_satfractunsdidq\n__gnu_satfractunsdiha\n__gnu_satfractunsdihq\n__gnu_satfractunsdiqq\n__gnu_satfractunsdisa\n__gnu_satfractunsdisq\n__gnu_satfractunsdiuda\n__gnu_satfractunsdiudq\n__gnu_satfractunsdiuha\n__gnu_satfractunsdiuhq\n__gnu_satfractunsdiuqq\n__gnu_satfractunsdiusa\n__gnu_satfractunsdiusq\n__gnu_satfractunshida\n__gnu_satfractunshidq\n__gnu_satfractunshiha\n__gnu_satfractunshihq\n__gnu_satfractunshiqq\n__gnu_satfractunshisa\n__gnu_satfractunshisq\n__gnu_satfractunshiuda\n__gnu_satfractunshiudq\n__gnu_satfractunshiuha\n__gnu_satfractunshiuhq\n__gnu_satfractunshiuqq\n__gnu_satfractunshiusa\n__gnu_satfractunshiusq\n__gnu_satfractunsqida\n__gnu_satfractunsqidq\n__gnu_satfractunsqiha\n__gnu_satfractunsqihq\n__gnu_satfractunsqiqq\n__gnu_satfractunsqisa\n__gnu_satfractunsqisq\n__gnu_satfractunsqiuda\n__gnu_satfractunsqiudq\n__gnu_satfractunsqiuha\n__gnu_satfractunsqiuhq\n__gnu_satfractunsqiuqq\n__gnu_satfractunsqiusa\n__gnu_satfractunsqiusq\n__gnu_satfractunssida\n__gnu_satfractunssidq\n__gnu_satfractunssiha\n__gnu_satfractunssihq\n__gnu_satfractunssiqq\n__gnu_satfractunssisa\n__gnu_satfractunssisq\n__gnu_satfractunssiuda\n__gnu_satfractunssiudq\n__gnu_satfractunssiuha\n__gnu_satfractunssiuhq\n__gnu_satfractunssiuqq\n__gnu_satfractunssiusa\n__gnu_satfractunssiusq\n__gnu_satfractuqqda\n__gnu_satfractuqqdq\n__gnu_satfractuqqha\n__gnu_satfractuqqhq\n__gnu_satfractuqqqq\n__gnu_satfractuqqsa\n__gnu_satfractuqqsq\n__gnu_satfractuqquda\n__gnu_satfractuqqudq2\n__gnu_satfractuqquha\n__gnu_satfractuqquhq2\n__gnu_satfractuqqusa\n__gnu_satfractuqqusq2\n__gnu_satfractusada\n__gnu_satfractusadq\n__gnu_satfractusaha\n__gnu_satfractusahq\n__gnu_satfractusaqq\n__gnu_satfractusasa\n__gnu_satfractusasq\n__gnu_satfractusauda2\n__gnu_satfractusaudq\n__gnu_satfractusauha2\n__gnu_satfractusauhq\n__gnu_satfractusauqq\n__gnu_satfractusausq\n__gnu_satfractusqda\n__gnu_satfractusqdq\n__gnu_satfractusqha\n__gnu_satfractusqhq\n__gnu_satfractusqqq\n__gnu_satfractusqsa\n__gnu_satfractusqsq\n__gnu_satfractusquda\n__gnu_satfractusqudq2\n__gnu_satfractusquha\n__gnu_satfractusquhq2\n__gnu_satfractusquqq2\n__gnu_satfractusqusa\n__gnu_saturate1ha\n__gnu_saturate1hq\n__gnu_saturate1qq\n__gnu_saturate1sa\n__gnu_saturate1sq\n__gnu_saturate1uha\n__gnu_saturate1uhq\n__gnu_saturate1uqq\n__gnu_saturate1usa\n__gnu_saturate1usq\n__gnu_saturate2da\n__gnu_saturate2dq\n__gnu_saturate2uda\n__gnu_saturate2udq\n__gnu_ssaddda3\n__gnu_ssadddq3\n__gnu_ssaddha3\n__gnu_ssaddhq3\n__gnu_ssaddqq3\n__gnu_ssaddsa3\n__gnu_ssaddsq3\n__gnu_ssashlda3\n__gnu_ssashldq3\n__gnu_ssashlha3\n__gnu_ssashlhq3\n__gnu_ssashlqq3\n__gnu_ssashlsa3\n__gnu_ssashlsq3\n__gnu_ssdivda3\n__gnu_ssdivdq3\n__gnu_ssdivha3\n__gnu_ssdivhq3\n__gnu_ssdivqq3\n__gnu_ssdivsa3\n__gnu_ssdivsq3\n__gnu_ssmulda3\n__gnu_ssmuldq3\n__gnu_ssmulha3\n__gnu_ssmulhq3\n__gnu_ssmulqq3\n__gnu_ssmulsa3\n__gnu_ssmulsq3\n__gnu_ssnegda2\n__gnu_ssnegdq2\n__gnu_ssnegha2\n__gnu_ssneghq2\n__gnu_ssnegqq2\n__gnu_ssnegsa2\n__gnu_ssnegsq2\n__gnu_sssubda3\n__gnu_sssubdq3\n__gnu_sssubha3\n__gnu_sssubhq3\n__gnu_sssubqq3\n__gnu_sssubsa3\n__gnu_sssubsq3\n__gnu_subda3\n__gnu_subdq3\n__gnu_subha3\n__gnu_subhq3\n__gnu_subqq3\n__gnu_subsa3\n__gnu_subsq3\n__gnu_subuda3\n__gnu_subudq3\n__gnu_subuha3\n__gnu_subuhq3\n__gnu_subuqq3\n__gnu_subusa3\n__gnu_subusq3\n__gnu_thumb1_case_shi\n__gnu_thumb1_case_si\n__gnu_thumb1_case_sqi\n__gnu_thumb1_case_uhi\n__gnu_thumb1_case_uqi\n__gnu_udivuda3\n__gnu_udivudq3\n__gnu_udivuha3\n__gnu_udivuhq3\n__gnu_udivuqq3\n__gnu_udivusa3\n__gnu_udivusq3\n__gnu_uldivmod_helper\n__gnu_Unwind_Backtrace\n__gnu_unwind_execute\n__gnu_Unwind_ForcedUnwind\n__gnu_unwind_frame\n__gnu_Unwind_RaiseException\n__gnu_Unwind_Restore_VFP\n__gnu_Unwind_Restore_VFP_D\n__gnu_Unwind_Restore_VFP_D_16_to_31\n__gnu_Unwind_Restore_WMMXC\n__gnu_Unwind_Restore_WMMXD\n__gnu_Unwind_Resume\n__gnu_Unwind_Resume_or_Rethrow\n__gnu_Unwind_Save_VFP\n__gnu_Unwind_Save_VFP_D\n__gnu_Unwind_Save_VFP_D_16_to_31\n__gnu_Unwind_Save_WMMXC\n__gnu_Unwind_Save_WMMXD\n__gnu_usadduda3\n__gnu_usaddudq3\n__gnu_usadduha3\n__gnu_usadduhq3\n__gnu_usadduqq3\n__gnu_usaddusa3\n__gnu_usaddusq3\n__gnu_usashluda3\n__gnu_usashludq3\n__gnu_usashluha3\n__gnu_usashluhq3\n__gnu_usashluqq3\n__gnu_usashlusa3\n__gnu_usashlusq3\n__gnu_usdivuda3\n__gnu_usdivudq3\n__gnu_usdivuha3\n__gnu_usdivuhq3\n__gnu_usdivuqq3\n__gnu_usdivusa3\n__gnu_usdivusq3\n__gnu_usmuluda3\n__gnu_usmuludq3\n__gnu_usmuluha3\n__gnu_usmuluhq3\n__gnu_usmuluqq3\n__gnu_usmulusa3\n__gnu_usmulusq3\n__gnu_usneguda2\n__gnu_usnegudq2\n__gnu_usneguha2\n__gnu_usneguhq2\n__gnu_usneguqq2\n__gnu_usnegusa2\n__gnu_usnegusq2\n__gnu_ussubuda3\n__gnu_ussubudq3\n__gnu_ussubuha3\n__gnu_ussubuhq3\n__gnu_ussubuqq3\n__gnu_ussubusa3\n__gnu_ussubusq3\n__gtdf2\n__gtsf2\n_interwork_call_via_fp\n_interwork_call_via_ip\n_interwork_call_via_lr\n_interwork_call_via_r0\n_interwork_call_via_r1\n_interwork_call_via_r2\n_interwork_call_via_r3\n_interwork_call_via_r4\n_interwork_call_via_r5\n_interwork_call_via_r6\n_interwork_call_via_r7\n_interwork_call_via_r8\n_interwork_call_via_r9\n_interwork_call_via_sl\n_interwork_call_via_sp\n_interwork_r11_call_via_fp\n_interwork_r11_call_via_ip\n_interwork_r11_call_via_r0\n_interwork_r11_call_via_r1\n_interwork_r11_call_via_r2\n_interwork_r11_call_via_r3\n_interwork_r11_call_via_r4\n_interwork_r11_call_via_r5\n_interwork_r11_call_via_r6\n_interwork_r11_call_via_r7\n_interwork_r11_call_via_r8\n_interwork_r11_call_via_r9\n_interwork_r11_call_via_sl\n_interwork_r11_call_via_sp\n_interwork_r7_call_via_fp\n_interwork_r7_call_via_ip\n_interwork_r7_call_via_r0\n_interwork_r7_call_via_r1\n_interwork_r7_call_via_r2\n_interwork_r7_call_via_r3\n_interwork_r7_call_via_r4\n_interwork_r7_call_via_r5\n_interwork_r7_call_via_r6\n_interwork_r7_call_via_r7\n_interwork_r7_call_via_r8\n_interwork_r7_call_via_r9\n_interwork_r7_call_via_sl\n_interwork_r7_call_via_sp\n__ledf2\n__lesf2\n__lshrdi3\n__ltdf2\n__ltsf2\n__moddi3\n__modsi3\n__muldc3\n__muldf3\n__muldi3\n__mulsc3\n__mulsf3\n__mulvdi3\n__mulvsi3\n__nedf2\n__negdf2\n__negdi2\n__negsf2\n__negvdi2\n__negvsi2\n__nesf2\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__restore_core_regs\nrestore_core_regs\n__subdf3\n__subsf3\n__subvdi3\n__subvsi3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_add_and_fetch_8\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_and_and_fetch_8\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_bool_compare_and_swap_8\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_add_8\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_and_8\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_nand_8\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_or_8\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_sub_8\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_fetch_and_xor_8\n__sync_lock_release_1\n__sync_lock_release_2\n__sync_lock_release_4\n__sync_lock_release_8\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_lock_test_and_set_8\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_nand_and_fetch_8\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_or_and_fetch_8\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_sub_and_fetch_8\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_val_compare_and_swap_8\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__sync_xor_and_fetch_8\n__truncdfsf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udivsi3\n__udiv_w_sdiv\n__umoddi3\n__umodsi3\n__unorddf2\n__unordsf2\n___Unwind_Backtrace\n_Unwind_Backtrace\n_Unwind_Complete\n_Unwind_DeleteException\n___Unwind_ForcedUnwind\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n___Unwind_RaiseException\n_Unwind_RaiseException\n___Unwind_Resume\n_Unwind_Resume\n___Unwind_Resume_or_Rethrow\n_Unwind_Resume_or_Rethrow\n_Unwind_VRS_Get\n_Unwind_VRS_Pop\n_Unwind_VRS_Set"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm/libgcc.a.variables.txt",
    "content": "__clz_tab\n__CTOR_LIST__\n__DTOR_LIST__\n__popcount_tab\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm64/libc.so.functions.txt",
    "content": "android_getaddrinfofornet\nandroid_gethostbyaddrfornet\nandroid_gethostbynamefornet\n__android_set_abort_message\narc4random_addrandom\narc4random_stir\nbasename_r\n__bionic_name_mem\ndirname_r\ndlmalloc\ndlmalloc_inspect_all\ndlmalloc_trim\ndlmalloc_usable_size\n__findenv\nfree_malloc_leak_info\n__futex_wake\n_fwalk\n__getdents64\nget_malloc_leak_info\n__get_thread\n__get_tls\nlocaltime_tz\nmktime_tz\n__open\nposix2time\n__pthread_gettid\n__sclose\n__sflags\n__sflush\n__sfp\nSHA1Final\nSHA1Init\nSHA1Transform\nSHA1Update\n__sinit\n__smakebuf\n__sread\n__srefill\n__srget\n__sseek\nstrftime_tz\n__swbuf\n__swrite\n__swsetup\n__system_properties_init\n__system_property_add\n__system_property_area_init\n__system_property_find\n__system_property_find_nth\n__system_property_foreach\n__system_property_get\n__system_property_read\n__system_property_serial\n__system_property_set\n__system_property_set_filename\n__system_property_update\n__system_property_wait_any\n_thread_created_hook\ntime2posix\ntzsetwall\n__wait4\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm64/libc.so.variables.txt",
    "content": "__atexit\n__atexit_invalid\n_C_ctype_\n_C_tolower_\n_C_toupper_\ngMallocLeakZygoteChild\n__isthreaded\n__sdidinit\n__sglue\n__system_property_area__\n_tolower_tab_\n_toupper_tab_\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm64/libgcc.a.functions.txt",
    "content": "__aarch64_sync_cache_range\n__absvdi2\n__absvsi2\n__absvti2\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divsc3\n__divtc3\n__divtf3\n__divti3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__ffsdi2\n__ffsti2\n__fixdfti\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfti\n__fixunssfdi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__floatditf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floatunditf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__getf2\n__gttf2\n__letf2\n__lshrti3\n__lttf2\n__modti3\n__muldc3\n__mulsc3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__trunctfdf2\n__trunctfsf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/arm64/libgcc.a.variables.txt",
    "content": "__clz_tab\n__CTOR_LIST__\n__DTOR_LIST__\n__popcount_tab\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips/libc.so.functions.txt",
    "content": "atexit\ndlmalloc\nfree_malloc_leak_info\nget_malloc_leak_info\n__srget\n__swbuf\n__srefill\n__swsetup\n__sflags\n__sfp\n__sinit\n__smakebuf\n__sflush\n__sread\n__swrite\n__sseek\n__sclose\n_fwalk\n__get_thread\n__wait4\n__futex_wake\n__open\n__get_tls\n__getdents64\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips/libc.so.variables.txt",
    "content": "__sdidinit\n__sglue"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__adddf3\n__addsf3\n__addvdi3\n__addvsi3\n__ashldi3\n__ashrdi3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdf2\n__cmpdi2\n__cmpsf2\n__ctzdi2\n__ctzsi2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divdf3\n__divdi3\n__divsc3\n__divsf3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__extendsfdf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixdfsi\n__fixsfdi\n__fixsfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__floatdidf\n__floatdisf\n__floatsidf\n__floatsisf\n__floatundidf\n__floatundisf\n__floatunsidf\n__floatunsisf\n__fpcmp_parts_d\n__fpcmp_parts_f\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__gnat_default_lock\n__gnat_default_unlock\n__gnat_install_locks\n__gtdf2\n__gthread_active_p\n__gthread_mutex_lock\n__gthread_mutex_unlock\n__gtsf2\n__ledf2\n__lesf2\n__lshrdi3\n__ltdf2\n__ltsf2\n__make_dp\n__make_fp\n__mips16_adddf3\n__mips16_addsf3\n__mips16_call_stub_1\n__mips16_call_stub_10\n__mips16_call_stub_2\n__mips16_call_stub_5\n__mips16_call_stub_6\n__mips16_call_stub_9\n__mips16_call_stub_dc_0\n__mips16_call_stub_dc_1\n__mips16_call_stub_dc_10\n__mips16_call_stub_dc_2\n__mips16_call_stub_dc_5\n__mips16_call_stub_dc_6\n__mips16_call_stub_dc_9\n__mips16_call_stub_df_0\n__mips16_call_stub_df_1\n__mips16_call_stub_df_10\n__mips16_call_stub_df_2\n__mips16_call_stub_df_5\n__mips16_call_stub_df_6\n__mips16_call_stub_df_9\n__mips16_call_stub_sc_0\n__mips16_call_stub_sc_1\n__mips16_call_stub_sc_10\n__mips16_call_stub_sc_2\n__mips16_call_stub_sc_5\n__mips16_call_stub_sc_6\n__mips16_call_stub_sc_9\n__mips16_call_stub_sf_0\n__mips16_call_stub_sf_1\n__mips16_call_stub_sf_10\n__mips16_call_stub_sf_2\n__mips16_call_stub_sf_5\n__mips16_call_stub_sf_6\n__mips16_call_stub_sf_9\n__mips16_divdf3\n__mips16_divsf3\n__mips16_eqdf2\n__mips16_eqsf2\n__mips16_extendsfdf2\n__mips16_fix_truncdfsi\n__mips16_fix_truncsfsi\n__mips16_floatsidf\n__mips16_floatsisf\n__mips16_floatunsidf\n__mips16_floatunsisf\n__mips16_gedf2\n__mips16_gesf2\n__mips16_gtdf2\n__mips16_gtsf2\n__mips16_ledf2\n__mips16_lesf2\n__mips16_ltdf2\n__mips16_ltsf2\n__mips16_muldf3\n__mips16_mulsf3\n__mips16_nedf2\n__mips16_nesf2\n__mips16_ret_dc\n__mips16_ret_df\n__mips16_ret_sc\n__mips16_ret_sf\n__mips16_subdf3\n__mips16_subsf3\n__mips16_truncdfsf2\n__mips16_unorddf2\n__mips16_unordsf2\n__moddi3\n__muldc3\n__muldf3\n__muldi3\n__mulsc3\n__mulsf3\n__mulvdi3\n__mulvsi3\n__nedf2\n__negdf2\n__negdi2\n__negsf2\n__negvdi2\n__negvsi2\n__nesf2\n__pack_d\n__pack_f\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__subdf3\n__subsf3\n__subvdi3\n__subvsi3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__truncdfsf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udiv_w_sdiv\n__umoddi3\n__unorddf2\n__unordsf2\n__unpack_d\n__unpack_f\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips/libgcc.a.variables.txt",
    "content": "__clz_tab\n__popcount_tab\n__thenan_df\n__thenan_sf\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips64/libc.so.functions.txt",
    "content": "android_getaddrinfofornet\nandroid_gethostbyaddrfornet\nandroid_gethostbynamefornet\n__android_set_abort_message\narc4random_addrandom\narc4random_stir\nbasename_r\n__bionic_name_mem\ndirname_r\ndlmalloc\ndlmalloc_inspect_all\ndlmalloc_trim\ndlmalloc_usable_size\n__findenv\nfree_malloc_leak_info\n__futex_wake\n_fwalk\n__getdents64\nget_malloc_leak_info\n__get_thread\n__get_tls\nlocaltime_tz\nmktime_tz\n__open\nposix2time\n__pthread_gettid\n__sclose\n__sflags\n__sflush\n__sfp\nSHA1Final\nSHA1Init\nSHA1Transform\nSHA1Update\n__sinit\n__smakebuf\n__sread\n__srefill\n__srget\n__sseek\nstrftime_tz\n__swbuf\n__swrite\n__swsetup\n__system_properties_init\n__system_property_add\n__system_property_area_init\n__system_property_find\n__system_property_find_nth\n__system_property_foreach\n__system_property_get\n__system_property_read\n__system_property_serial\n__system_property_set\n__system_property_set_filename\n__system_property_update\n__system_property_wait_any\n_thread_created_hook\ntime2posix\ntzsetwall\n__wait4\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips64/libc.so.variables.txt",
    "content": "__atexit\n__atexit_invalid\n_C_ctype_\n_C_tolower_\n_C_toupper_\ngMallocLeakZygoteChild\n__isthreaded\n__sdidinit\n__sglue\n__system_property_area__\n_tolower_tab_\n_toupper_tab_\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips64/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__absvti2\n__adddf3\n__addsf3\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divdf3\n__divsc3\n__divsf3\n__divtc3\n__divtf3\n__divti3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__eqtf2\n__extenddftf2\n__extendsfdf2\n__extendsftf2\n__ffsdi2\n__ffsti2\n__fixdfdi\n__fixdfsi\n__fixdfti\n__fixsfdi\n__fixsfsi\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfsi\n__fixunsdfti\n__fixunssfdi\n__fixunssfsi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__floatdidf\n__floatdisf\n__floatditf\n__floatsidf\n__floatsisf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floatundidf\n__floatundisf\n__floatunditf\n__floatunsidf\n__floatunsisf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__getf2\n__gtdf2\n__gtsf2\n__gttf2\n__ledf2\n__lesf2\n__letf2\n__lshrti3\n__ltdf2\n__ltsf2\n__lttf2\n__modti3\n__muldc3\n__muldf3\n__mulsc3\n__mulsf3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__nedf2\n__negdf2\n__negsf2\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__nesf2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__subdf3\n__subsf3\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_add_and_fetch_8\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_and_and_fetch_8\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_bool_compare_and_swap_8\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_add_8\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_and_8\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_nand_8\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_or_8\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_sub_8\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_fetch_and_xor_8\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_lock_test_and_set_8\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_nand_and_fetch_8\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_or_and_fetch_8\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_sub_and_fetch_8\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_val_compare_and_swap_8\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__sync_xor_and_fetch_8\n__truncdfsf2\n__trunctfdf2\n__trunctfsf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unorddf2\n__unordsf2\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/mips64/libgcc.a.variables.txt",
    "content": "__clz_tab\n__popcount_tab\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86/libc.so.functions.txt",
    "content": "dlmalloc\nfree_malloc_leak_info\nget_malloc_leak_info\n__srget\n__swbuf\n__srefill\n__swsetup\n__sflags\n__sfp\n__sinit\n__smakebuf\n__sflush\n__sread\n__swrite\n__sseek\n__sclose\n_fwalk\n__get_thread\n__wait4\n__futex_wake\n__open\n__get_tls\n__getdents64\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86/libc.so.variables.txt",
    "content": "__sdidinit\n__sglue"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__addtf3\n__addvdi3\n__addvsi3\n__alloca\n__ashldi3\n__ashrdi3\n__bid128_abs\n__bid128_add\n__bid128_class\n__bid128_copy\n__bid128_copySign\n__bid128dd_add\n__bid128ddd_fma\n__bid128dd_div\n__bid128dd_mul\n__bid128ddq_fma\n__bid128dd_sub\n__bid128_div\n__bid128dq_add\n__bid128dqd_fma\n__bid128dq_div\n__bid128dq_mul\n__bid128dqq_fma\n__bid128dq_sub\n__bid128_fma\n__bid128_from_int32\n__bid128_from_int64\n__bid128_from_uint32\n__bid128_from_uint64\n__bid128_isCanonical\n__bid128_isFinite\n__bid128_isInf\n__bid128_isNaN\n__bid128_isNormal\n__bid128_isSignaling\n__bid128_isSigned\n__bid128_isSubnormal\n__bid128_isZero\n__bid128_mul\n__bid128_negate\n__bid128qd_add\n__bid128qdd_fma\n__bid128qd_div\n__bid128qd_mul\n__bid128qdq_fma\n__bid128qd_sub\n__bid128qqd_fma\n__bid128_quiet_equal\n__bid128_quiet_greater\n__bid128_quiet_greater_equal\n__bid128_quiet_greater_unordered\n__bid128_quiet_less\n__bid128_quiet_less_equal\n__bid128_quiet_less_unordered\n__bid128_quiet_not_equal\n__bid128_quiet_not_greater\n__bid128_quiet_not_less\n__bid128_quiet_ordered\n__bid128_quiet_unordered\n__bid128_radix\n__bid128_sameQuantum\n__bid128_signaling_greater\n__bid128_signaling_greater_equal\n__bid128_signaling_greater_unordered\n__bid128_signaling_less\n__bid128_signaling_less_equal\n__bid128_signaling_less_unordered\n__bid128_signaling_not_greater\n__bid128_signaling_not_less\n__bid128_sub\n__bid128_to_bid32\n__bid128_to_bid64\n__bid128_to_binary128\n__bid128_to_binary32\n__bid128_to_binary64\n__bid128_to_binary80\n__bid128_to_int32_ceil\n__bid128_to_int32_floor\n__bid128_to_int32_int\n__bid128_to_int32_rnint\n__bid128_to_int32_rninta\n__bid128_to_int32_xceil\n__bid128_to_int32_xfloor\n__bid128_to_int32_xint\n__bid128_to_int32_xrnint\n__bid128_to_int32_xrninta\n__bid128_to_int64_ceil\n__bid128_to_int64_floor\n__bid128_to_int64_int\n__bid128_to_int64_rnint\n__bid128_to_int64_rninta\n__bid128_to_int64_xceil\n__bid128_to_int64_xfloor\n__bid128_to_int64_xint\n__bid128_to_int64_xrnint\n__bid128_to_int64_xrninta\n__bid128_totalOrder\n__bid128_totalOrderMag\n__bid128_to_uint32_ceil\n__bid128_to_uint32_floor\n__bid128_to_uint32_int\n__bid128_to_uint32_rnint\n__bid128_to_uint32_rninta\n__bid128_to_uint32_xceil\n__bid128_to_uint32_xfloor\n__bid128_to_uint32_xint\n__bid128_to_uint32_xrnint\n__bid128_to_uint32_xrninta\n__bid128_to_uint64_ceil\n__bid128_to_uint64_floor\n__bid128_to_uint64_int\n__bid128_to_uint64_rnint\n__bid128_to_uint64_rninta\n__bid128_to_uint64_xceil\n__bid128_to_uint64_xfloor\n__bid128_to_uint64_xint\n__bid128_to_uint64_xrnint\n__bid128_to_uint64_xrninta\n__bid32_to_bid128\n__bid32_to_bid64\n__bid32_to_binary128\n__bid32_to_binary32\n__bid32_to_binary64\n__bid32_to_binary80\n__bid64_abs\n__bid64_add\n__bid64_class\n__bid64_copy\n__bid64_copySign\n__bid64ddq_fma\n__bid64_div\n__bid64dq_add\n__bid64dqd_fma\n__bid64dq_div\n__bid64dq_mul\n__bid64dqq_fma\n__bid64dq_sub\n__bid64_from_int32\n__bid64_from_int64\n__bid64_from_uint32\n__bid64_from_uint64\n__bid64_isCanonical\n__bid64_isFinite\n__bid64_isInf\n__bid64_isNaN\n__bid64_isNormal\n__bid64_isSignaling\n__bid64_isSigned\n__bid64_isSubnormal\n__bid64_isZero\n__bid64_mul\n__bid64_negate\n__bid64qd_add\n__bid64qdd_fma\n__bid64qd_div\n__bid64qd_mul\n__bid64qdq_fma\n__bid64qd_sub\n__bid64qq_add\n__bid64qqd_fma\n__bid64qq_div\n__bid64qq_mul\n__bid64qqq_fma\n__bid64qq_sub\n__bid64_quiet_equal\n__bid64_quiet_greater\n__bid64_quiet_greater_equal\n__bid64_quiet_greater_unordered\n__bid64_quiet_less\n__bid64_quiet_less_equal\n__bid64_quiet_less_unordered\n__bid64_quiet_not_equal\n__bid64_quiet_not_greater\n__bid64_quiet_not_less\n__bid64_quiet_ordered\n__bid64_quiet_unordered\n__bid64_radix\n__bid64_sameQuantum\n__bid64_signaling_greater\n__bid64_signaling_greater_equal\n__bid64_signaling_greater_unordered\n__bid64_signaling_less\n__bid64_signaling_less_equal\n__bid64_signaling_less_unordered\n__bid64_signaling_not_greater\n__bid64_signaling_not_less\n__bid64_sub\n__bid64_to_bid128\n__bid64_to_bid32\n__bid64_to_binary128\n__bid64_to_binary32\n__bid64_to_binary64\n__bid64_to_binary80\n__bid64_to_int32_ceil\n__bid64_to_int32_floor\n__bid64_to_int32_int\n__bid64_to_int32_rnint\n__bid64_to_int32_rninta\n__bid64_to_int32_xceil\n__bid64_to_int32_xfloor\n__bid64_to_int32_xint\n__bid64_to_int32_xrnint\n__bid64_to_int32_xrninta\n__bid64_to_int64_ceil\n__bid64_to_int64_floor\n__bid64_to_int64_int\n__bid64_to_int64_rnint\n__bid64_to_int64_rninta\n__bid64_to_int64_xceil\n__bid64_to_int64_xfloor\n__bid64_to_int64_xint\n__bid64_to_int64_xrnint\n__bid64_to_int64_xrninta\n__bid64_totalOrder\n__bid64_totalOrderMag\n__bid64_to_uint32_ceil\n__bid64_to_uint32_floor\n__bid64_to_uint32_int\n__bid64_to_uint32_rnint\n__bid64_to_uint32_rninta\n__bid64_to_uint32_xceil\n__bid64_to_uint32_xfloor\n__bid64_to_uint32_xint\n__bid64_to_uint32_xrnint\n__bid64_to_uint32_xrninta\n__bid64_to_uint64_ceil\n__bid64_to_uint64_floor\n__bid64_to_uint64_int\n__bid64_to_uint64_rnint\n__bid64_to_uint64_rninta\n__bid64_to_uint64_xceil\n__bid64_to_uint64_xfloor\n__bid64_to_uint64_xint\n__bid64_to_uint64_xrnint\n__bid64_to_uint64_xrninta\n__bid_adddd3\n__bid_addsd3\n__bid_addtd3\n__bid_divdd3\n__bid_divsd3\n__bid_divtd3\n__bid_eqdd2\n__bid_eqsd2\n__bid_eqtd2\n__bid_extendddtd2\n__bid_extendddtf\n__bid_extendddxf\n__bid_extenddfdd\n__bid_extenddftd\n__bid_extendsddd2\n__bid_extendsddf\n__bid_extendsdtd2\n__bid_extendsdtf\n__bid_extendsdxf\n__bid_extendsfdd\n__bid_extendsfsd\n__bid_extendsftd\n__bid_extendtftd\n__bid_extendxftd\n__bid_fixdddi\n__bid_fixddsi\n__bid_fixsddi\n__bid_fixsdsi\n__bid_fixtddi\n__bid_fixtdsi\n__bid_fixunsdddi\n__bid_fixunsddsi\n__bid_fixunssddi\n__bid_fixunssdsi\n__bid_fixunstddi\n__bid_fixunstdsi\n__bid_floatdidd\n__bid_floatdisd\n__bid_floatditd\n__bid_floatsidd\n__bid_floatsisd\n__bid_floatsitd\n__bid_floatunsdidd\n__bid_floatunsdisd\n__bid_floatunsditd\n__bid_floatunssidd\n__bid_floatunssisd\n__bid_floatunssitd\n__bid_gedd2\n__bid_gesd2\n__bid_getd2\n__bid_gtdd2\n__bid_gtsd2\n__bid_gttd2\n__bid_ledd2\n__bid_lesd2\n__bid_letd2\n__bid_ltdd2\n__bid_ltsd2\n__bid_lttd2\n__bid_muldd3\n__bid_mulsd3\n__bid_multd3\n__bid_nedd2\n__bid_nesd2\n__bid_netd2\n__bid_round128_19_38\n__bid_round192_39_57\n__bid_round256_58_76\n__bid_round64_2_18\n__bid_subdd3\n__bid_subsd3\n__bid_subtd3\n__bid_truncdddf\n__bid_truncddsd2\n__bid_truncddsf\n__bid_truncdfsd\n__bid_truncsdsf\n__bid_trunctddd2\n__bid_trunctddf\n__bid_trunctdsd2\n__bid_trunctdsf\n__bid_trunctdtf\n__bid_trunctdxf\n__bid_trunctfdd\n__bid_trunctfsd\n__bid_truncxfdd\n__bid_truncxfsd\n__bid_unorddd2\n__bid_unordsd2\n__bid_unordtd2\n__binary128_to_bid128\n__binary128_to_bid32\n__binary128_to_bid64\n__binary32_to_bid128\n__binary32_to_bid32\n__binary32_to_bid64\n__binary64_to_bid128\n__binary64_to_bid32\n__binary64_to_bid64\n__binary80_to_bid128\n__binary80_to_bid32\n__binary80_to_bid64\n__bswapdi2\n__bswapsi2\n___chkstk\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdi2\n__copysigntf3\n__cpu_indicator_init\n__ctzdi2\n__ctzsi2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__dfp_clear_except\n__dfp_get_round\n__dfp_raise_except\n__dfp_set_round\n__dfp_test_except\n__divdc3\n__divdi3\n__divsc3\n__divtc3\n__divtf3\n__divxc3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__extendxftf2\n__fabstf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixsfdi\n__fixtfdi\n__fixtfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__fixunstfdi\n__fixunstfsi\n__fixunsxfdi\n__fixunsxfsi\n__fixxfdi\n__floatdidf\n__floatdisf\n__floatditf\n__floatdixf\n__floatsitf\n__floatundidf\n__floatundisf\n__floatunditf\n__floatundixf\n__floatunsitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__generic_findstack\n__generic_morestack\n__generic_morestack_set_initial_sp\n__generic_releasestack\n__getf2\n__gnat_default_lock\n__gnat_default_unlock\n__gnat_install_locks\n__gthread_active_p\n__gthread_mutex_lock\n__gthread_mutex_unlock\n__gttf2\nisinfd128\nisinfd32\nisinfd64\n__letf2\n__lshrdi3\n__lttf2\n__moddi3\n__morestack\n__morestack_allocate_stack_space\n__morestack_block_signals\n__morestack_fail\n__morestack_get_guard\n__morestack_load_mmap\n__morestack_make_guard\n__morestack_non_split\n__morestack_release_segments\n__morestack_set_guard\n__morestack_unblock_signals\n__muldc3\n__muldi3\n__mulsc3\n__multc3\n__multf3\n__mulvdi3\n__mulvsi3\n__mulxc3\n__negdi2\n__negtf2\n__negvdi2\n__negvsi2\n__netf2\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__powitf2\n__powixf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__splitstack_block_signals\n__splitstack_block_signals_context\n__splitstack_find\n__splitstack_find_context\n__splitstack_getcontext\n__splitstack_makecontext\n__splitstack_releasecontext\n__splitstack_resetcontext\n__splitstack_setcontext\n__stack_split_initialize\n__subtf3\n__subvdi3\n__subvsi3\n__trunctfdf2\n__trunctfsf2\n__trunctfxf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udiv_w_sdiv\n__umoddi3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n__wrap_pthread_create\n__x86.get_pc_thunk.bx\n__x86.get_pc_thunk.cx\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86/libgcc.a.variables.txt",
    "content": "__bid_char_table2\n__bid_char_table3\n__bid_convert_table\n__bid_estimate_bin_expon\n__bid_estimate_decimal_digits\n__bid_Ex128m128\n__bid_Ex192m192\n__bid_Ex256m256\n__bid_Ex64m64\n__bid_factors\n__bid_half128\n__bid_half192\n__bid_half256\n__bid_half64\n__bid_IDEC_glbflags\n__bid_IDEC_glbround\n__bid_Kx128\n__bid_Kx192\n__bid_Kx256\n__bid_Kx64\n__bid_mask128\n__bid_mask192\n__bid_mask256\n__bid_mask64\n__bid_maskhigh128\n__bid_maskhigh128M\n__bid_maskhigh192M\n__bid_maskhigh256M\n__bid_midpoint128\n__bid_midpoint192\n__bid_midpoint256\n__bid_midpoint64\n__bid_nr_digits\n__bid_onehalf128\n__bid_onehalf128M\n__bid_onehalf192M\n__bid_onehalf256M\n__bid_packed_10000_zeros\n__bid_power10_index_binexp\n__bid_power10_index_binexp_128\n__bid_power10_table_128\n__bid_reciprocals10_128\n__bid_reciprocals10_64\n__bid_recip_scale\n__bid_round_const_table\n__bid_round_const_table_128\n__bid_shiftright128\n__bid_shiftright128M\n__bid_shiftright192M\n__bid_shiftright256M\n__bid_shift_ten2m3k128\n__bid_shift_ten2m3k64\n__bid_short_recip_scale\n__bid_ten2k128\n__bid_ten2k256\n__bid_ten2k64\n__bid_ten2m3k128\n__bid_ten2m3k64\n__bid_ten2mk128\n__bid_ten2mk128M\n__bid_ten2mk128trunc\n__bid_ten2mk128truncM\n__bid_ten2mk192M\n__bid_ten2mk192truncM\n__bid_ten2mk256M\n__bid_ten2mk256truncM\n__bid_ten2mk64\n__bid_ten2mxtrunc128\n__bid_ten2mxtrunc192\n__bid_ten2mxtrunc256\n__bid_ten2mxtrunc64\n__clz_tab\n__cpu_features\n__cpu_model\nDW.ref.__gcc_personality_v0\n__emutls_v.__morestack_current_segment\n__emutls_v.__morestack_initial_sp\n__emutls_v.__morestack_segments\n__popcount_tab\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86_64/libc.so.functions.txt",
    "content": "android_getaddrinfofornet\nandroid_gethostbyaddrfornet\nandroid_gethostbynamefornet\n__android_set_abort_message\narc4random_addrandom\narc4random_stir\nbasename_r\n__bionic_name_mem\ndirname_r\ndlmalloc\ndlmalloc_inspect_all\ndlmalloc_trim\ndlmalloc_usable_size\n__findenv\nfree_malloc_leak_info\n__futex_wake\n_fwalk\n__getdents64\nget_malloc_leak_info\n__get_thread\n__get_tls\nlocaltime_tz\nmktime_tz\n__open\nposix2time\n__pthread_gettid\n__sclose\n__sflags\n__sflush\n__sfp\nSHA1Final\nSHA1Init\nSHA1Transform\nSHA1Update\n__sinit\n__smakebuf\n__sread\n__srefill\n__srget\n__sseek\nstrftime_tz\n__swbuf\n__swrite\n__swsetup\n__system_properties_init\n__system_property_add\n__system_property_area_init\n__system_property_find\n__system_property_find_nth\n__system_property_foreach\n__system_property_get\n__system_property_read\n__system_property_serial\n__system_property_set\n__system_property_set_filename\n__system_property_update\n__system_property_wait_any\n_thread_created_hook\ntime2posix\ntzsetwall\n__wait4\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86_64/libc.so.variables.txt",
    "content": "__atexit\n__atexit_invalid\n_C_ctype_\n_C_tolower_\n_C_toupper_\ngMallocLeakZygoteChild\n__isthreaded\n__sdidinit\n__sglue\n__system_property_area__\n_tolower_tab_\n_toupper_tab_\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86_64/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__absvti2\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bid128_abs\n__bid128_add\n__bid128_class\n__bid128_copy\n__bid128_copySign\n__bid128dd_add\n__bid128ddd_fma\n__bid128dd_div\n__bid128dd_mul\n__bid128ddq_fma\n__bid128dd_sub\n__bid128_div\n__bid128dq_add\n__bid128dqd_fma\n__bid128dq_div\n__bid128dq_mul\n__bid128dqq_fma\n__bid128dq_sub\n__bid128_fma\n__bid128_from_int32\n__bid128_from_int64\n__bid128_from_uint32\n__bid128_from_uint64\n__bid128_isCanonical\n__bid128_isFinite\n__bid128_isInf\n__bid128_isNaN\n__bid128_isNormal\n__bid128_isSignaling\n__bid128_isSigned\n__bid128_isSubnormal\n__bid128_isZero\n__bid128_mul\n__bid128_negate\n__bid128qd_add\n__bid128qdd_fma\n__bid128qd_div\n__bid128qd_mul\n__bid128qdq_fma\n__bid128qd_sub\n__bid128qqd_fma\n__bid128_quiet_equal\n__bid128_quiet_greater\n__bid128_quiet_greater_equal\n__bid128_quiet_greater_unordered\n__bid128_quiet_less\n__bid128_quiet_less_equal\n__bid128_quiet_less_unordered\n__bid128_quiet_not_equal\n__bid128_quiet_not_greater\n__bid128_quiet_not_less\n__bid128_quiet_ordered\n__bid128_quiet_unordered\n__bid128_radix\n__bid128_sameQuantum\n__bid128_signaling_greater\n__bid128_signaling_greater_equal\n__bid128_signaling_greater_unordered\n__bid128_signaling_less\n__bid128_signaling_less_equal\n__bid128_signaling_less_unordered\n__bid128_signaling_not_greater\n__bid128_signaling_not_less\n__bid128_sub\n__bid128_to_bid32\n__bid128_to_bid64\n__bid128_to_binary128\n__bid128_to_binary32\n__bid128_to_binary64\n__bid128_to_binary80\n__bid128_to_int32_ceil\n__bid128_to_int32_floor\n__bid128_to_int32_int\n__bid128_to_int32_rnint\n__bid128_to_int32_rninta\n__bid128_to_int32_xceil\n__bid128_to_int32_xfloor\n__bid128_to_int32_xint\n__bid128_to_int32_xrnint\n__bid128_to_int32_xrninta\n__bid128_to_int64_ceil\n__bid128_to_int64_floor\n__bid128_to_int64_int\n__bid128_to_int64_rnint\n__bid128_to_int64_rninta\n__bid128_to_int64_xceil\n__bid128_to_int64_xfloor\n__bid128_to_int64_xint\n__bid128_to_int64_xrnint\n__bid128_to_int64_xrninta\n__bid128_totalOrder\n__bid128_totalOrderMag\n__bid128_to_uint32_ceil\n__bid128_to_uint32_floor\n__bid128_to_uint32_int\n__bid128_to_uint32_rnint\n__bid128_to_uint32_rninta\n__bid128_to_uint32_xceil\n__bid128_to_uint32_xfloor\n__bid128_to_uint32_xint\n__bid128_to_uint32_xrnint\n__bid128_to_uint32_xrninta\n__bid128_to_uint64_ceil\n__bid128_to_uint64_floor\n__bid128_to_uint64_int\n__bid128_to_uint64_rnint\n__bid128_to_uint64_rninta\n__bid128_to_uint64_xceil\n__bid128_to_uint64_xfloor\n__bid128_to_uint64_xint\n__bid128_to_uint64_xrnint\n__bid128_to_uint64_xrninta\n__bid32_to_bid128\n__bid32_to_bid64\n__bid32_to_binary128\n__bid32_to_binary32\n__bid32_to_binary64\n__bid32_to_binary80\n__bid64_abs\n__bid64_add\n__bid64_class\n__bid64_copy\n__bid64_copySign\n__bid64ddq_fma\n__bid64_div\n__bid64dq_add\n__bid64dqd_fma\n__bid64dq_div\n__bid64dq_mul\n__bid64dqq_fma\n__bid64dq_sub\n__bid64_from_int32\n__bid64_from_int64\n__bid64_from_uint32\n__bid64_from_uint64\n__bid64_isCanonical\n__bid64_isFinite\n__bid64_isInf\n__bid64_isNaN\n__bid64_isNormal\n__bid64_isSignaling\n__bid64_isSigned\n__bid64_isSubnormal\n__bid64_isZero\n__bid64_mul\n__bid64_negate\n__bid64qd_add\n__bid64qdd_fma\n__bid64qd_div\n__bid64qd_mul\n__bid64qdq_fma\n__bid64qd_sub\n__bid64qq_add\n__bid64qqd_fma\n__bid64qq_div\n__bid64qq_mul\n__bid64qqq_fma\n__bid64qq_sub\n__bid64_quiet_equal\n__bid64_quiet_greater\n__bid64_quiet_greater_equal\n__bid64_quiet_greater_unordered\n__bid64_quiet_less\n__bid64_quiet_less_equal\n__bid64_quiet_less_unordered\n__bid64_quiet_not_equal\n__bid64_quiet_not_greater\n__bid64_quiet_not_less\n__bid64_quiet_ordered\n__bid64_quiet_unordered\n__bid64_radix\n__bid64_sameQuantum\n__bid64_signaling_greater\n__bid64_signaling_greater_equal\n__bid64_signaling_greater_unordered\n__bid64_signaling_less\n__bid64_signaling_less_equal\n__bid64_signaling_less_unordered\n__bid64_signaling_not_greater\n__bid64_signaling_not_less\n__bid64_sub\n__bid64_to_bid128\n__bid64_to_bid32\n__bid64_to_binary128\n__bid64_to_binary32\n__bid64_to_binary64\n__bid64_to_binary80\n__bid64_to_int32_ceil\n__bid64_to_int32_floor\n__bid64_to_int32_int\n__bid64_to_int32_rnint\n__bid64_to_int32_rninta\n__bid64_to_int32_xceil\n__bid64_to_int32_xfloor\n__bid64_to_int32_xint\n__bid64_to_int32_xrnint\n__bid64_to_int32_xrninta\n__bid64_to_int64_ceil\n__bid64_to_int64_floor\n__bid64_to_int64_int\n__bid64_to_int64_rnint\n__bid64_to_int64_rninta\n__bid64_to_int64_xceil\n__bid64_to_int64_xfloor\n__bid64_to_int64_xint\n__bid64_to_int64_xrnint\n__bid64_to_int64_xrninta\n__bid64_totalOrder\n__bid64_totalOrderMag\n__bid64_to_uint32_ceil\n__bid64_to_uint32_floor\n__bid64_to_uint32_int\n__bid64_to_uint32_rnint\n__bid64_to_uint32_rninta\n__bid64_to_uint32_xceil\n__bid64_to_uint32_xfloor\n__bid64_to_uint32_xint\n__bid64_to_uint32_xrnint\n__bid64_to_uint32_xrninta\n__bid64_to_uint64_ceil\n__bid64_to_uint64_floor\n__bid64_to_uint64_int\n__bid64_to_uint64_rnint\n__bid64_to_uint64_rninta\n__bid64_to_uint64_xceil\n__bid64_to_uint64_xfloor\n__bid64_to_uint64_xint\n__bid64_to_uint64_xrnint\n__bid64_to_uint64_xrninta\n__bid_adddd3\n__bid_addsd3\n__bid_addtd3\n__bid_divdd3\n__bid_divsd3\n__bid_divtd3\n__bid_eqdd2\n__bid_eqsd2\n__bid_eqtd2\n__bid_extendddtd2\n__bid_extendddtf\n__bid_extendddxf\n__bid_extenddfdd\n__bid_extenddftd\n__bid_extendsddd2\n__bid_extendsddf\n__bid_extendsdtd2\n__bid_extendsdtf\n__bid_extendsdxf\n__bid_extendsfdd\n__bid_extendsfsd\n__bid_extendsftd\n__bid_extendtftd\n__bid_extendxftd\n__bid_fixdddi\n__bid_fixddsi\n__bid_fixsddi\n__bid_fixsdsi\n__bid_fixtddi\n__bid_fixtdsi\n__bid_fixunsdddi\n__bid_fixunsddsi\n__bid_fixunssddi\n__bid_fixunssdsi\n__bid_fixunstddi\n__bid_fixunstdsi\n__bid_floatdidd\n__bid_floatdisd\n__bid_floatditd\n__bid_floatsidd\n__bid_floatsisd\n__bid_floatsitd\n__bid_floatunsdidd\n__bid_floatunsdisd\n__bid_floatunsditd\n__bid_floatunssidd\n__bid_floatunssisd\n__bid_floatunssitd\n__bid_gedd2\n__bid_gesd2\n__bid_getd2\n__bid_gtdd2\n__bid_gtsd2\n__bid_gttd2\n__bid_ledd2\n__bid_lesd2\n__bid_letd2\n__bid_ltdd2\n__bid_ltsd2\n__bid_lttd2\n__bid_muldd3\n__bid_mulsd3\n__bid_multd3\n__bid_nedd2\n__bid_nesd2\n__bid_netd2\n__bid_round128_19_38\n__bid_round192_39_57\n__bid_round256_58_76\n__bid_round64_2_18\n__bid_subdd3\n__bid_subsd3\n__bid_subtd3\n__bid_truncdddf\n__bid_truncddsd2\n__bid_truncddsf\n__bid_truncdfsd\n__bid_truncsdsf\n__bid_trunctddd2\n__bid_trunctddf\n__bid_trunctdsd2\n__bid_trunctdsf\n__bid_trunctdtf\n__bid_trunctdxf\n__bid_trunctfdd\n__bid_trunctfsd\n__bid_truncxfdd\n__bid_truncxfsd\n__bid_unorddd2\n__bid_unordsd2\n__bid_unordtd2\n__binary128_to_bid128\n__binary128_to_bid32\n__binary128_to_bid64\n__binary32_to_bid128\n__binary32_to_bid32\n__binary32_to_bid64\n__binary64_to_bid128\n__binary64_to_bid32\n__binary64_to_bid64\n__binary80_to_bid128\n__binary80_to_bid32\n__binary80_to_bid64\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__cpu_indicator_init\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__dfp_clear_except\n__dfp_get_round\n__dfp_raise_except\n__dfp_set_round\n__dfp_test_except\n__divdc3\n__divsc3\n__divtc3\n__divtf3\n__divti3\n__divxc3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__extendxftf2\n__ffsdi2\n__ffsti2\n__fixdfti\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfti\n__fixunssfdi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__fixunsxfdi\n__fixunsxfti\n__fixxfti\n__floatditf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floattixf\n__floatunditf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__floatuntixf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__generic_findstack\n__generic_morestack\n__generic_morestack_set_initial_sp\n__generic_releasestack\n__getf2\n__gttf2\nisinfd128\nisinfd32\nisinfd64\n__letf2\n__lshrti3\n__lttf2\n__modti3\n__morestack\n__morestack_allocate_stack_space\n__morestack_block_signals\n__morestack_fail\n__morestack_get_guard\n__morestack_large_model\n__morestack_load_mmap\n__morestack_make_guard\n__morestack_non_split\n__morestack_release_segments\n__morestack_set_guard\n__morestack_unblock_signals\n__muldc3\n__mulsc3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__mulxc3\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__powixf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__splitstack_block_signals\n__splitstack_block_signals_context\n__splitstack_find\n__splitstack_find_context\n__splitstack_getcontext\n__splitstack_makecontext\n__splitstack_releasecontext\n__splitstack_resetcontext\n__splitstack_setcontext\n__stack_split_initialize\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__trunctfdf2\n__trunctfsf2\n__trunctfxf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n__wrap_pthread_create\n"
  },
  {
    "path": "build/instruments/unwanted-symbols/x86_64/libgcc.a.variables.txt",
    "content": "__bid_char_table2\n__bid_char_table3\n__bid_convert_table\n__bid_estimate_bin_expon\n__bid_estimate_decimal_digits\n__bid_Ex128m128\n__bid_Ex192m192\n__bid_Ex256m256\n__bid_Ex64m64\n__bid_factors\n__bid_half128\n__bid_half192\n__bid_half256\n__bid_half64\n__bid_IDEC_glbflags\n__bid_IDEC_glbround\n__bid_Kx128\n__bid_Kx192\n__bid_Kx256\n__bid_Kx64\n__bid_mask128\n__bid_mask192\n__bid_mask256\n__bid_mask64\n__bid_maskhigh128\n__bid_maskhigh128M\n__bid_maskhigh192M\n__bid_maskhigh256M\n__bid_midpoint128\n__bid_midpoint192\n__bid_midpoint256\n__bid_midpoint64\n__bid_nr_digits\n__bid_onehalf128\n__bid_onehalf128M\n__bid_onehalf192M\n__bid_onehalf256M\n__bid_packed_10000_zeros\n__bid_power10_index_binexp\n__bid_power10_index_binexp_128\n__bid_power10_table_128\n__bid_reciprocals10_128\n__bid_reciprocals10_64\n__bid_recip_scale\n__bid_round_const_table\n__bid_round_const_table_128\n__bid_shiftright128\n__bid_shiftright128M\n__bid_shiftright192M\n__bid_shiftright256M\n__bid_shift_ten2m3k128\n__bid_shift_ten2m3k64\n__bid_short_recip_scale\n__bid_ten2k128\n__bid_ten2k256\n__bid_ten2k64\n__bid_ten2m3k128\n__bid_ten2m3k64\n__bid_ten2mk128\n__bid_ten2mk128M\n__bid_ten2mk128trunc\n__bid_ten2mk128truncM\n__bid_ten2mk192M\n__bid_ten2mk192truncM\n__bid_ten2mk256M\n__bid_ten2mk256truncM\n__bid_ten2mk64\n__bid_ten2mxtrunc128\n__bid_ten2mxtrunc192\n__bid_ten2mxtrunc256\n__bid_ten2mxtrunc64\n__clz_tab\n__cpu_model\nDW.ref.__gcc_personality_v0\n__emutls_v.__morestack_current_segment\n__emutls_v.__morestack_initial_sp\n__emutls_v.__morestack_segments\n__popcount_tab\n"
  },
  {
    "path": "build/instruments/update-build-cache",
    "content": "#!/usr/bin/env ruby\n\nrequire 'optparse'\nrequire 'open3'\nrequire 'fileutils'\nrequire 'digest'\n\ncase RUBY_PLATFORM\nwhen /(cygwin|mingw|win32)/\n    HOST_OS = :windows\nwhen /linux/\n    HOST_OS = :linux\nwhen /darwin/\n    HOST_OS = :darwin\nelse\n    $stderr.puts \"ERROR: Unsupported host platform: #{RUBY_PLATFORM}\"\n    exit 1\nend\n\n$stdout.sync = true\n$stderr.sync = true\n\nOPTIONS = {}\nOPTIONS[:targets] = [HOST_OS, 'android']\nOPTIONS[:cachedir] = \"/var/tmp/ndk-cache-#{ENV['USER']}\"\n\noptparser = OptionParser.new do |o|\n    o.on(\"-h\", \"--help\", \"Show help screen and exit\") do\n        $stdout.puts o\n        exit 0\n    end\n\n    o.on(\"-bN\", \"--build-number=N\", Integer, \"CrystaX NDK build number [autodetect]\") do |n|\n        OPTIONS[:build_number] = n\n    end\n\n    o.on(\"--targets=LIST\", Array, \"List of host OS to update cache for [#{OPTIONS[:targets].join(',')}]\") do |t|\n        OPTIONS[:targets] = t\n    end\n\n    o.on(\"--cache-dir=PATH\", \"Path to build cache directory [#{OPTIONS[:cachedir]}]\") do |c|\n        OPTIONS[:cachedir] = c\n    end\n\n    o.on(\"--check\", \"Run in CHECK mode - i.e. only check if cache is up-to-date and exit\") do |c|\n        OPTIONS[:check] = c\n    end\nend\nENV['POSIXLY_CORRECT'] = '1'\noptparser.parse!(ARGV)\n\nTARGETS = OPTIONS[:targets]\n$stdout.puts \"=== Updating cache for: #{TARGETS.join(',')}\"\n\nif OPTIONS[:build_number].nil?\n    $stdout.puts \"=== Detecting latest NDK build number...\"\n    url = \"https://dl.crystax.net/ndk/#{HOST_OS}/latest\"\n    o,e,s = Open3.capture3(\"curl -fSL #{url}\")\n    if !s.success?\n        $stderr.puts \"ERROR: Can't autodetect latest build number:\\n\\n#{e}\"\n        exit 1\n    end\n\n    bnum = o.chomp.split(\"\\n\").first.to_i\n    (1..10).each do\n        begin\n            TARGETS.each do |target|\n                _,_,s = Open3.capture3(\"curl -fSL https://dl.crystax.net/cache/#{bnum}/#{target}/checksum.sha256\")\n                raise \"NO CHECKSUM\" unless s.success?\n            end\n        rescue\n            $stdout.puts \"=== Build ##{bnum}: incomplete, trying previous one...\"\n            bnum -= 1\n            next\n        end\n        $stdout.puts \"=== Build ##{bnum}: OK\"\n        OPTIONS[:build_number] = bnum\n        break\n    end\n    if OPTIONS[:build_number].nil?\n        $stderr.puts \"ERROR: Can't detect latest NDK build number\"\n        exit 1\n    end\nend\nBNUM = OPTIONS[:build_number]\n$stdout.puts \"=== Using build number: #{BNUM}\"\n\nCACHEDIR = OPTIONS[:cachedir]\nCHECK = OPTIONS[:check]\n\ndef files(target, bnum)\n    baseurl = \"https://dl.crystax.net/cache/#{bnum}/#{target}\"\n    o,e,s = Open3.capture3(\"curl -fSL #{baseurl}/checksum.sha256\")\n    if !s.success?\n        $stderr.puts e\n        $stderr.puts \"ERROR: Can't get checksums for #{target}/##{bnum} cache files\"\n        exit 1\n    end\n\n    fs = []\n    o.split(\"\\n\").each do |line|\n        next unless line =~ /^SHA256\\(([^\\)]+)\\)\\s*=\\s*(\\S+)\\s*$/\n        fs << {file: $1, sha256: $2, url: \"#{baseurl}/#{$1}\"}\n    end\n    fs\nend\n\ndef checksum(file)\n    d = Digest::SHA256.new\n    File.open(file, 'rb') do |f|\n        while buf = f.read(64*1024*1024)\n            d.update buf\n        end\n    end\n    d.hexdigest\nrescue\n    nil\nend\n\ndef update\n    fls = []\n    TARGETS.each do |t|\n        fls += files(t, BNUM)\n    end\n\n    FileUtils.mkdir_p CACHEDIR\n\n    Dir.glob(File.join(CACHEDIR, '*')).each do |cf|\n        next unless fls.index { |f| f[:file] == File.basename(cf) }.nil?\n        $stdout.puts \"=== [DEL] #{cf}\"\n        FileUtils.rm_f cf\n    end unless CHECK\n\n    fls.sort { |a,b| a[:file] <=> b[:file] }.each do |f|\n        dst = File.join(CACHEDIR, f[:file])\n\n        $stdout.write \"=== [CHK] #{dst} ... \"\n        if checksum(dst) == f[:sha256]\n            $stdout.puts \"OK\"\n            next\n        end\n\n        $stdout.puts \"OUTDATED\"\n\n        return false if CHECK\n\n        attempt = 0\n        begin\n            FileUtils.rm_f dst\n\n            Open3.popen3(\"curl -SL -o #{dst} #{f[:url]}\") do |ii,oo,ee,tt|\n                ii.close\n                oo.close\n\n                while !ee.eof?\n                    ios, = IO.select([ee])\n                    ios.each do |io|\n                        c = io.read_nonblock(4096) rescue nil\n                        next if c.nil?\n\n                        $stderr.write c\n                    end\n                end\n\n                raise \"curl failed\" unless tt.value.success?\n            end\n\n            raise \"corrupted file\" if checksum(dst) != f[:sha256]\n        rescue => e\n            FileUtils.rm_f dst\n\n            attempt += 1\n            wt = attempt * 5\n\n            if attempt <= 3\n                $stderr.puts \"WARNING: Can't download #{f[:url]} (attempt ##{attempt}): #{e.message}; try again in #{wt} seconds\"\n                sleep(wt)\n                retry\n            else\n                $stderr.puts \"ERROR: Can't download #{f[:url]}\"\n                exit 1\n            end\n        end\n    end\n\n    true\nend\n\nbegin\n    r = update\n    $stdout.puts \"=== #{r ? \"UP-TO-DATE\" : \"OUT-OF-DATE\"}\" if CHECK\n    exit 1 unless r\nrescue Interrupt\n    $stderr.puts \"INTERRUPTED\"\n    exit 1\nend\n"
  },
  {
    "path": "build/lib/build_support.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nimport argparse\nimport multiprocessing\nimport os\nimport shutil\nimport subprocess\nimport sys\nimport tempfile\nimport zipfile\n\n\nTHIS_DIR = os.path.realpath(os.path.dirname(__file__))\n\n\n# TODO: Make the x86 toolchain names just be the triple.\nALL_TOOLCHAINS = (\n    'arm-linux-androideabi',\n    'aarch64-linux-android',\n    'mipsel-linux-android',\n    'mips64el-linux-android',\n    'x86',\n    'x86_64',\n)\n\n\nALL_TRIPLES = (\n    'arm-linux-androideabi',\n    'aarch64-linux-android',\n    'mipsel-linux-android',\n    'mips64el-linux-android',\n    'i686-linux-android',\n    'x86_64-linux-android',\n)\n\n\nALL_ARCHITECTURES = (\n    'arm',\n    'arm64',\n    'mips',\n    'mips64',\n    'x86',\n    'x86_64',\n)\n\n\nALL_ABIS = (\n    'armeabi',\n    'armeabi-v7a',\n    'armeabi-v7a-hard',\n    'arm64-v8a',\n    'mips',\n    'mips64',\n    'x86',\n    'x86_64',\n)\n\n\ndef arch_to_toolchain(arch):\n    return dict(zip(ALL_ARCHITECTURES, ALL_TOOLCHAINS))[arch]\n\n\ndef arch_to_triple(arch):\n    return dict(zip(ALL_ARCHITECTURES, ALL_TRIPLES))[arch]\n\n\ndef toolchain_to_arch(toolchain):\n    return dict(zip(ALL_TOOLCHAINS, ALL_ARCHITECTURES))[toolchain]\n\n\ndef arch_to_abis(arch):\n    return {\n        'arm': ['armeabi', 'armeabi-v7a', 'armeabi-v7a-hard'],\n        'arm64': ['arm64-v8a'],\n        'mips': ['mips'],\n        'mips64': ['mips64'],\n        'x86': ['x86'],\n        'x86_64': ['x86_64'],\n    }[arch]\n\n\ndef abi_to_arch(arch):\n    return {\n        'armeabi': 'arm',\n        'armeabi-v7a': 'arm',\n        'armeabi-v7a-hard': 'arm',\n        'arm64-v8a': 'arm64',\n        'mips': 'mips',\n        'mips64': 'mips64',\n        'x86': 'x86',\n        'x86_64': 'x86_64',\n    }[arch]\n\n\ndef android_path(*args):\n    top = os.path.realpath(os.path.join(THIS_DIR, '../../..'))\n    return os.path.normpath(os.path.join(top, *args))\n\n\ndef sysroot_path(toolchain):\n    arch = toolchain_to_arch(toolchain)\n    version = default_api_level(arch)\n\n    prebuilt_ndk = 'prebuilts/ndk/current'\n    sysroot_subpath = 'platforms/android-{}/arch-{}'.format(version, arch)\n    return android_path(prebuilt_ndk, sysroot_subpath)\n\n\ndef ndk_path(*args):\n    return android_path('ndk', *args)\n\n\ndef toolchain_path(*args):\n    return android_path('toolchain', *args)\n\n\ndef default_api_level(arch):\n    if '64' in arch:\n        return 21\n    else:\n        return 9\n\n\ndef jobs_arg():\n    return '-j{}'.format(multiprocessing.cpu_count() * 2)\n\n\ndef build(cmd, args, intermediate_package=False):\n    package_dir = args.out_dir if intermediate_package else args.dist_dir\n    common_args = [\n        '--verbose',\n        '--package-dir={}'.format(package_dir),\n    ]\n\n    build_env = dict(os.environ)\n    build_env['NDK_BUILDTOOLS_PATH'] = android_path('ndk/build/tools')\n    build_env['ANDROID_NDK_ROOT'] = ndk_path()\n    subprocess.check_call(cmd + common_args, env=build_env)\n\n\ndef _get_dir_from_env(default, env_var):\n    path = os.path.realpath(os.getenv(env_var, default))\n    if not os.path.isdir(path):\n        os.makedirs(path)\n    return path\n\n\ndef get_out_dir():\n    return _get_dir_from_env(android_path('out'), 'OUT_DIR')\n\n\ndef get_dist_dir(out_dir):\n    return _get_dir_from_env(os.path.join(out_dir, 'dist'), 'DIST_DIR')\n\n\ndef get_default_host():\n    if sys.platform in ('linux', 'linux2'):\n        return 'linux'\n    elif sys.platform == 'darwin':\n        return 'darwin'\n    else:\n        raise RuntimeError('Unsupported host: {}'.format(sys.platform))\n\n\ndef host_to_tag(host):\n    if host in ['darwin', 'linux']:\n        return host + '-x86_64'\n    elif host == 'windows':\n        return 'windows'\n    elif host == 'windows64':\n        return 'windows-x86_64'\n    else:\n        raise RuntimeError('Unsupported host: {}'.format(host))\n\n\ndef make_repo_prop(out_dir):\n    file_name = 'repo.prop'\n\n    dist_dir = os.environ.get('DIST_DIR')\n    if dist_dir is not None:\n        dist_repo_prop = os.path.join(dist_dir, file_name)\n        shutil.copy(dist_repo_prop, out_dir)\n    else:\n        out_file = os.path.join(out_dir, file_name)\n        with open(out_file, 'w') as prop_file:\n            cmd = [\n                'repo', 'forall', '-c',\n                'echo $REPO_PROJECT $(git rev-parse HEAD)',\n            ]\n            subprocess.check_call(cmd, stdout=prop_file)\n\n\ndef make_package(name, directory, out_dir):\n    \"\"\"Pacakges an NDK module for release.\n\n    Makes a zipfile of the single NDK module that can be released in the SDK\n    manager. This will handle the details of creating the repo.prop file for\n    the package.\n\n    Args:\n        name: Name of the final package, excluding extension.\n        directory: Directory to be packaged.\n        out_dir: Directory to place package.\n    \"\"\"\n    if not os.path.isdir(directory):\n        raise ValueError('directory must be a directory: ' + directory)\n\n    path = os.path.join(out_dir, name + '.zip')\n    if os.path.exists(path):\n        os.unlink(path)\n\n    cwd = os.getcwd()\n    os.chdir(os.path.dirname(directory))\n    basename = os.path.basename(directory)\n    try:\n        subprocess.check_call(\n            ['zip', '-x', '*.pyc', '-x', '*.pyo', '-x', '*.swp',\n             '-x', '*.git*', '-9qr', path, basename])\n    finally:\n        os.chdir(cwd)\n\n    with zipfile.ZipFile(path, 'a', zipfile.ZIP_DEFLATED) as zip_file:\n        tmpdir = tempfile.mkdtemp()\n        try:\n            make_repo_prop(tmpdir)\n            arcname = os.path.join(basename, 'repo.prop')\n            zip_file.write(os.path.join(tmpdir, 'repo.prop'), arcname)\n        finally:\n            shutil.rmtree(tmpdir)\n\n\ndef merge_license_files(output_path, files):\n    licenses = []\n    for license_path in files:\n        with open(license_path) as license_file:\n            licenses.append(license_file.read())\n\n    with open(output_path, 'w') as output_file:\n        output_file.write('\\n'.join(licenses))\n\n\nclass ArgParser(argparse.ArgumentParser):\n    def __init__(self):\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--host', choices=('darwin', 'linux', 'windows', 'windows64'),\n            default=get_default_host(),\n            help='Build binaries for given OS (e.g. linux).')\n\n        self.add_argument(\n            '--out-dir', help='Directory to place temporary build files.',\n            type=os.path.realpath, default=get_out_dir())\n\n        # The default for --dist-dir has to be handled after parsing all\n        # arguments because the default is derived from --out-dir. This is\n        # handled in run().\n        self.add_argument(\n            '--dist-dir', help='Directory to place the packaged artifact.',\n            type=os.path.realpath)\n\n\ndef run(main_func, arg_parser=ArgParser):\n    if 'ANDROID_BUILD_TOP' not in os.environ:\n        top = os.path.join(os.path.dirname(__file__), '../../..')\n        os.environ['ANDROID_BUILD_TOP'] = os.path.realpath(top)\n\n    args = arg_parser().parse_args()\n\n    if args.dist_dir is None:\n        args.dist_dir = get_dist_dir(args.out_dir)\n\n    # We want any paths to be relative to the invoked build script.\n    main_filename = os.path.realpath(sys.modules['__main__'].__file__)\n    os.chdir(os.path.dirname(main_filename))\n\n    main_func(args)\n"
  },
  {
    "path": "build/ndk-build",
    "content": "#!/bin/sh\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is a wrapper to launch the NDK build from the\n#  command-line inside an application project path.\n#\n#  Typical usage is:\n#\n#     cd $PROJECT_PATH\n#     ndk-build\n#\n#  Assuming that the Android NDK root path is in your PATH. However,\n#  you can also invoke it directly as:\n#\n#     $NDK_ROOT/ndk-build\n#\n#  This really is a tiny wrapper around GNU Make.\n#\n\n# Ensure we get the full path of this script's directory\n# this is needed if the caller uses the -C <path> GNU Make\n# option, as in:\n#\n#    cd ndk\n#    ./ndk-build -C <project-path>\n#\nPROGDIR=`dirname $0`\nPROGDIR=`cd $PROGDIR && pwd -P`\n\n# Check if absolute NDK path contain space\n#\ncase $PROGDIR in\n    *\\ *) echo \"ERROR: NDK path cannot contain space\"\n          exit 1\n        ;;\nesac\n\n# If NDK_LOG is set to 1 or true in the environment, or the command-line\n# then enable log messages below\nif [ -z \"$NDK_LOG\" ]; then\n  NDK_LOG=0\nfi\n\nif [ -z \"$NDK_ANALYZE\" ]; then\n  NDK_ANALYZE=0\nfi\n\nPROJECT_PATH=\nPROJECT_PATH_NEXT=\nfor opt; do\n    if [ -z \"$PROJECT_PATH\" -a \"$PROJECT_PATH_NEXT\" = \"yes\" ] ; then\n        PROJECT_PATH=$opt\n        PROJECT_PATH_NEXT=\n    else\n        case $opt in\n          NDK_LOG=1|NDK_LOG=true)\n            NDK_LOG=1\n            ;;\n          NDK_LOG=*)\n            NDK_LOG=0\n            ;;\n          NDK_ANALYZE=1|NDK_ANALYZE=true)\n            NDK_ANALYZE=1\n            ;;\n          NDK_ANALYZE=*)\n            NDK_ANALYZE=0\n            ;;\n          NDK_TOOLCHAIN_VERSION=*)\n            NDK_TOOLCHAIN_VERSION=${opt#NDK_TOOLCHAIN_VERSION=}\n            ;;\n          APP_ABI=*)\n            APP_ABI=${opt#APP_ABI=}\n            ;;\n          -C)\n            PROJECT_PATH_NEXT=\"yes\"\n            ;;\n        esac\n    fi\ndone\n\nif [ \"$NDK_LOG\" = \"true\" ]; then\n  NDK_LOG=1\nfi\n\nif [ \"$NDK_ANALYZE\" = \"true\" ]; then\n  NDK_ANALYZE=1\nfi\n\nif [ \"$NDK_LOG\" = \"1\" ]; then\n  log () {\n    echo \"$@\"\n  }\nelse\n  log () {\n    : # nothing\n  }\nfi\n\n# Detect host operating system and architecture\n# The 64-bit / 32-bit distinction gets tricky on Linux and Darwin because\n# uname -m returns the kernel's bit size, and it's possible to run with\n# a 64-bit kernel and a 32-bit userland.\n#\nHOST_OS=$(uname -s)\ncase $HOST_OS in\n  Darwin) HOST_OS=darwin;;\n  Linux) HOST_OS=linux;;\n  FreeBsd) HOST_OS=freebsd;;\n  CYGWIN*|*_NT-*) HOST_OS=cygwin;;\n  *) echo \"ERROR: Unknown host operating system: $HOST_OS\"\n     exit 1\nesac\nlog \"HOST_OS=$HOST_OS\"\n\nHOST_ARCH=$(uname -m)\ncase $HOST_ARCH in\n    i?86) HOST_ARCH=x86;;\n    x86_64|amd64) HOST_ARCH=x86_64;;\n    *) echo \"ERROR: Unknown host CPU architecture: $HOST_ARCH\"\n       exit 1\nesac\nlog \"HOST_ARCH=$HOST_ARCH\"\n\n# Detect 32-bit userland on 64-bit kernels\nHOST_TAG=\"$HOST_OS-$HOST_ARCH\"\ncase $HOST_TAG in\n  linux-x86_64|darwin-x86_64)\n    # we look for x86_64 or x86-64 in the output of 'file' for our shell\n    # the -L flag is used to dereference symlinks, just in case.\n    file -L \"$SHELL\" | grep -q \"x86[_-]64\"\n    if [ $? != 0 ]; then\n      HOST_ARCH=x86\n      log \"HOST_ARCH=$HOST_ARCH (32-bit userland detected)\"\n    fi\n    ;;\nesac\n\n# Check that we have 64-bit binaries on 64-bit system, otherwise fallback\n# on 32-bit ones. This gives us more freedom in packaging the NDK.\nLOG_MESSAGE=\nif [ $HOST_ARCH = x86_64 ]; then\n  if [ ! -d $PROGDIR/prebuilt/$HOST_TAG ]; then\n    HOST_ARCH=x86\n    LOG_MESSAGE=\"(no 64-bit prebuilt binaries detected)\"\n  fi\nfi\n\nHOST_TAG=$HOST_OS-$HOST_ARCH\n# Special case windows-x86 -> windows\nif [ $HOST_TAG = windows-x86 ]; then\n  HOST_TAG=windows\nfi\nlog \"HOST_TAG=$HOST_TAG $LOG_MESSAGE\"\n\n# If GNUMAKE is defined, check that it points to a valid file\nif [ -n \"$GNUMAKE\" ] ; then\n    ABS_GNUMAKE=`which $GNUMAKE 2> /dev/null`\n    if [ $? != 0 ] ; then\n        echo \"ERROR: Your GNUMAKE variable is defined to an invalid name: $GNUMAKE\"\n        echo \"Please fix it to point to a valid make executable (e.g. /usr/bin/make)\"\n        exit 1\n    fi\n    GNUMAKE=\"$ABS_GNUMAKE\"\n    log \"GNUMAKE=$GNUMAKE (from environment variable)\"\nelse\n    # Otherwise use the prebuilt version for our host tag, if it exists\n    # Note: we intentionally do not provide prebuilt make binaries for Cygwin\n    # or MSys.\n    GNUMAKE=$PROGDIR/prebuilt/$HOST_TAG/bin/make\n    if [ ! -f \"$GNUMAKE\" ]; then\n        # Otherwise, use 'make' and check that it is available\n        GNUMAKE=`which make 2> /dev/null`\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Cannot find 'make' program. Please install Cygwin make package\"\n            echo \"or define the GNUMAKE variable to point to it.\"\n            exit 1\n        fi\n        log \"GNUMAKE=$GNUMAKE (system path)\"\n    else\n        log \"GNUMAKE=$GNUMAKE (NDK prebuilt)\"\n    fi\nfi\n\n# On Windows, when running under cygwin, check that we are\n# invoking a cygwin-compatible GNU Make binary. It is unfortunately\n# common for app developers to have another non cygwin-compatible\n# 'make' program in their PATH.\n#\nif [ \"$OSTYPE\" = \"cygwin\" ] ; then\n    GNUMAKE=`cygpath -u $GNUMAKE`\n    PROGDIR_MIXED=`cygpath -m $PROGDIR`\n    CYGWIN_GNUMAKE=`$GNUMAKE -f \"$PROGDIR_MIXED/core/check-cygwin-make.mk\" 2>&1`\n    if [ $? != 0 ] ; then\n        echo \"ERROR: You are using a non-Cygwin compatible Make program.\"\n        echo \"Currently using: `cygpath -m $GNUMAKE`\"\n        echo \"\"\n        echo \"To solve the issue, follow these steps:\"\n        echo \"\"\n        echo \"1. Ensure that the Cygwin 'make' package is installed.\"\n        echo \"   NOTE: You will need GNU Make 3.81 or later!\"\n        echo \"\"\n        echo \"2. Define the GNUMAKE environment variable to point to it, as in:\"\n        echo \"\"\n        echo \"     export GNUMAKE=/usr/bin/make\"\n        echo \"\"\n        echo \"3. Call 'ndk-build' again.\"\n        echo \"\"\n        exit 1\n    fi\n    log \"Cygwin-compatible GNU make detected\"\nfi\n\nif [ \"$NDK_ANALYZE\" = 1 ]; then\n    . $PROGDIR/build/tools/dev-defaults.sh  # for DEFAULT_LLVM_VERSION\n\n    # Return flags send in env. or command line which are enough to retrive APP_ABI and TOOLCHAIN_PREFIX later\n    gen_flags ()\n    {\n        local FLAGS=\n\n        if [ -n \"$PROJECT_PATH\" ] ; then\n            FLAGS=$FLAGS\" -C $PROJECT_PATH\"\n        fi\n        if [ -n \"$APP_ABI\" ] ; then\n            FLAGS=$FLAGS\" APP_ABI=$APP_ABI\"\n        fi\n        if [ -n \"$NDK_TOOLCHAIN_VERSION\" ] ; then\n            FLAGS=$FLAGS\" NDK_TOOLCHAIN_VERSION=$NDK_TOOLCHAIN_VERSION\"\n        fi\n        echo \"$FLAGS\"\n    }\n\n    get_build_var ()\n    {\n        local VAR=$1\n        local FLAGS=`gen_flags`\n        $GNUMAKE --no-print-dir -f $PROGDIR/core/build-local.mk $FLAGS DUMP_${VAR} | tail -1\n    }\n\n    get_build_var_for_abi ()\n    {\n        local VAR=$1\n        local ABI=$2\n        local FLAGS=`gen_flags`\n        $GNUMAKE --no-print-dir -f $PROGDIR/core/build-local.mk $FLAGS DUMP_${VAR} APP_ABI=${ABI} | tail -1\n    }\n\n    APP_ABIS=`get_build_var APP_ABI`\n    for ABI in $APP_ABIS; do\n        TOOLCHAIN_PREFIX=`get_build_var_for_abi TOOLCHAIN_PREFIX $ABI`\n        LLVM_PATH=$PROGDIR/toolchains/llvm-${DEFAULT_LLVM_VERSION}/prebuilt\n        perl $LLVM_PATH/tools/scan-build/scan-build \\\n            --use-analyzer $LLVM_PATH/bin/${ABI}/analyzer \\\n            --use-cc ${TOOLCHAIN_PREFIX}gcc \\\n            --use-c++ ${TOOLCHAIN_PREFIX}g++ \\\n            --status-bugs \\\n            $GNUMAKE -f $PROGDIR/core/build-local.mk \"$@\" APP_ABI=$ABI\n    done\nelse\n    $GNUMAKE -f $PROGDIR/core/build-local.mk \"$@\"\nfi\n\n"
  },
  {
    "path": "build/ndk-build.cmd",
    "content": "@echo off\nset NDK_ROOT=%~dp0\\..\nset PREBUILT_PATH=%NDK_ROOT%\\prebuilt\\windows-x86_64\nif exist %PREBUILT_PATH% goto FOUND\nset PREBUILT_PATH=%NDK_ROOT%\\prebuilt\\windows\n:FOUND\n\"%PREBUILT_PATH%\\bin\\make.exe\" -f \"%NDK_ROOT%\\build\\core\\build-local.mk\" SHELL=cmd %*\n"
  },
  {
    "path": "build/scripts/build-crew-utils",
    "content": "#!/usr/bin/env ruby\n#\n# Build Crew utils and all required libs\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire_relative 'common.rb'\nrequire_relative 'commander.rb'\n\n\nPKG_NAME = 'crew-utils'\n\n\nbegin\n  options = Common.parse_build_options PKG_NAME\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_build_msg PKG_NAME, options.target_platform\n\n  path = File.dirname($0)\n\n  Common::CREW_UTILS.each do |name|\n    args = ARGV\n    if (name == 'curl' or name == 'ruby' or (name == 'libarchive' and options.target_os == 'darwin'))\n      args << '--no-check'\n    end\n    Logger.msg \"Building #{options.target_platform} #{name}\"\n    Commander.run \"#{path}/build-#{name} #{args.join(' ')}\"\n  end\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nend\n"
  },
  {
    "path": "build/scripts/build-curl",
    "content": "#!/usr/bin/env ruby\n#\n# Build CURL to use it with Crystax NDK\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire 'json'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\nrequire_relative 'builder.rb'\nrequire_relative 'cache.rb'\n\n\nPKG_NAME = 'curl'\n\n\ndef check_version(srcdir, version)\n  v = File.read(\"#{srcdir}/include/curl/curlver.h\").split(\"\\n\").select { |s| s =~ /LIBCURL_VERSION/ }\n  raise \"can't find 'LIBCURL_VERSION' string\" if !v or v.size == 0\n  srcver = v[0].split(' ')[2].delete('\"').split('-')[0]\n  raise BadVersion.new(PKG_NAME, srcver, version) unless srcver == version\nend\n\n\nbegin\n  options = Common.parse_build_options PKG_NAME\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_build_msg PKG_NAME, options.target_platform\n\n  release, paths, archive, formula = Common.make_build_data PKG_NAME, options\n\n  if Cache.try?(archive) and !options.force?\n    Logger.log_msg \"= using cached file: #{archive}\"\n  else\n    paths[:zlib]    = Builder.build_zlib    options, paths\n    paths[:openssl] = Builder.build_openssl options, paths\n    paths[:libssh2] = Builder.build_libssh2 options, paths\n\n    Logger.log_msg \"= building #{archive}; args: #{ARGV}\"\n    check_version paths[:src], release.version\n    Builder.copy_sources paths[:src], paths[:build_base]\n    FileUtils.mkdir_p(paths[:install])\n    prefix = Pathname.new(paths[:install]).realpath\n    FileUtils.cd(paths[:build]) do\n      Commander.run \"./buildconf\"\n      env = { 'CC' => Builder.cc(options),\n              'CFLAGS' => \"#{Builder.cflags(options)} -DCURL_STATICLIB\",\n              'LANG' => 'C'\n            }\n      env['LDFLAGS'] = ' -ldl' if options.target_os == 'linux'\n      args = [\"--prefix=#{prefix}\",\n              \"--host=#{Builder.configure_host(options)}\",\n              \"--disable-shared\",\n              \"--disable-ldap\",\n              \"--with-ssl=#{paths[:openssl]}\",\n              \"--with-zlib=#{paths[:zlib]}\",\n              \"--with-libssh2=#{paths[:libssh2]}\"\n             ]\n      Commander.run env, \"./configure #{args.join(' ')}\"\n      Commander.run env, \"make -j #{options.num_jobs}\"\n      Commander.run env, \"make test\" unless options.no_check?\n      Commander.run env, \"make install\"\n      # remove unneeded files before packaging\n      FileUtils.cd(prefix) { FileUtils.rm_rf(['include', 'lib', 'share']) }\n      # add properties file\n      Common.write_properties prefix, release\n    end\n\n    platform_sym = options.target_platform_as_sym\n    release.shasum = { platform_sym => Cache.add(archive, paths[:build_base]) }\n    Common.update_release_shasum formula.path, release, platform_sym if options.update_sha256_sums?\n  end\n\n  if options.same_platform?\n    Cache.unpack(archive, Common::NDK_DIR)\n    Common.write_active_file(Common::NDK_DIR, options.host_platform, PKG_NAME, release)\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nelse\n  FileUtils.rm_rf paths[:build_base] unless options.no_clean?\nend\n"
  },
  {
    "path": "build/scripts/build-host-gcc",
    "content": "#!/usr/bin/env ruby\n#\n# Build host GCC that will be used to build with Crystax NDK\n#\n# Copy required GCC 4.9.2 source tarbal into /tmp/ directory and run this script.\n# The result will be installed into /tmp/ndk-USER/host/gcc/x86_64-apple-darwin-GCC_VER\n#\n# NB: Only darwin build currently supported\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nmodule Crystax\n\n  PKG_NAME = 'gcc'\n\nend\n\nrequire 'fileutils'\nrequire_relative 'common.rb'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\n\n\nNDK_VER   = '10'\nGCC_VER   = '4.9.2'\nGMP_VER   = '6.0.0'\nMPFR_VER  = '3.1.2'\nMPC_VER   = '1.0.3'\nISL_VER   = '0.12.2'\nCLOOG_VER = '0.18.3'\n\n# restrict PATH to standard bin dirs\nENV['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin'\nBASE_DIR = File.join('/tmp', \"ndk-#{ENV['USER']}\", 'host', 'gcc')\n\n\ndef build_library(name, ver, archive, args)\n  Logger.msg \"= building #{name.upcase} #{ver}\"\n  file = File.join(Common::NDK_ROOT_DIR, 'toolchain', name, archive)\n  FileUtils.cd(BASE_DIR) { Commander.run \"tar xf #{file}\" }\n  dir = File.join(BASE_DIR, \"#{name}-#{ver}\")\n  FileUtils.cd(dir) do\n    Commander::run \"#{File.join(dir, 'configure')} #{args.join(' ')}\"\n    Commander::run \"make -j #{Common.num_jobs}\"\n    Commander::run \"make install\"\n  end\nend\n\n\nbegin\n  # todo: parse options\n  Common.verbose = true\n\n  prefixdir = File.join(BASE_DIR, \"libs\")\n  FileUtils.mkdir_p prefixdir\n\n  Logger.open_log_file File.join(BASE_DIR, 'build-host-gcc.log')\n  # todo: os\n  Logger.msg \"building host GCC #{GCC_VER}; os: darwin\"\n\n  build_library 'gmp',    GMP_VER,   \"gmp-#{GMP_VER}.tar.bz2\",    [\"--prefix=#{prefixdir}\", \"--disable-shared\", \"--enable-cxx\"]\n  build_library 'mpfr',   MPFR_VER,  \"mpfr-#{MPFR_VER}.tar.bz2\",  [\"--prefix=#{prefixdir}\", \"--disable-shared\", \"--with-gmp=#{prefixdir}\"]\n  build_library 'mpc',    MPC_VER,   \"mpc-#{MPC_VER}.tar.gz\",     [\"--prefix=#{prefixdir}\", \"--disable-shared\", \"--with-gmp=#{prefixdir}\", \"--with-mpfr=#{prefixdir}\"]\n  build_library 'isl',    ISL_VER,   \"isl-#{ISL_VER}.tar.bz2\",    [\"--prefix=#{prefixdir}\", \"--disable-shared\", \"--with-gmp-prefix=#{prefixdir}\"]\n  build_library 'cloog',  CLOOG_VER, \"cloog-#{CLOOG_VER}.tar.gz\", [\"--prefix=#{prefixdir}\", \"--disable-shared\", \"--with-gmp-prefix=#{prefixdir}\", \"--with-isl-prefix=#{prefixdir}\"]\n\n  Logger.msg \"= building GCC #{GCC_VER}\"\n  gccfile = \"/tmp/gcc-#{GCC_VER}.tar.bz2\"\n  FileUtils.cd(BASE_DIR) { Commander.run \"tar xf #{gccfile}\" }\n  srcdir = File.join(BASE_DIR, \"gcc-#{GCC_VER}\")\n  builddir = File.join(BASE_DIR, 'build')\n  FileUtils.mkdir_p(builddir)\n  installdir = File.join(BASE_DIR, \"x86_64-apple-darwin-#{GCC_VER}\")\n  FileUtils.mkdir_p installdir\n  FileUtils.cd(builddir) do\n    args = [\"--prefix=#{installdir}\",\n            \"--enable-checking=release\",\n            \"--with-gmp=#{prefixdir}\",\n            \"--with-mpfr=#{prefixdir}\",\n            \"--with-mpc=#{prefixdir}\",\n            \"--with-isl=#{prefixdir}\",\n            \"--with-cloog=#{prefixdir}\",\n            \"--enable-languages=c,c++\",\n            \"--with-pkgversion=\\'Crystax NDK #{NDK_VER}\\'\"\n           ]\n    Commander::run \"#{File.join(srcdir, 'configure')} #{args.join(' ')}\"\n    Commander::run \"make -j #{Common.num_jobs}\"\n    Commander::run \"make install\"\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nelse\n  #Builder.clean\nend\n"
  },
  {
    "path": "build/scripts/build-libarchive",
    "content": "#!/usr/bin/env ruby\n#\n# Build TAR to use it with Crystax NDK\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire 'json'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\nrequire_relative 'builder.rb'\nrequire_relative 'cache.rb'\n\n\nPKG_NAME = 'libarchive'\n\n\ndef check_version(srcdir, version)\n  v = File.read(\"#{srcdir}/libarchive/archive.h\").split(\"\\n\").select { |s| s =~ /ARCHIVE_VERSION_STRING/ }\n  raise \"error parsing archive.h: #{v}\" if v.size == 0\n  srcver = v[0].split(' ')[3].delete('\"')\n  raise BadVersion.new(PKG_NAME, srcver, version) unless srcver == version\nend\n\ndef unpack_xz_package(path, options)\n  platform = options.target_platform\n  release, formula = Common.formula_data('xz')\n  archive = Common.make_archive_name('xz', release, platform)\n  dir = \"#{path[:build_base]}/xz\"\n  FileUtils.mkdir_p dir\n  Cache.unpack archive, dir\n  \"#{dir}/prebuilt/#{platform}/crew/xz/#{release}\"\nend\n\n\nbegin\n  options = Common.parse_build_options PKG_NAME\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_build_msg PKG_NAME, options.target_platform\n\n  release, paths, archive, formula = Common.make_build_data PKG_NAME, options\n\n  if Cache.try?(archive) and !options.force?\n    Logger.log_msg \"= using cached file: #{archive}\"\n  else\n    Logger.log_msg \"= preparing dependencies: xz\"\n    paths[:xz] = unpack_xz_package(paths, options)\n    Logger.log_msg \"= building #{archive}; args: #{ARGV}\"\n    Builder.copy_sources paths[:src], paths[:build_base]\n    FileUtils.mkdir_p(paths[:install])\n    prefix = Pathname.new(paths[:install]).realpath\n    FileUtils.cd(paths[:build]) do\n      Commander.run \"./build/autogen.sh\"\n      # todo:\n      check_version '.', release.version\n      env = { 'CC'      => Builder.cc(options),\n              'CFLAGS'  => \"-I#{paths[:xz]}/include #{Builder.cflags(options)}\",\n              'LDFLAGS' => \"-L#{paths[:xz]}/lib\",\n              'LANG'    => 'C',\n              'V'       => '1'\n            }\n      #env['LDFLAGS'] = ' -ldl' if options.target_os == 'linux'\n      args = [\"--prefix=#{prefix}\",\n              \"--host=#{Builder.configure_host(options)}\",\n              \"--disable-shared\",\n              \"--without-iconv\",\n              \"--without-nettle\",\n              \"--without-xml2\",\n              \"--without-expat\",\n              \"--with-sysroot\"\n             ]\n      Commander.run env, \"./configure #{args.join(' ')}\"\n      Commander.run env, \"make -j #{options.num_jobs}\"\n      Commander.run env, \"make check\" unless options.no_check?\n      # install tar program\n      tarprog = options.target_os == 'windows' ? 'bsdtar.exe' : 'bsdtar'\n      bindir = \"#{paths[:install]}/bin\"\n      FileUtils.mkdir_p bindir\n      FileUtils.cp tarprog, bindir\n      # add properties file\n      Common.write_properties prefix, release\n    end\n\n    platform_sym = options.target_platform_as_sym\n    release.shasum = { platform_sym => Cache.add(archive, paths[:build_base]) }\n    Common.update_release_shasum formula.path, release, platform_sym if options.update_sha256_sums?\n  end\n\n  if options.same_platform?\n    Cache.unpack(archive, Common::NDK_DIR)\n    Common.write_active_file(Common::NDK_DIR, options.host_platform, PKG_NAME, release)\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nelse\n  FileUtils.rm_rf paths[:build_base] unless options.no_clean?\nend\n"
  },
  {
    "path": "build/scripts/build-ruby",
    "content": "#!/usr/bin/env ruby\n#\n# Build RUBY to use it with Crystax NDK\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\n\nrequire 'fileutils'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\nrequire_relative 'builder.rb'\nrequire_relative 'cache.rb'\n\n\nPKG_NAME = 'ruby'\n\n\n# line: #define RUBY_VERSION \"2.2.2\"\ndef check_version(srcdir, version)\n  v = File.read(\"#{srcdir}/version.h\").split(\"\\n\").select { |s| s =~ /#define RUBY_VERSION/ }\n  raise \"can't find '#define RUBY_VERSION' string\" if !v or v.size == 0\n  srcver = v[0].split(' ')[2].split('\"')[1]\n  raise BadVersion.new(PKG_NAME, srcver, version) unless srcver == version\nend\n\ndef copy_rugged(dstdir)\n  dst = \"#{dstdir}/ext/rugged\"\n  src = \"#{Common::VENDOR_DIR}/rugged\"\n  FileUtils.mkdir_p \"#{dst}/lib\"\n  FileUtils.cp_r Dir[\"#{src}/ext/rugged/*\"], \"#{dst}/\"\n  FileUtils.cp_r Dir[\"#{src}/lib/*\"], \"#{dst}/lib/\"\n  FileUtils.mv \"#{dst}/extconf.rb.crystax\", \"#{dst}/extconf.rb\"\nend\n\n\n# def build_libffi(installdir)\n#   Logger.log_msg \"= building libffi\"\n#   raise \"libffi required only for windows\" unless Common.target_os == 'windows'\n#   # check version\n#   srcdir = \"#{Common::VENDOR_DIR}/libffi\"\n#   libver = File.read(\"#{srcdir}/doc/version.texi\").split(\"\\n\")[3].split(' ')[2]\n#   if libver != Crystax::VERSIONS['libffi']\n#     raise \"bad libffi version: repository: #{libver}; expected: #{Crystax::VERSIONS['libffi']}\"\n#   end\n#   # copy sources\n#   FileUtils.cp_r srcdir, Common::BUILD_BASE\n#   #\n#   builddir = \"#{Common::BUILD_BASE}/libffi\"\n#   FileUtils.cd(builddir) do\n#     # apply patch from ruby sources\n#     Commander.run \"patch -p1 < #{Common::VENDOR_DIR}/ruby/ext/fiddle/win32/libffi-3.2.1-mswin.patch\"\n#     # confgure\n#     Commander::run \"./autogen.sh\"\n#     env = { 'CC' => Builder.cc,\n#             'CFLAGS' => Builder.cflags,\n#             'PATH' => Builder.toolchain_path_and_path\n#           }\n#     args = [\"--prefix=#{installdir}\",\n#             \"--host=#{Builder.configure_host}\",\n#             \"--disable-shared\"\n#            ]\n#     Commander.run env, \"./configure #{args.join(' ')}\"\n#     # build and install\n#     # libffi 'make check' requires DejaGNU installed so we do not run it\n#     Commander.run env, \"make -j #{Common::num_jobs}\"\n#     Commander.run env, \"make install\"\n#   end\n#   FileUtils.cp_r \"#{installdir}/lib/libffi-#{Crystax.version('libffi')}/include\", \"#{installdir}/\"\n#   ilib = Common.target_cpu == 'x86' ? 'lib32' : 'lib'\n#   FileUtils.rm \"#{installdir}/#{ilib}/libffi.la\"\n# end\n\n\ndef install_gems(options, install_dir, *gems)\n  args = [\"--no-document\", \"--bindir #{install_dir}/bin\"]\n  env = { 'GEM_HOME' => \"#{install_dir}/lib/ruby/gems/2.2.0\",\n          'GEM_PATH' => \"#{install_dir}/lib/ruby/gems/2.2.0\",\n          'SSL_CERT_FILE' => Common.host_ssl_cert_file(options.host_os)\n        }\n  Commander.run env, \"gem install -V --backtrace #{gems.join(' ')} #{args.join(' ')}\"\nend\n\n# by default windres included with 64bit gcc toolchain (mingw) generates 64-bit obj files\n# we need to provide '-F pe-i386' to windres to generate 32bit output\ndef fix_winres_params\n  file = 'GNUmakefile'\n  lines = []\n  replaced = false\n  File.foreach(file) do |l|\n    if not l.start_with?('WINDRES = ')\n      lines << l\n    else\n      lines << l.gsub('windres ', 'windres -F pe-i386 ')\n      replaced = true\n    end\n  end\n\n  raise \"not found WINDRES line in GNUmakefile\" unless replaced\n\n  File.open(file, 'w') { |f| f.puts lines }\nend\n\n\nbegin\n  options = Common.parse_build_options(PKG_NAME)\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_build_msg PKG_NAME, options.target_platform\n\n  release, paths, archive, formula = Common.make_build_data(PKG_NAME, options)\n\n  if Cache.try?(archive) and !options.force?\n    Logger.log_msg \"= using cached file: #{archive}\"\n  else\n    # if Common.target_os == 'windows'\n    #   libsdir = \"#{Common::BUILD_BASE}/libs\"\n    #   FileUtils.mkdir_p([Common::BUILD_BASE, \"#{libsdir}/lib\", \"#{libsdir}/include\"])\n    #   build_libffi(libsdir)\n    # end\n    paths[:zlib]    = Builder.build_zlib    options, paths\n    paths[:openssl] = Builder.build_openssl options, paths\n    paths[:libssh2] = Builder.build_libssh2 options, paths\n    paths[:libgit2] = Builder.build_libgit2 options, paths\n\n    Logger.log_msg \"= building #{archive}; args: #{ARGV}\"\n    check_version paths[:src], release.version\n    Builder.copy_sources paths[:src], paths[:build_base]\n    copy_rugged paths[:build]\n    FileUtils.cd(paths[:build]) do\n      zlib_dir    = paths[:zlib]\n      openssl_dir = paths[:openssl]\n      libssh2_dir = paths[:libssh2]\n      libgit2_dir = paths[:libgit2]\n      #\n      cflags  = \"#{Builder.cflags(options)}  -I#{zlib_dir}/include\"\n      ldflags = \"-L#{libssh2_dir}/lib -L#{libgit2_dir}/lib -L#{zlib_dir}/lib\"\n      if options.target_os != 'windows'\n        libs = '-lz -lgit2 -lssh2 -lz'\n      else\n        # cflags  += \" -I#{libsdir}/include -g\"\n        # ldflags += \" -L#{libsdir}/lib -g\"\n        libs     = \"#{zlib_dir}/lib/libz.a #{libgit2_dir}/lib/libgit2.a #{libssh2_dir}/lib/libssh2.a #{zlib_dir}/lib/libz.a\"\n      end\n      env = { 'CC' => Builder.cc(options),\n              'CFLAGS' => cflags,\n              'LDFLAGS' => ldflags,\n              'DESTDIR' => paths[:install],\n              'LIBS' => libs,\n              'RUGGED_CFLAGS' => \"#{cflags} -DRUBY_UNTYPED_DATA_WARNING=0 -I#{openssl_dir}/include -I#{libssh2_dir}/include -I#{libgit2_dir}/include\",\n              'RUGGED_MAKEFILE' => \"#{paths[:build]}/ext/rugged/Makefile\",\n              'PATH' => Builder.toolchain_path_and_path(options),\n              'SSL_CERT_FILE' => Common.host_ssl_cert_file(options.host_os)\n            }\n      args = [\"--prefix=/\",\n              \"--host=#{Builder.configure_host(options)}\",\n              \"--disable-install-doc\",\n              \"--enable-load-relative\",\n              \"--with-openssl-dir=#{openssl_dir}\",\n              \"--with-static-linked-ext\",\n              \"--without-gmp\",\n              \"--without-tk\",\n              \"--without-gdbm\",\n              \"--enable-bundled-libyaml\"\n             ]\n      Commander.run \"autoconf\"\n      Commander.run env, \"./configure #{args.join(' ')}\"\n      fix_winres_params if options.target_platform == 'windows'\n      Commander.run env, \"make -j #{options.num_jobs} V=1\"\n      Commander.run env, \"make check\" unless options.no_check?\n      Commander.run env, \"make install\"\n      # remove unneeded files before packaging\n      FileUtils.cd(paths[:install]) do\n        FileUtils.rm_rf(['include', 'share'])\n        FileUtils.rm_rf([File.join('lib', 'pkgconfig'), File.join('lib', 'libruby-static.a')])\n        FileUtils.rm_rf([File.join('lib', 'ruby', 'site_ruby'), File.join('lib', 'ruby', 'vendor_ruby')])\n      end\n      # add properties file\n      Common.write_properties paths[:install], release\n    end\n\n    install_gems options, paths[:install], 'rspec', 'minitest'\n\n    platform_sym = options.target_platform_as_sym\n    release.shasum = { platform_sym => Cache.add(archive, paths[:build_base]) }\n    Common.update_release_shasum formula.path, release, platform_sym if options.update_sha256_sums?\n  end\n\n  if options.same_platform?\n    Cache.unpack(archive, Common::NDK_DIR)\n    Common.write_active_file(Common::NDK_DIR, options.host_platform, PKG_NAME, release)\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nelse\n  FileUtils.rm_rf paths[:build_base] unless options.no_clean?\nend\n"
  },
  {
    "path": "build/scripts/build-xz",
    "content": "#!/usr/bin/env ruby\n#\n# Build XZ Utils to use them with Crystax NDK\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire 'json'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\nrequire_relative 'builder.rb'\nrequire_relative 'cache.rb'\n\n\nPKG_NAME = 'xz'\n\n\n#\ndef check_version(srcdir, version)\n  major, minor, patch = nil\n  File.readlines(\"#{srcdir}/src/liblzma/api/lzma/version.h\").each do |line|\n    case line\n    when /^#define LZMA_VERSION_MAJOR/\n      major = line.split(' ')[2]\n    when /^#define LZMA_VERSION_MINOR/\n      minor = line.split(' ')[2]\n    when /^#define LZMA_VERSION_PATCH/\n      patch = line.split(' ')[2]\n    end\n  end\n\n  raise \"failed to parse version.h: major was not set\" if !major\n  raise \"failed to parse version.h: minor was not set\" if !minor\n  raise \"failed to parse version.h: patch was not set\" if !patch\n\n  srcver = \"#{major}.#{minor}.#{patch}\"\n  raise BadVersion.new(PKG_NAME, srcver, version) unless srcver == version\nend\n\n\ndef gettetx_path\n  v = (`brew list --versions gettext`).split(' ')\n  raise \"failed to find gettext version: #{v}\" unless v.size == 2 and v[0] == 'gettext'\n  \"/usr/local/Cellar/gettext/#{v[1]}/bin\"\nend\n\n\nbegin\n  options = Common.parse_build_options PKG_NAME\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_build_msg PKG_NAME, options.target_platform\n\n  release, paths, archive, formula = Common.make_build_data PKG_NAME, options\n\n  if Cache.try?(archive) and !options.force?\n    Logger.log_msg \"= using cached file: #{archive}\"\n  else\n    Logger.log_msg \"= building #{archive}; args: #{ARGV}\"\n    check_version paths[:src], release.version\n    Builder.copy_sources paths[:src], paths[:build_base]\n    FileUtils.mkdir_p(paths[:install])\n    prefix = Pathname.new(paths[:install]).realpath\n    FileUtils.cd(paths[:build]) do\n      env = { 'CC'     => Builder.cc(options),\n              'CFLAGS' => Builder.cflags(options),\n              'LANG'   => 'C',\n            }\n      case options.target_os\n      when 'darwin'\n        env['PATH'] = \"#{gettetx_path}:#{ENV['PATH']}\"\n      when 'windows'\n        env['PATH'] = Builder.toolchain_path_and_path(options)\n        env['RC'] = \"x86_64-w64-mingw32-windres -F pe-i386\" if options.target_cpu == 'x86'\n      end\n      Commander.run env, \"./autogen.sh\"\n      args = [\"--prefix=#{prefix}\",\n              \"--host=#{Builder.configure_host(options)}\",\n              \"--disable-nls\",\n              \"--disable-xzdec\",\n              \"--disable-lzmadec\",\n              \"--disable-lzmainfo\",\n              \"--disable-lzma-links\",\n              \"--disable-scripts\",\n              \"--disable-doc\",\n              \"--disable-shared\",\n              \"--with-sysroot\"\n             ]\n      Commander.run env, \"./configure #{args.join(' ')}\"\n      Commander.run env, \"make -j #{options.num_jobs}\"\n      Commander.run env, \"make check\" unless options.no_check?\n      Commander.run env, \"make install\"\n      # remove unneeded files before packaging\n      FileUtils.cd(prefix) { FileUtils.rm_rf ['bin/unxz', 'bin/xzcat', 'lib/liblzma.la', 'lib/pkgconfig', 'share'] }\n      # add properties file\n      Common.write_properties prefix, release\n    end\n\n    platform_sym = options.target_platform_as_sym\n    release.shasum = { platform_sym => Cache.add(archive, paths[:build_base]) }\n    Common.update_release_shasum formula.path, release, platform_sym if options.update_sha256_sums?\n  end\n\n  if options.same_platform?\n    Cache.unpack(archive, Common::NDK_DIR)\n    Common.write_active_file(Common::NDK_DIR, options.host_platform, PKG_NAME, release)\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nelse\n  FileUtils.rm_rf paths[:build_base] unless options.no_clean?\nend\n"
  },
  {
    "path": "build/scripts/builder.rb",
    "content": "#\n# Common builder funtions\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire_relative 'exceptions.rb'\nrequire_relative 'common.rb'\nrequire_relative 'cache.rb'\nrequire_relative 'commander.rb'\nrequire_relative 'logger.rb'\n\n\nclass Builder\n\n  MACOSX_VERSION_MIN = '10.6'\n\n  def self.cc(options)\n    case options.target_os\n    when 'darwin'\n      # todo: builds ruby with not working psych library (gem install fails)\n      # File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/clang/darwin-x86/host/x86_64-apple-darwin-3.7.0/bin/clang\")\n      'clang'\n    when 'linux'\n      File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin/x86_64-linux-gcc\")\n    when 'windows'\n      File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/x86_64-w64-mingw32-gcc\")\n    else\n      raise UnknownTargetOS, options.target_os, caller\n    end\n  end\n\n  def self.cxx(options)\n    case options.target_os\n    when 'darwin'\n      # todo: builds ruby with not working psych library (gem isntall fails)\n      File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/clang/darwin-x86/host/x86_64-apple-darwin-3.7.0/bin/clang++\")\n    when 'linux'\n      File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin/x86_64-linux-g++\")\n    when 'windows'\n      File.join(Common::NDK_ROOT_DIR, \"platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/x86_64-w64-mingw32-g++\")\n    else\n      raise UnknownTargetOS, options.target_os, caller\n    end\n  end\n\n  def self.cflags(options)\n    case options.target_platform\n    when 'darwin-x86_64'\n      \"-isysroot#{Common::NDK_ROOT_DIR}/platform/prebuilts/sysroot/darwin-x86/MacOSX10.6.sdk \" \\\n      \"-mmacosx-version-min=#{MACOSX_VERSION_MIN} \" \\\n      \"-m64\"\n    when 'darwin-x86'\n      \"-isysroot#{Common::NDK_ROOT_DIR}/platform/prebuilts/sysroot/darwin-x86/MacOSX10.6.sdk \" \\\n      \"-mmacosx-version-min=#{MACOSX_VERSION_MIN} \" \\\n      \"-m32\"\n    when 'linux-x86_64'\n      \"--sysroot=#{Common::NDK_ROOT_DIR}/\" \\\n      \"platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/sysroot \"\n    when 'linux-x86'\n      \"--sysroot=#{Common::NDK_ROOT_DIR}/\" \\\n      \"platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/sysroot \" \\\n      \"-m32\"\n    when 'windows-x86_64'\n      '-m64'\n    when 'windows'\n      '-m32'\n    else\n      raise UnknownTargetPlatform, options.target_platform, caller\n    end\n  end\n\n  def self.toolchain_path_and_path(options)\n    case options.target_os\n    when 'windows'\n      #\"platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/bin\"\n      \"#{Common::NDK_ROOT_DIR}/\" \\\n      \"platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin\" \\\n      \":#{ENV['PATH']}\"\n    when 'linux', 'darwin'\n      '/bin:/usr/bin:/sbin:/usr/sbin'\n    else\n      raise UnknownTargetPlatform, options.target_os, caller\n    end\n  end\n\n  def self.configure_host(options)\n    case options.target_platform\n    when 'darwin-x86_64'\n      'x86_64-darwin10'\n    when 'darwin-x86'\n      'i686-darwin10'\n    when 'linux-x86_64'\n      'x86_64-linux'\n    when 'linux-x86'\n      'i686-linux'\n    when 'windows-x86_64'\n      #'x86_64-mingw64'\n      'x86_64-w64-mingw32'\n    when 'windows'\n      #'mingw32'\n      'x86_64-w64-mingw32'\n    else\n      raise UnknownTargetPlatform, options.target_platform, caller\n    end\n  end\n\n  def self.prepare_dependency(name)\n    Logger.log_msg \"= preparing #{name}\"\n    unpackdir = \"#{Common::NDK_BUILD_DIR}/#{name}\"\n    FileUtils.mkdir_p(unpackdir)\n    arch = Common.make_archive_name(name)\n    Cache.unpack(arch, unpackdir)\n    @@dependencies << name\n    \"#{unpackdir}/#{Common.prebuilt_dir}\"\n  end\n\n  def self.copy_sources(srcdir, dstdir)\n    pkgname = File.basename(srcdir)\n    FileUtils.rm_rf File.join(dstdir, pkgname)\n    FileUtils.mkdir_p dstdir unless Dir.exists?(dstdir)\n    FileUtils.cp_r srcdir, dstdir\n  end\n\n  def self.build_zlib(options, paths)\n    # todo: check for cached package\n    Logger.log_msg \"= building zlib for #{options.target_platform}\"\n    prepare_sources 'zlib', paths[:build_base]\n    build_dir = File.join(paths[:build_base], 'zlib.build')\n    install_dir = File.join(paths[:build_base], 'zlib')\n    FileUtils.cd(build_dir) do\n      if options.target_os == 'windows'\n        fname = 'win32/Makefile.gcc'\n        text = File.read(fname).gsub(/^PREFIX/, '#PREFIX')\n        File.open(fname, \"w\") {|f| f.puts text }\n        # chop 'gcc' from the end of the string\n        env = { 'PREFIX' => cc(options).chop.chop.chop }\n        loc = options.target_cpu == 'x86' ? 'LOC=-m32' : 'LOC=-m64'\n        Commander::run env, \"make -j #{options.num_jobs} #{loc} -f win32/Makefile.gcc libz.a\"\n        FileUtils.mkdir_p [\"#{install_dir}/lib\", \"#{install_dir}/include\"]\n        FileUtils.cp 'libz.a', \"#{install_dir}/lib/\"\n        FileUtils.cp ['zlib.h', 'zconf.h'], \"#{install_dir}/include/\"\n      else\n        env = { 'CC' => cc(options),\n                'CFLAGS' => cflags(options)\n              }\n        args = [\"--prefix=#{install_dir}\",\n                \"--static\"\n               ]\n        Commander::run env, \"./configure #{args.join(' ')}\"\n        Commander::run env, \"make -j #{options.num_jobs}\"\n        Commander::run env, \"make check\" unless options.no_check?\n        Commander::run env, \"make install\"\n        FileUtils.rm_rf [\"#{install_dir}/share\", \"#{install_dir}/lib/pkgconfig\"]\n      end\n    end\n\n    # todo: cache package\n    install_dir\n  end\n\n  def self.build_openssl(options, paths)\n    # todo:\n    # if Cache.try?(archive, :nounpack)\n    #   Logger.msg \"done\"\n    #   exit 0\n    # end\n    Logger.log_msg \"= building openssl for #{options.target_platform}\"\n    prepare_sources 'openssl', paths[:build_base]\n    build_dir   = File.join(paths[:build_base], 'openssl.build')\n    install_dir = File.join(paths[:build_base], 'openssl')\n    FileUtils.cd(build_dir) do\n      zlib_dir = paths[:zlib]\n      env = { 'CC' => cc(options) }\n      args = [\"--prefix=#{install_dir}\",\n              \"no-idea\",\n              \"no-mdc2\",\n              \"no-rc5\",\n              \"no-shared\",\n              \"zlib\",\n              openssl_platform(options.target_platform),\n              cflags(options),\n              \"-I#{zlib_dir}/include\",\n              \"-L#{zlib_dir}/lib\",\n              \"-lz\"\n             ]\n      Commander::run env, \"./Configure #{args.join(' ')}\"\n      Commander::run \"make depend\"\n      Commander::run \"make\" # -j N breaks build on OS X\n      Commander::run \"make test\" unless options.no_check?\n      Commander::run \"make install\"\n    end\n\n    # todo:\n    #Cache.add(archive)\n\n    install_dir\n  end\n\n  def self.build_libssh2(options, paths)\n    # todo:\n    # if Cache.try?(archive)\n    #   Logger.msg \"done\"\n    #   exit 0\n    # end\n    Logger.log_msg \"= building libssh2 for #{options.target_platform}\"\n    build_base_dir = paths[:build_base]\n    prepare_sources 'libssh2', build_base_dir\n    #\n    build_dir = File.join(build_base_dir, 'libssh2.build')\n    install_dir = File.join(build_base_dir, 'libssh2')\n    #\n    FileUtils.cd(build_dir) do\n      Commander.run \"./buildconf\"\n      zlib_dir    = paths[:zlib]\n      openssl_dir = paths[:openssl]\n      env = { 'CC'      => cc(options),\n              'CFLAGS'  => \"#{cflags(options)} -I#{openssl_dir}/include -I#{zlib_dir}/include\",\n              'LDFLAGS' => \"-L#{openssl_dir}/lib -L#{zlib_dir}/lib -lz\",\n              'DESTDIR' => install_dir,\n              'PATH'    => '/bin:/usr/bin:/sbin:/usr/sbin'\n            }\n      case options.target_os\n      when 'windows'\n        env['LIBS'] = \"-lgdi32\"\n      when 'linux'\n        env['LIBS'] = \"-ldl\"\n      end\n      args = [\"--prefix=/\",\n              \"--host=#{configure_host(options)}\",\n              \"--disable-shared\",\n              \"--disable-examples-build\",\n              \"--with-libssl-prefix=#{openssl_dir}\",\n              \"--with-libz=#{zlib_dir}\"\n             ]\n      Commander::run env, \"./configure #{args.join(' ')}\"\n      Commander::run env, \"make -j #{options.num_jobs}\"\n      Commander::run env, \"make check\" unless options.no_check?\n      Commander::run env, \"make install\"\n    end\n    # todo:\n    # Cache.add(archive)\n\n    install_dir\n  end\n\n  def self.build_libgit2(options, paths)\n    # todo:\n    # if Cache.try?(archive)\n    #   Logger.msg \"done\"\n    #   exit 0\n    # end\n    Logger.log_msg \"= building libgit2 for #{options.target_platform}\"\n    build_base_dir = paths[:build_base]\n    prepare_sources 'libgit2', build_base_dir\n    #\n    build_dir = File.join(build_base_dir, 'libgit2.build')\n    install_dir = File.join(build_base_dir, 'libgit2')\n    #\n    FileUtils.cd(build_dir) do\n      zlib_dir    = paths[:zlib]\n      openssl_dir = paths[:openssl]\n      libssh2_dir = paths[:libssh2]\n      env = { 'CC' => cc(options),\n              'EXTRA_CFLAGS' => \"#{cflags(options)}\",\n              'EXTRA_DEFINES' => \"-DGIT_SSL -DOPENSSL_SHA1 -DGIT_SSH\",\n              'EXTRA_INCLUDES' => \"-I#{zlib_dir}/include -I#{openssl_dir}/include -I#{libssh2_dir}/include\",\n              'PATH' => '/bin:/usr/bin:/sbin:/usr/sbin'\n            }\n      mingw_flag = (options.target_os) == 'windows' ? \"MINGW=1\" : ''\n      Commander.run env, \"make -f Makefile.crystax #{mingw_flag}\"\n      FileUtils.mkdir_p [\"#{install_dir}/lib\", \"#{install_dir}/include\"]\n      FileUtils.cp \"./libgit2.a\", \"#{install_dir}/lib/\"\n      FileUtils.cp \"./include/git2.h\", \"#{install_dir}/include/\"\n      FileUtils.cp_r \"./include/git2\", \"#{install_dir}/include/\"\n    end\n\n    # todo:\n    #Cache.add(archive)\n\n    install_dir\n  end\n\n  private\n\n  def self.prepare_sources(pkgname, build_base_dir)\n    copy_sources File.join(Common::VENDOR_DIR, pkgname), build_base_dir\n    build_dir = \"#{pkgname}.build\"\n    FileUtils.cd(build_base_dir) do\n      FileUtils.rm_rf build_dir\n      FileUtils.mv pkgname, build_dir\n    end\n  end\n\n  def self.openssl_platform(platform)\n    case platform\n    when 'darwin-x86_64'  then 'darwin64-x86_64-cc'\n    when 'darwin-x86'     then 'darwin-i386-cc'\n    when 'linux-x86_64'   then 'linux-x86_64'\n    when 'linux-x86'      then 'linux-generic32'\n    when 'windows-x86_64' then 'mingw64'\n    when 'windows'        then 'mingw'\n    else\n      raise UnknownTargetPlatform, platform, caller\n    end\n  end\nend\n"
  },
  {
    "path": "build/scripts/cache.rb",
    "content": "#\n# Build OpenSSL libraries to use it to build Crystax NDK utilities\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire 'digest'\nrequire_relative 'common.rb'\nrequire_relative 'logger.rb'\nrequire_relative 'commander.rb'\n\n\nmodule Cache\n  PATH = \"/var/tmp/ndk-cache-#{ENV['USER']}\"\n  ARCH_DIR = 'prebuilt'\n\n  def self.full_path(archive)\n    File.join(PATH, archive)\n  end\n\n  def self.try?(archive)\n    exists?(archive) ? true : false\n  end\n\n  def self.exists?(archive)\n    File.exists? File.join(PATH, archive)\n  end\n\n  def self.unpack(archive, dstdir)\n    Commander::run \"tar -C #{dstdir} -xf #{File.join(PATH, archive)}\"\n  end\n\n  def self.add(archive, buildbase)\n    file = File.join(PATH, archive)\n    FileUtils.rm_rf file\n    FileUtils.cd(buildbase) { Commander::run \"tar -Jcf #{file} #{ARCH_DIR}\" }\n    Digest::SHA256.hexdigest(File.read(file, mode: \"rb\"))\n  end\nend\n"
  },
  {
    "path": "build/scripts/commander.rb",
    "content": "#\n# Build OpenSSL libraries to use it to build Crystax NDK utilities\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'open3'\nrequire_relative 'logger.rb'\nrequire_relative 'exceptions.rb'\n\n\nmodule Commander\n\n  def self.run(*cmd)\n    if cmd[0].class != Hash\n      Logger.log_msg \"  command started: #{cmd}\"\n    else\n      Logger.log_msg \"  command started: #{cmd.slice(1, cmd.size)}\"\n      Logger.log_msg \"              env: #{cmd[0]}\"\n    end\n\n    exitstatus = nil\n\n    Open3.popen2e(*cmd) do |_, output, waitthr|\n      ot = Thread.start do\n        str = ''\n        while c = output.getc\n          if \"#{c}\" != \"\\n\"\n            str += \"#{c}\"\n          else\n            Logger.file_msg str\n            str = ''\n          end\n        end\n      end\n\n      ot.join\n\n      exitstatus = waitthr && waitthr.value.exitstatus\n    end\n\n    Logger.log_msg \"  command finished: exit code: #{exitstatus} cmd: #{cmd}\"\n    raise CommandFailed.new(cmd, exitstatus) if exitstatus != 0\n  end\nend\n"
  },
  {
    "path": "build/scripts/common.rb",
    "content": "#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\n\nrequire 'pathname'\nrequire 'fileutils'\nrequire_relative 'options.rb'\n\n\nclass Common\n\n  CREW_UTILS = ['curl', 'xz', 'libarchive', 'ruby']\n\n  NDK_ROOT_DIR = Pathname.new(__FILE__).realpath.dirname.dirname.dirname.dirname.dirname.to_s\n\n  NDK_DIR        = \"#{NDK_ROOT_DIR}/platform/ndk\"\n  VENDOR_DIR     = \"#{NDK_ROOT_DIR}/vendor\"\n  CREW_DIR       = \"#{NDK_ROOT_DIR}/crew\"\n  BUILD_BASE_DIR = \"/tmp/ndk-#{ENV['USER']}/crew\"\n\n  FileUtils.mkdir_p \"#{NDK_DIR}/prebuilt/#{Options.host_platform}/crew\"\n\n  require \"#{Common::CREW_DIR}/library/formula.rb\"\n  require \"#{Common::CREW_DIR}/library/formulary.rb\"\n  require \"#{Common::CREW_DIR}/library/utility.rb\"\n\n  def self.parse_build_options(pkgname)\n    # set default values for build options\n    options = Options.new\n\n    # parse command line args\n    ARGV.each do |opt|\n      case opt\n      when /^--target-os=(\\w+)/\n       options.target_os = $1\n      when /^--target-cpu=(\\w+)/\n        options.target_cpu = $1\n      when /^--num-jobs=(\\d+)/\n        options.num_jobs = $1\n      when '--no-clean'\n        options.no_clean = true\n      when '--no-check'\n        options.no_check = true\n      when '--force'\n        options.force = true\n      when '--dont-update-sha256-sums'\n        options.update_sha256_sums = false\n      when /^--log-file=(\\S+)/\n        options.log_file = $1\n        # explicit log-file options implies log-rename disabling\n        options.rename_log = false\n      when '--verbose'\n        options.verbose = true\n      when '--help'\n        show_build_help options, pkgname\n        exit 1\n      else\n        raise \"unknown option: #{opt}\"\n      end\n    end\n\n    options.log_file = default_build_logfile_name(options, pkgname) unless options.log_file\n    # enforce no-check for cross builds\n    options.no_check = options.target_os != options.host_os unless options.no_check?\n\n    options\n  end\n\n  def self.parse_install_options\n    # set default values for build options\n    options = Options.new\n    options.out_dir = NDK_DIR\n\n    # parse command line args\n    ARGV.each do |opt|\n      case opt\n      when /^--target-os=(\\w+)/\n       options.target_os = $1\n      when /^--target-cpu=(\\w+)/\n        options.target_cpu = $1\n      when /^--log-file=(\\S+)/\n        options.log_file = $1\n        # explicit log-file options implies log-rename disabling\n        options.rename_log = false\n      when /^--out-dir=(\\S+)/\n       options.out_dir = $1\n      when '--verbose'\n        options.verbose = true\n      when '--help'\n        show_install_help options\n        exit 1\n      else\n        raise \"unknown option: #{opt}\"\n      end\n    end\n\n    raise \"out-dir must be specified\" unless options.out_dir\n\n    options.log_file = default_install_logfile_name(options) unless options.log_file\n\n    options\n  end\n\n  def self.make_build_data(pkgname, options)\n    release, formula = formula_data(pkgname)\n    paths = make_paths(pkgname, release, options)\n    FileUtils.rm_rf paths[:build_base]\n    archive = make_archive_name(pkgname, release, options.target_platform)\n    [release, paths, archive, formula]\n  end\n\n  def self.make_archive_base(pkgname, release)\n    \"crew-#{pkgname}-#{Formula.package_version(release)}\"\n  end\n\n  def self.make_archive_name(pkgname, release, platform)\n    \"#{make_archive_base(pkgname, release)}-#{platform}.tar.xz\"\n  end\n\n  def self.host_ssl_cert_file(os)\n    case os\n    when 'darwin'\n      '/usr/local/etc/openssl/osx_cert.pem'\n    when 'linux'\n      '/etc/ssl/certs/ca-certificates.crt'\n    else\n      raise \"unknown host OS: #{host_os}\"\n    end\n  end\n\n  def self.write_properties(dir, release)\n    props = {crystax_version: release.crystax_version}\n    File.open(File.join(dir, Formula::PROPERTIES_FILE), 'w') { |f| f.puts props.to_json }\n  end\n\n  def self.write_active_file(out_dir, platform, uname, release)\n    path = File.join(out_dir, 'prebuilt', platform, 'crew', uname, Global::ACTIVE_UTIL_FILE)\n    File.open(path, 'w') { |f| f.puts release.to_s }\n  end\n\n  def self.update_release_shasum(formula_file, release, platform)\n    ver = release.version\n    cxver = release.crystax_version\n    sum = release.shasum(platform)\n    release_regexp = /^[[:space:]]*release[[:space:]]+version:[[:space:]]+'#{ver}',[[:space:]]+crystax_version:[[:space:]]+#{cxver}/\n    platform_regexp = /#{platform}:/\n    lines = []\n    state = :copy\n    File.foreach(formula_file) do |l|\n      case state\n      when :updated\n        lines << l\n      when :copy\n        if  l !~ release_regexp\n          lines << l\n        else\n          if l !~ platform_regexp\n            state = :updating\n            lines << l\n          else\n            state = :updated\n            lines << l.gsub(/'[[:xdigit:]]+'/, \"'#{sum}'\")\n          end\n        end\n      when :updating\n        if l !~ platform_regexp\n          lines << l\n        else\n          state = :updated\n          lines << l.gsub(/'[[:xdigit:]]+'/, \"'#{sum}'\")\n        end\n      else\n        raise \"in formula #{File.basename(formula_file)} bad state #{state} on line: #{l}\"\n      end\n    end\n\n    File.open(formula_file, 'w') { |f| f.puts lines }\n  end\n\n  def self.formula_data(name)\n    path = \"#{CREW_DIR}/formula/utilities/#{name}.rb\"\n    formula = Formulary.klass(path).new(path, :no_active_file)\n    release = formula.releases.last\n    [release, formula]\n  end\n\n  private\n\n  def self.show_build_help(options, pkgname)\n    puts \"Usage: #{$PROGRAM_NAME} [OPTIONS]\\n\"                                              \\\n         \"where OPTIONS are:\\n\"                                                             \\\n         \"  --target-os=STR   set target OS; one of linux, darwin, windows;\\n\"              \\\n         \"                    default #{options.host_os}\\n\"                                 \\\n         \"  --target-cpu=STR  set target CPU; one of x86_64, x86;\\n\"                        \\\n         \"                    default #{options.host_cpu}\\n\"                                \\\n         \"  --num-jobs=N      specifies the number of make's jobs to run simultaneously;\\n\" \\\n         \"                    default #{options.num_jobs}\\n\"                                \\\n         \"  --no-clean        do not remove temporary files\\n\"                              \\\n         \"  --no-check        do not run make check or make test\\n\"                         \\\n         \"  --force           do not check cache, force build\\n\"                            \\\n         \"  --dont-update-sha256-sums\\n\"                                                    \\\n         \"                    do not update sha256 sum in the utility's formula\\n\"          \\\n         \"  --log-file=NAME   set log filename\\n\"                                           \\\n         \"                    default #{default_build_logfile_name(options, pkgname)}\\n\"    \\\n         \"  --verbose         output more info to console\\n\"                                \\\n         \"  --help            show this message and exit\\n\"\n  end\n\n  def self.show_install_help(options)\n    puts \"Usage: #{$PROGRAM_NAME} [OPTIONS]\\n\"                                             \\\n         \"where OPTIONS are:\\n\"                                                            \\\n         \"  --target-os=STR      set target OS; one of linux, darwin, windows;\\n\"          \\\n         \"                       default #{options.host_os}\\n\"                             \\\n         \"  --target-cpu=STR     set target CPU; one of x86_64, x86;\\n\"                    \\\n         \"                       default #{options.host_cpu}\\n\"                            \\\n         \"  --log-file=NAME      set log filename\\n\"                                       \\\n         \"                       default #{default_install_logfile_name(options)}\\n\"       \\\n         \"  --out-dir=NAME       set output directory; crew utilities will be installed\\n\" \\\n         \"                       into that directory;\\n\"                                   \\\n         \"                       default #{options.out_dir}\\n\"                             \\\n         \"  --verbose            output more info to console\\n\"                            \\\n         \"  --help               show this message and exit\\n\"\n  end\n\n  def self.make_paths(pkgname, release, options)\n    pkgver = Formula.package_version(release)\n    prebuilt = \"prebuilt/#{options.target_platform}\"\n\n    { src:        \"#{VENDOR_DIR}/#{pkgname}\",\n      build_base: \"#{BUILD_BASE_DIR}/#{pkgname}\",\n      build:      \"#{BUILD_BASE_DIR}/#{pkgname}/#{pkgname}\",\n      prebuilt:   \"#{NDK_DIR}/#{prebuilt}\",\n      install:    \"#{BUILD_BASE_DIR}/#{pkgname}/#{prebuilt}/crew/#{pkgname}/#{pkgver}\"\n    }\n  end\n\n  def self.default_build_logfile_name(options, pkgname)\n    \"#{BUILD_BASE_DIR}/build-#{pkgname}-#{options.target_platform}.log\"\n  end\n\n  def self.default_install_logfile_name(options)\n    \"#{BUILD_BASE_DIR}/install-crew-utils-#{options.target_platform}.log\"\n  end\nend\n"
  },
  {
    "path": "build/scripts/exceptions.rb",
    "content": "#!/usr/bin/env ruby\n#\n# Build OpenSSL libraries to use it to build Crystax NDK utilities\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\n\nclass CommandFailed < RuntimeError\n  def initialize(cmd, exitstatus)\n    super \"command failed:  #{@cmd}\\n   exit status:  #{@exitstatus}\\n\"\n  end\nend\n\n\nclass UnknownTargetPlatform < RuntimeError\n  def initialize(platform)\n    super \"unknown target platform #{@platform}\"\n  end\nend\n\n\nclass UnknownTargetOS < RuntimeError\n  def initialize(os)\n    super \"unknown target OS #{@os}\"\n  end\nend\n\n\nclass BadVersion < RuntimeError\n  def initialize(pkgname, srcver, expver)\n    super \"bad #{pkgname} version: repository: #{srcver}; expected: #{expver}\"\n  end\nend\n"
  },
  {
    "path": "build/scripts/install-crew",
    "content": "#!/usr/bin/env ruby\n#\n# Install CREW\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire_relative 'commander.rb'\nrequire_relative 'logger.rb'\n\n\nUSAGE_STR = <<-EOS\nUsage: #{$PROGRAM_NAME} [OPTIONS]\nwhere OPTIONS are:\n  --out-dir=STR    destination dir, as defined in package-release.sh build script\n  --log-file=STR   log filename; default value is taken from environment\n                   variable 'TMPLOG' or 'NDK_LOGFILE'\n  --verbose        output more info to console\n  --help           output this message and exit\nEOS\n\n\nCREW_URL    = ENV['CREW_DEVEL_URL']    || 'https://github.com/crystax/android-crew.git'\nCREW_BRANCH = ENV['CREW_DEVEL_BRANCH'] || 'master'\n\n\nbegin\n  out_dir = nil\n  logfile = ENV['TMPLOG'] || ENV['NDK_LOGFILE']\n  verbose = false\n\n  # parse command line options\n  ARGV.each do |arg|\n    case arg\n    when /^--out-dir=(\\S+)/\n      out_dir = $1\n    when /^--log-file=(\\S+)/\n      logfile = $1\n    when '--verbose'\n      verbose = true\n    when '--help'\n      puts USAGE_STR\n      exit 1\n    else\n      raise \"unknown option #{arg}\"\n    end\n  end\n\n  # test that all vars are set\n  raise \"use --out-dir=STR to set output dir\"    unless out_dir\n  raise \"use --log-file=STR to set log filename\" unless logfile\n\n  Logger.open_log_file logfile, false, verbose\n  Logger.msg \"Installing CREW\"\n  Logger.log_msg \"= using CREW URL:    #{CREW_URL}\"\n  Logger.log_msg \"= using CREW branch: #{CREW_BRANCH}\"\n\n  FileUtils.cd(out_dir) do\n    Commander.run \"git clone -b #{CREW_BRANCH} #{CREW_URL} crew\"\n    if CREW_BRANCH != 'master'\n      FileUtils.cd(\"#{out_dir}/crew\") { Commander.run \"git checkout -b master origin/#{CREW_BRANCH}\" }\n    end\n  end\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nend\n"
  },
  {
    "path": "build/scripts/install-crew-utils",
    "content": "#!/usr/bin/env ruby\n#\n# Install Crew Utilities\n#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'digest'\nrequire_relative 'common.rb'\nrequire_relative 'cache.rb'\nrequire_relative 'logger.rb'\nrequire \"#{Common::CREW_DIR}/library/utility.rb\"\n\n\nbegin\n  options = Common.parse_install_options\n\n  Logger.open_log_file options.log_file, options.rename_log?, options.verbose?\n  Logger.start_install_msg options.target_platform\n  Logger.log_msg \"= will install CREW utilities into directory: #{options.out_dir}\"\n  Logger.log_msg \"= using DOWLOAD_BASE: #{Global::DOWNLOAD_BASE}\"\n  Logger.log_msg \"= using target platform: #{options.target_platform}\"\n\n  path = File.dirname($0)\n\n  Common::CREW_UTILS.each do |name|\n    Logger.msg \"Install #{options.target_platform} #{name}\"\n    release, _, archive, formula = Common.make_build_data(name, options)\n    archive_path = Cache.full_path(archive)\n    if Cache.exists? archive\n      Logger.log_msg \"= using cached file: #{archive}\"\n    else\n      url = \"#{formula.download_base}/#{name}/#{archive}\"\n      Logger.log_msg \"= cached file not found\"\n      Logger.log_msg \"= try to download archive: #{url}\"\n      Commander.run \"curl #{url} -o #{archive_path} --silent --fail -L\"\n    end\n    Logger.log_msg \"= checking sha256 of the archive: #{archive_path}\"\n    if Digest::SHA256.hexdigest(File.read(archive_path, mode: \"rb\")) != release.shasum(options.target_platform_as_sym)\n      raise \"bad SHA256 sum of the #{archive} for #{name} release #{release}\"\n    end\n    Cache.unpack archive, options.out_dir\n    Common.write_active_file(options.out_dir, options.target_platform, name, release)\n  end\n\n  # copy ruby wrapper script to platform's bin directory\n  script = options.target_os == 'windows' ? 'ruby.cmd' : 'ruby'\n  script_tdir = \"#{options.out_dir}/prebuilt/#{options.target_platform}/bin/\"\n  FileUtils.mkdir_p script_tdir\n  FileUtils.cp \"#{path}/#{script}\", script_tdir\n\nrescue SystemExit => e\n  exit e.status\nrescue Exception => e\n  Logger.log_exception(e)\n  exit 1\nend\n"
  },
  {
    "path": "build/scripts/logger.rb",
    "content": "#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'fileutils'\nrequire_relative 'common.rb'\n\n\nclass Logger\n  def self.open_log_file(name, rename, verbose)\n    if File.exists?(name) and rename\n      rename_logfile(name)\n    else\n      dir = File.dirname(name)\n      FileUtils.mkdir_p(dir) unless Dir.exists?(dir)\n    end\n    @@log_file = File.open(name, 'a')\n    @@verbose = verbose\n  end\n\n  def self.start_build_msg(pkgname, platform)\n    msg \"Building #{pkgname} for #{platform}\"\n  end\n\n  def self.start_install_msg(platform)\n    msg \"Installing CREW utilities for #{platform}\"\n  end\n\n  def self.msg(msg)\n    puts msg\n    file_msg msg\n  end\n\n  def self.log_msg(msg)\n    file_msg msg\n    puts msg if @@verbose\n  end\n\n  def self.file_msg(msg)\n    @@log_file.puts msg if @@log_file\n  end\n\n  def self.log_exception(exc)\n    puts \"error: #{exc}\"\n    puts exc.backtrace\n    file_msg \"error: #{exc}\"\n    file_msg exc.backtrace\n  end\n\n  private\n\n  @@verbose = false\n  @@log_file = nil\n\n  def self.rename_logfile(name)\n    n = 1\n    n += 1 while File.exists?(\"#{name}.#{n}\")\n    File.rename(name, \"#{name}.#{n}\")\n  end\nend\n"
  },
  {
    "path": "build/scripts/options.rb",
    "content": "#\n# Copyright (c) 2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\n\nclass Options\n\n  attr_accessor :host_os, :host_cpu, :target_os, :target_cpu, :num_jobs, :log_file, :out_dir\n  attr_writer :no_clean, :no_check, :force, :verbose, :rename_log, :update_sha256_sums\n\n  def initialize\n    os, cpu = Options.get_host_platform\n    @host_os = os\n    @host_cpu = cpu\n    @target_os = os\n    @target_cpu = cpu\n    @num_jobs = '16'\n    @log_file = nil\n    @out_dir = nil\n    #\n    @no_clean = false\n    @no_check = false\n    @force = false\n    @verbose = false\n    @rename_log = true\n    @update_sha256_sums = true\n  end\n\n  def no_clean?\n    @no_clean\n  end\n\n  def no_check?\n    @no_check\n  end\n\n  def force?\n    @force\n  end\n\n  def verbose?\n    @verbose\n  end\n\n  def rename_log?\n    @rename_log\n  end\n\n  def update_sha256_sums?\n    @update_sha256_sums\n  end\n\n  def host_platform\n    \"#{host_os}-#{host_cpu}\"\n  end\n\n  def target_platform\n    (target_os == 'windows' and target_cpu == 'x86') ? 'windows' : \"#{target_os}-#{target_cpu}\"\n  end\n\n  def target_platform_as_sym\n    target_platform.gsub(/-/, '_').to_sym\n  end\n\n  def same_platform?\n    host_platform == target_platform\n  end\n\n  def self.host_platform\n    os, cpu = get_host_platform\n    \"#{os}-#{cpu}\"\n  end\n\n  private\n\n  def self.get_host_platform\n    h = RUBY_PLATFORM.split('-')\n    cpu = h[0]\n    case h[1]\n    when /linux/\n      os = 'linux'\n    when /darwin/\n      os = 'darwin'\n    else\n      raise \"unsupported host OS: #{h[1]}\"\n    end\n    [os, cpu]\n  end\nend\n"
  },
  {
    "path": "build/scripts/ruby",
    "content": "#!/bin/bash\n\nunset GEM_HOME\nunset GEM_PATH\n\ntools_dir=$(dirname $0)/..\nruby_ver=`cat $tools_dir/crew/ruby/active_version.txt`\nruby_dir=\"$tools_dir/crew/ruby/$ruby_ver/bin\"\n\nexec $ruby_dir/ruby \"$@\"\n"
  },
  {
    "path": "build/scripts/ruby.cmd",
    "content": "@echo off\n\nsetlocal\n\nset GEM_HOME=\nset GEM_PATH=\n\nset FILEDIR=%~dp0\nset TOOLSDIR=%FILEDIR%..\n\nset RUBYVER=\npushd %TOOLSDIR%\\crew\\ruby\nfor /f \"delims=\" %%a in ('type active_version.txt') do @set RUBYVER=%%a\npopd\nset RUBYDIR=%TOOLSDIR%\\crew\\ruby\\%RUBYVER%\\bin\n\n%RUBYDIR%\\ruby.exe %*\n\nendlocal\n\nexit /b %errorlevel%\n"
  },
  {
    "path": "build/tools/README.md",
    "content": "This directory contains a number of shell scripts, which we will\ncall the \"dev-scripts\", that are only used to develop the NDK\nitself, i.e. they are not needed when using ndk-build to build\napplicative native code.\n\nTheir purpose is to handle various sophisticated issues:\n\n * Rebuilding host cross-toolchains for our supported CPU ABIs.\n\n * Rebuilding other required host tools (e.g. ndk-stack) from sources.\n\n * Rebuilding all target-specific prebuilt binaries from sources (this requires\n   working host cross-toolchains).\n\n * Packaging final NDK release tarballs, including adding documentation which\n   normally lives in $NDK/../development/ndk.\n\nThis document is here to explain how to use these dev-scripts and how everything\nis architected / designed, in case you want to maintain it.\n\nGenerally, everything dev-script supports the --help option to display a\ndescription of the program and the list of all supported options. Also, debug\ntraces can be activated by using the --verbose option. Use it several times to\nincrease the level of verbosity.\n\nNote that all Windows host programs can be built on Linux if you have the\n`mingw-w64` cross-toolchain installed (`apt-get install mingw-w64` on Debian or\nUbuntu). You will need to add the `--mingw` option when invoking the script.\n\nAll dev-scripts rebuilding host programs on Linux and Darwin will only generate\n32-bit programs by default. You can experiment with 64-bit binary generation by\nadding the `--try-64` option. Note that as of now, 64-bit binaries are never\ndistributed as part of official NDK releases.\n\nWhen building 32-bit Linux host programs, the dev-scripts will look for\n`$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8`,\nwhich is part of the Android platform source tree. It is a special toolchain\nthat ensures that the generated programs can run on old systems like Ubuntu 8.04\nthat only have GLibc 2.7. Otherwise, the corresponding binaries may not run due\nto ABI changes in more recent versions of GLibc.\n\nI. Organization:\n================\n\nFirst, a small description of the NDK's overall directory structure:\n\nbuild/core\n----------\n\nContains the main NDK build system used when `ndk-build`. Relies heavily on GNU\nMake 3.81+ but isn't used by any of the scripts described here.\n\nbuild/tools\n-----------\n\nContains all the dev-scripts that are described in this document. More on this\nlater.\n\nsources/host-tools\n------------------\n\nContains sources of various libraries or programs that will be compiled to\ngenerate useful host programs for the final NDK installation. For example,\n$NDK/sources/host-tools/ndk-stack/ contains the sources of the `ndk-stack`\nprogram.\n\nsources/cxx-stl\n---------------\n\nContains the sources of various C++ runtime and libraries that can be used with\n`ndk-build`. See docs/CPLUSPLUS-SUPPORT.html for more details.\n\nsources/cxx-stl/gabi++\n----------------------\n\nContains the sources of the GAbi++ C++ runtime library. Only used via stlport or\nlibc++.\n\nsources/cxx-stl/stlport\n-----------------------\n\nContains the sources of a port of STLport that can be used with `ndk-build`. The\ndev-script `build-cxx-stl.sh` can be used to generate prebuilt libraries from\nthese sources, that will be copied under this directory.\n\nsources/cxx-stl/llvm-libc++\n---------------------------\n\nContains the sources of a port of LLVM's libc++ that can be used with ndk-build.\nThe dev-script `build-cxx-stl.sh` can be used to generate prebuilt libraries\nfrom these sources, that will be copied under this directory.\n\nsources/cxx-stl/gnu-libstdc++\n-----------------------------\n\nThis directory doesn't contain sources at all, only an Android.mk. The\ndev-script `build-gnu-libstdc++.sh` is used to generate prebuilt libraries from\nthe sources that are located in the toolchain source tree instead.\n\nsources/cxx-stl/system\n----------------------\n\nThis directory contains a few headers used to use the native system Android C++\nruntime (with _very_ limited capabilities), a.k.a. /system/lib/libstdc++.so. The\nprebuilt version of this library is generated by the `gen-platform.sh`\ndev-script described later, but it never placed in this directory.\n\nsources/android/libthread\\_db\n-----------------------------\n\nThis directory contains the sources of the libthread\\_db implementation that is\nlinked into the prebuilt target gdbserver binary.\n\nsources\n-------\n\nThe rest of `sources` is used to store the sources of helper libraries used with\n`ndk-build`. For example, the `cpu-features` helper library is under\n`sources/android/cpu-features`.\n\n$DEVNDK a.k.a $NDK/../development/ndk\n-------------------------------------\n\nThis directory contains platform-specific files. The reason why it it is\nseparate from $NDK is because it is not primarily developed in the open.\n\nMore specifically:\n\n * All $NDK development happens in the public AOSP repository ndk.git.\n\n * Any $DEVNDK development that happens in the public AOSP development.git\n   repository is auto-merged to the internal tree maintained by Google.\n\n * $DEVNDK developments that are specific to an yet-unreleased version of the\n   system happen only in the internal tree. They get back-ported to the public\n   tree only when the corresponding system release is open-sourced.\n\n$DEVNDK/platforms/android-$PLATFORM\n-----------------------------------\n\nContains all files that are specific to a given API level `$PLATFORM`, that were\nnot already defined for the previous API level.\n\nFor example, android-3 corresponds to Android 1.5, and android-4 corresponds to\nAndroid 1.6. The platforms/android-4 directory only contains files that are\neither new or modified, compared to android-3.\n\n$DEVNDK/platforms/android-$PLATFORM/include\n-------------------------------------------\n\nContains all system headers exposed by the NDK for a given platform. All these\nheaders are independent from the CPU architecture of target devices.\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH\n----------------------------------------------\n\nContains all files that are specific to a given $PLATFORM level and a specific\nCPU architecture. $ARCH is typically 'arm' or 'x86'\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/include\n------------------------------------------------------\n\nContains all the architecture-specific headers for a given API level.\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/lib\n--------------------------------------------------\n\nContains several CPU-specific object files and static libraries that are\nrequired to build the host cross-toolchains properly.\n\nBefore NDK r7, this also contains prebuilt system shared libraries that had been\nhand-picked from various platform builds. These have been replaced by symbol\nlist files instead (see below).\n\n$DEVNDK/platforms/android-$PLATFORM/arch-$ARCH/symbols\n------------------------------------------------------\n\nContains, for each system shared library exposed by the NDK, two files\ndescribing the dynamic symbols it exports, for example, for the C library:\n\n    libc.so.functions.txt -> list of exported function names\n    libc.so.variables.txt -> list of exported variable names\n\nThese files were introduced in NDK r7 and are used to generate stub shared\nlibraries that can be used by ndk-build at link time. These shared libraries\ncontain the same symbols that make the NDK ABI for the given version, but do not\nfunction.\n\nThese files can be generated from a given platform build using the\n`dev-platform-import.sh` dev-script, described later in this document.\n\nThis is handy to compare which symbols were added between platform releases (and\ncheck that nothing disappeared).\n\n$NDK/platforms\n--------------\n\nNot to be confused with $DEVNDK/platforms/, this directory is not part of the\nNDK git directory (and is specifically listed in $NDK/.gitignore) but of its final\ninstallation.\n\nIts purpose is to hold the fully expanded platform-specific files. This means\nthat, unlike $DEVNDK/platforms/android-$PLATFORM, the\n$NDK/platforms/android-$PLATFORM will contain _all_ the files that are specific\nto API level $PLATFORM.\n\nMoreover, the directory is organized slightly differently, i.e. as toolchain\nsysroot, i.e. for each supported $PLATFORM and $ARCH values, it provides two\ndirectories:\n\n    $NDK/platforms/android-$PLATFORM/arch-$ARCH/usr/include\n    $NDK/platforms/android-$PLATFORM/arch-$ARCH/usr/lib\n\nNotice the `usr` subdirectory here. It is required by GCC to be able to use the\ndirectories with --with-sysroot. For example, to generate binaries that target\nAPI level 5 for the arm architecture, one would use:\n\n    $TOOLCHAIN_PREFIX-gcc --with-sysroot=$NDK/platforms/android-5/arch-arm\n\nWhere `$TOOLCHAIN_PREFIX` depends on the exact toolchain being used.\n\nThe dev-script `gen-platforms.sh` is used to populate $NDK/platforms. Note that\nby default, the script does more, see its detailed description below.\n\nII. Host toolchains:\n====================\n\nThe host toolchains are the compiler, linker, debugger and other crucial\nprograms used to generate machine code for the target Android system supported\nby the NDK.\n\nII.1 Getting the toolchain sources:\n-----------------------------------\n\nThe AOSP toolchain/ repository contains the source for the toolchains used to\nbuild the Android platform and in the NDK.\n\nThe master-ndk branch of AOSP contains an already checked out and patched\nversion of the toolchain repository at toolchain/. The old process of using\ndownload-toolchain-sources.sh is now obsolete.\n\nThe toolchains binaries are typically placed under the directory\n$NDK/toolchains/$NAME/prebuilt, where $NAME is the toolchain name's full name\n(e.g. arm-linux-androideabi-4.8).\n\nI.2. Building the toolchains:\n-----------------------------\n\nFirst you will need to build a proper \"sysroot\" directory before being able to\nconfigure/build them.\n\nA sysroot is a directory containing system headers and libraries that the\ncompiler will use to build a few required target-specific binaries (e.g.\nlibgcc.a)\n\nTo do that, use:\n\n    $NDK/build/tools/gen-platforms.sh --minimal\n\nThis will populate $NDK/platforms/ with just the files necessary to rebuild the\ntoolchains. Note that without the --minimal option, the script will fail without\nprebuilt toolchain binaries.\n\nOnce the sysroots are in place, use `build-gcc.sh` by providing the path to the\ntoolchain sources root directory, a destination NDK installation directory to\nbuild, and the full toolchain name.\n\nFor example, to rebuild the arm and x86 prebuilt toolchain binaries in the\ncurrent NDK directory (which can be handy if you want to later use them to\nrebuild other target prebuilts or run tests), do:\n\n    $NDK/build/tools/build-gcc.sh /tmp/ndk-$USER/src $NDK \\\n        arm-linux-androideabi-4.8\n    $NDK/build/tools/build-gcc.sh /tmp/ndk-$USER/src $NDK x86-4.8\n\nHere, we assume you're using the master-ndk branch as described in the previous\nsection.\n\nThis operation can take some time. The script automatically performs a parallel\nbuild to speed up the build on multi-core machine (use the -j<number> option to\ncontrol this), but the GCC sources are very large, so expect to wait a few\nminutes.\n\nFor the record, on a 2.4 GHz Xeon with 16 Hyper-threaded cores and 12GB of\nmemory, rebuilding each toolchain takes between 2 and 4 minutes.\n\nYou need to be on Linux to build the Windows binaries, using the \"mingw-w64\"\ncross-toolchain (install it with \"apt-get install mingw-w64\" on Ubuntu). To do\nso use the \"--mingw\" option, as in:\n\n    $NDK/build/tools/build-gcc.sh --mingw \\\n        /tmp/ndk-$USER/src $NDK arm-linux-androideabi-4.8\n\n    $NDK/build/tools/build-gcc.sh --mingw \\\n        /tmp/ndk-$USER/src $NDK x86-4.8\n\nThe corresponding binaries are installed under $NDK/toolchains/$NAME/prebuilt.\nNote that these are native Windows programs, not Cygwin ones.\n\nBuilding the Windows toolchains under MSys and Cygwin is completely unsupported\nand highly un-recommended: even if it works, it will probably take several\nhours, even on a powerful machine :-(\n\nThe Darwin binaries must be generated on a Darwin machine. Note that the script\nwill try to use the 10.5 XCode SDK if it is installed on your system. This\nensures that the generated binaries run on Leopard, even if you're building on a\nmore recent version of the system.\n\nOnce you've completed your builds, you should be able to generate the other\ntarget-specific prebuilts.\n\nIII. Target-specific prebuilt binaries:\n=======================================\n\nA final NDK installation comes with a lot of various target-specific prebuilt\nbinaries that must be generated from sources once you have working host\ntoolchains.\n\nIII.1.: Preparation of platform sysroots:\n-----------------------------------------\n\nEach target prebuilt is handled by a specific dev-script. HOWEVER, all these\nscript require that you generate a fully populated $NDK/platforms/ directory\nfirst. To do that, simply run:\n\n    $NDK/gen-platforms.sh\n\nNote that we used this script with the --minimal option to generate the host\ntoolchains. That's because without this flag, the script will also auto-generate\ntiny versions of the system shared libraries that will be used at link-time when\nbuilding our target prebuilts.\n\nIII.2.: Generation of gdbserver:\n---------------------------------\n\nA target-specific `gdbserver` binary is required. This is a small program that\nis run on the device through `ndk-gdb` during debugging. For a variety of\ntechnical reasons, it must be copied into a debuggable project's output\ndirectory when `ndk-build` is called.\n\nThe prebuilt binary is placed under $NDK/gdbserver/$ARCH in the final NDK\ninstallation. You can generate them with `build-gdbserver.py`.\n\n\nIII.3. Generating C++ runtime prebuilt binaries:\n-----------------------------------------------\n\nSources and support files for several C++ runtimes / standard libraries are\nprovided under $NDK/sources/cxx-stl/. Several dev-scripts are provided to\nrebuild their binaries. The scripts place them to their respective location\n(e.g. the libc++ binaries will go to $NDK/sources/cxx-stl/llvm-libc++/libs/)\nunless you use the --out-dir=<path> option.\n\nNote that:\n\n * Each script will generate the binaries for all the CPU ABIs supported by the\n   NDK, e.g. armeabi, armeabi-v7a, x86 and mips. You can restrict them using the\n   --abis=<list> option though.\n\n - The GNU libstdc++ dev-script requires the path to the toolchain sources,\n   since this is where the library's sources are located.\n\nAn example usage would be:\n\n    $NDK/build/tools/build-cxx-stl.sh --stl=stlport\n    $NDK/build/tools/build-cxx-stl.sh --stl=libc++\n    $NDK/build/tools/build-gnu-libstdc++.sh /tmp/ndk-$USER/src\n\nNote that generating the STLport and GNU libstdc++ binaries can take a few\nminutes. You can follow the build by using the --verbose option to display\nwhat's going on.\n\nIV. Other host prebuilt binaries:\n=================================\n\nThere are a few other host prebuilt binaries that are needed for a full NDK\ninstallation. Their sources are typically installed under\n$NDK/sources/host-tools/\n\nNote that the corresponding dev-script recognize the --mingw and --try-64\noptions described at the end of section I above.\n\nIV.1.: Building `ndk-stack`:\n---------------------------\n\nThe `build-ndk-stack.sh` script can be used to rebuild the `ndk-stack` helper\nhost program. See docs/NDK-STACK.html for a usage description.  To build it,\njust do:\n\n    $NDK/build/tools/build-ndk-stack.sh\n\nIV.2.: Building `ndk-depends`:\n-----------------------------\n\nSimilar to `ndk-stack`, see the `build-ndk-depends.sh` script.\n\nV. Packaging all prebuilts:\n===========================\n\nGenerating all the prebuilt binaries takes a lot of time and is no fun.  To\navoid doing it again and again, it is useful to place all the generated files\naside in special tarballs.\n\nMost dev-scripts generating them typically support a --package-dir=<path> option\nto do this, where <path> points to a directory that will store compressed\ntarballs of the generated binaries.\n\nFor example, to build and package the libc++ binaries, use:\n\n    $NDK/build/tools/build-cxx-stl.sh --stl=libc++ \\\n        --package-dir=/tmp/ndk-$USER/prebuilt/\n\nThis will actually create one tarball per supported ABI in\n`$ANDROID_BUILD_TOP/out/ndk`, i.e.:\n\n * libcxx-libs-armeabi.tar.bz2\n * libcxx-libs-armeabi-v7a.tar.bz2\n * libcxx-libs-x86.tar.bz2\n * ...\n\nNote that these tarballs are built to be uncompressed from the top-level of an\nexisting NDK install tree.\n\nSimilarly, to rebuild the STLport binaries and package them:\n\n    $NDK/build/tools/build-cxx-stl.sh --stl=stlport \\\n        --package-dir=/tmp/ndk-$USER/prebuilt\n\nThe `rebuilt-all-prebuilt.sh` script has been entirely replaced by checkbuild.py\nin the root of the NDK.  Note that by default, it will automatically place the\nprebuilt tarballs under `$ANDROID_BUILD_TOP/out/ndk`.\n\nBy default, this only rebuilds the host prebuilts for the current host system.\nYou can use `--system windows` or `--system windows64` to build Windows binaries\non Linux.\n\nOnce you have used the script three times (once per supported host systems), you\nshould have plenty of files under /tmp/ndk-$USER/prebuilt-$DATE.  For the\nrecord, with NDK r7, the list was:\n\nVI. Packaging NDK releases:\n===========================\n\nUse the `package-release.sh` dev-script to generate full NDK release packages.\nThese contain everything needed by a typical NDK user, including:\n\n * All prebuilt binaries (host toolchains, host tools, target libs, etc...).\n * All documentation.\n\nYou need to have a directory containing prebuilt tarballs, as described in the\nprevious section. You can use it as:\n\n    $NDK/build/tools/package-release.sh \\\n        --release=<name> \\\n        --systems=<list> \\\n        --arch=<list> \\\n        --prebuilt-dir=<path>\n\nThe --release option is optional and allows you to provide a name for your\ngenerated NDK archive. More specifically, the archive file name will be\nsomething like android-ndk-$RELEASE-$SYSTEM.tar.bz2, where $RELEASE is the\nrelease name, and $SYSTEM the supported host system (e.g. linux-x86).\n\nBy default, i.e. without the option, $RELEASE will be set to the current $DATE.\n\nThe --systems=<list> is optional, but can be used to limit the number of host\nsystems you want to generate for. <list> must be a comma-separated list of\nsystem names (from `linux-x86`, `windows` and `darwin-x86`). This is useful if\nyou're working on a experimental feature and don't have the time to regenerate\nthe host toolchains for all systems. It allows you to generate an experimental\npackage that you can distribute to third-party for experimentation.\n\nBy default, i.e. without the option, the scripts tries to build NDK archives for\nall supported host systems.\n\nThe --arch=<list> is also optional, but can be used to limit the number of\ntarget architectures you want to generate for. <list> must be a comma-separated\nlist of CPU architectures (e.g. from `arm` and `x86`). Without the option, this\nwill try to build packages that support all architectures.\n\nFinally, --prebuilt-dir=<path> must point to the directory that contains the\nprebuilt tarballs described in section V. Following our previous example, one\ncould use --prebuilt-dir=/tmp/ndk-$USER/prebuilt here.\n\nVI. Testing:\n============\n\nThe $NDK/tests directory contains a number of NDK unit-tests that can be used to\nverify that the generated NDK packages or the working NDK tree still behave\ncorrectly.\n\nIf you have an NDK package archive, you can run the following to run the test\nsuite against it:\n\n    $NDK/tests/run-tests.sh --package=<ndk-archive>\n\nThis will uncompress the NDK archive in a temporary directory, then run all the\ntests with it. When all tests have run, the temporary directory is removed\nautomatically.\n\nYou can also point to an existing NDK installation with --ndk=<path>, as in:\n\n    $NDK/tests/run-tests.sh --ndk=<path>\n\nWhere <path> points to another NDK installation. The script will run the test\nsuite present under $NDK/tests/, not the one in the remote NDK directory.\n\nIf you don't use any option, the test suite will be run with the current NDK\ndirectory. This can only work if you have generated or unpacked all prebuilt\narchives into it before that.\n\nYou can get more traces from the tests by using --verbose. Use it twice to see\neven more traces.\n\nThere are several kinds of tests:\n\n * 'build tests' are used to test the building capabilities of the NDK.\n   I.e. the tests will only use them to check that the NDK build system\n   didn't regress. The corresponding generated binaries are never used\n   otherwise.\n\n * 'device tests' are used to test both the build and the behaviour of\n   the generated code. If the `adb` program is in your path, and have\n   one device or emulator connected to your host machine, `run-tests.sh`\n   will automatically upload, run and cleanup these tests for you.\n\n   If adb is not in your path, or no device is connected, run-tests.sh\n   will simply print a warning and carry on.\n\n\nWhenever you add a feature to the NDK, or fix a bug, it is recommended to add a\nunit test to check the feature or the fix. Use $NDK/tests/build for build tests,\nand $NDK/tests/device for device tests.\n"
  },
  {
    "path": "build/tools/build-analyzer.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to copy clang tool \"scan-build\" and \"scan-view\"\n#  for the Android NDK.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Copy clang static code analyzer for the Android NDK.\n\nWhere <src-dir> is the location of toolchain sources, <ndk-dir> is\nthe top-level NDK installation path and <toolchain> is the name of\nthe toolchain to use (e.g. llvm-3.1).\"\n\nRELEASE=`date +%Y%m%d`\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Create archive tarball in specific directory\"\n\nextract_parameters \"$@\"\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    SCAN_BUILD_SRC_DIR=$SRC_DIR/$TOOLCHAIN/clang/tools/scan-build\n    if [ ! -d \"$SCAN_BUILD_SRC_DIR\" ] ; then\n        echo \"ERROR: Source directory does not contain scan-build: $SCAN_BUILD_SRC_DIR\"\n        exit 1\n    fi\n\n    SCAN_VIEW_SRC_DIR=$SRC_DIR/$TOOLCHAIN/clang/tools/scan-view\n    if [ ! -d \"$SCAN_VIEW_SRC_DIR\" ] ; then\n        echo \"ERROR: Source directory does not contain scan-view: $SCAN_VIEW_SRC_DIR\"\n        exit 1\n    fi\n\n    LICENSE_FILE=$SRC_DIR/$TOOLCHAIN/clang/LICENSE.TXT\n    if [ ! -f \"$LICENSE_FILE\" ] ; then\n        echo \"ERROR: Source directory does not contain clang license file: $LICENSE_FILE\"\n        exit 1\n    fi\n\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        fail_panic \"Could not create target NDK installation path: $NDK_DIR\"\n    fi\n\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\n# copy scan_build and scan_view\nSCAN_BUILD_SUBDIR=\"prebuilt/common/scan-build\"\nrun copy_directory \"$SCAN_BUILD_SRC_DIR\" \"$NDK_DIR/$SCAN_BUILD_SUBDIR\"\ncp -p \"$LICENSE_FILE\" \"$NDK_DIR/$SCAN_BUILD_SUBDIR\"\nrm -f $NDK_DIR/$SCAN_BUILD_SUBDIR/scan-build.1\n\nSCAN_VIEW_SUBDIR=\"prebuilt/common/scan-view\"\nrun copy_directory \"$SCAN_VIEW_SRC_DIR\" \"$NDK_DIR/$SCAN_VIEW_SUBDIR\"\ncp -p \"$LICENSE_FILE\" \"$NDK_DIR/$SCAN_VIEW_SUBDIR\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    ARCHIVE=\"scan-build-view.tar.xz\"\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SCAN_BUILD_SUBDIR\" \"$SCAN_VIEW_SUBDIR\"\nfi\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/tools/build-boost.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Boost libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$BOOST_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nBOOST_VERSION=\nregister_var_option \"--version=<ver>\" BOOST_VERSION \"Boost version to build\"\n\nICU_VERSION=\nregister_var_option \"--with-icu=<version>\" ICU_VERSION \"ICU version to build with [without ICU]\"\n\nSTDLIBS=\"\"\nfor VERSION in $DEFAULT_GCC_VERSION_LIST; do\n    STDLIBS=\"$STDLIBS gnu-$VERSION\"\ndone\nfor VERSION in $DEFAULT_LLVM_VERSION_LIST; do\n    STDLIBS=\"$STDLIBS llvm-$VERSION\"\ndone\nSTDLIBS=$(spaces_to_commas $STDLIBS)\nregister_var_option \"--stdlibs=<list>\" STDLIBS \"List of Standard C++ Library implementations to build with\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nif [ -z \"$BOOST_VERSION\" ]; then\n    echo \"ERROR: Please specify Boost version\" 1>&2\n    exit 1\nfi\n\nBOOST_MAJOR_VERSION=$(echo $BOOST_VERSION | cut -d . -f 1)\nBOOST_MINOR_VERSION=$(echo $BOOST_VERSION | cut -d . -f 2)\n\nBOOST_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$BOOST_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Boost source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$BOOST_SRCDIR/$BOOST_VERSION\" ]; then\n    echo \"ERROR: No such directory: '$BOOST_SRCDIR/$BOOST_VERSION'\"\n    exit 1\nfi\n\nBOOST_SRCDIR=$BOOST_SRCDIR/$BOOST_VERSION\n\nif [ -n \"$ICU_VERSION\" ]; then\n    BOOST_SUBDIR=\"${BOOST_SUBDIR}+icu\"\nfi\n\nBOOST_DSTDIR=$NDK_DIR/$BOOST_SUBDIR/$BOOST_VERSION\nmkdir -p $BOOST_DSTDIR\nfail_panic \"Could not create Boost $BOOST_VERSION destination directory: $BOOST_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nSTDLIBS=$(commas_to_spaces $STDLIBS)\n\nPYTHON_VERSION=$(echo \"$PYTHON_VERSIONS\" | tr ' ' '\\n' | tail -n 1)\nPYTHON_DIR=$NDK_DIR/$PYTHON_SUBDIR/$PYTHON_VERSION\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-boost\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ \"$HOST_ARCH\" = \"x86_64\" ]; then\n    TRY64=yes\nfi\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\nmktool()\n{\n    local tool\n    for tool in \"$@\"; do\n        cat >$tool\n        fail_panic \"Could not create tool $tool\"\n        chmod +x $tool\n        fail_panic \"Could not chmod +x $tool\"\n    done\n}\n\n# $1: ABI\n# $2: build directory\n# $3: C++ Standard Library implementation\nbuild_boost_for_abi ()\n{\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local LIBSTDCXX=\"$3\"\n\n    local V\n    if [ \"$VERBOSE2\" = \"yes\" ]; then\n        V=1\n    fi\n\n    local LVERSION=\"$BOOST_VERSION\"\n    if [ -n \"$ICU_VERSION\" ]; then\n        LVERSION=\"$LVERSION (with ICU $ICU_VERSION)\"\n    fi\n\n    dump \"Building Boost $LVERSION $ABI libraries (C++ stdlib: $LIBSTDCXX)\"\n\n    local APILEVEL=9\n    if [ ${ABI%%64*} != ${ABI} ]; then\n        APILEVEL=21\n    fi\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    local TCNAME\n    case $ABI in\n        armeabi*)\n            TCNAME=arm-linux-androideabi\n            ;;\n        arm64*)\n            TCNAME=aarch64-linux-android\n            ;;\n        mips)\n            TCNAME=mipsel-linux-android\n            ;;\n        mips64)\n            TCNAME=mips64el-linux-android\n            ;;\n        x86|x86_64)\n            TCNAME=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    local TCPREFIX\n    case $ABI in\n        x86)\n            TCPREFIX=i686-linux-android\n            ;;\n        x86_64)\n            TCPREFIX=x86_64-linux-android\n            ;;\n        *)\n            TCPREFIX=$TCNAME\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    local FLAGS LFLAGS\n    case $ABI in\n        armeabi)\n            FLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            ;;\n        armeabi-v7a-hard)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            LFLAGS=\"$LFLAGS -Wl,--no-warn-mismatch\"\n            ;;\n        arm64-v8a)\n            FLAGS=\"\"\n            ;;\n        x86)\n            FLAGS=\"-m32\"\n            ;;\n        x86_64)\n            FLAGS=\"-m64\"\n            ;;\n        mips)\n            FLAGS=\"-mabi=32 -mips32\"\n            ;;\n        mips64)\n            FLAGS=\"-mabi=64 -mips64r6\"\n            ;;\n    esac\n\n    local LLVMTRIPLE\n    case $ABI in\n        armeabi)\n            LLVMTRIPLE=\"armv5te-none-linux-androideabi\"\n            ;;\n        armeabi-v7a*)\n            LLVMTRIPLE=\"armv7-none-linux-androideabi\"\n            ;;\n        arm64-v8a)\n            LLVMTRIPLE=\"aarch64-none-linux-android\"\n            ;;\n        x86)\n            LLVMTRIPLE=\"i686-none-linux-android\"\n            ;;\n        x86_64)\n            LLVMTRIPLE=\"x86_64-none-linux-android\"\n            ;;\n        mips)\n            LLVMTRIPLE=\"mipsel-none-linux-android\"\n            ;;\n        mips64)\n            LLVMTRIPLE=\"mips64el-none-linux-android\"\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local GCC_VERSION\n    case $LIBSTDCXX in\n        gnu-*)\n            GCC_VERSION=$(expr \"$LIBSTDCXX\" : \"^gnu-\\(.*\\)$\")\n            ;;\n        *)\n            GCC_VERSION=$DEFAULT_GCC_VERSION\n    esac\n\n    local LLVM_VERSION\n    case $LIBSTDCXX in\n        llvm-*)\n            LLVM_VERSION=$(expr \"$LIBSTDCXX\" : \"^llvm-\\(.*\\)$\")\n            ;;\n        *)\n            LLVM_VERSION=$DEFAULT_LLVM_VERSION\n    esac\n\n    local GCC_DIR=$NDK_DIR/toolchains/$TCNAME-$GCC_VERSION/prebuilt/$HOST_TAG\n    local LLVM_DIR=$NDK_DIR/toolchains/llvm-$LLVM_VERSION/prebuilt/$HOST_TAG\n\n    local SRCDIR=$BUILDDIR/src\n    copy_directory $BOOST_SRCDIR $SRCDIR\n\n    cd $SRCDIR\n    fail_panic \"Couldn't CD to temporary Boost $BOOST_VERSION sources directory\"\n\n    if [ ! -x ./b2 ]; then\n        local TMPHOSTTCDIR=$BUILDDIR/host-bin\n        run mkdir $TMPHOSTTCDIR\n        fail_panic \"Couldn't create temporary directory for host toolchain wrappers\"\n\n        {\n            echo \"#!/bin/sh\"\n            echo \"\"\n            echo \"exec $CC $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n        } | mktool $TMPHOSTTCDIR/cc\n\n        PATH=$TMPHOSTTCDIR:$SAVED_PATH\n        export PATH\n\n        run ./bootstrap.sh --with-toolset=cc\n        fail_panic \"Could not bootstrap Boost build\"\n    fi\n\n    {\n        echo \"import option ;\"\n        echo \"import feature ;\"\n        echo \"import python ;\"\n        echo \"using python : $PYTHON_VERSION : $PYTHON_DIR : $PYTHON_DIR/include/python : $PYTHON_DIR/libs/$ABI ;\"\n        case $LIBSTDCXX in\n            gnu-*)\n                echo \"using gcc : $ARCH : g++ ;\"\n                echo \"project : default-build <toolset>gcc ;\"\n                ;;\n            llvm-*)\n                echo \"using clang : $ARCH : clang++ ;\"\n                echo \"project : default-build <toolset>clang ;\"\n                ;;\n            *)\n                echo \"ERROR: Wrong C++ stdlib: '$LIBSTDCXX'\" 1>&2\n                exit 1\n        esac\n        echo \"libraries = ;\"\n        echo \"option.set keep-going : false ;\"\n    } | cat >project-config.jam\n    fail_panic \"Could not create project-config.jam\"\n\n    {\n        echo \"using mpi ;\"\n    } | cat >user-config.jam\n    fail_panic \"Could not create user-config.jam\"\n\n    local TMPTARGETTCDIR=$BUILDDIR/target-bin\n    run mkdir $TMPTARGETTCDIR\n    fail_panic \"Couldn't create temporary directory for target $ABI toolchain wrappers\"\n\n    local SYSROOT=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\n    local LIBCRYSTAX=$NDK_DIR/$CRYSTAX_SUBDIR\n\n    local ICU_CFLAGS ICU_LDFLAGS\n    if [ -n \"$ICU_VERSION\" ]; then\n        local ICU=$NDK_DIR/sources/icu/$ICU_VERSION\n        ICU_CFLAGS=\"-I$ICU/include\"\n        ICU_LDFLAGS=\"-L$ICU/libs/$ABI\"\n    else\n        ICU_CFLAGS=\"\"\n        ICU_LDFLAGS=\"\"\n    fi\n\n    local CXX CXXNAME\n    local LIBSTDCXX_CFLAGS LIBSTDCXX_LDFLAGS LIBSTDCXX_LDLIBS\n    case $LIBSTDCXX in\n        gnu-*)\n            CXX=$GCC_DIR/bin/$TCPREFIX-g++\n            CXXNAME=g++\n            local GNULIBCXX=$NDK_DIR/sources/cxx-stl/gnu-libstdc++/$(expr \"$LIBSTDCXX\" : \"^gnu-\\(.*\\)$\")\n            LIBSTDCXX_CFLAGS=\"-I$GNULIBCXX/include -I$GNULIBCXX/libs/$ABI/include\"\n            LIBSTDCXX_LDFLAGS=\"-L$GNULIBCXX/libs/$ABI\"\n            LIBSTDCXX_LDLIBS=\"-lgnustl_shared\"\n            ;;\n        llvm-*)\n            CXX=\"$LLVM_DIR/bin/clang++ -target $LLVMTRIPLE -gcc-toolchain $GCC_DIR\"\n            CXXNAME=clang++\n            local LLVMLIBCXX=$NDK_DIR/sources/cxx-stl/llvm-libc++/$(expr \"$LIBSTDCXX\" : \"^llvm-\\(.*\\)$\")\n            local LLVMLIBCXXABI=$NDK_DIR/sources/cxx-stl/llvm-libc++abi\n            LIBSTDCXX_CFLAGS=\"-I$LLVMLIBCXX/libcxx/include -I$LLVMLIBCXXABI/libcxxabi/include\"\n            LIBSTDCXX_LDFLAGS=\"-L$LLVMLIBCXX/libs/$ABI\"\n            LIBSTDCXX_LDLIBS=\"-lc++_shared\"\n            FLAGS=\"$FLAGS -fno-integrated-as\"\n            ;;\n        *)\n            echo \"ERROR: Unknown C++ Standard Library: '$LIBSTDCXX'\" 1>&2\n            exit 1\n    esac\n\n    FLAGS=\"$FLAGS --sysroot=$SYSROOT\"\n    FLAGS=\"$FLAGS -fPIC\"\n\n    mktool $TMPTARGETTCDIR/$CXXNAME <<EOF\n#!/bin/sh\n\nif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -c; then\n    LINKER=no\nelif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -emit-pth; then\n    LINKER=no\nelse\n    LINKER=yes\nfi\n\n# Remove any -m32/-m64 from input parameters\nPARAMS=\\`echo \"\\$@\" | tr ' ' '\\\\n' | grep -v -x -e -m32 | grep -v -x -e -m64 | tr '\\\\n' ' '\\`\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    # Fix SONAME for shared libraries\n    NPARAMS=\"\"\n    NEXT_PARAM_IS_LIBNAME=no\n    for p in \\$PARAMS; do\n        if [ \"x\\$NEXT_PARAM_IS_LIBNAME\" = \"xyes\" ]; then\n            LIBNAME=\\`expr \"x\\$p\" : \"^x.*\\\\(lib[^\\\\.]*\\\\.so\\\\)\"\\`\n            p=\"-Wl,\\$LIBNAME\"\n            NEXT_PARAM_IS_LIBNAME=no\n        else\n            case \\$p in\n                -Wl,-soname|-Wl,-h|-install_name)\n                    p=\"-Wl,-soname\"\n                    NEXT_PARAM_IS_LIBNAME=yes\n                    ;;\n                -Wl,-soname,lib*|-Wl,-h,lib*)\n                    LIBNAME=\\`expr \"x\\$p\" : \"^x.*\\\\(lib[^\\\\.]*\\\\.so\\\\)\"\\`\n                    p=\"-Wl,-soname,-l\\$LIBNAME\"\n                    ;;\n                -dynamiclib)\n                    p=\"-shared\"\n                    ;;\n                -undefined)\n                    p=\"-u\"\n                    ;;\n                -single_module)\n                    p=\"\"\n                    ;;\n                -lpthread|-lutil)\n                    p=\"\"\n                    ;;\n            esac\n        fi\n        NPARAMS=\"\\$NPARAMS \\$p\"\n    done\n    PARAMS=\\$NPARAMS\nfi\n\nFLAGS=\"$FLAGS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    FLAGS=\"\\$FLAGS $LFLAGS\"\n    FLAGS=\"\\$FLAGS $ICU_LDFLAGS\"\n    FLAGS=\"\\$FLAGS -L$LIBCRYSTAX/libs/$ABI\"\n    FLAGS=\"\\$FLAGS $LIBSTDCXX_LDFLAGS\"\nelse\n    FLAGS=\"\\$FLAGS $ICU_CFLAGS\"\n    FLAGS=\"\\$FLAGS $LIBSTDCXX_CFLAGS\"\n    FLAGS=\"\\$FLAGS -I$LIBCRYSTAX/include\"\n    FLAGS=\"\\$FLAGS -Wno-long-long\"\nfi\n\nPARAMS=\"\\$FLAGS \\$PARAMS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    PARAMS=\"\\$PARAMS $LIBSTDCXX_LDLIBS\"\nfi\n\nrun()\n{\n    if [ -n \"\\$NDK_LOGFILE\" ]; then\n        echo \"## COMMAND: \\$@\" >>\\$NDK_LOGFILE\n    fi\n    exec \"\\$@\"\n}\n\nrun $CXX \\$PARAMS\nEOF\n    fail_panic \"Could not create target '$CXXNAME' wrapper\"\n\n    for TOOL in as ar ranlib strip; do\n        {\n            echo \"#!/bin/sh\"\n            echo \"exec $GCC_DIR/bin/$TCPREFIX-$TOOL \\\"\\$@\\\"\"\n        } | mktool $TMPTARGETTCDIR/$TOOL\n        fail_panic \"Could not create target '$TOOL' wrapper\"\n    done\n\n    PATH=$TMPTARGETTCDIR:$SAVED_PATH\n    export PATH\n\n    local BJAMARCH\n    local BJAMABI\n    case $ARCH in\n        arm|arm64)\n            BJAMARCH=arm\n            BJAMABI=aapcs\n            ;;\n        x86|x86_64)\n            BJAMARCH=x86\n            BJAMABI=sysv\n            ;;\n        mips)\n            BJAMARCH=mips1\n            BJAMABI=o32\n            ;;\n        mips64)\n            BJAMARCH=mips1\n            BJAMABI=o64\n            ;;\n        *)\n            echo \"ERROR: Unsupported CPU architecture: '$ARCH'\" 1>&2\n            exit 1\n    esac\n\n    local BJAMADDRMODEL\n    if [ ${ARCH%%64} != ${ARCH} ]; then\n        BJAMADDRMODEL=64\n    else\n        BJAMADDRMODEL=32\n    fi\n\n    local WITHOUT=\"\"\n\n    # Boost.Context in 1.57.0 and earlier don't support arm64\n    # Boost.Context in 1.61.0 and earlier don't support mips64\n    if [ \\( \"$ARCH\" = \"arm64\"  -a $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -le 57 \\) -o \\\n         \\( \"$ARCH\" = \"mips64\" -a $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -le 61 \\) ]; then\n        WITHOUT=\"$WITHOUT --without-context\"\n    fi\n\n    # Boost.Coroutine depends on Boost.Context\n    if echo \"$WITHOUT\" | grep -q -e \"--without-context\"; then\n        WITHOUT=\"$WITHOUT --without-coroutine\"\n        # Starting from 1.59.0, there is Boost.Coroutine2 library, which depends on Boost.Context too\n        if [ $BOOST_MAJOR_VERSION -gt 1 -o \\( $BOOST_MAJOR_VERSION -eq 1 -a $BOOST_MINOR_VERSION -ge 59 \\) ]; then\n            WITHOUT=\"$WITHOUT --without-coroutine2\"\n        fi\n    fi\n\n    local PREFIX=$BUILDDIR/install\n\n    run ./b2 -d+2 -q -j$NUM_JOBS \\\n        variant=release \\\n        link=static,shared \\\n        runtime-link=shared \\\n        threading=multi \\\n        target-os=android \\\n        binary-format=elf \\\n        address-model=$BJAMADDRMODEL \\\n        architecture=$BJAMARCH \\\n        abi=$BJAMABI \\\n        --user-config=user-config.jam \\\n        --layout=system \\\n        --prefix=$PREFIX \\\n        --build-dir=$BUILDDIR/build \\\n        $WITHOUT \\\n        install \\\n\n    fail_panic \"Couldn't build Boost $BOOST_VERSION $ABI libraries\"\n\n    if [ \"$BOOST_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install Boost $BOOST_VERSION headers into $BOOST_DSTDIR\"\n        run rm -Rf $BOOST_DSTDIR/include\n        run cp -pR $PREFIX/include $BOOST_DSTDIR/\n        fail_panic \"Couldn't install Boost $BOOST_VERSION headers\"\n        BOOST_HEADERS_INSTALLED=yes\n        export BOOST_HEADERS_INSTALLED\n    fi\n\n    local INSTALLDIR=$BOOST_DSTDIR/libs/$ABI/$LIBSTDCXX\n\n    log \"Install Boost $BOOST_VERSION $ABI libraries into $BOOST_DSTDIR\"\n    run mkdir -p $INSTALLDIR\n    fail_panic \"Couldn't create Boost $BOOST_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        rm -f $INSTALLDIR/lib*.$LIBSUFFIX\n\n        for f in $(find $PREFIX -name \"lib*.$LIBSUFFIX\" -print); do\n            local bf=$(basename $f)\n            run cp -pRH $f $INSTALLDIR/$bf\n            fail_panic \"Couldn't install Boost $BOOST_VERSION $ABI $bf library\"\n        done\n    done\n\n    log \"Boost $BOOST_VERSION $ABI binaries built successfully\"\n}\n\nSAVED_PATH=$PATH\n\nPNAME=boost\nif [ -n \"$ICU_VERSION\" ]; then\n    PNAME=\"${PNAME}+icu\"\nfi\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        BOOST_BUILD_FILES_NEED_PACKAGE=no\n    else\n        BOOST_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        BOOST_HEADERS_NEED_PACKAGE=no\n    else\n        BOOST_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    for STDLIB in $STDLIBS; do\n        DO_BUILD_PACKAGE=\"yes\"\n        if [ -n \"$PACKAGE_DIR\" ]; then\n            PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-libs-$STDLIB-$ABI.tar.xz\"\n            echo \"Look for: $PACKAGE_NAME\"\n            try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n            if [ $? -eq 0 ]; then\n                if [ \"$BOOST_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                    BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n                else\n                    DO_BUILD_PACKAGE=\"no\"\n                fi\n            else\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            fi\n        fi\n        if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n            build_boost_for_abi $ABI \"$BUILD_DIR/$ABI/$STDLIB\" \"$STDLIB\"\n\n            if [ -n \"$PACKAGE_DIR\" ]; then\n                if [ \"$BOOST_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n                    FILES=\"$BOOST_SUBDIR/$BOOST_VERSION/include\"\n                    PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-headers.tar.xz\"\n                    PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n                    dump \"Packaging: $PACKAGE\"\n                    pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n                    fail_panic \"Could not package Boost $BOOST_VERSION headers!\"\n                    cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n                fi\n\n                FILES=\"$BOOST_SUBDIR/$BOOST_VERSION/libs/$ABI/$STDLIB\"\n                PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-libs-$STDLIB-$ABI.tar.xz\"\n                PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n                dump \"Packaging: $PACKAGE\"\n                pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n                fail_panic \"Could not package $ABI Boost $BOOST_VERSION (C++ stdlib: $STDLIB) binaries!\"\n                cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n            fi\n        fi\n    done\ndone\n\n# Restore PATH\nPATH=$SAVED_PATH\nexport PATH\n\n# Copy license\nlog \"Copying Boost $BOOST_VERSION license\"\nrun cp -f $BOOST_SRCDIR/LICENSE_1_0.txt $BOOST_DSTDIR/\nfail_panic \"Couldn't copy Boost $BOOST_VERSION license\"\n\nget_objdump_for_abi()\n{\n    local ABI=$1\n    local OBJDUMP\n    case $ABI in\n        armeabi*)\n            OBJDUMP=$NDK_DIR/toolchains/arm-linux-androideabi-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/arm-linux-androideabi-objdump\n            ;;\n        arm64*)\n            OBJDUMP=$NDK_DIR/toolchains/aarch64-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/aarch64-linux-android-objdump\n            ;;\n        x86)\n            OBJDUMP=$NDK_DIR/toolchains/x86-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/i686-linux-android-objdump\n            ;;\n        x86_64)\n            OBJDUMP=$NDK_DIR/toolchains/x86_64-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/x86_64-linux-android-objdump\n            ;;\n        mips)\n            OBJDUMP=$NDK_DIR/toolchains/mipsel-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/mipsel-linux-android-objdump\n            ;;\n        mips64)\n            OBJDUMP=$NDK_DIR/toolchains/mips64el-linux-android-$DEFAULT_GCC_VERSION/prebuilt/$HOST_TAG/bin/mips64el-linux-android-objdump\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$BOOST_ABI'\" 1>&2\n            exit 1\n    esac\n\n    if [ ! -e $OBJDUMP ]; then\n        echo \"ERROR: Can't find $ABI objdump: $OBJDUMP\" 1>&2\n        exit 1\n    fi\n\n    echo $OBJDUMP\n}\n\nget_library_dependencies()\n{\n    local LIB=$1\n    local ABI=$2\n    local OBJDUMP=$(get_objdump_for_abi $ABI)\n\n    $OBJDUMP -p $LIB 2>/dev/null | \\\n        grep \"^ *NEEDED\\>\" | awk '{print $2}' | \\\n        grep -v \"^lib\\(c\\|dl\\|crystax\\|stdc++\\|gnustl_shared\\|c++_shared\\)\\.so$\" | \\\n        sed 's,^lib\\([^\\.]*\\)\\..*$,\\1,' | sort | uniq | grep -v '^$' | tr '\\n' ' '\n}\n\ngenerate_build_files()\n{\n    local BOOST_ABIS=$(ls -1 $BOOST_DSTDIR/libs | grep \"^\\(armeabi\\|armeabi-v7a\\|armeabi-v7a-hard\\|x86\\|mips\\|arm64-v8a\\|x86_64\\|mips64\\)\" | sort)\n    if [ -z \"$BOOST_ABIS\" ]; then\n        echo \"ERROR: Can't detect Boost ABIs!\" 1>&2\n        exit 1\n    fi\n\n    # Generate Android.mk\n    log \"Generating $BOOST_DSTDIR/Android.mk\"\n    {\n        echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n        echo \"\"\n        cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n        echo \"\"\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo ''\n        echo '__boost_libstdcxx_subdir := $(strip $(or \\'\n        echo '        $(if $(filter gnustl_static gnustl_shared,$(APP_STL)),gnu),\\'\n        echo '        $(if $(filter c++_static c++_shared,$(APP_STL)),llvm),\\'\n        echo '        $(error We do not support APP_STL '\"'\"'$(APP_STL)'\"'\"' for Boost libraries! \\'\n        echo '            Please use either \"gnustl_shared\", \"gnustl_static\", \"c++_shared\" or \"c++_static\". \\'\n        echo '        )\\'\n        echo '    ))-$(strip $(or \\'\n        echo '        $(if $(filter gnustl_static gnustl_shared,$(APP_STL)),$(or $(GCC_VERSION),$(DEFAULT_GCC_VERSION))),\\'\n        echo '        $(if $(filter c++_static c++_shared,$(APP_STL)),$(or $(LLVM_VERSION),$(DEFAULT_LLVM_VERSION))),\\'\n        echo '        $(error We do not support APP_STL '\"'\"'$(APP_STL)'\"'\"' for Boost libraries! \\'\n        echo '            Please use either \"gnustl_shared\", \"gnustl_static\", \"c++_shared\" or \"c++_static\". \\'\n        echo '        )\\'\n        echo '    ))'\n    } | cat >$BOOST_DSTDIR/Android.mk\n\n    local ALL_BOOST_LIBS=$(find $BOOST_DSTDIR/libs -name 'libboost_*' -exec basename '{}' \\; \\\n        | sed 's,^lib\\(boost_[^\\.]*\\)\\..*$,\\1,' | sort | uniq | tr '\\n' ' ')\n    log \"Found Boost libraries: '$ALL_BOOST_LIBS'\"\n\n    local BOOST_LIB\n    for BOOST_LIB in $ALL_BOOST_LIBS; do\n        log \"Determining dependencies for $BOOST_LIB ...\"\n\n        local BOOST_LIB_DEPS=\"\"\n        local BOOST_ABI\n        for BOOST_ABI in $BOOST_ABIS; do\n            local DEPS=$(get_library_dependencies $BOOST_DSTDIR/libs/$BOOST_ABI/gnu-$DEFAULT_GCC_VERSION/lib${BOOST_LIB}.so $BOOST_ABI)\n            BOOST_LIB_DEPS=\"$BOOST_LIB_DEPS $DEPS\"\n        done\n        BOOST_LIB_DEPS=$(echo \"$BOOST_LIB_DEPS\" | tr ' ' '\\n' | sort | uniq | tr '\\n' ' ' | sed 's,^ *,,' | sed 's, *$,,')\n        log \"Determined  dependencies for $BOOST_LIB: '$BOOST_LIB_DEPS'\"\n\n        local LIBTYPE\n        local SUFFIX\n        for LIBTYPE in static shared; do\n            case $LIBTYPE in\n                static)\n                    SUFFIX=a\n                    ;;\n                shared)\n                    SUFFIX=so\n                    ;;\n                *)\n                    echo \"ERROR: Wrong LIBTYPE: '$LIBTYPE' (must be either 'static' or 'shared')\" 1>&2\n                    exit 1\n            esac\n\n            local BOOST_LIB_FILE=$(find $BOOST_DSTDIR/libs -name lib${BOOST_LIB}.${SUFFIX} -exec basename '{}' \\; | sort | uniq)\n            if [ -z \"$BOOST_LIB_FILE\" ]; then\n                continue\n            fi\n\n            local LIBTYPE_UPPERCASE=$(echo $LIBTYPE | tr '[a-z]' '[A-Z]')\n\n            local FILTERED_OUT_ABIS=\"\"\n            case $BOOST_LIB in\n                boost_context|boost_coroutine)\n                    FILTERED_OUT_ABIS=\"mips64\"\n                    ;;\n            esac\n\n            {\n                echo ''\n                if [ -n \"$FILTERED_OUT_ABIS\" ]; then\n                    echo 'ifeq (,$(filter '$FILTERED_OUT_ABIS',$(TARGET_ARCH_ABI)))'\n                fi\n                echo 'include $(CLEAR_VARS)'\n                echo 'LOCAL_MODULE := '$BOOST_LIB'_'$LIBTYPE\n                echo 'LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/$(__boost_libstdcxx_subdir)/lib'$BOOST_LIB'.'$SUFFIX\n                echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n                echo 'ifneq (,$(strip $(LLVM_VERSION)))'\n                echo 'LOCAL_EXPORT_LDLIBS := -latomic'\n                echo 'endif'\n                local d\n                for d in $BOOST_LIB_DEPS; do\n                    case $d in\n                        z)\n                            echo 'LOCAL_EXPORT_LDLIBS += -l'${d}\n                            ;;\n                        *)\n                            echo \"LOCAL_${LIBTYPE_UPPERCASE}_LIBRARIES += ${d}_${LIBTYPE}\"\n                    esac\n                done\n                echo 'include $(PREBUILT_'$LIBTYPE_UPPERCASE'_LIBRARY)'\n                if [ -n \"$FILTERED_OUT_ABIS\" ]; then\n                    echo 'endif'\n                fi\n            } | cat >>$BOOST_DSTDIR/Android.mk\n        done\n    done\n\n    log \"Generated $BOOST_DSTDIR/Android.mk\"\n}\n\ngenerate_build_files\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$BOOST_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk LICENSE_1_0.txt; do\n            FILES=\"$FILES $BOOST_SUBDIR/$BOOST_VERSION/$F\"\n        done\n        PACKAGE_NAME=\"$PNAME-$BOOST_VERSION-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package Boost $BOOST_VERSION build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-cocotron.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild Cocotron for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$COCOTRON_SUBDIR, but you can override this with the --out-dir=<path>\n\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nCOCOTRON_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$COCOTRON_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the Cocotron source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$COCOTRON_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$COCOTRON_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-cocotron\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_cocotron_for_abi ()\n{\n    local ABI=$1\n    local OUTDIR=\"$2\"\n\n    dump \"Building $ABI Cocotron\"\n\n    rm -Rf $OUTDIR\n\n    run make -C $COCOTRON_SRCDIR/android -j$NUM_JOBS install \\\n        V=1 \\\n        NDK=$NDK_DIR \\\n        PREFIX=$NDK_DIR/$COCOTRON_SUBDIR/frameworks \\\n        ABIS=$ABI \\\n        LLVM_VERSION=$DEFAULT_LLVM_VERSION \\\n        GCC_VERSION=$DEFAULT_GCC_VERSION \\\n        OUT=$OUTDIR \\\n\n    fail_panic \"Couldn't build $ABI Cocotron\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"cocotron-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_cocotron_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$COCOTRON_SUBDIR/frameworks/$ABI\"\n        PACKAGE_NAME=\"cocotron-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI Cocotron binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-compiler-rt.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild compiler-rt for the Android NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$COMPILER_RT_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nSRC_DIR=\nregister_var_option \"--src-dir=<path>\" SRC_DIR \"Specify compiler-rt source dir.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nGCC_VERSION=\nregister_var_option \"--gcc-version=<ver>\" GCC_VERSION \"Specify GCC version\"\n\nLLVM_VERSION=\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-compiler-rt\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ -z \"$SRC_DIR\" -o ! -d \"$SRC_DIR\" ]; then\n    dump \"Could not found compiler-rt source directory: $SRC_DIR\"\n    dump \"Use --src-dir=<dir> to specify source directory.\"\n    exit 1\nfi\n\n# Compiler flags we want to use\nCOMPILER_RT_CFLAGS=\"-fPIC -O2 -DANDROID -D__ANDROID__ -ffunction-sections\"\nCOMPILER_RT_CFLAGS=$COMPILER_RT_CFLAGS\" -I$SRC_DIR/include -I$SRC_DIR/lib\"\nCOMPILER_RT_LDFLAGS=\"-nostdlib\"\n\n# List of sources to compile\nCOMPILER_RT_GENERIC_SOURCES=$(cd $SRC_DIR && ls lib/builtins/*.c)\n\n# filter out the sources we don't need\nUNUSED_SOURCES=\"lib/builtins/apple_versioning.c lib/builtins/gcc_personality_v0.c\"\nCOMPILER_RT_GENERIC_SOURCES=$(filter_out \"$UNUSED_SOURCES\" \"$COMPILER_RT_GENERIC_SOURCES\")\n\n# ARM specific\nCOMPILER_RT_ARM_SOURCES=\"\nlib/builtins/arm/aeabi_dcmp.S \\\nlib/builtins/arm/aeabi_div0.c \\\nlib/builtins/arm/aeabi_fcmp.S \\\nlib/builtins/arm/aeabi_idivmod.S \\\nlib/builtins/arm/aeabi_ldivmod.S \\\nlib/builtins/arm/aeabi_memcmp.S \\\nlib/builtins/arm/aeabi_memcpy.S \\\nlib/builtins/arm/aeabi_memmove.S \\\nlib/builtins/arm/aeabi_memset.S \\\nlib/builtins/arm/aeabi_uidivmod.S \\\nlib/builtins/arm/aeabi_uldivmod.S \\\nlib/builtins/arm/comparesf2.S\nlib/builtins/arm/divmodsi4.S\nlib/builtins/arm/divsi3.S\nlib/builtins/arm/modsi3.S\nlib/builtins/arm/udivmodsi4.S\nlib/builtins/arm/udivsi3.S\nlib/builtins/arm/umodsi3.S\"\n\n# X86 specific\nCOMPILER_RT_X86_SOURCES=\"\nlib/builtins/i386/ashldi3.S \\\nlib/builtins/i386/ashrdi3.S \\\nlib/builtins/i386/divdi3.S \\\nlib/builtins/i386/floatdidf.S \\\nlib/builtins/i386/floatdisf.S \\\nlib/builtins/i386/floatdixf.S \\\nlib/builtins/i386/floatundidf.S \\\nlib/builtins/i386/floatundisf.S \\\nlib/builtins/i386/floatundixf.S \\\nlib/builtins/i386/lshrdi3.S \\\nlib/builtins/i386/moddi3.S \\\nlib/builtins/i386/muldi3.S \\\nlib/builtins/i386/udivdi3.S \\\nlib/builtins/i386/umoddi3.S\"\n\n# Mips specific\nCOMPILER_RT_MIPS_SOURCES=\n\n# X86_64 specific\nCOMPILER_RT_X86_64_SOURCES=\"\nlib/builtins/x86_64/floatdidf.c \\\nlib/builtins/x86_64/floatdisf.c \\\nlib/builtins/x86_64/floatdixf.c \\\nlib/builtins/x86_64/floatundidf.S \\\nlib/builtins/x86_64/floatundisf.S \\\nlib/builtins/x86_64/floatundixf.S\n\"\n\n# If the --no-makefile flag is not used, we're going to put all build\n# commands in a temporary Makefile that we will be able to invoke with\n# -j$NUM_JOBS to build stuff in parallel.\n#\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\n# prepare_compiler_rt_source_for_abi\n# $1: ABI\nprepare_compiler_rt_source_for_abi ()\n{\n    local ABI=$1\n    local ARCH_SOURCES GENERIC_SOURCES FOUND\n\n    if [ $ABI = \"armeabi\" -o $ABI = \"armeabi-v7a\" -o $ABI = \"armeabi-v7a-hard\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_ARM_SOURCES\"\n    elif [ $ABI = \"x86\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_X86_SOURCES\"\n    elif [ $ABI = \"mips\" -o $ABI = \"mips32r6\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_MIPS_SOURCES\"\n    elif [ $ABI = \"x86_64\" ]; then\n        ARCH_SOURCES=\"$COMPILER_RT_X86_64_SOURCES\"\n    fi\n\n    for SOURCE in $COMPILER_RT_GENERIC_SOURCES; do\n        FILENAME=`basename $SOURCE`\n        FILENAME=$\"${FILENAME/\\.c/}\"\n        # if we have lib/$ABI/*.S, skip lib/*.c\n        FOUND=$(echo $ARCH_SOURCES | grep $FILENAME)\n        if [ -z \"$FOUND\" ]; then\n            GENERIC_SOURCES=\"$GENERIC_SOURCES $SOURCE\"\n        fi\n    done\n\n    echo \"$ARCH_SOURCES $GENERIC_SOURCES\"\n}\n\n# build_compiler_rt_libs_for_abi\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\n# $4: (optional) installation directory\nbuild_compiler_rt_libs_for_abi ()\n{\n    local ARCH BINPREFIX\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local TYPE=\"$3\"\n    local DSTDIR=\"$4\"\n    local GCCVER\n\n    mkdir -p \"$BUILDDIR\"\n\n    # If the output directory is not specified, use default location\n    if [ -z \"$DSTDIR\" ]; then\n        DSTDIR=$NDK_DIR/$COMPILER_RT_SUBDIR/libs/$ABI\n    fi\n\n    mkdir -p \"$DSTDIR\"\n\n    if [ -n \"$GCC_VERSION\" ]; then\n        GCCVER=$GCC_VERSION\n    else\n        local ARCH=$(convert_abi_to_arch $ABI)\n        GCCVER=$(get_default_gcc_version_for_arch $ARCH)\n    fi\n\n    if [ \"$LLVM_VERSION\" \\> \"3.4\" ]; then\n        # Turn on integrated-as for clang >= 3.5 otherwise file like\n        # can't be compiled\n        COMPILER_RT_CFLAGS=\"$COMPILER_RT_CFLAGS -fintegrated-as\"\n    fi\n\n    if [ -z \"$PLATFORM\" ]; then\n        PLATFORM=\"android-$FIRST_API64_LEVEL\"\n    fi\n\n    builder_begin_android $ABI \"$BUILDDIR\" \"$GCCVER\" \"$LLVM_VERSION\" \"$MAKEFILE\" \"$PLATFORM\"\n    builder_set_srcdir \"$SRC_DIR\"\n    builder_set_dstdir \"$DSTDIR\"\n\n    builder_cflags \"$COMPILER_RT_CFLAGS\"\n\n    if [ $ABI = \"armeabi\" -o $ABI = \"armeabi-v7a\" -o $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-D__ARM_EABI__\"\n        if [ $ABI = \"armeabi-v7a-hard\" ]; then\n            builder_cflags \"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n        fi\n    fi\n\n    builder_ldflags \"$COMPILER_RT_LDFLAGS\"\n    if [ $ABI = \"armeabi-v7a-hard\" ]; then\n        builder_cflags \"-Wl,--no-warn-mismatch -lm_hard\"\n    fi\n\n    builder_sources $(prepare_compiler_rt_source_for_abi $ABI)\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        log \"Building $DSTDIR/libcompiler_rt_static.a\"\n        builder_static_library libcompiler_rt_static\n    else\n        log \"Building $DSTDIR/libcompiler_rt_shared.so\"\n        builder_ldflags \"-lc\"\n        if [ $ABI != \"armeabi-v7a-hard\" ]; then\n            builder_ldflags \"-lm\"\n        fi\n        builder_nostdlib_shared_library libcompiler_rt_shared\n    fi\n    builder_end\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"compiler-rt-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_compiler_rt_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\"\n        build_compiler_rt_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for LIB in libcompiler_rt_static.a libcompiler_rt_shared.so; do\n            FILES=\"$FILES $COMPILER_RT_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=\"compiler-rt-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI compiler-rt binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-crystax.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild libcrystax for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$CRYSTAX_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nTOOLCHAIN_VERSION=gcc4.9\nregister_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nPATCH_SYSROOT=\nregister_option \"--patch-sysroot\" do_patch_sysroot \"Patch sysroot with CrystaX libraries after build\"\ndo_patch_sysroot() { PATCH_SYSROOT=yes; }\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-crystax\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\nbuild_crystax_libs_for_abi ()\n{\n    local ABI=$1\n    local OBJDIR=\"$2\"\n    local TYPE=\"$3\"\n\n    local V\n    if [ \"$VERBOSE2\" = \"yes\" ]; then\n        V=1\n    fi\n\n    dump \"Building $TYPE $ABI libcrystax\"\n\n    rm -Rf $OBJDIR\n    mkdir -p $OBJDIR\n    fail_panic \"Couldn't create temporary build directory $OBJDIR\"\n\n    run make -C $NDK_DIR/$CRYSTAX_SUBDIR -j$NUM_JOBS $TYPE V=$V NDK=$NDK_DIR ABI=$ABI OBJDIR=$OBJDIR TVS=$TOOLCHAIN_VERSION\n    fail_panic \"Couldn't build $TYPE libcrystax\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"crystax-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_crystax_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\"\n        build_crystax_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\"\n    fi\ndone\n\nif [ -n \"$BUILT_ABIS\" ]; then\n    $NDK_DIR/$CRYSTAX_SUBDIR/bin/check-symbols --abis=$(spaces_to_commas $BUILT_ABIS)\n    fail_panic \"Symbols check failed\"\nfi\n\nif [ \"$PATCH_SYSROOT\" = \"yes\" ]; then\n    $NDK_DIR/$CRYSTAX_SUBDIR/bin/patch-sysroot --libraries --fast-copy\n    fail_panic \"Couldn't patch sysroot with CrystaX libraries\"\nfi\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for MLIB in $($NDK_DIR/$CRYSTAX_SUBDIR/bin/config --multilibs --abi=$ABI); do\n            LIBPATH=$($NDK_DIR/$CRYSTAX_SUBDIR/bin/config --libpath --abi=$ABI --multilib=$MLIB)\n            for LIB in libcrystax.a libcrystax.so stubs/libbionicstub.so; do\n                FILES=\"$FILES $CRYSTAX_SUBDIR/$LIBPATH/$LIB\"\n            done\n        done\n        PACKAGE_NAME=\"crystax-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI libcrystax binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-gcc.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Packages the platform's GCC for the NDK.\"\"\"\nimport os\nimport site\nimport subprocess\nimport sys\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\nclass ArgParser(build_support.ArgParser):\n    def __init__(self):  # pylint: disable=super-on-old-class\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Architecture to build. Builds all if not present.')\n\n\ndef get_gcc_prebuilt_path(host):\n    rel_prebuilt_path = 'prebuilts/ndk/current/toolchains/{}'.format(host)\n    prebuilt_path = os.path.join(build_support.android_path(),\n                                 rel_prebuilt_path)\n    if not os.path.isdir(prebuilt_path):\n        sys.exit('Could not find prebuilt GCC at {}'.format(prebuilt_path))\n    return prebuilt_path\n\n\ndef package_gcc(package_dir, host_tag, arch, version):\n    toolchain_name = build_support.arch_to_toolchain(arch) + '-' + version\n    prebuilt_path = get_gcc_prebuilt_path(host_tag)\n\n    package_name = 'gcc-{}-{}.zip'.format(arch, host_tag)\n    package_path = os.path.join(package_dir, package_name)\n    if os.path.exists(package_path):\n        os.unlink(package_path)\n    os.chdir(prebuilt_path)\n    subprocess.check_call(\n        ['zip', '-9qr', package_path, toolchain_name])\n\n\ndef main(args):\n    GCC_VERSION = '4.9'\n\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    host_tag = build_support.host_to_tag(args.host)\n    for arch in arches:\n        package_gcc(args.dist_dir, host_tag, arch, GCC_VERSION)\n\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "build/tools/build-gdb-stub.sh",
    "content": "#!/bin/bash\n\nNDK_BUILDTOOLS_PATH=\"$(dirname $0)\"\n. \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\"\n. \"$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh\"\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\"\\\nThis program is used to build the gdb stub for Windows and replace a\ngdb executable with it. Because of the replacing nature of this, I\ncheck to see if there's a gdb-orig.exe there already and if so, 'undo'\nthe process first by putting it back. Sample usage:\n\n$0 --gdb-executable-path=\\$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/bin/arm-linux-androideabi-gdb.exe \\\\\n   --python-prefix-dir=\\$NDK/prebuilt/windows \\\\\n   --mingw-w64-gcc-path=\\$HOME/i686-w64-mingw32/bin/i686-w64-mingw32-gcc\n\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\n\nPYTHON_PREFIX_DIR=\nregister_var_option \"--python-prefix-dir=<path>\" PYTHON_PREFIX_DIR \"Python prefix directory.\"\n\nGDB_EXECUTABLE_PATH=\nregister_var_option \"--gdb-executable-path=<path>\" GDB_EXECUTABLE_PATH \"GDB executable file to stubify.\"\n\nMINGW_W64_GCC=\nregister_var_option \"--mingw-w64-gcc=<program>\" MINGW_W64_GCC \"MinGW-w64 gcc program to use.\"\n\nDEBUG_STUB=\nregister_var_option \"--debug\" DEBUG_STUB \"Build stub in debug mode.\"\n\nextract_parameters \"$@\"\n\nif [ -n \"$DEBUG_STUB\" ]; then\n    STUB_CFLAGS=\"-O0 -g -D_DEBUG\"\nelse\n    STUB_CFLAGS=\"-O2 -s -DNDEBUG\"\nfi\n\nif [ ! -f \"$GDB_EXECUTABLE_PATH\" ]; then\n    panic \"GDB executable $GDB_EXECUTABLE_PATH doesn't exist!\"\nfi\n\nif [ ! -d \"$PYTHON_PREFIX_DIR\" ]; then\n    panic \"Python prefix dir $PYTHON_PREFIX_DIR doesn't exist!\"\nfi\n\nif [ -z \"$MINGW_W64_GCC\" ]; then\n    panic \"Please specify an existing MinGW-w64 cross compiler with --mingw-w64-gcc=<program>\"\nfi\n\nGDB_BIN_DIR=$(cd $(dirname \"$GDB_EXECUTABLE_PATH\"); pwd)\nPYTHON_PREFIX_DIR=$(cd \"$PYTHON_PREFIX_DIR\"; pwd)\nPYTHON_BIN_DIR=${PYTHON_PREFIX_DIR}/bin\n\n# Sed is used to get doubled up Windows style dir separators.\nGDB_TO_PYTHON_REL_DIR=$(relpath \"$GDB_BIN_DIR\" \"$PYTHON_BIN_DIR\" | sed -e s./.\\\\\\\\\\\\\\\\.g)\nPYTHONHOME_REL_DIR=$(relpath \"$GDB_BIN_DIR\" \"$PYTHON_PREFIX_DIR\" | sed -e s./.\\\\\\\\\\\\\\\\.g)\ndump \"GDB_TO_PYTHON_REL_DIR=$GDB_TO_PYTHON_REL_DIR\"\ndump \"PYTHONHOME_REL_DIR=$PYTHONHOME_REL_DIR\"\n\nGDB_EXECUTABLE_ORIG=$(dirname \"$GDB_EXECUTABLE_PATH\")/$(basename \"$GDB_EXECUTABLE_PATH\" \".exe\")-orig.exe\nif [ -f \"$GDB_EXECUTABLE_ORIG\" ] ; then\n    echo \"Warning : Found an existing gdb-stub called $GDB_EXECUTABLE_ORIG so will un-do a previous run of this script.\"\n    cp \"$GDB_EXECUTABLE_ORIG\" \"$GDB_EXECUTABLE_PATH\"\nfi\ncp \"$GDB_EXECUTABLE_PATH\" \"$GDB_EXECUTABLE_ORIG\"\n\nGDB_EXECUTABLE_ORIG_FILENAME=$(basename \"$GDB_EXECUTABLE_ORIG\")\n\n# Build the stub in-place of the real gdb.\nrun $MINGW_W64_GCC $STUB_CFLAGS \"$NDK_DIR/sources/host-tools/gdb-stub/gdb-stub.c\" \\\n                    -o \"$GDB_EXECUTABLE_PATH\" \\\n                    -DGDB_TO_PYTHON_REL_DIR=\\\"$GDB_TO_PYTHON_REL_DIR\\\" \\\n                    -DPYTHONHOME_REL_DIR=\\\"$PYTHONHOME_REL_DIR\\\" \\\n                    -DGDB_EXECUTABLE_ORIG_FILENAME=\\\"$GDB_EXECUTABLE_ORIG_FILENAME\\\"\n\nfail_panic \"Can't build gdb stub!\"\n\ndump \"GDB Stub done!\"\n"
  },
  {
    "path": "build/tools/build-gdbserver.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds gdbserver for Android.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\n\nimport build_support\n\n\nclass ArgParser(build_support.ArgParser):\n    def __init__(self):\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Architectures to build. Builds all if not present.')\n\n\ndef main(args):\n    GCC_VERSION = '4.9'\n\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    print('Building gdbservers: {}'.format(' '.join(arches)))\n    for arch in arches:\n        toolchain = build_support.arch_to_toolchain(arch)\n        toolchain_name = '-'.join([toolchain, GCC_VERSION])\n        build_cmd = [\n            'bash', 'build-gdbserver.sh', build_support.toolchain_path(),\n            build_support.ndk_path(), toolchain_name, build_support.jobs_arg(),\n        ]\n\n        build_support.build(build_cmd, args)\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "build/tools/build-gdbserver.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the gdbserver binary from\n#  the Android NDK's prebuilt binaries.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the gdbserver prebuilt binary for the Android NDK toolchain.\n\nWhere <src-dir> is the location of the gdbserver sources,\n<ndk-dir> is the top-level NDK installation path and <toolchain>\nis the name of the toolchain to use (e.g. arm-linux-androideabi-4.8).\n\nThe final binary is placed under:\n\n    <ndk-dir>/toolchains <toolchain>/prebuilt/gdbserver\n\nNOTE: The --platform option is ignored if --sysroot is used.\"\n\nVERBOSE=no\n\nOPTION_BUILD_OUT=\nBUILD_OUT=$TMPDIR/build/gdbserver\nregister_option \"--build-out=<path>\" do_build_out \"Set temporary build directory\"\ndo_build_out () { OPTION_BUILD_OUT=\"$1\"; }\n\nSYSROOT=\nregister_var_option \"--sysroot=<path>\" SYSROOT \"Specify sysroot directory directly\"\n\nNOTHREADS=no\nregister_var_option \"--disable-threads\" NOTHREADS \"Disable threads support\"\n\nGDB_VERSION=\nregister_var_option \"--gdb-version=<name>\" GDB_VERSION \"Use specific gdb version.\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nsetup_default_log_file\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n    GDBVER=\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ -n \"$GDB_VERSION\" ]; then\n        GDBVER=$GDB_VERSION\n    else\n        GDBVER=$(get_default_gdbserver_version_for_gcc $TOOLCHAIN)\n    fi\n\n    SRC_DIR2=\"$SRC_DIR/gdb/gdb-$GDBVER/gdb/gdbserver\"\n    if [ -d \"$SRC_DIR2\" ] ; then\n        SRC_DIR=\"$SRC_DIR2\"\n        log \"Found gdbserver source directory: $SRC_DIR\"\n    fi\n\n    if [ ! -f \"$SRC_DIR/gdbreplay.c\" ] ; then\n        echo \"ERROR: Source directory does not contain gdbserver sources: $SRC_DIR\"\n        exit 1\n    fi\n\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exist: $NDK_DIR\"\n        exit 1\n    fi\n\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\nprepare_target_build\n\nparse_toolchain_name $TOOLCHAIN\ncheck_toolchain_install $ANDROID_BUILD_TOP/prebuilts/ndk/current $TOOLCHAIN\n\nPLATFORM=\"android-$LATEST_API_LEVEL\"\n\n# Check build directory\n#\nfix_sysroot \"$SYSROOT\"\nlog \"Using sysroot: $SYSROOT\"\n\nif [ -n \"$OPTION_BUILD_OUT\" ] ; then\n    BUILD_OUT=\"$OPTION_BUILD_OUT\"\nfi\nlog \"Using build directory: $BUILD_OUT\"\nrun rm -rf \"$BUILD_OUT\"\nrun mkdir -p \"$BUILD_OUT\"\n\n# Copy the sysroot to a temporary build directory\nBUILD_SYSROOT=\"$BUILD_OUT/sysroot\"\nrun mkdir -p \"$BUILD_SYSROOT\"\nrun cp -RHL \"$SYSROOT\"/* \"$BUILD_SYSROOT\"\n\nLIBDIR=$(get_default_libdir_for_arch $ARCH)\n\n# Remove libthread_db to ensure we use exactly the one we want.\nrm -f $BUILD_SYSROOT/usr/$LIBDIR/libthread_db*\nrm -f $BUILD_SYSROOT/usr/include/thread_db.h\n\nif [ \"$NOTHREADS\" != \"yes\" ] ; then\n    # We're going to rebuild libthread_db.o from its source\n    # that is under sources/android/libthread_db and place its header\n    # and object file into the build sysroot.\n    LIBTHREAD_DB_DIR=$ANDROID_NDK_ROOT/sources/android/libthread_db\n    if [ ! -d \"$LIBTHREAD_DB_DIR\" ] ; then\n        dump \"ERROR: Missing directory: $LIBTHREAD_DB_DIR\"\n        exit 1\n    fi\n\n    run cp $LIBTHREAD_DB_DIR/thread_db.h $BUILD_SYSROOT/usr/include/\n    run $TOOLCHAIN_PREFIX-gcc --sysroot=$BUILD_SYSROOT -o $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.o -c $LIBTHREAD_DB_DIR/libthread_db.c\n    run $TOOLCHAIN_PREFIX-ar -rD $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.a $BUILD_SYSROOT/usr/$LIBDIR/libthread_db.o\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Could not compile libthread_db.c!\"\n        exit 1\n    fi\nfi\n\nlog \"Using build sysroot: $BUILD_SYSROOT\"\n\n# configure the gdbserver build now\ndump \"Configure: $TOOLCHAIN gdbserver-$GDBVER build with $PLATFORM\"\n\n# This flag is required to link libthread_db statically to our\n# gdbserver binary. Otherwise, the program will try to dlopen()\n# the threads binary, which is not possible since we build a\n# static executable.\nCONFIGURE_FLAGS=\"--with-libthread-db=$BUILD_SYSROOT/usr/$LIBDIR/libthread_db.a\"\n# Disable libinproctrace.so which needs crtbegin_so.o and crtbend_so.o instead of\n# CRTBEGIN/END above.  Clean it up and re-enable it in the future.\nCONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --disable-inprocess-agent\"\n# gdb 7.7 builds with -Werror by default, but they redefine constants such as\n# HWCAP_VFPv3 in a way that's compatible with glibc's headers but not our\n# kernel uapi headers. We should send a patch upstream to add the missing\n# #ifndefs, but for now just build gdbserver without -Werror.\nCONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --enable-werror=no\"\n\ncd $BUILD_OUT &&\nexport CC=\"$TOOLCHAIN_PREFIX-gcc --sysroot=$BUILD_SYSROOT\" &&\nexport AR=\"$TOOLCHAIN_PREFIX-ar\" &&\nexport RANLIB=\"$TOOLCHAIN_PREFIX-ranlib\" &&\nexport CFLAGS=\"-O2 $GDBSERVER_CFLAGS\"  &&\nexport LDFLAGS=\"-static -Wl,-z,nocopyreloc -Wl,--no-undefined\" &&\nrun $SRC_DIR/configure \\\n--host=$GDBSERVER_HOST \\\n$CONFIGURE_FLAGS\nif [ $? != 0 ] ; then\n    dump \"Could not configure gdbserver build. See $TMPLOG\"\n    exit 1\nfi\n\n# build gdbserver\ndump \"Building : $TOOLCHAIN gdbserver.\"\ncd $BUILD_OUT &&\nrun make -j$NUM_JOBS\nif [ $? != 0 ] ; then\n    dump \"Could not build $TOOLCHAIN gdbserver. Use --verbose to see why.\"\n    exit 1\nfi\n\n# install gdbserver\n#\n# note that we install it in the toolchain bin directory\n# not in $SYSROOT/usr/bin\n#\nif [ \"$NOTHREADS\" = \"yes\" ] ; then\n    DSTFILE=\"gdbserver-nothreads\"\nelse\n    DSTFILE=\"gdbserver\"\nfi\ndump \"Install  : $TOOLCHAIN $DSTFILE.\"\nINSTALL_DIR=`mktemp -d $TMPDIR/gdbserver.XXXXXX`\nGDBSERVER_SUBDIR=\"gdbserver-$ARCH\"\nDEST=$INSTALL_DIR/$GDBSERVER_SUBDIR\nmkdir -p $DEST &&\nrun $TOOLCHAIN_PREFIX-objcopy --strip-unneeded $BUILD_OUT/gdbserver $DEST/$DSTFILE\nif [ $? != 0 ] ; then\n    dump \"Could not install $DSTFILE. See $TMPLOG\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    make_repo_prop \"$INSTALL_DIR/$GDBSERVER_SUBDIR\"\n    cp \"$SRC_DIR/../../COPYING\" \"$DEST/NOTICE\"\n    fail_panic \"Could not copy license file!\"\n\n    ARCHIVE=gdbserver-$ARCH.zip\n    dump \"Packaging: $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$INSTALL_DIR\" \"$GDBSERVER_SUBDIR\"\nfi\n\nlog \"Cleaning up.\"\nif [ -z \"$OPTION_BUILD_OUT\" ] ; then\n    run rm -rf $BUILD_OUT\nfi\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/tools/build-gnustep-libobjc2.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild GNUstep libobjc2 for the Android NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$GNUSTEP_OBJC2_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nTOOLCHAIN_VERSION=clang${DEFAULT_LLVM_VERSION}\nregister_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBOBJC2_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBOBJC2_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the GNUstep libobjc2 source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBOBJC2_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBOBJC2_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnustep-libobjc2\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\nbuild_libobjc2_for_abi ()\n{\n    local ABI=$1\n    local BLDDIR=\"$2\"\n\n    local BUILDDIR=\"$BLDDIR/build\"\n    local INSTALLDIR=\"$BLDDIR/install\"\n\n    mkdir -p \"$BUILDDIR\"\n    fail_panic \"Couldn't create GNUstep libobjc2 build directory for $ABI\"\n\n    dump \"=== Building GNUstep libobjc2 for $ABI\"\n    run make -C $LIBOBJC2_SRCDIR/android -j$NUM_JOBS install \\\n        WITH_TESTS=NO \\\n        BUILDDIR=\"$BUILDDIR\" \\\n        INSTALLDIR=\"$INSTALLDIR\" \\\n        NDK=\"$NDK_DIR\" \\\n        ABI=$ABI \\\n        TOOLCHAIN_VERSION=$TOOLCHAIN_VERSION \\\n        VERBOSE=1\n\n    fail_panic \"Couldn't build GNUstep libobjc2 for $ABI\"\n\n    if [ -z \"$OBJC2_HEADERS_INSTALLED\" ]; then\n        run rm -Rf $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include\n        run mkdir -p $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include\n        fail_panic \"Can't create directory for headers\"\n\n        run cp -r $INSTALLDIR/include/* $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/include/\n        fail_panic \"Can't install headers\"\n\n        OBJC2_HEADERS_INSTALLED=yes\n        export OBJC2_HEADERS_INSTALLED\n    fi\n\n    run rm -Rf $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    run mkdir -p $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    fail_panic \"Can't create directory for $ABI libraries\"\n\n    run cp $INSTALLDIR/lib/* $NDK_DIR/$GNUSTEP_OBJC2_SUBDIR/libs/$ABI\n    fail_panic \"Can't install $ABI libraries\"\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"gnustep-objc2-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_NAME\" \"$PACKAGE_DIR\" no_exit\n    if [ $? -eq 0 ]; then\n        OBJC2_HEADERS_NEED_PACKAGE=no\n    else\n        OBJC2_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nOBJC2_HEADERS_INSTALLED=\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"gnustep-objc2-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            if [ \"$OBJC2_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libobjc2_for_abi $ABI \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$OBJC2_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=$GNUSTEP_OBJC2_SUBDIR/include\n        PACKAGE_NAME=\"gnustep-objc2-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package GNUstep objc2 headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        for LIB in libobjc.so; do\n            FILES=\"$FILES $GNUSTEP_OBJC2_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=\"gnustep-objc2-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI GNUstep objc2 binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-icu.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild ICU libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$ICU_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nTOOLCHAIN_VERSION=4.9\n#register_var_option \"--toolchain-version=<ver>\" TOOLCHAIN_VERSION \"Specify toolchain version\"\n\nICU_VERSION=$(echo $ICU_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\nregister_var_option \"--version=<ver>\" ICU_VERSION \"ICU version\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nICU_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$ICU_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the ICU source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$ICU_SRCDIR\" ]; then\n    echo \"ERROR: Not a directory: '$ICU_SRCDIR'\"\n    exit 1\nfi\n\nICU_TAG=release-$(echo $ICU_VERSION | tr '.' '-')\nGITHASH=$(git -C $ICU_SRCDIR rev-parse --verify $ICU_TAG 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag $ICU_TAG in $ICU_SRCDIR\" 1>&2\n    exit 1\nfi\n\nICU_DSTDIR=$NDK_DIR/$ICU_SUBDIR/$ICU_VERSION\nmkdir -p $ICU_DSTDIR\nfail_panic \"Could not create ICU $ICU_VERSION destination directory: $ICU_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-icu\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nTMP_SRCDIR=\"$BUILD_DIR/src\"\nrun git clone -b $ICU_TAG $ICU_SRCDIR $TMP_SRCDIR\nfail_panic \"Can't copy icu-$ICU_VERSION sources to temporary directory\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\nmktool()\n{\n    local tool\n    for tool in \"$@\"; do\n        cat >$tool\n        fail_panic \"Could not create tool $tool\"\n        chmod +x $tool\n        fail_panic \"Could not chmod +x $tool\"\n    done\n}\n\n# $1: build directory\nbuild_icu_for_host()\n{\n    local BUILDDIR=\"$1\"\n\n    dump \"Building ICU $ICU_VERSION host ($HOST_OS) binaries\"\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    cd $BUILDDIR\n    fail_panic \"Couldn't CD to temporary build directory $BUILDDIR\"\n\n    local TMPHOSTTCDIR=$BUILDDIR/host-bin\n    run mkdir $TMPHOSTTCDIR\n    fail_panic \"Couldn't create temporary directory for host toolchain wrappers\"\n\n    {\n        echo \"#!/bin/sh\"\n        echo \"\"\n        echo \"exec $CC $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n    } | mktool $TMPHOSTTCDIR/gcc\n\n    {\n        echo \"#!/bin/sh\"\n        echo \"\"\n        echo \"exec $CXX $HOST_CFLAGS $HOST_LDFLAGS \\\"\\$@\\\"\"\n    } | mktool $TMPHOSTTCDIR/g++\n\n    PATH=$TMPHOSTTCDIR:$SAVED_PATH\n    export PATH\n\n    local ICU_HOST_OS\n    case $HOST_OS in\n        darwin)\n            ICU_HOST_OS=MacOSX/GCC\n            ;;\n        linux)\n            ICU_HOST_OS=Linux/gcc\n            ;;\n        *)\n            echo \"ERROR: Unsupported host OS: $HOST_OS\" 1>&2\n            exit 1\n    esac\n\n    run $TMP_SRCDIR/source/runConfigureICU $ICU_HOST_OS\n    fail_panic \"Couldn't configure host build of ICU $ICU_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't build host ICU $ICU_VERSION\"\n}\n\n# $1: ABI\n# $2: host ICU build directory\n# $3: build directory\nbuild_icu_for_abi ()\n{\n    local ABI=$1\n    local ICUHOSTBUILDDIR=\"$2\"\n    local BUILDDIR=\"$3\"\n\n    dump \"Building ICU $ICU_VERSION $ABI libraries\"\n\n    local APILEVEL=9\n    if [ ${ABI%%64*} != ${ABI} ]; then\n        APILEVEL=21\n    fi\n\n    rm -Rf $BUILDDIR\n    mkdir -p $BUILDDIR\n    fail_panic \"Couldn't create temporary build directory $BUILDDIR\"\n\n    local TCNAME\n    case $ABI in\n        armeabi*)\n            TCNAME=arm-linux-androideabi\n            ;;\n        arm64*)\n            TCNAME=aarch64-linux-android;\n            ;;\n        mips)\n            TCNAME=mipsel-linux-android\n            ;;\n        mips64)\n            TCNAME=mips64el-linux-android\n            ;;\n        x86|x86_64)\n            TCNAME=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    local TCPREFIX\n    case $ABI in\n        x86)\n            TCPREFIX=i686-linux-android\n            ;;\n        x86_64)\n            TCPREFIX=x86_64-linux-android\n            ;;\n        *)\n            TCPREFIX=$TCNAME\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm;\n            ;;\n        arm64*)\n            ARCH=arm64;\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    local FLAGS LFLAGS\n    case $ABI in\n        armeabi)\n            FLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            ;;\n        armeabi-v7a-hard)\n            FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            LFLAGS=\"-Wl,--fix-cortex-a8\"\n            LFLAGS=\"$LFLAGS -Wl,--no-warn-mismatch\"\n            ;;\n        arm64-v8a)\n            FLAGS=\"\"\n            ;;\n        x86)\n            FLAGS=\"-m32\"\n            ;;\n        x86_64)\n            FLAGS=\"-m64\"\n            ;;\n        mips)\n            FLAGS=\"-mabi=32 -mips32\"\n            ;;\n        mips64)\n            FLAGS=\"-mabi=64 -mips64r6\"\n            ;;\n    esac\n\n    local TCPATH=$NDK_DIR/toolchains/$TCNAME-$TOOLCHAIN_VERSION/prebuilt/$HOST_TAG\n\n    local TMPTARGETTCDIR=$BUILDDIR/target-bin\n    run mkdir $TMPTARGETTCDIR\n    fail_panic \"Couldn't create temporary directory for target $ABI toolchain wrappers\"\n\n    local SYSROOT=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\n    local LIBCRYSTAX=$NDK_DIR/$CRYSTAX_SUBDIR\n    local GNULIBCXX=$NDK_DIR/sources/cxx-stl/gnu-libstdc++/$TOOLCHAIN_VERSION\n\n    FLAGS=\"$FLAGS --sysroot=$SYSROOT\"\n    FLAGS=\"$FLAGS -fPIC\"\n    FLAGS=\"$FLAGS -DU_USING_ICU_NAMESPACE=0\"\n    FLAGS=\"$FLAGS -DU_CHARSET_IS_UTF8=1\"\n\n    local TOOL\n\n    for TOOL in gcc g++ cpp; do\n        mktool $TMPTARGETTCDIR/$TOOL <<EOF\n#!/bin/sh\n\nif echo \"\\$@\" | tr ' ' '\\\\n' | grep -q -x -e -c; then\n    LINKER=no\nelse\n    LINKER=yes\nfi\n\n# Remove any -m32/-m64 from input parameters\nPARAMS=\\`echo \"\\$@\" | tr ' ' '\\\\n' | grep -v -x -e -m32 | grep -v -x -e -m64 | tr '\\\\n' ' '\\`\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    # Fix SONAME for shared libraries\n    NPARAMS=\"\"\n    SONAME_DETECTED=no\n    for p in \\$PARAMS; do\n        if [ \"x\\$p\" = \"x-Wl,-soname\" -o \"x\\$p\" = \"x-Wl,-h\" ]; then\n            SONAME_DETECTED=yes\n        elif [ \"x\\$SONAME_DETECTED\" = \"xyes\" ]; then\n            p=\\`echo \\$p | sed 's!^\\\\(-Wl,lib[^\\\\.]*\\\\.so\\\\)\\\\..*\\$!\\\\1!'\\`\n            SONAME_DETECTED=no\n        fi\n        NPARAMS=\"\\$NPARAMS \\$p\"\n    done\n    PARAMS=\\$NPARAMS\nfi\n\nFLAGS=\"$FLAGS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    FLAGS=\"\\$FLAGS $LFLAGS\"\n    FLAGS=\"\\$FLAGS -L$GNULIBCXX/libs/$ABI\"\n    FLAGS=\"\\$FLAGS -L$LIBCRYSTAX/libs/$ABI\"\nelse\n    FLAGS=\"\\$FLAGS -I$GNULIBCXX/include\"\n    FLAGS=\"\\$FLAGS -I$GNULIBCXX/libs/$ABI/include\"\n    FLAGS=\"\\$FLAGS -I$LIBCRYSTAX/include\"\nfi\n\nPARAMS=\"\\$FLAGS \\$PARAMS\"\nif [ \"x\\$LINKER\" = \"xyes\" ]; then\n    PARAMS=\"\\$PARAMS -lgnustl_shared\"\nfi\n\nexec $TCPATH/bin/$TCPREFIX-$TOOL \\$PARAMS\nEOF\n        fail_panic \"Could not create target tool $TOOL\"\n    done\n\n    for TOOL in as ar ranlib strip; do\n        {\n            echo \"#!/bin/sh\"\n            echo \"exec $TCPATH/bin/$TCPREFIX-$TOOL \\\"\\$@\\\"\"\n        } | mktool $TMPTARGETTCDIR/$TOOL\n        fail_panic \"Could not create target tool $TOOL\"\n    done\n\n    PATH=$TMPTARGETTCDIR:$SAVED_PATH\n    export PATH\n\n    local TMPTARGETBUILD=$BUILDDIR/target-build\n    run mkdir -p $TMPTARGETBUILD\n    fail_panic \"Couldn't create temporary directory for $ABI target build\"\n\n    cd $TMPTARGETBUILD\n    fail_panic \"Couldn't CD to temporary directory for $ABI target build\"\n\n    CC=gcc\n    CXX=g++\n    CPP=cpp\n    export CC CXX CPP\n\n    local PREFIX=$BUILDDIR/install\n\n    run $TMP_SRCDIR/source/configure        \\\n        --prefix=$PREFIX                    \\\n        --host=$TCPREFIX                    \\\n        --with-cross-build=$ICUHOSTBUILDDIR \\\n        --enable-shared                     \\\n        --enable-static                     \\\n\n    fail_panic \"Couldn't configure $ABI ICU $ICU_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't build $ABI ICU $ICU_VERSION\"\n\n    run make install\n    fail_panic \"Couldn't install $ABI ICU $ICU_VERSION\"\n\n    if [ \"$ICU_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install ICU $ICU_VERSION headers into $ICU_DSTDIR\"\n        run rm -Rf $ICU_DSTDIR/include\n        run cp -pR $PREFIX/include $ICU_DSTDIR/\n        fail_panic \"Couldn't install ICU $ICU_VERSION headers\"\n        ICU_HEADERS_INSTALLED=yes\n        export ICU_HEADERS_INSTALLED\n    fi\n\n    log \"Install ICU $ICU_VERSION $ABI libraries into $ICU_DSTDIR\"\n    run mkdir -p $ICU_DSTDIR/libs/$ABI\n    fail_panic \"Couldn't create ICU $ICU_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        run rm -f $ICU_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n\n        for f in $(find $PREFIX -name \"lib*.$LIBSUFFIX\" -print); do\n            run cp -pRH $f $ICU_DSTDIR/libs/$ABI/$(basename $f)\n            fail_panic \"Couldn't install ICU $ICU_VERSION target $ABI $(basename $f)\"\n        done\n    done\n\n    log \"ICU $ICU_VERSION $ABI binaries built successfully\"\n}\n\nSAVED_PATH=$PATH\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"icu-$ICU_VERSION-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        ICU_BUILD_FILES_NEED_PACKAGE=no\n    else\n        ICU_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"icu-$ICU_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        ICU_HEADERS_NEED_PACKAGE=no\n    else\n        ICU_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"icu-$ICU_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$ICU_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        if [ -z \"$ICU_HOST_BUILD\" ]; then\n            build_icu_for_host \"$BUILD_DIR/host\"\n            ICU_HOST_BUILD=\"$BUILD_DIR/host\"\n        fi\n        build_icu_for_abi $ABI \"$ICU_HOST_BUILD\" \"$BUILD_DIR/$ABI/shared\"\n    fi\ndone\n\n# Restore PATH\nPATH=$SAVED_PATH\nexport PATH\n\n# Copy license\nlog \"Copying ICU $ICU_VERSION license\"\nrun cp -f $TMP_SRCDIR/license.html $ICU_DSTDIR/\nfail_panic \"Couldn't copy ICU $ICU_VERSION license\"\n\n# Generate Android.mk\nlog \"Generating $ICU_DSTDIR/Android.mk\"\n{\n    echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n    echo \"\"\n    cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n    echo \"\"\n    echo 'LOCAL_PATH := $(call my-dir)'\n\n    for suffix in a so; do\n        if [ \"$suffix\" = \"a\" ]; then\n            type=static\n        else\n            type=shared\n        fi\n        find $ICU_DSTDIR/libs -name \"libicu*.$suffix\" -exec basename '{}' \\; | \\\n            sed \"s,^lib\\\\([^\\\\.]*\\\\)\\\\.${suffix}$,\\\\1,\" | sort | uniq | \\\n        {\n            while read lib; do\n                echo ''\n                echo 'include $(CLEAR_VARS)'\n                echo \"LOCAL_MODULE := ${lib}_${type}\"\n                echo \"LOCAL_SRC_FILES := libs/\\$(TARGET_ARCH_ABI)/lib${lib}.${suffix}\"\n                echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n                echo \"include \\$(PREBUILT_$(echo $type | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n            done\n        }\n    done\n} | cat >$ICU_DSTDIR/Android.mk\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$ICU_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk license.html; do\n            FILES=\"$FILES $ICU_SUBDIR/$ICU_VERSION/$F\"\n        done\n        PACKAGE_NAME=\"icu-$ICU_VERSION-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package ICU $ICU_VERSION build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    if [ \"$ICU_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$ICU_SUBDIR/$ICU_VERSION/include\"\n        PACKAGE_NAME=\"icu-$ICU_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package ICU $ICU_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$ICU_SUBDIR/$ICU_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"icu-$ICU_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI ICU $ICU_VERSION binaries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-libjpeg-turbo.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libjpeg-turbo binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libjpeg-turbo source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBJPEGTURBO_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBJPEGTURBO_VERSION=\nregister_var_option \"--version=<ver>\" LIBJPEGTURBO_VERSION \"Specify libjpeg-turbo version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBJPEGTURBO_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBJPEGTURBO_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libjpeg-turbo source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBJPEGTURBO_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBJPEGTURBO_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBJPEGTURBO_VERSION\" ]; then\n    echo \"ERROR: Please specify libjpeg-turbo version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBJPEGTURBO_SRCDIR rev-parse --verify v$LIBJPEGTURBO_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBJPEGTURBO_VERSION in $LIBJPEGTURBO_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBJPEGTURBO_DSTDIR=$NDK_DIR/$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION\nmkdir -p $LIBJPEGTURBO_DSTDIR\nfail_panic \"Can't create libjpeg-turbo-$LIBJPEGTURBO_VERSION destination directory: $LIBJPEGTURBO_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libjpeg-turbo\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libjpeg_turbo_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libjpeg-turbo-$LIBJPEGTURBO_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBJPEGTURBO_VERSION $LIBJPEGTURBO_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libjpeg-turbo-$LIBJPEGTURBO_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,\\.so.*$,.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    local EXTRA_OPTS=\"\"\n    case $ABI in\n        mips)\n            EXTRA_OPTS=\"--without-simd\"\n    esac\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --disable-ld-version-script \\\n        $EXTRA_OPTS\n\n    fail_panic \"Can't configure $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION\"\n\n    if [ \"$LIBJPEGTURBO_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libjpeg-turbo-$LIBJPEGTURBO_VERSION headers into $LIBJPEGTURBO_DSTDIR\"\n\n        run rm -Rf $LIBJPEGTURBO_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBJPEGTURBO_DSTDIR/\n        fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION headers\"\n\n        LIBJPEGTURBO_HEADERS_INSTALLED=yes\n        export LIBJPEGTURBO_HEADERS_INSTALLED\n    fi\n\n    log \"Install libjpeg-turbo-$LIBJPEGTURBO_VERSION $ABI libraries into $LIBJPEGTURBO_DSTDIR\"\n    run mkdir -p $LIBJPEGTURBO_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libjpeg-turbo-$LIBJPEGTURBO_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBJPEGTURBO_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBJPEGTURBO_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBJPEGTURBO_HEADERS_NEED_PACKAGE=no\n    else\n        LIBJPEGTURBO_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBJPEGTURBO_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libjpeg_turbo_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBJPEGTURBO_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION/include\"\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libjpeg-turbo-$LIBJPEGTURBO_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBJPEGTURBO_SUBDIR/$LIBJPEGTURBO_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libjpeg-turbo-$LIBJPEGTURBO_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libjpeg-turbo-$LIBJPEGTURBO_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-libjpeg.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libjpeg binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libjpeg source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBJPEG_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBJPEG_VERSION=\nregister_var_option \"--version=<ver>\" LIBJPEG_VERSION \"Specify libjpeg version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBJPEG_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBJPEG_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libjpeg source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBJPEG_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBJPEG_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBJPEG_VERSION\" ]; then\n    echo \"ERROR: Please specify libjpeg version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBJPEG_SRCDIR rev-parse --verify v$LIBJPEG_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBJPEG_VERSION in $LIBJPEG_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBJPEG_DSTDIR=$NDK_DIR/$LIBJPEG_SUBDIR/$LIBJPEG_VERSION\nmkdir -p $LIBJPEG_DSTDIR\nfail_panic \"Can't create libjpeg-$LIBJPEG_VERSION destination directory: $LIBJPEG_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libjpeg\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libjpeg_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libjpeg-$LIBJPEG_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBJPEG_VERSION $LIBJPEG_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libjpeg-$LIBJPEG_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,\\.so.*$,.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --disable-ld-version-script \\\n\n    fail_panic \"Can't configure $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION\"\n\n    if [ \"$LIBJPEG_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libjpeg-$LIBJPEG_VERSION headers into $LIBJPEG_DSTDIR\"\n\n        run rm -Rf $LIBJPEG_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBJPEG_DSTDIR/\n        fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION headers\"\n\n        LIBJPEG_HEADERS_INSTALLED=yes\n        export LIBJPEG_HEADERS_INSTALLED\n    fi\n\n    log \"Install libjpeg-$LIBJPEG_VERSION $ABI libraries into $LIBJPEG_DSTDIR\"\n    run mkdir -p $LIBJPEG_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libjpeg-$LIBJPEG_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBJPEG_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBJPEG_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libjpeg-$LIBJPEG_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBJPEG_HEADERS_NEED_PACKAGE=no\n    else\n        LIBJPEG_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBJPEG_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libjpeg_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBJPEG_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBJPEG_SUBDIR/$LIBJPEG_VERSION/include\"\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libjpeg-$LIBJPEG_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBJPEG_SUBDIR/$LIBJPEG_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libjpeg-$LIBJPEG_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libjpeg-$LIBJPEG_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-libpng.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libpng binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libpng source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBPNG_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBPNG_VERSION=\nregister_var_option \"--version=<ver>\" LIBPNG_VERSION \"Specify libpng version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBPNG_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBPNG_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libpng source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBPNG_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBPNG_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBPNG_VERSION\" ]; then\n    echo \"ERROR: Please specify libpng version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBPNG_SRCDIR rev-parse --verify v$LIBPNG_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBPNG_VERSION in $LIBPNG_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBPNG_DSTDIR=$NDK_DIR/$LIBPNG_SUBDIR/$LIBPNG_VERSION\nmkdir -p $LIBPNG_DSTDIR\nfail_panic \"Can't create libpng-$LIBPNG_VERSION destination directory: $LIBPNG_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libpng\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libpng_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libpng-$LIBPNG_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    run git clone -b v$LIBPNG_VERSION $LIBPNG_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libpng-$LIBPNG_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    run ./autogen.sh\n    fail_panic \"Can't create autotools scripts\"\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    local EXTRA_ARGS=\"\"\n    case $ABI in\n        armeabi-v7a*)\n            EXTRA_ARGS=\"$EXTRA_ARGS --enable-arm-neon=api\"\n    esac\n\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n        *)\n            CFLAGS=\"\"\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    LDFLAGS=\"\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/$HOST_TAG\n\n    CC=$BUILDDIR/cc\n    {\n        echo \"#!/bin/bash\"\n        echo \"ARGS=\"\n        echo 'NEXT_ARG_IS_SONAME=no'\n        echo \"for p in \\\"\\$@\\\"; do\"\n        echo '    case $p in'\n        echo '        -Wl,-soname)'\n        echo '            NEXT_ARG_IS_SONAME=yes'\n        echo '            ;;'\n        echo '        *)'\n        echo '            if [ \"$NEXT_ARG_IS_SONAME\" = \"yes\" ]; then'\n        echo '                p=$(echo $p | sed \"s,libpng.*\\.so.*$,libpng.so,\")'\n        echo '                NEXT_ARG_IS_SONAME=no'\n        echo '            fi'\n        echo '    esac'\n        echo \"    ARGS=\\\"\\$ARGS \\$p\\\"\"\n        echo \"done\"\n        echo \"exec $TCPREFIX/bin/${HOST}-gcc \\$ARGS\"\n    } >$CC\n    fail_panic \"Can't create cc wrapper\"\n    chmod +x $CC\n    fail_panic \"Can't chmod +x cc wrapper\"\n\n    CPP=\"$CC $CFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP AR RANLIB\n    export CFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --enable-werror \\\n        --enable-unversioned-links \\\n        --with-pic \\\n        $EXTRA_ARGS\n    fail_panic \"Can't configure $ABI libpng-$LIBPNG_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libpng-$LIBPNG_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION\"\n\n    if [ \"$LIBPNG_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libpng-$LIBPNG_VERSION headers into $LIBPNG_DSTDIR\"\n\n        run rm -Rf $LIBPNG_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBPNG_DSTDIR/\n        fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION headers\"\n\n        LIBPNG_HEADERS_INSTALLED=yes\n        export LIBPNG_HEADERS_INSTALLED\n    fi\n\n    log \"Install libpng-$LIBPNG_VERSION $ABI libraries into $LIBPNG_DSTDIR\"\n    run mkdir -p $LIBPNG_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libpng-$LIBPNG_VERSION target $ABI libraries directory\"\n\n    local LIBSUFFIX\n    for LIBSUFFIX in a so; do\n        rm -f $LIBPNG_DSTDIR/libs/$ABI/libpng.$LIBSUFFIX\n        run rsync -aL $INSTALLDIR/lib/libpng.$LIBSUFFIX $LIBPNG_DSTDIR/libs/$ABI\n        fail_panic \"Can't install $ABI libpng-$LIBPNG_VERSION libraries\"\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBPNG_HEADERS_NEED_PACKAGE=no\n    else\n        LIBPNG_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBPNG_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libpng_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBPNG_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBPNG_SUBDIR/$LIBPNG_VERSION/include\"\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libpng-$LIBPNG_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBPNG_SUBDIR/$LIBPNG_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libpng-$LIBPNG_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libpng-$LIBPNG_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-libtiff.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt libtiff binaries for the Android NDK.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding libtiff source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$LIBTIFF_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nLIBTIFF_VERSION=\nregister_var_option \"--version=<ver>\" LIBTIFF_VERSION \"Specify libtiff version to build\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nLIBTIFF_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$LIBTIFF_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the libtiff source tree. See --help\" 1>&2\n    exit 1\nfi\n\nif [ ! -d \"$LIBTIFF_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$LIBTIFF_SRCDIR'\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$LIBTIFF_VERSION\" ]; then\n    echo \"ERROR: Please specify libtiff version\" 1>&2\n    exit 1\nfi\n\nGITHASH=$(git -C $LIBTIFF_SRCDIR rev-parse --verify v$LIBTIFF_VERSION 2>/dev/null)\nif [ -z \"$GITHASH\" ]; then\n    echo \"ERROR: Can't find tag v$LIBTIFF_VERSION in $LIBTIFF_SRCDIR\" 1>&2\n    exit 1\nfi\n\nLIBTIFF_DSTDIR=$NDK_DIR/$LIBTIFF_SUBDIR/$LIBTIFF_VERSION\nmkdir -p $LIBTIFF_DSTDIR\nfail_panic \"Can't create libtiff-$LIBTIFF_VERSION destination directory: $LIBTIFF_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libtiff\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nprepare_target_build\nfail_panic \"Could not setup target build\"\n\n# $1: ABI\n# $2: build directory\nbuild_libtiff_for_abi()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n\n    dump \"Building libtiff-$LIBTIFF_VERSION $ABI libraries\"\n\n    local APILEVEL\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local ARCH\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        x86|x86_64|mips|mips64)\n            ARCH=$ABI\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local TOOLCHAIN\n    case $ABI in\n        armeabi*)\n            TOOLCHAIN=arm-linux-androideabi\n            ;;\n        x86)\n            TOOLCHAIN=x86\n            ;;\n        mips)\n            TOOLCHAIN=mipsel-linux-android\n            ;;\n        arm64-v8a)\n            TOOLCHAIN=aarch64-linux-android\n            ;;\n        x86_64)\n            TOOLCHAIN=x86_64\n            ;;\n        mips64)\n            TOOLCHAIN=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local HOST\n    case $ABI in\n        armeabi*)\n            HOST=arm-linux-androideabi\n            ;;\n        arm64*)\n            HOST=aarch64-linux-android\n            ;;\n        x86)\n            HOST=i686-linux-android\n            ;;\n        x86_64)\n            HOST=x86_64-linux-android\n            ;;\n        mips)\n            HOST=mipsel-linux-android\n            ;;\n        mips64)\n            HOST=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: '$ABI'\" 1>&2\n            exit 1\n    esac\n\n    local SRCDIR=\"$BUILDDIR/src\"\n    rm -Rf $SRCDIR\n    run git clone -b v$LIBTIFF_VERSION $LIBTIFF_SRCDIR $SRCDIR\n    fail_panic \"Can't copy libtiff-$LIBTIFF_VERSION sources to temporary directory\"\n\n    cd $SRCDIR\n\n    local INSTALLDIR=\"$BUILDDIR/install\"\n\n    CFLAGS=\"\"\n    case $ABI in\n        armeabi)\n            CFLAGS=\"-march=armv5te -mtune=xscale -msoft-float\"\n            ;;\n        armeabi-v7a)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n            ;;\n        armeabi-v7a-hard)\n            CFLAGS=\"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n            ;;\n    esac\n\n    case $ABI in\n        armeabi*)\n            CFLAGS=\"$CFLAGS -mthumb\"\n    esac\n\n    CFLAGS=\"$CFLAGS --sysroot=$NDK_DIR/platforms/android-$APILEVEL/arch-$ARCH\"\n\n    CXXFLAGS=\"$CFLAGS\"\n    CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/include\"\n    CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI/include\"\n\n    LDFLAGS=\"-Wl,--no-undefined\"\n    if [ \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,--no-warn-mismatch\"\n    fi\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/crystax/libs/$ABI\"\n    LDFLAGS=\"$LDFLAGS -L$NDK_DIR/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI\"\n\n    local HOST_OS=$(uname -s | tr '[A-Z]' '[a-z]')\n    local HOST_ARCH=$(uname -m)\n    local TCPREFIX=$NDK_DIR/toolchains/${TOOLCHAIN}-4.9/prebuilt/${HOST_OS}-${HOST_ARCH}\n\n    local LIBJPEG_VERSION=$(echo $LIBJPEG_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\n    local LIBJPEG=$NDK_DIR/$LIBJPEG_SUBDIR/$LIBJPEG_VERSION\n\n    CXX=$BUILDDIR/c++\n    {\n        cat <<EOF\n#!/bin/bash\n\nARGS=\"\"\nfor p in \"\\$@\"; do\n    case \\$p in\n        -lstdc++)\n            p=\"-lgnustl_shared \\$p\"\n            ;;\n    esac\n    ARGS=\"\\$ARGS \\$p\"\ndone\n\nexec $TCPREFIX/bin/${HOST}-g++ \\$ARGS\nEOF\n    } >$CXX\n    fail_panic \"Can't create c++ wrapper\"\n    chmod +x $CXX\n    fail_panic \"Can't chmod +x c++ wrapper\"\n\n    CC=$TCPREFIX/bin/${HOST}-gcc\n    CPP=\"$CC $CFLAGS -E\"\n    CXXCPP=\"$CXX $CXXFLAGS -E\"\n    AR=$TCPREFIX/bin/${HOST}-ar\n    RANLIB=$TCPREFIX/bin/${HOST}-ranlib\n    export CC CPP CXX CXXCPP AR RANLIB\n    export CFLAGS CXXFLAGS LDFLAGS\n\n    run ./configure --prefix=$INSTALLDIR \\\n        --host=$HOST \\\n        --enable-shared \\\n        --enable-static \\\n        --with-pic \\\n        --with-jpeg-include-dir=$LIBJPEG/include \\\n        --with-jpeg-lib-dir=$LIBJPEG/libs/$ABI \\\n        --disable-jbig \\\n        --disable-lzma \\\n        --enable-cxx \\\n\n    fail_panic \"Can't configure $ABI libtiff-$LIBTIFF_VERSION\"\n\n    run make -j$NUM_JOBS\n    fail_panic \"Can't build $ABI libtiff-$LIBTIFF_VERSION\"\n\n    run make install\n    fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION\"\n\n    if [ \"$LIBTIFF_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install libtiff-$LIBTIFF_VERSION headers into $LIBTIFF_DSTDIR\"\n\n        run rm -Rf $LIBTIFF_DSTDIR/include\n        run rsync -aL $INSTALLDIR/include $LIBTIFF_DSTDIR/\n        fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION headers\"\n\n        LIBTIFF_HEADERS_INSTALLED=yes\n        export LIBTIFF_HEADERS_INSTALLED\n    fi\n\n    log \"Install libtiff-$LIBTIFF_VERSION $ABI libraries into $LIBTIFF_DSTDIR\"\n    run mkdir -p $LIBTIFF_DSTDIR/libs/$ABI\n    fail_panic \"Can't create libtiff-$LIBTIFF_VERSION target $ABI libraries directory\"\n\n    for LIBSUFFIX in a so; do\n        rm -f $LIBTIFF_DSTDIR/libs/$ABI/lib*.$LIBSUFFIX\n        for f in $(find $INSTALLDIR -name \"lib*.$LIBSUFFIX\" -print); do\n            run rsync -aL $f $LIBTIFF_DSTDIR/libs/$ABI\n            fail_panic \"Can't install $ABI libtiff-$LIBTIFF_VERSION libraries\"\n        done\n    done\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        LIBTIFF_HEADERS_NEED_PACKAGE=no\n    else\n        LIBTIFF_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=yes\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$LIBTIFF_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=no\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_libtiff_for_abi \"$ABI\" \"$BUILD_DIR/$ABI\"\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ]; then\n    if [ \"$LIBTIFF_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$LIBTIFF_SUBDIR/$LIBTIFF_VERSION/include\"\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package libtiff-$LIBTIFF_VERSION headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$LIBTIFF_SUBDIR/$LIBTIFF_VERSION/libs/$ABI\"\n        PACKAGE_NAME=\"libtiff-$LIBTIFF_VERSION-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Can't package $ABI libtiff-$LIBTIFF_VERSION libraries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    #rm -Rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-llvm-libc++.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2013, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild one of the NDK C++ STL\n#  implementations from sources.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n. `dirname $0`/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild LLVM C++ Standard Library.\n\nThis script is called when pacakging a new NDK release. It will simply\nrebuild the static and shared libraries of a given C++ runtime from\nsources.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/sources/cxx-stl/$CXX_STL_SUBDIR, but you can override this with\nthe --out-dir=<path> option.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=\"$PREBUILT_ABIS\"\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nVISIBLE_STATIC=\nregister_var_option \"--visible-static\" VISIBLE_STATIC \"Do not use hidden visibility for the static library\"\n\nWITH_DEBUG_INFO=\nregister_var_option \"--with-debug-info\" WITH_DEBUG_INFO \"Build with -g.  STL is still built with optimization but with debug info\"\n\nLLVM_VERSION=$DEFAULT_LLVM_VERSION\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nregister_jobs_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n  if [ ! -d \"$NDK_DIR\" ]; then\n    panic \"NDK directory does not exist: $NDK_DIR\"\n  fi\nfi\n\n# Handle OUT_DIR\nif [ -z \"$OUT_DIR\" ] ; then\n  OUT_DIR=$ANDROID_NDK_ROOT\n  log \"Auto-config: --out-dir=$OUT_DIR\"\nelse\n  mkdir -p \"$OUT_DIR\"\n  fail_panic \"Could not create directory: $OUT_DIR\"\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-libc++\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# Location of the various C++ runtime source trees.  Use symlink from\n# $BUILD_DIR instead of $NDK which may contain full path of builder's working dir\n\nrm -f $BUILD_DIR/ndk\nln -sf $ANDROID_NDK_ROOT $BUILD_DIR/ndk\n\nCRYSTAX_SRCDIR=$BUILD_DIR/ndk/$CRYSTAX_SUBDIR\nLIBCXX_SRCDIR=$BUILD_DIR/ndk/$LIBCXX_SUBDIR/$LLVM_VERSION\nLIBCXXABI_SRCDIR=$BUILD_DIR/ndk/$LIBCXXABI_SUBDIR\n\nLIBCXX_INCLUDES=\"-I$LIBCXX_SRCDIR/libcxx/include -I$LIBCXXABI_SRCDIR/include\"\nLIBCXX_INCLUDES=\"$LIBCXX_INCLUDES -I$CRYSTAX_SRCDIR/include\"\n\nCOMMON_C_CXX_FLAGS=\"-fPIC -O2 -ffunction-sections -fdata-sections\"\nCOMMON_CXXFLAGS=\"-fexceptions -frtti -fuse-cxa-atexit\"\n\nif [ \"$WITH_DEBUG_INFO\" ]; then\n    COMMON_C_CXX_FLAGS=\"$COMMON_C_CXX_FLAGS -g\"\nfi\n\n# Determine Libc++ build parameters\nLIBCXX_LINKER_SCRIPT=export_symbols.txt\nLIBCXX_CFLAGS=\"$COMMON_C_CXX_FLAGS $LIBCXX_INCLUDES -Drestrict=__restrict__\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CFLAGS -DLIBCXXABI=1 -std=c++11 -D__STDC_FORMAT_MACROS\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Wall -Wextra\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function\"\nLIBCXX_CXXFLAGS=\"$LIBCXX_CXXFLAGS -Werror\"\nif [ -f \"$_BUILD_SRCDIR/$LIBCXX_LINKER_SCRIPT\" ]; then\n    LIBCXX_LDFLAGS=\"-Wl,--version-script,\\$_BUILD_SRCDIR/$LIBCXX_LINKER_SCRIPT\"\nfi\nLIBCXX_SOURCES=\\\n\"libcxx/src/algorithm.cpp \\\nlibcxx/src/bind.cpp \\\nlibcxx/src/chrono.cpp \\\nlibcxx/src/condition_variable.cpp \\\nlibcxx/src/debug.cpp \\\nlibcxx/src/exception.cpp \\\nlibcxx/src/future.cpp \\\nlibcxx/src/hash.cpp \\\nlibcxx/src/ios.cpp \\\nlibcxx/src/iostream.cpp \\\nlibcxx/src/locale.cpp \\\nlibcxx/src/memory.cpp \\\nlibcxx/src/mutex.cpp \\\nlibcxx/src/new.cpp \\\nlibcxx/src/optional.cpp \\\nlibcxx/src/random.cpp \\\nlibcxx/src/regex.cpp \\\nlibcxx/src/shared_mutex.cpp \\\nlibcxx/src/stdexcept.cpp \\\nlibcxx/src/string.cpp \\\nlibcxx/src/strstream.cpp \\\nlibcxx/src/system_error.cpp \\\nlibcxx/src/thread.cpp \\\nlibcxx/src/typeinfo.cpp \\\nlibcxx/src/utility.cpp \\\nlibcxx/src/valarray.cpp \\\n\"\n\nLIBCXXABI_SOURCES=\\\n\"abort_message.cpp \\\ncxa_aux_runtime.cpp \\\ncxa_default_handlers.cpp \\\ncxa_demangle.cpp \\\ncxa_exception.cpp \\\ncxa_exception_storage.cpp \\\ncxa_guard.cpp \\\ncxa_handlers.cpp \\\ncxa_new_delete.cpp \\\ncxa_personality.cpp \\\ncxa_thread_atexit.cpp \\\ncxa_unexpected.cpp \\\ncxa_vector.cpp \\\ncxa_virtual.cpp \\\nexception.cpp \\\nprivate_typeinfo.cpp \\\nstdexcept.cpp \\\ntypeinfo.cpp\n\"\n\nLIBCXXABI_SOURCES=$(echo $LIBCXXABI_SOURCES | tr ' ' '\\n' | grep -v '^$' | sed 's,^,../../llvm-libc++abi/libcxxabi/src/,' | tr '\\n' ' ')\n\nLIBCXXABI_UNWIND_SOURCES=\\\n\"Unwind/libunwind.cpp \\\nUnwind/Unwind-EHABI.cpp \\\nUnwind/Unwind-sjlj.c \\\nUnwind/UnwindLevel1.c \\\nUnwind/UnwindLevel1-gcc-ext.c \\\nUnwind/UnwindRegistersRestore.S \\\nUnwind/UnwindRegistersSave.S \\\n\"\n\nLIBCXXABI_UNWIND_SOURCES=$(echo $LIBCXXABI_UNWIND_SOURCES | tr ' ' '\\n' | grep -v '^$' | sed 's,^,../../llvm-libc++abi/libcxxabi/src/,' | tr '\\n' ' ')\n\n# If the --no-makefile flag is not used, we're going to put all build\n# commands in a temporary Makefile that we will be able to invoke with\n# -j$NUM_JOBS to build stuff in parallel.\n#\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\n# Define a few common variables based on parameters.\nCXX_STL_LIB=libc++\nCXX_STL_SUBDIR=$LIBCXX_SUBDIR/$LLVM_VERSION\nCXX_STL_SRCDIR=$LIBCXX_SRCDIR\nCXX_STL_CFLAGS=$LIBCXX_CFLAGS\nCXX_STL_CXXFLAGS=$LIBCXX_CXXFLAGS\nCXX_STL_LDFLAGS=$LIBCXX_LDFLAGS\nCXX_STL_SOURCES=$LIBCXX_SOURCES\nCXX_STL_PACKAGE=libcxx\n\nHIDDEN_VISIBILITY_FLAGS=\"-fvisibility=hidden -fvisibility-inlines-hidden\"\n\n# By default, all static libraries include hidden ELF symbols, except\n# if one uses the --visible-static option.\nif [ -z \"$VISIBLE_STATIC\" ]; then\n    STATIC_CONLYFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\n    STATIC_CXXFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\nelse\n    STATIC_CONLYFLAGS=\n    STATIC_CXXFLAGS=\nfi\nSHARED_CONLYFLAGS=\"$HIDDEN_VISIBILITY_FLAGS\"\nSHARED_CXXFLAGS=\n\n\n# build_stl_libs_for_abi\n# $1: ABI\n# $2: build directory\n# $3: build type: \"static\" or \"shared\"\n# $4: installation directory\n# $5: (optional) thumb\nbuild_stl_libs_for_abi ()\n{\n    local ARCH BINPREFIX SYSROOT\n    local ABI=$1\n    local THUMB=\"$5\"\n    local BUILDDIR=\"$2\"/$THUMB\n    local TYPE=\"$3\"\n    local DSTDIR=\"$4\"\n    local FLOAT_ABI=\"\"\n    local DEFAULT_CFLAGS DEFAULT_CXXFLAGS\n    local SRC OBJ OBJECTS EXTRA_CFLAGS EXTRA_CXXFLAGS EXTRA_LDFLAGS LIB_SUFFIX GCCVER\n\n    EXTRA_CFLAGS=\"\"\n    EXTRA_CXXFLAGS=\"\"\n    EXTRA_LDFLAGS=\"\"\n\n    case $ABI in\n        armeabi-v7a-hard)\n            EXTRA_CFLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n            EXTRA_CXXFLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n            EXTRA_LDFLAGS=\"-Wl,--no-warn-mismatch -lm_hard\"\n            FLOAT_ABI=\"hard\"\n            ;;\n        arm64-v8a)\n            #if [ -n \"$GCC_VERSION\" ]; then\n            #    EXTRA_CFLAGS=\"-mfix-cortex-a53-835769\"\n            #    EXTRA_CXXFLAGS=\"-mfix-cortex-a53-835769\"\n            #fi\n            ;;\n        x86|x86_64)\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"-mstackrealign\"\n            EXTRA_CXXFLAGS=\"-mstackrealign\"\n            ;;\n        mips32r6)\n            EXTRA_CFLAGS=\"-mips32r6\"\n            EXTRA_CXXFLAGS=\"-mips32r6\"\n            EXTRA_LDFLAGS=\"-mips32r6\"\n            ;;\n        mips64)\n            EXTRA_CFLAGS=\"-mips64r6\"\n            EXTRA_CXXFLAGS=$EXTRA_CFLAGS\n            ;;\n    esac\n\n    USE_LLVM_UNWIND=\n    case $ABI in\n        armeabi*)\n            EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=1\"\n            USE_LLVM_UNWIND=true\n            ;;\n        *)\n            EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=0\"\n            ;;\n    esac\n\n    if [ -n \"$THUMB\" ]; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mthumb\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS -mthumb\"\n    fi\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS $STATIC_CONLYFLAGS\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS $STATIC_CXXFLAGS\"\n    else\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS $SHARED_CONLYFLAGS\"\n        EXTRA_CXXFLAGS=\"$EXTRA_CXXFLAGS $SHARED_CXXFLAGS\"\n    fi\n\n    DSTDIR=$DSTDIR/$CXX_STL_SUBDIR/libs/$ABI/$THUMB\n    LIB_SUFFIX=\"$(get_lib_suffix_for_abi $ABI)\"\n\n    mkdir -p \"$BUILDDIR\"\n    mkdir -p \"$DSTDIR\"\n\n    ARCH=$(convert_abi_to_arch $ABI)\n    GCCVER=$(get_default_gcc_version_for_arch $ARCH)\n\n    # clang3.5+ use integrated-as as default, which has trouble compiling\n    # llvm-libc++abi/libcxxabi/src/Unwind/UnwindRegistersRestore.S\n    EXTRA_CFLAGS=\"${EXTRA_CFLAGS} -fno-integrated-as\"\n    EXTRA_CXXFLAGS=\"${EXTRA_CXXFLAGS} -fno-integrated-as\"\n    # libc++ built with clang (for ABI armeabi-only) produces\n    # libc++_shared.so and libc++_static.a with undefined __atomic_fetch_add_4\n    # Add -latomic.\n    if [ \"$ABI\" = \"armeabi\" ]; then\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -latomic\"\n    fi\n\n    builder_begin_android $ABI \"$BUILDDIR\" \"$GCCVER\" \"$LLVM_VERSION\" \"$MAKEFILE\"\n\n    builder_set_dstdir \"$DSTDIR\"\n    builder_reset_cflags DEFAULT_CFLAGS\n    builder_reset_cxxflags DEFAULT_CXXFLAGS\n\n    builder_set_srcdir \"$CXX_STL_SRCDIR\"\n    builder_reset_cflags\n    builder_cflags \"$DEFAULT_CFLAGS $CXX_STL_CFLAGS $EXTRA_CFLAGS\"\n    builder_reset_cxxflags\n    builder_cxxflags \"$DEFAULT_CXXFLAGS $CXX_STL_CXXFLAGS $EXTRA_CXXFLAGS\"\n    builder_ldflags \"$CXX_STL_LDFLAGS $EXTRA_LDFLAGS\"\n    builder_sources $CXX_STL_SOURCES\n    if [ \"$USE_LLVM_UNWIND\" = \"true\" ]; then\n      builder_sources $LIBCXXABI_SOURCES $LIBCXXABI_UNWIND_SOURCES\n    else\n      builder_sources $LIBCXXABI_SOURCES\n    fi\n    builder_ldflags \"-ldl\"\n\n    if [ \"$TYPE\" = \"static\" ]; then\n        log \"Building $DSTDIR/${CXX_STL_LIB}_static.a\"\n        builder_static_library ${CXX_STL_LIB}_static\n    else\n        log \"Building $DSTDIR/${CXX_STL_LIB}_shared${LIB_SUFFIX}\"\n        builder_shared_library ${CXX_STL_LIB}_shared $LIB_SUFFIX \"$FLOAT_ABI\"\n    fi\n\n    builder_end\n}\n\n# get_libstdcxx_package_name_for_abi\n# $1: ABI\nget_libstdcxx_package_name_for_abi ()\n{\n    local ABI=$1\n    local package_name\n\n    package_name=\"${CXX_STL_PACKAGE}-libs-${LLVM_VERSION}-$ABI\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        package_name=\"${package_name}-g\"\n    fi\n    package_name=\"${package_name}.tar.xz\"\n\n    echo \"$package_name\"\n}\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=$(get_libstdcxx_package_name_for_abi $ABI)\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? = 0 ]; then\n            DO_BUILD_PACKAGE=\"no\"\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\"\n        build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\"\n        # build thumb version of libraries for 32-bit arm\n        if [ \"$ABI\" != \"${ABI%%arm*}\" -a \"$ABI\" = \"${ABI%%64*}\" ] ; then\n            build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/static\" \"static\" \"$OUT_DIR\" thumb\n            build_stl_libs_for_abi $ABI \"$BUILD_DIR/$ABI/shared\" \"shared\" \"$OUT_DIR\" thumb\n        fi\n    fi\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for ABI in $BUILT_ABIS; do\n        FILES=\"\"\n        LIB_SUFFIX=\"$(get_lib_suffix_for_abi $ABI)\"\n        for LIB in ${CXX_STL_LIB}_static.a ${CXX_STL_LIB}_shared${LIB_SUFFIX}; do\n        if [ -d \"$CXX_STL_SUBDIR/libs/$ABI/thumb\" ]; then\n                FILES=\"$FILES $CXX_STL_SUBDIR/libs/$ABI/thumb/$LIB\"\n            fi\n            FILES=\"$FILES $CXX_STL_SUBDIR/libs/$ABI/$LIB\"\n        done\n        PACKAGE_NAME=$(get_libstdcxx_package_name_for_abi $ABI)\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        log \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$OUT_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI libc++ binaries!\"\n        dump \"Packaging: $PACKAGE\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/build-llvm.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Packages the platform's LLVM for the NDK.\"\"\"\nimport os\nimport site\nimport subprocess\nimport sys\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef get_llvm_prebuilt_path(host):\n    rel_prebuilt_path = 'prebuilts/clang/host/{}'.format(host)\n    prebuilt_path = os.path.join(build_support.android_path(),\n                                 rel_prebuilt_path)\n    if not os.path.isdir(prebuilt_path):\n        sys.exit('Could not find prebuilt LLVM at {}'.format(prebuilt_path))\n    return prebuilt_path\n\n\ndef main(args):\n    LLVM_VERSION = 'clang-2690385'\n\n    host = args.host\n    package_dir = args.dist_dir\n\n    # TODO(danalbert): Fix 64-bit Windows LLVM.\n    # This wrongly packages 32-bit Windows LLVM for 64-bit as well, but the\n    # real bug here is that we don't have a 64-bit Windows LLVM.\n    # http://b/22414702\n    os_name = host\n    if os_name == 'windows64':\n        os_name = 'windows'\n    prebuilt_path = get_llvm_prebuilt_path(os_name + '-x86')\n\n    if host == 'darwin':\n        host = 'darwin-x86_64'\n    elif host == 'linux':\n        host = 'linux-x86_64'\n    elif host == 'windows':\n        host = 'windows'\n    elif host == 'windows64':\n        host = 'windows-x86_64'\n\n    package_name = 'llvm-{}.zip'.format(host)\n    package_path = os.path.join(package_dir, package_name)\n    if os.path.exists(package_path):\n        os.unlink(package_path)\n    os.chdir(prebuilt_path)\n    args = ['zip', '-9qr', package_path, LLVM_VERSION]\n    if not host.startswith('windows'):\n        args.append('--symlinks')\n    subprocess.check_call(args)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "build/tools/build-llvm.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the llvm and clang binaries\n#  for the Android NDK.\n#\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir> <ndk-dir> <toolchain>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the LLVM prebuilt binaries for the Android NDK.\n\nWhere <src-dir> is the location of toolchain sources, <ndk-dir> is\nthe top-level NDK installation path and <toolchain> is the name of\nthe toolchain to use (e.g. llvm-3.6).\"\n\nRELEASE=`date +%Y%m%d`\nBUILD_OUT=/tmp/ndk-$USER/build/toolchain\nOPTION_BUILD_OUT=\nregister_var_option \"--build-out=<path>\" OPTION_BUILD_OUT \"Set temporary build directory\"\n\n# Note: platform API level 9 or higher is needed for proper C++ support\nregister_var_option \"--platform=<name>\"  PLATFORM \"Specify platform name\"\n\nGMP_VERSION=$DEFAULT_GMP_VERSION\nregister_var_option \"--gmp-version=<version>\" GMP_VERSION \"Specify gmp version\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Create archive tarball in specific directory\"\n\nPOLLY=no\ndo_polly_option () { POLLY=yes; }\nregister_option \"--with-polly\" do_polly_option \"Enable Polyhedral optimizations for LLVM\"\n\nCHECK=no\ndo_check_option () { CHECK=yes; }\nregister_option \"--check\" do_check_option \"Check LLVM\"\n\nUSE_PYTHON_BC2NATIVE=no\ndo_use_python_bc2native_option () { USE_PYTHON_BC2NATIVE=yes; }\nregister_option \"--use-python-bc2native\" do_use_python_bc2native_option \"Use python bc2native instead of integrated one\"\n\nINCREMENTAL=no\ndo_incremental_option () { INCREMENTAL=yes; }\nregister_option \"--incremental\" do_incremental_option \"Build incremenally\"\n\nregister_jobs_option\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\nprepare_canadian_toolchain /tmp/ndk-$USER/build\n\nfix_option BUILD_OUT \"$OPTION_BUILD_OUT\" \"build directory\"\nsetup_default_log_file $BUILD_OUT/config.log\n\nset_parameters ()\n{\n    SRC_DIR=\"$1\"\n    NDK_DIR=\"$2\"\n    TOOLCHAIN=\"$3\"\n\n    # Check source directory\n    #\n    if [ -z \"$SRC_DIR\" ] ; then\n        echo \"ERROR: Missing source directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR/$TOOLCHAIN/llvm\" ] ; then\n        echo \"ERROR: Source directory does not contain llvm sources: $SRC_DIR/$TOOLCHAIN/llvm\"\n        exit 1\n    fi\n\n    if [ -e \"$SRC_DIR/$TOOLCHAIN/llvm/tools/polly\" -a ! -h \"$SRC_DIR/$TOOLCHAIN/llvm/tools/polly\" ] ; then\n        echo \"ERROR: polly, if exist, needs to be a symbolic link: $SRC_DIR/$TOOLCHAIN/llvm/tools/polly\"\n        exit 1\n    fi\n\n    GMP_SOURCE=$SRC_DIR/gmp/gmp-$GMP_VERSION.tar.bz2\n    if [ ! -f \"$GMP_SOURCE\" ] ; then\n        echo \"ERROR: Source directory does not contain gmp: $GMP_SOURCE\"\n        exit 1\n    fi\n    SRC_DIR=`cd $SRC_DIR; pwd`\n    log \"Using source directory: $SRC_DIR\"\n\n    # Check NDK installation directory\n    #\n    if [ -z \"$NDK_DIR\" ] ; then\n        echo \"ERROR: Missing NDK directory parameter. See --help for details.\"\n        exit 1\n    fi\n\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        mkdir -p $NDK_DIR\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not create target NDK installation path: $NDK_DIR\"\n            exit 1\n        fi\n    fi\n    NDK_DIR=`cd $NDK_DIR; pwd`\n    log \"Using NDK directory: $NDK_DIR\"\n\n    # Check toolchain name\n    #\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name parameter. See --help for details.\"\n        exit 1\n    fi\n}\n\nset_parameters $PARAMETERS\n\nif [ -z \"$PLATFORM\" ]; then\n   PLATFORM=\"android-\"$(get_default_api_level_for_arch $ARCH)\nfi\n\nprepare_target_build\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\nset_toolchain_ndk $NDK_DIR $TOOLCHAIN\n\nif [ \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ] ; then\n    dump \"Using C compiler: $CC\"\n    dump \"Using C++ compiler: $CXX\"\n    if [ -n \"$OBJCXX\" ]; then\n        dump \"Using Objective-C++ compiler: $OBJCXX\"\n    fi\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=\"$TOOLCHAIN-$CACHE_HOST_TAG.tar.xz\"\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\nif [ \"$MINGW\" = \"yes\" -a \"$TRY64\" != \"yes\" ]; then\n    # Clang3.5+ needs gcc4.7+ to build, and some of\n    # cross toolchain \"i586-*\" we search for in find_mingw_toolchain()\n    # can no longer build.  One solution is to provide DEBIAN_NAME=mingw32\n    # BINPREFIX=i686-pc-mingw32msvc- MINGW_GCC=/path/to/i686-w64-mingw32,\n    # but ABI_CONFIGURE_HOST is still hard-coded to i586-pc-mingw32msvc.\n    # Fixup ABI_CONFIGURE_HOST in this case.\n    if [ \"$ABI_CONFIGURE_HOST\" = \"i586-pc-mingw32msvc\" ]; then\n        MINGW_GCC_BASENAME=`basename $MINGW_GCC`\n        if [ \"$MINGW_GCC_BASENAME\" = \"${MINGW_GCC_BASENAME%%i585*}\" ]; then\n            ABI_CONFIGURE_HOST=${MINGW_GCC_BASENAME%-gcc}\n\t    STRIP=$ABI_CONFIGURE_HOST-strip\n        fi\n    fi\nfi\n\nif [ \"$INCREMENTAL\" != \"yes\" ]; then\n    rm -rf $BUILD_OUT\nfi\nmkdir -p $BUILD_OUT\n\nMAKE_FLAGS=\"VERBOSE=1\"\n\nTOOLCHAIN_BUILD_PREFIX=$BUILD_OUT/prefix\n\nARCH=$HOST_ARCH\n\n# Disable futimens@GLIBC_2.6 not available in system on server with very old libc.so\nCFLAGS_FOR_BUILD=\"-O2 -I$TOOLCHAIN_BUILD_PREFIX/include -DDISABLE_FUTIMENS\"\nLDFLAGS_FOR_BUILD=\"-L$TOOLCHAIN_BUILD_PREFIX/lib\"\n\n# Statically link stdc++ to eliminate dependency on outdated libctdc++.so in old 32-bit\n# linux system, and libgcc_s_sjlj-1.dll and libstdc++-6.dll on windows\nLLVM_VERSION=\"`echo $TOOLCHAIN | tr '-' '\\n' | tail -n 1`\"\nLDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static-libstdc++\"\nif [ \"$CC\" = \"${CC%%clang*}\" ]; then\n    LDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static-libgcc\"\nfi\n\n# Static link to avoid dependencies on libwinpthread-1.dll in mingw\nif [ \"$MINGW\" = \"yes\" ]; then\n    LDFLAGS_FOR_BUILD=$LDFLAGS_FOR_BUILD\" -static\"\nfi\n\n# Starting from llvm-3.7 lib/Support/Signals.cpp needs set_abort_behavior() doesn't exist in\n# Windows until -lmsvcr90\nif [ \"$MINGW\" = \"yes\" -a \"$LLVM_VERSION\" \\> \"3.5\" ]; then\n    XXX_MAKE_FLAGS=\"$MAKE_FLAGS LIBS=-lmsvcr90\"\nfi\n\nif [ \"$HOST_OS\" = \"darwin\" -a -n \"$DARWIN_SYSROOT\" ]; then\n    PATH=$DARWIN_SYSROOT/usr/bin:$PATH\n    export PATH\n\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -I$DARWIN_SYSROOT/usr/include\"\n    LDFLAGS_FOR_BUILD=\"$LDFLAGS_FOR_BUILD -L$DARWIN_SYSROOT/usr/lib\"\n\n    # Disable wchar support for libedit since it require recent C++11 support which we don't\n    # have yet in used x86_64-apple-darwin-4.9.2 prebuilt toolchain\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -DLLDB_EDITLINE_USE_WCHAR=0\"\nfi\n\nif [ \"$MINGW\" = \"yes\" ]; then\n    # lldb doesnt' support python and curses on Windows\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -DLLDB_DISABLE_PYTHON -DLLDB_DISABLE_CURSES\"\nelse\n    PYTHONHOME=$NDK_DIR/prebuilt/$HOST_TAG\n    if [ ! -d $PYTHONHOME ]; then\n        echo \"ERROR: $PYTHONHOME folder not found!\" 1>&2\n        exit 1\n    fi\n    export PYTHONHOME\n\n    PATH=$PYTHONHOME/bin:$PATH\n    export PATH\n\n    PYTHON=$PYTHONHOME/bin/python\n    PYTHON_VERSION=$($PYTHON -c \"import sys; print('%s.%s' % sys.version_info[:2])\")\n    if [ -z \"$PYTHON_VERSION\" ]; then\n        echo \"ERROR: Can't detect Python version: $PYTHON\" 1>&2\n        exit 1\n    fi\n    echo \"Auto-detect: Python $PYTHON_VERSION\"\n\n    CFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -I$PYTHONHOME/include/python${PYTHON_VERSION}\"\n    LDFLAGS_FOR_BUILD=\"$LDFLAGS_FOR_BUILD -L$PYTHONHOME/lib\"\nfi\n\n# Enable 64-bit off_t even for 32-bit binaries\nCFLAGS_FOR_BUILD=\"$CFLAGS_FOR_BUILD -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64\"\n\nCFLAGS=\"$CFLAGS $CFLAGS_FOR_BUILD $HOST_CFLAGS\"\nCXXFLAGS=\"$CXXFLAGS $CFLAGS_FOR_BUILD $HOST_CFLAGS\"  # polly doesn't look at CFLAGS !\nLDFLAGS=\"$LDFLAGS $LDFLAGS_FOR_BUILD $HOST_LDFLAGS\"\nexport CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD REQUIRES_RTTI=1 ARCH\n\nif [ \"$MINGW\" != \"yes\" ]; then\n    dump \"Building libedit (needed for lldb)...\"\n\n    LIBEDIT_BUILD_OUT=$BUILD_OUT/libedit\n    mkdir -p $LIBEDIT_BUILD_OUT && cd $LIBEDIT_BUILD_OUT\n    fail_panic \"Can't cd into libedit build path: $LIBEDIT_BUILD_OUT\"\n\n    if [ \"$INCREMENTAL\" != \"yes\" -o ! -f $LIBEDIT_BUILD_OUT/.libedit-configured ]; then\n        run $SRC_DIR/libedit/configure \\\n            --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n            --host=$ABI_CONFIGURE_HOST \\\n            --enable-static \\\n            --disable-shared \\\n            --with-pic \\\n            --enable-widec\n        fail_panic \"Can't configure libedit\"\n        touch $LIBEDIT_BUILD_OUT/.libedit-configured\n    fi\n\n    run make -j $NUM_JOBS\n    fail_panic \"Can't build libedit\"\n\n    run make install\n    fail_panic \"Can't install libedit to $TOOLCHAIN_BUILD_PREFIX\"\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # To stop /usr/bin/install -s calls strip on darwin binary\n    export KEEP_SYMBOLS=1\n    # Disable polly for now\n    POLLY=no\nfi\n\nif [ \"$POLLY\" = \"yes\" -a ! -d \"$SRC_DIR/$TOOLCHAIN/polly\" ] ; then\n    dump \"Disable polly because $SRC_DIR/$TOOLCHAIN/polly doesn't exist\"\n    POLLY=no\nfi\n\nEXTRA_CONFIG_FLAGS=\nrm -rf $SRC_DIR/$TOOLCHAIN/llvm/tools/polly\nif [ \"$POLLY\" = \"yes\" ]; then\n    # crate symbolic link\n    ln -s ../../polly $SRC_DIR/$TOOLCHAIN/llvm/tools\n\n    # build polly dependencies\n    unpack_archive \"$GMP_SOURCE\" \"$BUILD_OUT\"\n    fail_panic \"Couldn't unpack $SRC_DIR/gmp/gmp-$GMP_VERSION to $BUILD_OUT\"\n\n    GMP_BUILD_OUT=$BUILD_OUT/gmp-$GMP_VERSION\n    cd $GMP_BUILD_OUT\n    fail_panic \"Couldn't cd into gmp build path: $GMP_BUILD_OUT\"\n\n    OLD_ABI=\"${ABI}\"\n    export ABI=$HOST_GMP_ABI  # needed to build 32-bit on 64-bit host\n    run ./configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --disable-shared \\\n        --disable-nls \\\n        --enable-cxx\n    fail_panic \"Couldn't configure gmp\"\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't compile gmp\"\n    run make install\n    fail_panic \"Couldn't install gmp to $TOOLCHAIN_BUILD_PREFIX\"\n    ABI=\"$OLD_ABI\"\n\n    CLOOG_BUILD_OUT=$BUILD_OUT/cloog\n    mkdir -p $CLOOG_BUILD_OUT && cd $CLOOG_BUILD_OUT\n    fail_panic \"Couldn't create cloog build path: $CLOOG_BUILD_OUT\"\n\n    run $SRC_DIR/$TOOLCHAIN/llvm/tools/polly/utils/cloog_src/configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --with-gmp-prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --disable-shared \\\n        --disable-nls\n    fail_panic \"Couldn't configure cloog\"\n    run make -j$NUM_JOBS\n    fail_panic \"Couldn't compile cloog\"\n    run make install\n    fail_panic \"Couldn't install cloog to $TOOLCHAIN_BUILD_PREFIX\"\n\n    EXTRA_CONFIG_FLAGS=\"--with-cloog=$TOOLCHAIN_BUILD_PREFIX --with-isl=$TOOLCHAIN_BUILD_PREFIX\"\n\n    # Allow text relocs when linking LLVMPolly.dylib against statically linked libgmp.a\n    if [ \"$HOST_TAG32\" = \"darwin-x86\" -o \"$DARWIN\" = \"yes\" ]; then   # -a \"$HOST_ARCH\" = \"x86\"\n        LDFLAGS=\"$LDFLAGS -read_only_relocs suppress\"\n        export LDFLAGS\n    fi\nfi # POLLY = yes\n\n# configure the toolchain\ndump \"Configure: $TOOLCHAIN toolchain build\"\nLLVM_BUILD_OUT=$BUILD_OUT/llvm\nmkdir -p $LLVM_BUILD_OUT && cd $LLVM_BUILD_OUT\nfail_panic \"Couldn't cd into llvm build path: $LLVM_BUILD_OUT\"\n\nBINUTILS_VERSION=$(get_default_binutils_version_for_llvm $TOOLCHAIN)\n\nif [ \"$MINGW\" != \"yes\" ]; then\n    EXTRA_CONFIG_FLAGS=\"$EXTRA_CONFIG_FLAGS --with-python=$PYTHON\"\nfi\n\nif [ \"$INCREMENTAL\" != \"yes\" -o ! -f $LLVM_BUILD_OUT/.llvm-configured ]; then\n    run $SRC_DIR/$TOOLCHAIN/llvm/configure \\\n        --prefix=$TOOLCHAIN_BUILD_PREFIX \\\n        --host=$ABI_CONFIGURE_HOST \\\n        --build=$ABI_CONFIGURE_BUILD \\\n        --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL \\\n        --enable-targets=arm,mips,x86,aarch64 \\\n        --enable-optimized \\\n        --with-binutils-include=$SRC_DIR/binutils/binutils-$BINUTILS_VERSION/include \\\n        --disable-lldb \\\n        --disable-debugserver \\\n        $EXTRA_CONFIG_FLAGS\n    fail_panic \"Couldn't configure llvm toolchain\"\n    touch $LLVM_BUILD_OUT/.llvm-configured\nfi\n\n# build llvm/clang\ndump \"Building : llvm toolchain [this can take a long time].\"\ncd $LLVM_BUILD_OUT\nrun make -j$NUM_JOBS $MAKE_FLAGS\nfail_panic \"Couldn't compile llvm toolchain\"\n\nif [ \"$CHECK\" = \"yes\" -a \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ] ; then\n    # run the regression test\n    dump \"Running  : llvm toolchain regression test\"\n    cd $LLVM_BUILD_OUT\n    run make check-all\n    fail_warning \"Couldn't pass all llvm regression test\"  # change to fail_panic later\n    if [ \"$POLLY\" = \"yes\" ]; then\n        dump \"Running  : polly toolchain regression test\"\n        cd $LLVM_BUILD_OUT\n        run make polly-test -C tools/polly/test\n        fail_warning \"Couldn't pass all polly regression test\"  # change to fail_panic later\n    fi\nfi\n\n# install the toolchain to its final location\ndump \"Install  : llvm toolchain binaries\"\ncd $LLVM_BUILD_OUT && run make install $MAKE_FLAGS\nfail_panic \"Couldn't install llvm toolchain to $TOOLCHAIN_BUILD_PREFIX\"\n\n# copy arm_neon_x86.h from GCC\nGCC_SRC_DIR=$SRC_DIR/gcc/gcc-$DEFAULT_GCC32_VERSION\ncp -a $GCC_SRC_DIR/gcc/config/i386/arm_neon.h $TOOLCHAIN_BUILD_PREFIX/lib/clang/$LLVM_VERSION/include/arm_neon_x86.h\n\n# Since r156448, llvm installs a separate llvm-config-host when cross-compiling. Use llvm-config-host if this\n# exists otherwise llvm-config.\n# Note, llvm-config-host should've really been called llvm-config-build and the following changes fix this by\n# doing this rename and also making a proper llvm-config-host;\n# https://android-review.googlesource.com/#/c/64261/\n# https://android-review.googlesource.com/#/c/64263/\n# .. with these fixes in place Wine is not needed for Windows cross\n# To my mind, llvm-config-host is a misnomer and it should be llvm-config-build.\nLLVM_CONFIG=$TOOLCHAIN_BUILD_PREFIX/bin/llvm-config\nif [ -f $TOOLCHAIN_BUILD_PREFIX/bin/llvm-config-host ] ; then\n    LLVM_CONFIG=$TOOLCHAIN_BUILD_PREFIX/bin/llvm-config-host\nfi\n\n# remove redundant bits\nrm -rf $TOOLCHAIN_BUILD_PREFIX/docs\nrm -rf $TOOLCHAIN_BUILD_PREFIX/include\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/*.a\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/*.la\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/pkgconfig\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/lib[cp]*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/lib[cp]*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/B*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/B*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/LLVMH*.so\nrm -rf $TOOLCHAIN_BUILD_PREFIX/lib/LLVMH*.dylib\nrm -rf $TOOLCHAIN_BUILD_PREFIX/share\n\nUNUSED_LLVM_EXECUTABLES=\"\nbugpoint c-index-test clang-check clang-format clang-tblgen lli llvm-bcanalyzer\nllvm-config llvm-config-host llvm-cov llvm-diff llvm-dsymutil llvm-dwarfdump llvm-extract llvm-ld\nllvm-mc llvm-nm llvm-mcmarkup llvm-objdump llvm-prof llvm-ranlib llvm-readobj llvm-rtdyld\nllvm-size llvm-stress llvm-stub llvm-symbolizer llvm-tblgen llvm-vtabledump macho-dump cloog\nllvm-vtabledump lli-child-target not count FileCheck llvm-profdata obj2yaml yaml2obj verify-uselistorder\"\n\nfor i in $UNUSED_LLVM_EXECUTABLES; do\n    rm -f $TOOLCHAIN_BUILD_PREFIX/bin/$i\n    rm -f $TOOLCHAIN_BUILD_PREFIX/bin/$i.exe\ndone\n\ntest -z \"$STRIP\" && STRIP=strip\nfind $TOOLCHAIN_BUILD_PREFIX/bin -maxdepth 1 -type f -exec $STRIP {} \\;\n# Note that MacOSX strip generate the follow error on .dylib:\n# \"symbols referenced by indirect symbol table entries that can't be stripped \"\nfind $TOOLCHAIN_BUILD_PREFIX/lib -maxdepth 1 -type f \\( -name \"*.dll\" -o -name \"*.so\" \\) -exec $STRIP {} \\;\n\n# For now, le64-tools is just like le32 ones\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-link${HOST_EXE}\" ]; then\n    run ln -s ndk-link${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-link${HOST_EXE}\n    run ln -s ndk-link${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-link${HOST_EXE}\nfi\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-strip${HOST_EXE}\" ]; then\n    run ln -s ndk-strip${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-strip${HOST_EXE}\n    run ln -s ndk-strip${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-strip${HOST_EXE}\nfi\nif [ -f \"$TOOLCHAIN_BUILD_PREFIX/bin/ndk-translate${HOST_EXE}\" ]; then\n    run ln -s ndk-translate${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le32-none-ndk-translate${HOST_EXE}\n    run ln -s ndk-translate${HOST_EXE} $TOOLCHAIN_BUILD_PREFIX/bin/le64-none-ndk-translate${HOST_EXE}\nfi\n\n# install script\nif [ \"$USE_PYTHON_BC2NATIVE\" != \"yes\" ]; then\n    # Remove those intermediate cpp\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.cpp\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.c\n    rm -f $SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/*.h\nelse\n    cp -p \"$SRC_DIR/$TOOLCHAIN/llvm/tools/ndk-bc2native/ndk-bc2native.py\" \"$TOOLCHAIN_BUILD_PREFIX/bin/\"\nfi\n\nfor LLDBFILE in $(ls -1 $TOOLCHAIN_BUILD_PREFIX/bin/lldb* 2>/dev/null); do\n    echo $LLDBFILE | grep -q '\\.bin$' && continue\n    test -e ${LLDBFILE}.bin && continue\n\n    mv -f $LLDBFILE ${LLDBFILE}.bin\n    fail_panic \"Can't mv $LLDBFILE to ${LLDBFILE}.bin\"\n\n    cat >$LLDBFILE <<EOF\n#!/bin/sh\n\nHOST_TAG=\\`dirname \\$0\\`/..\nHOST_TAG=\\`cd \\$HOST_TAG && pwd\\`\nHOST_TAG=\\`basename \\$HOST_TAG\\`\n\nPYTHONHOME=\\`dirname \\$0\\`/../../../../../prebuilt/\\$HOST_TAG\nPYTHONHOME=\\`cd \\$PYTHONHOME && pwd\\`\nexport PYTHONHOME\n\nexec \\`dirname \\$0\\`/$(basename $LLDBFILE).bin \"\\$@\"\nEOF\n    fail_panic \"Can't generate $LLDBFILE\"\n\n    chmod +x $LLDBFILE\n    fail_panic \"Can't chmod +x $LLDBFILE\"\ndone\n\n# copy to toolchain path\nrun copy_directory \"$TOOLCHAIN_BUILD_PREFIX\" \"$TOOLCHAIN_PATH\"\n\n# create analyzer/++ scripts\nABIS=$PREBUILT_ABIS\n# temp hack before 64-bit ABIs are part of PREBUILT_ABIS\nif [ \"$ABIS\" != \"${ABIS%%64*}\" ]; then\n    ABIS=\"$PREBUILT_ABIS arm64-v8a x86_64 mips64\"\nfi\nABIS=$ABIS\nfor ABI in $ABIS; do\n    ANALYZER_PATH=\"$TOOLCHAIN_PATH/bin/$ABI\"\n    ANALYZER=\"$ANALYZER_PATH/analyzer\"\n    mkdir -p \"$ANALYZER_PATH\"\n    case \"$ABI\" in\n      armeabi)\n          LLVM_TARGET=armv5te-none-linux-androideabi\n          ;;\n      armeabi-v7a|armeabi-v7a-hard)\n          LLVM_TARGET=armv7-none-linux-androideabi\n          ;;\n      arm64-v8a)\n          LLVM_TARGET=aarch64-none-linux-android\n          ;;\n      x86)\n          LLVM_TARGET=i686-none-linux-android\n          ;;\n      x86_64)\n          LLVM_TARGET=x86_64-none-linux-android\n          ;;\n      mips|mips32r6)\n          LLVM_TARGET=mipsel-none-linux-android\n          ;;\n      mips64)\n          LLVM_TARGET=mips64el-none-linux-android\n          ;;\n      *)\n        dump \"ERROR: Unsupported NDK ABI: $ABI\"\n        exit 1\n    esac\n\n    cat > \"${ANALYZER}\" <<EOF\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/../clang -target $LLVM_TARGET \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/../clang \"\\$@\"\nfi\nEOF\n    cat > \"${ANALYZER}++\" <<EOF\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/../clang++ -target $LLVM_TARGET \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/../clang++ \"\\$@\"\nfi\nEOF\n    chmod 0755 \"${ANALYZER}\" \"${ANALYZER}++\"\n\n    if [ -n \"$HOST_EXE\" ] ; then\n        cat > \"${ANALYZER}.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\..\\\\clang${HOST_EXE} -target $LLVM_TARGET %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\..\\\\clang${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n        cat > \"${ANALYZER}++.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\..\\\\clang++${HOST_EXE} -target $LLVM_TARGET %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\..\\\\clang++${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n        chmod 0755 \"${ANALYZER}.cmd\" \"${ANALYZER}++.cmd\"\n    fi\ndone\n\n# copy SOURCES file if present\nif [ -f \"$SRC_DIR/SOURCES\" ]; then\n    cp \"$SRC_DIR/SOURCES\" \"$TOOLCHAIN_PATH/SOURCES\"\nfi\n\n# check GLIBC/GLBICXX symbols\nif [ \"$HOST_OS\" = \"linux\" ]; then\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    $ANDROID_NDK_ROOT/build/tools/check-glibc.sh $NDK_DIR/$SUBDIR\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    SUBDIR=$(get_toolchain_install_subdir $TOOLCHAIN $HOST_TAG)\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\ndump \"Done.\"\nif [ -z \"$OPTION_BUILD_OUT\" -a \"$INCREMENTAL\" != \"yes\" ] ; then\n    rm -rf $BUILD_OUT\nfi\n"
  },
  {
    "path": "build/tools/build-platforms.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds NDK sysroots.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\n\nimport build_support\n\n\nclass ArgParser(build_support.ArgParser):\n    def __init__(self):\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Architectures to build. Builds all if not present.')\n\n\ndef main(args):\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    print('Building plaforms: {}'.format(' '.join(arches)))\n    arch_arg = '--arch={}'.format(','.join(arches))\n    ndk_dir_arg = '--ndk-dir={}'.format(build_support.ndk_path())\n    build_cmd = [\n        'bash', 'gen-platforms.sh', '--fast-copy', arch_arg, ndk_dir_arg,\n    ]\n\n    if args.host != 'linux':\n        build_cmd.append('--case-insensitive')\n\n    build_support.build(build_cmd, args)\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "build/tools/build-renderscript.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to rebuild the host 'ndk-stack' tool from the\n# sources under sources/host-tools/ndk-stack.\n#\n# Note: The tool is installed under prebuilt/$HOST_TAG/bin/ndk-stack\n#       by default.\n#\nPROGDIR=$(dirname $0)\n. $PROGDIR/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to copy RenderScript prebuilts into specified dir.\"\n\n# the list of supported host development systems\nSYSTEMS=$DEFAULT_SYSTEMS\nregister_var_option \"--systems=<list>\" SYSTEMS \"Specify host systems\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nSRCDIR=$ANDROID_NDK_ROOT/../../platform/prebuilts/rs\n\nif [ -z \"$PACKAGE_DIR\" ]; then\n    fail_panic \"PACKAGE_DIR parameter is required\"\nelse\n    cp \"$SRCDIR/renderscript.tar.xz\" \"$PACKAGE_DIR/\"\n    fail_panic \"Failed to copy $SRCDIR/renderscript.tar.xz to $PACKAGE_DIR/\"\n    for SYSTEM in $SYSTEMS; do\n        SYSNAME=$SYSTEM\n        if [ \"$TRY64\" = \"yes\" ]; then\n            case $SYSTEM in\n                darwin-x86|linux-x86)\n                    SYSNAME=${SYSTEM%%x86}x86_64\n                    ;;\n                windows)\n                    SYSNAME=windows-x86_64\n                    ;;\n            esac\n        fi\n        cp \"$SRCDIR/renderscript-$SYSNAME.tar.xz\" \"$PACKAGE_DIR/\"\n        fail_panic \"Failed to copy $SRCDIR/renderscript-$SYSNAME.tar.xz to $PACKAGE_DIR/\"\n    done\nfi\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "build/tools/build-shader-tools.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Builds the glslc, spirv-as, spirv-dis, and spirv-val host executables.\"\"\"\n\nfrom __future__ import print_function\n\nimport os\nimport site\nimport shutil\nimport subprocess\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\n\nimport build_support\nfrom build_support import ArgParser\n\n\ndef main(args):\n    host_tag = build_support.host_to_tag(args.host)\n    build_host_tag = build_support.get_default_host() + \"-x86\"\n\n    package_dir = args.dist_dir\n\n    # TODO(danalbert): use ndk/sources/third_party/googletest/googletest\n    # after it has been updated to a version with CMakeLists\n    gtest_dir = os.path.join(build_support.android_path(), 'external',\n                             'googletest')\n\n    obj_out = os.path.join(args.out_dir, 'shader_tools/obj')\n    install_dir = os.path.join(args.out_dir, 'shader_tools/install')\n\n    package_src = '-'.join([os.path.join(args.out_dir,\n                                         'shader_tools/shader-tools'),\n                            host_tag])\n    package_name = '-'.join(['shader-tools', host_tag])\n\n    source_root = os.path.join(build_support.android_path(), 'external',\n                               'shaderc')\n    shaderc_shaderc_dir = os.path.join(source_root, 'shaderc')\n\n    cmake = os.path.join(build_support.android_path(),\n                         'prebuilts', 'cmake', build_host_tag, 'bin', 'cmake')\n    ctest = os.path.join(build_support.android_path(),\n                         'prebuilts', 'cmake', build_host_tag, 'bin', 'ctest')\n    ninja = os.path.join(build_support.android_path(),\n                         'prebuilts', 'ninja', build_host_tag, 'ninja')\n    file_extension = ''\n\n    additional_args = []\n    if args.host.startswith(\"windows\"):\n        mingw_root = os.path.join(build_support.android_path(),\n                                  'prebuilts', 'gcc', build_host_tag, 'host',\n                                  'x86_64-w64-mingw32-4.8')\n        mingw_compilers = os.path.join(mingw_root, 'bin', 'x86_64-w64-mingw32')\n        mingw_toolchain = os.path.join(source_root, 'shaderc',\n                                       'cmake', 'linux-mingw-toolchain.cmake')\n        additional_args = ['-DCMAKE_TOOLCHAIN_FILE=' + mingw_toolchain,\n                           '-DMINGW_SYSROOT=' + mingw_root,\n                           '-DMINGW_COMPILER_PREFIX=' + mingw_compilers]\n        file_extension = '.exe'\n        if args.host == \"windows64\":\n            additional_args.extend(\n                ['-DCMAKE_CXX_FLAGS=-fno-rtti -fno-exceptions'])\n        else:\n            additional_args.extend(\n                ['-DCMAKE_CXX_FLAGS=-m32 -fno-rtti -fno-exceptions',\n                 '-DCMAKE_C_FLAGS=-m32'])\n\n    for d in [package_src, obj_out, install_dir]:\n        try:\n            os.makedirs(d)\n        except:\n            pass\n\n    build_support.merge_license_files(os.path.join(package_src, 'NOTICE'), [\n        os.path.join(shaderc_shaderc_dir, 'LICENSE'),\n        os.path.join(shaderc_shaderc_dir,\n                     'third_party',\n                     'LICENSE.spirv-tools'),\n        os.path.join(shaderc_shaderc_dir,\n                     'third_party',\n                     'LICENSE.glslang')])\n\n    cmake_command = [cmake, '-GNinja', '-DCMAKE_MAKE_PROGRAM=' + ninja,\n                     '-DCMAKE_BUILD_TYPE=Release',\n                     '-DCMAKE_INSTALL_PREFIX=' + install_dir,\n                     '-DSHADERC_THIRD_PARTY_ROOT_DIR=' + source_root,\n                     '-DSHADERC_GOOGLE_TEST_DIR=' + gtest_dir,\n                     shaderc_shaderc_dir]\n\n    cmake_command.extend(additional_args)\n\n    subprocess.check_call(cmake_command, cwd=obj_out)\n    subprocess.check_call([cmake, '--build', obj_out, '--', '-v'])\n    subprocess.check_call([cmake, '--build', obj_out,\n                           '--target', 'install/strip'])\n\n    files_to_copy = ['glslc' + file_extension,\n                     'spirv-as' + file_extension,\n                     'spirv-dis' + file_extension,\n                     'spirv-val' + file_extension]\n    if (not args.host.startswith('windows')):\n        subprocess.check_call([ctest, '--verbose'], cwd=obj_out)\n\n    for src in files_to_copy:\n        shutil.copy2(os.path.join(install_dir, 'bin', src),\n                     os.path.join(package_src, src))\n\n    build_support.make_package(package_name, package_src, package_dir)\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "build/tools/build-sqlite3.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild sqlite3 libraries for the CrystaX NDK.\n\nThis requires a temporary NDK installation containing\ntoolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$SQLITE3_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir\"\n\nABIS=$PREBUILT_ABIS\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs\"\n\nregister_try64_option\nregister_jobs_option\n\nextract_parameters \"$@\"\n\nSQLITE3_SRCDIR=$(echo $PARAMETERS | sed 1q)\nif [ -z \"$SQLITE3_SRCDIR\" ]; then\n    echo \"ERROR: Please provide the path to the sqlite3 source tree. See --help\"\n    exit 1\nfi\n\nif [ ! -d \"$SQLITE3_SRCDIR\" ]; then\n    echo \"ERROR: No such directory: '$SQLITE3_SRCDIR'\"\n    exit 1\nfi\n\nSQLITE3_SRCDIR=$(cd $SQLITE3_SRCDIR && pwd)\n\nSQLITE3_DSTDIR=$NDK_DIR/$SQLITE3_SUBDIR\nmkdir -p $SQLITE3_DSTDIR\nfail_panic \"Can't create sqlite3 destination directory: $SQLITE3_DSTDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-sqlite3\nelse\n    eval BUILD_DIR=$OPTION_BUILD_DIR\nfi\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI\n# $2: build directory\n# $3: type (static or shared)\nbuild_sqlite3_for_abi ()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n    local TYPE=\"$3\"\n\n    dump \"Building sqlite3 $ABI $TYPE libraries\"\n\n    run mkdir -p $BUILDDIR/jni\n    fail_panic \"Can't create $BUILDDIR/jni\"\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo 'include $(CLEAR_VARS)'\n        echo 'LOCAL_MODULE := sqlite3'\n        echo \"LOCAL_SRC_FILES := $SQLITE3_SRCDIR/sqlite3.c\"\n        echo \"LOCAL_INCLUDES := $SQLITE3_SRCDIR/\"\n        echo 'LOCAL_CFLAGS := -Wall -Wno-unused -Wno-multichar -Wstrict-aliasing=2 -Werror'\n        case $ABI in\n            x86|x86_64|arm64-v8a)\n                echo 'LOCAL_CFLAGS += -Wno-strict-aliasing'\n                ;;\n        esac\n        echo 'LOCAL_CFLAGS += -fno-exceptions -fmessage-length=0'\n        echo 'LOCAL_CFLAGS += -DSQLITE_THREADSAFE=1'\n        echo \"include \\$(BUILD_$(echo $TYPE | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n    } | cat >$BUILDDIR/jni/Android.mk\n    fail_panic \"Can't generate Android.mk\"\n\n    run $NDK_DIR/ndk-build -C $BUILDDIR APP_ABI=$ABI V=1\n    fail_panic \"Can't build sqlite3 $ABI $TYPE library\"\n\n    if [ \"$SQLITE3_HEADERS_INSTALLED\" != \"yes\" ]; then\n        log \"Install sqlite3 headers into $SQLITE3_DSTDIR\"\n        run rm -Rf $SQLITE3_DSTDIR/include\n        run mkdir -p $SQLITE3_DSTDIR/include && \\\n        run cp -p $SQLITE3_SRCDIR/*.h $SQLITE3_DSTDIR/include\n        fail_panic \"Can't install sqlite3 headers\"\n        SQLITE3_HEADERS_INSTALLED=yes\n        export SQLITE3_HEADERS_INSTALLED\n    fi\n\n    log \"Install sqlite3 $TYPE $ABI libraries into $SQLITE3_DSTDIR\"\n    run mkdir -p $SQLITE3_DSTDIR/libs/$ABI\n    fail_panic \"Can't create $SQLITE3_DSTDIR/libs/$ABI\"\n\n    local LIBSUFFIX\n    if [ \"$TYPE\" = \"shared\" ]; then\n        LIBSUFFIX=so\n    else\n        LIBSUFFIX=a\n    fi\n\n    local OBJDIR=$BUILDDIR/obj/local/$ABI\n\n    run cp -fpH $OBJDIR/libsqlite3.$LIBSUFFIX $SQLITE3_DSTDIR/libs/$ABI\n    fail_panic \"Can't install sqlite3 $TYPE $ABI library\"\n}\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    PACKAGE_NAME=\"sqlite3-build-files.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        SQLITE3_BUILD_FILES_NEED_PACKAGE=no\n    else\n        SQLITE3_BUILD_FILES_NEED_PACKAGE=yes\n    fi\n\n    PACKAGE_NAME=\"sqlite3-headers.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n    if [ $? -eq 0 ]; then\n        SQLITE3_HEADERS_NEED_PACKAGE=no\n    else\n        SQLITE3_HEADERS_NEED_PACKAGE=yes\n    fi\nfi\n\nBUILT_ABIS=\"\"\nfor ABI in $ABIS; do\n    DO_BUILD_PACKAGE=\"yes\"\n    if [ -n \"$PACKAGE_DIR\" ]; then\n        PACKAGE_NAME=\"sqlite3-libs-$ABI.tar.xz\"\n        echo \"Look for: $PACKAGE_NAME\"\n        try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n        if [ $? -eq 0 ]; then\n            if [ \"$SQLITE3_HEADERS_NEED_PACKAGE\" = \"yes\" -a -z \"$BUILT_ABIS\" ]; then\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            else\n                DO_BUILD_PACKAGE=\"no\"\n            fi\n        else\n            BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n        fi\n    fi\n    if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n        for TYPE in static shared; do\n            build_sqlite3_for_abi $ABI \"$BUILD_DIR/$ABI/$TYPE\" \"$TYPE\"\n        done\n    fi\ndone\n\nlog \"Generating $SQLITE3_DSTDIR/Android.mk\"\n{\n    echo \"# WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT EDIT IT MANUALLY!!!\"\n    echo \"\"\n    cat $NDK_DIR/$CRYSTAX_SUBDIR/LICENSE | sed 's,^,# ,' | sed 's,^#\\s*$,#,'\n    echo \"\"\n    echo 'LOCAL_PATH := $(call my-dir)'\n\n    for suffix in a so; do\n        if [ \"$suffix\" = \"a\" ]; then\n            type=static\n        else\n            type=shared\n        fi\n\n        echo ''\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := sqlite3_${type}\"\n        echo \"LOCAL_SRC_FILES := libs/\\$(TARGET_ARCH_ABI)/libsqlite3.${suffix}\"\n        echo 'LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include'\n        echo \"include \\$(PREBUILT_$(echo $type | tr '[a-z]' '[A-Z]')_LIBRARY)\"\n    done\n} | cat >$SQLITE3_DSTDIR/Android.mk\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    if [ \"$SQLITE3_BUILD_FILES_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"\"\n        for F in Android.mk; do\n            FILES=\"$FILES $SQLITE3_SUBDIR/$F\"\n        done\n        PACKAGE_NAME=\"sqlite3-build-files.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package sqlite3 build files!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    if [ \"$SQLITE3_HEADERS_NEED_PACKAGE\" = \"yes\" ]; then\n        FILES=\"$SQLITE3_SUBDIR/include\"\n        PACKAGE_NAME=\"sqlite3-headers.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package sqlite3 headers!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    fi\n\n    for ABI in $BUILT_ABIS; do\n        FILES=\"$SQLITE3_SUBDIR/libs/$ABI\"\n        PACKAGE_NAME=\"sqlite3-libs-$ABI.tar.xz\"\n        PACKAGE=\"$PACKAGE_DIR/$PACKAGE_NAME\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR\" \"$FILES\"\n        fail_panic \"Could not package $ABI sqlite3 binaries!\"\n        cache_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/builder-funcs.sh",
    "content": "#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This file contains various shell function definitions that can be\n#  used to either build a static and shared libraries from sources, or\n#  generate a Makefile to do it in parallel.\n#\n\n_BUILD_TAB=$(echo \" \" | tr ' ' '\\t')\n\nbuilder_command ()\n{\n    if [ -z \"$_BUILD_MK\" ]; then\n        echo \"$@\"\n        \"$@\"\n    else\n        echo \"${_BUILD_TAB}$@\" >> $_BUILD_MK\n    fi\n}\n\n\nbuilder_log ()\n{\n    if [ \"$_BUILD_MK\" ]; then\n        echo \"${_BUILD_TAB}echo $@\" >> $_BUILD_MK\n    else\n        log \"$@\"\n    fi\n}\n\n# $1: Build directory\n# $2: Optional Makefile name\nbuilder_begin ()\n{\n    _BUILD_DIR_NEW=\n    _BUILD_DIR=$1\n    if [ ! -d \"$_BUILD_DIR\" ]; then\n        mkdir -p \"$_BUILD_DIR\"\n        fail_panic \"Can't create build directory: $_BUILD_DIR\"\n        _BUILD_DIR_NEW=true\n    else\n        rm -rf \"$_BUILD_DIR/*\"\n        fail_panic \"Can't cleanup build directory: $_BUILD_DIR\"\n    fi\n    _BUILD_TARGETS=\n    _BUILD_PREFIX=\n    _BUILD_MK=$2\n    if [ -n \"$_BUILD_MK\" ]; then\n        log \"Creating temporary build Makefile: $_BUILD_MK\"\n        rm -f $_BUILD_MK &&\n        echo \"# Auto-generated by $0 - do not edit!\" > $_BUILD_MK\n        echo \".PHONY: all\" >> $_BUILD_MK\n        echo \"all:\" >> $_BUILD_MK\n    fi\n\n    builder_begin_module\n}\n\n# $1: Variable name\n# out: Variable value\n_builder_varval ()\n{\n    eval echo \"\\$$1\"\n}\n\n_builder_varadd ()\n{\n    local _varname=\"$1\"\n    local _varval=\"$(_builder_varval $_varname)\"\n    shift\n    if [ -z \"$_varval\" ]; then\n        eval $_varname=\\\"$@\\\"\n    else\n        eval $_varname=\\$$_varname\\\" $@\\\"\n    fi\n}\n\n\nbuilder_set_prefix ()\n{\n    _BUILD_PREFIX=\"$@\"\n}\n\nbuilder_begin_module ()\n{\n    _BUILD_CC=\n    _BUILD_CXX=\n    _BUILD_AR=\n    _BUILD_C_INCLUDES=\n    _BUILD_CFLAGS=\n    _BUILD_CXXFLAGS=\n    _BUILD_LDFLAGS_BEGIN_SO=\n    _BUILD_LDFLAGS_END_SO=\n    _BUILD_LDFLAGS_BEGIN_EXE=\n    _BUILD_LDFLAGS_END_EXE=\n    _BUILD_LDFLAGS=\n    _BUILD_BINPREFIX=\n    _BUILD_DSTDIR=\n    _BUILD_SRCDIR=.\n    _BUILD_OBJECTS=\n    _BUILD_STATIC_LIBRARIES=\n    _BUILD_SHARED_LIBRARIES=\n    _BUILD_COMPILER_RUNTIME_LDFLAGS=-lgcc\n}\n\nbuilder_set_binprefix ()\n{\n    _BUILD_BINPREFIX=$1\n    _BUILD_CC=${1}gcc\n    _BUILD_CXX=${1}g++\n    _BUILD_AR=${1}ar\n}\n\nbuilder_set_binprefix_llvm ()\n{\n    _BUILD_BINPREFIX=$1\n    _BUILD_CC=${1}/clang\n    _BUILD_CXX=${1}/clang++\n    _BUILD_AR=${2}ar\n}\n\nbuilder_set_builddir ()\n{\n    _BUILD_DIR=$1\n}\n\nbuilder_set_srcdir ()\n{\n    _BUILD_SRCDIR=$1\n}\n\nbuilder_set_dstdir ()\n{\n    _BUILD_DSTDIR=$1\n}\n\nbuilder_ldflags ()\n{\n    _builder_varadd _BUILD_LDFLAGS \"$@\"\n}\n\nbuilder_ldflags_exe ()\n{\n    _builder_varadd _BUILD_LDFLAGS_EXE \"$@\"\n}\n\nbuilder_cflags ()\n{\n    _builder_varadd _BUILD_CFLAGS \"$@\"\n}\n\nbuilder_cxxflags ()\n{\n    _builder_varadd _BUILD_CXXFLAGS \"$@\"\n}\n\nbuilder_c_includes ()\n{\n    _builder_varadd _BUILD_C_INCLUDES \"$@\"\n}\n\n# $1: optional var to hold the original cflags before reset\nbuilder_reset_cflags ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_CFLAGS\\\"\n    fi\n    _BUILD_CFLAGS=\n}\n\n# $1: optional var to hold the original cxxflags before reset\nbuilder_reset_cxxflags ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_CXXFLAGS\\\"\n    fi\n    _BUILD_CXXFLAGS=\n}\n\n# $1: optional var to hold the original c_includes before reset\nbuilder_reset_c_includes ()\n{\n    local _varname=\"$1\"\n    if [ -n \"$_varname\" ] ; then\n        eval $_varname=\\\"$_BUILD_C_INCLUDES\\\"\n    fi\n    _BUILD_C_INCLUDES=\n}\n\nbuilder_compiler_runtime_ldflags ()\n{\n    _BUILD_COMPILER_RUNTIME_LDFLAGS=$1\n}\n\nbuilder_link_with ()\n{\n    local LIB\n    for LIB; do\n        case $LIB in\n            *.a)\n                _builder_varadd _BUILD_STATIC_LIBRARIES $LIB\n                ;;\n            *.so)\n                _builder_varadd _BUILD_SHARED_LIBRARIES $LIB\n                ;;\n            *)\n                echo \"ERROR: Unknown link library extension: $LIB\"\n                exit 1\n        esac\n    done\n}\n\nbuilder_sources ()\n{\n    local src srcfull obj cc cflags text\n    if [ -z \"$_BUILD_DIR\" ]; then\n        panic \"Build directory not set!\"\n    fi\n    if [ -z \"$_BUILD_CC\" ]; then\n        _BUILD_CC=${CC:-gcc}\n    fi\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n    for src in \"$@\"; do\n        srcfull=$_BUILD_SRCDIR/$src\n        if [ ! -f \"$srcfull\" ]; then\n            echo \"ERROR: Missing source file: $srcfull\"\n            exit 1\n        fi\n        obj=$src\n        cflags=\"\"\n        for inc in $_BUILD_C_INCLUDES; do\n            cflags=$cflags\" -I$inc\"\n        done\n        cflags=$cflags\" -I$_BUILD_SRCDIR\"\n        case $obj in\n            *.c)\n                obj=${obj%%.c}\n                text=\"C\"\n                cc=$_BUILD_CC\n                cflags=\"$cflags $_BUILD_CFLAGS\"\n                ;;\n            *.cpp)\n                obj=${obj%%.cpp}\n                text=\"C++\"\n                cc=$_BUILD_CXX\n                cflags=\"$cflags $_BUILD_CXXFLAGS\"\n                ;;\n            *.cc)\n                obj=${obj%%.cc}\n                text=\"C++\"\n                cc=$_BUILD_CXX\n                cflags=\"$cflags $_BUILD_CXXFLAGS\"\n                ;;\n            *.S|*.s)\n                obj=${obj%%.$obj}\n                text=\"ASM\"\n                cc=$_BUILD_CC\n                cflags=\"$cflags $_BUILD_CFLAGS\"\n                ;;\n            *)\n                echo \"Unknown source file extension: $obj\"\n                exit 1\n                ;;\n        esac\n\n        # Source file path can include ../ path items, ensure\n        # that the generated object do not back up the output\n        # directory by translating them to __/\n        obj=$(echo \"$obj\" | tr '../' '__/')\n\n        # Ensure we have unwind tables in the generated machine code\n        # This is useful to get good stack traces\n        cflags=$cflags\" -funwind-tables\"\n\n        obj=$_BUILD_DIR/$obj.o\n        if [ \"$_BUILD_MK\" ]; then\n            echo \"$obj: $srcfull\" >> $_BUILD_MK\n        fi\n        builder_log \"${_BUILD_PREFIX}$text: $src\"\n        builder_command mkdir -p $(dirname \"$obj\")\n        builder_command $NDK_CCACHE $cc -c -o \"$obj\" \"$srcfull\" $cflags\n        fail_panic \"Could not compile ${_BUILD_PREFIX}$src\"\n        _BUILD_OBJECTS=$_BUILD_OBJECTS\" $obj\"\n    done\n}\n\nbuilder_static_library ()\n{\n    local lib libname arflags\n    libname=$1\n    if [ -z \"$_BUILD_DSTDIR\" ]; then\n        panic \"Destination directory not set\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.a}.a\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    if [ -z \"${_BUILD_AR}\" ]; then\n        _BUILD_AR=${AR:-ar}\n    fi\n    builder_log \"${_BUILD_PREFIX}Archive: $libname\"\n    rm -f \"$lib\"\n    arflags=\"crs\"\n    case $HOST_TAG in\n        darwin*)\n            # XCode 'ar' doesn't support D flag\n            ;;\n        *)\n            arflags=\"${arflags}D\"\n            ;;\n    esac\n    builder_command ${_BUILD_AR} $arflags \"$lib\" \"$_BUILD_OBJECTS\"\n    fail_panic \"Could not archive ${_BUILD_PREFIX}$libname objects!\"\n}\n\nbuilder_host_static_library ()\n{\n    local lib libname\n    libname=$1\n    if [ -z \"$_BUILD_DSTDIR\" ]; then\n        panic \"Destination directory not set\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.a}.a\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    if [ -z \"$BUILD_AR\" ]; then\n        _BUILD_AR=${AR:-ar}\n    fi\n    builder_log \"${_BUILD_PREFIX}Archive: $libname\"\n    rm -f \"$lib\"\n    builder_command ${_BUILD_AR} crsD \"$lib\" \"$_BUILD_OBJECTS\"\n    fail_panic \"Could not archive ${_BUILD_PREFIX}$libname objects!\"\n}\n\nbuilder_shared_library ()\n{\n    local lib libname suffix libm\n    libname=$1\n    suffix=$2\n    armeabi_v7a_float_abi=$3\n\n    if [ -z \"$suffix\" ]; then\n        suffix=\".so\"\n    fi\n    libm=\"-lm\"\n    if [ \"$armeabi_v7a_float_abi\" = \"hard\" ]; then\n        libm=\"-lm_hard\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%${suffix}}${suffix}\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    #            Also $libm must come before -lc because bionic libc\n    #            accidentally exports a soft-float version of ldexp.\n    builder_command ${_BUILD_CXX} \\\n        -Wl,-soname,$(basename $lib) \\\n        -Wl,-shared \\\n        $_BUILD_LDFLAGS_BEGIN_SO \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_COMPILER_RUNTIME_LDFLAGS \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $libm -lc \\\n        $_BUILD_LDFLAGS \\\n        $_BUILD_LDFLAGS_END_SO \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\n# Same as builder_shared_library, but do not link the default libs\nbuilder_nostdlib_shared_library ()\n{\n    local lib libname suffix\n    libname=$1\n    suffix=$2\n    if [ -z \"$suffix\" ]; then\n        suffix=\".so\"\n    fi\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%${suffix}}${suffix}\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    builder_command ${_BUILD_CXX} \\\n        -Wl,-soname,$(basename $lib) \\\n        -Wl,-shared \\\n        $_BUILD_LDFLAGS_BEGIN_SO \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        $_BUILD_LDFLAGS_END_SO \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\nbuilder_host_shared_library ()\n{\n    local lib libname\n    libname=$1\n    lib=$_BUILD_DSTDIR/$libname\n    lib=${lib%%.so}.so\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $lib\"\n        echo \"$lib: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}SharedLibrary: $libname\"\n\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    builder_command ${_BUILD_CXX} \\\n        -shared -s \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        -o $lib\n    fail_panic \"Could not create ${_BUILD_PREFIX}shared library $libname\"\n}\n\nbuilder_host_executable ()\n{\n    local exe exename\n    exename=$1\n    exe=$_BUILD_DSTDIR/$exename$HOST_EXE\n    if [ \"$_BUILD_MK\" ]; then\n        _BUILD_TARGETS=$_BUILD_TARGETS\" $exe\"\n        echo \"$exe: $_BUILD_OBJECTS\" >> $_BUILD_MK\n    fi\n    builder_log \"${_BUILD_PREFIX}Executable: $exename$HOST_EXE\"\n\n    if [ -z \"$_BUILD_CXX\" ]; then\n        _BUILD_CXX=${CXX:-g++}\n    fi\n\n    # Important: -lgcc must appear after objects and static libraries,\n    #            but before shared libraries for Android. It doesn't hurt\n    #            for other platforms.\n    builder_command ${_BUILD_CXX} \\\n        -s \\\n        $_BUILD_OBJECTS \\\n        $_BUILD_STATIC_LIBRARIES \\\n        $_BUILD_SHARED_LIBRARIES \\\n        $_BUILD_LDFLAGS \\\n        -o $exe\n    fail_panic \"Could not create ${_BUILD_PREFIX}executable $libname\"\n}\n\n\nbuilder_end ()\n{\n    if [ \"$_BUILD_MK\" ]; then\n        echo \"all: $_BUILD_TARGETS\" >> $_BUILD_MK\n        run make -j$NUM_JOBS -f $_BUILD_MK\n        fail_panic \"Could not build project!\"\n    fi\n\n    if [ \"$_BUILD_DIR_NEW\" ]; then\n        log \"Cleaning up build directory: $_BUILD_DIR\"\n        rm -rf \"$_BUILD_DIR\"\n        _BUILD_DIR_NEW=\n    fi\n}\n\n# Same as builder_begin, but to target Android with a specific ABI\n# $1: ABI name (e.g. armeabi)\n# $2: Build directory\n# $3: Gcc version\n# $4: Optional llvm version\n# $5: Optional Makefile name\n# $6: Platform (android-X)\nbuilder_begin_android ()\n{\n    local ABI BUILDDIR LLVM_VERSION MAKEFILE\n    local ARCH SYSROOT LDIR FLAGS\n    local CRTBEGIN_SO_O CRTEND_SO_O CRTBEGIN_EXE_SO CRTEND_SO_O\n    local BINPREFIX GCC_TOOLCHAIN LLVM_TRIPLE GCC_VERSION\n    local SCRATCH_FLAGS PLATFORM\n    local PREBUILT_NDK=$ANDROID_BUILD_TOP/prebuilts/ndk/current\n    if [ -z \"$ANDROID_BUILD_TOP\" ]; then\n        panic \"ANDROID_BUILD_TOP is not defined!\"\n    elif [ ! -d \"$PREBUILT_NDK/platforms\" ]; then\n        panic \"Missing directory: $PREBUILT_NDK/platforms\"\n    fi\n    ABI=$1\n    BUILDDIR=$2\n    GCC_VERSION=$3\n    LLVM_VERSION=$4\n    MAKEFILE=$5\n    ARCH=$(convert_abi_to_arch $ABI)\n    PLATFORM=$6\n\n    if [ -n \"$LLVM_VERSION\" ]; then\n        # override GCC_VERSION to pick $DEFAULT_LLVM_GCC??_VERSION instead\n        if [ \"$ABI\" != \"${ABI%%64*}\" ]; then\n            GCC_VERSION=$DEFAULT_LLVM_GCC64_VERSION\n        else\n            GCC_VERSION=$DEFAULT_LLVM_GCC32_VERSION\n        fi\n    fi\n    for TAG in $HOST_TAG $HOST_TAG32; do\n        BINPREFIX=$ANDROID_BUILD_TOP/prebuilts/ndk/current/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\n        if [ -f ${BINPREFIX}gcc ]; then\n            break;\n        fi\n    done\n    if [ -n \"$LLVM_VERSION\" ]; then\n        GCC_TOOLCHAIN=`dirname $BINPREFIX`\n        GCC_TOOLCHAIN=`dirname $GCC_TOOLCHAIN`\n        LLVM_BINPREFIX=$(get_llvm_toolchain_binprefix $TAG)\n    fi\n\n    if [ -z \"$PLATFORM\" ]; then\n      SYSROOT=$PREBUILT_NDK/$(get_default_platform_sysroot_for_arch $ARCH)\n    else\n      SYSROOT=$PREBUILT_NDK/platforms/$PLATFORM/arch-$ARCH\n    fi\n    LDIR=$SYSROOT\"/usr/\"$(get_default_libdir_for_abi $ABI)\n\n    CRTBEGIN_EXE_O=$LDIR/crtbegin_dynamic.o\n    CRTEND_EXE_O=$LDIR/crtend_android.o\n\n    CRTBEGIN_SO_O=$LDIR/crtbegin_so.o\n    CRTEND_SO_O=$LDIR/crtend_so.o\n    if [ ! -f \"$CRTBEGIN_SO_O\" ]; then\n        CRTBEGIN_SO_O=$CRTBEGIN_EXE_O\n    fi\n    if [ ! -f \"$CRTEND_SO_O\" ]; then\n        CRTEND_SO_O=$CRTEND_EXE_O\n    fi\n\n    builder_begin \"$BUILDDIR\" \"$MAKEFILE\"\n    builder_set_prefix \"$ABI \"\n    if [ -z \"$LLVM_VERSION\" ]; then\n        builder_set_binprefix \"$BINPREFIX\"\n    else\n        builder_set_binprefix_llvm \"$LLVM_BINPREFIX\" \"$BINPREFIX\"\n        case $ABI in\n            armeabi)\n                LLVM_TRIPLE=armv5te-none-linux-androideabi\n                ;;\n            armeabi-v7a|armeabi-v7a-hard)\n                LLVM_TRIPLE=armv7-none-linux-androideabi\n                ;;\n            arm64-v8a)\n                LLVM_TRIPLE=aarch64-none-linux-android\n                ;;\n            x86)\n                LLVM_TRIPLE=i686-none-linux-android\n                ;;\n            x86_64)\n                LLVM_TRIPLE=x86_64-none-linux-android\n                ;;\n            mips|mips32r6)\n                LLVM_TRIPLE=mipsel-none-linux-android\n                ;;\n            mips64)\n                LLVM_TRIPLE=mips64el-none-linux-android\n                ;;\n        esac\n        SCRATCH_FLAGS=\"-target $LLVM_TRIPLE $FLAGS\"\n        builder_ldflags \"$SCRATCH_FLAGS\"\n        if [ \"$LLVM_VERSION\" \\> \"3.4\" ]; then\n            # Turn off integrated-as for clang >= 3.5 due to ill-formed object it produces\n            # involving inline-assembly .pushsection/.popsection which crashes ld.gold\n            # BUG=18589643\n            SCRATCH_FLAGS=\"$SCRATCH_FLAGS -fno-integrated-as\"\n        fi\n        builder_cflags  \"$SCRATCH_FLAGS\"\n        builder_cxxflags \"$SCRATCH_FLAGS\"\n        if [ ! -z $GCC_TOOLCHAIN ]; then\n            SCRATCH_FLAGS=\"-gcc-toolchain $GCC_TOOLCHAIN\"\n            builder_cflags \"$SCRATCH_FLAGS\"\n            builder_cxxflags \"$SCRATCH_FLAGS\"\n            builder_ldflags \"$SCRATCH_FLAGS\"\n        fi\n    fi\n\n    SCRATCH_FLAGS=\"--sysroot=$SYSROOT\"\n    builder_cflags \"$SCRATCH_FLAGS\"\n    builder_cxxflags \"$SCRATCH_FLAGS\"\n\n    SCRATCH_FLAGS=\"--sysroot=$SYSROOT -nostdlib\"\n    _BUILD_LDFLAGS_BEGIN_SO=\"$SCRATCH_FLAGS $CRTBEGIN_SO_O\"\n    _BUILD_LDFLAGS_BEGIN_EXE=\"$SCRATCH_FLAGS $CRTBEGIN_EXE_O\"\n\n    _BUILD_LDFLAGS_END_SO=\"$CRTEND_SO_O\"\n    _BUILD_LDFLAGS_END_EXE=\"$CRTEND_EXE_O\"\n\n    case $ABI in\n        armeabi)\n            if [ -z \"$LLVM_VERSION\" ]; then\n                # add -minline-thumb1-jumptable such that gabi++/stlport/libc++ can be linked\n                # with compiler-rt where helpers __gnu_thumb1_case_* (in libgcc.a) don't exist\n                SCRATCH_FLAGS=\"-minline-thumb1-jumptable\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n            else\n                builder_cflags \"\"\n                builder_cxxflags \"\"\n            fi\n            ;;\n        armeabi-v7a|armeabi-v7a-hard)\n            SCRATCH_FLAGS=\"-march=armv7-a -mfpu=vfpv3-d16\"\n            builder_cflags \"$SCRATCH_FLAGS\"\n            builder_cxxflags \"$SCRATCH_FLAGS\"\n            builder_ldflags \"-march=armv7-a -Wl,--fix-cortex-a8\"\n            if [ \"$ABI\" != \"armeabi-v7a-hard\" ]; then\n                SCRATCH_FLAGS=\"-mfloat-abi=softfp\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n            else\n                SCRATCH_FLAGS=\"-mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n                builder_cflags \"$SCRATCH_FLAGS\"\n                builder_cxxflags \"$SCRATCH_FLAGS\"\n                builder_ldflags \"-Wl,--no-warn-mismatch -lm_hard\"\n            fi\n            ;;\n    esac\n}\n\n# $1: Build directory\n# $2: Optional Makefile name\nbuilder_begin_host ()\n{\n    prepare_host_build\n    builder_begin \"$1\" \"$2\"\n    builder_set_prefix \"$HOST_TAG \"\n}\n"
  },
  {
    "path": "build/tools/common-build-host-funcs.sh",
    "content": "# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# A set of function shared by the 'build-host-xxxx.sh' scripts.\n# They are mostly related to building host libraries.\n#\n# NOTE: This script uses various prefixes:\n#\n#    BH_       Used for public macros\n#    bh_       Use for public functions\n#\n#    _BH_      Used for private macros\n#    _bh_      Used for private functions\n#\n# Callers should only rely on the public macros and functions defined here.\n#\n\n# List of macros defined by the functions here:\n#\n#   defined by 'bh_set_build_tag'\n#\n#   BH_BUILD_CONFIG     Generic GNU config triplet for build system\n#   BH_BUILD_OS         NDK system name\n#   BH_BUILD_ARCH       NDK arch name\n#   BH_BUILD_TAG        NDK system tag ($OS-$ARCH)\n#   BH_BUILD_BITS       build system bitness (32 or 64)\n#\n#   defined by 'bh_set_host_tag'\n#                          7\n#   BH_HOST_CONFIG\n#   BH_HOST_OS\n#   BH_HOST_ARCH\n#   BH_HOST_TAG\n#   BH_HOST_BITS\n#\n#   defined by 'bh_set_target_tag'\n#\n#   BH_TARGET_CONFIG\n#   BH_TARGET_OS\n#   BH_TARGET_ARCH\n#   BH_TARGET_TAG\n#   BH_TARGET_BITS\n#\n#\n\n\n# The values of HOST_OS/ARCH/TAG will be redefined during the build to\n# match those of the system the generated compiler binaries will run on.\n#\n# Save the original ones into BUILD_XXX variants, corresponding to the\n# machine where the build happens.\n#\nBH_BUILD_OS=$HOST_OS\nBH_BUILD_ARCH=$HOST_ARCH\nBH_BUILD_TAG=$HOST_TAG\n\n# Map an NDK system tag to an OS name\n# $1: system tag (e.g. linux-x86)\n# Out: system name (e.g. linux)\nbh_tag_to_os ()\n{\n    local RET\n    case $1 in\n        android-*) RET=\"android\";;\n        linux-*) RET=\"linux\";;\n        darwin-*) RET=\"darwin\";;\n        windows|windows-*) RET=\"windows\";;\n        *) echo \"ERROR: Unknown tag $1\" >&2; echo \"INVALID\"; exit 1;;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to an architecture name\n# $1: system tag (e.g. linux-x86)\n# Out: arch name (e.g. x86)\nbh_tag_to_arch ()\n{\n    local RET\n    case $1 in\n        *-arm) RET=arm;;\n        *-arm64) RET=arm64;;\n        *-mips) RET=mips;;\n        *-mips64) RET=mips64;;\n        windows|*-x86) RET=x86;;\n        *-x86_64) RET=x86_64;;\n        *) echo \"ERROR: Unknown tag $1\" >&2; echo \"INVALID\"; exit 1;;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to a bit number\n# $1: system tag (e.g. linux-x86)\n# Out: bit number (32 or 64)\nbh_tag_to_bits ()\n{\n    local RET\n    case $1 in\n        windows|*-x86|*-arm|*-mips) RET=32;;\n        *-x86_64|*-arm64|*-mips64) RET=64;;\n        *) echo \"ERROR: Unknown tag $1\" >&2; echo \"INVALID\"; exit 1;;\n    esac\n    echo $RET\n}\n\n# Map an NDK system tag to the corresponding GNU configuration triplet.\n# $1: NDK system tag\n# Out: GNU configuration triplet\nbh_tag_to_config_triplet ()\n{\n    local RET\n    case $1 in\n        linux-x86) RET=i686-linux-gnu;;\n        linux-x86_64) RET=x86_64-linux-gnu;;\n        darwin-x86) RET=i686-apple-darwin;;\n        darwin-x86_64) RET=x86_64-apple-darwin;;\n        windows|windows-x86) RET=i586-pc-mingw32msvc;;\n        windows-x86_64) RET=x86_64-w64-mingw32;;\n        android-arm) RET=arm-linux-androideabi;;\n        android-arm64) RET=aarch64-linux-android;;\n        android-x86) RET=i686-linux-android;;\n        android-x86_64) RET=x86_64-linux-android;;\n        android-mips) RET=mipsel-linux-android;;\n        android-mips64) RET=mips64el-linux-android;;\n        *) echo \"ERROR: Unknown tag $1\" >&2; echo \"INVALID\"; exit 1;;\n    esac\n    echo \"$RET\"\n}\n\n\nbh_set_build_tag ()\n{\n  SAVED_OPTIONS=$(set +o)\n  set -e\n  BH_BUILD_OS=$(bh_tag_to_os $1)\n  BH_BUILD_ARCH=$(bh_tag_to_arch $1)\n  BH_BUILD_BITS=$(bh_tag_to_bits $1)\n  BH_BUILD_TAG=$BH_BUILD_OS-$BH_BUILD_ARCH\n  BH_BUILD_CONFIG=$(bh_tag_to_config_triplet $1)\n  eval \"$SAVED_OPTIONS\"\n}\n\n# Set default BH_BUILD macros.\nbh_set_build_tag $HOST_TAG\n\nbh_set_host_tag ()\n{\n  SAVED_OPTIONS=$(set +o)\n  set -e\n  BH_HOST_OS=$(bh_tag_to_os $1)\n  BH_HOST_ARCH=$(bh_tag_to_arch $1)\n  BH_HOST_BITS=$(bh_tag_to_bits $1)\n  BH_HOST_TAG=$BH_HOST_OS-$BH_HOST_ARCH\n  BH_HOST_CONFIG=$(bh_tag_to_config_triplet $1)\n  eval \"$SAVED_OPTIONS\"\n}\n\nbh_set_target_tag ()\n{\n  SAVED_OPTIONS=$(set +o)\n  set -e\n  BH_TARGET_OS=$(bh_tag_to_os $1)\n  BH_TARGET_ARCH=$(bh_tag_to_arch $1)\n  BH_TARGET_BITS=$(bh_tag_to_bits $1)\n  BH_TARGET_TAG=$BH_TARGET_OS-$BH_TARGET_ARCH\n  BH_TARGET_CONFIG=$(bh_tag_to_config_triplet $1)\n  eval \"$SAVED_OPTIONS\"\n}\n\nbh_sort_systems_build_first ()\n{\n  local IN_SYSTEMS=\"$1\"\n  local OUT_SYSTEMS\n  # Pull out the host if there\n  for IN_SYSTEM in $IN_SYSTEMS; do\n    if [ \"$IN_SYSTEM\" = \"$BH_BUILD_TAG\" ]; then\n        OUT_SYSTEMS=$IN_SYSTEM\n    fi\n  done\n  # Append the rest\n  for IN_SYSTEM in $IN_SYSTEMS; do\n    if [ ! \"$IN_SYSTEM\" = \"$BH_BUILD_TAG\" ]; then\n        OUT_SYSTEMS=$OUT_SYSTEMS\" $IN_SYSTEM\"\n    fi\n  done\n  echo $OUT_SYSTEMS\n}\n\n# $1 is the string to search for\n# $2... is the list to search in\n# Returns first, yes or no.\nbh_list_contains ()\n{\n  local SEARCH=\"$1\"\n  shift\n  # For dash, this has to be split over 2 lines.\n  # Seems to be a bug with dash itself:\n  # https://bugs.launchpad.net/ubuntu/+source/dash/+bug/141481\n  local LIST\n  LIST=$@\n  local RESULT=first\n  # Pull out the host if there\n  for ELEMENT in $LIST; do\n    if [ \"$ELEMENT\" = \"$SEARCH\" ]; then\n      echo $RESULT\n      return 0\n    fi\n    RESULT=yes\n  done\n  echo no\n  return 1\n}\n\n\n# Use this function to enable/disable colored output\n# $1: 'true' or 'false'\nbh_set_color_mode ()\n{\n  local DO_COLOR=\n  case $1 in\n    on|enable|true) DO_COLOR=true\n    ;;\n  esac\n  if [ \"$DO_COLOR\" ]; then\n    _BH_COLOR_GREEN=\"\\033[32m\"\n    _BH_COLOR_PURPLE=\"\\033[35m\"\n    _BH_COLOR_CYAN=\"\\033[36m\"\n    _BH_COLOR_END=\"\\033[0m\"\n  else\n    _BH_COLOR_GREEN=\n    _BH_COLOR_PURPLE=\n    _BH_COLOR_CYAN=\n    _BH_COLOR_END=\n  fi\n}\n\n# By default, enable color mode\nbh_set_color_mode true\n\n# Pretty printing with colors!\nbh_host_text ()\n{\n    printf \"[${_BH_COLOR_GREEN}${BH_HOST_TAG}${_BH_COLOR_END}]\"\n}\n\nbh_toolchain_text ()\n{\n    printf \"[${_BH_COLOR_PURPLE}${BH_TOOLCHAIN}${_BH_COLOR_END}]\"\n}\n\nbh_target_text ()\n{\n    printf \"[${_BH_COLOR_CYAN}${BH_TARGET_TAG}${_BH_COLOR_END}]\"\n}\n\nbh_arch_text ()\n{\n    # Print arch name in cyan\n    printf \"[${_BH_COLOR_CYAN}${BH_TARGET_ARCH}${_BH_COLOR_END}]\"\n}\n\n# Check that a given compiler generates code correctly\n#\n# This is to detect bad/broken toolchains, e.g. amd64-mingw32msvc\n# is totally broken on Ubuntu 10.10 and 11.04\n#\n# $1: compiler\n# $2: optional extra flags\n#\nbh_check_compiler ()\n{\n    local CC=\"$1\"\n    local TMPC=$TMPDIR/build-host-$USER-$$.c\n    local TMPE=${TMPC%%.c}\n    local TMPL=$TMPC.log\n    local RET\n    shift\n    cat > $TMPC <<EOF\nint main(void) { return 0; }\nEOF\n    log_n \"Checking compiler code generation ($CC)... \"\n    $CC -o $TMPE $TMPC \"$@\" >$TMPL 2>&1\n    RET=$?\n    rm -f $TMPC $TMPE $TMPL\n    if [ \"$RET\" = 0 ]; then\n        log \"yes\"\n    else\n        log \"no\"\n    fi\n    return $RET\n}\n\n\n# $1: toolchain install dir\n# $2: toolchain prefix, no trailing dash (e.g. arm-linux-androideabi)\n# $3: optional -m32 or -m64.\n_bh_try_host_fullprefix ()\n{\n    local PREFIX=\"$1/bin/$2\"\n    shift; shift;\n    if [ -z \"$HOST_FULLPREFIX\" ]; then\n        local GCC=\"$PREFIX-gcc\"\n        if [ -f \"$GCC\" ]; then\n            if bh_check_compiler \"$GCC\" \"$@\"; then\n                HOST_FULLPREFIX=\"${GCC%%gcc}\"\n                dump \"$(bh_host_text) Using host gcc: $GCC $@\"\n            else\n                dump \"$(bh_host_text) Ignoring broken host gcc: $GCC $@\"\n            fi\n        fi\n    fi\n}\n\n# $1: host prefix, no trailing slash (e.g. i686-linux-android)\n# $2: optional compiler args (should be empty, -m32 or -m64)\n_bh_try_host_prefix ()\n{\n    local PREFIX=\"$1\"\n    shift\n    if [ -z \"$HOST_FULLPREFIX\" ]; then\n        local GCC=\"$(which $PREFIX-gcc 2>/dev/null)\"\n        if [ \"$GCC\" -a -e \"$GCC\" ]; then\n            if bh_check_compiler \"$GCC\" \"$@\"; then\n                HOST_FULLPREFIX=${GCC%%gcc}\n                dump \"$(bh_host_text) Using host gcc: ${HOST_FULLPREFIX}gcc $@\"\n            else\n                dump \"$(bh_host_text) Ignoring broken host gcc: $GCC $@\"\n            fi\n        fi\n    fi\n}\n\n# Used to determine the minimum possible Darwin version that a Darwin SDK\n# can target. This actually depends from the host architecture.\n# $1: Host architecture name\n# out: SDK version number (e.g. 10.4 or 10.5)\n_bh_darwin_arch_to_min_version ()\n{\n  if [ \"$1\" = \"x86\" ]; then\n    echo \"10.4\"\n  else\n    echo \"10.5\"\n  fi\n}\n\n# Use the check for the availability of a compatibility SDK in Darwin\n# this can be used to generate binaries compatible with either Tiger or\n# Leopard.\n#\n# $1: SDK root path\n# $2: Darwin compatibility minimum version\n_bh_check_darwin_sdk ()\n{\n    if [ -d \"$1\" -a -z \"$HOST_CFLAGS\" ] ; then\n        HOST_CFLAGS=\"-isysroot $1 -mmacosx-version-min=$2 -DMAXOSX_DEPLOYEMENT_TARGET=$2\"\n        HOST_CXXFLAGS=$HOST_CFLAGS\n        HOST_LDFLAGS=\"-syslibroot $1 -mmacosx-version-min=$2\"\n        dump \"Generating $2-compatible binaries.\"\n        return 0  # success\n    fi\n    return 1\n}\n\n# Check that a given compiler generates 32 or 64 bit code.\n# $1: compiler full path (.e.g  /path/to/fullprefix-gcc)\n# $2: 32 or 64\n# $3: extract compiler flags\n# Return: success iff the compiler generates $2-bits code\n_bh_check_compiler_bitness ()\n{\n    local CC=\"$1\"\n    local BITS=\"$2\"\n    local TMPC=$TMPDIR/build-host-gcc-bits-$USER-$$.c\n    local TMPL=$TMPC.log\n    local RET\n    shift; shift;\n    cat > $TMPC <<EOF\n/* this program will fail to compile if the compiler doesn't generate BITS-bits code */\nint tab[1-2*(sizeof(void*)*8 != BITS)];\nEOF\n    dump_n \"$(bh_host_text) Checking that the compiler generates $BITS-bits code ($@)... \"\n    $CC -c -DBITS=$BITS -o /dev/null $TMPC $HOST_CFLAGS \"$@\" > $TMPL 2>&1\n    RET=$?\n    rm -f $TMPC $TMPL\n    if [ \"$RET\" = 0 ]; then\n        dump \"yes\"\n    else\n        dump \"no\"\n    fi\n    return $RET\n}\n\n# This function probes the system to find the best toolchain or cross-toolchain\n# to build binaries that run on a given host system. After that, it generates\n# a wrapper toolchain under $2 with a prefix of ${BH_HOST_CONFIG}-\n# where $BH_HOST_CONFIG is a GNU configuration name.\n#\n# Important: this script might redefine $BH_HOST_CONFIG to a different value!\n#\n# $1: NDK system tag (e.g. linux-x86)\n#\n# The following can be defined, otherwise they'll be auto-detected and set.\n#\n#  DARWIN_MIN_VERSION   -> Darwmin minimum compatibility version\n#  DARWIN_SDK_VERSION   -> Darwin SDK version\n#\n# The following can be defined for extra features:\n#\n#  DARWIN_TOOLCHAIN     -> Path to Darwin cross-toolchain (cross-compile only).\n#  DARWIN_SYSROOT       -> Path to Darwin SDK sysroot (cross-compile only).\n#  NDK_CCACHE           -> Ccache binary to use to speed up rebuilds.\n#  ANDROID_NDK_ROOT     -> Top-level NDK directory, for automatic probing\n#                          of prebuilt platform toolchains.\n#\n_bh_select_toolchain_for_host ()\n{\n    local HOST_CFLAGS HOST_CXXFLAGS HOST_LDFLAGS HOST_FULLPREFIX DARWIN_ARCH\n    local DARWIN_ARCH DARWIN_SDK_SUBDIR\n\n    # We do all the complex auto-detection magic in the setup phase,\n    # then save the result in host-specific global variables.\n    #\n    # In the build phase, we will simply restore the values into the\n    # global HOST_FULLPREFIX / HOST_BUILD_DIR\n    # variables.\n    #\n\n    # Try to find the best toolchain to do that job, assuming we are in\n    # a full Android platform source checkout, we can look at the prebuilts/\n    # directory.\n    case $1 in\n        linux-x86)\n            # If possible, automatically use our custom toolchain to generate\n            # 32-bit executables that work on Ubuntu 8.04 and higher.\n            _bh_try_host_fullprefix \"$(dirname $ANDROID_NDK_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\" x86_64-linux\n            _bh_try_host_prefix i686-linux-gnu\n            _bh_try_host_prefix i686-linux\n            _bh_try_host_prefix x86_64-linux-gnu -m32\n            _bh_try_host_prefix x86_64-linux -m32\n            ;;\n\n        linux-x86_64)\n            # If possible, automaticaly use our custom toolchain to generate\n            # 64-bit executables that work on Ubuntu 8.04 and higher.\n            _bh_try_host_fullprefix \"$(dirname $ANDROID_NDK_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\" x86_64-linux\n            _bh_try_host_prefix x86_64-linux-gnu\n            _bh_try_host_prefix x84_64-linux\n            _bh_try_host_prefix i686-linux-gnu -m64\n            _bh_try_host_prefix i686-linux -m64\n            ;;\n\n        darwin-*)\n            DARWIN_ARCH=$(bh_tag_to_arch $1)\n            if [ -z \"$DARWIN_MIN_VERSION\" ]; then\n                DARWIN_MIN_VERSION=$(_bh_darwin_arch_to_min_version $DARWIN_ARCH)\n            fi\n            case $BH_BUILD_OS in\n                darwin)\n                    if [ \"$DARWIN_SDK_VERSION\" ]; then\n                        # Compute SDK subdirectory name\n                        case $DARWIN_SDK_VERSION in\n                            10.4) DARWIN_SDK_SUBDIR=$DARWIN_SDK.sdku;;\n                            *) DARWIN_SDK_SUBDIR=$DARWIN_SDK.sdk;;\n                        esac\n                        # Since xCode moved to the App Store the SDKs have been 'sandboxed' into the Xcode.app folder.\n                        _bh_check_darwin_sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$DARWIN_SDK_SUBDIR $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX$DARWIN_SDK_SUBDIR $DARWIN_MIN_VERSION\n                    else\n                        # Since xCode moved to the App Store the SDKs have been 'sandboxed' into the Xcode.app folder.\n                        _bh_check_darwin_sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX10.7.sdk  $DARWIN_MIN_VERSION\n                        _bh_check_darwin_sdk /Developer/SDKs/MacOSX10.6.sdk  $DARWIN_MIN_VERSION\n                        # NOTE: The 10.5.sdk on Lion is buggy and cannot build basic C++ programs\n                        #_bh_check_darwin_sdk /Developer/SDKs/MacOSX10.5.sdk  $DARWIN_ARCH\n                        # NOTE: The 10.4.sdku is not available anymore and could not be tested.\n                        #_bh_check_darwin_sdk /Developer/SDKs/MacOSX10.4.sdku $DARWIN_ARCH\n                    fi\n                    if [ -z \"$HOST_CFLAGS\" ]; then\n                        local version=\"$(sw_vers -productVersion)\"\n                        log \"Generating $version-compatible binaries!\"\n                    fi\n                    ;;\n                *)\n                    if [ -z \"$DARWIN_TOOLCHAIN\" -o -z \"$DARWIN_SYSROOT\" ]; then\n                        dump \"If you want to build Darwin binaries on a non-Darwin machine,\"\n                        dump \"Please define DARWIN_TOOLCHAIN to name it, and DARWIN_SYSROOT to point\"\n                        dump \"to the SDK. For example:\"\n                        dump \"\"\n                        dump \"   DARWIN_TOOLCHAIN=\\\"i686-apple-darwin11\\\"\"\n                        dump \"   DARWIN_SYSROOT=\\\"~/darwin-cross/MacOSX10.7.sdk\\\"\"\n                        dump \"   export DARWIN_TOOLCHAIN DARWIN_SYSROOT\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    _bh_check_darwin_sdk $DARWIN_SYSROOT $DARWIN_MIN_VERSION\n                    _bh_try_host_prefix \"$DARWIN_TOOLCHAIN\" -m$(bh_tag_to_bits $1) --sysroot \"$DARWIN_SYSROOT\"\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"It looks like $DARWIN_TOOLCHAIN-gcc is not in your path, or does not work correctly!\"\n                        exit 1\n                    fi\n                    dump \"Using darwin cross-toolchain: ${HOST_FULLPREFIX}gcc\"\n                    ;;\n            esac\n            ;;\n\n        windows|windows-x86)\n            case $BH_BUILD_OS in\n                linux)\n                    # We favor these because they are more recent, and because\n                    # we have a script to rebuild them from scratch. See\n                    # build-mingw64-toolchain.sh.\n                    _bh_try_host_prefix x86_64-w64-mingw32 -m32\n                    _bh_try_host_prefix i686-w64-mingw32\n                    # Typically provided by the 'mingw32' package on Debian\n                    # and Ubuntu systems.\n                    _bh_try_host_prefix i586-mingw32msvc\n                    # Special note for Fedora: this distribution used\n                    # to have a mingw32-gcc package that provided a 32-bit\n                    # only cross-toolchain named i686-pc-mingw32.\n                    # Later versions of the distro now provide a new package\n                    # named mingw-gcc which provides i686-w64-mingw32 and\n                    # x86_64-w64-mingw32 instead.\n                    _bh_try_host_prefix i686-pc-mingw32\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"There is no Windows cross-compiler. Ensure that you\"\n                        dump \"have one of these installed and in your path:\"\n                        dump \"   x86_64-w64-mingw32-gcc  (see build-mingw64-toolchain.sh)\"\n                        dump \"   i686-w64-mingw32-gcc    (see build-mingw64-toolchain.sh)\"\n                        dump \"   i586-mingw32msvc-gcc    ('mingw32' Debian/Ubuntu package)\"\n                        dump \"   i686-pc-mingw32         (on Fedora)\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    # Adjust $HOST to match the toolchain to ensure proper builds.\n                    # I.e. chose configuration triplets that are known to work\n                    # with the gmp/mpfr/mpc/binutils/gcc configure scripts.\n                    case $HOST_FULLPREFIX in\n                        *-mingw32msvc-*|i686-pc-mingw32)\n                            BH_HOST_CONFIG=i586-pc-mingw32msvc\n                            ;;\n                        *)\n                            BH_HOST_CONFIG=i686-w64-mingw32msvc\n                            ;;\n                    esac\n                    ;;\n                *) panic \"Sorry, this script only supports building windows binaries on Linux.\"\n                ;;\n            esac\n            HOST_CFLAGS=$HOST_CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            HOST_CXXFLAGS=$HOST_CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            ;;\n\n        windows-x86_64)\n            case $BH_BUILD_OS in\n                linux)\n                    # See comments above for windows-x86\n                    _bh_try_host_prefix x86_64-w64-mingw32\n                    _bh_try_host_prefix i686-w64-mingw32 -m64\n                    # Beware that this package is completely broken on many\n                    # versions of no vinegar Ubuntu (i.e. it fails at building trivial\n                    # programs).\n                    _bh_try_host_prefix amd64-mingw32msvc\n                    # There is no x86_64-pc-mingw32 toolchain on Fedora.\n                    if [ -z \"$HOST_FULLPREFIX\" ]; then\n                        dump \"There is no Windows cross-compiler in your path. Ensure you\"\n                        dump \"have one of these installed and in your path:\"\n                        dump \"   x86_64-w64-mingw32-gcc  (see build-mingw64-toolchain.sh)\"\n                        dump \"   i686-w64-mingw32-gcc    (see build-mingw64-toolchain.sh)\"\n                        dump \"   amd64-mingw32msvc-gcc   (Debian/Ubuntu - broken until Ubuntu 11.10)\"\n                        dump \"\"\n                        exit 1\n                    fi\n                    # See comment above for windows-x86\n                    case $HOST_FULLPREFIX in\n                        *-mingw32msvc*)\n                            # Actually, this has never been tested.\n                            BH_HOST=amd64-pc-mingw32msvc\n                            ;;\n                        *)\n                            BH_HOST=x86_64-w64-mingw32\n                            ;;\n                    esac\n                    ;;\n\n                *) panic \"Sorry, this script only supports building windows binaries on Linux.\"\n                ;;\n            esac\n            HOST_CFLAGS=$HOST_CFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            HOST_CXXFLAGS=$HOST_CXXFLAGS\" -D__USE_MINGW_ANSI_STDIO=1\"\n            ;;\n    esac\n\n    # Determine the default bitness of our compiler. It it doesn't match\n    # HOST_BITS, tries to see if it supports -m32 or -m64 to change it.\n    if ! _bh_check_compiler_bitness ${HOST_FULLPREFIX}gcc $BH_HOST_BITS; then\n        local TRY_CFLAGS\n        case $BH_HOST_BITS in\n            32) TRY_CFLAGS=-m32;;\n            64) TRY_CFLAGS=-m64;;\n        esac\n        if ! _bh_check_compiler_bitness ${HOST_FULLPREFIX}gcc $BH_HOST_BITS $TRY_CFLAGS; then\n            panic \"Can't find a way to generate $BH_HOST_BITS binaries with this compiler: ${HOST_FULLPREFIX}gcc\"\n        fi\n        HOST_CFLAGS=$HOST_CFLAGS\" \"$TRY_CFLAGS\n        HOST_CXXFLAGS=$HOST_CXXFLAGS\" \"$TRY_CFLAGS\n    fi\n\n    # Support for ccache, to speed up rebuilds.\n    DST_PREFIX=$HOST_FULLPREFIX\n    local CCACHE=\n    if [ \"$NDK_CCACHE\" ]; then\n        CCACHE=\"--ccache=$NDK_CCACHE\"\n    fi\n\n    # We're going to generate a wrapper toolchain with the $HOST prefix\n    # i.e. if $HOST is 'i686-linux-gnu', then we're going to generate a\n    # wrapper toolchain named 'i686-linux-gnu-gcc' that will redirect\n    # to whatever HOST_FULLPREFIX points to, with appropriate modifier\n    # compiler/linker flags.\n    #\n    # This helps tremendously getting stuff to compile with the GCC\n    # configure scripts.\n    #\n    run mkdir -p \"$BH_WRAPPERS_DIR\" &&\n    run $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh \"$BH_WRAPPERS_DIR\" \\\n        --src-prefix=\"$BH_HOST_CONFIG-\" \\\n        --dst-prefix=\"$DST_PREFIX\" \\\n        --cflags=\"$HOST_CFLAGS\" \\\n        --cxxflags=\"$HOST_CXXFLAGS\" \\\n        --ldflags=\"$HOST_LDFLAGS\" \\\n        $CCACHE\n}\n\n\n# Setup the build directory, i.e. a directory where all intermediate\n# files will be placed.\n#\n# $1: Build directory. If empty, a random one will be selected.\n#\n# $2: Either 'preserve' or 'remove'. Indicates what to do of\n#     existing files in the build directory, if any.\n#\n# $3: Either 'release' or 'debug'. Compilation mode.\n#\nbh_setup_build_dir ()\n{\n    BH_BUILD_DIR=\"$1\"\n    if [ -z \"$BH_BUILD_DIR\" ]; then\n        BH_BUILD_DIR=$TMPDIR/buildhost\n    fi\n    mkdir -p \"$BH_BUILD_DIR\"\n    fail_panic \"Could not create build directory: $BH_BUILD_DIR\"\n\n    setup_default_log_file $BH_BUILD_DIR/build.log\n\n    if [ \"$_BH_OPTION_FORCE\" ]; then\n        rm -rf \"$BH_BUILD_DIR\"/*\n    fi\n\n    if [ \"$_BH_OPTION_NO_STRIP\" ]; then\n        BH_BUILD_MODE=debug\n    else\n        BH_BUILD_MODE=release\n    fi\n\n    # The directory that will contain our toolchain wrappers\n    BH_WRAPPERS_DIR=$BH_BUILD_DIR/toolchain-wrappers\n    rm -rf \"$BH_WRAPPERS_DIR\" && mkdir \"$BH_WRAPPERS_DIR\"\n    fail_panic \"Could not create wrappers dir: $BH_WRAPPERS_DIR\"\n\n    # The directory that will contain our timestamps\n    BH_STAMPS_DIR=$BH_BUILD_DIR/timestamps\n    mkdir -p \"$BH_STAMPS_DIR\"\n    fail_panic \"Could not create timestamps dir\"\n}\n\n# Call this before anything else to setup a few important variables that are\n# used consistently to build any host-specific binaries.\n#\n# $1: Host system name (e.g. linux-x86), this is the name of the host system\n#     where the generated GCC binaries will run, not the current machine's\n#     type (this one is in $ORIGINAL_HOST_TAG instead).\n#\nbh_setup_build_for_host ()\n{\n    local HOST_VARNAME=$(dashes_to_underscores $1)\n    local HOST_VAR=_BH_HOST_${HOST_VARNAME}\n\n    # Determine the host configuration triplet in $HOST\n    bh_set_host_tag $1\n\n    # Note: since _bh_select_toolchain_for_host can change the value of\n    # $BH_HOST_CONFIG, we need to save it in a variable to later get the\n    # correct one when this function is called again.\n    if [ -z \"$(var_value ${HOST_VAR}_SETUP)\" ]; then\n        _bh_select_toolchain_for_host $1\n        var_assign ${HOST_VAR}_CONFIG $BH_HOST_CONFIG\n        var_assign ${HOST_VAR}_SETUP true\n    else\n        BH_HOST_CONFIG=$(var_value ${HOST_VAR}_CONFIG)\n    fi\n}\n\n# This function is used to setup the build environment whenever we\n# generate host-specific binaries. You should call it before invoking\n# a configure script or make.\n#\n# It assume sthat bh_setup_build_for_host was called with the right\n# host system tag and wrappers directory.\n#\nbh_setup_host_env ()\n{\n    CC=$BH_HOST_CONFIG-gcc\n    CXX=$BH_HOST_CONFIG-g++\n    LD=$BH_HOST_CONFIG-ld\n    AR=$BH_HOST_CONFIG-ar\n    AS=$BH_HOST_CONFIG-as\n    RANLIB=$BH_HOST_CONFIG-ranlib\n    NM=$BH_HOST_CONFIG-nm\n    STRIP=$BH_HOST_CONFIG-strip\n    STRINGS=$BH_HOST_CONFIG-strings\n    export CC CXX LD AR AS RANLIB NM STRIP STRINGS\n\n    CFLAGS=\n    CXXFLAGS=\n    LDFLAGS=\n    case $BH_BUILD_MODE in\n        release)\n            CFLAGS=\"-O2 -Os -fomit-frame-pointer -s\"\n            CXXFLAGS=$CFLAGS\n            ;;\n        debug)\n            CFLAGS=\"-O0 -g\"\n            CXXFLAGS=$CFLAGS\n            ;;\n    esac\n    export CFLAGS CXXFLAGS LDFLAGS\n\n    export PATH=$BH_WRAPPERS_DIR:$PATH\n}\n\n_bh_option_no_color ()\n{\n    bh_set_color_mode off\n}\n\n# This function is used to register a few command-line options that\n# impact the build of host binaries. Call it before invoking\n# extract_parameters to add them automatically.\n#\nbh_register_options ()\n{\n    BH_HOST_SYSTEMS=\"$BH_BUILD_TAG\"\n    register_var_option \"--systems=<list>\" BH_HOST_SYSTEMS \"Build binaries that run on these systems.\"\n\n    _BH_OPTION_FORCE=\n    register_var_option \"--force\" _BH_OPTION_FORCE \"Force rebuild.\"\n\n    _BH_OPTION_NO_STRIP=\n    register_var_option \"--no-strip\" _BH_OPTION_NO_STRIP \"Don't strip generated binaries.\"\n\n    register_option \"--no-color\" _bh_option_no_color \"Don't output colored text.\"\n\n    if [ \"$HOST_OS\" = darwin ]; then\n        DARWIN_SDK_VERSION=\n        register_var_option \"--darwin-sdk-version=<version>\" DARWIN_SDK \"Select Darwin SDK version.\"\n\n        DARWIN_MIN_VERSION=\n        register_var_option \"--darwin-min-version=<version>\" DARWIN_MIN_VERSION \"Select minimum OS X version of generated host toolchains.\"\n    fi\n}\n\n# Execute a given command.\n#\n# NOTE: The command is run in its own sub-shell to avoid environment\n#        contamination.\n#\n# $@: command\nbh_do ()\n{\n    (\"$@\")\n    fail_panic\n}\n\n# Return the build install directory of a given Python version\n#\n# $1: host system tag\n# The suffix of this has to match python_ndk_install_dir\n#  as I package them from the build folder, substituting\n#  the end part of python_build_install_dir matching\n#  python_ndk_install_dir with nothing.\npython_build_install_dir ()\n{\n    echo \"$BH_BUILD_DIR/$1/install/host-tools\"\n}\n\n# Same as python_build_install_dir, but for the final NDK installation\n# directory. Relative to $NDK_DIR.\n#\n# $1: host system tag\npython_ndk_install_dir ()\n{\n    echo \"host-tools\"\n}\n"
  },
  {
    "path": "build/tools/dev-defaults.sh",
    "content": "# Default values used by several dev-scripts.\n#\n\n# This script is imported while building the NDK, while running the tests, and\n# when running make-standalone-toolchain.sh. Check if we have our own platforms\n# tree (as we would in an installed NDK) first, and fall back to prebuilts/ndk.\nPLATFORMS_DIR=$ANDROID_NDK_ROOT/platforms\nif [ ! -d \"$PLATFORMS_DIR\" ]; then\n    PLATFORMS_DIR=$ANDROID_NDK_ROOT/../prebuilts/ndk/current/platforms\nfi\nAPI_LEVELS=$(ls $PLATFORMS_DIR | sed 's/android-//' | sort -n)\n\n# The latest API level is the last one in the list.\nLATEST_API_LEVEL=$(echo $API_LEVELS | awk '{ print $NF }')\n\nFIRST_API64_LEVEL=21\n\n# Default ABIs for the target prebuilt binaries.\nPREBUILT_ABIS=\"armeabi-v7a x86 mips armeabi-v7a-hard arm64-v8a x86_64 mips64\"\n\n# Location of the libcrystax sources, relative to the NDK root directory\nCRYSTAX_SUBDIR=sources/crystax\n\n# Location of the GNU libstdc++ headers and libraries, relative to the NDK\n# root directory.\nGNUSTL_SUBDIR=sources/cxx-stl/gnu-libstdc++\n\n# Location of the LLVM libc++ headers and libraries, relative to the NDK\n# root directory.\nLIBCXX_SUBDIR=sources/cxx-stl/llvm-libc++\n\n# Location of the LLVM libc++abi headers, relative to the NDK # root directory.\nLIBCXXABI_SUBDIR=sources/cxx-stl/llvm-libc++abi/libcxxabi\n\n# Location of the GNUstep libobjc2 headers and libraries, relative to the NDK root directory\nGNUSTEP_OBJC2_SUBDIR=packages/libobjc2/1.8.1\n\n# Location of the Cocotron headers and libraries, relative to the NDK root directory\nCOCOTRON_SUBDIR=sources/objc/cocotron/0.1.0\n\n# Location of the libportable sources, relative to the NDK root directory\nLIBPORTABLE_SUBDIR=sources/android/libportable\n\n# Location of the gccunwind sources, relative to the NDK root directory\nGCCUNWIND_SUBDIR=sources/android/gccunwind\n\n# Location of the compiler-rt sources, relative to the NDK root directory\nCOMPILER_RT_SUBDIR=sources/android/compiler-rt\n\n# Location of the boost sources, relative to the NDK root directory\nBOOST_SUBDIR=sources/boost\nBOOST_VERSIONS=\"1.62.0\"\n\n# Location of the ICU sources, relative to the NDK root directory\nICU_SUBDIR=sources/icu\nICU_VERSIONS=\"56.1\"\n\n# Location of the sqlite3 libraries, relative to the NDK root directory\nSQLITE3_SUBDIR=sources/sqlite/3\n\n# Location of the python libraries, relative to the NDK root directory\nPYTHON_SUBDIR=sources/python\nPYTHON_VERSIONS=\"2.7 3.5\"\n\n# Location of the OpenSSL libraries, relative to the NDK root directory\nOPENSSL_SUBDIR=sources/openssl\nOPENSSL_VERSIONS=\"1.0.2h\"\nDEFAULT_OPENSSL_VERSION=$(echo $OPENSSL_VERSIONS | tr ' ' '\\n' | head -n 1)\n\n# Location of the libpng libraries, relative to the NDK root directory\nLIBPNG_VERSIONS=\"1.6.29\"\nLIBPNG_SUBDIR=packages/libpng\n\n# Location of the libjpeg libraries, relative to the NDK root directory\nLIBJPEG_SUBDIR=packages/libjpeg\nLIBJPEG_VERSIONS=\"9b\"\n\n# Location of the libjpeg-turbo libraries, relative to the NDK root directory\nLIBJPEGTURBO_SUBDIR=packages/libjpeg-turbo\nLIBJPEGTURBO_VERSIONS=\"1.4.2\"\n\n# Location of the libtiff libraries, relative to the NDK root directory\nLIBTIFF_SUBDIR=packages/libtiff\nLIBTIFF_VERSIONS=\"4.0.6\"\n\n# Location of the gccunwind sources, relative to the NDK root directory\nGCCUNWIND_SUBDIR=sources/android/gccunwind\n\n# Location of the support sources for libc++, relative to the NDK root directory\n# zuav: todo: remove all references to the var\nSUPPORT_SUBDIR=sources/android/support\n\n# The date to use when downloading toolchain sources from AOSP servers\n# Leave it empty for tip of tree.\nTOOLCHAIN_GIT_DATE=now\n\n# The space-separated list of all GCC versions we support in this NDK\nDEFAULT_GCC_VERSION_LIST=\"4.9 5 6\"\n\nDEFAULT_GCC_VERSION=5\n\nDEFAULT_GCC32_VERSION=$DEFAULT_GCC_VERSION\nDEFAULT_GCC64_VERSION=$DEFAULT_GCC_VERSION\nFIRST_GCC32_VERSION=4.9\nFIRST_GCC64_VERSION=4.9\nDEFAULT_LLVM_GCC32_VERSION=$DEFAULT_GCC_VERSION\nDEFAULT_LLVM_GCC64_VERSION=$DEFAULT_GCC_VERSION\n\nDEFAULT_BINUTILS_VERSION=2.25\nDEFAULT_GDB_VERSION=7.10\nDEFAULT_MPFR_VERSION=3.1.2\nDEFAULT_GMP_VERSION=6.1.1\nDEFAULT_MPC_VERSION=1.0.3\nDEFAULT_CLOOG_VERSION=0.18.3\nDEFAULT_CLOOG_VERSION_FOR_GCC49=0.18.0\nDEFAULT_ISL_VERSION=0.11.1\nDEFAULT_ISL_VERSION_FOR_GCC6=0.14.1\nDEFAULT_PPL_VERSION=1.1\nDEFAULT_PYTHON_VERSION=2.7.5\nDEFAULT_PERL_VERSION=5.16.2\nDEFAULT_EXPAT_VERSION=2.0.1\n\n# Default platform to build target binaries against.\nDEFAULT_PLATFORM=android-9\n\n# The list of default CPU architectures we support\nDEFAULT_ARCHS=\"arm x86 mips arm64 x86_64 mips64\"\n\n# Default toolchain names and prefix\n#\n# This is used by get_default_toolchain_name_for_arch and get_default_toolchain_prefix_for_arch\n# defined below\nDEFAULT_ARCH_TOOLCHAIN_NAME_arm=arm-linux-androideabi\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_arm=arm-linux-androideabi\n\nDEFAULT_ARCH_TOOLCHAIN_NAME_arm64=aarch64-linux-android\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_arm64=aarch64-linux-android\n\nDEFAULT_ARCH_TOOLCHAIN_NAME_x86=x86\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_x86=i686-linux-android\n\nDEFAULT_ARCH_TOOLCHAIN_NAME_x86_64=x86_64\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_x86_64=x86_64-linux-android\n\nDEFAULT_ARCH_TOOLCHAIN_NAME_mips=mipsel-linux-android\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_mips=mipsel-linux-android\n\nDEFAULT_ARCH_TOOLCHAIN_NAME_mips64=mips64el-linux-android\nDEFAULT_ARCH_TOOLCHAIN_PREFIX_mips64=mips64el-linux-android\n\n# The space-separated list of all LLVM versions we support in NDK\nDEFAULT_LLVM_VERSION_LIST=\"3.6 3.7 3.8\"\n\n# The default LLVM version (first item in the list)\nDEFAULT_LLVM_VERSION=$(echo \"$DEFAULT_LLVM_VERSION_LIST\" | tr ' ' '\\n' | head -n 1)\n\n# The default URL to download the LLVM tar archive\nDEFAULT_LLVM_URL=\"http://llvm.org/releases\"\n\n# The list of default host NDK systems we support\nDEFAULT_SYSTEMS=\"linux-x86 windows darwin-x86\"\n\n# The default issue tracker URL\nDEFAULT_ISSUE_TRACKER_URL=\"https://tracker.crystax.net/projects/ndk\"\n\n# Return the default gcc version for a given architecture\n# $1: Architecture name (e.g. 'arm')\n# Out: default arch-specific gcc version\nget_default_gcc_version_for_arch ()\n{\n    case $1 in\n       *64) echo $DEFAULT_GCC64_VERSION ;;\n       *) echo $DEFAULT_GCC32_VERSION ;;\n    esac\n}\n\n# Return the first gcc version for a given architecture\n# $1: Architecture name (e.g. 'arm')\n# Out: default arch-specific gcc version\nget_first_gcc_version_for_arch ()\n{\n    case $1 in\n       *64) echo $FIRST_GCC64_VERSION ;;\n       *) echo $FIRST_GCC32_VERSION ;;\n    esac\n}\n\n# Return default NDK ABI for a given architecture name\n# $1: Architecture name\n# Out: ABI name\nget_default_abi_for_arch ()\n{\n    local RET\n    case $1 in\n        arm)\n            RET=\"armeabi\"\n            ;;\n        arm64)\n            RET=\"arm64-v8a\"\n            ;;\n        x86|x86_64|mips|mips64)\n            RET=\"$1\"\n            ;;\n        mips32r6)\n            RET=\"mips\"\n            ;;\n        *)\n            2> echo \"ERROR: Unsupported architecture name: $1, use one of: arm arm64 x86 x86_64 mips mips64\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n\n# Retrieve the list of default ABIs supported by a given architecture\n# $1: Architecture name\n# Out: space-separated list of ABI names\nget_default_abis_for_arch ()\n{\n    local RET\n    case $1 in\n        arm)\n            RET=\"armeabi-v7a armeabi-v7a-hard\"\n            ;;\n        arm64)\n            RET=\"arm64-v8a\"\n            ;;\n        x86|x86_64|mips|mips32r6|mips64)\n            RET=\"$1\"\n            ;;\n        *)\n            2> echo \"ERROR: Unsupported architecture name: $1, use one of: arm arm64 x86 x86_64 mips mips64\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n# Return toolchain name for given architecture and GCC version\n# $1: Architecture name (e.g. 'arm')\n# $2: optional, GCC version (e.g. '4.8')\n# Out: default arch-specific toolchain name (e.g. 'arm-linux-androideabi-$GCC_VERSION')\n# Return empty for unknown arch\nget_toolchain_name_for_arch ()\n{\n    if [ ! -z \"$2\" ] ; then\n        eval echo \\\"\\${DEFAULT_ARCH_TOOLCHAIN_NAME_$1}-$2\\\"\n    else\n        eval echo \\\"\\${DEFAULT_ARCH_TOOLCHAIN_NAME_$1}\\\"\n    fi\n}\n\n# Return the default toolchain name for a given architecture\n# $1: Architecture name (e.g. 'arm')\n# Out: default arch-specific toolchain name (e.g. 'arm-linux-androideabi-$GCCVER')\n# Return empty for unknown arch\nget_default_toolchain_name_for_arch ()\n{\n    local GCCVER=$(get_default_gcc_version_for_arch $1)\n    eval echo \\\"\\${DEFAULT_ARCH_TOOLCHAIN_NAME_$1}-$GCCVER\\\"\n}\n\n# Return the default toolchain program prefix for a given architecture\n# $1: Architecture name\n# Out: default arch-specific toolchain prefix (e.g. arm-linux-androideabi)\n# Return empty for unknown arch\nget_default_toolchain_prefix_for_arch ()\n{\n    eval echo \"\\$DEFAULT_ARCH_TOOLCHAIN_PREFIX_$1\"\n}\n\n# Get the list of all toolchain names for a given architecture\n# $1: architecture (e.g. 'arm')\n# $2: comma separated versions (optional)\n# Out: list of toolchain names for this arch (e.g. arm-linux-androideabi-4.8 arm-linux-androideabi-4.9)\n# Return empty for unknown arch\nget_toolchain_name_list_for_arch ()\n{\n    local PREFIX VERSION RET ADD FIRST_GCC_VERSION VERSIONS\n    PREFIX=$(eval echo \\\"\\$DEFAULT_ARCH_TOOLCHAIN_NAME_$1\\\")\n    if [ -z \"$PREFIX\" ]; then\n        return 0\n    fi\n    RET=\"\"\n    FIRST_GCC_VERSION=$(get_first_gcc_version_for_arch $1)\n    ADD=\"\"\n    VERSIONS=$(commas_to_spaces $2)\n    if [ -z \"$VERSIONS\" ]; then\n        VERSIONS=$DEFAULT_GCC_VERSION_LIST\n    else\n        ADD=\"yes\" # include everything we passed explicitly\n    fi\n    for VERSION in $VERSIONS; do\n        if [ -z \"$ADD\" -a \"$VERSION\" = \"$FIRST_GCC_VERSION\" ]; then\n            ADD=\"yes\"\n        fi\n        if [ -z \"$ADD\" ]; then\n            continue\n        fi\n        RET=$RET\" $PREFIX-$VERSION\"\n    done\n    RET=${RET## }\n    echo \"$RET\"\n}\n\n# Return the binutils version to be used by default when\n# building a given version of GCC. This is needed to ensure\n# we use binutils-2.19 when building gcc-4.4.3 for ARM and x86,\n# and later binutils in other cases (mips, or gcc-4.6+).\n#\n# Note that technically, we could use latest binutils for all versions of\n# GCC, however, in NDK r7, we did build GCC 4.4.3 with binutils-2.20.1\n# and this resulted in weird C++ debugging bugs. For NDK r7b and higher,\n# binutils was reverted to 2.19, to ensure at least\n# feature/bug compatibility.\n#\n# $1: toolchain with version number (e.g. 'arm-linux-androideabi-4.8')\n#\nget_default_binutils_version_for_gcc ()\n{\n    echo \"$DEFAULT_BINUTILS_VERSION\"\n}\n\n# Return the binutils version to be used by default when\n# building a given version of llvm. For llvm-3.4 or later,\n# we use binutils-2.23+ to ensure the LLVMgold.so could be\n# built properly. For llvm-3.3, we use binutils-2.21 as default.\n#\n# $1: toolchain with version numer (e.g. 'llvm-3.3')\n#\nget_default_binutils_version_for_llvm ()\n{\n    echo \"$DEFAULT_BINUTILS_VERSION\"\n}\n\n# Return the gdb version to be used by default when building a given\n# version of GCC.\n#\n# $1: toolchain with version number (e.g. 'arm-linux-androideabi-4.8')\n#\nget_default_gdb_version_for_gcc ()\n{\n    echo \"$DEFAULT_GDB_VERSION\"\n}\n\n# Return the gdbserver version to be used by default when building a given\n# version of GCC.\n#\n# $1: toolchain with version number (e.g. 'arm-linux-androideabi-4.8')\n#\nget_default_gdbserver_version_for_gcc ()\n{\n    echo \"$DEFAULT_GDB_VERSION\"\n}\n"
  },
  {
    "path": "build/tools/gen-platforms.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# gen-platforms.sh\n#\n# This tool is used when packaging a new release, or when developing\n# the NDK itself. It will populate DST ($NDK/platforms by default)\n# with the content of SRC ($NDK/../development/ndk/platforms/ by default).\n#\n# The idea is that the content of $SRC/android-N/ only contains stuff\n# that is relevant to API level N, and not contain anything that is already\n# provided by API level N-1, N-2, etc..\n#\n# More precisely, for each architecture A:\n#  $SRC/android-N/include        --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/include --> $DST/android-N/arch-A/usr/include\n#  $SRC/android-N/arch-A/lib     --> $DST/android-N/arch-A/usr/lib\n#\n# Also, we generate on-the-fly shared dynamic libraries from list of symbols:\n#\n#  $SRC/android-N/arch-A/symbols --> $DST/android-N/arch-A/usr/lib\n#\n# Repeat after that for N+1, N+2, etc..\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\n# Return the list of platform supported from $1/platforms\n# as a single space-separated sorted list of levels. (e.g. \"3 4 5 8 9 14\")\n# $1: source directory\nextract_platforms_from ()\n{\n    if [ -d \"$1\" ] ; then\n        (cd \"$1/platforms\" && ls -d android-*) | sed -e \"s!android-!!\" | sort -g | tr '\\n' ' '\n    else\n        echo \"\"\n    fi\n}\n\n# Override tmp file to be predictable\nTMPC=$TMPDIR/tmp/tests/tmp-platform.c\nTMPO=$TMPDIR/tmp/tests/tmp-platform.o\nTMPE=$TMPDIR/tmp/tests/tmp-platform$EXE\n\nSRCDIR=\"../development/ndk\"\nDSTDIR=\"$TMPDIR\"\n\nARCHS=\"$DEFAULT_ARCHS\"\nPLATFORMS=`extract_platforms_from \"$SRCDIR\"`\nNDK_DIR=$ANDROID_NDK_ROOT\n\nOPTION_HELP=no\nOPTION_PLATFORMS=\nOPTION_SRCDIR=\nOPTION_DSTDIR=\nOPTION_FAST_COPY=\nOPTION_MINIMAL=\nOPTION_ARCH=\nOPTION_ABI=\nOPTION_DEBUG_LIBS=\nOPTION_OVERLAY=\nOPTION_GCC_VERSION=\"default\"\nOPTION_LLVM_VERSION=$DEFAULT_LLVM_VERSION\nOPTION_CASE_INSENSITIVE=no\nPACKAGE_DIR=\n\nVERBOSE=no\n\nfor opt do\n  optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n  case \"$opt\" in\n  --help|-h|-\\?) OPTION_HELP=yes\n  ;;\n  --verbose)\n    VERBOSE=yes\n    ;;\n  --src-dir=*)\n    OPTION_SRCDIR=\"$optarg\"\n    ;;\n  --dst-dir=*)\n    OPTION_DSTDIR=\"$optarg\"\n    ;;\n  --ndk-dir=*)\n    NDK_DIR=$optarg\n    ;;\n  --platform=*)\n    OPTION_PLATFORM=$optarg\n    ;;\n  --arch=*)\n    OPTION_ARCH=$optarg\n    ;;\n  --abi=*)  # We still support this for backwards-compatibility\n    OPTION_ABI=$optarg\n    ;;\n  --fast-copy)\n    OPTION_FAST_COPY=yes\n    ;;\n  --minimal)\n    OPTION_MINIMAL=yes\n    ;;\n  --package-dir=*)\n    PACKAGE_DIR=$optarg\n    ;;\n  --debug-libs)\n    OPTION_DEBUG_LIBS=true\n    ;;\n  --overlay)\n    OPTION_OVERLAY=true\n    ;;\n  --gcc-version=*)\n    OPTION_GCC_VERSION=$optarg\n    ;;\n  --llvm-version=*)\n    OPTION_LLVM_VERSION=$optarg\n    ;;\n  --case-insensitive)\n    OPTION_CASE_INSENSITIVE=yes\n    ;;\n  *)\n    echo \"unknown option '$opt', use --help\"\n    exit 1\n  esac\ndone\n\nif [ $OPTION_HELP = \"yes\" ] ; then\n    echo \"Collect files from an Android NDK development tree and assemble\"\n    echo \"the platform files appropriately into a final release structure.\"\n    echo \"\"\n    echo \"options:\"\n    echo \"\"\n    echo \"  --help                Print this message\"\n    echo \"  --verbose             Enable verbose messages\"\n    echo \"  --src-dir=<path>      Source directory for development platform files [$SRCDIR]\"\n    echo \"  --dst-dir=<path>      Destination directory [$DSTDIR]\"\n    echo \"  --ndk-dir=<path>      Use toolchains from this NDK directory [$NDK_DIR]\"\n    echo \"  --platform=<list>     List of API levels [$PLATFORMS]\"\n    echo \"  --arch=<list>         List of CPU architectures [$ARCHS]\"\n    echo \"  --minimal             Ignore symlinks and generated shared libs.\"\n    echo \"  --fast-copy           Don't create symlinks, copy files instead\"\n    echo \"  --package-dir=<path>  Package platforms archive in specific path.\"\n    echo \"  --debug-libs          Also generate C source file for generated libraries.\"\n    echo \"\"\n    echo \"Use the --minimal flag if you want to generate minimal sysroot directories\"\n    echo \"that will be used to generate prebuilt toolchains. Otherwise, the script\"\n    echo \"will require these toolchains to be pre-installed and will use them to\"\n    echo \"generate shared system shared libraries from the symbol list files.\"\n    exit 0\nfi\n\nif [ -n \"$OPTION_SRCDIR\" ] ; then\n    SRCDIR=\"$OPTION_SRCDIR\";\n    if [ ! -d \"$SRCDIR\" ] ; then\n        echo \"ERROR: Source directory $SRCDIR does not exist !\"\n        exit 1\n    fi\n    if [ ! -d \"$SRCDIR/platforms/android-3\" ] ; then\n        echo \"ERROR: Invalid source directory: $SRCDIR\"\n        echo \"Please make sure it contains platforms/android-3 etc...\"\n        exit 1\n    fi\nelse\n    SRCDIR=`dirname $ANDROID_NDK_ROOT`/development/ndk\n    log \"Using source directory: $SRCDIR\"\nfi\n\nif [ -n \"$OPTION_PLATFORM\" ] ; then\n    PLATFORMS=$(commas_to_spaces $OPTION_PLATFORM)\nelse\n    # Build the list from the content of SRCDIR\n    PLATFORMS=`extract_platforms_from \"$SRCDIR\"`\n    log \"Using platforms: $PLATFORMS\"\nfi\n\n# Remove the android- prefix of any platform name\nPLATFORMS=$(echo $PLATFORMS | tr ' ' '\\n' | sed -e 's!^android-!!g' | tr '\\n' ' ')\n\nif [ -n \"$OPTION_DSTDIR\" ] ; then\n    DSTDIR=\"$OPTION_DSTDIR\"\nelse\n    log \"Using destination directory: $DSTDIR\"\nfi\n\n# Handle architecture list\n#\n# We support both --arch and --abi for backwards compatibility reasons\n# --arch is the new hotness, --abi is deprecated.\n#\nif [ -n \"$OPTION_ARCH\" ]; then\n    OPTION_ARCH=$(commas_to_spaces $OPTION_ARCH)\nfi\n\nif [ -n \"$OPTION_ABI\" ] ; then\n    echo \"WARNING: --abi=<names> is deprecated. Use --arch=<names> instead!\"\n    OPTION_ABI=$(commas_to_spaces $OPTION_ABI)\n    if [ -n \"$OPTION_ARCH\" -a \"$OPTION_ARCH\" != \"$OPTION_ABI\" ]; then\n        echo \"ERROR: You can't use both --abi and --arch with different values!\"\n        exit 1\n    fi\n    OPTION_ARCH=$OPTION_ABI\nfi\n\nif [ -n \"$OPTION_ARCH\" ] ; then\n    ARCHS=\"$OPTION_ARCH\"\nfi\nlog \"Using architectures: $(commas_to_spaces $ARCHS)\"\n\nlog \"Checking source platforms.\"\nfor PLATFORM in $PLATFORMS; do\n    DIR=\"$SRCDIR/platforms/android-$PLATFORM\"\n    if [ ! -d $DIR ] ; then\n        echo \"ERROR: Directory missing: $DIR\"\n        echo \"Please check your --platform=<list> option and try again.\"\n        exit 2\n    else\n        log \"  $DIR\"\n    fi\ndone\n\nlog \"Checking source platform architectures.\"\nBAD_ARCHS=\nfor ARCH in $ARCHS; do\n    eval CHECK_$ARCH=no\ndone\nfor PLATFORM in $PLATFORMS; do\n    for ARCH in $ARCHS; do\n        DIR=\"$SRCDIR/platforms/android-$PLATFORM/arch-$ARCH\"\n        if [ -d $DIR ] ; then\n            log \"  $DIR\"\n            eval CHECK_$ARCH=yes\n        fi\n    done\ndone\n\nif [ \"$OPTION_MINIMAL\" ]; then\n    OPTION_FAST_COPY=yes\nfi\n\nBAD_ARCHS=\nfor ARCH in $ARCHS; do\n    CHECK=`var_value CHECK_$ARCH`\n    log \"  $ARCH check: $CHECK\"\n    if [ \"$CHECK\" = no ] ; then\n        if [ -z \"$BAD_ARCHS\" ] ; then\n            BAD_ARCHS=$ARCH\n        else\n            BAD_ARCHS=\"$BAD_ARCHS $ARCH\"\n        fi\n    fi\ndone\n\nif [ -n \"$BAD_ARCHS\" ] ; then\n    echo \"ERROR: Source directory doesn't support these ARCHs: $BAD_ARCHS\"\n    exit 3\nfi\n\n# $1: source directory (relative to $SRCDIR)\n# $2: destination directory (relative to $DSTDIR)\n# $3: description of directory contents (e.g. \"sysroot\")\ncopy_src_directory ()\n{\n    local SDIR=\"$SRCDIR/$1\"\n    local DDIR=\"$DSTDIR/$2\"\n    if [ -d \"$SDIR\" ] ; then\n        log \"Copying $3 from \\$SRC/$1 to \\$DST/$2.\"\n        mkdir -p \"$DDIR\" && (cd \"$SDIR\" && 2>/dev/null tar chf - *) | (tar xf - -C \"$DDIR\")\n        if [ $? != 0 ] ; then\n            echo \"ERROR: Could not copy $3 directory $SDIR into $DDIR !\"\n            exit 5\n        fi\n    fi\n}\n\n# $1: source dir\n# $2: destination dir\n# $3: reverse path\n#\nsymlink_src_directory_inner ()\n{\n    local files file subdir rev\n    mkdir -p \"$DSTDIR/$2\"\n    rev=$3\n    files=$(cd $DSTDIR/$1 && ls -1p)\n    for file in $files; do\n        if [ \"$file\" = \"${file%%/}\" ]; then\n            log \"Link \\$DST/$2/$file --> $rev/$1/$file\"\n            ln -s $rev/$1/$file $DSTDIR/$2/$file\n        else\n            file=${file%%/}\n            symlink_src_directory_inner \"$1/$file\" \"$2/$file\" \"$rev/..\"\n        fi\n    done\n}\n# Create a symlink-copy of directory $1 into $2\n# This function is recursive.\n#\n# $1: source directory (relative to $SRCDIR)\n# $2: destination directory (relative to $DSTDIR)\nsymlink_src_directory ()\n{\n    symlink_src_directory_inner \"$1\" \"$2\" \"$(reverse_path $1)\"\n}\n\n# Remove unwanted symbols\n# $1: symbol file (one symbol per line)\n# $2+: Input symbol list\n# Out: Input symbol file, without any unwanted symbol listed by $1\nremove_unwanted_symbols_from ()\n{\n  local SYMBOL_FILE=\"$1\"\n  shift\n  if [ -f \"$SYMBOL_FILE\" ]; then\n    echo \"$@\" | tr ' ' '\\n' | grep -v -F -x -f $SYMBOL_FILE | tr '\\n' ' '\n  else\n    echo \"$@\"\n  fi\n}\n\n# Remove unwanted symbols from a library's functions list.\n# $1: Architecture name\n# $2: Library name (e.g. libc.so)\n# $3+: Input symbol list\n# Out: Input symbol list without any unwanted symbols.\nremove_unwanted_function_symbols ()\n{\n  local ARCH LIBRARY SYMBOL_FILE\n  ARCH=$1\n  LIBRARY=$2\n  shift; shift\n  SYMBOL_FILE=$PROGDIR/unwanted-symbols/$ARCH/$LIBRARY.functions.txt\n  remove_unwanted_symbols_from $SYMBOL_FILE \"$@\"\n}\n\n# Same as remove_unwanted_functions_symbols, but for variable names.\n#\nremove_unwanted_variable_symbols ()\n{\n  local ARCH LIBRARY SYMBOL_FILE\n  ARCH=$1\n  LIBRARY=$2\n  shift; shift\n  SYMBOL_FILE=$PROGDIR/unwanted-symbols/$ARCH/$LIBRARY.variables.txt\n  remove_unwanted_symbols_from $SYMBOL_FILE \"$@\"\n}\n\n# $1: Architecture\n# Out: compiler command\nget_default_compiler_for_arch()\n{\n    local ARCH=$1\n    local TOOLCHAIN_PREFIX CC GCC_VERSION\n\n    if [ -n \"$OPTION_GCC_VERSION\" -a \"$OPTION_GCC_VERSION\" != \"default\" ]; then\n        GCC_VERSION=$OPTION_GCC_VERSION\n    else\n        GCC_VERSION=$(get_default_gcc_version_for_arch $ARCH)\n    fi\n\n    for TAG in $HOST_TAG $HOST_TAG32; do\n        TOOLCHAIN_PREFIX=\"$ANDROID_BUILD_TOP/prebuilts/ndk/current/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\"\n        TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX%-}\n        CC=\"$TOOLCHAIN_PREFIX-gcc\"\n        if [ -f \"$CC\" ]; then\n            break;\n        fi\n    done\n\n    if [ ! -f \"$CC\" ]; then\n        dump \"ERROR: $ARCH toolchain not installed: $CC\"\n        dump \"Important: Use the --minimal flag to use this script without generated system shared libraries.\"\n        dump \"This is generally useful when you want to generate the host cross-toolchain programs.\"\n        exit 1\n    fi\n    echo \"$CC\"\n}\n\n# $1: library name\n# $2: functions list\n# $3: variables list\n# $4: destination file\n# $5: compiler command\n# $6: version script (optional)\ngen_shared_lib ()\n{\n    local LIBRARY=$1\n    local FUNCS=\"$2\"\n    local VARS=\"$3\"\n    local DSTFILE=\"$4\"\n    local CC=\"$5\"\n    local VERSION_SCRIPT=\"$6\"\n\n    # Now generate a small C source file that contains similarly-named stubs\n    echo \"/* Auto-generated file, do not edit */\" > $TMPC\n    local func var\n    for func in $FUNCS; do\n        echo \"void $func(void) {}\" >> $TMPC\n    done\n    for var in $VARS; do\n        echo \"int $var = 0;\" >> $TMPC\n    done\n\n    # Build it with our cross-compiler. It will complain about conflicting\n    # types for built-in functions, so just shut it up.\n    COMMAND=\"$CC -Wl,-shared,-Bsymbolic -Wl,-soname,$LIBRARY -nostdlib -o $TMPO $TMPC -Wl,--exclude-libs,libgcc.a -w\"\n    if [ -n \"$VERSION_SCRIPT\" ]; then\n      COMMAND=\"$COMMAND -Wl,--version-script=$VERSION_SCRIPT -Wl,--no-undefined-version\"\n    fi\n    echo \"## COMMAND: $COMMAND\"\n    $COMMAND\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't generate shared library for: $LIBRARY\"\n        dump \"See the content of $TMPC and $TMPL for details.\"\n        cat $TMPL | tail -10\n        exit 1\n    fi\n\n    # Copy to our destination now\n    local libdir=$(dirname \"$DSTFILE\")\n    mkdir -p \"$libdir\" && rm -f \"$DSTFILE\" && cp -f $TMPO \"$DSTFILE\"\n    if [ $? != 0 ] ; then\n        dump \"ERROR: Can't copy shared library for: $LIBRARY\"\n        dump \"target location is: $DSTFILE\"\n        exit 1\n    fi\n    if [ \"$LIBRARY\" = \"libc.so\" ]; then\n        cp -f \"$DSTFILE\" \"$libdir/libbionic.so\"\n        if [ $? != 0 ]; then\n            dump \"ERROR: Can't copy shared library for: libbionic.so\"\n            dump \"target location is: $libdir/libbionic.so\"\n            exit 1\n        fi\n    fi\n\n    if [ \"$OPTION_DEBUG_LIBS\" ]; then\n      cp $TMPC $DSTFILE.c\n      echo \"$FUNCS\" | tr ' ' '\\n' > $DSTFILE.functions.txt\n      echo \"$VARS\" | tr ' ' '\\n' > $DSTFILE.variables.txt\n    fi\n}\n\n# $1: Architecture\n# $2: symbol source directory (relative to $SRCDIR)\n# $3: destination directory for generated libs (relative to $DSTDIR)\n# $4: compiler flags (optional)\ngen_shared_libraries ()\n{\n    local ARCH=$1\n    local SYMDIR=\"$SRCDIR/$2\"\n    local DSTDIR=\"$DSTDIR/$3\"\n    local FLAGS=\"$4\"\n    local CC funcs vars numfuncs numvars\n\n    # Let's locate the toolchain we're going to use\n    CC=$(get_default_compiler_for_arch $ARCH)\" $FLAGS\"\n    if [ $? != 0 ]; then\n        echo $CC\n        exit 1\n    fi\n\n    # In certain cases, the symbols directory doesn't exist,\n    # e.g. on x86 for PLATFORM < 9\n    if [ ! -d \"$SYMDIR\" ]; then\n        return\n    fi\n\n    # Let's list the libraries we're going to generate\n    LIBS=$( (cd $SYMDIR && 2>/dev/null ls *.functions.txt) | sort -u | sed -e 's!\\.functions\\.txt$!!g')\n\n    for LIB in $LIBS; do\n        funcs=$(cat \"$SYMDIR/$LIB.functions.txt\" 2>/dev/null)\n        vars=$(cat \"$SYMDIR/$LIB.variables.txt\" 2>/dev/null)\n        funcs=$(remove_unwanted_function_symbols $ARCH libgcc.a $funcs)\n        funcs=$(remove_unwanted_function_symbols $ARCH $LIB $funcs)\n        vars=$(remove_unwanted_variable_symbols $ARCH libgcc.a $vars)\n        vars=$(remove_unwanted_variable_symbols $ARCH $LIB $vars)\n        numfuncs=$(echo $funcs | wc -w)\n        numvars=$(echo $vars | wc -w)\n        version_script=\"\"\n\n        if [ -f \"$SYMDIR/$LIB.versions.txt\" ]; then\n          version_script=\"$SYMDIR/$LIB.versions.txt\"\n        fi\n        log \"Generating $ARCH shared library for $LIB ($numfuncs functions + $numvars variables)\"\n\n        gen_shared_lib $LIB \"$funcs\" \"$vars\" \"$DSTDIR/$LIB\" \"$CC\" \"$version_script\"\n    done\n}\n\n# $1: platform number\n# $2: architecture name\n# $3: common source directory (for crtbrand.c, etc)\n# $4: source directory (for *.S files)\n# $5: destination directory\n# $6: flags for compiler (optional)\ngen_crt_objects ()\n{\n    local API=$1\n    local ARCH=$2\n    local COMMON_SRC_DIR=\"$SRCDIR/$3\"\n    local SRC_DIR=\"$SRCDIR/$4\"\n    local DST_DIR=\"$DSTDIR/$5\"\n    local FLAGS=\"$6\"\n    local SRC_FILE DST_FILE\n    local CC\n\n    if [ ! -d \"$SRC_DIR\" ]; then\n        return\n    fi\n\n    # Let's locate the toolchain we're going to use\n    CC=$(get_default_compiler_for_arch $ARCH)\" $FLAGS\"\n    if [ $? != 0 ]; then\n        echo $CC\n        exit 1\n    fi\n\n    CRTBRAND_S=$DST_DIR/crtbrand.s\n    log \"Generating platform $API crtbrand assembly code: $CRTBRAND_S\"\n    (cd \"$COMMON_SRC_DIR\" && mkdir -p `dirname $CRTBRAND_S` && $CC -DPLATFORM_SDK_VERSION=$API -fpic -S -o - crtbrand.c | \\\n        sed -e '/\\.note\\.ABI-tag/s/progbits/note/' > \"$CRTBRAND_S\")\n    if [ $? != 0 ]; then\n        dump \"ERROR: Could not generate $CRTBRAND_S from $COMMON_SRC_DIR/crtbrand.c\"\n        exit 1\n    fi\n\n    for SRC_FILE in $(cd \"$SRC_DIR\" && ls crt*.[cS]); do\n        DST_FILE=${SRC_FILE%%.c}\n        DST_FILE=${DST_FILE%%.S}.o\n\n        case \"$DST_FILE\" in\n            \"crtend.o\")\n                # Special case: crtend.S must be compiled as crtend_android.o\n                # This is for long historical reasons, i.e. to avoid name conflicts\n                # in the past with other crtend.o files. This is hard-coded in the\n                # Android toolchain configuration, so switch the name here.\n                DST_FILE=crtend_android.o\n                ;;\n            \"crtbegin_dynamic.o\"|\"crtbegin_static.o\")\n                # Add .note.ABI-tag section\n                SRC_FILE=$SRC_FILE\" $CRTBRAND_S\"\n                ;;\n            \"crtbegin.o\")\n                # If we have a single source for both crtbegin_static.o and\n                # crtbegin_dynamic.o we generate one and make a copy later.\n                DST_FILE=crtbegin_dynamic.o\n                # Add .note.ABI-tag section\n                SRC_FILE=$SRC_FILE\" $CRTBRAND_S\"\n                ;;\n        esac\n\n        log \"Generating $ARCH C runtime object: $DST_FILE\"\n        (cd \"$SRC_DIR\" && $CC \\\n                 -I$SRCDIR/../../bionic/libc/include \\\n                 -I$SRCDIR/../../bionic/libc/arch-common/bionic \\\n                 -I$SRCDIR/../../bionic/libc/arch-$ARCH/include \\\n                 -DPLATFORM_SDK_VERSION=$API \\\n                 -O2 -fpic -Wl,-r -nostdlib -o \"$DST_DIR/$DST_FILE\" $SRC_FILE)\n        if [ $? != 0 ]; then\n            dump \"ERROR: Could not generate $DST_FILE from $SRC_DIR/$SRC_FILE\"\n            exit 1\n        fi\n        if [ ! -s \"$DST_DIR/crtbegin_static.o\" ]; then\n            cp \"$DST_DIR/crtbegin_dynamic.o\" \"$DST_DIR/crtbegin_static.o\"\n        fi\n    done\n    rm -f \"$CRTBRAND_S\"\n}\n\n# $1: platform number\n# $2: architecture\n# $3: target NDK directory\ngenerate_api_level ()\n{\n    local API=$1\n    local ARCH=$2\n    local HEADER=\"platforms/android-$API/arch-$ARCH/usr/include/android/api-level.h\"\n    log \"Generating: $HEADER\"\n    rm -f \"$3/$HEADER\"  # Remove symlink if any.\n    cat > \"$3/$HEADER\" <<EOF\n/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n#ifndef ANDROID_API_LEVEL_H\n#define ANDROID_API_LEVEL_H\n\n#define __ANDROID_API__ $API\n\n#endif /* ANDROID_API_LEVEL_H */\nEOF\n}\n\n# Copy platform sysroot into your destination\n#\n\n# if $SRC/android-$PLATFORM/arch-$ARCH exists\n#   $SRC/android-$PLATFORM/include --> $DST/android-$PLATFORM/arch-$ARCH/usr/include\n#   $SRC/android-$PLATFORM/arch-$ARCH/include --> $DST/android-$PLATFORM/arch-$ARCH/usr/include\n#   $SRC/android-$PLATFORM/arch-$ARCH/lib --> $DST/android-$PLATFORM/arch-$ARCH/usr/lib\n#\nif [ -z \"$OPTION_OVERLAY\" ]; then\n    rm -rf $DSTDIR/platforms && mkdir -p $DSTDIR/platforms\nfi\nfor ARCH in $ARCHS; do\n    echo \"## Generating arch: $ARCH\"\n    # Find first platform for this arch\n    PREV_SYSROOT_DST=\n    PREV_PLATFORM_SRC_ARCH=\n    LIBDIR=$(get_default_libdir_for_arch $ARCH)\n\n    for PLATFORM in $PLATFORMS; do\n        echo \"## Generating platform: $PLATFORM\"\n        PLATFORM_DST=platforms/android-$PLATFORM   # Relative to $DSTDIR\n        PLATFORM_SRC=$PLATFORM_DST                 # Relative to $SRCDIR\n        SYSROOT_DST=$PLATFORM_DST/arch-$ARCH/usr\n        # Skip over if there is no arch-specific file for this platform\n        # and no destination platform directory was created. This is needed\n        # because x86 and MIPS don't have files for API levels 3-8.\n        if [ -z \"$PREV_SYSROOT_DST\" -a \\\n           ! -d \"$SRCDIR/$PLATFORM_SRC/arch-$ARCH\" ]; then\n            log \"Skipping: \\$SRC/$PLATFORM_SRC/arch-$ARCH\"\n            continue\n        fi\n\n        log \"Populating \\$DST/platforms/android-$PLATFORM/arch-$ARCH\"\n\n        # If this is not the first destination directory, copy over, or\n        # symlink the files from the previous one now.\n        if [ \"$PREV_SYSROOT_DST\" ]; then\n            if [ \"$OPTION_FAST_COPY\" ]; then\n                log \"Copying \\$DST/$PREV_SYSROOT_DST to \\$DST/$SYSROOT_DST\"\n                copy_directory \"$DSTDIR/$PREV_SYSROOT_DST\" \"$DSTDIR/$SYSROOT_DST\"\n            else\n                log \"Symlink-copying \\$DST/$PREV_SYSROOT_DST to \\$DST/$SYSROOT_DST\"\n                symlink_src_directory $PREV_SYSROOT_DST $SYSROOT_DST\n            fi\n        fi\n\n        # If this is the first destination directory, copy the common\n        # files from previous platform directories into this one.\n        # This helps copy the common headers from android-3 to android-8\n        # into the x86 and mips android-9 directories.\n        if [ -z \"$PREV_SYSROOT_DST\" ]; then\n            for OLD_PLATFORM in $PLATFORMS; do\n                if [ \"$OLD_PLATFORM\" = \"$PLATFORM\" ]; then\n                    break\n                fi\n                copy_src_directory platforms/android-$OLD_PLATFORM/include \\\n                                   $SYSROOT_DST/include \\\n                                   \"common android-$OLD_PLATFORM headers\"\n            done\n        fi\n\n        # There are two set of bionic headers: the original ones haven't been updated since\n        # gingerbread except for bug fixing, and the new ones in android-$FIRST_API64_LEVEL\n        # with 64-bit support.  Before the old bionic headers are deprecated/removed, we need\n        # to remove stale old headers when createing platform = $FIRST_API64_LEVEL\n        if [ \"$PLATFORM\" = \"$FIRST_API64_LEVEL\" ]; then\n            log \"Removing stale bionic headers in \\$DST/$SYSROOT_DST/include\"\n            nonbionic_files=\"android EGL GLES GLES2 GLES3 KHR media OMXAL SLES jni.h thread_db.h zconf.h zlib.h\"\n            if [ -d \"$DSTDIR/$SYSROOT_DST/include/\" ]; then\n                files=$(cd \"$DSTDIR/$SYSROOT_DST/include/\" && ls)\n                for file in $files; do\n                    if [ \"$nonbionic_files\" = \"${nonbionic_files%%${file}*}\" ]; then\n                        rm -rf \"$DSTDIR/$SYSROOT_DST/include/$file\"\n                    fi\n                done\n            fi\n        fi\n\n        # Now copy over all non-arch specific include files\n        copy_src_directory $PLATFORM_SRC/include $SYSROOT_DST/include \"common system headers\"\n        copy_src_directory $PLATFORM_SRC/arch-$ARCH/include $SYSROOT_DST/include \"$ARCH system headers\"\n\n        generate_api_level \"$PLATFORM\" \"$ARCH\" \"$DSTDIR\"\n\n        # If --minimal is not used, copy or generate binary files.\n        if [ -z \"$OPTION_MINIMAL\" ]; then\n            # Copy the prebuilt static libraries.  We need full set for multilib compiler for some arch\n            case \"$ARCH\" in\n                x86_64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"x86 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64 $SYSROOT_DST/lib64 \"x86_64 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libx32 $SYSROOT_DST/libx32 \"x32 sysroot libs\"\n                    ;;\n                mips64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64r2 $SYSROOT_DST/lib64r2 \"mips -mabi=64 -mips64r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib64 $SYSROOT_DST/lib64 \"mips -mabi=64 -mips64r6 sysroot libs\"\n                    ;;\n                mips)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs\"\n                    ;;\n                *)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/$LIBDIR $SYSROOT_DST/$LIBDIR \"$ARCH sysroot libs\"\n                    ;;\n            esac\n\n            # Generate C runtime object files when available\n            PLATFORM_SRC_ARCH=$PLATFORM_SRC/arch-$ARCH/src\n            if [ ! -d \"$SRCDIR/$PLATFORM_SRC_ARCH\" ]; then\n                PLATFORM_SRC_ARCH=$PREV_PLATFORM_SRC_ARCH\n            else\n                PREV_PLATFORM_SRC_ARCH=$PLATFORM_SRC_ARCH\n            fi\n\n            # Genreate crt objects\n            case \"$ARCH\" in\n                x86_64)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-m32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64 \"-m64\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libx32 \"-mx32\"\n                    ;;\n                mips64)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64r2 \"-mabi=64 -mips64r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib64 \"-mabi=64 -mips64r6\"\n                    ;;\n                mips)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    ;;\n                *)\n                    gen_crt_objects $PLATFORM $ARCH platforms/common/src $PLATFORM_SRC_ARCH $SYSROOT_DST/$LIBDIR\n                    ;;\n            esac\n\n            # Generate shared libraries from symbol files\n            case \"$ARCH\" in\n                x86_64)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-m32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64 \"-m64\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libx32 \"-mx32\"\n                    ;;\n                mips64)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64r2 \"-mabi=64 -mips64r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib64 \"-mabi=64 -mips64r6\"\n                    ;;\n                mips)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/lib \"-mabi=32 -mips32\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr2 \"-mabi=32 -mips32r2\"\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/libr6 \"-mabi=32 -mips32r6\"\n                    ;;\n                *)\n                    gen_shared_libraries $ARCH $PLATFORM_SRC/arch-$ARCH/symbols $SYSROOT_DST/$LIBDIR\n                    ;;\n            esac\n        else\n            # Copy the prebuilt binaries to bootstrap GCC\n            case \"$ARCH\" in\n                x86_64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"x86 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64 $SYSROOT_DST/lib64 \"x86_64 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libx32 $SYSROOT_DST/libx32 \"x32 sysroot libs (boostrap)\"\n                    ;;\n                mips64)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64r2 $SYSROOT_DST/lib64r2 \"mips -mabi=64 -mips64r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib64 $SYSROOT_DST/lib64 \"mips -mabi=64 -mips64r6 sysroot libs (boostrap)\"\n                    ;;\n                mips)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/lib $SYSROOT_DST/lib \"mips -mabi=32 -mips32 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr2 $SYSROOT_DST/libr2 \"mips -mabi=32 -mips32r2 sysroot libs (boostrap)\"\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap/libr6 $SYSROOT_DST/libr6 \"mips -mabi=32 -mips32r6 sysroot libs (boostrap)\"\n                    ;;\n                *)\n                    copy_src_directory $PLATFORM_SRC/arch-$ARCH/lib-bootstrap $SYSROOT_DST/$LIBDIR \"$ARCH sysroot libs (boostrap)\"\n                    ;;\n            esac\n        fi\n        PREV_SYSROOT_DST=$SYSROOT_DST\n    done\ndone\n\nif [ \"$PACKAGE_DIR\" ]; then\n    # Remove \"duplicate\" files for case-insensitive platforms.\n    if [ \"$OPTION_CASE_INSENSITIVE\" = \"yes\" ]; then\n        find \"$DSTDIR/platforms\" | sort -f | uniq -di | xargs rm\n    fi\n\n    for PLATFORM in $PLATFORMS; do\n        dump \"Copy android-$PLATFORM samples\"\n        # $SRC/platform-$PLATFORM/samples --> $DST/samples\n        copy_src_directory platforms/android-$PLATFORM/samples samples samples\n    done\n\n    # Cleanup generated files in samples\n    rm -rf \"$DSTDIR/samples/*/obj\"\n    rm -rf \"$DSTDIR/samples/*/libs\"\nfi\n\nif [ -n \"$PACKAGE_DIR\" ]; then\n    FLAGS=\"--package-dir=$PACKAGE_DIR\"\n    if [ \"$OPTION_SAMPLES\" ]; then\n        FLAGS=\"$FLAGS --samples\"\n    fi\n    run $NDK_DIR/build/tools/package-platforms.sh $FLAGS\n    fail_panic \"Can't package platforms\"\nfi\n\nlog \"Done !\"\n"
  },
  {
    "path": "build/tools/gen-toolchain-wrapper.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the gcc and toolchain binaries\n#  for the Android NDK.\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\nPROGRAM_PARAMETERS=\"<dst-dir>\"\nPROGRAM_DESCRIPTION=\"\\\nThis script allows you to generate a 'wrapper toolchain', i.e. a set of\nsimple scripts that act as toolchain binaries (e.g. my-cc, my-c++, my-ld,\netc...) but call another installed toolchain instead, possibly with additional\ncommand-line options.\n\nFor example, imagine we want a toolchain that generates 32-bit binaries while\nrunning on a 64-bit system, we could call this script as:\n\n   $PROGNAME --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m32\" /tmp/my-toolchain\n\nThen, this will create programs like:\n\n   /tmp/my-toolchain/my-cc\n   /tmp/my-toolchain/my-gcc\n   /tmp/my-toolchain/my-c++\n   /tmp/my-toolchain/my-g++\n   /tmp/my-toolchain/my-ld\n   ...\n\nWhere the compilers and linkers will add the -m32 flag to the command-line before\ncalling the host version of 'cc', 'gcc', etc...\n\nGenerally speaking:\n\n  - The 'destination toolchain' is the one that will be called by the\n    generated wrapper script. It is identified by a 'destination prefix'\n    (e.g. 'x86_64-linux-gnu-', note the dash at the end).\n\n    If is empty by default, but can be changed with --dst-prefix=<prefix>\n\n  - The 'source prefix' is the prefix added to the generated toolchain scripts,\n    it is 'my-' by default, but can be changed with --src-prefix=<prefix>\n\n  - You can use --cflags, --cxxflags, --ldflags, etc... to add extra\n    command-line flags for the generated compiler, linker, etc.. scripts\n\n\"\n\nDEFAULT_SRC_PREFIX=\"my-\"\nDEFAULT_DST_PREFIX=\"\"\n\nSRC_PREFIX=$DEFAULT_SRC_PREFIX\nregister_var_option \"--src-prefix=<prefix>\" SRC_PREFIX \"Set source toolchain prefix\"\n\nDST_PREFIX=$DEFAULT_DST_PREFIX\nregister_var_option \"--dst-prefix=<prefix>\" DST_PREFIX \"Set destination toolchain prefix\"\n\nEXTRA_CFLAGS=\nregister_var_option \"--cflags=<options>\" EXTRA_CFLAGS \"Add extra C compiler flags\"\n\nEXTRA_CXXFLAGS=\nregister_var_option \"--cxxflags=<options>\" EXTRA_CXXFLAGS \"Add extra C++ compiler flags\"\n\nEXTRA_LDFLAGS=\nregister_var_option \"--ldflags=<options>\" EXTRA_LDFLAGS \"Add extra linker flags\"\n\nEXTRA_ASFLAGS=\nregister_var_option \"--asflags=<options>\" EXTRA_ASFLAGS \"Add extra assembler flags\"\n\nEXTRA_ARFLAGS=\nregister_var_option \"--arflags=<options>\" EXTRA_ARFLAGS \"Add extra archiver flags\"\n\nCCACHE=\nregister_var_option \"--ccache=<prefix>\" CCACHE \"Use ccache compiler driver\"\n\nPROGRAMS=\"cc gcc c++ g++ cpp as ld ar ranlib readelf strip strings nm objdump dlltool\"\nregister_var_option \"--programs=<list>\" PROGRAMS \"List of programs to generate wrapper for\"\n\nextract_parameters \"$@\"\n\nPROGRAMS=$(commas_to_spaces \"$PROGRAMS\")\nif [ -z \"$PROGRAMS\" ]; then\n    panic \"Empty program list, nothing to do!\"\nfi\n\nDST_DIR=\"$PARAMETERS\"\nif [ -z \"$DST_DIR\" ]; then\n    panic \"Please provide a destination directory as a parameter! See --help for details.\"\nfi\n\nmkdir -p \"$DST_DIR\"\nfail_panic \"Could not create destination directory: $DST_DIR\"\n\n# Check if mingw compiler has dlfcn.h\n# $1: mignw compiler\n#\nmingw_has_dlfcn_h ()\n{\n   local CC=\"$1\"\n\n   if [ ! -f \"$CC\" ]; then\n       # compiler not found\n       return 1\n   fi\n   \"$CC\" -xc /dev/null -dM -E | grep -q MINGW\n   if [ $? != 0 ]; then\n       # not a mingw compiler\n       return 1\n   fi\n\n   \"$CC\" -xc -c /dev/null -include dlfcn.h -o /dev/null > /dev/null 2>&1\n}\n\n# Generate a small wrapper program\n#\n# $1: program name, without any prefix (e.g. gcc, g++, ar, etc..)\n# $2: source prefix (e.g. 'i586-mingw32msvc-')\n# $3: destination prefix (e.g. 'i586-px-mingw32msvc-')\n# $4: destination directory for the generate program\n#\ngen_wrapper_program ()\n{\n    local PROG=\"$1\"\n    local SRC_PREFIX=\"$2\"\n    local DST_PREFIX=\"$3\"\n    local DST_FILE=\"$4/${SRC_PREFIX}$PROG\"\n    local FLAGS=\"\"\n    local LDFLAGS=\"\"\n\n    case $PROG in\n      cc|gcc|cpp)\n          FLAGS=$FLAGS\" $EXTRA_CFLAGS\"\n          if mingw_has_dlfcn_h ${DST_PREFIX}$PROG; then\n              LDFLAGS=\"-ldl\"\n          fi\n          ;;\n      c++|g++)\n          FLAGS=$FLAGS\" $EXTRA_CXXFLAGS\"\n          if mingw_has_dlfcn_h ${DST_PREFIX}$PROG; then\n              LDFLAGS=\"-ldl\"\n          fi\n          ;;\n      ar) FLAGS=$FLAGS\" $EXTRA_ARFLAGS\";;\n      as) FLAGS=$FLAGS\" $EXTRA_ASFLAGS\";;\n      ld|ld.bfd|ld.gold) FLAGS=$FLAGS\" $EXTRA_LDFLAGS\";;\n    esac\n\n    # Add -m32 for x86_64 C/C++ compilers intended to produce 32-bit code\n    case $PROG in\n        cc|gcc|cpp|c++|g++)\n            case $SRC_PREFIX in\n                i[3456]86-*)\n                    case $DST_PREFIX in\n                        x86_64-*)\n                            FLAGS=$FLAGS\" -m32\"\n                            ;;\n                    esac\n                    ;;\n            esac\n            ;;\n    esac\n\n    if [ -n \"$CCACHE\" ]; then\n        DST_PREFIX=$CCACHE\" \"$DST_PREFIX\n    fi\n\n    cat > \"$DST_FILE\" << EOF\n#!/bin/sh\n# Auto-generated, do not edit\n${DST_PREFIX}$PROG $FLAGS \"\\$@\" $LDFLAGS\nEOF\n    chmod +x \"$DST_FILE\"\n    log \"Generating: ${SRC_PREFIX}$PROG\"\n}\n\nlog \"Generating toolchain wrappers in: $DST_DIR\"\n\nfor PROG in $PROGRAMS; do\n  gen_wrapper_program $PROG \"$SRC_PREFIX\" \"$DST_PREFIX\" \"$DST_DIR\"\ndone\n\nlog \"Done!\"\n"
  },
  {
    "path": "build/tools/make-release.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2010, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to build an NDK release package *from* scratch !!\n# While handy, this is *not* the best way to generate NDK release packages.\n# See docs/DEVELOPMENT.TXT for details.\n#\n\n. `dirname $0`/prebuilt-common.sh\n\nforce_32bit_binaries\n\n# The default release name (use today's date)\nRELEASE=`date +%Y%m%d`\nregister_var_option \"--release=<name>\" RELEASE \"Specify release name\"\n\n# The package prefix\nPREFIX=android-ndk\nregister_var_option \"--prefix=<name>\" PREFIX \"Specify package prefix\"\n\n# Find the location of the platforms root directory\nDEVELOPMENT_ROOT=`dirname $ANDROID_NDK_ROOT`/development/ndk\nregister_var_option \"--development=<path>\" DEVELOPMENT_ROOT \"Path to development/ndk directory\"\n\n# Default location for final packages\nOUT_DIR=$TMPDIR/release\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Path to output directory\"\n\n# Force the build\nFORCE=no\nregister_var_option \"--force\" FORCE \"Force build (do not ask initial question)\"\n\n# Use --incremental to implement incremental release builds.\n# This is only useful to debug this script or the ones it calls.\nINCREMENTAL=no\nregister_var_option \"--incremental\" INCREMENTAL \"Enable incremental packaging (debug only).\"\n\nDARWIN_SSH=\nif [ \"$HOST_OS\" = \"linux\" ] ; then\nregister_var_option \"--darwin-ssh=<hostname>\" DARWIN_SSH \"Specify Darwin hostname to ssh to for the build.\"\nfi\n\nLLVM_VERSION_LIST=$(spaces_to_commas $DEFAULT_LLVM_VERSION_LIST)\nregister_var_option \"--llvm-version-list=<vers>\" LLVM_VERSION_LIST \"List of LLVM release versions\"\n\nSKIP_HOST_PREBUILTS=no\nregister_var_option \"--skip-host-prebuilts\" SKIP_HOST_PREBUILTS \"Skip build of host prebuilts (toolchains etc)\"\n\nSKIP_TARGET_PREBUILTS=no\nregister_var_option \"--skip-target-prebuilts\" SKIP_TARGET_PREBUILTS \"Skip build of target prebuilts (libraries etc)\"\n\nSKIP_PACKAGING=no\nregister_var_option \"--skip-packaging\" SKIP_PACKAGING \"Skip packaging of just built release\"\n\n# Determine the host platforms we can build for.\n# This is the current host platform, and eventually windows if\n# we are on Linux and have the mingw32 compiler installed and\n# in our path.\n#\nHOST_SYSTEMS=\"$HOST_TAG32\"\n\nMINGW_GCC=\nCANADIAN_DARWIN_BUILD=no\nif [ \"$HOST_TAG\" = \"linux-x86\" ] ; then\n    find_mingw_toolchain\n    if [ -n \"$MINGW_GCC\" ] ; then\n        HOST_SYSTEMS=\"$HOST_SYSTEMS,windows\"\n    fi\n    # If darwin toolchain exist, build darwin too\n    if [ -z \"$DARWIN_SSH\" -a -f \"${DARWIN_TOOLCHAIN}-gcc\" ]; then\n        HOST_SYSTEMS=\"$HOST_SYSTEMS,darwin-x86\"\n        CANADIAN_DARWIN_BUILD=yes\n    fi\nfi\nif [ -n \"$DARWIN_SSH\" -a \"$HOST_SYSTEMS\" = \"${HOST_SYSTEMS%darwin-x86*}\" ]; then\n    HOST_SYSTEMS=\"$HOST_SYSTEMS,darwin-x86\"\nfi\n\nregister_var_option \"--systems=<list>\" HOST_SYSTEMS \"List of host systems to build for\"\n\nALSO_64_FLAG=\nSEPARATE_64_FLAG=\nregister_option \"--also-64\" do_ALSO_64 \"Also build 64-bit host toolchain\"\ndo_ALSO_64 () { ALSO_64_FLAG=\"--also-64\"; SEPARATE_64_FLAG=\"--separate-64\"; }\n\nONLY_64_FLAG=\nregister_option \"--only-64\" do_ONLY_64 \"Build only 64-bit host toolchain\"\ndo_ONLY_64 () { ONLY_64_FLAG=\"--try-64\"; SEPARATE_64_FLAG=\"--try-64\"; }\n\nARCHS=\"$DEFAULT_ARCHS\"\nregister_var_option \"--arch=<arch>\" ARCHS \"Specify target architectures\"\n\nTOOLCHAIN_SRCDIR=\nregister_var_option \"--toolchain-src-dir=<path>\" TOOLCHAIN_SRCDIR \"Use toolchain sources from <path>\"\n\nextract_parameters \"$@\"\n\nLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)\n\nVERBOSE_FLAG=\nif [ \"$VERBOSE\" = \"yes\" ]; then\n    VERBOSE_FLAG=\"--verbose\"\nfi\n\n# check that only one of --also-64 and --only-64 was specified\nif [ -n \"$ALSO_64_FLAG\" -a -n \"$ONLY_64_FLAG\" ] ; then\n    echo \"ERROR: Can't use both --also-64 and --only-64 at the same time\"\n    exit 1\nfi\n\n# Check if windows is specified w/o linux-x86\nif [ \"$HOST_SYSTEMS\" != \"${HOST_SYSTEMS%windows*}\" ] ; then\n    if [ -z \"$MINGW_GCC\" ]; then\n        echo \"ERROR: Can't find mingw tool with --systems=windows\"\n        exit 1\n    fi\n    if [ \"$HOST_SYSTEMS\" = \"windows\" ] ; then\n        dump \"Warning: for windows only builds only host toolchains will be built\"\n    fi\nfi\nHOST_FLAGS=\"--systems=$HOST_SYSTEMS $ALSO_64_FLAG $ONLY_64_FLAG\"\nif [ -z \"$CANADIAN_DARWIN_BUILD\" ]; then\n    # Filter out darwin-x86 in $HOST_FLAGS, because\n    # 1) On linux when cross-compiling is done via \"--darwin-ssh\", keeping darwin-x86 in --systems list\n    #    actually disable --darwin-ssh later on.\n    # 2) On MacOSX, darwin-x86 is the default, no need to be explicit.\n    #\n    HOST_FLAGS=$(echo \"$HOST_FLAGS\" | sed -e 's/darwin-x86//')\nfi\n\nif [ \"$SKIP_HOST_PREBUILTS\" != \"no\" ]; then\n    HOST_FLAGS=\"$HOST_FLAGS --skip-host-prebuilts\"\nfi\n\nif [ \"$SKIP_TARGET_PREBUILTS\" != \"no\" ]; then\n    HOST_FLAGS=\"$HOST_FLAGS --skip-target-prebuilts\"\nfi\n\n# Print a warning and ask the user if he really wants to do that !\n#\nif [ \"$FORCE\" = \"no\" -a \"$INCREMENTAL\" = \"no\" ] ; then\n    echo \"IMPORTANT WARNING !!\"\n    echo \"\"\n    echo \"This script is used to generate an NDK release package from scratch\"\n    echo \"for the following host platforms: $HOST_SYSTEMS\"\n    echo \"\"\n    echo \"This process is EXTREMELY LONG and may take SEVERAL HOURS on a dual-core\"\n    echo \"machine. If you plan to do that often, please read docs/DEVELOPMENT.TXT\"\n    echo \"that provides instructions on how to do that more easily.\"\n    echo \"\"\n    echo \"Are you sure you want to do that [y/N] \"\n    read YESNO\n    case \"$YESNO\" in\n        y|Y|yes|YES)\n            ;;\n        *)\n            echo \"Aborting !\"\n            exit 0\n    esac\nfi\n\nPROGRAM_PARAMETERS=\nPROGRAM_DESCRIPTION=\\\n\"This script is used to generate an NDK release package from scratch.\n\nThis process is EXTREMELY LONG and consists in the following steps:\n\n  - downloading toolchain sources from the Internet\n  - patching them appropriately (if needed)\n  - rebuilding the toolchain binaries for the host system\n  - rebuilding the platforms and samples directories from ../development/ndk\n  - packaging everything into a host-specific archive\n\nThis can take several hours on a dual-core machine, even assuming a very\nnice Internet connection and plenty of RAM and disk space.\n\nNote that on Linux, if you have the 'mingw32' package installed, the script\nwill also automatically generate a windows release package. You can prevent\nthat by using the --platforms option.\n\nIMPORTANT:\n        If you intend to package NDK releases often, please read the\n        file named docs/DEVELOPMENT.TXT which provides ways to do that\n        more quickly, by preparing toolchain binary tarballs that can be\n        reused for each package operation. This will save you hours of\n        your time compared to using this script!\n\"\n\n# Create directory where everything will be performed.\nRELEASE_DIR=$NDK_TMPDIR/release-$RELEASE\nunset NDK_TMPDIR  # prevent later script from reusing/removing it\nif [ \"$INCREMENTAL\" = \"no\" ] ; then\n    rm -rf $RELEASE_DIR && mkdir -p $RELEASE_DIR\nelse\n    if [ ! -d \"$RELEASE_DIR\" ] ; then\n        echo \"ERROR: Can't make incremental, missing release dir: $RELEASE_DIR\"\n        exit 1\n    fi\nfi\n\n\n#\n# Timestamp management\nTIMESTAMP_DIR=\"$RELEASE_DIR/timestamps\"\nmkdir -p \"$TIMESTAMP_DIR\"\nif [ \"$INCREMENTAL\" = \"no\" ] ; then\n    run rm -rf \"$TIMESTAMP_DIR/*\"\nfi\n\ntimestamp_set ()\n{\n    touch \"$TIMESTAMP_DIR/$1\"\n}\n\ntimestamp_clear ()\n{\n    rm -f \"$TIMESTAMP_DIR/$1\"\n}\n\ntimestamp_check ()\n{\n    if [ -f \"$TIMESTAMP_DIR/$1\" ] ; then\n        return 1\n    else\n        return 0\n    fi\n}\n\ndump \"Building for target architectures: $ARCHS\"\n\n# Step 1, If needed, download toolchain sources into a temporary directory\nif [ -n \"$TOOLCHAIN_SRCDIR\" ] ; then\n    dump \"Using toolchain source directory: $TOOLCHAIN_SRCDIR\"\n    timestamp_set   toolchain-download-sources\nelse\n    if timestamp_check toolchain-download-sources; then\n        dump \"Downloading toolchain sources...\"\n        TOOLCHAIN_SRCDIR=\"$RELEASE_DIR/toolchain-src\"\n        log \"Using toolchain source directory: $TOOLCHAIN_SRCDIR\"\n        run $ANDROID_NDK_ROOT/build/tools/download-toolchain-sources.sh \"$TOOLCHAIN_SRCDIR\"\n        if [ \"$?\" != 0 ] ; then\n            dump \"ERROR: Could not download toolchain sources\"\n            exit 1\n        fi\n        timestamp_set   toolchain-download-sources\n        timestamp_clear build-prebuilts\n        timestamp_clear build-host-prebuilts\n        timestamp_clear build-darwin-prebuilts\n        timestamp_clear build-mingw-prebuilts\n    fi\nfi\n\n# Step 2, build the host toolchain binaries and package them\nif timestamp_check build-prebuilts; then\n    PREBUILT_DIR=\"$RELEASE_DIR/prebuilt\"\n    if timestamp_check build-host-prebuilts; then\n        dump \"Building host toolchain binaries...\"\n        run $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh \\\n            --package-dir=\"$PREBUILT_DIR\" \\\n            --arch=\"$ARCHS\" \\\n            --build-dir=\"$RELEASE_DIR/build\" \\\n            --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n            $HOST_FLAGS \\\n            \"$TOOLCHAIN_SRCDIR\"\n        fail_panic \"Can't build $HOST_SYSTEM binaries.\"\n        timestamp_set build-host-prebuilts\n    fi\n    if [ -n \"$DARWIN_SSH\" ] ; then\n        if timestamp_check build-darwin-prebuilts; then\n            dump \"Building Darwin prebuilts through ssh to $DARWIN_SSH...\"\n            run $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh \\\n                --package-dir=\"$PREBUILT_DIR\" \\\n                --arch=\"$ARCHS\" \\\n                --darwin-ssh=\"$DARWIN_SSH\" \\\n                --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n                $HOST_FLAGS \\\n                \"$TOOLCHAIN_SRCDIR\"\n            fail_panic \"Can't build Darwin binaries!\"\n            timestamp_set build-darwin-prebuilts\n        fi\n    fi\n    timestamp_set build-prebuilts\n    timestamp_clear make-packages\nfi\n\n# Step 3, package a release with everything\nif timestamp_check make-packages; then\n    if [ \"$SKIP_PACKAGING\" = \"no\" ]; then\n        dump \"Generating NDK release packages\"\n        run $ANDROID_NDK_ROOT/build/tools/package-release.sh \\\n            $VERBOSE_FLAG \\\n            --release=$RELEASE \\\n            --prefix=$PREFIX \\\n            --out-dir=\"$OUT_DIR\" \\\n            --arch=\"$(spaces_to_commas $ARCHS)\" \\\n            --prebuilt-dir=\"$PREBUILT_DIR\" \\\n            --systems=\"$HOST_SYSTEMS\" \\\n            --development-root=\"$DEVELOPMENT_ROOT\" \\\n            --llvm-version-list=$(spaces_to_commas $LLVM_VERSION_LIST) \\\n            \"$SEPARATE_64_FLAG\"\n        if [ $? != 0 ] ; then\n            dump \"ERROR: Can't generate proper release packages.\"\n            exit 1\n        fi\n    fi # SKIP_PACKAGING\n    timestamp_set make-packages\nfi\n\ndump \"All clear. Good work! See $OUT_DIR\"\n"
  },
  {
    "path": "build/tools/make-standalone-toolchain.sh",
    "content": "#!/bin/bash\n\n# Copyright (C) 2010, 2014, 2015, 2017, 2018 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Create a standalone toolchain package for Android.\n\n. `dirname $0`/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"Generate a customized Android toolchain installation that includes\na working sysroot. The result is something that can more easily be\nused as a standalone cross-compiler, e.g. to run configure and\nmake scripts.\"\n\n# For now, this is the only toolchain that works reliably.\nTOOLCHAIN_NAME=\nregister_var_option \"--toolchain=<name>\" TOOLCHAIN_NAME \"Specify toolchain name\"\n\nLLVM_VERSION=\nregister_var_option \"--llvm-version=<ver>\" LLVM_VERSION \"Specify LLVM version\"\n\nSTL=gnustl\nregister_var_option \"--stl=<name>\" STL \"Specify C++ STL\"\n\nARCH=\nregister_var_option \"--arch=<name>\" ARCH \"Specify target architecture\"\n\n# Grab the ABIs that match the architecture.\nABIS=\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNDK_DIR=`dirname $0`\nNDK_DIR=`dirname $NDK_DIR`\nNDK_DIR=`dirname $NDK_DIR`\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Take source files from NDK at <path>\"\n\nif [ -d \"$NDK_DIR/prebuilt/$HOST_TAG\" ]; then\n  SYSTEM=$HOST_TAG\nelse\n  SYSTEM=$HOST_TAG32\nfi\nregister_var_option \"--system=<name>\" SYSTEM \"Specify host system\"\n\nPACKAGE_DIR=$TMPDIR\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Place package file in <path>\"\n\nINSTALL_DIR=\nregister_var_option \"--install-dir=<path>\" INSTALL_DIR \"Don't create package, install files to <path> instead.\"\n\nPLATFORM=\nregister_option \"--platform=<name>\" do_platform \"Specify target Android platform/API level.\" \"android-3\"\ndo_platform () {\n    PLATFORM=$1;\n    if [ \"$PLATFORM\" = \"android-L\" ]; then\n        echo \"WARNING: android-L is renamed as android-21\"\n        PLATFORM=android-21\n    fi\n}\n\nextract_parameters \"$@\"\n\n# Check NDK_DIR\nif [ ! -d \"$NDK_DIR/build/core\" ] ; then\n    echo \"Invalid source NDK directory: $NDK_DIR\"\n    echo \"Please use --ndk-dir=<path> to specify the path of an installed NDK.\"\n    exit 1\nfi\n\n# Check TOOLCHAIN_NAME\nARCH_BY_TOOLCHAIN_NAME=\nif [ -n \"$TOOLCHAIN_NAME\" ]; then\n    case $TOOLCHAIN_NAME in\n        arm-*)\n            ARCH_BY_TOOLCHAIN_NAME=arm\n            ;;\n        x86-*)\n            ARCH_BY_TOOLCHAIN_NAME=x86\n            ;;\n        mipsel-*)\n            ARCH_BY_TOOLCHAIN_NAME=mips\n            ;;\n        aarch64-*)\n            ARCH_BY_TOOLCHAIN_NAME=arm64\n            ;;\n        x86_64-linux-android-*)\n            ARCH_BY_TOOLCHAIN_NAME=x86_64\n            TOOLCHAIN_NAME=$(echo \"$TOOLCHAIN_NAME\" | sed -e 's/-linux-android//')\n            echo \"Auto-truncate: --toolchain=$TOOLCHAIN_NAME\"\n            ;;\n        x86_64-*)\n            ARCH_BY_TOOLCHAIN_NAME=x86_64\n            ;;\n        mips64el-*)\n            ARCH_BY_TOOLCHAIN_NAME=mips64\n            ;;\n        *)\n            echo \"Invalid toolchain $TOOLCHAIN_NAME\"\n            exit 1\n            ;;\n    esac\nfi\n# Check ARCH\nif [ -z \"$ARCH\" ]; then\n    ARCH=$ARCH_BY_TOOLCHAIN_NAME\n    if [ -z \"$ARCH\" ]; then\n        ARCH=arm\n    fi\n    echo \"Auto-config: --arch=$ARCH\"\nfi\n\nif [ -z \"$ABIS\" ]; then\n    ABIS=$(convert_arch_to_abi $ARCH)\nfi\n\nif [ -z \"$ABIS\" ]; then\n    dump \"ERROR: No ABIS. Possibly unsupported NDK architecture $ARCH?\"\n    exit 1\nfi\n\n# Check toolchain name\nif [ -z \"$TOOLCHAIN_NAME\" ]; then\n    TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)\n    echo \"Auto-config: --toolchain=$TOOLCHAIN_NAME\"\nfi\n\n# Detect LLVM version from toolchain name with *clang*\nLLVM_VERSION_EXTRACT=$(echo \"$TOOLCHAIN_NAME\" | grep 'clang[0-9]\\.[0-9]$' | sed -e 's/.*-clang//')\nif [ -n \"$LLVM_VERSION_EXTRACT\" ]; then\n    DEFAULT_GCC_VERSION=$(get_default_gcc_version_for_arch $ARCH)\n    NEW_TOOLCHAIN_NAME=${TOOLCHAIN_NAME%-clang${LLVM_VERSION_EXTRACT}}-${DEFAULT_GCC_VERSION}\n    if [ -z \"$LLVM_VERSION\" ]; then\n        LLVM_VERSION=$LLVM_VERSION_EXTRACT\n        echo \"Auto-config: --toolchain=$NEW_TOOLCHAIN_NAME, --llvm-version=$LLVM_VERSION\"\n    else\n        if [ \"$LLVM_VERSION\" != \"$LLVM_VERSION_EXTRACT\" ]; then\n            echo \"Conflict llvm-version: --llvm-version=$LLVM_VERSION and as implied by --toolchain=$TOOLCHAIN_NAME\"\n            exit 1\n        fi\n    fi\n    TOOLCHAIN_NAME=$NEW_TOOLCHAIN_NAME\nelif [ -z \"$LLVM_VERSION\" ]; then\n    LLVM_VERSION=$DEFAULT_LLVM_VERSION\nfi\n\nif [ -z \"$LLVM_VERSION\" ]; then\n    echo \"*** Can't detect LLVM version\" 1>&2\n    exit 1\nfi\n\n# Check PLATFORM\nif [ -z \"$PLATFORM\" ] ; then\n    case $ARCH in\n        arm|x86|mips)\n            PLATFORM=android-9\n            ;;\n        arm64|x86_64|mips64)\n            PLATFORM=android-$FIRST_API64_LEVEL\n            ;;\n        *)\n            dump \"ERROR: Unsupported NDK architecture $ARCH!\"\n    esac\n    echo \"Auto-config: --platform=$PLATFORM\"\nfi\n\nif [ ! -d \"$NDK_DIR/platforms/$PLATFORM\" ] ; then\n    echo \"Invalid platform name: $PLATFORM\"\n    echo \"Please use --platform=<name> with one of:\" `(cd \"$NDK_DIR/platforms\" && ls)`\n    exit 1\nfi\n\n# Check toolchain name\nTOOLCHAIN_PATH=\"$NDK_DIR/toolchains/$TOOLCHAIN_NAME\"\nif [ ! -d \"$TOOLCHAIN_PATH\" ] ; then\n    echo \"Invalid toolchain name: $TOOLCHAIN_NAME\"\n    echo \"Please use --toolchain=<name> with the name of a toolchain supported by the source NDK.\"\n    echo \"Try one of: \" `(cd \"$NDK_DIR/toolchains\" && ls)`\n    exit 1\nfi\n\n# Extract architecture from platform name\nparse_toolchain_name $TOOLCHAIN_NAME\n\ncase \"$TOOLCHAIN_NAME\" in\n  *4.9l)\n    GCC_VERSION=4.9l\n    ;;\n  *4.8l)\n    GCC_VERSION=4.8l\n    ;;\nesac\n\n# Check that there are any platform files for it!\n(cd $NDK_DIR/platforms && ls -d */arch-$ARCH >/dev/null 2>&1 )\nif [ $? != 0 ] ; then\n    echo \"Platform $PLATFORM doesn't have any files for this architecture: $ARCH\"\n    echo \"Either use --platform=<name> or --toolchain=<name> to select a different\"\n    echo \"platform or arch-dependent toolchain name (respectively)!\"\n    exit 1\nfi\n\n# Compute source sysroot\nSRC_SYSROOT_INC=\"$NDK_DIR/platforms/$PLATFORM/arch-$ARCH/usr/include\"\nSRC_SYSROOT_LIB=\"$NDK_DIR/platforms/$PLATFORM/arch-$ARCH/usr/lib\"\nif [ ! -d \"$SRC_SYSROOT_INC\" -o ! -d \"$SRC_SYSROOT_LIB\" ] ; then\n    echo \"No platform files ($PLATFORM) for this architecture: $ARCH\"\n    exit 1\nfi\n\n# Check that we have any prebuilts GCC toolchain here\nif [ ! -d \"$TOOLCHAIN_PATH/prebuilt\" ]; then\n    echo \"Toolchain is missing prebuilt files: $TOOLCHAIN_NAME\"\n    echo \"You must point to a valid NDK release package!\"\n    exit 1\nfi\n\nif [ ! -d \"$TOOLCHAIN_PATH/prebuilt/$SYSTEM\" ] ; then\n    echo \"Host system '$SYSTEM' is not supported by the source NDK!\"\n    echo \"Try --system=<name> with one of: \" `(cd $TOOLCHAIN_PATH/prebuilt && ls) | grep -v gdbserver`\n    exit 1\nfi\n\nTOOLCHAIN_PATH=\"$TOOLCHAIN_PATH/prebuilt/$SYSTEM\"\nTOOLCHAIN_GCC=$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET-gcc\n\nif [ ! -f \"$TOOLCHAIN_GCC\" ] ; then\n    echo \"Toolchain $TOOLCHAIN_GCC is missing!\"\n    exit 1\nfi\n\nif [ -n \"$LLVM_VERSION\" ]; then\n    LLVM_TOOLCHAIN_PATH=\"$NDK_DIR/toolchains/llvm-$LLVM_VERSION\"\n    # Check that we have any prebuilts LLVM toolchain here\n    if [ ! -d \"$LLVM_TOOLCHAIN_PATH/prebuilt\" ] ; then\n        echo \"LLVM Toolchain is missing prebuilt files\"\n        echo \"You must point to a valid NDK release package!\"\n        exit 1\n    fi\n\n    if [ ! -d \"$LLVM_TOOLCHAIN_PATH/prebuilt/$SYSTEM\" ] ; then\n        echo \"Host system '$SYSTEM' is not supported by the source NDK!\"\n        echo \"Try --system=<name> with one of: \" `(cd $LLVM_TOOLCHAIN_PATH/prebuilt && ls)`\n        exit 1\n    fi\n    LLVM_TOOLCHAIN_PATH=\"$LLVM_TOOLCHAIN_PATH/prebuilt/$SYSTEM\"\nfi\n\n# Get GCC_BASE_VERSION.  Note that GCC_BASE_VERSION may be slightly different from GCC_VERSION.\n# eg. In gcc4.9 GCC_BASE_VERSION is \"4.9.x-google\"\nLIBGCC_PATH=`$TOOLCHAIN_GCC -print-libgcc-file-name`\nLIBGCC_BASE_PATH=${LIBGCC_PATH%/*}         # base path of libgcc.a\nGCC_BASE_VERSION=${LIBGCC_BASE_PATH##*/}   # stuff after the last /\n\n# Create temporary directory\nTMPDIR=$NDK_TMPDIR/standalone/$TOOLCHAIN_NAME\n\ndump \"Copying prebuilt binaries...\"\n# Now copy the GCC toolchain prebuilt binaries\ncopy_directory \"$TOOLCHAIN_PATH\" \"$TMPDIR\"\n\n# Copy python-related to for gdb.exe\nPYTHON=python\nPYTHON_x=python$(echo \"$DEFAULT_PYTHON_VERSION\" | cut -d . -f 1)\nPYTHON_xdotx=python$(echo \"$DEFAULT_PYTHON_VERSION\" | cut -d . -f 1-2)\ncopy_directory \"$NDK_DIR/prebuilt/$SYSTEM/include/$PYTHON_xdotx\" \"$TMPDIR/include/$PYTHON_xdotx\"\ncopy_directory \"$NDK_DIR/prebuilt/$SYSTEM/lib/$PYTHON_xdotx\" \"$TMPDIR/lib/$PYTHON_xdotx\"\ncopy_file_list \"$NDK_DIR/prebuilt/$SYSTEM/bin\" \"$TMPDIR/bin\" \"$PYTHON$HOST_EXE\" \"$PYTHON_x$HOST_EXE\" \"$PYTHON_xdotx$HOST_EXE\"\nif [ \"$HOST_TAG32\" = \"windows\" ]; then\n  copy_file_list \"$NDK_DIR/prebuilt/$SYSTEM/bin\" \"$TMPDIR/bin\" lib$PYTHON_xdotx.dll\nfi\n\n# Copy yasm for x86\nif [ \"$ARCH\" = \"x86\" ]; then\n  copy_file_list \"$NDK_DIR/prebuilt/$SYSTEM/bin\" \"$TMPDIR/bin\" \"yasm$HOST_EXE\"\nfi\n\n# Clang stuff\n\nif [ -n \"$LLVM_VERSION\" ]; then\n  # Copy the clang/llvm toolchain prebuilt binaries\n  copy_directory \"$LLVM_TOOLCHAIN_PATH\" \"$TMPDIR\"\n\n  # Move clang and clang++ to clang${LLVM_VERSION} and clang${LLVM_VERSION}++,\n  # then create scripts linking them with predefined -target flag.  This is to\n  # make clang/++ easier drop-in replacement for gcc/++ in NDK standalone mode.\n  # Note that the file name of \"clang\" isn't important, and the trailing\n  # \"++\" tells clang to compile in C++ mode\n  LLVM_TARGET=\n  case \"$ARCH\" in\n      arm) # NOte: -target may change by clang based on the\n           #        presence of subsequent -march=armv7-a and/or -mthumb\n          LLVM_TARGET=armv5te-none-linux-androideabi\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm\n          ;;\n      x86)\n          LLVM_TARGET=i686-none-linux-android\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86\n          ;;\n      mips)\n          LLVM_TARGET=mipsel-none-linux-android\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips\n          ;;\n      arm64)\n          LLVM_TARGET=aarch64-none-linux-android\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm64\n          ;;\n      x86_64)\n          LLVM_TARGET=x86_64-none-linux-android\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86_64\n          ;;\n      mips64)\n          LLVM_TARGET=mips64el-none-linux-android\n          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips64\n          ;;\n      *)\n        dump \"ERROR: Unsupported NDK architecture $ARCH!\"\n  esac\n  # Need to remove '.' from LLVM_VERSION when constructing new clang name,\n  # otherwise clang3.3++ may still compile *.c code as C, not C++, which\n  # is not consistent with g++\n  LLVM_VERSION_WITHOUT_DOT=$(echo \"$LLVM_VERSION\" | sed -e \"s!\\.!!\")\n  mv \"$TMPDIR/bin/clang${HOST_EXE}\" \"$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}\"\n  if [ -h \"$TMPDIR/bin/clang++${HOST_EXE}\" ] ; then\n    ## clang++ is a link to clang.  Remove it and reconstruct\n    rm \"$TMPDIR/bin/clang++${HOST_EXE}\"\n    ln -sf \"clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}\" \"$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE}\"\n  else\n    mv \"$TMPDIR/bin/clang++${HOST_EXE}\" \"$TMPDIR/bin/clang$LLVM_VERSION_WITHOUT_DOT++${HOST_EXE}\"\n  fi\n\n  TARGET_FLAG=\"-target $LLVM_TARGET\"\n  CLANG_FLAGS=\"$TARGET_FLAG --sysroot \\`dirname \\$0\\`/../sysroot\"\n\n  cat > \"$TMPDIR/bin/clang\" <<EOF\n#!/bin/bash\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/clang$LLVM_VERSION_WITHOUT_DOT $CLANG_FLAGS \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/clang$LLVM_VERSION_WITHOUT_DOT \"\\$@\"\nfi\nEOF\n  cat > \"$TMPDIR/bin/clang++\" <<EOF\n#!/bin/bash\nif [ \"\\$1\" != \"-cc1\" ]; then\n    \\`dirname \\$0\\`/clang$LLVM_VERSION_WITHOUT_DOT++ $CLANG_FLAGS \"\\$@\"\nelse\n    # target/triple already spelled out.\n    \\`dirname \\$0\\`/clang$LLVM_VERSION_WITHOUT_DOT++ \"\\$@\"\nfi\nEOF\n  chmod 0755 \"$TMPDIR/bin/clang\" \"$TMPDIR/bin/clang++\"\n  cp -a \"$TMPDIR/bin/clang\" \"$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang\"\n  cp -a \"$TMPDIR/bin/clang++\" \"$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++\"\n\n  if [ -n \"$HOST_EXE\" ] ; then\n    CLANG_FLAGS=\"$TARGET_FLAG --sysroot %~dp0\\\\..\\\\sysroot\"\n    cat > \"$TMPDIR/bin/clang.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE} $CLANG_FLAGS %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n    cat > \"$TMPDIR/bin/clang++.cmd\" <<EOF\n@echo off\nif \"%1\" == \"-cc1\" goto :L\n%~dp0\\\\clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE} $CLANG_FLAGS %*\nif ERRORLEVEL 1 exit /b 1\ngoto :done\n:L\nrem target/triple already spelled out.\n%~dp0\\\\clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE} %*\nif ERRORLEVEL 1 exit /b 1\n:done\nEOF\n    chmod 0755 \"$TMPDIR/bin/clang.cmd\" \"$TMPDIR/bin/clang++.cmd\"\n    cp -a \"$TMPDIR/bin/clang.cmd\" \"$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang.cmd\"\n    cp -a \"$TMPDIR/bin/clang++.cmd\" \"$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++.cmd\"\n  fi\nfi\n\ndump \"Copying sysroot headers and libraries...\"\n# Copy the sysroot under $TMPDIR/sysroot. The toolchain was built to\n# expect the sysroot files to be placed there!\nrun copy_directory_nolinks \"$SRC_SYSROOT_INC\" \"$TMPDIR/sysroot/usr/include\"\nrun copy_directory_nolinks \"$SRC_SYSROOT_LIB\" \"$TMPDIR/sysroot/usr/lib\"\n\ncase \"$ARCH\" in\n# x86_64 and mips* toolchain are built multilib.\n    x86_64)\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../lib64\" \"$TMPDIR/sysroot/usr/lib64\"\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../libx32\" \"$TMPDIR/sysroot/usr/libx32\"\n        ;;\n    mips64)\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../libr2\" \"$TMPDIR/sysroot/usr/libr2\"\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../libr6\" \"$TMPDIR/sysroot/usr/libr6\"\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../lib64\" \"$TMPDIR/sysroot/usr/lib64\"\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../lib64r2\" \"$TMPDIR/sysroot/usr/lib64r2\"\n        ;;\n    mips)\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../libr2\" \"$TMPDIR/sysroot/usr/libr2\"\n        copy_directory_nolinks \"$SRC_SYSROOT_LIB/../libr6\" \"$TMPDIR/sysroot/usr/libr6\"\n        ;;\nesac\n\n# remove this libstdc++ library to avoid possible clashes\n# with real ones\nrun find \"$TMPDIR/sysroot/usr/\" -name 'libstdc++.*' -delete\n\nif [ \"$ARCH_INC\" != \"$ARCH\" ]; then\n    cp -a $NDK_DIR/$GCCUNWIND_SUBDIR/libs/$ABI/* $TMPDIR/sysroot/usr/lib\n    if [ \"$ARCH\" = \"${ARCH%%64*}\" ]; then\n        cp -a $NDK_DIR/$COMPILER_RT_SUBDIR/libs/$ABI/* $TMPDIR/sysroot/usr/lib\n    fi\nfi\n\nif [ \"$ARCH_LIB\" != \"$ARCH\" ]; then\n    cp -a $NDK_DIR/platforms/$PLATFORM/arch-$ARCH/usr/lib/crt* $TMPDIR/sysroot/usr/lib\nfi\n\nABI_TARGET=\"$TMPDIR/$ABI_CONFIGURE_TARGET\"\n\ndump \"Copying crystax headers and libraries...\"\n\nCRYSTAX_DIR=$NDK_DIR/$CRYSTAX_SUBDIR\nCRYSTAX_LIBS=$CRYSTAX_DIR/libs\n\n# $1: Source ABI (e.g. 'armeabi')\ncopy_crystax_libs_for_abi () {\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    case $ABI in\n        armeabi*)\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a/thumb\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a/thumb\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a-hard/thumb\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/armeabi-v7a-hard/thumb\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"libcrystax.so\"\n            ;;\n        mips64)\n            copy_file_list \"$CRYSTAX_LIBS/mips64\" \"$ABI_TARGET/lib64\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64\" \"$ABI_TARGET/lib64\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips64/r2\" \"$ABI_TARGET/lib64r2\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64/r2\" \"$ABI_TARGET/lib64r2\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips64/r2\" \"$ABI_TARGET/lib64r2\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64/r2\" \"$ABI_TARGET/lib64r2\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32\" \"$ABI_TARGET/lib\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32\" \"$ABI_TARGET/lib\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32r2\" \"$ABI_TARGET/libr2\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32r2\" \"$ABI_TARGET/libr2\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32r6\" \"$ABI_TARGET/libr6\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips64/lib32r6\" \"$ABI_TARGET/libr6\" \"libcrystax.so\"\n            ;;\n        mips)\n            copy_file_list \"$CRYSTAX_LIBS/mips\" \"$ABI_TARGET/lib\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips\" \"$ABI_TARGET/lib\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips/r2\" \"$ABI_TARGET/libr2\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips/r2\" \"$ABI_TARGET/libr2\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/mips/r6\" \"$ABI_TARGET/libr6\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/mips/r6\" \"$ABI_TARGET/libr6\" \"libcrystax.so\"\n            ;;\n        x86_64)\n            copy_file_list \"$CRYSTAX_LIBS/x86_64\" \"$ABI_TARGET/lib64\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/x86_64\" \"$ABI_TARGET/lib64\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/x86_64/32\" \"$ABI_TARGET/lib\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/x86_64/32\" \"$ABI_TARGET/lib\" \"libcrystax.so\"\n            #\n            copy_file_list \"$CRYSTAX_LIBS/x86_64/x32\" \"$ABI_TARGET/libx32\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/x86_64/x32\" \"$ABI_TARGET/libx32\" \"libcrystax.so\"\n            ;;\n        *)\n            copy_file_list \"$CRYSTAX_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"libcrystax.a\"\n            copy_file_list \"$CRYSTAX_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"libcrystax.so\"\n            ;;\n    esac\n}\n\necho \"ABIS=$ABIS\" \nfor ABI in $(tr ',' ' ' <<< $ABIS); do\n  copy_crystax_libs_for_abi \"$ABI\"\ndone\n\ndump \"Copying Objective C/C++ runtime (gnustep-libobjc2 headers and libraries)...\"\n\nLIBOBJC2_DIR=$NDK_DIR/$GNUSTEP_OBJC2_SUBDIR\nLIBOBJC2_LIBS=$LIBOBJC2_DIR/libs\n\n# $1: ABI\ncopy_libobjc2_libs_for_abi()\n{\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    local LABI\n    local LIB\n\n    for LIB in libobjc.so; do\n        case $ABI in\n            armeabi*)\n                copy_file_list \"$LIBOBJC2_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"$LIB\"\n                copy_file_list \"$LIBOBJC2_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"$LIB\"\n                #\n                copy_file_list \"$LIBOBJC2_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"$LIB\"\n                copy_file_list \"$LIBOBJC2_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"$LIB\"\n                ;;\n            mips64)\n                copy_file_list \"$LIBOBJC2_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            x86_64)\n                copy_file_list \"$LIBOBJC2_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            *)\n                copy_file_list \"$LIBOBJC2_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"$LIB\"\n        esac\n    done\n}\n\ncopy_directory \"$LIBOBJC2_DIR/include\" \"$TMPDIR/sysroot/usr/include\"\nfor ABI in $(tr ',' ' ' <<< $ABIS); do\n    copy_libobjc2_libs_for_abi \"$ABI\"\ndone\n\n\ndump \"Copying libpng headers and libraries...\"\n\nLIBPNG_DIR=$NDK_DIR/$LIBPNG_SUBDIR/$(echo $LIBPNG_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\nLIBPNG_LIBS=$LIBPNG_DIR/libs\n\n# $1: ABI\ncopy_libpng_libs_for_abi()\n{\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    local LABI\n    local LIB\n\n    for LIB in libpng.a libpng.so; do\n        case $ABI in\n            armeabi*)\n                copy_file_list \"$LIBPNG_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"$LIB\"\n                copy_file_list \"$LIBPNG_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"$LIB\"\n                #\n                copy_file_list \"$LIBPNG_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"$LIB\"\n                copy_file_list \"$LIBPNG_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"$LIB\"\n                ;;\n            mips64)\n                copy_file_list \"$LIBPNG_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            x86_64)\n                copy_file_list \"$LIBPNG_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            *)\n                copy_file_list \"$LIBPNG_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"$LIB\"\n        esac\n    done\n}\n\ncopy_directory \"$LIBPNG_DIR/include\" \"$TMPDIR/sysroot/usr/include\"\nfor ABI in $(tr ',' ' ' <<< $ABIS); do\n    copy_libpng_libs_for_abi \"$ABI\"\ndone\n\ndump \"Copying libjpeg headers and libraries...\"\n\nLIBJPEG_DIR=$NDK_DIR/$LIBJPEG_SUBDIR/$(echo $LIBJPEG_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\nLIBJPEG_LIBS=$LIBJPEG_DIR/libs\n\n# $1: ABI\ncopy_libjpeg_libs_for_abi()\n{\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    local LABI\n    local LIB\n\n    for LIB in libjpeg.a libjpeg.so; do\n        case $ABI in\n            armeabi*)\n                copy_file_list \"$LIBJPEG_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"$LIB\"\n                copy_file_list \"$LIBJPEG_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"$LIB\"\n                #\n                copy_file_list \"$LIBJPEG_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"$LIB\"\n                copy_file_list \"$LIBJPEG_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"$LIB\"\n                ;;\n            mips64)\n                copy_file_list \"$LIBJPEG_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            x86_64)\n                copy_file_list \"$LIBJPEG_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            *)\n                copy_file_list \"$LIBJPEG_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"$LIB\"\n        esac\n    done\n}\n\ncopy_directory \"$LIBJPEG_DIR/include\" \"$TMPDIR/sysroot/usr/include\"\nfor ABI in $(tr ',' ' ' <<< $ABIS); do\n    copy_libjpeg_libs_for_abi \"$ABI\"\ndone\n\ndump \"Copying libtiff headers and libraries...\"\n\nLIBTIFF_DIR=$NDK_DIR/$LIBTIFF_SUBDIR/$(echo $LIBTIFF_VERSIONS | tr ' ' '\\n' | grep -v '^$' | tail -n 1)\nLIBTIFF_LIBS=$LIBTIFF_DIR/libs\n\n# $1: ABI\ncopy_libtiff_libs_for_abi()\n{\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    local LABI\n    local LIB\n\n    for LIB in libtiff.a libtiff.so libtiffxx.a libtiffxx.so; do\n        case $ABI in\n            armeabi*)\n                copy_file_list \"$LIBTIFF_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a\" \"$LIB\"\n                copy_file_list \"$LIBTIFF_LIBS/armeabi-v7a\" \"$ABI_TARGET/lib/armv7-a/thumb\" \"$LIB\"\n                #\n                copy_file_list \"$LIBTIFF_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/hard\" \"$LIB\"\n                copy_file_list \"$LIBTIFF_LIBS/armeabi-v7a-hard\" \"$ABI_TARGET/lib/armv7-a/thumb/hard\" \"$LIB\"\n                ;;\n            mips64)\n                copy_file_list \"$LIBTIFF_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            x86_64)\n                copy_file_list \"$LIBTIFF_LIBS/$ABI\" \"$ABI_TARGET/lib64\" \"$LIB\"\n                ;;\n            *)\n                copy_file_list \"$LIBTIFF_LIBS/$ABI\" \"$ABI_TARGET/lib\" \"$LIB\"\n        esac\n    done\n}\n\ncopy_directory \"$LIBTIFF_DIR/include\" \"$TMPDIR/sysroot/usr/include\"\nfor ABI in $(tr ',' ' ' <<< $ABIS); do\n    copy_libtiff_libs_for_abi \"$ABI\"\ndone\n\nGNUSTL_DIR=$NDK_DIR/$GNUSTL_SUBDIR/$GCC_VERSION\nGNUSTL_LIBS=$GNUSTL_DIR/libs\n\nLIBCXX_DIR=$NDK_DIR/$LIBCXX_SUBDIR\nLIBCXX_LIBS=$LIBCXX_DIR/$LLVM_VERSION/libs\n\nSUPPORT_DIR=$NDK_DIR/$SUPPORT_SUBDIR\n\nCOMPILER_RT_DIR=$NDK_DIR/$COMPILER_RT_SUBDIR\nCOMPILER_RT_LIBS=$COMPILER_RT_DIR/libs\n\ndump \"Copying c++ runtime headers and libraries...\"\n\nABI_STL=\"$TMPDIR/$ABI_CONFIGURE_TARGET\"\nABI_STL_INCLUDE=\"$TMPDIR/include/c++/$GCC_BASE_VERSION\"\nABI_STL_INCLUDE_TARGET=\"$ABI_STL_INCLUDE/$ABI_CONFIGURE_TARGET\"\n\n# $1: filenames of headers\ncopy_abi_headers () {\n  local ABI_NAME=$1\n  shift\n\n  for header in $@; do\n    (set -e; cd $ABI_STL_INCLUDE && cp -a ../../$ABI_NAME/include/$header $header) || exit 1\n  done\n}\n\n# Copy common STL headers (i.e. the non-arch-specific ones)\ncopy_stl_common_headers () {\n    case $STL in\n        gnustl)\n            copy_directory \"$GNUSTL_DIR/include\" \"$ABI_STL_INCLUDE\"\n            ;;\n        libcxx|libc++)\n            copy_directory \"$LIBCXX_DIR/$LLVM_VERSION/libcxx/include\" \"$ABI_STL_INCLUDE\"\n            #copy_directory \"$SUPPORT_DIR/include\" \"$ABI_STL_INCLUDE\"\n            copy_directory \"$LIBCXX_DIR/../llvm-libc++abi/libcxxabi/include\" \"$ABI_STL_INCLUDE/../../llvm-libc++abi/include\"\n            copy_abi_headers llvm-libc++abi cxxabi.h libunwind.h unwind.h\n            ;;\n    esac\n}\n\n# $1: Source ABI (e.g. 'armeabi')\n# #2  Optional destination path of additional header to copy (eg. include/bits), default to empty\n# $3: Optional source path of additional additional header to copy, default to empty\n# $4: Optional destination directory, default to empty (e.g. \"\", \"thumb\", \"armv7-a/thumb\")\n# $5: Optional source directory, default to empty (e.g. \"\", \"thumb\", \"armv7-a/thumb\")\ncopy_stl_libs () {\n    local ABI=$1\n    local HEADER_DST=$2\n    local HEADER_SRC=$3\n    local DEST_DIR=$4\n    local SRC_DIR=$5\n    local ABI_SRC_DIR=$ABI\n\n    if [ -n \"$SRC_DIR\" ]; then\n        ABI_SRC_DIR=$ABI/$SRC_DIR\n    else\n        if [ \"$DEST_DIR\" != \"${DEST_DIR%%/*}\" ] ; then\n            ABI_SRC_DIR=$ABI/`basename $DEST_DIR`\n        fi\n    fi\n\n    case $STL in\n        gnustl)\n            if [ \"$HEADER_SRC\" != \"\" ]; then\n                copy_directory \"$GNUSTL_LIBS/$ABI/include/$HEADER_SRC\" \"$ABI_STL_INCLUDE_TARGET/$HEADER_DST\"\n            fi\n            copy_file_list \"$GNUSTL_LIBS/$ABI_SRC_DIR\" \"$ABI_STL/lib/$DEST_DIR\" \"libgnustl_shared.so\"\n            copy_file_list \"$GNUSTL_LIBS/$ABI_SRC_DIR\" \"$ABI_STL/lib/$DEST_DIR\" \"libsupc++.a\"\n            cp -p \"$GNUSTL_LIBS/$ABI_SRC_DIR/libgnustl_static.a\" \"$ABI_STL/lib/$DEST_DIR/libstdc++.a\"\n            ;;\n        libcxx|libc++)\n            copy_file_list \"$LIBCXX_LIBS/$ABI_SRC_DIR\" \"$ABI_STL/lib/$DEST_DIR\" \"libc++_shared.so\"\n            cp -p \"$LIBCXX_LIBS/$ABI_SRC_DIR/libc++_static.a\" \"$ABI_STL/lib/$DEST_DIR/libstdc++.a\"\n            ;;\n        *)\n            dump \"ERROR: Unsupported STL: $STL\"\n            exit 1\n            ;;\n    esac\n}\n\n# $1: Source ABI (e.g. 'armeabi')\ncopy_stl_libs_for_abi () {\n    local ABI=$1\n\n    if [ \"$(convert_abi_to_arch \"$ABI\")\" != \"$ARCH\" ]; then\n        dump \"ERROR: ABI '$ABI' does not match ARCH '$ARCH'\"\n        exit 1\n    fi\n\n    case $ABI in\n        armeabi-v7a)\n            copy_stl_libs armeabi-v7a       \"armv7-a/bits\"        \"bits\"       \"armv7-a\"\n            copy_stl_libs armeabi-v7a       \"armv7-a/thumb/bits\"  \"bits\"       \"armv7-a/thumb\"\n            ;;\n        armeabi-v7a-hard)\n            if [ \"$STL\" = \"gnustl\" ]; then\n                copy_stl_libs armeabi-v7a-hard \"armv7-a/hard/bits\"        \"bits\"  \"armv7-a/hard\"        \".\"\n                copy_stl_libs armeabi-v7a-hard \"armv7-a/thumb/hard/bits\"  \"bits\"  \"armv7-a/thumb/hard\"  \"thumb\"\n            else\n                copy_stl_libs armeabi-v7a-hard \"\"                         \"\"      \"armv7-a/hard\"        \".\"\n                copy_stl_libs armeabi-v7a-hard \"\"                         \"\"      \"armv7-a/thumb/hard\"  \"thumb\"\n            fi\n            ;;\n        x86_64)\n            if [ \"$STL\" = \"gnustl\" ]; then\n                copy_stl_libs x86_64       \"32/bits\"             \"32/bits\"    \"\"                   \"lib\"\n                copy_stl_libs x86_64       \"bits\"                \"bits\"       \"../lib64\"           \"lib64\"\n                copy_stl_libs x86_64       \"x32/bits\"            \"x32/bits\"   \"../libx32\"          \"libx32\"\n            else\n                copy_stl_libs x86_64       \"\"                    \"\"           \"../lib64\"           \".\"\n            fi\n            ;;\n        mips64)\n            if [ \"$STL\" = \"gnustl\" ]; then\n                copy_stl_libs mips64       \"32/mips-r1/bits\"     \"32/mips-r1/bits\"  \"\"             \"lib\"\n                copy_stl_libs mips64       \"32/mips-r2/bits\"     \"32/mips-r2/bits\"  \"../libr2\"     \"libr2\"\n                copy_stl_libs mips64       \"32/mips-r6/bits\"     \"32/mips-r6/bits\"  \"../libr6\"     \"libr6\"\n                copy_stl_libs mips64       \"bits\"                \"bits\"             \"../lib64\"     \"lib64\"\n                copy_stl_libs mips64       \"mips64-r2/bits\"      \"mips64-r2/bits\"   \"../lib64r2\"   \"lib64r2\"\n            else\n                copy_stl_libs mips64       \"\"                    \"\"                 \"../lib64\"     \".\"\n            fi\n            ;;\n        mips|mips32r6)\n            if [ \"$STL\" = \"gnustl\" ]; then\n                copy_stl_libs mips         \"bits\"                \"bits\"             \"../lib\"       \"lib\"\n                copy_stl_libs mips         \"mips-r2/bits\"        \"mips-r2/bits\"     \"../libr2\"     \"libr2\"\n                copy_stl_libs mips         \"mips-r6/bits\"        \"mips-r6/bits\"     \"../libr6\"     \"libr6\"\n            else\n                copy_stl_libs mips         \"bits\"                \"bits\"\n            fi\n            ;;\n        *)\n            copy_stl_libs \"$ABI\"           \"bits\"                \"bits\"\n            ;;\n    esac\n}\n\nmkdir -p \"$ABI_STL_INCLUDE_TARGET\"\nfail_panic \"Can't create directory: $ABI_STL_INCLUDE_TARGET\"\ncopy_stl_common_headers\nfor ABI in $(echo \"$ABIS\" | tr ',' ' '); do\n  copy_stl_libs_for_abi \"$ABI\"\ndone\n\n# Install or Package\nif [ -n \"$INSTALL_DIR\" ] ; then\n    dump \"Copying files to: $INSTALL_DIR\"\n    if [ ! -d \"$INSTALL_DIR\" ]; then\n        move_directory \"$TMPDIR\" \"$INSTALL_DIR\"\n    else\n        copy_directory \"$TMPDIR\" \"$INSTALL_DIR\"\n    fi\nelse\n    PACKAGE_FILE=\"$PACKAGE_DIR/$TOOLCHAIN_NAME.tar.xz\"\n    dump \"Creating package file: $PACKAGE_FILE\"\n    pack_archive \"$PACKAGE_FILE\" \"`dirname $TMPDIR`\" \"$TOOLCHAIN_NAME\"\n    fail_panic \"Could not create tarball from $TMPDIR\"\nfi\ndump \"Cleaning up...\"\nrm -rf $TMPDIR\n\ndump \"Done.\"\n"
  },
  {
    "path": "build/tools/ndk-ccache-g++.sh",
    "content": "#!/bin/bash\n$NDK_CCACHE $NDK_CCACHE_CXX \"$@\"\n"
  },
  {
    "path": "build/tools/ndk-ccache-gcc.sh",
    "content": "#!/bin/bash\n$NDK_CCACHE $NDK_CCACHE_CC \"$@\"\n"
  },
  {
    "path": "build/tools/ndk-common.sh",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# A collection of shell function definitions used by various build scripts\n# in the Android NDK (Native Development Kit)\n#\n\n# Get current script name into PROGNAME\nPROGNAME=`basename $0`\n\nif [ -z \"$TMPDIR\" ]; then\n    export TMPDIR=/tmp/ndk-$USER\nfi\n\nOS=`uname -s`\nif [ \"$OS\" == \"Darwin\" -a -z \"$MACOSX_DEPLOYMENT_TARGET\" ]; then\n    export MACOSX_DEPLOYMENT_TARGET=\"10.8\"\nfi\n\n# Find the Android NDK root, assuming we are invoked from a script\n# within its directory structure.\n#\n# $1: Variable name that will receive the path\n# $2: Path of invoking script\nfind_ndk_root ()\n{\n    # Try to auto-detect the NDK root by walking up the directory\n    # path to the current script.\n    local PROGDIR=\"`dirname \\\"$2\\\"`\"\n    while [ -n \"1\" ] ; do\n        if [ -d \"$PROGDIR/build/core\" ] ; then\n            break\n        fi\n        if [ -z \"$PROGDIR\" -o \"$PROGDIR\" = '/' ] ; then\n            return 1\n        fi\n        PROGDIR=\"`cd \\\"$PROGDIR/..\\\" && pwd`\"\n    done\n    eval $1=\"$PROGDIR\"\n}\n\n# Put location of Android NDK into ANDROID_NDK_ROOT and\n# perform a tiny amount of sanity check\n#\nif [ -z \"$ANDROID_NDK_ROOT\" ] ; then\n    find_ndk_root ANDROID_NDK_ROOT \"$0\"\n    if [ $? != 0 ]; then\n        echo \"Please define ANDROID_NDK_ROOT to point to the root of your\"\n        echo \"Android NDK installation.\"\n        exit 1\n    fi\nfi\n\necho \"$ANDROID_NDK_ROOT\" | grep -q -e \" \"\nif [ $? = 0 ] ; then\n    echo \"ERROR: The Android NDK installation path contains a space !\"\n    echo \"Please install to a different location.\"\n    exit 1\nfi\n\nif [ ! -d $ANDROID_NDK_ROOT ] ; then\n    echo \"ERROR: Your ANDROID_NDK_ROOT variable does not point to a directory.\"\n    echo \"ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT\"\n    exit 1\nfi\n\nif [ ! -f $ANDROID_NDK_ROOT/build/tools/ndk-common.sh ] ; then\n    echo \"ERROR: Your ANDROID_NDK_ROOT does not contain a valid NDK build system.\"\n    echo \"ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT\"\n    exit 1\nfi\n\n## Use DRYRUN to find out top-level commands.\nDRYRUN=${DRYRUN-no}\n\n## Logging support\n##\nVERBOSE=${VERBOSE-yes}\n\n\n# If NDK_LOGFILE is defined in the environment, use this as the log file\nTMPLOG=\nif [ -n \"$NDK_LOGFILE\" ] ; then\n    mkdir -p `dirname \"$NDK_LOGFILE\"` && touch \"$NDK_LOGFILE\"\n    TMPLOG=\"$NDK_LOGFILE\"\nfi\n\n# Setup a log file where all log() output will be sent\n#\n# $1: log file path  (optional)\n#\nsetup_default_log_file ()\n{\n    if [ -n \"$NDK_LOGFILE\" ] ; then\n        return\n    fi\n    if [ -n \"$1\" ] ; then\n        NDK_LOGFILE=\"$1\"\n    else\n        NDK_LOGFILE=$TMPDIR/ndk-log-$$.txt\n    fi\n    export NDK_LOGFILE\n    TMPLOG=\"$NDK_LOGFILE\"\n    rm -rf \"$TMPLOG\" && mkdir -p `dirname \"$TMPLOG\"` && touch \"$TMPLOG\"\n    echo \"To follow build in another terminal, please use: tail -F $TMPLOG\"\n}\n\ndump ()\n{\n    if [ -n \"$TMPLOG\" ] ; then\n        echo \"$@\" >> $TMPLOG\n    fi\n    echo \"$@\"\n}\n\ndump_n ()\n{\n    if [ -n \"$TMPLOG\" ] ; then\n        printf %s \"$@\" >> $TMPLOG\n    fi\n    printf %s \"$@\"\n}\n\nlog ()\n{\n    if [ \"$VERBOSE\" = \"yes\" ] ; then\n        echo \"$@\"\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            echo \"$@\" >> $TMPLOG\n        fi\n    fi\n}\n\nlog_n ()\n{\n    if [ \"$VERBOSE\" = \"yes\" ] ; then\n        printf %s \"$@\"\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            printf %s \"$@\" >> $TMPLOG\n        fi\n    fi\n}\n\nrun ()\n{\n    if [ \"$DRYRUN\" = \"yes\" ] ; then\n        echo \"## SKIP COMMAND: $@\"\n    elif [ \"$VERBOSE\" = \"yes\" ] ; then\n        echo \"## COMMAND: $@\"\n        \"$@\" 2>&1\n    else\n        if [ -n \"$TMPLOG\" ] ; then\n            echo \"## COMMAND: $@\" >> $TMPLOG\n            \"$@\" >>$TMPLOG 2>&1\n        else\n            \"$@\" > /dev/null 2>&1\n        fi\n    fi\n}\n\npanic ()\n{\n    dump \"ERROR: $@\"\n    exit 1\n}\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        dump \"ERROR: $@\"\n        exit 1\n    fi\n}\n\nfail_warning ()\n{\n    if [ $? != 0 ] ; then\n        dump \"WARNING: $@\"\n    fi\n}\n\n\n## Utilities\n##\n\n# Return the value of a given named variable\n# $1: variable name\n#\n# example:\n#    FOO=BAR\n#    BAR=ZOO\n#    echo `var_value $FOO`\n#    will print 'ZOO'\n#\nvar_value ()\n{\n    # find a better way to do that ?\n    eval echo \"$`echo $1`\"\n}\n\n# convert to uppercase\n# assumes tr is installed on the platform ?\n#\nto_uppercase ()\n{\n    echo $1 | tr \"[:lower:]\" \"[:upper:]\"\n}\n\n## First, we need to detect the HOST CPU, because proper HOST_ARCH detection\n## requires platform-specific tricks.\n##\nHOST_EXE=\"\"\nHOST_OS=`uname -s`\ncase \"$HOST_OS\" in\n    Darwin)\n        HOST_OS=darwin\n        ;;\n    Linux)\n        # note that building  32-bit binaries on x86_64 is handled later\n        HOST_OS=linux\n        ;;\n    FreeBsd)  # note: this is not tested\n        HOST_OS=freebsd\n        ;;\n    CYGWIN*|*_NT-*)\n        HOST_OS=windows\n        HOST_EXE=.exe\n        if [ \"x$OSTYPE\" = xcygwin ] ; then\n            HOST_OS=cygwin\n        fi\n        ;;\nesac\n\nlog \"HOST_OS=$HOST_OS\"\nlog \"HOST_EXE=$HOST_EXE\"\n\n## Now find the host architecture. This must correspond to the bitness of\n## the binaries we're going to run with this NDK. Certain platforms allow\n## you to use a 64-bit kernel with a 32-bit userland, and unfortunately\n## commands like 'uname -m' only report the kernel bitness.\n##\nHOST_ARCH=`uname -m`\ncase \"$HOST_ARCH\" in\n    i?86) HOST_ARCH=x86\n    # \"uname -m\" reports i386 on Snow Leopard even though its architecture is\n    # 64-bit. In order to use it to build 64-bit toolchains we need to fix the\n    # reporting anomoly here.\n    if [ \"$HOST_OS\" = darwin ] ; then\n        if ! echo __LP64__ | (CCOPTS= gcc -E - 2>/dev/null) | grep -q __LP64__ ; then\n        # or if gcc -dM -E - < /dev/null | grep -q __LP64__; then\n            HOST_ARCH=x86_64\n        fi\n    fi\n    ;;\n    amd64) HOST_ARCH=x86_64\n    ;;\n    powerpc) HOST_ARCH=ppc\n    ;;\nesac\n\nHOST_FILE_PROGRAM=\"file\"\ncase \"$HOST_OS-$HOST_ARCH\" in\n  linux-x86_64|darwin-x86_64)\n    ## On Linux or Darwin, a 64-bit kernel doesn't mean that the user-land\n    ## is always 32-bit, so use \"file\" to determine the bitness of the shell\n    ## that invoked us. The -L option is used to de-reference symlinks.\n    ##\n    ## Note that on Darwin, a single executable can contain both x86 and\n    ## x86_64 machine code, so just look for x86_64 (darwin) or x86-64 (Linux)\n    ## in the output.\n    ##\n    ## Also note that some versions of 'file' in MacPort may report erroneous\n    ## result.  See http://b.android.com/53769.  Use /usr/bin/file if exists.\n    if [ \"$HOST_OS\" = \"darwin\" ]; then\n        SYSTEM_FILE_PROGRAM=\"/usr/bin/file\"\n        test -x \"$SYSTEM_FILE_PROGRAM\" && HOST_FILE_PROGRAM=\"$SYSTEM_FILE_PROGRAM\"\n    fi\n    \"$HOST_FILE_PROGRAM\" -L \"$SHELL\" | grep -q \"x86[_-]64\"\n    if [ $? != 0 ]; then\n      # $SHELL is not a 64-bit executable, so assume our userland is too.\n      log \"Detected 32-bit userland on 64-bit kernel system!\"\n      HOST_ARCH=x86\n    fi\n    ;;\nesac\n\nlog \"HOST_ARCH=$HOST_ARCH\"\n\n# at this point, the supported values for HOST_ARCH are:\n#   x86\n#   x86_64\n#   ppc\n#\n# other values may be possible but haven't been tested\n#\n# at this point, the value of HOST_OS should be one of the following:\n#   linux\n#   darwin\n#    windows (MSys)\n#    cygwin\n#\n# Note that cygwin is treated as a special case because it behaves very differently\n# for a few things. Other values may be possible but have not been tested\n#\n\n# define HOST_TAG as a unique tag used to identify both the host OS and CPU\n# supported values are:\n#\n#   linux-x86\n#   linux-x86_64\n#   darwin-x86\n#   darwin-x86_64\n#   darwin-ppc\n#   windows\n#   windows-x86_64\n#\n# other values are possible but were not tested.\n#\ncompute_host_tag ()\n{\n    HOST_TAG=${HOST_OS}-${HOST_ARCH}\n    # Special case for windows-x86 => windows\n    case $HOST_TAG in\n        windows-x86|cygwin-x86)\n            HOST_TAG=\"windows\"\n            ;;\n    esac\n    log \"HOST_TAG=$HOST_TAG\"\n}\n\ncompute_host_tag\n\n# Compute the number of host CPU cores an HOST_NUM_CPUS\n#\ncase \"$HOST_OS\" in\n    linux)\n        HOST_NUM_CPUS=`cat /proc/cpuinfo | grep processor | wc -l`\n        ;;\n    darwin|freebsd)\n        HOST_NUM_CPUS=`sysctl -n hw.ncpu`\n        ;;\n    windows|cygwin)\n        HOST_NUM_CPUS=$NUMBER_OF_PROCESSORS\n        ;;\n    *)  # let's play safe here\n        HOST_NUM_CPUS=1\nesac\n\nlog \"HOST_NUM_CPUS=$HOST_NUM_CPUS\"\n\n# If BUILD_NUM_CPUS is not already defined in your environment,\n# define it as the double of HOST_NUM_CPUS. This is used to\n# run Make commands in parralles, as in 'make -j$BUILD_NUM_CPUS'\n#\nif [ -z \"$BUILD_NUM_CPUS\" ] ; then\n    BUILD_NUM_CPUS=`expr $HOST_NUM_CPUS \\* 2`\nfi\n\nlog \"BUILD_NUM_CPUS=$BUILD_NUM_CPUS\"\n\n\n##  HOST TOOLCHAIN SUPPORT\n##\n\n# force the generation of 32-bit binaries on 64-bit systems\n#\nFORCE_32BIT=no\nforce_32bit_binaries ()\n{\n    if [ \"$HOST_ARCH\" = x86_64 ] ; then\n        log \"Forcing generation of 32-bit host binaries on $HOST_ARCH\"\n        FORCE_32BIT=yes\n        HOST_ARCH=x86\n        log \"HOST_ARCH=$HOST_ARCH\"\n        compute_host_tag\n    fi\n}\n\n# On Windows, cygwin binaries will be generated by default, but\n# you can force mingw ones that do not link to cygwin.dll if you\n# call this function.\n#\ndisable_cygwin ()\n{\n    if [ $HOST_OS = cygwin ] ; then\n        log \"Disabling cygwin binaries generation\"\n        CFLAGS=\"$CFLAGS -mno-cygwin\"\n        LDFLAGS=\"$LDFLAGS -mno-cygwin\"\n        HOST_OS=windows\n        compute_host_tag\n    fi\n}\n\n# Various probes are going to need to run a small C program\nmkdir -p $TMPDIR/tmp/tests\n\nTMPC=$TMPDIR/tmp/tests/test-$$.c\nTMPO=$TMPDIR/tmp/tests/test-$$.o\nTMPE=$TMPDIR/tmp/tests/test-$$$EXE\nTMPL=$TMPDIR/tmp/tests/test-$$.log\n\n# cleanup temporary files\nclean_temp ()\n{\n    rm -f $TMPC $TMPO $TMPL $TMPE\n}\n\n# cleanup temp files then exit with an error\nclean_exit ()\n{\n    clean_temp\n    exit 1\n}\n\n# this function will setup the compiler and linker and check that they work as advertised\n# note that you should call 'force_32bit_binaries' before this one if you want it to\n# generate 32-bit binaries on 64-bit systems (that support it).\n#\nsetup_toolchain ()\n{\n    if [ -z \"$CC\" ] ; then\n        CC=gcc\n    fi\n    if [ -z \"$CXX\" ] ; then\n        CXX=g++\n    fi\n    if [ -z \"$CXXFLAGS\" ] ; then\n        CXXFLAGS=\"$CFLAGS\"\n    fi\n    if [ -z \"$LD\" ] ; then\n        LD=\"$CC\"\n    fi\n\n    log \"Using '$CC' as the C compiler\"\n\n    # check that we can compile a trivial C program with this compiler\n    mkdir -p $(dirname \"$TMPC\")\n    cat > $TMPC <<EOF\nint main(void) {}\nEOF\n\n    if [ \"$FORCE_32BIT\" = yes ] ; then\n        CC=\"$CC -m32\"\n        CXX=\"$CXX -m32\"\n        LD=\"$LD -m32\"\n        compile\n        if [ $? != 0 ] ; then\n            # sometimes, we need to also tell the assembler to generate 32-bit binaries\n            # this is highly dependent on your GCC installation (and no, we can't set\n            # this flag all the time)\n            CFLAGS=\"$CFLAGS -Wa,--32\"\n            compile\n        fi\n    fi\n\n    compile\n    if [ $? != 0 ] ; then\n        echo \"your C compiler doesn't seem to work:\"\n        cat $TMPL\n        clean_exit\n    fi\n    log \"CC         : compiler check ok ($CC)\"\n\n    # check that we can link the trivial program into an executable\n    link\n    if [ $? != 0 ] ; then\n        OLD_LD=\"$LD\"\n        LD=\"$CC\"\n        compile\n        link\n        if [ $? != 0 ] ; then\n            LD=\"$OLD_LD\"\n            echo \"your linker doesn't seem to work:\"\n            cat $TMPL\n            clean_exit\n        fi\n    fi\n    log \"Using '$LD' as the linker\"\n    log \"LD         : linker check ok ($LD)\"\n\n    # check the C++ compiler\n    log \"Using '$CXX' as the C++ compiler\"\n\n    cat > $TMPC <<EOF\n#include <iostream>\nusing namespace std;\nint main()\n{\n  cout << \"Hello World!\" << endl;\n  return 0;\n}\nEOF\n\n    compile_cpp\n    if [ $? != 0 ] ; then\n        echo \"your C++ compiler doesn't seem to work\"\n        cat $TMPL\n        clean_exit\n    fi\n\n    log \"CXX        : C++ compiler check ok ($CXX)\"\n\n    # XXX: TODO perform AR checks\n    AR=ar\n    ARFLAGS=\n}\n\n# try to compile the current source file in $TMPC into an object\n# stores the error log into $TMPL\n#\ncompile ()\n{\n    log \"Object     : $CC -o $TMPO -c $CFLAGS $TMPC\"\n    $CC -o $TMPO -c $CFLAGS $TMPC 2> $TMPL\n}\n\ncompile_cpp ()\n{\n    log \"Object     : $CXX -o $TMPO -c $CXXFLAGS $TMPC\"\n    $CXX -o $TMPO -c $CXXFLAGS $TMPC 2> $TMPL\n}\n\n# try to link the recently built file into an executable. error log in $TMPL\n#\nlink()\n{\n    log \"Link      : $LD -o $TMPE $TMPO $LDFLAGS\"\n    $LD -o $TMPE $TMPO $LDFLAGS 2> $TMPL\n}\n\n# run a command\n#\nexecute()\n{\n    log \"Running: $*\"\n    $*\n}\n\n# perform a simple compile / link / run of the source file in $TMPC\ncompile_exec_run()\n{\n    log \"RunExec    : $CC -o $TMPE $CFLAGS $TMPC\"\n    compile\n    if [ $? != 0 ] ; then\n        echo \"Failure to compile test program\"\n        cat $TMPC\n        cat $TMPL\n        clean_exit\n    fi\n    link\n    if [ $? != 0 ] ; then\n        echo \"Failure to link test program\"\n        cat $TMPC\n        echo \"------\"\n        cat $TMPL\n        clean_exit\n    fi\n    $TMPE\n}\n\npattern_match ()\n{\n    echo \"$2\" | grep -q -E -e \"$1\"\n}\n\n# Let's check that we have a working md5sum here\ncheck_md5sum ()\n{\n    A_MD5=`echo \"A\" | md5sum | cut -d' ' -f1`\n    if [ \"$A_MD5\" != \"bf072e9119077b4e76437a93986787ef\" ] ; then\n        echo \"Please install md5sum on this machine\"\n        exit 2\n    fi\n}\n\n# Find if a given shell program is available.\n# We need to take care of the fact that the 'which <foo>' command\n# may return either an empty string (Linux) or something like\n# \"no <foo> in ...\" (Darwin). Also, we need to redirect stderr\n# to /dev/null for Cygwin\n#\n# $1: variable name\n# $2: program name\n#\n# Result: set $1 to the full path of the corresponding command\n#         or to the empty/undefined string if not available\n#\nfind_program ()\n{\n    local PROG RET\n    PROG=`which $2 2>/dev/null`\n    RET=$?\n    if [ $RET != 0 ]; then\n        PROG=\n    fi\n    eval $1=\\\"$PROG\\\"\n    return $RET\n}\n\nprepare_download ()\n{\n    find_program CMD_WGET wget\n    find_program CMD_CURL curl\n    find_program CMD_SCRP scp\n}\n\nfind_pbzip2 ()\n{\n    if [ -z \"$_PBZIP2_initialized\" ] ; then\n        find_program PBZIP2 pbzip2\n        _PBZIP2_initialized=\"yes\"\n    fi\n}\n\n# Download a file with either 'curl', 'wget' or 'scp'\n#\n# $1: source URL (e.g. http://foo.com, ssh://blah, /some/path)\n# $2: target file\ndownload_file ()\n{\n    # Is this HTTP, HTTPS or FTP ?\n    if pattern_match \"^(http|https|ftp):.*\" \"$1\"; then\n        if [ -n \"$CMD_WGET\" ] ; then\n            run $CMD_WGET -O $2 $1\n        elif [ -n \"$CMD_CURL\" ] ; then\n            run $CMD_CURL -o $2 $1\n        else\n            echo \"Please install wget or curl on this machine\"\n            exit 1\n        fi\n        return\n    fi\n\n    # Is this SSH ?\n    # Accept both ssh://<path> or <machine>:<path>\n    #\n    if pattern_match \"^(ssh|[^:]+):.*\" \"$1\"; then\n        if [ -n \"$CMD_SCP\" ] ; then\n            scp_src=`echo $1 | sed -e s%ssh://%%g`\n            run $CMD_SCP $scp_src $2\n        else\n            echo \"Please install scp on this machine\"\n            exit 1\n        fi\n        return\n    fi\n\n    # Is this a file copy ?\n    # Accept both file://<path> or /<path>\n    #\n    if pattern_match \"^(file://|/).*\" \"$1\"; then\n        cp_src=`echo $1 | sed -e s%^file://%%g`\n        run cp -f $cp_src $2\n        return\n    fi\n}\n\n# Form the relative path between from one abs path to another\n#\n# $1 : start path\n# $2 : end path\n#\n# From:\n# http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current-directory\nrelpath ()\n{\n    [ $# -ge 1 ] && [ $# -le 2 ] || return 1\n    current=\"${2:+\"$1\"}\"\n    target=\"${2:-\"$1\"}\"\n    [ \"$target\" != . ] || target=/\n    target=\"/${target##/}\"\n    [ \"$current\" != . ] || current=/\n    current=\"${current:=\"/\"}\"\n    current=\"/${current##/}\"\n    appendix=\"${target##/}\"\n    relative=''\n    while appendix=\"${target#\"$current\"/}\"\n        [ \"$current\" != '/' ] && [ \"$appendix\" = \"$target\" ]; do\n        if [ \"$current\" = \"$appendix\" ]; then\n            relative=\"${relative:-.}\"\n            echo \"${relative#/}\"\n            return 0\n        fi\n        current=\"${current%/*}\"\n        relative=\"$relative${relative:+/}..\"\n    done\n    relative=\"$relative${relative:+${appendix:+/}}${appendix#/}\"\n    echo \"$relative\"\n}\n\n# Pack a given archive\n#\n# $1: archive file path (including extension)\n# $2: source directory for archive content\n# $3+: list of files (including patterns), all if empty\npack_archive ()\n{\n    local ARCHIVE=\"$1\"\n    local SRCDIR=\"$2\"\n    local SRCFILES\n    local TARFLAGS ZIPFLAGS\n    shift; shift;\n    if [ -z \"$1\" ] ; then\n        SRCFILES=\"*\"\n    else\n        SRCFILES=\"$@\"\n    fi\n    if [ \"`basename $ARCHIVE`\" = \"$ARCHIVE\" ] ; then\n        ARCHIVE=\"`pwd`/$ARCHIVE\"\n    fi\n    mkdir -p `dirname $ARCHIVE`\n\n    TARFLAGS=\"--exclude='*.py[cod]' --exclude='*.swp' --exclude=.git --exclude=.gitignore -cf\"\n    ZIPFLAGS=\"-x *.git* -x *.pyc -x *.pyo -9qr\"\n    # Ensure symlinks are stored as is in zip files. for toolchains\n    # this can save up to 7 MB in the size of the final archive\n    #ZIPFLAGS=\"$ZIPFLAGS --symlinks\"\n    case \"$ARCHIVE\" in\n        *.zip)\n            rm -f $ARCHIVE\n            (cd $SRCDIR && run zip $ZIPFLAGS \"$ARCHIVE\" $SRCFILES)\n            ;;\n        *.tar.bz2)\n            find_pbzip2\n            if [ -n \"$PBZIP2\" ] ; then\n                (cd $SRCDIR && run tar --use-compress-prog=pbzip2 $TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            else\n                (cd $SRCDIR && run tar -j $TARFLAGS \"$ARCHIVE\" $SRCFILES)\n            fi\n            ;;\n        *)\n            panic \"Unsupported archive format: $ARCHIVE\"\n            ;;\n    esac\n}\n\n# Copy a directory, create target location if needed\n#\n# $1: source directory\n# $2: target directory location\n#\ncopy_directory ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't copy from non-directory: $SRCDIR\"\n    fi\n    log \"Copying directory: \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && 2>/dev/null tar cf - *) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy to directory: $DSTDIR\"\n}\n\n# Move a directory, create target location if needed\n#\n# $1: source directory\n# $2: target directory location\n#\nmove_directory ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't move from non-directory: $SRCDIR\"\n    fi\n    log \"Move directory: \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (mv \"$SRCDIR\"/* \"$DSTDIR\")\n    fail_panic \"Cannot move to directory: $DSTDIR\"\n}\n\n# This is the same than copy_directory(), but symlinks will be replaced\n# by the file they actually point to instead.\ncopy_directory_nolinks ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Can't copy from non-directory: $SRCDIR\"\n    fi\n    log \"Copying directory (without symlinks): \"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && tar chf - *) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy to directory: $DSTDIR\"\n}\n\n# Copy certain files from one directory to another one\n# $1: source directory\n# $2: target directory\n# $3+: file list (including patterns)\ncopy_file_list ()\n{\n    local SRCDIR=\"$1\"\n    local DSTDIR=\"$2\"\n    shift; shift;\n    if [ ! -d \"$SRCDIR\" ] ; then\n        panic \"Cant' copy from non-directory: $SRCDIR\"\n    fi\n    log \"Copying file: $@\"\n    log \"  from $SRCDIR\"\n    log \"  to $DSTDIR\"\n    mkdir -p \"$DSTDIR\" && (cd \"$SRCDIR\" && (echo $@ | tr ' ' '\\n' | tar hcf - -T -)) | (tar xf - -C \"$DSTDIR\")\n    fail_panic \"Cannot copy files to directory: $DSTDIR\"\n}\n\n# Rotate a log file\n# If the given log file exist, add a -1 to the end of the file.\n# If older log files exist, rename them to -<n+1>\n# $1: log file\n# $2: maximum version to retain [optional]\nrotate_log ()\n{\n    # Default Maximum versions to retain\n    local MAXVER=\"5\"\n    local LOGFILE=\"$1\"\n    shift;\n    if [ ! -z \"$1\" ] ; then\n        local tmpmax=\"$1\"\n        shift;\n        tmpmax=`expr $tmpmax + 0`\n        if [ $tmpmax -lt 1 ] ; then\n            panic \"Invalid maximum log file versions '$tmpmax' invalid; defaulting to $MAXVER\"\n        else\n            MAXVER=$tmpmax;\n        fi\n    fi\n\n    # Do Nothing if the log file does not exist\n    if [ ! -f \"${LOGFILE}\" ] ; then\n        return\n    fi\n\n    # Rename existing older versions\n    ver=$MAXVER\n    while [ $ver -ge 1 ]\n    do\n        local prev=$(( $ver - 1 ))\n        local old=\"-$prev\"\n\n        # Instead of old version 0; use the original filename\n        if [ $ver -eq 1 ] ; then\n            old=\"\"\n        fi\n\n        if [ -f \"${LOGFILE}${old}\" ] ; then\n            mv -f \"${LOGFILE}${old}\" \"${LOGFILE}-${ver}\"\n        fi\n\n        ver=$prev\n    done\n}\n\n# Dereference symlink\n# $1+: directories\ndereference_symlink ()\n{\n    local DIRECTORY SYMLINKS DIR FILE LINK\n    for DIRECTORY in \"$@\"; do\n        if [ -d \"$DIRECTORY\" ]; then\n            while true; do\n                # Find all symlinks in this directory.\n                SYMLINKS=`find $DIRECTORY -type l`\n                if [ -z \"$SYMLINKS\" ]; then\n                    break;\n                fi\n                # Iterate symlinks\n                for SYMLINK in $SYMLINKS; do\n                    if [ -L \"$SYMLINK\" ]; then\n                        DIR=`dirname \"$SYMLINK\"`\n                        FILE=`basename \"$SYMLINK\"`\n                        # Note that if `readlink $FILE` is also a link, we want to deal\n                        # with it in the next iteration.  There is potential infinite-loop\n                        # situation for cicular link doesn't exist in our case, though.\n                        (cd \"$DIR\" && \\\n                         LINK=`readlink \"$FILE\"` && \\\n                         test ! -L \"$LINK\" && \\\n                         rm -f \"$FILE\" && \\\n                         cp -a \"$LINK\" \"$FILE\")\n                    fi\n                done\n            done\n        fi\n    done\n}\n"
  },
  {
    "path": "build/tools/package-platforms.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# package-platforms.sh\n#\n\nPROGDIR=$(dirname \"$0\")\n. \"$PROGDIR/prebuilt-common.sh\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\n\nOPTION_SAMPLES=\nPACKAGE_DIR=\n\nusage()\n{\n    echo \"Package platform files from an Android NDK tree\"\n    echo \"\"\n    echo \"options:\"\n    echo \"\"\n    echo \"  --help                Print this message\"\n    echo \"  --ndk-dir=<path>      Use platforms from this NDK directory [$NDK_DIR]\"\n    echo \"  --samples             Also package samples\"\n    echo \"  --package-dir=<path>  Package platforms archive in specific path.\"\n    echo \"\"\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n        --help|-h|-\\?)\n            usage\n            exit 0\n            ;;\n        --ndk-dir=*)\n            NDK_DIR=$optarg\n            ;;\n        --samples)\n            OPTION_SAMPLES=yes\n            ;;\n        --package-dir=*)\n            PACKAGE_DIR=$optarg\n            ;;\n        *)\n            echo \"*** ERROR: unknown option '$opt'\" 1>&2\n            usage 1>&2\n            exit 1\n    esac\ndone\n\nif [ -z \"$PACKAGE_DIR\" ]; then\n    echo \"*** ERROR: Package directory was not specified!\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nmkdir -p \"$PACKAGE_DIR\"\nfail_panic \"Could not create package directory: $PACKAGE_DIR\"\nARCHIVE=platforms.tar.xz\ndump \"Packaging $ARCHIVE\"\npack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"platforms\"\nfail_panic \"Could not package platforms\"\ncache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nif [ \"$OPTION_SAMPLES\" ]; then\n    ARCHIVE=samples.tar.xz\n    dump \"Packaging $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"samples\"\n    fail_panic \"Could not package samples\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Done !\"\n"
  },
  {
    "path": "build/tools/package.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Makes an old style monolithic NDK package out of individual modules.\"\"\"\nfrom __future__ import print_function\n\nimport argparse\nimport ntpath\nimport os\nimport shutil\nimport site\nimport stat\nimport subprocess\nimport sys\nimport tempfile\nimport zipfile\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../..'))\nimport config  # pylint: disable=import-error\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../lib'))\nimport build_support  # pylint: disable=import-error\n\n\nTHIS_DIR = os.path.dirname(__file__)\nANDROID_TOP = os.path.realpath(os.path.join(THIS_DIR, '../../..'))\n\n\ndef expand_packages(package, host, arches):\n    \"\"\"Expands package definition tuple into list of full package names.\n\n    >>> expand_packages('gcc-{arch}-{host}', 'linux', ['arm64', 'x86_64'])\n    ['gcc-arm64-linux-x86_64', 'gcc-x86_64-linux-x86_64']\n\n    >>> expand_packages('gcclibs-{arch}', 'linux', ['arm64', 'x86_64'])\n    ['gcclibs-arm64', 'gcclibs-x86_64']\n\n    >>> expand_packages('llvm-{host}', 'linux', ['arm'])\n    ['llvm-linux-x86_64']\n\n    >>> expand_packages('platforms', 'linux', ['arm'])\n    ['platforms']\n\n    >>> expand_packages('libc++-{abi}', 'linux', ['arm'])\n    ['libc++-armeabi', 'libc++-armeabi-v7a', 'libc++-armeabi-v7a-hard']\n\n    >>> expand_packages('binutils/{triple}', 'linux', ['arm', 'x86_64'])\n    ['binutils/arm-linux-androideabi', 'binutils/x86_64-linux-android']\n\n    >> expand_packages('toolchains/{toolchain}-4.9', 'linux', ['arm', 'x86'])\n    ['toolchains/arm-linux-androideabi-4.9', 'toolchains/x86-4.9']\n    \"\"\"\n    host_tag = build_support.host_to_tag(host)\n    seen_packages = set()\n    packages = []\n    for arch in arches:\n        triple = build_support.arch_to_triple(arch)\n        toolchain = build_support.arch_to_toolchain(arch)\n        for abi in build_support.arch_to_abis(arch):\n            expanded = package.format(\n                abi=abi, arch=arch, host=host_tag, triple=triple,\n                toolchain=toolchain)\n            if expanded not in seen_packages:\n                packages.append(expanded)\n            seen_packages.add(expanded)\n    return packages\n\n\ndef get_all_packages(host, arches):\n    packages = [\n        ('build', 'build'),\n        ('cpufeatures', 'sources/android/cpufeatures'),\n        ('gabixx', 'sources/cxx-stl/gabi++'),\n        ('gcc-{arch}-{host}', 'toolchains/{toolchain}-4.9/prebuilt/{host}'),\n        ('gdbserver-{arch}', 'prebuilt/android-{arch}/gdbserver'),\n        ('shader-tools-{host}', 'shader-tools/{host}'),\n        ('gnustl-4.9', 'sources/cxx-stl/gnu-libstdc++/4.9'),\n        ('gtest', 'sources/third_party/googletest'),\n        ('host-tools-{host}', 'prebuilt/{host}'),\n        ('libandroid_support', 'sources/android/support'),\n        ('libcxx', 'sources/cxx-stl/llvm-libc++'),\n        ('libcxxabi', 'sources/cxx-stl/llvm-libc++abi'),\n        ('llvm-{host}', 'toolchains/llvm/prebuilt/{host}'),\n        ('native_app_glue', 'sources/android/native_app_glue'),\n        ('ndk_helper', 'sources/android/ndk_helper'),\n        ('python-packages', 'python-packages'),\n        ('shaderc', 'sources/third_party/shaderc'),\n        ('stlport', 'sources/cxx-stl/stlport'),\n        ('system-stl', 'sources/cxx-stl/system'),\n        ('vulkan', 'sources/third_party/vulkan'),\n    ]\n\n    platforms_path = 'development/ndk/platforms'\n    for platform_dir in os.listdir(build_support.android_path(platforms_path)):\n        if not platform_dir.startswith('android-'):\n            continue\n        _, platform_str = platform_dir.split('-')\n\n        # Anything before Ginger Bread is unsupported, so don't ship them.\n        if int(platform_str) < 9:\n            continue\n\n        package_name = 'platform-' + platform_str\n        install_path = 'platforms/android-' + platform_str\n        packages.append((package_name, install_path))\n\n    expanded = []\n    for package, extract_path in packages:\n        package_names = expand_packages(package, host, arches)\n        extract_paths = expand_packages(extract_path, host, arches)\n        expanded.extend(zip(package_names, extract_paths))\n    return expanded\n\n\ndef check_packages(path, packages):\n    for package, _ in packages:\n        print('Checking ' + package)\n        package_path = os.path.join(path, package + '.zip')\n        if not os.path.exists(package_path):\n            raise RuntimeError('Missing package: ' + package_path)\n\n        top_level_files = []\n        with zipfile.ZipFile(package_path, 'r') as zip_file:\n            for f in zip_file.namelist():\n                components = os.path.split(f)\n                if len(components) == 2:\n                    top_level_files.append(components[1])\n\n        if 'repo.prop' not in top_level_files:\n            msg = 'Package does not contain a repo.prop: ' + package_path\n            raise RuntimeError(msg)\n\n        if 'NOTICE' not in top_level_files:\n            msg = 'Package does not contain a NOTICE: ' + package_path\n            raise RuntimeError(msg)\n\n\ndef extract_all(path, packages, out_dir):\n    os.makedirs(out_dir)\n    for package, extract_path in packages:\n        print('Unpacking ' + package)\n        package_path = os.path.join(path, package + '.zip')\n        install_dir = os.path.join(out_dir, extract_path)\n\n        if os.path.exists(install_dir):\n            raise RuntimeError('Install path already exists: ' + install_dir)\n\n        if extract_path == '.':\n            raise RuntimeError('Found old style package: ' + package)\n\n        extract_dir = tempfile.mkdtemp()\n        try:\n            subprocess.check_call(\n                ['unzip', '-q', package_path, '-d', extract_dir])\n            dirs = os.listdir(extract_dir)\n            if len(dirs) > 1:\n                msg = 'Package has more than one root directory: ' + package\n                raise RuntimeError(msg)\n            elif len(dirs) == 0:\n                raise RuntimeError('Package was empty: ' + package)\n            parent_dir = os.path.dirname(install_dir)\n            if not os.path.exists(parent_dir):\n                os.makedirs(parent_dir)\n            shutil.move(os.path.join(extract_dir, dirs[0]), install_dir)\n        finally:\n            shutil.rmtree(extract_dir)\n\n    # FIXME(danalbert): OMG HACK\n    # The old package layout had libstdc++'s Android.mk at\n    # sources/cxx-stl/gnu-libstdc++/Android.mk. The gnustl package doesn't\n    # include the version in the path. To mimic the old package layout, we\n    # extract the gnustl package to sources/cxx-stl/gnu-libstdc++/4.9. As such,\n    # the Android.mk ends up in the 4.9 directory. We need to pull it up a\n    # directory.\n    gnustl_path = os.path.join(out_dir, 'sources/cxx-stl/gnu-libstdc++')\n    shutil.move(os.path.join(gnustl_path, '4.9/Android.mk'),\n                os.path.join(gnustl_path, 'Android.mk'))\n\n\ndef make_shortcuts(out_dir, host):\n    host_tag = build_support.host_to_tag(host)\n    host_tools = os.path.join('prebuilt', host_tag, 'bin')\n    make_shortcut(out_dir, host, host_tools, 'ndk-gdb', windows_ext='cmd')\n    make_shortcut(out_dir, host, host_tools, 'ndk-which')\n    make_shortcut(out_dir, host, host_tools, 'ndk-depends', windows_ext='exe')\n    make_shortcut(out_dir, host, host_tools, 'ndk-stack', windows_ext='exe')\n    make_shortcut(out_dir, host, 'build', 'ndk-build', windows_ext='cmd')\n\n\ndef make_shortcut(out_dir, host, path, basename, windows_ext=None):\n    if host.startswith('windows'):\n        make_cmd_helper(out_dir, path, basename, windows_ext)\n    else:\n        make_sh_helper(out_dir, path, basename)\n\n\ndef make_cmd_helper(out_dir, path, basename, windows_ext):\n    if windows_ext is not None:\n        basename += '.' + windows_ext\n\n    full_path = ntpath.join('%~dp0', ntpath.normpath(path), basename)\n    with open(os.path.join(out_dir, basename), 'w') as helper:\n        helper.writelines([\n            '@echo off\\n',\n            full_path + ' %*\\n',\n        ])\n\n\ndef make_sh_helper(out_dir, path, basename):\n    helper_path = os.path.join(out_dir, basename)\n    full_path = os.path.join('$DIR', path, basename)\n    with open(helper_path, 'w') as helper:\n        helper.writelines([\n            '#!/bin/sh\\n',\n            'DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\\n',\n            full_path + ' \"$@\"',\n        ])\n    mode = os.stat(helper_path).st_mode\n    os.chmod(helper_path, mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)\n\n\ndef make_source_properties(out_dir, build_number):\n    path = os.path.join(out_dir, 'source.properties')\n    with open(path, 'w') as source_properties:\n        version = '{}.{}.{}'.format(config.major, config.hotfix, build_number)\n        source_properties.writelines([\n            'Pkg.Desc = Android NDK\\n',\n            'Pkg.Revision = {}\\n'.format(version)\n        ])\n\n\ndef copy_changelog(out_dir):\n    changelog_path = build_support.ndk_path('CHANGELOG.md')\n    shutil.copy2(changelog_path, out_dir)\n\n\ndef make_package(build_number, package_dir, packages, host, out_dir, temp_dir):\n    release_name = 'android-ndk-{}'.format(config.release)\n    extract_dir = os.path.join(temp_dir, release_name)\n    if os.path.exists(extract_dir):\n        shutil.rmtree(extract_dir)\n    extract_all(package_dir, packages, extract_dir)\n    make_shortcuts(extract_dir, host)\n    make_source_properties(extract_dir, build_number)\n    copy_changelog(extract_dir)\n\n    host_tag = build_support.host_to_tag(host)\n    package_name = '{}-{}'.format(release_name, host_tag)\n    package_path = os.path.join(out_dir, package_name)\n    print('Packaging ' + package_name)\n    files = os.path.relpath(extract_dir, temp_dir)\n\n    if host.startswith('windows'):\n        _make_zip_package(package_path, temp_dir, files)\n    else:\n        _make_tar_package(package_path, temp_dir, files)\n\n\ndef _make_tar_package(package_path, base_dir, files):\n    subprocess.check_call(\n        ['tar', 'cjf', package_path + '.tar.bz2', '-C', base_dir, files])\n\n\ndef _make_zip_package(package_path, base_dir, files):\n    cwd = os.getcwd()\n    package_path = os.path.realpath(package_path)\n    os.chdir(base_dir)\n    try:\n        subprocess.check_call(['zip', '-9qr', package_path + '.zip', files])\n    finally:\n        os.chdir(cwd)\n\n\nclass ArgParser(argparse.ArgumentParser):\n    def __init__(self):\n        super(ArgParser, self).__init__(\n            description='Repackages NDK modules as a monolithic package. If '\n                        '--unpack is used, instead installs the monolithic '\n                        'package to a directory.')\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Bundle only the given architecture.')\n        self.add_argument(\n            '--host', choices=('darwin', 'linux', 'windows', 'windows64'),\n            default=build_support.get_default_host(),\n            help='Package binaries for given OS (e.g. linux).')\n        self.add_argument(\n            '--build-number', default=0,\n            help='Build number for use in version files.')\n        self.add_argument(\n            '--release', help='Ignored. Temporarily compatibility.')\n\n        self.add_argument(\n            '-f', '--force', dest='force', action='store_true',\n            help='Clobber out directory if it exists.')\n        self.add_argument(\n            '--dist-dir', type=os.path.realpath,\n            default=build_support.get_dist_dir(build_support.get_out_dir()),\n            help='Directory containing NDK modules.')\n        self.add_argument(\n            '--unpack', action='store_true',\n            help='Unpack the NDK to a directory rather than make a tarball.')\n        self.add_argument(\n            'out_dir', metavar='OUT_DIR',\n            help='Directory to install bundle or tarball to.')\n\n\ndef main():\n    if 'ANDROID_BUILD_TOP' not in os.environ:\n        os.environ['ANDROID_BUILD_TOP'] = ANDROID_TOP\n\n    args = ArgParser().parse_args()\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    if os.path.exists(args.out_dir) and args.unpack:\n        if args.force:\n            shutil.rmtree(args.out_dir)\n        else:\n            sys.exit(args.out_dir + ' already exists. Use -f to overwrite.')\n\n    packages = get_all_packages(args.host, arches)\n    check_packages(args.dist_dir, packages)\n\n    if args.unpack:\n        extract_all(args.dist_dir, packages, args.out_dir)\n        make_shortcuts(args.out_dir, args.host)\n    else:\n        make_package(args.build_number, args.dist_dir, packages, args.host,\n                     args.out_dir, build_support.get_out_dir())\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "build/tools/prebuilt-common.sh",
    "content": "# Common functions for all prebuilt-related scripts\n# This is included/sourced by other scripts\n#\n\n# ensure stable sort order\nexport LC_ALL=C\n\n# NDK_BUILDTOOLS_PATH should point to the directory containing\n# this script. If it is not defined, assume that this is one of\n# the scripts in the same directory that sourced this file.\n#\nif [ -z \"$NDK_BUILDTOOLS_PATH\" ]; then\n    NDK_BUILDTOOLS_PATH=$(dirname $0)\n    if [ ! -f \"$NDK_BUILDTOOLS_PATH/prebuilt-common.sh\" ]; then\n        echo \"INTERNAL ERROR: Please define NDK_BUILDTOOLS_PATH to point to \\$NDK/build/tools\"\n        exit 1\n    fi\nfi\n\n# Warn if /bin/sh isn't bash.\nif [ -z \"$BASH_VERSION\" ] ; then\n    echo \"WARNING: The shell running this script isn't bash.  Although we try to avoid bashism in scripts, things can happen.\"\nfi\n\nNDK_BUILDTOOLS_ABSPATH=$(cd $NDK_BUILDTOOLS_PATH && pwd)\n\n. $NDK_BUILDTOOLS_PATH/ndk-common.sh\n. $NDK_BUILDTOOLS_PATH/dev-defaults.sh\n\n\n# Given an input string of the form <foo>-<bar>-<version>, where\n# <version> can be <major>.<minor>, extract <major>\nextract_version ()\n{\n    echo $1 | tr '-' '\\n' | tail -1\n}\n\n# $1: versioned name (e.g. arm-linux-androideabi-4.8)\n# Out: major version (e.g. 4)\n#\n# Examples:  arm-linux-androideabi-4.4.3 -> 4\n#            gmp-0.81 -> 0\n#\nextract_major_version ()\n{\n    local RET=$(extract_version $1 | cut -d . -f 1)\n    RET=${RET:-0}\n    echo $RET\n}\n\n# Same as extract_major_version, but for the minor version number\n# $1: versioned named\n# Out: minor version\n#\nextract_minor_version ()\n{\n    local RET=$(extract_version $1 | cut -d . -f 2)\n    RET=${RET:-0}\n    echo $RET\n}\n\n# Compare two version numbers and only succeeds if the first one is\n# greater than or equal to the second one.\n#\n# $1: first version (e.g. 4.9)\n# $2: second version (e.g. 4.8)\n#\n# Example: version_is_at_least 4.9 4.8 --> success\n#\nversion_is_at_least ()\n{\n    local A_MAJOR A_MINOR B_MAJOR B_MINOR\n    A_MAJOR=$(extract_major_version $1)\n    B_MAJOR=$(extract_major_version $2)\n\n    if [ $A_MAJOR -lt $B_MAJOR ]; then\n        return 1\n    elif [ $A_MAJOR -gt $B_MAJOR ]; then\n        return 0\n    fi\n\n    # We have A_MAJOR == B_MAJOR here\n\n    A_MINOR=$(extract_minor_version $1)\n    B_MINOR=$(extract_minor_version $2)\n\n    if [ $A_MINOR -lt $B_MINOR ]; then\n        return 1\n    else\n        return 0\n    fi\n}\n\n#====================================================\n#\n#  UTILITY FUNCTIONS\n#\n#====================================================\n\n# Return the maximum length of a series of strings\n#\n# Usage:  len=`max_length <string1> <string2> ...`\n#\nmax_length ()\n{\n    echo \"$@\" | tr ' ' '\\n' | awk 'BEGIN {max=0} {len=length($1); if (len > max) max=len} END {print max}'\n}\n\n# Translate dashes to underscores\n# Usage:  str=`dashes_to_underscores <values>`\ndashes_to_underscores ()\n{\n    echo \"$@\" | tr '-' '_'\n}\n\n# Translate underscores to dashes\n# Usage: str=`underscores_to_dashes <values>`\nunderscores_to_dashes ()\n{\n    echo \"$@\" | tr '_' '-'\n}\n\n# Translate commas to spaces\n# Usage: str=`commas_to_spaces <list>`\ncommas_to_spaces ()\n{\n    echo \"$@\" | tr ',' ' '\n}\n\n# Translate spaces to commas\n# Usage: list=`spaces_to_commas <string>`\nspaces_to_commas ()\n{\n    echo \"$@\" | tr ' ' ','\n}\n\n# Remove trailing path of a path\n# $1: path\nremove_trailing_slash () {\n    echo ${1%%/}\n}\n\n# Reverse a file path directory\n# foo -> .\n# foo/bar -> ..\n# foo/bar/zoo -> ../..\nreverse_path ()\n{\n    local path cur item\n    path=${1%%/} # remove trailing slash\n    cur=\".\"\n    if [ \"$path\" != \".\" ] ; then\n        for item in $(echo \"$path\" | tr '/' ' '); do\n            cur=\"../$cur\"\n        done\n    fi\n    echo ${cur%%/.}\n}\n\n# test_reverse_path ()\n# {\n#     rr=`reverse_path $1`\n#     if [ \"$rr\" != \"$2\" ] ; then\n#         echo \"ERROR: reverse_path '$1' -> '$rr' (expected '$2')\"\n#     fi\n# }\n#\n# test_reverse_path . .\n# test_reverse_path ./ .\n# test_reverse_path foo ..\n# test_reverse_path foo/ ..\n# test_reverse_path foo/bar ../..\n# test_reverse_path foo/bar/ ../..\n# test_reverse_path foo/bar/zoo ../../..\n# test_reverse_path foo/bar/zoo/ ../../..\n\n# Sort a space-separated list and remove duplicates\n# $1+: slist\n# Output: new slist\nsort_uniq ()\n{\n    local RET\n    RET=$(echo \"$@\" | tr ' ' '\\n' | sort -u)\n    echo $RET\n}\n\n# Return the list of all regular files under a given directory\n# $1: Directory path\n# Output: list of files, relative to $1\nlist_files_under ()\n{\n    if [ -d \"$1\" ]; then\n        (cd $1 && find . -type f | sed -e \"s!./!!\" | sort -u)\n    else\n        echo \"\"\n    fi\n}\n\n# Returns all words in text that do not match any of the pattern\n# $1: pattern\n# $2: text\nfilter_out ()\n{\n    local PATTERN=\"$1\"\n    local TEXT=\"$2\"\n    for pat in $PATTERN; do\n        pat=$\"${pat//\\//\\\\/}\"\n        TEXT=$(echo $TEXT | sed -e 's/'$pat' //g' -e 's/'$pat'$//g')\n    done\n    echo $TEXT\n}\n\n# Assign a value to a variable\n# $1: Variable name\n# $2: Value\nvar_assign ()\n{\n    eval $1=\\\"$2\\\"\n}\n\n#====================================================\n#\n#  OPTION PROCESSING\n#\n#====================================================\n\n# We recognize the following option formats:\n#\n#  -f\n#  --flag\n#\n#  -s<value>\n#  --setting=<value>\n#\n\n# NOTE: We translate '-' into '_' when storing the options in global variables\n#\n\nOPTIONS=\"\"\nOPTION_FLAGS=\"\"\nOPTION_SETTINGS=\"\"\n\n# Set a given option attribute\n# $1: option name\n# $2: option attribute\n# $3: attribute value\n#\noption_set_attr ()\n{\n    eval OPTIONS_$1_$2=\\\"$3\\\"\n}\n\n# Get a given option attribute\n# $1: option name\n# $2: option attribute\n#\noption_get_attr ()\n{\n    echo `var_value OPTIONS_$1_$2`\n}\n\n# Register a new option\n# $1: option\n# $2: small abstract for the option\n# $3: optional. default value\n#\nregister_option_internal ()\n{\n    optlabel=\n    optname=\n    optvalue=\n    opttype=\n    while [ -n \"1\" ] ; do\n        # Check for something like --setting=<value>\n        echo \"$1\" | grep -q -E -e '^--[^=]+=<.+>$'\n        if [ $? = 0 ] ; then\n            optlabel=`expr -- \"$1\" : '\\(--[^=]*\\)=.*'`\n            optvalue=`expr -- \"$1\" : '--[^=]*=\\(<.*>\\)'`\n            opttype=\"long_setting\"\n            break\n        fi\n\n        # Check for something like --flag\n        echo \"$1\" | grep -q -E -e '^--[^=]+$'\n        if [ $? = 0 ] ; then\n            optlabel=\"$1\"\n            opttype=\"long_flag\"\n            break\n        fi\n\n        # Check for something like -f<value>\n        echo \"$1\" | grep -q -E -e '^-[A-Za-z0-9]<.+>$'\n        if [ $? = 0 ] ; then\n            optlabel=`expr -- \"$1\" : '\\(-.\\).*'`\n            optvalue=`expr -- \"$1\" : '-.\\(<.+>\\)'`\n            opttype=\"short_setting\"\n            break\n        fi\n\n        # Check for something like -f\n        echo \"$1\" | grep -q -E -e '^-.$'\n        if [ $? = 0 ] ; then\n            optlabel=\"$1\"\n            opttype=\"short_flag\"\n            break\n        fi\n\n        echo \"ERROR: Invalid option format: $1\"\n        echo \"       Check register_option call\"\n        exit 1\n    done\n\n    log \"new option: type='$opttype' name='$optlabel' value='$optvalue'\"\n\n    optname=`dashes_to_underscores $optlabel`\n    OPTIONS=\"$OPTIONS $optname\"\n    OPTIONS_TEXT=\"$OPTIONS_TEXT $1\"\n    option_set_attr $optname label \"$optlabel\"\n    option_set_attr $optname otype \"$opttype\"\n    option_set_attr $optname value \"$optvalue\"\n    option_set_attr $optname text \"$1\"\n    option_set_attr $optname abstract \"$2\"\n    option_set_attr $optname default \"$3\"\n}\n\n# Register a new option with a function callback.\n#\n# $1: option\n# $2: name of function that will be called when the option is parsed\n# $3: small abstract for the option\n# $4: optional. default value\n#\nregister_option ()\n{\n    local optname optvalue opttype optlabel\n    register_option_internal \"$1\" \"$3\" \"$4\"\n    option_set_attr $optname funcname \"$2\"\n}\n\n# Register a new option with a variable store\n#\n# $1: option\n# $2: name of variable that will be set by this option\n# $3: small abstract for the option\n#\n# NOTE: The current value of $2 is used as the default\n#\nregister_var_option ()\n{\n    local optname optvalue opttype optlabel\n    register_option_internal \"$1\" \"$3\" \"`var_value $2`\"\n    option_set_attr $optname varname \"$2\"\n}\n\n\nMINGW=no\nDARWIN=no\ndo_mingw_option ()\n{\n    if [ \"$DARWIN\" = \"yes\" ]; then\n        echo \"Can not have both --mingw and --darwin\"\n        exit 1\n    fi\n    MINGW=yes;\n}\ndo_darwin_option ()\n{\n    if [ \"$MINGW\" = \"yes\" ]; then\n        echo \"Can not have both --mingw and --darwin\"\n        exit 1\n    fi\n    DARWIN=yes; \n}\n\nregister_canadian_option ()\n{\n    if [ \"$HOST_OS\" = \"linux\" ] ; then\n        register_option \"--mingw\" do_mingw_option \"Generate windows binaries on Linux.\"\n        register_option \"--darwin\" do_darwin_option \"Generate darwin binaries on Linux.\"\n    fi\n}\n\nTRY64=no\ndo_try64_option () { TRY64=yes; }\n\nregister_try64_option ()\n{\n    register_option \"--try-64\" do_try64_option \"Generate 64-bit only binaries.\"\n}\n\n\nregister_jobs_option ()\n{\n    NUM_JOBS=$BUILD_NUM_CPUS\n    register_var_option \"-j<number>\" NUM_JOBS \"Use <number> parallel build jobs\"\n}\n\n# Print the help, including a list of registered options for this program\n# Note: Assumes PROGRAM_PARAMETERS and PROGRAM_DESCRIPTION exist and\n#       correspond to the parameters list and the program description\n#\nprint_help ()\n{\n    local opt text abstract default\n\n    echo \"Usage: $PROGNAME [options] $PROGRAM_PARAMETERS\"\n    echo \"\"\n    if [ -n \"$PROGRAM_DESCRIPTION\" ] ; then\n        echo \"$PROGRAM_DESCRIPTION\"\n        echo \"\"\n    fi\n    echo \"Valid options (defaults are in brackets):\"\n    echo \"\"\n\n    maxw=`max_length \"$OPTIONS_TEXT\"`\n    AWK_SCRIPT=`echo \"{ printf \\\"%-${maxw}s\\\", \\\\$1 }\"`\n    for opt in $OPTIONS; do\n        text=`option_get_attr $opt text | awk \"$AWK_SCRIPT\"`\n        abstract=`option_get_attr $opt abstract`\n        default=`option_get_attr $opt default`\n        if [ -n \"$default\" ] ; then\n            echo \"  $text     $abstract [$default]\"\n        else\n            echo \"  $text     $abstract\"\n        fi\n    done\n    echo \"\"\n}\n\noption_panic_no_args ()\n{\n    echo \"ERROR: Option '$1' does not take arguments. See --help for usage.\"\n    exit 1\n}\n\noption_panic_missing_arg ()\n{\n    echo \"ERROR: Option '$1' requires an argument. See --help for usage.\"\n    exit 1\n}\n\nextract_parameters ()\n{\n    local opt optname otype value name fin funcname\n    PARAMETERS=\"\"\n    while [ -n \"$1\" ] ; do\n        # If the parameter does not begin with a dash\n        # it is not an option.\n        param=`expr -- \"$1\" : '^\\([^\\-].*\\)$'`\n        if [ -n \"$param\" ] ; then\n            if [ -z \"$PARAMETERS\" ] ; then\n                PARAMETERS=\"$1\"\n            else\n                PARAMETERS=\"$PARAMETERS $1\"\n            fi\n            shift\n            continue\n        fi\n\n        while [ -n \"1\" ] ; do\n            # Try to match a long setting, i.e. --option=value\n            opt=`expr -- \"$1\" : '^\\(--[^=]*\\)=.*$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"long_setting\"\n                value=`expr -- \"$1\" : '^--[^=]*=\\(.*\\)$'`\n                break\n            fi\n\n            # Try to match a long flag, i.e. --option\n            opt=`expr -- \"$1\" : '^\\(--.*\\)$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"long_flag\"\n                value=\"yes\"\n                break\n            fi\n\n            # Try to match a short setting, i.e. -o<value>\n            opt=`expr -- \"$1\" : '^\\(-[A-Za-z0-9]\\)..*$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"short_setting\"\n                value=`expr -- \"$1\" : '^-.\\(.*\\)$'`\n                break\n            fi\n\n            # Try to match a short flag, i.e. -o\n            opt=`expr -- \"$1\" : '^\\(-.\\)$'`\n            if [ -n \"$opt\" ] ; then\n                otype=\"short_flag\"\n                value=\"yes\"\n                break\n            fi\n\n            echo \"ERROR: Unknown option '$1'. Use --help for list of valid values.\"\n            exit 1\n        done\n\n        #echo \"Found opt='$opt' otype='$otype' value='$value'\"\n\n        name=`dashes_to_underscores $opt`\n        found=0\n        for xopt in $OPTIONS; do\n            if [ \"$name\" != \"$xopt\" ] ; then\n                continue\n            fi\n            # Check that the type is correct here\n            #\n            # This also allows us to handle -o <value> as -o<value>\n            #\n            xotype=`option_get_attr $name otype`\n            if [ \"$otype\" != \"$xotype\" ] ; then\n                case \"$xotype\" in\n                \"short_flag\")\n                    option_panic_no_args $opt\n                    ;;\n                \"short_setting\")\n                    if [ -z \"$2\" ] ; then\n                        option_panic_missing_arg $opt\n                    fi\n                    value=\"$2\"\n                    shift\n                    ;;\n                \"long_flag\")\n                    option_panic_no_args $opt\n                    ;;\n                \"long_setting\")\n                    option_panic_missing_arg $opt\n                    ;;\n                esac\n            fi\n            found=1\n            break\n            break\n        done\n        if [ \"$found\" = \"0\" ] ; then\n            echo \"ERROR: Unknown option '$opt'. See --help for usage.\"\n            exit 1\n        fi\n        # Set variable or launch option-specific function.\n        varname=`option_get_attr $name varname`\n        if [ -n \"$varname\" ] ; then\n            eval ${varname}=\\\"$value\\\"\n        else\n            eval `option_get_attr $name funcname` \\\"$value\\\"\n        fi\n        shift\n    done\n}\n\ndo_option_help ()\n{\n    print_help\n    exit 0\n}\n\nVERBOSE=no\ndo_option_verbose ()\n{\n    VERBOSE=yes\n}\n\nDRYRUN=no\ndo_option_dryrun ()\n{\n    DRYRUN=yes\n}\n\nregister_option \"--help\"          do_option_help     \"Print this help.\"\nregister_option \"--verbose\"       do_option_verbose  \"Enable verbose mode.\"\nregister_option \"--dryrun\"        do_option_dryrun   \"Set to dryrun mode.\"\n\n#====================================================\n#\n#  TOOLCHAIN AND ABI PROCESSING\n#\n#====================================================\n\n# Determine optional variable value\n# $1: final variable name\n# $2: option variable name\n# $3: small description for the option\nfix_option ()\n{\n    if [ -n \"$2\" ] ; then\n        eval $1=\"$2\"\n        log \"Using specific $3: $2\"\n    else\n        log \"Using default $3: `var_value $1`\"\n    fi\n}\n\n\n# If SYSROOT is empty, check that $1/$2 contains a sysroot\n# and set the variable to it.\n#\n# $1: sysroot path\n# $2: platform/arch suffix\ncheck_sysroot ()\n{\n    if [ -z \"$SYSROOT\" ] ; then\n        log \"Probing directory for sysroot: $1/$2\"\n        if [ -d $1/$2 ] ; then\n            SYSROOT=$1/$2\n        fi\n    fi\n}\n\n# Determine sysroot\n# $1: Option value (or empty)\n#\nfix_sysroot ()\n{\n    if [ -n \"$1\" ] ; then\n        eval SYSROOT=\"$1\"\n        log \"Using specified sysroot: $1\"\n    else\n        SYSROOT_SUFFIX=$PLATFORM/arch-$ARCH\n        SYSROOT=\n        check_sysroot $ANDROID_BUILD_TOP/prebuilts/ndk/current/platforms $SYSROOT_SUFFIX\n        check_sysroot $ANDROID_NDK_ROOT/platforms $SYSROOT_SUFFIX\n        check_sysroot `dirname $ANDROID_NDK_ROOT`/development/ndk/platforms $SYSROOT_SUFFIX\n\n        if [ -z \"$SYSROOT\" ] ; then\n            echo \"ERROR: Could not find NDK sysroot path for $SYSROOT_SUFFIX.\"\n            echo \"       Use --sysroot=<path> to specify one.\"\n            exit 1\n        fi\n    fi\n\n    if [ ! -f $SYSROOT/usr/include/stdlib.h ] ; then\n        echo \"ERROR: Invalid sysroot path: $SYSROOT\"\n        echo \"       Use --sysroot=<path> to indicate a valid one.\"\n        exit 1\n    fi\n}\n\n# Check for the availability of a compatibility SDK in Darwin\n# this can be used to generate binaries compatible with either Tiger or\n# Leopard.\n#\n# $1: SDK root path\n# $2: Optional MacOS X minimum version (e.g. 10.5)\nDARWIN_MINVER=10.6\ncheck_darwin_sdk ()\n{\n    local MACSDK=\"$1\"\n    local MINVER=$2\n\n    if [ -z \"$MINVER\" ] ; then\n        # expect SDK root path ended up with either MacOSX##.#.sdk or MacOSX##.#u.sdk\n        MINVER=${MACSDK##*MacOSX}\n        MINVER=${MINVER%%.sdk*}\n        if [ \"$MINVER\" = \"10.4u\" ]; then\n            MINVER=10.4\n        fi\n    fi\n    if [ -d \"$MACSDK\" ] ; then\n        HOST_CFLAGS=$HOST_CFLAGS\" -isysroot $MACSDK -mmacosx-version-min=$MINVER -DMAXOSX_DEPLOYEMENT_TARGET=$MINVER\"\n        HOST_LDFLAGS=$HOST_LDFLAGS\" -Wl,-syslibroot,$MACSDK -mmacosx-version-min=$MINVER\"\n        DARWIN_MINVER=$MINVER\n        return 0  # success\n    fi\n    return 1\n}\n\n# Probe Darwin SDK in specified diectory $DARWIN_SYSROOT, or\n# /Developer/SDKs/MacOSX10.6.sdk\n#\nprobe_darwin_sdk ()\n{\n    if [ -n \"$DARWIN_SYSROOT\" ]; then\n        if check_darwin_sdk \"$DARWIN_SYSROOT\"; then\n            log \"Use darwin sysroot $DARWIN_SYSROOT\"\n        else\n            echo \"darwin sysroot $DARWIN_SYSROOT is not valid\"\n            exit 1\n        fi\n    elif check_darwin_sdk /Developer/SDKs/MacOSX10.6.sdk 10.6; then\n        log \"Generating Snow Leopard-compatible binaries!\"\n    else\n        local version=`sw_vers -productVersion`\n        log \"Generating $version-compatible binaries!\"\n    fi\n}\n\nhandle_canadian_build ()\n{\n    HOST_EXE=\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ] ; then\n        case $HOST_TAG in\n            linux-*)\n                ;;\n            *)\n                echo \"ERROR: Can only enable --mingw or --darwin on Linux platforms !\"\n                exit 1\n                ;;\n        esac\n        if [ \"$MINGW\" = \"yes\" ] ; then\n            # NOTE: Use x86_64-pc-mingw32msvc or i586-pc-mingw32msvc because wrappers are generated\n            #       using these names\n            if [ \"$TRY64\" = \"yes\" ]; then\n                ABI_CONFIGURE_HOST=x86_64-pc-mingw32msvc\n                HOST_TAG=windows-x86_64\n            else\n                ABI_CONFIGURE_HOST=i586-pc-mingw32msvc\n                HOST_TAG=windows\n            fi\n            HOST_OS=windows\n            HOST_EXE=.exe\n        else\n            if [ \"$TRY64\" = \"yes\" ]; then\n                ABI_CONFIGURE_HOST=x86_64-apple-darwin\n                HOST_TAG=darwin-x86_64\n            else\n                ABI_CONFIGURE_HOST=i686-apple-darwin\n                HOST_TAG=darwin-x86\n            fi\n            HOST_OS=darwin\n        fi\n    fi\n}\n\n# Find mingw toolchain\n#\n# Set MINGW_GCC to the found mingw toolchain\n#\nfind_mingw_toolchain ()\n{\n    if [ \"$DEBIAN_NAME\" -a \"$BINPREFIX\" -a \"$MINGW_GCC\" ]; then\n        return\n    fi\n    # IMPORTANT NOTE: binutils 2.21 requires a cross toolchain named\n    # i585-pc-mingw32msvc-gcc, or it will fail its configure step late\n    # in the toolchain build. Note that binutils 2.19 can build properly\n    # with i585-mingw32mvsc-gcc, which is the name used by the 'mingw32'\n    # toolchain install on Debian/Ubuntu.\n    #\n    # To solve this dilemma, we create a wrapper toolchain named\n    # i586-pc-mingw32msvc-gcc that really calls i586-mingw32msvc-gcc,\n    # this works with all versions of binutils.\n    #\n    # We apply the same logic to the 64-bit Windows cross-toolchain\n    #\n    # Fedora note: On Fedora it's x86_64-w64-mingw32- or i686-w64-mingw32-\n    # On older Fedora it's 32-bit only and called i686-pc-mingw32-\n    # so we just add more prefixes to the list to check.\n    if [ \"$HOST_ARCH\" = \"x86_64\" -a \"$TRY64\" = \"yes\" ]; then\n        BINPREFIX=x86_64-pc-mingw32msvc-\n        BINPREFIXLST=\"x86_64-pc-mingw32msvc- x86_64-w64-mingw32- amd64-mingw32msvc-\"\n        DEBIAN_NAME=mingw-w64\n    else\n        # we are trying 32 bit anyway, so forcing it to avoid build issues\n        force_32bit_binaries\n        BINPREFIX=i586-pc-mingw32msvc-\n        BINPREFIXLST=\"i586-pc-mingw32msvc- i686-pc-mingw32- i586-mingw32msvc- i686-w64-mingw32-\"\n        DEBIAN_NAME=mingw-w64\n    fi\n\n    # Scan $BINPREFIXLST list to find installed mingw toolchain. It will be\n    # wrapped later with $BINPREFIX.\n    for i in $BINPREFIXLST; do\n        find_program MINGW_GCC ${i}gcc\n        if [ -n \"$MINGW_GCC\" ]; then\n            dump \"Found mingw toolchain: $MINGW_GCC\"\n            break\n        fi\n    done\n}\n\n# Check there is a working cross-toolchain installed.\n#\n# $1: install directory for mingw/darwin wrapper toolchain\n#\nprepare_canadian_toolchain ()\n{\n    if [ \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ]; then\n        return\n    fi\n    CROSS_GCC=\n    if [ \"$MINGW\" = \"yes\" ]; then\n        find_mingw_toolchain\n        if [ -z \"$MINGW_GCC\" ]; then\n            echo \"ERROR: Could not find in your PATH any of:\"\n            for i in $BINPREFIXLST; do echo \"   ${i}gcc\"; done\n            echo \"Please install the corresponding cross-toolchain and re-run this script\"\n            echo \"TIP: On Debian or Ubuntu, try: sudo apt-get install $DEBIAN_NAME\"\n            exit 1\n        fi\n        CROSS_GCC=$MINGW_GCC\n    else\n        if [ -z \"$DARWIN_TOOLCHAIN\" ]; then\n            echo \"Please set DARWIN_TOOLCHAIN to darwin cross-toolchain\"\n            exit 1\n        fi\n        if [ ! -f \"${DARWIN_TOOLCHAIN}-gcc\" ]; then\n            echo \"darwin cross-toolchain $DARWIN_TOOLCHAIN-gcc doesn't exist\"\n            exit 1\n        fi\n        if [ \"$HOST_ARCH\" = \"x86_64\" -a \"$TRY64\" = \"yes\" ]; then\n            BINPREFIX=x86_64-apple-darwin-\n            DEBIAN_NAME=darwin64\n            HOST_CFLAGS=$HOST_CFLAGS\" -m64\"\n        else\n            force_32bit_binaries\n            BINPREFIX=i686-apple-darwin-\n            DEBIAN_NAME=darwin32\n            HOST_CFLAGS=$HOST_CFLAGS\" -m32\"\n        fi\n        CROSS_GCC=${DARWIN_TOOLCHAIN}-gcc\n        probe_darwin_sdk\n    fi\n\n    # Create a wrapper toolchain, and prepend its dir to our PATH\n    CROSS_WRAP_DIR=\"$1\"/$DEBIAN_NAME-wrapper\n    rm -rf \"$CROSS_WRAP_DIR\"\n    mkdir -p \"$CROSS_WRAP_DIR\"\n\n    if [ \"$DARWIN\" = \"yes\" ] ; then\n        cat > \"$CROSS_WRAP_DIR/sw_vers\" <<EOF\n#!/bin/sh\n# Tiny utility for the real sw_vers some Makefiles need\ncase \\$1 in\n    -productVersion)\n        echo $DARWIN_MINVER\n        ;;\n    *)\n        echo \"ERROR: Unknown switch \\$1\"\n        exit 1\nesac\nEOF\n    chmod 0755 \"$CROSS_WRAP_DIR/sw_vers\"\n    fi\n\n    DST_PREFIX=${CROSS_GCC%gcc}\n    if [ \"$NDK_CCACHE\" ]; then\n        DST_PREFIX=\"$NDK_CCACHE $DST_PREFIX\"\n    fi\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=$BINPREFIX --dst-prefix=\"$DST_PREFIX\" \"$CROSS_WRAP_DIR\" \\\n        --cflags=\"$HOST_CFLAGS\" --cxxflags=\"$HOST_CFLAGS\" --ldflags=\"$HOST_LDFLAGS\"\n    # generate wrappers for BUILD toolchain\n    # this is required for mingw/darwin build to avoid tools canadian cross configuration issues\n    # 32-bit BUILD toolchain\n    LEGACY_TOOLCHAIN_DIR=\"$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \\\n            --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m elf_i386\" --asflags=\"--32\" \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \\\n            --cflags=\"-m32\" --cxxflags=\"-m32\" --ldflags=\"-m elf_i386\" --asflags=\"--32\" \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    # 64-bit BUILD toolchain.  libbfd is still built in 32-bit.\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \\\n            --dst-prefix=\"$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-\" \"$CROSS_WRAP_DIR\"\n    fail_panic \"Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR\"\n\n    export PATH=$CROSS_WRAP_DIR:$PATH\n    dump \"Using $DEBIAN_NAME wrapper: $CROSS_WRAP_DIR/${BINPREFIX}gcc\"\n}\n\nhandle_host ()\n{\n    if [ \"$TRY64\" != \"yes\" ]; then\n        force_32bit_binaries  # to modify HOST_TAG and others\n        HOST_BITS=32\n    fi\n    handle_canadian_build\n}\n\nsetup_ccache ()\n{\n    # Support for ccache compilation\n    # We can't use this here when building Windows/darwin binaries on Linux with\n    # binutils 2.21, because defining CC/CXX in the environment makes the\n    # configure script fail later\n    #\n    if [ \"$NDK_CCACHE\" -a \"$MINGW\" != \"yes\" -a \"$DARWIN\" != \"yes\" ]; then\n        NDK_CCACHE_CC=$CC\n        NDK_CCACHE_CXX=$CXX\n        # Unfortunately, we can just do CC=\"$NDK_CCACHE $CC\" because some\n        # configure scripts are not capable of dealing with this properly\n        # E.g. the ones used to rebuild the GCC toolchain from scratch.\n        # So instead, use a wrapper script\n        CC=$NDK_BUILDTOOLS_ABSPATH/ndk-ccache-gcc.sh\n        CXX=$NDK_BUILDTOOLS_ABSPATH/ndk-ccache-g++.sh\n        export NDK_CCACHE_CC NDK_CCACHE_CXX\n        log \"Using ccache compilation\"\n        log \"NDK_CCACHE_CC=$NDK_CCACHE_CC\"\n        log \"NDK_CCACHE_CXX=$NDK_CCACHE_CXX\"\n    fi\n}\n\nprepare_common_build ()\n{\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ]; then\n        if [ \"$TRY64\" = \"yes\" ]; then\n            HOST_BITS=64\n        else\n            HOST_BITS=32\n        fi\n        if [ \"$MINGW\" = \"yes\" ]; then\n            log \"Generating $HOST_BITS-bit Windows binaries\"\n        else\n            log \"Generating $HOST_BITS-bit Darwin binaries\"\n        fi\n        # Do *not* set CC and CXX when building the Windows/Darwin binaries in canadian build.\n        # Otherwise, the GCC configure/build script will mess that Canadian cross\n        # build in weird ways. Instead we rely on the toolchain detected or generated\n        # previously in prepare_canadian_toolchain.\n        unset CC CXX\n        return\n    fi\n\n    # On Linux, detect our legacy-compatible toolchain when in the Android\n    # source tree, and use it to force the generation of glibc-2.7 compatible\n    # binaries.\n    #\n    # We only do this if the CC variable is not defined to a given value\n    if [ -z \"$CC\" ]; then\n        LEGACY_TOOLCHAIN_DIR=\n        if [ \"$HOST_OS\" = \"linux\" ]; then\n            LEGACY_TOOLCHAIN_DIR=\"$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin\"\n            LEGACY_TOOLCHAIN_PREFIX=\"$LEGACY_TOOLCHAIN_DIR/x86_64-linux-\"\n        elif [ \"$HOST_OS\" = \"darwin\" ]; then\n            LEGACY_TOOLCHAIN_DIR=\"$ANDROID_BUILD_TOP/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin\"\n            LEGACY_TOOLCHAIN_PREFIX=\"$LEGACY_TOOLCHAIN_DIR/i686-apple-darwin10-\"\n        fi\n        if [ -d \"$LEGACY_TOOLCHAIN_DIR\" ] ; then\n            log \"Forcing generation of $HOST_OS binaries with legacy toolchain\"\n            CC=\"${LEGACY_TOOLCHAIN_PREFIX}gcc\"\n            CXX=\"${LEGACY_TOOLCHAIN_PREFIX}g++\"\n        fi\n    fi\n\n    CC=${CC:-gcc}\n    CXX=${CXX:-g++}\n    STRIP=${STRIP:-strip}\n    case $HOST_TAG in\n        darwin-*)\n            probe_darwin_sdk\n            ;;\n    esac\n\n    # Force generation of 32-bit binaries on 64-bit systems.\n    # We used to test the value of $HOST_TAG for *-x86_64, but this is\n    # not sufficient on certain systems.\n    #\n    # For example, Snow Leopard can be booted with a 32-bit kernel, running\n    # a 64-bit userland, with a compiler that generates 64-bit binaries by\n    # default *even* though \"gcc -v\" will report --target=i686-apple-darwin10!\n    #\n    # So know, simply probe for the size of void* by performing a small runtime\n    # compilation test.\n    #\n    cat > $TMPC <<EOF\n    /* this test should fail if the compiler generates 64-bit machine code */\n    int test_array[1-2*(sizeof(void*) != 4)];\nEOF\n    log_n \"Checking whether the compiler generates 32-bit binaries...\"\n    log $CC $HOST_CFLAGS -c -o $TMPO $TMPC\n    $NDK_CCACHE $CC $HOST_CFLAGS -c -o $TMPO $TMPC >$TMPL 2>&1\n    if [ $? != 0 ] ; then\n        log \"no\"\n        if [ \"$TRY64\" != \"yes\" ]; then\n            # NOTE: We need to modify the definitions of CC and CXX directly\n            #        here. Just changing the value of CFLAGS / HOST_CFLAGS\n            #        will not work well with the GCC toolchain scripts.\n            CC=\"$CC -m32\"\n            CXX=\"$CXX -m32\"\n        fi\n    else\n        log \"yes\"\n        if [ \"$TRY64\" = \"yes\" ]; then\n            CC=\"$CC -m64\"\n            CXX=\"$CXX -m64\"\n        fi\n    fi\n\n    if [ \"$TRY64\" = \"yes\" ]; then\n        HOST_BITS=64\n    else\n        force_32bit_binaries  # to modify HOST_TAG and others\n        HOST_BITS=32\n    fi\n}\n\nprepare_host_build ()\n{\n    prepare_common_build\n\n    # Now deal with mingw or darwin\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ]; then\n        handle_canadian_build\n        CC=$ABI_CONFIGURE_HOST-gcc\n        CXX=$ABI_CONFIGURE_HOST-g++\n        CPP=$ABI_CONFIGURE_HOST-cpp\n        LD=$ABI_CONFIGURE_HOST-ld\n        AR=$ABI_CONFIGURE_HOST-ar\n        AS=$ABI_CONFIGURE_HOST-as\n        RANLIB=$ABI_CONFIGURE_HOST-ranlib\n        STRIP=$ABI_CONFIGURE_HOST-strip\n        export CC CXX CPP LD AR AS RANLIB STRIP\n    fi\n\n    setup_ccache\n}\n\nprepare_abi_configure_build ()\n{\n    # detect build tag\n    case $HOST_TAG in\n        linux-x86)\n            ABI_CONFIGURE_BUILD=i386-linux-gnu\n            ;;\n        linux-x86_64)\n            ABI_CONFIGURE_BUILD=x86_64-linux-gnu\n            ;;\n        darwin-x86)\n            ABI_CONFIGURE_BUILD=i686-apple-darwin\n            ;;\n        darwin-x86_64)\n            ABI_CONFIGURE_BUILD=x86_64-apple-darwin\n            ;;\n        windows)\n            ABI_CONFIGURE_BUILD=i686-pc-cygwin\n            ;;\n        *)\n            echo \"ERROR: Unsupported HOST_TAG: $HOST_TAG\"\n            echo \"Please update 'prepare_host_flags' in build/tools/prebuilt-common.sh\"\n            ;;\n    esac\n}\n\nprepare_target_build ()\n{\n    prepare_abi_configure_build\n\n    # By default, assume host == build\n    ABI_CONFIGURE_HOST=\"$ABI_CONFIGURE_BUILD\"\n\n    prepare_common_build\n    HOST_GMP_ABI=$HOST_BITS\n\n    # Now handle the --mingw/--darwin flag\n    if [ \"$MINGW\" = \"yes\" -o \"$DARWIN\" = \"yes\" ] ; then\n        handle_canadian_build\n        STRIP=$ABI_CONFIGURE_HOST-strip\n        if [ \"$MINGW\" = \"yes\" ] ; then\n            # It turns out that we need to undefine this to be able to\n            # perform a canadian-cross build with mingw. Otherwise, the\n            # GMP configure scripts will not be called with the right options\n            HOST_GMP_ABI=\n        fi\n    fi\n\n    setup_ccache\n}\n\n# $1: Toolchain name\n#\nparse_toolchain_name ()\n{\n    TOOLCHAIN=$1\n    if [ -z \"$TOOLCHAIN\" ] ; then\n        echo \"ERROR: Missing toolchain name!\"\n        exit 1\n    fi\n\n    ABI_CFLAGS_FOR_TARGET=\n    ABI_CXXFLAGS_FOR_TARGET=\n\n    # Determine ABI based on toolchain name\n    #\n    case \"$TOOLCHAIN\" in\n    arm-linux-androideabi-*)\n        ARCH=\"arm\"\n        ABI=\"armeabi-v7a\"\n        ABI_CONFIGURE_TARGET=\"arm-linux-androideabi\"\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=armv5te\"\n        ;;\n    arm-eabi-*)\n        ARCH=\"arm\"\n        ABI=\"armeabi-v7a\"\n        ABI_CONFIGURE_TARGET=\"arm-eabi\"\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=armv5te --disable-gold --disable-libgomp\"\n        ;;\n    aarch64-linux-android-*)\n        ARCH=\"arm64\"\n        ABI=\"arm64-v8a\"\n        ABI_CONFIGURE_TARGET=\"aarch64-linux-android\"\n        ;;\n    x86-*)\n        ARCH=\"x86\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"x86\"\n        ABI_CONFIGURE_TARGET=\"i686-linux-android\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        ABI_CFLAGS_FOR_TARGET=\"-fPIC\"\n        ;;\n    x86_64-*)\n        ARCH=\"x86_64\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"x86_64\"\n        ABI_CONFIGURE_TARGET=\"x86_64-linux-android\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        ABI_CFLAGS_FOR_TARGET=\"-fPIC\"\n        ;;\n    mipsel*)\n        ARCH=\"mips\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"mips\"\n        ABI_CONFIGURE_TARGET=\"mipsel-linux-android\"\n        # Set default to mips32\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=mips32\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        # Add -fpic, because MIPS NDK will need to link .a into .so.\n        ABI_CFLAGS_FOR_TARGET=\"-fexceptions -fpic\"\n        ABI_CXXFLAGS_FOR_TARGET=\"-frtti -fpic\"\n        # Add --disable-fixed-point to disable fixed-point support\n        ABI_CONFIGURE_EXTRA_FLAGS=\"$ABI_CONFIGURE_EXTRA_FLAGS --disable-fixed-point\"\n        ;;\n    mips64el*)\n        ARCH=\"mips64\"\n        ABI=$ARCH\n        ABI_INSTALL_NAME=\"mips64\"\n        ABI_CONFIGURE_TARGET=\"mips64el-linux-android\"\n        # Set default to mips64r6\n        ABI_CONFIGURE_EXTRA_FLAGS=\"--with-arch=mips64r6\"\n        # Enable C++ exceptions, RTTI and GNU libstdc++ at the same time\n        # You can't really build these separately at the moment.\n        # Add -fpic, because MIPS NDK will need to link .a into .so.\n        ABI_CFLAGS_FOR_TARGET=\"-fexceptions -fpic\"\n        ABI_CXXFLAGS_FOR_TARGET=\"-frtti -fpic\"\n        # Add --disable-fixed-point to disable fixed-point support\n        ABI_CONFIGURE_EXTRA_FLAGS=\"$ABI_CONFIGURE_EXTRA_FLAGS --disable-fixed-point\"\n        ;;\n    * )\n        echo \"Invalid toolchain specified. Expected (arm-linux-androideabi-*|arm-eabi-*|x86-*|mipsel*|mips64el*)\"\n        echo \"\"\n        print_help\n        exit 1\n        ;;\n    esac\n\n    log \"Targetting CPU: $ARCH\"\n\n    GCC_VERSION=`expr -- \"$TOOLCHAIN\" : '.*-\\([0-9x\\.]*\\)'`\n    log \"Using GCC version: $GCC_VERSION\"\n\n    # Determine --host value when building gdbserver\n\n    case \"$TOOLCHAIN\" in\n    arm-*)\n        GDBSERVER_HOST=arm-eabi-linux\n        GDBSERVER_CFLAGS=\"-fno-short-enums\"\n        GDBSERVER_LDFLAGS=\n        ;;\n    aarch64-*)\n        GDBSERVER_HOST=aarch64-eabi-linux\n        GDBSERVER_CFLAGS=\"-fno-short-enums -DUAPI_HEADERS\"\n        GDBSERVER_LDFLAGS=\n        ;;\n    x86-*)\n        GDBSERVER_HOST=i686-linux-android\n        GDBSERVER_CFLAGS=\n        GDBSERVER_LDFLAGS=\n        ;;\n    x86_64-*)\n        GDBSERVER_HOST=x86_64-linux-android\n        GDBSERVER_CFLAGS=-DUAPI_HEADERS\n        GDBSERVER_LDFLAGS=\n        ;;\n    mipsel-*)\n        GDBSERVER_HOST=mipsel-linux-android\n        GDBSERVER_CFLAGS=\n        GDBSERVER_LDFLAGS=\n        ;;\n    mips64el-*)\n        GDBSERVER_HOST=mips64el-linux-android\n        GDBSERVER_CFLAGS=-DUAPI_HEADERS\n        GDBSERVER_LDFLAGS=\n        ;;\n    *)\n        echo \"Unknown TOOLCHAIN=$TOOLCHAIN\"\n        exit\n    esac\n}\n\n# Return the host \"tag\" used to identify prebuilt host binaries.\n# NOTE: Handles the case where '$MINGW = true' or '$DARWIN = true'\n# For now, valid values are: linux-x86, darwin-x86 and windows\nget_prebuilt_host_tag ()\n{\n    local RET=$HOST_TAG\n    if [ \"$MINGW\" = \"yes\" ]; then\n        if [ \"$TRY64\" = \"no\" ]; then\n            RET=windows\n        else\n            RET=windows-x86_64\n        fi\n    fi\n    if [ \"$DARWIN\" = \"yes\" ]; then\n        RET=darwin-x86_64  # let the following handles 32-bit case\n    fi\n    case $RET in\n        linux-*)\n            RET=linux-x86_64\n            ;;\n        darwin-*)\n            RET=darwin-x86_64\n            ;;\n    esac\n    echo $RET\n}\n\n# Return the executable suffix corresponding to host executables\nget_prebuilt_host_exe_ext ()\n{\n    if [ \"$MINGW\" = \"yes\" ]; then\n        echo \".exe\"\n    else\n        echo \"\"\n    fi\n}\n\n# Get library suffix for given ABI\n# $1: ABI\n# Return: .so or .bc\nget_lib_suffix_for_abi ()\n{\n    local ABI=$1\n    echo \".so\"\n}\n\n# Convert an ABI name into an Architecture name\n# $1: ABI name\n# Result: Arch name\nconvert_abi_to_arch ()\n{\n    local RET\n    local ABI=$1\n    case $ABI in\n        armeabi-v7a|armeabi-v7a-hard)\n            RET=arm\n            ;;\n        x86|mips|x86_64|mips64)\n            RET=$ABI\n            ;;\n        mips32r6)\n            RET=mips\n            ;;\n        arm64-v8a)\n            RET=arm64\n            ;;\n        *)\n            >&2 echo \"ERROR: Unsupported ABI name: $ABI, use one of: armeabi, armeabi-v7a, x86, mips, armeabi-v7a-hard, arm64-v8a, x86_64 or mips64\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n# Take architecture name as input, and output the list of corresponding ABIs\n# Inverse for convert_abi_to_arch\n# $1: ARCH name\n# Out: ABI names list (comma-separated)\nconvert_arch_to_abi ()\n{\n    local RET\n    local ARCH=$1\n    case $ARCH in\n        arm)\n            RET=armeabi-v7a,armeabi-v7a-hard\n            ;;\n        x86|x86_64|mips|mips64)\n            RET=$ARCH\n            ;;\n        arm64)\n            RET=arm64-v8a\n            ;;\n        *)\n            >&2 echo \"ERROR: Unsupported ARCH name: $ARCH, use one of: arm, x86, mips\"\n            exit 1\n            ;;\n    esac\n    echo \"$RET\"\n}\n\n# Take a list of architecture names as input, and output the list of corresponding ABIs\n# $1: ARCH names list (separated by spaces or commas)\n# Out: ABI names list (comma-separated)\nconvert_archs_to_abis ()\n{\n    local RET\n    for ARCH in $(commas_to_spaces $@); do\n       ABI=$(convert_arch_to_abi $ARCH)\n       if [ -n \"$ABI\" ]; then\n          if [ -n \"$RET\" ]; then\n             RET=$RET\",$ABI\"\n          else\n             RET=$ABI\n          fi\n       else   # Error message is printed by convert_arch_to_abi\n          exit 1\n       fi\n    done\n    echo \"$RET\"\n}\n\n# Return the default toolchain binary path prefix for given architecture and gcc version\n# For example: arm 4.8 -> toolchains/<system>/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-\n# $1: Architecture name\n# $2: GCC version\n# $3: optional, system name, defaults to $HOST_TAG\nget_toolchain_binprefix_for_arch ()\n{\n    local NAME PREFIX DIR BINPREFIX\n    local SYSTEM=${3:-$(get_prebuilt_host_tag)}\n    NAME=$(get_toolchain_name_for_arch $1 $2)\n    PREFIX=$(get_default_toolchain_prefix_for_arch $1)\n    DIR=$(get_toolchain_install . $NAME $SYSTEM)\n    BINPREFIX=${DIR#./}/bin/$PREFIX-\n    echo \"$BINPREFIX\"\n}\n\n# Return llvm toolchain binary path prefix for given llvm version\n# $1: optional, system name, defaults to $HOST_TAG\nget_llvm_toolchain_binprefix ()\n{\n    local NAME DIR BINPREFIX\n    local SYSTEM=${1:-$(get_prebuilt_host_tag)}\n    local VERSION=2629532\n    SYSTEM=${SYSTEM%_64} # Trim _64 suffix. We only have one LLVM.\n    BINPREFIX=$ANDROID_BUILD_TOP/prebuilts/clang/host/$SYSTEM/clang-$VERSION/bin\n    echo \"$BINPREFIX\"\n}\n\n# Return default API level for a given arch\n# This is the level used to build the toolchains.\n#\n# $1: Architecture name\nget_default_api_level_for_arch ()\n{\n    # For now, always build the toolchain against API level 9 for 32-bit arch\n    # and API level $FIRST_API64_LEVEL for 64-bit arch\n    case $1 in\n        *64) echo $FIRST_API64_LEVEL ;;\n        *) echo 9 ;;\n    esac\n}\n\n# Return the default platform sysroot corresponding to a given architecture\n# This is the sysroot used to build the toolchain and other binaries like\n# the STLport libraries.\n# $1: Architecture name\nget_default_platform_sysroot_for_arch ()\n{\n    local ARCH=$1\n    local LEVEL=$(get_default_api_level_for_arch $ARCH)\n\n    if [ \"$ARCH\" != \"${ARCH%%64*}\" ] ; then\n        LEVEL=$FIRST_API64_LEVEL\n    fi\n    echo \"platforms/android-$LEVEL/arch-$ARCH\"\n}\n\n# Return the default platform sysroot corresponding to a given abi\n# $1: ABI\nget_default_platform_sysroot_for_abi ()\n{\n    local ARCH=$(convert_abi_to_arch $1)\n    $(get_default_platform_sysroot_for_arch $ARCH)\n}\n\n# Return the default libs dir corresponding to a given architecture\n# $1: Architecture name\nget_default_libdir_for_arch ()\n{\n    case $1 in\n      x86_64|mips64) echo \"lib64\" ;;\n      arm64) echo \"lib\" ;; # return \"lib\" until aarch64 is built to look for sysroot/usr/lib64\n      *) echo \"lib\" ;;\n    esac\n}\n\n# Return the default libs dir corresponding to a given abi\n# $1: ABI\nget_default_libdir_for_abi ()\n{\n    local ARCH\n\n    case $1 in\n      mips32r6) echo \"libr6\" ;;\n      *)\n        local ARCH=$(convert_abi_to_arch $1)\n        echo \"$(get_default_libdir_for_arch $ARCH)\"\n        ;;\n    esac\n}\n\n# Return the host/build specific path for prebuilt toolchain binaries\n# relative to $1.\n#\n# $1: target root NDK directory\n# $2: toolchain name\n# $3: optional, host system name\n#\nget_toolchain_install ()\n{\n    local NDK=\"$1\"\n    shift\n    echo \"$NDK/$(get_toolchain_install_subdir \"$@\")\"\n}\n\n# $1: toolchain name\n# $2: optional, host system name\nget_toolchain_install_subdir ()\n{\n    local SYSTEM=${2:-$(get_prebuilt_host_tag)}\n    echo \"toolchains/$SYSTEM/$1\"\n}\n\n# Return the relative install prefix for prebuilt host\n# executables (relative to the NDK top directory).\n#\n# Out: relative path to prebuilt install prefix\nget_prebuilt_install_prefix ()\n{\n    echo \"host-tools\"\n}\n\n# Return the relative path of an installed prebuilt host\n# executable.\n#\n# $1: executable name\n# Out: path to prebuilt host executable, relative\nget_prebuilt_host_exec ()\n{\n    local PREFIX EXE\n    PREFIX=$(get_prebuilt_install_prefix)\n    EXE=$(get_prebuilt_host_exe_ext)\n    echo \"$PREFIX/bin/$1$EXE\"\n}\n\n# Return the name of a given host executable\n# $1: executable base name\n# Out: executable name, with optional suffix (e.g. .exe for windows)\nget_host_exec_name ()\n{\n    local EXE=$(get_prebuilt_host_exe_ext)\n    echo \"$1$EXE\"\n}\n\n# Return the directory where host-specific binaries are installed.\n# $1: target root NDK directory\nget_host_install ()\n{\n    echo \"$1/$(get_prebuilt_install_prefix)\"\n}\n\n# Set the toolchain target NDK location.\n# this sets TOOLCHAIN_PATH and TOOLCHAIN_PREFIX\n# $1: target NDK path\n# $2: toolchain name\nset_toolchain_ndk ()\n{\n    TOOLCHAIN_PATH=`get_toolchain_install \"$1\" $2`\n    log \"Using toolchain path: $TOOLCHAIN_PATH\"\n\n    TOOLCHAIN_PREFIX=$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET\n    log \"Using toolchain prefix: $TOOLCHAIN_PREFIX\"\n}\n\n# Check that a toolchain is properly installed at a target NDK location\n#\n# $1: target root NDK directory\n# $2: toolchain name\n#\ncheck_toolchain_install ()\n{\n    TOOLCHAIN_PATH=`get_toolchain_install \"$1\" $2`\n    if [ ! -d \"$TOOLCHAIN_PATH\" ] ; then\n        echo \"ERROR: Cannot find directory '$TOOLCHAIN_PATH'!\"\n        echo \"       Toolchain '$2' not installed in '$NDK_DIR'!\"\n        echo \"       Ensure that the toolchain has been installed there before.\"\n        exit 1\n    fi\n\n    set_toolchain_ndk $1 $2\n}\n\n# $1: toolchain source directory\ncheck_toolchain_src_dir ()\n{\n    local SRC_DIR=\"$1\"\n    if [ -z \"$SRC_DIR\" ]; then\n        echo \"ERROR: Please provide the path to the toolchain source tree. See --help\"\n        exit 1\n    fi\n\n    if [ ! -d \"$SRC_DIR\" ]; then\n        echo \"ERROR: Not a directory: '$SRC_DIR'\"\n        exit 1\n    fi\n\n    if [ ! -f \"$SRC_DIR/build/configure\" -o ! -d \"$SRC_DIR/gcc\" ]; then\n        echo \"ERROR: Either the file $SRC_DIR/build/configure or\"\n        echo \"       the directory $SRC_DIR/gcc does not exist.\"\n        echo \"This is not the top of a toolchain tree: $SRC_DIR\"\n        exit 1\n    fi\n}\n\nmake_repo_prop () {\n    local OUT_PATH=\"$1/repo.prop\"\n\n    # The build server generates a repo.prop file that contains the current SHAs\n    # of each project.\n    if [ -f $DIST_DIR/repo.prop ]; then\n        cp $DIST_DIR/repo.prop $OUT_PATH\n    else\n        # Generate our own if we're building locally.\n        pushd $ANDROID_NDK_ROOT\n        repo forall \\\n            -c 'echo $REPO_PROJECT $(git rev-parse HEAD)' > $OUT_PATH\n        popd\n    fi\n}\n\n#\n# The NDK_TMPDIR variable is used to specify a root temporary directory\n# when invoking toolchain build scripts. If it is not defined, we will\n# create one here, and export the value to ensure that any scripts we\n# call after that use the same one.\n#\nif [ -z \"$NDK_TMPDIR\" ]; then\n    NDK_TMPDIR=$TMPDIR/tmp/build-$$\n    mkdir -p $NDK_TMPDIR\n    if [ $? != 0 ]; then\n        echo \"ERROR: Could not create NDK_TMPDIR: $NDK_TMPDIR\"\n        exit 1\n    fi\n    export NDK_TMPDIR\nfi\n\n# Define HOST_TAG32, as the 32-bit version of HOST_TAG\n# We do this by replacing an -x86_64 suffix by -x86\nHOST_TAG32=$HOST_TAG\ncase $HOST_TAG32 in\n    *-x86_64)\n        HOST_TAG32=${HOST_TAG%%_64}\n        ;;\nesac\n"
  },
  {
    "path": "build/tools/regenerate-platforms",
    "content": "#!/bin/bash\n\ncd $(dirname $0)/../../ || exit 1\n\nNDK=$(pwd)\nexport NDK\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\necho \"=== Generating platforms headers and libraries...\"\nrun ./build/tools/gen-platforms.sh --fast-copy || exit 1\n\necho \"=== Patching sysroot...\"\nrun ./sources/crystax/bin/patch-sysroot --libraries || exit 1\n\necho \"=== Cleanup sysroot...\"\nrun find platforms -name 'libcrystax.*' -delete || exit 1\n\necho \"=== Check sysroot...\"\nrun ./tests/build/crystax-test-patched-sysroot/build.sh || exit 1\n\necho \"=== DONE\"\n"
  },
  {
    "path": "build/tools/toolchain-licenses/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year  name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "build/tools/toolchain-licenses/COPYING.LIB",
    "content": "\n                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n\t51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations\nbelow.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it\nbecomes a de-facto standard.  To achieve this, non-free programs must\nbe allowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control\ncompilation and installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at least\n    three years, to give the same user the materials specified in\n    Subsection 6a, above, for a charge no more than the cost of\n    performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply, and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License\nmay add an explicit geographical distribution limitation excluding those\ncountries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms\nof the ordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.\nIt is safest to attach them to the start of each source file to most\neffectively convey the exclusion of warranty; and each file should\nhave at least the \"copyright\" line and a pointer to where the full\nnotice is found.\n\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or\nyour school, if any, to sign a \"copyright disclaimer\" for the library,\nif necessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James\n  Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n\n\n"
  },
  {
    "path": "build/tools/toolchain-licenses/COPYING.RUNTIME",
    "content": "GCC RUNTIME LIBRARY EXCEPTION\n\nVersion 3.1, 31 March 2009\n\nCopyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\nThis GCC Runtime Library Exception (\"Exception\") is an additional\npermission under section 7 of the GNU General Public License, version\n3 (\"GPLv3\"). It applies to a given file (the \"Runtime Library\") that\nbears a notice placed by the copyright holder of the file stating that\nthe file is governed by GPLv3 along with this Exception.\n\nWhen you use GCC to compile a program, GCC may combine portions of\ncertain GCC header files and runtime libraries with the compiled\nprogram. The purpose of this Exception is to allow compilation of\nnon-GPL (including proprietary) programs to use, in this way, the\nheader files and runtime libraries covered by this Exception.\n\n0. Definitions.\n\nA file is an \"Independent Module\" if it either requires the Runtime\nLibrary for execution after a Compilation Process, or makes use of an\ninterface provided by the Runtime Library, but is not otherwise based\non the Runtime Library.\n\n\"GCC\" means a version of the GNU Compiler Collection, with or without\nmodifications, governed by version 3 (or a specified later version) of\nthe GNU General Public License (GPL) with the option of using any\nsubsequent versions published by the FSF.\n\n\"GPL-compatible Software\" is software whose conditions of propagation,\nmodification and use would permit combination with GCC in accord with\nthe license of GCC.\n\n\"Target Code\" refers to output from any compiler for a real or virtual\ntarget processor architecture, in executable form or suitable for\ninput to an assembler, loader, linker and/or execution\nphase. Notwithstanding that, Target Code does not include data in any\nformat that is used as a compiler intermediate representation, or used\nfor producing a compiler intermediate representation.\n\nThe \"Compilation Process\" transforms code entirely represented in\nnon-intermediate languages designed for human-written code, and/or in\nJava Virtual Machine byte code, into Target Code. Thus, for example,\nuse of source code generators and preprocessors need not be considered\npart of the Compilation Process, since the Compilation Process can be\nunderstood as starting with the output of the generators or\npreprocessors.\n\nA Compilation Process is \"Eligible\" if it is done using GCC, alone or\nwith other GPL-compatible software, or if it is done without using any\nwork based on GCC. For example, using non-GPL-compatible Software to\noptimize any GCC intermediate representations would not qualify as an\nEligible Compilation Process.\n\n1. Grant of Additional Permission.\n\nYou have permission to propagate a work of Target Code formed by\ncombining the Runtime Library with Independent Modules, even if such\npropagation would otherwise violate the terms of GPLv3, provided that\nall Target Code was generated by Eligible Compilation Processes. You\nmay then convey such a combination under terms of your choice,\nconsistent with the licensing of the Independent Modules.\n\n2. No Weakening of GCC Copyleft.\n\nThe availability of this Exception does not imply any general\npresumption that third-party software is unaffected by the copyleft\nrequirements of the license of GCC.\n\n"
  },
  {
    "path": "build/tools/toolchain-licenses/COPYING3",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "build/tools/toolchain-licenses/COPYING3.LIB",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions. \n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version. \n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "build/tools/unpack-build-cache",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n# include common function and variable definitions\n. $(dirname $0)/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Unpack prebuilt packages from cache.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build\"\n\nCACHE_DIR=/var/tmp/ndk-cache-$USER\nregister_var_option \"--cache-dir=<path>\" CACHE_DIR \"Specify build cache directory\"\n\nextract_parameters \"$@\"\n\ncd $NDK_DIR\nfail_panic \"Can't CD to $NDK_DIR\"\n\nfor f in $(ls -1 $CACHE_DIR/* 2>/dev/null | sort); do\n    printf \"=== [UNP] $f ... \"\n    case $f in\n        *.7z)\n            7z x $f >/dev/null\n            ;;\n        *.tar.bz2)\n            bzcat $f | tar xf -\n            test $? -eq 0 -a ${PIPESTATUS[0]} -eq 0\n            ;;\n        *.tar.xz)\n            xzcat $f | tar xf -\n            test $? -eq 0 -a ${PIPESTATUS[0]} -eq 0\n            ;;\n        *)\n            echo \"ERROR: Don't know how to unpack $f\" 1>&2\n            exit 1\n    esac\n    fail_panic \"Can't unpack $f\"\n\n    echo \"OK\"\ndone\n"
  },
  {
    "path": "build/tools/unwanted-symbols/arm/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__adddf3\n__addsf3\n__addvdi3\n__addvsi3\n__aeabi_cdcmpeq\n__aeabi_cdcmple\n__aeabi_cdrcmple\n__aeabi_cfcmpeq\n__aeabi_cfcmple\n__aeabi_cfrcmple\n__aeabi_d2f\n__aeabi_d2iz\n__aeabi_d2lz\n__aeabi_d2uiz\n__aeabi_d2ulz\n__aeabi_dadd\n__aeabi_dcmpeq\n__aeabi_dcmpge\n__aeabi_dcmpgt\n__aeabi_dcmple\n__aeabi_dcmplt\n__aeabi_dcmpun\n__aeabi_ddiv\n__aeabi_dmul\n__aeabi_dneg\n__aeabi_drsub\n__aeabi_dsub\n__aeabi_f2d\n__aeabi_f2iz\n__aeabi_f2lz\n__aeabi_f2uiz\n__aeabi_f2ulz\n__aeabi_fadd\n__aeabi_fcmpeq\n__aeabi_fcmpge\n__aeabi_fcmpgt\n__aeabi_fcmple\n__aeabi_fcmplt\n__aeabi_fcmpun\n__aeabi_fdiv\n__aeabi_fmul\n__aeabi_fneg\n__aeabi_frsub\n__aeabi_fsub\n__aeabi_i2d\n__aeabi_i2f\n__aeabi_idiv\n__aeabi_idiv0\n__aeabi_idivmod\n__aeabi_l2d\n__aeabi_l2f\n__aeabi_lasr\n__aeabi_lcmp\n__aeabi_ldiv0\n__aeabi_ldivmod\n__aeabi_llsl\n__aeabi_llsr\n__aeabi_lmul\n__aeabi_ui2d\n__aeabi_ui2f\n__aeabi_uidiv\n__aeabi_uidivmod\n__aeabi_ul2d\n__aeabi_ul2f\n__aeabi_ulcmp\n__aeabi_uldivmod\n__aeabi_unwind_cpp_pr0\n__aeabi_unwind_cpp_pr1\n__aeabi_unwind_cpp_pr2\n__aeabi_uread4\n__aeabi_uread8\n__aeabi_uwrite4\n__aeabi_uwrite8\n_arm_return\n_arm_return_r11\n_arm_return_r7\n__ashldi3\n__ashrdi3\n__bswapdi2\n__bswapsi2\n_call_via_fp\n_call_via_ip\n_call_via_lr\n_call_via_r0\n_call_via_r1\n_call_via_r2\n_call_via_r3\n_call_via_r4\n_call_via_r5\n_call_via_r6\n_call_via_r7\n_call_via_r8\n_call_via_r9\n_call_via_sl\n_call_via_sp\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdf2\n__cmpdi2\n__cmpsf2\n__ctzdi2\n__ctzsi2\n__div0\n__divdc3\n__divdf3\n__divdi3\n__divsc3\n__divsf3\n__divsi3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__extendsfdf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixdfsi\n__fixsfdi\n__fixsfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__floatdidf\n__floatdisf\n__floatsidf\n__floatsisf\n__floatundidf\n__floatundisf\n__floatunsidf\n__floatunsisf\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__gnu_addda3\n__gnu_adddq3\n__gnu_addha3\n__gnu_addhq3\n__gnu_addqq3\n__gnu_addsa3\n__gnu_addsq3\n__gnu_adduda3\n__gnu_addudq3\n__gnu_adduha3\n__gnu_adduhq3\n__gnu_adduqq3\n__gnu_addusa3\n__gnu_addusq3\n__gnu_ashlda3\n__gnu_ashldq3\n__gnu_ashlha3\n__gnu_ashlhelperda\n__gnu_ashlhelperdq\n__gnu_ashlhelperha\n__gnu_ashlhelperhq\n__gnu_ashlhelperqq\n__gnu_ashlhelpersa\n__gnu_ashlhelpersq\n__gnu_ashlhelperuda\n__gnu_ashlhelperudq\n__gnu_ashlhelperuha\n__gnu_ashlhelperuhq\n__gnu_ashlhelperuqq\n__gnu_ashlhelperusa\n__gnu_ashlhelperusq\n__gnu_ashlhq3\n__gnu_ashlqq3\n__gnu_ashlsa3\n__gnu_ashlsq3\n__gnu_ashluda3\n__gnu_ashludq3\n__gnu_ashluha3\n__gnu_ashluhq3\n__gnu_ashluqq3\n__gnu_ashlusa3\n__gnu_ashlusq3\n__gnu_ashrda3\n__gnu_ashrdq3\n__gnu_ashrha3\n__gnu_ashrhq3\n__gnu_ashrqq3\n__gnu_ashrsa3\n__gnu_ashrsq3\n__gnu_cmpda2\n__gnu_cmpdq2\n__gnu_cmpha2\n__gnu_cmphq2\n__gnu_cmpqq2\n__gnu_cmpsa2\n__gnu_cmpsq2\n__gnu_cmpuda2\n__gnu_cmpudq2\n__gnu_cmpuha2\n__gnu_cmpuhq2\n__gnu_cmpuqq2\n__gnu_cmpusa2\n__gnu_cmpusq2\n__gnu_divda3\n__gnu_divdq3\n__gnu_divha3\n__gnu_divhelperda\n__gnu_divhelperdq\n__gnu_divhelperha\n__gnu_divhelperhq\n__gnu_divhelperqq\n__gnu_divhelpersa\n__gnu_divhelpersq\n__gnu_divhelperuda\n__gnu_divhelperudq\n__gnu_divhelperuha\n__gnu_divhelperuhq\n__gnu_divhelperuqq\n__gnu_divhelperusa\n__gnu_divhelperusq\n__gnu_divhq3\n__gnu_divqq3\n__gnu_divsa3\n__gnu_divsq3\n__gnu_f2h_alternative\n__gnu_f2h_ieee\n__gnu_fractdadf\n__gnu_fractdadi\n__gnu_fractdadq\n__gnu_fractdaha2\n__gnu_fractdahi\n__gnu_fractdahq\n__gnu_fractdaqi\n__gnu_fractdaqq\n__gnu_fractdasa2\n__gnu_fractdasf\n__gnu_fractdasi\n__gnu_fractdasq\n__gnu_fractdauda\n__gnu_fractdaudq\n__gnu_fractdauha\n__gnu_fractdauhq\n__gnu_fractdauqq\n__gnu_fractdausa\n__gnu_fractdausq\n__gnu_fractdfda\n__gnu_fractdfdq\n__gnu_fractdfha\n__gnu_fractdfhq\n__gnu_fractdfqq\n__gnu_fractdfsa\n__gnu_fractdfsq\n__gnu_fractdfuda\n__gnu_fractdfudq\n__gnu_fractdfuha\n__gnu_fractdfuhq\n__gnu_fractdfuqq\n__gnu_fractdfusa\n__gnu_fractdfusq\n__gnu_fractdida\n__gnu_fractdidq\n__gnu_fractdiha\n__gnu_fractdihq\n__gnu_fractdiqq\n__gnu_fractdisa\n__gnu_fractdisq\n__gnu_fractdiuda\n__gnu_fractdiudq\n__gnu_fractdiuha\n__gnu_fractdiuhq\n__gnu_fractdiuqq\n__gnu_fractdiusa\n__gnu_fractdiusq\n__gnu_fractdqda\n__gnu_fractdqdf\n__gnu_fractdqdi\n__gnu_fractdqha\n__gnu_fractdqhi\n__gnu_fractdqhq2\n__gnu_fractdqqi\n__gnu_fractdqqq2\n__gnu_fractdqsa\n__gnu_fractdqsf\n__gnu_fractdqsi\n__gnu_fractdqsq2\n__gnu_fractdquda\n__gnu_fractdqudq\n__gnu_fractdquha\n__gnu_fractdquhq\n__gnu_fractdquqq\n__gnu_fractdqusa\n__gnu_fractdqusq\n__gnu_fracthada2\n__gnu_fracthadf\n__gnu_fracthadi\n__gnu_fracthadq\n__gnu_fracthahi\n__gnu_fracthahq\n__gnu_fracthaqi\n__gnu_fracthaqq\n__gnu_fracthasa2\n__gnu_fracthasf\n__gnu_fracthasi\n__gnu_fracthasq\n__gnu_fracthauda\n__gnu_fracthaudq\n__gnu_fracthauha\n__gnu_fracthauhq\n__gnu_fracthauqq\n__gnu_fracthausa\n__gnu_fracthausq\n__gnu_fracthida\n__gnu_fracthidq\n__gnu_fracthiha\n__gnu_fracthihq\n__gnu_fracthiqq\n__gnu_fracthisa\n__gnu_fracthisq\n__gnu_fracthiuda\n__gnu_fracthiudq\n__gnu_fracthiuha\n__gnu_fracthiuhq\n__gnu_fracthiuqq\n__gnu_fracthiusa\n__gnu_fracthiusq\n__gnu_fracthqda\n__gnu_fracthqdf\n__gnu_fracthqdi\n__gnu_fracthqdq2\n__gnu_fracthqha\n__gnu_fracthqhi\n__gnu_fracthqqi\n__gnu_fracthqqq2\n__gnu_fracthqsa\n__gnu_fracthqsf\n__gnu_fracthqsi\n__gnu_fracthqsq2\n__gnu_fracthquda\n__gnu_fracthqudq\n__gnu_fracthquha\n__gnu_fracthquhq\n__gnu_fracthquqq\n__gnu_fracthqusa\n__gnu_fracthqusq\n__gnu_fractqida\n__gnu_fractqidq\n__gnu_fractqiha\n__gnu_fractqihq\n__gnu_fractqiqq\n__gnu_fractqisa\n__gnu_fractqisq\n__gnu_fractqiuda\n__gnu_fractqiudq\n__gnu_fractqiuha\n__gnu_fractqiuhq\n__gnu_fractqiuqq\n__gnu_fractqiusa\n__gnu_fractqiusq\n__gnu_fractqqda\n__gnu_fractqqdf\n__gnu_fractqqdi\n__gnu_fractqqdq2\n__gnu_fractqqha\n__gnu_fractqqhi\n__gnu_fractqqhq2\n__gnu_fractqqqi\n__gnu_fractqqsa\n__gnu_fractqqsf\n__gnu_fractqqsi\n__gnu_fractqqsq2\n__gnu_fractqquda\n__gnu_fractqqudq\n__gnu_fractqquha\n__gnu_fractqquhq\n__gnu_fractqquqq\n__gnu_fractqqusa\n__gnu_fractqqusq\n__gnu_fractsada2\n__gnu_fractsadf\n__gnu_fractsadi\n__gnu_fractsadq\n__gnu_fractsaha2\n__gnu_fractsahi\n__gnu_fractsahq\n__gnu_fractsaqi\n__gnu_fractsaqq\n__gnu_fractsasf\n__gnu_fractsasi\n__gnu_fractsasq\n__gnu_fractsauda\n__gnu_fractsaudq\n__gnu_fractsauha\n__gnu_fractsauhq\n__gnu_fractsauqq\n__gnu_fractsausa\n__gnu_fractsausq\n__gnu_fractsfda\n__gnu_fractsfdq\n__gnu_fractsfha\n__gnu_fractsfhq\n__gnu_fractsfqq\n__gnu_fractsfsa\n__gnu_fractsfsq\n__gnu_fractsfuda\n__gnu_fractsfudq\n__gnu_fractsfuha\n__gnu_fractsfuhq\n__gnu_fractsfuqq\n__gnu_fractsfusa\n__gnu_fractsfusq\n__gnu_fractsida\n__gnu_fractsidq\n__gnu_fractsiha\n__gnu_fractsihq\n__gnu_fractsiqq\n__gnu_fractsisa\n__gnu_fractsisq\n__gnu_fractsiuda\n__gnu_fractsiudq\n__gnu_fractsiuha\n__gnu_fractsiuhq\n__gnu_fractsiuqq\n__gnu_fractsiusa\n__gnu_fractsiusq\n__gnu_fractsqda\n__gnu_fractsqdf\n__gnu_fractsqdi\n__gnu_fractsqdq2\n__gnu_fractsqha\n__gnu_fractsqhi\n__gnu_fractsqhq2\n__gnu_fractsqqi\n__gnu_fractsqqq2\n__gnu_fractsqsa\n__gnu_fractsqsf\n__gnu_fractsqsi\n__gnu_fractsquda\n__gnu_fractsqudq\n__gnu_fractsquha\n__gnu_fractsquhq\n__gnu_fractsquqq\n__gnu_fractsqusa\n__gnu_fractsqusq\n__gnu_fractudada\n__gnu_fractudadf\n__gnu_fractudadi\n__gnu_fractudadq\n__gnu_fractudaha\n__gnu_fractudahi\n__gnu_fractudahq\n__gnu_fractudaqi\n__gnu_fractudaqq\n__gnu_fractudasa\n__gnu_fractudasf\n__gnu_fractudasi\n__gnu_fractudasq\n__gnu_fractudaudq\n__gnu_fractudauha2\n__gnu_fractudauhq\n__gnu_fractudauqq\n__gnu_fractudausa2\n__gnu_fractudausq\n__gnu_fractudqda\n__gnu_fractudqdf\n__gnu_fractudqdi\n__gnu_fractudqdq\n__gnu_fractudqha\n__gnu_fractudqhi\n__gnu_fractudqhq\n__gnu_fractudqqi\n__gnu_fractudqqq\n__gnu_fractudqsa\n__gnu_fractudqsf\n__gnu_fractudqsi\n__gnu_fractudqsq\n__gnu_fractudquda\n__gnu_fractudquha\n__gnu_fractudquhq2\n__gnu_fractudquqq2\n__gnu_fractudqusa\n__gnu_fractudqusq2\n__gnu_fractuhada\n__gnu_fractuhadf\n__gnu_fractuhadi\n__gnu_fractuhadq\n__gnu_fractuhaha\n__gnu_fractuhahi\n__gnu_fractuhahq\n__gnu_fractuhaqi\n__gnu_fractuhaqq\n__gnu_fractuhasa\n__gnu_fractuhasf\n__gnu_fractuhasi\n__gnu_fractuhasq\n__gnu_fractuhauda2\n__gnu_fractuhaudq\n__gnu_fractuhauhq\n__gnu_fractuhauqq\n__gnu_fractuhausa2\n__gnu_fractuhausq\n__gnu_fractuhqda\n__gnu_fractuhqdf\n__gnu_fractuhqdi\n__gnu_fractuhqdq\n__gnu_fractuhqha\n__gnu_fractuhqhi\n__gnu_fractuhqhq\n__gnu_fractuhqqi\n__gnu_fractuhqqq\n__gnu_fractuhqsa\n__gnu_fractuhqsf\n__gnu_fractuhqsi\n__gnu_fractuhqsq\n__gnu_fractuhquda\n__gnu_fractuhqudq2\n__gnu_fractuhquha\n__gnu_fractuhquqq2\n__gnu_fractuhqusa\n__gnu_fractuhqusq2\n__gnu_fractunsdadi\n__gnu_fractunsdahi\n__gnu_fractunsdaqi\n__gnu_fractunsdasi\n__gnu_fractunsdida\n__gnu_fractunsdidq\n__gnu_fractunsdiha\n__gnu_fractunsdihq\n__gnu_fractunsdiqq\n__gnu_fractunsdisa\n__gnu_fractunsdisq\n__gnu_fractunsdiuda\n__gnu_fractunsdiudq\n__gnu_fractunsdiuha\n__gnu_fractunsdiuhq\n__gnu_fractunsdiuqq\n__gnu_fractunsdiusa\n__gnu_fractunsdiusq\n__gnu_fractunsdqdi\n__gnu_fractunsdqhi\n__gnu_fractunsdqqi\n__gnu_fractunsdqsi\n__gnu_fractunshadi\n__gnu_fractunshahi\n__gnu_fractunshaqi\n__gnu_fractunshasi\n__gnu_fractunshida\n__gnu_fractunshidq\n__gnu_fractunshiha\n__gnu_fractunshihq\n__gnu_fractunshiqq\n__gnu_fractunshisa\n__gnu_fractunshisq\n__gnu_fractunshiuda\n__gnu_fractunshiudq\n__gnu_fractunshiuha\n__gnu_fractunshiuhq\n__gnu_fractunshiuqq\n__gnu_fractunshiusa\n__gnu_fractunshiusq\n__gnu_fractunshqdi\n__gnu_fractunshqhi\n__gnu_fractunshqqi\n__gnu_fractunshqsi\n__gnu_fractunsqida\n__gnu_fractunsqidq\n__gnu_fractunsqiha\n__gnu_fractunsqihq\n__gnu_fractunsqiqq\n__gnu_fractunsqisa\n__gnu_fractunsqisq\n__gnu_fractunsqiuda\n__gnu_fractunsqiudq\n__gnu_fractunsqiuha\n__gnu_fractunsqiuhq\n__gnu_fractunsqiuqq\n__gnu_fractunsqiusa\n__gnu_fractunsqiusq\n__gnu_fractunsqqdi\n__gnu_fractunsqqhi\n__gnu_fractunsqqqi\n__gnu_fractunsqqsi\n__gnu_fractunssadi\n__gnu_fractunssahi\n__gnu_fractunssaqi\n__gnu_fractunssasi\n__gnu_fractunssida\n__gnu_fractunssidq\n__gnu_fractunssiha\n__gnu_fractunssihq\n__gnu_fractunssiqq\n__gnu_fractunssisa\n__gnu_fractunssisq\n__gnu_fractunssiuda\n__gnu_fractunssiudq\n__gnu_fractunssiuha\n__gnu_fractunssiuhq\n__gnu_fractunssiuqq\n__gnu_fractunssiusa\n__gnu_fractunssiusq\n__gnu_fractunssqdi\n__gnu_fractunssqhi\n__gnu_fractunssqqi\n__gnu_fractunssqsi\n__gnu_fractunsudadi\n__gnu_fractunsudahi\n__gnu_fractunsudaqi\n__gnu_fractunsudasi\n__gnu_fractunsudqdi\n__gnu_fractunsudqhi\n__gnu_fractunsudqqi\n__gnu_fractunsudqsi\n__gnu_fractunsuhadi\n__gnu_fractunsuhahi\n__gnu_fractunsuhaqi\n__gnu_fractunsuhasi\n__gnu_fractunsuhqdi\n__gnu_fractunsuhqhi\n__gnu_fractunsuhqqi\n__gnu_fractunsuhqsi\n__gnu_fractunsuqqdi\n__gnu_fractunsuqqhi\n__gnu_fractunsuqqqi\n__gnu_fractunsuqqsi\n__gnu_fractunsusadi\n__gnu_fractunsusahi\n__gnu_fractunsusaqi\n__gnu_fractunsusasi\n__gnu_fractunsusqdi\n__gnu_fractunsusqhi\n__gnu_fractunsusqqi\n__gnu_fractunsusqsi\n__gnu_fractuqqda\n__gnu_fractuqqdf\n__gnu_fractuqqdi\n__gnu_fractuqqdq\n__gnu_fractuqqha\n__gnu_fractuqqhi\n__gnu_fractuqqhq\n__gnu_fractuqqqi\n__gnu_fractuqqqq\n__gnu_fractuqqsa\n__gnu_fractuqqsf\n__gnu_fractuqqsi\n__gnu_fractuqqsq\n__gnu_fractuqquda\n__gnu_fractuqqudq2\n__gnu_fractuqquha\n__gnu_fractuqquhq2\n__gnu_fractuqqusa\n__gnu_fractuqqusq2\n__gnu_fractusada\n__gnu_fractusadf\n__gnu_fractusadi\n__gnu_fractusadq\n__gnu_fractusaha\n__gnu_fractusahi\n__gnu_fractusahq\n__gnu_fractusaqi\n__gnu_fractusaqq\n__gnu_fractusasa\n__gnu_fractusasf\n__gnu_fractusasi\n__gnu_fractusasq\n__gnu_fractusauda2\n__gnu_fractusaudq\n__gnu_fractusauha2\n__gnu_fractusauhq\n__gnu_fractusauqq\n__gnu_fractusausq\n__gnu_fractusqda\n__gnu_fractusqdf\n__gnu_fractusqdi\n__gnu_fractusqdq\n__gnu_fractusqha\n__gnu_fractusqhi\n__gnu_fractusqhq\n__gnu_fractusqqi\n__gnu_fractusqqq\n__gnu_fractusqsa\n__gnu_fractusqsf\n__gnu_fractusqsi\n__gnu_fractusqsq\n__gnu_fractusquda\n__gnu_fractusqudq2\n__gnu_fractusquha\n__gnu_fractusquhq2\n__gnu_fractusquqq2\n__gnu_fractusqusa\n__gnu_h2f_alternative\n__gnu_h2f_ieee\n__gnu_h2f_internal\n__gnu_ldivmod_helper\n__gnu_lshruda3\n__gnu_lshrudq3\n__gnu_lshruha3\n__gnu_lshruhq3\n__gnu_lshruqq3\n__gnu_lshrusa3\n__gnu_lshrusq3\n__gnu_mulda3\n__gnu_muldq3\n__gnu_mulha3\n__gnu_mulhelperda\n__gnu_mulhelperdq\n__gnu_mulhelperha\n__gnu_mulhelperhq\n__gnu_mulhelperqq\n__gnu_mulhelpersa\n__gnu_mulhelpersq\n__gnu_mulhelperuda\n__gnu_mulhelperudq\n__gnu_mulhelperuha\n__gnu_mulhelperuhq\n__gnu_mulhelperuqq\n__gnu_mulhelperusa\n__gnu_mulhelperusq\n__gnu_mulhq3\n__gnu_mulqq3\n__gnu_mulsa3\n__gnu_mulsq3\n__gnu_muluda3\n__gnu_muludq3\n__gnu_muluha3\n__gnu_muluhq3\n__gnu_muluqq3\n__gnu_mulusa3\n__gnu_mulusq3\n__gnu_negda2\n__gnu_negdq2\n__gnu_negha2\n__gnu_neghq2\n__gnu_negqq2\n__gnu_negsa2\n__gnu_negsq2\n__gnu_neguda2\n__gnu_negudq2\n__gnu_neguha2\n__gnu_neguhq2\n__gnu_neguqq2\n__gnu_negusa2\n__gnu_negusq2\n__gnu_satfractdadq\n__gnu_satfractdaha2\n__gnu_satfractdahq\n__gnu_satfractdaqq\n__gnu_satfractdasa2\n__gnu_satfractdasq\n__gnu_satfractdauda\n__gnu_satfractdaudq\n__gnu_satfractdauha\n__gnu_satfractdauhq\n__gnu_satfractdauqq\n__gnu_satfractdausa\n__gnu_satfractdausq\n__gnu_satfractdfda\n__gnu_satfractdfdq\n__gnu_satfractdfha\n__gnu_satfractdfhq\n__gnu_satfractdfqq\n__gnu_satfractdfsa\n__gnu_satfractdfsq\n__gnu_satfractdfuda\n__gnu_satfractdfudq\n__gnu_satfractdfuha\n__gnu_satfractdfuhq\n__gnu_satfractdfuqq\n__gnu_satfractdfusa\n__gnu_satfractdfusq\n__gnu_satfractdida\n__gnu_satfractdidq\n__gnu_satfractdiha\n__gnu_satfractdihq\n__gnu_satfractdiqq\n__gnu_satfractdisa\n__gnu_satfractdisq\n__gnu_satfractdiuda\n__gnu_satfractdiudq\n__gnu_satfractdiuha\n__gnu_satfractdiuhq\n__gnu_satfractdiuqq\n__gnu_satfractdiusa\n__gnu_satfractdiusq\n__gnu_satfractdqda\n__gnu_satfractdqha\n__gnu_satfractdqhq2\n__gnu_satfractdqqq2\n__gnu_satfractdqsa\n__gnu_satfractdqsq2\n__gnu_satfractdquda\n__gnu_satfractdqudq\n__gnu_satfractdquha\n__gnu_satfractdquhq\n__gnu_satfractdquqq\n__gnu_satfractdqusa\n__gnu_satfractdqusq\n__gnu_satfracthada2\n__gnu_satfracthadq\n__gnu_satfracthahq\n__gnu_satfracthaqq\n__gnu_satfracthasa2\n__gnu_satfracthasq\n__gnu_satfracthauda\n__gnu_satfracthaudq\n__gnu_satfracthauha\n__gnu_satfracthauhq\n__gnu_satfracthauqq\n__gnu_satfracthausa\n__gnu_satfracthausq\n__gnu_satfracthida\n__gnu_satfracthidq\n__gnu_satfracthiha\n__gnu_satfracthihq\n__gnu_satfracthiqq\n__gnu_satfracthisa\n__gnu_satfracthisq\n__gnu_satfracthiuda\n__gnu_satfracthiudq\n__gnu_satfracthiuha\n__gnu_satfracthiuhq\n__gnu_satfracthiuqq\n__gnu_satfracthiusa\n__gnu_satfracthiusq\n__gnu_satfracthqda\n__gnu_satfracthqdq2\n__gnu_satfracthqha\n__gnu_satfracthqqq2\n__gnu_satfracthqsa\n__gnu_satfracthqsq2\n__gnu_satfracthquda\n__gnu_satfracthqudq\n__gnu_satfracthquha\n__gnu_satfracthquhq\n__gnu_satfracthquqq\n__gnu_satfracthqusa\n__gnu_satfracthqusq\n__gnu_satfractqida\n__gnu_satfractqidq\n__gnu_satfractqiha\n__gnu_satfractqihq\n__gnu_satfractqiqq\n__gnu_satfractqisa\n__gnu_satfractqisq\n__gnu_satfractqiuda\n__gnu_satfractqiudq\n__gnu_satfractqiuha\n__gnu_satfractqiuhq\n__gnu_satfractqiuqq\n__gnu_satfractqiusa\n__gnu_satfractqiusq\n__gnu_satfractqqda\n__gnu_satfractqqdq2\n__gnu_satfractqqha\n__gnu_satfractqqhq2\n__gnu_satfractqqsa\n__gnu_satfractqqsq2\n__gnu_satfractqquda\n__gnu_satfractqqudq\n__gnu_satfractqquha\n__gnu_satfractqquhq\n__gnu_satfractqquqq\n__gnu_satfractqqusa\n__gnu_satfractqqusq\n__gnu_satfractsada2\n__gnu_satfractsadq\n__gnu_satfractsaha2\n__gnu_satfractsahq\n__gnu_satfractsaqq\n__gnu_satfractsasq\n__gnu_satfractsauda\n__gnu_satfractsaudq\n__gnu_satfractsauha\n__gnu_satfractsauhq\n__gnu_satfractsauqq\n__gnu_satfractsausa\n__gnu_satfractsausq\n__gnu_satfractsfda\n__gnu_satfractsfdq\n__gnu_satfractsfha\n__gnu_satfractsfhq\n__gnu_satfractsfqq\n__gnu_satfractsfsa\n__gnu_satfractsfsq\n__gnu_satfractsfuda\n__gnu_satfractsfudq\n__gnu_satfractsfuha\n__gnu_satfractsfuhq\n__gnu_satfractsfuqq\n__gnu_satfractsfusa\n__gnu_satfractsfusq\n__gnu_satfractsida\n__gnu_satfractsidq\n__gnu_satfractsiha\n__gnu_satfractsihq\n__gnu_satfractsiqq\n__gnu_satfractsisa\n__gnu_satfractsisq\n__gnu_satfractsiuda\n__gnu_satfractsiudq\n__gnu_satfractsiuha\n__gnu_satfractsiuhq\n__gnu_satfractsiuqq\n__gnu_satfractsiusa\n__gnu_satfractsiusq\n__gnu_satfractsqda\n__gnu_satfractsqdq2\n__gnu_satfractsqha\n__gnu_satfractsqhq2\n__gnu_satfractsqqq2\n__gnu_satfractsqsa\n__gnu_satfractsquda\n__gnu_satfractsqudq\n__gnu_satfractsquha\n__gnu_satfractsquhq\n__gnu_satfractsquqq\n__gnu_satfractsqusa\n__gnu_satfractsqusq\n__gnu_satfractudada\n__gnu_satfractudadq\n__gnu_satfractudaha\n__gnu_satfractudahq\n__gnu_satfractudaqq\n__gnu_satfractudasa\n__gnu_satfractudasq\n__gnu_satfractudaudq\n__gnu_satfractudauha2\n__gnu_satfractudauhq\n__gnu_satfractudauqq\n__gnu_satfractudausa2\n__gnu_satfractudausq\n__gnu_satfractudqda\n__gnu_satfractudqdq\n__gnu_satfractudqha\n__gnu_satfractudqhq\n__gnu_satfractudqqq\n__gnu_satfractudqsa\n__gnu_satfractudqsq\n__gnu_satfractudquda\n__gnu_satfractudquha\n__gnu_satfractudquhq2\n__gnu_satfractudquqq2\n__gnu_satfractudqusa\n__gnu_satfractudqusq2\n__gnu_satfractuhada\n__gnu_satfractuhadq\n__gnu_satfractuhaha\n__gnu_satfractuhahq\n__gnu_satfractuhaqq\n__gnu_satfractuhasa\n__gnu_satfractuhasq\n__gnu_satfractuhauda2\n__gnu_satfractuhaudq\n__gnu_satfractuhauhq\n__gnu_satfractuhauqq\n__gnu_satfractuhausa2\n__gnu_satfractuhausq\n__gnu_satfractuhqda\n__gnu_satfractuhqdq\n__gnu_satfractuhqha\n__gnu_satfractuhqhq\n__gnu_satfractuhqqq\n__gnu_satfractuhqsa\n__gnu_satfractuhqsq\n__gnu_satfractuhquda\n__gnu_satfractuhqudq2\n__gnu_satfractuhquha\n__gnu_satfractuhquqq2\n__gnu_satfractuhqusa\n__gnu_satfractuhqusq2\n__gnu_satfractunsdida\n__gnu_satfractunsdidq\n__gnu_satfractunsdiha\n__gnu_satfractunsdihq\n__gnu_satfractunsdiqq\n__gnu_satfractunsdisa\n__gnu_satfractunsdisq\n__gnu_satfractunsdiuda\n__gnu_satfractunsdiudq\n__gnu_satfractunsdiuha\n__gnu_satfractunsdiuhq\n__gnu_satfractunsdiuqq\n__gnu_satfractunsdiusa\n__gnu_satfractunsdiusq\n__gnu_satfractunshida\n__gnu_satfractunshidq\n__gnu_satfractunshiha\n__gnu_satfractunshihq\n__gnu_satfractunshiqq\n__gnu_satfractunshisa\n__gnu_satfractunshisq\n__gnu_satfractunshiuda\n__gnu_satfractunshiudq\n__gnu_satfractunshiuha\n__gnu_satfractunshiuhq\n__gnu_satfractunshiuqq\n__gnu_satfractunshiusa\n__gnu_satfractunshiusq\n__gnu_satfractunsqida\n__gnu_satfractunsqidq\n__gnu_satfractunsqiha\n__gnu_satfractunsqihq\n__gnu_satfractunsqiqq\n__gnu_satfractunsqisa\n__gnu_satfractunsqisq\n__gnu_satfractunsqiuda\n__gnu_satfractunsqiudq\n__gnu_satfractunsqiuha\n__gnu_satfractunsqiuhq\n__gnu_satfractunsqiuqq\n__gnu_satfractunsqiusa\n__gnu_satfractunsqiusq\n__gnu_satfractunssida\n__gnu_satfractunssidq\n__gnu_satfractunssiha\n__gnu_satfractunssihq\n__gnu_satfractunssiqq\n__gnu_satfractunssisa\n__gnu_satfractunssisq\n__gnu_satfractunssiuda\n__gnu_satfractunssiudq\n__gnu_satfractunssiuha\n__gnu_satfractunssiuhq\n__gnu_satfractunssiuqq\n__gnu_satfractunssiusa\n__gnu_satfractunssiusq\n__gnu_satfractuqqda\n__gnu_satfractuqqdq\n__gnu_satfractuqqha\n__gnu_satfractuqqhq\n__gnu_satfractuqqqq\n__gnu_satfractuqqsa\n__gnu_satfractuqqsq\n__gnu_satfractuqquda\n__gnu_satfractuqqudq2\n__gnu_satfractuqquha\n__gnu_satfractuqquhq2\n__gnu_satfractuqqusa\n__gnu_satfractuqqusq2\n__gnu_satfractusada\n__gnu_satfractusadq\n__gnu_satfractusaha\n__gnu_satfractusahq\n__gnu_satfractusaqq\n__gnu_satfractusasa\n__gnu_satfractusasq\n__gnu_satfractusauda2\n__gnu_satfractusaudq\n__gnu_satfractusauha2\n__gnu_satfractusauhq\n__gnu_satfractusauqq\n__gnu_satfractusausq\n__gnu_satfractusqda\n__gnu_satfractusqdq\n__gnu_satfractusqha\n__gnu_satfractusqhq\n__gnu_satfractusqqq\n__gnu_satfractusqsa\n__gnu_satfractusqsq\n__gnu_satfractusquda\n__gnu_satfractusqudq2\n__gnu_satfractusquha\n__gnu_satfractusquhq2\n__gnu_satfractusquqq2\n__gnu_satfractusqusa\n__gnu_saturate1ha\n__gnu_saturate1hq\n__gnu_saturate1qq\n__gnu_saturate1sa\n__gnu_saturate1sq\n__gnu_saturate1uha\n__gnu_saturate1uhq\n__gnu_saturate1uqq\n__gnu_saturate1usa\n__gnu_saturate1usq\n__gnu_saturate2da\n__gnu_saturate2dq\n__gnu_saturate2uda\n__gnu_saturate2udq\n__gnu_ssaddda3\n__gnu_ssadddq3\n__gnu_ssaddha3\n__gnu_ssaddhq3\n__gnu_ssaddqq3\n__gnu_ssaddsa3\n__gnu_ssaddsq3\n__gnu_ssashlda3\n__gnu_ssashldq3\n__gnu_ssashlha3\n__gnu_ssashlhq3\n__gnu_ssashlqq3\n__gnu_ssashlsa3\n__gnu_ssashlsq3\n__gnu_ssdivda3\n__gnu_ssdivdq3\n__gnu_ssdivha3\n__gnu_ssdivhq3\n__gnu_ssdivqq3\n__gnu_ssdivsa3\n__gnu_ssdivsq3\n__gnu_ssmulda3\n__gnu_ssmuldq3\n__gnu_ssmulha3\n__gnu_ssmulhq3\n__gnu_ssmulqq3\n__gnu_ssmulsa3\n__gnu_ssmulsq3\n__gnu_ssnegda2\n__gnu_ssnegdq2\n__gnu_ssnegha2\n__gnu_ssneghq2\n__gnu_ssnegqq2\n__gnu_ssnegsa2\n__gnu_ssnegsq2\n__gnu_sssubda3\n__gnu_sssubdq3\n__gnu_sssubha3\n__gnu_sssubhq3\n__gnu_sssubqq3\n__gnu_sssubsa3\n__gnu_sssubsq3\n__gnu_subda3\n__gnu_subdq3\n__gnu_subha3\n__gnu_subhq3\n__gnu_subqq3\n__gnu_subsa3\n__gnu_subsq3\n__gnu_subuda3\n__gnu_subudq3\n__gnu_subuha3\n__gnu_subuhq3\n__gnu_subuqq3\n__gnu_subusa3\n__gnu_subusq3\n__gnu_thumb1_case_shi\n__gnu_thumb1_case_si\n__gnu_thumb1_case_sqi\n__gnu_thumb1_case_uhi\n__gnu_thumb1_case_uqi\n__gnu_udivuda3\n__gnu_udivudq3\n__gnu_udivuha3\n__gnu_udivuhq3\n__gnu_udivuqq3\n__gnu_udivusa3\n__gnu_udivusq3\n__gnu_uldivmod_helper\n__gnu_Unwind_Backtrace\n__gnu_unwind_execute\n__gnu_Unwind_ForcedUnwind\n__gnu_unwind_frame\n__gnu_Unwind_RaiseException\n__gnu_Unwind_Restore_VFP\n__gnu_Unwind_Restore_VFP_D\n__gnu_Unwind_Restore_VFP_D_16_to_31\n__gnu_Unwind_Restore_WMMXC\n__gnu_Unwind_Restore_WMMXD\n__gnu_Unwind_Resume\n__gnu_Unwind_Resume_or_Rethrow\n__gnu_Unwind_Save_VFP\n__gnu_Unwind_Save_VFP_D\n__gnu_Unwind_Save_VFP_D_16_to_31\n__gnu_Unwind_Save_WMMXC\n__gnu_Unwind_Save_WMMXD\n__gnu_usadduda3\n__gnu_usaddudq3\n__gnu_usadduha3\n__gnu_usadduhq3\n__gnu_usadduqq3\n__gnu_usaddusa3\n__gnu_usaddusq3\n__gnu_usashluda3\n__gnu_usashludq3\n__gnu_usashluha3\n__gnu_usashluhq3\n__gnu_usashluqq3\n__gnu_usashlusa3\n__gnu_usashlusq3\n__gnu_usdivuda3\n__gnu_usdivudq3\n__gnu_usdivuha3\n__gnu_usdivuhq3\n__gnu_usdivuqq3\n__gnu_usdivusa3\n__gnu_usdivusq3\n__gnu_usmuluda3\n__gnu_usmuludq3\n__gnu_usmuluha3\n__gnu_usmuluhq3\n__gnu_usmuluqq3\n__gnu_usmulusa3\n__gnu_usmulusq3\n__gnu_usneguda2\n__gnu_usnegudq2\n__gnu_usneguha2\n__gnu_usneguhq2\n__gnu_usneguqq2\n__gnu_usnegusa2\n__gnu_usnegusq2\n__gnu_ussubuda3\n__gnu_ussubudq3\n__gnu_ussubuha3\n__gnu_ussubuhq3\n__gnu_ussubuqq3\n__gnu_ussubusa3\n__gnu_ussubusq3\n__gtdf2\n__gtsf2\n_interwork_call_via_fp\n_interwork_call_via_ip\n_interwork_call_via_lr\n_interwork_call_via_r0\n_interwork_call_via_r1\n_interwork_call_via_r2\n_interwork_call_via_r3\n_interwork_call_via_r4\n_interwork_call_via_r5\n_interwork_call_via_r6\n_interwork_call_via_r7\n_interwork_call_via_r8\n_interwork_call_via_r9\n_interwork_call_via_sl\n_interwork_call_via_sp\n_interwork_r11_call_via_fp\n_interwork_r11_call_via_ip\n_interwork_r11_call_via_r0\n_interwork_r11_call_via_r1\n_interwork_r11_call_via_r2\n_interwork_r11_call_via_r3\n_interwork_r11_call_via_r4\n_interwork_r11_call_via_r5\n_interwork_r11_call_via_r6\n_interwork_r11_call_via_r7\n_interwork_r11_call_via_r8\n_interwork_r11_call_via_r9\n_interwork_r11_call_via_sl\n_interwork_r11_call_via_sp\n_interwork_r7_call_via_fp\n_interwork_r7_call_via_ip\n_interwork_r7_call_via_r0\n_interwork_r7_call_via_r1\n_interwork_r7_call_via_r2\n_interwork_r7_call_via_r3\n_interwork_r7_call_via_r4\n_interwork_r7_call_via_r5\n_interwork_r7_call_via_r6\n_interwork_r7_call_via_r7\n_interwork_r7_call_via_r8\n_interwork_r7_call_via_r9\n_interwork_r7_call_via_sl\n_interwork_r7_call_via_sp\n__ledf2\n__lesf2\n__lshrdi3\n__ltdf2\n__ltsf2\n__moddi3\n__modsi3\n__muldc3\n__muldf3\n__muldi3\n__mulsc3\n__mulsf3\n__mulvdi3\n__mulvsi3\n__nedf2\n__negdf2\n__negdi2\n__negsf2\n__negvdi2\n__negvsi2\n__nesf2\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__restore_core_regs\nrestore_core_regs\n__subdf3\n__subsf3\n__subvdi3\n__subvsi3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_add_and_fetch_8\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_and_and_fetch_8\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_bool_compare_and_swap_8\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_add_8\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_and_8\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_nand_8\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_or_8\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_sub_8\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_fetch_and_xor_8\n__sync_lock_release_1\n__sync_lock_release_2\n__sync_lock_release_4\n__sync_lock_release_8\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_lock_test_and_set_8\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_nand_and_fetch_8\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_or_and_fetch_8\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_sub_and_fetch_8\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_val_compare_and_swap_8\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__sync_xor_and_fetch_8\n__truncdfsf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udivsi3\n__udiv_w_sdiv\n__umoddi3\n__umodsi3\n__unorddf2\n__unordsf2\n___Unwind_Backtrace\n_Unwind_Backtrace\n_Unwind_Complete\n_Unwind_DeleteException\n___Unwind_ForcedUnwind\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n___Unwind_RaiseException\n_Unwind_RaiseException\n___Unwind_Resume\n_Unwind_Resume\n___Unwind_Resume_or_Rethrow\n_Unwind_Resume_or_Rethrow\n_Unwind_VRS_Get\n_Unwind_VRS_Pop\n_Unwind_VRS_Set"
  },
  {
    "path": "build/tools/unwanted-symbols/arm/libgcc.a.variables.txt",
    "content": "__clz_tab\n__CTOR_LIST__\n__DTOR_LIST__\n__popcount_tab\n"
  },
  {
    "path": "build/tools/unwanted-symbols/arm64/libgcc.a.functions.txt",
    "content": "__aarch64_sync_cache_range\n__absvdi2\n__absvsi2\n__absvti2\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divsc3\n__divtc3\n__divtf3\n__divti3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__ffsdi2\n__ffsti2\n__fixdfti\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfti\n__fixunssfdi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__floatditf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floatunditf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__getf2\n__gttf2\n__letf2\n__lshrti3\n__lttf2\n__modti3\n__muldc3\n__mulsc3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__trunctfdf2\n__trunctfsf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/tools/unwanted-symbols/arm64/libgcc.a.variables.txt",
    "content": "__clz_tab\n__CTOR_LIST__\n__DTOR_LIST__\n__popcount_tab\n"
  },
  {
    "path": "build/tools/unwanted-symbols/mips/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__adddf3\n__addsf3\n__addvdi3\n__addvsi3\n__ashldi3\n__ashrdi3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdf2\n__cmpdi2\n__cmpsf2\n__ctzdi2\n__ctzsi2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divdf3\n__divdi3\n__divsc3\n__divsf3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__extendsfdf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixdfsi\n__fixsfdi\n__fixsfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__floatdidf\n__floatdisf\n__floatsidf\n__floatsisf\n__floatundidf\n__floatundisf\n__floatunsidf\n__floatunsisf\n__fpcmp_parts_d\n__fpcmp_parts_f\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__gnat_default_lock\n__gnat_default_unlock\n__gnat_install_locks\n__gtdf2\n__gthread_active_p\n__gthread_mutex_lock\n__gthread_mutex_unlock\n__gtsf2\n__ledf2\n__lesf2\n__lshrdi3\n__ltdf2\n__ltsf2\n__make_dp\n__make_fp\n__mips16_adddf3\n__mips16_addsf3\n__mips16_call_stub_1\n__mips16_call_stub_10\n__mips16_call_stub_2\n__mips16_call_stub_5\n__mips16_call_stub_6\n__mips16_call_stub_9\n__mips16_call_stub_dc_0\n__mips16_call_stub_dc_1\n__mips16_call_stub_dc_10\n__mips16_call_stub_dc_2\n__mips16_call_stub_dc_5\n__mips16_call_stub_dc_6\n__mips16_call_stub_dc_9\n__mips16_call_stub_df_0\n__mips16_call_stub_df_1\n__mips16_call_stub_df_10\n__mips16_call_stub_df_2\n__mips16_call_stub_df_5\n__mips16_call_stub_df_6\n__mips16_call_stub_df_9\n__mips16_call_stub_sc_0\n__mips16_call_stub_sc_1\n__mips16_call_stub_sc_10\n__mips16_call_stub_sc_2\n__mips16_call_stub_sc_5\n__mips16_call_stub_sc_6\n__mips16_call_stub_sc_9\n__mips16_call_stub_sf_0\n__mips16_call_stub_sf_1\n__mips16_call_stub_sf_10\n__mips16_call_stub_sf_2\n__mips16_call_stub_sf_5\n__mips16_call_stub_sf_6\n__mips16_call_stub_sf_9\n__mips16_divdf3\n__mips16_divsf3\n__mips16_eqdf2\n__mips16_eqsf2\n__mips16_extendsfdf2\n__mips16_fix_truncdfsi\n__mips16_fix_truncsfsi\n__mips16_floatsidf\n__mips16_floatsisf\n__mips16_floatunsidf\n__mips16_floatunsisf\n__mips16_gedf2\n__mips16_gesf2\n__mips16_gtdf2\n__mips16_gtsf2\n__mips16_ledf2\n__mips16_lesf2\n__mips16_ltdf2\n__mips16_ltsf2\n__mips16_muldf3\n__mips16_mulsf3\n__mips16_nedf2\n__mips16_nesf2\n__mips16_ret_dc\n__mips16_ret_df\n__mips16_ret_sc\n__mips16_ret_sf\n__mips16_subdf3\n__mips16_subsf3\n__mips16_truncdfsf2\n__mips16_unorddf2\n__mips16_unordsf2\n__moddi3\n__muldc3\n__muldf3\n__muldi3\n__mulsc3\n__mulsf3\n__mulvdi3\n__mulvsi3\n__nedf2\n__negdf2\n__negdi2\n__negsf2\n__negvdi2\n__negvsi2\n__nesf2\n__pack_d\n__pack_f\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__subdf3\n__subsf3\n__subvdi3\n__subvsi3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__truncdfsf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udiv_w_sdiv\n__umoddi3\n__unorddf2\n__unordsf2\n__unpack_d\n__unpack_f\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/tools/unwanted-symbols/mips/libgcc.a.variables.txt",
    "content": "__clz_tab\n__popcount_tab\n__thenan_df\n__thenan_sf\n"
  },
  {
    "path": "build/tools/unwanted-symbols/mips64/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__absvti2\n__adddf3\n__addsf3\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__divdc3\n__divdf3\n__divsc3\n__divsf3\n__divtc3\n__divtf3\n__divti3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqdf2\n__eqsf2\n__eqtf2\n__extenddftf2\n__extendsfdf2\n__extendsftf2\n__ffsdi2\n__ffsti2\n__fixdfdi\n__fixdfsi\n__fixdfti\n__fixsfdi\n__fixsfsi\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfsi\n__fixunsdfti\n__fixunssfdi\n__fixunssfsi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__floatdidf\n__floatdisf\n__floatditf\n__floatsidf\n__floatsisf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floatundidf\n__floatundisf\n__floatunditf\n__floatunsidf\n__floatunsisf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__gedf2\n__gesf2\n__getf2\n__gtdf2\n__gtsf2\n__gttf2\n__ledf2\n__lesf2\n__letf2\n__lshrti3\n__ltdf2\n__ltsf2\n__lttf2\n__modti3\n__muldc3\n__muldf3\n__mulsc3\n__mulsf3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__nedf2\n__negdf2\n__negsf2\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__nesf2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__subdf3\n__subsf3\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__sync_add_and_fetch_1\n__sync_add_and_fetch_2\n__sync_add_and_fetch_4\n__sync_add_and_fetch_8\n__sync_and_and_fetch_1\n__sync_and_and_fetch_2\n__sync_and_and_fetch_4\n__sync_and_and_fetch_8\n__sync_bool_compare_and_swap_1\n__sync_bool_compare_and_swap_2\n__sync_bool_compare_and_swap_4\n__sync_bool_compare_and_swap_8\n__sync_fetch_and_add_1\n__sync_fetch_and_add_2\n__sync_fetch_and_add_4\n__sync_fetch_and_add_8\n__sync_fetch_and_and_1\n__sync_fetch_and_and_2\n__sync_fetch_and_and_4\n__sync_fetch_and_and_8\n__sync_fetch_and_nand_1\n__sync_fetch_and_nand_2\n__sync_fetch_and_nand_4\n__sync_fetch_and_nand_8\n__sync_fetch_and_or_1\n__sync_fetch_and_or_2\n__sync_fetch_and_or_4\n__sync_fetch_and_or_8\n__sync_fetch_and_sub_1\n__sync_fetch_and_sub_2\n__sync_fetch_and_sub_4\n__sync_fetch_and_sub_8\n__sync_fetch_and_xor_1\n__sync_fetch_and_xor_2\n__sync_fetch_and_xor_4\n__sync_fetch_and_xor_8\n__sync_lock_test_and_set_1\n__sync_lock_test_and_set_2\n__sync_lock_test_and_set_4\n__sync_lock_test_and_set_8\n__sync_nand_and_fetch_1\n__sync_nand_and_fetch_2\n__sync_nand_and_fetch_4\n__sync_nand_and_fetch_8\n__sync_or_and_fetch_1\n__sync_or_and_fetch_2\n__sync_or_and_fetch_4\n__sync_or_and_fetch_8\n__sync_sub_and_fetch_1\n__sync_sub_and_fetch_2\n__sync_sub_and_fetch_4\n__sync_sub_and_fetch_8\n__sync_synchronize\n__sync_val_compare_and_swap_1\n__sync_val_compare_and_swap_2\n__sync_val_compare_and_swap_4\n__sync_val_compare_and_swap_8\n__sync_xor_and_fetch_1\n__sync_xor_and_fetch_2\n__sync_xor_and_fetch_4\n__sync_xor_and_fetch_8\n__truncdfsf2\n__trunctfdf2\n__trunctfsf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unorddf2\n__unordsf2\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n"
  },
  {
    "path": "build/tools/unwanted-symbols/mips64/libgcc.a.variables.txt",
    "content": "__clz_tab\n__popcount_tab\n"
  },
  {
    "path": "build/tools/unwanted-symbols/x86/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__addtf3\n__addvdi3\n__addvsi3\n__alloca\n__ashldi3\n__ashrdi3\n__bid128_abs\n__bid128_add\n__bid128_class\n__bid128_copy\n__bid128_copySign\n__bid128dd_add\n__bid128ddd_fma\n__bid128dd_div\n__bid128dd_mul\n__bid128ddq_fma\n__bid128dd_sub\n__bid128_div\n__bid128dq_add\n__bid128dqd_fma\n__bid128dq_div\n__bid128dq_mul\n__bid128dqq_fma\n__bid128dq_sub\n__bid128_fma\n__bid128_from_int32\n__bid128_from_int64\n__bid128_from_uint32\n__bid128_from_uint64\n__bid128_isCanonical\n__bid128_isFinite\n__bid128_isInf\n__bid128_isNaN\n__bid128_isNormal\n__bid128_isSignaling\n__bid128_isSigned\n__bid128_isSubnormal\n__bid128_isZero\n__bid128_mul\n__bid128_negate\n__bid128qd_add\n__bid128qdd_fma\n__bid128qd_div\n__bid128qd_mul\n__bid128qdq_fma\n__bid128qd_sub\n__bid128qqd_fma\n__bid128_quiet_equal\n__bid128_quiet_greater\n__bid128_quiet_greater_equal\n__bid128_quiet_greater_unordered\n__bid128_quiet_less\n__bid128_quiet_less_equal\n__bid128_quiet_less_unordered\n__bid128_quiet_not_equal\n__bid128_quiet_not_greater\n__bid128_quiet_not_less\n__bid128_quiet_ordered\n__bid128_quiet_unordered\n__bid128_radix\n__bid128_sameQuantum\n__bid128_signaling_greater\n__bid128_signaling_greater_equal\n__bid128_signaling_greater_unordered\n__bid128_signaling_less\n__bid128_signaling_less_equal\n__bid128_signaling_less_unordered\n__bid128_signaling_not_greater\n__bid128_signaling_not_less\n__bid128_sub\n__bid128_to_bid32\n__bid128_to_bid64\n__bid128_to_binary128\n__bid128_to_binary32\n__bid128_to_binary64\n__bid128_to_binary80\n__bid128_to_int32_ceil\n__bid128_to_int32_floor\n__bid128_to_int32_int\n__bid128_to_int32_rnint\n__bid128_to_int32_rninta\n__bid128_to_int32_xceil\n__bid128_to_int32_xfloor\n__bid128_to_int32_xint\n__bid128_to_int32_xrnint\n__bid128_to_int32_xrninta\n__bid128_to_int64_ceil\n__bid128_to_int64_floor\n__bid128_to_int64_int\n__bid128_to_int64_rnint\n__bid128_to_int64_rninta\n__bid128_to_int64_xceil\n__bid128_to_int64_xfloor\n__bid128_to_int64_xint\n__bid128_to_int64_xrnint\n__bid128_to_int64_xrninta\n__bid128_totalOrder\n__bid128_totalOrderMag\n__bid128_to_uint32_ceil\n__bid128_to_uint32_floor\n__bid128_to_uint32_int\n__bid128_to_uint32_rnint\n__bid128_to_uint32_rninta\n__bid128_to_uint32_xceil\n__bid128_to_uint32_xfloor\n__bid128_to_uint32_xint\n__bid128_to_uint32_xrnint\n__bid128_to_uint32_xrninta\n__bid128_to_uint64_ceil\n__bid128_to_uint64_floor\n__bid128_to_uint64_int\n__bid128_to_uint64_rnint\n__bid128_to_uint64_rninta\n__bid128_to_uint64_xceil\n__bid128_to_uint64_xfloor\n__bid128_to_uint64_xint\n__bid128_to_uint64_xrnint\n__bid128_to_uint64_xrninta\n__bid32_to_bid128\n__bid32_to_bid64\n__bid32_to_binary128\n__bid32_to_binary32\n__bid32_to_binary64\n__bid32_to_binary80\n__bid64_abs\n__bid64_add\n__bid64_class\n__bid64_copy\n__bid64_copySign\n__bid64ddq_fma\n__bid64_div\n__bid64dq_add\n__bid64dqd_fma\n__bid64dq_div\n__bid64dq_mul\n__bid64dqq_fma\n__bid64dq_sub\n__bid64_from_int32\n__bid64_from_int64\n__bid64_from_uint32\n__bid64_from_uint64\n__bid64_isCanonical\n__bid64_isFinite\n__bid64_isInf\n__bid64_isNaN\n__bid64_isNormal\n__bid64_isSignaling\n__bid64_isSigned\n__bid64_isSubnormal\n__bid64_isZero\n__bid64_mul\n__bid64_negate\n__bid64qd_add\n__bid64qdd_fma\n__bid64qd_div\n__bid64qd_mul\n__bid64qdq_fma\n__bid64qd_sub\n__bid64qq_add\n__bid64qqd_fma\n__bid64qq_div\n__bid64qq_mul\n__bid64qqq_fma\n__bid64qq_sub\n__bid64_quiet_equal\n__bid64_quiet_greater\n__bid64_quiet_greater_equal\n__bid64_quiet_greater_unordered\n__bid64_quiet_less\n__bid64_quiet_less_equal\n__bid64_quiet_less_unordered\n__bid64_quiet_not_equal\n__bid64_quiet_not_greater\n__bid64_quiet_not_less\n__bid64_quiet_ordered\n__bid64_quiet_unordered\n__bid64_radix\n__bid64_sameQuantum\n__bid64_signaling_greater\n__bid64_signaling_greater_equal\n__bid64_signaling_greater_unordered\n__bid64_signaling_less\n__bid64_signaling_less_equal\n__bid64_signaling_less_unordered\n__bid64_signaling_not_greater\n__bid64_signaling_not_less\n__bid64_sub\n__bid64_to_bid128\n__bid64_to_bid32\n__bid64_to_binary128\n__bid64_to_binary32\n__bid64_to_binary64\n__bid64_to_binary80\n__bid64_to_int32_ceil\n__bid64_to_int32_floor\n__bid64_to_int32_int\n__bid64_to_int32_rnint\n__bid64_to_int32_rninta\n__bid64_to_int32_xceil\n__bid64_to_int32_xfloor\n__bid64_to_int32_xint\n__bid64_to_int32_xrnint\n__bid64_to_int32_xrninta\n__bid64_to_int64_ceil\n__bid64_to_int64_floor\n__bid64_to_int64_int\n__bid64_to_int64_rnint\n__bid64_to_int64_rninta\n__bid64_to_int64_xceil\n__bid64_to_int64_xfloor\n__bid64_to_int64_xint\n__bid64_to_int64_xrnint\n__bid64_to_int64_xrninta\n__bid64_totalOrder\n__bid64_totalOrderMag\n__bid64_to_uint32_ceil\n__bid64_to_uint32_floor\n__bid64_to_uint32_int\n__bid64_to_uint32_rnint\n__bid64_to_uint32_rninta\n__bid64_to_uint32_xceil\n__bid64_to_uint32_xfloor\n__bid64_to_uint32_xint\n__bid64_to_uint32_xrnint\n__bid64_to_uint32_xrninta\n__bid64_to_uint64_ceil\n__bid64_to_uint64_floor\n__bid64_to_uint64_int\n__bid64_to_uint64_rnint\n__bid64_to_uint64_rninta\n__bid64_to_uint64_xceil\n__bid64_to_uint64_xfloor\n__bid64_to_uint64_xint\n__bid64_to_uint64_xrnint\n__bid64_to_uint64_xrninta\n__bid_adddd3\n__bid_addsd3\n__bid_addtd3\n__bid_divdd3\n__bid_divsd3\n__bid_divtd3\n__bid_eqdd2\n__bid_eqsd2\n__bid_eqtd2\n__bid_extendddtd2\n__bid_extendddtf\n__bid_extendddxf\n__bid_extenddfdd\n__bid_extenddftd\n__bid_extendsddd2\n__bid_extendsddf\n__bid_extendsdtd2\n__bid_extendsdtf\n__bid_extendsdxf\n__bid_extendsfdd\n__bid_extendsfsd\n__bid_extendsftd\n__bid_extendtftd\n__bid_extendxftd\n__bid_fixdddi\n__bid_fixddsi\n__bid_fixsddi\n__bid_fixsdsi\n__bid_fixtddi\n__bid_fixtdsi\n__bid_fixunsdddi\n__bid_fixunsddsi\n__bid_fixunssddi\n__bid_fixunssdsi\n__bid_fixunstddi\n__bid_fixunstdsi\n__bid_floatdidd\n__bid_floatdisd\n__bid_floatditd\n__bid_floatsidd\n__bid_floatsisd\n__bid_floatsitd\n__bid_floatunsdidd\n__bid_floatunsdisd\n__bid_floatunsditd\n__bid_floatunssidd\n__bid_floatunssisd\n__bid_floatunssitd\n__bid_gedd2\n__bid_gesd2\n__bid_getd2\n__bid_gtdd2\n__bid_gtsd2\n__bid_gttd2\n__bid_ledd2\n__bid_lesd2\n__bid_letd2\n__bid_ltdd2\n__bid_ltsd2\n__bid_lttd2\n__bid_muldd3\n__bid_mulsd3\n__bid_multd3\n__bid_nedd2\n__bid_nesd2\n__bid_netd2\n__bid_round128_19_38\n__bid_round192_39_57\n__bid_round256_58_76\n__bid_round64_2_18\n__bid_subdd3\n__bid_subsd3\n__bid_subtd3\n__bid_truncdddf\n__bid_truncddsd2\n__bid_truncddsf\n__bid_truncdfsd\n__bid_truncsdsf\n__bid_trunctddd2\n__bid_trunctddf\n__bid_trunctdsd2\n__bid_trunctdsf\n__bid_trunctdtf\n__bid_trunctdxf\n__bid_trunctfdd\n__bid_trunctfsd\n__bid_truncxfdd\n__bid_truncxfsd\n__bid_unorddd2\n__bid_unordsd2\n__bid_unordtd2\n__binary128_to_bid128\n__binary128_to_bid32\n__binary128_to_bid64\n__binary32_to_bid128\n__binary32_to_bid32\n__binary32_to_bid64\n__binary64_to_bid128\n__binary64_to_bid32\n__binary64_to_bid64\n__binary80_to_bid128\n__binary80_to_bid32\n__binary80_to_bid64\n__bswapdi2\n__bswapsi2\n___chkstk\n__clear_cache\n__clrsbdi2\n__clrsbsi2\n__clzdi2\n__clzsi2\n__cmpdi2\n__copysigntf3\n__cpu_indicator_init\n__ctzdi2\n__ctzsi2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__dfp_clear_except\n__dfp_get_round\n__dfp_raise_except\n__dfp_set_round\n__dfp_test_except\n__divdc3\n__divdi3\n__divsc3\n__divtc3\n__divtf3\n__divxc3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__extendxftf2\n__fabstf2\n__ffsdi2\n__ffssi2\n__fixdfdi\n__fixsfdi\n__fixtfdi\n__fixtfsi\n__fixunsdfdi\n__fixunsdfsi\n__fixunssfdi\n__fixunssfsi\n__fixunstfdi\n__fixunstfsi\n__fixunsxfdi\n__fixunsxfsi\n__fixxfdi\n__floatdidf\n__floatdisf\n__floatditf\n__floatdixf\n__floatsitf\n__floatundidf\n__floatundisf\n__floatunditf\n__floatundixf\n__floatunsitf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__generic_findstack\n__generic_morestack\n__generic_morestack_set_initial_sp\n__generic_releasestack\n__getf2\n__gnat_default_lock\n__gnat_default_unlock\n__gnat_install_locks\n__gthread_active_p\n__gthread_mutex_lock\n__gthread_mutex_unlock\n__gttf2\nisinfd128\nisinfd32\nisinfd64\n__letf2\n__lshrdi3\n__lttf2\n__moddi3\n__morestack\n__morestack_allocate_stack_space\n__morestack_block_signals\n__morestack_fail\n__morestack_get_guard\n__morestack_load_mmap\n__morestack_make_guard\n__morestack_non_split\n__morestack_release_segments\n__morestack_set_guard\n__morestack_unblock_signals\n__muldc3\n__muldi3\n__mulsc3\n__multc3\n__multf3\n__mulvdi3\n__mulvsi3\n__mulxc3\n__negdi2\n__negtf2\n__negvdi2\n__negvsi2\n__netf2\n__paritydi2\n__paritysi2\n__popcountdi2\n__popcountsi2\n__powidf2\n__powisf2\n__powitf2\n__powixf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__splitstack_block_signals\n__splitstack_block_signals_context\n__splitstack_find\n__splitstack_find_context\n__splitstack_getcontext\n__splitstack_makecontext\n__splitstack_releasecontext\n__splitstack_resetcontext\n__splitstack_setcontext\n__stack_split_initialize\n__subtf3\n__subvdi3\n__subvsi3\n__trunctfdf2\n__trunctfsf2\n__trunctfxf2\n__ucmpdi2\n__udivdi3\n__udivmoddi4\n__udiv_w_sdiv\n__umoddi3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n__wrap_pthread_create\n__x86.get_pc_thunk.bx\n__x86.get_pc_thunk.cx\n"
  },
  {
    "path": "build/tools/unwanted-symbols/x86/libgcc.a.variables.txt",
    "content": "__bid_char_table2\n__bid_char_table3\n__bid_convert_table\n__bid_estimate_bin_expon\n__bid_estimate_decimal_digits\n__bid_Ex128m128\n__bid_Ex192m192\n__bid_Ex256m256\n__bid_Ex64m64\n__bid_factors\n__bid_half128\n__bid_half192\n__bid_half256\n__bid_half64\n__bid_IDEC_glbflags\n__bid_IDEC_glbround\n__bid_Kx128\n__bid_Kx192\n__bid_Kx256\n__bid_Kx64\n__bid_mask128\n__bid_mask192\n__bid_mask256\n__bid_mask64\n__bid_maskhigh128\n__bid_maskhigh128M\n__bid_maskhigh192M\n__bid_maskhigh256M\n__bid_midpoint128\n__bid_midpoint192\n__bid_midpoint256\n__bid_midpoint64\n__bid_nr_digits\n__bid_onehalf128\n__bid_onehalf128M\n__bid_onehalf192M\n__bid_onehalf256M\n__bid_packed_10000_zeros\n__bid_power10_index_binexp\n__bid_power10_index_binexp_128\n__bid_power10_table_128\n__bid_reciprocals10_128\n__bid_reciprocals10_64\n__bid_recip_scale\n__bid_round_const_table\n__bid_round_const_table_128\n__bid_shiftright128\n__bid_shiftright128M\n__bid_shiftright192M\n__bid_shiftright256M\n__bid_shift_ten2m3k128\n__bid_shift_ten2m3k64\n__bid_short_recip_scale\n__bid_ten2k128\n__bid_ten2k256\n__bid_ten2k64\n__bid_ten2m3k128\n__bid_ten2m3k64\n__bid_ten2mk128\n__bid_ten2mk128M\n__bid_ten2mk128trunc\n__bid_ten2mk128truncM\n__bid_ten2mk192M\n__bid_ten2mk192truncM\n__bid_ten2mk256M\n__bid_ten2mk256truncM\n__bid_ten2mk64\n__bid_ten2mxtrunc128\n__bid_ten2mxtrunc192\n__bid_ten2mxtrunc256\n__bid_ten2mxtrunc64\n__clz_tab\n__cpu_features\n__cpu_model\nDW.ref.__gcc_personality_v0\n__emutls_v.__morestack_current_segment\n__emutls_v.__morestack_initial_sp\n__emutls_v.__morestack_segments\n__popcount_tab\n"
  },
  {
    "path": "build/tools/unwanted-symbols/x86_64/libgcc.a.functions.txt",
    "content": "__absvdi2\n__absvsi2\n__absvti2\n__addtf3\n__addvdi3\n__addvsi3\n__addvti3\n__ashlti3\n__ashrti3\n__bid128_abs\n__bid128_add\n__bid128_class\n__bid128_copy\n__bid128_copySign\n__bid128dd_add\n__bid128ddd_fma\n__bid128dd_div\n__bid128dd_mul\n__bid128ddq_fma\n__bid128dd_sub\n__bid128_div\n__bid128dq_add\n__bid128dqd_fma\n__bid128dq_div\n__bid128dq_mul\n__bid128dqq_fma\n__bid128dq_sub\n__bid128_fma\n__bid128_from_int32\n__bid128_from_int64\n__bid128_from_uint32\n__bid128_from_uint64\n__bid128_isCanonical\n__bid128_isFinite\n__bid128_isInf\n__bid128_isNaN\n__bid128_isNormal\n__bid128_isSignaling\n__bid128_isSigned\n__bid128_isSubnormal\n__bid128_isZero\n__bid128_mul\n__bid128_negate\n__bid128qd_add\n__bid128qdd_fma\n__bid128qd_div\n__bid128qd_mul\n__bid128qdq_fma\n__bid128qd_sub\n__bid128qqd_fma\n__bid128_quiet_equal\n__bid128_quiet_greater\n__bid128_quiet_greater_equal\n__bid128_quiet_greater_unordered\n__bid128_quiet_less\n__bid128_quiet_less_equal\n__bid128_quiet_less_unordered\n__bid128_quiet_not_equal\n__bid128_quiet_not_greater\n__bid128_quiet_not_less\n__bid128_quiet_ordered\n__bid128_quiet_unordered\n__bid128_radix\n__bid128_sameQuantum\n__bid128_signaling_greater\n__bid128_signaling_greater_equal\n__bid128_signaling_greater_unordered\n__bid128_signaling_less\n__bid128_signaling_less_equal\n__bid128_signaling_less_unordered\n__bid128_signaling_not_greater\n__bid128_signaling_not_less\n__bid128_sub\n__bid128_to_bid32\n__bid128_to_bid64\n__bid128_to_binary128\n__bid128_to_binary32\n__bid128_to_binary64\n__bid128_to_binary80\n__bid128_to_int32_ceil\n__bid128_to_int32_floor\n__bid128_to_int32_int\n__bid128_to_int32_rnint\n__bid128_to_int32_rninta\n__bid128_to_int32_xceil\n__bid128_to_int32_xfloor\n__bid128_to_int32_xint\n__bid128_to_int32_xrnint\n__bid128_to_int32_xrninta\n__bid128_to_int64_ceil\n__bid128_to_int64_floor\n__bid128_to_int64_int\n__bid128_to_int64_rnint\n__bid128_to_int64_rninta\n__bid128_to_int64_xceil\n__bid128_to_int64_xfloor\n__bid128_to_int64_xint\n__bid128_to_int64_xrnint\n__bid128_to_int64_xrninta\n__bid128_totalOrder\n__bid128_totalOrderMag\n__bid128_to_uint32_ceil\n__bid128_to_uint32_floor\n__bid128_to_uint32_int\n__bid128_to_uint32_rnint\n__bid128_to_uint32_rninta\n__bid128_to_uint32_xceil\n__bid128_to_uint32_xfloor\n__bid128_to_uint32_xint\n__bid128_to_uint32_xrnint\n__bid128_to_uint32_xrninta\n__bid128_to_uint64_ceil\n__bid128_to_uint64_floor\n__bid128_to_uint64_int\n__bid128_to_uint64_rnint\n__bid128_to_uint64_rninta\n__bid128_to_uint64_xceil\n__bid128_to_uint64_xfloor\n__bid128_to_uint64_xint\n__bid128_to_uint64_xrnint\n__bid128_to_uint64_xrninta\n__bid32_to_bid128\n__bid32_to_bid64\n__bid32_to_binary128\n__bid32_to_binary32\n__bid32_to_binary64\n__bid32_to_binary80\n__bid64_abs\n__bid64_add\n__bid64_class\n__bid64_copy\n__bid64_copySign\n__bid64ddq_fma\n__bid64_div\n__bid64dq_add\n__bid64dqd_fma\n__bid64dq_div\n__bid64dq_mul\n__bid64dqq_fma\n__bid64dq_sub\n__bid64_from_int32\n__bid64_from_int64\n__bid64_from_uint32\n__bid64_from_uint64\n__bid64_isCanonical\n__bid64_isFinite\n__bid64_isInf\n__bid64_isNaN\n__bid64_isNormal\n__bid64_isSignaling\n__bid64_isSigned\n__bid64_isSubnormal\n__bid64_isZero\n__bid64_mul\n__bid64_negate\n__bid64qd_add\n__bid64qdd_fma\n__bid64qd_div\n__bid64qd_mul\n__bid64qdq_fma\n__bid64qd_sub\n__bid64qq_add\n__bid64qqd_fma\n__bid64qq_div\n__bid64qq_mul\n__bid64qqq_fma\n__bid64qq_sub\n__bid64_quiet_equal\n__bid64_quiet_greater\n__bid64_quiet_greater_equal\n__bid64_quiet_greater_unordered\n__bid64_quiet_less\n__bid64_quiet_less_equal\n__bid64_quiet_less_unordered\n__bid64_quiet_not_equal\n__bid64_quiet_not_greater\n__bid64_quiet_not_less\n__bid64_quiet_ordered\n__bid64_quiet_unordered\n__bid64_radix\n__bid64_sameQuantum\n__bid64_signaling_greater\n__bid64_signaling_greater_equal\n__bid64_signaling_greater_unordered\n__bid64_signaling_less\n__bid64_signaling_less_equal\n__bid64_signaling_less_unordered\n__bid64_signaling_not_greater\n__bid64_signaling_not_less\n__bid64_sub\n__bid64_to_bid128\n__bid64_to_bid32\n__bid64_to_binary128\n__bid64_to_binary32\n__bid64_to_binary64\n__bid64_to_binary80\n__bid64_to_int32_ceil\n__bid64_to_int32_floor\n__bid64_to_int32_int\n__bid64_to_int32_rnint\n__bid64_to_int32_rninta\n__bid64_to_int32_xceil\n__bid64_to_int32_xfloor\n__bid64_to_int32_xint\n__bid64_to_int32_xrnint\n__bid64_to_int32_xrninta\n__bid64_to_int64_ceil\n__bid64_to_int64_floor\n__bid64_to_int64_int\n__bid64_to_int64_rnint\n__bid64_to_int64_rninta\n__bid64_to_int64_xceil\n__bid64_to_int64_xfloor\n__bid64_to_int64_xint\n__bid64_to_int64_xrnint\n__bid64_to_int64_xrninta\n__bid64_totalOrder\n__bid64_totalOrderMag\n__bid64_to_uint32_ceil\n__bid64_to_uint32_floor\n__bid64_to_uint32_int\n__bid64_to_uint32_rnint\n__bid64_to_uint32_rninta\n__bid64_to_uint32_xceil\n__bid64_to_uint32_xfloor\n__bid64_to_uint32_xint\n__bid64_to_uint32_xrnint\n__bid64_to_uint32_xrninta\n__bid64_to_uint64_ceil\n__bid64_to_uint64_floor\n__bid64_to_uint64_int\n__bid64_to_uint64_rnint\n__bid64_to_uint64_rninta\n__bid64_to_uint64_xceil\n__bid64_to_uint64_xfloor\n__bid64_to_uint64_xint\n__bid64_to_uint64_xrnint\n__bid64_to_uint64_xrninta\n__bid_adddd3\n__bid_addsd3\n__bid_addtd3\n__bid_divdd3\n__bid_divsd3\n__bid_divtd3\n__bid_eqdd2\n__bid_eqsd2\n__bid_eqtd2\n__bid_extendddtd2\n__bid_extendddtf\n__bid_extendddxf\n__bid_extenddfdd\n__bid_extenddftd\n__bid_extendsddd2\n__bid_extendsddf\n__bid_extendsdtd2\n__bid_extendsdtf\n__bid_extendsdxf\n__bid_extendsfdd\n__bid_extendsfsd\n__bid_extendsftd\n__bid_extendtftd\n__bid_extendxftd\n__bid_fixdddi\n__bid_fixddsi\n__bid_fixsddi\n__bid_fixsdsi\n__bid_fixtddi\n__bid_fixtdsi\n__bid_fixunsdddi\n__bid_fixunsddsi\n__bid_fixunssddi\n__bid_fixunssdsi\n__bid_fixunstddi\n__bid_fixunstdsi\n__bid_floatdidd\n__bid_floatdisd\n__bid_floatditd\n__bid_floatsidd\n__bid_floatsisd\n__bid_floatsitd\n__bid_floatunsdidd\n__bid_floatunsdisd\n__bid_floatunsditd\n__bid_floatunssidd\n__bid_floatunssisd\n__bid_floatunssitd\n__bid_gedd2\n__bid_gesd2\n__bid_getd2\n__bid_gtdd2\n__bid_gtsd2\n__bid_gttd2\n__bid_ledd2\n__bid_lesd2\n__bid_letd2\n__bid_ltdd2\n__bid_ltsd2\n__bid_lttd2\n__bid_muldd3\n__bid_mulsd3\n__bid_multd3\n__bid_nedd2\n__bid_nesd2\n__bid_netd2\n__bid_round128_19_38\n__bid_round192_39_57\n__bid_round256_58_76\n__bid_round64_2_18\n__bid_subdd3\n__bid_subsd3\n__bid_subtd3\n__bid_truncdddf\n__bid_truncddsd2\n__bid_truncddsf\n__bid_truncdfsd\n__bid_truncsdsf\n__bid_trunctddd2\n__bid_trunctddf\n__bid_trunctdsd2\n__bid_trunctdsf\n__bid_trunctdtf\n__bid_trunctdxf\n__bid_trunctfdd\n__bid_trunctfsd\n__bid_truncxfdd\n__bid_truncxfsd\n__bid_unorddd2\n__bid_unordsd2\n__bid_unordtd2\n__binary128_to_bid128\n__binary128_to_bid32\n__binary128_to_bid64\n__binary32_to_bid128\n__binary32_to_bid32\n__binary32_to_bid64\n__binary64_to_bid128\n__binary64_to_bid32\n__binary64_to_bid64\n__binary80_to_bid128\n__binary80_to_bid32\n__binary80_to_bid64\n__bswapdi2\n__bswapsi2\n__clear_cache\n__clrsbdi2\n__clrsbti2\n__clzdi2\n__clzti2\n__cmpti2\n__cpu_indicator_init\n__ctzdi2\n__ctzti2\n__deregister_frame\n__deregister_frame_info\n__deregister_frame_info_bases\n__dfp_clear_except\n__dfp_get_round\n__dfp_raise_except\n__dfp_set_round\n__dfp_test_except\n__divdc3\n__divsc3\n__divtc3\n__divtf3\n__divti3\n__divxc3\n__emutls_get_address\n__emutls_register_common\n__enable_execute_stack\n__eprintf\n__eqtf2\n__extenddftf2\n__extendsftf2\n__extendxftf2\n__ffsdi2\n__ffsti2\n__fixdfti\n__fixsfti\n__fixtfdi\n__fixtfsi\n__fixtfti\n__fixunsdfdi\n__fixunsdfti\n__fixunssfdi\n__fixunssfti\n__fixunstfdi\n__fixunstfsi\n__fixunstfti\n__fixunsxfdi\n__fixunsxfti\n__fixxfti\n__floatditf\n__floatsitf\n__floattidf\n__floattisf\n__floattitf\n__floattixf\n__floatunditf\n__floatunsitf\n__floatuntidf\n__floatuntisf\n__floatuntitf\n__floatuntixf\n__frame_state_for\n__gcc_bcmp\n__gcc_personality_v0\n__generic_findstack\n__generic_morestack\n__generic_morestack_set_initial_sp\n__generic_releasestack\n__getf2\n__gttf2\nisinfd128\nisinfd32\nisinfd64\n__letf2\n__lshrti3\n__lttf2\n__modti3\n__morestack\n__morestack_allocate_stack_space\n__morestack_block_signals\n__morestack_fail\n__morestack_get_guard\n__morestack_large_model\n__morestack_load_mmap\n__morestack_make_guard\n__morestack_non_split\n__morestack_release_segments\n__morestack_set_guard\n__morestack_unblock_signals\n__muldc3\n__mulsc3\n__multc3\n__multf3\n__multi3\n__mulvdi3\n__mulvsi3\n__mulvti3\n__mulxc3\n__negtf2\n__negti2\n__negvdi2\n__negvsi2\n__negvti2\n__netf2\n__paritydi2\n__parityti2\n__popcountdi2\n__popcountti2\n__powidf2\n__powisf2\n__powitf2\n__powixf2\n__register_frame\n__register_frame_info\n__register_frame_info_bases\n__register_frame_info_table\n__register_frame_info_table_bases\n__register_frame_table\n__sfp_handle_exceptions\n__splitstack_block_signals\n__splitstack_block_signals_context\n__splitstack_find\n__splitstack_find_context\n__splitstack_getcontext\n__splitstack_makecontext\n__splitstack_releasecontext\n__splitstack_resetcontext\n__splitstack_setcontext\n__stack_split_initialize\n__subtf3\n__subvdi3\n__subvsi3\n__subvti3\n__trunctfdf2\n__trunctfsf2\n__trunctfxf2\n__ucmpti2\n__udivmodti4\n__udivti3\n__udiv_w_sdiv\n__umodti3\n__unordtf2\n_Unwind_Backtrace\n_Unwind_DeleteException\n_Unwind_FindEnclosingFunction\n_Unwind_Find_FDE\n_Unwind_ForcedUnwind\n_Unwind_GetCFA\n_Unwind_GetDataRelBase\n_Unwind_GetGR\n_Unwind_GetIP\n_Unwind_GetIPInfo\n_Unwind_GetLanguageSpecificData\n_Unwind_GetRegionStart\n_Unwind_GetTextRelBase\n_Unwind_RaiseException\n_Unwind_Resume\n_Unwind_Resume_or_Rethrow\n_Unwind_SetGR\n_Unwind_SetIP\n__wrap_pthread_create\n"
  },
  {
    "path": "build/tools/unwanted-symbols/x86_64/libgcc.a.variables.txt",
    "content": "__bid_char_table2\n__bid_char_table3\n__bid_convert_table\n__bid_estimate_bin_expon\n__bid_estimate_decimal_digits\n__bid_Ex128m128\n__bid_Ex192m192\n__bid_Ex256m256\n__bid_Ex64m64\n__bid_factors\n__bid_half128\n__bid_half192\n__bid_half256\n__bid_half64\n__bid_IDEC_glbflags\n__bid_IDEC_glbround\n__bid_Kx128\n__bid_Kx192\n__bid_Kx256\n__bid_Kx64\n__bid_mask128\n__bid_mask192\n__bid_mask256\n__bid_mask64\n__bid_maskhigh128\n__bid_maskhigh128M\n__bid_maskhigh192M\n__bid_maskhigh256M\n__bid_midpoint128\n__bid_midpoint192\n__bid_midpoint256\n__bid_midpoint64\n__bid_nr_digits\n__bid_onehalf128\n__bid_onehalf128M\n__bid_onehalf192M\n__bid_onehalf256M\n__bid_packed_10000_zeros\n__bid_power10_index_binexp\n__bid_power10_index_binexp_128\n__bid_power10_table_128\n__bid_reciprocals10_128\n__bid_reciprocals10_64\n__bid_recip_scale\n__bid_round_const_table\n__bid_round_const_table_128\n__bid_shiftright128\n__bid_shiftright128M\n__bid_shiftright192M\n__bid_shiftright256M\n__bid_shift_ten2m3k128\n__bid_shift_ten2m3k64\n__bid_short_recip_scale\n__bid_ten2k128\n__bid_ten2k256\n__bid_ten2k64\n__bid_ten2m3k128\n__bid_ten2m3k64\n__bid_ten2mk128\n__bid_ten2mk128M\n__bid_ten2mk128trunc\n__bid_ten2mk128truncM\n__bid_ten2mk192M\n__bid_ten2mk192truncM\n__bid_ten2mk256M\n__bid_ten2mk256truncM\n__bid_ten2mk64\n__bid_ten2mxtrunc128\n__bid_ten2mxtrunc192\n__bid_ten2mxtrunc256\n__bid_ten2mxtrunc64\n__clz_tab\n__cpu_model\nDW.ref.__gcc_personality_v0\n__emutls_v.__morestack_current_segment\n__emutls_v.__morestack_initial_sp\n__emutls_v.__morestack_segments\n__popcount_tab\n"
  },
  {
    "path": "build/tools/update-build-cache",
    "content": "#!/usr/bin/env ruby\n\nrequire 'optparse'\nrequire 'open3'\nrequire 'fileutils'\nrequire 'digest'\n\ncase RUBY_PLATFORM\nwhen /(cygwin|mingw|win32)/\n    HOST_OS = :windows\nwhen /linux/\n    HOST_OS = :linux\nwhen /darwin/\n    HOST_OS = :darwin\nelse\n    $stderr.puts \"ERROR: Unsupported host platform: #{RUBY_PLATFORM}\"\n    exit 1\nend\n\n$stdout.sync = true\n$stderr.sync = true\n\nOPTIONS = {}\nOPTIONS[:targets] = [HOST_OS, 'android']\nOPTIONS[:cachedir] = \"/var/tmp/ndk-cache-#{ENV['USER']}\"\n\noptparser = OptionParser.new do |o|\n    o.on(\"-h\", \"--help\", \"Show help screen and exit\") do\n        $stdout.puts o\n        exit 0\n    end\n\n    o.on(\"-bN\", \"--build-number=N\", Integer, \"CrystaX NDK build number [autodetect]\") do |n|\n        OPTIONS[:build_number] = n\n    end\n\n    o.on(\"--targets=LIST\", Array, \"List of host OS to update cache for [#{OPTIONS[:targets].join(',')}]\") do |t|\n        OPTIONS[:targets] = t\n    end\n\n    o.on(\"--cache-dir=PATH\", \"Path to build cache directory [#{OPTIONS[:cachedir]}]\") do |c|\n        OPTIONS[:cachedir] = c\n    end\n\n    o.on(\"--check\", \"Run in CHECK mode - i.e. only check if cache is up-to-date and exit\") do |c|\n        OPTIONS[:check] = c\n    end\nend\nENV['POSIXLY_CORRECT'] = '1'\noptparser.parse!(ARGV)\n\nTARGETS = OPTIONS[:targets]\n$stdout.puts \"=== Updating cache for: #{TARGETS.join(',')}\"\n\nif OPTIONS[:build_number].nil?\n    $stdout.puts \"=== Detecting latest NDK build number...\"\n    url = \"https://dl.crystax.net/ndk/#{HOST_OS}/latest\"\n    o,e,s = Open3.capture3(\"curl -fSL #{url}\")\n    if !s.success?\n        $stderr.puts \"ERROR: Can't autodetect latest build number:\\n\\n#{e}\"\n        exit 1\n    end\n\n    bnum = o.chomp.split(\"\\n\").first.to_i\n    (1..10).each do\n        begin\n            TARGETS.each do |target|\n                _,_,s = Open3.capture3(\"curl -fSL https://dl.crystax.net/cache/#{bnum}/#{target}/checksum.sha256\")\n                raise \"NO CHECKSUM\" unless s.success?\n            end\n        rescue\n            $stdout.puts \"=== Build ##{bnum}: incomplete, trying previous one...\"\n            bnum -= 1\n            next\n        end\n        $stdout.puts \"=== Build ##{bnum}: OK\"\n        OPTIONS[:build_number] = bnum\n        break\n    end\n    if OPTIONS[:build_number].nil?\n        $stderr.puts \"ERROR: Can't detect latest NDK build number\"\n        exit 1\n    end\nend\nBNUM = OPTIONS[:build_number]\n$stdout.puts \"=== Using build number: #{BNUM}\"\n\nCACHEDIR = OPTIONS[:cachedir]\nCHECK = OPTIONS[:check]\n\ndef files(target, bnum)\n    baseurl = \"https://dl.crystax.net/cache/#{bnum}/#{target}\"\n    o,e,s = Open3.capture3(\"curl -fSL #{baseurl}/checksum.sha256\")\n    if !s.success?\n        $stderr.puts e\n        $stderr.puts \"ERROR: Can't get checksums for #{target}/##{bnum} cache files\"\n        exit 1\n    end\n\n    fs = []\n    o.split(\"\\n\").each do |line|\n        next unless line =~ /^SHA256\\(([^\\)]+)\\)\\s*=\\s*(\\S+)\\s*$/\n        fs << {file: $1, sha256: $2, url: \"#{baseurl}/#{$1}\"}\n    end\n    fs\nend\n\ndef checksum(file)\n    d = Digest::SHA256.new\n    File.open(file, 'rb') do |f|\n        while buf = f.read(64*1024*1024)\n            d.update buf\n        end\n    end\n    d.hexdigest\nrescue\n    nil\nend\n\ndef update\n    fls = []\n    TARGETS.each do |t|\n        fls += files(t, BNUM)\n    end\n\n    FileUtils.mkdir_p CACHEDIR\n\n    Dir.glob(File.join(CACHEDIR, '*')).each do |cf|\n        next unless fls.index { |f| f[:file] == File.basename(cf) }.nil?\n        $stdout.puts \"=== [DEL] #{cf}\"\n        FileUtils.rm_f cf\n    end unless CHECK\n\n    fls.sort { |a,b| a[:file] <=> b[:file] }.each do |f|\n        dst = File.join(CACHEDIR, f[:file])\n\n        $stdout.write \"=== [CHK] #{dst} ... \"\n        if checksum(dst) == f[:sha256]\n            $stdout.puts \"OK\"\n            next\n        end\n\n        $stdout.puts \"OUTDATED\"\n\n        return false if CHECK\n\n        attempt = 0\n        begin\n            FileUtils.rm_f dst\n\n            Open3.popen3(\"curl -SL -o #{dst} #{f[:url]}\") do |ii,oo,ee,tt|\n                ii.close\n                oo.close\n\n                while !ee.eof?\n                    ios, = IO.select([ee])\n                    ios.each do |io|\n                        c = io.read_nonblock(4096) rescue nil\n                        next if c.nil?\n\n                        $stderr.write c\n                    end\n                end\n\n                raise \"curl failed\" unless tt.value.success?\n            end\n\n            raise \"corrupted file\" if checksum(dst) != f[:sha256]\n        rescue => e\n            FileUtils.rm_f dst\n\n            attempt += 1\n            wt = attempt * 5\n\n            if attempt <= 3\n                $stderr.puts \"WARNING: Can't download #{f[:url]} (attempt ##{attempt}): #{e.message}; try again in #{wt} seconds\"\n                sleep(wt)\n                retry\n            else\n                $stderr.puts \"ERROR: Can't download #{f[:url]}\"\n                exit 1\n            end\n        end\n    end\n\n    true\nend\n\nbegin\n    r = update\n    $stdout.puts \"=== #{r ? \"UP-TO-DATE\" : \"OUT-OF-DATE\"}\" if CHECK\n    exit 1 unless r\nrescue Interrupt\n    $stderr.puts \"INTERRUPTED\"\n    exit 1\nend\n"
  },
  {
    "path": "checkbuild.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Verifies that the build is sane.\n\nCleans old build artifacts, configures the required environment, determines\nbuild goals, and invokes the build scripts.\n\"\"\"\nfrom __future__ import print_function\n\nimport argparse\nimport collections\nimport inspect\nimport os\nimport shutil\nimport site\nimport subprocess\nimport sys\nimport tempfile\nimport textwrap\n\nimport config\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), 'build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n# Importing tests.runners requires that adb can be imported.\nsite.addsitedir(build_support.android_path('development/python-packages'))\n\nimport tests.runners\nimport tests.printers\n\n\nALL_MODULES = {\n    'build',\n    'clang',\n    'cpufeatures',\n    'gabi++',\n    'gcc',\n    'gdbserver',\n    'gnustl',\n    'gtest',\n    'host-tools',\n    'libandroid_support',\n    'libc++',\n    'libc++abi',\n    'libshaderc',\n    'native_app_glue',\n    'ndk_helper',\n    'platforms',\n    'python-packages',\n    'shader_tools',\n    'stlport',\n    'system-stl',\n    'vulkan',\n}\n\n\nclass ArgParser(argparse.ArgumentParser):\n    def __init__(self):\n        super(ArgParser, self).__init__(\n            description=inspect.getdoc(sys.modules[__name__]))\n\n        self.add_argument(\n            '--arch',\n            choices=('arm', 'arm64', 'mips', 'mips64', 'x86', 'x86_64'),\n            help='Build for the given architecture. Build all by default.')\n\n        package_group = self.add_mutually_exclusive_group()\n        package_group.add_argument(\n            '--package', action='store_true', dest='package', default=True,\n            help='Package the NDK when done building (default).')\n        package_group.add_argument(\n            '--no-package', action='store_false', dest='package',\n            help='Do not package the NDK when done building.')\n        package_group.add_argument(\n            '--force-package', action='store_true', dest='force_package',\n            help='Force a package even if only building a subset of modules.')\n\n        test_group = self.add_mutually_exclusive_group()\n        test_group.add_argument(\n            '--test', action='store_true', dest='test', default=True,\n            help=textwrap.dedent(\"\"\"\\\n            Run host tests when finished. --package is required. Not supported\n            when targeting Windows.\n            \"\"\"))\n        test_group.add_argument(\n            '--no-test', action='store_false', dest='test',\n            help='Do not run host tests when finished.')\n\n        self.add_argument(\n            '--build-number', help='Build number for use in version files.')\n        self.add_argument(\n            '--release', help='Ignored. Temporarily compatibility.')\n\n        self.add_argument(\n            '--system', choices=('darwin', 'linux', 'windows', 'windows64'),\n            default=build_support.get_default_host(),\n            help='Build for the given OS.')\n\n        module_group = self.add_mutually_exclusive_group()\n\n        module_group.add_argument(\n            '--module', choices=sorted(ALL_MODULES),\n            help='NDK modules to build.')\n\n        module_group.add_argument(\n            '--host-only', action='store_true',\n            help='Skip building target components.')\n\n\ndef _invoke_build(script, args):\n    if args is None:\n        args = []\n    subprocess.check_call([build_support.android_path(script)] + args)\n\n\ndef invoke_build(script, args=None):\n    script_path = os.path.join('build/tools', script)\n    _invoke_build(build_support.ndk_path(script_path), args)\n\n\ndef invoke_external_build(script, args=None):\n    _invoke_build(build_support.android_path(script), args)\n\n\ndef package_ndk(out_dir, dist_dir, args):\n    package_args = common_build_args(out_dir, dist_dir, args)\n    package_args.append(dist_dir)\n\n    if args.build_number is not None:\n        package_args.append('--build-number={}'.format(args.build_number))\n\n    if args.arch is not None:\n        package_args.append('--arch={}'.format(args.arch))\n\n    invoke_build('package.py', package_args)\n\n\ndef test_ndk(out_dir, args):\n    # The packaging step extracts all the modules to a known directory for\n    # packaging. This directory is not cleaned up after packaging, so we can\n    # reuse that for testing.\n    test_dir = os.path.join(out_dir, 'android-ndk-{}'.format(config.release))\n\n    test_env = dict(os.environ)\n    test_env['NDK'] = test_dir\n\n    abis = build_support.ALL_ABIS\n    if args.arch is not None:\n        abis = build_support.arch_to_abis(args.arch)\n\n    use_color = sys.stdin.isatty() and os.name != 'nt'\n    results = {}\n    for abi in abis:\n        test_out_dir = os.path.join(out_dir, 'test', abi)\n        results[abi], _ = tests.runners.run_single_configuration(\n            test_dir, test_out_dir,\n            tests.printers.StdoutPrinter(use_color=use_color),\n            abi, 'clang', suites=['build'])\n\n    print('Results:')\n    for abi, result in results.iteritems():\n        print('{}: {}'.format(abi, 'PASS' if result else 'FAIL'))\n    return all(results.values())\n\n\ndef common_build_args(out_dir, dist_dir, args):\n    build_args = ['--out-dir={}'.format(out_dir)]\n    build_args = ['--dist-dir={}'.format(dist_dir)]\n    build_args.append('--host={}'.format(args.system))\n    return build_args\n\n\ndef install_file(file_name, src_dir, dst_dir):\n    src_file = os.path.join(src_dir, file_name)\n    dst_file = os.path.join(dst_dir, file_name)\n\n    print('Copying {} to {}...'.format(src_file, dst_file))\n    if os.path.isdir(src_file):\n        _install_dir(src_file, dst_file)\n    elif os.path.islink(src_file):\n        _install_symlink(src_file, dst_file)\n    else:\n        _install_file(src_file, dst_file)\n\n\ndef _install_dir(src_dir, dst_dir):\n    parent_dir = os.path.normpath(os.path.join(dst_dir, '..'))\n    if not os.path.exists(parent_dir):\n        os.makedirs(parent_dir)\n    shutil.copytree(src_dir, dst_dir, symlinks=True)\n\n\ndef _install_symlink(src_file, dst_file):\n    dirname = os.path.dirname(dst_file)\n    if not os.path.exists(dirname):\n        os.makedirs(dirname)\n    link_target = os.readlink(src_file)\n    os.symlink(link_target, dst_file)\n\n\ndef _install_file(src_file, dst_file):\n    dirname = os.path.dirname(dst_file)\n    if not os.path.exists(dirname):\n        os.makedirs(dirname)\n    # copy2 is just copy followed by copystat (preserves file metadata).\n    shutil.copy2(src_file, dst_file)\n\n\ndef build_clang(out_dir, dist_dir, args):\n    print('Building Clang...')\n    invoke_build('build-llvm.py', common_build_args(out_dir, dist_dir, args))\n\n\ndef build_gcc(out_dir, dist_dir, args):\n    print('Building GCC...')\n    build_args = common_build_args(out_dir, dist_dir, args)\n    if args.arch is not None:\n        build_args.append('--arch={}'.format(args.arch))\n    invoke_build('build-gcc.py', build_args)\n\n\ndef build_shader_tools(out_dir, dist_dir, args):\n    print('Building shader tools...')\n    build_args = common_build_args(out_dir, dist_dir, args)\n    invoke_build('build-shader-tools.py', build_args)\n\n\ndef build_host_tools(out_dir, dist_dir, args):\n    build_args = common_build_args(out_dir, dist_dir, args)\n\n    print('Building ndk-stack...')\n    invoke_external_build(\n        'ndk/sources/host-tools/ndk-stack/build.py', build_args)\n\n    print('Building ndk-depends...')\n    invoke_external_build(\n        'ndk/sources/host-tools/ndk-depends/build.py', build_args)\n\n    print('Building awk...')\n    invoke_external_build(\n        'ndk/sources/host-tools/nawk-20071023/build.py', build_args)\n\n    print('Building make...')\n    invoke_external_build(\n        'ndk/sources/host-tools/make-3.81/build.py', build_args)\n\n    if args.system in ('windows', 'windows64'):\n        print('Building toolbox...')\n        invoke_external_build(\n            'ndk/sources/host-tools/toolbox/build.py', build_args)\n\n    print('Building Python...')\n    invoke_external_build('toolchain/python/build.py', build_args)\n\n    print('Building GDB...')\n    invoke_external_build('toolchain/gdb/build.py', build_args)\n\n    print('Building YASM...')\n    invoke_external_build('toolchain/yasm/build.py', build_args)\n\n    package_host_tools(out_dir, dist_dir, args.system)\n\n\ndef package_host_tools(out_dir, dist_dir, host):\n    packages = [\n        'gdb-multiarch-7.11',\n        'ndk-awk',\n        'ndk-depends',\n        'ndk-make',\n        'ndk-python',\n        'ndk-stack',\n        'ndk-yasm',\n    ]\n\n    files = [\n        'ndk-gdb',\n        'ndk-gdb.py',\n        'ndk-which',\n    ]\n\n    if host in ('windows', 'windows64'):\n        packages.append('toolbox')\n        files.append('ndk-gdb.cmd')\n\n    host_tag = build_support.host_to_tag(host)\n\n    package_names = [p + '-' + host_tag + '.tar.bz2' for p in packages]\n    for package_name in package_names:\n        package_path = os.path.join(out_dir, package_name)\n        subprocess.check_call(['tar', 'xf', package_path, '-C', out_dir])\n\n    for f in files:\n        shutil.copy2(f, os.path.join(out_dir, 'host-tools/bin'))\n\n    build_support.merge_license_files(\n        os.path.join(out_dir, 'host-tools/NOTICE'), [\n            build_support.android_path('toolchain/gdb/gdb-7.11/COPYING'),\n            build_support.ndk_path('sources/host-tools/nawk-20071023/NOTICE'),\n            build_support.ndk_path('sources/host-tools/ndk-depends/NOTICE'),\n            build_support.ndk_path('sources/host-tools/make-3.81/COPYING'),\n            build_support.android_path(\n                'toolchain/python/Python-2.7.5/LICENSE'),\n            build_support.ndk_path('sources/host-tools/ndk-stack/NOTICE'),\n            build_support.ndk_path('sources/host-tools/toolbox/NOTICE'),\n            build_support.android_path('toolchain/yasm/COPYING'),\n            build_support.android_path('toolchain/yasm/BSD.txt'),\n            build_support.android_path('toolchain/yasm/Artistic.txt'),\n            build_support.android_path('toolchain/yasm/GNU_GPL-2.0'),\n            build_support.android_path('toolchain/yasm/GNU_LGPL-2.0'),\n        ])\n\n    package_name = 'host-tools-' + host_tag\n    path = os.path.join(out_dir, 'host-tools')\n    build_support.make_package(package_name, path, dist_dir)\n\n\ndef build_gdbserver(out_dir, dist_dir, args):\n    print('Building gdbserver...')\n    build_args = common_build_args(out_dir, dist_dir, args)\n    if args.arch is not None:\n        build_args.append('--arch={}'.format(args.arch))\n    invoke_build('build-gdbserver.py', build_args)\n\n\ndef _build_stl(out_dir, dist_dir, args, stl):\n    build_args = common_build_args(out_dir, dist_dir, args)\n    if args.arch is not None:\n        build_args.append('--arch={}'.format(args.arch))\n    script = 'ndk/sources/cxx-stl/{}/build.py'.format(stl)\n    invoke_external_build(script, build_args)\n\n\ndef build_gnustl(out_dir, dist_dir, args):\n    print('Building gnustl...')\n    _build_stl(out_dir, dist_dir, args, 'gnu-libstdc++')\n\n\ndef build_libcxx(out_dir, dist_dir, args):\n    print('Building libc++...')\n    _build_stl(out_dir, dist_dir, args, 'llvm-libc++')\n\n\ndef build_stlport(out_dir, dist_dir, args):\n    print('Building stlport...')\n    _build_stl(out_dir, dist_dir, args, 'stlport')\n\n\ndef build_platforms(out_dir, dist_dir, args):\n    print('Building platforms...')\n    build_args = common_build_args(out_dir, dist_dir, args)\n    invoke_build('build-platforms.py', build_args)\n\n\ndef build_libshaderc(_, dist_dir, __):\n    print('Building libshaderc...')\n    shaderc_root_dir = build_support.android_path('external/shaderc')\n\n    copies = [\n        {\n            'source_dir': os.path.join(shaderc_root_dir, 'shaderc'),\n            'dest_dir': 'shaderc',\n            'files': [\n                'Android.mk', 'libshaderc/Android.mk',\n                'libshaderc_util/Android.mk',\n                'third_party/Android.mk',\n            ],\n            'dirs': [\n                'libshaderc/include', 'libshaderc/src',\n                'libshaderc_util/include', 'libshaderc_util/src',\n            ],\n        },\n        {\n            'source_dir': os.path.join(shaderc_root_dir, 'spirv-tools'),\n            'dest_dir': 'shaderc/third_party/spirv-tools',\n            'files': [],\n            'dirs': ['include', 'source'],\n        },\n        {\n            'source_dir': os.path.join(shaderc_root_dir, 'glslang'),\n            'dest_dir': 'shaderc/third_party/glslang',\n            'files': ['glslang/OSDependent/osinclude.h'],\n            'dirs': [\n                'SPIRV',\n                'OGLCompilersDLL',\n                'glslang/GenericCodeGen',\n                'glslang/Include',\n                'glslang/MachineIndependent',\n                'glslang/OSDependent/Unix',\n                'glslang/Public',\n            ],\n        },\n    ]\n\n    default_ignore_patterns = shutil.ignore_patterns(\n        \"*CMakeLists.txt\",\n        \"*.py\",\n        \"*test.h\",\n        \"*test.cc\")\n\n    temp_dir = tempfile.mkdtemp()\n    shaderc_path = os.path.join(temp_dir, 'shaderc')\n    try:\n        for properties in copies:\n            source_dir = properties['source_dir']\n            dest_dir = os.path.join(temp_dir, properties['dest_dir'])\n            for d in properties['dirs']:\n                src = os.path.join(source_dir, d)\n                dst = os.path.join(dest_dir, d)\n                shutil.copytree(src, dst,\n                                ignore=default_ignore_patterns)\n            for f in properties['files']:\n                print(source_dir, ':', dest_dir, \":\", f)\n                install_file(f, source_dir, dest_dir)\n\n        shaderc_shaderc_dir = os.path.join(shaderc_root_dir, 'shaderc')\n        build_support.merge_license_files(\n            os.path.join(shaderc_path, 'NOTICE'), [\n                os.path.join(shaderc_shaderc_dir, 'LICENSE'),\n                os.path.join(shaderc_shaderc_dir,\n                             'third_party',\n                             'LICENSE.spirv-tools'),\n                os.path.join(shaderc_shaderc_dir,\n                             'third_party',\n                             'LICENSE.glslang')])\n        build_support.make_package('shaderc', shaderc_path, dist_dir)\n    finally:\n        shutil.rmtree(temp_dir)\n\n\ndef build_cpufeatures(_, dist_dir, __):\n    path = build_support.ndk_path('sources/android/cpufeatures')\n    build_support.make_package('cpufeatures', path, dist_dir)\n\n\ndef build_native_app_glue(_, dist_dir, __):\n    path = build_support.ndk_path('sources/android/native_app_glue')\n    build_support.make_package('native_app_glue', path, dist_dir)\n\n\ndef build_ndk_helper(_, dist_dir, __):\n    path = build_support.ndk_path('sources/android/ndk_helper')\n    build_support.make_package('ndk_helper', path, dist_dir)\n\n\ndef build_gtest(_, dist_dir, __):\n    path = build_support.ndk_path('sources/third_party/googletest')\n    build_support.make_package('gtest', path, dist_dir)\n\ndef build_vulkan(out_dir, dist_dir, args):\n    print('Constructing Vulkan validation layer source...')\n    vulkan_root_dir = build_support.android_path('external/vulkan-validation-layers')\n\n    copies = [\n        {\n            'source_dir': vulkan_root_dir,\n            'dest_dir': 'vulkan/src',\n            'files': [\n              'vk-generate.py',\n              'vk_helper.py',\n              'vk-layer-generate.py',\n              'generator.py',\n              'genvk.py',\n              'reg.py',\n              'source_line_info.py',\n              'vulkan.py',\n              'vk.xml'\n            ],\n            'dirs': [\n                'layers', 'include'\n            ],\n        },\n        {\n            'source_dir': vulkan_root_dir + '/loader',\n            'dest_dir': 'vulkan/src/loader',\n            'files': [\n              'vk_loader_platform.h'\n            ],\n            'dirs': [],\n        },\n        {\n            'source_dir': build_support.android_path('external/shaderc/glslang'),\n            'dest_dir': 'vulkan/glslang',\n            'files': [],\n            'dirs': [\n                'SPIRV',\n            ],\n        },\n    ]\n\n    default_ignore_patterns = shutil.ignore_patterns(\n        \"*CMakeLists.txt\",\n        \"*test.h\",\n        \"*test.cc\",\n        \"linux\",\n        \"windows\")\n\n    vulkan_path = os.path.join(out_dir, 'vulkan/src')\n    for properties in copies:\n        source_dir = properties['source_dir']\n        dest_dir = os.path.join(out_dir, properties['dest_dir'])\n        for d in properties['dirs']:\n            src = os.path.join(source_dir, d)\n            dst = os.path.join(dest_dir, d)\n            shutil.rmtree(dst, 'true')\n            shutil.copytree(src, dst,\n                            ignore=default_ignore_patterns)\n        for f in properties['files']:\n            install_file(f, source_dir, dest_dir)\n\n    # Copy Android build components\n    src = os.path.join(vulkan_root_dir, 'build-android')\n    dst = os.path.join(vulkan_path, 'build-android')\n    shutil.rmtree(dst, 'true')\n    shutil.copytree(src, dst,\n                  ignore=default_ignore_patterns)\n\n    build_support.merge_license_files(\n        os.path.join(vulkan_path, 'NOTICE'), [\n        os.path.join(vulkan_root_dir, 'LICENSE.txt')])\n\n    build_cmd = [\n        'bash', vulkan_path + '/build-android/android-generate.sh'\n    ]\n    print('Generating generated layers...')\n    subprocess.check_call(build_cmd)\n    print('Generation finished')\n\n    build_args = common_build_args(out_dir, dist_dir, args)\n    if args.arch is not None:\n        build_args.append('--arch={}'.format(args.arch))\n    build_args.append('--no-symbols')\n\n    # TODO: Verify source packaged properly\n    print('Packaging Vulkan source...')\n    src = os.path.join(out_dir, 'vulkan')\n    build_support.make_package('vulkan', src, dist_dir)\n    print('Packaging Vulkan source finished')\n\n\ndef build_build(_, dist_dir, __):\n    path = build_support.ndk_path('build')\n    build_support.make_package('build', path, dist_dir)\n\n\ndef build_python_packages(_, dist_dir, __):\n    # Stage the files in a temporary directory to make things easier.\n    temp_dir = tempfile.mkdtemp()\n    try:\n        path = os.path.join(temp_dir, 'python-packages')\n        shutil.copytree(\n            build_support.android_path('development/python-packages'), path)\n        build_support.make_package('python-packages', path, dist_dir)\n    finally:\n        shutil.rmtree(temp_dir)\n\n\ndef build_gabixx(_out_dir, dist_dir, _args):\n    print('Building gabi++...')\n    path = build_support.ndk_path('sources/cxx-stl/gabi++')\n    build_support.make_package('gabixx', path, dist_dir)\n\n\ndef build_system_stl(_out_dir, dist_dir, _args):\n    print('Building system-stl...')\n    path = build_support.ndk_path('sources/cxx-stl/system')\n    build_support.make_package('system-stl', path, dist_dir)\n\n\ndef build_libandroid_support(_out_dir, dist_dir, _args):\n    print('Building libandroid_support...')\n    path = build_support.ndk_path('sources/android/support')\n    build_support.make_package('libandroid_support', path, dist_dir)\n\n\ndef build_libcxxabi(_out_dir, dist_dir, _args):\n    print('Building libc++abi...')\n    path = build_support.ndk_path('sources/cxx-stl/llvm-libc++abi')\n    build_support.make_package('libcxxabi', path, dist_dir)\n\n\ndef main():\n    parser = ArgParser()\n    args = parser.parse_args()\n\n    if args.module is None:\n        modules = ALL_MODULES\n    else:\n        modules = {args.module}\n\n    if args.host_only:\n        modules = {\n            'build',\n            'clang',\n            'gcc',\n            'host-tools',\n            'python-packages',\n            'shader_tools',\n        }\n\n    required_package_modules = ALL_MODULES\n    have_required_modules = required_package_modules <= modules\n    if (args.package and have_required_modules) or args.force_package:\n        do_package = True\n    else:\n        do_package = False\n\n    # TODO(danalbert): wine?\n    # We're building the Windows packages from Linux, so we can't actually run\n    # any of the tests from here.\n    if args.system.startswith('windows') or not do_package:\n        args.test = False\n\n    # Disable buffering on stdout so the build output doesn't hide all of our\n    # \"Building...\" messages.\n    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)\n\n    os.chdir(os.path.dirname(os.path.realpath(__file__)))\n\n    # Set ANDROID_BUILD_TOP.\n    if 'ANDROID_BUILD_TOP' not in os.environ:\n        os.environ['ANDROID_BUILD_TOP'] = os.path.realpath('..')\n\n    out_dir = build_support.get_out_dir()\n    dist_dir = build_support.get_dist_dir(out_dir)\n    tmp_dir = os.path.join(out_dir, 'build')\n    if os.path.exists(tmp_dir):\n        shutil.rmtree(tmp_dir)\n    os.mkdir(tmp_dir)\n\n    os.environ['TMPDIR'] = tmp_dir\n\n    print('Cleaning up...')\n    invoke_build('dev-cleanup.sh')\n\n    module_builds = collections.OrderedDict([\n        ('build', build_build),\n        ('clang', build_clang),\n        ('cpufeatures', build_cpufeatures),\n        ('gabi++', build_gabixx),\n        ('gcc', build_gcc),\n        ('gdbserver', build_gdbserver),\n        ('gnustl', build_gnustl),\n        ('gtest', build_gtest),\n        ('host-tools', build_host_tools),\n        ('libandroid_support', build_libandroid_support),\n        ('libc++', build_libcxx),\n        ('libc++abi', build_libcxxabi),\n        ('libshaderc', build_libshaderc),\n        ('native_app_glue', build_native_app_glue),\n        ('ndk_helper', build_ndk_helper),\n        ('platforms', build_platforms),\n        ('python-packages', build_python_packages),\n        ('shader_tools', build_shader_tools),\n        ('stlport', build_stlport),\n        ('system-stl', build_system_stl),\n        ('vulkan', build_vulkan),\n    ])\n\n    print('Building modules: {}'.format(' '.join(modules)))\n    for module in modules:\n        module_builds[module](out_dir, dist_dir, args)\n\n    if do_package:\n        package_ndk(out_dir, dist_dir, args)\n\n    if args.test:\n        result = test_ndk(out_dir, args)\n        sys.exit(0 if result else 1)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "cmake/modules/FindBZip2.cmake",
    "content": "set(BZIP2_FOUND true)\nset(BZIP2_INCLUDE_DIR ${ANDROID_SYSROOT}/include)\nset(BZIP2_LIBRARIES ${ANDROID_SYSROOT}/lib/libbz2.a)\n\nmark_as_advanced(BZIP2_INCLUDE_DIR)\n"
  },
  {
    "path": "cmake/modules/FindBoost.cmake",
    "content": "#\n# Set hints for FindBoost and then call the real FindBoost module.\n#\n# Our way of placing Boost installation outside of the sysroot does not play well\n# with CMake's find_xxx() stuff, so cheat a little and pre-set certain internal\n# variables of FindBoost.cmake so it will skip its searching steps.\n#\n\n# Find the Boost version\nfile( GLOB BOOST_ROOTS \"${ANDROID_NDK}/sources/boost/*\" )\nlist( LENGTH BOOST_ROOTS BOOST_ROOTS_NR )\n\nif( BOOST_ROOTS_NR GREATER 1 )\n\tmessage( FATAL_ERROR \"Not implemented: more than one Boost version bundled with NDK\" )\nendif()\n\nlist( GET BOOST_ROOTS 0 BOOST_ROOT )\n\n# Pick the correct Boost for our runtime\nif( ANDROID_STL MATCHES \"gnustl_(static|shared)\" )\n\tset( BOOST_RUNTIME \"gnu-${ANDROID_COMPILER_VERSION}\" )\nelseif( ${ANDROID_STL} MATCHES \"c++_(static|shared)\" )\n\tset( BOOST_RUNTIME \"llvm-${ANDROID_COMPILER_VERSION}\" )\nelse()\n\tmessage( FATAL_ERROR \"We do not support STL '${ANDROID_STL}' for Boost libraries!\"\n\t                     \"Please use one of 'gnustl_shared', 'gnustl_static', 'c++_shared' or 'c++_static'.\")\nendif()\n\n# Set hard-coded pathes for the real FindBoost.cmake (see above)\nset( Boost_INCLUDE_DIR         \"${BOOST_ROOT}/include\"                                       CACHE STRING \"Bundled Boost include directory\")\nset( Boost_LIBRARY_DIR_RELEASE \"${BOOST_ROOT}/libs/${ANDROID_NDK_ABI_NAME}/${BOOST_RUNTIME}\" CACHE STRING \"Bundled Boost library directory for Release builds\")\nset( Boost_LIBRARY_DIR_DEBUG   \"${BOOST_ROOT}/libs/${ANDROID_NDK_ABI_NAME}/${BOOST_RUNTIME}\" CACHE STRING \"Bundled Boost include directory for Debug builds\")\nset( Boost_NO_SYSTEM_PATHS     TRUE                                                          CACHE BOOL   \"Do not search default pathes for bundled Boost\")\n\n# Cleanup and chain to real FindBoost.cmake\nunset( BOOST_RUNTIME )\nunset( BOOST_ROOT )\nunset( BOOST_ROOTS )\n\nset( ORIG_CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\" )\nlist( REMOVE_ITEM CMAKE_MODULE_PATH \"${CMAKE_CURRENT_LIST_DIR}\" )\nfind_package( Boost )\nset( CMAKE_MODULE_PATH \"${ORIG_CMAKE_MODULE_PATH}\" )\nunset( ORIG_CMAKE_MODULE_PATH )\n"
  },
  {
    "path": "cmake/modules/FindJNI.cmake",
    "content": "set(JNI_FOUND true)\nset(JNI_INCLUDE_DIRS ${ANDROID_SYSROOT}/usr/include)\n"
  },
  {
    "path": "cmake/modules/FindThreads.cmake",
    "content": "set(Threads_FOUND TRUE)\nset(CMAKE_USE_PTHREADS_INIT 1)\n"
  },
  {
    "path": "cmake/modules/FindZLIB.cmake",
    "content": "set(ZLIB_FOUND TRUE)\nset(ZLIB_INCLUDE_DIRS ${ANDROID_SYSROOT}/include)\nset(ZLIB_LIBRARIES ${ANDROID_SYSROOT}/usr/lib/libz.so)\n\nmark_as_advanced(ZLIB_INCLUDE_DIRS)\n"
  },
  {
    "path": "cmake/toolchain.cmake",
    "content": "# Copyright (c) 2010-2011, 2016, Ethan Rublee\n# Copyright (c) 2011-2014, Andrey Kamaev\n# Copyright (c) 2015-2016, Dmitry Moskalchuk\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are met:\n#\n# 1.  Redistributions of source code must retain the above copyright notice,\n#     this list of conditions and the following disclaimer.\n#\n# 2.  Redistributions in binary form must reproduce the above copyright notice,\n#     this list of conditions and the following disclaimer in the documentation\n#     and/or other materials provided with the distribution.\n#\n# 3.  Neither the name of the copyright holder nor the names of its\n#     contributors may be used to endorse or promote products derived from this\n#     software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n\n# ------------------------------------------------------------------------------\n#  Android CMake toolchain file, for use with the CrystaX NDK\n#  Requires cmake 3.0 or newer (3.2 or newer is recommended).\n#\n#  Usage Linux:\n#   $ mkdir build && cd build\n#   $ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/cmake/toolchain.cmake ..\n#   $ make -j8\n#\n#  Usage Windows:\n#   $ mkdir build && cd build\n#   $ cmake.exe -G\"MinGW Makefiles\"\n#       -DCMAKE_TOOLCHAIN_FILE=%NDK%\\cmake\\toolchain.cmake\n#       -DCMAKE_MAKE_PROGRAM=\"C:\\absolute\\path\\to\\the\\crystax-ndk\\prebuilt\\windows\\bin\\make.exe\" ..\n#   $ cmake.exe --build .\n#\n#\n#  Options (can be set as cmake parameters: -D<option_name>=<value>):\n#    ANDROID_ABI=armeabi-v7a - specifies the target Application Binary\n#      Interface (ABI). This option nearly matches to the APP_ABI variable\n#      used by ndk-build tool from Android NDK.\n#\n#      Possible targets are:\n#        \"armeabi\" - ARMv5TE based CPU with software floating point operations\n#        \"armeabi-v7a\" - ARMv7 based devices with hardware FPU instructions\n#            this ABI target is used by default\n#        \"armeabi-v7a+neon\" - same as armeabi-v7a, but\n#            sets NEON as floating-point unit\n#        \"armeabi-v7a+vfpv3\" - same as armeabi-v7a, but\n#            sets VFPV3 as floating-point unit (has 32 registers instead of 16)\n#        \"armeabi-v7a-hard\" same as armeabi-v7a, but using -mhard-float\n#        \"armeabi-v6+vfp\" - tuned for ARMv6 processors having VFP\n#        \"x86\" - IA-32 instruction set\n#        \"mips\" - MIPS32 instruction set\n#\n#      64-bit ABIs\n#        \"arm64-v8a\" - ARMv8 AArch64 instruction set\n#        \"x86_64\" - Intel64 instruction set (r1)\n#        \"mips64\" - MIPS64 instruction set (r6)\n#\n#    ANDROID_NATIVE_API_LEVEL=android-9 - level of Android API compile for.\n#      Option is read-only when standalone toolchain is used.\n#\n#    ANDROID_TOOLCHAIN_VERSION=gcc-5 - the version of the toolchain to be\n#      used. The list of possible values depends on the NDK version.\n#      For CrystaX NDK 10.3.1 the possible values are:\n#\n#        * gcc-4.9\n#        * gcc-5\n#        * clang-3.6\n#        * clang-3.7\n#\n#    ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9 - the name of compiler\n#      toolchain to be used. This is combination of ANDROID_ABI and ANDROID_TOOLCHAIN_VERSION\n#      values. Use it only if you really need it. Usually, it's enough to specify\n#      ANDROID_ABI and ANDROID_TOOLCHAIN_VERSION - ANDROID_TOOLCHAIN_NAME is deduced from them.\n#      The list of possible values depends on the NDK version. For CrystaX NDK 10.3.1\n#      the possible values are:\n#\n#        * aarch64-linux-android-4.9\n#        * aarch64-linux-android-5\n#        * aarch64-linux-android-clang3.6\n#        * aarch64-linux-android-clang3.7\n#        * arm-linux-androideabi-4.9\n#        * arm-linux-androideabi-5\n#        * arm-linux-androideabi-clang3.6\n#        * arm-linux-androideabi-clang3.7\n#        * mips64el-linux-android-4.9\n#        * mips64el-linux-android-5\n#        * mips64el-linux-android-clang3.6\n#        * mips64el-linux-android-clang3.7\n#        * mipsel-linux-android-4.9\n#        * mipsel-linux-android-5\n#        * mipsel-linux-android-clang3.6\n#        * mipsel-linux-android-clang3.7\n#        * x86-4.9\n#        * x86-5\n#        * x86-clang3.6\n#        * x86-clang3.7\n#        * x86_64-4.9\n#        * x86_64-5\n#        * x86_64-clang3.6\n#        * x86_64-clang3.7\n#\n#    ANDROID_FORCE_ARM_BUILD=OFF - set ON to generate 32-bit ARM instructions\n#      instead of Thumb. Is not available for \"armeabi-v6+vfp\"\n#      (is forced to be ON) ABI.\n#\n#    ANDROID_NO_UNDEFINED=ON - set ON to show all undefined symbols as linker\n#      errors even if they are not used.\n#\n#    ANDROID_SO_UNDEFINED=OFF - set ON to allow undefined symbols in shared\n#      libraries. Automatically turned for NDK r5x and r6x due to GLESv2\n#      problems.\n#\n#    ANDROID_STL=gnustl_shared - specify the runtime to use.\n#\n#      Possible values are:\n#        none           -> Do not configure the runtime.\n#        system         -> Use the default minimal system C++ runtime library.\n#                          Implies -fno-rtti -fno-exceptions.\n#                          Is not available for standalone toolchain.\n#        system_re      -> Use the default minimal system C++ runtime library.\n#                          Implies -frtti -fexceptions.\n#                          Is not available for standalone toolchain.\n#        gnustl_static  -> Use the GNU STL as a static library.\n#                          Implies -frtti -fexceptions.\n#        gnustl_shared  -> Use the GNU STL as a shared library.\n#                          Implies -frtti -fexceptions.\n#\n#    ANDROID_STL_FORCE_FEATURES=ON - turn rtti and exceptions support based on\n#      chosen runtime. If disabled, then the user is responsible for settings\n#      these options.\n#\n#  What?:\n#    android-cmake toolchain searches for NDK/toolchain in the following order:\n#      ANDROID_STANDALONE_TOOLCHAIN - cmake parameter\n#      ANDROID_STANDALONE_TOOLCHAIN - environment variable\n#      ANDROID_STANDALONE_TOOLCHAIN - default locations\n#\n#    Make sure to do the following in your scripts:\n#      SET( CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} ${my_cxx_flags}\" )\n#      SET( CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} ${my_cxx_flags}\" )\n#    The flags will be prepopulated with critical flags, so don't loose them.\n#    Also be aware that toolchain also sets configuration-specific compiler\n#    flags and linker flags.\n#\n#    ANDROID and BUILD_ANDROID will be set to true, you may test any of these\n#    variables to make necessary Android-specific configuration changes.\n#\n#    Also ARMEABI or ARMEABI_V7A or ARMEABI_V7A_HARD or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64\n#    will be set true, mutually exclusive. NEON option will be set true\n#    if VFP is set to NEON.\n#\n# ------------------------------------------------------------------------------\n\ncmake_minimum_required( VERSION 3.0.0 FATAL_ERROR )\n\nif( DEFINED CMAKE_CROSSCOMPILING )\n # subsequent toolchain loading is not really needed\n return()\nendif()\n\nif( CMAKE_TOOLCHAIN_FILE )\n # touch toolchain variable to suppress \"unused variable\" warning\nendif()\n\nif (NOT CMAKE_BUILD_TYPE)\n set( CMAKE_BUILD_TYPE Release )\nendif()\n\nif (NOT CMAKE_BUILD_TYPE STREQUAL \"Debug\" AND NOT CMAKE_BUILD_TYPE STREQUAL \"Release\" )\n message(FATAL_ERROR \"CMAKE_BUILD_TYPE must be either 'Debug' or 'Release'\")\nendif()\n\nset(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules ${CMAKE_MODULE_PATH})\n\n# inherit settings in recursive loads\nget_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )\nif( _CMAKE_IN_TRY_COMPILE )\n include( \"${CMAKE_CURRENT_SOURCE_DIR}/../toolchain.config.cmake\" OPTIONAL )\nendif()\n\n# this one is important\nif( CMAKE_VERSION VERSION_GREATER \"3.0.99\" )\n set( CMAKE_SYSTEM_NAME Android )\nelse()\n set( CMAKE_SYSTEM_NAME Linux )\nendif()\n\n# this one not so much\nset( CMAKE_SYSTEM_VERSION 1 )\n\n# rpath makes low sense for Android\nset( CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG \"\" )\nset( CMAKE_SKIP_RPATH TRUE CACHE BOOL \"If set, runtime paths are not added when using shared libraries.\" )\n\n# known ABIs\nset( ANDROID_SUPPORTED_ABIS_arm \"armeabi-v7a;armeabi;armeabi-v7a+neon;armeabi-v7a+vfpv3;armeabi-v7a-hard;armeabi-v7a-hard+neon;armeabi-v7a-hard+vfpv3;armeabi-v6+vfp\" )\nset( ANDROID_SUPPORTED_ABIS_arm64 \"arm64-v8a\" )\nset( ANDROID_SUPPORTED_ABIS_x86 \"x86\" )\nset( ANDROID_SUPPORTED_ABIS_x86_64 \"x86_64\" )\nset( ANDROID_SUPPORTED_ABIS_mips \"mips\" )\nset( ANDROID_SUPPORTED_ABIS_mips64 \"mips64\" )\n\nif( NOT DEFINED ANDROID_APP_PIE )\n set( ANDROID_APP_PIE TRUE )\nendif()\n\n# API level defaults\nif ( ANDROID_APP_PIE )\n set( ANDROID_DEFAULT_32BIT_API_LEVEL 16)\nelse()\n set( ANDROID_DEFAULT_32BIT_API_LEVEL 9)\nendif()\nset( ANDROID_DEFAULT_64BIT_API_LEVEL 21)\n\nset( ANDROID_DEFAULT_NDK_API_LEVEL ${ANDROID_DEFAULT_32BIT_API_LEVEL} )\nset( ANDROID_DEFAULT_NDK_API_LEVEL_x86 ${ANDROID_DEFAULT_32BIT_API_LEVEL} )\nset( ANDROID_DEFAULT_NDK_API_LEVEL_mips ${ANDROID_DEFAULT_32BIT_API_LEVEL} )\nset( ANDROID_DEFAULT_NDK_API_LEVEL_arm64 ${ANDROID_DEFAULT_64BIT_API_LEVEL} )\nset( ANDROID_DEFAULT_NDK_API_LEVEL_x86_64 ${ANDROID_DEFAULT_64BIT_API_LEVEL} )\nset( ANDROID_DEFAULT_NDK_API_LEVEL_mips64 ${ANDROID_DEFAULT_64BIT_API_LEVEL} )\n\nset( DEFAULT_GCC_VERSION 5 )\nset( DEFAULT_LLVM_VERSION 3.7 )\n\nif( NOT DEFINED ANDROID_TOOLCHAIN_VERSION)\n set( ANDROID_TOOLCHAIN_VERSION gcc-${DEFAULT_GCC_VERSION})\nendif()\n\n# Set ANDROID_PREBUILT_LIBRARIES to empty value initially\nset( ANDROID_PREBUILT_LIBRARIES )\n\nmacro( __LIST_FILTER listvar regex )\n  if( ${listvar} )\n    foreach( __val ${${listvar}} )\n      if( __val MATCHES \"${regex}\" )\n        list( REMOVE_ITEM ${listvar} \"${__val}\" )\n      endif()\n    endforeach()\n  endif()\nendmacro()\n\nmacro( __INIT_VARIABLE var_name )\n  set( __test_path 0 )\n  foreach( __var ${ARGN} )\n    if( __var STREQUAL \"PATH\" )\n      set( __test_path 1 )\n      break()\n    endif()\n  endforeach()\n\n  if( __test_path AND NOT EXISTS \"${${var_name}}\" )\n    unset( ${var_name} CACHE )\n  endif()\n\n  if( \" ${${var_name}}\" STREQUAL \" \" )\n    set( __values 0 )\n    foreach( __var ${ARGN} )\n      if( __var STREQUAL \"VALUES\" )\n        set( __values 1 )\n      elseif( NOT __var STREQUAL \"PATH\" )\n        if( __var MATCHES \"^ENV_.*$\" )\n          string( REPLACE \"ENV_\" \"\" __var \"${__var}\" )\n          set( __value \"$ENV{${__var}}\" )\n        elseif( DEFINED ${__var} )\n          set( __value \"${${__var}}\" )\n        elseif( __values )\n          set( __value \"${__var}\" )\n        else()\n          set( __value \"\" )\n        endif()\n\n        if( NOT \" ${__value}\" STREQUAL \" \" AND (NOT __test_path OR EXISTS \"${__value}\") )\n          set( ${var_name} \"${__value}\" )\n          break()\n        endif()\n      endif()\n    endforeach()\n    unset( __value )\n    unset( __values )\n  endif()\n\n  if( __test_path )\n    file( TO_CMAKE_PATH \"${${var_name}}\" ${var_name} )\n  endif()\n  unset( __test_path )\nendmacro()\n\nmacro( __DETECT_NATIVE_API_LEVEL _var _path )\n  set( __ndkApiLevelRegex \"^[\\t ]*#define[\\t ]+__ANDROID_API__[\\t ]+([0-9]+)[\\t ]*.*$\" )\n  file( STRINGS ${_path} __apiFileContent REGEX \"${__ndkApiLevelRegex}\" )\n  if( NOT __apiFileContent )\n    message( SEND_ERROR \"Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken.\" )\n  endif()\n  string( REGEX REPLACE \"${__ndkApiLevelRegex}\" \"\\\\1\" ${_var} \"${__apiFileContent}\" )\n  unset( __apiFileContent )\n  unset( __ndkApiLevelRegex )\nendmacro()\n\nmacro( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root )\n if( EXISTS \"${_root}\" )\n    file( GLOB __gccExePath RELATIVE \"${_root}/bin/\" \"${_root}/bin/*-gcc${TOOL_OS_SUFFIX}\" )\n    __LIST_FILTER( __gccExePath \"^[.].*\" )\n    list( LENGTH __gccExePath __gccExePathsCount )\n    if( NOT __gccExePathsCount EQUAL 1  AND NOT _CMAKE_IN_TRY_COMPILE )\n      message( WARNING \"Could not determine machine name for compiler from ${_root}\" )\n      set( ${_var} \"\" )\n    else()\n      get_filename_component( __gccExeName \"${__gccExePath}\" NAME_WE )\n      string( REPLACE \"-gcc\" \"\" ${_var} \"${__gccExeName}\" )\n    endif()\n    unset( __gccExePath )\n    unset( __gccExePathsCount )\n    unset( __gccExeName )\n  else()\n    set( ${_var} \"\" )\n  endif()\nendmacro()\n\n\n# fight against cygwin\nset( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL \"Prevent cmake from working under cygwin and using cygwin tools\")\nmark_as_advanced( ANDROID_FORBID_SYGWIN )\nif( ANDROID_FORBID_SYGWIN )\n if( CYGWIN )\n  message( FATAL_ERROR \"Android NDK and android-cmake toolchain are not welcome Cygwin. It is unlikely that this cmake toolchain will work under cygwin. But if you want to try then you can set cmake variable ANDROID_FORBID_SYGWIN to FALSE and rerun cmake.\" )\n endif()\n\n if( CMAKE_HOST_WIN32 )\n  # remove cygwin from PATH\n  set( __new_path \"$ENV{PATH}\")\n  __LIST_FILTER( __new_path \"cygwin\" )\n  set(ENV{PATH} \"${__new_path}\")\n  unset(__new_path)\n endif()\nendif()\n\n\n# detect current host platform\nif( NOT DEFINED ANDROID_NDK_HOST_X64 AND (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES \"amd64|x86_64|AMD64\" OR CMAKE_HOST_APPLE) )\n set( ANDROID_NDK_HOST_X64 1 CACHE BOOL \"Try to use 64-bit compiler toolchain\" )\n mark_as_advanced( ANDROID_NDK_HOST_X64 )\nendif()\n\nset( TOOL_OS_SUFFIX \"\" )\nif( CMAKE_HOST_APPLE )\n set( ANDROID_NDK_HOST_SYSTEM_NAME \"darwin-x86_64\" )\n set( ANDROID_NDK_HOST_SYSTEM_NAME2 \"darwin-x86\" )\nelseif( CMAKE_HOST_WIN32 )\n set( ANDROID_NDK_HOST_SYSTEM_NAME \"windows-x86_64\" )\n set( ANDROID_NDK_HOST_SYSTEM_NAME2 \"windows\" )\n set( TOOL_OS_SUFFIX \".exe\" )\nelseif( CMAKE_HOST_UNIX )\n set( ANDROID_NDK_HOST_SYSTEM_NAME \"linux-x86_64\" )\n set( ANDROID_NDK_HOST_SYSTEM_NAME2 \"linux-x86\" )\nelse()\n message( FATAL_ERROR \"Cross-compilation on your platform is not supported by this cmake toolchain\" )\nendif()\n\nif( NOT ANDROID_NDK_HOST_X64 )\n set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} )\nendif()\n\nif( NOT ANDROID_NDK )\n  get_filename_component(ANDROID_NDK ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)\nendif()\n\n# remember found paths\nif( ANDROID_STANDALONE_TOOLCHAIN )\n get_filename_component( ANDROID_STANDALONE_TOOLCHAIN \"${ANDROID_STANDALONE_TOOLCHAIN}\" ABSOLUTE )\n # try to detect change\n if( CMAKE_AR )\n  string( LENGTH \"${ANDROID_STANDALONE_TOOLCHAIN}\" __length )\n  string( SUBSTRING \"${CMAKE_AR}\" 0 ${__length} __androidStandaloneToolchainPreviousPath )\n  if( NOT __androidStandaloneToolchainPreviousPath STREQUAL ANDROID_STANDALONE_TOOLCHAIN )\n   message( FATAL_ERROR \"It is not possible to change path to the Android standalone toolchain on subsequent run.\" )\n  endif()\n  unset( __androidStandaloneToolchainPreviousPath )\n  unset( __length )\n endif()\n set( ANDROID_STANDALONE_TOOLCHAIN \"${ANDROID_STANDALONE_TOOLCHAIN}\" CACHE INTERNAL \"Path of the Android standalone toolchain\" FORCE )\n set( BUILD_WITH_STANDALONE_TOOLCHAIN True )\nelseif( ANDROID_NDK )\n get_filename_component( ANDROID_NDK \"${ANDROID_NDK}\" ABSOLUTE )\n set( ANDROID_NDK \"${ANDROID_NDK}\" CACHE INTERNAL \"Path of the Android NDK\" FORCE )\n set( BUILD_WITH_ANDROID_NDK True )\nelse()\n message( FATAL_ERROR \"Could not find neither Android NDK nor Android standalone toolchain.\n    You should set an environment variable:\n      export ANDROID_NDK=~/my-android-ndk\n    or\n      export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain\" )\nendif()\n\n# android NDK layout\nif( BUILD_WITH_ANDROID_NDK )\n set( ANDROID_NDK_TOOLCHAINS_PATH \"${ANDROID_NDK}/toolchains\" )\n set( ANDROID_NDK_TOOLCHAINS_BUILD_CORE_PATH \"${ANDROID_NDK}/build/core/toolchains\" )\n set( ANDROID_NDK_TOOLCHAINS_SUBPATH  \"/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}\" )\n set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 \"/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME2}\" )\n get_filename_component( ANDROID_NDK_TOOLCHAINS_PATH \"${ANDROID_NDK_TOOLCHAINS_PATH}\" ABSOLUTE )\n get_filename_component( ANDROID_NDK_TOOLCHAINS_BUILD_CORE_PATH \"${ANDROID_NDK_TOOLCHAINS_BUILD_CORE_PATH}\" ABSOLUTE )\n\n # try to detect change of NDK\n if( CMAKE_AR )\n  string( LENGTH \"${ANDROID_NDK_TOOLCHAINS_PATH}\" __length )\n  string( SUBSTRING \"${CMAKE_AR}\" 0 ${__length} __androidNdkPreviousPath )\n  if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK_TOOLCHAINS_PATH )\n   message( FATAL_ERROR \"It is not possible to change the path to the NDK on subsequent CMake run. You must remove all generated files from your build folder first.\n   \" )\n  endif()\n  unset( __androidNdkPreviousPath )\n  unset( __length )\n endif()\nendif()\n\n\n# get all the details about standalone toolchain\nif( BUILD_WITH_STANDALONE_TOOLCHAIN )\n __DETECT_NATIVE_API_LEVEL( ANDROID_SUPPORTED_NATIVE_API_LEVELS \"${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h\" )\n set( ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )\n set( __availableToolchains \"standalone\" )\n __DETECT_TOOLCHAIN_MACHINE_NAME( __availableToolchainMachines \"${ANDROID_STANDALONE_TOOLCHAIN}\" )\n if( NOT __availableToolchainMachines )\n  message( FATAL_ERROR \"Could not determine machine name of your toolchain. Probably your Android standalone toolchain is broken.\" )\n endif()\n if( __availableToolchainMachines MATCHES x86_64 )\n  set( __availableToolchainArchs \"x86_64\" )\n elseif( __availableToolchainMachines MATCHES i686 )\n  set( __availableToolchainArchs \"x86\" )\n elseif( __availableToolchainMachines MATCHES aarch64 )\n  set( __availableToolchainArchs \"arm64\" )\n elseif( __availableToolchainMachines MATCHES arm )\n  set( __availableToolchainArchs \"arm\" )\n elseif( __availableToolchainMachines MATCHES mips64el )\n  set( __availableToolchainArchs \"mips64\" )\n elseif( __availableToolchainMachines MATCHES mipsel )\n  set( __availableToolchainArchs \"mips\" )\n endif()\n execute_process( COMMAND \"${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}\" -dumpversion\n                  OUTPUT_VARIABLE __availableToolchainCompilerVersions OUTPUT_STRIP_TRAILING_WHITESPACE )\n string( REGEX MATCH \"[0-9]+[.][0-9]+([.][0-9]+)?\" __availableToolchainCompilerVersions \"${__availableToolchainCompilerVersions}\" )\n if( EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/bin/clang${TOOL_OS_SUFFIX}\" )\n  list( APPEND __availableToolchains \"standalone-clang\" )\n  list( APPEND __availableToolchainMachines ${__availableToolchainMachines} )\n  list( APPEND __availableToolchainArchs ${__availableToolchainArchs} )\n  list( APPEND __availableToolchainCompilerVersions ${__availableToolchainCompilerVersions} )\n endif()\nendif()\n\nmacro( __GLOB_NDK_TOOLCHAINS __availableToolchainsVar __availableToolchainsLst __toolchain_subpath )\n foreach( __toolchain ${${__availableToolchainsLst}} )\n  if( \"${__toolchain}\" MATCHES \"-clang3[.][0-9]$\" AND NOT EXISTS \"${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}${__toolchain_subpath}\" )\n   string( REGEX REPLACE \"-clang3[.][0-9]$\" \"-${DEFAULT_GCC_VERSION}\" __gcc_toolchain \"${__toolchain}\" )\n  else()\n   set( __gcc_toolchain \"${__toolchain}\" )\n  endif()\n  __DETECT_TOOLCHAIN_MACHINE_NAME( __machine \"${ANDROID_NDK_TOOLCHAINS_PATH}/${__gcc_toolchain}${__toolchain_subpath}\" )\n  if( __machine )\n   string( REGEX MATCH \"[0-9]+([.][0-9x]+)?$\" __version \"${__gcc_toolchain}\" )\n   if( __machine MATCHES x86_64 )\n    set( __arch \"x86_64\" )\n   elseif( __machine MATCHES i686 )\n    set( __arch \"x86\" )\n   elseif( __machine MATCHES aarch64 )\n    set( __arch \"arm64\" )\n   elseif( __machine MATCHES arm )\n    set( __arch \"arm\" )\n   elseif( __machine MATCHES mips64el )\n    set( __arch \"mips64\" )\n   elseif( __machine MATCHES mipsel )\n    set( __arch \"mips\" )\n   else()\n    set( __arch \"\" )\n   endif()\n   #message(\"machine: !${__machine}!\\narch: !${__arch}!\\nversion: !${__version}!\\ntoolchain: !${__toolchain}!\\n\")\n   if (__arch)\n    list( APPEND __availableToolchainMachines \"${__machine}\" )\n    list( APPEND __availableToolchainArchs \"${__arch}\" )\n    list( APPEND __availableToolchainCompilerVersions \"${__version}\" )\n    list( APPEND ${__availableToolchainsVar} \"${__toolchain}\" )\n   endif()\n  endif()\n  unset( __gcc_toolchain )\n endforeach()\nendmacro()\n\nif (NOT DEFINED ANDROID_ABI OR ANDROID_ABI STREQUAL \"\")\n message(FATAL_ERROR \"No ANDROID_ABI specified.\")\nendif()\n\nif( ANDROID_ABI STREQUAL \"armeabi-v7a with NEON\" )\n set( ANDROID_ABI \"armeabi-v7a+neon\" )\nelseif( ANDROID_ABI STREQUAL \"armeabi-v7a with VFPV3\" )\n set( ANDROID_ABI \"armeabi-v7a+vfpv3\" )\nelseif( ANDROID_ABI STREQUAL \"armeabi-v7a-hard with NEON\" )\n set( ANDROID_ABI \"armeabi-v7a-hard+neon\" )\nelseif( ANDROID_ABI STREQUAL \"armeabi-v7a-hard with VFPV3\" )\n set( ANDROID_ABI \"armeabi-v7a-hard+vfpv3\" )\nelseif( ANDROID_ABI STREQUAL \"armeabi-v6 with VFP\" )\n set( ANDROID_ABI \"armeabi-v6+vfp\" )\nendif()\n\n# set target ABI options\nif( ANDROID_ABI STREQUAL \"x86\" )\n set( X86 true )\n set( ANDROID_NDK_ABI_NAME \"x86\" )\n set( ANDROID_ARCH_NAME \"x86\" )\n set( ANDROID_LLVM_TRIPLE \"i686-none-linux-android\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"x86\" )\n set( CMAKE_SYSTEM_PROCESSOR \"i686\" )\nelseif( ANDROID_ABI STREQUAL \"x86_64\" )\n set( X86 true )\n set( X86_64 true )\n set( ANDROID_NDK_ABI_NAME \"x86_64\" )\n set( ANDROID_ARCH_NAME \"x86_64\" )\n set( CMAKE_SYSTEM_PROCESSOR \"x86_64\" )\n set( ANDROID_LLVM_TRIPLE \"x86_64-none-linux-android\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"x86_64\" )\nelseif( ANDROID_ABI STREQUAL \"mips64\" )\n set( MIPS64 true )\n set( ANDROID_NDK_ABI_NAME \"mips64\" )\n set( ANDROID_ARCH_NAME \"mips64\" )\n set( ANDROID_LLVM_TRIPLE \"mips64el-none-linux-android\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"mips64el-linux-android\" )\n set( CMAKE_SYSTEM_PROCESSOR \"mips64\" )\nelseif( ANDROID_ABI STREQUAL \"mips\" )\n set( MIPS true )\n set( ANDROID_NDK_ABI_NAME \"mips\" )\n set( ANDROID_ARCH_NAME \"mips\" )\n set( ANDROID_LLVM_TRIPLE \"mipsel-none-linux-android\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"mipsel-linux-android\" )\n set( CMAKE_SYSTEM_PROCESSOR \"mips\" )\nelseif( ANDROID_ABI STREQUAL \"arm64-v8a\" )\n set( ARM64_V8A true )\n set( ANDROID_NDK_ABI_NAME \"arm64-v8a\" )\n set( ANDROID_ARCH_NAME \"arm64\" )\n set( ANDROID_LLVM_TRIPLE \"aarch64-none-linux-android\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"aarch64-linux-android\" )\n set( CMAKE_SYSTEM_PROCESSOR \"aarch64\" )\n set( VFPV3 true )\n set( NEON true )\nelseif( ANDROID_ABI STREQUAL \"armeabi\" )\n set( ARMEABI true )\n set( ANDROID_NDK_ABI_NAME \"armeabi\" )\n set( ANDROID_ARCH_NAME \"arm\" )\n set( ANDROID_LLVM_TRIPLE \"armv5te-none-linux-androideabi\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"arm-linux-androideabi\" )\n set( CMAKE_SYSTEM_PROCESSOR \"armv5te\" )\nelseif( ANDROID_ABI STREQUAL \"armeabi-v6+vfp\" )\n set( ARMEABI_V6 true )\n set( ANDROID_NDK_ABI_NAME \"armeabi\" )\n set( ANDROID_ARCH_NAME \"arm\" )\n set( ANDROID_LLVM_TRIPLE \"armv5te-none-linux-androideabi\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"arm-linux-androideabi\" )\n set( CMAKE_SYSTEM_PROCESSOR \"armv6\" )\n # need always fallback to older platform\n set( ARMEABI true )\nelseif( ANDROID_ABI MATCHES \"^armeabi-v7a(\\\\+.+)?$\" )\n set( ARMEABI_V7A true )\n set( ANDROID_NDK_ABI_NAME \"armeabi-v7a\" )\n set( ANDROID_ARCH_NAME \"arm\" )\n set( ANDROID_LLVM_TRIPLE \"armv7-none-linux-androideabi\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"arm-linux-androideabi\" )\n set( CMAKE_SYSTEM_PROCESSOR \"armv7-a\" )\n if( ANDROID_ABI STREQUAL \"armeabi-v7a+neon\" )\n  set( VFPV3 true )\n  set( NEON true )\n elseif( ANDROID_ABI STREQUAL \"armeabi-v7a+vfpv3\" )\n  set( VFPV3 true )\n endif()\nelseif( ANDROID_ABI MATCHES \"^armeabi-v7a-hard(\\\\+.+)?$\" )\n set( ARMEABI_V7A_HARD true )\n set( ANDROID_NDK_ABI_NAME \"armeabi-v7a-hard\" )\n set( ANDROID_ARCH_NAME \"arm\" )\n set( ANDROID_LLVM_TRIPLE \"armv7-none-linux-androideabi\" )\n set( ANDROID_TOOLCHAIN_BUILD_NAME \"arm-linux-androideabi\" )\n set( CMAKE_SYSTEM_PROCESSOR \"armv7-a\" )\n if( ANDROID_ABI STREQUAL \"armeabi-v7a-hard+neon\" )\n  set( VFPV3 true )\n  set( NEON true )\n elseif( ANDROID_ABI STREQUAL \"armeabi-v7a-hard+vfpv3\" )\n  set( VFPV3 true )\n endif()\nelse()\n message( SEND_ERROR \"Unknown ANDROID_ABI=\\\"${ANDROID_ABI}\\\" is specified.\" )\nendif()\n\n# get all the details about NDK\nif( BUILD_WITH_ANDROID_NDK )\n file( GLOB ANDROID_SUPPORTED_NATIVE_API_LEVELS RELATIVE \"${ANDROID_NDK}/platforms\" \"${ANDROID_NDK}/platforms/android-*\" )\n string( REPLACE \"android-\" \"\" ANDROID_SUPPORTED_NATIVE_API_LEVELS \"${ANDROID_SUPPORTED_NATIVE_API_LEVELS}\" )\n set( __availableToolchains \"\" )\n set( __availableToolchainMachines \"\" )\n set( __availableToolchainArchs \"\" )\n set( __availableToolchainCompilerVersions \"\" )\n if( ANDROID_TOOLCHAIN_VERSION )\n  string(REGEX REPLACE \"^gcc-\" \"\" __androidToolchainVersion ${ANDROID_TOOLCHAIN_VERSION} )\n  string(REGEX REPLACE \"^gcc\" \"\" __androidToolchainVersion ${__androidToolchainVersion} )\n  set( ANDROID_TOOLCHAIN_NAME \"${ANDROID_TOOLCHAIN_BUILD_NAME}-${__androidToolchainVersion}\")\n endif()\n if( ANDROID_TOOLCHAIN_NAME AND EXISTS \"${ANDROID_NDK_TOOLCHAINS_BUILD_CORE_PATH}/${ANDROID_TOOLCHAIN_NAME}/\" )\n  # do not go through all toolchains if we know the name\n  set( __availableToolchainsLst \"${ANDROID_TOOLCHAIN_NAME}\" )\n  __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst \"${ANDROID_NDK_TOOLCHAINS_SUBPATH}\" )\n  if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 )\n   __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst \"${ANDROID_NDK_TOOLCHAINS_SUBPATH2}\" )\n   if( __availableToolchains )\n    set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} )\n   endif()\n  endif()\n endif()\n if( NOT __availableToolchains )\n  file( GLOB __availableToolchainsLst RELATIVE \"${ANDROID_NDK_TOOLCHAINS_PATH}\" \"${ANDROID_NDK_TOOLCHAINS_PATH}/*\" )\n  if( __availableToolchainsLst )\n   list(SORT __availableToolchainsLst) # we need clang to go after gcc\n  endif()\n  __LIST_FILTER( __availableToolchainsLst \"^[.]\" )\n  __LIST_FILTER( __availableToolchainsLst \"llvm\" )\n  __LIST_FILTER( __availableToolchainsLst \"renderscript\" )\n  __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst \"${ANDROID_NDK_TOOLCHAINS_SUBPATH}\" )\n  if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 )\n   __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst \"${ANDROID_NDK_TOOLCHAINS_SUBPATH2}\" )\n   if( __availableToolchains )\n    set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} )\n   endif()\n  endif()\n endif()\n if( NOT __availableToolchains )\n  message( FATAL_ERROR \"Could not find any working toolchain in the NDK. Probably your Android NDK is broken.\" )\n endif()\nendif()\n\n# build list of available ABIs\nset( ANDROID_SUPPORTED_ABIS \"\" )\nset( __uniqToolchainArchNames ${__availableToolchainArchs} )\nlist( REMOVE_DUPLICATES __uniqToolchainArchNames )\nlist( SORT __uniqToolchainArchNames )\nforeach( __arch ${__uniqToolchainArchNames} )\n list( APPEND ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${__arch}} )\nendforeach()\nunset( __uniqToolchainArchNames )\nif( NOT ANDROID_SUPPORTED_ABIS )\n message( FATAL_ERROR \"No one of known Android ABIs is supported by this cmake toolchain.\" )\nendif()\n\n# choose target ABI\n__INIT_VARIABLE( ANDROID_ABI VALUES ${ANDROID_SUPPORTED_ABIS} )\n# verify that target ABI is supported\nlist( FIND ANDROID_SUPPORTED_ABIS \"${ANDROID_ABI}\" __androidAbiIdx )\nif( __androidAbiIdx EQUAL -1 )\n string( REPLACE \";\" \"\\\", \\\"\" PRINTABLE_ANDROID_SUPPORTED_ABIS  \"${ANDROID_SUPPORTED_ABIS}\" )\n message( FATAL_ERROR \"Specified ANDROID_ABI = \\\"${ANDROID_ABI}\\\" is not supported by this cmake toolchain or your NDK/toolchain.\n   Supported values are: \\\"${PRINTABLE_ANDROID_SUPPORTED_ABIS}\\\"\n   \" )\nendif()\nunset( __androidAbiIdx )\n\nif( CMAKE_BINARY_DIR AND EXISTS \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake\" )\n # really dirty hack\n # it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run...\n file( APPEND \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake\" \"SET(CMAKE_SYSTEM_PROCESSOR \\\"${CMAKE_SYSTEM_PROCESSOR}\\\")\\n\" )\nendif()\n\nif( ANDROID_ARCH_NAME STREQUAL \"arm\" AND NOT ARMEABI_V6 )\n __INIT_VARIABLE( ANDROID_FORCE_ARM_BUILD VALUES OFF )\n set( ANDROID_FORCE_ARM_BUILD ${ANDROID_FORCE_ARM_BUILD} CACHE BOOL \"Use 32-bit ARM instructions instead of Thumb-1\" FORCE )\n mark_as_advanced( ANDROID_FORCE_ARM_BUILD )\nelse()\n unset( ANDROID_FORCE_ARM_BUILD CACHE )\nendif()\n\n# choose toolchain\nif( ANDROID_TOOLCHAIN_NAME )\n list( FIND __availableToolchains \"${ANDROID_TOOLCHAIN_NAME}\" __toolchainIdx )\n if( __toolchainIdx EQUAL -1 )\n  list( SORT __availableToolchains )\n  string( REPLACE \";\" \"\\n  * \" toolchains_list \"${__availableToolchains}\" )\n  set( toolchains_list \"  * ${toolchains_list}\")\n  message( FATAL_ERROR \"Specified toolchain \\\"${ANDROID_TOOLCHAIN_NAME}\\\" is missing in your NDK or broken. Please verify that your NDK is working or select another compiler toolchain.\nTo configure the toolchain set CMake variable ANDROID_TOOLCHAIN_NAME to one of the following values:\\n${toolchains_list}\\n\" )\n endif()\n list( GET __availableToolchainArchs ${__toolchainIdx} __toolchainArch )\n if( NOT __toolchainArch STREQUAL ANDROID_ARCH_NAME )\n  message( SEND_ERROR \"Selected toolchain \\\"${ANDROID_TOOLCHAIN_NAME}\\\" is not able to compile binaries for the \\\"${ANDROID_ARCH_NAME}\\\" platform.\" )\n endif()\nelse()\n set( __toolchainIdx -1 )\n set( __applicableToolchains \"\" )\n set( __toolchainMaxVersion \"0.0.0\" )\n list( LENGTH __availableToolchains __availableToolchainsCount )\n math( EXPR __availableToolchainsCount \"${__availableToolchainsCount}-1\" )\n foreach( __idx RANGE ${__availableToolchainsCount} )\n  list( GET __availableToolchainArchs ${__idx} __toolchainArch )\n  if( __toolchainArch STREQUAL ANDROID_ARCH_NAME )\n   list( GET __availableToolchainCompilerVersions ${__idx} __toolchainVersion )\n   string( REPLACE \"x\" \"99\" __toolchainVersion \"${__toolchainVersion}\")\n   if( __toolchainVersion VERSION_GREATER __toolchainMaxVersion )\n    set( __toolchainMaxVersion \"${__toolchainVersion}\" )\n    set( __toolchainIdx ${__idx} )\n   endif()\n  endif()\n endforeach()\n unset( __availableToolchainsCount )\n unset( __toolchainMaxVersion )\n unset( __toolchainVersion )\nendif()\nunset( __toolchainArch )\nif( __toolchainIdx EQUAL -1 )\n message( FATAL_ERROR \"No one of available compiler toolchains is able to compile for ${ANDROID_ARCH_NAME} platform.\" )\nendif()\nlist( GET __availableToolchains ${__toolchainIdx} ANDROID_TOOLCHAIN_NAME )\nlist( GET __availableToolchainMachines ${__toolchainIdx} ANDROID_TOOLCHAIN_MACHINE_NAME )\nlist( GET __availableToolchainCompilerVersions ${__toolchainIdx} ANDROID_COMPILER_VERSION )\n\nunset( __toolchainIdx )\nunset( __availableToolchains )\nunset( __availableToolchainMachines )\nunset( __availableToolchainArchs )\nunset( __availableToolchainCompilerVersions )\n\n# choose native API level\n__INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL )\nstring( REPLACE \"android-\" \"\" ANDROID_NATIVE_API_LEVEL \"${ANDROID_NATIVE_API_LEVEL}\" )\nstring( STRIP \"${ANDROID_NATIVE_API_LEVEL}\" ANDROID_NATIVE_API_LEVEL )\n# adjust API level\nset( __real_api_level ${ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME}} )\nforeach( __level ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )\n if( (__level LESS ANDROID_NATIVE_API_LEVEL OR __level STREQUAL ANDROID_NATIVE_API_LEVEL) AND NOT __level LESS __real_api_level )\n  set( __real_api_level ${__level} )\n endif()\nendforeach()\nif( __real_api_level AND NOT ANDROID_NATIVE_API_LEVEL STREQUAL __real_api_level )\n message( STATUS \"Adjusting Android API level 'android-${ANDROID_NATIVE_API_LEVEL}' to 'android-${__real_api_level}'\")\n set( ANDROID_NATIVE_API_LEVEL ${__real_api_level} )\nendif()\nunset(__real_api_level)\n# validate\nlist( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS \"${ANDROID_NATIVE_API_LEVEL}\" __levelIdx )\nif( __levelIdx EQUAL -1 )\n message( SEND_ERROR \"Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain.\" )\nelse()\n if( BUILD_WITH_ANDROID_NDK )\n  __DETECT_NATIVE_API_LEVEL( __realApiLevel \"${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h\" )\n  if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL AND NOT __realApiLevel GREATER 9000 )\n   message( SEND_ERROR \"Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken.\" )\n  endif()\n  unset( __realApiLevel )\n endif()\n set( ANDROID_NATIVE_API_LEVEL \"${ANDROID_NATIVE_API_LEVEL}\" CACHE STRING \"Android API level for native code\" FORCE )\n set( CMAKE_ANDROID_API ${ANDROID_NATIVE_API_LEVEL} )\n if( CMAKE_VERSION VERSION_GREATER \"2.8\" )\n  list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS )\n  set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} )\n endif()\nendif()\nunset( __levelIdx )\n\n\n# remember target ABI\nset( ANDROID_ABI \"${ANDROID_ABI}\" CACHE STRING \"The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point.\" FORCE )\nif( CMAKE_VERSION VERSION_GREATER \"2.8\" )\n list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME} )\n set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME}} )\nendif()\n\n\n# runtime choice (STL, rtti, exceptions)\nif( NOT ANDROID_STL )\n  set( ANDROID_STL gnustl_shared )\nendif()\nset( ANDROID_STL \"${ANDROID_STL}\" CACHE STRING \"C++ runtime\" )\nset( ANDROID_STL_FORCE_FEATURES ON CACHE BOOL \"automatically configure rtti and exceptions support based on C++ runtime\" )\nmark_as_advanced( ANDROID_STL ANDROID_STL_FORCE_FEATURES )\n\nif( BUILD_WITH_ANDROID_NDK )\n if( NOT \"${ANDROID_STL}\" MATCHES \"^(none|system|system_re|gnustl_static|gnustl_shared)$\")\n  message( FATAL_ERROR \"ANDROID_STL is set to invalid value \\\"${ANDROID_STL}\\\".\nThe possible values are:\n  none           -> Do not configure the runtime.\n  system         -> Use the default minimal system C++ runtime library.\n  system_re      -> Same as system but with rtti and exceptions.\n  gnustl_static  -> (default) Use the GNU STL as a static library.\n  gnustl_shared  -> Use the GNU STL as a shared library.\n\" )\n endif()\nelseif( BUILD_WITH_STANDALONE_TOOLCHAIN )\n if( NOT \"${ANDROID_STL}\" MATCHES \"^(none|gnustl_static|gnustl_shared)$\")\n  message( FATAL_ERROR \"ANDROID_STL is set to invalid value \\\"${ANDROID_STL}\\\".\nThe possible values are:\n  none           -> Do not configure the runtime.\n  gnustl_static  -> (default) Use the GNU STL as a static library.\n  gnustl_shared  -> Use the GNU STL as a shared library.\n\" )\n endif()\nendif()\n\nunset( ANDROID_RTTI )\nunset( ANDROID_EXCEPTIONS )\nunset( ANDROID_STL_INCLUDE_DIRS )\nunset( __libstl )\nunset( __libsupcxx )\n\n# setup paths and STL for standalone toolchain\nif( BUILD_WITH_STANDALONE_TOOLCHAIN )\n set( ANDROID_TOOLCHAIN_ROOT \"${ANDROID_STANDALONE_TOOLCHAIN}\" )\n set( ANDROID_CLANG_TOOLCHAIN_ROOT \"${ANDROID_STANDALONE_TOOLCHAIN}\" )\n set( ANDROID_SYSROOT \"${ANDROID_STANDALONE_TOOLCHAIN}/sysroot\" )\n\n if( NOT ANDROID_STL STREQUAL \"none\" )\n  set( ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STANDALONE_TOOLCHAIN}/include/c++/${ANDROID_COMPILER_VERSION}\" )\n  if( NOT EXISTS \"${ANDROID_STL_INCLUDE_DIRS}\" )\n   # old location ( pre r8c )\n   set( ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}\" )\n  endif()\n  if( ARMEABI_V7A AND EXISTS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits\" )\n   list( APPEND ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}\" )\n  elseif( ARMEABI_V7A_HARD AND EXISTS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits\" )\n   list( APPEND ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}\" )\n  elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits\" )\n   list( APPEND ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb\" )\n  else()\n   list( APPEND ANDROID_STL_INCLUDE_DIRS \"${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}\" )\n  endif()\n  # always search static GNU STL to get the location of libsupc++.a\n  if( ARMEABI_V7A AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a\" )\n   set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb\" )\n  elseif( ARMEABI_V7A AND EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a\" )\n   set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}\" )\n  elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libstdc++.a\" )\n   set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb\" )\n  elseif( EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libstdc++.a\" )\n   set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib\" )\n  endif()\n  if( __libstl )\n   set( __libsupcxx \"${__libstl}/libsupc++.a\" )\n   set( __libstl    \"${__libstl}/libstdc++.a\" )\n  endif()\n  if( NOT EXISTS \"${__libsupcxx}\" )\n   message( FATAL_ERROR \"The required libstdsupc++.a is missing in your standalone toolchain.\n Usually it happens because of bug in make-standalone-toolchain.sh script from NDK r7, r7b and r7c.\n You need to either upgrade to newer NDK or manually copy\n     $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a\n to\n     ${__libsupcxx}\n   \" )\n  endif()\n  if( ANDROID_STL STREQUAL \"gnustl_shared\" )\n   if( ARMEABI_V7A AND EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so\" )\n    set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so\" )\n   elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so\" )\n    set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so\" )\n   elseif( EXISTS \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so\" )\n    set( __libstl \"${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so\" )\n   endif()\n  endif()\n endif()\nendif()\n\n# clang\nif( \"${ANDROID_TOOLCHAIN_NAME}\" STREQUAL \"standalone-clang\" )\n set( ANDROID_COMPILER_IS_CLANG 1 )\n execute_process( COMMAND \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/clang${TOOL_OS_SUFFIX}\" --version OUTPUT_VARIABLE ANDROID_CLANG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE )\n string( REGEX MATCH \"[0-9]+[.][0-9]+\" ANDROID_CLANG_VERSION \"${ANDROID_CLANG_VERSION}\")\nelseif( \"${ANDROID_TOOLCHAIN_NAME}\" MATCHES \"-clang3[.][0-9]?$\" )\n string( REGEX MATCH \"3[.][0-9]$\" ANDROID_CLANG_VERSION \"${ANDROID_TOOLCHAIN_NAME}\")\n string( REGEX REPLACE \"-clang${ANDROID_CLANG_VERSION}$\" \"-${ANDROID_COMPILER_VERSION}\" ANDROID_GCC_TOOLCHAIN_NAME \"${ANDROID_TOOLCHAIN_NAME}\" )\n if( NOT EXISTS \"${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}/bin/clang${TOOL_OS_SUFFIX}\" )\n  message( FATAL_ERROR \"Could not find the Clang compiler driver\" )\n endif()\n set( ANDROID_COMPILER_IS_CLANG 1 )\n set( ANDROID_CLANG_TOOLCHAIN_ROOT \"${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}\" )\nelse()\n set( ANDROID_GCC_TOOLCHAIN_NAME \"${ANDROID_TOOLCHAIN_NAME}\" )\n unset( ANDROID_COMPILER_IS_CLANG CACHE )\nendif()\n\nstring( REPLACE \".\" \"\" _clang_name \"clang${ANDROID_CLANG_VERSION}\" )\nif( NOT EXISTS \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}\" )\n set( _clang_name \"clang\" )\nendif()\n\n\n# setup paths and STL for NDK\nif( BUILD_WITH_ANDROID_NDK )\n set( ANDROID_TOOLCHAIN_ROOT \"${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}\" )\n set( ANDROID_SYSROOT \"${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}\" )\n\n if( ANDROID_STL STREQUAL \"none\" )\n  # do nothing\n elseif( ANDROID_STL STREQUAL \"system\" )\n  set( ANDROID_RTTI             OFF )\n  set( ANDROID_EXCEPTIONS       OFF )\n  set( ANDROID_STL_INCLUDE_DIRS \"${ANDROID_NDK}/sources/cxx-stl/system/include\" )\n elseif( ANDROID_STL STREQUAL \"system_re\" )\n  set( ANDROID_RTTI             ON )\n  set( ANDROID_EXCEPTIONS       ON )\n  set( ANDROID_STL_INCLUDE_DIRS \"${ANDROID_NDK}/sources/cxx-stl/system/include\" )\n elseif( ANDROID_STL MATCHES \"gnustl\" )\n  set( ANDROID_EXCEPTIONS       ON )\n  set( ANDROID_RTTI             ON )\n  set( __libstl                \"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}\" )\n  set( ANDROID_STL_INCLUDE_DIRS \"${__libstl}/include\" \"${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/include\" \"${__libstl}/include/backward\" )\n  if( EXISTS \"${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a\" )\n   set( __libstl                \"${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a\" )\n  else()\n   set( __libstl                \"${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libstdc++.a\" )\n  endif()\n else()\n  message( FATAL_ERROR \"Unknown runtime: ${ANDROID_STL}\" )\n endif()\n # find libsupc++.a - rtti & exceptions\n if( ANDROID_STL STREQUAL \"system_re\" OR ANDROID_STL MATCHES \"gnustl\" )\n  set( __libsupcxx \"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a\" ) # r8b or newer\n  if( NOT EXISTS \"${__libsupcxx}\" )\n   set( __libsupcxx \"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a\" ) # r7-r8\n  endif()\n  if( NOT EXISTS \"${__libsupcxx}\" ) # before r7\n   if( ARMEABI_V7A )\n    if( ANDROID_FORCE_ARM_BUILD )\n     set( __libsupcxx \"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a\" )\n    else()\n     set( __libsupcxx \"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a\" )\n    endif()\n   elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD )\n    set( __libsupcxx \"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a\" )\n   else()\n    set( __libsupcxx \"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a\" )\n   endif()\n  endif()\n  if( NOT EXISTS \"${__libsupcxx}\")\n   message( ERROR \"Could not find libsupc++.a for a chosen platform. Either your NDK is not supported or is broken.\")\n  endif()\n endif()\nendif()\n\n\n# case of shared STL linkage\nif( ANDROID_STL MATCHES \"shared\" AND DEFINED __libstl )\n string( REPLACE \"_static.a\" \"_shared.so\" __libstl \"${__libstl}\" )\n # TODO: check if .so file exists before the renaming\nendif()\n\n\n# ccache support\n__INIT_VARIABLE( _ndk_ccache NDK_CCACHE ENV_NDK_CCACHE )\nif( _ndk_ccache )\n if( DEFINED NDK_CCACHE AND NOT EXISTS NDK_CCACHE )\n  unset( NDK_CCACHE CACHE )\n endif()\n find_program( NDK_CCACHE \"${_ndk_ccache}\" DOC \"The path to ccache binary\")\nelse()\n unset( NDK_CCACHE CACHE )\nendif()\nunset( _ndk_ccache )\n\n\n# setup the cross-compiler\nif( NOT CMAKE_C_COMPILER )\n if( NDK_CCACHE AND NOT ANDROID_SYSROOT MATCHES \"[ ;\\\"]\" )\n  set( CMAKE_C_COMPILER   \"${NDK_CCACHE}\" CACHE PATH \"ccache as C compiler\" )\n  set( CMAKE_CXX_COMPILER \"${NDK_CCACHE}\" CACHE PATH \"ccache as C++ compiler\" )\n  if( ANDROID_COMPILER_IS_CLANG )\n   set( CMAKE_C_COMPILER_ARG1   \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}\"   CACHE PATH \"C compiler\")\n   set( CMAKE_CXX_COMPILER_ARG1 \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}\" CACHE PATH \"C++ compiler\")\n  else()\n   set( CMAKE_C_COMPILER_ARG1   \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}\" CACHE PATH \"C compiler\")\n   set( CMAKE_CXX_COMPILER_ARG1 \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}\" CACHE PATH \"C++ compiler\")\n  endif()\n else()\n  if( ANDROID_COMPILER_IS_CLANG )\n   set( CMAKE_C_COMPILER   \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}\"   CACHE PATH \"C compiler\")\n   set( CMAKE_CXX_COMPILER \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}\" CACHE PATH \"C++ compiler\")\n  else()\n   set( CMAKE_C_COMPILER   \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}\"    CACHE PATH \"C compiler\" )\n   set( CMAKE_CXX_COMPILER \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}\"    CACHE PATH \"C++ compiler\" )\n  endif()\n endif()\n if( ANDROID_COMPILER_IS_CLANG )\n  set( CMAKE_ASM_COMPILER \"${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}\"                      CACHE PATH \"assembler\" )\n else()\n  set( CMAKE_ASM_COMPILER \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}\"     CACHE PATH \"assembler\" )\n endif()\n set( CMAKE_STRIP        \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}\"   CACHE PATH \"strip\" )\n if( EXISTS \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc-ar${TOOL_OS_SUFFIX}\" )\n  # Use gcc-ar if we have it for better LTO support.\n  set( CMAKE_AR           \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc-ar${TOOL_OS_SUFFIX}\"      CACHE PATH \"archive\" )\n else()\n  set( CMAKE_AR           \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}\"      CACHE PATH \"archive\" )\n endif()\n set( CMAKE_LINKER       \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}\"      CACHE PATH \"linker\" )\n set( CMAKE_NM           \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}\"      CACHE PATH \"nm\" )\n set( CMAKE_OBJCOPY      \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}\" CACHE PATH \"objcopy\" )\n set( CMAKE_OBJDUMP      \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}\" CACHE PATH \"objdump\" )\n set( CMAKE_RANLIB       \"${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}\"  CACHE PATH \"ranlib\" )\nendif()\n\nset( _CMAKE_TOOLCHAIN_PREFIX \"${ANDROID_TOOLCHAIN_MACHINE_NAME}-\" )\nif( CMAKE_VERSION VERSION_LESS 2.8.5 )\n set( CMAKE_ASM_COMPILER_ARG1 \"-c\" )\nendif()\nif( APPLE )\n find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool )\n if( NOT CMAKE_INSTALL_NAME_TOOL )\n  message( FATAL_ERROR \"Could not find install_name_tool, please check your installation.\" )\n endif()\n mark_as_advanced( CMAKE_INSTALL_NAME_TOOL )\nendif()\n\nremove_definitions( -DANDROID )\nadd_definitions( -DANDROID )\n\nif( ANDROID_SYSROOT MATCHES \"[ ;\\\"]\" )\n if( CMAKE_HOST_WIN32 )\n  # try to convert path to 8.3 form\n  file( WRITE \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd\" \"@echo %~s1\" )\n  execute_process( COMMAND \"$ENV{ComSpec}\" /c \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd\" \"${ANDROID_SYSROOT}\"\n                   OUTPUT_VARIABLE __path OUTPUT_STRIP_TRAILING_WHITESPACE\n                   RESULT_VARIABLE __result ERROR_QUIET )\n  if( __result EQUAL 0 )\n   file( TO_CMAKE_PATH \"${__path}\" ANDROID_SYSROOT )\n   set( ANDROID_CXX_FLAGS \"--sysroot=${ANDROID_SYSROOT}\" )\n  else()\n   set( ANDROID_CXX_FLAGS \"--sysroot=\\\"${ANDROID_SYSROOT}\\\"\" )\n  endif()\n else()\n  set( ANDROID_CXX_FLAGS \"'--sysroot=${ANDROID_SYSROOT}'\" )\n endif()\n if( NOT _CMAKE_IN_TRY_COMPILE )\n  # quotes can break try_compile and compiler identification\n  message(WARNING \"Path to your Android NDK (or toolchain) has non-alphanumeric symbols.\\nThe build might be broken.\\n\")\n endif()\nelse()\n set( ANDROID_CXX_FLAGS \"--sysroot=${ANDROID_SYSROOT}\" )\nendif()\n\n# NDK flags\nif (ARM64_V8A )\n set( ANDROID_CXX_FLAGS         \"${ANDROID_CXX_FLAGS} -funwind-tables\" )\n set( ANDROID_CXX_FLAGS_RELEASE \"-fomit-frame-pointer -fstrict-aliasing\" )\n set( ANDROID_CXX_FLAGS_DEBUG   \"-fno-omit-frame-pointer -fno-strict-aliasing\" )\n if( NOT ANDROID_COMPILER_IS_CLANG )\n  set( ANDROID_CXX_FLAGS_RELEASE \"${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300\" )\n endif()\nelseif( ARMEABI OR ARMEABI_V7A OR ARMEABI_V7A_HARD)\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -funwind-tables\" )\n if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 )\n  set( ANDROID_CXX_FLAGS_RELEASE \"-mthumb -fomit-frame-pointer -fno-strict-aliasing\" )\n  set( ANDROID_CXX_FLAGS_DEBUG   \"-mthumb -fno-omit-frame-pointer -fno-strict-aliasing\" )\n  if( NOT ANDROID_COMPILER_IS_CLANG )\n   set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -finline-limit=64\" )\n  endif()\n else()\n  # always compile ARMEABI_V6 in arm mode; otherwise there is no difference from ARMEABI\n  set( ANDROID_CXX_FLAGS_RELEASE \"-marm -fomit-frame-pointer -fstrict-aliasing\" )\n  set( ANDROID_CXX_FLAGS_DEBUG   \"-marm -fno-omit-frame-pointer -fno-strict-aliasing\" )\n  if( NOT ANDROID_COMPILER_IS_CLANG )\n   set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300\" )\n  endif()\n endif()\nelseif( X86 OR X86_64 )\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -funwind-tables\" )\n if( NOT ANDROID_COMPILER_IS_CLANG )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300\" )\n endif()\n set( ANDROID_CXX_FLAGS_RELEASE \"-fomit-frame-pointer -fstrict-aliasing\" )\n set( ANDROID_CXX_FLAGS_DEBUG   \"-fno-omit-frame-pointer -fno-strict-aliasing\" )\nelseif( MIPS OR MIPS64 )\n set( ANDROID_CXX_FLAGS         \"${ANDROID_CXX_FLAGS} -fno-strict-aliasing -funwind-tables -fmessage-length=0\" )\n set( ANDROID_CXX_FLAGS_RELEASE \"-fomit-frame-pointer\" )\n set( ANDROID_CXX_FLAGS_DEBUG   \"-fno-omit-frame-pointer\" )\n if( NOT ANDROID_COMPILER_IS_CLANG )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers\" )\n  set( ANDROID_CXX_FLAGS_RELEASE \"${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300\" )\n endif()\nelseif()\n set( ANDROID_CXX_FLAGS_RELEASE \"\" )\n set( ANDROID_CXX_FLAGS_DEBUG   \"\" )\nendif()\n\nset( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -fsigned-char\" ) # good/necessary when porting desktop libraries\n\nif( NOT X86 AND NOT ANDROID_COMPILER_IS_CLANG )\n set( ANDROID_CXX_FLAGS \"-Wno-psabi ${ANDROID_CXX_FLAGS}\" )\nendif()\n\nset( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -no-canonical-prefixes\" ) # see https://android-review.googlesource.com/#/c/47564/\n\n# ABI-specific flags\nif( ARMEABI_V7A )\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp\" )\n if( NEON )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=neon\" )\n elseif( VFPV3 )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=vfpv3\" )\n else()\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16\" )\n endif()\nelseif( ARMEABI_V7A_HARD )\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -march=armv7-a -mhard-float\" )\n if( NEON )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=neon\" )\n elseif( VFPV3 )\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=vfpv3\" )\n else()\n  set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16\" )\n endif()\nelseif( ARMEABI_V6 )\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp\" ) # vfp == vfpv2\nelseif( ARMEABI )\n set( ANDROID_CXX_FLAGS \"${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float\" )\nendif()\n\nset( CMAKE_CXX_CREATE_SHARED_LIBRARY \"<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>\" )\nset( CMAKE_CXX_CREATE_SHARED_MODULE  \"<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>\" )\nset( CMAKE_CXX_LINK_EXECUTABLE       \"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>\" )\n\nunset( ANDROID_LIBSTDCXX_FILE )\nunset( ANDROID_LIBSUPCXX_FILE )\n\n# STL\nif( EXISTS \"${__libstl}\" OR EXISTS \"${__libsupcxx}\" )\n if( EXISTS \"${__libstl}\" )\n  set( CMAKE_CXX_CREATE_SHARED_LIBRARY \"${CMAKE_CXX_CREATE_SHARED_LIBRARY} \\\"${__libstl}\\\"\" )\n  set( CMAKE_CXX_CREATE_SHARED_MODULE  \"${CMAKE_CXX_CREATE_SHARED_MODULE} \\\"${__libstl}\\\"\" )\n  set( CMAKE_CXX_LINK_EXECUTABLE       \"${CMAKE_CXX_LINK_EXECUTABLE} \\\"${__libstl}\\\"\" )\n  set( ANDROID_LIBSTDCXX_FILE ${__libstl} )\n  list( APPEND ANDROID_PREBUILT_LIBRARIES ${ANDROID_LIBSTDCXX_FILE} )\n endif()\n if( EXISTS \"${__libsupcxx}\" )\n  set( CMAKE_CXX_CREATE_SHARED_LIBRARY \"${CMAKE_CXX_CREATE_SHARED_LIBRARY} \\\"${__libsupcxx}\\\"\" )\n  set( CMAKE_CXX_CREATE_SHARED_MODULE  \"${CMAKE_CXX_CREATE_SHARED_MODULE} \\\"${__libsupcxx}\\\"\" )\n  set( CMAKE_CXX_LINK_EXECUTABLE       \"${CMAKE_CXX_LINK_EXECUTABLE} \\\"${__libsupcxx}\\\"\" )\n  # C objects:\n  set( CMAKE_C_CREATE_SHARED_LIBRARY \"<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>\" )\n  set( CMAKE_C_CREATE_SHARED_MODULE  \"<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>\" )\n  set( CMAKE_C_LINK_EXECUTABLE       \"<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>\" )\n  set( CMAKE_C_CREATE_SHARED_LIBRARY \"${CMAKE_C_CREATE_SHARED_LIBRARY} \\\"${__libsupcxx}\\\"\" )\n  set( CMAKE_C_CREATE_SHARED_MODULE  \"${CMAKE_C_CREATE_SHARED_MODULE} \\\"${__libsupcxx}\\\"\" )\n  set( CMAKE_C_LINK_EXECUTABLE       \"${CMAKE_C_LINK_EXECUTABLE} \\\"${__libsupcxx}\\\"\" )\n  set( ANDROID_LIBSUPCXX_FILE ${__libsupcxx} )\n endif()\nendif()\n\nunset( ANDROID_LIBSTDCXX_LIBDIR )\nif( DEFINED ANDROID_LIBSTDCXX_FILE )\n get_filename_component( ANDROID_LIBSTDCXX_LIBDIR ${ANDROID_LIBSTDCXX_FILE} DIRECTORY )\nendif()\n\nunset( ANDROID_LIBSUPCXX_LIBDIR )\nif( DEFINED ANDROID_LIBSUPCXX_FILE )\n get_filename_component( ANDROID_LIBSUPCXX_LIBDIR ${ANDROID_LIBSUPCXX_FILE} DIRECTORY )\nendif()\n\nset( ANDROID_LIBCRYSTAX_DIR ${ANDROID_NDK}/sources/crystax )\nset( ANDROID_LIBCRYSTAX_INCDIR ${ANDROID_LIBCRYSTAX_DIR}/include )\nset( ANDROID_LIBCRYSTAX_LIBDIR ${ANDROID_LIBCRYSTAX_DIR}/libs/${ANDROID_NDK_ABI_NAME} )\nif( ANDROID_NDK_ABI_NAME MATCHES \"^armeabi.*$\" AND NOT ANDROID_FORCE_ARM_BUILD )\n set( ANDROID_LIBCRYSTAX_LIBDIR ${ANDROID_LIBCRYSTAX_LIBDIR}/thumb )\nendif()\nset( ANDROID_LIBCRYSTAX_FILE ${ANDROID_LIBCRYSTAX_LIBDIR}/libcrystax.so )\nlist( APPEND ANDROID_PREBUILT_LIBRARIES ${ANDROID_LIBCRYSTAX_FILE} )\n\nset( __androidLinkOptions )\nset( __androidLinkOptions \"${__androidLinkOptions} -L${ANDROID_LIBCRYSTAX_LIBDIR} -lcrystax\" )\n\nset( CMAKE_CXX_CREATE_SHARED_LIBRARY \"${CMAKE_CXX_CREATE_SHARED_LIBRARY} ${__androidLinkOptions}\" )\nset( CMAKE_CXX_CREATE_SHARED_MODULE  \"${CMAKE_CXX_CREATE_SHARED_MODULE} ${__androidLinkOptions}\" )\nset( CMAKE_CXX_LINK_EXECUTABLE       \"${CMAKE_CXX_LINK_EXECUTABLE} ${__androidLinkOptions}\" )\nset( CMAKE_C_CREATE_SHARED_LIBRARY   \"${CMAKE_C_CREATE_SHARED_LIBRARY} ${__androidLinkOptions}\" )\nset( CMAKE_C_CREATE_SHARED_MODULE    \"${CMAKE_C_CREATE_SHARED_MODULE} ${__androidLinkOptions}\" )\nset( CMAKE_C_LINK_EXECUTABLE         \"${CMAKE_C_LINK_EXECUTABLE} ${__androidLinkOptions}\" )\n\n# variables controlling optional build flags\n__INIT_VARIABLE( ANDROID_SO_UNDEFINED                       VALUES OFF )\n__INIT_VARIABLE( ANDROID_NO_UNDEFINED                       VALUES ON )\n__INIT_VARIABLE( ANDROID_FUNCTION_LEVEL_LINKING             VALUES ON )\n__INIT_VARIABLE( ANDROID_GOLD_LINKER                        VALUES ON )\n__INIT_VARIABLE( ANDROID_NOEXECSTACK                        VALUES ON )\n__INIT_VARIABLE( ANDROID_RELRO                              VALUES ON )\n\nset( ANDROID_NO_UNDEFINED           ${ANDROID_NO_UNDEFINED}           CACHE BOOL \"Show all undefined symbols as linker errors\" )\nset( ANDROID_SO_UNDEFINED           ${ANDROID_SO_UNDEFINED}           CACHE BOOL \"Allows or disallows undefined symbols in shared libraries\" )\nset( ANDROID_FUNCTION_LEVEL_LINKING ${ANDROID_FUNCTION_LEVEL_LINKING} CACHE BOOL \"Put each function in separate section and enable garbage collection of unused input sections at link time\" )\nset( ANDROID_GOLD_LINKER            ${ANDROID_GOLD_LINKER}            CACHE BOOL \"Enables gold linker\" )\nset( ANDROID_NOEXECSTACK            ${ANDROID_NOEXECSTACK}            CACHE BOOL \"Allows or disallows undefined symbols in shared libraries\" )\nset( ANDROID_RELRO                  ${ANDROID_RELRO}                  CACHE BOOL \"Enables RELRO - a memory corruption mitigation technique\" )\nmark_as_advanced( ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_FUNCTION_LEVEL_LINKING ANDROID_GOLD_LINKER ANDROID_NOEXECSTACK ANDROID_RELRO )\n\n# linker flags\nset( ANDROID_LINKER_FLAGS \"\" )\n\nif( ARMEABI_V7A OR ARMEABI_V7A_HARD )\n # this is *required* to use the following linker flags that routes around\n # a CPU bug in some Cortex-A8 implementations:\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,--fix-cortex-a8\" )\nendif()\n\nif( ARMEABI_V7A_HARD )\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,--no-warn-mismatch\" )\nendif()\n\nif( ANDROID_NO_UNDEFINED )\n if( MIPS )\n  # there is some sysroot-related problem in mips linker...\n  if( NOT ANDROID_SYSROOT MATCHES \"[ ;\\\"]\" )\n   set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,--no-undefined -Wl,-rpath-link,${ANDROID_SYSROOT}/usr/lib\" )\n  endif()\n else()\n  set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,--no-undefined\" )\n endif()\nendif()\n\nif( ANDROID_SO_UNDEFINED )\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,-allow-shlib-undefined\" )\nendif()\n\nif( ANDROID_FUNCTION_LEVEL_LINKING )\n set( ANDROID_CXX_FLAGS    \"${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections\" )\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,--gc-sections\" )\nendif()\n\nif( ANDROID_NOEXECSTACK )\n if( ANDROID_COMPILER_IS_CLANG )\n  set( ANDROID_CXX_FLAGS    \"${ANDROID_CXX_FLAGS} -Xclang -mnoexecstack\" )\n else()\n  set( ANDROID_CXX_FLAGS    \"${ANDROID_CXX_FLAGS} -Wa,--noexecstack\" )\n endif()\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,-z,noexecstack\" )\nendif()\n\nif( ANDROID_RELRO )\n set( ANDROID_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now\" )\nendif()\n\nif( ANDROID_COMPILER_IS_CLANG )\n set( ANDROID_CXX_FLAGS \"-target ${ANDROID_LLVM_TRIPLE} -Qunused-arguments ${ANDROID_CXX_FLAGS}\" )\n if( BUILD_WITH_ANDROID_NDK )\n  set( ANDROID_CXX_FLAGS \"-gcc-toolchain ${ANDROID_TOOLCHAIN_ROOT} ${ANDROID_CXX_FLAGS}\" )\n endif()\nendif()\n\n# cache flags\nset( CMAKE_CXX_FLAGS           \"\"                        CACHE STRING \"c++ flags\" )\nset( CMAKE_C_FLAGS             \"\"                        CACHE STRING \"c flags\" )\nset( CMAKE_CXX_FLAGS_RELEASE   \"-O3 -g -DNDEBUG\"         CACHE STRING \"c++ Release flags\" )\nset( CMAKE_C_FLAGS_RELEASE     \"-O3 -g -DNDEBUG\"         CACHE STRING \"c Release flags\" )\nset( CMAKE_CXX_FLAGS_DEBUG     \"-O0 -g -DDEBUG -D_DEBUG\" CACHE STRING \"c++ Debug flags\" )\nset( CMAKE_C_FLAGS_DEBUG       \"-O0 -g -DDEBUG -D_DEBUG\" CACHE STRING \"c Debug flags\" )\nset( CMAKE_SHARED_LINKER_FLAGS \"\"                        CACHE STRING \"shared linker flags\" )\nset( CMAKE_MODULE_LINKER_FLAGS \"\"                        CACHE STRING \"module linker flags\" )\nset( CMAKE_EXE_LINKER_FLAGS    \"-Wl,-z,nocopyreloc\"      CACHE STRING \"executable linker flags\" )\n\n# put flags to cache (for debug purpose only)\nset( ANDROID_CXX_FLAGS         \"${ANDROID_CXX_FLAGS}\"         CACHE INTERNAL \"Android specific c/c++ flags\" )\nset( ANDROID_CXX_FLAGS_RELEASE \"${ANDROID_CXX_FLAGS_RELEASE}\" CACHE INTERNAL \"Android specific c/c++ Release flags\" )\nset( ANDROID_CXX_FLAGS_DEBUG   \"${ANDROID_CXX_FLAGS_DEBUG}\"   CACHE INTERNAL \"Android specific c/c++ Debug flags\" )\nset( ANDROID_LINKER_FLAGS      \"${ANDROID_LINKER_FLAGS}\"      CACHE INTERNAL \"Android specific c/c++ linker flags\" )\n\n# finish flags\nset( CMAKE_CXX_FLAGS           \"${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}\" )\nset( CMAKE_C_FLAGS             \"${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}\" )\nset( CMAKE_ASM_FLAGS           \"${ANDROID_CXX_FLAGS} ${CMAKE_ASM_FLAGS}\" )\nset( CMAKE_CXX_FLAGS_RELEASE   \"${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}\" )\nset( CMAKE_C_FLAGS_RELEASE     \"${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}\" )\nset( CMAKE_ASM_FLAGS_RELEASE   \"${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_ASM_FLAGS_RELEASE}\" )\nset( CMAKE_CXX_FLAGS_DEBUG     \"${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_DEBUG}\" )\nset( CMAKE_C_FLAGS_DEBUG       \"${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}\" )\nset( CMAKE_ASM_FLAGS_DEBUG     \"${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_ASM_FLAGS_DEBUG}\" )\nset( CMAKE_SHARED_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}\" )\nset( CMAKE_MODULE_LINKER_FLAGS \"${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}\" )\nset( CMAKE_EXE_LINKER_FLAGS    \"${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}\" )\n\nif( ANDROID_COMPILER_IS_CLANG )\n set( ANDROID_APP_PIE TRUE )\nendif()\n\n# pie/pic\nif( NOT (ANDROID_NATIVE_API_LEVEL LESS 16) AND (NOT DEFINED ANDROID_APP_PIE OR ANDROID_APP_PIE) AND (CMAKE_VERSION VERSION_GREATER 2.8.8) )\n set( CMAKE_POSITION_INDEPENDENT_CODE TRUE )\n set( CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie\")\nelse()\n set( CMAKE_POSITION_INDEPENDENT_CODE FALSE )\n set( CMAKE_CXX_FLAGS \"-fpic ${CMAKE_CXX_FLAGS}\" )\n set( CMAKE_C_FLAGS   \"-fpic ${CMAKE_C_FLAGS}\" )\nendif()\n\n# configure rtti\nif( DEFINED ANDROID_RTTI AND ANDROID_STL_FORCE_FEATURES )\n if( ANDROID_RTTI )\n  set( CMAKE_CXX_FLAGS \"-frtti ${CMAKE_CXX_FLAGS}\" )\n else()\n  set( CMAKE_CXX_FLAGS \"-fno-rtti ${CMAKE_CXX_FLAGS}\" )\n endif()\nendif()\n\n# configure exceptios\nif( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES )\n if( ANDROID_EXCEPTIONS )\n  set( CMAKE_CXX_FLAGS \"-fexceptions ${CMAKE_CXX_FLAGS}\" )\n  set( CMAKE_C_FLAGS \"-fexceptions ${CMAKE_C_FLAGS}\" )\n else()\n  set( CMAKE_CXX_FLAGS \"-fno-exceptions ${CMAKE_CXX_FLAGS}\" )\n  set( CMAKE_C_FLAGS \"-fno-exceptions ${CMAKE_C_FLAGS}\" )\n endif()\nendif()\n\n# global includes and link directories\ninclude_directories( ${ANDROID_LIBCRYSTAX_INCDIR} \"${ANDROID_SYSROOT}/usr/include\" ${ANDROID_STL_INCLUDE_DIRS} )\nget_filename_component(__android_install_path \"${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}\" ABSOLUTE) # avoid CMP0015 policy warning\nlink_directories( \"${__android_install_path}\" )\n\n# detect if need link crtbegin_so.o explicitly\nif( NOT DEFINED ANDROID_EXPLICIT_CRT_LINK )\n set( __cmd \"${CMAKE_CXX_CREATE_SHARED_LIBRARY}\" )\n string( REPLACE \"<CMAKE_CXX_COMPILER>\" \"${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}\" __cmd \"${__cmd}\" )\n string( REPLACE \"<CMAKE_C_COMPILER>\"   \"${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}\"   __cmd \"${__cmd}\" )\n string( REPLACE \"<CMAKE_SHARED_LIBRARY_CXX_FLAGS>\" \"${CMAKE_CXX_FLAGS}\" __cmd \"${__cmd}\" )\n string( REPLACE \"<LANGUAGE_COMPILE_FLAGS>\" \"\" __cmd \"${__cmd}\" )\n string( REPLACE \"<LINK_FLAGS>\" \"${CMAKE_SHARED_LINKER_FLAGS}\" __cmd \"${__cmd}\" )\n string( REPLACE \"<CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>\" \"-shared\" __cmd \"${__cmd}\" )\n string( REPLACE \"<CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG>\" \"\" __cmd \"${__cmd}\" )\n string( REPLACE \"<TARGET_SONAME>\" \"\" __cmd \"${__cmd}\" )\n string( REPLACE \"<TARGET>\" \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toolchain_crtlink_test.so\" __cmd \"${__cmd}\" )\n string( REPLACE \"<OBJECTS>\" \"\\\"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\\\"\" __cmd \"${__cmd}\" )\n string( REPLACE \"<LINK_LIBRARIES>\" \"\" __cmd \"${__cmd}\" )\n separate_arguments( __cmd )\n foreach( __var ANDROID_NDK ANDROID_NDK_TOOLCHAINS_PATH ANDROID_STANDALONE_TOOLCHAIN )\n  if( ${__var} )\n   set( __tmp \"${${__var}}\" )\n   separate_arguments( __tmp )\n   string( REPLACE \"${__tmp}\" \"${${__var}}\" __cmd \"${__cmd}\")\n  endif()\n endforeach()\n string( REPLACE \"'\" \"\" __cmd \"${__cmd}\" )\n string( REPLACE \"\\\"\" \"\" __cmd \"${__cmd}\" )\n execute_process( COMMAND ${__cmd} RESULT_VARIABLE __cmd_result OUTPUT_QUIET ERROR_QUIET )\n if( __cmd_result EQUAL 0 )\n  set( ANDROID_EXPLICIT_CRT_LINK ON )\n else()\n  set( ANDROID_EXPLICIT_CRT_LINK OFF )\n endif()\nendif()\n\nif( ANDROID_EXPLICIT_CRT_LINK )\n set( CMAKE_CXX_CREATE_SHARED_LIBRARY \"${CMAKE_CXX_CREATE_SHARED_LIBRARY} \\\"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\\\"\" )\n set( CMAKE_CXX_CREATE_SHARED_MODULE  \"${CMAKE_CXX_CREATE_SHARED_MODULE} \\\"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\\\"\" )\nendif()\n\n# setup output directories\nset( CMAKE_INSTALL_PREFIX \"${ANDROID_TOOLCHAIN_ROOT}/user\" CACHE STRING \"path for installing\" )\n\nif( DEFINED LIBRARY_OUTPUT_PATH_ROOT\n      OR EXISTS \"${CMAKE_SOURCE_DIR}/AndroidManifest.xml\"\n      OR (EXISTS \"${CMAKE_SOURCE_DIR}/../AndroidManifest.xml\" AND EXISTS \"${CMAKE_SOURCE_DIR}/../jni/\") )\n  set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH \"Root for binaries output, set this to change where Android libs are installed to\" )\n  if( NOT _CMAKE_IN_TRY_COMPILE )\n    if( EXISTS \"${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt\" )\n      set( EXECUTABLE_OUTPUT_PATH \"${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}\" CACHE PATH \"Output directory for applications\" )\n    else()\n      set( EXECUTABLE_OUTPUT_PATH \"${LIBRARY_OUTPUT_PATH_ROOT}/bin\" CACHE PATH \"Output directory for applications\" )\n    endif()\n    set( LIBRARY_OUTPUT_PATH \"${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}\" CACHE PATH \"Output directory for Android libs\" )\n  endif()\nendif()\n\n# copy shared libcrystax to build directory\nif( NOT _CMAKE_IN_TRY_COMPILE AND DEFINED LIBRARY_OUTPUT_PATH )\n  get_filename_component( __libcrystaxname \"${ANDROID_LIBCRYSTAX_FILE}\" NAME )\n  execute_process( COMMAND \"${CMAKE_COMMAND}\" -E copy_if_different \"${ANDROID_LIBCRYSTAX_FILE}\" \"${LIBRARY_OUTPUT_PATH}/${__libcrystaxname}\" RESULT_VARIABLE __fileCopyProcess )\n  if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS \"${LIBRARY_OUTPUT_PATH}/${__libcrystaxname}\" )\n    message( SEND_ERROR \"Failed copying if ${__libcrystaxname} to the ${LIBRARY_OUTPUT_PATH}/${__libcrystaxname}\" )\n  endif()\n  unset( __fileCopyProcess )\n  unset( __libcrystaxname )\nendif()\n\n# copy shared stl library to build directory\nif( NOT _CMAKE_IN_TRY_COMPILE AND __libstl MATCHES \"[.]so$\" AND DEFINED LIBRARY_OUTPUT_PATH )\n  get_filename_component( __libstlname \"${__libstl}\" NAME )\n  execute_process( COMMAND \"${CMAKE_COMMAND}\" -E copy_if_different \"${__libstl}\" \"${LIBRARY_OUTPUT_PATH}/${__libstlname}\" RESULT_VARIABLE __fileCopyProcess )\n  if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS \"${LIBRARY_OUTPUT_PATH}/${__libstlname}\")\n    message( SEND_ERROR \"Failed copying of ${__libstl} to the ${LIBRARY_OUTPUT_PATH}/${__libstlname}\" )\n  endif()\n  unset( __fileCopyProcess )\n  unset( __libstlname )\nendif()\n\nset( ADBRUNNER ${ANDROID_NDK}/tools/adbrunner --abi=${ANDROID_NDK_ABI_NAME} --run-on-all-devices )\nif ( CMAKE_POSITION_INDEPENDENT_CODE )\n  list( APPEND ADBRUNNER \"--pie\" )\nelse()\n  list( APPEND ADBRUNNER \"--no-pie\" )\nendif()\n\n# set these global flags for cmake client scripts to change behavior\nset( ANDROID True )\nset( BUILD_ANDROID True )\nset( CRYSTAX True )\n\n# where is the target environment\nset( CMAKE_FIND_ROOT_PATH \"${ANDROID_TOOLCHAIN_ROOT}/bin\" \"${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}\" \"${ANDROID_SYSROOT}\" \"${CMAKE_INSTALL_PREFIX}\" \"${CMAKE_INSTALL_PREFIX}/share\" )\n\n# only search for libraries and includes in the ndk toolchain\nset( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )\nset( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )\nset( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )\n\n\n# macro to find packages on the host OS\nmacro( find_host_package )\n set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )\n set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )\n set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )\n if( CMAKE_HOST_WIN32 )\n  SET( WIN32 1 )\n  SET( UNIX )\n elseif( CMAKE_HOST_APPLE )\n  SET( APPLE 1 )\n  SET( UNIX )\n endif()\n find_package( ${ARGN} )\n SET( WIN32 )\n SET( APPLE )\n SET( UNIX 1 )\n set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )\n set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )\n set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )\nendmacro()\n\n\n# macro to find programs on the host OS\nmacro( find_host_program )\n set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )\n set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )\n set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )\n if( CMAKE_HOST_WIN32 )\n  SET( WIN32 1 )\n  SET( UNIX )\n elseif( CMAKE_HOST_APPLE )\n  SET( APPLE 1 )\n  SET( UNIX )\n endif()\n find_program( ${ARGN} )\n SET( WIN32 )\n SET( APPLE )\n SET( UNIX 1 )\n set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )\n set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )\n set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )\nendmacro()\n\n\n# export toolchain settings for the try_compile() command\nif( NOT _CMAKE_IN_TRY_COMPILE )\n set( __toolchain_config \"\")\n foreach( __var NDK_CCACHE  LIBRARY_OUTPUT_PATH_ROOT  ANDROID_FORBID_SYGWIN\n                ANDROID_NDK_HOST_X64\n                ANDROID_NDK\n                ANDROID_STANDALONE_TOOLCHAIN\n                ANDROID_TOOLCHAIN_NAME\n                ANDROID_TOOLCHAIN_VERSION\n                ANDROID_ABI\n                ANDROID_NATIVE_API_LEVEL\n                ANDROID_STL\n                ANDROID_STL_FORCE_FEATURES\n                ANDROID_FORCE_ARM_BUILD\n                ANDROID_NO_UNDEFINED\n                ANDROID_SO_UNDEFINED\n                ANDROID_FUNCTION_LEVEL_LINKING\n                ANDROID_GOLD_LINKER\n                ANDROID_NOEXECSTACK\n                ANDROID_RELRO\n                ANDROID_EXPLICIT_CRT_LINK\n                ANDROID_APP_PIE\n                )\n  if( DEFINED ${__var} )\n   if( ${__var} MATCHES \" \")\n    set( __toolchain_config \"${__toolchain_config}set( ${__var} \\\"${${__var}}\\\" CACHE INTERNAL \\\"\\\" )\\n\" )\n   else()\n    set( __toolchain_config \"${__toolchain_config}set( ${__var} ${${__var}} CACHE INTERNAL \\\"\\\" )\\n\" )\n   endif()\n  endif()\n endforeach()\n file( WRITE \"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toolchain.config.cmake\" \"${__toolchain_config}\" )\n unset( __toolchain_config )\nendif()\n\n\n# force cmake to produce / instead of \\ in build commands for Ninja generator\nif( CMAKE_GENERATOR MATCHES \"Ninja\" AND CMAKE_HOST_WIN32 )\n # it is a bad hack after all\n # CMake generates Ninja makefiles with UNIX paths only if it thinks that we are going to build with MinGW\n set( CMAKE_COMPILER_IS_MINGW TRUE ) # tell CMake that we are MinGW\n set( CMAKE_CROSSCOMPILING TRUE )    # stop recursion\n enable_language( C )\n enable_language( CXX )\n # unset( CMAKE_COMPILER_IS_MINGW ) # can't unset because CMake does not convert back-slashes in response files without it\n unset( MINGW )\nendif()\n\n\n# Variables controlling behavior or set by cmake toolchain:\n#   ANDROID_ABI : \"armeabi-v7a\" (default), \"armeabi\", \"armeabi-v7a+neon\", \"armeabi-v7a+vfpv3\",\n#                 \"armeabi-v7a-hard\", \"armeabi-v7a-hard+neon\", \"armeabi-v7a-hard+vfpv3\",\n#                 \"armeabi-v6+vfp\", \"x86\", \"mips\", \"arm64-v8a\", \"x86_64\", \"mips64\"\n#   ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14,15,16,17,18,19,21 (depends on NDK version)\n#   ANDROID_STL : gnustl_static/gnustl_shared/system_re/system/none\n#   ANDROID_FORBID_SYGWIN : ON/OFF\n#   ANDROID_NO_UNDEFINED : ON/OFF\n#   ANDROID_SO_UNDEFINED : OFF/ON  (default depends on NDK version)\n#   ANDROID_FUNCTION_LEVEL_LINKING : ON/OFF\n#   ANDROID_GOLD_LINKER : ON/OFF\n#   ANDROID_NOEXECSTACK : ON/OFF\n#   ANDROID_RELRO : ON/OFF\n#   ANDROID_FORCE_ARM_BUILD : ON/OFF\n#   ANDROID_STL_FORCE_FEATURES : ON/OFF\n# Can be set only at the first run:\n#   ANDROID_NDK : path to your NDK install\n#   NDK_CCACHE : path to your ccache executable\n#   ANDROID_TOOLCHAIN_NAME : the NDK name of compiler toolchain\n#   ANDROID_NDK_HOST_X64 : try to use x86_64 toolchain (default for x64 host systems)\n#   LIBRARY_OUTPUT_PATH_ROOT : <any valid path>\n#   ANDROID_STANDALONE_TOOLCHAIN\n#\n# Primary read-only variables:\n#   ANDROID : always TRUE\n#   ARMEABI : TRUE for arm v6 and older devices\n#   ARMEABI_V6 : TRUE for arm v6\n#   ARMEABI_V7A : TRUE for arm v7a\n#   ARM64_V8A : TRUE for arm64-v8a\n#   NEON : TRUE if NEON unit is enabled\n#   VFPV3 : TRUE if VFP version 3 is enabled\n#   X86 : TRUE if configured for x86\n#   X86_64 : TRUE if configured for x86_64\n#   MIPS : TRUE if configured for mips\n#   MIPS64 : TRUE if configured for mips64\n#   BUILD_WITH_ANDROID_NDK : TRUE if NDK is used\n#   BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used\n#   ANDROID_NDK_HOST_SYSTEM_NAME : \"windows\", \"linux-x86\" or \"darwin-x86\" depending on host platform\n#   ANDROID_NDK_ABI_NAME : \"armeabi\", \"armeabi-v7a\", \"armeabi-v7a-hard\", \"x86\", \"mips\", \"arm64-v8a\", \"x86_64\", \"mips64\" depending on ANDROID_ABI\n#   ANDROID_ARCH_NAME : \"arm\", \"x86\", \"mips\", \"arm64\", \"x86_64\", \"mips64\" depending on ANDROID_ABI\n#   ANDROID_SYSROOT : path to the compiler sysroot\n#   TOOL_OS_SUFFIX : \"\" or \".exe\" depending on host platform\n#   ANDROID_COMPILER_IS_CLANG : TRUE if clang compiler is used\n#   ANDROID_PREBUILT_LIBRARIES : list of libraries to be copied with binary (such as libcrystax.so and libgnustl_shared.so)\n#\n# Secondary (less stable) read-only variables:\n#   ANDROID_COMPILER_VERSION : GCC version used (not Clang version)\n#   ANDROID_CLANG_VERSION : version of clang compiler if clang is used\n#   ANDROID_CXX_FLAGS : C/C++ compiler flags required by Android platform\n#   ANDROID_SUPPORTED_ABIS : list of currently allowed values for ANDROID_ABI\n#   ANDROID_TOOLCHAIN_MACHINE_NAME : \"arm-linux-androideabi\", \"arm-eabi\" or \"i686-android-linux\"\n#   ANDROID_TOOLCHAIN_ROOT : path to the top level of toolchain (standalone or placed inside NDK)\n#   ANDROID_CLANG_TOOLCHAIN_ROOT : path to clang tools\n#   ANDROID_SUPPORTED_NATIVE_API_LEVELS : list of native API levels found inside NDK\n#   ANDROID_STL_INCLUDE_DIRS : stl include paths\n#   ANDROID_RTTI : if rtti is enabled by the runtime\n#   ANDROID_EXCEPTIONS : if exceptions are enabled by the runtime\n#   ANDROID_GCC_TOOLCHAIN_NAME : read-only, differs from ANDROID_TOOLCHAIN_NAME only if clang is used\n#\n# Defaults:\n#   ANDROID_DEFAULT_NDK_API_LEVEL\n#   ANDROID_DEFAULT_NDK_API_LEVEL_${ARCH}\n#   ANDROID_SUPPORTED_ABIS_${ARCH}\n"
  },
  {
    "path": "config.py",
    "content": "major = 12\nhotfix = 0\nhotfix_str = chr(ord('a') + hotfix) if hotfix else ''\nrelease = 'r{}{}'.format(major, hotfix_str)\n"
  },
  {
    "path": "crew",
    "content": "#!/bin/bash\n\ncmd=`dirname $0`/crew.dir/crew\nif [ ! -f $cmd ]; then\n    cmd=`dirname $0`/../../crew/crew\nfi\n\nexec $cmd \"$@\"\n"
  },
  {
    "path": "crew.cmd",
    "content": "@echo off\nsetlocal\nset d=%~dp0%\n%d%crew.dir\\crew.cmd %*\n"
  },
  {
    "path": "docs/GeneratingSysroots.md",
    "content": "Generating NDK Sysroots\n=======================\n\nThe latest version of this document is available at\nhttps://android.googlesource.com/platform/ndk/+/master/docs/GeneratingSysroots.md.\n\nThe `platforms/` subtree of an NDK package contains sysroots for each\narchitecture and API level. The contents of these sysroots are generated as part\nof the NDK build.\n\nThe Sysroot Defintions\n----------------------\n\nThe contents of the sysroots are defined by `development/ndk/platforms`.\nNote that this is from the top level of the Android tree, not within the `ndk/`\nsubdirectory.\n\nThe layout of this tree is as follows:\n\n * `android-$VERSION`\n     * `include`\n     * `arch-$ARCH`\n         * `include`\n             * Architecture specific headers. Typically the `asm` and `machine`\n               directories.\n         * `lib`\n             * Prebuilt static libraries.\n             * Note that for the time being these are only libc, libm, libz, and\n               libstdc++, and that they are rarely updated (we have versions for\n               android-3, android-9, and android-21, but not any other\n               releases).\n         * `src`\n             * Source for the CRT objects (crtbegin, crtend, etc.).\n         * `symbols`\n             * Contains interface definitions for the shared platform libraries.\n             * Discussed in detail in [Shared Library Definitions].\n\nThese trees are a very reduced form of a sysroot. Not every header or library\nwill be in every platform version. Instead, [gen-platforms.sh] will build the\nfull sysroot from what is defined here. This is done to ease maintenance of the\nheaders and libraries. If, for example, `string.h` remained the same between\nGingerbread and KitKat, but was updated in Lollipop, there need only be a copy\nof `string.h` in android-9 and android-21, not in every intermediate release.\n\nShared Library Defintions\n-------------------------\n\nWhen an NDK binary links against a platform library, rather than shipping a copy\nof the library with the binary, it loads the library from the system itself (in\nthe case of an app, many of the libraries will already be loaded into the\naddress space by the zygote). As such, the shared libraries in the NDK do not\nneed to be valid aside from the symbols they expose. This simplifies things,\nbecause all we need to generate the shared libraries for a given architecture\nand platform version is a list of functions and variables.\n\nThe `android-$VERSION/arch-$ARCH/symbols/*.txt` files contain these library\ndefinitions. Each file is named either `$LIBNAME.functions.txt` or\n`$LIBNAME.variables.txt`. For each such file, [gen-platforms.sh] will create a\nstub shared library for that library with the functions and variables defined in\nthose lists.\n\nFor some platform versions (currently only android-23), there is also a\n`$LIBNAME.versions.txt`. This is a linker version script that will be used to\napply symbol versions when generating the stub shared library.\n\nExamples of each of these three file types can be found in\n[development/ndk/platforms/android-23/arch-arm64/symbols].\n\nAdding a New Platform API\n-------------------------\n\nThese instructions are valid both for adding new native frameworks APIs and\nupdating bionic.\n\n 1. If the platform version you are adding your API to does not yet exist, there\n    are no special steps; just make the new directory.\n 2. Add your (possibly new, possibly updated) headers to the include directory.\n 3. Add [Shared Library Definitions] files for each architecture to the\n    `arch-$ARCH/symbols` directory.\n 4. Add tests to [tests/device](../tests/device).\n 5. Build and test an NDK (see [README.md](../README.md)).\n 6. Upload your change(s) and add the current [NDK owners](../OWNERS) as\n    reviewers.\n\n[Shared Library Definitions]: #shared-library-defintions\n[gen-platforms.sh]: ../build/tools/gen-platforms.sh\n[development/ndk/platforms/android-23/arch-arm64/symbols]: https://android.googlesource.com/platform/development/+/master/ndk/platforms/android-23/arch-arm64/symbols\n"
  },
  {
    "path": "docs/Testing.md",
    "content": "Testing the NDK\n===============\n\nThe latest version of this document is available at\nhttps://android.googlesource.com/platform/ndk/+/master/docs/Testing.md.\n\nTesting Tools\n-------------\n\nThere are currently three tools used in testing:\n\n 1. `run-all.py`, for testing a specific configuration.\n 2. `validate.py`, for testing many configurations.\n 3. `ndk-test.sh`, for testing libc++.\n\nA test configuration is a tuple of (ABI, target platform, toolchain, device).\n\nAt some point the three of these will most likely merge into one script.\n\n### Testing a Single Configuration: [run-all.py]\n\nFor targeted testing during development, `run-all.py` can be used to verify a\nsingle test configuration, as well as run specific tests.\n\nRunning the NDK tests requires a complete NDK package (see [README.md] for\nbuilding instructions).\n\n[README.md]: ../README.md\n\nFrom the NDK source directory (not the extracted package):\n\n```bash\n$ python tests/run-all.py --abi $ABI_TO_TEST path/to/built/ndk\n```\n\nIn the case of a local build, the path to the built NDK will be\n`out/android-ndk-$RELEASE` unless you've overridden `OUT_DIR`.\n\nThe default toolchain for testing is Clang. To run the tests with GCC, use the\noption `--toolchain 4.9`.\n\nThe full test suite includes tests which run on a device or emulator, so you'll\nneed to have `adb` in your path and `ANDROID_SERIAL` set if more than one\ndevice/emulator is connected. If you do not have a device capable of running the\ntests, you can run just the `build` or `awk` test suites with the `--suite`\nflag.\n\n### Testing Multiple Configurations: [validate.py]\n\nWhen testing multiple configurations, `validate.py` will automatically detect\nconnected devices/emulators and choose a subset of them to fit our QA\nconfiguration. This script will run all of the tests across all available ABIs\non several devices, and thus will take a long time (takes ~75 minutes on my\nmachine, even with a few configurations unavailable). As such, this isn't\nsuitable for active development, but should be run for QA and for any changes\nthat might have a wide impact (compiler updates, `ndk-build` changes, sysroot\nchanges, etc).\n\nTo use this script, connect any devices and launch any emulators you need for\ntesting (make sure ADB has authorization to control them), then run:\n\n```bash\n$ python tests/validate.py path/to/built/ndk\n```\n\nIn the case of a local build, the path to the built NDK will be\n`out/android-ndk-$RELEASE` unless you've overridden `OUT_DIR`.\n\nBy default, test logs will be placed in $PWD/test-logs. This can be controlled\nwith the `--log-dir` flag.\n\n### Testing libc++: [ndk-test.sh]\n\nThe libc++ tests are not currently integrated into the main NDK tests. To run\nthe libc++ tests:\n\n```bash\n$ NDK=/path/to/extracted/ndk sources/cxx-stl/llvm-libc++/libcxx/ndk-test.sh $ABI\n```\n\nNote that these tests are far from failure free. In general, most of these tests\nare locale related and fail because we don't support anything beyond the C\nlocale.\n\nSetting Up a Test Environment\n-----------------------------\n\nTo run the NDK tests, you will need:\n\n * An NDK. The NDK doesn't necessarily need to contain support for every\n   architecture.\n * `adb` in your path.\n     * This is only needed if you're running device tests.\n     * Always use the latest available version of `adb`. Note that the version\n       of `adb` in the SDK manager might be surprisingly old. It's best to use a\n       version built fresh from AOSP.\n * A device or emulator attached.\n     * Again, only needed for device tests.\n\n### Devices and Emulators\n\nFor testing a release, make sure you're testing against the released builds of\nAndroid.\n\nFor Nexus devices, factory images are available here:\nhttps://developers.google.com/android/nexus/images. Googlers, you may want to\nuse the flash station to get a userdebug image since that is needed for ASAN\ntesting. You should still make sure you also test on user builds because that is\nwhat all of our users have.\n\nFor emulators, use emulator images from the SDK rather than from a platform\nbuild. Again, these are what our users will be using.\n\nAfter installing the emulator images from the SDK manager, they can be\nconfigured and launched for testing with (assuming the SDK tools directory is in\nyour path):\n\n```bash\n$ android create avd --name $NAME --target android-$LEVEL --abi $ABI\n$ emulator -avd $NAME -no-window -no-audio -no-skin\n```\n\nThis will create a new virtual device and launch it in a headless state.\n\nQA Configuration\n----------------\n\nThe current configuration we use to test NDK releases is as written in\n[validate.py]:\n\n```python\n{\n    10: {\n        'armeabi': None,\n        'armeabi-v7a': None,\n        'armeabi-v7a-hard': None,\n    },\n    16: {\n        'armeabi': None,\n        'armeabi-v7a': None,\n        'armeabi-v7a-hard': None,\n    },\n    23: {\n        'armeabi': None,\n        'armeabi-v7a': None,\n        'armeabi-v7a-hard': None,\n        'arm64-v8a': None,\n        'x86': None,\n        'x86_64': None,\n    },\n}\n```\n\nEach API level/ABI pair will be checked with both Clang and GCC.\n\nNote that there are no ARM64 emulators whatsoever in the SDK manager. Testing\nARM64 will require a physical device.\n\n[run-all.py]: ../tests/run-all.py\n[validate.py]: ../tests/validate.py\n[ndk-test.sh]: ../sources/cxx-stl/llvm-libc++/libcxx/ndk-test.sh\n"
  },
  {
    "path": "docs/Toolchains.md",
    "content": "Working with the NDK Toolchains\n===============================\n\nThe latest version of this document is available at\nhttps://android.googlesource.com/platform/ndk/+/master/docs/Testing.md.\n\nThe toolchains shipped in the NDK are not built as a part of the NDK build\nprocess. Instead they are built separately and checked into git as prebuilts\nthat are repackaged when shipped in the NDK. This applies to both Clang and GCC.\n\nBoth toolchains are built separately. An artifact of the build is a tarball of\nthe compiler for distribution. That artifact is unpacked into a location in the\nAndroid tree and checked in. The NDK build step for each toolchain simply packs\nup the contents of the directory.\n\nNote: Any changes to either toolchain need to be tested in the platform *and*\nthe NDK. The platform and the NDK both get their toolchains from the same build.\n\nThis process is far too manual. `checkbuild.py` should be updated (or additional\nscripts added) to ease this process.\n\nClang\n-----\n\nClang's build process is described in the platform's [ReadmeAndroid.md]. Note\nthat Clang cannot be built from the NDK tree. The output tarball is extracted to\n`prebuilts/clang/host/$HOST/clang-$BUILD_NUMBER`.  `checkbuild.py --module\nclang` repackages this as-is as `$OUT_DIR/dist/llvm-$HOST_TAG.zip`.\n\n[ReadmeAndroid.md]: https://android.googlesource.com/platform/external/clang/+/dev/ReadmeAndroid.md\n\n### Testing Local Changes\n\nTo test a Clang you just built:\n\n```bash\n$ export CLANG_PREBUILTS=`realpath ../prebuilts/clang/host/linux-x86`\n$ rm -r $CLANG_PREBUILTS/clang-dev\n$ tar xf path/to/clang-dev-linux-x86_64.tar.bz2 -C $CLANG_PREBUILTS\n# Edit ndk/build/tools/build-llvm.py and change the version to 'clang-dev'.\n$ ../prebuilts/ndk/symlink-clang.py dev\n$ ./checkbuild.py\n# Run tests.\n```\n\nFor details about running tests, see [Testing.md].\n\n[Testing.md]: Testing.md\n\nThis installs the new Clang into the prebuilts directory so it can be packaged\nby the NDK build. The `symlink-clang.py` line updates the symlinks in prebuilts\nNDK to point at the new Clang. The Clang in `prebuilts/ndk` is used for building\nlibc++ in the NDK. The difference between it and `prebuilts/clang` is the\ndirectory layout, which differs so that `ndk-build` can use it.\n\nIf you need to make changes to Clang after running the above steps, future\nupdates can be done more quickly with:\n\n```bash\n$ rm -r $CLANG_PREBUILTS/clang-dev\n$ tar xf path/to/clang-dev-linux-x86_64.bz2 -C $CLANG_PREBUILTS\n$ ./checkbuild.py --module clang --force-package\n# Run tests.\n```\n\nWe don't need to rebuild the whole NDK since we've already built most of it.\nNote that any NDK modules that were built with Clang won't be rebuilt (e.g.\nlibc++), so this is only going to be useful if you're debugging a test.\n\n### Updating to a New Clang\n\nThese steps need to be run after installing the new prebuilt from the build\nserver to `prebuilts/clang` (see the Clang docs).\n\n```bash\n# Edit ndk/build/tools/build-llvm.py and update the build number.\n$ ../prebuilts/ndk/symlink/clang.py # Latest version autodetected.\n$ ./checkbuid.py\n# Run tests.\n```\n\nGCC (and binutils)\n------------------\n\nGCC's build process is described in [GCC's README.md][GCCReadme]. Unlike Clang,\nGCC can be built from the NDK tree. The output tarball is extracted to\n`prebuilts/ndk/current/toolchains/$TOOLCHAIN/prebuilt/$HOST_TAG`. `checkbuild.py\n--module gcc` repackages this as-is as `$OUT_DIR/dist/gcc-$ARCH-$HOST_TAG.zip`.\n\nNote that GCC is a bit more complicated to update than Clang. `prebuilts/ndk`\ncontains only a prebuilt GCC, not prebuilt target gnustl (GNU's libstdc++,\nreferred to as gnustl in Android). As such, changes submitted to `toolchain/gcc`\nwill affect the gnustl build (`checkbuild.py --module gnustl`) will take effect\nimmediately.\n\n[GCCReadme]: https://android.googlesource.com/toolchain/gcc/+/master/README.md\n\n### Testing Local Changes\n\nTo test a GCC you just built:\n\n```bash\n$ export INSTALL_DIR=`realpath ../prebuilts/ndk/current`\n$ export TOOLCHAIN_DIR=$INSTALL_DIR/toolchains/$HOST_TAG\n$ rm -r $TOOLCHAIN_PATH/$TOOLCHAIN\n$ unzip ../out/dist/gcc-$ARCH-$HOST.zip -d $TOOLCHAIN_DIR\n$ ./checkbuild.py\n# Run tests.\n```\n\nWe're building an NDK and then replacing it's GCC with our own.\n\nFor details about running tests, see [Testing.md].\n\nAdditional changes will not require a full `checkbuild.py`. Instead:\n\n```bash\n$ ./checkbuild.py --module gcc\n$ ./checkbuild.py --module gcclibs\n$ ./checkbuild.py --module gnustl --force-package\n# Run tests.\n```\n\n### Updating to a New GCC\n\n```bash\n$ ../prebuilts/ndk/update-gcc.py $BUILD_NUMBER\n$ ./checkbuild.py\n# Run tests.\n```\n"
  },
  {
    "path": "ndk-build",
    "content": "#!/bin/sh\nDIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\n$DIR/build/ndk-build \"$@\""
  },
  {
    "path": "ndk-build.cmd",
    "content": "@echo off\n%~dp0\\build\\ndk-build.cmd %*\n"
  },
  {
    "path": "ndk-gdb",
    "content": "#!/bin/sh\nNDK_BIN_DIR=$(dirname $0)\n${NDK_BIN_DIR}/python ${NDK_BIN_DIR}/ndk-gdb.py $@\n"
  },
  {
    "path": "ndk-gdb.cmd",
    "content": "@echo off\nsetlocal\nset PREBUILT_BIN=%~dp0\nset SHELL=cmd\n\"%PREBUILT_BIN%/python.exe\" -u \"%~dp0ndk-gdb.py\" %*\nendlocal\n"
  },
  {
    "path": "ndk-gdb.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\nfrom __future__ import print_function\n\nimport argparse\nimport contextlib\nimport multiprocessing\nimport os\nimport operator\nimport posixpath\nimport signal\nimport subprocess\nimport sys\nimport time\nimport xml.etree.cElementTree as ElementTree\n\nimport logging\n\n# Shared functions across gdbclient.py and ndk-gdb.py.\n# ndk-gdb is installed to $NDK/prebuilt/<platform>/bin\nNDK_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..'))\nsys.path.append(os.path.join(NDK_PATH, \"python-packages\"))\nimport gdbrunner\n\n\ndef log(msg):\n    logger = logging.getLogger(__name__)\n    logger.info(msg)\n\n\ndef error(msg):\n    sys.exit(\"ERROR: {}\".format(msg))\n\n\nclass ArgumentParser(gdbrunner.ArgumentParser):\n    def __init__(self):\n        super(ArgumentParser, self).__init__()\n        self.add_argument(\n            \"--verbose\", \"-v\", action=\"store_true\",\n            help=\"enable verbose mode\")\n\n        self.add_argument(\n            \"--force\", \"-f\", action=\"store_true\",\n            help=\"kill existing debug session if it exists\")\n\n        self.add_argument(\n            \"--port\", type=int, nargs=\"?\", default=\"5039\",\n            help=\"override the port used on the host\")\n\n        self.add_argument(\n            \"--delay\", type=float, default=0.25,\n            help=\"delay in seconds to wait after starting activity.\\n\"\n                 \"defaults to 0.25, higher values may be needed on slower devices.\")\n\n        self.add_argument(\n            \"-p\", \"--project\", dest=\"project\",\n            help=\"specify application project path\")\n\n        app_group = self.add_argument_group(\"target selection\")\n        start_group = app_group.add_mutually_exclusive_group()\n\n        start_group.add_argument(\n            \"--attach\", nargs='?', dest=\"package_name\", metavar=\"PKG_NAME\",\n            help=\"attach to application. PKG_NAME to attach to can optionally be specified.\")\n\n        start_group.add_argument(\n            \"--launch\", action=\"store_true\", dest=\"launch\",\n            help=\"launch application activity (defaults to main activity, \"\n                 \"configurable with --launch-activity)\")\n\n        start_group.add_argument(\n            \"--launch-list\", action=\"store_true\",\n            help=\"list all launchable activity names from manifest\")\n\n        app_group.add_argument(\n            \"--launch-activity\", action=\"store\", metavar=\"ACTIVITY\",\n            dest=\"launch_target\", help=\"launch specified application activity\")\n\n\n        debug_group = self.add_argument_group(\"debugging options\")\n        debug_group.add_argument(\n            \"-x\", \"--exec\", dest=\"exec_file\",\n            help=\"execute gdb commands in EXEC_FILE after connection\")\n\n        debug_group.add_argument(\n            \"--nowait\", action=\"store_true\",\n            help=\"do not wait for debugger to attach (may miss early JNI \"\n                 \"breakpoints)\")\n\n        debug_group.add_argument(\n            \"-t\", \"--tui\", action=\"store_true\", dest=\"tui\",\n            help=\"use GDB's tui mode\")\n\n        debug_group.add_argument(\n            \"--stdcxx-py-pr\", dest=\"stdcxxpypr\",\n            help=\"use C++ library pretty-printer\",\n            choices=[\"auto\", \"none\", \"gnustl\", \"stlport\"],\n            default=\"auto\")\n\n\ndef extract_package_name(xmlroot):\n    if \"package\" in xmlroot.attrib:\n        return xmlroot.attrib[\"package\"]\n    error(\"Failed to find package name in AndroidManifest.xml\")\n\n\nANDROID_XMLNS = \"{http://schemas.android.com/apk/res/android}\"\ndef extract_launchable(xmlroot):\n    '''\n    A given application can have several activities, and each activity\n    can have several intent filters. We want to only list, in the final\n    output, the activities which have a intent-filter that contains the\n    following elements:\n\n      <action android:name=\"android.intent.action.MAIN\" />\n      <category android:name=\"android.intent.category.LAUNCHER\" />\n    '''\n    launchable_activities = []\n    application = xmlroot.findall(\"application\")[0]\n\n    main_action = \"android.intent.action.MAIN\"\n    launcher_category = \"android.intent.category.LAUNCHER\"\n    name_attrib = \"{}name\".format(ANDROID_XMLNS)\n\n    for activity in application.iter(\"activity\"):\n        if name_attrib not in activity.attrib:\n            continue\n\n        for intent_filter in activity.iter(\"intent-filter\"):\n            found_action = False\n            found_category = False\n            for child in intent_filter:\n                if child.tag == \"action\":\n                    if not found_action and name_attrib in child.attrib:\n                        if child.attrib[name_attrib] == main_action:\n                            found_action = True\n                if child.tag == \"category\":\n                    if not found_category and name_attrib in child.attrib:\n                        if child.attrib[name_attrib] == launcher_category:\n                            found_category = True\n            if found_action and found_category:\n                launchable_activities.append(activity.attrib[name_attrib])\n    return launchable_activities\n\n\ndef ndk_bin_path():\n    return os.path.dirname(os.path.realpath(__file__))\n\n\ndef handle_args():\n    def find_program(program, paths):\n        '''Find a binary in paths'''\n        exts = [\"\"]\n        if sys.platform.startswith(\"win\"):\n            exts += [\".exe\", \".bat\", \".cmd\"]\n        for path in paths:\n            if os.path.isdir(path):\n                for ext in exts:\n                    full = path + os.sep + program + ext\n                    if os.path.isfile(full):\n                        return full\n        return None\n\n    # FIXME: This is broken for PATH that contains quoted colons.\n    paths = os.environ[\"PATH\"].replace('\"', '').split(os.pathsep)\n\n    args = ArgumentParser().parse_args()\n    ndk_bin = ndk_bin_path()\n    args.make_cmd = find_program(\"make\", [ndk_bin])\n    args.jdb_cmd = find_program(\"jdb\", paths)\n    if args.make_cmd is None:\n        error(\"Failed to find make in '{}'\".format(ndk_bin))\n    if args.jdb_cmd is None:\n        print(\"WARNING: Failed to find jdb on your path, defaulting to \"\n              \"--nowait\")\n        args.nowait = True\n\n    if args.verbose:\n        logger = logging.getLogger(__name__)\n        handler = logging.StreamHandler(sys.stdout)\n        formatter = logging.Formatter()\n\n        handler.setFormatter(formatter)\n        logger.addHandler(handler)\n        logger.propagate = False\n\n        logger.setLevel(logging.INFO)\n\n    return args\n\n\ndef find_project(args):\n    manifest_name = \"AndroidManifest.xml\"\n    if args.project is not None:\n        log(\"Using project directory: {}\".format(args.project))\n        args.project = os.path.realpath(os.path.expanduser(args.project))\n        if not os.path.exists(os.path.join(args.project, manifest_name)):\n            msg = \"could not find AndroidManifest.xml in '{}'\"\n            error(msg.format(args.project))\n    else:\n        # Walk upwards until we find AndroidManifest.xml, or run out of path.\n        current_dir = os.getcwdu()\n        while not os.path.exists(os.path.join(current_dir, manifest_name)):\n            parent_dir = os.path.dirname(current_dir)\n            if parent_dir == current_dir:\n                error(\"Could not find AndroidManifest.xml in current\"\n                      \" directory or a parent directory.\\n\"\n                      \"       Launch this script from inside a project, or\"\n                      \" use --project=<path>.\")\n            current_dir = parent_dir\n        args.project = current_dir\n        log(\"Using project directory: {} \".format(args.project))\n    args.manifest_path = os.path.join(args.project, manifest_name)\n    return args.project\n\n\ndef canonicalize_activity(package_name, activity_name):\n    if activity_name.startswith(\".\"):\n        return \"{}{}\".format(package_name, activity_name)\n    return activity_name\n\n\ndef parse_manifest(args):\n    manifest = ElementTree.parse(args.manifest_path)\n    manifest_root = manifest.getroot()\n    package_name = extract_package_name(manifest_root)\n    log(\"Found package name: {}\".format(package_name))\n\n    activities = extract_launchable(manifest_root)\n    activities = [canonicalize_activity(package_name, a) for a in activities]\n\n    if args.launch_list:\n        print(\"Launchable activities: {}\".format(\", \".join(activities)))\n        sys.exit(0)\n\n    args.activities = activities\n    args.package_name = package_name\n\n\ndef select_target(args):\n    assert args.launch\n    if len(args.activities) == 0:\n        error(\"No launchable activities found.\")\n\n    if args.launch_target is None:\n        args.launch_target = args.activities[0]\n\n        if len(args.activities) > 1:\n            print(\"WARNING: Multiple launchable activities found, choosing\"\n                  \" '{}'.\".format(args.activities[0]))\n    else:\n        canonicalize = canonicalize_activity(args.package_name)\n        activity_name = canonicalize(args.launch_target)\n\n        if activity_name not in args.activities:\n            msg = \"Could not find launchable activity: '{}'.\"\n            error(msg.format(activity_name))\n        args.launch_target = activity_name\n    return args.launch_target\n\n\n@contextlib.contextmanager\ndef cd(path):\n    curdir = os.getcwd()\n    os.chdir(path)\n    os.environ[\"PWD\"] = path\n    try:\n        yield\n    finally:\n        os.environ[\"PWD\"] = curdir\n        os.chdir(curdir)\n\n\ndef dump_var(args, variable, abi=None):\n    make_args = [args.make_cmd, \"--no-print-dir\", \"-f\",\n                 os.path.join(NDK_PATH, \"build/core/build-local.mk\"),\n                 \"-C\", args.project, \"DUMP_{}\".format(variable)]\n\n    if abi is not None:\n        make_args.append(\"APP_ABI={}\".format(abi))\n\n    with cd(args.project):\n        try:\n            make_output = subprocess.check_output(make_args, cwd=args.project)\n        except subprocess.CalledProcessError:\n            error(\"Failed to retrieve application ABI from Android.mk.\")\n    return make_output.splitlines()[0]\n\n\ndef get_api_level(device_props):\n    # Check the device API level\n    if \"ro.build.version.sdk\" not in device_props:\n        error(\"Failed to find target device's supported API level.\\n\"\n              \"ndk-gdb only supports devices running Android 2.2 or higher.\")\n    api_level = int(device_props[\"ro.build.version.sdk\"])\n    if api_level < 8:\n        error(\"ndk-gdb only supports devices running Android 2.2 or higher.\\n\"\n              \"(expected API level 8, actual: {})\".format(api_level))\n\n    return api_level\n\n\ndef fetch_abi(args):\n    '''\n    Figure out the intersection of which ABIs the application is built for and\n    which ones the device supports, then pick the one preferred by the device,\n    so that we know which gdbserver to push and run on the device.\n    '''\n\n    app_abis = dump_var(args, \"APP_ABI\").split(\" \")\n    if \"all\" in app_abis:\n        app_abis = dump_var(args, \"NDK_ALL_ABIS\").split(\" \")\n    app_abis_msg = \"Application ABIs: {}\".format(\", \".join(app_abis))\n    log(app_abis_msg)\n\n    device_props = args.device.get_props()\n\n    new_abi_props = [\"ro.product.cpu.abilist\"]\n    old_abi_props = [\"ro.product.cpu.abi\", \"ro.product.cpu.abi2\"]\n    abi_props = new_abi_props\n    if len(set(new_abi_props).intersection(device_props.keys())) == 0:\n        abi_props = old_abi_props\n\n    device_abis = [device_props[key].split(\",\") for key in abi_props]\n\n    # Flatten the list.\n    device_abis = reduce(operator.add, device_abis)\n    device_abis_msg = \"Device ABIs: {}\".format(\", \".join(device_abis))\n    log(device_abis_msg)\n\n    for abi in device_abis:\n        if abi in app_abis:\n            # TODO(jmgao): Do we expect gdb to work with ARM-x86 translation?\n            log(\"Selecting ABI: {}\".format(abi))\n            return abi\n\n    msg = \"Application cannot run on the selected device.\"\n\n    # Don't repeat ourselves.\n    if not args.verbose:\n        msg += \"\\n{}\\n{}\".format(app_abis_msg, device_abis_msg)\n\n    error(msg)\n\n\ndef get_app_data_dir(args, package_name):\n    cmd = [\"/system/bin/sh\", \"-c\", \"pwd\", \"2>/dev/null\"]\n    cmd = gdbrunner.get_run_as_cmd(package_name, cmd)\n    (rc, stdout, _) = args.device.shell_nocheck(cmd)\n    if rc != 0:\n        error(\"Could not find application's data directory. Are you sure that \"\n              \"the application is installed and debuggable?\")\n    data_dir = stdout.strip()\n    log(\"Found application data directory: {}\".format(data_dir))\n    return data_dir\n\n\ndef abi_to_arch(abi):\n    if abi.startswith(\"armeabi\"):\n        return \"arm\"\n    elif abi == \"arm64-v8a\":\n        return \"arm64\"\n    else:\n        return abi\n\n\ndef get_gdbserver_path(args, package_name, app_data_dir, arch):\n    app_gdbserver_path = \"{}/lib/gdbserver\".format(app_data_dir)\n    cmd = [\"ls\", app_gdbserver_path, \"2>/dev/null\"]\n    cmd = gdbrunner.get_run_as_cmd(package_name, cmd)\n    (rc, _, _) = args.device.shell_nocheck(cmd)\n    if rc == 0:\n        log(\"Found app gdbserver: {}\".format(app_gdbserver_path))\n        return app_gdbserver_path\n\n    # We need to upload our gdbserver\n    log(\"App gdbserver not found at {}, uploading.\".format(app_gdbserver_path))\n    local_path = \"{}/prebuilt/android-{}/gdbserver/gdbserver\"\n    local_path = local_path.format(NDK_PATH, arch)\n    remote_path = \"/data/local/tmp/{}-gdbserver\".format(arch)\n    args.device.push(local_path, remote_path)\n\n    # Copy gdbserver into the data directory on M+, because selinux prevents\n    # execution of binaries directly from /data/local/tmp.\n    if get_api_level(args.props) >= 23:\n        destination = \"{}/{}-gdbserver\".format(app_data_dir, arch)\n        log(\"Copying gdbserver to {}.\".format(destination))\n        cmd = [\"cat\", remote_path, \"|\", \"run-as\", package_name,\n               \"sh\", \"-c\", \"'cat > {}'\".format(destination)]\n        (rc, _, _) = args.device.shell_nocheck(cmd)\n        if rc != 0:\n            error(\"Failed to copy gdbserver to {}.\".format(destination))\n        (rc, _, _) = args.device.shell_nocheck([\"run-as\", package_name,\n                                                \"chmod\", \"700\", destination])\n        if rc != 0:\n            error(\"Failed to chmod gdbserver at {}.\".format(destination))\n\n        remote_path = destination\n\n    log(\"Uploaded gdbserver to {}\".format(remote_path))\n    return remote_path\n\n\ndef pull_binaries(device, out_dir, app_64bit):\n    required_files = []\n    libraries = [\"libc.so\", \"libm.so\", \"libdl.so\"]\n\n    if app_64bit:\n        required_files = [\"/system/bin/app_process64\", \"/system/bin/linker64\"]\n        library_path = \"/system/lib64\"\n    else:\n        required_files = [\"/system/bin/linker\"]\n        library_path = \"/system/lib\"\n\n    for library in libraries:\n        required_files.append(posixpath.join(library_path, library))\n\n    for required_file in required_files:\n        # os.path.join not used because joining absolute paths will pick the last one\n        local_path = os.path.realpath(out_dir + required_file)\n        local_dirname = os.path.dirname(local_path)\n        if not os.path.isdir(local_dirname):\n            os.makedirs(local_dirname)\n        log(\"Pulling '{}' to '{}'\".format(required_file, local_path))\n        device.pull(required_file, local_path)\n\n    # /system/bin/app_process is 32-bit on 32-bit devices, but a symlink to\n    # app_process64 on 64-bit. If we need the 32-bit version, try to pull\n    # app_process32, and if that fails, pull app_process.\n    if not app_64bit:\n        destination = os.path.realpath(out_dir + \"/system/bin/app_process\")\n        try:\n            device.pull(\"/system/bin/app_process32\", destination)\n        except:\n            device.pull(\"/system/bin/app_process\", destination)\n\ndef generate_gdb_script(args, sysroot, binary_path, app_64bit, connect_timeout=5):\n    if sys.platform.startswith(\"win\"):\n        # GDB expects paths to use forward slashes.\n        sysroot = sysroot.replace(\"\\\\\", \"/\")\n        binary_path = binary_path.replace(\"\\\\\", \"/\")\n\n    gdb_commands = \"set osabi GNU/Linux\\n\"\n    gdb_commands += \"file '{}'\\n\".format(binary_path)\n\n    solib_search_path = [sysroot, \"{}/system/bin\".format(sysroot)]\n    if app_64bit:\n        solib_search_path.append(\"{}/system/lib64\".format(sysroot))\n    else:\n        solib_search_path.append(\"{}/system/lib\".format(sysroot))\n    solib_search_path = os.pathsep.join(solib_search_path)\n    gdb_commands += \"set solib-absolute-prefix {}\\n\".format(sysroot)\n    gdb_commands += \"set solib-search-path {}\\n\".format(solib_search_path)\n\n    # Try to connect for a few seconds, sometimes the device gdbserver takes\n    # a little bit to come up, especially on emulators.\n    gdb_commands += \"\"\"\npython\n\ndef target_remote_with_retry(target, timeout_seconds):\n  import time\n  end_time = time.time() + timeout_seconds\n  while True:\n    try:\n      gdb.execute('target remote ' + target)\n      return True\n    except gdb.error as e:\n      time_left = end_time - time.time()\n      if time_left < 0 or time_left > timeout_seconds:\n        print(\"Error: unable to connect to device.\")\n        print(e)\n        return False\n      time.sleep(min(0.25, time_left))\n\ntarget_remote_with_retry(':{}', {})\n\nend\n\"\"\".format(args.port, connect_timeout)\n\n    # Set up the pretty printer if needed\n    if args.pypr_dir is not None and args.pypr_fn is not None:\n        gdb_commands += \"\"\"\npython\nimport sys\nsys.path.append(\"{pypr_dir}\")\nfrom printers import {pypr_fn}\n{pypr_fn}(None)\nend\"\"\".format(pypr_dir=args.pypr_dir.replace(\"\\\\\", \"/\"), pypr_fn=args.pypr_fn)\n\n    if args.exec_file is not None:\n        try:\n            exec_file = open(args.exec_file, \"r\")\n        except IOError:\n            error(\"Failed to open GDB exec file: '{}'.\".format(args.exec_file))\n\n        with exec_file:\n            gdb_commands += exec_file.read()\n\n    return gdb_commands\n\n\ndef detect_stl_pretty_printer(args):\n    stl = dump_var(args, \"APP_STL\")\n    if not stl:\n        detected = \"none\"\n        if args.stdcxxpypr == \"auto\":\n            log(\"APP_STL not found, disabling pretty printer\")\n    elif stl.startswith(\"stlport\"):\n        detected = \"stlport\"\n    elif stl.startswith(\"gnustl\"):\n        detected = \"gnustl\"\n    else:\n        detected = \"none\"\n\n    if args.stdcxxpypr == \"auto\":\n        log(\"Detected pretty printer: {}\".format(detected))\n        return detected\n    if detected != args.stdcxxpypr and args.stdcxxpypr != \"none\":\n        print(\"WARNING: detected APP_STL ('{}') does not match pretty printer\".format(detected))\n    log(\"Using specified pretty printer: {}\".format(args.stdcxxpypr))\n    return args.stdcxxpypr\n\n\ndef find_pretty_printer(pretty_printer):\n    if pretty_printer == \"gnustl\":\n        path = os.path.join(\"libstdcxx\", \"gcc-4.9\")\n        function = \"register_libstdcxx_printers\"\n    elif pretty_printer == \"stlport\":\n        path = os.path.join(\"stlport\", \"stlport\")\n        function = \"register_stlport_printers\"\n    pp_path = os.path.join(\n        ndk_bin_path(), \"..\", \"share\", \"pretty-printers\", path)\n    return pp_path, function\n\n\ndef start_jdb(args, pid):\n    log(\"Starting jdb to unblock application.\")\n\n    # Give gdbserver some time to attach.\n    time.sleep(0.5)\n\n    # Do setup stuff to keep ^C in the parent from killing us.\n    signal.signal(signal.SIGINT, signal.SIG_IGN)\n    windows = sys.platform.startswith(\"win\")\n    if not windows:\n        os.setpgrp()\n\n    jdb_port = 65534\n    args.device.forward(\"tcp:{}\".format(jdb_port), \"jdwp:{}\".format(pid))\n    jdb_cmd = [args.jdb_cmd, \"-connect\",\n               \"com.sun.jdi.SocketAttach:hostname=localhost,port={}\".format(jdb_port)]\n\n    flags = subprocess.CREATE_NEW_PROCESS_GROUP if windows else 0\n    jdb = subprocess.Popen(jdb_cmd,\n                           stdin=subprocess.PIPE,\n                           stdout=subprocess.PIPE,\n                           stderr=subprocess.STDOUT,\n                           creationflags=flags)\n    jdb.stdin.write(\"exit\\n\")\n    jdb.wait()\n    log(\"JDB finished unblocking application.\")\n\n\ndef main():\n    args = handle_args()\n    device = args.device\n\n    if device is None:\n        error(\"Could not find a unique connected device/emulator.\")\n\n    adb_version = subprocess.check_output(device.adb_cmd + [\"version\"])\n    log(\"ADB command used: '{}'\".format(\" \".join(device.adb_cmd)))\n    log(\"ADB version: {}\".format(\" \".join(adb_version.splitlines())))\n\n    args.props = device.get_props()\n\n    project = find_project(args)\n    if args.package_name:\n        log(\"Attaching to specified package: {}\".format(args.package_name))\n    else:\n        parse_manifest(args)\n\n    pkg_name = args.package_name\n\n    if args.launch is False:\n        log(\"Attaching to existing application process.\")\n    else:\n        launch_target = select_target(args)\n        log(\"Selected target activity: '{}'\".format(launch_target))\n\n    abi = fetch_abi(args)\n\n    out_dir = os.path.join(project, (dump_var(args, \"TARGET_OUT\", abi)))\n    out_dir = os.path.realpath(out_dir)\n\n    pretty_printer = detect_stl_pretty_printer(args)\n    if pretty_printer != \"none\":\n        (args.pypr_dir, args.pypr_fn) = find_pretty_printer(pretty_printer)\n    else:\n        (args.pypr_dir, args.pypr_fn) = (None, None)\n\n    app_data_dir = get_app_data_dir(args, pkg_name)\n    arch = abi_to_arch(abi)\n    gdbserver_path = get_gdbserver_path(args, pkg_name, app_data_dir, arch)\n\n    # Kill the process and gdbserver if requested.\n    if args.force:\n        kill_pids = gdbrunner.get_pids(device, gdbserver_path)\n        if args.launch:\n            kill_pids += gdbrunner.get_pids(device, pkg_name)\n        kill_pids = map(str, kill_pids)\n        if kill_pids:\n            log(\"Killing processes: {}\".format(\", \".join(kill_pids)))\n            device.shell_nocheck([\"run-as\", pkg_name, \"kill\", \"-9\"] + kill_pids)\n\n    # Launch the application if needed, and get its pid\n    if args.launch:\n        am_cmd = [\"am\", \"start\"]\n        if not args.nowait:\n            am_cmd.append(\"-D\")\n        component_name = \"{}/{}\".format(pkg_name, launch_target)\n        am_cmd.append(component_name)\n        log(\"Launching activity {}...\".format(component_name))\n        (rc, _, _) = device.shell_nocheck(am_cmd)\n        if rc != 0:\n            error(\"Failed to start {}\".format(component_name))\n\n        if args.delay > 0.0:\n            log(\"Sleeping for {} seconds.\".format(args.delay))\n            time.sleep(args.delay)\n\n    pids = gdbrunner.get_pids(device, pkg_name)\n    if len(pids) == 0:\n        error(\"Failed to find running process '{}'\".format(pkg_name))\n    if len(pids) > 1:\n        error(\"Multiple running processes named '{}'\".format(pkg_name))\n    pid = pids[0]\n\n    # Pull the linker, zygote, and notable system libraries\n    app_64bit = \"64\" in abi\n    pull_binaries(device, out_dir, app_64bit)\n    if app_64bit:\n        zygote_path = os.path.join(out_dir, \"system\", \"bin\", \"app_process64\")\n    else:\n        zygote_path = os.path.join(out_dir, \"system\", \"bin\", \"app_process\")\n\n    # Start gdbserver.\n    debug_socket = posixpath.join(app_data_dir, \"debug_socket\")\n    log(\"Starting gdbserver...\")\n    gdbrunner.start_gdbserver(\n        device, None, gdbserver_path,\n        target_pid=pid, run_cmd=None, debug_socket=debug_socket,\n        port=args.port, user=pkg_name)\n\n    gdb_path = os.path.join(ndk_bin_path(), \"gdb\")\n\n    # Start jdb to unblock the application if necessary.\n    if args.launch and not args.nowait:\n        # Do this in a separate process before starting gdb, since jdb won't\n        # connect until gdb connects and continues.\n        jdb_process = multiprocessing.Process(target=start_jdb, args=(args, pid))\n        jdb_process.start()\n\n    # Start gdb.\n    gdb_commands = generate_gdb_script(args, out_dir, zygote_path, app_64bit)\n    gdb_flags = []\n    if args.tui:\n        gdb_flags.append(\"--tui\")\n    gdbrunner.start_gdb(gdb_path, gdb_commands, gdb_flags)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ndk-which",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2012 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is useful for learning the path of the active toolchain\n# components within the ndk.\n# Run this script without parameters, for usage hints.\n\n# show usage if no parameter given\nWHICH=$1\nif [ \"$WHICH\" == \"\" ]; then\n  echo \"USAGE: ndk-which <tool>\"\n  echo \"where tool is 'gdb', 'gcc', 'objdump', etc.\"\n  exit 1\nfi\n\nMYNDKDIR=`dirname $0`/../../..\n\n# create a temporary skeleton project so that we can leverage build-local.mk\nTMPDIR=/tmp/ndk-which-$$\nmkdir -p $TMPDIR/jni\ncat >$TMPDIR/jni/Android.mk << \"END_OF_FILE\"\ninclude $(CLEAR_VARS)\nEND_OF_FILE\n\n# 'get_build_var_for_abi' was copied from ndk-gdb\nget_build_var_for_abi ()\n{\n    if [ -z \"$GNUMAKE\" ] ; then\n        GNUMAKE=make\n    fi\n    NDK_PROJECT_PATH=$TMPDIR $GNUMAKE --no-print-dir -f $MYNDKDIR/build/core/build-local.mk DUMP_$1 APP_ABI=$2\n}\n\nTOOLCHAIN_PREFIX=`get_build_var_for_abi TOOLCHAIN_PREFIX armeabi`\nrm -Rf $TMPDIR\n\n# fully qualified file name\nFQFN=${TOOLCHAIN_PREFIX}$WHICH\n\n# use the host system's 'which' to decide/report if the file exists or not, and is executable\nwhich \"$FQFN\"\n\n"
  },
  {
    "path": "prebuilt/common/gdb/common.setup",
    "content": "# ART debugging.  ART uses SIGSEGV signals for internal purposes.  To allow\n# gdb to debug programs using ART we need to treat this signal specially.  We\n# also set a breakpoint in a libart.so function to stop when the program\n# hits an unexpected breakpoint\nset $art_debug_enabled = 0\ndefine art-on\n    if $art_debug_enabled == 0\n        # deal with SIGSEGV signals\n        handle SIGSEGV noprint nostop pass\n\n        # set a breakpoint and record its number\n        set breakpoint pending on\n        break art_sigsegv_fault\n        set $art_bpnum = $bpnum\n        commands $art_bpnum\n        silent\n        printf \"Caught SIGSEGV in user program\\n\"\n        end\n        set breakpoint pending auto\n\n        printf \"ART debugging mode is enabled.\\n\"\n        printf \"If you are debugging a native only process, you need to\\n\"\n        printf \"re-enable normal SIGSEGV handling using this command:\\n\"\n        printf \"  handle SIGSEGV print stop\\n\"\n        set $art_debug_enabled = 1\n    else\n        printf \"ART debugging mode is already enabled.\\n\"\n    end\nend\n\ndocument art-on\n    Enter ART debugging mode. In ART debugging mode, SIGSEGV signals are ignored\n    by gdb unless they are not handled by ART itself.  A breakpoint is\n    set to stop the program when an unexpected SIGSEGV signal is\n    encountered.\n\n    To switch ART debugging mode off, use \"art-off\"\nend\n\ndefine art-off\n    if $art_debug_enabled == 1\n        # restore SIGSEGV to its default\n        handle SIGSEGV print stop pass\n\n        # delete our breakpoint\n        delete $art_bpnum\n\n        set $art_debug_enabled = 0\n        printf \"ART debugging mode is disabled.\\n\"\n    end\nend\n\ndocument art-off\n    Leave ART debugging mode.  Signal handling is restored to default settings.\n\n    Use the command \"art-on\" to enable ART debugging mode.\nend\n"
  },
  {
    "path": "samples/.gitignore",
    "content": "/MoreTeapots/\n/Teapot/\n/bitmap-plasma/\n/gles3jni/\n/hello-gl2/\n/hello-jni/\n/hello-neon/\n/module-exports/\n/native-activity/\n/native-audio/\n/native-codec/\n/native-media/\n/native-plasma/\n/san-angeles/\n/test-libstdc++/\n/two-libs/\n"
  },
  {
    "path": "samples/README.md",
    "content": "Where did the NDK samples go?\n=============================\n\nThe samples have been moved to [github](https://github.com/googlesamples/android-ndk).\n\nAndroid Studio users: import with `File > Import Sample... > C++`\n\nCommand line Gradle users: go to\nhttps://github.com/googlesamples/android-ndk\n\nAndroid.mk users: go to\nhttps://github.com/googlesamples/android-ndk/tree/android-mk\n"
  },
  {
    "path": "samples/test-debug/.gitignore",
    "content": "bin/\ngen/\nlibs/\nobj/\n"
  },
  {
    "path": "samples/test-debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      package=\"com.example.testdebug\"\n      android:versionCode=\"1\"\n      android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"3\" />\n    <application android:label=\"@string/app_name\"\n                 android:debuggable=\"true\">\n        <activity android:name=\".TestDebug\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n</manifest> \n"
  },
  {
    "path": "samples/test-debug/jni/Android.mk",
    "content": "# Copyright (C) 2009 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE    := testdebug\nLOCAL_SRC_FILES := testdebug.c\n\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "samples/test-debug/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "samples/test-debug/jni/testdebug.c",
    "content": "/*\n * Copyright (C) 2009 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n#include <string.h>\n#include <jni.h>\n\n/* This is a trivial JNI example where we use a native method\n * to return a new VM String. See the corresponding Java source\n * file located at:\n *\n *   src/com/example/testdebug/TestDebug.java\n */\njstring\nJava_com_example_testdebug_TestDebug_stringFromJNI( JNIEnv* env,\n                                                    jobject thiz )\n{\n#if defined(__arm__)\n  #if defined(__ARM_ARCH_7A__)\n    #if defined(__ARM_NEON__)\n      #if defined(__ARM_PCS_VFP)\n        #define ABI \"armeabi-v7a/NEON (hard-float)\"\n      #else\n        #define ABI \"armeabi-v7a/NEON\"\n      #endif\n    #else\n      #if defined(__ARM_PCS_VFP)\n        #define ABI \"armeabi-v7a (hard-float)\"\n      #else\n        #define ABI \"armeabi-v7a\"\n      #endif\n    #endif\n  #else\n   #define ABI \"armeabi\"\n  #endif\n#elif defined(__i386__)\n   #define ABI \"x86\"\n#elif defined(__x86_64__)\n   #define ABI \"x86_64\"\n#elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */\n   #define ABI \"mips64\"\n#elif defined(__mips__)\n   #define ABI \"mips\"\n#elif defined(__aarch64__)\n   #define ABI \"arm64-v8a\"\n#else\n   #define ABI \"unknown\"\n#endif\n\n    return (*env)->NewStringUTF(env, \"Hello from JNI !  Compiled with ABI \" ABI \".\");\n}\n"
  },
  {
    "path": "samples/test-debug/proguard-project.txt",
    "content": "# To enable ProGuard in your project, edit project.properties\n# to define the proguard.config property as described in that file.\n#\n# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in ${sdk.dir}/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the ProGuard\n# include property in project.properties.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "samples/test-debug/project.properties",
    "content": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# This file must be checked in Version Control Systems.\n#\n# To customize properties used by the Ant build system edit\n# \"ant.properties\", and override values to adapt the script to your\n# project structure.\n#\n# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):\n#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt\n\n# Project target.\ntarget=android-10\n"
  },
  {
    "path": "samples/test-debug/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\">TestDebug</string>\n</resources>\n"
  },
  {
    "path": "samples/test-debug/src/com/example/testdebug/TestDebug.java",
    "content": "/*\n * Copyright (C) 2009, 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\npackage com.example.testdebug;\n\nimport android.app.Activity;\nimport android.widget.TextView;\nimport android.os.Bundle;\n\n\npublic class TestDebug extends Activity\n{\n    /** Called when the activity is first created. */\n    @Override\n    public void onCreate(Bundle savedInstanceState)\n    {\n        super.onCreate(savedInstanceState);\n\n        /* Create a TextView and set its content.\n         * the text is retrieved by calling a native\n         * function.\n         */\n        TextView  tv = new TextView(this);\n        tv.setText( stringFromJNI() );\n        setContentView(tv);\n    }\n\n    /* A native method that is implemented by the\n     * 'testdebug' native library, which is packaged\n     * with this application.\n     */\n    public native String  stringFromJNI();\n\n    /* this is used to load the 'testdebug' library on application\n     * startup. The library has already been unpacked into\n     * /data/data/com.example.hellojni/lib/libtestdebug.so at\n     * installation time by the package manager.\n     */\n    static {\n        System.loadLibrary(\"crystax\");\n        System.loadLibrary(\"testdebug\");\n    }\n}\n"
  },
  {
    "path": "sources/android/.gitignore",
    "content": "gccunwind/libs\ncompiler-rt/libs\nnative_app_glue/\nndk_helper/\nlibportable/\n"
  },
  {
    "path": "sources/android/compiler-rt/Android.mk",
    "content": "LOCAL_PATH:= $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE:= compiler_rt_shared\nLOCAL_SRC_FILES:= libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)\ninclude $(PREBUILT_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE:= compiler_rt_static\nLOCAL_SRC_FILES:= libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)\ninclude $(PREBUILT_STATIC_LIBRARY)\n\n"
  },
  {
    "path": "sources/android/cpufeatures/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifdef HISTORICAL_NDK_VERSIONS_ROOT\n# This is included by the platform build system.\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := cpufeatures\nLOCAL_SRC_FILES := cpu-features.c\nLOCAL_SDK_VERSION := 9\nLOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)\ninclude $(BUILD_STATIC_LIBRARY)\n\nelse # NDK build system\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := cpufeatures\nLOCAL_SRC_FILES := cpu-features.c\nLOCAL_CFLAGS := -Wall -Wextra -Werror\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_EXPORT_LDLIBS := -ldl\ninclude $(BUILD_STATIC_LIBRARY)\n\nendif # HISTORICAL_NDK_VERSIONS_ROOT\n"
  },
  {
    "path": "sources/android/cpufeatures/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "sources/android/cpufeatures/cpu-features.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/* ChangeLog for this library:\n *\n * NDK r10e?: Add MIPS MSA feature.\n *\n * NDK r10: Support for 64-bit CPUs (Intel, ARM & MIPS).\n *\n * NDK r8d: Add android_setCpu().\n *\n * NDK r8c: Add new ARM CPU features: VFPv2, VFP_D32, VFP_FP16,\n *          VFP_FMA, NEON_FMA, IDIV_ARM, IDIV_THUMB2 and iWMMXt.\n *\n *          Rewrite the code to parse /proc/self/auxv instead of\n *          the \"Features\" field in /proc/cpuinfo.\n *\n *          Dynamically allocate the buffer that hold the content\n *          of /proc/cpuinfo to deal with newer hardware.\n *\n * NDK r7c: Fix CPU count computation. The old method only reported the\n *           number of _active_ CPUs when the library was initialized,\n *           which could be less than the real total.\n *\n * NDK r5: Handle buggy kernels which report a CPU Architecture number of 7\n *         for an ARMv6 CPU (see below).\n *\n *         Handle kernels that only report 'neon', and not 'vfpv3'\n *         (VFPv3 is mandated by the ARM architecture is Neon is implemented)\n *\n *         Handle kernels that only report 'vfpv3d16', and not 'vfpv3'\n *\n *         Fix x86 compilation. Report ANDROID_CPU_FAMILY_X86 in\n *         android_getCpuFamily().\n *\n * NDK r4: Initial release\n */\n\n#include \"cpu-features.h\"\n\n#include <dlfcn.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <pthread.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/system_properties.h>\n\nstatic  pthread_once_t     g_once;\nstatic  int                g_inited;\nstatic  AndroidCpuFamily   g_cpuFamily;\nstatic  AndroidCpuFamily   g_runtimeCpuFamily;\nstatic  uint64_t           g_cpuFeatures;\nstatic  int                g_cpuCount;\n\n#ifdef __arm__\nstatic  uint32_t           g_cpuIdArm;\n#endif\n\nstatic const int android_cpufeatures_debug = 0;\n\n#define  D(...) \\\n    do { \\\n        if (android_cpufeatures_debug) { \\\n            printf(__VA_ARGS__); fflush(stdout); \\\n        } \\\n    } while (0)\n\n#ifdef __i386__\nstatic __inline__ void x86_cpuid(int func, int values[4])\n{\n    int a, b, c, d;\n    /* We need to preserve ebx since we're compiling PIC code */\n    /* this means we can't use \"=b\" for the second output register */\n    __asm__ __volatile__ ( \\\n      \"push %%ebx\\n\"\n      \"cpuid\\n\" \\\n      \"mov %%ebx, %1\\n\"\n      \"pop %%ebx\\n\"\n      : \"=a\" (a), \"=r\" (b), \"=c\" (c), \"=d\" (d) \\\n      : \"a\" (func) \\\n    );\n    values[0] = a;\n    values[1] = b;\n    values[2] = c;\n    values[3] = d;\n}\n#elif defined(__x86_64__)\nstatic __inline__ void x86_cpuid(int func, int values[4])\n{\n    int64_t a, b, c, d;\n    /* We need to preserve ebx since we're compiling PIC code */\n    /* this means we can't use \"=b\" for the second output register */\n    __asm__ __volatile__ ( \\\n      \"push %%rbx\\n\"\n      \"cpuid\\n\" \\\n      \"mov %%rbx, %1\\n\"\n      \"pop %%rbx\\n\"\n      : \"=a\" (a), \"=r\" (b), \"=c\" (c), \"=d\" (d) \\\n      : \"a\" (func) \\\n    );\n    values[0] = a;\n    values[1] = b;\n    values[2] = c;\n    values[3] = d;\n}\n#endif\n\n/* Get the size of a file by reading it until the end. This is needed\n * because files under /proc do not always return a valid size when\n * using fseek(0, SEEK_END) + ftell(). Nor can they be mmap()-ed.\n */\nstatic int\nget_file_size(const char* pathname)\n{\n\n   int fd, result = 0;\n    char buffer[256];\n\n    fd = open(pathname, O_RDONLY);\n    if (fd < 0) {\n        D(\"Can't open %s: %s\\n\", pathname, strerror(errno));\n        return -1;\n    }\n\n    for (;;) {\n        int ret = read(fd, buffer, sizeof buffer);\n        if (ret < 0) {\n            if (errno == EINTR)\n                continue;\n            D(\"Error while reading %s: %s\\n\", pathname, strerror(errno));\n            break;\n        }\n        if (ret == 0)\n            break;\n\n        result += ret;\n    }\n    close(fd);\n    return result;\n}\n\n/* Read the content of /proc/cpuinfo into a user-provided buffer.\n * Return the length of the data, or -1 on error. Does *not*\n * zero-terminate the content. Will not read more\n * than 'buffsize' bytes.\n */\nstatic int\nread_file(const char*  pathname, char*  buffer, size_t  buffsize)\n{\n    int  fd, count;\n\n    fd = open(pathname, O_RDONLY);\n    if (fd < 0) {\n        D(\"Could not open %s: %s\\n\", pathname, strerror(errno));\n        return -1;\n    }\n    count = 0;\n    while (count < (int)buffsize) {\n        int ret = read(fd, buffer + count, buffsize - count);\n        if (ret < 0) {\n            if (errno == EINTR)\n                continue;\n            D(\"Error while reading from %s: %s\\n\", pathname, strerror(errno));\n            if (count == 0)\n                count = -1;\n            break;\n        }\n        if (ret == 0)\n            break;\n        count += ret;\n    }\n    close(fd);\n    return count;\n}\n\n#ifdef __arm__\n/* Extract the content of a the first occurence of a given field in\n * the content of /proc/cpuinfo and return it as a heap-allocated\n * string that must be freed by the caller.\n *\n * Return NULL if not found\n */\nstatic char*\nextract_cpuinfo_field(const char* buffer, int buflen, const char* field)\n{\n    int  fieldlen = strlen(field);\n    const char* bufend = buffer + buflen;\n    char* result = NULL;\n    int len;\n    const char *p, *q;\n\n    /* Look for first field occurence, and ensures it starts the line. */\n    p = buffer;\n    for (;;) {\n        p = memmem(p, bufend-p, field, fieldlen);\n        if (p == NULL)\n            goto EXIT;\n\n        if (p == buffer || p[-1] == '\\n')\n            break;\n\n        p += fieldlen;\n    }\n\n    /* Skip to the first column followed by a space */\n    p += fieldlen;\n    p  = memchr(p, ':', bufend-p);\n    if (p == NULL || p[1] != ' ')\n        goto EXIT;\n\n    /* Find the end of the line */\n    p += 2;\n    q = memchr(p, '\\n', bufend-p);\n    if (q == NULL)\n        q = bufend;\n\n    /* Copy the line into a heap-allocated buffer */\n    len = q-p;\n    result = malloc(len+1);\n    if (result == NULL)\n        goto EXIT;\n\n    memcpy(result, p, len);\n    result[len] = '\\0';\n\nEXIT:\n    return result;\n}\n\n/* Checks that a space-separated list of items contains one given 'item'.\n * Returns 1 if found, 0 otherwise.\n */\nstatic int\nhas_list_item(const char* list, const char* item)\n{\n    const char*  p = list;\n    int itemlen = strlen(item);\n\n    if (list == NULL)\n        return 0;\n\n    while (*p) {\n        const char*  q;\n\n        /* skip spaces */\n        while (*p == ' ' || *p == '\\t')\n            p++;\n\n        /* find end of current list item */\n        q = p;\n        while (*q && *q != ' ' && *q != '\\t')\n            q++;\n\n        if (itemlen == q-p && !memcmp(p, item, itemlen))\n            return 1;\n\n        /* skip to next item */\n        p = q;\n    }\n    return 0;\n}\n#endif /* __arm__ */\n\n/* Parse a number starting from 'input', but not going further\n * than 'limit'. Return the value into '*result'.\n *\n * NOTE: Does not skip over leading spaces, or deal with sign characters.\n * NOTE: Ignores overflows.\n *\n * The function returns NULL in case of error (bad format), or the new\n * position after the decimal number in case of success (which will always\n * be <= 'limit').\n */\nstatic const char*\nparse_number(const char* input, const char* limit, int base, int* result)\n{\n    const char* p = input;\n    int val = 0;\n    while (p < limit) {\n        int d = (*p - '0');\n        if ((unsigned)d >= 10U) {\n            d = (*p - 'a');\n            if ((unsigned)d >= 6U)\n              d = (*p - 'A');\n            if ((unsigned)d >= 6U)\n              break;\n            d += 10;\n        }\n        if (d >= base)\n          break;\n        val = val*base + d;\n        p++;\n    }\n    if (p == input)\n        return NULL;\n\n    *result = val;\n    return p;\n}\n\nstatic const char*\nparse_decimal(const char* input, const char* limit, int* result)\n{\n    return parse_number(input, limit, 10, result);\n}\n\n#ifdef __arm__\nstatic const char*\nparse_hexadecimal(const char* input, const char* limit, int* result)\n{\n    return parse_number(input, limit, 16, result);\n}\n#endif /* __arm__ */\n\n/* This small data type is used to represent a CPU list / mask, as read\n * from sysfs on Linux. See http://www.kernel.org/doc/Documentation/cputopology.txt\n *\n * For now, we don't expect more than 32 cores on mobile devices, so keep\n * everything simple.\n */\ntypedef struct {\n    uint32_t mask;\n} CpuList;\n\nstatic __inline__ void\ncpulist_init(CpuList* list) {\n    list->mask = 0;\n}\n\nstatic __inline__ void\ncpulist_and(CpuList* list1, CpuList* list2) {\n    list1->mask &= list2->mask;\n}\n\nstatic __inline__ void\ncpulist_set(CpuList* list, int index) {\n    if ((unsigned)index < 32) {\n        list->mask |= (uint32_t)(1U << index);\n    }\n}\n\nstatic __inline__ int\ncpulist_count(CpuList* list) {\n    return __builtin_popcount(list->mask);\n}\n\n/* Parse a textual list of cpus and store the result inside a CpuList object.\n * Input format is the following:\n * - comma-separated list of items (no spaces)\n * - each item is either a single decimal number (cpu index), or a range made\n *   of two numbers separated by a single dash (-). Ranges are inclusive.\n *\n * Examples:   0\n *             2,4-127,128-143\n *             0-1\n */\nstatic void\ncpulist_parse(CpuList* list, const char* line, int line_len)\n{\n    const char* p = line;\n    const char* end = p + line_len;\n    const char* q;\n\n    /* NOTE: the input line coming from sysfs typically contains a\n     * trailing newline, so take care of it in the code below\n     */\n    while (p < end && *p != '\\n')\n    {\n        int val, start_value, end_value;\n\n        /* Find the end of current item, and put it into 'q' */\n        q = memchr(p, ',', end-p);\n        if (q == NULL) {\n            q = end;\n        }\n\n        /* Get first value */\n        p = parse_decimal(p, q, &start_value);\n        if (p == NULL)\n            goto BAD_FORMAT;\n\n        end_value = start_value;\n\n        /* If we're not at the end of the item, expect a dash and\n         * and integer; extract end value.\n         */\n        if (p < q && *p == '-') {\n            p = parse_decimal(p+1, q, &end_value);\n            if (p == NULL)\n                goto BAD_FORMAT;\n        }\n\n        /* Set bits CPU list bits */\n        for (val = start_value; val <= end_value; val++) {\n            cpulist_set(list, val);\n        }\n\n        /* Jump to next item */\n        p = q;\n        if (p < end)\n            p++;\n    }\n\nBAD_FORMAT:\n    ;\n}\n\n/* Read a CPU list from one sysfs file */\nstatic void\ncpulist_read_from(CpuList* list, const char* filename)\n{\n    char   file[64];\n    int    filelen;\n\n    cpulist_init(list);\n\n    filelen = read_file(filename, file, sizeof file);\n    if (filelen < 0) {\n        D(\"Could not read %s: %s\\n\", filename, strerror(errno));\n        return;\n    }\n\n    cpulist_parse(list, file, filelen);\n}\n#if defined(__aarch64__)\n// see <uapi/asm/hwcap.h> kernel header\n#define HWCAP_FP                (1 << 0)\n#define HWCAP_ASIMD             (1 << 1)\n#define HWCAP_AES               (1 << 3)\n#define HWCAP_PMULL             (1 << 4)\n#define HWCAP_SHA1              (1 << 5)\n#define HWCAP_SHA2              (1 << 6)\n#define HWCAP_CRC32             (1 << 7)\n#endif\n\n#if defined(__arm__)\n\n// See <asm/hwcap.h> kernel header.\n#define HWCAP_VFP       (1 << 6)\n#define HWCAP_IWMMXT    (1 << 9)\n#define HWCAP_NEON      (1 << 12)\n#define HWCAP_VFPv3     (1 << 13)\n#define HWCAP_VFPv3D16  (1 << 14)\n#define HWCAP_VFPv4     (1 << 16)\n#define HWCAP_IDIVA     (1 << 17)\n#define HWCAP_IDIVT     (1 << 18)\n\n// see <uapi/asm/hwcap.h> kernel header\n#define HWCAP2_AES     (1 << 0)\n#define HWCAP2_PMULL   (1 << 1)\n#define HWCAP2_SHA1    (1 << 2)\n#define HWCAP2_SHA2    (1 << 3)\n#define HWCAP2_CRC32   (1 << 4)\n\n// This is the list of 32-bit ARMv7 optional features that are _always_\n// supported by ARMv8 CPUs, as mandated by the ARM Architecture Reference\n// Manual.\n#define HWCAP_SET_FOR_ARMV8  \\\n  ( HWCAP_VFP | \\\n    HWCAP_NEON | \\\n    HWCAP_VFPv3 | \\\n    HWCAP_VFPv4 | \\\n    HWCAP_IDIVA | \\\n    HWCAP_IDIVT )\n#endif\n\n#if defined(__mips__)\n// see <uapi/asm/hwcap.h> kernel header\n#define HWCAP_MIPS_R6           (1 << 0)\n#define HWCAP_MIPS_MSA          (1 << 1)\n#endif\n\n#if defined(__arm__) || defined(__aarch64__) || defined(__mips__)\n\n#define AT_HWCAP 16\n#define AT_HWCAP2 26\n\n// Probe the system's C library for a 'getauxval' function and call it if\n// it exits, or return 0 for failure. This function is available since API\n// level 20.\n//\n// This code does *NOT* check for '__ANDROID_API__ >= 20' to support the\n// edge case where some NDK developers use headers for a platform that is\n// newer than the one really targetted by their application.\n// This is typically done to use newer native APIs only when running on more\n// recent Android versions, and requires careful symbol management.\n//\n// Note that getauxval() can't really be re-implemented here, because\n// its implementation does not parse /proc/self/auxv. Instead it depends\n// on values  that are passed by the kernel at process-init time to the\n// C runtime initialization layer.\nstatic uint32_t\nget_elf_hwcap_from_getauxval(int hwcap_type) {\n    typedef unsigned long getauxval_func_t(unsigned long);\n\n    dlerror();\n    void* libc_handle = dlopen(\"libc.so\", RTLD_NOW);\n    if (!libc_handle) {\n        D(\"Could not dlopen() C library: %s\\n\", dlerror());\n        return 0;\n    }\n\n    uint32_t ret = 0;\n    getauxval_func_t* func = (getauxval_func_t*)\n            dlsym(libc_handle, \"getauxval\");\n    if (!func) {\n        D(\"Could not find getauxval() in C library\\n\");\n    } else {\n        // Note: getauxval() returns 0 on failure. Doesn't touch errno.\n        ret = (uint32_t)(*func)(hwcap_type);\n    }\n    dlclose(libc_handle);\n    return ret;\n}\n#endif\n\n#if defined(__arm__)\n// Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the\n// current CPU. Note that this file is not accessible from regular\n// application processes on some Android platform releases.\n// On success, return new ELF hwcaps, or 0 on failure.\nstatic uint32_t\nget_elf_hwcap_from_proc_self_auxv(void) {\n    const char filepath[] = \"/proc/self/auxv\";\n    int fd = TEMP_FAILURE_RETRY(open(filepath, O_RDONLY));\n    if (fd < 0) {\n        D(\"Could not open %s: %s\\n\", filepath, strerror(errno));\n        return 0;\n    }\n\n    struct { uint32_t tag; uint32_t value; } entry;\n\n    uint32_t result = 0;\n    for (;;) {\n        int ret = TEMP_FAILURE_RETRY(read(fd, (char*)&entry, sizeof entry));\n        if (ret < 0) {\n            D(\"Error while reading %s: %s\\n\", filepath, strerror(errno));\n            break;\n        }\n        // Detect end of list.\n        if (ret == 0 || (entry.tag == 0 && entry.value == 0))\n          break;\n        if (entry.tag == AT_HWCAP) {\n          result = entry.value;\n          break;\n        }\n    }\n    close(fd);\n    return result;\n}\n\n/* Compute the ELF HWCAP flags from the content of /proc/cpuinfo.\n * This works by parsing the 'Features' line, which lists which optional\n * features the device's CPU supports, on top of its reference\n * architecture.\n */\nstatic uint32_t\nget_elf_hwcap_from_proc_cpuinfo(const char* cpuinfo, int cpuinfo_len) {\n    uint32_t hwcaps = 0;\n    long architecture = 0;\n    char* cpuArch = extract_cpuinfo_field(cpuinfo, cpuinfo_len, \"CPU architecture\");\n    if (cpuArch) {\n        architecture = strtol(cpuArch, NULL, 10);\n        free(cpuArch);\n\n        if (architecture >= 8L) {\n            // This is a 32-bit ARM binary running on a 64-bit ARM64 kernel.\n            // The 'Features' line only lists the optional features that the\n            // device's CPU supports, compared to its reference architecture\n            // which are of no use for this process.\n            D(\"Faking 32-bit ARM HWCaps on ARMv%ld CPU\\n\", architecture);\n            return HWCAP_SET_FOR_ARMV8;\n        }\n    }\n\n    char* cpuFeatures = extract_cpuinfo_field(cpuinfo, cpuinfo_len, \"Features\");\n    if (cpuFeatures != NULL) {\n        D(\"Found cpuFeatures = '%s'\\n\", cpuFeatures);\n\n        if (has_list_item(cpuFeatures, \"vfp\"))\n            hwcaps |= HWCAP_VFP;\n        if (has_list_item(cpuFeatures, \"vfpv3\"))\n            hwcaps |= HWCAP_VFPv3;\n        if (has_list_item(cpuFeatures, \"vfpv3d16\"))\n            hwcaps |= HWCAP_VFPv3D16;\n        if (has_list_item(cpuFeatures, \"vfpv4\"))\n            hwcaps |= HWCAP_VFPv4;\n        if (has_list_item(cpuFeatures, \"neon\"))\n            hwcaps |= HWCAP_NEON;\n        if (has_list_item(cpuFeatures, \"idiva\"))\n            hwcaps |= HWCAP_IDIVA;\n        if (has_list_item(cpuFeatures, \"idivt\"))\n            hwcaps |= HWCAP_IDIVT;\n        if (has_list_item(cpuFeatures, \"idiv\"))\n            hwcaps |= HWCAP_IDIVA | HWCAP_IDIVT;\n        if (has_list_item(cpuFeatures, \"iwmmxt\"))\n            hwcaps |= HWCAP_IWMMXT;\n\n        free(cpuFeatures);\n    }\n    return hwcaps;\n}\n#endif  /* __arm__ */\n\n/* Return the number of cpus present on a given device.\n *\n * To handle all weird kernel configurations, we need to compute the\n * intersection of the 'present' and 'possible' CPU lists and count\n * the result.\n */\nstatic int\nget_cpu_count(void)\n{\n    CpuList cpus_present[1];\n    CpuList cpus_possible[1];\n\n    cpulist_read_from(cpus_present, \"/sys/devices/system/cpu/present\");\n    cpulist_read_from(cpus_possible, \"/sys/devices/system/cpu/possible\");\n\n    /* Compute the intersection of both sets to get the actual number of\n     * CPU cores that can be used on this device by the kernel.\n     */\n    cpulist_and(cpus_present, cpus_possible);\n\n    return cpulist_count(cpus_present);\n}\n\nstatic void\nandroid_cpuInitFamily(void)\n{\n#if defined(__arm__)\n    g_cpuFamily = ANDROID_CPU_FAMILY_ARM;\n#elif defined(__i386__)\n    g_cpuFamily = ANDROID_CPU_FAMILY_X86;\n#elif defined(__mips64)\n/* Needs to be before __mips__ since the compiler defines both */\n    g_cpuFamily = ANDROID_CPU_FAMILY_MIPS64;\n#elif defined(__mips__)\n    g_cpuFamily = ANDROID_CPU_FAMILY_MIPS;\n#elif defined(__aarch64__)\n    g_cpuFamily = ANDROID_CPU_FAMILY_ARM64;\n#elif defined(__x86_64__)\n    g_cpuFamily = ANDROID_CPU_FAMILY_X86_64;\n#else\n    g_cpuFamily = ANDROID_CPU_FAMILY_UNKNOWN;\n#endif\n}\n\nstatic void\nandroid_cpuInitRuntimeFamily(void)\n{\n    FILE *pfp;\n    char abibuf[PROP_VALUE_MAX];\n    char *s;\n\n    g_runtimeCpuFamily = ANDROID_CPU_FAMILY_UNKNOWN;\n\n    pfp = popen(\"getprop ro.product.cpu.abi\", \"r\");\n    if (pfp == NULL) {\n        D(\"can't run getprop\");\n        return;\n    }\n\n    if (fgets(abibuf, sizeof(abibuf), pfp) == NULL) {\n        D(\"can't read line from getprop\");\n        fclose(pfp);\n        return;\n    }\n\n    for (s = abibuf; *s != '\\0'; ++s)\n        if (*s == '\\r' || *s == '\\n')\n            *s = '\\0';\n\n    D(\"abi: '%s'\\n\", abibuf);\n\n    if (strcmp(abibuf, \"armeabi\") == 0 || strcmp(abibuf, \"armeabi-v7a\") == 0)\n        g_runtimeCpuFamily = ANDROID_CPU_FAMILY_ARM;\n    else if (strcmp(abibuf, \"x86\") == 0)\n        g_runtimeCpuFamily = ANDROID_CPU_FAMILY_X86;\n    else if (strcmp(abibuf, \"mips\") == 0)\n        g_runtimeCpuFamily = ANDROID_CPU_FAMILY_MIPS;\n    else if (strcmp(abibuf, \"arm64-v8a\") == 0)\n        g_runtimeCpuFamily = ANDROID_CPU_FAMILY_ARM64;\n    else if (strcmp(abibuf, \"x86_64\") == 0)\n        g_runtimeCpuFamily = ANDROID_CPU_FAMILY_X86_64;\n\n    switch (g_runtimeCpuFamily) {\n#define DUMP_RUNTIME_CPU_FAMILY(f) case ANDROID_CPU_FAMILY_ ## f : D(\"RUNTIME CPU FAMILY: \" #f \"\\n\"); break\n        DUMP_RUNTIME_CPU_FAMILY(ARM);\n        DUMP_RUNTIME_CPU_FAMILY(X86);\n        DUMP_RUNTIME_CPU_FAMILY(MIPS);\n        DUMP_RUNTIME_CPU_FAMILY(ARM64);\n        DUMP_RUNTIME_CPU_FAMILY(X86_64);\n        DUMP_RUNTIME_CPU_FAMILY(MIPS64);\n#undef DUMP_RUNTIME_CPU_FAMILY\n        default: D(\"RUNTIME CPU FAMILY: UNKNOWN\\n\");\n    }\n\n    fclose(pfp);\n}\n\nstatic void\nandroid_cpuInit(void)\n{\n    char* cpuinfo = NULL;\n    int   cpuinfo_len;\n\n    android_cpuInitFamily();\n    android_cpuInitRuntimeFamily();\n\n    g_cpuFeatures = 0;\n    g_cpuCount    = 1;\n    g_inited      = 1;\n\n    cpuinfo_len = get_file_size(\"/proc/cpuinfo\");\n    if (cpuinfo_len < 0) {\n      D(\"cpuinfo_len cannot be computed!\");\n      return;\n    }\n    cpuinfo = malloc(cpuinfo_len);\n    if (cpuinfo == NULL) {\n      D(\"cpuinfo buffer could not be allocated\");\n      return;\n    }\n    cpuinfo_len = read_file(\"/proc/cpuinfo\", cpuinfo, cpuinfo_len);\n    D(\"cpuinfo_len is (%d):\\n%.*s\\n\", cpuinfo_len,\n      cpuinfo_len >= 0 ? cpuinfo_len : 0, cpuinfo);\n\n    if (cpuinfo_len < 0)  /* should not happen */ {\n        free(cpuinfo);\n        return;\n    }\n\n    /* Count the CPU cores, the value may be 0 for single-core CPUs */\n    g_cpuCount = get_cpu_count();\n    if (g_cpuCount == 0) {\n        g_cpuCount = 1;\n    }\n\n    D(\"found cpuCount = %d\\n\", g_cpuCount);\n\n#ifdef __arm__\n    {\n        /* Extract architecture from the \"CPU Architecture\" field.\n         * The list is well-known, unlike the the output of\n         * the 'Processor' field which can vary greatly.\n         *\n         * See the definition of the 'proc_arch' array in\n         * $KERNEL/arch/arm/kernel/setup.c and the 'c_show' function in\n         * same file.\n         */\n        char* cpuArch = extract_cpuinfo_field(cpuinfo, cpuinfo_len, \"CPU architecture\");\n\n        if (cpuArch != NULL) {\n            char*  end;\n            long   archNumber;\n            int    hasARMv7 = 0;\n\n            D(\"found cpuArch = '%s'\\n\", cpuArch);\n\n            /* read the initial decimal number, ignore the rest */\n            archNumber = strtol(cpuArch, &end, 10);\n\n            /* Note that ARMv8 is upwards compatible with ARMv7. */\n            if (end > cpuArch && archNumber >= 7) {\n                hasARMv7 = 1;\n            }\n\n            /* Unfortunately, it seems that certain ARMv6-based CPUs\n             * report an incorrect architecture number of 7!\n             *\n             * See http://code.google.com/p/android/issues/detail?id=10812\n             *\n             * We try to correct this by looking at the 'elf_format'\n             * field reported by the 'Processor' field, which is of the\n             * form of \"(v7l)\" for an ARMv7-based CPU, and \"(v6l)\" for\n             * an ARMv6-one.\n             */\n            if (hasARMv7) {\n                char* cpuProc = extract_cpuinfo_field(cpuinfo, cpuinfo_len,\n                                                      \"Processor\");\n                if (cpuProc != NULL) {\n                    D(\"found cpuProc = '%s'\\n\", cpuProc);\n                    if (has_list_item(cpuProc, \"(v6l)\")) {\n                        D(\"CPU processor and architecture mismatch!!\\n\");\n                        hasARMv7 = 0;\n                    }\n                    free(cpuProc);\n                }\n            }\n\n            if (hasARMv7) {\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_ARMv7;\n            }\n\n            /* The LDREX / STREX instructions are available from ARMv6 */\n            if (archNumber >= 6) {\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_LDREX_STREX;\n            }\n\n            free(cpuArch);\n        }\n\n        /* Extract the list of CPU features from ELF hwcaps */\n        uint32_t hwcaps = 0;\n        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);\n        if (!hwcaps) {\n            D(\"Parsing /proc/self/auxv to extract ELF hwcaps!\\n\");\n            hwcaps = get_elf_hwcap_from_proc_self_auxv();\n        }\n        if (!hwcaps) {\n            // Parsing /proc/self/auxv will fail from regular application\n            // processes on some Android platform versions, when this happens\n            // parse proc/cpuinfo instead.\n            D(\"Parsing /proc/cpuinfo to extract ELF hwcaps!\\n\");\n            hwcaps = get_elf_hwcap_from_proc_cpuinfo(cpuinfo, cpuinfo_len);\n        }\n\n        if (hwcaps != 0) {\n            int has_vfp = (hwcaps & HWCAP_VFP);\n            int has_vfpv3 = (hwcaps & HWCAP_VFPv3);\n            int has_vfpv3d16 = (hwcaps & HWCAP_VFPv3D16);\n            int has_vfpv4 = (hwcaps & HWCAP_VFPv4);\n            int has_neon = (hwcaps & HWCAP_NEON);\n            int has_idiva = (hwcaps & HWCAP_IDIVA);\n            int has_idivt = (hwcaps & HWCAP_IDIVT);\n            int has_iwmmxt = (hwcaps & HWCAP_IWMMXT);\n\n            // The kernel does a poor job at ensuring consistency when\n            // describing CPU features. So lots of guessing is needed.\n\n            // 'vfpv4' implies VFPv3|VFP_FMA|FP16\n            if (has_vfpv4)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3    |\n                                 ANDROID_CPU_ARM_FEATURE_VFP_FP16 |\n                                 ANDROID_CPU_ARM_FEATURE_VFP_FMA;\n\n            // 'vfpv3' or 'vfpv3d16' imply VFPv3. Note that unlike GCC,\n            // a value of 'vfpv3' doesn't necessarily mean that the D32\n            // feature is present, so be conservative. All CPUs in the\n            // field that support D32 also support NEON, so this should\n            // not be a problem in practice.\n            if (has_vfpv3 || has_vfpv3d16)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;\n\n            // 'vfp' is super ambiguous. Depending on the kernel, it can\n            // either mean VFPv2 or VFPv3. Make it depend on ARMv7.\n            if (has_vfp) {\n              if (g_cpuFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7)\n                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;\n              else\n                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv2;\n            }\n\n            // Neon implies VFPv3|D32, and if vfpv4 is detected, NEON_FMA\n            if (has_neon) {\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3 |\n                                 ANDROID_CPU_ARM_FEATURE_NEON |\n                                 ANDROID_CPU_ARM_FEATURE_VFP_D32;\n              if (has_vfpv4)\n                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_NEON_FMA;\n            }\n\n            // VFPv3 implies VFPv2 and ARMv7\n            if (g_cpuFeatures & ANDROID_CPU_ARM_FEATURE_VFPv3)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv2 |\n                                 ANDROID_CPU_ARM_FEATURE_ARMv7;\n\n            if (has_idiva)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;\n            if (has_idivt)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2;\n\n            if (has_iwmmxt)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_iWMMXt;\n        }\n\n        /* Extract the list of CPU features from ELF hwcaps2 */\n        uint32_t hwcaps2 = 0;\n        hwcaps2 = get_elf_hwcap_from_getauxval(AT_HWCAP2);\n        if (hwcaps2 != 0) {\n            int has_aes     = (hwcaps2 & HWCAP2_AES);\n            int has_pmull   = (hwcaps2 & HWCAP2_PMULL);\n            int has_sha1    = (hwcaps2 & HWCAP2_SHA1);\n            int has_sha2    = (hwcaps2 & HWCAP2_SHA2);\n            int has_crc32   = (hwcaps2 & HWCAP2_CRC32);\n\n            if (has_aes)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_AES;\n            if (has_pmull)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_PMULL;\n            if (has_sha1)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA1;\n            if (has_sha2)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA2;\n            if (has_crc32)\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_CRC32;\n        }\n        /* Extract the cpuid value from various fields */\n        // The CPUID value is broken up in several entries in /proc/cpuinfo.\n        // This table is used to rebuild it from the entries.\n        static const struct CpuIdEntry {\n            const char* field;\n            char        format;\n            char        bit_lshift;\n            char        bit_length;\n        } cpu_id_entries[] = {\n            { \"CPU implementer\", 'x', 24, 8 },\n            { \"CPU variant\", 'x', 20, 4 },\n            { \"CPU part\", 'x', 4, 12 },\n            { \"CPU revision\", 'd', 0, 4 },\n        };\n        size_t i;\n        D(\"Parsing /proc/cpuinfo to recover CPUID\\n\");\n        for (i = 0;\n             i < sizeof(cpu_id_entries)/sizeof(cpu_id_entries[0]);\n             ++i) {\n            const struct CpuIdEntry* entry = &cpu_id_entries[i];\n            char* value = extract_cpuinfo_field(cpuinfo,\n                                                cpuinfo_len,\n                                                entry->field);\n            if (value == NULL)\n                continue;\n\n            D(\"field=%s value='%s'\\n\", entry->field, value);\n            char* value_end = value + strlen(value);\n            int val = 0;\n            const char* start = value;\n            const char* p;\n            if (value[0] == '0' && (value[1] == 'x' || value[1] == 'X')) {\n              start += 2;\n              p = parse_hexadecimal(start, value_end, &val);\n            } else if (entry->format == 'x')\n              p = parse_hexadecimal(value, value_end, &val);\n            else\n              p = parse_decimal(value, value_end, &val);\n\n            if (p > (const char*)start) {\n              val &= ((1 << entry->bit_length)-1);\n              val <<= entry->bit_lshift;\n              g_cpuIdArm |= (uint32_t) val;\n            }\n\n            free(value);\n        }\n\n        // Handle kernel configuration bugs that prevent the correct\n        // reporting of CPU features.\n        static const struct CpuFix {\n            uint32_t  cpuid;\n            uint64_t  or_flags;\n        } cpu_fixes[] = {\n            /* The Nexus 4 (Qualcomm Krait) kernel configuration\n             * forgets to report IDIV support. */\n            { 0x510006f2, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |\n                          ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },\n            { 0x510006f3, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |\n                          ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },\n        };\n        size_t n;\n        for (n = 0; n < sizeof(cpu_fixes)/sizeof(cpu_fixes[0]); ++n) {\n            const struct CpuFix* entry = &cpu_fixes[n];\n\n            if (g_cpuIdArm == entry->cpuid)\n                g_cpuFeatures |= entry->or_flags;\n        }\n\n        // Special case: The emulator-specific Android 4.2 kernel fails\n        // to report support for the 32-bit ARM IDIV instruction.\n        // Technically, this is a feature of the virtual CPU implemented\n        // by the emulator. Note that it could also support Thumb IDIV\n        // in the future, and this will have to be slightly updated.\n        char* hardware = extract_cpuinfo_field(cpuinfo,\n                                               cpuinfo_len,\n                                               \"Hardware\");\n        if (hardware) {\n            if (!strcmp(hardware, \"Goldfish\") &&\n                g_cpuIdArm == 0x4100c080 &&\n                (g_cpuFamily & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) {\n                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;\n            }\n            free(hardware);\n        }\n    }\n#endif /* __arm__ */\n#ifdef __aarch64__\n    {\n        /* Extract the list of CPU features from ELF hwcaps */\n        uint32_t hwcaps = 0;\n        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);\n        if (hwcaps != 0) {\n            int has_fp      = (hwcaps & HWCAP_FP);\n            int has_asimd   = (hwcaps & HWCAP_ASIMD);\n            int has_aes     = (hwcaps & HWCAP_AES);\n            int has_pmull   = (hwcaps & HWCAP_PMULL);\n            int has_sha1    = (hwcaps & HWCAP_SHA1);\n            int has_sha2    = (hwcaps & HWCAP_SHA2);\n            int has_crc32   = (hwcaps & HWCAP_CRC32);\n\n            if(has_fp == 0) {\n                D(\"ERROR: Floating-point unit missing, but is required by Android on AArch64 CPUs\\n\");\n            }\n            if(has_asimd == 0) {\n                D(\"ERROR: ASIMD unit missing, but is required by Android on AArch64 CPUs\\n\");\n            }\n\n            if (has_fp)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_FP;\n            if (has_asimd)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_ASIMD;\n            if (has_aes)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_AES;\n            if (has_pmull)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_PMULL;\n            if (has_sha1)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA1;\n            if (has_sha2)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA2;\n            if (has_crc32)\n                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_CRC32;\n        }\n    }\n#endif /* __aarch64__ */\n\n#if defined(__i386__) || defined(__x86_64__)\n    int regs[4];\n\n/* According to http://en.wikipedia.org/wiki/CPUID */\n#define VENDOR_INTEL_b  0x756e6547\n#define VENDOR_INTEL_c  0x6c65746e\n#define VENDOR_INTEL_d  0x49656e69\n\n    x86_cpuid(0, regs);\n    int vendorIsIntel = (regs[1] == VENDOR_INTEL_b &&\n                         regs[2] == VENDOR_INTEL_c &&\n                         regs[3] == VENDOR_INTEL_d);\n\n    x86_cpuid(1, regs);\n    if ((regs[2] & (1 << 9)) != 0) {\n        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSSE3;\n    }\n    if ((regs[2] & (1 << 23)) != 0) {\n        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_POPCNT;\n    }\n    if ((regs[2] & (1 << 19)) != 0) {\n        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_1;\n    }\n    if ((regs[2] & (1 << 20)) != 0) {\n        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_2;\n    }\n    if (vendorIsIntel && (regs[2] & (1 << 22)) != 0) {\n        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_MOVBE;\n    }\n#endif\n#if defined( __mips__)\n    {   /* MIPS and MIPS64 */\n        /* Extract the list of CPU features from ELF hwcaps */\n        uint32_t hwcaps = 0;\n        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);\n        if (hwcaps != 0) {\n            int has_r6      = (hwcaps & HWCAP_MIPS_R6);\n            int has_msa     = (hwcaps & HWCAP_MIPS_MSA);\n            if (has_r6)\n                g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;\n            if (has_msa)\n                g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;\n        }\n    }\n#endif /* __mips__ */\n\n    free(cpuinfo);\n}\n\n\nAndroidCpuFamily\nandroid_getCpuFamily(void)\n{\n    pthread_once(&g_once, android_cpuInit);\n    return g_cpuFamily;\n}\n\n\nAndroidCpuFamily\nandroid_getRuntimeCpuFamily(void)\n{\n    pthread_once(&g_once, android_cpuInit);\n    return g_runtimeCpuFamily;\n}\n\n\nuint64_t\nandroid_getCpuFeatures(void)\n{\n    pthread_once(&g_once, android_cpuInit);\n    return g_cpuFeatures;\n}\n\n\nint\nandroid_getCpuCount(void)\n{\n    pthread_once(&g_once, android_cpuInit);\n    return g_cpuCount;\n}\n\nstatic void\nandroid_cpuInitDummy(void)\n{\n    g_inited = 1;\n}\n\nint\nandroid_setCpu(int cpu_count, uint64_t cpu_features)\n{\n    /* Fail if the library was already initialized. */\n    if (g_inited)\n        return 0;\n\n    android_cpuInitFamily();\n    g_cpuCount = (cpu_count <= 0 ? 1 : cpu_count);\n    g_cpuFeatures = cpu_features;\n    pthread_once(&g_once, android_cpuInitDummy);\n\n    return 1;\n}\n\n#ifdef __arm__\nuint32_t\nandroid_getCpuIdArm(void)\n{\n    pthread_once(&g_once, android_cpuInit);\n    return g_cpuIdArm;\n}\n\nint\nandroid_setCpuArm(int cpu_count, uint64_t cpu_features, uint32_t cpu_id)\n{\n    if (!android_setCpu(cpu_count, cpu_features))\n        return 0;\n\n    g_cpuIdArm = cpu_id;\n    return 1;\n}\n#endif  /* __arm__ */\n\n/*\n * Technical note: Making sense of ARM's FPU architecture versions.\n *\n * FPA was ARM's first attempt at an FPU architecture. There is no Android\n * device that actually uses it since this technology was already obsolete\n * when the project started. If you see references to FPA instructions\n * somewhere, you can be sure that this doesn't apply to Android at all.\n *\n * FPA was followed by \"VFP\", soon renamed \"VFPv1\" due to the emergence of\n * new versions / additions to it. ARM considers this obsolete right now,\n * and no known Android device implements it either.\n *\n * VFPv2 added a few instructions to VFPv1, and is an *optional* extension\n * supported by some ARMv5TE, ARMv6 and ARMv6T2 CPUs. Note that a device\n * supporting the 'armeabi' ABI doesn't necessarily support these.\n *\n * VFPv3-D16 adds a few instructions on top of VFPv2 and is typically used\n * on ARMv7-A CPUs which implement a FPU. Note that it is also mandated\n * by the Android 'armeabi-v7a' ABI. The -D16 suffix in its name means\n * that it provides 16 double-precision FPU registers (d0-d15) and 32\n * single-precision ones (s0-s31) which happen to be mapped to the same\n * register banks.\n *\n * VFPv3-D32 is the name of an extension to VFPv3-D16 that provides 16\n * additional double precision registers (d16-d31). Note that there are\n * still only 32 single precision registers.\n *\n * VFPv3xD is a *subset* of VFPv3-D16 that only provides single-precision\n * registers. It is only used on ARMv7-M (i.e. on micro-controllers) which\n * are not supported by Android. Note that it is not compatible with VFPv2.\n *\n * NOTE: The term 'VFPv3' usually designate either VFPv3-D16 or VFPv3-D32\n *       depending on context. For example GCC uses it for VFPv3-D32, but\n *       the Linux kernel code uses it for VFPv3-D16 (especially in\n *       /proc/cpuinfo). Always try to use the full designation when\n *       possible.\n *\n * NEON, a.k.a. \"ARM Advanced SIMD\" is an extension that provides\n * instructions to perform parallel computations on vectors of 8, 16,\n * 32, 64 and 128 bit quantities. NEON requires VFPv32-D32 since all\n * NEON registers are also mapped to the same register banks.\n *\n * VFPv4-D16, adds a few instructions on top of VFPv3-D16 in order to\n * perform fused multiply-accumulate on VFP registers, as well as\n * half-precision (16-bit) conversion operations.\n *\n * VFPv4-D32 is VFPv4-D16 with 32, instead of 16, FPU double precision\n * registers.\n *\n * VPFv4-NEON is VFPv4-D32 with NEON instructions. It also adds fused\n * multiply-accumulate instructions that work on the NEON registers.\n *\n * NOTE: Similarly, \"VFPv4\" might either reference VFPv4-D16 or VFPv4-D32\n *       depending on context.\n *\n * The following information was determined by scanning the binutils-2.22\n * sources:\n *\n * Basic VFP instruction subsets:\n *\n * #define FPU_VFP_EXT_V1xD 0x08000000     // Base VFP instruction set.\n * #define FPU_VFP_EXT_V1   0x04000000     // Double-precision insns.\n * #define FPU_VFP_EXT_V2   0x02000000     // ARM10E VFPr1.\n * #define FPU_VFP_EXT_V3xD 0x01000000     // VFPv3 single-precision.\n * #define FPU_VFP_EXT_V3   0x00800000     // VFPv3 double-precision.\n * #define FPU_NEON_EXT_V1  0x00400000     // Neon (SIMD) insns.\n * #define FPU_VFP_EXT_D32  0x00200000     // Registers D16-D31.\n * #define FPU_VFP_EXT_FP16 0x00100000     // Half-precision extensions.\n * #define FPU_NEON_EXT_FMA 0x00080000     // Neon fused multiply-add\n * #define FPU_VFP_EXT_FMA  0x00040000     // VFP fused multiply-add\n *\n * FPU types (excluding NEON)\n *\n * FPU_VFP_V1xD (EXT_V1xD)\n *    |\n *    +--------------------------+\n *    |                          |\n * FPU_VFP_V1 (+EXT_V1)       FPU_VFP_V3xD (+EXT_V2+EXT_V3xD)\n *    |                          |\n *    |                          |\n * FPU_VFP_V2 (+EXT_V2)       FPU_VFP_V4_SP_D16 (+EXT_FP16+EXT_FMA)\n *    |\n * FPU_VFP_V3D16 (+EXT_Vx3D+EXT_V3)\n *    |\n *    +--------------------------+\n *    |                          |\n * FPU_VFP_V3 (+EXT_D32)     FPU_VFP_V4D16 (+EXT_FP16+EXT_FMA)\n *    |                          |\n *    |                      FPU_VFP_V4 (+EXT_D32)\n *    |\n * FPU_VFP_HARD (+EXT_FMA+NEON_EXT_FMA)\n *\n * VFP architectures:\n *\n * ARCH_VFP_V1xD  (EXT_V1xD)\n *   |\n *   +------------------+\n *   |                  |\n *   |             ARCH_VFP_V3xD (+EXT_V2+EXT_V3xD)\n *   |                  |\n *   |             ARCH_VFP_V3xD_FP16 (+EXT_FP16)\n *   |                  |\n *   |             ARCH_VFP_V4_SP_D16 (+EXT_FMA)\n *   |\n * ARCH_VFP_V1 (+EXT_V1)\n *   |\n * ARCH_VFP_V2 (+EXT_V2)\n *   |\n * ARCH_VFP_V3D16 (+EXT_V3xD+EXT_V3)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V3D16_FP16  (+EXT_FP16)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V4_D16 (+EXT_FP16+EXT_FMA)\n *   |                   |\n *   |         ARCH_VFP_V4 (+EXT_D32)\n *   |                   |\n *   |         ARCH_NEON_VFP_V4 (+EXT_NEON+EXT_NEON_FMA)\n *   |\n * ARCH_VFP_V3 (+EXT_D32)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V3_FP16 (+EXT_FP16)\n *   |\n * ARCH_VFP_V3_PLUS_NEON_V1 (+EXT_NEON)\n *   |\n * ARCH_NEON_FP16 (+EXT_FP16)\n *\n * -fpu=<name> values and their correspondance with FPU architectures above:\n *\n *   {\"vfp\",               FPU_ARCH_VFP_V2},\n *   {\"vfp9\",              FPU_ARCH_VFP_V2},\n *   {\"vfp3\",              FPU_ARCH_VFP_V3}, // For backwards compatbility.\n *   {\"vfp10\",             FPU_ARCH_VFP_V2},\n *   {\"vfp10-r0\",          FPU_ARCH_VFP_V1},\n *   {\"vfpxd\",             FPU_ARCH_VFP_V1xD},\n *   {\"vfpv2\",             FPU_ARCH_VFP_V2},\n *   {\"vfpv3\",             FPU_ARCH_VFP_V3},\n *   {\"vfpv3-fp16\",        FPU_ARCH_VFP_V3_FP16},\n *   {\"vfpv3-d16\",         FPU_ARCH_VFP_V3D16},\n *   {\"vfpv3-d16-fp16\",    FPU_ARCH_VFP_V3D16_FP16},\n *   {\"vfpv3xd\",           FPU_ARCH_VFP_V3xD},\n *   {\"vfpv3xd-fp16\",      FPU_ARCH_VFP_V3xD_FP16},\n *   {\"neon\",              FPU_ARCH_VFP_V3_PLUS_NEON_V1},\n *   {\"neon-fp16\",         FPU_ARCH_NEON_FP16},\n *   {\"vfpv4\",             FPU_ARCH_VFP_V4},\n *   {\"vfpv4-d16\",         FPU_ARCH_VFP_V4D16},\n *   {\"fpv4-sp-d16\",       FPU_ARCH_VFP_V4_SP_D16},\n *   {\"neon-vfpv4\",        FPU_ARCH_NEON_VFP_V4},\n *\n *\n * Simplified diagram that only includes FPUs supported by Android:\n * Only ARCH_VFP_V3D16 is actually mandated by the armeabi-v7a ABI,\n * all others are optional and must be probed at runtime.\n *\n * ARCH_VFP_V3D16 (EXT_V1xD+EXT_V1+EXT_V2+EXT_V3xD+EXT_V3)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V3D16_FP16  (+EXT_FP16)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V4_D16 (+EXT_FP16+EXT_FMA)\n *   |                   |\n *   |         ARCH_VFP_V4 (+EXT_D32)\n *   |                   |\n *   |         ARCH_NEON_VFP_V4 (+EXT_NEON+EXT_NEON_FMA)\n *   |\n * ARCH_VFP_V3 (+EXT_D32)\n *   |\n *   +-------------------+\n *   |                   |\n *   |         ARCH_VFP_V3_FP16 (+EXT_FP16)\n *   |\n * ARCH_VFP_V3_PLUS_NEON_V1 (+EXT_NEON)\n *   |\n * ARCH_NEON_FP16 (+EXT_FP16)\n *\n */\n"
  },
  {
    "path": "sources/android/cpufeatures/cpu-features.h",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n#ifndef CPU_FEATURES_H\n#define CPU_FEATURES_H\n\n#include <sys/cdefs.h>\n#include <stdint.h>\n\n__BEGIN_DECLS\n\n/* A list of valid values returned by android_getCpuFamily().\n * They describe the CPU Architecture of the current process.\n */\ntypedef enum {\n    ANDROID_CPU_FAMILY_UNKNOWN = 0,\n    ANDROID_CPU_FAMILY_ARM,\n    ANDROID_CPU_FAMILY_X86,\n    ANDROID_CPU_FAMILY_MIPS,\n    ANDROID_CPU_FAMILY_ARM64,\n    ANDROID_CPU_FAMILY_X86_64,\n    ANDROID_CPU_FAMILY_MIPS64,\n\n    ANDROID_CPU_FAMILY_MAX  /* do not remove */\n\n} AndroidCpuFamily;\n\n/* Return the CPU family of the current process.\n *\n * Note that this matches the bitness of the current process. I.e. when\n * running a 32-bit binary on a 64-bit capable CPU, this will return the\n * 32-bit CPU family value.\n */\nextern AndroidCpuFamily android_getCpuFamily(void);\n\n/* Return the CPU family of the current device, detected in runtime\n */\nextern AndroidCpuFamily android_getRuntimeCpuFamily(void);\n\n/* Return a bitmap describing a set of optional CPU features that are\n * supported by the current device's CPU. The exact bit-flags returned\n * depend on the value returned by android_getCpuFamily(). See the\n * documentation for the ANDROID_CPU_*_FEATURE_* flags below for details.\n */\nextern uint64_t android_getCpuFeatures(void);\n\n/* The list of feature flags for ANDROID_CPU_FAMILY_ARM that can be\n * recognized by the library (see note below for 64-bit ARM). Value details\n * are:\n *\n *   VFPv2:\n *     CPU supports the VFPv2 instruction set. Many, but not all, ARMv6 CPUs\n *     support these instructions. VFPv2 is a subset of VFPv3 so this will\n *     be set whenever VFPv3 is set too.\n *\n *   ARMv7:\n *     CPU supports the ARMv7-A basic instruction set.\n *     This feature is mandated by the 'armeabi-v7a' ABI.\n *\n *   VFPv3:\n *     CPU supports the VFPv3-D16 instruction set, providing hardware FPU\n *     support for single and double precision floating point registers.\n *     Note that only 16 FPU registers are available by default, unless\n *     the D32 bit is set too. This feature is also mandated by the\n *     'armeabi-v7a' ABI.\n *\n *   VFP_D32:\n *     CPU VFP optional extension that provides 32 FPU registers,\n *     instead of 16. Note that ARM mandates this feature is the 'NEON'\n *     feature is implemented by the CPU.\n *\n *   NEON:\n *     CPU FPU supports \"ARM Advanced SIMD\" instructions, also known as\n *     NEON. Note that this mandates the VFP_D32 feature as well, per the\n *     ARM Architecture specification.\n *\n *   VFP_FP16:\n *     Half-width floating precision VFP extension. If set, the CPU\n *     supports instructions to perform floating-point operations on\n *     16-bit registers. This is part of the VFPv4 specification, but\n *     not mandated by any Android ABI.\n *\n *   VFP_FMA:\n *     Fused multiply-accumulate VFP instructions extension. Also part of\n *     the VFPv4 specification, but not mandated by any Android ABI.\n *\n *   NEON_FMA:\n *     Fused multiply-accumulate NEON instructions extension. Optional\n *     extension from the VFPv4 specification, but not mandated by any\n *     Android ABI.\n *\n *   IDIV_ARM:\n *     Integer division available in ARM mode. Only available\n *     on recent CPUs (e.g. Cortex-A15).\n *\n *   IDIV_THUMB2:\n *     Integer division available in Thumb-2 mode. Only available\n *     on recent CPUs (e.g. Cortex-A15).\n *\n *   iWMMXt:\n *     Optional extension that adds MMX registers and operations to an\n *     ARM CPU. This is only available on a few XScale-based CPU designs\n *     sold by Marvell. Pretty rare in practice.\n *\n *   AES:\n *     CPU supports AES instructions. These instructions are only\n *     available for 32-bit applications running on ARMv8 CPU.\n *\n *   CRC32:\n *     CPU supports CRC32 instructions. These instructions are only\n *     available for 32-bit applications running on ARMv8 CPU.\n *\n *   SHA2:\n *     CPU supports SHA2 instructions. These instructions are only\n *     available for 32-bit applications running on ARMv8 CPU.\n *\n *   SHA1:\n *     CPU supports SHA1 instructions. These instructions are only\n *     available for 32-bit applications running on ARMv8 CPU.\n *\n *   PMULL:\n *     CPU supports 64-bit PMULL and PMULL2 instructions. These\n *     instructions are only available for 32-bit applications\n *     running on ARMv8 CPU.\n *\n * If you want to tell the compiler to generate code that targets one of\n * the feature set above, you should probably use one of the following\n * flags (for more details, see technical note at the end of this file):\n *\n *   -mfpu=vfp\n *   -mfpu=vfpv2\n *     These are equivalent and tell GCC to use VFPv2 instructions for\n *     floating-point operations. Use this if you want your code to\n *     run on *some* ARMv6 devices, and any ARMv7-A device supported\n *     by Android.\n *\n *     Generated code requires VFPv2 feature.\n *\n *   -mfpu=vfpv3-d16\n *     Tell GCC to use VFPv3 instructions (using only 16 FPU registers).\n *     This should be generic code that runs on any CPU that supports the\n *     'armeabi-v7a' Android ABI. Note that no ARMv6 CPU supports this.\n *\n *     Generated code requires VFPv3 feature.\n *\n *   -mfpu=vfpv3\n *     Tell GCC to use VFPv3 instructions with 32 FPU registers.\n *     Generated code requires VFPv3|VFP_D32 features.\n *\n *   -mfpu=neon\n *     Tell GCC to use VFPv3 instructions with 32 FPU registers, and\n *     also support NEON intrinsics (see <arm_neon.h>).\n *     Generated code requires VFPv3|VFP_D32|NEON features.\n *\n *   -mfpu=vfpv4-d16\n *     Generated code requires VFPv3|VFP_FP16|VFP_FMA features.\n *\n *   -mfpu=vfpv4\n *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32 features.\n *\n *   -mfpu=neon-vfpv4\n *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32|NEON|NEON_FMA\n *     features.\n *\n *   -mcpu=cortex-a7\n *   -mcpu=cortex-a15\n *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32|\n *                             NEON|NEON_FMA|IDIV_ARM|IDIV_THUMB2\n *     This flag implies -mfpu=neon-vfpv4.\n *\n *   -mcpu=iwmmxt\n *     Allows the use of iWMMXt instrinsics with GCC.\n *\n * IMPORTANT NOTE: These flags should only be tested when\n * android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM, i.e. this is a\n * 32-bit process.\n *\n * When running a 64-bit ARM process on an ARMv8 CPU,\n * android_getCpuFeatures() will return a different set of bitflags\n */\nenum {\n    ANDROID_CPU_ARM_FEATURE_ARMv7       = (1 << 0),\n    ANDROID_CPU_ARM_FEATURE_VFPv3       = (1 << 1),\n    ANDROID_CPU_ARM_FEATURE_NEON        = (1 << 2),\n    ANDROID_CPU_ARM_FEATURE_LDREX_STREX = (1 << 3),\n    ANDROID_CPU_ARM_FEATURE_VFPv2       = (1 << 4),\n    ANDROID_CPU_ARM_FEATURE_VFP_D32     = (1 << 5),\n    ANDROID_CPU_ARM_FEATURE_VFP_FP16    = (1 << 6),\n    ANDROID_CPU_ARM_FEATURE_VFP_FMA     = (1 << 7),\n    ANDROID_CPU_ARM_FEATURE_NEON_FMA    = (1 << 8),\n    ANDROID_CPU_ARM_FEATURE_IDIV_ARM    = (1 << 9),\n    ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 = (1 << 10),\n    ANDROID_CPU_ARM_FEATURE_iWMMXt      = (1 << 11),\n    ANDROID_CPU_ARM_FEATURE_AES         = (1 << 12),\n    ANDROID_CPU_ARM_FEATURE_PMULL       = (1 << 13),\n    ANDROID_CPU_ARM_FEATURE_SHA1        = (1 << 14),\n    ANDROID_CPU_ARM_FEATURE_SHA2        = (1 << 15),\n    ANDROID_CPU_ARM_FEATURE_CRC32       = (1 << 16),\n};\n\n/* The bit flags corresponding to the output of android_getCpuFeatures()\n * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM64. Value details\n * are:\n *\n *   FP:\n *     CPU has Floating-point unit.\n *\n *   ASIMD:\n *     CPU has Advanced SIMD unit.\n *\n *   AES:\n *     CPU supports AES instructions.\n *\n *   CRC32:\n *     CPU supports CRC32 instructions.\n *\n *   SHA2:\n *     CPU supports SHA2 instructions.\n *\n *   SHA1:\n *     CPU supports SHA1 instructions.\n *\n *   PMULL:\n *     CPU supports 64-bit PMULL and PMULL2 instructions.\n */\nenum {\n    ANDROID_CPU_ARM64_FEATURE_FP      = (1 << 0),\n    ANDROID_CPU_ARM64_FEATURE_ASIMD   = (1 << 1),\n    ANDROID_CPU_ARM64_FEATURE_AES     = (1 << 2),\n    ANDROID_CPU_ARM64_FEATURE_PMULL   = (1 << 3),\n    ANDROID_CPU_ARM64_FEATURE_SHA1    = (1 << 4),\n    ANDROID_CPU_ARM64_FEATURE_SHA2    = (1 << 5),\n    ANDROID_CPU_ARM64_FEATURE_CRC32   = (1 << 6),\n};\n\n/* The bit flags corresponding to the output of android_getCpuFeatures()\n * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_X86 or\n * ANDROID_CPU_FAMILY_X86_64.\n */\nenum {\n    ANDROID_CPU_X86_FEATURE_SSSE3  = (1 << 0),\n    ANDROID_CPU_X86_FEATURE_POPCNT = (1 << 1),\n    ANDROID_CPU_X86_FEATURE_MOVBE  = (1 << 2),\n    ANDROID_CPU_X86_FEATURE_SSE4_1 = (1 << 3),\n    ANDROID_CPU_X86_FEATURE_SSE4_2 = (1 << 4),\n};\n\n/* The bit flags corresponding to the output of android_getCpuFeatures()\n * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_MIPS\n * or ANDROID_CPU_FAMILY_MIPS64.  Values are:\n *\n *   R6:\n *     CPU executes MIPS Release 6 instructions natively, and\n *     supports obsoleted R1..R5 instructions only via kernel traps.\n *\n *   MSA:\n *     CPU supports Mips SIMD Architecture instructions.\n */\nenum {\n    ANDROID_CPU_MIPS_FEATURE_R6    = (1 << 0),\n    ANDROID_CPU_MIPS_FEATURE_MSA   = (1 << 1),\n};\n\n\n/* Return the number of CPU cores detected on this device. */\nextern int android_getCpuCount(void);\n\n/* The following is used to force the CPU count and features\n * mask in sandboxed processes. Under 4.1 and higher, these processes\n * cannot access /proc, which is the only way to get information from\n * the kernel about the current hardware (at least on ARM).\n *\n * It _must_ be called only once, and before any android_getCpuXXX\n * function, any other case will fail.\n *\n * This function return 1 on success, and 0 on failure.\n */\nextern int android_setCpu(int      cpu_count,\n                          uint64_t cpu_features);\n\n#ifdef __arm__\n/* Retrieve the ARM 32-bit CPUID value from the kernel.\n * Note that this cannot work on sandboxed processes under 4.1 and\n * higher, unless you called android_setCpuArm() before.\n */\nextern uint32_t android_getCpuIdArm(void);\n\n/* An ARM-specific variant of android_setCpu() that also allows you\n * to set the ARM CPUID field.\n */\nextern int android_setCpuArm(int      cpu_count,\n                             uint64_t cpu_features,\n                             uint32_t cpu_id);\n#endif\n\n__END_DECLS\n\n#endif /* CPU_FEATURES_H */\n"
  },
  {
    "path": "sources/android/libthread_db/README",
    "content": "Here are the sources of the special libthread_db that will be statically\nlinked against our gdbserver binary. These are uses automatically by the\nbuild-gdbserver.sh script.\n\nTHIS IS NOT AN IMPORT MODULE.\n\nApplications don't need to link to libthread_db anyway, this library is\na small interface used by gdbserver to manage the list of threads on the\ntarget process. Its API and ABI are not stable and may change in the\nfuture.\n"
  },
  {
    "path": "sources/android/libthread_db/gdb-7.7/libthread_db.c",
    "content": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <dirent.h>\n#include <sys/ptrace.h>\n#include <stdint.h>\n#include <thread_db.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <errno.h>\n\n#define DEBUG 0\n#if DEBUG\n#  include <string.h>  /* for strerror() */\n#  define D(...)  fprintf(stderr, \"libthread_db:%s: \", __FUNCTION__), fprintf(stderr, __VA_ARGS__)\n#else\n#  define D(...)  do{}while(0)\n#endif\n\n\nextern int ps_pglobal_lookup (void *, const char *obj, const char *name, void **sym_addr);\nextern pid_t ps_getpid(struct ps_prochandle *ph);\n\n/*\n * This is the list of \"special\" symbols we care about whose addresses are\n * cached by gdbserver from the host at init time.\n */\nenum {\n    SYM_TD_CREATE,\n    SYM_THREAD_LIST,\n    NUM_SYMS\n};\n\nstatic char const * gSymbols[] = {\n    [SYM_TD_CREATE] = \"_thread_created_hook\",\n    NULL\n};\n\n\nchar const **\ntd_symbol_list(void)\n{\n    return gSymbols;\n}\n\n\n/* Extract the permitted capabilities of a given task */\nstatic int\n_get_task_permitted_caps(int pid, int tid, uint64_t *cap)\n{\n    char path[64];\n    char buff[1024];\n    int  len;\n    int  fd;\n    int  result = -1;\n    char*  perm;\n    char*  end;\n\n    /* Open task status file */\n    snprintf(path, sizeof path, \"/proc/%d/task/%d/status\", pid, tid);\n    fd = open(path, O_RDONLY);\n    if (fd < 0) {\n        D(\"Could not open %s: %s\\n\", path, strerror(errno));\n        return -1;\n    }\n\n    /* Read its content, up to sizeof buff-1, then zero-terminate */\n    do {\n        len = read(fd, buff, sizeof buff-1);\n    } while (len < 0 && errno == EINTR);\n\n    if (len < 0) {\n        D(\"Could not read %s: %s\\n\", path, strerror(errno));\n        goto EXIT;\n    }\n\n    buff[len] = 0;\n\n    /* Look for \"CapPrm: \" in it */\n    perm = strstr(buff, \"CapPrm:\");\n    if (perm == NULL) {\n        D(\"Could not find CapPrm in %s!\\n---- cut here ----\\n%.*s\\n----- cut here -----\\n\",\n          path, len, buff);\n        errno = EINVAL;\n        goto EXIT;\n    }\n\n    /* Now read the hexadecimal value after 'CapPrm: ' */\n    errno = 0;\n    *cap = (uint64_t) strtoull(perm+8, &end, 16);\n    if (errno == 0) {\n        D(\"Found CapPerm of %lld in %s\\n\", *cap, path);\n        result = 0;\n    } else {\n        D(\"Cannot read CapPerm from %s: '%.*s'\\n\", path, 24, perm);\n    }\nEXIT:\n    close(fd);\n    return result;\n}\n\n\ntd_err_e\ntd_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** agent_out)\n{\n    td_thragent_t * agent;\n\n    /* Platforms before Android 2.3 contain a system bug that prevents\n     * gdbserver to attach to all threads in a target process when\n     * it is run as the same userID than the target (works fine if\n     * run as root).\n     *\n     * Due to the way gdbserver is coded, this makes gdbserver exit()\n     * immediately (see linux_attach_lwp in linux-low.c). Even if we\n     * modify the source code to not exit(), then signals will not\n     * be properly rerouted to gdbserver, preventing breakpoints from\n     * working correctly.\n     *\n     * The following code is here to test for this problematic condition.\n     * If it is detected, we return TD_NOLIBTHREAD to indicate that there\n     * are no threads to attach to (gdbserver will attach to the main thread\n     * though).\n     */\n    do {\n        char  path[64];\n        DIR*  dir;\n        struct dirent *entry;\n        pid_t     my_pid = getpid();\n        int       target_pid = ps_getpid(proc_handle);\n        uint64_t  my_caps, tid_caps;\n\n        D(\"Probing system for platform bug.\\n\");\n\n        /* nothing to do if we run as root */\n        if (geteuid() == 0) {\n            D(\"Running as root, nothing to do.\\n\");\n            break;\n        }\n\n        /* First, get our own permitted capabilities */\n        if (_get_task_permitted_caps(my_pid, my_pid, &my_caps) < 0) {\n            /* something is really fishy here */\n            D(\"Could not get gdbserver permitted caps!\\n\");\n            return TD_NOLIBTHREAD;\n        }\n\n        /* Now, for each thread in the target process, compare the\n         * permitted capabilities set to our own. If they differ,\n         * the thread attach will fail. Booo...\n         */\n        snprintf(path, sizeof path, \"/proc/%d/task\", target_pid);\n        dir = opendir(path);\n        if (!dir) {\n            D(\"Could not open %s: %s\\n\", path, strerror(errno));\n            break;\n        }\n        while ((entry = readdir(dir)) != NULL) {\n            int  tid;\n\n            if (entry->d_name[0] == '.')   /* skip . and .. */\n                continue;\n\n            tid = atoi(entry->d_name);\n            if (tid == 0)  /* should not happen - be safe */\n                continue;\n\n            if (_get_task_permitted_caps(target_pid, tid, &tid_caps) < 0) {\n                /* again, something is fishy */\n                D(\"Could not get permitted caps for thread %d\\n\", tid);\n                closedir(dir);\n                return TD_NOLIBTHREAD;\n            }\n\n            if (tid_caps != my_caps) {\n                /* AAAARGH !! The permitted capabilities set differ. */\n                D(\"AAAAAH, Can't debug threads!\\n\");\n                fprintf(stderr, \"Thread debugging is unsupported on this Android platform!\\n\");\n                closedir(dir);\n                return TD_NOLIBTHREAD;\n            }\n        }\n        closedir(dir);\n        D(\"Victory: We can debug threads!\\n\");\n    } while (0);\n\n    /* We now return to our regularly scheduled program */\n\n    agent = (td_thragent_t *)malloc(sizeof(td_thragent_t));\n    if (!agent) {\n        return TD_MALLOC;\n    }\n\n    agent->pid = ps_getpid(proc_handle);\n    agent->ph = proc_handle;\n    *agent_out = agent;\n\n    return TD_OK;\n}\n\n\ntd_err_e\ntd_ta_delete(td_thragent_t * ta)\n{\n    free(ta);\n    // FIXME: anything else to do?\n    return TD_OK;\n}\n\n\n/* NOTE: not used by gdb 7.0 */\n\ntd_err_e\ntd_ta_set_event(td_thragent_t const * agent, td_thr_events_t * events)\n{\n    return TD_OK;\n}\n\n\n/* NOTE: not used by gdb 7.0 */\nstatic td_thrhandle_t gEventMsgHandle;\n\n/* NOTE: not used by gdb 7.0 */\n\nstatic int\n_event_getmsg_helper(td_thrhandle_t const * handle, void * bkpt_addr)\n{\n#if defined(__arm__)\n    void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)60 /* r15/pc */, NULL);\n    if (pc == bkpt_addr) {\n        // The hook function takes the id of the new thread as it's first param,\n        // so grab it from r0.\n        gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)0 /* r0 */, NULL);\n        gEventMsgHandle.tid = gEventMsgHandle.pid;\n        return 0x42;\n    }\n#elif defined(__i386__)\n    // Get the eip from offset 12*4 = 48 as defined in the struct\n    // user_regs_struct in user_32.h\n    void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)48 /* eip */, NULL);\n    // FIXME - pc is a non-decremented breakpoint address, hence the\n    // addition of 1 on test.  This seems to work for the thread hook\n    // function in libc.so but should be properly fixed.\n    if (pc == ((int)bkpt_addr + 1)) {\n        // The hook function takes the id of the new thread as it's first\n        // param, so grab it from ecx at offset 4 in struct user_regs_struct\n        // (using fastcall convention for x86)\n        gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)4 /* ecx */, NULL);\n        gEventMsgHandle.tid = gEventMsgHandle.pid;\n        return 0x42;\n    }\n#elif defined(__mips__)\n    void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)(64*4) /* pc */, NULL);\n    if (pc == bkpt_addr) {\n        // The hook function takes the id of the new thread as it's first param,\n        // so grab it from a0\n        gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)(4*4) /* a0 */, NULL);\n        gEventMsgHandle.tid = gEventMsgHandle.pid;\n        return 0x42;\n    }\n#endif\n    return 0;\n}\n\n/* NOTE: not used by gdb 7.0 */\n\ntd_err_e\ntd_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event)\n{\n    td_err_e err;\n    void * bkpt_addr;\n\n    err = ps_pglobal_lookup(NULL, NULL, gSymbols[SYM_TD_CREATE], &bkpt_addr);\n    if (err) {\n        return err;\n    }\n\n    err = td_ta_thr_iter(agent, _event_getmsg_helper, bkpt_addr, 0, 0, NULL, 0);\n    if (err != 0x42) {\n        return TD_NOMSG;\n    }\n\n    event->event = TD_CREATE;\n    event->th_p = &gEventMsgHandle; // Nasty hack, but it's the only way!\n\n    return TD_OK;\n}\n\n\ntd_err_e\ntd_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,\n\t\t  td_thrhandle_t *th)\n{\n    th->pid = ps_getpid(agent->ph);\n    th->tid = lwpid;\n    return TD_OK;\n}\n\n\ntd_err_e\ntd_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info)\n{\n    info->ti_tid = handle->tid;\n    info->ti_lid = handle->tid; // Our pthreads uses kernel ids for tids\n    info->ti_state = TD_THR_SLEEP; /* XXX this needs to be read from /proc/<pid>/task/<tid>.\n                                      This is only used to see if the thread is a zombie or not */\n    return TD_OK;\n}\n\n\n/* NOTE: not used by gdb 7.0 */\n\ntd_err_e\ntd_thr_event_enable(td_thrhandle_t const * handle, int event)\n{\n    // I don't think we need to do anything here...\n    return TD_OK;\n}\n\n\n/* NOTE: not used by gdb 7.0 */\n\ntd_err_e\ntd_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify_out)\n{\n    int32_t err;\n\n    /*\n     * This is nasty, ps_pglobal_lookup is implemented in gdbserver and looks up\n     * the symbol from it's cache, which is populated at start time with the\n     * symbols returned from td_symbol_list via calls back to the host.\n     */\n\n    switch (event) {\n        case TD_CREATE:\n            err = ps_pglobal_lookup(NULL, NULL, gSymbols[SYM_TD_CREATE], &notify_out->u.bptaddr);\n            if (err) {\n                return TD_NOEVENT;\n            }\n            return TD_OK;\n    }\n    return TD_NOEVENT;\n}\n\n\ntd_err_e\ntd_ta_clear_event(const td_thragent_t * ta_arg, td_thr_events_t * event)\n{\n    /* Given that gdb 7.0 doesn't use thread events,\n       there's nothing we need to do here.  */\n    return TD_OK;\n}\n\n\ntd_err_e\ntd_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,\n               td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags)\n{\n    td_err_e err = TD_OK;\n    char path[32];\n    DIR * dir;\n    struct dirent * entry;\n    td_thrhandle_t handle;\n\n    snprintf(path, sizeof(path), \"/proc/%d/task/\", agent->pid);\n    dir = opendir(path);\n    if (!dir) {\n        return TD_NOEVENT;\n    }\n\n    handle.pid = agent->pid;\n    while ((entry = readdir(dir)) != NULL) {\n        if (strcmp(entry->d_name, \".\") == 0 || strcmp(entry->d_name, \"..\") == 0) {\n            continue;\n        }\n        handle.tid = atoi(entry->d_name);\n        if (func(&handle, cookie) != 0) {\n\t    err = TD_DBERR;\n            break;\n        }\n    }\n\n    closedir(dir);\n\n    return err;\n}\n\ntd_err_e\ntd_thr_tls_get_addr(const td_thrhandle_t * th,\n\t\t    psaddr_t map_address, size_t offset, psaddr_t * address)\n{\n    return TD_NOAPLIC; // FIXME: TODO\n}\n"
  },
  {
    "path": "sources/android/libthread_db/gdb-7.7/thread_db.h",
    "content": "/*\n * Copyright (C) 2013, 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef _LIBTHREAD_DB__THREAD_DB_H\n#define _LIBTHREAD_DB__THREAD_DB_H\n\n#include <pthread.h>\n#include <signal.h>\n#include <stdint.h>\n#include <sys/types.h>\n\ntypedef void *psaddr_t;\n#define HAVE_PSADDR_T 1\n\ntypedef pid_t lwpid_t;\n#define HAVE_LWPID_T 1\n\n#define TD_THR_ANY_USER_FLAGS       0xffffffff\n#define TD_THR_LOWEST_PRIORITY      -20\n#define TD_SIGNO_MASK               NULL\n\n/* td_err_e values */\nenum {\n    TD_OK,\n    TD_ERR,\n    TD_NOTHR,\n    TD_NOSV,\n    TD_NOLWP,\n    TD_BADPH,\n    TD_BADTH,\n    TD_BADSH,\n    TD_BADTA,\n    TD_BADKEY,\n    TD_NOMSG,\n    TD_NOFPREGS,\n    TD_NOLIBTHREAD,\n    TD_NOEVENT,\n    TD_NOCAPAB,\n    TD_DBERR,\n    TD_NOAPLIC,\n    TD_NOTSD,\n    TD_MALLOC,\n    TD_PARTIALREG,\n    TD_NOXREGS,\n    TD_VERSION\n};\n\n/*\n * td_event_e values\n * NOTE: There is a max of 32 events\n */\nenum {\n    TD_CREATE,\n    TD_DEATH\n};\n\n/* td_thr_state_e values */\nenum {\n    TD_THR_ANY_STATE,\n    TD_THR_UNKNOWN,\n    TD_THR_SLEEP,\n    TD_THR_ZOMBIE\n};\n\ntypedef int32_t td_err_e;\ntypedef uint32_t td_event_e;\ntypedef uint32_t td_notify_e;\ntypedef uint32_t td_thr_state_e;\ntypedef pthread_t thread_t;\n\ntypedef struct\n{\n    pid_t pid;\n    struct ps_prochandle *ph;\n} td_thragent_t;\n\ntypedef struct\n{\n    pid_t pid;\n    pid_t tid;\n} td_thrhandle_t;\n\ntypedef struct\n{\n    td_event_e event;\n    td_thrhandle_t const * th_p;\n    union {\n        void * data;\n    } msg;\n} td_event_msg_t;\n\ntypedef struct\n{\n    uint32_t events;\n} td_thr_events_t;\n\ntypedef struct\n{\n    union {\n        void * bptaddr;\n    } u;\n} td_notify_t;\n\ntypedef struct\n{\n    td_thr_state_e ti_state;\n    thread_t ti_tid; // pthread's id for the thread\n    int32_t ti_lid; // the kernel's id for the thread\n} td_thrinfo_t;\n\n\n#define td_event_emptyset(set) \\\n    (set)->events = 0\n\n#define td_event_fillset(set) \\\n    (set)->events = 0xffffffff\n\n#define td_event_addset(set, n) \\\n    (set)->events |= (1 << n)\n\n\ntypedef int td_thr_iter_f(td_thrhandle_t const *, void *);\n\n\nstruct ps_prochandle;\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\nextern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent);\n\nextern td_err_e td_ta_delete(td_thragent_t * ta);\n\nextern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);\n\nextern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);\n\nextern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg,\n\t\t\t\t  td_thr_events_t * event);\n\nextern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);\n\nextern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,\n\t\t\t\t  td_thrhandle_t *th);\n\nextern td_err_e td_thr_get_info(td_thrhandle_t const * handle,\n\t\t\t\ttd_thrinfo_t * info);\n\nextern td_err_e td_thr_event_enable(td_thrhandle_t const * handle, int event);\n\nextern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,\n                               td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);\n\nextern char const ** td_symbol_list(void);\n\nextern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info);\n\nextern td_err_e td_thr_tls_get_addr(const td_thrhandle_t * th,\n\t\t\t\t    psaddr_t map_address, size_t offset,\n\t\t\t\t    psaddr_t * address);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "sources/android/libthread_db/libthread_db.c",
    "content": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <dirent.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/ptrace.h>\n#include <thread_db.h>\n#include <unistd.h>\n\nextern pid_t ps_getpid(struct ps_prochandle*);\n\n// We don't have any symbols to cache.\nchar const** td_symbol_list(void) {\n    static char const* symbols[] = { NULL };\n    return symbols;\n}\n\n//\n// Thread agents.\n//\n\ntd_err_e td_ta_new(struct ps_prochandle* proc_handle, td_thragent_t** agent_out) {\n    td_thragent_t* agent = (td_thragent_t*) calloc(1, sizeof(td_thragent_t));\n    if (!agent) {\n        return TD_MALLOC;\n    }\n\n    agent->pid = ps_getpid(proc_handle);\n    agent->ph = proc_handle;\n    *agent_out = agent;\n\n    return TD_OK;\n}\n\n\ntd_err_e td_ta_delete(td_thragent_t* ta) {\n    free(ta);\n    return TD_OK;\n}\n\ntd_err_e td_ta_map_lwp2thr(td_thragent_t const* agent, lwpid_t lwpid, td_thrhandle_t* th) {\n    th->pid = ps_getpid(agent->ph);\n    th->tid = lwpid;\n    return TD_OK;\n}\n\ntd_err_e td_ta_thr_iter(td_thragent_t const* agent,\n                        td_thr_iter_f* func,\n                        void* cookie,\n                        td_thr_state_e state,\n                        int32_t prio,\n                        sigset_t* sigmask,\n                        uint32_t user_flags) {\n    td_err_e err = TD_OK;\n    char path[32];\n    DIR * dir;\n    struct dirent * entry;\n    td_thrhandle_t handle;\n\n    snprintf(path, sizeof(path), \"/proc/%d/task/\", agent->pid);\n    dir = opendir(path);\n    if (!dir) {\n        return TD_NOEVENT;\n    }\n\n    handle.pid = agent->pid;\n    while ((entry = readdir(dir)) != NULL) {\n        if (strcmp(entry->d_name, \".\") == 0 || strcmp(entry->d_name, \"..\") == 0) {\n            continue;\n        }\n        handle.tid = atoi(entry->d_name);\n        if (func(&handle, cookie) != 0) {\n\t    err = TD_DBERR;\n            break;\n        }\n    }\n\n    closedir(dir);\n\n    return err;\n}\n\n//\n// Threads.\n//\n\ntd_err_e td_thr_get_info(td_thrhandle_t const* handle, td_thrinfo_t* info) {\n    info->ti_tid = handle->tid;\n    info->ti_lid = handle->tid; // Our pthreads uses kernel ids for tids\n    info->ti_state = TD_THR_SLEEP; /* XXX this needs to be read from /proc/<pid>/task/<tid>.\n                                      This is only used to see if the thread is a zombie or not */\n    return TD_OK;\n}\n\n//\n// TLS.\n//\n\ntd_err_e td_thr_tlsbase(const td_thrhandle_t* unused1, unsigned long int unused2, psaddr_t* unused3) {\n  return TD_NOAPLIC; // TODO: fix this if/when we support ELF TLS.\n}\n\ntd_err_e td_thr_tls_get_addr(const td_thrhandle_t* unused1, psaddr_t unused2, size_t unused3, psaddr_t* unused4) {\n  return TD_NOAPLIC; // TODO: fix this if/when we support ELF TLS.\n}\n\n//\n// Thread events.\n//\n\n// Thread events are no longer used by gdb >= 7.0.\n// Because we link gdbserver statically, though, we need dummy definitions.\ntd_err_e td_ta_set_event(td_thragent_t const* agent, td_thr_events_t* events) {\n    abort();\n}\ntd_err_e td_ta_event_getmsg(td_thragent_t const* agent, td_event_msg_t* event) {\n    abort();\n}\ntd_err_e td_thr_event_enable(const td_thrhandle_t* handle, int event) {\n    abort();\n}\ntd_err_e td_ta_clear_event(const td_thragent_t* ta_arg, td_thr_events_t* event) {\n    abort();\n}\ntd_err_e td_ta_event_addr(td_thragent_t const* agent, td_event_e event, td_notify_t* notify_out) {\n    abort();\n}\n"
  },
  {
    "path": "sources/android/libthread_db/thread_db.h",
    "content": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef _LIBTHREAD_DB__THREAD_DB_H\n#define _LIBTHREAD_DB__THREAD_DB_H\n\n#include <pthread.h>\n#include <signal.h>\n#include <stdint.h>\n#include <sys/procfs.h>\n#include <sys/types.h>\n\n#define TD_THR_ANY_USER_FLAGS       0xffffffff\n#define TD_THR_LOWEST_PRIORITY      -20\n#define TD_SIGNO_MASK               NULL\n\n/* td_err_e values */\nenum {\n    TD_OK,\n    TD_ERR,\n    TD_NOTHR,\n    TD_NOSV,\n    TD_NOLWP,\n    TD_BADPH,\n    TD_BADTH,\n    TD_BADSH,\n    TD_BADTA,\n    TD_BADKEY,\n    TD_NOMSG,\n    TD_NOFPREGS,\n    TD_NOLIBTHREAD,\n    TD_NOEVENT,\n    TD_NOCAPAB,\n    TD_DBERR,\n    TD_NOAPLIC,\n    TD_NOTSD,\n    TD_MALLOC,\n    TD_PARTIALREG,\n    TD_NOXREGS,\n    TD_VERSION\n};\n\n/*\n * td_event_e values\n * NOTE: There is a max of 32 events\n */\nenum {\n    TD_CREATE,\n    TD_DEATH\n};\n\n/* td_thr_state_e values */\nenum {\n    TD_THR_ANY_STATE,\n    TD_THR_UNKNOWN,\n    TD_THR_SLEEP,\n    TD_THR_ZOMBIE\n};\n\ntypedef int32_t td_err_e;\ntypedef uint32_t td_event_e;\ntypedef uint32_t td_notify_e;\ntypedef uint32_t td_thr_state_e;\ntypedef pthread_t thread_t;\n\ntypedef struct\n{\n    pid_t pid;\n    struct ps_prochandle *ph;\n} td_thragent_t;\n\ntypedef struct\n{\n    pid_t pid;\n    pid_t tid;\n    psaddr_t th_unique;\n} td_thrhandle_t;\n\ntypedef struct\n{\n    td_event_e event;\n    td_thrhandle_t const * th_p;\n    union {\n        void * data;\n    } msg;\n} td_event_msg_t;\n\ntypedef struct\n{\n    uint32_t events;\n} td_thr_events_t;\n\ntypedef struct\n{\n    union {\n        void * bptaddr;\n    } u;\n} td_notify_t;\n\ntypedef struct\n{\n    td_thr_state_e ti_state;\n    thread_t ti_tid; // pthread's id for the thread\n    int32_t ti_lid; // the kernel's id for the thread\n} td_thrinfo_t;\n\n\n#define td_event_emptyset(set) \\\n    (set)->events = 0\n\n#define td_event_fillset(set) \\\n    (set)->events = 0xffffffff\n\n#define td_event_addset(set, n) \\\n    (set)->events |= (1 << n)\n\n\ntypedef int td_thr_iter_f(td_thrhandle_t const *, void *);\n\n\nstruct ps_prochandle;\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\nextern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent);\n\nextern td_err_e td_ta_delete(td_thragent_t * ta);\n\nextern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);\n\nextern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);\n\nextern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg,\n\t\t\t\t  td_thr_events_t * event);\n\nextern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);\n\nextern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,\n\t\t\t\t  td_thrhandle_t *th);\n\nextern td_err_e td_thr_get_info(td_thrhandle_t const * handle,\n\t\t\t\ttd_thrinfo_t * info);\n\nextern td_err_e td_thr_event_enable(const td_thrhandle_t * handle,\n\t\t\t\t    int event);\n\nextern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,\n                               td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);\n\nextern char const ** td_symbol_list(void);\n\nextern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info);\n\nextern td_err_e td_thr_tlsbase(const td_thrhandle_t*, unsigned long int, psaddr_t*);\n\nextern td_err_e td_thr_tls_get_addr(const td_thrhandle_t*, psaddr_t, size_t, psaddr_t*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "sources/android/support/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n================================================================================\n\nmusl as a whole is licensed under the following standard MIT license:\n\n----------------------------------------------------------------------\nCopyright © 2005-2014 Rich Felker, et al.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n----------------------------------------------------------------------\n\nAuthors/contributors include:\n\nAlexander Monakov\nAnthony G. Basile\nArvid Picciani\nBobby Bingham\nBoris Brezillon\nBrent Cook\nChris Spiegel\nClément Vasseur\nDenys Vlasenko\nEmil Renner Berthing\nFelix Fietkau\nFelix Janda\nGianluca Anzolin\nHiltjo Posthuma\nIsaac Dunham\nJens Gustedt\nJeremy Huntwork\nJoakim Sindholt\nJohn Spencer\nJosiah Worcester\nJustin Cormack\nLuca Barbato\nLuka Perkov\nM Farkas-Dyck (Strake)\nMichael Forney\nNicholas J. Kain\norc\nPascal Cuoq\nPierre Carrier\nRich Felker\nRichard Pennington\nsin\nSolar Designer\nStefan Kristiansson\nSzabolcs Nagy\nTimo Teräs\nTrutz Behn\nValentin Ochs\nWilliam Haddon\n\nPortions of this software are derived from third-party works licensed\nunder terms compatible with the above MIT license:\n\nThe TRE regular expression implementation (src/regex/reg* and\nsrc/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed\nunder a 2-clause BSD license (license text in the source files). The\nincluded version has been heavily modified by Rich Felker in 2012, in\nthe interests of size, simplicity, and namespace cleanliness.\n\nMuch of the math library code (src/math/* and src/complex/*) is\nCopyright © 1993,2004 Sun Microsystems or\nCopyright © 2003-2011 David Schultz or\nCopyright © 2003-2009 Steven G. Kargl or\nCopyright © 2003-2009 Bruce D. Evans or\nCopyright © 2008 Stephen L. Moshier\nand labelled as such in comments in the individual source files. All\nhave been licensed under extremely permissive terms.\n\nThe ARM memcpy code (src/string/armel/memcpy.s) is Copyright © 2008\nThe Android Open Source Project and is licensed under a two-clause BSD\nlicense. It was taken from Bionic libc, used on Android.\n\nThe implementation of DES for crypt (src/misc/crypt_des.c) is\nCopyright © 1994 David Burren. It is licensed under a BSD license.\n\nThe implementation of blowfish crypt (src/misc/crypt_blowfish.c) was\noriginally written by Solar Designer and placed into the public\ndomain. The code also comes with a fallback permissive license for use\nin jurisdictions that may not recognize the public domain.\n\nThe smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011\nValentin Ochs and is licensed under an MIT-style license.\n\nThe BSD PRNG implementation (src/prng/random.c) and XSI search API\n(src/search/*.c) functions are Copyright © 2011 Szabolcs Nagy and\nlicensed under following terms: \"Permission to use, copy, modify,\nand/or distribute this code for any purpose with or without fee is\nhereby granted. There is no warranty.\"\n\nThe x86_64 port was written by Nicholas J. Kain. Several files (crt)\nwere released into the public domain; others are licensed under the\nstandard MIT license terms at the top of this file. See individual\nfiles for their copyright status.\n\nThe mips and microblaze ports were originally written by Richard\nPennington for use in the ellcc project. The original code was adapted\nby Rich Felker for build system and code conventions during upstream\nintegration. It is licensed under the standard MIT terms.\n\nThe powerpc port was also originally written by Richard Pennington,\nand later supplemented and integrated by John Spencer. It is licensed\nunder the standard MIT terms.\n\nAll other files which have no copyright comments are original works\nproduced specifically for use as part of this library, written either\nby Rich Felker, the main author of the library, or by one or more\ncontibutors listed above. Details on authorship of individual files\ncan be found in the git version control history of the project. The\nomission of copyright and license comments in each file is in the\ninterest of source tree size.\n\nAll public header files (include/* and arch/*/bits/*) should be\ntreated as Public Domain as they intentionally contain no content\nwhich can be covered by copyright. Some source modules may fall in\nthis category as well. If you believe that a file is so trivial that\nit should be in the Public Domain, please contact the authors and\nrequest an explicit statement releasing it from copyright.\n\nThe following files are trivial, believed not to be copyrightable in\nthe first place, and hereby explicitly released to the Public Domain:\n\nAll public headers: include/*, arch/*/bits/*\nStartup files: crt/*\n"
  },
  {
    "path": "sources/cpufeatures/Android.mk",
    "content": "# NOTE: The library has moved to $NDK/sources/android/cpufeatures,\n#       this file is only provided to redirect to the real one.\ninclude $(dir $(call my-dir))/android/cpufeatures/Android.mk\n"
  },
  {
    "path": "sources/cpufeatures/README.TXT",
    "content": "IMPORTANT: The cpufeatures library has moved to $NDK/sources/android/cpufeatures\n           and is now available as an import module (see docs/IMPORT-MODULE.TXT)\n\nThis header is only here to ensure that existing build scripts can still\nreference $NDK/source/cpufeatures in their LOCAL_C_INCLUDES definition,\nbut it is DEPRECATED and will be removed in a future NDK release.\n\nPlease modify your build scripts to import the library instead ASAP.\n\nThanks.\n"
  },
  {
    "path": "sources/crystax/.gitignore",
    "content": ".gvide\n*.swp\n\nlibs/\nobj/\n\n# BEGIN OF AUTO-GENERATED SOURCES\ngen/\ninclude/_ctype.h\ninclude/ar.h\ninclude/arpa/inet.h\ninclude/arpa/nameser.h\ninclude/arpa/nameser_compat.h\ninclude/asm-arm/\ninclude/asm-arm64/\ninclude/asm-generic/\ninclude/asm-mips/\ninclude/asm-x86/\ninclude/blocks-runtime/\ninclude/bzlib.h\ninclude/complex.h\ninclude/crystax/bionic/\ninclude/crystax/freebsd/\ninclude/crystax/libkqueue/\ninclude/crystax/libpwq/\ninclude/crystax/musl/\ninclude/ctype.h\ninclude/db.h\ninclude/dirent.h\ninclude/err.h\ninclude/fts.h\ninclude/ftw.h\ninclude/glob.h\ninclude/iconv.h\ninclude/inttypes.h\ninclude/langinfo.h\ninclude/limits.h\ninclude/linux/auxvec.h\ninclude/linux/if_plip.h\ninclude/linux/if_slip.h\ninclude/linux/in6.h\ninclude/linux/inotify.h\ninclude/linux/ipc.h\ninclude/linux/libc-compat.h\ninclude/linux/personality.h\ninclude/linux/posix_types.h\ninclude/linux/prctl.h\ninclude/linux/resource.h\ninclude/linux/sched.h\ninclude/linux/signal.h\ninclude/linux/signalfd.h\ninclude/linux/time.h\ninclude/linux/tty.h\ninclude/linux/unistd.h\ninclude/linux/xattr.h\ninclude/locale.h\ninclude/machine/_inttypes.h\ninclude/machine/_limits.h\ninclude/machine/_stdint.h\ninclude/machine/armreg.h\ninclude/machine/endian.h\ninclude/machine/ieee.h\ninclude/machine/ieeefp.h\ninclude/machine/pthread_types.h\ninclude/machine/sysarch.h\ninclude/machine/timespec.h\ninclude/math.h\ninclude/mntent.h\ninclude/monetary.h\ninclude/net/if_ether.h\ninclude/netdb.h\ninclude/netinet/in.h\ninclude/netinet/in6.h\ninclude/nl_types.h\ninclude/nsswitch.h\ninclude/poll.h\ninclude/printf.h\ninclude/pthread.h\ninclude/pthread_workqueue.h\ninclude/pty.h\ninclude/pwd.h\ninclude/regex.h\ninclude/resolv.h\ninclude/runetype.h\ninclude/sched.h\ninclude/search.h\ninclude/signal.h\ninclude/stdio.h\ninclude/stdlib.h\ninclude/string.h\ninclude/strings.h\ninclude/sys/_errdefs.h\ninclude/sys/_null.h\ninclude/sys/_sigdefs.h\ninclude/sys/_stdint.h\ninclude/sys/auxv.h\ninclude/sys/endian.h\ninclude/sys/epoll.h\ninclude/sys/event.h\ninclude/sys/file.h\ninclude/sys/glibc-syscalls.h\ninclude/sys/iconv.h\ninclude/sys/inotify.h\ninclude/sys/ioctl.h\ninclude/sys/ipc.h\ninclude/sys/limits.h\ninclude/sys/mtio.h\ninclude/sys/personality.h\ninclude/sys/prctl.h\ninclude/sys/procfs.h\ninclude/sys/queue.h\ninclude/sys/resource.h\ninclude/sys/select.h\ninclude/sys/signal.h\ninclude/sys/signalfd.h\ninclude/sys/stat.h\ninclude/sys/statvfs.h\ninclude/sys/stdint.h\ninclude/sys/syscall.h\ninclude/sys/sysconf.h\ninclude/sys/sysinfo.h\ninclude/sys/time.h\ninclude/sys/timerfd.h\ninclude/sys/ucontext.h\ninclude/sys/uio.h\ninclude/sys/user.h\ninclude/sys/utsname.h\ninclude/sys/xattr.h\ninclude/sysexits.h\ninclude/tar.h\ninclude/tgmath.h\ninclude/time.h\ninclude/uchar.h\ninclude/unistd.h\ninclude/utmp.h\ninclude/vis.h\ninclude/wchar.h\ninclude/wctype.h\ninclude/xlocale/\n# END OF AUTO-GENERATED SOURCES\n"
  },
  {
    "path": "sources/crystax/.syntastic/c",
    "content": "--sysroot=../../platforms/android-9/arch-arm\n-I../include\n-I../src/include\n"
  },
  {
    "path": "sources/crystax/GNUmakefile",
    "content": "#\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n#\n\nMYDIR := $(dir $(firstword $(MAKEFILE_LIST)))\n\noverride MTARGET := crystax\n\nifeq (,$(strip $(NDK)))\nNDK := $(realpath $(MYDIR)/../..)\nendif\n\nCCONF := $(MYDIR)/bin/config --ndk=$(NDK)\n\nDEFAULT_GCC_VERSION := $(shell $(CCONF) --default-gcc-version)\nifeq (,$(DEFAULT_GCC_VERSION))\n$(error Can not detect default GCC version!)\nendif\n\nifeq (,$(strip $(TVS)))\nTVS := gcc$(DEFAULT_GCC_VERSION)\nendif\n\nCCONF := $(CCONF) --toolchain=$(TVS)\n\nMAKEPRG := $(MAKE) --no-print-directory\n\nGENSOURCES := $(MYDIR)/bin/gen-sources\n\nempty :=\nspace := $(empty) $(empty)\ncomma := ,\n\ndefine commas-to-spaces\n$(strip $(subst $(comma),$(space),$(1)))\nendef\n\ndefine spaces-to-commas\n$(strip $(subst $(space),$(comma),$(strip $(1))))\nendef\n\n# $1: variable name where to save cached result\n# $2: function name\n# $3, $4, $5, ....: function arguments\n# return: either cached result or result of function call (which is cached too)\ndefine cached\n$(strip $(if $(and $(strip $(1)),$(strip $(2))),\\\n    $(if $($(strip $(1))),,$(eval $(strip $(1)) := $(call $(strip $(2)),$(strip $(3)),$(strip $(4)),$(strip $(5)),$(strip $(6)),$(strip $(7)),$(strip $(8)),$(strip $(9)))))\\\n    $($(strip $(1))),\\\n    $(error Usage: call cached,var-name,func-name,func-arguments)\\\n))\nendef\n\n# $1: list\ndefine head\n$(firstword $(1))\nendef\n\n# $1: list\ndefine tail\n$(wordlist 2,$(words $(1)),$(1))\nendef\n\ndefine host-os-impl\n$(shell uname -s | tr '[A-Z]' '[a-z]')\nendef\n\ndefine host-os\n$(call cached,var-host-os,host-os-impl)\nendef\n\ndefine host-arch-impl\n$(shell uname -m)\nendef\n\ndefine host-arch\n$(call cached,var-host-arch,host-arch-impl)\nendef\n\n# $1: Toolchain version\ndefine cctype\n$(if $(filter clang%,$(1)),clang,gcc)\nendef\n\n# $1: Toolchain version (optional)\ndefine is-gcc\n$(if $(filter gcc,$(call cctype,$(or $(strip $(1)),$(TVS)))),yes)\nendef\n\n# $2: Toolchain version (optional)\ndefine is-clang\n$(if $(filter clang,$(call cctype,$(or $(strip $(1)),$(TVS)))),yes)\nendef\n\n# $1: ABI\ndefine tcprefix-impl\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter armeabi%,$(1)),arm-linux-androideabi-),\\\n        $(if $(filter arm64-v8a,$(1)),aarch64-linux-android-),\\\n        $(if $(filter x86,$(1)),x86-),\\\n        $(if $(filter x86_64,$(1)),x86_64-),\\\n        $(if $(filter mips,$(1)),mipsel-linux-android-),\\\n        $(if $(filter mips64,$(1)),mips64el-linux-android-),\\\n        $(error Unsupported ABI: '$(1)')\\\n    ),\\\n    $(error Usage: call tcprefix,abi)\\\n))\nendef\n\n# $1: ABI\ndefine tcprefix\n$(call cached,var-tcprefix-$(1),tcprefix-impl,$(1))\nendef\n\n# $1: ABI\ndefine tcname-impl\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter x86,$(1)),i686-linux-android-),\\\n        $(if $(filter x86_64,$(1)),x86_64-linux-android-),\\\n        $(call tcprefix,$(1))\\\n    ),\\\n    $(error Usage: call tcname,abi)\\\n))\nendef\n\n# $1: ABI\ndefine tcname\n$(call cached,var-tcname-$(1),tcname-impl,$(1))\nendef\n\n# $1: ABI\ndefine llvm-tripple-impl\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter armeabi,$(1)),armv5te-none-linux-androideabi),\\\n        $(if $(filter armeabi-v7a%,$(1)),armv7-none-linux-androideabi),\\\n        $(if $(filter arm64-v8a,$(1)),aarch64-none-linux-android),\\\n        $(if $(filter x86,$(1)),i686-none-linux-android),\\\n        $(if $(filter x86_64,$(1)),x86_64-none-linux-android),\\\n        $(if $(filter mips,$(1)),mipsel-none-linux-android),\\\n        $(if $(filter mips64,$(1)),mips64el-none-linux-android),\\\n        $(error Unsupported ABI: '$(1)')\\\n    ),\\\n    $(error Usage: call llvm-tripple,abi)\\\n))\nendef\n\n# $1: ABI\ndefine llvm-tripple\n$(call cached,var-llvm-tripple-$(1),llvm-tripple-impl,$(1))\nendef\n\n# $1: ABI\n# $2: GCC version\ndefine gcc-toolchain-impl\n$(abspath $(NDK)/toolchains/$(call tcprefix,$(1))$(2)/prebuilt/$(host-os)-$(host-arch))\nendef\n\n# $1: ABI\n# $2: GCC version\ndefine gcc-toolchain\n$(call cached,var-gcc-toolchain-$(1)-$(2),gcc-toolchain-impl,$(1),$(2))\nendef\n\n# $1: Toolchain version\ndefine gcc-version\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter gcc%,$(1)),$(patsubst gcc%,%,$(1))),\\\n        $(error '$(1)' is not gcc)\\\n    ),\\\n    $(error Usage: call gcc-version,toolchain-version)\\\n))\nendef\n\n# $1: Toolchain version\ndefine clang-version\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter clang%,$(1)),$(patsubst clang%,%,$(1))),\\\n        $(error '$(1)' is not clang)\\\n    ),\\\n    $(error Usage: call clang-version,toolchain-version)\\\n))\nendef\n\n# $1: ABI\n# $2: Toolchain version\n# $3: Toolchain utility name (gcc, clang, ar etc)\ndefine tc-bin-impl\n$(strip $(if $(and $(strip $(1)),$(strip $(2)),$(strip $(3))),\\\n    $(if $(call is-gcc,$(2)),\\\n        $(call gcc-toolchain,$(1),$(call gcc-version,$(2)))/bin/$(call tcname,$(1))$(strip $(3)),\\\n        $(strip \\\n            $(abspath $(NDK)/toolchains/llvm-$(call clang-version,$(2))/prebuilt/$(host-os)-$(host-arch)/bin/$(strip $(3)))\\\n            $(if $(filter clang clang++,$(3)),\\\n                -target $(call llvm-tripple,$(1))\\\n                -gcc-toolchain $(call gcc-toolchain,$(1),$(DEFAULT_GCC_VERSION))\\\n            )\\\n        )\\\n    ),\\\n    $(error Usage: call tc-bin,abi,toolchain-version,name)\\\n))\nendef\n\n# $1: ABI\n# $2: Toolchain version\n# $3: Toolchain utility name (gcc, clang, ar etc)\ndefine tc-bin\n$(call cached,var-tc-bin-$(1)-$(2)-$(3),tc-bin-impl,$(1),$(2),$(3))\nendef\n\n# $1: ABI\n# $2: Toolchain version (optional)\ndefine cc\n$(call tc-bin,$(1),$(or $(strip $(2)),$(TVS)),$(if $(call is-gcc,$(or $(strip $(2)),$(TVS))),gcc,clang))\nendef\n\n# $1: ABI\n# $2: Toolchain version (optional)\ndefine c++\n$(call tc-bin,$(1),$(or $(strip $(2)),$(TVS)),$(if $(call is-gcc,$(or $(strip $(2)),$(TVS))),g++,clang++))\nendef\n\n# $1: ABI\n# $2: Toolchain version (optional)\ndefine ar\n$(call tc-bin,$(1),$(or $(strip $(2)),$(TVS)),$(if $(call is-gcc,$(or $(strip $(2)),$(TVS))),ar,llvm-ar))\nendef\n\n# $1: ABI\ndefine arch-for-abi-impl\n$(strip $(if $(filter 1,$(words $(1))),\\\n    $(or \\\n        $(if $(filter armeabi%,$(1)),arm),\\\n        $(if $(filter arm64%,$(1)),arm64),\\\n        $(if $(filter x86 x86_64 mips mips64,$(1)),$(1)),\\\n        $(error Unsupported ABI: '$(1)')\\\n    ),\\\n    $(error Usage: call arch-for-abi,abi)\\\n))\nendef\n\n# $1: ABI\ndefine arch-for-abi\n$(call cached,var-arch-for-abi-$(1),arch-for-abi-impl,$(1))\nendef\n\n# $1: ABI\n# $2: list of API levels\ndefine detect-platform-impl\n$(strip $(if $(filter 1,$(words $(1))),\\\n    $(if $(strip $(2)),\\\n        $(if $(wildcard $(NDK)/platforms/android-$(call head,$(2))/arch-$(call arch-for-abi,$(1))),\\\n            android-$(call head,$(2)),\\\n            $(call detect-platform-impl,$(1),$(call tail,$(2)))\\\n        ),\\\n        $(error Can not detect sysroot platform for ABI '$(1)')\\\n    ),\\\n    $(error Usage: call detect-platform,abi,api-levels)\\\n))\nendef\n\n# $1: ABI\n# $2: list of API levels\ndefine detect-platform\n$(call cached,var-detect-platform-$(1),detect-platform-impl,$(1),$(2))\nendef\n\n# $1: ABI\ndefine sysroot\n$(strip $(if $(filter 1,$(words $(1))),\\\n    $(abspath $(NDK)/platforms/$(call detect-platform,$(1),9 L 21)/arch-$(call arch-for-abi,$(1))),\\\n    $(error Usage: call sysroot,abi)\\\n))\nendef\n\n# $1: ABI\n# $2: multilib variant\ndefine sysroot-libdir\n$(strip $(if $(and $(filter 1,$(words $(1))),$(filter 1,$(words $(2)))),\\\n    $(call sysroot,$(1))/usr/$(strip \\\n        $(or \\\n            $(if $(filter x32,$(2)),libx32),\\\n            $(if $(filter mips32r2,$(2)),libr2),\\\n            $(if $(filter mips32r6,$(2)),libr6),\\\n            $(if $(filter mips64r2,$(2)),lib64r2),\\\n            $(if $(filter x86_64 mips64r6,$(2)),lib64),\\\n            lib\\\n        )\\\n    ),\\\n    $(error Usage: call sysroot-libdir,abi,multilib)\\\n))\nendef\n\ndefine abis-impl\n$(or $(call commas-to-spaces,$(ABIS)),$(call commas-to-spaces,$(ABI)),$(shell $(CCONF) --abis))\nendef\n\ndefine abis\n$(call cached,var-abis,abis-impl)\nendef\n\n# $1: ABI\ndefine multilibs\n$(shell $(CCONF) --multilibs --abi=$(1))\nendef\n\n# $1: type (shared or static)\ndefine targetname\n$(strip \\\n    $(if $(strip $(1)),,$(error Usage: call targetname,type))\\\n    $(if $(filter 1,$(words $(1))),,$(error More than one parameters passed to targetname function))\\\n    libcrystax.$(subst shared,so,$(subst static,a,$(1)))\\\n)\nendef\n\n# $1: type (shared or static)\n# $2: ABI\n# $3: multilib variant (optional)\ndefine target\n$(abspath $(MYDIR)/$(shell $(CCONF) --libpath --abi=$(strip $(2)) $(if $(strip $(3)),--multilib=$(strip $(3))))/$(call targetname,$(1)))\nendef\n\ndefine static-libraries\nendef\n\n# $1: name\n# $2: ABI\n# $3: multilib variant\ndefine static-library\n$(call objdir,$(2),$(3))/lib$(1).a\nendef\n\ndefine stubs\ndl\nendef\n\n# $1: stub name\n# $2: ABI\n# $3: multilib variant (optional)\ndefine stub\n$(abspath $(MYDIR)/$(shell $(CCONF) --libpath --abi=$(strip $(2)) $(if $(strip $(3)),--multilib=$(strip $(3))))/stubs/lib$(1)stub.so)\nendef\n\n# $1: stub name\ndefine stub-symbols\n$(strip $(or \\\n    $(if $(filter dl,$(1)),\\\n        dl_iterate_phdr      \\\n        dl_unwind_find_exidx \\\n        dladdr               \\\n        dlclose              \\\n        dlerror              \\\n        dlopen               \\\n        dlsym                \\\n    ),\\\n    $(error Unknown stub: '$(1)')\\\n))\nendef\n\n# $1: stub name\ndefine stub-soname\n$(if $(filter bionic,$(1)),libc.so,lib$(1).so)\nendef\n\n# $1: library name\n# $2: type (shared or static)\n# $3: ABI\n# $4: multilib variant (optional)\ndefine sources-impl\n$(strip $(or \\\n    $(if $(filter $(MTARGET),$(1)),\\\n        $(shell $(CCONF) --sources --abi=$(strip $(3)) --libtype=$(strip $(2)) \\\n            $(if $(strip $(4)),--multilib=$(strip $(4)))) \\\n    ),\\\n    $(error Unknown library: '$(1)')\\\n))\nendef\n\n# $1: library name\n# $2: type (shared or static)\n# $3: ABI\n# $4: multilib variant (optional)\ndefine sources\n$(call cached,var-sources-$(1)-$(2)-$(3)-$(4),sources-impl,$(1),$(2),$(3),$(4))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant (optional)\n# $4: source file (optional)\ndefine cflags\n$(strip $(or \\\n    $(if $(filter $(MTARGET),$(1)),\\\n        $(shell $(strip $(CCONF) --cflags --abi=$(strip $(2)) \\\n            $(if $(strip $(3)),--multilib=$(strip $(3))) \\\n            $(if $(strip $(4)),--source-file=$(strip $(4))) \\\n        ))\\\n    ),\\\n    $(call abiflags,$(2),$(3))\\\n))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant (optional)\n# $4: source file (optional)\ndefine c++flags\n$(strip $(or \\\n    $(if $(filter $(MTARGET),$(1)),\\\n        $(shell $(CCONF) --c++flags --abi=$(strip $(2)) \\\n            $(if $(strip $(3)),--multilib=$(strip $(3))) \\\n            $(if $(strip $(4)),--source-file=$(strip $(4))) \\\n        )\\\n    ),\\\n    $(call abiflags,$(2),$(3))\\\n))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant (optional)\n# $4: source file (optional)\ndefine asmflags\n$(strip $(or \\\n    $(if $(filter $(MTARGET),$(1)),\\\n        $(shell $(CCONF) --asmflags --abi=$(strip $(2)) \\\n            $(if $(strip $(3)),--multilib=$(strip $(3))) \\\n            $(if $(strip $(4)),--source-file=$(strip $(4))) \\\n        )\\\n    ),\\\n    $(call abiflags,$(2),$(3))\\\n))\nendef\n\n# $1: ABI\n# $2: multilib variant\ndefine abiflags-impl\n$(shell $(CCONF) --abiflags --abi=$(strip $(1)) --multilib=$(strip $(2)))\nendef\n\n# $1: ABI\n# $2: multilib variant\ndefine abiflags\n$(call cached,var-abiflags-$(1)-$(2),abiflags-impl,$(1),$(2))\nendef\n\n# $1: ABI\n# $2: multilib variant (optional)\ndefine ldflags-impl\n$(shell $(CCONF) --ldflags --abi=$(strip $(1)) $(if $(strip $(2)),--multilib=$(strip $(2))))\nendef\n\n# $1: ABI\n# $2: multilib variant (optional)\ndefine ldflags\n$(call cached,var-ldflags-$(1)-$(2),ldflags-impl,$(1),$(2))\nendef\n\ndefine objroot\n$(or $(strip $(OBJDIR)),$(abspath $(MYDIR)/obj))\nendef\n\n# $1: ABI\n# $2: multilib variant\n# $3: library name (optional)\ndefine objdir\n$(strip $(if $(and $(strip $(1)),$(strip $(2))),\\\n    $(objroot)/$(strip $(or \\\n        $(if $(filter armeabi,$(1)),armv5te$(if $(filter arm,$(2)),,-$(2))),\\\n        $(if $(filter armeabi-v7a,$(1)),armv7-a$(if $(filter arm,$(2)),,-$(2))),\\\n        $(if $(filter armeabi-v7a-hard,$(1)),armv7-a$(if $(filter arm,$(2)),,-$(2))-hard),\\\n        $(if $(filter arm64-v8a x86 x86_64 mips mips64,$(1)),$(2)),\\\n        $(error Unsupported ABI: '$(1)')\\\n    ))$(if $(strip $(3)),/$(strip $(3))),\\\n    $(error Usage: call objdir,abi,multilib,libname)\\\n))\nendef\n\n# $1: library name\n# $2: type (shared or static)\n# $3: ABI\n# $4: multilib variant\ndefine objfiles-impl\n$(strip \\\n    $(addprefix $(call objdir,$(3),$(4),$(1))/,\\\n        $(foreach __f,$(call sources,$(1),$(2),$(3),$(4)),$(call objfile,$(__f)))\\\n    )\\\n)\nendef\n\n# $1: library name\n# $2: type (shared or static)\n# $3: ABI\n# $4: multilib variant\ndefine objfiles\n$(call cached,var-objfiles-$(1)-$(2)-$(3)-$(4),objfiles-impl,$(1),$(2),$(3),$(4))\nendef\n\n# $1: source file\ndefine objfile\n$(addsuffix .o,$(subst $(abspath $(MYDIR))/,,$(abspath $(1))))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant\n# $4: source file\ndefine full-objfile-path\n$(call objdir,$(2),$(3),$(1))/$(call objfile,$(4))\nendef\n\n# $1: source file\ndefine source-file-language\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(filter %.c,$(1)),C),\\\n        $(if $(filter %.cpp %.cc,$(1)),C++),\\\n        $(if $(filter %.s %.S,$(1)),ASM),\\\n        $(error Can not detect language of source file '$(1)')\\\n    ),\\\n    $(error Usage: call source-file-language,path)\\\n))\nendef\n\n# $1: ABI\n# $2: source file\ndefine compiler-for\n$(strip $(if $(and $(strip $(1)),$(strip $(2))),\\\n    $(or \\\n        $(if $(filter C ASM,$(call source-file-language,$(2))),$(call cc,$(1))),\\\n        $(if $(filter C++,$(call source-file-language,$(2))),$(call c++,$(1))),\\\n        $(error Unknown source file language for '$(2)': '$(call source-file-language,$(2))')\\\n    ),\\\n    $(error Usage: call compiler-for,source-file)\\\n))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant\n# $4: source file\ndefine compiler-flags\n$(strip $(or \\\n    $(if $(filter C,  $(call source-file-language,$(4))),$(call cflags,$(1),$(2),$(3),$(4))),\\\n    $(if $(filter C++,$(call source-file-language,$(4))),$(call c++flags,$(1),$(2),$(3),$(4))),\\\n    $(if $(filter ASM,$(call source-file-language,$(4))),$(call asmflags,$(1),$(2),$(3),$(4))),\\\n    $(error Could not detect compiler flags for '$(4)')\\\n))\nendef\n\n# $1: Toolchain version (optional)\ndefine ar-flags\ncrs$(if $(call is-gcc,$(1)),D)\nendef\n\n# $1: ABI\n# $2: target library file\ndefine linker-options\n-Wl,-shared -Wl,-soname,$(notdir $(2)) -nostdlib --sysroot=$(call sysroot,$(1))\nendef\n\n# $1: ABI\n# $2: multilib variant\n# $3: file name\ndefine linker-crtfile\n$(strip $(if $(filter 1,$(words $(3))),\\\n    $(call sysroot-libdir,$(1),$(2))/$(strip $(3)),\\\n    $(error Usage: call linker-crtfile,abi,multilib,file-name)\\\n))\nendef\n\n# $1: root directory\n# $2: wildcards (*.c, *.h etc)\ndefine rwildcard\n$(foreach __d,$(wildcard $(1)*),$(call rwildcard,$(__d)/,$(2)) $(filter $(subst *,%,$(2)),$(__d)))\nendef\n\ndefine hide\n$(if $(filter 1,$(V)),,@)\nendef\n\ndefine rm-if-exists\n$(if $(wildcard $(1)),rm -Rf $(1))\nendef\n\ndefine auto-generated-sources\n$(shell sed -n '/# BEGIN OF AUTO-GENERATED SOURCES/,/# END OF AUTO-GENERATED SOURCES/p' $(MYDIR)/.gitignore | grep -v '^#')\nendef\n\ndefine additional-dependencies\n$(filter-out %.d,$(MAKEFILE_LIST)) $(firstword $(CCONF))\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant\n# $4: source file\ndefine add-objfile-rule\n$$(call full-objfile-path,$(1),$(2),$(3),$(4)): $$(abspath $(4)) $$(additional-dependencies)\n\t$$(eval __lnam := $(1))\n\t$$(eval __abi  := $(2))\n\t$$(eval __mlib := $(3))\n\t$$(eval __srcf := $(4))\n\t@echo \"CC $$(__abi) [$$(__mlib)] $$(__srcf)\"\n\t@mkdir -p $$(dir $$@)\n\t$$(hide)$$(call compiler-for,$$(__abi),$$<) \\\n\t\t-MD -MP -MF $$(patsubst %.o,%.d,$$@) \\\n\t\t$$(call compiler-flags,$$(__lnam),$$(__abi),$$(__mlib),$$(__srcf)) \\\n\t\t--sysroot=$$(call sysroot,$$(__abi)) \\\n\t\t-c -o $$@ $$<\nendef\n\n# $1: type (shared or static)\n# $2: ABI\n# $3: multilib variant\ndefine add-target-rule\n$$(call target,$(1),$(2),$(3)): $$(strip \\\n\t\t$$(call objfiles,$$(MTARGET),$(1),$(2),$(3)) \\\n\t\t$$(foreach __static_lib,$$(call static-libraries),\\\n\t\t\t$$(call static-library,$$(__static_lib),$(2),$(3)) \\\n\t\t)\\\n\t\t$$(if $$(filter shared,$(1)),\\\n\t\t\t$$(foreach __stub,$$(call stubs),\\\n\t\t\t\t$$(call stub,$$(__stub),$(2),$(3)) \\\n\t\t\t)\\\n\t\t)\\\n\t\t$$(additional-dependencies))\n\t$$(eval __type := $(1))\n\t$$(eval __abi  := $(2))\n\t$$(eval __mlib := $(3))\n\t$$(eval __objfiles := $$(call objfiles,$$(MTARGET),$$(__type),$$(__abi),$$(__mlib)))\n\t$$(eval __crtbegin_objfile := $$(filter %/crtbegin_so.o,$$(__objfiles)))\n\t$$(eval __crtbrand_objfile := $$(filter %/crtbrand.o,$$(__objfiles)))\n\t$$(eval __crtend_objfile   := $$(filter %/crtend_so.o,$$(__objfiles)))\n\t$$(eval __common_objfiles := $$(filter-out $$(addprefix %/,crtbegin_so.o crtbrand.o crtend_so.o),$$(__objfiles)))\n\t$$(foreach __static_lib,$$(call static-libraries),\\\n\t\t$$(eval __common_objfiles += $$(call objfiles,$$(__static_lib),static,$$(__abi),$$(__mlib)))\\\n\t)\n\t@echo \"$$(if $$(filter static,$$(__type)),AR,LD) $$(__abi) [$$(__mlib)] $$(notdir $$@)\"\n\t@mkdir -p $$(dir $$@)\n\t@rm -f $$@\n\t$$(hide)$$(strip $$(if $$(filter static,$$(__type)),\\\n\t\t$$(call ar,$$(__abi)) \\\n\t\t\t$$(call ar-flags) \\\n\t\t\t$$@ \\\n\t\t\t$$(__common_objfiles) \\\n\t\t\t,\\\n\t\t$$(call c++,$$(__abi)) \\\n\t\t\t$$(call abiflags,$$(__abi),$$(__mlib)) \\\n\t\t\t$$(call linker-options,$$(__abi),$$@) \\\n\t\t\t$$(__crtbegin_objfile) \\\n\t\t\t$$(__crtbrand_objfile) \\\n\t\t\t$$(__common_objfiles) \\\n\t\t\t$$(__crtend_objfile) \\\n\t\t\t$$(call ldflags,$$(__abi),$$(__mlib)) \\\n\t\t\t$$(foreach __stub,$$(call stubs),\\\n\t\t\t\t-L$$(dir $$(call stub,$$(__stub),$(2),$(3))) \\\n\t\t\t\t-Wl,-Bdynamic,-l$$(patsubst lib%.so,%,$$(notdir $$(call stub,$$(__stub),$(2),$(3)))) \\\n\t\t\t)\\\n\t\t\t-o $$@ \\\n\t))\n\n.PHONY: all\nall: $$(call target,$(1),$(2),$(3))\n\n.PHONY: $(1)-$(2)\n$(1)-$(2): $$(call target,$(1),$(2),$(3))\n\nendef\n\n# $1: library name\n# $2: ABI\n# $3: multilib variant\ndefine add-static-library-rule\n$$(call static-library,$(1),$(2),$(3)): $$(call objfiles,$(1),static,$(2),$(3)) $$(additional-dependencies)\n\t$$(eval __name := $(1))\n\t$$(eval __abi  := $(2))\n\t$$(eval __mlib := $(3))\n\t@echo \"AR $$(__abi) [$$(__mlib)] $$(notdir $$@)\"\n\t@mkdir -p $$(dir $$@)\n\t@rm -f $$@\n\t$$(hide)$$(call ar,$$(__abi)) $$(call ar-flags) $$@ \\\n\t\t$$(call objfiles,$$(__name),static,$$(__abi),$$(__mlib))\nendef\n\n# $1: stub name\n# $2: ABI\n# $3: multilib variant\ndefine add-stub-rule\n\n$$(call stub,$(1),$(2),$(3)): $$(call objdir,$(2),$(3),$(1)stub)/stub.c\n\t@echo \"ST $(2) [$(3)] $$(notdir $$@)\"\n\t@mkdir -p $$(dir $$@)\n\t$$(hide)$$(call cc,$(2)) \\\n\t\t$$(call abiflags,$(2),$(3)) \\\n\t\t-Wl,-shared,-Bsymbolic \\\n\t\t-Wl,-soname,$$(call stub-soname,$(1)) \\\n\t\t-nostdlib \\\n\t\t-o $$@ $$< \\\n\t\t-Wl,--exclude-libs,libgcc.a\n\n$$(call objdir,$(2),$(3),$(1)stub)/stub.c: $$(additional-dependencies)\n\t@mkdir -p $$(dir $$@)\n\t@rm -f $$@\n\t@$$(foreach __sym,$$(call stub-symbols,$(1)),\\\n\t\techo \"void $$(__sym)() {}\" >>$$@ || exit 1; \\\n\t)\n\nendef\n\n# $1: type (static or shared)\ndefine add-type-build-rule\n.PHONY: $(1)\n$(1): gen-sources\n\t@+$$(foreach __abi,$$(call abis),\\\n\t\t$$(MAKE) -C $$(realpath $$(MYDIR)) $(1)-$$(__abi) CRYSTAX_EVAL_RULES=yes ABI=$$(__abi) || exit 1; \\\n\t)\nendef\n\ndefine add-all-build-rule\n.PHONY: all\nall: gen-sources\n\t@+$$(foreach __abi,$$(call abis),\\\n\t\t$$(MAKE) -C $$(realpath $$(MYDIR)) $$(foreach __t,static shared,$$(__t)-$$(__abi)) CRYSTAX_EVAL_RULES=yes ABI=$$(__abi) || exit 1; \\\n\t)\nendef\n\n#=====================================================================================================================\n\n.PHONY: all\nall:\n\n.PHONY: clean\nclean:\n\t$(call rm-if-exists,$(strip \\\n\t\t$(abspath $(MYDIR)/libs) \\\n\t\t$(objroot) \\\n\t\t$(addprefix $(abspath $(MYDIR))/,$(auto-generated-sources)) \\\n\t))\n\n.PHONY: rebuild\nrebuild:\n\t@$(MAKE) clean\n\t@$(MAKE) all\n\n.PHONY: gen-sources\ngen-sources:\n\t@$(GENSOURCES)\n\nifeq (yes,$(CRYSTAX_EVAL_RULES))\n$(foreach __abi,$(call abis),\\\n    $(foreach __mlib,$(call multilibs,$(__abi)),\\\n        $(foreach __stub,$(call stubs),\\\n            $(eval $(call add-stub-rule,$(__stub),$(__abi),$(__mlib)))\\\n        )\\\n        $(foreach __libname,$(call static-libraries),\\\n            $(eval $(call add-static-library-rule,$(__libname),$(__abi),$(__mlib)))\\\n            $(foreach __src,$(call sources,$(__libname),static,$(__abi),$(__mlib)),\\\n                $(eval $(call add-objfile-rule,$(__libname),$(__abi),$(__mlib),$(__src)))\\\n            )\\\n        )\\\n        $(foreach __src,\\\n            $(sort $(foreach __t,static shared,\\\n                $(call sources,$(MTARGET),$(__t),$(__abi),$(__mlib))\\\n            )),\\\n            $(eval $(call add-objfile-rule,$(MTARGET),$(__abi),$(__mlib),$(__src)))\\\n        )\\\n        $(foreach __t,static shared,\\\n            $(eval $(call add-target-rule,$(__t),$(__abi),$(__mlib)))\\\n        )\\\n        $(eval sinclude $(call rwildcard,$(call objdir,$(__abi),$(__mlib)),*.d))\\\n    )\\\n)\nelse\n$(eval $(call add-all-build-rule))\n$(foreach __t,static shared,\\\n    $(eval $(call add-type-build-rule,$(__t)))\\\n)\nendif\n"
  },
  {
    "path": "sources/crystax/LICENSE",
    "content": "CrystaX NDK contains code from libc library of FreeBSD project which by-turn contains\ncode from other projects. Also, a lot of other open-source projects used, such as GNU gcc,\nGNU binutils, LLVM clang, LLVM libc++ etc. To see specific authors and/or licenses, look\ninto appropriate source file. Here is license for those parts which are not derived from\nany other projects but written by CrystaX.\n\nCopyright (c) 2011-2016 CrystaX.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are\npermitted provided that the following conditions are met:\n\n   1. Redistributions of source code must retain the above copyright notice, this list of\n      conditions and the following disclaimer.\n\n   2. Redistributions in binary form must reproduce the above copyright notice, this list\n      of conditions and the following disclaimer in the documentation and/or other materials\n      provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those of the\nauthors and should not be interpreted as representing official policies, either expressed\nor implied, of CrystaX.\n"
  },
  {
    "path": "sources/crystax/bin/check-symbols",
    "content": "#!/bin/bash\n\nABIS=armeabi,armeabi-v7a,armeabi-v7a-hard,mips,x86,arm64-v8a,mips64,x86_64\n\nusage()\n{\n    echo \"Usage: $0 [parameters]\"\n    echo \"\"\n    echo \"Common parameters:\"\n    echo \"\"\n    echo \"  -h,--help            Show this screen and exit\"\n    echo \"\"\n    echo \"Optional parameters:\"\n    echo \"\"\n    echo \"  -a,--abis=LIST       List of ABIs to check for\"\n    echo \"                       [$ABIS]\"\n    echo \"\"\n}\n\nspaces_to_commas()\n{\n    echo \"$@\" | sed 's,  *, ,g' | tr ' ' ','\n}\n\ncommas_to_spaces()\n{\n    echo \"$@\" | tr ',' ' '\n}\n\nwhile [ -n \"$1\" ]; do\n    arg=$1\n    shift\n    argval=$(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n    case $arg in\n        -h|--help)\n            usage\n            exit 0\n            ;;\n        -a|--abis)\n            ABIS=$(spaces_to_commas $1)\n            shift\n            ;;\n        --abis=*)\n            ABIS=$(spaces_to_commas $argval)\n            ;;\n        *)\n            usage 1>&2\n            exit 1\n    esac\ndone\n\nGCC_VERSION=6\n\nSKIP=\"\"\n\nSKIP=\"$SKIP \\\n    _Z16__libc_init_vdsov  \\\n    getauxval              \\\n    mallinfo               \\\n    \"\n\nSKIP=\"$SKIP                \\\n    __atomic_cmpxchg       \\\n    __atomic_dec           \\\n    __atomic_inc           \\\n    __atomic_swap          \\\n    \"\n\nSKIP=\"$SKIP                \\\n    _tolower_tab_          \\\n    _toupper_tab_          \\\n    isalnum_l              \\\n    isalpha_l              \\\n    isblank_l              \\\n    iscntrl_l              \\\n    isdigit_l              \\\n    isgraph_l              \\\n    islower_l              \\\n    isprint_l              \\\n    ispunct_l              \\\n    isspace_l              \\\n    isupper_l              \\\n    iswalnum_l             \\\n    iswalpha_l             \\\n    iswblank_l             \\\n    iswcntrl_l             \\\n    iswdigit_l             \\\n    iswgraph_l             \\\n    iswlower_l             \\\n    iswprint_l             \\\n    iswpunct_l             \\\n    iswspace_l             \\\n    iswupper_l             \\\n    iswxdigit_l            \\\n    isxdigit_l             \\\n    tolower_l              \\\n    toupper_l              \\\n    towlower_l             \\\n    towupper_l             \\\n    \"\n\nSKIP=\"$SKIP                \\\n    __ctype_get_mb_cur_max \\\n    __open                 \\\n    __page_shift           \\\n    __page_size            \\\n    _ctype_                \\\n    _tolower               \\\n    _toupper               \\\n    dlmalloc_usable_size   \\\n    \"\n\nSKIP_arm=\"                 \\\n    __aeabi_cfcmpeq        \\\n    __aeabi_cfcmple        \\\n    __aeabi_cfrcmple       \\\n    __aeabi_d2uiz          \\\n    __aeabi_fcmpeq         \\\n    __aeabi_fcmpge         \\\n    __aeabi_fcmpgt         \\\n    __aeabi_fcmple         \\\n    __aeabi_fcmplt         \\\n    __cmpsf2               \\\n    __eqsf2                \\\n    __fixunsdfsi           \\\n    __gesf2                \\\n    __gtsf2                \\\n    __lesf2                \\\n    __ltsf2                \\\n    __nesf2                \\\n    \"\n\nSKIP_mips=\"                \\\n    __fixdfdi              \\\n    __fixsfdi              \\\n    __fixunsdfdi           \\\n    __fixunssfdi           \\\n    _memset16              \\\n    _memset32              \\\n    \"\n\nSKIP_x86=\"                 \\\n    __popcount_tab         \\\n    \"\n\nSKIP_arm64=\"               \\\n    \"\n\nSKIP_mips64=\"              \\\n    \"\n\nSKIP_x86_64=\"              \\\n    _Znam                  \\\n    _ZnamRKSt9nothrow_t    \\\n    _Znwm                  \\\n    _ZnwmRKSt9nothrow_t    \\\n    \"\n\nMYDIR=$(cd $(dirname $0) 2>/dev/null && pwd)\nTOPDIR=$(cd $MYDIR/.. 2>/dev/null && pwd)\nNDK=$(cd $TOPDIR/../.. 2>/dev/null && pwd)\nDEVELOPMENT=$(cd $NDK/../development 2>/dev/null && pwd)\n\nerror()\n{\n    echo \"*** ERROR: $@\" 1>&2\n}\n\nif [ -z \"$MYDIR\" -o -z \"$TOPDIR\" -o -z \"$NDK\" -o -z \"$DEVELOPMENT\" ]; then\n    error \"Can't detect NDK and Development directories\"\nfi\n\nHOST_TAG=$(uname -s | tr '[A-Z]' '[a-z]')-$(uname -m)\ncase $HOST_TAG in\n    linux-x86_64|darwin-x86_64)\n        ;;\n    *)\n        error \"Unsupported host: '$HOST_TAG'\"\n        exit 1\nesac\n\nUSYMS=\"\"\n\nreset_undefined()\n{\n    USYMS=\"\"\n}\n\n# $1: symbol\nmark_as_undefined()\n{\n    local sym=$1\n    if [ -z \"$sym\" ]; then\n        error \"Usage: mark_as_undefined symbol\"\n        exit 1\n    fi\n\n    if [ -z \"$USYMS\" ]; then\n        USYMS=\"$sym\"\n    else\n        USYMS=\"$USYMS $sym\"\n    fi\n}\n\nreport_undefined()\n{\n    local lib=$1\n    if [ -z \"$lib\" ]; then\n        error \"Usage: report_undefined libfile\"\n        exit 1\n    fi\n    if [ -n \"$USYMS\" ]; then\n        local usyms=$(echo \"$USYMS\" | tr ' ' '\\n' | sort | uniq)\n\n        echo \"*** These symbols are missing in $lib:\"\n        echo \"$usyms\"\n        echo \"*** TOTAL $(echo \"$usyms\" | wc -l) undefined symbols!\"\n    fi\n}\n\nrequired_symbols()\n{\n    local ARCH=$1\n    if [ -z \"$ARCH\" ]; then\n        error \"Usage: required_symbols arch\"\n        exit 1\n    fi\n\n    local APILEVELS=$(ls -1 $DEVELOPMENT/ndk/platforms/ | \\\n        grep '^android-[0-9][0-9]*$' | \\\n        sed 's,^android-,,g' | \\\n        sort -n | \\\n        tail -n 1)\n\n    {\n        local lib\n        for lib in libc libm libstdc++; do\n            local apilevel\n            for apilevel in $APILEVELS; do\n                cat $DEVELOPMENT/ndk/platforms/android-${apilevel}/arch-$ARCH/symbols/${lib}.so.*.txt 2>/dev/null\n            done\n        done\n    } | sort | uniq\n}\n\n# $1: ABI\ncheck_abi()\n{\n    local libcrystax\n    for libcrystax in $(find $TOPDIR/libs/$ABI -name 'libcrystax.so' -print); do\n        local ABI=$1\n        case $ABI in\n            mips64)\n                case $(basename $(dirname $libcrystax)) in\n                    lib32*)\n                        ABI=mips\n                esac\n                ;;\n            x86_64)\n                case $(basename $(dirname $libcrystax)) in\n                    32)\n                        ABI=x86\n                esac\n                ;;\n        esac\n\n        local ARCH\n        case $ABI in\n            armeabi*)\n                ARCH=arm\n                ;;\n            arm64*)\n                ARCH=arm64\n                ;;\n            mips|mips64|x86|x86_64)\n                ARCH=$ABI\n                ;;\n            *)\n                error \"Unsupported ABI: '$ABI'\"\n                return 1\n        esac\n\n        local TCNAME\n        case $ABI in\n            armeabi*)\n                TCNAME=arm-linux-androideabi\n                ;;\n            arm64*)\n                TCNAME=aarch64-linux-android\n                ;;\n            mips)\n                TCNAME=mipsel-linux-android\n                ;;\n            mips64)\n                TCNAME=mips64el-linux-android\n                ;;\n            x86)\n                TCNAME=x86\n                ;;\n            x86_64)\n                TCNAME=x86_64\n        esac\n\n        local TCPREFIX\n        case $ABI in\n            x86)\n                TCPREFIX=i686-linux-android\n                ;;\n            x86_64)\n                TCPREFIX=x86_64-linux-android\n                ;;\n            *)\n                TCPREFIX=$TCNAME\n        esac\n\n        if [ -z \"$TCNAME\" -o -z \"$TCPREFIX\" ]; then\n            error \"Can't detect toolchain for ABI '$ABI'\"\n            return 1\n        fi\n\n        local NM=$NDK/toolchains/${TCNAME}-${GCC_VERSION}/prebuilt/$HOST_TAG/bin/${TCPREFIX}-nm\n\n        local lcsyms=$($NM $libcrystax | grep -v \"^\\s*U\\>\" | awk '{print $3}')\n\n        reset_undefined\n\n        local sym\n        for sym in $(required_symbols $ARCH); do\n            echo \"$lcsyms\" | grep -q -x -e \"$sym\" && continue\n\n            skip=no\n            for ssym in $SKIP $(eval echo \\$SKIP_${ARCH}); do\n                if [ \"$sym\" = \"$ssym\" ]; then\n                    skip=yes\n                    break\n                fi\n            done\n            test \"$skip\" = \"yes\" && continue\n\n            mark_as_undefined $sym\n        done\n\n        if [ -n \"$USYMS\" ]; then\n            report_undefined $libcrystax\n            return 1\n        fi\n    done\n}\n\nfor ABI in $(commas_to_spaces $ABIS); do\n    echo \"## CHECK ABI '$ABI'\"\n    check_abi $ABI || exit 1\ndone\n"
  },
  {
    "path": "sources/crystax/bin/config",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015, 2018 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ncd $(dirname $0)/.. || exit 1\n\nif [ -z \"$CRYSTAX_DEBUG\" ]; then\n    CRYSTAX_DEBUG=no\nfi\n\nCRYSTAX_SRCDIR=$(pwd)\n\ndefault_gcc_version()\n{\n    #local version=$(source $NDK/build/tools/dev-defaults.sh && echo $DEFAULT_GCC_VERSION)\n    local version=4.9\n    if [ -z \"$version\" ]; then\n        echo \"ERROR: Can't detect default GCC version\" 1>&2\n        exit 1\n    fi\n    echo $version\n}\n\nREQUEST=\nABI=\nMULTILIB=\nLIBTYPE=static\nNDK=$(cd ../../ && pwd)\nSOURCE_FILE=\n\nTOOLCHAIN=gcc$(default_gcc_version)\n\nusage()\n{\n    echo \"Usage: $0 [options]\"\n    echo \"\"\n    echo \"Request (mandatory, should be specified only one of them):\"\n    echo \"  --default-gcc-version    Print default GCC version\"\n    echo \"  --abis                   Print all ABI variants\"\n    echo \"  --multilibs              Print multilibs variants for specific ABI\"\n    echo \"  --sources                Print all source files\"\n    echo \"  --abiflags               Print flags used for choosing target ABI\"\n    echo \"  --cflags                 Print flags for C compiler\"\n    echo \"  --c++flags               Print flags for C++ compiler\"\n    echo \"  --asmflags               Print flags for ASM compiler\"\n    echo \"  --ldflags                Print flags for linker\"\n    echo \"  --libpath                Print path to libraries\"\n    echo \"                           for specified ABI and multilib variant\"\n    echo \"  --sysroot-libpath        The same as above, but print library path\"\n    echo \"                           used in platforms sysroot\"\n    echo \"\"\n    echo \"Parameters (mandatory):\"\n    echo \"  --abi=ABI                Target ABI (armeabi, armeabi-v7a etc)\"\n    echo \"\"\n    echo \"Parameters (optional):\"\n    echo \"  --ndk=DIR                Path to NDK directory [$NDK]\"\n    echo \"  --multilib=MLIB          Specific multilib variant\"\n    echo \"                           If not specified, default one for ABI will be used\"\n    echo \"  --libtype=static|shared  Type of library to be built [$LIBTYPE]\"\n    echo \"  --toolchain=TOOLCHAIN    Toolchain used to build libcrystax [$TOOLCHAIN]\"\n    echo \"  --source-file=PATH       If specified, print flags specific to this file\"\n}\n\nis_debug_mode()\n{\n    echo $CRYSTAX_DEBUG | grep -iq \"^\\(yes\\|on\\|true\\|1\\)$\"\n}\n\nall_abis()\n{\n    echo \"armeabi\"\n    echo \"armeabi-v7a\"\n    echo \"armeabi-v7a-hard\"\n    echo \"x86\"\n    echo \"mips\"\n    echo \"arm64-v8a\"\n    echo \"x86_64\"\n    echo \"mips64\"\n}\n\n# $1: ABI\nmultilibs_for_abi()\n{\n    local a=$1\n    if [ -z \"$a\" ]; then\n        echo \"ERROR: Usage: multilibs_for_abi ABI\" 1>&2\n        exit 1\n    fi\n\n    # First is always default one\n    case $a in\n        armeabi*)\n            echo \"thumb\"\n            echo \"arm\"\n            ;;\n        arm64-v8a)\n            echo \"aarch64\"\n            ;;\n        x86)\n            echo \"i386\"\n            ;;\n        x86_64)\n            echo \"x86_64 i386 x32\"\n            ;;\n        mips)\n            echo \"mips32 mips32r2 mips32r6\"\n            ;;\n        mips64)\n            echo \"mips64r6 mips64r2 mips32 mips32r2 mips32r6\"\n            ;;\n        *)\n            echo \"ERROR: Unknown target ABI: $a\" 1>&2\n            exit 1\n    esac\n}\n\n# $1: ABI\ncheck_abi()\n{\n    local abi=$1\n    if [ -z \"$abi\" ]; then\n        echo \"ERROR: Usage: check_abi ABI\" 1>&2\n        exit 1\n    fi\n\n    all_abis | tr ' ' '\\n' | grep -q \"^$abi$\"\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: ABI '$abi' not supported\" 1>&2\n        exit 1\n    fi\n}\n\n# $1: ABI\n# $2: multilib variant\ncheck_multilib()\n{\n    local abi=$1\n    local mlib=$2\n    if [ -z \"$abi\" -o -z \"$mlib\" ]; then\n        echo \"ERROR: Usage: check_multilib ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    multilibs_for_abi $abi | tr ' ' '\\n' | grep -q \"^$mlib$\"\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: '$mlib' is wrong multilib variant for ABI '$abi'\" 1>&2\n        exit 1\n    fi\n}\n\n# $1: ABI\n# $2: multilib variant\narch_for_abi()\n{\n    local a=$1\n    local m=$2\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage arch_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    local arch=\"\"\n    case $a in\n        armeabi*)\n            arch=arm\n            ;;\n        arm64*)\n            arch=arm64\n            ;;\n        x86)\n            arch=x86\n            ;;\n        x86_64)\n            case $m in\n                i386)\n                    arch=x86\n                    ;;\n                *)\n                    arch=x86_64\n            esac\n            ;;\n        mips)\n            arch=mips\n            ;;\n        mips64)\n            case $m in\n                mips32*)\n                    arch=mips\n                    ;;\n                *)\n                    arch=mips64\n            esac\n            ;;\n        *)\n            echo \"ERROR: Unsupported ABI: '$a'\" 1>&2\n            exit 1\n    esac\n\n    echo $arch\n}\n\n# $1: ABI\n# $2: multilib variant\n# $3: libtype (static or shared)\nsources_for_abi()\n{\n    local a=$1\n    local m=$2\n    local t=$3\n    if [ -z \"$a\" -o -z \"$m\" -o -z \"$t\" ]; then\n        echo \"ERROR: Usage: sources_for_abi ABI MULTILIB LIBTYPE\" 1>&2\n        exit 1\n    fi\n\n    # Own sources\n    find src -name '*.c'   -print | sort\n    find src -name '*.cpp' -print | sort\n\n    # Generated sources\n    find gen -name '*.c' \\\n        -a -not -name 'mangled-*' \\\n        -a -not -name 'exidx_dynamic.c' \\\n        -a -not -name 'exidx_static.c' \\\n        -print | sort\n\n    find gen -name '*.cpp' \\\n        -a -not -name 'mangled-*' \\\n        -a -not -name 'dl_iterate_phdr_static.cpp' \\\n        -a -not -name 'libc_init_dynamic.cpp' \\\n        -a -not -name 'libc_init_static.cpp' \\\n        -a -not -name 'malloc_debug_common.cpp' \\\n        -a -not -name 'malloc_debug_dynamic.cpp' \\\n        -a -not -name 'malloc_debug_static.cpp' \\\n        -print | sort\n\n    case $t in\n        shared)\n            find gen -name 'exidx_dynamic.c' -print\n            find gen -name 'libc_init_dynamic.cpp' -print\n            find gen -name 'malloc_debug_dynamic.cpp' -print\n            ;;\n        static)\n            find gen -name 'dl_iterate_phdr_static.cpp' -print\n            find gen -name 'exidx_static.c' -print\n            find gen -name 'libc_init_static.cpp' -print\n            find gen -name 'malloc_debug_static.cpp' -print\n            ;;\n    esac\n\n    local arch=$(arch_for_abi $a $m)\n\n    # Generated assembler sources\n    find gen/bionic/libc/arch-$arch -iname '*.s' -a -not -name 'mangled-*' -print | sort\n    if [ \"$arch\" = \"mips64\" ]; then\n        find gen/bionic/libc/arch-mips -iname 'setjmp.s' -print\n    fi\n    find gen/bionic/libc/arch-common -iname '*.s' -a -not -name 'mangled-*' -print | sort\n\n    # Objective-C blocks runtime\n    if [ -d vendor/compiler-rt/lib/BlocksRuntime ]; then\n        find vendor/compiler-rt/lib/BlocksRuntime -name '*.c' -print\n    fi\n}\n\n# $1: ABI\n# $2: multilib variant\narch_flags_for_abi()\n{\n    local abi=$1\n    local mlib=$2\n\n    if [ -z \"$abi\" -o -z \"$mlib\" ]; then\n        echo \"ERROR: Usage arch_flags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    check_abi $abi\n    check_multilib $abi $mlib\n\n    case $mlib in\n        arm|thumb)\n            case $abi in\n                armeabi)\n                    echo \"-march=armv5te -mtune=xscale -msoft-float\"\n                    ;;\n                armeabi-v7a)\n                    echo \"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp\"\n                    ;;\n                armeabi-v7a-hard)\n                    echo \"-march=armv7-a -mfpu=vfpv3-d16 -mhard-float\"\n                    ;;\n            esac\n            if [ \"$mlib\" = \"thumb\" ]; then\n                echo \"-mthumb\"\n                if [ ${TOOLCHAIN##gcc} != ${TOOLCHAIN} ]; then\n                    echo \"-minline-thumb1-jumptable\"\n                fi\n            fi\n            ;;\n        aarch64)\n            echo \"\"\n            ;;\n        i386)\n            echo \"-m32\"\n            ;;\n        x86_64)\n            echo \"-m64\"\n            ;;\n        x32)\n            echo \"-mx32\"\n            ;;\n        mips32)\n            echo \"-mabi=32 -mips32\"\n            ;;\n        mips32r2)\n            echo \"-mabi=32 -mips32r2\"\n            ;;\n        mips32r6)\n            echo \"-mabi=32 -mips32r6\"\n            ;;\n        mips64r6)\n            echo \"-mabi=64 -mips64r6\"\n            ;;\n        mips64r2)\n            echo \"-mabi=64 -mips64r2\"\n            ;;\n        *)\n            echo \"ERROR: Unsupported multilib variant: '$mlib'\" 1>&2\n            exit 1\n    esac\n}\n\n# $1: ABI\n# $2: multilib variant\n# $3: source file (optional)\ncommon_cflags_for_abi()\n{\n    local abi mlib srcfile\n    local flags crystax freebsd\n\n    abi=$1\n    mlib=$2\n    srcfile=$3\n\n    if [ -z \"$abi\" -o -z \"$mlib\" ]; then\n        echo \"ERROR: Usage: common_cflags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    local srcbasename=\"\"\n    if [ -n \"$srcfile\" ]; then\n        srcbasename=$(basename $srcfile)\n    fi\n\n    crystax=$CRYSTAX_SRCDIR\n    freebsd=$CRYSTAX_SRCDIR/gen/freebsd\n    bionic=$CRYSTAX_SRCDIR/gen/bionic\n    systemcore=$CRYSTAX_SRCDIR/gen/systemcore\n    cxx=$CRYSTAX_SRCDIR/../cxx-stl/system\n\n    local arch=$(arch_for_abi $abi $mlib)\n\n    local archflags=$(arch_flags_for_abi $abi $mlib)\n    case $srcbasename in\n        tls.c)\n            # These files can't be compiled in Thumb mode\n            archflags=$(echo $archflags | tr ' ' '\\n' | grep -v -e '^-mthumb')\n    esac\n    echo $archflags\n\n    echo \"-fPIC -DPIC\"\n    echo \"-g\"\n\n    if is_debug_mode; then\n        echo \"-O0\"\n        echo \"-D_DEBUG\"\n        echo \"-DDEBUG\"\n        echo \"-D__CRYSTAX_DEBUG=1\"\n    else\n        echo \"-O2\"\n        echo \"-DNDEBUG\"\n    fi\n\n    echo \"-DCRYSTAX_LOG_DEFINE_SHORT_MACROS=1\"\n\n    case $srcfile in\n        gen/bionic/*)\n            echo \"-DUSE_JEMALLOC\"\n\n            echo \"-D_LIBC=1\"\n            echo \"-DDO_PTHREADS=1\"\n\n            # dns\n            echo \"-Dres_randomid=__res_randomid\"\n            echo \"-DANDROID_CHANGES\"\n            echo \"-DINET6\"\n\n            # tzcode\n            echo \"-DALL_STATE\"\n            echo \"-DSTD_INSPIRED\"\n            echo \"-DTM_GMTOFF=tm_gmtoff\"\n            echo '-DTZDIR=\\\"/system/usr/share/zoneinfo\\\"'\n            echo \"-DUSG_COMPAT=1\"\n            echo \"-DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU\"\n            echo \"-DTM_ZONE=tm_zone\"\n            echo \"-Dlint\"\n\n            case $arch in\n                arm)\n                    echo \"-DCRT_LEGACY_WORKAROUND\"\n                    ;;\n            esac\n            ;;\n    esac\n\n    case $srcbasename in\n        libc_init_static.cpp)\n            echo \"-DLIBC_STATIC=1\"\n            ;;\n    esac\n\n    echo \"-D_POSIX_SOURCE\"\n    echo \"-D_BSD_SOURCE\"\n    echo \"-DREPLACE_GETOPT\"\n\n    echo \"-D__DBINTERFACE_PRIVATE\"\n\n    case $srcbasename in\n        __stack_chk_fail.cpp)\n            echo \"-fno-stack-protector\"\n            ;;\n    esac\n    echo \"-ffunction-sections -fdata-sections\"\n    echo \"-fdiagnostics-show-option\"\n\n    # This is to workaround GCC \"(long)fn -> lfn\" optimization bug.\n    # See https://android-review.googlesource.com/#/c/96345/ for details.\n    echo \"-fno-builtin-rint\"\n    echo \"-fno-builtin-rintf\"\n    echo \"-fno-builtin-rintl\"\n\n    echo \"-Wall -Wextra\"\n    #echo \"-Wunused\"\n    #echo \"-Wframe-larger-than=2048\"\n    echo \"-Werror\"\n    if   [ ${TOOLCHAIN##gcc}   != ${TOOLCHAIN} ]; then\n        echo \"-Wno-pragmas\"\n    elif [ ${TOOLCHAIN##clang} != ${TOOLCHAIN} ]; then\n        echo \"-Wno-unknown-pragmas\"\n    fi\n\n    echo \"-I$crystax/include\"\n    echo \"-I$crystax/src/include\"\n\n    echo \"-I$bionic/libc/include\"\n    echo \"-I$bionic/libc/bionic\"\n    echo \"-I$bionic/libc/dns/include\"\n    echo \"-I$bionic/libc/tzcode\"\n    echo \"-I$bionic/libc/upstream-netbsd/android/include\"\n    echo \"-I$bionic/libc/upstream-netbsd/lib/libc/include\"\n    echo \"-I$bionic/libc/private\"\n    echo \"-I$bionic/libc\"\n    echo \"-I$systemcore/include\"\n\n    echo \"-I$freebsd/contrib/gdtoa\"\n    echo \"-I$freebsd/contrib/jemalloc/include\"\n    echo \"-I$freebsd/contrib/libc-vis\"\n    echo \"-I$freebsd/lib/libc/iconv\"\n    echo \"-I$freebsd/lib/libc/include\"\n    echo \"-I$freebsd/lib/libc/locale\"\n    echo \"-I$freebsd/lib/libc/stdio\"\n    echo \"-I$freebsd/lib/libc/stdlib\"\n    echo \"-I$freebsd/lib/libc/stdtime\"\n\n    echo \"-I$freebsd/lib/msun/src\"\n    if [ \"${abi%%64*}\" != \"{abi}\" ]; then\n        echo \"-I$freebsd/lib/msun/ld128\"\n    fi\n\n    local bsdarch\n    case $arch in\n        x86)\n            bsdarch=i386\n            ;;\n        x86_64)\n            bsdarch=amd64\n            ;;\n        *)\n            bsdarch=$arch\n    esac\n\n    if [ -n \"$bsdarch\" ]; then\n        echo \"-I$freebsd/lib/libc/$bsdarch\"\n    fi\n\n    echo \"-I$cxx/include\"\n}\n\n# $1: ABI\n# $2: multilib variant\n# $3: source file (optional)\ncflags_for_abi()\n{\n    local a=$1\n    local m=$2\n    local s=$3\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: cflags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    echo \"-std=c11\"\n    common_cflags_for_abi $a $m $s\n}\n\n# $1: ABI\n# $2: multilib variant\n# $3: source file (optional)\ncxxflags_for_abi()\n{\n    local a=$1\n    local m=$2\n    local s=$3\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: cxxflags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n    echo \"-std=c++11 -fuse-cxa-atexit -fno-exceptions -fno-rtti\"\n    common_cflags_for_abi $a $m $s\n}\n\n# $1: ABI\n# $2: multilib variant\n# $3: source file (optional)\nasmflags_for_abi()\n{\n    local a=$1\n    local m=$2\n    local s=$3\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: asmflags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    local bionic=$CRYSTAX_SRCDIR/gen/bionic\n\n    arch_flags_for_abi $a $m\n    echo \"-O2\"\n\n    local arch=$(arch_for_abi $a $m)\n    case $arch in\n        arm|x86|mips)\n            echo \"-DPLATFORM_SDK_VERSION=9\"\n            ;;\n        arm64|x86_64|mips64)\n            echo \"-DPLATFORM_SDK_VERSION=21\"\n            ;;\n    esac\n\n    echo \"-I$bionic/libc/arch-$arch/include\"\n    echo \"-I$bionic/libc\"\n}\n\n# $1: ABI\n# $2: multilib variant\nldflags_for_abi()\n{\n    local a=$1\n    local m=$2\n    if [ -z \"$2\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: ldflags_for_abi ABI MULTILIB\" 1>&2\n        exit 1\n    fi\n\n    case $a in\n        armeabi-v7a*)\n            echo \"-Wl,--fix-cortex-a8\"\n            ;;\n    esac\n\n    #echo \"-Wl,--hash-style=both\"\n\n    echo \"-Wl,--no-undefined\"\n    echo \"-Wl,-z,noexecstack\"\n    echo \"-Wl,-z,relro\"\n    echo \"-Wl,-z,now\"\n    # Android dynamic linker doesn't support DF_1_INTERPOSE and DF_1_NODELETE ELF flags\n    #echo \"-Wl,-z,interpose\"\n    #echo \"-Wl,-z,nodelete\"\n\n    echo \"-Wl,-Bstatic,-lgcc\"\n}\n\n# $1: ABI\n# $2: multilib variant\nlibpath_for_abi()\n{\n    local a=$1\n    local m=$2\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: libpath_for_abi ABI MULTILIB\"\n        exit 1\n    fi\n\n    check_abi $a\n    check_multilib $a $m\n\n    local p\n\n    case $m in\n        arm|thumb)\n            case $a in\n                armeabi)\n                    p=\"libs/armeabi\"\n                    ;;\n                armeabi-v7a)\n                    p=\"libs/armeabi-v7a\"\n                    ;;\n                armeabi-v7a-hard)\n                    p=\"libs/armeabi-v7a-hard\"\n                    ;;\n            esac\n            if [ \"$m\" = \"thumb\" ]; then\n                p=\"$p/thumb\"\n            fi\n            ;;\n        aarch64)\n            p=\"libs/arm64-v8a\"\n            ;;\n        i386)\n            case $a in\n                x86)\n                    p=\"libs/x86\"\n                    ;;\n                x86_64)\n                    p=\"libs/x86_64/32\"\n                    ;;\n            esac\n            ;;\n        x86_64)\n            p=\"libs/x86_64\"\n            ;;\n        x32)\n            p=\"libs/x86_64/x32\"\n            ;;\n        mips32)\n            case $a in\n                mips)\n                    p=\"libs/mips\"\n                    ;;\n                mips64)\n                    p=\"libs/mips64/lib32\"\n                    ;;\n            esac\n            ;;\n        mips32r2)\n            case $a in\n                mips)\n                    p=\"libs/mips/r2\"\n                    ;;\n                mips64)\n                    p=\"libs/mips64/lib32r2\"\n                    ;;\n            esac\n            ;;\n        mips32r6)\n            case $a in\n                mips)\n                    p=\"libs/mips/r6\"\n                    ;;\n                mips64)\n                    p=\"libs/mips64/lib32r6\"\n                    ;;\n            esac\n            ;;\n        mips64r6)\n            p=\"libs/mips64\"\n            ;;\n        mips64r2)\n            p=\"libs/mips64/r2\"\n            ;;\n        *)\n            echo \"ERROR: Unsupported multilib variant: $m\" 1>&2\n            exit 1\n    esac\n\n    echo \"$p\"\n}\n\n# $1: ABI\n# $2: multilib variant\nsysroot_libpath_for_abi()\n{\n    local a=$1\n    local m=$2\n    if [ -z \"$a\" -o -z \"$m\" ]; then\n        echo \"ERROR: Usage: sysroot_libpath_for_abi ABI MULTILIB\"\n        exit 1\n    fi\n\n    check_abi $a\n    check_multilib $a $m\n\n    case $m in\n        x86_64|mips64r6)\n            echo \"lib64\"\n            ;;\n        x32)\n            echo \"libx32\"\n            ;;\n        mips32r2)\n            echo \"libr2\"\n            ;;\n        mips32r6)\n            echo \"libr6\"\n            ;;\n        mips64r2)\n            echo \"lib64r2\"\n            ;;\n        *)\n            echo \"lib\"\n    esac\n}\n\nset_request()\n{\n    local newval=$1\n    if [ -n \"$REQUEST\" ]; then\n        echo \"ERROR: 'request' specified twice (first: $REQUEST)\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\n    REQUEST=$newval\n}\n\nset_abi()\n{\n    local newval=$1\n    if [ -n \"$ABI\" -a \"$ABI\" != \"$newval\" ]; then\n        echo \"ERROR: ABI specified twice (first: $ABI)\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\n    check_abi $newval\n    ABI=$newval\n}\n\nset_multilib()\n{\n    local newval=$1\n    if [ -z \"$newval\" ]; then\n        echo \"ERROR: empty 'multilib' passed\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\n    if [ -n \"$MULTILIB\" -a \"$MULTILIB\" != \"$newval\" ]; then\n        echo \"ERROR: 'multilib' specified twice (first: $MULTILIB)\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\n    if [ -n \"$ABI\" ]; then\n        check_multilib $ABI $newval\n    fi\n    MULTILIB=$newval\n}\n\nset_ndkdir()\n{\n    local newval=$1\n    if [ ! -d $newval -o ! -d $newval/platforms ]; then\n        echo \"ERROR: Wrong NDK path: $newval\" 1>&2\n        exit 1\n    fi\n    NDK=$newval\n}\n\nset_libtype()\n{\n    local newval=$1\n    case $newval in\n        static|shared)\n            LIBTYPE=$newval\n            ;;\n        *)\n            echo \"ERROR: Wrong 'libtype': $newval\" 1>&2\n            usage 1>&2\n            exit 1\n    esac\n}\n\nset_toolchain()\n{\n    local newval=$1\n    case $newval in\n        gcc*|clang*)\n            TOOLCHAIN=$newval\n            ;;\n        *)\n            echo \"ERROR: Wrong 'toolchain': $newval\" 1>&2\n            usage 1>&2\n            exit 1\n    esac\n}\n\nset_source_file()\n{\n    local newval=$1\n    if [ -z \"$newval\" ]; then\n        echo \"ERROR: Empty value passed to set_source_file\" 1>&2\n        exit 1\n    fi\n    if [ ! -f $newval ]; then\n        echo \"ERROR: Wrong source file path: $newval\" 1>&2\n        exit 1\n    fi\n    if [ -n \"$SOURCE_FILE\" -a \"$SOURCE_FILE\" != \"$newval\" ]; then\n        echo \"ERROR: 'source' specified twice (first: $SOURCE_FILE)\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\n    SOURCE_FILE=$newval\n}\n\nwhile [ \"x$1\" != \"x\" ]; do\n    arg=$1\n    shift\n    case $arg in\n        -h|-help|--help)\n            usage\n            exit 0\n            ;;\n        --abis|--multilibs|--sources|--abiflags|--cflags|--c++flags|--asmflags|\\\n            --ldflags|--libpath|--sysroot-libpath|--default-gcc-version)\n            set_request $(expr \"x$arg\" : \"^x--\\(.*\\)$\")\n            ;;\n        --abi)\n            set_abi $1\n            shift\n            ;;\n        --abi=*)\n            set_abi $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        --multilib)\n            set_multilib $1\n            shift\n            ;;\n        --multilib=*)\n            set_multilib $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        --ndk)\n            set_ndkdir $1\n            shift\n            ;;\n        --ndk=*)\n            set_ndkdir $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        --libtype)\n            set_libtype $1\n            shift\n            ;;\n        --libtype=*)\n            set_libtype $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        --toolchain)\n            set_toolchain $1\n            shift\n            ;;\n        --toolchain=*)\n            set_toolchain $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        --source-file)\n            set_source_file $1\n            shift\n            ;;\n        --source-file=*)\n            set_source_file $(expr \"x$arg\" : \"^x--[^=]*=\\(.*\\)$\")\n            ;;\n        *)\n            echo \"ERROR: Unknown option: $arg\" 1>&2\n            usage 1>&2\n            exit 1\n    esac\ndone\n\nif [ -z \"$REQUEST\" ]; then\n    echo \"ERROR: 'request' not specified\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nif [ -z \"$ABI\" -a \"$REQUEST\" != \"abis\" -a \"$REQUEST\" != \"default-gcc-version\" ]; then\n    echo \"ERROR: ABI not specified\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nif [ \"$REQUEST\" = \"abis\" -a -n \"$ABI\" ]; then\n    echo \"ERROR: Parameter --abi=ABI shouldn't be specified when requesting list of ABI\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nif [ \"$REQUEST\" = \"default-gcc-version\" -a -n \"$ABI\" ]; then\n    echo \"ERROR: Parameter --abi=ABI shouldn't be specified when requesting default GCC version\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nif [ -z \"$MULTILIB\" -a \"$REQUEST\" != \"default-gcc-version\" -a \"$REQUEST\" != \"abis\" -a \"$REQUEST\" != \"multilibs\" ]; then\n    all_multilibs=$(multilibs_for_abi $ABI)\n    if [ $(echo $all_multilibs | wc -w) -gt 1 ]; then\n        MULTILIB=$(echo $all_multilibs | tr ' ' '\\n' | head -n 1)\n        #echo \"WARNING: 'multilib' not specified; using default one [$MULTILIB]\" 1>&2\n    else\n        MULTILIB=$all_multilibs\n    fi\nfi\n\nif [ \"$REQUEST\" = \"multilibs\" -a -n \"$MULTILIB\" ]; then\n    echo \"ERROR: Parameter --multilib=M shouldn't be specified when requesting list of multilibs\" 1>&2\n    usage 1>&2\n    exit 1\nfi\n\nif [ \"$REQUEST\" = \"abiflags\" ]; then\n    if [ -z \"$ABI\" -o -z \"$MULTILIB\" ]; then\n        echo \"ERROR: Both --abi=ABI and --multilib=MLIB should be specified for 'abiflags' request\" 1>&2\n        usage 1>&2\n        exit 1\n    fi\nfi\n\ncase $REQUEST in\n    default-gcc-version)\n        default_gcc_version\n        ;;\n    abis)\n        all_abis\n        ;;\n    multilibs)\n        multilibs_for_abi $ABI\n        ;;\n    sources)\n        sources_for_abi $ABI $MULTILIB $LIBTYPE\n        ;;\n    abiflags)\n        arch_flags_for_abi $ABI $MULTILIB\n        ;;\n    cflags)\n        cflags_for_abi $ABI $MULTILIB $SOURCE_FILE\n        ;;\n    c++flags)\n        cxxflags_for_abi $ABI $MULTILIB $SOURCE_FILE\n        ;;\n    asmflags)\n        asmflags_for_abi $ABI $MULTILIB $SOURCE_FILE\n        ;;\n    ldflags)\n        ldflags_for_abi $ABI $MULTILIB\n        ;;\n    libpath)\n        libpath_for_abi $ABI $MULTILIB\n        ;;\n    sysroot-libpath)\n        sysroot_libpath_for_abi $ABI $MULTILIB\n        ;;\n    *)\n        echo \"ERROR: Unsupported request: $REQUEST\"\n        exit 1\nesac\n"
  },
  {
    "path": "sources/crystax/bin/gen-arith",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ncd $(dirname $0)/.. || exit 1\nMYDIR=$(pwd)\nNDK=$(cd ../.. && pwd)\n\nTMPDIR=/tmp/gen-arith-$USER-$$\nDTMPDIR=/data/local/tmp/$(basename $TMPDIR)\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\nupcase()\n{\n    echo \"$@\" | tr '[a-z]' '[A-Z]'\n}\n\ndowncase()\n{\n    echo \"$@\" | tr '[A-Z]' '[a-z]'\n}\n\nadbdevices()\n{\n    adb devices | sed '1d' | grep -v '^$' | grep \"\\<device$\" | awk -F '\\t' '{print $1}'\n}\n\nadbpush()\n{\n    run adb push \"$@\"\n}\n\nadbshell()\n{\n    run adb shell \"$@\"\n}\n\ncleanup()\n{\n    rm -Rf $TMPDIR\n    adbdevices | {\n        while read DEVICE; do\n            ANDROID_SERIAL=\"$DEVICE\" adb shell \"rm -r $DTMPDIR 2>/dev/null\"\n        done\n    }\n}\n\nlicense()\n{\n    echo \"/*\"\n    cat $MYDIR/LICENSE | sed 's/^/ \\* /' | sed 's/ *$//'\n    echo \" */\"\n    echo \"\"\n}\n\nchecksum()\n{\n    echo \"$@\" | openssl sha256 | awk '{print $2}'\n}\n\ntrap \"cleanup\" EXIT INT QUIT TERM ABRT\n\nARITHCHK=$MYDIR/vendor/freebsd/contrib/gdtoa/arithchk.c\nQNAN=$MYDIR/vendor/freebsd/contrib/gdtoa/qnan.c\n\nif [ ! -f $ARITHCHK ]; then\n    echo \"ERROR: File '$ARITHCHK' not found\" 1>&2\n    exit 1\nfi\n\nif [ ! -f $QNAN ]; then\n    echo \"ERROR: File '$QNAN' not found\" 1>&2\n    exit 1\nfi\n\nHOST_OS=$(downcase $(uname -s))\nif [ \"x$HOST_OS\" = \"x\" ]; then\n    echo \"ERROR: Can't detect host OS\" 1>&2\n    exit 1\nfi\n\nHOST_ARCH=$(uname -m)\nif [ \"x$HOST_ARCH\" = \"x\" ]; then\n    echo \"ERROR: Can't detect host CPU architecture\" 1>&2\n    exit 1\nfi\n\n#DEVICES=$(adb devices | sed '1d' | grep -v '^$' | grep \"\\<device$\" | awk -F '\\t' '{print $1}')\n#if [ -z \"$DEVICES\" ]; then\n#    echo \"WARNING: No connected devices found\" 1>&2\n#    exit 0\n#fi\n\nfor ARCH in arm arm64 x86 x86_64 mips mips64; do\n    eval unset HEADERS_GENERATED_${ARCH}\ndone\n\nadbdevices | {\nwhile read DEVICE; do\n    export ANDROID_SERIAL=\"$DEVICE\"\n    ABI=$(adb shell getprop ro.product.cpu.abi | tr -d '\\r')\n\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64*)\n            ARCH=arm64\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    ALREADY_DONE=$(eval echo \\$HEADERS_GENERATED_${ARCH})\n    if [ \"x$ALREADY_DONE\" = \"xyes\" ]; then\n        continue\n    fi\n    eval HEADERS_GENERATED_${ARCH}=yes\n\n    echo \"=========================================================================\"\n    echo \"=== Generating headers for $(upcase $ARCH) (device '$DEVICE') ...\"\n    echo \"=========================================================================\"\n\n    case $ABI in\n        armeabi*)\n            TC=arm-linux-androideabi\n            ;;\n        arm64*)\n            TC=aarch64-linux-android\n            ;;\n        x86)\n            TC=x86\n            ;;\n        x86_64)\n            TC=x86_64\n            ;;\n        mips)\n            TC=mipsel-linux-android\n            ;;\n        mips64)\n            TC=mips64el-linux-android\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    case $ABI in\n        x86)\n            TCPREFIX=i686-linux-android\n            ;;\n        x86_64)\n            TCPREFIX=x86_64-linux-android\n            ;;\n        *)\n            TCPREFIX=$TC\n    esac\n\n    case $ABI in\n        armeabi*|x86|mips)\n            APILEVEL=9\n            ;;\n        arm64*|x86_64|mips64)\n            APILEVEL=21\n            ;;\n        *)\n            echo \"ERROR: Unknown ABI: $ABI\" 1>&2\n            exit 1\n    esac\n\n    CFLAGS=\"\"\n\n    CFLAGS=\"$CFLAGS -O2\"\n    CFLAGS=\"$CFLAGS -fpic\"\n    CFLAGS=\"$CFLAGS -fno-strict-aliasing\"\n    CFLAGS=\"$CFLAGS -ffunction-sections\"\n    CFLAGS=\"$CFLAGS -funwind-tables\"\n    CFLAGS=\"$CFLAGS -fomit-frame-pointer\"\n    CFLAGS=\"$CFLAGS -no-canonical-prefixes\"\n\n    SYSROOT=$NDK/platforms/android-$APILEVEL/arch-$ARCH\n    CFLAGS=\"$CFLAGS --sysroot=$SYSROOT\"\n\n    LDFLAGS=\"-static -Wl,-z,muldefs\"\n    LDFLAGS=\"$LDFLAGS -L$MYDIR/$($MYDIR/bin/config --libpath --abi=$ABI)\"\n\n    PREFIX=$NDK/toolchains/$TC-4.9/prebuilt/${HOST_OS}-${HOST_ARCH}/bin/${TCPREFIX}\n    GCC=${PREFIX}-gcc\n    STRIP=${PREFIX}-strip\n\n    mkdir -p $TMPDIR || exit 1\n    adbshell mkdir $DTMPDIR || exit 1\n\n    run $GCC $CFLAGS $LDFLAGS -o $TMPDIR/arithchk $ARITHCHK || exit 1\n    run $STRIP --strip-unneeded $TMPDIR/arithchk || exit 1\n    adbpush $TMPDIR/arithchk $DTMPDIR/ || exit 1\n    adbshell $DTMPDIR/arithchk | sed '1d' | tr -d '\\r' >$TMPDIR/arith.h || exit 1\n\n    run $GCC $CFLAGS -I$TMPDIR $LDFLAGS -o $TMPDIR/qnan $QNAN || exit 1\n    run $STRIP --strip-unneeded $TMPDIR/qnan || exit 1\n    adbpush $TMPDIR/qnan $DTMPDIR/ || exit 1\n    adbshell $DTMPDIR/qnan | sed '1d' | tr -d '\\r' >$TMPDIR/gd_qnan.h || exit 1\n\n    INCPATH=src/include/crystax/$ARCH\n    mkdir -p $INCPATH || exit 1\n\n    for f in arith.h gd_qnan.h; do\n        DST=$INCPATH/$f\n        printf \"Generating $DST ... \"\n\n        GUARD=\"__CRYSTAX_SRC_INCLUDE_$(upcase $ARCH)_$(upcase $(echo $f | tr '.' '_'))_$(checksum $DST)\"\n        {\n            echo \"/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\"\n            echo \"\"\n\n            license\n\n            echo \"#ifndef $GUARD\"\n            echo \"#define $GUARD\"\n            echo \"\"\n\n            cat $TMPDIR/$f\n\n            echo \"\"\n            echo \"#endif /* $GUARD */\"\n\n        } | cat >$MYDIR/$DST || exit 1\n\n        echo \"DONE\"\n    done\ndone\n}\n\nexit 0\n"
  },
  {
    "path": "sources/crystax/bin/gen-bionic-sources",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'digest'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.realpath(File.join(TOPDIR, '..', '..', '..', 'bionic'))\n\nPRIVATEDIR = File.join(TOPDIR, 'gen', 'bionic')\nPUBLICDIR  = File.join(TOPDIR, 'include')\n\nclass Generator\n    def initialize\n        @files = []\n        @fixups = {}\n    end\n\n    def license\n        @license = File.read(File.join(TOPDIR, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n    private :license\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n    private :relpath\n\n    def fixup(name, &block)\n        raise \"Fixup '#{name}' already added\" if @fixups.has_key?(name.to_s)\n        raise \"No code block given\" unless block_given?\n        @fixups[name.to_s] = lambda { |f| block.call(f) }\n    end\n\n    def add(f, options = {})\n        raise \"No such file: #{f}\" unless File.exists?(File.join(SRCDIR, f))\n        raise \"File #{f} already added\" if @files.include?(f)\n        @files << {file: f, options: options}\n    end\n\n    def generate\n        total = @files.size\n        current = 0\n        @files.each do |e|\n            f = e[:file]\n            options = e[:options]\n\n            src = File.join(SRCDIR, f)\n            mdst = File.join(options[:public] ? File.join(PUBLICDIR, 'crystax', 'bionic') : PRIVATEDIR, File.dirname(f), \"mangled-#{File.basename(f)}\")\n\n            if options[:public]\n                f = f.split('/')[2..-1].join('/') if f.split('/')[0..1] == %w[libc include]\n                f = f.split('/')[3..-1].join('/') if f.split('/')[0..2] == %w[libc kernel uapi] && f.split('/')[3] =~ /^(linux|asm-.*)$/\n                dst = File.join(PUBLICDIR, f)\n            else\n                dst = File.join(PRIVATEDIR, f)\n            end\n\n            next if File.exists?(dst) && File.exists?(mdst) &&\n                File.mtime(dst)  >= File.mtime(mdst) &&\n                File.mtime(mdst) >= File.mtime(src) &&\n                File.mtime(dst)  >= File.mtime(__FILE__) &&\n                File.mtime(mdst) >= File.mtime(__FILE__)\n\n            current += 1\n            puts \"GEN  [#{current}/#{total}] #{f}\"\n\n            FileUtils.rm_f mdst\n            FileUtils.mkdir_p File.dirname(mdst)\n            FileUtils.cp src, mdst\n\n            FileUtils.mkdir_p File.dirname(dst)\n            File.open(dst, \"w\") do |df|\n                df.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                df.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} */\"\n                df.puts \"\"\n\n                df.puts \"/*\"\n                license.each do |line|\n                    df.puts \" * #{line}\".rstrip\n                end\n                df.puts \" */\"\n\n                guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dst, TOPDIR)).hexdigest}\".upcase\n                df.puts \"\"\n                df.puts \"#ifndef #{guard}\"\n                df.puts \"#define #{guard}\"\n\n                fixups = options[:fixup]\n                fixups = [] if fixups.nil?\n                fixups = [fixups] unless fixups.is_a?(Array)\n                df.puts \"\" unless fixups.empty?\n                fixups.each do |fxname|\n                    fx = @fixups[fxname.to_s]\n                    raise \"No such fixup: '#{fxname}'\" if fx.nil?\n                    fx.call(df)\n                end\n\n                df.puts \"\"\n                if options[:public]\n                    df.puts \"#include <crystax/id.h>\"\n                    df.puts \"#include <#{relpath(mdst, File.join(TOPDIR, 'include'))}>\"\n                else\n                    df.puts \"#include \\\"#{File.basename(mdst)}\\\"\"\n                end\n\n                fixups = options[:postfixup]\n                fixups = [] if fixups.nil?\n                fixups = [fixups] unless fixups.is_a?(Array)\n                df.puts \"\" unless fixups.empty?\n                fixups.each do |fxname|\n                    fx = @fixups[fxname.to_s]\n                    raise \"No such fixup: '#{fxname}'\" if fx.nil?\n                    fx.call(df)\n                end\n\n                df.puts \"\"\n                df.puts \"#endif /* #{guard} */\"\n            end\n        end\n    end\nend\n\ng = Generator.new\n\ng.fixup :ifdef_arm do |f|\n    f.puts \"#if defined(__arm__)\"\nend\n\ng.fixup :ifdef_aarch64 do |f|\n    f.puts \"#if defined(__aarch64__)\"\nend\n\ng.fixup :ifdef_mips do |f|\n    f.puts \"#if defined(__mips__)\"\nend\n\ng.fixup :ifdef_mips32 do |f|\n    f.puts \"#if defined(__mips__) && !defined(__LP64__)\"\nend\n\ng.fixup :ifdef_i386 do |f|\n    f.puts \"#if defined(__i386__)\"\nend\n\ng.fixup :ifdef_x86_64 do |f|\n    f.puts \"#if defined(__x86_64__)\"\nend\n\ng.fixup :ifndef_lp64 do |f|\n    f.puts \"#if !(defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__)))\"\nend\n\ng.fixup :endif do |f|\n    f.puts \"#endif\"\nend\n\ng.fixup :redefine_fcntl do |f|\n    f.puts \"#define fcntl __fcntl64\"\nend\n\ng.fixup :redefine_uname do |f|\n    f.puts \"#define uname __uname\"\nend\n\ng.fixup :redefine_execve do |f|\n    f.puts \"#define execve __execve\"\nend\n\n# public headers\ng.add \"libc/include/arpa/inet.h\",                       public: true\ng.add \"libc/include/arpa/nameser.h\",                    public: true\ng.add \"libc/include/arpa/nameser_compat.h\",             public: true\ng.add \"libc/include/dirent.h\",                          public: true\ng.add \"libc/include/machine/ieee.h\",                    public: true\ng.add \"libc/include/machine/pthread_types.h\",           public: true\ng.add \"libc/include/machine/timespec.h\",                public: true\ng.add \"libc/include/mntent.h\",                          public: true\ng.add \"libc/include/net/if_ether.h\",                    public: true\ng.add \"libc/include/netdb.h\",                           public: true\ng.add \"libc/include/netinet/in.h\",                      public: true\ng.add \"libc/include/netinet/in6.h\",                     public: true\ng.add \"libc/include/nsswitch.h\",                        public: true\ng.add \"libc/include/poll.h\",                            public: true\ng.add \"libc/include/pthread.h\",                         public: true\ng.add \"libc/include/pty.h\",                             public: true\ng.add \"libc/include/pwd.h\",                             public: true\ng.add \"libc/include/resolv.h\",                          public: true\ng.add \"libc/include/sched.h\",                           public: true\ng.add \"libc/include/signal.h\",                          public: true\ng.add \"libc/include/sys/_errdefs.h\",                    public: true\ng.add \"libc/include/sys/_sigdefs.h\",                    public: true\ng.add \"libc/include/sys/_sigdefs.h\",                    public: true\ng.add \"libc/include/sys/auxv.h\",                        public: true\ng.add \"libc/include/sys/epoll.h\",                       public: true\ng.add \"libc/include/sys/file.h\",                        public: true\ng.add \"libc/include/sys/glibc-syscalls.h\",              public: true\ng.add \"libc/include/sys/inotify.h\",                     public: true\ng.add \"libc/include/sys/ioctl.h\",                       public: true\ng.add \"libc/include/sys/ipc.h\",                         public: true\ng.add \"libc/include/sys/personality.h\",                 public: true\ng.add \"libc/include/sys/prctl.h\",                       public: true\ng.add \"libc/include/sys/procfs.h\",                      public: true\ng.add \"libc/include/sys/resource.h\",                    public: true\ng.add \"libc/include/sys/select.h\",                      public: true\ng.add \"libc/include/sys/signal.h\",                      public: true\ng.add \"libc/include/sys/signalfd.h\",                    public: true\ng.add \"libc/include/sys/stat.h\",                        public: true\ng.add \"libc/include/sys/statvfs.h\",                     public: true\ng.add \"libc/include/sys/syscall.h\",                     public: true\ng.add \"libc/include/sys/sysconf.h\",                     public: true\ng.add \"libc/include/sys/sysinfo.h\",                     public: true\ng.add \"libc/include/sys/time.h\",                        public: true\ng.add \"libc/include/sys/timerfd.h\",                     public: true\ng.add \"libc/include/sys/ucontext.h\",                    public: true\ng.add \"libc/include/sys/uio.h\",                         public: true\ng.add \"libc/include/sys/user.h\",                        public: true\ng.add \"libc/include/sys/utsname.h\",                     public: true\ng.add \"libc/include/sys/xattr.h\",                       public: true\ng.add \"libc/include/unistd.h\",                          public: true\ng.add \"libc/include/utmp.h\",                            public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/auxvec.h\",          public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/bitsperlong.h\",     public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/posix_types.h\",     public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/resource.h\",        public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/siginfo.h\",         public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/signal.h\",          public: true\ng.add \"libc/kernel/uapi/asm-arm/asm/unistd.h\",          public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/auxvec.h\",        public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/bitsperlong.h\",   public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/posix_types.h\",   public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/resource.h\",      public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/siginfo.h\",       public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/signal.h\",        public: true\ng.add \"libc/kernel/uapi/asm-arm64/asm/unistd.h\",        public: true\ng.add \"libc/kernel/uapi/asm-generic/auxvec.h\",          public: true\ng.add \"libc/kernel/uapi/asm-generic/bitsperlong.h\",     public: true\ng.add \"libc/kernel/uapi/asm-generic/param.h\",           public: true\ng.add \"libc/kernel/uapi/asm-generic/posix_types.h\",     public: true\ng.add \"libc/kernel/uapi/asm-generic/siginfo.h\",         public: true\ng.add \"libc/kernel/uapi/asm-generic/signal-defs.h\",     public: true\ng.add \"libc/kernel/uapi/asm-generic/signal.h\",          public: true\ng.add \"libc/kernel/uapi/asm-generic/unistd.h\",          public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/auxvec.h\",         public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/bitsperlong.h\",    public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/posix_types.h\",    public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/resource.h\",       public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/siginfo.h\",        public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/signal.h\",         public: true\ng.add \"libc/kernel/uapi/asm-mips/asm/unistd.h\",         public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/auxvec.h\",          public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/bitsperlong.h\",     public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/posix_types.h\",     public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/posix_types_32.h\",  public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/posix_types_64.h\",  public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/posix_types_x32.h\", public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/resource.h\",        public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/siginfo.h\",         public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/signal.h\",          public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/unistd.h\",          public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/unistd_32.h\",       public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/unistd_64.h\",       public: true\ng.add \"libc/kernel/uapi/asm-x86/asm/unistd_x32.h\",      public: true\ng.add \"libc/kernel/uapi/linux/auxvec.h\",                public: true\ng.add \"libc/kernel/uapi/linux/if_plip.h\",               public: true\ng.add \"libc/kernel/uapi/linux/if_slip.h\",               public: true\ng.add \"libc/kernel/uapi/linux/in6.h\",                   public: true\ng.add \"libc/kernel/uapi/linux/inotify.h\",               public: true\ng.add \"libc/kernel/uapi/linux/ipc.h\",                   public: true\ng.add \"libc/kernel/uapi/linux/libc-compat.h\",           public: true\ng.add \"libc/kernel/uapi/linux/personality.h\",           public: true\ng.add \"libc/kernel/uapi/linux/posix_types.h\",           public: true\ng.add \"libc/kernel/uapi/linux/prctl.h\",                 public: true\ng.add \"libc/kernel/uapi/linux/resource.h\",              public: true\ng.add \"libc/kernel/uapi/linux/sched.h\",                 public: true\ng.add \"libc/kernel/uapi/linux/signal.h\",                public: true\ng.add \"libc/kernel/uapi/linux/signalfd.h\",              public: true\ng.add \"libc/kernel/uapi/linux/time.h\",                  public: true\ng.add \"libc/kernel/uapi/linux/tty.h\",                   public: true\ng.add \"libc/kernel/uapi/linux/unistd.h\",                public: true\ng.add \"libc/kernel/uapi/linux/xattr.h\",                 public: true\n\n# common private headers\ng.add \"libc/arch-common/bionic/__dso_handle.h\"\ng.add \"libc/arch-common/bionic/__dso_handle_so.h\"\ng.add \"libc/arch-common/bionic/atexit.h\"\ng.add \"libc/arch-x86/bionic/__stack_chk_fail_local.h\"\ng.add \"libc/arch-x86/bionic/atexit.h\"\ng.add \"libc/bionic/jemalloc.h\"\ng.add \"libc/bionic/libc_init_common.h\"\ng.add \"libc/bionic/malloc_debug_common.h\"\ng.add \"libc/bionic/time64_config.h\"\ng.add \"libc/include/android/set_abort_message.h\"\ng.add \"libc/include/stdatomic.h\"\ng.add \"libc/include/sys/_system_properties.h\"\ng.add \"libc/include/sys/auxv.h\"\ng.add \"libc/include/sys/system_properties.h\"\ng.add \"libc/kernel/uapi/linux/binfmts.h\"\ng.add \"libc/kernel/uapi/linux/futex.h\"\ng.add \"libc/private/ErrnoRestorer.h\"\ng.add \"libc/private/KernelArgumentBlock.h\"\ng.add \"libc/private/NetdClientDispatch.h\"\ng.add \"libc/private/ScopedPthreadMutexLocker.h\"\ng.add \"libc/private/ScopedReaddir.h\"\ng.add \"libc/private/ThreadLocalBuffer.h\"\ng.add \"libc/private/bionic_asm.h\"\ng.add \"libc/private/bionic_auxv.h\"\ng.add \"libc/private/bionic_config.h\"\ng.add \"libc/private/bionic_constants.h\"\ng.add \"libc/private/bionic_futex.h\"\ng.add \"libc/private/bionic_lock.h\"\ng.add \"libc/private/bionic_macros.h\"\ng.add \"libc/private/bionic_page.h\"\ng.add \"libc/private/bionic_prctl.h\"\ng.add \"libc/private/bionic_ssp.h\"\ng.add \"libc/private/bionic_string_utils.h\"\ng.add \"libc/private/bionic_systrace.h\"\ng.add \"libc/private/bionic_time_conversions.h\"\ng.add \"libc/private/bionic_tls.h\"\ng.add \"libc/private/kernel_sigset_t.h\"\ng.add \"libc/private/libc_events.h\"\ng.add \"libc/private/libc_logging.h\"\ng.add \"libc/private/thread_private.h\"\ng.add \"libc/stdlib/atexit.h\"\ng.add \"libc/upstream-netbsd/android/include/extern.h\"\ng.add \"libc/upstream-netbsd/android/include/fd_setsize.h\"\ng.add \"libc/upstream-netbsd/android/include/port_after.h\"\ng.add \"libc/upstream-netbsd/android/include/port_before.h\"\ng.add \"libc/upstream-netbsd/android/include/rand48.h\"\ng.add \"libc/upstream-netbsd/android/include/sys/sha1.h\"\n\n# include/machine/asm.h\ng.add \"libc/arch-arm/include/machine/asm.h\"\ng.add \"libc/arch-arm64/include/machine/asm.h\"\ng.add \"libc/arch-mips/include/machine/asm.h\"\ng.add \"libc/arch-mips64/include/machine/asm.h\"\ng.add \"libc/arch-x86/include/machine/asm.h\"\ng.add \"libc/arch-x86_64/include/machine/asm.h\"\n\n# common sources\ng.add \"libc/arch-arm/bionic/__aeabi.c\",       fixup: \"ifdef_arm\", postfixup: \"endif\"\ng.add \"libc/arch-arm/bionic/exidx_dynamic.c\", fixup: \"ifdef_arm\", postfixup: \"endif\"\ng.add \"libc/arch-arm/bionic/exidx_static.c\",  fixup: \"ifdef_arm\", postfixup: \"endif\"\ng.add \"libc/arch-arm/bionic/libgcc_compat.c\", fixup: \"ifdef_arm\", postfixup: \"endif\"\ng.add \"libc/arch-common/bionic/crtbegin_so.c\"\ng.add \"libc/arch-common/bionic/crtbrand.S\"\ng.add \"libc/arch-common/bionic/crtend_so.S\"\ng.add \"libc/bionic/NetdClient.cpp\"\ng.add \"libc/bionic/NetdClientDispatch.cpp\"\ng.add \"libc/bionic/__cxa_guard.cpp\"\ng.add \"libc/bionic/__cxa_pure_virtual.cpp\"\ng.add \"libc/bionic/bionic_systrace.cpp\"\ng.add \"libc/bionic/bionic_time_conversions.cpp\"\ng.add \"libc/bionic/dl_iterate_phdr_static.cpp\"\ng.add \"libc/bionic/jemalloc_wrapper.cpp\"\ng.add \"libc/bionic/lfs64_support.cpp\"\ng.add \"libc/bionic/libc_init_common.cpp\"\ng.add \"libc/bionic/libc_init_dynamic.cpp\"\ng.add \"libc/bionic/libc_init_static.cpp\"\ng.add \"libc/bionic/libc_logging.cpp\"\ng.add \"libc/bionic/libgen.cpp\"\ng.add \"libc/bionic/malloc_debug_common.cpp\"\ng.add \"libc/bionic/malloc_debug_dynamic.cpp\"\ng.add \"libc/bionic/malloc_debug_static.cpp\"\ng.add \"libc/bionic/new.cpp\"\ng.add \"libc/bionic/sys_siglist.c\"\ng.add \"libc/bionic/sys_signame.c\"\ng.add \"libc/bionic/system_properties.cpp\"\ng.add \"libc/bionic/system_properties_compat.c\"\ng.add \"libc/bionic/thread_private.cpp\"\ng.add \"libc/bionic/time64.c\",                 fixup: \"ifndef_lp64\", postfixup: \"endif\"\ng.add \"libc/stdlib/exit.c\"\ng.add \"libc/upstream-netbsd/common/lib/libc/hash/sha1/sha1.c\"\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/_rand48.c\"\n\n# dns\ng.add \"libc/dns/include/hostent.h\"\ng.add \"libc/dns/include/resolv_cache.h\"\ng.add \"libc/dns/include/resolv_netid.h\"\ng.add \"libc/dns/include/resolv_private.h\"\ng.add \"libc/dns/include/resolv_static.h\"\ng.add \"libc/dns/nameser/ns_name.c\"\ng.add \"libc/dns/nameser/ns_netint.c\"\ng.add \"libc/dns/nameser/ns_parse.c\"\ng.add \"libc/dns/nameser/ns_print.c\"\ng.add \"libc/dns/nameser/ns_samedomain.c\"\ng.add \"libc/dns/nameser/ns_ttl.c\"\ng.add \"libc/dns/net/base64.c\"\ng.add \"libc/dns/net/getaddrinfo.c\"\ng.add \"libc/dns/net/gethnamaddr.c\"\ng.add \"libc/dns/net/getnameinfo.c\"\ng.add \"libc/dns/net/getservbyname.c\"\ng.add \"libc/dns/net/getservbyport.c\"\ng.add \"libc/dns/net/getservent.c\"\ng.add \"libc/dns/net/nsdispatch.c\"\ng.add \"libc/dns/net/servent.h\"\ng.add \"libc/dns/net/services.h\"\ng.add \"libc/dns/net/sethostent.c\"\ng.add \"libc/dns/resolv/herror.c\"\ng.add \"libc/dns/resolv/res_cache.c\"\ng.add \"libc/dns/resolv/res_comp.c\"\ng.add \"libc/dns/resolv/res_data.c\"\ng.add \"libc/dns/resolv/res_debug.c\"\ng.add \"libc/dns/resolv/res_debug.h\"\ng.add \"libc/dns/resolv/res_init.c\"\ng.add \"libc/dns/resolv/res_mkquery.c\"\ng.add \"libc/dns/resolv/res_private.h\"\ng.add \"libc/dns/resolv/res_query.c\"\ng.add \"libc/dns/resolv/res_send.c\"\ng.add \"libc/dns/resolv/res_state.c\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/assertions.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/dst.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/eventlib.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/heap.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/list.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/isc/memcluster.h\"\ng.add \"libc/upstream-netbsd/lib/libc/include/resolv_mt.h\"\ng.add \"libc/upstream-netbsd/lib/libc/isc/ev_streams.c\"\ng.add \"libc/upstream-netbsd/lib/libc/isc/ev_timers.c\"\ng.add \"libc/upstream-netbsd/lib/libc/isc/eventlib_p.h\"\ng.add \"libc/upstream-netbsd/lib/libc/resolv/mtctxres.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_addr.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_lnaof.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_makeaddr.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_netof.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_network.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_ntoa.c\"\ng.add \"libc/upstream-openbsd/lib/libc/net/res_random.c\"\n\n# fenv\ng.add \"libm/amd64/fenv.c\", fixup: \"ifdef_x86_64\", postfixup: \"endif\"\ng.add \"libm/arm/fenv.c\",   fixup: \"ifdef_arm\", postfixup: \"endif\"\ng.add \"libm/arm64/fenv.c\", fixup: \"ifdef_aarch64\", postfixup: \"endif\"\ng.add \"libm/i387/fenv.c\",  fixup: \"ifdef_i386\", postfixup: \"endif\"\ng.add \"libm/i387/npx.h\"\ng.add \"libm/mips/fenv.c\",  fixup: \"ifdef_mips\", postfixup: \"endif\"\n\n# pty\ng.add \"libc/bionic/pty.cpp\"\n\n# vdso\ng.add \"libc/bionic/vdso.cpp\"\n\n# tls\ng.add \"libc/arch-arm/syscalls/__set_tls.S\"\ng.add \"libc/arch-arm64/bionic/__set_tls.c\"\ng.add \"libc/arch-mips/syscalls/__set_tls.S\"\ng.add \"libc/arch-mips64/syscalls/__set_tls.S\"\ng.add \"libc/arch-x86/bionic/__set_tls.c\"\ng.add \"libc/arch-x86/syscalls/__set_thread_area.S\"\ng.add \"libc/arch-x86_64/bionic/__set_tls.c\"\ng.add \"libc/arch-x86_64/syscalls/__arch_prctl.S\"\ng.add \"libc/kernel/uapi/asm-x86/asm/ldt.h\"\ng.add \"libc/private/__get_tls.h\"\n\n# tzcode\ng.add \"libc/tzcode/asctime.c\"\ng.add \"libc/tzcode/difftime.c\"\ng.add \"libc/tzcode/localtime.c\"\ng.add \"libc/tzcode/private.h\"\ng.add \"libc/tzcode/tzfile.h\"\n\n# utmp\ng.add \"libc/upstream-netbsd/lib/libc/gen/utmp.c\"\n\n# accept\ng.add \"libc/arch-arm/syscalls/__accept4.S\"\ng.add \"libc/arch-arm64/syscalls/__accept4.S\"\ng.add \"libc/arch-mips/syscalls/__accept4.S\"\ng.add \"libc/arch-mips64/syscalls/__accept4.S\"\ng.add \"libc/arch-x86/syscalls/__accept4.S\"\ng.add \"libc/arch-x86_64/syscalls/__accept4.S\"\ng.add \"libc/bionic/accept.cpp\"\ng.add \"libc/bionic/accept4.cpp\"\n\n# access\ng.add \"libc/bionic/access.cpp\"\n\n# acct\ng.add \"libc/arch-arm/syscalls/acct.S\"\ng.add \"libc/arch-arm64/syscalls/acct.S\"\ng.add \"libc/arch-mips/syscalls/acct.S\"\ng.add \"libc/arch-mips64/syscalls/acct.S\"\ng.add \"libc/arch-x86/syscalls/acct.S\"\ng.add \"libc/arch-x86_64/syscalls/acct.S\"\n\n# __assert\ng.add \"libc/bionic/assert.cpp\"\n\n# atexit\ng.add \"libc/stdlib/atexit.c\"\ng.add \"libc/arch-arm/bionic/atexit_legacy.c\", fixup: \"ifdef_arm\", postfixup: \"endif\"\n\n# bind\ng.add \"libc/arch-arm/syscalls/bind.S\"\ng.add \"libc/arch-arm64/syscalls/bind.S\"\ng.add \"libc/arch-mips/syscalls/bind.S\"\ng.add \"libc/arch-mips64/syscalls/bind.S\"\ng.add \"libc/arch-x86/syscalls/bind.S\"\ng.add \"libc/arch-x86_64/syscalls/bind.S\"\n\n# bindresvport\ng.add \"libc/bionic/bindresvport.c\"\n\n# __bionic_clone\ng.add \"libc/arch-arm/bionic/__bionic_clone.S\"\ng.add \"libc/arch-arm64/bionic/__bionic_clone.S\"\ng.add \"libc/arch-mips/bionic/__bionic_clone.S\"\ng.add \"libc/arch-mips64/bionic/__bionic_clone.S\"\ng.add \"libc/arch-x86/bionic/__bionic_clone.S\"\ng.add \"libc/arch-x86_64/bionic/__bionic_clone.S\"\n\n# __brk\ng.add \"libc/arch-arm/syscalls/__brk.S\"\ng.add \"libc/arch-arm64/syscalls/__brk.S\"\ng.add \"libc/arch-mips/syscalls/__brk.S\"\ng.add \"libc/arch-mips64/syscalls/__brk.S\"\ng.add \"libc/arch-x86/syscalls/__brk.S\"\ng.add \"libc/arch-x86_64/syscalls/__brk.S\"\n\n# cacheflush\ng.add \"libc/arch-arm/syscalls/cacheflush.S\"\ng.add \"libc/arch-mips/bionic/cacheflush.cpp\", fixup: \"ifdef_mips32\", postfixup: \"endif\"\ng.add \"libc/arch-mips/syscalls/_flush_cache.S\"\n\n# capget\ng.add \"libc/arch-arm/syscalls/capget.S\"\ng.add \"libc/arch-arm64/syscalls/capget.S\"\ng.add \"libc/arch-mips/syscalls/capget.S\"\ng.add \"libc/arch-mips64/syscalls/capget.S\"\ng.add \"libc/arch-x86/syscalls/capget.S\"\ng.add \"libc/arch-x86_64/syscalls/capget.S\"\n\n# capset\ng.add \"libc/arch-arm/syscalls/capset.S\"\ng.add \"libc/arch-arm64/syscalls/capset.S\"\ng.add \"libc/arch-mips/syscalls/capset.S\"\ng.add \"libc/arch-mips64/syscalls/capset.S\"\ng.add \"libc/arch-x86/syscalls/capset.S\"\ng.add \"libc/arch-x86_64/syscalls/capset.S\"\n\n# chdir\ng.add \"libc/arch-arm/syscalls/chdir.S\"\ng.add \"libc/arch-arm64/syscalls/chdir.S\"\ng.add \"libc/arch-mips/syscalls/chdir.S\"\ng.add \"libc/arch-mips64/syscalls/chdir.S\"\ng.add \"libc/arch-x86/syscalls/chdir.S\"\ng.add \"libc/arch-x86_64/syscalls/chdir.S\"\n\n# chmod\ng.add \"libc/bionic/chmod.cpp\"\n\n# chown\ng.add \"libc/bionic/chown.cpp\"\n\n# chroot\ng.add \"libc/arch-arm/syscalls/chroot.S\"\ng.add \"libc/arch-arm64/syscalls/chroot.S\"\ng.add \"libc/arch-mips/syscalls/chroot.S\"\ng.add \"libc/arch-mips64/syscalls/chroot.S\"\ng.add \"libc/arch-x86/syscalls/chroot.S\"\ng.add \"libc/arch-x86_64/syscalls/chroot.S\"\n\n# clearenv\ng.add \"libc/bionic/clearenv.cpp\"\n\n# clock\ng.add \"libc/bionic/clock.cpp\"\n\n# clock_getcpuclockid\ng.add \"libc/bionic/clock_getcpuclockid.cpp\"\n\n# clock_getres\ng.add \"libc/arch-arm/syscalls/clock_getres.S\"\ng.add \"libc/arch-arm64/syscalls/clock_getres.S\"\ng.add \"libc/arch-mips/syscalls/clock_getres.S\"\ng.add \"libc/arch-mips64/syscalls/clock_getres.S\"\ng.add \"libc/arch-x86/syscalls/clock_getres.S\"\ng.add \"libc/arch-x86_64/syscalls/clock_getres.S\"\n\n# clock_gettime\ng.add \"libc/arch-arm/syscalls/clock_gettime.S\"\ng.add \"libc/arch-arm64/syscalls/__clock_gettime.S\"\ng.add \"libc/arch-mips/syscalls/clock_gettime.S\"\ng.add \"libc/arch-mips64/syscalls/clock_gettime.S\"\ng.add \"libc/arch-x86/syscalls/__clock_gettime.S\"\ng.add \"libc/arch-x86_64/syscalls/__clock_gettime.S\"\n\n# clock_nanosleep\ng.add \"libc/arch-arm/syscalls/___clock_nanosleep.S\"\ng.add \"libc/arch-arm64/syscalls/___clock_nanosleep.S\"\ng.add \"libc/arch-mips/syscalls/___clock_nanosleep.S\"\ng.add \"libc/arch-mips64/syscalls/___clock_nanosleep.S\"\ng.add \"libc/arch-x86/syscalls/___clock_nanosleep.S\"\ng.add \"libc/arch-x86_64/syscalls/___clock_nanosleep.S\"\ng.add \"libc/bionic/clock_nanosleep.cpp\"\n\n# clock_settime\ng.add \"libc/arch-arm/syscalls/clock_settime.S\"\ng.add \"libc/arch-arm64/syscalls/clock_settime.S\"\ng.add \"libc/arch-mips/syscalls/clock_settime.S\"\ng.add \"libc/arch-mips64/syscalls/clock_settime.S\"\ng.add \"libc/arch-x86/syscalls/clock_settime.S\"\ng.add \"libc/arch-x86_64/syscalls/clock_settime.S\"\n\n# close\ng.add \"libc/bionic/close.cpp\"\ng.add \"libc/arch-arm/syscalls/___close.S\"\ng.add \"libc/arch-arm64/syscalls/___close.S\"\ng.add \"libc/arch-mips/syscalls/___close.S\"\ng.add \"libc/arch-mips64/syscalls/___close.S\"\ng.add \"libc/arch-x86/syscalls/___close.S\"\ng.add \"libc/arch-x86_64/syscalls/___close.S\"\n\n# __cmsg_nxthdr\ng.add \"libc/bionic/__cmsg_nxthdr.cpp\"\n\n# connect\ng.add \"libc/arch-arm/syscalls/__connect.S\"\ng.add \"libc/arch-arm64/syscalls/__connect.S\"\ng.add \"libc/arch-mips/syscalls/__connect.S\"\ng.add \"libc/arch-mips64/syscalls/__connect.S\"\ng.add \"libc/arch-x86/syscalls/__connect.S\"\ng.add \"libc/arch-x86_64/syscalls/__connect.S\"\ng.add \"libc/bionic/connect.cpp\"\n\n# delete_module\ng.add \"libc/arch-arm/syscalls/delete_module.S\"\ng.add \"libc/arch-arm64/syscalls/delete_module.S\"\ng.add \"libc/arch-mips/syscalls/delete_module.S\"\ng.add \"libc/arch-mips64/syscalls/delete_module.S\"\ng.add \"libc/arch-x86/syscalls/delete_module.S\"\ng.add \"libc/arch-x86_64/syscalls/delete_module.S\"\n\n# dirent functions: opendir/closedir/telldir/etc\ng.add \"libc/bionic/dirent.cpp\"\n\n# drand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/drand48.c\"\n\n# dup\ng.add \"libc/arch-arm/syscalls/dup.S\"\ng.add \"libc/arch-arm64/syscalls/dup.S\"\ng.add \"libc/arch-mips/syscalls/dup.S\"\ng.add \"libc/arch-mips64/syscalls/dup.S\"\ng.add \"libc/arch-x86/syscalls/dup.S\"\ng.add \"libc/arch-x86_64/syscalls/dup.S\"\n\n# dup2\ng.add \"libc/bionic/dup2.cpp\"\n\n# dup3\ng.add \"libc/arch-arm/syscalls/dup3.S\"\ng.add \"libc/arch-arm64/syscalls/dup3.S\"\ng.add \"libc/arch-mips/syscalls/dup3.S\"\ng.add \"libc/arch-mips64/syscalls/dup3.S\"\ng.add \"libc/arch-x86/syscalls/dup3.S\"\ng.add \"libc/arch-x86_64/syscalls/dup3.S\"\n\n# epoll_create\ng.add \"libc/arch-arm/syscalls/epoll_create1.S\"\ng.add \"libc/arch-arm64/syscalls/epoll_create1.S\"\ng.add \"libc/arch-mips/syscalls/epoll_create1.S\"\ng.add \"libc/arch-mips64/syscalls/epoll_create1.S\"\ng.add \"libc/arch-x86/syscalls/epoll_create1.S\"\ng.add \"libc/arch-x86_64/syscalls/epoll_create1.S\"\ng.add \"libc/bionic/epoll_create.cpp\"\n\n# epoll_ctl\ng.add \"libc/arch-arm/syscalls/epoll_ctl.S\"\ng.add \"libc/arch-arm64/syscalls/epoll_ctl.S\"\ng.add \"libc/arch-mips/syscalls/epoll_ctl.S\"\ng.add \"libc/arch-mips64/syscalls/epoll_ctl.S\"\ng.add \"libc/arch-x86/syscalls/epoll_ctl.S\"\ng.add \"libc/arch-x86_64/syscalls/epoll_ctl.S\"\n\n# epoll_pwait\ng.add \"libc/arch-arm/syscalls/__epoll_pwait.S\"\ng.add \"libc/arch-arm64/syscalls/__epoll_pwait.S\"\ng.add \"libc/arch-mips/syscalls/__epoll_pwait.S\"\ng.add \"libc/arch-mips64/syscalls/__epoll_pwait.S\"\ng.add \"libc/arch-x86/syscalls/__epoll_pwait.S\"\ng.add \"libc/arch-x86_64/syscalls/__epoll_pwait.S\"\ng.add \"libc/bionic/epoll_pwait.cpp\"\n\n# epoll_wait\ng.add \"libc/bionic/epoll_wait.cpp\"\n\n# erand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/erand48.c\"\n\n# __errno\ng.add \"libc/bionic/__errno.cpp\"\n\n# ether_aton\ng.add \"libc/bionic/ether_aton.c\"\n\n# ether_ntoa\ng.add \"libc/bionic/ether_ntoa.c\"\n\n# eventfd\ng.add \"libc/arch-arm/syscalls/eventfd.S\"\ng.add \"libc/arch-arm64/syscalls/eventfd.S\"\ng.add \"libc/arch-mips/syscalls/eventfd.S\"\ng.add \"libc/arch-mips64/syscalls/eventfd.S\"\ng.add \"libc/arch-x86/syscalls/eventfd.S\"\ng.add \"libc/arch-x86_64/syscalls/eventfd.S\"\ng.add \"libc/bionic/eventfd_read.cpp\"\ng.add \"libc/bionic/eventfd_write.cpp\"\n\n# exec\ng.add \"libc/upstream-openbsd/lib/libc/gen/exec.c\"\n\n# execve\ng.add \"libc/arch-arm/syscalls/execve.S\",    fixup: \"redefine_execve\"\ng.add \"libc/arch-arm64/syscalls/execve.S\",  fixup: \"redefine_execve\"\ng.add \"libc/arch-mips/syscalls/execve.S\",   fixup: \"redefine_execve\"\ng.add \"libc/arch-mips64/syscalls/execve.S\", fixup: \"redefine_execve\"\ng.add \"libc/arch-x86/syscalls/execve.S\",    fixup: \"redefine_execve\"\ng.add \"libc/arch-x86_64/syscalls/execve.S\", fixup: \"redefine_execve\"\n\n# __exit\ng.add \"libc/arch-arm/syscalls/__exit.S\"\ng.add \"libc/arch-arm64/syscalls/__exit.S\"\ng.add \"libc/arch-mips/syscalls/__exit.S\"\ng.add \"libc/arch-mips64/syscalls/__exit.S\"\ng.add \"libc/arch-x86/syscalls/__exit.S\"\ng.add \"libc/arch-x86_64/syscalls/__exit.S\"\n\n# _exit\ng.add \"libc/arch-arm/syscalls/_exit.S\"\ng.add \"libc/arch-arm64/syscalls/_exit.S\"\ng.add \"libc/arch-mips/syscalls/_exit.S\"\ng.add \"libc/arch-mips64/syscalls/_exit.S\"\ng.add \"libc/arch-x86/syscalls/_exit.S\"\ng.add \"libc/arch-x86_64/syscalls/_exit.S\"\n\n# _exit_with_stack_teardown\ng.add \"libc/arch-arm/bionic/_exit_with_stack_teardown.S\"\ng.add \"libc/arch-arm64/bionic/_exit_with_stack_teardown.S\"\ng.add \"libc/arch-mips/bionic/_exit_with_stack_teardown.S\"\ng.add \"libc/arch-mips64/bionic/_exit_with_stack_teardown.S\"\ng.add \"libc/arch-x86/bionic/_exit_with_stack_teardown.S\"\ng.add \"libc/arch-x86_64/bionic/_exit_with_stack_teardown.S\"\n\n# faccessat\ng.add \"libc/arch-arm/syscalls/___faccessat.S\"\ng.add \"libc/arch-arm64/syscalls/___faccessat.S\"\ng.add \"libc/arch-mips/syscalls/___faccessat.S\"\ng.add \"libc/arch-mips64/syscalls/___faccessat.S\"\ng.add \"libc/arch-x86/syscalls/___faccessat.S\"\ng.add \"libc/arch-x86_64/syscalls/___faccessat.S\"\ng.add \"libc/bionic/faccessat.cpp\"\n\n# fadvise\ng.add \"libc/arch-arm/syscalls/__arm_fadvise64_64.S\"\ng.add \"libc/arch-arm64/syscalls/__fadvise64.S\"\ng.add \"libc/arch-mips/syscalls/__fadvise64.S\"\ng.add \"libc/arch-mips64/syscalls/__fadvise64.S\"\ng.add \"libc/arch-x86/syscalls/__fadvise64.S\"\ng.add \"libc/arch-x86_64/syscalls/__fadvise64.S\"\n\n# fallocate/fallocate64\ng.add \"libc/arch-arm/syscalls/fallocate64.S\"\ng.add \"libc/arch-arm64/syscalls/fallocate.S\"\ng.add \"libc/arch-mips/syscalls/fallocate64.S\"\ng.add \"libc/arch-mips64/syscalls/fallocate.S\"\ng.add \"libc/arch-x86/syscalls/fallocate64.S\"\ng.add \"libc/arch-x86_64/syscalls/fallocate.S\"\n\n# fchdir\ng.add \"libc/arch-arm/syscalls/fchdir.S\"\ng.add \"libc/arch-arm64/syscalls/fchdir.S\"\ng.add \"libc/arch-mips/syscalls/fchdir.S\"\ng.add \"libc/arch-mips64/syscalls/fchdir.S\"\ng.add \"libc/arch-x86/syscalls/fchdir.S\"\ng.add \"libc/arch-x86_64/syscalls/fchdir.S\"\n\n# fchmod\ng.add \"libc/arch-arm/syscalls/___fchmod.S\"\ng.add \"libc/arch-arm64/syscalls/___fchmod.S\"\ng.add \"libc/arch-mips/syscalls/___fchmod.S\"\ng.add \"libc/arch-mips64/syscalls/___fchmod.S\"\ng.add \"libc/arch-x86/syscalls/___fchmod.S\"\ng.add \"libc/arch-x86_64/syscalls/___fchmod.S\"\ng.add \"libc/bionic/fchmod.cpp\"\n\n# fchmodat\ng.add \"libc/arch-arm/syscalls/___fchmodat.S\"\ng.add \"libc/arch-arm64/syscalls/___fchmodat.S\"\ng.add \"libc/arch-mips/syscalls/___fchmodat.S\"\ng.add \"libc/arch-mips64/syscalls/___fchmodat.S\"\ng.add \"libc/arch-x86/syscalls/___fchmodat.S\"\ng.add \"libc/arch-x86_64/syscalls/___fchmodat.S\"\ng.add \"libc/bionic/fchmodat.cpp\"\n\n# fchown\ng.add \"libc/arch-arm/syscalls/fchown.S\"\ng.add \"libc/arch-arm64/syscalls/fchown.S\"\ng.add \"libc/arch-mips/syscalls/fchown.S\"\ng.add \"libc/arch-mips64/syscalls/fchown.S\"\ng.add \"libc/arch-x86/syscalls/fchown.S\"\ng.add \"libc/arch-x86_64/syscalls/fchown.S\"\n\n# fchownat\ng.add \"libc/arch-arm/syscalls/fchownat.S\"\ng.add \"libc/arch-arm64/syscalls/fchownat.S\"\ng.add \"libc/arch-mips/syscalls/fchownat.S\"\ng.add \"libc/arch-mips64/syscalls/fchownat.S\"\ng.add \"libc/arch-x86/syscalls/fchownat.S\"\ng.add \"libc/arch-x86_64/syscalls/fchownat.S\"\n\n# fcntl/__fcntl64\ng.add \"libc/arch-arm/syscalls/__fcntl64.S\"\ng.add \"libc/arch-arm64/syscalls/fcntl.S\",    fixup: \"redefine_fcntl\"\ng.add \"libc/arch-mips/syscalls/__fcntl64.S\"\ng.add \"libc/arch-mips64/syscalls/fcntl.S\",   fixup: \"redefine_fcntl\"\ng.add \"libc/arch-x86/syscalls/__fcntl64.S\"\ng.add \"libc/arch-x86_64/syscalls/fcntl.S\",   fixup: \"redefine_fcntl\"\n\n# __FD_XXX_chk\ng.add \"libc/bionic/__FD_chk.cpp\"\n\n# fdatasync\ng.add \"libc/arch-arm/syscalls/fdatasync.S\"\ng.add \"libc/arch-arm64/syscalls/fdatasync.S\"\ng.add \"libc/arch-mips/syscalls/fdatasync.S\"\ng.add \"libc/arch-mips64/syscalls/fdatasync.S\"\ng.add \"libc/arch-x86/syscalls/fdatasync.S\"\ng.add \"libc/arch-x86_64/syscalls/fdatasync.S\"\n\n# __fgets_chk\ng.add \"libc/bionic/__fgets_chk.cpp\"\n\n# fgetxattr\ng.add \"libc/arch-arm/syscalls/___fgetxattr.S\"\ng.add \"libc/arch-arm64/syscalls/___fgetxattr.S\"\ng.add \"libc/arch-mips/syscalls/___fgetxattr.S\"\ng.add \"libc/arch-mips64/syscalls/___fgetxattr.S\"\ng.add \"libc/arch-x86/syscalls/___fgetxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/___fgetxattr.S\"\ng.add \"libc/bionic/fgetxattr.cpp\"\n\n# flistxattr\ng.add \"libc/arch-arm/syscalls/___flistxattr.S\"\ng.add \"libc/arch-arm64/syscalls/___flistxattr.S\"\ng.add \"libc/arch-mips/syscalls/___flistxattr.S\"\ng.add \"libc/arch-mips64/syscalls/___flistxattr.S\"\ng.add \"libc/arch-x86/syscalls/___flistxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/___flistxattr.S\"\ng.add \"libc/bionic/flistxattr.cpp\"\n\n# flock\ng.add \"libc/arch-arm/syscalls/flock.S\"\ng.add \"libc/arch-arm64/syscalls/flock.S\"\ng.add \"libc/arch-mips/syscalls/flock.S\"\ng.add \"libc/arch-mips64/syscalls/flock.S\"\ng.add \"libc/arch-x86/syscalls/flock.S\"\ng.add \"libc/arch-x86_64/syscalls/flock.S\"\n\n# fork\ng.add \"libc/bionic/fork.cpp\"\n\n# fpathconf/pathconf\ng.add \"libc/bionic/pathconf.cpp\"\n\n# fpclassify\ng.add \"libc/bionic/fpclassify.cpp\"\n\n# fremovexattr\ng.add \"libc/arch-arm/syscalls/fremovexattr.S\"\ng.add \"libc/arch-arm64/syscalls/fremovexattr.S\"\ng.add \"libc/arch-mips/syscalls/fremovexattr.S\"\ng.add \"libc/arch-mips64/syscalls/fremovexattr.S\"\ng.add \"libc/arch-x86/syscalls/fremovexattr.S\"\ng.add \"libc/arch-x86_64/syscalls/fremovexattr.S\"\n\n# fsetxattr\ng.add \"libc/arch-arm/syscalls/___fsetxattr.S\"\ng.add \"libc/arch-arm64/syscalls/___fsetxattr.S\"\ng.add \"libc/arch-mips/syscalls/___fsetxattr.S\"\ng.add \"libc/arch-mips64/syscalls/___fsetxattr.S\"\ng.add \"libc/arch-x86/syscalls/___fsetxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/___fsetxattr.S\"\ng.add \"libc/bionic/fsetxattr.cpp\"\n\n# fstat/fstat64/fstatat/fstatat64\ng.add \"libc/arch-arm/syscalls/fstat64.S\"\ng.add \"libc/arch-arm/syscalls/fstatat64.S\"\ng.add \"libc/arch-arm64/syscalls/fstat64.S\"\ng.add \"libc/arch-arm64/syscalls/fstatat64.S\"\ng.add \"libc/arch-mips/syscalls/fstat64.S\"\ng.add \"libc/arch-mips/syscalls/fstatat64.S\"\ng.add \"libc/arch-mips64/bionic/stat.cpp\"\ng.add \"libc/arch-x86/syscalls/fstat64.S\"\ng.add \"libc/arch-x86/syscalls/fstatat64.S\"\ng.add \"libc/arch-x86_64/syscalls/fstat64.S\"\ng.add \"libc/arch-x86_64/syscalls/fstatat64.S\"\n\n# fstatfs/fstatfs64/statfs/statfs64\ng.add \"libc/arch-arm/syscalls/__fstatfs64.S\"\ng.add \"libc/arch-arm/syscalls/__statfs64.S\"\ng.add \"libc/arch-arm64/syscalls/__fstatfs.S\"\ng.add \"libc/arch-arm64/syscalls/__statfs.S\"\ng.add \"libc/arch-mips/syscalls/__fstatfs64.S\"\ng.add \"libc/arch-mips/syscalls/__statfs64.S\"\ng.add \"libc/arch-mips64/syscalls/__fstatfs.S\"\ng.add \"libc/arch-mips64/syscalls/__statfs.S\"\ng.add \"libc/arch-x86/syscalls/__fstatfs64.S\"\ng.add \"libc/arch-x86/syscalls/__statfs64.S\"\ng.add \"libc/arch-x86_64/syscalls/__fstatfs.S\"\ng.add \"libc/arch-x86_64/syscalls/__statfs.S\"\ng.add \"libc/bionic/statvfs.cpp\"\n\n# fsync\ng.add \"libc/arch-arm/syscalls/fsync.S\"\ng.add \"libc/arch-arm64/syscalls/fsync.S\"\ng.add \"libc/arch-mips/syscalls/fsync.S\"\ng.add \"libc/arch-mips64/syscalls/fsync.S\"\ng.add \"libc/arch-x86/syscalls/fsync.S\"\ng.add \"libc/arch-x86_64/syscalls/fsync.S\"\n\n# ftruncate/ftruncate64\ng.add \"libc/arch-arm/syscalls/ftruncate64.S\"\ng.add \"libc/arch-arm64/syscalls/ftruncate.S\"\ng.add \"libc/arch-mips/syscalls/ftruncate64.S\"\ng.add \"libc/arch-mips64/syscalls/ftruncate.S\"\ng.add \"libc/arch-x86/syscalls/ftruncate64.S\"\ng.add \"libc/arch-x86_64/syscalls/ftruncate.S\"\ng.add \"libc/bionic/ftruncate.cpp\"\n\n# futimens\ng.add \"libc/bionic/futimens.cpp\"\n\n# getauxval\ng.add \"libc/bionic/getauxval.cpp\"\n\n# getcwd\ng.add \"libc/arch-arm/syscalls/__getcwd.S\"\ng.add \"libc/arch-arm64/syscalls/__getcwd.S\"\ng.add \"libc/arch-mips/syscalls/__getcwd.S\"\ng.add \"libc/arch-mips64/syscalls/__getcwd.S\"\ng.add \"libc/arch-x86/syscalls/__getcwd.S\"\ng.add \"libc/arch-x86_64/syscalls/__getcwd.S\"\ng.add \"libc/bionic/getcwd.cpp\"\n\n# __getdents64\ng.add \"libc/arch-arm/syscalls/__getdents64.S\"\ng.add \"libc/arch-arm64/syscalls/__getdents64.S\"\ng.add \"libc/arch-mips/syscalls/__getdents64.S\"\ng.add \"libc/arch-mips64/syscalls/__getdents64.S\"\ng.add \"libc/arch-x86/syscalls/__getdents64.S\"\ng.add \"libc/arch-x86_64/syscalls/__getdents64.S\"\n\n# getegid\ng.add \"libc/arch-arm/syscalls/getegid.S\"\ng.add \"libc/arch-arm64/syscalls/getegid.S\"\ng.add \"libc/arch-mips/syscalls/getegid.S\"\ng.add \"libc/arch-mips64/syscalls/getegid.S\"\ng.add \"libc/arch-x86/syscalls/getegid.S\"\ng.add \"libc/arch-x86_64/syscalls/getegid.S\"\n\n# getentropy\ng.add \"libc/bionic/getentropy_linux.c\"\n\n# geteuid\ng.add \"libc/arch-arm/syscalls/geteuid.S\"\ng.add \"libc/arch-arm64/syscalls/geteuid.S\"\ng.add \"libc/arch-mips/syscalls/geteuid.S\"\ng.add \"libc/arch-mips64/syscalls/geteuid.S\"\ng.add \"libc/arch-x86/syscalls/geteuid.S\"\ng.add \"libc/arch-x86_64/syscalls/geteuid.S\"\n\n# getgid\ng.add \"libc/arch-arm/syscalls/getgid.S\"\ng.add \"libc/arch-arm64/syscalls/getgid.S\"\ng.add \"libc/arch-mips/syscalls/getgid.S\"\ng.add \"libc/arch-mips64/syscalls/getgid.S\"\ng.add \"libc/arch-x86/syscalls/getgid.S\"\ng.add \"libc/arch-x86_64/syscalls/getgid.S\"\n\n# getgroups\ng.add \"libc/arch-arm/syscalls/getgroups.S\"\ng.add \"libc/arch-arm64/syscalls/getgroups.S\"\ng.add \"libc/arch-mips/syscalls/getgroups.S\"\ng.add \"libc/arch-mips64/syscalls/getgroups.S\"\ng.add \"libc/arch-x86/syscalls/getgroups.S\"\ng.add \"libc/arch-x86_64/syscalls/getgroups.S\"\n\n# gethostname\ng.add \"libc/bionic/gethostname.cpp\"\n\n# getitimer\ng.add \"libc/arch-arm/syscalls/getitimer.S\"\ng.add \"libc/arch-arm64/syscalls/getitimer.S\"\ng.add \"libc/arch-mips/syscalls/getitimer.S\"\ng.add \"libc/arch-mips64/syscalls/getitimer.S\"\ng.add \"libc/arch-x86/syscalls/getitimer.S\"\ng.add \"libc/arch-x86_64/syscalls/getitimer.S\"\n\n# getpeername\ng.add \"libc/arch-arm/syscalls/getpeername.S\"\ng.add \"libc/arch-arm64/syscalls/getpeername.S\"\ng.add \"libc/arch-mips/syscalls/getpeername.S\"\ng.add \"libc/arch-mips64/syscalls/getpeername.S\"\ng.add \"libc/arch-x86/syscalls/getpeername.S\"\ng.add \"libc/arch-x86_64/syscalls/getpeername.S\"\n\n# getpgid\ng.add \"libc/arch-arm/syscalls/getpgid.S\"\ng.add \"libc/arch-arm64/syscalls/getpgid.S\"\ng.add \"libc/arch-mips/syscalls/getpgid.S\"\ng.add \"libc/arch-mips64/syscalls/getpgid.S\"\ng.add \"libc/arch-x86/syscalls/getpgid.S\"\ng.add \"libc/arch-x86_64/syscalls/getpgid.S\"\n\n# getpgrp\ng.add \"libc/bionic/getpgrp.cpp\"\n\n# getpid\ng.add \"libc/arch-arm/syscalls/__getpid.S\"\ng.add \"libc/arch-arm64/syscalls/__getpid.S\"\ng.add \"libc/arch-mips/syscalls/__getpid.S\"\ng.add \"libc/arch-mips64/syscalls/__getpid.S\"\ng.add \"libc/arch-x86/syscalls/__getpid.S\"\ng.add \"libc/arch-x86_64/syscalls/__getpid.S\"\ng.add \"libc/bionic/getpid.cpp\"\n\n# getppid\ng.add \"libc/arch-arm/syscalls/getppid.S\"\ng.add \"libc/arch-arm64/syscalls/getppid.S\"\ng.add \"libc/arch-mips/syscalls/getppid.S\"\ng.add \"libc/arch-mips64/syscalls/getppid.S\"\ng.add \"libc/arch-x86/syscalls/getppid.S\"\ng.add \"libc/arch-x86_64/syscalls/getppid.S\"\n\n# getpriority\ng.add \"libc/arch-arm/syscalls/__getpriority.S\"\ng.add \"libc/arch-arm64/syscalls/__getpriority.S\"\ng.add \"libc/arch-mips/syscalls/__getpriority.S\"\ng.add \"libc/arch-mips64/syscalls/__getpriority.S\"\ng.add \"libc/arch-x86/syscalls/__getpriority.S\"\ng.add \"libc/arch-x86_64/syscalls/__getpriority.S\"\ng.add \"libc/bionic/getpriority.c\"\n\n# getpwnam/getpwuid\ng.add \"libc/bionic/stubs.cpp\"\n\n# getresgid\ng.add \"libc/arch-arm/syscalls/getresgid.S\"\ng.add \"libc/arch-arm64/syscalls/getresgid.S\"\ng.add \"libc/arch-mips/syscalls/getresgid.S\"\ng.add \"libc/arch-mips64/syscalls/getresgid.S\"\ng.add \"libc/arch-x86/syscalls/getresgid.S\"\ng.add \"libc/arch-x86_64/syscalls/getresgid.S\"\n\n# getresuid\ng.add \"libc/arch-arm/syscalls/getresuid.S\"\ng.add \"libc/arch-arm64/syscalls/getresuid.S\"\ng.add \"libc/arch-mips/syscalls/getresuid.S\"\ng.add \"libc/arch-mips64/syscalls/getresuid.S\"\ng.add \"libc/arch-x86/syscalls/getresuid.S\"\ng.add \"libc/arch-x86_64/syscalls/getresuid.S\"\n\n# getrlimit\ng.add \"libc/arch-arm/syscalls/getrlimit.S\"\ng.add \"libc/arch-arm64/syscalls/getrlimit.S\"\ng.add \"libc/arch-mips/syscalls/getrlimit.S\"\ng.add \"libc/arch-mips64/syscalls/getrlimit.S\"\ng.add \"libc/arch-x86/syscalls/getrlimit.S\"\ng.add \"libc/arch-x86_64/syscalls/getrlimit.S\"\n\n# getrusage\ng.add \"libc/arch-arm/syscalls/getrusage.S\"\ng.add \"libc/arch-arm64/syscalls/getrusage.S\"\ng.add \"libc/arch-mips/syscalls/getrusage.S\"\ng.add \"libc/arch-mips64/syscalls/getrusage.S\"\ng.add \"libc/arch-x86/syscalls/getrusage.S\"\ng.add \"libc/arch-x86_64/syscalls/getrusage.S\"\n\n# getsid\ng.add \"libc/arch-arm/syscalls/getsid.S\"\ng.add \"libc/arch-arm64/syscalls/getsid.S\"\ng.add \"libc/arch-mips/syscalls/getsid.S\"\ng.add \"libc/arch-mips64/syscalls/getsid.S\"\ng.add \"libc/arch-x86/syscalls/getsid.S\"\ng.add \"libc/arch-x86_64/syscalls/getsid.S\"\n\n# getsockname\ng.add \"libc/arch-arm/syscalls/getsockname.S\"\ng.add \"libc/arch-arm64/syscalls/getsockname.S\"\ng.add \"libc/arch-mips/syscalls/getsockname.S\"\ng.add \"libc/arch-mips64/syscalls/getsockname.S\"\ng.add \"libc/arch-x86/syscalls/getsockname.S\"\ng.add \"libc/arch-x86_64/syscalls/getsockname.S\"\n\n# getsockopt\ng.add \"libc/arch-arm/syscalls/getsockopt.S\"\ng.add \"libc/arch-arm64/syscalls/getsockopt.S\"\ng.add \"libc/arch-mips/syscalls/getsockopt.S\"\ng.add \"libc/arch-mips64/syscalls/getsockopt.S\"\ng.add \"libc/arch-x86/syscalls/getsockopt.S\"\ng.add \"libc/arch-x86_64/syscalls/getsockopt.S\"\n\n# gettid\ng.add \"libc/bionic/gettid.cpp\"\n\n# gettimeofday\ng.add \"libc/arch-arm/syscalls/gettimeofday.S\"\ng.add \"libc/arch-arm64/syscalls/__gettimeofday.S\"\ng.add \"libc/arch-mips/syscalls/gettimeofday.S\"\ng.add \"libc/arch-mips64/syscalls/gettimeofday.S\"\ng.add \"libc/arch-x86/syscalls/__gettimeofday.S\"\ng.add \"libc/arch-x86_64/syscalls/__gettimeofday.S\"\n\n# getuid\ng.add \"libc/arch-arm/syscalls/getuid.S\"\ng.add \"libc/arch-arm64/syscalls/getuid.S\"\ng.add \"libc/arch-mips/syscalls/getuid.S\"\ng.add \"libc/arch-mips64/syscalls/getuid.S\"\ng.add \"libc/arch-x86/syscalls/getuid.S\"\ng.add \"libc/arch-x86_64/syscalls/getuid.S\"\n\n# getxattr\ng.add \"libc/arch-arm/syscalls/getxattr.S\"\ng.add \"libc/arch-arm64/syscalls/getxattr.S\"\ng.add \"libc/arch-mips/syscalls/getxattr.S\"\ng.add \"libc/arch-mips64/syscalls/getxattr.S\"\ng.add \"libc/arch-x86/syscalls/getxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/getxattr.S\"\n\n# if_indextoname\ng.add \"libc/bionic/if_indextoname.c\"\n\n# if_nametoindex\ng.add \"libc/bionic/if_nametoindex.c\"\n\n# inet_nsap_ntoa\ng.add \"libc/upstream-netbsd/lib/libc/inet/nsap_addr.c\"\n\n# inet_ntop\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_ntop.c\"\n\n# inet_pton\ng.add \"libc/upstream-openbsd/lib/libc/net/inet_pton.c\"\n\n# init_module\ng.add \"libc/arch-arm/syscalls/init_module.S\"\ng.add \"libc/arch-arm64/syscalls/init_module.S\"\ng.add \"libc/arch-mips/syscalls/init_module.S\"\ng.add \"libc/arch-mips64/syscalls/init_module.S\"\ng.add \"libc/arch-x86/syscalls/init_module.S\"\ng.add \"libc/arch-x86_64/syscalls/init_module.S\"\n\n# initgroups\ng.add \"libc/bionic/initgroups.c\"\n\n# inotify_add_watch\ng.add \"libc/arch-arm/syscalls/inotify_add_watch.S\"\ng.add \"libc/arch-arm64/syscalls/inotify_add_watch.S\"\ng.add \"libc/arch-mips/syscalls/inotify_add_watch.S\"\ng.add \"libc/arch-mips64/syscalls/inotify_add_watch.S\"\ng.add \"libc/arch-x86/syscalls/inotify_add_watch.S\"\ng.add \"libc/arch-x86_64/syscalls/inotify_add_watch.S\"\n\n# inotify_init\ng.add \"libc/arch-arm/syscalls/inotify_init1.S\"\ng.add \"libc/arch-arm64/syscalls/inotify_init1.S\"\ng.add \"libc/arch-mips/syscalls/inotify_init1.S\"\ng.add \"libc/arch-mips64/syscalls/inotify_init1.S\"\ng.add \"libc/arch-x86/syscalls/inotify_init1.S\"\ng.add \"libc/arch-x86_64/syscalls/inotify_init1.S\"\ng.add \"libc/bionic/inotify_init.cpp\"\n\n# inotify_rm_watch\ng.add \"libc/arch-arm/syscalls/inotify_rm_watch.S\"\ng.add \"libc/arch-arm64/syscalls/inotify_rm_watch.S\"\ng.add \"libc/arch-mips/syscalls/inotify_rm_watch.S\"\ng.add \"libc/arch-mips64/syscalls/inotify_rm_watch.S\"\ng.add \"libc/arch-x86/syscalls/inotify_rm_watch.S\"\ng.add \"libc/arch-x86_64/syscalls/inotify_rm_watch.S\"\n\n# ioctl\ng.add \"libc/arch-arm/syscalls/__ioctl.S\"\ng.add \"libc/arch-arm64/syscalls/__ioctl.S\"\ng.add \"libc/arch-mips/syscalls/__ioctl.S\"\ng.add \"libc/arch-mips64/syscalls/__ioctl.S\"\ng.add \"libc/arch-x86/syscalls/__ioctl.S\"\ng.add \"libc/arch-x86_64/syscalls/__ioctl.S\"\ng.add \"libc/bionic/ioctl.c\"\n\n# isatty\ng.add \"libc/bionic/isatty.c\"\n\n# jrand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/jrand48.c\"\n\n# kill\ng.add \"libc/arch-arm/syscalls/kill.S\"\ng.add \"libc/arch-arm64/syscalls/kill.S\"\ng.add \"libc/arch-mips/syscalls/kill.S\"\ng.add \"libc/arch-mips64/syscalls/kill.S\"\ng.add \"libc/arch-x86/syscalls/kill.S\"\ng.add \"libc/arch-x86_64/syscalls/kill.S\"\n\n# klogctl\ng.add \"libc/arch-arm/syscalls/klogctl.S\"\ng.add \"libc/arch-arm64/syscalls/klogctl.S\"\ng.add \"libc/arch-mips/syscalls/klogctl.S\"\ng.add \"libc/arch-mips64/syscalls/klogctl.S\"\ng.add \"libc/arch-x86/syscalls/klogctl.S\"\ng.add \"libc/arch-x86_64/syscalls/klogctl.S\"\n\n# lchown\ng.add \"libc/bionic/lchown.cpp\"\n\n# lgetxattr\ng.add \"libc/arch-arm/syscalls/lgetxattr.S\"\ng.add \"libc/arch-arm64/syscalls/lgetxattr.S\"\ng.add \"libc/arch-mips/syscalls/lgetxattr.S\"\ng.add \"libc/arch-mips64/syscalls/lgetxattr.S\"\ng.add \"libc/arch-x86/syscalls/lgetxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/lgetxattr.S\"\n\n# __libc_current_sigrtmax\ng.add \"libc/bionic/__libc_current_sigrtmax.cpp\"\n\n# __libc_current_sigrtmin\ng.add \"libc/bionic/__libc_current_sigrtmin.cpp\"\n\n# link\ng.add \"libc/bionic/link.cpp\"\n\n# linkat\ng.add \"libc/arch-arm/syscalls/linkat.S\"\ng.add \"libc/arch-arm64/syscalls/linkat.S\"\ng.add \"libc/arch-mips/syscalls/linkat.S\"\ng.add \"libc/arch-mips64/syscalls/linkat.S\"\ng.add \"libc/arch-x86/syscalls/linkat.S\"\ng.add \"libc/arch-x86_64/syscalls/linkat.S\"\n\n# listen\ng.add \"libc/arch-arm/syscalls/listen.S\"\ng.add \"libc/arch-arm64/syscalls/listen.S\"\ng.add \"libc/arch-mips/syscalls/listen.S\"\ng.add \"libc/arch-mips64/syscalls/listen.S\"\ng.add \"libc/arch-x86/syscalls/listen.S\"\ng.add \"libc/arch-x86_64/syscalls/listen.S\"\n\n# listxattr\ng.add \"libc/arch-arm/syscalls/listxattr.S\"\ng.add \"libc/arch-arm64/syscalls/listxattr.S\"\ng.add \"libc/arch-mips/syscalls/listxattr.S\"\ng.add \"libc/arch-mips64/syscalls/listxattr.S\"\ng.add \"libc/arch-x86/syscalls/listxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/listxattr.S\"\n\n# llistxattr\ng.add \"libc/arch-arm/syscalls/llistxattr.S\"\ng.add \"libc/arch-arm64/syscalls/llistxattr.S\"\ng.add \"libc/arch-mips/syscalls/llistxattr.S\"\ng.add \"libc/arch-mips64/syscalls/llistxattr.S\"\ng.add \"libc/arch-x86/syscalls/llistxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/llistxattr.S\"\n\n# __llseek\ng.add \"libc/arch-arm/syscalls/__llseek.S\"\ng.add \"libc/arch-mips/syscalls/__llseek.S\"\ng.add \"libc/arch-x86/syscalls/__llseek.S\"\n\n# lrand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/lrand48.c\"\n\n# lremovexattr\ng.add \"libc/arch-arm/syscalls/lremovexattr.S\"\ng.add \"libc/arch-arm64/syscalls/lremovexattr.S\"\ng.add \"libc/arch-mips/syscalls/lremovexattr.S\"\ng.add \"libc/arch-mips64/syscalls/lremovexattr.S\"\ng.add \"libc/arch-x86/syscalls/lremovexattr.S\"\ng.add \"libc/arch-x86_64/syscalls/lremovexattr.S\"\n\n# lseek\ng.add \"libc/arch-arm/syscalls/lseek.S\"\ng.add \"libc/arch-arm64/syscalls/lseek.S\"\ng.add \"libc/arch-mips/syscalls/lseek.S\"\ng.add \"libc/arch-mips64/syscalls/lseek.S\"\ng.add \"libc/arch-x86/syscalls/lseek.S\"\ng.add \"libc/arch-x86_64/syscalls/lseek.S\"\n\n# lsetxattr\ng.add \"libc/arch-arm/syscalls/lsetxattr.S\"\ng.add \"libc/arch-arm64/syscalls/lsetxattr.S\"\ng.add \"libc/arch-mips/syscalls/lsetxattr.S\"\ng.add \"libc/arch-mips64/syscalls/lsetxattr.S\"\ng.add \"libc/arch-x86/syscalls/lsetxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/lsetxattr.S\"\n\n# lstat/lstat64\ng.add \"libc/bionic/lstat.cpp\"\n\n# madvise\ng.add \"libc/arch-arm/syscalls/madvise.S\"\ng.add \"libc/arch-arm64/syscalls/madvise.S\"\ng.add \"libc/arch-mips/syscalls/madvise.S\"\ng.add \"libc/arch-mips64/syscalls/madvise.S\"\ng.add \"libc/arch-x86/syscalls/madvise.S\"\ng.add \"libc/arch-x86_64/syscalls/madvise.S\"\n\n# __memcpy_chk\ng.add \"libc/bionic/__memcpy_chk.cpp\"\n\n# __memmove_chk\ng.add \"libc/bionic/__memmove_chk.cpp\"\n\n# __memset_chk\ng.add \"libc/bionic/__memset_chk.cpp\"\n\n# mempcpy\ng.add \"libc/bionic/mempcpy.cpp\"\n\n# mincore\ng.add \"libc/arch-arm/syscalls/mincore.S\"\ng.add \"libc/arch-arm64/syscalls/mincore.S\"\ng.add \"libc/arch-mips/syscalls/mincore.S\"\ng.add \"libc/arch-mips64/syscalls/mincore.S\"\ng.add \"libc/arch-x86/syscalls/mincore.S\"\ng.add \"libc/arch-x86_64/syscalls/mincore.S\"\n\n# mkdir/mkdirat\ng.add \"libc/arch-arm/syscalls/mkdirat.S\"\ng.add \"libc/arch-arm64/syscalls/mkdirat.S\"\ng.add \"libc/arch-mips/syscalls/mkdirat.S\"\ng.add \"libc/arch-mips64/syscalls/mkdirat.S\"\ng.add \"libc/arch-x86/syscalls/mkdirat.S\"\ng.add \"libc/arch-x86_64/syscalls/mkdirat.S\"\ng.add \"libc/bionic/mkdir.cpp\"\n\n# mkfifo\ng.add \"libc/bionic/mkfifo.cpp\"\n\n# mknod\ng.add \"libc/bionic/mknod.cpp\"\n\n# mknodat\ng.add \"libc/arch-arm/syscalls/mknodat.S\"\ng.add \"libc/arch-arm64/syscalls/mknodat.S\"\ng.add \"libc/arch-mips/syscalls/mknodat.S\"\ng.add \"libc/arch-mips64/syscalls/mknodat.S\"\ng.add \"libc/arch-x86/syscalls/mknodat.S\"\ng.add \"libc/arch-x86_64/syscalls/mknodat.S\"\n\n# mlock\ng.add \"libc/arch-arm/syscalls/mlock.S\"\ng.add \"libc/arch-arm64/syscalls/mlock.S\"\ng.add \"libc/arch-mips/syscalls/mlock.S\"\ng.add \"libc/arch-mips64/syscalls/mlock.S\"\ng.add \"libc/arch-x86/syscalls/mlock.S\"\ng.add \"libc/arch-x86_64/syscalls/mlock.S\"\n\n# mlockall\ng.add \"libc/arch-arm/syscalls/mlockall.S\"\ng.add \"libc/arch-arm64/syscalls/mlockall.S\"\ng.add \"libc/arch-mips/syscalls/mlockall.S\"\ng.add \"libc/arch-mips64/syscalls/mlockall.S\"\ng.add \"libc/arch-x86/syscalls/mlockall.S\"\ng.add \"libc/arch-x86_64/syscalls/mlockall.S\"\n\n# mmap/mmap64\ng.add \"libc/arch-arm/syscalls/__mmap2.S\"\ng.add \"libc/arch-arm64/syscalls/mmap.S\"\ng.add \"libc/arch-mips/syscalls/__mmap2.S\"\ng.add \"libc/arch-mips64/syscalls/mmap.S\"\ng.add \"libc/arch-x86/syscalls/__mmap2.S\"\ng.add \"libc/arch-x86_64/syscalls/mmap.S\"\ng.add \"libc/bionic/mmap.cpp\"\n\n# mount\ng.add \"libc/arch-arm/syscalls/mount.S\"\ng.add \"libc/arch-arm64/syscalls/mount.S\"\ng.add \"libc/arch-mips/syscalls/mount.S\"\ng.add \"libc/arch-mips64/syscalls/mount.S\"\ng.add \"libc/arch-x86/syscalls/mount.S\"\ng.add \"libc/arch-x86_64/syscalls/mount.S\"\n\n# mprotect\ng.add \"libc/arch-arm/syscalls/mprotect.S\"\ng.add \"libc/arch-arm64/syscalls/mprotect.S\"\ng.add \"libc/arch-mips/syscalls/mprotect.S\"\ng.add \"libc/arch-mips64/syscalls/mprotect.S\"\ng.add \"libc/arch-x86/syscalls/mprotect.S\"\ng.add \"libc/arch-x86_64/syscalls/mprotect.S\"\n\n# mrand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/mrand48.c\"\n\n# mremap\ng.add \"libc/arch-arm/syscalls/mremap.S\"\ng.add \"libc/arch-arm64/syscalls/mremap.S\"\ng.add \"libc/arch-mips/syscalls/mremap.S\"\ng.add \"libc/arch-mips64/syscalls/mremap.S\"\ng.add \"libc/arch-x86/syscalls/mremap.S\"\ng.add \"libc/arch-x86_64/syscalls/mremap.S\"\n\n# msync\ng.add \"libc/arch-arm/syscalls/msync.S\"\ng.add \"libc/arch-arm64/syscalls/msync.S\"\ng.add \"libc/arch-mips/syscalls/msync.S\"\ng.add \"libc/arch-mips64/syscalls/msync.S\"\ng.add \"libc/arch-x86/syscalls/msync.S\"\ng.add \"libc/arch-x86_64/syscalls/msync.S\"\n\n# munlock\ng.add \"libc/arch-arm/syscalls/munlock.S\"\ng.add \"libc/arch-arm64/syscalls/munlock.S\"\ng.add \"libc/arch-mips/syscalls/munlock.S\"\ng.add \"libc/arch-mips64/syscalls/munlock.S\"\ng.add \"libc/arch-x86/syscalls/munlock.S\"\ng.add \"libc/arch-x86_64/syscalls/munlock.S\"\n\n# munlockall\ng.add \"libc/arch-arm/syscalls/munlockall.S\"\ng.add \"libc/arch-arm64/syscalls/munlockall.S\"\ng.add \"libc/arch-mips/syscalls/munlockall.S\"\ng.add \"libc/arch-mips64/syscalls/munlockall.S\"\ng.add \"libc/arch-x86/syscalls/munlockall.S\"\ng.add \"libc/arch-x86_64/syscalls/munlockall.S\"\n\n# munmap\ng.add \"libc/arch-arm/syscalls/munmap.S\"\ng.add \"libc/arch-arm64/syscalls/munmap.S\"\ng.add \"libc/arch-mips/syscalls/munmap.S\"\ng.add \"libc/arch-mips64/syscalls/munmap.S\"\ng.add \"libc/arch-x86/syscalls/munmap.S\"\ng.add \"libc/arch-x86_64/syscalls/munmap.S\"\n\n# nanosleep\ng.add \"libc/arch-arm/syscalls/nanosleep.S\"\ng.add \"libc/arch-arm64/syscalls/nanosleep.S\"\ng.add \"libc/arch-mips/syscalls/nanosleep.S\"\ng.add \"libc/arch-mips64/syscalls/nanosleep.S\"\ng.add \"libc/arch-x86/syscalls/nanosleep.S\"\ng.add \"libc/arch-x86_64/syscalls/nanosleep.S\"\n\n# nrand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/nrand48.c\"\n\n# open\ng.add \"libc/arch-arm/syscalls/__openat.S\"\ng.add \"libc/arch-arm64/syscalls/__openat.S\"\ng.add \"libc/arch-mips/syscalls/__openat.S\"\ng.add \"libc/arch-mips64/syscalls/__openat.S\"\ng.add \"libc/arch-x86/syscalls/__openat.S\"\ng.add \"libc/arch-x86_64/syscalls/__openat.S\"\ng.add \"libc/bionic/open.cpp\"\n\n# pause\ng.add \"libc/bionic/pause.cpp\"\n\n# personality\ng.add \"libc/arch-arm/syscalls/personality.S\"\ng.add \"libc/arch-arm64/syscalls/personality.S\"\ng.add \"libc/arch-mips/syscalls/personality.S\"\ng.add \"libc/arch-mips64/syscalls/personality.S\"\ng.add \"libc/arch-x86/syscalls/personality.S\"\ng.add \"libc/arch-x86_64/syscalls/personality.S\"\n\n# pipe\ng.add \"libc/bionic/pipe.cpp\"\n\n# pipe2\ng.add \"libc/arch-arm/syscalls/pipe2.S\"\ng.add \"libc/arch-arm64/syscalls/pipe2.S\"\ng.add \"libc/arch-mips/syscalls/pipe2.S\"\ng.add \"libc/arch-mips64/syscalls/pipe2.S\"\ng.add \"libc/arch-x86/syscalls/pipe2.S\"\ng.add \"libc/arch-x86_64/syscalls/pipe2.S\"\n\n# poll\ng.add \"libc/arch-arm/syscalls/__ppoll.S\"\ng.add \"libc/arch-arm64/syscalls/__ppoll.S\"\ng.add \"libc/arch-mips/syscalls/__ppoll.S\"\ng.add \"libc/arch-mips64/syscalls/__ppoll.S\"\ng.add \"libc/arch-x86/syscalls/__ppoll.S\"\ng.add \"libc/arch-x86_64/syscalls/__ppoll.S\"\ng.add \"libc/bionic/poll.cpp\"\n\n# __poll_chk\ng.add \"libc/bionic/__poll_chk.cpp\"\n\n# posix_madvise\ng.add \"libc/bionic/posix_madvise.cpp\"\n\n# prctl\ng.add \"libc/arch-arm/syscalls/prctl.S\"\ng.add \"libc/arch-arm64/syscalls/prctl.S\"\ng.add \"libc/arch-mips/syscalls/prctl.S\"\ng.add \"libc/arch-mips64/syscalls/prctl.S\"\ng.add \"libc/arch-x86/syscalls/prctl.S\"\ng.add \"libc/arch-x86_64/syscalls/prctl.S\"\n\n# pread64\ng.add \"libc/arch-arm/syscalls/pread64.S\"\ng.add \"libc/arch-arm64/syscalls/pread64.S\"\ng.add \"libc/arch-mips/syscalls/pread64.S\"\ng.add \"libc/arch-mips64/syscalls/pread64.S\"\ng.add \"libc/arch-x86/syscalls/pread64.S\"\ng.add \"libc/arch-x86_64/syscalls/pread64.S\"\n\n# prlimit/prlimit64\ng.add \"libc/arch-arm/syscalls/prlimit64.S\"\ng.add \"libc/arch-arm64/syscalls/prlimit64.S\"\ng.add \"libc/arch-mips/syscalls/prlimit64.S\"\ng.add \"libc/arch-mips64/syscalls/prlimit64.S\"\ng.add \"libc/arch-x86/syscalls/prlimit64.S\"\ng.add \"libc/arch-x86_64/syscalls/prlimit64.S\"\n\n# __pselect6\ng.add \"libc/arch-arm/syscalls/__pselect6.S\"\ng.add \"libc/arch-arm64/syscalls/__pselect6.S\"\ng.add \"libc/arch-mips/syscalls/__pselect6.S\"\ng.add \"libc/arch-mips64/syscalls/__pselect6.S\"\ng.add \"libc/arch-x86/syscalls/__pselect6.S\"\ng.add \"libc/arch-x86_64/syscalls/__pselect6.S\"\n\n# psignal/psiginfo\ng.add \"libc/upstream-netbsd/lib/libc/gen/psignal.c\"\n\n# pthread\ng.add \"libc/arch-common/bionic/pthread_atfork.h\"\ng.add \"libc/bionic/__cxa_thread_atexit_impl.cpp\"\ng.add \"libc/bionic/clone.cpp\"\ng.add \"libc/bionic/pthread_atfork.cpp\"\ng.add \"libc/bionic/pthread_attr.cpp\"\ng.add \"libc/bionic/pthread_cond.cpp\"\ng.add \"libc/bionic/pthread_create.cpp\"\ng.add \"libc/bionic/pthread_detach.cpp\"\ng.add \"libc/bionic/pthread_equal.cpp\"\ng.add \"libc/bionic/pthread_exit.cpp\"\ng.add \"libc/bionic/pthread_getcpuclockid.cpp\"\ng.add \"libc/bionic/pthread_getschedparam.cpp\"\ng.add \"libc/bionic/pthread_gettid_np.cpp\"\ng.add \"libc/bionic/pthread_internal.cpp\"\ng.add \"libc/bionic/pthread_internal.h\"\ng.add \"libc/bionic/pthread_join.cpp\"\ng.add \"libc/bionic/pthread_key.cpp\"\ng.add \"libc/bionic/pthread_kill.cpp\"\ng.add \"libc/bionic/pthread_mutex.cpp\"\ng.add \"libc/bionic/pthread_once.cpp\"\ng.add \"libc/bionic/pthread_rwlock.cpp\"\ng.add \"libc/bionic/pthread_self.cpp\"\ng.add \"libc/bionic/pthread_setname_np.cpp\"\ng.add \"libc/bionic/pthread_setschedparam.cpp\"\ng.add \"libc/bionic/pthread_sigmask.cpp\"\n\n# ptrace\ng.add \"libc/arch-arm/syscalls/__ptrace.S\"\ng.add \"libc/arch-arm64/syscalls/__ptrace.S\"\ng.add \"libc/arch-mips/syscalls/__ptrace.S\"\ng.add \"libc/arch-mips64/syscalls/__ptrace.S\"\ng.add \"libc/arch-x86/syscalls/__ptrace.S\"\ng.add \"libc/arch-x86_64/syscalls/__ptrace.S\"\ng.add \"libc/bionic/ptrace.cpp\"\n\n# pututline\ng.add \"libc/bionic/pututline.c\"\n\n# pwrite64\ng.add \"libc/arch-arm/syscalls/pwrite64.S\"\ng.add \"libc/arch-arm64/syscalls/pwrite64.S\"\ng.add \"libc/arch-mips/syscalls/pwrite64.S\"\ng.add \"libc/arch-mips64/syscalls/pwrite64.S\"\ng.add \"libc/arch-x86/syscalls/pwrite64.S\"\ng.add \"libc/arch-x86_64/syscalls/pwrite64.S\"\n\n# raise\ng.add \"libc/bionic/raise.cpp\"\n\n# rand/srand\ng.add \"libc/bionic/rand.cpp\"\n\n# read\ng.add \"libc/arch-arm/syscalls/read.S\"\ng.add \"libc/arch-arm64/syscalls/read.S\"\ng.add \"libc/arch-mips/syscalls/read.S\"\ng.add \"libc/arch-mips64/syscalls/read.S\"\ng.add \"libc/arch-x86/syscalls/read.S\"\ng.add \"libc/arch-x86_64/syscalls/read.S\"\n\n# __read_chk\ng.add \"libc/bionic/__read_chk.cpp\"\n\n# readahead\ng.add \"libc/arch-arm/syscalls/readahead.S\"\ng.add \"libc/arch-arm64/syscalls/readahead.S\"\ng.add \"libc/arch-mips/syscalls/readahead.S\"\ng.add \"libc/arch-mips64/syscalls/readahead.S\"\ng.add \"libc/arch-x86/syscalls/readahead.S\"\ng.add \"libc/arch-x86_64/syscalls/readahead.S\"\n\n# readlink\ng.add \"libc/bionic/readlink.cpp\"\n\n# readlinkat\ng.add \"libc/arch-arm/syscalls/readlinkat.S\"\ng.add \"libc/arch-arm64/syscalls/readlinkat.S\"\ng.add \"libc/arch-mips/syscalls/readlinkat.S\"\ng.add \"libc/arch-mips64/syscalls/readlinkat.S\"\ng.add \"libc/arch-x86/syscalls/readlinkat.S\"\ng.add \"libc/arch-x86_64/syscalls/readlinkat.S\"\n\n# readv\ng.add \"libc/arch-arm/syscalls/readv.S\"\ng.add \"libc/arch-arm64/syscalls/readv.S\"\ng.add \"libc/arch-mips/syscalls/readv.S\"\ng.add \"libc/arch-mips64/syscalls/readv.S\"\ng.add \"libc/arch-x86/syscalls/readv.S\"\ng.add \"libc/arch-x86_64/syscalls/readv.S\"\n\n# reboot\ng.add \"libc/arch-arm/syscalls/__reboot.S\"\ng.add \"libc/arch-arm64/syscalls/__reboot.S\"\ng.add \"libc/arch-mips/syscalls/__reboot.S\"\ng.add \"libc/arch-mips64/syscalls/__reboot.S\"\ng.add \"libc/arch-x86/syscalls/__reboot.S\"\ng.add \"libc/arch-x86_64/syscalls/__reboot.S\"\ng.add \"libc/bionic/reboot.cpp\"\n\n# recv\ng.add \"libc/bionic/recv.cpp\"\n\n# __recvfrom_chk\ng.add \"libc/bionic/__recvfrom_chk.cpp\"\n\n# recvfrom\ng.add \"libc/arch-arm/syscalls/recvfrom.S\"\ng.add \"libc/arch-arm64/syscalls/recvfrom.S\"\ng.add \"libc/arch-mips/syscalls/recvfrom.S\"\ng.add \"libc/arch-mips64/syscalls/recvfrom.S\"\ng.add \"libc/arch-x86/syscalls/recvfrom.S\"\ng.add \"libc/arch-x86_64/syscalls/recvfrom.S\"\n\n# recvmmsg\ng.add \"libc/arch-arm/syscalls/recvmmsg.S\"\ng.add \"libc/arch-arm64/syscalls/recvmmsg.S\"\ng.add \"libc/arch-mips/syscalls/recvmmsg.S\"\ng.add \"libc/arch-mips64/syscalls/recvmmsg.S\"\ng.add \"libc/arch-x86/syscalls/recvmmsg.S\"\ng.add \"libc/arch-x86_64/syscalls/recvmmsg.S\"\n\n# recvmsg\ng.add \"libc/arch-arm/syscalls/recvmsg.S\"\ng.add \"libc/arch-arm64/syscalls/recvmsg.S\"\ng.add \"libc/arch-mips/syscalls/recvmsg.S\"\ng.add \"libc/arch-mips64/syscalls/recvmsg.S\"\ng.add \"libc/arch-x86/syscalls/recvmsg.S\"\ng.add \"libc/arch-x86_64/syscalls/recvmsg.S\"\n\n# removexattr\ng.add \"libc/arch-arm/syscalls/removexattr.S\"\ng.add \"libc/arch-arm64/syscalls/removexattr.S\"\ng.add \"libc/arch-mips/syscalls/removexattr.S\"\ng.add \"libc/arch-mips64/syscalls/removexattr.S\"\ng.add \"libc/arch-x86/syscalls/removexattr.S\"\ng.add \"libc/arch-x86_64/syscalls/removexattr.S\"\n\n# rename\ng.add \"libc/bionic/rename.cpp\"\n\n# renameat\ng.add \"libc/arch-arm/syscalls/renameat.S\"\ng.add \"libc/arch-arm64/syscalls/renameat.S\"\ng.add \"libc/arch-mips/syscalls/renameat.S\"\ng.add \"libc/arch-mips64/syscalls/renameat.S\"\ng.add \"libc/arch-x86/syscalls/renameat.S\"\ng.add \"libc/arch-x86_64/syscalls/renameat.S\"\n\n# rmdir\ng.add \"libc/bionic/rmdir.cpp\"\n\n# __rt_sigaction\ng.add \"libc/arch-arm/syscalls/__rt_sigaction.S\"\ng.add \"libc/arch-arm64/syscalls/__rt_sigaction.S\"\ng.add \"libc/arch-mips/syscalls/__rt_sigaction.S\"\ng.add \"libc/arch-mips64/syscalls/__rt_sigaction.S\"\ng.add \"libc/arch-x86/syscalls/__rt_sigaction.S\"\ng.add \"libc/arch-x86_64/syscalls/__rt_sigaction.S\"\n\n# __rt_sigpending\ng.add \"libc/arch-arm/syscalls/__rt_sigpending.S\"\ng.add \"libc/arch-arm64/syscalls/__rt_sigpending.S\"\ng.add \"libc/arch-mips/syscalls/__rt_sigpending.S\"\ng.add \"libc/arch-mips64/syscalls/__rt_sigpending.S\"\ng.add \"libc/arch-x86/syscalls/__rt_sigpending.S\"\ng.add \"libc/arch-x86_64/syscalls/__rt_sigpending.S\"\n\n# __rt_sigprocmask\ng.add \"libc/arch-arm/syscalls/__rt_sigprocmask.S\"\ng.add \"libc/arch-arm64/syscalls/__rt_sigprocmask.S\"\ng.add \"libc/arch-mips/syscalls/__rt_sigprocmask.S\"\ng.add \"libc/arch-mips64/syscalls/__rt_sigprocmask.S\"\ng.add \"libc/arch-x86/syscalls/__rt_sigprocmask.S\"\ng.add \"libc/arch-x86_64/syscalls/__rt_sigprocmask.S\"\n\n# __rt_sigsuspend\ng.add \"libc/arch-arm/syscalls/__rt_sigsuspend.S\"\ng.add \"libc/arch-arm64/syscalls/__rt_sigsuspend.S\"\ng.add \"libc/arch-mips/syscalls/__rt_sigsuspend.S\"\ng.add \"libc/arch-mips64/syscalls/__rt_sigsuspend.S\"\ng.add \"libc/arch-x86/syscalls/__rt_sigsuspend.S\"\ng.add \"libc/arch-x86_64/syscalls/__rt_sigsuspend.S\"\n\n# __rt_sigtimedwait\ng.add \"libc/arch-arm/syscalls/__rt_sigtimedwait.S\"\ng.add \"libc/arch-arm64/syscalls/__rt_sigtimedwait.S\"\ng.add \"libc/arch-mips/syscalls/__rt_sigtimedwait.S\"\ng.add \"libc/arch-mips64/syscalls/__rt_sigtimedwait.S\"\ng.add \"libc/arch-x86/syscalls/__rt_sigtimedwait.S\"\ng.add \"libc/arch-x86_64/syscalls/__rt_sigtimedwait.S\"\n\n# sbrk\ng.add \"libc/bionic/brk.cpp\"\n\n# scandir\ng.add \"libc/bionic/scandir.cpp\"\n\n# sched_getaffinity\ng.add \"libc/arch-arm/syscalls/__sched_getaffinity.S\"\ng.add \"libc/arch-arm64/syscalls/__sched_getaffinity.S\"\ng.add \"libc/arch-mips/syscalls/__sched_getaffinity.S\"\ng.add \"libc/arch-mips64/syscalls/__sched_getaffinity.S\"\ng.add \"libc/arch-x86/syscalls/__sched_getaffinity.S\"\ng.add \"libc/arch-x86_64/syscalls/__sched_getaffinity.S\"\ng.add \"libc/bionic/sched_getaffinity.cpp\"\n\n# sched_getcpu\ng.add \"libc/bionic/sched_getcpu.cpp\"\ng.add \"libc/arch-arm/syscalls/__getcpu.S\"\ng.add \"libc/arch-arm64/syscalls/__getcpu.S\"\ng.add \"libc/arch-mips/syscalls/__getcpu.S\"\ng.add \"libc/arch-mips64/syscalls/__getcpu.S\"\ng.add \"libc/arch-x86/syscalls/__getcpu.S\"\ng.add \"libc/arch-x86_64/syscalls/__getcpu.S\"\n\n# sched_get_priority_max\ng.add \"libc/arch-arm/syscalls/sched_get_priority_max.S\"\ng.add \"libc/arch-arm64/syscalls/sched_get_priority_max.S\"\ng.add \"libc/arch-mips/syscalls/sched_get_priority_max.S\"\ng.add \"libc/arch-mips64/syscalls/sched_get_priority_max.S\"\ng.add \"libc/arch-x86/syscalls/sched_get_priority_max.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_get_priority_max.S\"\n\n# sched_get_priority_min\ng.add \"libc/arch-arm/syscalls/sched_get_priority_min.S\"\ng.add \"libc/arch-arm64/syscalls/sched_get_priority_min.S\"\ng.add \"libc/arch-mips/syscalls/sched_get_priority_min.S\"\ng.add \"libc/arch-mips64/syscalls/sched_get_priority_min.S\"\ng.add \"libc/arch-x86/syscalls/sched_get_priority_min.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_get_priority_min.S\"\n\n# sched_getparam\ng.add \"libc/arch-arm/syscalls/sched_getparam.S\"\ng.add \"libc/arch-arm64/syscalls/sched_getparam.S\"\ng.add \"libc/arch-mips/syscalls/sched_getparam.S\"\ng.add \"libc/arch-mips64/syscalls/sched_getparam.S\"\ng.add \"libc/arch-x86/syscalls/sched_getparam.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_getparam.S\"\n\n# sched_getscheduler\ng.add \"libc/arch-arm/syscalls/sched_getscheduler.S\"\ng.add \"libc/arch-arm64/syscalls/sched_getscheduler.S\"\ng.add \"libc/arch-mips/syscalls/sched_getscheduler.S\"\ng.add \"libc/arch-mips64/syscalls/sched_getscheduler.S\"\ng.add \"libc/arch-x86/syscalls/sched_getscheduler.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_getscheduler.S\"\n\n# sched_cpualloc\ng.add \"libc/bionic/sched_cpualloc.c\"\n\n# sched_cpucount\ng.add \"libc/bionic/sched_cpucount.c\"\n\n# sched_rr_get_interval\ng.add \"libc/arch-arm/syscalls/sched_rr_get_interval.S\"\ng.add \"libc/arch-arm64/syscalls/sched_rr_get_interval.S\"\ng.add \"libc/arch-mips/syscalls/sched_rr_get_interval.S\"\ng.add \"libc/arch-mips64/syscalls/sched_rr_get_interval.S\"\ng.add \"libc/arch-x86/syscalls/sched_rr_get_interval.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_rr_get_interval.S\"\n\n# sched_setaffinity\ng.add \"libc/arch-arm/syscalls/sched_setaffinity.S\"\ng.add \"libc/arch-arm64/syscalls/sched_setaffinity.S\"\ng.add \"libc/arch-mips/syscalls/sched_setaffinity.S\"\ng.add \"libc/arch-mips64/syscalls/sched_setaffinity.S\"\ng.add \"libc/arch-x86/syscalls/sched_setaffinity.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_setaffinity.S\"\n\n# sched_setparam\ng.add \"libc/arch-arm/syscalls/sched_setparam.S\"\ng.add \"libc/arch-arm64/syscalls/sched_setparam.S\"\ng.add \"libc/arch-mips/syscalls/sched_setparam.S\"\ng.add \"libc/arch-mips64/syscalls/sched_setparam.S\"\ng.add \"libc/arch-x86/syscalls/sched_setparam.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_setparam.S\"\n\n# sched_setscheduler\ng.add \"libc/arch-arm/syscalls/sched_setscheduler.S\"\ng.add \"libc/arch-arm64/syscalls/sched_setscheduler.S\"\ng.add \"libc/arch-mips/syscalls/sched_setscheduler.S\"\ng.add \"libc/arch-mips64/syscalls/sched_setscheduler.S\"\ng.add \"libc/arch-x86/syscalls/sched_setscheduler.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_setscheduler.S\"\n\n# sched_yield\ng.add \"libc/arch-arm/syscalls/sched_yield.S\"\ng.add \"libc/arch-arm64/syscalls/sched_yield.S\"\ng.add \"libc/arch-mips/syscalls/sched_yield.S\"\ng.add \"libc/arch-mips64/syscalls/sched_yield.S\"\ng.add \"libc/arch-x86/syscalls/sched_yield.S\"\ng.add \"libc/arch-x86_64/syscalls/sched_yield.S\"\n\n# seed48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/seed48.c\"\n\n# semaphore\ng.add \"libc/bionic/semaphore.cpp\"\n\n# send\ng.add \"libc/bionic/send.cpp\"\n\n# sendfile/sendfile64\ng.add \"libc/arch-arm/syscalls/sendfile.S\"\ng.add \"libc/arch-arm/syscalls/sendfile64.S\"\ng.add \"libc/arch-arm64/syscalls/sendfile.S\"\ng.add \"libc/arch-mips/syscalls/sendfile.S\"\ng.add \"libc/arch-mips/syscalls/sendfile64.S\"\ng.add \"libc/arch-mips64/syscalls/sendfile.S\"\ng.add \"libc/arch-x86/syscalls/sendfile.S\"\ng.add \"libc/arch-x86/syscalls/sendfile64.S\"\ng.add \"libc/arch-x86_64/syscalls/sendfile.S\"\n\n# sendmmsg\ng.add \"libc/arch-arm/syscalls/sendmmsg.S\"\ng.add \"libc/arch-arm64/syscalls/sendmmsg.S\"\ng.add \"libc/arch-mips/syscalls/sendmmsg.S\"\ng.add \"libc/arch-mips64/syscalls/sendmmsg.S\"\ng.add \"libc/arch-x86/syscalls/sendmmsg.S\"\ng.add \"libc/arch-x86_64/syscalls/sendmmsg.S\"\n\n# sendmsg\ng.add \"libc/arch-arm/syscalls/sendmsg.S\"\ng.add \"libc/arch-arm64/syscalls/sendmsg.S\"\ng.add \"libc/arch-mips/syscalls/sendmsg.S\"\ng.add \"libc/arch-mips64/syscalls/sendmsg.S\"\ng.add \"libc/arch-x86/syscalls/sendmsg.S\"\ng.add \"libc/arch-x86_64/syscalls/sendmsg.S\"\n\n# sendto\ng.add \"libc/arch-arm/syscalls/sendto.S\"\ng.add \"libc/arch-arm64/syscalls/sendto.S\"\ng.add \"libc/arch-mips/syscalls/sendto.S\"\ng.add \"libc/arch-mips64/syscalls/sendto.S\"\ng.add \"libc/arch-x86/syscalls/sendto.S\"\ng.add \"libc/arch-x86_64/syscalls/sendto.S\"\n\n# __set_errno\ng.add \"libc/bionic/__set_errno.cpp\"\n\n# __set_tid_address\ng.add \"libc/arch-arm/syscalls/__set_tid_address.S\"\ng.add \"libc/arch-arm64/syscalls/__set_tid_address.S\"\ng.add \"libc/arch-mips/syscalls/__set_tid_address.S\"\ng.add \"libc/arch-mips64/syscalls/__set_tid_address.S\"\ng.add \"libc/arch-x86/syscalls/__set_tid_address.S\"\ng.add \"libc/arch-x86_64/syscalls/__set_tid_address.S\"\n\n# setegid\ng.add \"libc/bionic/setegid.cpp\"\n\n# seteuid\ng.add \"libc/bionic/seteuid.cpp\"\n\n# setfsgid\ng.add \"libc/arch-arm/syscalls/setfsgid.S\"\ng.add \"libc/arch-arm64/syscalls/setfsgid.S\"\ng.add \"libc/arch-mips/syscalls/setfsgid.S\"\ng.add \"libc/arch-mips64/syscalls/setfsgid.S\"\ng.add \"libc/arch-x86/syscalls/setfsgid.S\"\ng.add \"libc/arch-x86_64/syscalls/setfsgid.S\"\n\n# setfsuid\ng.add \"libc/arch-arm/syscalls/setfsuid.S\"\ng.add \"libc/arch-arm64/syscalls/setfsuid.S\"\ng.add \"libc/arch-mips/syscalls/setfsuid.S\"\ng.add \"libc/arch-mips64/syscalls/setfsuid.S\"\ng.add \"libc/arch-x86/syscalls/setfsuid.S\"\ng.add \"libc/arch-x86_64/syscalls/setfsuid.S\"\n\n# setgid\ng.add \"libc/arch-arm/syscalls/setgid.S\"\ng.add \"libc/arch-arm64/syscalls/setgid.S\"\ng.add \"libc/arch-mips/syscalls/setgid.S\"\ng.add \"libc/arch-mips64/syscalls/setgid.S\"\ng.add \"libc/arch-x86/syscalls/setgid.S\"\ng.add \"libc/arch-x86_64/syscalls/setgid.S\"\n\n# setgroups\ng.add \"libc/arch-arm/syscalls/setgroups.S\"\ng.add \"libc/arch-arm64/syscalls/setgroups.S\"\ng.add \"libc/arch-mips/syscalls/setgroups.S\"\ng.add \"libc/arch-mips64/syscalls/setgroups.S\"\ng.add \"libc/arch-x86/syscalls/setgroups.S\"\ng.add \"libc/arch-x86_64/syscalls/setgroups.S\"\n\n# sethostname\ng.add \"libc/arch-arm/syscalls/sethostname.S\"\ng.add \"libc/arch-arm64/syscalls/sethostname.S\"\ng.add \"libc/arch-mips/syscalls/sethostname.S\"\ng.add \"libc/arch-mips64/syscalls/sethostname.S\"\ng.add \"libc/arch-x86/syscalls/sethostname.S\"\ng.add \"libc/arch-x86_64/syscalls/sethostname.S\"\n\n# setitimer\ng.add \"libc/arch-arm/syscalls/setitimer.S\"\ng.add \"libc/arch-arm64/syscalls/setitimer.S\"\ng.add \"libc/arch-mips/syscalls/setitimer.S\"\ng.add \"libc/arch-mips64/syscalls/setitimer.S\"\ng.add \"libc/arch-x86/syscalls/setitimer.S\"\ng.add \"libc/arch-x86_64/syscalls/setitimer.S\"\n\n# setmntent\ng.add \"libc/bionic/mntent.cpp\"\n\n# setns\ng.add \"libc/arch-arm/syscalls/setns.S\"\ng.add \"libc/arch-arm64/syscalls/setns.S\"\ng.add \"libc/arch-mips/syscalls/setns.S\"\ng.add \"libc/arch-mips64/syscalls/setns.S\"\ng.add \"libc/arch-x86/syscalls/setns.S\"\ng.add \"libc/arch-x86_64/syscalls/setns.S\"\n\n# setpgid\ng.add \"libc/arch-arm/syscalls/setpgid.S\"\ng.add \"libc/arch-arm64/syscalls/setpgid.S\"\ng.add \"libc/arch-mips/syscalls/setpgid.S\"\ng.add \"libc/arch-mips64/syscalls/setpgid.S\"\ng.add \"libc/arch-x86/syscalls/setpgid.S\"\ng.add \"libc/arch-x86_64/syscalls/setpgid.S\"\n\n# setpgrp\ng.add \"libc/bionic/setpgrp.cpp\"\n\n# setpriority\ng.add \"libc/arch-arm/syscalls/setpriority.S\"\ng.add \"libc/arch-arm64/syscalls/setpriority.S\"\ng.add \"libc/arch-mips/syscalls/setpriority.S\"\ng.add \"libc/arch-mips64/syscalls/setpriority.S\"\ng.add \"libc/arch-x86/syscalls/setpriority.S\"\ng.add \"libc/arch-x86_64/syscalls/setpriority.S\"\n\n# setregid\ng.add \"libc/arch-arm/syscalls/setregid.S\"\ng.add \"libc/arch-arm64/syscalls/setregid.S\"\ng.add \"libc/arch-mips/syscalls/setregid.S\"\ng.add \"libc/arch-mips64/syscalls/setregid.S\"\ng.add \"libc/arch-x86/syscalls/setregid.S\"\ng.add \"libc/arch-x86_64/syscalls/setregid.S\"\n\n# setresgid\ng.add \"libc/arch-arm/syscalls/setresgid.S\"\ng.add \"libc/arch-arm64/syscalls/setresgid.S\"\ng.add \"libc/arch-mips/syscalls/setresgid.S\"\ng.add \"libc/arch-mips64/syscalls/setresgid.S\"\ng.add \"libc/arch-x86/syscalls/setresgid.S\"\ng.add \"libc/arch-x86_64/syscalls/setresgid.S\"\n\n# setresuid\ng.add \"libc/arch-arm/syscalls/setresuid.S\"\ng.add \"libc/arch-arm64/syscalls/setresuid.S\"\ng.add \"libc/arch-mips/syscalls/setresuid.S\"\ng.add \"libc/arch-mips64/syscalls/setresuid.S\"\ng.add \"libc/arch-x86/syscalls/setresuid.S\"\ng.add \"libc/arch-x86_64/syscalls/setresuid.S\"\n\n# setreuid\ng.add \"libc/arch-arm/syscalls/setreuid.S\"\ng.add \"libc/arch-arm64/syscalls/setreuid.S\"\ng.add \"libc/arch-mips/syscalls/setreuid.S\"\ng.add \"libc/arch-mips64/syscalls/setreuid.S\"\ng.add \"libc/arch-x86/syscalls/setreuid.S\"\ng.add \"libc/arch-x86_64/syscalls/setreuid.S\"\n\n# setrlimit\ng.add \"libc/arch-arm/syscalls/setrlimit.S\"\ng.add \"libc/arch-arm64/syscalls/setrlimit.S\"\ng.add \"libc/arch-mips/syscalls/setrlimit.S\"\ng.add \"libc/arch-mips64/syscalls/setrlimit.S\"\ng.add \"libc/arch-x86/syscalls/setrlimit.S\"\ng.add \"libc/arch-x86_64/syscalls/setrlimit.S\"\n\n# setsid\ng.add \"libc/arch-arm/syscalls/setsid.S\"\ng.add \"libc/arch-arm64/syscalls/setsid.S\"\ng.add \"libc/arch-mips/syscalls/setsid.S\"\ng.add \"libc/arch-mips64/syscalls/setsid.S\"\ng.add \"libc/arch-x86/syscalls/setsid.S\"\ng.add \"libc/arch-x86_64/syscalls/setsid.S\"\n\n# setsockopt\ng.add \"libc/arch-arm/syscalls/setsockopt.S\"\ng.add \"libc/arch-arm64/syscalls/setsockopt.S\"\ng.add \"libc/arch-mips/syscalls/setsockopt.S\"\ng.add \"libc/arch-mips64/syscalls/setsockopt.S\"\ng.add \"libc/arch-x86/syscalls/setsockopt.S\"\ng.add \"libc/arch-x86_64/syscalls/setsockopt.S\"\n\n# settimeofday\ng.add \"libc/arch-arm/syscalls/settimeofday.S\"\ng.add \"libc/arch-arm64/syscalls/settimeofday.S\"\ng.add \"libc/arch-mips/syscalls/settimeofday.S\"\ng.add \"libc/arch-mips64/syscalls/settimeofday.S\"\ng.add \"libc/arch-x86/syscalls/settimeofday.S\"\ng.add \"libc/arch-x86_64/syscalls/settimeofday.S\"\n\n# setuid\ng.add \"libc/arch-arm/syscalls/setuid.S\"\ng.add \"libc/arch-arm64/syscalls/setuid.S\"\ng.add \"libc/arch-mips/syscalls/setuid.S\"\ng.add \"libc/arch-mips64/syscalls/setuid.S\"\ng.add \"libc/arch-x86/syscalls/setuid.S\"\ng.add \"libc/arch-x86_64/syscalls/setuid.S\"\n\n# setxattr\ng.add \"libc/arch-arm/syscalls/setxattr.S\"\ng.add \"libc/arch-arm64/syscalls/setxattr.S\"\ng.add \"libc/arch-mips/syscalls/setxattr.S\"\ng.add \"libc/arch-mips64/syscalls/setxattr.S\"\ng.add \"libc/arch-x86/syscalls/setxattr.S\"\ng.add \"libc/arch-x86_64/syscalls/setxattr.S\"\n\n# shutdown\ng.add \"libc/arch-arm/syscalls/shutdown.S\"\ng.add \"libc/arch-arm64/syscalls/shutdown.S\"\ng.add \"libc/arch-mips/syscalls/shutdown.S\"\ng.add \"libc/arch-mips64/syscalls/shutdown.S\"\ng.add \"libc/arch-x86/syscalls/shutdown.S\"\ng.add \"libc/arch-x86_64/syscalls/shutdown.S\"\n\n# sigaction\ng.add \"libc/arch-arm/bionic/__restore.S\"\ng.add \"libc/arch-arm/syscalls/__sigaction.S\"\ng.add \"libc/arch-mips/syscalls/__sigaction.S\"\ng.add \"libc/arch-x86/bionic/__restore.S\"\ng.add \"libc/arch-x86/syscalls/__sigaction.S\"\ng.add \"libc/arch-x86_64/bionic/__restore_rt.S\"\ng.add \"libc/bionic/sigaction.cpp\"\n\n# sigaltstack\ng.add \"libc/arch-arm/syscalls/sigaltstack.S\"\ng.add \"libc/arch-arm64/syscalls/sigaltstack.S\"\ng.add \"libc/arch-mips/syscalls/sigaltstack.S\"\ng.add \"libc/arch-mips64/syscalls/sigaltstack.S\"\ng.add \"libc/arch-x86/syscalls/sigaltstack.S\"\ng.add \"libc/arch-x86_64/syscalls/sigaltstack.S\"\n\n# sigaddset\ng.add \"libc/bionic/sigaddset.cpp\"\n\n# sigblock\ng.add \"libc/bionic/sigblock.c\"\n\n# sigdelset\ng.add \"libc/bionic/sigdelset.cpp\"\n\n# sigemptyset\ng.add \"libc/bionic/sigemptyset.cpp\"\n\n# sigfillset\ng.add \"libc/bionic/sigfillset.cpp\"\n\n# siginterrupt\ng.add \"libc/bionic/siginterrupt.c\"\n\n# sigismember\ng.add \"libc/bionic/sigismember.cpp\"\n\n# siglongjmp/sigsetjmp/longjmp/setjmp\ng.add \"libc/arch-arm/bionic/setjmp.S\"\ng.add \"libc/arch-arm64/bionic/setjmp.S\"\ng.add \"libc/arch-mips/bionic/setjmp.S\"\ng.add \"libc/arch-x86/bionic/setjmp.S\"\ng.add \"libc/arch-x86_64/bionic/setjmp.S\"\n\n# signal\ng.add \"libc/bionic/signal.cpp\"\n\n# signalfd\ng.add \"libc/arch-arm/syscalls/__signalfd4.S\"\ng.add \"libc/arch-arm64/syscalls/__signalfd4.S\"\ng.add \"libc/arch-mips/syscalls/__signalfd4.S\"\ng.add \"libc/arch-mips64/syscalls/__signalfd4.S\"\ng.add \"libc/arch-x86/syscalls/__signalfd4.S\"\ng.add \"libc/arch-x86_64/syscalls/__signalfd4.S\"\ng.add \"libc/bionic/signalfd.cpp\"\n\n# significandl\ng.add \"libm/significandl.c\"\n\n# sigpending\ng.add \"libc/bionic/sigpending.cpp\"\n\n# sigprocmask\ng.add \"libc/bionic/sigprocmask.cpp\"\n\n# sigsetmask\ng.add \"libc/bionic/sigsetmask.c\"\n\n# sigsuspend\ng.add \"libc/bionic/sigsuspend.cpp\"\n\n# sigwait\ng.add \"libc/bionic/sigwait.cpp\"\n\n# socket\ng.add \"libc/arch-arm/syscalls/__socket.S\"\ng.add \"libc/arch-arm64/syscalls/__socket.S\"\ng.add \"libc/arch-mips/syscalls/__socket.S\"\ng.add \"libc/arch-mips64/syscalls/__socket.S\"\ng.add \"libc/arch-x86/syscalls/__socket.S\"\ng.add \"libc/arch-x86_64/syscalls/__socket.S\"\ng.add \"libc/bionic/socket.cpp\"\n\n# socketpair\ng.add \"libc/arch-arm/syscalls/socketpair.S\"\ng.add \"libc/arch-arm64/syscalls/socketpair.S\"\ng.add \"libc/arch-mips/syscalls/socketpair.S\"\ng.add \"libc/arch-mips64/syscalls/socketpair.S\"\ng.add \"libc/arch-x86/syscalls/socketpair.S\"\ng.add \"libc/arch-x86_64/syscalls/socketpair.S\"\n\n# splice\ng.add \"libc/arch-arm/syscalls/splice.S\"\ng.add \"libc/arch-arm64/syscalls/splice.S\"\ng.add \"libc/arch-mips/syscalls/splice.S\"\ng.add \"libc/arch-mips64/syscalls/splice.S\"\ng.add \"libc/arch-x86/syscalls/splice.S\"\ng.add \"libc/arch-x86_64/syscalls/splice.S\"\n\n# srand48\ng.add \"libc/upstream-netbsd/lib/libc/stdlib/srand48.c\"\n\n# __stack_chk_fail\ng.add \"libc/bionic/__stack_chk_fail.cpp\"\n\n# __stpcpy_chk\ng.add \"libc/bionic/__stpcpy_chk.cpp\"\n\n# __stpncpy_chk/__stpncpy_chk2\ng.add \"libc/bionic/__stpncpy_chk.cpp\"\n\n# __strcat_chk\ng.add \"libc/bionic/__strcat_chk.cpp\"\n\n# __strchr_chk\ng.add \"libc/bionic/__strchr_chk.cpp\"\n\n# __strcpy_chk\ng.add \"libc/bionic/__strcpy_chk.cpp\"\n\n# __strlcat_chk\ng.add \"libc/bionic/__strlcat_chk.cpp\"\n\n# __strlcpy_chk\ng.add \"libc/bionic/__strlcpy_chk.cpp\"\n\n# __strlen_chk\ng.add \"libc/bionic/__strlen_chk.cpp\"\n\n# __strncat_chk\ng.add \"libc/bionic/__strncat_chk.cpp\"\n\n# __strncpy_chk\ng.add \"libc/bionic/__strncpy_chk.cpp\"\n\n# __strrchr_chk\ng.add \"libc/bionic/__strrchr_chk.cpp\"\n\n# stat\ng.add \"libc/bionic/stat.cpp\"\n\n# strerror\ng.add \"libc/bionic/strerror.cpp\"\ng.add \"libc/bionic/strerror_r.cpp\"\n\n# strsignal\ng.add \"libc/bionic/strsignal.cpp\"\n\n# symlink\ng.add \"libc/bionic/symlink.cpp\"\n\n# symlinkat\ng.add \"libc/arch-arm/syscalls/symlinkat.S\"\ng.add \"libc/arch-arm64/syscalls/symlinkat.S\"\ng.add \"libc/arch-mips/syscalls/symlinkat.S\"\ng.add \"libc/arch-mips64/syscalls/symlinkat.S\"\ng.add \"libc/arch-x86/syscalls/symlinkat.S\"\ng.add \"libc/arch-x86_64/syscalls/symlinkat.S\"\n\n# sync\ng.add \"libc/arch-arm/syscalls/sync.S\"\ng.add \"libc/arch-arm64/syscalls/sync.S\"\ng.add \"libc/arch-mips/syscalls/sync.S\"\ng.add \"libc/arch-mips64/syscalls/sync.S\"\ng.add \"libc/arch-x86/syscalls/sync.S\"\ng.add \"libc/arch-x86_64/syscalls/sync.S\"\n\n# syscall\ng.add \"libc/arch-arm/bionic/syscall.S\"\ng.add \"libc/arch-arm64/bionic/syscall.S\"\ng.add \"libc/arch-mips/bionic/syscall.S\"\ng.add \"libc/arch-mips64/bionic/syscall.S\"\ng.add \"libc/arch-x86/bionic/syscall.S\"\ng.add \"libc/arch-x86_64/bionic/syscall.S\"\n\n# sysconf\ng.add \"libc/bionic/sysconf.cpp\"\ng.add \"libc/bionic/sysinfo.cpp\"\n\n# sysinfo\ng.add \"libc/arch-arm/syscalls/sysinfo.S\"\ng.add \"libc/arch-arm64/syscalls/sysinfo.S\"\ng.add \"libc/arch-mips/syscalls/sysinfo.S\"\ng.add \"libc/arch-mips64/syscalls/sysinfo.S\"\ng.add \"libc/arch-x86/syscalls/sysinfo.S\"\ng.add \"libc/arch-x86_64/syscalls/sysinfo.S\"\n\n# syslog\ng.add \"libc/bionic/syslog.cpp\"\n\n# swapoff\ng.add \"libc/arch-arm/syscalls/swapoff.S\"\ng.add \"libc/arch-arm64/syscalls/swapoff.S\"\ng.add \"libc/arch-mips/syscalls/swapoff.S\"\ng.add \"libc/arch-mips64/syscalls/swapoff.S\"\ng.add \"libc/arch-x86/syscalls/swapoff.S\"\ng.add \"libc/arch-x86_64/syscalls/swapoff.S\"\n\n# swapon\ng.add \"libc/arch-arm/syscalls/swapon.S\"\ng.add \"libc/arch-arm64/syscalls/swapon.S\"\ng.add \"libc/arch-mips/syscalls/swapon.S\"\ng.add \"libc/arch-mips64/syscalls/swapon.S\"\ng.add \"libc/arch-x86/syscalls/swapon.S\"\ng.add \"libc/arch-x86_64/syscalls/swapon.S\"\n\n# tdestroy\ng.add \"libc/bionic/tdestroy.cpp\"\n\n# tee\ng.add \"libc/arch-arm/syscalls/tee.S\"\ng.add \"libc/arch-arm64/syscalls/tee.S\"\ng.add \"libc/arch-mips/syscalls/tee.S\"\ng.add \"libc/arch-mips64/syscalls/tee.S\"\ng.add \"libc/arch-x86/syscalls/tee.S\"\ng.add \"libc/arch-x86_64/syscalls/tee.S\"\n\n# termios\ng.add \"libc/bionic/termios.cpp\"\n\n# tgkill\ng.add \"libc/arch-arm/syscalls/tgkill.S\"\ng.add \"libc/arch-arm64/syscalls/tgkill.S\"\ng.add \"libc/arch-mips/syscalls/tgkill.S\"\ng.add \"libc/arch-mips64/syscalls/tgkill.S\"\ng.add \"libc/arch-x86/syscalls/tgkill.S\"\ng.add \"libc/arch-x86_64/syscalls/tgkill.S\"\n\n# time\ng.add \"libc/upstream-openbsd/lib/libc/gen/time.c\"\n\n# timer_create/timer_delete/timer_getoverrun/timer_gettime/timer_settime\ng.add \"libc/bionic/posix_timers.cpp\"\n\n# __timer_create\ng.add \"libc/arch-arm/syscalls/__timer_create.S\"\ng.add \"libc/arch-arm64/syscalls/__timer_create.S\"\ng.add \"libc/arch-mips/syscalls/__timer_create.S\"\ng.add \"libc/arch-mips64/syscalls/__timer_create.S\"\ng.add \"libc/arch-x86/syscalls/__timer_create.S\"\ng.add \"libc/arch-x86_64/syscalls/__timer_create.S\"\n\n# __timer_delete\ng.add \"libc/arch-arm/syscalls/__timer_delete.S\"\ng.add \"libc/arch-arm64/syscalls/__timer_delete.S\"\ng.add \"libc/arch-mips/syscalls/__timer_delete.S\"\ng.add \"libc/arch-mips64/syscalls/__timer_delete.S\"\ng.add \"libc/arch-x86/syscalls/__timer_delete.S\"\ng.add \"libc/arch-x86_64/syscalls/__timer_delete.S\"\n\n# __timer_getoverrun\ng.add \"libc/arch-arm/syscalls/__timer_getoverrun.S\"\ng.add \"libc/arch-arm64/syscalls/__timer_getoverrun.S\"\ng.add \"libc/arch-mips/syscalls/__timer_getoverrun.S\"\ng.add \"libc/arch-mips64/syscalls/__timer_getoverrun.S\"\ng.add \"libc/arch-x86/syscalls/__timer_getoverrun.S\"\ng.add \"libc/arch-x86_64/syscalls/__timer_getoverrun.S\"\n\n# __timer_gettime\ng.add \"libc/arch-arm/syscalls/__timer_gettime.S\"\ng.add \"libc/arch-arm64/syscalls/__timer_gettime.S\"\ng.add \"libc/arch-mips/syscalls/__timer_gettime.S\"\ng.add \"libc/arch-mips64/syscalls/__timer_gettime.S\"\ng.add \"libc/arch-x86/syscalls/__timer_gettime.S\"\ng.add \"libc/arch-x86_64/syscalls/__timer_gettime.S\"\n\n# __timer_settime\ng.add \"libc/arch-arm/syscalls/__timer_settime.S\"\ng.add \"libc/arch-arm64/syscalls/__timer_settime.S\"\ng.add \"libc/arch-mips/syscalls/__timer_settime.S\"\ng.add \"libc/arch-mips64/syscalls/__timer_settime.S\"\ng.add \"libc/arch-x86/syscalls/__timer_settime.S\"\ng.add \"libc/arch-x86_64/syscalls/__timer_settime.S\"\n\n# timerfd_create\ng.add \"libc/arch-arm/syscalls/timerfd_create.S\"\ng.add \"libc/arch-arm64/syscalls/timerfd_create.S\"\ng.add \"libc/arch-mips/syscalls/timerfd_create.S\"\ng.add \"libc/arch-mips64/syscalls/timerfd_create.S\"\ng.add \"libc/arch-x86/syscalls/timerfd_create.S\"\ng.add \"libc/arch-x86_64/syscalls/timerfd_create.S\"\n\n# timerfd_gettime\ng.add \"libc/arch-arm/syscalls/timerfd_gettime.S\"\ng.add \"libc/arch-arm64/syscalls/timerfd_gettime.S\"\ng.add \"libc/arch-mips/syscalls/timerfd_gettime.S\"\ng.add \"libc/arch-mips64/syscalls/timerfd_gettime.S\"\ng.add \"libc/arch-x86/syscalls/timerfd_gettime.S\"\ng.add \"libc/arch-x86_64/syscalls/timerfd_gettime.S\"\n\n# timerfd_settime\ng.add \"libc/arch-arm/syscalls/timerfd_settime.S\"\ng.add \"libc/arch-arm64/syscalls/timerfd_settime.S\"\ng.add \"libc/arch-mips/syscalls/timerfd_settime.S\"\ng.add \"libc/arch-mips64/syscalls/timerfd_settime.S\"\ng.add \"libc/arch-x86/syscalls/timerfd_settime.S\"\ng.add \"libc/arch-x86_64/syscalls/timerfd_settime.S\"\n\n# times\ng.add \"libc/arch-arm/syscalls/times.S\"\ng.add \"libc/arch-arm64/syscalls/times.S\"\ng.add \"libc/arch-mips/syscalls/times.S\"\ng.add \"libc/arch-mips64/syscalls/times.S\"\ng.add \"libc/arch-x86/syscalls/times.S\"\ng.add \"libc/arch-x86_64/syscalls/times.S\"\n\n# truncate\ng.add \"libc/arch-arm/syscalls/truncate.S\"\ng.add \"libc/arch-arm64/syscalls/truncate.S\"\ng.add \"libc/arch-mips/syscalls/truncate.S\"\ng.add \"libc/arch-mips64/syscalls/truncate.S\"\ng.add \"libc/arch-x86/syscalls/truncate.S\"\ng.add \"libc/arch-x86_64/syscalls/truncate.S\"\n\n# truncate64\ng.add \"libc/arch-arm/syscalls/truncate64.S\"\ng.add \"libc/arch-arm64/syscalls/truncate.S\"\ng.add \"libc/arch-mips/syscalls/truncate64.S\"\ng.add \"libc/arch-mips64/syscalls/truncate.S\"\ng.add \"libc/arch-x86/syscalls/truncate64.S\"\ng.add \"libc/arch-x86_64/syscalls/truncate.S\"\n\n# umask\ng.add \"libc/arch-arm/syscalls/umask.S\"\ng.add \"libc/arch-arm64/syscalls/umask.S\"\ng.add \"libc/arch-mips/syscalls/umask.S\"\ng.add \"libc/arch-mips64/syscalls/umask.S\"\ng.add \"libc/arch-x86/syscalls/umask.S\"\ng.add \"libc/arch-x86_64/syscalls/umask.S\"\n\n# __umask_chk\ng.add \"libc/bionic/__umask_chk.cpp\"\n\n# umount\ng.add \"libc/bionic/umount.cpp\"\n\n# umount2\ng.add \"libc/arch-arm/syscalls/umount2.S\"\ng.add \"libc/arch-arm64/syscalls/umount2.S\"\ng.add \"libc/arch-mips/syscalls/umount2.S\"\ng.add \"libc/arch-mips64/syscalls/umount2.S\"\ng.add \"libc/arch-x86/syscalls/umount2.S\"\ng.add \"libc/arch-x86_64/syscalls/umount2.S\"\n\n# uname\ng.add \"libc/arch-arm/syscalls/uname.S\",    fixup: \"redefine_uname\"\ng.add \"libc/arch-arm64/syscalls/uname.S\",  fixup: \"redefine_uname\"\ng.add \"libc/arch-mips/syscalls/uname.S\",   fixup: \"redefine_uname\"\ng.add \"libc/arch-mips64/syscalls/uname.S\", fixup: \"redefine_uname\"\ng.add \"libc/arch-x86/syscalls/uname.S\",    fixup: \"redefine_uname\"\ng.add \"libc/arch-x86_64/syscalls/uname.S\", fixup: \"redefine_uname\"\n\n# unlink\ng.add \"libc/bionic/unlink.cpp\"\n\n# unlinkat\ng.add \"libc/arch-arm/syscalls/unlinkat.S\"\ng.add \"libc/arch-arm64/syscalls/unlinkat.S\"\ng.add \"libc/arch-mips/syscalls/unlinkat.S\"\ng.add \"libc/arch-mips64/syscalls/unlinkat.S\"\ng.add \"libc/arch-x86/syscalls/unlinkat.S\"\ng.add \"libc/arch-x86_64/syscalls/unlinkat.S\"\n\n# unshare\ng.add \"libc/arch-arm/syscalls/unshare.S\"\ng.add \"libc/arch-arm64/syscalls/unshare.S\"\ng.add \"libc/arch-mips/syscalls/unshare.S\"\ng.add \"libc/arch-mips64/syscalls/unshare.S\"\ng.add \"libc/arch-x86/syscalls/unshare.S\"\ng.add \"libc/arch-x86_64/syscalls/unshare.S\"\n\n# utimensat\ng.add \"libc/arch-arm/syscalls/utimensat.S\"\ng.add \"libc/arch-arm64/syscalls/utimensat.S\"\ng.add \"libc/arch-mips/syscalls/utimensat.S\"\ng.add \"libc/arch-mips64/syscalls/utimensat.S\"\ng.add \"libc/arch-x86/syscalls/utimensat.S\"\ng.add \"libc/arch-x86_64/syscalls/utimensat.S\"\n\n# utimes\ng.add \"libc/bionic/utimes.cpp\"\n\n# utmpname\ng.add \"libc/upstream-netbsd/lib/libc/gen/utmp.c\"\n\n# vfork\ng.add \"libc/arch-arm/bionic/vfork.S\"\ng.add \"libc/arch-arm64/bionic/vfork.S\"\ng.add \"libc/arch-mips/bionic/vfork.S\"\ng.add \"libc/arch-mips64/bionic/vfork.S\"\ng.add \"libc/arch-x86/bionic/vfork.S\"\ng.add \"libc/arch-x86_64/bionic/vfork.S\"\n\n# vmsplice\ng.add \"libc/arch-arm/syscalls/vmsplice.S\"\ng.add \"libc/arch-arm64/syscalls/vmsplice.S\"\ng.add \"libc/arch-mips/syscalls/vmsplice.S\"\ng.add \"libc/arch-mips64/syscalls/vmsplice.S\"\ng.add \"libc/arch-x86/syscalls/vmsplice.S\"\ng.add \"libc/arch-x86_64/syscalls/vmsplice.S\"\n\n# __vsnprintf_chk\ng.add \"libc/bionic/__vsnprintf_chk.cpp\"\n\n# __vsprintf_chk/__sprintf_chk\ng.add \"libc/bionic/__vsprintf_chk.cpp\"\n\n# wait4\ng.add \"libc/arch-arm/syscalls/wait4.S\"\ng.add \"libc/arch-arm64/syscalls/wait4.S\"\ng.add \"libc/arch-mips/syscalls/wait4.S\"\ng.add \"libc/arch-mips64/syscalls/wait4.S\"\ng.add \"libc/arch-x86/syscalls/wait4.S\"\ng.add \"libc/arch-x86_64/syscalls/wait4.S\"\n\n# waitpid\ng.add \"libc/arch-arm/syscalls/__waitid.S\"\ng.add \"libc/arch-arm64/syscalls/__waitid.S\"\ng.add \"libc/arch-mips/syscalls/__waitid.S\"\ng.add \"libc/arch-mips64/syscalls/__waitid.S\"\ng.add \"libc/arch-x86/syscalls/__waitid.S\"\ng.add \"libc/arch-x86_64/syscalls/__waitid.S\"\ng.add \"libc/bionic/wait.cpp\"\n\n# wmempcpy\ng.add \"libc/bionic/wmempcpy.cpp\"\n\n# __write_chk\ng.add \"libc/bionic/__write_chk.cpp\"\n\n# write\ng.add \"libc/arch-arm/syscalls/write.S\"\ng.add \"libc/arch-arm64/syscalls/write.S\"\ng.add \"libc/arch-mips/syscalls/write.S\"\ng.add \"libc/arch-mips64/syscalls/write.S\"\ng.add \"libc/arch-x86/syscalls/write.S\"\ng.add \"libc/arch-x86_64/syscalls/write.S\"\n\n# writev\ng.add \"libc/arch-arm/syscalls/writev.S\"\ng.add \"libc/arch-arm64/syscalls/writev.S\"\ng.add \"libc/arch-mips/syscalls/writev.S\"\ng.add \"libc/arch-mips64/syscalls/writev.S\"\ng.add \"libc/arch-x86/syscalls/writev.S\"\ng.add \"libc/arch-x86_64/syscalls/writev.S\"\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/gen-bsd-sources",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017, 2018 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'optparse'\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'open3'\nrequire 'digest'\nrequire 'stringio'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\n$options = {verbose: true}\nparser = OptionParser.new do |o|\n    o.on(\"-v\", \"--verbose\", \"Enable verbose mode\") do |v|\n        $options[:verbose] = v\n    end\n\n    o.on(\"-q\", \"--quiet\", \"Disable verbose mode\") do |q|\n        $options[:verbose] = !q\n    end\n\n    o.on(\"-n\", \"--dry-run\", \"Don't do actual changes, just print out what intend to do\") do |n|\n        $options[:dryrun] = n\n    end\nend\nparser.parse(ARGV)\n\nclass Object\n    def to_b\n        self ? true : false\n    end\nend\n\nclass Generator\n\n    class SrcFile\n        def initialize(fpath)\n            @file = fpath\n        end\n\n        def path\n            @file\n        end\n\n        def header?\n            @header = (path =~ /\\.h$/).to_b if @header.nil?\n            @header\n        end\n\n        def public?\n            @public = lambda do\n                return false unless header?\n                return true if path == \"contrib/bzip2/bzlib.h\"\n                return true if path == \"contrib/libc-vis/vis.h\"\n                return true if path == \"lib/msun/src/math.h\"\n                return true if path == \"lib/msun/src/fenv-softfloat.h\"\n                return true if path =~ /^(include|sys)\\b/\n                false\n            end.call if @public.nil?\n            @public\n        end\n\n        def dstpath\n            @dstpath = lambda do\n                return \"bzlib.h\" if header? && path == \"contrib/bzip2/bzlib.h\"\n                return \"vis.h\"   if header? && path == \"contrib/libc-vis/vis.h\"\n                return \"math.h\"  if header? && path == \"lib/msun/src/math.h\"\n                return File.join(\"crystax/freebsd\", path) if header? && path == \"lib/msun/src/fenv-softfloat.h\"\n                if header? && !sarch.nil? && path.split('/')[0..2] == ['sys', sarch, 'include']\n                    return (['machine'] + path.split('/')[3..-1]).join('/')\n                end\n                if header? && path.split('/')[0] == 'include'\n                    return path.split('/')[1..-1].join('/')\n                end\n                if header? && path.split('/')[0..1] == ['sys', 'sys']\n                    return path.split('/')[1..-1].join('/')\n                end\n                path\n            end.call if @dstpath.nil?\n            @dstpath\n        end\n\n        def sarch\n            archs = ['arm', 'arm64', 'amd64', 'i386', 'x86', 'mips', 'mips64']\n            @sarch = $1 if @sarch_detected.nil? && path =~ /^sys\\/(#{archs.join('|')})\\b/\n            @sarch_detected = true\n            @sarch\n        end\n        private :sarch\n\n        def archs\n            @archs = case sarch\n            when 'i386'\n                ['x86']\n            when 'amd64'\n                ['x86_64']\n            when 'x86'\n                ['x86', 'x86_64']\n            when 'arm', 'arm64', 'mips', 'mips64'\n                [sarch]\n            when nil\n                nil\n            else\n                raise \"Uknown source architecture for file #{path}: #{sarch}\"\n            end if @archs.nil?\n            @archs\n        end\n    end\n\n    class TargetFile\n        def initialize(sf, options = {})\n            @path    = sf.dstpath\n            @public  = sf.public?\n            @header  = sf.header?\n            @guard   = !(options[:noguard].to_b)\n            @sources = []\n        end\n\n        attr_reader :path, :sources\n\n        def public?\n            @public\n        end\n\n        def header?\n            @header\n        end\n\n        def has_guard?\n            @guard\n        end\n    end\n\n    def initialize(options)\n        @files = []\n        @has_file = {}\n        @fixups = {}\n\n        @dryrun  = options[:dryrun]\n        # Force verbosity if 'dry run' option enabled\n        @verbose = @dryrun || options[:verbose]\n\n        @topdir = File.realpath(File.join(File.dirname(__FILE__), '..'))\n        @srcdir = File.join(@topdir, '../../../../vendor/freebsd')\n    end\n\n    private\n\n    def verbose\n        @verbose\n    end\n\n    def dryrun\n        @dryrun\n    end\n\n    def srcdir\n        @srcdir\n    end\n\n    def topdir\n        @topdir\n    end\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n\n    def license\n        @license = File.read(File.join(topdir, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n\n    def archmacros(arch)\n        case arch\n        when 'arm'\n            '__arm__'\n        when 'x86'\n            '__i386__'\n        when 'mips'\n            '__mips__ && !__mips64'\n        when 'arm64'\n            '__aarch64__'\n        when 'x86_64'\n            '__x86_64__'\n        when 'mips64'\n            '__mips64'\n        else\n            raise \"Unknown architecture: #{arch.inspect}\"\n        end\n    end\n\n    def genbody(f, body, options)\n        fixups = options[:fixup] || []\n        fixups = [fixups] unless fixups.is_a?(Array)\n        fixups.each do |fxname|\n            fx = @fixups[fxname.to_sym]\n            raise \"Unknown fixup '#{fxname}'\" if fx.nil?\n            f.puts \"\"\n            fx.call(f)\n        end\n\n        warnings = options[:warnings] || []\n        warnings = [warnings] unless warnings.is_a?(Array)\n        unless warnings.empty?\n            f.puts \"\"\n            f.puts \"#pragma GCC diagnostic push\"\n            warnings.sort.each do |w|\n                f.puts \"#pragma GCC diagnostic ignored \\\"-W#{w}\\\"\"\n            end\n        end\n\n        f.write body\n\n        unless warnings.empty?\n            f.puts \"\"\n            f.puts \"#pragma GCC diagnostic pop\"\n        end\n\n        fixups = options[:postfixup] || []\n        fixups = [fixups] unless fixups.is_a?(Array)\n        fixups.each do |fxname|\n            fx = @fixups[fxname.to_sym]\n            raise \"Unknown fixup '#{fxname}'\" if fx.nil?\n            f.puts \"\"\n            fx.call(f)\n        end\n    end\n\n    public\n\n    def fixup(name, &block)\n        raise \"Fixup with name #{name} already exist\" if @fixups.has_key?(name)\n        raise \"Code block not provided\" unless block_given?\n        @fixups[name] = lambda { |f| block.call(f) }\n    end\n\n    def add(file, options = {}, &block)\n        raise \"File #{file} already added\" if @has_file[file]\n        @files << {sf: SrcFile.new(file), options: options, generator: block}\n        @has_file[file] = true\n    end\n\n    def generate\n        targets = []\n        @files.each do |e|\n            target = targets.select { |x| x.path == e[:sf].dstpath }.first\n            targets << (target = TargetFile.new(e[:sf], e[:options])) if target.nil?\n\n            if target.public? != e[:sf].public? ||\n                    target.header? != e[:sf].header? ||\n                    target.has_guard? != !(e[:options][:noguard].to_b)\n                raise \"Multiple sources pointing to the same destinations, but having different type\"\n            end\n            target.sources << e\n        end\n\n        total = targets.size\n        current = 0\n\n        targets.sort_by(&:path).each do |target|\n            current += 1\n            dstpath = File.join(topdir, target.public? ? 'include' : \"gen/freebsd\", target.path)\n            archs = {}\n\n            srcmtime = File.mtime(__FILE__)\n\n            target.sources.each do |e|\n                srcarchs = e[:sf].archs\n                srcarchs = [srcarchs] unless srcarchs.is_a?(Array)\n                srcarchs.each do |sa|\n                    raise \"Source for '#{sa}' CPU architecture is already included\" if archs.has_key?(sa)\n                end\n\n                srcpath = File.join(srcdir, e[:sf].path)\n                if File.basename(srcpath) == \"string.h\"\n                    srcdbg = true\n                else\n                    srcdbg = false\n                end\n                srcreader = e[:generator] || proc do |f|\n                    unless e[:options][:empty]\n                        mtime = File.mtime(srcpath)\n                        srcmtime = mtime if srcmtime < mtime\n\n                        unless dryrun\n                            if target.public?\n                                cpath = File.join(topdir, \"include/crystax/freebsd\", File.dirname(e[:sf].path), \"mangled-#{File.basename(e[:sf].path)}\")\n                            else\n                                cpath = File.join(File.dirname(dstpath), \"mangled-#{File.basename(dstpath)}\")\n                            end\n                            if !File.exists?(cpath) || File.mtime(cpath) < File.mtime(srcpath)\n                                FileUtils.mkdir_p File.dirname(cpath)\n                                FileUtils.rm_f cpath\n                                FileUtils.cp srcpath, cpath\n                            end\n                            if target.public?\n                                f.puts \"\" if e[:sf].archs.nil?\n                                f.puts \"#include <#{relpath(cpath, File.join(topdir, 'include'))}>\"\n                            else\n                                f.puts \"\"\n                                f.puts \"#include \\\"#{File.basename(cpath)}\\\"\"\n                            end\n                        end\n                    end\n                end\n\n                body = ''\n                StringIO.open(body) do |f|\n                    srcreader.call(f)\n                end\n                body = \"#{body}\\n\" unless body[-1] == \"\\n\"\n\n                srcarchs.each do |sa|\n                    archs[sa] = {body: body, options: e[:options]}\n                end\n            end\n\n            if File.exists?(dstpath) && File.mtime(dstpath) >= srcmtime\n                #puts \"SKIP [#{current}/#{total}] #{relpath(dstpath, topdir)} [NOT MODIFIED]\" if verbose\n                next\n            end\n\n            puts \"GEN  [#{current}/#{total}] #{relpath(dstpath, topdir)}\" if verbose\n            next if dryrun\n\n            FileUtils.mkdir_p File.dirname(dstpath)\n            File.open(dstpath, \"w\") do |f|\n                f.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                f.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} #{ARGV.select { |x| x !~ /^(-v|--verbose|--no-verbose)\\b/ }.join(' ')} */\"\n                f.puts \"\"\n\n                f.puts \"/*\"\n                license.each do |line|\n                    f.puts \" * #{line}\".rstrip\n                end\n                f.puts \" */\"\n\n                if target.header? && target.has_guard?\n                    guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dstpath, topdir)).hexdigest}\".upcase\n                    f.puts \"\"\n                    f.puts \"#ifndef #{guard}\"\n                    f.puts \"#define #{guard}\"\n                end\n\n                f.puts \"\"\n                f.puts \"#include <crystax/id.h>\"\n                f.puts \"#include <crystax/freebsd.h>\"\n                f.puts \"#include <crystax/internal.h>\" unless target.header?\n\n                common = archs.delete(nil)\n                genbody(f, common[:body], common[:options]) unless common.nil?\n\n                unless archs.empty?\n                    archs.keys.sort.each do |arch|\n                        f.puts \"##{\"el\" unless arch == archs.keys.sort.first}if #{archmacros(arch)}\"\n                        v = archs[arch]\n                        genbody(f, v[:body], v[:options])\n                    end\n                    f.puts \"#else\"\n                    f.puts \"#error Not defined for this ABI\"\n                    f.puts \"#endif\"\n                end\n\n                if target.header? && target.has_guard?\n                    f.puts \"\"\n                    f.puts \"#endif /* #{guard} */\"\n                end\n            end\n        end\n    end\nend\n\ng = Generator.new $options\n\ng.fixup :include_wctype_h do |f|\n    f.puts \"#include <wctype.h>\"\nend\n\ng.fixup :collate_fixwarnings do |f|\n    f.puts \"#define __collate_substitute __crystax_freebsd___collate_substitute\"\n    f.puts \"#define __collate_lookup __crystax_freebsd___collate_lookup\"\n    f.puts \"#include \\\"collate.h\\\"\"\n    f.puts \"#undef __collate_substitute\"\n    f.puts \"#define __collate_substitute(c, p) (char *)__crystax_freebsd___collate_substitute(c, (const u_char *)p)\"\n    f.puts \"#undef __collate_lookup\"\n    f.puts \"#define __collate_lookup(c, p, x, y, z) __crystax_freebsd___collate_lookup(c, (const u_char *)p, x, y, z)\"\nend\n\ng.fixup :collate_rename do |f|\n    f.puts \"#define __collate_substitute __crystax_freebsd___collate_substitute\"\n    f.puts \"#define __collate_lookup __crystax_freebsd___collate_lookup\"\nend\n\ng.fixup :mutex_initializer do |f|\n    f.puts \"#include <pthread.h>\"\n    f.puts \"\"\n    f.puts \"typedef pthread_mutex_t spinlock_t;\"\n    f.puts \"#define _SPINLOCK_INITIALIZER PTHREAD_MUTEX_INITIALIZER\"\nend\n\ng.fixup :include_stdarg_h do |f|\n    f.puts \"#include <stdarg.h>\"\nend\n\ng.fixup :include_stdint_h do |f|\n    f.puts \"#include <stdint.h>\"\nend\n\ng.fixup :include_stdio_h do |f|\n    f.puts \"#include <stdio.h>\"\nend\n\ng.fixup :include_sys_types_h do |f|\n    f.puts \"#include <sys/types.h>\"\nend\n\ng.fixup :include_sys_wait_h do |f|\n    f.puts \"#include <sys/wait.h>\"\nend\n\ng.fixup :include_crystax_sys_ctype_h do |f|\n    f.puts \"#include <crystax/sys/ctype.h>\"\nend\n\ng.fixup :include_crystax_sys_endian_h do |f|\n    f.puts \"#include <crystax/sys/endian.h>\"\nend\n\ng.fixup :include_crystax_sys_inttypes_h do |f|\n    f.puts \"#include <crystax/sys/inttypes.h>\"\nend\n\ng.fixup :include_crystax_sys_langinfo_h do |f|\n    f.puts \"#include <crystax/sys/langinfo.h>\"\nend\n\ng.fixup :include_crystax_sys_limits_h do |f|\n    f.puts \"#include <crystax/sys/limits.h>\"\nend\n\ng.fixup :include_crystax_sys_locale_h do |f|\n    f.puts \"#include <crystax/sys/locale.h>\"\nend\n\ng.fixup :include_crystax_sys_math_h do |f|\n    f.puts \"#include <crystax/sys/math.h>\"\nend\n\ng.fixup :include_crystax_sys_monetary_h do |f|\n    f.puts \"#include <crystax/sys/monetary.h>\"\nend\n\ng.fixup :include_crystax_sys_stdio_h do |f|\n    f.puts \"#include <crystax/sys/stdio.h>\"\nend\n\ng.fixup :include_crystax_sys_stdlib_h do |f|\n    f.puts \"#include <crystax/sys/stdlib.h>\"\nend\n\ng.fixup :include_crystax_sys_string_h do |f|\n    f.puts \"#include <crystax/sys/string.h>\"\nend\n\ng.fixup :include_crystax_sys_strings_h do |f|\n    f.puts \"#include <crystax/sys/strings.h>\"\nend\n\ng.fixup :include_crystax_sys_time_h do |f|\n    f.puts \"#include <crystax/sys/time.h>\"\nend\n\ng.fixup :include_crystax_sys_wchar_h do |f|\n    f.puts \"#include <crystax/sys/wchar.h>\"\nend\n\ng.fixup :include_crystax_sys_wctype_h do |f|\n    f.puts \"#include <crystax/sys/wctype.h>\"\nend\n\ng.fixup :undef_min do |f|\n    f.puts \"#ifdef MIN\"\n    f.puts \"#undef MIN\"\n    f.puts \"#endif\"\nend\n\ng.fixup :define_ctassert do |f|\n    f.puts \"#define CTASSERT(x) __CRYSTAX_STATIC_ASSERT(x, #x \\\": failed\\\")\"\nend\n\ng.fixup :define_complex_h_included do |f|\n    f.puts \"#define __CRYSTAX_COMPLEX_H_INCLUDED 1\"\nend\n\ng.fixup :define_complex_functions do |f|\n    f.puts \"__BEGIN_DECLS\"\n    f.puts \"\"\n\n    f.puts \"long double atan2l(long double v1, long double v2);\"\n    f.puts \"long double cargl(long double complex v1);\"\n\n    bc = proc do |type,name,nargs|\n        nargs = 1 if nargs.nil?\n        params = []\n        (1..nargs).each do |i|\n            params << \"#{type} complex v#{i}\"\n        end\n        f.puts \"extern #{type} complex #{name}(#{params.join(\", \")});\"\n    end\n\n    bc.call(\"double\", \"cpow\",  2)\n    bc.call(\"float\",  \"cpowf\", 2)\n    bc.call(\"long double\", \"cpowl\", 2)\n\n    bc.call(\"double\", \"clog\")\n    bc.call(\"float\",  \"clogf\")\n    bc.call(\"long double\", \"clogl\")\n\n    [\n        \"cacoshl\",\n        \"cacosl\",\n        \"casinhl\",\n        \"casinl\",\n        \"catanhl\",\n        \"catanl\",\n        \"ccoshl\",\n        \"ccosl\",\n        \"cexpl\",\n        \"csinhl\",\n        \"csinl\",\n        \"ctanhl\",\n        \"ctanl\",\n    ].each { |n| bc.call(\"long double\", n) }\n\n    f.puts \"\"\n    f.puts \"__END_DECLS\"\nend\n\ng.fixup :define__execve do |f|\n    f.puts \"#define _execve execve\"\nend\n\ng.fixup :define__wait4 do |f|\n    f.puts \"#define _wait4 wait4\"\nend\n\ng.fixup :long_double_64 do |f|\n    f.puts \"#if __LDBL_MANT_DIG__ == 53\"\nend\n\ng.fixup :long_double_128 do |f|\n    f.puts \"#if __LDBL_MANT_DIG__ == 113\"\nend\n\ng.fixup :long_double_64_or_128 do |f|\n    f.puts \"#if __LDBL_MANT_DIG__ == 53 || __LDBL_MANT_DIG__ == 113\"\nend\n\ng.fixup :endif do |f|\n    f.puts \"#endif\"\nend\n\n# empty\ng.add \"lib/libc/include/libc_private.h\",   empty: true\ng.add \"lib/libc/include/namespace.h\",      empty: true\ng.add \"lib/libc/include/spinlock.h\",       empty: true\ng.add \"lib/libc/include/un-namespace.h\",   empty: true\n\n# bzip2\ng.add \"contrib/bzip2/blocksort.c\"\ng.add \"contrib/bzip2/bzlib.c\",             warnings: \"unused-parameter\"\ng.add \"contrib/bzip2/bzlib.h\"\ng.add \"contrib/bzip2/bzlib_private.h\"\ng.add \"contrib/bzip2/compress.c\",          warnings: \"unused-but-set-variable\"\ng.add \"contrib/bzip2/crctable.c\"\ng.add \"contrib/bzip2/decompress.c\"\ng.add \"contrib/bzip2/huffman.c\"\ng.add \"contrib/bzip2/randtable.c\"\n\n# gdtoa\ng.add \"contrib/gdtoa/dmisc.c\",             warnings: \"sign-compare\"\ng.add \"contrib/gdtoa/dtoa.c\"\ng.add \"contrib/gdtoa/gdtoa.c\"\ng.add \"contrib/gdtoa/gdtoa.h\"\ng.add \"contrib/gdtoa/gdtoa_fltrnds.h\"\ng.add \"contrib/gdtoa/gdtoaimp.h\"\ng.add \"contrib/gdtoa/gethex.c\"\ng.add \"contrib/gdtoa/gmisc.c\"\ng.add \"contrib/gdtoa/hd_init.c\"\ng.add \"contrib/gdtoa/hexnan.c\"\ng.add \"contrib/gdtoa/misc.c\",              warnings: \"sign-compare\"\ng.add \"contrib/gdtoa/smisc.c\"\ng.add \"contrib/gdtoa/strtoIQ.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"contrib/gdtoa/strtoId.c\"\ng.add \"contrib/gdtoa/strtoIdd.c\"\ng.add \"contrib/gdtoa/strtoIf.c\"\ng.add \"contrib/gdtoa/strtoIg.c\"\ng.add \"contrib/gdtoa/strtod.c\"\ng.add \"contrib/gdtoa/strtodI.c\"\ng.add \"contrib/gdtoa/strtodg.c\"\ng.add \"contrib/gdtoa/strtof.c\",            warnings: \"maybe-uninitialized\"\ng.add \"contrib/gdtoa/strtopQ.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"contrib/gdtoa/strtopd.c\"\ng.add \"contrib/gdtoa/strtopdd.c\"\ng.add \"contrib/gdtoa/strtopf.c\"\ng.add \"contrib/gdtoa/strtorQ.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"contrib/gdtoa/strtord.c\"\ng.add \"contrib/gdtoa/strtordd.c\"\ng.add \"contrib/gdtoa/strtorf.c\"\ng.add \"contrib/gdtoa/sum.c\"\ng.add \"contrib/gdtoa/ulp.c\"\n\n# jemalloc\ng.add \"contrib/jemalloc/include/jemalloc/internal/arena.h\",             noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/atomic.h\",            noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/base.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/bitmap.h\",            noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/chunk.h\",             noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/chunk_dss.h\",         noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/chunk_mmap.h\",        noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/ckh.h\",               noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/ctl.h\",               noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/extent.h\",            noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/hash.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/huge.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h\", noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/mb.h\",                noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/mutex.h\",             noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/prng.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/prof.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/ql.h\",                noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/qr.h\",                noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/quarantine.h\",        noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/rb.h\",                noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/rtree.h\",             noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/size_classes.h\",      noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/stats.h\",             noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/tcache.h\",            noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/tsd.h\",               noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/internal/util.h\",              noguard: true\ng.add \"contrib/jemalloc/include/jemalloc/jemalloc.h\"\ng.add \"contrib/jemalloc/src/arena.c\",      warnings: \"unused-parameter\"\ng.add \"contrib/jemalloc/src/atomic.c\"\ng.add \"contrib/jemalloc/src/base.c\"\ng.add \"contrib/jemalloc/src/bitmap.c\"\ng.add \"contrib/jemalloc/src/chunk.c\"\ng.add \"contrib/jemalloc/src/chunk_dss.c\"\ng.add \"contrib/jemalloc/src/chunk_mmap.c\"\ng.add \"contrib/jemalloc/src/ckh.c\"\ng.add \"contrib/jemalloc/src/ctl.c\",        warnings: [\"unused-parameter\", \"unused-but-set-variable\"]\ng.add \"contrib/jemalloc/src/extent.c\"\ng.add \"contrib/jemalloc/src/hash.c\"\ng.add \"contrib/jemalloc/src/huge.c\"\ng.add \"contrib/jemalloc/src/jemalloc.c\",   warnings: [\"type-limits\", \"unused-but-set-variable\",\n                                                      \"unused-parameter\", \"attributes\"]\ng.add \"contrib/jemalloc/src/mb.c\"\ng.add \"contrib/jemalloc/src/mutex.c\"\ng.add \"contrib/jemalloc/src/prof.c\",       warnings: [\"unused-parameter\", \"sign-compare\"]\ng.add \"contrib/jemalloc/src/quarantine.c\"\ng.add \"contrib/jemalloc/src/rtree.c\"\ng.add \"contrib/jemalloc/src/stats.c\"\ng.add \"contrib/jemalloc/src/tcache.c\"\ng.add \"contrib/jemalloc/src/tsd.c\",        warnings: \"unused-parameter\"\ng.add \"contrib/jemalloc/src/util.c\",       warnings: [\"unused-parameter\", \"sign-compare\"]\n\n# libc-vis\ng.add \"contrib/libc-vis/vis.c\",            warnings: [\"pointer-sign\", \"sign-compare\"],\n                                           fixup: \"define_ctassert\"\ng.add \"contrib/libc-vis/vis.h\"\n\n# include\ng.add \"include/_ctype.h\"\ng.add \"include/ar.h\"\ng.add \"include/complex.h\",                 fixup: \"define_complex_h_included\",\n                                           postfixup: \"define_complex_functions\"\ng.add \"include/ctype.h\",                   postfixup: \"include_crystax_sys_ctype_h\"\ng.add \"include/db.h\"\ng.add \"include/err.h\"\ng.add \"include/fts.h\"\ng.add \"include/ftw.h\"\ng.add \"include/glob.h\"\ng.add \"include/iconv.h\"\ng.add \"include/inttypes.h\",                postfixup: \"include_crystax_sys_inttypes_h\"\ng.add \"include/langinfo.h\",                postfixup: \"include_crystax_sys_langinfo_h\"\ng.add \"include/limits.h\"\ng.add \"include/locale.h\",                  postfixup: \"include_crystax_sys_locale_h\"\ng.add \"include/monetary.h\",                postfixup: \"include_crystax_sys_monetary_h\"\ng.add \"include/nl_types.h\"\ng.add \"include/printf.h\"\ng.add \"include/regex.h\"\ng.add \"include/runetype.h\"\ng.add \"include/search.h\"\ng.add \"include/stdio.h\",                   postfixup: [\"include_stdarg_h\", \"include_crystax_sys_stdio_h\"]\ng.add \"include/stdlib.h\",                  postfixup: \"include_crystax_sys_stdlib_h\"\ng.add \"include/string.h\",                  postfixup: \"include_crystax_sys_string_h\"\ng.add \"include/strings.h\",                 postfixup: \"include_crystax_sys_strings_h\"\ng.add \"include/sysexits.h\"\ng.add \"include/tar.h\"\ng.add \"include/tgmath.h\"\ng.add \"include/time.h\",                    postfixup: \"include_crystax_sys_time_h\"\ng.add \"include/uchar.h\"\ng.add \"include/wchar.h\",                   postfixup: [\"include_stdarg_h\", \"include_crystax_sys_wchar_h\"]\ng.add \"include/wctype.h\",                  postfixup: \"include_crystax_sys_wctype_h\"\ng.add \"include/xlocale/_ctype.h\",          noguard: true\ng.add \"include/xlocale/_inttypes.h\",       noguard: true\ng.add \"include/xlocale/_langinfo.h\",       noguard: true\ng.add \"include/xlocale/_locale.h\",         noguard: true\ng.add \"include/xlocale/_monetary.h\",       noguard: true\ng.add \"include/xlocale/_stdio.h\",          noguard: true\ng.add \"include/xlocale/_stdlib.h\",         noguard: true\ng.add \"include/xlocale/_string.h\",         noguard: true\ng.add \"include/xlocale/_strings.h\",        noguard: true\ng.add \"include/xlocale/_time.h\",           noguard: true\ng.add \"include/xlocale/_uchar.h\",          noguard: true\ng.add \"include/xlocale/_wchar.h\",          noguard: true\n\n# libc\ng.add \"lib/libc/compat-43/getwd.c\"\ng.add \"lib/libc/compat-43/killpg.c\"\ng.add \"lib/libc/gdtoa/_hdtoa.c\"\ng.add \"lib/libc/gdtoa/_hldtoa.c\"\ng.add \"lib/libc/gdtoa/_ldtoa.c\",           warnings: \"uninitialized\"\ng.add \"lib/libc/gdtoa/glue.c\"\ng.add \"lib/libc/gdtoa/machdep_ldisd.c\",    fixup:    \"long_double_64\",  postfixup: \"endif\"\ng.add \"lib/libc/gdtoa/machdep_ldisQ.c\",    fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/libc/gen/alarm.c\"\ng.add \"lib/libc/gen/arc4random.c\"\ng.add \"lib/libc/gen/daemon.c\"\ng.add \"lib/libc/gen/err.c\"\ng.add \"lib/libc/gen/fnmatch.c\"\ng.add \"lib/libc/gen/ftok.c\"\ng.add \"lib/libc/gen/fts.c\"\ng.add \"lib/libc/gen/ftw.c\"\ng.add \"lib/libc/gen/gen-private.h\"\ng.add \"lib/libc/gen/glob.c\",               warnings: \"sign-compare\"\ng.add \"lib/libc/gen/ldexp.c\"\ng.add \"lib/libc/gen/lockf.c\"\ng.add \"lib/libc/gen/nftw.c\"\ng.add \"lib/libc/gen/nice.c\"\ng.add \"lib/libc/gen/popen.c\",              warnings: \"clobbered\",\n                                           fixup:    [\"define__execve\", \"define__wait4\"]\ng.add \"lib/libc/gen/sleep.c\"\ng.add \"lib/libc/gen/usleep.c\"\ng.add \"lib/libc/gen/utime.c\"\n# libc db hash\ng.add \"lib/libc/db/hash/extern.h\"\ng.add \"lib/libc/db/hash/hash.c\",           warnings: \"unused-parameter\"\ng.add \"lib/libc/db/hash/hash.h\"\ng.add \"lib/libc/db/hash/hash_bigkey.c\"\ng.add \"lib/libc/db/hash/hash_buf.c\",       warnings: \"maybe-uninitialized\"\ng.add \"lib/libc/db/hash/hash_func.c\"\ng.add \"lib/libc/db/hash/hash_log2.c\"\ng.add \"lib/libc/db/hash/hash_page.c\",      warnings: \"maybe-uninitialized\"\ng.add \"lib/libc/db/hash/page.h\"\n# libc iconv\ng.add \"lib/libc/iconv/_strtol.h\"\ng.add \"lib/libc/iconv/_strtoul.h\"\ng.add \"lib/libc/iconv/bsd_iconv.c\"\ng.add \"lib/libc/iconv/citrus_bcs.c\"\ng.add \"lib/libc/iconv/citrus_bcs.h\"\ng.add \"lib/libc/iconv/citrus_bcs_strtol.c\"\ng.add \"lib/libc/iconv/citrus_bcs_strtoul.c\"\ng.add \"lib/libc/iconv/citrus_csmapper.c\"\ng.add \"lib/libc/iconv/citrus_csmapper.h\"\ng.add \"lib/libc/iconv/citrus_db.c\"\ng.add \"lib/libc/iconv/citrus_db.h\"\ng.add \"lib/libc/iconv/citrus_db_factory.h\"\ng.add \"lib/libc/iconv/citrus_db_file.h\"\ng.add \"lib/libc/iconv/citrus_db_hash.c\"\ng.add \"lib/libc/iconv/citrus_db_hash.h\"\ng.add \"lib/libc/iconv/citrus_esdb.c\"\ng.add \"lib/libc/iconv/citrus_esdb.h\"\ng.add \"lib/libc/iconv/citrus_esdb_file.h\"\ng.add \"lib/libc/iconv/citrus_hash.c\"\ng.add \"lib/libc/iconv/citrus_hash.h\"\ng.add \"lib/libc/iconv/citrus_iconv.c\"\ng.add \"lib/libc/iconv/citrus_iconv.h\"\ng.add \"lib/libc/iconv/citrus_iconv_local.h\"\ng.add \"lib/libc/iconv/citrus_lock.h\"\ng.add \"lib/libc/iconv/citrus_lookup.c\"\ng.add \"lib/libc/iconv/citrus_lookup.h\"\ng.add \"lib/libc/iconv/citrus_lookup_file.h\"\ng.add \"lib/libc/iconv/citrus_mapper.c\"\ng.add \"lib/libc/iconv/citrus_mapper.h\"\ng.add \"lib/libc/iconv/citrus_mapper_local.h\"\ng.add \"lib/libc/iconv/citrus_memstream.c\"\ng.add \"lib/libc/iconv/citrus_memstream.h\"\ng.add \"lib/libc/iconv/citrus_mmap.c\"\ng.add \"lib/libc/iconv/citrus_mmap.h\"\ng.add \"lib/libc/iconv/citrus_module.c\"\ng.add \"lib/libc/iconv/citrus_module.h\"\ng.add \"lib/libc/iconv/citrus_namespace.h\"\ng.add \"lib/libc/iconv/citrus_none.c\"\ng.add \"lib/libc/iconv/citrus_none.h\"\ng.add \"lib/libc/iconv/citrus_pivot_file.h\"\ng.add \"lib/libc/iconv/citrus_region.h\"\ng.add \"lib/libc/iconv/citrus_stdenc.c\"\ng.add \"lib/libc/iconv/citrus_stdenc.h\"\ng.add \"lib/libc/iconv/citrus_stdenc_local.h\"\ng.add \"lib/libc/iconv/citrus_types.h\"\ng.add \"lib/libc/iconv/iconv-internal.h\"\ng.add \"lib/libc/iconv/iconv.c\"\ng.add \"lib/libc/iconv/iconv_close.c\"\ng.add \"lib/libc/iconv/iconv_open.c\"\n# libc include\ng.add \"lib/libc/include/errlst.h\"\ng.add \"lib/libc/include/nss_tls.h\"\ng.add \"lib/libc/include/reentrant.h\"\n# libc locale\ng.add \"lib/libc/locale/ascii.c\",           warnings: [\"sign-compare\", \"type-limits\", \"tautological-compare\"]\ng.add \"lib/libc/locale/big5.c\"\ng.add \"lib/libc/locale/btowc.c\"\ng.add \"lib/libc/locale/c16rtomb.c\"\ng.add \"lib/libc/locale/c32rtomb.c\"\ng.add \"lib/libc/locale/collate.c\",         warnings: [\"missing-field-initializers\", \"pointer-sign\", \"sign-compare\", \"unused-parameter\"],\n                                           fixup:    \"collate_rename\"\ng.add \"lib/libc/locale/collate.h\"\ng.add \"lib/libc/locale/collcmp.c\",         warnings: \"missing-field-initializers\"\ng.add \"lib/libc/locale/euc.c\",             warnings: \"sign-compare\"\ng.add \"lib/libc/locale/fix_grouping.c\"\ng.add \"lib/libc/locale/gb18030.c\",         warnings: \"sign-compare\"\ng.add \"lib/libc/locale/gb2312.c\",          warnings: \"sign-compare\"\ng.add \"lib/libc/locale/gbk.c\"\ng.add \"lib/libc/locale/isctype.c\"\ng.add \"lib/libc/locale/iswctype.c\",        fixup:    \"include_wctype_h\"\ng.add \"lib/libc/locale/ldpart.c\"\ng.add \"lib/libc/locale/ldpart.h\"\ng.add \"lib/libc/locale/lmessages.c\"\ng.add \"lib/libc/locale/lmessages.h\"\ng.add \"lib/libc/locale/lmonetary.c\"\ng.add \"lib/libc/locale/lmonetary.h\"\ng.add \"lib/libc/locale/lnumeric.c\"\ng.add \"lib/libc/locale/lnumeric.h\"\ng.add \"lib/libc/locale/localeconv.c\"\ng.add \"lib/libc/locale/mblen.c\"\ng.add \"lib/libc/locale/mblocal.h\"\ng.add \"lib/libc/locale/mbrlen.c\"\ng.add \"lib/libc/locale/mbrtoc16.c\"\ng.add \"lib/libc/locale/mbrtoc32.c\"\ng.add \"lib/libc/locale/mbrtowc.c\"\ng.add \"lib/libc/locale/mbsinit.c\"\ng.add \"lib/libc/locale/mbsnrtowcs.c\"\ng.add \"lib/libc/locale/mbsrtowcs.c\"\ng.add \"lib/libc/locale/mbstowcs.c\"\ng.add \"lib/libc/locale/mbtowc.c\"\ng.add \"lib/libc/locale/mskanji.c\"\ng.add \"lib/libc/locale/nl_langinfo.c\"\ng.add \"lib/libc/locale/none.c\",            warnings: [\"sign-compare\", \"type-limits\", \"tautological-compare\", \"missing-field-initializers\"]\ng.add \"lib/libc/locale/rune.c\"\ng.add \"lib/libc/locale/runefile.h\"\ng.add \"lib/libc/locale/runetype.c\"\ng.add \"lib/libc/locale/setlocale.c\"\ng.add \"lib/libc/locale/setlocale.h\"\ng.add \"lib/libc/locale/setrunelocale.c\",   warnings: \"unused-parameter\"\ng.add \"lib/libc/locale/table.c\",           warnings: \"missing-field-initializers\"\ng.add \"lib/libc/locale/tolower.c\"\ng.add \"lib/libc/locale/toupper.c\"\ng.add \"lib/libc/locale/utf8.c\",            warnings: [\"sign-compare\", \"type-limits\", \"tautological-compare\"]\ng.add \"lib/libc/locale/wcrtomb.c\"\ng.add \"lib/libc/locale/wcsftime.c\"\ng.add \"lib/libc/locale/wcsnrtombs.c\",      warnings: \"sign-compare\"\ng.add \"lib/libc/locale/wcsrtombs.c\"\ng.add \"lib/libc/locale/wcstod.c\"\ng.add \"lib/libc/locale/wcstof.c\"\ng.add \"lib/libc/locale/wcstoimax.c\",       warnings: \"sign-compare\"\ng.add \"lib/libc/locale/wcstol.c\",          warnings: \"sign-compare\", fixup: \"include_wctype_h\"\ng.add \"lib/libc/locale/wcstold.c\"\ng.add \"lib/libc/locale/wcstoll.c\",         warnings: \"sign-compare\"\ng.add \"lib/libc/locale/wcstombs.c\"\ng.add \"lib/libc/locale/wcstoul.c\",         warnings: \"sign-compare\", fixup: \"include_wctype_h\"\ng.add \"lib/libc/locale/wcstoull.c\",        warnings: \"sign-compare\"\ng.add \"lib/libc/locale/wcstoumax.c\",       warnings: \"sign-compare\"\ng.add \"lib/libc/locale/wctob.c\"\ng.add \"lib/libc/locale/wctomb.c\"\ng.add \"lib/libc/locale/wctrans.c\",         warnings: \"unused-parameter\"\ng.add \"lib/libc/locale/wctype.c\",          warnings: \"unused-parameter\", fixup: \"include_wctype_h\"\ng.add \"lib/libc/locale/wcwidth.c\"\ng.add \"lib/libc/locale/xlocale.c\",         warnings: \"missing-field-initializers\"\ng.add \"lib/libc/locale/xlocale_private.h\"\n# libc net\ng.add \"lib/libc/net/getprotoent.c\",        warnings: \"unused-parameter\"\ng.add \"lib/libc/net/netdb_private.h\"\ng.add \"lib/libc/net/ntoh.c\"\n# libc regex\ng.add \"lib/libc/regex/cname.h\"\ng.add \"lib/libc/regex/engine.c\"\ng.add \"lib/libc/regex/regcomp.c\",          warnings: [\"sign-compare\", \"maybe-uninitialized\"]\ng.add \"lib/libc/regex/regerror.c\"\ng.add \"lib/libc/regex/regex2.h\"\ng.add \"lib/libc/regex/regexec.c\",          warnings: [\"sign-compare\", \"maybe-uninitialized\", \"unused-but-set-variable\"]\ng.add \"lib/libc/regex/regfree.c\"\ng.add \"lib/libc/regex/utils.h\"\n# libc stdio\ng.add \"lib/libc/stdio/_flock_stub.c\",      warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/asprintf.c\"\ng.add \"lib/libc/stdio/clrerr.c\"\ng.add \"lib/libc/stdio/dprintf.c\"\ng.add \"lib/libc/stdio/fclose.c\"\ng.add \"lib/libc/stdio/fdopen.c\"\ng.add \"lib/libc/stdio/feof.c\"\ng.add \"lib/libc/stdio/ferror.c\"\ng.add \"lib/libc/stdio/fflush.c\"\ng.add \"lib/libc/stdio/fgetc.c\"\ng.add \"lib/libc/stdio/fgetln.c\",           warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/fgetwc.c\",           warnings: \"pointer-sign\"\ng.add \"lib/libc/stdio/fgetws.c\",           warnings: \"pointer-sign\"\ng.add \"lib/libc/stdio/fgetpos.c\"\ng.add \"lib/libc/stdio/fgets.c\",            warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/fileno.c\"\ng.add \"lib/libc/stdio/findfp.c\",           fixup:    \"mutex_initializer\"\ng.add \"lib/libc/stdio/flags.c\"\ng.add \"lib/libc/stdio/floatio.h\"\ng.add \"lib/libc/stdio/fmemopen.c\",         warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/fopen.c\"\ng.add \"lib/libc/stdio/fprintf.c\"\ng.add \"lib/libc/stdio/fpurge.c\"\ng.add \"lib/libc/stdio/fputc.c\"\ng.add \"lib/libc/stdio/fputs.c\"\ng.add \"lib/libc/stdio/fputwc.c\"\ng.add \"lib/libc/stdio/fputws.c\"\ng.add \"lib/libc/stdio/fread.c\",            warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/freopen.c\",          warnings: \"maybe-uninitialized\"\ng.add \"lib/libc/stdio/fscanf.c\"\ng.add \"lib/libc/stdio/fseek.c\",            warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/fsetpos.c\"\ng.add \"lib/libc/stdio/ftell.c\",            warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/funopen.c\"\ng.add \"lib/libc/stdio/fvwrite.c\",          warnings: \"sign-compare\", fixup: \"undef_min\"\ng.add \"lib/libc/stdio/fvwrite.h\"\ng.add \"lib/libc/stdio/fwalk.c\"\ng.add \"lib/libc/stdio/fwide.c\"\ng.add \"lib/libc/stdio/fwprintf.c\"\ng.add \"lib/libc/stdio/fwrite.c\"\ng.add \"lib/libc/stdio/fwscanf.c\"\ng.add \"lib/libc/stdio/getc.c\"\ng.add \"lib/libc/stdio/getchar.c\"\ng.add \"lib/libc/stdio/getdelim.c\",         warnings: \"pointer-sign\"\ng.add \"lib/libc/stdio/getline.c\"\ng.add \"lib/libc/stdio/gets.c\"\ng.add \"lib/libc/stdio/getwc.c\"\ng.add \"lib/libc/stdio/getwchar.c\"\ng.add \"lib/libc/stdio/glue.h\"\ng.add \"lib/libc/stdio/local.h\",            fixup:    \"include_stdio_h\"\ng.add \"lib/libc/stdio/makebuf.c\"\ng.add \"lib/libc/stdio/mktemp.c\"\ng.add \"lib/libc/stdio/open_memstream.c\"\ng.add \"lib/libc/stdio/open_wmemstream.c\",  warnings: \"sign-compare\"\ng.add \"lib/libc/stdio/perror.c\"\ng.add \"lib/libc/stdio/printf-pos.c\"\ng.add \"lib/libc/stdio/printf.c\"\ng.add \"lib/libc/stdio/printfcommon.h\"\ng.add \"lib/libc/stdio/printflocal.h\"\ng.add \"lib/libc/stdio/putc.c\"\ng.add \"lib/libc/stdio/putchar.c\"\ng.add \"lib/libc/stdio/puts.c\"\ng.add \"lib/libc/stdio/putw.c\"\ng.add \"lib/libc/stdio/putwc.c\"\ng.add \"lib/libc/stdio/putwchar.c\"\ng.add \"lib/libc/stdio/refill.c\"\ng.add \"lib/libc/stdio/remove.c\"\ng.add \"lib/libc/stdio/rewind.c\"\ng.add \"lib/libc/stdio/rget.c\"\ng.add \"lib/libc/stdio/scanf.c\"\ng.add \"lib/libc/stdio/setbuf.c\"\ng.add \"lib/libc/stdio/setbuffer.c\"\ng.add \"lib/libc/stdio/setvbuf.c\"\ng.add \"lib/libc/stdio/snprintf.c\"\ng.add \"lib/libc/stdio/sprintf.c\"\ng.add \"lib/libc/stdio/sscanf.c\"\ng.add \"lib/libc/stdio/stdio.c\"\ng.add \"lib/libc/stdio/swprintf.c\"\ng.add \"lib/libc/stdio/swscanf.c\"\ng.add \"lib/libc/stdio/tempnam.c\"\ng.add \"lib/libc/stdio/tmpfile.c\"\ng.add \"lib/libc/stdio/tmpnam.c\"\ng.add \"lib/libc/stdio/ungetc.c\"\ng.add \"lib/libc/stdio/ungetwc.c\"\ng.add \"lib/libc/stdio/vasprintf.c\"\ng.add \"lib/libc/stdio/vdprintf.c\"\ng.add \"lib/libc/stdio/vfprintf.c\",         warnings: [\"maybe-uninitialized\", \"sign-compare\", \"unused-parameter\"]\ng.add \"lib/libc/stdio/vfscanf.c\",          warnings: \"maybe-uninitialized\"\ng.add \"lib/libc/stdio/vfwprintf.c\",        warnings: [\"maybe-uninitialized\", \"sign-compare\", \"pointer-sign\"]\ng.add \"lib/libc/stdio/vfwscanf.c\",         warnings: [\"maybe-uninitialized\", \"sign-compare\", \"unused-but-set-variable\"]\ng.add \"lib/libc/stdio/vprintf.c\"\ng.add \"lib/libc/stdio/vscanf.c\"\ng.add \"lib/libc/stdio/vsnprintf.c\"\ng.add \"lib/libc/stdio/vsprintf.c\"\ng.add \"lib/libc/stdio/vsscanf.c\",          warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/vswprintf.c\",        warnings: \"pointer-sign\"\ng.add \"lib/libc/stdio/vswscanf.c\",         warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/vwprintf.c\"\ng.add \"lib/libc/stdio/vwscanf.c\"\ng.add \"lib/libc/stdio/wbuf.c\"\ng.add \"lib/libc/stdio/wprintf.c\"\ng.add \"lib/libc/stdio/wscanf.c\"\ng.add \"lib/libc/stdio/wsetup.c\"\ng.add \"lib/libc/stdio/xprintf.c\",          warnings: [\"format\", \"unused-parameter\"]\ng.add \"lib/libc/stdio/xprintf_errno.c\",    warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/xprintf_float.c\",    warnings: [\"maybe-uninitialized\", \"unused-but-set-variable\", \"unused-parameter\"]\ng.add \"lib/libc/stdio/xprintf_hexdump.c\",  warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/xprintf_int.c\",      warnings: [\"format\", \"maybe-uninitialized\", \"unused-parameter\", \"sometimes-uninitialized\"]\ng.add \"lib/libc/stdio/xprintf_quote.c\",    warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/xprintf_str.c\",      warnings: [\"pointer-sign\", \"unused-parameter\"]\ng.add \"lib/libc/stdio/xprintf_time.c\",     warnings: \"unused-parameter\"\ng.add \"lib/libc/stdio/xprintf_vis.c\",      warnings: \"unused-parameter\"\n# libc stdlib\ng.add \"lib/libc/stdlib/abs.c\"\ng.add \"lib/libc/stdlib/atof.c\"\ng.add \"lib/libc/stdlib/atoi.c\"\ng.add \"lib/libc/stdlib/atol.c\"\ng.add \"lib/libc/stdlib/atoll.c\"\ng.add \"lib/libc/stdlib/bsearch.c\"\ng.add \"lib/libc/stdlib/div.c\"\ng.add \"lib/libc/stdlib/getenv.c\"\ng.add \"lib/libc/stdlib/getopt_long.c\"\ng.add \"lib/libc/stdlib/hcreate.c\"\ng.add \"lib/libc/stdlib/imaxabs.c\"\ng.add \"lib/libc/stdlib/imaxdiv.c\"\ng.add \"lib/libc/stdlib/insque.c\"\ng.add \"lib/libc/stdlib/labs.c\"\ng.add \"lib/libc/stdlib/ldiv.c\"\ng.add \"lib/libc/stdlib/llabs.c\"\ng.add \"lib/libc/stdlib/lldiv.c\"\ng.add \"lib/libc/stdlib/lsearch.c\"\ng.add \"lib/libc/stdlib/qsort.c\",           warnings: \"sign-compare\"\ng.add \"lib/libc/stdlib/qsort_r.c\"\ng.add \"lib/libc/stdlib/quick_exit.c\"\ng.add \"lib/libc/stdlib/random.c\"\ng.add \"lib/libc/stdlib/reallocf.c\"\ng.add \"lib/libc/stdlib/realpath.c\",        warnings: \"sign-compare\"\ng.add \"lib/libc/stdlib/remque.c\"\ng.add \"lib/libc/stdlib/strfmon.c\"\ng.add \"lib/libc/stdlib/strtoimax.c\"\ng.add \"lib/libc/stdlib/strtol.c\"\ng.add \"lib/libc/stdlib/strtoll.c\"\ng.add \"lib/libc/stdlib/strtoq.c\"\ng.add \"lib/libc/stdlib/strtoul.c\"\ng.add \"lib/libc/stdlib/strtoull.c\"\ng.add \"lib/libc/stdlib/strtoumax.c\"\ng.add \"lib/libc/stdlib/strtouq.c\"\ng.add \"lib/libc/stdlib/system.c\"\ng.add \"lib/libc/stdlib/tdelete.c\"\ng.add \"lib/libc/stdlib/tfind.c\"\ng.add \"lib/libc/stdlib/tsearch.c\"\ng.add \"lib/libc/stdlib/twalk.c\"\n# libc stdtime\ng.add \"lib/libc/stdtime/strftime.c\",       fixup:    \"include_wctype_h\"\ng.add \"lib/libc/stdtime/strptime.c\",       warnings: \"sign-compare\"\ng.add \"lib/libc/stdtime/timelocal.c\"\ng.add \"lib/libc/stdtime/timelocal.h\"\n# libc string\ng.add \"lib/libc/string/bcmp.c\"\ng.add \"lib/libc/string/bcopy.c\"\ng.add \"lib/libc/string/bzero.c\"\ng.add \"lib/libc/string/ffs.c\"\ng.add \"lib/libc/string/ffsl.c\"\ng.add \"lib/libc/string/ffsll.c\"\ng.add \"lib/libc/string/fls.c\"\ng.add \"lib/libc/string/flsl.c\"\ng.add \"lib/libc/string/flsll.c\"\ng.add \"lib/libc/string/memccpy.c\"\ng.add \"lib/libc/string/memchr.c\"\ng.add \"lib/libc/string/memcmp.c\"\ng.add \"lib/libc/string/memcpy.c\"\ng.add \"lib/libc/string/memmem.c\"\ng.add \"lib/libc/string/memmove.c\"\ng.add \"lib/libc/string/memrchr.c\"\ng.add \"lib/libc/string/memset.c\"\ng.add \"lib/libc/string/stpcpy.c\"\ng.add \"lib/libc/string/stpncpy.c\"\ng.add \"lib/libc/string/strcasecmp.c\"\ng.add \"lib/libc/string/strcasestr.c\"\ng.add \"lib/libc/string/strcat.c\"\ng.add \"lib/libc/string/strchr.c\"\ng.add \"lib/libc/string/strchrnul.c\"\ng.add \"lib/libc/string/strcmp.c\"\ng.add \"lib/libc/string/strcoll.c\",         fixup:    \"collate_fixwarnings\"\ng.add \"lib/libc/string/strcpy.c\"\ng.add \"lib/libc/string/strcspn.c\",         warnings: \"sign-compare\"\ng.add \"lib/libc/string/strdup.c\"\ng.add \"lib/libc/string/strlcpy.c\"\ng.add \"lib/libc/string/strlcat.c\"\ng.add \"lib/libc/string/strlen.c\"\ng.add \"lib/libc/string/strmode.c\"\ng.add \"lib/libc/string/strncat.c\"\ng.add \"lib/libc/string/strncmp.c\"\ng.add \"lib/libc/string/strncpy.c\"\ng.add \"lib/libc/string/strndup.c\"\ng.add \"lib/libc/string/strnlen.c\"\ng.add \"lib/libc/string/strpbrk.c\"\ng.add \"lib/libc/string/strrchr.c\"\ng.add \"lib/libc/string/strsep.c\"\ng.add \"lib/libc/string/strspn.c\",          warnings: \"sign-compare\"\ng.add \"lib/libc/string/strstr.c\"\ng.add \"lib/libc/string/strtok.c\"\ng.add \"lib/libc/string/strxfrm.c\",         fixup:    \"collate_fixwarnings\"\ng.add \"lib/libc/string/swab.c\"\ng.add \"lib/libc/string/wcpcpy.c\"\ng.add \"lib/libc/string/wcpncpy.c\"\ng.add \"lib/libc/string/wcscasecmp.c\"\ng.add \"lib/libc/string/wcscat.c\"\ng.add \"lib/libc/string/wcschr.c\"\ng.add \"lib/libc/string/wcscmp.c\"\ng.add \"lib/libc/string/wcscoll.c\"\ng.add \"lib/libc/string/wcscpy.c\"\ng.add \"lib/libc/string/wcscspn.c\"\ng.add \"lib/libc/string/wcsdup.c\"\ng.add \"lib/libc/string/wcslcat.c\"\ng.add \"lib/libc/string/wcslcpy.c\"\ng.add \"lib/libc/string/wcslen.c\"\ng.add \"lib/libc/string/wcsncasecmp.c\"\ng.add \"lib/libc/string/wcsncat.c\"\ng.add \"lib/libc/string/wcsncmp.c\"\ng.add \"lib/libc/string/wcsncpy.c\"\ng.add \"lib/libc/string/wcsnlen.c\"\ng.add \"lib/libc/string/wcspbrk.c\"\ng.add \"lib/libc/string/wcsrchr.c\"\ng.add \"lib/libc/string/wcsspn.c\"\ng.add \"lib/libc/string/wcsstr.c\"\ng.add \"lib/libc/string/wcstok.c\"\ng.add \"lib/libc/string/wcswidth.c\"\ng.add \"lib/libc/string/wcsxfrm.c\",         fixup:    \"collate_fixwarnings\"\ng.add \"lib/libc/string/wmemchr.c\"\ng.add \"lib/libc/string/wmemcmp.c\"\ng.add \"lib/libc/string/wmemcpy.c\"\ng.add \"lib/libc/string/wmemmove.c\"\ng.add \"lib/libc/string/wmemset.c\"\n# libiconv modules\ng.add \"lib/libiconv_modules/iconv_none/citrus_iconv_none.c\"\ng.add \"lib/libiconv_modules/iconv_none/citrus_iconv_none.h\"\ng.add \"lib/libiconv_modules/iconv_std/citrus_iconv_std.c\"\ng.add \"lib/libiconv_modules/iconv_std/citrus_iconv_std.h\"\ng.add \"lib/libiconv_modules/iconv_std/citrus_iconv_std_local.h\"\n# msun\ng.add \"lib/msun/bsdsrc/b_exp.c\"\ng.add \"lib/msun/bsdsrc/b_log.c\"\ng.add \"lib/msun/bsdsrc/b_tgamma.c\"\ng.add \"lib/msun/bsdsrc/mathimpl.h\"\ng.add \"lib/msun/ld128/e_lgammal_r.c\",      warnings: [\"unused-but-set-variable\", \"unused-variable\", \"maybe-uninitialized\"]\ng.add \"lib/msun/ld128/e_rem_pio2l.h\",      warnings: [\"type-limits\", \"parentheses\"]\ng.add \"lib/msun/ld128/invtrig.c\",          fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/invtrig.h\"\ng.add \"lib/msun/ld128/k_cosl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/k_expl.h\",           warnings: \"missing-braces\"\ng.add \"lib/msun/ld128/k_sinl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/k_tanl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/s_erfl.c\",           warnings: \"unused-but-set-variable\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/s_exp2l.c\",          fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/s_expl.c\",           warnings: \"missing-braces\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/s_logl.c\",           warnings: \"missing-braces\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/ld128/s_nanl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/catrig.c\",             warnings: \"unused-variable\"\ng.add \"lib/msun/src/catrigf.c\",            warnings: \"unused-variable\"\ng.add \"lib/msun/src/e_acos.c\"\ng.add \"lib/msun/src/e_acosf.c\"\ng.add \"lib/msun/src/e_acosl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_acosh.c\"\ng.add \"lib/msun/src/e_acoshf.c\"\ng.add \"lib/msun/src/e_acoshl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_asin.c\"\ng.add \"lib/msun/src/e_asinf.c\"\ng.add \"lib/msun/src/e_asinl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_atan2.c\",            warnings: \"parentheses\"\ng.add \"lib/msun/src/e_atan2f.c\"\ng.add \"lib/msun/src/e_atan2l.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_atanh.c\"\ng.add \"lib/msun/src/e_atanhf.c\"\ng.add \"lib/msun/src/e_atanhl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_cosh.c\"\ng.add \"lib/msun/src/e_coshf.c\"\ng.add \"lib/msun/src/e_coshl.c\",            warnings: \"unused-variable\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_exp.c\"\ng.add \"lib/msun/src/e_expf.c\"\ng.add \"lib/msun/src/e_fmod.c\"\ng.add \"lib/msun/src/e_fmodf.c\"\ng.add \"lib/msun/src/e_fmodl.c\",            warnings: [\"sign-compare\", \"maybe-uninitialized\"]\ng.add \"lib/msun/src/e_gamma.c\"\ng.add \"lib/msun/src/e_gamma_r.c\"\ng.add \"lib/msun/src/e_gammaf.c\"\ng.add \"lib/msun/src/e_gammaf_r.c\"\ng.add \"lib/msun/src/e_hypot.c\"\ng.add \"lib/msun/src/e_hypotf.c\"\ng.add \"lib/msun/src/e_hypotl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_j0.c\",               warnings: \"maybe-uninitialized\"\ng.add \"lib/msun/src/e_j0f.c\"\ng.add \"lib/msun/src/e_j1.c\",               warnings: \"maybe-uninitialized\"\ng.add \"lib/msun/src/e_j1f.c\"\ng.add \"lib/msun/src/e_jn.c\"\ng.add \"lib/msun/src/e_jnf.c\",              warnings: \"sign-compare\"\ng.add \"lib/msun/src/e_lgamma.c\"\ng.add \"lib/msun/src/e_lgamma_r.c\",         warnings: \"maybe-uninitialized\"\ng.add \"lib/msun/src/e_lgammaf.c\"\ng.add \"lib/msun/src/e_lgammaf_r.c\",        warnings: [\"maybe-uninitialized\", \"unused-variable\"]\ng.add \"lib/msun/src/e_lgammal.c\"\ng.add \"lib/msun/src/e_log.c\"\ng.add \"lib/msun/src/e_log10.c\"\ng.add \"lib/msun/src/e_log10f.c\"\ng.add \"lib/msun/src/e_log2.c\"\ng.add \"lib/msun/src/e_log2f.c\"\ng.add \"lib/msun/src/e_logf.c\"\ng.add \"lib/msun/src/e_pow.c\",              warnings: \"sign-compare\"\ng.add \"lib/msun/src/e_powf.c\",             warnings: \"sign-compare\"\ng.add \"lib/msun/src/e_rem_pio2.c\"\ng.add \"lib/msun/src/e_rem_pio2f.c\"\ng.add \"lib/msun/src/e_remainder.c\"\ng.add \"lib/msun/src/e_remainderf.c\"\ng.add \"lib/msun/src/e_remainderl.c\",       fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_scalb.c\"\ng.add \"lib/msun/src/e_scalbf.c\"\ng.add \"lib/msun/src/e_sinh.c\"\ng.add \"lib/msun/src/e_sinhf.c\"\ng.add \"lib/msun/src/e_sinhl.c\",            warnings: \"unused-variable\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/e_sqrt.c\",             warnings: \"sign-compare\"\ng.add \"lib/msun/src/e_sqrtf.c\"\ng.add \"lib/msun/src/e_sqrtl.c\",            warnings: \"unknown-pragmas\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/k_cos.c\"\ng.add \"lib/msun/src/k_cosf.c\"\ng.add \"lib/msun/src/k_exp.c\"\ng.add \"lib/msun/src/k_expf.c\"\ng.add \"lib/msun/src/k_log.h\"\ng.add \"lib/msun/src/k_logf.h\"\ng.add \"lib/msun/src/k_rem_pio2.c\"\ng.add \"lib/msun/src/k_sin.c\"\ng.add \"lib/msun/src/k_sinf.c\"\ng.add \"lib/msun/src/k_tan.c\"\ng.add \"lib/msun/src/k_tanf.c\"\ng.add \"lib/msun/src/math.h\",               postfixup: \"include_crystax_sys_math_h\"\ng.add \"lib/msun/src/math_private.h\"\ng.add \"lib/msun/src/s_asinh.c\"\ng.add \"lib/msun/src/s_asinhf.c\"\ng.add \"lib/msun/src/s_asinhl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_atan.c\"\ng.add \"lib/msun/src/s_atanf.c\"\ng.add \"lib/msun/src/s_atanl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_carg.c\"\ng.add \"lib/msun/src/s_cargf.c\"\ng.add \"lib/msun/src/s_cbrt.c\"\ng.add \"lib/msun/src/s_cbrtf.c\"\ng.add \"lib/msun/src/s_cbrtl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_ccosh.c\"\ng.add \"lib/msun/src/s_ccoshf.c\"\ng.add \"lib/msun/src/s_ceil.c\",             warnings: \"sign-compare\"\ng.add \"lib/msun/src/s_ceilf.c\"\ng.add \"lib/msun/src/s_ceill.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_cexp.c\"\ng.add \"lib/msun/src/s_cexpf.c\"\ng.add \"lib/msun/src/s_cimag.c\"\ng.add \"lib/msun/src/s_cimagf.c\"\ng.add \"lib/msun/src/s_cimagl.c\"\ng.add \"lib/msun/src/s_conj.c\"\ng.add \"lib/msun/src/s_conjf.c\"\ng.add \"lib/msun/src/s_conjl.c\"\ng.add \"lib/msun/src/s_copysign.c\"\ng.add \"lib/msun/src/s_copysignf.c\"\ng.add \"lib/msun/src/s_copysignl.c\"\ng.add \"lib/msun/src/s_cos.c\"\ng.add \"lib/msun/src/s_cosf.c\"\ng.add \"lib/msun/src/s_cosl.c\",             fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_cproj.c\"\ng.add \"lib/msun/src/s_cprojf.c\"\ng.add \"lib/msun/src/s_cprojl.c\"\ng.add \"lib/msun/src/s_creal.c\"\ng.add \"lib/msun/src/s_crealf.c\"\ng.add \"lib/msun/src/s_creall.c\"\ng.add \"lib/msun/src/s_csinh.c\"\ng.add \"lib/msun/src/s_csinhf.c\"\ng.add \"lib/msun/src/s_csqrt.c\",            warnings: \"unknown-pragmas\"\ng.add \"lib/msun/src/s_csqrtf.c\",           warnings: \"unknown-pragmas\"\ng.add \"lib/msun/src/s_csqrtl.c\",           warnings: \"unknown-pragmas\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_ctanh.c\"\ng.add \"lib/msun/src/s_ctanhf.c\"\ng.add \"lib/msun/src/s_erf.c\"\ng.add \"lib/msun/src/s_erff.c\"\ng.add \"lib/msun/src/s_exp2.c\"\ng.add \"lib/msun/src/s_exp2f.c\"\ng.add \"lib/msun/src/s_expm1.c\"\ng.add \"lib/msun/src/s_expm1f.c\"\ng.add \"lib/msun/src/s_fabs.c\"\ng.add \"lib/msun/src/s_fabsf.c\"\ng.add \"lib/msun/src/s_fabsl.c\"\ng.add \"lib/msun/src/s_fdim.c\"\ng.add \"lib/msun/src/s_finite.c\"\ng.add \"lib/msun/src/s_finitef.c\"\ng.add \"lib/msun/src/s_floor.c\",            warnings: \"sign-compare\"\ng.add \"lib/msun/src/s_floorf.c\"\ng.add \"lib/msun/src/s_floorl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_fma.c\",              warnings: \"parentheses\"\ng.add \"lib/msun/src/s_fmaf.c\"\ng.add \"lib/msun/src/s_fmal.c\",             warnings: \"parentheses\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_fmax.c\"\ng.add \"lib/msun/src/s_fmaxf.c\"\ng.add \"lib/msun/src/s_fmaxl.c\"\ng.add \"lib/msun/src/s_fmin.c\"\ng.add \"lib/msun/src/s_fminf.c\"\ng.add \"lib/msun/src/s_fminl.c\"\ng.add \"lib/msun/src/s_frexp.c\"\ng.add \"lib/msun/src/s_frexpf.c\"\ng.add \"lib/msun/src/s_frexpl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_ilogb.c\"\ng.add \"lib/msun/src/s_ilogbf.c\"\ng.add \"lib/msun/src/s_ilogbl.c\"\ng.add \"lib/msun/src/s_llrint.c\"\ng.add \"lib/msun/src/s_llrintf.c\"\ng.add \"lib/msun/src/s_llrintl.c\"\ng.add \"lib/msun/src/s_llround.c\"\ng.add \"lib/msun/src/s_llroundf.c\"\ng.add \"lib/msun/src/s_llroundl.c\"\ng.add \"lib/msun/src/s_log1p.c\"\ng.add \"lib/msun/src/s_log1pf.c\"\ng.add \"lib/msun/src/s_logb.c\"\ng.add \"lib/msun/src/s_logbf.c\"\ng.add \"lib/msun/src/s_logbl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_lrint.c\"\ng.add \"lib/msun/src/s_lrintf.c\"\ng.add \"lib/msun/src/s_lrintl.c\"\ng.add \"lib/msun/src/s_lround.c\"\ng.add \"lib/msun/src/s_lroundf.c\"\ng.add \"lib/msun/src/s_lroundl.c\"\ng.add \"lib/msun/src/s_modf.c\"\ng.add \"lib/msun/src/s_modff.c\"\ng.add \"lib/msun/src/s_modfl.c\",            warnings: [\"uninitialized\", \"maybe-uninitialized\"]\ng.add \"lib/msun/src/s_nan.c\"\ng.add \"lib/msun/src/s_nearbyint.c\"\ng.add \"lib/msun/src/s_nextafter.c\"\ng.add \"lib/msun/src/s_nextafterf.c\"\ng.add \"lib/msun/src/s_nextafterl.c\",       warnings: \"parentheses\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_nexttoward.c\",       warnings: \"parentheses\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_nexttowardf.c\",      warnings: \"parentheses\"\ng.add \"lib/msun/src/s_remquo.c\"\ng.add \"lib/msun/src/s_remquof.c\"\ng.add \"lib/msun/src/s_remquol.c\",          warnings: \"sign-compare\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_rint.c\"\ng.add \"lib/msun/src/s_rintf.c\"\ng.add \"lib/msun/src/s_rintl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_round.c\"\ng.add \"lib/msun/src/s_roundf.c\"\ng.add \"lib/msun/src/s_roundl.c\"\ng.add \"lib/msun/src/s_scalbln.c\"\ng.add \"lib/msun/src/s_scalbn.c\",           warnings: \"parentheses\"\ng.add \"lib/msun/src/s_scalbnf.c\",          warnings: \"parentheses\"\ng.add \"lib/msun/src/s_scalbnl.c\",          warnings: \"parentheses\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_signbit.c\",          warnings: \"uninitialized\"\ng.add \"lib/msun/src/s_signgam.c\"\ng.add \"lib/msun/src/s_significand.c\"\ng.add \"lib/msun/src/s_significandf.c\"\ng.add \"lib/msun/src/s_sin.c\"\ng.add \"lib/msun/src/s_sinf.c\"\ng.add \"lib/msun/src/s_sinl.c\",             fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_tan.c\"\ng.add \"lib/msun/src/s_tanf.c\"\ng.add \"lib/msun/src/s_tanh.c\"\ng.add \"lib/msun/src/s_tanhf.c\"\ng.add \"lib/msun/src/s_tanhl.c\",            warnings: \"unused-variable\",\n                                           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_tanl.c\",             fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/s_tgammaf.c\"\ng.add \"lib/msun/src/s_trunc.c\"\ng.add \"lib/msun/src/s_truncf.c\"\ng.add \"lib/msun/src/s_truncl.c\",           fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/w_cabs.c\"\ng.add \"lib/msun/src/w_cabsf.c\"\ng.add \"lib/msun/src/w_cabsl.c\",            fixup:    \"long_double_128\", postfixup: \"endif\"\ng.add \"lib/msun/src/w_drem.c\"\ng.add \"lib/msun/src/w_dremf.c\"\n# platform-specific\ng.add \"sys/arm/include/_inttypes.h\"\ng.add \"sys/arm/include/_limits.h\"\ng.add \"sys/arm/include/_stdint.h\"\ng.add \"sys/arm/include/armreg.h\"\ng.add \"sys/arm/include/endian.h\"\ng.add \"sys/arm/include/sysarch.h\"\ng.add \"sys/i386/include/ieeefp.h\"\ng.add \"sys/mips/include/_inttypes.h\"\ng.add \"sys/mips/include/_limits.h\"\ng.add \"sys/mips/include/_stdint.h\"\ng.add \"sys/mips/include/endian.h\"\ng.add \"sys/sys/_null.h\"\ng.add \"sys/sys/_stdint.h\"\ng.add \"sys/sys/endian.h\",                  postfixup: \"include_crystax_sys_endian_h\"\ng.add \"sys/sys/iconv.h\",                   fixup:     \"include_sys_types_h\"\ng.add \"sys/sys/limits.h\",                  postfixup: \"include_crystax_sys_limits_h\"\ng.add \"sys/sys/queue.h\"\ng.add \"sys/sys/stdint.h\"\ng.add \"sys/x86/include/_inttypes.h\"\ng.add \"sys/x86/include/_limits.h\"\ng.add \"sys/x86/include/_stdint.h\"\ng.add \"sys/x86/include/endian.h\"\n\n[\n    \"arm\",\n    \"arm64\",\n    \"i386\",\n    \"amd64\",\n    \"mips\",\n    \"mips64\",\n].each do |a|\n    [\n        \"arith.h\",\n        \"gd_qnan.h\",\n    ].each do |i|\n        ta = case a\n             when \"i386\"\n                 \"x86\"\n             when \"amd64\"\n                 \"x86_64\"\n             else\n                 a\n             end\n        g.add \"lib/libc/#{a}/#{i}\" do |f|\n            f.puts \"#include <crystax/#{ta}/#{i}>\"\n        end\n    end\nend\n\n[\"arm64\", \"mips64\"].each do |a|\n    [\n        \"_inttypes.h\",\n        \"_limits.h\",\n        \"_stdint.h\",\n        \"endian.h\",\n    ].each do |i|\n        g.add \"sys/#{a}/include/#{i}\" do |f|\n            f.puts \"#include <crystax/#{a}/#{i}>\"\n        end\n    end\nend\n\ng.add \"lib/libc/include/fpmath.h\" do |f|\n    f.puts \"#include <crystax/sys/fpmath.h>\"\nend\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/gen-compiler-rt-headers",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.join(TOPDIR, '../../../../vendor/compiler-rt/lib/BlocksRuntime')\nDSTDIR = File.join(TOPDIR, 'include', 'blocks-runtime')\n\nDir.glob(File.join(SRCDIR, '*.h')).each do |src|\n    dst = File.join(DSTDIR, File.basename(src))\n\n    next if File.exists?(dst) && File.mtime(dst) > File.mtime(__FILE__) && File.mtime(dst) > File.mtime(src)\n\n    FileUtils.mkdir_p File.dirname(dst)\n    FileUtils.rm_f dst\n    FileUtils.cp src, dst\nend\n"
  },
  {
    "path": "sources/crystax/bin/gen-libkqueue-sources",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'digest'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.realpath(File.join(TOPDIR, '../../../../vendor/libkqueue'))\n\nPRIVATEDIR = File.join(TOPDIR, 'gen', 'libkqueue')\nPUBLICDIR  = File.join(TOPDIR, 'include')\n\nclass Generator\n    def initialize\n        @files = {}\n    end\n\n    def license\n        @license = File.read(File.join(TOPDIR, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n    private :license\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n    private :relpath\n\n    def add(f, options = {}, &block)\n        raise \"No such file: #{f}\" if !File.exists?(File.join(SRCDIR, f)) && !block_given?\n        raise \"File #{f} already added\" if @files.has_key?(f)\n        ff = {options: options}\n        ff[:generator] = block if block_given?\n        @files[f] = ff\n    end\n\n    def generate\n        total = @files.size\n        current = 0\n        @files.each do |f,e|\n            options = e[:options]\n            generator = e[:generator]\n\n            if generator.nil?\n                src = File.join(SRCDIR, f)\n            else\n                src = __FILE__\n            end\n            mdst = File.join(options[:public] ? File.join(PUBLICDIR, 'crystax', 'libkqueue') : PRIVATEDIR, File.dirname(f), \"mangled-#{File.basename(f)}\")\n\n            if options[:public]\n                f = f.split('/')[1..-1].join('/') if f =~ /^include\\//\n                dst = File.join(PUBLICDIR, f)\n            else\n                dst = File.join(PRIVATEDIR, f)\n            end\n\n            symdst = []\n            if options[:symlink]\n                symsrc = options[:symlink]\n                symsrc = [symsrc] unless symsrc.is_a?(Array)\n                symdst += symsrc.map { |es| File.join(PRIVATEDIR, es) }\n            end\n\n            next if File.exists?(dst) && File.exists?(mdst) &&\n                File.mtime(dst)  >= File.mtime(mdst) &&\n                File.mtime(mdst) >= File.mtime(src) &&\n                File.mtime(dst)  >= File.mtime(__FILE__) &&\n                File.mtime(mdst) >= File.mtime(__FILE__)\n\n            current += 1\n            puts \"GEN  [#{current}/#{total}] #{f}\"\n\n            FileUtils.rm_f mdst\n            FileUtils.mkdir_p File.dirname(mdst)\n            if generator.nil?\n                FileUtils.cp src, mdst\n            else\n                File.open(mdst, \"w\") do |ff|\n                    generator.call(ff)\n                end\n            end\n\n            FileUtils.mkdir_p File.dirname(dst)\n            File.open(dst, \"w\") do |df|\n                df.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                df.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} */\"\n                df.puts \"\"\n\n                df.puts \"/*\"\n                license.each do |line|\n                    df.puts \" * #{line}\".rstrip\n                end\n                df.puts \" */\"\n\n                guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dst, TOPDIR)).hexdigest}\".upcase\n                df.puts \"\"\n                df.puts \"#ifndef #{guard}\"\n                df.puts \"#define #{guard}\"\n\n                df.puts \"\"\n                if options[:public]\n                    df.puts \"#include <crystax/id.h>\"\n                    df.puts \"#include <#{relpath(mdst, File.join(TOPDIR, 'include'))}>\"\n                else\n                    df.puts \"#include \\\"#{File.basename(mdst)}\\\"\"\n                end\n\n                df.puts \"\"\n                df.puts \"#endif /* #{guard} */\"\n            end\n\n            symdst.each do |sd|\n                FileUtils.mkdir_p File.dirname(sd)\n                FileUtils.rm_f sd\n                FileUtils.ln_s mdst, sd\n            end\n        end\n    end\nend\n\ng = Generator.new\n\ng.add \"config.h\", symlink: \"src/common/config.h\" do |f|\n    f.puts <<-EOF\n#include <android/api-level.h>\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define to 1 if you have the <sys/eventfd.h> header file. */\n#define HAVE_SYS_EVENTFD_H 1\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n#define HAVE_SYS_INOTIFY_H 1\n\n/* Define to 1 if you have the <sys/signalfd.h> header file. */\n#if __ANDROID_API__ >= 21\n#define HAVE_SYS_SIGNALFD_H 1\n#endif\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/timerfd.h> header file. */\n#if __ANDROID_API__ >= 21\n#define HAVE_SYS_TIMERFD_H 1\n#endif\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n    EOF\nend\n\ng.add \"include/sys/event.h\", public: true\n\ng.add \"src/common/alloc.h\"\ng.add \"src/common/debug.h\"\ng.add \"src/common/private.h\"\ng.add \"src/common/queue.h\"\ng.add \"src/common/tree.h\"\ng.add \"src/linux/platform.h\"\ng.add \"src/posix/platform.h\"\n\ng.add \"src/common/filter.c\"\ng.add \"src/common/kevent.c\"\ng.add \"src/common/knote.c\"\ng.add \"src/common/kqueue.c\"\ng.add \"src/common/map.c\"\n\ng.add \"src/posix/platform.c\"\n\ng.add \"src/linux/platform.c\"\ng.add \"src/linux/read.c\"\ng.add \"src/linux/signal.c\"\ng.add \"src/linux/timer.c\"\ng.add \"src/linux/user.c\"\ng.add \"src/linux/vnode.c\"\ng.add \"src/linux/write.c\"\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/gen-libpwq-sources",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'digest'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.realpath(File.join(TOPDIR, '../../../../vendor/libpwq'))\n\nPRIVATEDIR = File.join(TOPDIR, 'gen', 'libpwq')\nPUBLICDIR  = File.join(TOPDIR, 'include')\n\nclass Generator\n    def initialize\n        @files = []\n    end\n\n    def license\n        @license = File.read(File.join(TOPDIR, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n    private :license\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n    private :relpath\n\n    def add(f, options = {})\n        raise \"No such file: #{f}\" unless File.exists?(File.join(SRCDIR, f))\n        raise \"File #{f} already added\" if @files.include?(f)\n        @files << {file: f, options: options}\n    end\n\n    def generate\n        total = @files.size\n        current = 0\n        @files.each do |e|\n            f = e[:file]\n            options = e[:options]\n\n            src = File.join(SRCDIR, f)\n            mdst = File.join(options[:public] ? File.join(PUBLICDIR, 'crystax', 'libpwq') : PRIVATEDIR, File.dirname(f), \"mangled-#{File.basename(f)}\")\n\n            if options[:public]\n                f = f.split('/')[1..-1].join('/') if f =~ /^include\\//\n                dst = File.join(PUBLICDIR, f)\n            else\n                dst = File.join(PRIVATEDIR, f)\n            end\n\n            symdst = []\n            if options[:symlink]\n                symsrc = options[:symlink]\n                symsrc = [symsrc] unless symsrc.is_a?(Array)\n                symdst += symsrc.map { |es| File.join(PRIVATEDIR, es) }\n            end\n\n            next if File.exists?(dst) && File.exists?(mdst) &&\n                File.mtime(dst)  >= File.mtime(mdst) &&\n                File.mtime(mdst) >= File.mtime(src) &&\n                File.mtime(dst)  >= File.mtime(__FILE__) &&\n                File.mtime(mdst) >= File.mtime(__FILE__)\n\n            current += 1\n            puts \"GEN  [#{current}/#{total}] #{f}\"\n\n            FileUtils.rm_f mdst\n            FileUtils.mkdir_p File.dirname(mdst)\n            FileUtils.cp src, mdst\n\n            FileUtils.mkdir_p File.dirname(dst)\n            File.open(dst, \"w\") do |df|\n                df.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                df.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} */\"\n                df.puts \"\"\n\n                df.puts \"/*\"\n                license.each do |line|\n                    df.puts \" * #{line}\".rstrip\n                end\n                df.puts \" */\"\n\n                guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dst, TOPDIR)).hexdigest}\".upcase\n                df.puts \"\"\n                df.puts \"#ifndef #{guard}\"\n                df.puts \"#define #{guard}\"\n\n                df.puts \"\"\n                if options[:public]\n                    df.puts \"#include <crystax/id.h>\"\n                    df.puts \"#include <#{relpath(mdst, File.join(TOPDIR, 'include'))}>\"\n                else\n                    df.puts \"#include \\\"#{File.basename(mdst)}\\\"\"\n                end\n\n                df.puts \"\"\n                df.puts \"#endif /* #{guard} */\"\n            end\n\n            symdst.each do |sd|\n                FileUtils.mkdir_p File.dirname(sd)\n                FileUtils.rm_f sd\n                FileUtils.ln_s mdst, sd\n            end\n        end\n    end\nend\n\ng = Generator.new\n\ng.add \"include/pthread_workqueue.h\", public: true\n\ng.add \"src/linux/platform.h\", symlink: [\"src/posix/linux/platform.h\", \"src/linux/linux/platform.h\"]\ng.add \"src/posix/platform.h\", symlink: [\"src/posix/posix/platform.h\", \"src/linux/posix/platform.h\"]\n\ng.add \"src/debug.h\",          symlink: [\"src/posix/debug.h\",       \"src/linux/debug.h\"]\ng.add \"src/private.h\",        symlink: [\"src/posix/private.h\",     \"src/linux/private.h\"]\ng.add \"src/thread_info.h\",    symlink: [\"src/posix/thread_info.h\", \"src/linux/thread_info.h\"]\ng.add \"src/thread_rt.h\",      symlink: [\"src/posix/thread_rt.h\",   \"src/linux/thread_rt.h\"]\n\ng.add \"src/api.c\"\ng.add \"src/linux/load.c\"\ng.add \"src/linux/thread_info.c\"\ng.add \"src/linux/thread_rt.c\"\ng.add \"src/posix/manager.c\"\ng.add \"src/witem_cache.c\"\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/gen-locales",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'optparse'\nrequire 'open3'\nrequire 'fileutils'\nrequire 'digest'\n\noptions = {}\nparser = OptionParser.new do |o|\n    o.on(\"--host=HOST\", \"Specify FreeBSD host to retrieve locales from\") do |h|\n        options[:host] = h\n    end\n\n    o.on(\"-o\", \"--output=FILE\", \"Specify output file to save generated locales and it's initialization code\") do |f|\n        options[:out] = f\n    end\nend\nparser.parse(ARGV)\n\nif options[:out].nil?\n    $stderr.puts parser\n    exit 1\nend\n\n$licfile = File.join(File.dirname(__FILE__), '..', 'LICENSE')\nabort \"Can't find LICENSE file\" unless File.exists?($licfile)\n\nhost_os, = Open3.capture3(\"uname -s\")\nif host_os.chomp.downcase != \"freebsd\" && options[:host].nil?\n    $stderr.puts parser\n    exit 1\nend\n\nif options[:host].nil?\n    ROOTDIR = File.realpath(\"/usr/share/locale\")\nelse\n    puts \"Checking remote host #{options[:host]} ...\"\n    rem_host_os, = Open3.capture3(\"ssh #{options[:host]} uname -s\")\n    if rem_host_os.chomp.downcase != \"freebsd\"\n        $stderr.puts \"Remote host #{options[:host]} is not FreeBSD host\"\n        exit 1\n    end\n\n    FileUtils.mkdir_p \"/tmp/locale\"\n    ROOTDIR = File.realpath(\"/tmp/locale\")\n    FileUtils.rm_rf ROOTDIR\n    FileUtils.mkdir_p ROOTDIR\n    at_exit { FileUtils.rm_rf ROOTDIR }\n\n    puts \"Retrieving locale data from #{options[:host]} ...\"\n    _, re, rs = Open3.capture3(\"rsync -aq --delete #{options[:host]}:/usr/share/locale/ #{ROOTDIR}/\")\n    if !rs.success?\n        $stderr.puts \"Couldn't copy locales from #{options[:host]}:\"\n        $stderr.write re\n        exit 1\n    end\nend\n\ndef add_license(f)\n    File.open($licfile, \"r\") do |l|\n        f.puts \"/*\"\n        while line = l.gets\n            f.puts \" * #{line}\".rstrip\n        end\n        f.puts \" */\"\n    end\nend\n\nlocales = []\n\nDir.glob(File.join(ROOTDIR, \"**/*\")).each do |e|\n    next if File.directory?(e)\n\n    le = e.sub(\"#{ROOTDIR}/\", '')\n    abort \"Wrong locale file found: #{e}\" if le.split('/').size != 2\n    locale = {encoding: le.split('/')[0], type: le.split('/')[1]}\n\n    puts \"Generating locale #{le} ...\"\n\n    if File.symlink?(e)\n        sl = File.realpath(e).sub(\"#{ROOTDIR}/\", '')\n        abort \"Wrong symlink found: #{le} -> #{sl}\" if sl.split('/').size != 2\n        abort \"Alias point to another locale type: #{le} -> #{sl}\" if locale[:type] != sl.split('/')[1]\n        locale[:alias] = sl.split('/')[0]\n    else\n        bo, be, bs = Open3.capture3(\"bzip2 -9 -c #{e}\")\n        abort \"Can't compress #{e}:\\n#{be}\" unless bs.success?\n        locale[:compressed] = bo.size < File.size?(e)\n        locale[:data] = locale[:compressed] ? bo : File.read(e)\n    end\n\n    locales << locale\nend\n\ndef blobname(locale)\n    \"__crystax_locale_blob_#{Digest::SHA256.new.update(locale[:encoding]).update(\"-\").update(locale[:type]).hexdigest}\"\nend\n\nputs \"Generating initialization code ...\"\nFileUtils.mkdir_p File.dirname(options[:out])\nFile.open(options[:out], \"w\") do |f|\n    f.puts \"/* THIS IS AUTOGENERATED FILE. DO NOT MODIFY IT MANUALLY!!! */\"\n    f.puts \"/* GENERATED BY: #{$0} #{ARGV.select { |x| x !~ /^--host=/ }.join(' ')} */\"\n    f.puts \"\"\n    add_license(f)\n    f.puts \"\"\n    f.puts \"#include <pthread.h>\"\n    f.puts \"#include <crystax/ctassert.h>\"\n    f.puts \"#include <crystax/localeimpl.h>\"\n    f.puts \"\"\n    locales.each do |ll|\n        next unless ll[:alias].nil?\n        bname = blobname(ll)\n        f.puts \"/* #{\"BZip2 compressed \" if ll[:compressed]}#{ll[:encoding]} #{ll[:type]} locale data */\"\n        f.puts \"static uint8_t  #{bname}[] = {\"\n        idx = 0\n        linesize = 16\n        ll[:data].each_byte do |byte|\n            f << \"\\n\" if idx > 0 && idx % linesize == 0\n            f << \"    \" if idx % linesize == 0\n            f << \"0x%02X\" % byte\n            idx += 1\n            f << (idx == ll[:data].bytesize ? \"\\n\" : \",\")\n        end\n        f.puts \"};\"\n        f.puts \"__CRYSTAX_STATIC_ASSERT(sizeof(#{bname}) == #{ll[:data].bytesize}, \\\"Wrong size of locale's blob\\\");\"\n        f.puts \"\"\n    end\n    f.puts \"static __crystax_locale_data_t __crystax_locale_data_array[#{locales.map { |x| x[:encoding] }.sort.uniq.size}];\"\n    f.puts \"\"\n    f.puts \"size_t __crystax_locale_table_size()\"\n    f.puts \"{\"\n    f.puts \"    return sizeof(__crystax_locale_data_array)/sizeof(__crystax_locale_data_array[0]);\"\n    f.puts \"}\"\n    f.puts \"\"\n    f.puts \"__crystax_locale_data_t * __crystax_locale_data(size_t idx)\"\n    f.puts \"{\"\n    f.puts \"    if (idx >= __crystax_locale_table_size())\"\n    f.puts \"        return NULL;\"\n    f.puts \"    return &__crystax_locale_data_array[idx];\"\n    f.puts \"}\"\n    f.puts \"\"\n    f.puts \"static void __crystax_locale_init_impl()\"\n    f.puts \"{\"\n    f.puts \"    memset(&__crystax_locale_data_array, 0, sizeof(__crystax_locale_data_array));\"\n    idx = 0\n    locales.map { |x| x[:encoding] }.sort.uniq.each do |enc|\n        f.puts \"\"\n        f.puts \"    __crystax_locale_data_array[#{idx}].encoding = \\\"#{enc}\\\";\"\n        locales.select { |x| x[:encoding] == enc }.each do |ll|\n            bname = blobname(ll)\n            if ll[:alias].nil?\n                f.puts \"    __crystax_locale_data_array[#{idx}].data[#{ll[:type]}].alias = NULL;\"\n                f.puts \"    __crystax_locale_data_array[#{idx}].data[#{ll[:type]}].blob.data = #{bname};\"\n                f.puts \"    __crystax_locale_data_array[#{idx}].data[#{ll[:type]}].blob.size = sizeof(#{bname});\"\n                f.puts \"    __crystax_locale_data_array[#{idx}].data[#{ll[:type]}].blob.compressed = #{ll[:compressed] ? 1 : 0};\"\n            else\n                f.puts \"    __crystax_locale_data_array[#{idx}].data[#{ll[:type]}].alias = \\\"#{ll[:alias]}\\\";\"\n            end\n        end\n        idx += 1\n    end\n    f.puts \"}\"\n    f.puts \"\"\n    f.puts \"static int volatile __crystax_locale_init_flag = 0;\"\n    f.puts \"static pthread_mutex_t __crystax_locale_init_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\"\n    f.puts \"\"\n    f.puts \"int __crystax_locale_init()\"\n    f.puts \"{\"\n    f.puts \"    int rc;\"\n    f.puts \"    if (__sync_add_and_fetch(&__crystax_locale_init_flag, 0) == 0)\"\n    f.puts \"    {\"\n    f.puts \"        if ((rc = pthread_mutex_lock(&__crystax_locale_init_mutex)) != 0) return rc;\"\n    f.puts \"        if (__crystax_locale_init_flag == 0)\"\n    f.puts \"        {\"\n    f.puts \"            __crystax_locale_init_impl();\"\n    f.puts \"            __crystax_locale_init_flag = 1;\"\n    f.puts \"        }\"\n    f.puts \"        if ((rc = pthread_mutex_unlock(&__crystax_locale_init_mutex)) != 0) return rc;\"\n    f.puts \"    }\"\n    f.puts \"    return 0;\"\n    f.puts \"}\"\nend\n\nputs \"DONE\"\n"
  },
  {
    "path": "sources/crystax/bin/gen-musl-sources",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'digest'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.realpath(File.join(TOPDIR, '../../../..', 'vendor', 'musl'))\n\nPRIVATEDIR = File.join(TOPDIR, 'gen', 'musl')\nPUBLICDIR  = File.join(TOPDIR, 'include')\n\nclass Generator\n    def initialize\n        @files = []\n    end\n\n    def license\n        @license = File.read(File.join(TOPDIR, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n    private :license\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n    private :relpath\n\n    def add(f, options = {})\n        raise \"No such file: #{f}\" unless File.exists?(File.join(SRCDIR, f))\n        raise \"File #{f} already added\" if @files.include?(f)\n        @files << {file: f, options: options}\n    end\n\n    def generate\n        total = @files.size\n        current = 0\n        @files.each do |e|\n            f = e[:file]\n            options = e[:options]\n\n            src = File.join(SRCDIR, f)\n            mdst = File.join(options[:public] ? File.join(PUBLICDIR, 'crystax', 'musl') : PRIVATEDIR, File.dirname(f), \"mangled-#{File.basename(f)}\")\n\n            if options[:public]\n                f = f.split('/')[1..-1].join('/') if f =~ /^include\\//\n                dst = File.join(PUBLICDIR, f)\n            else\n                dst = File.join(PRIVATEDIR, f)\n            end\n\n            symdst = []\n            if options[:symlink]\n                symsrc = options[:symlink]\n                symsrc = [symsrc] unless symsrc.is_a?(Array)\n                symdst += symsrc.map { |es| File.join(PRIVATEDIR, es) }\n            end\n\n            next if File.exists?(dst) && File.exists?(mdst) &&\n                File.mtime(dst)  >= File.mtime(mdst) &&\n                File.mtime(mdst) >= File.mtime(src) &&\n                File.mtime(dst)  >= File.mtime(__FILE__) &&\n                File.mtime(mdst) >= File.mtime(__FILE__)\n\n            current += 1\n            puts \"GEN  [#{current}/#{total}] #{f}\"\n\n            FileUtils.rm_f mdst\n            FileUtils.mkdir_p File.dirname(mdst)\n            FileUtils.cp src, mdst\n\n            FileUtils.mkdir_p File.dirname(dst)\n            File.open(dst, \"w\") do |df|\n                df.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                df.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} */\"\n                df.puts \"\"\n\n                df.puts \"/*\"\n                license.each do |line|\n                    df.puts \" * #{line}\".rstrip\n                end\n                df.puts \" */\"\n\n                guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dst, TOPDIR)).hexdigest}\".upcase\n                df.puts \"\"\n                df.puts \"#ifndef #{guard}\"\n                df.puts \"#define #{guard}\"\n\n                df.puts \"\"\n                if options[:public]\n                    df.puts \"#include <crystax/id.h>\"\n                    df.puts \"#include <#{relpath(mdst, File.join(TOPDIR, 'include'))}>\"\n                else\n                    df.puts \"#include \\\"#{File.basename(mdst)}\\\"\"\n                end\n\n                df.puts \"\"\n                df.puts \"#endif /* #{guard} */\"\n            end\n\n            symdst.each do |sd|\n                FileUtils.mkdir_p File.dirname(sd)\n                FileUtils.rm_f sd\n                FileUtils.ln_s mdst, sd\n            end\n        end\n    end\nend\n\ng = Generator.new\n\ng.add \"include/sys/mtio.h\", public: true\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/gen-sources",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nCWD=$(dirname $0)\n\n$CWD/gen-bsd-sources || exit 1\n\n$CWD/gen-bionic-sources || exit 1\n\n$CWD/gen-musl-sources || exit 1\n\n$CWD/gen-system-core-headers || exit 1\n\n$CWD/gen-compiler-rt-headers || exit 1\n\n$CWD/gen-libpwq-sources || exit 1\n$CWD/gen-libkqueue-sources || exit 1\n\nexit 0\n"
  },
  {
    "path": "sources/crystax/bin/gen-system-core-headers",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'digest'\n\nMYNAME = Pathname.new(File.expand_path(__FILE__)).relative_path_from(Pathname.new(File.expand_path('../..', __FILE__))).to_s\n\nTOPDIR = File.realpath(File.join(File.dirname(__FILE__), '..'))\nSRCDIR = File.realpath(File.join(TOPDIR, '..', '..', '..', 'system', 'core'))\n\nPRIVATEDIR = File.join(TOPDIR, 'gen', 'systemcore')\nPUBLICDIR  = File.join(TOPDIR, 'include')\n\nclass Generator\n    def initialize\n        @files = []\n        @fixups = {}\n    end\n\n    def license\n        @license = File.read(File.join(TOPDIR, 'LICENSE')).split(\"\\n\").map(&:chomp) if @license.nil?\n        @license\n    end\n    private :license\n\n    def relpath(path, from)\n        Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\n    end\n    private :relpath\n\n    def fixup(name, &block)\n        raise \"Fixup '#{name}' already added\" if @fixups.has_key?(name.to_s)\n        raise \"No code block given\" unless block_given?\n        @fixups[name.to_s] = lambda { |f| block.call(f) }\n    end\n\n    def add(f, options = {})\n        raise \"No such file: #{f}\" unless File.exists?(File.join(SRCDIR, f))\n        raise \"File #{f} already added\" if @files.include?(f)\n        @files << {file: f, options: options}\n    end\n\n    def generate\n        total = @files.size\n        current = 0\n        @files.each do |e|\n            f = e[:file]\n            options = e[:options]\n\n            src = File.join(SRCDIR, f)\n            mdst = File.join(options[:public] ? File.join(PUBLICDIR, 'crystax', 'systemcore') : PRIVATEDIR, File.dirname(f), \"mangled-#{File.basename(f)}\")\n\n            if options[:public]\n                f = f.split('/')[2..-1].join('/') if f.split('/')[0..1] == ['libc', 'include']\n                dst = File.join(PUBLICDIR, f)\n            else\n                dst = File.join(PRIVATEDIR, f)\n            end\n\n            next if File.exists?(dst) && File.exists?(mdst) &&\n                File.mtime(dst)  >= File.mtime(mdst) &&\n                File.mtime(mdst) >= File.mtime(src) &&\n                File.mtime(dst)  >= File.mtime(__FILE__) &&\n                File.mtime(mdst) >= File.mtime(__FILE__)\n\n            current += 1\n            puts \"GEN  [#{current}/#{total}] #{f}\"\n\n            FileUtils.rm_f mdst\n            FileUtils.mkdir_p File.dirname(mdst)\n            FileUtils.cp src, mdst\n\n            FileUtils.mkdir_p File.dirname(dst)\n            File.open(dst, \"w\") do |df|\n                df.puts \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\"\n                df.puts \"/* GENERATED BY: $CRYSTAX/#{MYNAME} */\"\n                df.puts \"\"\n\n                df.puts \"/*\"\n                license.each do |line|\n                    df.puts \" * #{line}\".rstrip\n                end\n                df.puts \" */\"\n\n                guard = \"__CRYSTAX_INCLUDE_#{Digest::SHA256.new.update(relpath(dst, TOPDIR)).hexdigest}\".upcase\n                df.puts \"\"\n                df.puts \"#ifndef #{guard}\"\n                df.puts \"#define #{guard}\"\n\n                fixups = options[:fixup]\n                fixups = [] if fixups.nil?\n                fixups = [fixups] unless fixups.is_a?(Array)\n                df.puts \"\" unless fixups.empty?\n                fixups.each do |fxname|\n                    fx = @fixups[fxname.to_s]\n                    raise \"No such fixup: '#{fxname}'\" if fx.nil?\n                    fx.call(df)\n                end\n\n                df.puts \"\"\n                if options[:public]\n                    df.puts \"#include <crystax/id.h>\"\n                    df.puts \"#include <#{relpath(mdst, File.join(TOPDIR, 'include'))}>\"\n                else\n                    df.puts \"#include \\\"#{File.basename(mdst)}\\\"\"\n                end\n\n                df.puts \"\"\n                df.puts \"#endif /* #{guard} */\"\n            end\n        end\n    end\nend\n\ng = Generator.new\n\ng.add \"include/private/android_filesystem_config.h\"\n\ng.generate\n"
  },
  {
    "path": "sources/crystax/bin/patch-sysroot",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'optparse'\nrequire 'fileutils'\nrequire 'pathname'\n\nLIBS_TO_REMOVE_FROM_SYSROOT = %w[\n    libc.so libc.a\n    libcrystax.so libcrystax.a\n    libm.so libm.a libm_hard.a\n    libstdc++.so libstdc++.a\n]\n\nLIBS_TO_PLACE_EMPTY_STUBS_TO_SYSROOT = %w[\n    libbz2.a\n    libc.a\n    libm.a libm_hard.a\n    libpthread.a\n    librt.a\n    libstdc++.a\n]\n\nOPTIONS = {}\nOPTIONS[:fastcopy] = true\nOPTIONS[:gensources] = true\n\noptparser = OptionParser.new do |o|\n    o.separator \"\"\n\n    o.on(\"-h\", \"--help\", \"Display help screen and exit\") do\n        $stdout.puts optparser\n        exit 0\n    end\n\n    o.on(\"-v\", \"--[no-]verbose\", \"Enable verbose mode\") do |v|\n        OPTIONS[:verbose] = v\n    end\n\n    o.separator \"\"\n\n    o.on(\"--headers\", \"Patch Android platform headers\") do\n        OPTIONS[:patch_headers] = true\n    end\n\n    o.on(\"--libraries\", \"Patch Android platform libraries\") do\n        OPTIONS[:patch_libraries] = true\n    end\n\n    o.separator \"\"\n\n    o.on(\"-nN\", \"--apilevel=N\", Integer, \"Android platform API level to patch [all]\") do |l|\n        OPTIONS[:apilevel] = l\n    end\n\n    o.on(\"-aARCH\", \"--arch=ARCH\", \"Android platform CPU architecture to patch [all]\") do |a|\n        OPTIONS[:arch] = a\n    end\n\n    o.separator \"\"\n\n    o.on(\"--[no-]fast-copy\", \"Enable 'fast copy' mode, when all files are copied\",\n                             \"instead of being symlinked [#{OPTIONS[:fastcopy]}]\") do |f|\n        OPTIONS[:fastcopy] = f\n    end\n\n    o.on(\"--[no-]gen-sources\", \"Generate libcrystax sources before patching sysroot [#{OPTIONS[:gensources]}]\") do |g|\n        OPTIONS[:gensources] = g\n    end\n\n    o.separator \"\"\n\n    o.on(\"--no-crystax-libraries\", \"Do not copy crystax libraries while patching Android platform libraries\",\n                                   \"can be used only if --libraries was specified\") do\n        raise \"--libraries must be specified\" unless OPTIONS[:patch_libraries]\n        OPTIONS[:no_crystax_libraries] = true\n    end\nend\noptparser.parse!(ARGV)\n\nif !ARGV.empty?\n    $stderr.puts \"Extra parameters: #{ARGV.join(' ')}\"\n    $stderr.puts optparser\n    exit 1\nend\n\nif !OPTIONS[:patch_headers] && !OPTIONS[:patch_libraries]\n    $stderr.puts optparser\n    exit 1\nend\n\nCRYSTAX_DIR = File.expand_path('../..', __FILE__)\nCRYSTAX_INCDIR = File.join(CRYSTAX_DIR, 'include')\nNDK_DIR = [nil, ''].include?(ENV['CREW_NDK_DIR']) ? File.expand_path('../..', CRYSTAX_DIR) : ENV['CREW_NDK_DIR']\n\ndef log(msg)\n    $stdout.puts msg if OPTIONS[:verbose]\n    File.open(ENV['TMPLOG'], \"a\") do |f|\n        f.puts msg\n    end unless ENV['TMPLOG'].to_s.empty?\nend\n\ndef dump(msg, options = {})\n    options[:sink] ||= $stdout\n    options[:sink].puts msg\n    File.open(ENV['TMPLOG'], \"a\") do |f|\n        f.puts msg\n    end unless ENV['TMPLOG'].to_s.empty?\nend\n\ndef panic(msg)\n    dump \"*** FATAL: #{msg}\", sink: $stderr\n    exit 1\nend\n\ndef relpath(path, from)\n    Pathname.new(path).relative_path_from(Pathname.new(from)).to_s\nend\n\nif OPTIONS[:patch_headers] && OPTIONS[:gensources]\n    dump \"Generating CrystaX sources   in $DST/sources/crystax\"\n    Process.wait Kernel.spawn File.join(CRYSTAX_DIR, 'bin', 'gen-sources'), '-q'\n    panic \"Can't generate CrystaX sources\" unless $?.success?\nend\n\nif OPTIONS[:apilevel].nil?\n    APILEVELS = Dir.glob(File.join(NDK_DIR, 'platforms', 'android-*')).select do |e|\n        File.directory?(e)\n    end.map do |e|\n        File.basename(e).sub(/^android-/, '').to_i\n    end.sort.uniq\nelse\n    APILEVELS = [OPTIONS[:apilevel]]\nend\n\nCCONF = \"#{File.join(CRYSTAX_DIR, 'bin', 'config')} --ndk=#{NDK_DIR}\"\n\nABIS = `#{CCONF} --abis`.split(\"\\n\")\npanic \"Couldn't get list of ABIs\" unless $?.success?\n\nAPILEVELS.each do |apilevel|\n    if OPTIONS[:arch].nil?\n        archs = Dir.glob(File.join(NDK_DIR, 'platforms', \"android-#{apilevel}\", 'arch-*')).select do |e|\n            File.directory?(e)\n        end.map do |e|\n            File.basename(e).sub(/^arch-/, '')\n        end.sort.uniq\n    else\n        archs = [OPTIONS[:arch]]\n    end\n\n    archs.each do |arch|\n        next if apilevel <= 20 && arch =~ /64$/\n\n        sysroot = File.join('platforms', \"android-#{apilevel}\", \"arch-#{arch}\")\n\n        if OPTIONS[:patch_headers]\n            dump \"Generating CrystaX headers   in $DST/#{sysroot}/usr/include\"\n\n            adir = File.join(NDK_DIR, sysroot, 'usr', 'include')\n            Dir.glob(File.join(CRYSTAX_INCDIR, '**', '*')).reject { |e| File.directory?(e) }.sort.each do |cf|\n                # Skip hidden files\n                next if File.basename(cf) =~ /^\\./\n\n                f = relpath(cf, CRYSTAX_INCDIR)\n                log \"Processing #{f} [android-#{apilevel}]\"\n\n                srcf = File.join(adir, f)\n                srcd = File.dirname(srcf)\n                dstf = File.join(adir, 'crystax', 'google', f)\n\n                if f.split('/').first != 'crystax' && File.exists?(srcf) && !File.exists?(dstf)\n                    dstd = File.dirname(dstf)\n                    FileUtils.mkdir_p dstd\n                    if File.symlink?(srcf) && !OPTIONS[:fastcopy]\n                        panic \"Non-fast-copy method is not implemented yet!\"\n                        #(\n                        #cd $srcd || exit 1\n                        #sl=$(readlink $srcf)\n                        #fail_panic \"Couldn't read symlink path of Google's header $f\"\n                        #rp=$(realpath -s $sl)\n                        #fail_panic \"Couldn't detect symlink path of Google's header $f\"\n                        #rpd=${rp%%/$f}\n                        #rpds=${rpd##$NDK_DIR/platforms/android-*/arch-*/usr/include}\n                        #test \"$rpds\" = \"$rpd\" && exit 0\n                        #relp=$(realpath -s --relative-to=$dstd $rpd/crystax/google/$f)\n                        #fail_panic \"Couldn't detect relative path for Google's header $f\"\n                        #ln -s $relp $dstf\n                        #fail_panic \"Couldn't symlink Google's header $f to backup directory\"\n                        #) || exit 1\n                    elsif File.file?(srcf)\n                        if File.read(srcf).split(\"\\n\").select { |l| l =~ /__CRYSTAX/ }.empty?\n                            FileUtils.mv srcf, dstd\n                        end\n                    else\n                        panic \"Don't know how to deal with Google's header #{f}: it's not regular file and not symlink\"\n                    end\n                end\n\n                FileUtils.mkdir_p srcd\n\n                if OPTIONS[:fastcopy]\n                    FileUtils.rm_f File.join(srcd, File.basename(cf))\n                    FileUtils.cp cf, File.join(srcd, File.basename(cf))\n                else\n                    panic \"Non-fast-copy method is not implemented yet!\"\n                    #rm -f $srcf\n                    #crelpath=$(realpath --relative-to=$srcd $cf)\n                    #fail_panic \"Couldn't get relative path of $cf\"\n                    #run ln -s $crelpath $srcd/\n                    #fail_panic \"Couldn't symlink CrystaX header $f to $sysroot\"\n                end\n            end\n        end\n\n        if OPTIONS[:patch_libraries]\n            dump \"Generating CrystaX libraries in $DST/#{sysroot}\"\n\n            LIBS_TO_REMOVE_FROM_SYSROOT.each do |f|\n                Dir.glob(File.join(NDK_DIR, sysroot, '**', f)).each do |ff|\n                    # do not remove copies of unpatched libraries\n                    FileUtils.rm_f ff unless File.dirname(ff).end_with? 'google'\n                end\n            end\n\n            multilibs = {}\n            srclibpath = {}\n            dstlibpath = {}\n\n            ABIS.each do |abi|\n                case arch\n                when 'arm'\n                    next if abi !~ /^armeabi/\n                when 'arm64'\n                    next if abi !~ /^arm64/\n                else\n                    next if abi != arch\n                end\n\n                multilibs[abi] = `#{CCONF} --multilibs --abi=#{abi}`.split(/\\s+/) if multilibs[abi].nil?\n                panic \"Couldn't get list of multilibs for abi #{abi}\" if multilibs[abi].empty?\n\n                multilibs[abi].each do |multilib|\n                    key = \"#{abi}/#{multilib}\"\n\n                    srclibpath[key] = File.join(CRYSTAX_DIR, `#{CCONF} --libpath --abi=#{abi} --multilib=#{multilib}`.chomp) if srclibpath[key].nil?\n                    srclp = srclibpath[key]\n                    panic \"Couldn't get source libpath for #{abi}/#{multilib}\" if srclp.empty?\n\n                    dstlibpath[key] = File.join(NDK_DIR, sysroot, 'usr', `#{CCONF} --sysroot-libpath --abi=#{abi} --multilib=#{multilib}`.chomp) if dstlibpath[key].nil?\n                    dstlp = dstlibpath[key]\n                    panic \"Couldn't get destination libpath for #{abi}/#{multilib}\" if dstlp.empty?\n\n                    unless OPTIONS[:no_crystax_libraries]\n                        %w[libcrystax.a libcrystax.so].each do |lib|\n                            next if File.exists?(File.join(dstlp, lib))\n\n                            if OPTIONS[:fastcopy]\n                                FileUtils.rm_f File.join(dstlp, lib)\n                                FileUtils.cp File.join(srclp, lib), File.join(dstlp, lib)\n                            else\n                                panic \"Non-fast-copy method is not implemented yet!\"\n                                #crelpath=$(realpath --relative-to=$dstlibpath $srclibpath/$lib)\n                                #fail_panic \"Couldn't get relative path of $srclibpath/$lib\"\n                                #run ln -s $crelpath $dstlibpath/\n                                #fail_panic \"Couldn't symlink $lib to $sysroot\"\n                            end\n                        end\n                    end\n\n                    LIBS_TO_PLACE_EMPTY_STUBS_TO_SYSROOT.each do |lib|\n                        FileUtils.rm_f File.join(dstlp, lib)\n                        FileUtils.cp File.join(CRYSTAX_DIR, 'empty', 'libcrystax.a'), File.join(dstlp, lib)\n                    end\n\n                    #if !File.exists?(File.join(dstlp, 'libc.so'))\n                    #    FileUtils.cp File.join(srclp, 'stubs', 'libbionicstub.so'), File.join(dstlp, 'libc.so')\n                    #end\n                end\n            end\n        end\n    end\nend\n"
  },
  {
    "path": "sources/crystax/crazy_linker/Android.mk",
    "content": "# Copyright (c) 2013 The Chromium Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style license that can be\n# found in the LICENSE file.\n\nLOCAL_PATH := $(call my-dir)\n\ncrazy_linker_sources := \\\n  src/crazy_linker_api.cpp \\\n  src/crazy_linker_ashmem.cpp \\\n  src/crazy_linker_debug.cpp \\\n  src/crazy_linker_elf_loader.cpp \\\n  src/crazy_linker_elf_relocations.cpp \\\n  src/crazy_linker_elf_relro.cpp \\\n  src/crazy_linker_elf_symbols.cpp \\\n  src/crazy_linker_elf_view.cpp \\\n  src/crazy_linker_error.cpp \\\n  src/crazy_linker_globals.cpp \\\n  src/crazy_linker_library_list.cpp \\\n  src/crazy_linker_library_view.cpp \\\n  src/crazy_linker_line_reader.cpp \\\n  src/crazy_linker_proc_maps.cpp \\\n  src/crazy_linker_rdebug.cpp \\\n  src/crazy_linker_search_path_list.cpp \\\n  src/crazy_linker_shared_library.cpp \\\n  src/crazy_linker_thread.cpp \\\n  src/crazy_linker_util.cpp \\\n  src/crazy_linker_wrappers.cpp \\\n  src/crazy_linker_system.cpp \\\n  src/linker_phdr.cpp \\\n\n# The crazy linker itself.\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := crazy_linker\nLOCAL_C_INCLUDES = $(LOCAL_PATH)/include $(LOCAL_PATH)/src\nLOCAL_CFLAGS := -Os -fvisibility=hidden -Wall -Werror\nLOCAL_SRC_FILES := $(crazy_linker_sources)\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include\nLOCAL_EXPORT_LDLIBS := -llog\ninclude $(BUILD_STATIC_LIBRARY)\n\n# The crazy linker unit tests.\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := crazylinker_unittest\nLOCAL_SRC_FILES := \\\n  $(crazy_linker_sources) \\\n  src/crazy_linker_ashmem_unittest.cpp \\\n  src/crazy_linker_error_unittest.cpp \\\n  src/crazy_linker_line_reader_unittest.cpp \\\n  src/crazy_linker_system_mock.cpp \\\n  src/crazy_linker_system_unittest.cpp \\\n  src/crazy_linker_globals_unittest.cpp \\\n  src/crazy_linker_proc_maps_unittest.cpp \\\n  src/crazy_linker_search_path_list_unittest.cpp \\\n  src/crazy_linker_util_unittest.cpp \\\n  src/crazy_linker_thread_unittest.cpp \\\n  minitest/minitest.cc \\\n\nLOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/src\nLOCAL_CFLAGS += -DUNIT_TESTS\nLOCAL_LDLIBS := -llog\n\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "sources/crystax/crazy_linker/DESIGN.TXT",
    "content": "The design of crazy_linker:\n===========================\n\nIntroduction:\n-------------\n\nA system linker (e.g. ld.so on Linux, or /system/bin/linker on Android), is a\nparticularly sophisticated piece of code because it is used to load and start\n_executables_ on the system. This requires dealing with really low-level\ndetails like:\n\n  - The way the kernel loads and initializes binaries into a new process.\n\n  - The way it passes initialization data (e.g. command-line arguments) to\n    the process being launched.\n\n  - Setting up the C runtime library, thread-local storage, and others properly\n    before calling main().\n\n  - Be very careful in the way it operates, due to the fact that it will be used\n    to load set-uid programs.\n\n  - Need to support a flurry of exotic flags and environment variables that\n    affect runtime behaviour in \"interesting\" but mostly unpredictable ways\n    (see the manpages for dlopen, dlsym and ld.so for details).\n\nAdd to this that most of this must be done without the C library being loaded or\ninitialized yet. No wonder this code is really complex.\n\nBy contrast, crazy_linker is a static library whose only purpose is to load\nELF shared libraries, inside an _existing_ executable process. This makes it\nconsiderably simpler:\n\n  - The runtime environment (C library, libstdc++) is available and properly\n    initialized.\n\n  - No need to care about kernel interfaces. Everything uses mmap() and simple\n    file accesses.\n\n  - The API is simple, and straightforward (no hidden behaviour changes due to\n    environment variables).\n\nThis document explains how the crazy_linker works. A good understanding of the\nELF file format is recommended, though not necessary.\n\n\nI. ELF Loading Basics:\n----------------------\n\nWhen it comes to loading shared libraries, an ELF file mainly consists in the\nfollowing parts:\n\n  - A fixed-size header that identifies the file as an ELF file and gives\n    offsets/sizes to other tables.\n\n  - A table (called the \"program header table\"), containing entries describing\n    'segments' of interest in the ELF file.\n\n  - A table (called the \"dynamic table\"), containing entries describing\n    properties of the ELF library. The most interesting ones are the list\n    of libraries the current one depends on.\n\n  - A table describing the symbols (function or global names) that the library\n    references or exports.\n\n  - One or more tables containing 'relocations'. Because libraries can be loaded\n    at any page-aligned address in memory, numerical pointers they contain must\n    be adjusted after load. That's what the relocation entries do. They can\n    also reference symbols to be found in other libraries.\n\nThe process of loading a given ELF shared library can be decomposed into 4 steps:\n\n  1) Map loadable segments into memory.\n\n    This step parses the program header table to identify 'loadable' segments,\n    reserve the corresponding address space, then map them directly into\n    memory with mmap().\n\n       Related: src/crazy_linker_elf_loader.cpp\n\n\n  2) Load library dependencies.\n\n    This step parses the dynamic table to identify all the other shared\n    libraries the current one depends on, then will _recursively_ load them.\n\n        Related: src/crazy_linker_library_list.cpp\n                 (crazy::LibraryList::LoadLibrary())\n\n  3) Apply all relocations.\n\n     This steps adjusts all pointers within the library for the actual load\n     address. This can also reference symbols that appear in other libraries\n     loaded in step 2).\n\n        Related: src/crazy_linker_elf_relocator.cpp\n\n  4) Run constructors.\n\n     Libraries include a list of functions to be run at load time, typically\n     to perform static C++ initialization.\n\n        Related: src/crazy_linker_shared_library.cpp\n                 (SharedLibrary::RunConstructors())\n\nUnloading a library is similar, but in reverse order:\n\n  1) Run destructors.\n  2) Unload dependencies recursively.\n  3) Unmap loadable segments.\n\n\nII. Managing the list of libraries:\n-----------------------------------\n\nIt is crucial to avoid loading the same library twice in the same process,\notherwise some really bad undefined behaviour may happen.\n\nThis implies that, inside an Android application process, all system libraries\nshould be loaded by the system linker (because otherwise, the Dalvik-based\nframework might load the same library on demand, at an unpredictable time).\n\nTo handle this, the crazy_linker uses a custom class (crazy::LibraryList) where\neach entry (crazy::LibraryView) is reference-counted, and either references:\n\n  - An application shared libraries, loaded by the crazy_linker itself.\n  - A system shared libraries, loaded through the system dlopen().\n\nLibraries loaded by the crazy_linker are modelled by a crazy::SharedLibrary\nobject. The source code comments often refer to these objects as\n\"crazy libraries\", as opposed to \"system libraries\".\n\nAs an example, here's a diagram that shows the list after loading a library\n'libfoo.so' that depends on the system libraries 'libc.so', 'libm.so' and\n'libOpenSLES.so'.\n\n    +-------------+\n    | LibraryList |\n    +-------------+\n           |\n           |    +-------------+\n           +----| LibraryView | ----> libc.so\n           |    +-------------+\n           |\n           |    +-------------+\n           +----| LibraryView | ----> libm.so\n           |    +-------------+\n           |\n           |    +-------------+\n           +----| LibraryView | ----> libOpenSLES.so\n           |    +-------------+\n           |\n           |    +-------------+      +-------------+\n           +----| LibraryView |----->|SharedLibrary| ---> libfoo.so\n           |    +-------------+      +-------------+\n           |\n          ___\n           _\n\nSystem libraries are identified by name. Only the official NDK-official system\nlibraries are listed. It is likely that using crazy_linker to load non-NDK\nsystem libraries will not work correctly, so don't do it.\n\n\nIII. Wrapping of linker symbols within crazy ones:\n--------------------------------------------------\n\nLibraries loaded by the crazy linker are not visible to the system linker.\n\nThis means that directly calling the system dlopen() or dlsym() from a library\ncode loaded by the crazy_linker will not work properly.\n\nTo work-around this, crazy_linker redirects all linker symbols to its own\nwrapper implementation. This redirection happens transparently.\n\n  Related: src/crazy_linker_wrappers.cpp\n\nThis also includes a few \"hidden\" dynamic linker symbols which are used for\nstack-unwinding. This guarantees that C++ exception propagation works.\n\n\nIV. GDB support:\n----------------\n\nThe crazy_linker contains support code to ensure that libraries loaded with it\nare visible through GDB at runtime. For more details, see the extensive comments\nin src/crazy_linker_rdebug.h\n\n\nV. Other Implementation details:\n--------------------------------\n\nThe crazy_linker is written in C++, but its API is completely C-based.\n\nThe implementation doesn't require any C++ STL feature (except for new\nand delete).\n\nVery little of the code is actually Android-specific. The target system's\nbitness is abstracted through a C++ traits class (see src/elf_traits.h).\n\nWritten originally for Chrome, so follows the Chromium coding style. Which can\nbe enforced by using the 'clang-format' tool with:\n\n  cd /path/to/crazy_linker/\n  find . -name \"*.h\" -o -name \"*.cpp\" | xargs clang-format -style Chromium -i\n"
  },
  {
    "path": "sources/crystax/crazy_linker/LICENSE",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//    * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//    * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//    * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/*\n * Copyright (C) 2012 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n"
  },
  {
    "path": "sources/crystax/crazy_linker/README.TXT",
    "content": "Introduction:\n-------------\n\nA custom dynamic linker for Android programs that adds a few interesting\nfeatures compared to /system/bin/linker:\n\n  - Support changing the library search path. The system linker, when used\n    inside Android applications, is limited to the value of LD_LIBRARY_PATH\n    at boot time, that only looks into system directories, not application\n    ones.\n\n    This linker allows the client to add application paths before the\n    default system ones, this has two benefits:\n\n      - Library dependencies are loaded automatically in the right order.\n\n      - Libraries from the application paths are favored over system ones.\n        This avoids conflicts when one of your application's libraries\n        has the same name than a system one (which happens randomly\n        on certain devices due to system application bundling).\n\n    (Note: The system linker issue above has been fixed in Android 4.3).\n\n  - Supports any number of shared libraries. On older Android platforms,\n    the system linker will refuse to load more than 64 or 128 libraries\n    in a single process (Note: Fixed in Android 4.3).\n\n  - Supports loading a library at an explicit (page-aligned) memory\n    address. The system linker always randomizes the address. Note that\n    this is generally a _bad_ idea for security reasons. Consider using\n    this only when using shared RELROs (see below).\n\n  - Supports loading a library from an explicit (page-aligned) file\n    offset. This can be useful to load a library directly from an .apk,\n    provided that it is uncompressed and at a page-aligned offset.\n\n  - Support sharing of RELRO sections. When two processes load the same\n    library at exactly the same address, the content of its RELRO section\n    is identical. By default, each instance uses private RAM pages to host\n    it, but it is possible to use a single ashmem region to share the same\n    data instead.\n\n    WARNING: This feature will not work on certain older kernels. See\n             the documentation for crazy_system_can_share_relro() for\n             more details.\n\nSee include/crazy_linker.h for the API and its documentation.\n\nSee LICENSE file for full licensing details (hint: BSD)\n\nA few notes:\n\n  - Do not use this if you don't know what you're doing. Read the API\n    documentation first, and look at the test programs for usage examples.\n\n  - The crazy linker will always use the system linker to load NDK-exposed\n    system libraries (e.g. liblog.so and others). This avoids having two\n    instances of the same library in the same process, and correctly\n    resolving any symbols from system libraries.\n\n  - Any library loaded by the crazy linker, and which uses functions of\n    libdl.so will continue to work. However, calls to dlopen(), dlsym(),\n    et al will be redirected to the crazy linker's own wrappers.\n\n    This ensures that if a library is loaded by the crazy linker, any of\n    its dependencies will be loaded by it too.\n\n  - Libraries loaded with the crazy linker are visible to GDB, or Breakpad,\n    and stack unwinding / C++ exception propagation should just work.\n\n\nCaveats:\n--------\n\n  You can't call the crazy_linker code directly from Java in your Android\n  application (it's a static library). You need to put it into your own\n  shared library, loaded with System.loadLibrary() instead (or alternatively,\n  inside your NativeActivity's shared library).\n\n  Also, libraries loaded with the crazy linker are not visible to the system\n  one. In practice, it means that lazy native method lookup will not work. I.e.:\n\n  The first time you call a native method like:\n\n    'mypackage.MyClass.myNativeMethod()'\n\n  The VM will look into existing native libraries with dlsym() for a\n  function symbol named like:\n\n    Java_mypackage_MyClass_myNativeMethod\n\n  This will not work if the symbol is inside a library loaded with the\n  crazy_linker.\n\n  To work-around this, register the native methods explicitely\n  in your JNI_OnLoad() by calling env->RegisterNatives() with the\n  appropriate parameters.\n\n\nUsage instructions:\n-------------------\n\n  1/ Add the following to your module definition in your project's Android.mk:\n\n        LOCAL_STATIC_LIBRARIES := crazy_linker\n\n  2/ Also Include the top-level crazy_linker Android.mk, as in:\n\n        include /path/to/crazy_linker/Android.mk\n\n  3/ In your C or C++ source:\n\n        #include <crazy_linker.h>\n\n    Read the header for API documentation.\n\n  If your library implements native methods, it must explicitely register\n  them with env->RegisterNatives() before they become usable.\n\nBUGS & TODOs:\n-------------\n\n  - Libraries loaded by the crazy linker are not automatically closed when\n    the process exits.\n\n  - dlopen() when called inside a library loaded by the crazy linker doesn't\n    support RTLD_MAIN or RTLD_NEXT.\n\nTesting:\n--------\n\n  If you modify this code, check your changes by running the test suite using:\n\n    cd $NDK\n    tests/run-tests.sh crazy_linker\n\n  See DESIGN.TXT for an overview of the library's design.\n"
  },
  {
    "path": "sources/crystax/crazy_linker/include/crazy_linker.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_H\n#define CRAZY_LINKER_H\n\n// This is the crazy linker, a custom dynamic linker that can be used\n// by NDK applications to load shared libraries (not executables) with\n// a twist.\n//\n// Compared to the dynamic linker, the crazy one has the following\n// features:\n//\n//   - It can use an arbitrary search path.\n//\n//   - It can load a library at a memory fixed address, or from a fixed\n//     file offset (both must be page-aligned).\n//\n//   - It can share the RELRO section between two libraries\n//     loaded at the same address in two distinct processes.\n//\n#include <dlfcn.h>\n#include <stdbool.h>\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// Function attribute to indicate that it needs to be exported by\n// the library.\n#define _CRAZY_PUBLIC __attribute__((__visibility__(\"default\")))\n\n// Status values returned by crazy linker functions to indicate\n// success or failure. They were chosen to match boolean values,\n// this allows one to test for failures with:\n//\n//    if (!crazy_linker_function(....)) {\n//       ... an error occured.\n//    }\n//\n// If the function called used a crazy_context_t, it is possible to\n// retrieve the error details with crazy_context_get_error().\ntypedef enum {\n  CRAZY_STATUS_FAILURE = 0,\n  CRAZY_STATUS_SUCCESS = 1\n} crazy_status_t;\n\n// Opaque handle to a context object that will hold parameters\n// for the crazy linker's operations. For example, this is where\n// you would set the explicit load address, and other user-provided\n// values before calling functions like crazy_library_open().\n//\n// The context holds a list of library search paths, initialized to\n// the content of the LD_LIBRARY_PATH variable on creation.\n//\n// The context also holds a string buffer to hold error messages that\n// can be queried with crazy_context_get_error().\ntypedef struct crazy_context_t crazy_context_t;\n\n// Create a new context object.\n// Note that this calls crazy_context_reset_search_paths().\ncrazy_context_t* crazy_context_create(void) _CRAZY_PUBLIC;\n\n// Return current error string, or NULL if there was no error.\nconst char* crazy_context_get_error(crazy_context_t* context) _CRAZY_PUBLIC;\n\n// Clear error in a given context.\nvoid crazy_context_clear_error(crazy_context_t* context) _CRAZY_PUBLIC;\n\n// Set the explicit load address in a context object. Value 0 means\n// the address is randomized.\nvoid crazy_context_set_load_address(crazy_context_t* context,\n                                    size_t load_address) _CRAZY_PUBLIC;\n\n// Return the current load address in a context.\nsize_t crazy_context_get_load_address(crazy_context_t* context) _CRAZY_PUBLIC;\n\n// Set the explicit file offset in a context object. The value should\n// always page-aligned, or the load will fail.\nvoid crazy_context_set_file_offset(crazy_context_t* context,\n                                   size_t file_offset) _CRAZY_PUBLIC;\n\n// Return the current file offset in a context object.\nsize_t crazy_context_get_file_offset(crazy_context_t* context);\n\n// Add one or more paths to the list of library search paths held\n// by a given context. |path| is a string using a column (:) as a\n// list separator. As with the PATH variable, an empty list item\n// is equivalent to '.', the current directory.\n// This can fail if too many paths are added to the context.\n//\n// NOTE: Calling this function appends new paths to the search list,\n// but all paths added with this function will be searched before\n// the ones listed in LD_LIBRARY_PATH.\ncrazy_status_t crazy_context_add_search_path(\n    crazy_context_t* context,\n    const char* file_path) _CRAZY_PUBLIC;\n\n// Find the ELF binary that contains |address|, and add its directory\n// path to the context's list of search directories. This is useful to\n// load libraries in the same directory than the current program itself.\ncrazy_status_t crazy_context_add_search_path_for_address(\n    crazy_context_t* context,\n    void* address) _CRAZY_PUBLIC;\n\n// Reset the search paths to the value of the LD_LIBRARY_PATH\n// environment variable. This essentially removes any paths\n// that were added with crazy_context_add_search_path() or\n// crazy_context_add_search_path_for_address().\nvoid crazy_context_reset_search_paths(crazy_context_t* context) _CRAZY_PUBLIC;\n\n// Record the value of |java_vm| inside of |context|. If this is not NULL,\n// which is the default, then after loading any library, the crazy linker\n// will look for a \"JNI_OnLoad\" symbol within it, and, if it exists, will call\n// it, passing the value of |java_vm| to it. If the function returns with\n// a jni version number that is smaller than |minimum_jni_version|, then\n// the library load will fail with an error.\n//\n// The |java_vm| field is also saved in the crazy_library_t object, and\n// used at unload time to call JNI_OnUnload() if it exists.\nvoid crazy_context_set_java_vm(crazy_context_t* context,\n                               void* java_vm,\n                               int minimum_jni_version);\n\n// Retrieves the last values set with crazy_context_set_java_vm().\n// A value of NUMM in |*java_vm| means the feature is disabled.\nvoid crazy_context_get_java_vm(crazy_context_t* context,\n                               void** java_vm,\n                               int* minimum_jni_version);\n\n// Destroy a given context object.\nvoid crazy_context_destroy(crazy_context_t* context) _CRAZY_PUBLIC;\n\n// Some operations performed by the crazy linker might conflict with the\n// system linker if they are used concurrently in different threads\n// (e.g. modifying the list of shared libraries seen by GDB). To work\n// around this, the crazy linker provides a way to delay these conflicting\n// operations for a later time.\n//\n// This works by wrapping each of these operations in a small data structure\n// (crazy_callback_t), which can later be passed to crazy_callback_run()\n// to execute it.\n//\n// The user must provide a function to record these callbacks during\n// library loading, by calling crazy_linker_set_callback_poster().\n//\n// Once all libraries are loaded, the callbacks can be later called either\n// in a different thread, or when it is safe to assume the system linker\n// cannot be running in parallel.\n\n// Callback handler.\ntypedef void (*crazy_callback_handler_t)(void* opaque);\n\n// A small structure used to model a callback provided by the crazy linker.\n// Use crazy_callback_run() to run the callback.\ntypedef struct {\n  crazy_callback_handler_t handler;\n  void* opaque;\n} crazy_callback_t;\n\n// Function to call to enable a callback into the crazy linker when delayed\n// operations are enabled (see crazy_context_set_callback_poster). A call\n// to crazy_callback_poster_t returns true if the callback was successfully\n// set up and will occur later, false if callback could not be set up (and\n// so will never occur).\ntypedef bool (*crazy_callback_poster_t)(\n    crazy_callback_t* callback, void* poster_opaque);\n\n// Enable delayed operation, by passing the address of a\n// |crazy_callback_poster_t| function, that will be called during library\n// loading to let the user record callbacks for delayed operations.\n// Callers must copy the |crazy_callback_t| passed to |poster|.\n// |poster_opaque| is an opaque value for client code use, passed back\n// on each call to |poster|.\n// |poster| can be NULL to disable the feature.\nvoid crazy_context_set_callback_poster(crazy_context_t* context,\n                                       crazy_callback_poster_t poster,\n                                       void* poster_opaque);\n\n// Return the address of the function that the crazy linker can use to\n// request callbacks, and the |poster_opaque| passed back on each call\n// to |poster|. |poster| is NULL if the feature is disabled.\nvoid crazy_context_get_callback_poster(crazy_context_t* context,\n                                       crazy_callback_poster_t* poster,\n                                       void** poster_opaque);\n\n// Run a given |callback| in the current thread. Must only be called once\n// per callback.\nvoid crazy_callback_run(crazy_callback_t* callback);\n\n// Opaque handle to a library as seen/loaded by the crazy linker.\ntypedef struct crazy_library_t crazy_library_t;\n\n// Try to open or load a library with the crazy linker.\n// |lib_name| if the library name or path. If it contains a directory\n// separator (/), this is treated as a explicit file path, otherwise\n// it is treated as a base name, and the context's search path list\n// will be used to locate the corresponding file.\n// |context| is a linker context handle. Can be NULL for defaults.\n// On success, return CRAZY_STATUS_SUCCESS and sets |*library|.\n// Libraries are reference-counted, trying to open the same library\n// twice will return the same library handle.\n//\n// NOTE: The load address and file offset from the context only apply\n// to the library being loaded (when not already in the process). If the\n// operations needs to load any dependency libraries, these will use\n// offset and address values of 0 to do so.\n//\n// NOTE: It is possible to open NDK system libraries (e.g. \"liblog.so\")\n// with this function, but they will be loaded with the system dlopen().\ncrazy_status_t crazy_library_open(crazy_library_t** library,\n                                  const char* lib_name,\n                                  crazy_context_t* context) _CRAZY_PUBLIC;\n\n// A structure used to hold information about a given library.\n// |load_address| is the library's actual (page-aligned) load address.\n// |load_size| is the library's actual (page-aligned) size.\n// |relro_start| is the address of the library's RELRO section in memory.\n// |relso_size| is the size of the library's RELRO section (or 0 if none).\n// |relro_fd| is the ashmem file descriptor for the shared section, if one\n// was created with crazy_library_enable_relro_sharing(), -1 otherwise.\ntypedef struct {\n  size_t load_address;\n  size_t load_size;\n  size_t relro_start;\n  size_t relro_size;\n} crazy_library_info_t;\n\n// Retrieve information about a given library.\n// |library| is a library handle.\n// |context| will get an error message on failure.\n// On success, return true and sets |*info|.\n// Note that this function will fail for system libraries.\ncrazy_status_t crazy_library_get_info(crazy_library_t* library,\n                                      crazy_context_t* context,\n                                      crazy_library_info_t* info);\n\n// Checks whether the system can support RELRO section sharing. This is\n// mainly due to the fact that old Android kernel images have a bug in their\n// implementation of Ashmem region mapping protection.\n// If this function returns CRAZY_STATUS_FAILURE, then calls to\n// crazy_library_enable_relro_sharing() will return a failure to prevent\n// the exploitation of this security issue in your code.\ncrazy_status_t crazy_system_can_share_relro(void);\n\n// Create an ashmem region containing a copy of the RELRO section for a given\n// |library|. This can be used with crazy_library_use_shared_relro().\n// |load_address| can be specified as non-0 to ensure that the content of the\n// ashmem region corresponds to a RELRO relocated for a new load address.\n// on success, return CRAZY_STATUS_SUCCESS and sets |*relro_start| to the\n// start of the RELRO section in memory, |*relro_size| to its size in bytes\n// and |*relro_fd| to a file descriptor to a read-only ashmem region containing\n// the data. On failure, return false and set error message in |context|.\n// NOTE: On success, the caller becomes the owner of |*relro_fd| and is shall\n// close it appropriately.\ncrazy_status_t crazy_library_create_shared_relro(crazy_library_t* library,\n                                                 crazy_context_t* context,\n                                                 size_t load_address,\n                                                 size_t* relro_start,\n                                                 size_t* relro_size,\n                                                 int* relro_fd) _CRAZY_PUBLIC;\n\n// Use the shared RELRO section of the same library loaded in a different\n// address space. On success, return CRAZY_STATUS_SUCCESS and owns |relro_fd|.\n// On failure, return CRAZY_STATUS_FAILURE and sets error message in |context|.\n// |library| is the library handle.\n// |relro_start| is the address of the RELRO section in memory.\n// |relro_size| is the size of the RELRO section.\n// |relro_fd| is the file descriptor for the shared RELRO ashmem region.\n// |context| will receive an error in case of failure.\n// NOTE: This will fail if this is a system library, or if the RELRO\n// parameters do not match the library's actual load address.\n// NOTE: The caller is responsible for closing the file descriptor after this\n// call.\ncrazy_status_t crazy_library_use_shared_relro(crazy_library_t* library,\n                                              crazy_context_t* context,\n                                              size_t relro_start,\n                                              size_t relro_size,\n                                              int relro_fd) _CRAZY_PUBLIC;\n\n// Look for a library named |library_name| in the set of currently\n// loaded libraries, and return a handle for it in |*library| on success.\n// Note that this increments the reference count on the library, thus\n// the caller shall call crazy_library_close() when it's done with it.\ncrazy_status_t crazy_library_find_by_name(const char* library_name,\n                                          crazy_library_t** library);\n\n// Find the library that contains a given |address| in memory.\n// On success, return CRAZY_STATUS_SUCCESS and sets |*library|.\ncrazy_status_t crazy_linker_find_library_from_address(\n    void* address,\n    crazy_library_t** library) _CRAZY_PUBLIC;\n\n// Lookup a symbol's address by its |symbol_name| in a given library.\n// This only looks at the symbols in |library|.\n// On success, returns CRAZY_STATUS_SUCCESS and sets |*symbol_address|,\n// which could be NULL for some symbols.\ncrazy_status_t crazy_library_find_symbol(crazy_library_t* library,\n                                         const char* symbol_name,\n                                         void** symbol_address) _CRAZY_PUBLIC;\n\n// Lookup a symbol's address in all libraries known by the crazy linker.\n// |symbol_name| is the symbol name. On success, returns CRAZY_STATUS_SUCCESS\n// and sets |*symbol_address|.\n// NOTE: This will _not_ look into system libraries that were not opened\n// with the crazy linker.\ncrazy_status_t crazy_linker_find_symbol(const char* symbol_name,\n                                        void** symbol_address) _CRAZY_PUBLIC;\n\n// Find the in-process library that contains a given memory address.\n// Note that this works even if the memory is inside a system library that\n// was not previously opened with crazy_library_open().\n// |address| is the memory address.\n// On success, returns CRAZY_STATUS_SUCCESS and sets |*library|.\n// The caller muyst call crazy_library_close() once it's done with the\n// library.\ncrazy_status_t crazy_library_find_from_address(\n    void* address,\n    crazy_library_t** library) _CRAZY_PUBLIC;\n\n// Close a library. This decrements its reference count. If it reaches\n// zero, the library be unloaded from the process.\nvoid crazy_library_close(crazy_library_t* library) _CRAZY_PUBLIC;\n\n// Close a library, with associated context to support delayed operations.\nvoid crazy_library_close_with_context(crazy_library_t* library,\n                                      crazy_context_t* context) _CRAZY_PUBLIC;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* CRAZY_LINKER_H */\n"
  },
  {
    "path": "sources/crystax/crazy_linker/minitest/minitest.cc",
    "content": "#include \"minitest.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <wchar.h>\n\nnamespace {\n\nstruct TestInfo {\n  const char* test_name;\n  const char* case_name;\n  minitest::TestFunction* test_function;\n  TestInfo* next;\n};\n\nTestInfo* g_test_infos;\nTestInfo** g_test_infos_tail;\n\n}  // namespace\n\nnamespace minitest {\n\nnamespace internal {\n\nString::String(const char* str, size_t len) {\n  Resize(len);\n  ::memcpy(str_, str, len);\n  size_ = len;\n}\n\nString& String::operator+=(const String& other) {\n  size_t old_size = size_;\n  Resize(old_size + other.size_);\n  ::memcpy(str_ + old_size, other.str_, other.size_);\n  return *this;\n}\n\nString& String::operator+=(const char* str) {\n  size_t len = ::strlen(str);\n  size_t old_size = size_;\n  Resize(old_size + len);\n  ::memcpy(str_ + old_size, str, len);\n  return *this;\n}\n\nString& String::operator+=(char ch) {\n  Resize(size_ + 1);\n  str_[size_ - 1] = ch;\n  return *this;\n}\n\nString& String::operator<<(const String& other) {\n  (*this) += other;\n  return *this;\n}\n\nString& String::operator<<(const char* str) {\n  (*this) += str;\n  return *this;\n}\n\nString& String::operator<<(char ch) {\n  (*this) += ch;\n  return *this;\n}\n\nString& String::operator<<(bool v) {\n  (*this) += (v ? \"true\" : \"false\");\n  return *this;\n}\n\n#define MINITEST_STRING_OPERATOR_LL_(ParamType, Format) \\\n  String& String::operator<<(ParamType v) {             \\\n    char buf[20];                                       \\\n    ::snprintf(buf, sizeof(buf), Format, v);            \\\n    (*this) += buf;                                     \\\n    return *this;                                       \\\n  }\n\nMINITEST_STRING_OPERATOR_LL_(signed char, \"%hhd\")\nMINITEST_STRING_OPERATOR_LL_(unsigned char, \"%hhu\")\nMINITEST_STRING_OPERATOR_LL_(short, \"%hd\")\nMINITEST_STRING_OPERATOR_LL_(unsigned short, \"%hu\");\nMINITEST_STRING_OPERATOR_LL_(int, \"%d\")\nMINITEST_STRING_OPERATOR_LL_(unsigned, \"%u\")\nMINITEST_STRING_OPERATOR_LL_(long, \"%ld\")\nMINITEST_STRING_OPERATOR_LL_(unsigned long, \"%lu\")\nMINITEST_STRING_OPERATOR_LL_(long long, \"%lld\")\nMINITEST_STRING_OPERATOR_LL_(unsigned long long, \"%llu\")\nMINITEST_STRING_OPERATOR_LL_(float, \"%f\")\nMINITEST_STRING_OPERATOR_LL_(double, \"%f\")\nMINITEST_STRING_OPERATOR_LL_(long double, \"%Lf\")\nMINITEST_STRING_OPERATOR_LL_(const void*, \"%p\")\n\n#undef MINITEST_STRING_OPERATOR_LL_\n\nvoid String::Clear() {\n  ::free(str_);\n  str_ = NULL;\n  size_ = 0;\n  capacity_ = 0;\n}\n\nvoid String::Resize(size_t new_size) {\n  if (new_size > capacity_) {\n    size_t new_capacity = capacity_;\n    while (new_capacity < new_size)\n      new_capacity += (new_capacity >> 1) + 8;\n\n    Reserve(new_capacity);\n  }\n  str_[new_size] = '\\0';\n  size_ = new_size;\n}\n\nvoid String::Reserve(size_t new_capacity) {\n  str_ = reinterpret_cast<char*>(::realloc(str_, new_capacity + 1));\n  if (new_capacity > capacity_)\n    ::memset(str_ + capacity_, '\\0', new_capacity - capacity_);\n  capacity_ = new_capacity;\n}\n\n}  // namespace internal\n\ninternal::String Format(const char* format, ...) {\n  internal::String result;\n  va_list args, args2;\n  va_start(args, format);\n  // Note: Resize(n) allocates at least n+1 bytes.\n  result.Resize(100);\n  int len;\n  for (;;) {\n    va_copy(args2, args);\n    len = vsnprintf(&result[0], result.size(), format, args2);\n    va_end(args2);\n    // On Windows, snprintf() returns -1 on truncation. On other\n    // platforms, it returns the size of the string, without truncation.\n    if (len >= 0 && static_cast<size_t>(len) <= result.size())\n      break;\n    result.Resize(result.size() * 2);\n  }\n  va_end(args);\n  return result;\n}\n\nvoid TestCase::Failure() {\n  if (result_ == PASS)\n    result_ = FAIL;\n  if (!text_.empty())\n    printf(\"%s\\n\", text_.c_str());\n}\n\nvoid TestCase::FatalFailure() {\n  result_ = FATAL;\n  if (!text_.empty())\n    printf(\"%s\\n\", text_.c_str());\n}\n\ninternal::String& TestCase::GetText() {\n  text_.Clear();\n  return text_;\n}\n\nvoid RegisterTest(const char* test_name,\n                  const char* case_name,\n                  TestFunction* test_function) {\n  if (g_test_infos_tail == NULL)\n    g_test_infos_tail = &g_test_infos;\n\n  TestInfo* info = reinterpret_cast<TestInfo*>(::malloc(sizeof(*info)));\n\n  info->test_name = test_name;\n  info->case_name = case_name;\n  info->test_function = test_function;\n\n  *g_test_infos_tail = info;\n  g_test_infos_tail = &info->next;\n}\n\n}  // namespace minitest\n\nint main(void) {\n  printf(\"--- TESTS STARTING ---\\n\");\n  TestInfo* info = g_test_infos;\n  unsigned num_failures = 0;\n  unsigned num_tests = 0;\n  for (; info != NULL; info = info->next) {\n    minitest::TestCase testcase;\n    printf(\"[ RUNNING   ] %s.%s\\n\", info->test_name, info->case_name);\n    num_tests += 1;\n    info->test_function(&testcase);\n    const char* status;\n    switch (testcase.result()) {\n      case minitest::TestCase::PASS:\n        status = \"OK\";\n        break;\n      case minitest::TestCase::FAIL:\n      case minitest::TestCase::FATAL:\n        status = \"FAIL\";\n        num_failures += 1;\n        break;\n    }\n    printf(\"[ %9s ] %s.%s\\n\", status, info->test_name, info->case_name);\n  }\n  printf(\"--- TESTS COMPLETED ---\\n\");\n  printf(\"tests completed: %d\\n\", num_tests);\n  printf(\"tests passed: %d\\n\", num_tests - num_failures);\n  printf(\"tests failed: %d\\n\", num_failures);\n\n  return (num_failures > 0);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/minitest/minitest.h",
    "content": "// Copyright (C) 2013 The Android Open Source Project\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n// // Redistributions of source code must retain the above copyright\n//    notice, this list of conditions and the following disclaimer.\n// // Redistributions in binary form must reproduce the above copyright\n//    notice, this list of conditions and the following disclaimer in\n//    the documentation and/or other materials provided with the\n//    distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n// SUCH DAMAGE.\n\n#ifndef MINITEST_MINITEST_H\n#define MINITEST_MINITEST_H\n\n// Minitest is a minimalistic unit testing framework designed specifically\n// for the Android support library.\n//\n// - Unit tests must be written in C++, but no C++ runtime implementation\n//   is either required or _supported_. This is by design.\n//\n// _ Inspired by GoogleTest, you can use the TEST macro to define a new\n//   test case easily, and it can contain EXPECT_XX|ASSERT_XX statements.\n//\n//   For example:\n//\n//      TEST(stdio, strlen) {\n//        EXPECT_EQ(3, strlen(\"foo\"));\n//        EXPECT_EQ(1, srlen(\"a\"));\n//      }\n//\n//   However, there are important differences / limitations:\n//\n//   o You cannot stream strings into an except or assert statement.\n//     Minitest provides a TEST_TEXT macro to do that instead.\n//\n//     In other words, replace:\n//\n//       EXPECT_EQ(expected, expression) << \"When checking 'foo'\";\n//\n//     With:\n//       TEST_TEXT << \"When checking 'foo'\";\n//       EXPECT_EQ(expected, expression);\n//\n//    The context text is only printed on failure.\n//\n//   o TEST_F() is not supported (for now).\n//\n//   o EXPECT/ASSERT statements only work inside a TESET() function, not\n//     in a function called by it.\n//\n//   o No test death detection.\n//\n// - You can use minitest::Format() to stream formatted output into\n//   a TEST_TEXT context, as in:\n//\n//      for (size_t n = 0; n < kMaxCount; n++) {\n//        TEST_TEXT << \"Checking string : \"\n//                  << minitest;:Format(\"%z/%z\", n+1, kMaxCount);\n//        EXPECT_EQ(kExpected[n], Foo(kString[n]));\n//      }\n//\n#include <stdio.h>\n#include <string.h>\n\nnamespace minitest {\n\nnamespace internal {\n\n// AddConst<T>::type adds a 'const' qualifier to type T.\n// Examples:\n//   int -> const int\n//   char* -> const char* const\n//   const char* -> const char* const\n//   char* const -> const char* const\ntemplate <typename T>\nstruct AddConst {\n  typedef const T type;\n};\ntemplate <typename T>\nstruct AddConst<const T> {\n  typedef const T type;\n};\ntemplate <typename T>\nstruct AddConst<T*> {\n  typedef const T* const type;\n};\ntemplate <typename T>\nstruct AddConst<const T*> {\n  typedef const T* const type;\n};\n\n// String class used to accumulate error messages.\n// Very similar to std::string but also supports streaming into it\n// for easier formatted output, as in:\n//\n//    String str;\n//    int x = 42;\n//    str << \"x is '\" << x << \"'\\n\";\n//\n// You can also use minitest::Format() as in:\n//\n//    str << minitest::Format(\"Hex value %08x\\n\", x);\n//\nclass String {\n public:\n  String() : str_(NULL), size_(0), capacity_(0) {}\n  String(const char* str, size_t len);\n\n  explicit String(const char* str) { String(str, ::strlen(str)); }\n\n  String(const String& other) { String(other.str_, other.size_); }\n\n  String& operator=(const String& other) {\n    (*this) += other;\n    return *this;\n  }\n\n  char& operator[](size_t index) { return str_[index]; }\n\n  ~String() { Clear(); }\n\n  const char* c_str() const { return str_; }\n  const char* data() const { return str_; }\n  size_t size() const { return size_; }\n  bool empty() const { return size_ == 0; }\n\n  String& operator+=(const String& other);\n  String& operator+=(const char* str);\n  String& operator+=(char ch);\n\n  String operator+(const String& other) const {\n    String result(*this);\n    result += other;\n    return result;\n  }\n\n  String operator+(const char* str) const {\n    String result(*this);\n    result += str;\n    return result;\n  }\n\n  // Basic formatting operators.\n  String& operator<<(const String& other);\n  String& operator<<(const char* str);\n\n#define MINITEST_OPERATOR_LL_(ParamType) String& operator<<(ParamType v)\n\n  MINITEST_OPERATOR_LL_(bool);\n  MINITEST_OPERATOR_LL_(char);\n  MINITEST_OPERATOR_LL_(signed char);\n  MINITEST_OPERATOR_LL_(short);\n  MINITEST_OPERATOR_LL_(int);\n  MINITEST_OPERATOR_LL_(long);\n  MINITEST_OPERATOR_LL_(long long);\n  MINITEST_OPERATOR_LL_(unsigned char);\n  MINITEST_OPERATOR_LL_(unsigned short);\n  MINITEST_OPERATOR_LL_(unsigned int);\n  MINITEST_OPERATOR_LL_(unsigned long);\n  MINITEST_OPERATOR_LL_(unsigned long long);\n  MINITEST_OPERATOR_LL_(float);\n  MINITEST_OPERATOR_LL_(double);\n  MINITEST_OPERATOR_LL_(long double);\n  MINITEST_OPERATOR_LL_(const void*);\n\n#undef MINITEST_OPERATOR_LL_\n\n  void Clear();\n  void Resize(size_t new_size);\n\n private:\n  void Reserve(size_t new_capacity);\n  char* str_;\n  size_t size_;\n  size_t capacity_;\n};\n\n}  // namespace internal\n\n// A helper function that can be used to generate formatted output\n// as a temporary string. Use like printf(), but returns a new String\n// object. Useful to stream into TEST_TEXT() objects, as in:\n//\n//   TEST_TEXT << \"Using \"\n//                << minitest::Format(\"%08d\", bytes)\n//                << \" bytes\";\n//\ninternal::String Format(const char* format, ...);\n\nclass TestCase {\n public:\n  enum Result {\n    PASS = 0,\n    FAIL,\n    FATAL\n  };\n\n  TestCase() : result_(PASS) {}\n  ~TestCase() {}\n\n  void Failure();\n  void FatalFailure();\n\n  Result result() { return result_; }\n\n  internal::String& GetText();\n\n private:\n  Result result_;\n  internal::String text_;\n};\n\n// Type of a function defined through the TEST(<test>,<case>) macro.\ntypedef void(TestFunction)(TestCase* testcase);\n\n// Used internally to register new test functions.\nvoid RegisterTest(const char* test_name,\n                  const char* case_name,\n                  TestFunction* test_function);\n\n#define MINITEST_TEST_FUNCTION(testname, casename) \\\n  MINITEST_TEST_FUNCTION_(testname, casename)\n\n#define MINITEST_TEST_FUNCTION_(testname, casename) \\\n  minitest_##testname##_##casename\n\n#define TEST(testname, casename)                                               \\\n  static void MINITEST_TEST_FUNCTION(testname, casename)(minitest::TestCase*); \\\n  static void                                                                  \\\n      __attribute__((constructor)) RegisterMiniTest##testname##_##casename() { \\\n    minitest::RegisterTest(                                                    \\\n        #testname, #casename, &MINITEST_TEST_FUNCTION(testname, casename));    \\\n  }                                                                            \\\n  void MINITEST_TEST_FUNCTION(testname,                                        \\\n                              casename)(minitest::TestCase* minitest_testcase)\n\n// Use this macro to add context text before an EXPECT or ASSERT statement\n// For example:\n//\n//    for (size_t n = 0; n < MAX; ++n) {\n//      TEST_TEXT << \"When checking \" << kStrings[n];\n//      EXPECT_STREQ(kExpected[n], kStrings[n]);\n//    }\n//\n// The text will only be printed in case of failure in the next\n// EXPECT/ASSERT statement.\n//\n#define TEST_TEXT minitest_testcase->GetText()\n\n// EXPECT_TRUE() must evaluate to something that supports the << operator\n// to receive debugging strings only in case of failure.\n#define EXPECT_TRUE(expression)                                            \\\n  do {                                                                     \\\n    if (!(expression)) {                                                   \\\n      printf(                                                              \\\n          \"EXPECT_TRUE:%s:%d: expression '%s' returned 'false', expected \" \\\n          \"'true'\\n\",                                                      \\\n          __FILE__,                                                        \\\n          __LINE__,                                                        \\\n          #expression);                                                    \\\n      minitest_testcase->Failure();                                        \\\n    }                                                                      \\\n  } while (0)\n\n#define EXPECT_FALSE(expression)                                           \\\n  do {                                                                     \\\n    if (!!(expression)) {                                                  \\\n      printf(                                                              \\\n          \"EXPECT_FALSE:%s:%d: expression '%s' returned 'true', expected \" \\\n          \"'false'\\n\",                                                     \\\n          __FILE__,                                                        \\\n          __LINE__,                                                        \\\n          #expression);                                                    \\\n      minitest_testcase->Failure();                                        \\\n    }                                                                      \\\n  } while (0)\n\n#define MINITEST_DEFINE_LOCAL_EXPR_(varname, expr)                            \\\n  typedef minitest::internal::AddConst<__typeof__(expr)>::type varname##Type; \\\n  const varname##Type varname = (expr);\n\n#define MINITEST_EXPECT_ASSERT_BINOP_(                        \\\n    opname, op, expected, expression, is_assert)              \\\n  do {                                                        \\\n    MINITEST_DEFINE_LOCAL_EXPR_(minitest_expected, expected); \\\n    MINITEST_DEFINE_LOCAL_EXPR_(minitest_actual, expression); \\\n    if (!(minitest_actual op minitest_expected)) {            \\\n      printf(\"%s\" #opname \":%s:%d: with expression '%s'\\n\",   \\\n             is_assert ? \"ASSERT_\" : \"EXPECT_\",               \\\n             __FILE__,                                        \\\n             __LINE__,                                        \\\n             #expression);                                    \\\n      minitest::internal::String minitest_str;                \\\n      minitest_str << minitest_actual;                        \\\n      printf(\"actual   : %s\\n\", minitest_str.c_str());        \\\n      minitest_str.Clear();                                   \\\n      minitest_str << minitest_expected;                      \\\n      printf(\"expected : %s\\n\", minitest_str.c_str());        \\\n      if (is_assert) {                                        \\\n        minitest_testcase->FatalFailure();                    \\\n        return;                                               \\\n      }                                                       \\\n      minitest_testcase->Failure();                           \\\n    }                                                         \\\n  } while (0)\n\n#define MINITEST_EXPECT_BINOP_(opname, op, expected, expression) \\\n  MINITEST_EXPECT_ASSERT_BINOP_(opname, op, expected, expression, false)\n\n#define EXPECT_EQ(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(EQ, ==, expected, expression)\n\n#define EXPECT_NE(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(NE, !=, expected, expression)\n\n#define EXPECT_LE(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(LE, <=, expected, expression)\n\n#define EXPECT_LT(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(LT, <, expected, expression)\n\n#define EXPECT_GE(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(GE, >=, expected, expression)\n\n#define EXPECT_GT(expected, expression) \\\n  MINITEST_EXPECT_BINOP_(GT, >, expected, expression)\n\n#define MINITEST_EXPECT_ASSERT_STR_(expected, expression, is_eq, is_assert) \\\n  do {                                                                      \\\n    const char* minitest_prefix = is_assert ? \"ASSERT_STR\" : \"EXPECT_STR\";  \\\n    const char* minitest_suffix = is_eq ? \"EQ\" : \"NEQ\";                     \\\n    const char* minitest_expected = (expected);                             \\\n    const char* minitest_actual = (expression);                             \\\n    if (minitest_actual == NULL) {                                          \\\n      printf(\"%s%s:%s:%d: expression '%s' is NULL!\\n\",                      \\\n             minitest_prefix,                                               \\\n             minitest_suffix,                                               \\\n             __FILE__,                                                      \\\n             __LINE__,                                                      \\\n             #expression);                                                  \\\n      minitest_testcase->Failure();                                         \\\n    } else {                                                                \\\n      bool minitest_eq = !strcmp(minitest_expected, minitest_actual);       \\\n      if (minitest_eq != is_eq) {                                           \\\n        printf(\"%s%s:%s:%d: with expression '%s'\\n\",                        \\\n               minitest_prefix,                                             \\\n               minitest_suffix,                                             \\\n               __FILE__,                                                    \\\n               __LINE__,                                                    \\\n               #expression);                                                \\\n        printf(\"actual   : %s\\n\", minitest_actual);                         \\\n        printf(\"expected : %s\\n\", minitest_expected);                       \\\n        minitest_testcase->Failure();                                       \\\n      }                                                                     \\\n    }                                                                       \\\n  } while (0)\n\n#define EXPECT_STREQ(expected, expression) \\\n  MINITEST_EXPECT_ASSERT_STR_(expected, expression, true, false)\n\n#define EXPECT_STRNEQ(expected, expression) \\\n  MINITEST_EXPECT_ASSERT_STR_(expected, expression, false, false)\n\n#define MINITEST_EXPECT_ASSERT_MEM_(                                           \\\n    expected, expected_len, expression, expression_len, is_eq, is_assert)      \\\n  do {                                                                         \\\n    const char* minitest_prefix = is_assert ? \"ASSERT_MEM\" : \"EXPECT_MEM\";     \\\n    const char* minitest_suffix = is_eq ? \"EQ\" : \"NEQ\";                        \\\n    const char* minitest_expected = (expected);                                \\\n    size_t minitest_expected_len = static_cast<size_t>(expected_len);          \\\n    const char* minitest_actual = (expression);                                \\\n    size_t minitest_actual_len = static_cast<size_t>(expression_len);          \\\n    if (minitest_actual == NULL) {                                             \\\n      printf(\"%s%s:%s:%d: expression '%s' is NULL!\\n\",                         \\\n             minitest_prefix,                                                  \\\n             minitest_suffix,                                                  \\\n             __FILE__,                                                         \\\n             __LINE__,                                                         \\\n             #expression);                                                     \\\n      minitest_testcase->Failure();                                            \\\n    } else if (minitest_actual_len != minitest_expected_len) {                 \\\n      printf(\"%s:%s:%s:%d: size mistmatch for expression '%s'\\n\",              \\\n             minitest_prefix,                                                  \\\n             minitest_suffix,                                                  \\\n             __FILE__,                                                         \\\n             __LINE__,                                                         \\\n             #expression);                                                     \\\n      printf(\"actual size   : %zu (0x%zx)\\n\",                                  \\\n             minitest_actual_len,                                              \\\n             minitest_actual_len);                                             \\\n      printf(\"expected size : %zu (0x%zx)\\n\",                                  \\\n             minitest_expected_len,                                            \\\n             minitest_expected_len);                                           \\\n      minitest_testcase->Failure();                                            \\\n    } else {                                                                   \\\n      bool minitest_eq =                                                       \\\n          !memcmp(minitest_expected, minitest_actual, minitest_expected_len);  \\\n      if (minitest_eq != is_eq) {                                              \\\n        printf(\"%s%s:%s:%d: with expression '%s' of %zu bytes\\n\",              \\\n               minitest_prefix,                                                \\\n               minitest_suffix,                                                \\\n               __FILE__,                                                       \\\n               __LINE__,                                                       \\\n               #expression,                                                    \\\n               minitest_expected_len);                                         \\\n        printf(\"actual   : '%.*s'\\n\", (int)minitest_expected_len,              \\\n                                      minitest_actual);                        \\\n        printf(                                                                \\\n            \"expected : '%.*s'\\n\", (int)minitest_expected_len,                 \\\n                                   minitest_expected);                         \\\n        minitest_testcase->Failure();                                          \\\n      }                                                                        \\\n    }                                                                          \\\n  } while (0)\n\n#define EXPECT_MEMEQ(expected, expected_len, expression, expression_len) \\\n  MINITEST_EXPECT_ASSERT_MEM_(                                           \\\n      expected, expected_len, expression, expression_len, true, false)\n\n#define EXPECT_MEMNEQ(expected, expected_len, expression, expression_len) \\\n  MINITEST_EXPECT_ASSERT_MEM_(                                            \\\n      expected, expected_len, expression, expression_len, false, false)\n\n#define ASSERT_TRUE(expression)                                          \\\n  do {                                                                   \\\n    if (!(expression)) {                                                 \\\n      printf(                                                            \\\n          \"ASSERT_TRUE:%s:%d: expression '%s' return 'false', expected \" \\\n          \"'true'\\n\",                                                    \\\n          __FILE__,                                                      \\\n          __LINE__,                                                      \\\n          #expression);                                                  \\\n      minitest_testcase->FatalFailure();                                 \\\n      return;                                                            \\\n    }                                                                    \\\n  } while (0)\n\n#define ASSERT_FALSE(expression)                                         \\\n  do {                                                                   \\\n    if (!!(expression)) {                                                \\\n      printf(                                                            \\\n          \"ASSERT_FALSE:%s:%d: expression '%s' return 'true', expected \" \\\n          \"'false'\\n\",                                                   \\\n          __FILE__,                                                      \\\n          __LINE__,                                                      \\\n          #expression);                                                  \\\n      minitest_testcase->FatalFailure();                                 \\\n      return;                                                            \\\n    }                                                                    \\\n  } while (0)\n\n#define MINITEST_ASSERT_BINOP_(opname, op, expected, expression) \\\n  MINITEST_EXPECT_ASSERT_BINOP_(opname, op, expected, expression, true)\n\n#define ASSERT_EQ(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(EQ, ==, expected, expression)\n\n#define ASSERT_NE(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(NE, !=, expected, expression)\n\n#define ASSERT_LE(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(LE, <=, expected, expression)\n\n#define ASSERT_LT(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(LT, <, expected, expression)\n\n#define ASSERT_GE(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(GE, >=, expected, expression)\n\n#define ASSERT_GT(expected, expression) \\\n  MINITEST_ASSERT_BINOP_(GT, >, expected, expression)\n\n#define ASSERT_STREQ(expected, expression) \\\n  MINITEST_EXPECT_ASSERT_STR_(expected, expression, true, true)\n\n#define ASSERT_STRNEQ(expected, expression) \\\n  MINITEST_EXPECT_ASSERT_STR_(expected, expression, false, true)\n\n#define ASSERT_MEMEQ(expected, expected_len, expression, expression_len) \\\n  MINITEST_EXPECT_ASSERT_MEM_(                                           \\\n      expected, expected_len, expression, expression_len, true, true)\n\n#define ASSERT_MEMNEQ(expected, expected_len, expression, expression_len) \\\n  MINITEST_EXPECT_ASSERT_MEM_(                                            \\\n      expected, expected_len, expression, expression_len, false, true)\n\n#define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0]))\n\n}  // namespace minitest\n\n#endif  // MINITEST_MINITEST_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_api.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// Implements the crazy linker C-based API exposed by <crazy_linker.h>\n\n#include <crazy_linker.h>\n\n#include <string.h>\n\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_ashmem.h\"\n#include \"crazy_linker_globals.h\"\n#include \"crazy_linker_proc_maps.h\"\n#include \"crazy_linker_search_path_list.h\"\n#include \"crazy_linker_shared_library.h\"\n#include \"crazy_linker_thread.h\"\n#include \"crazy_linker_util.h\"\n#include \"crazy_linker_library_view.h\"\n#include \"crazy_linker_system.h\"\n\nusing crazy::Globals;\nusing crazy::Error;\nusing crazy::SearchPathList;\nusing crazy::ScopedGlobalLock;\nusing crazy::LibraryView;\n\n//\n// crazy_context_t\n//\n\nstruct crazy_context_t {\n public:\n  crazy_context_t()\n      : load_address(0),\n        file_offset(0),\n        error(),\n        search_paths(),\n        java_vm(NULL),\n        minimum_jni_version(0),\n        callback_poster(NULL),\n        callback_poster_opaque(NULL) {\n    ResetSearchPaths();\n  }\n\n  void ResetSearchPaths();\n\n  size_t load_address;\n  size_t file_offset;\n  Error error;\n  SearchPathList search_paths;\n  void* java_vm;\n  int minimum_jni_version;\n  crazy_callback_poster_t callback_poster;\n  void* callback_poster_opaque;\n};\n\nvoid crazy_context_t::ResetSearchPaths() {\n  search_paths.ResetFromEnv(\"LD_LIBRARY_PATH\");\n}\n\n//\n// API functions\n//\n\nextern \"C\" {\n\ncrazy_context_t* crazy_context_create(void) { return new crazy_context_t(); }\n\nconst char* crazy_context_get_error(crazy_context_t* context) {\n  const char* error = context->error.c_str();\n  return (error[0] != '\\0') ? error : NULL;\n}\n\n// Clear error in a given context.\nvoid crazy_context_clear_error(crazy_context_t* context) {\n  context->error = \"\";\n}\n\nvoid crazy_context_set_load_address(crazy_context_t* context,\n                                    size_t load_address) {\n  context->load_address = load_address;\n}\n\nsize_t crazy_context_get_load_address(crazy_context_t* context) {\n  return context->load_address;\n}\n\nvoid crazy_context_set_file_offset(crazy_context_t* context,\n                                   size_t file_offset) {\n  context->file_offset = file_offset;\n}\n\nsize_t crazy_context_get_file_offset(crazy_context_t* context) {\n  return context->file_offset;\n}\n\ncrazy_status_t crazy_context_add_search_path(crazy_context_t* context,\n                                             const char* file_path) {\n  context->search_paths.AddPaths(file_path);\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_context_add_search_path_for_address(\n    crazy_context_t* context,\n    void* address) {\n  uintptr_t load_address;\n  char path[512];\n  char* p;\n\n  if (crazy::FindElfBinaryForAddress(\n          address, &load_address, path, sizeof(path)) &&\n      (p = strrchr(path, '/')) != NULL && p[1]) {\n    *p = '\\0';\n    return crazy_context_add_search_path(context, path);\n  }\n\n  context->error.Format(\"Could not find ELF binary at address @%p\", address);\n  return CRAZY_STATUS_FAILURE;\n}\n\nvoid crazy_context_reset_search_paths(crazy_context_t* context) {\n  context->ResetSearchPaths();\n}\n\nvoid crazy_context_set_java_vm(crazy_context_t* context,\n                               void* java_vm,\n                               int minimum_jni_version) {\n  context->java_vm = java_vm;\n  context->minimum_jni_version = minimum_jni_version;\n}\n\nvoid crazy_context_get_java_vm(crazy_context_t* context,\n                               void** java_vm,\n                               int* minimum_jni_version) {\n  *java_vm = context->java_vm;\n  *minimum_jni_version = context->minimum_jni_version;\n}\n\nvoid crazy_context_set_callback_poster(crazy_context_t* context,\n                                       crazy_callback_poster_t poster,\n                                       void* poster_opaque) {\n  context->callback_poster = poster;\n  context->callback_poster_opaque = poster_opaque;\n}\n\nvoid crazy_context_get_callback_poster(crazy_context_t* context,\n                                       crazy_callback_poster_t* poster,\n                                       void** poster_opaque) {\n  *poster = context->callback_poster;\n  *poster_opaque = context->callback_poster_opaque;\n}\n\nvoid crazy_callback_run(crazy_callback_t* callback) {\n  (*callback->handler)(callback->opaque);\n}\n\nvoid crazy_context_destroy(crazy_context_t* context) { delete context; }\n\n// Scoped delayed execution, removes RDebug callbacks on scope exit.  No-op\n// if callback is NULL.\nclass ScopedDelayedCallbackPoster {\n public:\n  ScopedDelayedCallbackPoster(crazy_context_t* context) {\n    if (context && context->callback_poster) {\n      crazy::Globals::GetRDebug()->SetDelayedCallbackPoster(&PostFromContext,\n                                                            context);\n      set_delayed_callback_poster_ = true;\n    } else {\n      set_delayed_callback_poster_ = false;\n    }\n  }\n\n  ~ScopedDelayedCallbackPoster() {\n    if (set_delayed_callback_poster_)\n      crazy::Globals::GetRDebug()->SetDelayedCallbackPoster(NULL, NULL);\n  }\n\n private:\n  // Wrap callback hander and opaque into a call to a crazy_context_poster_t.\n  static bool PostFromContext(void* crazy_context,\n                              crazy_callback_handler_t handler,\n                              void* opaque) {\n    crazy_context_t* context = static_cast<crazy_context_t*>(crazy_context);\n    crazy_callback_t callback;\n    callback.handler = handler;\n    callback.opaque = opaque;\n    return context->callback_poster(&callback,\n                                    context->callback_poster_opaque);\n  }\n\n  // True if the context offered a callback_poster, otherwise false.\n  bool set_delayed_callback_poster_;\n};\n\ncrazy_status_t crazy_library_open(crazy_library_t** library,\n                                  const char* lib_name,\n                                  crazy_context_t* context) {\n  ScopedDelayedCallbackPoster poster(context);\n  ScopedGlobalLock lock;\n\n  LibraryView* wrap =\n      crazy::Globals::GetLibraries()->LoadLibrary(lib_name,\n                                                  RTLD_NOW,\n                                                  context->load_address,\n                                                  context->file_offset,\n                                                  &context->search_paths,\n                                                  &context->error);\n\n  if (!wrap)\n    return CRAZY_STATUS_FAILURE;\n\n  if (context->java_vm != NULL && wrap->IsCrazy()) {\n    crazy::SharedLibrary* lib = wrap->GetCrazy();\n    if (!lib->SetJavaVM(\n             context->java_vm, context->minimum_jni_version, &context->error)) {\n      crazy::Globals::GetLibraries()->UnloadLibrary(wrap);\n      return CRAZY_STATUS_FAILURE;\n    }\n  }\n\n  *library = reinterpret_cast<crazy_library_t*>(wrap);\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_library_get_info(crazy_library_t* library,\n                                      crazy_context_t* context,\n                                      crazy_library_info_t* info) {\n  if (!library) {\n    context->error = \"Invalid library file handle\";\n    return CRAZY_STATUS_FAILURE;\n  }\n\n  LibraryView* wrap = reinterpret_cast<LibraryView*>(library);\n  if (!wrap->GetInfo(&info->load_address,\n                     &info->load_size,\n                     &info->relro_start,\n                     &info->relro_size,\n                     &context->error)) {\n    return CRAZY_STATUS_FAILURE;\n  }\n\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_system_can_share_relro(void) {\n  crazy::AshmemRegion region;\n  if (!region.Allocate(PAGE_SIZE, NULL) ||\n      !region.SetProtectionFlags(PROT_READ) ||\n      !crazy::AshmemRegion::CheckFileDescriptorIsReadOnly(region.fd()))\n    return CRAZY_STATUS_FAILURE;\n\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_library_create_shared_relro(crazy_library_t* library,\n                                                 crazy_context_t* context,\n                                                 size_t load_address,\n                                                 size_t* relro_start,\n                                                 size_t* relro_size,\n                                                 int* relro_fd) {\n  LibraryView* wrap = reinterpret_cast<LibraryView*>(library);\n\n  if (!library || !wrap->IsCrazy()) {\n    context->error = \"Invalid library file handle\";\n    return CRAZY_STATUS_FAILURE;\n  }\n\n  crazy::SharedLibrary* lib = wrap->GetCrazy();\n  if (!lib->CreateSharedRelro(\n           load_address, relro_start, relro_size, relro_fd, &context->error))\n    return CRAZY_STATUS_FAILURE;\n\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_library_use_shared_relro(crazy_library_t* library,\n                                              crazy_context_t* context,\n                                              size_t relro_start,\n                                              size_t relro_size,\n                                              int relro_fd) {\n  LibraryView* wrap = reinterpret_cast<LibraryView*>(library);\n\n  if (!library || !wrap->IsCrazy()) {\n    context->error = \"Invalid library file handle\";\n    return CRAZY_STATUS_FAILURE;\n  }\n\n  crazy::SharedLibrary* lib = wrap->GetCrazy();\n  if (!lib->UseSharedRelro(relro_start, relro_size, relro_fd, &context->error))\n    return CRAZY_STATUS_FAILURE;\n\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_library_find_by_name(const char* library_name,\n                                          crazy_library_t** library) {\n  {\n    ScopedGlobalLock lock;\n    LibraryView* wrap =\n        Globals::GetLibraries()->FindLibraryByName(library_name);\n    if (!wrap)\n      return CRAZY_STATUS_FAILURE;\n\n    wrap->AddRef();\n    *library = reinterpret_cast<crazy_library_t*>(wrap);\n  }\n  return CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_library_find_symbol(crazy_library_t* library,\n                                         const char* symbol_name,\n                                         void** symbol_address) {\n  LibraryView* wrap = reinterpret_cast<LibraryView*>(library);\n\n  // TODO(digit): Handle NULL symbols properly.\n  *symbol_address = wrap->LookupSymbol(symbol_name);\n  return (*symbol_address == NULL) ? CRAZY_STATUS_FAILURE\n                                   : CRAZY_STATUS_SUCCESS;\n}\n\ncrazy_status_t crazy_linker_find_symbol(const char* symbol_name,\n                                        void** symbol_address) {\n  // TODO(digit): Implement this.\n  return CRAZY_STATUS_FAILURE;\n}\n\ncrazy_status_t crazy_library_find_from_address(void* address,\n                                               crazy_library_t** library) {\n  {\n    ScopedGlobalLock lock;\n    LibraryView* wrap = Globals::GetLibraries()->FindLibraryForAddress(address);\n    if (!wrap)\n      return CRAZY_STATUS_FAILURE;\n\n    wrap->AddRef();\n\n    *library = reinterpret_cast<crazy_library_t*>(wrap);\n    return CRAZY_STATUS_SUCCESS;\n  }\n}\n\nvoid crazy_library_close(crazy_library_t* library) {\n  crazy_library_close_with_context(library, NULL);\n}\n\nvoid crazy_library_close_with_context(crazy_library_t* library,\n                                      crazy_context_t* context) {\n  if (library) {\n    ScopedDelayedCallbackPoster poster(context);\n    ScopedGlobalLock lock;\n    LibraryView* wrap = reinterpret_cast<LibraryView*>(library);\n\n    Globals::GetLibraries()->UnloadLibrary(wrap);\n  }\n}\n\n}  // extern \"C\"\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_ashmem.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_ashmem.h\"\n\n#include <fcntl.h>\n#include <string.h>\n#include <sys/ioctl.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n#include <linux/ashmem.h>\n\n#include \"crazy_linker_system.h\"\n#include \"crazy_linker_memory_mapping.h\"\n\nnamespace crazy {\n\nbool AshmemRegion::Allocate(size_t region_size, const char* region_name) {\n  int fd = TEMP_FAILURE_RETRY(open(\"/dev/ashmem\", O_RDWR));\n  if (fd < 0)\n    return false;\n\n  if (ioctl(fd, ASHMEM_SET_SIZE, region_size) < 0)\n    goto ERROR;\n\n  if (region_name) {\n    char buf[256];\n    strlcpy(buf, region_name, sizeof(buf));\n    if (ioctl(fd, ASHMEM_SET_NAME, buf) < 0)\n      goto ERROR;\n  }\n\n  Reset(fd);\n  return true;\n\nERROR:\n  ::close(fd);\n  return false;\n}\n\nbool AshmemRegion::SetProtectionFlags(int prot) {\n  return ioctl(fd_, ASHMEM_SET_PROT_MASK, prot) == 0;\n}\n\n// static\nbool AshmemRegion::CheckFileDescriptorIsReadOnly(int fd) {\n  const size_t map_size = PAGE_SIZE;\n  ScopedMemoryMapping map;\n\n  // First, check that trying to map a page of the region with PROT_WRITE\n  // fails with EPERM.\n  if (map.Allocate(NULL, map_size, MemoryMapping::CAN_WRITE, fd)) {\n    LOG(\"%s: Region could be mapped writable. Should not happen.\\n\",\n        __FUNCTION__);\n    errno = EPERM;\n    return false;\n  }\n  if (errno != EPERM) {\n    LOG_ERRNO(\"%s: Region failed writable mapping with unexpected error\",\n              __FUNCTION__);\n    return false;\n  }\n\n  // Second, check that it can be mapped PROT_READ, but cannot be remapped\n  // with PROT_READ | PROT_WRITE through mprotect().\n  if (!map.Allocate(NULL, map_size, MemoryMapping::CAN_READ, fd)) {\n    LOG_ERRNO(\"%s: Failed to map region read-only\", __FUNCTION__);\n    return false;\n  }\n  if (map.SetProtection(MemoryMapping::CAN_READ_WRITE)) {\n    LOG_ERRNO(\"%s: Region could be remapped read-write. Should not happen.\\n\",\n              __FUNCTION__);\n    return false;\n  }\n  if (errno != EACCES) {\n    LOG_ERRNO(\n        \"%s: Region failed to be remapped read-write with unexpected error\",\n        __FUNCTION__);\n    return false;\n  }\n\n  // Everything's good.\n  return true;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_ashmem.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ASHMEM_H\n#define CRAZY_LINKER_ASHMEM_H\n\n#include <unistd.h>\n\nnamespace crazy {\n\n// Helper class to hold a scoped ashmem region file descriptor.\nclass AshmemRegion {\n public:\n  AshmemRegion() : fd_(-1) {}\n\n  ~AshmemRegion() { Reset(-1); }\n\n  int fd() const { return fd_; }\n\n  int Release() {\n    int ret = fd_;\n    fd_ = -1;\n    return ret;\n  }\n\n  void Reset(int fd) {\n    if (fd_ != -1) {\n      ::close(fd_);\n    }\n    fd_ = fd;\n  }\n\n  // Try to allocate a new ashmem region of |region_size|\n  // (page-aligned) bytes. |region_name| is optional, if not NULL\n  // it will be the name of the region (only used for debugging).\n  // Returns true on success, false otherwise.\n  bool Allocate(size_t region_size, const char* region_name);\n\n  // Change the protection flags of the region. Returns true on success.\n  // On failure, check errno for an error code.\n  bool SetProtectionFlags(int prot_flags);\n\n  // Check that the region tied to file descriptor |fd| is properly read-only:\n  // I.e. that it cannot be mapped writable, or that a read-only mapping cannot\n  // be mprotect()-ed into MAP_WRITE. On failure, return false and sets errno.\n  //\n  // See:\n  //   http://www.cvedetails.com/cve/CVE-2011-1149/\n  // And kernel patch at:\n  //   https://android.googlesource.com/kernel/common.git/+/\n  //     56f76fc68492af718fff88927bc296635d634b78%5E%21/\n  static bool CheckFileDescriptorIsReadOnly(int fd);\n\n private:\n  AshmemRegion(const AshmemRegion& other);\n  AshmemRegion& operator=(const AshmemRegion& other);\n\n  int fd_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ASHMEM_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_ashmem_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_ashmem.h\"\n\n#include <sys/mman.h>\n\n#include <minitest/minitest.h>\n\nnamespace crazy {\n\nTEST(AshmemRegion, Construction) {\n  AshmemRegion region;\n  EXPECT_EQ(-1, region.fd());\n}\n\nTEST(AshmemRegion, Allocate) {\n  AshmemRegion region;\n  const size_t kSize = 4096 * 10;\n  EXPECT_TRUE(region.Allocate(kSize, __FUNCTION__));\n  void* map = ::mmap(NULL,\n                     kSize,\n                     PROT_READ | PROT_WRITE,\n                     MAP_ANONYMOUS | MAP_SHARED,\n                     region.fd(),\n                     0);\n  EXPECT_NE(MAP_FAILED, map);\n\n  for (size_t n = 0; n < kSize; ++n) {\n    TEST_TEXT << \"Checking region[\" << n << \"]\";\n    EXPECT_EQ(0, ((char*)map)[n]);\n  }\n\n  EXPECT_EQ(0, ::munmap(map, kSize));\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_debug.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_debug.h\"\n\n#include <errno.h>\n#include <string.h>\n\n#ifdef __ANDROID__\n#include <android/log.h>\n#endif\n#include <stdarg.h>\n#include <stdio.h>\n\nnamespace crazy {\n\n#if CRAZY_DEBUG\n\nnamespace {\n\nvoid LogArgs(const char* fmt, va_list args, bool print_error, int error) {\n  const size_t buffer_size = 4096;\n  char* buffer = reinterpret_cast<char*>(::malloc(buffer_size));\n  int ret;\n\n  ret = vsnprintf(buffer, buffer_size, fmt, args);\n  if (ret >= static_cast<int>(buffer_size))\n    ret = static_cast<int>(buffer_size) - 1;\n\n  if (print_error) {\n    strlcat(buffer, \": \", buffer_size);\n    strlcat(buffer, strerror(error), buffer_size);\n  }\n\n  // First, send to stderr.\n  fprintf(stderr, \"%.*s\", ret, buffer);\n\n#ifdef __ANDROID__\n  // Then to the Android log.\n  __android_log_write(ANDROID_LOG_INFO, \"crazy_linker\", buffer);\n#endif\n\n  ::free(buffer);\n}\n\n}  // namespace\n\nvoid Log(const char* fmt, ...) {\n  int old_errno = errno;\n  va_list args;\n  va_start(args, fmt);\n  LogArgs(fmt, args, false, -1);\n  va_end(args);\n  errno = old_errno;\n}\n\nvoid LogErrno(const char* fmt, ...) {\n  int old_errno = errno;\n  va_list args;\n  va_start(args, fmt);\n  LogArgs(fmt, args, true, old_errno);\n  va_end(args);\n  errno = old_errno;\n}\n\n#endif  // CRAZY_DEBUG\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_debug.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_DEBUG_H\n#define CRAZY_LINKER_DEBUG_H\n\n// Set CRAZY_DEBUG on the command-line to 1 to enable debugging support.\n// This really means adding traces that will be sent to both stderr\n// and the logcat during execution.\n#ifndef CRAZY_DEBUG\n#define CRAZY_DEBUG 0\n#endif\n\nnamespace crazy {\n\n#if CRAZY_DEBUG\n\nvoid Log(const char* fmt, ...);\nvoid LogErrno(const char* fmt, ...);\n\n#define LOG(...) ::crazy::Log(__VA_ARGS__)\n#define LOG_ERRNO(...) ::crazy::LogErrno(__VA_ARGS__)\n\n#else\n\n#define LOG(...) ((void)0)\n#define LOG_ERRNO(...) ((void)0)\n\n#endif\n\n// Conditional logging.\n#define LOG_IF(cond, ...) \\\n  do {                    \\\n    if ((cond))           \\\n      LOG(__VA_ARGS__);   \\\n  } while (0)\n\n#define LOG_ERRNO_IF(cond, ...) \\\n  do {                          \\\n    if ((cond))                 \\\n      LOG_ERRNO(__VA_ARGS__);   \\\n  } while (0)\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_DEBUG_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_loader.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_elf_loader.h\"\n\n#include <limits.h>  // For PAGE_SIZE and PAGE_MASK\n\n#include \"crazy_linker_debug.h\"\n#include \"linker_phdr.h\"\n\n#define PAGE_START(x) ((x) & PAGE_MASK)\n#define PAGE_OFFSET(x) ((x) & ~PAGE_MASK)\n#define PAGE_END(x) PAGE_START((x) + (PAGE_SIZE - 1))\n\nnamespace crazy {\n\n#define MAYBE_MAP_FLAG(x, from, to) (((x) & (from)) ? (to) : 0)\n#define PFLAGS_TO_PROT(x)                 \\\n  (MAYBE_MAP_FLAG((x), PF_X, PROT_EXEC) | \\\n   MAYBE_MAP_FLAG((x), PF_R, PROT_READ) | \\\n   MAYBE_MAP_FLAG((x), PF_W, PROT_WRITE))\n\nElfLoader::ElfLoader()\n    : fd_(),\n      path_(NULL),\n      phdr_num_(0),\n      phdr_mmap_(NULL),\n      phdr_table_(NULL),\n      phdr_size_(0),\n      file_offset_(0),\n      wanted_load_address_(0),\n      load_start_(NULL),\n      load_size_(0),\n      load_bias_(0),\n      loaded_phdr_(NULL) {}\n\nElfLoader::~ElfLoader() {\n  if (phdr_mmap_) {\n    // Deallocate the temporary program header copy.\n    munmap(phdr_mmap_, phdr_size_);\n  }\n}\n\nbool ElfLoader::LoadAt(const char* lib_path,\n                       off_t file_offset,\n                       uintptr_t wanted_address,\n                       Error* error) {\n\n  LOG(\"%s: lib_path='%s', file_offset=%p, load_address=%p\\n\",\n      __FUNCTION__,\n      lib_path,\n      file_offset,\n      wanted_address);\n\n  // Check that the load address is properly page-aligned.\n  if (wanted_address != PAGE_START(wanted_address)) {\n    error->Format(\"Load address is not page aligned (%08x)\", wanted_address);\n    return false;\n  }\n  wanted_load_address_ = reinterpret_cast<void*>(wanted_address);\n\n  // Check that the file offset is also properly page-aligned.\n  // PAGE_START() can't be used here due to the compiler complaining about\n  // comparing signed (off_t) and unsigned (size_t) values.\n  if ((file_offset & static_cast<off_t>(PAGE_SIZE - 1)) != 0) {\n    error->Format(\"File offset is not page aligned (%08x)\", file_offset);\n    return false;\n  }\n  file_offset_ = file_offset;\n\n  // Open the file.\n  if (!fd_.OpenReadOnly(lib_path)) {\n    error->Format(\"Can't open file: %s\", strerror(errno));\n    return false;\n  }\n\n  if (file_offset && fd_.SeekTo(file_offset) < 0) {\n    error->Format(\n        \"Can't seek to file offset %08x: %s\", file_offset, strerror(errno));\n    return false;\n  }\n\n  path_ = lib_path;\n\n  if (!ReadElfHeader(error) || !ReadProgramHeader(error) ||\n      !ReserveAddressSpace(error)) {\n    return false;\n  }\n\n  if (!LoadSegments(error) || !FindPhdr(error)) {\n    // An error occured, cleanup the address space by un-mapping the\n    // range that was reserved by ReserveAddressSpace().\n    if (load_start_ && load_size_)\n      munmap(load_start_, load_size_);\n\n    return false;\n  }\n\n  return true;\n}\n\nbool ElfLoader::ReadElfHeader(Error* error) {\n  int ret = fd_.Read(&header_, sizeof(header_));\n  if (ret < 0) {\n    error->Format(\"Can't read file: %s\", strerror(errno));\n    return false;\n  }\n  if (ret != static_cast<int>(sizeof(header_))) {\n    error->Set(\"File too small to be ELF\");\n    return false;\n  }\n\n  if (memcmp(header_.e_ident, ELFMAG, SELFMAG) != 0) {\n    error->Set(\"Bad ELF magic\");\n    return false;\n  }\n\n  if (header_.e_ident[EI_CLASS] != ELF::kElfClass) {\n    error->Format(\"Not a %d-bit class: %d\",\n                  ELF::kElfBits,\n                  header_.e_ident[EI_CLASS]);\n    return false;\n  }\n\n  if (header_.e_ident[EI_DATA] != ELFDATA2LSB) {\n    error->Format(\"Not little-endian class: %d\", header_.e_ident[EI_DATA]);\n    return false;\n  }\n\n  if (header_.e_type != ET_DYN) {\n    error->Format(\"Not a shared library type: %d\", header_.e_type);\n    return false;\n  }\n\n  if (header_.e_version != EV_CURRENT) {\n    error->Format(\"Unexpected ELF version: %d\", header_.e_version);\n    return false;\n  }\n\n  if (header_.e_machine != ELF_MACHINE) {\n    error->Format(\"Unexpected ELF machine type: %d\", header_.e_machine);\n    return false;\n  }\n\n  return true;\n}\n\n// Loads the program header table from an ELF file into a read-only private\n// anonymous mmap-ed block.\nbool ElfLoader::ReadProgramHeader(Error* error) {\n  phdr_num_ = header_.e_phnum;\n\n  // Like the kernel, only accept program header tables smaller than 64 KB.\n  if (phdr_num_ < 1 || phdr_num_ > 65536 / sizeof(ELF::Phdr)) {\n    error->Format(\"Invalid program header count: %d\", phdr_num_);\n    return false;\n  }\n\n  ELF::Addr page_min = PAGE_START(header_.e_phoff);\n  ELF::Addr page_max =\n      PAGE_END(header_.e_phoff + (phdr_num_ * sizeof(ELF::Phdr)));\n  ELF::Addr page_offset = PAGE_OFFSET(header_.e_phoff);\n\n  phdr_size_ = page_max - page_min;\n\n  void* mmap_result = fd_.Map(\n      NULL, phdr_size_, PROT_READ, MAP_PRIVATE, page_min + file_offset_);\n  if (mmap_result == MAP_FAILED) {\n    error->Format(\"Phdr mmap failed: %s\", strerror(errno));\n    return false;\n  }\n\n  phdr_mmap_ = mmap_result;\n  phdr_table_ = reinterpret_cast<ELF::Phdr*>(\n      reinterpret_cast<char*>(mmap_result) + page_offset);\n  return true;\n}\n\n// Reserve a virtual address range big enough to hold all loadable\n// segments of a program header table. This is done by creating a\n// private anonymous mmap() with PROT_NONE.\n//\n// This will use the wanted_load_address_ value,\nbool ElfLoader::ReserveAddressSpace(Error* error) {\n  ELF::Addr min_vaddr;\n  load_size_ =\n      phdr_table_get_load_size(phdr_table_, phdr_num_, &min_vaddr, NULL);\n  if (load_size_ == 0) {\n    error->Set(\"No loadable segments\");\n    return false;\n  }\n\n  uint8_t* addr = reinterpret_cast<uint8_t*>(min_vaddr);\n  int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS;\n\n  // Support loading at a fixed address.\n  if (wanted_load_address_) {\n    addr = static_cast<uint8_t*>(wanted_load_address_);\n    mmap_flags |= MAP_FIXED;\n  }\n\n  LOG(\"%s: address=%p size=%p\\n\", __FUNCTION__, addr, load_size_);\n  void* start = mmap(addr, load_size_, PROT_NONE, mmap_flags, -1, 0);\n  if (start == MAP_FAILED) {\n    error->Format(\"Could not reserve %d bytes of address space\", load_size_);\n    return false;\n  }\n\n  load_start_ = start;\n  load_bias_ = reinterpret_cast<ELF::Addr>(start) - min_vaddr;\n  return true;\n}\n\n// Returns the address of the program header table as it appears in the loaded\n// segments in memory. This is in contrast with 'phdr_table_' which\n// is temporary and will be released before the library is relocated.\nbool ElfLoader::FindPhdr(Error* error) {\n  const ELF::Phdr* phdr_limit = phdr_table_ + phdr_num_;\n\n  // If there is a PT_PHDR, use it directly.\n  for (const ELF::Phdr* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {\n    if (phdr->p_type == PT_PHDR) {\n      return CheckPhdr(load_bias_ + phdr->p_vaddr, error);\n    }\n  }\n\n  // Otherwise, check the first loadable segment. If its file offset\n  // is 0, it starts with the ELF header, and we can trivially find the\n  // loaded program header from it.\n  for (const ELF::Phdr* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {\n    if (phdr->p_type == PT_LOAD) {\n      if (phdr->p_offset == 0) {\n        ELF::Addr elf_addr = load_bias_ + phdr->p_vaddr;\n        const ELF::Ehdr* ehdr = (const ELF::Ehdr*)(void*)elf_addr;\n        ELF::Addr offset = ehdr->e_phoff;\n        return CheckPhdr((ELF::Addr)ehdr + offset, error);\n      }\n      break;\n    }\n  }\n\n  error->Set(\"Can't find loaded program header\");\n  return false;\n}\n\n// Ensures that our program header is actually within a loadable\n// segment. This should help catch badly-formed ELF files that\n// would cause the linker to crash later when trying to access it.\nbool ElfLoader::CheckPhdr(ELF::Addr loaded, Error* error) {\n  const ELF::Phdr* phdr_limit = phdr_table_ + phdr_num_;\n  ELF::Addr loaded_end = loaded + (phdr_num_ * sizeof(ELF::Phdr));\n  for (ELF::Phdr* phdr = phdr_table_; phdr < phdr_limit; ++phdr) {\n    if (phdr->p_type != PT_LOAD) {\n      continue;\n    }\n    ELF::Addr seg_start = phdr->p_vaddr + load_bias_;\n    ELF::Addr seg_end = phdr->p_filesz + seg_start;\n    if (seg_start <= loaded && loaded_end <= seg_end) {\n      loaded_phdr_ = reinterpret_cast<const ELF::Phdr*>(loaded);\n      return true;\n    }\n  }\n  error->Format(\"Loaded program header %x not in loadable segment\", loaded);\n  return false;\n}\n\n// Map all loadable segments in process' address space.\n// This assumes you already called phdr_table_reserve_memory to\n// reserve the address space range for the library.\nbool ElfLoader::LoadSegments(Error* error) {\n  for (size_t i = 0; i < phdr_num_; ++i) {\n    const ELF::Phdr* phdr = &phdr_table_[i];\n\n    if (phdr->p_type != PT_LOAD) {\n      continue;\n    }\n\n    // Segment addresses in memory.\n    ELF::Addr seg_start = phdr->p_vaddr + load_bias_;\n    ELF::Addr seg_end = seg_start + phdr->p_memsz;\n\n    ELF::Addr seg_page_start = PAGE_START(seg_start);\n    ELF::Addr seg_page_end = PAGE_END(seg_end);\n\n    ELF::Addr seg_file_end = seg_start + phdr->p_filesz;\n\n    // File offsets.\n    ELF::Addr file_start = phdr->p_offset;\n    ELF::Addr file_end = file_start + phdr->p_filesz;\n\n    ELF::Addr file_page_start = PAGE_START(file_start);\n    ELF::Addr file_length = file_end - file_page_start;\n\n    LOG(\"%s: file_offset=%p file_length=%p start_address=%p end_address=%p\\n\",\n        __FUNCTION__,\n        file_offset_ + file_page_start,\n        file_length,\n        seg_page_start,\n        seg_page_start + PAGE_END(file_length));\n\n    if (file_length != 0) {\n      void* seg_addr = fd_.Map((void*)seg_page_start,\n                               file_length,\n                               PFLAGS_TO_PROT(phdr->p_flags),\n                               MAP_FIXED | MAP_PRIVATE,\n                               file_page_start + file_offset_);\n      if (seg_addr == MAP_FAILED) {\n        error->Format(\"Could not map segment %d: %s\", i, strerror(errno));\n        return false;\n      }\n    }\n\n    // if the segment is writable, and does not end on a page boundary,\n    // zero-fill it until the page limit.\n    if ((phdr->p_flags & PF_W) != 0 && PAGE_OFFSET(seg_file_end) > 0) {\n      memset((void*)seg_file_end, 0, PAGE_SIZE - PAGE_OFFSET(seg_file_end));\n    }\n\n    seg_file_end = PAGE_END(seg_file_end);\n\n    // seg_file_end is now the first page address after the file\n    // content. If seg_end is larger, we need to zero anything\n    // between them. This is done by using a private anonymous\n    // map for all extra pages.\n    if (seg_page_end > seg_file_end) {\n      void* zeromap = mmap((void*)seg_file_end,\n                           seg_page_end - seg_file_end,\n                           PFLAGS_TO_PROT(phdr->p_flags),\n                           MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE,\n                           -1,\n                           0);\n      if (zeromap == MAP_FAILED) {\n        error->Format(\"Could not zero-fill gap: %s\", strerror(errno));\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_loader.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ELF_LOADER_H\n#define CRAZY_LINKER_ELF_LOADER_H\n\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_system.h\"  // For ScopedFileDescriptor\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\n// Helper class used to load an ELF binary in memory.\n//\n// Note that this doesn't not perform any relocation, the purpose\n// of this class is strictly to map all loadable segments from the\n// file to their correct location.\n//\nclass ElfLoader {\n public:\n  ElfLoader();\n  ~ElfLoader();\n\n  // Try to load a library at a given address. On failure, this will\n  // update the linker error message and returns false.\n  //\n  // |lib_path| is the full library path, and |wanted_address| should\n  // be the desired load address, or 0 to enable randomization.\n  //\n  // |file_offset| is an offset in the file where the ELF header will\n  // be looked for.\n  //\n  // |wanted_address| is the wanted load address (of the first loadable\n  // segment), or 0 to enable randomization.\n  //\n  // On success, the library's loadable segments will be mapped in\n  // memory with their original protection. However, no further processing\n  // will be performed.\n  //\n  // On failure, returns false and assign an error message to |error|.\n  bool LoadAt(const char* lib_path,\n              off_t file_offset,\n              uintptr_t wanted_address,\n              Error* error);\n\n  // Only call the following functions after a succesfull LoadAt() call.\n\n  size_t phdr_count() { return phdr_num_; }\n  ELF::Addr load_start() { return reinterpret_cast<ELF::Addr>(load_start_); }\n  ELF::Addr load_size() { return load_size_; }\n  ELF::Addr load_bias() { return load_bias_; }\n  const ELF::Phdr* loaded_phdr() { return loaded_phdr_; }\n\n private:\n  FileDescriptor fd_;\n  const char* path_;\n\n  ELF::Ehdr header_;\n  size_t phdr_num_;\n\n  void* phdr_mmap_;  // temporary copy of the program header.\n  ELF::Phdr* phdr_table_;\n  ELF::Addr phdr_size_;  // and its size.\n\n  off_t file_offset_;\n  void* wanted_load_address_;\n  void* load_start_;     // First page of reserved address space.\n  ELF::Addr load_size_;  // Size in bytes of reserved address space.\n  ELF::Addr load_bias_;  // load_bias, add this value to all \"vaddr\"\n                         // values in the library to get the corresponding\n                         // memory address.\n\n  const ELF::Phdr* loaded_phdr_;  // points to the loaded program header.\n\n  // Individual steps used by ::LoadAt()\n  bool ReadElfHeader(Error* error);\n  bool ReadProgramHeader(Error* error);\n  bool ReserveAddressSpace(Error* error);\n  bool LoadSegments(Error* error);\n  bool FindPhdr(Error* error);\n  bool CheckPhdr(ELF::Addr, Error* error);\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ELF_LOADER_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_relocations.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_elf_relocations.h\"\n\n#include <errno.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_elf_symbols.h\"\n#include \"crazy_linker_elf_view.h\"\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_util.h\"\n#include \"linker_phdr.h\"\n\n#define DEBUG_RELOCATIONS 0\n\n#define RLOG(...) LOG_IF(DEBUG_RELOCATIONS, __VA_ARGS__)\n#define RLOG_ERRNO(...) LOG_ERRNO_IF(DEBUG_RELOCATIONS, __VA_ARGS__)\n\n#ifndef DF_SYMBOLIC\n#define DF_SYMBOLIC 2\n#endif\n\n#ifndef DF_TEXTREL\n#define DF_TEXTREL 4\n#endif\n\n#ifndef DT_FLAGS\n#define DT_FLAGS 30\n#endif\n\n// Processor-specific relocation types supported by the linker.\n#ifdef __arm__\n\n/* arm32 relocations */\n#define R_ARM_ABS32 2\n#define R_ARM_REL32 3\n#define R_ARM_GLOB_DAT 21\n#define R_ARM_JUMP_SLOT 22\n#define R_ARM_COPY 20\n#define R_ARM_RELATIVE 23\n\n#endif  // __arm__\n\n#ifdef __aarch64__\n\n/* arm64 relocations */\n#define R_AARCH64_ABS64 257\n#define R_AARCH64_COPY 1024\n#define R_AARCH64_GLOB_DAT 1025\n#define R_AARCH64_JUMP_SLOT 1026\n#define R_AARCH64_RELATIVE 1027\n\n#endif  // __aarch64__\n\n#ifdef __i386__\n\n/* i386 relocations */\n#define R_386_32 1\n#define R_386_PC32 2\n#define R_386_GLOB_DAT 6\n#define R_386_JMP_SLOT 7\n#define R_386_RELATIVE 8\n\n#endif  // __i386__\n\nnamespace crazy {\n\nnamespace {\n\n// List of known relocation types the relocator knows about.\nenum RelocationType {\n  RELOCATION_TYPE_UNKNOWN = 0,\n  RELOCATION_TYPE_ABSOLUTE = 1,\n  RELOCATION_TYPE_RELATIVE = 2,\n  RELOCATION_TYPE_PC_RELATIVE = 3,\n  RELOCATION_TYPE_COPY = 4,\n};\n\n// Convert an ELF relocation type info a RelocationType value.\nRelocationType GetRelocationType(ELF::Word r_type) {\n  switch (r_type) {\n#ifdef __arm__\n    case R_ARM_JUMP_SLOT:\n    case R_ARM_GLOB_DAT:\n    case R_ARM_ABS32:\n      return RELOCATION_TYPE_ABSOLUTE;\n\n    case R_ARM_REL32:\n    case R_ARM_RELATIVE:\n      return RELOCATION_TYPE_RELATIVE;\n\n    case R_ARM_COPY:\n      return RELOCATION_TYPE_COPY;\n#endif\n\n#ifdef __aarch64__\n    case R_AARCH64_JUMP_SLOT:\n    case R_AARCH64_GLOB_DAT:\n    case R_AARCH64_ABS64:\n      return RELOCATION_TYPE_ABSOLUTE;\n\n    case R_AARCH64_RELATIVE:\n      return RELOCATION_TYPE_RELATIVE;\n\n    case R_AARCH64_COPY:\n      return RELOCATION_TYPE_COPY;\n#endif\n\n#ifdef __i386__\n    case R_386_JMP_SLOT:\n    case R_386_GLOB_DAT:\n    case R_386_32:\n      return RELOCATION_TYPE_ABSOLUTE;\n\n    case R_386_RELATIVE:\n      return RELOCATION_TYPE_RELATIVE;\n\n    case R_386_PC32:\n      return RELOCATION_TYPE_PC_RELATIVE;\n#endif\n\n#ifdef __mips__\n    case R_MIPS_REL32:\n      return RELOCATION_TYPE_RELATIVE;\n#endif\n\n    default:\n      return RELOCATION_TYPE_UNKNOWN;\n  }\n}\n\n}  // namespace\n\nbool ElfRelocations::Init(const ElfView* view, Error* error) {\n  // Save these for later.\n  phdr_ = view->phdr();\n  phdr_count_ = view->phdr_count();\n  load_bias_ = view->load_bias();\n\n  // We handle only Rel or Rela, but not both. If DT_RELA or DT_RELASZ\n  // then we require DT_PLTREL to agree.\n  bool has_rela_relocations = false;\n  bool has_rel_relocations = false;\n\n  // Parse the dynamic table.\n  ElfView::DynamicIterator dyn(view);\n  for (; dyn.HasNext(); dyn.GetNext()) {\n    ELF::Addr dyn_value = dyn.GetValue();\n    uintptr_t dyn_addr = dyn.GetAddress(view->load_bias());\n\n    const ELF::Addr tag = dyn.GetTag();\n    switch (tag) {\n      case DT_PLTREL:\n        RLOG(\"  DT_PLTREL value=%d\\n\", dyn_value);\n        if (dyn_value != DT_REL && dyn_value != DT_RELA) {\n          *error = \"Invalid DT_PLTREL value in dynamic section\";\n          return false;\n        }\n        relocations_type_ = dyn_value;\n        break;\n      case DT_JMPREL:\n        RLOG(\"  DT_JMPREL addr=%p\\n\", dyn_addr);\n        plt_relocations_ = dyn_addr;\n        break;\n      case DT_PLTRELSZ:\n        plt_relocations_size_ = dyn_value;\n        RLOG(\"  DT_PLTRELSZ size=%d\\n\", dyn_value);\n        break;\n      case DT_RELA:\n      case DT_REL:\n        RLOG(\"  %s addr=%p\\n\",\n             (tag == DT_RELA) ? \"DT_RELA\" : \"DT_REL\",\n             dyn_addr);\n        if (relocations_) {\n          *error = \"Unsupported DT_RELA/DT_REL combination in dynamic section\";\n          return false;\n        }\n        relocations_ = dyn_addr;\n        if (tag == DT_RELA)\n          has_rela_relocations = true;\n        else\n          has_rel_relocations = true;\n        break;\n      case DT_RELASZ:\n      case DT_RELSZ:\n        RLOG(\"  %s size=%d\\n\",\n             (tag == DT_RELASZ) ? \"DT_RELASZ\" : \"DT_RELSZ\",\n             dyn_addr);\n        if (relocations_size_) {\n          *error = \"Unsupported DT_RELASZ/DT_RELSZ combination in dyn section\";\n          return false;\n        }\n        relocations_size_ = dyn_value;\n        if (tag == DT_RELASZ)\n          has_rela_relocations = true;\n        else\n          has_rel_relocations = true;\n        break;\n      case DT_PLTGOT:\n        // Only used on MIPS currently. Could also be used on other platforms\n        // when lazy binding (i.e. RTLD_LAZY) is implemented.\n        RLOG(\"  DT_PLTGOT addr=%p\\n\", dyn_addr);\n        plt_got_ = reinterpret_cast<ELF::Addr*>(dyn_addr);\n        break;\n      case DT_TEXTREL:\n        RLOG(\"  DT_TEXTREL\\n\");\n        has_text_relocations_ = true;\n        break;\n      case DT_SYMBOLIC:\n        RLOG(\"  DT_SYMBOLIC\\n\");\n        has_symbolic_ = true;\n        break;\n      case DT_FLAGS:\n        if (dyn_value & DF_TEXTREL)\n          has_text_relocations_ = true;\n        if (dyn_value & DF_SYMBOLIC)\n          has_symbolic_ = true;\n        RLOG(\" DT_FLAGS has_text_relocations=%s has_symbolic=%s\\n\",\n             has_text_relocations_ ? \"true\" : \"false\",\n             has_symbolic_ ? \"true\" : \"false\");\n        break;\n#if defined(__mips__)\n      case DT_MIPS_SYMTABNO:\n        RLOG(\"  DT_MIPS_SYMTABNO value=%d\\n\", dyn_value);\n        mips_symtab_count_ = dyn_value;\n        break;\n\n      case DT_MIPS_LOCAL_GOTNO:\n        RLOG(\"  DT_MIPS_LOCAL_GOTNO value=%d\\n\", dyn_value);\n        mips_local_got_count_ = dyn_value;\n        break;\n\n      case DT_MIPS_GOTSYM:\n        RLOG(\"  DT_MIPS_GOTSYM value=%d\\n\", dyn_value);\n        mips_gotsym_ = dyn_value;\n        break;\n#endif\n      default:\n        ;\n    }\n  }\n\n  if (relocations_type_ != DT_REL && relocations_type_ != DT_RELA) {\n    *error = \"Unsupported or missing DT_PLTREL in dynamic section\";\n    return false;\n  }\n\n  if (relocations_type_ == DT_REL && has_rela_relocations) {\n    *error = \"Found DT_RELA in dyn section, but DT_PLTREL is DT_REL\";\n    return false;\n  }\n  if (relocations_type_ == DT_RELA && has_rel_relocations) {\n    *error = \"Found DT_REL in dyn section, but DT_PLTREL is DT_RELA\";\n    return false;\n  }\n\n  return true;\n}\n\nbool ElfRelocations::ApplyAll(const ElfSymbols* symbols,\n                              SymbolResolver* resolver,\n                              Error* error) {\n  LOG(\"%s: Enter\\n\", __FUNCTION__);\n\n  if (has_text_relocations_) {\n    if (phdr_table_unprotect_segments(phdr_, phdr_count_, load_bias_) < 0) {\n      error->Format(\"Can't unprotect loadable segments: %s\", strerror(errno));\n      return false;\n    }\n  }\n\n  if (relocations_type_ == DT_REL) {\n    if (!ApplyRelRelocs(reinterpret_cast<ELF::Rel*>(plt_relocations_),\n                        plt_relocations_size_ / sizeof(ELF::Rel),\n                        symbols,\n                        resolver,\n                        error))\n      return false;\n    if (!ApplyRelRelocs(reinterpret_cast<ELF::Rel*>(relocations_),\n                        relocations_size_ / sizeof(ELF::Rel),\n                        symbols,\n                        resolver,\n                        error))\n      return false;\n  }\n\n  else if (relocations_type_ == DT_RELA) {\n    if (!ApplyRelaRelocs(reinterpret_cast<ELF::Rela*>(plt_relocations_),\n                         plt_relocations_size_ / sizeof(ELF::Rela),\n                         symbols,\n                         resolver,\n                         error))\n      return false;\n    if (!ApplyRelaRelocs(reinterpret_cast<ELF::Rela*>(relocations_),\n                         relocations_size_ / sizeof(ELF::Rela),\n                         symbols,\n                         resolver,\n                         error))\n      return false;\n  }\n\n#ifdef __mips__\n  if (!RelocateMipsGot(symbols, resolver, error))\n    return false;\n#endif\n\n  if (has_text_relocations_) {\n    if (phdr_table_protect_segments(phdr_, phdr_count_, load_bias_) < 0) {\n      error->Format(\"Can't reprotect loadable segments: %s\", strerror(errno));\n      return false;\n    }\n  }\n\n  LOG(\"%s: Done\\n\", __FUNCTION__);\n  return true;\n}\n\nbool ElfRelocations::ApplyRelaReloc(const ELF::Rela* rela,\n                                    ELF::Addr sym_addr,\n                                    bool resolved CRAZY_UNUSED,\n                                    Error* error) {\n  const ELF::Word rela_type = ELF_R_TYPE(rela->r_info);\n  const ELF::Word CRAZY_UNUSED rela_symbol = ELF_R_SYM(rela->r_info);\n  const ELF::Sword CRAZY_UNUSED addend = rela->r_addend;\n\n  const ELF::Addr reloc = static_cast<ELF::Addr>(rela->r_offset + load_bias_);\n\n  RLOG(\"  rela reloc=%p offset=%p type=%d addend=%p\\n\",\n       reloc,\n       rela->r_offset,\n       rela_type,\n       addend);\n\n  // Apply the relocation.\n  ELF::Addr* CRAZY_UNUSED target = reinterpret_cast<ELF::Addr*>(reloc);\n  switch (rela_type) {\n#ifdef __aarch64__\n    case R_AARCH64_JUMP_SLOT:\n      RLOG(\"  R_AARCH64_JUMP_SLOT target=%p addr=%p\\n\",\n           target,\n           sym_addr + addend);\n      *target = sym_addr + addend;\n      break;\n\n    case R_AARCH64_GLOB_DAT:\n      RLOG(\"  R_AARCH64_GLOB_DAT target=%p addr=%p\\n\",\n           target,\n           sym_addr + addend);\n      *target = sym_addr + addend;\n      break;\n\n    case R_AARCH64_ABS64:\n      RLOG(\"  R_AARCH64_ABS64 target=%p (%p) addr=%p\\n\",\n           target,\n           *target,\n           sym_addr + addend);\n      *target += sym_addr + addend;\n      break;\n\n    case R_AARCH64_RELATIVE:\n      RLOG(\"  R_AARCH64_RELATIVE target=%p (%p) bias=%p\\n\",\n           target,\n           *target,\n           load_bias_ + addend);\n      if (__builtin_expect(rela_symbol, 0)) {\n        *error = \"Invalid relative relocation with symbol\";\n        return false;\n      }\n      *target = load_bias_ + addend;\n      break;\n\n    case R_AARCH64_COPY:\n      // NOTE: These relocations are forbidden in shared libraries.\n      RLOG(\"  R_AARCH64_COPY\\n\");\n      *error = \"Invalid R_AARCH64_COPY relocation in shared library\";\n      return false;\n#endif  // __aarch64__\n\n    default:\n      error->Format(\"Invalid relocation type (%d)\", rela_type);\n      return false;\n  }\n\n  return true;\n}\n\nbool ElfRelocations::ApplyRelReloc(const ELF::Rel* rel,\n                                   ELF::Addr sym_addr,\n                                   bool resolved CRAZY_UNUSED,\n                                   Error* error) {\n  const ELF::Word rel_type = ELF_R_TYPE(rel->r_info);\n  const ELF::Word CRAZY_UNUSED rel_symbol = ELF_R_SYM(rel->r_info);\n\n  const ELF::Addr reloc = static_cast<ELF::Addr>(rel->r_offset + load_bias_);\n\n  RLOG(\"  rel reloc=%p offset=%p type=%d\\n\", reloc, rel->r_offset, rel_type);\n\n  // Apply the relocation.\n  ELF::Addr* CRAZY_UNUSED target = reinterpret_cast<ELF::Addr*>(reloc);\n  switch (rel_type) {\n#ifdef __arm__\n    case R_ARM_JUMP_SLOT:\n      RLOG(\"  R_ARM_JUMP_SLOT target=%p addr=%p\\n\", target, sym_addr);\n      *target = sym_addr;\n      break;\n\n    case R_ARM_GLOB_DAT:\n      RLOG(\"  R_ARM_GLOB_DAT target=%p addr=%p\\n\", target, sym_addr);\n      *target = sym_addr;\n      break;\n\n    case R_ARM_ABS32:\n      RLOG(\"  R_ARM_ABS32 target=%p (%p) addr=%p\\n\",\n           target,\n           *target,\n           sym_addr);\n      *target += sym_addr;\n      break;\n\n    case R_ARM_REL32:\n      RLOG(\"  R_ARM_REL32 target=%p (%p) addr=%p offset=%p\\n\",\n           target,\n           *target,\n           sym_addr,\n           rel->r_offset);\n      *target += sym_addr - rel->r_offset;\n      break;\n\n    case R_ARM_RELATIVE:\n      RLOG(\"  R_ARM_RELATIVE target=%p (%p) bias=%p\\n\",\n           target,\n           *target,\n           load_bias_);\n      if (__builtin_expect(rel_symbol, 0)) {\n        *error = \"Invalid relative relocation with symbol\";\n        return false;\n      }\n      *target += load_bias_;\n      break;\n\n    case R_ARM_COPY:\n      // NOTE: These relocations are forbidden in shared libraries.\n      // The Android linker has special code to deal with this, which\n      // is not needed here.\n      RLOG(\"  R_ARM_COPY\\n\");\n      *error = \"Invalid R_ARM_COPY relocation in shared library\";\n      return false;\n#endif  // __arm__\n\n#ifdef __i386__\n    case R_386_JMP_SLOT:\n      *target = sym_addr;\n      break;\n\n    case R_386_GLOB_DAT:\n      *target = sym_addr;\n      break;\n\n    case R_386_RELATIVE:\n      if (rel_symbol) {\n        *error = \"Invalid relative relocation with symbol\";\n        return false;\n      }\n      *target += load_bias_;\n      break;\n\n    case R_386_32:\n      *target += sym_addr;\n      break;\n\n    case R_386_PC32:\n      *target += (sym_addr - reloc);\n      break;\n#endif  // __i386__\n\n#ifdef __mips__\n    case R_MIPS_REL32:\n      if (resolved)\n        *target += sym_addr;\n      else\n        *target += load_bias_;\n      break;\n#endif  // __mips__\n\n    default:\n      error->Format(\"Invalid relocation type (%d)\", rel_type);\n      return false;\n  }\n\n  return true;\n}\n\nbool ElfRelocations::ResolveSymbol(ELF::Word rel_type,\n                                   ELF::Word rel_symbol,\n                                   const ElfSymbols* symbols,\n                                   SymbolResolver* resolver,\n                                   ELF::Addr reloc,\n                                   ELF::Addr* sym_addr,\n                                   Error* error) {\n  const char* sym_name = symbols->LookupNameById(rel_symbol);\n  RLOG(\"    symbol name='%s'\\n\", sym_name);\n  void* address = resolver->Lookup(sym_name);\n\n  if (address) {\n    // The symbol was found, so compute its address.\n    RLOG(\"%s: symbol %s resolved to %p\\n\", __FUNCTION__, sym_name, address);\n    *sym_addr = reinterpret_cast<ELF::Addr>(address);\n    return true;\n  }\n\n  // The symbol was not found. Normally this is an error except\n  // if this is a weak reference.\n  if (!symbols->IsWeakById(rel_symbol)) {\n    error->Format(\"Could not find symbol '%s'\", sym_name);\n    return false;\n  }\n\n  RLOG(\"%s: weak reference to unresolved symbol %s\\n\", __FUNCTION__, sym_name);\n\n  // IHI0044C AAELF 4.5.1.1:\n  // Libraries are not searched to resolve weak references.\n  // It is not an error for a weak reference to remain\n  // unsatisfied.\n  //\n  // During linking, the value of an undefined weak reference is:\n  // - Zero if the relocation type is absolute\n  // - The address of the place if the relocation is pc-relative\n  // - The address of nominal base address if the relocation\n  //   type is base-relative.\n  RelocationType r = GetRelocationType(rel_type);\n  if (r == RELOCATION_TYPE_ABSOLUTE || r == RELOCATION_TYPE_RELATIVE) {\n    *sym_addr = 0;\n    return true;\n  }\n\n  if (r == RELOCATION_TYPE_PC_RELATIVE) {\n    *sym_addr = reloc;\n    return true;\n  }\n\n  error->Format(\n      \"Invalid weak relocation type (%d) for unknown symbol '%s'\",\n      r,\n      sym_name);\n  return false;\n}\n\nbool ElfRelocations::ApplyRelRelocs(const ELF::Rel* rel,\n                                    size_t rel_count,\n                                    const ElfSymbols* symbols,\n                                    SymbolResolver* resolver,\n                                    Error* error) {\n  RLOG(\"%s: rel=%p rel_count=%d\\n\", __FUNCTION__, rel, rel_count);\n\n  if (!rel)\n    return true;\n\n  for (size_t rel_n = 0; rel_n < rel_count; rel++, rel_n++) {\n    const ELF::Word rel_type = ELF_R_TYPE(rel->r_info);\n    const ELF::Word rel_symbol = ELF_R_SYM(rel->r_info);\n\n    ELF::Addr sym_addr = 0;\n    ELF::Addr reloc = static_cast<ELF::Addr>(rel->r_offset + load_bias_);\n    RLOG(\"  %d/%d reloc=%p offset=%p type=%d symbol=%d\\n\",\n         rel_n + 1,\n         rel_count,\n         reloc,\n         rel->r_offset,\n         rel_type,\n         rel_symbol);\n\n    if (rel_type == 0)\n      continue;\n\n    bool resolved = false;\n\n    // If this is a symbolic relocation, compute the symbol's address.\n    if (__builtin_expect(rel_symbol != 0, 0)) {\n      resolved = ResolveSymbol(rel_type,\n                               rel_symbol,\n                               symbols,\n                               resolver,\n                               reloc,\n                               &sym_addr,\n                               error);\n    }\n\n    if (!ApplyRelReloc(rel, sym_addr, resolved, error))\n      return false;\n  }\n\n  return true;\n}\n\nbool ElfRelocations::ApplyRelaRelocs(const ELF::Rela* rela,\n                                     size_t rela_count,\n                                     const ElfSymbols* symbols,\n                                     SymbolResolver* resolver,\n                                     Error* error) {\n  RLOG(\"%s: rela=%p rela_count=%d\\n\", __FUNCTION__, rela, rela_count);\n\n  if (!rela)\n    return true;\n\n  for (size_t rel_n = 0; rel_n < rela_count; rela++, rel_n++) {\n    const ELF::Word rel_type = ELF_R_TYPE(rela->r_info);\n    const ELF::Word rel_symbol = ELF_R_SYM(rela->r_info);\n\n    ELF::Addr sym_addr = 0;\n    ELF::Addr reloc = static_cast<ELF::Addr>(rela->r_offset + load_bias_);\n    RLOG(\"  %d/%d reloc=%p offset=%p type=%d symbol=%d\\n\",\n         rel_n + 1,\n         rela_count,\n         reloc,\n         rela->r_offset,\n         rel_type,\n         rel_symbol);\n\n    if (rel_type == 0)\n      continue;\n\n    bool resolved = false;\n\n    // If this is a symbolic relocation, compute the symbol's address.\n    if (__builtin_expect(rel_symbol != 0, 0)) {\n      resolved = ResolveSymbol(rel_type,\n                               rel_symbol,\n                               symbols,\n                               resolver,\n                               reloc,\n                               &sym_addr,\n                               error);\n    }\n\n    if (!ApplyRelaReloc(rela, sym_addr, resolved, error))\n      return false;\n  }\n\n  return true;\n}\n\n#ifdef __mips__\nbool ElfRelocations::RelocateMipsGot(const ElfSymbols* symbols,\n                                     SymbolResolver* resolver,\n                                     Error* error) {\n  if (!plt_got_)\n    return true;\n\n  // Handle the local GOT entries.\n  // This mimics what the system linker does.\n  // Note from the system linker:\n  // got[0]: lazy resolver function address.\n  // got[1]: may be used for a GNU extension.\n  // Set it to a recognizable address in case someone calls it\n  // (should be _rtld_bind_start).\n  ELF::Addr* got = plt_got_;\n  got[0] = 0xdeadbeef;\n  if (got[1] & 0x80000000)\n    got[1] = 0xdeadbeef;\n\n  for (ELF::Addr n = 2; n < mips_local_got_count_; ++n)\n    got[n] += load_bias_;\n\n  // Handle the global GOT entries.\n  got += mips_local_got_count_;\n  for (size_t idx = mips_gotsym_; idx < mips_symtab_count_; idx++, got++) {\n    const char* sym_name = symbols->LookupNameById(idx);\n    void* sym_addr = resolver->Lookup(sym_name);\n    if (sym_addr) {\n      // Found symbol, update GOT entry.\n      *got = reinterpret_cast<ELF::Addr>(sym_addr);\n      continue;\n    }\n\n    if (symbols->IsWeakById(idx)) {\n      // Undefined symbols are only ok if this is a weak reference.\n      // Update GOT entry to 0 though.\n      *got = 0;\n      continue;\n    }\n\n    error->Format(\"Cannot locate symbol %s\", sym_name);\n    return false;\n  }\n\n  return true;\n}\n#endif  // __mips__\n\nvoid ElfRelocations::AdjustRelocation(ELF::Word rel_type,\n                                      ELF::Addr src_reloc,\n                                      size_t dst_delta,\n                                      size_t map_delta) {\n  ELF::Addr* dst_ptr = reinterpret_cast<ELF::Addr*>(src_reloc + dst_delta);\n\n  switch (rel_type) {\n#ifdef __arm__\n    case R_ARM_RELATIVE:\n      *dst_ptr += map_delta;\n      break;\n#endif  // __arm__\n\n#ifdef __aarch64__\n    case R_AARCH64_RELATIVE:\n      *dst_ptr += map_delta;\n      break;\n#endif  // __aarch64__\n\n#ifdef __i386__\n    case R_386_RELATIVE:\n      *dst_ptr += map_delta;\n      break;\n#endif\n\n#ifdef __mips__\n    case R_MIPS_REL32:\n      *dst_ptr += map_delta;\n      break;\n#endif\n    default:\n      ;\n  }\n}\n\nvoid ElfRelocations::RelocateRela(size_t src_addr,\n                                  size_t dst_addr,\n                                  size_t map_addr,\n                                  size_t size) {\n  // Add this value to each source address to get the corresponding\n  // destination address.\n  const size_t dst_delta = dst_addr - src_addr;\n  const size_t map_delta = map_addr - src_addr;\n\n  // Ignore PLT relocations, which all target symbols (ignored here).\n  const ELF::Rela* rel = reinterpret_cast<ELF::Rela*>(relocations_);\n  const size_t relocations_count = relocations_size_ / sizeof(ELF::Rela);\n  const ELF::Rela* rel_limit = rel + relocations_count;\n\n  for (; rel < rel_limit; ++rel) {\n    const ELF::Word rel_type = ELF_R_TYPE(rel->r_info);\n    const ELF::Word rel_symbol = ELF_R_SYM(rel->r_info);\n    ELF::Addr src_reloc = static_cast<ELF::Addr>(rel->r_offset + load_bias_);\n\n    if (rel_type == 0 || rel_symbol != 0) {\n      // Ignore empty and symbolic relocations\n      continue;\n    }\n\n    if (src_reloc < src_addr || src_reloc >= src_addr + size) {\n      // Ignore entries that don't relocate addresses inside the source section.\n      continue;\n    }\n\n    AdjustRelocation(rel_type, src_reloc, dst_delta, map_delta);\n  }\n}\n\nvoid ElfRelocations::RelocateRel(size_t src_addr,\n                                 size_t dst_addr,\n                                 size_t map_addr,\n                                 size_t size) {\n  // Add this value to each source address to get the corresponding\n  // destination address.\n  const size_t dst_delta = dst_addr - src_addr;\n  const size_t map_delta = map_addr - src_addr;\n\n  // Ignore PLT relocations, which all target symbols (ignored here).\n  const ELF::Rel* rel = reinterpret_cast<ELF::Rel*>(relocations_);\n  const size_t relocations_count = relocations_size_ / sizeof(ELF::Rel);\n  const ELF::Rel* rel_limit = rel + relocations_count;\n\n  for (; rel < rel_limit; ++rel) {\n    const ELF::Word rel_type = ELF_R_TYPE(rel->r_info);\n    const ELF::Word rel_symbol = ELF_R_SYM(rel->r_info);\n    ELF::Addr src_reloc = static_cast<ELF::Addr>(rel->r_offset + load_bias_);\n\n    if (rel_type == 0 || rel_symbol != 0) {\n      // Ignore empty and symbolic relocations\n      continue;\n    }\n\n    if (src_reloc < src_addr || src_reloc >= src_addr + size) {\n      // Ignore entries that don't relocate addresses inside the source section.\n      continue;\n    }\n\n    AdjustRelocation(rel_type, src_reloc, dst_delta, map_delta);\n  }\n}\n\nvoid ElfRelocations::CopyAndRelocate(size_t src_addr,\n                                     size_t dst_addr,\n                                     size_t map_addr,\n                                     size_t size) {\n  // First, a straight copy.\n  ::memcpy(reinterpret_cast<void*>(dst_addr),\n           reinterpret_cast<void*>(src_addr),\n           size);\n\n  // Relocate relocations.\n  if (relocations_type_ == DT_REL)\n    RelocateRel(src_addr, dst_addr, map_addr, size);\n\n  else if (relocations_type_ == DT_RELA)\n    RelocateRela(src_addr, dst_addr, map_addr, size);\n\n#ifdef __mips__\n  // Add this value to each source address to get the corresponding\n  // destination address.\n  const size_t dst_delta = dst_addr - src_addr;\n  const size_t map_delta = map_addr - src_addr;\n\n  // Only relocate local GOT entries.\n  ELF::Addr* got = plt_got_;\n  if (got) {\n    for (ELF::Addr n = 2; n < mips_local_got_count_; ++n) {\n      size_t got_addr = reinterpret_cast<size_t>(&got[n]);\n      if (got_addr < src_addr || got_addr >= src_addr + size)\n        continue;\n      ELF::Addr* dst_ptr = reinterpret_cast<ELF::Addr*>(got_addr + dst_delta);\n      *dst_ptr += map_delta;\n    }\n  }\n#endif\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_relocations.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ELF_RELOCATIONS_H\n#define CRAZY_LINKER_ELF_RELOCATIONS_H\n\n#include <string.h>\n\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nclass ElfSymbols;\nclass ElfView;\nclass Error;\n\n// An ElfRelocations instance holds information about relocations in a mapped\n// ELF binary.\nclass ElfRelocations {\n public:\n  ElfRelocations() { ::memset(this, 0, sizeof(*this)); }\n  ~ElfRelocations() {}\n\n  bool Init(const ElfView* view, Error* error);\n\n  // Abstract class used to resolve symbol names into addresses.\n  // Callers of ::ApplyAll() should pass the address of a derived class\n  // that properly implements the Lookup() method.\n  class SymbolResolver {\n   public:\n    SymbolResolver() {}\n    ~SymbolResolver() {}\n    virtual void* Lookup(const char* symbol_name) = 0;\n  };\n\n  // Apply all relocations to the target mapped ELF binary. Must be called\n  // after Init().\n  // |symbols| maps to the symbol entries for the target library only.\n  // |resolver| can resolve symbols out of the current library.\n  // On error, return false and set |error| message.\n  bool ApplyAll(const ElfSymbols* symbols,\n                SymbolResolver* resolver,\n                Error* error);\n\n  // This function is used to adjust relocated addresses in a copy of an\n  // existing section of an ELF binary. I.e. |src_addr|...|src_addr + size|\n  // must be inside the mapped ELF binary, this function will first copy its\n  // content into |dst_addr|...|dst_addr + size|, then adjust all relocated\n  // addresses inside the destination section as if it was loaded/mapped\n  // at |map_addr|...|map_addr + size|. Only relative relocations are processed,\n  // symbolic ones are ignored.\n  void CopyAndRelocate(size_t src_addr,\n                       size_t dst_addr,\n                       size_t map_addr,\n                       size_t size);\n\n private:\n  bool ResolveSymbol(unsigned rel_type,\n                     unsigned rel_symbol,\n                     const ElfSymbols* symbols,\n                     SymbolResolver* resolver,\n                     ELF::Addr reloc,\n                     ELF::Addr* sym_addr,\n                     Error* error);\n  bool ApplyRelaReloc(const ELF::Rela* rela,\n                      ELF::Addr sym_addr,\n                      bool resolved,\n                      Error* error);\n  bool ApplyRelReloc(const ELF::Rel* rel,\n                     ELF::Addr sym_addr,\n                     bool resolved,\n                     Error* error);\n  bool ApplyRelaRelocs(const ELF::Rela* relocs,\n                       size_t relocs_count,\n                       const ElfSymbols* symbols,\n                       SymbolResolver* resolver,\n                       Error* error);\n  bool ApplyRelRelocs(const ELF::Rel* relocs,\n                      size_t relocs_count,\n                      const ElfSymbols* symbols,\n                      SymbolResolver* resolver,\n                      Error* error);\n  void AdjustRelocation(ELF::Word rel_type,\n                        ELF::Addr src_reloc,\n                        size_t dst_delta,\n                        size_t map_delta);\n  void RelocateRela(size_t src_addr,\n                    size_t dst_addr,\n                    size_t map_addr,\n                    size_t size);\n  void RelocateRel(size_t src_addr,\n                   size_t dst_addr,\n                   size_t map_addr,\n                   size_t size);\n\n#if defined(__mips__)\n  bool RelocateMipsGot(const ElfSymbols* symbols,\n                       SymbolResolver* resolver,\n                       Error* error);\n#endif\n\n  const ELF::Phdr* phdr_;\n  size_t phdr_count_;\n  size_t load_bias_;\n\n  ELF::Addr relocations_type_;\n  ELF::Addr plt_relocations_;\n  size_t plt_relocations_size_;\n  ELF::Addr* plt_got_;\n\n  ELF::Addr relocations_;\n  size_t relocations_size_;\n\n#if defined(__mips__)\n  // MIPS-specific relocation fields.\n  ELF::Word mips_symtab_count_;\n  ELF::Word mips_local_got_count_;\n  ELF::Word mips_gotsym_;\n#endif\n\n  bool has_text_relocations_;\n  bool has_symbolic_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ELF_RELOCATIONS_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_relro.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_elf_relro.h\"\n\n#include <errno.h>\n#include <limits.h>\n#include <stdlib.h>\n\n#include \"crazy_linker_elf_relocations.h\"\n#include \"crazy_linker_elf_view.h\"\n#include \"crazy_linker_memory_mapping.h\"\n#include \"crazy_linker_util.h\"\n\nnamespace crazy {\n\nnamespace {\n\ninline bool PageEquals(const char* p1, const char* p2) {\n  return ::memcmp(p1, p2, PAGE_SIZE) == 0;\n}\n\n// Swap pages between |addr| and |addr + size| with the bytes\n// from the ashmem region identified by |fd|, starting from\n// a given |offset|. On failure return false and set |error| message.\nbool SwapPagesFromFd(void* addr,\n                     size_t size,\n                     int fd,\n                     size_t offset,\n                     Error* error) {\n  // Unmap current pages.\n  if (::munmap(addr, size) < 0) {\n    error->Format(\"%s: Could not unmap %p-%p: %s\",\n                  __FUNCTION__,\n                  addr,\n                  (char*)addr + size,\n                  strerror(errno));\n    return false;\n  }\n\n  // Remap the fd pages at the same location now.\n  void* new_map = ::mmap(addr,\n                         size,\n                         PROT_READ,\n                         MAP_FIXED | MAP_SHARED,\n                         fd,\n                         static_cast<off_t>(offset));\n  if (new_map == MAP_FAILED) {\n    char* p = reinterpret_cast<char*>(addr);\n    error->Format(\"%s: Could not map %p-%p: %s\",\n                  __FUNCTION__,\n                  p,\n                  p + size,\n                  strerror(errno));\n    return false;\n  }\n\n// TODO(digit): Is this necessary?\n#ifdef __arm__\n  __clear_cache(addr, (char*)addr + size);\n#endif\n\n  // Done.\n  return true;\n}\n\n}  // namespace\n\nbool SharedRelro::Allocate(size_t relro_size,\n                           const char* library_name,\n                           Error* error) {\n  // Allocate a new ashmem region.\n  String name(\"RELRO:\");\n  name += library_name;\n  if (!ashmem_.Allocate(relro_size, name.c_str())) {\n    error->Format(\"Could not allocate RELRO ashmem region for %s: %s\",\n                  library_name,\n                  strerror(errno));\n    return false;\n  }\n\n  start_ = 0;\n  size_ = relro_size;\n  return true;\n}\n\nbool SharedRelro::CopyFrom(size_t relro_start,\n                           size_t relro_size,\n                           Error* error) {\n  // Map it in the process.\n  ScopedMemoryMapping map;\n  if (!map.Allocate(NULL, relro_size, MemoryMapping::CAN_WRITE, ashmem_.fd())) {\n    error->Format(\"Could not allocate RELRO mapping: %s\", strerror(errno));\n    return false;\n  }\n\n  // Copy process' RELRO into it.\n  ::memcpy(map.Get(), reinterpret_cast<void*>(relro_start), relro_size);\n\n  // Unmap it.\n  map.Deallocate();\n\n  // Everything's good.\n  start_ = relro_start;\n  size_ = relro_size;\n  return true;\n}\n\nbool SharedRelro::CopyFromRelocated(const ElfView* view,\n                                    size_t load_address,\n                                    size_t relro_start,\n                                    size_t relro_size,\n                                    Error* error) {\n  // Offset of RELRO section in current library.\n  size_t relro_offset = relro_start - view->load_address();\n\n  ElfRelocations relocations;\n  if (!relocations.Init(view, error))\n    return false;\n\n  // Map the region in memory (any address).\n  ScopedMemoryMapping map;\n  if (!map.Allocate(\n           NULL, relro_size, MemoryMapping::CAN_READ_WRITE, ashmem_.fd())) {\n    error->Format(\"Could not allocate RELRO mapping for: %s\", strerror(errno));\n    return false;\n  }\n\n  // Copy and relocate.\n  relocations.CopyAndRelocate(relro_start,\n                              reinterpret_cast<size_t>(map.Get()),\n                              load_address + relro_offset,\n                              relro_size);\n  // Unmap it.\n  map.Deallocate();\n  start_ = load_address + relro_offset;\n  size_ = relro_size;\n  return true;\n}\n\nbool SharedRelro::ForceReadOnly(Error* error) {\n  // Ensure the ashmem region content isn't writable anymore.\n  if (!ashmem_.SetProtectionFlags(PROT_READ)) {\n    error->Format(\"Could not make RELRO ashmem region read-only: %s\",\n                  strerror(errno));\n    return false;\n  }\n  return true;\n}\n\nbool SharedRelro::InitFrom(size_t relro_start,\n                           size_t relro_size,\n                           int ashmem_fd,\n                           Error* error) {\n  // Create temporary mapping of the ashmem region.\n  ScopedMemoryMapping fd_map;\n\n  LOG(\"%s: Entering addr=%p size=%p fd=%d\\n\",\n      __FUNCTION__,\n      (void*)relro_start,\n      (void*)relro_size,\n      ashmem_fd);\n\n  // Sanity check: Ashmem file descriptor must be read-only.\n  if (!AshmemRegion::CheckFileDescriptorIsReadOnly(ashmem_fd)) {\n    error->Format(\"Ashmem file descriptor is not read-only: %s\\n\",\n                  strerror(errno));\n    return false;\n  }\n\n  if (!fd_map.Allocate(NULL, relro_size, MemoryMapping::CAN_READ, ashmem_fd)) {\n    error->Format(\"Cannot map RELRO ashmem region as read-only: %s\\n\",\n                  strerror(errno));\n    return false;\n  }\n\n  LOG(\"%s: mapping allocated at %p\\n\", __FUNCTION__, fd_map.Get());\n\n  char* cur_page = reinterpret_cast<char*>(relro_start);\n  char* fd_page = static_cast<char*>(fd_map.Get());\n  size_t p = 0;\n  size_t size = relro_size;\n  size_t similar_size = 0;\n\n  do {\n    // Skip over dissimilar pages.\n    while (p < size && !PageEquals(cur_page + p, fd_page + p)) {\n      p += PAGE_SIZE;\n    }\n\n    // Count similar pages.\n    size_t p2 = p;\n    while (p2 < size && PageEquals(cur_page + p2, fd_page + p2)) {\n      p2 += PAGE_SIZE;\n    }\n\n    if (p2 > p) {\n      // Swap pages between |pos| and |pos2|.\n      LOG(\"%s: Swap pages at %p-%p\\n\",\n          __FUNCTION__,\n          cur_page + p,\n          cur_page + p2);\n      if (!SwapPagesFromFd(cur_page + p, p2 - p, ashmem_fd, p, error))\n        return false;\n\n      similar_size += (p2 - p);\n    }\n\n    p = p2;\n  } while (p < size);\n\n  LOG(\"%s: Swapped %d pages over %d (%d %%, %d KB not shared)\\n\",\n      __FUNCTION__,\n      similar_size / PAGE_SIZE,\n      size / PAGE_SIZE,\n      similar_size * 100 / size,\n      (size - similar_size) / 4096);\n\n  if (similar_size == 0)\n    return false;\n\n  start_ = relro_start;\n  size_ = relro_size;\n  return true;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_relro.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ELF_RELRO_H\n#define CRAZY_LINKER_ELF_RELRO_H\n\n#include \"crazy_linker_ashmem.h\"\n#include \"crazy_linker_memory_mapping.h\"\n#include \"crazy_linker_system.h\"\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nclass ElfView;\n\n// A class used to model a shared RELRO section backed by an Ashmem region.\n// The region is always owned by the SharedRelro, unless DetachFd() is called.\n// The SharedRelro may or may not be mapped into the process.\nclass SharedRelro {\n public:\n  // Create a new SharedRelro. Note that the object becomes the owner of\n  // |ashmem_fd|, unless DetachFd() is called after this.\n  SharedRelro() : start_(0), size_(0), ashmem_() {}\n\n  ~SharedRelro() {}\n\n  size_t start() const { return start_; }\n  size_t end() const { return start_ + size_; }\n  size_t size() const { return size_; }\n  int fd() const { return ashmem_.fd(); }\n\n  // Return the ashmem region's file descriptor, and detach it from the object.\n  // After this call, fd() will always return -1.\n  int DetachFd() { return ashmem_.Release(); }\n\n  // Allocate a new ashmem region of |relro_size| bytes for |library_name|.\n  // This operation doesn't change the process' mappings. On error, return\n  // false and set |error| message.\n  bool Allocate(size_t relro_size, const char* library_name, Error* error);\n\n  // Copy the content of the current process' RELRO into the ashmem region.\n  // |relro_start| is the RELRO address (page-aligned).\n  // |relro_size| is the RELRO size in bytes (page-aligned), and must match\n  // the allocation size passed to Allocate().\n  // On failure, return false and set |error| message.\n  bool CopyFrom(size_t relro_start, size_t relro_size, Error* error);\n\n  // Copy the contents of the current process' RELRO into the ashmem region\n  // but adjust any relocation targets within it to correspond to a new\n  // |load_address|. |view| must point to a mapped ELF binary for the current\n  // library. |relro_start| corresponds to the address of the current\n  // process' RELRO, i.e. is not relocated.\n  bool CopyFromRelocated(const ElfView* view,\n                         size_t load_address,\n                         size_t relro_start,\n                         size_t relro_size,\n                         Error* error);\n\n  // Force the section to be read-only.\n  bool ForceReadOnly(Error* error);\n\n  // Map the ashmem region's pages into the current process, doing a comparison\n  // to avoid corrupting parts of the RELRO section that are different in this\n  // one (e.g. due to symbolic relocations to randomized system libraries).\n  // This operation is _not_ atomic, i.e. no other thread should try to execute\n  // code that reads from the RELRO region during this call.\n  // On failure, return false and set |error| message.\n  // This operation does not transfer ownership of |ashmem_fd| to the object.\n  bool InitFrom(size_t relro_start,\n                size_t relro_size,\n                int ashmem_fd,\n                Error* error);\n\n private:\n  size_t start_;\n  size_t size_;\n  AshmemRegion ashmem_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ELF_RELRO_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_symbols.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_elf_symbols.h\"\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_elf_view.h\"\n\nnamespace crazy {\n\nnamespace {\n\n// Compute the ELF hash of a given symbol.\nunsigned ElfHash(const char* name) {\n  const uint8_t* ptr = reinterpret_cast<const uint8_t*>(name);\n  unsigned h = 0;\n  while (*ptr) {\n    h = (h << 4) + *ptr++;\n    unsigned g = h & 0xf0000000;\n    h ^= g;\n    h ^= g >> 24;\n  }\n  return h;\n}\n\n}  // namespace\n\nbool ElfSymbols::Init(const ElfView* view) {\n  LOG(\"%s: Parsing dynamic table\\n\", __FUNCTION__);\n  ElfView::DynamicIterator dyn(view);\n  for (; dyn.HasNext(); dyn.GetNext()) {\n    uintptr_t dyn_addr = dyn.GetAddress(view->load_bias());\n    switch (dyn.GetTag()) {\n      case DT_HASH:\n        LOG(\"  DT_HASH addr=%p\\n\", dyn_addr);\n        {\n          ELF::Word* data = reinterpret_cast<ELF::Word*>(dyn_addr);\n          hash_bucket_size_ = data[0];\n          hash_chain_size_ = data[1];\n          hash_bucket_ = data + 2;\n          hash_chain_ = data + 2 + hash_bucket_size_;\n        }\n        break;\n      case DT_STRTAB:\n        LOG(\"  DT_STRTAB addr=%p\\n\", dyn_addr);\n        string_table_ = reinterpret_cast<const char*>(dyn_addr);\n        break;\n      case DT_SYMTAB:\n        LOG(\"  DT_SYMTAB addr=%p\\n\", dyn_addr);\n        symbol_table_ = reinterpret_cast<const ELF::Sym*>(dyn_addr);\n        break;\n      default:\n        ;\n    }\n  }\n  if (symbol_table_ == NULL || string_table_ == NULL || hash_bucket_ == NULL)\n    return false;\n\n  return true;\n}\n\nconst ELF::Sym* ElfSymbols::LookupByAddress(void* address,\n                                            size_t load_bias) const {\n  ELF::Addr elf_addr =\n      reinterpret_cast<ELF::Addr>(address) - static_cast<ELF::Addr>(load_bias);\n\n  for (size_t n = 0; n < hash_chain_size_; ++n) {\n    const ELF::Sym* sym = &symbol_table_[n];\n    if (sym->st_shndx != SHN_UNDEF && elf_addr >= sym->st_value &&\n        elf_addr < sym->st_value + sym->st_size) {\n      return sym;\n    }\n  }\n  return NULL;\n}\n\nbool ElfSymbols::LookupNearestByAddress(void* address,\n                                        size_t load_bias,\n                                        const char** sym_name,\n                                        void** sym_addr,\n                                        size_t* sym_size) const {\n  ELF::Addr elf_addr =\n      reinterpret_cast<ELF::Addr>(address) - static_cast<ELF::Addr>(load_bias);\n\n  const ELF::Sym* nearest_sym = NULL;\n  size_t nearest_diff = ~size_t(0);\n\n  for (size_t n = 0; n < hash_chain_size_; ++n) {\n    const ELF::Sym* sym = &symbol_table_[n];\n    if (sym->st_shndx == SHN_UNDEF)\n      continue;\n\n    if (elf_addr >= sym->st_value && elf_addr < sym->st_value + sym->st_size) {\n      // This is a perfect match.\n      nearest_sym = sym;\n      break;\n    }\n\n    // Otherwise, compute distance.\n    size_t diff;\n    if (elf_addr < sym->st_value)\n      diff = sym->st_value - elf_addr;\n    else\n      diff = elf_addr - sym->st_value - sym->st_size;\n\n    if (diff < nearest_diff) {\n      nearest_sym = sym;\n      nearest_diff = diff;\n    }\n  }\n\n  if (!nearest_sym)\n    return false;\n\n  *sym_name = string_table_ + nearest_sym->st_name;\n  *sym_addr = reinterpret_cast<void*>(nearest_sym->st_value + load_bias);\n  *sym_size = nearest_sym->st_size;\n  return true;\n}\n\nconst ELF::Sym* ElfSymbols::LookupByName(const char* symbol_name) const {\n  unsigned hash = ElfHash(symbol_name);\n\n  for (unsigned n = hash_bucket_[hash % hash_bucket_size_]; n != 0;\n       n = hash_chain_[n]) {\n    const ELF::Sym* symbol = &symbol_table_[n];\n    // Check that the symbol has the appropriate name.\n    if (strcmp(string_table_ + symbol->st_name, symbol_name))\n      continue;\n    // Ignore undefined symbols.\n    if (symbol->st_shndx == SHN_UNDEF)\n      continue;\n    // Ignore anything that isn't a global or weak definition.\n    switch (ELF_ST_BIND(symbol->st_info)) {\n      case STB_GLOBAL:\n      case STB_WEAK:\n        return symbol;\n      default:\n        ;\n    }\n  }\n  return NULL;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_symbols.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ELF_SYMBOLS_H\n#define CRAZY_LINKER_ELF_SYMBOLS_H\n\n#include <string.h>\n\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nclass ElfView;\n\n// An ElfSymbols instance holds information about symbols in a mapped ELF\n// binary.\nclass ElfSymbols {\n public:\n  ElfSymbols() { ::memset(this, 0, sizeof(*this)); }\n  ~ElfSymbols() {}\n\n  bool Init(const ElfView* view);\n\n  const ELF::Sym* LookupByName(const char* symbol_name) const;\n\n  const ELF::Sym* LookupById(size_t symbol_id) const {\n    return &symbol_table_[symbol_id];\n  }\n\n  const ELF::Sym* LookupByAddress(void* address, size_t load_bias) const;\n\n  // Returns true iff symbol with id |symbol_id| is weak.\n  bool IsWeakById(size_t symbol_id) const {\n    return ELF_ST_BIND(symbol_table_[symbol_id].st_info) == STB_WEAK;\n  }\n\n  const char* LookupNameById(size_t symbol_id) const {\n    const ELF::Sym* sym = LookupById(symbol_id);\n    if (!sym)\n      return NULL;\n    return string_table_ + sym->st_name;\n  }\n\n  void* LookupAddressByName(const char* symbol_name, size_t load_bias) const {\n    const ELF::Sym* sym = LookupByName(symbol_name);\n    if (!sym)\n      return NULL;\n    return reinterpret_cast<void*>(load_bias + sym->st_value);\n  }\n\n  bool LookupNearestByAddress(void* address,\n                              size_t load_bias,\n                              const char** sym_name,\n                              void** sym_addr,\n                              size_t* sym_size) const;\n\n  const char* GetStringById(size_t str_id) const {\n    return string_table_ + str_id;\n  }\n\n  // TODO(digit): Remove this once ElfRelocator is gone.\n  const ELF::Sym* symbol_table() const { return symbol_table_; }\n  const char* string_table() const { return string_table_; }\n\n private:\n  const ELF::Sym* symbol_table_;\n  const char* string_table_;\n  ELF::Word* hash_bucket_;\n  size_t hash_bucket_size_;\n  ELF::Word* hash_chain_;\n  size_t hash_chain_size_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ELF_SYMBOLS_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_view.cpp",
    "content": "#include \"crazy_linker_elf_view.h\"\n\n#include <errno.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_error.h\"\n#include \"linker_phdr.h\"\n\nnamespace crazy {\n\nbool ElfView::InitUnmapped(ELF::Addr load_address,\n                           const ELF::Phdr* phdr,\n                           size_t phdr_count,\n                           Error* error) {\n  // Compute load size and bias.\n  ELF::Addr min_vaddr = 0;\n  load_size_ = phdr_table_get_load_size(phdr, phdr_count, &min_vaddr, NULL);\n  if (load_size_ == 0) {\n    *error = \"Invalid program header table\";\n    return false;\n  }\n  load_address_ = (load_address ? load_address : min_vaddr);\n  load_bias_ = load_address - min_vaddr;\n\n  // Extract the dynamic table information.\n  phdr_table_get_dynamic_section(phdr,\n                                 phdr_count,\n                                 load_address,\n                                 &dynamic_,\n                                 &dynamic_count_,\n                                 &dynamic_flags_);\n  if (!dynamic_) {\n    *error = \"No PT_DYNAMIC section!\";\n    return false;\n  }\n\n  // Compute the program header table address relative to load_address.\n  // This is different from |phdr|..|phdr + phdr_count| which can actually\n  // be at a different location.\n  const ELF::Phdr* phdr0 = NULL;\n\n  // First, if there is a PT_PHDR, use it directly.\n  for (size_t n = 0; n < phdr_count; ++n) {\n    const ELF::Phdr* entry = &phdr[n];\n    if (entry->p_type == PT_PHDR) {\n      phdr0 = entry;\n      break;\n    }\n  }\n\n  // Otherwise, check the first loadable segment. If its file offset\n  // is 0, it starts with the ELF header, and we can trivially find the\n  // loaded program header from it.\n  if (!phdr0) {\n    for (size_t n = 0; n < phdr_count; ++n) {\n      const ELF::Phdr* entry = &phdr[n];\n      if (entry->p_type == PT_LOAD) {\n        if (entry->p_offset == 0) {\n          ELF::Addr elf_addr = load_bias_ + entry->p_vaddr;\n          const ELF::Ehdr* ehdr = reinterpret_cast<const ELF::Ehdr*>(elf_addr);\n          ELF::Addr offset = ehdr->e_phoff;\n          phdr0 = reinterpret_cast<const ELF::Phdr*>(elf_addr + offset);\n        }\n        break;\n      }\n    }\n  }\n\n  // Check that the program header table is indeed in a loadable segment,\n  // this helps catching malformed ELF binaries.\n  if (phdr0) {\n    ELF::Addr phdr0_addr = reinterpret_cast<ELF::Addr>(phdr0);\n    ELF::Addr phdr0_limit = phdr0_addr + sizeof(ELF::Phdr) * phdr_count;\n    bool found = false;\n    for (size_t n = 0; n < phdr_count; ++n) {\n      size_t seg_start = load_bias_ + phdr[n].p_vaddr;\n      size_t seg_end = seg_start + phdr[n].p_filesz;\n\n      if (seg_start <= phdr0_addr && phdr0_limit <= seg_end) {\n        found = true;\n        break;\n      }\n    }\n\n    if (!found)\n      phdr0 = NULL;\n  }\n\n  if (!phdr0) {\n    *error = \"Malformed ELF binary\";\n    return false;\n  }\n\n  phdr_ = phdr0;\n  phdr_count_ = phdr_count;\n\n  LOG(\"%s: New ELF view [load_address:%p, load_size:%p, load_bias:%p, phdr:%p, \"\n      \"phdr_count:%d, dynamic:%p, dynamic_count:%d, dynamic_flags:%d\\n\",\n      __FUNCTION__,\n      load_address_,\n      load_size_,\n      load_bias_,\n      phdr_,\n      phdr_count_,\n      dynamic_,\n      dynamic_count_,\n      dynamic_flags_);\n  return true;\n}\n\nbool ElfView::ProtectRelroSection(Error* error) {\n  LOG(\"%s: Enabling GNU RELRO protection\\n\", __FUNCTION__);\n\n  if (phdr_table_protect_gnu_relro(phdr_, phdr_count_, load_bias_) < 0) {\n    error->Format(\"Can't enable GNU RELRO protection: %s\", strerror(errno));\n    return false;\n  }\n  return true;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_elf_view.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ELF_VIEW_H\n#define CRAZY_LINKER_ELF_VIEW_H\n\n#include <string.h>\n\n#include \"crazy_linker_error.h\"\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nclass Error;\n\n// An ElfView holds information describing a given ELF binary file for\n// the crazy linker. This can be used to describe either system or crazy\n// libraries.\nclass ElfView {\n public:\n  ElfView() { ::memset(this, 0, sizeof(*this)); }\n\n  ~ElfView() {}\n\n  // Initialize this ElfView from its load address and a copy of its program\n  // header table.\n  // |load_address| is the desired library load address.\n  // |phdr| is a pointer to the library's program header. Note that this can\n  // point to any memory location that contains a valid copy of the header.\n  // I.e. the library does not have to be mapped in the process.\n  // |phdr_count| number of entries in program header table.\n  // On failure, return false and set |error| message.\n  // On success, return true, and sets all fields of the ElfView to the\n  // appropriate values. Note that functions phdr() or dynamic() will always\n  // return an address relative to |load_address|, even if the binary was\n  // not loaded yet in the process.\n  bool InitUnmapped(ELF::Addr load_address,\n                    const ELF::Phdr* phdr,\n                    size_t phdr_count,\n                    Error* error);\n\n  const ELF::Phdr* phdr() const { return phdr_; }\n  size_t phdr_count() const { return phdr_count_; }\n  const ELF::Dyn* dynamic() const { return dynamic_; }\n  size_t dynamic_count() const { return dynamic_count_; }\n  size_t dynamic_flags() const { return dynamic_flags_; }\n  size_t load_address() const { return load_address_; }\n  size_t load_size() const { return load_size_; }\n  size_t load_bias() const { return load_bias_; }\n\n  // Helper class to iterate over the dynamic table.\n  // Usage example:\n  //     DynamicIterator iter;\n  //     for ( ; iter.HasNext(); iter.SkipNext()) {\n  //        if (iter.GetTag() == DT_SOME_TAG) {\n  //           ... use iter.GetValue()\n  //           ... or iter.GetAddress(load_address)\n  //        }\n  //     }\n  class DynamicIterator {\n   public:\n    DynamicIterator(const ElfView* view) {\n      dyn_ = view->dynamic();\n      dyn_limit_ = dyn_ + view->dynamic_count();\n    }\n\n    ~DynamicIterator() {}\n\n    bool HasNext() const { return dyn_ < dyn_limit_; }\n    void GetNext() { dyn_ += 1; }\n\n    ELF::Addr GetTag() const { return dyn_->d_tag; }\n\n    ELF::Addr GetValue() const { return dyn_->d_un.d_val; }\n\n    ELF::Addr* GetValuePointer() const {\n      return const_cast<ELF::Addr*>(&dyn_->d_un.d_ptr);\n    }\n\n    uintptr_t GetOffset() const { return dyn_->d_un.d_ptr; }\n\n    uintptr_t GetAddress(size_t load_bias) const {\n      return load_bias + dyn_->d_un.d_ptr;\n    }\n\n   private:\n    const ELF::Dyn* dyn_;\n    const ELF::Dyn* dyn_limit_;\n  };\n\n  // Ensure the RELRO section is read-only after relocations. Assume the\n  // ELF binary is mapped.On failure, return false and set |error| message.\n  bool ProtectRelroSection(Error* error);\n\n protected:\n  const ELF::Phdr* phdr_;\n  size_t phdr_count_;\n  const ELF::Dyn* dynamic_;\n  size_t dynamic_count_;\n  ELF::Word dynamic_flags_;\n  ELF::Addr load_address_;\n  size_t load_size_;\n  size_t load_bias_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ELF_VIEW_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_error.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_error.h\"\n\n#include <stdarg.h>\n#include <string.h>\n#include <stdio.h>\n\n#include \"crazy_linker_debug.h\"\n\nnamespace crazy {\n\nvoid Error::Set(const char* message) {\n  if (!message)\n    message = \"\";\n  strlcpy(buff_, message, sizeof(buff_));\n\n  LOG(\"--- ERROR: %s\\n\", buff_);\n}\n\nvoid Error::Append(const char* message) {\n  if (!message)\n    return;\n  strlcat(buff_, message, sizeof(buff_));\n\n  LOG(\"--- ERROR: %s\\n\", buff_);\n}\n\nvoid Error::Format(const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n  vsnprintf(buff_, sizeof(buff_), fmt, args);\n  va_end(args);\n\n  LOG(\"--- ERROR: %s\\n\", buff_);\n}\n\nvoid Error::AppendFormat(const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n  size_t buff_len = strlen(buff_);\n  vsnprintf(buff_ + buff_len, sizeof(buff_) - buff_len, fmt, args);\n  va_end(args);\n\n  LOG(\"--- ERROR: %s\\n\", buff_);\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_error.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_ERROR_H\n#define CRAZY_LINKER_ERROR_H\n\nnamespace crazy {\n\n// A class used to hold a fixed-size buffer to hold error messages\n// as well as perform assignment and formatting.\n//\n// Usage examples:\n//     Error error;\n//     error = \"Unimplemented feature\";\n//     error->Set(\"Unimplemented feature\");\n//     error->Format(\"Feature %s is not implemented\", feature_name);\n//     error->Append(strerror(errno));\n//     error->AppendFormat(\"Error: %s\", strerror(errno));\n//\nclass Error {\n public:\n  Error() { buff_[0] = '\\0'; }\n\n  Error(const char* message) { Set(message); }\n\n  Error(const Error& other) { Set(other.buff_); }\n\n  const char* c_str() const { return buff_; }\n\n  void Set(const char* message);\n\n  void Format(const char* fmt, ...);\n\n  void Append(const char* message);\n\n  void AppendFormat(const char* fmt, ...);\n\n private:\n  char buff_[512];\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_ERROR_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_error_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_error.h\"\n\n#include <minitest/minitest.h>\n\nnamespace crazy {\n\nTEST(Error, ConstructEmpty) {\n  Error error;\n  EXPECT_STREQ(\"\", error.c_str());\n}\n\nTEST(Error, ConstructWithString) {\n  Error error(\"Foo Bar\");\n  EXPECT_STREQ(\"Foo Bar\", error.c_str());\n}\n\nTEST(Error, CopyConstructor) {\n  Error error(\"FooFoo\");\n  Error error2(error);\n\n  EXPECT_STREQ(\"FooFoo\", error2.c_str());\n}\n\nTEST(Error, Set) {\n  Error error;\n  error.Set(\"BarFoo\");\n  EXPECT_STREQ(\"BarFoo\", error.c_str());\n  error.Set(\"FooBar\");\n  EXPECT_STREQ(\"FooBar\", error.c_str());\n}\n\nTEST(Error, Append) {\n  Error error(\"Foo\");\n  error.Append(\"Bar\");\n  EXPECT_STREQ(\"FooBar\", error.c_str());\n}\n\nTEST(Error, Format) {\n  Error error;\n  error.Format(\"%s %s!\", \"Hi\", \"Cowboy\");\n  EXPECT_STREQ(\"Hi Cowboy!\", error.c_str());\n}\n\nTEST(Error, AppendFormat) {\n  Error error(\"Hi\");\n  error.AppendFormat(\" there %s!\", \"Cowboy\");\n  EXPECT_STREQ(\"Hi there Cowboy!\", error.c_str());\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_globals.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_globals.h\"\n\n#include <pthread.h>\n\n#include \"crazy_linker_system.h\"\n\nnamespace crazy {\n\nnamespace {\n\nGlobals* g_globals = NULL;\npthread_once_t g_globals_once = PTHREAD_ONCE_INIT;\n\nvoid CreateGlobalsInstance() { g_globals = new Globals(); }\n\n}  // namespace\n\nGlobals::Globals() : search_paths_(), rdebug_() {\n  pthread_mutex_init(&lock_, NULL);\n  search_paths_.ResetFromEnv(\"LD_LIBRARY_PATH\");\n}\n\nGlobals::~Globals() { pthread_mutex_destroy(&lock_); }\n\nGlobals* Globals::Get() {\n  pthread_once(&g_globals_once, CreateGlobalsInstance);\n  return g_globals;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_globals.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_GLOBALS_H\n#define CRAZY_LINKER_GLOBALS_H\n\n#include <pthread.h>\n\n#include \"crazy_linker_library_list.h\"\n#include \"crazy_linker_rdebug.h\"\n#include \"crazy_linker_search_path_list.h\"\n#include \"crazy_linker_util.h\"\n\n// All crazy linker globals are declared in this header.\n\nnamespace crazy {\n\nclass Globals {\n public:\n  Globals();\n  ~Globals();\n\n  void Lock() { pthread_mutex_lock(&lock_); }\n\n  void Unlock() { pthread_mutex_unlock(&lock_); }\n\n  static Globals* Get();\n\n  static LibraryList* GetLibraries() { return &Get()->libraries_; }\n\n  static SearchPathList* GetSearchPaths() { return &Get()->search_paths_; }\n\n  static RDebug* GetRDebug() { return &Get()->rdebug_; }\n\n private:\n  pthread_mutex_t lock_;\n  LibraryList libraries_;\n  SearchPathList search_paths_;\n  RDebug rdebug_;\n};\n\n// Helper class to access the globals with scoped locking.\nclass ScopedGlobalLock {\n public:\n  ScopedGlobalLock() { Globals::Get()->Lock(); }\n\n  ~ScopedGlobalLock() { Globals::Get()->Unlock(); }\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_GLOBALS_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_globals_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_globals.h\"\n\n#include <minitest/minitest.h>\n\n#include \"crazy_linker_system_mock.h\"\n\nnamespace crazy {\n\nTEST(Globals, Get) {\n  SystemMock sys;\n  ASSERT_TRUE(Globals::Get());\n  ASSERT_TRUE(Globals::GetLibraries());\n  ASSERT_TRUE(Globals::GetSearchPaths());\n  ASSERT_TRUE(Globals::GetRDebug());\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_library_list.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_library_list.h\"\n\n#include <dlfcn.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_library_view.h\"\n#include \"crazy_linker_globals.h\"\n#include \"crazy_linker_rdebug.h\"\n#include \"crazy_linker_shared_library.h\"\n#include \"crazy_linker_system.h\"\n\nnamespace crazy {\n\nnamespace {\n\n// A helper struct used when looking up symbols in libraries.\nstruct SymbolLookupState {\n  void* found_addr;\n  void* weak_addr;\n  int weak_count;\n\n  SymbolLookupState() : found_addr(NULL), weak_addr(NULL), weak_count(0) {}\n\n  // Check a symbol entry.\n  bool CheckSymbol(const char* symbol, SharedLibrary* lib) {\n    const ELF::Sym* entry = lib->LookupSymbolEntry(symbol);\n    if (!entry)\n      return false;\n\n    void* address = reinterpret_cast<void*>(lib->load_bias() + entry->st_value);\n\n    // If this is a strong symbol, record it and return true.\n    if (ELF_ST_BIND(entry->st_info) == STB_GLOBAL) {\n      found_addr = address;\n      return true;\n    }\n    // If this is a weak symbol, record the first one and\n    // increment the weak_count.\n    if (++weak_count == 1)\n      weak_addr = address;\n\n    return false;\n  }\n};\n\n}  // namespace\n\nLibraryList::LibraryList() : head_(0), count_(0), has_error_(false) {\n  // Nothing for now\n}\n\nLibraryList::~LibraryList() {\n  // Invalidate crazy library list.\n  head_ = NULL;\n\n  // Destroy all known libraries.\n  while (!known_libraries_.IsEmpty()) {\n    LibraryView* wrap = known_libraries_.PopLast();\n    delete wrap;\n  }\n}\n\nLibraryView* LibraryList::FindLibraryByName(const char* base_name) {\n  // Sanity check.\n  if (!base_name || strchr(base_name, '/'))\n    return NULL;\n\n  for (size_t n = 0; n < known_libraries_.GetCount(); ++n) {\n    LibraryView* wrap = known_libraries_[n];\n    if (!strcmp(base_name, wrap->GetName()))\n      return wrap;\n  }\n  return NULL;\n}\n\nvoid* LibraryList::FindSymbolFrom(const char* symbol_name, LibraryView* from) {\n  SymbolLookupState lookup_state;\n\n  if (!from)\n    return NULL;\n\n  // Use a work-queue and a set to ensure to perform a breadth-first\n  // search.\n  Vector<LibraryView*> work_queue;\n  Set<LibraryView*> visited_set;\n\n  work_queue.PushBack(from);\n\n  while (!work_queue.IsEmpty()) {\n    LibraryView* lib = work_queue.PopFirst();\n    if (lib->IsCrazy()) {\n      if (lookup_state.CheckSymbol(symbol_name, lib->GetCrazy()))\n        return lookup_state.found_addr;\n    } else if (lib->IsSystem()) {\n      // TODO(digit): Support weak symbols in system libraries.\n      // With the current code, all symbols in system libraries\n      // are assumed to be non-weak.\n      void* addr = lib->LookupSymbol(symbol_name);\n      if (addr)\n        return addr;\n    }\n\n    // If this is a crazy library, add non-visited dependencies\n    // to the work queue.\n    if (lib->IsCrazy()) {\n      SharedLibrary::DependencyIterator iter(lib->GetCrazy());\n      while (iter.GetNext()) {\n        LibraryView* dependency = FindKnownLibrary(iter.GetName());\n        if (dependency && !visited_set.Has(dependency)) {\n          work_queue.PushBack(dependency);\n          visited_set.Add(dependency);\n        }\n      }\n    }\n  }\n\n  if (lookup_state.weak_count >= 1) {\n    // There was at least a single weak symbol definition, so use\n    // the first one found in breadth-first search order.\n    return lookup_state.weak_addr;\n  }\n\n  // There was no symbol definition.\n  return NULL;\n}\n\nLibraryView* LibraryList::FindLibraryForAddress(void* address) {\n  // Linearly scan all libraries, looking for one that contains\n  // a given address. NOTE: This doesn't check that this falls\n  // inside one of the mapped library segments.\n  for (size_t n = 0; n < known_libraries_.GetCount(); ++n) {\n    LibraryView* wrap = known_libraries_[n];\n    // TODO(digit): Search addresses inside system libraries.\n    if (wrap->IsCrazy()) {\n      SharedLibrary* lib = wrap->GetCrazy();\n      if (lib->ContainsAddress(address))\n        return wrap;\n    }\n  }\n  return NULL;\n}\n\n#ifdef __arm__\n_Unwind_Ptr LibraryList::FindArmExIdx(void* pc, int* count) {\n  for (SharedLibrary* lib = head_; lib; lib = lib->list_next_) {\n    if (lib->ContainsAddress(pc)) {\n      *count = static_cast<int>(lib->arm_exidx_count_);\n      return reinterpret_cast<_Unwind_Ptr>(lib->arm_exidx_);\n    }\n  }\n  *count = 0;\n  return NULL;\n}\n#else  // !__arm__\nint LibraryList::IteratePhdr(PhdrIterationCallback callback, void* data) {\n  int result = 0;\n  for (SharedLibrary* lib = head_; lib; lib = lib->list_next_) {\n    dl_phdr_info info;\n    info.dlpi_addr = lib->link_map_.l_addr;\n    info.dlpi_name = lib->link_map_.l_name;\n    info.dlpi_phdr = lib->phdr();\n    info.dlpi_phnum = lib->phdr_count();\n    result = callback(&info, sizeof(info), data);\n    if (result)\n      break;\n  }\n  return result;\n}\n#endif  // !__arm__\n\nvoid LibraryList::UnloadLibrary(LibraryView* wrap) {\n  // Sanity check.\n  LOG(\"%s: for %s (ref_count=%d)\\n\",\n      __FUNCTION__,\n      wrap->GetName(),\n      wrap->ref_count());\n\n  if (!wrap->IsSystem() && !wrap->IsCrazy())\n    return;\n\n  if (!wrap->SafeDecrementRef())\n    return;\n\n  // If this is a crazy library, perform manual cleanup first.\n  if (wrap->IsCrazy()) {\n    SharedLibrary* lib = wrap->GetCrazy();\n\n    // Remove from internal list of crazy libraries.\n    if (lib->list_next_)\n      lib->list_next_->list_prev_ = lib->list_prev_;\n    if (lib->list_prev_)\n      lib->list_prev_->list_next_ = lib->list_next_;\n    if (lib == head_)\n      head_ = lib->list_next_;\n\n    // Call JNI_OnUnload, if necessary, then the destructors.\n    lib->CallJniOnUnload();\n    lib->CallDestructors();\n\n    // Unload the dependencies recursively.\n    SharedLibrary::DependencyIterator iter(lib);\n    while (iter.GetNext()) {\n      LibraryView* dependency = FindKnownLibrary(iter.GetName());\n      if (dependency)\n        UnloadLibrary(dependency);\n    }\n\n    // Tell GDB of this removal.\n    Globals::GetRDebug()->DelEntry(&lib->link_map_);\n  }\n\n  known_libraries_.Remove(wrap);\n\n  // Delete the wrapper, which will delete the crazy library, or\n  // dlclose() the system one.\n  delete wrap;\n}\n\nLibraryView* LibraryList::LoadLibrary(const char* lib_name,\n                                      int dlopen_mode,\n                                      uintptr_t load_address,\n                                      off_t file_offset,\n                                      SearchPathList* search_path_list,\n                                      Error* error) {\n\n  const char* base_name = GetBaseNamePtr(lib_name);\n\n  LOG(\"%s: lib_name='%s'\\n\", __FUNCTION__, lib_name);\n\n  // First check whether a library with the same base name was\n  // already loaded.\n  LibraryView* wrap = FindKnownLibrary(lib_name);\n  if (wrap) {\n    if (load_address) {\n      // Check that this is a crazy library and that is was loaded at\n      // the correct address.\n      if (!wrap->IsCrazy()) {\n        error->Format(\"System library can't be loaded at fixed address %08x\",\n                      load_address);\n        return NULL;\n      }\n      uintptr_t actual_address = wrap->GetCrazy()->load_address();\n      if (actual_address != load_address) {\n        error->Format(\"Library already loaded at @%08x, can't load it at @%08x\",\n                      actual_address,\n                      load_address);\n        return NULL;\n      }\n    }\n    wrap->AddRef();\n    return wrap;\n  }\n\n  if (IsSystemLibrary(lib_name)) {\n    // This is a system library, probably because we're loading the\n    // library as a dependency.\n    LOG(\"%s: Loading system library '%s'\\n\", __FUNCTION__, lib_name);\n    ::dlerror();\n    void* system_lib = dlopen(lib_name, dlopen_mode);\n    if (!system_lib) {\n      error->Format(\"Can't load system library %s: %s\", lib_name, ::dlerror());\n      return NULL;\n    }\n\n    LibraryView* wrap = new LibraryView();\n    wrap->SetSystem(system_lib, lib_name);\n    known_libraries_.PushBack(wrap);\n\n    LOG(\"%s: System library %s loaded at %p\\n\", __FUNCTION__, lib_name, wrap);\n    LOG(\"  name=%s\\n\", wrap->GetName());\n    return wrap;\n  }\n\n  ScopedPtr<SharedLibrary> lib(new SharedLibrary());\n\n  // Find the full library path.\n  String full_path;\n\n  if (!strchr(lib_name, '/')) {\n    LOG(\"%s: Looking through the search path list\\n\", __FUNCTION__);\n    const char* path = search_path_list->FindFile(lib_name);\n    if (!path) {\n      error->Format(\"Can't find library file %s\", lib_name);\n      return NULL;\n    }\n    full_path = path;\n  } else {\n    if (lib_name[0] != '/') {\n      // Need to transform this into a full path.\n      full_path = GetCurrentDirectory();\n      if (full_path.size() && full_path[full_path.size() - 1] != '/')\n        full_path += '/';\n      full_path += lib_name;\n    } else {\n      // Absolute path. Easy.\n      full_path = lib_name;\n    }\n    LOG(\"%s: Full library path: %s\\n\", __FUNCTION__, full_path.c_str());\n    if (!PathIsFile(full_path.c_str())) {\n      error->Format(\"Library file doesn't exist: %s\", full_path.c_str());\n      return NULL;\n    }\n  }\n\n  // Load the library\n  if (!lib->Load(full_path.c_str(), load_address, file_offset, error))\n    return NULL;\n\n  // Load all dependendent libraries.\n  LOG(\"%s: Loading dependencies of %s\\n\", __FUNCTION__, base_name);\n  SharedLibrary::DependencyIterator iter(lib.Get());\n  Vector<LibraryView*> dependencies;\n  while (iter.GetNext()) {\n    Error dep_error;\n    LibraryView* dependency = LoadLibrary(iter.GetName(),\n                                          dlopen_mode,\n                                          0U /* load address */,\n                                          0U /* file offset */,\n                                          search_path_list,\n                                          &dep_error);\n    if (!dependency) {\n      error->Format(\"When loading %s: %s\", base_name, dep_error.c_str());\n      return NULL;\n    }\n    dependencies.PushBack(dependency);\n  }\n  if (CRAZY_DEBUG) {\n    LOG(\"%s: Dependencies loaded for %s\\n\", __FUNCTION__, base_name);\n    for (size_t n = 0; n < dependencies.GetCount(); ++n)\n      LOG(\"  ... %p %s\\n\", dependencies[n], dependencies[n]->GetName());\n    LOG(\"    dependencies @%p\\n\", &dependencies);\n  }\n\n  // Relocate the library.\n  LOG(\"%s: Relocating %s\\n\", __FUNCTION__, base_name);\n  if (!lib->Relocate(this, &dependencies, error))\n    return NULL;\n\n  // Notify GDB of load.\n  lib->link_map_.l_addr = lib->load_address();\n  lib->link_map_.l_name = const_cast<char*>(lib->base_name_);\n  lib->link_map_.l_ld = reinterpret_cast<uintptr_t>(lib->view_.dynamic());\n  Globals::GetRDebug()->AddEntry(&lib->link_map_);\n\n  // The library was properly loaded, add it to the list of crazy\n  // libraries. IMPORTANT: Do this _before_ calling the constructors\n  // because these could call dlopen().\n  lib->list_next_ = head_;\n  lib->list_prev_ = NULL;\n  if (head_)\n    head_->list_prev_ = lib.Get();\n  head_ = lib.Get();\n\n  // Then create a new LibraryView for it.\n  wrap = new LibraryView();\n  wrap->SetCrazy(lib.Get(), lib_name);\n  known_libraries_.PushBack(wrap);\n\n  LOG(\"%s: Running constructors for %s\\n\", __FUNCTION__, base_name);\n\n  // Now run the constructors.\n  lib->CallConstructors();\n\n  LOG(\"%s: Done loading %s\\n\", __FUNCTION__, base_name);\n  lib.Release();\n\n  return wrap;\n}\n\nvoid LibraryList::AddLibrary(LibraryView* wrap) {\n  known_libraries_.PushBack(wrap);\n}\n\nLibraryView* LibraryList::FindKnownLibrary(const char* name) {\n  const char* base_name = GetBaseNamePtr(name);\n  for (size_t n = 0; n < known_libraries_.GetCount(); ++n) {\n    LibraryView* wrap = known_libraries_[n];\n    if (!strcmp(base_name, wrap->GetName()))\n      return wrap;\n  }\n  return NULL;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_library_list.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_LIBRARY_LIST_H\n#define CRAZY_LINKER_LIBRARY_LIST_H\n\n#include <link.h>\n\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_search_path_list.h\"\n#include \"elf_traits.h\"\n\n// This header contains definitions related to the global list of\n// library views maintained by the crazy linker. Each library view\n// points to either a crazy library, or a system one.\n\nnamespace crazy {\n\nclass SharedLibrary;\nclass LibraryView;\n\n// The list of all shared libraries loaded by the crazy linker.\n// IMPORTANT: This class is not thread-safe!\nclass LibraryList {\n public:\n  LibraryList();\n  ~LibraryList();\n\n  // Find a library in the list by its base name.\n  // |base_name| must not contain a directory separator.\n  LibraryView* FindLibraryByName(const char* base_name);\n\n  // Lookup for a given |symbol_name|, starting from |from_lib|\n  // then through its dependencies in breadth-first search order.\n  // On failure, returns NULL.\n  void* FindSymbolFrom(const char* symbol_name, LibraryView* from_lib);\n\n  // Return the address of a visible given symbol. Used to implement\n  // the dlsym() wrapper. Returns NULL on failure.\n  void* FindAddressForSymbol(const char* symbol_name);\n\n  // Find a SharedLibrary that contains a given address, or NULL if none\n  // could be found. This simply scans all libraries.\n  LibraryView* FindLibraryForAddress(void* address);\n\n#ifdef __arm__\n  // Find the base address of the .ARM.exidx section corresponding\n  // to the address |pc|, as well as the number of 8-byte entries in\n  // the table into |*count|. Used to implement the wrapper for\n  // dl_unwind_find_exidx().\n  _Unwind_Ptr FindArmExIdx(void* pc, int* count);\n#else\n  typedef int (*PhdrIterationCallback)(dl_phdr_info* info,\n                                       size_t info_size,\n                                       void* data);\n\n  // Loop over all loaded libraries and call the |cb| callback\n  // on each iteration. If the function returns 0, stop immediately\n  // and return its value. Used to implement the wrapper for\n  // dl_iterate_phdr().\n  int IteratePhdr(PhdrIterationCallback callback, void* data);\n#endif\n\n  // Try to load a library, possibly at a fixed address.\n  // On failure, returns NULL and sets the |error| message.\n  LibraryView* LoadLibrary(const char* path,\n                           int dlopen_flags,\n                           uintptr_t load_address,\n                           off_t file_offset,\n                           SearchPathList* search_path_list,\n                           Error* error);\n\n  // Unload a given shared library. This really decrements the library's\n  // internal reference count. When it reaches zero, the library's\n  // destructors are run, its dependencies are unloaded, then the\n  // library is removed from memory.\n  void UnloadLibrary(LibraryView* lib);\n\n  // Used internally by the wrappers only.\n  void AddLibrary(LibraryView* lib);\n\n private:\n  LibraryList(const LibraryList&);\n  LibraryList& operator=(const LibraryList&);\n\n  void ClearError();\n\n  // The list of all known libraries.\n  Vector<LibraryView*> known_libraries_;\n\n  LibraryView* FindKnownLibrary(const char* name);\n\n  // The list of all libraries loaded by the crazy linker.\n  // This does _not_ include system libraries present in known_libraries_.\n  SharedLibrary* head_;\n\n  size_t count_;\n  bool has_error_;\n  char error_buffer_[512];\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_LIBRARY_LIST_H"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_library_view.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_library_view.h\"\n\n#include <dlfcn.h>\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_globals.h\"\n#include \"crazy_linker_shared_library.h\"\n\nnamespace crazy {\n\nLibraryView::~LibraryView() {\n  LOG(\"%s: Destroying %s\\n\", __FUNCTION__, name_.c_str());\n  if (type_ == TYPE_SYSTEM) {\n    ::dlclose(system_);\n    system_ = NULL;\n  }\n  if (type_ == TYPE_CRAZY) {\n    delete crazy_;\n    crazy_ = NULL;\n  }\n  type_ = TYPE_NONE;\n}\n\nvoid* LibraryView::LookupSymbol(const char* symbol_name) {\n  if (type_ == TYPE_SYSTEM)\n    return ::dlsym(system_, symbol_name);\n\n  if (type_ == TYPE_CRAZY) {\n    LibraryList* lib_list = Globals::GetLibraries();\n    return lib_list->FindSymbolFrom(symbol_name, this);\n  }\n\n  return NULL;\n}\n\nbool LibraryView::GetInfo(size_t* load_address,\n                          size_t* load_size,\n                          size_t* relro_start,\n                          size_t* relro_size,\n                          Error* error) {\n  if (type_ != TYPE_CRAZY) {\n    *error = \"No RELRO sharing with system libraries\";\n    return false;\n  }\n\n  crazy_->GetInfo(load_address, load_size, relro_start, relro_size);\n  return true;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_library_view.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_LIBRARY_VIEW_H\n#define CRAZY_LINKER_LIBRARY_VIEW_H\n\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_util.h\"\n\nnamespace crazy {\n\nclass SharedLibrary;\n\n// A LibraryView is a reference-counted handle to either a\n// crazy::SharedLibrary object or a library handle returned by the system's\n// dlopen() function.\n//\n// It has a name, which is always a base name, because only one\n// library with a given base name can be loaded in the system.\nclass LibraryView {\n public:\n  enum {\n    TYPE_NONE = 0xbaadbaad,\n    TYPE_SYSTEM = 0x2387cef,\n    TYPE_CRAZY = 0xcdef2387,\n  };\n\n  LibraryView()\n      : type_(TYPE_NONE), crazy_(NULL), system_(NULL), name_(), ref_count_(1) {}\n\n  ~LibraryView();\n\n  bool IsSystem() const { return type_ == TYPE_SYSTEM; }\n\n  bool IsCrazy() const { return type_ == TYPE_CRAZY; }\n\n  void SetSystem(void* system_lib, const char* name) {\n    type_ = TYPE_SYSTEM;\n    system_ = system_lib;\n    name_ = name;\n  }\n\n  void SetCrazy(SharedLibrary* crazy_lib, const char* name) {\n    type_ = TYPE_CRAZY;\n    crazy_ = crazy_lib;\n    name_ = name;\n  }\n\n  const char* GetName() { return name_.c_str(); }\n\n  SharedLibrary* GetCrazy() { return IsCrazy() ? crazy_ : NULL; }\n\n  void* GetSystem() { return IsSystem() ? system_ : NULL; }\n\n  void AddRef() { ref_count_++; }\n\n  // Decrement reference count. Returns true iff it reaches 0.\n  // This never destroys the object.\n  bool SafeDecrementRef() { return (--ref_count_ == 0); }\n\n  // Lookup a symbol from this library.\n  // If this is a crazy library, perform a breadth-first search,\n  // for system libraries, use dlsym() instead.\n  void* LookupSymbol(const char* symbol_name);\n\n  // Retrieve library information.\n  bool GetInfo(size_t* load_address,\n               size_t* load_size,\n               size_t* relro_start,\n               size_t* relro_size,\n               Error* error);\n\n  // Only used for debugging.\n  int ref_count() const { return ref_count_; }\n\n private:\n  uint32_t type_;\n  SharedLibrary* crazy_;\n  void* system_;\n  String name_;\n  int ref_count_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_LIBRARY_VIEW_H"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_line_reader.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_line_reader.h\"\n\n#include \"crazy_linker_debug.h\"\n\n// Set to 1 to enable debug logs here.\n#define DEBUG_LINE_READER 0\n\n#define LLOG(...) LOG_IF(DEBUG_LINE_READER, __VA_ARGS__)\n\nnamespace crazy {\n\nLineReader::LineReader() : fd_(), buff_(buff0_) {\n  Reset();\n  eof_ = true;\n}\n\nLineReader::LineReader(const char* path) : fd_(), buff_(buff0_) { Open(path); }\n\nLineReader::~LineReader() { Reset(); }\n\nvoid LineReader::Open(const char* path) {\n  Reset();\n  eof_ = !fd_.OpenReadOnly(path);\n}\n\nvoid LineReader::Reset() {\n  if (buff_ != buff0_)\n    ::free(buff_);\n\n  eof_ = false;\n  line_start_ = 0;\n  line_len_ = 0;\n  buff_size_ = 0;\n  buff_capacity_ = sizeof buff0_;\n  buff_ = buff0_;\n}\n\nbool LineReader::GetNextLine() {\n  // Eat previous line.\n  line_start_ += line_len_;\n  line_len_ = 0;\n\n  for (;;) {\n    LLOG(\"%s: LOOP line_start=%d buff_size=%d buff_capacity=%d\\n\",\n         __FUNCTION__,\n         line_start_,\n         buff_size_,\n         buff_capacity_);\n\n    // Find the end of the current line in the current buffer.\n    const char* line = buff_ + line_start_;\n    const char* line_end = reinterpret_cast<const char*>(\n        ::memchr(line, '\\n', buff_size_ - line_start_));\n    if (line_end != NULL) {\n      // Found one, return it directly.\n      line_len_ = static_cast<size_t>(line_end + 1 - line);\n      LLOG(\"%s: LINE line_start=%d line_len=%d '%.*s'\\n\",\n           __FUNCTION__,\n           line_start_,\n           line_len_,\n           line_len_,\n           buff_ + line_start_);\n      return true;\n    }\n\n    // Eat the start of the buffer\n    if (line_start_ > 0) {\n      ::memmove(buff_, buff_ + line_start_, buff_size_ - line_start_);\n      buff_size_ -= line_start_;\n      line_start_ = 0;\n      LLOG(\"%s: MOVE buff_size=%d\\n\", __FUNCTION__, buff_size_);\n    }\n\n    // Handle end of input now.\n    if (eof_) {\n      // If there is a last line that isn't terminated by a newline, and\n      // there is room for it in the buffer. Manually add a \\n and return\n      // the line.\n      if (buff_size_ > 0 && buff_size_ < buff_capacity_) {\n        buff_[buff_size_++] = '\\n';\n        line_len_ = buff_size_;\n        LLOG(\"%s: EOF_LINE buff_size=%d '%.*s'\\n\",\n             __FUNCTION__,\n             buff_size_,\n             buff_size_,\n             buff_);\n        return true;\n      }\n      // Otherwise, ignore the last line.\n      LLOG(\"%s: EOF\\n\", __FUNCTION__);\n      return false;\n    }\n\n    // Before reading more data, grow the buffer if needed.\n    if (buff_size_ == buff_capacity_) {\n      size_t new_capacity = buff_capacity_ * 2;\n      void* old_buff = (buff_ == buff0_) ? NULL : buff_;\n      buff_ = static_cast<char*>(::realloc(old_buff, new_capacity));\n      if (old_buff != buff_)\n        ::memcpy(buff_, buff0_, buff_capacity_);\n\n      buff_capacity_ = new_capacity;\n      LLOG(\"%s: GROW buff_size=%d buff_capacity=%d '%.*s'\\n\",\n           __FUNCTION__,\n           buff_size_,\n           buff_capacity_,\n           buff_size_,\n           buff_);\n    }\n\n    // Try to fill the rest of buffer after current content.\n    size_t avail = buff_capacity_ - buff_size_;\n    int ret = fd_.Read(buff_ + buff_size_, avail);\n    LLOG(\"%s: READ buff_size=%d buff_capacity=%d avail=%d ret=%d\\n\",\n         __FUNCTION__,\n         buff_size_,\n         buff_capacity_,\n         avail,\n         ret);\n    if (ret <= 0) {\n      eof_ = true;\n      ret = 0;\n    }\n    buff_size_ += static_cast<size_t>(ret);\n  }\n}\n\nconst char* LineReader::line() const { return buff_ + line_start_; }\n\nsize_t LineReader::length() const { return line_len_; }\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_line_reader.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_LINE_READER_H\n#define CRAZY_LINKER_LINE_READER_H\n\n#include <string.h>\n\n#include \"crazy_linker_system.h\"\n\nnamespace crazy {\n\n// A class used to read text files line-by-line.\n// Usage:\n//    LineReader reader(\"/path/to/file\");\n//    while (reader.GetNextLine()) {\n//       const char* line = reader.line();\n//       size_t line_len = reader.length();\n//       ... line is not necessarily zero-terminated.\n//    }\n\nclass LineReader {\n public:\n  LineReader();\n  explicit LineReader(const char* path);\n  ~LineReader();\n\n  // Open a new file for testing. Doesn't fail. If there was an error\n  // opening the file, GetNextLine() will simply return false.\n  void Open(const char* file_path);\n\n  // Grab next line. Returns true on success, or false otherwise.\n  bool GetNextLine();\n\n  // Return the start of the current line, this is _not_ zero-terminated\n  // and always contains a final newline (\\n).\n  // Only call this after a successful GetNextLine().\n  const char* line() const;\n\n  // Return the line length, this includes the final \\n.\n  // Only call this after a successful GetNextLine().\n  size_t length() const;\n\n private:\n  void Reset();\n\n  FileDescriptor fd_;\n  bool eof_;\n  size_t line_start_;\n  size_t line_len_;\n  size_t buff_size_;\n  size_t buff_capacity_;\n  char* buff_;\n  char buff0_[128];\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_LINE_READER_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_line_reader_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_line_reader.h\"\n\n#include <minitest/minitest.h>\n\n#include \"crazy_linker_system_mock.h\"\n\nnamespace crazy {\n\nstatic const char kFilePath[] = \"/tmp/foo.txt\";\n\nTEST(LineReader, EmptyConstructor) {\n  LineReader reader;\n  EXPECT_FALSE(reader.GetNextLine());\n}\n\nTEST(LineReader, EmptyFile) {\n  SystemMock sys;\n  sys.AddRegularFile(kFilePath, \"\", 0);\n\n  LineReader reader(kFilePath);\n  EXPECT_FALSE(reader.GetNextLine());\n}\n\nTEST(LineReader, SingleLineFile) {\n  SystemMock sys;\n  static const char kFile[] = \"foo bar\\n\";\n  static const size_t kFileSize = sizeof(kFile) - 1;\n  sys.AddRegularFile(kFilePath, kFile, kFileSize);\n\n  LineReader reader(kFilePath);\n  EXPECT_TRUE(reader.GetNextLine());\n  EXPECT_EQ(kFileSize, reader.length());\n  EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length());\n  EXPECT_FALSE(reader.GetNextLine());\n}\n\nTEST(LineReader, SingleLineFileUnterminated) {\n  SystemMock sys;\n  static const char kFile[] = \"foo bar\";\n  static const size_t kFileSize = sizeof(kFile) - 1;\n  sys.AddRegularFile(kFilePath, kFile, kFileSize);\n\n  LineReader reader(kFilePath);\n  EXPECT_TRUE(reader.GetNextLine());\n  // The LineReader will add a newline to the last line.\n  EXPECT_EQ(kFileSize + 1, reader.length());\n  EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length() - 1);\n  EXPECT_EQ('\\n', reader.line()[reader.length() - 1]);\n  EXPECT_FALSE(reader.GetNextLine());\n}\n\nTEST(LineReader, MultiLineFile) {\n  SystemMock sys;\n  static const char kFile[] =\n      \"This is a multi\\n\"\n      \"line text file that to test the crazy::LineReader class implementation\\n\"\n      \"And this is a very long text line to check that the class properly \"\n      \"handles them, through the help of dynamic allocation or something. \"\n      \"Yadda yadda yadda yadda. No newline\";\n  static const size_t kFileSize = sizeof(kFile) - 1;\n  sys.AddRegularFile(kFilePath, kFile, kFileSize);\n\n  LineReader reader(kFilePath);\n\n  EXPECT_TRUE(reader.GetNextLine());\n  EXPECT_MEMEQ(\"This is a multi\\n\", 16, reader.line(), reader.length());\n\n  EXPECT_TRUE(reader.GetNextLine());\n  EXPECT_MEMEQ(\n      \"line text file that to test the crazy::LineReader class \"\n      \"implementation\\n\",\n      88 - 17,\n      reader.line(),\n      reader.length());\n\n  EXPECT_TRUE(reader.GetNextLine());\n  EXPECT_MEMEQ(\n      \"And this is a very long text line to check that the class properly \"\n      \"handles them, through the help of dynamic allocation or something. \"\n      \"Yadda yadda yadda yadda. No newline\\n\",\n      187 - 17,\n      reader.line(),\n      reader.length());\n\n  EXPECT_FALSE(reader.GetNextLine());\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_memory_mapping.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_MEMORY_MAPPING_H\n#define CRAZY_LINKER_MEMORY_MAPPING_H\n\n#include <errno.h>\n#include <sys/mman.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_error.h\"\n\nnamespace crazy {\n\n// Helper class for a memory mapping. This is _not_ scoped.\nclass MemoryMapping {\n public:\n  enum Protection {\n    CAN_READ = PROT_READ,\n    CAN_WRITE = PROT_WRITE,\n    CAN_READ_WRITE = PROT_READ | PROT_WRITE\n  };\n  MemoryMapping() : map_(NULL), size_(0) {}\n  ~MemoryMapping() {}\n\n  // Return current mapping address.\n  void* Get() { return map_; }\n  size_t GetSize() const { return size_; }\n\n  // Allocate a new mapping.\n  // |address| is either NULL or a fixed memory address.\n  // |size| is the page-aligned size, must be > 0.\n  // |prot| are the desired protection bit flags.\n  // |fd| is -1 (for anonymous mappings), or a valid file descriptor.\n  // on failure, return false and sets errno.\n  bool Allocate(void* address, size_t size, Protection prot, int fd) {\n    int flags = (fd >= 0) ? MAP_SHARED : MAP_ANONYMOUS;\n    if (address)\n      flags |= MAP_FIXED;\n\n    size_ = size;\n    map_ = ::mmap(address, size_, static_cast<int>(prot), flags, fd, 0);\n    if (map_ == MAP_FAILED) {\n      map_ = NULL;\n      return false;\n    }\n\n    return true;\n  }\n\n  // Change the protection flags of the mapping.\n  // On failure, return false and sets errno.\n  bool SetProtection(Protection prot) {\n    if (!map_ || ::mprotect(map_, size_, static_cast<int>(prot)) < 0)\n      return false;\n    return true;\n  }\n\n  // Deallocate an existing mapping, if any.\n  void Deallocate() {\n    if (map_) {\n      ::munmap(map_, size_);\n      map_ = NULL;\n    }\n  }\n\n protected:\n  void* map_;\n  size_t size_;\n};\n\n// Helper class for a memory mapping that is automatically\n// unmapped on scope exit, unless its Release() method is called.\nclass ScopedMemoryMapping : public MemoryMapping {\n public:\n  void* Release() {\n    void* ret = map_;\n    map_ = NULL;\n    return ret;\n  }\n\n  ~ScopedMemoryMapping() { Deallocate(); }\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_MEMORY_MAPPING_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_proc_maps.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_proc_maps.h\"\n\n#include <inttypes.h>\n#include <limits.h>\n\n#include \"elf_traits.h\"\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_line_reader.h\"\n#include \"crazy_linker_util.h\"\n#include \"crazy_linker_system.h\"\n\nnamespace crazy {\n\nnamespace {\n\n// Decompose the components of a /proc/$PID/maps file into multiple\n// components. |line| should be the address of a zero-terminated line\n// of input. On success, returns true and sets |*entry|, false otherwise.\n//\n// IMPORTANT: On success, |entry->path| will point into the input line,\n// the caller will have to copy the string into a different location if\n// it needs to persist it.\nbool ParseProcMapsLine(const char* line,\n                       const char* line_end,\n                       ProcMaps::Entry* entry) {\n  // Example input lines on a 64-bit system, one cannot assume that\n  // everything is properly sized.\n  //\n  // 00400000-0040b000 r-xp 00000000 08:01 6570708\n  // /bin/cat\n  // 0060a000-0060b000 r--p 0000a000 08:01 6570708\n  // /bin/cat\n  // 0060b000-0060c000 rw-p 0000b000 08:01 6570708\n  // /bin/cat\n  // 01dd0000-01df1000 rw-p 00000000 00:00 0\n  // [heap]\n  // 7f4b8d4d7000-7f4b8e22a000 r--p 00000000 08:01 38666648\n  // /usr/lib/locale/locale-archive\n  // 7f4b8e22a000-7f4b8e3df000 r-xp 00000000 08:01 28836281\n  // /lib/x86_64-linux-gnu/libc-2.15.so\n  // 7f4b8e3df000-7f4b8e5de000 ---p 001b5000 08:01 28836281\n  // /lib/x86_64-linux-gnu/libc-2.15.so\n  // 7f4b8e5de000-7f4b8e5e2000 r--p 001b4000 08:01 28836281\n  // /lib/x86_64-linux-gnu/libc-2.15.so\n  // 7f4b8e5e2000-7f4b8e5e4000 rw-p 001b8000 08:01 28836281\n  // /lib/x86_64-linux-gnu/libc-2.15.so\n  const char* p = line;\n  for (int token = 0; token < 7; ++token) {\n    char separator = (token == 0) ? '-' : ' ';\n    // skip leading token separators first.\n    while (p < line_end && *p == separator)\n      p++;\n\n    // find start and end of current token, and compute start of\n    // next search.\n    const char* tok_start = p;\n    const char* tok_end =\n        static_cast<const char*>(memchr(p, separator, line_end - p));\n    if (!tok_end) {\n      tok_end = line_end;\n      p = line_end;\n    } else {\n      p = tok_end + 1;\n    }\n\n    if (tok_end == tok_start) {\n      if (token == 6) {\n        // empty token can happen for index 6, when there is no path\n        // element on the line. This corresponds to anonymous memory\n        // mapped segments.\n        entry->path = NULL;\n        entry->path_len = 0;\n        break;\n      }\n      return false;\n    }\n\n    switch (token) {\n      case 0:  // vma_start\n        entry->vma_start = static_cast<size_t>(strtoumax(tok_start, NULL, 16));\n        break;\n\n      case 1:  // vma_end\n        entry->vma_end = static_cast<size_t>(strtoumax(tok_start, NULL, 16));\n        break;\n\n      case 2:  // protection bits\n      {\n        int flags = 0;\n        for (const char* t = tok_start; t < tok_end; ++t) {\n          if (*t == 'r')\n            flags |= PROT_READ;\n          if (*t == 'w')\n            flags |= PROT_WRITE;\n          if (*t == 'x')\n            flags |= PROT_EXEC;\n        }\n        entry->prot_flags = flags;\n      } break;\n\n      case 3:  // page offset\n        entry->load_offset =\n            static_cast<size_t>(strtoumax(tok_start, NULL, 16)) * PAGE_SIZE;\n        break;\n\n      case 6:  // path\n        // Get rid of trailing newlines, if any.\n        while (tok_end > tok_start && tok_end[-1] == '\\n')\n          tok_end--;\n        entry->path = tok_start;\n        entry->path_len = tok_end - tok_start;\n        break;\n\n      default:  // ignore all other tokens.\n        ;\n    }\n  }\n  return true;\n}\n\n}  // namespace\n\n// Internal implementation of ProcMaps class.\nclass ProcMapsInternal {\n public:\n  ProcMapsInternal() : index_(0), entries_() {}\n\n  ~ProcMapsInternal() { Reset(); }\n\n  bool Open(const char* path) {\n    Reset();\n    LineReader reader(path);\n    index_ = 0;\n    while (reader.GetNextLine()) {\n      ProcMaps::Entry entry = {0, };\n      if (!ParseProcMapsLine(\n               reader.line(), reader.line() + reader.length(), &entry)) {\n        // Ignore broken lines.\n        continue;\n      }\n\n      // Reallocate path.\n      const char* old_path = entry.path;\n      if (old_path) {\n        char* new_path = static_cast<char*>(::malloc(entry.path_len + 1));\n        ::memcpy(new_path, old_path, entry.path_len);\n        new_path[entry.path_len] = '\\0';\n        entry.path = const_cast<const char*>(new_path);\n      }\n\n      entries_.PushBack(entry);\n    }\n    return true;\n  }\n\n  void Rewind() { index_ = 0; }\n\n  bool GetNextEntry(ProcMaps::Entry* entry) {\n    if (index_ >= entries_.GetCount())\n      return false;\n\n    *entry = entries_[index_++];\n    return true;\n  }\n\n private:\n  void Reset() {\n    for (size_t n = 0; n < entries_.GetCount(); ++n) {\n      ProcMaps::Entry& entry = entries_[n];\n      ::free(const_cast<char*>(entry.path));\n    }\n    entries_.Resize(0);\n  }\n\n  size_t index_;\n  Vector<ProcMaps::Entry> entries_;\n};\n\nProcMaps::ProcMaps() {\n  internal_ = new ProcMapsInternal();\n  (void)internal_->Open(\"/proc/self/maps\");\n}\n\nProcMaps::ProcMaps(pid_t pid) {\n  internal_ = new ProcMapsInternal();\n  char maps_file[32];\n  snprintf(maps_file, sizeof maps_file, \"/proc/%u/maps\", pid);\n  (void)internal_->Open(maps_file);\n}\n\nProcMaps::~ProcMaps() { delete internal_; }\n\nvoid ProcMaps::Rewind() { internal_->Rewind(); }\n\nbool ProcMaps::GetNextEntry(Entry* entry) {\n  return internal_->GetNextEntry(entry);\n}\n\nint ProcMaps::GetProtectionFlagsForAddress(void* address) {\n  size_t vma_addr = reinterpret_cast<size_t>(address);\n  internal_->Rewind();\n  ProcMaps::Entry entry;\n  while (internal_->GetNextEntry(&entry)) {\n    if (entry.vma_start <= vma_addr && vma_addr < entry.vma_end)\n      return entry.prot_flags;\n  }\n  return 0;\n}\n\nbool FindElfBinaryForAddress(void* address,\n                             uintptr_t* load_address,\n                             char* path_buffer,\n                             size_t path_buffer_len) {\n  ProcMaps self_maps;\n  ProcMaps::Entry entry;\n\n  uintptr_t addr = reinterpret_cast<uintptr_t>(address);\n\n  while (self_maps.GetNextEntry(&entry)) {\n    if (entry.vma_start <= addr && addr < entry.vma_end) {\n      *load_address = entry.vma_start;\n      if (!entry.path) {\n        LOG(\"Could not find ELF binary path!?\\n\");\n        return false;\n      }\n      if (entry.path_len >= path_buffer_len) {\n        LOG(\"ELF binary path too long: '%s'\\n\", entry.path);\n        return false;\n      }\n      memcpy(path_buffer, entry.path, entry.path_len);\n      path_buffer[entry.path_len] = '\\0';\n      return true;\n    }\n  }\n  return false;\n}\n\n// Returns the current protection bit flags for the page holding a given\n// address. Returns true on success, or false if the address is not mapped.\nbool FindProtectionFlagsForAddress(void* address, int* prot_flags) {\n  ProcMaps self_maps;\n  ProcMaps::Entry entry;\n\n  uintptr_t addr = reinterpret_cast<uintptr_t>(address);\n\n  while (self_maps.GetNextEntry(&entry)) {\n    if (entry.vma_start <= addr && addr < entry.vma_end) {\n      *prot_flags = entry.prot_flags;\n      return true;\n    }\n  }\n  return false;\n}\n\nbool FindLoadAddressForFile(const char* file_name,\n                            uintptr_t* load_address,\n                            uintptr_t* load_offset) {\n  size_t file_name_len = strlen(file_name);\n  bool is_base_name = (strchr(file_name, '/') == NULL);\n  ProcMaps self_maps;\n  ProcMaps::Entry entry;\n\n  while (self_maps.GetNextEntry(&entry)) {\n    // Skip vDSO et al.\n    if (entry.path_len == 0 || entry.path[0] == '[')\n      continue;\n\n    const char* entry_name = entry.path;\n    size_t entry_len = entry.path_len;\n\n    if (is_base_name) {\n      const char* p = reinterpret_cast<const char*>(\n          ::memrchr(entry.path, '/', entry.path_len));\n      if (p) {\n        entry_name = p + 1;\n        entry_len = entry.path_len - (p - entry.path) - 1;\n      }\n    }\n\n    if (file_name_len == entry_len &&\n        !memcmp(file_name, entry_name, entry_len)) {\n      *load_address = entry.vma_start;\n      *load_offset = entry.load_offset;\n      return true;\n    }\n  }\n\n  return false;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_proc_maps.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_PROC_MAPS_H\n#define CRAZY_LINKER_PROC_MAPS_H\n\n// Helper classes and functions to extract useful information out of\n// /proc/self/maps.\n\n#include <stdint.h>\n#include <sys/mman.h>  // for PROT_READ etc...\n\nnamespace crazy {\n\nclass ProcMapsInternal;\n\nclass ProcMaps {\n public:\n  // Used to open /proc/self/maps.\n  // There is no error reporting. If the file can't be opened, then\n  // GetNextEntry() will return false on the first call.\n  ProcMaps();\n\n  // Used to open /proc/$PID/maps.\n  // There is also no error reporting.\n  explicit ProcMaps(pid_t pid);\n\n  ~ProcMaps();\n\n  // Small structure to model an entry.\n  struct Entry {\n    size_t vma_start;\n    size_t vma_end;\n    int prot_flags;\n    size_t load_offset;\n    const char* path;  // can be NULL, not always zero-terminated.\n    size_t path_len;   // 0 if |path| is NULL.\n  };\n\n  void Rewind();\n\n  // Get next entry in maps, return NULL on failure.\n  // On success, return true and set |entry| to valid values.\n  // Note that the |entry->path| field can be NULL or will point to\n  // an address which content may change on the next call to this method.\n  bool GetNextEntry(Entry* entry);\n\n  int GetProtectionFlagsForAddress(void* address);\n\n private:\n  ProcMapsInternal* internal_;\n};\n\n// Find which loaded ELF binary contains |address|.\n// On success, returns true and sets |*load_address| to its load address,\n// and fills |path_buffer| with the path to the corresponding file.\nbool FindElfBinaryForAddress(void* address,\n                             uintptr_t* load_address,\n                             char* path_buffer,\n                             size_t path_buffer_len);\n\n// Returns the current protection bit flags for the page holding a given\n// |address|. On success, returns true and sets |*prot_flags|.\nbool FindProtectionFlagsForAddress(void* address, int* prot_flags);\n\n// Return the load address of a given ELF binary.\n// If |file_name| contains a slash, this will try to perform an\n// exact match with the content of /proc/self/maps. Otherwise,\n// it will be taken as a base name, and the load address of the first\n// matching entry will be returned.\n// On success, returns true and sets |*load_address| to the load address,\n// and |*load_offset| to the load offset.\nbool FindLoadAddressForFile(const char* file_name,\n                            uintptr_t* load_address,\n                            uintptr_t* load_offset);\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_PROC_MAPS_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_proc_maps_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_proc_maps.h\"\n\n#include <limits.h>\n#include <minitest/minitest.h>\n#include \"crazy_linker_system_mock.h\"\n\nnamespace crazy {\n\nnamespace {\n\nconst char kProcMaps0[] =\n    \"4000b000-4000c000 r--p 00000000 00:00 0\\n\"\n    \"4005c000-40081000 r-xp 00000000 b3:01 141        /system/bin/mksh\\n\"\n    \"40082000-40083000 r--p 00025000 b3:01 141        /system/bin/mksh\\n\"\n    \"40083000-40084000 rw-p 00026000 b3:01 141        /system/bin/mksh\\n\"\n    \"40084000-40088000 rw-p 00000000 00:00 0\\n\"\n    \"40088000-40090000 r--s 00000000 00:0b 1704       /dev/__properties__\\n\"\n    \"400eb000-400ec000 r--p 00000000 00:00 0\\n\"\n    \"40141000-40150000 r-xp 00000000 b3:01 126        /system/bin/linker\\n\"\n    \"40150000-40151000 r--p 0000e000 b3:01 126        /system/bin/linker\\n\"\n    \"40151000-40152000 rw-p 0000f000 b3:01 126        /system/bin/linker\\n\"\n    \"40152000-40153000 rw-p 00000000 00:00 0\\n\"\n    \"40231000-40277000 r-xp 00001000 b3:01 638        /system/lib/libc.so\\n\"\n    \"40277000-40279000 r--p 00046000 b3:01 638        /system/lib/libc.so\\n\"\n    \"40279000-4027b000 rw-p 00048000 b3:01 638        /system/lib/libc.so\\n\"\n    \"4027b000-40289000 rw-p 00000000 00:00 0\\n\"\n    \"41e6b000-41e72000 rw-p 00000000 00:00 0          [heap]\\n\"\n    \"be91b000-be93c000 rw-p 00000000 00:00 0          [stack]\\n\"\n    \"ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]\\n\";\n\nclass ScopedTestEnv {\n public:\n  ScopedTestEnv() : sys_() {\n    sys_.AddRegularFile(\"/proc/self/maps\", kProcMaps0, sizeof(kProcMaps0) - 1);\n  }\n\n  ~ScopedTestEnv() {}\n\n private:\n  SystemMock sys_;\n};\n\n}  // namespace\n\nTEST(ProcMaps, FindElfBinaryForAddress) {\n  ScopedTestEnv env;\n  char path[512];\n  uintptr_t load_address;\n\n  EXPECT_TRUE(FindElfBinaryForAddress(\n      reinterpret_cast<void*>(0x400694c2), &load_address, path, sizeof(path)));\n  EXPECT_EQ(0x4005c000, load_address);\n  EXPECT_STREQ(\"/system/bin/mksh\", path);\n}\n\nTEST(ProcMaps, FindElfBinaryForAddressWithBadAddress) {\n  ScopedTestEnv env;\n  char path[512];\n  uintptr_t load_address;\n\n  EXPECT_FALSE(FindElfBinaryForAddress(\n      reinterpret_cast<void*>(0x50000000), &load_address, path, sizeof(path)));\n}\n\nTEST(ProcMaps, FindProtectionFlagsForAddress) {\n  ScopedTestEnv env;\n  static const struct {\n    uintptr_t address;\n    bool success;\n    int prot;\n  } kData[] = {{0x4000afff, false, 0},\n               {0x4000b000, true, PROT_READ},\n               {0x4000bfff, true, PROT_READ},\n               {0x4000c000, false, 0},\n               {0x4005bfff, false, 0},\n               {0x4005c000, true, PROT_READ | PROT_EXEC},\n               {0x40067832, true, PROT_READ | PROT_EXEC},\n               {0x40082000, true, PROT_READ},\n               {0x40083000, true, PROT_READ | PROT_WRITE},\n               {0x40084000, true, PROT_READ | PROT_WRITE}, };\n\n  int prot;\n  for (size_t n = 0; n < ARRAY_LEN(kData); ++n) {\n    void* address = reinterpret_cast<void*>(kData[n].address);\n    TEST_TEXT << minitest::Format(\"Checking address %p\", address);\n    EXPECT_EQ(kData[n].success, FindProtectionFlagsForAddress(address, &prot));\n    if (kData[n].success) {\n      TEST_TEXT << minitest::Format(\"Checking address %p\", address);\n      EXPECT_EQ(kData[n].prot, prot);\n    }\n  }\n}\n\nTEST(ProcMaps, FindLoadAddressForFile) {\n  ScopedTestEnv env;\n  static const struct {\n    bool success;\n    uintptr_t address;\n    uintptr_t offset;\n    const char* name;\n  } kData[] = {{true, 0x4005c000, 0, \"mksh\"},\n               {true, 0x40141000, 0, \"/system/bin/linker\"},\n               {false, 0, 0, \"[heap]\"},\n               {false, 0, 0, \"bin/mksh\"},\n               {true, 0x4005c000, 0, \"/system/bin/mksh\"},\n               {true, 0x40231000, 0x1000000, \"libc.so\"}, };\n  for (size_t n = 0; n < ARRAY_LEN(kData); ++n) {\n    uintptr_t address, offset;\n    TEST_TEXT << \"Checking \" << kData[n].name;\n    bool success = FindLoadAddressForFile(kData[n].name, &address, &offset);\n    EXPECT_EQ(kData[n].success, success);\n    if (success) {\n      TEST_TEXT << \"Checking \" << kData[n].name;\n      EXPECT_EQ(kData[n].address, address);\n\n      TEST_TEXT << \"Checking \" << kData[n].name;\n      EXPECT_EQ(kData[n].offset, offset);\n    }\n  }\n}\n\nTEST(ProcMaps, GetNextEntry) {\n  ScopedTestEnv env;\n  //     \"4000b000-4000c000 r--p 00000000 00:00 0\\n\"\n  //     \"4005c000-40081000 r-xp 00000000 b3:01 141        /system/bin/mksh\\n\"\n  //     \"40082000-40083000 r--p 00025000 b3:01 141        /system/bin/mksh\\n\"\n  //     \"40083000-40084000 rw-p 00026000 b3:01 141        /system/bin/mksh\\n\"\n  //     \"40084000-40088000 rw-p 00000000 00:00 0\\n\"\n  //     \"40088000-40090000 r--s 00000000 00:0b 1704\n  // /dev/__properties__\\n\"\n  //     \"400eb000-400ec000 r--p 00000000 00:00 0\\n\"\n  //     \"40141000-40150000 r-xp 00000000 b3:01 126        /system/bin/linker\\n\"\n  //     \"40150000-40151000 r--p 0000e000 b3:01 126        /system/bin/linker\\n\"\n  //     \"40151000-40152000 rw-p 0000f000 b3:01 126        /system/bin/linker\\n\"\n  //     \"40152000-40153000 rw-p 00000000 00:00 0\\n\"\n  //     \"40231000-40277000 r-xp 00001000 b3:01 638\n  // /system/lib/libc.so\\n\"\n  //     \"40277000-40279000 r--p 00046000 b3:01 638\n  // /system/lib/libc.so\\n\"\n  //     \"40279000-4027b000 rw-p 00048000 b3:01 638\n  // /system/lib/libc.so\\n\"\n  //     \"4027b000-40289000 rw-p 00000000 00:00 0\\n\"\n  //     \"41e6b000-41e72000 rw-p 00000000 00:00 0          [heap]\\n\"\n  //     \"be91b000-be93c000 rw-p 00000000 00:00 0          [stack]\\n\"\n  //     \"ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]\\n\"\n  static const struct {\n    size_t vma_start;\n    size_t vma_end;\n    int prot_flags;\n    size_t load_offset;\n    const char* path;\n  } kData[] = {\n        {0x4000b000, 0x4000c000, PROT_READ, 0, NULL},\n        {0x4005c000, 0x40081000, PROT_READ | PROT_EXEC, 0, \"/system/bin/mksh\"},\n        {0x40082000,          0x40083000,        PROT_READ,\n         0x25000 * PAGE_SIZE, \"/system/bin/mksh\"},\n        {0x40083000,          0x40084000,        PROT_READ | PROT_WRITE,\n         0x26000 * PAGE_SIZE, \"/system/bin/mksh\"},\n        {0x40084000, 0x40088000, PROT_READ | PROT_WRITE, 0, NULL},\n        {0x40088000, 0x40090000, PROT_READ, 0, \"/dev/__properties__\"},\n        {0x400eb000, 0x400ec000, PROT_READ, 0, NULL},\n        {0x40141000, 0x40150000,          PROT_READ | PROT_EXEC,\n         0,          \"/system/bin/linker\"},\n        {0x40150000,         0x40151000,          PROT_READ,\n         0xe000 * PAGE_SIZE, \"/system/bin/linker\"},\n        {0x40151000,         0x40152000,          PROT_READ | PROT_WRITE,\n         0xf000 * PAGE_SIZE, \"/system/bin/linker\"},\n        {0x40152000, 0x40153000, PROT_READ | PROT_WRITE, 0, NULL},\n        {0x40231000,         0x40277000,           PROT_READ | PROT_EXEC,\n         0x1000 * PAGE_SIZE, \"/system/lib/libc.so\"},\n        {0x40277000,          0x40279000,           PROT_READ,\n         0x46000 * PAGE_SIZE, \"/system/lib/libc.so\"},\n        {0x40279000,          0x4027b000,           PROT_READ | PROT_WRITE,\n         0x48000 * PAGE_SIZE, \"/system/lib/libc.so\"},\n        {0x4027b000, 0x40289000, PROT_READ | PROT_WRITE, 0, NULL},\n        {0x41e6b000, 0x41e72000, PROT_READ | PROT_WRITE, 0, \"[heap]\"},\n        {0xbe91b000, 0xbe93c000, PROT_READ | PROT_WRITE, 0, \"[stack]\"},\n        {0xffff0000, 0xffff1000, PROT_READ | PROT_EXEC, 0, \"[vectors]\"}, };\n\n  ProcMaps self_maps;\n  ProcMaps::Entry entry;\n\n  for (size_t n = 0; n < ARRAY_LEN(kData); ++n) {\n    minitest::internal::String text =\n        minitest::Format(\"Checking entry #%d %p-%p\",\n                         n + 1,\n                         kData[n].vma_start,\n                         kData[n].vma_end);\n    TEST_TEXT << text;\n    EXPECT_TRUE(self_maps.GetNextEntry(&entry));\n    TEST_TEXT << text;\n    EXPECT_EQ(kData[n].vma_start, entry.vma_start);\n    TEST_TEXT << text;\n    EXPECT_EQ(kData[n].vma_end, entry.vma_end);\n    TEST_TEXT << text;\n    EXPECT_EQ(kData[n].prot_flags, entry.prot_flags);\n    TEST_TEXT << text;\n    EXPECT_EQ(kData[n].load_offset, entry.load_offset);\n\n    if (!kData[n].path) {\n      TEST_TEXT << text;\n      EXPECT_FALSE(entry.path);\n    } else {\n      EXPECT_MEMEQ(\n          kData[n].path, strlen(kData[n].path), entry.path, entry.path_len);\n    }\n  }\n  EXPECT_FALSE(self_maps.GetNextEntry(&entry));\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_rdebug.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_rdebug.h\"\n\n#include <elf.h>\n#include <inttypes.h>\n#include <sys/mman.h>\n#include <unistd.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_proc_maps.h\"\n#include \"crazy_linker_util.h\"\n#include \"crazy_linker_system.h\"\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nnamespace {\n\n// Find the full path of the current executable. On success return true\n// and sets |exe_path|. On failure, return false and sets errno.\nbool FindExecutablePath(String* exe_path) {\n  // /proc/self/exe is a symlink to the full path. Read it with\n  // readlink().\n  exe_path->Resize(512);\n  ssize_t ret = TEMP_FAILURE_RETRY(\n      readlink(\"/proc/self/exe\", exe_path->ptr(), exe_path->size()));\n  if (ret < 0) {\n    LOG_ERRNO(\"%s: Could not get /proc/self/exe link\", __FUNCTION__);\n    return false;\n  }\n\n  exe_path->Resize(static_cast<size_t>(ret));\n  LOG(\"%s: Current executable: %s\\n\", __FUNCTION__, exe_path->c_str());\n  return true;\n}\n\n// Given an ELF binary at |path| that is _already_ mapped in the process,\n// find the address of its dynamic section and its size.\n// |path| is the full path of the binary (as it appears in /proc/self/maps.\n// |self_maps| is an instance of ProcMaps that is used to inspect\n// /proc/self/maps. The function rewind + iterates over it.\n// On success, return true and set |*dynamic_offset| and |*dynamic_size|.\nbool FindElfDynamicSection(const char* path,\n                           ProcMaps* self_maps,\n                           size_t* dynamic_address,\n                           size_t* dynamic_size) {\n  // Read the ELF header first.\n  ELF::Ehdr header[1];\n\n  crazy::FileDescriptor fd;\n  if (!fd.OpenReadOnly(path) ||\n      fd.Read(header, sizeof(header)) != static_cast<int>(sizeof(header))) {\n    LOG_ERRNO(\"%s: Could not load ELF binary header\", __FUNCTION__);\n    return false;\n  }\n\n  // Sanity check.\n  if (header->e_ident[0] != 127 || header->e_ident[1] != 'E' ||\n      header->e_ident[2] != 'L' || header->e_ident[3] != 'F' ||\n      header->e_ident[4] != ELF::kElfClass) {\n    LOG(\"%s: Not a %d-bit ELF binary: %s\\n\",\n        __FUNCTION__,\n        ELF::kElfBits,\n        path);\n    return false;\n  }\n\n  if (header->e_phoff == 0 || header->e_phentsize != sizeof(ELF::Phdr)) {\n    LOG(\"%s: Invalid program header values: %s\\n\", __FUNCTION__, path);\n    return false;\n  }\n\n  // Scan the program header table.\n  if (fd.SeekTo(header->e_phoff) < 0) {\n    LOG_ERRNO(\"%s: Could not find ELF program header table\", __FUNCTION__);\n    return false;\n  }\n\n  ELF::Phdr phdr_load0 = {0, };\n  ELF::Phdr phdr_dyn = {0, };\n  bool found_load0 = false;\n  bool found_dyn = false;\n\n  for (size_t n = 0; n < header->e_phnum; ++n) {\n    ELF::Phdr phdr;\n    if (fd.Read(&phdr, sizeof(phdr)) != sizeof(phdr)) {\n      LOG_ERRNO(\"%s: Could not read program header entry\", __FUNCTION__);\n      return false;\n    }\n\n    if (phdr.p_type == PT_LOAD && !found_load0) {\n      phdr_load0 = phdr;\n      found_load0 = true;\n    } else if (phdr.p_type == PT_DYNAMIC && !found_dyn) {\n      phdr_dyn = phdr;\n      found_dyn = true;\n    }\n  }\n\n  if (!found_load0) {\n    LOG(\"%s: Could not find loadable segment!?\\n\", __FUNCTION__);\n    return false;\n  }\n  if (!found_dyn) {\n    LOG(\"%s: Could not find dynamic segment!?\\n\", __FUNCTION__);\n    return false;\n  }\n\n  LOG(\"%s: Found first loadable segment [offset=%p vaddr=%p]\\n\",\n      __FUNCTION__,\n      (void*)phdr_load0.p_offset,\n      (void*)phdr_load0.p_vaddr);\n\n  LOG(\"%s: Found dynamic segment [offset=%p vaddr=%p size=%p]\\n\",\n      __FUNCTION__,\n      (void*)phdr_dyn.p_offset,\n      (void*)phdr_dyn.p_vaddr,\n      (void*)phdr_dyn.p_memsz);\n\n  // Parse /proc/self/maps to find the load address of the first\n  // loadable segment.\n  size_t path_len = strlen(path);\n  self_maps->Rewind();\n  ProcMaps::Entry entry;\n  while (self_maps->GetNextEntry(&entry)) {\n    if (!entry.path || entry.path_len != path_len ||\n        memcmp(entry.path, path, path_len) != 0)\n      continue;\n\n    LOG(\"%s: Found executable segment mapped [%p-%p offset=%p]\\n\",\n        __FUNCTION__,\n        (void*)entry.vma_start,\n        (void*)entry.vma_end,\n        (void*)entry.load_offset);\n\n    size_t load_bias = entry.vma_start - phdr_load0.p_vaddr;\n    LOG(\"%s: Load bias is %p\\n\", __FUNCTION__, (void*)load_bias);\n\n    *dynamic_address = load_bias + phdr_dyn.p_vaddr;\n    *dynamic_size = phdr_dyn.p_memsz;\n    LOG(\"%s: Dynamic section addr=%p size=%p\\n\",\n        __FUNCTION__,\n        (void*)*dynamic_address,\n        (void*)*dynamic_size);\n    return true;\n  }\n\n  LOG(\"%s: Executable is not mapped in current process.\\n\", __FUNCTION__);\n  return false;\n}\n\n// Helper class to temporarily remap a page to readable+writable until\n// scope exit.\nclass ScopedPageMapper {\n public:\n  ScopedPageMapper() : page_address_(0), page_prot_(0) {}\n  void MapReadWrite(void* address);\n  ~ScopedPageMapper();\n\n private:\n  static const uintptr_t kPageSize = 4096;\n  uintptr_t page_address_;\n  int page_prot_;\n};\n\nvoid ScopedPageMapper::MapReadWrite(void* address) {\n  page_address_ = reinterpret_cast<uintptr_t>(address) & ~(kPageSize - 1);\n  page_prot_ = 0;\n  if (!FindProtectionFlagsForAddress(address, &page_prot_) ||\n      (page_prot_ & (PROT_READ | PROT_WRITE)) == (PROT_READ | PROT_WRITE)) {\n    // If the address is invalid, or if the page is already read+write,\n    // no need to do anything here.\n    page_address_ = 0;\n    return;\n  }\n  int new_page_prot = page_prot_ | PROT_READ | PROT_WRITE;\n  int ret = mprotect(\n      reinterpret_cast<void*>(page_address_), kPageSize, new_page_prot);\n  if (ret < 0) {\n    LOG_ERRNO(\"Could not remap page to read/write\");\n    page_address_ = 0;\n  }\n}\n\nScopedPageMapper::~ScopedPageMapper() {\n  if (page_address_) {\n    int ret =\n        mprotect(reinterpret_cast<void*>(page_address_), kPageSize, page_prot_);\n    if (ret < 0)\n      LOG_ERRNO(\"Could not remap page to old protection flags\");\n  }\n}\n\n}  // namespace\n\nbool RDebug::Init() {\n  // The address of '_r_debug' is in the DT_DEBUG entry of the current\n  // executable.\n  init_ = true;\n\n  size_t dynamic_addr = 0;\n  size_t dynamic_size = 0;\n  String path;\n\n  // Find the current executable's full path, and its dynamic section\n  // information.\n  if (!FindExecutablePath(&path))\n    return false;\n\n  ProcMaps self_maps;\n  if (!FindElfDynamicSection(\n           path.c_str(), &self_maps, &dynamic_addr, &dynamic_size)) {\n    return false;\n  }\n\n  // Parse the dynamic table and find the DT_DEBUG entry.\n  const ELF::Dyn* dyn_section = reinterpret_cast<const ELF::Dyn*>(dynamic_addr);\n\n  while (dynamic_size >= sizeof(*dyn_section)) {\n    if (dyn_section->d_tag == DT_DEBUG) {\n      // Found it!\n      LOG(\"%s: Found DT_DEBUG entry inside %s at %p, pointing to %p\\n\",\n          __FUNCTION__,\n          path.c_str(),\n          dyn_section,\n          dyn_section->d_un.d_ptr);\n      if (dyn_section->d_un.d_ptr) {\n        r_debug_ = reinterpret_cast<r_debug*>(dyn_section->d_un.d_ptr);\n        LOG(\"%s: r_debug [r_version=%d r_map=%p r_brk=%p r_ldbase=%p]\\n\",\n            __FUNCTION__,\n            r_debug_->r_version,\n            r_debug_->r_map,\n            r_debug_->r_brk,\n            r_debug_->r_ldbase);\n        // Only version 1 of the struct is supported.\n        if (r_debug_->r_version != 1) {\n          LOG(\"%s: r_debug.r_version is %d, 1 expected.\\n\",\n              __FUNCTION__,\n              r_debug_->r_version);\n          r_debug_ = NULL;\n        }\n\n        // The linker of recent Android releases maps its link map entries\n        // in read-only pages. Determine if this is the case and record it\n        // for later. The first entry in the list corresponds to the\n        // executable.\n        int prot = self_maps.GetProtectionFlagsForAddress(r_debug_->r_map);\n        readonly_entries_ = (prot & PROT_WRITE) == 0;\n\n        LOG(\"%s: r_debug.readonly_entries=%s\\n\",\n            __FUNCTION__,\n            readonly_entries_ ? \"true\" : \"false\");\n        return true;\n      }\n    }\n    dyn_section++;\n    dynamic_size -= sizeof(*dyn_section);\n  }\n\n  LOG(\"%s: There is no non-0 DT_DEBUG entry in this process\\n\", __FUNCTION__);\n  return false;\n}\n\nnamespace {\n\n// Helper runnable class. Handler is one of the two static functions\n// AddEntryInternal() or DelEntryInternal(). Calling these invokes\n// AddEntryImpl() or DelEntryImpl() respectively on rdebug.\nclass RDebugRunnable {\n public:\n  RDebugRunnable(rdebug_callback_handler_t handler,\n                 RDebug* rdebug,\n                 link_map_t* entry)\n      : handler_(handler), rdebug_(rdebug), entry_(entry) { }\n\n  static void Run(void* opaque);\n\n private:\n  rdebug_callback_handler_t handler_;\n  RDebug* rdebug_;\n  link_map_t* entry_;\n};\n\n// Callback entry point.\nvoid RDebugRunnable::Run(void* opaque) {\n  RDebugRunnable* runnable = static_cast<RDebugRunnable*>(opaque);\n\n  LOG(\"%s: Callback received, runnable=%p\\n\", __FUNCTION__, runnable);\n  (*runnable->handler_)(runnable->rdebug_, runnable->entry_);\n  delete runnable;\n}\n\n}  // namespace\n\n// Helper function to schedule AddEntry() and DelEntry() calls onto another\n// thread where possible. Running them there avoids races with the system\n// linker, which expects to be able to set r_map pages readonly when it\n// is not using them and which may run simultaneously on the main thread.\nbool RDebug::PostCallback(rdebug_callback_handler_t handler,\n                          link_map_t* entry) {\n  if (!post_for_later_execution_) {\n    LOG(\"%s: Deferred execution disabled\\n\", __FUNCTION__);\n    return false;\n  }\n\n  RDebugRunnable* runnable = new RDebugRunnable(handler, this, entry);\n  void* context = post_for_later_execution_context_;\n\n  if (!(*post_for_later_execution_)(context, &RDebugRunnable::Run, runnable)) {\n    LOG(\"%s: Deferred execution enabled, but posting failed\\n\", __FUNCTION__);\n    delete runnable;\n    return false;\n  }\n\n  LOG(\"%s: Posted for later execution, runnable=%p\\n\", __FUNCTION__, runnable);\n  return true;\n}\n\nvoid RDebug::AddEntryImpl(link_map_t* entry) {\n  LOG(\"%s: Adding: %s\\n\", __FUNCTION__, entry->l_name);\n  if (!init_)\n    Init();\n\n  if (!r_debug_) {\n    LOG(\"%s: Nothing to do\\n\", __FUNCTION__);\n    return;\n  }\n\n  // Tell GDB the list is going to be modified.\n  r_debug_->r_state = RT_ADD;\n  r_debug_->r_brk();\n\n  // IMPORTANT: GDB expects the first entry in the list to correspond\n  // to the executable. So add our new entry just after it. This is ok\n  // because by default, the linker is always the second entry, as in:\n  //\n  //   [<executable>, /system/bin/linker, libc.so, libm.so, ...]\n  //\n  // By design, the first two entries should never be removed since they\n  // can't be unloaded from the process (they are loaded by the kernel\n  // when invoking the program).\n  //\n  // TODO(digit): Does GDB expect the linker to be the second entry?\n  // It doesn't seem so, but have a look at the GDB sources to confirm\n  // this. No problem appear experimentally.\n  //\n  // What happens for static binaries? They don't have an .interp section,\n  // and don't have a r_debug variable on Android, so GDB should not be\n  // able to debug shared libraries at all for them (assuming one\n  // statically links a linker into the executable).\n  if (!r_debug_->r_map || !r_debug_->r_map->l_next ||\n      !r_debug_->r_map->l_next->l_next) {\n    // Sanity check: Must have at least two items in the list.\n    LOG(\"%s: Malformed r_debug.r_map list\\n\", __FUNCTION__);\n    r_debug_ = NULL;\n    return;\n  }\n\n  link_map_t* before = r_debug_->r_map->l_next;\n  link_map_t* after = before->l_next;\n\n  // Prepare the new entry.\n  entry->l_prev = before;\n  entry->l_next = after;\n\n  // IMPORTANT: Before modifying the previous and next entries in the\n  // list, ensure that they are writable. This avoids crashing when\n  // updating the 'l_prev' or 'l_next' fields of a system linker entry,\n  // which are mapped read-only.\n  {\n    ScopedPageMapper mapper;\n    if (readonly_entries_)\n      mapper.MapReadWrite(before);\n    before->l_next = entry;\n  }\n\n  {\n    ScopedPageMapper mapper;\n    if (readonly_entries_)\n      mapper.MapReadWrite(after);\n    after->l_prev = entry;\n  }\n\n  // Tell GDB that the list modification has completed.\n  r_debug_->r_state = RT_CONSISTENT;\n  r_debug_->r_brk();\n}\n\nvoid RDebug::DelEntryImpl(link_map_t* entry) {\n  LOG(\"%s: Deleting: %s\\n\", __FUNCTION__, entry->l_name);\n  if (!r_debug_)\n    return;\n\n  // Tell GDB the list is going to be modified.\n  r_debug_->r_state = RT_DELETE;\n  r_debug_->r_brk();\n\n  // IMPORTANT: Before modifying the previous and next entries in the\n  // list, ensure that they are writable. See comment above for more\n  // details.\n  if (entry->l_prev) {\n    ScopedPageMapper mapper;\n    if (readonly_entries_)\n      mapper.MapReadWrite(entry->l_prev);\n    entry->l_prev->l_next = entry->l_next;\n  }\n\n  if (entry->l_next) {\n    ScopedPageMapper mapper;\n    if (readonly_entries_)\n      mapper.MapReadWrite(entry->l_next);\n    entry->l_next->l_prev = entry->l_prev;\n  }\n\n  if (r_debug_->r_map == entry)\n    r_debug_->r_map = entry->l_next;\n\n  entry->l_prev = NULL;\n  entry->l_next = NULL;\n\n  // Tell GDB the list modification has completed.\n  r_debug_->r_state = RT_CONSISTENT;\n  r_debug_->r_brk();\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_rdebug.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_RDEBUG_H\n#define CRAZY_LINKER_RDEBUG_H\n\n#include <stdint.h>\n\n// The system linker maintains two lists of libraries at runtime:\n//\n// - A list that is used by GDB and other tools to search for the\n//   binaries that are loaded in the process.\n//\n//   This list is accessible by looking at the DT_DEBUG field of the\n//   dynamic section of any ELF binary loaded by the linker (including\n//   itself). The field contains the address of a global '_r_debug'\n//   variable. More on this later.\n//\n// - A list that is used internally to implement library and symbol\n//   lookup. The list head and tail are called 'solist' and 'sonext'\n//   in the linker sources, and their address is unknown (and randomized\n//   by ASLR), and there is no point trying to change it.\n//\n// This means that you cannot call the linker's dlsym() function to\n// lookup symbols in libraries that are not loaded through it, i.e.\n// any custom dynamic linker needs its own dlopen() / dlsym() and other\n// related functions, and ensure the loaded code only uses its own version.\n// (See support code in crazy_linker_wrappers.cpp)\n//\n// The global '_r_debug' variable is a r_debug structure, whose layout\n// must be known by GDB, with the following fields:\n//\n//     r_version   -> version of the structure (must be 1)\n//     r_map       -> head of a linked list of 'link_map_t' entries,\n//                    one per ELF 'binary' in the process address space.\n//     r_brk       -> pointer to a specific debugging function (see below).\n//     r_state     -> state variable to be read in r_brk().\n//     r_ldbase    -> unused by the system linker, should be 0. (?)\n//\n// The 'r_brk' field points to an empty function in the system linker\n// that is used to notify GDB of changes in the list of shared libraries,\n// this works as follows:\n//\n//   - When the linker wants to add a new shared library to the list,\n//     it first writes RT_ADD to 'r_state', then calls 'r_brk()'.\n//\n//     It modifies the list, then writes RT_CONSISTENT to 'r_state' and\n//     calls 'r_brk()' again.\n//\n//   - When unloading a library, RT_DELETE + RT_CONSISTENT are used\n//     instead.\n//\n// GDB will always place a breakpoint on the function pointed to by\n// 'r_brk', and will be able to synchronize with the linker's\n// modifications.\n//\n// The 'r_map' field is a list of nodes with the following structure\n// describing each loaded shared library for GDB:\n//\n//   l_addr  -> Load address of the first PT_LOAD segment in a\n//              shared library. Note that this is 0 for the linker itself\n//              and the load-bias for an executable.\n//   l_name  -> Name of the executable. This is _always_ a basename!!\n//   l_ld    -> Address of the dynamic table for this binary.\n//   l_next  -> Pointer to next item in 'r_map' list or NULL.\n//   l_prev  -> Pointer to previous item in 'r_map' list.\n//\n// Note that the system linker ensures that there are always at least\n// two items in this list:\n//\n// - The first item always describes the linker itself, the fields\n//   actually point to a specially crafted fake entry for it called\n//   'libdl_info' in the linker sources.\n//\n// - The second item describes the executable that was started by\n//   the kernel. For Android applications, it will always be 'app_process'\n//   and completely uninteresting.\n//\n// - Eventually, another entry for VDSOs on platforms that support them.\n//\n// When implementing a custom linker, being able to debug the process\n// unfortunately requires modifying the 'r_map' list to also account\n// for libraries loading through it.\n//\n// One issue with this is that the linker also uses another internal\n// variable, called '_r_debut_tail' that points to the last item in\n// the list. And there is no way to access it directly. This can lead\n// to problems when calling APIs that actually end up using the system's\n// own dlopen(). Consider this example:\n//\n//  1/ Program loads crazy_linker\n//\n//  2/ Program uses crazy_linker to load libfoo.so, this adds\n//     a new entry at the end of the '_r_debug.r_map' list, but\n//     '_r_debug.tail' is unmodified.\n//\n//  3/ libfoo.so or the Java portion of the program calls a system API\n//     that ends up loading another library (e.g. libGLESv2_vendor.so),\n//     this calls the system dlopen().\n//\n//  4/ The system dlopen() adds a new entry to the \"_r_debug.r_map\"\n//     list by updating the l_next / l_prev fields of the entry pointed\n//     to by '_r_debug_tail', and this removes 'libfoo.so' from the list!\n//\n// There is a simple work-around for this issue: Always insert our\n// libraries at the _start_ of the 'r_map' list, instead of appending\n// them to the end. The system linker doesn't know about custom-loaded\n// libraries and thus will never try to unload them.\n//\n// Note that the linker never uses the 'r_map' list (except or updating\n// it for GDB), it only uses 'solist / sonext' to actually perform its\n// operations. That's ok if our custom linker completely wraps and\n// re-implements these.\n//\n// The system linker expects to be the only item modifying the 'r_map'\n// list, and as such it may set the pages that contain the list readonly\n// outside of its own modifications. In threaded environments where the\n// system linker and the crazy linker are operating simultaneously on\n// different threads this may be a problem; we need these pages to be\n// writable when we have to update the list. We cannot track the system\n// linker's actions, so to avoid clashing with it we may need to try and\n// move 'r_map' updates to a different thread, to serialize them with\n// other system linker activity.\nnamespace crazy {\n\nstruct link_map_t {\n  uintptr_t l_addr;\n  char* l_name;\n  uintptr_t l_ld;\n  link_map_t* l_next;\n  link_map_t* l_prev;\n};\n\n// Values for r_debug->r_state\nenum {\n  RT_CONSISTENT,\n  RT_ADD,\n  RT_DELETE\n};\n\nstruct r_debug {\n  int32_t r_version;\n  link_map_t* r_map;\n  void (*r_brk)(void);\n  int32_t r_state;\n  uintptr_t r_ldbase;\n};\n\n// A callback poster is a function that can be called to request a later\n// callback. Poster arguments are: an opaque pointer to the caller's\n// context, a pointer to a function with a single void* argument that will\n// handle the callback, and the opaque void* argument value to send with\n// the callback.\ntypedef void (*crazy_callback_handler_t)(void* opaque);\ntypedef bool (*rdebug_callback_poster_t)(void* context,\n                                         crazy_callback_handler_t,\n                                         void* opaque);\n\n// A callback handler is a static function, either AddEntryInternal() or\n// DelEntryInternal(). It calls the appropriate r_map update member\n// function, AddEntryImpl() or DelEntryImpl().\nclass RDebug;\ntypedef void (*rdebug_callback_handler_t)(RDebug*, link_map_t*);\n\nclass RDebug {\n public:\n  RDebug() : r_debug_(NULL), init_(false),\n             readonly_entries_(false), post_for_later_execution_(NULL),\n             post_for_later_execution_context_(NULL) {}\n  ~RDebug() {}\n\n  // Add entries to and remove entries from the list. If post for later\n  // execution is enabled, schedule callbacks and return. Otherwise\n  // action immediately.\n  void AddEntry(link_map_t* entry) { RunOrDelay(&AddEntryInternal, entry); }\n  void DelEntry(link_map_t* entry) { RunOrDelay(&DelEntryInternal, entry); }\n\n  // Assign the function used to request a callback from another thread.\n  // The context here is opaque, but is the API's crazy_context.\n  void SetDelayedCallbackPoster(rdebug_callback_poster_t poster,\n                                void* context) {\n    post_for_later_execution_ = poster;\n    post_for_later_execution_context_ = context;\n  }\n\n  r_debug* GetAddress() { return r_debug_; }\n\n private:\n  // Try to find the address of the global _r_debug variable, even\n  // though there is no symbol for it. Returns true on success.\n  bool Init();\n\n  // Support for scheduling list manipulation through callbacks.\n  // AddEntry() and DelEntry() pass the addresses of static functions to\n  // to RunOrDelay(). This requests a callback if later execution\n  // is enabled, otherwise it runs immediately on the current thread.\n  // AddEntryImpl() and DelEntryImpl() are the member functions called\n  // by the static ones to do the actual work.\n  void AddEntryImpl(link_map_t* entry);\n  void DelEntryImpl(link_map_t* entry);\n  static void AddEntryInternal(RDebug* rdebug, link_map_t* entry) {\n    rdebug->AddEntryImpl(entry);\n  }\n  static void DelEntryInternal(RDebug* rdebug, link_map_t* entry) {\n    rdebug->DelEntryImpl(entry);\n  }\n\n  // Post handler for delayed execution. Return true if delayed execution\n  // is enabled and posting succeeded.\n  bool PostCallback(rdebug_callback_handler_t handler, link_map_t* entry);\n\n  // Run handler as a callback if enabled, otherwise immediately.\n  void RunOrDelay(rdebug_callback_handler_t handler, link_map_t* entry) {\n    if (!PostCallback(handler, entry))\n      (*handler)(this, entry);\n  }\n\n  RDebug(const RDebug&);\n  RDebug& operator=(const RDebug&);\n\n  r_debug* r_debug_;\n  bool init_;\n  bool readonly_entries_;\n  rdebug_callback_poster_t post_for_later_execution_;\n  void* post_for_later_execution_context_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_REDUG_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_search_path_list.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_search_path_list.h\"\n\n#include <string.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_system.h\"\n\nnamespace crazy {\n\nvoid SearchPathList::Reset() {\n  list_.Resize(0);\n  env_list_.Resize(0);\n  full_path_.Resize(0);\n}\n\nvoid SearchPathList::ResetFromEnv(const char* var_name) {\n  Reset();\n  const char* env = GetEnv(var_name);\n  if (env && *env)\n    env_list_ = env;\n}\n\nvoid SearchPathList::AddPaths(const char* list, const char* list_end) {\n  // Append a column to the current list, if necessary\n  if (list_.size() > 0 && list_[list_.size() - 1] != ':')\n    list_ += ':';\n  list_.Append(list, list_end - list);\n}\n\nconst char* SearchPathList::FindFile(const char* file_name) {\n  // Sanity checks.\n  if (!file_name || !*file_name)\n    return NULL;\n\n  LOG(\"%s: Looking for %s\\n\", __FUNCTION__, file_name);\n\n  // Build full list by appending the env_list_ after the regular one.\n  String full_list = list_;\n  if (env_list_.size() > 0) {\n    if (full_list.size() > 0 && full_list[full_list.size() - 1] != ':')\n      full_list += ':';\n    full_list += env_list_;\n  }\n\n  // Iterate over all items in the list.\n  const char* p = full_list.c_str();\n  const char* end = p + full_list.size();\n\n  while (p < end) {\n    // compute current list item, and next item start at the same time.\n    const char* item = p;\n    const char* item_end =\n        reinterpret_cast<const char*>(memchr(p, ':', end - p));\n    if (item_end)\n      p = item_end + 1;\n    else {\n      item_end = end;\n      p = end;\n    }\n\n    full_path_.Assign(item, item_end - item);\n\n    // Add trailing directory separator if needed.\n    if (full_path_.size() > 0 && full_path_[full_path_.size() - 1] != '/')\n      full_path_ += '/';\n\n    full_path_ += file_name;\n\n    if (PathIsFile(full_path_.c_str())) {\n      LOG(\"    FOUND %s\\n\", full_path_.c_str());\n      return full_path_.c_str();\n    } else\n      LOG(\"    skip  %s\\n\", full_path_.c_str());\n  }\n\n  return NULL;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_search_path_list.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_SEARCH_PATH_LIST_H\n#define CRAZY_LINKER_SEARCH_PATH_LIST_H\n\n#include <string.h>\n\n#include \"crazy_linker_util.h\"  // for String\n\nnamespace crazy {\n\n// A simple class to model a list of search paths, and perform\n// file system probing with it.\nclass SearchPathList {\n public:\n  SearchPathList() : list_(), env_list_(), full_path_() {}\n\n  // Reset the list, i.e. make it empty.\n  void Reset();\n\n  // Reset the list from an environment variable value.\n  void ResetFromEnv(const char* var_name);\n\n  // Add one or more paths to the list.\n  // |path_list| contains a list of paths separated by columns.\n  // |path_list_end| points after the list's last character.\n  void AddPaths(const char* path_list, const char* path_list_end);\n\n  // Convenience function that takes a 0-terminated string.\n  void AddPaths(const char* path_list) {\n    AddPaths(path_list, path_list + ::strlen(path_list));\n  }\n\n  // Try to find a file named |file_name| by probing the file system\n  // with every item in the list as a suffix. On success, returns the\n  // full path string, or NULL on failure.\n  const char* FindFile(const char* file_name);\n\n private:\n  String list_;\n  String env_list_;\n  String full_path_;\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_SEARCH_PATH_LIST_H"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_search_path_list_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_search_path_list.h\"\n\n#include <minitest/minitest.h>\n#include \"crazy_linker_system_mock.h\"\n\nnamespace crazy {\n\nclass TestSystem {\n public:\n  TestSystem() : sys_() {\n    sys_.AddRegularFile(\"/tmp/foo/bar\", \"BARBARBAR\", 9);\n    sys_.AddRegularFile(\"/tmp/zoo\", \"ZOO\", 3);\n    sys_.AddRegularFile(\"/foo\", \"Foo\", 3);\n    sys_.AddEnvVariable(\"TEST_LIBRARY_PATH\", \"/tmp:/\");\n  }\n\n  ~TestSystem() {}\n\n  void AddFile(const char* path, const char* data, size_t len) {\n    sys_.AddRegularFile(path, data, len);\n  }\n\n private:\n  SystemMock sys_;\n};\n\nTEST(SearchPathList, Empty) {\n  TestSystem sys;\n  SearchPathList list;\n  EXPECT_FALSE(list.FindFile(\"/foo\"));\n  EXPECT_FALSE(list.FindFile(\"/tmp/zoo\"));\n  EXPECT_FALSE(list.FindFile(\"/tmp/foo/bar\"));\n}\n\nTEST(SearchPathList, OneItem) {\n  TestSystem sys;\n  SearchPathList list;\n  list.AddPaths(\"/tmp/foo\");\n  EXPECT_STREQ(\"/tmp/foo/bar\", list.FindFile(\"bar\"));\n  EXPECT_FALSE(list.FindFile(\"zoo\"));\n  EXPECT_FALSE(list.FindFile(\"foo\"));\n}\n\nTEST(SearchPathList, Reset) {\n  TestSystem sys;\n  SearchPathList list;\n  list.AddPaths(\"/tmp/foo\");\n  EXPECT_STREQ(\"/tmp/foo/bar\", list.FindFile(\"bar\"));\n\n  list.Reset();\n  EXPECT_FALSE(list.FindFile(\"bar\"));\n}\n\nTEST(SearchPathList, ResetFromEnv) {\n  TestSystem sys;\n  SearchPathList list;\n  list.ResetFromEnv(\"TEST_LIBRARY_PATH\");\n  EXPECT_STREQ(\"/tmp/foo/bar\", list.FindFile(\"foo/bar\"));\n  EXPECT_STREQ(\"/foo\", list.FindFile(\"foo\"));\n}\n\nTEST(SearchPathList, ThreeItems) {\n  TestSystem sys;\n  SearchPathList list;\n  list.AddPaths(\"/tmp/foo\");\n  list.AddPaths(\"/tmp/\");\n\n  EXPECT_STREQ(\"/tmp/foo/bar\", list.FindFile(\"bar\"));\n  EXPECT_STREQ(\"/tmp/zoo\", list.FindFile(\"zoo\"));\n  EXPECT_FALSE(list.FindFile(\"foo\"));\n}\n\nTEST(SearchPathList, EnvPathsAfterAddedOnes) {\n  TestSystem sys;\n  sys.AddFile(\"/opt/foo\", \"FOO\", 3);\n  SearchPathList list;\n  list.ResetFromEnv(\"TEST_LIBRARY_PATH\");\n  list.AddPaths(\"/opt\");\n\n  // This checks that paths added with AddPaths() have priority over\n  // paths added with ResetFromEnv(). An invalid implementation would\n  // find '/tmp/foo' instead.\n  EXPECT_STREQ(\"/opt/foo\", list.FindFile(\"foo\"));\n}\n\n}  // namespace crazy"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_shared_library.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_shared_library.h\"\n\n#include <dlfcn.h>\n#include <stdlib.h>\n#include <sys/mman.h>\n#include <elf.h>\n\n#include \"crazy_linker_ashmem.h\"\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_elf_loader.h\"\n#include \"crazy_linker_elf_relocations.h\"\n#include \"crazy_linker_library_list.h\"\n#include \"crazy_linker_library_view.h\"\n#include \"crazy_linker_globals.h\"\n#include \"crazy_linker_memory_mapping.h\"\n#include \"crazy_linker_thread.h\"\n#include \"crazy_linker_util.h\"\n#include \"crazy_linker_wrappers.h\"\n#include \"linker_phdr.h\"\n\n#ifndef DF_SYMBOLIC\n#define DF_SYMBOLIC 2\n#endif\n\n#ifndef DF_TEXTREL\n#define DF_TEXTREL 4\n#endif\n\n#ifndef DT_INIT_ARRAY\n#define DT_INIT_ARRAY 25\n#endif\n\n#ifndef DT_INIT_ARRAYSZ\n#define DT_INIT_ARRAYSZ 27\n#endif\n\n#ifndef DT_FINI_ARRAY\n#define DT_FINI_ARRAY 26\n#endif\n\n#ifndef DT_FINI_ARRAYSZ\n#define DT_FINI_ARRAYSZ 28\n#endif\n\n#ifndef DT_FLAGS\n#define DT_FLAGS 30\n#endif\n\n#ifndef DT_PREINIT_ARRAY\n#define DT_PREINIT_ARRAY 32\n#endif\n\n#ifndef DT_PREINIT_ARRAYSZ\n#define DT_PREINIT_ARRAYSZ 33\n#endif\n\nnamespace crazy {\n\nnamespace {\n\ntypedef SharedLibrary::linker_function_t linker_function_t;\ntypedef int (*JNI_OnLoadFunctionPtr)(void* vm, void* reserved);\ntypedef void (*JNI_OnUnloadFunctionPtr)(void* vm, void* reserved);\n\n// Call a constructor or destructor function pointer. Ignore\n// NULL and -1 values intentionally. They correspond to markers\n// in the tables, or deleted values.\n// |func_type| corresponds to the type of the function, and is only\n// used for debugging (examples are \"DT_INIT\", \"DT_INIT_ARRAY\", etc...).\nvoid CallFunction(linker_function_t func, const char* func_type) {\n  uintptr_t func_address = reinterpret_cast<uintptr_t>(func);\n\n  LOG(\"%s: %p %s\\n\", __FUNCTION__, func, func_type);\n  if (func_address != 0 && func_address != uintptr_t(-1))\n    func();\n}\n\n// An instance of ElfRelocator::SymbolResolver that can be used\n// to resolve symbols in a shared library being loaded by\n// LibraryList::LoadLibrary.\nclass SharedLibraryResolver : public ElfRelocations::SymbolResolver {\n public:\n  SharedLibraryResolver(SharedLibrary* lib,\n                        LibraryList* lib_list,\n                        Vector<LibraryView*>* dependencies)\n      : lib_(lib), dependencies_(dependencies) {}\n\n  virtual void* Lookup(const char* symbol_name) {\n    // TODO(digit): Add the ability to lookup inside the main executable.\n\n    // First, look inside the current library.\n    const ELF::Sym* entry = lib_->LookupSymbolEntry(symbol_name);\n    if (entry)\n      return reinterpret_cast<void*>(lib_->load_bias() + entry->st_value);\n\n    // Special case: redirect the dynamic linker symbols to our wrappers.\n    // This ensures that loaded libraries can call dlopen() / dlsym()\n    // and transparently use the crazy linker to perform their duty.\n    void* address = WrapLinkerSymbol(symbol_name);\n    if (address)\n      return address;\n\n    // Then look inside the dependencies.\n    for (size_t n = 0; n < dependencies_->GetCount(); ++n) {\n      LibraryView* wrap = (*dependencies_)[n];\n      // LOG(\"%s: Looking into dependency %p (%s)\\n\", __FUNCTION__, wrap,\n      // wrap->GetName());\n      if (wrap->IsSystem()) {\n        address = ::dlsym(wrap->GetSystem(), symbol_name);\n#ifdef __arm__\n        // Android libm.so defines isnanf as weak. This means that its\n        // address cannot be found by dlsym(), which always returns NULL\n        // for weak symbols. However, libm.so contains the real isnanf\n        // as __isnanf. If we encounter isnanf and fail to resolve it in\n        // libm.so, retry with __isnanf.\n        //\n        // This occurs only in clang, which lacks __builtin_isnanf. The\n        // gcc compiler implements isnanf as a builtin, so the symbol\n        // isnanf never need be resolved in gcc builds.\n        //\n        // http://code.google.com/p/chromium/issues/detail?id=376828\n        if (!address &&\n            !strcmp(symbol_name, \"isnanf\") &&\n            !strcmp(wrap->GetName(), \"libm.so\"))\n          address = ::dlsym(wrap->GetSystem(), \"__isnanf\");\n#endif\n        if (address)\n          return address;\n      }\n      if (wrap->IsCrazy()) {\n        SharedLibrary* dep = wrap->GetCrazy();\n        entry = dep->LookupSymbolEntry(symbol_name);\n        if (entry)\n          return reinterpret_cast<void*>(dep->load_bias() + entry->st_value);\n      }\n    }\n\n    // Nothing found here.\n    return NULL;\n  }\n\n private:\n  SharedLibrary* lib_;\n  Vector<LibraryView*>* dependencies_;\n};\n\n}  // namespace\n\nSharedLibrary::SharedLibrary() { ::memset(this, 0, sizeof(*this)); }\n\nSharedLibrary::~SharedLibrary() {\n  // Ensure the library is unmapped on destruction.\n  if (view_.load_address())\n    munmap(reinterpret_cast<void*>(view_.load_address()), view_.load_size());\n}\n\nbool SharedLibrary::Load(const char* full_path,\n                         size_t load_address,\n                         size_t file_offset,\n                         Error* error) {\n  // First, record the path.\n  LOG(\"%s: full path '%s'\\n\", __FUNCTION__, full_path);\n\n  size_t full_path_len = strlen(full_path);\n  if (full_path_len >= sizeof(full_path_)) {\n    error->Format(\"Path too long: %s\", full_path);\n    return false;\n  }\n\n  strlcpy(full_path_, full_path, sizeof(full_path_));\n  base_name_ = GetBaseNamePtr(full_path_);\n\n  // Load the ELF binary in memory.\n  LOG(\"%s: Loading ELF segments for %s\\n\", __FUNCTION__, base_name_);\n\n  {\n    ElfLoader loader;\n    if (!loader.LoadAt(full_path_, file_offset, load_address, error)) {\n      return false;\n    }\n\n    if (!view_.InitUnmapped(loader.load_start(),\n                            loader.loaded_phdr(),\n                            loader.phdr_count(),\n                            error)) {\n      return false;\n    }\n\n    if (!symbols_.Init(&view_)) {\n      *error = \"Missing or malformed symbol table\";\n      return false;\n    }\n  }\n\n  if (phdr_table_get_relro_info(view_.phdr(),\n                                view_.phdr_count(),\n                                view_.load_bias(),\n                                &relro_start_,\n                                &relro_size_) < 0) {\n    relro_start_ = 0;\n    relro_size_ = 0;\n  }\n\n#ifdef __arm__\n  LOG(\"%s: Extracting ARM.exidx table for %s\\n\", __FUNCTION__, base_name_);\n  (void)phdr_table_get_arm_exidx(\n      phdr(), phdr_count(), load_bias(), &arm_exidx_, &arm_exidx_count_);\n#endif\n\n  LOG(\"%s: Parsing dynamic table for %s\\n\", __FUNCTION__, base_name_);\n  ElfView::DynamicIterator dyn(&view_);\n  for (; dyn.HasNext(); dyn.GetNext()) {\n    ELF::Addr dyn_value = dyn.GetValue();\n    uintptr_t dyn_addr = dyn.GetAddress(load_bias());\n    switch (dyn.GetTag()) {\n      case DT_DEBUG:\n        if (view_.dynamic_flags() & PF_W) {\n          *dyn.GetValuePointer() =\n              reinterpret_cast<uintptr_t>(Globals::GetRDebug()->GetAddress());\n        }\n        break;\n      case DT_INIT:\n        LOG(\"  DT_INIT addr=%p\\n\", dyn_addr);\n        init_func_ = reinterpret_cast<linker_function_t>(dyn_addr);\n        break;\n      case DT_FINI:\n        LOG(\"  DT_FINI addr=%p\\n\", dyn_addr);\n        fini_func_ = reinterpret_cast<linker_function_t>(dyn_addr);\n        break;\n      case DT_INIT_ARRAY:\n        LOG(\"  DT_INIT_ARRAY addr=%p\\n\", dyn_addr);\n        init_array_ = reinterpret_cast<linker_function_t*>(dyn_addr);\n        break;\n      case DT_INIT_ARRAYSZ:\n        init_array_count_ = dyn_value / sizeof(ELF::Addr);\n        LOG(\"  DT_INIT_ARRAYSZ value=%p count=%p\\n\",\n            dyn_value,\n            init_array_count_);\n        break;\n      case DT_FINI_ARRAY:\n        LOG(\"  DT_FINI_ARRAY addr=%p\\n\", dyn_addr);\n        fini_array_ = reinterpret_cast<linker_function_t*>(dyn_addr);\n        break;\n      case DT_FINI_ARRAYSZ:\n        fini_array_count_ = dyn_value / sizeof(ELF::Addr);\n        LOG(\"  DT_FINI_ARRAYSZ value=%p count=%p\\n\",\n            dyn_value,\n            fini_array_count_);\n        break;\n      case DT_PREINIT_ARRAY:\n        LOG(\"  DT_PREINIT_ARRAY addr=%p\\n\", dyn_addr);\n        preinit_array_ = reinterpret_cast<linker_function_t*>(dyn_addr);\n        break;\n      case DT_PREINIT_ARRAYSZ:\n        preinit_array_count_ = dyn_value / sizeof(ELF::Addr);\n        LOG(\"  DT_PREINIT_ARRAYSZ value=%p count=%p\\n\",\n            dyn_value,\n            preinit_array_count_);\n        break;\n      case DT_SYMBOLIC:\n        LOG(\"  DT_SYMBOLIC\\n\");\n        has_DT_SYMBOLIC_ = true;\n        break;\n      case DT_FLAGS:\n        if (dyn_value & DF_SYMBOLIC)\n          has_DT_SYMBOLIC_ = true;\n        break;\n#if defined(__mips__)\n      case DT_MIPS_RLD_MAP:\n        *dyn.GetValuePointer() =\n            reinterpret_cast<ELF::Addr>(Globals::GetRDebug()->GetAddress());\n        break;\n#endif\n      default:\n        ;\n    }\n  }\n\n  LOG(\"%s: Load complete for %s\\n\", __FUNCTION__, base_name_);\n  return true;\n}\n\nbool SharedLibrary::Relocate(LibraryList* lib_list,\n                             Vector<LibraryView*>* dependencies,\n                             Error* error) {\n  // Apply relocations.\n  LOG(\"%s: Applying relocations to %s\\n\", __FUNCTION__, base_name_);\n\n  ElfRelocations relocations;\n\n  if (!relocations.Init(&view_, error))\n    return false;\n\n  SharedLibraryResolver resolver(this, lib_list, dependencies);\n  if (!relocations.ApplyAll(&symbols_, &resolver, error))\n    return false;\n\n  LOG(\"%s: Relocations applied for %s\\n\", __FUNCTION__, base_name_);\n  return true;\n}\n\nconst ELF::Sym* SharedLibrary::LookupSymbolEntry(const char* symbol_name) {\n  return symbols_.LookupByName(symbol_name);\n}\n\nvoid* SharedLibrary::FindAddressForSymbol(const char* symbol_name) {\n  return symbols_.LookupAddressByName(symbol_name, view_.load_bias());\n}\n\nbool SharedLibrary::CreateSharedRelro(size_t load_address,\n                                      size_t* relro_start,\n                                      size_t* relro_size,\n                                      int* relro_fd,\n                                      Error* error) {\n  SharedRelro relro;\n\n  if (!relro.Allocate(relro_size_, base_name_, error))\n    return false;\n\n  if (load_address != 0 && load_address != this->load_address()) {\n    // Need to relocate the content of the ashmem region first to accomodate\n    // for the new load address.\n    if (!relro.CopyFromRelocated(\n             &view_, load_address, relro_start_, relro_size_, error))\n      return false;\n  } else {\n    // Simply copy, no relocations.\n    if (!relro.CopyFrom(relro_start_, relro_size_, error))\n      return false;\n  }\n\n  // Enforce read-only mode for the region's content.\n  if (!relro.ForceReadOnly(error))\n    return false;\n\n  // All good.\n  *relro_start = relro.start();\n  *relro_size = relro.size();\n  *relro_fd = relro.DetachFd();\n  return true;\n}\n\nbool SharedLibrary::UseSharedRelro(size_t relro_start,\n                                   size_t relro_size,\n                                   int relro_fd,\n                                   Error* error) {\n  LOG(\"%s: relro_start=%p relro_size=%p relro_fd=%d\\n\",\n      __FUNCTION__,\n      (void*)relro_start,\n      (void*)relro_size,\n      relro_fd);\n\n  if (relro_fd < 0 || relro_size == 0) {\n    // Nothing to do here.\n    return true;\n  }\n\n  // Sanity check: A shared RELRO is not already used.\n  if (relro_used_) {\n    *error = \"Library already using shared RELRO section\";\n    return false;\n  }\n\n  // Sanity check: RELRO addresses must match.\n  if (relro_start_ != relro_start || relro_size_ != relro_size) {\n    error->Format(\"RELRO mismatch addr=%p size=%p (wanted addr=%p size=%p)\",\n                  relro_start_,\n                  relro_size_,\n                  relro_start,\n                  relro_size);\n    return false;\n  }\n\n  // Everything's good, swap pages in this process's address space.\n  SharedRelro relro;\n  if (!relro.InitFrom(relro_start, relro_size, relro_fd, error))\n    return false;\n\n  relro_used_ = true;\n  return true;\n}\n\nvoid SharedLibrary::CallConstructors() {\n  CallFunction(init_func_, \"DT_INIT\");\n  for (size_t n = 0; n < init_array_count_; ++n)\n    CallFunction(init_array_[n], \"DT_INIT_ARRAY\");\n}\n\nvoid SharedLibrary::CallDestructors() {\n  for (size_t n = fini_array_count_; n > 0; --n) {\n    CallFunction(fini_array_[n - 1], \"DT_FINI_ARRAY\");\n  }\n  CallFunction(fini_func_, \"DT_FINI\");\n}\n\nbool SharedLibrary::SetJavaVM(void* java_vm,\n                              int minimum_jni_version,\n                              Error* error) {\n  if (java_vm == NULL)\n    return true;\n\n  // Lookup for JNI_OnLoad, exit if it doesn't exist.\n  JNI_OnLoadFunctionPtr jni_onload = reinterpret_cast<JNI_OnLoadFunctionPtr>(\n      FindAddressForSymbol(\"JNI_OnLoad\"));\n  if (!jni_onload)\n    return true;\n\n  int jni_version = (*jni_onload)(java_vm, NULL);\n  if (jni_version < minimum_jni_version) {\n    error->Format(\"JNI_OnLoad() in %s returned %d, expected at least %d\",\n                  full_path_,\n                  jni_version,\n                  minimum_jni_version);\n    return false;\n  }\n\n  // Save the JavaVM handle for unload time.\n  java_vm_ = java_vm;\n  return true;\n}\n\nvoid SharedLibrary::CallJniOnUnload() {\n  if (!java_vm_)\n    return;\n\n  JNI_OnUnloadFunctionPtr jni_on_unload =\n      reinterpret_cast<JNI_OnUnloadFunctionPtr>(\n          this->FindAddressForSymbol(\"JNI_OnUnload\"));\n\n  if (jni_on_unload)\n    (*jni_on_unload)(java_vm_, NULL);\n}\n\nbool SharedLibrary::DependencyIterator::GetNext() {\n  dep_name_ = NULL;\n  for (; iter_.HasNext(); iter_.GetNext()) {\n    if (iter_.GetTag() == DT_NEEDED) {\n      dep_name_ = symbols_->GetStringById(iter_.GetValue());\n      iter_.GetNext();\n      return true;\n    }\n  }\n  return false;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_shared_library.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_SHARED_LIBRARY_H\n#define CRAZY_LINKER_SHARED_LIBRARY_H\n\n#include <link.h>\n\n#include \"crazy_linker_elf_relro.h\"\n#include \"crazy_linker_elf_symbols.h\"\n#include \"crazy_linker_elf_view.h\"\n#include \"crazy_linker_error.h\"\n#include \"crazy_linker_rdebug.h\"\n#include \"crazy_linker_util.h\"\n#include \"elf_traits.h\"\n\nnamespace crazy {\n\nclass LibraryList;\nclass LibraryView;\n\n// A class that models a shared library loaded by the crazy linker.\n\n// Libraries have dependencies (which are listed in their dynamic section\n// as DT_NEEDED entries). Circular dependencies are forbidden, so they\n// form an ADG, where the root is the crazy linker itself, since all\n// libraries that it loads will depend on it (to ensure their\n// dlopen/dlsym/dlclose calls are properly wrapped).\n\nclass SharedLibrary {\n public:\n  SharedLibrary();\n  ~SharedLibrary();\n\n  size_t load_address() const { return view_.load_address(); }\n  size_t load_size() const { return view_.load_size(); }\n  size_t load_bias() const { return view_.load_bias(); }\n  const ELF::Phdr* phdr() const { return view_.phdr(); }\n  size_t phdr_count() const { return view_.phdr_count(); }\n  const char* base_name() const { return base_name_; }\n\n  // Load a library (without its dependents) from an ELF file.\n  // Note: This does not apply relocations, nor runs constructors.\n  // |full_path| if the file full path.\n  // |load_address| is the page-aligned load address in memory, or 0.\n  // |file_offset| is the page-aligned file offset.\n  // On failure, return false and set |error| message.\n  //\n  // After this, the caller should load all library dependencies,\n  // Then call Relocate() and CallConstructors() to complete the\n  // operation.\n  bool Load(const char* full_path,\n            size_t load_address,\n            size_t file_offset,\n            Error* error);\n\n  // Relocate this library, assuming all its dependencies are already\n  // loaded in |lib_list|. On failure, return false and set |error|\n  // message.\n  bool Relocate(LibraryList* lib_list,\n                Vector<LibraryView*>* dependencies,\n                Error* error);\n\n  void GetInfo(size_t* load_address,\n               size_t* load_size,\n               size_t* relro_start,\n               size_t* relro_size) {\n    *load_address = view_.load_address();\n    *load_size = view_.load_size();\n    *relro_start = relro_start_;\n    *relro_size = relro_size_;\n  }\n\n  // Returns true iff a given library is mapped to a virtual address range\n  // that contains a given address.\n  bool ContainsAddress(void* address) const {\n    size_t addr = reinterpret_cast<size_t>(address);\n    return load_address() <= addr && addr <= load_address() + load_size();\n  }\n\n  // Call all constructors in the library.\n  void CallConstructors();\n\n  // Call all destructors in the library.\n  void CallDestructors();\n\n  // Return the ELF symbol entry for a given symbol, if defined by\n  // this library, or NULL otherwise.\n  const ELF::Sym* LookupSymbolEntry(const char* symbol_name);\n\n  // Find the nearest symbol near a given |address|. On success, return\n  // true and set |*sym_name| to the symbol name, |*sym_addr| to its address\n  // in memory, and |*sym_size| to its size in bytes, if any.\n  bool FindNearestSymbolForAddress(void* address,\n                                   const char** sym_name,\n                                   void** sym_addr,\n                                   size_t* sym_size) {\n    return symbols_.LookupNearestByAddress(\n        address, load_bias(), sym_name, sym_addr, sym_size);\n  }\n\n  // Return the address of a given |symbol_name| if it is exported\n  // by the library, NULL otherwise.\n  void* FindAddressForSymbol(const char* symbol_name);\n\n  // Create a new Ashmem region holding a copy of the library's RELRO section,\n  // potentially relocated for a new |load_address|. On success, return true\n  // and sets |*relro_start|, |*relro_size| and |*relro_fd|. Note that the\n  // RELRO start address is adjusted for |load_address|, and that the caller\n  // becomes the owner of |*relro_fd|. On failure, return false and set\n  // |error| message.\n  bool CreateSharedRelro(size_t load_address,\n                         size_t* relro_start,\n                         size_t* relro_size,\n                         int* relro_fd,\n                         Error* error);\n\n  // Try to use a shared relro section from another process.\n  // On success, return true. On failure return false and\n  // sets |error| message.\n  bool UseSharedRelro(size_t relro_start,\n                      size_t relro_size,\n                      int relro_fd,\n                      Error* error);\n\n  // Look for a symbol named 'JNI_OnLoad' in this library, and if it\n  // exists, call it with |java_vm| as the first parameter. If the\n  // function result is less than |minimum_jni_version|, fail with\n  // a message in |error|. On success, return true, and record\n  // |java_vm| to call 'JNI_OnUnload' at unload time, if present.\n  bool SetJavaVM(void* java_vm, int minimum_jni_version, Error* error);\n\n  // Call 'JNI_OnUnload()' is necessary, i.e. if there was a succesful call\n  // to SetJavaVM() before. This will pass the same |java_vm| value to the\n  // callback, if it is present in the library.\n  void CallJniOnUnload();\n\n  // Helper class to iterate over dependencies in a given SharedLibrary.\n  // Usage:\n  //    SharedLibary::DependencyIterator iter(lib);\n  //    while (iter.GetNext() {\n  //      dependency_name = iter.GetName();\n  //      ...\n  //    }\n  class DependencyIterator {\n   public:\n    DependencyIterator(SharedLibrary* lib)\n        : iter_(&lib->view_), symbols_(&lib->symbols_), dep_name_(NULL) {}\n\n    bool GetNext();\n\n    const char* GetName() const { return dep_name_; }\n\n   private:\n    DependencyIterator();\n    DependencyIterator(const DependencyIterator&);\n    DependencyIterator& operator=(const DependencyIterator&);\n\n    ElfView::DynamicIterator iter_;\n    const ElfSymbols* symbols_;\n    const char* dep_name_;\n  };\n\n  typedef void (*linker_function_t)();\n\n private:\n  friend class LibraryList;\n\n  ElfView view_;\n  ElfSymbols symbols_;\n\n  ELF::Addr relro_start_;\n  ELF::Addr relro_size_;\n  bool relro_used_;\n\n  SharedLibrary* list_next_;\n  SharedLibrary* list_prev_;\n  unsigned flags_;\n\n  linker_function_t* preinit_array_;\n  size_t preinit_array_count_;\n  linker_function_t* init_array_;\n  size_t init_array_count_;\n  linker_function_t* fini_array_;\n  size_t fini_array_count_;\n  linker_function_t init_func_;\n  linker_function_t fini_func_;\n\n#ifdef __arm__\n  // ARM EABI section used for stack unwinding.\n  unsigned* arm_exidx_;\n  size_t arm_exidx_count_;\n#endif\n\n  link_map_t link_map_;\n\n  bool has_DT_SYMBOLIC_;\n\n  void* java_vm_;\n\n  const char* base_name_;\n  char full_path_[512];\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_SHARED_LIBRARY_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_system.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_system.h\"\n\n#include <errno.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <unistd.h>\n\n#include \"crazy_linker_util.h\"\n\n// Note: unit-testing support files are in crazy_linker_files_mock.cpp\n\nnamespace crazy {\n\n#ifndef UNIT_TESTS\n\nbool FileDescriptor::OpenReadOnly(const char* path) {\n  Close();\n  fd_ = TEMP_FAILURE_RETRY(::open(path, O_RDONLY));\n  return (fd_ != -1);\n}\n\nbool FileDescriptor::OpenReadWrite(const char* path) {\n  Close();\n  fd_ = TEMP_FAILURE_RETRY(::open(path, O_RDWR));\n  return (fd_ != -1);\n}\n\nint FileDescriptor::Read(void* buffer, size_t buffer_size) {\n  return TEMP_FAILURE_RETRY(::read(fd_, buffer, buffer_size));\n}\n\nint FileDescriptor::SeekTo(off_t offset) {\n  return ::lseek(fd_, offset, SEEK_SET);\n}\n\nvoid* FileDescriptor::Map(void* address,\n                          size_t length,\n                          int prot,\n                          int flags,\n                          off_t offset) {\n  return ::mmap(address, length, prot, flags, fd_, offset);\n}\n\nvoid FileDescriptor::Close() {\n  if (fd_ != -1) {\n    int old_errno = errno;\n    TEMP_FAILURE_RETRY(close(fd_));\n    errno = old_errno;\n    fd_ = -1;\n  }\n}\n\nconst char* GetEnv(const char* var_name) { return ::getenv(var_name); }\n\nString GetCurrentDirectory() {\n  String result;\n  size_t capacity = 128;\n  for (;;) {\n    result.Resize(capacity);\n    if (getcwd(&result[0], capacity))\n      break;\n    capacity *= 2;\n  }\n  return result;\n}\n\nbool PathExists(const char* path) {\n  struct stat st;\n  if (TEMP_FAILURE_RETRY(stat(path, &st)) < 0)\n    return false;\n\n  return S_ISREG(st.st_mode) || S_ISDIR(st.st_mode);\n}\n\nbool PathIsFile(const char* path) {\n  struct stat st;\n  if (TEMP_FAILURE_RETRY(stat(path, &st)) < 0)\n    return false;\n\n  return S_ISREG(st.st_mode);\n}\n\n#endif  // !UNIT_TESTS\n\n// Returns true iff |lib_name| corresponds to one of the NDK-exposed\n// system libraries.\nbool IsSystemLibrary(const char* lib_name) {\n  static const char* const kSystemLibs[] = {\n      \"libandroid.so\",   \"libc.so\",         \"libdl.so\",     \"libjnigraphics.so\",\n      \"liblog.so\",       \"libm.so\",         \"libstdc++.so\", \"libz.so\",\n      \"libEGL.so\",       \"libGLESv1_CM.so\", \"libGLESv2.so\", \"libGLESv3.so\",\n      \"libOpenMAXAL.so\", \"libOpenSLES.so\", };\n  const size_t kSize = sizeof(kSystemLibs) / sizeof(kSystemLibs[0]);\n  const char* base_name = ::strrchr(lib_name, '/');\n  if (!base_name)\n    base_name = lib_name;\n  else\n    base_name += 1;\n\n  for (size_t n = 0; n < kSize; ++n) {\n    if (!strcmp(kSystemLibs[n], base_name))\n      return true;\n  }\n  return false;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_system.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_SYSTEM_H\n#define CRAZY_LINKER_SYSTEM_H\n\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/mman.h>\n#include <unistd.h>\n\n#include \"crazy_linker_util.h\"  // for String\n\n// System abstraction used by the crazy linker.\n// This is used to make unit testing easier without using tons of\n// dependency injection in the rest of the code base.\n//\n// In a nutshell: in a normal build, this will wrap normal open() / read()\n// calls. During unit testing, everything is mocked, see\n// crazy_linker_system_mock.cpp\n\nnamespace crazy {\n\nenum FileOpenMode {\n  FILE_OPEN_READ_ONLY = 0,\n  FILE_OPEN_READ_WRITE,\n  FILE_OPEN_WRITE\n};\n\n// Scoping file descriptor class.\nclass FileDescriptor {\n public:\n#ifdef UNIT_TESTS\n#define kEmptyFD NULL\n  typedef void* HandleType;\n#else\n#define kEmptyFD (-1)\n  typedef int HandleType;\n#endif\n\n  FileDescriptor() : fd_(kEmptyFD) {}\n\n  FileDescriptor(const char* path) : fd_(kEmptyFD) { OpenReadOnly(path); }\n\n  ~FileDescriptor() { Close(); }\n\n  bool IsOk() const { return fd_ != kEmptyFD; }\n  HandleType Get() const { return fd_; }\n  bool OpenReadOnly(const char* path);\n  bool OpenReadWrite(const char* path);\n  int Read(void* buffer, size_t buffer_size);\n  int SeekTo(off_t offset);\n  void* Map(void* address,\n            size_t length,\n            int prot_flags,\n            int flags,\n            off_t offset);\n  void Close();\n\n private:\n  HandleType fd_;\n};\n\n// Returns true iff a given file path exists.\nbool PathExists(const char* path_name);\n\n// Returns true iff a given path is a regular file (or link to a regular\n// file).\nbool PathIsFile(const char* path_name);\n\n// Returns the current directory, as a string.\nString GetCurrentDirectory();\n\n// Returns the value of a given environment variable.\nconst char* GetEnv(const char* var_name);\n\n// Returns true iff |lib_name| corresponds to one of the NDK-exposed\n// system libraries.\nbool IsSystemLibrary(const char* lib_name);\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_SYSTEM_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_system_mock.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_system_mock.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"crazy_linker_util.h\"\n#include \"crazy_linker_system.h\"\n\n// Unit-testing support code. This should never be compiled into\n// the production code.\n\nnamespace {\n\nusing crazy::String;\nusing crazy::Vector;\n\nvoid Panic(const char* msg, ...) {\n  va_list args;\n  fprintf(stderr, \"PANIC: \");\n  va_start(args, msg);\n  vfprintf(stderr, msg, args);\n  va_end(args);\n  fprintf(stderr, \"\\n\");\n  exit(1);\n}\n\n// Models a simple list of pointers to objects, which are owned by the\n// list itself.\ntemplate <class T>\nclass List {\n public:\n  List() : entries_() {}\n\n  ~List() { Reset(); }\n\n  void Reset() {\n    for (size_t n = 0; n < entries_.GetCount(); ++n) {\n      T* entry = entries_[n];\n      delete entry;\n      entries_[n] = NULL;\n    }\n    entries_.Resize(0);\n  }\n\n  // Add an item to the list, transfer ownership to it.\n  void PushBack(T* item) { entries_.PushBack(item); }\n\n  size_t GetCount() const { return entries_.GetCount(); }\n\n  T* operator[](size_t index) { return entries_[index]; }\n\n private:\n  crazy::Vector<T*> entries_;\n};\n\n// Models a single file entry in a mock file system.\nclass MockFileEntry {\n public:\n  MockFileEntry() : path_(), data_() {}\n\n  ~MockFileEntry() {}\n\n  const char* GetPath() const { return path_.c_str(); }\n  const char* GetData() const { return data_.c_str(); }\n  size_t GetDataSize() const { return data_.size(); }\n\n  void SetPath(const char* path) { path_.Assign(path); }\n\n  void SetData(const char* data, size_t data_size) {\n    data_.Assign(data, data_size);\n  }\n\n private:\n  crazy::String path_;\n  crazy::String data_;\n};\n\n// Models a single mock environment variable value.\nclass MockEnvEntry {\n public:\n  MockEnvEntry(const char* var_name, const char* var_value)\n      : var_name_(var_name), var_value_(var_value) {}\n\n  const String& GetName() const { return var_name_; }\n  const String& GetValue() const { return var_value_; }\n\n private:\n  crazy::String var_name_;\n  crazy::String var_value_;\n};\n\nclass MockSystem {\n public:\n  MockSystem() : files_(), environment_() {}\n\n  ~MockSystem() { Reset(); }\n\n  void SetCurrentDir(const char* path) { current_dir_ = path; }\n\n  String GetCurrentDir() const { return current_dir_; }\n\n  void AddFileEntry(MockFileEntry* entry) { files_.PushBack(entry); }\n\n  void AddEnvEntry(MockEnvEntry* entry) { environment_.PushBack(entry); }\n\n  MockFileEntry* FindFileEntry(const char* path) {\n    for (size_t n = 0; n < files_.GetCount(); ++n) {\n      MockFileEntry* entry = files_[n];\n      if (entry->GetPath() && !strcmp(path, entry->GetPath()))\n        return entry;\n    }\n    return NULL;\n  }\n\n  MockEnvEntry* FindEnvEntry(const char* var_name) {\n    for (size_t n = 0; n < environment_.GetCount(); ++n) {\n      MockEnvEntry* entry = environment_[n];\n      if (!strcmp(entry->GetName().c_str(), var_name))\n        return entry;\n    }\n    return NULL;\n  }\n\n  void Reset() {\n    files_.Reset();\n    environment_.Reset();\n    current_dir_ = \"/\";\n  }\n\n  void Check() {\n    if (!active_)\n      Panic(\"No mock file system setup!\");\n  }\n\n  void Activate() {\n    if (active_)\n      Panic(\"Double mock file system activation!\");\n\n    active_ = true;\n  }\n\n  void Deactivate() {\n    if (!active_)\n      Panic(\"Double mock file system deactivation!\");\n\n    active_ = false;\n  }\n\n private:\n  List<MockFileEntry> files_;\n  List<MockEnvEntry> environment_;\n  String current_dir_;\n  bool active_;\n};\n\nstatic MockSystem s_mock_fs;\n\nclass MockFileHandle {\n public:\n  MockFileHandle(MockFileEntry* entry) : entry_(entry), offset_(0) {}\n  ~MockFileHandle() {}\n\n  bool IsEof() const { return offset_ >= entry_->GetDataSize(); }\n\n  bool GetString(char* buffer, size_t buffer_size) {\n    const char* data = entry_->GetData();\n    size_t data_size = entry_->GetDataSize();\n\n    if (offset_ >= data_size || buffer_size == 0)\n      return false;\n\n    while (buffer_size > 1) {\n      char ch = data[offset_++];\n      *buffer++ = ch;\n      buffer_size--;\n      if (ch == '\\n')\n        break;\n    }\n    *buffer = '\\0';\n    return true;\n  }\n\n  int Read(void* buffer, size_t buffer_size) {\n    if (buffer_size == 0)\n      return 0;\n\n    const char* data = entry_->GetData();\n    size_t data_size = entry_->GetDataSize();\n\n    size_t avail = data_size - offset_;\n    if (avail == 0)\n      return 0;\n\n    if (buffer_size > avail)\n      buffer_size = avail;\n\n    ::memcpy(buffer, data + offset_, buffer_size);\n    offset_ += buffer_size;\n\n    return static_cast<int>(buffer_size);\n  }\n\n  int SeekTo(off_t offset) {\n    if (offset < 0) {\n      errno = EINVAL;\n      return -1;\n    }\n\n    const char* data = entry_->GetData();\n    size_t data_size = entry_->GetDataSize();\n\n    if (offset > static_cast<off_t>(data_size)) {\n      errno = EINVAL;\n      return -1;\n    }\n\n    offset_ = static_cast<size_t>(offset);\n    return 0;\n  }\n\n  void* Map(void* address, size_t length, int prot, int flags, off_t offset) {\n    const char* data = entry_->GetData();\n    size_t data_size = entry_->GetDataSize();\n    if (offset_ >= data_size) {\n      errno = EINVAL;\n      return MAP_FAILED;\n    }\n\n    // Allocate an anonymous memory mapping, then copy the file contents\n    // into it.\n    void* map = mmap(address, length, PROT_WRITE, MAP_ANONYMOUS, -1, 0);\n    if (map == MAP_FAILED) {\n      return map;\n    }\n\n    size_t avail = data_size - offset_;\n    if (avail > length)\n      avail = length;\n\n    ::memcpy(map, data + offset_, avail);\n\n    // Restore desired protection after the write.\n    mprotect(map, length, prot);\n\n    // Done.\n    return map;\n  }\n\n private:\n  MockFileEntry* entry_;\n  size_t offset_;\n};\n\nMockFileHandle* NewMockFileHandle(const char* path,\n                                  crazy::FileOpenMode open_mode) {\n  // Check that a mock file system instance is active.\n  s_mock_fs.Check();\n\n  // TODO(digit): Add write support.\n  if (open_mode != crazy::FILE_OPEN_READ_ONLY)\n    Panic(\"Unsupported open mode (%d): %s\", open_mode, path);\n\n  MockFileEntry* entry = s_mock_fs.FindFileEntry(path);\n  if (!entry)\n    Panic(\"Missing mock file entry: %s\", path);\n\n  return new MockFileHandle(entry);\n}\n\n}  // namespace\n\nnamespace crazy {\n\n#ifdef UNIT_TESTS\n\nbool PathExists(const char* path) {\n  s_mock_fs.Check();\n  return s_mock_fs.FindFileEntry(path) != NULL;\n}\n\nbool PathIsFile(const char* path) {\n  // TODO(digit): Change this when support for mock directories is added.\n  return PathExists(path);\n}\n\nString GetCurrentDirectory() {\n  s_mock_fs.Check();\n  return s_mock_fs.GetCurrentDir();\n}\n\nconst char* GetEnv(const char* var_name) {\n  s_mock_fs.Check();\n  MockEnvEntry* entry = s_mock_fs.FindEnvEntry(var_name);\n  if (!entry)\n    return NULL;\n  else\n    return entry->GetValue().c_str();\n}\n\nbool FileDescriptor::OpenReadOnly(const char* path) {\n  fd_ = NewMockFileHandle(path, FILE_OPEN_READ_ONLY);\n  return fd_ != NULL;\n}\n\nbool FileDescriptor::OpenReadWrite(const char* path) {\n  // NOT IMPLEMENTED ON PURPOSE.\n  return false;\n}\n\nvoid FileDescriptor::Close() {\n  if (fd_) {\n    MockFileHandle* handle = reinterpret_cast<MockFileHandle*>(fd_);\n    delete handle;\n    fd_ = NULL;\n  }\n}\n\nint FileDescriptor::Read(void* buffer, size_t buffer_size) {\n  if (!fd_) {\n    errno = EBADF;\n    return -1;\n  }\n  MockFileHandle* handle = reinterpret_cast<MockFileHandle*>(fd_);\n  return handle->Read(buffer, buffer_size);\n}\n\nint FileDescriptor::SeekTo(off_t offset) {\n  if (!fd_) {\n    errno = EBADF;\n    return -1;\n  }\n  MockFileHandle* handle = reinterpret_cast<MockFileHandle*>(fd_);\n  return handle->SeekTo(offset);\n}\n\nvoid* FileDescriptor::Map(void* address,\n                          size_t length,\n                          int prot,\n                          int flags,\n                          off_t offset) {\n  if (!fd_ || (offset & 4095) != 0) {\n    errno = EINVAL;\n    return MAP_FAILED;\n  }\n  MockFileHandle* handle = reinterpret_cast<MockFileHandle*>(fd_);\n  return handle->Map(address, length, prot, flags, offset);\n}\n\nSystemMock::SystemMock() { s_mock_fs.Activate(); }\n\nSystemMock::~SystemMock() {\n  s_mock_fs.Deactivate();\n  s_mock_fs.Reset();\n}\n\nvoid SystemMock::AddRegularFile(const char* path,\n                                const char* data,\n                                size_t data_size) {\n  s_mock_fs.Check();\n\n  MockFileEntry* entry = new MockFileEntry();\n  entry->SetPath(path);\n  entry->SetData(data, data_size);\n\n  s_mock_fs.AddFileEntry(entry);\n}\n\nvoid SystemMock::AddEnvVariable(const char* var_name, const char* var_value) {\n  s_mock_fs.Check();\n\n  MockEnvEntry* env = new MockEnvEntry(var_name, var_value);\n  s_mock_fs.AddEnvEntry(env);\n}\n\nvoid SystemMock::SetCurrentDir(const char* path) {\n  s_mock_fs.Check();\n  s_mock_fs.SetCurrentDir(path);\n}\n\n#endif  // UNIT_TESTS\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_system_mock.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_SYSTEM_MOCK_H\n#define CRAZY_LINKER_SYSTEM_MOCK_H\n\n#include <stdint.h>\n\nnamespace crazy {\n\nclass SystemMock {\n public:\n  // Create a new mock system instance and make ScopedFileDescriptor use it.\n  // There can be only one mock system active at a given time.\n  SystemMock();\n\n  // Destroy a mock system instance.\n  ~SystemMock();\n\n  // Add a regular file to the mock file system. |path| is the entry's\n  // path, and |data| and |data_size| are the data there. The data must\n  // stay valid until the mock file system is destroyed.\n  void AddRegularFile(const char* path, const char* data, size_t data_size);\n\n  void AddEnvVariable(const char* var_name, const char* var_value);\n\n  void SetCurrentDir(const char* path);\n};\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_SYSTEM_MOCK_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_system_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_system.h\"\n\n#include <minitest/minitest.h>\n#include <stdlib.h>\n#include \"crazy_linker_system_mock.h\"\n\nnamespace crazy {\n\nTEST(System, SingleFile) {\n  static const char kPath[] = \"/tmp/foo/bar\";\n\n  static const char kString[] = \"Hello World\";\n  const size_t kStringLen = sizeof(kString) - 1;\n\n  SystemMock sys;\n  sys.AddRegularFile(kPath, kString, kStringLen);\n\n  char buff2[kStringLen + 10];\n  FileDescriptor fd(kPath);\n\n  EXPECT_EQ(kStringLen, fd.Read(buff2, sizeof(buff2)));\n  buff2[kStringLen] = '\\0';\n  EXPECT_STREQ(kString, buff2);\n}\n\nTEST(System, PathExists) {\n  SystemMock sys;\n  sys.AddRegularFile(\"/tmp/foo\", \"FOO\", 3);\n\n  EXPECT_TRUE(PathExists(\"/tmp/foo\"));\n}\n\nTEST(System, PathExistsWithBadPath) {\n  SystemMock sys;\n  EXPECT_FALSE(PathExists(\"/tmp/foo\"));\n}\n\nTEST(System, IsSystemLibrary) {\n  SystemMock sys;\n  static const struct {\n    const char* name;\n    bool success;\n  } kData[] = {\n        {\"libEGL.so\", true},\n        {\"libGLESv1_CM.so\", true},\n        {\"libGLESv1.so\", false},\n        {\"libGLESv2.so\", true},\n        {\"libOpenMAXAL.so\", true},\n        {\"libOpenSLES.so\", true},\n        {\"libandroid.so\", true},\n        {\"libc.so\", true},\n        {\"libdl.so\", true},\n        {\"libjnigraphics.so\", true},\n        {\"libm.so\", true},\n        {\"libstdc++.so\", true},\n        {\"libstlport.so\", false},\n        {\"libz.so\", true},\n        {\"/system/lib/libc.so\", true},\n        {\"/system/libc.so/libfoo.so\", false},\n    };\n  for (size_t n = 0; n < ARRAY_LEN(kData); ++n) {\n    TEST_TEXT << \"Checking \" << kData[n].name;\n    EXPECT_EQ(kData[n].success, IsSystemLibrary(kData[n].name));\n  }\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_thread.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_thread.h\"\n\n#include <pthread.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nnamespace {\n\nstatic pthread_key_t s_thread_key;\nstatic pthread_once_t s_once = PTHREAD_ONCE_INIT;\n\nstatic void ThreadDataDestroy(void* data) { free(data); }\n\nstatic void InitThreadKey() {\n  pthread_key_create(&s_thread_key, ThreadDataDestroy);\n}\n\n}  // namespace\n\nnamespace crazy {\n\nvoid ThreadData::Init() {\n  dlerror_ = dlerror_buffers_[0];\n  dlerror_[0] = '\\0';\n}\n\nvoid ThreadData::SwapErrorBuffers() {\n  if (dlerror_ == dlerror_buffers_[0])\n    dlerror_ = dlerror_buffers_[1];\n  else\n    dlerror_ = dlerror_buffers_[0];\n  dlerror_[0] = '\\0';\n}\n\nvoid ThreadData::SetErrorArgs(const char* fmt, va_list args) {\n  if (fmt == NULL) {\n    dlerror_[0] = '\\0';\n    return;\n  }\n  vsnprintf(dlerror_, kBufferSize, fmt, args);\n}\n\nvoid ThreadData::AppendErrorArgs(const char* fmt, va_list args) {\n  if (fmt == NULL)\n    return;\n  size_t len = strlen(dlerror_);\n  vsnprintf(dlerror_ + len, kBufferSize - len, fmt, args);\n}\n\nThreadData* GetThreadDataFast() {\n  return reinterpret_cast<ThreadData*>(pthread_getspecific(s_thread_key));\n}\n\nThreadData* GetThreadData() {\n  pthread_once(&s_once, InitThreadKey);\n  ThreadData* data = GetThreadDataFast();\n  if (!data) {\n    data = reinterpret_cast<ThreadData*>(calloc(sizeof(*data), 1));\n    data->Init();\n    pthread_setspecific(s_thread_key, data);\n  }\n  return data;\n}\n\n// Set the linker error string for the current thread.\nvoid SetLinkerErrorString(const char* str) { GetThreadData()->SetError(str); }\n\n// Set the formatted linker error for the current thread.\nvoid SetLinkerError(const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n  GetThreadData()->SetErrorArgs(fmt, args);\n  va_end(args);\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_thread.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_THREAD_H\n#define CRAZY_LINKER_THREAD_H\n\n#include <stdarg.h>\n#include <stddef.h>\n\nnamespace crazy {\n\n// Per-thread context used during crazy linker operations.\nclass ThreadData {\n\n public:\n  ThreadData() {}\n\n  // Init new ThreadData instance.\n  void Init();\n\n  // Return the current error message. This also clears the internal\n  // error message, which means that the next call to this method\n  // will return a pointer to an empty string unless AppendError()\n  // was called.\n  const char* GetError() const { return dlerror_; }\n\n  // Swap the error buffers.\n  void SwapErrorBuffers();\n\n  // Set message string in current dlerror buffer.\n  void SetError(const char* fmt, ...) {\n    va_list args;\n    va_start(args, fmt);\n    SetErrorArgs(fmt, args);\n    va_end(args);\n  }\n\n  void SetErrorArgs(const char* fmt, va_list args);\n\n  // Append message string to current dlerror buffer.\n  void AppendError(const char* fmt, ...) {\n    va_list args;\n    va_start(args, fmt);\n    AppendErrorArgs(fmt, args);\n    va_end(args);\n  }\n\n  void AppendErrorArgs(const char* fmt, va_list args);\n\n private:\n  // Pointer to the current dlerror buffer. This points to one\n  // of the dlerror_buffers[] arrays, swapped on each dlerror()\n  // call.\n  char* dlerror_;\n\n  // Size of each dlerror message buffer size.\n  static const size_t kBufferSize = 512;\n\n  // Two buffers used to store dlerror messages.\n  char dlerror_buffers_[2][kBufferSize];\n};\n\n// Retrieves the ThreadData structure for the current thread.\n// The first time this is called on a given thread, this creates\n// a fresh new object, so this should never return NULL.\nThreadData* GetThreadData();\n\n// Faster variant that should only be called when GetThreadData() was\n// called at least once on the current thread.\nThreadData* GetThreadDataFast();\n\n// Set the linker error string for the current thread.\nvoid SetLinkerErrorString(const char* str);\n\n// Set the formatted linker error for the current thread.\nvoid SetLinkerError(const char* fmt, ...);\n\n}  // namespace crazy;\n\n#endif  // CRAZY_LINKER_THREAD_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_thread_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_thread.h\"\n\n#include <minitest/minitest.h>\n\nnamespace crazy {\n\nTEST(Thread, GetThreadData) {\n  ThreadData* data = GetThreadData();\n  TEST_TEXT << \"Checking first GetThreadData() call\";\n  EXPECT_TRUE(data);\n  EXPECT_EQ(data, GetThreadData());\n  EXPECT_EQ(data, GetThreadDataFast());\n}\n\nTEST(Thread, GetErrorEmpty) {\n  ThreadData* data = GetThreadData();\n  const char* error = data->GetError();\n  EXPECT_TRUE(error);\n  EXPECT_STREQ(\"\", error);\n}\n\nTEST(Thread, SetError) {\n  ThreadData* data = GetThreadData();\n  data->SetError(\"Hello\");\n  data->SetError(\"World\");\n  EXPECT_STREQ(\"World\", data->GetError());\n}\n\nTEST(Thread, SetErrorNull) {\n  ThreadData* data = GetThreadData();\n  data->SetError(\"Hello\");\n  data->SetError(NULL);\n  EXPECT_STREQ(\"\", data->GetError());\n}\n\nTEST(Thread, GetError) {\n  ThreadData* data = GetThreadData();\n  data->SetError(\"Hello\");\n\n  const char* error = data->GetError();\n  EXPECT_STREQ(\"Hello\", error);\n\n  error = data->GetError();\n  EXPECT_STREQ(\"Hello\", error);\n}\n\nTEST(Thread, SwapErrorBuffers) {\n  ThreadData* data = GetThreadData();\n  data->SetError(\"Hello\");\n  EXPECT_STREQ(\"Hello\", data->GetError());\n\n  data->SwapErrorBuffers();\n  EXPECT_STREQ(\"\", data->GetError());\n\n  data->SetError(\"World\");\n  EXPECT_STREQ(\"World\", data->GetError());\n\n  data->SwapErrorBuffers();\n  EXPECT_STREQ(\"\", data->GetError());\n}\n\nTEST(Thread, AppendErrorTwice) {\n  ThreadData* data = GetThreadData();\n  data->SetError(NULL);\n  data->AppendError(\"Hello\");\n  EXPECT_STREQ(\"Hello\", data->GetError());\n\n  data->AppendError(\" World\");\n  EXPECT_STREQ(\"Hello World\", data->GetError());\n}\n\nTEST(Thread, AppendErrorFull) {\n  const size_t kMaxCount = 1000;\n  ThreadData* data = GetThreadData();\n  data->SetError(NULL);\n\n  for (size_t n = 0; n < kMaxCount; ++n)\n    data->AppendError(\"0123456789\");\n\n  const char* error = data->GetError();\n  size_t error_len = strlen(error);\n\n  EXPECT_GT(0, error_len);\n  EXPECT_LT(kMaxCount * 10, error_len);\n\n  for (size_t n = 0; n < error_len; ++n) {\n    TEST_TEXT << \"Checking error[\" << n << \"]\";\n    EXPECT_EQ('0' + (n % 10), error[n]);\n  }\n}\n\nTEST(Thread, AppendErrorNull) {\n  ThreadData* data = GetThreadData();\n  data->SetError(\"Hello\");\n  data->AppendError(NULL);\n  data->AppendError(\" World\");\n  EXPECT_STREQ(\"Hello World\", data->GetError());\n}\n\nTEST(Thread, SetLinkerErrorString) {\n  ThreadData* data = GetThreadData();\n\n  SetLinkerErrorString(\"Hello World\");\n  EXPECT_STREQ(\"Hello World\", data->GetError());\n\n  SetLinkerErrorString(NULL);\n  EXPECT_STREQ(\"\", data->GetError());\n}\n\nTEST(Thread, SetLinkerError) {\n  ThreadData* data = GetThreadData();\n\n  SetLinkerError(\"%s %s!\", \"Hi\", \"Captain\");\n  EXPECT_STREQ(\"Hi Captain!\", data->GetError());\n\n  SetLinkerError(\"Woosh\");\n  EXPECT_STREQ(\"Woosh\", data->GetError());\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_util.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_util.h\"\n\n#include <stdio.h>\n\nnamespace crazy {\n\n// Return the base name from a file path. Important: this is a pointer\n// into the original string.\n// static\nconst char* GetBaseNamePtr(const char* path) {\n  const char* p = strrchr(path, '/');\n  if (!p)\n    return path;\n  else\n    return p + 1;\n}\n\n// static\nconst char String::kEmpty[] = \"\";\n\nString::String() { Init(); }\n\nString::String(const String& other) {\n  Init();\n  Assign(other.ptr_, other.size_);\n}\n\nString::String(const char* str) {\n  Init();\n  Assign(str, strlen(str));\n}\n\nString::String(char ch) {\n  Init();\n  Assign(&ch, 1);\n}\n\nString::~String() {\n  if (ptr_ != const_cast<char*>(kEmpty)) {\n    free(ptr_);\n    ptr_ = const_cast<char*>(kEmpty);\n  }\n}\n\nString::String(const char* str, size_t len) {\n  Init();\n  Assign(str, len);\n}\n\nvoid String::Assign(const char* str, size_t len) {\n  Resize(len);\n  if (len > 0) {\n    memcpy(ptr_, str, len);\n    ptr_[len] = '\\0';\n    size_ = len;\n  }\n}\n\nvoid String::Append(const char* str, size_t len) {\n  if (len > 0) {\n    size_t old_size = size_;\n    Resize(size_ + len);\n    memcpy(ptr_ + old_size, str, len);\n  }\n}\n\nvoid String::Resize(size_t new_size) {\n  if (new_size > capacity_) {\n    size_t new_capacity = capacity_;\n    while (new_capacity < new_size) {\n      new_capacity += (new_capacity >> 1) + 16;\n    }\n    Reserve(new_capacity);\n  }\n\n  if (new_size > size_)\n    memset(ptr_ + size_, '\\0', new_size - size_);\n\n  size_ = new_size;\n  if (ptr_ != kEmpty)\n    ptr_[size_] = '\\0';\n}\n\nvoid String::Reserve(size_t new_capacity) {\n  char* old_ptr = (ptr_ == const_cast<char*>(kEmpty)) ? NULL : ptr_;\n  // Always allocate one more byte for the trailing \\0\n  ptr_ = reinterpret_cast<char*>(realloc(old_ptr, new_capacity + 1));\n  ptr_[new_capacity] = '\\0';\n  capacity_ = new_capacity;\n\n  if (size_ > new_capacity)\n    size_ = new_capacity;\n}\n\n#if 0\nString Format(const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n  String result(FormatArgs(fmt, args));\n  va_end(args);\n  return result;\n}\n\nString FormatArgs(const char* fmt, va_list args) {\n  String result;\n  for (;;) {\n    va_list args2;\n    va_copy(args2, args);\n    int ret = vsnprintf(&result[0], result.capacity(), fmt, args2);\n    va_end(args2);\n    if (static_cast<size_t>(ret) <= result.capacity())\n      break;\n\n    result.Resize(static_cast<size_t>(ret));\n  }\n  return result;\n}\n#endif\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_util.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_UTIL_H\n#define CRAZY_LINKER_UTIL_H\n\n#include <fcntl.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <unistd.h>\n\nnamespace crazy {\n\n// Helper macro to loop around EINTR errors in syscalls.\n#define HANDLE_EINTR(expr) TEMP_FAILURE_RETRY(expr)\n\n// Helper macro to tag unused variables. Use in the declaration, between\n// the type and name, as in:\n//     int CRAZY_UNUSED my_var = 0;\n#define CRAZY_UNUSED __attribute__((unused))\n\n// Helper scoped pointer class.\ntemplate <class T>\nclass ScopedPtr {\n public:\n  ScopedPtr() : ptr_(NULL) {}\n  explicit ScopedPtr(T* ptr) : ptr_(ptr) {}\n  ~ScopedPtr() { Reset(NULL); }\n\n  T* Release() {\n    T* ret = ptr_;\n    ptr_ = NULL;\n    return ret;\n  }\n\n  void Reset(T* ptr) {\n    if (ptr_)\n      delete ptr_;\n    ptr_ = ptr;\n  }\n\n  T* Get() { return ptr_; }\n  T& operator*() { return *ptr_; }\n  T* operator->() { return ptr_; }\n\n private:\n  T* ptr_;\n};\n\n// Return the base name from a file path. Important: this is a pointer\n// into the original string.\nconst char* GetBaseNamePtr(const char* path);\n\n// Helper class used to implement a string. Similar to std::string\n// without all the crazy iterator / iostream stuff.\n//\n// Required because crazy linker should only link against the system\n// libstdc++ that only provides new/delete.\n//\nclass String {\n public:\n  String();\n  String(const char* str, size_t len);\n  String(const String& other);\n  explicit String(const char* str);\n  explicit String(char ch);\n\n  ~String();\n\n  const char* c_str() const { return ptr_; }\n  char* ptr() { return ptr_; }\n  size_t size() const { return size_; }\n  size_t capacity() const { return capacity_; }\n\n  bool IsEmpty() const { return size_ == 0; }\n\n  char& operator[](size_t index) { return ptr_[index]; }\n\n  String& operator=(const String& other) {\n    Assign(other.ptr_, other.size_);\n    return *this;\n  }\n\n  String& operator=(const char* str) {\n    Assign(str, strlen(str));\n    return *this;\n  }\n\n  String& operator=(char ch) {\n    Assign(&ch, 1);\n    return *this;\n  }\n\n  String& operator+=(const String& other) {\n    Append(other);\n    return *this;\n  }\n\n  String& operator+=(const char* str) {\n    Append(str, strlen(str));\n    return *this;\n  }\n\n  String& operator+=(char ch) {\n    Append(&ch, 1);\n    return *this;\n  }\n\n  void Resize(size_t new_size);\n\n  void Reserve(size_t new_capacity);\n\n  void Assign(const char* str, size_t len);\n\n  void Assign(const String& other) { Assign(other.ptr_, other.size_); }\n\n  void Assign(const char* str) { Assign(str, strlen(str)); }\n\n  void Append(const char* str, size_t len);\n\n  void Append(const String& other) { Append(other.ptr_, other.size_); }\n\n  void Append(const char* str) { Append(str, strlen(str)); }\n\n private:\n  void Init(void) {\n    ptr_ = const_cast<char*>(kEmpty);\n    size_ = 0;\n    capacity_ = 0;\n  }\n\n  static const char kEmpty[];\n\n  char* ptr_;\n  size_t size_;\n  size_t capacity_;\n};\n\n// Helper template used to implement a simple vector or POD-struct items.\n// I.e. this uses memmove() to move items during insertion / removal.\n//\n// Required because crazy linker should only link against the system\n// libstdc++ which only provides new/delete.\n//\ntemplate <class T>\nclass Vector {\n public:\n  Vector() : items_(0), count_(0), capacity_(0) {}\n  ~Vector() { free(items_); }\n\n  T& operator[](size_t index) { return items_[index]; }\n\n  bool IsEmpty() const { return count_ == 0; }\n\n  void PushBack(T item) { InsertAt(static_cast<int>(count_), item); }\n\n  T PopFirst() {\n    T result = items_[0];\n    RemoveAt(0);\n    return result;\n  }\n\n  T PopLast() {\n    T result = items_[count_ - 1];\n    Resize(count_ - 1);\n    return result;\n  }\n\n  void Remove(T item) {\n    int index = IndexOf(item);\n    if (index >= 0)\n      RemoveAt(index);\n  }\n\n  void InsertAt(int index, T item);\n\n  void RemoveAt(int index);\n\n  int IndexOf(T item) const;\n\n  bool Has(T item) const { return IndexOf(item) >= 0; }\n\n  size_t GetCount() const { return count_; }\n\n  void Reserve(size_t new_capacity);\n\n  void Resize(size_t new_count);\n\n private:\n  T* items_;\n  size_t count_;\n  size_t capacity_;\n};\n\ntemplate <class T>\nint Vector<T>::IndexOf(T item) const {\n  for (size_t n = 0; n < count_; ++n) {\n    if (items_[n] == item)\n      return static_cast<int>(n);\n  }\n  return -1;\n}\n\ntemplate <class T>\nvoid Vector<T>::InsertAt(int index, T item) {\n  if (count_ >= capacity_)\n    Reserve(capacity_ + (capacity_ >> 1) + 4);\n\n  if (index < 0)\n    index = 0;\n  size_t n = static_cast<size_t>(index);\n  if (n > count_)\n    n = count_;\n  else\n    memmove(items_ + n + 1, items_ + n, (count_ - n) * sizeof(T));\n\n  items_[n] = item;\n  count_++;\n}\n\ntemplate <class T>\nvoid Vector<T>::RemoveAt(int index) {\n  if (index < 0)\n    return;\n\n  size_t n = static_cast<size_t>(index);\n  if (n >= count_)\n    return;\n\n  memmove(items_ + n, items_ + n + 1, (count_ - n - 1) * sizeof(T));\n  count_--;\n}\n\ntemplate <class T>\nvoid Vector<T>::Reserve(size_t new_capacity) {\n  items_ = reinterpret_cast<T*>(realloc(items_, new_capacity * sizeof(T)));\n  capacity_ = new_capacity;\n  if (count_ > capacity_)\n    count_ = capacity_;\n}\n\ntemplate <class T>\nvoid Vector<T>::Resize(size_t new_size) {\n  if (new_size > capacity_)\n    Reserve(new_size);\n\n  if (new_size > count_)\n    memset(items_ + count_, 0, (new_size - count_) * sizeof(T));\n\n  count_ = new_size;\n}\n\n// Helper template class to implement a set.\n// Given that the crazy linker doesn't expect to deal with hundreds\n// of libraries at the same time, implement it with a vector.\ntemplate <class T>\nclass Set {\n public:\n  Set() : items_() {}\n  ~Set() {}\n\n  // Returns the number of items in the set.\n  size_t GetCount() const { return items_.GetCount(); }\n\n  bool IsEmpty() const { return items_.IsEmpty(); }\n\n  // Returns true iff the set contains a given item.\n  bool Has(T item) const { return items_.Has(item); }\n\n  // Add an item to the set. Returns false iff the item was already in it.\n  bool Add(T item);\n\n  // Delete an item from the set. Returns false iff the item was not in it.\n  bool Del(T item);\n\n private:\n  Vector<T> items_;\n};\n\ntemplate <class T>\nbool Set<T>::Add(T item) {\n  int idx = items_.IndexOf(item);\n  if (idx >= 0)\n    return false;\n\n  items_.PushBack(item);\n  return true;\n}\n\ntemplate <class T>\nbool Set<T>::Del(T item) {\n  int idx = items_.IndexOf(item);\n  if (idx < 0)\n    return false;\n  items_.RemoveAt(idx);\n  return true;\n}\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_UTIL_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_util_unittest.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_util.h\"\n\n#include <minitest/minitest.h>\n\nnamespace crazy {\n\nTEST(GetBaseNamePtr, Test) {\n  const char kString[] = \"/tmp/foo\";\n  EXPECT_EQ(kString + 5, GetBaseNamePtr(kString));\n}\n\nTEST(String, Empty) {\n  String s;\n  EXPECT_TRUE(s.IsEmpty());\n  EXPECT_EQ(0u, s.size());\n  EXPECT_EQ('\\0', s.c_str()[0]);\n}\n\nTEST(String, CStringConstructor) {\n  String s(\"Simple\");\n  EXPECT_STREQ(\"Simple\", s.c_str());\n  EXPECT_EQ(6U, s.size());\n}\n\nTEST(String, CStringConstructorWithLength) {\n  String s2(\"Simple\", 3);\n  EXPECT_STREQ(\"Sim\", s2.c_str());\n  EXPECT_EQ(3U, s2.size());\n}\n\nTEST(String, CopyConstructor) {\n  String s1(\"Simple\");\n  String s2(s1);\n\n  EXPECT_EQ(6U, s2.size());\n  EXPECT_STREQ(s2.c_str(), s1.c_str());\n}\n\nTEST(String, CharConstructor) {\n  String s('H');\n  EXPECT_EQ(1U, s.size());\n  EXPECT_STREQ(\"H\", s.c_str());\n}\n\nTEST(String, AppendCString) {\n  String s(\"Foo\");\n  s += \"Bar\";\n  EXPECT_STREQ(\"FooBar\", s.c_str());\n  s += \"Zoo\";\n  EXPECT_STREQ(\"FooBarZoo\", s.c_str());\n}\n\nTEST(String, AppendOther) {\n  String s(\"Foo\");\n  String s2(\"Bar\");\n  s += s2;\n  EXPECT_STREQ(\"FooBar\", s.c_str());\n}\n\nTEST(String, ArrayAccess) {\n  String s(\"FooBar\");\n  EXPECT_EQ('F', s[0]);\n  EXPECT_EQ('o', s[1]);\n  EXPECT_EQ('o', s[2]);\n  EXPECT_EQ('B', s[3]);\n  EXPECT_EQ('a', s[4]);\n  EXPECT_EQ('r', s[5]);\n  EXPECT_EQ('\\0', s[6]);\n}\n\nTEST(String, Resize) {\n  String s(\"A very long string to have fun\");\n  s.Resize(10);\n  EXPECT_EQ(10U, s.size());\n  EXPECT_STREQ(\"A very lon\", s.c_str());\n}\n\nTEST(String, ResizeToZero) {\n  String s(\"Long string to force a dynamic allocation\");\n  s.Resize(0);\n  EXPECT_EQ(0U, s.size());\n  EXPECT_STREQ(\"\", s.c_str());\n}\n\nTEST(Vector, IsEmpty) {\n  Vector<void*> v;\n  EXPECT_TRUE(v.IsEmpty());\n}\n\nTEST(Vector, PushBack) {\n  Vector<int> v;\n  v.PushBack(12345);\n  EXPECT_FALSE(v.IsEmpty());\n  EXPECT_EQ(1U, v.GetCount());\n  EXPECT_EQ(12345, v[0]);\n}\n\nTEST(Vector, PushBack2) {\n  const int kMaxCount = 500;\n  Vector<int> v;\n  for (int n = 0; n < kMaxCount; ++n)\n    v.PushBack(n * 100);\n\n  EXPECT_FALSE(v.IsEmpty());\n  EXPECT_EQ(static_cast<size_t>(kMaxCount), v.GetCount());\n}\n\nTEST(Vector, At) {\n  const int kMaxCount = 500;\n  Vector<int> v;\n  for (int n = 0; n < kMaxCount; ++n)\n    v.PushBack(n * 100);\n\n  for (int n = 0; n < kMaxCount; ++n) {\n    TEST_TEXT << \"Checking v[\" << n << \"]\";\n    EXPECT_EQ(n * 100, v[n]);\n  }\n}\n\nTEST(Vector, IndexOf) {\n  const int kMaxCount = 500;\n  Vector<int> v;\n  for (int n = 0; n < kMaxCount; ++n)\n    v.PushBack(n * 100);\n\n  for (int n = 0; n < kMaxCount; ++n) {\n    TEST_TEXT << \"Checking v.IndexOf(\" << n * 100 << \")\";\n    EXPECT_EQ(n, v.IndexOf(n * 100));\n  }\n}\n\nTEST(Vector, InsertAt) {\n  const int kMaxCount = 500;\n\n  for (size_t k = 0; k < kMaxCount; ++k) {\n    Vector<int> v;\n    for (int n = 0; n < kMaxCount; ++n)\n      v.PushBack(n * 100);\n\n    v.InsertAt(k, -1000);\n\n    EXPECT_EQ(kMaxCount + 1, v.GetCount());\n    for (int n = 0; n < v.GetCount(); ++n) {\n      TEST_TEXT << \"Checking v[\" << n << \"]\";\n      int expected;\n      if (n < k)\n        expected = n * 100;\n      else if (n == k)\n        expected = -1000;\n      else\n        expected = (n - 1) * 100;\n      EXPECT_EQ(expected, v[n]);\n    }\n  }\n}\n\nTEST(Vector, RemoveAt) {\n  const int kMaxCount = 500;\n\n  for (size_t k = 0; k < kMaxCount; ++k) {\n    Vector<int> v;\n    for (int n = 0; n < kMaxCount; ++n)\n      v.PushBack(n * 100);\n\n    v.RemoveAt(k);\n\n    EXPECT_EQ(kMaxCount - 1, v.GetCount());\n    for (int n = 0; n < kMaxCount - 1; ++n) {\n      TEST_TEXT << \"Checking v[\" << n << \"]\";\n      int expected = (n < k) ? (n * 100) : ((n + 1) * 100);\n      EXPECT_EQ(expected, v[n]);\n    }\n  }\n}\n\nTEST(Vector, PopFirst) {\n  const int kMaxCount = 500;\n  Vector<int> v;\n  for (int n = 0; n < kMaxCount; ++n)\n    v.PushBack(n * 100);\n\n  for (int n = 0; n < kMaxCount; ++n) {\n    int first = v.PopFirst();\n    TEST_TEXT << \"Checking \" << n << \"-th PopFirst()\";\n    EXPECT_EQ(n * 100, first);\n    EXPECT_EQ(kMaxCount - 1 - n, v.GetCount());\n  }\n  EXPECT_EQ(0u, v.GetCount());\n  EXPECT_TRUE(v.IsEmpty());\n}\n\nTEST(Set, Empty) {\n  Set<int> s;\n  EXPECT_TRUE(s.IsEmpty());\n  EXPECT_EQ(0U, s.GetCount());\n}\n\nTEST(Set, OneItem) {\n  Set<int> s;\n\n  EXPECT_FALSE(s.Has(0));\n\n  EXPECT_TRUE(s.Add(0));\n  EXPECT_TRUE(s.Has(0));\n  EXPECT_FALSE(s.IsEmpty());\n  EXPECT_EQ(1U, s.GetCount());\n}\n\nTEST(Set, ThreeItems) {\n  Set<int> s;\n\n  EXPECT_TRUE(s.Add(0));\n  EXPECT_TRUE(s.Add(1));\n  EXPECT_TRUE(s.Add(2));\n\n  EXPECT_FALSE(s.Has(-1));\n  EXPECT_TRUE(s.Has(0));\n  EXPECT_TRUE(s.Has(1));\n  EXPECT_TRUE(s.Has(2));\n  EXPECT_FALSE(s.Has(3));\n\n  EXPECT_EQ(3U, s.GetCount());\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_wrappers.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include \"crazy_linker_wrappers.h\"\n\n#include <dlfcn.h>\n#include <link.h>\n\n#include \"crazy_linker_debug.h\"\n#include \"crazy_linker_globals.h\"\n#include \"crazy_linker_library_list.h\"\n#include \"crazy_linker_library_view.h\"\n#include \"crazy_linker_shared_library.h\"\n#include \"crazy_linker_thread.h\"\n#include \"crazy_linker_util.h\"\n\n#ifdef __arm__\n// On ARM, this function is exported by the dynamic linker but never\n// declared in any official header. It is used at runtime to\n// find the base address of the .ARM.exidx section for the\n// shared library containing the instruction at |pc|, as well as\n// the number of 8-byte entries in that section, written into |*pcount|\nextern \"C\" _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr, int*);\n#else\n// On other architectures, this function is exported by the dynamic linker\n// but never declared in any official header. It is used at runtime to\n// iterate over all loaded libraries and call the |cb|. When the function\n// returns non-0, the iteration returns and the function returns its\n// value.\nextern \"C\" int dl_iterate_phdr(int (*cb)(dl_phdr_info* info,\n                                         size_t size,\n                                         void* data),\n                               void* data);\n#endif\n\nnamespace crazy {\n\nnamespace {\n\n#ifdef __arm__\nextern \"C\" int __cxa_atexit(void (*)(void*), void*, void*);\n\n// On ARM, this function is defined as a weak symbol by libc.so.\n// Unfortunately its address cannot be found through dlsym(), which will\n// always return NULL. To work-around this, define a copy here that does\n// exactly the same thing. The ARM EABI mandates the function's behaviour.\n// __cxa_atexit() is implemented by the C library, but not declared by\n// any official header. It's part of the low-level C++ support runtime.\nint __aeabi_atexit(void* object, void (*destructor)(void*), void* dso_handle) {\n  return __cxa_atexit(destructor, object, dso_handle);\n}\n#endif\n\n// Used to save the system dlerror() into our thread-specific data.\nvoid SaveSystemError() {\n  ThreadData* data = GetThreadData();\n  data->SetError(::dlerror());\n}\n\nchar* WrapDlerror() {\n  ThreadData* data = GetThreadData();\n  const char* error = data->GetError();\n  data->SwapErrorBuffers();\n  // dlerror() returns a 'char*', but no sane client code should ever\n  // try to write to this location.\n  return const_cast<char*>(error);\n}\n\nvoid* WrapDlopen(const char* path, int mode) {\n  ScopedGlobalLock lock;\n\n  // NOTE: If |path| is NULL, the wrapper should return a handle\n  // corresponding to the current executable. This can't be a crazy\n  // library, so don't try to handle it with the crazy linker.\n  if (path) {\n    LibraryList* lib_list = Globals::GetLibraries();\n    Error error;\n    LibraryView* wrap = lib_list->LoadLibrary(path,\n                                              mode,\n                                              0U /* load_address */,\n                                              0U /* file_offset */,\n                                              Globals::GetSearchPaths(),\n                                              &error);\n    if (wrap)\n      return wrap;\n  }\n\n  // Try to load the executable with the system dlopen() instead.\n  ::dlerror();\n  void* system_lib = ::dlopen(path, mode);\n  if (system_lib == NULL) {\n    SaveSystemError();\n    return NULL;\n  }\n\n  LibraryView* wrap_lib = new LibraryView();\n  wrap_lib->SetSystem(system_lib, path ? path : \"<executable>\");\n  Globals::GetLibraries()->AddLibrary(wrap_lib);\n  return wrap_lib;\n}\n\nvoid* WrapDlsym(void* lib_handle, const char* symbol_name) {\n  LibraryView* wrap_lib = reinterpret_cast<LibraryView*>(lib_handle);\n\n  if (!symbol_name) {\n    SetLinkerError(\"dlsym: NULL symbol name\");\n    return NULL;\n  }\n\n  if (!lib_handle) {\n    SetLinkerError(\"dlsym: NULL library handle\");\n    return NULL;\n  }\n\n  // TODO(digit): Handle RTLD_DEFAULT / RTLD_NEXT\n  if (lib_handle == RTLD_DEFAULT || lib_handle == RTLD_NEXT) {\n    SetLinkerError(\"dlsym: RTLD_DEFAULT/RTLD_NEXT are not implemented!\");\n    return NULL;\n  }\n\n  // NOTE: The Android dlsym() only looks inside the target library,\n  // while the GNU one will perform a breadth-first search into its\n  // dependency tree.\n\n  // This implementation performs a correct breadth-first search\n  // when |lib_handle| corresponds to a crazy library, except that\n  // it stops at system libraries that it depends on.\n\n  void* result = NULL;\n\n  if (wrap_lib->IsSystem()) {\n    // Note: the system dlsym() only looks into the target library,\n    // while the GNU linker performs a breadth-first search.\n    result = ::dlsym(wrap_lib->GetSystem(), symbol_name);\n    if (!result) {\n      SaveSystemError();\n      LOG(\"dlsym:%s: could not find symbol '%s' from system library\\n%s\",\n          wrap_lib->GetName(),\n          symbol_name,\n          GetThreadData()->GetError());\n    }\n    return result;\n  }\n\n  if (wrap_lib->IsCrazy()) {\n    ScopedGlobalLock lock;\n    LibraryList* lib_list = Globals::GetLibraries();\n    void* addr = lib_list->FindSymbolFrom(symbol_name, wrap_lib);\n    if (addr)\n      return addr;\n\n    SetLinkerError(\"dlsym: Could not find '%s' from library '%s'\",\n                   symbol_name,\n                   wrap_lib->GetName());\n    return NULL;\n  }\n\n  SetLinkerError(\"dlsym: Invalid library handle %p looking for '%s'\",\n                 lib_handle,\n                 symbol_name);\n  return NULL;\n}\n\nint WrapDladdr(void* address, Dl_info* info) {\n  // First, perform search in crazy libraries.\n  {\n    ScopedGlobalLock lock;\n    LibraryList* lib_list = Globals::GetLibraries();\n    LibraryView* wrap = lib_list->FindLibraryForAddress(address);\n    if (wrap && wrap->IsCrazy()) {\n      size_t sym_size = 0;\n\n      SharedLibrary* lib = wrap->GetCrazy();\n      ::memset(info, 0, sizeof(*info));\n      info->dli_fname = lib->base_name();\n      info->dli_fbase = reinterpret_cast<void*>(lib->load_address());\n\n      // Determine if any symbol in the library contains the specified address.\n      (void)lib->FindNearestSymbolForAddress(\n          address, &info->dli_sname, &info->dli_saddr, &sym_size);\n      return 0;\n    }\n  }\n  // Otherwise, use system version.\n  ::dlerror();\n  int ret = ::dladdr(address, info);\n  if (ret != 0)\n    SaveSystemError();\n  return ret;\n}\n\nint WrapDlclose(void* lib_handle) {\n  LibraryView* wrap_lib = reinterpret_cast<LibraryView*>(lib_handle);\n  if (!wrap_lib) {\n    SetLinkerError(\"NULL library handle\");\n    return -1;\n  }\n\n  if (wrap_lib->IsSystem() || wrap_lib->IsCrazy()) {\n    ScopedGlobalLock lock;\n    LibraryList* lib_list = Globals::GetLibraries();\n    lib_list->UnloadLibrary(wrap_lib);\n    return 0;\n  }\n\n  // Invalid library handle!!\n  SetLinkerError(\"Invalid library handle %p\", lib_handle);\n  return -1;\n}\n\n#ifdef __arm__\n_Unwind_Ptr WrapDl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) {\n  // First lookup in crazy libraries.\n  {\n    ScopedGlobalLock lock;\n    LibraryList* list = Globals::GetLibraries();\n    _Unwind_Ptr result = list->FindArmExIdx(pc, pcount);\n    if (result)\n      return result;\n  }\n  // Lookup in system libraries.\n  return ::dl_unwind_find_exidx(pc, pcount);\n}\n#else  // !__arm__\nint WrapDl_iterate_phdr(int (*cb)(dl_phdr_info*, size_t, void*), void* data) {\n  // First, iterate over crazy libraries.\n  {\n    ScopedGlobalLock lock;\n    LibraryList* list = Globals::GetLibraries();\n    int result = list->IteratePhdr(cb, data);\n    if (result)\n      return result;\n  }\n  // Then lookup through system ones.\n  return ::dl_iterate_phdr(cb, data);\n}\n#endif  // !__arm__\n\n}  // namespace\n\nvoid* WrapLinkerSymbol(const char* name) {\n  // Shortcut, since all names begin with 'dl'\n  // Take care of __aeabi_atexit on ARM though.\n  if (name[0] != 'd' || name[1] != 'l') {\n#ifdef __arm__\n    if (name[0] == '_' && !strcmp(\"__aeabi_atexit\", name))\n      return reinterpret_cast<void*>(&__aeabi_atexit);\n#endif\n    return NULL;\n  }\n\n  static const struct {\n    const char* name;\n    void* address;\n  } kSymbols[] = {\n        {\"dlopen\", reinterpret_cast<void*>(&WrapDlopen)},\n        {\"dlclose\", reinterpret_cast<void*>(&WrapDlclose)},\n        {\"dlerror\", reinterpret_cast<void*>(&WrapDlerror)},\n        {\"dlsym\", reinterpret_cast<void*>(&WrapDlsym)},\n        {\"dladdr\", reinterpret_cast<void*>(&WrapDladdr)},\n#ifdef __arm__\n        {\"dl_unwind_find_exidx\",\n         reinterpret_cast<void*>(&WrapDl_unwind_find_exidx)},\n#else\n        {\"dl_iterate_phdr\", reinterpret_cast<void*>(&WrapDl_iterate_phdr)},\n#endif\n    };\n  static const size_t kCount = sizeof(kSymbols) / sizeof(kSymbols[0]);\n  for (size_t n = 0; n < kCount; ++n) {\n    if (!strcmp(kSymbols[n].name, name))\n      return kSymbols[n].address;\n  }\n  return NULL;\n}\n\n}  // namespace crazy\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/crazy_linker_wrappers.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef CRAZY_LINKER_WRAPPERS_H\n#define CRAZY_LINKER_WRAPPERS_H\n\nnamespace crazy {\n\n// If |symbol_name| is the name of a linker-specific symbol name, like\n// 'dlopen' or 'dlsym', return the address of the corresponding wrapper.\n// Return NULL otherwise.\nvoid* WrapLinkerSymbol(const char* symbol_name);\n\n}  // namespace crazy\n\n#endif  // CRAZY_LINKER_WRAPPERS_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/elf_traits.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#ifndef _ELF_TRAITS_H_\n#define _ELF_TRAITS_H_\n\n// NOTE: <stdint.h> is required here before <elf.h>. This is a NDK header bug.\n#include <stdint.h>\n#include <elf.h>\n\n// ELF is a traits structure used to provide convenient aliases for\n// 32/64 bit Elf types, depending on the target CPU bitness.\n#if __SIZEOF_POINTER__ == 4\nstruct ELF {\n  typedef Elf32_Ehdr Ehdr;\n  typedef Elf32_Phdr Phdr;\n  typedef Elf32_Word Word;\n  typedef Elf32_Sword Sword;\n  typedef Elf32_Addr Addr;\n  typedef Elf32_Dyn Dyn;\n  typedef Elf32_Sym Sym;\n  typedef Elf32_Rel Rel;\n  typedef Elf32_Rela Rela;\n  typedef Elf32_auxv_t auxv_t;\n\n  enum { kElfClass = ELFCLASS32 };\n  enum { kElfBits = 32 };\n\n#ifndef ELF_R_TYPE\n#define ELF_R_TYPE ELF32_R_TYPE\n#endif\n\n#ifndef ELF_R_SYM\n#define ELF_R_SYM ELF32_R_SYM\n#endif\n};\n#elif __SIZEOF_POINTER__ == 8\nstruct ELF {\n  typedef Elf64_Ehdr Ehdr;\n  typedef Elf64_Phdr Phdr;\n  typedef Elf64_Word Word;\n  typedef Elf64_Sword Sword;\n  typedef Elf64_Addr Addr;\n  typedef Elf64_Dyn Dyn;\n  typedef Elf64_Sym Sym;\n  typedef Elf64_Rel Rel;\n  typedef Elf64_Rela Rela;\n  typedef Elf64_auxv_t auxv_t;\n\n  enum { kElfClass = ELFCLASS64 };\n  enum { kElfBits = 64 };\n\n#ifndef ELF_R_TYPE\n#define ELF_R_TYPE ELF64_R_TYPE\n#endif\n\n#ifndef ELF_R_SYM\n#define ELF_R_SYM ELF64_R_SYM\n#endif\n};\n#else\n#error \"Unsupported target CPU bitness\"\n#endif\n\n#ifdef __arm__\n#define ELF_MACHINE EM_ARM\n#elif defined(__i386__)\n#define ELF_MACHINE EM_386\n#elif defined(__mips__) && !defined(__LP64__)  // mips64el defines __mips__ too\n#define ELF_MACHINE EM_MIPS\n#elif defined(__aarch64__)\n#define ELF_MACHINE EM_AARCH64\n#else\n#error \"Unsupported target CPU architecture\"\n#endif\n\n#endif  // _ELF_TRAITS_H_\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/linker_phdr.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n/*\n * Copyright (C) 2012 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include \"linker_phdr.h\"\n\n#include <errno.h>\n#include <fcntl.h>\n#include <sys/mman.h>\n#include <unistd.h>\n\n#define PAGE_START(x) ((x) & PAGE_MASK)\n#define PAGE_OFFSET(x) ((x) & ~PAGE_MASK)\n#define PAGE_END(x) PAGE_START((x) + (PAGE_SIZE - 1))\n\n// Missing exec_elf.h definitions.\n#ifndef PT_GNU_RELRO\n#define PT_GNU_RELRO 0x6474e552\n#endif\n\n/**\n  TECHNICAL NOTE ON ELF LOADING.\n\n  An ELF file's program header table contains one or more PT_LOAD\n  segments, which corresponds to portions of the file that need to\n  be mapped into the process' address space.\n\n  Each loadable segment has the following important properties:\n\n    p_offset  -> segment file offset\n    p_filesz  -> segment file size\n    p_memsz   -> segment memory size (always >= p_filesz)\n    p_vaddr   -> segment's virtual address\n    p_flags   -> segment flags (e.g. readable, writable, executable)\n\n  We will ignore the p_paddr and p_align fields of ELF::Phdr for now.\n\n  The loadable segments can be seen as a list of [p_vaddr ... p_vaddr+p_memsz)\n  ranges of virtual addresses. A few rules apply:\n\n  - the virtual address ranges should not overlap.\n\n  - if a segment's p_filesz is smaller than its p_memsz, the extra bytes\n    between them should always be initialized to 0.\n\n  - ranges do not necessarily start or end at page boundaries. Two distinct\n    segments can have their start and end on the same page. In this case, the\n    page inherits the mapping flags of the latter segment.\n\n  Finally, the real load addrs of each segment is not p_vaddr. Instead the\n  loader decides where to load the first segment, then will load all others\n  relative to the first one to respect the initial range layout.\n\n  For example, consider the following list:\n\n    [ offset:0,      filesz:0x4000, memsz:0x4000, vaddr:0x30000 ],\n    [ offset:0x4000, filesz:0x2000, memsz:0x8000, vaddr:0x40000 ],\n\n  This corresponds to two segments that cover these virtual address ranges:\n\n       0x30000...0x34000\n       0x40000...0x48000\n\n  If the loader decides to load the first segment at address 0xa0000000\n  then the segments' load address ranges will be:\n\n       0xa0030000...0xa0034000\n       0xa0040000...0xa0048000\n\n  In other words, all segments must be loaded at an address that has the same\n  constant offset from their p_vaddr value. This offset is computed as the\n  difference between the first segment's load address, and its p_vaddr value.\n\n  However, in practice, segments do _not_ start at page boundaries. Since we\n  can only memory-map at page boundaries, this means that the bias is\n  computed as:\n\n       load_bias = phdr0_load_address - PAGE_START(phdr0->p_vaddr)\n\n  (NOTE: The value must be used as a 32-bit unsigned integer, to deal with\n          possible wrap around UINT32_MAX for possible large p_vaddr values).\n\n  And that the phdr0_load_address must start at a page boundary, with\n  the segment's real content starting at:\n\n       phdr0_load_address + PAGE_OFFSET(phdr0->p_vaddr)\n\n  Note that ELF requires the following condition to make the mmap()-ing work:\n\n      PAGE_OFFSET(phdr0->p_vaddr) == PAGE_OFFSET(phdr0->p_offset)\n\n  The load_bias must be added to any p_vaddr value read from the ELF file to\n  determine the corresponding memory address.\n\n **/\n\n#define MAYBE_MAP_FLAG(x, from, to) (((x) & (from)) ? (to) : 0)\n#define PFLAGS_TO_PROT(x)                 \\\n  (MAYBE_MAP_FLAG((x), PF_X, PROT_EXEC) | \\\n   MAYBE_MAP_FLAG((x), PF_R, PROT_READ) | \\\n   MAYBE_MAP_FLAG((x), PF_W, PROT_WRITE))\n\n/* Returns the size of the extent of all the possibly non-contiguous\n * loadable segments in an ELF program header table. This corresponds\n * to the page-aligned size in bytes that needs to be reserved in the\n * process' address space. If there are no loadable segments, 0 is\n * returned.\n *\n * If out_min_vaddr or out_max_vaddr are non-NULL, they will be\n * set to the minimum and maximum addresses of pages to be reserved,\n * or 0 if there is nothing to load.\n */\nsize_t phdr_table_get_load_size(const ELF::Phdr* phdr_table,\n                                size_t phdr_count,\n                                ELF::Addr* out_min_vaddr,\n                                ELF::Addr* out_max_vaddr) {\n  ELF::Addr min_vaddr = ~static_cast<ELF::Addr>(0);\n  ELF::Addr max_vaddr = 0x00000000U;\n\n  bool found_pt_load = false;\n  for (size_t i = 0; i < phdr_count; ++i) {\n    const ELF::Phdr* phdr = &phdr_table[i];\n\n    if (phdr->p_type != PT_LOAD) {\n      continue;\n    }\n    found_pt_load = true;\n\n    if (phdr->p_vaddr < min_vaddr) {\n      min_vaddr = phdr->p_vaddr;\n    }\n\n    if (phdr->p_vaddr + phdr->p_memsz > max_vaddr) {\n      max_vaddr = phdr->p_vaddr + phdr->p_memsz;\n    }\n  }\n  if (!found_pt_load) {\n    min_vaddr = 0x00000000U;\n  }\n\n  min_vaddr = PAGE_START(min_vaddr);\n  max_vaddr = PAGE_END(max_vaddr);\n\n  if (out_min_vaddr != NULL) {\n    *out_min_vaddr = min_vaddr;\n  }\n  if (out_max_vaddr != NULL) {\n    *out_max_vaddr = max_vaddr;\n  }\n  return max_vaddr - min_vaddr;\n}\n\n/* Used internally. Used to set the protection bits of all loaded segments\n * with optional extra flags (i.e. really PROT_WRITE). Used by\n * phdr_table_protect_segments and phdr_table_unprotect_segments.\n */\nstatic int _phdr_table_set_load_prot(const ELF::Phdr* phdr_table,\n                                     int phdr_count,\n                                     ELF::Addr load_bias,\n                                     int extra_prot_flags) {\n  const ELF::Phdr* phdr = phdr_table;\n  const ELF::Phdr* phdr_limit = phdr + phdr_count;\n\n  for (; phdr < phdr_limit; phdr++) {\n    if (phdr->p_type != PT_LOAD || (phdr->p_flags & PF_W) != 0)\n      continue;\n\n    ELF::Addr seg_page_start = PAGE_START(phdr->p_vaddr) + load_bias;\n    ELF::Addr seg_page_end =\n        PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias;\n\n    int ret = mprotect((void*)seg_page_start,\n                       seg_page_end - seg_page_start,\n                       PFLAGS_TO_PROT(phdr->p_flags) | extra_prot_flags);\n    if (ret < 0) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/* Restore the original protection modes for all loadable segments.\n * You should only call this after phdr_table_unprotect_segments and\n * applying all relocations.\n *\n * Input:\n *   phdr_table  -> program header table\n *   phdr_count  -> number of entries in tables\n *   load_bias   -> load bias\n * Return:\n *   0 on error, -1 on failure (error code in errno).\n */\nint phdr_table_protect_segments(const ELF::Phdr* phdr_table,\n                                int phdr_count,\n                                ELF::Addr load_bias) {\n  return _phdr_table_set_load_prot(phdr_table, phdr_count, load_bias, 0);\n}\n\n/* Change the protection of all loaded segments in memory to writable.\n * This is useful before performing relocations. Once completed, you\n * will have to call phdr_table_protect_segments to restore the original\n * protection flags on all segments.\n *\n * Note that some writable segments can also have their content turned\n * to read-only by calling phdr_table_protect_gnu_relro. This is no\n * performed here.\n *\n * Input:\n *   phdr_table  -> program header table\n *   phdr_count  -> number of entries in tables\n *   load_bias   -> load bias\n * Return:\n *   0 on error, -1 on failure (error code in errno).\n */\nint phdr_table_unprotect_segments(const ELF::Phdr* phdr_table,\n                                  int phdr_count,\n                                  ELF::Addr load_bias) {\n  return _phdr_table_set_load_prot(\n      phdr_table, phdr_count, load_bias, PROT_WRITE);\n}\n\n/* Return the extend of the GNU RELRO segment in a program header.\n * On success, return 0 and sets |*relro_start| and |*relro_end|\n * to the page-aligned extents of the RELRO section.\n * On failure, return -1.\n *\n * NOTE: This assumes there is a single PT_GNU_RELRO segment in the\n * program header, i.e. it will return the extents of the first entry.\n */\nint phdr_table_get_relro_info(const ELF::Phdr* phdr_table,\n                              int phdr_count,\n                              ELF::Addr load_bias,\n                              ELF::Addr* relro_start,\n                              ELF::Addr* relro_size) {\n  const ELF::Phdr* phdr;\n  const ELF::Phdr* phdr_limit = phdr_table + phdr_count;\n\n  for (phdr = phdr_table; phdr < phdr_limit; ++phdr) {\n    if (phdr->p_type != PT_GNU_RELRO)\n      continue;\n\n    /* Tricky: what happens when the relro segment does not start\n     * or end at page boundaries?. We're going to be over-protective\n     * here and put every page touched by the segment as read-only.\n     *\n     * This seems to match Ian Lance Taylor's description of the\n     * feature at http://www.airs.com/blog/archives/189.\n     *\n     * Extract:\n     *    Note that the current dynamic linker code will only work\n     *    correctly if the PT_GNU_RELRO segment starts on a page\n     *    boundary. This is because the dynamic linker rounds the\n     *    p_vaddr field down to the previous page boundary. If\n     *    there is anything on the page which should not be read-only,\n     *    the program is likely to fail at runtime. So in effect the\n     *    linker must only emit a PT_GNU_RELRO segment if it ensures\n     *    that it starts on a page boundary.\n     */\n    *relro_start = PAGE_START(phdr->p_vaddr) + load_bias;\n    *relro_size =\n        PAGE_END(phdr->p_vaddr + phdr->p_memsz) + load_bias - *relro_start;\n    return 0;\n  }\n\n  return -1;\n}\n\n/* Apply GNU relro protection if specified by the program header. This will\n * turn some of the pages of a writable PT_LOAD segment to read-only, as\n * specified by one or more PT_GNU_RELRO segments. This must be always\n * performed after relocations.\n *\n * The areas typically covered are .got and .data.rel.ro, these are\n * read-only from the program's POV, but contain absolute addresses\n * that need to be relocated before use.\n *\n * Input:\n *   phdr_table  -> program header table\n *   phdr_count  -> number of entries in tables\n *   load_bias   -> load bias\n * Return:\n *   0 on error, -1 on failure (error code in errno).\n */\nint phdr_table_protect_gnu_relro(const ELF::Phdr* phdr_table,\n                                 int phdr_count,\n                                 ELF::Addr load_bias) {\n  ELF::Addr relro_start, relro_size;\n\n  if (phdr_table_get_relro_info(\n          phdr_table, phdr_count, load_bias, &relro_start, &relro_size) < 0) {\n    return -1;\n  }\n\n  return mprotect((void*)relro_start, relro_size, PROT_READ);\n}\n\n#ifdef __arm__\n\n#ifndef PT_ARM_EXIDX\n#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */\n#endif\n\n/* Return the address and size of the .ARM.exidx section in memory,\n * if present.\n *\n * Input:\n *   phdr_table  -> program header table\n *   phdr_count  -> number of entries in tables\n *   load_bias   -> load bias\n * Output:\n *   arm_exidx       -> address of table in memory (NULL on failure).\n *   arm_exidx_count -> number of items in table (0 on failure).\n * Return:\n *   0 on error, -1 on failure (_no_ error code in errno)\n */\nint phdr_table_get_arm_exidx(const ELF::Phdr* phdr_table,\n                             int phdr_count,\n                             ELF::Addr load_bias,\n                             ELF::Addr** arm_exidx,\n                             unsigned* arm_exidx_count) {\n  const ELF::Phdr* phdr = phdr_table;\n  const ELF::Phdr* phdr_limit = phdr + phdr_count;\n\n  for (phdr = phdr_table; phdr < phdr_limit; phdr++) {\n    if (phdr->p_type != PT_ARM_EXIDX)\n      continue;\n\n    *arm_exidx = (ELF::Addr*)(load_bias + phdr->p_vaddr);\n    *arm_exidx_count = (unsigned)(phdr->p_memsz / 8);\n    return 0;\n  }\n  *arm_exidx = NULL;\n  *arm_exidx_count = 0;\n  return -1;\n}\n#endif  // __arm__\n\n/* Return the address and size of the ELF file's .dynamic section in memory,\n * or NULL if missing.\n *\n * Input:\n *   phdr_table  -> program header table\n *   phdr_count  -> number of entries in tables\n *   load_bias   -> load bias\n * Output:\n *   dynamic       -> address of table in memory (NULL on failure).\n *   dynamic_count -> number of items in table (0 on failure).\n *   dynamic_flags -> protection flags for section (unset on failure)\n * Return:\n *   void\n */\nvoid phdr_table_get_dynamic_section(const ELF::Phdr* phdr_table,\n                                    int phdr_count,\n                                    ELF::Addr load_bias,\n                                    const ELF::Dyn** dynamic,\n                                    size_t* dynamic_count,\n                                    ELF::Word* dynamic_flags) {\n  const ELF::Phdr* phdr = phdr_table;\n  const ELF::Phdr* phdr_limit = phdr + phdr_count;\n\n  for (phdr = phdr_table; phdr < phdr_limit; phdr++) {\n    if (phdr->p_type != PT_DYNAMIC) {\n      continue;\n    }\n\n    *dynamic = reinterpret_cast<const ELF::Dyn*>(load_bias + phdr->p_vaddr);\n    if (dynamic_count) {\n      *dynamic_count = (unsigned)(phdr->p_memsz / sizeof(ELF::Dyn));\n    }\n    if (dynamic_flags) {\n      *dynamic_flags = phdr->p_flags;\n    }\n    return;\n  }\n  *dynamic = NULL;\n  if (dynamic_count) {\n    *dynamic_count = 0;\n  }\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/src/linker_phdr.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n/*\n * Copyright (C) 2012 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n#ifndef LINKER_PHDR_H\n#define LINKER_PHDR_H\n\n/* Declarations related to the ELF program header table and segments.\n *\n * The design goal is to provide an API that is as close as possible\n * to the ELF spec, and does not depend on linker-specific data\n * structures (e.g. the exact layout of struct soinfo).\n */\n\n#include \"elf_traits.h\"\n\nsize_t phdr_table_get_load_size(const ELF::Phdr* phdr_table,\n                                size_t phdr_count,\n                                ELF::Addr* min_vaddr = NULL,\n                                ELF::Addr* max_vaddr = NULL);\n\nint phdr_table_protect_segments(const ELF::Phdr* phdr_table,\n                                int phdr_count,\n                                ELF::Addr load_bias);\n\nint phdr_table_unprotect_segments(const ELF::Phdr* phdr_table,\n                                  int phdr_count,\n                                  ELF::Addr load_bias);\n\nint phdr_table_get_relro_info(const ELF::Phdr* phdr_table,\n                              int phdr_count,\n                              ELF::Addr load_bias,\n                              ELF::Addr* relro_start,\n                              ELF::Addr* relro_size);\n\nint phdr_table_protect_gnu_relro(const ELF::Phdr* phdr_table,\n                                 int phdr_count,\n                                 ELF::Addr load_bias);\n\n#ifdef __arm__\nint phdr_table_get_arm_exidx(const ELF::Phdr* phdr_table,\n                             int phdr_count,\n                             ELF::Addr load_bias,\n                             ELF::Addr** arm_exidx,\n                             unsigned* arm_exidix_count);\n#endif\n\nvoid phdr_table_get_dynamic_section(const ELF::Phdr* phdr_table,\n                                    int phdr_count,\n                                    ELF::Addr load_bias,\n                                    const ELF::Dyn** dynamic,\n                                    size_t* dynamic_count,\n                                    ELF::Word* dynamic_flags);\n\n#endif /* LINKER_PHDR_H */\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/Android.mk",
    "content": "# Copyright (c) 2013 The Chromium Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style license that can be\n# found in the LICENSE file.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo2\nLOCAL_SRC_FILES := foo2.cpp\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo_with_static_constructor\nLOCAL_SRC_FILES := foo_with_static_constructor.cpp\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo_with_relro\nLOCAL_SRC_FILES := foo_with_relro.cpp\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar\nLOCAL_SRC_FILES := bar.cpp\nLOCAL_SHARED_LIBRARIES := libfoo\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar_with_relro\nLOCAL_SRC_FILES := bar_with_relro.cpp\nLOCAL_SHARED_LIBRARIES := libfoo_with_relro\nLOCAL_LDLIBS := -llog\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libzoo\nLOCAL_SRC_FILES := zoo.cpp\nLOCAL_LDLIBS := -ldl\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libjni_lib\nLOCAL_SRC_FILES := jni_lib.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_load_library\nLOCAL_SRC_FILES := test_load_library.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_load_library_depends\nLOCAL_SRC_FILES := test_load_library_depends.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_load_library_callbacks\nLOCAL_SRC_FILES := test_load_library_callbacks.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_dl_wrappers\nLOCAL_SRC_FILES := test_dl_wrappers.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_constructors_destructors\nLOCAL_SRC_FILES := test_constructors_destructors.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_shared_relro\nLOCAL_SRC_FILES := test_shared_relro.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_relocated_shared_relro\nLOCAL_SRC_FILES := test_relocated_shared_relro.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_two_shared_relros\nLOCAL_SRC_FILES := test_two_shared_relros.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_search_path_list\nLOCAL_SRC_FILES := test_search_path_list.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_jni_hooks\nLOCAL_SRC_FILES := test_jni_hooks.cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\n\n\nifneq (,$(strip $(CRAZY_BENCH)))\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := bench_load_library\nLOCAL_SRC_FILES := $(LOCAL_MODULE).cpp\nLOCAL_STATIC_LIBRARIES := crazy_linker\ninclude $(BUILD_EXECUTABLE)\nendif\n\ninclude $(LOCAL_PATH)/../Android.mk\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/bar.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <android/log.h>\n#include <stdio.h>\n\nextern \"C\" void Foo();\n\nextern \"C\" void Bar() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  __android_log_print(ANDROID_LOG_INFO, \"bar\", \"Hi There!\");\n  fprintf(stderr, \"Hi There! from Bar\\n\");\n\n  printf(\"%s: Calling Foo()\\n\", __FUNCTION__);\n  Foo();\n\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/bar_with_relro.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <android/log.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n// A variant of bar.cpp that also includes a large RELRO section.\n// Used to test RELRO sharing with two different libraries at the\n// same time.\n\n// This is a large table that contains pointers to ensure that it\n// gets put inside the RELRO section.\n#define LINE \"another example string\",\n#define LINE8 LINE LINE LINE LINE LINE LINE LINE LINE\n#define LINE64 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8\n#define LINE512 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64\n#define LINE4096 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512\n\nconst char* const kStrings[] = {LINE4096 LINE4096 LINE4096 LINE4096};\n\nextern \"C\" void Foo();\n\nextern \"C\" void Bar() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  __android_log_print(ANDROID_LOG_INFO, \"bar\", \"Hi There!\");\n  fprintf(stderr, \"Hi There! from Bar\\n\");\n\n  for (size_t n = 0; n < sizeof(kStrings) / sizeof(kStrings[0]); ++n) {\n    const char* ptr = kStrings[n];\n    if (strcmp(ptr, \"another example string\")) {\n      printf(\"%s: Bad string at offset=%zu\\n\", __FUNCTION__, n);\n      exit(1);\n    }\n  }\n\n  printf(\"%s: Calling Foo()\\n\", __FUNCTION__);\n  Foo();\n\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/bench_load_library.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libfoo.so) with the linker.\n// - Find the address of the \"Foo\" function in it.\n// - Call the function.\n// - Close the library.\n\n#include <crazy_linker.h>\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n#include <unistd.h>\n#include <fcntl.h>\n\nstatic void Panic(const char* fmt, ...) {\n  va_list args;\n  fprintf(stderr, \"PANIC: \");\n  va_start(args, fmt);\n  vfprintf(stderr, fmt, args);\n  va_end(args);\n  exit(1);\n}\n\nstatic double now_ms() {\n  struct timespec ts;\n  clock_gettime(CLOCK_MONOTONIC, &ts);\n  return (ts.tv_sec * 1000.) + (ts.tv_nsec / 1000000.);\n}\n\nstatic void drop_caches() {\n  int fd = open(\"/proc/sys/vm/drop_caches\", O_RDWR);\n  if (fd < 0) {\n    fprintf(stderr,\n            \"Could not drop caches! Please run this program as root!\\n\");\n    return;\n  }\n  write(fd, \"3\\n\", 2);\n  close(fd);\n}\n\nclass ScopedTimer {\n public:\n  ScopedTimer(const char* name) {\n    name_ = name;\n    start_ms_ = now_ms();\n  }\n\n  ~ScopedTimer() {\n    double elapsed_ms = now_ms() - start_ms_;\n    printf(\"Timer %s: %.1f\\n\", name_, elapsed_ms);\n  }\n\n private:\n  const char* name_;\n  double start_ms_;\n};\n\nint main(int argc, char** argv) {\n  const char* library_path = \"libfoo.so\";\n  if (argc >= 2)\n    library_path = argv[1];\n\n  { ScopedTimer null_timer(\"empty\"); }\n\n  // Load the library with dlopen().\n  void* lib;\n  drop_caches();\n  {\n    ScopedTimer timer(\"dlopen\");\n    lib = dlopen(library_path, RTLD_NOW);\n  }\n  if (!lib)\n    Panic(\"Could not load library with dlopen(): %s\\n\", dlerror());\n\n  dlclose(lib);\n\n  crazy_library_t* library;\n  crazy_context_t* context = crazy_context_create();\n\n  // Ensure the program looks in its own directory too.\n  crazy_context_add_search_path_for_address(context,\n                                            reinterpret_cast<void*>(&main));\n\n  // Load the library with the crazy linker.\n  drop_caches();\n  {\n    ScopedTimer timer(\"crazy_linker\");\n    // Load libfoo.so\n    if (!crazy_library_open(&library, library_path, context)) {\n      Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n    }\n  }\n  crazy_library_close(library);\n\n  // Load the library with the crazy linker. Preload libOpenSLES.so\n  drop_caches();\n  void* sles_lib = dlopen(\"libOpenSLES.so\", RTLD_NOW);\n  {\n    ScopedTimer timer(\"crazy_linker (preload libOpenSLES.so)\");\n    // Load libfoo.so\n    if (!crazy_library_open(&library, library_path, context)) {\n      Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n    }\n  }\n  crazy_library_close(library);\n  dlclose(sles_lib);\n\n  // Load the library with the crazy linker. Preload libOpenSLES.so\n  {\n    drop_caches();\n    void* sys1_lib = dlopen(\"libandroid.so\", RTLD_NOW);\n    void* sys2_lib = dlopen(\"libjnigraphics.so\", RTLD_NOW);\n    void* sys3_lib = dlopen(\"libOpenSLES.so\", RTLD_NOW);\n    {\n      ScopedTimer timer(\"crazy_linker (preload 3 system libs)\");\n      // Load libfoo.so\n      if (!crazy_library_open(&library, library_path, context)) {\n        Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n      }\n    }\n    crazy_library_close(library);\n    dlclose(sys3_lib);\n    dlclose(sys2_lib);\n    dlclose(sys1_lib);\n  }\n\n  // Load the library with the crazy linker. Create a shared RELRO as well.\n  drop_caches();\n  {\n    ScopedTimer timer(\"crazy_linker (with RELRO)\");\n    // Load libfoo.so\n    if (!crazy_library_open(&library, library_path, context)) {\n      Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n    }\n\n    if (!crazy_library_enable_relro_sharing(library, context)) {\n      Panic(\"Could not create shared RELRO: %s\\n\",\n            crazy_context_get_error(context));\n    }\n  }\n  crazy_library_close(library);\n\n  printf(\"OK\\n\");\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/foo.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <android/log.h>\n#include <stdio.h>\n\nextern \"C\" void Foo() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  __android_log_write(ANDROID_LOG_INFO, \"foo\", \"Hello World!\");\n  fprintf(stderr, \"Hello World from Foo!\\n\");\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/foo2.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <android/log.h>\n#include <stdio.h>\n\n// Same as foo.cpp, byt exposes Foo2() instead of Foo().\n\nextern \"C\" void Foo2() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  __android_log_write(ANDROID_LOG_INFO, \"foo\", \"Hello World!\");\n  fprintf(stderr, \"Hello World from Foo!\\n\");\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/foo_with_relro.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <android/log.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n// This is a large table that contains pointers to ensure that it\n// gets put inside the RELRO section.\n#define LINE \"some example string\",\n#define LINE8 LINE LINE LINE LINE LINE LINE LINE LINE\n#define LINE64 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8\n#define LINE512 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64\n#define LINE4096 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512\n\nconst char* const kStrings[] = {LINE4096 LINE4096 LINE4096 LINE4096};\n\nextern \"C\" void Foo() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  for (size_t n = 0; n < sizeof(kStrings) / sizeof(kStrings[0]); ++n) {\n    const char* ptr = kStrings[n];\n    if (strcmp(ptr, \"some example string\")) {\n      printf(\"%s: Bad string at offset=%zu\\n\", __FUNCTION__, n);\n      exit(1);\n    }\n  }\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/foo_with_static_constructor.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// This source file must contain a static destructor to check that\n// the crazy linker can resolve weak symbols from the C library,\n// like __aeabi_atexit(), which are not normally returned by\n// a call to dlsym().\n\n// Libc is not required to copy strings passed to putenv(). If it does\n// not then env pointers become invalid when rodata is unmapped on\n// library unload. To guard against this, putenv() strings are first\n// strdup()'ed. This is a mild memory leak.\n\n#include <stdlib.h>\n\n#ifdef __arm__\nextern \"C\" void __aeabi_atexit(void*);\n#endif\n\nclass A {\n public:\n  A() {\n    x_ = rand();\n    const char* env = getenv(\"TEST_VAR\");\n    if (!env || strcmp(env, \"INIT\"))\n      putenv(strdup(\"TEST_VAR=LOAD_ERROR\"));\n    else\n      putenv(strdup(\"TEST_VAR=LOADED\"));\n  }\n\n  ~A() {\n    const char* env = getenv(\"TEST_VAR\");\n    if (!env || strcmp(env, \"LOADED\"))\n      putenv(strdup(\"TEST_VAR=UNLOAD_ERROR\"));\n    else\n      putenv(strdup(\"TEST_VAR=UNLOADED\"));\n  }\n\n  int Get() const { return x_; }\n\n private:\n  int x_;\n};\n\nA s_a;\n\nextern \"C\" int Foo() { return s_a.Get(); }\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/jni_lib.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A simple library that provides JNI_OnLoad() and JNI_OnUnload() hooks.\n// Used by test_java_vm.cpp\n\n#include <jni.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#define VARNAME \"TEST_VAR\"\n\nextern \"C\" int JNI_OnLoad(JavaVM* vm, void* reserved) {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  const char* env = getenv(VARNAME);\n  if (!env || strcmp(env, \"INIT\")) {\n    fprintf(stderr,\n            \"%s: Env variable %s has invalid value: %s (expected INIT)\\n\",\n            __FUNCTION__,\n            VARNAME,\n            env);\n    exit(1);\n  }\n  setenv(VARNAME, \"LOADED\", 1);\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n  return JNI_VERSION_1_4;\n}\n\nextern \"C\" void JNI_OnUnload(JavaVM* vm, void* reserved) {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  const char* env = getenv(VARNAME);\n  if (!env || strcmp(env, \"LOADED\")) {\n    fprintf(stderr,\n            \"%s: Env variable %s has invalid value: %s (expected LOADED)\\n\",\n            __FUNCTION__,\n            VARNAME,\n            env);\n    exit(1);\n  }\n  setenv(VARNAME, \"UNLOADED\", 1);\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_constructors_destructors.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libfoo_with_static_constructor.so) with the linker.\\\n//\n// - This shall execute a static constructor that will change the value\n//   of the TEST_VAR environment variable to \"LOADED'.\n//\n// - Close the library, this shall execute a static destructor that will\n//   change the value of TEST_VAR to \"UNLOADED'.\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  putenv(\"TEST_VAR=INIT\");\n\n  // DEBUG\n  crazy_context_set_load_address(context, 0x20000000);\n\n  // Load libfoo.so\n  if (!crazy_library_open(\n           &library, \"libfoo_with_static_constructor.so\", context)) {\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n  }\n\n  const char* env = getenv(\"TEST_VAR\");\n  if (!env || strcmp(env, \"LOADED\"))\n    Panic(\n        \"Constructors not run when loading libfoo_with_static_constructor.so\");\n\n  // Find the \"Foo\" symbol.\n  FunctionPtr foo_func;\n  if (!crazy_library_find_symbol(\n           library, \"Foo\", reinterpret_cast<void**>(&foo_func))) {\n    Panic(\"Could not find 'Foo' in libfoo.so\\n\");\n  }\n\n  // Call it.\n  (*foo_func)();\n\n  // Close the library.\n  printf(\"Closing libfoo_with_static_constructor.so\\n\");\n  crazy_library_close(library);\n\n  env = getenv(\"TEST_VAR\");\n  if (!env || strcmp(env, \"UNLOADED\"))\n    Panic(\n        \"Destructors not run when unloading libfoo_with_static_constructor.so\");\n\n  crazy_context_destroy(context);\n\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_dl_wrappers.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libzoo.so) with the linker.\n// - Find the address of the \"Zoo\" function in libzoo.so.\n// - Call the Zoo() function, which will use dlopen() / dlsym() to\n//   find libbar.so (which depends on libfoo.so).\n// - Close the library.\n\n// This tests the dlopen/dlsym/dlclose wrappers provided by the crazy\n// linker to loaded libraries.\n\n#include <stdio.h>\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef bool (*FunctionPtr)();\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // Load libzoo.so\n  if (!crazy_library_open(&library, \"libzoo.so\", context)) {\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n  }\n\n  // Find the \"Zoo\" symbol.\n  FunctionPtr zoo_func;\n  if (!crazy_library_find_symbol(\n           library, \"Zoo\", reinterpret_cast<void**>(&zoo_func))) {\n    Panic(\"Could not find 'Zoo' in libzoo.so\\n\");\n  }\n\n  // Call it.\n  bool ret = (*zoo_func)();\n  if (!ret)\n    Panic(\"'Zoo' function failed!\");\n\n  // Close the library.\n  printf(\"Closing libzoo.so\\n\");\n  crazy_library_close(library);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_jni_hooks.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to test crazy_context_set_java_vm().\n\n#include <jni.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\n#define VARNAME \"TEST_VAR\"\n\nstatic const char kJniLibName[] = \"libjni_lib.so\";\nstatic void* kJavaVM = (void*)0xdeadcafe;\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // Expect to find the library in the same directory than this executable.\n  crazy_context_add_search_path_for_address(context, (void*)&main);\n\n  crazy_context_set_java_vm(context, kJavaVM, JNI_VERSION_1_2);\n\n  // Load libjni_lib.so, this should invoke its JNI_OnLoad() function\n  // automatically.\n  setenv(VARNAME, \"INIT\", 1);\n  if (!crazy_library_open(&library, kJniLibName, context))\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n\n  const char* env = getenv(VARNAME);\n  if (strcmp(env, \"LOADED\"))\n    Panic(\"JNI_OnLoad() hook was not called! %s is %s\\n\", VARNAME, env);\n\n  crazy_library_close(library);\n  env = getenv(VARNAME);\n  if (strcmp(env, \"UNLOADED\"))\n    Panic(\"JNI_OnUnload() hook was not called! %s is %s\\n\", VARNAME, env);\n\n  // Now, change the minimum JNI version to JNI_VERSION_1_6, which should\n  // prevent loading the library properly, since it only supports 1.2.\n  crazy_context_set_java_vm(context, kJavaVM, JNI_VERSION_1_6);\n\n  setenv(VARNAME, \"INIT\", 1);\n  if (crazy_library_open(&library, kJniLibName, context))\n    Panic(\"Could load the library with JNI_VERSION_1_6 > JNI_VERSION_1_2.\");\n\n  // Disable the feature, this shall load the library, but not call the\n  // JNI_OnLoad() hook.\n  crazy_context_set_java_vm(context, NULL, 0);\n\n  setenv(VARNAME, \"INIT\", 1);\n  if (!crazy_library_open(&library, kJniLibName, context))\n    Panic(\"Could not load the library without a JavaVM handle !?\\n\");\n\n  env = getenv(VARNAME);\n  if (strcmp(env, \"INIT\"))\n    Panic(\"JNI_OnLoad() was called, %s is %s (expected INIT)\\n\", VARNAME, env);\n\n  crazy_library_close(library);\n  env = getenv(VARNAME);\n  if (strcmp(env, \"INIT\"))\n    Panic(\n        \"JNI_OnUnload() was called, %s is %s (expected INIT)\\n\", VARNAME, env);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_load_library.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libfoo.so) with the linker.\n// - Find the address of the \"Foo\" function in it.\n// - Call the function.\n// - Close the library.\n\n#include <stdio.h>\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // DEBUG\n  crazy_context_set_load_address(context, 0x20000000);\n\n  // Load libfoo.so\n  if (!crazy_library_open(&library, \"libfoo.so\", context)) {\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n  }\n\n  // Find the \"Foo\" symbol.\n  FunctionPtr foo_func;\n  if (!crazy_library_find_symbol(\n           library, \"Foo\", reinterpret_cast<void**>(&foo_func))) {\n    Panic(\"Could not find 'Foo' in libfoo.so\\n\");\n  }\n\n  // Call it.\n  (*foo_func)();\n\n  // Close the library.\n  printf(\"Closing libfoo.so\\n\");\n  crazy_library_close(library);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_load_library_callbacks.cpp",
    "content": "// Copyright (c) 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to test callbacks for delayed execution.\n\n#include <stdio.h>\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nnamespace {\n\nbool PostCallback(crazy_callback_t* callback, void* poster_opaque) {\n  printf(\"Post callback, poster_opaque %p, handler %p, opaque %p\\n\",\n         poster_opaque,\n         callback->handler,\n         callback->opaque);\n\n  // Copy callback to the address given in poster_opaque.\n  crazy_callback_t* request =\n      reinterpret_cast<crazy_callback_t*>(poster_opaque);\n  *request = *callback;\n\n  return true;\n}\n\nvoid CheckAndRunCallback(crazy_callback_t* callback) {\n  printf(\"Run callback, handler %p, opaque %p\\n\",\n         callback->handler,\n         callback->opaque);\n\n  if (!callback->handler) {\n    Panic(\"Post for delayed execution not invoked\\n\");\n  }\n\n  // Run the callback, then clear it for re-use.\n  crazy_callback_run(callback);\n  memset(callback, 0, sizeof(*callback));\n}\n\n}  // namespace\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // DEBUG\n  crazy_context_set_load_address(context, 0x20000000);\n\n  // Create a new callback, initialized to NULLs.\n  crazy_callback_t callback = {NULL, NULL};\n\n  // Set a callback poster that copies its callback to &callback.\n  crazy_context_set_callback_poster(context, &PostCallback, &callback);\n\n  crazy_callback_poster_t poster;\n  void* poster_opaque;\n\n  // Check that the API returns the values we set.\n  crazy_context_get_callback_poster(context, &poster, &poster_opaque);\n  if (poster != &PostCallback || poster_opaque != &callback) {\n    Panic(\"Get callback poster error\\n\");\n  }\n\n  // Load libfoo.so.\n  if (!crazy_library_open(&library, \"libfoo.so\", context)) {\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n  }\n  CheckAndRunCallback(&callback);\n\n  // Find the \"Foo\" symbol.\n  FunctionPtr foo_func;\n  if (!crazy_library_find_symbol(\n           library, \"Foo\", reinterpret_cast<void**>(&foo_func))) {\n    Panic(\"Could not find 'Foo' in libfoo.so\\n\");\n  }\n\n  // Call it.\n  (*foo_func)();\n\n  // Close the library.\n  crazy_library_close_with_context(library, context);\n  CheckAndRunCallback(&callback);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_load_library_depends.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libbar.so) with the linker, which depends on\n//   another library (libfoo.so)\n// - Find the address of the \"Bar\" function in libbar.so.\n// - Call the Bar() function, which ends up calling Foo() in libfoo.so\n// - Close the library.\n\n#include <stdio.h>\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // DEBUG\n  crazy_context_set_load_address(context, 0x20000000);\n\n  // Load libbar.so\n  if (!crazy_library_open(&library, \"libbar.so\", context)) {\n    Panic(\"Could not open library: %s\\n\", crazy_context_get_error(context));\n  }\n\n  // Find the \"Bar\" symbol.\n  FunctionPtr bar_func;\n  if (!crazy_library_find_symbol(\n           library, \"Bar\", reinterpret_cast<void**>(&bar_func))) {\n    Panic(\"Could not find 'Bar' in libbar.so\\n\");\n  }\n\n  // Call it.\n  (*bar_func)();\n\n  // Find the \"Foo\" symbol from libbar.so\n  FunctionPtr foo_func;\n  if (!crazy_library_find_symbol(\n           library, \"Foo\", reinterpret_cast<void**>(&foo_func))) {\n    Panic(\"Could not find 'Foo' from libbar.so\\n\");\n  }\n\n  // Close the library.\n  printf(\"Closing libbar.so\\n\");\n  crazy_library_close(library);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_relocated_shared_relro.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <errno.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/socket.h>\n#include <sys/uio.h>\n#include <sys/wait.h>\n#include <unistd.h>\n\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\n#define PARENT_ADDRESS 0x20000000\n#define CHILD_ADDRESS 0x20134000\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n\n  if (!crazy_system_can_share_relro()) {\n    fprintf(stderr, \"WARNING: Test ignored due to broken kernel!!\\n\");\n    return 0;\n  }\n\n  crazy_context_t* context = crazy_context_create();\n\n  RelroLibrary foo;\n\n  int pipes[2];\n  if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipes) < 0)\n    Panic(\"Could not create socket pair: %s\", strerror(errno));\n\n  pid_t child = fork();\n  if (child < 0)\n    Panic(\"Could not fork test program!\");\n\n  if (child == 0) {\n    // In the child.\n    crazy_context_set_load_address(context, CHILD_ADDRESS);\n    foo.Init(\"libfoo_with_relro.so\", context);\n\n    printf(\"Child waiting for foo relro fd\\n\");\n\n    foo.ReceiveRelroInfo(pipes[0]);\n    foo.UseSharedRelro(context);\n\n    printf(\"RELRO used in child process\\n\");\n\n    CheckRelroMaps(1);\n\n    FunctionPtr foo_func;\n    if (!crazy_library_find_symbol(\n             foo.library, \"Foo\", reinterpret_cast<void**>(&foo_func)))\n      Panic(\"Could not find 'Foo' in library\");\n\n    printf(\"Calling Foo()\\n\");\n    (*foo_func)();\n\n    printf(\"Foo called, exiting\\n\");\n\n    exit(0);\n\n  } else {\n    // In the parent.\n\n    // Load at fixed address to simplify testing.\n    crazy_context_set_load_address(context, PARENT_ADDRESS);\n    foo.Init(\"libfoo_with_relro.so\", context);\n\n    printf(\"Library loaded\\n\");\n\n    printf(\"Parent enabling foo RELRO sharing\\n\");\n\n    foo.CreateSharedRelro(context, CHILD_ADDRESS);\n    foo.SendRelroInfo(pipes[1]);\n\n    printf(\"Relocated RELRO sent to child\\n\");\n\n    CheckRelroMaps(0);\n\n    printf(\"Parent waiting for child\\n\");\n\n    // Wait for child to complete.\n    int status;\n    waitpid(child, &status, 0);\n\n    if (WIFSIGNALED(status))\n      Panic(\"Child terminated by signal!!\\n\");\n    else if (WIFEXITED(status)) {\n      int child_status = WEXITSTATUS(status);\n      if (child_status != 0)\n        Panic(\"Child terminated with status=%d\\n\", child_status);\n    } else\n      Panic(\"Child exited for unknown reason!!\\n\");\n  }\n\n  crazy_context_destroy(context);\n  return 0;\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_search_path_list.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to check that paths added with\n// crazy_context_add_search_path() or\n// crazy_context_add_search_path_from_address()\n// have higher priority than the default ones (from LD_LIBRARY_PATH).\n//\n// This requires creating two temporary directories and placing there libraries\n// with the same name, but different content\n//\n//   $TMPDIR1/libfoo.so   -> a copy of libfoo.so that contains the 'Foo' symbol.\n//   $TMPDIR2/libfoo.so   -> a copy of libfoo2.so that contains the 'Foo2'\n// symbol.\n//\n\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\nnamespace {\n\nvoid CheckLibraryCantLoad(const char* library_name, crazy_context_t* context) {\n  crazy_library_t* library;\n\n  if (crazy_library_open(&library, library_name, context))\n    Panic(\"Could load library %s, expected this not to be possible\\n\",\n          library_name);\n}\n\n// Loads a library named |library_name| and checks that it contains\n// the symbols listed in |wanted_symbols|, and none of the symbols\n// listed in |unwanted_symbols|. After that, close the library and exit.\n//\n// Both |wanted_symbols| and |unwanted_symbols| are NULL-terminated\n// arrays of strings.\nvoid CheckLibrary(const char* library_name,\n                  const char* const* wanted_symbols,\n                  const char* const* unwanted_symbols,\n                  crazy_context_t* context) {\n  crazy_library_t* library;\n\n  if (!crazy_library_open(&library, library_name, context))\n    Panic(\"Could not open library %s: %s\\n\", crazy_context_get_error(context));\n\n  size_t failures = 0;\n\n  if (wanted_symbols) {\n    for (; *wanted_symbols; ++wanted_symbols) {\n      const char* symbol_name = *wanted_symbols;\n      void* symbol_addr;\n      if (!crazy_library_find_symbol(library, symbol_name, &symbol_addr)) {\n        fprintf(stderr,\n                \"Could not find symbol '%s' in library '%s'!\\n\",\n                symbol_name,\n                library_name);\n        failures += 1;\n      }\n    }\n  }\n\n  if (unwanted_symbols) {\n    for (; *unwanted_symbols; ++unwanted_symbols) {\n      const char* symbol_name = *unwanted_symbols;\n      void* symbol_addr;\n      if (crazy_library_find_symbol(library, symbol_name, &symbol_addr)) {\n        fprintf(stderr,\n                \"Found symbol '%s' in library '%s', none expected!\\n\",\n                symbol_name,\n                library_name);\n        failures += 1;\n      }\n    }\n  }\n\n  if (failures > 0)\n    Panic(\"Found %d symbol failures in library %s\\n\", failures, library_name);\n\n  crazy_library_close(library);\n}\n\n}  // namespace\n\nint main() {\n  String exe_path = GetCurrentExecutableDirectory();\n\n  TempDirectory temp_dir_1;\n  TempDirectory temp_dir_2;\n\n  // List of symbols in original libfoo.so and libfoo2.so, respectively.\n  static const char* const kFooSymbols[] = {\"Foo\", NULL};\n  static const char* const kFoo2Symbols[] = {\"Foo2\", NULL};\n\n  // Copy libfoo.so to $TMPDIR1/libfoo.so\n  CopyFile(\"libfoo.so\", exe_path.c_str(), \"libfoo.so\", temp_dir_1.path());\n\n  // Copy libfoo2.so to $TMPDIR2/libfoo.so\n  CopyFile(\"libfoo2.so\", exe_path.c_str(), \"libfoo.so\", temp_dir_2.path());\n\n  // Create a new context object.\n  crazy_context_t* context = crazy_context_create();\n  crazy_library_t* library;\n\n  // Reset search paths to a non-existing directory. Check that the library\n  // can't be loaded.\n  setenv(\"LD_LIBRARY_PATH\", \"/this-directory-does-not-exist\", 1);\n  crazy_context_reset_search_paths(context);\n  CheckLibraryCantLoad(\"libfoo.so\", context);\n\n  // Add the search path to the current executable, this should load the\n  // original\n  // libfoo.so.\n  crazy_context_add_search_path_for_address(context, (void*)&main);\n  CheckLibrary(\"libfoo.so\", kFooSymbols, kFoo2Symbols, context);\n\n  // Reset search paths to use $TMPDIR2 then $TMPDIR1\n  setenv(\"LD_LIBRARY_PATH\", temp_dir_1.path(), 1);\n  crazy_context_reset_search_paths(context);\n  crazy_context_add_search_path(context, temp_dir_2.path());\n\n  // Check that the copy of libfoo2.so is loaded.\n  CheckLibrary(\"libfoo.so\", kFoo2Symbols, kFooSymbols, context);\n\n  // Reset search paths to use only $TMPDIR1\n  crazy_context_reset_search_paths(context);\n\n  // Check that the copy of libfoo.so is loaded.\n  CheckLibrary(\"libfoo.so\", kFooSymbols, kFoo2Symbols, context);\n\n  crazy_context_destroy(context);\n\n  return 0;\n}"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_shared_relro.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A crazy linker test to:\n// - Load a library (libfoo.so) with the linker.\n// - Find the address of the \"Foo\" function in it.\n// - Call the function.\n// - Close the library.\n\n#include <errno.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/socket.h>\n#include <sys/uio.h>\n#include <sys/wait.h>\n#include <unistd.h>\n\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n\n  if (!crazy_system_can_share_relro()) {\n    fprintf(stderr, \"WARNING: Test ignored due to broken kernel!!\\n\");\n    return 0;\n  }\n\n  crazy_context_t* context = crazy_context_create();\n\n  RelroLibrary foo;\n\n  // Load at fixed address to simplify testing.\n  crazy_context_set_load_address(context, 0x20000000);\n  foo.Init(\"libfoo_with_relro.so\", context);\n\n  printf(\"Library loaded\\n\");\n\n  int pipes[2];\n  if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipes) < 0)\n    Panic(\"Could not create socket pair: %s\", strerror(errno));\n\n  pid_t child = fork();\n  if (child < 0)\n    Panic(\"Could not fork test program!\");\n\n  if (child == 0) {\n    // In the child.\n    printf(\"Child waiting for foo relro fd\\n\");\n\n    foo.ReceiveRelroInfo(pipes[0]);\n    foo.UseSharedRelro(context);\n\n    printf(\"RELRO used in child process\\n\");\n\n    CheckRelroMaps(1);\n\n    FunctionPtr foo_func;\n    if (!crazy_library_find_symbol(\n             foo.library, \"Foo\", reinterpret_cast<void**>(&foo_func)))\n      Panic(\"Could not find 'Foo' in library\");\n\n    printf(\"Calling Foo()\\n\");\n    (*foo_func)();\n\n    printf(\"Foo called, exiting\\n\");\n\n    exit(0);\n\n  } else {\n    // In the parent.\n\n    printf(\"Parent enabling foo RELRO sharing\\n\");\n\n    foo.EnableSharedRelro(context);\n    foo.SendRelroInfo(pipes[1]);\n\n    printf(\"RELRO enabled and sent to child\\n\");\n\n    CheckRelroMaps(1);\n\n    printf(\"Parent waiting for child\\n\");\n\n    // Wait for child to complete.\n    int status;\n    waitpid(child, &status, 0);\n\n    if (WIFSIGNALED(status))\n      Panic(\"Child terminated by signal!!\\n\");\n    else if (WIFEXITED(status)) {\n      int child_status = WEXITSTATUS(status);\n      if (child_status != 0)\n        Panic(\"Child terminated with status=%d\\n\", child_status);\n    } else\n      Panic(\"Child exited for unknown reason!!\\n\");\n  }\n\n  crazy_context_destroy(context);\n  return 0;\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_two_shared_relros.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// Same as test_relro_sharing.cpp, but uses two libraries at the same\n// time (libfoo_with_relro.so and libbar_with_relro.so), each one of\n// them gets its own shared RELRO.\n\n#include <errno.h>\n#include <pthread.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/socket.h>\n#include <sys/uio.h>\n#include <sys/wait.h>\n#include <unistd.h>\n\n#include <crazy_linker.h>\n\n#include \"test_util.h\"\n\ntypedef void (*FunctionPtr)();\n\nint main() {\n\n  if (!crazy_system_can_share_relro()) {\n    fprintf(stderr, \"WARNING: Test ignored due to broken kernel!!\\n\");\n    return 0;\n  }\n\n  crazy_context_t* context = crazy_context_create();\n\n  RelroLibrary foo;\n  RelroLibrary bar;\n\n  crazy_context_add_search_path_for_address(context, (void*)&main);\n\n  // Load libfoo_with_relro.so\n  crazy_context_set_load_address(context, 0x20000000);\n  foo.Init(\"libfoo_with_relro.so\", context);\n\n  crazy_context_set_load_address(context, 0x20800000);\n  bar.Init(\"libbar_with_relro.so\", context);\n\n  printf(\"Libraries loaded\\n\");\n\n  int pipes[2];\n  if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipes) < 0)\n    Panic(\"Could not create socket pair: %s\", strerror(errno));\n\n  pid_t child = fork();\n  if (child < 0)\n    Panic(\"Could not fork test program!\");\n\n  if (child == 0) {\n    // In the child.\n    printf(\"Child waiting for foo relro fd\\n\");\n\n    foo.ReceiveRelroInfo(pipes[0]);\n    foo.UseSharedRelro(context);\n\n    printf(\"Child waiting for bar relro fd\\n\");\n    bar.ReceiveRelroInfo(pipes[0]);\n    bar.UseSharedRelro(context);\n\n    printf(\"RELROs used in child process\\n\");\n\n    CheckRelroMaps(2);\n\n    FunctionPtr bar_func;\n    if (!crazy_library_find_symbol(\n             bar.library, \"Bar\", reinterpret_cast<void**>(&bar_func)))\n      Panic(\"Could not find 'Bar' in library\");\n\n    printf(\"Calling Bar()\\n\");\n    (*bar_func)();\n\n    printf(\"Bar() called, exiting\\n\");\n\n    exit(0);\n\n  } else {\n    // In the parent.\n\n    printf(\"Parent enabling foo RELRO sharing\\n\");\n\n    foo.EnableSharedRelro(context);\n    foo.SendRelroInfo(pipes[1]);\n\n    printf(\"Parent enabling bar RELRO sharing\\n\");\n\n    bar.EnableSharedRelro(context);\n    bar.SendRelroInfo(pipes[1]);\n\n    printf(\"RELROs enabled and sent to child\\n\");\n\n    CheckRelroMaps(2);\n\n    printf(\"Parent waiting for child\\n\");\n\n    // Wait for child to complete.\n    int status;\n    waitpid(child, &status, 0);\n\n    if (WIFSIGNALED(status))\n      Panic(\"Child terminated by signal!!\\n\");\n    else if (WIFEXITED(status)) {\n      int child_status = WEXITSTATUS(status);\n      if (child_status != 0)\n        Panic(\"Child terminated with status=%d\\n\", child_status);\n    } else\n      Panic(\"Child exited for unknown reason!!\\n\");\n  }\n\n  printf(\"Closing libraries\\n\");\n  bar.Close();\n  foo.Close();\n\n  crazy_context_destroy(context);\n  return 0;\n}\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/test_util.h",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// A set of common helper functions used by crazy_linker tests.\n// IMPORTANT: ALL FUNCTIONS HERE ARE INLINED. This avoids adding a\n// dependency on another source file for all tests that include this\n// header.\n\n#ifndef TEST_UTIL_H\n#define TEST_UTIL_H\n\n#include <crazy_linker.h>\n\n#include <dirent.h>\n#include <errno.h>\n#include <limits.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/mman.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/uio.h>\n#include <unistd.h>\n#ifndef __STDC_FORMAT_MACROS\n#define __STDC_FORMAT_MACROS // to get PRI and SCN in 32-bit inttypes.h\n#endif\n#include <inttypes.h>\n\nnamespace {\n\n// Print an error message and exit the process.\n// Message must be terminated by a newline.\ninline void Panic(const char* fmt, ...) {\n  va_list args;\n  fprintf(stderr, \"PANIC: \");\n  va_start(args, fmt);\n  vfprintf(stderr, fmt, args);\n  va_end(args);\n  exit(1);\n}\n\n// Print an error message, the errno message, then exit the process.\n// Message must not be terminated by a newline.\ninline void PanicErrno(const char* fmt, ...) {\n  int old_errno = errno;\n  va_list args;\n  fprintf(stderr, \"PANIC: \");\n  va_start(args, fmt);\n  vfprintf(stderr, fmt, args);\n  va_end(args);\n  fprintf(stderr, \": %s\\n\", strerror(old_errno));\n  exit(1);\n}\n\n// Simple string class.\nclass String {\n public:\n  String() : str_(NULL), len_(0) {}\n\n  String(const String& other) { String(other.str_, other.len_); }\n\n  String(const char* str) { String(str, strlen(str)); }\n\n  String(const char* str, size_t len) : str_(NULL), len_(0) {\n    Append(str, len);\n  }\n\n  ~String() {\n    if (str_) {\n      free(str_);\n      str_ = NULL;\n    }\n  }\n\n  String& operator+=(const char* str) {\n    Append(str, strlen(str));\n    return *this;\n  }\n\n  String& operator+=(const String& other) {\n    Append(other.str_, other.len_);\n    return *this;\n  }\n\n  String& operator+=(char ch) {\n    Append(&ch, 1);\n    return *this;\n  }\n\n  const char* c_str() const { return len_ ? str_ : \"\"; }\n  char* ptr() { return str_; }\n  size_t size() const { return len_; }\n\n  void Append(const char* str, size_t len) {\n    size_t old_len = len_;\n    Resize(len_ + len);\n    memcpy(str_ + old_len, str, len);\n  }\n\n  void Resize(size_t len) {\n    str_ = reinterpret_cast<char*>(realloc(str_, len + 1));\n    if (len > len_)\n      memset(str_ + len_, '\\0', len - len_);\n    str_[len] = '\\0';\n    len_ = len;\n  }\n\n  void Format(const char* fmt, ...) {\n    va_list args;\n    va_start(args, fmt);\n    Resize(128);\n    for (;;) {\n      va_list args2;\n      va_copy(args2, args);\n      int ret = vsnprintf(str_, len_ + 1, fmt, args2);\n      va_end(args2);\n      if (ret < static_cast<int>(len_ + 1))\n        break;\n\n      Resize(len_ * 2);\n    }\n  }\n\n private:\n  char* str_;\n  size_t len_;\n};\n\n// Helper class to create a temporary directory that gets deleted on scope exit,\n// as well as all regular files it contains.\nclass TempDirectory {\n public:\n  TempDirectory() {\n    snprintf(path_, sizeof path_, \"/data/local/tmp/temp-XXXXXX\");\n    if (!mktemp(path_))\n      Panic(\"Could not create temporary directory name: %s\\n\", strerror(errno));\n    if (mkdir(path_, 0700) < 0)\n      Panic(\"Could not create temporary directory %s: %s\\n\", strerror(errno));\n  }\n\n  ~TempDirectory() {\n    // Remove any file in this directory.\n    DIR* d = opendir(path_);\n    if (!d)\n      Panic(\"Could not open directory %s: %s\\n\", strerror(errno));\n\n    struct dirent* entry;\n    while ((entry = readdir(d)) != NULL) {\n      if (!strcmp(entry->d_name, \".\") || !strcmp(entry->d_name, \"..\"))\n        continue;\n      String file_path;\n      file_path.Format(\"%s/%s\", path_, entry->d_name);\n      if (unlink(file_path.c_str()) < 0)\n        Panic(\"Could not remove %s: %s\\n\", file_path.c_str(), strerror(errno));\n    }\n    closedir(d);\n\n    if (rmdir(path_) < 0)\n      Panic(\"Could not remove dir %s: %s\\n\", path_, strerror(errno));\n  }\n\n  const char* path() const { return path_; }\n\n private:\n  char path_[PATH_MAX];\n};\n\n// Scoped FILE* class. Always closed on destruction.\nclass ScopedFILE {\n public:\n  ScopedFILE() : file_(NULL) {}\n\n  ~ScopedFILE() {\n    if (file_) {\n      fclose(file_);\n      file_ = NULL;\n    }\n  }\n\n  void Open(const char* path, const char* mode) {\n    file_ = fopen(path, mode);\n    if (!file_)\n      Panic(\"Could not open file for reading: %s: %s\\n\", path, strerror(errno));\n  }\n\n  FILE* file() const { return file_; }\n\n private:\n  FILE* file_;\n};\n\n// Retrieve current executable path as a String.\ninline String GetCurrentExecutable() {\n  String path;\n  path.Resize(PATH_MAX);\n  ssize_t ret =\n      TEMP_FAILURE_RETRY(readlink(\"/proc/self/exe\", path.ptr(), path.size()));\n  if (ret < 0)\n    Panic(\"Could not read /proc/self/exe: %s\\n\", strerror(errno));\n\n  return path;\n}\n\n// Retrieve current executable directory as a String.\ninline String GetCurrentExecutableDirectory() {\n  String path = GetCurrentExecutable();\n  // Find basename.\n  const char* p = reinterpret_cast<const char*>(strrchr(path.c_str(), '/'));\n  if (p == NULL)\n    Panic(\"Current executable does not have directory root?: %s\\n\",\n          path.c_str());\n\n  path.Resize(p - path.c_str());\n  return path;\n}\n\n// Copy a file named |src_file_name| in directory |src_file_dir| into\n// a file named |dst_file_name| in directory |dst_file_dir|. Panics on error.\ninline void CopyFile(const char* src_file_name,\n                     const char* src_file_dir,\n                     const char* dst_file_name,\n                     const char* dst_file_dir) {\n  String src_path;\n  src_path.Format(\"%s/%s\", src_file_dir, src_file_name);\n\n  ScopedFILE src_file;\n  src_file.Open(src_path.c_str(), \"rb\");\n\n  String dst_path;\n  dst_path.Format(\"%s/%s\", dst_file_dir, dst_file_name);\n  ScopedFILE dst_file;\n  dst_file.Open(dst_path.c_str(), \"wb\");\n\n  char buffer[8192];\n  for (;;) {\n    size_t read = fread(buffer, 1, sizeof buffer, src_file.file());\n    if (read > 0) {\n      size_t written = fwrite(buffer, 1, read, dst_file.file());\n      if (written != read)\n        Panic(\"Wrote %d bytes instead of %d into %s\\n\",\n              written,\n              read,\n              dst_path.c_str());\n    }\n    if (read < sizeof buffer)\n      break;\n  }\n}\n\n// Send a file descriptor |fd| through |socket|.\n// Return 0 on success, -1/errno on failure.\ninline int SendFd(int socket, int fd) {\n  struct iovec iov;\n\n  char buffer[1];\n  buffer[0] = 0;\n\n  iov.iov_base = buffer;\n  iov.iov_len = 1;\n\n  struct msghdr msg;\n  struct cmsghdr* cmsg;\n  char cms[CMSG_SPACE(sizeof(int))];\n\n  ::memset(&msg, 0, sizeof(msg));\n  msg.msg_iov = &iov;\n  msg.msg_iovlen = 1;\n  msg.msg_control = reinterpret_cast<caddr_t>(cms);\n  msg.msg_controllen = CMSG_LEN(sizeof(int));\n\n  cmsg = CMSG_FIRSTHDR(&msg);\n  cmsg->cmsg_len = CMSG_LEN(sizeof(int));\n  cmsg->cmsg_level = SOL_SOCKET;\n  cmsg->cmsg_type = SCM_RIGHTS;\n  ::memcpy(CMSG_DATA(cmsg), &fd, sizeof(int));\n\n  int ret = sendmsg(socket, &msg, 0);\n  if (ret < 0)\n    return -1;\n\n  if (ret != iov.iov_len) {\n    errno = EIO;\n    return -1;\n  }\n\n  return 0;\n}\n\ninline int ReceiveFd(int socket, int* fd) {\n  char buffer[1];\n  struct iovec iov;\n\n  iov.iov_base = buffer;\n  iov.iov_len = 1;\n\n  struct msghdr msg;\n  struct cmsghdr* cmsg;\n  char cms[CMSG_SPACE(sizeof(int))];\n\n  ::memset(&msg, 0, sizeof msg);\n  msg.msg_name = 0;\n  msg.msg_namelen = 0;\n  msg.msg_iov = &iov;\n  msg.msg_iovlen = 1;\n\n  msg.msg_control = reinterpret_cast<caddr_t>(cms);\n  msg.msg_controllen = sizeof(cms);\n\n  int ret = recvmsg(socket, &msg, 0);\n  if (ret < 0)\n    return -1;\n  if (ret == 0) {\n    errno = EIO;\n    return -1;\n  }\n\n  cmsg = CMSG_FIRSTHDR(&msg);\n  ::memcpy(fd, CMSG_DATA(cmsg), sizeof(int));\n  return 0;\n}\n\n// Check that there are exactly |expected_count| memory mappings in\n// /proc/self/maps that point to a RELRO ashmem region.\ninline void CheckRelroMaps(int expected_count) {\n  printf(\"Checking for %d RELROs in /proc/self/maps\\n\", expected_count);\n\n  FILE* file = fopen(\"/proc/self/maps\", \"rb\");\n  if (!file)\n    Panic(\"Could not open /proc/self/maps (pid %d): %s\\n\",\n          getpid(),\n          strerror(errno));\n\n  char line[512];\n  int count_relros = 0;\n  printf(\"proc/%d/maps:\\n\", getpid());\n  while (fgets(line, sizeof line, file)) {\n    if (strstr(line, \"with_relro\")) {\n      // The supported library names are \"lib<name>_with_relro.so\".\n      printf(\"%s\", line);\n      if (strstr(line, \"/dev/ashmem/RELRO:\")) {\n        count_relros++;\n        // Check that they are read-only mappings.\n        if (!strstr(line, \" r--\"))\n          Panic(\"Shared RELRO mapping is not readonly!\\n\");\n        // Check that they can't be remapped read-write.\n        uint64_t vma_start, vma_end;\n        if (sscanf(line, \"%\" SCNx64 \"-%\" SCNx64, &vma_start, &vma_end) != 2)\n          Panic(\"Could not parse VM address range!\\n\");\n        int ret = ::mprotect(\n            (void*)vma_start, vma_end - vma_start, PROT_READ | PROT_WRITE);\n        if (ret == 0)\n          Panic(\"Could remap shared RELRO as writable, should not happen!\\n\");\n\n        if (errno != EACCES)\n          Panic(\"remapping shared RELRO to writable failed with: %s\\n\",\n                strerror(errno));\n      }\n    }\n  }\n  fclose(file);\n\n  if (count_relros != expected_count)\n    Panic(\n        \"Invalid shared RELRO sections in /proc/self/maps: %d\"\n        \" (expected %d)\\n\",\n        count_relros,\n        expected_count);\n\n  printf(\"RELRO count check ok!\\n\");\n}\n\nstruct RelroInfo {\n  size_t start;\n  size_t size;\n  int fd;\n};\n\nstruct RelroLibrary {\n  const char* name;\n  crazy_library_t* library;\n  RelroInfo relro;\n\n  void Init(const char* name, crazy_context_t* context) {\n    printf(\"Loading %s\\n\", name);\n    this->name = name;\n    if (!crazy_library_open(&this->library, name, context)) {\n      Panic(\"Could not open %s: %s\\n\", name, crazy_context_get_error(context));\n    }\n  }\n\n  void Close() { crazy_library_close(this->library); }\n\n  void CreateSharedRelro(crazy_context_t* context, size_t load_address) {\n    if (!crazy_library_create_shared_relro(this->library,\n                                           context,\n                                           load_address,\n                                           &this->relro.start,\n                                           &this->relro.size,\n                                           &this->relro.fd)) {\n      Panic(\"Could not create shared RELRO for %s: %s\",\n            this->name,\n            crazy_context_get_error(context));\n    }\n\n    printf(\"Parent %s relro info relro_start=%p relro_size=%p relro_fd=%d\\n\",\n           this->name,\n           (void*)this->relro.start,\n           (void*)this->relro.size,\n           this->relro.fd);\n  }\n\n  void EnableSharedRelro(crazy_context_t* context) {\n    CreateSharedRelro(context, 0);\n    UseSharedRelro(context);\n  }\n\n  void SendRelroInfo(int fd) {\n    if (SendFd(fd, this->relro.fd) < 0) {\n      Panic(\"Could not send %s RELRO fd: %s\", this->name, strerror(errno));\n    }\n\n    int ret =\n        TEMP_FAILURE_RETRY(::write(fd, &this->relro, sizeof(this->relro)));\n    if (ret != static_cast<int>(sizeof(this->relro))) {\n      Panic(\"Parent could not send %s RELRO info: %s\",\n            this->name,\n            strerror(errno));\n    }\n  }\n\n  void ReceiveRelroInfo(int fd) {\n    // Receive relro information from parent.\n    int relro_fd = -1;\n    if (ReceiveFd(fd, &relro_fd) < 0) {\n      Panic(\"Could not receive %s relro descriptor from parent\", this->name);\n    }\n\n    printf(\"Child received %s relro fd %d\\n\", this->name, relro_fd);\n\n    int ret = TEMP_FAILURE_RETRY(::read(fd, &this->relro, sizeof(this->relro)));\n    if (ret != static_cast<int>(sizeof(this->relro))) {\n      Panic(\"Could not receive %s relro information from parent\", this->name);\n    }\n\n    this->relro.fd = relro_fd;\n    printf(\"Child received %s relro start=%p size=%p\\n\",\n           this->name,\n           (void*)this->relro.start,\n           (void*)this->relro.size);\n  }\n\n  void UseSharedRelro(crazy_context_t* context) {\n    if (!crazy_library_use_shared_relro(this->library,\n                                        context,\n                                        this->relro.start,\n                                        this->relro.size,\n                                        this->relro.fd)) {\n      Panic(\"Could not use %s shared RELRO: %s\\n\",\n            this->name,\n            crazy_context_get_error(context));\n    }\n  }\n};\n\n}  // namespace\n\n#endif  // TEST_UTIL_H\n"
  },
  {
    "path": "sources/crystax/crazy_linker/tests/zoo.cpp",
    "content": "// Copyright (c) 2013 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <dlfcn.h>\n#include <stdio.h>\n\nextern \"C\" bool Zoo() {\n  printf(\"%s: Entering\\n\", __FUNCTION__);\n  void* bar_lib = dlopen(\"libbar.so\", RTLD_NOW);\n  if (!bar_lib) {\n    fprintf(stderr, \"Could not libbar.so: %s\\n\", dlerror());\n    return false;\n  }\n  printf(\"%s: Opened libbar.so @%p\\n\", __FUNCTION__, bar_lib);\n\n  void (*bar_func)();\n\n  bar_func = reinterpret_cast<void (*)()>(dlsym(bar_lib, \"Bar\"));\n  if (!bar_func) {\n    fprintf(stderr, \"Could not find 'Bar' symbol in libbar.so\\n\");\n    return false;\n  }\n  printf(\"%s: Found 'Bar' symbol at @%p\\n\", __FUNCTION__, bar_func);\n\n  // Call it.\n  printf(\"%s: Calling Bar()\\n\", __FUNCTION__);\n  (*bar_func)();\n\n  printf(\"%s: Closing libbar.so\\n\", __FUNCTION__);\n  dlclose(bar_lib);\n\n  printf(\"%s: Exiting\\n\", __FUNCTION__);\n  return true;\n}\n"
  },
  {
    "path": "sources/crystax/empty/libcrystax.a",
    "content": "!<arch>\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES1/gl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES1_GL_H_5F922D16F3B14513AD61617F9A6C823B\n#define __CRYSTAX_OPENGL_ES1_GL_H_5F922D16F3B14513AD61617F9A6C823B\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 4\n#include <GLES/gl.h>\n#else\n#error \"GLES is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES1_GL_H_5F922D16F3B14513AD61617F9A6C823B */\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES1/glext.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES1_GLEXT_H_0DA1498D381444FFA5B4EECB6B5BD99A\n#define __CRYSTAX_OPENGL_ES1_GLEXT_H_0DA1498D381444FFA5B4EECB6B5BD99A\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 4\n#include <GLES/glext.h>\n#else\n#error \"GLES is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES1_GLEXT_H_0DA1498D381444FFA5B4EECB6B5BD99A */\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES2/gl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES2_GL_H_1603C985363E4429B5339FD8240DB935\n#define __CRYSTAX_OPENGL_ES2_GL_H_1603C985363E4429B5339FD8240DB935\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 4\n#include <GLES2/gl2.h>\n#else\n#error \"GLES is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES2_GL_H_1603C985363E4429B5339FD8240DB935 */\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES2/glext.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES2_GLEXT_H_41F466193E6842549CA8F84332F7B627\n#define __CRYSTAX_OPENGL_ES2_GLEXT_H_41F466193E6842549CA8F84332F7B627\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 4\n#include <GLES2/gl2ext.h>\n#else\n#error \"GLES is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES2_GLEXT_H_41F466193E6842549CA8F84332F7B627 */\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES3/gl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES3_GL_H_72B64AF4CC6D4B8EABCDDC93887FECEC\n#define __CRYSTAX_OPENGL_ES3_GL_H_72B64AF4CC6D4B8EABCDDC93887FECEC\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 18\n#include <GLES3/gl3.h>\n#else\n#error \"GLES3 is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES3_GL_H_72B64AF4CC6D4B8EABCDDC93887FECEC */\n"
  },
  {
    "path": "sources/crystax/include/OpenGLES/ES3/glext.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_OPENGL_ES3_GLEXT_H_99E93C6168FA4981B966F81631A846B5\n#define __CRYSTAX_OPENGL_ES3_GLEXT_H_99E93C6168FA4981B966F81631A846B5\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 18\n#include <GLES3/gl3ext.h>\n#else\n#error \"GLES3 is not supported for this Android API level\"\n#endif\n\n#endif /* __CRYSTAX_OPENGL_ES3_GLEXT_H_99E93C6168FA4981B966F81631A846B5 */\n"
  },
  {
    "path": "sources/crystax/include/alloca.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_ALLOCA_H_54030085552640179942B7123EA7CEDC\n#define __CRYSTAX_ALLOCA_H_54030085552640179942B7123EA7CEDC\n\n#include <crystax/id.h>\n\n#ifdef alloca\n#undef alloca\n#define alloca(sz) __builtin_alloca(sz)\n#endif\n\n#endif /* __CRYSTAX_ALLOCA_H_54030085552640179942B7123EA7CEDC */\n"
  },
  {
    "path": "sources/crystax/include/asm/bitsperlong.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_BITSPERLONG_H_34177120AB3A449F91AC1E7A6E7DCCFC\n#define __CRYSTAX_INCLUDE_ASM_BITSPERLONG_H_34177120AB3A449F91AC1E7A6E7DCCFC\n\n#include <crystax/id.h>\n\n#if defined(__arm__)\n#include <asm-arm/asm/bitsperlong.h>\n#elif defined(__aarch64__)\n#include <asm-arm64/asm/bitsperlong.h>\n#elif defined(__i386__) || defined(__x86_64__)\n#include <asm-x86/asm/bitsperlong.h>\n#elif defined(__mips__)\n#include <asm-mips/asm/bitsperlong.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_BITSPERLONG_H_34177120AB3A449F91AC1E7A6E7DCCFC */\n"
  },
  {
    "path": "sources/crystax/include/asm/posix_types.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_POSIX_TYPES_H_C7B01E8EBC5D4BD0A67C4F00EB9BAA27\n#define __CRYSTAX_INCLUDE_ASM_POSIX_TYPES_H_C7B01E8EBC5D4BD0A67C4F00EB9BAA27\n\n#include <crystax/id.h>\n\n#if defined(__arm__)\n#include <asm-arm/asm/posix_types.h>\n#elif defined(__aarch64__)\n#include <asm-arm64/asm/posix_types.h>\n#elif defined(__i386__) || defined(__x86_64__)\n#include <asm-x86/asm/posix_types.h>\n#if defined(__x86_64__) && defined(__ILP32__)\n#define __kernel_ulong_t __kernel_ulong_t\n#endif\n#elif defined(__mips__)\n#include <asm-mips/asm/posix_types.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_POSIX_TYPES_H_C7B01E8EBC5D4BD0A67C4F00EB9BAA27 */\n"
  },
  {
    "path": "sources/crystax/include/asm/siginfo.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_SIGINFO_H_E05564ECA4C14610A44060DAED7B42D7\n#define __CRYSTAX_INCLUDE_ASM_SIGINFO_H_E05564ECA4C14610A44060DAED7B42D7\n\n#include <crystax/id.h>\n\n#if defined(__arm__)\n#include <asm-arm/asm/siginfo.h>\n#elif defined(__aarch64__)\n#include <asm-arm64/asm/siginfo.h>\n#elif defined(__i386__) || defined(__x86_64__)\n#include <asm-x86/asm/siginfo.h>\n#elif defined(__mips__)\n#include <asm-mips/asm/siginfo.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_SIGINFO_H_E05564ECA4C14610A44060DAED7B42D7 */\n"
  },
  {
    "path": "sources/crystax/include/asm/signal.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_SIGNAL_H_F8B097033AC14D5CA89E659D38B55284\n#define __CRYSTAX_INCLUDE_ASM_SIGNAL_H_F8B097033AC14D5CA89E659D38B55284\n\n#include <crystax/id.h>\n\n#if defined(__arm__)\n#include <asm-arm/asm/signal.h>\n#elif defined(__aarch64__)\n#include <asm-arm64/asm/signal.h>\n#elif defined(__i386__) || defined(__x86_64__)\n#include <asm-x86/asm/signal.h>\n#elif defined(__mips__)\n#include <asm-mips/asm/signal.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_SIGNAL_H_F8B097033AC14D5CA89E659D38B55284 */\n"
  },
  {
    "path": "sources/crystax/include/asm/unistd.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_UNISTD_H_D37C2274C84B4AEDB8EAC6B4AF18148F\n#define __CRYSTAX_INCLUDE_ASM_UNISTD_H_D37C2274C84B4AEDB8EAC6B4AF18148F\n\n#include <crystax/id.h>\n\n#if defined(__arm__)\n#include <asm-arm/asm/unistd.h>\n#elif defined(__aarch64__)\n#include <asm-arm64/asm/unistd.h>\n#elif defined(__i386__) || defined(__x86_64__)\n#include <asm-x86/asm/unistd.h>\n#elif defined(__mips__)\n#include <asm-mips/asm/unistd.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_UNISTD_H_D37C2274C84B4AEDB8EAC6B4AF18148F */\n"
  },
  {
    "path": "sources/crystax/include/asm/unistd_32.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_UNISTD_32_H_885011CBC789465B9C673DDBAD9BF92C\n#define __CRYSTAX_INCLUDE_ASM_UNISTD_32_H_885011CBC789465B9C673DDBAD9BF92C\n\n#include <crystax/id.h>\n\n#if defined(__i386__)\n#include <asm-x86/asm/unistd_32.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_UNISTD_32_H_885011CBC789465B9C673DDBAD9BF92C */\n"
  },
  {
    "path": "sources/crystax/include/asm/unistd_64.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_UNISTD_64_H_1234D20CDDDA49B4A0BB7B4390449B09\n#define __CRYSTAX_INCLUDE_ASM_UNISTD_64_H_1234D20CDDDA49B4A0BB7B4390449B09\n\n#include <crystax/id.h>\n\n#if defined(__x86_64__) && defined(__LP64__)\n#include <asm-x86/asm/unistd_64.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_UNISTD_64_H_1234D20CDDDA49B4A0BB7B4390449B09 */\n"
  },
  {
    "path": "sources/crystax/include/asm/unistd_x32.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ASM_UNISTD_X32_H_829B38D4B6E14C2B97BDFB8DE2B2CE7F\n#define __CRYSTAX_INCLUDE_ASM_UNISTD_X32_H_829B38D4B6E14C2B97BDFB8DE2B2CE7F\n\n#include <crystax/id.h>\n\n#if defined(__x86_64__) && defined(__ILP32__)\n#include <asm-x86/asm/unistd_x32.h>\n#else\n#error \"Unknown architecture\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ASM_UNISTD_X32_H_829B38D4B6E14C2B97BDFB8DE2B2CE7F */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_ARM_FENV_H_5DD72E92B8A449719F0B902A909BCB18\n#define __CRYSTAX_INCLUDE_CRYSTAX_ARM_FENV_H_5DD72E92B8A449719F0B902A909BCB18\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n__BEGIN_DECLS\n\ntypedef __uint32_t fenv_t;\ntypedef __uint32_t fexcept_t;\n\n/* Exception flags. */\n#define FE_INVALID    0x01\n#define FE_DIVBYZERO  0x02\n#define FE_OVERFLOW   0x04\n#define FE_UNDERFLOW  0x08\n#define FE_INEXACT    0x10\n#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)\n\n/* Rounding modes. */\n#define FE_TONEAREST  0x0\n#define FE_UPWARD     0x1\n#define FE_DOWNWARD   0x2\n#define FE_TOWARDZERO 0x3\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_ARM_FENV_H_5DD72E92B8A449719F0B902A909BCB18 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm64/_inttypes.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ARM64__INTTYPES_H_517E59378D2C43FC8F0CCB28E582E7BF\n#define __CRYSTAX_INCLUDE_ARM64__INTTYPES_H_517E59378D2C43FC8F0CCB28E582E7BF\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real ARM64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_inttypes.h>\n\n#endif /* __CRYSTAX_INCLUDE_ARM64__INTTYPES_H_517E59378D2C43FC8F0CCB28E582E7BF */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm64/_limits.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ARM64__LIMITS_H_DDB7014D7AA6444EAD12E1E46FEECFB3\n#define __CRYSTAX_INCLUDE_ARM64__LIMITS_H_DDB7014D7AA6444EAD12E1E46FEECFB3\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real ARM64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_limits.h>\n\n#endif /* __CRYSTAX_INCLUDE_ARM64__LIMITS_H_DDB7014D7AA6444EAD12E1E46FEECFB3 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm64/_stdint.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ARM64__STDINT_T_93712461C0BE4561A28CD06C5DBE1394\n#define __CRYSTAX_INCLUDE_ARM64__STDINT_T_93712461C0BE4561A28CD06C5DBE1394\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real ARM64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_stdint.h>\n\n#endif /* __CRYSTAX_INCLUDE_ARM64__STDINT_T_93712461C0BE4561A28CD06C5DBE1394 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm64/endian.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ARM64_ENDIAN_H_E421366A61D2402F8C5C0B02844266E8\n#define __CRYSTAX_INCLUDE_ARM64_ENDIAN_H_E421366A61D2402F8C5C0B02844266E8\n\n#include <crystax/id.h>\n#include <sys/_types.h>\n\n#define _LITTLE_ENDIAN  1234\n#define _BIG_ENDIAN 4321\n#define _PDP_ENDIAN 3412\n\n#if defined(__AARCH64EB__)\n#define _BYTE_ORDER _BIG_ENDIAN\n#else\n#define _BYTE_ORDER _LITTLE_ENDIAN\n#endif\n\n#if __BSD_VISIBLE\n#define LITTLE_ENDIAN   _LITTLE_ENDIAN\n#define BIG_ENDIAN      _BIG_ENDIAN\n#define PDP_ENDIAN      _PDP_ENDIAN\n#define BYTE_ORDER      _BYTE_ORDER\n#endif\n\n#if _BYTE_ORDER == _LITTLE_ENDIAN\n#define _QUAD_HIGHWORD 1\n#define _QUAD_LOWWORD  0\n#define __ntohl(x) __bswap32(x)\n#define __ntohs(x) __bswap16(x)\n#define __htonl(x) __bswap32(x)\n#define __htons(x) __bswap32(x)\n#else\n#define _QUAD_HIGHWORD 0\n#define _QUAD_LOWWORD  1\n#define __ntohl(x) ((uint32_t)(x))\n#define __ntohs(x) ((uint16_t)(x))\n#define __htonl(x) ((uint32_t)(x))\n#define __htons(x) ((uint16_t)(x))\n#endif\n\n#ifdef __clang__\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-register\"\n#endif\n\nstatic __inline __uint16_t\n__bswap16_var(__uint16_t x)\n{\n    register __uint16_t _x = x;\n    __asm volatile (\"rev16 %w0, %w0\" : \"+r\" (_x));\n    return _x;\n}\n\n#ifdef __clang__\n#pragma clang diagnostic pop\n#endif\n\n#define __bswap32_var(x) __builtin_bswap32(x)\n#define __bswap64_var(x) __builtin_bswap64(x)\n\n#ifdef __OPTIMIZE__\n\n#define __bswap16_constant(x) __statement({             \\\n        __uint16_t __swap16gen_x = (x);                 \\\n        (__uint16_t)((__swap16gen_x & 0xff) << 8 |      \\\n                     (__swap16gen_x & 0xff00) >> 8);    \\\n    })\n\n#define __bswap32_constant(x) __statement({               \\\n        __uint32_t __swap32gen_x = (x);                   \\\n        (__uint32_t)((__swap32gen_x & 0xff) << 24 |       \\\n                     (__swap32gen_x & 0xff00) << 8 |      \\\n                     (__swap32gen_x & 0xff0000) >> 8 |    \\\n                     (__swap32gen_x & 0xff000000) >> 24); \\\n    })\n\n#define __bswap64_constant(x) __statement({                          \\\n        __uint64_t __swap64gen_x = (x);                              \\\n        (__uint64_t)((__swap64gen_x & 0xff) << 56 |                  \\\n                     (__swap64gen_x & 0xff00ULL) << 40 |             \\\n                     (__swap64gen_x & 0xff0000ULL) << 24 |           \\\n                     (__swap64gen_x & 0xff000000ULL) << 8 |          \\\n                     (__swap64gen_x & 0xff00000000ULL) >> 8 |        \\\n                     (__swap64gen_x & 0xff0000000000ULL) >> 24 |     \\\n                     (__swap64gen_x & 0xff000000000000ULL) >> 40 |   \\\n                     (__swap64gen_x & 0xff00000000000000ULL) >> 56); \\\n    })\n\n#define __bswap16(x) \\\n    (__builtin_constant_p(x) ? __bswap16_constant(x) : __bswap16_var(x))\n\n#define __bswap32(x) \\\n    (__builtin_constant_p(x) ? __bswap32_constant(x) : __bswap32_var(x))\n\n#define __bswap64(x) \\\n    (__builtin_constant_p(x) ? __bswap64_constant(x) : __bswap64_var(x))\n\n#else\n\n#define __bswap16(x) __bswap16_var(x)\n#define __bswap32(x) __bswap32_var(x)\n#define __bswap64(x) __bswap64_var(x)\n\n#endif /* __OPTIMIZE__ */\n\n#endif /* __CRYSTAX_INCLUDE_ARM64_ENDIAN_H_E421366A61D2402F8C5C0B02844266E8 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/arm64/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_ARM64_FENV_H_D3DAD51063A24B51814D36A084D98AA7\n#define __CRYSTAX_INCLUDE_CRYSTAX_ARM64_FENV_H_D3DAD51063A24B51814D36A084D98AA7\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n__BEGIN_DECLS\n\ntypedef struct {\n  __uint32_t __control;     /* FPCR, Floating-point Control Register */\n  __uint32_t __status;      /* FPSR, Floating-point Status Register */\n} fenv_t;\n\ntypedef __uint32_t fexcept_t;\n\n/* Exception flags. */\n#define FE_INVALID    0x01\n#define FE_DIVBYZERO  0x02\n#define FE_OVERFLOW   0x04\n#define FE_UNDERFLOW  0x08\n#define FE_INEXACT    0x10\n#define FE_DENORMAL   0x80\n#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \\\n                       FE_OVERFLOW | FE_UNDERFLOW | FE_DENORMAL)\n\n/* Rounding modes. */\n#define FE_TONEAREST  0x0\n#define FE_UPWARD     0x1\n#define FE_DOWNWARD   0x2\n#define FE_TOWARDZERO 0x3\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_ARM64_FENV_H_D3DAD51063A24B51814D36A084D98AA7 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/common.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_COMMON_HPP_1df9183305a1490da3f1854786bcc851\n#define _CRYSTAX_COMMON_HPP_1df9183305a1490da3f1854786bcc851\n\n#include <crystax/id.h>\n\nnamespace crystax\n{\n\nclass non_copyable_t\n{\npublic:\n    non_copyable_t() {}\n    virtual ~non_copyable_t() {}\n\nprivate:\n    non_copyable_t(non_copyable_t const &);\n    non_copyable_t &operator=(non_copyable_t const &);\n};\n\nnamespace fileio\n{\n\nbool is_normalized(const char *path);\nchar *normalize(const char *path);\n\nbool is_absolute(const char *path);\nchar *absolutize(const char *path);\n\nbool is_subpath(const char *root, const char *path);\nchar *relpath(const char *root, const char *path);\n\nchar *basename(const char *path);\nchar *dirname(const char *path);\n\n} // namespace fileio\n\n} // namespace crystax\n\n#endif /* _CRYSTAX_COMMON_HPP_1df9183305a1490da3f1854786bcc851 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/ctassert.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CTASSERT_H_1B0DC71F4E814FBC907BDB0132B91BBC\n#define __CRYSTAX_INCLUDE_CTASSERT_H_1B0DC71F4E814FBC907BDB0132B91BBC\n\n#include <crystax/id.h>\n\n#ifndef __CRYSTAX_STATIC_ASSERT\n# if defined(__cplusplus) && __cplusplus >= 201103L\n#  define __CRYSTAX_STATIC_ASSERT(cond, message) static_assert(cond, message)\n# else\n#  define __CRYSTAX_STATIC_ASSERT(cond, message) __CRYSTAX_STATIC_ASSERT_IMPL(cond, __COUNTER__)\n#  define __CRYSTAX_STATIC_ASSERT_IMPL(x, y)     __CRYSTAX_STATIC_ASSERT_IMPL2(x, y)\n#  define __CRYSTAX_STATIC_ASSERT_IMPL2(x, y)    typedef char __crystax_static_assert ## y[(x) ? 1 : -1]\n# endif\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_CTASSERT_H_1B0DC71F4E814FBC907BDB0132B91BBC */\n"
  },
  {
    "path": "sources/crystax/include/crystax/details/jni.inc",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\nCRYSTAX_PP_STEP(jboolean)\nCRYSTAX_PP_STEP(jbyte)\nCRYSTAX_PP_STEP(jchar)\nCRYSTAX_PP_STEP(jshort)\nCRYSTAX_PP_STEP(jint)\nCRYSTAX_PP_STEP(jlong)\nCRYSTAX_PP_STEP(jfloat)\nCRYSTAX_PP_STEP(jdouble)\nCRYSTAX_PP_STEP(jhobject)\nCRYSTAX_PP_STEP(jhclass)\nCRYSTAX_PP_STEP(jhstring)\nCRYSTAX_PP_STEP(jhthrowable)\nCRYSTAX_PP_STEP(jharray)\nCRYSTAX_PP_STEP(jhbooleanArray)\nCRYSTAX_PP_STEP(jhbyteArray)\nCRYSTAX_PP_STEP(jhshortArray)\nCRYSTAX_PP_STEP(jhintArray)\nCRYSTAX_PP_STEP(jhlongArray)\nCRYSTAX_PP_STEP(jhfloatArray)\nCRYSTAX_PP_STEP(jhdoubleArray)\nCRYSTAX_PP_STEP(jhobjectArray)\n"
  },
  {
    "path": "sources/crystax/include/crystax/freebsd.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_FREEBSD_H_0E6882890F9949FDA2CAC835E74E8C53\n#define __CRYSTAX_FREEBSD_H_0E6882890F9949FDA2CAC835E74E8C53\n\n#include <crystax/ctassert.h>\n#include <sys/cdefs.h>\n\n#ifdef _KERNEL\n#undef _KERNEL\n#endif\n\n#ifndef __hidden\n#define __hidden __attribute__((__visibility__(\"hidden\")))\n#endif\n\n#ifndef __exported\n#define __exported __attribute__((__visibility__(\"default\")))\n#endif\n\n#ifndef __pure\n#define __pure __attribute__((__pure__))\n#endif\n\n#ifndef __pure2\n#define __pure2 __attribute__((__const__))\n#endif\n\n#ifndef __dead2\n#define __dead2 __attribute__((__noreturn__))\n#endif\n\n#ifndef __malloc_like\n#define __malloc_like __attribute__((__malloc__))\n#endif\n\n#ifndef __printf0like\n#define __printf0like(fmtarg, firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))\n#endif\n\n#ifndef __printflike\n#define __printflike(fmtarg, firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))\n#endif\n\n#ifndef __scanflike\n#define __scanflike(fmtarg, firstvararg)  __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))\n#endif\n\n#ifndef __strfmonlike\n#define __strfmonlike(fmtarg, firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))\n#endif\n\n#ifndef __strftimelike\n#define __strftimelike(fmtarg, firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))\n#endif\n\n#ifndef __format_arg\n#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))\n#endif\n\n#ifndef __noinline\n#define __noinline __attribute__ ((__noinline__))\n#endif\n\n#ifdef __FBSDID\n#undef __FBSDID\n#endif\n#define __FBSDID(x) /* nothing */\n\n#ifndef __DECONST\n#define __DECONST(type, var) ((type)(__uintptr_t)(const void *)(var))\n#endif\n\n#ifndef __DEVOLATILE\n#define __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var))\n#endif\n\n#ifndef __NO_TLS\n#define __NO_TLS 1\n#endif\n\n#if !defined(__compiler_membar)\n#define __compiler_membar() __asm __volatile(\" \" : : : \"memory\")\n#endif\n\n#if defined(__clang__)\n#if !__has_extension(c_thread_local)\n#if __has_extension(cxx_thread_local)\n#define _Thread_local thread_local\n#else\n#define _Thread_local __thread\n#endif\n#endif\n#else\n#define _Thread_local __thread\n#endif\n\n#if defined(__cplusplus) && __cplusplus >= 201103L\n#define _Noreturn [[noreturn]]\n#else\n#define _Noreturn __dead2\n#endif\n\n#ifndef MIN\n#define MIN(a,b) (((a)<(b))?(a):(b))\n#endif\n\n#ifndef MAX\n#define MAX(a,b) (((a)>(b))?(a):(b))\n#endif\n\n#ifndef powerof2\n#define powerof2(x) ((((x)-1)&(x))==0)\n#endif\n\n#define __RUNETYPE_INTERNAL 1\n\n#endif /* __CRYSTAX_FREEBSD_H_0E6882890F9949FDA2CAC835E74E8C53 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/id.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_ID_H_637E161F7CDA4836818F70A36B450FD1\n#define __CRYSTAX_ID_H_637E161F7CDA4836818F70A36B450FD1\n\n#define __LIBCRYSTAX 1\n#define __LIBCRYSTAX__ 1\n\n#endif /* __CRYSTAX_ID_H_637E161F7CDA4836818F70A36B450FD1 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/class.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_CLASS_HPP_7C2D7E9AE34B45A19E57CA4D43E91F7D\n#define _CRYSTAX_JUTILS_CLASS_HPP_7C2D7E9AE34B45A19E57CA4D43E91F7D\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n#include <crystax/jutils/exceptions.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\ninline\njhclass find_class(JNIEnv *env, const char *clsname)\n{\n    jhclass ret((jclass)env->FindClass(clsname));\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return ret;\n}\n\ninline\njhclass find_class(const char *clsname)\n{\n    return find_class(jnienv(), clsname);\n}\n\ntemplate <typename T, typename Refcounter>\njhclass get_class(JNIEnv *env, jholder<T, Refcounter> const &obj)\n{\n    jhclass ret(env->GetObjectClass(obj.get()));\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return ret;\n}\n\ntemplate <typename T, typename Refcounter>\njhclass get_class(jholder<T, Refcounter> const &obj)\n{\n    return get_class(jnienv(), obj);\n}\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_CLASS_HPP_7C2D7E9AE34B45A19E57CA4D43E91F7D */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/exceptions.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_EXCEPTIONS_HPP_5302DB654A1C4F998698D3AE018E46A3\n#define _CRYSTAX_JUTILS_EXCEPTIONS_HPP_5302DB654A1C4F998698D3AE018E46A3\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\njhclass find_class(JNIEnv *env, const char *clsname);\n\ninline void jthrow(JNIEnv *env, jhthrowable const &ex)\n{\n    env->Throw(ex.get());\n}\n\ninline void jthrow(jhthrowable const &ex)\n{\n    jthrow(jnienv(), ex);\n}\n\ninline void jthrow(JNIEnv *env, jhclass const &cls, char const *what)\n{\n    env->ThrowNew(cls.get(), what);\n}\n\ninline void jthrow(jhclass const &cls, char const *what)\n{\n    jthrow(jnienv(), cls, what);\n}\n\ninline void jthrow(JNIEnv *env, char const *clsname, char const *what)\n{\n    jthrow(find_class(env, clsname), what);\n}\n\ninline void jthrow(char const *clsname, char const *what)\n{\n    jthrow(jnienv(), clsname, what);\n}\n\ninline void jthrow(char const *what)\n{\n    jthrow(\"java/lang/RuntimeException\", what);\n}\n\nbool jexcheck(JNIEnv *env);\ninline bool jexcheck()\n{\n    return jexcheck(jnienv());\n}\n\ninline jhthrowable jexception(JNIEnv *env)\n{\n    jhthrowable jex(env->ExceptionOccurred());\n    if (jex) env->ExceptionClear();\n    return jex;\n}\n\ninline jhthrowable jexception()\n{\n    return jexception(jnienv());\n}\n\n// Raise native exception constructed from Java one\n// By default just abort the application\n// If you want other behaviour, just redefine it in your code\nvoid rethrow(JNIEnv *env, jthrowable ex);\n\ninline void rethrow(jthrowable ex)\n{\n    rethrow(jnienv(), ex);\n}\n\ninline void rethrow(JNIEnv *env, jhthrowable const &ex)\n{\n    rethrow(env, ex.get());\n}\n\ninline void rethrow(jhthrowable const &ex)\n{\n    rethrow(jnienv(), ex);\n}\n\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_EXCEPTIONS_HPP_5302DB654A1C4F998698D3AE018E46A3 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/field.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_FIELD_HPP_FFB5C8AED2C64F52842E9F11F3E814E6\n#define _CRYSTAX_JUTILS_FIELD_HPP_FFB5C8AED2C64F52842E9F11F3E814E6\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n#include <crystax/jutils/exceptions.hpp>\n#include <crystax/jutils/class.hpp>\n#include <crystax/jutils/helper.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\n\n// Get field ID\n\ninline\njfieldID get_field_id(JNIEnv *env, jhclass const &cls, const char *name, const char *signature)\n{\n    auto fid = env->GetFieldID(cls.get(), name, signature);\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return fid;\n}\n\ninline\njfieldID get_field_id(jhclass const &cls, const char *name, const char *signature)\n{\n    return get_field_id(jnienv(), cls, name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njfieldID get_field_id(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_field_id(env, get_class(obj), name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njfieldID get_field_id(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_field_id(jnienv(), obj, name, signature);\n}\n\n// Get static field ID\n\ninline\njfieldID get_static_field_id(JNIEnv *env, jhclass const &cls, const char *name, const char *signature)\n{\n    auto fid = env->GetStaticFieldID(cls.get(), name, signature);\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return fid;\n}\n\ninline\njfieldID get_static_field_id(jhclass const &cls, const char *name, const char *signature)\n{\n    return get_static_field_id(jnienv(), cls, name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njfieldID get_static_field_id(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_static_field_id(env, get_class(obj), name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njfieldID get_static_field_id(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_static_field_id(jnienv(), obj, name, signature);\n}\n\n// Get field\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(JNIEnv *env, jholder<T, Refcounter> const &obj, jfieldID fid)\n{\n    return details::jni_helper<Ret>::get_field(env, obj, fid);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(jholder<T, Refcounter> const &obj, jfieldID fid)\n{\n    return get_field<Ret>(jnienv(), obj, fid);\n}\n\ntemplate <typename Ret>\nRet get_field(JNIEnv *env, const char *clsname, jfieldID fid)\n{\n    return get_field<Ret>(env, find_class(env, clsname), fid);\n}\n\ntemplate <typename Ret>\nRet get_field(const char *clsname, jfieldID fid)\n{\n    return get_field<Ret>(jnienv(), clsname, fid);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_field<Ret>(env, obj, get_field_id(env, obj, name, signature));\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_field<Ret>(jnienv(), obj, name, signature);\n}\n\ntemplate <typename Ret>\nRet get_field(JNIEnv *env, const char *clsname, const char *name, const char *signature)\n{\n    return get_field<Ret>(env, find_class(clsname), name, signature);\n}\n\ntemplate <typename Ret>\nRet get_field(const char *clsname, const char *name, const char *signature)\n{\n    return get_field<Ret>(jnienv(), clsname, name, signature);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name)\n{\n    return get_field<Ret>(env, obj, name, details::jni_signature<Ret>::signature);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_field(jholder<T, Refcounter> const &obj, const char *name)\n{\n    return get_field<Ret>(jnienv(), obj, name);\n}\n\ntemplate <typename Ret>\nRet get_field(JNIEnv *env, const char *clsname, const char *name)\n{\n    return get_field<Ret>(env, find_class(env, clsname), name);\n}\n\ntemplate <typename Ret>\nRet get_field(const char *clsname, const char *name)\n{\n    return get_field<Ret>(jnienv(), clsname, name);\n}\n\n// Get static field\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_static_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_field<Ret>(env, obj, get_static_field_id(env, obj, name, signature));\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_static_field(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_static_field<Ret>(jnienv(), obj, name, signature);\n}\n\ntemplate <typename Ret>\nRet get_static_field(JNIEnv *env, const char *clsname, const char *name, const char *signature)\n{\n    return get_static_field<Ret>(env, find_class(env, clsname), name, signature);\n}\n\ntemplate <typename Ret>\nRet get_static_field(const char *clsname, const char *name, const char *signature)\n{\n    return get_static_field<Ret>(jnienv(), clsname, name, signature);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_static_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name)\n{\n    return get_static_field<Ret>(env, obj, name, details::jni_signature<Ret>::signature);\n}\n\ntemplate <typename Ret, typename T, typename Refcounter>\nRet get_static_field(jholder<T, Refcounter> const &obj, const char *name)\n{\n    return get_static_field<Ret>(jnienv(), obj, name);\n}\n\ntemplate <typename Ret>\nRet get_static_field(JNIEnv *env, const char *clsname, const char *name)\n{\n    return get_static_field<Ret>(env, find_class(env, clsname), name);\n}\n\ntemplate <typename Ret>\nRet get_static_field(const char *clsname, const char *name)\n{\n    return get_static_field<Ret>(jnienv(), clsname, name);\n}\n\n// Set field\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(JNIEnv *env, jholder<T, Refcounter> const &obj, jfieldID fid, Arg const &arg)\n{\n    details::jni_helper<Arg>::set_field(env, obj, fid, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(jholder<T, Refcounter> const &obj, jfieldID fid, Arg const &arg)\n{\n    set_field(jnienv(), obj, fid, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(JNIEnv *env, const char *clsname, jfieldID fid, Arg const &arg)\n{\n    set_field(env, find_class(clsname), fid, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(const char *clsname, jfieldID fid, Arg const &arg)\n{\n    set_field(jnienv(), clsname, fid, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature, Arg const &arg)\n{\n    set_field(env, obj, get_field_id(env, obj, name, signature), arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(jholder<T, Refcounter> const &obj, const char *name, const char *signature, Arg const &arg)\n{\n    set_field(jnienv(), obj, name, signature, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(JNIEnv *env, const char *clsname, const char *name, const char *signature, Arg const &arg)\n{\n    set_field(env, find_class(clsname), name, signature, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(const char *clsname, const char *name, const char *signature, Arg const &arg)\n{\n    set_field(jnienv(), clsname, name, signature, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, Arg const &arg)\n{\n    set_field(env, obj, name, details::jni_signature<Arg>::signature, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_field(jholder<T, Refcounter> const &obj, const char *name, Arg const &arg)\n{\n    set_field(jnienv(), obj, name, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(JNIEnv *env, const char *clsname, const char *name, Arg const &arg)\n{\n    set_field(env, find_class(clsname), name, arg);\n}\n\ntemplate <typename Arg>\nvoid set_field(const char *clsname, const char *name, Arg const &arg)\n{\n    set_field(jnienv(), clsname, name, arg);\n}\n\n// Set static field\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_static_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature, Arg const &arg)\n{\n    set_field(env, obj, get_static_field_id(env, obj, name, signature), arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_static_field(jholder<T, Refcounter> const &obj, const char *name, const char *signature, Arg const &arg)\n{\n    set_static_field(jnienv(), obj, name, signature, arg);\n}\n\ntemplate <typename Arg>\nvoid set_static_field(JNIEnv *env, const char *clsname, const char *name, const char *signature, Arg const &arg)\n{\n    set_static_field(env, find_class(env, clsname), name, signature, arg);\n}\n\ntemplate <typename Arg>\nvoid set_static_field(const char *clsname, const char *name, const char *signature, Arg const &arg)\n{\n    set_static_field(jnienv(), clsname, name, signature, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_static_field(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, Arg const &arg)\n{\n    set_static_field(env, obj, name, details::jni_signature<Arg>::signature, arg);\n}\n\ntemplate <typename T, typename Refcounter, typename Arg>\nvoid set_static_field(jholder<T, Refcounter> const &obj, const char *name, Arg const &arg)\n{\n    set_static_field(jnienv(), obj, name, arg);\n}\n\ntemplate <typename Arg>\nvoid set_static_field(JNIEnv *env, const char *clsname, const char *name, Arg const &arg)\n{\n    set_static_field(env, find_class(clsname), name, arg);\n}\n\ntemplate <typename Arg>\nvoid set_static_field(const char *clsname, const char *name, Arg const &arg)\n{\n    set_static_field(jnienv(), clsname, name, arg);\n}\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_FIELD_HPP_FFB5C8AED2C64F52842E9F11F3E814E6 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/helper.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_HELPER_HPP_1E759CAB22894E80AFA1B4CB7131A83F\n#define _CRYSTAX_JUTILS_HELPER_HPP_1E759CAB22894E80AFA1B4CB7131A83F\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nnamespace details\n{\n\nvoid call_void_method(JNIEnv *env, jclass cls, jmethodID mid, ...);\nvoid call_void_method(JNIEnv *env, jobject obj, jmethodID mid, ...);\n#define CRYSTAX_PP_STEP(type) \\\n    type get_ ## type ## _field(JNIEnv *env, jobject obj, jfieldID fid); \\\n    type get_ ## type ## _field(JNIEnv *env, jclass cls, jfieldID fid); \\\n    void set_ ## type ## _field(JNIEnv *env, jobject obj, jfieldID fid, type const &arg); \\\n    void set_ ## type ## _field(JNIEnv *env, jclass cls, jfieldID fid, type const &arg); \\\n    type call_ ## type ## _method(JNIEnv *env, jclass cls, jmethodID mid, ...); \\\n    type call_ ## type ## _method(JNIEnv *env, jobject obj, jmethodID mid, ...);\n#include <crystax/details/jni.inc>\n#undef CRYSTAX_PP_STEP\n\n#define CRYSTAX_PP_STEP(type) inline type raw_arg(type arg) {return arg;}\nCRYSTAX_PP_STEP(jboolean)\nCRYSTAX_PP_STEP(jbyte)\nCRYSTAX_PP_STEP(jchar)\nCRYSTAX_PP_STEP(jshort)\nCRYSTAX_PP_STEP(jint)\nCRYSTAX_PP_STEP(jlong)\nCRYSTAX_PP_STEP(jfloat)\nCRYSTAX_PP_STEP(jdouble)\nCRYSTAX_PP_STEP(jobject)\nCRYSTAX_PP_STEP(jclass)\nCRYSTAX_PP_STEP(jstring)\nCRYSTAX_PP_STEP(jthrowable)\nCRYSTAX_PP_STEP(jarray)\nCRYSTAX_PP_STEP(jbooleanArray)\nCRYSTAX_PP_STEP(jbyteArray)\nCRYSTAX_PP_STEP(jshortArray)\nCRYSTAX_PP_STEP(jintArray)\nCRYSTAX_PP_STEP(jlongArray)\nCRYSTAX_PP_STEP(jfloatArray)\nCRYSTAX_PP_STEP(jdoubleArray)\nCRYSTAX_PP_STEP(jobjectArray)\n#undef CRYSTAX_PP_STEP\n\ntemplate <typename T, typename Refcounter>\nT raw_arg(jholder<T, Refcounter> const &arg)\n{\n    return arg.get();\n}\n\ntemplate <typename Ret>\nstruct jni_helper;\n\ntemplate <>\nstruct jni_helper<void>\n{\n    template <typename T, typename... Args>\n    static void call_method(JNIEnv *env, T const &obj, jmethodID mid, Args&&... args)\n    {\n        details::call_void_method(env, raw_arg(obj), mid, raw_arg(args)...);\n    }\n};\n\n#define CRYSTAX_PP_STEP(type) \\\ntemplate <> \\\nstruct jni_helper<type> \\\n{ \\\n    template <typename T> \\\n    static type get_field(JNIEnv *env, T const &obj, jfieldID fid) \\\n    { \\\n        return details::get_ ## type ## _field(env, raw_arg(obj), fid); \\\n    } \\\n    template <typename T> \\\n    static void set_field(JNIEnv *env, T const &obj, jfieldID fid, type const &arg) \\\n    { \\\n        details::set_ ## type ## _field(env, raw_arg(obj), fid, arg); \\\n    } \\\n    template <typename T, typename... Args> \\\n    static type call_method(JNIEnv *env, T const &obj, jmethodID mid, Args&&... args) \\\n    { \\\n        return details::call_ ## type ## _method(env, raw_arg(obj), mid, raw_arg(args)...); \\\n    } \\\n};\n#include <crystax/details/jni.inc>\n#undef CRYSTAX_PP_STEP\n\ntemplate <typename T>\nstruct jni_signature\n{\n    static const char *signature;\n};\n\n} // namespace details\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_HELPER_HPP_1E759CAB22894E80AFA1B4CB7131A83F */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/jcast.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_JCAST_HPP_05F3A127641F4DE98542AF1149D0B284\n#define _CRYSTAX_JUTILS_JCAST_HPP_05F3A127641F4DE98542AF1149D0B284\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\ntemplate <typename T, typename U>\nstruct jcaster;\n\ntemplate <>\nstruct jcaster<const char *, jstring>\n{\n    const char *operator()(jstring v);\n};\n\ntemplate <>\nstruct jcaster<jhstring, const char *>\n{\n    jhstring operator()(const char *s);\n};\n\ntemplate <>\nstruct jcaster<const char *, jhstring>\n{\n    const char *operator()(jhstring const &v)\n    {\n        return jcaster<const char *, jstring>()(v.get());\n    }\n};\n\ntemplate <typename T, typename U>\nT jcast(U const &v)\n{\n    return jcaster<T, U>()(v);\n}\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_JCAST_HPP_05F3A127641F4DE98542AF1149D0B284 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/jholder.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_JHOLDER_HPP_AC6864CD125E46BF86F47EF5DE234D31\n#define _CRYSTAX_JUTILS_JHOLDER_HPP_AC6864CD125E46BF86F47EF5DE234D31\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <jni.h>\n\n#include <crystax/jutils/jni.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nnamespace refcounter\n{\n\nstruct local final\n{\n    static jobject newref(JNIEnv *env, jobject obj)\n    {\n        return obj ? env->NewLocalRef(obj) : 0;\n    }\n\n    static void release(JNIEnv *env, jobject obj)\n    {\n        if (obj) env->DeleteLocalRef(obj);\n    }\n};\n\nstruct global final\n{\n    static jobject newref(JNIEnv *env, jobject obj)\n    {\n        return obj ? env->NewGlobalRef(obj) : 0;\n    }\n\n    static void release(JNIEnv *env, jobject obj)\n    {\n        if (obj) env->DeleteGlobalRef(obj);\n    }\n};\n\n} // namespace refcounter\n\ntemplate <typename T, typename Refcounter = refcounter::local>\nclass jholder\n{\n    typedef void (jholder::*safe_bool_type)();\n    void non_null_object() {}\n\npublic:\n    explicit jholder(T obj = 0)\n        :object(obj)\n    {}\n\n    jholder(jholder const &c)\n        :object((T)Refcounter::newref(jnienv(), c.object))\n    {}\n\n    template <typename U, typename Refcounter2>\n    jholder(jholder<U, Refcounter2> const &c)\n        :object((T)Refcounter::newref(jnienv(), c.object))\n    {}\n\n    ~jholder()\n    {\n        Refcounter::release(jnienv(), object);\n    }\n\n    jholder &operator=(jholder const &c)\n    {\n        jholder tmp(c);\n        swap(tmp);\n        return *this;\n    }\n\n    template <typename U, typename Refcounter2>\n    jholder &operator=(jholder<U, Refcounter2> const &c)\n    {\n        jholder tmp(c);\n        swap(tmp);\n        return *this;\n    }\n\n    void reset(T obj = 0)\n    {\n        Refcounter::release(jnienv(), obj);\n        object = obj;\n    }\n\n    T get() const {return object;}\n\n    T release()\n    {\n        T ret = object;\n        object = 0;\n        return ret;\n    }\n\n    bool operator!() const {return !object;}\n    operator safe_bool_type () const\n    {\n        return object ? &jholder::non_null_object : 0;\n    }\n\nprivate:\n    void swap(jholder &c)\n    {\n        T tmp = object;\n        object = c.object;\n        c.object = tmp;\n    }\n\nprivate:\n    T object;\n};\n\ntypedef jholder<jclass> jhclass;\ntypedef jholder<jobject> jhobject;\ntypedef jholder<jstring> jhstring;\ntypedef jholder<jthrowable> jhthrowable;\ntypedef jholder<jarray> jharray;\ntypedef jholder<jbyteArray> jhbyteArray;\ntypedef jholder<jbooleanArray> jhbooleanArray;\ntypedef jholder<jcharArray> jhcharArray;\ntypedef jholder<jshortArray> jhshortArray;\ntypedef jholder<jintArray> jhintArray;\ntypedef jholder<jlongArray> jhlongArray;\ntypedef jholder<jfloatArray> jhfloatArray;\ntypedef jholder<jdoubleArray> jhdoubleArray;\ntypedef jholder<jobjectArray> jhobjectArray;\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_JHOLDER_HPP_AC6864CD125E46BF86F47EF5DE234D31 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/jni.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_JNI_HPP_36427583198F41B9B5765835F72A540B\n#define _CRYSTAX_JUTILS_JNI_HPP_36427583198F41B9B5765835F72A540B\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <jni.h>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nJavaVM *jvm();\nJNIEnv *jnienv();\n\ninline JNIEnv *env() { return jnienv(); }\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_JNI_HPP_36427583198F41B9B5765835F72A540B */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils/method.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_METHOD_HPP_881A92D6FDC64BB18193C335A4CBA613\n#define _CRYSTAX_JUTILS_METHOD_HPP_881A92D6FDC64BB18193C335A4CBA613\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n#include <crystax/jutils/exceptions.hpp>\n#include <crystax/jutils/helper.hpp>\n#include <crystax/jutils/class.hpp>\n#include <crystax/jutils/field.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\ninline\njmethodID get_method_id(JNIEnv *env, jhclass const &cls, const char *name, const char *signature)\n{\n    auto mid = env->GetMethodID(cls.get(), name, signature);\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return mid;\n}\n\ninline\njmethodID get_method_id(jhclass const &cls, const char *name, const char *signature)\n{\n    return get_method_id(jnienv(), cls, name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njmethodID get_method_id(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_method_id(env, get_class(obj), name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njmethodID get_method_id(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_method_id(jnienv(), obj, name, signature);\n}\n\ninline\njmethodID get_static_method_id(JNIEnv *env, jhclass const &cls, const char *name, const char *signature)\n{\n    auto mid = env->GetStaticMethodID(cls.get(), name, signature);\n    auto ex = jexception(env);\n    if (ex) rethrow(ex);\n    return mid;\n}\n\ninline\njmethodID get_static_method_id(jhclass const &cls, const char *name, const char *signature)\n{\n    return get_static_method_id(jnienv(), cls, name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njmethodID get_static_method_id(JNIEnv *env, jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_static_method_id(env, get_class(obj), name, signature);\n}\n\ntemplate <typename T, typename Refcounter>\njmethodID get_static_method_id(jholder<T, Refcounter> const &obj, const char *name, const char *signature)\n{\n    return get_static_method_id(jnienv(), obj, name, signature);\n}\n\n// Warning!!! C++11 magic below: variadic templates and perfect forwarding!\n// We need to define own implementation of std::forward because we don't have\n// standard C++ library when building libcrystax.\n\nnamespace details\n{\n\ntemplate <typename T>\nstruct remove_reference\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct remove_reference<T &>\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct remove_reference<T &&>\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct is_lvalue_reference\n{\n    enum {value = false};\n};\n\ntemplate <typename T>\nstruct is_lvalue_reference<T &>\n{\n    enum {value = true};\n};\n\ntemplate <typename T>\ninline T && forward(typename remove_reference<T>::type &arg)\n{\n    return static_cast<T&&>(arg);\n}\n\ntemplate <typename T>\ninline T && forward(typename remove_reference<T>::type &&arg)\n{\n    static_assert(!is_lvalue_reference<T>::value, \"template argument is an lvalue reference type\");\n    return static_cast<T&&>(arg);\n}\n\n} // namespace details\n\ntemplate <typename Ret, typename T, typename... Args>\nRet call_method(JNIEnv *env, T const &obj, jmethodID mid, Args&&... args)\n{\n    return details::jni_helper<Ret>::call_method(env, obj, mid, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename T, typename... Args>\nRet call_method(T const &obj, jmethodID mid, Args&&... args)\n{\n    return call_method<Ret>(jnienv(), obj, mid, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename... Args>\nRet call_method(JNIEnv *env, const char *clsname, jmethodID mid, Args&&... args)\n{\n    return call_method<Ret>(env, find_class(clsname), mid, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename... Args>\nRet call_method(const char *clsname, jmethodID mid, Args&&... args)\n{\n    return call_method<Ret>(jnienv(), clsname, mid, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename T, typename... Args>\nRet call_method(JNIEnv *env, T const &obj, const char *name, const char *signature, Args&&... args)\n{\n    return call_method<Ret>(env, obj, get_method_id(env, obj, name, signature), details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename T, typename... Args>\nRet call_method(T const &obj, const char *name, const char *signature, Args&&... args)\n{\n    return call_method<Ret>(jnienv(), obj, name, signature, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename... Args>\nRet call_method(JNIEnv *env, const char *clsname, const char *name, const char *signature, Args&&... args)\n{\n    return call_method<Ret>(env, find_class(clsname), name, signature, details::forward<Args>(args)...);\n}\n\ntemplate <typename Ret, typename... Args>\nRet call_method(const char *clsname, const char *name, const char *signature, Args&&... args)\n{\n    return call_method<Ret>(jnienv(), clsname, name, signature, details::forward<Args>(args)...);\n}\n\n} // namespace jni\n} // namespace crystax\n\n#endif /* _CRYSTAX_JUTILS_METHOD_HPP_881A92D6FDC64BB18193C335A4CBA613 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/jutils.hpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_JUTILS_HPP_e6ec1ce9928d459eae2faf1df240509a\n#define _CRYSTAX_JUTILS_HPP_e6ec1ce9928d459eae2faf1df240509a\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/jutils/jni.hpp>\n#include <crystax/jutils/jholder.hpp>\n#include <crystax/jutils/jcast.hpp>\n#include <crystax/jutils/exceptions.hpp>\n#include <crystax/jutils/class.hpp>\n#include <crystax/jutils/field.hpp>\n#include <crystax/jutils/method.hpp>\n\n#endif // _CRYSTAX_JUTILS_HPP_e6ec1ce9928d459eae2faf1df240509a\n"
  },
  {
    "path": "sources/crystax/include/crystax/list.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_LIST_HPP_fac4d8667aa24cb0a843360a1d7d8cad\n#define _CRYSTAX_LIST_HPP_fac4d8667aa24cb0a843360a1d7d8cad\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <crystax/common.hpp>\n#include <stddef.h>\n\nnamespace crystax\n{\n\ntemplate <typename T>\nclass list_t : public non_copyable_t\n{\npublic:\n    list_t() :phead(0), ptail(0), sz(0) {}\n    ~list_t() {clear();}\n\n    T *head() const {return phead;}\n    T *tail() const {return ptail;}\n\n    bool empty() const {return sz == 0;}\n\n    size_t size() const {return sz;}\n\n    void clear()\n    {\n        while (phead)\n        {\n            T *node = phead;\n            phead = phead->next;\n            delete node;\n        }\n        phead = ptail = 0;\n        sz = 0;\n    }\n\n    bool push(T *before, T *node)\n    {\n        if (!before || !node) return false;\n\n        T *after = before->next;\n        before->next = node;\n        if (after) after->prev = node;\n        node->prev = before;\n        node->next = after;\n        ++sz;\n        return true;\n    }\n\n    T *pop(T *node)\n    {\n        if (!node) return 0;\n        if (node->prev) node->prev->next = node->next;\n        if (node->next) node->next->prev = node->prev;\n        if (node == phead)\n            phead = phead->next;\n        else if (node == ptail)\n            ptail = ptail->prev;\n        if (phead == 0)\n            ptail = 0;\n        if (ptail == 0)\n            phead = 0;\n        node->next = node->prev = 0;\n        --sz;\n        return node;\n    }\n\n    bool push_front(T *node)\n    {\n        if (!phead)\n        {\n            phead = ptail = node;\n            sz = 1;\n            return true;\n        }\n        return push(phead, node);\n    }\n\n    bool push_back(T *node)\n    {\n        if (!phead)\n        {\n            phead = ptail = node;\n            sz = 1;\n            return true;\n        }\n        if (!push(ptail, node))\n            return false;\n        ptail = node;\n        return true;\n    }\n\n    T *pop_front()\n    {\n        return pop(phead);\n    }\n\n    T *pop_back()\n    {\n        return pop(ptail);\n    }\n\n    template <typename Comparator, typename V>\n    T *find(Comparator c, V const &v)\n    {\n        for (T *node = phead; node; node = node->next)\n        {\n            if (c(*node, v))\n                return node;\n        }\n\n        return 0;\n    }\n\nprivate:\n    T *phead;\n    T *ptail;\n    size_t sz;\n};\n\n} // namespace crystax\n\n#endif // _CRYSTAX_LIST_HPP_fac4d8667aa24cb0a843360a1d7d8cad\n"
  },
  {
    "path": "sources/crystax/include/crystax/log.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_LOG_H_465350AFAEF0438E893862FF11F27853\n#define __CRYSTAX_INCLUDE_CRYSTAX_LOG_H_465350AFAEF0438E893862FF11F27853\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <stdlib.h> /* for abort() */\n#include <inttypes.h>\n#include <stdarg.h>\n\n#ifndef __CRYSTAX_DEBUG\n#define __CRYSTAX_DEBUG 0\n#endif\n\n#define CRYSTAX_LOGLEVEL_DEBUG 3\n#define CRYSTAX_LOGLEVEL_INFO  4\n#define CRYSTAX_LOGLEVEL_WARN  5\n#define CRYSTAX_LOGLEVEL_ERROR 6\n#define CRYSTAX_LOGLEVEL_PANIC 7\n\n#define CRYSTAX_LOGLEVEL_DBG CRYSTAX_LOGLEVEL_DEBUG\n\n#define CRYSTAX_LOGLEVEL_STR_DBG   \"CRYSTAX-DEBUG\"\n#define CRYSTAX_LOGLEVEL_STR_INFO  \"CRYSTAX-INFO \"\n#define CRYSTAX_LOGLEVEL_STR_WARN  \"CRYSTAX-WARN \"\n#define CRYSTAX_LOGLEVEL_STR_ERROR \"CRYSTAX-ERROR\"\n#define CRYSTAX_LOGLEVEL_STR_PANIC \"CRYSTAX-PANIC\"\n\n#define CRYSTAX_LEVEL_TAG(level) CRYSTAX_LOGLEVEL_STR_ ## level\n#define CRYSTAX_LEVEL_VAL(level) CRYSTAX_LOGLEVEL_ ## level\n\n#if __CRYSTAX_DEBUG\n\n#include <unistd.h>\n\n#   define CRYSTAX_LOG(level, fmt, ...) \\\n        __crystax_log(CRYSTAX_LEVEL_VAL(level), \\\n                CRYSTAX_LEVEL_TAG(level), \\\n                \"[%u:%u] ...%s:%-5d: %-15s: \" fmt, \\\n                (unsigned)getpid(), (unsigned)gettid(), \\\n                __crystax_log_short_file(__FILE__), __LINE__, \\\n                __FUNCTION__, ##__VA_ARGS__)\n\n#define CRYSTAX_DEBUG(fmt, ...) CRYSTAX_LOG(DBG, fmt, ##__VA_ARGS__)\n\n#else /* !__CRYSTAX_DEBUG */\n\n#   define CRYSTAX_LOG(level, fmt, ...) \\\n        __crystax_log(CRYSTAX_LEVEL_VAL(level), \\\n                CRYSTAX_LEVEL_TAG(level), \\\n                fmt, ##__VA_ARGS__)\n\n#define CRYSTAX_DEBUG(...) do {} while (0)\n\n#endif /* !__CRYSTAX_DEBUG */\n\n#define CRYSTAX_INFO(fmt, ...)    CRYSTAX_LOG(INFO,  fmt, ##__VA_ARGS__)\n#define CRYSTAX_WARNING(fmt, ...) CRYSTAX_LOG(WARN,  fmt, ##__VA_ARGS__)\n#define CRYSTAX_ERROR(fmt, ...)   CRYSTAX_LOG(ERROR, fmt, ##__VA_ARGS__)\n#define CRYSTAX_PANIC(fmt, ...) \\\n    do { \\\n        CRYSTAX_LOG(PANIC, fmt, ##__VA_ARGS__); \\\n        abort(); \\\n    } while (0)\n\n#define CRYSTAX_DBG(fmt, ...)  CRYSTAX_DEBUG(fmt, ##__VA_ARGS__)\n#define CRYSTAX_WARN(fmt, ...) CRYSTAX_WARNING(fmt, ##__VA_ARGS__)\n#define CRYSTAX_ERR(fmt, ...)  CRYSTAX_ERROR(fmt, ##__VA_ARGS__)\n\n#define CRYSTAX_TRACE CRYSTAX_DEBUG(\"*** TRACE\")\n\n__BEGIN_DECLS\n\nconst char *__crystax_log_short_file(const char *f);\nint __crystax_logcat(int prio, const char *tag, const char *fmt, ...) __attribute__ ((format(printf, 3, 4)));\nint __crystax_log(int prio, const char *tag,  const char *fmt, ...) __attribute__ ((format(printf, 3, 4)));\n\nint __crystax_vlogcat(int prio, const char *tag, const char *fmt, va_list ap);\nint __crystax_vlog(int prio, const char *tag, const char *fmt, va_list ap);\n\n__END_DECLS\n\n#if defined(__cplusplus) && __CRYSTAX_DEBUG\n\nnamespace crystax\n{\nclass call_frame_tracer\n{\npublic:\n    call_frame_tracer(const char *f, int l, const char *fn)\n        :file(f), line(l), function(fn)\n    {\n        __crystax_log(CRYSTAX_LEVEL_VAL(DBG), CRYSTAX_LEVEL_TAG(DBG),\n                \"[%u:%u] ...%s:%-5d: %-15s: *** ENTER\",\n                (unsigned)getpid(), (unsigned)gettid(),\n                __crystax_log_short_file(file), line, function);\n    }\n\n    ~call_frame_tracer()\n    {\n        __crystax_log(CRYSTAX_LEVEL_VAL(DBG), CRYSTAX_LEVEL_TAG(DBG),\n                \"[%u:%u] ...%s:%-5d: %-15s: *** LEAVE\",\n                (unsigned)getpid(), (unsigned)gettid(),\n                __crystax_log_short_file(file), line, function);\n    }\n\nprivate:\n    const char *file;\n    int line;\n    const char *function;\n};\n} // namespace crystax\n\n#define CRYSTAX_FRAME_TRACER ::crystax::call_frame_tracer call_frame_tracer_obj_ ## __LINE (__FILE__, __LINE__, __FUNCTION__);\n\n#else /* defined(__cplusplus) && __CRYSTAX_DEBUG */\n\n#define CRYSTAX_FRAME_TRACER CRYSTAX_DEBUG(\"ENTER\")\n\n#endif /* defined(__cplusplus) && __CRYSTAX_DEBUG */\n\n#if CRYSTAX_LOG_DEFINE_SHORT_MACROS\n#define DBG(fmt, ...)     CRYSTAX_DEBUG(   fmt, ##__VA_ARGS__)\n#define INFO(fmt, ...)    CRYSTAX_INFO(    fmt, ##__VA_ARGS__)\n#define WARNING(fmt, ...) CRYSTAX_WARNING( fmt, ##__VA_ARGS__)\n#define ERROR(fmt, ...)   CRYSTAX_ERROR(   fmt, ##__VA_ARGS__)\n#define PANIC(fmt, ...)   CRYSTAX_PANIC(   fmt, ##__VA_ARGS__)\n\n#define WARN(fmt, ...) WARNING(fmt, ##__VA_ARGS__)\n#define ERR(fmt, ...)  ERROR(fmt, ##__VA_ARGS__)\n\n#define TRACE CRYSTAX_TRACE\n#define FRAME_TRACER CRYSTAX_FRAME_TRACER\n#endif /* CRYSTAX_LOG_DEFINE_SHORT_MACROS */\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_LOG_H_465350AFAEF0438E893862FF11F27853 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/memory.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_MEMORY_HPP_082889d25d1243759f873416990f0023\n#define _CRYSTAX_MEMORY_HPP_082889d25d1243759f873416990f0023\n\n#include <crystax/id.h>\n\n#include <crystax/common.hpp>\n\n#include <stdlib.h>\n\nnamespace crystax\n{\n\nnamespace details\n{\n\nstruct free_policy_t\n{\n    template <typename T>\n    static void free(T *ptr)\n    {\n        ::free((void*)ptr);\n    }\n};\n\nstruct delete_ptr_policy_t\n{\n    template <typename T>\n    static void free(T *ptr)\n    {\n        delete ptr;\n    }\n};\n\nstruct delete_array_policy_t\n{\n    template <typename T>\n    static void free(T *ptr)\n    {\n        delete [] ptr;\n    }\n};\n\ntemplate <typename T, typename DeletePolicy>\nclass scope_ptr_t : public non_copyable_t\n{\npublic:\n    explicit scope_ptr_t(T *p)\n        :ptr(p)\n    {}\n\n    ~scope_ptr_t() {reset();}\n\n    bool operator!() const {return !ptr;}\n    T *operator->() const {return ptr;}\n    T *get() const {return ptr;}\n    T &operator*() const {return *ptr;}\n\n    T const &operator[](size_t index) const {return ptr[index];}\n    T &operator[](size_t index) {return ptr[index];}\n\n    void reset(T *p = 0)\n    {\n        DeletePolicy::free(ptr);\n        ptr = p;\n    }\n\n    T *release()\n    {\n        T *p = ptr;\n        ptr = 0;\n        return p;\n    }\n\n    void swap(scope_ptr_t &c)\n    {\n        T *tmp = ptr;\n        ptr = c.ptr;\n        c.ptr = tmp;\n    }\n\nprivate:\n    T *ptr;\n};\n\ntemplate <typename T, typename DeletePolicy>\nvoid swap(scope_ptr_t<T, DeletePolicy> &a, scope_ptr_t<T, DeletePolicy> &b)\n{\n    a.swap(b);\n}\n\n} // namespace details\n\ntemplate <typename T>\nclass scope_c_ptr_t : public details::scope_ptr_t<T, details::free_policy_t>\n{\npublic:\n    explicit scope_c_ptr_t(T *p)\n        :details::scope_ptr_t<T, details::free_policy_t>(p)\n    {}\n};\n\ntemplate <typename T>\nclass scope_cpp_ptr_t : public details::scope_ptr_t<T, details::delete_ptr_policy_t>\n{\npublic:\n    explicit scope_cpp_ptr_t(T *p)\n        :details::scope_ptr_t<T, details::delete_ptr_policy_t>(p)\n    {}\n};\n\ntemplate <typename T>\nclass scope_cpp_array_t : public details::scope_ptr_t<T, details::delete_array_policy_t>\n{\npublic:\n    explicit scope_cpp_array_t(T *p)\n        :details::scope_ptr_t<T, details::delete_array_policy_t>(p)\n    {}\n};\n\n} // namespace crystax\n\n#endif /* _CRYSTAX_MEMORY_HPP_082889d25d1243759f873416990f0023 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_MIPS_FENV_H_6770D344379B4A5CBCD5EB92A832AB9C\n#define __CRYSTAX_INCLUDE_CRYSTAX_MIPS_FENV_H_6770D344379B4A5CBCD5EB92A832AB9C\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n/* MIPS FPU floating point control register bits.\n *\n * 31-25  -> floating point conditions code bits set by FP compare\n *           instructions\n * 24     -> flush denormalized results to zero instead of\n *           causing unimplemented operation exception.\n * 23     -> Condition bit\n * 22     -> In conjunction with FS detects denormalized\n *           operands and replaces them internally with 0.\n * 21     -> In conjunction with FS forces denormalized operands\n *           to the closest normalized value.\n * 20-18  -> reserved (read as 0, write with 0)\n * 17     -> cause bit for unimplemented operation\n * 16     -> cause bit for invalid exception\n * 15     -> cause bit for division by zero exception\n * 14     -> cause bit for overflow exception\n * 13     -> cause bit for underflow exception\n * 12     -> cause bit for inexact exception\n * 11     -> enable exception for invalid exception\n * 10     -> enable exception for division by zero exception\n *  9     -> enable exception for overflow exception\n *  8     -> enable exception for underflow exception\n *  7     -> enable exception for inexact exception\n *  6     -> flag invalid exception\n *  5     -> flag division by zero exception\n *  4     -> flag overflow exception\n *  3     -> flag underflow exception\n *  2     -> flag inexact exception\n *  1-0   -> rounding control\n *\n *\n * Rounding Control:\n * 00 - rounding to nearest (RN)\n * 01 - rounding toward zero (RZ)\n * 10 - rounding (up) toward plus infinity (RP)\n * 11 - rounding (down)toward minus infinity (RM)\n */\n\n__BEGIN_DECLS\n\ntypedef __uint32_t    fenv_t;\ntypedef __uint32_t    fexcept_t;\n\n/* Exception flags */\n#define FE_INVALID      0x40\n#define FE_DIVBYZERO    0x20\n#define FE_OVERFLOW     0x10\n#define FE_UNDERFLOW    0x08\n#define FE_INEXACT      0x04\n#define FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | \\\n                         FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)\n\n/* Rounding modes */\n#define FE_TONEAREST    0x0000\n#define FE_TOWARDZERO   0x0001\n#define FE_UPWARD       0x0002\n#define FE_DOWNWARD     0x0003\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_MIPS_FENV_H_6770D344379B4A5CBCD5EB92A832AB9C */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips64/_inttypes.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64__INTTYPES_H_6447DE73D4784EAFBF636BCF99056E29\n#define __CRYSTAX_INCLUDE_MIPS64__INTTYPES_H_6447DE73D4784EAFBF636BCF99056E29\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real MIPS64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_inttypes.h>\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64__INTTYPES_H_6447DE73D4784EAFBF636BCF99056E29 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips64/_limits.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64__LIMITS_H_5616538665E643819A03BA52A922495F\n#define __CRYSTAX_INCLUDE_MIPS64__LIMITS_H_5616538665E643819A03BA52A922495F\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real MIPS64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_limits.h>\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64__LIMITS_H_5616538665E643819A03BA52A922495F */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips64/_stdint.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64__STDINT_T_83EA274A4CCC49699D7C7D83E7877D8D\n#define __CRYSTAX_INCLUDE_MIPS64__STDINT_T_83EA274A4CCC49699D7C7D83E7877D8D\n\n#include <crystax/id.h>\n\n/* WARNING!!! Need to be reviewed when real MIPS64 device/emulator appear */\n#include <crystax/freebsd/sys/x86/include/mangled-_stdint.h>\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64__STDINT_T_83EA274A4CCC49699D7C7D83E7877D8D */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips64/endian.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64_ENDIAN_H_3CC1D29D10C64ADF995C0699D4C6471C\n#define __CRYSTAX_INCLUDE_MIPS64_ENDIAN_H_3CC1D29D10C64ADF995C0699D4C6471C\n\n#include <crystax/id.h>\n#include <sys/_types.h>\n\n#define _LITTLE_ENDIAN  1234\n#define _BIG_ENDIAN 4321\n#define _PDP_ENDIAN 3412\n\n#if defined(__MIPSEB__)\n#define _BYTE_ORDER _BIG_ENDIAN\n#else\n#define _BYTE_ORDER _LITTLE_ENDIAN\n#endif\n\n#if __BSD_VISIBLE\n#define LITTLE_ENDIAN   _LITTLE_ENDIAN\n#define BIG_ENDIAN      _BIG_ENDIAN\n#define PDP_ENDIAN      _PDP_ENDIAN\n#define BYTE_ORDER      _BYTE_ORDER\n#endif\n\n#if _BYTE_ORDER == _LITTLE_ENDIAN\n#define _QUAD_HIGHWORD 1\n#define _QUAD_LOWWORD  0\n#define __ntohl(x) __bswap32(x)\n#define __ntohs(x) __bswap16(x)\n#define __htonl(x) __bswap32(x)\n#define __htons(x) __bswap32(x)\n#else\n#define _QUAD_HIGHWORD 0\n#define _QUAD_LOWWORD  1\n#define __ntohl(x) ((uint32_t)(x))\n#define __ntohs(x) ((uint16_t)(x))\n#define __htonl(x) ((uint32_t)(x))\n#define __htons(x) ((uint16_t)(x))\n#endif\n\n#define __bswap16_gen(x)      __statement({               \\\n        __uint16_t __swap16gen_x = (x);                   \\\n        (__uint16_t)((__swap16gen_x & 0xff) << 8 |        \\\n                     (__swap16gen_x & 0xff00) >> 8);      \\\n    })\n\n#define __bswap32_gen(x) __statement({                    \\\n        __uint32_t __swap32gen_x = (x);                   \\\n        (__uint32_t)((__swap32gen_x & 0xff) << 24 |       \\\n                     (__swap32gen_x & 0xff00) << 8 |      \\\n                     (__swap32gen_x & 0xff0000) >> 8 |    \\\n                     (__swap32gen_x & 0xff000000) >> 24); \\\n    })\n\n#define __bswap64_gen(x) __statement({                               \\\n        __uint64_t __swap64gen_x = (x);                              \\\n        (__uint64_t)((__swap64gen_x & 0xff) << 56 |                  \\\n                     (__swap64gen_x & 0xff00ULL) << 40 |             \\\n                     (__swap64gen_x & 0xff0000ULL) << 24 |           \\\n                     (__swap64gen_x & 0xff000000ULL) << 8 |          \\\n                     (__swap64gen_x & 0xff00000000ULL) >> 8 |        \\\n                     (__swap64gen_x & 0xff0000000000ULL) >> 24 |     \\\n                     (__swap64gen_x & 0xff000000000000ULL) >> 40 |   \\\n                     (__swap64gen_x & 0xff00000000000000ULL) >> 56); \\\n    })\n\n#define __bswap16_constant(x) __bswap16_gen(x)\n#define __bswap32_constant(x) __bswap32_gen(x)\n#define __bswap64_constant(x) __bswap64_gen(x)\n\n#if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)\n\n#ifdef __clang__\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-register\"\n#endif\n\nstatic __inline __uint16_t\n__bswap16_var(__uint16_t x)\n{\n    register __uint16_t _x = x;\n    register __uint16_t _r;\n    __asm volatile (\"wsbh %0, %1\" : \"=r\" (_r) : \"r\" (_x));\n    return _r;\n}\n\nstatic __inline __uint32_t\n__bswap32_var(__uint32_t x)\n{\n    register __uint32_t _x = x;\n    register __uint32_t _r;\n    __asm volatile (\"wsbh %0, %1; rotr %0, %0, 16\" : \"=r\" (_r) : \"r\" (_x));\n    return _r;\n}\n\nstatic __inline __uint64_t\n__bswap64_var(__uint64_t x)\n{\n    __uint64_t _x = x;\n    return ((__uint64_t) __bswap32_var(_x >> 32)) |\n        ((__uint64_t) __bswap32_var(_x & 0xffffffff) << 32);\n}\n\n#ifdef __clang__\n#pragma clang diagnostic pop\n#endif\n\n#else /* !defined(__mips_isa_rev) || (__mips_isa_rev < 2) */\n\n#define __bswap16_var(x) __bswap16_gen(x)\n#define __bswap32_var(x) __bswap32_gen(x)\n#define __bswap64_var(x) __bswap64_gen(x)\n\n#endif /* !defined(__mips_isa_rev) || (__mips_isa_rev < 2) */\n\n#ifdef __OPTIMIZE__\n\n#define __bswap16(x) \\\n    (__builtin_constant_p(x) ? __bswap16_constant(x) : __bswap16_var(x))\n\n#define __bswap32(x) \\\n    (__builtin_constant_p(x) ? __bswap32_constant(x) : __bswap32_var(x))\n\n#define __bswap64(x) \\\n    (__builtin_constant_p(x) ? __bswap64_constant(x) : __bswap64_var(x))\n\n#else\n\n#define __bswap16(x) __bswap16_var(x)\n#define __bswap32(x) __bswap32_var(x)\n#define __bswap64(x) __bswap64_var(x)\n\n#endif /* __OPTIMIZE__ */\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64_ENDIAN_H_3CC1D29D10C64ADF995C0699D4C6471C */\n"
  },
  {
    "path": "sources/crystax/include/crystax/mips64/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_MIPS64_FENV_H_26DEA07E2A9B4D38B6099D6B73907621\n#define __CRYSTAX_INCLUDE_CRYSTAX_MIPS64_FENV_H_26DEA07E2A9B4D38B6099D6B73907621\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n/* MIPS FPU floating point control register bits.\n *\n * 31-25  -> floating point conditions code bits set by FP compare\n *           instructions\n * 24     -> flush denormalized results to zero instead of\n *           causing unimplemented operation exception.\n * 23     -> Condition bit\n * 22     -> In conjunction with FS detects denormalized\n *           operands and replaces them internally with 0.\n * 21     -> In conjunction with FS forces denormalized operands\n *           to the closest normalized value.\n * 20-18  -> reserved (read as 0, write with 0)\n * 17     -> cause bit for unimplemented operation\n * 16     -> cause bit for invalid exception\n * 15     -> cause bit for division by zero exception\n * 14     -> cause bit for overflow exception\n * 13     -> cause bit for underflow exception\n * 12     -> cause bit for inexact exception\n * 11     -> enable exception for invalid exception\n * 10     -> enable exception for division by zero exception\n *  9     -> enable exception for overflow exception\n *  8     -> enable exception for underflow exception\n *  7     -> enable exception for inexact exception\n *  6     -> flag invalid exception\n *  5     -> flag division by zero exception\n *  4     -> flag overflow exception\n *  3     -> flag underflow exception\n *  2     -> flag inexact exception\n *  1-0   -> rounding control\n *\n *\n * Rounding Control:\n * 00 - rounding to nearest (RN)\n * 01 - rounding toward zero (RZ)\n * 10 - rounding (up) toward plus infinity (RP)\n * 11 - rounding (down)toward minus infinity (RM)\n */\n\n__BEGIN_DECLS\n\ntypedef __uint32_t    fenv_t;\ntypedef __uint32_t    fexcept_t;\n\n/* Exception flags */\n#define FE_INVALID    0x40\n#define FE_DIVBYZERO  0x20\n#define FE_OVERFLOW   0x10\n#define FE_UNDERFLOW  0x08\n#define FE_INEXACT    0x04\n#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \\\n                       FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)\n\n/* Rounding modes */\n#define FE_TONEAREST  0x0000\n#define FE_TOWARDZERO 0x0001\n#define FE_UPWARD     0x0002\n#define FE_DOWNWARD   0x0003\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_MIPS64_FENV_H_26DEA07E2A9B4D38B6099D6B73907621 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/path.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_PATH_HPP_e07f4133db9547fc910f4c7e2f6a8a35\n#define _CRYSTAX_PATH_HPP_e07f4133db9547fc910f4c7e2f6a8a35\n\n#include <crystax/id.h>\n\n#ifndef __cplusplus\n#error \"This is C++ header file, you shouldn't include it to non-C++ sources\"\n#endif\n\n#include <string.h>\n\n#include <crystax/common.hpp>\n#include <crystax/memory.hpp>\n#include <crystax/jutils.hpp>\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nnamespace details\n{\n\nclass path_t\n{\n    typedef void (path_t::*safe_bool_type)() const;\n    void non_empty_path() const {}\npublic:\n    explicit path_t(const char *path = NULL)\n        :p(0), len(0)\n    {\n        reset(path);\n    }\n\n    bool operator!() const {return !p;}\n    operator safe_bool_type () const\n    {\n        return !p ? 0 : &path_t::non_empty_path;\n    }\n\n    const char &operator*() const {return *p;}\n\n    const char &operator[](size_t index) const {return p.get()[index];}\n\n    bool empty() const {return *p == '\\0';}\n\n    virtual void reset(const char *path = NULL)\n    {\n        p.reset(path);\n        len = path ? ::strlen(path) : 0;\n    }\n\n    const char *release()\n    {\n        len = 0;\n        return p.release();\n    }\n\n    const char *c_str() const {return p.get();}\n    size_t length() const {return len;}\n\n    bool subpath(path_t const &root) const {return subpath(root.c_str());}\n    bool subpath(const char *root) const {return is_subpath(root, c_str());}\n\n    const char *relpath(path_t const &root) const {return ::crystax::fileio::relpath(root.c_str(), c_str());}\n    const char *relpath(const char *root) const {return ::crystax::fileio::relpath(root, c_str());}\n\n    const char *basename() const {return ::crystax::fileio::basename(c_str());}\n    const char *dirname() const {return ::crystax::fileio::dirname(c_str());}\n\n    path_t &operator+=(path_t const &path) {return *this += path.c_str();}\n    path_t &operator+=(const char *path)\n    {\n        if (!path || *path == '\\0')\n            return *this;\n\n        char *ns = (char *)::malloc(length() + ::strlen(path) + 2);\n        ::strcpy(ns, p.get());\n        ::strcat(ns, \"/\");\n        ::strcat(ns, path);\n\n        if (is_normalized(ns))\n            reset(ns);\n        else\n        {\n            reset(normalize(ns));\n            ::free((void*)ns);\n        }\n\n        return *this;\n    }\n\nprivate:\n    bool n;\n    scope_c_ptr_t<const char> p;\n    size_t len;\n};\n\ninline\nbool operator==(path_t const &a, path_t const &b)\n{\n    if (!a || !b)\n        return a.c_str() == b.c_str();\n    return a.length() == b.length() && ::strcmp(a.c_str(), b.c_str()) == 0;\n}\n\ninline\nbool operator!=(path_t const &a, path_t const &b)\n{\n    return !(a == b);\n}\n\n} // namespace details\n\nclass path_t : public details::path_t\n{\npublic:\n    explicit path_t(const char *path = NULL)\n        :details::path_t(normalize(path))\n    {}\n\n    void reset(const char *path = NULL)\n    {\n        details::path_t::reset(normalize(path));\n    }\n};\n\ntemplate <typename T>\nT jcast(path_t const &p)\n{\n    return jcast<T>(p.c_str());\n}\n\nclass abspath_t : public details::path_t\n{\npublic:\n    explicit abspath_t(const char *path = NULL)\n        :details::path_t(absolutize(path))\n    {}\n\n    void reset(const char *path = NULL)\n    {\n        details::path_t::reset(absolutize(path));\n    }\n};\n\ntemplate <typename T>\nT jcast(abspath_t const &p)\n{\n    return jcast<T>(p.c_str());\n}\n\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_PATH_HPP_e07f4133db9547fc910f4c7e2f6a8a35\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/ctype.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_CTYPE_H_8A8879F902CA401B82590EC64295C390\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_CTYPE_H_8A8879F902CA401B82590EC64295C390\n\n#ifndef _CTYPE_H_\n#error This file must be included from ctype.h only\n#endif\n\n#include <crystax/id.h>\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_CTYPE_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_CTYPE_H_8A8879F902CA401B82590EC64295C390 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/endian.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_ENDIAN_H_B013EA419E364C5987ED776492BED803\n#define __CRYSTAX_INCLUDE_SYS_ENDIAN_H_B013EA419E364C5987ED776492BED803\n\n#include <crystax/id.h>\n\n#ifndef _BYTE_ORDER\n#error '_BYTE_ORDER' not defined\n#endif\n\n#ifndef _LITTLE_ENDIAN\n#error '_LITTLE_ENDIAN' not defined\n#endif\n\n#ifndef _BIG_ENDIAN\n#error '_BIG_ENDIAN' not defined\n#endif\n\n#ifndef __BYTE_ORDER\n#define __BYTE_ORDER _BYTE_ORDER\n#endif\n\n#ifndef __LITTLE_ENDIAN\n#define __LITTLE_ENDIAN _LITTLE_ENDIAN\n#endif\n\n#ifndef __BIG_ENDIAN\n#define __BIG_ENDIAN _BIG_ENDIAN\n#endif\n\n#if __BYTE_ORDER == __LITTLE_ENDIAN\n#define __LONG_LONG_PAIR(HI, LO) LO, HI\n#elif __BYTE_ORDER == __BIG_ENDIAN\n#define __LONG_LONG_PAIR(HI, LO) HI, LO\n#endif\n\n#if __BSD_VISIBLE\n\n#if _BYTE_ORDER == _LITTLE_ENDIAN\n#define betoh16(x) bswap16(x)\n#define betoh32(x) bswap32(x)\n#define betoh64(x) bswap64(x)\n\n#define letoh16(x) ((uint16_t)(x))\n#define letoh32(x) ((uint32_t)(x))\n#define letoh64(x) ((uint64_t)(x))\n\n#define ntohs(x) bswap16(x)\n#define htons(x) bswap16(x)\n#define ntohl(x) bswap32(x)\n#define htonl(x) bswap32(x)\n#define ntohq(x) bswap64(x)\n#define htonq(x) bswap64(x)\n#endif /* _BYTE_ORDER */\n\n#if _BYTE_ORDER == _BIG_ENDIAN\n#define betoh16(x) ((uint16_t)(x))\n#define betoh32(x) ((uint32_t)(x))\n#define betoh64(x) ((uint64_t)(x))\n\n#define letoh16(x) bswap16(x)\n#define letoh32(x) bswap32(x)\n#define letoh64(x) bswap64(x)\n\n#define ntohs(x) ((uint16_t)(x))\n#define htons(x) ((uint16_t)(x))\n#define ntohl(x) ((uint32_t)(x))\n#define htonl(x) ((uint32_t)(x))\n#define ntohq(x) ((uint64_t)(x))\n#define htonq(x) ((uint64_t)(x))\n#endif /* _BYTE_ORDER */\n\n#define NTOHL(x) (x) = ntohl((uint32_t)(x))\n#define NTOHS(x) (x) = ntohs((uint16_t)(x))\n#define HTONL(x) (x) = htonl((uint32_t)(x))\n#define HTONS(x) (x) = htons((uint16_t)(x))\n\n#endif /* __BSD_VISIBLE */\n\n#define __swap16(x) __bswap16(x)\n#define __swap32(x) __bswap32(x)\n#define __swap64(x) __bswap64(x)\n\n#define __swap16md(x) __bswap16_var(x)\n#define __swap32md(x) __bswap32_var(x)\n#define __swap64md(x) __bswap64_var(x)\n\n#endif /* __CRYSTAX_INCLUDE_SYS_ENDIAN_H_B013EA419E364C5987ED776492BED803 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/fenvsoft.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_FENVSOFT_H_412F7154277B4CDD984801515157D2CB\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_FENVSOFT_H_412F7154277B4CDD984801515157D2CB\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n__BEGIN_DECLS\n\ntypedef __uint32_t fenv_t;\ntypedef __uint32_t fexcept_t;\n\n/* Exception flags. */\n#define FE_INVALID    0x01\n#define FE_DIVBYZERO  0x02\n#define FE_OVERFLOW   0x04\n#define FE_UNDERFLOW  0x08\n#define FE_INEXACT    0x10\n#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)\n\n/* Rounding modes. */\n#define FE_TONEAREST  0x0\n#define FE_UPWARD     0x1\n#define FE_DOWNWARD   0x2\n#define FE_TOWARDZERO 0x3\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_FENVSOFT_H_412F7154277B4CDD984801515157D2CB */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/fpmath.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*-\n * Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org>\n * Copyright (c) 2002 David Schultz <das@FreeBSD.ORG>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * $FreeBSD$\n */\n\n// ANDROID changed:\n// - keep only little endian variants as they're the only one supported.\n// - add long double structures here instead of _fpmath.h.\n// - android uses 128 bits long doubles for LP64, so the structure and macros\n//   were reworked for the quad precision ieee representation.\n\n#ifndef __CRYSTAX_INCLUDE_SYS_FPMATH_H_633BE944038D49EDB7686E931E648657\n#define __CRYSTAX_INCLUDE_SYS_FPMATH_H_633BE944038D49EDB7686E931E648657\n\n#include <endian.h>\n#include <sys/_types.h>\n\nunion IEEEf2bits {\n  float f;\n  struct {\n    unsigned int man   :23;\n    unsigned int exp   :8;\n    unsigned int sign  :1;\n  } bits;\n};\n\n#define DBL_MANH_SIZE  20\n#define DBL_MANL_SIZE  32\n\nunion IEEEd2bits {\n  double  d;\n  struct {\n    unsigned int manl  :32;\n    unsigned int manh  :20;\n    unsigned int exp   :11;\n    unsigned int sign  :1;\n  } bits;\n};\n\n#if __LDBL_MANT_DIG__ == 53\n\ntypedef unsigned long IEEEl2bits_man_t;\n\nunion IEEEl2bits {\n  long double  e;\n  struct {\n    unsigned long manl  :32;\n    unsigned long manh  :20;\n    unsigned int  exp   :11;\n    unsigned int  sign  :1;\n  } bits;\n  struct {\n    unsigned long manl    :32;\n    unsigned long manh    :20;\n    unsigned int  expsign :12;\n  } xbits;\n};\n\n#define LDBL_MANH_SIZE DBL_MANH_SIZE\n#define LDBL_MANL_SIZE DBL_MANL_SIZE\n\n#define LDBL_TO_ARRAY32(u, a) do {           \\\n  (a)[0] = (uint32_t)(u).bits.manl;          \\\n  (a)[1] = (uint32_t)(u).bits.manh;          \\\n} while(0)\n\n#elif __LDBL_MANT_DIG__ == 113\n\ntypedef __uint64_t IEEEl2bits_man_t;\n\nunion IEEEl2bits {\n  long double e;\n  struct {\n    __uint64_t manl  :64;\n    __uint64_t manh  :48;\n    unsigned int  exp   :15;\n    unsigned int  sign  :1;\n  } bits;\n  struct {\n    __uint64_t manl     :64;\n    __uint64_t manh     :48;\n    unsigned int  expsign  :16;\n  } xbits;\n};\n\n#define LDBL_MANH_SIZE  48\n#define LDBL_MANL_SIZE  64\n\n#define LDBL_TO_ARRAY32(u, a) do {           \\\n  (a)[0] = (uint32_t)(u).bits.manl;          \\\n  (a)[1] = (uint32_t)((u).bits.manl >> 32);  \\\n  (a)[2] = (uint32_t)(u).bits.manh;          \\\n  (a)[3] = (uint32_t)((u).bits.manh >> 32);  \\\n} while(0)\n\n#endif /* __LDBL_MANT_DIG__ == 113 */\n\n#define LDBL_NBIT  0\n#define LDBL_IMPLICIT_NBIT\n#define mask_nbit_l(u)  ((void)0)\n\n#endif /* __CRYSTAX_INCLUDE_SYS_FPMATH_H_633BE944038D49EDB7686E931E648657 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/inttypes.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_INTTYPES_H_916E25D5E15C4DACAFEAAB4390D6147E\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_INTTYPES_H_916E25D5E15C4DACAFEAAB4390D6147E\n\n#include <crystax/id.h>\n#include <stdint.h>\n/* Enable extended locale interfaces */\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_INTTYPES_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_INTTYPES_H_916E25D5E15C4DACAFEAAB4390D6147E */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/langinfo.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_LANGINFO_H_25003435A84A43279471F9475C19C2AE\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_LANGINFO_H_25003435A84A43279471F9475C19C2AE\n\n#include <crystax/id.h>\n/* Enable extended locale interfaces */\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_LANGINFO_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_LANGINFO_H_25003435A84A43279471F9475C19C2AE */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/limits.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_LIMITS_H_AB5D38F5B8194E07AAFB4280C9468A53\n#define __CRYSTAX_INCLUDE_SYS_LIMITS_H_AB5D38F5B8194E07AAFB4280C9468A53\n\n#include <crystax/id.h>\n\n#include <linux/limits.h>\n\n#include <android/api-level.h>\n\n#ifndef PAGE_SIZE\n#if __ANDROID_API__ < 21\n#include <asm/page.h>\n#else\n#define PAGE_SIZE 4096\n#endif\n#endif\n\n#ifndef PAGESIZE\n#define PAGESIZE PAGE_SIZE\n#endif\n\n#ifndef PAGE_MASK\n#define PAGE_MASK (~(PAGE_SIZE - 1))\n#endif\n\n#ifndef PTHREAD_STACK_MIN\n#if defined(__LP64__)\n#define PTHREAD_STACK_MIN (4 * PAGE_SIZE)\n#else\n#define PTHREAD_STACK_MIN (2 * PAGE_SIZE)\n#endif\n#endif\n\n#define SEM_VALUE_MAX 0x3fffffff\n\n#define CHILD_MAX   999\n#define OPEN_MAX    256\n\n#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4\n#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS\n#define _POSIX_THREAD_KEYS_MAX 128\n#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX\n#define _POSIX_THREAD_THREADS_MAX 64\n#define PTHREAD_THREADS_MAX 2048 /* bionic has no specific limit */\n\n#define _POSIX_VERSION             200809L   /* Posix C language bindings version */\n#define _POSIX2_VERSION            (-1)      /* we don't support Posix command-line tools */\n#define _POSIX2_C_VERSION          _POSIX_VERSION\n#define _XOPEN_VERSION             700       /* by Posix definition */\n#define _XOPEN_XCU_VERSION         (-1)      /* we don't support command-line utilities */\n\n#define _POSIX_SHELL               (-1)\n\n#if _POSIX_VERSION > 0\n#define _XOPEN_XPG2                1\n#define _XOPEN_XPG3                1\n#define _XOPEN_XPG4                1\n#define _XOPEN_UNIX                1\n#endif\n\n#define _XOPEN_ENH_I18N            (-1)  /* we don't support internationalization in the C library */\n#define _XOPEN_CRYPT               (-1)  /* don't support X/Open Encryption */\n#define _XOPEN_LEGACY              (-1)  /* don't claim we support these, we have some of them but not all */\n#define _XOPEN_REALTIME            (-1)  /* we don't support all these functions */\n#define _XOPEN_REALTIME_THREADS    (-1)  /* same here */\n#define _XOPEN_SHM                 (-1)  /* same here */\n\n#define _POSIX_ADVISORY_INFO        200809L\n\n#define _POSIX_ASYNCHRONOUS_IO      -1  /* not implemented */\n\n#define _POSIX_BARRIERS             -1  /* not implemented */\n\n#define _POSIX_CLOCK_SELECTION      200809L\n\n#define _POSIX_CPUTIME              200809L\n#define _POSIX_THREAD_CPUTIME       200809L\n\n#define _POSIX_IPV6                 200809L\n\n#define _POSIX_FSYNC                200809L\n\n#define _POSIX_MAPPED_FILES         200809L\n\n#define _POSIX_MEMLOCK              200809L\n#define _POSIX_MEMLOCK_RANGE        200809L\n#define _POSIX_MEMORY_PROTECTION    200809L\n#define _POSIX_MEMORY_PROTECTION    200809L\n\n#define _POSIX_MESSAGE_PASSING      -1  /* not implemented */\n\n#define _POSIX_MONOTONIC_CLOCK       200809L\n\n#define _POSIX_PRIORITY_SCHEDULING  200809L\n\n#define _POSIX_PRIORITIZED_IO       -1  /* not implemented */\n\n#define _POSIX_PROCESS_SHARED       -1\n\n#define _POSIX_RAW_SOCKETS          200809L\n\n#if __ANDROID_API__ < 9\n#define _POSIX_READER_WRITER_LOCKS   (-1)\n#else\n#define _POSIX_READER_WRITER_LOCKS   200809L\n#endif\n\n#define _POSIX_REALTIME_SIGNALS     (-1)\n\n#define _POSIX_REGEXP                200809L\n\n#define _POSIX_SAVED_IDS             200809L\n\n#define _POSIX_SEMAPHORES            200809L\n\n#define _POSIX_SHARED_MEMORY_OBJECTS -1  /* shm_open()/shm_unlink() not implemented */\n\n#define _POSIX_SPAWN                -1  /* not implemented */\n\n#define _POSIX_SPIN_LOCKS           -1  /* not implemented */\n\n#define _POSIX_SPORADIC_SERVER      -1  /* not implemented */\n\n#define _POSIX_SYNCHRONIZED_IO      200809L\n\n#define _POSIX_THREADS               200809L\n\n#define _POSIX_THREAD_ATTR_STACKADDR 200809L\n#define _POSIX_THREAD_STACKADDR _POSIX_THREAD_ATTR_STACKADDR\n\n#define _POSIX_THREAD_ATTR_STACKSIZE 200809L\n#define _POSIX_THREAD_STACKSIZE _POSIX_THREAD_ATTR_STACKSIZE\n\n#define _POSIX_THREAD_PRIO_INHERIT   200809L\n#define _POSIX_THREAD_PRIO_PROTECT   200809L\n\n#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L\n\n#define _POSIX_THREAD_PROCESS_SHARED  -1  /* not implemented */\n\n#define _POSIX_THREAD_ROBUST_PRIO_INHERIT -1  /* not implemented */\n#define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1  /* not implemented */\n\n#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L\n\n#define _POSIX_THREAD_SPORADIC_SERVER -1  /* not implemented */\n\n#define _POSIX_TIMEOUTS             200809L\n#define _POSIX_TIMERS               200809L\n\n#define _POSIX_TYPED_MEMORY_OBJECTS -1  /* not implemented */\n\n#define _POSIX_CHOWN_RESTRICTED    1    /* yes, chown requires appropriate privileges */\n#define _POSIX_NO_TRUNC            1    /* very long pathnames generate an error */\n#define _POSIX_JOB_CONTROL         1    /* job control is a Linux feature */\n\n#if defined(__LP64__)\n#define _POSIX_V7_ILP32_OFF32       -1\n#define _POSIX_V7_ILP32_OFFBIG      -1\n#define _POSIX_V7_LP64_OFF64         1\n#define _POSIX_V7_LPBIG_OFFBIG       1\n#else\n#define _POSIX_V7_ILP32_OFF32        1\n#define _POSIX_V7_ILP32_OFFBIG      -1\n#define _POSIX_V7_LP64_OFF64        -1\n#define _POSIX_V7_LPBIG_OFFBIG      -1\n#endif\n\n#define _POSIX2_C_BIND              _POSIX_VERSION\n#define _POSIX2_C_DEV               -1  /* c dev utilities not implemented */\n#define _POSIX2_CHAR_TERM           -1  /* not implemented */\n#define _POSIX2_LOCALEDEF           -1  /* localedef utility not implemented */\n#define _POSIX2_SW_DEV              -1  /* software dev utilities not implemented */\n#define _POSIX2_UPE                 -1  /* user portability utilities not implemented */\n\n#define _POSIX_VDISABLE             '\\0'\n\n#endif /* __CRYSTAX_INCLUDE_SYS_LIMITS_H_AB5D38F5B8194E07AAFB4280C9468A53 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/locale.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_LOCALE_H_F66AC223786145F0BFE03E140682F269\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_LOCALE_H_F66AC223786145F0BFE03E140682F269\n\n#include <crystax/id.h>\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_LOCALE_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_LOCALE_H_F66AC223786145F0BFE03E140682F269 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/math.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_MATH_H_1ABD203512934B5DB3475E367367B75B\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_MATH_H_1ABD203512934B5DB3475E367367B75B\n\n#include <crystax/id.h>\n\n#define __CRYSTAX_MATH_H_INCLUDED 1\n\n#ifndef __DBL_MANT_DIG__\n#error \"__DBL_MANT_DIG__ not defined!\"\n#endif\n\n#ifndef __LDBL_MANT_DIG__\n#error \"__LDBL_MANT_DIG__ not defined!\"\n#endif\n\n#ifndef DBL_MANT_DIG\n#define DBL_MANT_DIG __DBL_MANT_DIG__\n#endif\n\n#ifndef LDBL_MANT_DIG\n#define LDBL_MANT_DIG __LDBL_MANT_DIG__\n#endif\n\n__BEGIN_DECLS\n\nint finite(double x);\nint finitef(float x);\nint finitel(long double x);\n\nint isinff(float x);\nint isinfl(long double x);\n\nint isnanf(float x);\nint isnanl(long double x);\n\nvoid sincos(double x, double *s, double *c);\nvoid sincosf(float x, float *s, float *c);\nvoid sincosl(long double x, long double *s, long double *c);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_MATH_H_1ABD203512934B5DB3475E367367B75B */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/monetary.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_MONETARY_H_9F8129B5BF684651B6850AC552EAA658\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_MONETARY_H_9F8129B5BF684651B6850AC552EAA658\n\n#include <crystax/id.h>\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_MONETARY_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_MONETARY_H_9F8129B5BF684651B6850AC552EAA658 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/stdio.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDIO_H_471CB1DD3D19408094DE4347B0A94C0A\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDIO_H_471CB1DD3D19408094DE4347B0A94C0A\n\n#include <crystax/id.h>\n/* Enable extended locale interfaces */\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_STDIO_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDIO_H_471CB1DD3D19408094DE4347B0A94C0A */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/stdlib.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDLIB_H_9B27D849A6AE48E1B4DC99764925FA50\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDLIB_H_9B27D849A6AE48E1B4DC99764925FA50\n\n#include <crystax/id.h>\n/* Enable extended locale interfaces */\n#include <xlocale.h>\n\n#define __LIBCRYSTAX_STDLIB_H_XLOCALE_H_INCLUDED 1\n\n/* For WEXITSTATUS, WIFEXITED and other constants as required by IEEE Std 1003.1, 2013 Edition */\n#include <crystax/sys/wait.h>\n\n#include <malloc.h>\n#include <string.h>\n\n/* https://tracker.crystax.net/issues/1234 */\n#include <sys/select.h>\n\n__BEGIN_DECLS\n\nint ptsname_r(int, char*, size_t);\nint getpt(void);\nint clearenv(void);\n\nint  rand(void);\nvoid srand(unsigned int s);\n\nlong random(void);\nvoid srandom(unsigned long s);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_STDLIB_H_9B27D849A6AE48E1B4DC99764925FA50 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/string.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRING_H_D976466870BA49AA8A7A8888489A549B\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRING_H_D976466870BA49AA8A7A8888489A549B\n\n#include <crystax/id.h>\n\n#include <xlocale.h>\n#define __LIBCRYSTAX_STRING_H_XLOCALE_H_INCLUDED 1\n\n#include <malloc.h>\n\n__BEGIN_DECLS\n\nchar *strerror_l(int e, locale_t l);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRING_H_D976466870BA49AA8A7A8888489A549B */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/strings.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRINGS_H_45E8E71D34CD4A40804BF1916BA9734D\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRINGS_H_45E8E71D34CD4A40804BF1916BA9734D\n\n#include <crystax/id.h>\n#include <xlocale.h>\n#include <xlocale/_string.h>\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_STRINGS_H_45E8E71D34CD4A40804BF1916BA9734D */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/time.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_TIME_H_39A7A964B66C44C38192884B1FA5E9B7\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_TIME_H_39A7A964B66C44C38192884B1FA5E9B7\n\n#include <crystax/id.h>\n\n#include <xlocale.h>\n#define __LIBCRYSTAX_TIME_H_XLOCALE_H_INCLUDED 1\n\n#include <sys/limits.h>\n#include <signal.h> /* for sigevent */\n#include <sys/time.h>\n\n#ifdef CLOCKS_PER_SEC\n#undef CLOCKS_PER_SEC\n#endif\n#define CLOCKS_PER_SEC 1000000\n\n__BEGIN_DECLS\n\nextern int daylight;\nextern long timezone;\n\nextern int clock_nanosleep(clockid_t, int, const struct timespec *, struct timespec *);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_TIME_H_39A7A964B66C44C38192884B1FA5E9B7 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/tls.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX .NET.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX .NET ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX .NET OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX .NET.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_TLS_H_0F4770E80E5448B88FD58B052351F569\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_TLS_H_0F4770E80E5448B88FD58B052351F569\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n\n__BEGIN_DECLS\n\nvoid **__crystax_get_tls();\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_TLS_H_0F4770E80E5448B88FD58B052351F569 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/wait.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_WAIT_H_B4D40916AEE346F48760F9FC7A56F390\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_WAIT_H_B4D40916AEE346F48760F9FC7A56F390\n\n#include <crystax/id.h>\n#include <linux/wait.h>\n\n#define WEXITSTATUS(s)  (((s) & 0xff00) >> 8)\n#define WCOREDUMP(s)    ((s) & 0x80)\n#define WTERMSIG(s)     ((s) & 0x7f)\n#define WSTOPSIG(s)     WEXITSTATUS(s)\n\n#define WIFEXITED(s)    (WTERMSIG(s) == 0)\n#define WIFSTOPPED(s)   (WTERMSIG(s) == 0x7f)\n#define WIFSIGNALED(s)  (WTERMSIG((s)+1) >= 2)\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_WAIT_H_B4D40916AEE346F48760F9FC7A56F390 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/wchar.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCHAR_H_811D612A777E4FB194733C6208D806F7\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCHAR_H_811D612A777E4FB194733C6208D806F7\n\n#include <crystax/id.h>\n#include <wctype.h>\n#include <stdio.h>\n\n#include <xlocale.h>\n#define __LIBCRYSTAX_WCHAR_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCHAR_H_811D612A777E4FB194733C6208D806F7 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/sys/wctype.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCTYPE_H_9210A93E925A46E8A4A26D1230D39806\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCTYPE_H_9210A93E925A46E8A4A26D1230D39806\n\n#include <crystax/id.h>\n\n#include <xlocale.h>\n#define __LIBCRYSTAX_WCTYPE_H_XLOCALE_H_INCLUDED 1\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYS_WCTYPE_H_9210A93E925A46E8A4A26D1230D39806 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/system.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_SYSTEM_H_95FCEB31574A4A0EA85C434B217FB3A2\n#define __CRYSTAX_INCLUDE_CRYSTAX_SYSTEM_H_95FCEB31574A4A0EA85C434B217FB3A2\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n\n__BEGIN_DECLS\n\n#define CRYSTAX_DEVICE_TYPE_UNKNOWN  0\n#define CRYSTAX_DEVICE_TYPE_EMULATOR 1\n#define CRYSTAX_DEVICE_TYPE_REAL     2\n\nint crystax_device_type();\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_SYSTEM_H_95FCEB31574A4A0EA85C434B217FB3A2 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/x86/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_X86_FENV_H_3B6CC74A90AF440090F8F3E313E31AB0\n#define __CRYSTAX_INCLUDE_CRYSTAX_X86_FENV_H_3B6CC74A90AF440090F8F3E313E31AB0\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n__BEGIN_DECLS\n\n/*\n * To preserve binary compatibility with FreeBSD 5.3, we pack the\n * mxcsr into some reserved fields, rather than changing sizeof(fenv_t).\n */\ntypedef struct {\n    __uint16_t __control;\n    __uint16_t __mxcsr_hi;\n    __uint16_t __status;\n    __uint16_t __mxcsr_lo;\n    __uint32_t __tag;\n    char       __other[16];\n} fenv_t;\n\ntypedef __uint16_t fexcept_t;\n\n/* Exception flags */\n#define FE_INVALID   0x01\n#define FE_DENORMAL  0x02\n#define FE_DIVBYZERO 0x04\n#define FE_OVERFLOW  0x08\n#define FE_UNDERFLOW 0x10\n#define FE_INEXACT   0x20\n#define FE_ALL_EXCEPT \\\n    (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \\\n     FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)\n\n/* Rounding modes */\n#define FE_TONEAREST  0x0000\n#define FE_DOWNWARD   0x0400\n#define FE_UPWARD     0x0800\n#define FE_TOWARDZERO 0x0c00\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_X86_FENV_H_3B6CC74A90AF440090F8F3E313E31AB0 */\n"
  },
  {
    "path": "sources/crystax/include/crystax/x86_64/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_CRYSTAX_X86_64_FENV_H_B81F3A03B63E47F7BE45EB380454884A\n#define __CRYSTAX_INCLUDE_CRYSTAX_X86_64_FENV_H_B81F3A03B63E47F7BE45EB380454884A\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n\n__BEGIN_DECLS\n\n/*\n * fenv_t represents the entire floating-point environment.\n */\ntypedef struct {\n  struct {\n    __uint32_t __control;   /* Control word register */\n    __uint32_t __status;    /* Status word register */\n    __uint32_t __tag;       /* Tag word register */\n    __uint32_t __others[4]; /* EIP, Pointer Selector, etc */\n  } __x87;\n  __uint32_t __mxcsr;       /* Control, status register */\n} fenv_t;\n\n/*\n * fexcept_t represents the floating-point status flags collectively, including\n * any status the implementation associates with the flags.\n *\n * A floating-point status flag is a system variable whose value is set (but\n * never cleared) when a floating-point exception is raised, which occurs as a\n * side effect of exceptional floating-point arithmetic to provide auxiliary\n * information.\n *\n * A floating-point control mode is a system variable whose value may be set by\n * the user to affect the subsequent behavior of floating-point arithmetic.\n */\ntypedef __uint32_t fexcept_t;\n\n/*\n * Each symbol representing a floating point exception expands to an integer\n * constant expression with values, such that bitwise-inclusive ORs of _all\n * combinations_ of the constants result in distinct values.\n *\n * We use such values that allow direct bitwise operations on FPU/SSE registers.\n */\n#define FE_INVALID    0x01\n#define FE_DENORMAL   0x02\n#define FE_DIVBYZERO  0x04\n#define FE_OVERFLOW   0x08\n#define FE_UNDERFLOW  0x10\n#define FE_INEXACT    0x20\n\n/*\n * The following symbol is simply the bitwise-inclusive OR of all floating-point\n * exception constants defined above.\n */\n#define FE_ALL_EXCEPT   (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO | \\\n                         FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)\n\n/*\n * Each symbol representing the rounding direction, expands to an integer\n * constant expression whose value is distinct non-negative value.\n *\n * We use such values that allow direct bitwise operations on FPU/SSE registers.\n */\n#define FE_TONEAREST  0x000\n#define FE_DOWNWARD   0x400\n#define FE_UPWARD     0x800\n#define FE_TOWARDZERO 0xc00\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_CRYSTAX_X86_64_FENV_H_B81F3A03B63E47F7BE45EB380454884A */\n"
  },
  {
    "path": "sources/crystax/include/crystax.h",
    "content": "/*\n * Copyright (c) 2011-2015, 2018 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_H_4289218d55ff4e74825922c1ca65eaf3\n#define __CRYSTAX_H_4289218d55ff4e74825922c1ca65eaf3\n\n#include <crystax/id.h>\n#include <crystax/ctassert.h>\n\n#include <sys/cdefs.h>\n#include <jni.h>\n\n__BEGIN_DECLS\n\nint crystax_jni_on_load(JavaVM *vm);\nvoid crystax_jni_on_unload(JavaVM *vm);\n\n/*\n * Return pointer to application's Java VM.\n * Return NULL if there is no JVM (standalone executable)\n */\nJavaVM *crystax_jvm();\n\n/*\n * Return thread-specific JNIEnv pointer.\n * Return NULL if there is no JVM (standalone executable)\n */\nJNIEnv *crystax_jnienv();\n\n/*\n * Save specified JNIEnv to thread-specific storage.\n * This value will then be returned on subsequent calls\n * of crystax_jnienv()\n */\nvoid crystax_save_jnienv(JNIEnv *env);\n\n/*\n * Returns contents of the CRYSTAX_POSIX_BASE environment variable.\n * This environment varibale must be set and point to the begining of\n * the crystax posix directory structure.\n */\nconst char *crystax_posix_base();\n\n\n__END_DECLS\n\n#endif /* __CRYSTAX_H_4289218d55ff4e74825922c1ca65eaf3 */\n"
  },
  {
    "path": "sources/crystax/include/dlfcn.h",
    "content": "/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_DLFCN_H_9CA426B1139E4635926075E5A5B29227\n#define __CRYSTAX_INCLUDE_DLFCN_H_9CA426B1139E4635926075E5A5B29227\n\n#include <crystax/id.h>\n#include <crystax/google/dlfcn.h>\n\n#include <android/api-level.h>\n\n#if __ANDROID_API__ < 8\ntypedef struct {\n    const char *dli_fname;\n    void       *dli_fbase;\n    const char *dli_sname;\n    void       *dli_saddr;\n} Dl_info;\n\n__BEGIN_DECLS\nint dladdr(const void *addr, Dl_info *info);\n__END_DECLS\n\n#endif /* __ANDROID_API__ < 8 */\n\n#endif /* __CRYSTAX_INCLUDE_DLFCN_H_9CA426B1139E4635926075E5A5B29227 */\n"
  },
  {
    "path": "sources/crystax/include/elf.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ELF_H_051AEF63DEC34BFB90A44443B9C6C2CE\n#define __CRYSTAX_INCLUDE_ELF_H_051AEF63DEC34BFB90A44443B9C6C2CE\n\n#include <crystax/id.h>\n#include <crystax/google/elf.h>\n\n#ifndef PT_GNU_RELRO\n#define PT_GNU_RELRO 0x6474e552\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_ELF_H_051AEF63DEC34BFB90A44443B9C6C2CE */\n"
  },
  {
    "path": "sources/crystax/include/endian.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_ENDIAN_H_5658845E872C4DE1A1F43E2BB8151C8F\n#define __CRYSTAX_INCLUDE_ENDIAN_H_5658845E872C4DE1A1F43E2BB8151C8F\n\n#include <crystax/id.h>\n#include <sys/endian.h>\n\n#define swap16(x) bswap16(x)\n#define swap32(x) bswap32(x)\n#define swap64(x) bswap64(x)\n\n#endif /* __CRYSTAX_INCLUDE_ENDIAN_H_5658845E872C4DE1A1F43E2BB8151C8F */\n"
  },
  {
    "path": "sources/crystax/include/errno.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*\n * Copyright (C) 2013 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef __CRYSTAX_ERRNO_H_850afb1fd0684f5184320801869617ad\n#define __CRYSTAX_ERRNO_H_850afb1fd0684f5184320801869617ad\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n\n#define __errno __crystax_google___errno\n#define __set_errno __crystax_google___set_errno\n#include <crystax/google/errno.h>\n#undef __errno\n#undef __set_errno\n\n#if !defined(__LP64__)\n\n#if !defined(ENOTRECOVERABLE)\n#error ENOTRECOVERABLE is not defined\n#endif\n\n#define ELAST ENOTRECOVERABLE\n\n#endif /* !__LP64__ */\n\n#ifndef EFTYPE\n#define EFTYPE EINVAL\n#endif\n\n__BEGIN_DECLS\n\nint *__errno(void);\nlong __set_errno(int n);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_ERRNO_H_850afb1fd0684f5184320801869617ad */\n"
  },
  {
    "path": "sources/crystax/include/fcntl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_FCNTL_H_C1EB0D2834804E14818592AF5D8C0816\n#define __CRYSTAX_INCLUDE_FCNTL_H_C1EB0D2834804E14818592AF5D8C0816\n\n#include <crystax/id.h>\n#include <crystax/google/fcntl.h>\n\n#define __CRYSTAX_FCNTL_BASE 0x80000000\n\n#define F_DUP2FD         ((int)(__CRYSTAX_FCNTL_BASE | 0x0002))\n#define F_DUP2FD_CLOEXEC ((int)(__CRYSTAX_FCNTL_BASE | 0x0003))\n\n#ifdef F_DUPFD_CLOEXEC\n#undef F_DUPFD_CLOEXEC\n#endif\n#define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6)\n\n#ifdef F_GETPIPE_SZ\n#undef F_GETPIPE_SZ\n#endif\n#define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)\n\n#ifdef F_SETPIPE_SZ\n#undef F_SETPIPE_SZ\n#endif\n#define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)\n\n#define POSIX_FADV_NORMAL     0\n#define POSIX_FADV_RANDOM     1\n#define POSIX_FADV_SEQUENTIAL 2\n#define POSIX_FADV_WILLNEED   3\n#define POSIX_FADV_DONTNEED   4\n#define POSIX_FADV_NOREUSE    5\n\n#ifndef O_PATH\n#define O_PATH 010000000\n#endif\n\n#ifndef O_BINARY\n#define O_BINARY 0\n#endif\n\n#ifndef O_TEXT\n#define O_TEXT 0\n#endif\n\n/* Define O_SEARCH as O_PATH is far from ideal, but we're just following what GLibc and Musl do.\n   Here is some additional information: http://www.openwall.com/lists/musl/2013/02/22/1\n */\n#ifndef O_SEARCH\n#define O_SEARCH O_PATH\n#endif\n\n#ifndef AT_EACCESS\n#define AT_EACCESS 0x200\n#endif\n\n__BEGIN_DECLS\n\nextern int fallocate64(int, int, off64_t, off64_t);\nextern int fallocate(int, int, off_t, off_t);\n\nextern int posix_fallocate64(int, off64_t, off64_t);\nextern int posix_fallocate(int, off_t, off_t);\n\nextern int posix_fadvise64(int, off64_t, off64_t, int);\nextern int posix_fadvise(int, off_t, off_t, int);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_FCNTL_H_C1EB0D2834804E14818592AF5D8C0816 */\n"
  },
  {
    "path": "sources/crystax/include/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_FENV_H_C7DBD79B038240CB903BDCE8D17AE833\n#define __CRYSTAX_INCLUDE_FENV_H_C7DBD79B038240CB903BDCE8D17AE833\n\n#include <crystax/id.h>\n\n#include <machine/fenv.h>\n\n__BEGIN_DECLS\n\n/* Default floating-point environment. */\nextern const fenv_t __fe_dfl_env;\n#define FE_DFL_ENV (&__fe_dfl_env)\n\nint feclearexcept(int);\nint fegetexceptflag(fexcept_t *, int);\nint feraiseexcept(int);\nint fesetexceptflag(const fexcept_t *, int);\nint fetestexcept(int);\n\nint fegetround(void);\nint fesetround(int);\n\nint fegetenv(fenv_t *);\nint feholdexcept(fenv_t *);\nint fesetenv(const fenv_t *);\nint feupdateenv(const fenv_t *);\n\nint feenableexcept(int);\nint fedisableexcept(int);\nint fegetexcept(void);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_FENV_H_C7DBD79B038240CB903BDCE8D17AE833 */\n"
  },
  {
    "path": "sources/crystax/include/getrrsetbyname.h",
    "content": "/* OPENBSD BASED ON : include/netdb.h */\n\n/* $OpenBSD: getrrsetbyname.c,v 1.4 2001/08/16 18:16:43 ho Exp $ */\n\n/*\n * Copyright (c) 2001 Jakob Schlyter. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Portions Copyright (c) 1999-2001 Internet Software Consortium.\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND INTERNET SOFTWARE CONSORTIUM\n * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL\n * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING\n * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,\n * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION\n * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n#ifndef __CRYSTAX_GETRRSETBYNAME_H_411F4EF4F55248E48DB5774C7F1C0519\n#define __CRYSTAX_GETRRSETBYNAME_H_411F4EF4F55248E48DB5774C7F1C0519\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n#include <netinet/in.h>\n#include <arpa/nameser.h>\n#include <netdb.h>\n#include <resolv.h>\n\n#ifndef HFIXEDSZ\n#define HFIXEDSZ 12\n#endif\n\n#ifndef T_RRSIG\n#define T_RRSIG 46\n#endif\n\n/*\n * Flags for getrrsetbyname()\n */\n#ifndef RRSET_VALIDATED\n# define RRSET_VALIDATED\t1\n#endif\n\n/*\n * Return codes for getrrsetbyname()\n */\n#ifndef ERRSET_SUCCESS\n# define ERRSET_SUCCESS\t\t0\n# define ERRSET_NOMEMORY\t1\n# define ERRSET_FAIL\t\t2\n# define ERRSET_INVAL\t\t3\n# define ERRSET_NONAME\t\t4\n# define ERRSET_NODATA\t\t5\n#endif\n\n__BEGIN_DECLS\n\nstruct rdatainfo {\n\tunsigned int\t\trdi_length;\t/* length of data */\n\tunsigned char\t\t*rdi_data;\t/* record data */\n};\n\nstruct rrsetinfo {\n\tunsigned int\t\trri_flags;\t/* RRSET_VALIDATED ... */\n\tunsigned int\t\trri_rdclass;\t/* class number */\n\tunsigned int\t\trri_rdtype;\t/* RR type number */\n\tunsigned int\t\trri_ttl;\t/* time to live */\n\tunsigned int\t\trri_nrdatas;\t/* size of rdatas array */\n\tunsigned int\t\trri_nsigs;\t/* size of sigs array */\n\tchar\t\t\t*rri_name;\t/* canonical name */\n\tstruct rdatainfo\t*rri_rdatas;\t/* individual records */\n\tstruct rdatainfo\t*rri_sigs;\t/* individual signatures */\n};\n\nint\t\tgetrrsetbyname(const char *, unsigned int, unsigned int, unsigned int, struct rrsetinfo **);\nvoid\t\tfreerrset(struct rrsetinfo *);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_GETRRSETBYNAME_H_411F4EF4F55248E48DB5774C7F1C0519 */\n"
  },
  {
    "path": "sources/crystax/include/grp.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_GRP_H_782999CB88EB4C9EBB46532DF2C4ACF8\n#define __CRYSTAX_INCLUDE_GRP_H_782999CB88EB4C9EBB46532DF2C4ACF8\n\n#include <crystax/id.h>\n#include <crystax/google/grp.h>\n\n__BEGIN_DECLS\n\n#if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE\n\nstruct group *getgrent();\nvoid setgrent();\nvoid endgrent();\n\nint getgrgid_r(gid_t, struct group *, char *, size_t, struct group **);\nint getgrnam_r(const char *, struct group *, char *, size_t, struct group **);\n\n#endif /* __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE */\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_GRP_H_782999CB88EB4C9EBB46532DF2C4ACF8 */\n"
  },
  {
    "path": "sources/crystax/include/ieeefp.h",
    "content": "/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_IEEEFP_H_4B4DAD0CC78D43EEA244522CF49E509E\n#define __CRYSTAX_INCLUDE_IEEEFP_H_4B4DAD0CC78D43EEA244522CF49E509E\n\n#ifndef __i386__\n#error \"Target architecture is not i386!\"\n#endif\n\n#include <machine/ieeefp.h>\n\n#endif /* __CRYSTAX_INCLUDE_IEEEFP_H_4B4DAD0CC78D43EEA244522CF49E509E */\n"
  },
  {
    "path": "sources/crystax/include/linux/elf.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_LINUX_ELF_H_132933D4ED8F413390AAC5D9E1F37C80\n#define __CRYSTAX_INCLUDE_LINUX_ELF_H_132933D4ED8F413390AAC5D9E1F37C80\n\n#include <crystax/id.h>\n#include <crystax/google/linux/elf.h>\n\n#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))\n#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))\n\n#endif /* __CRYSTAX_INCLUDE_LINUX_ELF_H_132933D4ED8F413390AAC5D9E1F37C80 */\n"
  },
  {
    "path": "sources/crystax/include/linux/in.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_LINUX_IN_H_6B3413B1F09C4D71AED7650211F692BA\n#define __CRYSTAX_INCLUDE_LINUX_IN_H_6B3413B1F09C4D71AED7650211F692BA\n\n#include <crystax/id.h>\n#include <crystax/google/linux/in.h>\n\n/* This is needed to convert enums to macros */\n\n#ifndef IPPROTO_IP\n#define IPPROTO_IP IPPROTO_IP\n#endif\n\n#ifndef IPPROTO_IPV6\n#define IPPROTO_IPV6 IPPROTO_IPV6\n#endif\n\n#ifndef IPPROTO_ICMP\n#define IPPROTO_ICMP IPPROTO_ICMP\n#endif\n\n#ifndef IPPROTO_TCP\n#define IPPROTO_TCP IPPROTO_TCP\n#endif\n\n#ifndef IPPROTO_UDP\n#define IPPROTO_UDP IPPROTO_UDP\n#endif\n\n#ifndef IPPROTO_RAW\n#define IPPROTO_RAW IPPROTO_RAW\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_LINUX_IN_H_6B3413B1F09C4D71AED7650211F692BA */\n"
  },
  {
    "path": "sources/crystax/include/linux/shm.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_LINUX_SHM_H_7CF842A013E34669B4AFB7409C38E965\n#define __CRYSTAX_INCLUDE_LINUX_SHM_H_7CF842A013E34669B4AFB7409C38E965\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n#include <crystax/google/linux/shm.h>\n#if __ANDROID_API__ >= 21\n#include <asm-generic/shmparam.h>\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_LINUX_SHM_H_7CF842A013E34669B4AFB7409C38E965 */\n"
  },
  {
    "path": "sources/crystax/include/linux/sysctl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_LINUX_SYSCTL_H_002EA3D08744467D868DBBDC79D8BBBF\n#define __CRYSTAX_INCLUDE_LINUX_SYSCTL_H_002EA3D08744467D868DBBDC79D8BBBF\n\n#include <crystax/id.h>\n#include <sys/_types.h>\n#include <crystax/google/linux/sysctl.h>\n\n#define KERN_ARND KERN_RANDOM\n\n#endif /* __CRYSTAX_INCLUDE_LINUX_SYSCTL_H_002EA3D08744467D868DBBDC79D8BBBF */\n"
  },
  {
    "path": "sources/crystax/include/machine/_align.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE__ALIGN_H_1E3DB8705867442DBA4D04FB0F0943F7\n#define __CRYSTAX_INCLUDE_MACHINE__ALIGN_H_1E3DB8705867442DBA4D04FB0F0943F7\n\n#include <crystax/id.h>\n#include <machine/_types.h>\n\n#define _ALIGNBYTES (sizeof(__register_t) - 1)\n#define _ALIGN(p)   (((__uintptr_t)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE__ALIGN_H_1E3DB8705867442DBA4D04FB0F0943F7 */\n"
  },
  {
    "path": "sources/crystax/include/machine/_types.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE_TYPES_H_AEE543128E8C4EA492D3235B11B6890A\n#define __CRYSTAX_INCLUDE_MACHINE_TYPES_H_AEE543128E8C4EA492D3235B11B6890A\n\n#include <crystax/id.h>\n#include <crystax/ctassert.h>\n\n#include <android/api-level.h>\n\n#include <asm/types.h>\n#include <linux/types.h>\n#include <linux/posix_types.h>\n#if __ANDROID_API__ < 21\n#include <machine/kernel.h>\n#endif\n\n#include <machine/_limits.h>\n\ntypedef signed char        __int8_t;\ntypedef unsigned char      __uint8_t;\ntypedef short              __int16_t;\ntypedef unsigned short     __uint16_t;\ntypedef int                __int32_t;\ntypedef unsigned int       __uint32_t;\n#if !__LP64__\ntypedef long long          __int64_t;\ntypedef unsigned long long __uint64_t;\n#else\ntypedef long               __int64_t;\ntypedef unsigned long      __uint64_t;\n#endif\n\n__CRYSTAX_STATIC_ASSERT(sizeof(__int8_t)   == 1, \"__int8_t must be 1-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint8_t)  == 1, \"__uint8_t must be 1-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int16_t)  == 2, \"__int16_t must be 2-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint16_t) == 2, \"__uint16_t must be 2-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int32_t)  == 4, \"__int32_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint32_t) == 4, \"__uint32_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int64_t)  == 8, \"__int64_t must be 8-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint64_t) == 8, \"__uint64_t must be 8-byte long\");\n\ntypedef __int8_t   __int_least8_t;\ntypedef __uint8_t  __uint_least8_t;\ntypedef __int16_t  __int_least16_t;\ntypedef __uint16_t __uint_least16_t;\ntypedef __int32_t  __int_least32_t;\ntypedef __uint32_t __uint_least32_t;\ntypedef __int64_t  __int_least64_t;\ntypedef __uint64_t __uint_least64_t;\n\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_least8_t)   >= 1, \"__int_least8_t must be at least 1-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_least8_t)  >= 1, \"__uint_least8_t must be at least 1-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_least16_t)  >= 2, \"__int_least16_t must be at least 2-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_least16_t) >= 2, \"__uint_least16_t must be at least 2-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_least32_t)  >= 4, \"__int_least32_t must be at least 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_least32_t) >= 4, \"__uint_least32_t must be at least 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_least64_t)  >= 8, \"__int_least64_t must be at least 8-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_least64_t) >= 8, \"__uint_least64_t must be at least 8-byte long\");\n\ntypedef __int32_t  __int_fast8_t;\ntypedef __uint32_t __uint_fast8_t;\ntypedef __int32_t  __int_fast16_t;\ntypedef __uint32_t __uint_fast16_t;\ntypedef __int32_t  __int_fast32_t;\ntypedef __uint32_t __uint_fast32_t;\ntypedef __int64_t  __int_fast64_t;\ntypedef __uint64_t __uint_fast64_t;\n\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_fast8_t)   == 4, \"__int_fast8_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_fast8_t)  == 4, \"__uint_fast8_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_fast16_t)  == 4, \"__int_fast16_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_fast16_t) == 4, \"__uint_fast16_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_fast32_t)  == 4, \"__int_fast32_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_fast32_t) == 4, \"__uint_fast32_t must be 4-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__int_fast64_t)  == 8, \"__int_fast64_t must be 8-byte long\");\n__CRYSTAX_STATIC_ASSERT(sizeof(__uint_fast64_t) == 8, \"__uint_fast64_t must be 8-byte long\");\n\n#if !__LP64__\ntypedef __int32_t  __intptr_t;\ntypedef __uint32_t __uintptr_t;\n#else\ntypedef __int64_t  __intptr_t;\ntypedef __uint64_t __uintptr_t;\n#endif\n\n#if defined(__INTMAX_TYPE__)\ntypedef __INTMAX_TYPE__ __intmax_t;\n#else\ntypedef __int64_t       __intmax_t;\n#endif\n__CRYSTAX_STATIC_ASSERT(sizeof(__intmax_t) == 8, \"__intmax_t must be 8-byte long\");\n\n#if defined(__UINTMAX_TYPE__)\ntypedef __UINTMAX_TYPE__ __uintmax_t;\n#else\ntypedef __uint64_t       __uintmax_t;\n#endif\n__CRYSTAX_STATIC_ASSERT(sizeof(__uintmax_t) == 8, \"__uintmax_t must be 8-byte long\");\n\n#if defined(__SIZE_TYPE__)\ntypedef __SIZE_TYPE__ __size_t;\n#else\n#if __LP64__\ntypedef __uint64_t    __size_t;\n#else\ntypedef __uint32_t    __size_t;\n#endif\n#endif\n\n#if __LP64__\n__CRYSTAX_STATIC_ASSERT(sizeof(__size_t) == 8, \"__size_t must be 8-byte long on 64-bit platforms\");\n#else\n__CRYSTAX_STATIC_ASSERT(sizeof(__size_t) == 4, \"__size_t must be 4-byte long on 32-bit platforms\");\n#endif\n\n#if __LP64__\ntypedef __int64_t  __ssize_t;\n#else\ntypedef __int32_t  __ssize_t;\n#endif\n\n#if !__LP64__\ntypedef __int32_t  __register_t;\ntypedef __uint32_t __u_register_t;\n#else\ntypedef __int64_t  __register_t;\ntypedef __uint64_t __u_register_t;\n#endif\n\n/*\n * rune_t is declared to be an ``int'' instead of the more natural\n * ``unsigned long'' or ``long''.  Two things are happening here.  It is not\n * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,\n * it looks like 10646 will be a 31 bit standard.  This means that if your\n * ints cannot hold 32 bits, you will be in trouble.  The reason an int was\n * chosen over a long is that the is*() and to*() routines take ints (says\n * ANSI C), but they use __ct_rune_t instead of int.\n *\n * NOTE: rune_t is not covered by ANSI nor other standards, and should not\n * be instantiated outside of lib/libc/locale.  Use wchar_t.  wint_t and\n * rune_t must be the same type.  Also, wint_t should be able to hold all\n * members of the largest character set plus one extra value (WEOF), and\n * must be at least 16 bits.\n */\ntypedef int         __ct_rune_t; /* arg type for ctype funcs */\ntypedef __ct_rune_t __rune_t;    /* rune_t (see above) */\n\ntypedef __ct_rune_t __wint_t;\n\n#ifdef __WINT_TYPE__\n/* must be the same size */\n__CRYSTAX_STATIC_ASSERT(sizeof(__WINT_TYPE__) == sizeof(__ct_rune_t), \"size of __WINT_TYPE__ and __wint_t must be the same\");\n/* and have the same sign and be comparable without warnings */\n/* TODO: figure out how to make __WINT_TYPE__ signed in GCC/Clang */\n/*__CRYSTAX_STATIC_ASSERT((__WINT_TYPE__)(-1) == (__wint_t)(-1), \"__WINT_TYPE__ and __wint_t must be both signed or both unsigned\");*/\n#endif\n\n#ifdef __WCHAR_TYPE__\ntypedef __WCHAR_TYPE__ __wchar_t;\n#else\ntypedef __wint_t __wchar_t;\n#endif\n__CRYSTAX_STATIC_ASSERT(sizeof(__wint_t) == sizeof(__wchar_t), \"size of __wchar_t must be the same as of __wint_t\");\n\n/* This type needed in newest FreeBSD sources */\ntypedef __wchar_t ___wchar_t;\n\n#if __ARM_EABI__ || __aarch64__\n#define __WCHAR_MIN 0\n#define __WCHAR_MAX __UINT_MAX\n#else\n#define __WCHAR_MIN __INT_MIN\n#define __WCHAR_MAX __INT_MAX\n#endif\n\ntypedef float  __float_t;\ntypedef double __double_t;\n\ntypedef __builtin_va_list __va_list;\n\n#if __ANDROID_API__ < 21\ntypedef __kernel_id_t __id_t;\n#else\ntypedef __uint32_t    __id_t;\n#endif\n__CRYSTAX_STATIC_ASSERT(sizeof(__id_t) == 4, \"__id_t must be 4-byte long\");\n\ntypedef __uint32_t __socklen_t;\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE_TYPES_H_AEE543128E8C4EA492D3235B11B6890A */\n"
  },
  {
    "path": "sources/crystax/include/machine/atomic.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE_ATOMIC_H_1E9739943BB2467EA1FECF6DCF3D3D79\n#define __CRYSTAX_INCLUDE_MACHINE_ATOMIC_H_1E9739943BB2467EA1FECF6DCF3D3D79\n\n#include <crystax/id.h>\n\n#define atomic_add_long(p, v)      __sync_add_and_fetch(p, v)\n#define atomic_fetchadd_long(p, v) __sync_fetch_and_add(p, v)\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE_ATOMIC_H_1E9739943BB2467EA1FECF6DCF3D3D79 */\n"
  },
  {
    "path": "sources/crystax/include/machine/fenv.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE_FENV_H_C7639E168FB34B38977528C2991EB5C5\n#define __CRYSTAX_INCLUDE_MACHINE_FENV_H_C7639E168FB34B38977528C2991EB5C5\n\n#include <crystax/id.h>\n\n#if __arm__\n# define _FENV_H_\n# if __SOFTFP__\n#  include <crystax/sys/fenvsoft.h>\n# else\n#  include <crystax/arm/fenv.h>\n# endif\n#elif __aarch64__\n# include <crystax/arm64/fenv.h>\n#elif __mips__ && !__mips64\n# include <crystax/mips/fenv.h>\n#elif __mips64\n# include <crystax/mips64/fenv.h>\n#elif __i386__\n# include <crystax/x86/fenv.h>\n#elif __x86_64__\n# include <crystax/x86_64/fenv.h>\n#else\n# error \"Not defined for this ABI\"\n#endif\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE_FENV_H_C7639E168FB34B38977528C2991EB5C5 */\n"
  },
  {
    "path": "sources/crystax/include/machine/limits.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE_LIMITS_H_ABCB6F0E4706496A926B574D22D63B5E\n#define __CRYSTAX_INCLUDE_MACHINE_LIMITS_H_ABCB6F0E4706496A926B574D22D63B5E\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <machine/_limits.h>\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE_LIMITS_H_ABCB6F0E4706496A926B574D22D63B5E */\n"
  },
  {
    "path": "sources/crystax/include/machine/wchar_limits.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MACHINE_WCHAR_LIMITS_H_0599CFDA12FF43A091087826C15579D0\n#define __CRYSTAX_INCLUDE_MACHINE_WCHAR_LIMITS_H_0599CFDA12FF43A091087826C15579D0\n\n#include <crystax/id.h>\n\n/* Intentionally don't include Google's wchar_limits.h here */\n\n#endif /* __CRYSTAX_INCLUDE_MACHINE_WCHAR_LIMITS_H_0599CFDA12FF43A091087826C15579D0 */\n"
  },
  {
    "path": "sources/crystax/include/malloc.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MALLOC_H_32918571587F4718B53B735908300143\n#define __CRYSTAX_INCLUDE_MALLOC_H_32918571587F4718B53B735908300143\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <stdint.h> /* for size_t */\n\n__BEGIN_DECLS\n\nvoid* malloc(size_t byte_count) __mallocfunc __wur __attribute__((alloc_size(1)));\nvoid* calloc(size_t item_count, size_t item_size) __mallocfunc __wur __attribute__((alloc_size(1,2)));\nvoid* realloc(void* p, size_t byte_count) __wur __attribute__((alloc_size(2)));\nvoid free(void* p);\n\nvoid* memalign(size_t alignment, size_t byte_count) __mallocfunc __wur __attribute__((alloc_size(2)));\nsize_t malloc_usable_size(const void* p);\n\nint posix_memalign(void **, size_t, size_t);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_MALLOC_H_32918571587F4718B53B735908300143 */\n"
  },
  {
    "path": "sources/crystax/include/netinet/tcp.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_NETINET_TCP_H_01D2981C8A9847B7801B3A4121F51E33\n#define __CRYSTAX_INCLUDE_NETINET_TCP_H_01D2981C8A9847B7801B3A4121F51E33\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <crystax/google/netinet/tcp.h>\n\n#endif /* __CRYSTAX_INCLUDE_NETINET_TCP_H_01D2981C8A9847B7801B3A4121F51E33 */\n"
  },
  {
    "path": "sources/crystax/include/paths.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_PATHS_H_E878DBAABFC54703A4EA827D8C3E5893\n#define __CRYSTAX_INCLUDE_PATHS_H_E878DBAABFC54703A4EA827D8C3E5893\n\n#include <crystax/id.h>\n#include <crystax/google/paths.h>\n\n#define _PATH_ESDB \"/usr/share/i18n/esdb\"\n#define _PATH_I18NMODULE \"/usr/lib/i18n\"\n#define _PATH_CSMAPPER \"/usr/share/i18n/csmapper\"\n\n#endif /* __CRYSTAX_INCLUDE_PATHS_H_E878DBAABFC54703A4EA827D8C3E5893 */\n"
  },
  {
    "path": "sources/crystax/include/pthread_np.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_PTHREAD_NP_H_260F00DC9CCD46A893920A22A56AFB6D\n#define __CRYSTAX_PTHREAD_NP_H_260F00DC9CCD46A893920A22A56AFB6D\n\n#include <crystax/id.h>\n#include <pthread.h>\n\n__BEGIN_DECLS\n\nint pthread_main_np();\n\n__END_DECLS\n\n#endif /* __CRYSTAX_PTHREAD_NP_H_260F00DC9CCD46A893920A22A56AFB6D */\n"
  },
  {
    "path": "sources/crystax/include/semaphore.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SEMAPHORE_H_3880FA11FF3947778DC861090D76BB8A\n#define __CRYSTAX_INCLUDE_SEMAPHORE_H_3880FA11FF3947778DC861090D76BB8A\n\n#include <crystax/id.h>\n#include <sys/_null.h> /* for NULL */\n#include <crystax/google/semaphore.h>\n\n#endif /* __CRYSTAX_INCLUDE_SEMAPHORE_H_3880FA11FF3947778DC861090D76BB8A */\n"
  },
  {
    "path": "sources/crystax/include/stdint.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_STDINT_H_3A899278F04C4423895BBD7A8E83C321\n#define __CRYSTAX_INCLUDE_STDINT_H_3A899278F04C4423895BBD7A8E83C321\n\n#define __LIBCRYSTAX_STDINT_H_INCLUDED 1\n\n#include <crystax/id.h>\n#include <sys/_null.h> /* for NULL */\n#include <sys/limits.h>\n#include <sys/stdint.h>\n\n#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)\n\n#define INT_LEAST8_C(c)   INT8_C(c)\n#define INT_FAST8_C(c)    INT8_C(c)\n\n#define UINT_LEAST8_C(c)  UINT8_C(c)\n#define UINT_FAST8_C(c)   UINT8_C(c)\n\n#define INT_LEAST16_C(c)  INT16_C(c)\n#define INT_FAST16_C(c)   INT32_C(c)\n\n#define UINT_LEAST16_C(c) UINT16_C(c)\n#define UINT_FAST16_C(c)  UINT32_C(c)\n\n#define INT_LEAST32_C(c)  INT32_C(c)\n#define INT_FAST32_C(c)   INT32_C(c)\n\n#define UINT_LEAST32_C(c) UINT32_C(c)\n#define UINT_FAST32_C(c)  UINT32_C(c)\n\n#define INT_LEAST64_C(c)  INT64_C(c)\n#define INT_FAST64_C(c)   INT64_C(c)\n\n#define UINT_LEAST64_C(c) UINT64_C(c)\n#define UINT_FAST64_C(c)  UINT64_C(c)\n\n#define INTPTR_C(c)       INT32_C(c)\n#define UINTPTR_C(c)      UINT32_C(c)\n#define PTRDIFF_C(c)      INT32_C(c)\n\n#define INTMAX_C(c)       INT64_C(c)\n#define UINTMAX_C(c)      UINT64_C(c)\n\n#endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */\n\n#endif /* __CRYSTAX_INCLUDE_STDINT_H_3A899278F04C4423895BBD7A8E83C321 */\n"
  },
  {
    "path": "sources/crystax/include/sys/_types.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS__TYPES_H_B94AFA76630A41EC924D80883BAB5389\n#define __CRYSTAX_SYS__TYPES_H_B94AFA76630A41EC924D80883BAB5389\n\n#include <crystax/id.h>\n#include <android/api-level.h>\n\n#include <machine/_types.h>\n\n#ifndef _SIZE_T_DECLARED\ntypedef __size_t  size_t;\n#define _SIZE_T_DECLARED\n#endif\n\n#ifndef _SSIZE_T_DECLARED\ntypedef __ssize_t ssize_t;\n#define _SSIZE_T_DECLARED\n#endif\n\n#if !defined(__LP64__)\ntypedef __kernel_off_t  __off_t;\ntypedef __kernel_loff_t __loff_t;\n#else\ntypedef __kernel_off_t  __off_t;\ntypedef __kernel_loff_t __loff_t;\n#endif\ntypedef __loff_t __off64_t;\n\ntypedef struct _xlocale *__locale_t;\n\n/*\n * mbstate_t is an opaque object to keep conversion state during multibyte\n * stream conversions.\n */\ntypedef union {\n    char        __mbstate8[128];\n    __int64_t   _mbstateL;  /* for alignment */\n} __mbstate_t;\n\n#if !__LP64__\ntypedef __uint32_t __dev_t;\n#else\ntypedef __uint64_t __dev_t;\n#endif\n\ntypedef __uint16_t __mode_t;\n\n#ifndef __kernel_long_t\ntypedef long __kernel_long_t;\n#endif\n#ifndef __kernel_ulong_t\ntypedef unsigned long __kernel_ulong_t;\n#endif\n\ntypedef __kernel_pid_t   __pid_t;\ntypedef __kernel_uid32_t __uid_t;\ntypedef __kernel_gid32_t __gid_t;\n\ntypedef __kernel_clock_t   __clock_t;\ntypedef __kernel_clockid_t __clockid_t;\ntypedef __kernel_time_t    __time_t;\n\ntypedef void *__timer_t;\n\ntypedef __uint32_t           __useconds_t;\ntypedef __kernel_suseconds_t __suseconds_t;\n\ntypedef int __nl_item;\n\ntypedef __uint16_t __in_port_t;\n\ntypedef __uint16_t __sa_family_t;\n\ntypedef __kernel_ino_t __ino_t;\ntypedef __kernel_key_t __key_t;\n\ntypedef __uint32_t __nlink_t;\n\n#if __ANDROID_API__ < 21\ntypedef __kernel_blkcnt_t  __blkcnt_t;\ntypedef __kernel_blksize_t __blksize_t;\n#else\ntypedef unsigned long      __blkcnt_t;\ntypedef unsigned long      __blksize_t;\n#endif\n\ntypedef long __pthread_t;\n\ntypedef struct {\n    __uint32_t flags;\n    void* stack_base;\n    __size_t stack_size;\n    __size_t guard_size;\n    __int32_t sched_policy;\n    __int32_t sched_priority;\n#ifdef __LP64__\n    char __reserved[16];\n#endif\n} __pthread_attr_t;\n\ntypedef struct {\n#if defined(__LP64__)\n    __int32_t __private[10];\n#else\n    __int32_t __private[1];\n#endif\n} __pthread_mutex_t;\n\ntypedef struct {\n#if defined(__LP64__)\n    __int32_t __private[12];\n#else\n    __int32_t __private[1];\n#endif\n} __pthread_cond_t;\n\n/* Clang already provides these types as built-ins, but only in C++ mode. */\n#if !defined(__clang__) || !defined(__cplusplus)\ntypedef __uint_least16_t __char16_t;\ntypedef __uint_least32_t __char32_t;\n#endif\n/* In C++11, char16_t and char32_t are built-in types. */\n#if defined(__cplusplus) && __cplusplus >= 201103L\n#define _CHAR16_T_DECLARED\n#define _CHAR32_T_DECLARED\n#endif\n\n#endif /* __CRYSTAX_SYS__TYPES_H_B94AFA76630A41EC924D80883BAB5389 */\n"
  },
  {
    "path": "sources/crystax/include/sys/cdefs.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_CDEFS_H_649B3B19BE21490D983FE57C973D2BA8\n#define __CRYSTAX_SYS_CDEFS_H_649B3B19BE21490D983FE57C973D2BA8\n\n#include <crystax/id.h>\n#include <crystax/google/sys/cdefs.h>\n\n#undef __BIONIC__\n\n#if !defined(_POSIX_SOURCE)\n#define _POSIX_SOURCE\n#endif\n\n#if !defined(_POSIX_C_SOURCE)\n#define _POSIX_C_SOURCE 200809\n#elif _POSIX_C_SOURCE < 200809\n#undef  _POSIX_C_SOURCE\n#define _POSIX_C_SOURCE 200809\n#endif\n\n#if !defined(__POSIX_VISIBLE)\n#define __POSIX_VISIBLE 200809\n#elif __POSIX_VISIBLE < 200809\n#undef  __POSIX_VISIBLE\n#define __POSIX_VISIBLE 200809\n#endif\n\n#if !defined(__XSI_VISIBLE)\n#define __XSI_VISIBLE 600\n#elif __XSI_VISIBLE < 600\n#undef  __XSI_VISIBLE\n#define __XSI_VISIBLE 600\n#endif\n\n#if !defined(__ISO_C_VISIBLE)\n#define __ISO_C_VISIBLE 1999\n#elif __ISO_C_VISIBLE < 1999\n#undef  __ISO_C_VISIBLE\n#define __ISO_C_VISIBLE 1999\n#endif\n\n#ifndef __has_extension\n#define __has_extension     __has_feature\n#endif\n#ifndef __has_feature\n#define __has_feature(x)    0\n#endif\n#ifndef __has_include\n#define __has_include(x)    0\n#endif\n#ifndef __has_builtin\n#define __has_builtin(x)    0\n#endif\n\n#ifdef __cplusplus\n#define __nothrow throw()\n#else\n#define __nothrow\n#endif\n\n#define __nonnull(args) __attribute__((__nonnull__ args))\n\n#ifdef __weak_alias\n#undef __weak_alias\n#endif\n#define __weak_alias(sym, alias) \\\n    __asm__(\".weak \" #alias); \\\n    __asm__(\".equ \"  #alias \", \" #sym);\n\n#ifdef __weak_reference\n#undef __weak_reference\n#endif\n#define __weak_reference(s, a) __weak_alias(s, a)\n\n#ifdef __strong_alias\n#undef __strong_alias\n#endif\n#define __strong_alias(alias, sym) \\\n    __asm__(\".global \" #alias); \\\n    __asm__(\".equ \"    #alias \", \" #sym);\n\n#ifdef __strong_reference\n#undef __strong_reference\n#endif\n#define __strong_reference(s, a) __strong_alias(a, s)\n/*\n#define __strong_reference(sym,aliassym) \\\n    extern __typeof(sym) aliassym __attribute__ ((__alias__ (#sym)))\n*/\n\n#ifdef __warn_references\n#undef __warn_references\n#endif\n#define __warn_references(sym, msg)\n/*\n * TODO: Enable this implementation. See https://tracker.crystax.net/issues/756 for details.\n#define __warn_references(sym, msg) \\\n    __asm__(\".section .gnu.warning.\" #sym \"\\n\\t.ascii \\\"\" msg \"\\\"\\n\\t.text\");\n*/\n\n#ifndef __always_inline\n#define __always_inline __attribute__((__always_inline__))\n#endif\n\n#ifndef __errorattr\n#ifdef __clang__\n#define __errorattr(msg)\n#else\n#define __errorattr(msg) __attribute__((__error__(msg)))\n#endif\n#endif\n\n#ifndef __warnattr\n#ifdef __clang__\n#define __warnattr(msg)\n#else\n#define __warnattr(msg) __attribute__((__warning__(msg)))\n#endif\n#endif\n\n#ifndef __errordecl\n#define __errordecl(name, msg) extern void name(void) __errorattr(msg)\n#endif\n\n#ifndef __wur\n#define __wur __attribute__((__warn_unused_result__))\n#endif\n\n#ifndef __GNUC_PREREQ__\n#define __GNUC_PREREQ__(ma, mi) \\\n    (__GNUC__ > (ma) || __GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))\n#endif\n\n#if __GNUC_PREREQ__(4, 0)\n#define __hidden   __attribute__((__visibility__(\"hidden\")))\n#define __exported __attribute__((__visibility__(\"default\")))\n#else\n#define __hidden\n#define __exported\n#endif\n\n#ifndef __LONG_LONG_SUPPORTED\n#define __LONG_LONG_SUPPORTED\n#endif\n\n#ifndef _DECLARE_C99_LDBL_MATH\n#define _DECLARE_C99_LDBL_MATH 1\n#endif\n\n#define __GNUCLIKE_ASM 3\n#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS\n#define __GNUCLIKE___TYPEOF 1\n#define __GNUCLIKE___OFFSETOF 1\n#define __GNUCLIKE___SECTION 1\n\n#ifndef asm\n#define asm __asm\n#endif\n\n#ifdef _BIONIC_NOT_BEFORE_21\n#undef _BIONIC_NOT_BEFORE_21\n#endif\n#define _BIONIC_NOT_BEFORE_21(x) x\n\n#ifndef __LIBC_HIDDEN__\n#define __LIBC_HIDDEN__ __hidden\n#endif\n\n#ifndef __LIBC64_HIDDEN__\n#define __LIBC64_HIDDEN__ __LIBC_HIDDEN__\n#endif\n\n#ifndef __LIBC_ABI_PUBLIC__\n#define __LIBC_ABI_PUBLIC__ __exported\n#endif\n\n#ifndef _DIAGASSERT\n#define _DIAGASSERT(e) ((e) ? (void) 0 : __assert2(__FILE__, __LINE__, __func__, #e))\n#endif\n\n#ifndef __type_fit\n#define __type_fit(t, a) (0 == 0)\n#endif\n\n#define __USE_GNU 1\n#define __USE_BSD 1\n#define __BSD_VISIBLE 1\n\n#endif /* __CRYSTAX_SYS_CDEFS_H_649B3B19BE21490D983FE57C973D2BA8 */\n"
  },
  {
    "path": "sources/crystax/include/sys/fcntl.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_FCNTL_H_AD8BB2E96BEF455F962892207933FAC6\n#define __CRYSTAX_SYS_FCNTL_H_AD8BB2E96BEF455F962892207933FAC6\n\n#include <crystax/id.h>\n#include <fcntl.h>\n\n#endif /* __CRYSTAX_SYS_FCNTL_H_AD8BB2E96BEF455F962892207933FAC6 */\n"
  },
  {
    "path": "sources/crystax/include/sys/mman.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_MMAN_H_55423d2bf8d046faa5e007937812014f\n#define __CRYSTAX_SYS_MMAN_H_55423d2bf8d046faa5e007937812014f\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <crystax/google/sys/mman.h>\n\n#define POSIX_MADV_NORMAL     MADV_NORMAL\n#define POSIX_MADV_RANDOM     MADV_RANDOM\n#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL\n#define POSIX_MADV_WILLNEED   MADV_WILLNEED\n#define POSIX_MADV_DONTNEED   MADV_DONTNEED\n\n__BEGIN_DECLS\n\nint posix_madvise(void*, size_t, int);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_SYS_MMAN_H_55423d2bf8d046faa5e007937812014f */\n"
  },
  {
    "path": "sources/crystax/include/sys/param.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_PARAM_H_F1AFABB128B349A9BD1C90AB93D08254\n#define __CRYSTAX_SYS_PARAM_H_F1AFABB128B349A9BD1C90AB93D08254\n\n#include <crystax/id.h>\n#include <crystax/google/sys/param.h>\n#include <asm-generic/param.h>\n\n#endif /* __CRYSTAX_SYS_PARAM_H_F1AFABB128B349A9BD1C90AB93D08254 */\n"
  },
  {
    "path": "sources/crystax/include/sys/shm.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_SHM_H_959C0327A4FF4EE8AE01930AB8234F51\n#define __CRYSTAX_SYS_SHM_H_959C0327A4FF4EE8AE01930AB8234F51\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <sys/types.h> /* for size_t, time_t and pid_t */\n#include <linux/shm.h>\n\n__BEGIN_DECLS\n\nvoid *shmat(int, const void *, int);\nint shmctl(int, int, struct shmid_ds *);\nint shmdt(const void *);\nint shmget(key_t, size_t, int);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_SYS_SHM_H_959C0327A4FF4EE8AE01930AB8234F51 */\n"
  },
  {
    "path": "sources/crystax/include/sys/socket.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_SOCKET_H_4BFF8F85ACF54B99BE2248B9D829D71F\n#define __CRYSTAX_INCLUDE_SYS_SOCKET_H_4BFF8F85ACF54B99BE2248B9D829D71F\n\n#include <crystax/id.h>\n\n#include <android/api-level.h>\n\n#if __ANDROID_API__ >= 21\n#include <crystax/google/sys/socket.h>\n#else /* __ANDROID_API__ < 21 */\n\n#include <sys/cdefs.h>\n#include <sys/types.h>\n#include <linux/socket.h>\n#include <fcntl.h>\n\n__BEGIN_DECLS\n\n#define SOCK_STREAM      1\n#define SOCK_DGRAM       2\n#define SOCK_RAW         3\n#define SOCK_RDM         4\n#define SOCK_SEQPACKET   5\n#define SOCK_PACKET      10\n\n#define SOCK_CLOEXEC O_CLOEXEC\n#define SOCK_NONBLOCK O_NONBLOCK\n\n#ifdef __i386__\n# define __socketcall __attribute__((__cdecl__))\n#else\n# define __socketcall\n#endif\n\n#define SHUT_RD   0\n#define SHUT_WR   1\n#define SHUT_RDWR 2\n\n__socketcall int socket(int, int, int);\n__socketcall int bind(int, const struct sockaddr *, int);\n__socketcall int connect(int, const struct sockaddr *, socklen_t);\n__socketcall int listen(int, int);\n__socketcall int accept(int, struct sockaddr *, socklen_t *);\n__socketcall int accept4(int, struct sockaddr*, socklen_t*, int);\n__socketcall int getsockname(int, struct sockaddr *, socklen_t *);\n__socketcall int getpeername(int, struct sockaddr *, socklen_t *);\n__socketcall int socketpair(int, int, int, int *);\n__socketcall int shutdown(int, int);\n__socketcall int setsockopt(int, int, int, const void *, socklen_t);\n__socketcall int getsockopt(int, int, int, void *, socklen_t *);\n__socketcall int sendmsg(int, const struct msghdr *, unsigned int);\n__socketcall int recvmsg(int, struct msghdr *, unsigned int);\n\nssize_t  send(int, const void *, size_t, int);\nssize_t  recv(int, void *, size_t, int);\n\n__socketcall ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);\n__socketcall ssize_t recvfrom(int, void *, size_t, unsigned int, const struct sockaddr *, socklen_t *);\n\n#undef __socketcall\n\n__END_DECLS\n\n#endif /* __ANDROID_API__ < 21 */\n\n#endif /* __CRYSTAX_INCLUDE_SYS_SOCKET_H_4BFF8F85ACF54B99BE2248B9D829D71F */\n"
  },
  {
    "path": "sources/crystax/include/sys/sysctl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_SYSCTL_H_26A1022CFF554D61AE21A307DBBF4AB0\n#define __CRYSTAX_INCLUDE_SYS_SYSCTL_H_26A1022CFF554D61AE21A307DBBF4AB0\n\n#include <crystax/id.h>\n#include <linux/sysctl.h>\n\n#endif /* __CRYSTAX_INCLUDE_SYS_SYSCTL_H_26A1022CFF554D61AE21A307DBBF4AB0 */\n"
  },
  {
    "path": "sources/crystax/include/sys/syslimits.h",
    "content": "/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_SYSLIMITS_H_C4D80EA8B0E44B998B3603310AABE410\n#define __CRYSTAX_INCLUDE_SYS_SYSLIMITS_H_C4D80EA8B0E44B998B3603310AABE410\n\n#include <crystax/id.h>\n#include <crystax/sys/limits.h>\n\n#endif /* __CRYSTAX_INCLUDE_SYS_SYSLIMITS_H_C4D80EA8B0E44B998B3603310AABE410 */\n"
  },
  {
    "path": "sources/crystax/include/sys/syslog.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_SYSLOG_H_129B05F9529342C8AB548D15733D01FD\n#define __CRYSTAX_SYS_SYSLOG_H_129B05F9529342C8AB548D15733D01FD\n\n#include <crystax/id.h>\n#include <syslog.h>\n\n#endif /* __CRYSTAX_SYS_SYSLOG_H_129B05F9529342C8AB548D15733D01FD */\n"
  },
  {
    "path": "sources/crystax/include/sys/timeb.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYS_TIMEB_H_977D851592B24B569E4FB2921C60D45F\n#define __CRYSTAX_INCLUDE_SYS_TIMEB_H_977D851592B24B569E4FB2921C60D45F\n\n#include <crystax/id.h>\n#include <sys/cdefs.h>\n#include <time.h>\n\n__BEGIN_DECLS\n\nstruct timeb {\n    time_t          time;\n    unsigned short  millitm;\n    short           timezone;\n    short           dstflag;\n};\n\nint ftime(struct timeb *tp);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_SYS_TIMEB_H_977D851592B24B569E4FB2921C60D45F */\n"
  },
  {
    "path": "sources/crystax/include/sys/timespec.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_TIMESPEC_H_1B8A944C6F684E5DBE6604861FE881B2\n#define __CRYSTAX_SYS_TIMESPEC_H_1B8A944C6F684E5DBE6604861FE881B2\n\n#include <crystax/id.h>\n#include <sys/types.h>\n#include <linux/time.h>\n\n#endif /* __CRYSTAX_SYS_TIMESPEC_H_1B8A944C6F684E5DBE6604861FE881B2 */\n"
  },
  {
    "path": "sources/crystax/include/sys/types.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_TYPES_H_D348E9D46FFA4B97A56C4EEFAB6B3F76\n#define __CRYSTAX_SYS_TYPES_H_D348E9D46FFA4B97A56C4EEFAB6B3F76\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/_types.h>\n\n#include <stdint.h>\n\n#ifndef _OFF_T_DECLARED\ntypedef __off_t off_t;\n#define _OFF_T_DECLARED\n#endif\n\n#ifndef _LOFF_T_DECLARED\ntypedef __loff_t loff_t;\n#define _LOFF_T_DECLARED\n#endif\n\n#ifndef _OFF64_T_DECLARED\ntypedef __off64_t off64_t;\n#define _OFF64_T_DECLARED\n#endif\n\n#ifndef _REGISTER_T_DECLARED\ntypedef __register_t   register_t;\n#define _REGISTER_T_DECLARED\n#endif\n\n#ifndef _UREGISTER_T_DECLARED\ntypedef __u_register_t u_register_t;\n#define _UREGISTER_T_DECLARED\n#endif\n\n#ifndef _PID_T_DECLARED\ntypedef __pid_t pid_t;\n#define _PID_T_DECLARED\n#endif\n\n#ifndef _UID_T_DECLARED\ntypedef __uid_t uid_t;\n#define _UID_T_DECLARED\n#endif\n\n#ifndef _GID_T_DECLARED\ntypedef __gid_t gid_t;\n#define _GID_T_DECLARED\n#endif\n\n#ifndef _ID_T_DECLARED\ntypedef __id_t id_t;\n#define _ID_T_DECLARED\n#endif\n\n#ifndef _CLOCK_T_DECLARED\ntypedef __clock_t clock_t;\n#define _CLOCK_T_DECLARED\n#endif\n\n#ifndef _CLOCKID_T_DECLARED\ntypedef __clockid_t clockid_t;\n#define _CLOCKID_T_DECLARED\n#endif\n\n#ifndef _TIME_T_DECLARED\ntypedef __time_t time_t;\n#define _TIME_T_DECLARED\n#endif\n\n#ifndef _TIMER_T_DECLARED\ntypedef __timer_t timer_t;\n#define _TIMER_T_DECLARED\n#endif\n\n#ifndef _USECONDS_T_DECLARED\ntypedef __useconds_t useconds_t;\n#define _USECONDS_T_DECLARED\n#endif\n\n#ifndef _SUSECONDS_T_DECLARED\ntypedef __suseconds_t suseconds_t;\n#define _SUSECONDS_T_DECLARED\n#endif\n\n#ifndef _DEV_T_DECLARED\ntypedef __dev_t dev_t;\n#define _DEV_T_DECLARED\n#endif\n\n#ifndef _MODE_T_DECLARED\ntypedef __mode_t mode_t;\n#define _MODE_T_DECLARED\n#endif\n\n#ifndef _SOCKLEN_T_DECLARED\ntypedef __socklen_t socklen_t;\n#define _SOCKLEN_T_DECLARED\n#endif\n\n#ifndef _IN_PORT_T_DECLARED\ntypedef __in_port_t in_port_t;\n#define _IN_PORT_T_DECLARED\n#endif\n\n#ifndef _LOCALE_T_DEFINED\n#define _LOCALE_T_DEFINED\ntypedef __locale_t locale_t;\n#endif\n\n#ifndef _PTHREAD_T_DECLARED\ntypedef __pthread_t pthread_t;\n#define _PTHREAD_T_DECLARED\n#endif\n\n#ifndef _PTHREAD_ATTR_T_DECLARED\ntypedef __pthread_attr_t pthread_attr_t;\n#define _PTHREAD_ATTR_T_DECLARED\n#endif\n\n#ifndef _PTHREAD_MUTEX_T_DECLARED\ntypedef __pthread_mutex_t pthread_mutex_t;\n#define _PTHREAD_MUTEX_T_DECLARED\n#endif\n\n#ifndef _PTHREAD_COND_T_DECLARED\ntypedef __pthread_cond_t pthread_cond_t;\n#define _PTHREAD_COND_T_DECLARED\n#endif\n\ntypedef __blkcnt_t  blkcnt_t;\ntypedef __blksize_t blksize_t;\n\ntypedef __ino_t     ino_t;\ntypedef __key_t     key_t;\ntypedef __nlink_t   nlink_t;\n\n#ifdef __BSD_VISIBLE\ntypedef unsigned char  u_char;\ntypedef unsigned short u_short;\ntypedef unsigned int   u_int;\ntypedef unsigned long  u_long;\n\ntypedef __uint32_t       u_int32_t;\ntypedef __uint16_t       u_int16_t;\ntypedef __uint8_t        u_int8_t;\ntypedef __uint64_t       u_int64_t;\n\ntypedef __int64_t        quad_t;\ntypedef __uint64_t       u_quad_t;\ntypedef quad_t *         qaddr_t;\n\ntypedef unsigned short ushort;\ntypedef unsigned int   uint;\ntypedef unsigned long  ulong;\n#endif /* __BSD_VISIBLE */\n\ntypedef char *       caddr_t;\ntypedef const char * c_caddr_t;\n\ntypedef unsigned long fsblkcnt_t;\ntypedef unsigned long fsfilcnt_t;\n\n#endif /* __CRYSTAX_SYS_TYPES_H_D348E9D46FFA4B97A56C4EEFAB6B3F76 */\n"
  },
  {
    "path": "sources/crystax/include/sys/wait.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SYS_WAIT_H_F9DF1DC299814368BADB2B895DD7ECB4\n#define __CRYSTAX_SYS_WAIT_H_F9DF1DC299814368BADB2B895DD7ECB4\n\n#include <crystax/id.h>\n#include <crystax/google/sys/wait.h>\n#include <crystax/sys/wait.h>\n#include <sys/cdefs.h>\n#include <sys/types.h>\n#include <linux/resource.h>\n\n__BEGIN_DECLS\n\nextern pid_t  wait3(int *status, int options, struct rusage *rusage);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_SYS_WAIT_H_F9DF1DC299814368BADB2B895DD7ECB4 */\n"
  },
  {
    "path": "sources/crystax/include/syscall.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_SYSCALL_H_CD285A48BDDA4673BC50A297158F5287\n#define __CRYSTAX_INCLUDE_SYSCALL_H_CD285A48BDDA4673BC50A297158F5287\n\n#include <crystax/id.h>\n#include <sys/syscall.h>\n\n#endif /* __CRYSTAX_INCLUDE_SYSCALL_H_CD285A48BDDA4673BC50A297158F5287 */\n"
  },
  {
    "path": "sources/crystax/include/termios.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_TERMIOS_H_4BB725BB15A04872B58EBC8A4F9321F0\n#define __CRYSTAX_INCLUDE_TERMIOS_H_4BB725BB15A04872B58EBC8A4F9321F0\n\n#include <crystax/id.h>\n\n#include <sys/cdefs.h>\n#include <sys/ioctl.h>\n#include <sys/types.h>\n#include <linux/termios.h>\n\n__BEGIN_DECLS\n\nspeed_t cfgetispeed(const struct termios*);\nspeed_t cfgetospeed(const struct termios*);\nvoid cfmakeraw(struct termios*);\nint cfsetispeed(struct termios*, speed_t);\nint cfsetospeed(struct termios*, speed_t);\nint cfsetspeed(struct termios*, speed_t);\nint tcdrain(int);\nint tcflow(int, int);\nint tcflush(int, int);\nint tcgetattr(int, struct termios*);\npid_t tcgetsid(int);\nint tcsendbreak(int, int);\nint tcsetattr(int, int, const struct termios*);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_TERMIOS_H_4BB725BB15A04872B58EBC8A4F9321F0 */\n"
  },
  {
    "path": "sources/crystax/include/timeb.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_TIMEB_H_6033B07779134FF78EC76895A15DA0EB\n#define __CRYSTAX_INCLUDE_TIMEB_H_6033B07779134FF78EC76895A15DA0EB\n\n#include <crystax/id.h>\n#include <sys/timeb.h>\n\n#endif /* __CRYSTAX_INCLUDE_TIMEB_H_6033B07779134FF78EC76895A15DA0EB */\n"
  },
  {
    "path": "sources/crystax/include/xlocale.h",
    "content": "/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _XLOCALE_H_\n#define _XLOCALE_H_\n#endif\n\n#include <locale.h>\n\n__BEGIN_DECLS\n\n#ifndef __LIBCRYSTAX_XLOCALE__LOCALE_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__LOCALE_H_INCLUDED\n#include <xlocale/_locale.h>\n#endif\n\n#ifdef _STRING_H_\n#ifndef __LIBCRYSTAX_XLOCALE__STRING_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__STRING_H_INCLUDED\n#include <xlocale/_string.h>\n#endif\n#endif\n\n#ifdef _INTTYPES_H_\n#ifndef __LIBCRYSTAX_XLOCALE__INTTYPES_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__INTTYPES_H_INCLUDED\n#include <xlocale/_inttypes.h>\n#endif\n#endif\n\n#ifdef _MONETARY_H_\n#ifndef __LIBCRYSTAX_XLOCALE__MONETARY_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__MONETARY_H_INCLUDED\n#include <xlocale/_monetary.h>\n#endif\n#endif\n\n#ifdef _STDLIB_H_\n#ifndef __LIBCRYSTAX_XLOCALE__STDLIB_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__STDLIB_H_INCLUDED\n#include <xlocale/_stdlib.h>\n#endif\n#endif\n\n#ifdef _TIME_H_\n#ifndef __LIBCRYSTAX_XLOCALE__TIME_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__TIME_H_INCLUDED\n#include <xlocale/_time.h>\n#endif\n#endif\n\n#ifdef _LANGINFO_H_\n#ifndef __LIBCRYSTAX_XLOCALE__LANGINFO_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__LANGINFO_H_INCLUDED\n#include <xlocale/_langinfo.h>\n#endif\n#endif\n\n#ifdef _CTYPE_H_\n#ifndef __LIBCRYSTAX_XLOCALE__CTYPE_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__CTYPE_H_INCLUDED\n#undef _XLOCALE_WCTYPES\n#include <xlocale/_ctype.h>\n#endif\n#endif\n\n#ifdef _WCTYPE_H_\n#ifndef __LIBCRYSTAX_XLOCALE__WCTYPE_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__WCTYPE_H_INCLUDED\n#define _XLOCALE_WCTYPES 1\n#include <xlocale/_ctype.h>\n#endif\n#endif\n\n#ifdef _STDIO_H_\n#ifndef __LIBCRYSTAX_XLOCALE__STDIO_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__STDIO_H_INCLUDED\n#include <xlocale/_stdio.h>\n#endif\n#endif\n\n#ifdef _WCHAR_H_\n#ifndef __LIBCRYSTAX_XLOCALE__WCHAR_H_INCLUDED\n#define __LIBCRYSTAX_XLOCALE__WCHAR_H_INCLUDED\n#include <xlocale/_wchar.h>\n#endif\n#endif\n\n#ifndef __LIBCRYSTAX_XLOCALE_H_FUNCTIONS_DECLARED\n#define __LIBCRYSTAX_XLOCALE_H_FUNCTIONS_DECLARED\n\nstruct lconv *localeconv_l(locale_t);\n\n#endif\n\n__END_DECLS\n"
  },
  {
    "path": "sources/crystax/src/__get_thread.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#define __get_thread __real_get_thread\n#include \"pthread_internal.h\"\n#undef __get_thread\n\nextern \"C\"\npthread_internal_t* __get_thread()\n{\n    return __real_get_thread();\n}\n"
  },
  {
    "path": "sources/crystax/src/__wait4.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/wait.h>\n\npid_t __wait4(pid_t pid, int* status, int options, struct rusage* rusage) {\n    return wait4(pid, status, options, rusage);\n}\n"
  },
  {
    "path": "sources/crystax/src/bsd_signal.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <signal.h>\n\nsighandler_t bsd_signal(int signum, sighandler_t handler)\n{\n    return signal(signum, handler);\n}\n"
  },
  {
    "path": "sources/crystax/src/bzip2/error.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n\nvoid bz_internal_error(int err)\n{\n    fprintf(stderr, \"BZip2 internal error: %d\\n\", err);\n    abort();\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/android.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if defined(__CRYSTAX_INIT_DEBUG) && __CRYSTAX_INIT_DEBUG == 1\n#ifdef __CRYSTAX_DEBUG\n#undef __CRYSTAX_DEBUG\n#endif\n#define __CRYSTAX_DEBUG 1\n#endif\n\n#include <crystax/private.h>\n#include <crystax/localeimpl.h>\n#include <crystax/fenvimpl.h>\n#include <crystax/pthread_workqueue_impl.h>\n\n#include <stdlib.h>\n#include <pthread.h>\n\nnamespace crystax\n{\n\nstatic JavaVM *s_jvm = NULL;\nstatic pthread_key_t s_jnienv_key;\nstatic pthread_once_t s_jnienv_key_create_once = PTHREAD_ONCE_INIT;\nstatic pthread_once_t s_jnienv_key_delete_once = PTHREAD_ONCE_INIT;\n\nnamespace jni\n{\n\nJavaVM *jvm()\n{\n    return s_jvm;\n}\n\nstatic void jnienv_detach_thread(void * /*arg*/)\n{\n    FRAME_TRACER;\n    //DBG(\"env=%p, jvm=%p\", reinterpret_cast<JNIEnv*>(arg), jvm());\n    if (jvm())\n        jvm()->DetachCurrentThread();\n}\n\nstatic void jnienv_key_create()\n{\n    FRAME_TRACER;\n    if (::pthread_key_create(&s_jnienv_key, &jnienv_detach_thread) != 0)\n        ::abort();\n}\n\nstatic void jnienv_key_delete()\n{\n    FRAME_TRACER;\n    if (::pthread_key_delete(s_jnienv_key) != 0)\n        ::abort();\n}\n\nstatic bool save_jnienv(JNIEnv *env)\n{\n    FRAME_TRACER;\n\n    ::pthread_once(&s_jnienv_key_create_once, &jnienv_key_create);\n\n    return ::pthread_setspecific(s_jnienv_key, env) == 0;\n}\n\nJNIEnv *jnienv()\n{\n    ::pthread_once(&s_jnienv_key_create_once, &jnienv_key_create);\n\n    JNIEnv *env = reinterpret_cast<JNIEnv *>(::pthread_getspecific(s_jnienv_key));\n    if (!env && jni::jvm())\n    {\n        DBG(\"JNIEnv was not yet set for this thread, do it now\");\n        jni::jvm()->AttachCurrentThread(&env, NULL);\n        if (!save_jnienv(env))\n            ::abort();\n    }\n    return env;\n}\n\n} // namespace jni\n\n} // namespace crystax\n\nstatic bool __crystax_init()\n{\n#define NEXT_MODULE_INIT(x) \\\n    if (__crystax_ ## x ## _init() < 0) \\\n    { \\\n        ERR(#x \" initialization failed\"); \\\n        return false; \\\n    }\n\n    NEXT_MODULE_INIT(locale);\n    NEXT_MODULE_INIT(fenv);\n    NEXT_MODULE_INIT(pthread_workqueue);\n\n#undef NEXT_MODULE_INIT\n\n    return true;\n}\n\nCRYSTAX_HIDDEN\nvoid __crystax_on_load()\n{\n    FRAME_TRACER;\n    ::pthread_once(&::crystax::s_jnienv_key_create_once, &::crystax::jni::jnienv_key_create);\n\n    TRACE;\n    if (!__crystax_init())\n        PANIC(\"libcrystax initialization failed\");\n}\n\nCRYSTAX_HIDDEN\nvoid __crystax_on_unload()\n{\n    FRAME_TRACER;\n    ::pthread_once(&::crystax::s_jnienv_key_delete_once, &::crystax::jni::jnienv_key_delete);\n}\n\nCRYSTAX_GLOBAL\nJavaVM *crystax_jvm()\n{\n    return ::crystax::jni::jvm();\n}\n\nCRYSTAX_GLOBAL\nJNIEnv *crystax_jnienv()\n{\n    return ::crystax::jni::jnienv();\n}\n\nCRYSTAX_GLOBAL\nvoid crystax_save_jnienv(JNIEnv *env)\n{\n    ::crystax::jni::save_jnienv(env);\n}\n\nCRYSTAX_GLOBAL\njint crystax_jni_on_load(JavaVM *vm)\n{\n    FRAME_TRACER;\n\n    jint jversion = JNI_VERSION_1_4;\n    JNIEnv *env;\n\n    TRACE;\n    if (vm->GetEnv((void**)&env, jversion) != JNI_OK)\n    {\n        ERR(\"can't get env from JVM\");\n        return -1;\n    }\n\n    TRACE;\n    ::crystax::s_jvm = vm;\n    if (!::crystax::jni::save_jnienv(env))\n    {\n        ERR(\"can't save jnienv\");\n        return -1;\n    }\n\n    TRACE;\n    return jversion;\n}\n\nCRYSTAX_GLOBAL\nvoid crystax_jni_on_unload(JavaVM * /* vm */)\n{\n    FRAME_TRACER;\n    ::crystax::s_jvm = NULL;\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/android_jni.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if 0\n\n#include <crystax.h>\n#include <pthread.h>\n#include <jni.h>\n#include <dlfcn.h>\n#include \"crystax/private.h\"\n\nstatic pthread_mutex_t mtx = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\nstatic void *libart_handle = NULL;\n\ntypedef jint (*JNI_GetDefaultJavaVMInitArgs_func_t)(void *);\ntypedef jint (*JNI_CreateJavaVM_func_t)(JavaVM**, JNIEnv**, void*);\ntypedef jint (*JNI_GetCreatedJavaVMs_func_t)(JavaVM**, jsize, jsize*);\n\nstatic JNI_GetDefaultJavaVMInitArgs_func_t JNI_GetDefaultJavaVMInitArgs_func = NULL;\nstatic JNI_CreateJavaVM_func_t JNI_CreateJavaVM_func = NULL;\nstatic JNI_GetCreatedJavaVMs_func_t JNI_GetCreatedJavaVMs_func = NULL;\n\nCRYSTAX_GLOBAL\njint JNI_OnLoad(JavaVM* vm, void* /*reserved*/)\n{\n    FRAME_TRACER;\n    return crystax_jni_on_load(vm);\n}\n\nCRYSTAX_GLOBAL\nvoid JNI_OnUnload(JavaVM* vm, void* /*reserved*/)\n{\n    FRAME_TRACER;\n    crystax_jni_on_unload(vm);\n}\n\nstatic void initialize_jni_runtime()\n{\n    FRAME_TRACER;\n\n    if (::pthread_mutex_lock(&mtx) != 0)\n        PANIC(\"Can't lock mutex\");\n\n    TRACE;\n    if (!libart_handle)\n    {\n        TRACE;\n        libart_handle = ::dlopen(\"libart.so\", RTLD_NOW);\n        if (!libart_handle)\n            PANIC(\"Can't open libart.so\");\n\n        TRACE;\n        JNI_GetDefaultJavaVMInitArgs_func = (JNI_GetDefaultJavaVMInitArgs_func_t)::dlsym(\n                libart_handle, \"JNI_GetDefaultJavaVMInitArgs\");\n        if (!JNI_GetDefaultJavaVMInitArgs_func)\n            PANIC(\"Can't find JNI_GetDefaultJavaVMInitArgs in libart.so\");\n\n        TRACE;\n        JNI_CreateJavaVM_func = (JNI_CreateJavaVM_func_t)::dlsym(\n                libart_handle, \"JNI_CreateJavaVM\");\n        if (!JNI_CreateJavaVM_func)\n            PANIC(\"Can't find JNI_CreateJavaVM in libart.so\");\n\n        TRACE;\n        JNI_GetCreatedJavaVMs_func = (JNI_GetCreatedJavaVMs_func_t)::dlsym(\n                libart_handle, \"JNI_GetCreatedJavaVMs\");\n        if (!JNI_GetCreatedJavaVMs_func)\n            PANIC(\"Can't find JNI_GetCreatedJavaVMs in libart.so\");\n    }\n\n    TRACE;\n    if (::pthread_mutex_unlock(&mtx) != 0)\n        PANIC(\"Can't unlock mutex\");\n}\n\nCRYSTAX_GLOBAL\njint JNI_GetDefaultJavaVMInitArgs(void* args)\n{\n    initialize_jni_runtime();\n    return JNI_GetDefaultJavaVMInitArgs_func(args);\n}\n\nCRYSTAX_GLOBAL\njint JNI_CreateJavaVM(JavaVM** vm, JNIEnv** env, void* args)\n{\n    initialize_jni_runtime();\n    return JNI_CreateJavaVM(vm, env, args);\n}\n\nCRYSTAX_GLOBAL\njint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize size, jsize* count)\n{\n    initialize_jni_runtime();\n    return JNI_GetCreatedJavaVMs(vms, size, count);\n}\n\n#endif\n"
  },
  {
    "path": "sources/crystax/src/crystax/crystax_posix_base.c",
    "content": "/*\n * Copyright (c) 2018 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#include <crystax.h>\n\nconst char *crystax_posix_base()\n{\n    return getenv(\"CRYSTAX_POSIX_BASE\");\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/fenvimpl.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/fenvimpl.h>\n\n#include <fenv.h>\n\nint __crystax_fenv_init()\n{\n    feclearexcept(FE_ALL_EXCEPT);\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/isthreaded.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread.h>\n#include <stdlib.h>\n#include <errno.h>\n\n#ifndef ELAST\n#define ELAST ENOTRECOVERABLE\n#endif\n\nint const __hidden_sys_nerr = ELAST;\n\nstatic pthread_mutex_t __crystax_stdio_thread_lock_var = PTHREAD_MUTEX_INITIALIZER;\n\nvoid __crystax_stdio_thread_lock()\n{\n    if (pthread_mutex_lock(&__crystax_stdio_thread_lock_var) != 0)\n        abort();\n}\n\nvoid __crystax_stdio_thread_unlock()\n{\n    if (pthread_mutex_unlock(&__crystax_stdio_thread_lock_var) != 0)\n        abort();\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/jutils/exceptions.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n#include <crystax/jutils.hpp>\n#include <crystax/log.h>\n#include <crystax/memory.hpp>\n\n#include <errno.h>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nbool jexcheck(JNIEnv *env)\n{\n    jhthrowable jex(env->ExceptionOccurred());\n    if (!jex)\n        return true;\n\n    env->ExceptionClear();\n\n    jhclass cls(env->GetObjectClass(jex.get()));\n    if (!cls) CRYSTAX_PANIC(\"Can't get object class for Java throwable object\");\n\n    jmethodID mid = env->GetMethodID(cls.get(), \"getMessage\", \"()Ljava/lang/String;\");\n    if (!mid) CRYSTAX_PANIC(\"Can't get 'getMessage' method id for Java throwable object\");\n\n    jstring msg = (jstring)env->CallObjectMethod(jex.get(), mid);\n    if (!msg) CRYSTAX_PANIC(\"Can't call 'getMessage' for Java throwable object\");\n\n    scope_c_ptr_t<const char> s(jcast<const char *>(msg));\n    CRYSTAX_ERR(\"Java exception: %s\", s.get());\n\n    errno = EFAULT;\n    return false;\n}\n\n} // namespace jni\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/src/crystax/jutils/helper.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n#include <crystax/jutils/helper.hpp>\n#include <crystax/log.h>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nnamespace details\n{\n\n#define CRYSTAX_PP_CAT(a, b, c) CRYSTAX_PP_CAT_IMPL(a, b, c)\n#define CRYSTAX_PP_CAT_IMPL(a, b, c) a ## b ## c\n\n#define CRYSTAX_PP_STRINGIZE(a) CRYSTAX_PP_STRINGIZE_IMPL(a)\n#define CRYSTAX_PP_STRINGIZE_IMPL(a) #a\n\n#define JNI_MAP_void Void\n#define JNI_MAP_jboolean Boolean\n#define JNI_MAP_jbyte Byte\n#define JNI_MAP_jchar Char\n#define JNI_MAP_jshort Short\n#define JNI_MAP_jint Int\n#define JNI_MAP_jlong Long\n#define JNI_MAP_jfloat Float\n#define JNI_MAP_jdouble Double\n#define JNI_MAP_jhobject Object\n#define JNI_MAP_jhclass Object\n#define JNI_MAP_jhstring Object\n#define JNI_MAP_jhthrowable Object\n#define JNI_MAP_jharray Object\n#define JNI_MAP_jhbooleanArray Object\n#define JNI_MAP_jhbyteArray Object\n#define JNI_MAP_jhshortArray Object\n#define JNI_MAP_jhintArray Object\n#define JNI_MAP_jhlongArray Object\n#define JNI_MAP_jhfloatArray Object\n#define JNI_MAP_jhdoubleArray Object\n#define JNI_MAP_jhobjectArray Object\n\n#define JNI_MAP(type) JNI_MAP_ ## type\n\ntemplate <typename T>\nstruct jni_base_type\n{\n    typedef T type_t;\n};\n\ntemplate <typename T>\nstruct jni_base_type<jholder<T> >\n{\n    typedef T type_t;\n};\n\nvoid call_void_method(JNIEnv *env, jobject obj, jmethodID mid, ...)\n{\n    va_list vl;\n    va_start(vl, mid);\n    env->CallVoidMethodV(obj, mid, vl);\n    va_end(vl);\n}\n\nvoid call_void_method(JNIEnv *env, jclass cls, jmethodID mid, ...)\n{\n    va_list vl;\n    va_start(vl, mid);\n    env->CallStaticVoidMethodV(cls, mid, vl);\n    va_end(vl);\n}\n\ntemplate <typename T>\nstruct result_helper\n{\n    static T make_result(JNIEnv * /*env*/, T obj) {return obj;}\n};\n\ntemplate <typename T>\nstruct result_helper<jholder<T> >\n{\n    static jholder<T> make_result(JNIEnv *env, T obj) {return jholder<T>(env->ExceptionCheck() ? 0 : obj);}\n};\n\n#define CRYSTAX_PP_STEP(type) \\\n    type CRYSTAX_PP_CAT(get_, type, _field)(JNIEnv *env, jobject obj, jfieldID fid) \\\n    { \\\n        CRYSTAX_DBG(\"calling Get\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"Field\"); \\\n        return type((jni_base_type<type>::type_t)CRYSTAX_PP_CAT(env->Get, JNI_MAP(type), Field)(obj, fid)); \\\n    } \\\n    type CRYSTAX_PP_CAT(get_, type, _field)(JNIEnv *env, jclass cls, jfieldID fid) \\\n    { \\\n        CRYSTAX_DBG(\"calling GetStatic\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"Field\"); \\\n        return type((jni_base_type<type>::type_t)CRYSTAX_PP_CAT(env->GetStatic, JNI_MAP(type), Field)(cls, fid)); \\\n    } \\\n    void CRYSTAX_PP_CAT(set_, type, _field)(JNIEnv *env, jobject obj, jfieldID fid, type const &arg) \\\n    { \\\n        CRYSTAX_DBG(\"calling Set\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"Field\"); \\\n        CRYSTAX_PP_CAT(env->Set, JNI_MAP(type), Field)(obj, fid, (jni_base_type<type>::type_t)raw_arg(arg)); \\\n    } \\\n    void CRYSTAX_PP_CAT(set_, type, _field)(JNIEnv *env, jclass cls, jfieldID fid, type const &arg) \\\n    { \\\n        CRYSTAX_DBG(\"calling SetStatic\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"Field\"); \\\n        CRYSTAX_PP_CAT(env->SetStatic, JNI_MAP(type), Field)(cls, fid, (jni_base_type<type>::type_t)raw_arg(arg)); \\\n    } \\\n    type CRYSTAX_PP_CAT(call_, type, _method)(JNIEnv *env, jobject obj, jmethodID mid, ...) \\\n    { \\\n        CRYSTAX_DBG(\"calling Call\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"MethodV\"); \\\n        va_list vl; \\\n        va_start(vl, mid); \\\n        typedef jni_base_type<type>::type_t result_t; \\\n        result_t result = (result_t)CRYSTAX_PP_CAT(env->Call, JNI_MAP(type), MethodV)(obj, mid, vl); \\\n        va_end(vl); \\\n        return result_helper<type>::make_result(env, result); \\\n    } \\\n    type CRYSTAX_PP_CAT(call_, type, _method)(JNIEnv *env, jclass cls, jmethodID mid, ...) \\\n    { \\\n        CRYSTAX_DBG(\"calling CallStatic\" CRYSTAX_PP_STRINGIZE(JNI_MAP(type)) \"MethodV\"); \\\n        va_list vl; \\\n        va_start(vl, mid); \\\n        typedef jni_base_type<type>::type_t result_t; \\\n        result_t result = (result_t)CRYSTAX_PP_CAT(env->CallStatic, JNI_MAP(type), MethodV)(cls, mid, vl); \\\n        va_end(vl); \\\n        return result_helper<type>::make_result(env, result); \\\n    }\n#include <crystax/details/jni.inc>\n#undef CRYSTAX_PP_STEP\n\ntemplate <> const char *jni_signature<jboolean>::signature = \"Z\";\ntemplate <> const char *jni_signature<jbyte>::signature = \"B\";\ntemplate <> const char *jni_signature<jchar>::signature = \"C\";\ntemplate <> const char *jni_signature<jshort>::signature = \"S\";\ntemplate <> const char *jni_signature<jint>::signature = \"I\";\ntemplate <> const char *jni_signature<jlong>::signature = \"J\";\ntemplate <> const char *jni_signature<jfloat>::signature = \"F\";\ntemplate <> const char *jni_signature<jdouble>::signature = \"D\";\ntemplate <> const char *jni_signature<jhobject>::signature = \"Ljava/lang/Object;\";\ntemplate <> const char *jni_signature<jhclass>::signature = \"Ljava/lang/Class;\";\ntemplate <> const char *jni_signature<jhstring>::signature = \"Ljava/lang/String;\";\ntemplate <> const char *jni_signature<jhthrowable>::signature = \"Ljava/lang/Throwable;\";\ntemplate <> const char *jni_signature<jhbooleanArray>::signature = \"[Z\";\ntemplate <> const char *jni_signature<jhbyteArray>::signature = \"[B\";\ntemplate <> const char *jni_signature<jhcharArray>::signature = \"[C\";\ntemplate <> const char *jni_signature<jhshortArray>::signature = \"[S\";\ntemplate <> const char *jni_signature<jhintArray>::signature = \"[I\";\ntemplate <> const char *jni_signature<jhlongArray>::signature = \"[J\";\ntemplate <> const char *jni_signature<jhfloatArray>::signature = \"[F\";\ntemplate <> const char *jni_signature<jhdoubleArray>::signature = \"[D\";\ntemplate <> const char *jni_signature<jhobjectArray>::signature = \"[Ljava/lang/Object;\";\n\n} // namespace details\n\n} // namespace jni\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/src/crystax/jutils/jcast.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n#include <crystax/jutils.hpp>\n#include <crystax/log.h>\n#include <crystax/memory.hpp>\n\n#include <errno.h>\n#include <pthread.h>\n#include <string.h>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nstatic bool jcast_initialized = false;\nstatic pthread_mutex_t jcast_mtx = PTHREAD_MUTEX_INITIALIZER;\n\nstatic jclass clsString;\nstatic jmethodID midStringCtor;\n\nstatic void jcast_init()\n{\n    int rc;\n    if ((rc = ::pthread_mutex_lock(&jcast_mtx)) != 0)\n        CRYSTAX_PANIC(\"Can't lock jcast mutex: %s\", ::strerror(rc));\n\n    if (!jcast_initialized)\n    {\n        JNIEnv *env = jnienv();\n        jhclass cls(env->FindClass(\"java/lang/String\"));\n        if (!cls) CRYSTAX_PANIC(\"Can't find java/lang/String\");\n\n        clsString = (jclass)env->NewGlobalRef(cls.get());\n        if (!clsString) CRYSTAX_PANIC(\"Can't make new global ref for java/lang/String\");\n\n        midStringCtor = env->GetMethodID(clsString, \"<init>\", \"([BLjava/lang/String;)V\");\n        if (!midStringCtor) CRYSTAX_PANIC(\"Can't find constructor for java/lang/String\");\n\n        jcast_initialized = true;\n    }\n\n    if ((rc = ::pthread_mutex_unlock(&jcast_mtx)) != 0)\n        CRYSTAX_PANIC(\"Can't unlock jcast mutex: %s\", ::strerror(rc));\n}\n\nconst char * jcaster<const char *, jstring>::operator()(jstring v)\n{\n    jcast_init();\n\n    JNIEnv *env = jnienv();\n    const char *s = env->GetStringUTFChars(v, JNI_FALSE);\n    const char *ret = ::strdup(s);\n    env->ReleaseStringUTFChars(v, s);\n    return ret;\n}\n\njhstring jcaster<jhstring, const char *>::operator()(const char *s)\n{\n    jcast_init();\n\n    if (!s) return jhstring();\n\n    JNIEnv *env = jnienv();\n\n    jhstring encoding(env->NewStringUTF(\"UTF-8\"));\n    if (!encoding) rethrow(jexception(env));\n\n    size_t slen = ::strlen(s);\n    jhbyteArray bytes(env->NewByteArray(slen));\n    if (!bytes) rethrow(jexception(env));\n\n    env->SetByteArrayRegion(bytes.get(), 0, slen, reinterpret_cast<jbyte const *>(s));\n\n    return jhstring((jstring)env->NewObject(clsString, midStringCtor, bytes.get(), encoding.get()));\n}\n\n} // namespace jni\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/src/crystax/jutils/rethrow.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n#include <crystax/jutils.hpp>\n#include <crystax/log.h>\n#include <crystax/memory.hpp>\n\nnamespace crystax\n{\nnamespace jni\n{\n\nvoid rethrow(JNIEnv *env, jthrowable ex)\n{\n    if (!ex) return;\n\n    env->ExceptionClear();\n\n    jhclass cls(env->GetObjectClass(ex));\n    if (!cls) CRYSTAX_PANIC(\"Can't get object class for Java throwable object\");\n\n    jmethodID mid = env->GetMethodID(cls.get(), \"getMessage\", \"()Ljava/lang/String;\");\n    if (!mid) CRYSTAX_PANIC(\"Can't get 'getMessage' method id for Java throwable object\");\n\n    jstring msg = (jstring)env->CallObjectMethod(ex, mid);\n    if (!msg) CRYSTAX_PANIC(\"Can't call 'getMessage' for Java throwable object\");\n\n    scope_c_ptr_t<const char> s(jcast<const char *>(msg));\n    CRYSTAX_ERR(\"Java exception: %s\", s.get());\n\n    ::abort();\n}\n\n} // namespace jni\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/src/crystax/locale/locale.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/localeimpl.h>\n#include <errno.h>\n#include <pthread.h>\n#include <bzlib.h>\n\nstatic pthread_mutex_t dmtx = PTHREAD_MUTEX_INITIALIZER;\n\nstatic int decompress(__crystax_locale_blob_t *blob)\n{\n    int rc;\n    char *dst = NULL;\n    unsigned dstlen = 0;\n\n    if (blob->compressed == 0)\n        return 0;\n\n    if (pthread_mutex_lock(&dmtx) != 0)\n        abort();\n\n    if (blob->compressed)\n    {\n        for (dstlen = blob->size * 2 + 1024;; dstlen += blob->size + 1024)\n        {\n            dst = (char*)reallocf(dst, dstlen);\n            if (dst == NULL)\n            {\n                errno = ENOMEM;\n                goto err;\n            }\n\n            rc = BZ2_bzBuffToBuffDecompress(dst, &dstlen, (char*)blob->data, (unsigned)blob->size, 0, 0);\n            if (rc == BZ_OUTBUFF_FULL)\n                continue;\n            if (rc == BZ_OK)\n                break;\n            errno = EFAULT;\n            goto err;\n        }\n        blob->data = (uint8_t*)dst;\n        blob->size = (size_t)dstlen;\n        blob->compressed = 0;\n    }\n\n    rc = 0;\n    goto success;\n\nerr:\n    rc = -1;\n\nsuccess:\n    if (pthread_mutex_unlock(&dmtx) != 0)\n        abort();\n\n    return rc;\n}\n\nstatic __crystax_locale_data_t *lookup(const char *encoding)\n{\n    __crystax_locale_data_t *d;\n    size_t i, lim;\n\n    if (encoding == NULL || *encoding == '\\0')\n        return NULL;\n\n    for (i = 0, lim = __crystax_locale_table_size(); i < lim; ++i)\n    {\n        d = __crystax_locale_data(i);\n        if (d && d->encoding && strcmp(d->encoding, encoding) == 0)\n            return d;\n    }\n    return NULL;\n}\n\nint __crystax_locale_load(const char *encoding, int type, void **buf, size_t *bufsize)\n{\n    __crystax_locale_data_t *ld;\n\n    if (__crystax_locale_init() != 0)\n        return -1;\n\n    if (type < 0 || type >= _LC_LAST)\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    if ((ld = lookup(encoding)) == NULL)\n    {\n        errno = ENOENT;\n        return -1;\n    }\n\n    if (ld->data[type].alias)\n        return __crystax_locale_load(ld->data[type].alias, type, buf, bufsize);\n\n    if (decompress(&(ld->data[type].blob)) < 0)\n        return -1;\n\n    if (buf) *buf = ld->data[type].blob.data;\n    if (bufsize) *bufsize = ld->data[type].blob.size;\n    return 0;\n}\n\nint __crystax_locale_loads(const char *encoding, const char *type, void **buf, size_t *bufsize)\n{\n    int ctype;\n\n    if (type == NULL)\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    if (strcmp(type, \"LC_CTYPE\") == 0)\n        ctype = LC_CTYPE;\n    else if (strcmp(type, \"LC_COLLATE\") == 0)\n        ctype = LC_COLLATE;\n    else if (strcmp(type, \"LC_MESSAGES\") == 0)\n        ctype = LC_MESSAGES;\n    else if (strcmp(type, \"LC_MONETARY\") == 0)\n        ctype = LC_MONETARY;\n    else if (strcmp(type, \"LC_NUMERIC\") == 0)\n        ctype = LC_NUMERIC;\n    else if (strcmp(type, \"LC_TIME\") == 0)\n        ctype = LC_TIME;\n    else\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    return __crystax_locale_load(encoding, ctype, buf, bufsize);\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/locale/localeinit.c",
    "content": "/* THIS IS AUTOGENERATED FILE. DO NOT MODIFY IT MANUALLY!!! */\n/* GENERATED BY: ./bin/gen-locales -o src/crystax/locale/localeinit.c */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread.h>\n#include <crystax/ctassert.h>\n#include <crystax/localeimpl.h>\n\n/* af_ZA.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_90738d86bf29dc39d971c19f444d9ba9ff572e95d6e4f1144741f1df399200cd[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_90738d86bf29dc39d971c19f444d9ba9ff572e95d6e4f1144741f1df399200cd) == 18, \"Wrong size of locale's blob\");\n\n/* af_ZA.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_e77de040f5f7a8474db16baec9a524791f03815b969fc406975d33977ef0ca5c[] = {\n    0x5A,0x41,0x52,0x20,0x0A,0x52,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e77de040f5f7a8474db16baec9a524791f03815b969fc406975d33977ef0ca5c) == 34, \"Wrong size of locale's blob\");\n\n/* af_ZA.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_b62cc548fd428ed75d0bb84710ac6a27bea4cf00823aba3d89955c63cf280f48[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b62cc548fd428ed75d0bb84710ac6a27bea4cf00823aba3d89955c63cf280f48) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed am_ET.UTF-8 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_1c7a57d8f7a459e5e0d226b6a20fb96365679d360fe09be748402c38286d21a0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x16,0xFD,0xF4,0xEE,0x00,0x05,\n    0x6E,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7A,0x00,0x40,0x02,0xAA,0xAA,0x68,0x13,0x00,0x98,0x00,\n    0x06,0x80,0x00,0x00,0x4F,0x40,0x1A,0x00,0x00,0x00,0x00,0x00,0x01,0x30,0x00,0x23,\n    0x4C,0x00,0x8C,0x98,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x6A,0x62,0x0D,\n    0xA0,0x00,0x13,0x00,0x24,0xC0,0x01,0x30,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x91,0x52,0x7A,0x8D,0x4C,0x23,0x08,0x83,0x00,\n    0x08,0xD3,0x21,0xA0,0x30,0x23,0x03,0x40,0x09,0x82,0x68,0xD1,0xA3,0x13,0x40,0x32,\n    0x62,0x30,0x08,0xC0,0x00,0x00,0x00,0x98,0x98,0x46,0x13,0x1A,0x87,0xA8,0x34,0x64,\n    0x63,0x53,0x04,0xD0,0xC9,0x80,0x26,0x00,0x00,0x01,0x18,0xD1,0xA0,0xF4,0x89,0x30,\n    0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x09,0x78,0x53,0x70,0x46,0xD4,0x62,0xE0,0x00,0x29,0x72,0xAE,0x92,0x27,0x09,0x88,\n    0xA8,0x6E,0x9E,0x1A,0x8D,0x51,0xCA,0x3D,0x48,0x28,0xF5,0x39,0x23,0x1A,0x74,0x48,\n    0x92,0x48,0xEA,0x3C,0x8F,0xA4,0x09,0x0A,0x45,0x0E,0x91,0xA4,0x89,0x2A,0x4C,0x93,\n    0xA3,0x72,0x84,0x04,0xA5,0x2A,0x4A,0xD0,0x29,0x62,0x5A,0x97,0x25,0xE9,0x82,0x62,\n    0x99,0x26,0x69,0xA2,0x6A,0x9B,0x26,0x89,0xBA,0x70,0x9C,0xA7,0x49,0xDA,0x78,0x9E,\n    0xA7,0xC9,0xFA,0x80,0xA0,0xA8,0x4F,0xC9,0x04,0xA1,0xA0,0x94,0x45,0x15,0x46,0x51,\n    0xD4,0x85,0x25,0x4A,0x41,0xDA,0x60,0xCA,0x62,0x01,0x4D,0x53,0x94,0xF5,0x41,0x51,\n    0x54,0x95,0x35,0x51,0x55,0x55,0x95,0x75,0x61,0x59,0x56,0x95,0xB5,0x71,0x5D,0x57,\n    0x95,0xF5,0x81,0x61,0x58,0x96,0x35,0x93,0x05,0x66,0x59,0xD6,0x85,0xA5,0x6A,0x40,\n    0xC0,0xDA,0xD6,0xC5,0xB5,0x6E,0x5B,0xD7,0x05,0xC5,0x72,0x5C,0xD7,0x45,0xD5,0x76,\n    0x5D,0xD7,0x85,0xE5,0xF9,0xAF,0x4B,0xDA,0xF8,0xBE,0xAF,0xCB,0xFB,0x00,0xC0,0xB0,\n    0x49,0x5C,0x0E,0x0D,0x84,0x61,0x58,0x66,0x1D,0xFA,0x3F,0x56,0x21,0xFB,0x31,0x2C,\n    0x53,0x16,0xC6,0x31,0xAC,0x73,0x1E,0xC8,0x32,0x2C,0x93,0xF7,0x7F,0x0C,0x9B,0x28,\n    0xFE,0x59,0x56,0x59,0x97,0x66,0x19,0x96,0x69,0x9B,0x67,0x19,0xD6,0x79,0x9F,0x68,\n    0x1A,0x16,0x89,0xA3,0x69,0x1A,0x56,0x99,0xA7,0x6A,0x1A,0x96,0xA9,0xAB,0x6B,0x1A,\n    0xD6,0xB9,0xAF,0x6C,0x1B,0x14,0x22,0x11,0xB2,0x6C,0xDB,0x46,0xD5,0xB6,0x6D,0xDB,\n    0x86,0xE5,0xBA,0x6E,0xDB,0xC6,0xF5,0xBE,0x6F,0xDC,0x07,0x05,0xC2,0x70,0xDC,0x47,\n    0x15,0xC6,0x71,0xDC,0x87,0x25,0xCA,0x72,0xDC,0xC7,0x35,0xCE,0x73,0xDD,0x07,0x45,\n    0xD2,0x74,0xDD,0x47,0x55,0xD6,0x75,0xDD,0x87,0x65,0xDA,0x76,0xD0,0xAF,0xE9,0xDC,\n    0x77,0x5D,0xE4,0x2F,0xF6,0xFF,0x1F,0xEB,0xFE,0x77,0xD0,0xCF,0x03,0xC2,0xF1,0x3C,\n    0x6F,0x23,0xCA,0xF3,0x3C,0xEF,0x43,0xD2,0xF5,0x3D,0x6F,0x63,0xDA,0xF7,0x3F,0xF7,\n    0xBD,0xF0,0x7C,0x5F,0x27,0xCD,0xF4,0x7D,0x5F,0x64,0x30,0x1F,0x48,0x00,0x26,0x90,\n    0x24,0x73,0x92,0x0E,0x02,0x6D,0x0B,0x80,0xCD,0x7B,0x61,0x21,0x92,0x08,0x13,0xCC,\n    0xB0,0xEA,0x31,0x92,0x00,0x4A,0x69,0x90,0x80,0x31,0x4C,0x81,0x22,0xE5,0xD8,0x70,\n    0x02,0x29,0x81,0x21,0xD9,0x13,0x71,0x71,0x3C,0x78,0x91,0x22,0x49,0x43,0x89,0x12,\n    0x46,0x24,0x48,0x20,0x82,0x08,0x20,0x81,0x24,0x02,0x59,0x16,0xBA,0xB0,0x24,0xA4,\n    0x26,0x67,0x90,0xE2,0x92,0x11,0xE1,0x30,0x21,0xDA,0x4D,0x90,0xEC,0x86,0x64,0x09,\n    0x12,0x6C,0x90,0x21,0xD9,0x02,0x66,0x06,0x93,0x74,0xC8,0x12,0x1D,0xD3,0xBB,0x90,\n    0x78,0x2E,0x0E,0xEE,0x4A,0x42,0x84,0xE8,0x21,0x10,0xA1,0x38,0xEE,0xE3,0xBB,0x8A,\n    0x45,0x80,0x22,0xC1,0x0D,0x00,0x98,0x12,0x76,0x18,0x48,0x18,0x46,0xCD,0x80,0x96,\n    0x60,0x5C,0x96,0x10,0x78,0x11,0xCE,0x26,0x61,0x13,0x0C,0x25,0x2E,0xC2,0x23,0x58,\n    0x26,0x18,0xE3,0x30,0x0B,0x64,0xC0,0x4B,0x30,0x7E,0x8C,0x25,0xA3,0x61,0x2D,0x7B,\n    0x09,0x77,0x18,0x0C,0xC3,0x00,0x4A,0xB1,0x28,0x08,0x9D,0x89,0xC0,0x84,0x98,0x42,\n    0xCA,0xB0,0x93,0x30,0x92,0x66,0x10,0x08,0xEF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x0B,\n    0x7E,0xFA,0x77,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1c7a57d8f7a459e5e0d226b6a20fb96365679d360fe09be748402c38286d21a0) == 772, \"Wrong size of locale's blob\");\n\n/* am_ET.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_7933b309a0b751aa45fe67cd9234225cda9927c7f41fd3f64f2edf3607ca7fd4[] = {\n    0x5E,0x5B,0xE1,0x8B,0xAD,0xE1,0x88,0x81,0xE1,0x8A,0x95,0x79,0x59,0x5D,0x2E,0x2A,\n    0x0A,0x5E,0x5B,0xE1,0x8A,0xA0,0xE1,0x8B,0xAD,0xE1,0x88,0x81,0xE1,0x8A,0x95,0x6E,\n    0x4E,0x5D,0x2E,0x2A,0x0A,0xE1,0x8B,0xAD,0xE1,0x88,0x81,0xE1,0x8A,0x95,0x0A,0xE1,\n    0x8A,0xA0,0xE1,0x8B,0xAD,0xE1,0x88,0x81,0xE1,0x8A,0x95,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7933b309a0b751aa45fe67cd9234225cda9927c7f41fd3f64f2edf3607ca7fd4) == 60, \"Wrong size of locale's blob\");\n\n/* am_ET.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_fb4794bd5b713e95c5005257777d1645ca584853723fdf5bb3725ac159ef5784[] = {\n    0x45,0x54,0x42,0x20,0x0A,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fb4794bd5b713e95c5005257777d1645ca584853723fdf5bb3725ac159ef5784) == 34, \"Wrong size of locale's blob\");\n\n/* am_ET.UTF-8 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_c80301ce26dcaa16da8f976d564b242a4bedb016d88ab2c630c5cc5b40a5d662[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c80301ce26dcaa16da8f976d564b242a4bedb016d88ab2c630c5cc5b40a5d662) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed am_ET.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_dd17b3f3f5335e56d2c8f5a65e0596720ebf66c9d8c014b80b0746acd802ad8f[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xEB,0x83,0x04,0x68,0x00,0x01,\n    0x39,0x5F,0xF9,0x00,0x10,0x42,0x00,0x80,0x10,0x20,0x62,0x48,0x70,0x36,0x02,0x40,\n    0x00,0x2A,0x7E,0x6B,0x2F,0x67,0x76,0x5F,0x02,0x20,0x00,0x30,0x01,0x06,0x00,0x94,\n    0x29,0x00,0x1A,0x68,0x00,0x34,0xDA,0x6A,0x00,0x0D,0xA8,0x0D,0x06,0x00,0x01,0xA0,\n    0x00,0x32,0x68,0x00,0x00,0x34,0x02,0x24,0xA2,0x9E,0x91,0xA0,0x00,0x00,0x01,0x93,\n    0xD1,0x0D,0x0C,0x8D,0xA9,0xB7,0x0C,0x76,0xEE,0xB3,0x41,0xE7,0x7A,0x0E,0x45,0x1B,\n    0x06,0xF1,0xF1,0x08,0x1F,0x6D,0x14,0xA2,0xC9,0x4B,0x21,0x58,0x83,0x11,0xA2,0xA3,\n    0xEF,0xD4,0x92,0x41,0xE6,0xB9,0x95,0xC4,0xE6,0x5C,0xE4,0xA1,0xA4,0x95,0x52,0x21,\n    0x45,0x51,0x97,0x53,0xDD,0x3C,0xC5,0x77,0x0F,0x7B,0x11,0x2A,0x08,0xAA,0x62,0x86,\n    0x64,0x3D,0x8C,0x11,0x03,0x38,0x58,0xD2,0x82,0x66,0x60,0x39,0x1A,0x29,0x08,0x16,\n    0x86,0x76,0xD1,0x83,0x60,0x24,0x6E,0x12,0x30,0x84,0x60,0xD0,0xDB,0x08,0x40,0xB1,\n    0x83,0x4C,0x23,0x61,0x44,0x62,0xD2,0x59,0x4C,0x23,0x44,0xA2,0x04,0x1B,0xDB,0xCD,\n    0xB3,0x29,0xEE,0x52,0x60,0x47,0x5E,0x54,0x86,0x46,0xC2,0xE7,0x18,0x6A,0x03,0xEC,\n    0xD4,0xDF,0x71,0x30,0x69,0xBB,0xF4,0x85,0x17,0xE8,0x22,0x70,0x18,0x8E,0x77,0xF5,\n    0xDE,0x7E,0x4B,0x47,0x91,0xD2,0xE3,0x7F,0x18,0xA6,0xF9,0x83,0xA0,0x2C,0x35,0x98,\n    0xDE,0xB7,0x4B,0x6B,0xFC,0x6B,0x29,0x0D,0x96,0x38,0x3D,0x8F,0xF8,0xBB,0x92,0x29,\n    0xC2,0x84,0x87,0x5C,0x18,0x23,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dd17b3f3f5335e56d2c8f5a65e0596720ebf66c9d8c014b80b0746acd802ad8f) == 263, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.CP1131 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_91ed966e5541dbb4c5290b94f1fc0832bfcfb9e5a69ec20f4fb464d1623118c6[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xAB,0x6B,0xFC,0x7F,0x00,0x05,\n    0x39,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x97,0x00,0x04,0x9A,0x00,0x06,0x86,0x99,0x00,\n    0x00,0xD3,0x43,0x4D,0x32,0x1A,0x00,0x1A,0x68,0x00,0xD0,0xC8,0x01,0xA0,0xC2,0x0C,\n    0x40,0xC8,0x00,0x34,0x68,0x0D,0x0D,0x1A,0x1A,0x00,0xD0,0x01,0xA0,0x06,0x9A,0x34,\n    0x00,0x0D,0x32,0x00,0x01,0x88,0x0D,0x0C,0x40,0x68,0x34,0x6D,0xBF,0xD5,0x54,0xFF,\n    0xD5,0x51,0x08,0x09,0xA6,0x46,0x8C,0x99,0x06,0x40,0x64,0x34,0x18,0x46,0x4D,0x06,\n    0x43,0x00,0x21,0x90,0x34,0xC9,0xA6,0x10,0xD1,0x93,0x40,0x06,0x04,0xD1,0xA6,0x00,\n    0x04,0x61,0x34,0xD0,0x69,0xA0,0xD3,0x23,0x21,0xA0,0x61,0x00,0x32,0x68,0x32,0x62,\n    0x64,0xF4,0x83,0x04,0xF4,0xD3,0x48,0xD0,0x62,0x60,0x4C,0x9F,0xE7,0xA9,0x50,0xC8,\n    0x10,0x4C,0x01,0x30,0x01,0x18,0x00,0x09,0x81,0x30,0x00,0x00,0x00,0x4C,0x23,0x00,\n    0x4C,0x8C,0x00,0x00,0x00,0x04,0xC0,0x00,0x00,0x4C,0x9B,0x42,0x7A,0x8D,0x18,0x8C,\n    0x23,0x11,0xB5,0x33,0x24,0xF4,0xC9,0x9A,0x9A,0x4C,0x00,0x00,0x00,0x00,0x00,0x13,\n    0x26,0x85,0x3F,0xD5,0x2A,0x90,0x4C,0x4C,0x9A,0x60,0x04,0x68,0x64,0xC8,0x60,0x4D,\n    0x18,0x9A,0x06,0x8D,0x01,0xA1,0x88,0x06,0x46,0x01,0x34,0x19,0x1A,0x00,0xD0,0x00,\n    0x32,0x68,0xD0,0x1A,0x64,0xD1,0x82,0x64,0x68,0xC4,0x69,0x84,0x68,0x18,0x09,0x88,\n    0x68,0x64,0xC0,0x20,0xC4,0x32,0x68,0x00,0x1A,0x1A,0x0C,0x7A,0x53,0xD4,0xF0,0x0E,\n    0x0E,0x8F,0x0F,0x90,0x10,0x91,0x11,0x92,0x78,0x49,0x49,0x89,0xCA,0x0A,0x4A,0x8A,\n    0xCB,0x0B,0x4B,0x8B,0xFC,0x5E,0x33,0x03,0x13,0x23,0x33,0x43,0x53,0x63,0x73,0x83,\n    0x93,0xA3,0xB3,0xC3,0xD3,0xEF,0x21,0xFA,0x02,0x0A,0x12,0x1A,0x27,0x95,0x15,0x19,\n    0x1D,0x21,0x25,0x29,0x2D,0x31,0x35,0x39,0x3D,0x41,0x45,0x49,0x4D,0x51,0x55,0x59,\n    0x5D,0x61,0x65,0x69,0x6D,0x71,0x75,0x79,0x7D,0x81,0x87,0xCC,0xC4,0xC6,0xC8,0xCB,\n    0xE7,0xF4,0x33,0x33,0xB4,0x34,0xB5,0x35,0xB6,0x05,0xF4,0xB7,0xB8,0x7A,0xBD,0x61,\n    0x1C,0x9D,0x04,0xBC,0x3C,0xBD,0x3D,0xBE,0x3E,0xBF,0x3F,0xC0,0x40,0x88,0x84,0x85,\n    0x86,0x87,0x02,0x2A,0x2E,0x32,0x36,0x22,0x3F,0xD9,0x21,0x23,0x25,0x27,0x29,0x2B,\n    0x2D,0x2F,0x31,0x33,0x35,0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,0x47,0x49,0x4B,\n    0x4D,0xED,0xA7,0xA8,0xF7,0x54,0x82,0x05,0x57,0x59,0xEF,0x07,0xF0,0xAA,0xF8,0xFC,\n    0x81,0x8A,0xB0,0xFA,0x7D,0x6C,0x6C,0xAC,0xFF,0xDF,0x7B,0x5B,0x6F,0xC7,0xE6,0xE0,\n    0x20,0xCB,0xA0,0xA1,0xAE,0xC2,0x7E,0xC3,0xDE,0x08,0x0C,0x2F,0xF8,0x28,0x58,0x01,\n    0xC4,0x89,0x00,0x65,0xF8,0x07,0x3E,0x55,0x07,0x3E,0x7F,0x4F,0xAD,0x4D,0x55,0x5D,\n    0x65,0x6F,0xD8,0xED,0x71,0xEA,0xF3,0xF6,0x1F,0x7F,0xC5,0x8F,0xE7,0xF5,0xFB,0xFE,\n    0x59,0x59,0xDA,0x7F,0x6D,0x6D,0xAD,0xEE,0x2E,0x6E,0xBF,0xD7,0x77,0x9F,0xF2,0x14,\n    0x1A,0xF6,0xFA,0xFD,0x02,0x1C,0x09,0xBF,0xC8,0x00,0x01,0x41,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xF4,0xB0,0xC3,0x0C,0x30,0xCB,0xA1,0x7B,0xD5,0x9F,0x31,0x8C,0x63,0x18,0xC6,0x31,\n    0x90,0x98,0xC6,0x37,0x78,0x00,0x2B,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x78,0x00,0x00,0x3E,0x0E,0xD6,0x14,0xA5,0x29,0x4A,0x74,0x84,0x26,\n    0x01,0x4A,0x52,0xD9,0x90,0x84,0x22,0x02,0x94,0xA5,0x42,0x42,0x10,0x20,0xBC,0x42,\n    0x81,0x93,0x25,0x32,0x4C,0xCD,0xA4,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0xA8,0x50,0xA1,0x42,0x85,0x1D,0x1D,0x27,0x0F,0x87,\n    0xE7,0x24,0xA4,0x9C,0xA7,0x39,0xCE,0x73,0xA4,0xA6,0x11,0x29,0xCA,0x72,0x94,0xA5,\n    0x29,0x6E,0xA8,0x51,0xD1,0x4A,0x92,0x22,0x51,0x11,0x39,0xCA,0x73,0x9C,0xE2,0x08,\n    0x9C,0xE7,0x39,0xCE,0x71,0x11,0x10,0x44,0x43,0x61,0x10,0x00,0x00,0x28,0xA2,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x0F,0x8A,0x20,0x3F,0x88,0x8D,0x8C,0x40,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x4B,0x40,0x00,0x00,0x92,0x51,0x10,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,\n    0x25,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x49,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x25,0xFF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x55,0xB5,\n    0xFE,0x3F,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_91ed966e5541dbb4c5290b94f1fc0832bfcfb9e5a69ec20f4fb464d1623118c6) == 787, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.CP1131 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_20be345810249c9cd73f01119db93e094413517de34fa249d5b5644cfa3c2aea[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x1E,0xCB,0xE4,0x97,0x00,0x05,\n    0x4D,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xBA,0x00,0x80,0x34,0x15,0x55,0x50,0x09,0x80,0x4C,0x00,\n    0x09,0xBD,0x20,0xD4,0xC0,0xD0,0x02,0x64,0xC4,0x79,0x27,0xA9,0x80,0x13,0xD0,0x00,\n    0x00,0x00,0x6A,0x0D,0x19,0x3D,0x04,0xC9,0x80,0x8D,0x34,0xC0,0x00,0x68,0x02,0x60,\n    0x00,0x02,0x60,0x00,0x00,0x00,0x06,0x93,0x26,0x04,0x36,0x80,0x02,0x60,0xAA,0x9E,\n    0x44,0x7A,0x81,0xA9,0xEA,0x63,0x40,0x26,0x98,0x98,0x00,0x00,0x01,0x34,0xC1,0x18,\n    0x13,0x00,0x08,0xC0,0x02,0x30,0x01,0x30,0x4C,0x46,0x4C,0x4C,0x8D,0x0C,0x00,0x26,\n    0x4C,0x4C,0x00,0x00,0x01,0xA4,0xC0,0x9A,0x0D,0x18,0x00,0x04,0x62,0x61,0x34,0x30,\n    0x9A,0x31,0x31,0x30,0x24,0x8A,0x11,0x4C,0x0C,0xA1,0x3D,0x02,0x68,0xD0,0x61,0x30,\n    0x26,0x10,0xC4,0xC9,0x91,0x90,0xC8,0x60,0x4C,0x98,0x86,0x43,0x4D,0x03,0x43,0x00,\n    0x4C,0x9A,0x18,0x86,0x46,0x98,0x4D,0x32,0x64,0x60,0x98,0x09,0x84,0x18,0x98,0x86,\n    0x86,0x8D,0x34,0xD0,0x18,0x41,0x90,0xD3,0x00,0x8C,0x02,0x60,0x26,0x11,0x93,0xDE,\n    0xA4,0x49,0x80,0x02,0x60,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x50,0x76,0x4D,0xDA,0xF6,0x72,0x12,0x44,0x81,0xAA,0x8C,0xA4,0xD0,\n    0x86,0x98,0x26,0x49,0xA2,0x6C,0x9C,0x27,0x49,0x44,0x99,0x65,0x0C,0xA2,0x14,0x53,\n    0xA2,0x27,0x8A,0x31,0x47,0x4C,0x93,0x34,0xD1,0x35,0x4D,0x93,0x74,0xE1,0x2A,0xF8,\n    0x93,0x94,0x04,0x12,0x74,0x9D,0xA7,0x89,0xEA,0x0D,0xF1,0xA7,0xC9,0xFA,0x80,0xA0,\n    0xA0,0xD4,0x25,0x0D,0x08,0xA2,0x28,0xAA,0x32,0x8E,0xA4,0x29,0x2A,0x52,0x96,0xA6,\n    0x3E,0x45,0x35,0x4E,0x7C,0xAA,0x7A,0xA0,0xA8,0xBE,0x67,0xCE,0x85,0x43,0x21,0xAD,\n    0x50,0xA7,0xD0,0x8E,0xA1,0xDF,0x4A,0x1D,0x53,0x55,0x15,0x55,0x59,0x57,0x56,0x15,\n    0x95,0x69,0x5B,0x57,0x1F,0x52,0x21,0x5D,0x57,0x95,0xF5,0x81,0x61,0x58,0x96,0x35,\n    0x91,0x65,0x8A,0xB3,0xAD,0x0B,0x4A,0xD4,0xB5,0xA0,0x40,0xB6,0x2D,0xAB,0x72,0xDE,\n    0xB8,0x2E,0x2B,0x92,0xE6,0xBA,0x2E,0xAB,0xB2,0xEE,0xBC,0x22,0x5F,0x5B,0xEC,0x7D,\n    0xAF,0xB9,0x79,0x7D,0xEF,0xC1,0x7A,0x5E,0xDF,0x8A,0x29,0x02,0x05,0xF1,0x7D,0x5F,\n    0x97,0xF7,0xE5,0x17,0x81,0x7E,0x6C,0x13,0x06,0xC2,0x30,0xAC,0x33,0x0E,0xC4,0x3F,\n    0x47,0xEA,0xC4,0xBF,0x66,0x29,0xFB,0xB1,0x71,0x98,0xD6,0x39,0x8F,0x64,0x19,0x16,\n    0x49,0x93,0x65,0x19,0x56,0x59,0x97,0x66,0x19,0x94,0x5B,0x34,0x8D,0x82,0xCE,0x33,\n    0xAC,0xF3,0x3E,0xD0,0x34,0x2F,0xE1,0xA2,0x68,0xDA,0x46,0x95,0xA6,0x69,0xDA,0x86,\n    0xA5,0x03,0x55,0xAB,0x6B,0x1A,0xD6,0xB9,0xAF,0x6C,0x1B,0x16,0xC9,0xB3,0x6D,0x1F,\n    0xCB,0x6A,0xDB,0x36,0xED,0xC3,0x72,0xDD,0x37,0x6D,0xE3,0x7A,0xDF,0x37,0xEE,0x03,\n    0x82,0xE1,0x38,0x6E,0x23,0x8A,0xE3,0x38,0xEE,0x43,0x92,0xE5,0x39,0x6E,0x63,0x9A,\n    0xE7,0x39,0xEE,0x83,0xA2,0xE9,0x3A,0x6E,0xA3,0xAA,0xEB,0x23,0x1D,0x74,0x25,0x73,\n    0xFA,0x76,0x1D,0x97,0xF6,0xED,0x3B,0x6E,0xE3,0xBA,0xEF,0x3B,0xEF,0xF1,0xFE,0xBF,\n    0xE7,0x81,0x1A,0x89,0xF0,0xC4,0x78,0xA3,0xDF,0xE3,0xF2,0x9F,0x96,0xFC,0xC7,0xE6,\n    0xBF,0xFA,0xFF,0xF3,0xF3,0x87,0xE7,0x9F,0xF9,0x3E,0xA3,0xA0,0x37,0xA8,0x4A,0x7D,\n    0x85,0xBF,0x0F,0x2F,0x66,0xE0,0x90,0xE0,0xCE,0x26,0x60,0x48,0x6C,0xE3,0x80,0xED,\n    0x03,0x09,0x0C,0xE0,0xC8,0x05,0x14,0x44,0x3C,0xA6,0x1C,0x68,0x1C,0x12,0x40,0x1C,\n    0x96,0x04,0x25,0xCD,0x60,0x40,0x3B,0x00,0x47,0x0C,0x71,0xC7,0x1C,0x71,0xD0,0xA3,\n    0x8E,0x76,0x38,0xE2,0x8A,0x28,0xA2,0x8A,0x21,0x00,0x8D,0xFB,0x08,0x48,0x44,0xDC,\n    0xDC,0x88,0x10,0x72,0xD8,0x10,0xEC,0x99,0xB8,0xEC,0x3B,0x08,0x40,0x99,0x80,0x4C,\n    0xC0,0xCC,0x33,0x0C,0xC4,0xF4,0xF3,0x8E,0xEE,0xA5,0xC1,0x03,0xA0,0x80,0x82,0x07,\n    0x1D,0xDC,0x77,0x70,0x44,0x90,0x12,0x84,0x4E,0x92,0x90,0xB3,0x1A,0x3F,0xEB,0x2F,\n    0xA0,0x36,0x90,0xE9,0x65,0xBB,0xB6,0x92,0x64,0x4A,0x6D,0x86,0x12,0x11,0x34,0x39,\n    0xB2,0xDC,0x38,0x8D,0x1E,0x85,0xC5,0xFC,0xFE,0x12,0xE6,0x61,0x07,0x61,0x49,0xDC,\n    0x38,0x44,0xC1,0x2D,0x82,0x69,0x82,0x88,0xC5,0x31,0x86,0x94,0xE4,0x2C,0x1D,0x33,\n    0x14,0xA6,0x20,0xA6,0xB9,0xAE,0x61,0x04,0x86,0x35,0xD3,0xAE,0x42,0xC6,0xC8,0x64,\n    0x49,0x61,0x25,0xF0,0x6D,0xBF,0x29,0x52,0xBE,0x62,0x4D,0x1F,0x53,0x14,0xC1,0x0F,\n    0xD2,0xCE,0x3B,0xB9,0x04,0xAF,0x95,0xE0,0x24,0xFD,0x1A,0x7A,0x63,0xC5,0xF2,0x6C,\n    0xE8,0x65,0x1A,0x60,0x22,0x9C,0x1C,0x87,0x54,0xE4,0x92,0x62,0x18,0x05,0x14,0xE4,\n    0xAD,0xA4,0x21,0x08,0x35,0x20,0x78,0xA1,0x07,0x0E,0x10,0x03,0x07,0x06,0x03,0x6D,\n    0x50,0xC0,0x01,0x03,0x23,0x14,0x00,0xBA,0x24,0x80,0x14,0x01,0x07,0x96,0x86,0x44,\n    0x2C,0x08,0xA3,0x0E,0x31,0x03,0x08,0x58,0x06,0x84,0x00,0x0C,0x08,0xA2,0xB0,0x01,\n    0x51,0x01,0x2A,0xA8,0x9C,0x12,0x12,0xE8,0x0B,0xB9,0x22,0x9C,0x28,0x48,0x0F,0x65,\n    0xF2,0x4B,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_20be345810249c9cd73f01119db93e094413517de34fa249d5b5644cfa3c2aea) == 899, \"Wrong size of locale's blob\");\n\n/* be_BY.CP1131 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_115f88e876207067e1abb1cca5616254c96bfa80638c76470b1af7411dd06ddf[] = {\n    0x5E,0x5B,0xE2,0x92,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xAD,0x8D,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE2,0xA0,0xAA,0x0A,0xAD,0xA5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_115f88e876207067e1abb1cca5616254c96bfa80638c76470b1af7411dd06ddf) == 27, \"Wrong size of locale's blob\");\n\n/* be_BY.CP1131 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_cac1e34dfdc6569c8897ea6bc7cacaccdab7c22f850766e6e1d57d3c4e2ee8f8[] = {\n    0x42,0x59,0x52,0x20,0x0A,0xE0,0xE3,0xA1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cac1e34dfdc6569c8897ea6bc7cacaccdab7c22f850766e6e1d57d3c4e2ee8f8) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.CP1131 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_468c22abad44e99854a1dc74bb8838c90006a5a13bec83069d89d04b7a025b18[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF3,0xE6,0x4B,0xB0,0x00,0x00,\n    0xA1,0x5F,0x91,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x7F,0x9B,0xF9,0x8F,0x80,0xA0,0x30,0x01,0x15,0x82,0x1A,0xA7,0xA4,0x00,0xD0,\n    0x00,0x00,0x66,0xA0,0x00,0xA9,0xB4,0xD3,0x50,0x68,0x06,0x80,0x00,0xD0,0xD0,0x01,\n    0x29,0xA1,0x13,0x4D,0x53,0x34,0x8F,0x53,0x27,0xA8,0x00,0xD1,0xE9,0x1A,0x68,0x5C,\n    0xCB,0x3A,0xA2,0xE5,0x0E,0xE1,0xF0,0xFA,0xC0,0x0D,0x80,0x12,0x65,0x35,0x02,0x93,\n    0x87,0x04,0x48,0x7C,0xE7,0x31,0x37,0xB4,0x89,0x3B,0xA8,0x8E,0x57,0x30,0x43,0xA4,\n    0x1B,0x24,0xA7,0x85,0x41,0xD4,0x7F,0x4A,0xAA,0xF5,0x41,0x18,0x58,0xBF,0x11,0xA0,\n    0x13,0xB0,0x10,0x08,0x11,0x0D,0x08,0x8F,0x35,0x2C,0xC1,0xB0,0xD6,0x4C,0x91,0x5F,\n    0x4D,0x90,0x4A,0xED,0xF2,0x35,0xD3,0x4E,0xE9,0x87,0x1F,0xD9,0x2A,0xF1,0x27,0xF2,\n    0x5D,0x1F,0x73,0x42,0xB4,0x04,0x7E,0xEC,0x85,0x86,0xBC,0xA7,0xE5,0x53,0x6A,0x20,\n    0x6F,0x84,0x71,0x30,0x21,0xB9,0x9C,0xF2,0xEA,0x88,0x21,0xDD,0xA1,0x1C,0x8C,0x5B,\n    0x30,0xB9,0xB4,0x48,0x11,0x03,0x4A,0x64,0x86,0xB2,0xC1,0xA6,0x46,0xFA,0x50,0x8C,\n    0xE2,0x69,0x07,0x59,0x9B,0xAD,0x6F,0x52,0xAE,0x26,0xB7,0x45,0x7D,0xF6,0x23,0xA4,\n    0x0E,0x45,0x04,0x5A,0xC8,0xB0,0x24,0x09,0x38,0xE3,0x87,0xF6,0x58,0xBD,0xCD,0xFB,\n    0xAA,0xD0,0xC4,0xE2,0xE8,0xDD,0x7B,0xD7,0xA0,0x82,0x9A,0x1C,0x19,0xB0,0x6E,0xF6,\n    0x71,0x92,0x6C,0xAD,0x8A,0x20,0xE0,0x90,0x95,0x06,0x73,0xF1,0x77,0x24,0x53,0x85,\n    0x09,0x0F,0x3E,0x64,0xBB,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_468c22abad44e99854a1dc74bb8838c90006a5a13bec83069d89d04b7a025b18) == 278, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.CP1251 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_3365f7493bb9d3fb943387168fa5714c2496b98c23793eb73e737f795e794a5a[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x26,0xE9,0xCE,0x81,0x00,0x05,\n    0x39,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x8E,0x00,0x09,0x34,0x34,0xD3,0x4C,0x4C,0x8C,\n    0x98,0x9A,0x0D,0x0D,0x32,0x61,0x19,0x03,0x40,0xC8,0x68,0x0C,0x86,0x21,0x89,0x91,\n    0x93,0x46,0x40,0x06,0x46,0x13,0x46,0x9A,0x01,0x93,0x26,0x26,0x4D,0x34,0x69,0x84,\n    0xD3,0x20,0xC8,0xD3,0x26,0x8D,0x32,0x62,0x69,0xA0,0x1A,0x18,0x99,0x30,0x99,0x32,\n    0x68,0x1A,0x64,0xC0,0x8C,0x11,0x82,0x3F,0x7F,0xAA,0xAA,0x01,0x20,0x01,0xA0,0x1A,\n    0x68,0xC9,0x90,0x1A,0x34,0x69,0x91,0xA6,0x08,0xC4,0x00,0x0D,0x03,0x46,0x99,0x18,\n    0x80,0xD1,0xA3,0x20,0xD0,0x0D,0x00,0x00,0x03,0x20,0x34,0x1A,0x0C,0x81,0xA6,0x40,\n    0xD0,0x01,0xA0,0x1A,0x64,0x69,0x90,0x00,0x34,0x68,0x34,0x34,0x31,0x00,0xD3,0x7E,\n    0xF2,0x54,0xD2,0x32,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x98,0x09,0x82,0x9F,0xEA,0x95,0x49,0xA2,0x34,0x64,0x69,\n    0xA1,0xA6,0x20,0x0C,0x99,0x32,0x61,0x0C,0x4D,0x06,0x8D,0x06,0x43,0x4C,0x8D,0x32,\n    0x30,0x00,0x4C,0x83,0x10,0x06,0x81,0xA1,0xA3,0x40,0xD0,0x32,0x68,0xC2,0x69,0xA1,\n    0xA3,0x01,0x34,0x68,0xD0,0xC4,0xC0,0x26,0x40,0xD3,0x21,0x90,0xD1,0x88,0xC8,0xC4,\n    0x68,0x0D,0x19,0x34,0x01,0x9E,0xA9,0xE8,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,\n    0x14,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,0x32,\n    0x34,0x36,0x38,0x3A,0x3C,0x3E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x52,\n    0x54,0x56,0x58,0x5A,0x5C,0x5E,0x60,0x62,0x64,0x66,0x68,0x6A,0x6C,0x6E,0x70,0x72,\n    0x74,0x76,0x78,0x7A,0x7C,0x7F,0xFC,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,\n    0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,\n    0x59,0x5A,0xF6,0x5D,0x5E,0x5F,0x60,0x61,0xE4,0x63,0x65,0xED,0xF7,0x6A,0x6B,0x6C,\n    0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0xE2,0x76,0x77,0x78,0x79,0xFF,0xBE,0x3E,0xBF,\n    0x3F,0xBD,0x40,0xC1,0x41,0xFF,0x61,0x21,0x61,0xA1,0xE2,0x22,0x62,0xA2,0xE3,0x23,\n    0x63,0xA3,0xE4,0x24,0x64,0xA4,0xE5,0x25,0x65,0xA5,0xE6,0x26,0x66,0xA6,0xE7,0x27,\n    0x67,0xA7,0xA8,0x28,0x68,0xA8,0xE9,0x3C,0xE9,0xAA,0x29,0x3E,0x6B,0x2B,0x6B,0xAB,\n    0xEC,0x2C,0x6C,0xAC,0xED,0x2D,0x6D,0xEE,0x2E,0x6E,0xBE,0xEF,0x6F,0xAF,0xF0,0x2E,\n    0xF0,0xB0,0xF1,0x31,0x71,0xB1,0xF2,0x32,0x72,0xB2,0xF3,0x33,0x73,0xB3,0xF4,0x34,\n    0x7C,0xDE,0x7F,0x44,0xC7,0xA7,0xD5,0x33,0xEB,0xF6,0x7B,0x7D,0xD3,0x5E,0xFF,0x87,\n    0xC6,0x6F,0xE5,0xF3,0xFA,0x4E,0x4E,0xCF,0x7D,0x7E,0xDF,0x79,0xBF,0xC7,0xE7,0xF5,\n    0xFB,0x9F,0xFE,0x50,0x2A,0x7C,0x14,0xA0,0x5C,0xB2,0xFA,0x1A,0x26,0x08,0xBD,0x7D,\n    0x13,0x1F,0xEF,0xDC,0x00,0x00,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xA0,0x82,0x08,0x21,\n    0xF9,0x78,0x5B,0x1D,0xD3,0x44,0x44,0x44,0x44,0x44,0x60,0x88,0x89,0x9B,0x24,0x99,\n    0x82,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0xCC,0x92,0x49,0x1C,\n    0x51,0x1D,0xC9,0x52,0x94,0xA5,0x29,0x4A,0x52,0x98,0x80,0x07,0x3D,0x4A,0x52,0xBF,\n    0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x92,\n    0x4B,0x04,0x44,0x44,0x44,0x46,0x0B,0x97,0x2E,0xA1,0x59,0x65,0x96,0x59,0x66,0x34,\n    0x37,0x5B,0x9D,0xCD,0x0A,0x14,0x29,0x39,0xCF,0x1A,0xD8,0x52,0x4E,0x53,0x9C,0xE7,\n    0x39,0xD1,0xD2,0x11,0x29,0xCA,0x72,0x94,0xA5,0x29,0x7F,0xDB,0xAA,0x14,0x52,0xA4,\n    0x88,0x94,0x44,0x4E,0x72,0x9C,0xE7,0x38,0x82,0x27,0x39,0xCE,0x73,0x9C,0x44,0x44,\n    0x11,0x10,0xD5,0xC4,0x00,0x00,0x0A,0x28,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0xE6,\n    0x88,0x0D,0xC4,0x46,0xBA,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x02,0x49,0x51,0xC4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x89,0x44,0x00,0x00,0x92,0x40,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,\n    0xBB,0x17,0x72,0x45,0x38,0x50,0x90,0x26,0xE9,0xCE,0x81\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3365f7493bb9d3fb943387168fa5714c2496b98c23793eb73e737f795e794a5a) == 779, \"Wrong size of locale's blob\");\n\n/* be_BY.CP1251 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_eb3a423ecc2cc7c7893ee48d239842d61597634ce2a2f8e5784be4d44747ac7f[] = {\n    0x5E,0x5B,0xF2,0xD2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xED,0xCD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xF2,0xE0,0xEA,0x0A,0xED,0xE5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eb3a423ecc2cc7c7893ee48d239842d61597634ce2a2f8e5784be4d44747ac7f) == 27, \"Wrong size of locale's blob\");\n\n/* be_BY.CP1251 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b2e1949aa0823f3515284a27bafcc6754b41966db0ebbce38a234f9a80524f55[] = {\n    0x42,0x59,0x52,0x20,0x0A,0xF0,0xF3,0xE1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b2e1949aa0823f3515284a27bafcc6754b41966db0ebbce38a234f9a80524f55) == 37, \"Wrong size of locale's blob\");\n\n/* be_BY.CP1251 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_eb031fdf489e8b1c7565475b064767a7252f7d48a1f7405e290f0d898d2dddb2[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eb031fdf489e8b1c7565475b064767a7252f7d48a1f7405e290f0d898d2dddb2) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.CP1251 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_159b5768e14e294358f661602773514fc0d18fc9cc2a3e66a1f9d8d5cce0a89d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x01,0x52,0x7B,0xE0,0x00,0x00,\n    0xAB,0x5F,0x99,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x10,0x00,0x08,0x00,0x7F,0x9B,0xF9,0x8F,0xB0,0x00,0xF5,0x80,0x6A,0x6A,0x00,\n    0x00,0x00,0x06,0x99,0xA8,0x00,0x31,0xE9,0x3F,0x4A,0x68,0x68,0x00,0x00,0xD0,0x00,\n    0x01,0x29,0xA2,0x04,0xD4,0x62,0x99,0x34,0x34,0x32,0x0D,0x30,0x87,0xA8,0xA2,0x49,\n    0x89,0x50,0x76,0xD2,0x57,0x50,0xFB,0x52,0x46,0xC4,0x83,0x61,0x40,0x0D,0xCC,0xF9,\n    0x06,0x4E,0x91,0x30,0x9E,0x7C,0x48,0x71,0xDD,0x00,0x5D,0xBA,0x84,0x3A,0x4D,0x94,\n    0x51,0x72,0xB8,0x3B,0x90,0xE6,0x55,0x9A,0xB0,0x46,0x16,0x30,0xC8,0x24,0x0A,0x10,\n    0x18,0x04,0x08,0x82,0x48,0x8F,0x45,0x2C,0xC1,0xA0,0x6B,0x26,0x48,0xA7,0x1D,0x70,\n    0x49,0x7A,0x72,0x47,0x9B,0x73,0x48,0x4B,0xEC,0x67,0xDF,0xEC,0x75,0xE1,0xC3,0xD6,\n    0x50,0xFA,0xD2,0x8E,0x49,0x45,0x7A,0x0F,0x79,0x3A,0x3B,0x4A,0x65,0x26,0x08,0xFD,\n    0xA7,0x6C,0xC3,0xBA,0x8E,0xB5,0x62,0x88,0x33,0x47,0xD1,0x52,0x1B,0xF0,0xDB,0x96,\n    0xA7,0x85,0x09,0xD1,0x08,0xEB,0x83,0x2D,0xA1,0x73,0x11,0x20,0x44,0x81,0xA4,0x99,\n    0x5B,0x63,0x66,0x6C,0x9D,0xDA,0xB5,0x1B,0x9A,0x84,0x56,0x25,0x3A,0x74,0xBC,0x89,\n    0x38,0x9A,0xBA,0x2C,0x37,0x59,0xA3,0x48,0x1C,0x99,0x22,0xD6,0x45,0x81,0x20,0x49,\n    0xC7,0x1C,0x3F,0xB2,0xC1,0xEE,0x6E,0xC6,0x8D,0x0C,0x4B,0x07,0x46,0x77,0xBD,0x34,\n    0x10,0x4F,0xC8,0xF0,0x66,0xAB,0x6F,0x67,0x19,0x26,0xCB,0xFC,0x5D,0xC9,0x14,0xE1,\n    0x42,0x40,0x05,0x49,0xEF,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_159b5768e14e294358f661602773514fc0d18fc9cc2a3e66a1f9d8d5cce0a89d) == 278, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.ISO8859-5 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_d6f383ec4e1d7325063f66e746ee508283dd8ee1cfd9c67180ad4a80bb8f8767[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x77,0x2B,0x38,0xA1,0x00,0x05,\n    0x39,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x97,0x00,0x04,0x83,0x46,0x8C,0x86,0x40,0x34,\n    0x1A,0x0D,0x34,0x69,0xA0,0x69,0x90,0x06,0x80,0x18,0x99,0x03,0x43,0x40,0x0C,0x46,\n    0x10,0x00,0x03,0x23,0x20,0x1A,0x32,0x34,0x60,0x46,0x86,0x11,0xA1,0xA3,0x40,0x01,\n    0x93,0x40,0x68,0x0D,0x0D,0x03,0x26,0x80,0xD0,0x30,0x02,0x19,0x32,0x3D,0x43,0x7B,\n    0xFD,0x55,0x4F,0xF5,0x29,0x08,0x20,0x1A,0x19,0x34,0x68,0x06,0x83,0x26,0x9A,0x68,\n    0x68,0x32,0x64,0xC4,0x1A,0x69,0x90,0x68,0x64,0x64,0xD0,0xC4,0x64,0x1A,0x69,0x84,\n    0x62,0x61,0x0D,0x06,0x98,0x4C,0x20,0x06,0x10,0xC2,0x06,0x04,0x64,0x06,0x26,0x04,\n    0x1A,0x01,0x93,0x23,0x00,0x27,0x94,0xFD,0x53,0x69,0xA9,0x89,0x93,0x4C,0x26,0xD4,\n    0xFF,0x2A,0x9E,0xFF,0x52,0xA9,0x86,0x93,0x44,0x00,0x00,0x13,0x00,0x00,0x04,0x60,\n    0x00,0x00,0x00,0x00,0x26,0x98,0x23,0x00,0x00,0x00,0x00,0x23,0x04,0xC0,0x01,0x31,\n    0x30,0x06,0x80,0x00,0x00,0x04,0x6D,0x00,0xD0,0x01,0xA0,0xC8,0x26,0x00,0x00,0x00,\n    0x4C,0x00,0x53,0xFD,0x52,0xAA,0x4D,0x34,0xD1,0x82,0x69,0xA6,0x26,0x26,0x8C,0x9A,\n    0x69,0xA6,0x09,0xA0,0x34,0xC4,0xC9,0xA1,0xA6,0x46,0x80,0xC8,0xC2,0x61,0x00,0xD0,\n    0x01,0x93,0x46,0x01,0x34,0x61,0x1A,0x68,0xC4,0x1A,0x00,0xD0,0xC4,0x32,0x30,0x09,\n    0x93,0x4D,0x19,0x31,0x1A,0x03,0x10,0x00,0x1A,0x32,0x32,0x0D,0x0C,0x4D,0x0C,0x13,\n    0x7A,0x53,0xD0,0x38,0x3C,0x40,0x44,0x48,0x4C,0x50,0x54,0x58,0x5C,0x60,0x64,0x68,\n    0x6C,0x70,0x77,0xE0,0x3C,0x3E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50,0x52,\n    0x54,0x56,0x58,0x5A,0x5C,0x5E,0x60,0x62,0x65,0xF1,0xF9,0x19,0x9A,0x1A,0x9B,0x1B,\n    0x9C,0x1C,0x9D,0x1D,0x9E,0x1E,0x9F,0x1F,0xA0,0x20,0xA1,0x21,0xA2,0x22,0xA3,0x23,\n    0xA4,0x24,0xA5,0x25,0xA6,0x26,0xA7,0x27,0xA8,0x28,0xA9,0x29,0xAA,0x2A,0xAB,0x2B,\n    0xAC,0x2C,0xFC,0xD6,0xBE,0x8B,0x6B,0x8B,0xAB,0xCB,0xFF,0x5F,0xB3,0x00,0x26,0x36,\n    0x46,0x56,0x66,0x7C,0x96,0x96,0xB0,0x9A,0x4E,0x0E,0x2E,0x4E,0x6E,0x8E,0xAE,0xCE,\n    0xEF,0x0F,0x39,0xCF,0x8F,0xAF,0xCF,0xFA,0xBF,0x7F,0xC4,0x14,0x1C,0x04,0x2C,0x37,\n    0xE6,0x1E,0x22,0x26,0x2A,0x2E,0x32,0x36,0x3A,0x3E,0x42,0x46,0x4A,0x4F,0xF5,0x29,\n    0x2B,0x2D,0xFB,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0x00,0x02,0x86,0x8A,\n    0x8E,0x92,0x94,0x25,0x3D,0x4E,0x96,0xA5,0x75,0x7D,0x85,0x8D,0x95,0x9D,0xA5,0xAD,\n    0xB5,0xB8,0x4B,0xAF,0xE7,0xF6,0xEF,0x5A,0xF6,0xFA,0xFF,0x00,0x0E,0x10,0x2C,0x3C,\n    0x40,0x38,0xC0,0xC2,0xE5,0xE6,0x83,0xC5,0xD4,0xCF,0x0A,0x7B,0xFD,0x5A,0x71,0xF3,\n    0xAA,0x0F,0x9D,0x5C,0x82,0xB8,0xE3,0xC7,0x1D,0x5A,0x87,0xEC,0x86,0xBE,0xC2,0xC7,\n    0xEF,0x65,0x67,0xF8,0xB4,0xFC,0xDA,0xDB,0x5B,0xDC,0x7E,0xAE,0x51,0x7E,0xC8,0x5F,\n    0xE2,0x30,0x6F,0xED,0xD5,0xDD,0xE5,0xEA,0x4B,0xEA,0x8A,0x50,0x00,0x02,0xB4,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x01,0xF0,0x51,0x45,0x14,0x52,0x9A,0x2A,0xEB,0x9D,0x0C,0x63,0x18,0xC6,\n    0x31,0x8C,0x63,0x24,0x31,0x8C,0x68,0xB0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x11,0xD5,0xA3,0xA0,0xF8,0x14,0xA5,0x29,\n    0x4A,0x52,0x94,0xB7,0xC5,0x29,0x4B,0xF3,0x21,0x08,0x44,0x24,0x21,0x08,0x80,0x96,\n    0x76,0x48,0xAE,0x6D,0x11,0x24,0xFC,0xD2,0x7E,0x28,0xA9,0x2A,0x15,0x59,0xFC,0xA5,\n    0xA7,0x58,0x2C,0xFE,0xAB,0x4F,0x4C,0xAA,0x02,0xAA,0xA2,0x22,0x22,0x22,0x22,0x22,\n    0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x50,0xA1,0x42,0x85,0x0A,0x2A,0x2A,0x3E,0x3B,\n    0xBF,0xB8,0x94,0x73,0x94,0xE7,0x39,0xCE,0x74,0x99,0x51,0xCA,0x25,0x39,0x4E,0x52,\n    0x94,0xA5,0x2F,0xFA,0x85,0x15,0x22,0x54,0x71,0x12,0x88,0x89,0xCE,0x53,0x9C,0xE7,\n    0x10,0x44,0xE7,0x39,0xCE,0x73,0x88,0x88,0x82,0x22,0x1F,0x3C,0x40,0x00,0x00,0xA4,\n    0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x44,0x40,0x7F,0x71,0x1F,0x64,0x40,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x92,0xA4,\n    0xC4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x24,0x94,0x44,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x09,0x44,0x40,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2D,0xE0,0xBB,0x92,0x29,0xC2,0x84,\n    0x83,0xB9,0x59,0xC5,0x08\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d6f383ec4e1d7325063f66e746ee508283dd8ee1cfd9c67180ad4a80bb8f8767) == 805, \"Wrong size of locale's blob\");\n\n/* be_BY.ISO8859-5 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_0c4d5c9808f5b43e43ce27f3bc46c388012e8fb46a76d210f1fdef98061920cb[] = {\n    0x5E,0x5B,0xE2,0xC2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xDD,0xBD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE2,0xD0,0xDA,0x0A,0xDD,0xD5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0c4d5c9808f5b43e43ce27f3bc46c388012e8fb46a76d210f1fdef98061920cb) == 27, \"Wrong size of locale's blob\");\n\n/* be_BY.ISO8859-5 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f54039248098acd0614b50b48a477da224b7f3670c70c9bc9a0ac0758bc90e0f[] = {\n    0x42,0x59,0x52,0x20,0x0A,0xE0,0xE3,0xD1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f54039248098acd0614b50b48a477da224b7f3670c70c9bc9a0ac0758bc90e0f) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.ISO8859-5 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_cb3ae5dca75b7c9ae157001748bc6d822c4858fd609bdb53cf88e4f67ced6fea[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x83,0x63,0x50,0x47,0x00,0x00,\n    0xA1,0x5F,0x83,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x7F,0x9B,0xF9,0x8F,0x81,0x01,0x30,0x01,0x15,0x82,0x1A,0xA7,0xA4,0x00,0xD0,\n    0x00,0x00,0x66,0xA0,0x00,0xA9,0xB4,0xD0,0x86,0x80,0x68,0x00,0x0D,0x0D,0x06,0x81,\n    0x29,0xA1,0x13,0x4D,0x53,0x34,0x8F,0x53,0x27,0xA8,0x00,0xD1,0xE9,0x1A,0x68,0x5C,\n    0xEB,0x2A,0xA3,0xE8,0xC9,0xC5,0xC2,0xE6,0x00,0x6E,0x00,0x72,0x29,0xA6,0x13,0x94,\n    0x39,0x42,0x0D,0x01,0x4A,0x44,0x37,0xC3,0x8A,0x13,0xB0,0x8E,0x77,0xB0,0x43,0xA4,\n    0x1B,0x24,0xA7,0x85,0x41,0xD4,0x7F,0x4A,0xAA,0xF5,0x41,0x18,0x58,0xBF,0x11,0xA0,\n    0x13,0xB0,0x10,0x08,0x11,0x0D,0x08,0x8F,0x35,0x2C,0xC1,0xB0,0xD6,0x4C,0x91,0x5F,\n    0x4D,0x90,0x4A,0xED,0xF2,0x35,0xD3,0x4E,0xE9,0x87,0x1F,0xD9,0x2A,0xF1,0x27,0xF2,\n    0x5D,0x1F,0x73,0x42,0xB4,0x04,0x7E,0xEC,0x85,0x86,0xBC,0xA7,0xE5,0x53,0x6A,0x20,\n    0x6F,0x84,0x71,0x30,0x21,0xB9,0x9C,0xF2,0xEA,0x88,0x21,0xDD,0xA1,0x1C,0x8C,0x5B,\n    0x30,0xB9,0xB4,0x48,0x11,0x03,0x4A,0x64,0x86,0xB2,0xC1,0xA6,0x46,0xFA,0x50,0x8C,\n    0xE2,0x69,0x07,0x59,0x9B,0xAD,0x6F,0x52,0xAE,0x26,0xB7,0x45,0x7D,0xF6,0x23,0xA4,\n    0x0E,0x45,0x04,0x5A,0xC8,0xB0,0x24,0x09,0x38,0xE3,0x87,0xF6,0x58,0xBD,0xCD,0xFB,\n    0xAA,0xD0,0xC4,0xE2,0xE8,0xDD,0x7B,0xD7,0xA0,0x82,0x9A,0x1C,0x19,0xB0,0x6E,0xF6,\n    0x71,0x92,0x6C,0x91,0xC1,0x21,0x28,0x19,0xCC,0x6E,0x8F,0xC5,0xDC,0x91,0x4E,0x14,\n    0x24,0x20,0xD8,0xD4,0x11,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cb3ae5dca75b7c9ae157001748bc6d822c4858fd609bdb53cf88e4f67ced6fea) == 278, \"Wrong size of locale's blob\");\n\n/* be_BY.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_d0e72dfb43490f8187fc6cd4f3dc28dbf3dde32840fcd3a390150c1291304668[] = {\n    0x5E,0x5B,0xD1,0x82,0xD0,0xA2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xBD,\n    0xD0,0x9D,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD1,0x82,0xD0,0xB0,0xD0,0xBA,0x0A,0xD0,\n    0xBD,0xD0,0xB5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d0e72dfb43490f8187fc6cd4f3dc28dbf3dde32840fcd3a390150c1291304668) == 36, \"Wrong size of locale's blob\");\n\n/* be_BY.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_52efdde10ea62a67946e4e4d44be3ff44883b355af157ef14cd7c245a4a6d37b[] = {\n    0x42,0x59,0x52,0x20,0x0A,0xD1,0x80,0xD1,0x83,0xD0,0xB1,0x2E,0x0A,0x2C,0x0A,0x20,\n    0x0A,0x33,0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,\n    0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_52efdde10ea62a67946e4e4d44be3ff44883b355af157ef14cd7c245a4a6d37b) == 40, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed be_BY.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_22162ef6b8b722f6bec0452a7109590c8fd403a97d0ccf30c096dbe7b3a86e52[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x9F,0x6C,0xC3,0xB3,0x00,0x01,\n    0x2A,0xDF,0xEA,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x79,0x8F,0x81,0x01,0x7F,0x9B,0xE0,0x00,0x30,0x01,0x15,0x80,0x35,0x4F,0x48,\n    0x01,0xA0,0x00,0x00,0x64,0x68,0x00,0x54,0xDA,0x68,0x83,0x40,0x00,0x32,0x1A,0x00,\n    0x00,0x24,0x44,0x9A,0x0A,0x36,0x91,0xA6,0xD4,0x64,0x34,0x06,0x8C,0x86,0xCA,0x32,\n    0x49,0x8A,0x98,0x14,0x66,0xF8,0x60,0xB3,0xC0,0x0B,0x00,0x0E,0x44,0xAC,0xC2,0x72,\n    0x82,0x90,0x83,0x3A,0x52,0x91,0x0B,0xC0,0xE2,0x86,0xF6,0x11,0xBE,0xDD,0xC4,0x36,\n    0x41,0x92,0x39,0xFB,0x53,0xC8,0x85,0x51,0xE9,0x4E,0x66,0x24,0x84,0x0B,0x6F,0x19,\n    0x01,0x2A,0xC0,0xC0,0x81,0x10,0xC8,0x89,0x38,0xE8,0x84,0x84,0xA1,0x5C,0xD3,0x65,\n    0x78,0x75,0xC9,0x47,0xA2,0x48,0x4B,0x40,0x49,0x06,0x5C,0x0F,0xDD,0xFB,0xF7,0x52,\n    0x60,0x8F,0x76,0xEB,0xC4,0xA6,0x74,0x86,0x74,0xA5,0x85,0x6C,0x06,0x7E,0x63,0x2E,\n    0xDE,0x5C,0xE9,0xF4,0xEC,0xD4,0xC9,0x17,0xCB,0x38,0x96,0x92,0xB3,0x33,0xC7,0xAA,\n    0x64,0x98,0x85,0x2C,0xE6,0x5E,0xB6,0x06,0x06,0xA1,0xB0,0x64,0x8A,0x8D,0x36,0x2B,\n    0x9D,0xAA,0x94,0x17,0xDB,0x96,0x6C,0x9A,0x59,0x27,0x61,0xB2,0x1F,0x2C,0x2A,0x56,\n    0x06,0xAE,0xE8,0xF0,0xDB,0x71,0x3A,0x49,0x04,0xD8,0x32,0xEB,0x99,0x70,0x36,0x0D,\n    0xC1,0x04,0x06,0x98,0xDF,0x18,0x1B,0x75,0xD5,0x4A,0x29,0x7C,0x33,0x5E,0x18,0x57,\n    0x31,0x85,0x9E,0x06,0x49,0x5A,0xB7,0x28,0x13,0x6B,0x16,0x64,0xD8,0xDC,0x8A,0x0B,\n    0xF0,0x67,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x84,0xFB,0x66,0x1D,0x98\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_22162ef6b8b722f6bec0452a7109590c8fd403a97d0ccf30c096dbe7b3a86e52) == 285, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed bg_BG.CP1251 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_0ea069f11ccdc0402d635d6bf709cac00d7f4f0fa2e52310605aadc952ba029d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF5,0x3A,0xD4,0x98,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x46,0x5C,0x00,0x12,0x00,0xD0,0x03,0x40,0x00,0x03,\n    0x43,0x41,0x90,0x00,0xD0,0x00,0x03,0x40,0xD3,0x46,0x23,0x13,0x4C,0x8C,0x20,0xC2,\n    0x03,0x40,0x00,0x00,0x0C,0x80,0xD0,0x0C,0x80,0x0D,0x1A,0x64,0xD0,0x00,0x00,0xC2,\n    0x06,0x9A,0x19,0x31,0x01,0xFA,0xA6,0x23,0xDA,0x7E,0xA5,0x3F,0xD4,0xD2,0x1B,0xF5,\n    0x52,0x9A,0x24,0x34,0x34,0xD0,0xD3,0x13,0x23,0x4D,0x0D,0x32,0x69,0xA6,0x10,0x32,\n    0x1A,0x00,0x1A,0x34,0xC8,0xC4,0xC9,0xA6,0x10,0x64,0x60,0x99,0x18,0x41,0x90,0xC4,\n    0xD0,0x34,0xD0,0x1A,0x0D,0x34,0xC8,0x61,0x30,0x46,0x23,0x4C,0x23,0x4C,0x98,0x9A,\n    0x64,0x0C,0x00,0x4C,0x1A,0x11,0xA6,0x8D,0x1A,0x18,0x9A,0x32,0x64,0xFF,0xFD,0x55,\n    0x44,0x03,0x43,0x44,0x04,0xC0,0x98,0x13,0x09,0x80,0x02,0x60,0x00,0x6A,0x60,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xA0,\n    0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x3F,0xF5,0x52,0xA9,0x31,0x18,\n    0x09,0x91,0x82,0x34,0xC0,0x9A,0x61,0x34,0x60,0x10,0xD3,0x4D,0x18,0x9A,0x62,0x32,\n    0x30,0x11,0x88,0x30,0x00,0x01,0x30,0x4C,0x04,0xD3,0x23,0x4C,0x01,0x0C,0x4C,0x04,\n    0xC4,0x60,0x8C,0x01,0x18,0x4D,0x0C,0x9A,0x18,0x13,0x09,0xA3,0x23,0x01,0x30,0x13,\n    0x43,0x4D,0x30,0x69,0xB5,0x34,0xFA,0x07,0xFC,0x04,0x04,0x85,0x05,0x86,0x06,0xFE,\n    0x43,0x83,0xC4,0x04,0x44,0x84,0xFF,0x42,0x82,0xA2,0xC2,0xFF,0xB1,0x81,0x91,0xA1,\n    0xB1,0xC1,0xD1,0xE1,0xF2,0x02,0x1E,0xC2,0x3F,0xE1,0x28,0x02,0x8F,0x2F,0x82,0xAD,\n    0x8F,0x13,0x00,0x1F,0xD3,0x3E,0xB3,0x63,0x63,0x73,0x83,0x9D,0x43,0xBC,0xF3,0xE4,\n    0x04,0x14,0x24,0x34,0x44,0x54,0x64,0x74,0x84,0x94,0xA4,0xB4,0xC4,0xD4,0xE4,0xF5,\n    0x05,0x1D,0x1D,0x5F,0x35,0x45,0x55,0xA5,0xB5,0xC5,0xD5,0xE5,0xF6,0x06,0x16,0x26,\n    0x36,0x46,0x56,0x66,0x7F,0xF3,0x43,0x4B,0x53,0x5B,0x63,0x6B,0x73,0x7B,0x83,0x8B,\n    0x93,0xA3,0xAB,0xB3,0xBB,0xC3,0xCB,0xD3,0xDB,0xE3,0xEB,0xF3,0xFC,0x04,0x0C,0x14,\n    0x1C,0x24,0x2C,0x34,0x3C,0x44,0x4C,0x54,0x5C,0x64,0x6C,0x74,0x7C,0x84,0x8C,0x94,\n    0x94,0xA4,0xAC,0xB4,0xBC,0xC4,0xCC,0xD4,0xDC,0xE4,0xEC,0xF4,0xFD,0x05,0x0D,0x15,\n    0x1D,0x25,0x2D,0x35,0x3D,0x45,0x4D,0x55,0x5D,0x65,0x6D,0x75,0x7D,0x85,0x88,0x10,\n    0x36,0x76,0x96,0xB6,0xD6,0xF7,0x17,0x37,0x57,0x77,0x97,0xB7,0xD7,0xF8,0x1F,0xFC,\n    0x1C,0x2C,0x3C,0x4C,0x5C,0x6C,0x7C,0x8C,0x9C,0xAC,0xBC,0xCC,0xDC,0xEC,0xF9,0x69,\n    0x69,0x39,0x76,0x5F,0x2F,0x9C,0xBB,0x31,0x3D,0x38,0xC1,0x34,0x92,0x4B,0xE8,0xC5,\n    0x56,0xAC,0x67,0x27,0xA7,0x49,0x4F,0xEB,0x04,0xE8,0x0D,0x54,0x21,0x55,0x99,0x33,\n    0x62,0xD1,0x73,0x42,0xCC,0x99,0x06,0xA1,0xA8,0xFF,0x50,0x83,0xA3,0x00,0x00,0x00,\n    0x53,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x6F,0x5D,0x75,0x9A,0x60,0x72,\n    0x56,0xB4,0x62,0x2E,0x68,0x42,0x0D,0x55,0xD0,0x84,0x2B,0x7A,0x39,0xB3,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x32,0xC8,0x43,0x3A,0x3A,0x11,0x11,0x11,0x11,0x11,\n    0x11,0x11,0x10,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x22,0x22,\n    0x22,0xA1,0x51,0x0A,0x22,0x83,0xF3,0xEE,0x59,0x65,0x27,0x52,0x60,0x9B,0x42,0x9F,\n    0x9F,0xFD,0x4D,0xA4,0x69,0xA6,0x99,0x99,0xA8,0xA2,0x8A,0x33,0x54,0xCC,0xDA,0xAA,\n    0xAA,0xED,0x3B,0x32,0x24,0xE4,0xA4,0xA4,0xE4,0xE4,0x48,0x91,0x23,0xB5,0x4F,0x94,\n    0x8E,0x38,0xA2,0x8A,0x28,0xA2,0x8A,0x3E,0xC4,0xA4,0x9C,0x89,0x44,0xAE,0x10,0x84,\n    0x71,0x47,0x1C,0x71,0xC7,0x08,0x42,0x10,0x84,0x71,0xC7,0x1C,0x71,0xC7,0x08,0x42,\n    0x10,0x21,0x08,0x37,0xF0,0x80,0x00,0x00,0x95,0x42,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x07,0xE9,0x08,0x07,0xFD,0x08,0x70,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,\n    0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xC5,\n    0xDC,0x91,0x4E,0x14,0x24,0x3D,0x4E,0xB5,0x26,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0ea069f11ccdc0402d635d6bf709cac00d7f4f0fa2e52310605aadc952ba029d) == 778, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed bg_BG.CP1251 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_9fbf92515e9618e04064da740e46a25dccd95ddc0a726f65760f74e00b887db5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x1B,0xB1,0x56,0x7C,0x00,0x05,\n    0x40,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xB3,0x8B,0x2D,0xC0,0x32,0x22,0xA9,0xA0,0x4C,0x13,0x26,\n    0x3F,0x54,0xDA,0x93,0x4F,0x44,0x31,0x34,0x64,0xC2,0x68,0x62,0x60,0x26,0x9A,0x60,\n    0x26,0x21,0x93,0x46,0x23,0x13,0x08,0xC0,0x01,0x30,0x09,0x93,0x4D,0x18,0x01,0x0C,\n    0x4C,0x4C,0x02,0x64,0x30,0x98,0x26,0x09,0x99,0x00,0x04,0xC0,0x98,0x08,0xC9,0x81,\n    0x18,0x01,0x31,0x32,0x62,0x68,0x09,0x51,0x08,0x49,0x8F,0x54,0xC8,0xDA,0x4D,0x1E,\n    0x84,0x6D,0x43,0x4D,0x06,0x86,0x80,0xC8,0x00,0x00,0x68,0x19,0x00,0xC4,0xD3,0x40,\n    0x01,0xA1,0xA0,0x00,0x03,0x40,0x03,0x4D,0x00,0x00,0x19,0x34,0x00,0x18,0x99,0x1A,\n    0x0D,0x06,0x98,0x9A,0x68,0x1A,0x34,0x00,0x34,0x00,0x00,0x00,0x04,0x89,0x4A,0x7A,\n    0xA6,0x80,0x23,0x26,0x01,0x34,0x00,0xD1,0x84,0xC4,0xC0,0x26,0x8C,0x80,0x06,0x9A,\n    0x34,0x64,0xC0,0x26,0x08,0xC0,0x23,0x01,0x1A,0x32,0x34,0xC2,0x64,0xC9,0xA3,0x46,\n    0x8D,0x34,0x68,0x03,0x21,0x93,0x4C,0x47,0xA8,0x62,0x34,0x61,0x34,0x06,0x81,0xA6,\n    0x98,0x9A,0x34,0x69,0x90,0x30,0x23,0x69,0xA0,0x4C,0x7E,0xAA,0x09,0x55,0x40,0x8D,\n    0x32,0x0C,0x8D,0x1A,0x19,0x34,0x31,0x1A,0x06,0x99,0x34,0xD3,0x09,0xA6,0x43,0x09,\n    0x84,0x19,0x0D,0x34,0x1A,0x61,0x1E,0x88,0x68,0xC0,0x26,0x26,0x04,0x18,0x8D,0x1A,\n    0x31,0x34,0x68,0x19,0x00,0x68,0xC9,0x80,0x13,0x13,0x13,0x40,0x30,0x40,0xC8,0x00,\n    0x64,0x64,0xC2,0x34,0x1A,0x62,0x18,0x40,0x3F,0xCD,0x3C,0x16,0x6B,0x23,0x24,0x21,\n    0x03,0x21,0x2F,0x62,0x50,0xD9,0x3E,0x12,0xDA,0x37,0x0D,0xE2,0xE4,0xFC,0x70,0x1C,\n    0x46,0x54,0x02,0x82,0x39,0x0C,0xC7,0x32,0x84,0x3A,0x14,0x32,0x88,0x34,0x1D,0x47,\n    0x61,0xDC,0xA2,0x8E,0xE3,0x85,0x18,0x78,0x1A,0x94,0x72,0x90,0x52,0x47,0x92,0x94,\n    0x3D,0x14,0xB2,0x98,0x53,0x4A,0x70,0xF6,0x3D,0x14,0xF2,0xA0,0x2B,0x99,0x61,0x60,\n    0xCB,0x8B,0x26,0x60,0x5A,0x16,0xC5,0xC1,0x74,0xCC,0x8B,0xC6,0x68,0x5F,0x18,0x0C,\n    0xD9,0x9C,0x33,0xA3,0x08,0xC4,0x31,0x8C,0x88,0x18,0x81,0x94,0x43,0x19,0x86,0x71,\n    0x94,0x68,0x33,0xE6,0x80,0xD0,0x9A,0x21,0xA4,0x6A,0x34,0x66,0x90,0xD2,0x8D,0x66,\n    0x98,0x6C,0x34,0xE6,0xA0,0xD4,0x9A,0xA1,0xB4,0xD5,0x8D,0xC3,0x7C,0x23,0x89,0xAC,\n    0x35,0xA2,0x01,0xC8,0x51,0x51,0x73,0x35,0xC6,0xBC,0xD8,0x0E,0x86,0xC4,0xD9,0x0E,\n    0xA3,0xB0,0xEE,0x3C,0x0F,0x23,0xD0,0xF6,0x3E,0x1B,0x31,0xF4,0x7E,0x1F,0xCC,0x61,\n    0x8D,0x31,0xC6,0x3C,0xC8,0x19,0x11,0xAB,0x5C,0x91,0x93,0x32,0x86,0x54,0xCB,0x45,\n    0x66,0x22,0x62,0x73,0x5A,0x55,0x55,0x57,0x38,0x67,0x4C,0xF1,0x9F,0x34,0x06,0x87,\n    0x5B,0xA3,0xD7,0x45,0x6B,0xE2,0xC8,0xC0,0x8D,0x01,0x4B,0x88,0x5E,0x90,0x8F,0x09,\n    0x00,0x91,0x0F,0x50,0x49,0x04,0x98,0x4A,0x00,0x84,0x21,0x08,0x52,0xA1,0x2C,0x12,\n    0xE1,0xC6,0x14,0xC4,0xC8,0xEF,0x59,0x39,0x19,0xB2,0x5E,0xDA,0x69,0xCA,0x89,0xE0,\n    0x9F,0xAA,0xA0,0xAB,0xA2,0x23,0x48,0x4A,0x94,0x29,0x82,0x9C,0x2A,0x2B,0x3E,0x35,\n    0xD5,0x60,0x6A,0x44,0x09,0x0F,0x1C,0x3C,0x7D,0x60,0x56,0x80,0xC3,0x0C,0x30,0xC3,\n    0x0C,0x31,0xC9,0x03,0x62,0x04,0x2B,0xB8,0x63,0xB9,0x2D,0x39,0x64,0xA9,0xCC,0x39,\n    0xA7,0x38,0xE7,0x92,0xC7,0x40,0x97,0x26,0x09,0x93,0xA2,0x4D,0x1D,0x22,0x6C,0xE9,\n    0x9D,0x43,0xAA,0x75,0x8E,0xB9,0x38,0x76,0x0E,0xC9,0x3A,0x7A,0x8F,0x59,0x5A,0x57,\n    0x1E,0xC3,0xDA,0x57,0x95,0xEB,0xD6,0x07,0xB8,0xB1,0x2C,0x8B,0x32,0xD0,0xF7,0x9F,\n    0x02,0xD4,0xF8,0x9F,0x23,0xE6,0x7D,0x0B,0x63,0xEA,0x5B,0x97,0x06,0xF8,0x9F,0x37,\n    0xE5,0x01,0xC0,0x38,0x27,0x08,0xE1,0x9C,0x43,0xFE,0x38,0xA7,0x18,0xE3,0x93,0x1F,\n    0xC0,0x92,0xE3,0xB1,0x7F,0x49,0x25,0x80,0x60,0x1F,0x8B,0x21,0xB7,0x09,0x91,0x03,\n    0x82,0x07,0x39,0x11,0x23,0x84,0x36,0xD8,0xFD,0x48,0x02,0x1C,0x8D,0x0D,0xA0,0x6D,\n    0xB4,0x36,0xD8,0xDA,0x6E,0x22,0x46,0x48,0x12,0x38,0x27,0x1A,0x21,0xA4,0x22,0x49,\n    0x49,0x28,0x19,0x04,0xB3,0x90,0x84,0x92,0x02,0x7D,0x89,0x25,0xC2,0x68,0x12,0x21,\n    0x80,0x4D,0x2C,0xD3,0x4D,0x34,0xD3,0x50,0xE6,0x9A,0x95,0x34,0xD2,0xCB,0x2C,0xB2,\n    0xCB,0x28,0x80,0x46,0xB9,0x88,0x48,0x45,0x1E,0x8F,0x42,0x91,0x07,0x01,0xA1,0x10,\n    0xD3,0x7F,0xEB,0x21,0xA0,0x40,0x9B,0x01,0x36,0x0D,0x8D,0x8D,0x94,0xCA,0x6C,0x11,\n    0x10,0xB9,0x09,0x24,0x84,0x12,0x12,0x49,0x04,0x44,0x11,0x10,0x20,0x9D,0x63,0x10,\n    0x04,0xE0,0xA1,0x25,0x42,0x5F,0x57,0xA5,0xE7,0x7A,0xDB,0x89,0xEF,0x56,0x86,0x25,\n    0x45,0x18,0xC4,0x92,0xA2,0x41,0xB6,0x62,0x28,0x8C,0x5F,0xAF,0xCD,0x3D,0x21,0x2B,\n    0x16,0xD9,0x89,0x4E,0xB0,0x9D,0x61,0x54,0x34,0x50,0x2A,0xAB,0x29,0xEC,0xE5,0xE7,\n    0x60,0xFA,0x58,0xB9,0x36,0x0B,0x48,0xC9,0x95,0xD4,0x18,0x24,0x9C,0x4A,0x10,0x03,\n    0x94,0xD4,0x7C,0x94,0x9B,0x36,0x22,0xE9,0x16,0x53,0x90,0xA8,0x3A,0xB9,0xC8,0x49,\n    0x2A,0xB0,0x30,0x55,0x55,0x47,0x64,0x8B,0xAC,0x91,0x41,0x0D,0xB2,0x2B,0x37,0x2C,\n    0x36,0x24,0x4A,0xDE,0x55,0x96,0x19,0x24,0x43,0x36,0x23,0xC3,0xE7,0x71,0x80,0xE2,\n    0x91,0x8A,0x17,0x50,0x9D,0x9B,0x50,0x09,0x57,0x45,0x00,0x0E,0x65,0x20,0x0E,0x70,\n    0x50,0x09,0x09,0x7F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x03,0x76,0x2A,0xCF,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9fbf92515e9618e04064da740e46a25dccd95ddc0a726f65760f74e00b887db5) == 943, \"Wrong size of locale's blob\");\n\n/* bg_BG.CP1251 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_78899c7f7f8b53cc2ed3edeb2b8eaaeb2e3ae55f86cba862780fd4c27f77c734[] = {\n    0x5E,0x5B,0xE4,0xC4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xED,0xCD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE4,0xE0,0x0A,0xED,0xE5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_78899c7f7f8b53cc2ed3edeb2b8eaaeb2e3ae55f86cba862780fd4c27f77c734) == 26, \"Wrong size of locale's blob\");\n\n/* bg_BG.CP1251 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b58113b68d5850f2da8b8a52f36a9fbc410495900474f6363bd59452f1298aa7[] = {\n    0x42,0x47,0x4E,0x20,0x0A,0xEB,0xE2,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b58113b68d5850f2da8b8a52f36a9fbc410495900474f6363bd59452f1298aa7) == 36, \"Wrong size of locale's blob\");\n\n/* bg_BG.CP1251 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_3cb596d30b5b86a45b379afb6dc6a8ab18631dee1adace0c17e59247b720483e[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3cb596d30b5b86a45b379afb6dc6a8ab18631dee1adace0c17e59247b720483e) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed bg_BG.CP1251 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_4a60886611ae386874df841ce054dc38f4e1628c4942e649c9113372580b91a3[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x7B,0xEC,0x98,0x13,0x00,0x00,\n    0x58,0x5F,0x87,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x54,0x07,0xA4,0x81,0xFE,0x7F,0xF8,0x10,0xB0,0x00,0xD5,0x96,0x18,0xA4,0x86,\n    0x9A,0x68,0xF4,0x9B,0x50,0x3D,0x11,0x86,0xA0,0x00,0x68,0xC1,0xA9,0xA3,0x44,0x09,\n    0xEA,0x32,0x69,0xA6,0x26,0x04,0xD3,0x11,0x91,0xA1,0x81,0x22,0xA6,0x90,0x34,0xD3,\n    0x40,0x00,0x00,0x34,0x34,0xD1,0x88,0xB2,0x28,0xCA,0x06,0xE0,0xA2,0x46,0x9F,0x83,\n    0xD9,0x60,0xB0,0xBC,0xC2,0x94,0x85,0xB1,0x23,0xE9,0x07,0x0F,0x62,0x19,0x30,0x24,\n    0xC6,0xAC,0x1C,0x8D,0x28,0xD0,0xD7,0x4C,0x77,0x7B,0xF9,0x29,0x9E,0xCD,0x75,0xB1,\n    0x40,0x5A,0x1F,0x48,0xA8,0x07,0x10,0xC0,0x82,0x42,0xA4,0xA1,0xC2,0xCB,0x60,0x20,\n    0x41,0xCA,0x93,0x65,0xBD,0x32,0xC0,0x8D,0xB1,0x02,0xC9,0x97,0xB8,0x6E,0x06,0x7A,\n    0xFD,0x65,0x7E,0x15,0x80,0x44,0x5E,0x9D,0x7B,0x9E,0x33,0xEA,0xE7,0x1D,0x2B,0x09,\n    0xD6,0x51,0xC8,0x4C,0xAA,0xAB,0xB5,0x29,0xA4,0x5F,0x43,0x28,0x54,0x66,0x6F,0x12,\n    0xA9,0x40,0xAD,0x40,0x53,0x0C,0x92,0x28,0x1C,0xD2,0x7F,0x2E,0x33,0x08,0xD7,0xA9,\n    0x1E,0x50,0x6D,0xCE,0x79,0x88,0x22,0x10,0x88,0x35,0x82,0x7C,0x43,0x1E,0xF0,0xD1,\n    0xB2,0xF1,0xB6,0x6B,0xE5,0xD0,0xD0,0xE0,0x37,0x4E,0x54,0x82,0x1A,0x8E,0x1C,0xC7,\n    0x19,0x19,0xB8,0xBB,0x92,0x29,0xC2,0x84,0x83,0xDF,0x64,0xC0,0x98\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_4a60886611ae386874df841ce054dc38f4e1628c4942e649c9113372580b91a3) == 253, \"Wrong size of locale's blob\");\n\n/* bg_BG.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_daf87376ffe7540fd6f59f8c8807c102d37a3b6a4d54af7e91e7e872fd853672[] = {\n    0x5E,0x5B,0xD0,0xB4,0xD0,0x94,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xBD,\n    0xD0,0x9D,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD0,0xB4,0xD0,0xB0,0x0A,0xD0,0xBD,0xD0,\n    0xB5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_daf87376ffe7540fd6f59f8c8807c102d37a3b6a4d54af7e91e7e872fd853672) == 34, \"Wrong size of locale's blob\");\n\n/* bg_BG.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_59abcff540d2355a60968c6d60f1a47c2ace6d4576804a4f5ad7c5104b57dc61[] = {\n    0x42,0x47,0x4E,0x20,0x0A,0xD0,0xBB,0xD0,0xB2,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,\n    0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_59abcff540d2355a60968c6d60f1a47c2ace6d4576804a4f5ad7c5104b57dc61) == 38, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed bg_BG.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_7724f9126aa8dddea09d6ec9098fc199fa11d63f99b128826fb71bed3fbfcb60[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x89,0x78,0xF5,0x81,0x00,0x00,\n    0xCF,0x5F,0xFA,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x20,0x78,0x10,0xD4,0x07,0xA4,0x81,0xFE,0x7F,0xE0,0x00,0x30,0x00,0xD5,0x88,0x4A,\n    0x24,0x4C,0x46,0x98,0x4D,0x1A,0x0D,0x18,0x6A,0x1A,0x00,0x1A,0x60,0x6A,0x01,0x46,\n    0x08,0xC1,0x30,0x23,0x04,0xC0,0x98,0x13,0x01,0x24,0xA6,0x50,0x64,0xD3,0x43,0x40,\n    0xD0,0x00,0x00,0x68,0x63,0x52,0xC7,0x1E,0x2B,0x0D,0x62,0x72,0x93,0xD4,0x21,0x6C,\n    0xF0,0x48,0x4E,0x80,0xE7,0x22,0x54,0x61,0xB9,0x47,0x64,0x4C,0x51,0x92,0x81,0x90,\n    0x26,0x50,0xF2,0x83,0x13,0x54,0xAA,0x87,0xEE,0xF9,0xF6,0x14,0xD1,0x5E,0xAA,0x98,\n    0xAD,0x2C,0x36,0xD0,0x52,0x13,0x20,0xC1,0x45,0x52,0x95,0x56,0xF0,0xAE,0xC6,0x8D,\n    0x41,0x20,0x54,0xCC,0x5B,0xCF,0x2B,0x87,0xB4,0x00,0x4A,0x02,0x42,0x43,0x84,0x0B,\n    0x26,0x5F,0x01,0xB4,0x18,0xA7,0xB4,0x2C,0xF2,0xA0,0x04,0x44,0x7D,0xD7,0xCE,0xEF,\n    0x2A,0x5C,0x9F,0xF5,0x60,0x3A,0x4A,0x34,0x84,0xCA,0xBA,0xFA,0xFC,0x4C,0x91,0x79,\n    0x0C,0x7B,0x5E,0xF2,0x33,0x61,0x55,0xA7,0x16,0x27,0x0A,0x61,0x89,0x22,0x72,0x92,\n    0x38,0x29,0xD6,0x02,0xE3,0x53,0x1D,0x09,0x89,0xAA,0x9E,0x84,0xE1,0x90,0xC3,0x89,\n    0xA2,0x31,0x3C,0xC9,0xBC,0x8C,0x9E,0xF3,0x5C,0x98,0x43,0x14,0x43,0xE3,0xB0,0x3B,\n    0xB1,0x82,0x97,0x99,0xE6,0x23,0x9D,0xEC,0x45,0xDC,0x91,0x4E,0x14,0x24,0x22,0x5E,\n    0x3D,0x60,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7724f9126aa8dddea09d6ec9098fc199fa11d63f99b128826fb71bed3fbfcb60) == 259, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ca_ES.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_eb974ed0a2c91380b75a6c5548bee9627cd3b5246ed216951d5daa9019c384bc[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x58,0x31,0x75,0x16,0x00,0x05,\n    0xB3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x03,0x1A,0xD4,0x8B,0x1C,0x00,0x1D,0x26,0x86,0x80,0xC4,0x00,\n    0x18,0x4D,0x31,0x00,0x00,0x34,0x64,0x61,0x18,0x9A,0x62,0x03,0xCA,0x7A,0x86,0x40,\n    0x00,0x03,0x40,0xC1,0x06,0x98,0x01,0x31,0x34,0x64,0xC4,0x61,0x00,0x07,0x9F,0xAA,\n    0x27,0xA9,0xE5,0x4D,0xB4,0xD3,0x40,0x34,0x69,0x41,0x93,0x11,0x89,0x88,0xC4,0x31,\n    0x18,0x4C,0x26,0x00,0x0D,0x44,0x21,0xA1,0x93,0x40,0xDF,0x94,0xA3,0x43,0x40,0x34,\n    0x32,0x00,0x69,0xA6,0x08,0x68,0x0D,0x03,0x46,0x99,0x00,0x00,0xC8,0xD0,0xD1,0x88,\n    0xC0,0xD0,0x8C,0x81,0xEA,0x34,0x33,0x50,0xD0,0xF4,0xD1,0x31,0x06,0x43,0xFD,0x35,\n    0x3D,0xEA,0x55,0x32,0x34,0x06,0x81,0x84,0x03,0x40,0x34,0xD0,0x32,0x03,0x41,0x82,\n    0x00,0x00,0x01,0x11,0x53,0xF6,0x84,0x51,0xFA,0x94,0x06,0x9A,0x34,0x34,0x68,0x00,\n    0x34,0x64,0x68,0x0C,0x40,0x34,0x1A,0x00,0x34,0x64,0x64,0x34,0xC2,0x00,0x64,0x06,\n    0x04,0x00,0x68,0x06,0x81,0xA6,0x80,0x03,0x4D,0x34,0x64,0x0C,0x4C,0x83,0x4D,0x34,\n    0x00,0x1A,0x03,0x26,0x80,0x19,0x34,0x03,0x41,0xA3,0x40,0x1B,0xD5,0x08,0x9F,0xEA,\n    0x54,0x92,0x4F,0x50,0x00,0x00,0x00,0x1E,0xA0,0x00,0x01,0xA0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x06,0x64,0x33,0xA1,0x12,0x1B,0x78,0xF4,0x25,0x65,0xD9,0xDA,\n    0x14,0xCA,0x95,0x4B,0xA6,0x53,0x69,0xD4,0xF6,0x9A,0x83,0x55,0x46,0xA4,0xD7,0x53,\n    0xAA,0x55,0x5B,0x2A,0xD5,0x76,0xDA,0xC5,0x66,0xB5,0x5B,0xE8,0x57,0xAB,0xF6,0x0B,\n    0x0D,0x8A,0xC6,0xDD,0x64,0xB2,0xB7,0xE9,0x74,0xDA,0x7D,0x46,0xA7,0x54,0xD5,0xAB,\n    0xD6,0x35,0xB6,0x6B,0x75,0xCD,0xAD,0xCD,0xEE,0x1A,0xFD,0x83,0x8B,0x93,0x9B,0x9B,\n    0xA3,0xA6,0xC8,0xB5,0x9B,0x33,0x5B,0x4D,0xB9,0x93,0x26,0x8D,0xAB,0xDD,0xBC,0x3C,\n    0xEF,0x77,0xC5,0xF0,0x14,0xF1,0x78,0xFC,0x8E,0x4F,0x0D,0xF3,0x3D,0x01,0xA3,0xD2,\n    0x40,0xC1,0x41,0xC2,0x42,0xC3,0x2B,0x87,0xE7,0x74,0x65,0x95,0xE9,0xB5,0x51,0x6B,\n    0x35,0xBA,0xED,0x7E,0xC2,0x39,0x6E,0xC7,0x65,0x2A,0xB3,0x6B,0xB6,0x5D,0x20,0xBE,\n    0x4B,0x6F,0x27,0x2B,0xB9,0xDD,0x6E,0xD7,0x4B,0x49,0x4B,0xEF,0xB9,0xA7,0x38,0x07,\n    0x8F,0x89,0x32,0x28,0xCA,0x7C,0x43,0xA1,0x20,0x94,0x69,0x53,0x27,0x28,0x72,0xBD,\n    0x8A,0x8E,0xAB,0x2C,0x54,0x69,0x16,0x20,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,\n    0x00,0x00,0x94,0xA5,0x29,0x4A,0x52,0x94,0xA5,0x29,0x8E,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x0A,0x30,0xC6,0x2F,0x3A,0x87,0x3B,0x0C,\n    0x7B,0x03,0xEE,0x0E,0x73,0x9D,0x49,0x7D,0x0C,0x61,0xA4,0x0C,0x63,0x70,0xB8,0x7C,\n    0x4E,0x2A,0x10,0x84,0x21,0x08,0x42,0x10,0x85,0x0D,0x1F,0x09,0x03,0xB3,0x53,0x8C,\n    0x7E,0x38,0xE7,0x08,0x3A,0x74,0xEA,0x20,0x00,0x20,0xF1,0x28,0xCF,0x9F,0x3E,0x4C,\n    0xC4,0xC2,0x41,0x04,0x11,0x2C,0xC8,0xBD,0xF1,0x45,0x14,0x51,0x86,0x94,0x94,0x19,\n    0x30,0xC9,0xD3,0x4D,0x28,0x40,0x81,0x02,0x91,0xC7,0x1D,0x42,0x12,0x95,0x10,0x41,\n    0x0A,0xD1,0x22,0x2C,0x92,0x49,0x58,0x4A,0x44,0x89,0x52,0xA8,0x4C,0xA1,0x3A,0x72,\n    0x8A,0x28,0xB2,0xCB,0xF7,0x7B,0xFE,0x1F,0x19,0xB9,0xCF,0x94,0xEC,0xF4,0xFF,0xCF,\n    0xE9,0x41,0x43,0x45,0xF5,0xA3,0xA4,0xA5,0xFB,0x7D,0xE9,0xA9,0xEA,0x3F,0x1F,0x9F,\n    0xD5,0x4D,0x55,0x5F,0xEF,0xF9,0x59,0x5B,0x5D,0x5F,0xFD,0xB0,0xB1,0xB2,0xB3,0xFF,\n    0x5A,0x5A,0xDB,0x5B,0xDC,0x5C,0xDD,0x5D,0xDE,0x5E,0xDF,0x5F,0xE0,0x5B,0x2D,0x43,\n    0xE0,0x9A,0x93,0x12,0x43,0x09,0x83,0x5D,0x36,0xB4,0xC3,0x13,0x11,0x8C,0x63,0x48,\n    0xAF,0x5D,0xB4,0x5A,0xB6,0x31,0x64,0x3A,0xB8,0x58,0x27,0xF7,0xFD,0x03,0xE2,0xA2,\n    0x90,0x84,0x21,0x08,0x42,0x14,0xA5,0x29,0x4A,0x52,0x95,0x52,0xA2,0x90,0x8C,0xEC,\n    0xF6,0x0A,0xFB,0x25,0x29,0xA4,0x08,0x00,0x00,0xC8,0xA4,0x20,0x10,0x08,0xA5,0x29,\n    0x4A,0x52,0x94,0xA5,0x28,0xA8,0x5D,0x75,0x97,0x5D,0x75,0x97,0x68,0x21,0x08,0x42,\n    0x10,0x8B,0x2E,0x86,0x71,0x11,0x11,0x33,0x30,0x80,0x00,0x7F,0x02,0x92,0x91,0x82,\n    0x33,0x14,0x41,0x82,0x88,0xB0,0xC1,0xD2,0x96,0x0A,0x94,0x81,0xCC,0x63,0x88,0x88,\n    0x09,0x81,0x22,0x22,0x93,0x88,0xA0,0xA5,0x30,0x1C,0xA8,0x42,0x0E,0x84,0x95,0x29,\n    0x03,0x98,0xC7,0x11,0x10,0x13,0x02,0x44,0x45,0x27,0x11,0x41,0x4A,0x60,0x58,0x09,\n    0x56,0xAA,0xB5,0xAA,0xAF,0xEF,0xE5,0x55,0xAA,0xFE,0xFA,0x55,0x5A,0xA4,0x96,0xAA,\n    0xB5,0xAD,0x52,0x4B,0x5A,0xA4,0x96,0xAA,0xB5,0x55,0x54,0x92,0xD5,0x24,0xAA,0x92,\n    0x5A,0x49,0x6A,0xA9,0xEB,0x5D,0x50,0x00,0x00,0x5D,0x20,0x00,0x00,0x00,0x00,0x00,\n    0x01,0xEB,0xC8,0x1F,0xA4,0x9E,0xDC,0x80,0x00,0x00,0x00,0x0B,0xE4,0x00,0xF2,0x64,\n    0x03,0x02,0xF5,0x5D,0x70,0x01,0x81,0x75,0x5D,0x70,0x10,0x40,0x05,0x2A,0x54,0x49,\n    0x24,0x96,0x44,0x90,0x02,0xFB,0xB1,0xBA,0xE0,0x30,0x58,0x18,0x2B,0xD7,0xA2,0x00,\n    0xC2,0xB0,0x2F,0x5E,0xBD,0x48,0x55,0xA5,0x49,0xFF,0x55,0xD1,0x57,0x4B,0x54,0x82,\n    0x92,0xD5,0x20,0xBA,0x91,0x4A,0x5D,0x56,0x89,0x05,0xD4,0x82,0x97,0x5A,0xA4,0x14,\n    0x95,0x02,0x00,0x02,0x22,0x90,0xAB,0x4A,0x92,0xEB,0xA2,0xAE,0x96,0xA9,0x05,0x25,\n    0xAA,0x41,0x72,0x29,0x4B,0xAA,0xD1,0x20,0xAB,0xA4,0x29,0x75,0xAA,0x41,0x48,0x40,\n    0x80,0x00,0x00,0x22,0xD5,0x56,0xB7,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x20,0xB0,0x62,\n    0xEA,0x2C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eb974ed0a2c91380b75a6c5548bee9627cd3b5246ed216951d5daa9019c384bc) == 978, \"Wrong size of locale's blob\");\n\n/* ca_ES.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_970b925cd8dc26204adf45288e33e902785358369575e1666381f7ce2f3ebefb[] = {\n    0x5E,0x5B,0x73,0x53,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_970b925cd8dc26204adf45288e33e902785358369575e1666381f7ce2f3ebefb) == 18, \"Wrong size of locale's blob\");\n\n/* ca_ES.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_cee2ea78c539874d6590db391ba81a149b64594f7ddd3997a67bc41a7b43bd07[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cee2ea78c539874d6590db391ba81a149b64594f7ddd3997a67bc41a7b43bd07) == 35, \"Wrong size of locale's blob\");\n\n/* ca_ES.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_efe0d5320672e8d9deb80d8b738b64a644841ccdc6779fcdc923ff4a2b538837[] = {\n    0x2C,0x0A,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_efe0d5320672e8d9deb80d8b738b64a644841ccdc6779fcdc923ff4a2b538837) == 6, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ca_ES.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_5ecf773e99e390df85ce27b2fe40e8dae4381decb88d21664876f5feb5114aa5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xCC,0x68,0x76,0x94,0x00,0x00,\n    0x6F,0x5F,0x81,0x00,0x10,0x42,0x04,0x80,0x10,0x30,0x62,0x48,0x70,0x3F,0xB7,0xDF,\n    0x20,0x00,0x80,0x30,0x00,0xEB,0x24,0x35,0x4F,0x4D,0x35,0x06,0x9A,0x00,0x01,0xA1,\n    0xA6,0x20,0x94,0xD2,0x68,0xA6,0x98,0x4C,0x40,0x68,0x0D,0x31,0x02,0x49,0x34,0x53,\n    0xCD,0x50,0xD3,0xD4,0x68,0x00,0xC8,0x03,0x33,0xE6,0xFB,0x89,0x7E,0x48,0x3A,0x68,\n    0xD2,0x37,0xFA,0x26,0x86,0x10,0x8C,0xBD,0x25,0x35,0xEC,0x10,0x4E,0x97,0x21,0x08,\n    0x0A,0x1A,0x1E,0xA1,0x26,0x89,0x1F,0x9C,0x78,0xEF,0xA4,0x92,0xD6,0x59,0x4B,0x3F,\n    0x1E,0x51,0xF0,0x1C,0xF8,0x9A,0x49,0x21,0xD7,0xBC,0xF2,0xDB,0x4D,0x74,0x35,0xAD,\n    0x37,0xDB,0x48,0x76,0x40,0xCB,0x26,0x50,0x95,0xE7,0x8B,0x87,0xB1,0x89,0x8E,0xA5,\n    0x2E,0x6A,0x97,0x2A,0x20,0xCB,0xA7,0x53,0xBB,0x0B,0x12,0xA7,0xE5,0xAB,0xE1,0x72,\n    0xC5,0x9D,0x89,0xC1,0x01,0x0A,0xAB,0x4A,0xCC,0xA4,0x95,0xC5,0x45,0xA0,0x60,0xCC,\n    0x61,0x50,0x98,0xD8,0xE0,0x49,0x9C,0x53,0x9B,0xDF,0x40,0x74,0x62,0x34,0x4A,0x92,\n    0x48,0x21,0x9D,0xAE,0x76,0x81,0xCD,0x6D,0x6A,0xAD,0xA8,0xCD,0x08,0x63,0x6B,0x1C,\n    0x86,0x8A,0x71,0x7A,0xED,0x7C,0x11,0x73,0x45,0xE5,0x91,0x32,0xB7,0x30,0x82,0x9B,\n    0xCE,0x0C,0xEB,0x04,0x40,0xEC,0x36,0xB2,0xA7,0xF1,0x77,0x24,0x53,0x85,0x09,0x0C,\n    0xC6,0x87,0x69,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5ecf773e99e390df85ce27b2fe40e8dae4381decb88d21664876f5feb5114aa5) == 244, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ca_ES.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_967913fc34bbd60f89d096551a9e83c2fe96bcde5e3964890e1685120f476625[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xEA,0x49,0x99,0xB0,0x00,0x05,\n    0xBA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x03,0x1A,0xD4,0x9B,0x47,0x00,0x09,0x34,0x64,0x30,0x80,0xC9,\n    0x89,0xA0,0x0C,0x99,0x1A,0x30,0x41,0x90,0x61,0x01,0xE9,0xA2,0x32,0x34,0xF2,0x04,\n    0x64,0x61,0xA4,0x03,0x01,0x19,0x19,0x1A,0x06,0x80,0x68,0xC9,0xA3,0x08,0xC9,0x93,\n    0x4C,0xFF,0x55,0x4F,0x53,0xD4,0xF2,0x6F,0x54,0xD9,0x14,0xF6,0x8C,0x81,0xA5,0x32,\n    0x19,0x32,0x69,0x93,0x13,0x4C,0x98,0x21,0xA0,0x00,0x34,0x03,0x41,0x04,0xC8,0xD1,\n    0xA6,0x8F,0x53,0x6A,0x6F,0xD4,0xA6,0x26,0x80,0x0C,0x8C,0x46,0x9A,0x32,0x34,0x00,\n    0x0D,0x06,0x8C,0x40,0x64,0xC8,0x32,0x62,0x1A,0x3C,0xA7,0x92,0x7A,0x9E,0xA0,0x7A,\n    0x81,0xEA,0x6D,0x46,0x23,0xD1,0x34,0xD3,0xD4,0x62,0x7A,0x83,0xF3,0x3D,0x52,0x48,\n    0x07,0xA9,0x90,0xD1,0xA3,0x4C,0x10,0x01,0x88,0x69,0xA0,0xD0,0xC8,0xD3,0x40,0x68,\n    0x0D,0x01,0xA0,0x04,0x44,0xDA,0x9B,0x54,0xD3,0xD5,0x4F,0x48,0x0C,0x21,0x90,0x01,\n    0xA1,0x84,0x03,0x43,0x4D,0x34,0xD0,0x00,0x00,0x19,0x18,0x80,0x00,0x34,0x0D,0x19,\n    0x34,0x03,0x40,0x68,0x06,0x83,0x20,0x00,0x7A,0x80,0x00,0x30,0x80,0x34,0x00,0x00,\n    0x03,0x40,0x34,0x00,0x1A,0x1A,0x03,0x47,0xB5,0x06,0x9E,0x94,0xA9,0x34,0xD4,0xC2,\n    0x69,0x93,0x23,0x04,0xC4,0x62,0x69,0xB4,0x26,0x8C,0x98,0x9A,0x69,0x84,0x69,0xA3,\n    0x04,0x62,0x34,0xC9,0x80,0x81,0x82,0x60,0x26,0x86,0x02,0x64,0xC8,0x68,0xC4,0x18,\n    0x98,0x13,0x43,0x23,0x23,0x10,0xC8,0x68,0xC8,0x19,0x18,0x26,0x21,0x80,0x01,0x30,\n    0x43,0x09,0x84,0x18,0x81,0xA1,0xA1,0x8B,0x0C,0x90,0x66,0x03,0x52,0xDD,0x24,0xD1,\n    0x86,0xAA,0x9D,0x36,0x72,0x9D,0xCF,0x27,0xB3,0xE9,0xFD,0x01,0xCD,0xD1,0xD5,0xDA,\n    0x83,0x42,0xA1,0xBB,0xBC,0x51,0x28,0xB4,0x6A,0x3D,0x22,0x93,0x4A,0xE4,0xD3,0x5E,\n    0x69,0xD4,0xFA,0x83,0xD3,0xDB,0xE3,0xED,0x45,0xCB,0x39,0x9D,0xCF,0x67,0xDC,0xDD,\n    0x34,0x1A,0x1D,0x16,0x8D,0xD5,0xD9,0xDD,0xE3,0x49,0xA5,0xD3,0x69,0xF5,0x1A,0x93,\n    0x06,0x0C,0x99,0x7A,0x2D,0x6B,0xE1,0xB7,0xD7,0xE3,0x46,0x8D,0xC0,0x40,0xC1,0x41,\n    0xEB,0xF6,0x05,0xC2,0xA9,0x88,0x39,0x15,0xB3,0xDA,0x1C,0xD1,0x25,0x4D,0xA3,0x4E,\n    0xA2,0x33,0x48,0xA7,0x4A,0xAB,0x9E,0xA7,0x4F,0xAC,0xD4,0xEB,0x96,0x46,0xAD,0xD8,\n    0xC7,0x47,0xC8,0x6C,0xE5,0xB5,0xFA,0xD9,0x2D,0xAC,0x9E,0xC2,0x51,0x7E,0xE3,0x73,\n    0xBA,0x61,0xBB,0xDE,0x4A,0x6F,0x4E,0x9E,0x32,0x13,0x1B,0xFE,0x07,0x09,0x05,0x3A,\n    0x15,0x1D,0x11,0x87,0x47,0xD4,0x4A,0x99,0x39,0x2A,0x56,0x8F,0x4C,0xAD,0x61,0x67,\n    0xD2,0xAD,0x42,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x04,0x10,0x41,0x04,0x10,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x60,0x0E,0x2E,0x41,0x49,0xE7,0x1E,0x79,0x55,0x14,0xA5,0x29,0x4A,0x7B,\n    0x0C,0xFA,0xC3,0xA4,0xCE,0x38,0xE3,0xB8,0x7C,0x4E,0x29,0x8C,0x63,0x18,0xC6,0x31,\n    0x8C,0x62,0x9E,0xAE,0x31,0x3A,0xE2,0xB2,0x37,0x19,0x92,0x13,0x2C,0x58,0xB1,0x9A,\n    0x98,0x3A,0x75,0x17,0x5C,0x74,0x67,0x8F,0x1E,0x1D,0x21,0xFE,0xCA,0x04,0x08,0x12,\n    0x90,0x29,0xC1,0x08,0x42,0x14,0xF0,0x93,0x09,0x3A,0x64,0x44,0x8C,0x30,0xC5,0x0E,\n    0x38,0xE4,0xA3,0x50,0xA5,0x22,0x44,0x8A,0x95,0xA5,0x58,0x41,0x04,0x16,0xB4,0x92,\n    0x4A,0x25,0x49,0x45,0x14,0xA1,0x52,0xA2,0xCB,0x2F,0xB5,0x53,0x55,0xDB,0xEE,0x77,\n    0x6A,0xEB,0x3B,0xD5,0xB5,0xDD,0xFA,0xFF,0x05,0x85,0x8F,0x86,0xCA,0xCE,0xD3,0xC5,\n    0x6B,0xE3,0xB6,0xB7,0xF2,0x5C,0x5C,0xDD,0x5D,0xFA,0x26,0x3D,0x3E,0xAF,0x5F,0xB3,\n    0xDB,0xEE,0xF7,0xFC,0x3E,0x3F,0x2F,0x9F,0xD2,0x67,0xEB,0xF6,0xFB,0xCD,0x7E,0x3F,\n    0x3F,0xAF,0xDF,0xF3,0xFB,0x37,0xFE,0xFF,0xB8,0x9A,0x66,0x4F,0x4D,0xC1,0x90,0xDE,\n    0x68,0x85,0x0B,0x42,0x32,0x00,0x0D,0xDB,0xB7,0x90,0xD2,0xAF,0xDB,0x2E,0x5D,0x1F,\n    0x1C,0xB5,0x6A,0xBD,0x56,0xA1,0x52,0x85,0x09,0x92,0xC5,0xC5,0xB3,0x24,0x45,0x62,\n    0x21,0x08,0x42,0x10,0x89,0x12,0x10,0x84,0x21,0x08,0x42,0x24,0xB5,0x59,0x6D,0x28,\n    0xD1,0xB6,0xB6,0xDA,0x11,0x22,0x6C,0xD9,0xD4,0x0C,0x00,0x00,0xE4,0x70,0x03,0x00,\n    0x19,0x4A,0x52,0x94,0xA5,0x29,0x4A,0x3A,0x58,0x61,0xA3,0x0C,0x30,0xD1,0x86,0xA6,\n    0x31,0x8C,0x63,0x19,0xA3,0x09,0x6A,0x22,0x22,0x28,0x3A,0xC8,0x10,0x00,0x09,0xB0,\n    0x70,0xC8,0x1C,0xE8,0x06,0x50,0x0B,0x2C,0xB3,0x87,0x0C,0x91,0x32,0x72,0x20,0x5D,\n    0x08,0x5C,0x44,0x40,0x50,0x04,0x22,0x02,0x4B,0x88,0xA4,0x96,0x14,0x1D,0x64,0xAC,\n    0x44,0x49,0x49,0x1C,0x88,0x17,0x42,0x17,0x11,0x10,0x14,0x01,0x0A,0x57,0x05,0xC9,\n    0x2B,0x89,0x1C,0x93,0x14,0xD2,0x4A,0x21,0x44,0x25,0x39,0x9A,0x71,0x10,0xA6,0xA6,\n    0x5C,0x44,0x26,0xDA,0x84,0xA2,0x13,0x6D,0x42,0x6D,0xC2,0x50,0x92,0x4D,0xB8,0x4D,\n    0xB4,0x9B,0x70,0x9B,0x70,0x93,0xDC,0xC9,0x30,0x00,0x00,0x00,0x00,0x24,0xD8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x9B,0x00,0xFD,0x9B,\n    0xDE,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x06,0x00,0x01,0xF4,0xB6,\n    0x00,0x13,0x73,0x0A,0x52,0x00,0x00,0x09,0xB9,0x29,0x48,0x01,0x80,0xC0,0x00,0x00,\n    0x43,0x63,0x6E,0x06,0x03,0x6C,0x00,0x02,0x71,0xEE,0xCA,0x40,0x01,0x33,0x37,0x32,\n    0xA4,0x13,0x03,0x18,0x13,0x99,0xB9,0x89,0x4C,0x30,0x50,0xD3,0x7F,0xF2,0x93,0x14,\n    0x9C,0x26,0xC0,0x43,0x84,0xD8,0x12,0x43,0x10,0x89,0x28,0x68,0x6C,0x09,0x21,0x35,\n    0x26,0x9B,0x84,0xD8,0x08,0x69,0x90,0x00,0x30,0x00,0x00,0x10,0xC1,0x43,0x4D,0xCA,\n    0x4C,0x52,0x70,0x9B,0x01,0x0E,0x13,0x60,0x48,0x62,0x11,0x25,0x0C,0x4D,0x80,0xA4,\n    0x35,0x26,0x9B,0x84,0xD8,0x08,0x63,0x6C,0x60,0xC6,0x30,0x00,0x00,0x18,0xC0,0x64,\n    0x28,0x88,0xFF,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x3A,0x92,0x66,0x6C,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_967913fc34bbd60f89d096551a9e83c2fe96bcde5e3964890e1685120f476625) == 1038, \"Wrong size of locale's blob\");\n\n/* ca_ES.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_83d0be7f8909feff174f2b3d1eebb560565992906d449f8678aa6ee01001f772[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_83d0be7f8909feff174f2b3d1eebb560565992906d449f8678aa6ee01001f772) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ca_ES.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_2b4620071699832976286b7417b626ed119efe20443a2e8ebaa3088897ead4ce[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x96,0x02,0x83,0xF7,0x00,0x00,\n    0x6F,0x5F,0x94,0x00,0x10,0x42,0x04,0x80,0x10,0x30,0x62,0x48,0x70,0x3F,0xB7,0xDF,\n    0x20,0x00,0x80,0x08,0x00,0x30,0x00,0xEB,0x26,0x1A,0xA7,0xA6,0x88,0xD3,0x4F,0x50,\n    0x00,0x00,0x31,0x02,0x53,0x49,0xA9,0xA9,0xA6,0x13,0x10,0x1A,0x06,0x4C,0x40,0x49,\n    0x20,0x98,0x90,0xDA,0x8C,0x9A,0x01,0xE9,0x03,0x43,0xB0,0xDA,0xCA,0xC9,0x7D,0x44,\n    0x71,0x24,0x1A,0x34,0xF6,0x06,0xC3,0x0C,0x23,0x2E,0xC9,0x49,0xE3,0x83,0xD9,0xBA,\n    0xE2,0x1E,0xF1,0x32,0x0F,0x14,0x22,0x82,0x47,0xD7,0x1E,0x3B,0xE9,0x24,0xB5,0x96,\n    0x32,0xCF,0xC7,0x94,0x64,0x0E,0x64,0x9A,0x49,0x21,0xD7,0xBC,0xF1,0xDB,0x4D,0x74,\n    0x35,0xA9,0x37,0xD9,0xB8,0x7B,0x20,0x65,0x66,0x54,0x4A,0xB0,0xC5,0xE1,0xEC,0x62,\n    0x03,0xD3,0x9D,0xCD,0x46,0xA4,0x84,0x16,0xE9,0xD4,0xEE,0xC2,0xC4,0x91,0xAA,0xD9,\n    0xF0,0xA9,0x32,0x6F,0x62,0x14,0x28,0x14,0x52,0x57,0xAD,0x08,0xB9,0x54,0x51,0x57,\n    0x0C,0x1A,0x0C,0x29,0x94,0x0D,0x85,0xE4,0x99,0xC5,0x45,0x0F,0x74,0xC1,0xD1,0x80,\n    0xD1,0x29,0xC9,0x20,0x86,0x76,0xB5,0xDA,0x07,0x35,0xB1,0xA9,0xB2,0x93,0x34,0x21,\n    0x8D,0xAB,0x72,0x1A,0x27,0xC5,0xEA,0xB1,0xEF,0x45,0xAD,0x17,0x15,0xC5,0x05,0x4E,\n    0x5F,0x04,0xF7,0x9C,0x19,0xD5,0xE8,0x9C,0x19,0x02,0x41,0xF0,0x68,0xFC,0x5D,0xC9,\n    0x14,0xE1,0x42,0x42,0x58,0x0A,0x0F,0xDC\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2b4620071699832976286b7417b626ed119efe20443a2e8ebaa3088897ead4ce) == 248, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed cs_CZ.ISO8859-2 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_1ddd36758d49f9ef9a37db25557f37cd49b0f9b4b9d3ebdbaf4e6d889322b8c1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x24,0x5C,0x5B,0xB8,0x00,0x05,\n    0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF0,0x85,0x83,0x80,0x48,0x26,0x8D,0xA8,0xD3,0x04,0xD0,\n    0x01,0x90,0xC4,0x69,0xA0,0xD0,0x31,0x30,0x11,0x91,0xA6,0x4D,0x34,0xC8,0x68,0xD0,\n    0x34,0x00,0xD1,0xA6,0x41,0xA6,0x01,0x19,0x06,0x13,0x09,0x81,0x31,0xEF,0x53,0xF5,\n    0x52,0x4D,0x0D,0x32,0x19,0x06,0x83,0x41,0xEA,0x01,0xA6,0x86,0x80,0x62,0x64,0x60,\n    0x1A,0x00,0x8C,0x8C,0x13,0x4D,0x1B,0x4F,0x2A,0x68,0x81,0x19,0x1A,0x69,0x88,0x68,\n    0xC4,0xD1,0x9F,0xEA,0xA4,0x1A,0x34,0x19,0x32,0x03,0x46,0x26,0x9A,0x34,0xC8,0x68,\n    0xDA,0x35,0x33,0x04,0xF5,0x13,0x40,0x0D,0x06,0x20,0xC0,0x9E,0x8C,0xD0,0x27,0xEA,\n    0x9E,0x44,0x68,0x32,0x1A,0x43,0x40,0x31,0x1A,0x00,0xD3,0x21,0xA3,0x26,0x4C,0x20,\n    0x00,0xD3,0x04,0x64,0x68,0x34,0x06,0x9A,0x1A,0x0D,0xBD,0x54,0x61,0x59,0x13,0xD4,\n    0xD2,0x9E,0x69,0x36,0xA9,0xEA,0x9A,0x1A,0x07,0xEA,0x8D,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x84,0x4F,0xF5,0x4A,0x94,0x40,0x0C,0x9A,0x62,\n    0x34,0xD0,0x18,0x09,0xA6,0x99,0x18,0x46,0x80,0x01,0x82,0x62,0x69,0xA3,0x13,0x26,\n    0x4D,0x01,0xA6,0x10,0x32,0x00,0x34,0x00,0x0D,0x1A,0x34,0x1A,0x34,0x62,0x1A,0x69,\n    0x93,0x46,0x99,0x06,0x8C,0x83,0x4D,0x00,0xC8,0xC4,0xC4,0x34,0xC8,0xD0,0xD3,0x4C,\n    0x21,0xA0,0x00,0x00,0x6A,0xE3,0xD6,0x6A,0x1D,0x30,0x70,0x30,0x46,0x8E,0x11,0x05,\n    0x02,0x78,0x8D,0x21,0x0F,0x99,0xBC,0xE6,0x77,0x3C,0xE9,0x9F,0xD0,0x3A,0xBB,0x3D,\n    0x9C,0xD2,0x98,0xC7,0x3C,0x99,0x35,0xA6,0x7B,0x32,0xF8,0xFE,0xFA,0x60,0xC6,0xA4,\n    0xDB,0xF9,0xA3,0x67,0x8C,0x9D,0x36,0x6C,0xF1,0xC3,0x87,0x4F,0x11,0x09,0x0B,0xAC,\n    0x86,0xD6,0xEB,0xB5,0xFB,0x0D,0x8E,0xCB,0x67,0xB4,0xDA,0xC3,0xED,0xB6,0xFB,0x8D,\n    0xCC,0x44,0x4C,0x56,0xEB,0x77,0xBC,0xDE,0xC5,0xC6,0x46,0xC7,0x47,0xC8,0x48,0x6F,\n    0x8F,0xC8,0xC9,0x20,0x42,0x4A,0x24,0x69,0x12,0xA6,0x93,0x14,0xA1,0x45,0xA7,0x51,\n    0x2B,0x2C,0xA6,0x5E,0x62,0x66,0x69,0x52,0xB9,0xB9,0xC9,0xD5,0x99,0x32,0x22,0xCF,\n    0xA3,0x92,0x40,0x84,0x94,0x48,0xF0,0x49,0x12,0xA6,0x93,0x14,0xA1,0x45,0xA7,0x51,\n    0x2B,0x2C,0xA6,0x5E,0x62,0x66,0x69,0x52,0xB9,0xB9,0xC9,0xD5,0x82,0x10,0x84,0x21,\n    0x08,0x42,0x48,0x80,0x93,0xF1,0xA8,0x93,0x12,0xAA,0x31,0x39,0x44,0x96,0x91,0x2C,\n    0x8A,0x64,0x24,0x94,0x24,0x45,0x23,0x10,0x95,0x96,0x59,0x4A,0x54,0x47,0xC5,0xC6,\n    0x70,0x8C,0x30,0x17,0x30,0x8C,0x92,0x30,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,\n    0x88,0x88,0x88,0x88,0x89,0x1B,0xC9,0xA6,0x9A,0x69,0xA8,0x40,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xF3,0x65,0x39,0xDC,0xFE,0x84,0xAF,0x46,\n    0x5A,0x5F,0xA5,0xD3,0xEA,0x4C,0x4C,0xF5,0x7A,0xDD,0x7E,0xC4,0xD7,0x67,0xB5,0xDB,\n    0xEE,0x4D,0xF7,0x7B,0xDD,0xFF,0x02,0x2F,0x0F,0x8B,0xC7,0xE4,0xF2,0xF9,0xBC,0xF3,\n    0x9E,0x89,0xDF,0x4F,0xAB,0xD7,0x3D,0xEC,0xF6,0xFB,0xBD,0xFF,0x0F,0x8F,0xCA,0x7E,\n    0x82,0x87,0xE7,0x45,0x47,0xF4,0xFA,0xD2,0x52,0xD3,0x53,0xD4,0x54,0xD5,0x55,0xA3,\n    0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xFB,0x7D,0xED,0x2D,0x7F,0x1F,0x9B,0x6B,\n    0x7B,0x8B,0x9B,0xAF,0xD5,0xDF,0xEE,0xF3,0xF9,0xFD,0xBD,0x49,0x7C,0x71,0xFF,0xE4,\n    0x89,0x2F,0xD1,0x04,0xA3,0xAF,0xF0,0x08,0x10,0x1C,0x79,0xE7,0x9E,0x79,0xC7,0x1C,\n    0x71,0xC3,0x18,0xC6,0x3B,0xD5,0xAB,0x46,0x31,0x8C,0x63,0x5A,0x3F,0xF0,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0x31,0xC0,\n    0x68,0x22,0x0F,0x02,0x06,0x08,0x20,0x38,0xC7,0xA2,0x62,0x61,0x3F,0x11,0x19,0x5C,\n    0x84,0xC0,0x60,0x00,0x8B,0x8B,0x7E,0x1D,0xF8,0x75,0xAD,0x6B,0x5A,0x96,0xB5,0xAD,\n    0x67,0x5A,0xDE,0x33,0xE2,0xF1,0xDD,0x84,0xF3,0xCF,0x2D,0xD8,0x4B,0x78,0xC0,0x00,\n    0x00,0x0E,0x3E,0xE9,0xD4,0xA5,0x29,0x4A,0x52,0x96,0xEB,0xAB,0x5B,0xB0,0x9E,0x15,\n    0xBC,0xDB,0xAE,0xB6,0xDB,0x62,0xD1,0xDE,0x6A,0x28,0x62,0x89,0xC7,0x1C,0x71,0xC7,\n    0x1C,0x86,0x69,0x94,0xB2,0x0C,0xB2,0xCB,0x2C,0xB2,0x44,0xC1,0x8E,0x77,0x5D,0x61,\n    0xB2,0x21,0x11,0x15,0x29,0xC6,0x18,0x11,0x69,0xA6,0x9A,0x22,0x22,0x22,0x69,0xA2,\n    0x24,0xA4,0x44,0x45,0x93,0x9D,0x86,0x10,0x81,0x14,0x21,0x24,0x44,0x44,0x84,0x25,\n    0x29,0x49,0x10,0x88,0x88,0x8B,0xAA,0x42,0x04,0x48,0xA1,0x98,0x61,0x86,0xD9,0x4A,\n    0x05,0xB4,0x35,0x14,0x88,0xD2,0x4C,0x00,0x60,0x31,0x8C,0x06,0x4A,0x0E,0x00,0x00,\n    0x76,0xCE,0x00,0x00,0x4C,0x22,0x94,0x42,0x29,0x11,0x11,0x13,0x0A,0x44,0x41,0x11,\n    0x11,0x48,0x88,0x29,0x4A,0x11,0x14,0x22,0x22,0x0A,0x44,0x7D,0xD3,0x31,0x42,0x8D,\n    0x9E,0x93,0x28,0xA1,0x04,0x11,0x15,0x48,0x84,0xA0,0x8A,0x11,0x48,0x20,0x82,0x9B,\n    0x24,0xD4,0x85,0x48,0xA2,0x61,0x31,0x42,0x29,0x04,0x10,0x41,0x10,0x45,0x13,0x40,\n    0x00,0x00,0x07,0xDF,0x32,0x1B,0x4C,0xCF,0xE5,0x32,0x55,0x52,0x00,0x25,0x20,0x94,\n    0x89,0x2A,0xD5,0x2A,0x00,0x7C,0xD3,0x35,0x44,0xA5,0x20,0x90,0x01,0x29,0x4A,0x55,\n    0x65,0x40,0x00,0x05,0x5E,0x64,0x02,0xAB,0xEA,0xD4,0xA8,0x00,0x00,0x3C,0xB9,0x89,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0C,0x06,0x31,0x9F,0x10,0x00,\n    0x0F,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x81,0x22,0xE2,0xDD,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1ddd36758d49f9ef9a37db25557f37cd49b0f9b4b9d3ebdbaf4e6d889322b8c1) == 972, \"Wrong size of locale's blob\");\n\n/* cs_CZ.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_00e4e594ea4653fadfc3756061517ff0ca14707de1781c786e6a1556a0bea5d7[] = {\n    0x5E,0x5B,0x61,0x41,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x61,0x6E,0x6F,0x0A,0x6E,0x65,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_00e4e594ea4653fadfc3756061517ff0ca14707de1781c786e6a1556a0bea5d7) == 25, \"Wrong size of locale's blob\");\n\n/* cs_CZ.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_6229ccf6e93f362c13d659af89461794665bb5bca1e9c25c68f5dca8757a9548[] = {\n    0x43,0x5A,0x4B,0x20,0x0A,0x4B,0xE8,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6229ccf6e93f362c13d659af89461794665bb5bca1e9c25c68f5dca8757a9548) == 35, \"Wrong size of locale's blob\");\n\n/* cs_CZ.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_40766467c5194ea5315218b7450c72d5e5b1881193e90f455ea1b4b09ca11097[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_40766467c5194ea5315218b7450c72d5e5b1881193e90f455ea1b4b09ca11097) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed cs_CZ.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_3ab16ebac3e518f51212a37ea69165791a53d6e8fe87fbd39cde33c5c95bcfd1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x7E,0xE1,0x69,0x4F,0x00,0x00,\n    0x62,0xDF,0x81,0x80,0x10,0x42,0x01,0x80,0x10,0x10,0x62,0x08,0x70,0x3E,0x3F,0xDF,\n    0x10,0x20,0x46,0x00,0x52,0x30,0x00,0xE6,0xB6,0x0D,0x35,0x26,0x40,0x9E,0x8F,0x4A,\n    0x69,0x93,0x4D,0x3D,0x26,0x1A,0x9A,0x64,0x1A,0x44,0x7A,0x98,0x8C,0x40,0x00,0xD0,\n    0x00,0x09,0x4D,0x24,0xC9,0x0D,0xA9,0xE8,0x8D,0x1E,0xA1,0xA0,0x01,0xA2,0xDC,0x5F,\n    0x70,0xCA,0x2E,0xBE,0xEC,0x3D,0xB7,0xCB,0x19,0x1C,0x6A,0xC9,0xCE,0xA1,0xB3,0xB0,\n    0x67,0xA5,0x9A,0x7C,0xDC,0xA8,0xA1,0xBD,0x54,0xF7,0x92,0x4F,0x0E,0x64,0xB9,0xE4,\n    0x59,0x43,0xA0,0xD8,0xDF,0x84,0xB5,0x30,0xA4,0x65,0x9E,0x63,0x50,0x18,0x03,0x09,\n    0x07,0x52,0x09,0x9F,0x4A,0xF6,0xDE,0x42,0x48,0x13,0x19,0x6F,0x1A,0xAA,0xC3,0x23,\n    0xBB,0xA3,0x8E,0x0D,0x4C,0x95,0xA4,0xA3,0xBA,0xC6,0x92,0x4E,0x99,0xE3,0x97,0x57,\n    0xF8,0xFA,0x08,0x10,0xB1,0x0F,0x43,0xF4,0x7E,0xAB,0x6D,0x81,0x1C,0x81,0x35,0x63,\n    0x81,0xD9,0x36,0x45,0x10,0x4D,0xC8,0x43,0x5C,0x1A,0x88,0xAA,0xAA,0xB6,0xD3,0xCD,\n    0x37,0xBE,0x69,0x99,0xD1,0x57,0x7D,0x53,0x20,0xD3,0x28,0x30,0x61,0xD3,0xB6,0x26,\n    0x84,0x05,0x91,0x24,0x2C,0x98,0x4E,0xB1,0xC4,0x1F,0x20,0x50,0x24,0x84,0x46,0xF5,\n    0x1B,0x33,0xDB,0x15,0x12,0x4A,0x61,0x28,0x20,0xC3,0x36,0x99,0x73,0x50,0xC5,0x9C,\n    0x0B,0xF4,0x88,0xA9,0x54,0xD7,0xE3,0x72,0x1C,0xB4,0x09,0xFF,0x17,0x72,0x45,0x38,\n    0x50,0x90,0x7E,0xE1,0x69,0x4F\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3ab16ebac3e518f51212a37ea69165791a53d6e8fe87fbd39cde33c5c95bcfd1) == 262, \"Wrong size of locale's blob\");\n\n/* cs_CZ.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_7ad2094f82b392f3bf157eb25c6eaa1d4ffe04ded220079c730a617091b3885c[] = {\n    0x43,0x5A,0x4B,0x20,0x0A,0x4B,0xC4,0x8D,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7ad2094f82b392f3bf157eb25c6eaa1d4ffe04ded220079c730a617091b3885c) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed cs_CZ.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_733c7c74429dee467e39a555ccc2cd92e7e724ce13adcca1d5217a208fb0253a[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x7B,0x9C,0xB8,0x94,0x00,0x00,\n    0x62,0xDF,0xFC,0x00,0x10,0x42,0x01,0x80,0x10,0x10,0x62,0x08,0x70,0x3E,0x3F,0xDF,\n    0x10,0x00,0x02,0x00,0x28,0x20,0x02,0x00,0x12,0x0E,0x00,0x30,0x00,0xF5,0xAD,0x83,\n    0x14,0x91,0xEA,0x69,0xEA,0x0F,0xD2,0x87,0xA8,0x0C,0x8F,0x46,0x91,0xEA,0x00,0xD2,\n    0x68,0xD4,0xD3,0xD5,0x1E,0xD2,0x47,0xA9,0xA3,0xD4,0xD3,0x4C,0x80,0x68,0x02,0x48,\n    0x93,0x29,0xA3,0x26,0x9A,0x1A,0x68,0xDA,0x8D,0x00,0x06,0x93,0xAC,0xA8,0x30,0xC5,\n    0x2F,0xA6,0xFE,0x50,0xE0,0x67,0x8D,0x57,0x04,0x48,0xC2,0xC3,0x1C,0xF3,0x6C,0xF2,\n    0xF2,0xEB,0x84,0x61,0xED,0x65,0x25,0x33,0x96,0x8F,0x7B,0x95,0x6D,0x76,0x55,0x78,\n    0xBA,0x5C,0x69,0x35,0x1D,0x23,0xAD,0xF7,0x89,0x80,0xE0,0x1C,0x90,0x53,0x41,0x27,\n    0xF8,0x86,0x18,0xD0,0x50,0x83,0x2A,0x6F,0x4B,0x0A,0x09,0x9D,0x1D,0x8E,0x36,0xAB,\n    0x26,0xD4,0x92,0x8D,0xD4,0x29,0x33,0x3B,0x27,0x8C,0xF1,0x7F,0x2F,0x49,0x02,0x14,\n    0x30,0xF6,0x1E,0xAE,0xC9,0xA3,0x9D,0x8D,0x40,0x74,0x07,0x91,0xA8,0xE0,0x58,0x44,\n    0xE2,0x81,0x50,0x8E,0x62,0x59,0x99,0x9E,0xDB,0x6B,0x6C,0xB5,0xD9,0x63,0xBD,0x9E,\n    0x15,0xA6,0xB7,0x21,0xA8,0x40,0x81,0xAE,0x67,0xC8,0x38,0x5A,0x44,0x62,0xD2,0x52,\n    0x6B,0xD8,0x84,0xEC,0x11,0x04,0x61,0xD0,0x9C,0x51,0x74,0xA4,0x5A,0x24,0x9A,0xB0,\n    0x94,0x18,0x2D,0xF6,0xAB,0x2A,0x5F,0x80,0xC8,0x43,0x23,0x24,0x06,0xB2,0xF5,0xC3,\n    0x04,0x66,0x45,0x4C,0x05,0xD6,0x0C,0x6C,0xBF,0x53,0x0E,0x45,0x7F,0x17,0x72,0x45,\n    0x38,0x50,0x90,0x7B,0x9C,0xB8,0x94\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_733c7c74429dee467e39a555ccc2cd92e7e724ce13adcca1d5217a208fb0253a) == 279, \"Wrong size of locale's blob\");\n\n/* da_DK.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_7e144c39135d4f2e500bece1a00993dfafdb521c9198aead47266ee548c4d98b[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7e144c39135d4f2e500bece1a00993dfafdb521c9198aead47266ee548c4d98b) == 18, \"Wrong size of locale's blob\");\n\n/* da_DK.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_fa58867a51f3b815eee07d6aab477f6bc41e1a3959a43921da9c59a5210f113a[] = {\n    0x44,0x4B,0x4B,0x20,0x0A,0x6B,0x72,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x34,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fa58867a51f3b815eee07d6aab477f6bc41e1a3959a43921da9c59a5210f113a) == 35, \"Wrong size of locale's blob\");\n\n/* da_DK.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_970547e458204e1a538482b5f22e313bf57314f6c068e9e728989698e99e470c[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_970547e458204e1a538482b5f22e313bf57314f6c068e9e728989698e99e470c) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed da_DK.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_148ac3536ffb3d9b9fdf2f76f08d4b6b0315eff2700d095cfa51ace434a416de[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFF,0xB7,0x9A,0x39,0x00,0x00,\n    0x6D,0xDF,0x80,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x00,0x40,0x30,0x00,0xE6,0x6A,0x18,0xA3,0x51,0xA4,0x7A,0x26,0x8D,0x0D,0xEA,\n    0x66,0xA8,0x01,0xA6,0x89,0x34,0xC4,0x68,0x00,0x00,0x04,0x92,0x6A,0x6D,0x49,0xEA,\n    0x7A,0x9E,0x82,0x19,0x01,0x88,0xD9,0xF3,0x55,0x94,0x7A,0x16,0x71,0xF5,0x8C,0x23,\n    0xCB,0xDF,0x87,0xC2,0x82,0x0D,0xE9,0x97,0x31,0x8C,0xEC,0xC3,0xE2,0x15,0x45,0xBA,\n    0xA6,0x13,0x18,0xCF,0xA2,0xA6,0xB6,0x92,0xA8,0xB8,0xDB,0xB8,0x70,0x3C,0x87,0x46,\n    0x61,0x04,0x84,0x96,0xB1,0x6B,0xC0,0x80,0x4B,0x13,0x81,0xC9,0xE4,0x31,0x25,0x2E,\n    0x01,0x89,0x2C,0x20,0x75,0xC0,0xC9,0xD0,0xFA,0xE8,0xFA,0xC9,0x9A,0xF0,0xBA,0x66,\n    0xEA,0xA9,0xF7,0x36,0xF6,0x37,0x25,0xE4,0x0A,0x23,0xC2,0x31,0x61,0x8F,0xA5,0x8E,\n    0x65,0x09,0xA8,0x41,0x92,0xBF,0x61,0x87,0x2D,0xB4,0x65,0x70,0x19,0x84,0x67,0xFC,\n    0xA4,0xA8,0x72,0x44,0x30,0x90,0x64,0x04,0x56,0x90,0x83,0xA8,0x45,0x04,0xA1,0x0F,\n    0x8A,0x86,0x02,0xA3,0x21,0x80,0x99,0x13,0x83,0x12,0xA5,0x70,0x1A,0xAA,0xC3,0x1F,\n    0xB3,0x2A,0x38,0xE3,0x10,0x40,0xC5,0x16,0x82,0xE0,0xB2,0xA1,0xD8,0xFC,0x5D,0xC9,\n    0x14,0xE1,0x42,0x43,0xFE,0xDE,0x68,0xE4\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_148ac3536ffb3d9b9fdf2f76f08d4b6b0315eff2700d095cfa51ace434a416de) == 232, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed da_DK.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_90e3d48c90f1c81e0e1c0684318fe071cf5b83e1d22312d806552c7e34ff0ef4[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x61,0x51,0xBC,0x0A,0x00,0x00,\n    0x6D,0xDF,0x8C,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x00,0x40,0x08,0x00,0x30,0x00,0xE6,0x6B,0x09,0x4D,0x42,0x08,0xF5,0x0D,0x1A,\n    0x68,0xFD,0x53,0xCD,0x50,0x01,0xA6,0x89,0x34,0xC4,0x00,0x00,0x00,0x24,0x93,0x53,\n    0x6A,0x4C,0xD4,0xF4,0x10,0xC8,0x0C,0x43,0x57,0xE0,0xAB,0x28,0xF2,0x59,0xCF,0x94,\n    0x68,0x4D,0xBB,0xD6,0xCF,0x86,0x44,0x35,0xF2,0xCF,0x79,0x8C,0xED,0x43,0xDA,0x2A,\n    0x9A,0x9C,0xD5,0x09,0x98,0xCF,0x92,0xCB,0x4B,0x49,0x54,0xB9,0xAF,0x51,0xC3,0xB0,\n    0xE9,0xA6,0x21,0x22,0x4B,0x48,0xB5,0xE0,0x81,0x9A,0x8C,0xD8,0x36,0x6F,0x21,0x89,\n    0x29,0x70,0x0C,0x49,0x61,0x03,0xAE,0x06,0x4E,0x87,0xD7,0x47,0xD6,0x4C,0xD6,0x85,\n    0x93,0x37,0x54,0x4F,0xB9,0xB7,0xA1,0xB9,0x2F,0x00,0x5C,0x8E,0xE8,0xC5,0x86,0x3E,\n    0x15,0x2F,0x2E,0x26,0xA1,0x06,0x4A,0xDD,0x86,0x1C,0xAE,0xD1,0x95,0x80,0x66,0x11,\n    0x9F,0xEA,0x92,0xA1,0xC9,0x10,0xC2,0x41,0x90,0x11,0x4A,0x42,0x0E,0x99,0x14,0x12,\n    0x84,0x3E,0x2A,0x18,0x0A,0x0C,0x85,0xE2,0x64,0x4E,0x0C,0x4A,0x14,0xC0,0x6A,0x2A,\n    0x8C,0x7D,0xCC,0xA0,0xE3,0x8C,0x41,0x03,0x17,0x2D,0x05,0xC1,0x55,0xF8,0x2F,0x36,\n    0x3F,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x30,0xA8,0xDE,0x05,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_90e3d48c90f1c81e0e1c0684318fe071cf5b83e1d22312d806552c7e34ff0ef4) == 236, \"Wrong size of locale's blob\");\n\n/* de_AT.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_952295621414875749128b4b80ca4c5250305baf6d5defbf84d813cb3ee03019[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_952295621414875749128b4b80ca4c5250305baf6d5defbf84d813cb3ee03019) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_AT.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ddf0fa675f110f08768f24c9f070f3a5571df31e483a3404e1a581b6caea9af2[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x91,0x8F,0x1C,0x1E,0x00,0x00,\n    0x39,0xDF,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x73,0x88,0x70,0x3E,0xEF,0xDF,\n    0x90,0x04,0x00,0x30,0x00,0xD6,0x2C,0x32,0x88,0xF5,0x00,0xD0,0x0D,0x34,0x00,0x00,\n    0x12,0x88,0xCA,0x9A,0x7A,0x11,0x88,0xD0,0x0C,0x4C,0x87,0xA9,0x82,0x45,0x10,0x4D,\n    0x19,0x1A,0x64,0xD3,0x20,0xCD,0x20,0x0E,0xD8,0x72,0x5B,0xB3,0xFE,0x65,0x89,0x36,\n    0x34,0x93,0x7B,0xD1,0xC7,0x7F,0x8D,0xB9,0x09,0x61,0x45,0x23,0x51,0xBD,0x72,0x73,\n    0xF2,0x94,0xAA,0x31,0x12,0x12,0xB6,0x16,0xD3,0x19,0x41,0xF9,0x28,0x2E,0xBC,0xC4,\n    0x30,0x31,0x6A,0x23,0x1B,0x20,0xF6,0xF9,0xEF,0x9C,0x8A,0x44,0x1D,0x86,0x81,0x8C,\n    0x01,0x8D,0x26,0x2D,0xAC,0xE2,0x29,0x94,0xD3,0x4B,0xE1,0xC2,0x93,0x71,0xCC,0x61,\n    0x12,0x11,0xA5,0x9A,0xAC,0x34,0x2B,0x3B,0x9D,0x6C,0x58,0x99,0x8C,0x4F,0x55,0x90,\n    0xAD,0x5E,0xB4,0x39,0x50,0x4E,0xA8,0x2C,0x2E,0x9F,0xD2,0xAA,0xB1,0x99,0x4A,0xAB,\n    0xF6,0x09,0x01,0xEA,0x45,0x35,0x3A,0x8E,0xAD,0x57,0x0B,0xB9,0x9A,0xC6,0x2D,0x34,\n    0xAE,0x5D,0xE6,0x90,0x2B,0x50,0xB2,0xC2,0x01,0xE1,0x45,0x89,0x07,0x04,0x15,0x0C,\n    0x6E,0xAF,0xDF,0x8A,0xD4,0x14,0xE9,0x03,0xE1,0x6D,0x80,0x4E,0x74,0x07,0xC1,0x79,\n    0x44,0x14,0x14,0x0D,0x3F,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x48,0xC7,0x8E,0x0F,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ddf0fa675f110f08768f24c9f070f3a5571df31e483a3404e1a581b6caea9af2) == 240, \"Wrong size of locale's blob\");\n\n/* de_AT.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b13737dd74851eb66d6a0e565f1460b365056dcddd0625bf4e304cc10d59ec1f[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b13737dd74851eb66d6a0e565f1460b365056dcddd0625bf4e304cc10d59ec1f) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_AT.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_a49331e7ff974558570ffd55cba825e0944c6dd79bbbb01a3007dd5d0c6f363f[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF5,0x07,0xDD,0xBA,0x00,0x00,\n    0x39,0xDF,0x94,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x73,0x88,0x70,0x3E,0xEF,0xDF,\n    0x90,0x04,0x00,0x08,0x00,0x30,0x00,0xD6,0x28,0xC6,0x4D,0x32,0x06,0x4D,0x0C,0x83,\n    0x23,0x4C,0x08,0xC1,0x28,0x8C,0xA9,0xA7,0xA0,0x9A,0x68,0x34,0x0D,0x34,0x68,0x7A,\n    0x10,0x48,0xA4,0x64,0x8D,0x34,0x34,0xCA,0x79,0xA5,0x34,0xF2,0x7A,0x93,0x26,0x8D,\n    0x3A,0x61,0xC1,0x6E,0xF7,0x99,0x8F,0x92,0x6C,0x65,0x26,0xF5,0x93,0x8E,0xFF,0x1B,\n    0x62,0x12,0xC2,0x8A,0x46,0xA3,0x6A,0xE2,0xE7,0xE5,0x29,0x54,0x62,0x24,0x29,0x7C,\n    0x2F,0xB2,0xAA,0x41,0xF8,0x24,0x61,0x89,0x30,0xC8,0x9B,0x55,0x0C,0x6C,0x83,0xB7,\n    0xC6,0xBB,0x50,0xB0,0x41,0xF4,0x34,0x0C,0x60,0x0C,0x69,0x31,0x5A,0xCE,0x82,0xAD,\n    0x57,0x5D,0x3D,0x1C,0xEC,0x38,0x19,0x8C,0x2A,0x21,0x55,0x8C,0xEE,0xB2,0xEC,0x5C,\n    0x6A,0x75,0xE2,0xA6,0x6C,0x31,0x3E,0xEB,0x41,0x5E,0xBC,0xF6,0x3E,0x24,0x45,0x48,\n    0xE2,0x61,0x1F,0x2B,0x7D,0xC3,0x34,0xA6,0xFC,0x77,0x09,0x01,0xEA,0x45,0x34,0x2F,\n    0x1D,0x5A,0xAB,0x2E,0xE2,0x69,0x18,0xB4,0xD2,0xB9,0x75,0x9A,0x40,0xAD,0x42,0xDB,\n    0x48,0x07,0x65,0x16,0x24,0x26,0x44,0xE8,0x75,0xCF,0x0F,0xDF,0xE5,0x06,0x39,0xDA,\n    0x56,0x43,0x29,0x1C,0x96,0xC2,0xF4,0x68,0xA3,0x13,0x9A,0xF6,0x89,0x19,0xAF,0xF1,\n    0x77,0x24,0x53,0x85,0x09,0x0F,0x50,0x7D,0xDB,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a49331e7ff974558570ffd55cba825e0944c6dd79bbbb01a3007dd5d0c6f363f) == 250, \"Wrong size of locale's blob\");\n\n/* de_CH.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_c49ad9d2150bf3d5263dde317ce79c29c39d54f956b8fdfa7c52eb9aca823a3f[] = {\n    0x43,0x48,0x46,0x20,0x0A,0x46,0x72,0x2E,0x0A,0x2E,0x0A,0x27,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x34,0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c49ad9d2150bf3d5263dde317ce79c29c39d54f956b8fdfa7c52eb9aca823a3f) == 36, \"Wrong size of locale's blob\");\n\n/* de_CH.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_364a3af76bba890612925743e9a916e709e7d9b1784c87d73b2674e45659b9f7[] = {\n    0x2E,0x0A,0x27,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_364a3af76bba890612925743e9a916e709e7d9b1784c87d73b2674e45659b9f7) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_DE.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_29a0c70330c4f6c57695a577acd08473eca75113f82caab7f64c4970c1480eb9[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5B,0x0A,0x63,0x68,0x00,0x05,\n    0x86,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x8B,0x38,0x01,0x24,0xC9,0x88,0xC2,0x01,0x82,\n    0x62,0x34,0x06,0x86,0x26,0x08,0x69,0xA6,0x11,0x93,0x40,0x34,0x64,0xD0,0x64,0x64,\n    0xD3,0x00,0x87,0xA4,0xC8,0x06,0x26,0x43,0x4C,0x46,0x10,0xC1,0x34,0xD1,0xA6,0x98,\n    0x8D,0xEA,0x9A,0x07,0xFE,0xA4,0x8F,0x48,0xD8,0x9A,0x0D,0x1A,0xA3,0x09,0x91,0x91,\n    0x89,0xA6,0x11,0xA6,0x13,0x20,0xD0,0x60,0x98,0x06,0x90,0x72,0x8C,0x83,0x3F,0x52,\n    0x46,0xFC,0xA4,0x9A,0x62,0x34,0x00,0x03,0x4D,0x32,0x69,0xA0,0xD0,0x00,0x00,0xD0,\n    0x34,0xD1,0x84,0xC8,0xC2,0x19,0x03,0xD4,0x0C,0x41,0xA0,0x0C,0x41,0xB5,0x0F,0x48,\n    0xF5,0x0C,0x4C,0x9A,0x7E,0x69,0xBD,0x52,0xA6,0x20,0x00,0xD3,0x23,0x40,0x1A,0x18,\n    0x46,0x80,0x00,0x00,0x32,0x68,0x00,0x01,0x9A,0x4F,0x6A,0x65,0x1E,0xA5,0x0D,0x00,\n    0xF4,0x9A,0x69,0xA6,0x86,0x83,0x4D,0x34,0x18,0x46,0x23,0x46,0x81,0xA1,0xA3,0x10,\n    0x64,0x68,0xC4,0x03,0x09,0x90,0x64,0xC2,0x18,0x23,0x26,0x8D,0x19,0x19,0x32,0x34,\n    0xD3,0x13,0x23,0x4D,0x06,0x46,0x81,0x93,0x23,0x08,0x0D,0x34,0x68,0xC2,0x62,0x34,\n    0x68,0xC4,0x62,0x34,0x06,0x21,0x90,0xD1,0x89,0xFA,0x84,0x4F,0xF5,0x2A,0x8A,0x4D,\n    0xA8,0xD0,0x01,0x90,0x00,0x06,0x80,0x00,0x00,0x00,0x03,0x40,0x00,0x03,0x40,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x68,0xD0,0x00,0x00,0x00,0x62,0x0C,0x80,0x06,0x43,0x40,\n    0x00,0x00,0x00,0x00,0x00,0x1E,0x90,0x60,0x81,0x0A,0x95,0x31,0x93,0xDE,0x2F,0x37,\n    0xA5,0x2B,0xDD,0xF2,0xFB,0x7E,0xBF,0xE0,0x30,0x2A,0x14,0xF0,0x4A,0x98,0x35,0x5C,\n    0x22,0xB6,0x17,0xB9,0x87,0xC4,0x2C,0x62,0x71,0x58,0xBC,0x62,0xCE,0x35,0x6B,0x1C,\n    0xB7,0x8F,0xC8,0x64,0x72,0x4B,0x8B,0xBA,0xCD,0x6B,0x3E,0xB9,0xA3,0x5E,0xD2,0xD4,\n    0xD6,0xD9,0xB0,0xD8,0xB6,0xB7,0x37,0x37,0xB7,0xEC,0xD2,0x19,0xB7,0x72,0xDC,0x6E,\n    0x9C,0x5C,0x5C,0x9C,0xD1,0xEF,0xB8,0x0E,0x8E,0xBC,0x14,0x8E,0xC8,0x5E,0x5E,0xDF,\n    0x1F,0x5E,0x1E,0x5E,0xB8,0xDC,0x73,0x50,0x3C,0x88,0x2C,0xC6,0x67,0x34,0xC3,0x37,\n    0x3B,0xCA,0x94,0x61,0x9F,0xD1,0x45,0xC6,0xE9,0x74,0xFA,0x8D,0x4E,0xAE,0x3A,0x3E,\n    0x41,0x9C,0x6E,0xBE,0x45,0x8E,0xC3,0x62,0xCA,0x4B,0x66,0xCF,0x6D,0xB7,0x93,0x63,\n    0x28,0xCA,0x56,0x5E,0x61,0x23,0xA8,0x85,0x77,0x73,0x33,0x53,0x9D,0xEA,0x1A,0x23,\n    0xA3,0x90,0x78,0xA3,0xE8,0x91,0x08,0x5C,0xF2,0x34,0x82,0x92,0x78,0xC1,0x9A,0xE7,\n    0x40,0x00,0x00,0x00,0x01,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,\n    0x55,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x02,\n    0x6A,0x3D,0xC9,0x1D,0x33,0x9D,0x4C,0x62,0x87,0x93,0x39,0xCE,0x74,0xE5,0xF2,0xBA,\n    0xA4,0x99,0x24,0x92,0x53,0x33,0x53,0x7B,0xC4,0x21,0x08,0x42,0x10,0x84,0x21,0x09,\n    0xA6,0xC7,0x3A,0xC2,0x47,0xC3,0x9C,0xDF,0x29,0xBF,0x47,0x00,0x01,0xC1,0x55,0x50,\n    0x02,0x09,0x14,0x51,0x45,0x14,0xF1,0xB3,0x66,0xCA,0x9F,0xA0,0x3E,0x30,0xC3,0x0C,\n    0x70,0xE4,0xC4,0xC1,0xC4,0x14,0x28,0x68,0x91,0x1D,0x3A,0x74,0xB1,0xC7,0x1C,0x74,\n    0x69,0x08,0x20,0x82,0x08,0x30,0x92,0x49,0xF4,0x12,0x51,0x45,0x21,0x3E,0x85,0x02,\n    0x02,0xCB,0x2C,0xC3,0x0C,0xF4,0xD1,0xD2,0x52,0xD3,0x7A,0xA9,0xEA,0x3D,0x7E,0xCA,\n    0x9A,0xAF,0x6F,0xBA,0xAE,0xB2,0xB7,0xDF,0x5D,0xF0,0xAF,0xB0,0xB1,0xB2,0xF8,0xFC,\n    0xAC,0xFE,0x76,0x96,0xB6,0xD6,0xFF,0x4B,0x8B,0x9F,0xAF,0xDB,0xEF,0xF8,0xBA,0xFC,\n    0xFE,0xBF,0x7F,0xCB,0xBB,0xCB,0xDB,0xEB,0xFF,0xEE,0x06,0x0E,0x16,0x1E,0x26,0x2E,\n    0x36,0x3A,0x5C,0x84,0xBF,0xEE,0x4A,0x51,0x04,0x10,0x49,0x39,0x29,0x1E,0xBC,0x6C,\n    0x6C,0x57,0x4F,0x9B,0xCC,0xE5,0xC1,0x9A,0x34,0xFE,0xF8,0xBC,0xC5,0x29,0x4A,0x52,\n    0x94,0xA6,0x31,0x8C,0x63,0x18,0xC6,0x5F,0x52,0x5E,0x62,0x95,0xB5,0xB6,0xB0,0xD8,\n    0xD8,0xB9,0x77,0xF9,0x6A,0xD5,0x8B,0x56,0x2D,0x58,0x42,0x10,0x84,0x21,0x08,0x42,\n    0x27,0x4E,0x90,0xA6,0x32,0x63,0x18,0xC9,0x8C,0x63,0x84,0x21,0x08,0x42,0x4A,0x98,\n    0x86,0x00,0x00,0x01,0xA4,0x01,0x5D,0x1C,0x8A,0x85,0x41,0x24,0x3D,0x11,0x8D,0x14,\n    0x40,0x84,0x44,0xF2,0x94,0xE4,0x06,0x34,0x00,0x00,0xE0,0x19,0xC5,0x00,0x02,0xA0,\n    0x00,0x43,0xCF,0x19,0xC8,0x1E,0x42,0x11,0x02,0x14,0xF2,0x94,0xE4,0x06,0x34,0x00,\n    0x00,0xE0,0x1D,0x5E,0xEE,0xDD,0xBB,0x7B,0xBD,0x5D,0xBB,0x8C,0x17,0x2A,0xF2,0xAD,\n    0x6A,0xAB,0x55,0xAA,0xAF,0x2F,0x2E,0xDC,0xAA,0xB5,0x5E,0x49,0x55,0x6A,0x92,0x5A,\n    0xD6,0xAB,0x5A,0xA4,0x95,0x56,0x92,0x55,0x55,0xAA,0xAA,0xA4,0x96,0xA9,0x25,0x54,\n    0x92,0xD2,0x3D,0x59,0x17,0x24,0x00,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,\n    0xB4,0x81,0xFB,0xC9,0xED,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xE8,\n    0x40,0x05,0x2A,0x54,0x49,0x24,0x96,0x40,0x00,0x00,0x44,0x00,0xC1,0xCB,0x4B,0x85,\n    0x5A,0x54,0x95,0x2A,0x4B,0x54,0x82,0x92,0xD5,0x20,0x29,0x49,0x56,0x89,0x00,0x52,\n    0x5A,0xA4,0x14,0x95,0x0A,0x48,0x00,0x11,0x14,0x9F,0xE2,0xAD,0x72,0xAE,0x4A,0x95,\n    0x25,0xAA,0x41,0x49,0x6A,0x90,0x14,0xA4,0xAB,0x44,0x80,0x29,0x2D,0x52,0x0A,0x42,\n    0x04,0x00,0x00,0x04,0x5A,0xD6,0xB6,0x38,0x10,0x84,0x2B,0xB1,0x77,0x24,0x53,0x85,\n    0x09,0x05,0xB0,0xA6,0x36,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_29a0c70330c4f6c57695a577acd08473eca75113f82caab7f64c4970c1480eb9) == 950, \"Wrong size of locale's blob\");\n\n/* de_DE.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_50bb629eb098299dd8608155e07388758bcdab11354cdf8834607b6114adbff8[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_50bb629eb098299dd8608155e07388758bcdab11354cdf8834607b6114adbff8) == 18, \"Wrong size of locale's blob\");\n\n/* de_DE.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_75f08c9a7c0da160115b03685b12134500dca476e0a1bda0e875f29053b77c76[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_75f08c9a7c0da160115b03685b12134500dca476e0a1bda0e875f29053b77c76) == 35, \"Wrong size of locale's blob\");\n\n/* de_DE.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_3fb1b4eef6d977af815b141f6216760413afc0713e7e1b223bdcfad686551fb1[] = {\n    0x2C,0x0A,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3fb1b4eef6d977af815b141f6216760413afc0713e7e1b223bdcfad686551fb1) == 6, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_DE.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_fc4e29abe3b12649bb411c4e84092f54369b917b2e6bd0917af73583b0deb674[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x6C,0xA6,0x32,0x06,0x00,0x00,\n    0x39,0xDF,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x73,0x88,0x70,0x3E,0xEF,0xDF,\n    0x90,0x04,0x00,0x30,0x00,0xD6,0x6D,0x86,0x54,0x19,0x1A,0x32,0x00,0x34,0x0D,0x06,\n    0x80,0x25,0x4C,0x25,0x31,0x94,0x06,0x83,0xD4,0x18,0x8D,0x1E,0xA6,0x81,0x22,0x84,\n    0x6A,0x34,0x0C,0x46,0x20,0x69,0xA3,0x46,0x85,0x30,0xBD,0x38,0x7A,0xD0,0xCB,0x13,\n    0xEB,0x99,0xDC,0xFE,0x73,0x89,0x18,0xFB,0xBB,0x0D,0x56,0xC0,0xB2,0x42,0xD9,0x6A,\n    0x65,0x12,0xA8,0x49,0x20,0xE3,0x10,0xCA,0xB8,0x57,0x38,0xE5,0x07,0x99,0x49,0x6F,\n    0x13,0x00,0xB8,0xC1,0xA8,0x8C,0x6C,0x83,0xAB,0x3E,0xF8,0xE4,0x4C,0x41,0xD8,0x68,\n    0x18,0xC0,0x18,0xD2,0x62,0xA9,0x96,0x0A,0x4A,0x52,0xC9,0x68,0x1C,0x26,0x6C,0x2F,\n    0x18,0x44,0x84,0x66,0xCF,0x2A,0xF7,0x05,0x8D,0x86,0x6C,0x38,0x80,0x35,0xE0,0xB4,\n    0x1A,0x8B,0xDC,0x2E,0x48,0x41,0x48,0x60,0xB1,0x0F,0x2A,0x58,0x80,0x37,0x75,0x5B,\n    0x28,0x2A,0x46,0x68,0x73,0x1D,0x19,0xC9,0x6B,0xDF,0x79,0xA3,0x33,0xD6,0x13,0x95,\n    0x2B,0x05,0x3F,0x21,0x33,0x72,0x0A,0x1D,0x90,0x46,0x16,0x85,0x05,0x87,0x5B,0xED,\n    0xFB,0xF9,0x41,0x8F,0x0A,0x89,0x10,0xBA,0x45,0x26,0xF5,0x88,0xB4,0x39,0xAA,0x68,\n    0x38,0x2B,0x97,0xF1,0x77,0x24,0x53,0x85,0x09,0x06,0xCA,0x63,0x20,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fc4e29abe3b12649bb411c4e84092f54369b917b2e6bd0917af73583b0deb674) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_DE.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_77a9bfaffb3ca6dc25f65d02d6a4565fdbbe6ab63d213158ac14a0969eb62fa5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xEE,0xA0,0x82,0xD9,0x00,0x05,\n    0x8D,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x93,0x1C,0x01,0x20,0x01,0x32,0x69,0x84,0xC0,\n    0x99,0x31,0x34,0xD3,0x46,0x8D,0x30,0x99,0x30,0x9A,0x60,0x4F,0x48,0x68,0xC9,0xE9,\n    0x31,0x34,0xC4,0xD1,0xB4,0x40,0x68,0xC0,0x26,0x20,0x61,0x34,0xD0,0xC2,0x64,0x34,\n    0xD3,0x23,0x26,0x80,0xDF,0xEA,0xA1,0xEA,0x1E,0xA3,0x64,0xD4,0x7A,0x4F,0x46,0xA9,\n    0x89,0xA3,0x26,0x8D,0x1A,0x69,0x82,0x34,0x34,0x18,0x11,0x81,0x31,0x1A,0x1A,0x64,\n    0x19,0x48,0x68,0x37,0xEA,0xA3,0x6A,0x64,0x7F,0xA9,0x46,0x80,0x00,0x1A,0x34,0x32,\n    0x00,0x34,0x00,0x00,0x01,0x90,0x64,0x0C,0x35,0x19,0x1E,0xA7,0xA9,0xEA,0x68,0x0D,\n    0x0F,0x49,0x91,0xA1,0x93,0xD4,0xF5,0x0D,0x01,0xA0,0xFC,0xDB,0x55,0x32,0x88,0x61,\n    0x03,0x40,0x34,0x32,0x34,0x64,0x1A,0x00,0x00,0x00,0x00,0x00,0x68,0x7A,0x9A,0x10,\n    0x86,0x8D,0x49,0xEA,0xA3,0x40,0xD0,0x0C,0x40,0x1A,0x68,0x34,0xC8,0x34,0x00,0x00,\n    0x01,0xA3,0x43,0x46,0x46,0x86,0x40,0x06,0x80,0x34,0x00,0x00,0x19,0x00,0x00,0x1A,\n    0x00,0x00,0x00,0xD0,0x0D,0x06,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0xA1,0x13,\n    0xFD,0x4A,0xA9,0x40,0x00,0x00,0x00,0x00,0xC4,0xD1,0xA0,0x00,0xD0,0x00,0x00,0xD1,\n    0xA6,0x11,0xA0,0x68,0x06,0x40,0x00,0x34,0x00,0x00,0x00,0x64,0x01,0xA3,0x46,0x4D,\n    0x00,0xD1,0x90,0x32,0x1A,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x08,0x4A,0x89,\n    0x6C,0x37,0x1D,0x36,0x51,0x29,0x78,0x95,0x4A,0xE5,0x92,0xD9,0x73,0xCC,0xBE,0x61,\n    0x31,0x99,0x4C,0xE6,0x93,0x57,0xA7,0xB7,0xC9,0xB4,0xDF,0x7D,0x3A,0x9D,0xCF,0x27,\n    0xAF,0xB3,0xE7,0xE9,0xFD,0x02,0x83,0x42,0x7F,0xA1,0xC0,0x40,0xD1,0x28,0xB4,0x6D,\n    0x7B,0x33,0x3B,0x43,0x4E,0xC1,0xAB,0x62,0xD6,0xD8,0xDA,0xDC,0xDE,0xE0,0xE0,0x60,\n    0xC3,0x89,0xF2,0xDC,0x9D,0x76,0xCE,0x86,0x4C,0xBA,0xBB,0x3B,0xBC,0x6E,0x9E,0x77,\n    0x67,0xDE,0xCE,0xEF,0x8D,0x3F,0xC0,0x6F,0xCD,0x70,0xF8,0x90,0x3C,0x5E,0x34,0x14,\n    0x1C,0x23,0x1C,0xBB,0x2E,0x33,0x16,0x79,0xD8,0x8C,0xFE,0x83,0x44,0xD2,0x2A,0x2E,\n    0x33,0x49,0xA5,0x90,0x89,0xCF,0x6A,0x23,0xA3,0xF4,0x2D,0x5B,0x6A,0xF5,0x9A,0xFD,\n    0x86,0xC7,0x64,0xD7,0x67,0xB4,0xDB,0x26,0x82,0x0A,0xAD,0x25,0x27,0xC0,0x90,0x94,\n    0x95,0x96,0x91,0x18,0xE1,0x15,0x27,0x4B,0xED,0x94,0x78,0xF8,0x0E,0x5D,0x18,0x9D,\n    0xA0,0x00,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x09,0x2A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,\n    0x4D,0x18,0x16,0x6A,0x26,0xA2,0x88,0x88,0x42,0x10,0x84,0x21,0x49,0x16,0x11,0x49,\n    0xB6,0x4D,0x34,0xD3,0x5A,0x4A,0x4C,0x88,0x88,0x88,0x88,0x88,0x90,0xA4,0x4B,0x36,\n    0x51,0xE8,0xF0,0xE6,0x4B,0x72,0x37,0x4D,0xDB,0xB7,0x94,0x55,0x55,0x55,0x95,0x96,\n    0x59,0x65,0xA5,0xE8,0xC6,0x10,0x41,0x07,0x39,0x4C,0x40,0xA2,0x8A,0x28,0xB3,0x62,\n    0xD4,0xD3,0xD5,0x54,0x12,0x6C,0xD9,0xB3,0xA3,0x0C,0x30,0xD5,0x65,0x0E,0x38,0xE7,\n    0x8E,0x1F,0x20,0x82,0x0B,0xF0,0x92,0x4D,0x55,0x59,0x24,0x92,0x74,0xA2,0x8B,0x2C,\n    0xBA,0xCA,0xDA,0xEF,0x15,0x7F,0x8F,0xC9,0x61,0x63,0xE5,0xB2,0xF3,0x79,0xEC,0xFD,\n    0x1E,0x9B,0x4F,0x55,0xAF,0xAE,0xDA,0xDE,0xE2,0xE6,0xEB,0xD9,0xED,0xBB,0xF7,0x7B,\n    0xFE,0x17,0x9F,0x1F,0x97,0xCF,0xE9,0x7B,0x7D,0x7F,0x81,0x83,0x85,0xF5,0xFB,0x61,\n    0xFB,0xBD,0xFF,0x0F,0x8F,0xCB,0xE7,0xF4,0xFA,0xFD,0xBE,0xFF,0x8F,0xCF,0xEA,0x83,\n    0xF7,0xFC,0xFE,0xB8,0xFF,0x38,0xA1,0x64,0xE0,0x88,0x9B,0x6A,0x9A,0xC7,0x46,0xC6,\n    0xC6,0x45,0xB4,0x69,0x9C,0xCD,0xE6,0x99,0xB1,0x63,0x0F,0x0C,0xC1,0x82,0x4B,0xD7,\n    0x51,0xCE,0x73,0x9C,0xE7,0x3A,0xF5,0xE7,0x39,0xCE,0x73,0x9C,0xEB,0xEA,0x14,0x53,\n    0x53,0x9D,0xDD,0xDD,0x9D,0xA9,0xAB,0x97,0x3A,0xBA,0xD0,0xA4,0x93,0x92,0x49,0x39,\n    0x24,0x63,0x18,0xC6,0x31,0x8C,0x63,0x19,0x26,0xD6,0xBA,0x6B,0x5A,0xE9,0xAD,0x01,\n    0x11,0x11,0x17,0x1D,0x31,0xA4,0x44,0x44,0xA4,0x25,0x44,0x3F,0xE0,0x76,0xF8,0x08,\n    0x43,0xD2,0x41,0x08,0x93,0x93,0x76,0xC6,0x3B,0x41,0x98,0x2D,0x4A,0x59,0x11,0x01,\n    0x28,0x0C,0x88,0x08,0xD6,0x44,0xC3,0x49,0x29,0x09,0x62,0x4C,0xCD,0x8C,0x34,0x19,\n    0x82,0xD4,0xA5,0x91,0x10,0x12,0x80,0xC9,0x8B,0x05,0x9B,0x16,0x46,0x84,0x29,0x28,\n    0x07,0x00,0x04,0x04,0x40,0x40,0x0D,0xC5,0xA8,0x44,0x41,0xC4,0xA4,0x44,0x41,0x29,\n    0x95,0x55,0x56,0xB5,0x49,0x2D,0x6A,0x92,0x55,0x55,0xAA,0xAA,0xA4,0x96,0xA9,0x25,\n    0x54,0x92,0xD5,0x23,0xD5,0x91,0x71,0x20,0x04,0x90,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0xF5,0xA4,0x0F,0xDE,0x4F,0x6A,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xC9,0x44,0x00,0x14,0x91,0x24,0xB2,0x00,0x00,0x02,0x08,0x88,0x33,0x04,0xB8,0x2D,\n    0x50,0xA9,0x2A,0x54,0x96,0xA9,0x05,0x25,0xAA,0x40,0x52,0x92,0xAD,0x29,0x20,0xA5,\n    0x49,0x52,0x5A,0xA4,0x14,0x95,0x16,0x52,0x90,0x00,0x52,0x7F,0x8A,0xB5,0xC5,0x5C,\n    0x4A,0x95,0x25,0xAA,0x41,0x49,0x6A,0x90,0x14,0xA4,0xAB,0x45,0x48,0x29,0x52,0x54,\n    0x96,0xA9,0x05,0x22,0x48,0x81,0x00,0x04,0x41,0x02,0x20,0x00,0xF0,0x81,0x11,0x1F,\n    0xF8,0xBB,0x92,0x29,0xC2,0x84,0x87,0x75,0x04,0x16,0xC8\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_77a9bfaffb3ca6dc25f65d02d6a4565fdbbe6ab63d213158ac14a0969eb62fa5) == 939, \"Wrong size of locale's blob\");\n\n/* de_DE.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_5c038f3fde6d343367decac38341816a8345abdc7a94756c384d179681b8b267[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5c038f3fde6d343367decac38341816a8345abdc7a94756c384d179681b8b267) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed de_DE.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_7b95a43e74ad7132a87a519768c60adedb5c40f94f060b59b00d011e37ae1e4b[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x35,0xBD,0x60,0x4D,0x00,0x00,\n    0x39,0xDF,0x94,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x73,0x88,0x70,0x3E,0xEF,0xDF,\n    0x90,0x04,0x00,0x08,0x00,0x30,0x00,0xD6,0x6D,0x86,0x54,0x19,0x1A,0x32,0x00,0x34,\n    0x00,0x68,0x01,0x2A,0x61,0x29,0x8C,0xA0,0x34,0x1E,0xA0,0xD3,0x46,0x8F,0x53,0x40,\n    0x48,0xA1,0x08,0xD0,0x61,0x18,0x81,0xA6,0x8D,0x1A,0x0A,0x61,0x7A,0x6E,0xF3,0x99,\n    0x8F,0x73,0xE3,0x99,0x5C,0xFE,0x32,0x89,0x18,0xFA,0xBB,0x0D,0x16,0xC0,0xB2,0x42,\n    0xD9,0x6A,0x63,0x12,0xA8,0x49,0x20,0xE3,0x10,0xCA,0xB8,0x57,0x44,0x72,0x83,0xCC,\n    0x9C,0xB7,0x81,0x80,0x5C,0x60,0xD4,0x46,0x36,0x41,0xD3,0x9F,0x6C,0x72,0x28,0x10,\n    0x75,0x1A,0x06,0x30,0x06,0x34,0x98,0xA9,0x65,0x82,0x92,0x94,0xB2,0x5A,0x05,0x54,\n    0x1B,0x0B,0xC6,0x11,0x21,0x1A,0x19,0xE1,0x5B,0xA8,0x58,0xD0,0x62,0xC3,0x78,0x03,\n    0x3D,0xCB,0x41,0xA0,0xBB,0x51,0x62,0x42,0x0A,0x43,0x05,0x48,0x71,0x52,0xC3,0xC1,\n    0xBB,0x2A,0xB8,0xC1,0x52,0x33,0x43,0x88,0xE8,0xCE,0x4B,0x4E,0xDB,0xCC,0xD9,0x9E,\n    0xB0,0x9C,0xA9,0x58,0x29,0xF5,0x09,0x9B,0x10,0x50,0xE8,0x82,0x30,0xB4,0x26,0x2C,\n    0x3A,0x5F,0x6F,0xCF,0xAA,0x0C,0x78,0x52,0x48,0x85,0xD2,0x27,0x37,0xAC,0x45,0xA1,\n    0xC9,0x4F,0x31,0x52,0xFC,0xAF,0x5F,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x0D,0x6F,0x58,\n    0x13,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7b95a43e74ad7132a87a519768c60adedb5c40f94f060b59b00d011e37ae1e4b) == 242, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed el_GR.ISO8859-7 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_ddf7d9d14daa566ce40989afbe3723842fe72b0383dfd327418ef0c337cee15e[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x0E,0x72,0xA1,0xF7,0x00,0x05,\n    0x5D,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF8,0x98,0xB7,0x00,0x02,0x01,0x1A,0x34,0x34,0xD3,0x4C,\n    0x9A,0x06,0x83,0x46,0x46,0x81,0x93,0x10,0xD1,0xA0,0x06,0x86,0x26,0x43,0x10,0x19,\n    0x30,0x8D,0x18,0x40,0xC4,0x34,0x06,0x46,0x9A,0x60,0x20,0x19,0x1A,0x60,0x46,0x02,\n    0x64,0xC4,0x03,0xD4,0x0C,0x26,0x86,0x26,0x0D,0x04,0xF1,0xFE,0xAA,0x4F,0x40,0x86,\n    0xC8,0xD2,0x46,0x4C,0x04,0x62,0x69,0xA6,0x41,0x32,0x34,0x64,0x00,0xD3,0x4C,0x80,\n    0xD0,0x31,0x30,0x86,0x4C,0x98,0x46,0x86,0x40,0x06,0x4C,0x40,0xD3,0x08,0xC8,0xD0,\n    0x62,0x0D,0x30,0x40,0xC8,0xC9,0x90,0xC8,0x64,0x1A,0x32,0x19,0x34,0x19,0x18,0x26,\n    0x8C,0x09,0xA0,0x62,0x01,0x84,0x31,0xEF,0x53,0xDA,0xA9,0x40,0x0C,0x46,0x83,0x08,\n    0x32,0x62,0x61,0x34,0xC8,0x00,0x06,0x9A,0x68,0x00,0x26,0x02,0x60,0x00,0x00,0x8C,\n    0x00,0x04,0x6D,0x00,0x0D,0x00,0x00,0x00,0x11,0x80,0x00,0x00,0x13,0x00,0x4C,0x00,\n    0x68,0x00,0x00,0x00,0x00,0x00,0x04,0x60,0x02,0x18,0x13,0x00,0x00,0x08,0x9F,0xEA,\n    0x54,0xAA,0x68,0x06,0x4D,0x00,0x34,0x00,0x00,0x1A,0x06,0x40,0x00,0x00,0x00,0x03,\n    0x20,0xD0,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x01,0xFA,0xA0,0x70,0x78,0x80,0x88,0x90,0x98,0xA0,0xA8,\n    0xB0,0xB8,0xC0,0x01,0x90,0x23,0x40,0x86,0xC7,0x07,0x47,0x87,0xC8,0x08,0x48,0x88,\n    0xC9,0x09,0x49,0xBE,0x04,0xE5,0x1B,0x25,0x65,0x85,0xBF,0x12,0xE2,0xF3,0x03,0x13,\n    0x23,0x33,0x43,0x53,0x63,0x73,0x83,0x93,0xA3,0xB3,0xC3,0xD3,0xE3,0xF4,0x04,0x14,\n    0x2F,0x97,0xCD,0x0D,0x11,0x15,0x19,0x1D,0x1D,0x25,0x2B,0x7D,0x31,0x3F,0x75,0x47,\n    0xEA,0xA4,0x0D,0x4D,0x51,0x57,0x6D,0x5F,0x59,0x69,0x71,0x74,0x22,0xF8,0x46,0x26,\n    0x36,0x46,0x56,0x66,0x76,0x86,0x96,0xA6,0xB6,0xCD,0x8F,0xD3,0x7B,0x93,0x9B,0xA3,\n    0xAB,0xB3,0xBF,0xDB,0xEE,0xF0,0xF2,0xF4,0xF6,0xF8,0xFA,0xFC,0xFF,0x01,0x03,0x05,\n    0x07,0x09,0x0B,0x0D,0x0F,0x11,0x13,0xFE,0x8D,0x8E,0xDC,0x90,0xFC,0x49,0xCA,0xCB,\n    0x4B,0xCC,0x46,0xCC,0xFE,0x78,0x27,0x67,0xA8,0x28,0x68,0xB6,0x69,0x42,0xCD,0xF9,\n    0x67,0x27,0x67,0xBC,0xDE,0x7F,0x47,0xA7,0xD5,0xEB,0xF6,0x18,0xF6,0xFB,0xBD,0xFF,\n    0x0F,0x8C,0xFD,0x05,0x0D,0x17,0xCB,0xE9,0xF5,0xA4,0xA6,0xA7,0xA9,0xAA,0xAB,0x33,\n    0x59,0x5C,0x6B,0xEE,0x68,0xD8,0x3B,0x61,0x50,0x78,0xFD,0x49,0x28,0x85,0x3D,0x92,\n    0x54,0x64,0xA6,0x48,0x55,0x6A,0x5A,0xF2,0xCE,0x9B,0x4C,0x9A,0xC4,0xC8,0x00,0x00,\n    0x00,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xE1,0xC0,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3E,0x01,0xE9,0x78,0xC6,0x8B,0x4A,0x28,\n    0xA2,0x8A,0x28,0x97,0x9D,0x0D,0x3A,0x08,0x21,0xEA,0x2F,0x5F,0xB0,0xCC,0xCC,0xCC,\n    0xCC,0xCC,0xC9,0xF5,0xD8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,\n    0x88,0x8A,0x23,0xDA,0x44,0x87,0xB8,0xBD,0xE8,0xFC,0x0C,0xCC,0xCF,0xE2,0x22,0x0C,\n    0xE9,0xC0,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x7E,0xA5,0x22,\n    0x40,0x49,0xD2,0xAC,0x12,0x10,0x41,0x04,0x10,0x94,0xF1,0x04,0x1E,0x3C,0x59,0xF3,\n    0xE7,0xD3,0x20,0x40,0x6E,0xCD,0x01,0xA4,0x48,0x49,0x42,0x4A,0x24,0x28,0xCA,0x2C,\n    0x9B,0x34,0xA8,0xCA,0x2C,0xA4,0x85,0x97,0x69,0xF8,0xE3,0xE4,0xE5,0xFF,0xF3,0x73,\n    0xF4,0x74,0xF5,0x75,0xF6,0x76,0xF7,0x77,0xF8,0x78,0xF9,0x79,0xFA,0x7A,0xFA,0x7B,\n    0x10,0xB8,0x53,0x05,0x0A,0x98,0xF6,0xF4,0xF2,0xE4,0x8A,0xAA,0x0D,0xBC,0x1A,0x7B,\n    0xFA,0x40,0xB0,0x11,0x00,0x00,0x05,0x41,0x02,0x02,0x33,0x7D,0xBE,0xE2,0xF7,0xEB,\n    0xF6,0x31,0x7F,0xBF,0xE2,0x97,0x5F,0x2F,0x5A,0xD6,0xAB,0x55,0xA4,0x95,0x6A,0xAA,\n    0xAA,0xAB,0xD8,0xED,0x8A,0x51,0x4B,0xD2,0x22,0x50,0x05,0xE9,0x57,0x2E,0xBA,0xEB,\n    0xAE,0xAC,0x42,0xAD,0x55,0x6A,0xB5,0x55,0x7F,0x9F,0xF5,0xEB,0xAD,0x55,0x58,0x8C,\n    0x96,0xAA,0xA9,0x25,0xAD,0x56,0xB5,0x5A,0x49,0x52,0x4B,0x5A,0xD6,0xB5,0xAD,0x24,\n    0x90,0x92,0x3D,0x59,0x00,0x00,0x05,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xB4,\n    0x81,0xF9,0xC9,0xED,0x48,0x00,0x00,0x00,0x00,0x17,0xC4,0x00,0x00,0x00,0x01,0x49,\n    0x52,0xA5,0x25,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x25,0x48,\n    0x29,0x52,0x52,0x25,0x2A,0x24,0x01,0x4A,0x92,0x02,0xA5,0x44,0x82,0xA4,0xA8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x54,0xB2,0x0A,0x91,0x29,0x12,0x96,0x89,0x00,0x54,0x89,\n    0x00,0x54,0xB4,0x48,0x2A,0x4A,0x80,0x11,0x00,0x01,0x10,0x00,0x00,0x05,0x45,0x5A,\n    0xD5,0xFF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x07,0x39,0x50,0xFB,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ddf7d9d14daa566ce40989afbe3723842fe72b0383dfd327418ef0c337cee15e) == 845, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed el_GR.ISO8859-7 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_48923bb55f96eb45a955674edc02c10aebc645b83243ccb7fdd773c3486cd7ac[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x60,0x91,0xCE,0xF2,0x00,0x05,\n    0x46,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9D,0x00,0x5D,0x44,0xA0,0xAA,0xAA,0x81,0x32,0x64,0xC0,\n    0x4C,0x23,0x68,0x1E,0xA0,0x4D,0xE9,0x01,0x1A,0x69,0x80,0x0D,0x0D,0x00,0x26,0x4C,\n    0x00,0x1A,0x41,0x88,0xD1,0x80,0x06,0xA3,0x00,0x00,0x00,0x00,0x13,0x00,0x13,0x01,\n    0x30,0x13,0x21,0x81,0x31,0x30,0x00,0x19,0x34,0x00,0x00,0x00,0x00,0x93,0x00,0x04,\n    0xC0,0x00,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,\n    0x94,0x22,0x43,0x4D,0x03,0x40,0x00,0x00,0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x01,0xA0,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x02,0x51,0x2A,0x86,0xD3,0x51,0xEA,0x7A,0x9F,0xAA,0x68,0x06,\n    0x80,0x00,0x68,0x00,0x03,0x40,0x1E,0x90,0x00,0x00,0x00,0x00,0x00,0x01,0xA0,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x00,0x1A,0x34,\n    0x0D,0xFA,0xA4,0x8A,0x76,0xB4,0xC8,0x27,0xE4,0x44,0x7C,0xA8,0x88,0x0E,0x85,0x41,\n    0xD3,0xF8,0xAE,0xC8,0xC9,0x1A,0x1E,0x0F,0x08,0xD8,0xF4,0x75,0x1C,0x1C,0x23,0xA4,\n    0x01,0x1E,0x25,0x49,0x5A,0x58,0x96,0xBE,0x47,0xCA,0x97,0x21,0x12,0xF4,0xC1,0x26,\n    0x98,0xA6,0x49,0x9A,0x02,0x68,0x9A,0xA6,0xC9,0xBA,0x70,0xF9,0x93,0x94,0x14,0x2A,\n    0x74,0x82,0x9D,0xA7,0x89,0xEA,0x7C,0x9F,0xBE,0x77,0xD0,0xA0,0x3E,0x95,0x05,0xF5,\n    0x28,0x4A,0x1A,0x88,0xA2,0xA8,0xCA,0x3A,0x90,0xA4,0xA9,0x4A,0x5A,0x98,0x86,0x53,\n    0x62,0x21,0x8A,0x7A,0x36,0x87,0x54,0x10,0xEA,0x8A,0xA4,0xA9,0xAA,0x8A,0xAA,0xAC,\n    0xAB,0xAB,0x0F,0xAD,0x59,0x56,0x9F,0x62,0xB6,0xAE,0x2B,0xAA,0xF2,0xBE,0xB0,0x2C,\n    0x2B,0x12,0xC7,0x13,0x65,0x59,0x96,0x74,0x42,0xD0,0x81,0x03,0xED,0x7D,0xCF,0xBD,\n    0xF8,0x2D,0x2B,0x52,0xD6,0xFC,0x5F,0x92,0xD8,0xFC,0xDF,0xA2,0xDA,0xB7,0x2D,0xEB,\n    0x82,0xE2,0xB9,0x2E,0x6B,0xA2,0xEA,0xBB,0x2E,0xEB,0xC2,0x25,0x02,0x07,0xEA,0xFD,\n    0x97,0x95,0xE9,0x7B,0x5F,0x17,0xD5,0xF9,0x7F,0x60,0x18,0x16,0x09,0x83,0x61,0x18,\n    0x56,0x19,0x87,0x62,0x18,0x96,0x29,0x8B,0x63,0x18,0xD6,0x39,0x8F,0x64,0x19,0x16,\n    0x49,0x93,0x65,0x19,0x56,0x59,0x97,0x66,0x19,0x96,0x69,0x9B,0x7E,0xEC,0xE3,0x3A,\n    0xCF,0x33,0xED,0x03,0x42,0xD1,0x34,0x6D,0x23,0x4A,0xD3,0x3F,0x86,0x9D,0xA8,0x6A,\n    0x5A,0xA6,0xAD,0xAC,0x6B,0x5F,0xCB,0x5D,0xCE,0xD8,0x45,0x6C,0xA3,0x9B,0x36,0xD1,\n    0xFD,0x46,0x6D,0xBE,0x1F,0xEF,0xD9,0xFE,0xC7,0x36,0xEF,0x74,0x64,0x7F,0x78,0xFF,\n    0x9B,0xD6,0xF9,0xBF,0x7F,0xEE,0x03,0x82,0xE1,0x38,0x6E,0x23,0x8A,0xE3,0x38,0xEE,\n    0x43,0x92,0xE5,0x39,0x7C,0xC8,0xD7,0x35,0xCE,0x45,0x22,0xDC,0xF4,0x5C,0x62,0x11,\n    0x35,0x83,0xED,0x83,0x0B,0xD1,0x74,0x90,0x7A,0x5D,0x3E,0xA3,0xAA,0xEB,0x3A,0xEE,\n    0xC3,0xB2,0xED,0x3B,0x6E,0xE3,0xBA,0xEF,0x3B,0xEF,0x03,0xC2,0xF1,0x10,0xE7,0xE0,\n    0xFC,0x91,0x07,0xE8,0xFD,0x9F,0xC3,0xFA,0x7F,0x88,0x91,0xA4,0x24,0xB1,0xF4,0x24,\n    0x50,0xFA,0x69,0x0C,0x82,0x22,0x44,0xA8,0x9E,0xB4,0x40,0x21,0x55,0x08,0x0B,0xB0,\n    0x5B,0x46,0xC0,0xA4,0x08,0x0E,0x22,0x00,0x49,0x04,0x50,0x08,0x24,0x80,0x48,0x92,\n    0x03,0x8E,0x87,0x21,0xD4,0x60,0xFC,0x28,0x00,0x88,0x1F,0x65,0x00,0x48,0x85,0x40,\n    0x40,0x62,0xA2,0x0D,0x8B,0xB5,0xAD,0x6B,0x5A,0xFE,0xD6,0xBD,0x6F,0xF5,0xE7,0x9E,\n    0x79,0xE7,0x9E,0x04,0x00,0x47,0x45,0x02,0x09,0x04,0x40,0xC0,0xBE,0x70,0x80,0x07,\n    0xD1,0x00,0x4B,0x22,0x97,0xBD,0x06,0x40,0x82,0x08,0x48,0x00,0x52,0x01,0x3A,0xC1,\n    0x90,0x48,0x41,0xC5,0xD8,0x33,0x31,0x89,0xB8,0xE3,0x10,0x1C,0x0E,0x38,0xC1,0x99,\n    0x83,0x33,0x00,0x43,0xC0,0x02,0x5D,0x05,0x89,0x2F,0x8F,0x4F,0x39,0xA1,0xED,0x69,\n    0x1F,0x02,0x60,0x10,0x44,0x90,0x50,0x23,0xB2,0x86,0xDB,0x72,0xC3,0x68,0xA1,0xB8,\n    0x50,0x3C,0x0A,0x10,0xCA,0x33,0x9E,0xC3,0xC6,0xA2,0x38,0xA0,0xF1,0x48,0x15,0x25,\n    0x03,0x8C,0x12,0x52,0xA2,0x74,0x54,0x48,0x15,0x0F,0x4A,0x80,0xE2,0x8F,0x3D,0x0C,\n    0x3A,0x0E,0x98,0x81,0xD8,0x50,0x44,0xDB,0xBD,0xEA,0xF0,0xB7,0x91,0x82,0x01,0x45,\n    0x91,0xB0,0xDE,0xA9,0xC4,0xDF,0xBB,0x72,0x0F,0x70,0xEB,0xE0,0x20,0x3C,0x8C,0x38,\n    0x08,0x17,0xE8,0x07,0xE8,0x44,0xA6,0xAF,0x9C,0x1B,0xC4,0x3B,0xA8,0x07,0xF2,0x28,\n    0x7F,0x59,0xD1,0x14,0x71,0x83,0xD0,0x51,0x16,0x82,0x74,0x3D,0xEB,0x30,0x0E,0x52,\n    0x80,0x13,0x01,0x10,0x48,0x21,0x18,0x08,0x82,0x27,0xFC,0x5D,0xC9,0x14,0xE1,0x42,\n    0x41,0x82,0x47,0x3B,0xC8\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_48923bb55f96eb45a955674edc02c10aebc645b83243ccb7fdd773c3486cd7ac) == 837, \"Wrong size of locale's blob\");\n\n/* el_GR.ISO8859-7 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3b238907a52bdd43e82807ededba1e1b6f3c4801844ba543ece8594e8bd49afc[] = {\n    0x5E,0x5B,0xED,0xCD,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xEF,0xCF,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xCD,0xC1,0xC9,0x0A,0xCF,0xD7,0xC9,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3b238907a52bdd43e82807ededba1e1b6f3c4801844ba543ece8594e8bd49afc) == 28, \"Wrong size of locale's blob\");\n\n/* el_GR.ISO8859-7 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f8e5e92d9c927f4b1a56c4e39c7bfb3a1455d8dc32391f22de09416baa59ad45[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f8e5e92d9c927f4b1a56c4e39c7bfb3a1455d8dc32391f22de09416baa59ad45) == 35, \"Wrong size of locale's blob\");\n\n/* el_GR.ISO8859-7 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_084d8b31a527bb71d29a3bdf445ee7ad62569376f7f5e120c26497068ba15297[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_084d8b31a527bb71d29a3bdf445ee7ad62569376f7f5e120c26497068ba15297) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed el_GR.ISO8859-7 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_533617556b631f58a3e1cc5fb4925d1e2dbc7db8e1ce45806f7091ac638c0d3d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x41,0x89,0x29,0xFB,0x00,0x00,\n    0x41,0x5F,0x87,0x80,0x10,0x42,0x00,0x80,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x00,0x64,0x36,0xCD,0x07,0xBA,0xBE,0xFE,0x33,0x30,0x00,0xEC,0x02,0xA7,0x92,0x99,\n    0xA9,0xA6,0xD4,0xC9,0xA6,0x02,0x0C,0x26,0x26,0x1A,0x32,0x9E,0x51,0xA6,0x30,0x1A,\n    0x03,0x40,0x00,0x1A,0x68,0x34,0x03,0x40,0x1A,0x04,0xA6,0x92,0x6A,0x61,0x4D,0x93,\n    0x46,0x9A,0x4D,0x19,0xA3,0x46,0xA0,0x34,0x68,0x69,0x93,0xD4,0xD2,0x13,0xA0,0xEA,\n    0x50,0x31,0x20,0x28,0x01,0xE1,0x85,0x12,0x25,0x5F,0x8C,0x4E,0x24,0x0D,0x44,0x82,\n    0x20,0xE9,0x7E,0x95,0x80,0x55,0xF4,0x06,0xF9,0x99,0x6E,0x19,0x92,0xFE,0xC2,0x98,\n    0xBD,0x1A,0x78,0x2B,0xDD,0x60,0x71,0x35,0xEC,0x37,0x85,0xC6,0xF4,0xD0,0x10,0x90,\n    0xEA,0xEC,0x38,0x71,0xC0,0xC1,0x80,0x99,0x11,0x46,0x98,0x0C,0x0D,0xCE,0xC3,0x67,\n    0x22,0xFF,0x38,0x73,0x50,0x8E,0xE8,0x7A,0x3E,0xD4,0xE8,0x69,0xA7,0xDD,0xC9,0xA1,\n    0x44,0xE2,0x7C,0x98,0x3D,0x5E,0xB0,0xFC,0xBC,0xEC,0x9B,0x15,0x12,0x8C,0x55,0x9D,\n    0x5B,0xED,0xAA,0x85,0xB6,0xD8,0xDD,0x4C,0x92,0x29,0x1B,0x40,0x2B,0x5F,0x52,0x74,\n    0xD4,0x96,0x2C,0x7B,0x36,0x5C,0xDA,0xF3,0xE3,0x64,0xDF,0x49,0xB1,0x6D,0xAA,0x7C,\n    0xB4,0x4E,0xE5,0x78,0xB5,0xC5,0x2C,0x74,0x41,0x22,0xA8,0x3B,0x26,0x20,0xB4,0x69,\n    0x4A,0x53,0xA2,0x15,0x75,0xFF,0x33,0x96,0x55,0x5D,0x8E,0xAF,0x1D,0x0B,0xC6,0xD7,\n    0x78,0xC6,0x25,0xE8,0x48,0x8B,0x9A,0x81,0x9E,0x3A,0xB6,0x77,0x13,0x49,0x9D,0xD2,\n    0xD0,0xF2,0xF8,0x12,0x93,0xB3,0x13,0x26,0x48,0xCC,0x23,0x11,0x42,0xD9,0x69,0xC9,\n    0x16,0x93,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x41,0x06,0x24,0xA7,0xEC\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_533617556b631f58a3e1cc5fb4925d1e2dbc7db8e1ce45806f7091ac638c0d3d) == 301, \"Wrong size of locale's blob\");\n\n/* el_GR.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_1c503746c4a9b4363fa298cfd560da81a776da0930560f7dd0a37cc340826900[] = {\n    0x5E,0x5B,0xCE,0xBD,0xCE,0x9D,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xCE,0xBF,\n    0xCE,0x9F,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xCE,0x9D,0xCE,0x91,0xCE,0x99,0x0A,0xCE,\n    0x9F,0xCE,0xA7,0xCE,0x99,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1c503746c4a9b4363fa298cfd560da81a776da0930560f7dd0a37cc340826900) == 38, \"Wrong size of locale's blob\");\n\n/* el_GR.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_7376273af0af2348b1901745f44ee3e4dde10b86b2e985d87b48ec061bd63725[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7376273af0af2348b1901745f44ee3e4dde10b86b2e985d87b48ec061bd63725) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed el_GR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_05f5c50bc74d8419c4d2fe78672134a882a674ae224d68a6a9fa516124334ce7[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x23,0x36,0x39,0x7A,0x00,0x00,\n    0xDE,0xDF,0xFC,0x00,0x10,0x42,0x00,0x80,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x00,0x7E,0x33,0x64,0x36,0xCD,0x07,0xBA,0xBE,0x80,0x01,0xB0,0x01,0x0C,0xA2,0x20,\n    0x44,0xCA,0x7A,0x4D,0x34,0x1A,0x7A,0x46,0x86,0x8D,0x00,0x03,0xD4,0x34,0x7B,0x54,\n    0x0C,0x00,0x03,0x40,0x00,0x64,0xD0,0x00,0x00,0x68,0x04,0xA6,0x92,0x9E,0xA9,0xE2,\n    0x4D,0xA3,0x46,0x99,0x4D,0x19,0xA9,0xB4,0xCA,0x00,0x0D,0x1E,0xA3,0xD4,0xF5,0x13,\n    0x0C,0xD1,0x9A,0x9A,0x4A,0xA8,0x91,0xDA,0x46,0xB8,0x54,0xF8,0xA5,0x8D,0x0B,0x80,\n    0x5E,0xCC,0x0C,0xC9,0xCA,0xB1,0x5A,0x89,0x51,0xC0,0x52,0x5E,0x6C,0x58,0xD4,0x93,\n    0x18,0x4F,0x17,0xCF,0xB7,0x92,0xB5,0xD5,0xE5,0xC6,0xED,0xE7,0x10,0xB0,0xE2,0x9A,\n    0x02,0x12,0x1D,0x59,0x7F,0x2B,0xAF,0x2F,0x60,0x25,0x44,0x51,0x93,0x0C,0x0D,0x90,\n    0xCC,0x30,0xD5,0xC4,0x60,0x6C,0x2A,0x2C,0xE6,0x5D,0xE3,0x0C,0x14,0x23,0x6C,0x3C,\n    0x9F,0xB5,0x3A,0x1A,0x57,0x59,0xE4,0x55,0x2B,0x80,0x8D,0x9B,0xCE,0x7E,0x6A,0x4D,\n    0x81,0xD8,0x86,0x05,0x20,0x4B,0x02,0xA1,0x06,0xD1,0x9D,0x4F,0x7D,0x02,0x80,0xC5,\n    0x92,0xC7,0x10,0x02,0xA9,0xEB,0x4E,0x9A,0x72,0x95,0xF5,0x8B,0x68,0xD5,0xBB,0x5E,\n    0x54,0xCB,0xCD,0x36,0x4D,0xC1,0x4D,0xA3,0x3C,0xCE,0x51,0x93,0x58,0x4E,0xC6,0x08,\n    0x33,0x2D,0x21,0x8A,0x62,0x0B,0x66,0xD4,0xA4,0x30,0x42,0xA2,0x8F,0xE6,0x72,0x9D,\n    0x34,0x52,0xEA,0xD1,0xD0,0xBB,0x2A,0x77,0x8C,0x62,0x5A,0x84,0x88,0xB9,0x58,0x33,\n    0xC6,0xBD,0xFD,0x24,0xB9,0xB5,0xBA,0x5B,0x1E,0x4E,0xB2,0x42,0x66,0x62,0x54,0xC9,\n    0x1A,0x84,0x64,0x28,0x55,0x24,0xFD,0x11,0x65,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,\n    0x23,0x36,0x39,0x7A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_05f5c50bc74d8419c4d2fe78672134a882a674ae224d68a6a9fa516124334ce7) == 308, \"Wrong size of locale's blob\");\n\n/* en_AU.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_5b8eec40ea84283f4d83a536d072fdaf419975a7af1fc60e7d4ab32882a829b0[] = {\n    0x41,0x55,0x44,0x20,0x0A,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A,0x31,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5b8eec40ea84283f4d83a536d072fdaf419975a7af1fc60e7d4ab32882a829b0) == 46, \"Wrong size of locale's blob\");\n\n/* en_CA.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_a057067da93d43f5728b83d3b7ebdeb960728704ad96d4c60a21846af91c0cd6[] = {\n    0x5E,0x5B,0x79,0x59,0x6F,0x4F,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a057067da93d43f5728b83d3b7ebdeb960728704ad96d4c60a21846af91c0cd6) == 18, \"Wrong size of locale's blob\");\n\n/* en_CA.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_318f77b5d821cfdf005b0aefae83329b1a2d0e6eda494198fa821b89240341fc[] = {\n    0x43,0x41,0x44,0x20,0x0A,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_318f77b5d821cfdf005b0aefae83329b1a2d0e6eda494198fa821b89240341fc) == 34, \"Wrong size of locale's blob\");\n\n/* en_GB.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_cd6e534cc9e27af465cf1cd0bde0148d6f5e55f264bb95ea9405aae51967813d[] = {\n    0x5E,0x5B,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cd6e534cc9e27af465cf1cd0bde0148d6f5e55f264bb95ea9405aae51967813d) == 16, \"Wrong size of locale's blob\");\n\n/* en_GB.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_4a9d8aaaf2957252300b14e07040e1def829b2b3b6d00b447e686a2a923bd716[] = {\n    0x47,0x42,0x50,0x20,0x0A,0xA3,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_4a9d8aaaf2957252300b14e07040e1def829b2b3b6d00b447e686a2a923bd716) == 34, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed en_GB.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_44f785d665a76f44d499f1d93f09027641556188e954a45cbc4acbc86f4e0f3c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xE0,0xBE,0xCB,0x4C,0x00,0x00,\n    0x37,0xDF,0x80,0x00,0x10,0x42,0x00,0x80,0x10,0x25,0x73,0x8C,0xF0,0x3E,0xE7,0xDF,\n    0x20,0x30,0x00,0xEC,0x01,0xAA,0x7A,0x9B,0x48,0x00,0x00,0x06,0x86,0x8F,0x53,0xD4,\n    0x30,0x69,0xA3,0x4D,0x30,0x98,0x99,0x30,0x10,0x34,0xC1,0x22,0x88,0xC9,0x4F,0xD5,\n    0x3D,0x4F,0x53,0xD3,0x13,0x29,0xA6,0x6A,0x34,0xDA,0x3D,0x51,0x79,0xC0,0xAD,0xF1,\n    0xC3,0xA8,0x82,0x98,0x7B,0x02,0x92,0x74,0xE6,0xBC,0x36,0x0E,0xC8,0x49,0x30,0x6B,\n    0x14,0xC4,0xA4,0x10,0xD1,0xA0,0xC9,0x0E,0x6E,0x8F,0x29,0x65,0x7C,0x78,0x83,0x91,\n    0xE4,0xD3,0x99,0xD0,0x36,0x3A,0x35,0x11,0x8D,0x90,0x74,0xC3,0x7F,0xCE,0xE4,0xC4,\n    0xBB,0x0D,0x03,0x18,0x93,0x1A,0x13,0x01,0xF7,0x51,0x5D,0x42,0xF2,0xE2,0x29,0xA3,\n    0x09,0x94,0x3D,0x0C,0x22,0x8C,0xCE,0x14,0x2D,0x8D,0x76,0xFB,0x84,0x1E,0x12,0x89,\n    0xF1,0x33,0x85,0xC2,0xA9,0xE0,0xDC,0xF0,0x66,0xBB,0x01,0x4A,0x05,0x85,0x4C,0x42,\n    0x38,0x8C,0xD3,0xFB,0x7C,0x79,0x0A,0x16,0x9A,0xB6,0xC9,0x44,0xC0,0xD8,0xAA,0xBA,\n    0xEE,0x75,0x50,0x26,0xCF,0x76,0x28,0x14,0xD4,0xB0,0x86,0x45,0x81,0xF3,0x22,0xC3,\n    0x96,0xC5,0xB3,0x22,0x42,0xBA,0x17,0x1A,0x17,0xAE,0xA1,0xA8,0xCC,0xE7,0xE4,0xD5,\n    0x53,0xD1,0x42,0x00,0xC6,0x8F,0xF1,0x77,0x24,0x53,0x85,0x09,0x0E,0x0B,0xEC,0xB4,\n    0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_44f785d665a76f44d499f1d93f09027641556188e954a45cbc4acbc86f4e0f3c) == 241, \"Wrong size of locale's blob\");\n\n/* en_GB.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_d9d3373c2cabf8bb855b6ce82bfe64c70574f79cc82ba5e02a543f34c6d5a659[] = {\n    0x47,0x42,0x50,0x20,0x0A,0xC2,0xA3,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d9d3373c2cabf8bb855b6ce82bfe64c70574f79cc82ba5e02a543f34c6d5a659) == 35, \"Wrong size of locale's blob\");\n\n/* en_IE.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_7463067acfeef9fa906e275343566ac4a7697f98cf3a2d4faaaaa7c66edbc53d[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7463067acfeef9fa906e275343566ac4a7697f98cf3a2d4faaaaa7c66edbc53d) == 36, \"Wrong size of locale's blob\");\n\n/* en_NZ.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_a21e3b78c7fe292bb8f293f26be79187bdd8c487daa7c8556eaa3239a4abe5a0[] = {\n    0x4E,0x5A,0x44,0x20,0x0A,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a21e3b78c7fe292bb8f293f26be79187bdd8c487daa7c8556eaa3239a4abe5a0) == 34, \"Wrong size of locale's blob\");\n\n/* en_US.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_18f84e940a580920be7321247ec98d53ba6f18cff8d7e7e8073e177e613b12c2[] = {\n    0x5E,0x5B,0x79,0x59,0x73,0x53,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_18f84e940a580920be7321247ec98d53ba6f18cff8d7e7e8073e177e613b12c2) == 18, \"Wrong size of locale's blob\");\n\n/* en_US.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_42c5d1254969c9958ad364b939807311e67d905f2108b5f15d4ce3e7992b440a[] = {\n    0x55,0x53,0x44,0x20,0x0A,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_42c5d1254969c9958ad364b939807311e67d905f2108b5f15d4ce3e7992b440a) == 34, \"Wrong size of locale's blob\");\n\n/* en_US.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_cfb9a008a84956315792e9d73cc626e089d7432e80d87f65fb95c58c5d574508[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cfb9a008a84956315792e9d73cc626e089d7432e80d87f65fb95c58c5d574508) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed en_US.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_6f0416f4e53000cb35060d9c639baa6fb8d8ebafd59806b0d5099e2f707a3387[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5C,0x0E,0x43,0xBC,0x00,0x00,\n    0x38,0x5F,0x80,0x00,0x10,0x42,0x00,0x80,0x10,0x25,0x73,0xCC,0xF0,0x3E,0xE7,0xDF,\n    0x20,0x30,0x00,0xE6,0x56,0x12,0x9A,0x93,0x24,0xDA,0x86,0xD4,0x34,0xC4,0x68,0x34,\n    0x60,0x9E,0xA1,0x86,0x46,0x9A,0x69,0x91,0x84,0xC8,0xC1,0x34,0x06,0x04,0x92,0x6A,\n    0x68,0x8F,0x53,0x46,0x8D,0x32,0x03,0x20,0x3D,0x4D,0xA9,0x3C,0x2E,0x95,0x8E,0xD3,\n    0xD9,0xF3,0x71,0x37,0x99,0xD0,0x4D,0x6D,0xF6,0x30,0xC8,0x83,0x64,0x8A,0xB7,0x90,\n    0xA2,0x6F,0x22,0x89,0x6B,0x0D,0x69,0x20,0xBA,0x3E,0xA5,0xC1,0x41,0xC6,0x7A,0x2D,\n    0x49,0x16,0xDC,0x60,0x1D,0x8C,0x13,0x50,0x21,0xC8,0x72,0xAF,0x6C,0x7E,0x5A,0x52,\n    0xCC,0xDE,0x84,0xC1,0xF7,0xC3,0x8E,0x92,0x61,0x90,0x98,0x0F,0x6A,0x2B,0x30,0xDC,\n    0x6C,0x1D,0x32,0x38,0xD6,0x5A,0x68,0x30,0x3A,0x31,0x26,0x9D,0xE3,0x55,0x3A,0xE5,\n    0x08,0x34,0x60,0x5B,0x59,0x35,0x35,0x42,0x67,0x92,0x65,0xEB,0x20,0x25,0x20,0xA8,\n    0xA1,0x70,0x3D,0xC2,0x2B,0x90,0xD7,0xE2,0xF2,0xD4,0x91,0x75,0x04,0x8B,0xC9,0xB4,\n    0x63,0x83,0x22,0x94,0x6A,0x86,0x71,0x1B,0xC7,0x8E,0xB0,0x78,0x5D,0x59,0x51,0xC3,\n    0x99,0x1B,0x07,0x21,0x4C,0x0D,0x46,0x05,0xAB,0xB8,0x72,0x18,0xBE,0xCF,0xC6,0x2A,\n    0x5A,0x12,0x20,0x0C,0x32,0x2A,0x2E,0xE4,0x8A,0x70,0xA1,0x20,0xB8,0x1C,0x87,0x78\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6f0416f4e53000cb35060d9c639baa6fb8d8ebafd59806b0d5099e2f707a3387) == 240, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed es_ES.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_8dac8c0bc923a2309ac59deebf58f1ca69030a1519db7e1d5b2459a3ada7c9e7[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x58,0x31,0x75,0x16,0x00,0x05,\n    0xB3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x03,0x1A,0xD4,0x8B,0x1C,0x00,0x1D,0x26,0x86,0x80,0xC4,0x00,\n    0x18,0x4D,0x31,0x00,0x00,0x34,0x64,0x61,0x18,0x9A,0x62,0x03,0xCA,0x7A,0x86,0x40,\n    0x00,0x03,0x40,0xC1,0x06,0x98,0x01,0x31,0x34,0x64,0xC4,0x61,0x00,0x07,0x9F,0xAA,\n    0x27,0xA9,0xE5,0x4D,0xB4,0xD3,0x40,0x34,0x69,0x41,0x93,0x11,0x89,0x88,0xC4,0x31,\n    0x18,0x4C,0x26,0x00,0x0D,0x44,0x21,0xA1,0x93,0x40,0xDF,0x94,0xA3,0x43,0x40,0x34,\n    0x32,0x00,0x69,0xA6,0x08,0x68,0x0D,0x03,0x46,0x99,0x00,0x00,0xC8,0xD0,0xD1,0x88,\n    0xC0,0xD0,0x8C,0x81,0xEA,0x34,0x33,0x50,0xD0,0xF4,0xD1,0x31,0x06,0x43,0xFD,0x35,\n    0x3D,0xEA,0x55,0x32,0x34,0x06,0x81,0x84,0x03,0x40,0x34,0xD0,0x32,0x03,0x41,0x82,\n    0x00,0x00,0x01,0x11,0x53,0xF6,0x84,0x51,0xFA,0x94,0x06,0x9A,0x34,0x34,0x68,0x00,\n    0x34,0x64,0x68,0x0C,0x40,0x34,0x1A,0x00,0x34,0x64,0x64,0x34,0xC2,0x00,0x64,0x06,\n    0x04,0x00,0x68,0x06,0x81,0xA6,0x80,0x03,0x4D,0x34,0x64,0x0C,0x4C,0x83,0x4D,0x34,\n    0x00,0x1A,0x03,0x26,0x80,0x19,0x34,0x03,0x41,0xA3,0x40,0x1B,0xD5,0x08,0x9F,0xEA,\n    0x54,0x92,0x4F,0x50,0x00,0x00,0x00,0x1E,0xA0,0x00,0x01,0xA0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x06,0x64,0x33,0xA1,0x12,0x1B,0x78,0xF4,0x25,0x65,0xD9,0xDA,\n    0x14,0xCA,0x95,0x4B,0xA6,0x53,0x69,0xD4,0xF6,0x9A,0x83,0x55,0x46,0xA4,0xD7,0x53,\n    0xAA,0x55,0x5B,0x2A,0xD5,0x76,0xDA,0xC5,0x66,0xB5,0x5B,0xE8,0x57,0xAB,0xF6,0x0B,\n    0x0D,0x8A,0xC6,0xDD,0x64,0xB2,0xB7,0xE9,0x74,0xDA,0x7D,0x46,0xA7,0x54,0xD5,0xAB,\n    0xD6,0x35,0xB6,0x6B,0x75,0xCD,0xAD,0xCD,0xEE,0x1A,0xFD,0x83,0x8B,0x93,0x9B,0x9B,\n    0xA3,0xA6,0xC8,0xB5,0x9B,0x33,0x5B,0x4D,0xB9,0x93,0x26,0x8D,0xAB,0xDD,0xBC,0x3C,\n    0xEF,0x77,0xC5,0xF0,0x14,0xF1,0x78,0xFC,0x8E,0x4F,0x0D,0xF3,0x3D,0x01,0xA3,0xD2,\n    0x40,0xC1,0x41,0xC2,0x42,0xC3,0x2B,0x87,0xE7,0x74,0x65,0x95,0xE9,0xB5,0x51,0x6B,\n    0x35,0xBA,0xED,0x7E,0xC2,0x39,0x6E,0xC7,0x65,0x2A,0xB3,0x6B,0xB6,0x5D,0x20,0xBE,\n    0x4B,0x6F,0x27,0x2B,0xB9,0xDD,0x6E,0xD7,0x4B,0x49,0x4B,0xEF,0xB9,0xA7,0x38,0x07,\n    0x8F,0x89,0x32,0x28,0xCA,0x7C,0x43,0xA1,0x20,0x94,0x69,0x53,0x27,0x28,0x72,0xBD,\n    0x8A,0x8E,0xAB,0x2C,0x54,0x69,0x16,0x20,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,\n    0x00,0x00,0x94,0xA5,0x29,0x4A,0x52,0x94,0xA5,0x29,0x8E,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x0A,0x30,0xC6,0x2F,0x3A,0x87,0x3B,0x0C,\n    0x7B,0x03,0xEE,0x0E,0x73,0x9D,0x49,0x7D,0x0C,0x61,0xA4,0x0C,0x63,0x70,0xB8,0x7C,\n    0x4E,0x2A,0x10,0x84,0x21,0x08,0x42,0x10,0x85,0x0D,0x1F,0x09,0x03,0xB3,0x53,0x8C,\n    0x7E,0x38,0xE7,0x08,0x3A,0x74,0xEA,0x20,0x00,0x20,0xF1,0x28,0xCF,0x9F,0x3E,0x4C,\n    0xC4,0xC2,0x41,0x04,0x11,0x2C,0xC8,0xBD,0xF1,0x45,0x14,0x51,0x86,0x94,0x94,0x19,\n    0x30,0xC9,0xD3,0x4D,0x28,0x40,0x81,0x02,0x91,0xC7,0x1D,0x42,0x12,0x95,0x10,0x41,\n    0x0A,0xD1,0x22,0x2C,0x92,0x49,0x58,0x4A,0x44,0x89,0x52,0xA8,0x4C,0xA1,0x3A,0x72,\n    0x8A,0x28,0xB2,0xCB,0xF7,0x7B,0xFE,0x1F,0x19,0xB9,0xCF,0x94,0xEC,0xF4,0xFF,0xCF,\n    0xE9,0x41,0x43,0x45,0xF5,0xA3,0xA4,0xA5,0xFB,0x7D,0xE9,0xA9,0xEA,0x3F,0x1F,0x9F,\n    0xD5,0x4D,0x55,0x5F,0xEF,0xF9,0x59,0x5B,0x5D,0x5F,0xFD,0xB0,0xB1,0xB2,0xB3,0xFF,\n    0x5A,0x5A,0xDB,0x5B,0xDC,0x5C,0xDD,0x5D,0xDE,0x5E,0xDF,0x5F,0xE0,0x5B,0x2D,0x43,\n    0xE0,0x9A,0x93,0x12,0x43,0x09,0x83,0x5D,0x36,0xB4,0xC3,0x13,0x11,0x8C,0x63,0x48,\n    0xAF,0x5D,0xB4,0x5A,0xB6,0x31,0x64,0x3A,0xB8,0x58,0x27,0xF7,0xFD,0x03,0xE2,0xA2,\n    0x90,0x84,0x21,0x08,0x42,0x14,0xA5,0x29,0x4A,0x52,0x95,0x52,0xA2,0x90,0x8C,0xEC,\n    0xF6,0x0A,0xFB,0x25,0x29,0xA4,0x08,0x00,0x00,0xC8,0xA4,0x20,0x10,0x08,0xA5,0x29,\n    0x4A,0x52,0x94,0xA5,0x28,0xA8,0x5D,0x75,0x97,0x5D,0x75,0x97,0x68,0x21,0x08,0x42,\n    0x10,0x8B,0x2E,0x86,0x71,0x11,0x11,0x33,0x30,0x80,0x00,0x7F,0x02,0x92,0x91,0x82,\n    0x33,0x14,0x41,0x82,0x88,0xB0,0xC1,0xD2,0x96,0x0A,0x94,0x81,0xCC,0x63,0x88,0x88,\n    0x09,0x81,0x22,0x22,0x93,0x88,0xA0,0xA5,0x30,0x1C,0xA8,0x42,0x0E,0x84,0x95,0x29,\n    0x03,0x98,0xC7,0x11,0x10,0x13,0x02,0x44,0x45,0x27,0x11,0x41,0x4A,0x60,0x58,0x09,\n    0x56,0xAA,0xB5,0xAA,0xAF,0xEF,0xE5,0x55,0xAA,0xFE,0xFA,0x55,0x5A,0xA4,0x96,0xAA,\n    0xB5,0xAD,0x52,0x4B,0x5A,0xA4,0x96,0xAA,0xB5,0x55,0x54,0x92,0xD5,0x24,0xAA,0x92,\n    0x5A,0x49,0x6A,0xA9,0xEB,0x5D,0x50,0x00,0x00,0x5D,0x20,0x00,0x00,0x00,0x00,0x00,\n    0x01,0xEB,0xC8,0x1F,0xA4,0x9E,0xDC,0x80,0x00,0x00,0x00,0x0B,0xE4,0x00,0xF2,0x64,\n    0x03,0x02,0xF5,0x5D,0x70,0x01,0x81,0x75,0x5D,0x70,0x10,0x40,0x05,0x2A,0x54,0x49,\n    0x24,0x96,0x44,0x90,0x02,0xFB,0xB1,0xBA,0xE0,0x30,0x58,0x18,0x2B,0xD7,0xA2,0x00,\n    0xC2,0xB0,0x2F,0x5E,0xBD,0x48,0x55,0xA5,0x49,0xFF,0x55,0xD1,0x57,0x4B,0x54,0x82,\n    0x92,0xD5,0x20,0xBA,0x91,0x4A,0x5D,0x56,0x89,0x05,0xD4,0x82,0x97,0x5A,0xA4,0x14,\n    0x95,0x02,0x00,0x02,0x22,0x90,0xAB,0x4A,0x92,0xEB,0xA2,0xAE,0x96,0xA9,0x05,0x25,\n    0xAA,0x41,0x72,0x29,0x4B,0xAA,0xD1,0x20,0xAB,0xA4,0x29,0x75,0xAA,0x41,0x48,0x40,\n    0x80,0x00,0x00,0x22,0xD5,0x56,0xB7,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x20,0xB0,0x62,\n    0xEA,0x2C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8dac8c0bc923a2309ac59deebf58f1ca69030a1519db7e1d5b2459a3ada7c9e7) == 978, \"Wrong size of locale's blob\");\n\n/* es_ES.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_e4a3034b260453ada19cdc910c026fe44b680450a73654615267b28b4b7f9c1c[] = {\n    0x5E,0x5B,0x73,0x53,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e4a3034b260453ada19cdc910c026fe44b680450a73654615267b28b4b7f9c1c) == 18, \"Wrong size of locale's blob\");\n\n/* es_ES.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_411dea4743fbe9e2ba733e9d955348a19850931a9c1298c91af502e443177b8e[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_411dea4743fbe9e2ba733e9d955348a19850931a9c1298c91af502e443177b8e) == 35, \"Wrong size of locale's blob\");\n\n/* es_ES.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_604c017df03b97325bd2b88745eb91f20632593207c3de09967a2eae7e57b999[] = {\n    0x2C,0x0A,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_604c017df03b97325bd2b88745eb91f20632593207c3de09967a2eae7e57b999) == 6, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed es_ES.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_8c6e0e4029aef8b2b4c422b66cd230343cd2530a6efc6b2b312539ae385f0368[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x97,0x60,0xCC,0x32,0x00,0x00,\n    0x5F,0xDF,0x81,0x00,0x10,0x42,0x04,0x80,0x10,0x30,0x62,0x48,0x70,0x3F,0xB7,0xDF,\n    0x30,0x20,0x20,0x30,0x00,0xEB,0x0C,0x25,0x53,0xD4,0xC8,0x36,0xA3,0x42,0x68,0xC0,\n    0x00,0x26,0x11,0x3D,0x4D,0x40,0x00,0x1A,0x06,0x4F,0x44,0x00,0x24,0x84,0x54,0xFC,\n    0x9A,0x21,0x91,0x30,0x00,0x1A,0x0B,0x9E,0x55,0x52,0x8D,0xD6,0x23,0x34,0x39,0xC0,\n    0x2E,0xDA,0xEC,0x1B,0x19,0xE7,0x1C,0x30,0xED,0x0A,0x91,0x5B,0x13,0x07,0xBC,0x46,\n    0x74,0xA3,0xD0,0x91,0x42,0x20,0x04,0xD9,0x21,0x80,0xF3,0x61,0xBB,0x3D,0x01,0x34,\n    0x89,0x64,0xD0,0xA3,0x00,0x12,0xC6,0xCE,0x64,0x11,0xE8,0x4F,0xA0,0x2A,0x15,0x72,\n    0x19,0x03,0x2D,0x8C,0xAE,0x03,0xEE,0x33,0x7D,0x92,0x0F,0x83,0x13,0x20,0xCD,0x73,\n    0xE2,0xAB,0xAC,0xB0,0x7F,0x31,0x30,0xEA,0xC1,0x4B,0x6B,0x2A,0x7B,0x52,0x15,0x17,\n    0x34,0xF5,0x2A,0x76,0x7E,0xCD,0xEE,0xFA,0xA8,0xC1,0x60,0xA6,0xBD,0x14,0x1E,0xE3,\n    0x2B,0x15,0x1C,0xB8,0x0B,0x5E,0x62,0xE4,0x17,0xC6,0xA8,0x03,0x21,0x43,0x93,0x21,\n    0x35,0xA8,0xE4,0x95,0x3E,0x92,0x26,0x31,0xE8,0xF9,0x03,0x6A,0x28,0xB1,0xA9,0x23,\n    0x4A,0xD1,0x82,0xCB,0x73,0x66,0xE0,0xA1,0x10,0x99,0x17,0x2C,0x46,0x2D,0x86,0x66,\n    0xD2,0x0D,0x27,0x84,0x16,0x08,0x4A,0xE7,0x42,0x22,0xC0,0xA3,0x8A,0xCF,0x45,0xDC,\n    0x91,0x4E,0x14,0x24,0x25,0xD8,0x33,0x0C,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8c6e0e4029aef8b2b4c422b66cd230343cd2530a6efc6b2b312539ae385f0368) == 249, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed es_ES.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_1616870bd2dd62823c53997242824d0bfc27744ed6fb5522ab4006da01b02508[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xEA,0x49,0x99,0xB0,0x00,0x05,\n    0xBA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x03,0x1A,0xD4,0x9B,0x47,0x00,0x09,0x34,0x64,0x30,0x80,0xC9,\n    0x89,0xA0,0x0C,0x99,0x1A,0x30,0x41,0x90,0x61,0x01,0xE9,0xA2,0x32,0x34,0xF2,0x04,\n    0x64,0x61,0xA4,0x03,0x01,0x19,0x19,0x1A,0x06,0x80,0x68,0xC9,0xA3,0x08,0xC9,0x93,\n    0x4C,0xFF,0x55,0x4F,0x53,0xD4,0xF2,0x6F,0x54,0xD9,0x14,0xF6,0x8C,0x81,0xA5,0x32,\n    0x19,0x32,0x69,0x93,0x13,0x4C,0x98,0x21,0xA0,0x00,0x34,0x03,0x41,0x04,0xC8,0xD1,\n    0xA6,0x8F,0x53,0x6A,0x6F,0xD4,0xA6,0x26,0x80,0x0C,0x8C,0x46,0x9A,0x32,0x34,0x00,\n    0x0D,0x06,0x8C,0x40,0x64,0xC8,0x32,0x62,0x1A,0x3C,0xA7,0x92,0x7A,0x9E,0xA0,0x7A,\n    0x81,0xEA,0x6D,0x46,0x23,0xD1,0x34,0xD3,0xD4,0x62,0x7A,0x83,0xF3,0x3D,0x52,0x48,\n    0x07,0xA9,0x90,0xD1,0xA3,0x4C,0x10,0x01,0x88,0x69,0xA0,0xD0,0xC8,0xD3,0x40,0x68,\n    0x0D,0x01,0xA0,0x04,0x44,0xDA,0x9B,0x54,0xD3,0xD5,0x4F,0x48,0x0C,0x21,0x90,0x01,\n    0xA1,0x84,0x03,0x43,0x4D,0x34,0xD0,0x00,0x00,0x19,0x18,0x80,0x00,0x34,0x0D,0x19,\n    0x34,0x03,0x40,0x68,0x06,0x83,0x20,0x00,0x7A,0x80,0x00,0x30,0x80,0x34,0x00,0x00,\n    0x03,0x40,0x34,0x00,0x1A,0x1A,0x03,0x47,0xB5,0x06,0x9E,0x94,0xA9,0x34,0xD4,0xC2,\n    0x69,0x93,0x23,0x04,0xC4,0x62,0x69,0xB4,0x26,0x8C,0x98,0x9A,0x69,0x84,0x69,0xA3,\n    0x04,0x62,0x34,0xC9,0x80,0x81,0x82,0x60,0x26,0x86,0x02,0x64,0xC8,0x68,0xC4,0x18,\n    0x98,0x13,0x43,0x23,0x23,0x10,0xC8,0x68,0xC8,0x19,0x18,0x26,0x21,0x80,0x01,0x30,\n    0x43,0x09,0x84,0x18,0x81,0xA1,0xA1,0x8B,0x0C,0x90,0x66,0x03,0x52,0xDD,0x24,0xD1,\n    0x86,0xAA,0x9D,0x36,0x72,0x9D,0xCF,0x27,0xB3,0xE9,0xFD,0x01,0xCD,0xD1,0xD5,0xDA,\n    0x83,0x42,0xA1,0xBB,0xBC,0x51,0x28,0xB4,0x6A,0x3D,0x22,0x93,0x4A,0xE4,0xD3,0x5E,\n    0x69,0xD4,0xFA,0x83,0xD3,0xDB,0xE3,0xED,0x45,0xCB,0x39,0x9D,0xCF,0x67,0xDC,0xDD,\n    0x34,0x1A,0x1D,0x16,0x8D,0xD5,0xD9,0xDD,0xE3,0x49,0xA5,0xD3,0x69,0xF5,0x1A,0x93,\n    0x06,0x0C,0x99,0x7A,0x2D,0x6B,0xE1,0xB7,0xD7,0xE3,0x46,0x8D,0xC0,0x40,0xC1,0x41,\n    0xEB,0xF6,0x05,0xC2,0xA9,0x88,0x39,0x15,0xB3,0xDA,0x1C,0xD1,0x25,0x4D,0xA3,0x4E,\n    0xA2,0x33,0x48,0xA7,0x4A,0xAB,0x9E,0xA7,0x4F,0xAC,0xD4,0xEB,0x96,0x46,0xAD,0xD8,\n    0xC7,0x47,0xC8,0x6C,0xE5,0xB5,0xFA,0xD9,0x2D,0xAC,0x9E,0xC2,0x51,0x7E,0xE3,0x73,\n    0xBA,0x61,0xBB,0xDE,0x4A,0x6F,0x4E,0x9E,0x32,0x13,0x1B,0xFE,0x07,0x09,0x05,0x3A,\n    0x15,0x1D,0x11,0x87,0x47,0xD4,0x4A,0x99,0x39,0x2A,0x56,0x8F,0x4C,0xAD,0x61,0x67,\n    0xD2,0xAD,0x42,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x04,0x10,0x41,0x04,0x10,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x60,0x0E,0x2E,0x41,0x49,0xE7,0x1E,0x79,0x55,0x14,0xA5,0x29,0x4A,0x7B,\n    0x0C,0xFA,0xC3,0xA4,0xCE,0x38,0xE3,0xB8,0x7C,0x4E,0x29,0x8C,0x63,0x18,0xC6,0x31,\n    0x8C,0x62,0x9E,0xAE,0x31,0x3A,0xE2,0xB2,0x37,0x19,0x92,0x13,0x2C,0x58,0xB1,0x9A,\n    0x98,0x3A,0x75,0x17,0x5C,0x74,0x67,0x8F,0x1E,0x1D,0x21,0xFE,0xCA,0x04,0x08,0x12,\n    0x90,0x29,0xC1,0x08,0x42,0x14,0xF0,0x93,0x09,0x3A,0x64,0x44,0x8C,0x30,0xC5,0x0E,\n    0x38,0xE4,0xA3,0x50,0xA5,0x22,0x44,0x8A,0x95,0xA5,0x58,0x41,0x04,0x16,0xB4,0x92,\n    0x4A,0x25,0x49,0x45,0x14,0xA1,0x52,0xA2,0xCB,0x2F,0xB5,0x53,0x55,0xDB,0xEE,0x77,\n    0x6A,0xEB,0x3B,0xD5,0xB5,0xDD,0xFA,0xFF,0x05,0x85,0x8F,0x86,0xCA,0xCE,0xD3,0xC5,\n    0x6B,0xE3,0xB6,0xB7,0xF2,0x5C,0x5C,0xDD,0x5D,0xFA,0x26,0x3D,0x3E,0xAF,0x5F,0xB3,\n    0xDB,0xEE,0xF7,0xFC,0x3E,0x3F,0x2F,0x9F,0xD2,0x67,0xEB,0xF6,0xFB,0xCD,0x7E,0x3F,\n    0x3F,0xAF,0xDF,0xF3,0xFB,0x37,0xFE,0xFF,0xB8,0x9A,0x66,0x4F,0x4D,0xC1,0x90,0xDE,\n    0x68,0x85,0x0B,0x42,0x32,0x00,0x0D,0xDB,0xB7,0x90,0xD2,0xAF,0xDB,0x2E,0x5D,0x1F,\n    0x1C,0xB5,0x6A,0xBD,0x56,0xA1,0x52,0x85,0x09,0x92,0xC5,0xC5,0xB3,0x24,0x45,0x62,\n    0x21,0x08,0x42,0x10,0x89,0x12,0x10,0x84,0x21,0x08,0x42,0x24,0xB5,0x59,0x6D,0x28,\n    0xD1,0xB6,0xB6,0xDA,0x11,0x22,0x6C,0xD9,0xD4,0x0C,0x00,0x00,0xE4,0x70,0x03,0x00,\n    0x19,0x4A,0x52,0x94,0xA5,0x29,0x4A,0x3A,0x58,0x61,0xA3,0x0C,0x30,0xD1,0x86,0xA6,\n    0x31,0x8C,0x63,0x19,0xA3,0x09,0x6A,0x22,0x22,0x28,0x3A,0xC8,0x10,0x00,0x09,0xB0,\n    0x70,0xC8,0x1C,0xE8,0x06,0x50,0x0B,0x2C,0xB3,0x87,0x0C,0x91,0x32,0x72,0x20,0x5D,\n    0x08,0x5C,0x44,0x40,0x50,0x04,0x22,0x02,0x4B,0x88,0xA4,0x96,0x14,0x1D,0x64,0xAC,\n    0x44,0x49,0x49,0x1C,0x88,0x17,0x42,0x17,0x11,0x10,0x14,0x01,0x0A,0x57,0x05,0xC9,\n    0x2B,0x89,0x1C,0x93,0x14,0xD2,0x4A,0x21,0x44,0x25,0x39,0x9A,0x71,0x10,0xA6,0xA6,\n    0x5C,0x44,0x26,0xDA,0x84,0xA2,0x13,0x6D,0x42,0x6D,0xC2,0x50,0x92,0x4D,0xB8,0x4D,\n    0xB4,0x9B,0x70,0x9B,0x70,0x93,0xDC,0xC9,0x30,0x00,0x00,0x00,0x00,0x24,0xD8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x9B,0x00,0xFD,0x9B,\n    0xDE,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x06,0x00,0x01,0xF4,0xB6,\n    0x00,0x13,0x73,0x0A,0x52,0x00,0x00,0x09,0xB9,0x29,0x48,0x01,0x80,0xC0,0x00,0x00,\n    0x43,0x63,0x6E,0x06,0x03,0x6C,0x00,0x02,0x71,0xEE,0xCA,0x40,0x01,0x33,0x37,0x32,\n    0xA4,0x13,0x03,0x18,0x13,0x99,0xB9,0x89,0x4C,0x30,0x50,0xD3,0x7F,0xF2,0x93,0x14,\n    0x9C,0x26,0xC0,0x43,0x84,0xD8,0x12,0x43,0x10,0x89,0x28,0x68,0x6C,0x09,0x21,0x35,\n    0x26,0x9B,0x84,0xD8,0x08,0x69,0x90,0x00,0x30,0x00,0x00,0x10,0xC1,0x43,0x4D,0xCA,\n    0x4C,0x52,0x70,0x9B,0x01,0x0E,0x13,0x60,0x48,0x62,0x11,0x25,0x0C,0x4D,0x80,0xA4,\n    0x35,0x26,0x9B,0x84,0xD8,0x08,0x63,0x6C,0x60,0xC6,0x30,0x00,0x00,0x18,0xC0,0x64,\n    0x28,0x88,0xFF,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x3A,0x92,0x66,0x6C,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1616870bd2dd62823c53997242824d0bfc27744ed6fb5522ab4006da01b02508) == 1038, \"Wrong size of locale's blob\");\n\n/* es_ES.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_0e9d9259ac18798c53ef064e9c9bd15a7a6a5c08c6d5e2ef6ec511c026e852e2[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0e9d9259ac18798c53ef064e9c9bd15a7a6a5c08c6d5e2ef6ec511c026e852e2) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed es_ES.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_bfe2fdef2cbc187f8b5fe55d9ef737a0b01d222d738dbfed106cd04bfe5726e5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5C,0x24,0xF9,0xC3,0x00,0x00,\n    0x5F,0xDF,0x94,0x00,0x10,0x42,0x04,0x80,0x10,0x30,0x62,0x48,0x70,0x3F,0xB7,0xDF,\n    0x30,0x20,0x20,0x08,0x00,0x30,0x00,0xEB,0x00,0xD5,0x3D,0x4D,0xA4,0x1A,0x34,0x68,\n    0x0D,0x34,0x68,0x34,0x00,0x89,0xEA,0x6A,0x00,0x68,0x0D,0x03,0x26,0x20,0x00,0x92,\n    0x11,0x53,0xF0,0x8A,0x66,0x4D,0x4C,0x43,0x4C,0x86,0x69,0xA8,0x53,0xF4,0x65,0x64,\n    0x7B,0x24,0x3C,0x87,0x2E,0x01,0xBB,0xB5,0xC7,0x20,0xF6,0x10,0x40,0xEC,0x83,0x09,\n    0x46,0x94,0x05,0xAC,0x12,0x3A,0x50,0x59,0x09,0x10,0x22,0x00,0x4D,0x8B,0x8C,0x07,\n    0x9A,0xCD,0xB9,0x66,0x09,0x84,0x49,0x26,0x04,0x18,0x00,0x92,0x35,0x6A,0xE0,0xE7,\n    0xB8,0x9F,0x40,0x44,0x2A,0xE4,0x32,0x06,0x5A,0x32,0xB0,0x1B,0x65,0x37,0xD2,0x41,\n    0xE4,0x62,0x64,0x1A,0xAE,0x9F,0x0A,0xBC,0x0B,0x87,0xA3,0x13,0x0E,0xAC,0x14,0xBF,\n    0x02,0xA7,0x85,0x21,0x51,0x74,0x4F,0x52,0xA7,0x67,0xEC,0xDE,0x30,0xAA,0x8C,0x56,\n    0x2A,0x6B,0xB9,0x41,0xEC,0x67,0x72,0xA3,0x96,0x02,0xF8,0x19,0x39,0x06,0x11,0xBE,\n    0x00,0xCC,0x50,0xE4,0xC8,0x4D,0x7A,0x39,0x25,0x4D,0x89,0x13,0x18,0xEE,0x79,0x81,\n    0xB7,0x94,0x59,0x54,0x91,0xB9,0x7A,0xE2,0xB3,0xE4,0xDA,0xB8,0x28,0x44,0x26,0x45,\n    0x96,0x43,0x17,0xC7,0x53,0x89,0x06,0xE3,0x61,0x71,0x18,0xAD,0xAC,0xE3,0x5D,0x5C,\n    0xFE,0x0B,0x9A,0x1F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x0B,0x84,0x9F,0x38,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bfe2fdef2cbc187f8b5fe55d9ef737a0b01d222d738dbfed106cd04bfe5726e5) == 255, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed et_EE.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_69f1ad33fc86e4dc933737fbbf66efc63ca712ead6eafaa121de17ed1735f85d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x6C,0xA6,0xB2,0x0C,0x00,0x05,\n    0xB2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFB,0x69,0x16,0x1C,0x00,0x40,0x13,0x04,0x18,0x01,0x32,\n    0x68,0xC4,0x62,0x64,0xD3,0x00,0x46,0x10,0xD3,0x4C,0x41,0x80,0x99,0x34,0x64,0xC0,\n    0x11,0x93,0x02,0x69,0xE8,0x23,0xD2,0x6C,0xFD,0x2A,0x31,0x4C,0x02,0x32,0x60,0x00,\n    0x04,0xD3,0x26,0x4C,0x08,0xC2,0x64,0xC0,0x00,0x26,0x8C,0x00,0x02,0x34,0xD1,0x88,\n    0xC0,0x09,0xE5,0x04,0x8C,0x8C,0x98,0x9A,0x62,0x31,0x03,0x23,0x4F,0xF5,0x35,0x4D,\n    0x0C,0x8C,0x86,0x9A,0x0D,0x32,0x18,0x81,0x88,0xD1,0xA1,0x93,0x20,0xCD,0x23,0x34,\n    0x4C,0x6A,0x66,0xA7,0x93,0xD5,0x3C,0xA6,0xF6,0xA9,0xFF,0xA9,0x54,0x0C,0x20,0x06,\n    0x43,0x23,0x4D,0x0D,0x34,0x32,0x31,0x03,0x20,0x0C,0x20,0xC8,0x0D,0x34,0xD0,0x62,\n    0x64,0x1A,0x19,0x0D,0x34,0xD0,0x69,0x88,0xD3,0x40,0xA9,0xFA,0xAA,0x9F,0xE9,0xE9,\n    0x1E,0xAA,0x7A,0x90,0xD1,0xA6,0x8D,0x1B,0x48,0x1E,0xF5,0x50,0x7A,0x40,0x00,0x00,\n    0x00,0x1A,0x00,0x00,0x00,0x00,0x19,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x34,0x00,0xF4,0xF5,0x41,0xA9,0xFA,0x55,\n    0x2A,0x7A,0x98,0x08,0xC0,0x00,0x46,0x00,0x00,0x00,0x13,0x43,0x09,0x80,0x00,0x00,\n    0x00,0x00,0x00,0x02,0x64,0x69,0xA6,0x26,0x09,0x81,0x30,0x13,0x00,0x00,0x00,0x00,\n    0x00,0x09,0x80,0x02,0x60,0x00,0x04,0x69,0x93,0x11,0xA1,0xA3,0x41,0x20,0x4B,0x24,\n    0xA6,0x9B,0x38,0x07,0x20,0x64,0x32,0x29,0x1C,0x14,0x92,0x4B,0x07,0x26,0x84,0x93,\n    0xCA,0x21,0x65,0x32,0xA8,0x67,0x90,0xF2,0xB9,0x65,0x6A,0x5E,0xF5,0x73,0x09,0x8C,\n    0xCA,0x66,0xFA,0x22,0x69,0x35,0x9B,0x4D,0xE7,0x13,0x99,0xD4,0xEE,0x79,0x8D,0x6D,\n    0xC7,0x63,0xF2,0x19,0x16,0xEC,0x93,0x7B,0x86,0x4F,0x29,0x95,0x71,0x71,0x72,0xCF,\n    0xBA,0x1F,0x0F,0x9C,0xD7,0xBA,0x3A,0x9E,0xF2,0xEE,0xEE,0xFE,0xFF,0x00,0x92,0x1D,\n    0xEB,0x63,0x20,0x8D,0x56,0xAD,0x24,0x56,0x95,0xF9,0x32,0x35,0x09,0x93,0x6A,0x92,\n    0xBE,0x3B,0x0C,0x7C,0x7F,0x74,0x1A,0xFE,0xF6,0x30,0x63,0xD7,0x94,0x68,0x0A,0x06,\n    0x08,0x87,0x90,0x70,0xD1,0xC2,0x10,0xF0,0x10,0x8E,0xDF,0x80,0x00,0x00,0x00,0x00,\n    0xCC,0x00,0x00,0x00,0x00,0x0C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x19,0xF8,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x54,0x7E,0xB2,0x12,0x2D,\n    0xF5,0x05,0x10,0xA9,0x74,0x2F,0xBA,0xD7,0xB0,0x6D,0x06,0x9E,0x26,0x12,0x07,0x46,\n    0x9D,0x2C,0x1C,0x52,0x11,0x08,0xD0,0x80,0x41,0x22,0x75,0x09,0xCF,0x83,0x50,0xA5,\n    0x05,0x2A,0x41,0xF1,0x09,0x94,0xFA,0x93,0x82,0xEB,0xA0,0x07,0x0E,0x82,0x20,0x44,\n    0x42,0x10,0x84,0x40,0x91,0x1F,0x34,0x1C,0x24,0x2C,0x34,0x3C,0x44,0x4C,0x57,0x9F,\n    0xD1,0x17,0x19,0xE9,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,\n    0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0xF5,0x4F,0xFA,0xE8,0x28,0x7D,0x94,0x54,0x7E,\n    0xDA,0x4A,0x5A,0x6A,0x7A,0x8A,0x9F,0x77,0xBE,0xAA,0xAE,0xB2,0xB7,0xE1,0x5D,0x5F,\n    0xF1,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,\n    0xBF,0xF9,0x60,0x7C,0xFE,0x98,0x38,0x58,0x78,0x98,0xB8,0xD8,0xF9,0x19,0x39,0x59,\n    0x79,0x99,0xB9,0xD9,0xFA,0x1F,0x5F,0xB6,0x8F,0xDF,0x4B,0xF1,0xF9,0xD3,0xD4,0xD5,\n    0xFD,0x7E,0xF5,0xB5,0xF6,0x36,0x76,0xB6,0xF7,0x37,0x77,0xB7,0xFF,0x84,0xCA,0x7F,\n    0x4A,0x14,0xFF,0x13,0xEF,0xB9,0x36,0xB9,0x12,0x24,0x4B,0xBC,0x03,0xC7,0x8F,0x00,\n    0x00,0x00,0x00,0x14,0xA5,0x89,0x29,0x4A,0x54,0x0A,0x81,0x4B,0x17,0x74,0x38,0xE3,\n    0x8E,0x44,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x0E,0x63,0x44,0x89,0xEB,\n    0xD7,0xAB,0x5A,0xD6,0xB5,0xAD,0x6B,0x87,0x79,0x0D,0x0A,0xF2,0x12,0x0E,0x06,0x09,\n    0xD6,0x10,0x84,0x21,0x08,0x33,0x33,0x33,0x33,0x33,0x06,0xDB,0x6A,0x52,0x90,0xC3,\n    0x0C,0x30,0xC3,0x0A,0x52,0x94,0xA5,0x28,0x88,0x88,0x88,0x88,0x88,0x88,0x99,0x22,\n    0x4A,0x52,0x94,0xA1,0x0C,0xBF,0x7D,0x10,0x00,0x00,0x30,0x03,0xE4,0xC7,0xBA,0xC9,\n    0x47,0xBA,0xEB,0xA4,0x40,0x3F,0x7E,0x94,0x91,0x25,0x2E,0x39,0x00,0xE0,0x0E,0x38,\n    0xD3,0x40,0x00,0x03,0x4D,0x36,0x66,0x6D,0x99,0x98,0x00,0x00,0x01,0x12,0x52,0x66,\n    0x44,0x03,0x28,0x20,0x00,0x00,0x00,0x80,0x00,0x22,0x6C,0xDA,0x69,0xA6,0x80,0x33,\n    0x75,0xD2,0x22,0x24,0xA4,0x00,0x28,0xB4,0x5B,0xE0,0x4A,0x10,0x84,0x21,0x04,0xA2,\n    0xA3,0x51,0xB8,0x90,0x50,0x4A,0x29,0xB8,0x28,0x24,0xDB,0x50,0x50,0x49,0x36,0xD4,\n    0x13,0x6D,0x28,0x24,0x92,0x6D,0xC2,0x0D,0xB5,0x06,0xDA,0x83,0x6D,0x27,0xD6,0x89,\n    0x11,0x28,0x8D,0xB6,0xDB,0x6D,0xB6,0xC1,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x76,0xC0,0x3F,0xE6,0xFB,0x6D,0x80,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x50,0xC0,0x00,0x00,0x00,\n    0x00,0x00,0x60,0x30,0x01,0x8C,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0xC3,\n    0xF1,0x69,0x80,0x01,0x10,0x62,0x1B,0x1B,0x70,0x18,0x00,0x00,0x84,0xD4,0x71,0xB4,\n    0x91,0x11,0x34,0x09,0x02,0x40,0xA0,0x81,0x02,0x04,0x0A,0x08,0x10,0x20,0x40,0x81,\n    0x20,0x49,0x34,0x34,0x36,0xD0,0x20,0x40,0x86,0x86,0x86,0xD8,0x81,0x24,0x08,0x10,\n    0x20,0x40,0x81,0x02,0x05,0x00,0x42,0x4A,0x10,0x8D,0x10,0x84,0x21,0xFF,0x8B,0xB9,\n    0x22,0x9C,0x28,0x48,0x36,0x53,0x59,0x06,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_69f1ad33fc86e4dc933737fbbf66efc63ca712ead6eafaa121de17ed1735f85d) == 969, \"Wrong size of locale's blob\");\n\n/* et_EE.ISO8859-15 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_016dfb3e92e2f22157e4b345594b3e16f12b506ae13f95a3c9808d227c907570[] = {\n    0x5E,0x5B,0x31,0x4A,0x6A,0x59,0x79,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x30,0x45,0x65,\n    0x4E,0x6E,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_016dfb3e92e2f22157e4b345594b3e16f12b506ae13f95a3c9808d227c907570) == 22, \"Wrong size of locale's blob\");\n\n/* et_EE.ISO8859-15 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_1109cc12365fc18aac1289b5d2f451d30b19d31ed4e8a89558f775d937e17390[] = {\n    0x45,0x45,0x4B,0x20,0x0A,0x6B,0x72,0x0A,0x2E,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1109cc12365fc18aac1289b5d2f451d30b19d31ed4e8a89558f775d937e17390) == 35, \"Wrong size of locale's blob\");\n\n/* et_EE.ISO8859-15 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_26f16ff45b0629f40b8a122a3ec46f245ea85f0c9dab1704c73511832e5bf00c[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_26f16ff45b0629f40b8a122a3ec46f245ea85f0c9dab1704c73511832e5bf00c) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed et_EE.ISO8859-15 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_acf7048e458345b572e34581a699806b7c95659f28ca2b76616c03e2a987c131[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD9,0xCF,0x7E,0xB3,0x00,0x00,\n    0x70,0xDF,0x81,0x80,0x10,0x42,0x05,0x00,0x10,0x32,0x4F,0x5C,0x30,0x36,0xFF,0xDF,\n    0x00,0x04,0x00,0x00,0x04,0x30,0x00,0xE6,0x01,0xA6,0x84,0x90,0x32,0x1E,0xA6,0xD4,\n    0x34,0xD3,0xD4,0xD9,0x46,0x8D,0x03,0x19,0x34,0xC8,0x19,0x34,0x32,0x0C,0x8D,0x30,\n    0x23,0x04,0x52,0x4C,0x98,0x54,0xF4,0x9B,0x50,0x69,0x82,0x03,0x41,0x92,0x27,0x23,\n    0xA4,0xA5,0x7D,0x92,0x8E,0x7C,0xF9,0x7B,0x4C,0x93,0x7C,0x12,0xDB,0x9B,0x08,0x22,\n    0x90,0xF3,0xF2,0x1F,0x52,0x3A,0xA8,0x24,0x76,0x66,0xF8,0x15,0x5C,0x1D,0xA5,0x1C,\n    0xE7,0x0D,0x96,0x42,0xB8,0x25,0x27,0x26,0xC4,0x46,0xD3,0xDC,0x28,0x72,0x8C,0x50,\n    0xAC,0xE9,0x59,0x83,0xE0,0xD2,0xB5,0x17,0x88,0x22,0x18,0x22,0x07,0xA3,0x9B,0x66,\n    0x6F,0x4C,0xA7,0xFC,0x12,0x9B,0xCE,0xB9,0x07,0xE9,0x07,0xB3,0x93,0x14,0x0D,0x24,\n    0x1C,0x9E,0x3C,0x79,0xFA,0xCC,0x8C,0x88,0x79,0x01,0x6B,0x3D,0x47,0xBD,0xED,0xB5,\n    0xC3,0xE2,0xE8,0x63,0x66,0x1C,0xE1,0x75,0x64,0x4A,0xEC,0xFD,0xCA,0x69,0xAE,0x6D,\n    0x6D,0x51,0xC9,0xC4,0x5D,0x86,0x45,0x89,0x3D,0x75,0x36,0x34,0x6A,0xD6,0x5A,0x41,\n    0x7B,0x50,0x35,0x99,0x20,0x83,0xB4,0xE0,0xF0,0x68,0x60,0x66,0xDA,0xB5,0xB9,0x72,\n    0xFD,0xD5,0x91,0x23,0x56,0xAC,0x1A,0x16,0x6C,0x31,0xF2,0x6E,0x1C,0xC7,0x6E,0x18,\n    0x30,0x3B,0x98,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,0xD9,0xCF,0x7E,0xB3\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_acf7048e458345b572e34581a699806b7c95659f28ca2b76616c03e2a987c131) == 254, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed et_EE.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_5444e70cbcd8d2d7cf6801da717befdce8d19b12ca64546fefba5c20a698d33c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x09,0x00,0x41,0xC4,0x00,0x00,\n    0x70,0xDF,0x9C,0x00,0x10,0x42,0x05,0x00,0x10,0x32,0x4F,0x5C,0x30,0x36,0xFF,0xDF,\n    0x00,0x04,0x00,0x00,0x04,0x08,0x00,0x30,0x00,0xE6,0x01,0xA6,0x84,0x90,0x32,0x1E,\n    0xA3,0xD4,0x32,0x3D,0x19,0x46,0x80,0x18,0x68,0x64,0xC8,0x19,0x18,0x83,0x13,0x26,\n    0x86,0x98,0x11,0x49,0x32,0x61,0x4D,0x26,0xD4,0x01,0x89,0xA0,0xD0,0x64,0x44,0xE4,\n    0x7D,0xCA,0x5C,0x6C,0x94,0x73,0xE5,0xC3,0xCA,0x64,0x9B,0x60,0x96,0xDC,0xD7,0xC1,\n    0x14,0x87,0x9F,0x70,0xFA,0x11,0xD5,0x41,0x23,0x06,0x6F,0x41,0x55,0xC1,0xD6,0x51,\n    0xCE,0x70,0xD5,0x64,0x2B,0x7A,0x52,0x72,0x6E,0xA2,0x36,0x9E,0xC1,0x43,0x94,0x62,\n    0x85,0x67,0x4A,0xCC,0x1C,0x4D,0x2B,0x51,0x78,0x82,0x21,0x82,0x20,0x79,0xB9,0xB6,\n    0x66,0xF3,0xCA,0x7F,0xA1,0x29,0xBC,0x6B,0x90,0x7E,0x10,0x72,0x72,0x62,0x81,0xA4,\n    0x83,0x83,0xBF,0x7F,0x1F,0x59,0x91,0x91,0x0F,0x00,0x2D,0x67,0xA0,0xF6,0x3D,0x77,\n    0x38,0x7B,0x9D,0x0C,0x6D,0xC3,0x9C,0x2E,0xAC,0x89,0x5D,0x9F,0xB1,0x4D,0x35,0xCD,\n    0xAD,0xAA,0x39,0x38,0x8B,0xB0,0xC8,0xB1,0x27,0xA6,0xA6,0xD6,0x8D,0x5A,0xCB,0x48,\n    0x2F,0x6A,0x06,0xB3,0x24,0x10,0x75,0x9C,0x1D,0xAD,0x0C,0x0C,0xDB,0x56,0xB7,0x2E,\n    0x5F,0x65,0x64,0x48,0xD5,0xAB,0x06,0x85,0x9B,0x0C,0x7C,0x1E,0x23,0x98,0xEE,0xC3,\n    0x07,0xF0,0x9B,0x07,0xC9,0x8F,0xF1,0x77,0x24,0x53,0x85,0x09,0x00,0x90,0x04,0x1C,\n    0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5444e70cbcd8d2d7cf6801da717befdce8d19b12ca64546fefba5c20a698d33c) == 257, \"Wrong size of locale's blob\");\n\n/* eu_ES.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_253d190bc82c6a13dff85d9291b302e459e81212ed9d1c17e4b2a89bac2d72de[] = {\n    0x5E,0x5B,0x62,0x42,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x65,0x45,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0x62,0x61,0x69,0x0A,0x65,0x7A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_253d190bc82c6a13dff85d9291b302e459e81212ed9d1c17e4b2a89bac2d72de) == 27, \"Wrong size of locale's blob\");\n\n/* eu_ES.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_94632c34889e8beb7e8d090ee6d790fa9d2c4ed6df96133ae389222242d5dbfa[] = {\n    0x2C,0x0A,0x2E,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_94632c34889e8beb7e8d090ee6d790fa9d2c4ed6df96133ae389222242d5dbfa) == 7, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed eu_ES.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_a354b4dfe053b4b7fded780ce8bdcecd38a4aaaffd818ebba3e10963817f25ba[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF5,0xAD,0x13,0x03,0x00,0x00,\n    0x41,0x5F,0x80,0x00,0x10,0x42,0x67,0x80,0x10,0x32,0x62,0x8A,0x70,0x36,0xEF,0xDE,\n    0x50,0x30,0x01,0x15,0xA3,0x61,0x28,0x53,0x09,0xAA,0x79,0x93,0x54,0x79,0x1A,0x9F,\n    0xAA,0x68,0x1B,0x29,0xE5,0x30,0x4A,0x65,0x4C,0x93,0x20,0x06,0x80,0x32,0x00,0xF5,\n    0x34,0x12,0x9A,0x91,0xA2,0x19,0xA1,0x34,0x69,0x80,0x6A,0x00,0x6E,0x1C,0x8B,0x6E,\n    0xAB,0xEF,0xC3,0xB5,0x1D,0x25,0x3A,0x2E,0xA8,0x2D,0x42,0x50,0xB3,0xB0,0x6A,0x12,\n    0x81,0x08,0x12,0x30,0xEE,0xD3,0x95,0xCE,0x2E,0xD0,0xE6,0xBF,0xBD,0xF1,0xD0,0xB0,\n    0x30,0xC8,0xA9,0x65,0x15,0x5F,0x2C,0x6E,0x3B,0x73,0xBF,0x3D,0x75,0x3C,0x39,0xFA,\n    0xC9,0xB0,0xEF,0xB7,0xA2,0xC0,0x8A,0x42,0x42,0x64,0x26,0x43,0x69,0x45,0x3F,0xB3,\n    0x2C,0x11,0x87,0x52,0x33,0x91,0x69,0x98,0x4F,0x1C,0x08,0x77,0xA4,0x30,0x43,0x1A,\n    0x93,0x34,0x28,0x50,0x83,0x68,0xC4,0x68,0x44,0x94,0x89,0xC0,0x2D,0x31,0x91,0xF3,\n    0xA6,0xFD,0x05,0x52,0x4E,0x72,0x5E,0xDB,0x61,0xB5,0xCC,0x98,0xE0,0x35,0x7F,0xFD,\n    0xA4,0x65,0xD1,0x6A,0x65,0x11,0x49,0x0A,0x30,0xA2,0x8A,0x0C,0x4A,0xC7,0x10,0x33,\n    0xE2,0x32,0x15,0x40,0xBD,0xEB,0xC1,0x56,0x42,0xE4,0xB3,0xC5,0x85,0xC6,0x53,0x3C,\n    0x11,0x12,0xF5,0x81,0xAA,0xBE,0x99,0xFA,0xF6,0x9A,0x6F,0x58,0xC4,0x64,0x31,0xD4,\n    0x31,0xB1,0x86,0xE4,0x84,0x58,0x95,0xD5,0xD4,0xC7,0x18,0x41,0x8C,0xC9,0x12,0x26,\n    0x71,0xE7,0x60,0xB6,0x7D,0xA3,0x3C,0x79,0x35,0xAE,0x1C,0xD0,0x80,0x6E,0x2E,0xE4,\n    0x8A,0x70,0xA1,0x21,0xEB,0x5A,0x26,0x06\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a354b4dfe053b4b7fded780ce8bdcecd38a4aaaffd818ebba3e10963817f25ba) == 280, \"Wrong size of locale's blob\");\n\n/* fi_FI.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_ea4d0ae2af69b08a500cc5730fd241228f7c2de4133034e84cf60e3199ece5b0[] = {\n    0x5E,0x5B,0x6B,0x4B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,\n    0x65,0x45,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ea4d0ae2af69b08a500cc5730fd241228f7c2de4133034e84cf60e3199ece5b0) == 22, \"Wrong size of locale's blob\");\n\n/* fi_FI.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_8e9cab006170f6f2006602dc1d4ac88b4968f7dde439dc119e7017f0e67acc21[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,0x31,\n    0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8e9cab006170f6f2006602dc1d4ac88b4968f7dde439dc119e7017f0e67acc21) == 35, \"Wrong size of locale's blob\");\n\n/* fi_FI.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_e1993751a7444566a5e0f2e06ba3e627c9cfdc71ea0b10a8b41b1d05a56e0753[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e1993751a7444566a5e0f2e06ba3e627c9cfdc71ea0b10a8b41b1d05a56e0753) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed fi_FI.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_5f5c656f39f18904353b8f6d4d509a19e46959f197bb519ea88fc55ed0111049[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x9C,0x78,0x63,0x4A,0x00,0x00,\n    0x46,0xDF,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x02,0x7E,0x4C,0x70,0x36,0x7F,0xDF,\n    0x20,0x04,0x00,0x30,0x00,0xF5,0x80,0x6A,0x7A,0x88,0xC8,0x1A,0x00,0xD0,0xD0,0x64,\n    0x00,0xD5,0x3F,0x44,0x40,0x00,0x00,0x03,0x20,0x12,0x29,0xA2,0x89,0xE6,0xA6,0xA7,\n    0x8A,0x79,0x43,0xD4,0x0F,0x51,0x9E,0x8A,0x65,0xB5,0xA6,0xB5,0x78,0x71,0x0C,0x23,\n    0x12,0x1C,0x43,0x49,0x23,0x54,0xF5,0x60,0xE8,0x85,0xE9,0x03,0x95,0x23,0x54,0x0F,\n    0x3C,0x31,0xB2,0x2E,0x2B,0x16,0x16,0xC1,0x50,0x49,0x60,0x9C,0x5D,0x78,0x70,0x18,\n    0x87,0x14,0x28,0x10,0x48,0x49,0xA2,0x3A,0xBF,0x90,0xC4,0x3C,0xA0,0x02,0xD0,0x98,\n    0xC4,0x31,0xA4,0x98,0xAB,0xBC,0xE0,0x61,0x61,0x6C,0x50,0xEF,0xD5,0x92,0xD7,0xC5,\n    0xBC,0x96,0xE5,0x6A,0xAE,0xB5,0xA0,0xC4,0x51,0x01,0x7A,0xAF,0xB6,0x12,0x47,0x12,\n    0xFC,0xD4,0x3D,0x0E,0x87,0xF1,0x3D,0x32,0xDD,0x78,0x9C,0xFB,0x1C,0x84,0x13,0x0A,\n    0x0C,0x91,0x81,0x49,0x90,0x4A,0xE9,0x8C,0xE1,0x41,0xF1,0x6A,0x1A,0xE2,0x79,0x90,\n    0xBA,0x31,0xBD,0xAF,0x33,0xA6,0x3E,0xE9,0x92,0x20,0xE5,0x8C,0xBF,0x6B,0xB4,0x32,\n    0x91,0x9C,0x8A,0x90,0x72,0x4A,0x93,0x30,0xD1,0x8D,0xF0,0x64,0x22,0xE6,0x1D,0xDA,\n    0x52,0x6A,0xFF,0xA5,0x06,0x43,0x29,0xD7,0x30,0x17,0x6C,0x14,0xD4,0xCA,0x9F,0xE2,\n    0xEE,0x48,0xA7,0x0A,0x12,0x13,0x8F,0x0C,0x69,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5f5c656f39f18904353b8f6d4d509a19e46959f197bb519ea88fc55ed0111049) == 250, \"Wrong size of locale's blob\");\n\n/* fi_FI.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_c0e4559b990ac539b1c1acd0cb9a3110b34292e9000b868cf4c43681257a5f9c[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,\n    0x31,0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c0e4559b990ac539b1c1acd0cb9a3110b34292e9000b868cf4c43681257a5f9c) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed fi_FI.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_60d8af6bad1228fe508f475290efe2595da2b26b7d6ddf5f6104f7270910aec0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5F,0x0E,0x0F,0xFB,0x00,0x00,\n    0x46,0xDF,0x94,0x00,0x10,0x42,0x01,0x00,0x10,0x02,0x7E,0x4C,0x70,0x36,0x7F,0xDF,\n    0x20,0x04,0x00,0x08,0x00,0x30,0x00,0xF5,0x80,0x6A,0x7A,0x88,0xC8,0x00,0x0D,0x0D,\n    0x06,0x40,0x06,0xA9,0xFA,0x9A,0x20,0x00,0x00,0x06,0x99,0x00,0x48,0xA6,0x8A,0x27,\n    0x9A,0x29,0xE2,0x9E,0x50,0xF5,0x06,0xD4,0x66,0x28,0xCB,0x6B,0x4D,0x68,0xF0,0xE2,\n    0x16,0x46,0x24,0x38,0x86,0x12,0x46,0xAA,0xF1,0x20,0x69,0x08,0xD5,0x07,0x22,0xA3,\n    0x45,0x07,0x9E,0x16,0xC9,0x17,0x05,0x8A,0xCD,0x2F,0x53,0xD2,0x58,0x25,0x16,0xDC,\n    0x1A,0x06,0x01,0xA5,0x0A,0x04,0x12,0x12,0x66,0x86,0x8E,0xE0,0x31,0x0E,0x28,0x00,\n    0xB4,0x26,0x31,0x0C,0x69,0x26,0x2A,0xED,0x38,0x18,0x6E,0x2D,0x4A,0x1D,0xFA,0xB2,\n    0x5A,0x78,0xDF,0xC9,0x6C,0x56,0xAA,0xCD,0xF7,0x83,0x01,0x44,0x05,0xAA,0xBE,0xD7,\n    0xC9,0x1C,0x4B,0xB6,0x81,0xE8,0x74,0x3F,0x49,0xE7,0x8E,0xCB,0xC4,0xE7,0x71,0xC8,\n    0x41,0x30,0xA0,0xC9,0x17,0x94,0x99,0x04,0xAC,0x98,0xCE,0x14,0x1F,0x1B,0xD0,0xD3,\n    0x03,0xCC,0x85,0xD1,0x8D,0xEB,0x69,0x95,0x30,0xF7,0x4C,0x91,0x07,0x2C,0x65,0xBA,\n    0xD9,0x99,0x8C,0x8C,0xA4,0x54,0x83,0x92,0x54,0x99,0x7E,0x6C,0x6F,0x83,0x11,0x16,\n    0x30,0xEE,0xD2,0x93,0x56,0xFD,0x28,0x31,0x19,0x4E,0xB9,0x00,0xAE,0xBD,0x4D,0x7F,\n    0x05,0x0B,0x8F,0xF1,0x77,0x24,0x53,0x85,0x09,0x05,0xF0,0xE0,0xFF,0xB0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_60d8af6bad1228fe508f475290efe2595da2b26b7d6ddf5f6104f7270910aec0) == 254, \"Wrong size of locale's blob\");\n\n/* fr_BE.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_b28a4d54db3c877322e105c468dd45309d285d1e964f22b04b053a9e39533404[] = {\n    0x5E,0x5B,0x6F,0x4F,0x79,0x59,0x6A,0x4A,0x31,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,\n    0x4E,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b28a4d54db3c877322e105c468dd45309d285d1e964f22b04b053a9e39533404) == 21, \"Wrong size of locale's blob\");\n\n/* fr_BE.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_be735750655b3a8e766b8d81aaf5ac92ac606a2370810f602449b3900754e855[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_be735750655b3a8e766b8d81aaf5ac92ac606a2370810f602449b3900754e855) == 35, \"Wrong size of locale's blob\");\n\n/* fr_BE.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_ce185a03fe4016f144409664a16d095edff8f8272cbaf22ee324e7ab51ceabb0[] = {\n    0x2C,0x0A,0x2E,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ce185a03fe4016f144409664a16d095edff8f8272cbaf22ee324e7ab51ceabb0) == 7, \"Wrong size of locale's blob\");\n\n/* fr_BE.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_2621cd115180d8b2bc4cf3d9373fa2cbba1659c3788f62913c475db5005df6b3[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2621cd115180d8b2bc4cf3d9373fa2cbba1659c3788f62913c475db5005df6b3) == 36, \"Wrong size of locale's blob\");\n\n/* fr_CA.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_5dcdef1824af26599a6b4763432ede7583e247823be2d8e05f51def5f22ebde3[] = {\n    0x43,0x41,0x44,0x20,0x0A,0x24,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,\n    0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5dcdef1824af26599a6b4763432ede7583e247823be2d8e05f51def5f22ebde3) == 34, \"Wrong size of locale's blob\");\n\n/* fr_CH.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_0cc87a5f8313cb41808d6cc1b58be6cec7fe9de8a4abe442daec953d0e701627[] = {\n    0x5E,0x5B,0x6F,0x4F,0x6A,0x4A,0x73,0x53,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0cc87a5f8313cb41808d6cc1b58be6cec7fe9de8a4abe442daec953d0e701627) == 22, \"Wrong size of locale's blob\");\n\n/* fr_FR.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_c08edb61fbec3f1e57d053ec4a348007c5bdfb7982e78563094490d0093a528d[] = {\n    0x5E,0x5B,0x6F,0x4F,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c08edb61fbec3f1e57d053ec4a348007c5bdfb7982e78563094490d0093a528d) == 18, \"Wrong size of locale's blob\");\n\n/* fr_FR.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_03d88875b8d2f81feb8fc7c69251acc0f7afcdad02f611d7a5fd6aabb5a6dd30[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_03d88875b8d2f81feb8fc7c69251acc0f7afcdad02f611d7a5fd6aabb5a6dd30) == 35, \"Wrong size of locale's blob\");\n\n/* fr_FR.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_789724d65cd1a62c57494c4e1c1705bb3d60ecdb4f0ace3b8c9f2bb7ad6faf71[] = {\n    0x2C,0x0A,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_789724d65cd1a62c57494c4e1c1705bb3d60ecdb4f0ace3b8c9f2bb7ad6faf71) == 6, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed fr_FR.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_2c701918d4f7c71696d6805fabfc13d475ce1c834b65fefb8860a5b6bac47f82[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x77,0xC7,0x17,0x20,0x00,0x00,\n    0x6A,0x5F,0x81,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x3F,0x77,0xDF,\n    0x00,0x00,0x20,0x00,0x08,0x30,0x00,0xC6,0x68,0x4A,0x6A,0x68,0x53,0x7A,0xA6,0x81,\n    0xA1,0xEA,0x69,0xE4,0x9A,0x03,0x10,0xA0,0x00,0x00,0x00,0x12,0x28,0xD4,0xD3,0x42,\n    0x68,0xF5,0x06,0x86,0x99,0x1A,0x42,0xB7,0x87,0x7E,0x36,0xD8,0xC6,0xC5,0xA1,0x6E,\n    0x8C,0x50,0x8F,0x5E,0x5F,0x99,0x41,0x36,0x5C,0x27,0x99,0x15,0xAC,0xD9,0x67,0x53,\n    0xE2,0x29,0x3F,0xD4,0x3E,0xBD,0xF4,0xF7,0x25,0x91,0x73,0x4D,0x4B,0x36,0xA8,0x71,\n    0x09,0x12,0xEF,0x8B,0xE3,0x0C,0xC4,0xDA,0xE6,0xF2,0x44,0x34,0x90,0xD4,0x12,0x0F,\n    0xC3,0x38,0x5E,0x7D,0xC2,0xBA,0xC4,0x44,0xB4,0xAA,0x86,0xA0,0x38,0x61,0x43,0x09,\n    0x1F,0x4D,0x8D,0x46,0x73,0x5A,0x94,0x63,0xDC,0xB1,0x92,0xAF,0x73,0xD2,0xE9,0x20,\n    0xC4,0xE4,0x13,0x26,0x32,0x89,0x0F,0x13,0x01,0x93,0x22,0xF7,0xB2,0x0B,0x22,0x2F,\n    0x06,0x18,0x27,0x13,0x43,0xB3,0x41,0x71,0x68,0x63,0x79,0x73,0x05,0x23,0x52,0x0C,\n    0x97,0x00,0x0B,0x32,0xB8,0x20,0xCC,0xAA,0x2F,0x29,0xB1,0xB9,0x22,0x65,0x85,0x63,\n    0xC6,0x8C,0xA9,0xCC,0xCA,0x06,0x66,0xB8,0x54,0x5F,0xC5,0xDC,0x91,0x4E,0x14,0x24,\n    0x1D,0xF1,0xC5,0xC8,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2c701918d4f7c71696d6805fabfc13d475ce1c834b65fefb8860a5b6bac47f82) == 229, \"Wrong size of locale's blob\");\n\n/* fr_FR.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_58f230bc82a01cf5c9f121c3cd40b5b7f927929e8e1b3217de6f3298b1660fda[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_58f230bc82a01cf5c9f121c3cd40b5b7f927929e8e1b3217de6f3298b1660fda) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed fr_FR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_87f00d4038a85ffcee3deb0303e6d7ce406a803202fd4efe453baaf834078550[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x63,0x03,0xB8,0x79,0x00,0x00,\n    0x6A,0x5F,0x9C,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x3F,0x77,0xDF,\n    0x00,0x00,0x20,0x00,0x08,0x08,0x00,0x30,0x00,0xE6,0x6A,0x12,0x9A,0x81,0x4D,0xA2,\n    0x68,0x68,0x7A,0x27,0xB5,0x26,0x80,0x64,0x14,0x01,0xA3,0x40,0x03,0x40,0x12,0x48,\n    0xD4,0xC4,0x6A,0x3D,0x4F,0x50,0x68,0x69,0x91,0x92,0xAA,0xDE,0x23,0x1C,0x6D,0xB8,\n    0xFB,0x96,0xAA,0xE1,0x0F,0x32,0xBA,0xF9,0x8E,0x64,0xC4,0xD8,0x72,0x96,0x45,0x69,\n    0x49,0x32,0xCA,0x87,0xB4,0x4E,0x5F,0x66,0x7C,0x8D,0xF4,0xF5,0x05,0x81,0x73,0x4D,\n    0x8B,0x36,0xC8,0x88,0x84,0x88,0x77,0x7B,0xBB,0xB3,0x12,0x6B,0x9C,0x41,0x15,0x68,\n    0x21,0x93,0x90,0x0F,0xC3,0x1B,0xAF,0x3E,0xDD,0x61,0x71,0xDE,0x19,0xD1,0x3B,0x27,\n    0x0D,0xD8,0x24,0x63,0x03,0xE9,0xA9,0xA0,0xC5,0x96,0x84,0x98,0x6D,0x8B,0x95,0x54,\n    0xEE,0x7A,0x5D,0x20,0x19,0x1C,0x82,0x24,0x46,0x24,0x90,0xD9,0x18,0x8C,0x44,0x79,\n    0xB4,0x1C,0xAA,0x11,0x10,0x5D,0x42,0x30,0xA1,0xD9,0x55,0xCB,0x0B,0x82,0x98,0x96,\n    0x2E,0x51,0x0D,0x88,0x15,0x13,0x80,0x04,0x2B,0x80,0x39,0xCC,0xA2,0x26,0x4B,0x53,\n    0x62,0x04,0x4B,0x8A,0xE7,0x8C,0xD8,0xA1,0x62,0xAE,0x31,0xC2,0x0B,0x2E,0x14,0xD7,\n    0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x0C,0x60,0x77,0x0F,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_87f00d4038a85ffcee3deb0303e6d7ce406a803202fd4efe453baaf834078550) == 235, \"Wrong size of locale's blob\");\n\n/* he_IL.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_9a621703ef3d07c264278e663e7a0c56c6c109b4fd73002b4fddb2d1145dc3e0[] = {\n    0x5E,0x5B,0x79,0x59,0xD7,0x9B,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0xD7,0x9C,\n    0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9a621703ef3d07c264278e663e7a0c56c6c109b4fd73002b4fddb2d1145dc3e0) == 20, \"Wrong size of locale's blob\");\n\n/* he_IL.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_a9bca60af14aff9941c119abac8232416ce6fd6b2e87ad180924f429962a125e[] = {\n    0x49,0x4C,0x53,0x20,0x0A,0xE2,0x82,0xAA,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a9bca60af14aff9941c119abac8232416ce6fd6b2e87ad180924f429962a125e) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed he_IL.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_f9bcac670c474daecc78bee1b72c246beebbc6eac5e4371e9ec3bb50074fddeb[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xA7,0x25,0xF6,0x5D,0x00,0x00,\n    0xD9,0xDF,0xB2,0x00,0x10,0x42,0x80,0x80,0x10,0x20,0x62,0x48,0x30,0x36,0x02,0x40,\n    0x20,0x7E,0xE5,0xF7,0xF0,0x00,0x80,0x30,0x00,0xC6,0x03,0x4D,0x45,0x01,0xA6,0x6A,\n    0x34,0xCD,0x47,0xA4,0x7A,0x47,0xEA,0x8F,0x21,0x32,0x63,0x1A,0x34,0x68,0x06,0x4C,\n    0x86,0x8C,0x46,0x9A,0x06,0x98,0x09,0x12,0x53,0x3D,0x53,0x40,0x68,0x00,0x00,0x04,\n    0x6D,0x34,0xAD,0xF4,0xBA,0xB6,0x66,0x15,0x42,0xB4,0x64,0x8E,0x48,0xB4,0x30,0x6D,\n    0x99,0x41,0x18,0x4B,0x75,0x00,0xA6,0x64,0x2D,0x22,0x4D,0x1C,0xA8,0x25,0x30,0xF4,\n    0xA6,0xC0,0xF7,0x5A,0xA3,0x64,0x2E,0x06,0x20,0x06,0x06,0x10,0x4A,0x13,0x12,0x7E,\n    0xC2,0xC9,0x4F,0x47,0xF3,0xC2,0x49,0x35,0x01,0xDE,0x03,0xD7,0xA8,0x0A,0x30,0x52,\n    0xC2,0x19,0x72,0x00,0x14,0x25,0xD9,0x35,0x84,0x39,0xB8,0x88,0x28,0x2F,0xB0,0x33,\n    0x24,0x54,0xC6,0x8F,0x2E,0xB2,0x11,0xD8,0xD4,0xBA,0xA9,0x6B,0x51,0x45,0x36,0x7F,\n    0x9E,0x08,0x3C,0x9F,0x70,0x92,0xB0,0x28,0xBE,0x2C,0x43,0x5B,0xE6,0xAC,0xB9,0x72,\n    0x0C,0xA5,0xD2,0x99,0x69,0x7C,0xBA,0xF2,0xAC,0x95,0x0A,0x09,0x64,0x2A,0x35,0x6A,\n    0xC6,0xB1,0x2E,0x2A,0xB5,0x60,0xAD,0x75,0x0C,0x64,0x90,0x50,0xC6,0xA8,0x5E,0xB1,\n    0x42,0xAB,0xF0,0xBB,0x92,0x29,0xC2,0x84,0x85,0x39,0x2F,0xB2,0xE8\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f9bcac670c474daecc78bee1b72c246beebbc6eac5e4371e9ec3bb50074fddeb) == 237, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hi_IN.ISCII-DEV LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_7c0959bedfbb569ead89c836e6ba9fea987f5d6c4ebeb590e08e787e7db4b922[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x44,0x3E,0x47,0x18,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x2C,0x9C,0x00,0x12,0x00,0x32,0x01,0x93,0x10,0x1A,\n    0x34,0x0D,0x34,0xD0,0xC4,0xD0,0x00,0xD0,0x34,0x00,0x32,0x03,0x4C,0x8C,0x8C,0x83,\n    0x40,0x0C,0x80,0x68,0x64,0x01,0xA0,0x68,0x03,0x40,0x0D,0x0C,0x80,0xC1,0x1A,0x1A,\n    0x00,0x00,0x1A,0x00,0x00,0x68,0x00,0x68,0x01,0x9F,0xE6,0xA7,0xAA,0xA8,0x20,0x26,\n    0x26,0x26,0x99,0x32,0x1A,0x34,0xD1,0x91,0x93,0x4D,0x01,0xA3,0x40,0xC8,0xD3,0x46,\n    0x4D,0x32,0x68,0xC8,0xC8,0x00,0x1A,0x18,0x99,0x34,0x18,0x20,0xD0,0x64,0x31,0x03,\n    0x13,0x4C,0x46,0x86,0x9A,0x34,0x68,0xC4,0x64,0x68,0x61,0x06,0x13,0x4C,0x99,0x00,\n    0xD0,0xC4,0xC8,0xD0,0xD0,0xC2,0x68,0x1A,0x62,0x34,0xD1,0xA3,0xFF,0xF5,0x51,0x24,\n    0x10,0x00,0x00,0x4C,0x00,0x13,0x00,0x00,0x00,0x00,0x8C,0x01,0x30,0x00,0x00,0x0D,\n    0x00,0x00,0x8C,0x68,0x09,0xA6,0x13,0x06,0x80,0x00,0x00,0x1A,0x00,0x00,0x00,0x68,\n    0x00,0x01,0x32,0x60,0x00,0x00,0x02,0x63,0x51,0x89,0x81,0xDB,0xFF,0x55,0x2A,0xA6,\n    0x4D,0x30,0x11,0x80,0x46,0x98,0x46,0x00,0x01,0x34,0xC9,0x93,0x00,0x9A,0x32,0x69,\n    0xA6,0x00,0x00,0x04,0x64,0xD1,0x89,0xA6,0x00,0x02,0x62,0x64,0xC0,0x23,0x13,0x13,\n    0x01,0x31,0x18,0x04,0x18,0x09,0x81,0x34,0xC1,0x19,0x1A,0x32,0x1A,0x69,0x82,0x68,\n    0x32,0x69,0x82,0x64,0x62,0x7E,0x53,0x4F,0x60,0xF1,0x01,0x11,0x21,0x31,0x41,0x51,\n    0x61,0x71,0x81,0x91,0xA1,0xB1,0xC1,0xDF,0x80,0xF0,0xF9,0x01,0x09,0x11,0x19,0x21,\n    0x29,0x31,0x39,0x41,0x49,0x57,0xC4,0xAC,0x01,0x69,0x79,0x81,0x89,0x91,0x99,0xA1,\n    0xA9,0xB1,0xB9,0xC1,0xC9,0xD1,0xD9,0xE1,0xEC,0x2A,0x02,0x0A,0x12,0x1A,0x22,0x28,\n    0x34,0x84,0x94,0xAF,0x97,0xCC,0x22,0x6A,0x72,0x7A,0x82,0x8A,0x92,0x9F,0xD1,0x51,\n    0x55,0x59,0x5D,0x61,0x65,0x69,0x6D,0x71,0x75,0x79,0x7D,0x81,0x85,0x89,0x8D,0x91,\n    0x95,0x99,0x9D,0xA1,0xA5,0xA9,0xAC,0x03,0x63,0x6B,0x70,0x06,0xF7,0x00,0xAE,0x6E,\n    0x8E,0xAE,0xCE,0xEF,0x0F,0x2F,0x5F,0x5F,0xB3,0xDB,0xE3,0xE8,0x17,0xE7,0xF8,0x00,\n    0x30,0x50,0x7F,0x78,0x4F,0xC4,0x2C,0x34,0x3C,0x47,0xFE,0x26,0x2A,0x2E,0x32,0x34,\n    0x14,0x74,0x7C,0x80,0x29,0x29,0x39,0x49,0x59,0x69,0x79,0x89,0x99,0xA9,0xB9,0xC9,\n    0xD9,0xE9,0xFA,0x0A,0x1A,0x2A,0x3A,0x4A,0x5A,0x60,0x74,0xF5,0x15,0x20,0xEA,0xAA,\n    0xEB,0x2B,0x6B,0xAB,0xEC,0x2C,0x6C,0xAC,0xED,0x2D,0x6D,0xAD,0xEE,0x2E,0x6E,0xAE,\n    0xEF,0x2F,0x6F,0xAF,0xC2,0x60,0x60,0x84,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,\n    0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xFD,0x68,0xE9,0x7E,0xF4,0xF5,0x35,0x75,0xB5,\n    0xF6,0x36,0x76,0xB6,0xF7,0x37,0x77,0xB7,0xF8,0x38,0x78,0xB8,0xF9,0x39,0x79,0xB9,\n    0xFA,0x3A,0x7A,0xBA,0xFB,0x3B,0x7F,0x9D,0xDD,0xFE,0x01,0x7F,0xA1,0x7F,0xDE,0x3E,\n    0x5E,0x6C,0x61,0xFE,0xFF,0xBF,0x44,0x92,0x49,0x26,0x80,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x25,0x92,0xAC,0x63,0x18,0xC6,0x31,0x8C,0x63,0x12,0x24,0x48,0x93,0xAE,\n    0x8A,0x28,0xA2,0x8A,0x32,0x88,0x20,0x82,0x08,0x71,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x2D,0xD0,0x42,0x40,0x00,0x00,0x00,0x00,0xDD,0x00,0x00,0x16,0xE0,\n    0x00,0x07,0x04,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0A,0xAA,\n    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x90,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,\n    0x1E,0x3C,0x78,0xF1,0xE4,0x48,0x91,0x22,0x47,0x75,0x25,0x14,0x51,0xA3,0x46,0x8D,\n    0x1A,0x34,0x68,0xBB,0x7F,0xFC,0x79,0x29,0x28,0x49,0xE1,0x08,0x46,0x8A,0x28,0xA2,\n    0x8A,0x28,0x40,0x84,0x51,0x45,0x14,0x51,0x45,0x08,0x42,0x10,0x21,0x08,0x3E,0xF8,\n    0x40,0x00,0x00,0x1D,0xF4,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0xC6,0x84,0x03,0xAD,\n    0x08,0x7E,0x50,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x78,0x5D,0xC9,0x14,0xE1,0x42,0x41,0x10,0xF9,\n    0x1C,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7c0959bedfbb569ead89c836e6ba9fea987f5d6c4ebeb590e08e787e7db4b922) == 770, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hi_IN.ISCII-DEV LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_6d8882c0e2606275327ce98439081f3330343587ba0b89ffd8e0876c08c64b57[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFB,0xE7,0x08,0x6F,0x00,0x05,\n    0x41,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x5A,0x00,0x9A,0x00,0xAA,0xAA,0x80,0x01,0x31,0x30,0x02,\n    0x33,0x20,0x1A,0x00,0x00,0x98,0x13,0xD0,0xD0,0x4C,0x00,0x00,0x1A,0x00,0x00,0x13,\n    0x13,0x68,0x26,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32,0x60,\n    0x00,0x00,0x02,0x30,0x13,0x05,0x51,0x46,0xF5,0x4C,0x7A,0x82,0x61,0x18,0x09,0x89,\n    0xA6,0x99,0x34,0xD3,0x00,0x00,0x01,0x31,0x31,0x30,0x46,0x98,0x00,0x01,0x18,0x00,\n    0x46,0x98,0x09,0x81,0x30,0x98,0x4C,0x00,0x01,0x34,0xC0,0x26,0x04,0xD3,0x09,0x91,\n    0x80,0x02,0x30,0x23,0x09,0x81,0x19,0x30,0x8D,0x30,0x00,0x9F,0xEA,0x81,0x25,0x35,\n    0x28,0x4C,0x8D,0x1A,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,\n    0x00,0x03,0x20,0x02,0x4C,0x00,0x13,0x00,0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x03,0xFC,0x43,0xE9,0x12,0xC7,0xE4,0x95,0x19,0xC9,0x20,\n    0x87,0x0E,0x44,0x39,0xFC,0x80,0x21,0xE4,0x40,0x81,0x22,0x24,0x09,0x12,0x20,0x88,\n    0x08,0x99,0x06,0x45,0x08,0xA9,0x16,0x48,0x52,0x24,0x8D,0x24,0x49,0x52,0x64,0x66,\n    0x4E,0xFC,0x9F,0x9A,0x23,0x28,0x4A,0x50,0x08,0x14,0xA9,0x2B,0x4B,0x12,0xD4,0xB9,\n    0x2F,0x4C,0x10,0x49,0x8A,0x64,0x82,0x4C,0xD3,0x44,0xD5,0x36,0x4D,0xD3,0x84,0xE5,\n    0x3A,0x4E,0xD3,0xC4,0xF5,0x3E,0x4F,0xD4,0x07,0xE8,0xA0,0xA8,0x4A,0x1A,0x88,0xA2,\n    0xA8,0xCF,0xD5,0x06,0xA3,0xC2,0xC1,0x94,0x94,0x3D,0x08,0xA5,0x21,0x14,0xB5,0x31,\n    0x4D,0x7E,0xCA,0x72,0x9E,0xA8,0x2A,0x2A,0x92,0xA6,0xAA,0x2A,0xAA,0xB2,0xAE,0xAC,\n    0x2B,0x2A,0xD2,0xB6,0xAE,0x2B,0xAA,0xF4,0x35,0x81,0x61,0x58,0x90,0xAB,0x1A,0x06,\n    0x06,0xC8,0xB2,0xAC,0xCB,0x3A,0xD0,0xB4,0xAD,0x4B,0x5A,0xD8,0xB6,0xAD,0xCB,0x7A,\n    0xE0,0xB8,0xAE,0x4B,0x9A,0xE8,0xBA,0xBF,0x75,0xD9,0x77,0x5E,0x1F,0xC2,0xF2,0x86,\n    0x40,0x40,0xDE,0x97,0xB5,0xF1,0x7D,0x7F,0x2B,0xF2,0xFE,0xFE,0x98,0x06,0x05,0x82,\n    0x60,0xD8,0x46,0x15,0x86,0x61,0xD8,0x86,0x25,0x8A,0x62,0xD8,0xC6,0x35,0x8E,0x63,\n    0xD9,0x06,0x45,0x92,0x64,0xD9,0x46,0x55,0x96,0x65,0xD9,0x86,0x65,0x9A,0x66,0xD9,\n    0xC6,0x75,0x9E,0x67,0xDA,0x06,0x85,0xA2,0x68,0xDA,0x46,0x95,0xA6,0x69,0xDA,0x86,\n    0xA5,0xAA,0x6A,0xDA,0xC6,0xB5,0xAE,0x6B,0xDB,0x06,0xC5,0xB2,0x6C,0xDB,0x46,0xD5,\n    0xB6,0x6D,0xDB,0x86,0xE5,0xBA,0x6E,0xDB,0xC6,0xF5,0xBE,0x6F,0xDC,0x07,0x05,0xC2,\n    0x70,0xDC,0x47,0x15,0xC6,0x71,0xDC,0x87,0x25,0xCA,0x72,0xDC,0xC7,0x35,0xCE,0x73,\n    0xDD,0x07,0xF6,0xE8,0xBA,0x4F,0xF1,0xD3,0x75,0x1D,0x57,0x59,0xD7,0x76,0x1D,0x97,\n    0x69,0xDB,0x77,0x1D,0xD7,0x79,0xDF,0x78,0x1E,0x17,0x89,0xE3,0x79,0x1E,0x57,0x99,\n    0xE7,0x7A,0x1E,0x97,0xC4,0xF9,0x1F,0x33,0xE8,0x7D,0x4F,0xB1,0x0A,0x43,0x1F,0x73,\n    0xF0,0x7E,0x4F,0xD1,0xFB,0x3F,0x87,0xF4,0xFF,0x1E,0x64,0x24,0xBF,0x8E,0x44,0x37,\n    0xDD,0x27,0x20,0x41,0xA6,0xF5,0x24,0x1D,0xC4,0xE6,0x64,0x17,0xE7,0x00,0x39,0x20,\n    0x7E,0x1A,0x15,0xC3,0x0F,0xE3,0x81,0x00,0x83,0xFA,0xC1,0x08,0x42,0x12,0x31,0xE0,\n    0x0C,0x00,0xC0,0x03,0x8C,0x68,0x00,0x00,0x03,0xA6,0x34,0x60,0x06,0x00,0x1D,0x01,\n    0xA0,0x00,0xA2,0x8A,0x28,0xA2,0x8A,0x28,0xF0,0x42,0x46,0x10,0x88,0x20,0x82,0x08,\n    0xFA,0xFA,0x84,0x92,0x4A,0x21,0x0C,0xFE,0xFC,0xF8,0x80,0x21,0x5C,0x09,0x3C,0xF3,\n    0x26,0x66,0x4C,0xCC,0x08,0x10,0xCC,0xC0,0x26,0x66,0x06,0x66,0x22,0x29,0x3C,0xF3,\n    0x20,0x67,0x86,0x10,0x81,0xE6,0x22,0xF1,0x66,0x19,0x98,0x82,0x79,0xE6,0x40,0xF2,\n    0x79,0xE6,0x19,0x98,0x66,0x64,0x21,0xF4,0x10,0xF8,0x26,0x42,0x4C,0xE1,0xC9,0x24,\n    0xE1,0x06,0xBD,0xC2,0x4A,0x26,0x38,0x50,0x6E,0x14,0x23,0x84,0x1B,0x27,0x10,0x9E,\n    0x26,0x1F,0x1C,0x28,0x17,0x09,0x2E,0x43,0x80,0xD7,0x38,0x37,0x2E,0x12,0xD4,0xB8,\n    0x4A,0x11,0xC0,0x22,0x24,0x08,0x82,0x13,0x02,0x42,0x5F,0xF1,0x77,0x24,0x53,0x85,\n    0x09,0x0F,0xBE,0x70,0x86,0xF0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6d8882c0e2606275327ce98439081f3330343587ba0b89ffd8e0876c08c64b57) == 758, \"Wrong size of locale's blob\");\n\n/* hi_IN.ISCII-DEV LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_448dc089f8ec07e034a19276e6053b0a40fe589fabca300aaf611fdc060c544d[] = {\n    0x5E,0x5B,0xD8,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xC6,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_448dc089f8ec07e034a19276e6053b0a40fe589fabca300aaf611fdc060c544d) == 18, \"Wrong size of locale's blob\");\n\n/* hi_IN.ISCII-DEV LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_9b37f70a24bc958fe35ce4ed321a99629649d3e76fb73e9fa38427a869fa4b4b[] = {\n    0x49,0x4E,0x52,0x20,0x0A,0xCF,0xDE,0xC8,0xAC,0x20,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,\n    0x3B,0x32,0x3B,0x30,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9b37f70a24bc958fe35ce4ed321a99629649d3e76fb73e9fa38427a869fa4b4b) == 40, \"Wrong size of locale's blob\");\n\n/* hi_IN.ISCII-DEV LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_f14a7aea78e7fbc1ce4faebee7e0b977f3e2cb8b4a431306856bab9ab5802e1c[] = {\n    0x2E,0x0A,0x2C,0x0A,0x32,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f14a7aea78e7fbc1ce4faebee7e0b977f3e2cb8b4a431306856bab9ab5802e1c) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hi_IN.ISCII-DEV LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_8bbca5babe0a2760b22f17affcba87848116282ba14711a012137ef4eb4a4bc9[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x17,0x60,0x84,0x68,0x00,0x00,\n    0x4B,0x5F,0x9F,0x00,0x10,0x42,0x00,0x80,0x10,0x00,0x62,0x08,0x70,0x36,0x02,0x40,\n    0x00,0x14,0x80,0x0A,0x52,0x17,0x74,0xA6,0xDF,0x22,0x60,0x30,0x00,0xCC,0x51,0x1A,\n    0x26,0xA6,0x93,0xD2,0x7A,0x83,0x46,0x68,0xD4,0x34,0x00,0xD1,0x91,0xEA,0x68,0x60,\n    0x0D,0x34,0x34,0x68,0xC4,0x64,0x03,0x40,0x06,0x86,0x08,0x94,0x53,0xD5,0x32,0x32,\n    0x68,0x1A,0x60,0xCA,0x68,0x00,0x34,0xF4,0x9E,0xA7,0x5A,0x5F,0xC5,0xEA,0x45,0x00,\n    0xC8,0x8C,0x55,0xB0,0x49,0x83,0x42,0x10,0x5C,0x45,0xAC,0x91,0xF9,0x0A,0x12,0x77,\n    0x21,0x9F,0x31,0x7A,0x70,0x28,0xC4,0xDE,0x5C,0x76,0xEA,0x36,0x86,0xB3,0x6C,0x6A,\n    0x42,0x42,0x93,0x65,0xFB,0xEE,0xBC,0xBD,0x03,0x34,0x2D,0x0F,0x92,0xA2,0x71,0x68,\n    0xF8,0xBA,0xEE,0xA3,0x63,0xF9,0x88,0x41,0xC1,0xA3,0x6A,0x9C,0x9F,0xDC,0x8F,0xC3,\n    0x4C,0xB5,0x8C,0x6C,0x05,0x99,0x45,0xF2,0x8E,0x1C,0x19,0xC1,0x9A,0x70,0x09,0x16,\n    0x12,0x36,0xC5,0xCD,0x4C,0x32,0x8E,0x9C,0x8F,0x33,0x9F,0x17,0x8D,0x9F,0x5F,0x61,\n    0x8F,0x74,0xAF,0xB1,0x5B,0x36,0x76,0x69,0x22,0x60,0x30,0x4E,0x0F,0x2C,0xC3,0x40,\n    0x0E,0x13,0xA5,0x21,0xE9,0x20,0xA4,0x36,0x42,0x83,0x44,0xB0,0x29,0x89,0x3A,0xAA,\n    0xF4,0x11,0xE4,0xD1,0xC4,0xE9,0x42,0xB6,0x6D,0x8B,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,\n    0x20,0x2E,0xC1,0x08,0xD0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8bbca5babe0a2760b22f17affcba87848116282ba14711a012137ef4eb4a4bc9) == 245, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hr_HR.ISO8859-2 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_1028a84a3f681eabb807c89c063ecb557cc7bcd3ab6641cfe69fc2b69f1005e0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x8E,0x16,0xE9,0x60,0x00,0x05,\n    0x98,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF4,0x53,0x64,0x70,0x04,0x90,0x00,0x0D,0x0D,0x03,0x40,\n    0x00,0xD1,0x88,0x0C,0x40,0xD3,0x4D,0x34,0x00,0x06,0x81,0x91,0xA0,0x06,0x98,0x11,\n    0xA3,0x41,0x91,0xEA,0x64,0x64,0x68,0x0D,0x34,0x3C,0x90,0xD1,0xFF,0xB5,0x54,0x79,\n    0x4D,0x36,0xA7,0xA4,0xF4,0xA7,0x91,0xA6,0xA7,0xA7,0xA1,0x02,0x31,0x31,0x34,0x0C,\n    0x20,0x34,0x00,0x03,0x46,0x80,0x68,0xD1,0x84,0x0C,0x91,0x19,0x00,0xF4,0x63,0x26,\n    0xA9,0xED,0xEA,0xA8,0xC2,0x64,0x34,0x34,0x0C,0x86,0x80,0xC1,0x31,0x0D,0x00,0x01,\n    0xB4,0x80,0x0C,0x8F,0x51,0x84,0x68,0x68,0x31,0x34,0xD3,0x4F,0x49,0x80,0x83,0x09,\n    0xFE,0xF5,0x55,0x00,0x34,0x68,0x00,0x68,0x00,0x00,0x30,0x9A,0x00,0x03,0x4D,0x32,\n    0x68,0x68,0xC0,0x81,0xA1,0x91,0x88,0x53,0x0A,0x93,0xD4,0x86,0x47,0xA8,0x00,0xD3,\n    0x4C,0x86,0x80,0x03,0x4D,0x34,0x68,0xC9,0x93,0x10,0x19,0x34,0x00,0x00,0x0D,0x19,\n    0x06,0x46,0x40,0x62,0x06,0x4D,0x1A,0x34,0x64,0xD0,0x32,0x69,0xA6,0x86,0x23,0x46,\n    0x80,0x00,0x64,0xD0,0x68,0x60,0x81,0xA6,0x4C,0x4C,0x98,0x40,0x1A,0x0C,0x83,0x4D,\n    0x31,0x19,0x1B,0x42,0x27,0xFA,0x95,0x55,0x00,0x00,0x00,0x00,0x34,0x06,0x86,0x80,\n    0x06,0x80,0x01,0x90,0x68,0x06,0x20,0x34,0x00,0x00,0x03,0x40,0x00,0x00,0x1A,0x0D,\n    0x1A,0x03,0x26,0x4C,0x8D,0x0D,0x03,0x20,0xD3,0x46,0x20,0x00,0x68,0x68,0x1A,0x0D,\n    0x00,0x00,0x00,0x00,0x0C,0x0C,0x36,0x0B,0x0B,0x13,0x1D,0x8A,0xC7,0x64,0xB2,0xD9,\n    0xAC,0xF6,0x84,0xEC,0x8C,0xAA,0x14,0xAA,0x3D,0x05,0x68,0xDA,0x56,0x24,0x56,0xAB,\n    0x5B,0x33,0x3F,0x3E,0xD8,0xD4,0xD7,0x6D,0xB7,0x5B,0xDB,0x2E,0x17,0x1B,0x93,0x6D,\n    0xCE,0xE9,0x75,0xBB,0x5D,0xDB,0x9B,0xDB,0x9B,0xF1,0x78,0xCC,0x6E,0x3B,0x1E,0xE1,\n    0x90,0x71,0xC8,0xB9,0x64,0x9C,0xDC,0xF2,0x99,0x5C,0xB6,0x5F,0x33,0x9A,0x4B,0x9C,\n    0xCF,0xE8,0x1D,0x34,0x3A,0x2D,0x2B,0xB6,0x99,0xDF,0x51,0xA9,0xD5,0x6A,0xF5,0x9A,\n    0xDD,0x76,0xBF,0x60,0xF1,0xB1,0x79,0x7A,0x7B,0x7C,0x7D,0xD9,0x3C,0x3F,0xC0,0x40,\n    0x6E,0x60,0x60,0xB7,0x69,0x13,0x3F,0xC2,0x24,0x85,0x86,0x81,0x87,0x4B,0xC4,0xE2,\n    0xF1,0xA2,0x61,0x39,0x1C,0x9E,0x56,0xFD,0x2C,0x57,0x31,0x97,0x38,0x03,0x63,0x93,\n    0xA8,0x3B,0x8E,0x61,0xEA,0x10,0x54,0x99,0x64,0x52,0xD9,0x45,0xD2,0xAA,0x51,0x60,\n    0xC5,0x92,0x60,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,\n    0x88,0x88,0x88,0x88,0x88,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x80,0x02,\n    0x08,0x03,0x63,0x16,0x98,0xC6,0x31,0x96,0xC1,0x9B,0x44,0x63,0x6D,0x80,0x00,0x02,\n    0x22,0x22,0x22,0x22,0x22,0xE0,0x11,0x80,0xD1,0x19,0x1D,0xCD,0x4E,0x61,0x86,0x47,\n    0x9A,0x6A,0x83,0x4E,0x90,0x4E,0x9C,0xF5,0x2A,0x24,0x50,0x38,0xE3,0x95,0x74,0x0F,\n    0x3C,0xF3,0xCF,0x52,0x99,0x04,0x10,0x35,0x05,0x68,0x2C,0x41,0x54,0x94,0x84,0x9A,\n    0xB5,0x6A,0xD6,0xAC,0x59,0x29,0x24,0xBB,0xA2,0xB5,0x6A,0xF9,0x55,0xC8,0xB0,0x5E,\n    0xBD,0x7B,0x16,0x48,0xA2,0x8A,0x28,0xB0,0x63,0x2D,0x2F,0x31,0x33,0x35,0xD2,0xE9,\n    0xCD,0xF7,0xFC,0x12,0x32,0x52,0x72,0x92,0xBE,0x1F,0x17,0x8F,0xC9,0xE5,0x96,0xF3,\n    0x4B,0xCC,0x79,0xE6,0x66,0xA6,0xFD,0x13,0x93,0xBE,0x99,0xE9,0xFA,0x0A,0x1F,0x57,\n    0xAF,0xD9,0xED,0xF7,0x7B,0xFE,0x1F,0x1A,0x2F,0x97,0xCF,0xE9,0xF5,0xA3,0xA4,0xFB,\n    0x7D,0xFF,0x1F,0x9A,0x5F,0xD5,0x37,0xE6,0xAB,0xF5,0xFB,0xFE,0x55,0xD6,0x7F,0x7F,\n    0xD5,0xB5,0xD5,0xB5,0xFC,0x09,0x49,0x3D,0x96,0xC6,0x46,0x3E,0x3A,0x3A,0x32,0x32,\n    0x2E,0x2D,0x7A,0xFD,0x46,0x9E,0x0F,0x4B,0x05,0xA1,0x81,0x81,0x7F,0x7F,0x7E,0x7E,\n    0x5C,0xB9,0x5B,0x22,0xA3,0xC8,0x88,0x88,0x89,0x62,0x44,0x9D,0x4A,0xB3,0xC8,0x88,\n    0x88,0x89,0x62,0x44,0x72,0x27,0xA0,0x82,0x0A,0x49,0x24,0x91,0x54,0xCA,0xA1,0x42,\n    0x84,0x11,0x45,0x13,0xCA,0xBC,0xE3,0x93,0x26,0x4C,0x71,0xCA,0x58,0x55,0xD8,0xEC,\n    0xAA,0xD7,0x2B,0xEA,0xD7,0x57,0x05,0x4A,0xE2,0x8B,0x6A,0x57,0x54,0xAF,0x25,0x29,\n    0x4A,0x52,0x93,0x5B,0x14,0xAC,0xFF,0xD6,0x20,0x56,0x02,0x56,0x0B,0x11,0x18,0x91,\n    0x09,0x09,0x12,0xA2,0x13,0x01,0x03,0x13,0x12,0x00,0x00,0x02,0x13,0x33,0x33,0x10,\n    0x10,0x04,0x10,0x25,0x51,0x99,0x2A,0x12,0x21,0x21,0x22,0x54,0x42,0x60,0x20,0x62,\n    0x62,0x46,0x02,0x80,0x03,0x12,0x33,0x33,0x10,0x10,0x15,0xA4,0x21,0x09,0x42,0x12,\n    0x94,0x22,0xB1,0x45,0xA2,0x42,0x12,0x93,0x11,0xAA,0xB5,0xA4,0x95,0x6A,0xAB,0x5A,\n    0xA4,0x96,0xB5,0x49,0x2D,0x6B,0x55,0x55,0x54,0x92,0xD2,0x12,0x47,0xAD,0x20,0x00,\n    0x00,0xC9,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x79,0x03,0xF2,0x93,0xDA,0x90,\n    0x00,0x00,0x00,0x00,0x32,0x64,0x01,0x10,0x01,0x04,0x44,0x15,0x24,0x00,0x00,0x00,\n    0x00,0x88,0xA4,0xB1,0x52,0xA5,0x48,0x52,0xCA,0x45,0x54,0x82,0x92,0xD2,0x29,0x69,\n    0x52,0xA5,0x48,0xAB,0x22,0x91,0x25,0x4A,0x95,0x2C,0x55,0x90,0x52,0x45,0x4A,0x91,\n    0x00,0x40,0x44,0x45,0x25,0x8A,0x95,0x2A,0x42,0x96,0x52,0x2A,0xA4,0x14,0x96,0x91,\n    0x4B,0x4A,0x95,0x2A,0x45,0x59,0x14,0x89,0x2A,0x12,0xA5,0x8A,0xB2,0x0A,0x48,0xA9,\n    0x52,0x20,0x22,0x2D,0x6B,0x52,0x11,0x5A,0x2E,0xE4,0x8A,0x70,0xA1,0x21,0x1C,0x2D,\n    0xD2,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1028a84a3f681eabb807c89c063ecb557cc7bcd3ab6641cfe69fc2b69f1005e0) == 946, \"Wrong size of locale's blob\");\n\n/* hr_HR.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_0cf974a55996aa089ef60e3fc615c6e92ba628169ec88470453175939fcaf12d[] = {\n    0x5E,0x5B,0x64,0x44,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0cf974a55996aa089ef60e3fc615c6e92ba628169ec88470453175939fcaf12d) == 18, \"Wrong size of locale's blob\");\n\n/* hr_HR.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_bb330ae4df309592a6c8d0536f1d2075e388cecf0d233c2e81e1a8611c5d9b10[] = {\n    0x48,0x52,0x4B,0x20,0x0A,0x4B,0x6E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bb330ae4df309592a6c8d0536f1d2075e388cecf0d233c2e81e1a8611c5d9b10) == 35, \"Wrong size of locale's blob\");\n\n/* hr_HR.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_cc411e55bef1adc24469c642bfa21aaa822fb2d52ec358a578ee7267883b40f8[] = {\n    0x2C,0x0A,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cc411e55bef1adc24469c642bfa21aaa822fb2d52ec358a578ee7267883b40f8) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hr_HR.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_0e8a2d6efe6c0be893e265ba963c9acd50193dc9acc49d143e95b56a67101f64[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD1,0x22,0x94,0x0B,0x00,0x00,\n    0x3E,0xDF,0x8D,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x6F,0xDF,0x70,0x3E,0x3F,0xDF,\n    0x10,0x00,0x01,0x00,0x40,0x00,0x40,0x30,0x00,0xE6,0x34,0x25,0x4F,0x54,0x65,0x1A,\n    0x7A,0x4F,0x50,0xC8,0xF5,0x06,0x9B,0x51,0xB5,0x0D,0xA8,0x03,0x51,0xA4,0xD1,0xA3,\n    0xD4,0x00,0x00,0x00,0x06,0x82,0x53,0x55,0x3C,0x24,0xF5,0x03,0xD4,0xDA,0x11,0xA6,\n    0x80,0x0D,0x06,0x91,0xED,0x15,0x74,0xE4,0x49,0x33,0x23,0x1C,0xE6,0xF3,0x29,0xAA,\n    0x9B,0x60,0xEF,0x63,0xFC,0xCE,0x8F,0x6C,0x0A,0x66,0x41,0xD0,0x71,0x0A,0xC7,0xAA,\n    0xD9,0x7E,0xDB,0xE9,0x65,0x1D,0x4A,0x95,0xA3,0x48,0xF1,0x30,0x0E,0x66,0x09,0x95,\n    0x88,0x48,0xA9,0x5B,0x77,0x5C,0x7B,0x92,0x2C,0x60,0x21,0x33,0x32,0x10,0x0C,0x86,\n    0xBF,0x22,0xDB,0x25,0x03,0xA1,0x81,0x54,0x14,0x5B,0x3A,0x1E,0x5A,0x23,0xE9,0xA0,\n    0xA8,0x81,0x23,0xA9,0xC6,0xE0,0x76,0xE7,0x08,0xD3,0x97,0x9C,0x62,0x49,0xDB,0x7F,\n    0x38,0x45,0x08,0xD4,0xF2,0x71,0x11,0x84,0xD1,0xD8,0xC4,0x68,0x04,0xD0,0x56,0x8F,\n    0x4E,0x12,0x10,0xED,0x42,0x28,0x35,0x3C,0x20,0x43,0xEE,0x7D,0x88,0x89,0x08,0x8E,\n    0x18,0xD7,0x5E,0x2C,0xAF,0x65,0x0B,0x61,0x13,0x85,0x19,0x98,0x50,0x21,0x65,0x1E,\n    0xAD,0x20,0x8D,0x09,0x43,0x1D,0x58,0x48,0xF8,0x99,0x25,0x41,0xC7,0x90,0xA4,0xC6,\n    0xD2,0x20,0xD7,0x08,0xA0,0xF6,0x91,0x04,0x64,0xD3,0x20,0x67,0x3F,0x8B,0xB9,0x22,\n    0x9C,0x28,0x48,0x68,0x91,0x4A,0x05,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0e8a2d6efe6c0be893e265ba963c9acd50193dc9acc49d143e95b56a67101f64) == 264, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hr_HR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_8ac59bd4d4f48af81b76c09f582e9892d6a4216ee73fd540bd249db8df9499c0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x2C,0x03,0x1D,0x25,0x00,0x00,\n    0x3E,0xDF,0xCC,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x6F,0xDF,0x70,0x3E,0x3F,0xDF,\n    0x10,0x00,0x06,0x00,0x01,0x06,0x00,0x30,0x00,0xE6,0x34,0x25,0x4D,0x05,0x1E,0xA7,\n    0xA4,0xF5,0x0C,0x8F,0x50,0x69,0xB5,0x1B,0x50,0xDA,0x80,0x0D,0x46,0x93,0x46,0x8D,\n    0x00,0x00,0x00,0x01,0xA0,0x25,0x35,0x53,0xC2,0x4F,0x50,0x30,0x11,0xA6,0x80,0x0D,\n    0x0D,0x1A,0x4B,0xA4,0x92,0xDA,0x4C,0x9A,0x2B,0x13,0x0C,0xA9,0x03,0x1A,0x22,0xDA,\n    0xF1,0xDE,0x48,0x77,0xA5,0x60,0xD8,0x95,0xC8,0x8B,0xA2,0xE2,0x2C,0x20,0x8C,0x55,\n    0xDA,0xEE,0xAB,0xEA,0xEA,0xAD,0x2C,0x1A,0x4B,0x79,0x78,0x71,0x2F,0x45,0x30,0x41,\n    0x10,0x5A,0x59,0x6F,0x3C,0x3A,0x93,0x1E,0xA0,0x41,0x19,0x99,0x08,0x06,0x43,0x5D,\n    0x89,0x65,0x72,0x81,0xCC,0xBC,0x9A,0x0A,0x2D,0x9D,0x0F,0x2C,0x11,0xF0,0xD0,0x4C,\n    0x40,0x91,0xD0,0xE1,0x68,0x3B,0x6B,0x84,0x69,0xC7,0xC6,0x11,0x24,0xEA,0x31,0x70,\n    0x8A,0x88,0xCC,0xF2,0x78,0x88,0xBE,0x74,0x75,0x30,0x1A,0x01,0x3A,0x0A,0x51,0xE5,\n    0xC2,0x42,0x1D,0xA8,0x45,0x43,0x55,0xDD,0x02,0x1F,0x6B,0xEB,0x44,0x48,0x44,0x70,\n    0xC6,0xBA,0x70,0x65,0x73,0x20,0x56,0xF8,0x94,0x21,0x6B,0x58,0x40,0x21,0x54,0xDD,\n    0xA4,0xE0,0x96,0x63,0x99,0x4D,0xA4,0x1C,0x78,0x4A,0x8A,0x80,0xD3,0x86,0x41,0xE1,\n    0x61,0x10,0x63,0x84,0x54,0x3D,0xA4,0x41,0x1F,0x86,0xC9,0xA8,0x22,0x48,0xC9,0xBF,\n    0x8B,0xB9,0x22,0x9C,0x28,0x48,0x16,0x01,0x8E,0x92,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8ac59bd4d4f48af81b76c09f582e9892d6a4216ee73fd540bd249db8df9499c0) == 267, \"Wrong size of locale's blob\");\n\n/* hu_HU.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_cffc5a88e5eea4e9594dcc2fe4bcbb9daa4eec23453d98883b97ef679b5fd2c9[] = {\n    0x5E,0x5B,0x69,0x49,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x69,0x67,0x65,0x6E,0x0A,0x6E,0x65,0x6D,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cffc5a88e5eea4e9594dcc2fe4bcbb9daa4eec23453d98883b97ef679b5fd2c9) == 27, \"Wrong size of locale's blob\");\n\n/* hu_HU.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_9d922be19508524b95a6a7735359475135b5d4a2a6d434cbb9720569d9c59826[] = {\n    0x48,0x55,0x46,0x20,0x0A,0x46,0x74,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x34,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9d922be19508524b95a6a7735359475135b5d4a2a6d434cbb9720569d9c59826) == 35, \"Wrong size of locale's blob\");\n\n/* hu_HU.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_39616be9abbfdf567cf1d757eec064b1078e99d6dee9bd21b5db06dc31888692[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_39616be9abbfdf567cf1d757eec064b1078e99d6dee9bd21b5db06dc31888692) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hu_HU.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_c5a005fd75b7365afb371ecdc1f894eafaf2d70e492ec0b9060f60602db87832[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x6C,0x55,0xD0,0x41,0x00,0x00,\n    0x65,0xDF,0x81,0x80,0x10,0x42,0x00,0x80,0x10,0x00,0x62,0x08,0x70,0x3F,0xFF,0xDF,\n    0x10,0x20,0x20,0x0B,0x14,0x30,0x00,0xE6,0x01,0x2A,0x9F,0xA5,0x4F,0x44,0xF5,0x19,\n    0x06,0x4D,0x06,0x26,0xF4,0x53,0x40,0x0C,0x64,0xD3,0x20,0x64,0xD0,0xC8,0x32,0x34,\n    0xC0,0x8C,0x12,0x42,0x29,0x3F,0x4A,0x6F,0x2A,0x6F,0x49,0x1B,0x42,0x32,0x68,0xF5,\n    0x1E,0xA7,0x94,0x7E,0x32,0xAD,0xB0,0x91,0x7D,0xD6,0xCE,0x64,0x1D,0x8A,0xA6,0x74,\n    0xED,0x4C,0x0C,0xD1,0xC3,0xDC,0x4D,0x46,0x2C,0x41,0x1B,0x51,0xFA,0x76,0xBC,0x46,\n    0xAE,0x15,0x68,0xA9,0x23,0x73,0x8C,0xDC,0xB7,0x1C,0xFA,0x99,0x06,0x14,0x30,0x84,\n    0x8C,0x90,0x96,0x9A,0xF3,0x79,0x12,0x0A,0x2F,0x47,0x55,0xCB,0xB9,0xC2,0xCB,0x1D,\n    0xC5,0x43,0xF8,0x65,0x08,0xE4,0x4C,0x89,0xCB,0xCE,0x6F,0x34,0x7E,0xC9,0xA6,0x66,\n    0xA1,0x75,0x3B,0x54,0xF9,0x71,0xBC,0x8B,0x00,0xD8,0x29,0x66,0x9C,0xA9,0x98,0x5C,\n    0xA1,0xA4,0xD3,0x0C,0x2D,0x6E,0xE7,0x85,0xB6,0xA3,0x1E,0xB1,0x31,0x4D,0x2F,0x13,\n    0xDA,0xCE,0x49,0x44,0x8B,0xC2,0x6B,0x28,0xC2,0xAB,0x03,0x70,0xC3,0x8D,0xAB,0x8E,\n    0x86,0x4C,0xE3,0xDB,0x89,0x89,0x46,0x0E,0x03,0x05,0x12,0x62,0x2E,0x35,0xBD,0xAD,\n    0xBC,0x8F,0x42,0x45,0xF4,0xCA,0x8A,0xA1,0xEE,0x64,0x39,0xA1,0x52,0x86,0x57,0x18,\n    0xD1,0x07,0xC2,0x85,0xC4,0x1D,0x46,0x26,0xC6,0xF3,0xB3,0x16,0x14,0xCF,0xF1,0x77,\n    0x24,0x53,0x85,0x09,0x06,0xC5,0x5D,0x04,0x10\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c5a005fd75b7365afb371ecdc1f894eafaf2d70e492ec0b9060f60602db87832) == 265, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hu_HU.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_1cfb4ba5d922580e8b55091cb25723ec4fb3cb5e57624ebbde52ed45f476ef64[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x18,0xB7,0x88,0xC3,0x00,0x00,\n    0x65,0xDF,0xBC,0x00,0x10,0x42,0x00,0x80,0x10,0x00,0x62,0x08,0x70,0x3F,0xFF,0xDF,\n    0x10,0x20,0x00,0x20,0x20,0x09,0x14,0x0A,0x00,0x30,0x00,0xE6,0x01,0x2A,0x9F,0xA5,\n    0x4F,0x44,0xF5,0x1A,0x06,0x4C,0x86,0x9A,0x6C,0x53,0xD4,0x03,0x43,0x00,0x32,0x69,\n    0xA0,0xC8,0x60,0x86,0x98,0x8D,0x18,0x12,0x44,0x6A,0x93,0xF4,0xA3,0xF2,0x8F,0x52,\n    0x63,0x51,0xA1,0x88,0xF5,0x1E,0xA7,0xA4,0xF5,0x21,0xC2,0x35,0xB6,0x11,0x2E,0xB6,\n    0xC9,0x48,0x74,0x18,0xAA,0x47,0x2E,0x94,0xB8,0xC9,0x1B,0xE6,0xF3,0x41,0xD5,0x87,\n    0x23,0x5A,0x3E,0xCA,0xC8,0x3C,0x6A,0xDD,0x54,0xD5,0x23,0xED,0x80,0xCD,0xC7,0x69,\n    0x7F,0x33,0x10,0xC2,0x86,0x10,0x91,0x8A,0x12,0x9E,0x9C,0xA1,0x12,0x21,0x45,0xC8,\n    0xE6,0xB9,0x74,0x37,0x59,0x6F,0xD8,0x54,0x3F,0x46,0x52,0x47,0x22,0x09,0x44,0xFC,\n    0x61,0xE1,0x1F,0x93,0x68,0x32,0x52,0x5C,0xCF,0x8A,0x9D,0x5C,0x6F,0x02,0xC0,0x36,\n    0x0A,0x79,0x27,0x2A,0x64,0x17,0x28,0x67,0x09,0x86,0x16,0x97,0x73,0xB2,0xEF,0xA0,\n    0xC7,0x09,0x40,0xA1,0x2E,0xD1,0xDE,0xCE,0x4D,0x4A,0x65,0xE4,0x9A,0xCA,0x58,0x55,\n    0x60,0x6C,0x18,0x71,0xB4,0x71,0xD0,0xC9,0x9C,0x7B,0x79,0x9B,0xCA,0x30,0x6E,0x18,\n    0x28,0x93,0x12,0xB8,0xD6,0xE3,0x6F,0x22,0x5B,0x49,0x97,0xCF,0x1A,0x2A,0x87,0xB1,\n    0x88,0xE6,0x65,0x4A,0x18,0xDC,0x63,0x34,0x1A,0xEA,0x24,0xBA,0x28,0x5C,0x41,0xD4,\n    0x70,0x35,0x2C,0x1B,0x45,0x33,0xAF,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x80,0xC5,0xBC,\n    0x46,0x18\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1cfb4ba5d922580e8b55091cb25723ec4fb3cb5e57624ebbde52ed45f476ef64) == 274, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hy_AM.ARMSCII-8 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_14b456f69f70f2c72d307ea66168c5781f163089113fcee706660dbaa71ea230[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xDB,0xC3,0x86,0xF4,0x00,0x05,\n    0x48,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x66,0x1C,0x00,0x12,0x06,0x80,0x1A,0x01,0xA1,0xA6,\n    0x81,0x90,0x68,0x1A,0x68,0x0D,0x0D,0x01,0xA3,0x4C,0x40,0x18,0x80,0x30,0x98,0x8C,\n    0x86,0x80,0x06,0x40,0x03,0x10,0x34,0x03,0x46,0x8C,0x20,0x69,0xA0,0x00,0xCD,0x41,\n    0xA0,0xD0,0x03,0x26,0x46,0x40,0xD0,0xD0,0x34,0x0F,0x53,0xD2,0x7F,0xA7,0xBD,0x55,\n    0x4D,0x10,0x0D,0x02,0x43,0x40,0x64,0x0D,0x06,0x99,0x0D,0x30,0x9A,0x64,0x0D,0x34,\n    0xC9,0xA3,0x00,0x26,0x9A,0x69,0x84,0xC9,0x90,0xD0,0x31,0x30,0x04,0xC8,0x62,0x60,\n    0x41,0x89,0xA6,0x99,0x1A,0x64,0x34,0x62,0x64,0xD3,0x13,0x40,0x1A,0x34,0xC9,0x93,\n    0x40,0x1A,0x01,0xA6,0x00,0x86,0x98,0x13,0x08,0x34,0x7F,0xF9,0x55,0x10,0xD0,0x19,\n    0x18,0x98,0x99,0x00,0x00,0x00,0x00,0x04,0xC0,0x00,0x00,0x09,0x80,0x98,0x4C,0x00,\n    0x00,0xD0,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x04,0xC0,0x03,0x40,0x00,0x00,0x00,\n    0x00,0x13,0x00,0x4C,0x00,0x00,0x00,0x00,0x01,0x13,0xFD,0x52,0xA5,0x4F,0x53,0xDA,\n    0x50,0xD0,0x68,0xC8,0x1A,0x00,0x34,0xC9,0xA6,0x81,0xA0,0x00,0x0C,0x8D,0x0D,0x32,\n    0x32,0x68,0xC8,0x18,0x40,0x68,0x34,0x19,0x00,0xD0,0x1A,0x34,0xC4,0xC8,0x0C,0x8C,\n    0x99,0x06,0x99,0x03,0x40,0x34,0x0D,0x19,0x0D,0x06,0x98,0x8D,0x1A,0x34,0x34,0x34,\n    0xC8,0x00,0xD3,0x11,0xA3,0x41,0xA1,0xA7,0xA8,0x45,0x08,0x09,0x0A,0x0B,0x0C,0x0D,\n    0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n    0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0xFC,0x01,0x28,0x29,0x2A,0x2B,0x2C,0x2D,\n    0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,\n    0x3E,0x3F,0xFC,0xA0,0x20,0xA1,0x21,0xA2,0x22,0xA3,0x23,0x7E,0x95,0x52,0xBF,0x69,\n    0x89,0xBD,0xAA,0x4A,0x6C,0x6A,0xEB,0x2B,0x4B,0x6B,0x80,0x17,0x57,0x97,0xD8,0x18,\n    0x58,0x80,0x32,0x32,0xB3,0x33,0xB4,0xB5,0x35,0xB6,0x36,0xB7,0x37,0xB8,0x38,0xB9,\n    0x39,0xBA,0x3A,0xBB,0x3B,0xBC,0x3C,0xFF,0x1E,0x9E,0xDF,0x1F,0x5F,0x9F,0xE0,0x20,\n    0x60,0xA0,0xE1,0x21,0x61,0xA1,0xE2,0x22,0x62,0xA2,0xE3,0x23,0x63,0xA3,0xE4,0x24,\n    0x64,0xA4,0xE5,0x25,0x65,0xA5,0xFF,0xB3,0x13,0x33,0x53,0x73,0x93,0xB3,0xD3,0xF4,\n    0x14,0x34,0x54,0x60,0x69,0x29,0x69,0xA9,0xEA,0x2A,0x6A,0xAA,0xEB,0x2B,0x6B,0xAB,\n    0xEC,0x2C,0x6C,0xAC,0xED,0x2D,0x6D,0xAD,0xEE,0x2E,0x6E,0xAE,0xEF,0x2F,0x6F,0xAF,\n    0xF0,0x30,0x70,0xB0,0xF1,0x31,0x71,0xB1,0xF2,0x32,0x72,0xB2,0xFF,0xD9,0x99,0xB9,\n    0xD9,0xF5,0x35,0x55,0x75,0x95,0xB5,0xDE,0xCA,0xFB,0x0B,0x1B,0x2F,0x6F,0xBB,0xDF,\n    0xF0,0xB3,0xF8,0xFC,0x81,0xB4,0xB5,0xF9,0xFD,0x3E,0xB6,0xDF,0x6F,0xBF,0xE3,0xF3,\n    0xFA,0xB8,0xB2,0xB5,0x24,0x92,0x49,0xC4,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,\n    0x33,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x85,0x84,\n    0xEA,0xF5,0xFE,0x45,0xEB,0xFE,0x8A,0x59,0x83,0x04,0x27,0x56,0x9E,0x52,0x94,0xA5,\n    0x29,0x4A,0x52,0x94,0xC5,0x11,0x11,0x27,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x65,0x96,0x62,0x88,0x88,0x88,0x88,0x88,0x88,\n    0x88,0x88,0x88,0x89,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x03,0x1A,0x0F,0xAC,0xFF,0xDB,0xEF,0xF8,0xFC,0xFE,0xBF,0x74,0x3F,0xCF,\n    0xED,0x0F,0xFA,0x8D,0x51,0x92,0x92,0x5C,0xB9,0x74,0x84,0x87,0x2E,0x3F,0x7B,0x5D,\n    0x5B,0x5D,0x57,0x51,0xAB,0x56,0xAD,0x5A,0xEA,0xDA,0xEF,0xFA,0x29,0x14,0x8A,0x52,\n    0x95,0xF6,0x0A,0xF9,0x90,0x21,0x08,0x25,0x31,0x52,0x22,0x94,0x8A,0x44,0x44,0x69,\n    0xFF,0xDA,0xCA,0x91,0x48,0xD3,0xD4,0x98,0xA4,0x54,0x99,0xA4,0x45,0x22,0x94,0x99,\n    0x99,0x99,0x8A,0x52,0x94,0xA5,0x26,0x66,0x64,0x99,0x96,0x6E,0x65,0x52,0x64,0x00,\n    0x02,0x66,0x40,0x00,0x00,0x00,0x00,0x00,0x0F,0x82,0x64,0x3F,0x49,0x9F,0x8E,0x64,\n    0x00,0x00,0x00,0x02,0x11,0x59,0x28,0x84,0xA5,0x22,0x10,0x98,0x28,0x94,0x21,0x34,\n    0x4A,0x27,0xFB,0x4D,0x40,0x00,0x01,0x08,0x99,0x24,0x10,0x98,0x99,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xAF,0x48,0x54,0x48,\n    0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x02,0x25,0xC6,0xA9,0x48,0xFF,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x36,0xF0,\n    0xE1,0xBD,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_14b456f69f70f2c72d307ea66168c5781f163089113fcee706660dbaa71ea230) == 803, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hy_AM.ARMSCII-8 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_b091706d1d0998e7c268579fde8fd8b08dd96b1e412714c393229260f9617465[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x24,0xA4,0xEF,0x0B,0x00,0x04,\n    0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x97,0x03,0x0D,0xD0,0x04,0x4A,0x7F,0xEA,0xAA,0x99,0x06,\n    0x9A,0x00,0x06,0x86,0x8D,0x01,0xA0,0xD3,0x43,0x09,0xA0,0xC8,0xD1,0xA0,0xD0,0x68,\n    0xC8,0x03,0x46,0x40,0x1A,0x61,0x06,0x99,0x01,0x89,0x91,0xA6,0x41,0xA3,0x4D,0x0D,\n    0x1A,0x32,0x69,0xA3,0x41,0xA0,0x06,0x4D,0x00,0x68,0x34,0x30,0x9A,0x69,0x93,0x40,\n    0x69,0xA0,0xD1,0xA3,0x4D,0x00,0x64,0x1A,0x0C,0x81,0x24,0x4A,0xA7,0xA6,0x88,0xD4,\n    0xF2,0x68,0x7A,0xA3,0x34,0x4C,0x21,0x80,0x46,0x00,0x98,0x4C,0x4C,0x4D,0x32,0x60,\n    0x9A,0x60,0x08,0x30,0x00,0x04,0x60,0x4D,0x06,0x00,0x23,0x10,0x32,0x34,0xC0,0x26,\n    0x23,0x26,0x00,0x01,0xA2,0x30,0x98,0x1A,0x04,0x60,0x26,0x8C,0x26,0x8D,0x06,0x4D,\n    0x18,0x04,0xC2,0x05,0x29,0x46,0xF5,0x13,0x26,0x26,0x02,0x60,0x09,0x82,0x60,0x13,\n    0x00,0x09,0x82,0x30,0x00,0x00,0x00,0x09,0x80,0x00,0x11,0x93,0x4C,0x11,0xA6,0x09,\n    0x93,0x04,0xD0,0xC0,0x13,0x23,0x4C,0x21,0xA6,0x98,0x26,0x26,0x13,0x00,0x81,0x93,\n    0x46,0x02,0x60,0x26,0x01,0x1A,0x64,0x60,0x7E,0xAA,0x60,0xAA,0xAA,0x80,0x04,0xC0,\n    0x02,0x60,0x1E,0xA2,0x61,0xA9,0x80,0x00,0x00,0xD0,0x09,0x80,0x09,0x80,0x1A,0x01,\n    0x30,0x00,0x06,0x80,0x00,0x00,0x09,0x80,0x4C,0x26,0x01,0x18,0x00,0x13,0x01,0x30,\n    0x00,0x98,0x98,0x00,0x00,0x00,0x00,0x01,0xFF,0x48,0x35,0x6A,0x25,0x12,0xB2,0xE9,\n    0x22,0x28,0xC1,0x16,0x3C,0x90,0x26,0x24,0xC8,0x91,0x22,0x48,0x9E,0x01,0x24,0x42,\n    0x4C,0x99,0x92,0x84,0xD0,0x9A,0x93,0x62,0x31,0x21,0x48,0x9F,0x8A,0x46,0x92,0x24,\n    0xA9,0x32,0x4E,0x8D,0x4A,0x12,0x94,0xA9,0x01,0x2B,0x4B,0x1F,0x92,0x5A,0x97,0x25,\n    0xE9,0x82,0x09,0xF9,0xA6,0x28,0x24,0xC9,0x33,0x4D,0x13,0x54,0xD9,0x37,0x4E,0x13,\n    0x94,0xE9,0x3B,0x4F,0x13,0xD4,0xF9,0x3F,0x50,0x14,0x15,0x09,0x43,0x51,0x14,0x55,\n    0x19,0x47,0x41,0xA9,0x10,0x90,0x65,0x29,0x0D,0x52,0xD4,0xC5,0x2D,0x4D,0x53,0x9F,\n    0xA2,0x9E,0xA8,0x2A,0x2A,0x92,0xA6,0xAA,0x2A,0xAA,0xB2,0xAE,0xAC,0x2B,0x2F,0xD5,\n    0x5A,0x56,0xD5,0xC5,0x75,0x5E,0x57,0xE1,0x6C,0x2B,0x12,0xC6,0x84,0x59,0x10,0x20,\n    0x59,0x56,0x65,0x9D,0x68,0x5A,0x56,0xA7,0xEC,0xB5,0xAD,0x8B,0x6A,0xDC,0xB7,0xAE,\n    0x0B,0x8A,0xE4,0xB9,0xAE,0x8B,0xAA,0xEC,0xBB,0xAF,0x0B,0xCA,0xF4,0xBD,0xA1,0x50,\n    0x20,0x5F,0x17,0xD5,0xF9,0x7F,0x60,0x18,0x16,0x09,0x6A,0xC1,0xB0,0x8C,0x2B,0x0C,\n    0xC3,0xB1,0x0C,0x4B,0x14,0xC5,0xB1,0x8C,0x6B,0x1C,0xC7,0xB2,0x0C,0x8B,0x24,0xC9,\n    0xB2,0x8C,0xAB,0xF7,0x65,0x99,0x76,0x61,0x99,0x66,0x99,0xB6,0x71,0x9D,0x7F,0x0C,\n    0xF3,0x3E,0xD0,0x34,0x2F,0xE5,0xA2,0x68,0xD3,0x80,0x91,0xC9,0xC1,0x4E,0x12,0x70,\n    0xD3,0x88,0x9C,0x54,0xE3,0x27,0x1D,0x39,0x09,0xC9,0x48,0xF9,0x05,0x9C,0xA2,0x44,\n    0xE5,0x9C,0xC3,0x9A,0x73,0x8E,0x79,0xD0,0x3A,0x27,0x48,0x92,0x3A,0x67,0x50,0xEA,\n    0x9D,0x62,0x4C,0xEB,0x9D,0x83,0xB2,0x4A,0x12,0xA4,0xB1,0x2E,0x76,0x89,0x83,0xB6,\n    0x4C,0x9D,0xC2,0x68,0x9B,0x3B,0xA4,0xE1,0xDE,0x3B,0xE7,0x80,0xF0,0x9E,0x23,0xC6,\n    0x4E,0x9E,0x42,0x78,0xF2,0x9E,0x63,0xCE,0x7A,0x09,0xF3,0xD2,0x7A,0x8A,0x03,0xD6,\n    0x7B,0x0A,0x13,0xDA,0x51,0x1E,0xE3,0xDE,0x7C,0x0F,0x89,0xF2,0x3E,0x67,0xD0,0xFA,\n    0x94,0x65,0x21,0xF6,0x3E,0xE7,0xE0,0xFC,0x94,0xA7,0xE8,0xFD,0x9F,0xC3,0xFA,0x53,\n    0x14,0xE8,0x7F,0x91,0xF5,0x48,0xA5,0x53,0x2C,0x52,0x50,0xE8,0xD6,0x29,0x48,0x94,\n    0xA2,0x91,0x41,0xF7,0xA8,0x19,0xF7,0x10,0x41,0x90,0x88,0x21,0x03,0x3A,0x41,0x10,\n    0x7E,0xC3,0x0E,0x45,0x64,0x92,0x40,0x1D,0x61,0xC1,0x08,0x42,0x00,0x6F,0x0E,0x08,\n    0x00,0x00,0x83,0x94,0x38,0x00,0x10,0xF0,0x84,0x21,0x0B,0x9D,0xCC,0x10,0x89,0x44,\n    0x21,0x86,0x18,0x61,0x86,0x18,0x01,0x00,0x00,0x10,0x61,0x0E,0x0A,0x12,0x11,0x23,\n    0x1F,0x1D,0x01,0x1D,0x86,0x48,0x1D,0x93,0x32,0x66,0xF8,0x18,0x48,0x10,0xEC,0x02,\n    0x66,0x4D,0x24,0xE3,0x3B,0xA6,0x62,0x34,0x67,0x1D,0xDD,0x4C,0xE1,0x07,0x41,0x02,\n    0x10,0x71,0xDD,0xC7,0x77,0x04,0x44,0x48,0x4A,0x60,0x27,0x49,0x65,0xBE,0x7C,0xE7,\n    0x27,0x3D,0x10,0x4A,0x2B,0x0C,0x24,0x86,0x11,0x2E,0xC4,0x73,0x0B,0x4C,0xC2,0x5F,\n    0x9B,0x11,0x98,0x5F,0xDB,0x06,0xA9,0x82,0x55,0xDC,0x87,0x29,0xC2,0x74,0xC1,0xB8,\n    0x63,0x7A,0xC2,0x24,0x78,0x8E,0x06,0xEE,0x41,0xC9,0x7F,0xC9,0xC8,0xAC,0x2E,0x3B,\n    0x2E,0x03,0x02,0x52,0xD1,0xA1,0xA8,0x96,0x95,0x89,0x1C,0x4D,0x18,0x6D,0xA0,0xE7,\n    0xE8,0xC7,0xD7,0x12,0x56,0x5A,0x77,0xAF,0x8E,0x08,0xF6,0x36,0x7B,0x48,0x34,0x08,\n    0xB1,0xEE,0x14,0xB9,0x27,0x09,0x46,0x22,0x9B,0x1F,0x0A,0x00,0x34,0x26,0xD0,0x25,\n    0x18,0x98,0x4C,0x9C,0x9B,0xB1,0xCA,0x61,0x6D,0xA4,0xDD,0x00,0x78,0xC2,0x12,0xA0,\n    0x09,0xC1,0x21,0x2F,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x40,0x92,0x93,0xBC,0x2C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b091706d1d0998e7c268579fde8fd8b08dd96b1e412714c393229260f9617465) == 879, \"Wrong size of locale's blob\");\n\n/* hy_AM.ARMSCII-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_ec36f3d997d51b9dd411839a730d4e8e9367a3b31c376372e71ebd08465ef457[] = {\n    0x5E,0x5B,0xB3,0xB2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xE1,0xE0,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xB2,0xDB,0xE1,0x0A,0xE0,0xE3,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ec36f3d997d51b9dd411839a730d4e8e9367a3b31c376372e71ebd08465ef457) == 27, \"Wrong size of locale's blob\");\n\n/* hy_AM.ARMSCII-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_fcb0442d560d78be724af437ed3aad3c69ca0d4c72ff130f386fadd1aa3765ef[] = {\n    0x41,0x4D,0x44,0x20,0x0A,0xB8,0xF0,0x20,0x20,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fcb0442d560d78be724af437ed3aad3c69ca0d4c72ff130f386fadd1aa3765ef) == 37, \"Wrong size of locale's blob\");\n\n/* hy_AM.ARMSCII-8 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_55e9c02258f7df5c075916da9786cf148ab6c7c70779ec81f482551b25a8b079[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_55e9c02258f7df5c075916da9786cf148ab6c7c70779ec81f482551b25a8b079) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hy_AM.ARMSCII-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_f44d305707f7682749f7fbf20f9435fce82283ce20d541c3051a29450d92e494[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF5,0x1B,0x26,0x2C,0x00,0x00,\n    0x73,0xDF,0x1F,0x80,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x00,\n    0x20,0x1A,0xD8,0x08,0xA1,0xC0,0x6F,0xF2,0x1A,0xA3,0x30,0x30,0x00,0xF5,0x80,0x6A,\n    0x69,0x4C,0x99,0x18,0x4D,0xA2,0x64,0xCD,0x19,0x43,0x02,0x64,0xC0,0x4D,0x06,0xA9,\n    0xE9,0x4F,0x4D,0x4F,0x40,0x8F,0x40,0x46,0x08,0x60,0x46,0x46,0x34,0x4C,0x12,0x89,\n    0xA4,0x69,0x4D,0xE8,0x51,0xFA,0xA3,0x68,0xC8,0x26,0x4D,0x0C,0x13,0xD4,0xC9,0x8F,\n    0x54,0x78,0xA0,0x2E,0xB3,0xA9,0x6B,0x60,0x85,0xBE,0x6B,0x22,0x41,0xF9,0x68,0x8F,\n    0xE6,0x6D,0x90,0x60,0x14,0xCD,0x80,0xE0,0x18,0x82,0x4B,0xD3,0x41,0xA4,0xB0,0x71,\n    0xB1,0xCC,0xA1,0x22,0xD2,0x25,0x11,0xF7,0x08,0x12,0x02,0x98,0x1C,0x36,0x42,0x66,\n    0x0E,0x39,0x12,0xA7,0x08,0x4A,0xD4,0xB5,0x83,0x1B,0xA9,0x06,0x0A,0x56,0x4F,0xCC,\n    0x43,0xE4,0xC3,0x91,0xA0,0x14,0xFA,0x6D,0xC0,0x41,0x83,0x12,0x69,0x91,0x13,0x81,\n    0xBB,0x11,0x50,0xEE,0x4C,0xB4,0x0A,0xCC,0x8E,0x5C,0x1C,0x12,0xE2,0xA8,0xD4,0x1D,\n    0x2D,0x22,0x71,0x3A,0x69,0x26,0x53,0x22,0xA2,0xC5,0x93,0xFA,0x9D,0xCA,0x41,0x08,\n    0xB0,0x0C,0x40,0xED,0x7D,0x29,0x08,0xC4,0x70,0xA3,0x0B,0x8F,0xEA,0xB0,0xF2,0x06,\n    0x72,0x83,0xC3,0xC4,0xBA,0x92,0xFB,0x4E,0xC8,0xC9,0x74,0xAD,0x09,0x11,0x71,0x73,\n    0x14,0x65,0x14,0x54,0x9D,0x60,0xA2,0x9F,0xC6,0x9B,0x00,0xCC,0x51,0xEA,0xC5,0xCF,\n    0x2B,0x74,0x7C,0x40,0xC1,0xC5,0x45,0xF5,0x19,0x9F,0x04,0x49,0x99,0x53,0xD0,0xB0,\n    0x72,0x7F,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x7A,0x8D,0x93,0x16,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f44d305707f7682749f7fbf20f9435fce82283ce20d541c3051a29450d92e494) == 285, \"Wrong size of locale's blob\");\n\n/* hy_AM.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_871c51ab52ada53ea23d2bae728a727402c146861902440f800e5ee6419235f3[] = {\n    0x5E,0x5B,0xD5,0xA1,0xD4,0xB1,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD5,0xB8,\n    0xD5,0x88,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD4,0xB1,0xD5,0xB5,0xD5,0xB8,0x0A,0xD5,\n    0x88,0xD5,0xB9,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_871c51ab52ada53ea23d2bae728a727402c146861902440f800e5ee6419235f3) == 36, \"Wrong size of locale's blob\");\n\n/* hy_AM.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_cbb757b111049855b60ec5ee1a121a25493c3ecb1974c270b6274bd17d86f6e4[] = {\n    0x41,0x4D,0x44,0x20,0x0A,0xD4,0xB4,0xD5,0x90,0x20,0x20,0x0A,0x2E,0x0A,0x2C,0x0A,\n    0x33,0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,\n    0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cbb757b111049855b60ec5ee1a121a25493c3ecb1974c270b6274bd17d86f6e4) == 39, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed hy_AM.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_5bf1e6d04889b0dce3bbc276699449f9657e7aec5839b4dede17ab6a18633eee[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x69,0x1B,0x35,0x48,0x00,0x00,\n    0xCD,0x5F,0x7A,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x55,\n    0xE2,0x0A,0x00,0x3A,0x2C,0xA7,0xD3,0x87,0x00,0x30,0x01,0x05,0xB1,0x09,0x42,0x11,\n    0x3D,0x34,0x98,0x0A,0x66,0x93,0xD3,0x50,0x06,0xD4,0x0F,0x21,0x04,0x8A,0xA3,0x40,\n    0xC9,0xA0,0x19,0x34,0x34,0xC8,0x34,0x0D,0x01,0xEA,0x09,0x45,0x00,0x4D,0x30,0x86,\n    0x46,0x4C,0x41,0x90,0x18,0x8F,0x43,0x7A,0xDC,0xB5,0xFA,0xD9,0x86,0xC8,0xA6,0x9F,\n    0x1D,0x15,0x66,0x7B,0xB5,0x9B,0x26,0xA2,0x03,0x05,0x90,0xD0,0x78,0x32,0x9B,0x97,\n    0xA4,0x48,0xEE,0x47,0x9B,0x32,0x66,0x70,0x39,0x1C,0x4C,0x2F,0x2C,0x3C,0x05,0xC4,\n    0x62,0x75,0x31,0x7B,0x0E,0x5E,0x7E,0x25,0x97,0x72,0xCF,0x9E,0x79,0x88,0x92,0x51,\n    0xEB,0x04,0x22,0x03,0x4C,0x13,0x10,0x34,0x31,0x89,0x09,0x41,0x34,0x0D,0x31,0x30,\n    0x68,0x00,0x55,0x45,0x51,0xD1,0x01,0x2F,0x60,0x62,0x57,0x61,0x60,0x29,0x8B,0x77,\n    0x80,0xFB,0x60,0xC3,0x24,0x70,0xB9,0x82,0xA1,0x91,0xA9,0x48,0x14,0x11,0x65,0xC9,\n    0x83,0x1F,0xA5,0x47,0x41,0x29,0x28,0x34,0x25,0x91,0xF8,0x4C,0x92,0x5A,0x97,0x63,\n    0xB1,0x16,0x01,0x88,0x1A,0xE1,0x34,0x62,0x30,0xA8,0xEF,0xD5,0x71,0x02,0x43,0xCE,\n    0xAF,0x12,0xDC,0x29,0x3B,0x25,0xB5,0xEF,0x0A,0xCA,0x18,0xB5,0xC4,0x28,0x14,0x54,\n    0xEF,0x20,0x51,0x4D,0x8E,0x34,0x81,0x79,0x0B,0x1C,0x5E,0xF2,0x96,0x95,0x53,0x93,\n    0xB0,0xA5,0xF3,0x97,0x3E,0x64,0x4E,0xE5,0x44,0x46,0xA2,0xEE,0x48,0xA7,0x0A,0x12,\n    0x0D,0x23,0x66,0xA9,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5bf1e6d04889b0dce3bbc276699449f9657e7aec5839b4dede17ab6a18633eee) == 277, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed is_IS.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_7f28340d0569c1e37737aa7e4af0e20c58f291c78d75091438a64e946acdea91[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x85,0x31,0xDD,0x0E,0x00,0x05,\n    0x89,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x8C,0x38,0x02,0x49,0xA3,0x41,0x89,0xA0,0x61,\n    0x32,0x62,0x06,0x4C,0x99,0x30,0x04,0x60,0x21,0xA6,0x83,0x4C,0x9B,0x49,0xA3,0x10,\n    0xC0,0x00,0x8C,0x46,0x8D,0xA2,0x30,0x80,0x03,0x20,0x6D,0x43,0x0D,0x46,0x98,0x9A,\n    0x7E,0xA2,0x1E,0x9E,0xF5,0x52,0x79,0x36,0xA9,0xF9,0x13,0x69,0xA9,0xE8,0xD2,0x99,\n    0x34,0xC8,0xD3,0x26,0x4C,0x46,0x40,0x34,0xC4,0x03,0x40,0x01,0xEA,0x09,0x19,0x18,\n    0x4D,0x06,0x98,0x08,0xC4,0xC8,0x0D,0x34,0xC9,0x84,0x34,0xC9,0x93,0x46,0x20,0xD0,\n    0xD0,0xC8,0x68,0x19,0x06,0x10,0x06,0x8D,0xA4,0xF5,0x18,0x4D,0x0C,0x13,0xD4,0x64,\n    0xF4,0x4F,0x44,0xC9,0xA3,0x09,0xA6,0x1E,0x94,0xDF,0xEA,0x53,0xFF,0x54,0xA0,0x9A,\n    0x03,0x40,0xC9,0x80,0x9A,0x06,0x9A,0x34,0xD3,0x4C,0x86,0x26,0x40,0x32,0x0C,0x98,\n    0x08,0xD0,0x84,0x35,0x34,0x9A,0xA7,0xFA,0x94,0xF4,0x9E,0x79,0x4A,0x34,0xD0,0x00,\n    0x00,0x00,0x06,0x80,0x00,0x00,0x00,0x00,0x00,0x06,0x20,0x34,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0xDE,0xA8,0x44,\n    0xFF,0x52,0xAA,0xA0,0x00,0x00,0x00,0x06,0x80,0xD0,0xD0,0x00,0xD0,0x00,0x32,0x0D,\n    0x00,0xC4,0x06,0x80,0x00,0x00,0x68,0x00,0x00,0x03,0x41,0xA3,0x40,0x64,0xC9,0x91,\n    0xA1,0xA0,0x64,0x1A,0x68,0xC4,0x00,0x0D,0x0D,0x03,0x41,0xA0,0x00,0x00,0x00,0x00,\n    0xC7,0x41,0x34,0x96,0xDE,0x39,0x1C,0x53,0xD8,0xEB,0xE8,0x48,0xF3,0xF8,0x0B,0x64,\n    0x18,0xFC,0x82,0x16,0x43,0x0D,0x22,0x91,0xC9,0x24,0xB2,0x6E,0x1C,0xA6,0x55,0x2B,\n    0x96,0x4B,0x65,0xD2,0xF9,0x84,0xC6,0x65,0x33,0x9A,0x4D,0x66,0xD3,0x79,0xC4,0xE6,\n    0x74,0xE3,0xA0,0xD0,0xB9,0x39,0xBA,0x3A,0xBB,0x3B,0xBC,0x68,0xB4,0x7A,0x47,0x97,\n    0x97,0xA7,0xAD,0x31,0x8A,0x1E,0xDF,0xF5,0x5A,0xB3,0x46,0x9F,0xE0,0x13,0xEB,0xA0,\n    0xA0,0xF5,0xFB,0x03,0x09,0xA2,0x86,0xAF,0x8B,0x8D,0x8E,0x8F,0x89,0x8B,0x8C,0x92,\n    0x93,0x94,0xDA,0x70,0x1E,0x4F,0x3D,0x70,0x4F,0xF0,0xA8,0x28,0xA4,0x8F,0xBE,0xF1,\n    0xF8,0x90,0x31,0xE8,0x39,0x3C,0xA8,0x6E,0x5A,0x18,0x78,0x04,0x51,0x31,0x5C,0xD8,\n    0xBE,0x74,0x6F,0x3E,0x3A,0x42,0x47,0xA3,0x13,0x25,0x19,0xD2,0x95,0x9F,0x47,0x3F,\n    0x30,0x0E,0x9A,0x9B,0x9C,0xAD,0xE7,0xF5,0xC7,0x21,0x12,0x34,0x84,0xA5,0x2C,0x62,\n    0xEA,0x53,0x74,0xD3,0x99,0x58,0x8E,0xB9,0x45,0x68,0x80,0x00,0x00,0x00,0x00,0xAC,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xC7,0x1C,0x72,0x10,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x80,0x25,0xCD,0xD5,0x46,0x14,0xB9,\n    0x11,0xBA,0xD3,0x4A,0x40,0x88,0x89,0x1C,0x9E,0xF1,0x01,0x91,0x66,0x18,0x64,0xD4,\n    0xDC,0xE7,0x50,0x88,0x88,0x88,0x88,0x88,0x91,0x98,0x88,0xF9,0xEE,0x62,0x39,0xDE,\n    0x9F,0x57,0xAD,0xD7,0x22,0x2E,0xC1,0xA6,0x9E,0x3C,0x89,0x18,0xA2,0x8A,0x28,0xB5,\n    0xC0,0x00,0x92,0xB2,0x83,0xAC,0x31,0xF3,0xE7,0xCF,0xA0,0x40,0x74,0xEA,0x02,0x50,\n    0x25,0x2A,0xBD,0x0A,0x14,0x25,0x8C,0x30,0xC3,0x26,0x4E,0x38,0xE3,0x8E,0x39,0x84,\n    0x10,0x42,0x82,0x11,0x23,0x29,0x22,0x42,0x89,0x29,0x2A,0x52,0xCB,0x2C,0xC3,0x0C,\n    0xEC,0x58,0x58,0xF6,0x6C,0xBB,0x56,0x76,0x9D,0xBE,0xE5,0xAF,0x76,0xDA,0xDF,0xBD,\n    0x71,0x73,0xDF,0xBA,0xBB,0xBC,0xF0,0x78,0x6F,0x6F,0xBC,0x5E,0x3F,0x27,0x97,0xCD,\n    0xE7,0xF4,0x5F,0xFA,0x70,0x30,0x70,0xBD,0x5E,0xBF,0x67,0xB7,0xDD,0xEF,0xF8,0x61,\n    0xFC,0x7E,0x5F,0x3F,0xA7,0xD7,0xED,0xF7,0xFC,0x7E,0x7F,0x5F,0xBF,0xE2,0x9F,0xEA,\n    0x9F,0xF2,0x91,0x04,0x10,0x4E,0x59,0xC3,0x87,0x39,0x33,0xD3,0xDC,0x2D,0xFC,0xB9,\n    0xB3,0x66,0xF6,0xD2,0x97,0x2B,0x6D,0xAA,0x0B,0x16,0xB8,0x10,0x16,0xB5,0xAD,0x6C,\n    0x63,0x16,0xB6,0x31,0x8C,0x64,0x13,0x41,0x62,0xD6,0xFD,0xFC,0x23,0xE7,0xCF,0x5E,\n    0xBA,0x20,0x22,0x02,0x0A,0x52,0x94,0xA5,0x29,0x4A,0x52,0x9B,0x78,0xDB,0x8E,0x36,\n    0xF1,0xB7,0x1C,0x50,0x88,0x88,0x88,0xB6,0xD9,0x11,0x12,0x0E,0x0E,0xC2,0xC3,0x09,\n    0xCC,0xEA,0x11,0x1B,0x1A,0x4D,0x03,0xA6,0x4A,0x40,0x90,0x82,0x22,0x23,0x98,0x8E,\n    0x08,0x42,0x12,0x44,0x4D,0x19,0x07,0x03,0x34,0x66,0x92,0x94,0x82,0x4C,0x94,0x81,\n    0x21,0x04,0x44,0x47,0x31,0x1C,0x10,0x84,0x24,0x88,0x9A,0x32,0x0E,0x06,0x6C,0x00,\n    0x04,0x04,0x04,0x01,0xD4,0x92,0x00,0x44,0x1B,0x39,0xC0,0x44,0x0E,0x73,0x88,0x00,\n    0x88,0x84,0x92,0xD6,0xA9,0x25,0xAA,0xAD,0x55,0x55,0x24,0xB5,0x49,0x2A,0x49,0x23,\n    0xD7,0x90,0x00,0x64,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xC4,0x81,0xFB,\n    0xC9,0xED,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xAC,0x9A,\n    0xA2,0x49,0x24,0xB2,0x00,0x00,0x02,0x20,0x02,0x90,0xB5,0x4A,0x94,0x94,0x55,0x90,\n    0x52,0x5A,0xA4,0x05,0x24,0x5A,0xA2,0x40,0x14,0x96,0xA9,0x05,0x25,0x40,0x20,0x00,\n    0x22,0x29,0x0B,0x54,0xA9,0x49,0x45,0x59,0x05,0x25,0xAA,0x40,0x52,0x45,0xAA,0x24,\n    0x01,0x49,0x6A,0x90,0x52,0x10,0x08,0x00,0x00,0x02,0x2D,0x56,0xB0,0xFF,0xC5,0xDC,\n    0x91,0x4E,0x14,0x24,0x21,0x4C,0x77,0x43,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7f28340d0569c1e37737aa7e4af0e20c58f291c78d75091438a64e946acdea91) == 921, \"Wrong size of locale's blob\");\n\n/* is_IS.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_53888f22e342caa61e90b6f9d7c78007da83289e71e1d62501781b52b8a29ef0[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_53888f22e342caa61e90b6f9d7c78007da83289e71e1d62501781b52b8a29ef0) == 18, \"Wrong size of locale's blob\");\n\n/* is_IS.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_9fe49e7c783fbdf372e2170c007a7a78e6b5ae0d756620e0ac8cc3c2e4680ceb[] = {\n    0x49,0x53,0x4B,0x20,0x0A,0x6B,0x72,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9fe49e7c783fbdf372e2170c007a7a78e6b5ae0d756620e0ac8cc3c2e4680ceb) == 35, \"Wrong size of locale's blob\");\n\n/* is_IS.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_da634129866919e015cf9e204b69e7a90bf35c73936adadd872be6ca5948317b[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_da634129866919e015cf9e204b69e7a90bf35c73936adadd872be6ca5948317b) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed is_IS.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ed66888d1d4842ad62764d24e414e53d8fb359105572da56cf47ea211f2cb488[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x0A,0xBA,0xA4,0xC5,0x00,0x00,\n    0x6B,0x5F,0x81,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xFF,0xDF,\n    0x00,0x20,0x02,0x49,0x11,0x30,0x00,0xE6,0x68,0x31,0x29,0xA9,0xB5,0x3D,0x46,0x43,\n    0x46,0x4C,0x31,0x26,0x9E,0xA6,0x80,0xD0,0x53,0x43,0x40,0xD0,0x00,0x00,0x1A,0x09,\n    0x24,0x24,0xC6,0x9A,0x26,0x83,0x09,0x90,0x6D,0x46,0x84,0x72,0xB2,0xFB,0x1D,0x21,\n    0xE9,0x8B,0xA2,0xC2,0xBA,0x37,0x15,0xAF,0x88,0x3E,0x84,0x37,0x0F,0x28,0xEA,0x24,\n    0xD5,0xAD,0x90,0x82,0x1F,0x6A,0x0D,0x47,0xF2,0x0F,0x74,0x3A,0x68,0xCA,0x62,0x42,\n    0xFC,0x06,0x60,0x62,0x33,0x46,0xA0,0x82,0x41,0x96,0x13,0x8C,0xA6,0x26,0x09,0x71,\n    0x3B,0x18,0x1A,0x72,0x0D,0x9C,0x62,0x32,0xBE,0xA1,0xCB,0x71,0x93,0xC7,0xE1,0x98,\n    0xAB,0x07,0x93,0x4E,0x99,0xE7,0xB8,0xC1,0xD8,0x0B,0xD5,0x00,0x55,0x9A,0x5B,0xA9,\n    0x46,0x56,0x38,0xB5,0xED,0x52,0x9B,0x0B,0x75,0x3D,0x8C,0x20,0x31,0x74,0x39,0xC0,\n    0x52,0x13,0x0F,0xAD,0xC5,0xD1,0x39,0xC7,0xCA,0x28,0x61,0x30,0x19,0x35,0xAA,0x46,\n    0x22,0x44,0x23,0x08,0x46,0x3A,0x40,0xA4,0x0D,0x5E,0x0C,0x40,0x2C,0x15,0x08,0x5E,\n    0xC5,0x6A,0x23,0xDC,0x7E,0xC4,0xA8,0xE2,0xE7,0x91,0x6C,0x8D,0x79,0x10,0xA0,0xD5,\n    0x2D,0x16,0x76,0x28,0x94,0x94,0xAD,0x4B,0xCC,0x54,0x8A,0x16,0x85,0x8E,0x28,0x2D,\n    0x13,0xC8,0x9F,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x02,0xAE,0xA9,0x31,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ed66888d1d4842ad62764d24e414e53d8fb359105572da56cf47ea211f2cb488) == 254, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed is_IS.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_d16b8d4a22046c9bbccb9c556a436baa353b9121b985251cf95f1c60fe8e4a17[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF6,0x30,0x4C,0xD0,0x00,0x05,\n    0x90,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0x32,0x4C,0x70,0x04,0x93,0x4D,0x03,0x43,0x43,0x46,\n    0x99,0x0D,0x01,0xA6,0x8D,0x1A,0x1A,0x64,0x0C,0x8C,0x83,0xD4,0xF5,0x1A,0x19,0x36,\n    0x44,0x61,0x19,0x34,0x3D,0x04,0x64,0x0D,0xA4,0x30,0x9E,0xA7,0xA8,0xD1,0xA1,0x88,\n    0x31,0x3D,0x27,0xA4,0xC3,0x48,0x18,0xFF,0x54,0x99,0x36,0xA6,0xD4,0xD3,0xD5,0x3C,\n    0x69,0xA2,0x79,0x53,0x04,0x34,0x0C,0x01,0x34,0x68,0xC0,0x04,0x03,0x11,0xA3,0x41,\n    0x83,0x25,0x19,0x0C,0xF5,0x27,0xA9,0xEA,0x7A,0x99,0xBD,0x4A,0x34,0x03,0x26,0x80,\n    0xD0,0x03,0x26,0x9A,0x68,0x03,0x08,0xD3,0x26,0x9A,0x06,0x8C,0x09,0xA0,0x7A,0x8C,\n    0x8F,0x51,0xB4,0x68,0x8C,0x83,0xD4,0x07,0xA8,0x0F,0x51,0xA0,0x1A,0x6F,0x47,0xA3,\n    0xF5,0x55,0x3D,0x4C,0x26,0x9A,0x19,0x03,0x43,0x23,0x04,0xC9,0x88,0x1A,0x68,0x00,\n    0x34,0x1A,0x34,0x34,0xD0,0x00,0x7A,0x9A,0x10,0x86,0x85,0x32,0xA0,0x06,0x86,0x9A,\n    0x64,0x00,0x32,0x01,0x91,0xA3,0x4D,0x34,0x00,0x00,0xD0,0x68,0x19,0x01,0xA6,0x11,\n    0x90,0x18,0x9A,0x0D,0x00,0x00,0x00,0xD0,0xD0,0x03,0x40,0x64,0x34,0x0C,0x41,0x84,\n    0x01,0xA6,0x9A,0x31,0x00,0x1A,0x03,0x40,0x00,0x00,0x03,0x4F,0x50,0x89,0xFE,0xA5,\n    0x55,0x40,0x00,0x00,0x00,0x0D,0x01,0xA1,0xA0,0x01,0xA0,0x00,0x64,0x1A,0x01,0x88,\n    0x0D,0x00,0x00,0x00,0xD0,0x00,0x00,0x06,0x83,0x46,0x80,0xC9,0x93,0x23,0x43,0x40,\n    0xC8,0x34,0xD1,0x88,0x00,0x1A,0x1A,0x06,0x83,0x40,0x00,0x00,0x00,0x01,0x8E,0x82,\n    0x4A,0x96,0xD1,0x86,0x67,0xD3,0xFA,0x05,0x06,0x85,0x43,0xA2,0x51,0x68,0xCD,0x94,\n    0x7A,0x45,0x25,0xB6,0x94,0xDD,0x4B,0x6F,0x70,0xA6,0x53,0x65,0x6A,0x15,0x1A,0x95,\n    0x4E,0xA9,0x55,0xAB,0x38,0xB9,0x55,0xEB,0x15,0x9A,0xD5,0x6E,0xB9,0x5D,0x73,0x74,\n    0xD5,0xEB,0x35,0xAD,0x4D,0x7A,0xED,0x7B,0x63,0x6E,0xC3,0x63,0xB2,0xD9,0x96,0x2C,\n    0x5C,0xBE,0xD4,0x92,0xB7,0x06,0x77,0x3B,0xA3,0x06,0x0C,0xB9,0xEE,0xF7,0x8E,0x8E,\n    0xAE,0xC4,0xA9,0x3E,0xF0,0x47,0x04,0xD3,0xDB,0xE3,0xE9,0xA7,0xF8,0x0E,0x2F,0x1B,\n    0x8F,0xC8,0xE4,0xC0,0x9B,0x82,0xE5,0x14,0x6F,0x98,0x72,0x10,0xEF,0x73,0xA5,0x11,\n    0xD3,0xEA,0xC4,0xC5,0x45,0x9D,0x39,0xD8,0xEC,0xC6,0x74,0x23,0x8F,0x47,0xF6,0xE4,\n    0x64,0xA4,0xE5,0x23,0x50,0x77,0x48,0xF0,0x10,0x08,0x66,0x51,0xCD,0x24,0x10,0xF8,\n    0xB3,0x89,0x90,0x0C,0x9D,0x42,0x92,0x0A,0x17,0xBE,0xB2,0x78,0x94,0x23,0x14,0x8E,\n    0x54,0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x03,0xA9,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,\n    0x60,0x7B,0xDE,0x98,0xAC,0x0A,0x53,0xD5,0x1E,0x79,0xE7,0x9E,0x7A,0xFE,0x06,0x7F,\n    0x56,0x76,0xDC,0xE3,0x8E,0x3B,0x89,0x29,0x2A,0x52,0x94,0xA5,0x29,0x4A,0x52,0x95,\n    0x82,0xFD,0x46,0x97,0x49,0xB4,0x61,0x2C,0x59,0x7E,0x2C,0xC2,0x08,0x21,0xC6,0x00,\n    0x09,0x9E,0x3B,0x16,0x2C,0x79,0x13,0x33,0xA8,0x91,0x22,0x1B,0xC4,0x79,0x22,0x51,\n    0x04,0x10,0x41,0x24,0x04,0x4E,0x22,0x85,0x23,0xA5,0x4A,0x95,0x50,0xA2,0x8A,0x29,\n    0x0A,0xD3,0x26,0x4C,0xB2,0x76,0x78,0x61,0x86,0x24,0xA4,0xEA,0x08,0x1D,0x49,0x03,\n    0x8E,0x3A,0xA5,0x6A,0xC9,0x24,0x9F,0x1C,0xFD,0x05,0x0D,0x15,0x1F,0x93,0xCB,0xE6,\n    0xA4,0xF3,0xFA,0x3D,0x3E,0xAF,0x5D,0x2D,0x35,0x3D,0x45,0x4D,0x55,0x5D,0x65,0x6F,\n    0xB2,0xBB,0xDB,0xEE,0xAF,0xF7,0xFC,0x2C,0x2C,0x6C,0xAC,0xED,0x2D,0x6D,0xAD,0xEE,\n    0x2E,0x6E,0xAB,0x7D,0xDE,0xFF,0x85,0x77,0xC6,0xBF,0xE5,0xF3,0xFA,0x7D,0x7E,0xDF,\n    0x7F,0xC7,0xE7,0xF5,0xFB,0xFE,0x7F,0x59,0x7F,0x99,0x58,0x32,0x41,0x04,0x37,0x2B,\n    0x97,0x2E,0xDB,0x2D,0x5B,0xB0,0xD7,0xAC,0x59,0x1A,0xAD,0x5A,0xB5,0x4A,0x54,0xC4,\n    0xC4,0x28,0x50,0x62,0x74,0x96,0x42,0x11,0x32,0x62,0x10,0x84,0x4E,0x9C,0x84,0x4C,\n    0x98,0x84,0x21,0x08,0x9E,0xD7,0x63,0x6A,0x6C,0x6B,0x6B,0x4A,0x96,0xD2,0x91,0x22,\n    0x34,0x76,0x06,0x22,0x44,0x61,0x88,0x8C,0x34,0xD3,0x4D,0x34,0xD6,0x59,0x65,0x95,\n    0xB4,0x5B,0x0C,0x2D,0xA2,0xD8,0x61,0x91,0x11,0x11,0x11,0x5A,0xC8,0x88,0x8E,0x82,\n    0x20,0x6A,0xE0,0x06,0x33,0x79,0xC0,0xC6,0x9E,0x9E,0x6A,0x90,0x6A,0x65,0x28,0x09,\n    0x08,0x22,0x22,0x39,0x88,0xE0,0x84,0x02,0x14,0x44,0x49,0x51,0xC8,0x10,0x07,0x52,\n    0x14,0x95,0x24,0x14,0x65,0x28,0x09,0x08,0x22,0x22,0x39,0x88,0xE0,0x84,0x90,0x12,\n    0x92,0x92,0x51,0x90,0x70,0x39,0xC1,0x60,0x22,0x02,0x20,0x20,0x0D,0x54,0x94,0x08,\n    0x00,0xAC,0xE7,0x10,0x01,0x39,0xE5,0x5A,0xAA,0xD6,0xA9,0x25,0x5A,0xA4,0x96,0xAA,\n    0xB5,0x55,0x54,0x92,0xD5,0x24,0xAA,0x92,0x48,0xF5,0xE4,0x00,0x19,0x24,0x80,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x07,0xB1,0x20,0x7E,0xF2,0x7B,0x72,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x32,0x68,0x92,0x59,0x00,0x00,0x01,0x04,0x44,\n    0x14,0x85,0xAA,0x54,0xA4,0xA2,0xAC,0x82,0x92,0xD5,0x20,0x29,0x22,0xD5,0x29,0x20,\n    0xA5,0x49,0x52,0x5A,0xA4,0x14,0x95,0x16,0x01,0x00,0x05,0x21,0x6A,0x95,0x29,0x28,\n    0xAB,0x20,0xA4,0xB5,0x48,0x0A,0x48,0xB5,0x45,0x48,0x29,0x52,0x54,0x96,0xA9,0x05,\n    0x22,0x48,0x81,0x11,0x00,0x04,0x41,0x02,0x00,0x00,0x1F,0xF1,0x77,0x24,0x53,0x85,\n    0x09,0x0F,0x63,0x04,0xCD,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d16b8d4a22046c9bbccb9c556a436baa353b9121b985251cf95f1c60fe8e4a17) == 950, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed is_IS.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ade4730ac907c1e16cb7c214ea8f5e9306d76261fb69619dc813b44c8ae0e0df[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x69,0x91,0x7A,0x59,0x00,0x00,\n    0x6B,0x5F,0x9C,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xFF,0xDF,\n    0x00,0x20,0x02,0x49,0x11,0x08,0x00,0x30,0x00,0xE6,0x68,0x31,0x29,0xA9,0xB5,0x3D,\n    0x46,0x83,0x46,0x43,0x31,0x06,0x90,0x06,0x84,0x9A,0x69,0xA0,0x68,0x00,0x00,0x0D,\n    0x02,0x49,0x05,0x1E,0x86,0x89,0x90,0xC2,0x32,0x0D,0x1A,0x08,0xFA,0xB2,0xEB,0x1D,\n    0x21,0x9B,0x17,0x45,0x85,0x74,0x6D,0xEB,0x2E,0xF0,0x7D,0x08,0x6D,0xDE,0x11,0xC8,\n    0x49,0xAB,0x5A,0x21,0x04,0x3E,0x54,0x1A,0x8F,0xE0,0x1E,0xE8,0x73,0xC5,0x94,0xC4,\n    0x85,0xD7,0x8C,0x00,0xF2,0x30,0x46,0xA0,0x82,0x41,0x95,0xF3,0x8C,0xA6,0x26,0x09,\n    0x71,0x3A,0x18,0x1D,0xF8,0x87,0x97,0x18,0x0C,0xAD,0x90,0xE5,0xB0,0xC9,0xE3,0xEF,\n    0xC8,0x54,0x03,0xCD,0x53,0xB5,0x3B,0xE8,0x30,0x74,0x02,0xD5,0x10,0x25,0x92,0x5B,\n    0x29,0xD3,0x3A,0x9C,0x56,0xF6,0x92,0xD5,0x85,0xB2,0xD7,0xC9,0x7C,0x06,0x2C,0x87,\n    0x18,0x0A,0x62,0x61,0xF4,0x38,0xB1,0x8E,0x71,0xF0,0x8A,0x0B,0x25,0x83,0x26,0xB5,\n    0x44,0x61,0x88,0x84,0x61,0x08,0xC7,0x28,0x14,0x40,0xD4,0xF0,0x62,0x01,0x58,0xA4,\n    0x42,0xF6,0x28,0x54,0x8F,0x71,0xF7,0x02,0x47,0x07,0x3C,0xA5,0xB1,0x33,0xB8,0x84,\n    0x4C,0xD2,0xEA,0xB2,0xFC,0x92,0x09,0xAA,0x89,0x12,0x5A,0x17,0x18,0xAA,0xC8,0xAC,\n    0xC9,0xB8,0x89,0x60,0x9E,0x52,0x7F,0x17,0x72,0x45,0x38,0x50,0x90,0x69,0x91,0x7A,\n    0x59\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ade4730ac907c1e16cb7c214ea8f5e9306d76261fb69619dc813b44c8ae0e0df) == 257, \"Wrong size of locale's blob\");\n\n/* it_IT.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3e14359421ae11d0bef7f831838dc3fed2ad0142590584f74d29c1172f3dc789[] = {\n    0x5E,0x5B,0x73,0x53,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3e14359421ae11d0bef7f831838dc3fed2ad0142590584f74d29c1172f3dc789) == 18, \"Wrong size of locale's blob\");\n\n/* it_IT.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_e64a073fe39f4aa21f39fd2031592ae1c521548b20df5fbd004ad5e5ad4bd746[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e64a073fe39f4aa21f39fd2031592ae1c521548b20df5fbd004ad5e5ad4bd746) == 35, \"Wrong size of locale's blob\");\n\n/* it_IT.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_af622b4ce84764bb23ac752b6aefcd3150cbdafbcd78991421c69e82f1885cc7[] = {\n    0x2C,0x0A,0x2E,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_af622b4ce84764bb23ac752b6aefcd3150cbdafbcd78991421c69e82f1885cc7) == 9, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed it_IT.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_32714c116fb5280b9c99b8ad4134fa7c5ef034a023599e5edff6b2f4f3a8ed37[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x9B,0x42,0xD5,0x58,0x00,0x00,\n    0x36,0xDF,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0xE7,0x89,0x70,0x3E,0xA7,0xDF,\n    0x10,0x00,0x04,0x30,0x00,0xEC,0xA0,0x64,0x80,0xA7,0xA8,0xF4,0x83,0x40,0x61,0xEA,\n    0x4F,0xD4,0x8F,0x48,0x30,0x69,0xA3,0x4D,0x30,0x98,0x99,0x30,0x10,0x34,0xC1,0x29,\n    0xA2,0x43,0x53,0x46,0x98,0x8F,0x24,0x99,0x0C,0x03,0x4D,0x17,0xB2,0x5F,0x94,0x03,\n    0x20,0xB2,0x9C,0x9A,0x03,0x5D,0x17,0x77,0xED,0xF2,0x1B,0x20,0xB9,0xA5,0x51,0x5A,\n    0xD2,0x62,0x2E,0xDA,0x41,0x10,0x45,0xF1,0x05,0x94,0xB6,0x4E,0x3C,0x3A,0x91,0x79,\n    0x9F,0x03,0x40,0xA1,0xA2,0x68,0x10,0x90,0xEA,0xFF,0x3F,0xDF,0xFD,0x8B,0x86,0x63,\n    0xA0,0x98,0x42,0x00,0x42,0x66,0x43,0x7E,0x23,0x69,0x26,0xE2,0x54,0xB6,0x18,0xCF,\n    0x1C,0xA6,0x3B,0x90,0x60,0xD4,0x13,0x7A,0x0A,0x4E,0x93,0x2F,0x44,0x36,0x08,0x44,\n    0x07,0xB2,0xFA,0xFA,0x53,0xCD,0xC1,0x1A,0xC2,0xE7,0x0E,0x82,0x77,0x9C,0xFA,0x95,\n    0x0E,0x01,0x8E,0xB2,0x46,0x66,0x25,0xC5,0xC2,0x2F,0x62,0x85,0x64,0x73,0xF1,0x16,\n    0xD7,0x41,0xA1,0x6F,0x58,0x0E,0xE1,0x32,0x97,0x9A,0x88,0x2D,0x11,0x29,0x0E,0x8A,\n    0xE4,0x48,0xF7,0x62,0x36,0xF3,0xE2,0xDB,0xF7,0x62,0xFD,0x08,0x10,0x10,0x43,0x64,\n    0x61,0x65,0x1C,0x96,0xA3,0x9A,0xD8,0x23,0x0D,0x59,0x08,0x98,0x4C,0xAB,0x1F,0x45,\n    0xDC,0x91,0x4E,0x14,0x24,0x26,0xD0,0xB5,0x56,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_32714c116fb5280b9c99b8ad4134fa7c5ef034a023599e5edff6b2f4f3a8ed37) == 250, \"Wrong size of locale's blob\");\n\n/* it_IT.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_66ee59e005279f7f056ae269f2847d13b3752e3d54676dfe4e06d68228f82126[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_66ee59e005279f7f056ae269f2847d13b3752e3d54676dfe4e06d68228f82126) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed it_IT.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_cb417ec979d1145d6576357e17cace678e68447e37d928b63c7236a15536e97f[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x79,0x6F,0x54,0x60,0x00,0x00,\n    0x36,0xDF,0x94,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0xE7,0x89,0x70,0x3E,0xA7,0xDF,\n    0x10,0x00,0x04,0x08,0x00,0x30,0x00,0xEC,0xA0,0x64,0x80,0xA7,0xA8,0xF4,0x83,0x40,\n    0x31,0xEA,0x4F,0xD4,0x8F,0x48,0x18,0x64,0x69,0xA6,0x99,0x18,0x4C,0x8C,0x13,0x40,\n    0x60,0x48,0x91,0x0D,0x53,0xD1,0xA6,0x29,0xBD,0x14,0x64,0x62,0x69,0x93,0xD4,0xD9,\n    0xAF,0x44,0xBF,0x18,0x06,0x41,0x65,0x38,0xB4,0x06,0x99,0xAE,0xCF,0xBB,0x64,0x35,\n    0x41,0x73,0x4A,0xA2,0xB5,0xA4,0xC4,0x5D,0xAC,0x82,0x20,0x8B,0xE2,0x0F,0x29,0xFB,\n    0x52,0x5D,0xE1,0xCC,0xBC,0xCF,0xDC,0xD4,0x2A,0x6A,0xD4,0x86,0x36,0x43,0xBF,0xF7,\n    0xEF,0xA7,0x62,0xE1,0x23,0x98,0xD0,0xC6,0x00,0xC6,0x93,0x17,0xCB,0x37,0x13,0x5C,\n    0x4D,0x0B,0x64,0x8C,0xF1,0xCA,0x84,0x41,0x23,0x05,0x51,0xAF,0x01,0x49,0xD2,0x65,\n    0xE8,0x86,0xC1,0x08,0x80,0xF4,0x5F,0x5F,0x0A,0x78,0xB8,0x23,0x58,0x5C,0xE1,0xC8,\n    0x4E,0xF3,0x97,0x32,0xA1,0xC0,0x31,0xD2,0x4C,0xCC,0xC4,0xB8,0xB8,0x65,0xE8,0xA9,\n    0xA4,0xCE,0x5D,0xE5,0x6E,0x9A,0x8A,0x4F,0x83,0xC0,0x88,0x0A,0x15,0xBC,0xD8,0x61,\n    0x68,0xC9,0xCC,0x86,0x69,0x91,0x33,0xCD,0x8C,0xDD,0xCB,0x8A,0xE1,0xBF,0x18,0xE6,\n    0x48,0x60,0x48,0x92,0xC8,0xC2,0xCA,0xC1,0x3D,0x88,0x36,0xB0,0x66,0x1B,0x26,0x32,\n    0x81,0x43,0xFD,0x1A,0xA3,0xD0,0xBB,0x92,0x29,0xC2,0x84,0x83,0xCB,0x7A,0xA3,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cb417ec979d1145d6576357e17cace678e68447e37d928b63c7236a15536e97f) == 256, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ja_JP.eucJP LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_6979dc6ac909fa32f675b9ed20d885c2b6eb145aa577001e790138df46e18af1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x35,0x2A,0x5B,0xB4,0x00,0x07,\n    0x4C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xD0,0x04,0xB0,0x0F,0x01,0xC4,0x1A,0x2A,0xB9,0x21,0x14,0xD4,0x50,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x67,0xFF,0xAA,0xAA,0x00,0x03,0x40,\n    0x00,0x00,0x06,0x80,0x0F,0xFF,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xA8,0xA5,0x3F,0xD2,0x53,0xC8,0xCA,0x7A,\n    0x87,0xA8,0x1E,0xA3,0xF5,0x01,0x1A,0x0D,0x0D,0x32,0x06,0x80,0x06,0x23,0x40,0x34,\n    0x34,0x68,0x68,0x34,0x69,0xA3,0x40,0x00,0x01,0xA6,0x80,0x34,0x00,0xD0,0x03,0x46,\n    0x80,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xEA,0x89,0x7F,\n    0xFB,0x55,0x54,0xD0,0x1A,0x64,0xD0,0x1A,0x32,0x34,0x06,0x8D,0x00,0xD3,0x46,0x99,\n    0x00,0x0D,0x01,0xA0,0x68,0x00,0x06,0x8D,0x06,0x41,0x91,0x93,0x43,0x41,0xA3,0x40,\n    0x64,0x69,0xA0,0xD0,0xC2,0x64,0x00,0x00,0x00,0x00,0x1A,0x0C,0x8C,0x13,0x46,0x43,\n    0x40,0x34,0x0D,0x0C,0x11,0xA0,0x06,0x9A,0x12,0x60,0x00,0x98,0x00,0x09,0x80,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x4D,0x52,0x25,0x35,0x3F,\n    0x54,0x06,0x40,0x3C,0xA0,0x00,0x1A,0x68,0x00,0x00,0x00,0x0F,0x50,0x00,0x00,0x00,\n    0x00,0x00,0x03,0x46,0x8D,0x03,0xD4,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x68,0x00,\n    0x1A,0x1A,0x34,0x3D,0x26,0xD2,0x0D,0x1A,0x0C,0x41,0xA0,0x7A,0x8D,0x3C,0x92,0x5E,\n    0x5B,0xB9,0xFC,0x61,0xBC,0x3B,0x58,0x08,0x76,0x48,0x42,0x07,0x71,0x23,0xB8,0x24,\n    0x4B,0x61,0xB9,0x16,0xE0,0x99,0xA2,0x68,0x33,0x6C,0x4D,0x47,0x24,0xD8,0x9B,0x93,\n    0x82,0x72,0x4E,0x87,0x44,0xEC,0x9E,0x0B,0x8F,0x03,0xC8,0xF4,0x3D,0x8F,0x83,0xE9,\n    0x3D,0x1C,0xCF,0x87,0xE2,0x7E,0x50,0x0A,0x09,0x42,0x1F,0xCA,0x19,0x44,0x28,0xA4,\n    0x01,0x46,0x20,0x47,0xF2,0x08,0xA3,0x8F,0xD4,0x82,0x92,0x52,0x8A,0x59,0x06,0x53,\n    0x0A,0x69,0x4E,0x29,0xE5,0x40,0xA8,0x95,0x22,0xA6,0x55,0x0A,0xA9,0x56,0x21,0x08,\n    0x52,0x18,0xAB,0x95,0x82,0x1E,0x3A,0x10,0x2B,0x42,0x48,0x62,0xB6,0x57,0x0A,0xE9,\n    0x5E,0x2B,0xE4,0x41,0x60,0x2C,0x25,0x88,0x89,0x2C,0x65,0x90,0x8A,0x2C,0xA5,0x98,\n    0xB3,0x91,0x64,0x55,0xA0,0x89,0x2D,0x25,0xA8,0xB5,0x91,0x92,0x36,0xD2,0x34,0xB7,\n    0x11,0xC5,0xBC,0x7D,0x7D,0xB8,0x11,0xE5,0xC4,0xB9,0x17,0x32,0xE8,0x5D,0x4B,0xB1,\n    0x77,0x2F,0x05,0xE4,0xBD,0x17,0xB2,0xF8,0x5F,0x4B,0xF1,0x7F,0x30,0x06,0x04,0xC1,\n    0x18,0x33,0x08,0x48,0x18,0x52,0x44,0x7B,0x7C,0xC3,0x18,0x73,0x10,0x62,0x4C,0x51,\n    0x8B,0x23,0xF1,0x86,0x34,0x92,0x31,0xC6,0x3C,0xC8,0x19,0x13,0x24,0x64,0xCC,0xA1,\n    0x95,0x32,0xC4,0x99,0x97,0x33,0x06,0x64,0xCD,0x19,0xB3,0x38,0x67,0x4C,0xF1,0x9F,\n    0x25,0x0D,0x01,0xA1,0x25,0x4D,0x11,0xA3,0x34,0x86,0x94,0xD3,0x1A,0x73,0x50,0x4A,\n    0x20,0xD4,0x89,0x35,0x46,0xAC,0x65,0xAC,0x12,0xF3,0xAD,0x24,0xD9,0x6B,0x86,0x5A,\n    0xF3,0x60,0x6C,0x4D,0x91,0xB3,0x36,0x86,0xD4,0xDB,0x0D,0xB6,0xE2,0x77,0x02,0x77,\n    0x23,0xE6,0x0F,0x9A,0x3E,0x70,0xF9,0xE3,0x84,0x1F,0x40,0x70,0x83,0xE8,0x8F,0xA4,\n    0x38,0x51,0xF4,0xC7,0xD4,0x1F,0x54,0x7D,0x61,0xF5,0xC7,0xD8,0x1F,0x64,0x7D,0xA1,\n    0xF6,0xC7,0xDC,0x1F,0x74,0x7D,0xE1,0xF7,0xC7,0x0C,0x3F,0x00,0xFC,0x23,0xF1,0x0E,\n    0x1C,0x7E,0x31,0xF9,0x07,0x10,0x3F,0x28,0xFC,0xC3,0xF3,0x8D,0xC8,0xE2,0x47,0xE8,\n    0x1C,0x50,0xDD,0x0E,0x28,0x71,0x63,0xF4,0x8F,0xD4,0x3F,0x58,0xFD,0x83,0x8C,0x1F,\n    0xB4,0x7E,0xE1,0xC6,0x8F,0xDE,0x3F,0x80,0xFE,0x23,0xF9,0x0E,0x38,0x71,0xE3,0x90,\n    0x1F,0xCC,0x7F,0x41,0xFD,0x47,0xF6,0x1C,0x88,0xFE,0xE3,0xFC,0x0F,0xF2,0x3F,0xD0,\n    0xFF,0x65,0xD9,0xFE,0x1F,0xE9,0x92,0x3F,0xE3,0x24,0x5E,0x17,0xA6,0x4C,0xC9,0x98,\n    0x28,0x49,0x7A,0xC8,0x40,0x0B,0xC6,0x40,0x0B,0x9D,0xF2,0x82,0xEC,0x6E,0xA8,0xDF,\n    0xDC,0xC9,0xB2,0xCD,0xB3,0x4F,0xA6,0x8F,0x7D,0xD7,0xA5,0x1B,0xFD,0x4C,0xAC,0xCA,\n    0xD8,0xA5,0x75,0x53,0x65,0xD2,0xEC,0x4A,0x36,0x2B,0xAE,0x92,0x85,0x54,0xA3,0x9C,\n    0x55,0x1A,0x52,0xCD,0x6C,0x65,0x18,0x02,0xC5,0x8B,0x16,0x2C,0x58,0xB1,0x62,0xC5,\n    0x8B,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x81,\n    0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x04,\n    0x08,0x10,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x58,0xB1,0x62,\n    0xC5,0x8B,0x16,0x29,0x21,0x7E,0x49,0x22,0xC8,0xA2,0x8A,0x0A,0x2C,0x51,0x64,0x90,\n    0xC4,0x32,0x01,0xBB,0x24,0x93,0x1F,0x20,0x62,0xE3,0xDE,0xD2,0x06,0x09,0x00,0x64,\n    0x06,0xED,0x2D,0x73,0xE8,0x49,0x0B,0x40,0x21,0x65,0x84,0x90,0xA3,0x66,0x40,0xDF,\n    0x42,0x15,0x42,0xF9,0x09,0x25,0x94,0x84,0xB1,0x21,0x02,0x4B,0xDA,0xEC,0xD5,0x21,\n    0x90,0x64,0x0E,0x7E,0xAA,0x40,0x59,0x42,0x40,0xB4,0x08,0x4A,0xAA,0xA8,0x24,0xA8,\n    0x21,0x41,0x00,0xAA,0x94,0x22,0x0D,0x29,0x17,0x22,0x89,0x29,0x8D,0x29,0x40,0x80,\n    0x32,0x00,0x89,0x83,0x24,0xA1,0x29,0x43,0x87,0x0D,0xDB,0xA8,0x52,0x94,0xA5,0x12,\n    0xE0,0x3B,0x20,0x40,0x09,0x19,0xB3,0x66,0xCD,0x98,0xA5,0x29,0x4A,0x14,0xA5,0x57,\n    0x59,0x5D,0x75,0xD7,0x59,0x0C,0xA6,0xD2,0x46,0x12,0x41,0x09,0x21,0x40,0x2F,0xC1,\n    0x22,0x21,0x0C,0xA0,0x94,0x92,0x5D,0x5D,0x5D,0x66,0x14,0x6B,0x50,0x2D,0x04,0x96,\n    0x88,0xC9,0x26,0x5A,0x12,0x4B,0xA4,0x84,0xAA,0x01,0x63,0x12,0xA3,0x1E,0xC0,0x4A,\n    0x63,0xA1,0x5C,0xF0,0x92,0x82,0x29,0x65,0x02,0xB9,0x7C,0x94,0x00,0xC6,0x5B,0x5D,\n    0xD4,0x00,0x5E,0x30,0x80,0xC9,0x23,0x0A,0x5D,0xC3,0x96,0x8C,0x3C,0x34,0x61,0x87,\n    0x86,0x18,0x59,0x65,0x96,0x59,0x65,0x84,0x21,0x08,0x25,0x52,0x21,0xBA,0x4E,0x4A,\n    0x44,0x2E,0x90,0x09,0x66,0x01,0x72,0xC0,0x98,0x74,0x0F,0x25,0x0C,0x2A,0x49,0xE2,\n    0x24,0x98,0x64,0x99,0xB4,0x10,0x0C,0x02,0x5A,0xE5,0x96,0xB6,0xB6,0xAE,0x9D,0x3A,\n    0x81,0x81,0x76,0x42,0x01,0x74,0xAE,0xBA,0xEB,0xAF,0x05,0x05,0x31,0x42,0x01,0xA3,\n    0xD3,0x56,0xAD,0x5A,0xB5,0x92,0x83,0x42,0x10,0x88,0xC4,0x82,0x02,0x45,0xB4,0x6C,\n    0x44,0x2A,0xDC,0x4D,0xF4,0x24,0x85,0xBE,0xC5,0x42,0x05,0xB0,0x48,0x88,0x42,0xD8,\n    0x94,0x00,0x99,0xCF,0x3D,0x97,0x5C,0x5C,0x42,0xE0,0x2E,0x35,0xDC,0x1E,0x0D,0x24,\n    0x94,0xA5,0x54,0x92,0x49,0x48,0xA4,0xE9,0x24,0x92,0x50,0x69,0x24,0xA6,0xB0,0x6A,\n    0x72,0x92,0x54,0x55,0x67,0x56,0xA4,0x92,0xB6,0x24,0x92,0x49,0x53,0x52,0x49,0x2A,\n    0xCD,0xEC,0x54,0xB8,0x16,0x6A,0xFB,0x9E,0x79,0xE7,0x39,0x99,0x9C,0xE6,0x66,0x7E,\n    0xF9,0xF3,0xCC,0xCF,0x3D,0x02,0xE6,0x6C,0x4B,0x98,0x02,0xDE,0x25,0x12,0x54,0x81,\n    0x2D,0xD0,0xAA,0x15,0xC2,0xD2,0x58,0xAC,0x20,0x28,0x11,0x42,0x90,0x40,0xC0,0x21,\n    0x0A,0xE2,0x4B,0x08,0x88,0x16,0x10,0x85,0x20,0x84,0x0A,0x21,0x25,0x88,0x83,0xE7,\n    0x33,0x41,0x39,0x9E,0x68,0x27,0x33,0xCF,0xE1,0x6F,0x99,0xCC,0xE6,0x78,0x73,0x3F,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x02,0x91,0x49,0x6F,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x81,0xA9,0x52,0xDD,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6979dc6ac909fa32f675b9ed20d885c2b6eb145aa577001e790138df46e18af1) == 1279, \"Wrong size of locale's blob\");\n\n/* ja_JP.eucJP LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_baad646dbefbdabb7ae1afd81bdf4604ce79297966a8cb2f0902c95c71914450[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0xF9,0xA3,0xD9,0xA4,0xCF,0xA5,0xCF,0x5D,0x2E,0x2A,0x0A,\n    0x5E,0x5B,0x6E,0x4E,0xA3,0xEE,0xA3,0xCE,0xA4,0xA4,0xA5,0xA4,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_baad646dbefbdabb7ae1afd81bdf4604ce79297966a8cb2f0902c95c71914450) == 32, \"Wrong size of locale's blob\");\n\n/* ja_JP.eucJP LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_fb96dc8e1dcd442c10b73096d0a099b5ac9b889090dec6200a630b46cbcfb4ad[] = {\n    0x4A,0x50,0x59,0x20,0x0A,0x5C,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fb96dc8e1dcd442c10b73096d0a099b5ac9b889090dec6200a630b46cbcfb4ad) == 34, \"Wrong size of locale's blob\");\n\n/* ja_JP.eucJP LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_5afb2e4b577f1f6a7df332e8ada33ecafaf8a5881eabda4824789cd012626e75[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5afb2e4b577f1f6a7df332e8ada33ecafaf8a5881eabda4824789cd012626e75) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ja_JP.eucJP LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_6ecb76fde77933b775526de8e42de7666d8d34e3ca9ce9c4fc79581c3d1a6785[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x24,0xC0,0x3C,0xFE,0x00,0x00,\n    0x21,0x5F,0x9F,0x80,0x10,0x42,0x00,0xFF,0xF0,0x30,0x62,0x0C,0x70,0xA6,0x02,0x40,\n    0x00,0x00,0x04,0xD1,0xC8,0xAB,0xBE,0x40,0x10,0x32,0x01,0x00,0x05,0x30,0x00,0xAB,\n    0x68,0x68,0x51,0x3D,0x47,0xA8,0x00,0x00,0x6D,0x41,0xA3,0xD4,0xF5,0x1E,0xA0,0x03,\n    0xD3,0x28,0x35,0x3D,0x29,0xA9,0x93,0x43,0x13,0x46,0x80,0xC1,0x03,0x46,0xD4,0x68,\n    0x34,0xD0,0x60,0x4A,0x2A,0x32,0x36,0xA6,0x80,0xD3,0x26,0x20,0x01,0xA6,0x08,0xD1,\n    0xA1,0xA1,0xA3,0x2A,0x00,0x45,0x8F,0x8A,0x4E,0x40,0x30,0xC8,0x80,0xAD,0x03,0x26,\n    0xED,0x84,0xD1,0x35,0x29,0x73,0x07,0x36,0x8A,0x78,0x37,0x8E,0x22,0x03,0x18,0x31,\n    0xBE,0xE2,0xC5,0xA9,0x60,0x83,0xB0,0x72,0x2D,0x30,0x68,0x95,0x4D,0xA8,0x05,0xA2,\n    0x90,0x22,0x20,0x21,0x10,0x12,0x09,0x04,0x82,0x45,0x51,0x54,0x96,0x6D,0xA0,0x17,\n    0xD4,0x27,0x6E,0xE5,0x9E,0xFC,0xB4,0x18,0x39,0xC9,0xD2,0x59,0xA7,0xA2,0x94,0xA5,\n    0x18,0x8C,0x51,0x46,0x0C,0x16,0x16,0x16,0x16,0x15,0x64,0xCC,0xA5,0xD9,0x02,0x41,\n    0x05,0x44,0x66,0x05,0x29,0xA3,0x66,0x79,0x11,0x4E,0x1D,0xCC,0xDC,0xF7,0xBF,0xD0,\n    0x94,0x41,0xFC,0x2C,0x17,0xF1,0xF4,0x44,0x0B,0x44,0x2D,0xFE,0x2E,0xE4,0x8A,0x70,\n    0xA1,0x20,0x49,0x80,0x79,0xFC\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6ecb76fde77933b775526de8e42de7666d8d34e3ca9ce9c4fc79581c3d1a6785) == 230, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ja_JP.SJIS LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_0423f813f097effc84d09c626a72dd01cf4c00b0fe411ced951b5503f7d88465[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xAA,0xC7,0x8B,0xEE,0x00,0x08,\n    0xB0,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xD0,0x05,0x40,0x78,0x0E,0x00,0x01,0x93,0x9B,0x04,0x25,0x45,0x4D,\n    0x35,0x1A,0x6D,0x46,0xD4,0xD0,0xD0,0x34,0x07,0xA8,0xD1,0x88,0x03,0x46,0x9A,0x69,\n    0xA1,0x93,0xD4,0xF5,0x3F,0xD5,0x4D,0x1A,0x1A,0x68,0x33,0x6A,0x80,0x1A,0x3D,0x40,\n    0x68,0x00,0x68,0xC8,0xD0,0x00,0x01,0xFE,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x01,0xA3,0x43,0x2A,0x69,0x91,0xA3,0x20,0xC9,0xA6,0x9A,\n    0x32,0x03,0x4D,0xFF,0xAA,0xA9,0xB5,0x06,0x99,0x1A,0x34,0xD3,0x20,0x3F,0x53,0xFF,\n    0x55,0x49,0xA6,0x13,0x4D,0x1A,0x32,0x69,0xA3,0x23,0x26,0x8D,0x00,0x64,0x32,0x06,\n    0x83,0x40,0x06,0x98,0x9A,0x18,0x23,0x13,0x26,0x98,0x40,0x18,0x00,0x10,0xD3,0x4C,\n    0x81,0xA3,0x09,0x88,0xC9,0x80,0x46,0x80,0xD1,0x90,0x68,0x00,0x93,0x4A,0x93,0x53,\n    0x51,0xA8,0xF5,0x13,0x06,0x82,0x34,0x61,0x33,0x44,0xC9,0x80,0x80,0xC8,0xD3,0x4C,\n    0x9A,0x06,0x9A,0x1A,0x68,0x64,0x30,0x4D,0x18,0x46,0x40,0xD0,0xC4,0x64,0x64,0xC4,\n    0xC4,0x68,0xC4,0xD3,0x4C,0x4D,0x00,0xD3,0x20,0x69,0x91,0x88,0x64,0x32,0x62,0x34,\n    0xD1,0xA1,0x90,0x0D,0x34,0xD3,0x46,0x8C,0x10,0x32,0x60,0x4C,0x04,0xFD,0x51,0x26,\n    0x00,0x09,0x80,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x25,0x53,0xF5,0x55,0x32,0x06,0x80,0x34,0xC8,0x0D,0x32,0x01,0xA1,0xA6,0x9A,\n    0x00,0x01,0xA6,0x80,0x00,0xC4,0xD0,0x0C,0x86,0x99,0x06,0x40,0x64,0x64,0xD0,0x0C,\n    0x80,0x00,0x68,0x34,0x19,0x34,0x19,0x00,0x1A,0x03,0x46,0x10,0x06,0x81,0xA0,0x0D,\n    0x19,0x06,0x80,0x06,0x80,0x00,0x30,0x89,0x7C,0x9B,0x99,0x1C,0xDC,0xA9,0x2D,0x20,\n    0xF2,0xD6,0x95,0x12,0xC9,0x08,0x41,0x32,0x12,0x4C,0x90,0x84,0x89,0x7A,0x1A,0x93,\n    0x31,0xE1,0xEC,0x75,0x34,0x19,0x13,0x52,0x6C,0x3E,0x13,0x72,0x70,0x4E,0x49,0xD1,\n    0x3B,0x1F,0x49,0xE1,0x3D,0x27,0xC4,0xFC,0xA0,0x0F,0x94,0x11,0xB1,0x42,0x28,0x63,\n    0xF1,0x44,0x28,0xA3,0xF9,0x00,0x40,0x94,0x62,0x8E,0x52,0x0A,0x49,0x4A,0x29,0x65,\n    0x30,0x81,0x29,0xA4,0x11,0x4E,0x29,0xE4,0x19,0x50,0x21,0x0A,0x89,0x0A,0x54,0x88,\n    0x62,0xA6,0x55,0x0A,0xA9,0x0E,0x44,0x15,0x61,0xB9,0x57,0x1C,0x15,0x81,0x45,0x64,\n    0x89,0x74,0xDC,0x2B,0x62,0x48,0xA2,0xB8,0x57,0x4A,0xF1,0x16,0x57,0xC8,0xC2,0xC0,\n    0x58,0x4B,0x11,0x63,0x23,0x48,0xE1,0xC8,0xC1,0x64,0x2C,0xA5,0x98,0xB3,0x96,0x82,\n    0xD2,0x5A,0x0B,0x51,0x6B,0x93,0x8F,0x2D,0xA5,0xB8,0x74,0x5B,0xC8,0xF6,0xCD,0xAC,\n    0xC5,0xC0,0xB8,0x97,0x22,0xE6,0x5D,0x09,0x02,0xEA,0x5C,0x8B,0xB1,0x77,0x2F,0x05,\n    0xE4,0xBD,0x17,0xB2,0xF8,0x5F,0x4B,0xF1,0x7F,0x24,0x4C,0x01,0x81,0x24,0x89,0x32,\n    0x48,0xA0,0xB6,0xC1,0x18,0x31,0xD4,0xA1,0x28,0x61,0x0C,0x28,0xC2,0x0C,0x30,0x9C,\n    0x06,0x1C,0x4A,0x31,0xB9,0xE1,0x9B,0x1A,0xC8,0x8C,0xF9,0xA0,0x34,0x26,0x88,0x9F,\n    0x4F,0x04,0x68,0xC4,0x69,0x04,0x69,0x44,0x69,0x84,0x69,0xC4,0x6A,0x04,0x42,0x88,\n    0xD4,0x88,0xD5,0x08,0xD5,0x88,0xD6,0x08,0x86,0x11,0xAD,0x11,0xAE,0x11,0xAF,0x11,\n    0xB0,0x11,0x0E,0x22,0x1C,0x44,0x40,0x8D,0x88,0x88,0x91,0x1B,0x21,0x1B,0x33,0x68,\n    0x6D,0x48,0xA2,0x2C,0xDB,0x1B,0x73,0x70,0x6E,0x4D,0xD1,0xBB,0x37,0x86,0xF4,0xDF,\n    0x1B,0xF2,0x30,0xE0,0x1C,0x13,0x84,0x70,0xCE,0x21,0xC5,0x23,0x4E,0x31,0xC7,0x23,\n    0x88,0xF2,0x40,0x91,0x39,0x07,0x24,0xE5,0x1C,0xB3,0x98,0x73,0x4E,0x71,0xCF,0x24,\n    0x8E,0x81,0xD1,0x3A,0x47,0x4C,0xEA,0x12,0x67,0x54,0xEB,0x1D,0x73,0xB0,0x76,0x4E,\n    0xD1,0xDB,0x3B,0x84,0xA1,0xDD,0x3B,0xC4,0xA9,0x2C,0x77,0xCF,0x01,0xE1,0x3C,0x44,\n    0xB9,0xE3,0x3C,0x87,0x94,0xB5,0x9E,0x61,0x1E,0x71,0x1E,0x81,0x1E,0x91,0x1E,0xA1,\n    0x1E,0xB1,0x1E,0xC1,0x1E,0xD1,0x13,0x02,0x3D,0xC2,0x3D,0xE7,0xC0,0xF8,0x8C,0x87,\n    0xC8,0x4C,0x7C,0xCF,0xA1,0xF5,0x3E,0xC7,0xDC,0xFC,0x1F,0x93,0xF4,0x7E,0xCF,0xE1,\n    0xFD,0x26,0x49,0xA2,0x85,0x36,0x29,0xB2,0x70,0xFF,0x19,0x66,0x06,0x18,0x9C,0x40,\n    0xC4,0x1C,0xC2,0x61,0x82,0x74,0x30,0x08,0x00,0x83,0x24,0x84,0x9E,0x2A,0x7D,0x2F,\n    0x83,0x76,0xF7,0x69,0x76,0x07,0x53,0x73,0x99,0xD0,0xE5,0xBC,0x7F,0xB4,0xFA,0x72,\n    0xBC,0x6E,0x0C,0xDF,0xB1,0x99,0xCE,0x5C,0xCC,0x70,0xF5,0x5E,0x63,0x2C,0xAF,0xA5,\n    0xC9,0x92,0xCB,0x1C,0x2E,0x67,0xC3,0xD0,0xF2,0xDE,0xF6,0xE9,0x4F,0x44,0xE7,0x68,\n    0x32,0xE5,0x99,0x74,0x19,0x98,0x63,0x99,0x1D,0x0B,0x01,0x66,0x47,0x06,0x56,0xB2,\n    0xB5,0x95,0xAC,0xAD,0x65,0x6B,0x2B,0x59,0x5A,0xCA,0xD6,0x56,0xB2,0xB5,0x95,0xAC,\n    0xAD,0x65,0x6B,0x2B,0x59,0x5A,0xCA,0xD6,0x56,0xB2,0xB5,0x95,0xAC,0xAD,0x65,0x6B,\n    0x2B,0x59,0x00,0x0A,0xD6,0x56,0xB2,0xB5,0x95,0xAC,0xAD,0x65,0x6B,0x2B,0x59,0x5A,\n    0xCA,0xD6,0x56,0xB2,0xB5,0x92,0xB5,0x95,0xAE,0x8D,0x02,0x60,0x8B,0x83,0x2A,0x4D,\n    0x12,0x49,0x14,0x82,0x87,0x83,0x9F,0x3C,0x6C,0xCF,0x98,0xCC,0xF9,0x9F,0x33,0xE6,\n    0xB1,0x33,0xE6,0x6C,0xCD,0x10,0x32,0xA2,0x8B,0x16,0x28,0xA4,0xFC,0x3A,0x77,0x8E,\n    0x76,0x56,0xE4,0x81,0x00,0x35,0x99,0x03,0x59,0x8E,0x99,0x60,0x71,0xC8,0x03,0x20,\n    0x3F,0xF9,0x34,0xDC,0x94,0x34,0xA8,0x12,0x39,0x40,0x85,0x49,0x24,0x2B,0x96,0x40,\n    0xCB,0x81,0x00,0xC9,0x8D,0x24,0xAC,0xC2,0x40,0x69,0x1C,0x64,0x81,0x24,0xD3,0x7E,\n    0x36,0x84,0x30,0x90,0xEF,0x52,0x05,0x8E,0x83,0x45,0x86,0x12,0x0C,0x56,0x50,0xB1,\n    0x25,0x24,0x88,0x60,0x10,0x60,0x45,0x25,0x84,0xB2,0x49,0x49,0x09,0x86,0x14,0xC0,\n    0x20,0x90,0x94,0xC2,0x60,0x00,0xDA,0x44,0xB2,0xB4,0x10,0x7A,0xF6,0x5F,0xF3,0x3B,\n    0xFA,0x49,0x03,0x24,0x09,0x1C,0x00,0x72,0x44,0x18,0xCC,0xEC,0xE5,0xC0,0xB5,0x69,\n    0xA9,0x69,0xF1,0x62,0xC5,0x8B,0x16,0x2C,0x6E,0x6C,0x20,0x09,0x30,0x8E,0x16,0x2C,\n    0xB2,0x49,0x03,0x1C,0x56,0x96,0xAD,0x2D,0x5A,0x5A,0xB4,0x86,0x39,0xB0,0xB0,0x31,\n    0x88,0x81,0x0C,0xC5,0x55,0x55,0x69,0x21,0x92,0x41,0x25,0x46,0x01,0x94,0x90,0x05,\n    0x81,0x20,0x80,0x19,0xB0,0x49,0x09,0x80,0x80,0xD8,0xA4,0x44,0xBC,0x40,0x84,0x24,\n    0x04,0x3F,0x66,0x9A,0xA0,0x68,0xB5,0xAD,0x6B,0x5A,0xDF,0xD6,0xB5,0xAD,0x6B,0x5A,\n    0xE0,0xD6,0xB5,0xAE,0x09,0x86,0x18,0x61,0x86,0x18,0x61,0x86,0x18,0x72,0xE6,0x2E,\n    0x2E,0xA3,0x0F,0x0A,0x67,0x65,0x69,0x20,0x04,0x42,0x50,0x20,0x1D,0x92,0x37,0x67,\n    0x0D,0x4E,0x84,0x98,0x37,0xAA,0xBC,0x37,0x96,0xA9,0x4B,0x4B,0x33,0x66,0xCF,0x1C,\n    0x71,0xC4,0x90,0x0D,0x25,0x08,0x69,0x9D,0x4D,0x0E,0xCF,0xA1,0xA6,0xCE,0x9F,0x42,\n    0x96,0x07,0xE7,0x40,0xC1,0x20,0x30,0xC2,0x59,0x87,0xA3,0xA0,0x73,0xC8,0x74,0x69,\n    0xF7,0x10,0xC1,0x03,0x9D,0xC9,0x43,0x2C,0x12,0x1D,0x52,0x4D,0x0A,0x23,0x01,0x8D,\n    0x29,0x04,0xC4,0x15,0xD5,0xF0,0xC9,0x64,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,\n    0x24,0x92,0x49,0x24,0xB1,0xAC,0xA0,0x82,0x40,0x96,0x94,0x82,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x48,0x93,0x43,0x89,0x41,0x1C,\n    0x92,0x28,0xA2,0x8A,0x35,0x68,0xDA,0xFB,0xFB,0x44,0x20,0x1C,0x25,0xC3,0x87,0x0E,\n    0x1C,0x66,0x23,0xA4,0x5F,0x63,0xE2,0x5A,0x08,0x40,0x8B,0x23,0x0E,0xC8,0x40,0x3D,\n    0x45,0x35,0x6A,0xD5,0xAB,0x57,0x97,0xB4,0xA5,0x29,0x4A,0x55,0x55,0x55,0x55,0x55,\n    0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7E,0x6F,0x1B,0xBF,0x61,0xE5,\n    0x33,0x88,0x79,0xE8,0x78,0xFA,0xB2,0x45,0x01,0x48,0xB0,0x92,0x6A,0xA2,0x44,0x08,\n    0x6A,0xAA,0xAA,0xAA,0xD0,0x09,0xB5,0x8C,0x52,0x49,0xB6,0x32,0x06,0x62,0x22,0x49,\n    0x1B,0x0C,0x3E,0x8E,0x42,0x4D,0x1A,0x01,0xB6,0xA1,0x0C,0x62,0x15,0x09,0x8A,0x61,\n    0x0C,0x29,0x01,0x42,0x28,0x05,0x88,0x15,0x92,0x48,0xB2,0x4D,0x1A,0x40,0x52,0xA6,\n    0x54,0x25,0x49,0x9A,0xC5,0x8E,0xF1,0x8E,0xC3,0xBC,0x04,0x03,0x21,0x93,0x45,0x29,\n    0x4A,0x52,0x94,0xA8,0x15,0x29,0x4A,0x7D,0x52,0x94,0xA5,0x29,0x4A,0x52,0x94,0xA5,\n    0x29,0x4A,0x54,0x32,0xA8,0x42,0x3F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x15,0x58,0xF1,\n    0x7D,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0423f813f097effc84d09c626a72dd01cf4c00b0fe411ced951b5503f7d88465) == 1442, \"Wrong size of locale's blob\");\n\n/* ja_JP.SJIS LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_8ec02775913952b4e695f35a48e9e091ca170da3d36f405b8de2870674263658[] = {\n    0x5E,0x5B,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8ec02775913952b4e695f35a48e9e091ca170da3d36f405b8de2870674263658) == 16, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ja_JP.SJIS LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_a4379490b8f27ee0b9c596e19526173c6233697a021bb566eb7d1b78325afbb1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xCB,0x19,0x96,0x16,0x00,0x00,\n    0x21,0x5F,0xF7,0x80,0x10,0x42,0x00,0xFF,0xF0,0x30,0x63,0x8C,0x70,0xB6,0x12,0x40,\n    0x20,0x02,0x2D,0x6F,0x81,0x00,0x10,0x00,0x01,0x00,0x40,0xC8,0x00,0x00,0x10,0x30,\n    0x00,0xAA,0xA1,0x28,0x92,0x68,0x68,0x00,0x00,0x18,0x40,0xC2,0x3D,0x10,0x7A,0x9E,\n    0xA0,0x94,0xD2,0x49,0xA3,0xD4,0x00,0x00,0x00,0x1A,0x00,0x01,0xA0,0xC6,0x86,0x86,\n    0x80,0x0C,0x86,0x80,0x00,0x00,0x00,0x4D,0x38,0x0F,0x96,0x57,0xB2,0xD2,0x04,0x8A,\n    0x88,0x10,0xB9,0x53,0x8C,0xAE,0x81,0xEB,0x6E,0x8A,0x60,0x26,0x9E,0x3E,0xBD,0xA7,\n    0xEF,0xA5,0x03,0x50,0xA6,0xCF,0xAA,0x79,0x1A,0x41,0x0B,0x21,0x32,0x87,0x42,0xF6,\n    0x86,0x95,0x82,0x47,0x67,0x1D,0xDC,0x43,0xB8,0x90,0x90,0x90,0x90,0xAA,0x2A,0x94,\n    0x53,0x20,0x9F,0x3D,0xB0,0x43,0xED,0xE6,0x27,0xE4,0x45,0xAE,0x26,0x38,0x71,0x00,\n    0x61,0xA2,0x9A,0xBC,0x79,0x6D,0x76,0x25,0x89,0x12,0x45,0x08,0x89,0x12,0x24,0x48,\n    0x91,0x25,0xA6,0x93,0x7E,0x9C,0x66,0x0F,0x70,0x20,0x8F,0x8C,0x90,0x4C,0xF9,0x75,\n    0xE4,0x81,0xCB,0x9D,0x75,0x35,0xAD,0x86,0x47,0x0F,0x33,0x0F,0x16,0x31,0x0F,0xE2,\n    0xEE,0x48,0xA7,0x0A,0x12,0x19,0x63,0x32,0xC2,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a4379490b8f27ee0b9c596e19526173c6233697a021bb566eb7d1b78325afbb1) == 218, \"Wrong size of locale's blob\");\n\n/* ja_JP.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_c387552dbafd257a01bbdd4c8930917b6c6d742c69c8a6a8b80d8f6667fcdc96[] = {\n    0x5E,0x5B,0x79,0x59,0xEF,0xBD,0x99,0xEF,0xBC,0xB9,0xE3,0x81,0xAF,0xE3,0x83,0x8F,\n    0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0xEF,0xBD,0x8E,0xEF,0xBC,0xAE,0xE3,0x81,\n    0x84,0xE3,0x82,0xA4,0x5D,0x2E,0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c387552dbafd257a01bbdd4c8930917b6c6d742c69c8a6a8b80d8f6667fcdc96) == 40, \"Wrong size of locale's blob\");\n\n/* ja_JP.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b9e92f69c1a4034998f85c17e5900390a3ac10a640240f8f7c61599146484ee5[] = {\n    0x4A,0x50,0x59,0x20,0x0A,0xC2,0xA5,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b9e92f69c1a4034998f85c17e5900390a3ac10a640240f8f7c61599146484ee5) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ja_JP.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_1bb43203161e2d90a8ffeb422ef0c4120098652686bf2d00ee63b0067b70dc5d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x6D,0xA5,0xBF,0x75,0x00,0x00,\n    0x21,0x5F,0xF9,0x00,0x10,0x42,0x00,0xFF,0xF0,0x30,0x62,0x0C,0x70,0xA6,0x02,0x40,\n    0x00,0x31,0xE6,0x30,0xAC,0x82,0xC8,0x44,0x21,0x03,0xA0,0x30,0x00,0xAB,0x03,0x53,\n    0x49,0xA9,0xA0,0x68,0xC8,0x03,0x46,0x7A,0xA6,0x98,0x4F,0x53,0xD4,0x1E,0xA3,0x69,\n    0x34,0x64,0x1A,0x9E,0x94,0xD4,0xC9,0xA1,0x89,0xA3,0x40,0x60,0x81,0xA3,0x4F,0x53,\n    0x41,0xA6,0x83,0x02,0x51,0x28,0xD3,0x4F,0xD5,0x00,0x00,0x00,0x00,0xD3,0x40,0x34,\n    0x66,0x50,0xE8,0x00,0x34,0xD8,0xB4,0xA9,0x00,0x19,0x04,0x00,0x7D,0x59,0x89,0x4D,\n    0x48,0xB0,0x9C,0x4A,0x27,0x10,0x52,0xCE,0x9A,0x97,0xD3,0x5A,0x00,0xD8,0x08,0xE0,\n    0xC3,0xD9,0x6A,0x58,0x20,0xED,0x14,0x16,0x98,0x34,0xCC,0xA6,0xD4,0x02,0xD1,0x48,\n    0x11,0x10,0x10,0x88,0x09,0x04,0x82,0x42,0xA8,0xAA,0x2A,0x9D,0x24,0xD6,0x01,0x1A,\n    0x87,0x58,0x9C,0xF3,0xD6,0x58,0x13,0x20,0x80,0xFD,0x83,0x9C,0xF9,0x9C,0x4C,0x4F,\n    0x00,0x11,0x29,0x0A,0x50,0x89,0x19,0x40,0x85,0x97,0x14,0x11,0x0F,0x82,0xD5,0x30,\n    0xDC,0xBE,0x19,0x5C,0xC5,0x25,0x43,0x83,0xA1,0xD6,0x59,0x24,0x95,0xA5,0xDB,0xF2,\n    0x6F,0xBF,0xA7,0xA1,0xF0,0x48,0x23,0x23,0x28,0xA3,0x0C,0x30,0xC3,0x0C,0x54,0x2F,\n    0x01,0xE9,0x4F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x0D,0xB4,0xB7,0xEE,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1bb43203161e2d90a8ffeb422ef0c4120098652686bf2d00ee63b0067b70dc5d) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed kk_KZ.PT154 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_4b5d13a35b76db6c94057d61412dfcb1a2cf50786722b60140f34b67dced430e[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x25,0x41,0xD2,0x5D,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x97,0x00,0x04,0x81,0xA0,0xD3,0x20,0x19,0x18,\n    0x41,0x89,0x93,0x04,0x06,0x99,0x34,0x00,0x0C,0x26,0x11,0x93,0x4D,0x31,0x03,0x08,\n    0xC2,0x60,0x99,0x32,0x30,0x9A,0x00,0x1A,0x30,0x8D,0x34,0x18,0x4C,0x86,0x09,0x93,\n    0x09,0x90,0x64,0x68,0xD1,0x93,0x02,0x03,0x26,0x43,0x08,0xD3,0x26,0x4C,0x9A,0x0D,\n    0xB5,0x36,0xF5,0x53,0xD3,0xF5,0x53,0x6F,0x55,0x4C,0x89,0x00,0xC4,0xD3,0x46,0x9A,\n    0x64,0x30,0x40,0x68,0x34,0x00,0x30,0x98,0x80,0x68,0x32,0x0D,0x34,0xC8,0xD3,0x46,\n    0x46,0x13,0x13,0x4C,0x02,0x60,0x43,0x40,0x01,0xA1,0xA6,0x4D,0x06,0x99,0x32,0x64,\n    0xDA,0x4C,0x13,0x20,0x69,0x81,0x18,0x34,0x8C,0x13,0x34,0x9A,0x64,0x68,0xF5,0x0D,\n    0xEA,0x9E,0xA7,0x94,0xC3,0x48,0xF6,0xFD,0x52,0x7A,0x82,0x4F,0x50,0x10,0x00,0x00,\n    0x4C,0x01,0x18,0x98,0x00,0x06,0x8D,0x08,0x60,0x26,0x4C,0x04,0xC0,0x00,0x00,0x08,\n    0xF4,0x00,0x98,0x00,0x13,0x1A,0x9B,0x23,0x53,0xD2,0x69,0x86,0x89,0xB4,0x00,0x00,\n    0x00,0x00,0xD0,0x00,0x0D,0x06,0x80,0x8C,0x4C,0xD4,0x0C,0x98,0x98,0x8C,0x98,0x01,\n    0x8F,0xFD,0x54,0xAA,0x99,0x18,0x13,0x09,0x93,0x46,0x04,0x60,0x98,0x23,0x23,0x4C,\n    0x00,0x9A,0x0C,0x00,0x4C,0x98,0x08,0x60,0x4D,0x1A,0x30,0x00,0x41,0x84,0x60,0x8C,\n    0x4C,0x00,0x4D,0x34,0xC0,0x46,0x04,0x68,0xC0,0x4C,0x98,0x00,0x08,0xD3,0x21,0xA6,\n    0x00,0x00,0x04,0xC4,0x68,0x60,0x9E,0x99,0x4E,0x71,0xF2,0x02,0x12,0x22,0x32,0x42,\n    0x52,0x62,0x72,0x82,0x92,0xA2,0xB2,0xC2,0xDF,0x01,0x71,0x79,0x81,0x89,0x91,0x99,\n    0xA1,0xA9,0xB7,0x87,0xC4,0x6E,0x70,0x73,0xE3,0xDF,0x3B,0x3D,0x3E,0x00,0x82,0x08,\n    0x52,0x1A,0x3A,0x42,0x48,0x0C,0x90,0x20,0x53,0x13,0x53,0xBC,0x9E,0x5F,0x32,0x7A,\n    0x82,0x8A,0x92,0x9A,0xA2,0xAF,0x9D,0x59,0x5F,0xD0,0xB0,0xB2,0xB4,0xB6,0xB8,0xBA,\n    0x1F,0x5E,0x0F,0x71,0x85,0x99,0x9D,0xA1,0xA5,0xA9,0xAD,0xB1,0xB5,0xB9,0xBD,0xC1,\n    0xC5,0xC9,0xCD,0xD1,0xD5,0xD9,0xDD,0xE3,0xD5,0xEB,0x04,0xF2,0xF4,0xF6,0xF8,0x31,\n    0xF1,0xFE,0x02,0x06,0x1E,0x08,0x24,0x2F,0xB2,0x1E,0x22,0x26,0x44,0x6C,0x66,0xEF,\n    0xB4,0x2C,0x60,0xD0,0x61,0x02,0x83,0x94,0x09,0x2A,0x1B,0xDF,0xA7,0x2D,0x2F,0xEE,\n    0x0C,0x24,0x3C,0xC0,0x81,0x13,0x13,0x93,0xDD,0x82,0x67,0xE8,0x68,0xA8,0xE9,0x29,\n    0x69,0xA9,0xE8,0x2A,0x6A,0xAA,0xEB,0x2B,0x6B,0xAB,0xEC,0x2C,0x6C,0xAC,0xED,0x2D,\n    0x6D,0xAD,0xEE,0x2E,0x6E,0xAE,0xEF,0x2F,0x6F,0xAF,0xC5,0x60,0x60,0xE1,0x61,0xE2,\n    0x62,0xE3,0x63,0x76,0xE4,0xE5,0x65,0xE4,0x66,0x6A,0x0B,0xE9,0xD1,0x16,0x33,0xDD,\n    0xF2,0x39,0x70,0x73,0xE2,0x52,0x0F,0xCF,0xD0,0xAF,0xA9,0x47,0x8A,0xFB,0x1F,0x41,\n    0x73,0xF7,0xBA,0x3C,0x9C,0xFA,0x8B,0xD4,0x3F,0xCB,0xEF,0xC1,0x68,0x8B,0x06,0x23,\n    0x22,0x44,0xA9,0x93,0xA5,0x27,0xE9,0x47,0xED,0x3D,0xFF,0xFB,0xFA,0x58,0x17,0xF7,\n    0xE4,0x18,0x42,0x22,0x22,0x22,0x2C,0x59,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,\n    0x11,0x11,0x1F,0xD5,0x3C,0xF4,0x48,0xD5,0x73,0xED,0x62,0x22,0x27,0x22,0x3C,0x44,\n    0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x42,0xB1,0x9E,0xC2,0xA8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x10,0x84,0x21,0xB4,0x6A,0x08,\n    0x44,0x67,0x4C,0x3A,0x62,0x64,0x69,0x08,0x62,0x13,0x41,0x0A,0x23,0xDC,0x72,0x16,\n    0x59,0x66,0x04,0x86,0x18,0x0D,0x02,0xCD,0x53,0xA2,0xBF,0x02,0x69,0x10,0x2C,0xCA,\n    0xA0,0x00,0x00,0x5A,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xD9,0x6A,0x00,0x06,0xCC,0xB5,0x41,0x4C,0x80,0xF3,0x10,0x7E,0x50,0x99,0x7B,0x77,\n    0x6B,0x7C,0x69,0x86,0x18,0x6D,0xE1,0xE8,0x50,0xA1,0x03,0x6F,0x2F,0x8F,0x46,0x7D,\n    0xE8,0x1A,0x68,0x00,0x91,0xC7,0x1C,0x71,0xC7,0x1D,0x80,0x89,0x1F,0x6F,0xB7,0x23,\n    0x21,0x21,0xDD,0x90,0xFF,0xA4,0x64,0x7B,0xD2,0x3E,0x0C,0x94,0x71,0xC5,0x14,0x51,\n    0x45,0x14,0x51,0xF7,0x24,0xA4,0x3B,0xD2,0x49,0x3C,0x21,0x08,0xE2,0x8E,0x38,0xE3,\n    0x8E,0x10,0x84,0x21,0x08,0xE3,0x8E,0x38,0xE3,0x8E,0x10,0x84,0x20,0x42,0x10,0x6F,\n    0xA1,0x00,0x00,0x01,0xDF,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xEF,0x08,0x07,\n    0x62,0x10,0xE1,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x01,0x24,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x22,0x44,0x00,0x00,0x00,0xFF,0xC5,0xDC,0x91,0x4E,0x14,\n    0x24,0x09,0x50,0x74,0x97,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_4b5d13a35b76db6c94057d61412dfcb1a2cf50786722b60140f34b67dced430e) == 838, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed kk_KZ.PT154 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_e1702606c580ccf707cad2759e3922bad1b56c6aa53bcd055ffb0d1f747349b8[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x55,0x6F,0xC0,0xDA,0x00,0x05,\n    0x3A,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xBD,0x03,0x4D,0xCA,0x22,0x0A,0xAA,0xA9,0x90,0x00,0x01,\n    0xA0,0x01,0xEA,0x00,0x00,0x00,0x00,0x02,0x61,0x30,0x00,0x00,0x00,0x04,0xC0,0x00,\n    0x00,0x00,0x26,0x8C,0x01,0xA0,0x00,0x8C,0x08,0xC0,0x00,0x00,0x00,0x09,0xA3,0x09,\n    0x89,0x89,0x80,0x00,0x00,0x07,0x42,0x60,0x00,0x00,0x7E,0xA8,0x09,0xA6,0x00,0x26,\n    0x06,0x89,0x89,0x89,0x93,0x11,0x89,0x80,0x00,0x26,0x00,0x00,0x26,0x04,0x30,0x08,\n    0xC0,0x02,0x30,0x26,0x00,0x00,0x00,0xD0,0x68,0xD1,0x90,0x98,0x11,0x80,0x04,0x30,\n    0x00,0x00,0x4C,0x4D,0x34,0x60,0x18,0x92,0x89,0x34,0x34,0x00,0x00,0x03,0x40,0x00,\n    0x00,0x00,0x00,0xC8,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,\n    0x1A,0x0D,0x00,0x34,0x00,0x00,0x00,0x1A,0x00,0x68,0x00,0x00,0x00,0x00,0x25,0x14,\n    0x8D,0x53,0xCA,0x6D,0x04,0x7A,0x83,0xD4,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x40,0x03,\n    0xD4,0x00,0x00,0x00,0x00,0x03,0x41,0xA0,0x6F,0xD5,0x46,0x43,0xF8,0xE9,0x94,0xA7,\n    0x48,0x88,0x3A,0x16,0x62,0xA8,0xEE,0x2E,0x2C,0x10,0xF0,0x83,0x21,0x08,0x52,0x18,\n    0x8C,0x0E,0xA3,0x23,0xD2,0x34,0x46,0xC8,0xE1,0x1D,0x1F,0x11,0xE4,0x89,0x23,0x49,\n    0x12,0x54,0x99,0x27,0x49,0x91,0x99,0x42,0x52,0x80,0x95,0x25,0x69,0x62,0x5A,0x97,\n    0x25,0xE9,0x82,0x62,0x99,0x26,0x69,0xA2,0x5E,0x9A,0xA6,0xC9,0xBA,0x70,0x9C,0xA7,\n    0x49,0xDA,0x78,0x9E,0xA7,0xC9,0xFA,0x80,0xA0,0xA8,0x4A,0x1A,0x88,0xA2,0xA8,0xCA,\n    0x3A,0x90,0xA4,0xA9,0x4A,0x5A,0x99,0x68,0xA5,0x14,0xE4,0x12,0x9E,0xFC,0x14,0xE5,\n    0x41,0x51,0x54,0x95,0x37,0xE2,0xAA,0x2A,0xAA,0xB2,0xAE,0xAC,0x2B,0x2A,0xD2,0xB6,\n    0xAE,0x2B,0xAA,0xF2,0xBE,0xB0,0x2C,0x2B,0x12,0xC7,0x81,0xB2,0xAC,0xCB,0x3A,0xD0,\n    0xB4,0xA0,0x40,0xB5,0x2D,0x6B,0x62,0xDA,0xB7,0x2D,0xEB,0x82,0xE2,0xB9,0x2E,0x6B,\n    0xA3,0xF2,0x5D,0x57,0x65,0xDD,0x78,0x5E,0x57,0xA5,0xED,0x7C,0x5F,0x57,0xE5,0xFD,\n    0x80,0x60,0x50,0x20,0x60,0x98,0x36,0x11,0x85,0x61,0xB2,0xB8,0x8C,0x56,0x2B,0x5B,\n    0xAE,0xCB,0x43,0x71,0xD8,0xF6,0x43,0x27,0x92,0x82,0xCE,0xE5,0x21,0x61,0x60,0xE1,\n    0xFF,0xAB,0x2C,0xCB,0xB3,0x0C,0xCA,0x13,0x49,0x09,0x1C,0xCD,0xB3,0x8C,0xEB,0x3C,\n    0x85,0x67,0xD9,0xF8,0xF4,0x7E,0x3D,0x0D,0x84,0xD0,0x34,0x2D,0x13,0x46,0xD2,0x25,\n    0x51,0xDD,0x2E,0x9A,0x0B,0x4F,0x07,0xBA,0xD4,0xFE,0xDB,0x2F,0xDE,0x0F,0x63,0xAC,\n    0x0D,0x5C,0x1E,0xC2,0xE2,0xCA,0xE4,0x30,0x8B,0x50,0x88,0x68,0xC1,0x42,0xDB,0x5D,\n    0x87,0x14,0x20,0xA4,0xB0,0xA8,0xA8,0x45,0xD0,0xB8,0x91,0xC0,0x0C,0x89,0x08,0x00,\n    0x00,0x00,0x00,0x00,0x66,0x64,0x56,0x64,0x4A,0x28,0xB8,0x5C,0x4C,0x8F,0x7E,0xE0,\n    0x38,0x2E,0x13,0x86,0xE2,0x38,0xAE,0x33,0x8E,0xE4,0x39,0x2E,0x53,0x96,0xE6,0x39,\n    0xAE,0x73,0x9E,0xE8,0x3A,0x2E,0x93,0xFA,0x74,0xDF,0xDB,0xFC,0x75,0x1D,0x57,0x59,\n    0xD7,0x7F,0xAE,0xC3,0xB2,0xEC,0xD0,0xBB,0x4F,0xF9,0xDB,0x77,0x1D,0xD7,0xFE,0xEF,\n    0x3B,0xEF,0x03,0xC2,0xF1,0x3C,0x6F,0x23,0xCA,0xF3,0x3C,0xEF,0x43,0xD2,0x44,0x1F,\n    0x63,0xEE,0x7E,0x0F,0xC9,0x12,0x7E,0x8F,0xD9,0xFC,0x3F,0xA7,0xF8,0x8A,0x18,0x7A,\n    0x50,0x44,0x8A,0x51,0x3D,0x68,0x88,0x97,0x25,0x04,0xEE,0xA8,0x06,0x40,0x24,0xC1,\n    0x06,0x0C,0x50,0x60,0xC5,0x26,0x66,0x09,0x98,0x32,0x2A,0x0D,0x88,0x0E,0x40,0x87,\n    0x22,0x98,0x30,0x09,0x82,0x0E,0x4E,0x09,0x22,0x03,0xD6,0x62,0x1E,0x20,0x12,0x24,\n    0x80,0x9E,0x87,0x7D,0x10,0x60,0xF5,0xE3,0x00,0x51,0x10,0x08,0x85,0x04,0x02,0x25,\n    0x41,0x04,0x1A,0x50,0x06,0x36,0xC6,0x31,0x8C,0x63,0xB6,0x32,0x19,0x8C,0x6D,0xB6,\n    0xDB,0x6D,0xB6,0xC2,0x00,0x23,0xA8,0x81,0x04,0x82,0x1F,0x9F,0x9F,0x1C,0x40,0xFA,\n    0xA0,0x08,0x64,0x52,0xF8,0x20,0xC8,0x10,0x40,0x29,0x00,0x0A,0x40,0x24,0x12,0x09,\n    0x08,0xE4,0x79,0x83,0x33,0x18,0xCB,0x9C,0xC4,0x07,0x07,0x39,0x83,0x33,0x06,0x66,\n    0x04,0x08,0x92,0x08,0x80,0x40,0x78,0x0B,0x12,0x5F,0x0F,0x77,0x87,0xA4,0xD9,0x41,\n    0xC4,0x6B,0x1F,0x41,0x31,0x44,0x10,0x20,0x14,0x01,0x85,0x40,0xBE,0xED,0x18,0x18,\n    0x85,0x3C,0xAA,0x3E,0x50,0x48,0x55,0x0D,0x5A,0x84,0x84,0x85,0x68,0x49,0x12,0x8D,\n    0xA8,0x40,0x51,0x03,0x78,0xA4,0x08,0x26,0x87,0x2A,0x43,0xAA,0x04,0x5A,0x03,0x42,\n    0x08,0xF7,0x9F,0xBB,0x83,0x72,0x77,0x9D,0x34,0x2B,0xF6,0x83,0x7B,0x1F,0xDD,0x38,\n    0x07,0x2A,0x34,0x70,0xDA,0x1C,0x76,0xF8,0x8E,0x03,0xD0,0xA3,0xF5,0x26,0xCA,0x6F,\n    0xD4,0x07,0xCE,0xDB,0x1C,0x10,0x8F,0x46,0x86,0xDE,0x34,0x74,0x54,0x07,0x8A,0x3F,\n    0x51,0x11,0x24,0xE2,0x08,0x12,0xB1,0x1A,0x02,0x41,0x3F,0xF1,0x77,0x24,0x53,0x85,\n    0x09,0x05,0x56,0xFC,0x0D,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e1702606c580ccf707cad2759e3922bad1b56c6aa53bcd055ffb0d1f747349b8) == 870, \"Wrong size of locale's blob\");\n\n/* kk_KZ.PT154 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_dc7e12e9d2dd3fe9119815e93056ad34969d5756b8ae4db96f8174f8c0ba07a1[] = {\n    0x5E,0x5B,0xE8,0xC8,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xE6,0xC6,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE8,0xFF,0x0A,0xE6,0xEE,0xEA,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dc7e12e9d2dd3fe9119815e93056ad34969d5756b8ae4db96f8174f8c0ba07a1) == 27, \"Wrong size of locale's blob\");\n\n/* kk_KZ.PT154 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_cfb04be52a3ce71403b44f84d4948ab9cb037451e4068734e6a479f94c888bcc[] = {\n    0x4B,0x5A,0x54,0x20,0x0A,0xF2,0xE3,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cfb04be52a3ce71403b44f84d4948ab9cb037451e4068734e6a479f94c888bcc) == 36, \"Wrong size of locale's blob\");\n\n/* kk_KZ.PT154 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_65a3825a40520325fc9fea09e4bf84421b147668c2f0d0fc1ee1d72d42a0d2c7[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_65a3825a40520325fc9fea09e4bf84421b147668c2f0d0fc1ee1d72d42a0d2c7) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed kk_KZ.PT154 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_1cbd102dbb81e066ce6d26ec4cef1753152eb3802f12733596f49822062aeda4[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF6,0xF4,0x5D,0x42,0x00,0x00,\n    0x3C,0x5F,0x69,0x80,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x00,\n    0x20,0x00,0x06,0x28,0x10,0x67,0xBF,0xF8,0x48,0x30,0x00,0xF5,0x84,0x25,0x53,0x46,\n    0x80,0x00,0x00,0x06,0x80,0x00,0x6A,0x9E,0x91,0x88,0xD1,0xA0,0x00,0x00,0xC8,0x00,\n    0x24,0x51,0x32,0x1A,0x99,0x07,0xAA,0x03,0xCA,0x62,0x1E,0xA1,0xEA,0x36,0x91,0x65,\n    0x3C,0x86,0xB2,0x56,0xBA,0xCE,0x5A,0x16,0xC4,0x0D,0xCC,0x30,0x40,0x51,0x12,0x49,\n    0x0E,0xE8,0x0D,0xD7,0x8F,0x08,0x08,0x76,0x70,0x93,0xA8,0x19,0xF4,0xB8,0x41,0xC0,\n    0xDA,0x4C,0xCB,0x0B,0xCB,0x4A,0xA9,0x28,0x2B,0x11,0x70,0xB8,0xDA,0x0B,0x92,0xB8,\n    0xC2,0x32,0xC0,0xE4,0xC1,0x59,0xA9,0x42,0xCB,0x51,0x96,0x3E,0x86,0xB9,0x12,0x40,\n    0xD7,0xF1,0x05,0x4F,0xD1,0x6C,0xB2,0x39,0x84,0x0C,0xF5,0x2D,0x4D,0x6D,0x16,0x32,\n    0x5F,0x03,0xD0,0x94,0x86,0xB4,0x9B,0x19,0xF4,0x40,0x57,0x2D,0x07,0xC4,0xC6,0x9B,\n    0x1C,0x02,0x02,0xCC,0x9A,0x55,0xEE,0x0C,0xEC,0x7E,0x0D,0x96,0xE2,0x40,0xD5,0x32,\n    0x45,0x93,0x36,0xB8,0x56,0x25,0x46,0xA0,0xA6,0x28,0x54,0xAA,0xB6,0x24,0xDD,0xE4,\n    0x48,0x0C,0xEF,0xE8,0x71,0x9F,0x2D,0xC1,0x78,0xCD,0xF9,0x55,0x45,0x5C,0x35,0xE3,\n    0xDB,0xC8,0xC3,0x78,0xC6,0x12,0x4C,0xF3,0x28,0x62,0x61,0x11,0x9F,0x8B,0xB9,0x22,\n    0x9C,0x28,0x48,0x7B,0x7A,0x2E,0xA1,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1cbd102dbb81e066ce6d26ec4cef1753152eb3802f12733596f49822062aeda4) == 248, \"Wrong size of locale's blob\");\n\n/* kk_KZ.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_bdc9320009ebd118363bf63f6eef0d611d7418975549e122d687217b23f57074[] = {\n    0x5E,0x5B,0xD0,0xB8,0xD0,0x98,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xB6,\n    0xD0,0x96,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD0,0xB8,0xD1,0x8F,0x0A,0xD0,0xB6,0xD0,\n    0xBE,0xD0,0xBA,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bdc9320009ebd118363bf63f6eef0d611d7418975549e122d687217b23f57074) == 36, \"Wrong size of locale's blob\");\n\n/* kk_KZ.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_a405fb46549f8bc0538c49753bced6be7e2d82dbde9d34c192ea4465f452603d[] = {\n    0x4B,0x5A,0x54,0x20,0x0A,0xD1,0x82,0xD0,0xB3,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,\n    0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a405fb46549f8bc0538c49753bced6be7e2d82dbde9d34c192ea4465f452603d) == 38, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed kk_KZ.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_eb39f91e20a7240ec584cdca5b21e6c62e04cbed88eb5dd4a51e5dd925977481[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x1D,0x4D,0x3B,0xE7,0x00,0x01,\n    0x22,0xDF,0x7A,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x78,\n    0x48,0x01,0x28,0x08,0x00,0xE7,0xBF,0xF8,0x00,0x30,0x00,0xE6,0x01,0x2A,0x9E,0x82,\n    0x7A,0xA6,0x9A,0x1A,0x06,0x47,0xA0,0x9B,0x50,0x1B,0x50,0x03,0x00,0x0D,0x1A,0x1A,\n    0x30,0x8C,0x9A,0x0D,0x1A,0x68,0x0C,0x12,0x25,0x53,0xD9,0x4F,0x53,0x13,0x4D,0x23,\n    0x23,0x20,0x03,0x21,0xE9,0x84,0xD2,0x9B,0x6A,0x64,0x35,0xCB,0x0B,0x07,0x27,0x86,\n    0x39,0xB1,0x19,0x07,0x5C,0xF2,0x48,0x7A,0x9C,0x7A,0xBD,0x46,0xAE,0x47,0x9C,0x86,\n    0xCE,0x67,0xA4,0xAD,0x69,0x2A,0xA1,0x5C,0x62,0x71,0x2E,0x20,0x59,0x59,0x41,0xC0,\n    0x4B,0x46,0x0A,0x85,0xAE,0x60,0xD4,0xE5,0x79,0x22,0xF8,0xE3,0x18,0x93,0x4D,0x5B,\n    0x2A,0x79,0x00,0x23,0x40,0xD0,0x48,0xD0,0x48,0x1B,0x10,0x0B,0xF4,0xE3,0x82,0x7F,\n    0xC9,0x9F,0x87,0x43,0xD4,0x94,0x86,0xBD,0xE6,0xC6,0x7D,0x1B,0x55,0x43,0x2A,0x17,\n    0xC1,0x06,0x46,0x56,0x66,0x79,0x04,0x0B,0xCC,0x9A,0x58,0x98,0x31,0x99,0x98,0x37,\n    0xA9,0xAB,0x8E,0xB0,0xC6,0x4A,0xA9,0x91,0x65,0x05,0x08,0xAD,0xA2,0x14,0xC5,0x1B,\n    0x8B,0xD4,0x12,0x7A,0xCA,0x28,0x19,0x9E,0x25,0x73,0xBE,0x85,0x86,0xCC,0x77,0x2E,\n    0xE5,0x41,0xA5,0xE1,0x96,0xF2,0xDB,0x84,0xC6,0x49,0x6B,0x38,0x1B,0x06,0x5A,0xAE,\n    0x17,0x15,0x69,0xA9,0x05,0x16,0x84,0x28,0x36,0x97,0xF0,0xB0,0x3B,0x0B,0xB9,0x22,\n    0x9C,0x28,0x48,0x0E,0xA6,0x9D,0xF3,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eb39f91e20a7240ec584cdca5b21e6c62e04cbed88eb5dd4a51e5dd925977481) == 264, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ko_KR.CP949 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_cf126ee21cf73efa8949c94ee5dd49315f6c52949c7167ab99042dae53ff94dc[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x27,0x28,0x1A,0x24,0x00,0xC4,\n    0x5D,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xD0,0x04,0xFE,0x85,0x04,0x00,0x00,0x00,0x02,0xAA,0xAA,0x00,0x00,\n    0x4C,0x34,0x01,0x33,0x40,0x68,0x00,0x00,0x11,0xB4,0x01,0x33,0x40,0x00,0x03,0x40,\n    0x00,0x00,0x8C,0x13,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,\n    0x30,0x1A,0x00,0x00,0x08,0xC1,0x31,0x09,0x30,0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x98,0x00,0x26,0x00,0x02,0x60,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x4C,0x00,0x13,0x00,\n    0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xA2,\n    0x9A,0x9A,0x29,0x82,0x64,0x19,0x06,0x8C,0xD4,0x68,0x03,0x40,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x03,0x21,0xA6,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF5,0x25,0xDE,0x38,0xFF,0x75,0x29,0x75,0x5C,\n    0xC7,0x4A,0xAA,0xA5,0xD9,0x0B,0xB2,0x12,0xF0,0xC7,0x8B,0xE1,0x5B,0xE9,0x7D,0xB7,\n    0x7E,0x28,0x5F,0xCC,0x01,0x8F,0x98,0x13,0x04,0x64,0x09,0x0A,0x44,0x80,0x48,0xD2,\n    0x44,0x95,0x26,0x49,0xD2,0x84,0xA5,0x2A,0x7E,0x28,0x09,0x5A,0x58,0x81,0x4B,0x52,\n    0xE4,0xBD,0x30,0x4C,0x53,0x24,0x12,0x66,0x9A,0x26,0xA8,0x24,0xD9,0x37,0x4E,0x13,\n    0x94,0xE9,0x3B,0x4F,0x13,0xD4,0xF9,0x3F,0x50,0x14,0x15,0x09,0x43,0x51,0x14,0x55,\n    0x19,0x47,0x7E,0x4F,0xCD,0x48,0x41,0xA9,0x2A,0x54,0x2C,0x19,0x4C,0x43,0xD4,0xD5,\n    0x39,0x4F,0x54,0x1F,0xA2,0xA2,0xA9,0x21,0x10,0x8A,0x9A,0xA8,0xAA,0xAA,0xCA,0xBA,\n    0xB0,0xC0,0xD6,0x95,0xB5,0x71,0x5D,0x57,0x95,0xF5,0x81,0x61,0x58,0xAF,0xD6,0x45,\n    0x95,0x0A,0xB3,0x2C,0xE8,0x18,0x1B,0x42,0xD2,0xB5,0x2D,0x6B,0x62,0xDA,0xB7,0x2D,\n    0xEB,0x82,0xE2,0xB9,0x2E,0x6B,0xA2,0xEA,0xBB,0x37,0x93,0x7A,0x37,0xB3,0x7C,0x37,\n    0xD3,0x7E,0x31,0x46,0x2C,0xDF,0xCE,0x00,0xC3,0x61,0xF8,0x13,0x18,0x70,0x46,0x34,\n    0xC4,0x88,0x88,0xA9,0xC1,0x91,0x10,0x87,0x60,0x98,0x36,0x11,0x85,0x61,0x98,0x76,\n    0x21,0x89,0x62,0x98,0xB6,0x31,0x8D,0x63,0x98,0xF6,0x41,0x91,0x64,0x99,0x36,0x51,\n    0x95,0x65,0x99,0x76,0x61,0x99,0x66,0x99,0xB6,0x71,0x9D,0x67,0x99,0xF6,0x81,0xA1,\n    0x68,0x9A,0x36,0x91,0xA5,0x69,0x9A,0x76,0xA1,0xA9,0x6A,0x9A,0xB6,0xB1,0xAD,0x6B,\n    0x9A,0xF6,0xC1,0xB1,0x6C,0x9B,0x36,0xD1,0xB5,0x6D,0x9B,0x76,0xE1,0xB9,0x6E,0x9B,\n    0xB6,0xF1,0xBD,0x6F,0x9B,0xF7,0x01,0xC1,0x70,0x9C,0x37,0x11,0xC5,0x71,0x9C,0x77,\n    0x21,0xC9,0x72,0x9C,0xB7,0x31,0xCD,0x73,0x9C,0xF7,0x41,0xD1,0x74,0x9F,0xCB,0xA6,\n    0xEA,0x3F,0xA7,0x55,0xD6,0x75,0xDD,0x87,0x65,0xDA,0x76,0xD0,0xCE,0xE3,0xBA,0xEF,\n    0x3B,0xEF,0x03,0xC2,0xF1,0x3C,0x6F,0x23,0xCA,0xF3,0x3C,0xEF,0x43,0xD2,0xF5,0x3D,\n    0x6F,0x63,0xDA,0xF7,0x3D,0xEF,0xED,0xFE,0x3E,0x0F,0x8B,0xE4,0xF9,0xBE,0x8F,0xF5,\n    0x0C,0xFA,0xBE,0xAF,0xB1,0x70,0xC7,0x18,0xCB,0xA1,0x5B,0x91,0x7E,0x85,0x0F,0x69,\n    0x9D,0x2D,0x10,0xC5,0xC0,0x08,0xA1,0x68,0xA7,0xEB,0x0A,0x37,0x50,0x45,0x57,0xFE,\n    0x80,0xA2,0x22,0x45,0x14,0x10,0x06,0x08,0x04,0x51,0x09,0x04,0x80,0x04,0x54,0x82,\n    0x81,0x9D,0xE2,0x70,0x1A,0x59,0x49,0x97,0xD6,0x16,0x04,0xAE,0xC5,0xAA,0x6D,0x65,\n    0x26,0xBD,0x58,0xD3,0x3A,0xC2,0x5D,0x14,0x96,0xEB,0x0B,0xB1,0x6B,0x49,0x94,0xDD,\n    0x12,0x94,0xBE,0xB6,0x2A,0x83,0xFA,0x40,0x03,0xF9,0x88,0x85,0x20,0x7F,0x98,0x1B,\n    0x98,0x2B,0x97,0x2E,0x5C,0xBB,0xB9,0x73,0x25,0xB9,0x72,0xCB,0x2C,0xB2,0xCB,0x2C,\n    0x45,0x55,0x2E,0x80,0x08,0x8A,0xA2,0xB0,0x40,0x20,0x02,0xA9,0x08,0xAA,0xAC,0x50,\n    0x64,0x20,0x88,0xC6,0x28,0x08,0x2B,0x22,0xA0,0xB2,0x0A,0xA0,0xC8,0xA0,0xBF,0xBC,\n    0x44,0x0A,0x41,0x16,0x41,0x15,0x24,0x00,0x02,0x90,0x00,0x06,0x91,0x24,0x61,0x26,\n    0x16,0x02,0x50,0x44,0x15,0x03,0x8C,0x8A,0x00,0x24,0x82,0xA9,0x48,0x28,0xA4,0x45,\n    0x23,0x10,0x62,0xA3,0x22,0x00,0x03,0x69,0x54,0x90,0x09,0x87,0x50,0xB1,0x64,0x30,\n    0xD6,0x50,0x12,0xE9,0x54,0xB2,0x01,0x5B,0x4A,0x16,0xA8,0x88,0x2A,0x21,0x68,0x11,\n    0x80,0x81,0x20,0xA0,0xA6,0x1E,0x2A,0x09,0x58,0x0A,0xA0,0x2D,0x60,0x02,0x80,0xC1,\n    0x00,0x8A,0xB0,0x50,0x20,0xA8,0x0C,0x62,0x0C,0x02,0x02,0x8A,0x0B,0x18,0x8A,0x22,\n    0x12,0x00,0x89,0x20,0x0A,0x0C,0x54,0x60,0x22,0x40,0x05,0x0C,0x0E,0x02,0x97,0xDB,\n    0x54,0x13,0xF6,0x8A,0x15,0x85,0x63,0x49,0x48,0x65,0x40,0x20,0x08,0x0D,0x62,0x0B,\n    0x40,0x48,0x23,0x00,0x08,0x00,0x56,0x20,0xB4,0x04,0x82,0x30,0xAC,0x00,0xAC,0x02,\n    0x90,0xAD,0x68,0x56,0x94,0x0A,0x7D,0xC2,0x03,0x24,0x50,0x62,0x7F,0x6C,0x48,0x44,\n    0x49,0x05,0x02,0x46,0x80,0x82,0xA2,0x14,0x04,0x0A,0x44,0x54,0x09,0x00,0x3E,0x18,\n    0x89,0x48,0x2B,0x08,0x82,0x85,0x08,0x01,0x45,0x40,0x15,0x12,0x80,0xA1,0x42,0x24,\n    0x12,0xCB,0x0B,0x29,0x42,0xFF,0x7E,0x92,0x85,0x29,0x25,0x0C,0x8A,0xB5,0xA0,0x17,\n    0x80,0x28,0x0A,0x12,0xB5,0xB4,0x52,0x92,0x50,0xA5,0x24,0xA1,0x4A,0x49,0x41,0x2D,\n    0x00,0x0A,0x10,0x0C,0x8D,0x05,0x84,0x01,0x2C,0x92,0x49,0x24,0x92,0x51,0x52,0xAA,\n    0x88,0x80,0xA4,0x1A,0x42,0x2A,0xB0,0x43,0xB1,0x83,0x50,0x44,0x80,0x37,0xE2,0x0E,\n    0x12,0x1E,0x84,0x13,0xE4,0x83,0xEB,0x41,0xED,0xA2,0x09,0xE6,0xC0,0x3B,0x08,0x1D,\n    0xDC,0x17,0xAB,0x82,0xF9,0x31,0x11,0x03,0x2C,0x82,0xA0,0x0A,0x5F,0x22,0x00,0x22,\n    0x03,0x95,0xC0,0x4B,0xDB,0xDC,0x1D,0xED,0xED,0x82,0x18,0x88,0x82,0x96,0xE5,0xBB,\n    0x76,0xED,0xDB,0xB1,0x01,0x51,0x13,0x11,0x79,0x86,0xC2,0x64,0x98,0x3C,0x46,0x16,\n    0xED,0x45,0x44,0x14,0xB1,0x05,0x84,0x01,0x2C,0x92,0x49,0x24,0x92,0x50,0x01,0xC6,\n    0x06,0x28,0x28,0x97,0x90,0x01,0xA9,0x00,0x60,0x41,0x08,0x40,0x0C,0x68,0x50,0x2D,\n    0x15,0x00,0x20,0x41,0x68,0x40,0xA9,0x05,0x81,0x40,0xA0,0x01,0x52,0x0B,0x42,0x05,\n    0x48,0x26,0x3A,0x3F,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x81,0x39,0x40,0xD1,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cf126ee21cf73efa8949c94ee5dd49315f6c52949c7167ab99042dae53ff94dc) == 1119, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ko_KR.eucKR LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_e6704f509433cd9bf3e4518af729571fb6efa861ca163dea3ffe54b2cd1f413a[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD0,0x3A,0x09,0x79,0x00,0xAF,\n    0x7A,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xD0,0x04,0x7E,0x80,0x10,0x00,0x00,0x00,0xAA,0xAA,0x80,0x13,0x4C,\n    0x06,0x80,0x03,0x20,0x1A,0x00,0x00,0x8C,0x0D,0x00,0x04,0xC0,0x00,0x0D,0x13,0x68,\n    0x00,0x08,0xC0,0x00,0x00,0x09,0x80,0x00,0x26,0x4C,0x09,0x80,0x26,0x13,0x01,0x30,\n    0x00,0x00,0x09,0x80,0x00,0x00,0x00,0x09,0x30,0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x98,0x00,0x26,0x00,0x02,0x60,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x4C,0x00,0x13,0x00,\n    0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xA4,\n    0x89,0x90,0x28,0x3D,0x40,0xFC,0x94,0xD0,0x00,0x1A,0x00,0x00,0x00,0x68,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,\n    0x80,0x7A,0x80,0x00,0x00,0x1A,0x06,0xF5,0x25,0xCC,0x65,0xE6,0x22,0xEA,0xAC,0x3E,\n    0x22,0xA5,0x4B,0x24,0x2C,0xC2,0x5E,0x28,0x0A,0xA8,0xB7,0x84,0x15,0x4A,0xD7,0xA5,\n    0xF3,0x7E,0x8A,0x46,0x11,0xA4,0x6D,0x1C,0x47,0x51,0xE4,0x02,0x3E,0x90,0x24,0x29,\n    0x12,0x46,0x92,0x24,0xA9,0x32,0x4E,0x94,0x25,0x29,0x52,0x02,0x05,0x04,0x95,0xA5,\n    0x89,0x6A,0x5C,0x97,0xA6,0x09,0x8A,0x0D,0x32,0x4C,0xD3,0x44,0x1A,0x6A,0x9B,0x26,\n    0xE9,0xC2,0x72,0x9D,0x20,0xE7,0x69,0xE2,0x7A,0x9F,0x27,0xEA,0x02,0x82,0xFC,0x9F,\n    0x9A,0x84,0xA1,0xA8,0x8A,0x2A,0x8C,0xA3,0xA1,0x14,0x85,0x26,0x16,0x10,0xA5,0xA1,\n    0xEA,0x52,0x98,0xA6,0xA9,0xCA,0x7A,0xA0,0xA8,0xAA,0x4A,0x9B,0xF4,0x55,0x15,0x55,\n    0x59,0x57,0x56,0x15,0x95,0x69,0x5B,0x57,0x15,0xD5,0x79,0x5F,0x58,0x16,0x1B,0xDD,\n    0x8D,0x64,0x59,0x50,0xAB,0x32,0x0A,0x0A,0xCE,0xFD,0x56,0x84,0x32,0xD2,0xB5,0x2D,\n    0x6B,0x62,0xDA,0xB7,0x2D,0xEB,0x82,0xE2,0xB9,0x2E,0x6B,0xA2,0xEA,0xBB,0x3F,0x67,\n    0xEE,0xBB,0xAF,0x0B,0xCA,0xF4,0xBD,0xA0,0x60,0xAF,0x8B,0xEA,0xFC,0xBF,0xB0,0x0C,\n    0x0A,0x1B,0x04,0xC1,0xB0,0x8C,0x2B,0x0C,0xC3,0xB1,0x0C,0x4B,0x14,0xC5,0xB1,0x8C,\n    0x6B,0x1C,0xC7,0xB2,0x0F,0xE1,0x91,0x64,0x99,0x36,0x51,0x95,0x65,0x99,0x76,0x61,\n    0x99,0x66,0x99,0xB6,0x71,0x9D,0x67,0x99,0xF6,0x81,0xA1,0x7F,0x2D,0x13,0x46,0xFE,\n    0x9A,0x46,0x95,0xA6,0x69,0xDA,0x86,0xA5,0xFD,0xB5,0x4D,0x5B,0x58,0xD6,0xB5,0xCD,\n    0x7B,0x60,0xD8,0xB6,0x4F,0xF1,0xB3,0x6D,0x1B,0x56,0xD9,0xFE,0xB6,0xED,0xC3,0x72,\n    0xDD,0x37,0x6D,0xE3,0x7A,0xFF,0x9B,0xE6,0xFD,0xC0,0x70,0x5C,0x27,0x0D,0xC4,0x71,\n    0x5C,0x67,0x1D,0xC8,0x72,0x5C,0xA7,0x2D,0xCC,0x73,0x5C,0xE7,0x3D,0xD0,0x74,0x5D,\n    0x27,0x4D,0xD4,0x75,0x5F,0xFB,0xAC,0xEB,0xBB,0x0E,0xCB,0xB4,0xED,0xBB,0x8E,0xEB,\n    0xBC,0xEF,0xBC,0x0F,0x0B,0xC4,0xF1,0xBC,0x8F,0x2B,0xCC,0xF3,0xBD,0x0F,0x4B,0xD4,\n    0xF5,0xBD,0x8F,0x6B,0xDC,0xF7,0xBE,0x0F,0x8B,0xE4,0xF9,0xBE,0x8F,0xAB,0xEC,0xC6,\n    0x1C,0x18,0xAD,0xC8,0x1F,0x64,0x05,0x00,0x3F,0xB8,0xA0,0x09,0x22,0x28,0x32,0x12,\n    0x02,0x32,0x00,0xC8,0x81,0x22,0x05,0x20,0x83,0x48,0x45,0x06,0x04,0x24,0xF7,0xE2,\n    0xA5,0x14,0x14,0x04,0x1E,0x02,0x0A,0x8A,0x12,0x2A,0x20,0x38,0xB8,0x88,0x0C,0x15,\n    0x18,0xA0,0x18,0x98,0x19,0xDE,0xB7,0xA9,0xE9,0x99,0xB4,0x26,0x63,0x81,0x2C,0x05,\n    0x6A,0x67,0x19,0x05,0x45,0x25,0x55,0x42,0xB0,0xB5,0x52,0x61,0xB6,0xA2,0x52,0x97,\n    0xAD,0x70,0x41,0x29,0x1B,0xF8,0x2B,0x20,0x48,0xA2,0x82,0x0A,0xC8,0x48,0x12,0x12,\n    0x32,0x12,0x00,0x38,0x98,0xA0,0x7C,0xF0,0x57,0xEE,0x50,0xC7,0x99,0xD7,0xD1,0x0E,\n    0x1A,0x00,0x45,0x09,0x8A,0x85,0xAC,0x89,0x15,0x2C,0x00,0x97,0x70,0x01,0x6B,0x4B,\n    0x4A,0xA4,0x80,0x4B,0xB5,0x0A,0x84,0x91,0x2C,0xC0,0x2A,0x83,0x69,0x54,0xA4,0x02,\n    0x54,0xA1,0x55,0x80,0x41,0x51,0x0A,0x81,0x18,0xAA,0x09,0x22,0x29,0x22,0x29,0x08,\n    0x88,0x2D,0xE4,0x41,0x55,0x02,0x91,0x01,0x24,0x55,0x06,0x0A,0xA8,0x5C,0xA5,0x2F,\n    0x62,0x9F,0x7C,0x50,0xA4,0x19,0x14,0x01,0x50,0x5E,0x46,0x20,0x29,0x22,0x28,0x2C,\n    0x10,0x84,0x88,0x29,0x04,0x02,0xE8,0x12,0x08,0xC9,0x15,0x62,0xAD,0x55,0x51,0x05,\n    0xA8,0x12,0x08,0xD0,0xA0,0x05,0x54,0xA0,0xC0,0x95,0x55,0x53,0x27,0xE9,0x0F,0xA6,\n    0xAA,0x9A,0x34,0x50,0x68,0x50,0x06,0x22,0xA5,0x01,0x05,0x44,0x20,0xA8,0x09,0x44,\n    0x14,0x01,0x2A,0xAA,0x32,0x37,0xD7,0xB2,0x50,0xA5,0x24,0xA1,0x8B,0x02,0xC0,0x0A,\n    0x02,0x84,0x2B,0x56,0x92,0xB1,0x4A,0x49,0x42,0x94,0x92,0x85,0x29,0x25,0x04,0xB3,\n    0x5D,0x22,0x2A,0x41,0x50,0x12,0x80,0x60,0x20,0xB0,0x80,0x25,0xD4,0x92,0x49,0x24,\n    0x92,0x8A,0xE0,0x33,0x0B,0x0B,0x0B,0x1F,0xA4,0xAD,0x20,0x16,0x51,0x14,0x04,0x83,\n    0x62,0x11,0x55,0x88,0x15,0x7B,0xB2,0x11,0x9D,0x09,0x0A,0x5D,0xA5,0x67,0xB2,0x85,\n    0x08,0x48,0x25,0x4D,0x76,0x80,0x1F,0x09,0x8A,0xA0,0x01,0xFF,0x44,0x42,0x90,0xB9,\n    0x86,0xB7,0x7D,0x8E,0xD9,0xB9,0x83,0x66,0xE5,0xCB,0x77,0x2E,0x57,0xAF,0x5E,0xBD,\n    0x7A,0xF5,0xC5,0x53,0xA3,0x83,0x7F,0x0F,0x32,0x0E,0x0C,0x00,0xEF,0xA2,0x07,0xB7,\n    0x00,0x7D,0x58,0x07,0x73,0x03,0xC4,0x82,0xF6,0x90,0x5F,0x46,0x0E,0x46,0x90,0x50,\n    0xB5,0x7D,0x6A,0xD5,0xAB,0x56,0xAD,0x59,0x41,0x6D,0xC0,0x4B,0x76,0xED,0xDB,0xB7,\n    0x5D,0x07,0x06,0x08,0x25,0x89,0x62,0xC5,0x8B,0x16,0x30,0xF7,0x48,0x0A,0xAA,0xB7,\n    0xE8,0x2C,0x20,0x09,0x7F,0x24,0x92,0x49,0x24,0xA0,0x03,0xC2,0x35,0xA5,0x10,0xC7,\n    0x22,0x0B,0xC6,0xC1,0x09,0x00,0x20,0x71,0x81,0x58,0xA8,0x00,0x81,0x05,0xA1,0x02,\n    0xA2,0x0B,0x1A,0x05,0x00,0x0A,0x88,0x2D,0x08,0x15,0x41,0xD0,0x22,0x7F,0xE2,0xEE,\n    0x48,0xA7,0x0A,0x12,0x1A,0x07,0x41,0x2F,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e6704f509433cd9bf3e4518af729571fb6efa861ca163dea3ffe54b2cd1f413a) == 1065, \"Wrong size of locale's blob\");\n\n/* ko_KR.eucKR LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_34cd7acba95723b021bbe727423d7ea05130163af77bd080a23b10b774b0518b[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0xF9,0xA3,0xD9,0xBF,0xB9,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0xA3,0xEE,0xA3,0xCE,0xBE,0xC6,0x5D,0x2E,0x2A,0x0A,0xBF,0xB9,0x0A,0xBE,\n    0xC6,0xB4,0xCF,0xBF,0xC0,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_34cd7acba95723b021bbe727423d7ea05130163af77bd080a23b10b774b0518b) == 38, \"Wrong size of locale's blob\");\n\n/* ko_KR.eucKR LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_80f99494567b7c2a14e9d92b2a17c24982a5fae161fac32f13fa18bee14cb290[] = {\n    0x4B,0x52,0x57,0x20,0x0A,0x5C,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_80f99494567b7c2a14e9d92b2a17c24982a5fae161fac32f13fa18bee14cb290) == 34, \"Wrong size of locale's blob\");\n\n/* ko_KR.eucKR LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_9995741a3c8dd33b16df815bfe03c638d773e1323660e3efea3076912387a2da[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9995741a3c8dd33b16df815bfe03c638d773e1323660e3efea3076912387a2da) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ko_KR.eucKR LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_dec6835afddce2309171817a7b57a6bebefdd36741a81d41ed580b8398a5efb1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x0F,0xD3,0xD8,0x86,0x00,0x00,\n    0x21,0x5F,0x9F,0x80,0x10,0x42,0x00,0x7F,0xF0,0x20,0x62,0x08,0x70,0x1E,0x02,0x40,\n    0x40,0x00,0x02,0x28,0x56,0xCE,0x50,0xC0,0x02,0x14,0x00,0x21,0x24,0x30,0x00,0xB6,\n    0x06,0x00,0x06,0x8D,0x34,0x01,0x93,0x40,0x68,0x32,0x03,0x40,0x8A,0x7A,0x9A,0x34,\n    0x00,0x00,0x00,0x00,0x1A,0x03,0x40,0x94,0xF5,0x2A,0x9E,0xA3,0x4D,0x34,0x64,0xD1,\n    0x91,0xA7,0xA9,0x81,0x1E,0x93,0xF4,0x50,0x0D,0x91,0xF4,0xCA,0xA2,0xAB,0x2E,0xC3,\n    0x26,0x36,0xD4,0x11,0xE3,0x83,0xE2,0x0D,0x88,0x4E,0xE2,0x28,0x00,0x07,0xAA,0x1C,\n    0x70,0x1A,0x7E,0x44,0x0B,0xF1,0xC8,0x41,0xCF,0x3E,0xCF,0xBF,0xE3,0x0E,0xBD,0xD0,\n    0x1B,0xD7,0xD9,0x52,0x51,0x53,0x4C,0x4B,0x30,0x08,0x93,0x32,0x24,0xC8,0xA2,0x8A,\n    0x28,0xA2,0x96,0x71,0xB0,0x22,0xE6,0xA4,0xC0,0x92,0xD4,0xE9,0x4B,0x53,0x4D,0x75,\n    0xD7,0xE7,0xAB,0x3E,0xD3,0x69,0xE0,0x1B,0x0A,0x14,0x28,0x50,0xA1,0x43,0xA8,0xCF,\n    0x73,0xC8,0xF1,0xFA,0x63,0xA1,0x86,0xFB,0xFF,0x3D,0x6A,0x0A,0xB8,0xA4,0x1C,0xBF,\n    0x8F,0xFC,0x0E,0xD8,0x8B,0xCC,0x09,0x88,0x23,0x17,0x31,0x77,0x24,0x53,0x85,0x09,\n    0x00,0xFD,0x3D,0x88,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dec6835afddce2309171817a7b57a6bebefdd36741a81d41ed580b8398a5efb1) == 213, \"Wrong size of locale's blob\");\n\n/* ko_KR.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_8bde8f1ef0ae42bae830f17808d0ef6d0a32e2806108ba43acf6e0dc14032c5d[] = {\n    0x5E,0x5B,0x79,0x59,0xEF,0xBD,0x99,0xEF,0xBC,0xB9,0xEC,0x98,0x88,0x5D,0x2E,0x2A,\n    0x0A,0x5E,0x5B,0x6E,0x4E,0xEF,0xBD,0x8E,0xEF,0xBC,0xAE,0xEC,0x95,0x84,0x5D,0x2E,\n    0x2A,0x0A,0xEC,0x98,0x88,0x0A,0xEC,0x95,0x84,0xEB,0x8B,0x88,0xEC,0x98,0xA4,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8bde8f1ef0ae42bae830f17808d0ef6d0a32e2806108ba43acf6e0dc14032c5d) == 48, \"Wrong size of locale's blob\");\n\n/* ko_KR.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_abda46ce90a8643472bf2eed512a9db0037fca3e527ab7da53b86efe5f2aae05[] = {\n    0x4B,0x52,0x57,0x20,0x0A,0xE2,0x82,0xA9,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_abda46ce90a8643472bf2eed512a9db0037fca3e527ab7da53b86efe5f2aae05) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ko_KR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_704b4558eac83e6ba3c386f028da6f3c03f6dfbcc1d585059a9726faf9ecf518[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x8C,0x32,0xEE,0x5D,0x00,0x00,\n    0x21,0x5F,0xF9,0x00,0x10,0x42,0x00,0x7F,0xF0,0x20,0x62,0x08,0x70,0x1E,0x02,0x40,\n    0x40,0x07,0x48,0x04,0x7E,0x44,0x30,0x05,0x44,0x00,0x1E,0x30,0x00,0xB6,0x06,0x00,\n    0x69,0xA3,0x41,0xA6,0x20,0x00,0x00,0x19,0x00,0x45,0x3D,0x35,0x0D,0x0D,0x00,0x08,\n    0xC4,0x60,0xD4,0xC0,0x09,0x84,0x09,0x4F,0x52,0xA9,0xEA,0x34,0x1A,0x06,0x80,0x34,\n    0xD3,0xD4,0x1A,0x0D,0x03,0x7E,0xA1,0xAA,0x42,0xB2,0xE7,0x61,0x96,0x90,0xDF,0x16,\n    0x55,0x41,0x40,0x90,0x84,0x41,0xD1,0x09,0xDE,0x32,0x80,0x01,0xA9,0xEE,0x12,0x1A,\n    0x10,0x60,0x2D,0x1C,0x22,0x14,0xA7,0x33,0xF8,0x7A,0x4E,0x6E,0xF8,0x0D,0x2B,0xA9,\n    0x52,0x51,0x53,0x44,0x4B,0x30,0x08,0x93,0x32,0x24,0xC8,0xA2,0x8A,0x28,0xA2,0x97,\n    0xF9,0x5E,0x11,0xAD,0xB9,0x3E,0xB4,0x6D,0xF8,0xC6,0xC6,0x18,0xD8,0x5D,0xF8,0x88,\n    0x36,0xB0,0xB5,0x11,0xA6,0xE1,0xCC,0x4C,0x42,0xC4,0x11,0x49,0x05,0x2D,0xE6,0x46,\n    0x72,0xE6,0xC6,0x44,0x1D,0x06,0x09,0xD6,0x98,0x27,0x57,0xB7,0x16,0xAD,0x7C,0xF3,\n    0xB0,0xD8,0x5E,0x1F,0x25,0x14,0x51,0x45,0x14,0x6F,0x1C,0xD8,0xB9,0xF2,0x62,0x58,\n    0x6D,0x69,0x09,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,0x8C,0x32,0xEE,0x5D\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_704b4558eac83e6ba3c386f028da6f3c03f6dfbcc1d585059a9726faf9ecf518) == 222, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_ddc1aae272f4299a64f1d8239f85a3924a6308f4d1e6e5853c6b9ed8b4db26cf[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x2D,0x29,0x06,0xD6,0x00,0x05,\n    0x89,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xDA,0xD4,0x8C,0x70,0x01,0x23,0x26,0x43,0x4D,0x06,0x86,\n    0x46,0x46,0x80,0x06,0x98,0x83,0x13,0x21,0x91,0xA7,0xA9,0xA0,0x1A,0x62,0x30,0x8C,\n    0x09,0xA0,0xC0,0x9E,0xA6,0x02,0x0C,0x41,0x90,0x0F,0x49,0xA3,0x26,0x4C,0x23,0x4D,\n    0x0C,0x9F,0xA8,0x06,0xFD,0x4A,0x9F,0xA3,0x08,0xD0,0x68,0xD2,0x09,0x88,0x64,0xD0,\n    0x62,0x64,0x68,0xD1,0x90,0x0D,0x0D,0x0C,0x83,0x27,0xA9,0xA2,0x09,0xA3,0x21,0xA6,\n    0x20,0xD3,0x20,0x61,0x06,0x8D,0x32,0x64,0x06,0x8D,0x18,0x04,0xD0,0x1A,0x34,0x64,\n    0xC1,0x30,0x46,0x40,0x1A,0x06,0x46,0x11,0x80,0x46,0x98,0x8C,0x9B,0x48,0xD3,0x08,\n    0xC1,0x19,0x37,0x9A,0x6F,0x54,0xA9,0x91,0x84,0x30,0x09,0x88,0x19,0x03,0x20,0xD3,\n    0x40,0x61,0x06,0x9A,0x64,0xC4,0xC9,0x91,0x80,0x28,0xA7,0xB5,0x34,0x9A,0x9F,0xA8,\n    0x93,0xDE,0x52,0x98,0x21,0xA0,0xC8,0xD0,0x03,0x20,0x1A,0x64,0x00,0xD0,0x03,0x08,\n    0x68,0xD0,0xC4,0xC4,0x00,0x06,0x86,0x21,0xA0,0x00,0x0D,0x00,0x68,0x34,0x0D,0x30,\n    0x20,0xC8,0x19,0x00,0xD3,0x23,0x08,0x00,0x68,0x06,0x80,0x00,0x00,0x00,0x07,0xEA,\n    0x84,0x4F,0xF5,0x2A,0xA6,0xA4,0xDA,0x80,0x0D,0x00,0x00,0x1A,0x00,0x32,0x00,0x34,\n    0x00,0x00,0x0D,0x00,0x00,0x69,0xA0,0x00,0x00,0x64,0x03,0x40,0x00,0x00,0x00,0x06,\n    0x8D,0x03,0x4C,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x40,0x00,0x8C,0x0A,\n    0x0A,0x19,0x56,0x2B,0x36,0x1D,0x93,0x36,0xDA,0x53,0x44,0x25,0xAD,0x2D,0xB9,0xBD,\n    0xC1,0xC5,0xCA,0x99,0x4D,0xA7,0x39,0xD3,0xEA,0x1C,0x77,0x47,0x5A,0x9D,0x51,0xDA,\n    0xAB,0x56,0xAB,0xD6,0x2B,0x35,0xAA,0xDD,0x72,0xBA,0xEE,0xF1,0x5E,0xAF,0xB5,0x69,\n    0x5A,0xDB,0x34,0xDA,0x7D,0x43,0x6B,0x76,0xA7,0x54,0xDF,0xAB,0x38,0x71,0xC1,0xC3,\n    0x5A,0x6A,0xAD,0x8B,0xA6,0xCB,0x68,0xE6,0xE6,0xE9,0xB6,0x52,0xEC,0xF1,0xB7,0xDC,\n    0x3C,0x9A,0xF6,0x9D,0xFF,0x77,0xBC,0xDE,0xBF,0x3F,0xEE,0xA1,0x21,0x77,0xC7,0x77,\n    0xF0,0xDC,0x5E,0x33,0xA3,0xAF,0x1E,0x8B,0xBF,0x20,0xEA,0xF0,0xF9,0xC9,0x7E,0x80,\n    0xE5,0xF3,0x20,0xA0,0xE1,0x21,0x79,0xD1,0xAF,0xDD,0x08,0x84,0x11,0x3D,0x18,0xAE,\n    0x9C,0x5C,0x6F,0x53,0xAB,0x1E,0x82,0x42,0x2A,0x47,0xAD,0x43,0x2B,0x2C,0x69,0x0E,\n    0x07,0xF6,0x65,0xD3,0xCE,0x0E,0x41,0x25,0x22,0x2D,0x22,0x53,0x07,0x32,0x81,0x45,\n    0x12,0x93,0x45,0x46,0x5A,0xA4,0x22,0x00,0x00,0x00,0x00,0x06,0x20,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0xF3,0xCF,0x3C,0xF8,0x60,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x69,0xDB,0x48,0xC2,0x1A,0x42,0x1C,0xCE,0x71,\n    0x24,0x48,0x42,0x10,0xD9,0x4E,0x0C,0x19,0x91,0x66,0x18,0x64,0xBC,0xC7,0x6B,0xB6,\n    0x52,0x94,0xA5,0x29,0x4A,0x52,0x94,0xD3,0x22,0x79,0x0E,0x88,0x0D,0x99,0x24,0xD1,\n    0xD3,0x65,0x29,0x67,0x00,0x3E,0x7D,0x12,0x30,0x00,0x00,0x2C,0x51,0x45,0x49,0xDB,\n    0x1A,0x64,0x61,0x86,0x19,0x02,0x09,0xB9,0xB4,0x09,0x50,0x26,0x42,0x9C,0x71,0xC7,\n    0x30,0x82,0x08,0x21,0x42,0x92,0x49,0x24,0x92,0x4D,0x28,0xA2,0x95,0x14,0x8D,0x19,\n    0x65,0xA6,0x48,0x99,0x2A,0x53,0x0C,0x30,0xD3,0x4D,0xA7,0xA8,0xA9,0xAA,0xEE,0x55,\n    0xD6,0x56,0xF7,0x7B,0xDD,0xFA,0xEA,0xFF,0x05,0x87,0x87,0xC5,0xE3,0xF2,0x58,0xD9,\n    0x59,0xF9,0x6D,0x2D,0x7C,0xDE,0x7B,0x6F,0x47,0xA6,0xDF,0xD5,0xEB,0xB8,0xB9,0xF6,\n    0x7B,0x7D,0xDE,0xFF,0x87,0xC7,0xE5,0x75,0xF3,0xFA,0x7D,0x6E,0xFE,0xDF,0x7F,0xC5,\n    0xE5,0xEF,0xE7,0xF5,0xFB,0xFE,0x5F,0x5F,0xFF,0x55,0xFF,0x95,0xE0,0x2B,0x10,0x41,\n    0x04,0x96,0xE9,0x4A,0xF4,0x0F,0x1E,0xE5,0x48,0xF0,0x23,0x22,0xE2,0x0E,0x9D,0x82,\n    0x87,0x6A,0x94,0x21,0x08,0x42,0x10,0x84,0xA5,0x29,0x4A,0x52,0x94,0xB5,0x23,0x54,\n    0xA1,0x0D,0x1A,0x36,0xB3,0x66,0xC9,0x92,0xE3,0x10,0xC6,0x21,0x88,0xE7,0x39,0xCE,\n    0x73,0x9C,0xE7,0x39,0x0C,0xB2,0xCC,0x56,0x59,0x66,0x2B,0x1C,0x63,0x18,0xC6,0x31,\n    0xB1,0x58,0xCD,0x80,0x00,0x00,0x56,0x00,0x2F,0xE8,0x97,0x70,0x72,0x1B,0x02,0x2E,\n    0x52,0xAE,0xB8,0x18,0xCB,0x91,0x55,0x44,0xA1,0x4A,0xA0,0x00,0x08,0x0A,0x25,0x40,\n    0x01,0x55,0x00,0x0C,0x42,0x14,0x4A,0x10,0xC6,0x32,0x86,0x54,0x8A,0xAA,0x25,0x0A,\n    0x55,0x00,0x00,0x40,0x5A,0xBC,0xDC,0xB9,0x72,0xF3,0x78,0xB9,0x73,0x1A,0x2E,0xAA,\n    0xEE,0xAA,0xAD,0x56,0xAB,0x55,0x5D,0xDD,0xDC,0xBA,0xAA,0xB5,0x5D,0xC9,0x55,0x6A,\n    0x92,0x5A,0xAA,0xD6,0xB5,0x49,0x2D,0x6A,0x92,0x5A,0xAA,0xD5,0x55,0x52,0x4B,0x54,\n    0x92,0xAA,0x49,0x69,0x1E,0xB4,0x80,0x02,0xEA,0x40,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x03,0xD7,0x90,0x3F,0x79,0x3D,0xB9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xBC,0x08,0x00,0xA5,0x4A,0x89,0x24,0x92,0xC8,0x00,0x00,0x08,0x80,0x0A,0x42,0xAD,\n    0x2A,0x4A,0x95,0x25,0xAA,0x41,0x49,0x6A,0x90,0x14,0xA4,0xAB,0x44,0x80,0x29,0x2D,\n    0x52,0x0A,0x4A,0x81,0x00,0x01,0x11,0x48,0x55,0xA5,0x49,0x52,0xA4,0xB5,0x48,0x29,\n    0x2D,0x52,0x02,0x94,0x95,0x68,0x90,0x05,0x25,0xAA,0x41,0x48,0x40,0x80,0x00,0x00,\n    0x22,0xD6,0xB5,0xAD,0xFF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x16,0x94,0x83,0x6B,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ddc1aae272f4299a64f1d8239f85a3924a6308f4d1e6e5853c6b9ed8b4db26cf) == 928, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-1 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_4724752be54a17cac217a7b77124d0ce949af9ad46e9e60108086ffbb1c9c302[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD6,0xB4,0xC4,0x3E,0x00,0x05,\n    0x46,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7B,0x61,0x55,0x80,0x02,0xAA,0xAA,0x01,0x32,0x60,0x8C,\n    0x9A,0x60,0x07,0xA9,0xA0,0x26,0x98,0x00,0x00,0x34,0x9B,0x41,0x30,0x00,0x26,0x06,\n    0x80,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x02,0x60,0x00,\n    0x4C,0x98,0x00,0x00,0x00,0x00,0x00,0x95,0x55,0x34,0x68,0xD0,0xD0,0xC8,0xC8,0xC4,\n    0x34,0x69,0xA6,0x98,0x26,0x01,0x34,0x06,0x43,0x13,0x23,0x23,0x26,0x98,0x99,0x18,\n    0x00,0x04,0xD0,0x00,0x60,0x43,0x20,0x64,0x32,0x34,0x32,0x34,0xD0,0x06,0x99,0x30,\n    0x8D,0x30,0x26,0x80,0x06,0x11,0x90,0xD0,0xD3,0x13,0x41,0xA1,0xA3,0x13,0x46,0x08,\n    0xD1,0x93,0x08,0xC1,0x24,0x92,0x08,0x9B,0x53,0x4C,0x04,0x35,0x1A,0x31,0xEA,0x09,\n    0x84,0xC4,0x69,0xA0,0x60,0x04,0xC0,0x09,0x80,0x23,0x00,0x9A,0x62,0x62,0x64,0x30,\n    0x23,0x00,0x00,0x04,0xC8,0x31,0x19,0x1A,0x6D,0x4C,0x04,0xC9,0x82,0x68,0xD3,0x10,\n    0xC0,0x20,0xD1,0xA3,0x46,0x26,0x98,0x06,0xA6,0x4C,0x04,0xCC,0x9A,0x8C,0x6F,0x54,\n    0x24,0xC0,0x01,0x30,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x3B,0xD2,0xED,0x5D,0xA5,0xC2,0x49,0x57,0x19,0x24,0x10,0xC6,0x44,0x38,\n    0xC1,0xA3,0x49,0xE1,0x1C,0x44,0x27,0xA4,0x79,0x3E,0x21,0xC8,0x12,0x24,0x91,0x26,\n    0x4A,0x18,0xB3,0x18,0x24,0x09,0x22,0x51,0x8D,0x31,0xC6,0x3C,0x4B,0x12,0xC4,0x4C,\n    0x81,0x91,0x13,0x0C,0x90,0x9A,0x64,0xC4,0xE3,0x28,0x27,0x8A,0x02,0x88,0xA4,0x29,\n    0x99,0x51,0x49,0xFB,0xA5,0xE9,0x82,0x62,0x99,0x26,0x69,0xA2,0x6A,0x9B,0x26,0xE9,\n    0xC2,0x72,0x9D,0x27,0x69,0xE2,0x7A,0x9F,0x27,0xEA,0x02,0x82,0xA1,0x28,0x68,0x35,\n    0x12,0x16,0x0C,0xA2,0xA1,0xA8,0x45,0x19,0x08,0xA3,0xA9,0x0A,0x4B,0xF9,0x52,0x94,\n    0xB5,0x31,0x4D,0x53,0x94,0xF5,0x41,0x51,0x54,0x95,0x35,0x51,0x55,0x55,0x95,0x77,\n    0xF4,0xAC,0x2B,0x37,0x7A,0xDA,0xB8,0xAE,0xA1,0x55,0xE4,0x08,0x15,0xF5,0x81,0x61,\n    0x58,0x96,0x35,0x91,0x65,0x59,0x96,0x75,0xA1,0x69,0x5A,0x96,0xB5,0xB1,0x6D,0x5B,\n    0x96,0xF5,0xC1,0x71,0x5C,0x97,0x35,0xD1,0x75,0x5D,0x97,0x74,0x08,0x17,0x85,0xE5,\n    0x7A,0x5E,0xD7,0xC5,0xF5,0x7E,0x5F,0xD8,0x06,0x05,0x82,0x60,0xD8,0x46,0x15,0xFD,\n    0xB0,0xCE,0x09,0x12,0x45,0x1C,0x23,0x86,0x45,0x9C,0x43,0x8A,0x71,0x88,0xC2,0x34,\n    0xE3,0x9C,0x82,0x38,0xE4,0x91,0xE7,0x28,0xE5,0x9C,0xC3,0x9A,0x73,0x8E,0x79,0xD0,\n    0x3A,0x24,0x81,0x9F,0x68,0x1A,0x16,0x89,0xA3,0x69,0x1A,0x56,0x99,0xA7,0x6A,0x1A,\n    0x96,0xA9,0xAB,0x6B,0x1A,0xD6,0xB9,0xAF,0x6C,0x1B,0x16,0xC9,0xB3,0x6D,0x1B,0x56,\n    0xD9,0xB7,0x77,0x4E,0xF1,0xDF,0xF9,0x78,0x4F,0x11,0x3E,0x50,0x14,0x25,0x11,0xE3,\n    0x3C,0x85,0x19,0x48,0x79,0x4F,0x31,0xE7,0x29,0x4F,0x41,0xE9,0x3D,0x45,0x31,0xEB,\n    0x29,0xCA,0x82,0xA4,0xFF,0xFD,0xDD,0x1F,0x7F,0x4D,0xD4,0x75,0x5D,0x67,0x5D,0xD8,\n    0x76,0x7E,0xD0,0x50,0x5D,0xB7,0x71,0xDD,0x77,0x9D,0xF7,0x81,0xE1,0x78,0x9E,0x37,\n    0x91,0xE5,0x79,0x9E,0x77,0xA1,0xE9,0x76,0x49,0xA2,0x6C,0xED,0x13,0x87,0xFC,0x7F,\n    0xE4,0x58,0xB1,0x62,0xF6,0xCE,0xE1,0xDD,0x27,0x47,0xCE,0xF1,0x45,0x8B,0x32,0x84,\n    0x94,0xEB,0x0B,0x9E,0x97,0x17,0x0C,0xE1,0x08,0x73,0x30,0xD3,0x0E,0x00,0x66,0x10,\n    0x3C,0xC8,0x06,0x60,0x61,0x03,0x32,0x12,0x68,0x03,0x4D,0x30,0xE2,0x10,0xC8,0x10,\n    0x20,0xEC,0x32,0x12,0x09,0xC6,0x12,0x01,0xCC,0x03,0xF0,0x1F,0x7D,0xF7,0xDF,0x7E,\n    0x31,0xF7,0xE3,0xDF,0x7E,0x0C,0x18,0x30,0x60,0xC1,0x82,0x20,0x11,0xA2,0x61,0x09,\n    0x08,0x89,0x12,0x13,0xC8,0x02,0x6D,0x81,0x27,0x32,0x66,0xEB,0xB0,0xE6,0x10,0x84,\n    0x33,0x00,0x99,0x81,0x98,0x66,0x19,0x89,0x69,0x57,0x0E,0x73,0x94,0x83,0xCF,0x39,\n    0x03,0xC3,0xCF,0x38,0x73,0x9C,0x39,0xCE,0x10,0x43,0x61,0x92,0x05,0x00,0x4E,0x49,\n    0x42,0x52,0xBB,0xAE,0x59,0x31,0x04,0x4A,0x1B,0x0C,0x00,0x12,0x0E,0x11,0xFC,0xEA,\n    0x1C,0x04,0xC9,0xAE,0x70,0x1F,0xD3,0x09,0xA2,0x38,0xE4,0xB0,0x94,0xB8,0xC2,0xF0,\n    0x18,0x5F,0x7B,0x08,0x96,0x61,0x42,0x63,0xE8,0x62,0x46,0x45,0xC6,0xF6,0x1B,0x90,\n    0x7E,0x6C,0x09,0x49,0xFE,0x3F,0x4F,0xE5,0x00,0x23,0xB6,0xEE,0x09,0x4F,0x0B,0x5E,\n    0xF0,0x40,0x63,0x6C,0xC4,0x06,0x11,0xF5,0xEC,0x5C,0x04,0x94,0x27,0x11,0xAC,0x3D,\n    0x0E,0x03,0xC7,0xE0,0xC0,0x22,0x84,0x20,0x5E,0x18,0x9C,0x09,0x09,0x77,0xC5,0xDC,\n    0x91,0x4E,0x14,0x24,0x35,0xAD,0x31,0x0F,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_4724752be54a17cac217a7b77124d0ce949af9ad46e9e60108086ffbb1c9c302) == 825, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_eee8ddfb11c012aa1b0663db2084ecdca7dc7e8a6ce1ff1f1252c8ac72d30afb[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xC1,0xFA,0x5A,0x8E,0x00,0x00,\n    0x3A,0x5F,0x80,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x67,0x89,0x70,0x3E,0xA7,0xDF,\n    0x00,0x30,0x00,0xE6,0x50,0x4A,0x0A,0x69,0x8A,0x7A,0x9A,0x18,0x99,0x06,0x9A,0x7A,\n    0x9E,0xA0,0x61,0x82,0x60,0x4C,0x04,0x34,0x64,0xD3,0x01,0x22,0x48,0x99,0x32,0x62,\n    0x32,0x64,0x34,0x0D,0x36,0xA7,0x8D,0xB3,0x5C,0x6B,0xF0,0xDD,0x4F,0xCE,0x55,0xCB,\n    0x6F,0xB4,0x21,0x02,0x8A,0x4A,0xE6,0x37,0x83,0x0F,0xF5,0x49,0xA9,0x75,0xA0,0x3D,\n    0x39,0x70,0xBA,0xCA,0x4D,0x6F,0xE7,0x48,0xD5,0x96,0x27,0xC3,0x19,0x22,0x64,0x6A,\n    0x1D,0x4D,0x55,0x1C,0x51,0x54,0x65,0xA5,0xB6,0xF5,0xEC,0x88,0x26,0xA3,0x0A,0x9A,\n    0x4E,0x08,0x44,0x34,0xD8,0xA0,0x70,0xC1,0xB7,0x00,0x69,0x42,0xA2,0x95,0x04,0xC1,\n    0xAB,0x8C,0x2A,0x2D,0x26,0x30,0x92,0x37,0x59,0xD3,0x60,0x18,0xC1,0xB2,0xD9,0x6A,\n    0x78,0x3E,0x93,0x2F,0x5A,0x9C,0xD8,0x9E,0x5E,0x92,0xCD,0x1B,0x07,0xEC,0x89,0xD1,\n    0x2A,0x9C,0x5B,0x06,0x1C,0x72,0x24,0x46,0x25,0xA4,0xC5,0x62,0x75,0xBF,0x2D,0x04,\n    0x68,0x0C,0xAB,0x26,0x24,0x5A,0x60,0x4F,0xBB,0x1D,0x75,0xE9,0xBA,0x82,0xB6,0xAD,\n    0x88,0x4A,0xC9,0x11,0x20,0x93,0x59,0x10,0x23,0x01,0x83,0x0A,0x12,0x83,0x3A,0x78,\n    0x17,0xA9,0x12,0xF8,0x62,0x50,0x58,0xAE,0x09,0x8C,0xAB,0xA7,0x20,0x4C,0xDC,0xEA,\n    0x8F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x18,0x3F,0x4B,0x51,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eee8ddfb11c012aa1b0663db2084ecdca7dc7e8a6ce1ff1f1252c8ac72d30afb) == 252, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-13 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_5f7efd939f2c1699e0aecd5fa8b6c627ea9cc9a019369032c3f5778df5f439e2[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x51,0x7B,0xB3,0x93,0x00,0x05,\n    0x92,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF9,0xB4,0xB3,0x70,0x00,0x24,0x34,0xD3,0x13,0x26,0x02,\n    0x18,0x4C,0x23,0x4C,0x09,0x84,0xC0,0x26,0x13,0x04,0x19,0x30,0x11,0xA6,0x46,0x46,\n    0x00,0x00,0x09,0x84,0x61,0x34,0x68,0xD3,0x08,0x64,0xC4,0xC0,0x07,0xBD,0x54,0x11,\n    0xFA,0xA6,0x46,0x35,0x3C,0x93,0x66,0x9A,0x80,0x00,0x00,0x8D,0x31,0x1A,0x30,0x20,\n    0xC0,0x4C,0x26,0x98,0x8D,0x34,0x32,0x90,0x06,0x80,0xF1,0x4F,0x29,0xF8,0xA8,0x34,\n    0x68,0x1A,0x34,0x69,0xA1,0xA6,0x83,0x43,0x4D,0x0C,0x86,0x80,0xC8,0x01,0x91,0xA0,\n    0x0D,0x1A,0x1A,0x0C,0x43,0x04,0xD3,0x10,0xD1,0x88,0x64,0xC9,0x88,0xFD,0xEA,0x3F,\n    0x55,0x43,0x4D,0x46,0x8D,0xA8,0xC9,0xEA,0x1A,0x69,0xA1,0x90,0xC8,0x60,0x83,0x20,\n    0xD3,0x43,0x40,0x0C,0x41,0xA0,0xC9,0xA6,0x86,0x08,0x06,0x89,0x82,0x66,0xA6,0x34,\n    0x6A,0x62,0x61,0x30,0x00,0x98,0x4C,0x02,0x33,0x46,0x86,0x8D,0x09,0xA6,0xD0,0x00,\n    0x4C,0x00,0x04,0x7A,0x64,0x26,0x99,0x30,0x06,0xA6,0x00,0x09,0x93,0x00,0x01,0x30,\n    0x00,0x26,0x00,0x4C,0x09,0x80,0x13,0x09,0xA6,0x00,0x04,0xC8,0x60,0x03,0x40,0x69,\n    0xE9,0x45,0x25,0x30,0x20,0x18,0x26,0x80,0x34,0x64,0x61,0x34,0xC4,0x32,0x62,0x00,\n    0x0C,0x8C,0x4C,0x98,0x23,0x09,0x90,0x60,0x99,0x0C,0x43,0x4C,0x80,0x00,0x00,0xC8,\n    0xC9,0x93,0x4C,0x00,0x04,0xD1,0x93,0x00,0x02,0x60,0x20,0x68,0xD1,0xA6,0x26,0x4C,\n    0x10,0x00,0x00,0x00,0xF4,0x83,0xC3,0xE4,0x00,0x08,0x48,0xBC,0x04,0x64,0x84,0xA4,\n    0xC4,0xFE,0x12,0x82,0x90,0x3E,0x22,0xA2,0xB2,0xC0,0x45,0xA5,0xC0,0xFC,0x65,0xE6,\n    0x06,0x3E,0x43,0x23,0x3A,0xDF,0x29,0xB1,0xB9,0xC1,0xC9,0xD1,0xD9,0xE1,0xE9,0xF1,\n    0xFA,0x02,0x0F,0x99,0x09,0x0D,0x11,0x17,0xCE,0x8C,0x8E,0x90,0x92,0x94,0x96,0x98,\n    0x9B,0xE8,0xF4,0xA7,0x27,0x84,0x08,0xA2,0x14,0x2A,0x90,0x70,0xC1,0x83,0x87,0x57,\n    0x58,0x59,0xF5,0x2D,0x7A,0xEC,0x44,0x08,0xB3,0x77,0xAF,0x62,0x67,0xF6,0x34,0xB5,\n    0x35,0xB6,0x36,0xB7,0x37,0xB8,0x38,0xB9,0x39,0xEC,0xB6,0x6E,0xBB,0x4D,0xAE,0xD9,\n    0x73,0xBE,0xE2,0x55,0xE5,0xED,0xF5,0xFA,0x1A,0x07,0x7F,0xBB,0xE0,0xC1,0xCA,0xF0,\n    0xDE,0xE1,0xA1,0xE0,0xE2,0x22,0x78,0xD1,0x51,0x71,0x9D,0x64,0x11,0x11,0xCB,0x96,\n    0x48,0xF0,0xA4,0x96,0xF5,0x25,0x21,0xD7,0x74,0x16,0xF4,0xA5,0xEA,0x89,0x94,0x9C,\n    0x9C,0x1A,0x78,0xA8,0x0F,0x57,0x30,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xDD,0x10,0x41,0x04,0x10,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x01,0x14,0xA2,0x51,0x48,0x00,0x00,0x09,0x6A,\n    0x37,0x3A,0xE4,0x34,0xEE,0x3A,0x57,0x14,0x10,0x8F,0x22,0x22,0x22,0x22,0x22,0x22,\n    0x22,0x22,0x27,0x54,0x12,0x88,0x25,0x65,0x20,0x8A,0xC4,0xB9,0x23,0x95,0x16,0x24,\n    0x79,0x71,0xDC,0xC9,0x25,0x6A,0xD6,0xF3,0x64,0x39,0xCB,0x3C,0xE2,0xD4,0x0A,0x28,\n    0xA2,0x8A,0x29,0x01,0x7D,0x9E,0x92,0x34,0x84,0xA9,0x6A,0x68,0x69,0x7D,0xB5,0x5E,\n    0xB2,0x65,0x29,0xE9,0xC6,0x2B,0x50,0x39,0x02,0x04,0x6A,0xC8,0x91,0x26,0x48,0x91,\n    0x41,0xCA,0x0C,0x4C,0x71,0x86,0x1C,0xAD,0xA5,0xAD,0xBD,0xC5,0xCD,0xD5,0xDD,0xE7,\n    0xDE,0xF6,0xFA,0xFF,0x03,0x07,0x0B,0xF1,0x87,0x89,0x8B,0x8D,0x8F,0x91,0x93,0x95,\n    0x97,0x99,0xF9,0xCD,0xCE,0xCF,0xD0,0xFD,0x68,0xFE,0xF4,0xB4,0xF5,0x35,0x75,0xB5,\n    0xF6,0x36,0x76,0xB6,0xF7,0x37,0x77,0xB7,0xFF,0x9C,0x1C,0x3F,0xDF,0xF7,0xFF,0x8B,\n    0x8F,0x93,0x97,0x9B,0x9F,0xA3,0xA7,0xAB,0xAF,0xB0,0x6F,0x68,0xDE,0xE9,0xF8,0xB8,\n    0xA8,0x98,0x88,0x71,0x83,0x21,0xA1,0xA1,0x21,0x20,0xE0,0x3E,0x0F,0x7E,0xF7,0xA7,\n    0x91,0x62,0xC5,0x0A,0x12,0x27,0xDC,0xEA,0x04,0x00,0x20,0x67,0xA7,0x34,0xE3,0x4D,\n    0x38,0xE3,0xCF,0x54,0x71,0xE9,0xCD,0x38,0xD3,0x4E,0x38,0xF3,0xEC,0xE9,0x95,0x5C,\n    0xD3,0x1A,0x9D,0x42,0x95,0x26,0xDC,0x94,0xDC,0x15,0x5C,0x53,0x28,0x50,0xAA,0xC0,\n    0xC5,0xE3,0x0C,0x31,0x78,0xC3,0x81,0xE0,0xF8,0x4E,0x0A,0x91,0x4B,0xA6,0xF0,0xBC,\n    0x05,0x36,0x91,0x49,0xA1,0x45,0x49,0xDF,0xA9,0x71,0x11,0x11,0x11,0x39,0x4A,0x8A,\n    0x71,0x46,0xA8,0xF7,0xC9,0xAA,0x37,0xC6,0x4F,0x7C,0xE4,0xA8,0x0E,0x44,0xE4,0xC2,\n    0x68,0x1B,0x72,0xA1,0x39,0xA9,0xB7,0x36,0xC5,0x26,0x29,0x4A,0x4E,0x83,0x92,0x98,\n    0xE4,0x4E,0x4C,0x26,0x81,0xB7,0x2A,0x13,0x9A,0x9B,0x9C,0x86,0xC5,0x27,0x3A,0x0A,\n    0x89,0x28,0x88,0x85,0x09,0x51,0xCA,0x52,0x50,0xA2,0x83,0x6A,0x14,0x36,0xD4,0x42,\n    0x88,0x4D,0xB8,0x84,0xDB,0x85,0x09,0x24,0x9B,0x70,0x9B,0x06,0xD9,0xB3,0x6C,0x00,\n    0x00,0x00,0x00,0x09,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x1F,0x0B,0x60,0x1F,0xA3,0x7F,0x13,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x60,0x00,0x00,0x00,0x26,0xD8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x00,0x08,0x69,0x03,0x4D,0xC3,0x4D,0xC2,\n    0x69,0xB4,0xD3,0x68,0x6C,0x4D,0xB1,0x21,0x36,0x98,0x93,0x13,0x62,0x10,0xD2,0x13,\n    0x60,0x9B,0x01,0x0D,0x26,0xC0,0x00,0x04,0x34,0x81,0xA6,0xE1,0xA6,0xE1,0x34,0xDA,\n    0x69,0xB4,0x36,0x26,0xD8,0x90,0x9B,0x4C,0x49,0x89,0xB1,0x08,0x70,0x84,0xD8,0x26,\n    0xC0,0x43,0x49,0xB0,0x00,0x18,0xC6,0x30,0x01,0x8C,0x00,0x00,0x88,0x49,0x2F,0xFC,\n    0x5D,0xC9,0x14,0xE1,0x42,0x41,0x45,0xEE,0xCE,0x4C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5f7efd939f2c1699e0aecd5fa8b6c627ea9cc9a019369032c3f5778df5f439e2) == 970, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-13 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_73611a05707d1a746997a5d64435c134a20958c633f6dc3124adcb3a560c2d37[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x59,0x77,0xC4,0x3D,0x00,0x05,\n    0x46,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7D,0x81,0xA5,0xDD,0x10,0x35,0x4A,0x01,0x06,0x26,0xD4,\n    0xD0,0xD3,0x11,0x93,0x3D,0x44,0x69,0x93,0x26,0x98,0x08,0xD3,0x04,0x69,0x84,0xC8,\n    0xD3,0x13,0x10,0x61,0x32,0x60,0x46,0x10,0x30,0x8C,0x01,0x30,0x09,0x82,0x64,0x69,\n    0xA6,0x4C,0x43,0x4C,0x9A,0x32,0x69,0x89,0x89,0x93,0x00,0x81,0x91,0x89,0x93,0x02,\n    0x60,0x02,0x69,0x81,0x32,0x62,0x60,0x00,0xAA,0xAA,0x80,0x00,0x00,0x00,0x1E,0xA9,\n    0xE8,0x1A,0x00,0x13,0x00,0x0D,0x4C,0xD0,0x00,0x00,0x00,0x00,0x43,0x00,0x23,0x00,\n    0x00,0x26,0x98,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x60,0x00,0x98,\n    0x13,0x23,0x00,0x03,0x12,0x95,0x3F,0x4A,0x68,0x68,0x03,0x40,0x00,0x00,0x00,0x0D,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x34,0x00,0xD0,0x0D,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x80,0x01,0xA0,0x01,0xFA,0xA0,0x4A,0x24,\n    0x53,0x6A,0x26,0x4D,0x19,0xA8,0x00,0x1A,0x00,0x00,0x06,0x80,0x00,0x34,0x00,0x00,\n    0x00,0x00,0x03,0x40,0x01,0xA0,0x00,0xC8,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xD5,0x1F,0xE9,0x82,0xD3,0x18,0xF8,0x22,0x52,\n    0x94,0x04,0x1E,0x0A,0x83,0xC7,0x05,0x7D,0x1F,0x88,0xC0,0xFE,0x40,0x11,0x92,0x04,\n    0x72,0x34,0x46,0xC8,0x22,0x0C,0x7A,0x48,0x12,0x14,0x89,0x23,0x49,0x12,0x54,0x99,\n    0x27,0x4A,0x12,0x94,0x6E,0x54,0x95,0xA5,0x88,0x0F,0xC1,0x04,0x96,0xA5,0xC9,0x7A,\n    0x60,0x98,0xA0,0xD3,0x24,0xCD,0x06,0x9A,0x26,0xA9,0xB2,0x6E,0x9C,0x27,0x29,0xD2,\n    0x76,0x9E,0x3F,0x14,0xF5,0x3E,0x4F,0xD4,0x05,0x05,0x42,0x50,0xD4,0x45,0x15,0x46,\n    0x51,0xD4,0x84,0x23,0xF2,0xB2,0xC2,0x14,0xA4,0x35,0x0A,0xA5,0xA1,0x54,0xC5,0x35,\n    0x4E,0x53,0xD5,0x05,0x45,0x52,0x54,0xD5,0x45,0x55,0x56,0x55,0xD5,0x85,0x65,0x5A,\n    0x56,0xD5,0xC5,0x75,0x5E,0x57,0xD6,0x0B,0xD5,0x89,0x63,0x59,0x16,0x55,0x99,0x02,\n    0x05,0x9D,0x68,0x5A,0x56,0xA5,0xAD,0x6C,0x5B,0x56,0xE7,0xE6,0xFD,0x1F,0xAA,0xDE,\n    0xB8,0x2E,0x2B,0x92,0xE6,0xBA,0x2E,0xAB,0xB2,0xEE,0xBC,0x3F,0x67,0xEE,0xBC,0xAF,\n    0x48,0x10,0x2F,0x6B,0xE2,0xFA,0xBF,0x2F,0xEC,0x03,0x02,0xC1,0x30,0x6C,0x23,0x0A,\n    0xC3,0x30,0xEC,0x43,0x12,0xC5,0x3F,0x86,0x2D,0xFC,0xB1,0x8C,0x6B,0x1C,0xC7,0xB2,\n    0x0C,0x8B,0xFA,0x64,0x99,0x36,0x51,0x95,0x65,0x99,0x76,0x61,0x99,0x66,0x99,0xB6,\n    0x71,0x9D,0x67,0x99,0xF6,0x81,0x28,0x3D,0x02,0x54,0x4B,0x0F,0x48,0x97,0xA1,0xF5,\n    0xD1,0x4C,0x8F,0x60,0x9A,0x1E,0xD1,0x36,0x27,0x04,0xE8,0xF7,0x09,0xE1,0x3E,0x28,\n    0x07,0xBC,0x50,0x8A,0x20,0x50,0xA1,0x42,0x9F,0x01,0x46,0x37,0x4D,0xDB,0x79,0xDB,\n    0xDF,0x37,0xEE,0x03,0x82,0xE1,0x38,0x6E,0x23,0x8A,0xE3,0x38,0xEE,0x43,0x92,0xE5,\n    0x39,0x6E,0x63,0x9A,0xE7,0x39,0xEE,0x83,0xA2,0xE9,0x3A,0x6E,0xA7,0xBB,0xAD,0xEF,\n    0xFE,0xDD,0x87,0x65,0xDA,0x76,0xDD,0xC7,0x77,0xED,0x05,0x05,0xDF,0x78,0x1E,0x17,\n    0x89,0xE3,0x79,0x1F,0xE3,0xCA,0xF3,0x3C,0xEF,0x43,0xD2,0xF5,0x3F,0xD7,0xAD,0xFE,\n    0x19,0x83,0x34,0x67,0x0F,0xF8,0xCF,0x1A,0x00,0x92,0x49,0x27,0x44,0x69,0x0D,0x31,\n    0xA8,0x35,0x46,0xB0,0x3D,0x27,0x04,0x80,0x41,0x04,0x6A,0x15,0x02,0x3E,0x9F,0xB2,\n    0x08,0x04,0x5B,0x15,0x00,0x42,0x49,0x22,0x12,0x24,0x5F,0xF4,0xEC,0x42,0x44,0xB2,\n    0x0E,0x22,0x40,0x64,0x02,0x48,0x02,0x12,0x24,0x22,0xBE,0x0B,0xF4,0x51,0x83,0x82,\n    0x80,0x02,0x07,0xC9,0x51,0x11,0x03,0xEE,0xA8,0x22,0x03,0x14,0x07,0x5B,0x75,0xD7,\n    0x5D,0x75,0xE7,0xE7,0x9E,0x8B,0x3C,0xF3,0xAE,0xBA,0xEB,0xAE,0xBA,0x08,0x00,0x8D,\n    0x0A,0x04,0x12,0x08,0x7F,0x7F,0x7C,0xE1,0x00,0x0F,0xAA,0x00,0x96,0x45,0x2F,0x8A,\n    0x0C,0x81,0x04,0x10,0x90,0x00,0xA4,0x02,0x41,0x20,0x90,0x80,0x80,0x60,0xCC,0xC6,\n    0x30,0xE3,0x8C,0x40,0x70,0x38,0xE3,0x06,0x66,0x0C,0xCC,0x01,0x11,0x12,0x40,0x31,\n    0x00,0x58,0x92,0xF8,0xFA,0xB9,0x1E,0x2E,0xFE,0xA5,0xF0,0x25,0xF8,0x20,0x81,0x24,\n    0xA1,0x04,0xA0,0x77,0x75,0x8C,0x03,0xCD,0xB4,0x60,0x78,0xD4,0x21,0x14,0x1B,0x51,\n    0xF5,0xA8,0x16,0x8F,0x0A,0x88,0x92,0x41,0x44,0x92,0xA8,0x9C,0xD5,0x10,0x90,0x28,\n    0x8F,0x14,0xDC,0xA8,0xF6,0x01,0x87,0x29,0xC6,0x20,0x74,0x94,0x11,0x1E,0xF3,0xF7,\n    0x7D,0x06,0xC1,0xFF,0x82,0xC0,0x8E,0xCA,0x36,0xAD,0x03,0x6A,0x70,0x14,0x6D,0x44,\n    0x37,0xDB,0x76,0x01,0x06,0xF1,0x83,0xF2,0x8D,0x38,0xDB,0x47,0x39,0x40,0x42,0x42,\n    0x88,0x09,0x08,0x23,0x01,0x10,0x44,0xFF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x2C,0xBB,\n    0xE2,0x1E,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_73611a05707d1a746997a5d64435c134a20958c633f6dc3124adcb3a560c2d37) == 835, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_36f45a887deb9cd676da4a338ed946ff0f4851ea28a3ddeffe42043f8ad7fed2[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF1,0xA9,0x83,0x2C,0x00,0x05,\n    0x90,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x8B,0x1C,0x01,0x20,0x46,0x86,0x99,0x1A,0x32,\n    0x30,0x8D,0x18,0x9A,0x19,0x34,0x30,0x10,0xD0,0x30,0xD3,0x51,0xA6,0x8D,0x33,0x44,\n    0x31,0x34,0xC3,0x40,0x1A,0x8D,0xA9,0xB4,0x46,0x40,0x62,0x62,0x7A,0x99,0xA8,0x0C,\n    0x9A,0x0C,0x4D,0x32,0x64,0xF5,0x3F,0xF5,0x54,0x6F,0x54,0xDE,0xA9,0xF9,0x1A,0x32,\n    0x11,0xE9,0x46,0x86,0x86,0x46,0x46,0x9A,0x19,0x0D,0x06,0x8D,0x34,0xC8,0x06,0x4C,\n    0x99,0x1A,0x3D,0x40,0xE5,0x1A,0x62,0x3F,0xD5,0x46,0x09,0xBF,0x52,0x80,0x62,0x34,\n    0x69,0x90,0x01,0xA6,0x26,0x23,0x10,0x32,0x0D,0x0C,0x26,0x80,0x00,0x30,0x8C,0x20,\n    0xD3,0x09,0xA1,0xA0,0x0D,0x1A,0x60,0x80,0x1A,0x1B,0xCC,0xF5,0x53,0x28,0x98,0x20,\n    0x00,0x1A,0x18,0x09,0xA6,0x10,0x00,0x34,0xC0,0x20,0xD3,0x4D,0x00,0x00,0x10,0x86,\n    0x84,0x4A,0x00,0x68,0x18,0x83,0x40,0x32,0x00,0xD1,0xA3,0x26,0x41,0xA6,0x8D,0x00,\n    0x06,0x80,0x01,0xA6,0x11,0x90,0x06,0x9A,0x34,0xD0,0x01,0xA6,0x40,0x68,0x68,0xD0,\n    0x00,0x03,0x40,0x0C,0x81,0x88,0x01,0xA0,0x31,0x00,0x1A,0x0D,0x00,0x64,0x01,0x90,\n    0x01,0xB5,0x08,0x9F,0xEA,0x55,0x54,0x00,0x00,0x00,0x00,0xD0,0x1A,0x1A,0x00,0x1A,\n    0x00,0x06,0x41,0xA0,0x18,0x80,0xD0,0x00,0x00,0x0D,0x00,0x00,0x00,0x68,0x34,0x68,\n    0x0C,0x99,0x32,0x34,0x34,0x0C,0x83,0x4D,0x18,0x80,0x01,0xA1,0xA0,0x68,0x34,0x00,\n    0x00,0x00,0x00,0x18,0xE8,0x24,0xA9,0x6C,0x32,0xD2,0x7D,0x3F,0xA0,0x50,0x68,0x54,\n    0x3A,0x25,0x16,0x8C,0xD9,0x47,0xA4,0x52,0x69,0x54,0xB6,0xD6,0xE6,0xFA,0x65,0x36,\n    0x9D,0x25,0x50,0xA8,0xD4,0xAA,0x75,0x4A,0xAD,0x59,0xC5,0xCA,0xAF,0x58,0xAC,0xD6,\n    0xAB,0x75,0xCA,0xED,0x79,0xCF,0x41,0xA1,0xD1,0x39,0xE8,0xF4,0x9A,0x5D,0x36,0x9D,\n    0xD1,0xD5,0xD9,0xDC,0xC1,0x83,0x26,0x75,0x05,0xA9,0x7A,0x35,0xAB,0xD6,0xBE,0xBE,\n    0x9A,0x7F,0xD7,0x6B,0xF6,0x10,0x10,0x25,0xEC,0x53,0xC3,0x1B,0x88,0x89,0x8A,0x37,\n    0x1D,0x1E,0x73,0x67,0xB4,0x90,0x3B,0xB5,0x81,0x82,0xD3,0xF5,0x60,0x75,0x30,0xD0,\n    0x7A,0xCD,0x6E,0xBE,0x27,0x61,0xB2,0xD9,0xED,0x36,0xBB,0xC8,0x88,0x7D,0xC6,0xE6,\n    0x2F,0x5D,0x19,0x1D,0x1F,0x21,0xBE,0xDF,0xF0,0x38,0x31,0x9C,0x29,0x1E,0x87,0x19,\n    0x03,0x1C,0x24,0x9C,0x9C,0xA7,0x3F,0x7B,0x2F,0x31,0x33,0x48,0x8D,0x22,0x52,0x53,\n    0xA9,0x1B,0x9D,0x57,0x58,0x5F,0x44,0x85,0x22,0x73,0x40,0x00,0x00,0x00,0x03,0x1A,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFA,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x19,0xD7,0x54,0x8A,0x08,0xA2,\n    0x6D,0x59,0x8C,0x63,0x18,0xC8,0xC8,0xBE,0x6C,0x50,0x8F,0x41,0x04,0x10,0x4E,0x4E,\n    0x50,0xE7,0x39,0xCE,0x73,0x9C,0xE7,0x39,0x91,0x88,0xD4,0x41,0x6E,0x8D,0xC7,0x3C,\n    0xA8,0x96,0x56,0xAD,0x5C,0xBA,0x49,0x24,0x94,0xC4,0xCA,0x69,0xA7,0xC8,0xA9,0x46,\n    0x20,0x82,0x10,0x90,0x5A,0x01,0x45,0x14,0x51,0x79,0x22,0xA5,0x14,0x9E,0xA1,0x43,\n    0x0C,0x32,0x61,0xC7,0x1C,0x74,0xEA,0x11,0x22,0x45,0x56,0x8E,0xB0,0x82,0x08,0x2D,\n    0x49,0x24,0x94,0x4A,0x72,0x8A,0x29,0x32,0x85,0x05,0x96,0x5F,0x57,0xAD,0x5B,0xD7,\n    0xEC,0x76,0x6B,0xBB,0x5D,0xBE,0xE5,0x7D,0x87,0x77,0xBD,0x63,0x65,0xDF,0xF0,0x59,\n    0xF8,0x6D,0x3C,0x5E,0x3F,0x25,0xAD,0xB7,0x97,0xCD,0xE7,0xB7,0xF4,0x7A,0x7D,0x5E,\n    0xBB,0x8F,0x67,0xB6,0xE7,0xDD,0x75,0xEF,0xBB,0xBC,0xF8,0x7C,0x7E,0x5F,0x3F,0xA7,\n    0xD7,0xED,0x7B,0x7D,0xF7,0xBF,0xC0,0xFC,0x60,0xE1,0x7E,0x7F,0x58,0x7F,0xBF,0xE2,\n    0xAF,0xEA,0xAF,0xF2,0xA4,0x28,0x50,0xF1,0xE7,0xE7,0xB8,0x88,0x10,0x70,0x0F,0xCD,\n    0x4D,0x6E,0xB7,0x3B,0x8D,0xB9,0xE3,0xC7,0x64,0x0E,0x1C,0x56,0x60,0x5D,0x59,0x29,\n    0x4A,0x52,0x94,0xAA,0x95,0x14,0xA5,0x29,0x4A,0x52,0xAA,0xB7,0x59,0xC9,0x6D,0x60,\n    0x60,0x5F,0x5F,0x5E,0x5D,0x5D,0x5C,0x5C,0xFF,0x28,0x52,0xA5,0x42,0x85,0x2A,0x08,\n    0x42,0x10,0x84,0x21,0x08,0x43,0x29,0x96,0x58,0x65,0x96,0x58,0x65,0xA0,0x88,0x88,\n    0x88,0xB0,0xCA,0x9A,0x11,0x11,0x12,0x0C,0x74,0x10,0x7F,0x81,0xAB,0x78,0x18,0xCD,\n    0xC7,0x03,0x1A,0x7A,0x79,0xAA,0x94,0xD4,0xCB,0x58,0x25,0x08,0x49,0x11,0x01,0x20,\n    0x16,0x44,0x04,0xB4,0x91,0x29,0x67,0x24,0x18,0xEA,0x3A,0xD6,0xB5,0x29,0x66,0x5A,\n    0xC1,0x28,0x42,0x48,0x88,0x09,0x00,0xB2,0x52,0x41,0x2B,0x52,0x49,0x66,0x32,0x0E,\n    0x60,0x60,0x04,0x40,0x44,0x04,0x01,0x6C,0x25,0x02,0x22,0x0C,0x1C,0xE2,0x22,0x07,\n    0x3C,0xAB,0x55,0x5A,0xD5,0x24,0xAB,0x54,0x92,0xD5,0x56,0xAA,0xAA,0x92,0x5A,0xA4,\n    0x95,0x52,0x4B,0x54,0x8F,0x5E,0x40,0x01,0x92,0x48,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x7B,0x12,0x07,0xEF,0x27,0xB7,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x64,0xC2,0x00,0x0A,0x48,0x92,0x59,0x00,0x00,0x01,0x04,0x44,0x14,0x85,0x5A,0x54,\n    0x95,0x2A,0x4B,0x54,0x82,0x92,0xD5,0x20,0x29,0x49,0x56,0x94,0x90,0x52,0xA4,0xA9,\n    0x2D,0x52,0x0A,0x4A,0x8B,0x02,0x00,0x0A,0x42,0xAD,0x2A,0x4A,0x95,0x25,0xAA,0x41,\n    0x49,0x6A,0x90,0x14,0xA4,0xAB,0x45,0x48,0x29,0x52,0x54,0x96,0xA9,0x05,0x22,0x48,\n    0x84,0x44,0x00,0x11,0x04,0x5A,0xC0,0x00,0x1F,0xF1,0x77,0x24,0x53,0x85,0x09,0x0F,\n    0x1A,0x98,0x32,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_36f45a887deb9cd676da4a338ed946ff0f4851ea28a3ddeffe42043f8ad7fed2) == 948, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-15 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_eed5a4beda20a9070a8af1be14b78040503ad0301cbe33c84d37bf984afc668c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x38,0xC8,0xB5,0x66,0x00,0x05,\n    0x45,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7D,0x81,0xA6,0x00,0x2A,0xA9,0xA7,0xEA,0x68,0x04,0xD3,\n    0x00,0x04,0x60,0x00,0x00,0x04,0xC2,0x61,0x30,0x00,0x00,0x02,0x30,0x00,0x02,0x0C,\n    0x4C,0x01,0x34,0xC0,0x01,0x30,0x26,0x98,0x00,0x00,0x00,0x64,0x00,0x04,0xC9,0x80,\n    0x02,0x60,0x00,0x01,0x32,0x64,0xC9,0x81,0x01,0x55,0x55,0x01,0x30,0x4D,0x30,0x01,\n    0x30,0x3D,0x4D,0x03,0x40,0x02,0x60,0x04,0x60,0x4C,0x00,0x00,0x00,0x00,0x4C,0x00,\n    0x00,0x13,0x00,0x01,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x18,0x00,0x0C,0xA6,\n    0x00,0x00,0x04,0xC0,0x12,0x60,0x00,0x98,0x00,0x09,0x80,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x48,0xA4,0x12,0x32,0x0D,0x0D,0x00,0x98,0x9B,\n    0x48,0xC0,0x00,0x11,0x80,0x4D,0x32,0x30,0x26,0x98,0x13,0x00,0x00,0x00,0x83,0x09,\n    0x80,0x04,0xD0,0xD0,0xC8,0xD1,0x81,0x0C,0x99,0x18,0x04,0x68,0xC0,0x26,0x00,0x02,\n    0x18,0x4C,0x98,0x46,0x04,0x01,0x91,0xA3,0x13,0x00,0x3F,0x54,0x86,0x73,0xB5,0xF3,\n    0x28,0xB1,0xC4,0xAB,0x6C,0x02,0x24,0x06,0x44,0x84,0xB0,0x69,0x69,0x22,0x49,0x12,\n    0xE2,0x5E,0x4C,0x09,0x89,0x1E,0x4C,0x99,0x13,0x32,0x68,0x4A,0x11,0xF4,0x81,0x21,\n    0x48,0x9F,0x9A,0x46,0x92,0x24,0xA9,0x32,0x4A,0x8C,0x49,0xD2,0x84,0x04,0xA5,0x04,\n    0x95,0x25,0x69,0x62,0x5A,0x97,0x20,0xD2,0xF4,0xC1,0x31,0x41,0xA6,0x49,0x9A,0x68,\n    0x9A,0xA6,0xC9,0xBA,0x70,0x9C,0xBF,0x44,0xE9,0x3B,0x4F,0x13,0xD4,0xF9,0x3F,0x50,\n    0x14,0x15,0x09,0x43,0x7E,0xAF,0xD9,0x44,0x51,0x54,0x6B,0x1D,0x10,0xA4,0x21,0xAA,\n    0x4B,0xF7,0x52,0x14,0xA5,0x2D,0x4C,0x53,0x54,0xE5,0x3D,0x50,0x54,0x55,0x25,0x4D,\n    0x54,0x55,0x55,0x65,0x5D,0x58,0x56,0x55,0xA5,0x6D,0x5C,0x57,0x55,0xEB,0xE5,0x81,\n    0x61,0x58,0x96,0x35,0x91,0x02,0x05,0x95,0x66,0x59,0xD6,0x85,0xA5,0x6A,0x5A,0xD6,\n    0xC7,0xF0,0xB6,0xAD,0xCB,0x7A,0xE0,0xB8,0xAE,0x4B,0x9A,0xE8,0xBA,0xAE,0xCB,0xBA,\n    0xF0,0xBC,0xAF,0x4B,0xDA,0xF8,0x81,0x02,0xFA,0xBF,0x2F,0xEC,0x03,0x02,0xFE,0x58,\n    0x26,0x0D,0x84,0x61,0x58,0x66,0x1D,0x88,0x62,0x58,0xA6,0x2D,0x8C,0x63,0x58,0xE6,\n    0x3D,0x90,0x7F,0x4F,0xED,0x91,0x64,0x99,0x36,0x51,0x95,0x65,0x99,0x76,0x61,0x99,\n    0x66,0x99,0xB6,0x71,0x9D,0x67,0x99,0xF6,0x81,0xA1,0x68,0x94,0x20,0xA2,0xA4,0xA4,\n    0xA5,0x08,0x20,0x82,0xA6,0x05,0x38,0x2A,0x01,0x52,0x0A,0xA0,0x55,0x82,0xB0,0x15,\n    0xA0,0xAE,0x05,0x78,0x2C,0x03,0xD9,0x08,0x0E,0x01,0x00,0x0C,0x18,0x30,0x6B,0x40,\n    0x5A,0x82,0xDA,0xDC,0x4A,0xE2,0x12,0x1F,0xBC,0xDE,0xEF,0xA1,0x78,0x0E,0x0B,0x84,\n    0xE1,0xB8,0x8E,0x2B,0x8C,0xE3,0xB9,0x0E,0x4B,0x94,0xFF,0x1F,0xEB,0x96,0xE6,0x39,\n    0xAE,0x73,0x9E,0xE8,0x3A,0x2E,0x93,0xA6,0xEA,0x7B,0xFF,0xFE,0xBF,0x61,0xD9,0x42,\n    0x21,0x5F,0xF3,0xB4,0x95,0xFD,0xA0,0xA0,0xBB,0x8E,0xEB,0xBC,0xEF,0xBC,0x0F,0x0B,\n    0xC4,0xF1,0xBC,0x8F,0x2B,0xCC,0xF3,0xBD,0x0F,0x4B,0xD4,0xEB,0x1F,0xF9,0xD7,0x3B,\n    0x07,0x64,0xED,0x1D,0xB2,0x56,0x56,0x7F,0x2B,0xDC,0x3B,0xA7,0x78,0xEF,0x9E,0x02,\n    0x12,0x7F,0x5A,0xFD,0xD0,0x92,0xF0,0x30,0xBF,0x94,0xBF,0x1C,0x33,0x88,0x43,0x8E,\n    0xCE,0xEE,0x0C,0xFF,0x34,0x09,0xD9,0x22,0x06,0x81,0x90,0x40,0xC2,0x50,0x0C,0x99,\n    0x93,0x0E,0xC9,0x27,0x64,0x24,0xD1,0x06,0xEB,0xB0,0xE4,0x61,0x90,0x20,0x41,0xD6,\n    0x60,0x00,0xED,0x32,0x40,0x87,0x60,0x21,0x89,0x0C,0x30,0xC3,0x0C,0x32,0x10,0xC3,\n    0x2F,0x86,0x18,0xB1,0x62,0xC5,0x8B,0x16,0x28,0x80,0x46,0x75,0x84,0x24,0x22,0x4A,\n    0x4A,0x34,0x08,0x03,0xB0,0xC0,0x93,0xB2,0x66,0xEA,0x30,0xEC,0x21,0x08,0x66,0x01,\n    0x33,0x03,0x30,0xCC,0x33,0x12,0x92,0x8E,0x3B,0xBA,0x98,0xC1,0x03,0xA0,0x80,0x82,\n    0x07,0x1D,0xDC,0x77,0x71,0x04,0x76,0x18,0x48,0x51,0x04,0xE9,0x28,0xCB,0xA3,0xBC,\n    0xE7,0x72,0xF4,0x51,0x84,0xA4,0x18,0x64,0x09,0x31,0x26,0xC0,0x44,0xD3,0x38,0x1F,\n    0xC6,0xA9,0xC0,0xFD,0x79,0xCE,0x26,0x97,0x39,0x16,0x45,0xC4,0xA7,0x23,0x0A,0x74,\n    0xC2,0xFB,0x58,0x44,0xD5,0x85,0x1D,0x8D,0x7B,0x12,0x72,0x2E,0x6F,0xE3,0xBA,0x0E,\n    0x23,0x02,0x53,0x3E,0x0E,0xC7,0x85,0x10,0x24,0x76,0xCE,0x13,0x49,0xE6,0xAE,0x00,\n    0x88,0xC6,0xD5,0x88,0x8C,0x23,0x67,0xAD,0x70,0x26,0x51,0x9C,0x96,0x31,0x04,0x78,\n    0x90,0x1F,0x73,0x00,0x8F,0x10,0x48,0x53,0xD1,0x38,0x24,0x25,0xE1,0x17,0x72,0x45,\n    0x38,0x50,0x90,0x38,0xC8,0xB5,0x66\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_eed5a4beda20a9070a8af1be14b78040503ad0301cbe33c84d37bf984afc668c) == 823, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-2 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_e9ac0fd0e4a2107ff841acb87e024cc369a40f0432270cb4f5f0b2cebeb6f3ea[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x36,0x68,0x56,0x6A,0x00,0x05,\n    0xA2,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD4,0x51,0x31,0xC0,0x09,0x32,0x1A,0x34,0x61,0x34,0x68,\n    0xD3,0x21,0x84,0xC2,0x34,0x34,0xD0,0x68,0x06,0x98,0x08,0x69,0x91,0xA0,0x68,0x34,\n    0x60,0x46,0x41,0x88,0x0D,0x34,0x1A,0x30,0x0D,0x4C,0x6A,0x79,0x47,0xFE,0x55,0x19,\n    0x3D,0x46,0x9E,0x93,0xD5,0x37,0xA2,0x9E,0x4C,0xA7,0xE8,0x50,0x68,0x0C,0x80,0x01,\n    0xA3,0x20,0x18,0x4C,0x21,0x84,0x00,0x61,0x30,0x13,0x03,0x29,0x0D,0x19,0x34,0x32,\n    0x37,0xA6,0x9A,0x67,0xAA,0xA0,0x1A,0x34,0x69,0xA6,0x8D,0x0D,0x1A,0x34,0x03,0x40,\n    0xD0,0x64,0x18,0x8D,0x30,0x04,0x1A,0x64,0x0D,0x18,0xD4,0xD0,0x6D,0x40,0x34,0x32,\n    0x7A,0x9F,0xEF,0x55,0x50,0x7A,0x40,0x34,0x34,0x69,0x84,0xC9,0x88,0xC4,0xD0,0x64,\n    0xC0,0x8D,0x0D,0x34,0x19,0x34,0xD0,0x0D,0x00,0x03,0x20,0x00,0x1A,0x14,0x7A,0x29,\n    0x53,0xD4,0xFD,0x50,0xD9,0x40,0xD1,0xA0,0xD1,0x90,0xD3,0x40,0x06,0x80,0xD3,0x10,\n    0x62,0x03,0x11,0xA3,0x40,0x34,0x00,0x00,0x06,0x11,0x84,0x00,0x68,0x32,0x00,0x00,\n    0xD0,0x69,0x91,0xA0,0x00,0x68,0x64,0x32,0x34,0x00,0xD1,0xA0,0x34,0x01,0x90,0x03,\n    0x4D,0x03,0x4C,0x40,0x79,0x42,0x1E,0x95,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x2C,0x36,0x25,0xFB,0x1D,0x91,\n    0x81,0x86,0xCA,0xC5,0x66,0xB3,0xDA,0x18,0xD9,0x2D,0x36,0xA6,0x53,0xD4,0x20,0xA5,\n    0x15,0x49,0x26,0x56,0xBB,0x65,0xB6,0xDD,0x2D,0x71,0x66,0xB9,0x5C,0xD9,0xEE,0x97,\n    0x56,0x8B,0xB3,0x4D,0xDD,0xAA,0xF1,0x79,0x6B,0xBD,0x5E,0xEF,0x8D,0xD9,0xDC,0xF6,\n    0x7F,0x41,0xA1,0xD1,0x68,0xDB,0xF4,0x8E,0x0E,0x2E,0x4E,0x6E,0x6E,0xAE,0xDA,0x5D,\n    0x33,0xBE,0xA0,0xE3,0xCB,0xD6,0xAF,0x59,0xAD,0xD7,0x6C,0x36,0x5B,0x3D,0xA6,0xD5,\n    0xF5,0xF9,0xFE,0x02,0x06,0x0B,0x6D,0xB7,0x83,0x84,0xDC,0x6E,0x77,0x5B,0xB8,0x58,\n    0x78,0x3D,0xEF,0x06,0x23,0x85,0xC3,0xE2,0x1D,0x87,0x8A,0x8B,0x8C,0x88,0x39,0x24,\n    0x6B,0x93,0xC5,0x95,0x37,0xCA,0x8B,0x39,0xCB,0x05,0x52,0xE4,0x4C,0xCD,0x4D,0x92,\n    0x68,0x89,0xC9,0xD2,0xCD,0x9B,0x4B,0x3C,0x99,0x09,0x8A,0x14,0xAA,0x94,0x11,0x11,\n    0x11,0x11,0x15,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xDF,0x80,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x40,0x00,\n    0x19,0xD0,0x0D,0x93,0xCB,0x18,0xC6,0x31,0x9D,0xA0,0xCD,0x9F,0x31,0xB6,0xE0,0x00,\n    0x00,0x00,0x00,0x00,0x01,0x18,0x07,0x84,0xFC,0xC1,0x07,0x8F,0x1E,0x99,0x3E,0x7E,\n    0x68,0xFA,0x09,0xB2,0x08,0x25,0x0C,0xE1,0x48,0x10,0x20,0xE6,0xCE,0x92,0x49,0x24,\n    0xA1,0x3A,0x51,0x45,0x10,0x51,0x65,0x22,0x47,0xCE,0x2C,0xB2,0xD2,0x22,0x44,0x95,\n    0x1C,0xF2,0x64,0x89,0x13,0xF3,0xCC,0x50,0x9D,0x3A,0x75,0x2A,0x8C,0x30,0xC3,0x14,\n    0x29,0xE8,0x74,0x7A,0x5D,0x39,0xFE,0xA7,0x57,0xAD,0xD7,0xEC,0x76,0x68,0x28,0x7B,\n    0x5D,0xBE,0xE7,0x77,0xBD,0xDF,0xF0,0x78,0x7C,0x5E,0x3F,0x27,0x97,0xCD,0x45,0xE7,\n    0xF4,0x51,0xD2,0x7A,0x7D,0x5E,0xBF,0x67,0xB7,0xDD,0xEF,0xA5,0xA6,0xA7,0xA8,0xF8,\n    0x54,0xD5,0x55,0xD6,0x7C,0x7E,0x5F,0x3A,0xDA,0xEA,0xFB,0x0F,0xA7,0xD7,0xED,0xF7,\n    0xFC,0x7E,0x7F,0x5F,0xBF,0xE7,0xF6,0xC6,0xCA,0xCE,0xD3,0xFD,0x6B,0x6D,0x6F,0x71,\n    0x73,0x75,0x77,0xFF,0xBC,0xFF,0x7F,0x6B,0xE4,0xA3,0x17,0x2E,0x5D,0xB6,0x06,0x32,\n    0xD5,0xAB,0x56,0xC5,0x45,0x6A,0x56,0x2C,0x59,0xA7,0xD2,0xC3,0xC3,0xAB,0x56,0xAD,\n    0x5C,0x24,0x22,0x96,0x43,0xD4,0x11,0x11,0x11,0x12,0x49,0x93,0x1B,0x2A,0x95,0x04,\n    0x44,0x44,0x44,0x92,0x64,0x72,0x28,0xA0,0xA5,0x14,0x51,0x24,0xD3,0x48,0x90,0x40,\n    0xF5,0x08,0x20,0x82,0x2A,0x93,0x49,0x52,0x75,0xE7,0x2F,0x1C,0x72,0xF1,0xC7,0x30,\n    0x1E,0x7A,0xA4,0x52,0x61,0x4C,0x6B,0x63,0x4A,0xA4,0xD2,0xE9,0x0C,0x9A,0xCA,0x8A,\n    0xC5,0x7A,0x35,0x0D,0x92,0xEB,0xD1,0xD2,0x94,0xA5,0x29,0x4A,0xCB,0x84,0xB4,0xFF,\n    0x33,0x40,0x68,0xA4,0xB4,0x15,0x65,0x19,0x91,0x00,0x48,0x04,0x4B,0x10,0x35,0x19,\n    0x00,0x0C,0x11,0xA8,0x21,0x40,0xC0,0x33,0x33,0x0A,0x00,0x04,0x12,0x92,0xB1,0x9A,\n    0x96,0x32,0x20,0x09,0x00,0x89,0x62,0x06,0xA3,0x20,0x01,0x82,0x0A,0x09,0x51,0x98,\n    0x06,0x66,0x61,0x40,0x03,0xA1,0x21,0x09,0x4A,0x50,0x94,0xA1,0x0C,0xD8,0x41,0xE0,\n    0x19,0x9D,0xE0,0xC9,0x33,0x3B,0xA4,0x99,0x9D,0xD9,0xD9,0x24,0xCC,0xCC,0x92,0x66,\n    0x67,0x66,0x66,0x49,0x3A,0x40,0x92,0x3A,0x89,0x00,0x00,0x00,0x00,0x01,0x00,0x90,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x52,0x00,0xF9,\n    0x25,0xD9,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0A,0x20,0x00,0x10,\n    0x80,0x00,0x04,0x02,0x10,0x80,0x64,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\n    0x10,0xC2,0x70,0x64,0xC9,0x3A,0x1C,0x19,0xC4,0x03,0x09,0xD2,0x18,0x74,0xC9,0x92,\n    0x64,0x33,0x88,0x61,0x09,0x32,0x10,0xE0,0xCE,0x20,0x18,0x48,0x64,0x32,0x40,0x00,\n    0x20,0x01,0x08,0x43,0x09,0xC1,0x93,0x24,0xE8,0x70,0x67,0x10,0x0C,0x27,0x48,0x61,\n    0xD3,0x26,0x49,0x90,0xCE,0x21,0x84,0x24,0xC8,0x64,0x38,0x33,0x88,0x06,0x12,0x19,\n    0x0C,0x90,0x00,0x84,0x3B,0x33,0x3B,0x7F,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x0D,0x9A,\n    0x15,0x9A,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e9ac0fd0e4a2107ff841acb87e024cc369a40f0432270cb4f5f0b2cebeb6f3ea) == 963, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-2 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_fe44a04122094be4f9905c7c3f010b3742e857a3d1854ee69ba6dc701f92749d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xDD,0x1D,0xCD,0x59,0x00,0x05,\n    0x41,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9D,0x60,0x96,0xE5,0x0A,0x1A,0xAA,0x13,0x4C,0x4C,0x98,\n    0x11,0x91,0xFF,0xAA,0xA3,0x13,0x26,0x26,0x20,0xC8,0x32,0x69,0x80,0x8C,0x23,0x4C,\n    0x26,0x13,0x4C,0x9A,0x30,0x81,0x89,0x82,0x34,0x68,0xC8,0xC0,0x01,0x1A,0x32,0x69,\n    0x80,0x86,0x99,0x34,0xC1,0x31,0x01,0x84,0x69,0x81,0x34,0xD0,0xC4,0xC8,0x18,0x09,\n    0x91,0xA3,0x43,0x04,0x1A,0x69,0x81,0x30,0x00,0x55,0x55,0x40,0x26,0x4C,0x11,0x93,\n    0x4C,0x00,0xF5,0x00,0x4D,0x30,0x00,0x1A,0x06,0x93,0x68,0x26,0x00,0x04,0xC0,0xD0,\n    0x00,0x00,0x00,0x00,0x04,0xC0,0x00,0x04,0xC0,0x00,0x00,0x00,0x00,0x4C,0x00,0x09,\n    0x93,0x00,0x00,0x00,0x00,0x00,0x18,0x92,0x94,0xF2,0x83,0xD4,0x34,0x1A,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x80,0x00,0x00,0x06,0x80,0x00,\n    0x03,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x02,0x52,0x48,\n    0xD1,0x10,0x68,0x68,0x00,0x03,0xF5,0x46,0x40,0x68,0x00,0x34,0x00,0x34,0x03,0x43,\n    0x40,0x06,0x86,0x98,0x80,0x00,0x1A,0x00,0x00,0x1A,0x00,0x00,0x00,0x00,0x03,0x08,\n    0x19,0x34,0x06,0x83,0x46,0x80,0x00,0x00,0x68,0x0D,0x00,0x34,0x0D,0xFA,0xA4,0x94,\n    0xA2,0x2A,0xBE,0xC3,0x22,0x25,0x75,0x40,0x20,0xE0,0x52,0x0E,0x1C,0x8A,0x74,0x1D,\n    0x49,0x51,0x2B,0x25,0x84,0xB4,0x76,0x1C,0xCB,0x89,0x79,0x30,0x1D,0xC9,0x89,0xA5,\n    0x07,0xE1,0x00,0x69,0x86,0x9C,0x10,0xD4,0x0D,0x48,0x41,0x08,0x40,0xED,0x0C,0x6A,\n    0x82,0x20,0x45,0x1A,0xB0,0x8C,0x11,0xC2,0x40,0xD6,0x04,0x90,0x94,0x12,0xC6,0xB4,\n    0x6B,0x82,0x5B,0xF7,0x4C,0x13,0x14,0xC9,0x33,0x4D,0x13,0x54,0xD9,0x37,0x4E,0x13,\n    0x94,0xE9,0x3B,0x4F,0x13,0xD4,0xF9,0x04,0x9F,0xA8,0x0A,0x0A,0x84,0xA1,0xA0,0xD4,\n    0x48,0x58,0x32,0x8A,0x86,0xA1,0x14,0x64,0x22,0x8E,0xA4,0x29,0x2F,0xE5,0x4A,0x52,\n    0xD4,0xC5,0x35,0x4E,0x53,0xD5,0x05,0x45,0x52,0x54,0xD5,0x45,0x55,0x56,0x55,0xDF,\n    0xD2,0xB0,0xAC,0xDD,0xEB,0x6A,0xE2,0xBA,0x85,0x57,0x90,0x20,0x57,0xD6,0x05,0x85,\n    0x62,0x58,0xD6,0x45,0x95,0x66,0x59,0xD6,0x85,0xA5,0x6A,0x5A,0xD6,0xC5,0xB5,0x6E,\n    0x5B,0xD7,0x05,0xC5,0x72,0x5C,0xD7,0x45,0xD5,0x76,0x5D,0xD0,0x20,0x5E,0x17,0x95,\n    0xE9,0x7B,0x5F,0x17,0xD5,0xF9,0x7F,0x60,0x18,0x16,0x09,0x83,0x61,0x18,0x57,0xF6,\n    0xC3,0x30,0xEC,0x43,0x12,0xC5,0x31,0x6C,0x63,0x1A,0xC7,0x31,0xEC,0x83,0x22,0xC9,\n    0x32,0x6C,0xA3,0x2A,0xCB,0x32,0xEC,0xC3,0xFC,0x66,0x59,0xA6,0x6F,0x57,0x9D,0xD6,\n    0x67,0xF5,0xBA,0x1D,0x74,0xDF,0x8F,0xBA,0x3B,0xD4,0x3E,0x01,0xE1,0xA2,0x9D,0x13,\n    0xC2,0x7C,0x50,0x53,0x79,0x29,0xFC,0xA2,0x8A,0xA0,0x88,0x88,0x88,0x88,0x8A,0x90,\n    0x11,0x52,0x82,0x2A,0x61,0x4E,0x3C,0xC0,0x88,0x8A,0xA0,0x15,0xCD,0x48,0xF4,0x0F,\n    0x48,0xF5,0x0A,0xA1,0x56,0x2B,0x07,0xAC,0x56,0x8A,0xE1,0xEC,0x1E,0xD1,0xEE,0x1E,\n    0xF1,0xF0,0x15,0xE2,0xC0,0x58,0x8B,0x21,0x66,0x2D,0x05,0xA8,0xFF,0xFD,0xDD,0x1F,\n    0x7F,0x4D,0xD4,0x75,0x5D,0x67,0x5D,0xD8,0x76,0x7E,0xD0,0x52,0x8E,0xDB,0xB8,0xEE,\n    0xBB,0xCE,0xFB,0xC0,0xF0,0xBC,0x4F,0x1B,0xC8,0xF2,0xBC,0xCF,0x3B,0xD0,0xF4,0xBE,\n    0xC7,0xDC,0xFC,0x1F,0x92,0x48,0xFD,0x1F,0xB1,0xA6,0x9A,0x6B,0xF8,0x7F,0x4F,0xF1,\n    0x26,0x2C,0x94,0x28,0x0D,0x7A,0x90,0x44,0x49,0x35,0x09,0x88,0xF5,0x82,0x27,0x79,\n    0x40,0x84,0x80,0x09,0x24,0x12,0x48,0x04,0x92,0x2C,0xCC,0x94,0x2B,0x10,0x1C,0x81,\n    0x09,0x14,0x52,0x45,0x00,0xC9,0x90,0x49,0x20,0x02,0x44,0xA4,0x41,0x2E,0x78,0x1D,\n    0xF3,0x41,0x83,0xD0,0x88,0x00,0x02,0x07,0xC5,0x00,0x48,0x49,0x29,0x11,0x10,0x18,\n    0x50,0x0B,0x6E,0xB5,0xAD,0x6B,0x5B,0xA2,0xD6,0xEC,0xB5,0xB2,0xCB,0x2C,0xB2,0xCB,\n    0x22,0x00,0x86,0xB5,0x42,0x08,0x80,0x87,0xEF,0xDE,0xB8,0x80,0x07,0xD1,0x00,0x4B,\n    0x22,0x97,0xBD,0x06,0x40,0x82,0x08,0x48,0x00,0x52,0x01,0x20,0x90,0x48,0x46,0x60,\n    0x58,0x33,0x31,0x80,0x73,0x98,0x80,0xE0,0xE7,0x30,0x66,0x60,0xCC,0xC0,0x10,0xF8,\n    0x82,0x4B,0xC0,0x58,0x92,0xF4,0xC0,0xF1,0x3C,0x02,0x16,0x1C,0x09,0x7C,0x10,0x40,\n    0x12,0x20,0x18,0x11,0xDA,0xD4,0xB0,0x03,0x60,0x87,0x90,0x20,0x7B,0x88,0x14,0xFD,\n    0x87,0x7D,0x02,0x63,0xC1,0x03,0x1F,0x40,0xF2,0x90,0x22,0x34,0x81,0x7A,0x86,0xD9,\n    0x08,0xB7,0x89,0x87,0x21,0xF3,0x10,0x3A,0x08,0x02,0x63,0x1C,0xDD,0xCF,0x39,0xE0,\n    0x11,0x28,0xC6,0x02,0x65,0x3D,0x86,0x6C,0x0D,0xD4,0x71,0xD4,0x37,0x50,0x84,0x54,\n    0x43,0x00,0x3B,0xB8,0x60,0x75,0x50,0xD9,0xCB,0x76,0xC7,0x49,0x40,0x21,0x3B,0x04,\n    0x26,0x48,0x0B,0x00,0x48,0x27,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x21,0xBA,0x3B,0x9A,\n    0xB2\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fe44a04122094be4f9905c7c3f010b3742e857a3d1854ee69ba6dc701f92749d) == 849, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-4 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_f9656e81862f3f543eb2014b998f614b845e523d56448188ae90489b7c958c74[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xE6,0xAB,0x44,0xF9,0x00,0x05,\n    0xA2,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF4,0x51,0x31,0xC0,0x04,0x08,0xC8,0x31,0x32,0x1A,0x32,\n    0x03,0x4D,0x0C,0x83,0x23,0x10,0xD1,0xA6,0x43,0x46,0x21,0xA6,0x4D,0x01,0xA6,0x10,\n    0xC0,0x02,0x64,0x31,0x18,0x40,0x64,0x31,0x34,0xF5,0x30,0x3F,0xCA,0xA8,0xDA,0x6A,\n    0x7E,0xA9,0xF9,0x14,0xF2,0x69,0x3D,0x1E,0xA1,0xE4,0x24,0x68,0x62,0x18,0x41,0x89,\n    0x90,0x00,0x00,0xC8,0xC2,0x32,0x61,0x34,0xD0,0xC4,0xD3,0x41,0x94,0x8D,0x34,0x7B,\n    0xD2,0x49,0xB4,0x9E,0x43,0x13,0xCD,0x54,0x03,0x23,0x4D,0x01,0x91,0xA0,0x68,0x00,\n    0x64,0x64,0x0C,0x20,0x19,0x1A,0x60,0x43,0x6A,0x00,0xF5,0x32,0x0F,0x50,0x64,0x03,\n    0x6F,0x7A,0xAA,0x98,0xD4,0x00,0x64,0xD0,0x69,0x88,0x68,0xC4,0x68,0x68,0x0C,0x98,\n    0x81,0x82,0x64,0xD1,0xA0,0x03,0x40,0x34,0x01,0xA6,0x46,0x4D,0x08,0x99,0x1A,0x53,\n    0x6A,0x50,0x69,0xA0,0x34,0x19,0x06,0x80,0x1A,0x00,0x06,0x40,0xD1,0xA3,0x46,0x80,\n    0x00,0x68,0x32,0x69,0xA0,0x00,0x0C,0x8C,0x9A,0x68,0x0D,0x00,0x00,0x06,0x80,0x00,\n    0x00,0x00,0x00,0x0D,0x03,0x23,0x40,0xD1,0xA0,0x00,0x03,0x4D,0x00,0x00,0x7E,0xA0,\n    0xD4,0xFD,0x2A,0xA5,0x34,0x60,0x8C,0x00,0x04,0xC9,0x80,0x4C,0x00,0x00,0x46,0x13,\n    0x00,0x00,0x4C,0x00,0x00,0x00,0x09,0x80,0x46,0x13,0x13,0x11,0x80,0x00,0x00,0x01,\n    0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x62,0x34,0xC2,0x34,0xC0,0x4C,0xB1,0x58,\n    0xD8,0xEC,0x8C,0x96,0x5B,0x32,0x42,0x1E,0x95,0x96,0xCE,0xCC,0x99,0x9E,0xD0,0x9D,\n    0x43,0x43,0x4B,0x52,0x95,0x4A,0xDA,0xD0,0x44,0xB6,0x9B,0x57,0x2E,0xDB,0x6E,0xB7,\n    0xB6,0x36,0xDC,0x2E,0x2D,0xD7,0x26,0xFB,0x9D,0xD2,0xEB,0x76,0xBB,0xDE,0x1C,0x1C,\n    0x59,0xB4,0x7A,0x46,0x7D,0x2B,0x43,0x4E,0x9B,0x4F,0xA8,0x6A,0xD4,0xEA,0x9A,0xDA,\n    0xDB,0x75,0x7A,0xCD,0x6E,0xB9,0xBE,0x53,0x5F,0xB1,0xD9,0x6C,0xF6,0x9B,0x57,0x37,\n    0x57,0x6D,0xC6,0xE5,0xDD,0xE1,0xE5,0xE9,0xED,0xF1,0xF5,0xF9,0xFE,0x02,0x06,0x0B,\n    0x75,0x07,0x09,0xBC,0x7F,0x43,0x0D,0x11,0x15,0x07,0xC0,0xE1,0xC3,0x46,0xF1,0x8F,\n    0xCB,0x48,0xF2,0x8E,0x72,0xF8,0x32,0x72,0x92,0xB1,0x92,0xD2,0xFC,0xC4,0xE7,0x48,\n    0x26,0x64,0xFA,0x19,0x14,0x73,0x67,0x0E,0x17,0x3D,0x3F,0x40,0x78,0xD4,0xA9,0x91,\n    0x27,0x38,0x22,0x22,0x22,0x22,0x38,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,\n    0x11,0x11,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x02,0xC0,0x00,0x58,0x01,0x9E,0x1E,0x4C,0x63,0x18,0xD9,0x7D,0x21,0xA1,0x4C,\n    0x68,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x8D,0x09,0x80,0x3B,0x32,0x7B,0x9B,0xCE,\n    0x98,0x20,0xEF,0x3C,0x93,0xC5,0x46,0x1F,0x20,0x84,0x1D,0x04,0x28,0x89,0x24,0x92,\n    0x66,0x8A,0x28,0xA2,0x8F,0xA1,0x41,0x2A,0x42,0x04,0x68,0x26,0xFA,0x29,0x11,0x4E,\n    0x4D,0x4E,0xA3,0x2D,0x24,0xF2,0x49,0xF2,0xE8,0x0B,0x2C,0xC3,0x52,0xA6,0x30,0xC3,\n    0x0C,0x4E,0x69,0xA6,0x9A,0x95,0x35,0x0F,0x4B,0xA7,0x45,0xD4,0xEA,0xF5,0xA8,0xE9,\n    0x29,0x7A,0xFD,0x8E,0xCD,0x35,0x3D,0x45,0x4F,0x6B,0xB7,0xDC,0xEE,0xD5,0x55,0xD6,\n    0x77,0xAB,0x6B,0xBB,0xFE,0x0F,0x0F,0x8B,0xC7,0xE4,0xF2,0xF9,0xBC,0xFE,0x8F,0x4F,\n    0xAB,0xD7,0xEC,0xF6,0xFB,0xBD,0xFF,0x0F,0x8D,0x7D,0x87,0xCB,0xE7,0x63,0x65,0x67,\n    0x69,0xF4,0xFA,0xDA,0xDB,0x7D,0xAD,0xEE,0x2E,0x6E,0xBE,0xF7,0x7F,0x8B,0xCF,0xCF,\n    0xEB,0xF7,0x7B,0x7D,0x7F,0xFC,0xC0,0xFE,0xFF,0xAB,0xEC,0x38,0xFB,0x86,0x0C,0x18,\n    0x46,0xC6,0x45,0xC5,0xED,0xC2,0xF5,0xEB,0xD7,0xED,0x35,0x8B,0x97,0x2E,0xD5,0xEA,\n    0xB5,0x3A,0x88,0x78,0x65,0xAB,0x56,0xAD,0xD1,0xA8,0x4E,0xD4,0x52,0xA2,0xA5,0x02,\n    0xA5,0x45,0x04,0x4A,0x56,0x92,0xB4,0x14,0xA8,0xA9,0x40,0xAA,0x91,0x41,0x12,0x95,\n    0x8D,0x3B,0x5A,0xB5,0x4A,0x19,0xD9,0x93,0x26,0x3E,0xC0,0xE6,0x23,0x8E,0x62,0x38,\n    0xE2,0x10,0x87,0x9E,0x79,0x08,0x94,0xF2,0x24,0x22,0x42,0x11,0x23,0x1A,0x63,0x94,\n    0x21,0x08,0x42,0x10,0xC6,0x34,0xC6,0x31,0x8D,0x39,0x72,0xE5,0x64,0x97,0x02,0x95,\n    0x11,0x13,0x7F,0xC6,0xC0,0x88,0x7F,0xA3,0xFF,0x4A,0x9B,0xA2,0x28,0x5B,0x15,0xA4,\n    0xC8,0x12,0xA1,0x34,0xB6,0x6A,0x31,0x31,0x30,0x11,0x21,0x02,0x40,0x8A,0xC8,0xC9,\n    0x46,0x60,0x68,0x68,0x4D,0x4B,0x05,0xAD,0x42,0xA1,0x34,0x99,0x02,0x54,0x26,0x97,\n    0x06,0xA3,0x01,0x31,0x30,0x11,0x21,0x02,0x06,0x84,0x85,0xC1,0x2C,0x8D,0x66,0x0C,\n    0x00,0x42,0x10,0x08,0x40,0x04,0x52,0x22,0x25,0x10,0xA1,0x08,0x7C,0x6D,0xA8,0x42,\n    0x0D,0xB8,0x28,0x42,0x09,0x36,0xD4,0x13,0x6E,0x09,0x41,0x24,0x9B,0x70,0x82,0x6D,\n    0xA4,0xDB,0x83,0x6D,0x3E,0x84,0x43,0x00,0x00,0x00,0x00,0x02,0x21,0xB0,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE8,0xB6,0x01,0xE7,0x6F,0xAA,\n    0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x48,0x60,0x00,0x31,0x80,0x00,\n    0x0C,0x06,0x31,0x80,0x9B,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x62,0x1A,\n    0x40,0x09,0xA6,0xD8,0x82,0x10,0x13,0x69,0xA6,0xD0,0x41,0xA6,0xD9,0x01,0x36,0x9A,\n    0x12,0x62,0x6C,0x42,0x1B,0x6D,0x02,0x48,0x60,0x02,0x13,0x6C,0x00,0x06,0x31,0x80,\n    0xC4,0x38,0x20,0x83,0x4D,0xB1,0x04,0x20,0x26,0xD3,0x4D,0xA0,0x83,0x4D,0xA6,0x88,\n    0x09,0xB4,0xD0,0x93,0x13,0x62,0x10,0xD8,0xC4,0x09,0x21,0x80,0x08,0x4D,0xB0,0x00,\n    0x02,0x10,0x84,0x12,0xF8,0x0B,0xB9,0x22,0x9C,0x28,0x48,0x73,0x55,0xA2,0x7C,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f9656e81862f3f543eb2014b998f614b845e523d56448188ae90489b7c958c74) == 976, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.ISO8859-4 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_692eb6578988cc74674a10ee03635d76f87f8fbc757e0fe5d2574f74257bd03b[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD9,0x1F,0x78,0x38,0x00,0x05,\n    0x42,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9B,0x03,0x4C,0x74,0x02,0xAA,0x01,0x32,0x60,0x98,0x26,\n    0x9F,0xEA,0x80,0x00,0x00,0x26,0x04,0x60,0x00,0x04,0xC0,0x00,0x8C,0x00,0x00,0x10,\n    0x60,0x04,0xC2,0x60,0x09,0x93,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x02,0x60,\n    0x4D,0x1A,0x60,0x8C,0x00,0x4D,0x18,0x09,0x80,0x55,0x55,0x40,0x4C,0x04,0xC0,0x06,\n    0x80,0xF5,0x34,0x0D,0x00,0x00,0x02,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x46,\n    0x98,0x00,0x26,0x98,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x1A,0x99,\n    0x0C,0x00,0x00,0x13,0x4C,0x12,0x25,0x24,0xCA,0x69,0x94,0xD3,0xC2,0x69,0x1A,0x69,\n    0xA0,0xDE,0xA9,0xA3,0x4C,0x46,0x13,0x4C,0x46,0x20,0x0D,0x0C,0x23,0x4C,0x99,0x32,\n    0x30,0x04,0xD1,0x90,0xC1,0x30,0x8C,0x20,0x00,0x00,0x34,0xC8,0xC2,0x0C,0x02,0x64,\n    0xC8,0xD0,0x60,0x99,0x0C,0x02,0x62,0x01,0x82,0x0D,0x06,0x9E,0xA0,0x0D,0x07,0xA9,\n    0xEA,0x7A,0x81,0xEA,0x68,0x54,0x90,0xF5,0x1A,0x09,0x80,0x09,0xA3,0x09,0x80,0x00,\n    0x41,0x90,0xC0,0x13,0x09,0x82,0x60,0x00,0x01,0x06,0x13,0x04,0x18,0x10,0xC0,0x4C,\n    0x13,0x26,0x4D,0x32,0x60,0x98,0x98,0x00,0x00,0x00,0x13,0x4C,0x09,0x80,0x26,0x08,\n    0xD3,0x09,0x81,0x30,0x04,0xD1,0x80,0x7E,0xAA,0x6E,0x07,0x1E,0xED,0xB1,0x38,0x25,\n    0xCE,0x30,0x11,0x2C,0x68,0x97,0x30,0x75,0x42,0x74,0xAA,0x93,0xC4,0xF9,0xC1,0x15,\n    0x62,0x67,0x06,0x50,0x14,0x25,0x11,0x46,0x47,0x91,0xF4,0x81,0x21,0x48,0x92,0x34,\n    0x12,0x48,0x92,0xA4,0xC8,0xCC,0x9D,0x28,0x4A,0x50,0x12,0xA4,0x1A,0x56,0x96,0x25,\n    0xA9,0x72,0x5E,0x84,0x4C,0x13,0x14,0x22,0x64,0x99,0xA6,0x89,0xAA,0x6C,0x9B,0xA7,\n    0x09,0xCA,0x74,0x9D,0xA7,0x89,0xEA,0x7C,0x9F,0xA8,0x0A,0x0A,0x84,0xA1,0xA8,0x8F,\n    0xC9,0x45,0x51,0x94,0x75,0x22,0xCD,0x47,0x29,0x48,0x6A,0x96,0xA6,0x29,0x6A,0x6A,\n    0x9C,0xA7,0xAA,0x0A,0x8A,0xA4,0xA9,0xAA,0x8A,0xAA,0xAC,0xAB,0xAB,0x0A,0xCA,0xB4,\n    0xAD,0xAB,0x8A,0xEA,0xBC,0xAF,0xAC,0x0B,0x0E,0x02,0xC6,0xB2,0x2C,0xAB,0x32,0xCE,\n    0x81,0x02,0xD0,0xB4,0xAD,0x4B,0x5A,0xD8,0xB6,0xAD,0xCB,0x7A,0xE0,0xB8,0xAE,0x4B,\n    0x9A,0xE8,0xBA,0xAE,0xCB,0xBA,0xF0,0xBC,0xAF,0x4B,0xDA,0xF8,0xBE,0xAF,0xCB,0xFB,\n    0x00,0x81,0x03,0x02,0xC1,0x3F,0x37,0xE8,0xC1,0xBF,0x56,0x11,0x85,0x61,0x98,0x76,\n    0x21,0x89,0x62,0x98,0xB6,0x31,0x8D,0x63,0x98,0xF6,0x41,0xFB,0x32,0x2F,0xDD,0x92,\n    0x64,0xD9,0x46,0x55,0xFC,0x32,0xCC,0xBB,0x30,0xCC,0xB3,0x4C,0xDB,0x38,0xCE,0xB3,\n    0xCC,0xFB,0x41,0xB0,0xD1,0x6C,0x74,0x9B,0x2D,0x36,0xCE,0x92,0xC2,0x98,0x14,0xF6,\n    0x55,0x20,0xAA,0xB4,0xAC,0x05,0x68,0x2B,0x81,0x5F,0x71,0x63,0x73,0x67,0x75,0x6A,\n    0x00,0x84,0x21,0x08,0x42,0x10,0x86,0xD8,0x01,0x0D,0xB8,0x02,0x1B,0x80,0x5C,0x82,\n    0xE8,0x01,0xF1,0xC8,0xB7,0xF0,0x52,0x38,0x28,0x5E,0x0B,0x84,0xE1,0xB8,0x8E,0x2B,\n    0x8C,0xE3,0xB9,0x0E,0x4B,0x94,0xE5,0xB9,0x8E,0x6B,0x9C,0xE7,0xBA,0x0E,0x8B,0xA4,\n    0xE9,0xBA,0x8E,0xAB,0xAC,0xEB,0xFC,0x3B,0x1F,0x1E,0xD3,0xB6,0xEE,0x3B,0xA8,0x57,\n    0xF4,0xEF,0x7D,0xA5,0xB0,0x7F,0xDB,0xFC,0x7F,0xAF,0x03,0xC2,0xF1,0x3C,0x6F,0x23,\n    0xCA,0xF3,0x3C,0xEF,0x43,0xD2,0xF5,0x3D,0x6A,0x63,0xF7,0x29,0xCF,0xE0,0xA8,0x3F,\n    0x93,0xFA,0x26,0xCD,0x9B,0x37,0xFB,0x3F,0xC3,0xFD,0x2A,0x4F,0xF8,0xE0,0x15,0xC9,\n    0xB4,0xA8,0x49,0x54,0xB1,0x7D,0x81,0xBC,0xEC,0x20,0x12,0x86,0x00,0xDD,0x43,0x20,\n    0x64,0x8C,0x81,0xA6,0x38,0x88,0xCE,0x42,0x09,0x18,0x86,0xD3,0x1B,0x69,0xC4,0x42,\n    0x91,0xA8,0x60,0x36,0x93,0x68,0x4A,0x27,0x09,0x29,0xD9,0x04,0xC1,0x89,0x00,0x82,\n    0x99,0xA0,0x40,0x06,0x8C,0x10,0x02,0x08,0x00,0x0E,0x0C,0x00,0x00,0x11,0xE0,0x84,\n    0x21,0x08,0x46,0x84,0x24,0xA1,0x08,0xA2,0x8A,0x28,0xA2,0x8A,0x01,0x00,0x00,0x08,\n    0x09,0x41,0x80,0x10,0x02,0x08,0x04,0x4F,0xCF,0xCB,0x91,0x00,0x53,0xB0,0x4A,0x1A,\n    0x6F,0xF4,0x64,0x31,0x08,0x43,0x60,0x26,0xC1,0xB1,0xB2,0x54,0x41,0x57,0xA4,0x82,\n    0x22,0x15,0x04,0x92,0x42,0x09,0x09,0x24,0x82,0x22,0x08,0x88,0x04,0x4E,0x09,0x25,\n    0x28,0x50,0x92,0x96,0xA9,0x35,0xFB,0xD3,0x37,0x38,0x25,0x30,0x63,0x48,0x45,0x04,\n    0x08,0xF8,0xB4,0x10,0x07,0xA0,0xC5,0x4A,0x33,0xE4,0x62,0x73,0xF0,0x7C,0xCC,0x4B,\n    0x86,0x18,0xAB,0x4C,0x5E,0xD3,0x11,0x58,0x62,0x96,0xCF,0x55,0x94,0x3F,0x4C,0x1B,\n    0x39,0x90,0x83,0xDD,0x60,0x95,0x1E,0xDF,0x51,0xED,0xCA,0x09,0xEF,0x5E,0x02,0xAF,\n    0xC4,0xFA,0x52,0x04,0xA6,0x6B,0x19,0x29,0x88,0xF5,0xBD,0x48,0x02,0x8A,0x5C,0x13,\n    0xAC,0x92,0x64,0xA9,0x0D,0xB3,0x01,0x15,0xB4,0x84,0xB8,0xA1,0x40,0x24,0x25,0xFF,\n    0x8B,0xB9,0x22,0x9C,0x28,0x48,0x6C,0x8F,0xBC,0x1C,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_692eb6578988cc74674a10ee03635d76f87f8fbc757e0fe5d2574f74257bd03b) == 859, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.US-ASCII LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_80f415ceded4644b28aacecf1032cc9b2b686c4f7b20b047d5541bcd8479ee53[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x52,0x4F,0x67,0xA7,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xC0,0x83,0x80,0x02,0x4C,0x00,0x13,0x00,0x01,0x30,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x46,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xEA,0xAA,0xA0,\n    0x93,0x00,0x04,0xC0,0x00,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x3B,0x7F,0xEA,0xA5,0x50,0x26,0x00,0x01,0x31,0x32,0x60,0x4C,0x13,0x26,\n    0x86,0x00,0x08,0xD3,0x4C,0x13,0x46,0x00,0x26,0x09,0x88,0xC8,0xC0,0x8C,0x13,0x00,\n    0x98,0x4C,0x99,0x34,0x32,0x03,0x4C,0x01,0x30,0x00,0x00,0x4C,0x04,0xD3,0x23,0x23,\n    0x41,0xA3,0x11,0x88,0x0C,0x26,0x9A,0x61,0x18,0x04,0xDF,0xAA,0x69,0xF8,0x02,0x04,\n    0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x19,0xFE,0x0D,0x0E,0x0F,0x10,0x11,\n    0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0xFF,0x8E,0x0E,0x8F,0x0F,0x90,\n    0x10,0x91,0x11,0x92,0x12,0x93,0x13,0x94,0x14,0x95,0x15,0x96,0x16,0x97,0x17,0x98,\n    0x18,0x99,0x19,0x9A,0x1A,0x9B,0x1B,0x9C,0x1C,0x9D,0x1D,0x9E,0x1E,0x9F,0x1F,0xA0,\n    0x20,0xA1,0x21,0xA2,0x22,0xA3,0x23,0xA4,0x24,0xA5,0x25,0xA6,0x26,0xA7,0x27,0xA8,\n    0x28,0xA9,0x29,0xAA,0x2A,0xAB,0x2B,0xAC,0x2C,0xAD,0x2D,0xAE,0x2E,0xAF,0x2F,0xB0,\n    0x30,0xB1,0x31,0xB2,0x32,0xB3,0x33,0xB4,0x34,0xB5,0x35,0xB6,0x36,0xB7,0x37,0xB8,\n    0x38,0xB9,0x39,0xBA,0x3A,0xBB,0x3B,0xBC,0x3C,0xBD,0x3D,0xBE,0x3E,0xBF,0x3F,0xC0,\n    0x40,0xC1,0x41,0xC2,0x42,0xC3,0x43,0xC4,0x44,0xC5,0x45,0xC6,0x46,0xC7,0x47,0xC8,\n    0x48,0xC9,0x49,0xCA,0x4A,0xCB,0x4B,0xCC,0x4C,0xCD,0x4D,0xCE,0x4E,0xCF,0x4F,0xD0,\n    0x50,0xD1,0x51,0xD2,0x52,0xD3,0x53,0xD4,0x54,0xD5,0x55,0xD6,0x56,0xD7,0x57,0xD8,\n    0x58,0xD9,0x59,0xDA,0x5A,0xDB,0x5B,0xDC,0x5C,0xDD,0x5D,0xDE,0x5E,0xDF,0x5F,0xE0,\n    0x60,0xE1,0x61,0xE2,0x62,0xE3,0x63,0xE4,0x64,0xE5,0x65,0xE6,0x66,0xE7,0x67,0xE8,\n    0x68,0xE9,0x69,0xEA,0x6A,0xEB,0x6B,0xEC,0x6C,0xED,0x6D,0xEE,0x6E,0xEF,0x6F,0xF0,\n    0x70,0xF1,0x71,0xF2,0x72,0xF3,0x73,0xF4,0x74,0xF5,0x75,0xF6,0x76,0xF7,0x77,0xF8,\n    0x78,0xF9,0x79,0xFA,0x7A,0xFB,0x7B,0xFE,0xBF,0x6F,0xE7,0xF7,0xE6,0x00,0x84,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0xC7,0x1C,0x71,\n    0xC7,0x1C,0x71,0xC7,0x1F,0x71,0x25,0x14,0x52,0x24,0x48,0x91,0x22,0x44,0x88,0xBB,\n    0x3F,0xFF,0x6E,0x4A,0x4A,0x12,0x88,0x42,0x12,0x22,0x8A,0x28,0xA2,0x8A,0x10,0x21,\n    0x14,0x51,0x45,0x14,0x51,0x42,0x10,0x84,0x08,0x42,0x0F,0xC2,0x10,0x00,0x00,0x04,\n    0x9A,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x61,0x00,0xFF,0x61,0x0F,0xCA,0x10,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0xEE,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x29,0x27,0xB3,0xD3,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_80f415ceded4644b28aacecf1032cc9b2b686c4f7b20b047d5541bcd8479ee53) == 639, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed la_LN.US-ASCII LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_807402b05baef7fc0fc949c9b199d05a375b4b7a4fb04360730ffafa10898daa[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5F,0x99,0xA4,0x70,0x00,0x04,\n    0x56,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x5D,0x00,0x4E,0x80,0x2A,0xAA,0xA0,0x00,0x4C,0x4C,0x00,\n    0x8C,0xC8,0x06,0x80,0x00,0x26,0x13,0x34,0x01,0xA0,0x00,0x00,0x34,0x00,0x00,0x4C,\n    0x4C,0xD1,0x34,0xC0,0x00,0x00,0x09,0x80,0x00,0x00,0x00,0x00,0x00,0x4C,0x01,0x30,\n    0x00,0x00,0x00,0x8C,0x09,0x82,0x4C,0x00,0x13,0x00,0x01,0x30,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA5,0x41,0xEA,0x00,0x13,0x13,0x00,0x43,\n    0x13,0x13,0x00,0x08,0xC1,0x32,0x69,0xA3,0x4C,0x46,0x02,0x61,0x30,0x00,0x8C,0x20,\n    0x60,0x02,0x68,0xC4,0x64,0xD1,0x81,0x30,0x01,0x30,0x00,0x00,0x00,0x00,0x01,0x30,\n    0x09,0x93,0x01,0x1A,0x60,0x13,0x4C,0x99,0x30,0x4D,0x34,0x6F,0xD5,0x40,0x94,0x29,\n    0x43,0x49,0x81,0x0C,0x40,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x03,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x06,0x80,0x00,0x00,0x00,0x03,\n    0x40,0x00,0x06,0x8D,0x0C,0x4D,0x23,0x62,0xD6,0xA8,0xCE,0xF3,0x4A,0x73,0x22,0x20,\n    0xE8,0x50,0x74,0xF2,0x47,0x07,0xA1,0xC7,0xB1,0xF0,0x7D,0x1F,0x87,0xF1,0xDE,0x3A,\n    0x47,0x88,0xF9,0x00,0x40,0x90,0x44,0x81,0x23,0x49,0x12,0x54,0x99,0x27,0x7E,0x4F,\n    0xCD,0x1B,0x94,0x25,0x28,0x04,0x0A,0x54,0x95,0xA5,0x89,0x6A,0x5C,0x97,0xA6,0x08,\n    0x24,0xC5,0x32,0x4C,0xD0,0x49,0xA2,0x6A,0x9B,0x26,0xE9,0xC2,0x72,0x9D,0x27,0x69,\n    0xE2,0x7A,0x9F,0x27,0xEA,0x03,0xF4,0x50,0x54,0x25,0x0D,0x44,0x7E,0xAA,0x2A,0x8C,\n    0x83,0x51,0xD4,0x88,0x58,0x32,0x94,0x87,0xA9,0x6A,0x62,0x9A,0xA7,0x21,0x14,0xF4,\n    0x22,0xA0,0xA8,0xAA,0x4A,0x9A,0xA8,0xAA,0xAA,0xCA,0xBA,0xB0,0xAC,0xAB,0x4A,0xDA,\n    0xB8,0xAE,0xAB,0xCA,0xFA,0xC1,0x0D,0x62,0x58,0xD6,0x44,0x2A,0xCA,0x81,0x81,0xB3,\n    0x2C,0xEB,0x42,0xD2,0xB5,0x2D,0x6B,0x62,0xDA,0xB7,0x2D,0xEB,0x82,0xE2,0xB9,0x2E,\n    0x6B,0xA2,0xEA,0xBB,0x3F,0x65,0xDD,0x78,0x5E,0x5F,0xBA,0xF4,0xBD,0xA1,0x90,0x10,\n    0x37,0xC5,0xF5,0xFC,0x2F,0xCF,0xE5,0x7F,0x60,0x18,0x16,0x09,0x83,0x61,0x18,0x56,\n    0x19,0x87,0x62,0x18,0x96,0x29,0x8B,0x63,0x18,0xD6,0x39,0x8F,0x64,0x19,0x16,0x49,\n    0x93,0x65,0x19,0x56,0x59,0x97,0x66,0x1F,0xD3,0x32,0xCD,0x33,0x6C,0xE3,0x3A,0xCF,\n    0x33,0xED,0x03,0x42,0xD1,0x34,0x6D,0x23,0x4A,0xD3,0x34,0xED,0x43,0x52,0xD5,0x35,\n    0x6D,0x63,0x5A,0xD7,0x35,0xED,0x83,0x62,0xD9,0x36,0x6D,0xA3,0x6A,0xDB,0x36,0xED,\n    0xC3,0x72,0xDD,0x37,0x6D,0xE3,0x7A,0xDF,0x37,0xEE,0x03,0x82,0xE1,0x38,0x6E,0x23,\n    0x8A,0xE3,0x38,0xEE,0x43,0xFB,0x72,0x5C,0xA7,0x2D,0xCC,0x73,0x5C,0xE7,0x3D,0xD0,\n    0x74,0x5F,0xE3,0xA4,0xE9,0xBA,0x8E,0xAB,0xAC,0xEB,0xBB,0x0E,0xCB,0xB4,0xED,0xBB,\n    0x8E,0xEB,0xBC,0xEF,0xBC,0x0F,0x0B,0xC4,0xF1,0xBC,0x8F,0x2B,0xCC,0xF3,0xBD,0x0F,\n    0x4B,0xD4,0xF5,0xBD,0x87,0xE0,0x88,0x3F,0x27,0xE8,0x89,0x3F,0x67,0xF0,0xFE,0x91,\n    0x44,0x39,0x16,0x45,0x11,0x87,0xF8,0x8D,0x1D,0xD0,0x44,0x8C,0x54,0x3D,0x88,0x81,\n    0xDF,0x45,0xD6,0x32,0x06,0x0D,0x40,0x15,0x10,0x1D,0x86,0x88,0x51,0x91,0xE1,0x50,\n    0x44,0x40,0x0F,0xBA,0x80,0x11,0x2A,0x82,0x03,0x28,0x01,0x0F,0x88,0x42,0x10,0x84,\n    0x44,0x21,0x14,0x08,0x43,0x0C,0x30,0xC3,0x0C,0x30,0x02,0x00,0x00,0x20,0xA3,0x1C,\n    0x00,0x02,0x10,0x80,0x20,0x26,0x24,0x20,0x1E,0x00,0x40,0x5A,0x38,0x10,0x83,0x2A,\n    0x2A,0xFD,0x14,0x65,0x10,0x40,0x55,0x01,0x15,0x41,0x54,0x55,0x15,0x47,0x20,0x58,\n    0x66,0x64,0x7E,0x71,0xC6,0x40,0x70,0x71,0xC6,0x19,0x98,0x66,0x60,0x41,0xFC,0x10,\n    0x57,0x61,0x14,0x44,0x78,0x4F,0x96,0xA4,0xE8,0x3B,0x08,0xFE,0xA0,0x3A,0x51,0x51,\n    0x11,0x14,0x43,0x8E,0xA0,0x6E,0x14,0x11,0xE5,0x44,0x07,0xD5,0x21,0xFD,0x4C,0x12,\n    0x15,0x07,0x42,0x88,0x3D,0x28,0xBD,0x81,0x80,0x80,0x54,0x13,0x93,0xDA,0x20,0x9C,\n    0x07,0xC5,0x01,0x3A,0x3C,0x06,0x3C,0x6A,0x6E,0x77,0xCC,0x1B,0xCD,0xDB,0x04,0x32,\n    0x84,0x2C,0x33,0x08,0xE3,0xDB,0x04,0x2A,0x8E,0x94,0x48,0x35,0x07,0xC7,0xA8,0x17,\n    0x0E,0x72,0x80,0x84,0x18,0x21,0x27,0x11,0x84,0x44,0x11,0x3F,0xE2,0xEE,0x48,0xA7,\n    0x0A,0x12,0x0B,0xF3,0x34,0x8E,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_807402b05baef7fc0fc949c9b199d05a375b4b7a4fb04360730ffafa10898daa) == 775, \"Wrong size of locale's blob\");\n\n/* lt_LT.ISO8859-13 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_cf14ef208ba01df59bf65bc5f63d3d5bd6d7e06398f5edeeabf5ac52a9427455[] = {\n    0x5E,0x5B,0x74,0x54,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x74,0x61,0x69,0x70,0x0A,0x6E,0x65,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cf14ef208ba01df59bf65bc5f63d3d5bd6d7e06398f5edeeabf5ac52a9427455) == 26, \"Wrong size of locale's blob\");\n\n/* lt_LT.ISO8859-13 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_23971c491515b02abeb5309807b70859dcea0e3ae550bc4dd62c8ce81c039f72[] = {\n    0x4C,0x54,0x4C,0x20,0x0A,0x4C,0x74,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_23971c491515b02abeb5309807b70859dcea0e3ae550bc4dd62c8ce81c039f72) == 35, \"Wrong size of locale's blob\");\n\n/* lt_LT.ISO8859-13 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_abaaedfb90acf9df5aa113cd2480412dc5a6590c502d9973038d86496c516a20[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_abaaedfb90acf9df5aa113cd2480412dc5a6590c502d9973038d86496c516a20) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lt_LT.ISO8859-13 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_879f7eeafb653a5daddcc4b6d6bfe53057dd6b9b6b2da57a898d60b7d9725f8c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xBE,0x78,0xAE,0xBE,0x00,0x00,\n    0x39,0xDF,0x83,0x80,0x10,0x42,0x05,0x00,0x10,0x30,0xCE,0x5D,0x70,0x36,0xBF,0xDF,\n    0x00,0x40,0x00,0x00,0x48,0x40,0x09,0x30,0x01,0x18,0x65,0x18,0x68,0x64,0x34,0xC9,\n    0xA0,0x18,0x86,0x9A,0x68,0xD0,0xD1,0x82,0x54,0x4F,0x4A,0x7A,0x9B,0x14,0x0F,0x53,\n    0x6A,0x34,0xD3,0x7A,0x93,0x40,0x06,0x80,0x94,0xD2,0x53,0x14,0xCD,0xA5,0x36,0x28,\n    0x7A,0x65,0x37,0xA9,0x36,0xA7,0xB5,0x32,0x4D,0x1A,0x7B,0x2E,0x4A,0x77,0xC2,0x70,\n    0xDA,0x59,0xF6,0xDC,0x51,0x24,0xE6,0xBA,0x67,0x4C,0x77,0x6B,0x4E,0xAB,0x65,0x05,\n    0xE1,0x3A,0x49,0x24,0x92,0xAD,0x0F,0xC6,0x6F,0x04,0x8A,0xB0,0x23,0x3E,0x5A,0x70,\n    0xED,0x2A,0x71,0xBB,0x25,0xCC,0x70,0x74,0x95,0x68,0x52,0xEF,0x7A,0xAB,0xAE,0x9D,\n    0x77,0x89,0x02,0x4C,0x24,0x32,0x40,0x93,0x26,0x32,0x16,0x55,0x6C,0xEF,0x27,0xB6,\n    0xE2,0xA3,0xA1,0x34,0x64,0x6D,0xF6,0xDA,0x40,0xB3,0xD4,0x2C,0x7B,0x3E,0x31,0x66,\n    0x97,0x41,0x5F,0x49,0x39,0x91,0xF2,0x50,0xCD,0xB2,0x36,0x8F,0x8C,0xED,0x3F,0x3B,\n    0x8E,0x3B,0x90,0x3F,0x71,0xCD,0x9B,0x22,0xC1,0xD1,0x42,0xAB,0x57,0x5D,0xCA,0x6F,\n    0x19,0x1C,0x23,0x11,0x13,0x28,0xBD,0xE7,0xC3,0x12,0xD9,0xD0,0x41,0xEA,0xC4,0x06,\n    0xB9,0xAD,0xC1,0x61,0x93,0xFB,0xD9,0x59,0x58,0x08,0xB4,0x68,0xCD,0x8D,0xB8,0xD4,\n    0xB2,0x21,0x84,0xE5,0x60,0x83,0x84,0xD3,0xEA,0x5B,0xB1,0x47,0x91,0x33,0x13,0x08,\n    0x0E,0xC6,0xE4,0x3A,0x7C,0x1C,0x6C,0xD0,0x40,0xA0,0xB4,0x45,0x27,0x1C,0xFF,0xB0,\n    0xAF,0x7F,0x9F,0x9B,0xE3,0x48,0xC8,0xE0,0x58,0x44,0xBA,0xAA,0x87,0xC2,0x1C,0xE8,\n    0x35,0xD6,0x92,0x14,0xDA,0x7F,0x17,0x72,0x45,0x38,0x50,0x90,0xBE,0x78,0xAE,0xBE\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_879f7eeafb653a5daddcc4b6d6bfe53057dd6b9b6b2da57a898d60b7d9725f8c) == 304, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lt_LT.ISO8859-4 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_9e06151e9475a88890a14006c13b13f35489551310014e4b9101b49cab338b45[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xBB,0x47,0xB5,0x40,0x00,0x05,\n    0xA2,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF4,0x51,0x31,0xC0,0x04,0x9A,0x32,0x68,0xD3,0x23,0x26,\n    0x8D,0x34,0x62,0x00,0x1A,0x18,0x8C,0x23,0x4D,0x34,0x1A,0x1A,0x1A,0x1A,0x06,0x26,\n    0x9A,0x68,0xC8,0x34,0xC0,0x8C,0x13,0x13,0x09,0x93,0x40,0x66,0x93,0xD0,0xFF,0x2A,\n    0x8D,0x34,0xC4,0xF4,0xD4,0x65,0x36,0x4D,0x0F,0x53,0xD0,0xA6,0x98,0x08,0x69,0x90,\n    0xC2,0x68,0xC1,0x03,0x23,0x13,0x26,0x13,0x46,0x26,0x80,0x00,0x06,0x50,0x4D,0x1E,\n    0xF4,0x92,0x6D,0x19,0x34,0xC8,0xF3,0x55,0x1A,0x03,0x40,0x31,0x34,0xC4,0x00,0xD3,\n    0x20,0xD3,0x46,0x99,0x00,0x68,0x62,0x69,0xA6,0x83,0x02,0x61,0xA9,0x90,0xCD,0x40,\n    0x1A,0x64,0xF5,0x3F,0xDE,0xAA,0x93,0x35,0x1A,0x32,0x06,0x81,0xA0,0x0D,0x34,0x68,\n    0xD1,0xA6,0x9A,0x01,0xA0,0x34,0x00,0x69,0xA0,0x34,0x68,0x03,0x43,0x23,0x46,0x86,\n    0x42,0x26,0x93,0x69,0x4D,0xA9,0x40,0x1A,0x18,0x8D,0x00,0x34,0xC8,0x34,0x19,0x34,\n    0xD3,0x41,0xA3,0x40,0x03,0x40,0xD0,0x00,0xC9,0xA6,0x8C,0x43,0x43,0x40,0x06,0x8C,\n    0x83,0x40,0xD1,0x90,0x64,0x1A,0x34,0xC8,0x0D,0x32,0x00,0x61,0x34,0x68,0x03,0x40,\n    0x0D,0x00,0xD0,0xD0,0x1A,0x68,0x1A,0x00,0x64,0x06,0x9F,0xAA,0x0D,0x4F,0xD2,0xAA,\n    0x53,0x46,0x08,0xC0,0x00,0x4C,0x98,0x04,0xC0,0x00,0x04,0x61,0x30,0x00,0x04,0xC0,\n    0x00,0x00,0x00,0x98,0x04,0x61,0x31,0x31,0x18,0x00,0x00,0x00,0x11,0x80,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x46,0x23,0x4C,0x23,0x4C,0x04,0xC6,0x16,0x26,0x3B,0x23,0x25,\n    0x96,0xCC,0x90,0x87,0xA5,0x65,0xB3,0xB3,0x26,0x67,0x68,0x4E,0xA1,0xA5,0x4B,0x52,\n    0xA5,0x6D,0x6D,0x88,0x22,0x5B,0x45,0xA6,0x7A,0xD7,0x6C,0xB6,0xDB,0xAD,0xED,0xD7,\n    0x0B,0x8D,0xCA,0xE7,0x74,0xBA,0xDD,0x9B,0xDC,0x1C,0x6E,0xEE,0x4C,0xAC,0xDA,0x8D,\n    0x4B,0x3E,0xA9,0xA3,0x56,0xD3,0xAC,0xD6,0xEB,0xB5,0xED,0x4D,0x5B,0x1D,0x93,0x5E,\n    0xCF,0x6A,0xD8,0x67,0x6F,0xB9,0xDD,0x6E,0xF7,0x9B,0xD7,0x07,0x1D,0xFF,0x01,0xCF,\n    0x83,0xC2,0x74,0x75,0xE1,0xF1,0x38,0xBC,0x67,0x6E,0x3B,0xBB,0xC3,0xCB,0xD3,0xDF,\n    0x21,0xD9,0x03,0xF7,0x2A,0x0D,0xEA,0x32,0x1B,0x98,0xFF,0x17,0xCE,0x26,0x42,0x34,\n    0xC4,0x5C,0x2F,0x50,0xCC,0x7C,0x4C,0x84,0x8C,0x92,0x79,0x43,0xB2,0xC6,0xCA,0x97,\n    0x43,0x18,0x89,0x19,0x83,0x13,0xA5,0x4C,0xCA,0x96,0x95,0x32,0x04,0xF1,0xA2,0x22,\n    0x22,0x22,0x23,0x8E,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x17,0xF0,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,\n    0x04,0x40,0x06,0xC5,0xE3,0x0C,0x63,0x18,0xD9,0x38,0xC3,0x43,0x98,0xD2,0xE0,0x00,\n    0x00,0x00,0x00,0x00,0x01,0x14,0x06,0x82,0x50,0xDC,0xAC,0x99,0xC3,0x47,0x4C,0x9A,\n    0x3D,0x2C,0x6C,0x88,0xA3,0xE7,0x0E,0x13,0x2F,0x30,0x80,0xF1,0xE3,0xE8,0x48,0x20,\n    0x82,0x0F,0xCC,0x13,0x1E,0x74,0x9E,0xA9,0x33,0x28,0x91,0xA0,0x9A,0x42,0x90,0x84,\n    0x33,0x68,0xE7,0x11,0x4E,0xCD,0x94,0x91,0x24,0xF1,0x69,0x53,0x14,0x54,0xF2,0x72,\n    0xCB,0x2C,0xB4,0xA9,0xBA,0xD3,0xFD,0x7A,0x0A,0x1A,0x2A,0x3A,0x4A,0x5A,0x6E,0xC7,\n    0x67,0xB5,0x4F,0xDB,0xA8,0xA9,0xEE,0x77,0x7B,0xD5,0x55,0x75,0x95,0xBD,0xFA,0xEF,\n    0x07,0x86,0xBE,0xC2,0xC6,0xCA,0xCF,0xC5,0xE3,0xF2,0x79,0x7C,0xD6,0x96,0xBE,0x7F,\n    0x45,0xB5,0xBD,0xC7,0xA6,0xE6,0xEB,0xD5,0x77,0x79,0x7B,0x7D,0xEB,0xBF,0xF6,0x7B,\n    0x70,0x30,0x70,0xBD,0xD8,0x7E,0xFF,0x87,0xC7,0xE5,0xF3,0xFA,0x7D,0x7E,0xDF,0x7F,\n    0xC7,0xE7,0xF5,0xFB,0xFE,0x58,0x7F,0xAC,0x77,0x9A,0xE5,0xEB,0xD7,0xCC,0x4B,0xCB,\n    0x4B,0x03,0x2E,0x5C,0xB9,0x74,0xA6,0x89,0x6A,0xD5,0xB2,0x52,0x3A,0x0C,0xFC,0x84,\n    0x7A,0xC5,0x8B,0x16,0x46,0x28,0x4E,0xD4,0x52,0xA2,0xA9,0x02,0xA5,0x45,0x04,0x4A,\n    0x55,0x25,0x69,0x29,0x51,0x54,0x81,0x55,0xA2,0x82,0x25,0x2B,0x1A,0x76,0xC6,0xB5,\n    0x6A,0x19,0xD9,0x93,0x26,0x3E,0xC4,0xE6,0x03,0x8E,0x60,0x38,0xE2,0x10,0x87,0x9E,\n    0x79,0x08,0x94,0xF2,0x24,0x22,0x42,0x11,0x22,0x97,0x53,0x33,0x18,0xC6,0x31,0x8C,\n    0xA5,0x2E,0xA5,0x29,0x4B,0xB3,0x66,0xCD,0x27,0x59,0x90,0xAC,0x83,0x9C,0xEC,0x7F,\n    0x18,0x03,0x9C,0x7F,0xA3,0xFE,0x59,0x0C,0x57,0x10,0x2C,0x0A,0x50,0x20,0x4B,0x10,\n    0x92,0x18,0x24,0x20,0x52,0x24,0x02,0x27,0x10,0x39,0x84,0x52,0x72,0x3A,0x08,0x80,\n    0x8C,0xB8,0x92,0x12,0x09,0x4A,0x05,0x02,0x48,0x10,0x25,0x88,0x49,0x0C,0x89,0x08,\n    0x01,0x48,0x90,0x08,0x9C,0x40,0xE0,0xB8,0x9C,0x59,0x1D,0x27,0x24,0x90,0x28,0x00,\n    0xC6,0x30,0x18,0xC0,0x11,0x48,0x88,0x94,0x42,0x84,0x21,0xF1,0xB6,0xA1,0x08,0x36,\n    0xE0,0xA1,0x08,0x24,0xDB,0x50,0x4D,0xB8,0x25,0x04,0x92,0x6D,0xC2,0x09,0xB6,0x93,\n    0x6E,0x0D,0xB4,0xFA,0x11,0x0C,0x00,0x00,0x00,0x00,0x08,0x86,0xC0,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xA2,0xD8,0x07,0x9D,0xBE,0xAB,0x60,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x21,0x80,0x00,0xC6,0x00,0x00,0x30,\n    0x18,0xC6,0x02,0x6D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x88,0x69,0x00,\n    0x26,0x9B,0x62,0x08,0x40,0x4D,0xA6,0x9B,0x40,0x86,0xC4,0xDB,0x20,0x26,0xD3,0x42,\n    0x4C,0x4D,0x88,0x43,0x6D,0xA0,0x49,0x0C,0x04,0x26,0xD8,0x00,0x0C,0x63,0x01,0x88,\n    0x70,0x41,0x06,0x9B,0x62,0x08,0x40,0x4D,0xA6,0x9B,0x40,0x86,0xC4,0xDA,0x68,0x80,\n    0x9B,0x4D,0x09,0x31,0x36,0x21,0x0D,0x8C,0x40,0x92,0x18,0x08,0x4D,0xB0,0x00,0x02,\n    0x10,0x84,0x12,0xF8,0x0B,0xB9,0x22,0x9C,0x28,0x48,0x5D,0xA3,0xDA,0xA0,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9e06151e9475a88890a14006c13b13f35489551310014e4b9101b49cab338b45) == 991, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lt_LT.ISO8859-4 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_be36e5025f87507554aa6ced53ed3125138449b074f9c52f582911ab2904a450[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xAE,0x37,0x4F,0xE6,0x00,0x00,\n    0x39,0xDF,0x99,0x80,0x10,0x42,0x05,0x00,0x10,0x30,0xCE,0x5D,0x70,0x36,0xBF,0xDF,\n    0x00,0x00,0x20,0x00,0x21,0x00,0x44,0x00,0x01,0x30,0x01,0x18,0x65,0x18,0x68,0x64,\n    0x34,0xC9,0xA0,0x18,0x86,0x9A,0x68,0xD0,0xD1,0x82,0x54,0x35,0x27,0xEA,0x9B,0x14,\n    0x34,0xF5,0x31,0x34,0xD3,0x69,0x34,0x00,0x68,0x09,0x4D,0x24,0x69,0x4C,0xC5,0x36,\n    0x28,0x7A,0x65,0x1E,0x93,0x7A,0xA7,0xB5,0x32,0x43,0x47,0xA2,0xE6,0xA7,0x84,0x27,\n    0x0D,0xF4,0x97,0x6A,0x0A,0x74,0x4E,0x6D,0xAC,0xA3,0x65,0x1B,0x47,0x65,0xBA,0x82,\n    0xF0,0x9D,0x24,0x92,0x49,0x56,0x87,0xE5,0x37,0x82,0x45,0x58,0x96,0x4F,0x9E,0xBC,\n    0x7B,0x69,0x1C,0xAF,0xCD,0x7C,0x0E,0x0E,0x92,0xAD,0x0B,0x4E,0xF8,0x2A,0xBA,0xEB,\n    0xD7,0x80,0x90,0x24,0xC2,0x43,0x24,0x09,0x32,0x63,0x31,0x67,0x56,0xEE,0xFA,0x3D,\n    0xD7,0x95,0x1D,0x09,0xA3,0x33,0x7F,0xA6,0xD6,0x05,0xBE,0x61,0x6B,0xDB,0xED,0x93,\n    0x36,0x9D,0x05,0x84,0x49,0xCC,0xB3,0xF4,0xA5,0x9B,0x74,0x6F,0xF9,0x6C,0xAE,0x3E,\n    0xFB,0x8E,0x3B,0x90,0x3C,0x65,0x26,0x6C,0xCB,0x4A,0x1E,0x83,0xAE,0x9D,0x57,0xCC,\n    0xDE,0x32,0x18,0xC2,0x02,0x26,0x70,0x55,0x3E,0x19,0x17,0x4A,0xC1,0x05,0x9B,0x10,\n    0x1B,0x43,0x5B,0x8C,0xDF,0x9A,0xF7,0xAE,0x92,0x90,0x12,0x76,0x34,0x66,0xD6,0xDE,\n    0x6C,0x9C,0x47,0xE3,0x28,0xD6,0x21,0x40,0x9A,0xFD,0x46,0xDC,0x91,0x48,0x1A,0x09,\n    0x03,0xC7,0x62,0x84,0x3A,0x7C,0x5C,0x69,0x20,0x81,0x49,0x70,0x88,0x9C,0xA5,0xE3,\n    0x1A,0xF8,0x7F,0x7B,0xE1,0x64,0x46,0x47,0x12,0xD2,0xC2,0xF7,0x38,0x55,0x30,0x2A,\n    0x12,0x31,0xE7,0x68,0xDE,0x07,0xF1,0x77,0x24,0x53,0x85,0x09,0x0A,0xE3,0x74,0xFE,\n    0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_be36e5025f87507554aa6ced53ed3125138449b074f9c52f582911ab2904a450) == 305, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lt_LT.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ebb42615fb12c7dee1757c7913482ef9de94d05a081e121d43ab79addf7211c0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x2F,0x13,0x58,0x79,0x00,0x00,\n    0x39,0xDF,0xFC,0x00,0x10,0x42,0x05,0x00,0x10,0x30,0xCE,0x5D,0x70,0x36,0xBF,0xDF,\n    0x00,0x00,0x02,0x00,0x80,0x60,0x08,0x00,0x01,0x06,0x00,0x30,0x01,0x18,0x64,0x30,\n    0x00,0xD1,0xA1,0xA3,0x08,0xC9,0xA0,0xD1,0xA6,0x80,0xC1,0x2A,0x29,0xFA,0x53,0xD4,\n    0xDB,0x4A,0x07,0xA9,0x91,0xA6,0x8F,0x29,0xA0,0x03,0x40,0x12,0x9A,0x4A,0x62,0x9E,\n    0x98,0xA6,0xC5,0x0F,0x4D,0xAA,0x3D,0x26,0xD4,0xF6,0xA6,0x44,0xD3,0x43,0xD1,0x71,\n    0x52,0xBE,0x12,0x86,0xD9,0x67,0xD3,0x71,0x36,0x49,0xCD,0x74,0xCE,0x7A,0xF7,0x6B,\n    0x3E,0xAB,0x65,0x05,0xD9,0x3A,0x49,0x24,0x92,0xA9,0x0F,0xC2,0x4F,0x04,0x8A,0x30,\n    0x2B,0x97,0x1D,0x37,0xF4,0xCA,0x7C,0x6E,0x8A,0xF8,0x1C,0x1D,0x25,0x52,0x16,0x5D,\n    0x6F,0x54,0x73,0xD3,0x9D,0x22,0x40,0x93,0x09,0x0C,0x90,0x24,0xC9,0x88,0x8A,0x34,\n    0x6C,0xEF,0x93,0xDB,0x71,0x41,0xC8,0x92,0x22,0x6D,0xF4,0xDA,0x40,0xB3,0xCC,0x2C,\n    0x7B,0x3D,0xB1,0x66,0xCB,0x90,0xAF,0x9C,0x94,0x8A,0xFC,0x13,0x33,0x6C,0x8D,0xAB,\n    0xEF,0x9D,0xA7,0x6E,0xA3,0x8E,0xE4,0x0E,0xF8,0xE6,0xCD,0x12,0xC1,0xCA,0x86,0x2B,\n    0x67,0xA2,0xE9,0x9B,0x06,0x2D,0x15,0x44,0x4C,0x15,0xEF,0x3D,0x17,0x96,0xCA,0xC1,\n    0x07,0xCD,0x88,0x0D,0x73,0x5B,0x49,0xC3,0x07,0xF5,0xAE,0xA2,0xA0,0x12,0x76,0x34,\n    0x66,0x96,0xDC,0x67,0x9C,0x48,0x52,0x51,0xAC,0x41,0xC2,0x66,0xF1,0x1D,0x77,0xA3,\n    0xC5,0x31,0x92,0x08,0x0E,0xC6,0xE4,0x3A,0x7C,0x1C,0x6C,0xD0,0x40,0x98,0xB4,0x44,\n    0xE7,0x0C,0xFF,0x30,0xAA,0x9F,0x1E,0xF7,0xD7,0x38,0xC8,0xDE,0x58,0x56,0x5C,0xFF,\n    0xAC,0xDF,0xCC,0xC7,0x95,0x55,0x69,0x80,0xA9,0x26,0x89,0x61,0xF2,0x7A,0x9F,0xE2,\n    0xEE,0x48,0xA7,0x0A,0x12,0x05,0xE2,0x6B,0x0F,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ebb42615fb12c7dee1757c7913482ef9de94d05a081e121d43ab79addf7211c0) == 314, \"Wrong size of locale's blob\");\n\n/* lv_LV.ISO8859-13 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3aa7255b1b174b1243be5d38b4a17e6d155321434caa29489f0c010947c31b8a[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x6A,0xE2,0x0A,0x6E,0xE7,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3aa7255b1b174b1243be5d38b4a17e6d155321434caa29489f0c010947c31b8a) == 24, \"Wrong size of locale's blob\");\n\n/* lv_LV.ISO8859-13 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_6953d03a468e540fe4c3066657115ba05cfc6cc8c85c8e1519c53af24587610e[] = {\n    0x4C,0x56,0x4C,0x20,0x0A,0x4C,0x73,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6953d03a468e540fe4c3066657115ba05cfc6cc8c85c8e1519c53af24587610e) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lv_LV.ISO8859-13 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_1e4311057a5dd209d021e2c020e191f05fa9f685bc52a675de7a5f28f1f9b2e8[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xDF,0xE6,0xC8,0x68,0x00,0x00,\n    0x33,0xDF,0x81,0x80,0x10,0x42,0x05,0x80,0x10,0x3D,0x53,0xCC,0x70,0x3F,0xBF,0xDF,\n    0x00,0x10,0x81,0x40,0x08,0x30,0x00,0xEB,0x01,0x10,0x21,0xA0,0x00,0x06,0x80,0x69,\n    0xA6,0x8D,0x00,0x1A,0x9E,0xA9,0x32,0x60,0x00,0x00,0x00,0x00,0x00,0x94,0x46,0x4A,\n    0x7A,0x24,0xF4,0x9E,0xA6,0x4D,0x3D,0xAA,0x6D,0x4C,0x9A,0x6D,0x4D,0x92,0x3D,0x4C,\n    0xD4,0xA0,0x68,0x1D,0x94,0xD6,0xB4,0x98,0x9C,0xEC,0xE0,0xD2,0x6C,0x59,0xC1,0x4E,\n    0x22,0x9D,0x45,0x5B,0x01,0xA2,0x90,0x00,0x14,0xA2,0x08,0x42,0xA9,0x04,0xAC,0x14,\n    0x67,0x08,0x7E,0x53,0x40,0x48,0x50,0x40,0xFC,0x4A,0x54,0xC3,0x98,0x98,0x6D,0x4D,\n    0xF8,0xDA,0xC0,0x24,0x02,0x50,0x48,0x40,0x25,0x00,0x90,0x50,0xF8,0x44,0x7A,0x0F,\n    0xA8,0xC3,0xB1,0x31,0x98,0x81,0xAE,0xA8,0x87,0xE0,0xA4,0x50,0x58,0xEE,0x73,0x87,\n    0x87,0x82,0x72,0x79,0x18,0xFE,0x99,0x5A,0x61,0xCF,0xA0,0xB5,0x91,0x44,0xEB,0xCC,\n    0x5C,0xAC,0xB4,0xCF,0x90,0xA5,0xB9,0xD8,0x89,0xD8,0xBC,0x61,0xA6,0x83,0x0A,0x89,\n    0x33,0xC8,0x45,0x06,0xCE,0xEA,0x1A,0x26,0x85,0x35,0x03,0x88,0xB5,0x6B,0x93,0x22,\n    0x28,0xC4,0x4D,0xC4,0x0E,0xFB,0x09,0x61,0x22,0x02,0xE5,0xFD,0xE7,0x54,0x7A,0xA7,\n    0x80,0x54,0x36,0xEF,0x99,0x12,0x63,0x52,0x67,0x42,0x20,0xA0,0xA8,0x10,0x2E,0xB4,\n    0xB2,0xB3,0xBF,0x0A,0x5F,0xED,0xA3,0xEC,0x14,0x76,0x1C,0x9F,0xAF,0xA1,0x66,0x24,\n    0x8B,0xF6,0xA9,0x71,0x0F,0x92,0xD1,0x5C,0xAF,0x1D,0xE2,0xA9,0xFE,0x2E,0xE4,0x8A,\n    0x70,0xA1,0x21,0xBF,0xCD,0x90,0xD0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1e4311057a5dd209d021e2c020e191f05fa9f685bc52a675de7a5f28f1f9b2e8) == 279, \"Wrong size of locale's blob\");\n\n/* lv_LV.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3ec39f053d03943d21cc22175978d79273488ba587b81f6fdd55056e1b10f7c8[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x6A,0xC4,0x81,0x0A,0x6E,0xC4,0x93,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3ec39f053d03943d21cc22175978d79273488ba587b81f6fdd55056e1b10f7c8) == 26, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed lv_LV.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_c55ee584ad52d88b1dbaa6f99c8076b966953d98b998844ab73c1203adf2a58c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x4B,0x56,0x7F,0x93,0x00,0x00,\n    0x33,0xDF,0xF4,0x00,0x10,0x42,0x05,0x80,0x10,0x3D,0x53,0xCC,0x70,0x3F,0xBF,0xDF,\n    0x00,0x20,0x00,0x08,0x00,0x20,0x08,0x06,0x00,0x30,0x00,0xEB,0x01,0x10,0x23,0x20,\n    0x00,0x00,0x06,0x9A,0x68,0x00,0x0D,0x4F,0x54,0x99,0x18,0x13,0x00,0x00,0x00,0x00,\n    0x02,0x49,0x1A,0x49,0xEA,0x6A,0x6D,0x27,0xA6,0xA6,0x9B,0xD4,0x9E,0xA1,0xA7,0xA9,\n    0x93,0x34,0x8F,0x40,0x92,0x8E,0xB1,0xD3,0x35,0x0B,0x49,0x89,0xC6,0x87,0x1A,0x4D,\n    0x7E,0xFB,0x15,0x02,0x2A,0x14,0x55,0xEE,0x0C,0x14,0x80,0x00,0xA5,0x10,0x42,0x14,\n    0xF5,0x92,0x80,0x51,0x8E,0x43,0xB1,0x99,0x82,0x42,0x62,0x07,0xC2,0x52,0x9D,0xFC,\n    0x44,0x83,0x49,0xED,0xBE,0xB5,0xC1,0x20,0x12,0x82,0x42,0x01,0x28,0x04,0x82,0x8F,\n    0x84,0xA5,0xB4,0x96,0x63,0x87,0x32,0x63,0xB9,0x03,0xCB,0x3C,0x43,0xF4,0x62,0x28,\n    0x68,0xFA,0x48,0xBF,0xAC,0xA0,0xB7,0x4A,0xA3,0x97,0xF1,0x8D,0xA7,0x0C,0x37,0x8D,\n    0x59,0x14,0xB8,0xE0,0x36,0x36,0x5A,0x65,0xB8,0x62,0xDC,0xAC,0x4B,0x99,0xEE,0x38,\n    0xF3,0x43,0x8C,0x94,0xCD,0x02,0x60,0x7C,0xA9,0xB4,0xEC,0x8A,0x54,0x0E,0x26,0x9D,\n    0x72,0x74,0x98,0x72,0x25,0xC4,0x0E,0x96,0x15,0x6F,0xA8,0x80,0xDC,0xB2,0xD3,0x9E,\n    0x3F,0x8B,0xA8,0x32,0x35,0x6B,0x99,0x12,0x63,0xD2,0x67,0xD9,0x10,0x60,0x64,0x10,\n    0x36,0x5A,0x59,0x59,0xD3,0xDA,0x97,0xEC,0xED,0x2D,0x23,0x12,0x72,0x44,0xF5,0xEA,\n    0x2C,0xE2,0x54,0x5F,0x73,0x14,0x21,0xDD,0x1E,0x01,0x86,0x58,0x17,0x0D,0x98,0xD1,\n    0x8D,0x06,0x63,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x41,0x2D,0x59,0xFE,0x4C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c55ee584ad52d88b1dbaa6f99c8076b966953d98b998844ab73c1203adf2a58c) == 286, \"Wrong size of locale's blob\");\n\n/* mn_MN.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3ac8244e6944407217d6dd5c223ed686927e5abc17f41d82740027bfe41c9c8b[] = {\n    0x5E,0x5B,0xD1,0x82,0xD0,0xA2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD2,0xAF,\n    0xD2,0xAE,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD1,0x82,0xD0,0xB8,0xD0,0xB9,0xD0,0xBC,\n    0x0A,0xD2,0xAF,0xD0,0xB3,0xD2,0xAF,0xD0,0xB9,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3ac8244e6944407217d6dd5c223ed686927e5abc17f41d82740027bfe41c9c8b) == 42, \"Wrong size of locale's blob\");\n\n/* mn_MN.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_9ef80248706566c98532d2f83ba4b7f927910ac6144140f1a7183d580111e587[] = {\n    0x4D,0x4E,0x54,0x20,0x0A,0xE2,0x82,0xAE,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9ef80248706566c98532d2f83ba4b7f927910ac6144140f1a7183d580111e587) == 36, \"Wrong size of locale's blob\");\n\n/* mn_MN.UTF-8 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_419688ce771142a7fb9691484a336b732ea8335813cbcda5774584693c490c90[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_419688ce771142a7fb9691484a336b732ea8335813cbcda5774584693c490c90) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed mn_MN.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_cebfb38b7e0427d7a4af03351be9420184094b78eb1b0f03c79e85ffe22bb1bc[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x1E,0x0C,0xD9,0x47,0x00,0x01,\n    0x2A,0x5F,0xFA,0x00,0x10,0x42,0x05,0x30,0x10,0x30,0x62,0x08,0x60,0x06,0x02,0x40,\n    0x00,0x6A,0x0A,0xEE,0x8E,0x92,0x61,0xFC,0x2F,0x78,0x00,0x30,0x01,0x2D,0x8D,0x58,\n    0x4A,0x69,0x34,0x9A,0x90,0xF5,0x1B,0x48,0xD1,0xA1,0x84,0xC1,0x32,0x34,0x64,0x69,\n    0xEA,0x7A,0x4D,0x04,0x9A,0xA2,0xA7,0xEA,0x6A,0x00,0x6D,0x40,0x03,0xD4,0x00,0x07,\n    0xA8,0x0D,0x3D,0x4D,0x04,0xA8,0x44,0xC9,0xA3,0x27,0xA9,0xA0,0x3D,0x35,0x32,0x68,\n    0xC4,0x68,0x01,0xA1,0xA3,0x3E,0x30,0x7B,0x2B,0x37,0xE2,0x0D,0xC9,0x87,0xAA,0xDD,\n    0x10,0x5A,0x20,0x3F,0x2A,0x73,0x8A,0x7A,0x5B,0x23,0x32,0xC6,0xAF,0x4C,0x76,0xA2,\n    0x3B,0x2C,0x7B,0x31,0x40,0x93,0x21,0x95,0x82,0x89,0x88,0x01,0x0D,0x1C,0x20,0x0D,\n    0x23,0x41,0x42,0x90,0xC5,0x09,0x4E,0xD1,0x64,0xF8,0x9E,0x36,0x1D,0x18,0x74,0x98,\n    0x49,0x2E,0x43,0x33,0x94,0x24,0x03,0x29,0x14,0x41,0x02,0x1A,0x64,0xD2,0x12,0x90,\n    0x20,0x4B,0x00,0x4D,0x19,0x73,0x9E,0x5D,0x7D,0xAD,0xE4,0x0A,0x68,0xF7,0x39,0x8A,\n    0x22,0x99,0xAE,0x3F,0x27,0xA6,0xB0,0x25,0x51,0x55,0x55,0x7B,0xA9,0x45,0x10,0x35,\n    0xCA,0x14,0xAD,0xDE,0xD5,0x2C,0xD4,0x12,0x79,0x98,0xDA,0xA6,0xA1,0x88,0x06,0x04,\n    0xA0,0x27,0xC8,0x0E,0xAA,0x4D,0xFA,0x57,0x38,0x1D,0x43,0xC2,0x8A,0xEB,0x92,0x74,\n    0xEA,0x6D,0x0D,0x79,0xA4,0xB7,0x91,0xEE,0x20,0xB1,0xB2,0x25,0xF2,0x86,0x27,0xF1,\n    0xBC,0x3D,0x97,0x67,0x62,0xE7,0x4B,0xD1,0x60,0x7C,0xBB,0xF6,0xA2,0x8A,0xA4,0x4E,\n    0x33,0x4A,0x43,0xB0,0xE7,0x88,0x48,0xA5,0x43,0xD6,0x33,0x5A,0xDC,0xC0,0x2E,0xB9,\n    0x91,0xC8,0x99,0xC0,0xC8,0xD9,0x5D,0x24,0xB0,0x1A,0x07,0xF1,0xC1,0x63,0x10,0x50,\n    0x44,0x05,0xC5,0x3B,0xA1,0x25,0x45,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x03,0xC1,0x9B,\n    0x28,0xE0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cebfb38b7e0427d7a4af03351be9420184094b78eb1b0f03c79e85ffe22bb1bc) == 322, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed nb_NO.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_2c2b68cd953a188c93fc999bea3c524b80a86d834c404fbb2cd8da4c070abc82[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x92,0x33,0xB8,0x89,0x00,0x00,\n    0x6C,0x5F,0x80,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xBF,0xDF,\n    0x00,0x00,0x40,0x30,0x00,0xC6,0x02,0x53,0x51,0xA4,0xD0,0x40,0xD3,0x0C,0x44,0xD0,\n    0x31,0x80,0x02,0x60,0x00,0x26,0x09,0x11,0x4C,0x99,0x09,0x94,0xD0,0x7A,0x01,0x94,\n    0xCF,0x7E,0xCB,0x28,0x71,0xC9,0x5D,0xCF,0xAE,0xDC,0x26,0xC3,0xE6,0xB7,0xCA,0x6C,\n    0x56,0xE9,0xE0,0x4A,0x34,0x73,0xA4,0x62,0x99,0xFC,0x27,0x22,0x5D,0x1C,0x54,0xFB,\n    0xD2,0x0B,0x22,0xA7,0xAC,0xCD,0x83,0x43,0x64,0xD1,0x10,0x91,0x05,0xE6,0xD4,0xAD,\n    0x8B,0x0C,0xCE,0xCD,0x26,0xBF,0x98,0x0C,0x85,0x1C,0x03,0x21,0x6B,0x52,0x57,0x03,\n    0x52,0x4E,0xFF,0xD3,0xBC,0x37,0x88,0x61,0x43,0xE2,0x8F,0x85,0x3C,0x0C,0x3B,0x01,\n    0xAA,0xB2,0x37,0x46,0xAC,0x67,0xA3,0x42,0x56,0x45,0xCA,0xA0,0xD9,0x63,0xEC,0x64,\n    0x97,0xF7,0x6D,0xB0,0x03,0xE8,0x53,0x5E,0x61,0xB8,0x30,0x57,0x24,0xC8,0x94,0x33,\n    0x45,0x6B,0x61,0x45,0x03,0x69,0x95,0xBC,0x12,0x19,0xBC,0x8E,0xA5,0x0A,0x15,0xAE,\n    0xC6,0xA5,0xB3,0x81,0xC1,0x92,0xE8,0x33,0x9E,0xA6,0x64,0x92,0x32,0xA6,0x26,0x6B,\n    0xF4,0x5C,0x1D,0x15,0xCF,0xC3,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x42,0x48,0xCE,0xE2,\n    0x24\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2c2b68cd953a188c93fc999bea3c524b80a86d834c404fbb2cd8da4c070abc82) == 225, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed nb_NO.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_db87d44a5458d0def9b68efc5ed58c79d78017a52691075c95d83ecd52864fd3[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x38,0xB4,0x3F,0x67,0x00,0x00,\n    0x6C,0x5F,0x8C,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xBF,0xDF,\n    0x00,0x00,0x40,0x08,0x00,0x30,0x00,0xE6,0x10,0x94,0xD4,0x69,0x34,0x10,0x34,0x63,\n    0x11,0x34,0x06,0x30,0x98,0x99,0x30,0x13,0x00,0x00,0x91,0x14,0xC9,0xA6,0x91,0x90,\n    0x8D,0xA0,0x1A,0x46,0x7B,0x74,0x59,0x43,0x7E,0x0A,0xEC,0x7C,0x76,0xDD,0x36,0x1E,\n    0xF4,0xBE,0x53,0x62,0xB7,0x4F,0x02,0x51,0xA3,0x9C,0xA3,0x14,0xCF,0xD9,0x39,0x12,\n    0xE8,0xE2,0xA7,0xD6,0x90,0x59,0x15,0x3C,0x66,0x6A,0x1E,0x8D,0x53,0x44,0x42,0x44,\n    0x17,0x7B,0x52,0xB6,0x2C,0x33,0x3B,0x34,0x9A,0xFE,0x20,0x32,0x14,0x6E,0x0C,0x85,\n    0xA5,0x49,0x5B,0x8D,0x49,0x3B,0x75,0x9D,0xA1,0xBC,0x43,0x0A,0x1F,0x14,0x7C,0x29,\n    0xE0,0x61,0xD8,0x0D,0x15,0x91,0xB2,0x34,0x63,0x3D,0x1C,0x09,0x57,0x32,0x2A,0x83,\n    0x55,0x8F,0xB1,0x92,0x65,0xEE,0xDA,0xE0,0x07,0x21,0x4D,0x7E,0xC3,0x70,0x60,0xB2,\n    0x24,0xB9,0x28,0x67,0x05,0x6B,0x61,0x45,0x03,0x69,0x95,0xCA,0x09,0x0C,0xDD,0xCE,\n    0x65,0x0A,0x15,0xAE,0xA6,0x85,0xB3,0x81,0xC1,0x75,0xC4,0x67,0xDE,0x66,0x64,0x92,\n    0x32,0xA6,0x26,0x6B,0xF4,0x5B,0x9C,0x57,0xF0,0x5C,0xD0,0xFE,0x2E,0xE4,0x8A,0x70,\n    0xA1,0x20,0x71,0x68,0x7E,0xCE\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_db87d44a5458d0def9b68efc5ed58c79d78017a52691075c95d83ecd52864fd3) == 230, \"Wrong size of locale's blob\");\n\n/* nl_BE.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_9e50b42fdaab19543d9fbef49c1e72ee219e95305edc621b38954eef674e3782[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9e50b42fdaab19543d9fbef49c1e72ee219e95305edc621b38954eef674e3782) == 35, \"Wrong size of locale's blob\");\n\n/* nl_BE.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_95b5bc8f48c28fbe922ad1a09d0c0904fdf8d562127eb5bfdf8a80389f6aff76[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_95b5bc8f48c28fbe922ad1a09d0c0904fdf8d562127eb5bfdf8a80389f6aff76) == 36, \"Wrong size of locale's blob\");\n\n/* nl_NL.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_2e022e9f9d6cb099cafbcf237e2d40ed3181664c2eabd7faf9c44cf3f51de316[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2e022e9f9d6cb099cafbcf237e2d40ed3181664c2eabd7faf9c44cf3f51de316) == 18, \"Wrong size of locale's blob\");\n\n/* nl_NL.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f23ac40d94f0053beb84938dc0c1df45a23dd05dfdae6c9c9d166e4f36fb6762[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,\n    0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f23ac40d94f0053beb84938dc0c1df45a23dd05dfdae6c9c9d166e4f36fb6762) == 35, \"Wrong size of locale's blob\");\n\n/* nl_NL.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_462453d2bf4a3bb28c91b3cfcd1891191841bf175c3e1f14b3d2644605846935[] = {\n    0x2C,0x0A,0x0A,0x2D,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_462453d2bf4a3bb28c91b3cfcd1891191841bf175c3e1f14b3d2644605846935) == 6, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed nl_NL.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_7be039adcf02f254418be107645d35bc666534b10feed6977fb8c2eaa01b4e2c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xA4,0x7F,0xF8,0x82,0x00,0x00,\n    0x74,0x5F,0x80,0x00,0x10,0x42,0x02,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x90,0x30,0x00,0xE6,0x68,0x25,0x4F,0x4A,0x69,0xA4,0xF4,0x9A,0x3D,0x46,0x26,0xC9,\n    0x3D,0x35,0x06,0x1A,0x26,0x49,0xB4,0x46,0x80,0x00,0x00,0x24,0x85,0x13,0xC9,0x31,\n    0x33,0x53,0x26,0x81,0x82,0x33,0x9E,0x4B,0xAB,0x59,0xD4,0xD8,0xFB,0x63,0x48,0xB7,\n    0x0D,0xC4,0x0B,0x6D,0x47,0xBD,0xC4,0x20,0xC6,0x18,0x94,0xCA,0xE3,0x14,0x4B,0x0F,\n    0x84,0x5A,0x2A,0xF4,0xBB,0x46,0x5B,0xB2,0xA8,0xF3,0x3D,0x09,0x87,0xA2,0x69,0xD7,\n    0x08,0x48,0x65,0x2A,0xEF,0xEE,0xA5,0x41,0xD7,0xFF,0x61,0x9D,0xD1,0x2B,0x37,0xBD,\n    0x87,0x5C,0x84,0x12,0x85,0x84,0xC9,0xAD,0x06,0x50,0x88,0xCF,0xEF,0xA6,0x77,0xB6,\n    0x6A,0xA6,0x45,0x67,0x0A,0xF5,0x62,0xE0,0xDF,0x61,0xAF,0xB5,0x7B,0x02,0xA9,0x75,\n    0x58,0x85,0x19,0x31,0xB9,0x89,0x81,0x44,0xE4,0x99,0x34,0x96,0xCC,0x2B,0x94,0xD0,\n    0x18,0x5E,0xE5,0x7C,0x00,0x88,0x23,0x01,0x28,0x36,0x0E,0x08,0x4A,0xCF,0x1F,0x65,\n    0x2A,0xC2,0x40,0x95,0x66,0x54,0xC5,0xEC,0x4E,0x21,0x73,0x07,0x76,0x50,0x0F,0x06,\n    0x50,0x50,0xEC,0x58,0x4D,0x39,0x8A,0xFD,0x32,0x4E,0x64,0x48,0xAC,0xA9,0x68,0x2A,\n    0x1C,0x99,0xAB,0x40,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x21,0x48,0xFF,0xF1,0x04\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7be039adcf02f254418be107645d35bc666534b10feed6977fb8c2eaa01b4e2c) == 239, \"Wrong size of locale's blob\");\n\n/* nl_NL.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b50adb3eb20b6ad79f7c76a25d27470cd9bc1c40690105f58ef264cfc3ad7935[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b50adb3eb20b6ad79f7c76a25d27470cd9bc1c40690105f58ef264cfc3ad7935) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed nn_NO.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_bf19ba829ec0e13d6fa57d8e31602841fa1a7aa3b9a8c8bc68dfdcf1e431d3ee[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x46,0x80,0xC8,0xED,0x00,0x00,\n    0x6B,0x5F,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xBF,0xDF,\n    0x20,0x02,0x00,0x30,0x00,0xE6,0x56,0x12,0x9A,0x8D,0x23,0x28,0xD3,0x26,0x8D,0x3D,\n    0x4F,0x4D,0x4D,0x00,0xC6,0x13,0x13,0x26,0x02,0x60,0x00,0x12,0x42,0x86,0x53,0xCA,\n    0x1E,0x90,0x1E,0x90,0xC8,0xD3,0x5A,0xE4,0xB9,0xC2,0xFE,0x8B,0x54,0xF8,0xED,0x74,\n    0xD4,0xE3,0x69,0xCB,0x16,0x2D,0x86,0x34,0x3C,0xC0,0xC1,0xFD,0xC4,0xE4,0x8A,0x3E,\n    0x6A,0x43,0xFC,0x93,0xE2,0xA7,0x9D,0xA0,0xB2,0x37,0x35,0xEC,0x54,0x36,0x2A,0x9A,\n    0x22,0x12,0x20,0xBA,0xDE,0xDB,0xDC,0xB8,0xCC,0xEC,0xD2,0x69,0xF0,0x99,0x3F,0x70,\n    0x63,0x48,0x4D,0x69,0x18,0x2F,0xA3,0x28,0x22,0xF7,0x8B,0xB8,0xD3,0x0C,0x31,0x36,\n    0x4F,0xB1,0x97,0xB1,0x83,0x40,0x2C,0xA6,0x8B,0xA2,0xCC,0x31,0x63,0x89,0x0A,0x86,\n    0x28,0x2C,0xB2,0xD4,0x81,0xC9,0xEB,0x2B,0x62,0x2C,0xC4,0xC4,0x60,0x7E,0x49,0x11,\n    0x6A,0x0E,0x68,0x45,0x84,0x64,0xD3,0x9B,0xC9,0xA0,0x24,0xC8,0xC2,0x90,0x22,0xC4,\n    0xF5,0x1C,0x72,0x5A,0x1C,0xC9,0x6F,0x58,0x77,0x82,0x8A,0x83,0x1B,0xF5,0x2A,0x39,\n    0x01,0x59,0x1C,0x07,0x5E,0x02,0x43,0x0F,0xF8,0xE4,0xB3,0x3C,0x9C,0x17,0x72,0x45,\n    0x38,0x50,0x90,0x46,0x80,0xC8,0xED\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bf19ba829ec0e13d6fa57d8e31602841fa1a7aa3b9a8c8bc68dfdcf1e431d3ee) == 231, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed nn_NO.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_7425e51c52f14bd1f7291d8cf5c8c5ba9890e75e1133bdb9d73f8340bd3a3cb5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x0A,0xC1,0x5C,0xB0,0x00,0x00,\n    0x6B,0x5F,0x94,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x37,0xBF,0xDF,\n    0x20,0x02,0x00,0x08,0x00,0x30,0x00,0xE6,0x01,0x8A,0x4F,0x49,0x8A,0x64,0xD1,0xA3,\n    0x4F,0x4D,0x3D,0x53,0x10,0x18,0xD3,0x11,0x84,0x69,0x80,0x00,0x01,0x22,0x22,0x64,\n    0x24,0x7E,0xA4,0x19,0xEA,0x46,0x23,0xD4,0x67,0x5C,0x56,0x10,0x7F,0x62,0xD5,0x1C,\n    0xB1,0x74,0x69,0xBE,0x93,0x8C,0x88,0xB5,0xF2,0xA0,0xD6,0x02,0xF6,0xE2,0xE1,0xD1,\n    0x0A,0x36,0x4A,0x21,0xB9,0x8B,0x49,0x4F,0x2B,0x41,0x62,0x36,0x19,0xF8,0x15,0x03,\n    0x41,0x54,0x6E,0x08,0x24,0x20,0xBB,0xBD,0xB6,0x70,0xE0,0x96,0x26,0x26,0x7B,0xA6,\n    0xA3,0xE4,0x19,0xDA,0x53,0xC5,0x8A,0x2F,0xC1,0xA9,0x27,0x39,0x9C,0xC0,0xEE,0x14,\n    0xA9,0xE5,0x47,0x93,0x4F,0xB1,0x87,0x60,0x30,0xAE,0x8C,0xA3,0x0C,0x66,0x0E,0x44,\n    0xAD,0x8A,0xA0,0xC2,0xD3,0xC1,0x24,0x17,0xF1,0x6C,0x54,0x5C,0xC4,0xC9,0xD0,0xE1,\n    0xB6,0x4A,0xD4,0xA1,0x82,0x50,0xCE,0x4A,0xF7,0xA5,0x54,0x0D,0xA6,0x69,0xAC,0x12,\n    0x8B,0xFB,0x14,0x28,0x57,0x07,0xA9,0x6E,0x37,0x98,0x89,0x36,0x5B,0x0C,0xE3,0xDC,\n    0xDC,0x82,0x43,0x7B,0x1A,0x90,0xBA,0x05,0x86,0x47,0xE9,0xE8,0xB9,0x9F,0xC6,0x4F,\n    0xF1,0x77,0x24,0x53,0x85,0x09,0x00,0xAC,0x15,0xCB,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7425e51c52f14bd1f7291d8cf5c8c5ba9890e75e1133bdb9d73f8340bd3a3cb5) == 235, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed no_NO.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_42e45ca981f5b896af43f0c5a5fc8acfd41417d3cf7f9416c67192fe6c7a68c6[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xE3,0xD0,0xFF,0xB4,0x00,0x05,\n    0x8B,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xDA,0xD4,0x8C,0x70,0x01,0x21,0xA0,0x69,0xA6,0x9A,0x0D,\n    0x19,0x34,0xC8,0x0C,0x98,0x4C,0x8C,0x04,0xD3,0x11,0xA6,0x9A,0x03,0x4C,0x02,0x64,\n    0x30,0x98,0x01,0x30,0x83,0x4F,0x42,0x32,0x68,0xD0,0x34,0x69,0xA6,0x4F,0x53,0x21,\n    0x82,0x69,0x9A,0x7A,0x93,0x0F,0xF5,0x54,0xFD,0x24,0xFD,0x28,0xF6,0xA7,0x92,0x69,\n    0xA7,0xAA,0x7E,0x99,0x20,0x8C,0x4C,0x46,0x9A,0x01,0x90,0x34,0x34,0xD0,0x32,0x03,\n    0x27,0xA8,0x24,0xC2,0x64,0xC4,0xD1,0xA3,0x09,0x91,0xA0,0xD0,0xC4,0x60,0x02,0x34,\n    0x64,0xD0,0x32,0x34,0x1A,0x61,0x06,0x46,0x02,0x60,0x46,0x43,0x4F,0x50,0xD1,0xA3,\n    0x10,0xC9,0xA0,0xD0,0xDA,0x02,0x68,0xD3,0x26,0x4C,0x79,0xA9,0xEF,0x54,0xA8,0xC0,\n    0x08,0x64,0xC0,0x8D,0x30,0x13,0x41,0xA1,0xA0,0x60,0x4C,0x83,0x26,0x80,0xD1,0xA3,\n    0x40,0x28,0x35,0x54,0xCC,0x9E,0x45,0x3D,0x27,0xA9,0xFB,0x24,0xA6,0x4D,0x00,0x34,\n    0x03,0x26,0x98,0x80,0x00,0x34,0x0C,0x11,0xA6,0x80,0x64,0xC4,0xC4,0x61,0x0D,0x03,\n    0x21,0xA0,0x00,0x00,0xD0,0x0D,0x0D,0x31,0x00,0xC8,0x34,0x03,0x20,0xD3,0x20,0xD0,\n    0x69,0x84,0xD0,0x1A,0x34,0x03,0x10,0x03,0x20,0x00,0x7A,0x84,0x4F,0xF5,0x2A,0xA4,\n    0xD4,0x00,0x03,0x40,0x00,0x34,0x00,0x00,0x00,0x00,0x06,0x40,0x19,0x34,0x64,0x19,\n    0x00,0x00,0x64,0x03,0x40,0x0D,0x03,0x40,0x1A,0x00,0x00,0x68,0x01,0x93,0x40,0x00,\n    0x00,0x34,0x03,0x4C,0x80,0x00,0xD0,0x03,0x40,0x00,0x08,0x53,0x05,0x51,0xA1,0xA5,\n    0x62,0xD6,0xA4,0x93,0x5C,0xBE,0xAA,0xC1,0xAE,0xAC,0xC6,0xAE,0xA1,0xD0,0xAB,0x2A,\n    0xC3,0x63,0x6D,0x65,0xBA,0xB5,0xD0,0xAE,0xD7,0xAB,0xF6,0x0B,0x0D,0x89,0xBE,0xC7,\n    0x64,0xB2,0xD9,0xAC,0xF6,0x8B,0x4B,0x83,0x8D,0xA9,0xC9,0x9D,0xA1,0xA7,0x50,0xD5,\n    0xA9,0x6B,0x6C,0x6D,0xD5,0x6A,0xDB,0xB5,0x8D,0xED,0xEE,0x0E,0x1A,0xE3,0x13,0x6C,\n    0x9D,0x76,0x6E,0x4E,0x8E,0x8E,0xAE,0xE9,0x5E,0x5E,0x9E,0xF6,0xDB,0x73,0x1F,0x0A,\n    0x80,0x82,0x83,0x84,0x7F,0x80,0x81,0x89,0xDD,0x45,0x45,0xC6,0x46,0xEE,0xE0,0x37,\n    0x87,0xB7,0xB5,0x5D,0xC9,0x53,0xDC,0x08,0x48,0x2E,0x24,0x3F,0x1E,0x23,0x93,0xCA,\n    0xE5,0xC4,0xF3,0xA2,0x8F,0xC5,0xC6,0x47,0x47,0xC8,0x74,0xB9,0x1D,0x09,0x39,0x4E,\n    0x99,0xF9,0x58,0xE9,0x69,0x8A,0xC3,0x41,0xDD,0x59,0xA9,0xB9,0xC9,0xDA,0x0A,0x11,\n    0xEB,0x08,0x45,0x5A,0x8E,0xBC,0xB3,0xC5,0x1E,0x4A,0x21,0x86,0x81,0x28,0x93,0x55,\n    0x92,0x78,0x00,0x00,0x00,0x00,0x14,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x0E,0x38,0xE8,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\n    0x80,0x6A,0x06,0xC9,0x02,0x1A,0x42,0x20,0xD9,0x20,0x24,0x99,0x08,0x42,0x1B,0xD4,\n    0x77,0x85,0x32,0x3C,0xC3,0x0C,0xEB,0x4D,0x4D,0xCE,0x14,0xA5,0x29,0x4A,0x52,0x94,\n    0xA5,0x34,0xC8,0xBD,0xF9,0xE3,0xE6,0xCE,0x92,0x7A,0x7E,0x80,0x01,0x42,0x71,0xC7,\n    0x1C,0x3D,0x60,0xA2,0x8A,0x28,0xA4,0x1F,0x3E,0x7C,0x93,0xF3,0x28,0xAB,0x46,0x18,\n    0x61,0x86,0x40,0x82,0x7E,0x7D,0x02,0x34,0x15,0xC9,0x2B,0xD0,0xA1,0x42,0x50,0xE3,\n    0x8E,0x3F,0x68,0xB2,0x08,0x20,0x82,0x12,0x92,0x49,0x26,0x10,0x88,0xD4,0xC8,0xD1,\n    0x95,0x5C,0x52,0x44,0x85,0x96,0x59,0xA6,0x98,0x6D,0x85,0x8D,0x95,0x9F,0x6F,0xB9,\n    0x69,0x6B,0x6D,0xDD,0xB7,0xB8,0xB9,0xEF,0x77,0xEE,0xBC,0x17,0x7E,0x1F,0x17,0x8F,\n    0xC9,0xE5,0xF3,0x79,0xEF,0x2F,0x7D,0x1E,0x9F,0x57,0xAF,0xD9,0x7D,0xED,0xF7,0x7B,\n    0xEF,0xFE,0x18,0x1F,0x1F,0x97,0xCF,0xE9,0xF5,0xC1,0xC2,0xFB,0x7D,0xFF,0x1F,0x9F,\n    0xD7,0xEF,0x0F,0x13,0xF8,0x9F,0xFA,0x9F,0xFC,0x9C,0x41,0x04,0x13,0x9F,0x22,0x74,\n    0xE9,0xD9,0x99,0x79,0x79,0x4E,0x47,0x16,0x3D,0xF4,0xE1,0xC3,0x9B,0xE8,0x88,0x8C,\n    0x5C,0x2E,0x30,0xAB,0x99,0x2A,0x83,0xA8,0xA1,0xCE,0x73,0x9D,0x0A,0xAA,0x83,0x9D,\n    0x08,0x42,0x10,0xAB,0x22,0xA0,0xEA,0x28,0xC5,0x8B,0x16,0xB6,0x0C,0x17,0xAF,0x66,\n    0x31,0x88,0x62,0x18,0x93,0x4D,0x34,0xD2,0x4D,0x24,0x92,0x5C,0x92,0x6B,0x16,0xAC,\n    0x6A,0x69,0x58,0xD0,0xB5,0x31,0x0C,0x42,0x10,0x84,0x26,0x63,0x6D,0x6E,0x19,0x48,\n    0xCC,0xC6,0x29,0x86,0xCC,0x80,0x02,0x03,0x18,0x00,0x00,0xA4,0x02,0x81,0x0C,0x62,\n    0x14,0x85,0x02,0x98,0x0C,0x51,0x01,0x0A,0x03,0x02,0x00,0x08,0x0C,0x60,0x00,0x02,\n    0x90,0x0A,0x04,0x31,0x91,0x74,0xA4,0xBA,0x5C,0x4A,0xB9,0xAA,0xB5,0xAA,0xD5,0x6A,\n    0xAF,0xF3,0xFE,0xB9,0xB8,0xAB,0x55,0xB2,0x19,0x2A,0xD5,0x69,0x25,0x55,0x5A,0xD6,\n    0xA9,0x25,0x55,0xA4,0x96,0xB5,0xAA,0xAA,0xAA,0x49,0x21,0x24,0x62,0xE4,0x00,0x17,\n    0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xCC,0x81,0xFB,0x49,0xED,0xC8,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xC8,0x80,0x0A,0x54,0xA8,0x92,0x49,0x2C,\n    0x80,0x00,0x00,0x88,0x00,0xA4,0x2D,0x2A,0x48,0xA2,0xAC,0x82,0x92,0xD5,0x20,0x29,\n    0x22,0xAC,0x80,0x29,0x2A,0xA4,0x14,0x96,0x85,0x49,0x24,0xA9,0x00,0x01,0x11,0x48,\n    0x5A,0x54,0x91,0x45,0x59,0x05,0x25,0xAA,0x40,0x52,0x45,0x59,0x00,0x52,0x55,0x48,\n    0x29,0x0A,0x85,0x49,0x24,0xA9,0x00,0x00,0x00,0x45,0xAD,0x56,0xB7,0xFE,0x2E,0xE4,\n    0x8A,0x70,0xA1,0x21,0xC7,0xA1,0xFF,0x68\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_42e45ca981f5b896af43f0c5a5fc8acfd41417d3cf7f9416c67192fe6c7a68c6) == 936, \"Wrong size of locale's blob\");\n\n/* no_NO.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_230b009bd74a34aed8a3a40a747930e47e19c5552d67d563c6dbaa68a7a64ff3[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_230b009bd74a34aed8a3a40a747930e47e19c5552d67d563c6dbaa68a7a64ff3) == 18, \"Wrong size of locale's blob\");\n\n/* no_NO.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_596d560785b4e76d66aed8c45ae200e2d1529766f80bcc850fa377b2fe4b2bc2[] = {\n    0x4E,0x4F,0x4B,0x20,0x0A,0x6B,0x72,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x34,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_596d560785b4e76d66aed8c45ae200e2d1529766f80bcc850fa377b2fe4b2bc2) == 35, \"Wrong size of locale's blob\");\n\n/* no_NO.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_24d6193a3a5027fe94454bdb58f9e5b244abbb4bb54e8939611e59faeef00e67[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_24d6193a3a5027fe94454bdb58f9e5b244abbb4bb54e8939611e59faeef00e67) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed no_NO.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_dc5b7a0d5c465997e190eedf369c12652dd2984e1d3058d8730f8a0d8b9d9b19[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xBE,0x6C,0x6F,0x0B,0x00,0x05,\n    0x93,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x93,0x38,0x00,0x41,0x34,0xC4,0xC4,0xD3,0x26,\n    0x09,0xA3,0x43,0x08,0x34,0xC0,0x98,0x86,0x21,0x80,0x11,0xA1,0xA3,0xCA,0x62,0x60,\n    0x8D,0x36,0x80,0x8C,0x02,0x00,0xD3,0x23,0x21,0xA6,0x83,0x26,0x8D,0x1A,0x0D,0x34,\n    0xF5,0x31,0xEF,0x55,0x23,0x09,0xBD,0x53,0x3C,0x9A,0x9E,0xA9,0xBC,0xA6,0xD1,0xA4,\n    0x20,0x0C,0x4C,0x8C,0x43,0x4C,0x99,0x19,0x1A,0x32,0x03,0x46,0x9A,0x06,0x9A,0x1C,\n    0xA3,0x26,0x4D,0x06,0xD3,0x53,0x13,0x7B,0x45,0x46,0x8D,0x00,0x69,0x93,0x4D,0x34,\n    0x03,0x46,0x4D,0x19,0x00,0xD0,0x06,0x8C,0x99,0x19,0x34,0x64,0x68,0x7A,0x4F,0x50,\n    0xD1,0xFA,0xA6,0x86,0x1A,0x35,0x0F,0x41,0x1E,0xA0,0x32,0x1B,0xCC,0xD5,0x53,0xF2,\n    0x08,0x8C,0x41,0xA6,0x8D,0x1A,0x34,0x32,0x01,0x88,0x00,0x19,0x00,0x00,0x06,0x80,\n    0x63,0x40,0xCC,0x35,0x44,0xC9,0xFA,0x52,0x1A,0x18,0x4C,0x21,0x91,0xA1,0xA6,0x4C,\n    0x08,0xC9,0x84,0x01,0x89,0x93,0x4D,0x0D,0x34,0xC8,0xC9,0x89,0xA6,0x8C,0x81,0x82,\n    0x61,0x31,0x32,0x00,0x34,0x68,0xC0,0x4D,0x34,0xD3,0x4D,0x0C,0x10,0xC9,0x81,0x1A,\n    0x32,0x0D,0x32,0x32,0x03,0x13,0x46,0x26,0x80,0xC4,0x60,0x83,0x26,0x9A,0x00,0x07,\n    0xA8,0x44,0xFF,0x52,0xA9,0x11,0x00,0x00,0x0D,0x00,0xD0,0x68,0x34,0x00,0x00,0x00,\n    0x68,0x00,0xD0,0x0D,0x00,0x00,0x03,0x40,0x03,0x40,0x00,0x68,0xD0,0x68,0x00,0x1A,\n    0x00,0x00,0x0D,0x34,0x0D,0x00,0x00,0x00,0x1A,0x01,0xA0,0x68,0x00,0x00,0x00,0x64,\n    0x28,0x20,0x42,0x94,0x89,0x1A,0x59,0x8F,0x4C,0xC1,0x60,0xF0,0x89,0xB8,0x5C,0x36,\n    0x1D,0x39,0x3D,0x41,0x47,0x10,0xA4,0xA6,0xA8,0xAB,0x89,0xC5,0x54,0x2B,0xE3,0x31,\n    0xAB,0x18,0xEC,0x7E,0x41,0x67,0x22,0xB4,0xB7,0x92,0x5C,0x5D,0x5E,0x5F,0x60,0x61,\n    0xD2,0x35,0xB6,0x36,0xE9,0x74,0xDA,0x76,0xE6,0xF7,0x07,0x17,0x27,0x37,0x47,0x47,\n    0x67,0x67,0x73,0x52,0x6A,0x8E,0xEA,0xF5,0xA7,0x0E,0x1D,0x7A,0x7B,0x7C,0xD8,0x3E,\n    0xBF,0x1B,0x00,0x87,0x66,0x7A,0x12,0x16,0x18,0xF6,0xD3,0x6B,0x15,0x17,0x19,0x1B,\n    0x1D,0x1E,0xA2,0x2F,0x51,0xCE,0x51,0xA9,0x37,0x57,0x1B,0x1D,0x1F,0x20,0xAA,0x4A,\n    0x4D,0x5E,0xB3,0x68,0xB2,0x52,0x36,0x5B,0x6B,0xB6,0x5B,0xBC,0x91,0x98,0x99,0xDE,\n    0xEF,0xA5,0xB7,0xE7,0x0D,0x04,0x57,0x30,0x63,0x37,0x39,0x3B,0x3D,0x3F,0x30,0xBB,\n    0x89,0xC6,0xA0,0x24,0xA4,0x86,0x1F,0x3E,0x89,0x19,0xB4,0x68,0x12,0x52,0x74,0x80,\n    0x00,0x00,0x00,0x01,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,\n    0x42,0x08,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x04,0x00,0x38,0x79,0x2D,0x51,0xE7,0x1E,0x78,0xE3,0x06,0x31,0x8C,0x63,0x3E,\n    0x66,0x0C,0xD3,0xA5,0xCE,0x38,0xE3,0x91,0x5C,0xBC,0x84,0x21,0x08,0x42,0x10,0x84,\n    0x20,0xCF,0xD8,0x29,0x8B,0x94,0x1B,0x02,0x31,0x9B,0x9C,0x41,0x04,0x38,0x28,0xA2,\n    0x8A,0x3C,0x29,0xD5,0xEB,0xD7,0xCF,0x30,0x9F,0x63,0x4D,0x4C,0x30,0xF3,0xC8,0x08,\n    0x14,0x51,0x45,0x14,0x5E,0x80,0xB5,0x7D,0x82,0x7B,0x35,0x83,0x0C,0x31,0x43,0x8E,\n    0x38,0xE5,0xD6,0x90,0x41,0x08,0x6A,0xCC,0x24,0x92,0x51,0x23,0xAC,0x35,0x21,0x45,\n    0x21,0x2C,0xB2,0xEB,0x4C,0x30,0xD3,0x4D,0xAE,0xAF,0xB0,0xED,0x76,0xFB,0x9D,0xDE,\n    0xF7,0x7F,0xC1,0xE1,0xB1,0xB2,0xB3,0xF1,0x5A,0x5A,0xF8,0xFC,0x96,0xD6,0xF7,0x1E,\n    0x5F,0x37,0x9E,0xE7,0xD1,0x75,0x77,0xE9,0xBC,0xBD,0xF5,0x7A,0xEF,0xAF,0xFD,0x9E,\n    0xDC,0x0F,0x77,0xBF,0x07,0x0B,0xE1,0xF4,0xFA,0xFD,0xBE,0xFF,0x8A,0xCF,0xCF,0xEB,\n    0xF7,0xFC,0xFE,0xFF,0xBF,0xF5,0xB5,0xD5,0xEC,0xAC,0x19,0x58,0xB2,0x41,0x04,0x36,\n    0xFA,0xD5,0xAB,0x56,0xCB,0xAC,0x59,0xB2,0x8E,0x56,0xA9,0x56,0xBB,0x3E,0x69,0xA6,\n    0xC6,0x29,0x52,0xA2,0x23,0x4F,0x15,0x14,0xCC,0xD9,0x67,0x32,0xDC,0xD2,0x58,0x8A,\n    0x28,0x42,0x10,0x8C,0x2C,0xC2,0xC4,0x51,0x42,0x10,0x84,0x22,0xCC,0xB8,0x33,0x5B,\n    0x6D,0xED,0xED,0xED,0xAD,0xA9,0xDC,0x13,0xA7,0x4C,0x9A,0xC5,0x2A,0x54,0x89,0x12,\n    0x25,0x48,0x63,0x18,0xF3,0x1E,0x79,0x8C,0x98,0x63,0xD1,0xA5,0xA2,0x32,0x52,0x24,\n    0x28,0xCF,0x10,0x84,0x21,0x08,0x44,0x42,0x41,0x24,0x12,0xB1,0xC3,0x1E,0x2C,0x87,\n    0x0C,0x69,0x0A,0x24,0x83,0x00,0x38,0x0A,0x50,0x00,0x02,0x0C,0x08,0x03,0x29,0xC5,\n    0x19,0x06,0x09,0x06,0x42,0x9C,0x80,0xA4,0x2A,0x03,0x88,0x52,0x88,0x06,0x00,0x70,\n    0x14,0xA0,0x00,0x04,0x1D,0xD4,0xBA,0x5D,0xDD,0x55,0xD2,0xE2,0xEE,0x92,0xEE,0xE4,\n    0xB8,0xAB,0xC5,0x55,0xAD,0x6B,0x55,0xAA,0xBF,0xDB,0xCD,0xE2,0xE5,0xAA,0xD6,0xBC,\n    0xC9,0x6A,0xB5,0xA4,0x95,0x55,0x56,0xB5,0x49,0x2A,0xAD,0x24,0xB5,0xAD,0x55,0x55,\n    0x52,0x4B,0x48,0x49,0x1E,0xBC,0x80,0x02,0xE4,0x80,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x07,0xB1,0x20,0x7E,0xD2,0x62,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,\n    0xB1,0x00,0x05,0x24,0x49,0x2C,0x80,0x00,0x00,0x82,0x22,0x0A,0x42,0xD2,0xA4,0x8A,\n    0x2A,0xC8,0x29,0x2D,0x52,0x02,0x92,0x2D,0x51,0x20,0xA5,0x49,0x52,0x55,0x48,0x29,\n    0x2D,0x16,0x54,0x92,0x4A,0x84,0x00,0x14,0x96,0xA9,0x52,0x45,0x15,0x64,0x14,0x96,\n    0xA9,0x01,0x49,0x16,0xB2,0x0A,0x5A,0x4A,0x92,0xAA,0x41,0x48,0x44,0x4A,0x92,0x49,\n    0x50,0x80,0x02,0x20,0x8A,0xAA,0xAA,0xAF,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x42,0xF9,\n    0xB1,0xBC,0x2C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dc5b7a0d5c465997e190eedf369c12652dd2984e1d3058d8730f8a0d8b9d9b19) == 963, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pl_PL.ISO8859-2 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_edd3496b25a8220395915699e108d1d84dc8bb2b059b5c686b47eeccb62cbd03[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x22,0x85,0xF6,0x5C,0x00,0x05,\n    0x90,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x93,0x1C,0x00,0x40,0x4D,0x34,0x62,0x69,0xA1,\n    0x93,0x4C,0x11,0x82,0x68,0xD3,0x4D,0x32,0x62,0x60,0x23,0x4C,0x01,0x0D,0x1A,0x32,\n    0x32,0x34,0x30,0x8C,0x09,0x80,0x23,0x08,0x60,0x04,0xC4,0xD0,0xD3,0x10,0xC6,0xA1,\n    0xA3,0xF7,0xAA,0xA3,0x1A,0x4F,0xD2,0x6D,0x34,0x24,0x7B,0x49,0x3F,0x42,0x8C,0x81,\n    0xA3,0x20,0x1A,0x61,0x32,0x01,0x93,0x02,0x64,0x60,0x13,0x09,0x00,0x68,0x01,0xB5,\n    0x37,0xAA,0x3F,0x6D,0x55,0x00,0x00,0x68,0x01,0x90,0x00,0x00,0x00,0x03,0x20,0x0D,\n    0x19,0x06,0x09,0xB5,0x1A,0x64,0x64,0x34,0xF5,0x1E,0xD5,0x1A,0x0D,0x0C,0x11,0x91,\n    0xFB,0xD5,0x53,0xDF,0xEA,0xA5,0x37,0xA4,0xF5,0x1A,0x9A,0x68,0x34,0x06,0x40,0x00,\n    0x00,0x00,0x62,0x01,0xA0,0x01,0xA6,0x80,0x34,0x06,0xA3,0xD4,0x51,0x27,0x94,0x3D,\n    0x21,0xA6,0x4D,0x1A,0x03,0x40,0x00,0x1A,0x64,0xD0,0x00,0x0D,0x00,0x00,0x0C,0x80,\n    0x68,0xD1,0x84,0x64,0x0C,0x26,0x80,0x06,0x99,0x03,0x4C,0x83,0x10,0x06,0x9A,0x00,\n    0x00,0x00,0xD1,0xA0,0x06,0x9A,0x69,0x90,0x00,0x00,0x1A,0x68,0x68,0x00,0x36,0xA1,\n    0x13,0xFD,0x4A,0xAA,0x80,0x00,0x00,0x00,0x1A,0x03,0x43,0x40,0x03,0x40,0x00,0xC8,\n    0x34,0x03,0x10,0x1A,0x00,0x00,0x01,0xA0,0x00,0x00,0x0D,0x06,0x8D,0x01,0x93,0x26,\n    0x46,0x86,0x81,0x90,0x69,0xA3,0x10,0x00,0x34,0x34,0x0D,0x06,0x80,0x00,0x00,0x00,\n    0x04,0x95,0x2D,0x83,0x16,0xC9,0xE3,0x26,0x73,0xD9,0xF4,0xFD,0xA3,0x6D,0x02,0x83,\n    0x42,0x6E,0xA1,0xB7,0xB8,0x51,0x1C,0x68,0xB4,0x67,0x2A,0x3D,0x22,0x93,0x4A,0xE5,\n    0xB9,0xD3,0x69,0xD4,0xFA,0x85,0x46,0xA5,0x53,0xAA,0x55,0x6A,0xD5,0x7A,0xC5,0x66,\n    0xB5,0x5B,0xAE,0x3A,0x6D,0x18,0xD9,0x19,0x59,0x99,0xDA,0x1A,0x76,0xBB,0x66,0xAD,\n    0xBB,0x5B,0x63,0x63,0x73,0x7B,0x87,0x31,0xCB,0x71,0xB9,0xEA,0x14,0xDD,0xEF,0x77,\n    0xCE,0xCE,0xFB,0xFE,0x97,0x05,0xEB,0x87,0xC5,0x7B,0x7C,0x7D,0x7E,0xE3,0x71,0xDF,\n    0xE0,0x20,0x60,0xA0,0xE1,0x39,0x10,0xB0,0xDA,0x97,0xD7,0xFC,0xCB,0x1C,0xFC,0x14,\n    0x1E,0x87,0x45,0x0B,0xA3,0xCE,0xC6,0xC3,0x32,0xD4,0x33,0x52,0x5E,0x12,0x37,0x5D,\n    0x11,0xAF,0x86,0x8A,0x8B,0x8C,0x67,0x2F,0x2D,0x0F,0xB3,0x6F,0xB4,0x57,0x8E,0xD1,\n    0xAA,0xCD,0xA4,0x57,0x93,0x6E,0xDA,0x2E,0x52,0x54,0x73,0x26,0x8A,0x14,0x38,0x41,\n    0xD2,0xE4,0x9E,0x3E,0x3A,0x0A,0x60,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x71,0x04,0x10,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x04,0x20,0x01,0xA4,0x13,0x46,0x87,0x88,0x76,0x33,0x33,0x37,\n    0x68,0x35,0x60,0x55,0x56,0x40,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCD,0x55,0x15,\n    0x59,0x43,0x6D,0xB6,0x91,0x5C,0x00,0x24,0x9A,0xB5,0x93,0x5F,0x6E,0xDE,0x43,0x70,\n    0xB2,0xCB,0x4A,0x6E,0x64,0xA5,0x77,0x4B,0x95,0x2A,0x39,0x92,0xFD,0x01,0x45,0x16,\n    0xAC,0xB7,0x54,0xC0,0xC2,0x88,0x29,0xA1,0xCB,0x1B,0xAC,0xAD,0xEF,0x8C,0x30,0xC3,\n    0x78,0x0C,0x18,0x38,0x68,0xC9,0x06,0x8E,0x9B,0x36,0x6E,0xBB,0xC2,0x70,0x93,0xC4,\n    0x10,0x41,0xF4,0x04,0x9E,0x24,0x92,0x49,0x3C,0x7F,0xC5,0xE3,0xAF,0xB0,0xF2,0x79,\n    0x7C,0xDE,0x7F,0x45,0x8F,0xA7,0xD5,0x65,0x67,0xEB,0xF6,0x7B,0x7D,0xDE,0xFF,0x87,\n    0xC6,0xD3,0xE5,0x6B,0x6D,0x6F,0x71,0xF3,0xB9,0xBA,0xFA,0x7D,0x7E,0xDF,0x7F,0xC7,\n    0xE7,0xF5,0x77,0x79,0xFB,0xBD,0xBE,0xF7,0x7B,0xFE,0x1F,0x1F,0x97,0xCE,0x77,0xE9,\n    0x3D,0xF5,0xFB,0x7D,0xFF,0x1F,0x9F,0xD7,0xEF,0xF9,0x3F,0xFD,0x9F,0xFF,0x2F,0x19,\n    0x15,0x13,0x13,0x11,0xAD,0xD5,0xC3,0xA8,0xA3,0x36,0x6C,0x99,0x40,0xE7,0x98,0xB1,\n    0x7E,0x7C,0xCE,0x66,0xDE,0x9E,0x9E,0x5E,0x5E,0x1E,0x18,0x11,0x11,0x12,0x68,0x41,\n    0x26,0x82,0x26,0x04,0x44,0x44,0x9A,0x10,0x49,0xA0,0x8A,0x90,0xE5,0x44,0x45,0x4A,\n    0xA6,0x84,0xD0,0x99,0x26,0x95,0x41,0x82,0x4E,0x49,0x26,0x95,0x51,0x26,0xA0,0x20,\n    0x04,0x06,0xD6,0xE6,0xF6,0x8C,0xDA,0x38,0x33,0x64,0xD8,0xC5,0x82,0x99,0x04,0x00,\n    0x00,0x13,0xA8,0x6A,0x27,0x4B,0x9A,0x89,0x49,0x24,0x12,0xD4,0x92,0x95,0x24,0xA8,\n    0x10,0x90,0x95,0x12,0xA5,0xAD,0x6B,0x29,0x21,0x29,0x0A,0x52,0x94,0x4A,0x49,0x20,\n    0x95,0x92,0x52,0xA4,0x95,0x02,0x52,0x54,0x92,0x49,0x52,0xD6,0xB5,0x94,0x90,0x96,\n    0x00,0x04,0x21,0x01,0x00,0x7F,0x9A,0xB1,0x50,0x08,0x43,0x12,0x40,0x42,0x09,0x22,\n    0xD5,0x6B,0x5A,0xA4,0x96,0xAA,0x92,0x5A,0xD5,0x55,0x55,0x52,0x49,0x09,0x23,0xD6,\n    0x90,0x00,0x00,0x64,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xBC,0x81,0xF9,0x49,\n    0xED,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xC2,0x00,0xA9,0x20,0x00,0x00,\n    0x00,0x00,0x52,0x55,0x24,0x54,0xA9,0x52,0x96,0x2A,0x2A,0x10,0x52,0x5A,0x45,0x2A,\n    0x24,0x54,0xA9,0x29,0x16,0x84,0x52,0xC9,0x15,0x29,0x62,0xAC,0x82,0x92,0x22,0x04,\n    0x00,0x00,0x14,0x95,0x49,0x15,0x2A,0x54,0xA5,0x8A,0x8A,0x84,0x14,0x96,0x91,0x4A,\n    0x89,0x15,0x2A,0x4A,0x45,0xA1,0x14,0x89,0x22,0xD2,0x96,0x2A,0xC8,0x29,0x22,0x20,\n    0x40,0x05,0xAD,0x6B,0x5B,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,0x22,0x85,0xF6,0x5C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_edd3496b25a8220395915699e108d1d84dc8bb2b059b5c686b47eeccb62cbd03) == 928, \"Wrong size of locale's blob\");\n\n/* pl_PL.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_f0e3b03897bfe700c56e2a8938782cb400aac1da33b8fe7bd252330497fbc23b[] = {\n    0x5E,0x5B,0x74,0x54,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A,0x74,0x61,0x6B,0x0A,0x6E,0x69,0x65,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f0e3b03897bfe700c56e2a8938782cb400aac1da33b8fe7bd252330497fbc23b) == 26, \"Wrong size of locale's blob\");\n\n/* pl_PL.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_04bd11dbc1948c0fce59ae9684dc5ecd70736f2c6464963763c7394e751f880c[] = {\n    0x50,0x4C,0x4E,0x20,0x0A,0x7A,0xB3,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x34,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_04bd11dbc1948c0fce59ae9684dc5ecd70736f2c6464963763c7394e751f880c) == 35, \"Wrong size of locale's blob\");\n\n/* pl_PL.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_a94defbefcd5688c9d92260928b63853f7da6a4ec5fbf191e62444faa64cfa16[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a94defbefcd5688c9d92260928b63853f7da6a4ec5fbf191e62444faa64cfa16) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pl_PL.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_044c09e7b1b039cda2baf572360f5c6c811692a73b3d45d3d49f43e713e22154[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD7,0xC0,0x07,0xC3,0x00,0x00,\n    0x9F,0xDF,0x88,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x3E,0xBF,0xDE,\n    0xB0,0x29,0x04,0x20,0x00,0x30,0x00,0xE6,0x01,0xAA,0x9F,0xE8,0xA1,0xA6,0x93,0xD4,\n    0x68,0x69,0xA6,0x9E,0x83,0xD4,0xF5,0x35,0x34,0x30,0xC8,0xC0,0x9A,0x60,0x4C,0x86,\n    0x26,0x8C,0x04,0x88,0xA6,0x14,0xD3,0x4C,0x53,0xC8,0x41,0xA1,0xA1,0x92,0x27,0x19,\n    0x5D,0x7D,0x58,0x54,0x72,0x4E,0x74,0x4B,0x34,0xF6,0xB8,0x94,0xE6,0x6A,0xE6,0x39,\n    0x94,0x69,0x56,0xB9,0xF1,0x62,0xF1,0x19,0x2B,0xF6,0x4A,0x57,0x83,0x52,0xDB,0xA1,\n    0x48,0x5E,0x7B,0xCD,0xD0,0xDA,0x20,0x3A,0xB0,0xD4,0x04,0x24,0x10,0xC4,0x1D,0xA3,\n    0xBB,0xBF,0x40,0x27,0xBB,0x0C,0x87,0x9D,0x41,0xFD,0x31,0x63,0xE0,0xC9,0x1D,0x9E,\n    0x12,0xBA,0xD0,0x7C,0xD7,0x7B,0x52,0x77,0x5F,0x63,0x2D,0xD6,0xEE,0x7B,0x54,0xEE,\n    0x47,0x7C,0x8B,0x91,0x08,0xDD,0x78,0xCE,0x51,0x82,0x6D,0xB6,0xAF,0xC1,0x67,0xF4,\n    0x8A,0x3F,0xD9,0xD5,0xC9,0x82,0xC0,0x98,0xDA,0x69,0x43,0x71,0x41,0xAA,0xC7,0x10,\n    0x78,0xA8,0x68,0x3A,0x69,0x02,0xDB,0x2D,0x69,0xE7,0x1A,0xD5,0xEA,0xBC,0xDB,0x42,\n    0x6A,0x4A,0xFC,0xE5,0x72,0xEA,0x0A,0xC0,0xD9,0x99,0x86,0x67,0x11,0x93,0xC5,0x41,\n    0xB4,0xB2,0xF6,0x58,0x32,0x06,0xB9,0xDD,0xF0,0xF1,0x5B,0x66,0x37,0x46,0x51,0x6C,\n    0xBD,0x08,0xF7,0x6C,0xC5,0x1A,0x84,0xF4,0x6C,0x63,0xDD,0x0D,0x66,0x69,0xCA,0xC4,\n    0x28,0x47,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x86,0xBE,0x00,0x3E,0x18\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_044c09e7b1b039cda2baf572360f5c6c811692a73b3d45d3d49f43e713e22154) == 269, \"Wrong size of locale's blob\");\n\n/* pl_PL.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_8a8280b9ba6e218267889e798285941cf8ce4be7316faee62fb17fd91f628fab[] = {\n    0x50,0x4C,0x4E,0x20,0x0A,0x7A,0xC5,0x82,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,\n    0x34,0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8a8280b9ba6e218267889e798285941cf8ce4be7316faee62fb17fd91f628fab) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pl_PL.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_bbca7d747ff01a5635a5469dbb6ec69558734b0ec070068a21261d27526659ef[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x07,0x17,0x13,0x19,0x00,0x00,\n    0x9F,0xDF,0xEC,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x3E,0xBF,0xDE,\n    0xB0,0x16,0x00,0x00,0x08,0x00,0x10,0x06,0x00,0x30,0x00,0xE6,0x01,0xAA,0x9F,0xE8,\n    0xA1,0xA6,0x93,0xD4,0x68,0x69,0xA6,0x9E,0x84,0xFD,0x4F,0x49,0x00,0xC1,0xA6,0x8D,\n    0x34,0xC2,0x62,0x64,0xC0,0x40,0xD3,0x04,0x88,0x88,0xD4,0xD1,0x3C,0x4C,0x84,0x1A,\n    0x69,0xEA,0x19,0x34,0x89,0xC6,0x57,0x5F,0x56,0x15,0x1C,0x92,0x9A,0x25,0x9A,0x77,\n    0x5C,0x4A,0x7C,0x9A,0xB9,0x8E,0x65,0x1A,0x55,0xAE,0x74,0xB1,0x69,0x19,0x2B,0xF2,\n    0x4F,0x75,0xE0,0xDB,0xDB,0x74,0x37,0x85,0xE7,0x9C,0xDD,0x0D,0xA2,0x03,0x8B,0x0D,\n    0x40,0x42,0x41,0x0C,0x41,0xF5,0x1D,0x9D,0xF8,0x01,0x3D,0x98,0x64,0x3A,0xEA,0x0F,\n    0xD9,0x8B,0xCF,0x83,0x82,0x3A,0xBA,0x4A,0xE9,0x51,0xF2,0x5B,0x5F,0x59,0xD5,0x7D,\n    0x0C,0xBF,0xA5,0x9C,0xF5,0xB8,0xD8,0x8D,0xB8,0x16,0x22,0x11,0xAA,0xEF,0x8C,0xA2,\n    0x89,0x8D,0xA7,0x6D,0xCB,0x1E,0xC8,0xA3,0xFC,0x9C,0xDC,0x94,0x54,0x26,0x34,0x9A,\n    0xD4,0xD4,0x50,0x66,0xB0,0xC0,0x1E,0x0A,0x1A,0x0E,0x79,0x40,0xB4,0xE1,0x9D,0x7C,\n    0x61,0x75,0xCF,0x35,0xE2,0xFC,0x89,0xB8,0x95,0xF7,0xE9,0x62,0xCA,0x0B,0xA0,0x6C,\n    0xC4,0xA6,0x26,0xF1,0x93,0xBD,0x41,0xA4,0xB2,0xD7,0xAA,0x32,0x06,0xB9,0x59,0xEE,\n    0xEF,0x75,0xF8,0x8D,0xD5,0x95,0x5A,0x2E,0x24,0x7B,0xB6,0x60,0x8C,0xC2,0x79,0xB6,\n    0x36,0xF5,0x44,0x2F,0x22,0xF2,0x31,0x66,0x71,0xC8,0x5B,0x88,0x5F,0xE2,0xEE,0x48,\n    0xA7,0x0A,0x12,0x00,0xE2,0xE2,0x63,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bbca7d747ff01a5635a5469dbb6ec69558734b0ec070068a21261d27526659ef) == 280, \"Wrong size of locale's blob\");\n\n/* pt_BR.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_e1d0bf174e0649df79922610491ef983506c05bf9edbb9a5e2a2f44c8cf4e226[] = {\n    0x42,0x52,0x4C,0x20,0x0A,0x52,0x24,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e1d0bf174e0649df79922610491ef983506c05bf9edbb9a5e2a2f44c8cf4e226) == 35, \"Wrong size of locale's blob\");\n\n/* pt_BR.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_dc5d319d959204180c09dece76be1c2e1250e771e0724751b1c28919e716b6bb[] = {\n    0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dc5d319d959204180c09dece76be1c2e1250e771e0724751b1c28919e716b6bb) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pt_BR.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_9fd3a984765d7c46c8caf874aba082866abc0d554cd8bd246552ea25603deb48[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD3,0xDA,0xA6,0xC4,0x00,0x00,\n    0x38,0xDF,0x81,0x00,0x10,0x42,0x00,0x80,0x10,0x25,0x53,0xAC,0x70,0x36,0xE7,0x9F,\n    0x50,0x20,0x80,0x30,0x00,0xF6,0x0C,0x52,0x64,0x1A,0x69,0x91,0x84,0xC8,0xC0,0x40,\n    0x60,0xD4,0xD4,0xF2,0x8D,0x34,0x34,0x34,0x00,0x34,0x1A,0x00,0x91,0x24,0xD2,0x64,\n    0x8F,0xD2,0x9F,0xA9,0xA8,0xDA,0x8D,0x3D,0x47,0x85,0x1E,0xA7,0xA8,0xE2,0xD5,0xE6,\n    0x6E,0xDD,0x03,0xC8,0x40,0x95,0x9F,0x11,0x05,0xF9,0xA2,0x20,0xE4,0x83,0x18,0x18,\n    0x62,0x04,0x08,0x82,0x3D,0x54,0x98,0x0B,0x3E,0x1E,0xEE,0xCC,0x2B,0xAC,0x3D,0xC9,\n    0xA5,0xDB,0x23,0xD9,0x64,0xC9,0x0C,0x6C,0x8A,0x6F,0x9F,0xDD,0xA9,0x16,0xA1,0xAF,\n    0x0D,0x03,0x60,0x0D,0xA4,0x31,0x63,0xC3,0x08,0x39,0xEE,0xAF,0xAD,0xEB,0x54,0xEE,\n    0x67,0x37,0x0F,0x45,0x82,0x98,0xD5,0x99,0xD3,0x19,0x1A,0x1B,0x22,0x65,0x4F,0xA3,\n    0x5E,0xC3,0xE2,0x43,0xE8,0xBA,0x26,0x6E,0xBC,0x5F,0xE8,0xA3,0x62,0x45,0x2B,0x42,\n    0xB1,0x22,0xD4,0x11,0xB0,0xCC,0xB4,0xC6,0x62,0x8B,0x66,0x32,0xD8,0x1D,0xBF,0x07,\n    0xF1,0xD5,0x0C,0xB0,0x81,0x6C,0x77,0x22,0xA4,0x8F,0xD5,0xD7,0x3A,0x5C,0x86,0x42,\n    0x20,0x1A,0x25,0x26,0x50,0xA4,0xAF,0xAF,0xE4,0x8E,0x49,0x9C,0x98,0x0C,0xD0,0x30,\n    0x67,0x2B,0xCA,0xE6,0x34,0x1E,0x40,0x60,0xD8,0x5D,0xC9,0x14,0xE1,0x42,0x43,0x4F,\n    0x6A,0x9B,0x10\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_9fd3a984765d7c46c8caf874aba082866abc0d554cd8bd246552ea25603deb48) == 243, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pt_BR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_b52f0c4c16fea8179e7e962a38af1154d264595ee02f7688806a463fb5650944[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x8B,0xB5,0xAF,0x5E,0x00,0x00,\n    0x38,0xDF,0x94,0x00,0x10,0x42,0x00,0x80,0x10,0x25,0x53,0xAC,0x70,0x36,0xE7,0x9F,\n    0x50,0x20,0x80,0x08,0x00,0x30,0x00,0xF6,0x01,0x86,0x46,0x9A,0x69,0x91,0x84,0xC8,\n    0xC1,0x34,0x06,0x06,0xA6,0xA7,0x94,0x69,0xA0,0x1A,0x00,0x1A,0x0D,0x00,0x24,0x51,\n    0x32,0x99,0x23,0xF4,0xA7,0xEA,0x6A,0x36,0xA3,0xD4,0xF5,0x36,0x14,0x7A,0x9E,0xA1,\n    0xA5,0xA3,0x8C,0xDB,0xB2,0x07,0x10,0x79,0x2B,0x2D,0xE0,0x0B,0xEF,0x34,0x41,0xC1,\n    0x06,0x30,0x30,0xC3,0xC8,0x11,0x04,0x72,0xA8,0x30,0x16,0x7C,0x3D,0xDD,0x97,0xD7,\n    0x58,0x3D,0xC9,0x25,0xDB,0x13,0xD9,0x62,0xC8,0x8C,0x6C,0x85,0x37,0xCF,0xC4,0xD2,\n    0x26,0x86,0xB2,0x68,0x1B,0x00,0x6D,0x21,0x8B,0x0E,0x18,0x40,0xE7,0xBA,0xBA,0xB7,\n    0x2D,0x53,0xB5,0x9C,0xDA,0x3D,0x15,0xEA,0x43,0x56,0x67,0x4C,0x22,0x68,0x6C,0x89,\n    0x15,0x3E,0x8D,0x7B,0x0F,0x88,0x8F,0xA2,0xE8,0x99,0xBA,0xCA,0xEF,0x45,0x0D,0x88,\n    0x94,0xAD,0x0A,0xC2,0x24,0xD0,0x43,0x61,0x98,0xE9,0x84,0x85,0x09,0xC8,0x64,0xE0,\n    0x39,0xFC,0x1F,0xA7,0x54,0x32,0xC2,0x02,0xD8,0xEE,0x42,0xA4,0x4F,0xC5,0xD7,0x3A,\n    0x5A,0x86,0x41,0x10,0x06,0x88,0xC5,0x94,0x29,0x1B,0xAB,0xF7,0x13,0x92,0x47,0x25,\n    0xE3,0x34,0x0B,0xD9,0xCA,0xF2,0xB5,0x8D,0x2F,0xE4,0x64,0x51,0x7F,0x8B,0xB9,0x22,\n    0x9C,0x28,0x48,0x45,0xDA,0xD7,0xAF,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b52f0c4c16fea8179e7e962a38af1154d264595ee02f7688806a463fb5650944) == 248, \"Wrong size of locale's blob\");\n\n/* pt_PT.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_e7a817c936fbd7e6e1dd055cf8f69ea7c6bf2b28821da7b647b63ba8835c2bd6[] = {\n    0x5E,0x5B,0x73,0x53,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e7a817c936fbd7e6e1dd055cf8f69ea7c6bf2b28821da7b647b63ba8835c2bd6) == 18, \"Wrong size of locale's blob\");\n\n/* pt_PT.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_bc4573b3d45ddc9ac6bede1a3c6892b875ae7eeb06ad97bbaab69d44d2431329[] = {\n    0x45,0x55,0x52,0x20,0x0A,0x45,0x75,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bc4573b3d45ddc9ac6bede1a3c6892b875ae7eeb06ad97bbaab69d44d2431329) == 35, \"Wrong size of locale's blob\");\n\n/* pt_PT.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_281fa1b1c2d58e14644313b0b819a1112ddb4e59c9c9c8a6c5bb365badf4cc1b[] = {\n    0x2C,0x0A,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_281fa1b1c2d58e14644313b0b819a1112ddb4e59c9c9c8a6c5bb365badf4cc1b) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pt_PT.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_e11aae4171ca53cb05e472cc5f9cf959fb384398c3ae300d9a08bc073b9dd5e4[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x78,0x3F,0x0D,0x96,0x00,0x00,\n    0x35,0x5F,0x81,0x00,0x10,0x42,0x02,0x80,0x10,0x25,0x53,0x88,0x70,0x37,0xE7,0xBF,\n    0x50,0x20,0x80,0x30,0x00,0xEC,0x01,0xA9,0xA9,0xE5,0x0D,0x00,0x00,0x0C,0x81,0xA6,\n    0x81,0x86,0x46,0x9A,0x69,0x91,0x84,0xC8,0xC1,0x34,0x06,0x04,0x89,0x13,0x53,0x4D,\n    0x4D,0xA9,0xE4,0xD4,0xF5,0x1A,0x69,0x8D,0x34,0xCA,0x7A,0x9E,0xA5,0x65,0xB3,0x4C,\n    0xEC,0xE1,0x03,0x48,0x38,0x87,0x04,0x22,0xC9,0xE8,0x83,0x92,0x0B,0x58,0x59,0x87,\n    0x10,0x22,0x52,0x99,0x0B,0x15,0x4A,0x2C,0xDE,0xFD,0x3E,0x17,0xE5,0x0F,0x32,0x67,\n    0x3E,0x86,0x2B,0xA3,0x24,0x31,0xB2,0x26,0x8B,0x73,0xEF,0x97,0x00,0x5D,0x5A,0x06,\n    0xC1,0x36,0x98,0xB0,0xD9,0x84,0x1B,0xFC,0xAA,0xEF,0xAD,0x66,0x9D,0x6C,0xDE,0xB1,\n    0xF9,0x56,0x95,0x0C,0x27,0xDA,0xDB,0x99,0x23,0x73,0x64,0x54,0x5E,0x77,0x2F,0x32,\n    0x1C,0x0F,0x35,0xAA,0xAC,0xD5,0x6A,0x8E,0xDC,0xFD,0x99,0x1A,0x12,0x2F,0xC3,0xDC,\n    0xC2,0x24,0x51,0x04,0x7A,0x19,0xF7,0xA6,0x35,0x0A,0x29,0x50,0xCA,0x40,0xE9,0xF8,\n    0x7F,0x16,0x03,0x26,0x40,0xB4,0xC4,0x82,0x28,0x33,0x65,0xD4,0x2C,0xF1,0x6F,0x14,\n    0x32,0x02,0x01,0x8A,0x52,0x64,0xC2,0xD1,0x96,0xCE,0xCB,0xFF,0x64,0x54,0x7D,0x14,\n    0x37,0x2E,0x19,0xE4,0x2E,0x66,0xEB,0x97,0x16,0x34,0xAB,0x39,0x2F,0xF1,0x77,0x24,\n    0x53,0x85,0x09,0x07,0x83,0xF0,0xD9,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e11aae4171ca53cb05e472cc5f9cf959fb384398c3ae300d9a08bc073b9dd5e4) == 248, \"Wrong size of locale's blob\");\n\n/* pt_PT.ISO8859-15 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_61fdf1f09b1501328a04478a6ee18de17ae59146110ea60fc2dda842023437f0[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xA4,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_61fdf1f09b1501328a04478a6ee18de17ae59146110ea60fc2dda842023437f0) == 34, \"Wrong size of locale's blob\");\n\n/* pt_PT.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_1f45103359b5c71181265ce514607b2b544e82371304285db28200ced39c2621[] = {\n    0x45,0x55,0x52,0x20,0x0A,0xE2,0x82,0xAC,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1f45103359b5c71181265ce514607b2b544e82371304285db28200ced39c2621) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed pt_PT.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_7fb889cbfb627eab458d9f807b43e90ece60ce33c8269afbc950904b0b84e774[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x8A,0x1D,0x33,0xCB,0x00,0x00,\n    0x35,0x5F,0x94,0x00,0x10,0x42,0x02,0x80,0x10,0x25,0x53,0x88,0x70,0x37,0xE7,0xBF,\n    0x50,0x20,0x80,0x08,0x00,0x30,0x00,0xEC,0x01,0xA9,0xA9,0x90,0xF5,0x00,0x00,0x0C,\n    0x9A,0x1A,0x68,0x0C,0x64,0xD3,0x20,0x64,0xD0,0xC8,0x32,0x34,0xC0,0x8C,0x12,0x24,\n    0x8D,0x4C,0x51,0xFA,0xA6,0xD3,0x53,0xD4,0x69,0xA6,0x34,0xD3,0x29,0xEA,0x7A,0x8A,\n    0xCB,0x66,0x25,0x36,0x35,0x41,0x84,0x1C,0x41,0xA4,0x22,0xC9,0xEA,0x50,0xE0,0x81,\n    0x98,0x34,0x87,0x10,0x22,0x42,0x17,0x0A,0xD1,0x4A,0x8D,0x2F,0x7E,0x5F,0x0B,0xF2,\n    0x87,0x99,0x51,0xCB,0x99,0x8A,0xE6,0xC9,0x0C,0x6C,0x8A,0x91,0x4C,0xFB,0x65,0xC0,\n    0x17,0x46,0x81,0xB0,0x4D,0xA6,0x2C,0x36,0x61,0x06,0xFF,0x0A,0xCB,0xEC,0x59,0xA7,\n    0x63,0x37,0xB0,0x7E,0x15,0x0A,0xC6,0x15,0x75,0xA7,0x16,0x48,0xDC,0xD9,0x15,0x97,\n    0x9D,0x8B,0xCC,0x87,0x03,0xCD,0x6A,0xAC,0x35,0x5A,0xA3,0xAF,0x2F,0x46,0x46,0x84,\n    0x8B,0xF0,0xF6,0x30,0x89,0x13,0x41,0x1E,0x46,0x7D,0x69,0x8D,0x62,0x89,0xD6,0x32,\n    0x70,0x39,0xFD,0x9F,0xA5,0xC0,0xCA,0x88,0x16,0x98,0x90,0x44,0xC6,0x6C,0xBA,0x05,\n    0xDD,0xE9,0x6A,0x19,0x01,0x00,0xC5,0x29,0x32,0xA0,0xA0,0xCA,0x55,0x75,0xFF,0x92,\n    0x2B,0x3E,0x49,0x9B,0x9C,0x46,0x78,0x0E,0x2C,0xDD,0x7A,0xDA,0xC6,0x97,0xF2,0x2D,\n    0x28,0xBF,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x22,0x87,0x4C,0xF2,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7fb889cbfb627eab458d9f807b43e90ece60ce33c8269afbc950904b0b84e774) == 253, \"Wrong size of locale's blob\");\n\n/* ro_RO.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_e7ffe885619d0ee73b9fe45c1e333f5f232dc51775a35681c8630bc08fd988f2[] = {\n    0x5E,0x5B,0x64,0x44,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e7ffe885619d0ee73b9fe45c1e333f5f232dc51775a35681c8630bc08fd988f2) == 18, \"Wrong size of locale's blob\");\n\n/* ro_RO.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_6040811540d3adc0457822b0cc6e273390bcd5bdc5909ed79f513697c98baee0[] = {\n    0x52,0x4F,0x4C,0x20,0x0A,0x4C,0x65,0x69,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6040811540d3adc0457822b0cc6e273390bcd5bdc5909ed79f513697c98baee0) == 36, \"Wrong size of locale's blob\");\n\n/* ro_RO.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_57e3b9b67a82983255de750d3a6adc45958c16c6c3a3e7a3991304c770271b06[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_57e3b9b67a82983255de750d3a6adc45958c16c6c3a3e7a3991304c770271b06) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ro_RO.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_a3cacb04fd781aeefad7bdb671dad99572bdb1bdae848a3b85f73a96e556c43e[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xE5,0x78,0x0E,0xA6,0x00,0x00,\n    0x37,0xDF,0x81,0x80,0x10,0x42,0x01,0x00,0x10,0x25,0x77,0x89,0x70,0x3E,0xA7,0xDE,\n    0x00,0x18,0x00,0x00,0x01,0x30,0x00,0xF6,0x35,0x0D,0x12,0x3D,0x46,0x46,0x80,0xD1,\n    0xA0,0x00,0x68,0x0D,0x4D,0x1A,0x9E,0xA0,0x00,0x00,0x1E,0xA3,0x40,0x09,0x11,0x14,\n    0x1A,0x00,0xD0,0xD0,0x1A,0x06,0x9A,0x7B,0xBD,0xC5,0x63,0xF5,0x0A,0x41,0x49,0x90,\n    0x70,0xD0,0xF5,0xD8,0xCC,0x23,0x08,0x92,0x58,0xCC,0x2A,0x34,0x21,0x97,0x6E,0x12,\n    0x10,0x7B,0x82,0x55,0x79,0xAD,0x9B,0x0B,0x0A,0x50,0xF4,0x6D,0xDC,0x71,0x0B,0x4E,\n    0x2D,0x48,0xC6,0xC8,0x76,0x7B,0xEB,0xDA,0xF3,0x28,0x97,0x41,0xA1,0x31,0x80,0x31,\n    0xA4,0xC0,0x85,0x12,0xA0,0xC0,0x1A,0xD5,0x53,0x30,0x10,0x36,0xBD,0xAB,0xAD,0xAE,\n    0x78,0x42,0x20,0xBD,0x5E,0xA4,0xEF,0xCC,0x76,0xA9,0xE7,0xAD,0x7D,0xE4,0xB4,0xD3,\n    0x18,0xA1,0x39,0xCF,0x25,0x11,0x26,0xF9,0x25,0x2A,0x93,0x06,0x01,0xD3,0x14,0xE1,\n    0xFB,0xFD,0x1D,0x2E,0x79,0x34,0x19,0x22,0x21,0x85,0x83,0x33,0x0A,0x1E,0xC0,0x18,\n    0xB0,0x31,0x78,0x40,0x94,0x25,0x69,0xA9,0x8F,0xD2,0x90,0x68,0xA1,0x04,0x0E,0x85,\n    0xD8,0x95,0x2D,0x24,0xC2,0xE2,0x4B,0x17,0x85,0xD8,0x78,0x8C,0xCB,0xF8,0xF0,0x6F,\n    0x9A,0x99,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x87,0x2B,0xC0,0x75,0x30\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a3cacb04fd781aeefad7bdb671dad99572bdb1bdae848a3b85f73a96e556c43e) == 237, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ro_RO.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ef96b314f98f5109ada20a7bb2f405661086aa65389b924703fa1fe44deccec5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x5D,0xF5,0x51,0x59,0x00,0x00,\n    0x37,0xDF,0xD4,0x00,0x10,0x42,0x01,0x00,0x10,0x25,0x77,0x89,0x70,0x3E,0xA7,0xDE,\n    0x00,0x08,0x00,0x18,0x00,0x0E,0x00,0x30,0x00,0xF6,0x35,0x86,0x89,0x1A,0x34,0x34,\n    0x06,0x8D,0x00,0x03,0x40,0x0D,0x4D,0x09,0xEA,0x00,0x1A,0x00,0x1A,0x34,0x00,0x12,\n    0x22,0x2A,0x7A,0x9B,0x49,0xA3,0x47,0xA9,0xE9,0x94,0xDA,0x8F,0x41,0x3D,0x4F,0x53,\n    0xD4,0x73,0xA5,0x64,0xC7,0x64,0x1A,0x41,0xA4,0x87,0xB5,0x48,0x73,0x73,0x5A,0xC1,\n    0xA0,0x88,0xE3,0x85,0x61,0xA6,0x90,0x6B,0x2E,0x14,0x22,0x20,0xE5,0x03,0xAA,0xE9,\n    0x5B,0x7D,0x0B,0x4A,0x50,0xEA,0x71,0xF5,0x2F,0x0B,0x8B,0xDA,0x91,0x8D,0x90,0xED,\n    0xED,0xCF,0x2C,0xCB,0x04,0xBE,0x06,0x84,0xC6,0x00,0xC6,0x93,0x02,0x14,0x4A,0x83,\n    0x40,0x6B,0x85,0x4F,0x10,0x20,0x6D,0x76,0x58,0x5D,0x5D,0xD0,0x84,0x41,0x9A,0xCD,\n    0x49,0xF3,0x88,0xEE,0x53,0x8F,0x9A,0xFB,0xE4,0xBC,0xA9,0xAC,0x50,0x9D,0xC7,0x42,\n    0x88,0x93,0xDA,0x49,0x4A,0xA4,0xC1,0xA0,0x64,0x65,0x20,0x6E,0x9D,0xBF,0x33,0x1A,\n    0x4B,0x06,0x49,0x4A,0x4C,0x28,0x19,0x98,0x40,0xE9,0xC0,0xC5,0x22,0x25,0x5A,0xE2,\n    0x40,0x85,0x66,0x88,0x9F,0x55,0x20,0xD1,0x42,0x08,0x1D,0x0C,0x35,0x2A,0x5C,0x49,\n    0xA6,0x04,0x96,0xAF,0xA5,0x90,0xF5,0x19,0x67,0xE1,0xB2,0xD8,0xFB,0x61,0x61,0xB2,\n    0x4F,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x17,0x7D,0x54,0x56,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ef96b314f98f5109ada20a7bb2f405661086aa65389b924703fa1fe44deccec5) == 252, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.CP1251 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_f91843d74c2b738ca8324e75715feea75b5927a913db0cf7c6d28ebe7f82a228[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x17,0x8E,0x40,0xBC,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x97,0x00,0x04,0x99,0x30,0x9A,0x64,0x69,0xA6,\n    0x21,0x88,0x03,0x20,0x64,0x00,0xC4,0xC9,0x91,0xA6,0x11,0x84,0x06,0x9A,0x61,0x00,\n    0xC9,0xA1,0xA0,0xC1,0x0C,0x23,0x10,0xC4,0xC4,0xC0,0x86,0x08,0x31,0x0D,0x0D,0x03,\n    0x04,0x60,0x80,0x61,0x06,0x80,0xD3,0x02,0x01,0x80,0x11,0xA3,0x07,0xFA,0xA4,0xFF,\n    0x53,0x4A,0x4D,0xBF,0x55,0x02,0x08,0x64,0xD1,0xA3,0x4C,0x8D,0x1A,0x06,0x4C,0x13,\n    0x43,0x41,0xA6,0x81,0x93,0x04,0xD1,0x89,0xA6,0x86,0x80,0xC8,0x64,0x01,0xA0,0x03,\n    0x00,0x01,0x0C,0x86,0x46,0x21,0x90,0x68,0x64,0x68,0x00,0x64,0x00,0x03,0x04,0x62,\n    0x00,0x01,0xEA,0x69,0xE8,0x20,0x1A,0x07,0xA9,0xE8,0x8C,0xFF,0xCA,0xA8,0x7A,0x8F,\n    0x49,0x3D,0x4D,0x10,0x00,0x4C,0x00,0x98,0x00,0x13,0x08,0xC1,0x31,0xA0,0x00,0x00,\n    0x98,0x02,0x69,0x80,0x09,0x80,0x00,0x00,0x0D,0x00,0x00,0x00,0x9E,0x89,0x80,0x00,\n    0x09,0x93,0x06,0x80,0x00,0x00,0x00,0x98,0x13,0xD0,0x00,0x00,0x00,0xD0,0x01,0x8F,\n    0xFD,0x54,0xAA,0x04,0xC0,0x26,0x00,0x26,0x02,0x62,0x30,0x02,0x62,0x60,0x9A,0x60,\n    0x08,0xD1,0x84,0xD3,0x11,0x89,0x80,0x10,0xC1,0x0D,0x1A,0x61,0x0C,0x8C,0x98,0x26,\n    0x02,0x60,0x20,0x69,0x93,0x26,0x98,0x26,0x26,0x26,0x11,0x88,0x19,0x0C,0x02,0x64,\n    0xC9,0x80,0x10,0x30,0x04,0xC8,0xD3,0xCD,0x53,0xD4,0xF6,0x0F,0x10,0x11,0x12,0x13,\n    0x14,0x15,0xF8,0x0B,0x0B,0x8C,0x0C,0x8D,0x0D,0x8E,0x0E,0x8F,0x0F,0xFC,0x48,0x08,\n    0x48,0x88,0xC9,0x09,0x49,0x89,0xCA,0x0A,0x4A,0x8A,0xFA,0xCB,0x4B,0x8B,0xC0,0x7C,\n    0xC2,0xFA,0x19,0x6B,0x85,0x37,0x00,0x74,0x77,0xD4,0x7C,0x7C,0x7E,0x80,0x83,0xFF,\n    0x43,0xD0,0x46,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0xFB,0x27,0x27,0xA8,0x28,0xA9,0x29,\n    0xAA,0x2A,0xAB,0x7D,0xD5,0xF4,0x82,0x01,0x59,0x5A,0x5F,0x60,0x61,0x62,0xFC,0xB1,\n    0xB2,0x32,0xB3,0x33,0xB4,0x34,0xB5,0x35,0xB6,0x36,0xB7,0x37,0xB8,0x38,0xB9,0x39,\n    0xBA,0x3A,0xBB,0x3B,0xBC,0xBD,0x3D,0xBE,0x3E,0xBC,0x81,0x7E,0x7F,0x80,0x81,0x82,\n    0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,\n    0x93,0x94,0xFD,0x02,0x05,0x2D,0xFB,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,\n    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xFE,0x55,0x55,0xFF,0x6B,0x2B,\n    0x6B,0xAB,0xEC,0x01,0x83,0xB2,0xB3,0xB4,0xB5,0xB6,0x09,0x71,0x75,0x77,0x79,0x7B,\n    0x7D,0x7F,0x81,0x83,0x85,0x87,0x89,0x8B,0x8D,0x8F,0x91,0x93,0x95,0x97,0x99,0x9B,\n    0x9D,0xFE,0xF6,0xA5,0xA4,0x4B,0xE9,0xA6,0x47,0xDD,0xEF,0xA5,0x50,0xA6,0xA7,0xE9,\n    0x57,0x58,0x99,0x32,0x6F,0x90,0x43,0xF1,0x59,0x50,0x9D,0x38,0x3F,0xBF,0xE5,0x5D,\n    0x6D,0x75,0x7A,0x08,0x57,0xD8,0x58,0xA2,0x54,0x59,0x21,0x62,0x8A,0x3F,0xD5,0x37,\n    0xC5,0x7F,0x80,0x42,0x88,0x44,0x44,0x44,0x44,0x94,0x44,0x44,0x44,0x44,0x44,0x44,\n    0x44,0x44,0x44,0x44,0x48,0x56,0x10,0xA1,0x3E,0xF5,0x81,0xAB,0x36,0x6D,0x66,0x88,\n    0xC6,0x30,0x9C,0x84,0xC6,0x31,0xCB,0x83,0x5A,0x22,0x22,0x22,0x22,0x22,0x22,0x22,\n    0x22,0x22,0x14,0xEE,0xED,0x2D,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x48,0x00,0x00,0x12,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x93,0xEC,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x4A,0x42,0x49,0x23,0xC6,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x0C,0x80,0xD7,0x76,\n    0x87,0x1E,0x7D,0xDF,0xFA,0xD6,0xE6,0xEA,0xF5,0x05,0xBD,0xBF,0xF2,0xBE,0xD4,0xE0,\n    0x00,0x38,0xE3,0x84,0x44,0x7F,0xE6,0x31,0x8D,0x7C,0x79,0xF2,0x52,0x52,0x24,0xE4,\n    0xA4,0xA4,0xE4,0x48,0x91,0x23,0xFE,0xAA,0xCA,0x47,0x1C,0x51,0x45,0x14,0x51,0x45,\n    0x1F,0x6E,0x52,0x4E,0x44,0xA2,0x59,0x08,0x42,0x38,0xA3,0x8E,0x38,0xE3,0x84,0x21,\n    0x08,0x42,0x38,0xE3,0x8E,0x38,0xE3,0x84,0x21,0x08,0x10,0x84,0x1C,0x18,0x40,0x00,\n    0x00,0x4A,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF2,0x84,0x03,0xAF,0x08,0x71,\n    0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,\n    0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x12,0x20,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x02,0xF1,\n    0xC8,0x17,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f91843d74c2b738ca8324e75715feea75b5927a913db0cf7c6d28ebe7f82a228) == 803, \"Wrong size of locale's blob\");\n\n/* ru_RU.CP1251 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_e51c5fb2e12085b5291cf9f4310f6a57c259b7f75e39aa3651e886b2f19d81d1[] = {\n    0x5E,0x5B,0xE4,0xC4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xED,0xCD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE4,0xE0,0x0A,0xED,0xE5,0xF2,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e51c5fb2e12085b5291cf9f4310f6a57c259b7f75e39aa3651e886b2f19d81d1) == 27, \"Wrong size of locale's blob\");\n\n/* ru_RU.CP1251 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_7c5a63e19fc73050e5c6866c108bc4b28d10c5ff8d2329867dfa770bd1e03995[] = {\n    0x52,0x55,0x42,0x20,0x0A,0xF0,0xF3,0xE1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7c5a63e19fc73050e5c6866c108bc4b28d10c5ff8d2329867dfa770bd1e03995) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.CP1251 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_3d169b82d55d7ff3e947a735270760709e0d6c87813c3e167538668161099b4d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD7,0x9F,0x8D,0x59,0x00,0x00,\n    0xB2,0x5F,0x01,0x80,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x7E,\n    0x7F,0xFD,0x85,0xB0,0x00,0xE6,0x01,0xAA,0x7E,0x4A,0x4D,0x92,0x1A,0x68,0x0D,0x1A,\n    0x66,0xA6,0xF4,0xA1,0xA0,0x0C,0x00,0xC9,0xA6,0x83,0x21,0x82,0x1A,0x62,0x34,0x60,\n    0x62,0x4D,0x35,0x32,0x68,0xD4,0x69,0x1A,0x19,0x34,0xD1,0x90,0x6D,0x12,0xC3,0xBE,\n    0xD5,0xC3,0x6F,0xC9,0x1F,0xDE,0x33,0xAA,0xFA,0x7B,0xCD,0x40,0xB2,0x53,0x06,0x2D,\n    0x22,0xC2,0xB4,0xAA,0x4B,0x39,0xE8,0x72,0x4E,0xB3,0xA9,0x57,0x18,0xB6,0x9B,0x6E,\n    0x83,0x8B,0xC6,0x23,0xA8,0xE7,0x70,0x88,0xE8,0x0E,0x01,0x08,0x11,0x85,0x28,0x31,\n    0xCA,0x43,0x88,0xC5,0xF2,0x77,0x14,0x51,0x8A,0x0E,0xB8,0x1D,0x7A,0xEF,0x10,0x7F,\n    0x07,0xB0,0x62,0xC7,0x90,0x5C,0xFB,0x75,0xF8,0xE6,0x52,0x3F,0x5D,0x0C,0x8D,0xF1,\n    0x70,0x8D,0xAD,0xEA,0x10,0x77,0x2B,0xA6,0xA6,0x2B,0xB4,0xB2,0x57,0x02,0x8D,0xDE,\n    0x66,0xA0,0xE4,0x3B,0x0B,0x1A,0x6A,0x7C,0x09,0x4D,0x33,0x34,0x03,0xE1,0xE5,0xA1,\n    0x8D,0x99,0x69,0x43,0x03,0x04,0x98,0xD1,0xEF,0xBA,0xE6,0x63,0x22,0x82,0x8C,0xE0,\n    0x55,0xA4,0x37,0xE7,0x02,0xA0,0x24,0x02,0xC2,0x80,0x52,0x6C,0x3C,0xC2,0xCE,0x9A,\n    0x63,0x6A,0xD2,0x25,0x5D,0xB3,0xA6,0x69,0x4F,0x90,0xB1,0xDC,0x85,0x7B,0xA8,0x60,\n    0xC5,0x99,0xC1,0x52,0xB2,0x7D,0x8E,0x24,0x5F,0x40,0x90,0xC0,0xDF,0xFC,0x5D,0xC9,\n    0x14,0xE1,0x42,0x43,0x5E,0x7E,0x35,0x64\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3d169b82d55d7ff3e947a735270760709e0d6c87813c3e167538668161099b4d) == 264, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.CP866 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_148232aa6131fd832be232a99e12644bfffe3bb38db1b792831d45fd6f6b7dac[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x84,0xCF,0x27,0x93,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x8E,0x00,0x08,0x26,0x86,0x40,0x31,0x19,0x1A,\n    0x00,0x61,0x32,0x69,0x90,0xC8,0x34,0x64,0xC4,0xD3,0x4C,0x9A,0x62,0x18,0x86,0x4C,\n    0x10,0x62,0x64,0x01,0xA1,0x81,0x18,0x43,0x46,0x02,0x32,0x01,0x91,0xA1,0xA6,0x9A,\n    0x69,0x81,0x19,0x1A,0x64,0xC9,0x89,0xA0,0x32,0x68,0x60,0x8D,0x00,0xC9,0xA6,0x98,\n    0x4C,0x00,0x20,0xCF,0xFC,0xAA,0xA3,0x44,0x80,0x03,0x40,0x00,0xD0,0x00,0x00,0x00,\n    0xC8,0x68,0x00,0x00,0x00,0x68,0x00,0x00,0x0C,0x80,0x34,0x00,0x00,0x00,0x1A,0x00,\n    0x00,0x0D,0x00,0x01,0xA0,0x03,0x40,0x00,0x34,0x34,0xF5,0x07,0xA9,0xE8,0x8D,0xA2,\n    0x62,0x66,0xD3,0x26,0xF7,0xAA,0x4A,0x80,0x80,0x00,0x02,0x60,0x02,0x60,0x00,0x00,\n    0x00,0x4C,0x02,0x60,0x9A,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x26,0x00,0x00,\n    0x8C,0x1A,0x0D,0x00,0x00,0x00,0x19,0x01,0x3C,0x84,0xC9,0x80,0x00,0x04,0xC2,0x60,\n    0x26,0x00,0x0C,0x7F,0xEA,0xA5,0x54,0xC8,0xC0,0x8C,0x00,0x8D,0x34,0xC2,0x61,0x31,\n    0x30,0x09,0x84,0x32,0x30,0x09,0x89,0x82,0x30,0x43,0x00,0x02,0x31,0x30,0x43,0x26,\n    0x98,0x41,0xA6,0x9A,0x34,0xC0,0x26,0x09,0x80,0x02,0x68,0xC8,0xC0,0x00,0x01,0x18,\n    0x23,0x4C,0x00,0x02,0x01,0x90,0xD3,0x23,0x23,0xD1,0xEA,0x9E,0x9E,0xC1,0xE2,0x02,\n    0x22,0x42,0x62,0x82,0xA2,0xC2,0xE3,0x03,0x23,0x43,0x63,0x83,0xBF,0x01,0xE1,0xF2,\n    0x02,0x12,0x22,0x32,0x42,0x52,0x62,0x72,0x8F,0x89,0x49,0x51,0x5F,0x89,0x69,0x79,\n    0x81,0x8E,0x41,0x99,0xA9,0xB1,0xB9,0xC1,0xC9,0xD1,0xD9,0xE1,0xE9,0xF1,0xFA,0x02,\n    0x0A,0x12,0x1A,0x22,0x2A,0x37,0xC9,0x1D,0x21,0x25,0x29,0x2D,0x31,0x35,0x3B,0xE6,\n    0x9E,0xA0,0xA2,0xA4,0xA7,0xF4,0x54,0xFA,0xAA,0xAB,0x2B,0xAC,0x2C,0xAD,0x2D,0xAE,\n    0x2E,0xAF,0x2F,0xB0,0x30,0xB1,0x31,0xB2,0x32,0xB3,0x79,0x34,0xB5,0x35,0xB6,0x36,\n    0x83,0x6F,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,\n    0x7F,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x88,0x8B,0xFB,0x46,0x46,\n    0xC7,0x7D,0xE3,0xE4,0x24,0x64,0xA4,0xE5,0x25,0x65,0xA5,0xE6,0x26,0x66,0xA6,0xE7,\n    0x27,0x67,0xA7,0xFF,0x1F,0x9A,0x0A,0x1A,0x2A,0x3A,0x40,0x00,0x29,0xA9,0xEA,0x00,\n    0xD4,0x81,0xAA,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xEC,0xB7,0xB8,0xB9,\n    0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0x04,0x0F,0x0C,0x16,0x26,0x2E,0x30,\n    0x40,0x81,0x42,0xED,0xFD,0xDA,0x8D,0x70,0xDE,0x21,0xC4,0x4B,0x78,0xDF,0x93,0x78,\n    0xA8,0xF8,0xC7,0x6E,0x63,0x1C,0xC7,0xBB,0x8E,0x91,0x73,0x21,0xFA,0x90,0x92,0x59,\n    0xD3,0xB5,0x98,0x5D,0x77,0x4C,0x30,0xB8,0x8C,0xA0,0x8A,0x68,0x69,0xA3,0xFD,0xFF,\n    0x5F,0x9B,0xCC,0x01,0x24,0x92,0x4E,0x14,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x48,\n    0xBF,0x24,0x8C,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF2,0xBE,0x52,0x94,0xA3,0xAC,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xB0,0x00,0x71,\n    0x40,0x00,0x0E,0x8A,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x28,0x0F,0x03,0xC4,0x3F,\n    0x6A,0xF7,0xC3,0xC4,0xC8,0xC3,0xAF,0x10,0xDA,0x4A,0x29,0x68,0xE7,0x0C,0x2C,0xC3,\n    0xC7,0x8B,0x2C,0xA7,0x4C,0x29,0x65,0x90,0x65,0xD8,0xCB,0x2B,0xB2,0xCA,0x08,0x34,\n    0x81,0x25,0x25,0x25,0xDA,0x91,0x22,0x44,0x89,0x12,0x24,0x7F,0xFC,0xE9,0x38,0xE3,\n    0x8A,0x28,0xA2,0x8A,0x28,0xA3,0xFF,0xA4,0xFB,0x72,0x24,0xD2,0x98,0x42,0x11,0xC5,\n    0x1C,0x71,0xC7,0x1C,0x21,0x08,0x42,0x11,0xC7,0x1C,0x71,0xC7,0x1C,0x21,0x08,0x40,\n    0x84,0x20,0xE2,0x42,0x00,0x00,0x03,0xBA,0x84,0x00,0x00,0x00,0x89,0x10,0x00,0x00,\n    0x03,0x8B,0x08,0x07,0x5A,0x10,0xE4,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x9A,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xB8,0x2E,0xE4,\n    0x8A,0x70,0xA1,0x21,0x09,0x9E,0x4F,0x26\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_148232aa6131fd832be232a99e12644bfffe3bb38db1b792831d45fd6f6b7dac) == 760, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.CP866 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_72ba0094e98ff807c64b5c69b62efeef665500f40add020c23317fee1211551a[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x67,0xAA,0xE5,0xE1,0x00,0x05,\n    0x45,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9A,0x00,0x80,0x01,0x55,0x55,0x00,0x98,0x04,0xC0,0x00,\n    0x9B,0xD2,0x0D,0x4C,0x0D,0x00,0x26,0x4C,0x47,0x92,0x7A,0x98,0x01,0x3D,0x00,0x00,\n    0x00,0x06,0xA0,0xD1,0x93,0xD0,0x4C,0x98,0x08,0xD3,0x4C,0x00,0x06,0x80,0x26,0x00,\n    0x00,0x26,0x00,0x00,0x00,0x00,0x69,0x32,0x60,0x43,0x68,0x00,0x26,0x12,0x60,0x00,\n    0x98,0x00,0x09,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\n    0x48,0xA4,0xC9,0x13,0x21,0x90,0xD2,0x31,0xA1,0x03,0x11,0x84,0x61,0x30,0x98,0x10,\n    0x34,0x62,0x60,0x8D,0x30,0x02,0x18,0x09,0x80,0x26,0x00,0x40,0x19,0x06,0x86,0x01,\n    0x1A,0x32,0x61,0x18,0x98,0x00,0x00,0x10,0xC2,0x60,0x98,0x26,0x9A,0x69,0xA6,0x9A,\n    0x34,0x30,0x21,0xA3,0x26,0x10,0x37,0xEA,0x91,0x26,0x00,0x09,0x80,0x00,0x98,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xD7,0xEF,0x9B,0xC2,0xF0,\n    0x62,0x49,0x11,0x0D,0x4B,0x65,0x26,0x50,0x69,0x52,0x70,0x4B,0x12,0xE4,0xE4,0x9D,\n    0x13,0xB2,0x4C,0xC1,0x32,0x4F,0x09,0xE9,0x3E,0x26,0x89,0xF9,0xD8,0x26,0x49,0x9A,\n    0x68,0x9A,0xA6,0xC9,0xBA,0x70,0x95,0x7C,0x49,0xCA,0x02,0x09,0x3A,0x4E,0xD3,0xC4,\n    0xF5,0x06,0xF8,0xD3,0xE4,0xFD,0x40,0x50,0x50,0x6A,0x12,0x86,0x84,0x51,0x14,0x55,\n    0x19,0x47,0x52,0x14,0x95,0x29,0x4B,0x53,0x1F,0x22,0x9A,0xA7,0x3E,0x55,0x3D,0x50,\n    0x54,0x5F,0x33,0xE7,0x42,0xA1,0x90,0xD6,0xA8,0x53,0xE8,0x47,0x50,0xEF,0xA5,0x0E,\n    0xA9,0xAA,0x8A,0xAA,0xAC,0xAB,0xAB,0x0A,0xCA,0xB4,0xAD,0xAB,0x8F,0xA9,0x10,0xAE,\n    0xAB,0xCA,0xFA,0xC0,0xB0,0xAC,0x4B,0x1A,0xC8,0xB2,0xC5,0x59,0xD6,0x85,0xA5,0x6A,\n    0x5A,0xD0,0x20,0x5B,0x16,0xD5,0xB9,0x6F,0x5C,0x17,0x15,0xC9,0x73,0x5D,0x17,0x55,\n    0xD9,0x77,0x5E,0x11,0x2F,0xAD,0xF6,0x3E,0xD7,0xDC,0xBC,0xBE,0xF7,0xE0,0xBD,0x2F,\n    0x6F,0xC5,0x14,0x81,0x02,0xF8,0xBE,0xAF,0xCB,0xFB,0xF2,0x8B,0xC0,0xBF,0x36,0x09,\n    0x83,0x61,0x18,0x56,0x19,0x87,0x62,0x1F,0xA3,0xF5,0x62,0x5F,0xB3,0x14,0xFD,0xD8,\n    0xB8,0xCC,0x6B,0x1C,0xC7,0xB2,0x0C,0x8B,0x24,0xC9,0xB2,0x8C,0xAB,0x2C,0xCB,0xB3,\n    0x0C,0xCA,0x2D,0x9A,0x46,0xC1,0x67,0x19,0xD6,0x79,0x9F,0x68,0x1A,0x17,0xF0,0xD1,\n    0x34,0x6D,0x23,0x4A,0xD3,0x34,0xED,0x43,0x52,0x81,0xAA,0xD5,0xB5,0x8D,0x6B,0x5C,\n    0xD7,0xB6,0x0D,0x8B,0x64,0xD9,0xB6,0x8F,0xE5,0xB5,0x6D,0x9B,0x76,0xE1,0xB9,0x6E,\n    0x9B,0xB6,0xF1,0xBD,0x6F,0x9B,0xF7,0x01,0xC1,0x70,0x9C,0x37,0x11,0xC5,0x71,0x9C,\n    0x77,0x21,0xC9,0x72,0x9C,0xB7,0x31,0xCD,0x73,0x9C,0xF7,0x41,0xD1,0x74,0x9D,0x37,\n    0x51,0xD5,0x75,0x91,0x8E,0xBA,0x12,0xB9,0xFD,0x3B,0x0E,0xCB,0xFB,0x76,0x9D,0xB7,\n    0x71,0xDD,0x77,0x9D,0xF7,0xF8,0xFF,0x5F,0xF3,0xC0,0x8D,0x44,0xF8,0x62,0x3C,0x51,\n    0xEF,0xE5,0xFA,0x4F,0xD3,0x7E,0xA3,0xF5,0x5F,0xFA,0x1F,0xFB,0x3F,0xC3,0xFD,0x3F,\n    0xE3,0xAC,0x46,0x75,0xCE,0x4A,0x12,0xEB,0x30,0xB9,0x61,0x84,0xFB,0x1C,0x12,0x1C,\n    0x19,0xC4,0xCC,0x09,0x0D,0xF0,0xB8,0x0E,0xD0,0x30,0x90,0xCE,0x0C,0x80,0x50,0xC2,\n    0x48,0xE9,0x30,0xE3,0x40,0xE0,0x92,0x00,0xE8,0xB0,0x21,0x2E,0xAB,0x02,0x01,0xD8,\n    0x02,0x39,0x11,0xC7,0x1C,0x71,0xC7,0x29,0x1C,0x73,0xA8,0xE3,0x86,0x18,0x61,0x86,\n    0x18,0x44,0x02,0x38,0x2C,0x21,0x21,0x12,0xF2,0xF1,0x40,0x83,0xA6,0xC0,0x87,0x64,\n    0xCD,0xFC,0x30,0xEC,0x21,0x02,0x66,0x01,0x33,0x03,0x30,0xCC,0x33,0x13,0x53,0x4E,\n    0x3B,0xBA,0x98,0x82,0x07,0x41,0x01,0x04,0x0E,0x3B,0xB8,0xEE,0xE0,0x89,0x20,0x25,\n    0x20,0x4E,0x92,0x89,0x6F,0xB4,0xB9,0x6F,0x8F,0x9B,0x01,0x10,0x94,0xA3,0x0C,0x24,\n    0x22,0x4B,0x9F,0x73,0x08,0xD0,0xE7,0xDC,0x5A,0x66,0x11,0x23,0x8C,0xE1,0xB8,0x60,\n    0x24,0xB0,0x67,0x98,0x9B,0x61,0xA5,0x9C,0x90,0xC1,0x43,0x60,0xEC,0xD8,0xDD,0x31,\n    0x36,0xC0,0x11,0x31,0xBA,0xFC,0x5C,0x85,0x8F,0xA9,0x91,0x36,0xC2,0x4B,0x47,0xC5,\n    0xDE,0xF6,0x33,0x1A,0xD7,0x88,0xD9,0xCC,0xB8,0xEE,0xE6,0xAD,0x8A,0x06,0xA3,0x63,\n    0xB0,0x94,0x9C,0xC4,0x12,0xA3,0x1B,0x26,0x35,0x92,0x1C,0x52,0x36,0x7C,0x48,0x02,\n    0x0A,0x86,0xBE,0x66,0x41,0x2A,0xC7,0x69,0xC9,0x70,0xA1,0x3B,0x92,0xF1,0x39,0x3D,\n    0x9E,0x4B,0x40,0x4E,0x3B,0x5D,0xF1,0x01,0x3F,0x61,0x4C,0x30,0x01,0x46,0x01,0x2E,\n    0xE0,0x4E,0x09,0x09,0x7F,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x0C,0xF5,0x5C,0xBC,0x20\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_72ba0094e98ff807c64b5c69b62efeef665500f40add020c23317fee1211551a) == 832, \"Wrong size of locale's blob\");\n\n/* ru_RU.CP866 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_bc4b2af896c93afca111628ccd2123fcb7133943cec0ad8c681ae21f35ac23ef[] = {\n    0x5E,0x5B,0xA4,0x84,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xAD,0x8D,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xA4,0xA0,0x0A,0xAD,0xBD,0xE2,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bc4b2af896c93afca111628ccd2123fcb7133943cec0ad8c681ae21f35ac23ef) == 27, \"Wrong size of locale's blob\");\n\n/* ru_RU.CP866 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f2e8befe9044f2ede26fe5e1c730baf0cfb46cb73c6eec2bbcb4c4ff4e18e854[] = {\n    0x52,0x55,0x42,0x20,0x0A,0xE0,0xE3,0xA1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f2e8befe9044f2ede26fe5e1c730baf0cfb46cb73c6eec2bbcb4c4ff4e18e854) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.CP866 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_05dc9cc347defcad87971fda523a5531b67dcd7b76a5891167813a2f81e9cfda[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x88,0xE5,0x6E,0x60,0x00,0x00,\n    0xB2,0x5F,0x11,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x7E,\n    0x7F,0xFD,0x85,0xB0,0x00,0xE6,0x01,0xAA,0x7E,0x4A,0x4D,0x92,0x1A,0x68,0x0D,0x1A,\n    0x66,0xA6,0xF4,0xA1,0xA0,0x0C,0x00,0xC9,0xA6,0x83,0x21,0x82,0x1A,0x62,0x34,0x60,\n    0x62,0x4D,0x35,0x32,0x68,0xD4,0x69,0x1A,0x19,0x34,0xD1,0x90,0x6D,0x12,0xC3,0xBE,\n    0xD5,0xC3,0x6F,0xC9,0x1F,0xDE,0x33,0xAA,0xFA,0x7B,0xCD,0x40,0xB2,0x53,0x06,0x2D,\n    0x22,0xC2,0xB4,0xAA,0x4B,0x39,0xE8,0x72,0x4E,0xB3,0xA9,0x57,0x18,0xB6,0x9B,0x6E,\n    0x83,0x8B,0xC6,0x23,0xA8,0xE7,0x70,0x88,0xE8,0x0E,0x01,0x08,0x11,0x85,0x28,0x31,\n    0xCA,0x43,0x88,0xC5,0xF2,0x77,0x14,0x51,0x8A,0x0E,0xB8,0x1D,0x7A,0xEF,0x10,0x7F,\n    0x07,0xB0,0x62,0xC7,0x90,0x5C,0xFB,0x75,0xF8,0xE6,0x52,0x3F,0x5D,0x0C,0x8D,0xF1,\n    0x70,0x8D,0xAD,0xEA,0x10,0x77,0x2B,0xA6,0xA6,0x2B,0xB4,0xB2,0x57,0x02,0x8D,0xDE,\n    0x66,0xA0,0xE4,0x3B,0x0B,0x1A,0x6A,0x7C,0x09,0x4D,0x33,0x34,0x03,0xE1,0xE5,0xA1,\n    0x8D,0x99,0x69,0x43,0x03,0x04,0x98,0xD1,0xEF,0xBA,0xE6,0x63,0x22,0x82,0x8C,0xE0,\n    0x55,0xA4,0x37,0xE7,0x02,0xA0,0x24,0x02,0xC2,0x80,0x52,0x6C,0x3C,0xC2,0xCE,0x9A,\n    0x63,0x6A,0xD2,0x25,0x5D,0xB3,0xA6,0x69,0x4F,0x90,0xB1,0xDC,0x85,0x7B,0xA8,0x60,\n    0xC5,0x99,0xC1,0x52,0xB2,0x7D,0x8E,0x24,0x5F,0x40,0x90,0xC0,0xDF,0xFC,0x5D,0xC9,\n    0x14,0xE1,0x42,0x42,0x23,0x95,0xB9,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_05dc9cc347defcad87971fda523a5531b67dcd7b76a5891167813a2f81e9cfda) == 264, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.ISO8859-5 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_802016d51343d91d9a7a47326dc81290dc206ff64ed5ac4d5e6ec1eeaf66c2b5[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFB,0x73,0x7B,0x99,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x26,0x38,0x00,0x24,0xD3,0x13,0x02,0x1A,0x62,0x64,\n    0x0D,0x32,0x0D,0x34,0xC8,0xC9,0x93,0x13,0x01,0x18,0x8D,0x34,0x1A,0x31,0x31,0x03,\n    0x09,0x81,0x1A,0x64,0x1A,0x60,0x01,0x0C,0x46,0x26,0x23,0x21,0xA1,0xA6,0x86,0x9A,\n    0x18,0x98,0x00,0x98,0x08,0xC9,0x93,0x20,0x0C,0x4D,0x00,0xD0,0xC9,0x89,0x84,0xC0,\n    0x9A,0x64,0xC8,0xCF,0xFD,0x4D,0x55,0x04,0x86,0x80,0x68,0x06,0x86,0x43,0x40,0xD0,\n    0x34,0x01,0x88,0x18,0x20,0x19,0x00,0x0C,0x80,0x0C,0x9A,0x60,0x08,0x30,0x43,0x4C,\n    0x80,0x06,0x20,0x1A,0x68,0x68,0xC2,0x0D,0x03,0x20,0x60,0x8D,0x01,0xA0,0x1A,0x0C,\n    0x99,0x03,0x40,0x34,0x34,0x00,0x68,0xC2,0x68,0x1F,0xFB,0xD5,0x2A,0x9F,0xAA,0x09,\n    0x30,0x02,0x64,0xC0,0x13,0x04,0xC0,0x00,0x00,0x00,0x00,0x00,0x98,0x98,0x00,0x46,\n    0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x9A,0x1B,0x20,\n    0x98,0x00,0x00,0x06,0x80,0x0D,0x34,0x00,0x03,0xB7,0xFE,0xAA,0x55,0x02,0x60,0x00,\n    0x13,0x13,0x26,0x04,0xC1,0x32,0x68,0x60,0x00,0x8D,0x34,0xC1,0x34,0x60,0x02,0x60,\n    0x98,0x8C,0x8C,0x08,0xC1,0x30,0x09,0x84,0xC9,0x93,0x43,0x20,0x34,0xC0,0x13,0x00,\n    0x00,0x04,0xC0,0x4D,0x32,0x32,0x34,0x1A,0x31,0x18,0x80,0xC2,0x69,0xA6,0x11,0x80,\n    0x4D,0xFA,0xA6,0x9E,0xC1,0xA1,0xC1,0xE2,0x02,0x22,0x42,0x62,0x82,0xBF,0x21,0x61,\n    0x7F,0x98,0xC0,0xC8,0xD0,0xD8,0xE0,0xE8,0xF0,0xF9,0x07,0xD0,0x84,0x88,0x8C,0x90,\n    0x97,0xEA,0x4C,0x4E,0x0C,0xA4,0xAC,0xB0,0xB4,0xB8,0xBC,0xC0,0xC4,0xC8,0xCC,0xD0,\n    0xD4,0xD8,0x21,0xC1,0xD1,0xD9,0xE1,0xE9,0xF1,0xFA,0x02,0x0A,0x12,0x1A,0x22,0x2A,\n    0x32,0x3A,0x42,0x4A,0x52,0x5A,0x62,0x6A,0x72,0x7A,0x82,0x8A,0x92,0x9F,0xD9,0x51,\n    0x55,0x5B,0xEE,0xAE,0xB0,0xB2,0xB4,0xB6,0xB8,0xBA,0xBC,0xBE,0xC0,0xC2,0xC5,0xF8,\n    0xFC,0x85,0x65,0x66,0x00,0xCE,0xD0,0x01,0xA5,0xAD,0xB1,0xB5,0xB9,0xBD,0xC1,0xC5,\n    0xC9,0xCD,0xD1,0xD5,0xD9,0xDD,0xE1,0xE5,0xE9,0xED,0xF1,0xF5,0xF9,0xFE,0x02,0x06,\n    0x0A,0x0E,0x0A,0x16,0x1A,0x1E,0x22,0x26,0x2A,0x2E,0x32,0x36,0x3A,0x3E,0x42,0x46,\n    0x4A,0x4E,0x52,0x56,0x5A,0x5E,0x62,0x66,0x6A,0x6E,0x72,0x76,0x7A,0x7E,0x82,0x87,\n    0xF5,0x45,0x45,0x49,0x4B,0x4D,0x4F,0x50,0x0A,0xAA,0xB2,0xB6,0xBA,0xBE,0xC2,0xC6,\n    0xCA,0xCE,0xD2,0xD6,0xDA,0xDE,0xE2,0xE6,0xEA,0xEE,0xF2,0xF6,0xFA,0xFF,0x03,0x07,\n    0xF7,0x85,0xFC,0xC2,0xFF,0x61,0x81,0x02,0x0B,0x13,0x17,0x1B,0x1F,0xFF,0x91,0x93,\n    0x95,0x97,0x99,0x9B,0x9D,0x9F,0xA1,0xA3,0xA5,0xA7,0xA9,0xAB,0xAD,0xAF,0xB1,0xB3,\n    0xB5,0xB7,0xB9,0xBB,0xBD,0xBE,0x0F,0x83,0x87,0x83,0x8B,0x8F,0x93,0x97,0x9B,0x9F,\n    0xA3,0xA4,0x27,0x50,0x40,0xA1,0x7A,0xFB,0x3B,0x7B,0xBB,0xFC,0x3C,0x41,0x8B,0xFB,\n    0xFE,0xFD,0x11,0x11,0x11,0x11,0x11,0xF1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,\n    0x11,0x11,0x1B,0xBC,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC1,0x6C,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xCF,0x20,\n    0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x79,0x40,0x04,0x92,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,\n    0x44,0x4F,0xCA,0x22,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB2,0x94,0xA5,\n    0x29,0x4A,0x52,0x94,0xB7,0xF1,0x65,0x96,0x8E,0x38,0xE3,0x8E,0x38,0xE3,0x8E,0x38,\n    0xFB,0x89,0x28,0xA2,0x91,0x22,0x44,0x89,0x12,0x24,0x45,0xD9,0xFF,0xFB,0x72,0x52,\n    0x50,0x94,0x42,0x10,0x91,0x14,0x51,0x45,0x14,0x50,0x81,0x08,0xA2,0x8A,0x28,0xA2,\n    0x8A,0x10,0x84,0x20,0x42,0x10,0x7E,0x10,0x80,0x00,0x00,0x24,0xD0,0x80,0x00,0x00,\n    0x00,0x00,0x00,0x07,0xE3,0x08,0x07,0xFB,0x08,0x7E,0x50,0x80,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x74,\n    0x5D,0xC9,0x14,0xE1,0x42,0x43,0xED,0xCD,0xEE,0x64\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_802016d51343d91d9a7a47326dc81290dc206ff64ed5ac4d5e6ec1eeaf66c2b5) == 762, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.ISO8859-5 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_0c7892c9bd84a90d22d7a709c856be8528c261eb3ed030dd397fd43d19e089d0[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xCC,0xC3,0x16,0x1F,0x00,0x05,\n    0x40,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9D,0x00,0x43,0xA0,0x0A,0xAA,0xA8,0x04,0xC0,0x26,0x00,\n    0x01,0xEA,0x00,0x00,0x13,0x00,0x26,0xD0,0x00,0x00,0x00,0x00,0x02,0x60,0x8C,0x01,\n    0x30,0x98,0x00,0x4C,0x23,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x68,0x01,0x18,\n    0x04,0xC0,0x06,0x80,0x98,0x09,0x30,0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xA9,0xE4,0xA8,0x32,0x62,0x62,0x62,0x69,\n    0x80,0x02,0x61,0x34,0x64,0x60,0x01,0x30,0x04,0xC4,0x69,0x80,0x99,0x0C,0x8C,0x98,\n    0x00,0x00,0x01,0x19,0x34,0xC9,0x80,0x00,0x02,0x32,0x64,0xC9,0x80,0x8D,0x30,0x26,\n    0x01,0x31,0x19,0x30,0x00,0x26,0x00,0x01,0x1A,0x60,0x4C,0x9A,0x34,0xC0,0x92,0x4A,\n    0x32,0x20,0x9E,0x88,0x02,0x62,0x62,0x06,0x04,0xC0,0x04,0x18,0x04,0xC1,0x0C,0x0F,\n    0x52,0x69,0x80,0x00,0x26,0x08,0x00,0x60,0x00,0x26,0x09,0xA6,0x13,0x00,0x4C,0x9A,\n    0x60,0x09,0x80,0x98,0x08,0xC9,0x80,0x26,0x99,0x32,0x30,0x08,0xD1,0x93,0xD4,0xC9,\n    0x93,0x04,0xC0,0x0F,0xD5,0x20,0x9B,0xE9,0xEB,0x14,0x28,0x82,0x55,0x66,0x01,0x11,\n    0x46,0x44,0x59,0x01,0xA4,0x49,0x22,0x4C,0x97,0x11,0x89,0x42,0x54,0x89,0x2F,0x26,\n    0x04,0xC4,0x99,0x13,0x32,0x40,0x90,0xA4,0x49,0x1A,0x48,0x92,0xA4,0xC9,0x3A,0x50,\n    0x93,0xA3,0x52,0x94,0xA9,0x01,0x2B,0x4B,0x12,0xD4,0xB9,0x2F,0x4C,0x13,0x14,0xC9,\n    0x33,0x4D,0x13,0x54,0xC9,0x36,0x4D,0xD3,0x84,0xE5,0x3A,0x4E,0xD3,0xC4,0xF5,0xF9,\n    0x27,0xC9,0xFA,0x80,0xA0,0xA8,0x4A,0x1A,0x88,0xA2,0xA8,0xCA,0x3B,0xF3,0x52,0x10,\n    0x4A,0x4A,0x95,0x68,0x82,0x29,0x88,0x6A,0x9A,0xA7,0x29,0x8A,0x7A,0xA0,0xA8,0xAA,\n    0x4A,0x9A,0xA8,0xAA,0xAA,0xCA,0xBA,0xB0,0xAC,0xAB,0x4A,0xDA,0xB8,0xAE,0xAB,0xCA,\n    0xFA,0xC0,0xB0,0xAC,0x4B,0x1D,0xFE,0xCA,0xB3,0x2C,0xEB,0x42,0xD2,0x81,0x02,0xD4,\n    0xB5,0xAD,0x8B,0x6A,0xDC,0xB7,0xAE,0x0B,0x8B,0xF4,0x5C,0x97,0x35,0xD1,0x75,0x5D,\n    0x9F,0xAB,0xF6,0x5D,0xD7,0x85,0xE5,0x7A,0x5E,0xD7,0xC5,0xF5,0x7E,0x5F,0xD0,0x20,\n    0x7E,0xEC,0x03,0x02,0xC1,0x30,0x6F,0xE1,0x84,0x61,0x58,0x66,0x1D,0x88,0x62,0x58,\n    0xA6,0x2D,0x8C,0x63,0x58,0xE6,0x3D,0xFC,0xB2,0x0C,0x8B,0x24,0xC9,0xBF,0xA7,0xF6,\n    0xCA,0x32,0xAC,0xB3,0x2E,0xCC,0x33,0x2C,0xD3,0x36,0xCE,0x33,0xAC,0xF3,0x3E,0xD0,\n    0x7A,0xB4,0x4D,0x1B,0x48,0xD2,0xB4,0xCD,0x3B,0x50,0xD4,0xB5,0x4D,0x5B,0x58,0xD6,\n    0xFD,0x3E,0xB0,0x7B,0x04,0x1C,0x26,0xC9,0xB3,0x6D,0x1B,0x56,0xD9,0xB7,0x6E,0x1B,\n    0x96,0xE9,0xBB,0x6F,0x1B,0xD6,0xF9,0xBF,0x70,0x1C,0x17,0x09,0xC3,0x71,0x1C,0x57,\n    0x19,0xC7,0x72,0x1C,0x97,0x29,0xCB,0x73,0x1C,0xD7,0x39,0xCF,0x42,0x21,0x21,0x7A,\n    0x2E,0x93,0xA6,0xEA,0x3A,0xAE,0xB3,0xAE,0xEC,0x3F,0xC7,0xFA,0xEC,0xBB,0x4E,0xDB,\n    0xB8,0xEE,0xBB,0xCE,0xFB,0xC0,0xFF,0x9E,0x17,0x89,0xE3,0x79,0x1E,0x57,0x99,0xE7,\n    0x7A,0x1E,0x97,0xA9,0xEB,0x42,0xAA,0x53,0xC8,0xF1,0xFF,0xF3,0xB2,0x76,0x8E,0xD9,\n    0xDC,0x3B,0xA7,0x78,0xEF,0x9E,0x03,0xC2,0x78,0x88,0xF1,0xE3,0xC7,0x80,0xFE,0xD0,\n    0x92,0xF1,0x30,0xBF,0xCE,0x45,0xE5,0xC2,0x13,0x99,0x20,0x19,0x86,0x1B,0xEC,0x72,\n    0x08,0x4C,0x84,0xCC,0x99,0x20,0x1C,0xC0,0x93,0xA1,0x8D,0xD9,0x61,0xC3,0xE3,0x24,\n    0x20,0x41,0xD8,0x64,0x00,0x77,0x18,0x48,0x07,0x30,0x82,0x08,0x70,0x41,0x04,0x10,\n    0x41,0x16,0x08,0x23,0x41,0x03,0xCF,0x3C,0xF3,0xCF,0x3C,0x20,0x11,0xC3,0x61,0x09,\n    0x08,0x93,0x93,0x7E,0x12,0x00,0xED,0x30,0x24,0xE6,0x4C,0xDD,0x66,0x1C,0xC2,0x10,\n    0x80,0x10,0x80,0x00,0x1C,0x10,0x80,0x01,0x08,0x02,0x10,0x04,0x20,0xE8,0x94,0x08,\n    0x02,0x10,0x87,0x12,0x0C,0x30,0x87,0x00,0x03,0x00,0x61,0x84,0x01,0x08,0x40,0x10,\n    0x84,0x01,0xC1,0x11,0x86,0x40,0x04,0x31,0x39,0x24,0xFA,0xFD,0x33,0x3A,0xAE,0x64,\n    0xB4,0x27,0xC4,0xA2,0xB0,0xC2,0x01,0x80,0xCF,0x31,0xCA,0x63,0xED,0x61,0x6A,0xD8,\n    0x09,0x6E,0x63,0x84,0xDB,0xF7,0x12,0x4C,0x28,0xCC,0x1A,0x46,0x0F,0x24,0xD2,0xB8,\n    0x53,0xB6,0x09,0xCB,0x1F,0x93,0x08,0x9B,0xB0,0x1B,0x06,0x24,0xB9,0xCE,0x37,0xCF,\n    0xB9,0x07,0x0D,0x81,0x2E,0x0C,0x4D,0x96,0xCE,0x19,0x29,0x2A,0xE1,0x98,0x79,0x8D,\n    0x87,0xDD,0xE4,0x44,0x98,0x51,0x1F,0x0D,0xAB,0x1F,0x83,0xEE,0x1A,0x46,0x43,0x67,\n    0x0C,0x4F,0x93,0x97,0x1B,0x57,0x9C,0x46,0x94,0xE5,0xC2,0x02,0x56,0x2C,0xB4,0x22,\n    0x46,0x5F,0x27,0x08,0x7E,0x5C,0xD2,0x04,0x21,0xE9,0x5E,0x0C,0x20,0x23,0x4A,0x38,\n    0x00,0xF2,0xC4,0x01,0x3E,0x13,0x81,0x21,0x2F,0x18,0xBB,0x92,0x29,0xC2,0x84,0x86,\n    0x66,0x18,0xB0,0xF8\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0c7892c9bd84a90d22d7a709c856be8528c261eb3ed030dd397fd43d19e089d0) == 852, \"Wrong size of locale's blob\");\n\n/* ru_RU.ISO8859-5 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_00177aa413cbf53e520ef83cd417cf0e8d64ffb19d503bf2ad192dc39c184805[] = {\n    0x5E,0x5B,0xD4,0xB4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xDD,0xBD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xD4,0xD0,0x0A,0xDD,0xD5,0xE2,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_00177aa413cbf53e520ef83cd417cf0e8d64ffb19d503bf2ad192dc39c184805) == 27, \"Wrong size of locale's blob\");\n\n/* ru_RU.ISO8859-5 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_aa1b81cefedfe011dcd3275c84149f1112c56028fe4939fbb6eb5052dd62e116[] = {\n    0x52,0x55,0x42,0x20,0x0A,0xE0,0xE3,0xD1,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_aa1b81cefedfe011dcd3275c84149f1112c56028fe4939fbb6eb5052dd62e116) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.ISO8859-5 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ec4f3ec135f87d291c72c870d203cc6f1e128ef1ae314766416dbb0d5ed828e1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x52,0x2F,0x36,0x97,0x00,0x00,\n    0xB2,0x5F,0x03,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x7E,\n    0x7F,0xFD,0x85,0xB0,0x00,0xE6,0x01,0xAA,0x7E,0x4A,0x4D,0x92,0x1A,0x68,0x0D,0x1A,\n    0x66,0xA6,0xF4,0xA1,0xA0,0x0C,0x00,0xC9,0xA6,0x83,0x21,0x82,0x1A,0x62,0x34,0x60,\n    0x62,0x4D,0x35,0x32,0x68,0xD4,0x69,0x1A,0x19,0x34,0xD1,0x90,0x6D,0x12,0xC3,0xBE,\n    0xD5,0xC3,0x6F,0xC9,0x1F,0xDE,0x33,0xAA,0xFA,0x7B,0xCD,0x40,0xB2,0x53,0x06,0x2D,\n    0x22,0xC2,0xB4,0xAA,0x4B,0x39,0xE8,0x72,0x4E,0xB3,0xA9,0x57,0x18,0xB6,0x9B,0x6E,\n    0x83,0x8B,0xC6,0x23,0xA8,0xE7,0x70,0x88,0xE8,0x0E,0x01,0x08,0x11,0x85,0x28,0x31,\n    0xCA,0x43,0x88,0xC5,0xF2,0x77,0x14,0x51,0x8A,0x0E,0xB8,0x1D,0x7A,0xEF,0x10,0x7F,\n    0x07,0xB0,0x62,0xC7,0x90,0x5C,0xFB,0x75,0xF8,0xE6,0x52,0x3F,0x5D,0x0C,0x8D,0xF1,\n    0x70,0x8D,0xAD,0xEA,0x10,0x77,0x2B,0xA6,0xA6,0x2B,0xB4,0xB2,0x57,0x02,0x8D,0xDE,\n    0x66,0xA0,0xE4,0x3B,0x0B,0x1A,0x6A,0x7C,0x09,0x4D,0x33,0x34,0x03,0xE1,0xE5,0xA1,\n    0x8D,0x99,0x69,0x43,0x03,0x04,0x98,0xD1,0xEF,0xBA,0xE6,0x63,0x22,0x82,0x8C,0xE0,\n    0x55,0xA4,0x37,0xE7,0x02,0xA0,0x24,0x02,0xC2,0x80,0x52,0x6C,0x3C,0xC2,0xCE,0x9A,\n    0x63,0x6A,0xD2,0x25,0x5D,0xB3,0xA6,0x69,0x4F,0x90,0xB1,0xDC,0x85,0x7B,0xA8,0x60,\n    0xC5,0x99,0xC1,0x52,0xB2,0x7D,0x8E,0x24,0x5F,0x40,0x90,0xC0,0xDF,0xFC,0x5D,0xC9,\n    0x14,0xE1,0x42,0x41,0x48,0xBC,0xDA,0x5C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ec4f3ec135f87d291c72c870d203cc6f1e128ef1ae314766416dbb0d5ed828e1) == 264, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.KOI8-R LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_73193f6b518ed3a0f71a6f8585cdf056a02d6761462102de1f48c76eb1603756[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xEE,0x3F,0xD9,0xE9,0x00,0x05,\n    0x37,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0xCC,0x97,0x00,0x04,0x9A,0x34,0x69,0xA1,0xA3,0x43,\n    0x20,0xD3,0x20,0xD0,0x34,0xC4,0xD0,0x0D,0x06,0x46,0x41,0x90,0x01,0x90,0xC1,0x0D,\n    0x32,0x00,0x32,0x00,0x62,0x1A,0x34,0xD0,0x00,0xC9,0xA6,0x80,0xC8,0x61,0x19,0x34,\n    0xD0,0xD0,0x62,0x68,0xD0,0xD3,0x4C,0x13,0x40,0x0C,0x80,0x01,0xA1,0xA3,0x02,0x34,\n    0x07,0xED,0xE9,0x35,0x53,0xD2,0x88,0x04,0x62,0x34,0x62,0x69,0xA6,0x9A,0x18,0x99,\n    0x0C,0x86,0x86,0x9A,0x03,0x46,0x40,0x68,0x34,0x69,0x93,0x4D,0x0D,0x00,0xD0,0x68,\n    0x06,0x43,0x40,0x19,0x03,0x40,0xC4,0xD0,0x30,0x09,0x93,0x23,0x4D,0x18,0x83,0x11,\n    0xA0,0x00,0x69,0xEA,0x6D,0x4D,0xA9,0xFA,0xA3,0x21,0x91,0xB5,0x31,0x0F,0x44,0xC3,\n    0x29,0xE8,0x21,0xFB,0x2A,0x79,0x4F,0x7E,0xAA,0x48,0x7A,0x10,0x26,0x26,0x00,0x00,\n    0x00,0x01,0x30,0x04,0xC0,0x00,0x00,0x00,0x98,0x00,0x23,0x13,0x00,0x00,0x00,0x69,\n    0x91,0xA3,0x40,0x00,0x00,0x00,0x09,0x80,0x11,0xA6,0x00,0x00,0x23,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x01,0x9B,0xFD,0x54,0xAA,0x4D,0x32,0x60,0x04,0x60,0x23,0x46,0x02,\n    0x34,0xC0,0x99,0x34,0xD0,0xD3,0x10,0x62,0x61,0x30,0x46,0x23,0x00,0x04,0xC1,0x19,\n    0x34,0x01,0x81,0x34,0xD3,0x26,0x9A,0x64,0xC9,0xA6,0x4C,0x8D,0x0C,0x09,0xA6,0x13,\n    0x26,0x13,0x26,0x01,0x1A,0x69,0x88,0xD3,0x4D,0x1A,0x61,0x0D,0x30,0x98,0x13,0x46,\n    0x26,0x9A,0x61,0x3F,0x54,0xF4,0xD0,0x33,0xE4,0x1A,0x1C,0x1F,0xF3,0x10,0x11,0x12,\n    0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,\n    0x23,0x24,0x25,0x26,0x27,0x28,0x49,0x2A,0x2C,0x2D,0x2E,0x2F,0xFA,0x18,0x18,0x99,\n    0x19,0x9A,0x1A,0xE0,0x9B,0xFD,0x4E,0x4E,0x8E,0xCF,0x0F,0x70,0x90,0x10,0x50,0x90,\n    0xD1,0x11,0x51,0x91,0xD2,0x3F,0xE9,0x49,0x69,0x89,0xBD,0xA9,0xEA,0x2A,0x4A,0x6A,\n    0x8A,0xAA,0xDF,0x65,0x75,0x85,0x95,0xA5,0xB5,0xC5,0xD5,0xE5,0xF6,0x06,0x16,0x26,\n    0x3F,0xBF,0xE1,0x91,0x95,0x9B,0xF3,0x06,0xD2,0xE0,0xFC,0x01,0xC3,0x80,0x00,0x30,\n    0x2F,0x0F,0x2F,0x4F,0x6F,0x8F,0xAF,0xC1,0x20,0x00,0x82,0x00,0x01,0xFC,0x18,0x20,\n    0x80,0xC2,0x41,0x42,0x5E,0x04,0x84,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,\n    0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0xE8,0xF4,0xA5,0x7A,\n    0x72,0xDD,0x4E,0xAC,0xBC,0xC4,0xCA,0x4E,0xC4,0xEC,0xF2,0x29,0xD4,0xA8,0xA8,0x27,\n    0xFC,0x7E,0x4F,0x2F,0x9B,0xCF,0xE8,0x9E,0x33,0xD5,0x3E,0x8D,0x12,0x2F,0x4A,0x44,\n    0x66,0x24,0x32,0x80,0xC4,0x66,0x7B,0x3D,0xBE,0xEA,0x1A,0x35,0x7F,0x1A,0x35,0x74,\n    0x36,0xDE,0xFA,0x54,0xBF,0x4A,0x64,0xB5,0x15,0x1F,0x5F,0xBA,0x64,0xD5,0x3F,0x8A,\n    0xBA,0xBA,0xCA,0xE4,0xE9,0xD4,0x29,0xAF,0xAF,0xB0,0xFC,0xD9,0x59,0x7E,0xBF,0x86,\n    0x9A,0x4B,0x33,0x8E,0x3D,0x00,0x15,0x5A,0xFF,0x7F,0xDF,0xF5,0x6B,0x16,0x2C,0xFD,\n    0x99,0x99,0x99,0x99,0x9A,0xE9,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,\n    0xA5,0xCD,0x29,0x4A,0x52,0x94,0xA5,0x29,0x49,0x65,0xC8,0x88,0x88,0x95,0x22,0x22,\n    0x22,0x22,0x20,0x05,0x59,0x0D,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x1E,0x91,0x5B,0x53,0x5C,0x7A,0x8E,0x10,0x50,0x52,0x94,0xA5,0x29,0x54,0x90,0x84,\n    0x3C,0x1E,0x2C,0xCA,0x7D,0xB0,0xB4,0x42,0xD5,0x50,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x29,0xD0,0xAC,0x4D,0x5A,0x72,0x7A,0x44,0x13,0x90,0x84,\n    0x21,0x08,0x45,0x26,0x9A,0x69,0xC8,0x1C,0x81,0x48,0x72,0xA4,0x0F,0xB4,0x54,0x00,\n    0x44,0xEA,0xAA,0xA1,0x0A,0xF7,0x92,0x84,0x21,0x0A,0x18,0x0A,0x00,0x14,0x00,0x28,\n    0x00,0x50,0x00,0x8A,0xB2,0x24,0x11,0x12,0x08,0x89,0x04,0x4A,0xA6,0x54,0xA9,0x52,\n    0xA5,0x4A,0x96,0xE9,0xCB,0x74,0xFD,0x4F,0xB2,0x49,0x78,0x42,0x10,0x84,0x21,0x0E,\n    0xAA,0x5E,0x32,0x42,0x12,0x49,0x24,0x92,0x49,0x27,0xFD,0xFF,0xCB,0x4C,0x25,0xE3,\n    0x18,0xC6,0x30,0x92,0x10,0x84,0x21,0x18,0x91,0x84,0x21,0x08,0x42,0x11,0x8C,0x63,\n    0x12,0x31,0x8B,0x73,0x18,0x80,0x00,0x09,0x84,0x62,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x7E,0x51,0x88,0x73,0x63,0x1D,0xEC,0x62,0x48,0x92,0x63,0x18,0x80,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x48,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x22,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x0E,0xA0,0xBB,0x92,0x29,0xC2,0x84,0x87,0x71,0xFE,0xCF,0x48\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_73193f6b518ed3a0f71a6f8585cdf056a02d6761462102de1f48c76eb1603756) == 828, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.KOI8-R LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_6e1a3e6a095ccafd23b41aa0f6d8008d6dd8f534582309112808a487b927ca5b[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x16,0x46,0x78,0x90,0x00,0x05,\n    0x45,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x9A,0x00,0x80,0x01,0x55,0x55,0x00,0x4C,0x98,0x3D,0x51,\n    0x88,0xC0,0x6D,0x41,0x3D,0x00,0x8D,0x34,0xC0,0x02,0x7A,0x00,0x13,0x26,0x00,0x46,\n    0x86,0xD2,0x61,0x30,0x00,0x00,0x4C,0x01,0xA0,0x00,0x26,0x99,0x18,0x00,0x00,0x64,\n    0x02,0x66,0xA6,0x00,0x02,0x62,0x60,0x06,0x80,0x00,0x00,0x4C,0x26,0x12,0x60,0x00,\n    0x98,0x00,0x09,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\n    0x49,0x14,0xD1,0x09,0xA9,0xE4,0x27,0x90,0x99,0x18,0x13,0x46,0x26,0x80,0x30,0x00,\n    0x09,0xA6,0x04,0xD3,0x4C,0x4C,0x10,0x06,0x04,0xC0,0x09,0x89,0x91,0x80,0x00,0x26,\n    0x46,0x98,0x04,0xC4,0xC4,0x60,0x43,0x21,0x90,0xD3,0x4C,0x4C,0x4C,0x98,0x13,0x00,\n    0x34,0x09,0xA6,0x68,0x8C,0x13,0x06,0x8D,0x03,0xF5,0x44,0x98,0x00,0x26,0x00,0x02,\n    0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x15,0x0D,\n    0x66,0xB1,0x19,0x24,0x46,0x1B,0xC9,0x65,0x1D,0x1E,0x34,0x81,0x34,0x24,0x4F,0x00,\n    0x92,0x24,0xC9,0xA9,0x1A,0x6C,0x4D,0xCF,0x04,0x94,0x25,0x49,0xC1,0x39,0x27,0x49,\n    0x62,0x5A,0x97,0x25,0xE9,0x82,0x62,0x99,0x24,0xF0,0x88,0x29,0x9A,0x68,0x9A,0xA6,\n    0xCF,0x99,0x0A,0x9B,0xA7,0x09,0xCA,0x74,0x9D,0xA7,0x88,0x54,0xF5,0xF3,0xBE,0x84,\n    0xF9,0xF4,0xA7,0xEF,0xA9,0x40,0x50,0x54,0x25,0x0D,0x44,0x51,0x54,0x65,0x1D,0x48,\n    0x52,0x54,0xA5,0x2D,0xF5,0xA1,0x94,0xC5,0x35,0x4E,0x87,0x86,0x2A,0x08,0xDA,0xA2,\n    0xA9,0x29,0xEA,0x9A,0xA8,0xAA,0xAA,0xCF,0xB1,0x57,0x56,0x1F,0x6A,0xB2,0xAD,0x2B,\n    0x6A,0xE2,0xBA,0xAF,0x2B,0xEB,0x02,0xC2,0xB1,0x3E,0xE7,0xDE,0xB1,0xDF,0x3F,0x17,\n    0xE4,0xB2,0x21,0xD6,0x54,0x18,0x3F,0x9A,0xCC,0xB3,0xAD,0x0B,0x4B,0xF4,0x5A,0x96,\n    0xB5,0xB1,0x6D,0x5B,0x96,0xF5,0xC1,0x71,0x5C,0x97,0x35,0xD1,0x75,0x5D,0x97,0x75,\n    0xE1,0x79,0x5E,0x97,0xB5,0xF1,0x09,0x06,0xFA,0xBF,0x3F,0x55,0xFD,0x80,0x60,0x58,\n    0x26,0x0D,0x84,0x61,0x58,0x66,0x1D,0x10,0xC4,0x22,0x18,0x96,0x29,0x8B,0x63,0x18,\n    0xD6,0x39,0x8F,0x64,0x19,0x16,0x49,0x93,0x65,0x19,0x57,0xEC,0xCB,0x3F,0x76,0x5D,\n    0x98,0x7F,0x0F,0xE5,0x99,0x66,0x99,0xB6,0x71,0x9D,0x89,0xCF,0xC5,0x68,0x5A,0x26,\n    0x8D,0xA4,0x69,0x5A,0x66,0x9D,0xA8,0x6A,0x5A,0xA6,0xAD,0xAC,0x44,0xA2,0x90,0x20,\n    0x40,0x81,0xAD,0x6B,0x9A,0xF6,0xC1,0xB1,0x6C,0x9B,0x37,0xF4,0xDA,0x36,0xA8,0xB4,\n    0x5F,0xF7,0xB6,0x6D,0xDB,0x86,0xE5,0xBA,0x6E,0xDB,0xC6,0xF5,0xBE,0x6F,0xDC,0x07,\n    0x05,0xC2,0x70,0xDC,0x47,0xF8,0xE2,0xB8,0xCE,0x3B,0xFD,0x72,0x1C,0x97,0x29,0xCB,\n    0x73,0x1C,0xD7,0x39,0xCF,0x74,0x1D,0x14,0x62,0x32,0x13,0xA4,0xE9,0xBA,0x8E,0xAB,\n    0xAC,0xEB,0xBB,0x0E,0xCB,0xB4,0xED,0xBB,0x8E,0xEB,0xBC,0xEF,0xBC,0x0F,0x0B,0xC4,\n    0xF1,0x9D,0x53,0xAC,0x75,0xC9,0x83,0xB0,0x76,0x49,0x93,0xB4,0x76,0xCE,0xE1,0xDD,\n    0x3B,0xC4,0x24,0xBA,0x12,0xEF,0x30,0x9A,0x64,0x47,0xFA,0xC8,0xBE,0x32,0x46,0x7D,\n    0x90,0x03,0xC4,0x0A,0x59,0x33,0xDC,0x82,0x23,0x00,0x34,0x46,0x40,0x28,0x91,0x48,\n    0x93,0x0C,0x38,0x82,0x33,0x84,0x81,0x20,0xEB,0x30,0x21,0x4C,0xB0,0x84,0x9C,0xC0,\n    0x10,0xC4,0x86,0x18,0x61,0x86,0x42,0x3A,0x18,0x64,0xA1,0x86,0x08,0x20,0x82,0x08,\n    0x20,0x10,0x08,0xDE,0x30,0x84,0x84,0x48,0xC8,0xC5,0x7A,0x09,0x86,0x04,0x39,0x93,\n    0x37,0x4D,0x87,0x30,0x84,0x09,0x98,0x04,0xCC,0x0C,0xC4,0x44,0x24,0x9C,0xE1,0x98,\n    0x94,0x95,0x70,0xE7,0x39,0x4D,0x5E,0xF7,0x20,0x78,0xF7,0xB8,0x73,0x9C,0x39,0xCE,\n    0x04,0x40,0x84,0x28,0x82,0x72,0x4A,0x2A,0xE0,0xFD,0x1A,0x1C,0xF6,0xC3,0xEB,0x8C,\n    0x25,0x1E,0xC3,0x24,0x93,0x08,0x96,0x63,0x4B,0xA3,0x70,0xB4,0xEC,0x25,0xB8,0x61,\n    0x4E,0x58,0x92,0x60,0xD1,0xB0,0x78,0x67,0xE2,0xE1,0x4F,0x58,0x5B,0x46,0x11,0xB4,\n    0x60,0x8C,0xC1,0x03,0x0F,0xE4,0xB8,0xDC,0x45,0x70,0xA5,0xDB,0xC4,0x61,0x25,0x2D,\n    0x29,0xB9,0x9D,0x49,0xFE,0x9A,0xA8,0xC4,0x9B,0x0D,0xAD,0x1C,0x0F,0x8B,0x3C,0xD4,\n    0xC4,0x08,0x06,0x35,0x83,0x0F,0x61,0x3D,0x81,0xBC,0xB9,0x07,0x84,0xEE,0x5D,0xC1,\n    0x38,0x8A,0xF7,0x92,0x31,0xD1,0x9E,0x45,0x8F,0x71,0x27,0x3C,0x9F,0x0F,0x03,0x5C,\n    0xC2,0x4A,0x7E,0xC3,0x02,0x15,0x08,0x4E,0x04,0x84,0xBB,0xE2,0xEE,0x48,0xA7,0x0A,\n    0x12,0x02,0xC8,0xCF,0x12,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6e1a3e6a095ccafd23b41aa0f6d8008d6dd8f534582309112808a487b927ca5b) == 822, \"Wrong size of locale's blob\");\n\n/* ru_RU.KOI8-R LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_a2214ae95a73934815e6904389a4463a5fb87f8f8f5e06cd823ced85555c0e0e[] = {\n    0x5E,0x5B,0xC4,0xE4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xCE,0xEE,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xC4,0xC1,0x0A,0xCE,0xC5,0xD4,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a2214ae95a73934815e6904389a4463a5fb87f8f8f5e06cd823ced85555c0e0e) == 27, \"Wrong size of locale's blob\");\n\n/* ru_RU.KOI8-R LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_10ba237a75a0f28120b25cd365f4dd01fea4adf1c6fc25dcd975579173bf2bae[] = {\n    0x52,0x55,0x42,0x20,0x0A,0xD2,0xD5,0xC2,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_10ba237a75a0f28120b25cd365f4dd01fea4adf1c6fc25dcd975579173bf2bae) == 37, \"Wrong size of locale's blob\");\n\n/* ru_RU.KOI8-R LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_d8c54fdf9d0f95be9f2db0bfa7d0316ae817f8d61dc57683269bbcb69dd52501[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d8c54fdf9d0f95be9f2db0bfa7d0316ae817f8d61dc57683269bbcb69dd52501) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.KOI8-R LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_37b3bbfd206c427bc31f238171a92eb188bda768539b833b05e741bd467a4a70[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xDB,0x30,0x7D,0x00,0x00,0x00,\n    0x89,0xDF,0x06,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x7F,\n    0xBF,0xFE,0xC1,0x30,0x00,0xF5,0x9A,0x0D,0x42,0x68,0x1A,0x34,0x00,0x0C,0x8D,0xA8,\n    0x00,0x10,0x68,0x86,0xA8,0x79,0x21,0xA0,0x03,0x43,0x4D,0x3D,0x43,0xD4,0x09,0x11,\n    0x4D,0x4F,0x43,0x45,0x3C,0xA0,0x1A,0x0D,0x34,0xF5,0x00,0xF4,0x94,0x4B,0xF4,0x8D,\n    0xBA,0xAD,0x55,0xF9,0x8B,0x7B,0x34,0xB0,0x15,0x03,0x20,0x8E,0xAB,0x00,0x24,0x82,\n    0x20,0x7D,0xC7,0x28,0xD2,0xBB,0x95,0xAE,0x04,0xC8,0xD5,0x52,0x25,0x2B,0x21,0x88,\n    0x68,0xC8,0x5F,0x70,0x9C,0x60,0x0E,0xC0,0x81,0x09,0xC3,0x12,0x80,0xF1,0xDD,0x98,\n    0xAC,0x34,0x9C,0x44,0x0C,0x65,0x32,0xE7,0xF6,0x2F,0x25,0xF3,0xF5,0xC4,0xFC,0x38,\n    0x98,0x28,0x36,0x63,0x85,0xEF,0xBF,0x3E,0x6B,0xD8,0x6B,0x3D,0xAA,0x9F,0xC5,0xB6,\n    0xEA,0x50,0x3B,0x06,0x53,0xD3,0xF9,0x60,0xA6,0xEF,0x41,0x92,0x2B,0xD6,0x65,0xB2,\n    0x19,0x8E,0xEB,0x72,0x69,0x11,0x0E,0xA2,0x98,0xE9,0x4F,0x0C,0xB5,0xAA,0x94,0x8B,\n    0x59,0x80,0xA6,0xF3,0x37,0xA5,0xF0,0x39,0x9A,0x5A,0x94,0x27,0x83,0x12,0x9B,0x39,\n    0x22,0x14,0x4F,0x34,0x52,0xEC,0xE4,0x80,0xB7,0xCD,0xF2,0xAB,0x4C,0x63,0x65,0x6F,\n    0x0A,0x52,0x0E,0xF1,0xDA,0xFE,0xEC,0x6D,0x85,0xFC,0x27,0x5B,0xAB,0xA3,0x76,0xA7,\n    0x22,0x65,0x9A,0x68,0xB3,0xB8,0x6B,0x1D,0x59,0xC2,0x08,0x22,0x24,0xFF,0x17,0x72,\n    0x45,0x38,0x50,0x90,0xDB,0x30,0x7D,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_37b3bbfd206c427bc31f238171a92eb188bda768539b833b05e741bd467a4a70) == 264, \"Wrong size of locale's blob\");\n\n/* ru_RU.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_47f495c68cfbc58f8795861f7bf19e19e02c2ac94c2b21ca899b316a5054410a[] = {\n    0x5E,0x5B,0xD0,0xB4,0xD0,0x94,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xBD,\n    0xD0,0x9D,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD0,0xB4,0xD0,0xB0,0x0A,0xD0,0xBD,0xD0,\n    0xB5,0xD1,0x82,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_47f495c68cfbc58f8795861f7bf19e19e02c2ac94c2b21ca899b316a5054410a) == 36, \"Wrong size of locale's blob\");\n\n/* ru_RU.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_b09cf6590a9edb0ca4581fe6192039457180bdbf0e04a026e2833ea12c1dcfef[] = {\n    0x52,0x55,0x42,0x20,0x0A,0xD1,0x80,0xD1,0x83,0xD0,0xB1,0x2E,0x0A,0x2C,0x0A,0x20,\n    0x0A,0x33,0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,\n    0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b09cf6590a9edb0ca4581fe6192039457180bdbf0e04a026e2833ea12c1dcfef) == 40, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed ru_RU.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_07fbf62a98bb9cab95629eea926bf5be27610653a135de6bb56fc8a2f2a01755[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x68,0x2E,0x93,0x3A,0x00,0x01,\n    0x2C,0xDF,0x4A,0x00,0x10,0x42,0x65,0x00,0x10,0x30,0x42,0x08,0x70,0x06,0x02,0x7D,\n    0x85,0xFE,0x7F,0xE0,0x00,0x30,0x00,0xE6,0x01,0xAA,0x7E,0x4A,0x4D,0x92,0x1A,0x68,\n    0x0C,0x9A,0x7A,0x19,0x40,0xC8,0x03,0x0D,0x0C,0x86,0x99,0x34,0x03,0x10,0xD3,0x4D,\n    0x1A,0x1A,0x30,0x48,0x91,0x34,0xCA,0x61,0x1A,0x40,0x03,0x4D,0x1A,0x0D,0x36,0x92,\n    0xA3,0xBE,0xB5,0x86,0xD8,0x64,0x71,0xB6,0xEA,0x23,0x3F,0xAC,0xD3,0x8B,0x25,0x98,\n    0x2F,0x6E,0xE5,0x85,0x29,0x50,0x96,0x39,0x68,0xF2,0x49,0xD6,0x75,0x2A,0x5E,0xF6,\n    0xD3,0x5D,0x8E,0x90,0xB8,0x5E,0x3A,0x0B,0x6C,0x0F,0x1C,0xC1,0x80,0x41,0xC4,0x42,\n    0x74,0x18,0xC7,0x01,0xC4,0x5F,0x28,0xCA,0x42,0x69,0xB6,0x32,0x6F,0xA8,0x80,0x5D,\n    0x52,0x04,0x1E,0x8B,0xEF,0x9F,0x81,0x55,0xD0,0xF3,0x21,0x42,0xE0,0x3E,0x3F,0x9F,\n    0x5E,0xFC,0x53,0x6B,0xE7,0x92,0x92,0xCF,0x64,0xC6,0xB0,0xC3,0xC8,0x64,0xE6,0x9F,\n    0x2F,0xD5,0x4B,0x6E,0x50,0xDE,0x61,0x58,0xE7,0x72,0xB0,0xB1,0x3A,0x18,0x2A,0xEA,\n    0xB5,0x25,0x73,0x88,0x8A,0x0B,0xAC,0xE5,0xA2,0xA6,0xDC,0x74,0xAA,0xA1,0x7B,0x70,\n    0xAB,0x3C,0xF7,0xE6,0xAE,0x31,0x4C,0x74,0xCA,0x85,0xA2,0x47,0x76,0x54,0x2C,0x0D,\n    0x83,0xBE,0xA1,0x5B,0xA0,0xED,0x1E,0x55,0xD3,0x66,0x16,0xAD,0x25,0x6D,0xD7,0x57,\n    0x26,0xEE,0xE0,0x60,0xB7,0xB2,0xDA,0xBA,0x41,0x0A,0x22,0x62,0x72,0xC1,0xCF,0x6C,\n    0xC9,0x29,0xE8,0x36,0x5E,0xB3,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,0x68,0x2E,0x93,\n    0x3A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_07fbf62a98bb9cab95629eea926bf5be27610653a135de6bb56fc8a2f2a01755) == 273, \"Wrong size of locale's blob\");\n\n/* sk_SK.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f0574badeea8be125e536f231c6152f15a1c753a553e9398859c80c9a2f90466[] = {\n    0x53,0x4B,0x4B,0x0A,0x53,0x6B,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x31,0x0A,0x32,0x0A,0x34,0x0A,\n    0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f0574badeea8be125e536f231c6152f15a1c753a553e9398859c80c9a2f90466) == 34, \"Wrong size of locale's blob\");\n\n/* sk_SK.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_b1720b14d22bf813caae80bcb22d812429a01b50aa8d850353267f1c3fb44838[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b1720b14d22bf813caae80bcb22d812429a01b50aa8d850353267f1c3fb44838) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sk_SK.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_2990e52cdbc1d040c5b26835f93fb3adebbd440e5223ac9eae91e866fde13614[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x14,0x8E,0x11,0xE1,0x00,0x00,\n    0x60,0xDF,0x89,0x80,0x10,0x42,0x01,0x00,0x10,0x10,0x42,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x02,0x20,0x20,0x02,0x08,0x10,0x30,0x00,0xD5,0x80,0xD4,0xF5,0x08,0x34,0x00,\n    0x68,0x68,0xC4,0x00,0x21,0xAA,0x7A,0x4F,0x50,0x69,0xA0,0x03,0x46,0x80,0x00,0x92,\n    0x83,0x49,0xA3,0x43,0x53,0x20,0x1A,0x1A,0x03,0x49,0xC6,0x4E,0x44,0x6C,0x2B,0x27,\n    0x9F,0x08,0x7A,0x02,0x5B,0x55,0x87,0x99,0xDE,0xA7,0x29,0x07,0x6F,0x11,0x6C,0x09,\n    0x35,0x15,0x41,0x49,0x18,0x00,0x25,0x71,0x5B,0xE2,0x95,0x1C,0xEA,0x6B,0xF5,0x33,\n    0xB0,0x50,0xDD,0x42,0x50,0xC2,0x14,0x09,0x21,0x32,0x3A,0x0F,0x84,0x02,0x05,0xBC,\n    0xC8,0xA0,0xE5,0x45,0x35,0xBD,0xEA,0xE6,0x88,0x7E,0x1C,0x70,0x8A,0x51,0x73,0x2D,\n    0x1E,0xF7,0xC0,0xF2,0xBA,0x94,0x4E,0x8B,0xF5,0x3C,0x15,0x3D,0x2D,0x00,0x6B,0x97,\n    0xB5,0xA9,0xF5,0x41,0x05,0x52,0xD9,0x6C,0x65,0x3C,0xA4,0xA0,0x27,0x2E,0xF2,0x56,\n    0x41,0x10,0x2F,0xB9,0xD8,0x19,0x7C,0x92,0x68,0xD7,0x35,0x46,0x0B,0x53,0xC7,0x39,\n    0x54,0x2C,0x7A,0x20,0x59,0x4C,0xED,0x24,0x4D,0x19,0x0E,0x3D,0xE2,0x6D,0x17,0xCE,\n    0x45,0x68,0xCD,0x2B,0x08,0xAF,0xA5,0xA5,0x49,0x97,0x2C,0x31,0x63,0x9A,0xBC,0x24,\n    0x31,0xA0,0xBF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x0A,0x47,0x08,0xF0,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2990e52cdbc1d040c5b26835f93fb3adebbd440e5223ac9eae91e866fde13614) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sk_SK.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_94edf62a2c9ea63a9c7bc2c31f67b2e8bf8a1fa1f51bff889def540566945a09[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xA5,0xBB,0x7F,0x98,0x00,0x00,\n    0x60,0xDF,0x9C,0x00,0x10,0x42,0x01,0x00,0x10,0x10,0x42,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x20,0x02,0x08,0x11,0x0E,0x00,0x30,0x00,0xD5,0x80,0xD4,0xD0,0x43,0x40,0x06,\n    0x86,0x4C,0x40,0x00,0x86,0xA9,0xE9,0x3D,0x40,0x68,0x00,0x1A,0x00,0x00,0x8A,0x80,\n    0x43,0x54,0xD9,0x4F,0x44,0x0C,0x98,0x8D,0xA9,0xA3,0x48,0xC5,0xED,0x44,0x91,0xD4,\n    0x16,0x07,0xB2,0x1E,0x40,0x96,0xA5,0x61,0xE2,0x76,0x29,0xC2,0x41,0xBA,0xBC,0x5A,\n    0x02,0x4C,0xC4,0xEE,0x52,0x46,0x00,0x08,0x93,0x14,0xBE,0x27,0x41,0x65,0x4B,0x1E,\n    0xE2,0x99,0x62,0x76,0x38,0x1C,0xCB,0x20,0x80,0x44,0x40,0xEA,0x6C,0x1F,0x08,0x03,\n    0x0B,0x3B,0x52,0x03,0x5B,0xB8,0x3C,0x22,0xE5,0x49,0x87,0xE1,0x03,0xD2,0x6B,0x38,\n    0x51,0xE5,0x18,0xC6,0x47,0xD3,0xC4,0xBB,0x09,0xC7,0xA9,0xD0,0xD0,0xFB,0x79,0x01,\n    0x4C,0x9E,0xCF,0x53,0x66,0x48,0x68,0xBD,0xDE,0xE6,0xB8,0x6B,0x56,0x43,0x07,0x9D,\n    0x5B,0x49,0x24,0x79,0x65,0x0D,0xC6,0xBB,0x55,0xA4,0xF4,0xDE,0xDE,0x81,0x8B,0x12,\n    0x10,0x74,0x0B,0x45,0x24,0x5A,0xFB,0xF1,0x2A,0x60,0x9A,0x90,0x3B,0x66,0x5E,0x71,\n    0xC2,0xA6,0x77,0xA5,0x2B,0x62,0x6E,0xC6,0x26,0x66,0x06,0x4E,0xEF,0xD5,0xF0,0x40,\n    0x4F,0x1C,0x5C,0xC2,0xC5,0x4E,0x63,0xC2,0xE7,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x85,\n    0x2D,0xDB,0xFC,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_94edf62a2c9ea63a9c7bc2c31f67b2e8bf8a1fa1f51bff889def540566945a09) == 244, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sl_SI.ISO8859-2 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_d945ce35f9c10b35e5da6dc4925bfe67f5eebe796aaae0baddd1b9c5aa0aa982[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x8E,0x16,0xE9,0x60,0x00,0x05,\n    0x98,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xF4,0x53,0x64,0x70,0x04,0x90,0x00,0x0D,0x0D,0x03,0x40,\n    0x00,0xD1,0x88,0x0C,0x40,0xD3,0x4D,0x34,0x00,0x06,0x81,0x91,0xA0,0x06,0x98,0x11,\n    0xA3,0x41,0x91,0xEA,0x64,0x64,0x68,0x0D,0x34,0x3C,0x90,0xD1,0xFF,0xB5,0x54,0x79,\n    0x4D,0x36,0xA7,0xA4,0xF4,0xA7,0x91,0xA6,0xA7,0xA7,0xA1,0x02,0x31,0x31,0x34,0x0C,\n    0x20,0x34,0x00,0x03,0x46,0x80,0x68,0xD1,0x84,0x0C,0x91,0x19,0x00,0xF4,0x63,0x26,\n    0xA9,0xED,0xEA,0xA8,0xC2,0x64,0x34,0x34,0x0C,0x86,0x80,0xC1,0x31,0x0D,0x00,0x01,\n    0xB4,0x80,0x0C,0x8F,0x51,0x84,0x68,0x68,0x31,0x34,0xD3,0x4F,0x49,0x80,0x83,0x09,\n    0xFE,0xF5,0x55,0x00,0x34,0x68,0x00,0x68,0x00,0x00,0x30,0x9A,0x00,0x03,0x4D,0x32,\n    0x68,0x68,0xC0,0x81,0xA1,0x91,0x88,0x53,0x0A,0x93,0xD4,0x86,0x47,0xA8,0x00,0xD3,\n    0x4C,0x86,0x80,0x03,0x4D,0x34,0x68,0xC9,0x93,0x10,0x19,0x34,0x00,0x00,0x0D,0x19,\n    0x06,0x46,0x40,0x62,0x06,0x4D,0x1A,0x34,0x64,0xD0,0x32,0x69,0xA6,0x86,0x23,0x46,\n    0x80,0x00,0x64,0xD0,0x68,0x60,0x81,0xA6,0x4C,0x4C,0x98,0x40,0x1A,0x0C,0x83,0x4D,\n    0x31,0x19,0x1B,0x42,0x27,0xFA,0x95,0x55,0x00,0x00,0x00,0x00,0x34,0x06,0x86,0x80,\n    0x06,0x80,0x01,0x90,0x68,0x06,0x20,0x34,0x00,0x00,0x03,0x40,0x00,0x00,0x1A,0x0D,\n    0x1A,0x03,0x26,0x4C,0x8D,0x0D,0x03,0x20,0xD3,0x46,0x20,0x00,0x68,0x68,0x1A,0x0D,\n    0x00,0x00,0x00,0x00,0x0C,0x0C,0x36,0x0B,0x0B,0x13,0x1D,0x8A,0xC7,0x64,0xB2,0xD9,\n    0xAC,0xF6,0x84,0xEC,0x8C,0xAA,0x14,0xAA,0x3D,0x05,0x68,0xDA,0x56,0x24,0x56,0xAB,\n    0x5B,0x33,0x3F,0x3E,0xD8,0xD4,0xD7,0x6D,0xB7,0x5B,0xDB,0x2E,0x17,0x1B,0x93,0x6D,\n    0xCE,0xE9,0x75,0xBB,0x5D,0xDB,0x9B,0xDB,0x9B,0xF1,0x78,0xCC,0x6E,0x3B,0x1E,0xE1,\n    0x90,0x71,0xC8,0xB9,0x64,0x9C,0xDC,0xF2,0x99,0x5C,0xB6,0x5F,0x33,0x9A,0x4B,0x9C,\n    0xCF,0xE8,0x1D,0x34,0x3A,0x2D,0x2B,0xB6,0x99,0xDF,0x51,0xA9,0xD5,0x6A,0xF5,0x9A,\n    0xDD,0x76,0xBF,0x60,0xF1,0xB1,0x79,0x7A,0x7B,0x7C,0x7D,0xD9,0x3C,0x3F,0xC0,0x40,\n    0x6E,0x60,0x60,0xB7,0x69,0x13,0x3F,0xC2,0x24,0x85,0x86,0x81,0x87,0x4B,0xC4,0xE2,\n    0xF1,0xA2,0x61,0x39,0x1C,0x9E,0x56,0xFD,0x2C,0x57,0x31,0x97,0x38,0x03,0x63,0x93,\n    0xA8,0x3B,0x8E,0x61,0xEA,0x10,0x54,0x99,0x64,0x52,0xD9,0x45,0xD2,0xAA,0x51,0x60,\n    0xC5,0x92,0x60,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,\n    0x88,0x88,0x88,0x88,0x88,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x80,0x02,\n    0x08,0x03,0x63,0x16,0x98,0xC6,0x31,0x96,0xC1,0x9B,0x44,0x63,0x6D,0x80,0x00,0x02,\n    0x22,0x22,0x22,0x22,0x22,0xE0,0x11,0x80,0xD1,0x19,0x1D,0xCD,0x4E,0x61,0x86,0x47,\n    0x9A,0x6A,0x83,0x4E,0x90,0x4E,0x9C,0xF5,0x2A,0x24,0x50,0x38,0xE3,0x95,0x74,0x0F,\n    0x3C,0xF3,0xCF,0x52,0x99,0x04,0x10,0x35,0x05,0x68,0x2C,0x41,0x54,0x94,0x84,0x9A,\n    0xB5,0x6A,0xD6,0xAC,0x59,0x29,0x24,0xBB,0xA2,0xB5,0x6A,0xF9,0x55,0xC8,0xB0,0x5E,\n    0xBD,0x7B,0x16,0x48,0xA2,0x8A,0x28,0xB0,0x63,0x2D,0x2F,0x31,0x33,0x35,0xD2,0xE9,\n    0xCD,0xF7,0xFC,0x12,0x32,0x52,0x72,0x92,0xBE,0x1F,0x17,0x8F,0xC9,0xE5,0x96,0xF3,\n    0x4B,0xCC,0x79,0xE6,0x66,0xA6,0xFD,0x13,0x93,0xBE,0x99,0xE9,0xFA,0x0A,0x1F,0x57,\n    0xAF,0xD9,0xED,0xF7,0x7B,0xFE,0x1F,0x1A,0x2F,0x97,0xCF,0xE9,0xF5,0xA3,0xA4,0xFB,\n    0x7D,0xFF,0x1F,0x9A,0x5F,0xD5,0x37,0xE6,0xAB,0xF5,0xFB,0xFE,0x55,0xD6,0x7F,0x7F,\n    0xD5,0xB5,0xD5,0xB5,0xFC,0x09,0x49,0x3D,0x96,0xC6,0x46,0x3E,0x3A,0x3A,0x32,0x32,\n    0x2E,0x2D,0x7A,0xFD,0x46,0x9E,0x0F,0x4B,0x05,0xA1,0x81,0x81,0x7F,0x7F,0x7E,0x7E,\n    0x5C,0xB9,0x5B,0x22,0xA3,0xC8,0x88,0x88,0x89,0x62,0x44,0x9D,0x4A,0xB3,0xC8,0x88,\n    0x88,0x89,0x62,0x44,0x72,0x27,0xA0,0x82,0x0A,0x49,0x24,0x91,0x54,0xCA,0xA1,0x42,\n    0x84,0x11,0x45,0x13,0xCA,0xBC,0xE3,0x93,0x26,0x4C,0x71,0xCA,0x58,0x55,0xD8,0xEC,\n    0xAA,0xD7,0x2B,0xEA,0xD7,0x57,0x05,0x4A,0xE2,0x8B,0x6A,0x57,0x54,0xAF,0x25,0x29,\n    0x4A,0x52,0x93,0x5B,0x14,0xAC,0xFF,0xD6,0x20,0x56,0x02,0x56,0x0B,0x11,0x18,0x91,\n    0x09,0x09,0x12,0xA2,0x13,0x01,0x03,0x13,0x12,0x00,0x00,0x02,0x13,0x33,0x33,0x10,\n    0x10,0x04,0x10,0x25,0x51,0x99,0x2A,0x12,0x21,0x21,0x22,0x54,0x42,0x60,0x20,0x62,\n    0x62,0x46,0x02,0x80,0x03,0x12,0x33,0x33,0x10,0x10,0x15,0xA4,0x21,0x09,0x42,0x12,\n    0x94,0x22,0xB1,0x45,0xA2,0x42,0x12,0x93,0x11,0xAA,0xB5,0xA4,0x95,0x6A,0xAB,0x5A,\n    0xA4,0x96,0xB5,0x49,0x2D,0x6B,0x55,0x55,0x54,0x92,0xD2,0x12,0x47,0xAD,0x20,0x00,\n    0x00,0xC9,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x79,0x03,0xF2,0x93,0xDA,0x90,\n    0x00,0x00,0x00,0x00,0x32,0x64,0x01,0x10,0x01,0x04,0x44,0x15,0x24,0x00,0x00,0x00,\n    0x00,0x88,0xA4,0xB1,0x52,0xA5,0x48,0x52,0xCA,0x45,0x54,0x82,0x92,0xD2,0x29,0x69,\n    0x52,0xA5,0x48,0xAB,0x22,0x91,0x25,0x4A,0x95,0x2C,0x55,0x90,0x52,0x45,0x4A,0x91,\n    0x00,0x40,0x44,0x45,0x25,0x8A,0x95,0x2A,0x42,0x96,0x52,0x2A,0xA4,0x14,0x96,0x91,\n    0x4B,0x4A,0x95,0x2A,0x45,0x59,0x14,0x89,0x2A,0x12,0xA5,0x8A,0xB2,0x0A,0x48,0xA9,\n    0x52,0x20,0x22,0x2D,0x6B,0x52,0x11,0x5A,0x2E,0xE4,0x8A,0x70,0xA1,0x21,0x1C,0x2D,\n    0xD2,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d945ce35f9c10b35e5da6dc4925bfe67f5eebe796aaae0baddd1b9c5aa0aa982) == 946, \"Wrong size of locale's blob\");\n\n/* sl_SI.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_e5c68597b20c5551f244dfade51c21d097a465147c799ee423bd2306655ad728[] = {\n    0x5E,0x5B,0x59,0x79,0x4A,0x6A,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x4E,0x6E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e5c68597b20c5551f244dfade51c21d097a465147c799ee423bd2306655ad728) == 18, \"Wrong size of locale's blob\");\n\n/* sl_SI.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_f609eecbfc7cd30cdc21b3246325679df543b68de3d40f172698088b2b9d077d[] = {\n    0x53,0x49,0x54,0x20,0x0A,0x53,0x49,0x54,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,\n    0x32,0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f609eecbfc7cd30cdc21b3246325679df543b68de3d40f172698088b2b9d077d) == 36, \"Wrong size of locale's blob\");\n\n/* sl_SI.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_c9a2485078b1c44fdddaaf88ab4277dcdadbd99b501d47e876e55a03d4affb45[] = {\n    0x2C,0x0A,0x20,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c9a2485078b1c44fdddaaf88ab4277dcdadbd99b501d47e876e55a03d4affb45) == 9, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sl_SI.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_229b26b1185a74b14e58301da32490f9aef09166d3b7ece6d2dd67b31f1ad1ef[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xDB,0x9E,0x4B,0x4C,0x00,0x00,\n    0x6F,0xDF,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x00,0x40,0x30,0x00,0xE6,0xA4,0x24,0x92,0x69,0x94,0x66,0x91,0xEA,0x61,0x3D,\n    0x27,0xA0,0x21,0x8C,0x26,0x26,0x4C,0x04,0xC0,0x00,0x24,0x44,0x86,0x49,0xA3,0x23,\n    0x40,0x06,0x84,0xA9,0x26,0xBD,0xDB,0x4C,0xD6,0x87,0x4F,0x55,0x63,0x7C,0xE2,0xF8,\n    0x22,0xD8,0x9A,0x39,0x37,0x2E,0x3C,0x30,0xED,0xF0,0xD7,0xDE,0xD6,0xAB,0x60,0xD7,\n    0xB5,0x61,0x74,0xEA,0xE6,0x78,0xF3,0x1C,0x8A,0x06,0x85,0x19,0x58,0x30,0xCC,0x39,\n    0xA7,0x3D,0x7F,0x54,0xA8,0x2C,0xA9,0x0B,0x08,0xAB,0xA8,0x9A,0x8F,0xA0,0xC8,0x59,\n    0xED,0x79,0x40,0x81,0x8E,0x40,0x97,0x44,0xC7,0xD6,0x4F,0x8A,0x0B,0x2E,0xD0,0xCD,\n    0xC3,0xAF,0x79,0xC1,0xB9,0x69,0xD2,0xD4,0x0E,0xF8,0x1B,0x05,0x15,0xC9,0x22,0x47,\n    0x61,0xB2,0x7C,0x13,0x30,0xBE,0x06,0x2B,0x38,0x0C,0x93,0x4C,0xAB,0xAD,0x45,0x70,\n    0xA6,0xFA,0xD0,0x70,0x42,0x93,0x3D,0x07,0x2A,0xA4,0x9A,0x70,0x58,0xE3,0x7A,0x2A,\n    0xA0,0x6D,0x33,0x06,0x42,0x31,0xB4,0x8E,0x28,0x5A,0xC6,0x09,0x62,0x6D,0x6A,0x8E,\n    0xB9,0xC5,0x8B,0x8C,0x09,0xC8,0xB8,0xD4,0x5F,0x4A,0xAC,0x14,0x4F,0xE2,0xEE,0x48,\n    0xA7,0x0A,0x12,0x1B,0x73,0xC9,0x69,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_229b26b1185a74b14e58301da32490f9aef09166d3b7ece6d2dd67b31f1ad1ef) == 232, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sl_SI.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_cc9157f4e13d1a5080920f3d33c6439f19df53b1a4855f4f748ba4a90dc378f4[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xE7,0x13,0x61,0xF2,0x00,0x00,\n    0x6F,0xDF,0xC4,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x00,0x02,0x04,0x00,0x30,0x00,0xE6,0x10,0x94,0xD2,0x9A,0x64,0x98,0x47,0xA8,\n    0xD3,0x4F,0x29,0xE8,0x80,0x31,0xA6,0x23,0x08,0xD3,0x00,0x00,0x02,0x44,0x49,0xA6,\n    0x49,0xA8,0xF2,0x4C,0x46,0x46,0xC4,0x4C,0xE9,0x9A,0xC9,0xF7,0x99,0x5A,0x1F,0x20,\n    0xD6,0x47,0x1D,0xE5,0x08,0xB1,0x7C,0x8D,0x9D,0x97,0xB7,0x30,0x43,0xF1,0xA5,0x7A,\n    0x6F,0x7B,0x5F,0x15,0x92,0xB4,0x71,0x9D,0x9D,0x40,0x81,0xDB,0x52,0x81,0xB1,0x44,\n    0xD7,0x08,0x48,0x75,0x39,0xD7,0xCD,0x8B,0x03,0x6B,0x48,0xDC,0x49,0xB1,0xA2,0x6A,\n    0x38,0x06,0x42,0xD3,0x7A,0x94,0x08,0x18,0xE4,0x09,0x74,0x4C,0x7F,0x72,0x6C,0xA0,\n    0xBA,0xFC,0x86,0x72,0x23,0x95,0x0D,0x8F,0x26,0x07,0x0B,0xB8,0x1E,0xB6,0x1F,0xC2,\n    0xC5,0x6E,0x66,0x66,0x7A,0x0F,0xE5,0x4A,0xA6,0xC5,0xCC,0x3E,0x97,0x5A,0x8C,0x93,\n    0x5C,0xED,0xD2,0xC2,0xC0,0x53,0x5B,0x50,0x70,0x42,0x93,0x4D,0x47,0x2A,0xC4,0x9A,\n    0xFC,0xAC,0xB2,0xAA,0x2C,0xA0,0x6D,0x33,0x16,0x42,0x32,0xBC,0x8E,0x28,0x5E,0xE6,\n    0x29,0x64,0x6F,0x7B,0x0E,0xDA,0x45,0xCC,0x0C,0x49,0xCC,0xC0,0xE8,0x2E,0x0B,0x36,\n    0x8D,0xF8,0xC0,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x21,0xCE,0x26,0xC3,0xE4\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cc9157f4e13d1a5080920f3d33c6439f19df53b1a4855f4f748ba4a90dc378f4) == 238, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-2 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_8c9e5ab0b14669dfaff0dde1332b13ce887bc2f4e6724effe5d149dcc7f1c00e[] = {\n    0x5E,0x5B,0x64,0x44,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8c9e5ab0b14669dfaff0dde1332b13ce887bc2f4e6724effe5d149dcc7f1c00e) == 18, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-2 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_683b15b96a403a9933c8591814cb74dfbc97c7a5e1237be25fa3edd8c1e2de6a[] = {\n    0x59,0x55,0x44,0x20,0x0A,0x64,0x69,0x6E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,0x30,0x0A,0x32,0x0A,\n    0x32,0x0A,0x32,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_683b15b96a403a9933c8591814cb74dfbc97c7a5e1237be25fa3edd8c1e2de6a) == 36, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-2 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_b87e229987219c0c89e95d6ea02942af19e5a33db9618fab497b7a742be91957[] = {\n    0x2C,0x0A,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b87e229987219c0c89e95d6ea02942af19e5a33db9618fab497b7a742be91957) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sr_YU.ISO8859-2 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_3d63b59e119323f0a518574a76b40e9dfd86c9e665c994502b6cda10c1026717[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF1,0x41,0x18,0xB3,0x00,0x00,\n    0x6C,0x5F,0x81,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x62,0x08,0x70,0x3F,0xBF,0xDF,\n    0x00,0x00,0x40,0x30,0x00,0xE6,0x10,0x95,0x3D,0x22,0x9E,0xA1,0x88,0x7A,0x9A,0x64,\n    0xF5,0x3D,0x4F,0x69,0x40,0x63,0x09,0x89,0x93,0x01,0x30,0x00,0x09,0x20,0x84,0xC9,\n    0x13,0xF5,0x3D,0x50,0x68,0x19,0x94,0x69,0x5D,0x16,0x6D,0x7C,0x16,0xA9,0xF6,0x50,\n    0xBA,0x31,0xB7,0x99,0x4C,0xBC,0x27,0xC8,0xAB,0x41,0x64,0xC7,0x34,0x33,0xF5,0xB5,\n    0x1F,0x81,0x89,0xB2,0xE8,0x9E,0x79,0xEA,0xEC,0xA4,0x48,0xDB,0x72,0xC1,0x52,0xCA,\n    0x11,0x10,0x90,0xCA,0x94,0xF7,0x77,0x1C,0x21,0xAF,0xA9,0xC4,0xE2,0xA7,0xBB,0x53,\n    0x76,0x4C,0xA7,0x4B,0x90,0x64,0x39,0x0B,0x53,0xB1,0x21,0xDC,0x62,0x24,0x52,0xD4,\n    0x4C,0x35,0xE0,0xE1,0x6E,0xBE,0x65,0x87,0x38,0x3C,0x9E,0x87,0x2B,0xFB,0xC8,0xDB,\n    0xAA,0xAE,0x0B,0x98,0x3F,0x14,0x14,0x40,0xE1,0xA5,0xDB,0x91,0x8D,0x19,0xE9,0x5D,\n    0x6C,0x2A,0x0A,0x2B,0xB4,0x8C,0xE3,0xA8,0x32,0x9D,0x58,0x7F,0x6E,0xAA,0xF7,0xAA,\n    0x2C,0x9C,0x61,0x59,0x92,0xBF,0x62,0x08,0x33,0x72,0xC8,0xDC,0x63,0x27,0x18,0xB8,\n    0xD8,0x97,0xC1,0x6A,0x8D,0x1D,0x0A,0x16,0x3E,0x05,0xC9,0x83,0x0B,0xAA,0xCC,0x4F,\n    0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x1E,0x28,0x23,0x16,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3d63b59e119323f0a518574a76b40e9dfd86c9e665c994502b6cda10c1026717) == 235, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sr_YU.ISO8859-5 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_173a23edbd724fef42c3dcbda73ba1160b34980c64ef8fa48ab82d611bbf6a72[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x4A,0x62,0xB2,0x99,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x8E,0x00,0x09,0x03,0x46,0x4C,0x43,0x02,0x60,\n    0x8C,0x4D,0x30,0x09,0x80,0x98,0x13,0x4C,0x9A,0x68,0x64,0xC9,0x89,0x80,0x11,0x89,\n    0x80,0x43,0x11,0x80,0x8D,0x0C,0x20,0xD0,0xC9,0x89,0x93,0x26,0x40,0xC1,0x34,0xC4,\n    0xC4,0xC0,0x98,0x46,0x01,0x00,0x0C,0x13,0x04,0xC1,0x34,0xC2,0x1A,0x68,0x0D,0x19,\n    0x1B,0xFF,0x4A,0xA4,0xD1,0x21,0xA0,0x34,0x00,0x34,0xC8,0x00,0xC8,0xD3,0x41,0xA3,\n    0x41,0xA0,0x00,0x03,0x4D,0x06,0x43,0x40,0xC9,0xA0,0x32,0x68,0x0D,0x00,0x06,0x80,\n    0x00,0x34,0x00,0x32,0x34,0x68,0x03,0x23,0x40,0xC4,0x0C,0x80,0x03,0x41,0xA1,0x90,\n    0x30,0x40,0xD3,0x20,0x69,0xEA,0x3D,0xEF,0x54,0xDE,0xAA,0x9F,0xA9,0xA9,0xEA,0x82,\n    0x00,0x00,0x09,0x80,0x09,0x80,0x00,0x00,0x00,0x00,0x98,0x26,0x00,0x00,0x00,0x00,\n    0x00,0x4F,0x49,0x80,0x09,0x80,0x00,0x09,0xA6,0x00,0x00,0x1A,0x34,0x0D,0x0D,0x00,\n    0x00,0x26,0x26,0x99,0x30,0x00,0x1A,0x4C,0x13,0x04,0xC0,0x03,0x37,0xFA,0xA9,0x55,\n    0x34,0x18,0x9A,0x68,0xC0,0x26,0x4C,0x86,0x13,0x00,0x23,0x26,0x4C,0x4D,0x1A,0x1A,\n    0x34,0xD3,0x10,0xC4,0xC8,0xC0,0x08,0x0C,0x46,0x21,0xA3,0x4D,0x31,0x1A,0x62,0x60,\n    0x9A,0x68,0xD1,0x89,0x89,0x88,0xC9,0x89,0x89,0x91,0x91,0xA6,0x00,0x40,0xD3,0x04,\n    0xC4,0x68,0xC9,0x88,0x68,0x18,0x13,0x01,0x34,0xC1,0xB2,0x9E,0xA9,0xEC,0x1E,0x20,\n    0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,0x32,0x34,0x36,0x38,0x3B,0xF0,0x1E,0x1F,\n    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0xF8,0x94,0x95,0x15,0xEC,0x96,0x97,\n    0x98,0x18,0x99,0x19,0x9A,0x1A,0x9B,0x1B,0x9C,0x1C,0x9D,0x1D,0x9E,0x1E,0x9F,0x1F,\n    0xA0,0x20,0xA1,0x21,0xA2,0x22,0xA3,0x23,0xA4,0x24,0xA5,0x25,0xA6,0x26,0xA7,0x27,\n    0xFC,0x94,0x14,0x54,0x94,0xD5,0x3E,0x6A,0xAA,0xCA,0xEB,0x0B,0x2B,0x4B,0x6B,0x8B,\n    0xAB,0xCB,0xEC,0x0C,0x2C,0x4C,0x6C,0x8C,0xAC,0xD0,0x2D,0x2D,0x4D,0x6D,0x9B,0x4D,\n    0xCE,0x0E,0x2E,0x5B,0xE1,0x5D,0xDD,0xDE,0x1E,0x9E,0x9E,0xDF,0x5F,0xBE,0x80,0x00,\n    0x3F,0xC0,0x40,0xC1,0x41,0x85,0x85,0x82,0x87,0x88,0x89,0x8A,0xFB,0x45,0xC6,0x46,\n    0xC7,0x47,0xC8,0x48,0xC9,0x49,0xCA,0x4A,0xCB,0x4B,0xCC,0x4C,0xCD,0x4D,0xCE,0x4E,\n    0xFD,0xE7,0xBF,0x13,0xF4,0x14,0x34,0x5D,0x14,0xB4,0xD4,0xF5,0x1E,0x15,0x55,0x95,\n    0xB5,0xDE,0xBD,0x40,0x40,0xD9,0x82,0x05,0x6B,0x6F,0x71,0x72,0x0C,0x1D,0xD5,0xE0,\n    0x4B,0xDB,0xEB,0xF0,0x98,0x58,0x78,0x98,0xB8,0xD8,0xF9,0x19,0x39,0x59,0x79,0x99,\n    0xBF,0x9C,0xEC,0xFD,0x09,0x29,0x3F,0x57,0xAF,0xD9,0xED,0xF7,0x4A,0x4A,0xCB,0x4B,\n    0xCC,0x7B,0xFE,0x1F,0x1F,0x97,0xCE,0x67,0xE9,0x35,0x2F,0x31,0x37,0xF5,0xFB,0x7D,\n    0xE6,0x7F,0x1F,0x99,0xA9,0xB9,0xCF,0xD3,0x2F,0xDF,0xF1,0x9B,0x26,0x68,0x0B,0x24,\n    0xCE,0xA9,0xA4,0xEA,0xF3,0xD9,0xDF,0xEC,0xEC,0xF2,0xFD,0x68,0x88,0x88,0x88,0x88,\n    0x8C,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x6D,0x40,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0xC0,0xCD,0xCD,0x68,0xD1,0x5A,0x75,0x29,0x50,0x49,0x25,0x24,0xA0,\n    0x92,0x4E,0xC8,0x92,0x52,0xBE,0xD4,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x32,0x89,0x4A,0x52,0xB7,0x19,0x65,0x96,0xE8,0x33,0x42,0x19,0xA1,0x0C,\n    0x90,0x84,0x21,0x1C,0xF4,0x21,0x08,0x47,0xFB,0xBA,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x94,0xA5,0x2C,0x13,0x3C,0xC2,0x94,\n    0xA5,0x29,0x4C,0x2E,0xBA,0xEB,0xAE,0xBC,0xD4,0xD4,0xD4,0xB9,0x52,0xA5,0x4A,0x97,\n    0x2E,0x5F,0x3F,0xBB,0x99,0x08,0x49,0x24,0x92,0x49,0x24,0x90,0xE6,0xCC,0x95,0x2E,\n    0x63,0xA1,0x8C,0x63,0x09,0x21,0x08,0x42,0x11,0x8C,0x63,0x18,0xC2,0x10,0x84,0x21,\n    0x08,0xC6,0x31,0x89,0x18,0xC5,0xF8,0xC6,0x20,0x00,0x03,0xA0,0x8C,0x40,0x00,0x00,\n    0x00,0x00,0x00,0x0F,0xCA,0x31,0x0E,0x44,0x63,0xB8,0x8C,0x40,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x64,0x62,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x07,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x20,0x94,0xC5,0x65,0x32\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_173a23edbd724fef42c3dcbda73ba1160b34980c64ef8fa48ab82d611bbf6a72) == 796, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-5 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_dd4708aded39fbc9470b79735328680b8234ebd52030a44659167b8cdad00a89[] = {\n    0x5E,0x5B,0xD4,0xB4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xDD,0xBD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xD4,0xD0,0x0A,0xDD,0xD5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_dd4708aded39fbc9470b79735328680b8234ebd52030a44659167b8cdad00a89) == 26, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-5 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_abc5bcfbdcca1864995dcf76a9b96084a801e9c37eadb461c18ea0514cc9f737[] = {\n    0x59,0x55,0x44,0x20,0x0A,0xD4,0xD8,0xDD,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,\n    0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_abc5bcfbdcca1864995dcf76a9b96084a801e9c37eadb461c18ea0514cc9f737) == 36, \"Wrong size of locale's blob\");\n\n/* sr_YU.ISO8859-5 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_37a5f564b471f28a5b51f49481160c35b9002ae192d968774e766c83a71f755b[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_37a5f564b471f28a5b51f49481160c35b9002ae192d968774e766c83a71f755b) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sr_YU.ISO8859-5 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_386c20c2f55b86c63a7f635504a4a193733f71cff59cdf14fdc94801e6fbe2d7[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x82,0xC4,0x0F,0x66,0x00,0x00,\n    0xAA,0x5F,0x03,0x80,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x7E,\n    0x5F,0xFD,0x80,0x00,0x60,0x30,0x00,0xD5,0x80,0xD3,0x52,0x00,0x00,0x00,0x69,0xB5,\n    0x1A,0x01,0xAA,0x79,0x09,0xA0,0x69,0xA0,0x34,0x64,0x64,0x00,0x24,0x49,0xA8,0x64,\n    0x4D,0x01,0x0C,0x8D,0x94,0x34,0xDA,0x4A,0x49,0xB7,0x21,0x15,0x45,0xFA,0x83,0xE0,\n    0x38,0xC3,0x8A,0x65,0x02,0x34,0x98,0x91,0x03,0xDA,0x16,0x41,0x22,0x4A,0x32,0x91,\n    0x12,0xC4,0x56,0xD7,0xBE,0x3B,0x47,0xA9,0xCE,0x2D,0x61,0x50,0xE1,0x3B,0x46,0xE8,\n    0xD2,0x20,0x04,0x12,0x19,0xC2,0xB9,0x55,0x10,0x3C,0x14,0x94,0x88,0x8E,0xBF,0x69,\n    0x72,0xA7,0xCB,0x9E,0x8A,0x57,0xDF,0xF3,0x31,0x1A,0x21,0x1D,0xE9,0x01,0xA8,0xC8,\n    0xA1,0x4D,0x13,0x2D,0xE1,0x49,0x54,0xCC,0xB6,0x5A,0x43,0x35,0xBC,0x78,0x1B,0x2F,\n    0x5E,0x47,0xCD,0x1B,0x15,0x2C,0x6F,0x0D,0xEB,0x87,0x81,0x9C,0x45,0xC4,0x53,0x74,\n    0xC9,0x48,0x21,0x50,0xCD,0x55,0x51,0x6E,0x29,0xCE,0xB2,0x17,0xA8,0x18,0xAE,0x68,\n    0xD4,0xB7,0x02,0x49,0x39,0x54,0xAA,0x32,0x19,0x99,0xE7,0x2B,0x0F,0x19,0x83,0x13,\n    0x0B,0xC7,0x99,0x71,0x81,0xEE,0x2D,0x8C,0x51,0x64,0xCC,0xD3,0x41,0x07,0xF8,0xBB,\n    0x92,0x29,0xC2,0x84,0x84,0x16,0x20,0x7B,0x30\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_386c20c2f55b86c63a7f635504a4a193733f71cff59cdf14fdc94801e6fbe2d7) == 233, \"Wrong size of locale's blob\");\n\n/* sr_YU.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_c6fcefb4582f864ead717931436c750ad12f2e16e611017908d8f17f34824825[] = {\n    0x5E,0x5B,0xD0,0xB4,0xD0,0x94,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xBD,\n    0xD0,0x9D,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD0,0xB4,0xD0,0xB0,0x0A,0xD0,0xBD,0xD0,\n    0xB5,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c6fcefb4582f864ead717931436c750ad12f2e16e611017908d8f17f34824825) == 34, \"Wrong size of locale's blob\");\n\n/* sr_YU.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_51a600f2e8b549e4e82a116e687aa4a607b649a5d8c014ba2d15c58d2c63d2cf[] = {\n    0x59,0x55,0x44,0x20,0x0A,0xD0,0xB4,0xD0,0xB8,0xD0,0xBD,0x0A,0x2C,0x0A,0x20,0x0A,\n    0x33,0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,\n    0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_51a600f2e8b549e4e82a116e687aa4a607b649a5d8c014ba2d15c58d2c63d2cf) == 39, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sr_YU.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_070850dfbb3cd94cdf7adc7be019a4ad8701422e5df10bd0e768e0d23fd3de72[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xAE,0x13,0x7C,0x62,0x00,0x01,\n    0x23,0x5F,0x6A,0x00,0x10,0x42,0x01,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x7D,\n    0x80,0x00,0x60,0x7E,0x5F,0xE0,0x00,0x30,0x00,0xF5,0x80,0x69,0xA9,0x00,0x00,0x00,\n    0x34,0xC9,0xA0,0x03,0x54,0xF2,0x13,0x40,0x34,0x00,0xD0,0xD0,0xD0,0xD0,0x12,0x44,\n    0xD4,0x32,0x26,0x8D,0x09,0x82,0x0F,0x28,0xDA,0x3D,0x29,0x29,0x31,0xA8,0x44,0xD6,\n    0x3F,0x90,0x78,0x07,0x18,0x71,0x44,0xA0,0x46,0x93,0x10,0x20,0x7D,0x3E,0x87,0xA4,\n    0x41,0x46,0x50,0x22,0x58,0xF1,0x6C,0x6B,0xA1,0xAC,0x74,0x9B,0xDE,0xB5,0x16,0x86,\n    0x09,0x56,0x35,0x45,0x90,0xF0,0x20,0x90,0xAD,0x9A,0xC6,0xB5,0x10,0x38,0x14,0x8C,\n    0x88,0x0F,0xC0,0x12,0x36,0x10,0x90,0x7C,0xD7,0x3B,0x94,0xBE,0x9A,0x3A,0x28,0x5F,\n    0xBB,0x31,0xB8,0x64,0x3A,0x3F,0x24,0xE1,0xA0,0xC3,0xC8,0x96,0x69,0x8A,0x6A,0xA0,\n    0x9A,0x63,0x0A,0xAC,0xDD,0x8D,0x2D,0x1A,0xE2,0xAB,0x6F,0x63,0x72,0x45,0x49,0x94,\n    0x37,0x86,0xF5,0xC3,0x51,0x8C,0x85,0x90,0xA2,0xC8,0x82,0x4E,0x3A,0x91,0x8A,0x9A,\n    0x92,0xDC,0x4B,0x94,0xE0,0x2D,0x4E,0x30,0xAC,0x64,0x68,0x53,0x81,0x04,0x1C,0x66,\n    0x4D,0x18,0x0C,0x62,0x7B,0xC2,0x83,0x5F,0x0E,0x5E,0x5D,0x68,0xD8,0x96,0x17,0x1D,\n    0x05,0x52,0xF4,0x51,0x31,0x8A,0x64,0x0E,0x7F,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x57,\n    0x09,0xBE,0x31,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_070850dfbb3cd94cdf7adc7be019a4ad8701422e5df10bd0e768e0d23fd3de72) == 244, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sv_SE.ISO8859-1 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_11c1e8905413bef99a2fde568389e78698c50ff348438fc59d72b08e743d3bc1[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xB1,0xA6,0x21,0xB5,0x00,0x05,\n    0x8B,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xDA,0xD4,0x8C,0x70,0x01,0x26,0x99,0x03,0x20,0x69,0xA6,\n    0x04,0x69,0xA0,0xD3,0x10,0x18,0x4D,0x31,0x0C,0x8C,0x9A,0x03,0x26,0xCA,0x62,0x1A,\n    0x68,0xC9,0x80,0x26,0x43,0x04,0xF4,0x80,0xC8,0x60,0x86,0x80,0xF5,0x32,0x32,0x69,\n    0x93,0x27,0xA9,0xFA,0x81,0x3F,0xF5,0x54,0xFD,0x23,0x23,0x6A,0x79,0x09,0xA9,0xFA,\n    0x9E,0x99,0x24,0xC2,0x18,0x99,0x30,0x81,0x90,0x32,0x34,0x00,0x30,0x8D,0xA8,0x24,\n    0x01,0xA0,0xC4,0x68,0x34,0xC2,0x69,0xA3,0x23,0x20,0xD1,0x90,0x60,0x86,0x4C,0x4D,\n    0x1A,0x64,0xD1,0xA6,0x4D,0x03,0x40,0x62,0x64,0xD1,0x83,0x40,0x80,0xC2,0x06,0x8C,\n    0x47,0x94,0xDA,0x04,0x32,0x69,0xA6,0x9F,0x9A,0x9E,0xF5,0x4A,0x8C,0xCA,0x32,0x0D,\n    0x31,0x03,0x13,0x43,0x21,0x90,0x32,0x62,0x62,0x31,0x18,0x26,0x98,0x46,0x8C,0x98,\n    0x0A,0x98,0xD5,0x47,0x91,0xEA,0x9A,0x6A,0x69,0xE6,0x12,0x87,0xA1,0x00,0x00,0x00,\n    0x19,0x34,0x62,0x62,0x68,0x68,0x00,0x00,0x00,0x06,0x8D,0x03,0x02,0x62,0x06,0x08,\n    0xC2,0x1A,0x68,0xC8,0x00,0x1A,0x00,0x00,0x00,0x1A,0x00,0x00,0x69,0x84,0x68,0xC4,\n    0x19,0x18,0x00,0x26,0x83,0x68,0x44,0xFF,0x52,0xA9,0x4D,0x40,0x00,0xD0,0xC8,0x00,\n    0x00,0x06,0x20,0xD0,0x00,0x00,0x00,0xD0,0x00,0x06,0x20,0x0C,0x80,0x03,0x40,0x00,\n    0x34,0x00,0xD0,0x00,0x34,0x00,0x01,0xA3,0x46,0x80,0x00,0x00,0x68,0x01,0xA0,0x0D,\n    0x00,0x00,0x00,0x06,0x42,0x83,0x33,0x39,0xE8,0x2A,0x56,0x66,0x85,0x8D,0x2B,0x6B,\n    0x8D,0x55,0xD5,0xCB,0xD1,0x49,0x35,0x18,0x57,0xAB,0xF6,0x06,0x2D,0x6D,0x9D,0xEB,\n    0x15,0x8E,0xC9,0x65,0xB3,0x59,0xED,0x16,0x9B,0x55,0xAE,0xD9,0x6D,0xB7,0x5B,0xEE,\n    0x17,0x1B,0x95,0xCD,0xAF,0x4C,0xD8,0xDA,0xDD,0xA7,0xD4,0x6A,0x5B,0xDC,0x35,0x5A,\n    0xB7,0x17,0x27,0x27,0x37,0x3D,0x69,0x6A,0x36,0x26,0xF6,0x5B,0x33,0x46,0x8D,0xBB,\n    0xA7,0x79,0xDB,0x6D,0xDE,0xB7,0x05,0xEE,0x49,0x7E,0x80,0x81,0x82,0x7D,0x7E,0x7F,\n    0xDE,0x43,0xC4,0x6F,0x77,0xDB,0xF7,0x97,0xA7,0xB3,0xCF,0x9E,0x59,0xD9,0x13,0xD0,\n    0x1C,0x7E,0x1C,0x17,0x27,0x95,0xCB,0x85,0xE6,0xF3,0xA1,0xB9,0xFD,0x03,0xE8,0x3A,\n    0x28,0x62,0xA2,0xE3,0xB9,0x91,0xD1,0xF2,0x1D,0x53,0xF2,0x28,0x7A,0xD2,0x73,0xC6,\n    0x83,0xBB,0x32,0x92,0xA8,0xD2,0x4B,0x4B,0x8D,0x52,0x3A,0x34,0x89,0x4A,0x24,0xF1,\n    0x27,0x93,0x88,0x59,0x80,0x42,0x35,0x14,0xA9,0x0F,0x00,0x00,0x00,0x00,0x06,0x3C,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE3,0x8E,0x86,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x06,0xA2,0xD8,0x45,0x90,0xD2,0x11,\n    0x16,0xC9,0x11,0x23,0xC8,0x42,0x10,0xD9,0x2D,0xE4,0x09,0x91,0x46,0x18,0x67,0x6A,\n    0x52,0x55,0x19,0x4A,0x52,0x94,0xA5,0x29,0x4A,0x53,0x4C,0x40,0xFC,0x78,0xF9,0xA9,\n    0x09,0xDB,0xEE,0x4B,0x00,0x25,0xCE,0x38,0xE3,0x86,0xA9,0x14,0x51,0x45,0x14,0x73,\n    0xE7,0xCF,0x90,0x7E,0x95,0x1A,0x43,0xA8,0x10,0x20,0x40,0x85,0x0C,0xDC,0xDA,0x14,\n    0xA8,0x6A,0x93,0x77,0x51,0x22,0x44,0x48,0xC3,0x0C,0x35,0x59,0x43,0x8E,0x38,0xE3,\n    0xA7,0x20,0x82,0x0B,0x1C,0x83,0x14,0x25,0x4A,0x4D,0x51,0x29,0x93,0x14,0x51,0x46,\n    0x18,0x59,0x95,0x9D,0xEA,0xDA,0xEA,0xFB,0x0E,0xFF,0x83,0xC3,0x63,0x65,0x67,0xE2,\n    0xB4,0xB5,0xF1,0xDB,0x5B,0xDC,0x5C,0xF9,0x3C,0xBE,0x6F,0x3F,0xA2,0xEA,0xEF,0xD3,\n    0xEA,0xF5,0xFB,0x3D,0xB7,0x97,0xBE,0xEF,0x7D,0xF7,0xC3,0xE3,0xF2,0xF9,0xFD,0x3E,\n    0xBF,0x6F,0xBF,0xE3,0xF3,0xFA,0xBF,0xC0,0xC1,0xC2,0xFD,0xFF,0x30,0xD4,0xFF,0x54,\n    0xFF,0x94,0xBA,0x46,0x08,0x20,0x82,0x74,0xCE,0x9D,0x3B,0xD0,0x96,0x96,0x94,0x91,\n    0xE4,0x47,0x1C,0x38,0x72,0x31,0xE5,0xE7,0x3B,0x9A,0xCC,0x26,0x92,0x2B,0x11,0x5E,\n    0xBD,0x14,0x51,0x51,0x24,0x93,0x4D,0x6A,0x69,0x24,0x9A,0x69,0xB0,0x51,0x46,0x03,\n    0x60,0xA2,0x49,0x2F,0x5C,0xD4,0xB5,0x6A,0xC6,0x86,0x47,0x1C,0x23,0x84,0x70,0x8C,\n    0x63,0x19,0x59,0x8C,0x63,0x2B,0x31,0xE8,0x1E,0x82,0xA3,0xD0,0x3D,0x05,0x46,0x11,\n    0xC2,0x10,0x84,0x21,0x31,0x13,0x26,0x24,0x38,0x83,0x64,0x52,0x90,0xA4,0x1B,0x21,\n    0x81,0x44,0x05,0x28,0x00,0x01,0x06,0x04,0x01,0x94,0xA4,0x10,0x14,0x06,0x21,0x90,\n    0xA2,0x01,0x90,0x08,0x30,0x18,0x14,0x40,0x52,0x80,0x00,0x10,0x60,0x40,0x5C,0xB9,\n    0x2A,0xED,0x72,0xEC,0xA4,0xB9,0x57,0x55,0x56,0xB5,0x5A,0xAD,0x55,0xFE,0x7F,0xD7,\n    0x57,0x2A,0xD5,0x6C,0x76,0x4A,0xB5,0x5A,0x49,0x6B,0x5A,0xAD,0x6A,0x92,0x5A,0xD5,\n    0x24,0xB5,0x55,0xAA,0xAA,0xA4,0x92,0x12,0x47,0xAD,0x20,0x00,0xB9,0x20,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x01,0xEB,0xC8,0x1F,0xB4,0x9E,0xDC,0x80,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x5D,0x08,0x00,0xA5,0x4A,0x89,0x24,0x92,0xC8,0x00,0x00,0x08,\n    0x80,0x0A,0x42,0xD2,0xA4,0x8A,0x2A,0xC8,0x29,0x2D,0x52,0x02,0x92,0x2A,0xC8,0x02,\n    0x92,0xD5,0x20,0xA4,0xA8,0x52,0x49,0x12,0x00,0x02,0x22,0x90,0xB4,0xA9,0x22,0x8A,\n    0xB2,0x0A,0x4B,0x54,0x80,0xA4,0x8A,0xB2,0x00,0xA4,0xB5,0x48,0x29,0x08,0x52,0x49,\n    0x12,0x00,0x00,0x00,0x8B,0x5A,0xAD,0x6F,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x42,0xC6,\n    0x98,0x86,0xD4\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_11c1e8905413bef99a2fde568389e78698c50ff348438fc59d72b08e743d3bc1) == 931, \"Wrong size of locale's blob\");\n\n/* sv_SE.ISO8859-1 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_52e61555bb139b652f3513202a90c613e02dd44598c5f3430c6f35f39de809cc[] = {\n    0x5E,0x5B,0x6A,0x4A,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_52e61555bb139b652f3513202a90c613e02dd44598c5f3430c6f35f39de809cc) == 18, \"Wrong size of locale's blob\");\n\n/* sv_SE.ISO8859-1 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_2b7b57acce761af6545a25f199c595182a9a86e2786e7cf9558f24c0b995f44b[] = {\n    0x53,0x45,0x4B,0x20,0x0A,0x6B,0x72,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x31,\n    0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2b7b57acce761af6545a25f199c595182a9a86e2786e7cf9558f24c0b995f44b) == 35, \"Wrong size of locale's blob\");\n\n/* sv_SE.ISO8859-1 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_f981cd2521f39ed88d9ef445b2d7f12ff9d1576159ffef50838fd15bd286a50c[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f981cd2521f39ed88d9ef445b2d7f12ff9d1576159ffef50838fd15bd286a50c) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sv_SE.ISO8859-1 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_f9111513ae9083b7cf6caf228518890710c521c9079dba21f2ab291e08e32eae[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xB9,0x05,0x0C,0x4A,0x00,0x00,\n    0x37,0xDF,0x81,0x80,0x10,0x42,0x02,0x00,0x10,0x25,0x77,0x8C,0x70,0x3E,0xBF,0xDF,\n    0x00,0x02,0x00,0x01,0x00,0x30,0x00,0xC6,0x50,0x94,0x22,0x65,0x3D,0x04,0x34,0x69,\n    0xA6,0x41,0xA6,0x9E,0x91,0xA6,0x86,0x32,0x69,0x90,0x32,0x68,0x64,0x19,0x1A,0x60,\n    0x46,0x09,0x14,0x42,0x69,0xA0,0x31,0x01,0xEA,0x32,0x64,0x32,0x69,0x8E,0x56,0xE2,\n    0xD3,0xD0,0xCF,0x23,0x57,0x93,0x70,0xD2,0xF9,0x9E,0x50,0x81,0x34,0x9C,0x77,0x52,\n    0x4E,0x04,0x68,0xFB,0x02,0xA5,0x2C,0x79,0x01,0xC4,0x1C,0xF5,0x9B,0xF8,0x49,0xD3,\n    0x65,0xAC,0xD0,0xE7,0x71,0x80,0x5E,0x0C,0xAA,0x29,0x82,0x8A,0xB4,0xD3,0xE3,0xCE,\n    0x64,0x44,0x4E,0xE2,0xA2,0x18,0xC0,0x18,0xD0,0x30,0x3C,0x25,0x15,0x1F,0x4A,0x19,\n    0x83,0x38,0x50,0x54,0x66,0x30,0x8A,0x23,0x6F,0x38,0xF4,0x83,0x75,0x4D,0x39,0x8A,\n    0xC5,0x47,0x03,0xC9,0x81,0xD5,0x48,0x0E,0xE8,0xAD,0x8C,0xBC,0xA4,0xDE,0x32,0x91,\n    0x99,0x14,0x2C,0x92,0x3E,0x85,0x3A,0xE7,0x45,0xB7,0x08,0xD4,0x6D,0xB2,0xAB,0x12,\n    0x1E,0x56,0x54,0x7E,0x49,0x4A,0xFD,0x51,0x88,0xA9,0xDA,0xC6,0x42,0xC5,0x5C,0x09,\n    0xC2,0x61,0x93,0xF2,0x2C,0x2C,0xB6,0x10,0x85,0x66,0x94,0x92,0x20,0x4C,0x50,0x6E,\n    0x57,0x0B,0x23,0x62,0xBC,0x91,0xA1,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x42,0xE4,0x14,\n    0x31,0x28\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_f9111513ae9083b7cf6caf228518890710c521c9079dba21f2ab291e08e32eae) == 242, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sv_SE.ISO8859-15 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_435b97d65d10364c973cf10a0e730b1892a505f9e09e4302c60637f716140595[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x09,0x3D,0xDA,0x96,0x00,0x05,\n    0x93,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xFA,0xD4,0x93,0x38,0x00,0x40,0x8C,0x99,0x18,0x98,0x46,\n    0x83,0x4D,0x06,0x8D,0x00,0xC8,0x1A,0x61,0x03,0x46,0x98,0x86,0x26,0xCA,0x34,0xD1,\n    0xA6,0x09,0xE8,0x26,0x11,0x81,0x34,0x0C,0x26,0x41,0x93,0x4C,0x08,0xC0,0x04,0xC9,\n    0x9B,0xF5,0x54,0x34,0xD3,0x4F,0xD4,0x9B,0x69,0xA9,0xEA,0x99,0xE9,0xA2,0x7A,0x53,\n    0x26,0x04,0xC0,0x00,0x02,0x18,0x00,0x26,0x43,0x20,0x34,0xC6,0x4A,0x19,0x34,0xD0,\n    0xD1,0xB5,0x32,0x67,0x92,0x13,0x26,0x9A,0x34,0x68,0xD1,0x93,0x4D,0x34,0x64,0x1A,\n    0x68,0x68,0xD0,0x32,0x06,0x8D,0x19,0x31,0x34,0x64,0x69,0x9A,0x34,0x8C,0x7A,0x88,\n    0x1A,0x7A,0x4D,0x0F,0x49,0x91,0xE8,0x13,0x20,0xFC,0xCD,0x55,0x3F,0x29,0x88,0x8C,\n    0x41,0x90,0x64,0x68,0xC2,0x00,0x68,0xC9,0xA0,0xD0,0x1A,0x19,0x34,0x32,0x62,0x68,\n    0x19,0x1B,0x53,0x43,0x19,0x95,0x27,0x93,0x28,0x11,0x88,0x03,0x4F,0x53,0x43,0x43,\n    0x02,0x68,0x01,0xA6,0x8D,0x30,0x80,0x68,0x64,0x69,0xA3,0x01,0x30,0x8C,0x26,0x80,\n    0x0D,0x18,0x9A,0x34,0xD3,0x08,0xC8,0x03,0x26,0x99,0x03,0x02,0x64,0x69,0x91,0xA6,\n    0x9A,0x34,0x64,0xC1,0x34,0x01,0x88,0x68,0xC9,0x90,0x00,0x18,0x98,0x20,0xD1,0x91,\n    0xE8,0x44,0xFF,0x52,0xA8,0x91,0x00,0x00,0x00,0x00,0x00,0x03,0x4D,0x00,0x00,0x00,\n    0x00,0x00,0x00,0xD0,0xC4,0x68,0x00,0x34,0x00,0x06,0x81,0xA0,0x03,0x40,0x00,0x00,\n    0x00,0x00,0x00,0xD1,0xA0,0x00,0x34,0x00,0x68,0x00,0x00,0x00,0x85,0x01,0x48,0xA0,\n    0x71,0xE9,0x50,0x45,0x45,0x49,0x4D,0x51,0x56,0xF1,0x79,0x56,0x57,0x58,0xBD,0x5E,\n    0xEF,0x97,0xDB,0xF5,0xFF,0x01,0x81,0x59,0xC1,0x50,0xAD,0x61,0x30,0xB8,0x65,0xBC,\n    0x3E,0x23,0x12,0xB8,0xBA,0xBC,0xBE,0xC0,0xC3,0x8A,0x62,0xC5,0xE3,0x37,0xEA,0xCA,\n    0xEB,0x0B,0x3C,0x0E,0x0F,0x0B,0x87,0xC4,0x5A,0xE2,0xF1,0x96,0xD6,0xD7,0x17,0x17,\n    0x4A,0x3F,0xCA,0x2E,0xBF,0xCB,0x2C,0x58,0xBF,0x35,0x8F,0x9C,0xC9,0xCF,0xE8,0x15,\n    0xD1,0x25,0xA8,0xC3,0x5B,0x63,0x69,0x87,0x07,0x17,0x2E,0xA7,0x55,0xCD,0xD1,0xD5,\n    0x1C,0x34,0x3F,0x5D,0x1C,0x41,0x7B,0x68,0xDD,0xD6,0xEE,0x39,0x2C,0x7E,0xF6,0x42,\n    0x2B,0x80,0x9A,0x46,0x36,0x4B,0x85,0xC3,0x4F,0x2D,0xBC,0x99,0x9A,0xE2,0xF1,0xA4,\n    0xB8,0xE6,0x08,0xE3,0xE6,0xD4,0xAA,0x9C,0x9D,0x9E,0x9F,0xA0,0x99,0x53,0xCD,0xE7,\n    0xD0,0x8E,0x49,0xF3,0x92,0x92,0x87,0xA8,0x0A,0xF3,0x9B,0x3F,0x31,0x24,0x00,0x00,\n    0x00,0x00,0x1A,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x99,\n    0x32,0x64,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0xC0,0x0C,0x16,0x8B,0x6A,0x69,0x86,0x9A,0x28,0x91,0x08,0x42,0x10,0x8D,0x9A,\n    0x7B,0x2C,0xC9,0x33,0x0C,0x30,0xC3,0xE6,0xD4,0x0C,0x63,0x18,0xC6,0x31,0x8C,0x63,\n    0x11,0xBB,0x84,0x90,0xD2,0x22,0x52,0x35,0x53,0x93,0xA7,0x1C,0x77,0x28,0xF3,0xCF,\n    0x3F,0x97,0x3C,0xA1,0x42,0x89,0xF5,0x34,0x0A,0xA6,0x66,0x4D,0x0B,0x34,0x6C,0x6F,\n    0x28,0x82,0x08,0x20,0x91,0xE2,0x4E,0xCD,0x8F,0xEE,0x9E,0x34,0x68,0xD4,0xF8,0xA2,\n    0x8A,0x29,0x07,0x06,0x18,0x62,0x67,0x4E,0x8E,0x38,0xE7,0xA8,0x07,0x28,0xF9,0x13,\n    0xE4,0x90,0x41,0x07,0x0E,0x9D,0x28,0xA2,0xBD,0xF4,0x34,0x5F,0x0A,0x3A,0x4A,0x5A,\n    0x6A,0x7A,0x8F,0x8D,0x4D,0x55,0x5D,0x65,0x6D,0x75,0x7D,0x85,0x8D,0x95,0x9D,0xA5,\n    0xAD,0xB5,0xBD,0xC5,0xCD,0xD5,0xDD,0xE7,0xCB,0xE7,0xF4,0xBD,0xBE,0xBF,0xC0,0xC1,\n    0xC2,0xC3,0xC4,0xC5,0xC6,0xFA,0xDA,0xDB,0x5B,0xFD,0xAE,0x3E,0xFF,0x8F,0xCF,0xEB,\n    0xF7,0x73,0x75,0xFC,0xFE,0xDD,0xAB,0xFF,0x2B,0xBC,0x57,0xA3,0x88,0x38,0xE3,0xA5,\n    0x13,0xA7,0x4F,0x26,0x99,0x36,0xFA,0x41,0x2C,0x72,0x58,0xC2,0xCB,0x2E,0x25,0x22,\n    0x44,0x70,0xB0,0x7B,0x28,0x32,0x0A,0x43,0x7D,0x25,0x74,0x96,0x16,0x12,0x49,0x25,\n    0x88,0xA4,0x48,0x8A,0x42,0x51,0x24,0x94,0x51,0x4C,0x68,0x91,0x31,0x31,0xDE,0xD7,\n    0x09,0x60,0x60,0x5F,0x5E,0xC2,0x14,0x85,0x0E,0x0F,0x05,0x78,0x81,0x01,0x04,0x10,\n    0x80,0x84,0x51,0x45,0x04,0x51,0x41,0x04,0xA8,0x1C,0x79,0xC7,0xA5,0x38,0xF3,0x8F,\n    0x4A,0x81,0xA6,0x9A,0x69,0xA6,0x9A,0x07,0x94,0xD4,0xC6,0x27,0x21,0x84,0x22,0x62,\n    0x98,0x42,0x27,0x02,0x91,0x39,0x04,0x0C,0x10,0x01,0x11,0x12,0x90,0x4A,0x24,0x03,\n    0x00,0xA6,0x08,0x0A,0x72,0x89,0x00,0x40,0x12,0x18,0x50,0x02,0x90,0x48,0x20,0x60,\n    0x80,0x08,0x8D,0xD8,0xBB,0x2E,0xAF,0x2E,0xD5,0xDB,0x95,0x79,0x72,0xF1,0x49,0x72,\n    0xE2,0xAF,0x55,0x56,0xB5,0xAD,0x56,0xAA,0xFF,0x6F,0x77,0xAB,0x96,0xAB,0x5A,0xF7,\n    0x25,0xAA,0xD6,0x92,0x55,0x55,0x5A,0xD5,0x24,0xAB,0x54,0x92,0xD5,0x56,0xAA,0xAA,\n    0x92,0x5A,0x42,0x48,0xF5,0xA4,0x00,0x17,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x3D,0x79,0x03,0xF6,0x93,0xDB,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,\n    0x04,0x00,0x14,0x91,0x24,0xB2,0x00,0x00,0x02,0x08,0x88,0x29,0x0B,0x4A,0x92,0x28,\n    0xAB,0x20,0xA4,0xB5,0x48,0x0A,0x48,0xB5,0x44,0x82,0x95,0x25,0x49,0x6A,0x90,0x52,\n    0x54,0x59,0x49,0x24,0x42,0x00,0x0A,0x4B,0x54,0xA9,0x22,0x8A,0xB2,0x0A,0x4B,0x54,\n    0x80,0xA4,0x8B,0x59,0x05,0x2D,0x25,0x49,0x6A,0x90,0x52,0x24,0x89,0x49,0x24,0x42,\n    0x00,0x08,0x82,0x2A,0xAA,0xAA,0xBF,0xF1,0x77,0x24,0x53,0x85,0x09,0x00,0x93,0xDD,\n    0xA9,0x60\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_435b97d65d10364c973cf10a0e730b1892a505f9e09e4302c60637f716140595) == 962, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed sv_SE.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_88ac38472cc8cd80a1c5ebf24be5ca6aca361edb265973ebf97193e4c50c3c10[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x1E,0x72,0x61,0xE7,0x00,0x00,\n    0x37,0xDF,0x9C,0x00,0x10,0x42,0x02,0x00,0x10,0x25,0x77,0x8C,0x70,0x3E,0xBF,0xDF,\n    0x00,0x02,0x00,0x01,0x00,0x08,0x00,0x30,0x00,0xC6,0x50,0x94,0x22,0x65,0x3D,0x04,\n    0x34,0x69,0xA6,0x41,0xA6,0x9E,0x91,0xA0,0x30,0xD0,0xC9,0x90,0x32,0x31,0x06,0x26,\n    0x4D,0x0D,0x30,0x24,0x51,0x09,0xA6,0x80,0xC4,0x06,0x4D,0x31,0x0C,0x8D,0x31,0xCA,\n    0xDC,0x5A,0x7A,0x19,0xE4,0x6A,0xF2,0x6E,0x1A,0x5E,0xB3,0xCA,0x10,0x26,0x93,0x8E,\n    0xCA,0x49,0xC0,0x8D,0x1E,0xE0,0x54,0xA5,0x8F,0x20,0x38,0x83,0x9E,0xB3,0x7E,0xE9,\n    0x3A,0x6C,0xB5,0x9A,0x1C,0x6E,0x30,0x0B,0xC1,0x95,0x45,0x30,0x51,0x56,0x9A,0x7B,\n    0x77,0xCC,0x88,0x89,0xD4,0x54,0x43,0x18,0x03,0x1A,0x06,0x05,0xA9,0x45,0x46,0xF5,\n    0x0C,0xC1,0x9C,0x26,0x28,0x33,0x18,0x45,0x11,0xAF,0x9C,0x7A,0x41,0xBA,0x24,0x94,\n    0xC5,0x62,0xA3,0x81,0xE0,0xC0,0xEA,0xAC,0x03,0xBA,0x29,0x63,0x3C,0x93,0x9B,0xC6,\n    0x4E,0x33,0x22,0x65,0x92,0x47,0xC0,0xA7,0x3C,0xE8,0xB6,0xE1,0x1A,0x8F,0xBF,0x55,\n    0x58,0x90,0xF2,0xB2,0xA3,0xE2,0x4A,0x57,0xEA,0x8C,0x45,0x4E,0x96,0x32,0x16,0x2A,\n    0xE0,0x4A,0x12,0x0C,0x97,0x91,0x51,0x55,0x70,0x84,0x29,0x3F,0x4E,0x58,0x40,0x90,\n    0x98,0xDC,0xAE,0x16,0x46,0xC5,0xA0,0xAF,0x2D,0x34,0x3F,0x8B,0xB9,0x22,0x9C,0x28,\n    0x48,0x0F,0x39,0x30,0xF3,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_88ac38472cc8cd80a1c5ebf24be5ca6aca361edb265973ebf97193e4c50c3c10) == 246, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed tr_TR.ISO8859-9 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_3e7c61aad833ef545da6b3e943bd58f6613d0867ec710c20fde39f4908514fbc[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xC9,0xAA,0x23,0xDB,0x00,0x05,\n    0x86,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xDA,0xD4,0x96,0x38,0x00,0x91,0xA1,0x93,0x4D,0x34,0xC8,\n    0x68,0xC8,0xC8,0xD3,0x4C,0x83,0x23,0x46,0x13,0x46,0x11,0x84,0xC8,0x69,0x93,0x13,\n    0x46,0x9A,0x64,0x68,0xD1,0x84,0x68,0xD1,0x93,0x01,0x03,0x04,0xC8,0xD1,0x82,0x03,\n    0x08,0xD0,0x0D,0x0D,0x32,0x6C,0xFD,0x4D,0x46,0x53,0xD3,0x46,0x93,0xD4,0xDA,0x50,\n    0x0C,0x99,0x31,0x31,0x00,0x18,0x09,0x84,0x69,0x89,0x93,0x04,0xD1,0x04,0x68,0x64,\n    0x03,0x4C,0x9A,0x06,0x9A,0x03,0x21,0xA0,0x03,0x26,0x8C,0x40,0x69,0xA6,0x8C,0x26,\n    0x83,0x41,0xA3,0x20,0x00,0xC2,0x3C,0x50,0xC2,0x1B,0x53,0xD4,0x0D,0x36,0xA6,0x8F,\n    0x4C,0x93,0x68,0xCA,0x36,0xA3,0x27,0xA9,0xA3,0xD9,0xA9,0xEF,0x52,0xA8,0x00,0x64,\n    0x01,0xA3,0x43,0x04,0x62,0x32,0x30,0x4C,0x26,0x80,0xD3,0x08,0x01,0x90,0x52,0x1E,\n    0x90,0x53,0xF5,0x26,0x79,0x4A,0x34,0x68,0x00,0x19,0x34,0x19,0x1A,0x69,0xA6,0x80,\n    0x03,0x40,0x32,0x31,0x34,0x00,0x34,0x1A,0x34,0x62,0x34,0x62,0x03,0x40,0x00,0x00,\n    0x0C,0x80,0x64,0xC0,0x46,0x86,0x86,0x80,0xC8,0xC2,0x64,0xC8,0xC8,0xC4,0x68,0x34,\n    0xD0,0x00,0x03,0x20,0x00,0x0F,0xD5,0x08,0x9F,0xEA,0x55,0x53,0xD4,0x9E,0x50,0x01,\n    0xA0,0x00,0x03,0x40,0x06,0x40,0x00,0x00,0x00,0x1A,0x00,0x00,0xD3,0x40,0x00,0x00,\n    0x68,0x00,0x0D,0x00,0x34,0x00,0x00,0xD1,0xA0,0x69,0x93,0x20,0x00,0x00,0x00,0x68,\n    0x00,0x00,0xD0,0x00,0x00,0x02,0x08,0xA4,0x04,0x4D,0x45,0x56,0x68,0x2B,0x06,0x96,\n    0x2C,0x8C,0x76,0x75,0x2A,0x9B,0x55,0x52,0xAA,0xD7,0x56,0xAB,0xD6,0x2B,0x35,0xAA,\n    0xDD,0x72,0x66,0xBF,0x60,0xB0,0xD8,0x9B,0x1B,0x6C,0x6D,0xD6,0x4B,0x2D,0x9A,0xCE,\n    0xDE,0xE1,0x68,0xB4,0xB8,0xDA,0xB5,0x2C,0x9A,0xAD,0x5B,0x2B,0x33,0x3B,0x46,0xB3,\n    0x5A,0xD2,0xD4,0xD6,0xD8,0xD8,0xDA,0xDA,0xDC,0x6A,0x56,0xF7,0x4D,0x96,0xCD,0xCD,\n    0xCD,0xD1,0xD5,0x26,0xDB,0x6E,0xEF,0xB8,0x78,0x37,0x73,0x46,0xF7,0xBE,0x7C,0x7D,\n    0xDD,0xBD,0xEF,0x60,0x38,0x3C,0x28,0x1E,0x1F,0x13,0x67,0xB4,0x40,0x85,0x17,0x73,\n    0xBE,0xB1,0x0C,0x26,0xEA,0x19,0x1A,0x4D,0xEE,0xFB,0x81,0x14,0x97,0x85,0x16,0x95,\n    0x1A,0x68,0xC4,0xE9,0x94,0x71,0x54,0xC7,0xC8,0x2A,0x57,0xC6,0xE3,0xC8,0xA8,0x58,\n    0xA7,0x91,0x27,0xD6,0xE5,0xF3,0x17,0x1C,0x40,0x61,0x84,0x1D,0x81,0xC8,0xA2,0x3E,\n    0x70,0x92,0x91,0x16,0x8C,0xB3,0x27,0xA9,0x27,0xD2,0x1A,0x31,0x48,0x52,0x8F,0xE1,\n    0x00,0x00,0x00,0x00,0x04,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x8C,0x63,0x18,\n    0xC6,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x0F,\n    0x5F,0x9C,0x56,0x43,0xC8,0x45,0xFA,0x05,0xE4,0x92,0x21,0x08,0x43,0xE5,0x20,0x12,\n    0x9C,0xA8,0xE3,0x8E,0xE7,0xF4,0x3A,0x3D,0x22,0x94,0xA5,0x29,0x4A,0x52,0x94,0xA7,\n    0x9C,0xA3,0x6A,0x81,0x39,0xFD,0x32,0x75,0x17,0xF5,0x4A,0x55,0xC7,0x10,0x4F,0x1D,\n    0x3A,0x74,0xE9,0x48,0x46,0x18,0x61,0xA6,0x06,0x44,0x21,0x08,0x42,0x10,0x84,0x23,\n    0xC7,0xA6,0xE6,0xCF,0x16,0x79,0x19,0xFA,0x31,0xC7,0x01,0xCE,0x18,0x41,0x04,0x11,\n    0x48,0x90,0x92,0x49,0x24,0xFA,0x04,0x06,0x94,0x51,0x49,0x50,0xA1,0x46,0x89,0x19,\n    0x65,0x98,0x61,0x86,0x9A,0x6F,0x93,0xCB,0xE6,0xF3,0xFA,0x3D,0x3E,0xAA,0x5A,0x6F,\n    0x5D,0x3D,0x47,0xB2,0xA6,0xAA,0xAF,0xDB,0x59,0x5B,0x5D,0xEE,0xF7,0xFC,0x3E,0x3F,\n    0x2F,0x9F,0xD3,0xEB,0x4F,0xEC,0xA8,0xA9,0xAA,0xAB,0xF6,0xD6,0x7B,0xBD,0xFF,0x0F,\n    0x8F,0xCB,0xE7,0x5B,0xF4,0xAE,0xAF,0xB0,0xB1,0xFA,0xFD,0xBE,0xFF,0x8F,0xCF,0xEB,\n    0xF7,0xFC,0xFE,0xD9,0x59,0xD9,0x7F,0xAC,0xD6,0xAD,0x5A,0xB5,0x42,0x78,0xC8,0xB8,\n    0x98,0x94,0x88,0x90,0xA0,0x81,0xD8,0x64,0xB1,0xB8,0xA1,0x33,0x39,0x8C,0x63,0x18,\n    0xC6,0x39,0xCE,0x73,0x9C,0xE7,0x66,0x73,0x32,0x64,0xC5,0x8B,0x4B,0x06,0x05,0x2A,\n    0xE2,0x10,0x84,0x31,0x88,0xA5,0x29,0x4A,0x52,0x94,0xA5,0x2A,0x09,0xAC,0xAA,0xCB,\n    0x2C,0xAA,0xAB,0x14,0x63,0x18,0xC6,0x31,0xAA,0xB2,0x6D,0x00,0x00,0x00,0x92,0x20,\n    0x2F,0xE8,0x9A,0x97,0x6B,0x1A,0x28,0x2E,0x92,0x4B,0xAE,0x09,0xA6,0xBA,0x0A,0x28,\n    0x22,0x24,0x40,0x40,0x01,0x10,0x10,0x00,0x94,0x20,0x02,0x84,0x00,0x44,0x10,0x21,\n    0x08,0x9A,0x6A,0x20,0xA2,0x82,0x22,0x44,0x10,0x20,0x00,0x02,0x04,0xAA,0xEA,0xE5,\n    0xCB,0x97,0x57,0x9B,0x97,0x2A,0x5D,0xD5,0xAA,0xAA,0xD5,0x6A,0xAB,0xBB,0xAB,0xBB,\n    0xC5,0xAD,0x55,0x77,0x25,0xAD,0x55,0x24,0xB5,0xAA,0xD6,0xB5,0x49,0x2D,0x6A,0x92,\n    0x5A,0xAA,0xD5,0x55,0x52,0x4B,0x54,0x92,0xAA,0x49,0x69,0x1E,0xB4,0x80,0x02,0xF1,\n    0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xEB,0xC8,0x1F,0xBC,0x9E,0xDC,0x80,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x44,0x00,0x52,0xA5,0x44,0x92,0x49,0x64,\n    0x00,0x00,0x04,0x40,0x05,0x21,0x56,0x95,0x25,0x4A,0x92,0xD5,0x22,0x22,0x92,0xD5,\n    0x08,0x0A,0x52,0x55,0xA2,0x40,0x05,0x25,0xAA,0x40,0x00,0x00,0x44,0x52,0x15,0x69,\n    0x52,0x54,0xA9,0x2D,0x52,0x22,0x22,0xA4,0xB5,0x48,0x0A,0x52,0x55,0xA2,0x40,0x01,\n    0x49,0x6A,0x90,0x52,0xA4,0x80,0x00,0x00,0x8B,0x55,0xAD,0x6F,0xFC,0x5D,0xC9,0x14,\n    0xE1,0x42,0x43,0x26,0xA8,0x8F,0x6C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3e7c61aad833ef545da6b3e943bd58f6613d0867ec710c20fde39f4908514fbc) == 935, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed tr_TR.ISO8859-9 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_14d6c1f5d34d28ee09f5abb61083e5b9a43099b7bb11d6fc72fee5f061e83d8e[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x3E,0x74,0x2C,0xB6,0x00,0x05,\n    0x46,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7A,0xD4,0xA8,0xC0,0x04,0xAA,0x52,0x01,0xA0,0x64,0x34,\n    0xC8,0x1E,0x93,0x0D,0xAA,0x1A,0x64,0xD3,0x40,0x0C,0x8D,0x1A,0x64,0xC8,0x06,0x86,\n    0x9A,0x64,0xD0,0x00,0x00,0x00,0xC8,0x1A,0x06,0x86,0x4C,0x8C,0x23,0x46,0xC2,0x80,\n    0x34,0xD3,0x46,0x86,0x8C,0x86,0x46,0x46,0x4D,0x32,0x68,0x06,0x8C,0x81,0xE9,0x06,\n    0x8F,0x40,0x99,0x0C,0x26,0x26,0x11,0xEA,0x68,0x25,0x55,0x09,0xA6,0x4C,0x86,0x23,\n    0x46,0x86,0x43,0x46,0xD4,0x34,0x18,0x4D,0x30,0x08,0xD1,0xA6,0x4C,0x40,0x19,0x34,\n    0xD0,0x64,0x60,0x21,0xA6,0x00,0x09,0x80,0x9A,0x00,0x32,0x64,0x1A,0x03,0x46,0x46,\n    0x86,0x98,0x00,0x26,0x11,0xA6,0x81,0xA1,0x90,0xD0,0x00,0x68,0xC8,0xC0,0x4C,0x40,\n    0xD3,0x40,0x18,0x81,0x24,0x92,0x09,0x34,0xD0,0xC9,0xA6,0x83,0x40,0x20,0xC0,0x00,\n    0x09,0x80,0x00,0x98,0x9A,0x30,0x02,0x60,0x13,0x00,0x10,0xC0,0x00,0x00,0x23,0x00,\n    0x00,0x26,0x13,0x00,0x8C,0x02,0x64,0x60,0x02,0x0C,0x98,0x00,0x04,0x62,0x30,0x00,\n    0x00,0x03,0xF5,0x42,0x4C,0x00,0x13,0x00,0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x03,0xDD,0x1E,0xD5,0x19,0xB4,0x24,0x95,0x3D,0x92,0x41,\n    0x0C,0x64,0x43,0x88,0x1A,0x40,0x44,0x92,0x12,0x28,0x91,0x12,0x32,0x48,0x43,0x8B,\n    0x23,0x09,0x29,0x1A,0x49,0x8B,0x78,0xBE,0x30,0x17,0x02,0xE2,0x5C,0x8B,0x99,0x74,\n    0x12,0x09,0x05,0xC6,0x12,0xEA,0x31,0x0C,0x63,0x20,0xCA,0x25,0x11,0x2E,0xC5,0xDC,\n    0xBC,0x0C,0xC5,0xE4,0x67,0x19,0x85,0x41,0x54,0x56,0x15,0xCC,0xA8,0xB0,0x65,0x85,\n    0x91,0x68,0x5B,0x17,0x05,0xD1,0x78,0x5F,0x18,0x0C,0xB9,0x98,0x18,0x4C,0xC9,0x9A,\n    0x18,0x8C,0xD8,0xC6,0x32,0x38,0xB1,0x86,0x28,0x5A,0x1C,0x47,0x21,0xC4,0xC5,0x98,\n    0xC3,0x1B,0xF2,0xC7,0xFC,0xF2,0x23,0x99,0x92,0x32,0x66,0x50,0x74,0x32,0xA3,0xA9,\n    0x96,0x1D,0x87,0x73,0x2E,0x3C,0x19,0x83,0x32,0x6B,0x06,0xE8,0x87,0x01,0xC4,0x72,\n    0x1C,0xC7,0x41,0x49,0x06,0xB4,0xD7,0x1A,0xF1,0xD4,0xD8,0x0E,0xC3,0xB8,0xF1,0x79,\n    0x7A,0xF6,0xF8,0x3E,0x8F,0xC3,0xF9,0x00,0x40,0x90,0x46,0xC4,0x83,0x21,0x08,0x52,\n    0x18,0x87,0x22,0x08,0x93,0x64,0x20,0x41,0x14,0x6C,0xCD,0xA1,0xB5,0x36,0xC6,0xDC,\n    0xDC,0x1B,0x93,0x74,0x6E,0xCD,0xE1,0x16,0x46,0x1B,0xD2,0x34,0x8E,0x20,0xC8,0x43,\n    0x86,0x71,0x08,0x53,0x8A,0x71,0x88,0x61,0x30,0x9C,0x50,0x29,0x38,0xE7,0x20,0xE4,\n    0x9C,0xA3,0x96,0x73,0x0E,0x69,0xCE,0x21,0xCE,0x79,0x10,0x74,0x08,0x92,0x58,0x97,\n    0x26,0x09,0x92,0x68,0x9B,0x27,0x09,0xD2,0x78,0x9F,0x28,0x0A,0x13,0xA0,0x51,0x14,\n    0x65,0x21,0x4A,0x74,0x4E,0x91,0x4C,0x74,0xCA,0x73,0xA8,0x75,0x4E,0xB1,0x28,0x78,\n    0x09,0x55,0x7E,0x12,0x5C,0xF1,0x1E,0x33,0xC8,0x79,0x4F,0x31,0xE7,0x3D,0x04,0xC1,\n    0xE9,0x3D,0x44,0xC9,0x34,0x7A,0xCF,0x61,0xED,0x3D,0xC7,0xBC,0x54,0x4D,0x9F,0x03,\n    0xE3,0x5B,0x5D,0x39,0xF4,0x3E,0xA2,0xB2,0x74,0x52,0xA5,0x42,0x99,0xEA,0xF4,0x51,\n    0xA0,0x28,0x4F,0xB1,0x44,0x51,0x9F,0x73,0xF0,0x7E,0x4A,0x42,0x94,0xA6,0x29,0xCF,\n    0xD1,0x50,0x54,0x95,0x47,0xEC,0xAB,0x2B,0x0A,0xD2,0xB8,0xFE,0x08,0xA2,0x95,0x1F,\n    0xE8,0xB0,0xFF,0x15,0xE2,0x74,0xE9,0x93,0xA5,0x46,0x7D,0x01,0x04,0x10,0x58,0xB4,\n    0x21,0x42,0x82,0x0A,0x9E,0xEC,0x02,0x02,0x1C,0xCC,0x36,0x8D,0xC0,0x0C,0xC2,0x07,\n    0x99,0x00,0xCC,0x0C,0x20,0x66,0x42,0x4D,0x00,0x6F,0x23,0x0E,0x21,0x0C,0x81,0x02,\n    0x0F,0x13,0x21,0x20,0xF3,0xB0,0x90,0x0E,0x60,0x1F,0x80,0xFB,0xEF,0xBE,0xFB,0xF1,\n    0x0F,0xBF,0x23,0x7D,0xF8,0x30,0x60,0xC1,0x83,0x06,0x08,0x80,0x46,0x85,0x84,0x24,\n    0x22,0x2A,0x2A,0x13,0xC8,0x03,0xCA,0xC0,0x93,0x99,0x33,0x78,0x18,0x73,0x08,0x42,\n    0x19,0x80,0x4C,0xC0,0xCC,0x33,0x0C,0xC4,0x9E,0x39,0xC3,0x9C,0xE5,0x16,0xF3,0xCE,\n    0x40,0xF0,0xF3,0xCE,0x1C,0xE7,0x0E,0x73,0x84,0x10,0xD8,0x64,0x81,0x40,0x13,0x92,\n    0x50,0x94,0x77,0xEF,0xCD,0xFF,0x34,0xF0,0x84,0xA2,0x18,0x60,0x00,0x8C,0x70,0x8F,\n    0xCE,0x13,0x80,0xD7,0x30,0x1D,0x5E,0x83,0x84,0xD1,0x4E,0x1E,0x89,0x70,0x94,0xA8,\n    0x61,0x47,0xB0,0xB8,0x0C,0x22,0x39,0x85,0x0D,0x8D,0x93,0x11,0x7F,0xF3,0x8F,0xEA,\n    0x1B,0x90,0x54,0xD8,0x12,0x8D,0xE0,0xCD,0xB8,0x50,0x02,0x43,0xB8,0x70,0x47,0x4B,\n    0xB6,0x0F,0x04,0x06,0x36,0xEC,0x40,0x61,0x13,0x9D,0x8B,0x80,0x92,0xC2,0x71,0x20,\n    0x61,0xE8,0x70,0x1E,0x3F,0xB6,0x01,0x12,0xD1,0x02,0x97,0x89,0xC0,0x90,0x97,0xBC,\n    0x5D,0xC9,0x14,0xE1,0x42,0x40,0xF9,0xD0,0xB2,0xD8\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_14d6c1f5d34d28ee09f5abb61083e5b9a43099b7bb11d6fc72fee5f061e83d8e) == 842, \"Wrong size of locale's blob\");\n\n/* tr_TR.ISO8859-9 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_0eb4631d11d84ef38e7a8f9420f716ff4dd6c7b7ae18b898844ba7a7620843a6[] = {\n    0x5E,0x5B,0x49,0x69,0x59,0x79,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0x6E,0x4E,0x5D,0x2E,\n    0x2A,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_0eb4631d11d84ef38e7a8f9420f716ff4dd6c7b7ae18b898844ba7a7620843a6) == 18, \"Wrong size of locale's blob\");\n\n/* tr_TR.ISO8859-9 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_8c6885d4db4211425b95764025f96dcfefb79ef18eb53453ffdc4f6cba68a27d[] = {\n    0x54,0x52,0x4C,0x20,0x0A,0x4C,0x0A,0x2C,0x0A,0x2E,0x0A,0x33,0x3B,0x33,0x0A,0x0A,\n    0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A,\n    0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8c6885d4db4211425b95764025f96dcfefb79ef18eb53453ffdc4f6cba68a27d) == 34, \"Wrong size of locale's blob\");\n\n/* tr_TR.ISO8859-9 LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_d4ca44d3089c52da756f340987185bbd3217a68eb49cf0ac3e9f0706d497d851[] = {\n    0x2C,0x0A,0x20,0x0A,0x30,0x3B,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_d4ca44d3089c52da756f340987185bbd3217a68eb49cf0ac3e9f0706d497d851) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed tr_TR.ISO8859-9 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_c612b4f42f8652c8026f35571b5bf7110e5c8ee8968a2095ee4bcb55df6848e6[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xAB,0xBE,0x5E,0x9D,0x00,0x00,\n    0x42,0xDF,0x86,0x80,0x10,0x42,0x00,0x80,0x10,0x2A,0x6B,0xCC,0x70,0x3E,0x2F,0xDE,\n    0x30,0x00,0x80,0x00,0x01,0x40,0x07,0x30,0x00,0xC6,0xA0,0x95,0x3D,0x44,0x8C,0x4C,\n    0x99,0xA8,0xC8,0xD3,0x46,0x98,0x98,0xD1,0x00,0xC6,0x8D,0x1A,0x01,0x93,0x21,0xA3,\n    0x11,0xA6,0x81,0xA6,0x02,0x49,0x34,0x44,0xD3,0x43,0x4D,0x1A,0x06,0x9E,0xA0,0x00,\n    0xD3,0x4B,0x6E,0xAF,0x9D,0x2D,0xF5,0x13,0x20,0x2C,0xBC,0xF7,0xC1,0x9A,0x46,0x41,\n    0x13,0xC8,0x5F,0x02,0x2C,0xC9,0x9C,0x42,0x6C,0x5F,0xA4,0x91,0x9B,0x9E,0xE9,0xDB,\n    0xC0,0xDF,0x4F,0xD8,0xDC,0x67,0x44,0xEA,0x2A,0xAA,0x1B,0x5F,0x42,0xD0,0xB0,0xB5,\n    0x03,0x90,0x92,0x6B,0x7A,0xC2,0xFC,0x2C,0x23,0x60,0x17,0x26,0x26,0x5E,0x39,0xB8,\n    0xE9,0x03,0x0C,0x86,0x16,0x4B,0xED,0xF5,0x11,0x8B,0x08,0x98,0xCC,0x81,0x5F,0x1F,\n    0xB0,0x32,0xBB,0xF9,0x55,0x92,0x54,0x3D,0x08,0xCA,0x82,0x56,0x8B,0x56,0x39,0xF2,\n    0x34,0xDA,0x94,0x4A,0x66,0x3E,0xF4,0x87,0x9B,0x33,0x12,0xE3,0x66,0x6B,0xF8,0x73,\n    0x44,0xA7,0x23,0xAD,0xDE,0xCB,0x60,0x51,0x15,0xB0,0x80,0x58,0x4A,0x2E,0xB9,0x2A,\n    0x48,0x21,0xDB,0x02,0xA2,0x34,0x8C,0x48,0xA8,0xA0,0x26,0x1A,0x8C,0x2E,0xC7,0x14,\n    0xEA,0x05,0x85,0x3A,0xD3,0x15,0x0C,0x2B,0xD1,0xA5,0x60,0x8A,0xCB,0x8C,0xE7,0xF1,\n    0x77,0x24,0x53,0x85,0x09,0x0A,0xBB,0xE5,0xE9,0xD0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c612b4f42f8652c8026f35571b5bf7110e5c8ee8968a2095ee4bcb55df6848e6) == 250, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed tr_TR.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_fbf8e10fcdb2f15345aa2a510dd291d8a6abb385a91ccb8742ca61cd378b70eb[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xC8,0x9F,0xB6,0x6D,0x00,0x00,\n    0x42,0xDF,0xEC,0x00,0x10,0x42,0x00,0x80,0x10,0x2A,0x6B,0xCC,0x70,0x3E,0x2F,0xDE,\n    0x30,0x00,0x80,0x00,0x01,0xA0,0x04,0x0E,0x00,0x30,0x00,0xE6,0xA4,0x25,0x4F,0x51,\n    0x23,0xD1,0x1A,0x66,0xA3,0x43,0x4D,0x1A,0x62,0x34,0xF4,0x40,0x0C,0x69,0xA0,0xD0,\n    0x03,0x26,0x80,0xC8,0xD3,0x43,0x13,0x46,0x09,0x24,0x11,0x3D,0x4D,0x0D,0x34,0x68,\n    0x07,0xA8,0x00,0x34,0xD3,0x4B,0x2D,0xDF,0xBA,0x96,0xF6,0x91,0x91,0x17,0x7E,0xBC,\n    0xEF,0x67,0x87,0x91,0x44,0xF2,0x97,0x44,0x93,0x13,0x5B,0x88,0xEB,0xC2,0x1E,0x25,\n    0x79,0xA2,0x0E,0x9D,0xBA,0x8D,0x34,0xFA,0x7B,0x8C,0x68,0x9D,0x49,0x55,0x43,0x77,\n    0xF0,0x2C,0x0A,0xCB,0x10,0x39,0x09,0x26,0xB7,0x8C,0x6E,0xBE,0xB1,0xEC,0x02,0xD4,\n    0xC4,0xCB,0xBF,0x27,0x8F,0x48,0x18,0x64,0x30,0xB1,0x6F,0xB3,0xCC,0x06,0x2B,0x20,\n    0x5D,0x31,0xC5,0x5C,0x3E,0x38,0xC6,0xF7,0xF8,0x55,0x11,0x54,0x41,0x08,0xEF,0x41,\n    0x33,0x45,0x93,0x1D,0x09,0x5A,0x67,0x4A,0x26,0x31,0x21,0x72,0x44,0x0C,0xD9,0x81,\n    0x69,0x9B,0x32,0xF6,0x39,0xA2,0x53,0x89,0xD2,0xDF,0x45,0x8E,0x28,0x82,0xD4,0x38,\n    0x2B,0x23,0x07,0xAE,0x2A,0x91,0xC8,0x7B,0x5C,0x48,0x85,0x23,0x11,0x24,0x50,0x13,\n    0x0D,0x05,0xD6,0xEB,0xFA,0x9E,0x9C,0x56,0x53,0xA5,0x31,0x21,0x85,0x79,0x82,0x30,\n    0x10,0xE2,0x65,0xE5,0xA9,0x96,0x63,0x61,0x06,0x40,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,\n    0x21,0x91,0x3F,0x6C,0xDA\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_fbf8e10fcdb2f15345aa2a510dd291d8a6abb385a91ccb8742ca61cd378b70eb) == 261, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.CP1251 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_db9cb102f9f13ff9a6c0ec007ab24c35a22c3a7b8ce6094d7d3487e5e2538135[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x16,0xAC,0xD2,0x96,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x6C,0x97,0x00,0x04,0x9A,0x34,0x1A,0x68,0x69,0xA3,\n    0x43,0x10,0x34,0x34,0xC1,0x34,0xC8,0xC1,0x31,0x1A,0x06,0x9A,0x0C,0x8D,0x34,0xD3,\n    0x08,0xD0,0xC2,0x18,0x02,0x0C,0x10,0xC2,0x00,0x62,0x68,0x68,0xC9,0x88,0xC1,0x34,\n    0x32,0x62,0x69,0x84,0x62,0x64,0xC2,0x68,0xC2,0x19,0x34,0x69,0x91,0x93,0x20,0xC2,\n    0x34,0x64,0x32,0x7E,0xA7,0xFA,0xA9,0x3F,0xF5,0x53,0xF5,0x29,0xB3,0xF5,0x54,0xF4,\n    0x89,0x34,0x68,0xC9,0x90,0x62,0x32,0x34,0x34,0x34,0xC4,0xD0,0x61,0x03,0x4D,0x18,\n    0x40,0xC4,0xC9,0xA6,0x4C,0x80,0x31,0x19,0x03,0x13,0x4C,0x46,0x81,0x80,0x43,0x23,\n    0x46,0x11,0x81,0x0D,0x30,0x46,0x9A,0x34,0xC8,0xC8,0xD3,0x40,0x69,0xA6,0x4D,0x34,\n    0x62,0x18,0x99,0x00,0xC1,0x1A,0x62,0x19,0xA0,0x7B,0xF5,0x35,0x51,0x3C,0x89,0xB4,\n    0xD4,0x10,0x4C,0x13,0x00,0x98,0x00,0x98,0x4C,0x00,0x4C,0x1A,0x4C,0xD2,0x69,0x80,\n    0x98,0x00,0x98,0x00,0x8C,0x00,0x41,0x80,0xD0,0x32,0x34,0x04,0xC0,0x4C,0x1A,0x4C,\n    0x09,0xA6,0x26,0x00,0x4C,0x09,0xE9,0xA0,0x03,0x4D,0x02,0x6D,0x09,0xA7,0xA6,0x81,\n    0x30,0x00,0x4C,0x00,0x46,0x00,0x18,0xFF,0xD5,0x4A,0xA0,0x46,0x02,0x61,0x30,0x09,\n    0xA6,0x26,0x01,0x30,0x02,0x18,0x4C,0x4C,0x98,0x8C,0x98,0x00,0x46,0x00,0x01,0x18,\n    0x99,0x01,0x90,0x30,0x9A,0x68,0x62,0x64,0x32,0x64,0xC0,0x09,0x84,0x0C,0x02,0x60,\n    0x01,0x34,0xC1,0x30,0x4D,0x34,0x64,0x60,0x9A,0x68,0x0D,0x31,0x32,0x66,0x84,0xFD,\n    0x10,0x58,0xF0,0xF9,0x01,0x09,0x17,0x84,0x8C,0x90,0x94,0x98,0x9C,0xA0,0xA4,0xAB,\n    0xC4,0x56,0x58,0x5A,0x5C,0x5E,0x60,0x62,0x64,0x66,0x68,0x6B,0xE3,0x36,0x37,0x38,\n    0x39,0xE3,0x3A,0x3C,0x3D,0x00,0x80,0x08,0x3A,0x16,0x77,0xF9,0x1C,0x02,0x57,0x9B,\n    0x80,0x08,0x14,0xDF,0x3A,0x76,0x5A,0x78,0xC5,0x25,0x45,0x5F,0x4A,0xB2,0xBA,0xC2,\n    0xCA,0xD2,0xDA,0xE2,0xEA,0xF2,0xFB,0x07,0xA9,0x85,0x89,0x8C,0x6E,0x67,0x43,0x33,\n    0x3F,0xAF,0xD8,0xD8,0xDA,0xDC,0xDE,0xE0,0xE2,0xE4,0xE6,0xE8,0xEA,0xED,0xED,0xF7,\n    0x7B,0xFE,0x0E,0xEF,0x0F,0x2F,0x4F,0x6F,0x8F,0xA0,0x9F,0x84,0xC0,0xC1,0x03,0x04,\n    0x12,0x10,0x18,0x58,0x58,0x60,0x81,0x61,0xE2,0xBE,0x31,0x71,0x91,0xB1,0xD1,0xF2,\n    0x12,0x3F,0x29,0x29,0x39,0x49,0x59,0x60,0xDD,0xD3,0x1D,0x61,0xA7,0x27,0x7E,0x93,\n    0xDF,0x59,0xFA,0x0A,0x1F,0xB5,0x15,0x1D,0x25,0x2D,0x35,0x3D,0x45,0x4D,0x55,0x5F,\n    0xDE,0xB2,0xB6,0xBA,0xBE,0xC2,0xC7,0xF0,0x1E,0xC8,0x45,0x98,0x8B,0x5B,0x6B,0x71,\n    0x57,0x37,0x7B,0x02,0x6F,0x45,0x5D,0x75,0x5F,0xE0,0x60,0xE1,0x7E,0x70,0xC5,0xE2,\n    0x62,0xE3,0x7E,0xB1,0xFF,0x63,0x32,0x06,0xFD,0x2B,0x11,0x55,0xD5,0x57,0xFC,0xFE,\n    0xBF,0x6A,0xBA,0xCA,0xFB,0x7B,0x23,0x81,0xE3,0xC7,0xBE,0xE6,0x3E,0x88,0xD6,0x77,\n    0x16,0xE5,0x76,0x70,0x35,0xE7,0xEC,0xFA,0x04,0x08,0x2F,0x6F,0xBF,0x97,0x77,0xE8,\n    0x4F,0xE0,0x22,0xBE,0x45,0xFD,0xC2,0x24,0x28,0x48,0x51,0x08,0x88,0x88,0x88,0x91,\n    0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x02,0xAA,0x04,0x07,0x8F,\n    0xEA,0xDA,0x74,0x66,0xD8,0x4F,0x18,0xC6,0x1C,0x04,0x06,0x31,0xB0,0x28,0x46,0xD8,\n    0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x36,0xAF,0x75,0xFE,0xB0,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x2F,0x91,0x8C,0x63,0x47,0x18,\n    0xC8,0x48,0x8B,0xC1,0x24,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x0A,0x6F,0x74,\n    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0xE0,0x03,0xBE,\n    0x07,0x5D,0x21,0x38,0xEB,0xA3,0x5E,0x00,0x00,0x00,0x00,0x71,0xC7,0x1C,0x71,0xDE,\n    0x83,0xB0,0x90,0xDF,0x60,0x86,0x0D,0xFF,0xDF,0xDC,0x7C,0xFF,0xF3,0xF3,0x76,0x75,\n    0xF7,0xFA,0xFE,0xF2,0xF2,0xEB,0xFB,0xF8,0x30,0x00,0x18,0xC6,0x11,0x11,0x23,0xC6,\n    0x31,0x90,0x9E,0x3D,0x27,0x25,0x25,0xDA,0x93,0xED,0x48,0x91,0x22,0x44,0x89,0x3A,\n    0xA4,0xA4,0x71,0xC5,0x14,0x51,0x45,0x14,0x51,0xF6,0x25,0x3F,0xF9,0x12,0x89,0x64,\n    0x21,0x08,0xE2,0x8E,0x38,0xE3,0x8E,0x10,0x84,0x21,0x08,0xE3,0x8E,0x38,0xE3,0x8E,\n    0x10,0x84,0x20,0x42,0x10,0x7D,0xD0,0x80,0x00,0x00,0x95,0x42,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x07,0x16,0x10,0x0F,0xF6,0x10,0xFC,0x61,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x94,0x45,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x76,0xC5,0xDC,0x91,0x4E,0x14,0x24,0x05,0xAB,0x34,0xA5,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_db9cb102f9f13ff9a6c0ec007ab24c35a22c3a7b8ce6094d7d3487e5e2538135) == 844, \"Wrong size of locale's blob\");\n\n/* uk_UA.CP1251 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_bfab068d2cebe49810a878a5d82cd5650a1d107c1c279787869ed8734a5444c8[] = {\n    0x5E,0x5B,0xF2,0xD2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xED,0xCD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xF2,0xE0,0xEA,0x0A,0xED,0xB3,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_bfab068d2cebe49810a878a5d82cd5650a1d107c1c279787869ed8734a5444c8) == 27, \"Wrong size of locale's blob\");\n\n/* uk_UA.CP1251 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_1296b9141ed6f2f90058fbdbc654f9093104cf72d89fde4bc671656889786f0f[] = {\n    0x55,0x41,0x48,0x20,0x0A,0xE3,0xF0,0xED,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1296b9141ed6f2f90058fbdbc654f9093104cf72d89fde4bc671656889786f0f) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.CP1251 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_e7709234d2edab817b6e1731e3487b2a2f546d6b5131b63f99c55cc6acd39131[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x96,0x7F,0x6C,0x7A,0x00,0x00,\n    0x92,0x5F,0x09,0x80,0x10,0x42,0x81,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x08,\n    0x00,0x7F,0xFB,0xF9,0x85,0xB0,0x00,0xE6,0x68,0x35,0x36,0x94,0x69,0x18,0x4F,0x48,\n    0x34,0x0D,0x36,0x35,0x4D,0x0F,0x50,0x21,0x4F,0x24,0xD0,0x68,0xDA,0x40,0x00,0x00,\n    0x00,0x94,0xD3,0x54,0x68,0x53,0xDA,0x49,0xB5,0x3D,0x43,0x46,0x09,0xA6,0x23,0x4F,\n    0x52,0xD4,0xC7,0x82,0xAD,0xD4,0xF5,0xA3,0x4B,0x5A,0xFF,0x6B,0xEE,0x58,0x3D,0xEF,\n    0x24,0x92,0x62,0x4F,0xD2,0x44,0xAB,0xB1,0x70,0x87,0x7A,0x2D,0x21,0x6D,0x95,0x23,\n    0x29,0xDC,0x49,0xBA,0x59,0x44,0xA3,0x09,0x88,0x44,0x66,0xE8,0xA0,0x50,0x81,0x10,\n    0x1C,0x7C,0x34,0xDA,0x61,0xCE,0xD8,0x82,0xA4,0xCC,0x76,0x11,0xC6,0x37,0x3D,0x12,\n    0x31,0x2C,0xBE,0x3E,0x79,0xEF,0x68,0xA6,0xE7,0x82,0x1B,0x9B,0x4D,0xEA,0x61,0xF3,\n    0xEC,0x4A,0xC0,0x65,0xD1,0x5A,0xD7,0xF3,0x66,0x5D,0x2D,0x97,0x6A,0xE9,0x6C,0xA1,\n    0xB1,0x92,0x5E,0x59,0x94,0x54,0xBB,0xC1,0x15,0xF1,0xB4,0xA4,0x06,0x6A,0x16,0x52,\n    0xD4,0x10,0x80,0x82,0x98,0xD9,0x5F,0x91,0x16,0x6A,0xEF,0xC1,0x34,0x72,0xCC,0x66,\n    0x73,0x50,0x16,0x66,0x44,0x40,0x82,0x09,0x00,0x90,0x8A,0xDE,0x06,0x0D,0x28,0x0D,\n    0x02,0x52,0x2D,0x7C,0xF1,0xD9,0x7D,0xD3,0x9D,0x3B,0x36,0xEA,0x3C,0x23,0x26,0x8C,\n    0x68,0x58,0x09,0x68,0x41,0xB6,0x14,0x42,0x5A,0xA3,0x5F,0xF1,0x77,0x24,0x53,0x85,\n    0x09,0x09,0x67,0xF6,0xC7,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_e7709234d2edab817b6e1731e3487b2a2f546d6b5131b63f99c55cc6acd39131) == 262, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.ISO8859-5 LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_255db582e3484146454bb4fba72fb912ec5ee1c2547afd40595a0493c872fb1f[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x80,0x3F,0x79,0x0E,0x00,0x05,\n    0x35,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0x26,0x38,0x00,0x24,0xD3,0x23,0x4D,0x34,0x19,0x34,\n    0xD1,0x84,0xD3,0x23,0x11,0x93,0x26,0x4C,0x08,0xD1,0xA1,0x88,0x30,0x10,0xC0,0x09,\n    0x80,0x00,0x10,0xD3,0x41,0x84,0xD0,0xC8,0x31,0x1A,0x62,0x1A,0x69,0x88,0xD3,0x4C,\n    0x00,0x00,0x11,0x82,0x34,0x69,0x88,0xD3,0x4C,0x09,0x84,0xC8,0xC9,0x84,0x64,0xD0,\n    0xC2,0x68,0xC8,0xD3,0xDF,0xE9,0x55,0x04,0x9A,0x64,0x68,0x1A,0x64,0x68,0x64,0x32,\n    0x31,0x34,0xC4,0x0C,0x10,0x69,0xA3,0x46,0x46,0x08,0xD0,0xD3,0x08,0x00,0xC8,0x34,\n    0xC8,0x0C,0x46,0x23,0x21,0xA6,0x4D,0x32,0x62,0x64,0x34,0xC4,0x1A,0x68,0xC9,0xA0,\n    0x34,0x00,0x32,0x64,0x68,0x34,0x1A,0x30,0x40,0xD0,0xD0,0x06,0x98,0x4C,0x8C,0x26,\n    0x26,0x6F,0xF5,0x49,0xFE,0xAA,0x20,0x20,0x00,0x00,0x00,0x02,0x62,0x69,0x84,0xC4,\n    0x60,0x00,0x4C,0x4C,0x4D,0x31,0x32,0x60,0x4C,0x04,0x61,0xA0,0x00,0x00,0x46,0x4C,\n    0x04,0xD3,0x04,0xC0,0x00,0x13,0x1A,0x09,0x80,0x1A,0x02,0x60,0x02,0x33,0x40,0x00,\n    0x00,0x00,0x64,0xC8,0x4C,0xD3,0x14,0xC0,0x3B,0x7F,0xEA,0xA5,0x54,0xC8,0x69,0x89,\n    0x80,0x98,0x09,0xA6,0x4C,0x26,0x04,0xC8,0xC0,0x08,0xD0,0xC2,0x30,0x4C,0x98,0x08,\n    0xC4,0x62,0x0C,0x00,0x00,0x21,0xA6,0x4C,0x26,0x13,0x13,0x4C,0x11,0xA6,0x23,0x00,\n    0x00,0x00,0x09,0x84,0x34,0xC1,0x32,0x64,0xC0,0x11,0xA1,0x88,0x18,0x46,0x8C,0x01,\n    0xFA,0xA9,0xE9,0xE0,0x36,0x38,0x3A,0x3C,0x3E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,\n    0x4E,0x50,0x52,0x54,0x56,0x58,0x5A,0x5C,0x5E,0x60,0x62,0x64,0x66,0x68,0x6A,0x6C,\n    0x6F,0xE4,0x38,0x08,0x74,0x77,0xE6,0x3C,0x3D,0x3E,0x3F,0xF3,0xA0,0x20,0xA1,0x7A,\n    0x3D,0x28,0x68,0x88,0xA8,0xC8,0xE9,0x09,0x29,0x49,0x69,0x89,0xA9,0xC9,0xEA,0x1E,\n    0xA5,0x15,0x25,0x3F,0x5A,0xA2,0xAA,0xB7,0xB1,0x5F,0xDA,0xB0,0xB2,0xB5,0xEE,0x5B,\n    0x5C,0xF7,0xAE,0xAF,0x2F,0xB0,0x30,0xB1,0x7C,0x18,0xD9,0x19,0x59,0x99,0xDA,0x1A,\n    0x44,0x35,0x35,0xB6,0x36,0x80,0x0C,0x01,0xBD,0xC9,0xCC,0x3B,0xB3,0xB3,0xC3,0xCB,\n    0xD3,0xDB,0xE3,0xEB,0xF3,0xFC,0x04,0x0C,0x17,0xCF,0xE9,0x07,0x09,0xF5,0x85,0x86,\n    0x8B,0x89,0x8A,0x8A,0x87,0xFB,0x46,0x7D,0xE3,0x63,0xA3,0xE4,0x24,0x7F,0x12,0x52,\n    0x72,0x92,0xB2,0xD2,0xF3,0x13,0x33,0x53,0x73,0x93,0xB3,0xD3,0xF4,0x14,0x34,0x5F,\n    0x9A,0x3A,0x4A,0x50,0x20,0x69,0xEA,0x2A,0x7F,0x55,0x42,0x84,0xD6,0xD8,0x58,0x8B,\n    0x04,0x0A,0xD6,0xDA,0xDE,0xE2,0xE7,0xF7,0x75,0x77,0x79,0x7B,0x7D,0x7F,0x81,0x83,\n    0x85,0x87,0x89,0xFC,0xC7,0xC6,0x06,0x0F,0xFB,0x91,0x93,0x95,0x97,0x99,0x9B,0x9D,\n    0x9F,0xA1,0xA3,0xA5,0xA7,0xA9,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,0xBB,0xBD,\n    0xBF,0xC1,0xC3,0xC5,0xC7,0xC8,0x10,0x2F,0x28,0x60,0xFC,0xDC,0xE1,0x7A,0x39,0x43,\n    0x7F,0xBA,0x7A,0x84,0x75,0x89,0x14,0x28,0x48,0xB1,0x42,0xFF,0xE6,0x01,0x7F,0x7F,\n    0xDF,0x92,0x22,0x22,0x22,0x22,0x36,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,\n    0x22,0x21,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xE1,0x83,0x09,0x52,0xA5,0x48,0xFD,\n    0xB7,0x48,0x91,0x19,0xDC,0x12,0x49,0x24,0x92,0x49,0x24,0x92,0x11,0xA3,0xFA,0x12,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0xD1,0x92,0x49,0x43,0xAD,\n    0xD8,0x41,0x04,0x43,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x92,0x24,0x53,0xC0,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,0x50,0xB4,\n    0xB4,0x24,0x92,0x4D,0xAF,0x73,0xB7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1F,0xFE,0x92,\n    0x8A,0x29,0x12,0x24,0x48,0x91,0x22,0x44,0x5D,0x9E,0xDF,0x72,0x4A,0x4A,0x12,0x78,\n    0x42,0x12,0x22,0x8A,0x28,0xA2,0x8A,0x10,0x21,0x14,0x51,0x45,0x14,0x51,0x42,0x10,\n    0x84,0x08,0x42,0x0E,0x14,0x20,0x00,0x00,0x0E,0xF2,0x10,0x00,0x00,0x00,0x00,0x00,\n    0x00,0xE1,0xC2,0x01,0xD3,0x84,0x38,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x74,0x5D,0xC9,0x14,\n    0xE1,0x42,0x42,0x00,0xFD,0xE4,0x38\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_255db582e3484146454bb4fba72fb912ec5ee1c2547afd40595a0493c872fb1f) == 791, \"Wrong size of locale's blob\");\n\n/* uk_UA.ISO8859-5 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_cd2fa9ec3c3251855b142166d7c120756501bf0f49bb0d893770853d1eed7ab2[] = {\n    0x5E,0x5B,0xE2,0xC2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xDD,0xBD,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xE2,0xD0,0xDA,0x0A,0xDD,0xF6,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cd2fa9ec3c3251855b142166d7c120756501bf0f49bb0d893770853d1eed7ab2) == 27, \"Wrong size of locale's blob\");\n\n/* uk_UA.ISO8859-5 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_110ae53ac66cbc3d00efc44ed59bbc2553be8de749e83de2ad3c1facd865dbd9[] = {\n    0x55,0x41,0x48,0x20,0x0A,0xD3,0xE0,0xDD,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_110ae53ac66cbc3d00efc44ed59bbc2553be8de749e83de2ad3c1facd865dbd9) == 37, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.ISO8859-5 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_5655454c98944b71a0acb8cfe60ced5569a28571bdf04c36b84f053f6f0f8387[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x7B,0x2C,0x3D,0xF3,0x00,0x00,\n    0x93,0x5F,0x03,0x80,0x10,0x42,0x81,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x7F,\n    0xFB,0xF9,0x85,0x81,0x00,0x30,0x00,0xE6,0x68,0x35,0x36,0xA2,0x4F,0xD5,0x0F,0x53,\n    0x46,0x41,0x90,0xC7,0xAA,0x79,0x02,0x68,0x21,0x32,0x8F,0x50,0x07,0xA4,0x00,0x00,\n    0x00,0x09,0x4D,0x4D,0x21,0xA4,0xDA,0x26,0x80,0x00,0x68,0xD0,0xD3,0x4E,0x29,0x55,\n    0x6F,0x7C,0x75,0xCA,0xF9,0x63,0x0D,0xB1,0x9E,0x6D,0x4A,0xAA,0x92,0x49,0x38,0x13,\n    0xF4,0x90,0xD4,0x2B,0xE9,0x1A,0x45,0x61,0x04,0xAA,0xED,0x7F,0x6E,0xA3,0x99,0x26,\n    0x3F,0x3C,0x31,0x49,0x89,0x0E,0x4C,0x2E,0x73,0x20,0x78,0x40,0x88,0x0F,0x5B,0xE7,\n    0x29,0xC8,0x39,0xDB,0xD0,0x41,0x2C,0xF3,0x5A,0x45,0x67,0x5A,0x9B,0x87,0x7A,0x37,\n    0x46,0x48,0x77,0x84,0x4E,0x3C,0xDD,0x0F,0x06,0x8F,0x75,0x8D,0x62,0x25,0x11,0x13,\n    0x9C,0xFE,0x61,0x76,0x14,0x41,0xE8,0x58,0x51,0x04,0x3B,0x8E,0x40,0x91,0x1B,0x5A,\n    0xC2,0xAC,0x86,0x9E,0x57,0x94,0xB0,0x6B,0x4C,0xAD,0x83,0xAA,0xA4,0x31,0x1B,0x25,\n    0x91,0xD8,0xD5,0x0D,0xCE,0xFC,0x13,0x56,0xA1,0x8C,0xCD,0x95,0x41,0x0C,0xC8,0x88,\n    0x14,0x41,0x5E,0x12,0x11,0x46,0x04,0x42,0x88,0x6C,0x00,0x62,0x80,0x83,0x3D,0x36,\n    0x5D,0x2A,0xA1,0xAA,0x9C,0x5D,0xDE,0x63,0xD6,0xD6,0xBA,0x2C,0xA4,0x88,0x25,0xB0,\n    0x62,0xF6,0x4C,0xC9,0x66,0x8C,0xEB,0x36,0x88,0xD0,0xDF,0xC5,0xDC,0x91,0x4E,0x14,\n    0x24,0x1E,0xCB,0x0F,0x7C,0xC0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_5655454c98944b71a0acb8cfe60ced5569a28571bdf04c36b84f053f6f0f8387) == 262, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.KOI8-U LC_COLLATE locale data */\nstatic uint8_t  __crystax_locale_blob_cd4dd05d323df59f5f8afeaeb0cfdad4cfd5063e7bcc6910dbd3936ca005c453[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xF6,0x83,0x90,0xA3,0x00,0x05,\n    0x37,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0xD8,0xCC,0x97,0x00,0x04,0x13,0x4D,0x32,0x34,0x19,0x1A,\n    0x68,0x1A,0x00,0x68,0x64,0xD0,0x34,0x18,0x9A,0x0D,0x01,0xA0,0xD0,0x19,0x34,0x03,\n    0x20,0xC4,0x01,0xA3,0x13,0x10,0xC8,0x34,0x00,0x06,0x9A,0x1A,0x34,0xD0,0x1A,0x06,\n    0x9A,0x01,0xA1,0xA6,0x8D,0x03,0x40,0x00,0x68,0xD0,0x34,0x03,0x43,0x4D,0x19,0x00,\n    0xFF,0x55,0x3F,0x6A,0x9F,0xFA,0x4D,0x53,0x4A,0x20,0x83,0x40,0x68,0x00,0x32,0x0D,\n    0x34,0xD3,0x41,0xA6,0x8D,0x30,0x40,0x1A,0x69,0x88,0x06,0x83,0x41,0xA3,0x20,0x68,\n    0xC1,0x06,0x40,0x00,0x19,0x34,0x61,0x00,0x00,0x00,0xD3,0x46,0x9A,0x62,0x06,0x86,\n    0x86,0x81,0x90,0xC8,0x66,0x43,0x46,0x10,0x8D,0xA4,0xDE,0xA6,0x89,0xA7,0xA2,0x7E,\n    0x4D,0xA5,0x4D,0xE7,0xEA,0x92,0x9A,0x36,0x84,0x00,0x13,0x4C,0x04,0x32,0x60,0x00,\n    0x98,0x26,0x4C,0x00,0x00,0x00,0x09,0x84,0xC2,0x30,0x26,0x00,0x06,0x80,0x0D,0x06,\n    0x13,0x21,0xEA,0x64,0x00,0x13,0x04,0xC0,0x9A,0x60,0x8C,0x04,0x68,0xD0,0x60,0x04,\n    0xC8,0xC0,0x13,0x00,0x00,0x00,0x1A,0x00,0x06,0x6F,0xF5,0x52,0xA9,0x34,0xC9,0x80,\n    0x11,0x80,0x8D,0x18,0x08,0xD3,0x02,0x64,0xD3,0x43,0x4C,0x41,0x89,0x84,0xC1,0x18,\n    0x8C,0x00,0x13,0x04,0x64,0xD0,0x06,0x04,0xD3,0x4C,0x9A,0x69,0x93,0x26,0x99,0x32,\n    0x34,0x30,0x26,0x98,0x4C,0x98,0x4C,0x98,0x04,0x69,0xA6,0x23,0x4D,0x34,0x69,0x84,\n    0x34,0xC2,0x60,0x4D,0x18,0x9A,0x69,0x84,0xFD,0x53,0xD3,0x41,0xC1,0xD1,0xE1,0xF2,\n    0x02,0x12,0x22,0x3F,0x01,0x27,0x84,0x94,0x98,0x9C,0xA0,0xA4,0xA8,0xAF,0xC5,0xE3,\n    0xF2,0x16,0x16,0xF9,0x4B,0x8B,0xCC,0x0C,0x4C,0x8C,0xCD,0x15,0x0D,0x8E,0x0E,0x4E,\n    0xBC,0xC7,0x67,0x87,0xA7,0xC7,0xFE,0x74,0x0F,0xF7,0xA1,0x0D,0x11,0x15,0x19,0x1D,\n    0x23,0x05,0x2D,0x31,0x35,0x39,0x3D,0x41,0x45,0x49,0x4F,0x11,0x55,0x59,0x5D,0x60,\n    0x62,0xD2,0xE2,0xEA,0xF2,0xFF,0xA5,0x81,0x85,0x89,0x8F,0xD4,0xC8,0xCA,0xCC,0xCF,\n    0xEB,0xF6,0x34,0x34,0xB5,0x35,0xB6,0x36,0xFB,0x5B,0x9B,0xDC,0x23,0x1C,0xC1,0x04,\n    0x18,0x1C,0x13,0xF6,0xE8,0x78,0xD1,0x1B,0xC0,0xC1,0xC3,0xC4,0x44,0x84,0x0A,0x18,\n    0x50,0x81,0x31,0x61,0xC3,0x05,0x00,0x48,0xA0,0x05,0x8A,0xBF,0x16,0x00,0x12,0x12,\n    0x32,0x52,0x72,0x92,0xB2,0xD2,0xF3,0x13,0x33,0x5E,0xE9,0xB9,0xC9,0xD9,0xE9,0xF8,\n    0xDE,0xDC,0x77,0x73,0xBB,0x1F,0xDE,0x90,0xEF,0xC8,0xC9,0x49,0xF8,0x3C,0x29,0xBC,\n    0x92,0xD3,0x6B,0x52,0xCB,0x7B,0x4A,0x4B,0x41,0x3D,0x51,0x33,0x33,0xF3,0xFA,0x7D,\n    0x66,0xE7,0x12,0x28,0x9E,0x9F,0x4C,0x95,0x24,0xE2,0x79,0xF5,0x09,0xD4,0xA9,0x48,\n    0xA6,0x86,0x85,0x55,0x15,0x1A,0xB6,0x14,0xAA,0xD8,0x28,0xB1,0x54,0x55,0x42,0xCA,\n    0x92,0xAA,0x96,0x7E,0x6A,0xD6,0xD6,0x56,0x56,0xAD,0xFD,0x96,0xB8,0xD3,0x48,0x59,\n    0xCB,0xBF,0x95,0xC8,0x00,0x89,0xEB,0xFF,0xB5,0xFF,0xEF,0xFD,0x83,0x06,0x2C,0x58,\n    0xFF,0x4C,0xCC,0xCC,0xCC,0xCE,0x98,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,\n    0x66,0x6A,0xBE,0x29,0x4A,0x52,0x94,0xA5,0x29,0x4A,0x2C,0x21,0x11,0x11,0x12,0xE4,\n    0x44,0x44,0x44,0x44,0x00,0x60,0x42,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x09,0xC5,0xF4,0xF4,0x65,0x6C,0x4F,0x59,0xBC,0x3D,0x7D,0x49,0xA4,0xE0,0x10,\n    0x84,0x21,0x09,0x56,0x69,0xA6,0x9E,0xBC,0xF4,0x4E,0x25,0x75,0x8A,0x28,0x57,0xA2,\n    0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xA0,0xAD,0x55,\n    0x37,0xC0,0xEA,0x74,0xA7,0x20,0x51,0x66,0x26,0x30,0xC3,0x0C,0x30,0xCA,0xA2,0xCB,\n    0x2C,0xE4,0x0E,0x3D,0x71,0x84,0x4A,0x3F,0x89,0x42,0x10,0x84,0x77,0xD7,0x5D,0x08,\n    0x5F,0xC8,0x94,0x21,0x08,0x40,0x0B,0x2C,0x85,0x96,0x59,0x62,0x4F,0xF9,0x29,0x4A,\n    0x4C,0xC0,0x48,0x00,0x30,0x5D,0x52,0xA5,0x4A,0x95,0x2A,0x54,0xB7,0x4E,0x5B,0xA7,\n    0x84,0xFB,0x24,0x97,0x84,0x21,0x08,0x42,0x10,0xEA,0xA5,0xE3,0x24,0x21,0x24,0x92,\n    0x49,0x24,0x92,0x7F,0xDF,0xFC,0xB4,0xC2,0x5E,0x31,0x8C,0x63,0x09,0x21,0x08,0x42,\n    0x11,0x89,0x18,0x42,0x10,0x84,0x21,0x18,0xC6,0x31,0x23,0x18,0xB7,0x31,0x88,0x00,\n    0x00,0x98,0x46,0x20,0x00,0x00,0x00,0x00,0x00,0x07,0xE5,0x18,0x87,0x36,0x31,0xDE,\n    0xC6,0x24,0x89,0x26,0x31,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x44,0x80,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x28,0x80,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEA,0x0B,0xB9,0x22,0x9C,0x28,\n    0x48,0x7B,0x41,0xC8,0x51,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cd4dd05d323df59f5f8afeaeb0cfdad4cfd5063e7bcc6910dbd3936ca005c453) == 838, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.KOI8-U LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_c40e28a3a770a916e2894e1cc5198fc8878c60552e84fe4c2238b75a0609d208[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xD3,0x79,0x73,0x3D,0x00,0x05,\n    0x3E,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xC0,0x02,0x7B,0x6A,0x54,0xC0,0x02,0x55,0x54,0xD0,0xC8,0x34,0x68,\n    0xD0,0xFF,0x55,0x19,0x06,0x9B,0x50,0xC4,0x68,0xD0,0x62,0x64,0xD3,0x26,0x4C,0x40,\n    0x30,0x99,0x06,0x83,0x10,0x30,0x46,0x4C,0x02,0x1A,0x69,0x82,0x1A,0x64,0x69,0xA1,\n    0xA0,0x32,0x69,0xA1,0xA1,0xA0,0x06,0x40,0x68,0xD0,0x62,0x68,0x34,0xD3,0x26,0x26,\n    0x26,0x20,0x64,0xD0,0xC8,0x68,0x19,0x06,0x46,0x4C,0x04,0xAA,0xA8,0x68,0x69,0xA0,\n    0x64,0x64,0x69,0xA6,0x9A,0x64,0xD3,0x4C,0x20,0x64,0x34,0x34,0x34,0x32,0x68,0xD0,\n    0xD1,0x93,0x4C,0x20,0x0C,0x13,0x23,0x08,0x32,0x01,0x93,0x11,0xA6,0x43,0x43,0x46,\n    0x98,0x98,0x98,0x46,0x8D,0x34,0xC9,0x81,0x1A,0x61,0x0D,0x19,0x0D,0x30,0x4C,0x23,\n    0x46,0x4C,0x46,0x46,0x21,0x93,0x43,0x26,0x4D,0x0C,0x4C,0x4C,0x09,0x22,0x85,0x34,\n    0xA7,0xA6,0x49,0xE8,0xC2,0x6A,0x69,0x84,0xD1,0xA3,0x4D,0x01,0x81,0x18,0x4C,0x11,\n    0xA6,0x13,0x4C,0x26,0x10,0x34,0x0D,0x30,0x02,0x32,0x60,0x13,0x41,0x80,0x46,0x86,\n    0x8C,0x13,0x13,0x00,0x01,0x03,0xD4,0x3D,0x46,0x80,0x0D,0x31,0x32,0x64,0xC0,0x86,\n    0x26,0x13,0x13,0x09,0xA1,0x88,0xD1,0xEA,0x7A,0x34,0x1B,0xD5,0x12,0x60,0x00,0x98,\n    0x00,0x09,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,\n    0x84,0x76,0x6B,0x24,0x84,0x91,0x20,0x6E,0xC5,0x94,0x9F,0x48,0x34,0xA1,0x46,0x25,\n    0x49,0x62,0x8E,0x74,0xA4,0xB9,0x22,0x90,0x52,0x49,0x82,0x64,0x9A,0x26,0xCA,0x51,\n    0x38,0x24,0x18,0xF1,0x24,0xC8,0x09,0x46,0x44,0x4B,0x10,0xD3,0x0C,0x90,0x9A,0x64,\n    0xC4,0xE3,0x28,0x27,0x8A,0x02,0x88,0xA4,0x65,0x4C,0xB1,0x97,0x33,0x02,0x81,0x99,\n    0x14,0xCC,0x69,0x8E,0x16,0x45,0xA1,0x6C,0xC7,0x8B,0x82,0xE9,0x90,0x17,0x8C,0x88,\n    0xBE,0x30,0x19,0x21,0x84,0x62,0x32,0x63,0x18,0xC8,0x32,0x99,0x43,0x2A,0xE0,0xC8,\n    0x19,0x71,0x28,0xD5,0x1A,0xB1,0x6C,0x5C,0x35,0x86,0xB4,0x5D,0x17,0x8D,0x70,0xBE,\n    0x6B,0xC6,0x01,0x84,0x62,0x18,0xCD,0x81,0xB1,0x36,0x46,0xCC,0xDA,0x1B,0x53,0x6C,\n    0x6D,0xC6,0x47,0x46,0x63,0x4E,0x6A,0x07,0x01,0xC4,0x48,0x91,0xC8,0x73,0x1D,0x0D,\n    0x49,0xAA,0x1D,0x47,0x63,0x56,0x3B,0x8F,0x03,0xC8,0xF4,0x3D,0x8F,0x83,0xE8,0xFC,\n    0x6B,0x0D,0x69,0xAE,0x1F,0xCD,0x79,0x00,0x6C,0x08,0x12,0x08,0x53,0x49,0x06,0x42,\n    0x10,0xA6,0xC4,0xD9,0x1B,0x32,0x18,0xDA,0x10,0xE4,0x41,0xB5,0x36,0xC4,0x49,0xB7,\n    0x22,0x48,0xA3,0x70,0x6E,0x4D,0xD1,0xD2,0x1F,0x07,0xD1,0xF8,0xE9,0x8F,0xE4,0x01,\n    0x02,0x75,0x08,0x22,0x0C,0x84,0x21,0x4E,0xA9,0xD6,0x21,0x8E,0xB9,0xD8,0x21,0xCE,\n    0xC9,0x11,0x27,0x12,0x45,0x4A,0xC5,0xF7,0xE3,0x4E,0x84,0xAC,0x91,0x26,0x74,0x8E,\n    0x99,0xD4,0x96,0xEB,0x4B,0xCA,0x1D,0x83,0xB2,0x4A,0x88,0x47,0x68,0x42,0x10,0x8E,\n    0xD8,0x84,0x77,0x0E,0xE9,0x2C,0x4B,0x88,0x42,0x11,0x30,0x4C,0x79,0xA6,0x4F,0x39,\n    0x34,0x4D,0x93,0x84,0xE9,0x3C,0x7A,0x09,0xF2,0x80,0xA1,0x28,0x8F,0x49,0xEA,0x28,\n    0xCF,0x59,0xEC,0x29,0x0A,0x53,0xDA,0x53,0x14,0xE5,0x41,0xEE,0x3D,0xE5,0x49,0x54,\n    0x7C,0x0F,0x89,0x56,0x56,0x15,0x89,0x95,0xA7,0xC8,0xF9,0x9F,0x42,0xB8,0xAF,0x3E,\n    0xA5,0x81,0xF6,0x3E,0xE7,0xE0,0xB1,0x2C,0x8F,0xC9,0x66,0x5A,0x1F,0xA2,0xD4,0xFF,\n    0x89,0xF3,0xFF,0x28,0x0E,0x59,0xCC,0x28,0x4E,0x69,0xCE,0x39,0xE7,0x40,0xA2,0x23,\n    0x38,0xA8,0x4A,0x89,0x84,0xD4,0x28,0x0D,0x1B,0x23,0xF8,0x6C,0x3B,0xBA,0x13,0xB0,\n    0x3B,0x27,0x61,0xD9,0x99,0x30,0x81,0x6F,0x13,0x42,0xE8,0x21,0x60,0x06,0x21,0x64,\n    0xC3,0x24,0x91,0x0C,0x91,0x0D,0x03,0x0E,0x45,0x21,0xC4,0x02,0x41,0x3E,0xC0,0x85,\n    0x42,0xC2,0x49,0x3B,0x00,0x47,0x0C,0x71,0xC7,0x1C,0x72,0x92,0x71,0xC7,0x47,0x8E,\n    0x38,0xA2,0x8A,0x28,0xA2,0x88,0x40,0x23,0x3C,0xC2,0x12,0x11,0x2B,0x2B,0x25,0x02,\n    0x0A,0x06,0x04,0x3B,0x26,0x6E,0x53,0x0E,0xC2,0x10,0x26,0x60,0x13,0x30,0x33,0x10,\n    0xA1,0x09,0xDC,0x66,0x26,0x66,0x9C,0x77,0x75,0x2F,0x04,0x0E,0x82,0x02,0x08,0x1C,\n    0x77,0x71,0xDD,0xC1,0x11,0x20,0x4A,0x11,0x3A,0x4A,0x49,0x71,0xF4,0x3A,0x7D,0x24,\n    0x40,0xA5,0xD8,0x93,0x61,0x92,0x49,0x84,0x6F,0x58,0x0F,0x79,0x84,0xA7,0x58,0x02,\n    0x94,0x30,0xA7,0x18,0x5A,0xF6,0x10,0x4F,0x31,0xAF,0xE1,0x39,0x0B,0x21,0x4D,0xB0,\n    0x0A,0x5B,0x60,0xD2,0x9F,0x14,0x21,0x31,0xF3,0x38,0x52,0x69,0x73,0xB0,0x04,0x2C,\n    0x7C,0xAC,0x4F,0x49,0x43,0x00,0x48,0xD6,0xB8,0xA0,0x9C,0xA3,0x40,0x7C,0x6C,0x29,\n    0x88,0xA0,0x80,0x90,0xC4,0x32,0x8E,0x7E,0xFF,0x7B,0x89,0x05,0x2D,0x86,0x01,0x2A,\n    0x68,0x9C,0x12,0x12,0xE8,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x69,0xBC,0xB9,0x9E,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c40e28a3a770a916e2894e1cc5198fc8878c60552e84fe4c2238b75a0609d208) == 864, \"Wrong size of locale's blob\");\n\n/* uk_UA.KOI8-U LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_7e0ae12ba9dc86da05411a449ed19abff05f5cff5bcffddf22e74867b3551dab[] = {\n    0x5E,0x5B,0xD4,0xF4,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xCE,0xEE,0x6E,0x4E,\n    0x5D,0x2E,0x2A,0x0A,0xD4,0xC1,0xCB,0x0A,0xCE,0xA6,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_7e0ae12ba9dc86da05411a449ed19abff05f5cff5bcffddf22e74867b3551dab) == 27, \"Wrong size of locale's blob\");\n\n/* uk_UA.KOI8-U LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_c78ad82f20f2103ef664ce49f965a355d4848dfc63ed5bd29dfe13e8ab90f089[] = {\n    0x55,0x41,0x48,0x20,0x0A,0xC7,0xD2,0xCE,0x2E,0x0A,0x2C,0x0A,0x20,0x0A,0x33,0x3B,\n    0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c78ad82f20f2103ef664ce49f965a355d4848dfc63ed5bd29dfe13e8ab90f089) == 37, \"Wrong size of locale's blob\");\n\n/* uk_UA.KOI8-U LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_35990dc1b6693c99e462b2b2c1db312a047fb813a5bfb7b95d1d53e218f60ce8[] = {\n    0x2C,0x0A,0x20,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_35990dc1b6693c99e462b2b2c1db312a047fb813a5bfb7b95d1d53e218f60ce8) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.KOI8-U LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_6ee7a2ce04692b0426827325666da0e3154591c17dc52267eeb8c4a8d4738d33[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x84,0x2C,0xB3,0xF6,0x00,0x00,\n    0x8F,0xDF,0x16,0x00,0x10,0x42,0x81,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x01,\n    0x00,0x7E,0xBD,0xFF,0xD1,0x30,0x00,0xEC,0x34,0x63,0x7A,0x48,0xD1,0x90,0x00,0x00,\n    0x68,0x7A,0x8D,0x02,0x09,0xEA,0x83,0x4D,0x01,0xA0,0x00,0x00,0x00,0x94,0xD1,0x24,\n    0x62,0x6D,0x1A,0x90,0x07,0x94,0xDA,0x9E,0xD5,0x03,0xD3,0x51,0x68,0xA2,0xB2,0x26,\n    0x38,0xF4,0x69,0xE7,0x19,0xA8,0xFE,0x00,0x80,0xF4,0x07,0xB6,0x4A,0x89,0x92,0xE0,\n    0xE2,0x77,0x6B,0x52,0x50,0xD2,0x0B,0x02,0x02,0x88,0xDF,0x28,0x87,0x97,0xCF,0x9E,\n    0xAE,0xAA,0x6C,0x53,0x53,0x46,0xD5,0x10,0x21,0x21,0xFA,0xFC,0x57,0x6A,0xEC,0x33,\n    0x5A,0x89,0x2D,0x33,0x13,0x76,0x6D,0xDB,0x39,0x79,0x2C,0x07,0x2C,0xB9,0xB4,0xDF,\n    0xD7,0x3F,0xE1,0xD4,0x88,0x39,0xDD,0xC5,0x71,0x9C,0xD4,0xDE,0x2B,0x63,0x92,0x11,\n    0x03,0x90,0x5A,0x24,0x7D,0x64,0xDD,0x2E,0xA0,0xD4,0xB0,0xB0,0x1A,0xA6,0x0F,0x0B,\n    0x94,0xEF,0x9C,0x63,0xCD,0xE6,0xF2,0xA0,0xC7,0x7B,0x32,0xC7,0x94,0x35,0x38,0x6A,\n    0x63,0x90,0xF6,0xC3,0xBB,0x9D,0x58,0xB9,0x70,0x83,0xBC,0xD8,0xCB,0x06,0x76,0x2F,\n    0x46,0x2C,0x8E,0x97,0x83,0xA0,0x44,0x51,0x27,0xD3,0xCC,0xD5,0xA5,0x2E,0xF2,0x00,\n    0x88,0x82,0xCD,0x8D,0x71,0x08,0x1A,0xFB,0x35,0x0B,0x65,0x06,0x02,0x9D,0x26,0x34,\n    0x8C,0xA0,0x27,0x24,0x09,0x7F,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x42,0x16,0x59,0xFB,\n    0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6ee7a2ce04692b0426827325666da0e3154591c17dc52267eeb8c4a8d4738d33) == 257, \"Wrong size of locale's blob\");\n\n/* uk_UA.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_6fd23494054372b686dbd44182fa5ed4699d02eea52e366fc4d969cf3f739be7[] = {\n    0x5E,0x5B,0xD1,0x82,0xD0,0xA2,0x79,0x59,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,0xD0,0xBD,\n    0xD0,0x9D,0x6E,0x4E,0x5D,0x2E,0x2A,0x0A,0xD1,0x82,0xD0,0xB0,0xD0,0xBA,0x0A,0xD0,\n    0xBD,0xD1,0x96,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6fd23494054372b686dbd44182fa5ed4699d02eea52e366fc4d969cf3f739be7) == 36, \"Wrong size of locale's blob\");\n\n/* uk_UA.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_a8ede73fe7d1c900cf578d9140cf2e4c1085c97a5fe0970adaf449afdcb581bc[] = {\n    0x55,0x41,0x48,0x20,0x0A,0xD0,0xB3,0xD1,0x80,0xD0,0xBD,0x2E,0x0A,0x2C,0x0A,0x20,\n    0x0A,0x33,0x3B,0x33,0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x30,0x0A,0x31,0x0A,\n    0x30,0x0A,0x31,0x0A,0x31,0x0A,0x31,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a8ede73fe7d1c900cf578d9140cf2e4c1085c97a5fe0970adaf449afdcb581bc) == 40, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed uk_UA.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_523dff2db1ff7a05052508ff4d6ab9974a3efe237435eaeba398f47a4d18e235[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x2B,0x95,0x43,0x9A,0x00,0x01,\n    0x13,0x5F,0x6A,0x00,0x10,0x42,0x81,0x00,0x10,0x00,0x42,0x08,0x70,0x36,0x02,0x79,\n    0x85,0x81,0x00,0x7F,0xFB,0xE0,0x00,0x30,0x00,0xEC,0x68,0x63,0x7A,0x88,0xF5,0x0D,\n    0x34,0x68,0x00,0xD0,0x1A,0x00,0x08,0x46,0xA3,0x20,0x66,0xA0,0x00,0x00,0x00,0x09,\n    0x4D,0x10,0xA6,0x53,0xF2,0x9A,0x9A,0x34,0x64,0x69,0xA7,0xA9,0xE2,0x80,0x3F,0x54,\n    0x88,0xCB,0x61,0xCE,0x9B,0x6A,0xDF,0xBA,0xD1,0x87,0x7D,0x5F,0xB2,0x88,0x88,0x00,\n    0x00,0x68,0x19,0x80,0xE3,0x5E,0x23,0xA9,0xCF,0x12,0x48,0x41,0x96,0xCD,0x3D,0xE9,\n    0x3C,0x9D,0xDE,0xBE,0xDE,0x39,0xBA,0xD4,0xD0,0xB6,0x67,0xA3,0x66,0x88,0x10,0x90,\n    0xFD,0xFD,0x75,0xD3,0x5D,0x06,0x6C,0x11,0x25,0x70,0x18,0x6B,0x80,0xCC,0x1E,0x5D,\n    0x38,0xA4,0x54,0xCF,0x16,0xF3,0xD2,0x7C,0xE5,0x82,0x22,0x1E,0x47,0x4E,0xB0,0x88,\n    0x76,0x96,0x8B,0xEF,0x11,0x18,0x48,0x45,0xAD,0x6F,0xDD,0xB2,0xDA,0x6F,0x13,0x5B,\n    0x4D,0xD1,0x10,0x40,0xE6,0x04,0xB7,0xB5,0x4D,0xD7,0x1A,0xD7,0xE0,0x51,0x82,0x54,\n    0x0A,0x18,0x92,0x42,0xDE,0x01,0x07,0x21,0x6B,0x1D,0x88,0xD4,0x4E,0x7B,0xF0,0x91,\n    0xC6,0xA2,0x19,0x23,0x69,0x82,0x88,0x92,0x94,0x81,0x88,0x1A,0xC5,0xD9,0xA8,0x8A,\n    0xB5,0x29,0x08,0x12,0x71,0x05,0xFB,0x6B,0x96,0x1B,0x9F,0xBA,0x9F,0x31,0x11,0x62,\n    0x31,0x6D,0xF0,0x8A,0xD0,0x90,0x25,0xC4,0x63,0x83,0x26,0x64,0xAE,0x8B,0xE2,0x78,\n    0x08,0xEC,0x6F,0xF1,0x77,0x24,0x53,0x85,0x09,0x02,0xB9,0x54,0x39,0xA0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_523dff2db1ff7a05052508ff4d6ab9974a3efe237435eaeba398f47a4d18e235) == 270, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed UTF-8 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_4adf8926026adfd28daa074b38918bc14d0ce862e2150cc82eaec625ddde0d61[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xA7,0xED,0x84,0xC3,0x00,0x8B,\n    0x5E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x19,0xFF,0x3E,0x08,0x06,0x00,0x0F,0x8F,0x86,0x72,0x00,0x1C,\n    0x00,0x80,0x01,0xDD,0x3B,0xD7,0x58,0x00,0x00,0x00,0x00,0x00,0x3E,0x03,0xD6,0x34,\n    0xCD,0x1E,0x01,0xB0,0x05,0x0D,0x00,0x00,0x00,0x03,0x03,0x55,0x4F,0x7F,0xA5,0x49,\n    0x45,0x00,0x00,0x00,0xD0,0x66,0xA3,0x20,0x3D,0x34,0x9B,0xD2,0x8D,0x00,0xD0,0x7A,\n    0x9A,0x00,0x01,0xA7,0xA8,0xD3,0x4D,0x0F,0x28,0xF4,0xD4,0xC8,0xF5,0x19,0xA4,0x34,\n    0xF1,0xAA,0x1E,0x44,0xC9,0xE4,0x4F,0xF2,0x94,0xD3,0x43,0x43,0xFC,0xA4,0x43,0xC1,\n    0xA5,0x3F,0x45,0x31,0x01,0xEA,0x6D,0x4F,0xD5,0x0F,0x53,0x35,0x1A,0x7B,0xD5,0x4F,\n    0x1E,0xD4,0xA4,0x68,0x7E,0xA3,0xD5,0x0C,0x6F,0x55,0x0F,0xCA,0x9F,0xA9,0xFB,0x54,\n    0x7B,0xD4,0x53,0xFC,0xA5,0x50,0x6D,0x54,0x3C,0x11,0x04,0x20,0x46,0x84,0x8D,0xA6,\n    0x8A,0x6D,0x3D,0x14,0x3D,0x19,0x1A,0x81,0xA3,0x40,0x7A,0x83,0x3D,0x53,0x40,0x34,\n    0x1A,0x19,0x34,0x1A,0x34,0xF5,0x1A,0x00,0xD0,0xD0,0x00,0x34,0x00,0x03,0x40,0x03,\n    0x40,0x64,0xD0,0x64,0x64,0x00,0x64,0x00,0xD0,0x0C,0x40,0xD0,0xD3,0x40,0x06,0x99,\n    0x00,0xD0,0x32,0x09,0xA9,0x1A,0x92,0x3D,0x1B,0x54,0x3D,0x41,0xA6,0x80,0x3D,0x3D,\n    0x51,0xA3,0x40,0x7A,0x8D,0x34,0xF5,0x00,0xD0,0x03,0x40,0x00,0x1E,0x50,0x3D,0x20,\n    0x00,0x1A,0x00,0x00,0x00,0x00,0x01,0xEA,0x07,0xA9,0xA0,0xFD,0x50,0x1E,0xA0,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0xD5,0x48,0x00,0x02,0x27,0xE9,0x4A,0x4A,0x6D,\n    0x41,0xE9,0x3D,0x43,0xC9,0xED,0x4A,0x7B,0x0A,0x9E,0xA0,0x68,0x64,0xD9,0x3D,0x53,\n    0x20,0x00,0x3C,0xA1,0xA3,0xD4,0x34,0x01,0xEA,0x1E,0xA0,0x32,0x00,0x34,0xF5,0x0D,\n    0x91,0xEA,0x9A,0x01,0xA1,0x90,0x1B,0x50,0x34,0x7A,0x80,0x34,0x64,0xD0,0x34,0x1A,\n    0x00,0x1A,0x6D,0x40,0x00,0x69,0x9A,0x9A,0x03,0x40,0xF5,0x07,0xA9,0x86,0xFF,0x55,\n    0x48,0xC8,0x07,0xA8,0x21,0x4A,0x12,0x05,0x36,0xA2,0x46,0x34,0x08,0xD1,0x80,0x09,\n    0x89,0xA3,0x13,0x4C,0x46,0x86,0x02,0x64,0xDA,0x00,0x26,0x02,0x34,0xF4,0x98,0x09,\n    0x91,0x80,0x23,0x26,0x13,0x09,0xA6,0x99,0x32,0x62,0x0C,0x00,0x4C,0x09,0x80,0x09,\n    0x80,0x41,0x80,0x00,0x43,0x11,0x89,0x89,0x91,0xA3,0x01,0x92,0x32,0x04,0xA8,0xA5,\n    0x1F,0xAA,0x68,0xC6,0xA9,0x84,0xDE,0xA7,0x94,0xF0,0xA9,0xB2,0x1E,0x52,0x7A,0x8D,\n    0x36,0x53,0x26,0x26,0x9B,0x22,0x3D,0x23,0xD3,0x51,0xEA,0x06,0x26,0x69,0x00,0xDA,\n    0x40,0xF5,0x0F,0x23,0x13,0x4F,0x4A,0x7A,0x61,0x06,0x9A,0x99,0xA3,0x4D,0x31,0x34,\n    0xD3,0x64,0xD0,0x10,0xD1,0xA4,0xC3,0x53,0x03,0x4C,0x89,0xEA,0x6D,0x4D,0xA0,0x9E,\n    0x82,0x66,0x86,0xA6,0x18,0x43,0x53,0x65,0x30,0x9A,0x32,0x67,0xA8,0x32,0x9E,0xA5,\n    0xC4,0x15,0x8E,0x5A,0x7E,0xA5,0xDB,0x1F,0x49,0x5A,0xF4,0xFB,0xDB,0x98,0xD8,0x72,\n    0x9C,0xCC,0x2A,0xF1,0x3C,0xC3,0x56,0xB9,0xEE,0x7F,0xCF,0xFA,0x1B,0x74,0xF8,0x2E,\n    0xD9,0x28,0x8F,0x95,0xC5,0x7C,0x4E,0xDE,0x67,0x50,0xF2,0xE7,0x2F,0x6B,0x8A,0xA6,\n    0xBF,0xBF,0x7D,0x53,0x75,0x8C,0x2C,0xAD,0x5C,0xB2,0x8C,0xD1,0xCC,0x6C,0x58,0xC5,\n    0xB4,0x74,0xDA,0xC3,0xDC,0xBA,0x71,0xB2,0x99,0xC9,0xFB,0x0F,0xA1,0x95,0xE2,0xE7,\n    0x98,0xED,0x07,0x11,0x05,0x00,0x40,0x08,0x13,0x19,0x02,0x02,0x52,0x01,0xDE,0xE0,\n    0xDA,0x03,0x97,0x90,0xD2,0x4A,0x5D,0x25,0x76,0x27,0x5D,0x30,0xA4,0xDC,0xD2,0x89,\n    0xAC,0x21,0x9B,0xF8,0x98,0x5F,0xA7,0xB1,0xBA,0xBD,0x1E,0x86,0xBD,0x75,0xEB,0x31,\n    0x3A,0xEF,0xEE,0xDE,0x75,0x31,0xC3,0xF5,0x0E,0xBD,0xA6,0x98,0x48,0x9C,0xB1,0x02,\n    0xF5,0xF2,0x45,0xEC,0x04,0x03,0xD8,0x48,0x53,0xB1,0x10,0x87,0x4C,0x3A,0xB6,0x37,\n    0x04,0x76,0x3D,0x13,0x8E,0xCD,0x63,0xB2,0x68,0x47,0x65,0xC5,0x08,0x87,0xB3,0x17,\n    0x67,0x3A,0x71,0xDA,0x0F,0xD5,0xD5,0x63,0xB4,0xE1,0x1C,0xE3,0x95,0x3B,0x51,0xDA,\n    0xCF,0xD2,0xE8,0xE6,0xF7,0x6D,0xBB,0x69,0x89,0xDB,0x9E,0x6A,0x70,0x4D,0x87,0x67,\n    0xE6,0xC6,0xF6,0x1D,0xBF,0x23,0xF5,0x8F,0xD7,0x3B,0x86,0xE2,0x3F,0x61,0xC7,0x97,\n    0x20,0x61,0x44,0x9F,0x59,0xF6,0x1F,0x69,0xF0,0x98,0xB1,0x44,0x43,0x10,0xEA,0x84,\n    0x99,0xAB,0xD2,0x44,0xE6,0xCB,0xAC,0x41,0x0A,0xA8,0x48,0x98,0x92,0x28,0xC7,0x99,\n    0xC1,0xF4,0xCD,0x10,0x44,0x59,0x9D,0x1A,0x91,0x84,0x00,0xFF,0x2A,0xFF,0xEA,0x91,\n    0xA2,0x51,0x04,0x67,0x8F,0x88,0x8E,0x21,0x48,0xF1,0x7C,0x81,0x1E,0x65,0xC9,0x11,\n    0x86,0x7C,0x78,0xD0,0x1A,0x13,0x44,0x49,0x10,0x86,0xBA,0x4C,0x92,0x3E,0xF3,0x48,\n    0x69,0x49,0x41,0xA9,0xA6,0xD6,0xC7,0x12,0xA6,0xA0,0x96,0x34,0x63,0x46,0x9A,0x92,\n    0x5C,0x8A,0x26,0x09,0x93,0x54,0x4D,0x1A,0xB1,0xFA,0x6C,0xD6,0x1E,0xB4,0xE0,0xD8,\n    0x6E,0x4E,0x8E,0x09,0x73,0x3E,0x4F,0x13,0xE5,0x01,0x42,0x6A,0x4A,0x22,0x8C,0xD6,\n    0x98,0x1C,0x16,0x88,0xD5,0x12,0xC6,0xB8,0x7B,0x35,0xE5,0x21,0xB0,0x36,0x25,0x29,\n    0xB2,0x28,0x8F,0xC0,0xD9,0x90,0xE5,0x21,0x42,0x6D,0x0D,0xA9,0x34,0x6D,0x8A,0x63,\n    0xF1,0x36,0xE6,0xE0,0x6E,0x6E,0x4D,0xD1,0xBB,0x37,0x85,0x39,0xBD,0x29,0x4D,0x99,\n    0x50,0x54,0x99,0x4D,0xF1,0x95,0xDF,0x9B,0xC2,0x50,0xA8,0x2E,0x97,0x5F,0xC8,0xAA,\n    0x3F,0x33,0x80,0x55,0x9F,0xA1,0xC1,0x2B,0x09,0x0E,0x11,0xC3,0x38,0x87,0x14,0xFD,\n    0x4A,0xD3,0x8C,0x71,0xCA,0xA6,0x1C,0x8E,0x49,0x52,0x7E,0xC7,0x20,0xE5,0x1C,0xB2,\n    0xB8,0xE6,0x15,0x47,0x37,0xB3,0x5E,0x7E,0xE7,0x3C,0xE8,0x1C,0x73,0xA2,0x74,0x8B,\n    0x02,0xC4,0xE9,0x16,0x47,0x20,0xAF,0x2C,0xCE,0x59,0xD3,0x3A,0x87,0x54,0xB4,0x39,\n    0xE7,0xF0,0x75,0x8B,0x5B,0x4F,0x3A,0xDA,0xE3,0x19,0xD7,0x3B,0x07,0x64,0xEA,0x16,\n    0x87,0x60,0xED,0x5A,0x33,0x67,0xFD,0x19,0x6B,0x31,0x7F,0xE5,0x9A,0xBB,0x2E,0xF5,\n    0x5C,0x54,0xAE,0x22,0xE2,0xAB,0xAA,0x0A,0xF2,0xBA,0xA0,0xAE,0x2E,0x22,0xBE,0xA0,\n    0xB8,0xCA,0xF2,0x8A,0xCF,0x67,0xB9,0x0E,0x42,0x4B,0x8C,0xB3,0xDE,0x5E,0x2B,0x06,\n    0x4A,0x78,0x48,0x52,0x42,0xC0,0xB3,0xC2,0xF7,0x49,0x4C,0x8E,0x9F,0x7A,0xD2,0x9D,\n    0x77,0x6A,0x5D,0xD4,0xCD,0xE1,0x61,0x22,0xA4,0x93,0x0C,0xE2,0x9A,0x52,0x99,0x62,\n    0x15,0x19,0x29,0x26,0x19,0xD9,0x26,0x12,0x92,0x61,0x29,0x26,0x12,0x92,0x61,0x29,\n    0x26,0x12,0x92,0x61,0x29,0x26,0x12,0x92,0x61,0x2F,0x28,0x98,0x4A,0x49,0x87,0x92,\n    0x92,0x61,0x29,0x26,0x12,0x92,0x61,0x29,0x26,0x12,0x92,0x61,0x29,0x26,0x1C,0x8C,\n    0x93,0x0D,0xE7,0x30,0x98,0x4A,0x49,0x84,0xA4,0x99,0xFB,0x9F,0x78,0xFB,0x39,0x49,\n    0x5B,0x0E,0xEE,0x49,0x84,0xA4,0x98,0x46,0x29,0x84,0x62,0x98,0x46,0x29,0x84,0x7B,\n    0x84,0xC2,0x31,0x4C,0x23,0x14,0xC2,0x31,0x4C,0x23,0x14,0xC2,0x31,0x4C,0x23,0x14,\n    0xC3,0x1A,0x29,0x84,0x62,0x98,0x46,0x29,0x84,0x62,0x98,0x46,0x29,0x84,0x62,0x98,\n    0x7F,0x78,0xA6,0x11,0x8A,0x61,0x18,0xA6,0x11,0x8A,0x61,0x18,0xA6,0x11,0x8A,0x61,\n    0x18,0xA6,0x11,0xE5,0x53,0x08,0xC5,0x30,0x8C,0x53,0x08,0xC5,0x30,0x8C,0x53,0x08,\n    0xC5,0x30,0x8C,0x53,0x08,0xC5,0x33,0x52,0xFA,0xCC,0x12,0x92,0xCE,0x04,0xA4,0x98,\n    0x4A,0x49,0x92,0x99,0xC7,0xCF,0x28,0xC7,0xC1,0xCC,0xD9,0x18,0xA6,0x11,0xD0,0x28,\n    0xC5,0x54,0x0F,0x3F,0xAD,0xE5,0x78,0xDC,0x65,0x9C,0x0B,0xF8,0xCA,0xFF,0x2C,0xAF,\n    0xF2,0xCA,0xFD,0xF5,0xDF,0x42,0xFE,0x85,0x5F,0xF4,0x15,0x2F,0xFD,0xC7,0x7F,0x0D,\n    0x5F,0xD0,0xAB,0xF7,0xD6,0x74,0xE3,0x9F,0x73,0x86,0xA1,0xCA,0x67,0x21,0xF3,0x5C,\n    0x30,0xD7,0x12,0x0A,0xA1,0x7D,0xDE,0xBC,0xA7,0x0B,0xD7,0x93,0x0B,0xD2,0x57,0xEF,\n    0xAA,0x81,0x7F,0x94,0x56,0x60,0xAA,0x04,0x34,0x0A,0x10,0x55,0x03,0x92,0x84,0xA1,\n    0x05,0x9C,0x08,0x41,0x30,0x86,0x7D,0x42,0x0A,0xA0,0x71,0x78,0xA9,0x8B,0xB7,0xC7,\n    0x9F,0x37,0x37,0x36,0x69,0xC2,0x66,0x83,0x37,0x37,0x36,0x6A,0x89,0x11,0x64,0x9D,\n    0xDC,0xA4,0x48,0x8B,0x24,0xEE,0xD2,0x92,0x77,0x68,0xE6,0xA3,0x16,0xEE,0xDD,0xC4,\n    0xA5,0x45,0x3B,0xB4,0x52,0xE0,0x99,0xA9,0x60,0x9E,0xEA,0x54,0x20,0x52,0x45,0x5D,\n    0x67,0xDA,0x29,0x3B,0xB4,0x52,0x77,0x68,0xAE,0x1A,0xC9,0x4A,0xE6,0x1D,0xA5,0x24,\n    0xEE,0xD1,0x49,0xDD,0xA2,0x93,0xBB,0x45,0x27,0x76,0x8A,0x4E,0xED,0x14,0x9D,0xDA,\n    0x29,0x3B,0xB4,0x52,0x77,0x68,0xA5,0x7B,0x7B,0x7A,0x4A,0x48,0x8B,0x25,0x39,0x87,\n    0x5D,0xB3,0x24,0xFA,0x46,0x39,0x92,0x73,0x14,0x2A,0xCE,0x61,0x95,0x67,0x30,0xCA,\n    0xB3,0xE4,0x83,0x2D,0x40,0x90,0x03,0x20,0x22,0x7F,0x62,0x96,0x46,0xE4,0x14,0x10,\n    0xB2,0x55,0xAA,0x6C,0x51,0x15,0x00,0x5A,0xA6,0xC5,0x1D,0x98,0xB5,0x53,0x62,0x8E,\n    0xCC,0xD6,0xD3,0x0E,0xAE,0xD5,0x4D,0x91,0xD9,0x9A,0xA9,0xB2,0x3B,0x2D,0x53,0x91,\n    0x47,0x66,0x2D,0x54,0xD9,0x1D,0x99,0xAA,0x98,0x75,0x76,0xAA,0x61,0xD5,0x6A,0x9C,\n    0x14,0x76,0x60,0xD3,0xD5,0xD9,0x1D,0x96,0xA9,0x86,0x55,0xAA,0x61,0x95,0x6A,0x9D,\n    0x70,0x8E,0xCC,0x08,0xE2,0x38,0xC9,0x30,0x2B,0xF8,0xD4,0x21,0x5D,0xB2,0xF3,0x1C,\n    0xD3,0xB3,0x2F,0x31,0x32,0xA3,0xD1,0xE6,0x29,0xC3,0x2F,0x31,0x30,0xCB,0xCC,0x4C,\n    0x3F,0xE6,0x5A,0x61,0x99,0x99,0xE0,0x26,0x9D,0xBC,0x27,0xFF,0x72,0xDA,0x5E,0x14,\n    0xA9,0x3E,0x57,0x27,0xBA,0xEB,0xE7,0xDC,0xEE,0x9F,0xD1,0x31,0xB1,0x77,0x1C,0xEE,\n    0x2E,0xE1,0xE2,0xEE,0x1E,0xDF,0x70,0xF6,0xBB,0x67,0xB7,0xC5,0x7B,0x5D,0xB3,0xDA,\n    0x6D,0x9E,0xD3,0x6A,0xFA,0xDE,0xB9,0xD8,0xD9,0x3A,0x1A,0x2B,0xA7,0x89,0x53,0x16,\n    0xCD,0xE8,0x1E,0xB9,0xC9,0xA3,0xC9,0xC2,0x5D,0x00,0xBB,0x59,0xAA,0x2E,0xC9,0xE0,\n    0x26,0xA9,0x35,0x29,0x7C,0x7A,0xD8,0x14,0x9B,0xD5,0x94,0xBB,0xC6,0xE9,0x4D,0xE1,\n    0xB4,0xA3,0x6E,0xFB,0x76,0xB3,0x8B,0x3C,0x1D,0xED,0x9B,0x67,0x5A,0x89,0x17,0x87,\n    0x34,0x5A,0x27,0x1B,0xA6,0x0C,0x6A,0x3C,0xB5,0x4C,0x29,0xD9,0x68,0x55,0xAB,0xBC,\n    0xBB,0x78,0xE0,0xFC,0x0F,0x0F,0x2A,0x64,0x15,0x2A,0x78,0xC0,0x2E,0xF2,0xB0,0xCB,\n    0x77,0xCC,0x71,0x0A,0xE8,0xE8,0x4F,0xCC,0x16,0x2B,0xA6,0x15,0xEC,0x26,0x15,0xEC,\n    0x26,0x15,0xEC,0x26,0x15,0xEC,0x26,0x15,0xEC,0x26,0x15,0xEC,0x26,0x15,0xEC,0x26,\n    0x15,0xEC,0x26,0x15,0xEC,0x26,0x15,0xEC,0x26,0x68,0x66,0xC3,0xFC,0xF8,0x7C,0x9E,\n    0x7F,0xBE,0x7A,0x2E,0x4B,0x91,0xDC,0xD1,0xE9,0xD2,0xD1,0x64,0xFC,0xBE,0x9B,0x65,\n    0xA8,0xE7,0xF6,0x13,0xE7,0x5E,0x92,0x85,0xDF,0x82,0x8D,0x2A,0x61,0x6A,0x84,0xC2,\n    0xD5,0x09,0x86,0x9B,0xE3,0x26,0x16,0xA8,0x4C,0x2D,0x50,0x98,0x51,0xF1,0xD3,0x0B,\n    0x54,0x26,0x1C,0xF5,0x09,0x87,0x39,0xCF,0x26,0x16,0xA8,0x4C,0x38,0x14,0x26,0x1A,\n    0x5B,0x49,0x85,0x14,0x26,0x1A,0x6C,0x64,0xC3,0xA0,0xC4,0x4C,0xF2,0xAF,0x9C,0xED,\n    0x54,0xE1,0xCC,0xC9,0x30,0xE6,0x74,0x69,0x86,0xAF,0x9B,0x4C,0x34,0x7A,0xB4,0xC3,\n    0x57,0xA0,0x4C,0x35,0x5A,0xB4,0xC3,0x9A,0xD3,0x26,0x1C,0xBC,0x93,0x0D,0x66,0xB1,\n    0x30,0xFA,0xF8,0x89,0x87,0xC1,0xD1,0x26,0x1C,0x2F,0x56,0x98,0x70,0x78,0x49,0x86,\n    0x93,0x82,0x98,0x70,0xB5,0xA9,0x84,0xBE,0x4A,0x61,0xA9,0xE8,0x53,0x0D,0x6E,0xB1,\n    0x30,0xD6,0xF4,0x49,0x86,0xBA,0xD2,0x61,0xAA,0xE1,0x26,0x16,0xBA,0x44,0xC3,0xDE,\n    0x5A,0x4C,0x25,0x24,0xC3,0x23,0x21,0x30,0xE9,0x3B,0x34,0xC3,0xA6,0xD7,0x26,0x1A,\n    0xCB,0x49,0x86,0x46,0x42,0x61,0x6B,0x21,0x30,0xC8,0xC8,0x4C,0x3A,0x9D,0x7A,0x61,\n    0xAF,0xAB,0xD4,0xCD,0x3B,0x39,0xFE,0xA1,0x30,0xA2,0xD2,0x61,0x45,0x54,0xC2,0xAD,\n    0x09,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,\n    0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,0x5A,0xC9,0x85,\n    0x5A,0xC9,0x85,0x5E,0xA1,0x30,0xAD,0x59,0x30,0xAD,0x42,0x61,0xB1,0xD8,0xA6,0x14,\n    0x50,0x98,0x75,0x94,0x79,0x89,0xA7,0x67,0xC8,0xB3,0x32,0x99,0x86,0xCE,0xCA,0x61,\n    0xBF,0xB2,0x98,0x6F,0xEC,0xA6,0x1F,0x7A,0xCA,0x61,0xBF,0xB2,0x98,0x6F,0xEC,0xA6,\n    0x16,0x76,0x5E,0x0A,0x69,0xD9,0xB3,0xEC,0x55,0x4C,0x6A,0x9B,0x9E,0xB5,0x4F,0xB9,\n    0x9B,0xE7,0xCD,0xA7,0x9B,0xDC,0xF9,0x03,0x5F,0x1A,0xFE,0x7B,0x25,0xC9,0xFE,0x8E,\n    0x78,0x17,0xE4,0xCD,0xAE,0x66,0x57,0x52,0x41,0xAB,0x09,0xE6,0xA0,0xF0,0x8F,0xBF,\n    0xAD,0x5A,0x23,0xAA,0x32,0x67,0x36,0x72,0xC7,0x26,0x62,0xCC,0x51,0x66,0x59,0x1C,\n    0x01,0x62,0x58,0x95,0xE3,0x50,0x2A,0x09,0x0C,0xF9,0x9D,0x3D,0x13,0xFC,0x2F,0x8D,\n    0x74,0xD4,0x9A,0x63,0x4C,0x57,0x17,0x67,0x8E,0x4E,0x27,0x19,0x52,0x79,0x3C,0x9E,\n    0x4F,0x2D,0x49,0xE4,0xE2,0x71,0xB3,0x9C,0x21,0x34,0x86,0xC4,0x4D,0x26,0x93,0x49,\n    0xA4,0xD3,0xFB,0x26,0x15,0x65,0x59,0x87,0x3F,0x23,0xD2,0x26,0x5D,0xA9,0x85,0xC1,\n    0xDA,0x9D,0x91,0x6E,0x65,0x0D,0xB4,0xC9,0x19,0x13,0xA2,0x2B,0x8B,0x63,0x1A,0x50,\n    0x38,0xC1,0xA7,0x13,0x8A,0xF3,0xEA,0x27,0x14,0x0C,0x29,0xA7,0x1C,0xD1,0x9B,0x91,\n    0x30,0x98,0x4C,0x26,0x13,0x0A,0xD3,0x08,0x4B,0x25,0x92,0xCB,0x43,0x95,0x30,0x66,\n    0x0C,0x86,0xD8,0x55,0x15,0x45,0x51,0x54,0x48,0x48,0x48,0x5E,0x12,0x12,0x12,0x12,\n    0x1D,0xA1,0x92,0x32,0x25,0xF1,0x80,0x2F,0x0B,0x53,0x1A,0x62,0x86,0xB2,0x97,0xB0,\n    0xFF,0x1B,0xA5,0x27,0xB6,0x68,0xCC,0xB9,0x5E,0x65,0x8C,0x31,0xDC,0x1D,0xB1,0x70,\n    0x60,0x8C,0xA9,0xC3,0x92,0xCC,0x11,0x93,0x2C,0x0C,0x49,0x52,0x42,0xF8,0xF3,0x73,\n    0x0A,0x9C,0xA1,0x39,0x35,0x58,0xCD,0xF4,0x1A,0x12,0xE8,0xC4,0x16,0x79,0x65,0x4E,\n    0x69,0x06,0x86,0xF1,0x5E,0xA0,0xDA,0xB9,0xA8,0x28,0x16,0x65,0x99,0x7A,0x61,0x8B,\n    0x73,0x63,0x25,0x9D,0xC9,0x64,0x76,0xE5,0x61,0x70,0x56,0x15,0x06,0x14,0x86,0x2C,\n    0xF7,0x8D,0xCC,0xFC,0x0F,0xB4,0xC0,0x1C,0xCC,0xC5,0x08,0x6D,0x3C,0x94,0x62,0xCD,\n    0x60,0x5F,0xB5,0xE5,0x21,0x9D,0x33,0x85,0x2E,0xF4,0x99,0xB5,0x92,0x94,0x94,0x41,\n    0xA1,0x53,0x4C,0xA9,0x88,0x16,0x89,0x61,0x28,0xB4,0x52,0xA3,0x62,0xD1,0x4B,0x1F,\n    0x45,0xA2,0x96,0x06,0x8B,0x45,0x2C,0x7D,0x16,0x8A,0x56,0xB4,0x5A,0x29,0x55,0x72,\n    0x8D,0x14,0xAA,0x6F,0x19,0x87,0x1D,0xA6,0x4C,0x38,0x76,0xD3,0x0E,0x1D,0xB4,0xC3,\n    0x8F,0xB6,0x98,0x5B,0xD5,0x26,0x1C,0x3B,0x69,0x85,0xBC,0x44,0xC3,0x8F,0xC4,0x4C,\n    0x3F,0xCF,0x2E,0x98,0x70,0xED,0xA6,0x19,0x36,0xD3,0x0C,0x9D,0x12,0x61,0xA5,0xB6,\n    0x98,0x73,0x16,0xD3,0x0B,0x79,0x49,0x87,0x4F,0x9F,0x4C,0x31,0x3F,0xD2,0x61,0x83,\n    0x52,0x98,0x7B,0x5C,0x09,0x87,0xD4,0x92,0x61,0x83,0x02,0x61,0xD2,0xE0,0x4C,0x35,\n    0x3A,0x74,0xC3,0xD6,0x60,0x4C,0x33,0x64,0x98,0x60,0xCC,0x4C,0x3A,0x3D,0x82,0x61,\n    0xEC,0xF4,0x89,0x87,0xC0,0xD8,0x26,0x12,0xC0,0x98,0x60,0xEF,0x53,0x0F,0x87,0x81,\n    0x30,0xC1,0x04,0xC2,0x1A,0xF4,0xC3,0xAA,0xE9,0x53,0x0E,0x77,0xED,0xA6,0x1A,0x78,\n    0x26,0x1D,0x5E,0x04,0xC3,0xEE,0xEA,0x13,0x0F,0x89,0xCD,0xF6,0xD3,0x4E,0xCB,0xB0,\n    0x4C,0x2E,0xC1,0x30,0xAB,0x04,0xC2,0xEC,0x13,0x0B,0xB0,0x4C,0x2E,0xC1,0x30,0xD4,\n    0x41,0x30,0x86,0xB9,0x30,0xE8,0x20,0x98,0x5D,0x82,0x61,0x76,0x09,0x85,0xD8,0x26,\n    0x17,0x60,0x98,0x5D,0x82,0x61,0x76,0x09,0x86,0x25,0x74,0xC3,0x67,0x79,0x30,0xD9,\n    0x6D,0x13,0x0D,0xE7,0x5C,0x98,0x7D,0x6D,0xE2,0x61,0xD5,0x5E,0x4C,0x2F,0x7E,0x04,\n    0xC3,0xF1,0x76,0x49,0x87,0xDA,0xC7,0x4C,0x3B,0x0D,0xE2,0x61,0xB7,0xBC,0x99,0xB1,\n    0xD0,0x93,0xF5,0x78,0xAB,0x42,0x14,0xEE,0xD3,0x0A,0x71,0x93,0x0A,0x77,0x29,0x86,\n    0xCE,0x94,0xC3,0x75,0x4A,0x61,0x4F,0x5E,0x98,0x63,0xD2,0x98,0x7E,0x1A,0x53,0x0C,\n    0x6F,0xD0,0x98,0x53,0x8E,0x98,0x7F,0x0D,0xEA,0x61,0xD8,0x52,0x98,0x53,0xFA,0x53,\n    0x0E,0xD7,0xF5,0xA6,0x1B,0xBA,0x53,0x0E,0xC6,0x94,0xC3,0x77,0x71,0x30,0xA6,0x94,\n    0xC3,0xF6,0xF0,0x13,0x0C,0x7A,0x53,0x0D,0xF7,0x05,0x30,0xA6,0xE2,0x61,0x4E,0xF9,\n    0x30,0xED,0x29,0x4C,0x2E,0x52,0x98,0x53,0x42,0x61,0xC1,0xED,0x93,0x0B,0x34,0xA6,\n    0x17,0x29,0x4C,0x28,0xA5,0x30,0xED,0xF2,0x53,0x0A,0x29,0x4C,0x2E,0x52,0x98,0x5C,\n    0xA5,0x30,0xEE,0x72,0x93,0x0B,0x94,0xA6,0x17,0x29,0x4C,0x2E,0x52,0x98,0x5C,0xA5,\n    0x30,0xEE,0xA9,0x4C,0x2D,0xD2,0x98,0x5C,0xA5,0x30,0xB9,0x4A,0x61,0x72,0x9F,0x77,\n    0x34,0xED,0x65,0x73,0x58,0x53,0xDB,0xEF,0x16,0x44,0xF9,0x53,0x77,0x1F,0xD7,0x0B,\n    0xB4,0x74,0x54,0xE0,0x59,0x5B,0xBD,0xF5,0x4D,0xEF,0xEC,0x18,0x4D,0xE0,0xCB,0xBF,\n    0xEE,0xC6,0x19,0x30,0xAD,0x0E,0xDA,0xD0,0xED,0x6D,0x0E,0xD2,0xD6,0x15,0x15,0xB2,\n    0xCB,0x66,0xAF,0x4C,0x9D,0xAB,0xD3,0x27,0x6A,0xEF,0x4B,0xB6,0x06,0x4D,0xF2,0x98,\n    0x22,0xFB,0x03,0x33,0xEF,0x50,0x65,0xB2,0x2E,0x20,0x5E,0xA7,0x70,0xB8,0xD6,0xEF,\n    0xBF,0xE2,0xC6,0xF7,0x3A,0x79,0xC5,0xD3,0x53,0x23,0x9D,0x42,0x9E,0x3F,0x11,0x20,\n    0xFC,0xA4,0x9C,0x90,0xD6,0x42,0x32,0x42,0x31,0xDE,0x45,0xD5,0x4A,0x47,0x4C,0x1B,\n    0xA3,0x3B,0xC6,0x4D,0xBF,0x5D,0xFF,0x77,0xE0,0xF0,0x68,0xB2,0xF9,0xF4,0x2D,0xFE,\n    0xED,0xBE,0xBE,0xF1,0xB9,0x75,0x72,0xDD,0x31,0xAF,0x7B,0x7F,0x7D,0xB7,0xDF,0x64,\n    0xAE,0xDF,0xAA,0x8D,0x12,0x34,0x5A,0xDB,0xAB,0x5E,0xFF,0xB7,0xDA,0x8E,0x0D,0x18,\n    0xFC,0x1B,0xCC,0x75,0x6D,0x2A,0x9B,0xDA,0x4E,0x41,0x2F,0x3B,0x0C,0xA6,0x86,0xF8,\n    0xA4,0x3E,0xE5,0x7F,0x6B,0x85,0xF6,0xFB,0x38,0xF3,0xF2,0xFB,0x59,0x0B,0x19,0x1B,\n    0xBD,0x7A,0xB1,0x1A,0x7A,0x01,0xB1,0x23,0xE2,0xEE,0xEB,0xF0,0xF9,0x72,0xC0,0x37,\n    0x65,0xD9,0xBA,0x90,0xD4,0x9A,0x73,0x4A,0x7D,0x67,0x1E,0x7B,0x05,0xC9,0x72,0x67,\n    0x31,0x2A,0xC4,0xA7,0x21,0x0B,0x62,0x0C,0xD7,0xF3,0x2E,0x41,0xA2,0x33,0x7C,0x46,\n    0x22,0x3E,0xDD,0xF2,0xF9,0xE6,0x1B,0xBB,0xA7,0x2F,0xCF,0xB9,0x2D,0x93,0xA9,0xDD,\n    0x4E,0x51,0xFB,0x60,0x00,0x00,0x42,0x88,0xF0,0x40,0x10,0x83,0x72,0xE4,0x1B,0x4A,\n    0x5B,0x63,0x16,0x80,0xC0,0x9A,0x03,0x3C,0x41,0xAD,0xED,0x16,0x68,0xA8,0x19,0xAA,\n    0x0A,0x63,0x3C,0x7B,0xE6,0x30,0xAD,0x37,0xCF,0xF9,0x33,0x49,0xF0,0x5B,0x61,0xFA,\n    0x18,0x17,0xBA,0x1B,0xBC,0xF2,0x67,0x53,0x06,0x97,0x94,0xE5,0x53,0x16,0x90,0xEE,\n    0x09,0x40,0x81,0x6A,0x56,0xA5,0xDD,0x26,0x21,0x25,0xAD,0xED,0x54,0x90,0x91,0x00,\n    0x10,0x66,0xDD,0xC6,0x83,0x61,0xFF,0xA5,0x9B,0x33,0x67,0x90,0x78,0xBD,0x02,0xF0,\n    0x49,0x06,0x6C,0xC6,0x51,0x7E,0xC5,0x81,0xFA,0xE8,0x95,0x71,0x5A,0x7C,0xE3,0x36,\n    0x84,0x87,0x3D,0x99,0x42,0xAA,0x29,0xD0,0x63,0xF1,0x60,0x50,0x40,0xE7,0xBF,0xCA,\n    0x9C,0xEE,0xE6,0x27,0x20,0xA6,0x96,0x95,0xA4,0x35,0x50,0x13,0x25,0x55,0x55,0xC5,\n    0x32,0x06,0xA8,0x04,0xB3,0x15,0x00,0x55,0x32,0x50,0x10,0x29,0x51,0xA0,0x42,0x84,\n    0x01,0xD2,0x51,0x0C,0x80,0x0E,0x4A,0x4C,0x95,0x12,0x81,0x02,0x20,0xD2,0x00,0xC2,\n    0x58,0x9A,0x22,0x07,0xAE,0xC8,0x65,0x40,0xA5,0x08,0xD0,0x2D,0x29,0x92,0x99,0x03,\n    0x92,0x39,0x08,0x14,0x25,0x05,0x0A,0x54,0x48,0x4C,0x64,0xE4,0xD0,0x64,0x04,0xF3,\n    0x08,0x9F,0xDE,0xBE,0x23,0x4C,0x2A,0x1A,0x0A,0x50,0xDA,0xD4,0x91,0xD0,0x94,0xA4,\n    0x48,0xA4,0x34,0x4C,0x1C,0x96,0x81,0x01,0xA5,0x0A,0x10,0x5A,0x54,0xCC,0xC2,0x94,\n    0x29,0xD2,0x54,0xC8,0x74,0x96,0x09,0x0A,0x03,0x21,0xC9,0x17,0x24,0x12,0x82,0x24,\n    0x02,0x88,0x98,0x92,0x8C,0xCC,0x14,0xA1,0xDB,0x4C,0x23,0x43,0x4B,0x53,0x5C,0x69,\n    0x0A,0x51,0x0C,0xCC,0x4A,0x40,0xA1,0x1A,0x41,0x0A,0x40,0x28,0x10,0x2C,0xCC,0x24,\n    0x89,0xD4,0xCC,0xCB,0x22,0x00,0xA4,0x35,0xD3,0x24,0xA0,0xC0,0x92,0x22,0x8A,0x28,\n    0xAA,0xA2,0x08,0x33,0x44,0xC3,0x12,0x35,0xB5,0xD3,0x5D,0x1D,0x22,0x82,0x2D,0xD8,\n    0xE0,0x52,0x3A,0x4E,0x48,0xD3,0x9B,0x6D,0x9A,0x19,0x06,0xA4,0x85,0x08,0x50,0x4C,\n    0x50,0x25,0x34,0x85,0xBD,0x82,0x64,0xAD,0x50,0x8D,0x23,0x40,0x16,0x98,0x20,0x23,\n    0x92,0x0A,0x50,0x23,0xA4,0x88,0xEE,0x91,0x34,0x95,0x0D,0x21,0x57,0x27,0x58,0x76,\n    0x8A,0x02,0x95,0xA1,0x0A,0x4C,0xB4,0x84,0xA1,0xDD,0x39,0x31,0x3A,0xCE,0xB6,0x14,\n    0x56,0x99,0xA4,0x05,0x01,0x86,0xD9,0xA6,0x93,0xAB,0x69,0x66,0x90,0x86,0x15,0x5A,\n    0x66,0x52,0x45,0x40,0xD2,0xD2,0x2B,0x79,0x5C,0x44,0x4C,0x93,0xF4,0x25,0x57,0x7F,\n    0x76,0x09,0xAC,0x80,0xD3,0x41,0x49,0x11,0x14,0x06,0xE9,0x22,0x82,0x0C,0x82,0x96,\n    0x81,0x82,0xA8,0xA6,0x52,0x21,0x49,0x64,0x66,0x10,0xA1,0xCC,0xC1,0x4C,0x93,0x33,\n    0x00,0x4A,0x53,0x24,0x66,0x50,0xA0,0x50,0x0C,0x91,0x71,0x29,0x0C,0xB1,0x13,0x0E,\n    0x5A,0x77,0xF6,0xDC,0xE0,0x9A,0x68,0x5A,0x60,0xB9,0x0D,0x2D,0x2B,0x5B,0xA1,0x4A,\n    0x00,0x32,0x10,0xA4,0x5A,0x16,0x81,0x0A,0x1A,0x11,0x41,0x38,0x94,0x4F,0x83,0x2E,\n    0xB0,0xA2,0x72,0x23,0x5D,0xA4,0x68,0x1A,0x42,0x82,0x86,0x82,0xD5,0x06,0x1C,0x20,\n    0xA0,0xA0,0x77,0xA5,0xD2,0x38,0x21,0x35,0x9A,0x0A,0x42,0x21,0x22,0x41,0x4A,0x15,\n    0x89,0x1B,0x10,0x70,0xC5,0x55,0x0A,0x1A,0x01,0xA4,0xAA,0x02,0x20,0x10,0x6D,0x95,\n    0x01,0x39,0x9E,0x2C,0xE5,0x1E,0x2C,0x8E,0xB4,0xF2,0x7C,0xCF,0x27,0xC7,0xF7,0x39,\n    0xD3,0xFC,0xDD,0x43,0x85,0x43,0x8A,0x02,0x90,0x54,0xDE,0x81,0x50,0x72,0x2A,0x90,\n    0xA1,0x29,0x68,0x1A,0x0A,0x04,0x43,0x9A,0x40,0xAE,0x3C,0x93,0x9C,0x93,0xCC,0xF3,\n    0xDD,0x0E,0x16,0x50,0x13,0x69,0x55,0xD7,0x7F,0x0D,0x21,0x56,0x8D,0xE0,0xC7,0x79,\n    0xDC,0xEB,0xA8,0x71,0xF1,0xEF,0x70,0x5B,0x1B,0x42,0x1B,0xF2,0xA5,0x02,0xD2,0x8A,\n    0x51,0x89,0x8E,0xFB,0xBE,0xF3,0x50,0x00,0x00,0x35,0xDB,0x39,0xC4,0x44,0x0A,0x87,\n    0x2D,0x03,0x86,0x60,0x19,0x24,0x91,0x2A,0xD0,0x10,0x14,0xA0,0x28,0x23,0x90,0x28,\n    0x29,0x92,0x50,0x14,0x34,0x2C,0x4B,0x4B,0x8A,0xA6,0x46,0x49,0x2A,0xE8,0xC0,0x22,\n    0x81,0x82,0x3A,0x98,0xAB,0x82,0xD9,0x31,0x0E,0x4A,0x01,0x40,0x28,0x69,0x0A,0xA8,\n    0x64,0x88,0x00,0x50,0x28,0xC8,0x14,0x02,0x50,0x0A,0x14,0x06,0x38,0x72,0x7C,0x1B,\n    0x1A,0xA8,0x8F,0x06,0xCA,0x82,0xAE,0xE1,0x1D,0x00,0x11,0xD2,0x05,0x5F,0x51,0x39,\n    0x1B,0x38,0xF0,0xBC,0x8E,0x3E,0x3E,0x1E,0x3E,0x37,0xAF,0x70,0x82,0x1C,0x81,0x21,\n    0x21,0xB8,0x6D,0xD2,0x64,0x1A,0x0C,0xB9,0x27,0x13,0x8F,0x13,0xBC,0xF1,0xE9,0xB2,\n    0xEE,0x29,0x5E,0x3F,0xE3,0xE0,0xE6,0x36,0x77,0x54,0x70,0xB8,0xF0,0xBC,0x2F,0xDA,\n    0xE6,0x9B,0x9D,0xB7,0xF1,0xE5,0x4F,0xB1,0x29,0x84,0xA8,0x86,0x20,0xC8,0xF2,0xB9,\n    0x9A,0x98,0x58,0xA6,0x05,0xA7,0x0B,0x9B,0x9D,0xB8,0x5B,0x4E,0x2E,0x27,0x88,0xD1,\n    0x01,0x15,0x47,0x7E,0x44,0x1D,0xA5,0x41,0x78,0x20,0xD2,0x04,0x0C,0x9C,0x21,0xA1,\n    0xA2,0x91,0xA1,0x32,0xC2,0x88,0x33,0x32,0x9C,0xC1,0xC9,0x5A,0x41,0x29,0x01,0x28,\n    0x4C,0x54,0x1C,0x85,0x69,0x55,0x40,0xCC,0x44,0xA1,0x68,0x4C,0x8A,0x30,0x32,0x30,\n    0xC3,0x44,0x51,0x0C,0x34,0x5C,0x81,0x1D,0x03,0x48,0x45,0xA1,0x50,0xA1,0x4B,0x0C,\n    0x10,0x25,0x95,0xD5,0xCB,0x97,0x2C,0x48,0x03,0x8B,0x74,0xE2,0x28,0xC0,0x02,0x4C,\n    0x49,0x24,0xC5,0x90,0x97,0x1E,0xBC,0xDD,0x46,0x12,0x15,0x10,0x51,0x43,0x01,0x11,\n    0x88,0x87,0xC0,0x49,0x28,0x31,0x20,0xF7,0xC9,0x33,0xC9,0xB0,0x51,0x82,0xC3,0x03,\n    0x89,0x21,0x02,0x58,0x2C,0x50,0xB9,0xB5,0xE6,0xFF,0x8B,0xEB,0xAC,0x80,0x96,0xA6,\n    0x65,0xCD,0x4D,0x9C,0x17,0x83,0xAA,0xC8,0x49,0x2E,0xAE,0x0A,0xC5,0x8B,0x1A,0xEB,\n    0xAE,0x84,0xA5,0x18,0x61,0x7B,0xFB,0x93,0x36,0x00,0x92,0xB6,0x09,0x5C,0xC8,0xE3,\n    0x63,0x5E,0x3E,0x19,0x9C,0xDE,0xB7,0x5D,0x74,0xCF,0x03,0x0C,0x05,0x86,0x08,0xD0,\n    0xC4,0xD1,0x6B,0xC2,0xE5,0xD4,0xA1,0x69,0xA7,0x0E,0x14,0xF7,0xC0,0x4B,0x33,0x12,\n    0xC6,0x46,0x38,0x25,0x91,0x89,0x11,0x10,0x42,0x48,0x50,0x41,0x54,0xE7,0x3C,0x24,\n    0xBE,0x1B,0x01,0x46,0x04,0x98,0x8E,0x65,0xD3,0x42,0x10,0xBA,0x00,0x92,0x5C,0xBC,\n    0xDB,0x9D,0x51,0x45,0x0D,0xAB,0xA7,0x1C,0x72,0xF2,0xED,0x86,0x18,0x61,0x82,0x71,\n    0x4C,0x8B,0x10,0xB6,0xD0,0xC4,0x06,0x40,0x24,0x54,0xD1,0x06,0xB1,0xC4,0x44,0x90,\n    0x85,0x28,0x10,0x08,0x28,0x03,0x19,0x1A,0x32,0x40,0x80,0x49,0x3F,0x32,0x38,0xB1,\n    0x52,0x49,0x26,0x4B,0x23,0x23,0xA0,0xC6,0x1F,0xE6,0xE3,0x8E,0x39,0xAB,0x26,0x18,\n    0xD5,0xE2,0xE4,0x5F,0xB7,0xB8,0x0D,0xCE,0xE7,0x73,0xBD,0xA8,0x00,0x3C,0xFF,0x93,\n    0xC1,0x40,0x0D,0xA4,0x50,0x0A,0x77,0x38,0xF1,0x6F,0x3A,0xA1,0xA4,0x21,0xA4,0xE4,\n    0xAA,0xD2,0xA5,0x2B,0x42,0x52,0xD0,0x05,0x2B,0x11,0xAB,0x8E,0xDC,0xA7,0x23,0x79,\n    0xE2,0x79,0x1C,0xE7,0x8B,0x84,0xFA,0x3C,0xBF,0x86,0xF2,0xBF,0x73,0x64,0x47,0xE7,\n    0xF0,0x67,0x8C,0xE5,0x31,0xAA,0x90,0x1C,0x41,0xB8,0xB7,0x36,0x43,0x93,0x2E,0xB1,\n    0x55,0x01,0x10,0x54,0x09,0x16,0x0C,0x58,0xBB,0x9C,0x3E,0x1E,0x24,0x82,0x0A,0x99,\n    0x1C,0x48,0x8F,0x3C,0x64,0x50,0x52,0x41,0x07,0x64,0x75,0xD9,0x9D,0x9E,0x76,0x6A,\n    0x6A,0xEA,0xFE,0x8E,0xCD,0xA8,0x74,0x2F,0x15,0x89,0xB9,0xDC,0xEE,0x79,0x5D,0x57,\n    0x91,0xD0,0xF1,0x4D,0xA1,0xE1,0x15,0x89,0x03,0x79,0x8D,0x1B,0x79,0xDE,0x31,0x12,\n    0x01,0x0B,0xB4,0xED,0x3B,0x5E,0xD6,0xCA,0xC5,0x8C,0xEE,0x66,0xEB,0x68,0x20,0xBD,\n    0xEF,0x7B,0x13,0xAE,0x77,0x32,0xB9,0x72,0x0C,0xBC,0x13,0xA7,0x1C,0x88,0x3A,0xFD,\n    0x68,0x50,0x40,0xE7,0x87,0x64,0xC3,0x0C,0x7F,0xAB,0x03,0x0C,0x70,0x73,0x89,0xD0,\n    0xE9,0xC7,0x59,0xC1,0x81,0x5E,0xE6,0xE6,0xBD,0x8B,0x14,0xB1,0x16,0xC1,0x4D,0xD1,\n    0xA4,0xDB,0xB4,0x86,0x02,0x2A,0x22,0x08,0x2A,0x6B,0x56,0xA0,0xC9,0xFF,0x2B,0x86,\n    0x64,0x44,0xC3,0x0C,0x30,0x24,0xC4,0x73,0xBA,0xAA,0xE8,0x4A,0x4A,0x48,0x31,0x58,\n    0x8E,0xCC,0x78,0x2E,0xBC,0x28,0x26,0xF0,0x53,0xA7,0x32,0x38,0xBD,0x5B,0x27,0x61,\n    0x95,0x77,0x0E,0xA4,0x73,0xC2,0x4D,0xF4,0xEA,0x69,0xE1,0x7A,0x97,0x57,0x2E,0x76,\n    0x9D,0x66,0x4C,0x31,0xAE,0x4B,0x23,0x5D,0x75,0x83,0x1D,0xA1,0x40,0xC5,0xF2,0x59,\n    0x0F,0xB6,0xD0,0x4A,0xBF,0xB8,0x7F,0xF5,0x95,0x8D,0xD2,0x70,0xDD,0xE0,0x30,0x85,\n    0x06,0x3C,0x5C,0x92,0x4A,0xEB,0x6B,0xAC,0xA5,0x7C,0x01,0x0E,0xA0,0x00,0x00,0x3B,\n    0xA4,0x94,0xE5,0x38,0x95,0x83,0xD7,0xBF,0xE6,0xF0,0x7D,0xCC,0xA4,0x25,0x9F,0x3E,\n    0x1E,0x06,0x7F,0x8F,0x79,0x9E,0xE1,0xB8,0xE1,0x56,0x6B,0x2A,0xDF,0x3C,0xC6,0x7E,\n    0xD3,0xD6,0x33,0xBA,0xB7,0xBB,0xDD,0xDC,0xAF,0xED,0xF6,0xF5,0x4C,0x7A,0x76,0x76,\n    0x4C,0x99,0x52,0xB2,0xCC,0x6A,0xD8,0xB5,0x89,0xAC,0xC2,0x3E,0xB1,0x62,0xC5,0x8B,\n    0x0D,0x02,0xF5,0xF3,0xB4,0xF2,0xAB,0xFA,0x7E,0x6D,0x8D,0xBD,0xC5,0x3D,0x95,0x87,\n    0x45,0x94,0x4B,0xE3,0x27,0xC6,0x0C,0x18,0x30,0x5E,0xBF,0xBC,0xBD,0x7E,0x7A,0xFF,\n    0xF3,0xAF,0xC5,0xAF,0xC2,0x34,0x59,0x89,0x58,0xB2,0x9A,0xBA,0x99,0xA2,0xE5,0xCB,\n    0x97,0x2D,0x66,0xB5,0x6B,0x35,0xAB,0x56,0xDC,0xBF,0x46,0xC6,0xEE,0x74,0x95,0xF7,\n    0xEE,0x77,0xF3,0x6D,0x1C,0xF7,0xE8,0xD5,0xE1,0xAD,0x34,0x75,0x7D,0x56,0x97,0xB6,\n    0x97,0xC6,0x7B,0xFF,0x5F,0x6E,0xAE,0x0A,0x12,0x23,0x4F,0x9D,0x69,0x4F,0xA9,0xE5,\n    0xE1,0x64,0xB6,0x9D,0xA6,0xD2,0x9B,0x5D,0x2D,0x54,0xC4,0x1D,0x1C,0xDE,0x41,0xEF,\n    0x89,0x61,0x5D,0xEF,0xEE,0x22,0xA3,0x61,0xE1,0xD0,0x81,0x00,0x21,0x02,0x11,0x69,\n    0x5B,0x8F,0x61,0x10,0xD5,0xFF,0x1D,0x65,0x2C,0xEA,0x08,0x40,0x22,0xF4,0x94,0x00,\n    0x80,0x42,0x38,0x7D,0x9C,0x6E,0x0E,0xE2,0x3A,0x47,0x7B,0x1F,0x7C,0x63,0x36,0xD6,\n    0x6E,0xFB,0xC1,0x9C,0xCF,0xC9,0xE2,0xBB,0xEB,0xE7,0xB3,0x39,0xDE,0x4F,0x19,0xBB,\n    0x4E,0x97,0x47,0xC9,0xC0,0x08,0x04,0x00,0x1E,0x42,0x41,0x00,0x10,0xAE,0xD1,0x9B,\n    0xAB,0xCF,0x37,0x9A,0xD7,0x65,0x96,0xA5,0xB6,0xB6,0x93,0x80,0xB7,0xC7,0x3F,0x4F,\n    0xD3,0xDF,0x44,0x20,0x40,0x81,0x18,0x74,0xA0,0x42,0x10,0x89,0xAD,0x34,0x43,0x37,\n    0x1E,0x95,0x05,0x2D,0xDE,0xF4,0xDB,0x17,0x89,0x6C,0xA2,0x8A,0x28,0xA2,0x8A,0x20,\n    0x0C,0xDD,0x22,0xA4,0x02,0x04,0x0E,0xB7,0xCC,0xE3,0xC6,0x0B,0x80,0xF1,0xDA,0x86,\n    0x86,0xDB,0x4B,0x49,0xE1,0xF2,0x38,0x5D,0xA4,0x5E,0x22,0xFD,0x1F,0x63,0x92,0x59,\n    0xBB,0xCA,0xC0,0xE9,0x3A,0xCC,0x50,0x81,0x00,0x12,0x2C,0x9A,0xC7,0x96,0xBC,0x1A,\n    0xC4,0x8E,0x30,0x20,0x82,0x90,0x6E,0xAF,0xD8,0x39,0x73,0x18,0xBB,0xAE,0xA6,0x04,\n    0x18,0x36,0x68,0xE9,0xF2,0x30,0x20,0xF7,0x4A,0x46,0x64,0xC4,0xD9,0xCA,0xAF,0x31,\n    0x87,0x9B,0xEC,0x79,0x9F,0x0D,0x9A,0xCC,0xE1,0xBF,0x31,0x93,0x15,0x4C,0x6C,0x4C,\n    0xED,0xB4,0xD8,0xBD,0x19,0xEE,0x65,0xA1,0x55,0x52,0x6B,0xDD,0xFD,0xC7,0xC4,0x59,\n    0x58,0xDB,0x6A,0x3B,0x0E,0x9C,0xC8,0xC5,0x62,0x62,0x6F,0x6F,0x60,0xEF,0xAA,0xB7,\n    0x6E,0x78,0x9D,0xDF,0x83,0xA2,0x5A,0x1A,0x1C,0x32,0x59,0x14,0xC5,0x32,0x63,0x9E,\n    0x21,0x6D,0x6A,0x2F,0xEF,0xDC,0x77,0x57,0x1C,0x73,0xA5,0xD2,0x74,0xE3,0x91,0xAB,\n    0x73,0x60,0x9C,0xD9,0x63,0x84,0x16,0x39,0x3D,0xD3,0xE6,0x21,0x49,0x24,0x95,0xBB,\n    0xED,0x75,0x95,0x27,0x2C,0x9A,0x1E,0xC5,0xF7,0x90,0x41,0x9A,0xF6,0x6E,0x7A,0x38,\n    0x6E,0xCF,0x17,0xE5,0xB2,0xB1,0x6E,0x7B,0x1A,0x9B,0x68,0xD9,0x65,0x2A,0x4D,0xF6,\n    0xA3,0x3C,0x7A,0xF0,0xA0,0xCC,0xD3,0xA7,0x46,0x62,0xF5,0xB2,0xA4,0xB3,0x9D,0x6E,\n    0xAF,0x73,0x0A,0x0C,0xC8,0x2C,0x26,0x4C,0x70,0x63,0x36,0x4C,0x64,0x3A,0x4F,0x85,\n    0xDD,0x39,0x10,0x61,0xB6,0xAE,0x9C,0xEC,0xAD,0xB5,0x17,0x4B,0x84,0xA9,0x34,0x28,\n    0xE6,0xE4,0xE4,0xDD,0xCF,0x9A,0x59,0xAE,0x92,0xEC,0xF4,0x5A,0x19,0x9B,0xD7,0x26,\n    0x14,0x71,0x71,0x6D,0xB7,0x9A,0xF1,0x1F,0x91,0xA2,0xD0,0xD0,0xB9,0xC8,0xC9,0x8E,\n    0x41,0xC7,0x3D,0x57,0x97,0x85,0x03,0x8E,0x79,0x76,0x4C,0x30,0xC7,0xAB,0xF5,0x5E,\n    0x4F,0xE3,0x65,0x49,0x27,0x65,0xC7,0xC7,0xC7,0x99,0xDB,0x52,0xA2,0x86,0x3A,0x5B,\n    0x9D,0x39,0xC0,0x82,0x08,0x53,0xF4,0x92,0x49,0x24,0x92,0x6E,0x74,0xE3,0x0C,0x71,\n    0xFA,0xEF,0x9B,0x85,0x06,0x0C,0x16,0xA5,0x03,0x97,0x2E,0x71,0x4E,0x1C,0xB9,0x72,\n    0xC1,0x8B,0x17,0x73,0xB8,0xD9,0x81,0x07,0x0C,0x68,0x30,0x72,0xDC,0xDF,0x40,0xB1,\n    0xC7,0xFE,0xFE,0x0F,0x9B,0x45,0xA1,0x99,0x99,0x9A,0xCD,0x6F,0xDF,0xFC,0x1C,0x96,\n    0x56,0x2C,0x72,0x5C,0xBB,0xA7,0x38,0x10,0x5A,0x08,0x5D,0xD7,0x46,0x95,0x12,0x40,\n    0xF2,0xE9,0xCE,0x38,0x20,0xCF,0x9F,0x6E,0x2A,0x54,0x6A,0x51,0x46,0xB7,0xF2,0x1F,\n    0x8F,0x4A,0x89,0x24,0x95,0x7F,0x31,0x0A,0x08,0x20,0x8F,0x3C,0xE9,0xC7,0x1C,0x74,\n    0xC9,0x86,0x18,0x6F,0x0E,0xE9,0xCC,0xE0,0x82,0x16,0x5D,0xE4,0x28,0x20,0x82,0x2D,\n    0xD7,0x85,0x04,0x10,0x40,0xC9,0x86,0x18,0x6F,0x1E,0xE9,0xCB,0x41,0x06,0x39,0x32,\n    0xC3,0x06,0x18,0xE8,0xDD,0x96,0xF1,0xCE,0xF7,0x7F,0x2E,0xFB,0x21,0x5A,0x15,0xEE,\n    0x33,0x16,0xEE,0xE8,0x01,0x07,0x16,0xBB,0x1A,0xFC,0xBA,0xAF,0x4E,0xAA,0x5B,0x22,\n    0xC9,0xCD,0x77,0x5D,0x58,0x08,0x42,0x11,0x93,0xD6,0x4B,0xFB,0xB0,0xCA,0x08,0x04,\n    0x21,0x07,0xD8,0xF7,0xFF,0x5D,0x90,0x21,0x23,0xB5,0x3A,0xA7,0x84,0xEE,0x3B,0xEE,\n    0xCC,0x85,0x09,0x78,0x5E,0xF3,0xBC,0x72,0x21,0x41,0xDB,0x8C,0x5A,0xD6,0xB5,0xBA,\n    0xF6,0x56,0x3B,0x8C,0xEE,0x60,0xC9,0x8B,0xDE,0xF7,0xBD,0x1A,0x52,0xA2,0xE7,0xB4,\n    0xB9,0xED,0x6E,0x9C,0xD1,0x8E,0xDE,0x1D,0x39,0xB8,0xA5,0x6B,0x51,0x4B,0x2B,0x36,\n    0x29,0x2A,0x58,0x56,0x00,0xB0,0xB4,0x99,0x24,0x08,0x03,0x14,0x76,0xF6,0x85,0x79,\n    0xC3,0x28,0x2D,0x6B,0x1A,0xE5,0x7F,0x0D,0x75,0x72,0xF6,0x28,0xDC,0xE9,0xCC,0xD2,\n    0x71,0xCD,0xFB,0xDB,0xCC,0xCA,0x82,0xB4,0xA3,0x1C,0x76,0xEF,0x3C,0x54,0xAD,0x0B,\n    0x96,0x37,0xE9,0x99,0x0A,0x08,0x83,0x5D,0x20,0xE2,0xF1,0x74,0xA8,0x93,0x86,0xD2,\n    0x4A,0xE5,0xDB,0x86,0x9B,0xB7,0x68,0xB4,0x37,0x2D,0x4E,0x3D,0x0D,0xF0,0xA0,0xE3,\n    0x26,0x4B,0x5A,0x8E,0x14,0xA8,0x83,0x3B,0xC1,0xDF,0x42,0x82,0x0E,0x47,0x19,0x31,\n    0x9B,0x8C,0x66,0xE9,0xC6,0x39,0xBB,0x0C,0x98,0x63,0x8E,0xDC,0xAE,0x9C,0xBC,0x10,\n    0xB3,0x74,0xE3,0xB9,0x7A,0xA6,0xB7,0xAF,0xD2,0xA6,0xA3,0x3B,0x69,0x09,0x8C,0x54,\n    0xF6,0x3B,0xB7,0x55,0x62,0x4A,0x4C,0xB2,0x32,0x31,0x58,0x98,0x99,0x43,0x26,0x18,\n    0xD9,0xF5,0x88,0x4A,0x09,0x93,0xB1,0xDE,0xDF,0x44,0xB3,0x5D,0x39,0xB2,0xB1,0x8A,\n    0xB1,0x9C,0x9D,0x0F,0x17,0x12,0xB0,0x20,0x73,0x55,0xDA,0x3A,0x72,0xC2,0x82,0xB7,\n    0x51,0x7F,0x19,0x4A,0x89,0x1C,0x86,0x13,0x0C,0x43,0x97,0xC7,0xBF,0x85,0x05,0xE4,\n    0x92,0x7A,0x70,0xA0,0x72,0xA0,0xDD,0x8B,0xA7,0x1C,0xBE,0xD2,0x4A,0xDB,0x9F,0x9F,\n    0xA7,0x75,0x72,0xE5,0x1A,0xF7,0xAE,0x98,0xAA,0xAD,0x68,0xD6,0x56,0xEA,0x18,0x76,\n    0x33,0x1C,0x71,0xCC,0xDD,0x38,0xE9,0xC8,0x83,0x74,0x28,0x1C,0xA7,0x2B,0xB3,0x85,\n    0x05,0xA4,0x83,0x77,0x52,0x14,0x17,0x82,0xA4,0x95,0xB6,0xCD,0x4A,0x95,0xD5,0x14,\n    0x55,0xFD,0x87,0xA7,0xDD,0xF4,0x6E,0xAF,0x63,0x5D,0x75,0xD0,0xCA,0x14,0x10,0x59,\n    0xCD,0x0A,0xE2,0xC6,0x64,0xC2,0x48,0x31,0xC8,0xC8,0x88,0x73,0x85,0xFC,0x55,0x2A,\n    0x28,0xCE,0x4B,0xF6,0x17,0x5A,0x54,0x92,0x5E,0x46,0x4C,0x71,0x39,0x9B,0x96,0x5C,\n    0x92,0xA4,0x81,0xC7,0xE9,0xE9,0xBB,0x3D,0xDC,0xD7,0x56,0x2C,0x59,0x64,0xB2,0x2C,\n    0xEE,0x3E,0x7C,0x30,0x95,0xA1,0x46,0x9A,0x51,0x46,0x5D,0x59,0x52,0x49,0x69,0x2D,\n    0x8D,0xFC,0x64,0xAB,0xC9,0x7D,0xB6,0xD3,0x32,0x3A,0x1B,0xEC,0xB6,0x2E,0x41,0x92,\n    0xD7,0x58,0xEB,0xB9,0xBB,0x28,0x5C,0x54,0x39,0x92,0xC9,0x64,0x33,0x1B,0xE3,0x74,\n    0xA9,0x52,0x41,0xA9,0x69,0xE2,0xCA,0x56,0xA9,0x49,0x27,0x0E,0x1B,0x42,0x84,0xA0,\n    0x82,0xDC,0x5D,0x5D,0xF2,0xA5,0x29,0x37,0x5E,0xF7,0x34,0xE1,0x97,0x6D,0x65,0x64,\n    0xAC,0x6D,0xAD,0x8E,0xDB,0x8E,0x54,0xA5,0x25,0xB6,0x93,0x45,0x7D,0xB6,0xEA,0xDD,\n    0x5D,0x2B,0x94,0x72,0x6C,0xE9,0xD2,0x72,0xAB,0x7D,0x1B,0x63,0xE2,0x29,0x52,0x57,\n    0xB1,0xA6,0x76,0x35,0xE8,0x52,0xA4,0xA8,0xA2,0x08,0x1D,0x38,0xE9,0xC7,0x2A,0xB5,\n    0xD7,0x7C,0xCF,0x91,0xBA,0xB8,0xCC,0x5C,0xDF,0xC2,0x14,0x1B,0xF7,0x41,0xD2,0xC7,\n    0x8A,0x14,0x25,0x72,0xE9,0x74,0x37,0xED,0xCD,0xAE,0x87,0x1A,0xEA,0x6D,0xD2,0xE6,\n    0xC6,0xDA,0xEC,0xB0,0x4B,0x65,0xB1,0x72,0xEC,0x3A,0xC0,0x61,0x8D,0xCE,0xE9,0xC7,\n    0x1C,0xEC,0x99,0x32,0x4C,0x31,0xC5,0x92,0x42,0x65,0x81,0x49,0xCE,0x58,0x19,0x09,\n    0x7F,0x5C,0x2C,0x48,0x50,0x4C,0x16,0xAC,0xB7,0xF7,0xF4,0xAC,0xB0,0x28,0xE7,0xE7,\n    0xB9,0x8E,0x3B,0x44,0x18,0x18,0x1A,0x12,0x5E,0xF6,0x34,0x52,0xA4,0x92,0x47,0x1F,\n    0x96,0x14,0x10,0x41,0x04,0x2B,0x61,0x0A,0x08,0x20,0x81,0xFC,0x4C,0x28,0x20,0x83,\n    0x4B,0x51,0x6F,0xC9,0xA5,0x45,0x14,0x41,0x7B,0x5B,0xDA,0x29,0x51,0x45,0x1B,0xEC,\n    0x60,0xE9,0xC7,0x1C,0xA8,0x36,0x85,0x04,0x10,0x71,0xD6,0xD4,0x68,0xB3,0xDA,0x2E,\n    0xAE,0x5C,0xB9,0x45,0x5E,0x14,0x10,0x41,0x03,0x26,0x18,0x61,0x8D,0x1D,0x38,0xE3,\n    0x8E,0x32,0x61,0x86,0x18,0x91,0xC7,0x1C,0x72,0x2A,0xA8,0xB5,0x2A,0x28,0xA3,0x7C,\n    0x0E,0x9C,0x71,0xC6,0x2E,0xA6,0x14,0x10,0x41,0x04,0x72,0x6B,0x2A,0x49,0x24,0x92,\n    0x57,0x3C,0x28,0x20,0x82,0x08,0xE8,0xF4,0x65,0x49,0x24,0x92,0x49,0xEE,0xB0,0xA0,\n    0x82,0x08,0x3B,0x67,0x4E,0x38,0xE3,0x9A,0xF3,0x5A,0x54,0x92,0x49,0x27,0x0E,0x1D,\n    0x79,0x50,0xA0,0xDD,0xAE,0x76,0x36,0xE7,0xED,0x7A,0xB7,0x5B,0x25,0x9A,0xCC,0xA3,\n    0x95,0xD3,0xA4,0xE9,0xCE,0x8C,0x1C,0x21,0x42,0x4E,0x30,0xC7,0x73,0xBA,0x65,0x49,\n    0x4A,0x8A,0x3B,0x9B,0x42,0x82,0x14,0x10,0x79,0xAC,0x9D,0x38,0xE3,0x90,0xC9,0x86,\n    0x18,0xC9,0x64,0x73,0x39,0x73,0x21,0x9C,0x33,0x40,0x82,0xC5,0x8C,0xAE,0x71,0x98,\n    0x9A,0x05,0x06,0x42,0xBB,0x22,0x00,0xC6,0xBB,0xB1,0x0E,0x80,0x32,0x01,0x61,0x05,\n    0xC2,0x08,0x30,0x6F,0x29,0x70,0xE5,0x14,0x56,0x52,0x2E,0x63,0x35,0x67,0x48,0x28,\n    0x09,0xCE,0xB3,0x65,0x38,0xD4,0x0E,0x69,0x0A,0x06,0x7B,0xCD,0xA8,0x15,0x90,0x83,\n    0x6F,0x75,0xFF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x53,0xF6,0xC2,0x61,0x80\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_4adf8926026adfd28daa074b38918bc14d0ce862e2150cc82eaec625ddde0d61) == 6126, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.eucCN LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_cf1c57b81fb6879ba0ac169c279109f41800d93b768bb34ee033d0eeba456d8c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x06,0xEC,0xBA,0x6D,0x00,0x07,\n    0x2F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xD0,0x05,0x11,0x0B,0x0F,0x52,0x10,0x0D,0x4B,0x91,0x04,0xAA,0xA7,\n    0xAA,0x00,0x00,0x00,0x03,0x4D,0x00,0x00,0x00,0x00,0x68,0xC9,0xA6,0x8C,0x4F,0xFF,\n    0x55,0x53,0x23,0x43,0x41,0xA1,0x90,0xD0,0x68,0x00,0x03,0x4F,0xFD,0x55,0x01,0x9A,\n    0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,\n    0x24,0xA6,0xD4,0x9B,0x53,0x7A,0x90,0xD3,0x4F,0x49,0xEF,0x52,0x86,0x80,0xD0,0x69,\n    0xA3,0x47,0x94,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCF,0x54,0x19,\n    0xAA,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x80,\n    0x00,0x00,0x09,0x30,0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x01,0x21,0x49,0x08,0xA7,0xEA,0x40,0x64,0x07,0xA8,0x00,0xD0,\n    0xD0,0x00,0x34,0x00,0x00,0x68,0x69,0xED,0x50,0x68,0xC8,0x00,0x00,0x0D,0x00,0x00,\n    0x00,0x00,0x00,0xC8,0x00,0x0D,0x00,0x06,0x98,0x43,0x40,0x00,0x00,0x34,0x1B,0x50,\n    0x00,0x68,0x00,0x03,0x3D,0x49,0x1D,0xE5,0xF8,0xC6,0xBF,0x37,0x1D,0x16,0xA7,0x31,\n    0x51,0x6C,0x22,0x21,0x02,0x28,0x81,0x41,0x42,0x9A,0x20,0x8A,0xFC,0x84,0x91,0x32,\n    0xA2,0x0C,0x91,0x90,0x84,0x90,0x74,0x42,0x92,0x51,0xD8,0xB1,0xE1,0x26,0x24,0xE4,\n    0xA0,0x86,0x25,0x24,0xA8,0x95,0x92,0xC2,0x5A,0x4B,0x87,0x50,0xE4,0xBC,0x98,0x13,\n    0x12,0x64,0x44,0x13,0x32,0x24,0x9A,0x13,0x52,0x28,0x9B,0x13,0x72,0x20,0x7A,0x3E,\n    0x21,0xE7,0x04,0xE4,0x9D,0x13,0xB2,0x78,0x4F,0x49,0xF1,0x3F,0x28,0x05,0x04,0xA1,\n    0x14,0x32,0x88,0x51,0x4A,0x31,0x47,0x29,0x05,0x24,0xA5,0x0F,0x65,0x6C,0x7C,0x87,\n    0x79,0x07,0xD1,0xC1,0xE8,0xAE,0x95,0xE1,0xF8,0x7F,0x20,0x0A,0xF8,0x8B,0x01,0x02,\n    0x41,0x16,0x12,0xC4,0x41,0x96,0x32,0xC8,0x59,0x48,0x42,0x0E,0xCC,0x40,0x96,0x72,\n    0xD0,0x5A,0x48,0x58,0xAB,0x59,0x6C,0x21,0x88,0x72,0xDA,0x3C,0x3C,0x5B,0x8B,0x79,\n    0x10,0x5C,0x0B,0x89,0x72,0x2E,0x64,0x49,0x74,0x2E,0xA5,0xD8,0xBB,0x97,0x82,0xF2,\n    0x5E,0x8B,0xD9,0x7C,0x2F,0xA5,0xF8,0xBF,0x98,0x03,0x02,0x60,0x8C,0x19,0x14,0x3B,\n    0xCE,0x30,0x83,0x18,0x53,0x0C,0x61,0xCC,0x40,0x18,0x93,0x14,0x45,0x91,0x83,0xA3,\n    0x16,0x63,0x0C,0x69,0x8E,0x31,0xE6,0x40,0xC8,0x99,0x23,0x26,0x65,0x0C,0xA9,0x96,\n    0x32,0xE6,0x60,0xCC,0x99,0xA3,0x36,0x67,0x0C,0xE9,0x9E,0x33,0xE6,0x80,0xD0,0x9A,\n    0x23,0x46,0x69,0xCD,0x41,0xA9,0x35,0x46,0x7F,0x56,0x6B,0x06,0x35,0xA2,0xA1,0xB5,\n    0xC6,0x51,0x8D,0x78,0xC3,0x8D,0x80,0xAD,0x89,0xB2,0x36,0x66,0xD0,0xDA,0x9B,0x63,\n    0x6E,0x47,0xB7,0x02,0xB7,0x22,0xB7,0x08,0xDC,0xA3,0x74,0x8D,0xDA,0x37,0x88,0xDE,\n    0xA3,0x7C,0x8D,0xFA,0x38,0x08,0xE0,0xA3,0x84,0x8E,0x1A,0x38,0x88,0xE2,0xA3,0x8C,\n    0x8E,0x3A,0x39,0x08,0xE4,0xA3,0x94,0x8E,0x5A,0x39,0x88,0xE6,0xA3,0x9C,0x8E,0x7A,\n    0x3A,0x08,0xE8,0xA3,0xA4,0x8E,0x9A,0x3A,0x88,0xEA,0xA3,0xAC,0x8E,0xBA,0x3B,0x08,\n    0xEC,0xA3,0xB4,0x8E,0xDA,0x3B,0x88,0xEE,0xA3,0xBC,0x8E,0xFA,0x3C,0x08,0xF0,0xA3,\n    0xC4,0x8F,0x1A,0x3C,0x88,0xF2,0xA3,0xCC,0x88,0x04,0x40,0x23,0xCE,0x8F,0x42,0x3D,\n    0x28,0xF5,0x23,0xD6,0x8F,0x62,0x3D,0xA8,0xF7,0x23,0xDE,0x8F,0x82,0x3E,0x28,0xF8,\n    0xA3,0xE4,0x8F,0x9A,0x3E,0x88,0xFA,0xA3,0xEC,0x8F,0xBA,0x7F,0xE0,0xFF,0xD1,0xFF,\n    0xC6,0x48,0xC9,0x9F,0x39,0x6C,0xC9,0x16,0xCC,0xA1,0x94,0x39,0x11,0x57,0x42,0x56,\n    0xE0,0xA0,0x0C,0x4C,0x62,0x68,0x4C,0x68,0x4C,0x42,0x62,0x13,0x10,0x98,0x86,0x21,\n    0x88,0x42,0x10,0x84,0x21,0x03,0x18,0xC6,0x31,0x8C,0x68,0x10,0x83,0x1F,0xBA,0xC3,\n    0x67,0xCE,0xF3,0x1A,0x1A,0x6E,0xD1,0xB2,0x6B,0xD5,0x69,0x10,0x7A,0x1E,0x60,0xEC,\n    0xD6,0x1B,0x4D,0x95,0xA9,0x36,0x5D,0x2E,0xB2,0x8E,0xB5,0x55,0x45,0x0A,0x48,0xEC,\n    0xD1,0x39,0x2C,0xD4,0xD3,0x51,0xEB,0x8D,0x6E,0x6D,0x25,0x46,0x98,0xC1,0x83,0x06,\n    0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,\n    0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,\n    0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,\n    0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x6D,0x36,0x9B,0x4D,0x88,0x01,0x7B,0x6D,0x20,\n    0x3E,0x26,0x24,0xB2,0x29,0x04,0x4F,0xB6,0x88,0x39,0x06,0x00,0xD2,0x07,0xFD,0x33,\n    0x34,0xAE,0x02,0x2C,0x34,0x84,0x8A,0x0C,0x0B,0x09,0x04,0x42,0x6C,0x0A,0xEC,0x49,\n    0x22,0xC3,0x14,0x48,0x1D,0x49,0x08,0x12,0xB7,0x90,0xB9,0xA0,0x07,0xDE,0xD2,0x0B,\n    0xAA,0x44,0x93,0x60,0x42,0xE0,0x10,0xC4,0x26,0xDA,0x49,0x30,0x49,0x2A,0x50,0x50,\n    0xA0,0x21,0x88,0x50,0x80,0x14,0x82,0x82,0x68,0x72,0x00,0xD8,0x0F,0xE8,0x3F,0x46,\n    0xE0,0x08,0x28,0x03,0x60,0x59,0xB3,0x14,0x90,0x92,0x11,0xC6,0x64,0xC0,0xB8,0x01,\n    0x03,0x2A,0xAA,0xA2,0x48,0x49,0x09,0x21,0x24,0x24,0x84,0x90,0x92,0x08,0x2A,0x18,\n    0x16,0xC6,0x30,0x11,0x59,0xB6,0xDB,0x6D,0xB7,0x12,0x57,0x97,0x97,0x99,0x7C,0x75,\n    0x36,0x05,0x84,0xC5,0x5D,0x8C,0x12,0x40,0xD0,0x14,0xF8,0x1B,0x1A,0x7D,0x50,0xC9,\n    0x91,0x45,0x4B,0xBB,0x64,0x18,0xD8,0x8A,0x26,0x51,0x80,0x08,0x48,0x5F,0xD3,0xF0,\n    0x01,0x1A,0xA4,0x10,0x18,0x50,0xDB,0x87,0x6D,0x41,0xC0,0x36,0xF6,0x01,0xB6,0xDD,\n    0xB6,0xDB,0x2C,0xB2,0xCB,0x2C,0xB2,0x88,0xD3,0x3C,0xE6,0x2C,0xD5,0x80,0x62,0x9A,\n    0x03,0x1E,0xD0,0x2F,0x61,0x81,0xE0,0xB0,0xF1,0xD8,0x97,0x78,0xC4,0xBD,0x46,0x2C,\n    0xD9,0x0A,0x11,0x3F,0xCF,0x14,0xC3,0x0A,0x40,0x58,0x92,0x01,0x16,0x22,0xC4,0x58,\n    0x8B,0x11,0x62,0x2C,0x47,0x28,0xB4,0x58,0xB1,0x62,0xC7,0x83,0x63,0x63,0x64,0x4B,\n    0xD7,0xAF,0xEE,0x81,0x06,0x9A,0x69,0xA6,0x99,0x44,0x40,0x70,0xA1,0x11,0x02,0x09,\n    0x42,0x3E,0x7C,0xC2,0x20,0x39,0x53,0x97,0xFB,0x9B,0x9B,0x9D,0x50,0x00,0xDC,0x9A,\n    0x48,0x38,0x7C,0x06,0xC3,0xAF,0xDD,0xDE,0x80,0x2E,0x86,0x30,0x11,0x74,0xDB,0x6D,\n    0xB6,0xDB,0x80,0x0E,0xD2,0xD7,0x54,0xF7,0x4E,0x9D,0x88,0xC0,0x8B,0xAC,0xBD,0x33,\n    0x33,0x33,0x3B,0xBE,0xCC,0x19,0x99,0x99,0xA7,0xAC,0xCD,0x00,0xCC,0xCC,0xCC,0xCC,\n    0xCC,0xD0,0x8D,0x48,0x66,0x66,0xAA,0xB4,0x33,0x33,0x33,0x34,0x43,0x33,0x44,0xB3,\n    0x33,0xCB,0x33,0x33,0x3E,0xB4,0x13,0x3F,0x33,0x40,0x33,0xE3,0xF8,0x42,0xB8,0xE3,\n    0x8E,0x38,0xEC,0xE3,0x89,0x2E,0x66,0x44,0x00,0x6C,0xCC,0x39,0xC6,0x09,0x60,0x53,\n    0x0A,0x30,0xC0,0xB0,0x4A,0x05,0x11,0x61,0x50,0x02,0xA6,0x00,0xA2,0x18,0x1A,0x4B,\n    0x04,0x54,0x98,0x15,0x86,0x09,0x34,0xCA,0xEC,0x49,0xB0,0x0A,0xEC,0x41,0x18,0xAE,\n    0x18,0x12,0xC2,0x80,0x5D,0xB0,0x57,0x6C,0x15,0x86,0x15,0x98,0x5A,0xA4,0x2F,0x56,\n    0xAD,0x5A,0xB5,0x6A,0xD5,0xA4,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x3D,0x9F,0xF1,\n    0x77,0x24,0x53,0x85,0x09,0x00,0x6E,0xCB,0xA6,0xD0\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_cf1c57b81fb6879ba0ac169c279109f41800d93b768bb34ee033d0eeba456d8c) == 1290, \"Wrong size of locale's blob\");\n\n/* zh_CN.eucCN LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_2cfa8c31af882a925362429ddd0da3fcb33d49b1b3328b115f5eec8fb4c18fe3[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0xF9,0xA3,0xD9,0xCA,0xC7,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0xA3,0xEE,0xA3,0xCE,0xB2,0xBB,0xB7,0xF1,0x5D,0x2E,0x2A,0x0A,0xCA,0xC7,\n    0x0A,0xB7,0xF1,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_2cfa8c31af882a925362429ddd0da3fcb33d49b1b3328b115f5eec8fb4c18fe3) == 36, \"Wrong size of locale's blob\");\n\n/* zh_CN.eucCN LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_61290c7172e811525a8900e61f8eba85025dfb07a1e3ba76b42b4bc4452c2078[] = {\n    0x43,0x4E,0x59,0x20,0x0A,0xA3,0xA4,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_61290c7172e811525a8900e61f8eba85025dfb07a1e3ba76b42b4bc4452c2078) == 35, \"Wrong size of locale's blob\");\n\n/* zh_CN.eucCN LC_NUMERIC locale data */\nstatic uint8_t  __crystax_locale_blob_b9ef9bd75ff7a6ee96c49a78d24591391efa1c4b11cee8f9772975d5bae3a876[] = {\n    0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_b9ef9bd75ff7a6ee96c49a78d24591391efa1c4b11cee8f9772975d5bae3a876) == 8, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.eucCN LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_8be49ac2f61e6c86ec72e959310f665024455533c263702efd58ce6ee8259e3e[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFF,0xE4,0xF1,0x4C,0x00,0x00,\n    0x20,0xDF,0x9F,0x80,0x10,0x42,0x00,0xFF,0xF0,0x20,0x62,0x0C,0x70,0x36,0x02,0x40,\n    0x00,0x00,0x01,0x61,0x89,0x3F,0xF9,0xD7,0x10,0x82,0x98,0x00,0x23,0x30,0x00,0xB5,\n    0xB4,0x41,0x29,0xE9,0x0C,0x9A,0x30,0x9A,0x68,0x68,0xC9,0xA6,0x9B,0x49,0x9A,0x09,\n    0x84,0x19,0x00,0x1A,0x9E,0x95,0x34,0xDA,0x26,0x6A,0x0D,0x00,0x00,0x06,0x87,0xA8,\n    0x00,0x03,0x27,0xA8,0x24,0xA4,0x87,0xA8,0x00,0x00,0x00,0x00,0x1A,0x00,0x01,0x99,\n    0x4C,0x2F,0xAE,0x08,0x69,0x45,0x1B,0x27,0xC1,0x3C,0xC9,0x24,0x8C,0xD8,0xA9,0x48,\n    0x13,0x15,0x07,0x11,0x8C,0x85,0x38,0x8E,0x04,0x44,0xB5,0xB2,0x05,0xAF,0xE8,0xCE,\n    0xE9,0xA4,0x83,0x94,0x68,0x44,0x02,0x01,0xC0,0x82,0x24,0x97,0xB3,0x89,0xC0,0x88,\n    0xBF,0x20,0x35,0x96,0x24,0xA5,0xED,0xC7,0x2C,0xA2,0x63,0x10,0x8C,0xC9,0x98,0x00,\n    0x26,0x30,0x1A,0xCF,0x42,0x80,0x63,0x1D,0xC0,0x80,0x6C,0x62,0x80,0x92,0xC4,0xE4,\n    0x0A,0x3B,0x31,0x05,0x3F,0x07,0xD4,0xA5,0x8E,0x4A,0x14,0xC4,0x50,0xA8,0x0E,0xC5,\n    0x08,0xEE,0x0A,0x11,0x72,0x34,0x9C,0x80,0x1E,0x22,0xB0,0x95,0xC1,0xA2,0xA8,0x68,\n    0x68,0xA2,0xA7,0x83,0xE2,0x22,0x12,0x13,0x23,0x97,0xE7,0x20,0x78,0xA5,0x3D,0xE0,\n    0xD0,0x78,0xBF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x7F,0xF2,0x78,0xA6,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_8be49ac2f61e6c86ec72e959310f665024455533c263702efd58ce6ee8259e3e) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.GB18030 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_a0c8a2aef4c14b17288aa20f1f40bf5e4b0a6fce85656af225970ef4cb6887c7[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x7F,0x6E,0x8D,0x36,0x00,0x7B,\n    0xC6,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x69,0x9F,0x75,0xA4,0x08,0x00,0x00,0x00,0x3E,0x2E,0xE7,0x00,\n    0xE5,0x2A,0x47,0x09,0x52,0x28,0x10,0x00,0x00,0x00,0x00,0x44,0x94,0xA0,0x01,0x00,\n    0x00,0x05,0x4A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x01,0xA0,0x38,0x0F,0x04,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x03,0xC4,\n    0x78,0x02,0x37,0x7A,0x3D,0xE1,0xE6,0x40,0x70,0x7B,0x00,0x00,0xC3,0x60,0x00,0x30,\n    0x40,0x01,0xCE,0xE1,0x80,0x70,0xDD,0x2C,0x1C,0x03,0x70,0xB0,0x70,0x38,0x10,0xC0,\n    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x1C,0x74,0x08,0x0F,0x0F,\n    0xAA,0x54,0x00,0x15,0x51,0x20,0xA4,0x14,0x0A,0x15,0x54,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x14,0xAA,0x54,0x81,0x50,0x51,0x54,0x4A,0xA8,0x80,0x28,0x50,0x07,0xDB,0xC0,\n    0x94,0x94,0x46,0xA4,0xD4,0xFC,0xA9,0xBD,0x14,0xF4,0xD4,0xF5,0x3C,0xCA,0x9A,0x6D,\n    0x27,0xE9,0xA4,0x8F,0x1A,0x35,0x3D,0x4D,0x34,0xC3,0x4D,0x1F,0xEA,0x95,0x1E,0x51,\n    0xB3,0x29,0xE4,0x34,0xC9,0x0F,0xD4,0xF4,0x86,0x7A,0x4A,0x9F,0xA9,0xE9,0x88,0xF5,\n    0x46,0x26,0x7E,0xAA,0x9F,0xA9,0xE9,0x3F,0xF5,0x4F,0xD5,0x49,0xFF,0xEA,0xAA,0x9E,\n    0x24,0xFF,0xFD,0x55,0x29,0xE4,0x98,0xD4,0xDA,0x9A,0x0D,0xA9,0xE9,0xFA,0xA4,0xFF,\n    0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x0C,0xF5,0x51,0x44,\n    0x9F,0x94,0xF4,0xD1,0x85,0x3C,0x14,0xF4,0x64,0xD3,0xD3,0x41,0x1E,0x88,0x4F,0x14,\n    0xF2,0x63,0xD4,0x1E,0xA3,0x4F,0x53,0x28,0xF5,0x09,0xF8,0x8F,0x44,0x6D,0x35,0x36,\n    0x9A,0x3D,0x14,0xCF,0x54,0xD8,0x35,0x13,0xD0,0x7F,0xFE,0xAA,0xAA,0x91,0xA9,0x94,\n    0x01,0xA0,0x00,0x00,0x00,0x7A,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x34,0xC4,0x9A,0x62,0x94,0x88,0xD4,0x51,0xB5,0x1A,0x68,0x68,0xF5,0x34,0x68,\n    0x06,0x80,0x68,0xD3,0x10,0xF4,0x8F,0xD4,0x80,0x00,0x68,0x0D,0x34,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0xD3,0x41,0xA0,0x01,0xA0,0x34,0xC8,0xD0,0x03,0x20,\n    0x00,0x00,0x00,0x00,0x00,0x82,0x0D,0xE8,0xA2,0x4A,0x54,0xF5,0x4C,0x80,0x1A,0x1A,\n    0x00,0x00,0x06,0x86,0x80,0x06,0x26,0x8D,0x32,0x06,0x80,0x68,0x00,0xF5,0x19,0x32,\n    0x06,0x20,0x00,0x01,0x81,0x34,0x68,0x34,0xD0,0xD0,0x0C,0x86,0x41,0xA1,0x90,0xD0,\n    0x03,0x40,0x0C,0x9A,0x00,0x34,0x32,0x0D,0x0C,0x80,0x00,0x03,0x4F,0x6A,0xAA,0xA5,\n    0x43,0x40,0x00,0x06,0xA6,0x13,0x23,0x00,0x00,0x4C,0x98,0xD0,0xD2,0x61,0x34,0x60,\n    0x03,0x40,0x00,0x00,0x3D,0x42,0x36,0x80,0x02,0x32,0x19,0x30,0x98,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x08,0xC0,0x98,0x40,0xC0,0x01,0x29,0xFA,0xA4,\n    0x90,0x91,0x34,0x93,0x4D,0x47,0xEA,0x8C,0x98,0x26,0xD4,0x79,0x08,0x34,0x1A,0x19,\n    0xA8,0xD0,0x69,0x91,0xA6,0x80,0x00,0x01,0xEA,0x0F,0x48,0x06,0x80,0x01,0xA3,0x40,\n    0x00,0x00,0x03,0x26,0x9A,0x64,0x0D,0x31,0x0D,0x06,0x80,0x34,0xD3,0xD4,0x69,0xEA,\n    0x06,0x80,0x32,0x34,0x00,0x68,0x69,0x91,0x93,0x46,0x09,0x87,0xAA,0x79,0x7B,0xCA,\n    0xEB,0x6C,0xF6,0x5E,0xC9,0xEF,0x9E,0xFD,0xB9,0x99,0x9C,0x53,0xDF,0x77,0x22,0xB5,\n    0x99,0xAA,0xF7,0xDF,0x65,0xB9,0xCE,0xDB,0xC7,0xB2,0xF6,0x4A,0x89,0x3D,0x3C,0x07,\n    0x86,0x4F,0x0C,0x99,0x33,0x4A,0x41,0x93,0x06,0x8B,0x4F,0x84,0x5F,0x10,0x54,0xCF,\n    0x3B,0xC9,0x6B,0xBB,0x2B,0x0B,0x31,0xE3,0x6B,0x7B,0x6D,0x74,0xCD,0xF1,0xBE,0x4B,\n    0xC9,0xD3,0x8A,0xE2,0xEE,0xCA,0x4C,0x26,0x23,0xAB,0x51,0x00,0x44,0xF9,0xFE,0x3F,\n    0xAC,0xFC,0x7F,0xBF,0xFE,0xD5,0x7F,0x5F,0xF1,0xFC,0x3F,0xB5,0x52,0x48,0xBE,0x9F,\n    0xFA,0x55,0x20,0x9B,0xBE,0x0F,0x13,0xBB,0xCC,0x7A,0xBF,0xFD,0xD4,0x01,0xE3,0xDD,\n    0x3B,0x43,0x37,0xDE,0x7D,0xE3,0x73,0x77,0xD8,0xCE,0x5E,0xF4,0xB8,0xCD,0xDA,0xE6,\n    0x75,0x7B,0xA6,0x76,0xAB,0x32,0xCF,0x63,0xEC,0x7F,0x05,0xE6,0xCC,0xC7,0xE0,0x7A,\n    0xE6,0x6B,0x29,0xBB,0x59,0xEF,0x56,0x66,0x2E,0xDC,0xDB,0x39,0xDF,0x2C,0xAD,0xCB,\n    0x30,0xF3,0xD6,0x5B,0x57,0xD8,0x2B,0x2F,0x4A,0x42,0x66,0x90,0x42,0xB5,0x0E,0x99,\n    0x0F,0x22,0x69,0x4D,0x31,0x66,0x69,0xCD,0x41,0x68,0x75,0xA5,0xA9,0xD7,0x1A,0x93,\n    0xAF,0x35,0x47,0x60,0x66,0xF5,0x66,0xB0,0xD6,0x9A,0xE2,0xD8,0xD7,0x96,0xE6,0xC0,\n    0xD8,0x8F,0x2E,0x0F,0x34,0x79,0xB3,0x64,0x6C,0xCF,0x38,0x79,0xD3,0xAC,0x3B,0x13,\n    0x68,0x6D,0x4B,0x92,0xE8,0xEC,0x8B,0xB3,0xAE,0x2E,0x4B,0xA3,0x6A,0x5C,0x97,0x65,\n    0xD1,0x76,0x5D,0x9A,0xD2,0xF0,0xDB,0x1B,0x73,0x70,0x5E,0x9B,0x93,0x61,0x49,0xFB,\n    0x17,0x5F,0x8E,0x4D,0xD1,0xD9,0x9D,0xA1,0xDA,0x93,0xCD,0xD9,0x9E,0xA0,0x60,0x1B,\n    0xC3,0x7A,0x6F,0x8C,0x13,0x08,0xBF,0x24,0x28,0x9D,0x4E,0x19,0xE7,0x8C,0x43,0xB6,\n    0x31,0x4D,0xF9,0x8C,0x63,0xF2,0x78,0x06,0x19,0xC1,0x29,0x1D,0xB9,0x63,0x63,0xDC,\n    0x1C,0x23,0x86,0x71,0x0C,0x53,0xB9,0x38,0xA7,0x18,0xEC,0x25,0x3C,0xF9,0x33,0x80,\n    0x64,0x9D,0xD1,0x94,0x71,0xCE,0xEC,0x81,0x96,0x44,0xE4,0x1C,0x53,0xBC,0x14,0xF4,\n    0x07,0x24,0xD0,0xF5,0x7C,0xA3,0x96,0x77,0xA7,0x1C,0xF4,0x23,0x27,0x17,0x98,0x38,\n    0xF4,0x43,0x8E,0x68,0xE3,0x9C,0x38,0xEF,0x87,0x1E,0x8C,0x71,0xDF,0x8E,0x3C,0x01,\n    0xC7,0x82,0x38,0xE7,0x8B,0xE2,0x65,0xF1,0x52,0xFD,0xFC,0xBE,0x2E,0x5F,0xC0,0x97,\n    0xC6,0x4B,0xF8,0x32,0xF8,0xD9,0x7C,0x74,0xBF,0x85,0x2F,0xE1,0xCB,0xE2,0xA5,0xFC,\n    0x49,0x7F,0x16,0x5F,0xC6,0x97,0xC7,0xCB,0xF8,0xF2,0xF9,0x09,0x7C,0x8C,0xBE,0x4A,\n    0x5F,0x1B,0x2F,0xE4,0x4B,0xF9,0x33,0xE1,0xFF,0x95,0x6D,0xF2,0x73,0xF9,0x72,0xFE,\n    0x64,0xBF,0x9B,0x3F,0x9D,0x78,0xF9,0x4B,0xF9,0xF7,0x57,0xCA,0x4F,0xE8,0x4F,0xE8,\n    0xCF,0xE9,0x4F,0xE9,0xCF,0xEA,0x4F,0xEA,0xCB,0xFA,0xD2,0xF9,0x59,0x7F,0x5E,0x5F,\n    0x2D,0x2F,0xEC,0x4B,0xDA,0xCB,0xFB,0x32,0xFE,0xD4,0xBE,0x5E,0x5F,0xDB,0x97,0xB6,\n    0x97,0xF7,0x25,0xFD,0xD9,0x7F,0x7A,0x5F,0xDF,0x97,0xF8,0x25,0xF3,0x12,0xFF,0x0C,\n    0xBF,0xC5,0x2F,0xF1,0xCB,0xFC,0x92,0xFF,0x2C,0xBF,0xCD,0x2F,0xF3,0xCB,0xFD,0x12,\n    0xF9,0x99,0x7C,0xD4,0xBF,0xD3,0x2F,0xF5,0x4B,0xE6,0xE5,0xF3,0x72,0xFF,0x5C,0xBF,\n    0xD9,0x2F,0xF6,0xCB,0xFD,0xD2,0xFF,0x7C,0xBF,0xE1,0x2F,0xF8,0xCB,0xFE,0x53,0xFE,\n    0x72,0xFF,0xA4,0xBE,0x72,0x5F,0xF5,0x97,0xFD,0xA5,0xFF,0x79,0x7C,0xEC,0xBF,0xF1,\n    0x2F,0x9E,0x97,0xCF,0xCB,0xE7,0xE5,0xFF,0x99,0x7F,0xEA,0x5F,0x41,0x2F,0xA1,0x97,\n    0xFE,0xE5,0xF4,0x52,0xFF,0xE4,0xBF,0xFB,0x2F,0xA1,0x97,0xD1,0xCB,0xE9,0x25,0xF4,\n    0x92,0xFA,0x29,0x7D,0x2C,0xBE,0x9A,0x5F,0x47,0x2F,0xA5,0x97,0xD3,0xCB,0xFF,0xD2,\n    0xFA,0x79,0x7D,0x44,0xBE,0xA6,0x7D,0x54,0xF9,0xCB,0xEA,0xED,0xFA,0x89,0xF5,0x73,\n    0xD5,0xBD,0x5B,0xBE,0x56,0x66,0x67,0xE9,0xBE,0x7B,0xED,0xBC,0xAB,0x32,0xF9,0x8A,\n    0xF9,0x5D,0xF9,0x7F,0x6D,0xE3,0x99,0x95,0x46,0x59,0x7B,0x3F,0x4A,0x42,0xAB,0x33,\n    0x28,0xB3,0x2C,0xC3,0x2C,0x2C,0xCB,0x32,0xBA,0x56,0x5F,0x11,0xCD,0xAA,0xCF,0x9D,\n    0x65,0x99,0x6B,0x3A,0x56,0x65,0x74,0xCC,0xAB,0x93,0x2E,0x99,0x99,0x6F,0xC8,0x6E,\n    0x5A,0xCA,0xA2,0xCC,0xCE,0x33,0x35,0x66,0xA8,0xCC,0xCB,0x56,0x19,0x98,0x46,0x59,\n    0x86,0x61,0x46,0x61,0x86,0x65,0x6A,0xCC,0xD9,0x81,0x2D,0xDC,0xB6,0x5A,0xD5,0x45,\n    0x81,0x65,0x16,0xE7,0xD3,0x65,0x97,0x6C,0xCD,0x8C,0x32,0x8C,0x8C,0xCE,0x2C,0xB3,\n    0x93,0x33,0x2E,0x2B,0x33,0x8B,0x0C,0x8B,0x2D,0x44,0xE9,0x6C,0x66,0x19,0xD2,0xCD,\n    0x99,0x46,0x51,0x61,0x89,0x94,0x64,0x94,0x73,0x5B,0x96,0xF4,0xDB,0x96,0xDD,0x71,\n    0xB6,0xAA,0x32,0xB2,0x8A,0xC8,0xCC,0xCA,0x8A,0xAC,0x8C,0xB2,0x9B,0xB9,0x9A,0xC9,\n    0x33,0x96,0xEE,0xB4,0x8C,0xCE,0x73,0xA0,0x81,0x92,0x22,0x73,0x6D,0xC0,0xCE,0x73,\n    0xAB,0x99,0x9D,0x38,0xAD,0x66,0x05,0x89,0xCB,0xAD,0xBA,0x5D,0x2B,0x0C,0x33,0x30,\n    0x8A,0x62,0xCC,0xCA,0x32,0xCE,0xCC,0xAE,0xEC,0xB3,0x55,0x97,0x19,0x9A,0xAB,0xBB,\n    0x38,0xCE,0xCA,0xE4,0xAC,0xAD,0x57,0x19,0x57,0x15,0x71,0xC6,0x57,0x0E,0x6D,0xB1,\n    0x37,0x9B,0x5D,0xDC,0x55,0xDD,0xD4,0xC2,0x2F,0x15,0x78,0xDF,0x2F,0x2B,0xB7,0x8C,\n    0xDC,0xEB,0x77,0x8B,0x40,0x71,0x69,0x89,0x15,0x16,0x19,0x58,0x59,0x91,0x45,0x95,\n    0x91,0x99,0x59,0xC6,0x66,0xB3,0x22,0xCA,0x4A,0x33,0x28,0xA4,0xC2,0xC8,0xCA,0x22,\n    0x61,0xC6,0x42,0xB9,0xB9,0x71,0x58,0xA0,0xCC,0x23,0x14,0x15,0x8C,0x91,0x53,0x8D,\n    0xA9,0x6B,0x73,0x35,0x96,0xB5,0x66,0x5A,0x44,0xAD,0x61,0x96,0x57,0x15,0x3B,0xD6,\n    0x5C,0xFA,0x47,0x77,0x33,0x27,0x8E,0xDE,0x59,0xB6,0x73,0xB7,0x6B,0x23,0x23,0x22,\n    0xB3,0xD5,0x59,0x77,0xCC,0xCB,0xA5,0x19,0x51,0x89,0x54,0x59,0x65,0xE6,0xF1,0xCE,\n    0x47,0x59,0x54,0xCC,0xB5,0x99,0x37,0x32,0xDB,0x77,0x86,0xBC,0x35,0xC9,0x72,0x5C,\n    0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,\n    0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,\n    0xC6,0xB3,0x5A,0xCD,0x6B,0x35,0xAB,0x5F,0x35,0xEA,0x75,0xF0,0xDE,0xD3,0xDE,0xFB,\n    0xFC,0x2F,0xAF,0xED,0xF3,0x5E,0xC3,0xDC,0xFD,0xCB,0xC6,0x7A,0x6F,0x4F,0xD3,0xFB,\n    0xE7,0x9F,0xED,0x7F,0x68,0xF5,0xBE,0x2F,0x22,0xF8,0x25,0x0C,0xBF,0x7A,0xA1,0x9E,\n    0x7D,0x3F,0xE5,0xFE,0x71,0xFC,0x3F,0x98,0xF6,0xBE,0x60,0x7E,0xC7,0xDE,0x87,0xEF,\n    0xDE,0xF3,0xDD,0xFC,0x6D,0x2E,0xFB,0x3E,0x8F,0xF4,0x4F,0x60,0xF7,0x46,0xBD,0xFB,\n    0x42,0xFA,0xAD,0xF0,0x51,0xAB,0x33,0x25,0x2A,0xE2,0x96,0x6C,0xA5,0x56,0x52,0x9A,\n    0x52,0xCE,0x94,0xB3,0x85,0x2C,0xF9,0x4A,0xAC,0xB1,0xCF,0x96,0x55,0x65,0x2B,0x02,\n    0x95,0x71,0x4B,0x32,0x52,0x71,0x4B,0xA6,0x29,0x4D,0x29,0x79,0x72,0x96,0x64,0xA5,\n    0x9C,0x29,0x57,0x93,0x29,0x66,0xB8,0x3A,0x03,0x83,0x99,0x32,0x33,0xC6,0x47,0xD7,\n    0x38,0x19,0x9D,0x1D,0x91,0xA3,0xF6,0xF3,0x7B,0xAD,0xAD,0x5A,0x55,0xBA,0xA9,0xC4,\n    0xC7,0x4C,0x76,0x4B,0x25,0x92,0xC9,0x64,0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,\n    0x92,0xE4,0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,0x92,\n    0xE4,0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,0x92,0xE4,\n    0xB9,0x2E,0x4B,0x92,0xE4,0xB9,0x2E,0x4B,0x92,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,\n    0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,\n    0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,0x25,0xC9,0x72,0x5C,0x97,\n    0x25,0xC9,0x64,0xB2,0x5B,0x22,0xD6,0xAD,0x6A,0xDF,0x6B,0xF2,0x7F,0x23,0xF1,0xDD,\n    0xFE,0x1F,0xC6,0x65,0x5F,0x00,0xFB,0x8C,0xF8,0x15,0x7D,0xCE,0x6A,0xCC,0xC5,0x97,\n    0x5B,0x93,0x32,0xF8,0x22,0xDE,0xAE,0xB4,0xCB,0x5A,0xAE,0xA5,0x57,0x32,0x72,0xBA,\n    0xEA,0xCE,0x62,0x9B,0x66,0xE6,0x37,0x65,0x6A,0xCE,0x9D,0xDB,0xA5,0x37,0x6C,0xA3,\n    0xB7,0x66,0xB6,0xE9,0x32,0xA4,0xB2,0x8C,0xA8,0xCB,0x24,0xB3,0x13,0x2A,0x33,0x19,\n    0xBB,0x99,0x5B,0x1A,0x2D,0x0C,0xA3,0x2B,0x75,0xB9,0x5B,0x6E,0xF5,0x4C,0xB5,0x65,\n    0xC5,0x6D,0xB1,0x9B,0xB7,0x6D,0x6A,0xB4,0x6D,0x96,0xE8,0xDB,0x66,0x5D,0x5B,0x37,\n    0x72,0xB3,0x3A,0xE9,0xB9,0xBA,0xCD,0xCD,0x99,0x12,0x26,0x17,0x5E,0x8D,0xEE,0xCE,\n    0x53,0x5D,0x33,0x9D,0xE3,0x5B,0x16,0xED,0x3A,0xDB,0xB6,0x5D,0xDD,0x87,0x74,0xCD,\n    0xDD,0xD8,0xD3,0x6E,0xEE,0xEB,0xA2,0xEE,0xAD,0x8C,0xD9,0xBA,0x3A,0xD7,0x47,0x76,\n    0xDA,0xDB,0x67,0x6D,0xB7,0x59,0x95,0x99,0x99,0x6D,0x8C,0xCB,0x2C,0xAD,0xB3,0x2A,\n    0x56,0x56,0x66,0x52,0xCB,0x3E,0x26,0xFB,0xBA,0x09,0xB5,0x99,0x66,0x65,0xF5,0x95,\n    0x65,0x59,0x97,0xC2,0x32,0xAC,0xFA,0x95,0x9F,0x56,0xAB,0x32,0xED,0xEE,0xF9,0x5E,\n    0xEA,0xF7,0x8F,0x75,0xDF,0x5E,0xBA,0x67,0xB9,0x2E,0x91,0x71,0x99,0x76,0x5D,0x30,\n    0xCB,0xD8,0xBD,0xD9,0x97,0x64,0x78,0x5E,0x12,0x1F,0x3F,0x3E,0xB5,0xD2,0xDF,0x24,\n    0x3A,0x3C,0x3C,0x36,0x42,0x3D,0xE7,0x6F,0x9C,0xAE,0xA9,0x5C,0x73,0x4A,0xD2,0x8B,\n    0x33,0x28,0x77,0x8B,0x95,0xC6,0xFA,0xA3,0xBC,0xEE,0x0A,0x23,0xA5,0xCE,0x74,0xDA,\n    0x46,0xCF,0x32,0x5C,0xB0,0xAB,0x10,0xE9,0xB3,0x86,0xE9,0xD1,0xE7,0x28,0xD9,0x1D,\n    0x36,0x70,0xDD,0x26,0x6B,0x1D,0x4F,0x65,0x0E,0x98,0x66,0x30,0x86,0x40,0xA3,0xDE,\n    0x23,0x6A,0xC8,0x85,0x7C,0xE3,0x91,0x87,0xB9,0x6C,0x29,0xAA,0x99,0x31,0xC2,0x07,\n    0x4C,0x32,0xC8,0x18,0x61,0x94,0xEB,0xC6,0xE5,0xE6,0x64,0x55,0xDD,0x95,0xD9,0x99,\n    0x79,0x35,0x5C,0x5D,0xFA,0xEF,0xCA,0xA2,0x8C,0xF0,0xAC,0xB3,0x2C,0xF2,0x78,0xED,\n    0xDB,0x9D,0xD9,0x65,0x9A,0xCB,0xBA,0xF1,0x76,0xDB,0x33,0xB1,0xE9,0x65,0x99,0x99,\n    0x7D,0x2B,0x20,0x08,0x8F,0xFF,0x10,0x20,0x40,0x81,0x31,0x03,0xCE,0x53,0x81,0xE8,\n    0x77,0x17,0x3D,0x10,0xE5,0x79,0x7D,0xC0,0x34,0x81,0xBE,0xC5,0x16,0x67,0xB7,0x2C,\n    0xB3,0x3D,0x6A,0xCA,0x2C,0xCC,0xCA,0xF6,0xF5,0x59,0x7D,0x53,0x2A,0xC2,0xB3,0x2F,\n    0x3F,0xB7,0xFA,0xC7,0xA1,0xDF,0x5C,0xFA,0xCC,0x7B,0x74,0x87,0xB4,0x78,0x49,0xEF,\n    0xB6,0x87,0x48,0x76,0x54,0x9A,0x20,0x40,0x8B,0x31,0x67,0xA4,0x08,0x19,0x68,0x40,\n    0x24,0x5A,0x40,0x90,0x1F,0x57,0x69,0x51,0x03,0x87,0xA6,0x11,0x88,0x88,0x03,0x39,\n    0x6E,0xB6,0x04,0x7B,0xB2,0xCC,0xAB,0xD4,0x9A,0xCC,0xCB,0x1E,0xA6,0xD9,0x9A,0xCD,\n    0xC5,0x57,0xD6,0xB9,0x9B,0x97,0x33,0x6B,0x2C,0xCC,0xF5,0xCC,0xB2,0xB2,0xBD,0x46,\n    0x55,0xE5,0x7A,0xD5,0x9E,0xDC,0xCF,0x48,0x7A,0x7E,0xB3,0xBD,0x99,0x7A,0x9E,0x8F,\n    0x3F,0xAB,0xEA,0x7A,0xBE,0xA7,0xAD,0xF2,0xF5,0x7D,0x5F,0xBE,0xFA,0xBE,0xAF,0x6B,\n    0xB7,0x6E,0xDD,0xBB,0x76,0xAB,0x3D,0x6A,0xCC,0xCF,0x73,0xF7,0x4D,0xB2,0xAB,0xD0,\n    0xCC,0xCC,0xCF,0x5A,0xF7,0x1E,0xF1,0x97,0xD7,0x17,0x2B,0xAF,0x5D,0x7B,0x5E,0xEA,\n    0x7D,0xD4,0x60,0xF7,0x41,0xC4,0x00,0x11,0x88,0x8A,0x31,0x1F,0x36,0xC1,0x1E,0x78,\n    0x9F,0xBC,0xF8,0x06,0x07,0xCD,0x67,0xDE,0x38,0x6D,0xBE,0xF5,0x4F,0x6D,0xCF,0x0C,\n    0xED,0xDB,0x7B,0x30,0x2C,0xCC,0xCD,0x67,0x96,0x55,0x67,0xB9,0x32,0xCC,0xC8,0xCF,\n    0x70,0xD5,0x65,0x21,0x99,0x06,0x53,0xDC,0xF2,0xB1,0x5A,0x2A,0x80,0xB0,0xCF,0x75,\n    0x56,0xAC,0x32,0xE2,0xCB,0x59,0x5E,0xEC,0xCC,0xAD,0x51,0x94,0xC6,0x59,0x46,0x46,\n    0x58,0x18,0x29,0x4B,0x72,0xB3,0x76,0xAC,0x32,0xC8,0xC0,0xCA,0xC8,0xCB,0x2C,0xC2,\n    0xAA,0xCA,0x33,0x33,0x32,0x2A,0x8C,0xC8,0xAA,0x2C,0xA4,0xCC,0xAB,0x2E,0xD5,0x55,\n    0x66,0x7A,0xEF,0x6F,0xDB,0x2E,0x3D,0xC7,0x6D,0xAF,0x4C,0x0F,0x3E,0xDE,0x8E,0x5A,\n    0x7A,0x6E,0x7D,0xC3,0xE0,0xBD,0xDB,0xC7,0xC0,0xF4,0xAB,0x91,0xEC,0xF8,0x1F,0x77,\n    0xF1,0x3C,0xCF,0xA8,0xBF,0x4F,0xA3,0x3E,0x2C,0xF9,0xA3,0xF8,0x75,0xE9,0xE7,0xC4,\n    0xC9,0xAF,0x67,0xAB,0xE1,0x8F,0xAF,0xE1,0xD9,0xBF,0x3D,0x67,0xCF,0x80,0x59,0xF4,\n    0xD2,0xFE,0x19,0x9F,0x76,0x3D,0xBF,0x85,0x47,0xD6,0x2F,0xDA,0x3E,0xCA,0x5E,0x6A,\n    0x7C,0xF5,0x24,0xFA,0xBD,0x3B,0x35,0xEA,0x9F,0x04,0x9F,0x6F,0x31,0x4D,0x7C,0x57,\n    0x1A,0xD5,0x07,0x56,0xE8,0x94,0xBC,0xF0,0x34,0xAF,0xC0,0xD2,0xF3,0xC0,0xD6,0x3C,\n    0x41,0xAD,0x79,0xA2,0x52,0xCD,0x0D,0x67,0xBE,0x93,0xE6,0x8E,0x25,0xE6,0x69,0x96,\n    0x9E,0x78,0x65,0xF9,0xEF,0xA4,0xE7,0x83,0x89,0x7A,0x68,0x69,0x79,0x81,0xAA,0x7E,\n    0x20,0xD7,0x8F,0x7C,0x12,0x96,0x68,0x69,0x66,0x86,0xB3,0xDF,0x49,0xF3,0x34,0xD3,\n    0x4F,0x3C,0x32,0xFC,0x7A,0xFF,0x7F,0xE9,0x83,0xE5,0xD2,0xF4,0xF5,0x06,0x96,0xFA,\n    0x59,0x97,0xE8,0xFC,0xF4,0x12,0x97,0xA6,0x06,0x96,0xD8,0x69,0x6F,0x43,0x5A,0xF1,\n    0x06,0xB7,0x3E,0x23,0x87,0xCD,0x14,0xBC,0xF8,0x89,0x3E,0x9A,0x38,0xBC,0xF8,0xA9,\n    0xD5,0x88,0x71,0x7A,0x3F,0x4B,0x12,0x96,0xF8,0x1A,0x5E,0xAB,0x0D,0x2D,0xF0,0x35,\n    0x8F,0x10,0x6B,0x5E,0x68,0x94,0xB3,0x43,0x4B,0x34,0x34,0xB3,0x43,0x58,0xF1,0x06,\n    0xB5,0xE6,0x89,0x4B,0x34,0x34,0xB3,0x43,0x59,0xEF,0xA4,0xF9,0x9A,0x69,0xA7,0x9E,\n    0x19,0x6B,0xCD,0x0D,0x2F,0x2C,0x34,0xB7,0xC0,0xD2,0xBD,0xB3,0x2D,0xCC,0xEA,0xDC,\n    0x14,0x96,0xE0,0x69,0x6E,0x86,0xBA,0x76,0x76,0x17,0x74,0xFF,0x39,0xAD,0xC0,0xD2,\n    0xD6,0x33,0x07,0x12,0xE6,0xF3,0x9A,0x85,0x2D,0x73,0x51,0xC1,0x7D,0x0A,0xC5,0xA4,\n    0xE8,0x79,0x57,0x5D,0x99,0xCE,0x46,0xF0,0x77,0x47,0x52,0xD8,0xDE,0x4F,0x17,0x48,\n    0x61,0x76,0xCC,0xB5,0x36,0x1A,0x59,0xA1,0xA5,0xB2,0x37,0x47,0x17,0x5E,0x56,0x9C,\n    0xB1,0xD4,0xAF,0x46,0xD0,0xE2,0x53,0x5B,0xDC,0x42,0x96,0x3C,0xC1,0x29,0x52,0x17,\n    0xD0,0x92,0xDA,0xE9,0x97,0x66,0xA4,0x6E,0xC9,0x69,0x16,0x17,0x5C,0xAE,0x1E,0x25,\n    0x4A,0x43,0x5B,0xB8,0x78,0x91,0x61,0x6F,0xB9,0x39,0xEE,0x3F,0x4F,0x71,0xFA,0xBD,\n    0xC7,0xEA,0xF4,0xF7,0x27,0xEB,0x0B,0xDB,0xE7,0xAF,0xDA,0x1F,0x17,0xED,0x7B,0x61,\n    0xA5,0xED,0xFB,0x41,0xA5,0xEB,0xF5,0x61,0x96,0x9F,0xB3,0xC3,0x2D,0x67,0x81,0xA5,\n    0x9A,0x1A,0x59,0xA1,0xA5,0x7B,0x66,0x5A,0x79,0xA6,0x5A,0xDB,0xC3,0x29,0x16,0x12,\n    0xBC,0x12,0xBB,0x93,0xD5,0x65,0x7C,0x5B,0xD4,0xBC,0x16,0x96,0x78,0x1A,0x5E,0x70,\n    0x34,0xB7,0xC0,0xD6,0xBF,0x10,0x6B,0xC7,0x9A,0x25,0x2C,0xD0,0xD2,0xCD,0x0D,0x2C,\n    0xD0,0xD6,0x3C,0x41,0xAD,0x79,0xA2,0x52,0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,0x0D,0x63,\n    0xC4,0x1A,0xD7,0x9A,0x25,0x2C,0xD0,0xD2,0xCD,0x0D,0x2C,0xD0,0xD6,0x64,0xC5,0xE6,\n    0x9A,0x6B,0x34,0x34,0xB3,0x43,0x4A,0xAC,0x35,0x4F,0x34,0x4A,0xD7,0xCD,0x12,0x96,\n    0x68,0x69,0x66,0x86,0x96,0x6E,0x19,0x7A,0x74,0x1E,0x5B,0x9A,0x7B,0xDC,0xB1,0x2A,\n    0xFB,0x5C,0xE0,0xEA,0xE5,0xEC,0xB0,0xBB,0xA1,0x8E,0x53,0x9B,0x99,0xE4,0xE5,0x70,\n    0x93,0x33,0xDC,0xE6,0x2E,0xD5,0x53,0xB9,0x92,0x49,0x92,0x89,0x24,0x92,0x4D,0x94,\n    0x49,0x24,0x92,0x49,0xDA,0x6C,0x9D,0x28,0xAC,0x48,0x84,0x0B,0xC1,0x8B,0x97,0xCB,\n    0x4D,0x9A,0xE8,0xA9,0xB3,0x95,0x5C,0xF7,0xF4,0xB2,0x7C,0x3F,0x03,0x79,0x53,0xE1,\n    0xA4,0xE5,0x79,0x5E,0x9F,0x07,0x2F,0xD5,0xF0,0x7B,0xEC,0xDF,0x5F,0xAC,0x7C,0x12,\n    0x59,0xE0,0x69,0x7A,0x7A,0xFA,0x65,0xA7,0xE7,0xA1,0x96,0xBC,0xF5,0x86,0x96,0x68,\n    0x69,0x66,0x86,0x95,0xED,0x99,0x69,0xE6,0x99,0x6B,0x34,0x34,0xB3,0x43,0x4B,0x34,\n    0x35,0x67,0xBB,0xF3,0xD5,0xEF,0xFE,0x9B,0x9E,0x7B,0x2B,0xF1,0x55,0xE9,0xA0,0x8F,\n    0x57,0x26,0x53,0xE9,0x4F,0x9F,0x3B,0x4A,0xA5,0x71,0x13,0xEB,0x94,0x26,0x60,0x9F,\n    0x5F,0x81,0xA5,0x5D,0xA3,0x2D,0x3F,0x6A,0xCC,0xB5,0xEA,0xF0,0x34,0xB3,0x43,0x4B,\n    0x34,0x34,0xAF,0x6C,0xCB,0x4F,0x34,0xCB,0x59,0xA1,0xA5,0x9A,0x1A,0x59,0xA1,0xA5,\n    0x7B,0x66,0x5A,0x79,0xA6,0x5A,0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,0x0D,0x56,0xE8,0x47,\n    0x92,0x41,0x07,0x79,0x46,0x5A,0xAD,0xE9,0x96,0xB3,0x43,0x4A,0xF4,0x34,0xB3,0x43,\n    0x4A,0xF6,0xCC,0xB4,0xF3,0x4C,0xB5,0x9A,0x1A,0x59,0xA1,0xA5,0x9A,0x1A,0x57,0xB6,\n    0x65,0xA7,0x9A,0x65,0xAC,0xD0,0xD2,0xCD,0x0D,0x2C,0xD0,0xD2,0xBD,0xB3,0x2D,0x3C,\n    0xD3,0x2D,0x66,0x86,0x96,0x68,0x69,0x66,0x86,0x95,0xED,0x99,0x69,0xE6,0x99,0x6B,\n    0x34,0x34,0xB3,0x43,0x4B,0x34,0x34,0xAF,0x6C,0xCB,0xD7,0xB8,0x25,0x2D,0xC0,0xD2,\n    0xDB,0x0D,0x2D,0xE8,0x6B,0x5E,0x20,0xD6,0xBC,0xD1,0x29,0x66,0xF0,0xCB,0x5B,0xDB,\n    0x12,0xD6,0x63,0x25,0x2B,0xBE,0x99,0x6B,0x2C,0x34,0xB3,0x43,0x4B,0x34,0x34,0xAF,\n    0x6C,0xCB,0x4F,0x34,0xCB,0x59,0xA1,0xA5,0x9A,0x1A,0x59,0xA1,0xA5,0x7B,0x66,0x5A,\n    0x79,0xA6,0x5A,0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,0x0D,0x2B,0xDB,0x32,0xD3,0xDD,0x12,\n    0xD6,0x6B,0x25,0x2E,0x76,0xC9,0x94,0xB3,0x78,0x65,0xA5,0x21,0xA5,0x9B,0x26,0x5A,\n    0xCD,0xB3,0x2D,0x66,0x86,0x95,0xE8,0x69,0x66,0x86,0x95,0xED,0x99,0x7A,0xF9,0x83,\n    0x66,0x7B,0x54,0xB4,0xF3,0x8B,0x9C,0x5C,0x3C,0xE2,0xE7,0x17,0x0F,0x08,0x95,0xDA,\n    0x6F,0xA2,0x4B,0x9E,0x70,0xCD,0x2E,0x71,0x70,0xF3,0x8B,0x9C,0x5C,0x2E,0x50,0x7C,\n    0xE2,0x0C,0x93,0xD2,0x89,0x74,0xF3,0xBA,0xEB,0x6E,0xED,0x1E,0x7F,0x2D,0xE9,0xD9,\n    0xE1,0x79,0x9E,0x07,0x86,0x8E,0xCE,0xCF,0x3B,0xA0,0x00,0x00,0x77,0x68,0xEE,0xEC,\n    0xE7,0x36,0xEC,0xE3,0xA6,0x92,0xE9,0xA4,0xB5,0xA0,0x1E,0x7D,0xB5,0xDD,0xA0,0x0F,\n    0x33,0x46,0xB5,0xE1,0xBD,0xB6,0xF1,0xCD,0xBC,0x9C,0x24,0xE9,0x92,0x4F,0x4A,0xEA,\n    0x09,0x20,0xCB,0x34,0x6A,0xD0,0xE1,0x76,0xBE,0x15,0xA9,0x3D,0x4A,0xCD,0x11,0x29,\n    0x22,0x3A,0x51,0x26,0x4A,0x3A,0x70,0xB6,0x84,0xB4,0x37,0xA8,0x33,0xDB,0x42,0xCE,\n    0x1B,0xA4,0x28,0xF0,0xBB,0x57,0x1D,0xDD,0x0F,0x36,0xED,0xE9,0x3B,0xB5,0xC7,0x87,\n    0x8E,0xB7,0xCC,0xBB,0xBC,0x86,0xBC,0x37,0xCF,0xB7,0x09,0x77,0x6B,0xCC,0xD7,0x77,\n    0x77,0x9D,0xDD,0xC7,0x9D,0xD9,0xDD,0xC7,0x67,0x77,0x37,0x6F,0x33,0x8D,0xED,0xB7,\n    0x93,0x5D,0x35,0xD2,0x42,0xAD,0x0B,0x32,0x74,0xB2,0xCD,0x94,0x49,0xE9,0x5A,0x82,\n    0x2C,0xA3,0xA5,0x1A,0x39,0x4B,0xC9,0x55,0x2A,0xEE,0xF1,0xBB,0x78,0x68,0xEC,0xD7,\n    0x99,0xAE,0x35,0xE6,0x77,0x73,0xC6,0xEB,0x8B,0x5D,0xDE,0x4E,0xEE,0x3A,0x78,0x68,\n    0x3A,0x6B,0x5E,0x4E,0xBC,0xB6,0xF2,0x79,0xDE,0x67,0x77,0x1E,0x43,0xC3,0x47,0x69,\n    0x79,0x73,0x75,0xE4,0x0F,0x88,0x59,0x67,0x9C,0x41,0x92,0x49,0x24,0x92,0x68,0xA6,\n    0xB6,0x55,0x1D,0xA4,0x3C,0xC5,0x64,0x23,0xD6,0xAE,0xDD,0xB7,0xCE,0xBC,0x9D,0xDD,\n    0x9D,0x37,0xC6,0xDD,0x9C,0x79,0x3B,0xBA,0x79,0xDD,0x81,0xD9,0xD9,0xDD,0xD7,0x9B,\n    0x6D,0x71,0xAE,0xCD,0x09,0x6B,0x47,0x86,0xB5,0xAE,0x34,0x07,0x86,0xF8,0xDB,0x40,\n    0x79,0x38,0xEB,0xAD,0xB5,0xD3,0xA7,0x1D,0x00,0x3B,0xB4,0x0E,0xB6,0xF0,0xE0,0x00,\n    0x03,0x8D,0x00,0x1D,0x9A,0x00,0x03,0xD2,0x68,0x00,0x73,0x6E,0xCE,0xBA,0xDB,0x5D,\n    0xDC,0x03,0x76,0xD7,0x4D,0x0E,0x6D,0xAE,0x37,0xB6,0xDC,0x76,0x74,0xEC,0xD2,0x5C,\n    0x68,0x76,0xDB,0xB3,0xA7,0x40,0x03,0xC3,0x47,0x1A,0xEE,0xD0,0x00,0x07,0x4D,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x9A,\n    0xEE,0xD0,0xEF,0xB7,0x4E,0x00,0x00,0xE3,0x5C,0x6B,0xA6,0x9C,0xD8,0xD1,0xDD,0xB2,\n    0xEC,0xE9,0xC0,0x00,0x07,0x97,0x9B,0x6E,0x38,0xF3,0x3C,0x3A,0x1E,0x67,0x4E,0x00,\n    0x00,0x3C,0x34,0x0E,0xDE,0x6E,0xFD,0x3A,0xE6,0xF6,0xF1,0x73,0x77,0xBF,0x97,0x4E,\n    0xB9,0xBD,0xFC,0xBC,0x9D,0x35,0x9A,0x1A,0x57,0xA1,0xA5,0x9A,0x1A,0x57,0xB6,0x65,\n    0xA7,0x9A,0x65,0xAC,0xD0,0xD2,0xCD,0x0D,0x2C,0xD0,0xD2,0xBD,0xB3,0x2D,0x3C,0xD3,\n    0x2D,0x66,0x86,0x96,0x68,0x69,0x66,0x86,0x95,0xED,0x99,0x69,0xE6,0x99,0x6B,0x34,\n    0x34,0xB3,0x43,0x4B,0x34,0x34,0xAF,0x6C,0xCB,0x4F,0x34,0xCB,0x59,0xA1,0xA5,0x9A,\n    0x1A,0x59,0xA1,0xA5,0x7B,0x66,0x5A,0x79,0xA6,0x5A,0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,\n    0x0D,0x2B,0xDB,0x32,0xD3,0xCD,0x32,0xD6,0x68,0x69,0x66,0x86,0x96,0x68,0x69,0x5E,\n    0xD9,0x96,0x9E,0x69,0x96,0xB3,0x43,0x4B,0x34,0x34,0xB3,0x43,0x4A,0xF6,0xCC,0xB4,\n    0xF3,0x4C,0xB5,0x9A,0x1A,0x59,0xA1,0xA5,0x9A,0x1A,0x57,0xB6,0x65,0xA7,0x9A,0xD4,\n    0xCA,0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,0x0D,0x2B,0xCB,0x32,0xD3,0xCD,0x32,0xD6,0x68,\n    0x69,0x66,0x86,0x96,0x68,0x69,0x5E,0xD9,0x96,0x9E,0x69,0x96,0xB3,0x43,0x4B,0x34,\n    0x34,0xB3,0x43,0x4A,0xF6,0xCC,0xB4,0xF3,0x4C,0xB5,0x9A,0x1A,0x59,0xA1,0xA5,0x9A,\n    0x1A,0x57,0xB6,0x65,0xA7,0x9A,0x65,0xAC,0xD0,0xD2,0xCD,0x0D,0x2C,0xD0,0xD2,0xBD,\n    0xB3,0x2D,0x3C,0xD3,0x2D,0x66,0x86,0x8D,0x27,0x9B,0x66,0x9A,0xCD,0x0D,0x2D,0xC9,\n    0x32,0xD5,0x6D,0x99,0x6B,0x74,0x34,0xAF,0x43,0x4B,0x34,0x34,0xAF,0x6C,0xCB,0x4F,\n    0x34,0xCB,0x59,0xA1,0xA5,0x9A,0x1A,0x59,0xA1,0xA5,0x7B,0x66,0x5A,0x79,0xA6,0x5A,\n    0xCD,0x0D,0x2C,0xD0,0xD2,0xCD,0x0D,0x2B,0xDB,0x32,0xD3,0xCD,0x32,0xD6,0x68,0x69,\n    0x66,0x86,0x96,0x68,0x69,0x5E,0xD9,0x96,0x9E,0x69,0x96,0xB3,0x43,0x4B,0x34,0x34,\n    0xB3,0x43,0x4A,0xF6,0xCC,0xB4,0xF3,0x4C,0xB5,0x9A,0x1A,0x59,0xA1,0xA5,0x9A,0x1A,\n    0x57,0xB6,0x65,0xA7,0x9A,0x65,0xAC,0xD0,0xD2,0xCD,0x0D,0x2C,0xD0,0xD2,0xBD,0xB3,\n    0x2D,0x3C,0xD3,0x2D,0x66,0x86,0x96,0x68,0x69,0x66,0x86,0x95,0xED,0x99,0x69,0xEE,\n    0x89,0x6B,0x35,0x92,0x87,0x29,0xD6,0xF3,0xBD,0xE7,0x0E,0x5A,0x08,0xE3,0xDD,0x90,\n    0x72,0x67,0x98,0xAE,0x4D,0xD0,0xBB,0xE2,0x12,0x79,0x73,0xC9,0x9C,0xEC,0x9A,0xCE,\n    0x51,0x3B,0x68,0x61,0xD7,0x78,0x42,0x36,0xC6,0xA1,0x6B,0xA6,0xDF,0x07,0x3B,0x68,\n    0x53,0x48,0x71,0xA4,0x29,0xA4,0x76,0xA7,0xB7,0xB9,0xB3,0x9D,0x9B,0xEF,0x4E,0xE2,\n    0x1D,0xCA,0xE5,0xF3,0x0D,0x8B,0x6D,0xED,0xD6,0xF1,0x75,0x6F,0x46,0xCE,0x72,0x77,\n    0x24,0xD6,0x72,0x89,0xDB,0x43,0x0E,0xDC,0xE4,0x96,0x26,0xE6,0xC5,0x53,0x77,0xDA,\n    0x91,0x26,0xFA,0x85,0x62,0xCC,0xEB,0xA1,0xDC,0xAD,0xB1,0xD9,0xB3,0x6E,0xD1,0xF9,\n    0x9E,0xE0,0x7C,0xDB,0x7D,0xE0,0xA4,0xDF,0x28,0x39,0x3C,0xAC,0x3C,0xE9,0xE4,0xEC,\n    0xF9,0xE7,0x79,0x57,0x7C,0xBB,0x14,0xFB,0x97,0x35,0xC0,0xF2,0xB9,0x79,0x74,0x7B,\n    0x98,0xD4,0x8E,0x97,0x68,0x68,0x01,0xE7,0xDB,0xC9,0xD9,0xD7,0x8D,0xB8,0xE0,0x03,\n    0xB3,0x41,0xDB,0xBE,0xDC,0x79,0x11,0x93,0x97,0x2F,0x9F,0x5A,0x9F,0xE0,0x73,0x98,\n    0x51,0xF4,0x2B,0x10,0xA3,0x6E,0x7C,0xFB,0x44,0xF2,0x7E,0xC7,0xEA,0x97,0x28,0xA2,\n    0x49,0x24,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x09,\n    0x24,0xFA,0xCA,0x3D,0x28,0x92,0x4C,0xF0,0xFA,0xF3,0x9D,0x35,0x4B,0xBC,0x5C,0x3C,\n    0xE2,0xDA,0xE2,0x4F,0xBC,0xBE,0xCD,0x75,0x78,0xEF,0xBD,0x9D,0xBB,0x6F,0x6F,0x46,\n    0xF6,0x40,0xE3,0x40,0x00,0x00,0x1B,0xDF,0x6E,0x00,0x00,0x06,0xED,0xAE,0xCD,0x0E,\n    0x6D,0xA0,0x79,0xB6,0xEF,0xCD,0xEC,0xBB,0xB8,0xEC,0xD0,0x00,0x1A,0xD7,0x1A,0x0F,\n    0x33,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x01,0xAD,0x1E,0x1A,0x00,0x03,0xCC,0xD0,0x00,0x00,0x00,0x00,\n    0x07,0x66,0x87,0x8D,0xB8,0xF4,0x3A,0x71,0xE7,0x70,0x00,0x01,0xE4,0xD0,0x1D,0xDA,\n    0x03,0xC3,0x40,0x01,0xDD,0xA0,0x00,0x35,0xA0,0x0E,0x9A,0x00,0x00,0x03,0xCE,0xD0,\n    0x00,0x06,0xB4,0x1E,0x66,0x80,0x00,0x00,0x00,0xB3,0x3E,0x9D,0x65,0x65,0xEF,0x9E,\n    0xF9,0x6D,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x03,0xD2,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x0F,0x43,0x40,0x1E,0x9B,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,\n    0x59,0x57,0x67,0x7D,0xDB,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x07,0x96,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xB3,0x2E,0xBA,0xCD,0xCA,0xCC,0xB3,0x33,0xE0,0xD6,0x65,0x95,0x15,0x66,0x59,0x16,\n    0x56,0x65,0x2C,0x99,0x96,0x53,0x19,0x66,0x55,0x4A,0xCA,0x32,0xC3,0x30,0x62,0x61,\n    0x59,0x12,0x55,0x95,0x64,0xB2,0xC6,0x66,0x30,0x65,0x18,0xC5,0x83,0x15,0x95,0x46,\n    0x66,0x51,0x66,0x65,0x19,0x46,0x65,0x15,0x86,0x66,0x58,0x55,0x65,0x4C,0xCA,0x8B,\n    0x32,0xC2,0x98,0xCA,0x30,0xB0,0xC0,0xCC,0x98,0xC8,0xCB,0x0C,0xCB,0x22,0xAC,0xA2,\n    0xC7,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x49,0xA0,0x03,0xD3,0x79,0x87,0x1D,\n    0x35,0xEB,0x1B,0xCD,0xBD,0x67,0x9F,0x7A,0x5E,0x1A,0x00,0x00,0x3D,0x0D,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xD6,0x6D,0xE1,0xC0,0x00,0x00,0x1A,0xD0,0x76,\n    0x79,0x38,0xE9,0xAF,0x26,0x80,0x00,0x00,0x4F,0x0B,0xD3,0x70,0x01,0xDF,0x76,0xEE,\n    0xEE,0xE3,0xBF,0x96,0xE6,0x66,0x66,0x55,0xE9,0x59,0x63,0x2A,0xF4,0x3D,0x36,0xCB,\n    0x2A,0xDD,0xB7,0x33,0x38,0xB2,0xD7,0x37,0x7E,0xA3,0xED,0xD9,0xD7,0xD0,0x6F,0x59,\n    0x72,0xAA,0xB7,0x32,0x66,0x59,0x94,0xC5,0x62,0xAC,0xCB,0x32,0xE3,0xA5,0x66,0xAA,\n    0xCC,0xCC,0xB5,0x99,0x55,0x86,0x56,0x15,0x97,0x19,0x99,0x61,0x66,0x66,0x6B,0x33,\n    0x66,0x55,0x9C,0x65,0x6D,0xCD,0xCC,0xA8,0x33,0x2E,0x33,0x66,0xEE,0xE1,0x66,0xEE,\n    0x59,0x99,0xAC,0x2C,0xCA,0x33,0x6C,0xAD,0x62,0xCC,0xAC,0x97,0x77,0x77,0x6A,0xEE,\n    0xDD,0xCE,0xDB,0x73,0x37,0x67,0x77,0x77,0x5B,0xB6,0xE6,0xD9,0x97,0x6C,0x96,0xDC,\n    0xB3,0x32,0xAC,0xB7,0x32,0xB2,0xCC,0xAE,0x59,0x59,0x96,0x6E,0x65,0x4C,0xAC,0xCB,\n    0x71,0x6A,0xCC,0xCB,0x9B,0xB6,0x5C,0xDB,0x70,0x38,0x25,0xBA,0x4B,0x96,0xEE,0x65,\n    0x15,0x98,0x56,0x49,0x54,0x45,0x95,0x91,0x99,0x99,0x86,0x56,0x45,0x56,0x58,0xCC,\n    0x99,0x59,0x93,0x96,0x65,0xC5,0x9A,0xB2,0x1B,0x45,0x51,0x99,0x66,0x51,0x37,0x2A,\n    0xEB,0x2D,0xCC,0xCC,0x74,0xCF,0x7F,0xF7,0xFD,0xB7,0x76,0xFB,0x7F,0x39,0xB9,0x9E,\n    0x6C,0xBA,0x95,0x66,0x56,0x66,0xB2,0xAA,0xCA,0x6D,0xD7,0x5B,0x6E,0xED,0xBB,0xB9,\n    0x67,0x49,0x33,0x2C,0xCC,0x59,0x99,0x32,0xCB,0xE0,0xD9,0x9E,0x32,0xAA,0xB2,0xEF,\n    0x66,0xE6,0x65,0xD4,0xCA,0xCA,0x95,0x56,0x66,0x53,0x19,0x65,0x98,0x38,0x49,0xA8,\n    0x0E,0x1C,0x88,0x88,0x20,0x88,0xE1,0x12,0xB5,0xC7,0x83,0x81,0xCD,0xCA,0xE8,0x97,\n    0x56,0x92,0x73,0xB5,0xB9,0x1B,0xFC,0x5A,0xBE,0x97,0x43,0xC2,0xD4,0x6A,0x39,0x79,\n    0x3B,0xDA,0xF6,0xD9,0xE7,0xBC,0x0E,0xF5,0xDD,0x6D,0xA4,0xEF,0x25,0xCE,0xE5,0x54,\n    0xA9,0x52,0xA5,0x85,0x4F,0x29,0x52,0xA3,0xB4,0x25,0x4C,0xE9,0x34,0xAA,0x26,0xCD,\n    0xC5,0x99,0x50,0x98,0xE2,0xA0,0x54,0x0A,0x81,0x50,0x2A,0x54,0x0B,0x10,0xA8,0x1D,\n    0x48,0x68,0x82,0xB0,0xA8,0x93,0xC7,0x54,0x0A,0x9B,0xC1,0xD5,0x02,0xC6,0xD4,0x2D,\n    0x2A,0x21,0x6A,0x5A,0x85,0xE8,0x75,0x44,0x81,0x78,0x12,0x05,0xF0,0x66,0xCA,0x19,\n    0xAC,0xD0,0xE9,0xF7,0xFA,0xAB,0xF9,0xF8,0x53,0xEA,0x50,0xD6,0x51,0xC1,0xC1,0xDE,\n    0xEA,0xE5,0xF1,0xBC,0x6D,0x7D,0x3A,0x65,0xC3,0x8A,0x69,0x4E,0x98,0x5C,0x05,0xD1,\n    0xE2,0xD3,0x1C,0x3A,0x9A,0x53,0x0A,0x61,0x4C,0x2E,0x69,0x87,0x30,0x29,0x86,0xD8,\n    0x29,0x85,0x3A,0x61,0x4C,0x39,0xC1,0x4C,0x3D,0x20,0x78,0xA1,0xD1,0x3A,0x1D,0x13,\n    0xBF,0xE7,0x93,0xF9,0xEE,0x9D,0x38,0x9D,0x38,0x9D,0x3A,0x73,0xB0,0x3C,0x2F,0x13,\n    0xC4,0x93,0xC3,0xCA,0xDE,0xEF,0x70,0x37,0x94,0x28,0x50,0xA1,0x42,0x85,0x0A,0x14,\n    0x28,0x50,0xA1,0x43,0x77,0xD9,0x4F,0x9F,0x3E,0x7C,0xF9,0xFC,0x9D,0xD4,0x31,0x3B,\n    0xC7,0xBD,0xEF,0xE5,0x3E,0xE2,0xE2,0xE2,0xE1,0xF6,0xF6,0xF6,0xF6,0xF6,0xFA,0xEE,\n    0x96,0x3F,0x4A,0xDF,0x5F,0x6D,0x6D,0xD2,0xE0,0x5B,0x6B,0xBD,0x45,0xB5,0xB6,0xB7,\n    0x6B,0xB5,0xAD,0xDB,0xED,0xF6,0x3A,0xDD,0x6E,0xB7,0x5B,0xEC,0xF5,0x3A,0x9D,0x4E,\n    0xA7,0x53,0x53,0x53,0xA9,0xD4,0xEA,0x58,0xB1,0x62,0xC5,0x8B,0x16,0x34,0xF4,0xF4,\n    0xF4,0xF4,0xFC,0xDE,0x6B,0xDF,0xA9,0x9F,0x42,0xB7,0x83,0xC1,0xE0,0xF0,0x78,0x3C,\n    0x18,0xBD,0xFA,0x35,0x2A,0x54,0xEE,0xF7,0x7B,0xBD,0xCE,0xE5,0x4A,0x95,0x3B,0xD5,\n    0x3B,0xF5,0x31,0x71,0x71,0x7F,0x4F,0xE0,0xCF,0xD7,0xA5,0x4A,0x95,0x2B,0xB5,0x7C,\n    0x1E,0x0F,0x07,0x93,0xC9,0xE1,0xB9,0xE5,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xB9,0x72,\n    0xE5,0x4C,0x8C,0x8C,0x8C,0x8C,0x8F,0x93,0xE4,0xF9,0x3E,0x4B,0x97,0x3F,0x1D,0xF3,\n    0x7C,0xBF,0x2F,0xCB,0xF7,0xFE,0xFC,0xF3,0xDE,0xBD,0x7B,0xC5,0xE2,0xF1,0x78,0xAF,\n    0x7E,0x42,0x9D,0x39,0xFC,0xFE,0x7C,0xDC,0xDC,0xDC,0xDC,0xCF,0x3E,0x6C,0xFA,0x93,\n    0xDE,0xA9,0x35,0x4A,0x95,0x3E,0xFE,0xAF,0xDF,0x9A,0x6A,0xDA,0x13,0x56,0xAD,0x5A,\n    0xB5,0x6A,0xD5,0xAB,0x56,0xAD,0x5A,0xB5,0x6A,0xD5,0xAB,0x7E,0xA3,0xF3,0xA5,0xB9,\n    0x65,0x96,0x5B,0x76,0x1B,0x5E,0x7D,0xAD,0xA9,0xF6,0xB6,0xB6,0xBD,0x36,0xED,0xDB,\n    0xB6,0xB9,0x72,0xE5,0xCB,0xF7,0x6E,0xDD,0xBB,0x76,0xED,0xDB,0xB7,0x76,0xEF,0x5E,\n    0xBD,0x7A,0xEE,0xCD,0xEB,0xD7,0xAF,0x5E,0xBD,0x7A,0xF6,0xCD,0xDB,0xB7,0x2E,0x5C,\n    0xB9,0x6E,0xDD,0xAB,0x56,0xAD,0x5A,0xD9,0xB7,0x6E,0xDD,0xBD,0x9D,0x6F,0x47,0xA3,\n    0xD1,0xE8,0x97,0x1B,0x1B,0x1A,0x59,0x72,0x32,0x32,0x30,0xE8,0x85,0x10,0xA2,0x14,\n    0x42,0x88,0x51,0x0A,0x21,0x44,0x28,0x85,0x10,0xA2,0x14,0x42,0x88,0x51,0x0A,0x21,\n    0x57,0x20,0x48,0x12,0x04,0x81,0x20,0x48,0x12,0x04,0x81,0x20,0x48,0x92,0x24,0x89,\n    0x84,0x98,0x49,0x84,0x98,0x3B,0xE4,0xDF,0x19,0xD8,0x15,0xE4,0xCD,0xAF,0x15,0xE2,\n    0xBC,0x95,0xF0,0x30,0x24,0xAF,0x15,0xEB,0xC9,0xBC,0x92,0xBE,0x8F,0xAD,0xEB,0x49,\n    0x5A,0xB5,0x6A,0xD5,0xAB,0x56,0xD0,0xD0,0xD0,0xD0,0xF3,0x79,0xAA,0x6C,0xEC,0xEC,\n    0xE7,0xE7,0xAA,0xED,0x67,0xED,0x49,0x52,0xA5,0x4A,0x95,0x2A,0x54,0xA9,0xB5,0xB5,\n    0xB5,0xE6,0xF3,0x6D,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x2B,0x56,0xAD,\n    0x5B,0x6F,0x6F,0x6F,0x6F,0x6F,0x6D,0xB9,0xB9,0xA9,0xB9,0xAB,0xAB,0xAB,0xAB,0xAB,\n    0xAB,0xAB,0xAB,0xAB,0x2E,0xAE,0xAE,0xAE,0xAD,0x9B,0x36,0x6C,0xE9,0xED,0xE9,0x69,\n    0x69,0x6D,0x6D,0xC9,0xA7,0x2C,0x9E,0xA4,0x9E,0xA7,0xA9,0x27,0xA9,0x2C,0x95,0x25,\n    0x96,0x59,0x65,0x96,0x59,0x65,0xDB,0xB1,0xB7,0x66,0xCD,0x9B,0x36,0x6C,0xD9,0xB3,\n    0xB6,0xD4,0xD4,0xD4,0xD2,0xD2,0xD2,0xD2,0xD2,0xD8,0xD3,0xD8,0x96,0x5D,0x8D,0x8B,\n    0x36,0x6C,0xD9,0xB3,0x66,0xCC,0xB2,0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,\n    0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,\n    0x2C,0xB2,0xCB,0x2C,0xB2,0xCB,0x2E,0xC3,0xD3,0xE9,0xD4,0xD4,0xD4,0xD4,0xF4,0xFA,\n    0x7D,0x3E,0x8F,0x4F,0xA6,0xD5,0xAB,0x56,0xB5,0xBD,0x16,0xAD,0x5A,0xB5,0x6A,0xD5,\n    0xAB,0x56,0xAD,0x5A,0xB5,0x6A,0xD5,0xAB,0x56,0xAD,0x61,0xE1,0xE1,0xE1,0xE1,0xE1,\n    0xE1,0xE1,0xE1,0xE1,0xE1,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,\n    0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x7B,0x76,0xAD,0x6B,0x7A,0x3D,0x1E,\n    0x8F,0x47,0xA3,0xD1,0xE9,0x5F,0xBE,0x2F,0x5E,0xBD,0x7A,0xED,0xDB,0x97,0x2E,0x5C,\n    0xB9,0x72,0xE5,0xCB,0x97,0x2F,0xDF,0xBD,0x7A,0xF5,0xEB,0xD7,0xAF,0x5E,0xBD,0x7A,\n    0xF5,0xEB,0xD7,0xAF,0x5E,0xBD,0x7A,0xF5,0xEB,0xD7,0xAF,0x5E,0xBD,0x7A,0xF5,0xEB,\n    0xD7,0xAF,0x5E,0xBD,0x7A,0xF5,0xEB,0xD7,0xAF,0x5E,0xBD,0x7A,0xF5,0xEB,0xDA,0xDA,\n    0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xD7,0xAF,0x5B,0xB7,0x6E,0xDD,0xBB,0x76,\n    0xED,0xDB,0xB7,0x6E,0xDD,0xBB,0x76,0xED,0xDB,0xB7,0x6E,0xDD,0xBB,0xD7,0xAF,0x5E,\n    0xBD,0x7A,0xFC,0xF7,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,\n    0xF5,0xF6,0xF6,0xF6,0xC6,0xDE,0xDE,0xDE,0xDB,0x73,0x70,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,\n    0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,\n    0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,\n    0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,\n    0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,0x9A,0x69,0xA6,\n    0x9A,0x69,0xA6,0x98,0x06,0xE6,0xE6,0xE6,0xE6,0xE5,0x1A,0x34,0x68,0xD1,0xA3,0x46,\n    0x8D,0x1A,0x34,0x68,0xD1,0xA3,0x46,0x8D,0x1A,0x34,0x68,0xD1,0xA3,0x46,0x8D,0x1A,\n    0x34,0x68,0xD1,0xA3,0x46,0x8D,0x1A,0x34,0x68,0xD1,0xA3,0x46,0x8D,0x1A,0x34,0x68,\n    0xD1,0xA3,0x46,0x8D,0x1A,0x34,0x68,0xD1,0xA3,0x46,0x8D,0x1A,0x34,0x68,0xD1,0x77,\n    0xBB,0xDD,0xEE,0xF7,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,\n    0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,\n    0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,\n    0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,\n    0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,\n    0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9E,0x79,0xE7,0x9C,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xAE,0xAE,0xAE,0xAE,\n    0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAE,0xAD,0x8B,0x16,0x2C,0x58,0xB1,0x62,\n    0xC5,0x8B,0x16,0x2C,0x58,0xB1,0x62,0xC5,0x8B,0x16,0x2C,0x58,0xB1,0x62,0xC5,0x8B,\n    0x16,0x2C,0x58,0xB1,0x62,0xC5,0x8B,0x16,0x2C,0x69,0xE9,0xE9,0xE9,0xE9,0xE9,0xE9,\n    0xE9,0xE9,0xE9,0xE9,0xE9,0xD6,0xAD,0x5A,0xAD,0x5A,0xB5,0x6A,0xD5,0xAB,0x56,0xAD,\n    0x5A,0xB5,0x6A,0xD5,0xAB,0x56,0xAD,0x5A,0xB5,0x6A,0xE7,0xE6,0x7E,0x17,0x17,0xF0,\n    0x7F,0x9D,0xFD,0x2F,0xE8,0xFF,0x1A,0xCB,0x6D,0x26,0xDA,0x6D,0xA6,0xDA,0x6D,0xA6,\n    0xE1,0xA6,0xDA,0x6E,0x1A,0x6D,0xA6,0xE2,0x03,0x4D,0x80,0xD3,0x60,0x00,0xD3,0x60,\n    0x34,0xD8,0x00,0x34,0xDC,0x34,0xD8,0x10,0x1A,0x6E,0x1A,0x6E,0x00,0x69,0xB8,0x69,\n    0xB0,0x20,0x34,0xD8,0x0D,0x36,0x04,0x43,0x4D,0x80,0xD3,0x60,0x44,0x34,0xD8,0x0D,\n    0x36,0x04,0x43,0x4D,0x80,0xD3,0x60,0x44,0x34,0xD8,0x0D,0x36,0x20,0x43,0x4D,0xB4,\n    0xD8,0x11,0x0D,0x36,0x03,0x4D,0xC0,0x10,0xD3,0x60,0x34,0xD8,0x11,0x0D,0x36,0x03,\n    0x4D,0x81,0x10,0xD3,0x60,0x34,0xD8,0x11,0x0D,0x36,0x03,0x4D,0x81,0x10,0xD3,0x60,\n    0x34,0xD8,0x02,0x1A,0x6C,0x06,0x9B,0x80,0x21,0xA6,0xC0,0x69,0xB8,0x02,0x1A,0x6C,\n    0x06,0x9B,0x11,0x01,0xA6,0xC0,0x69,0xB0,0x22,0x1A,0x6D,0xA6,0xC4,0x40,0x69,0xB0,\n    0x1A,0x6E,0x09,0x80,0x09,0x10,0x1A,0x6D,0xA6,0xC0,0x80,0xD3,0x70,0x1A,0x6C,0x00,\n    0x03,0x4D,0xC3,0x4D,0xC4,0x40,0x69,0xB0,0x1A,0x6C,0x08,0x86,0x9B,0x01,0xA6,0xC0,\n    0x88,0x69,0xB0,0x1A,0x6F,0x75,0x6E,0xED,0xE0,0xF0,0x36,0x1B,0x77,0x0D,0x86,0xDD,\n    0xC3,0x61,0xB7,0x71,0x4E,0xDD,0xC3,0x61,0xDB,0x71,0x55,0x55,0x4E,0xC3,0x61,0xBB,\n    0x01,0xBB,0x0D,0x87,0x70,0x1B,0x01,0xDC,0x07,0x70,0x1D,0xE0,0xD7,0x83,0xC0,0x09,\n    0x24,0x98,0x6D,0x92,0x99,0x2D,0xB4,0x9C,0x32,0xDB,0x49,0xC3,0x2D,0xB4,0x98,0x86,\n    0x43,0x69,0xB6,0xC3,0x2D,0xB4,0x9B,0x2D,0x92,0x82,0x44,0xA6,0x0B,0x6D,0x26,0xCB,\n    0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,\n    0x26,0xE0,0xB6,0xD2,0x49,0x12,0x49,0x28,0x6E,0xEE,0xEF,0x38,0xE7,0x0D,0xE5,0x39,\n    0xC3,0x79,0x87,0x39,0xB5,0xBB,0xCE,0x56,0x17,0x39,0xB6,0xEF,0x39,0x58,0x73,0x9B,\n    0x9B,0xBC,0xE5,0x98,0xE7,0x39,0xBB,0xCE,0x56,0x46,0x73,0x9B,0x5B,0xBC,0xE6,0x56,\n    0x19,0xCE,0x6D,0x6E,0xF3,0x99,0x58,0x73,0x9B,0x9B,0xBC,0xE6,0x4E,0x70,0xDE,0x58,\n    0x5C,0xE6,0xE6,0xEF,0x39,0x91,0x9C,0xE6,0xE6,0xEF,0x39,0x85,0xCE,0x6E,0x6E,0xF3,\n    0x99,0x51,0x9C,0xE6,0xD6,0xEF,0x39,0x95,0x86,0x73,0x9B,0x5B,0xBC,0xE6,0x56,0x19,\n    0xCE,0x6D,0x6E,0xF3,0x99,0x99,0x1C,0xE6,0xEE,0xF3,0x95,0x86,0x73,0x9B,0x5B,0xBC,\n    0xE6,0x56,0x19,0xCE,0x6D,0x6E,0xF3,0x99,0x58,0x67,0x39,0xB5,0xBB,0xCE,0x65,0x61,\n    0x9C,0xE6,0xD6,0xEF,0x39,0x95,0x86,0x73,0x9B,0x5B,0xBC,0xE6,0x56,0x19,0xCE,0x6E,\n    0xEF,0x39,0x95,0x86,0x73,0x9B,0x5B,0xBC,0xE5,0x58,0x67,0x39,0xB5,0xBB,0xCE,0x65,\n    0x61,0x9C,0xE6,0xD6,0xEF,0x39,0x95,0x86,0x73,0x9B,0x5B,0xBC,0xE6,0x56,0x19,0xCE,\n    0x6D,0x6E,0xF3,0x96,0x53,0x9C,0x37,0x99,0x51,0x9C,0xE6,0xD6,0xEF,0x39,0x95,0x86,\n    0x73,0x87,0x2D,0xD3,0x6D,0xD1,0x04,0x89,0x4E,0x09,0x0D,0xA8,0x49,0xB8,0x24,0x36,\n    0xA1,0x26,0xE0,0xC1,0x0D,0xA8,0x49,0x40,0x49,0x40,0x49,0x32,0x5B,0x25,0x31,0x04,\n    0x86,0xD4,0x24,0xDC,0x12,0x1B,0x50,0x93,0x70,0x48,0x6D,0x42,0x4D,0x80,0x4B,0x64,\n    0xB7,0x04,0xB6,0x92,0x61,0xB6,0x92,0x6E,0x0B,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x64,\n    0xBC,0x1B,0xAF,0x07,0x83,0xC1,0x8F,0x06,0x29,0xE0,0xAF,0x07,0x80,0x00,0x29,0xB1,\n    0x5E,0x0C,0x56,0x0C,0x98,0x38,0x3F,0x53,0xB3,0x7F,0x37,0xEE,0xC9,0x77,0xE6,0xF7,\n    0x24,0xE3,0x49,0x83,0x6F,0xA5,0x6B,0x99,0xED,0xFB,0x5B,0x5B,0x5B,0x39,0xB8,0xBC,\n    0xEF,0x3D,0xAB,0x7E,0x8F,0xBB,0xCF,0xF6,0x38,0x5D,0x1C,0x1F,0x83,0x79,0x1E,0xFC,\n    0x7B,0xF1,0xF5,0xA3,0xDF,0x8B,0x34,0xD0,0x56,0x27,0x93,0x4B,0x34,0xB3,0x4B,0x34,\n    0xB3,0x4D,0x36,0x3A,0x71,0x8C,0xE9,0x5E,0x3B,0x23,0x40,0x18,0xE9,0x8E,0x93,0x4B,\n    0x44,0xAF,0x48,0x24,0x12,0x01,0x6A,0x9D,0x39,0xEB,0xFA,0xFB,0x95,0xF1,0x2B,0xC5,\n    0x78,0xAB,0x15,0x62,0xAC,0x67,0xC6,0x7C,0x67,0xC7,0xC5,0x19,0xF1,0x9F,0x1F,0x0C,\n    0x67,0xC6,0x7C,0x67,0xC6,0x7C,0x54,0x8E,0xC4,0x99,0xB8,0x19,0xBD,0xAF,0x1E,0x4F,\n    0x67,0x23,0x13,0x13,0x89,0xC3,0xE1,0xEF,0xF7,0xD9,0xF9,0x9E,0x3C,0xAC,0x9E,0xD5,\n    0x0C,0x9C,0x9F,0x7F,0xA3,0xF4,0x6A,0xED,0xF8,0x79,0xDC,0x2E,0x5E,0x17,0x07,0x91,\n    0xE1,0xF0,0xF8,0x7B,0x3F,0x66,0x5F,0x5B,0x3E,0x33,0xE3,0xD9,0x8E,0x64,0x67,0xC6,\n    0x7C,0x72,0x63,0x3E,0x39,0xF1,0x9F,0x19,0xF1,0x95,0x1B,0x51,0xB5,0x1C,0x28,0xF3,\n    0x47,0x32,0x3D,0xF8,0xDA,0x8D,0xA8,0xA9,0x14,0xE3,0xD9,0x8F,0x7A,0x3A,0x54,0xFC,\n    0x79,0x79,0x72,0x60,0x60,0x49,0x81,0x95,0x97,0xF2,0xE5,0x74,0xB2,0x36,0xBC,0x5F,\n    0x98,0xF7,0x9F,0x47,0xC4,0x7D,0xE7,0xE4,0x3E,0x5B,0xF2,0xDE,0xF7,0xED,0x3D,0xA7,\n    0xC2,0xFE,0x3A,0x73,0x86,0xDC,0xB9,0xC3,0x6B,0x77,0x77,0x79,0x73,0x9C,0xDD,0xDD,\n    0xE5,0xCE,0x08,0x32,0x0B,0x69,0x27,0x0C,0xB6,0xD2,0x6C,0xB6,0x4A,0x60,0xB6,0x4A,\n    0x70,0x4B,0x69,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,\n    0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,0x6D,0x26,0xCB,\n    0x69,0xB6,0xD9,0x26,0x0B,0x69,0x26,0xCB,0x6D,0x26,0xE0,0xB6,0x4A,0x60,0xB6,0xD2,\n    0x6E,0x01,0x6D,0xA4,0xD9,0x6C,0x96,0xC9,0x6D,0x36,0xDB,0x6D,0x24,0x92,0x61,0x80,\n    0x00,0x62,0xAB,0xC1,0xB1,0x4C,0x53,0x62,0xAA,0xBC,0x18,0x00,0x00,0x00,0x02,0xAA,\n    0xAA,0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xAA,\n    0xAA,0xAA,0xA9,0x80,0xE0,0x00,0x00,0x00,0x38,0x00,0x38,0x0E,0x03,0x8A,0x61,0x8A,\n    0xA6,0x29,0x8A,0x6C,0x00,0x1C,0x07,0x01,0xD8,0x0E,0x29,0x8A,0x6C,0x53,0x62,0x9B,\n    0x01,0xC5,0x36,0x03,0x86,0x18,0x00,0x38,0x0E,0xC0,0x76,0x18,0x6C,0x01,0x4D,0x8A,\n    0x62,0x9B,0x0C,0x55,0x36,0x03,0xB1,0x4C,0x00,0x1C,0x30,0xD8,0xA6,0x03,0xB1,0x4C,\n    0x53,0x14,0xD8,0x38,0x38,0x18,0x18,0x32,0x60,0xE0,0xF0,0xBB,0xB9,0x5E,0x8F,0xA6,\n    0x59,0x34,0x76,0x3C,0x9D,0x8D,0x29,0x39,0x72,0x71,0xED,0x50,0xF9,0x72,0x7A,0xBD,\n    0x3F,0x83,0x77,0xC6,0xF8,0xF5,0x36,0xFE,0x9D,0xD7,0xC1,0xAD,0xB6,0xBF,0xDF,0xEC,\n    0x6F,0x3E,0xF6,0xB5,0xCB,0x9D,0x4E,0x96,0x8E,0xE6,0xD6,0xCF,0x73,0x83,0xC6,0xF9,\n    0xF0,0x70,0x3B,0x71,0x89,0x1C,0xBE,0xAC,0x73,0xEF,0x47,0x6E,0x3B,0x91,0xDC,0x8F,\n    0xB1,0x1D,0xA8,0xEE,0x45,0x68,0xFB,0xB4,0x7A,0x92,0x71,0xA3,0x93,0x26,0x8C,0x55,\n    0x8C,0x48,0x9E,0x37,0x58,0x18,0x13,0xC7,0xB7,0x1D,0x18,0xBB,0x15,0xA2,0x94,0x5D,\n    0x8D,0xF6,0xFB,0xD8,0xFB,0xBA,0x1D,0x1E,0x65,0xC9,0x37,0x24,0xC1,0xC1,0xC1,0xED,\n    0xDD,0x8E,0xFC,0x77,0x7B,0x71,0x76,0x34,0xA2,0xEC,0x4D,0x1D,0xE8,0xBB,0x1D,0x48,\n    0xB1,0x17,0x62,0xCC,0x6B,0x45,0xD8,0xB5,0x17,0x62,0xEF,0xC9,0x36,0x0E,0x0E,0x0E,\n    0x96,0x2E,0x9E,0x0F,0xC7,0xDD,0xED,0xF6,0x3E,0xCF,0xBD,0x4B,0xC1,0xF4,0x7D,0x39,\n    0x77,0x39,0x9C,0xBF,0xA3,0x91,0xD0,0xC9,0xC9,0xB7,0x16,0xE2,0xDC,0x64,0xC5,0xB8,\n    0xB7,0x16,0xE2,0xDC,0x79,0x63,0x91,0x1C,0x88,0xB7,0x1C,0x98,0xB7,0x16,0xE3,0xDC,\n    0x8B,0x71,0x56,0x2D,0xC5,0xB8,0xE6,0x45,0xB8,0xF2,0x47,0x96,0x2D,0xC9,0xE5,0x93,\n    0x74,0xE7,0x6E,0x92,0xFA,0xFB,0x4B,0x7D,0x36,0xF2,0x63,0xB7,0x25,0x5D,0xEE,0xDC,\n    0xCC,0x6D,0xFB,0x97,0x5A,0x69,0xEB,0xA6,0xD0,0xA4,0xEE,0xBC,0xD5,0x70,0x78,0x7A,\n    0x7B,0x0B,0xBE,0xC7,0x63,0x59,0x8B,0x8A,0xE7,0x39,0xDB,0xF0,0x03,0xB0,0x00,0x0C,\n    0x30,0x1C,0x01,0x4D,0x8A,0x62,0x9B,0x14,0xC5,0x31,0x54,0x1C,0x53,0x62,0x9B,0x8A,\n    0x6C,0x30,0xC0,0x70,0x1C,0x30,0xC5,0x31,0x55,0x4C,0x01,0x4C,0x53,0x01,0xC0,0x01,\n    0xC0,0x70,0x1C,0x07,0x00,0x53,0x14,0xD8,0xA6,0x2A,0xA9,0xB0,0x1C,0x30,0xC0,0x01,\n    0xC0,0x70,0x1C,0x07,0x60,0x38,0x61,0x80,0xE2,0x98,0xAA,0xA6,0xC0,0x70,0x00,0x01,\n    0xC0,0x14,0xC5,0x36,0x29,0x8A,0x62,0x98,0xA6,0x2A,0xA9,0xB0,0x00,0x70,0x00,0x14,\n    0xC5,0x36,0x18,0x6C,0x07,0x60,0x0A,0xAA,0x62,0x98,0x00,0x00,0x00,0x00,0x0A,0x60,\n    0x38,0xA6,0xC5,0x55,0x55,0x55,0x30,0xC3,0x71,0x4C,0x53,0x60,0x3B,0x8A,0x60,0x38,\n    0x0E,0xC0,0x71,0x4D,0x8A,0xAA,0xAA,0xAA,0x60,0x00,0x03,0x8A,0x6C,0x07,0x01,0xC0,\n    0x70,0x00,0x00,0x30,0xC0,0x01,0xC0,0x70,0x1C,0x00,0x00,0x01,0xC0,0x14,0xC5,0x57,\n    0xA6,0xF8,0x7F,0x0F,0xE2,0xFC,0x47,0x91,0xFA,0xAF,0x99,0x55,0xDE,0xD4,0xFC,0x1D,\n    0x69,0x38,0xBE,0xE7,0x8B,0x77,0x27,0xDE,0xF9,0xFE,0x6E,0x27,0x67,0xE2,0xE9,0x70,\n    0x39,0xDB,0xFF,0x8F,0x1F,0x79,0xBC,0xFA,0xF4,0x3A,0x58,0x5D,0x9A,0x99,0xDA,0x1F,\n    0x4E,0x77,0xC9,0xA7,0xD1,0xF7,0xB8,0x5C,0x7F,0x86,0xCC,0x76,0x22,0xCC,0x76,0x63,\n    0x0B,0xB3,0x16,0x63,0x7B,0x14,0x23,0x99,0x1D,0x88,0xF8,0x22,0xCC,0x69,0x5B,0x93,\n    0xA5,0xDC,0x8F,0x3C,0x4D,0x25,0x18,0xDB,0xEA,0x6A,0xC9,0x26,0xEF,0xA1,0x1D,0xF9,\n    0x24,0xE8,0xC6,0x14,0x74,0x63,0xAB,0x1A,0xB1,0xAB,0x1B,0xF9,0x3D,0x8F,0x5F,0xD7,\n    0x93,0xCF,0x9D,0x81,0xE7,0x8A,0x91,0xD8,0xBB,0xDB,0x8C,0x58,0xD4,0x8D,0x48,0xD4,\n    0x8D,0x48,0xAD,0x1A,0x91,0xA9,0x1D,0xB8,0xD4,0x8E,0xE4,0x62,0xC7,0x76,0x35,0x22,\n    0xE4,0x9F,0x7B,0x03,0xC9,0xD1,0xED,0x6E,0xBE,0xE4,0xB5,0xEB,0x76,0x7A,0xFF,0x17,\n    0xC5,0xD6,0xE2,0x70,0xBE,0xAC,0x4B,0x12,0xC4,0xB1,0xBD,0x8F,0x9E,0x25,0x8F,0x96,\n    0x25,0x8C,0x98,0xF9,0x63,0x83,0x12,0xC4,0xB1,0x2C,0x4B,0x1E,0x38,0xB0,0x4D,0xDA,\n    0x48,0x92,0x25,0xF2,0x48,0x97,0x69,0x73,0x61,0x72,0x39,0xC3,0xBC,0xAE,0x4E,0xD6,\n    0xCB,0x65,0x75,0xB3,0x2F,0xDD,0xB6,0xBE,0x9D,0x5B,0xA3,0xAD,0x8D,0x64,0x93,0xB6,\n    0x9C,0xCC,0x1C,0x17,0x39,0xCE,0xAA,0xAF,0x6A,0x00,0x00,0x07,0x14,0xD8,0x61,0x8A,\n    0x62,0x9B,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x53,0x00,0x00,\n    0x00,0x14,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x98,0x00,0x00,0x00,0x00,0x0A,\n    0x60,0x00,0x00,0x00,0x00,0x00,0x02,0x98,0x00,0x00,0x00,0x00,0x00,0xEC,0x53,0x0C,\n    0x36,0x00,0x00,0x00,0xE0,0x38,0x00,0x00,0xE0,0x38,0x0E,0xC5,0x30,0x1C,0x00,0x03,\n    0x0C,0x00,0x00,0x76,0x29,0x80,0x00,0x00,0x00,0x00,0xA6,0x00,0x0E,0x00,0xAA,0xAA,\n    0xA6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0xD7,0x17,0xE0,0xE7,0x7E,0x1B,0x47,\n    0x4A,0x4D,0xFC,0x77,0x3B,0x9F,0x7A,0xF5,0xDE,0x2F,0x17,0x75,0xC2,0xE3,0xE7,0xD9,\n    0xD6,0xD2,0xE1,0x50,0xEE,0xFE,0x1E,0xDD,0xFE,0x87,0x8B,0x7B,0xE4,0xAB,0x73,0x75,\n    0x57,0x4E,0xFF,0xB1,0x7E,0xD6,0xEB,0xA9,0xAB,0x18,0x12,0x64,0x46,0xAC,0x6A,0xC7,\n    0xCD,0x1C,0x98,0xE4,0xC7,0x27,0xAF,0x1D,0x78,0xE5,0x47,0x5A,0x38,0x31,0xD3,0xE2,\n    0xF5,0xA4,0xD4,0x8D,0x4D,0x2D,0x28,0xD4,0x92,0x4D,0x48,0xED,0xC7,0x2A,0x49,0x39,\n    0x51,0xD8,0x8D,0x48,0xF7,0x23,0x52,0x35,0x23,0x7F,0x26,0xFE,0x4D,0xFE,0xFA,0x4F,\n    0x3C,0x9C,0xDC,0x0C,0x3F,0x2C,0x79,0xE3,0xCF,0x1B,0x9A,0xD8,0x11,0xEE,0xEA,0xC6,\n    0xAC,0x6A,0xC6,0xAC,0x6D,0xCD,0x13,0x44,0xD1,0xF1,0x44,0xD1,0xDE,0x8F,0x0C,0x77,\n    0xE2,0x68,0xED,0x47,0xD3,0x24,0x93,0x46,0x7E,0x67,0x47,0xDB,0xA7,0x87,0xB5,0x8D,\n    0xF3,0x77,0xFA,0xBF,0x62,0xFF,0xDC,0xD7,0x6C,0x7C,0x9C,0xFB,0x7A,0x7E,0x6F,0x0E,\n    0x37,0xDE,0xC8,0xF8,0x7A,0x19,0x59,0x3F,0x7A,0x49,0x2E,0xC5,0xD8,0xBB,0x17,0x62,\n    0xEC,0x5D,0x8B,0xB1,0x76,0x39,0x31,0x76,0x2E,0xC5,0xD8,0xE2,0x47,0xBB,0x1B,0x52,\n    0x49,0x76,0x2E,0xC5,0xD8,0xBB,0x17,0x63,0xE0,0x8F,0x76,0x3D,0xB8,0xAB,0x19,0xD2,\n    0x79,0x24,0xF2,0x78,0xBC,0x9F,0x3E,0xF5,0x4D,0xE8,0x7E,0x7F,0x78,0xD5,0xE2,0xBC,\n    0x56,0xF1,0xBF,0x1B,0xF5,0xCF,0x3A,0xF1,0xFF,0x60,0xF6,0x03,0xCD,0xBD,0x9B,0xD1,\n    0xDE,0xA5,0xE4,0x5E,0xD3,0xED,0x1E,0xEF,0xFE,0xFF,0x0F,0xEC,0x7E,0x24,0xF0,0xBC,\n    0x2F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x07,0x00,0x53,0x00,0x00,0x1D,0x80,0x00,0x00,0x00,0x00,0x00,0x0A,0xAA,0x60,0x38,\n    0x02,0x98,0x00,0x38,0xA6,0x00,0x02,0x98,0x01,0x86,0xC5,0x50,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x76,0x03,0x8A,0x62,0xAA,0x98,0x00,0x38,0xA6,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0xA6,0x00,0x00,0x00,0x2A,0xAA,0xAA,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x07,0xE3,0xFE,0xCF,0xFA,0x9F,0xBA,0xFC,0x1F,0xBF,0x7E,\n    0x92,0xDB,0x81,0x8E,0x77,0x1D,0x59,0x8A,0x79,0x62,0xC3,0x59,0xA4,0xD8,0x4F,0xE2,\n    0x67,0xF5,0xF3,0xB5,0x7A,0x7F,0x31,0x77,0x85,0x75,0x83,0x7D,0xB2,0x7F,0x59,0x93,\n    0x6D,0xAE,0xAC,0xCB,0xCD,0xF6,0xF5,0xF9,0x36,0x45,0x7E,0xBE,0x65,0x7D,0xD1,0x6E,\n    0x9E,0xDD,0xC8,0xB9,0x1D,0x78,0xEB,0xC6,0x6C,0x72,0x23,0xBB,0x1F,0x5A,0x39,0x31,\n    0xDE,0x8F,0x9E,0x4F,0x24,0x5C,0x8F,0x04,0x76,0xA3,0xA1,0x8B,0x18,0xB1,0xD9,0x92,\n    0x4C,0x58,0xB7,0x16,0xE3,0xC1,0x16,0xE2,0xDC,0x7B,0x1E,0xE7,0x42,0x4F,0x24,0x5A,\n    0x8B,0x51,0xAD,0x6B,0xAF,0x83,0x83,0xD7,0x93,0xD4,0xC0,0xB5,0x19,0x11,0x6A,0x35,\n    0xA3,0x5A,0x35,0xA3,0x5A,0x35,0xA3,0x5A,0x35,0xA3,0x5A,0x35,0xA3,0xE5,0x8D,0x68,\n    0xEE,0x7D,0x5A,0x74,0xB4,0x73,0x28,0xE7,0xF6,0xBB,0x1F,0x0E,0xD7,0x77,0xC3,0xC0,\n    0xEE,0xF7,0x78,0xDA,0xFC,0x9C,0xB8,0xC7,0x8B,0x31,0x99,0x16,0x63,0xED,0x47,0x12,\n    0x2C,0xC5,0x98,0xF6,0x63,0xEB,0xC5,0x98,0xCB,0x8B,0x31,0x66,0x2C,0xC5,0x98,0xE4,\n    0xC7,0x26,0x32,0xE2,0xCC,0x69,0x47,0x1E,0x32,0xA3,0xDC,0xF9,0xEC,0x7C,0xD8,0x18,\n    0x18,0x18,0x12,0x62,0xF3,0x31,0xF1,0xF1,0xE3,0x1B,0x22,0x7B,0x5E,0x9E,0x87,0xD1,\n    0xBD,0xCA,0xA5,0xEA,0x78,0x31,0x72,0xBE,0x4F,0x5F,0x75,0x66,0xC8,0x00,0x00,0x01,\n    0x65,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE4,0x6B,0x2D,\n    0xDD,0xAD,0xDD,0xAC,0xCD,0xDD,0xAD,0xD6,0xDD,0xC3,0x61,0xB7,0x70,0xD8,0x6D,0xDC,\n    0x36,0x1B,0x77,0x0D,0x86,0xDD,0xC3,0x61,0xB7,0x70,0xD8,0x6D,0xDC,0x36,0x1B,0x77,\n    0x0E,0xC3,0x6E,0xE1,0xB0,0xDB,0xB8,0x6C,0x36,0xEE,0x1B,0x0D,0xBB,0x86,0xC3,0x6E,\n    0xE1,0xB0,0xDB,0x8A,0x6D,0xD8,0xFF,0x27,0x9A,0xF8,0xEF,0xC0,0xFF,0xB7,0xFD,0x3E,\n    0xE7,0xEC,0x7E,0x6B,0xEB,0x3E,0xD7,0xBC,0x5F,0x99,0xEF,0x5D,0xDE,0x69,0xBD,0x47,\n    0xD4,0x7C,0x4F,0xC2,0xFA,0x77,0x88,0xF3,0xDF,0x61,0xF1,0xCF,0x7E,0xF4,0xF0,0x7B,\n    0xDF,0x37,0xCB,0xC6,0xE8,0x4D,0x6B,0x75,0x36,0xC7,0x17,0x8B,0xC5,0xF9,0x3E,0x2F,\n    0x97,0x07,0x02,0x58,0x96,0x25,0x8A,0x11,0x2C,0x71,0xA3,0xB5,0x1D,0x48,0xF7,0xE3,\n    0xEC,0x47,0x5E,0x28,0x44,0xB1,0x2C,0x7D,0xCD,0x73,0x61,0x94,0x6C,0x53,0x84,0x16,\n    0x5A,0xC4,0xB8,0x4C,0x44,0xC4,0x4B,0x54,0xC4,0x4B,0x74,0xC4,0x4C,0x44,0xE9,0xEB,\n    0x8A,0xEA,0xE7,0x70,0xB4,0x61,0xA2,0x2D,0x92,0xD9,0x2E,0x12,0xD1,0x24,0x49,0x62,\n    0x59,0x36,0xB0,0x30,0x24,0xB1,0x15,0xA3,0x4A,0x3E,0x28,0xA3,0x14,0x62,0x8C,0x92,\n    0x58,0x8D,0x28,0xED,0x45,0xE9,0x24,0xB3,0x16,0x63,0xAD,0xEE,0xF0,0x77,0x9B,0xCA,\n    0x56,0x36,0x25,0xDD,0xF5,0x7A,0xBE,0xF7,0x33,0x5B,0x9B,0x77,0x0F,0xBD,0xCC,0xE3,\n    0xF1,0xF8,0xDB,0xED,0x4A,0x54,0xA9,0xEC,0xFD,0x5F,0x47,0xA7,0x23,0x73,0x75,0xE3,\n    0xDF,0x7B,0x5B,0xD8,0xC9,0x8D,0x68,0xF6,0xA3,0x5A,0x35,0xA3,0x5A,0x35,0xA3,0x5A,\n    0x2A,0x46,0xB4,0x6B,0x46,0xB4,0x63,0x26,0x32,0x60,0x26,0x32,0x63,0x26,0x02,0x63,\n    0x26,0x32,0x48,0x94,0x12,0x82,0x50,0x3B,0x43,0xB3,0x2F,0x6F,0x8D,0xA1,0x32,0xF4,\n    0xDC,0x26,0xA7,0x71,0xA9,0xE1,0xE8,0xA8,0x56,0x76,0xB3,0x66,0x4C,0xAD,0xF1,0x5E,\n    0x31,0xEF,0x3E,0x39,0xE2,0xBD,0x23,0xD0,0x7F,0xDD,0xEF,0x5E,0x55,0xE4,0x7E,0xE7,\n    0xF0,0x5E,0x81,0xE1,0x6D,0xE1,0x78,0x4D,0xBB,0x86,0xC3,0x6E,0xE1,0xB0,0xDB,0xB8,\n    0x6C,0x36,0xEE,0x1B,0x0D,0xBB,0x86,0xC3,0x6E,0xE1,0xB0,0xDB,0xB8,0x6C,0x36,0xEE,\n    0x1B,0x0D,0xD8,0x70,0xDB,0x0E,0x1D,0x87,0x0D,0xD8,0xA7,0x61,0xC1,0x6C,0xBA,0x96,\n    0xED,0x1C,0x3B,0x14,0xEC,0x06,0xED,0x8A,0x6E,0xD8,0x70,0xDC,0xBB,0x2E,0xAE,0xED,\n    0x5D,0x5D,0xBA,0xBA,0xBB,0xB5,0x61,0x91,0x85,0x46,0x15,0x18,0x54,0x46,0x64,0x61,\n    0x51,0x85,0x90,0x65,0x25,0x41,0x64,0x96,0x46,0x19,0x41,0x80,0x00,0x00,0x18,0x92,\n    0x41,0x90,0x00,0x30,0x02,0xC4,0x00,0x0A,0x50,0x60,0x60,0x99,0x95,0x02,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x09,0x24,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x1C,0x38,0x72,0x38,0x4B,0xAB,0x2B,0xAB,0xAC,0xD6,0xE7,0x73,0x69,\n    0xBC,0xC6,0x34,0x13,0xF3,0x86,0x88,0xD1,0x96,0x26,0x11,0x95,0x98,0x9D,0x57,0x89,\n    0x79,0xA4,0xC2,0xEA,0xAF,0x6F,0xE7,0x68,0xA6,0xE7,0xF4,0x36,0xD6,0x79,0xFF,0x67,\n    0x1B,0x07,0x2F,0x2B,0x1A,0xDF,0x0F,0xC7,0xF1,0x71,0x78,0xBC,0x1E,0x27,0x4E,0x35,\n    0x63,0x56,0x39,0x39,0xB1,0xBC,0x8F,0xAD,0x1D,0x58,0xEA,0xC7,0x2B,0x56,0x3D,0x69,\n    0x37,0xFA,0xBD,0x89,0x2A,0xF9,0xFB,0x91,0xDC,0xC4,0x92,0x4F,0x77,0x9D,0x1D,0xC8,\n    0xEC,0x47,0x6A,0x3D,0xC8,0xD5,0x8E,0x9C,0x6A,0xC7,0x46,0x49,0xF0,0x38,0x1C,0x0E,\n    0x04,0x9C,0x09,0x37,0xFE,0x9E,0x94,0xD1,0x34,0x4D,0x13,0x45,0x88,0xEC,0xC7,0x66,\n    0x26,0x89,0xA2,0x68,0x9A,0x2C,0xC5,0x98,0xEC,0xC6,0x84,0x4D,0x1D,0xC8,0xF3,0xC7,\n    0x72,0x29,0x45,0x28,0xD1,0xD1,0xD1,0xD1,0xAD,0xA1,0xE0,0xED,0x70,0xBD,0x8A,0x3B,\n    0xBA,0x5B,0xBA,0xBD,0x3C,0xDF,0x16,0xDF,0x1F,0x85,0xBC,0xE0,0x6F,0x37,0xF8,0x58,\n    0x5C,0x28,0xFA,0x91,0xBE,0x8E,0x14,0x57,0x8D,0xDC,0x70,0x23,0x26,0x2B,0xC7,0xAD,\n    0x15,0xE2,0xBC,0x70,0xE2,0xBC,0x53,0x8A,0xF1,0x5E,0x39,0x11,0x5E,0x2B,0xC5,0x78,\n    0xCA,0x8C,0xA8,0xCA,0x8F,0x26,0x5E,0x56,0xDA,0xF2,0xF0,0xBB,0x76,0xBA,0xE6,0xDE,\n    0xDF,0x49,0x77,0x73,0x7D,0xDB,0x6E,0x7C,0x86,0xF3,0x55,0xA6,0x2E,0x67,0x58,0x69,\n    0x7A,0x8D,0xD8,0x50,0x70,0xE1,0xC3,0x87,0x0E,0x1C,0xE7,0x08,0xE7,0x3A,0x14,0x20,\n    0x49,0x23,0x23,0x23,0x0C,0x8B,0x0C,0x8C,0x32,0x30,0xC8,0x84,0x88,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0x8C,0x31,0x24,0x92,0x49,0x24,0x92,0x49,0x20,0x45,\n    0x58,0xC3,0x04,0x92,0x0C,0x49,0x24,0x8A,0x30,0xC2,0x22,0x48,0x12,0x48,0x13,0x5A,\n    0xD5,0xAB,0x55,0xBD,0x96,0xB4,0xA5,0x31,0x4C,0x51,0xA9,0x4C,0x53,0x14,0xC5,0x31,\n    0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,\n    0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,\n    0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,\n    0xD8,0x38,0x3C,0x9C,0x8D,0x3F,0x05,0x2B,0xDC,0xEE,0xAE,0xFB,0x63,0x67,0x4A,0x4E,\n    0xBF,0xBB,0xA7,0x52,0x4C,0x49,0x3D,0x99,0x39,0x32,0x62,0x49,0x77,0xE1,0xDD,0xE4,\n    0x77,0xFD,0xBE,0xDF,0xD6,0xF5,0xBA,0x38,0x9E,0x5F,0xA3,0x0F,0xBD,0xEA,0xF8,0x36,\n    0xE9,0x6F,0x31,0xFD,0x6E,0x46,0xC7,0x46,0xCF,0x13,0x33,0x6F,0x99,0x91,0xF5,0xF7,\n    0x9E,0xCD,0x09,0x3D,0xBE,0xCC,0x4B,0x1F,0x0C,0x7B,0x31,0x2C,0x76,0xA3,0x0E,0x58,\n    0xED,0xC7,0x62,0x25,0x8E,0xDF,0x2E,0x4E,0xDF,0x6E,0x2E,0xC5,0x89,0x24,0xE8,0xD8,\n    0x8B,0x11,0xBA,0xB1,0x1D,0x58,0xB1,0x16,0x24,0xF5,0xB0,0x30,0x2C,0x47,0x6A,0x49,\n    0x77,0xD2,0x7B,0xFC,0xCF,0x47,0xD4,0xB9,0x12,0xC7,0x42,0x3B,0x37,0x2C,0x45,0x88,\n    0xEF,0xC5,0x88,0xE8,0x47,0x6E,0x3A,0xF1,0x62,0x2C,0x45,0x88,0xB1,0x1D,0xE8,0xB1,\n    0x19,0x31,0x62,0x3B,0x52,0x64,0xF8,0x34,0xB4,0xBD,0x5F,0x57,0xD5,0xF5,0x7D,0x5E,\n    0xF7,0x0F,0x87,0xEC,0x7A,0xFE,0xB7,0xAD,0xEB,0x6F,0x37,0x7D,0x2E,0x97,0xC3,0xD0,\n    0xC4,0xBF,0x77,0x1F,0x23,0x0A,0x8E,0xFF,0x7F,0xBF,0xAF,0x5F,0x13,0xED,0x78,0x71,\n    0x35,0x3D,0xBD,0x9F,0x6B,0x91,0xED,0xC7,0xB3,0x1E,0xDC,0x7A,0x91,0x66,0x2C,0xC5,\n    0x98,0xDF,0xC6,0xFE,0x2C,0xC5,0x98,0xB3,0x16,0x63,0x36,0x30,0xE2,0xCC,0x68,0xC5,\n    0x98,0xB3,0x15,0xA3,0xC5,0x1E,0x28,0xF1,0x47,0x8A,0x2C,0xC9,0xE2,0x93,0x2F,0x2F,\n    0x03,0x03,0x26,0x4F,0x87,0xE1,0xC8,0xC9,0x92,0xCE,0x06,0x06,0x34,0x9F,0x1C,0x98,\n    0xF1,0x93,0x93,0x1B,0xBF,0xAB,0xF5,0x7A,0x9D,0x79,0x33,0x36,0xEA,0x54,0xE3,0x53,\n    0xFC,0xB7,0xDA,0xEA,0xFB,0x3E,0xB3,0xED,0x9E,0xD9,0xED,0xB8,0xA6,0x29,0x8A,0x62,\n    0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,\n    0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,\n    0x29,0x8A,0x62,0x98,0x9B,0x6E,0x9B,0x6E,0x9B,0xAD,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x9A,0x69,0xB6,0xEF,\n    0xD7,0xFC,0xFE,0xEF,0xF0,0xDE,0xCF,0xDD,0xFD,0x9F,0xAF,0xF5,0xFE,0xCF,0xE1,0x3D,\n    0xC3,0xD9,0xFB,0x0F,0x74,0xF6,0x1E,0xC3,0xE0,0x3D,0x8F,0x37,0xDA,0xE6,0xF3,0x79,\n    0xBC,0xDF,0x37,0xC9,0xCF,0xF3,0x79,0xBC,0xD8,0x5E,0x6D,0x2F,0x76,0xEF,0xDB,0xAF,\n    0x8F,0xA3,0xA3,0xA3,0xF1,0xF9,0x34,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x34,0x73,\n    0xB3,0x34,0x6A,0x54,0xD1,0xD4,0xCA,0xEB,0xFB,0xFD,0x1C,0x4F,0x37,0x97,0xC3,0xD9,\n    0xFB,0x1E,0x1D,0x3F,0x67,0x5B,0xED,0xED,0x6A,0xFC,0xFD,0x0E,0x45,0xBB,0xBC,0xDF,\n    0xB5,0xCD,0xAF,0x5F,0x85,0x5E,0xBD,0x7A,0xF5,0xEB,0xF2,0xAB,0xD7,0xAF,0x5E,0xBF,\n    0x2A,0xBE,0x65,0x7A,0xF5,0xFC,0xBE,0x5A,0xB5,0xF9,0x55,0x33,0xB3,0xB3,0xBC,0x9E,\n    0x4F,0x27,0x93,0xA9,0xF6,0x3C,0x9F,0x67,0xC9,0x99,0x99,0x99,0x99,0xE3,0xF1,0xF4,\n    0xEF,0x6B,0x6B,0xCD,0xAF,0xF4,0x79,0xFB,0xBF,0x6F,0xB5,0xA5,0xC6,0xBF,0xA1,0xBF,\n    0xDF,0x7A,0xFF,0x6E,0x7F,0xBB,0xAF,0x7A,0xAF,0xC1,0xBD,0xF9,0xB0,0xBE,0x3F,0x5F,\n    0x3F,0x62,0x4E,0x9F,0x4F,0x83,0x8D,0x8D,0xA3,0xD4,0x93,0x9B,0x26,0xD7,0x2B,0x95,\n    0xCA,0xE5,0x5B,0xF7,0x2F,0x6D,0x7B,0x5E,0x3C,0x6C,0x6C,0x6C,0x6C,0x6A,0x54,0xB8,\n    0xDD,0xEE,0x1D,0x1E,0xE7,0x8F,0xDF,0xEE,0xF7,0x7B,0xB6,0xAD,0x77,0xBB,0xDD,0x0E,\n    0xDD,0xAB,0x58,0x7D,0xDE,0xDF,0x5E,0xF5,0xFA,0x73,0x4D,0xD7,0xF8,0x37,0x37,0x35,\n    0xB3,0xB3,0xBC,0xDE,0x8A,0xB3,0x4D,0xAB,0xE7,0xF3,0xFD,0xBF,0xA6,0xC7,0xDD,0xB3,\n    0xF4,0xCD,0x63,0xAD,0xD6,0xEB,0x75,0xAC,0x58,0xEB,0xF5,0xF1,0xFB,0x1D,0x8A,0xFD,\n    0x4E,0xA7,0x53,0xA9,0xD3,0xAB,0xD3,0xE9,0xF4,0xFA,0x75,0x7A,0x5D,0x2E,0x96,0x7E,\n    0x46,0x7F,0x97,0x3F,0xF0,0x7E,0x7D,0x8D,0x8D,0x8F,0xA7,0xE9,0xF1,0x78,0xBC,0x59,\n    0x39,0x3F,0x73,0xF0,0x72,0xF4,0xBE,0x9A,0xF5,0xF1,0xB1,0xB1,0xB1,0xB1,0xB1,0xB1,\n    0x71,0x76,0x7C,0x1B,0x34,0xA9,0x77,0x75,0xF5,0xF5,0xFB,0xF9,0xD8,0xB8,0xB8,0xB8,\n    0xB8,0xB8,0xB8,0xB8,0xBD,0xEE,0xF6,0x76,0x75,0xCC,0xEB,0x76,0xED,0xE2,0xF7,0x3B,\n    0x9D,0xCE,0xE7,0x73,0xB7,0xDB,0xED,0xFE,0x0F,0xA6,0xDD,0xBE,0xF7,0x3B,0x6B,0x9F,\n    0xAD,0xEE,0xED,0x66,0xE6,0xE6,0xE3,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x81,0xC0,0xE0,\n    0x31,0xB1,0xBC,0x3E,0x1D,0x5D,0x5C,0x6C,0x6A,0x54,0xA9,0x52,0xA5,0x36,0x8E,0x8D,\n    0xA9,0x95,0xDA,0x58,0xF8,0xF8,0xD8,0x98,0x98,0x9E,0xD7,0x8F,0xC7,0xC3,0xE1,0xF0,\n    0xF8,0x7C,0x3E,0x1F,0x0F,0x27,0x27,0x27,0x27,0x27,0x26,0x59,0x79,0x1C,0x8E,0x47,\n    0x23,0x91,0xC8,0xE4,0x72,0x32,0xF9,0x3C,0x9E,0x4F,0x27,0xAB,0xD5,0xEA,0xF5,0x7A,\n    0xBD,0x59,0x65,0xD8,0xB1,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,\n    0x99,0x99,0x99,0xB9,0xB9,0xB9,0xB9,0xB5,0x34,0xD5,0x6A,0xD5,0xAB,0x54,0xD8,0xAD,\n    0xB1,0xB1,0xB1,0x76,0xED,0xDB,0xBB,0x17,0xB7,0x37,0x26,0x9A,0x69,0xAF,0xEC,0x6C,\n    0x6C,0x6C,0x6C,0x3E,0x8D,0xCF,0xA3,0x73,0x72,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,\n    0xFD,0xFB,0xF7,0xEF,0xDF,0xB5,0x6A,0xD5,0xFB,0xFB,0x9B,0x3B,0x3B,0x9B,0x5B,0x4D,\n    0xBD,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,\n    0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF4,0xA9,0x52,0xA5,0x4A,0x95,0x2A,0x54,0xA9,\n    0x52,0xA5,0x4A,0x95,0x2A,0x54,0xA9,0x52,0xA5,0x4A,0x95,0x2A,0x54,0xA9,0x52,0xA5,\n    0x4A,0x95,0x2A,0x54,0xA9,0x52,0xA5,0x8B,0x8B,0x8B,0x8B,0x8B,0x8B,0xDF,0xEF,0xF7,\n    0xFB,0xFD,0xFE,0xE2,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,0xFD,0xFB,0xF7,0xEF,0xDF,\n    0xBB,0xB7,0xBD,0xD2,0xD2,0xD2,0xD2,0xD2,0xD2,0xD2,0xD2,0xD2,0xED,0x73,0x39,0x9C,\n    0xCE,0x67,0x1A,0xFD,0xEB,0xDF,0x1F,0xD6,0xD8,0xD8,0xA3,0x47,0xE1,0xD0,0xC3,0xEE,\n    0xE3,0xD2,0x9A,0x6E,0x37,0x97,0x2B,0x2B,0x81,0x95,0x95,0x95,0x95,0xBD,0xCA,0xCA,\n    0xCA,0xDF,0x7B,0x99,0x59,0x5C,0x6E,0x36,0x56,0x57,0x17,0x2B,0x2B,0x2B,0x2B,0x2B,\n    0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x9F,0x95,0x2E,0x5F,0x57,0xAB,0xD5,\n    0xEA,0xE5,0xCB,0xE2,0xF1,0x78,0xBC,0x5E,0x29,0x65,0xF8,0xB7,0x31,0xF7,0x3C,0x59,\n    0x79,0x79,0x79,0x79,0x79,0x79,0x7B,0x5B,0x5E,0x1F,0x0F,0x8F,0x6B,0x23,0x23,0x6B,\n    0x6B,0x6B,0x6B,0x6B,0x6B,0x6B,0x6B,0x6B,0x2F,0x2F,0x6B,0x43,0x43,0x43,0xCD,0x99,\n    0x34,0xD3,0x4D,0x34,0xD3,0x6C,0xEC,0xEC,0xE7,0xE7,0xE7,0xE7,0x67,0x67,0x67,0x67,\n    0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,\n    0x67,0x67,0x67,0x67,0x67,0x67,0x6C,0xD4,0xA9,0x52,0xA5,0x4A,0x95,0x2A,0x54,0xA9,\n    0x52,0xA5,0x4A,0x95,0x2A,0x6C,0xDC,0xD9,0xBA,0xAD,0x5A,0xB2,0x79,0xF4,0xBD,0x1E,\n    0x89,0xED,0xD9,0xB3,0x66,0xCD,0x9B,0x36,0x57,0x35,0x35,0x35,0x35,0x35,0x35,0x35,\n    0x35,0x35,0x35,0x35,0x35,0x35,0x30,0x3D,0xAF,0x6B,0xD1,0x93,0xD8,0xEC,0x76,0x3B,\n    0x1C,0x5E,0x2F,0x17,0xDB,0xE3,0xFB,0x1F,0x81,0xE1,0xF2,0x79,0x3C,0x9B,0xAD,0xDD,\n    0xAB,0x5B,0x3B,0x3B,0x3A,0x7B,0x32,0xCB,0xA7,0xA7,0xA7,0xBF,0xDF,0x69,0xCF,0xEC,\n    0x72,0x34,0xF4,0xE7,0x9E,0xC6,0x15,0x89,0x65,0x97,0x4F,0x9B,0xCD,0xC2,0xA7,0x4E,\n    0x9D,0x3A,0x74,0xE9,0xD3,0xA7,0x4E,0x9D,0x3A,0x74,0xE9,0xD3,0xA7,0x4E,0x9D,0x3A,\n    0x74,0xE9,0xD3,0xA3,0x46,0x9D,0x3A,0x7D,0xAA,0x74,0xE9,0xD3,0xA7,0x4A,0x9E,0x3E,\n    0x3D,0x2A,0x74,0xE9,0xD3,0xA7,0x4E,0x9D,0x3A,0x74,0xE9,0xD3,0xF1,0xCF,0x3C,0xF3,\n    0xCF,0x3F,0x03,0x81,0xC0,0xE6,0x61,0xE1,0x49,0x87,0xCB,0xC1,0xC1,0x93,0x0F,0x0E,\n    0x30,0xE3,0x0E,0x30,0xE3,0x0E,0x30,0xE3,0x0E,0x30,0xE3,0x0E,0x30,0xE3,0x0E,0x30,\n    0xE3,0x0E,0xF4,0x9C,0x48,0xE2,0x5D,0x93,0x67,0xDA,0xC0,0xFA,0xF8,0x3C,0xEE,0x74,\n    0x73,0xA4,0xE5,0xE0,0x60,0x73,0xA4,0x93,0x9D,0xCE,0x8E,0x74,0x6F,0x7E,0xA6,0x07,\n    0x3A,0x39,0xD1,0xCE,0x8D,0xEF,0x3A,0x38,0x3F,0x5A,0x4E,0x0F,0x07,0x83,0x27,0x06,\n    0x4B,0x9F,0x2E,0x44,0x64,0x46,0x47,0xC7,0x25,0xCC,0x0C,0x8C,0x88,0xC8,0x8C,0x88,\n    0xB9,0xF2,0xC5,0xC8,0xB9,0x17,0x23,0x4A,0x2E,0x45,0xC8,0xB9,0x17,0x22,0xE4,0x5C,\n    0x8B,0x71,0x6E,0x3C,0x7E,0x3F,0x1F,0xA3,0xCB,0xE5,0xF2,0xE6,0xD4,0xE2,0xDC,0xB9,\n    0x72,0xAF,0xCF,0xF6,0x7E,0x1F,0x9B,0x67,0x53,0x47,0xDD,0xDE,0xF2,0x79,0x1E,0xB7,\n    0xAB,0xC5,0x8E,0x2C,0x71,0x62,0xB4,0x70,0xA2,0xB4,0x56,0x8A,0xD1,0x5A,0x2B,0x45,\n    0x4A,0xD1,0x5A,0x2B,0x45,0x68,0xAD,0x1F,0x52,0xB4,0x56,0x8A,0xD1,0xC9,0x8F,0x34,\n    0x56,0x8D,0x08,0xAB,0x15,0x63,0x42,0xAF,0x9B,0xCD,0x57,0xCD,0xE6,0xAB,0x24,0x99,\n    0xF5,0x73,0x73,0x32,0x73,0xF3,0x73,0xF2,0xB2,0xA3,0x3A,0xAF,0x5A,0x3C,0xB3,0x5C,\n    0xDF,0xEF,0xB7,0xFC,0x0A,0xDB,0xAD,0xD5,0xEF,0x73,0xA5,0x2D,0xCA,0xFB,0xFE,0x36,\n    0xFE,0xBF,0xD7,0xAF,0xEB,0xD1,0xDC,0xC4,0xC4,0xDF,0x62,0x62,0x62,0x62,0x62,0x62,\n    0x62,0x4B,0xEF,0x62,0x62,0x7B,0xD8,0x9C,0xAE,0x57,0x2F,0x97,0xCB,0xE6,0x7B,0xD8,\n    0x9E,0xF6,0x26,0x26,0x24,0xBC,0xDE,0x6F,0x37,0x97,0x7E,0xDF,0x42,0xD5,0xAE,0x8C,\n    0xF2,0xFC,0xDA,0x7E,0x8A,0xFA,0x5A,0x7A,0x7A,0x7F,0x36,0x9E,0x9E,0x9E,0x9E,0x9E,\n    0x5E,0x9F,0x8B,0x4F,0x4F,0x4F,0x4F,0xCD,0xA7,0xA7,0x5A,0xB6,0xBC,0xB2,0xCB,0x2E,\n    0x8F,0x5F,0xAF,0xD7,0xEB,0xF5,0xFB,0xDF,0x6A,0xB5,0x6A,0xD5,0xAB,0x56,0xAD,0x5A,\n    0xB5,0x6A,0xD5,0xAB,0x56,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xE1,0xE6,0x66,0x66,0x66,\n    0x56,0xCD,0xCD,0xCD,0xCD,0xE5,0xF2,0xF9,0x7C,0xBE,0x5E,0x6E,0x6E,0x6E,0x6E,0x6E,\n    0x6E,0x6E,0x6E,0x6E,0x6E,0x6E,0x6D,0x5A,0xB5,0x73,0xAA,0xD5,0xF4,0x7A,0x2C,0xEB,\n    0x5F,0xB5,0x7E,0xDD,0xBB,0xF6,0xB6,0xBC,0xFB,0x49,0x8B,0x45,0xD7,0xA6,0x79,0xDA,\n    0xFA,0xEF,0x49,0xB3,0xB3,0xB6,0xDB,0xDB,0xDB,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,\n    0xD5,0xF5,0x7D,0x5F,0x57,0xD5,0x00,0x00,0x00,0x0C,0xEC,0xAF,0x4F,0xA7,0xD3,0xE9,\n    0xF4,0xEC,0x6C,0x6C,0x4D,0x37,0x13,0x89,0xC4,0xE2,0x71,0x38,0x9C,0x4E,0x27,0x13,\n    0x89,0xC4,0x03,0x8F,0xC7,0xE3,0xF1,0xF8,0xEF,0x67,0xD9,0xF6,0x40,0x0E,0x67,0x30,\n    0x07,0xBE,0x00,0xEB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0A,0x14,0x28,0x50,\n    0xA1,0x42,0x85,0x0A,0x14,0x28,0x50,0xA1,0x42,0x85,0x0A,0x14,0x28,0x50,0xA1,0x42,\n    0x85,0x0A,0x14,0x28,0x50,0xA1,0x42,0x85,0x0A,0x14,0x28,0x50,0xA1,0x42,0x85,0x0A,\n    0x14,0x28,0x50,0xA1,0x42,0x85,0x0A,0x14,0x28,0x50,0xA1,0x42,0x85,0x0A,0x14,0x28,\n    0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0xFB,0x9F,0x73,0xE9,0xC1,0xC0,0xC0,0x93,0x07,0x03,0x03,\n    0x06,0x4C,0x1C,0x1A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,0x33,0x5A,0x52,0x98,\n    0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x98,0xA6,\n    0x29,0x8A,0x62,0x98,0xA6,0x29,0x8A,0x62,0x89,0xAD,0x6B,0x5A,0x52,0x88,0x88,0x8E,\n    0xD3,0x4D,0x11,0xD3,0x4A,0x53,0x14,0xC5,0x31,0x4C,0x51,0x13,0x14,0xC5,0x31,0x46,\n    0xA5,0x11,0x11,0x31,0x44,0xD6,0xB5,0xAD,0x6B,0x5A,0xD6,0xB4,0xA5,0x31,0x4C,0x53,\n    0x14,0x4D,0x29,0x4C,0x51,0x35,0xA4,0xC5,0x11,0x31,0x4C,0x51,0xD1,0x11,0x31,0x4C,\n    0x53,0x14,0x44,0xC5,0x31,0x46,0xA5,0x31,0x4C,0x53,0x14,0xC5,0x1A,0x94,0xC5,0x31,\n    0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x51,0xA9,0x4C,0x53,0x14,\n    0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x46,0xA5,0x31,0x4C,0x51,0x59,0x4C,0x53,0x14,\n    0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,0x31,0x4C,0x53,0x14,0xC5,\n    0x31,0xF0,0x5B,0x77,0xCB,0x7C,0x24,0x1C,0x13,0x1C,0x88,0xF7,0xBD,0xEF,0x7B,0xDE,\n    0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,\n    0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,\n    0xEF,0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,\n    0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x84,\n    0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x86,0x49,0x94,0x87,0x1C,0x72,0x7D,\n    0xA7,0x08,0x45,0xD9,0x67,0xB5,0x57,0x75,0x16,0x65,0xF8,0x65,0x15,0x7C,0xCA,0xCE,\n    0x2F,0x96,0x5A,0xBD,0xB3,0x33,0x59,0x11,0xEE,0xDC,0x09,0x31,0xC7,0xD3,0x71,0x31,\n    0xC2,0x26,0x62,0x64,0xC3,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x90,0xAA,0xAA,\n    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,\n    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,\n    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,\n    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xB2,0x89,0xC9,0x5E,0x57,0x2B,0x9B,0xCB,0xE9,\n    0x73,0xF8,0xDC,0x69,0x65,0x96,0x59,0x65,0x96,0x59,0x65,0x96,0x59,0x65,0x96,0x59,\n    0x65,0x96,0x59,0x65,0x96,0x59,0x65,0x96,0x59,0x65,0xCB,0xCB,0xCB,0xCB,0xCB,0xCB,\n    0xCB,0xCB,0xE4,0x46,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,\n    0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,\n    0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,\n    0xC6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8F,0x23,0x91,0x96,0xEF,0x4C,0x81,0xE1,0xF7,\n    0xD3,0x3A,0x15,0x40,0x88,0x26,0xDA,0xB3,0x33,0xA5,0x74,0xBE,0x2D,0x7C,0x62,0xBF,\n    0x70,0xCB,0x55,0x86,0x57,0xC6,0x33,0xC3,0x2F,0x0F,0xDD,0xF5,0x79,0xAC,0xCA,0xAF,\n    0x92,0x65,0x55,0xF1,0xFE,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x2C,0xDB,0x2B,0xBE,0x59,0x95,0x65,0xE8,0x66,0x59,0xE9,0x2C,0xF4,0xBA,0xAC,0xAB,\n    0x2B,0x65,0x99,0x97,0x5E,0x6E,0x55,0xE8,0x59,0x96,0x67,0xA1,0x96,0x66,0x59,0x56,\n    0xF6,0xCC,0xCA,0x20,0x4F,0x8C,0x0A,0xE4,0xDD,0xFE,0x93,0xBE,0xAB,0xBB,0xBB,0xBB,\n    0xBB,0xBD,0xCC,0xCC,0xE4,0x10,0x44,0x00,0xCC,0x32,0x79,0xC9,0xE2,0xED,0x44,0x8A,\n    0xE6,0x65,0x67,0x6E,0xEE,0xEE,0xEE,0xEF,0xF3,0x5E,0x40,0xBE,0x48,0x1B,0xB3,0xBB,\n    0xBD,0xDB,0xBB,0xBB,0xBB,0xBB,0xBF,0x33,0x33,0x32,0x84,0x12,0x21,0x24,0x21,0x03,\n    0x10,0xDD,0x55,0x1B,0xA8,0x75,0xDE,0xE5,0x67,0x3B,0x76,0xEE,0xEE,0xEE,0xF4,0x47,\n    0x6B,0x92,0x06,0xEE,0xD6,0xF7,0x6F,0x72,0xEE,0xEE,0xEE,0xEE,0xF3,0x33,0x30,0x72,\n    0x30,0xC2,0x22,0x11,0x82,0x44,0x0C,0xE7,0x37,0x77,0x8C,0x2D,0x13,0xB0,0xD3,0xB7,\n    0xB1,0x2C,0xA4,0x92,0x5C,0x89,0x00,0x2E,0x23,0x9C,0xE2,0x49,0x2E,0x65,0xDD,0xDD,\n    0xDD,0xDD,0xE6,0x66,0x48,0x8C,0x22,0x09,0x80,0x11,0x01,0x66,0x77,0xBD,0xEB,0x78,\n    0xEE,0x38,0xAE,0xEE,0xB3,0x62,0x59,0x49,0x24,0xB9,0x12,0x00,0x5C,0x47,0x39,0xC4,\n    0x92,0x5C,0x69,0x24,0x92,0x49,0xB6,0xF5,0x31,0x30,0x70,0xA8,0x49,0x66,0x77,0xBD,\n    0x4B,0x2A,0x26,0xEC,0xDD,0xD6,0x73,0xB7,0x6E,0xEE,0xEE,0xEF,0x44,0x73,0xA6,0xAB,\n    0x80,0x6E,0xEF,0x76,0xEE,0xF7,0x2E,0xEE,0xEE,0xEE,0xEF,0x33,0x33,0x01,0xE4,0x1C,\n    0x42,0x19,0x82,0x0C,0x33,0x04,0xC1,0x0E,0x93,0x9A,0xAA,0x8D,0x3D,0x05,0x3B,0x27,\n    0x58,0x12,0xB7,0xB1,0x2C,0xA4,0x92,0x5C,0x89,0x22,0x00,0x2E,0x21,0xB0,0xEF,0x7B,\n    0x97,0x77,0x77,0x77,0x77,0x7B,0x99,0x99,0x88,0x50,0x8C,0x31,0x32,0xA2,0x65,0x42,\n    0x83,0x12,0x84,0x97,0x06,0x0C,0xAA,0xD6,0xD2,0x5A,0xC0,0xEA,0x49,0xDE,0x36,0xD5,\n    0xEA,0xC3,0x20,0x0D,0x72,0x24,0x88,0x0B,0xDC,0x43,0x77,0x76,0xC0,0x00,0x06,0xB8,\n    0xDB,0x75,0x2A,0xE6,0xB1,0x18,0x89,0xC5,0x4E,0x73,0x89,0xA9,0xA9,0xA8,0x75,0x89,\n    0xA8,0xA8,0x8D,0x00,0x62,0xDD,0x13,0xBC,0x6D,0x2B,0xD5,0x86,0x40,0x1A,0xE4,0x4F,\n    0xC4,0xCC,0x4C,0x4C,0x4C,0x47,0xC4,0xC4,0xDB,0x9A,0x2E,0x23,0xBD,0xDF,0x7A,0x00,\n    0x00,0x1D,0x5E,0x36,0xDD,0x3B,0x9C,0x46,0x2B,0x11,0x15,0x35,0x35,0x2C,0xC4,0xEA,\n    0xA2,0xB3,0x8D,0xD5,0x68,0x33,0x9C,0xBD,0xCE,0xEB,0x61,0xBD,0x20,0xC8,0x03,0x5E,\n    0x44,0x93,0xAC,0xCF,0x39,0xA6,0xD8,0x5F,0x00,0x0E,0x26,0xDB,0x71,0xB9,0xC6,0xEB,\n    0x35,0x2A,0xA3,0x0E,0x37,0x3A,0xAD,0x85,0x95,0x97,0x9B,0xAD,0x25,0xBD,0x6E,0xCC,\n    0x80,0x35,0xC8,0x92,0x4D,0xEA,0x5E,0xB4,0x95,0xDD,0xB0,0x01,0xAE,0x36,0xDD,0x2A,\n    0x87,0xAC,0xE3,0x31,0x18,0xA8,0xC1,0x8A,0x8C,0x62,0x67,0x1B,0x03,0x26,0x59,0x25,\n    0xE2,0xD1,0x7A,0xB0,0xC8,0x03,0x5C,0x89,0x22,0x0B,0xBD,0xCB,0x77,0x6C,0x00,0x00,\n    0x1A,0xE3,0x6D,0xEF,0x13,0x55,0x12,0xEA,0x71,0x35,0x13,0x75,0x38,0xA9,0xA8,0xAC,\n    0xE9,0xEC,0x35,0x83,0x4D,0x4E,0x6F,0x16,0x95,0xEA,0xD1,0x90,0x06,0xB9,0x12,0x44,\n    0x1B,0xE7,0x39,0xBD,0xF3,0x83,0x00,0x03,0x89,0xB6,0xDD,0x4B,0x8A,0x9B,0x9A,0x99,\n    0x88,0xBD,0x55,0xDE,0x77,0x95,0x73,0x9D,0xE3,0x63,0xBD,0x58,0x64,0x01,0xAE,0x44,\n    0x91,0x06,0xF5,0x3C,0xE7,0x2E,0xF9,0xC4,0x80,0x00,0xE2,0x6D,0xB7,0x53,0x13,0x1B,\n    0x8A,0x9A,0x8A,0xAC,0x6F,0x7B,0xCE,0x72,0x5C,0xDD,0xE2,0xDB,0xBD,0x17,0x8B,0xBB,\n    0xB6,0xB9,0x12,0x44,0x05,0xEE,0x79,0xCE,0x01,0xC5,0x77,0x77,0x77,0x7C,0x6F,0x33,\n    0x33,0x14,0x50,0x30,0x41,0x84,0x44,0x23,0x04,0x18,0x29,0x42,0x04,0xBA,0xAA,0x6D,\n    0xDD,0x45,0x51,0x55,0xD7,0x7A,0x0C,0x5D,0xDD,0xB5,0xC8,0x92,0x20,0xDE,0xA7,0x9C,\n    0xE5,0xDF,0x38,0x90,0x00,0x1C,0x4D,0xB6,0xEA,0x61,0xEC,0x21,0x49,0xB8,0x61,0x84,\n    0x21,0x98,0x87,0x2E,0x6A,0xA5,0xBB,0xEC,0x76,0x69,0x3A,0xEE,0x76,0x6F,0xAA,0xAA,\n    0xAB,0x2F,0x91,0x21,0xBE,0x4F,0x39,0xBD,0xF3,0x83,0x00,0x03,0x89,0xB6,0xDD,0x44,\n    0xEE,0x6A,0x5D,0xD6,0x27,0x11,0x53,0x8A,0x9A,0x6A,0x09,0x84,0x65,0x4D,0x54,0xB7,\n    0x75,0x0F,0x9D,0x75,0xDC,0xEC,0xDF,0x55,0x55,0x56,0x5E,0x88,0xE8,0x1D,0xE4,0xEC,\n    0x6E,0xD5,0x6E,0xDD,0xF7,0xBD,0xEF,0x7B,0xDD,0xBC,0xCC,0xCC,0x31,0xC8,0x22,0x31,\n    0x45,0x30,0x5A,0x4E,0x14,0x13,0x06,0x12,0x86,0x82,0x96,0xEA,0xA5,0xBA,0xBE,0xC2,\n    0x02,0x69,0x3A,0xEE,0x76,0x6F,0xAA,0xAA,0xAB,0x2F,0x44,0x73,0xA0,0x75,0x56,0xC6,\n    0xED,0xDD,0xF0,0x60,0x00,0x71,0x36,0xDB,0xDE,0x26,0xA2,0x2A,0x6A,0xA6,0xA2,0x2A,\n    0x5D,0x4E,0x22,0x2F,0x13,0x88,0xC4,0x62,0x67,0x1A,0xD6,0xAE,0xF5,0x9C,0xA2,0x4D,\n    0x5E,0x33,0x63,0x34,0x8C,0x5D,0xDD,0xB5,0xC8,0x92,0x20,0x02,0xE7,0x93,0xCE,0x2B,\n    0xBB,0xBB,0xEF,0x7B,0xDE,0xF7,0xBB,0x79,0x99,0x99,0x8A,0x28,0xC1,0x06,0x12,0x50,\n    0x42,0x51,0x4D,0x42,0x06,0x11,0x82,0x09,0x97,0x54,0xDB,0xCC,0xEC,0x77,0x9D,0x7D,\n    0xBE,0xF6,0x6E,0x95,0x55,0x56,0x66,0x88,0xDE,0xD8,0x06,0xEE,0xFB,0x14,0x37,0x6E,\n    0xEE,0xEE,0xAA,0xAA,0xAA,0xB7,0x33,0x33,0x30,0xC7,0x12,0x84,0x12,0x82,0xB8,0xB2,\n    0x62,0x41,0x86,0x44,0x23,0x0D,0x04,0x66,0x44,0xAA,0xA3,0x99,0x71,0x7C,0x57,0x75,\n    0x53,0xDA,0x55,0x55,0x59,0x7A,0x07,0xDB,0xC8,0xAB,0x02,0xD5,0xDF,0x63,0xCF,0x3C,\n    0xBB,0xBB,0xBA,0xAA,0xAA,0xAA,0xF3,0x33,0x33,0x30,0xC7,0x0C,0x62,0x0A,0x09,0x82,\n    0x11,0x50,0x4C,0x00,0x60,0xB1,0x57,0x7B,0xC3,0xD3,0x27,0x77,0x81,0x17,0xA5,0x78,\n    0xBB,0xBB,0x6B,0x91,0x3D,0x51,0x08,0x2E,0x7B,0xDE,0x87,0x52,0xBB,0xBB,0xAA,0xAF,\n    0x33,0x33,0x33,0x0C,0x70,0xC1,0x09,0x47,0x0C,0x2C,0x50,0x65,0x41,0x12,0xA7,0x14,\n    0xC1,0x2E,0x7B,0xD4,0xB2,0xA2,0xB8,0xAA,0xEE,0xA7,0xB4,0xAA,0xAA,0xB2,0xFC,0x11,\n    0xD0,0x25,0xC6,0xEE,0xF3,0x77,0x6E,0xAA,0xAA,0xAA,0xB7,0x33,0x33,0x30,0xCD,0x54,\n    0x4E,0xEF,0x13,0x88,0xA9,0x88,0x55,0xAC,0xE4,0x0C,0x61,0x59,0x25,0xE3,0x2D,0x5E,\n    0x9A,0x32,0x00,0x2E,0x44,0x91,0x05,0xDE,0xE7,0x9C,0xE0,0x71,0x2E,0x00,0x00,0x36,\n    0xDB,0x6E,0xF3,0x35,0x19,0xC4,0xD5,0x4D,0x54,0x4D,0x54,0xE2,0xA6,0xA2,0xB3,0x86,\n    0x01,0x9C,0xBC,0xA9,0x2F,0x19,0x4A,0xF4,0xD1,0x90,0x01,0x72,0x24,0x88,0x00,0xB9,\n    0xE7,0x38,0x92,0x4B,0x80,0x00,0x0D,0xB6,0xDD,0x4E,0xDE,0x27,0x11,0x53,0x11,0x55,\n    0x35,0x15,0x4C,0x03,0x39,0x79,0x24,0xBC,0x65,0x2B,0xD3,0x46,0x40,0x05,0xC8,0x92,\n    0x23,0x7B,0xD4,0xF3,0x9C,0xBE,0x71,0x2E,0x00,0x00,0x36,0xF3,0x00,0xC2,0x04,0x70,\n    0xC1,0x06,0x31,0x28,0x64,0xA7,0x9D,0xEF,0x69,0xBC,0xB8,0xB8,0xA5,0x57,0x75,0x39,\n    0x7D,0x7D,0xE8,0x0B,0x91,0x37,0x83,0x17,0x7A,0xE7,0x38,0x1C,0x4B,0x80,0x00,0x0D,\n    0xB6,0xDB,0xC4,0xDD,0x44,0xD4,0x54,0xD5,0x4D,0x45,0x45,0x61,0xE7,0x33,0x55,0xA0,\n    0x31,0x87,0x73,0xAA,0xDA,0x5B,0xD3,0x0C,0x80,0x0F,0x91,0x34,0x44,0x05,0xEA,0x39,\n    0xCE,0x01,0xC5,0xC0,0x00,0x06,0xDB,0x65,0x4D,0x52,0xA9,0xBA,0x89,0xC6,0x31,0x11,\n    0x51,0x19,0xC4,0xE2,0x9E,0x80,0xBC,0xE5,0x92,0xAF,0x09,0x6B,0x7A,0x61,0x90,0x01,\n    0xF2,0x26,0xCA,0x02,0xE7,0x9C,0xE2,0x49,0x2E,0x00,0x00,0x36,0xDB,0x88,0xD3,0xA9,\n    0xC4,0x45,0x54,0x44,0x54,0xD6,0x1D,0xDD,0xDE,0x72,0x88,0x8D,0x3B,0xCA,0x5A,0xBD,\n    0x34,0x64,0x00,0x5C,0x88,0xF6,0xAA,0x14,0xC2,0x49,0x1D,0xEF,0x52,0x49,0x74,0x00,\n    0x01,0xB6,0xDE,0xAA,0x22,0x20,0x98,0x16,0x50,0x30,0x4C,0x24,0x11,0x23,0x1D,0x55,\n    0x25,0x75,0xDC,0xA7,0x77,0x35,0x39,0x7D,0x7D,0xEF,0x7B,0xDB,0xD1,0x3D,0x52,0x92,\n    0x5D,0xEF,0x40,0x0E,0x80,0x00,0x75,0xB6,0xF5,0x53,0x35,0x15,0x35,0x8C,0x4A,0xA9,\n    0x9C,0xBC,0xDD,0xDE,0x30,0x89,0xD9,0x2F,0x2B,0x59,0xDE,0x98,0xF2,0x00,0x2E,0xC4,\n    0xFB,0xF4,0x7B,0x6F,0x6D,0x55,0xED,0xA7,0x9D,0x88,0xAE,0xF7,0xBC,0xF6,0x7B,0x00,\n    0x0F,0x57,0xEC,0x00,0x06,0xDB,0x73,0x3A,0x85,0x89,0xC5,0x4D,0x45,0x4D,0x54,0xD4,\n    0xD4,0x4E,0x2B,0x18,0xDE,0xF7,0x8C,0x17,0x2A,0x99,0x9D,0x69,0xDA,0xC8,0x00,0xFD,\n    0x91,0x3D,0x9F,0x4E,0x21,0x25,0xE7,0x9B,0xED,0xDD,0xF6,0xFC,0x00,0x0F,0x1B,0xCC,\n    0x02,0x48,0x06,0x2C,0xA0,0x30,0x18,0x86,0xDB,0x86,0x61,0x82,0x6A,0xA9,0x2A,0xBA,\n    0x8A,0xC5,0x36,0xF9,0x38,0x3C,0x80,0x0B,0xDC,0x3D,0x44,0xD5,0x55,0x55,0x4C,0xD5,\n    0x4F,0xA9,0x71,0x09,0x22,0x7C,0xF2,0xFA,0x07,0x6F,0xC0,0x00,0xCC,0xCC,0xCC,0x31,\n    0xC4,0xA1,0x41,0x38,0xA1,0x18,0x24,0x41,0x95,0x11,0x54,0xD2,0x9B,0xE4,0x65,0x2B,\n    0xB9,0xE6,0x5F,0x40,0x01,0x76,0x22,0x7B,0x2A,0x22,0xEF,0x7D,0xEF,0x6F,0xBD,0x4B,\n    0xA0,0x00,0x0D,0xB7,0x4E,0x54,0x54,0xEA,0xA7,0x08,0x82,0x61,0x22,0xA1,0x52,0x02,\n    0x94,0xD3,0x57,0xC8,0xE3,0xC7,0xDB,0x75,0x99,0x9D,0xEF,0x7B,0xDE,0xE7,0xA7,0xA4,\n    0x13,0x1E,0x4F,0xAE,0x44,0x24,0x7A,0xF3,0x7E,0x78,0x1E,0x7A,0x00,0x01,0xB6,0xDC,\n    0x4A,0x8A,0x99,0x88,0xDE,0x73,0xBD,0xE7,0x05,0xCE,0xD6,0x1E,0x73,0xA6,0x90,0x00,\n    0x3F,0x22,0x3D,0x54,0xFA,0x97,0x10,0x17,0xE7,0x77,0xDE,0x87,0x7C,0x00,0x01,0xB6,\n    0xDC,0xAA,0x9C,0x54,0xD5,0x4B,0xC6,0x25,0xD4,0xE3,0x58,0x89,0xC5,0x1B,0x0D,0xE1,\n    0xDC,0x46,0xC5,0xA6,0x90,0x00,0x3E,0xC4,0x44,0xF9,0x55,0x53,0xE4,0xAB,0xDF,0x9C,\n    0xD7,0x39,0x7C,0xF3,0xC0,0x00,0x6D,0xB7,0x10,0x63,0x11,0x33,0x18,0xDE,0x5D,0xDE,\n    0x70,0x88,0x8D,0xB5,0xA6,0x90,0x00,0x3F,0x3C,0x99,0x8F,0x27,0xD7,0x22,0x38,0xDA,\n    0xF5,0xE5,0xDF,0x81,0xE7,0xA0,0x00,0x1B,0x6E,0x1C,0x4C,0x42,0xC5,0x62,0x67,0x0F,\n    0x2E,0xEF,0x66,0x5D,0xA5,0x85,0xA6,0xD8,0x00,0x3F,0x5E,0xA2,0x66,0x26,0x3D,0x4F,\n    0xA8,0x6D,0xB5,0xEB,0xB7,0x77,0x7D,0xF5,0xE8,0x00,0x1B,0x6E,0x08,0x54,0xB7,0xBD,\n    0xDE,0x53,0x49,0x68,0x6F,0x00,0x00,0xFD,0x7A,0xAA,0xAA,0xAA,0xAA,0xF6,0xEA,0x8A,\n    0xF6,0x4F,0xB1,0xF2,0xB9,0xC7,0xEC,0xF5,0xE8,0x03,0xD7,0xB0,0x00,0x06,0xDB,0xC9,\n    0x71,0x88,0xA5,0x94,0x06,0x1D,0xDD,0x96,0xD6,0x00,0x01,0xFA,0x89,0xF5,0xEA,0x52,\n    0x4B,0xCE,0xF6,0xEE,0xEF,0xBE,0x00,0x01,0xE3,0x6D,0x5E,0xDD,0x36,0x92,0xBC,0xD4,\n    0x42,0xBB,0x56,0xD6,0x00,0x01,0xFB,0x3D,0x4C,0x79,0x3E,0xCE,0x44,0x37,0xEB,0xCD,\n    0x79,0xBD,0xF9,0xE7,0xA0,0x00,0x3D,0x36,0xDC,0xA3,0x13,0x8B,0xC4,0xE7,0x19,0x40,\n    0x19,0xA7,0x76,0xAD,0xAC,0x00,0x03,0xF5,0xEA,0x63,0xD4,0xB4,0x91,0xE7,0x6F,0xA0,\n    0x77,0xC0,0x00,0x1B,0x6F,0x2E,0x6A,0x2A,0x56,0x29,0x63,0x08,0x03,0x35,0x10,0xED,\n    0x16,0xD6,0x00,0x01,0xF9,0xE4,0xC7,0x92,0xE2,0x11,0x7E,0x77,0x7D,0xBE,0x9D,0xF0,\n    0x00,0x06,0xDB,0x07,0x38,0xDD,0xEF,0x3B,0x5B,0x36,0x4C,0x30,0x18,0x00,0x03,0xF3,\n    0xC9,0x8F,0x25,0xA4,0x8F,0x3B,0x7D,0x03,0xBE,0x00,0x00,0xDB,0x7B,0x29,0xCD,0x62,\n    0x2A,0xAE,0x96,0x40,0x33,0x4C,0x0B,0x6B,0x00,0x00,0xFC,0xF2,0x63,0xC9,0xF5,0xC6,\n    0xDA,0xEE,0xFB,0x77,0x7D,0xF0,0x00,0x05,0xE9,0xB3,0x4E,0x27,0x09,0x01,0x77,0x4F,\n    0x01,0xB6,0x60,0x00,0x1F,0xAF,0x53,0x1E,0xA7,0xD2,0xE5,0x37,0xDD,0x77,0x7B,0xDF,\n    0x7C,0x00,0x03,0xCF,0x4D,0xB8,0x95,0x09,0x5D,0xDD,0xC3,0x03,0x6C,0xC0,0x00,0x3F,\n    0x22,0x7C,0x9F,0x21,0xA4,0x8E,0x6F,0x97,0x77,0xCE,0x80,0x00,0xBC,0x6C,0x71,0x18,\n    0xC6,0x31,0x84,0xAE,0xF7,0x66,0x30,0xD2,0x4D,0x00,0x00,0xBC,0x89,0xF2,0x55,0xDE,\n    0xDE,0x9B,0xBB,0x7C,0x00,0x01,0x75,0xB2,0x35,0x80,0xBB,0xD3,0x86,0x81,0x80,0x00,\n    0x3E,0xC4,0xF6,0x55,0xDB,0xCB,0x7B,0xDB,0xE0,0x00,0x1C,0xEB,0x6E,0x68,0x37,0xBD,\n    0x6D,0xB0,0x60,0x00,0x0F,0xB1,0x3D,0x9F,0x2E,0xF9,0xCE,0x73,0x7B,0xE7,0x40,0x00,\n    0xEF,0x8D,0xB8,0x53,0x54,0x95,0xDD,0xDD,0x53,0x01,0x80,0x00,0x3F,0x22,0x7C,0x84,\n    0x03,0xD3,0xDE,0xF6,0xF8,0x00,0x07,0x3A,0xDB,0x85,0x4B,0x17,0xAC,0x69,0x68,0x2F,\n    0x70,0xC4,0x98,0x00,0x03,0xEC,0x49,0x7B,0xD6,0x4D,0x1B,0x1B,0x00,0x05,0xC6,0xD8,\n    0x63,0x15,0x08,0x03,0x70,0xEC,0x4C,0x00,0x01,0xF2,0x27,0xCF,0x1A,0x57,0x97,0xAD,\n    0x37,0xDE,0x80,0x02,0xF1,0xB7,0x32,0xB7,0xBD,0xEF,0x6A,0xA1,0x99,0x6C,0x00,0x01,\n    0xF9,0x13,0xD9,0x50,0x1B,0xCA,0xD6,0x92,0xE7,0x00,0x01,0x75,0xB6,0x8C,0x5E,0x71,\n    0x59,0xBB,0xBD,0xAA,0x66,0x46,0x00,0x00,0xFB,0x13,0xD9,0x40,0x65,0x6B,0x5A,0x5C,\n    0xE0,0x00,0x73,0xAD,0xBB,0x8A,0x58,0xDE,0xF7,0xB5,0x4C,0xC8,0xC0,0x00,0x1F,0x62,\n    0x75,0xA0,0x35,0xA1,0xB0,0x00,0x7C,0x6D,0xDA,0xB8,0xAB,0xBB,0xBD,0xE9,0x63,0x19,\n    0x66,0xD3,0x6C,0x00,0x1F,0x22,0x75,0x8E,0x24,0xB6,0x97,0x38,0x00,0x0D,0xB6,0xF5,\n    0xA5,0x8A,0x33,0xBD,0xEB,0x3B,0xCE,0x77,0xAB,0xBD,0xAA,0x66,0x4D,0xB3,0x00,0x00,\n    0xF9,0x13,0xD9,0x57,0x7B,0xEF,0x37,0xCE,0x07,0x3A,0x00,0x03,0x6D,0xBD,0x4D,0x22,\n    0xEE,0xF7,0x95,0x79,0x78,0xC9,0x6D,0x60,0x00,0x1F,0x62,0x7B,0x2A,0xEF,0x7D,0xE6,\n    0xF9,0xC0,0xE7,0x40,0x00,0x6D,0xB6,0x49,0x15,0x57,0x0A,0xA3,0x58,0x03,0x59,0x33,\n    0x97,0x7A,0x4D,0x00,0x01,0xD8,0x9E,0xC9,0xDE,0xF3,0x3C,0xE7,0x39,0xCE,0x80,0x00,\n    0x92,0x4C,0xA9,0x54,0x8C,0x6B,0x58,0xDE,0xF6,0x1A,0xCC,0x63,0x0C,0x43,0x40,0x00,\n    0x76,0x27,0x37,0x5A,0xE7,0x1E,0xDB,0x07,0xC0,0x00,0x12,0x48,0x2A,0x9D,0x6B,0x48,\n    0x35,0xAC,0xEF,0x0D,0x64,0x69,0x00,0x07,0x22,0x7D,0xFA,0x3D,0x47,0xB4,0xC3,0xCC,\n    0xF3,0x9B,0xDF,0x3C,0xF0,0x00,0x12,0x4B,0xD6,0x2F,0x19,0xDE,0xF7,0x9C,0x99,0xCB,\n    0x7A,0x4D,0x00,0x01,0xEA,0x26,0xF5,0xCE,0x3D,0x37,0x6D,0xF0,0x00,0x04,0x92,0x21,\n    0xC5,0x51,0x9C,0xE2,0xEE,0xF7,0x95,0x9C,0xB3,0x43,0x40,0x00,0x72,0x26,0xF7,0xBD,\n    0xB5,0xB5,0x77,0x69,0x80,0x00,0x92,0x59,0xE6,0x31,0x55,0x9A,0xC2,0x33,0x7B,0xDE,\n    0x6D,0x65,0xAC,0xA6,0xD8,0x00,0x72,0x27,0x1C,0x2E,0xF5,0xCD,0xED,0x5D,0xDA,0xE7,\n    0x00,0x01,0x25,0x7B,0x8D,0x42,0x35,0xA7,0x1B,0xC6,0xA3,0x59,0x0C,0x5C,0x0E,0xC4,\n    0xDB,0x00,0x0E,0x44,0xFC,0x57,0x2E,0xF1,0x1D,0xE7,0x39,0x77,0xCE,0x74,0x00,0x04,\n    0x93,0xCD,0x45,0xD6,0x30,0x63,0x7B,0xC6,0xF6,0xD9,0x96,0x37,0x80,0x00,0xEC,0x4E,\n    0xB5,0xAE,0x24,0xAE,0xED,0x30,0x00,0x12,0x4A,0xA8,0xBD,0xEF,0x78,0x2D,0x19,0x12,\n    0x40,0x00,0xE2,0x6F,0x5A,0x6B,0x49,0x5D,0xA6,0x00,0x02,0x4A,0xF8,0xE3,0x79,0x35,\n    0x9B,0xBB,0xD2,0xAC,0xE5,0xAD,0xA6,0x80,0x00,0xE4,0x4F,0xAD,0x6B,0x9D,0xE7,0x39,\n    0xC0,0xE7,0x40,0x00,0x6D,0xB6,0xA2,0xA2,0x96,0x2A,0xAB,0x08,0x00,0xD6,0xB3,0x96,\n    0x24,0xD8,0x00,0x1D,0x89,0xD4,0x6B,0x5C,0xE3,0x6C,0x07,0xC0,0x00,0x1B,0x6D,0xCD,\n    0x0A,0x2B,0x19,0xAC,0xA0,0x37,0x71,0xAD,0x06,0x9E,0x32,0x9B,0x60,0x01,0xC8,0x9B,\n    0x88,0xDE,0xF7,0xCE,0x3B,0x60,0x3E,0x00,0x00,0xDB,0x6C,0xA9,0x58,0xC5,0x6F,0x39,\n    0x98,0xAC,0xE2,0x71,0xAA,0x45,0x9B,0xBD,0x51,0x50,0xD6,0x53,0x48,0x00,0x39,0x13,\n    0x71,0xBD,0x3E,0x3D,0xBB,0x63,0xE0,0x00,0x0D,0xB6,0xE2,0x0A,0x88,0x55,0x38,0xA8,\n    0x40,0x1B,0xD6,0xB1,0x9A,0x69,0x26,0xC0,0x00,0xE4,0x4D,0xCE,0xB5,0xCE,0x3D,0xB6,\n    0x0F,0x80,0x00,0x36,0xDB,0x89,0x82,0xA2,0x2A,0x9A,0x00,0xBD,0x68,0x37,0xBC,0x3D,\n    0x26,0xC0,0x00,0xE4,0x4D,0xDE,0xF7,0xCE,0x3B,0xB6,0x0F,0x80,0x00,0x36,0xDB,0x87,\n    0x53,0xAC,0x62,0x5D,0x4E,0x71,0x88,0x98,0xCA,0x36,0x17,0xAD,0x3C,0xCE,0xA8,0x5A,\n    0x4D,0x80,0x01,0xC8,0x9B,0x88,0xBD,0xEF,0x9C,0x77,0x6C,0x1F,0x00,0x00,0x6D,0xB7,\n    0x11,0x11,0x75,0x13,0x51,0xAC,0x44,0x65,0xB3,0x66,0xEC,0xDB,0xCC,0x9A,0xC2,0xCE,\n    0xB4,0xD2,0x00,0x0E,0x44,0x79,0x51,0xA2,0x20,0x32,0x71,0xDD,0xDD,0xDB,0xE0,0x00,\n    0x0B,0xAD,0xB8,0x8B,0xA9,0x2A,0x62,0x37,0x51,0x39,0xA9,0xAA,0xCC,0xBE,0x5D,0xD4,\n    0xDA,0x1D,0xEB,0xBA,0xCC,0xC7,0x77,0x77,0x77,0xA2,0x2A,0x2A,0xAB,0x6F,0x9C,0xE7,\n    0x2E,0xF7,0x6E,0xEE,0xEE,0xD3,0x6D,0xBB,0xA9,0x8A,0xD3,0x66,0x40,0xD6,0x9E,0xB4,\n    0x1A,0x4C,0x69,0x24,0x92,0xE4,0x4F,0xA8,0xBB,0xBE,0xF7,0x9C,0xBB,0xBE,0x70,0xEA,\n    0x49,0x24,0x9B,0x6D,0xD5,0x44,0xD3,0x77,0x77,0xBB,0xD6,0xB0,0xEB,0x54,0x1A,0x6C,\n    0x69,0x24,0xAE,0xFC,0x11,0x51,0x55,0x5B,0xB9,0x55,0x55,0x99,0xDD,0xBB,0xBB,0xBB,\n    0xBC,0xCC,0xCC,0xE8,0x27,0x10,0x45,0x5A,0x59,0x77,0x6A,0xCD,0xED,0x6A,0x77,0x49,\n    0x68,0x63,0x49,0x24,0x97,0x22,0x6E,0x6E,0xF7,0xCE,0x3B,0xBB,0x63,0x38,0x92,0x49,\n    0x2C,0xCC,0xCC,0xEC,0xA8,0x4B,0xB9,0x97,0x37,0x76,0x26,0x53,0x35,0x57,0x79,0xDC,\n    0xBB,0xBB,0xBB,0xBD,0x11,0x51,0x55,0x55,0xBA,0xC0,0x06,0x71,0x24,0x92,0x4D,0xB6,\n    0xEE,0xA2,0x1D,0x4E,0x1E,0x26,0x23,0x35,0x9C,0x00,0x5E,0xB4,0xF3,0x3A,0xAB,0x5A,\n    0x4C,0x69,0x24,0x92,0xE4,0x4D,0xC4,0x5E,0xF9,0xC7,0xBD,0xBB,0x6C,0xE2,0x49,0x24,\n    0x9B,0x6D,0xC4,0x21,0xB8,0x44,0x08,0x46,0x21,0xAE,0xF7,0xBD,0xA9,0x9C,0x71,0x26,\n    0xBB,0x37,0x9D,0xCB,0xBB,0xBB,0xBB,0xD1,0x14,0x05,0x55,0x56,0xF1,0x80,0x0C,0xE2,\n    0x49,0x24,0x9B,0x6D,0xCC,0xD5,0x44,0xD5,0x44,0xAA,0x97,0x51,0x18,0x40,0x16,0x6F,\n    0x6E,0x62,0x6E,0x9B,0x73,0x79,0xDC,0xBB,0xBB,0xBB,0xBD,0x11,0x40,0x4C,0xEE,0xE7,\n    0x33,0x3B,0xDC,0xEE,0xDD,0xDD,0xDD,0xDE,0x66,0x66,0x01,0x98,0xA2,0x20,0x90,0x31,\n    0x37,0x97,0x77,0x7C,0xEF,0x38,0xE4,0xF7,0x97,0x79,0xDC,0xBB,0xBB,0xBB,0xBD,0x11,\n    0xEA,0x15,0xDA,0xBB,0xEF,0x79,0x77,0xC0,0xE1,0xD4,0x92,0x49,0x36,0xDB,0x98,0x9B,\n    0xDE,0xF7,0xBD,0xEB,0x46,0x67,0x54,0xDE,0x93,0x1A,0x49,0x24,0xBD,0xAF,0x26,0x08,\n    0x8D,0xEF,0xBD,0xE6,0xF9,0xC0,0xE1,0xD4,0x92,0x49,0x36,0xDB,0x89,0x98,0x6B,0x11,\n    0x18,0x40,0x17,0xAD,0x62,0x73,0x56,0xD2,0x63,0x49,0x24,0x97,0x22,0x7D,0xB8,0x88,\n    0xD7,0x7B,0xCD,0x73,0x9C,0x38,0x75,0x24,0x92,0x4D,0xB6,0xE2,0x1D,0x44,0x4A,0xA8,\n    0x9C,0x54,0x42,0x00,0xD9,0xBD,0xE6,0x75,0x43,0xB4,0xC6,0x92,0x49,0x2E,0xC4,0xDC,\n    0x46,0xB5,0xCE,0x3D,0xB6,0x0C,0xE2,0x49,0x24,0x9B,0x6D,0xC4,0x38,0xA8,0x89,0xAA,\n    0x89,0x71,0x51,0x0F,0x2D,0x24,0x8D,0x6B,0x13,0x9A,0xB4,0x93,0x1A,0x49,0x24,0xB9,\n    0x13,0xAB,0x88,0xBC,0x5D,0xF3,0x8C,0x00,0x67,0x12,0x49,0x5D,0xE6,0x66,0x67,0x48,\n    0x82,0x62,0xC1,0x10,0x4C,0x13,0x11,0x8B,0x2E,0xEE,0xFB,0x33,0x6E,0x3B,0xC5,0x6E,\n    0x6F,0x3B,0x96,0x92,0x49,0x72,0x26,0xE2,0x2F,0x7B,0xE7,0x1D,0xDB,0x06,0x71,0x24,\n    0x92,0x4D,0xB6,0xE2,0x0A,0x88,0x97,0x52,0xE8,0x42,0x25,0x65,0xDD,0xDF,0x66,0x54,\n    0x33,0xDE,0xDD,0xE7,0x72,0xEE,0xEE,0xEE,0xF4,0x45,0x54,0xEE,0xE7,0x39,0x99,0xDC,\n    0xEE,0xDD,0xDD,0xDD,0xDE,0x66,0x66,0x01,0x64,0x46,0x11,0x04,0xC1,0x56,0xE2,0x17,\n    0x7B,0xDE,0xF2,0x65,0x47,0x25,0x75,0xE5,0xE7,0x72,0xEE,0xEE,0xEE,0xF4,0x45,0x01,\n    0x55,0xBB,0x9C,0xE7,0x33,0x33,0xBB,0x77,0x77,0x77,0x79,0x99,0x99,0x64,0x46,0x25,\n    0x04,0x80,0x42,0x40,0x1B,0x42,0x13,0x49,0x3E,0xF7,0xBD,0xEC,0xCA,0x86,0x7B,0xDC,\n    0xBC,0xEE,0x5D,0xDD,0xDD,0xDE,0x88,0xA0,0x2A,0x77,0x73,0x9C,0xCC,0xEE,0x77,0x6E,\n    0xEE,0xEE,0xEF,0x33,0x33,0x00,0xB2,0x23,0x08,0x10,0x41,0x8C,0x2D,0x65,0xDD,0xDF,\n    0x66,0x71,0x39,0xA4,0x92,0x63,0x49,0x24,0x97,0x22,0x7B,0x04,0x45,0xDD,0xF7,0xBC,\n    0xBE,0x01,0xC3,0xA9,0x24,0x92,0x6D,0xE6,0x01,0x86,0x0E,0x28,0x00,0x98,0x26,0x23,\n    0x32,0xEE,0xEE,0xA6,0x54,0x33,0x77,0x77,0x9D,0xCB,0xBB,0xBB,0xBB,0xF0,0x0F,0x61,\n    0x1D,0x02,0xAA,0xBC,0xF3,0x6B,0x7B,0xDE,0xEF,0x7C,0xBB,0xBB,0xBB,0xBC,0xCC,0xCC,\n    0x88,0x38,0xA0,0xE2,0x10,0x4C,0x13,0x0C,0xC3,0x69,0x2C,0xCB,0xBB,0xBB,0x99,0x50,\n    0xCD,0xDD,0xDE,0x77,0x2E,0xEE,0xEE,0xEF,0x44,0x79,0xD0,0x2A,0xAB,0xCF,0x36,0xB7,\n    0xA1,0xC3,0xA9,0x24,0x92,0x6D,0xB7,0x10,0xEA,0x21,0xD4,0xE2,0xA6,0x15,0x4E,0x63,\n    0x2D,0x24,0x8D,0x6A,0xF5,0xAC,0x05,0xE7,0x72,0xEE,0xEE,0xEE,0xFC,0x10,0xF7,0x73,\n    0x33,0x2B,0x33,0xBB,0x77,0x77,0x77,0x79,0x99,0x99,0x98,0x80,0x24,0x42,0x22,0x6B,\n    0x18,0xC6,0x18,0x01,0xAD,0x62,0x73,0x40,0x36,0x34,0x92,0x49,0x72,0x26,0xE2,0x2F,\n    0x7C,0xE3,0xDE,0xDD,0xB6,0x6D,0xDD,0xDD,0xDD,0xE6,0x66,0x64,0x40,0x18,0x60,0x98,\n    0x26,0xEA,0xAA,0xB9,0x32,0xA1,0x9A,0xCE,0xE6,0x77,0x2E,0xEE,0xEE,0xEF,0x44,0x3D,\n    0xDC,0xCC,0xCA,0xCC,0xEE,0xDD,0xDD,0xDD,0xDE,0x66,0x66,0x64,0x5D,0x55,0x55,0x4C,\n    0xD4,0xCA,0xCE,0xE6,0x77,0x2E,0xEE,0xEE,0xEF,0x44,0x72,0x77,0x73,0x39,0x95,0x99,\n    0xDD,0xBB,0xBB,0xBB,0xBC,0xCC,0xCC,0xC1,0x75,0x55,0x55,0x33,0x53,0x2B,0x3B,0x8C,\n    0x69,0x24,0x92,0xE4,0x4E,0xE3,0x5C,0xE3,0x7B,0x76,0xD9,0xC4,0x92,0x49,0x36,0xDB,\n    0x6E,0x29,0x80,0x1A,0xD6,0x73,0x60,0xD8,0xD2,0x49,0x25,0xC8,0x9D,0xEF,0x7C,0xE3,\n    0x77,0x76,0xD9,0xC4,0x92,0x49,0x36,0xDB,0x2A,0x5D,0x55,0x57,0x33,0x9C,0x62,0x4D,\n    0x73,0xB9,0x9D,0xCB,0xBB,0xBB,0xBB,0xD1,0x15,0x15,0x5B,0xB9,0xCE,0x73,0x33,0x3B,\n    0xB7,0x77,0x77,0x69,0xB6,0xDC,0x43,0x54,0xE8,0x00,0xD6,0xB0,0x56,0xAA,0xCD,0x36,\n    0x34,0x92,0x49,0x72,0x23,0xD9,0x50,0x48,0x1E,0x79,0xB5,0x55,0x5B,0xBD,0xF2,0xEE,\n    0xEE,0xEE,0xF3,0x33,0x30,0x61,0x05,0x1C,0x61,0x26,0xDB,0xA1,0x55,0x4A,0xB0,0xB2,\n    0x1A,0x6C,0x49,0x24,0x92,0xE4,0x4F,0x49,0x2F,0xBD,0xE6,0xF7,0xCB,0xE7,0x0E,0xA4,\n    0x92,0x49,0xB6,0xD3,0x75,0x18,0x08,0x93,0x55,0x54,0xDD,0x56,0x2E,0x1E,0xCC,0xE6,\n    0x77,0x2E,0xEE,0xEE,0xEF,0xC1,0x1C,0xA0,0x0D,0x53,0xDD,0xC7,0x55,0x59,0x9D,0xDB,\n    0xBB,0xBB,0xBB,0xCC,0xCC,0xC1,0x83,0x12,0x55,0x55,0x55,0x33,0x9D,0xED,0x53,0x73,\n    0x99,0xDC,0xBB,0xBB,0xBB,0xBD,0x03,0xD0,0x8A,0xAA,0xF3,0xCD,0xDA,0xAA,0xDD,0xEF,\n    0x97,0x77,0x77,0x77,0x99,0x99,0x98,0x62,0x80,0xC3,0x04,0xC2,0x31,0x28,0x21,0x19,\n    0x02,0xEE,0x35,0xA7,0x92,0x77,0x18,0x4B,0x6E,0xC6,0x92,0x49,0x2E,0x44,0x7B,0x85,\n    0x47,0x8A,0x42,0xE2,0x3C,0xF3,0xB7,0xD0,0xEA,0x3C,0x49,0x24,0x93,0x6D,0xBD,0xC4,\n    0xBA,0x89,0x75,0x38,0xA9,0xCE,0x71,0x39,0xCC,0x56,0x22,0x32,0x00,0x46,0xB4,0xF2,\n    0x4E,0xF0,0x96,0xDD,0x8D,0x24,0x92,0x5D,0x89,0xF0,0x9B,0xBD,0xC4,0x77,0xBC,0xBE,\n    0x07,0x11,0xD4,0x92,0x49,0x36,0xDB,0xDC,0x4C,0x45,0x3C,0x4E,0x22,0xA7,0x14,0xC0,\n    0x08,0xD6,0x9E,0x49,0xDE,0x12,0xDB,0xB1,0xA4,0x92,0x4B,0xB1,0x3E,0x47,0xB4,0xA4,\n    0x2E,0x23,0xCF,0x3B,0x7D,0x0E,0xA3,0xC4,0x92,0x49,0x36,0xDB,0x77,0x11,0x35,0x53,\n    0x55,0x38,0xA9,0xA9,0xA8,0x8C,0x30,0x02,0x35,0xA6,0xA7,0x7B,0x4B,0x6E,0xC6,0x92,\n    0x49,0x2F,0x22,0x3D,0x95,0x17,0x17,0x7B,0x88,0xEF,0x79,0xC0,0x38,0x8E,0xA4,0x92,\n    0x49,0xB6,0xDC,0x6E,0x6A,0xA2,0x66,0x29,0x5D,0xDD,0xEF,0x5A,0x59,0x27,0x78,0x6B,\n    0x6E,0xC6,0x92,0x49,0x2E,0x44,0x7B,0xFD,0x47,0x96,0xA8,0xB8,0x8F,0x3C,0xED,0xF4,\n    0x3A,0x8F,0x12,0x49,0x24,0xDB,0x6F,0x71,0x2E,0xA2,0x6A,0xA2,0x71,0x87,0x99,0x9C,\n    0xE7,0x20,0x19,0xCB,0x53,0xA4,0x96,0xDD,0x8D,0x24,0x92,0x5D,0x89,0xF0,0x02,0xE2,\n    0x3C,0xF3,0x7B,0xDE,0xF7,0x6F,0xBE,0x5D,0xDD,0xDD,0xDE,0x66,0x66,0x70,0x46,0x11,\n    0x09,0x04,0x21,0x25,0x10,0x96,0x77,0xBD,0xED,0x4E,0x9A,0x9D,0xED,0x2D,0xBB,0x1A,\n    0x49,0x24,0xBB,0x13,0x7B,0xDE,0xA2,0x39,0xC7,0x6C,0x1A,0x38,0x92,0x49,0x26,0xDB,\n    0x6E,0xE2,0x62,0x1D,0x4D,0x54,0x46,0x73,0x90,0x0B,0xD6,0x9A,0x9D,0xED,0x2D,0xBB,\n    0x1A,0x49,0x24,0xB9,0x11,0xEF,0xF5,0x00,0x17,0x11,0xDE,0xF0,0x03,0x88,0xEA,0x49,\n    0x24,0x9B,0x6D,0xEE,0x25,0x54,0xCC,0xD5,0x44,0x61,0xE4,0x02,0xF5,0xA6,0xA7,0x7B,\n    0x4B,0x6E,0xC6,0x92,0x49,0x2E,0x44,0xF6,0xEE,0xF7,0x11,0xDE,0xF3,0x80,0x71,0x1D,\n    0x49,0x24,0x93,0xCC,0xCC,0x1C,0x8C,0x22,0x12,0x51,0x8D,0x41,0x30,0x52,0x10,0x8B,\n    0x7D,0xEF,0x7B,0xD9,0x9C,0xB8,0xE7,0x2E,0xF9,0x95,0xDC,0x49,0x24,0x97,0x62,0x6E,\n    0xEA,0xAE,0xF7,0x31,0xCE,0x30,0x06,0x8E,0x24,0x92,0x49,0xB6,0xDE,0xE5,0xD4,0xD5,\n    0x44,0xD5,0x4C,0x4D,0x30,0x03,0x5A,0x6A,0x77,0xB4,0xB6,0xEC,0x69,0x24,0x92,0xE4,\n    0x4E,0xB5,0x98,0x8E,0x71,0xB6,0x0D,0x1C,0x49,0x24,0x93,0x6D,0xBD,0xCD,0x3C,0x4E,\n    0x2A,0x66,0x22,0xB0,0xC0,0x33,0x96,0xA7,0x49,0x2D,0xBB,0x1A,0x49,0x24,0xBD,0xBF,\n    0xB3,0x1E,0xD7,0xB7,0xB6,0xDA,0x88,0xF5,0xEB,0xC0,0x0F,0x11,0xE9,0x24,0x92,0x4D,\n    0xB6,0xB7,0x13,0x55,0x13,0x55,0x13,0x55,0x32,0xF0,0xC0,0x33,0x96,0xA7,0x49,0x2D,\n    0xBB,0x1A,0x49,0x24,0xBD,0x7A,0x99,0xF5,0x08,0x2E,0x23,0xCF,0x3B,0x7D,0x0E,0xA3,\n    0xC4,0x92,0x49,0x36,0xDE,0xA5,0x2A,0xC4,0x4E,0x2A,0x22,0x5D,0x44,0x00,0x5E,0xB4,\n    0xEE,0x76,0x23,0x6E,0xC6,0x92,0x49,0x2F,0x3C,0x9F,0x2A,0x2B,0xC0,0xB8,0x8C,0xF9,\n    0xDE,0xF4,0x3A,0x8F,0x12,0x49,0x24,0xDB,0x7A,0x98,0x87,0x53,0x11,0x55,0x29,0xE6,\n    0x2B,0x31,0x00,0x18,0x7B,0x9C,0x82,0xDB,0xB1,0x24,0x92,0x4B,0xCF,0x26,0x3C,0xDE,\n    0xA2,0x3B,0xCE,0x73,0x97,0xC0,0xEA,0x49,0x24,0xBC,0x6D,0x91,0xB9,0x88,0x6F,0x75,\n    0x90,0xD1,0x79,0x77,0x1B,0xDE,0xC5,0x6C,0x4B,0x77,0xBB,0xDD,0xEE,0xF7,0x7B,0xBD,\n    0xDE,0xF7,0x7B,0x16,0xBD,0x8E,0x07,0x07,0x87,0x6A,0xD5,0xAB,0x56,0xAD,0x63,0x73,\n    0xF9,0xFC,0xFE,0x7F,0x3F,0x9F,0xC1,0x93,0x93,0xCA,0xE5,0x7B,0x9C,0xBF,0xC2,0xF6,\n    0xB0,0xB0,0xB0,0xB0,0xB0,0xB0,0xBF,0x03,0x0B,0x0B,0x77,0xBB,0xDD,0xEE,0xEE,0xEE,\n    0xEF,0xDE,0xE6,0x66,0x60,0xA8,0x84,0x44,0x0A,0xAA,0xA5,0x7C,0x89,0x9A,0xEE,0x56,\n    0x76,0xEE,0xEE,0xEE,0xEE,0xFD,0xEF,0xB0,0x92,0xE7,0x39,0xCE,0x73,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x35,\n    0x1A,0x2E,0x4F,0xFE,0x2E,0xE4,0x8A,0x70,0xA1,0x20,0xFE,0xDD,0x1A,0x6C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_a0c8a2aef4c14b17288aa20f1f40bf5e4b0a6fce85656af225970ef4cb6887c7) == 17198, \"Wrong size of locale's blob\");\n\n/* zh_CN.GB18030 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_524a5acc4e77a82c0eaf48d52ff2e69d3533829a187e1d52f76000ec430eee2f[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0xF9,0xA3,0xD9,0xCA,0xC7,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0xA3,0xEE,0xA3,0xCE,0xB2,0xBB,0xB7,0xF1,0x5D,0x2E,0x2A,0x0A,0xCA,0xC7,\n    0x0A,0xB7,0xF1,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_524a5acc4e77a82c0eaf48d52ff2e69d3533829a187e1d52f76000ec430eee2f) == 36, \"Wrong size of locale's blob\");\n\n/* zh_CN.GB18030 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_832fb156d79a90e895db6462acb91bf7502cc696051884c528c8ac36a87021d7[] = {\n    0x43,0x4E,0x59,0x20,0x0A,0xA3,0xA4,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_832fb156d79a90e895db6462acb91bf7502cc696051884c528c8ac36a87021d7) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.GB18030 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_65806b2b8bceb79c42313705ed31797501b2c7d43c27a4adf0384d2c5221d40c[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFF,0xE4,0xF1,0x4C,0x00,0x00,\n    0x20,0xDF,0x9F,0x80,0x10,0x42,0x00,0xFF,0xF0,0x20,0x62,0x0C,0x70,0x36,0x02,0x40,\n    0x00,0x00,0x01,0x61,0x89,0x3F,0xF9,0xD7,0x10,0x82,0x98,0x00,0x23,0x30,0x00,0xB5,\n    0xB4,0x41,0x29,0xE9,0x0C,0x9A,0x30,0x9A,0x68,0x68,0xC9,0xA6,0x9B,0x49,0x9A,0x09,\n    0x84,0x19,0x00,0x1A,0x9E,0x95,0x34,0xDA,0x26,0x6A,0x0D,0x00,0x00,0x06,0x87,0xA8,\n    0x00,0x03,0x27,0xA8,0x24,0xA4,0x87,0xA8,0x00,0x00,0x00,0x00,0x1A,0x00,0x01,0x99,\n    0x4C,0x2F,0xAE,0x08,0x69,0x45,0x1B,0x27,0xC1,0x3C,0xC9,0x24,0x8C,0xD8,0xA9,0x48,\n    0x13,0x15,0x07,0x11,0x8C,0x85,0x38,0x8E,0x04,0x44,0xB5,0xB2,0x05,0xAF,0xE8,0xCE,\n    0xE9,0xA4,0x83,0x94,0x68,0x44,0x02,0x01,0xC0,0x82,0x24,0x97,0xB3,0x89,0xC0,0x88,\n    0xBF,0x20,0x35,0x96,0x24,0xA5,0xED,0xC7,0x2C,0xA2,0x63,0x10,0x8C,0xC9,0x98,0x00,\n    0x26,0x30,0x1A,0xCF,0x42,0x80,0x63,0x1D,0xC0,0x80,0x6C,0x62,0x80,0x92,0xC4,0xE4,\n    0x0A,0x3B,0x31,0x05,0x3F,0x07,0xD4,0xA5,0x8E,0x4A,0x14,0xC4,0x50,0xA8,0x0E,0xC5,\n    0x08,0xEE,0x0A,0x11,0x72,0x34,0x9C,0x80,0x1E,0x22,0xB0,0x95,0xC1,0xA2,0xA8,0x68,\n    0x68,0xA2,0xA7,0x83,0xE2,0x22,0x12,0x13,0x23,0x97,0xE7,0x20,0x78,0xA5,0x3D,0xE0,\n    0xD0,0x78,0xBF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x7F,0xF2,0x78,0xA6,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_65806b2b8bceb79c42313705ed31797501b2c7d43c27a4adf0384d2c5221d40c) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.GB2312 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_222cd6c83d3325f93e25cbee51b996d0a6bb59ecc6da4a8283635004538449e6[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xA4,0x80,0x51,0x03,0x00,0x0B,\n    0xF9,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x06,0x3F,0x61,0x80,0xC0,0xF2,0xA7,0x40,0x00,0x5C,0xEE,0x38,\n    0x25,0x54,0xFF,0x55,0x52,0x64,0x60,0x4C,0x00,0x00,0x00,0x00,0x00,0x09,0x82,0x60,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0x4F,0xFF,0xD5,0x54,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xA6,0x80,0x00,0x12,0xA5,0x50,0x7A,\n    0x86,0x83,0xDE,0xA9,0x1F,0xAA,0x01,0xA1,0xA3,0x6A,0x06,0x20,0x06,0x80,0x01,0xA0,\n    0x01,0xA0,0x0F,0xFF,0x55,0x53,0x40,0xD0,0x0D,0x00,0x00,0x06,0x80,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xA2,0x4C,0x00,\n    0x13,0x00,0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0xCF,0xDA,0xAA,0xA0,0x0D,0x06,0x86,0x98,0x9A,0x00,0x34,0x03,0x40,0xD3,0x41,0xA6,\n    0x80,0x00,0xD1,0xA0,0x68,0x00,0x1A,0x31,0x00,0x0C,0x43,0x40,0x1A,0x07,0xFA,0xA8,\n    0x01,0x90,0x00,0x0D,0x01,0xA0,0x1A,0x68,0xC4,0x1A,0x03,0x20,0xD0,0x00,0x06,0x8D,\n    0x00,0x00,0x0D,0x00,0x34,0x09,0x30,0x00,0x4C,0x00,0x04,0xC0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x26,0xA4,0x49,0x27,0xA9,0x33,0xD5,0x3D,\n    0x4C,0x93,0x26,0x26,0x98,0x00,0x86,0x80,0x60,0x9A,0x68,0xD1,0x93,0x26,0x46,0x23,\n    0x4D,0x1B,0xF5,0x50,0xC8,0x06,0x99,0x18,0x43,0x10,0xD1,0xA3,0x23,0x4C,0x9A,0x34,\n    0x30,0x98,0x20,0xC2,0x1A,0x68,0x1A,0x18,0x8D,0x00,0x0C,0x9A,0x06,0x80,0x69,0xA3,\n    0x10,0x64,0xC8,0xC1,0x18,0x99,0x00,0xDA,0x35,0x3F,0x6A,0xA6,0x8B,0x43,0xB4,0xEF,\n    0x74,0x2D,0x3F,0xB7,0xFA,0xA9,0x77,0x36,0x87,0x90,0x74,0x9E,0x33,0x77,0xA9,0x21,\n    0x90,0x4C,0x92,0x44,0x75,0x53,0x3C,0xD5,0x8B,0x69,0x8D,0x37,0x01,0xAB,0x94,0x49,\n    0x09,0x29,0x26,0x24,0xE4,0xA0,0x94,0x8F,0xC4,0xA8,0x95,0x92,0xC1,0xFC,0x96,0x92,\n    0xE2,0x00,0x78,0x39,0x2F,0x26,0x04,0xC4,0x99,0x13,0x32,0x04,0x82,0x20,0xC9,0xA1,\n    0x35,0x26,0xC4,0xDC,0x9C,0x13,0x92,0x74,0x4E,0xC8,0x22,0x78,0x42,0x13,0xD2,0x7C,\n    0x4F,0xCA,0x01,0x41,0x28,0x45,0x0C,0x84,0x28,0x85,0x14,0xA3,0x14,0x72,0x90,0x52,\n    0x48,0x52,0x94,0x52,0xCA,0x61,0x4D,0x29,0xC5,0x3C,0xA8,0x44,0xC2,0x85,0x48,0x8B,\n    0x15,0x32,0xA8,0x43,0x15,0x52,0xAC,0x55,0xCA,0xC1,0x59,0x2B,0x45,0x6C,0xAE,0x08,\n    0xAE,0x90,0xE5,0x78,0xAF,0x96,0x02,0xC2,0x58,0x88,0x82,0xC6,0x59,0x0B,0x29,0x66,\n    0xC1,0x5A,0x08,0x8B,0x49,0x0E,0x44,0x96,0xA2,0x02,0x02,0xD6,0x5B,0x0B,0x69,0x6E,\n    0x2D,0xE5,0xC0,0xB8,0x97,0x22,0xE6,0x5C,0xCB,0xA1,0x75,0x2E,0xC5,0xDC,0xBC,0x17,\n    0x92,0xF4,0x5E,0xCF,0xF8,0xBE,0x17,0xD2,0xFC,0x5F,0xCC,0x01,0x81,0x24,0x72,0x4C,\n    0x11,0x83,0x30,0x87,0xFE,0x33,0x0A,0x61,0x8C,0x39,0x88,0x31,0x26,0x28,0xC5,0x98,\n    0xC3,0x1A,0x63,0x8C,0x79,0x90,0x32,0x26,0x48,0xC9,0x99,0x43,0x2A,0x65,0x8C,0xB9,\n    0x98,0x33,0x26,0x68,0xCD,0x99,0xC3,0x3A,0x67,0x8C,0xF9,0xA0,0x34,0x26,0x88,0xD1,\n    0x9A,0x43,0x4A,0x69,0x8C,0xC6,0x9C,0x5A,0x83,0x52,0x6A,0x8D,0x59,0xAC,0x35,0xA6,\n    0xB8,0xFE,0xB5,0xE2,0xD8,0x0B,0x62,0x2D,0x90,0xB6,0x62,0xDA,0x0B,0x6A,0x2D,0xB0,\n    0xB6,0xE2,0xDC,0x0B,0x72,0x2D,0xD0,0xB7,0x62,0xDE,0x0B,0x7A,0x2D,0xF0,0xB7,0xE2,\n    0xE0,0x0B,0x82,0x2E,0x10,0xB8,0x62,0xE2,0x0B,0x8A,0x2E,0x30,0xB8,0xE2,0xE4,0x0B,\n    0x92,0x2E,0x50,0xB9,0x62,0xE6,0x0B,0x9A,0x2E,0x70,0xB9,0xE2,0xE8,0x0B,0xA2,0x2E,\n    0x90,0xBA,0x62,0xEA,0x0B,0xAA,0x2E,0xB0,0xBA,0xE2,0xEC,0x0B,0xB2,0x2E,0xD0,0xBB,\n    0x62,0xEE,0x1D,0xD2,0x11,0xDE,0x17,0x7C,0x5E,0x01,0x78,0x45,0xE2,0x17,0x8C,0x5E,\n    0x41,0x79,0x45,0xE6,0x17,0x9C,0x5E,0x71,0x7A,0x05,0xE9,0x17,0xA8,0x5E,0xB1,0x7B,\n    0x05,0x04,0x2F,0x68,0xA0,0x85,0x06,0x2F,0x70,0xBD,0xE2,0x83,0x17,0xC0,0x5F,0x11,\n    0x7C,0x05,0xF2,0x1E,0xF8,0x75,0x03,0xDF,0x8F,0x80,0x6A,0x4F,0xFC,0x76,0x86,0x81,\n    0xA9,0x33,0x19,0x8C,0xC6,0x10,0x93,0x41,0x08,0x68,0xE0,0x71,0x48,0x7F,0x46,0x13,\n    0xF7,0xB2,0xC8,0x4B,0x24,0x22,0x90,0x2C,0xC8,0x28,0xA5,0x49,0x20,0xA0,0x2C,0x81,\n    0x51,0x42,0x4E,0x85,0x90,0x97,0x48,0x05,0xD8,0x51,0x00,0x29,0x01,0xC0,0xB7,0xFC,\n    0x4A,0x99,0xC9,0x25,0xE0,0x80,0x67,0x52,0x45,0x92,0x0D,0xD6,0x42,0x03,0x60,0x02,\n    0x07,0x00,0xCD,0xAF,0x7F,0xD5,0x6F,0x36,0x4B,0x56,0xB5,0x9E,0x9A,0xDE,0x7E,0x39,\n    0x6C,0x3C,0x56,0x3D,0xD4,0xA7,0xC3,0x59,0x2F,0x88,0x51,0x4B,0xDB,0xCD,0x78,0xEC,\n    0x0A,0x6F,0x64,0xAD,0x8B,0x5E,0xCE,0x2D,0x73,0x47,0x43,0x55,0x9F,0x1B,0x8A,0x3A,\n    0x5A,0x94,0xC5,0x8B,0x16,0x2C,0x58,0xB1,0x62,0xC5,0x88,0x81,0x02,0x04,0x08,0x10,\n    0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,\n    0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x82,0x2C,0x51,0x62,0xC5,0x8B,0x16,0x2C,0x58,\n    0xB1,0x62,0xC5,0x8B,0x16,0x2C,0x44,0x08,0x10,0x20,0x40,0x81,0x02,0x04,0x08,0x10,\n    0x20,0x40,0x81,0x02,0x04,0xA1,0x00,0xD2,0x80,0xC8,0x13,0xBE,0x40,0x82,0xC9,0x35,\n    0x84,0x24,0x9F,0xED,0x08,0x59,0x02,0x4D,0x43,0x24,0x09,0x66,0x10,0xCD,0xAD,0x66,\n    0xCD,0x9B,0x36,0x6F,0x09,0xA2,0xD5,0x33,0x69,0x73,0x66,0xC3,0x0C,0x30,0xC3,0x0C,\n    0x00,0x87,0x80,0x39,0x26,0x49,0x92,0x64,0x63,0xB6,0x3B,0x63,0xB6,0x3B,0x63,0xEB,\n    0x1A,0x34,0x68,0xD1,0xA3,0xE8,0xF4,0x7A,0x3D,0x1E,0x8E,0x00,0x0E,0x38,0xE3,0x8E,\n    0x38,0xE3,0x8E,0x3E,0x30,0x64,0x0C,0x78,0xF1,0xE3,0xC7,0x8F,0x1E,0x3C,0x7A,0x7D,\n    0x3E,0xA9,0x00,0x02,0xEC,0x24,0x86,0xC9,0xB2,0xC8,0x09,0x0B,0x21,0xB3,0xB2,0x53,\n    0x08,0xB1,0x60,0x6C,0xEC,0x97,0x42,0x54,0x80,0xEB,0x29,0x70,0x24,0x14,0x84,0x08,\n    0xA1,0x8A,0x42,0x42,0x4C,0x9A,0x4C,0x03,0x51,0xEF,0x68,0xC0,0x86,0xA5,0x90,0x28,\n    0x2F,0x7B,0x58,0x60,0x08,0x5A,0xD6,0xB0,0x88,0x5A,0xD6,0x90,0x84,0xF8,0x09,0x09,\n    0x04,0x20,0xB1,0x05,0x08,0x28,0x40,0x59,0x05,0x84,0x14,0x19,0x15,0x8C,0x52,0x41,\n    0x40,0x0B,0x95,0x09,0x02,0x82,0x09,0x41,0x7B,0xDA,0xEA,0xAA,0xAA,0xAA,0xAA,0xAA,\n    0xAA,0xAB,0x72,0xA9,0x55,0x55,0x52,0x82,0xF7,0xB1,0x7B,0x94,0x21,0x7B,0xD1,0x60,\n    0x74,0xC0,0x24,0x80,0x7F,0x9A,0x90,0x16,0x02,0x90,0x81,0x50,0x75,0xD6,0x50,0x62,\n    0xC5,0x56,0x04,0x09,0x07,0x00,0x90,0x8B,0x24,0x90,0x68,0xC4,0x21,0x86,0x14,0x58,\n    0xB5,0x19,0x32,0x51,0x85,0xAD,0x81,0x55,0x72,0xF6,0xB5,0xCD,0x5E,0xF7,0xBE,0x05,\n    0xCC,0x71,0x56,0x2A,0xC5,0x58,0xAB,0x15,0x62,0xAC,0x5D,0x18,0x10,0x33,0x82,0xD6,\n    0x95,0x60,0x24,0x2D,0x65,0x8B,0x02,0x62,0xC5,0x81,0x55,0x88,0xAA,0xB1,0x55,0x62,\n    0xAA,0xC5,0x55,0x8A,0xAB,0x16,0x11,0x11,0x11,0x11,0x10,0xC4,0xC5,0x8B,0x16,0x2C,\n    0x58,0xB1,0x62,0x32,0x01,0x0C,0x66,0x26,0x42,0x02,0x49,0x10,0x86,0x70,0x4B,0x12,\n    0xC4,0x10,0x0B,0x92,0x40,0x89,0x2E,0x8C,0x08,0x4B,0x48,0x40,0x61,0x00,0x5A,0x20,\n    0x76,0xDD,0x37,0x71,0x63,0xF7,0x27,0x70,0x90,0x9A,0xB0,0x93,0x5B,0x4E,0xB9,0x21,\n    0x89,0x09,0xF5,0xD2,0x10,0xFD,0x48,0x1D,0x32,0x1F,0x71,0x24,0xE8,0xD2,0x4F,0xCE,\n    0xC9,0x0D,0x99,0x84,0x03,0x60,0x60,0x42,0x93,0x62,0xD2,0x6B,0xBA,0x7D,0x63,0x3D,\n    0xE3,0xFC,0x71,0xE3,0xC7,0xE8,0x18,0x17,0x4E,0x9D,0x3A,0x74,0xEA,0x0E,0x0D,0x8C,\n    0x60,0x11,0xB1,0x83,0x18,0x35,0xAD,0x6B,0x5A,0xD6,0xC8,0x5F,0x00,0x06,0x32,0x34,\n    0xC0,0x08,0x1F,0xC8,0x40,0x84,0x10,0x24,0x01,0x01,0x10,0x08,0x04,0x3D,0xC0,0x1B,\n    0x6E,0x00,0xC1,0xBA,0x0B,0x6D,0xB6,0xDB,0x6D,0xBA,0x4B,0x6D,0xB6,0xDD,0x35,0xB6,\n    0xDB,0x6D,0xB6,0xDB,0x75,0xC6,0xDB,0x6E,0xCC,0xED,0x4D,0xB6,0xDD,0xBD,0xBB,0xA3,\n    0x6D,0xB6,0xCC,0x5B,0x18,0xCC,0x66,0x35,0x98,0xF6,0x31,0x8C,0xB5,0xDE,0xAE,0x49,\n    0xA0,0x4D,0x00,0x24,0x09,0x34,0xD0,0x20,0x69,0x03,0x49,0xA0,0x02,0x28,0x45,0x8A,\n    0xB3,0x7D,0x10,0x24,0xDF,0x04,0x20,0x6F,0xA1,0x41,0x81,0x60,0x00,0x41,0x09,0x28,\n    0xC2,0xA4,0xB8,0x84,0x88,0x24,0xC1,0x22,0x90,0x97,0x48,0xA4,0x2B,0x7C,0xA2,0x55,\n    0x50,0x50,0x62,0x28,0xBA,0x45,0x02,0x5B,0x02,0x89,0x42,0x65,0xB6,0x5C,0xB8,0xB3,\n    0xB2,0xF8,0x7D,0x11,0x8C,0xD1,0xE5,0xCB,0x97,0x2E,0x5C,0xBA,0x6C,0xA9,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0xA1,0x8F,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x85,\n    0x24,0x02,0x88,0x18\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_222cd6c83d3325f93e25cbee51b996d0a6bb59ecc6da4a8283635004538449e6) == 1524, \"Wrong size of locale's blob\");\n\n/* zh_CN.GB2312 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_1f32346cbd33236b721ad979b06245f0fdc8f15f32635b5cef18e4a34704e59f[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0xF9,0xA3,0xD9,0xCA,0xC7,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0xA3,0xEE,0xA3,0xCE,0xB2,0xBB,0xB7,0xF1,0x5D,0x2E,0x2A,0x0A,0xCA,0xC7,\n    0x0A,0xB7,0xF1,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1f32346cbd33236b721ad979b06245f0fdc8f15f32635b5cef18e4a34704e59f) == 36, \"Wrong size of locale's blob\");\n\n/* zh_CN.GB2312 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_76f94e7cc6650bc618bd90b434d11ee9e6cd7ee6f1a06dcdb682d4a08d290047[] = {\n    0x43,0x4E,0x59,0x20,0x0A,0xA3,0xA4,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_76f94e7cc6650bc618bd90b434d11ee9e6cd7ee6f1a06dcdb682d4a08d290047) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.GB2312 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_611433737a61e3be7c37c681f2124e01841e0e5eec39663a290173d57eb974a7[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xFF,0xE4,0xF1,0x4C,0x00,0x00,\n    0x20,0xDF,0x9F,0x80,0x10,0x42,0x00,0xFF,0xF0,0x20,0x62,0x0C,0x70,0x36,0x02,0x40,\n    0x00,0x00,0x01,0x61,0x89,0x3F,0xF9,0xD7,0x10,0x82,0x98,0x00,0x23,0x30,0x00,0xB5,\n    0xB4,0x41,0x29,0xE9,0x0C,0x9A,0x30,0x9A,0x68,0x68,0xC9,0xA6,0x9B,0x49,0x9A,0x09,\n    0x84,0x19,0x00,0x1A,0x9E,0x95,0x34,0xDA,0x26,0x6A,0x0D,0x00,0x00,0x06,0x87,0xA8,\n    0x00,0x03,0x27,0xA8,0x24,0xA4,0x87,0xA8,0x00,0x00,0x00,0x00,0x1A,0x00,0x01,0x99,\n    0x4C,0x2F,0xAE,0x08,0x69,0x45,0x1B,0x27,0xC1,0x3C,0xC9,0x24,0x8C,0xD8,0xA9,0x48,\n    0x13,0x15,0x07,0x11,0x8C,0x85,0x38,0x8E,0x04,0x44,0xB5,0xB2,0x05,0xAF,0xE8,0xCE,\n    0xE9,0xA4,0x83,0x94,0x68,0x44,0x02,0x01,0xC0,0x82,0x24,0x97,0xB3,0x89,0xC0,0x88,\n    0xBF,0x20,0x35,0x96,0x24,0xA5,0xED,0xC7,0x2C,0xA2,0x63,0x10,0x8C,0xC9,0x98,0x00,\n    0x26,0x30,0x1A,0xCF,0x42,0x80,0x63,0x1D,0xC0,0x80,0x6C,0x62,0x80,0x92,0xC4,0xE4,\n    0x0A,0x3B,0x31,0x05,0x3F,0x07,0xD4,0xA5,0x8E,0x4A,0x14,0xC4,0x50,0xA8,0x0E,0xC5,\n    0x08,0xEE,0x0A,0x11,0x72,0x34,0x9C,0x80,0x1E,0x22,0xB0,0x95,0xC1,0xA2,0xA8,0x68,\n    0x68,0xA2,0xA7,0x83,0xE2,0x22,0x12,0x13,0x23,0x97,0xE7,0x20,0x78,0xA5,0x3D,0xE0,\n    0xD0,0x78,0xBF,0x8B,0xB9,0x22,0x9C,0x28,0x48,0x7F,0xF2,0x78,0xA6,0x00\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_611433737a61e3be7c37c681f2124e01841e0e5eec39663a290173d57eb974a7) == 238, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.GBK LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_ca7f98a878eec151fa4408de704ce87ad100d5dc3466e3aa0801d62c578ec402[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x0F,0x3C,0x53,0x28,0x00,0x19,\n    0x1A,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x08,0x9F,0x60,0x80,0x07,0x00,0x04,0x00,0xAC,0x4E,0x2D,0x9B,\n    0xC2,0xF2,0x78,0x29,0x4A,0x00,0x00,0x00,0x00,0x00,0x06,0x80,0x00,0x00,0x00,0x00,\n    0x00,0x68,0x0C,0x80,0x00,0x01,0xA0,0x00,0x7F,0xAA,0x81,0xFA,0xA7,0xFF,0xAA,0xA8,\n    0xFF,0xFD,0x55,0x50,0xD3,0x40,0x00,0x00,0x00,0x00,0x00,0x34,0x68,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x25,0x52,0x50,0xD2,0x61,0x19,0x18,0x35,0x34,0xD3,0x46,0x7E,0xAA,\n    0x62,0x61,0x18,0x04,0x69,0xA6,0x81,0x81,0x1A,0x69,0xA6,0x00,0x26,0x00,0x26,0x7E,\n    0xA9,0x3D,0x4D,0x32,0x62,0x61,0x34,0x6D,0x4F,0x53,0x21,0xFF,0xFA,0x95,0x51,0xFB,\n    0xFD,0x55,0x51,0x93,0x34,0x80,0xC4,0xC2,0x60,0x13,0x02,0x18,0x26,0x9A,0x60,0x13,\n    0x00,0x08,0x31,0x0D,0x1A,0x00,0x01,0xA3,0x40,0xF5,0x08,0xD9,0x55,0x54,0xFD,0x53,\n    0xF4,0xA7,0xA9,0xA0,0x06,0x9A,0x00,0x01,0x93,0x4D,0x0D,0x01,0xA3,0x40,0x34,0x00,\n    0x0C,0x9A,0x32,0x64,0x00,0xC2,0x00,0xD0,0xC4,0x06,0x80,0x34,0x69,0xA0,0x34,0x00,\n    0x1A,0x1A,0x06,0x83,0x40,0x69,0xA6,0x20,0x06,0x99,0x00,0x00,0x06,0x80,0x03,0x43,\n    0x40,0x00,0x02,0x4F,0xFF,0xF5,0x55,0x50,0x4C,0x04,0xC0,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x98,0x00,0x26,0x00,0x02,0x60,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x52,0x45,0x53,0xFD,\n    0x15,0x36,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x34,\n    0x07,0xEA,0x80,0x1E,0x90,0x69,0xFA,0x90,0xDA,0x9E,0x53,0xF5,0x47,0xEA,0x81,0xA0,\n    0x00,0x68,0x34,0x0D,0x06,0x80,0x01,0xA1,0xA3,0x40,0xD0,0x34,0x1A,0x1E,0xA0,0xD3,\n    0x20,0xD0,0x69,0x91,0xBC,0xD5,0x4D,0xD4,0x9A,0x36,0xC6,0xEA,0xDB,0x13,0x4E,0xD7,\n    0x74,0xBA,0xBA,0x92,0x75,0x2E,0xD9,0x94,0x91,0xBF,0x2B,0x34,0x25,0x5D,0xC3,0x72,\n    0xDC,0x6D,0xF3,0x34,0xC4,0xFC,0xE8,0xCE,0x90,0xA4,0x14,0x92,0x94,0x52,0xCA,0x61,\n    0x32,0x74,0xA5,0x34,0xE9,0x8A,0x71,0xD3,0x94,0xF3,0xA8,0x3A,0x92,0xA0,0x54,0x48,\n    0xCE,0xA8,0xA5,0xD4,0x8A,0x99,0x54,0x3A,0xB2,0xAA,0x55,0x8A,0xB9,0x58,0x3A,0xC3,\n    0xAD,0x2B,0x25,0x68,0xAD,0x95,0x72,0xB8,0x57,0x4A,0xF1,0x5F,0x2C,0x07,0x5C,0x75,\n    0xE5,0x84,0xEC,0x0B,0x11,0xD8,0x96,0x33,0xB2,0x3B,0x33,0xB4,0x3B,0x53,0xB6,0x2C,\n    0x85,0x94,0xB3,0x16,0x72,0xD0,0x5A,0x4E,0xDF,0x05,0x65,0x0B,0x51,0x28,0xEE,0x4B,\n    0x59,0xDD,0x16,0xC3,0xBB,0x2D,0xA5,0xB8,0xB7,0x96,0xC2,0xE0,0x5C,0x4B,0x91,0x73,\n    0x2E,0x85,0xD4,0xBA,0xDD,0x8B,0xB9,0xDE,0x17,0x82,0xF2,0x5E,0x8B,0xD9,0x7C,0x2F,\n    0xB9,0x1B,0xF9,0x80,0x30,0x26,0x08,0xEF,0x48,0xE3,0xC1,0x98,0x42,0x43,0x0A,0x77,\n    0xC4,0xD1,0xDF,0x98,0x63,0xC0,0x30,0xE6,0x20,0xF0,0x4C,0x49,0x8A,0x31,0x67,0x84,\n    0x63,0x0C,0x69,0x8E,0x31,0xE7,0x86,0x64,0x0F,0x10,0xF1,0x4C,0x89,0x50,0xA8,0xCD,\n    0x9E,0x31,0x38,0x4E,0x15,0x98,0x89,0x20,0x9E,0x8D,0x64,0x1E,0x6B,0xD2,0x2B,0x82,\n    0x57,0xA5,0x56,0xBA,0xB8,0x35,0x7A,0x65,0x7A,0x75,0x7A,0x85,0x70,0x8A,0xDD,0xAB,\n    0xD4,0xAB,0x78,0xAD,0xEA,0xBD,0x52,0xB6,0x15,0xEA,0xD5,0xEB,0x15,0xB2,0xAF,0x5A,\n    0xAF,0x5C,0xAF,0x5E,0xAF,0x60,0xAF,0x62,0xAE,0x15,0x5E,0xC9,0x5E,0xCD,0x5E,0xD1,\n    0x5E,0xD5,0x5E,0xD9,0x5E,0xDD,0x5E,0xE1,0x5E,0xE5,0x7D,0xD3,0xDD,0xBD,0xE3,0xDE,\n    0xBD,0xF3,0x86,0x7B,0xF7,0xC0,0x7C,0x16,0xAF,0xC2,0x5E,0x1D,0x7E,0x1A,0xFC,0x45,\n    0xF8,0xAB,0xF1,0x97,0xE3,0xAB,0x88,0x57,0xC8,0x57,0xC9,0x57,0xCA,0x57,0xCB,0x57,\n    0x12,0xAF,0x98,0xAF,0x9A,0xAF,0x9C,0xAF,0x9E,0xAF,0xA0,0xAF,0xA2,0xAF,0xA4,0xAF,\n    0xA6,0xAF,0xA8,0xAF,0xAA,0xAF,0xAC,0xAF,0xAE,0xAF,0xB0,0xAE,0x29,0x5F,0x65,0x5F,\n    0x69,0x5F,0x6D,0x5C,0x5A,0xBE,0xE2,0xBE,0xEA,0xB8,0xC5,0x7D,0xE5,0x7D,0xF5,0x7E,\n    0x05,0x7E,0x15,0x7E,0x25,0x71,0xAA,0xFC,0x6A,0xFC,0x8A,0xFC,0xAA,0xFC,0xCA,0xFC,\n    0xEA,0xE3,0x95,0xFA,0x15,0xFA,0x55,0xFA,0x95,0xFA,0xD5,0xC7,0xAB,0xF6,0x2B,0xF6,\n    0xAB,0xF7,0x2B,0x7C,0xAF,0xDE,0xAF,0xE0,0xAF,0xE2,0xAF,0xE4,0xAE,0x41,0x5F,0xCD,\n    0x5C,0x8A,0xB9,0x25,0x7F,0x45,0x7F,0x55,0x7F,0x65,0x7F,0x75,0x72,0x6A,0xFF,0x0A,\n    0xFF,0x2A,0xFF,0x4A,0xFF,0x6A,0xE5,0x15,0xFF,0x15,0xCA,0xAB,0x96,0x57,0xFD,0x57,\n    0xFE,0x57,0x2E,0xBB,0x4B,0xC7,0xB6,0xD8,0xDA,0xDA,0x63,0x96,0x5D,0x2B,0xA5,0xC0,\n    0x8D,0x42,0x1B,0x78,0x18,0x24,0xA2,0xA8,0xAA,0x2C,0x51,0x54,0x55,0x15,0x45,0x54,\n    0xAB,0x2A,0xCA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAB,0x52,0xA4,0x95,0x52,0x76,\n    0x02,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,\n    0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,\n    0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x2B,0x4A,0xD3,0xAC,\n    0x6E,0x7B,0x76,0xCF,0xAA,0x14,0x5C,0x33,0xC2,0xD6,0xD6,0xAD,0x56,0x95,0xA6,0xCD,\n    0x8D,0xBF,0x56,0xDF,0xA9,0x2C,0x66,0x85,0x5A,0x5A,0x55,0xA6,0x6B,0x62,0xB4,0x66,\n    0x85,0xCE,0x65,0x9B,0x35,0x65,0x69,0x5A,0x44,0xA4,0x4A,0x44,0xA4,0x4A,0x44,0xA4,\n    0x4A,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,\n    0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,\n    0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,\n    0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,\n    0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,\n    0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,\n    0x89,0x11,0x22,0x24,0x44,0xA4,0x4A,0x44,0xAA,0x44,0x98,0xB8,0xAC,0x5C,0x56,0x2E,\n    0x2C,0x42,0x1C,0x84,0x87,0x1D,0x2E,0x6C,0x43,0xCF,0x50,0xB2,0x17,0x94,0xAE,0x6D,\n    0xCC,0x01,0x27,0x38,0x89,0x44,0x0E,0x46,0xC8,0x89,0x18,0xA4,0x96,0x89,0x26,0x6B,\n    0x24,0xB6,0x42,0x26,0x2C,0x24,0x9B,0xAB,0x24,0xC5,0x89,0x33,0x59,0x26,0x2C,0x92,\n    0x33,0x51,0x26,0x6A,0x92,0x49,0x95,0x44,0xB6,0x21,0x95,0x88,0xC5,0x92,0x66,0x49,\n    0x16,0xC2,0xEA,0xC8,0x66,0x82,0xD4,0x6A,0x54,0x4C,0xAC,0x89,0x9E,0xC9,0x24,0xD5,\n    0xCB,0x10,0x9A,0x24,0x91,0x8A,0x2E,0x79,0x0C,0xB3,0x82,0x26,0x51,0x2C,0xB4,0x90,\n    0x5A,0x4C,0x59,0x06,0x2C,0x45,0xA9,0x22,0x5A,0x89,0x16,0xCA,0x92,0x49,0x23,0x6F,\n    0x97,0xDF,0xB2,0x84,0xE4,0xAC,0x86,0xE7,0x2C,0x44,0x2D,0x46,0x21,0x27,0x31,0x22,\n    0xA2,0x50,0x54,0x91,0x19,0x64,0x31,0x09,0x32,0x22,0xA2,0x61,0x80,0xCB,0x03,0x09,\n    0x62,0xE3,0x08,0xB5,0x15,0x11,0x26,0xFA,0x72,0x69,0x80,0x44,0xB2,0x11,0x31,0x22,\n    0x13,0x19,0x22,0xD4,0x6E,0x77,0x18,0x4C,0x63,0x0C,0x63,0x13,0x18,0xC3,0x68,0x6A,\n    0x54,0xA9,0x55,0x52,0x8A,0xB1,0x62,0xC4,0x56,0x95,0xA5,0x69,0x5A,0x56,0x95,0xA5,\n    0x6A,0x55,0x58,0x95,0x52,0x25,0x46,0xDC,0x24,0xAA,0x23,0x3D,0xB6,0xDB,0x6D,0xB7,\n    0x12,0x46,0x49,0x21,0x2A,0x4F,0xA5,0x12,0xA2,0x22,0x88,0x22,0x94,0x44,0x1A,0x09,\n    0x44,0x51,0x44,0xDB,0x6D,0xB9,0x9E,0x89,0xB6,0xDB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDB,\n    0x75,0xD6,0xDB,0x6D,0xB6,0xDB,0x6F,0xB8,0x6D,0xB6,0xDD,0xAE,0xDA,0xDB,0x6D,0xBB,\n    0x7B,0x6D,0xB6,0xDB,0x6D,0xB6,0xEF,0xAD,0xB6,0xDE,0x11,0xCD,0x36,0xDB,0x78,0x86,\n    0xDB,0x6D,0xB6,0xDB,0x6D,0xCD,0xB6,0xDB,0x6D,0xA9,0x72,0xE5,0xCB,0xF2,0xA5,0xF2,\n    0xBC,0x08,0x36,0xAC,0x43,0x15,0xA7,0x36,0xEF,0x82,0xD7,0xD4,0xD3,0xBC,0xD4,0xD3,\n    0xA7,0x77,0xA7,0x4E,0x7C,0xF9,0xF3,0xE7,0xCF,0x9E,0x4D,0xC5,0x71,0x95,0x1B,0xEA,\n    0x9C,0x6D,0x4E,0x22,0xC2,0x38,0xBA,0x38,0x7A,0x71,0x35,0x27,0x0D,0x52,0x71,0x54,\n    0x38,0x0E,0x03,0x0D,0x6D,0x6D,0x6D,0x6D,0x6D,0x6D,0x6D,0x90,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x23,0x34,0x6D,0x6B,0xE6,0xB1,0xAC,\n    0x6B,0x1A,0xC6,0xE4,0x9F,0x31,0x8C,0x63,0x30,0xAF,0x98,0xD6,0xB1,0xAD,0x63,0x19,\n    0x94,0xA9,0x22,0x55,0x03,0x85,0xAB,0x66,0xC8,0xE1,0x06,0xC8,0xD9,0x1B,0x23,0x64,\n    0x6C,0x8C,0xB8,0x19,0x82,0x2A,0x2C,0x53,0xB1,0x51,0x89,0xD2,0x74,0xCC,0x13,0xC4,\n    0xF1,0x3C,0x4F,0x10,0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x10,0x84,0x21,\n    0x08,0x41,0xCE,0x73,0x9C,0xE7,0x39,0xD4,0x07,0x9E,0x79,0xE7,0x9E,0x49,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x2D,0x8D,0x8D,0x8D,\n    0xEA,0x24,0xF4,0x54,0x8D,0x7D,0x7D,0x7D,0x7D,0x7C,0xE0,0x8E,0x0E,0xC2,0x46,0x8B,\n    0xA3,0x46,0x8D,0x1A,0x36,0x35,0x6D,0xB6,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,\n    0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x5B,0x6C,0x9A,0x12,0x01,0xAB,0x64,0x90,0x8D,0xED,0x84,0x6F,0x21,\n    0x25,0x4A,0x23,0x79,0x40,0x00,0x01,0xAA,0xAA,0x95,0x57,0xEA,0xAB,0xF4,0x68,0xC5,\n    0x32,0xC8,0x91,0x12,0xA9,0x2A,0x50,0x24,0x44,0x88,0x92,0x44,0x49,0x22,0x04,0x00,\n    0x81,0x28,0x25,0x04,0xA0,0x94,0x12,0x8B,0x1E,0x33,0x18,0x92,0x46,0x75,0x4C,0xA8,\n    0x4A,0x60,0xCE,0xC8,0x12,0x95,0x11,0x85,0x26,0x4A,0x88,0xB2,0x82,0x64,0xA1,0x33,\n    0x58,0xCB,0x18,0x92,0xD4,0xB6,0x2D,0x9B,0xFE,0xFF,0xD0,0xCC,0x49,0x25,0x0E,0x87,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x1C,0x71,0xC7,0x1C,0x74,0xC2,0x66,0x50,0x92,0x49,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,\n    0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,\n    0x49,0x24,0x92,0x49,0x25,0x83,0x8B,0xFF,0x17,0x72,0x45,0x38,0x50,0x90,0x0F,0x3C,\n    0x53,0x28\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ca7f98a878eec151fa4408de704ce87ad100d5dc3466e3aa0801d62c578ec402) == 1778, \"Wrong size of locale's blob\");\n\n/* zh_CN.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_3d238dc41bbac672ff5a98aa96a451cfe8bb22b2b10bbd86795abaa20e71a7ce[] = {\n    0x5E,0x5B,0x79,0x59,0xEF,0xBD,0x99,0xEF,0xBC,0xB9,0xE6,0x98,0xAF,0x5D,0x2E,0x2A,\n    0x0A,0x5E,0x5B,0x6E,0x4E,0xEF,0xBD,0x8E,0xEF,0xBC,0xAE,0xE4,0xB8,0x8D,0xE5,0x90,\n    0xA6,0x5D,0x2E,0x2A,0x0A,0xE6,0x98,0xAF,0x0A,0xE5,0x90,0xA6,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_3d238dc41bbac672ff5a98aa96a451cfe8bb22b2b10bbd86795abaa20e71a7ce) == 45, \"Wrong size of locale's blob\");\n\n/* zh_CN.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_6c70369490f26127e3f8367e439444b7fef90dc6142148daebb2e4523907e1be[] = {\n    0x43,0x4E,0x59,0x20,0x0A,0xEF,0xBF,0xA5,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_6c70369490f26127e3f8367e439444b7fef90dc6142148daebb2e4523907e1be) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_CN.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_ed2278729ad67a859319cad187ba49174c50eeaff35d42ddd68cc3385647062d[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xBD,0x18,0x5E,0x17,0x00,0x00,\n    0x20,0xDF,0xF9,0x00,0x10,0x42,0x00,0xFF,0xF0,0x20,0x62,0x0C,0x70,0x36,0x02,0x40,\n    0x00,0x6B,0x7E,0x14,0xCE,0x82,0x8A,0x05,0x70,0x07,0x80,0x30,0x00,0xC6,0x03,0x4D,\n    0x51,0xA9,0xE8,0x43,0x4D,0x1A,0x00,0x3D,0x20,0xC4,0x66,0xA0,0x01,0xA0,0x03,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x12,0x9A,0xA1,0xEA,0x31,0x1A,0x0C,0x01,\n    0x06,0x81,0xA6,0x46,0x9E,0x88,0xC6,0xA6,0xC5,0x18,0xB7,0x9F,0x82,0xBD,0x8B,0x30,\n    0xF6,0xCC,0xD9,0xDC,0x8E,0x38,0x55,0xD1,0x91,0x3A,0x1A,0x44,0x85,0x25,0x23,0x89,\n    0x03,0x79,0x00,0x34,0xA4,0x0F,0x2D,0x6B,0x5C,0x4B,0x9D,0x9A,0xA5,0x9A,0x66,0x20,\n    0x12,0x11,0xA6,0xA3,0xB5,0x48,0xA0,0x49,0xAA,0x61,0x78,0xBB,0x4D,0x38,0x72,0x28,\n    0xBE,0x8E,0x38,0x51,0x28,0xA6,0x80,0x02,0x76,0x1C,0xAF,0x80,0xA8,0x13,0x2A,0x15,\n    0xC9,0xBF,0x50,0xD8,0x22,0x69,0x0B,0x88,0xA0,0x0A,0x60,0x2B,0x48,0xF1,0x24,0x0C,\n    0x80,0x02,0xA3,0x99,0x2A,0x52,0xA5,0x59,0xC0,0x5C,0x93,0x58,0x01,0xCE,0xC4,0x5D,\n    0xAD,0x94,0x8D,0x43,0x49,0xC4,0x0D,0xC3,0x06,0xD7,0x73,0x15,0x55,0x44,0x99,0x8D,\n    0xC7,0xB7,0x19,0x92,0xFA,0xD2,0x32,0xC3,0x59,0x7C,0xAC,0xFB,0x3A,0x89,0x16,0x14,\n    0x13,0xFA,0xF4,0xA5,0xAB,0xFC,0x5D,0xC9,0x14,0xE1,0x42,0x42,0xF4,0x61,0x78,0x5C\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_ed2278729ad67a859319cad187ba49174c50eeaff35d42ddd68cc3385647062d) == 240, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_HK.Big5HKSCS LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_c2778b61f3c9060eaeb17510cb20ccb9a1f0e9478d05374d551650d53939e09f[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0xBB,0x55,0xF4,0xA2,0x00,0x0F,\n    0x11,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x09,0xBF,0x00,0x00,0x1D,0xE0,0x40,0x09,0xE1,0x17,0x70,0xBC,\n    0x61,0xD8,0x30,0x06,0x08,0xA5,0x4F,0x48,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x34,0x0D,0x00,0x00,0x03,0x20,0x00,0xD3,0x41,0xE3,0x6F,0x55,0x49,0xA6,0xFF,0x2A,\n    0x88,0xD0,0xD0,0x06,0x80,0x03,0x40,0x01,0xE9,0x03,0x4D,0x32,0x00,0x3F,0xF5,0x52,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x53,0xD4,0x69,0x29,0xBD,0x4D,0x13,0xD3,\n    0x24,0x69,0x84,0x69,0x9A,0x99,0x00,0x00,0xD0,0x69,0xA3,0xD4,0x34,0x00,0xD0,0x00,\n    0x1A,0x34,0x1A,0x06,0xD2,0x0F,0x53,0xD4,0xD1,0xFF,0xEA,0xAA,0x01,0xA7,0xEA,0x83,\n    0x40,0x00,0x00,0x01,0xA0,0x00,0x00,0x00,0x00,0x62,0x1A,0x68,0x00,0x00,0x00,0x00,\n    0x00,0x3F,0x54,0x18,0xD4,0x91,0x09,0xA4,0x34,0x69,0x32,0x4F,0x10,0x04,0x0C,0x41,\n    0x88,0xC8,0xC2,0x03,0x4D,0x0D,0x32,0x62,0x31,0x19,0x00,0x60,0x4C,0x02,0x79,0x33,\n    0x53,0x53,0x26,0x23,0x26,0x99,0x0F,0x49,0xA0,0xC2,0x32,0x64,0x32,0x0C,0x08,0x30,\n    0x23,0x21,0xA6,0x40,0x00,0xD3,0x26,0x23,0x04,0xD3,0x41,0xA0,0xC4,0xC2,0x64,0x62,\n    0x06,0x7B,0xF5,0x54,0x99,0x29,0xA7,0xA8,0x26,0x9A,0x68,0xC8,0x0D,0x18,0x80,0x1A,\n    0x0D,0x01,0xEA,0x69,0xA3,0x43,0x4C,0x9A,0x1E,0x93,0x4D,0x34,0x3D,0x10,0x07,0xA1,\n    0x1B,0x48,0x64,0x06,0x9A,0x62,0x6D,0x4D,0x34,0x0C,0x81,0x91,0xA3,0x41,0x88,0x68,\n    0x69,0x80,0x8D,0x34,0x19,0x0C,0x4C,0x8C,0x9A,0x32,0x34,0x03,0x40,0x0C,0x4D,0x00,\n    0xD1,0xA1,0xA6,0x9A,0x32,0x12,0x60,0x00,0x98,0x00,0x09,0x80,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0xD5,0x52,0x64,0x35,0x3D,0x46,0x9A,\n    0x06,0x81,0xA1,0xB5,0x00,0x68,0x34,0x00,0x00,0x34,0x34,0xD0,0x68,0xD0,0x00,0x00,\n    0xD3,0x43,0xF5,0x4D,0x06,0x9A,0x0C,0x26,0x9A,0x00,0x00,0x00,0x03,0x40,0x34,0x00,\n    0x00,0x00,0x00,0x03,0x4D,0x00,0x01,0xA0,0x06,0x80,0x06,0x83,0x4C,0xD4,0xBA,0xCC,\n    0xBB,0x2C,0xC3,0x4C,0x7C,0xC4,0x4B,0x8C,0xAE,0x06,0x5B,0x5A,0xDA,0xDF,0x2D,0xAC,\n    0xCA,0xA5,0xFE,0x0A,0x66,0x04,0xAB,0x9D,0x10,0x97,0x63,0x31,0x2E,0xE5,0xCB,0x32,\n    0x33,0x32,0xD4,0xB6,0xCD,0x30,0xB2,0xAC,0xAB,0x36,0xAB,0xC3,0x37,0x67,0x0C,0xE5,\n    0x9D,0x33,0xB5,0xE5,0x9E,0x33,0xD6,0x7C,0xBD,0x2D,0xD9,0xFB,0x40,0x68,0x2B,0xC6,\n    0x84,0xD0,0xDA,0x23,0x45,0x68,0xCB,0xDB,0x47,0x69,0x0D,0x25,0xA5,0x2F,0x8D,0x2D,\n    0xA6,0x2F,0x6D,0x35,0xA7,0x34,0xF6,0xA0,0xD4,0x5A,0x93,0x53,0x6A,0x8D,0x55,0xAB,\n    0x35,0x76,0xB0,0xD6,0x5A,0xD3,0x5B,0x6B,0x8D,0x75,0x7D,0x6B,0xCD,0x7D,0xB0,0x2F,\n    0xCD,0x85,0x7F,0xC1,0xDF,0x4D,0x8D,0x1B,0x23,0x65,0x60,0x1B,0x33,0x67,0x60,0x5B,\n    0x43,0x69,0x60,0x1B,0x53,0x6B,0x6D,0x8D,0xB5,0xB7,0x36,0xF6,0xE0,0xDC,0x5B,0x93,\n    0x73,0x6E,0x8D,0xD5,0xBB,0x37,0x76,0xF1,0x8B,0xDE,0x98,0x26,0xF6,0xC1,0xB7,0xC5,\n    0xBD,0xBE,0xFA,0xDF,0x96,0x1B,0xFB,0x08,0xE0,0x1C,0x0B,0x82,0x70,0x6C,0x2B,0x84,\n    0x60,0x98,0x67,0x0A,0xE1,0x9C,0x3B,0x88,0x61,0xD8,0x76,0x21,0x89,0x62,0x9C,0x4B,\n    0x14,0xC5,0xAF,0x56,0xFC,0x53,0x18,0xE2,0xDC,0x63,0x8D,0x71,0xCE,0x3D,0xC8,0x39,\n    0x17,0x24,0xE4,0xDC,0xA3,0x95,0x63,0x39,0x64,0x53,0x97,0x42,0xB9,0x84,0x39,0x94,\n    0x39,0xA4,0x73,0x68,0x39,0xC4,0x57,0x3A,0x8A,0xE7,0x92,0xB9,0xF4,0xA7,0x40,0x8E,\n    0x85,0x0E,0x89,0x2B,0xA3,0x4A,0x74,0x88,0xE9,0x51,0xD3,0x23,0xA7,0x47,0x50,0x8A,\n    0x63,0x51,0x4E,0xA5,0x29,0xD5,0x20,0xEA,0xD2,0xAA,0xBA,0xC4,0x0E,0xB5,0x30,0xFD,\n    0x72,0xCA,0xBA,0xF4,0xC7,0x27,0x60,0x8E,0xC5,0x1D,0x92,0x3B,0x34,0x76,0x88,0xED,\n    0x51,0xDB,0x23,0xB7,0x47,0x70,0x8E,0xE5,0x1D,0xD2,0x3B,0xB4,0x77,0x88,0xEF,0x51,\n    0xDF,0x23,0xBF,0x47,0x80,0x8F,0x05,0x1E,0x12,0x3C,0x34,0x78,0x88,0xF1,0x51,0xE3,\n    0x23,0xC7,0x47,0x90,0x8F,0x25,0x1E,0x52,0x3C,0xB4,0x79,0x88,0xF3,0x51,0xE7,0x23,\n    0xCF,0x47,0xA0,0x8F,0x45,0x15,0xE9,0x23,0xD3,0x4A,0xF5,0x11,0xEA,0xA3,0xD6,0x46,\n    0x3D,0x1E,0xBA,0x32,0x08,0xC8,0x23,0xD8,0x47,0xB2,0x8F,0x69,0x1E,0xDA,0x3D,0xC4,\n    0x7B,0xA8,0xF7,0x91,0xEF,0xA3,0xE0,0x47,0xC2,0x8F,0x89,0x1F,0x1A,0x3E,0x44,0x7C,\n    0xA8,0xC8,0xA3,0xE6,0x47,0xCE,0x8F,0xA1,0x1F,0x4A,0x3E,0xA4,0x7D,0x68,0xFB,0x11,\n    0xF6,0xA3,0xEE,0x46,0x49,0x1F,0x7A,0x3F,0x04,0x7E,0x28,0xFC,0x91,0xF9,0xA3,0xF4,\n    0x47,0xEA,0x8F,0xD9,0x1F,0xBA,0x3F,0x84,0x7F,0x28,0xC9,0xA3,0xFA,0x47,0xF6,0x8F,\n    0xF1,0x1F,0xEA,0x32,0x88,0xFF,0x92,0x99,0x16,0x55,0x64,0xAC,0xA2,0x55,0x65,0x92,\n    0x97,0x08,0x5C,0x2E,0x6B,0x88,0xAA,0xAA,0x5C,0xB2,0xD6,0x4A,0x31,0x39,0x25,0x49,\n    0x49,0x29,0x43,0x25,0x54,0x60,0xAA,0x63,0xAC,0x95,0x58,0xB8,0xAA,0x5A,0x55,0x50,\n    0xB4,0x94,0x5D,0x6C,0xEA,0x8B,0xA1,0x69,0x93,0x8B,0x2A,0x5A,0xC1,0x56,0x85,0x55,\n    0x40,0x82,0xE9,0x0A,0xAA,0x2C,0xE2,0x8A,0xB3,0xB3,0x49,0x21,0x2C,0x31,0x24,0xEE,\n    0xA4,0x9B,0x49,0xD4,0xDF,0xA3,0x27,0x5F,0x3E,0xEC,0xEB,0x25,0xD3,0xDC,0xCF,0x6B,\n    0x37,0x89,0xB8,0xCD,0xBE,0x3A,0x4A,0x4F,0x25,0x8B,0x52,0x55,0x39,0xE5,0x4A,0xA1,\n    0x71,0x53,0xAD,0x08,0xAE,0xB3,0x4A,0x4B,0x5A,0x26,0x79,0x49,0x97,0xB4,0x65,0x14,\n    0x11,0x3B,0xC7,0x63,0xD3,0x2C,0x0D,0xB1,0x5F,0x54,0x22,0x99,0x99,0x56,0xDE,0x2A,\n    0xB6,0xBA,0x22,0x8B,0xC6,0x63,0x13,0xAE,0x0E,0x11,0x14,0x53,0x39,0xD4,0x50,0x68,\n    0x13,0x2A,0xDC,0xBA,0x27,0x4C,0x89,0x5E,0xAA,0x82,0xEE,0x89,0x94,0x17,0x34,0x50,\n    0x53,0x26,0x5B,0x5C,0x1A,0x27,0x4C,0x89,0x52,0xA2,0x54,0xA8,0x95,0x2A,0x25,0x65,\n    0x9E,0x23,0x1E,0xC6,0xA8,0xBA,0x05,0xA1,0x6F,0x5B,0x51,0x49,0xBE,0x3D,0x06,0xEA,\n    0xC9,0xB2,0x4C,0x82,0xBA,0xBE,0x2C,0xE8,0xA4,0xB3,0xB3,0x4A,0x2B,0x52,0x27,0x50,\n    0x60,0x18,0x04,0xEA,0x87,0x22,0xE3,0xD1,0x4C,0xF4,0xDE,0x63,0x30,0xAE,0x30,0x4A,\n    0x77,0x12,0xA7,0x5F,0x15,0x4A,0xA7,0x34,0xA9,0x6D,0x28,0xDA,0x16,0xC5,0x8D,0x63,\n    0x71,0x8C,0x9B,0x70,0x58,0x55,0x8D,0xA9,0x6E,0x55,0xAF,0x6B,0xD2,0xF2,0xAA,0x47,\n    0xAE,0xA4,0x93,0x3B,0x09,0xA4,0x9B,0xE6,0xB5,0xC2,0x3D,0xEF,0x7C,0xF3,0x58,0xD5,\n    0xF3,0x23,0x06,0xA7,0x02,0xC4,0xB0,0xE2,0xAC,0x58,0x16,0x19,0xA1,0xD0,0x7D,0xE4,\n    0x4E,0xA6,0xAC,0x2E,0x8F,0x1E,0x54,0x56,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,\n    0x42,0x32,0x11,0x90,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,\n    0x90,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,0x90,0x8C,0x84,\n    0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,0x90,0x8C,0x84,0x64,0x23,0x21,\n    0xA5,0x34,0x13,0x41,0x38,0x59,0xA1,0x8F,0x04,0xC7,0x91,0x97,0xB9,0x63,0xDF,0x95,\n    0xEA,0x6B,0x7E,0x7F,0xA3,0xC8,0x58,0x66,0x8B,0x15,0xEA,0xEB,0xF0,0x55,0xCA,0xFD,\n    0xAB,0x16,0x44,0xDB,0xE6,0x38,0xEE,0x96,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,\n    0x46,0x42,0x32,0x11,0x90,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,\n    0x11,0x90,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,0x90,0x8C,\n    0x84,0x64,0x23,0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,0x90,0x8C,0x84,0x64,0x23,\n    0x21,0x19,0x08,0xC8,0x46,0x42,0x32,0x11,0x90,0x8C,0x84,0x64,0x23,0x21,0x19,0x08,\n    0xC8,0x48,0x95,0x2A,0x25,0x4A,0x89,0x52,0xA4,0x95,0x5C,0x5A,0x53,0x3A,0xC5,0x85,\n    0x12,0x51,0x68,0x53,0xB7,0x25,0x5B,0xA3,0x45,0x16,0x79,0x99,0x56,0x95,0x8E,0xA5,\n    0x73,0x45,0x69,0x3A,0x92,0xB1,0x3A,0x27,0x7A,0x8A,0x2E,0x71,0x24,0x49,0x12,0x49,\n    0x1F,0xC2,0x49,0x22,0x4C,0xC2,0x22,0x8A,0x24,0x93,0xFB,0x32,0x24,0x88,0x92,0x91,\n    0x32,0x48,0x92,0x54,0xC9,0x26,0x24,0x58,0x61,0x86,0x18,0x74,0xF0,0xC3,0x0F,0x4C,\n    0x30,0xAA,0xAA,0xAA,0xAA,0xAA,0x92,0x49,0x24,0xD6,0xC5,0x52,0xA7,0xC2,0xA1,0xC3,\n    0x8A,0xFE,0x53,0x27,0x44,0x5A,0xDF,0x12,0xB3,0xD4,0x5C,0x35,0xBA,0x32,0x52,0x8C,\n    0xCE,0x7E,0xB2,0x23,0xA2,0x14,0xCF,0x21,0x33,0xE3,0xC8,0xF0,0x9A,0x48,0x3D,0xD7,\n    0x5E,0xE5,0x9E,0x29,0xAC,0xF2,0xAD,0x23,0xAA,0x88,0xB4,0xD9,0xDE,0x54,0x8E,0xC7,\n    0x4D,0x28,0xDE,0x31,0x92,0x87,0x87,0x4E,0x35,0x44,0xEC,0x29,0xD0,0x94,0xC8,0x4A,\n    0x21,0x43,0x33,0x33,0x33,0xAE,0x46,0x39,0xE3,0x2B,0x1F,0x7F,0xB8,0xDD,0x56,0xA3,\n    0xCC,0x50,0x6C,0x62,0x4D,0x9C,0x9C,0x3A,0xD0,0xF2,0xEA,0xC4,0x21,0x3D,0x2E,0x29,\n    0x12,0x56,0xDC,0x8C,0xDB,0xA3,0x2D,0x2C,0xF3,0x8B,0x8A,0x71,0x15,0x4A,0xCD,0xBA,\n    0xBC,0xC8,0x3E,0x4D,0xDC,0x3F,0x3F,0x4E,0xF9,0xB0,0x4D,0x65,0x5B,0x52,0x57,0x73,\n    0x1A,0xE6,0xE4,0xD0,0x96,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x66,0x66,0x67,\n    0x2F,0x02,0x9E,0x89,0xE1,0x59,0xA4,0x69,0xE3,0xF3,0xAA,0xCC,0xCC,0x32,0xD4,0xE9,\n    0x22,0xD9,0x22,0x56,0x45,0x08,0x99,0x57,0x5D,0x1A,0x91,0x24,0x91,0x12,0x6F,0xEF,\n    0xED,0x9D,0x44,0xAC,0xC8,0xAF,0x38,0xDB,0x95,0xAD,0x29,0x54,0xDE,0x62,0x84,0x4B,\n    0x15,0x62,0xAC,0x55,0x8A,0xB1,0x56,0x2A,0xC5,0x58,0xAC,0x25,0x5A,0xA8,0x5D,0xA5,\n    0x29,0xB7,0x51,0x24,0xD3,0x69,0x2C,0x37,0x9C,0x05,0x98,0xD2,0x49,0x7F,0xA8,0x9B,\n    0x75,0x4C,0x6D,0x83,0x1A,0x06,0x36,0xDB,0x6C,0x18,0x9A,0x60,0xC4,0xC1,0xF8,0xFD,\n    0xFD,0x92,0xB2,0x4D,0x34,0xA9,0x4A,0x8D,0x34,0x90,0x9A,0x89,0x36,0xD8,0x21,0xB4,\n    0xDC,0x49,0xA6,0xD4,0x8D,0x24,0x84,0x9B,0x2C,0xE9,0xB6,0xEC,0x95,0x53,0x13,0xE7,\n    0x39,0xBA,0x74,0xEA,0x85,0x9A,0x95,0x54,0xDD,0x26,0x93,0x49,0xC5,0x15,0x50,0x80,\n    0x40,0x34,0xD4,0x2E,0xD5,0x45,0x22,0x14,0xB3,0x55,0x91,0x55,0x56,0x51,0x0A,0xA4,\n    0x51,0x7E,0x8A,0xAA,0xB6,0xBB,0xC5,0x49,0x64,0x24,0x24,0x15,0x55,0x55,0x55,0x55,\n    0x55,0x55,0x55,0x55,0x55,0x55,0xA2,0xA6,0x1C,0x3C,0x63,0xF5,0x5A,0x11,0xFE,0xD3,\n    0xAA,0xAD,0x2D,0xE9,0x62,0x21,0x96,0x36,0xC9,0x6A,0x7D,0x88,0x7D,0xC2,0xE7,0x15,\n    0x30,0x51,0x9A,0xF5,0x81,0xBB,0x3B,0xD1,0xC0,0x29,0x14,0x2C,0x0E,0xE7,0x2F,0xA6,\n    0x8F,0x66,0x4A,0x2E,0xF6,0xAF,0xCA,0xFE,0xC8,0x81,0x1D,0x98,0xCF,0xE0,0x71,0x91,\n    0xAE,0x70,0xEF,0x1D,0x3C,0x35,0xDB,0xED,0x21,0x97,0x2D,0x13,0x1D,0x91,0xD0,0x41,\n    0x08,0x4C,0xAC,0x56,0x6B,0x81,0x1F,0x8F,0x58,0xBD,0x14,0x4C,0x54,0x3D,0x51,0xD9,\n    0x3C,0x72,0xE6,0xFF,0x23,0x22,0x77,0x22,0x28,0x1C,0xA3,0x82,0x7B,0x7B,0x7B,0xBE,\n    0x93,0xD4,0x04,0x90,0x9E,0x88,0xA2,0xC1,0x42,0xB7,0x0A,0x2C,0xE7,0x78,0x2A,0x8A,\n    0xAC,0x2E,0x72,0x24,0x45,0xBF,0xEA,0x85,0x97,0x15,0x44,0x45,0x9E,0x8B,0x35,0x19,\n    0xA9,0xE0,0x69,0x5B,0x3E,0x85,0x6B,0x52,0x54,0xB3,0x38,0x4B,0x52,0x55,0x55,0x48,\n    0x04,0x83,0x3C,0xA9,0x44,0xA2,0x5A,0xBC,0x58,0xE2,0xFB,0xF8,0x55,0xB8,0x6B,0x2B,\n    0xAC,0x97,0xBC,0xC9,0xC5,0xCB,0xDE,0xB0,0x6A,0xE2,0xBE,0xF1,0x55,0xE2,0xC3,0x8B,\n    0xE8,0xD2,0x55,0x57,0xFC,0x9B,0x2F,0x7B,0x94,0x2B,0x45,0x55,0x54,0xB2,0xF5,0x42,\n    0xAE,0x2C,0x56,0xB8,0x55,0x7F,0x37,0x4A,0xD1,0x54,0x59,0x31,0x65,0xC4,0x08,0x53,\n    0x36,0x2C,0xF2,0xCE,0xF3,0x34,0xAD,0x93,0x82,0x92,0xA4,0xC9,0x32,0x42,0x13,0x24,\n    0x21,0x9A,0x84,0xA1,0x92,0x66,0x49,0x99,0x2C,0x64,0xDD,0x78,0x27,0x98,0x07,0xE7,\n    0xF7,0xC6,0x6B,0xB7,0x5E,0x15,0x78,0x65,0xD7,0x5D,0x79,0xCB,0xFC,0xF9,0x76,0xF3,\n    0x94,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,\n    0x44,0x44,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x37,0x58,0xD7,0x27,0x05,0x0B,\n    0x0A,0xE9,0xB7,0x44,0x4D,0x16,0x41,0xA6,0x88,0x9A,0x28,0x67,0x0D,0x13,0x82,0x26,\n    0x8A,0x1C,0x9A,0x70,0x44,0xD1,0x34,0x4D,0x13,0x6D,0xB6,0xDB,0x6D,0x86,0x31,0x8C,\n    0x63,0x18,0xC6,0x31,0x8C,0x63,0x18,0xC6,0x30,0x4F,0xE7,0xA0,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC7,0xC0,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xD9,\n    0x34,0x23,0x4D,0xC8,0xDB,0x91,0xAF,0x6F,0xE8,0x6A,0x9A,0xD3,0x44,0xED,0xA8,0x13,\n    0xA8,0x9E,0xF5,0x13,0xC1,0x13,0x33,0x33,0x34,0xF6,0x4F,0x05,0xC2,0x76,0xB6,0xFB,\n    0x8A,0xC9,0xDD,0x13,0xAA,0xBF,0x4A,0x6F,0xB7,0x24,0xED,0x58,0x6F,0xB2,0x4C,0x2D,\n    0x49,0xDF,0x84,0x49,0xD0,0x27,0x9B,0x89,0xE5,0x44,0xF2,0xA2,0x79,0x15,0x6C,0x56,\n    0x4E,0xEA,0x13,0xAD,0xFC,0x4E,0xA2,0x4C,0xD3,0x09,0xE2,0xC6,0x27,0x51,0x3A,0xA1,\n    0x26,0x70,0x19,0xBA,0x4F,0x3F,0x13,0xB5,0xAD,0xC0,0xD9,0x3B,0xA2,0x59,0xF8,0xDA,\n    0xAC,0x78,0x69,0xB7,0x68,0x92,0x52,0x34,0xAA,0xB4,0xB4,0x9E,0x9E,0x84,0xEA,0x26,\n    0x5B,0x3B,0x49,0xDD,0xA1,0x12,0xDB,0xA2,0xBA,0xE1,0x3C,0xB4,0x8C,0xAA,0x4E,0xEC,\n    0xF8,0x9D,0xAC,0x27,0x5A,0xB5,0xD4,0x93,0x09,0x9B,0x29,0x27,0x45,0x4A,0x4F,0x1C,\n    0x4C,0xD3,0x09,0xD2,0x89,0x91,0x33,0x4E,0x27,0x8F,0x33,0x47,0x99,0x64,0xEE,0xCB,\n    0xC5,0x49,0xDF,0xA4,0xC9,0xA4,0xF1,0x5E,0x27,0x57,0xC1,0x3D,0x14,0x4C,0x89,0x80,\n    0x9E,0x75,0x44,0xC1,0x2C,0x9A,0x49,0xC8,0x98,0xA2,0x71,0x20,0x49,0xCB,0xC4,0xF5,\n    0x11,0x32,0x26,0x68,0x6D,0x49,0xE8,0xA2,0x75,0x59,0xAC,0x5A,0x3B,0x93,0xD0,0x44,\n    0xED,0x6B,0x69,0x2C,0x9E,0xE2,0x96,0x11,0x3A,0xCE,0x09,0xD6,0x48,0x9D,0x44,0xC8,\n    0x9D,0xA2,0x4E,0x68,0xC6,0xDE,0x6A,0x24,0x92,0x64,0x64,0x44,0x49,0xB6,0x81,0x50,\n    0x92,0x27,0x6D,0x5D,0xBD,0x42,0xAA,0x4B,0x2A,0x48,0x26,0xB0,0x8D,0x20,0xDF,0x67,\n    0x82,0x12,0x0D,0xB0,0x00,0x40,0x43,0x43,0xBE,0xC1,0xC2,0x37,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0xE9,0xDB,0xB9,0x27,\n    0x37,0xB2,0x48,0xBF,0xE2,0xEE,0x48,0xA7,0x0A,0x12,0x17,0x6A,0xBE,0x94,0x40\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c2778b61f3c9060eaeb17510cb20ccb9a1f0e9478d05374d551650d53939e09f) == 2463, \"Wrong size of locale's blob\");\n\n/* zh_HK.UTF-8 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_90bcae322be4fc25f62458de5c5f964fb95dad22fc3ebfa303b946643156dd3b[] = {\n    0x48,0x4B,0x44,0x0A,0x48,0x4B,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,0x0A,\n    0x0A,0x2D,0x0A,0x32,0x0A,0x32,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,\n    0x0A,0x30,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_90bcae322be4fc25f62458de5c5f964fb95dad22fc3ebfa303b946643156dd3b) == 35, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_TW.Big5 LC_CTYPE locale data */\nstatic uint8_t  __crystax_locale_blob_448c0eba0835903f00cc41035ca89265ec030906f6b589c48eb52f20bb90ca85[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x82,0xBB,0x1A,0x01,0x00,0x0B,\n    0x0C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\n    0xFF,0xFF,0xFF,0xE0,0x06,0x9F,0x00,0x01,0xC0,0x08,0x15,0x89,0x77,0x78,0xF7,0x24,\n    0x11,0x14,0xA3,0xD4,0x68,0x00,0x0D,0x06,0x80,0x00,0x00,0x01,0x90,0x00,0x00,0x03,\n    0x41,0x90,0x34,0x03,0x6A,0x07,0xFF,0xAA,0xA8,0x06,0x81,0xFF,0xE9,0x55,0x00,0x0D,\n    0x00,0x00,0x00,0x32,0x06,0x81,0x90,0x06,0x8D,0x00,0x00,0x00,0x00,0x00,0x06,0x80,\n    0x00,0x0F,0xD5,0x0A,0x94,0x46,0x80,0x00,0x00,0x00,0x00,0x00,0x1A,0x1A,0x00,0x34,\n    0x00,0x00,0x3F,0xFF,0x55,0x54,0x00,0x1F,0xFE,0xAA,0xA0,0x1F,0xFA,0xA8,0x80,0xD0,\n    0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x00,0x00,\n    0x00,0x01,0x1B,0x2A,0x92,0x64,0xD2,0x83,0x40,0x00,0x34,0x00,0x03,0x40,0x03,0x40,\n    0x00,0x00,0x00,0x64,0x1A,0x18,0x80,0x00,0x1A,0x00,0x00,0x00,0x01,0xA0,0x00,0x00,\n    0x00,0x00,0x06,0x80,0x06,0x80,0x00,0x00,0x00,0x00,0x00,0x04,0x37,0xFF,0xAA,0xAA,\n    0xA3,0x00,0x00,0x00,0x04,0xC0,0x00,0x09,0x84,0xC0,0x09,0x80,0x00,0x00,0x00,0x02,\n    0x60,0x13,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,\n    0x00,0x00,0x00,0x00,0x02,0x4C,0x00,0x13,0x00,0x01,0x30,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x29,0x42,0x54,0xFD,0x11,0x34,0x0C,0x26,\n    0x8D,0x19,0xA4,0x06,0x02,0x18,0x8D,0x34,0x30,0x9A,0x1A,0x1A,0x06,0x83,0x46,0x13,\n    0x40,0x34,0xC9,0xA0,0x6F,0x54,0xF4,0x98,0x4F,0x53,0x04,0x06,0x9A,0x00,0x32,0x1A,\n    0x00,0x69,0x88,0x69,0xA0,0x30,0x86,0x09,0x88,0x1A,0x34,0xC1,0x34,0xC9,0xA6,0x8D,\n    0x34,0xC8,0x69,0xA6,0x46,0x83,0x40,0xF4,0xF4,0x99,0xF7,0x4B,0xA3,0xAA,0xBC,0x0D,\n    0x9C,0x2E,0x4E,0xE3,0x6D,0xBA,0x5C,0xFC,0xFD,0x9F,0x4B,0x94,0x91,0xB9,0xD1,0x1A,\n    0xB9,0x66,0x74,0x29,0x7B,0xA9,0xAC,0x1D,0xD8,0xC9,0xDD,0xCE,0xF0,0x69,0x0D,0x5B,\n    0xBC,0xF3,0x16,0x62,0x6B,0x33,0x5A,0x6B,0x6D,0x71,0xDE,0xDA,0xEB,0xBE,0x3B,0xEB,\n    0x5E,0x77,0xE7,0x7F,0x6B,0xED,0x81,0xA6,0x6C,0x2D,0x6B,0xC0,0x3C,0x0B,0xC1,0x3C,\n    0x1B,0xC2,0x3C,0x2B,0x62,0x6C,0x6D,0x91,0xB2,0xB6,0x66,0xCE,0xDA,0x1E,0x19,0xB1,\n    0xBC,0x3B,0xC4,0x36,0x96,0xD4,0xDA,0xDE,0x25,0xE2,0x9B,0x63,0xC5,0xB6,0xD7,0x8C,\n    0x78,0xD6,0xD8,0xF1,0xCD,0xB9,0xB7,0xB7,0x06,0xE2,0xF1,0xED,0xC9,0xE4,0x1E,0x45,\n    0xE4,0x9B,0x9E,0xF9,0xB9,0x1E,0x51,0x5E,0x55,0xBA,0x3C,0xB3,0xCB,0xBC,0xC3,0xCC,\n    0xBC,0xD3,0x75,0x79,0xB7,0x9C,0x79,0xD7,0x9E,0x6E,0xCF,0x3E,0xF4,0x0D,0xDD,0xBC,\n    0x37,0x96,0xF4,0xF4,0x2D,0xED,0xE8,0x9E,0x8D,0xE9,0x38,0x6F,0x4C,0xF4,0xEF,0x50,\n    0xDF,0x1E,0xA5,0xA6,0xD3,0x6F,0xAD,0xF9,0xEA,0x9B,0xFB,0xD5,0xBD,0x63,0xD6,0xBD,\n    0x73,0xD7,0xB8,0x06,0x83,0xD8,0x34,0xEE,0x05,0xEC,0x5C,0x13,0x83,0x70,0x8E,0x11,\n    0xC2,0xBD,0x93,0x50,0xF6,0x6D,0x43,0x86,0x6C,0x1A,0x6E,0x1D,0xC4,0x38,0x97,0x14,\n    0xF6,0x8F,0x6A,0xF6,0xCF,0x6E,0xF7,0x0F,0x72,0xE2,0xDE,0xE9,0xC6,0x3D,0xDB,0xDE,\n    0x3D,0xEB,0xDF,0x3D,0xFB,0xE0,0x3E,0x0B,0xE1,0x3E,0x1B,0xE2,0x38,0xD7,0x1C,0xF8,\n    0xAF,0x8C,0xF8,0xEE,0x3D,0xF2,0x1F,0x25,0xF2,0x9F,0x2D,0xF3,0x1F,0x35,0xF3,0x9F,\n    0x3D,0xF4,0x1C,0x1F,0x20,0xE3,0xDF,0x45,0x79,0x15,0xE4,0x95,0xC9,0xAB,0xE9,0x2B,\n    0xE9,0xAB,0xEA,0x2B,0x94,0x57,0xD5,0x57,0x2A,0xAF,0xAC,0xAF,0xAE,0xAF,0xB0,0xAF,\n    0xB2,0xAF,0xB4,0xAF,0xB6,0xAE,0x59,0x5C,0xBA,0xB9,0x6E,0x61,0x87,0x2A,0xAE,0x65,\n    0x5F,0x71,0x5F,0x75,0x5F,0x79,0x5C,0xD2,0xB9,0xB5,0x73,0x8A,0xE7,0x55,0xCF,0x2B,\n    0xEF,0xAB,0x9F,0x57,0x40,0xAE,0x85,0x5F,0x81,0x5F,0x85,0x5F,0x89,0x5F,0x8D,0x7F,\n    0x22,0xF4,0x4A,0xFC,0xAA,0xFC,0xCA,0xE8,0xD5,0xF9,0xD5,0xD2,0x2B,0xA5,0x57,0x4C,\n    0xAE,0x9D,0x5D,0x42,0xBF,0x42,0xBA,0x95,0x7E,0x95,0x75,0x4A,0xEA,0xD5,0xFA,0x95,\n    0xD6,0x2B,0xF5,0xAB,0xAD,0x57,0xEC,0x57,0xED,0x57,0x5C,0xAF,0xDC,0xAE,0xBD,0x5F,\n    0xBD,0x5D,0x82,0xBB,0x15,0x7F,0x05,0x7F,0x15,0x7F,0x25,0x76,0x4A,0xFE,0x6A,0xEC,\n    0xD5,0xFD,0x15,0xDA,0x2B,0xB5,0x57,0xF5,0x57,0xF6,0x57,0x6C,0xAF,0xEE,0xAF,0xF0,\n    0xAF,0xF2,0xAF,0xF4,0xAE,0xDD,0x5F,0xED,0x5F,0xF1,0x5F,0xF5,0x5F,0xF9,0x5F,0xFD,\n    0x5A,0x97,0x5E,0xEE,0x1A,0x96,0x8B,0x54,0xD5,0x33,0x02,0x68,0xD4,0xAA,0xA9,0x2B,\n    0xC3,0x36,0x82,0xBA,0x71,0x3A,0x6C,0xB2,0xE6,0x81,0x32,0xAB,0xFE,0x2B,0x2E,0xAB,\n    0x65,0xF5,0xCD,0x5A,0xE5,0x5F,0x55,0xED,0xDB,0x2E,0xDC,0xAB,0xD3,0xAD,0xE6,0x31,\n    0x54,0x9D,0x75,0x96,0x9A,0xC4,0xE3,0x18,0xE1,0x56,0x84,0x88,0x91,0x12,0x22,0x44,\n    0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,\n    0x44,0xAA,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,\n    0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x94,0x96,0xEF,0x31,0xBE,0xAE,\n    0xDD,0xFE,0xAD,0xD1,0xD9,0xF6,0x9C,0xE5,0xF5,0x5E,0x99,0x0D,0xDB,0x75,0x79,0x6E,\n    0xE5,0x97,0x95,0x6F,0x13,0x76,0xF8,0x96,0x09,0x11,0x22,0x24,0x44,0x88,0x91,0x12,\n    0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,\n    0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,\n    0x12,0x22,0x44,0x48,0x89,0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x22,0x44,0x48,0x89,\n    0x11,0x22,0x24,0x44,0x88,0x91,0x12,0x37,0x16,0x62,0xE2,0xCC,0x5C,0x59,0x10,0x3B,\n    0x29,0x0E,0x02,0x5C,0xB8,0x87,0x17,0x42,0xC8,0x5E,0xDE,0xB5,0xEC,0xE1,0x1B,0x0D,\n    0x24,0x8B,0xC6,0x76,0x69,0x6C,0x5B,0x10,0x66,0x91,0x89,0x20,0xC5,0x86,0x41,0x0C,\n    0x52,0x49,0x19,0x28,0x19,0xA9,0x9F,0x44,0xCB,0x9D,0x24,0x90,0x8D,0x1D,0x4E,0x34,\n    0x99,0xA6,0x00,0xED,0x2A,0x49,0xC7,0x65,0xC6,0x59,0x52,0x63,0x13,0x06,0x49,0x08,\n    0xCF,0x88,0xB6,0x49,0x29,0x32,0xE5,0x98,0x90,0x8C,0x84,0x65,0x28,0x65,0xCB,0x30,\n    0x99,0x22,0xE4,0xC9,0x32,0x18,0xC4,0xED,0xBB,0x1C,0xA6,0x18,0xCB,0x10,0x62,0x58,\n    0x12,0xE2,0xB1,0x22,0x4B,0x08,0x96,0xC4,0x90,0xC1,0x25,0x49,0x1B,0x52,0xD5,0x52,\n    0xC6,0xA5,0xFA,0xFD,0x64,0xB2,0x59,0x63,0x5F,0xE5,0x55,0x5D,0xA9,0x55,0x52,0x15,\n    0x6A,0xD5,0xA8,0xAD,0x2B,0x4B,0x84,0x65,0x89,0x10,0xA3,0x46,0x42,0x2A,0x91,0x99,\n    0x31,0x24,0x64,0x92,0x4A,0x99,0x29,0xA8,0x8C,0x62,0x35,0x18,0x89,0xB6,0x6A,0x33,\n    0x96,0xD4,0x44,0x62,0xAB,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x92,0x4D,\n    0x44,0x92,0x49,0x24,0x92,0x49,0x28,0x84,0x92,0x4D,0x94,0x92,0x49,0x24,0x92,0x49,\n    0x24,0x92,0x6E,0xF7,0x42,0x5E,0x3C,0x24,0x92,0x49,0x30,0x64,0x92,0x4D,0xD6,0x0F,\n    0xF1,0x02,0x88,0x88,0x9F,0xD6,0xB1,0x18,0x88,0xE9,0xA8,0xE4,0x76,0xF1,0x05,0x72,\n    0x7A,0x72,0xEC,0xF4,0xE3,0x8F,0x1C,0x71,0xDB,0xB7,0x6E,0xF3,0x66,0xCD,0xB8,0xD6,\n    0x9E,0x9A,0xC5,0x76,0x15,0xBE,0xAA,0x95,0x3A,0x6A,0x75,0x34,0x73,0x96,0x49,0x9E,\n    0xAA,0x52,0x66,0x55,0x28,0xC2,0xA9,0xD2,0x60,0x73,0x34,0xD4,0x54,0x9C,0x3D,0x19,\n    0xD5,0x55,0x6B,0x39,0xCD,0x74,0x88,0xE9,0xA8,0x8D,0x6A,0x31,0x24,0x80,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0xE3,0x33,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,\n    0x33,0x33,0x33,0x34,0x1C,0x1E,0xC3,0x82,0xD8,0xAA,0xAA,0x4A,0xEB,0xF7,0xC6,0xA4,\n    0xA9,0x5B,0x59,0x25,0x9C,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x68,\n    0x10,0x50,0x20,0x40,0x54,0x10,0x53,0x1F,0xDC,0x40,0xDF,0xE5,0xD0,0x9B,0xF4,0xD0,\n    0x9A,0x13,0x42,0x68,0x4D,0x09,0xA1,0x34,0xF3,0x49,0xAB,0xD8,0x91,0xDD,0x24,0x22,\n    0xA9,0x1D,0x11,0x73,0xCF,0xAE,0x73,0x9C,0xF2,0x8F,0xC7,0x52,0x49,0x24,0x92,0x92,\n    0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x3F,0xBF,0xA4,0x92,0x49,0x25,0x46,\n    0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0xAD,0x1B,\n    0xC4,0x5B,0x16,0xC9,0x16,0xC9,0x2D,0x8B,0x62,0x49,0xBB,0xD8,0x0B,0x48,0x8C,0x54,\n    0x96,0x85,0xB0,0x8C,0x15,0x13,0x6A,0xA4,0x26,0x15,0x29,0x50,0xAA,0x94,0x7C,0x73,\n    0x9E,0x79,0xE9,0xFB,0x9C,0xF8,0xE7,0x9C,0xE7,0x88,0x71,0x41,0x7E,0x7E,0x74,0x3D,\n    0xCF,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xB8,0xEF,0xF8,0xBB,0x92,0x29,0xC2,0x84,0x84,\n    0x15,0xD8,0xD0,0x08\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_448c0eba0835903f00cc41035ca89265ec030906f6b589c48eb52f20bb90ca85) == 1524, \"Wrong size of locale's blob\");\n\n/* zh_TW.Big5 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_1ad95ca39935fab98f4fb80fdaca9a27dce499933e86df2a536f3bc6ac5a217a[] = {\n    0x5E,0x5B,0x79,0x59,0xA3,0x42,0xA2,0xE7,0xAC,0x4F,0x5D,0x2E,0x2A,0x0A,0x5E,0x5B,\n    0x6E,0x4E,0xA2,0xF6,0xA2,0xDC,0xA4,0xA3,0xA7,0x5F,0x5D,0x2E,0x2A,0x0A,0xAC,0x4F,\n    0x0A,0xA7,0x5F,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1ad95ca39935fab98f4fb80fdaca9a27dce499933e86df2a536f3bc6ac5a217a) == 36, \"Wrong size of locale's blob\");\n\n/* zh_TW.Big5 LC_MONETARY locale data */\nstatic uint8_t  __crystax_locale_blob_1baf7da8e616156fdca37cdb579caa2635e3bdf984dd3cdd02301a604a94dbda[] = {\n    0x54,0x57,0x44,0x20,0x0A,0x4E,0x54,0x24,0x0A,0x2E,0x0A,0x2C,0x0A,0x33,0x3B,0x33,\n    0x0A,0x0A,0x2D,0x0A,0x30,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,0x31,0x0A,0x30,0x0A,\n    0x31,0x0A,0x34,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_1baf7da8e616156fdca37cdb579caa2635e3bdf984dd3cdd02301a604a94dbda) == 36, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_TW.Big5 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_c4e4dbb1bd6053ebd05f23f3e5cc9781d1d6c9c73807bc3c86a70601889c28f3[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x76,0x41,0x2A,0x87,0x00,0x00,\n    0x20,0xDF,0x9D,0x00,0x10,0x42,0x00,0xFF,0xF0,0x60,0xE2,0x4E,0xF0,0x36,0x02,0x40,\n    0x05,0x07,0x27,0x00,0x08,0x40,0x60,0x00,0x2A,0x30,0x00,0xB6,0x06,0x03,0x46,0x43,\n    0x41,0x84,0x03,0x40,0x34,0xD0,0x00,0x11,0x4D,0x07,0xA2,0x00,0x00,0x00,0x68,0x00,\n    0x06,0x82,0x53,0xD5,0x22,0x01,0x30,0x46,0x98,0x4C,0x46,0x46,0x6A,0x34,0xDA,0x7A,\n    0x9A,0x68,0x71,0x29,0x97,0x61,0x96,0x9B,0xE6,0xF4,0x78,0x9C,0x08,0x08,0x48,0x0E,\n    0x10,0x0E,0xEA,0x69,0x00,0x02,0x25,0x9D,0x8C,0x35,0xF0,0xA7,0x31,0x8C,0x22,0xF0,\n    0x8E,0xB6,0x29,0x57,0xEF,0x3D,0xF0,0x1F,0x29,0xC6,0xD6,0xDA,0x62,0x91,0x5A,0xF9,\n    0x1E,0xCD,0x15,0xD7,0xA7,0xE2,0x29,0x6F,0xC0,0x22,0x4A,0x52,0x12,0x52,0x14,0x51,\n    0x45,0x14,0x53,0xFB,0xA7,0x63,0xA2,0x21,0x64,0x42,0x48,0x51,0x03,0x0A,0x17,0x5E,\n    0xE5,0x94,0x4D,0x55,0x84,0x6F,0xF7,0xB2,0x8A,0x76,0xD4,0x54,0x66,0x0E,0x64,0xC9,\n    0x93,0x26,0x4C,0x99,0x74,0xD9,0x8F,0x1E,0xC9,0x44,0x70,0xD4,0x58,0xC1,0x6A,0x11,\n    0x16,0xF9,0x17,0x72,0x45,0x38,0x50,0x90,0x76,0x41,0x2A,0x87\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c4e4dbb1bd6053ebd05f23f3e5cc9781d1d6c9c73807bc3c86a70601889c28f3) == 204, \"Wrong size of locale's blob\");\n\n/* zh_TW.UTF-8 LC_MESSAGES locale data */\nstatic uint8_t  __crystax_locale_blob_77ef729a45e7b1c8e0c23a85100b42e760913b636d79d91be72731c3d7797273[] = {\n    0x5E,0x5B,0x79,0x59,0xEF,0xBD,0x99,0xEF,0xBC,0xB9,0xE6,0x98,0xAF,0x5D,0x2E,0x2A,\n    0x0A,0x5E,0x5B,0x6E,0x4E,0xEF,0xBD,0x8E,0xEF,0xBC,0xAE,0xE4,0xB8,0x8D,0xE5,0x90,\n    0xA6,0x5D,0x2E,0x2A,0x0A,0xE6,0x98,0xAF,0x0A,0xE5,0x90,0xA6,0x0A\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_77ef729a45e7b1c8e0c23a85100b42e760913b636d79d91be72731c3d7797273) == 45, \"Wrong size of locale's blob\");\n\n/* BZip2 compressed zh_TW.UTF-8 LC_TIME locale data */\nstatic uint8_t  __crystax_locale_blob_c50e595ced0bf44d64945e175d822ee34ea83ce222d961bacb6a41d79f7d11d9[] = {\n    0x42,0x5A,0x68,0x39,0x31,0x41,0x59,0x26,0x53,0x59,0x44,0xE1,0x47,0x1A,0x00,0x00,\n    0x20,0xDF,0xF9,0x00,0x10,0x42,0x00,0xFF,0xF0,0x20,0x62,0x0C,0x70,0x36,0x02,0x40,\n    0x00,0x53,0x7E,0x34,0xAC,0x02,0xC2,0x04,0x70,0x07,0x80,0x30,0x00,0xAB,0x30,0x95,\n    0x53,0xC9,0xA9,0xE5,0x03,0x41,0xA0,0x06,0x20,0x1A,0x34,0x06,0x40,0x3F,0x48,0x34,\n    0xD2,0xA7,0xA4,0x1A,0x64,0xD0,0x31,0x34,0xD0,0x07,0xA4,0x3D,0x41,0xA0,0xD0,0x34,\n    0x09,0x4D,0x4A,0x68,0x00,0x00,0x03,0x46,0x40,0x68,0x00,0x34,0xD3,0x6A,0x48,0xD7,\n    0x58,0xB3,0x6A,0xDD,0xC8,0x7C,0xC7,0xCF,0x7A,0xE2,0x59,0x12,0x88,0x54,0x47,0x75,\n    0x75,0x80,0xA2,0x79,0x60,0xDD,0xE3,0xB3,0x5A,0xC6,0x32,0x7B,0xCA,0x73,0xB8,0x49,\n    0xB7,0x6B,0x5B,0x9D,0x00,0xD0,0x46,0xBD,0xE5,0xCC,0x46,0x02,0x4D,0x4D,0x17,0x8D,\n    0x87,0x3A,0x5C,0xA8,0xC3,0x6D,0x00,0x20,0x85,0x55,0x04,0x2A,0x89,0x09,0x09,0x09,\n    0x09,0x09,0x12,0x71,0x90,0x02,0xA2,0x08,0x17,0xC3,0xCF,0xE2,0xCF,0x8F,0x6C,0xCC,\n    0x24,0x50,0xA2,0x13,0x0E,0x60,0x95,0xC4,0xE1,0x19,0x00,0xE6,0x06,0xFA,0xCF,0x99,\n    0x9A,0x52,0x77,0x8D,0x4D,0x05,0xD7,0x88,0x12,0x42,0xC0,0xF7,0xC0,0x03,0x34,0x2D,\n    0x73,0x3E,0x92,0x92,0x50,0xA0,0x41,0x04,0x10,0x41,0x06,0x93,0x75,0xA8,0x5D,0xC9,\n    0x14,0xE1,0x42,0x41,0x13,0x85,0x1C,0x68\n};\n__CRYSTAX_STATIC_ASSERT(sizeof(__crystax_locale_blob_c50e595ced0bf44d64945e175d822ee34ea83ce222d961bacb6a41d79f7d11d9) == 232, \"Wrong size of locale's blob\");\n\nstatic __crystax_locale_data_t __crystax_locale_data_array[174];\n\nsize_t __crystax_locale_table_size()\n{\n    return sizeof(__crystax_locale_data_array)/sizeof(__crystax_locale_data_array[0]);\n}\n\n__crystax_locale_data_t * __crystax_locale_data(size_t idx)\n{\n    if (idx >= __crystax_locale_table_size())\n        return NULL;\n    return &__crystax_locale_data_array[idx];\n}\n\nstatic void __crystax_locale_init_impl()\n{\n    memset(&__crystax_locale_data_array, 0, sizeof(__crystax_locale_data_array));\n\n    __crystax_locale_data_array[0].encoding = \"UTF-8\";\n    __crystax_locale_data_array[0].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[0].data[LC_CTYPE].blob.data = __crystax_locale_blob_4adf8926026adfd28daa074b38918bc14d0ce862e2150cc82eaec625ddde0d61;\n    __crystax_locale_data_array[0].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_4adf8926026adfd28daa074b38918bc14d0ce862e2150cc82eaec625ddde0d61);\n    __crystax_locale_data_array[0].data[LC_CTYPE].blob.compressed = 1;\n\n    __crystax_locale_data_array[1].encoding = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[1].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[1].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[1].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[1].data[LC_MESSAGES].blob.data = __crystax_locale_blob_90738d86bf29dc39d971c19f444d9ba9ff572e95d6e4f1144741f1df399200cd;\n    __crystax_locale_data_array[1].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_90738d86bf29dc39d971c19f444d9ba9ff572e95d6e4f1144741f1df399200cd);\n    __crystax_locale_data_array[1].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[1].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[1].data[LC_MONETARY].blob.data = __crystax_locale_blob_e77de040f5f7a8474db16baec9a524791f03815b969fc406975d33977ef0ca5c;\n    __crystax_locale_data_array[1].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_e77de040f5f7a8474db16baec9a524791f03815b969fc406975d33977ef0ca5c);\n    __crystax_locale_data_array[1].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[1].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[1].data[LC_NUMERIC].blob.data = __crystax_locale_blob_b62cc548fd428ed75d0bb84710ac6a27bea4cf00823aba3d89955c63cf280f48;\n    __crystax_locale_data_array[1].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_b62cc548fd428ed75d0bb84710ac6a27bea4cf00823aba3d89955c63cf280f48);\n    __crystax_locale_data_array[1].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[1].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[2].encoding = \"af_ZA.ISO8859-15\";\n    __crystax_locale_data_array[2].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[2].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[2].data[LC_MESSAGES].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[2].data[LC_MONETARY].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[2].data[LC_NUMERIC].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[2].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[3].encoding = \"af_ZA.UTF-8\";\n    __crystax_locale_data_array[3].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[3].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[3].data[LC_MESSAGES].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[3].data[LC_MONETARY].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[3].data[LC_NUMERIC].alias = \"af_ZA.ISO8859-1\";\n    __crystax_locale_data_array[3].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[4].encoding = \"am_ET.UTF-8\";\n    __crystax_locale_data_array[4].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[4].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[4].data[LC_CTYPE].blob.data = __crystax_locale_blob_1c7a57d8f7a459e5e0d226b6a20fb96365679d360fe09be748402c38286d21a0;\n    __crystax_locale_data_array[4].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_1c7a57d8f7a459e5e0d226b6a20fb96365679d360fe09be748402c38286d21a0);\n    __crystax_locale_data_array[4].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[4].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[4].data[LC_MESSAGES].blob.data = __crystax_locale_blob_7933b309a0b751aa45fe67cd9234225cda9927c7f41fd3f64f2edf3607ca7fd4;\n    __crystax_locale_data_array[4].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_7933b309a0b751aa45fe67cd9234225cda9927c7f41fd3f64f2edf3607ca7fd4);\n    __crystax_locale_data_array[4].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[4].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[4].data[LC_MONETARY].blob.data = __crystax_locale_blob_fb4794bd5b713e95c5005257777d1645ca584853723fdf5bb3725ac159ef5784;\n    __crystax_locale_data_array[4].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_fb4794bd5b713e95c5005257777d1645ca584853723fdf5bb3725ac159ef5784);\n    __crystax_locale_data_array[4].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[4].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[4].data[LC_NUMERIC].blob.data = __crystax_locale_blob_c80301ce26dcaa16da8f976d564b242a4bedb016d88ab2c630c5cc5b40a5d662;\n    __crystax_locale_data_array[4].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_c80301ce26dcaa16da8f976d564b242a4bedb016d88ab2c630c5cc5b40a5d662);\n    __crystax_locale_data_array[4].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[4].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[4].data[LC_TIME].blob.data = __crystax_locale_blob_dd17b3f3f5335e56d2c8f5a65e0596720ebf66c9d8c014b80b0746acd802ad8f;\n    __crystax_locale_data_array[4].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_dd17b3f3f5335e56d2c8f5a65e0596720ebf66c9d8c014b80b0746acd802ad8f);\n    __crystax_locale_data_array[4].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[5].encoding = \"be_BY.CP1131\";\n    __crystax_locale_data_array[5].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[5].data[LC_COLLATE].blob.data = __crystax_locale_blob_91ed966e5541dbb4c5290b94f1fc0832bfcfb9e5a69ec20f4fb464d1623118c6;\n    __crystax_locale_data_array[5].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_91ed966e5541dbb4c5290b94f1fc0832bfcfb9e5a69ec20f4fb464d1623118c6);\n    __crystax_locale_data_array[5].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[5].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[5].data[LC_CTYPE].blob.data = __crystax_locale_blob_20be345810249c9cd73f01119db93e094413517de34fa249d5b5644cfa3c2aea;\n    __crystax_locale_data_array[5].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_20be345810249c9cd73f01119db93e094413517de34fa249d5b5644cfa3c2aea);\n    __crystax_locale_data_array[5].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[5].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[5].data[LC_MESSAGES].blob.data = __crystax_locale_blob_115f88e876207067e1abb1cca5616254c96bfa80638c76470b1af7411dd06ddf;\n    __crystax_locale_data_array[5].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_115f88e876207067e1abb1cca5616254c96bfa80638c76470b1af7411dd06ddf);\n    __crystax_locale_data_array[5].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[5].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[5].data[LC_MONETARY].blob.data = __crystax_locale_blob_cac1e34dfdc6569c8897ea6bc7cacaccdab7c22f850766e6e1d57d3c4e2ee8f8;\n    __crystax_locale_data_array[5].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_cac1e34dfdc6569c8897ea6bc7cacaccdab7c22f850766e6e1d57d3c4e2ee8f8);\n    __crystax_locale_data_array[5].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[5].data[LC_NUMERIC].alias = \"be_BY.CP1251\";\n    __crystax_locale_data_array[5].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[5].data[LC_TIME].blob.data = __crystax_locale_blob_468c22abad44e99854a1dc74bb8838c90006a5a13bec83069d89d04b7a025b18;\n    __crystax_locale_data_array[5].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_468c22abad44e99854a1dc74bb8838c90006a5a13bec83069d89d04b7a025b18);\n    __crystax_locale_data_array[5].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[6].encoding = \"be_BY.CP1251\";\n    __crystax_locale_data_array[6].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[6].data[LC_COLLATE].blob.data = __crystax_locale_blob_3365f7493bb9d3fb943387168fa5714c2496b98c23793eb73e737f795e794a5a;\n    __crystax_locale_data_array[6].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_3365f7493bb9d3fb943387168fa5714c2496b98c23793eb73e737f795e794a5a);\n    __crystax_locale_data_array[6].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[6].data[LC_CTYPE].alias = \"bg_BG.CP1251\";\n    __crystax_locale_data_array[6].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[6].data[LC_MESSAGES].blob.data = __crystax_locale_blob_eb3a423ecc2cc7c7893ee48d239842d61597634ce2a2f8e5784be4d44747ac7f;\n    __crystax_locale_data_array[6].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_eb3a423ecc2cc7c7893ee48d239842d61597634ce2a2f8e5784be4d44747ac7f);\n    __crystax_locale_data_array[6].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[6].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[6].data[LC_MONETARY].blob.data = __crystax_locale_blob_b2e1949aa0823f3515284a27bafcc6754b41966db0ebbce38a234f9a80524f55;\n    __crystax_locale_data_array[6].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b2e1949aa0823f3515284a27bafcc6754b41966db0ebbce38a234f9a80524f55);\n    __crystax_locale_data_array[6].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[6].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[6].data[LC_NUMERIC].blob.data = __crystax_locale_blob_eb031fdf489e8b1c7565475b064767a7252f7d48a1f7405e290f0d898d2dddb2;\n    __crystax_locale_data_array[6].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_eb031fdf489e8b1c7565475b064767a7252f7d48a1f7405e290f0d898d2dddb2);\n    __crystax_locale_data_array[6].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[6].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[6].data[LC_TIME].blob.data = __crystax_locale_blob_159b5768e14e294358f661602773514fc0d18fc9cc2a3e66a1f9d8d5cce0a89d;\n    __crystax_locale_data_array[6].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_159b5768e14e294358f661602773514fc0d18fc9cc2a3e66a1f9d8d5cce0a89d);\n    __crystax_locale_data_array[6].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[7].encoding = \"be_BY.ISO8859-5\";\n    __crystax_locale_data_array[7].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[7].data[LC_COLLATE].blob.data = __crystax_locale_blob_d6f383ec4e1d7325063f66e746ee508283dd8ee1cfd9c67180ad4a80bb8f8767;\n    __crystax_locale_data_array[7].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_d6f383ec4e1d7325063f66e746ee508283dd8ee1cfd9c67180ad4a80bb8f8767);\n    __crystax_locale_data_array[7].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[7].data[LC_CTYPE].alias = \"ru_RU.ISO8859-5\";\n    __crystax_locale_data_array[7].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[7].data[LC_MESSAGES].blob.data = __crystax_locale_blob_0c4d5c9808f5b43e43ce27f3bc46c388012e8fb46a76d210f1fdef98061920cb;\n    __crystax_locale_data_array[7].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_0c4d5c9808f5b43e43ce27f3bc46c388012e8fb46a76d210f1fdef98061920cb);\n    __crystax_locale_data_array[7].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[7].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[7].data[LC_MONETARY].blob.data = __crystax_locale_blob_f54039248098acd0614b50b48a477da224b7f3670c70c9bc9a0ac0758bc90e0f;\n    __crystax_locale_data_array[7].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f54039248098acd0614b50b48a477da224b7f3670c70c9bc9a0ac0758bc90e0f);\n    __crystax_locale_data_array[7].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[7].data[LC_NUMERIC].alias = \"be_BY.CP1251\";\n    __crystax_locale_data_array[7].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[7].data[LC_TIME].blob.data = __crystax_locale_blob_cb3ae5dca75b7c9ae157001748bc6d822c4858fd609bdb53cf88e4f67ced6fea;\n    __crystax_locale_data_array[7].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_cb3ae5dca75b7c9ae157001748bc6d822c4858fd609bdb53cf88e4f67ced6fea);\n    __crystax_locale_data_array[7].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[8].encoding = \"be_BY.UTF-8\";\n    __crystax_locale_data_array[8].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[8].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[8].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[8].data[LC_MESSAGES].blob.data = __crystax_locale_blob_d0e72dfb43490f8187fc6cd4f3dc28dbf3dde32840fcd3a390150c1291304668;\n    __crystax_locale_data_array[8].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_d0e72dfb43490f8187fc6cd4f3dc28dbf3dde32840fcd3a390150c1291304668);\n    __crystax_locale_data_array[8].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[8].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[8].data[LC_MONETARY].blob.data = __crystax_locale_blob_52efdde10ea62a67946e4e4d44be3ff44883b355af157ef14cd7c245a4a6d37b;\n    __crystax_locale_data_array[8].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_52efdde10ea62a67946e4e4d44be3ff44883b355af157ef14cd7c245a4a6d37b);\n    __crystax_locale_data_array[8].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[8].data[LC_NUMERIC].alias = \"be_BY.CP1251\";\n    __crystax_locale_data_array[8].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[8].data[LC_TIME].blob.data = __crystax_locale_blob_22162ef6b8b722f6bec0452a7109590c8fd403a97d0ccf30c096dbe7b3a86e52;\n    __crystax_locale_data_array[8].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_22162ef6b8b722f6bec0452a7109590c8fd403a97d0ccf30c096dbe7b3a86e52);\n    __crystax_locale_data_array[8].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[9].encoding = \"bg_BG.CP1251\";\n    __crystax_locale_data_array[9].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_COLLATE].blob.data = __crystax_locale_blob_0ea069f11ccdc0402d635d6bf709cac00d7f4f0fa2e52310605aadc952ba029d;\n    __crystax_locale_data_array[9].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_0ea069f11ccdc0402d635d6bf709cac00d7f4f0fa2e52310605aadc952ba029d);\n    __crystax_locale_data_array[9].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[9].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_CTYPE].blob.data = __crystax_locale_blob_9fbf92515e9618e04064da740e46a25dccd95ddc0a726f65760f74e00b887db5;\n    __crystax_locale_data_array[9].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_9fbf92515e9618e04064da740e46a25dccd95ddc0a726f65760f74e00b887db5);\n    __crystax_locale_data_array[9].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[9].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_MESSAGES].blob.data = __crystax_locale_blob_78899c7f7f8b53cc2ed3edeb2b8eaaeb2e3ae55f86cba862780fd4c27f77c734;\n    __crystax_locale_data_array[9].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_78899c7f7f8b53cc2ed3edeb2b8eaaeb2e3ae55f86cba862780fd4c27f77c734);\n    __crystax_locale_data_array[9].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[9].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_MONETARY].blob.data = __crystax_locale_blob_b58113b68d5850f2da8b8a52f36a9fbc410495900474f6363bd59452f1298aa7;\n    __crystax_locale_data_array[9].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b58113b68d5850f2da8b8a52f36a9fbc410495900474f6363bd59452f1298aa7);\n    __crystax_locale_data_array[9].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[9].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_NUMERIC].blob.data = __crystax_locale_blob_3cb596d30b5b86a45b379afb6dc6a8ab18631dee1adace0c17e59247b720483e;\n    __crystax_locale_data_array[9].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_3cb596d30b5b86a45b379afb6dc6a8ab18631dee1adace0c17e59247b720483e);\n    __crystax_locale_data_array[9].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[9].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[9].data[LC_TIME].blob.data = __crystax_locale_blob_4a60886611ae386874df841ce054dc38f4e1628c4942e649c9113372580b91a3;\n    __crystax_locale_data_array[9].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_4a60886611ae386874df841ce054dc38f4e1628c4942e649c9113372580b91a3);\n    __crystax_locale_data_array[9].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[10].encoding = \"bg_BG.UTF-8\";\n    __crystax_locale_data_array[10].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[10].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[10].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[10].data[LC_MESSAGES].blob.data = __crystax_locale_blob_daf87376ffe7540fd6f59f8c8807c102d37a3b6a4d54af7e91e7e872fd853672;\n    __crystax_locale_data_array[10].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_daf87376ffe7540fd6f59f8c8807c102d37a3b6a4d54af7e91e7e872fd853672);\n    __crystax_locale_data_array[10].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[10].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[10].data[LC_MONETARY].blob.data = __crystax_locale_blob_59abcff540d2355a60968c6d60f1a47c2ace6d4576804a4f5ad7c5104b57dc61;\n    __crystax_locale_data_array[10].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_59abcff540d2355a60968c6d60f1a47c2ace6d4576804a4f5ad7c5104b57dc61);\n    __crystax_locale_data_array[10].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[10].data[LC_NUMERIC].alias = \"bg_BG.CP1251\";\n    __crystax_locale_data_array[10].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[10].data[LC_TIME].blob.data = __crystax_locale_blob_7724f9126aa8dddea09d6ec9098fc199fa11d63f99b128826fb71bed3fbfcb60;\n    __crystax_locale_data_array[10].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_7724f9126aa8dddea09d6ec9098fc199fa11d63f99b128826fb71bed3fbfcb60);\n    __crystax_locale_data_array[10].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[11].encoding = \"ca_AD.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_COLLATE].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[11].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[12].encoding = \"ca_AD.ISO8859-15\";\n    __crystax_locale_data_array[12].data[LC_COLLATE].alias = \"ca_ES.ISO8859-15\";\n    __crystax_locale_data_array[12].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[12].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[12].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[12].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[12].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[13].encoding = \"ca_AD.UTF-8\";\n    __crystax_locale_data_array[13].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[13].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[13].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[13].data[LC_MONETARY].alias = \"ca_ES.UTF-8\";\n    __crystax_locale_data_array[13].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[13].data[LC_TIME].alias = \"ca_ES.UTF-8\";\n\n    __crystax_locale_data_array[14].encoding = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[14].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[14].data[LC_COLLATE].blob.data = __crystax_locale_blob_eb974ed0a2c91380b75a6c5548bee9627cd3b5246ed216951d5daa9019c384bc;\n    __crystax_locale_data_array[14].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_eb974ed0a2c91380b75a6c5548bee9627cd3b5246ed216951d5daa9019c384bc);\n    __crystax_locale_data_array[14].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[14].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[14].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[14].data[LC_MESSAGES].blob.data = __crystax_locale_blob_970b925cd8dc26204adf45288e33e902785358369575e1666381f7ce2f3ebefb;\n    __crystax_locale_data_array[14].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_970b925cd8dc26204adf45288e33e902785358369575e1666381f7ce2f3ebefb);\n    __crystax_locale_data_array[14].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[14].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[14].data[LC_MONETARY].blob.data = __crystax_locale_blob_cee2ea78c539874d6590db391ba81a149b64594f7ddd3997a67bc41a7b43bd07;\n    __crystax_locale_data_array[14].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_cee2ea78c539874d6590db391ba81a149b64594f7ddd3997a67bc41a7b43bd07);\n    __crystax_locale_data_array[14].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[14].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[14].data[LC_NUMERIC].blob.data = __crystax_locale_blob_efe0d5320672e8d9deb80d8b738b64a644841ccdc6779fcdc923ff4a2b538837;\n    __crystax_locale_data_array[14].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_efe0d5320672e8d9deb80d8b738b64a644841ccdc6779fcdc923ff4a2b538837);\n    __crystax_locale_data_array[14].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[14].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[14].data[LC_TIME].blob.data = __crystax_locale_blob_5ecf773e99e390df85ce27b2fe40e8dae4381decb88d21664876f5feb5114aa5;\n    __crystax_locale_data_array[14].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_5ecf773e99e390df85ce27b2fe40e8dae4381decb88d21664876f5feb5114aa5);\n    __crystax_locale_data_array[14].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[15].encoding = \"ca_ES.ISO8859-15\";\n    __crystax_locale_data_array[15].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[15].data[LC_COLLATE].blob.data = __crystax_locale_blob_967913fc34bbd60f89d096551a9e83c2fe96bcde5e3964890e1685120f476625;\n    __crystax_locale_data_array[15].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_967913fc34bbd60f89d096551a9e83c2fe96bcde5e3964890e1685120f476625);\n    __crystax_locale_data_array[15].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[15].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[15].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[15].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[15].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[15].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[16].encoding = \"ca_ES.UTF-8\";\n    __crystax_locale_data_array[16].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[16].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[16].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[16].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[16].data[LC_MONETARY].blob.data = __crystax_locale_blob_83d0be7f8909feff174f2b3d1eebb560565992906d449f8678aa6ee01001f772;\n    __crystax_locale_data_array[16].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_83d0be7f8909feff174f2b3d1eebb560565992906d449f8678aa6ee01001f772);\n    __crystax_locale_data_array[16].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[16].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[16].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[16].data[LC_TIME].blob.data = __crystax_locale_blob_2b4620071699832976286b7417b626ed119efe20443a2e8ebaa3088897ead4ce;\n    __crystax_locale_data_array[16].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_2b4620071699832976286b7417b626ed119efe20443a2e8ebaa3088897ead4ce);\n    __crystax_locale_data_array[16].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[17].encoding = \"ca_FR.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_COLLATE].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[17].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[18].encoding = \"ca_FR.ISO8859-15\";\n    __crystax_locale_data_array[18].data[LC_COLLATE].alias = \"ca_ES.ISO8859-15\";\n    __crystax_locale_data_array[18].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[18].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[18].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[18].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[18].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[19].encoding = \"ca_FR.UTF-8\";\n    __crystax_locale_data_array[19].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[19].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[19].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[19].data[LC_MONETARY].alias = \"ca_ES.UTF-8\";\n    __crystax_locale_data_array[19].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[19].data[LC_TIME].alias = \"ca_ES.UTF-8\";\n\n    __crystax_locale_data_array[20].encoding = \"ca_IT.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_COLLATE].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[20].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[21].encoding = \"ca_IT.ISO8859-15\";\n    __crystax_locale_data_array[21].data[LC_COLLATE].alias = \"ca_ES.ISO8859-15\";\n    __crystax_locale_data_array[21].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[21].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[21].data[LC_MONETARY].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[21].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[21].data[LC_TIME].alias = \"ca_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[22].encoding = \"ca_IT.UTF-8\";\n    __crystax_locale_data_array[22].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[22].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[22].data[LC_MESSAGES].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[22].data[LC_MONETARY].alias = \"ca_ES.UTF-8\";\n    __crystax_locale_data_array[22].data[LC_NUMERIC].alias = \"ca_ES.ISO8859-1\";\n    __crystax_locale_data_array[22].data[LC_TIME].alias = \"ca_ES.UTF-8\";\n\n    __crystax_locale_data_array[23].encoding = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[23].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[23].data[LC_COLLATE].blob.data = __crystax_locale_blob_1ddd36758d49f9ef9a37db25557f37cd49b0f9b4b9d3ebdbaf4e6d889322b8c1;\n    __crystax_locale_data_array[23].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_1ddd36758d49f9ef9a37db25557f37cd49b0f9b4b9d3ebdbaf4e6d889322b8c1);\n    __crystax_locale_data_array[23].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[23].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[23].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[23].data[LC_MESSAGES].blob.data = __crystax_locale_blob_00e4e594ea4653fadfc3756061517ff0ca14707de1781c786e6a1556a0bea5d7;\n    __crystax_locale_data_array[23].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_00e4e594ea4653fadfc3756061517ff0ca14707de1781c786e6a1556a0bea5d7);\n    __crystax_locale_data_array[23].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[23].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[23].data[LC_MONETARY].blob.data = __crystax_locale_blob_6229ccf6e93f362c13d659af89461794665bb5bca1e9c25c68f5dca8757a9548;\n    __crystax_locale_data_array[23].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_6229ccf6e93f362c13d659af89461794665bb5bca1e9c25c68f5dca8757a9548);\n    __crystax_locale_data_array[23].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[23].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[23].data[LC_NUMERIC].blob.data = __crystax_locale_blob_40766467c5194ea5315218b7450c72d5e5b1881193e90f455ea1b4b09ca11097;\n    __crystax_locale_data_array[23].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_40766467c5194ea5315218b7450c72d5e5b1881193e90f455ea1b4b09ca11097);\n    __crystax_locale_data_array[23].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[23].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[23].data[LC_TIME].blob.data = __crystax_locale_blob_3ab16ebac3e518f51212a37ea69165791a53d6e8fe87fbd39cde33c5c95bcfd1;\n    __crystax_locale_data_array[23].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_3ab16ebac3e518f51212a37ea69165791a53d6e8fe87fbd39cde33c5c95bcfd1);\n    __crystax_locale_data_array[23].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[24].encoding = \"cs_CZ.UTF-8\";\n    __crystax_locale_data_array[24].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[24].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[24].data[LC_MESSAGES].alias = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[24].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[24].data[LC_MONETARY].blob.data = __crystax_locale_blob_7ad2094f82b392f3bf157eb25c6eaa1d4ffe04ded220079c730a617091b3885c;\n    __crystax_locale_data_array[24].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_7ad2094f82b392f3bf157eb25c6eaa1d4ffe04ded220079c730a617091b3885c);\n    __crystax_locale_data_array[24].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[24].data[LC_NUMERIC].alias = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[24].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[24].data[LC_TIME].blob.data = __crystax_locale_blob_733c7c74429dee467e39a555ccc2cd92e7e724ce13adcca1d5217a208fb0253a;\n    __crystax_locale_data_array[24].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_733c7c74429dee467e39a555ccc2cd92e7e724ce13adcca1d5217a208fb0253a);\n    __crystax_locale_data_array[24].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[25].encoding = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[25].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[25].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[25].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[25].data[LC_MESSAGES].blob.data = __crystax_locale_blob_7e144c39135d4f2e500bece1a00993dfafdb521c9198aead47266ee548c4d98b;\n    __crystax_locale_data_array[25].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_7e144c39135d4f2e500bece1a00993dfafdb521c9198aead47266ee548c4d98b);\n    __crystax_locale_data_array[25].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[25].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[25].data[LC_MONETARY].blob.data = __crystax_locale_blob_fa58867a51f3b815eee07d6aab477f6bc41e1a3959a43921da9c59a5210f113a;\n    __crystax_locale_data_array[25].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_fa58867a51f3b815eee07d6aab477f6bc41e1a3959a43921da9c59a5210f113a);\n    __crystax_locale_data_array[25].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[25].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[25].data[LC_NUMERIC].blob.data = __crystax_locale_blob_970547e458204e1a538482b5f22e313bf57314f6c068e9e728989698e99e470c;\n    __crystax_locale_data_array[25].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_970547e458204e1a538482b5f22e313bf57314f6c068e9e728989698e99e470c);\n    __crystax_locale_data_array[25].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[25].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[25].data[LC_TIME].blob.data = __crystax_locale_blob_148ac3536ffb3d9b9fdf2f76f08d4b6b0315eff2700d095cfa51ace434a416de;\n    __crystax_locale_data_array[25].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_148ac3536ffb3d9b9fdf2f76f08d4b6b0315eff2700d095cfa51ace434a416de);\n    __crystax_locale_data_array[25].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[26].encoding = \"da_DK.ISO8859-15\";\n    __crystax_locale_data_array[26].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[26].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[26].data[LC_MESSAGES].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[26].data[LC_MONETARY].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[26].data[LC_NUMERIC].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[26].data[LC_TIME].alias = \"da_DK.ISO8859-1\";\n\n    __crystax_locale_data_array[27].encoding = \"da_DK.UTF-8\";\n    __crystax_locale_data_array[27].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[27].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[27].data[LC_MESSAGES].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[27].data[LC_MONETARY].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[27].data[LC_NUMERIC].alias = \"da_DK.ISO8859-1\";\n    __crystax_locale_data_array[27].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[27].data[LC_TIME].blob.data = __crystax_locale_blob_90e3d48c90f1c81e0e1c0684318fe071cf5b83e1d22312d806552c7e34ff0ef4;\n    __crystax_locale_data_array[27].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_90e3d48c90f1c81e0e1c0684318fe071cf5b83e1d22312d806552c7e34ff0ef4);\n    __crystax_locale_data_array[27].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[28].encoding = \"de_AT.ISO8859-1\";\n    __crystax_locale_data_array[28].data[LC_COLLATE].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[28].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[28].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[28].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[28].data[LC_MONETARY].blob.data = __crystax_locale_blob_952295621414875749128b4b80ca4c5250305baf6d5defbf84d813cb3ee03019;\n    __crystax_locale_data_array[28].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_952295621414875749128b4b80ca4c5250305baf6d5defbf84d813cb3ee03019);\n    __crystax_locale_data_array[28].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[28].data[LC_NUMERIC].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[28].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[28].data[LC_TIME].blob.data = __crystax_locale_blob_ddf0fa675f110f08768f24c9f070f3a5571df31e483a3404e1a581b6caea9af2;\n    __crystax_locale_data_array[28].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ddf0fa675f110f08768f24c9f070f3a5571df31e483a3404e1a581b6caea9af2);\n    __crystax_locale_data_array[28].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[29].encoding = \"de_AT.ISO8859-15\";\n    __crystax_locale_data_array[29].data[LC_COLLATE].alias = \"de_DE.ISO8859-15\";\n    __crystax_locale_data_array[29].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[29].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[29].data[LC_MONETARY].alias = \"de_AT.ISO8859-1\";\n    __crystax_locale_data_array[29].data[LC_NUMERIC].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[29].data[LC_TIME].alias = \"de_AT.ISO8859-1\";\n\n    __crystax_locale_data_array[30].encoding = \"de_AT.UTF-8\";\n    __crystax_locale_data_array[30].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[30].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[30].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[30].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[30].data[LC_MONETARY].blob.data = __crystax_locale_blob_b13737dd74851eb66d6a0e565f1460b365056dcddd0625bf4e304cc10d59ec1f;\n    __crystax_locale_data_array[30].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b13737dd74851eb66d6a0e565f1460b365056dcddd0625bf4e304cc10d59ec1f);\n    __crystax_locale_data_array[30].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[30].data[LC_NUMERIC].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[30].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[30].data[LC_TIME].blob.data = __crystax_locale_blob_a49331e7ff974558570ffd55cba825e0944c6dd79bbbb01a3007dd5d0c6f363f;\n    __crystax_locale_data_array[30].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_a49331e7ff974558570ffd55cba825e0944c6dd79bbbb01a3007dd5d0c6f363f);\n    __crystax_locale_data_array[30].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[31].encoding = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[31].data[LC_COLLATE].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[31].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[31].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[31].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[31].data[LC_MONETARY].blob.data = __crystax_locale_blob_c49ad9d2150bf3d5263dde317ce79c29c39d54f956b8fdfa7c52eb9aca823a3f;\n    __crystax_locale_data_array[31].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_c49ad9d2150bf3d5263dde317ce79c29c39d54f956b8fdfa7c52eb9aca823a3f);\n    __crystax_locale_data_array[31].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[31].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[31].data[LC_NUMERIC].blob.data = __crystax_locale_blob_364a3af76bba890612925743e9a916e709e7d9b1784c87d73b2674e45659b9f7;\n    __crystax_locale_data_array[31].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_364a3af76bba890612925743e9a916e709e7d9b1784c87d73b2674e45659b9f7);\n    __crystax_locale_data_array[31].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[31].data[LC_TIME].alias = \"de_DE.ISO8859-1\";\n\n    __crystax_locale_data_array[32].encoding = \"de_CH.ISO8859-15\";\n    __crystax_locale_data_array[32].data[LC_COLLATE].alias = \"de_DE.ISO8859-15\";\n    __crystax_locale_data_array[32].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[32].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[32].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[32].data[LC_NUMERIC].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[32].data[LC_TIME].alias = \"de_DE.ISO8859-1\";\n\n    __crystax_locale_data_array[33].encoding = \"de_CH.UTF-8\";\n    __crystax_locale_data_array[33].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[33].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[33].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[33].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[33].data[LC_NUMERIC].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[33].data[LC_TIME].alias = \"de_DE.UTF-8\";\n\n    __crystax_locale_data_array[34].encoding = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[34].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[34].data[LC_COLLATE].blob.data = __crystax_locale_blob_29a0c70330c4f6c57695a577acd08473eca75113f82caab7f64c4970c1480eb9;\n    __crystax_locale_data_array[34].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_29a0c70330c4f6c57695a577acd08473eca75113f82caab7f64c4970c1480eb9);\n    __crystax_locale_data_array[34].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[34].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[34].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[34].data[LC_MESSAGES].blob.data = __crystax_locale_blob_50bb629eb098299dd8608155e07388758bcdab11354cdf8834607b6114adbff8;\n    __crystax_locale_data_array[34].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_50bb629eb098299dd8608155e07388758bcdab11354cdf8834607b6114adbff8);\n    __crystax_locale_data_array[34].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[34].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[34].data[LC_MONETARY].blob.data = __crystax_locale_blob_75f08c9a7c0da160115b03685b12134500dca476e0a1bda0e875f29053b77c76;\n    __crystax_locale_data_array[34].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_75f08c9a7c0da160115b03685b12134500dca476e0a1bda0e875f29053b77c76);\n    __crystax_locale_data_array[34].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[34].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[34].data[LC_NUMERIC].blob.data = __crystax_locale_blob_3fb1b4eef6d977af815b141f6216760413afc0713e7e1b223bdcfad686551fb1;\n    __crystax_locale_data_array[34].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_3fb1b4eef6d977af815b141f6216760413afc0713e7e1b223bdcfad686551fb1);\n    __crystax_locale_data_array[34].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[34].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[34].data[LC_TIME].blob.data = __crystax_locale_blob_fc4e29abe3b12649bb411c4e84092f54369b917b2e6bd0917af73583b0deb674;\n    __crystax_locale_data_array[34].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_fc4e29abe3b12649bb411c4e84092f54369b917b2e6bd0917af73583b0deb674);\n    __crystax_locale_data_array[34].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[35].encoding = \"de_DE.ISO8859-15\";\n    __crystax_locale_data_array[35].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[35].data[LC_COLLATE].blob.data = __crystax_locale_blob_77a9bfaffb3ca6dc25f65d02d6a4565fdbbe6ab63d213158ac14a0969eb62fa5;\n    __crystax_locale_data_array[35].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_77a9bfaffb3ca6dc25f65d02d6a4565fdbbe6ab63d213158ac14a0969eb62fa5);\n    __crystax_locale_data_array[35].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[35].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[35].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[35].data[LC_MONETARY].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[35].data[LC_NUMERIC].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[35].data[LC_TIME].alias = \"de_DE.ISO8859-1\";\n\n    __crystax_locale_data_array[36].encoding = \"de_DE.UTF-8\";\n    __crystax_locale_data_array[36].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[36].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[36].data[LC_MESSAGES].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[36].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[36].data[LC_MONETARY].blob.data = __crystax_locale_blob_5c038f3fde6d343367decac38341816a8345abdc7a94756c384d179681b8b267;\n    __crystax_locale_data_array[36].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_5c038f3fde6d343367decac38341816a8345abdc7a94756c384d179681b8b267);\n    __crystax_locale_data_array[36].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[36].data[LC_NUMERIC].alias = \"de_DE.ISO8859-1\";\n    __crystax_locale_data_array[36].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[36].data[LC_TIME].blob.data = __crystax_locale_blob_7b95a43e74ad7132a87a519768c60adedb5c40f94f060b59b00d011e37ae1e4b;\n    __crystax_locale_data_array[36].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_7b95a43e74ad7132a87a519768c60adedb5c40f94f060b59b00d011e37ae1e4b);\n    __crystax_locale_data_array[36].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[37].encoding = \"el_GR.ISO8859-7\";\n    __crystax_locale_data_array[37].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_COLLATE].blob.data = __crystax_locale_blob_ddf7d9d14daa566ce40989afbe3723842fe72b0383dfd327418ef0c337cee15e;\n    __crystax_locale_data_array[37].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_ddf7d9d14daa566ce40989afbe3723842fe72b0383dfd327418ef0c337cee15e);\n    __crystax_locale_data_array[37].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[37].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_CTYPE].blob.data = __crystax_locale_blob_48923bb55f96eb45a955674edc02c10aebc645b83243ccb7fdd773c3486cd7ac;\n    __crystax_locale_data_array[37].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_48923bb55f96eb45a955674edc02c10aebc645b83243ccb7fdd773c3486cd7ac);\n    __crystax_locale_data_array[37].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[37].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3b238907a52bdd43e82807ededba1e1b6f3c4801844ba543ece8594e8bd49afc;\n    __crystax_locale_data_array[37].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3b238907a52bdd43e82807ededba1e1b6f3c4801844ba543ece8594e8bd49afc);\n    __crystax_locale_data_array[37].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[37].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_MONETARY].blob.data = __crystax_locale_blob_f8e5e92d9c927f4b1a56c4e39c7bfb3a1455d8dc32391f22de09416baa59ad45;\n    __crystax_locale_data_array[37].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f8e5e92d9c927f4b1a56c4e39c7bfb3a1455d8dc32391f22de09416baa59ad45);\n    __crystax_locale_data_array[37].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[37].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_NUMERIC].blob.data = __crystax_locale_blob_084d8b31a527bb71d29a3bdf445ee7ad62569376f7f5e120c26497068ba15297;\n    __crystax_locale_data_array[37].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_084d8b31a527bb71d29a3bdf445ee7ad62569376f7f5e120c26497068ba15297);\n    __crystax_locale_data_array[37].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[37].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[37].data[LC_TIME].blob.data = __crystax_locale_blob_533617556b631f58a3e1cc5fb4925d1e2dbc7db8e1ce45806f7091ac638c0d3d;\n    __crystax_locale_data_array[37].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_533617556b631f58a3e1cc5fb4925d1e2dbc7db8e1ce45806f7091ac638c0d3d);\n    __crystax_locale_data_array[37].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[38].encoding = \"el_GR.UTF-8\";\n    __crystax_locale_data_array[38].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[38].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[38].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[38].data[LC_MESSAGES].blob.data = __crystax_locale_blob_1c503746c4a9b4363fa298cfd560da81a776da0930560f7dd0a37cc340826900;\n    __crystax_locale_data_array[38].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_1c503746c4a9b4363fa298cfd560da81a776da0930560f7dd0a37cc340826900);\n    __crystax_locale_data_array[38].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[38].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[38].data[LC_MONETARY].blob.data = __crystax_locale_blob_7376273af0af2348b1901745f44ee3e4dde10b86b2e985d87b48ec061bd63725;\n    __crystax_locale_data_array[38].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_7376273af0af2348b1901745f44ee3e4dde10b86b2e985d87b48ec061bd63725);\n    __crystax_locale_data_array[38].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[38].data[LC_NUMERIC].alias = \"el_GR.ISO8859-7\";\n    __crystax_locale_data_array[38].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[38].data[LC_TIME].blob.data = __crystax_locale_blob_05f5c50bc74d8419c4d2fe78672134a882a674ae224d68a6a9fa516124334ce7;\n    __crystax_locale_data_array[38].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_05f5c50bc74d8419c4d2fe78672134a882a674ae224d68a6a9fa516124334ce7);\n    __crystax_locale_data_array[38].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[39].encoding = \"en_AU.ISO8859-1\";\n    __crystax_locale_data_array[39].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[39].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[39].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[39].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[39].data[LC_MONETARY].blob.data = __crystax_locale_blob_5b8eec40ea84283f4d83a536d072fdaf419975a7af1fc60e7d4ab32882a829b0;\n    __crystax_locale_data_array[39].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_5b8eec40ea84283f4d83a536d072fdaf419975a7af1fc60e7d4ab32882a829b0);\n    __crystax_locale_data_array[39].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[39].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[39].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[40].encoding = \"en_AU.ISO8859-15\";\n    __crystax_locale_data_array[40].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[40].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[40].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[40].data[LC_MONETARY].alias = \"en_AU.ISO8859-1\";\n    __crystax_locale_data_array[40].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[40].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[41].encoding = \"en_AU.US-ASCII\";\n    __crystax_locale_data_array[41].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[41].data[LC_CTYPE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[41].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[41].data[LC_MONETARY].alias = \"en_AU.ISO8859-1\";\n    __crystax_locale_data_array[41].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[41].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[42].encoding = \"en_AU.UTF-8\";\n    __crystax_locale_data_array[42].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[42].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[42].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[42].data[LC_MONETARY].alias = \"en_AU.ISO8859-1\";\n    __crystax_locale_data_array[42].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[42].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[43].encoding = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[43].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[43].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[43].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[43].data[LC_MESSAGES].blob.data = __crystax_locale_blob_a057067da93d43f5728b83d3b7ebdeb960728704ad96d4c60a21846af91c0cd6;\n    __crystax_locale_data_array[43].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_a057067da93d43f5728b83d3b7ebdeb960728704ad96d4c60a21846af91c0cd6);\n    __crystax_locale_data_array[43].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[43].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[43].data[LC_MONETARY].blob.data = __crystax_locale_blob_318f77b5d821cfdf005b0aefae83329b1a2d0e6eda494198fa821b89240341fc;\n    __crystax_locale_data_array[43].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_318f77b5d821cfdf005b0aefae83329b1a2d0e6eda494198fa821b89240341fc);\n    __crystax_locale_data_array[43].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[43].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[43].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[44].encoding = \"en_CA.ISO8859-15\";\n    __crystax_locale_data_array[44].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[44].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[44].data[LC_MESSAGES].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[44].data[LC_MONETARY].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[44].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[44].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[45].encoding = \"en_CA.US-ASCII\";\n    __crystax_locale_data_array[45].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[45].data[LC_CTYPE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[45].data[LC_MESSAGES].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[45].data[LC_MONETARY].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[45].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[45].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[46].encoding = \"en_CA.UTF-8\";\n    __crystax_locale_data_array[46].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[46].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[46].data[LC_MESSAGES].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[46].data[LC_MONETARY].alias = \"en_CA.ISO8859-1\";\n    __crystax_locale_data_array[46].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[46].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[47].encoding = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[47].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[47].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[47].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[47].data[LC_MESSAGES].blob.data = __crystax_locale_blob_cd6e534cc9e27af465cf1cd0bde0148d6f5e55f264bb95ea9405aae51967813d;\n    __crystax_locale_data_array[47].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_cd6e534cc9e27af465cf1cd0bde0148d6f5e55f264bb95ea9405aae51967813d);\n    __crystax_locale_data_array[47].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[47].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[47].data[LC_MONETARY].blob.data = __crystax_locale_blob_4a9d8aaaf2957252300b14e07040e1def829b2b3b6d00b447e686a2a923bd716;\n    __crystax_locale_data_array[47].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_4a9d8aaaf2957252300b14e07040e1def829b2b3b6d00b447e686a2a923bd716);\n    __crystax_locale_data_array[47].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[47].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[47].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[47].data[LC_TIME].blob.data = __crystax_locale_blob_44f785d665a76f44d499f1d93f09027641556188e954a45cbc4acbc86f4e0f3c;\n    __crystax_locale_data_array[47].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_44f785d665a76f44d499f1d93f09027641556188e954a45cbc4acbc86f4e0f3c);\n    __crystax_locale_data_array[47].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[48].encoding = \"en_GB.ISO8859-15\";\n    __crystax_locale_data_array[48].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[48].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[48].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[48].data[LC_MONETARY].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[48].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[48].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[49].encoding = \"en_GB.US-ASCII\";\n    __crystax_locale_data_array[49].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[49].data[LC_CTYPE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[49].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[49].data[LC_MONETARY].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[49].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[49].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[50].encoding = \"en_GB.UTF-8\";\n    __crystax_locale_data_array[50].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[50].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[50].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[50].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[50].data[LC_MONETARY].blob.data = __crystax_locale_blob_d9d3373c2cabf8bb855b6ce82bfe64c70574f79cc82ba5e02a543f34c6d5a659;\n    __crystax_locale_data_array[50].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_d9d3373c2cabf8bb855b6ce82bfe64c70574f79cc82ba5e02a543f34c6d5a659);\n    __crystax_locale_data_array[50].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[50].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[50].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[51].encoding = \"en_IE.UTF-8\";\n    __crystax_locale_data_array[51].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[51].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[51].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[51].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[51].data[LC_MONETARY].blob.data = __crystax_locale_blob_7463067acfeef9fa906e275343566ac4a7697f98cf3a2d4faaaaa7c66edbc53d;\n    __crystax_locale_data_array[51].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_7463067acfeef9fa906e275343566ac4a7697f98cf3a2d4faaaaa7c66edbc53d);\n    __crystax_locale_data_array[51].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[51].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[51].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[52].encoding = \"en_NZ.ISO8859-1\";\n    __crystax_locale_data_array[52].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[52].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[52].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[52].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[52].data[LC_MONETARY].blob.data = __crystax_locale_blob_a21e3b78c7fe292bb8f293f26be79187bdd8c487daa7c8556eaa3239a4abe5a0;\n    __crystax_locale_data_array[52].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_a21e3b78c7fe292bb8f293f26be79187bdd8c487daa7c8556eaa3239a4abe5a0);\n    __crystax_locale_data_array[52].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[52].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[52].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[53].encoding = \"en_NZ.ISO8859-15\";\n    __crystax_locale_data_array[53].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[53].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[53].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[53].data[LC_MONETARY].alias = \"en_NZ.ISO8859-1\";\n    __crystax_locale_data_array[53].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[53].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[54].encoding = \"en_NZ.US-ASCII\";\n    __crystax_locale_data_array[54].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[54].data[LC_CTYPE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[54].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[54].data[LC_MONETARY].alias = \"en_NZ.ISO8859-1\";\n    __crystax_locale_data_array[54].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[54].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[55].encoding = \"en_NZ.UTF-8\";\n    __crystax_locale_data_array[55].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[55].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[55].data[LC_MESSAGES].alias = \"en_GB.ISO8859-1\";\n    __crystax_locale_data_array[55].data[LC_MONETARY].alias = \"en_NZ.ISO8859-1\";\n    __crystax_locale_data_array[55].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[55].data[LC_TIME].alias = \"en_GB.ISO8859-1\";\n\n    __crystax_locale_data_array[56].encoding = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[56].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[56].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[56].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[56].data[LC_MESSAGES].blob.data = __crystax_locale_blob_18f84e940a580920be7321247ec98d53ba6f18cff8d7e7e8073e177e613b12c2;\n    __crystax_locale_data_array[56].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_18f84e940a580920be7321247ec98d53ba6f18cff8d7e7e8073e177e613b12c2);\n    __crystax_locale_data_array[56].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[56].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[56].data[LC_MONETARY].blob.data = __crystax_locale_blob_42c5d1254969c9958ad364b939807311e67d905f2108b5f15d4ce3e7992b440a;\n    __crystax_locale_data_array[56].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_42c5d1254969c9958ad364b939807311e67d905f2108b5f15d4ce3e7992b440a);\n    __crystax_locale_data_array[56].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[56].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[56].data[LC_NUMERIC].blob.data = __crystax_locale_blob_cfb9a008a84956315792e9d73cc626e089d7432e80d87f65fb95c58c5d574508;\n    __crystax_locale_data_array[56].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_cfb9a008a84956315792e9d73cc626e089d7432e80d87f65fb95c58c5d574508);\n    __crystax_locale_data_array[56].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[56].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[56].data[LC_TIME].blob.data = __crystax_locale_blob_6f0416f4e53000cb35060d9c639baa6fb8d8ebafd59806b0d5099e2f707a3387;\n    __crystax_locale_data_array[56].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_6f0416f4e53000cb35060d9c639baa6fb8d8ebafd59806b0d5099e2f707a3387);\n    __crystax_locale_data_array[56].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[57].encoding = \"en_US.ISO8859-15\";\n    __crystax_locale_data_array[57].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[57].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[57].data[LC_MESSAGES].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[57].data[LC_MONETARY].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[57].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[57].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[58].encoding = \"en_US.US-ASCII\";\n    __crystax_locale_data_array[58].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[58].data[LC_CTYPE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[58].data[LC_MESSAGES].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[58].data[LC_MONETARY].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[58].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[58].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[59].encoding = \"en_US.UTF-8\";\n    __crystax_locale_data_array[59].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[59].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[59].data[LC_MESSAGES].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[59].data[LC_MONETARY].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[59].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[59].data[LC_TIME].alias = \"en_US.ISO8859-1\";\n\n    __crystax_locale_data_array[60].encoding = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[60].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[60].data[LC_COLLATE].blob.data = __crystax_locale_blob_8dac8c0bc923a2309ac59deebf58f1ca69030a1519db7e1d5b2459a3ada7c9e7;\n    __crystax_locale_data_array[60].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_8dac8c0bc923a2309ac59deebf58f1ca69030a1519db7e1d5b2459a3ada7c9e7);\n    __crystax_locale_data_array[60].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[60].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[60].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[60].data[LC_MESSAGES].blob.data = __crystax_locale_blob_e4a3034b260453ada19cdc910c026fe44b680450a73654615267b28b4b7f9c1c;\n    __crystax_locale_data_array[60].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_e4a3034b260453ada19cdc910c026fe44b680450a73654615267b28b4b7f9c1c);\n    __crystax_locale_data_array[60].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[60].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[60].data[LC_MONETARY].blob.data = __crystax_locale_blob_411dea4743fbe9e2ba733e9d955348a19850931a9c1298c91af502e443177b8e;\n    __crystax_locale_data_array[60].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_411dea4743fbe9e2ba733e9d955348a19850931a9c1298c91af502e443177b8e);\n    __crystax_locale_data_array[60].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[60].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[60].data[LC_NUMERIC].blob.data = __crystax_locale_blob_604c017df03b97325bd2b88745eb91f20632593207c3de09967a2eae7e57b999;\n    __crystax_locale_data_array[60].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_604c017df03b97325bd2b88745eb91f20632593207c3de09967a2eae7e57b999);\n    __crystax_locale_data_array[60].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[60].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[60].data[LC_TIME].blob.data = __crystax_locale_blob_8c6e0e4029aef8b2b4c422b66cd230343cd2530a6efc6b2b312539ae385f0368;\n    __crystax_locale_data_array[60].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_8c6e0e4029aef8b2b4c422b66cd230343cd2530a6efc6b2b312539ae385f0368);\n    __crystax_locale_data_array[60].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[61].encoding = \"es_ES.ISO8859-15\";\n    __crystax_locale_data_array[61].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[61].data[LC_COLLATE].blob.data = __crystax_locale_blob_1616870bd2dd62823c53997242824d0bfc27744ed6fb5522ab4006da01b02508;\n    __crystax_locale_data_array[61].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_1616870bd2dd62823c53997242824d0bfc27744ed6fb5522ab4006da01b02508);\n    __crystax_locale_data_array[61].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[61].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[61].data[LC_MESSAGES].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[61].data[LC_MONETARY].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[61].data[LC_NUMERIC].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[61].data[LC_TIME].alias = \"es_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[62].encoding = \"es_ES.UTF-8\";\n    __crystax_locale_data_array[62].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[62].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[62].data[LC_MESSAGES].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[62].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[62].data[LC_MONETARY].blob.data = __crystax_locale_blob_0e9d9259ac18798c53ef064e9c9bd15a7a6a5c08c6d5e2ef6ec511c026e852e2;\n    __crystax_locale_data_array[62].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_0e9d9259ac18798c53ef064e9c9bd15a7a6a5c08c6d5e2ef6ec511c026e852e2);\n    __crystax_locale_data_array[62].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[62].data[LC_NUMERIC].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[62].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[62].data[LC_TIME].blob.data = __crystax_locale_blob_bfe2fdef2cbc187f8b5fe55d9ef737a0b01d222d738dbfed106cd04bfe5726e5;\n    __crystax_locale_data_array[62].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_bfe2fdef2cbc187f8b5fe55d9ef737a0b01d222d738dbfed106cd04bfe5726e5);\n    __crystax_locale_data_array[62].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[63].encoding = \"et_EE.ISO8859-15\";\n    __crystax_locale_data_array[63].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[63].data[LC_COLLATE].blob.data = __crystax_locale_blob_69f1ad33fc86e4dc933737fbbf66efc63ca712ead6eafaa121de17ed1735f85d;\n    __crystax_locale_data_array[63].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_69f1ad33fc86e4dc933737fbbf66efc63ca712ead6eafaa121de17ed1735f85d);\n    __crystax_locale_data_array[63].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[63].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[63].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[63].data[LC_MESSAGES].blob.data = __crystax_locale_blob_016dfb3e92e2f22157e4b345594b3e16f12b506ae13f95a3c9808d227c907570;\n    __crystax_locale_data_array[63].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_016dfb3e92e2f22157e4b345594b3e16f12b506ae13f95a3c9808d227c907570);\n    __crystax_locale_data_array[63].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[63].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[63].data[LC_MONETARY].blob.data = __crystax_locale_blob_1109cc12365fc18aac1289b5d2f451d30b19d31ed4e8a89558f775d937e17390;\n    __crystax_locale_data_array[63].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_1109cc12365fc18aac1289b5d2f451d30b19d31ed4e8a89558f775d937e17390);\n    __crystax_locale_data_array[63].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[63].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[63].data[LC_NUMERIC].blob.data = __crystax_locale_blob_26f16ff45b0629f40b8a122a3ec46f245ea85f0c9dab1704c73511832e5bf00c;\n    __crystax_locale_data_array[63].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_26f16ff45b0629f40b8a122a3ec46f245ea85f0c9dab1704c73511832e5bf00c);\n    __crystax_locale_data_array[63].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[63].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[63].data[LC_TIME].blob.data = __crystax_locale_blob_acf7048e458345b572e34581a699806b7c95659f28ca2b76616c03e2a987c131;\n    __crystax_locale_data_array[63].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_acf7048e458345b572e34581a699806b7c95659f28ca2b76616c03e2a987c131);\n    __crystax_locale_data_array[63].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[64].encoding = \"et_EE.UTF-8\";\n    __crystax_locale_data_array[64].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[64].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[64].data[LC_MESSAGES].alias = \"et_EE.ISO8859-15\";\n    __crystax_locale_data_array[64].data[LC_MONETARY].alias = \"et_EE.ISO8859-15\";\n    __crystax_locale_data_array[64].data[LC_NUMERIC].alias = \"et_EE.ISO8859-15\";\n    __crystax_locale_data_array[64].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[64].data[LC_TIME].blob.data = __crystax_locale_blob_5444e70cbcd8d2d7cf6801da717befdce8d19b12ca64546fefba5c20a698d33c;\n    __crystax_locale_data_array[64].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_5444e70cbcd8d2d7cf6801da717befdce8d19b12ca64546fefba5c20a698d33c);\n    __crystax_locale_data_array[64].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[65].encoding = \"eu_ES.ISO8859-1\";\n    __crystax_locale_data_array[65].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[65].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[65].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[65].data[LC_MESSAGES].blob.data = __crystax_locale_blob_253d190bc82c6a13dff85d9291b302e459e81212ed9d1c17e4b2a89bac2d72de;\n    __crystax_locale_data_array[65].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_253d190bc82c6a13dff85d9291b302e459e81212ed9d1c17e4b2a89bac2d72de);\n    __crystax_locale_data_array[65].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[65].data[LC_MONETARY].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[65].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[65].data[LC_NUMERIC].blob.data = __crystax_locale_blob_94632c34889e8beb7e8d090ee6d790fa9d2c4ed6df96133ae389222242d5dbfa;\n    __crystax_locale_data_array[65].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_94632c34889e8beb7e8d090ee6d790fa9d2c4ed6df96133ae389222242d5dbfa);\n    __crystax_locale_data_array[65].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[65].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[65].data[LC_TIME].blob.data = __crystax_locale_blob_a354b4dfe053b4b7fded780ce8bdcecd38a4aaaffd818ebba3e10963817f25ba;\n    __crystax_locale_data_array[65].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_a354b4dfe053b4b7fded780ce8bdcecd38a4aaaffd818ebba3e10963817f25ba);\n    __crystax_locale_data_array[65].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[66].encoding = \"eu_ES.ISO8859-15\";\n    __crystax_locale_data_array[66].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[66].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[66].data[LC_MESSAGES].alias = \"eu_ES.ISO8859-1\";\n    __crystax_locale_data_array[66].data[LC_MONETARY].alias = \"es_ES.ISO8859-1\";\n    __crystax_locale_data_array[66].data[LC_NUMERIC].alias = \"eu_ES.ISO8859-1\";\n    __crystax_locale_data_array[66].data[LC_TIME].alias = \"eu_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[67].encoding = \"eu_ES.UTF-8\";\n    __crystax_locale_data_array[67].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[67].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[67].data[LC_MESSAGES].alias = \"eu_ES.ISO8859-1\";\n    __crystax_locale_data_array[67].data[LC_MONETARY].alias = \"es_ES.UTF-8\";\n    __crystax_locale_data_array[67].data[LC_NUMERIC].alias = \"eu_ES.ISO8859-1\";\n    __crystax_locale_data_array[67].data[LC_TIME].alias = \"eu_ES.ISO8859-1\";\n\n    __crystax_locale_data_array[68].encoding = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[68].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[68].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[68].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[68].data[LC_MESSAGES].blob.data = __crystax_locale_blob_ea4d0ae2af69b08a500cc5730fd241228f7c2de4133034e84cf60e3199ece5b0;\n    __crystax_locale_data_array[68].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_ea4d0ae2af69b08a500cc5730fd241228f7c2de4133034e84cf60e3199ece5b0);\n    __crystax_locale_data_array[68].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[68].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[68].data[LC_MONETARY].blob.data = __crystax_locale_blob_8e9cab006170f6f2006602dc1d4ac88b4968f7dde439dc119e7017f0e67acc21;\n    __crystax_locale_data_array[68].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_8e9cab006170f6f2006602dc1d4ac88b4968f7dde439dc119e7017f0e67acc21);\n    __crystax_locale_data_array[68].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[68].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[68].data[LC_NUMERIC].blob.data = __crystax_locale_blob_e1993751a7444566a5e0f2e06ba3e627c9cfdc71ea0b10a8b41b1d05a56e0753;\n    __crystax_locale_data_array[68].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_e1993751a7444566a5e0f2e06ba3e627c9cfdc71ea0b10a8b41b1d05a56e0753);\n    __crystax_locale_data_array[68].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[68].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[68].data[LC_TIME].blob.data = __crystax_locale_blob_5f5c656f39f18904353b8f6d4d509a19e46959f197bb519ea88fc55ed0111049;\n    __crystax_locale_data_array[68].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_5f5c656f39f18904353b8f6d4d509a19e46959f197bb519ea88fc55ed0111049);\n    __crystax_locale_data_array[68].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[69].encoding = \"fi_FI.ISO8859-15\";\n    __crystax_locale_data_array[69].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[69].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[69].data[LC_MESSAGES].alias = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[69].data[LC_MONETARY].alias = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[69].data[LC_NUMERIC].alias = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[69].data[LC_TIME].alias = \"fi_FI.ISO8859-1\";\n\n    __crystax_locale_data_array[70].encoding = \"fi_FI.UTF-8\";\n    __crystax_locale_data_array[70].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[70].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[70].data[LC_MESSAGES].alias = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[70].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[70].data[LC_MONETARY].blob.data = __crystax_locale_blob_c0e4559b990ac539b1c1acd0cb9a3110b34292e9000b868cf4c43681257a5f9c;\n    __crystax_locale_data_array[70].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_c0e4559b990ac539b1c1acd0cb9a3110b34292e9000b868cf4c43681257a5f9c);\n    __crystax_locale_data_array[70].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[70].data[LC_NUMERIC].alias = \"fi_FI.ISO8859-1\";\n    __crystax_locale_data_array[70].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[70].data[LC_TIME].blob.data = __crystax_locale_blob_60d8af6bad1228fe508f475290efe2595da2b26b7d6ddf5f6104f7270910aec0;\n    __crystax_locale_data_array[70].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_60d8af6bad1228fe508f475290efe2595da2b26b7d6ddf5f6104f7270910aec0);\n    __crystax_locale_data_array[70].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[71].encoding = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[71].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[71].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[71].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[71].data[LC_MESSAGES].blob.data = __crystax_locale_blob_b28a4d54db3c877322e105c468dd45309d285d1e964f22b04b053a9e39533404;\n    __crystax_locale_data_array[71].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_b28a4d54db3c877322e105c468dd45309d285d1e964f22b04b053a9e39533404);\n    __crystax_locale_data_array[71].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[71].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[71].data[LC_MONETARY].blob.data = __crystax_locale_blob_be735750655b3a8e766b8d81aaf5ac92ac606a2370810f602449b3900754e855;\n    __crystax_locale_data_array[71].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_be735750655b3a8e766b8d81aaf5ac92ac606a2370810f602449b3900754e855);\n    __crystax_locale_data_array[71].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[71].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[71].data[LC_NUMERIC].blob.data = __crystax_locale_blob_ce185a03fe4016f144409664a16d095edff8f8272cbaf22ee324e7ab51ceabb0;\n    __crystax_locale_data_array[71].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_ce185a03fe4016f144409664a16d095edff8f8272cbaf22ee324e7ab51ceabb0);\n    __crystax_locale_data_array[71].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[71].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[72].encoding = \"fr_BE.ISO8859-15\";\n    __crystax_locale_data_array[72].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[72].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[72].data[LC_MESSAGES].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[72].data[LC_MONETARY].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[72].data[LC_NUMERIC].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[72].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[73].encoding = \"fr_BE.UTF-8\";\n    __crystax_locale_data_array[73].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[73].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[73].data[LC_MESSAGES].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[73].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[73].data[LC_MONETARY].blob.data = __crystax_locale_blob_2621cd115180d8b2bc4cf3d9373fa2cbba1659c3788f62913c475db5005df6b3;\n    __crystax_locale_data_array[73].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_2621cd115180d8b2bc4cf3d9373fa2cbba1659c3788f62913c475db5005df6b3);\n    __crystax_locale_data_array[73].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[73].data[LC_NUMERIC].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[73].data[LC_TIME].alias = \"fr_FR.UTF-8\";\n\n    __crystax_locale_data_array[74].encoding = \"fr_CA.ISO8859-1\";\n    __crystax_locale_data_array[74].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[74].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[74].data[LC_MESSAGES].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[74].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[74].data[LC_MONETARY].blob.data = __crystax_locale_blob_5dcdef1824af26599a6b4763432ede7583e247823be2d8e05f51def5f22ebde3;\n    __crystax_locale_data_array[74].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_5dcdef1824af26599a6b4763432ede7583e247823be2d8e05f51def5f22ebde3);\n    __crystax_locale_data_array[74].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[74].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[74].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[75].encoding = \"fr_CA.ISO8859-15\";\n    __crystax_locale_data_array[75].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[75].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[75].data[LC_MESSAGES].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[75].data[LC_MONETARY].alias = \"fr_CA.ISO8859-1\";\n    __crystax_locale_data_array[75].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[75].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[76].encoding = \"fr_CA.UTF-8\";\n    __crystax_locale_data_array[76].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[76].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[76].data[LC_MESSAGES].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[76].data[LC_MONETARY].alias = \"fr_CA.ISO8859-1\";\n    __crystax_locale_data_array[76].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[76].data[LC_TIME].alias = \"fr_FR.UTF-8\";\n\n    __crystax_locale_data_array[77].encoding = \"fr_CH.ISO8859-1\";\n    __crystax_locale_data_array[77].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[77].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[77].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[77].data[LC_MESSAGES].blob.data = __crystax_locale_blob_0cc87a5f8313cb41808d6cc1b58be6cec7fe9de8a4abe442daec953d0e701627;\n    __crystax_locale_data_array[77].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_0cc87a5f8313cb41808d6cc1b58be6cec7fe9de8a4abe442daec953d0e701627);\n    __crystax_locale_data_array[77].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[77].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[77].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[77].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[78].encoding = \"fr_CH.ISO8859-15\";\n    __crystax_locale_data_array[78].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[78].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[78].data[LC_MESSAGES].alias = \"fr_CH.ISO8859-1\";\n    __crystax_locale_data_array[78].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[78].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[78].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[79].encoding = \"fr_CH.UTF-8\";\n    __crystax_locale_data_array[79].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[79].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[79].data[LC_MESSAGES].alias = \"fr_CH.ISO8859-1\";\n    __crystax_locale_data_array[79].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[79].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[79].data[LC_TIME].alias = \"fr_FR.UTF-8\";\n\n    __crystax_locale_data_array[80].encoding = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[80].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[80].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[80].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[80].data[LC_MESSAGES].blob.data = __crystax_locale_blob_c08edb61fbec3f1e57d053ec4a348007c5bdfb7982e78563094490d0093a528d;\n    __crystax_locale_data_array[80].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_c08edb61fbec3f1e57d053ec4a348007c5bdfb7982e78563094490d0093a528d);\n    __crystax_locale_data_array[80].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[80].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[80].data[LC_MONETARY].blob.data = __crystax_locale_blob_03d88875b8d2f81feb8fc7c69251acc0f7afcdad02f611d7a5fd6aabb5a6dd30;\n    __crystax_locale_data_array[80].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_03d88875b8d2f81feb8fc7c69251acc0f7afcdad02f611d7a5fd6aabb5a6dd30);\n    __crystax_locale_data_array[80].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[80].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[80].data[LC_NUMERIC].blob.data = __crystax_locale_blob_789724d65cd1a62c57494c4e1c1705bb3d60ecdb4f0ace3b8c9f2bb7ad6faf71;\n    __crystax_locale_data_array[80].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_789724d65cd1a62c57494c4e1c1705bb3d60ecdb4f0ace3b8c9f2bb7ad6faf71);\n    __crystax_locale_data_array[80].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[80].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[80].data[LC_TIME].blob.data = __crystax_locale_blob_2c701918d4f7c71696d6805fabfc13d475ce1c834b65fefb8860a5b6bac47f82;\n    __crystax_locale_data_array[80].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_2c701918d4f7c71696d6805fabfc13d475ce1c834b65fefb8860a5b6bac47f82);\n    __crystax_locale_data_array[80].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[81].encoding = \"fr_FR.ISO8859-15\";\n    __crystax_locale_data_array[81].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[81].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[81].data[LC_MESSAGES].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[81].data[LC_MONETARY].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[81].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[81].data[LC_TIME].alias = \"fr_FR.ISO8859-1\";\n\n    __crystax_locale_data_array[82].encoding = \"fr_FR.UTF-8\";\n    __crystax_locale_data_array[82].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[82].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[82].data[LC_MESSAGES].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[82].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[82].data[LC_MONETARY].blob.data = __crystax_locale_blob_58f230bc82a01cf5c9f121c3cd40b5b7f927929e8e1b3217de6f3298b1660fda;\n    __crystax_locale_data_array[82].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_58f230bc82a01cf5c9f121c3cd40b5b7f927929e8e1b3217de6f3298b1660fda);\n    __crystax_locale_data_array[82].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[82].data[LC_NUMERIC].alias = \"fr_FR.ISO8859-1\";\n    __crystax_locale_data_array[82].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[82].data[LC_TIME].blob.data = __crystax_locale_blob_87f00d4038a85ffcee3deb0303e6d7ce406a803202fd4efe453baaf834078550;\n    __crystax_locale_data_array[82].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_87f00d4038a85ffcee3deb0303e6d7ce406a803202fd4efe453baaf834078550);\n    __crystax_locale_data_array[82].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[83].encoding = \"he_IL.UTF-8\";\n    __crystax_locale_data_array[83].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[83].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[83].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[83].data[LC_MESSAGES].blob.data = __crystax_locale_blob_9a621703ef3d07c264278e663e7a0c56c6c109b4fd73002b4fddb2d1145dc3e0;\n    __crystax_locale_data_array[83].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_9a621703ef3d07c264278e663e7a0c56c6c109b4fd73002b4fddb2d1145dc3e0);\n    __crystax_locale_data_array[83].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[83].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[83].data[LC_MONETARY].blob.data = __crystax_locale_blob_a9bca60af14aff9941c119abac8232416ce6fd6b2e87ad180924f429962a125e;\n    __crystax_locale_data_array[83].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_a9bca60af14aff9941c119abac8232416ce6fd6b2e87ad180924f429962a125e);\n    __crystax_locale_data_array[83].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[83].data[LC_NUMERIC].alias = \"en_US.ISO8859-1\";\n    __crystax_locale_data_array[83].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[83].data[LC_TIME].blob.data = __crystax_locale_blob_f9bcac670c474daecc78bee1b72c246beebbc6eac5e4371e9ec3bb50074fddeb;\n    __crystax_locale_data_array[83].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_f9bcac670c474daecc78bee1b72c246beebbc6eac5e4371e9ec3bb50074fddeb);\n    __crystax_locale_data_array[83].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[84].encoding = \"hi_IN.ISCII-DEV\";\n    __crystax_locale_data_array[84].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_COLLATE].blob.data = __crystax_locale_blob_7c0959bedfbb569ead89c836e6ba9fea987f5d6c4ebeb590e08e787e7db4b922;\n    __crystax_locale_data_array[84].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_7c0959bedfbb569ead89c836e6ba9fea987f5d6c4ebeb590e08e787e7db4b922);\n    __crystax_locale_data_array[84].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[84].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_CTYPE].blob.data = __crystax_locale_blob_6d8882c0e2606275327ce98439081f3330343587ba0b89ffd8e0876c08c64b57;\n    __crystax_locale_data_array[84].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_6d8882c0e2606275327ce98439081f3330343587ba0b89ffd8e0876c08c64b57);\n    __crystax_locale_data_array[84].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[84].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_MESSAGES].blob.data = __crystax_locale_blob_448dc089f8ec07e034a19276e6053b0a40fe589fabca300aaf611fdc060c544d;\n    __crystax_locale_data_array[84].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_448dc089f8ec07e034a19276e6053b0a40fe589fabca300aaf611fdc060c544d);\n    __crystax_locale_data_array[84].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[84].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_MONETARY].blob.data = __crystax_locale_blob_9b37f70a24bc958fe35ce4ed321a99629649d3e76fb73e9fa38427a869fa4b4b;\n    __crystax_locale_data_array[84].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_9b37f70a24bc958fe35ce4ed321a99629649d3e76fb73e9fa38427a869fa4b4b);\n    __crystax_locale_data_array[84].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[84].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_NUMERIC].blob.data = __crystax_locale_blob_f14a7aea78e7fbc1ce4faebee7e0b977f3e2cb8b4a431306856bab9ab5802e1c;\n    __crystax_locale_data_array[84].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_f14a7aea78e7fbc1ce4faebee7e0b977f3e2cb8b4a431306856bab9ab5802e1c);\n    __crystax_locale_data_array[84].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[84].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[84].data[LC_TIME].blob.data = __crystax_locale_blob_8bbca5babe0a2760b22f17affcba87848116282ba14711a012137ef4eb4a4bc9;\n    __crystax_locale_data_array[84].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_8bbca5babe0a2760b22f17affcba87848116282ba14711a012137ef4eb4a4bc9);\n    __crystax_locale_data_array[84].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[85].encoding = \"hr_HR.ISO8859-2\";\n    __crystax_locale_data_array[85].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[85].data[LC_COLLATE].blob.data = __crystax_locale_blob_1028a84a3f681eabb807c89c063ecb557cc7bcd3ab6641cfe69fc2b69f1005e0;\n    __crystax_locale_data_array[85].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_1028a84a3f681eabb807c89c063ecb557cc7bcd3ab6641cfe69fc2b69f1005e0);\n    __crystax_locale_data_array[85].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[85].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[85].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[85].data[LC_MESSAGES].blob.data = __crystax_locale_blob_0cf974a55996aa089ef60e3fc615c6e92ba628169ec88470453175939fcaf12d;\n    __crystax_locale_data_array[85].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_0cf974a55996aa089ef60e3fc615c6e92ba628169ec88470453175939fcaf12d);\n    __crystax_locale_data_array[85].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[85].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[85].data[LC_MONETARY].blob.data = __crystax_locale_blob_bb330ae4df309592a6c8d0536f1d2075e388cecf0d233c2e81e1a8611c5d9b10;\n    __crystax_locale_data_array[85].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_bb330ae4df309592a6c8d0536f1d2075e388cecf0d233c2e81e1a8611c5d9b10);\n    __crystax_locale_data_array[85].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[85].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[85].data[LC_NUMERIC].blob.data = __crystax_locale_blob_cc411e55bef1adc24469c642bfa21aaa822fb2d52ec358a578ee7267883b40f8;\n    __crystax_locale_data_array[85].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_cc411e55bef1adc24469c642bfa21aaa822fb2d52ec358a578ee7267883b40f8);\n    __crystax_locale_data_array[85].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[85].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[85].data[LC_TIME].blob.data = __crystax_locale_blob_0e8a2d6efe6c0be893e265ba963c9acd50193dc9acc49d143e95b56a67101f64;\n    __crystax_locale_data_array[85].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_0e8a2d6efe6c0be893e265ba963c9acd50193dc9acc49d143e95b56a67101f64);\n    __crystax_locale_data_array[85].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[86].encoding = \"hr_HR.UTF-8\";\n    __crystax_locale_data_array[86].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[86].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[86].data[LC_MESSAGES].alias = \"hr_HR.ISO8859-2\";\n    __crystax_locale_data_array[86].data[LC_MONETARY].alias = \"hr_HR.ISO8859-2\";\n    __crystax_locale_data_array[86].data[LC_NUMERIC].alias = \"hr_HR.ISO8859-2\";\n    __crystax_locale_data_array[86].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[86].data[LC_TIME].blob.data = __crystax_locale_blob_8ac59bd4d4f48af81b76c09f582e9892d6a4216ee73fd540bd249db8df9499c0;\n    __crystax_locale_data_array[86].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_8ac59bd4d4f48af81b76c09f582e9892d6a4216ee73fd540bd249db8df9499c0);\n    __crystax_locale_data_array[86].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[87].encoding = \"hu_HU.ISO8859-2\";\n    __crystax_locale_data_array[87].data[LC_COLLATE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[87].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[87].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[87].data[LC_MESSAGES].blob.data = __crystax_locale_blob_cffc5a88e5eea4e9594dcc2fe4bcbb9daa4eec23453d98883b97ef679b5fd2c9;\n    __crystax_locale_data_array[87].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_cffc5a88e5eea4e9594dcc2fe4bcbb9daa4eec23453d98883b97ef679b5fd2c9);\n    __crystax_locale_data_array[87].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[87].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[87].data[LC_MONETARY].blob.data = __crystax_locale_blob_9d922be19508524b95a6a7735359475135b5d4a2a6d434cbb9720569d9c59826;\n    __crystax_locale_data_array[87].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_9d922be19508524b95a6a7735359475135b5d4a2a6d434cbb9720569d9c59826);\n    __crystax_locale_data_array[87].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[87].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[87].data[LC_NUMERIC].blob.data = __crystax_locale_blob_39616be9abbfdf567cf1d757eec064b1078e99d6dee9bd21b5db06dc31888692;\n    __crystax_locale_data_array[87].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_39616be9abbfdf567cf1d757eec064b1078e99d6dee9bd21b5db06dc31888692);\n    __crystax_locale_data_array[87].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[87].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[87].data[LC_TIME].blob.data = __crystax_locale_blob_c5a005fd75b7365afb371ecdc1f894eafaf2d70e492ec0b9060f60602db87832;\n    __crystax_locale_data_array[87].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_c5a005fd75b7365afb371ecdc1f894eafaf2d70e492ec0b9060f60602db87832);\n    __crystax_locale_data_array[87].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[88].encoding = \"hu_HU.UTF-8\";\n    __crystax_locale_data_array[88].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[88].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[88].data[LC_MESSAGES].alias = \"hu_HU.ISO8859-2\";\n    __crystax_locale_data_array[88].data[LC_MONETARY].alias = \"hu_HU.ISO8859-2\";\n    __crystax_locale_data_array[88].data[LC_NUMERIC].alias = \"hu_HU.ISO8859-2\";\n    __crystax_locale_data_array[88].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[88].data[LC_TIME].blob.data = __crystax_locale_blob_1cfb4ba5d922580e8b55091cb25723ec4fb3cb5e57624ebbde52ed45f476ef64;\n    __crystax_locale_data_array[88].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_1cfb4ba5d922580e8b55091cb25723ec4fb3cb5e57624ebbde52ed45f476ef64);\n    __crystax_locale_data_array[88].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[89].encoding = \"hy_AM.ARMSCII-8\";\n    __crystax_locale_data_array[89].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_COLLATE].blob.data = __crystax_locale_blob_14b456f69f70f2c72d307ea66168c5781f163089113fcee706660dbaa71ea230;\n    __crystax_locale_data_array[89].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_14b456f69f70f2c72d307ea66168c5781f163089113fcee706660dbaa71ea230);\n    __crystax_locale_data_array[89].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[89].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_CTYPE].blob.data = __crystax_locale_blob_b091706d1d0998e7c268579fde8fd8b08dd96b1e412714c393229260f9617465;\n    __crystax_locale_data_array[89].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_b091706d1d0998e7c268579fde8fd8b08dd96b1e412714c393229260f9617465);\n    __crystax_locale_data_array[89].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[89].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_MESSAGES].blob.data = __crystax_locale_blob_ec36f3d997d51b9dd411839a730d4e8e9367a3b31c376372e71ebd08465ef457;\n    __crystax_locale_data_array[89].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_ec36f3d997d51b9dd411839a730d4e8e9367a3b31c376372e71ebd08465ef457);\n    __crystax_locale_data_array[89].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[89].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_MONETARY].blob.data = __crystax_locale_blob_fcb0442d560d78be724af437ed3aad3c69ca0d4c72ff130f386fadd1aa3765ef;\n    __crystax_locale_data_array[89].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_fcb0442d560d78be724af437ed3aad3c69ca0d4c72ff130f386fadd1aa3765ef);\n    __crystax_locale_data_array[89].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[89].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_NUMERIC].blob.data = __crystax_locale_blob_55e9c02258f7df5c075916da9786cf148ab6c7c70779ec81f482551b25a8b079;\n    __crystax_locale_data_array[89].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_55e9c02258f7df5c075916da9786cf148ab6c7c70779ec81f482551b25a8b079);\n    __crystax_locale_data_array[89].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[89].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[89].data[LC_TIME].blob.data = __crystax_locale_blob_f44d305707f7682749f7fbf20f9435fce82283ce20d541c3051a29450d92e494;\n    __crystax_locale_data_array[89].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_f44d305707f7682749f7fbf20f9435fce82283ce20d541c3051a29450d92e494);\n    __crystax_locale_data_array[89].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[90].encoding = \"hy_AM.UTF-8\";\n    __crystax_locale_data_array[90].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[90].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[90].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[90].data[LC_MESSAGES].blob.data = __crystax_locale_blob_871c51ab52ada53ea23d2bae728a727402c146861902440f800e5ee6419235f3;\n    __crystax_locale_data_array[90].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_871c51ab52ada53ea23d2bae728a727402c146861902440f800e5ee6419235f3);\n    __crystax_locale_data_array[90].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[90].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[90].data[LC_MONETARY].blob.data = __crystax_locale_blob_cbb757b111049855b60ec5ee1a121a25493c3ecb1974c270b6274bd17d86f6e4;\n    __crystax_locale_data_array[90].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_cbb757b111049855b60ec5ee1a121a25493c3ecb1974c270b6274bd17d86f6e4);\n    __crystax_locale_data_array[90].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[90].data[LC_NUMERIC].alias = \"hy_AM.ARMSCII-8\";\n    __crystax_locale_data_array[90].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[90].data[LC_TIME].blob.data = __crystax_locale_blob_5bf1e6d04889b0dce3bbc276699449f9657e7aec5839b4dede17ab6a18633eee;\n    __crystax_locale_data_array[90].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_5bf1e6d04889b0dce3bbc276699449f9657e7aec5839b4dede17ab6a18633eee);\n    __crystax_locale_data_array[90].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[91].encoding = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[91].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[91].data[LC_COLLATE].blob.data = __crystax_locale_blob_7f28340d0569c1e37737aa7e4af0e20c58f291c78d75091438a64e946acdea91;\n    __crystax_locale_data_array[91].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_7f28340d0569c1e37737aa7e4af0e20c58f291c78d75091438a64e946acdea91);\n    __crystax_locale_data_array[91].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[91].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[91].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[91].data[LC_MESSAGES].blob.data = __crystax_locale_blob_53888f22e342caa61e90b6f9d7c78007da83289e71e1d62501781b52b8a29ef0;\n    __crystax_locale_data_array[91].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_53888f22e342caa61e90b6f9d7c78007da83289e71e1d62501781b52b8a29ef0);\n    __crystax_locale_data_array[91].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[91].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[91].data[LC_MONETARY].blob.data = __crystax_locale_blob_9fe49e7c783fbdf372e2170c007a7a78e6b5ae0d756620e0ac8cc3c2e4680ceb;\n    __crystax_locale_data_array[91].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_9fe49e7c783fbdf372e2170c007a7a78e6b5ae0d756620e0ac8cc3c2e4680ceb);\n    __crystax_locale_data_array[91].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[91].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[91].data[LC_NUMERIC].blob.data = __crystax_locale_blob_da634129866919e015cf9e204b69e7a90bf35c73936adadd872be6ca5948317b;\n    __crystax_locale_data_array[91].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_da634129866919e015cf9e204b69e7a90bf35c73936adadd872be6ca5948317b);\n    __crystax_locale_data_array[91].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[91].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[91].data[LC_TIME].blob.data = __crystax_locale_blob_ed66888d1d4842ad62764d24e414e53d8fb359105572da56cf47ea211f2cb488;\n    __crystax_locale_data_array[91].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ed66888d1d4842ad62764d24e414e53d8fb359105572da56cf47ea211f2cb488);\n    __crystax_locale_data_array[91].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[92].encoding = \"is_IS.ISO8859-15\";\n    __crystax_locale_data_array[92].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[92].data[LC_COLLATE].blob.data = __crystax_locale_blob_d16b8d4a22046c9bbccb9c556a436baa353b9121b985251cf95f1c60fe8e4a17;\n    __crystax_locale_data_array[92].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_d16b8d4a22046c9bbccb9c556a436baa353b9121b985251cf95f1c60fe8e4a17);\n    __crystax_locale_data_array[92].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[92].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[92].data[LC_MESSAGES].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[92].data[LC_MONETARY].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[92].data[LC_NUMERIC].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[92].data[LC_TIME].alias = \"is_IS.ISO8859-1\";\n\n    __crystax_locale_data_array[93].encoding = \"is_IS.UTF-8\";\n    __crystax_locale_data_array[93].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[93].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[93].data[LC_MESSAGES].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[93].data[LC_MONETARY].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[93].data[LC_NUMERIC].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[93].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[93].data[LC_TIME].blob.data = __crystax_locale_blob_ade4730ac907c1e16cb7c214ea8f5e9306d76261fb69619dc813b44c8ae0e0df;\n    __crystax_locale_data_array[93].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ade4730ac907c1e16cb7c214ea8f5e9306d76261fb69619dc813b44c8ae0e0df);\n    __crystax_locale_data_array[93].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[94].encoding = \"it_CH.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_MESSAGES].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_NUMERIC].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[94].data[LC_TIME].alias = \"it_IT.ISO8859-1\";\n\n    __crystax_locale_data_array[95].encoding = \"it_CH.ISO8859-15\";\n    __crystax_locale_data_array[95].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[95].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[95].data[LC_MESSAGES].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[95].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[95].data[LC_NUMERIC].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[95].data[LC_TIME].alias = \"it_IT.ISO8859-1\";\n\n    __crystax_locale_data_array[96].encoding = \"it_CH.UTF-8\";\n    __crystax_locale_data_array[96].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[96].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[96].data[LC_MESSAGES].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[96].data[LC_MONETARY].alias = \"de_CH.ISO8859-1\";\n    __crystax_locale_data_array[96].data[LC_NUMERIC].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[96].data[LC_TIME].alias = \"it_IT.UTF-8\";\n\n    __crystax_locale_data_array[97].encoding = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[97].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[97].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[97].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[97].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3e14359421ae11d0bef7f831838dc3fed2ad0142590584f74d29c1172f3dc789;\n    __crystax_locale_data_array[97].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3e14359421ae11d0bef7f831838dc3fed2ad0142590584f74d29c1172f3dc789);\n    __crystax_locale_data_array[97].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[97].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[97].data[LC_MONETARY].blob.data = __crystax_locale_blob_e64a073fe39f4aa21f39fd2031592ae1c521548b20df5fbd004ad5e5ad4bd746;\n    __crystax_locale_data_array[97].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_e64a073fe39f4aa21f39fd2031592ae1c521548b20df5fbd004ad5e5ad4bd746);\n    __crystax_locale_data_array[97].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[97].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[97].data[LC_NUMERIC].blob.data = __crystax_locale_blob_af622b4ce84764bb23ac752b6aefcd3150cbdafbcd78991421c69e82f1885cc7;\n    __crystax_locale_data_array[97].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_af622b4ce84764bb23ac752b6aefcd3150cbdafbcd78991421c69e82f1885cc7);\n    __crystax_locale_data_array[97].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[97].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[97].data[LC_TIME].blob.data = __crystax_locale_blob_32714c116fb5280b9c99b8ad4134fa7c5ef034a023599e5edff6b2f4f3a8ed37;\n    __crystax_locale_data_array[97].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_32714c116fb5280b9c99b8ad4134fa7c5ef034a023599e5edff6b2f4f3a8ed37);\n    __crystax_locale_data_array[97].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[98].encoding = \"it_IT.ISO8859-15\";\n    __crystax_locale_data_array[98].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[98].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[98].data[LC_MESSAGES].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[98].data[LC_MONETARY].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[98].data[LC_NUMERIC].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[98].data[LC_TIME].alias = \"it_IT.ISO8859-1\";\n\n    __crystax_locale_data_array[99].encoding = \"it_IT.UTF-8\";\n    __crystax_locale_data_array[99].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[99].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[99].data[LC_MESSAGES].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[99].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[99].data[LC_MONETARY].blob.data = __crystax_locale_blob_66ee59e005279f7f056ae269f2847d13b3752e3d54676dfe4e06d68228f82126;\n    __crystax_locale_data_array[99].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_66ee59e005279f7f056ae269f2847d13b3752e3d54676dfe4e06d68228f82126);\n    __crystax_locale_data_array[99].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[99].data[LC_NUMERIC].alias = \"it_IT.ISO8859-1\";\n    __crystax_locale_data_array[99].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[99].data[LC_TIME].blob.data = __crystax_locale_blob_cb417ec979d1145d6576357e17cace678e68447e37d928b63c7236a15536e97f;\n    __crystax_locale_data_array[99].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_cb417ec979d1145d6576357e17cace678e68447e37d928b63c7236a15536e97f);\n    __crystax_locale_data_array[99].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[100].encoding = \"ja_JP.SJIS\";\n    __crystax_locale_data_array[100].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[100].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[100].data[LC_CTYPE].blob.data = __crystax_locale_blob_0423f813f097effc84d09c626a72dd01cf4c00b0fe411ced951b5503f7d88465;\n    __crystax_locale_data_array[100].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_0423f813f097effc84d09c626a72dd01cf4c00b0fe411ced951b5503f7d88465);\n    __crystax_locale_data_array[100].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[100].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[100].data[LC_MESSAGES].blob.data = __crystax_locale_blob_8ec02775913952b4e695f35a48e9e091ca170da3d36f405b8de2870674263658;\n    __crystax_locale_data_array[100].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_8ec02775913952b4e695f35a48e9e091ca170da3d36f405b8de2870674263658);\n    __crystax_locale_data_array[100].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[100].data[LC_MONETARY].alias = \"ja_JP.eucJP\";\n    __crystax_locale_data_array[100].data[LC_NUMERIC].alias = \"ja_JP.eucJP\";\n    __crystax_locale_data_array[100].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[100].data[LC_TIME].blob.data = __crystax_locale_blob_a4379490b8f27ee0b9c596e19526173c6233697a021bb566eb7d1b78325afbb1;\n    __crystax_locale_data_array[100].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_a4379490b8f27ee0b9c596e19526173c6233697a021bb566eb7d1b78325afbb1);\n    __crystax_locale_data_array[100].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[101].encoding = \"ja_JP.UTF-8\";\n    __crystax_locale_data_array[101].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[101].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[101].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[101].data[LC_MESSAGES].blob.data = __crystax_locale_blob_c387552dbafd257a01bbdd4c8930917b6c6d742c69c8a6a8b80d8f6667fcdc96;\n    __crystax_locale_data_array[101].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_c387552dbafd257a01bbdd4c8930917b6c6d742c69c8a6a8b80d8f6667fcdc96);\n    __crystax_locale_data_array[101].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[101].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[101].data[LC_MONETARY].blob.data = __crystax_locale_blob_b9e92f69c1a4034998f85c17e5900390a3ac10a640240f8f7c61599146484ee5;\n    __crystax_locale_data_array[101].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b9e92f69c1a4034998f85c17e5900390a3ac10a640240f8f7c61599146484ee5);\n    __crystax_locale_data_array[101].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[101].data[LC_NUMERIC].alias = \"ja_JP.eucJP\";\n    __crystax_locale_data_array[101].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[101].data[LC_TIME].blob.data = __crystax_locale_blob_1bb43203161e2d90a8ffeb422ef0c4120098652686bf2d00ee63b0067b70dc5d;\n    __crystax_locale_data_array[101].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_1bb43203161e2d90a8ffeb422ef0c4120098652686bf2d00ee63b0067b70dc5d);\n    __crystax_locale_data_array[101].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[102].encoding = \"ja_JP.eucJP\";\n    __crystax_locale_data_array[102].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[102].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[102].data[LC_CTYPE].blob.data = __crystax_locale_blob_6979dc6ac909fa32f675b9ed20d885c2b6eb145aa577001e790138df46e18af1;\n    __crystax_locale_data_array[102].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_6979dc6ac909fa32f675b9ed20d885c2b6eb145aa577001e790138df46e18af1);\n    __crystax_locale_data_array[102].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[102].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[102].data[LC_MESSAGES].blob.data = __crystax_locale_blob_baad646dbefbdabb7ae1afd81bdf4604ce79297966a8cb2f0902c95c71914450;\n    __crystax_locale_data_array[102].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_baad646dbefbdabb7ae1afd81bdf4604ce79297966a8cb2f0902c95c71914450);\n    __crystax_locale_data_array[102].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[102].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[102].data[LC_MONETARY].blob.data = __crystax_locale_blob_fb96dc8e1dcd442c10b73096d0a099b5ac9b889090dec6200a630b46cbcfb4ad;\n    __crystax_locale_data_array[102].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_fb96dc8e1dcd442c10b73096d0a099b5ac9b889090dec6200a630b46cbcfb4ad);\n    __crystax_locale_data_array[102].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[102].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[102].data[LC_NUMERIC].blob.data = __crystax_locale_blob_5afb2e4b577f1f6a7df332e8ada33ecafaf8a5881eabda4824789cd012626e75;\n    __crystax_locale_data_array[102].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_5afb2e4b577f1f6a7df332e8ada33ecafaf8a5881eabda4824789cd012626e75);\n    __crystax_locale_data_array[102].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[102].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[102].data[LC_TIME].blob.data = __crystax_locale_blob_6ecb76fde77933b775526de8e42de7666d8d34e3ca9ce9c4fc79581c3d1a6785;\n    __crystax_locale_data_array[102].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_6ecb76fde77933b775526de8e42de7666d8d34e3ca9ce9c4fc79581c3d1a6785);\n    __crystax_locale_data_array[102].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[103].encoding = \"kk_KZ.PT154\";\n    __crystax_locale_data_array[103].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_COLLATE].blob.data = __crystax_locale_blob_4b5d13a35b76db6c94057d61412dfcb1a2cf50786722b60140f34b67dced430e;\n    __crystax_locale_data_array[103].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_4b5d13a35b76db6c94057d61412dfcb1a2cf50786722b60140f34b67dced430e);\n    __crystax_locale_data_array[103].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[103].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_CTYPE].blob.data = __crystax_locale_blob_e1702606c580ccf707cad2759e3922bad1b56c6aa53bcd055ffb0d1f747349b8;\n    __crystax_locale_data_array[103].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_e1702606c580ccf707cad2759e3922bad1b56c6aa53bcd055ffb0d1f747349b8);\n    __crystax_locale_data_array[103].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[103].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_MESSAGES].blob.data = __crystax_locale_blob_dc7e12e9d2dd3fe9119815e93056ad34969d5756b8ae4db96f8174f8c0ba07a1;\n    __crystax_locale_data_array[103].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_dc7e12e9d2dd3fe9119815e93056ad34969d5756b8ae4db96f8174f8c0ba07a1);\n    __crystax_locale_data_array[103].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[103].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_MONETARY].blob.data = __crystax_locale_blob_cfb04be52a3ce71403b44f84d4948ab9cb037451e4068734e6a479f94c888bcc;\n    __crystax_locale_data_array[103].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_cfb04be52a3ce71403b44f84d4948ab9cb037451e4068734e6a479f94c888bcc);\n    __crystax_locale_data_array[103].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[103].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_NUMERIC].blob.data = __crystax_locale_blob_65a3825a40520325fc9fea09e4bf84421b147668c2f0d0fc1ee1d72d42a0d2c7;\n    __crystax_locale_data_array[103].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_65a3825a40520325fc9fea09e4bf84421b147668c2f0d0fc1ee1d72d42a0d2c7);\n    __crystax_locale_data_array[103].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[103].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[103].data[LC_TIME].blob.data = __crystax_locale_blob_1cbd102dbb81e066ce6d26ec4cef1753152eb3802f12733596f49822062aeda4;\n    __crystax_locale_data_array[103].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_1cbd102dbb81e066ce6d26ec4cef1753152eb3802f12733596f49822062aeda4);\n    __crystax_locale_data_array[103].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[104].encoding = \"kk_KZ.UTF-8\";\n    __crystax_locale_data_array[104].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[104].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[104].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[104].data[LC_MESSAGES].blob.data = __crystax_locale_blob_bdc9320009ebd118363bf63f6eef0d611d7418975549e122d687217b23f57074;\n    __crystax_locale_data_array[104].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_bdc9320009ebd118363bf63f6eef0d611d7418975549e122d687217b23f57074);\n    __crystax_locale_data_array[104].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[104].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[104].data[LC_MONETARY].blob.data = __crystax_locale_blob_a405fb46549f8bc0538c49753bced6be7e2d82dbde9d34c192ea4465f452603d;\n    __crystax_locale_data_array[104].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_a405fb46549f8bc0538c49753bced6be7e2d82dbde9d34c192ea4465f452603d);\n    __crystax_locale_data_array[104].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[104].data[LC_NUMERIC].alias = \"kk_KZ.PT154\";\n    __crystax_locale_data_array[104].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[104].data[LC_TIME].blob.data = __crystax_locale_blob_eb39f91e20a7240ec584cdca5b21e6c62e04cbed88eb5dd4a51e5dd925977481;\n    __crystax_locale_data_array[104].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_eb39f91e20a7240ec584cdca5b21e6c62e04cbed88eb5dd4a51e5dd925977481);\n    __crystax_locale_data_array[104].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[105].encoding = \"ko_KR.CP949\";\n    __crystax_locale_data_array[105].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[105].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[105].data[LC_CTYPE].blob.data = __crystax_locale_blob_cf126ee21cf73efa8949c94ee5dd49315f6c52949c7167ab99042dae53ff94dc;\n    __crystax_locale_data_array[105].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_cf126ee21cf73efa8949c94ee5dd49315f6c52949c7167ab99042dae53ff94dc);\n    __crystax_locale_data_array[105].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[105].data[LC_MESSAGES].alias = \"ko_KR.eucKR\";\n    __crystax_locale_data_array[105].data[LC_MONETARY].alias = \"ko_KR.eucKR\";\n    __crystax_locale_data_array[105].data[LC_NUMERIC].alias = \"ko_KR.eucKR\";\n    __crystax_locale_data_array[105].data[LC_TIME].alias = \"ko_KR.eucKR\";\n\n    __crystax_locale_data_array[106].encoding = \"ko_KR.UTF-8\";\n    __crystax_locale_data_array[106].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[106].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[106].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[106].data[LC_MESSAGES].blob.data = __crystax_locale_blob_8bde8f1ef0ae42bae830f17808d0ef6d0a32e2806108ba43acf6e0dc14032c5d;\n    __crystax_locale_data_array[106].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_8bde8f1ef0ae42bae830f17808d0ef6d0a32e2806108ba43acf6e0dc14032c5d);\n    __crystax_locale_data_array[106].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[106].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[106].data[LC_MONETARY].blob.data = __crystax_locale_blob_abda46ce90a8643472bf2eed512a9db0037fca3e527ab7da53b86efe5f2aae05;\n    __crystax_locale_data_array[106].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_abda46ce90a8643472bf2eed512a9db0037fca3e527ab7da53b86efe5f2aae05);\n    __crystax_locale_data_array[106].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[106].data[LC_NUMERIC].alias = \"ko_KR.eucKR\";\n    __crystax_locale_data_array[106].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[106].data[LC_TIME].blob.data = __crystax_locale_blob_704b4558eac83e6ba3c386f028da6f3c03f6dfbcc1d585059a9726faf9ecf518;\n    __crystax_locale_data_array[106].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_704b4558eac83e6ba3c386f028da6f3c03f6dfbcc1d585059a9726faf9ecf518);\n    __crystax_locale_data_array[106].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[107].encoding = \"ko_KR.eucKR\";\n    __crystax_locale_data_array[107].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[107].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[107].data[LC_CTYPE].blob.data = __crystax_locale_blob_e6704f509433cd9bf3e4518af729571fb6efa861ca163dea3ffe54b2cd1f413a;\n    __crystax_locale_data_array[107].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_e6704f509433cd9bf3e4518af729571fb6efa861ca163dea3ffe54b2cd1f413a);\n    __crystax_locale_data_array[107].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[107].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[107].data[LC_MESSAGES].blob.data = __crystax_locale_blob_34cd7acba95723b021bbe727423d7ea05130163af77bd080a23b10b774b0518b;\n    __crystax_locale_data_array[107].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_34cd7acba95723b021bbe727423d7ea05130163af77bd080a23b10b774b0518b);\n    __crystax_locale_data_array[107].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[107].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[107].data[LC_MONETARY].blob.data = __crystax_locale_blob_80f99494567b7c2a14e9d92b2a17c24982a5fae161fac32f13fa18bee14cb290;\n    __crystax_locale_data_array[107].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_80f99494567b7c2a14e9d92b2a17c24982a5fae161fac32f13fa18bee14cb290);\n    __crystax_locale_data_array[107].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[107].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[107].data[LC_NUMERIC].blob.data = __crystax_locale_blob_9995741a3c8dd33b16df815bfe03c638d773e1323660e3efea3076912387a2da;\n    __crystax_locale_data_array[107].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_9995741a3c8dd33b16df815bfe03c638d773e1323660e3efea3076912387a2da);\n    __crystax_locale_data_array[107].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[107].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[107].data[LC_TIME].blob.data = __crystax_locale_blob_dec6835afddce2309171817a7b57a6bebefdd36741a81d41ed580b8398a5efb1;\n    __crystax_locale_data_array[107].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_dec6835afddce2309171817a7b57a6bebefdd36741a81d41ed580b8398a5efb1);\n    __crystax_locale_data_array[107].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[108].encoding = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[108].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[108].data[LC_COLLATE].blob.data = __crystax_locale_blob_ddc1aae272f4299a64f1d8239f85a3924a6308f4d1e6e5853c6b9ed8b4db26cf;\n    __crystax_locale_data_array[108].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_ddc1aae272f4299a64f1d8239f85a3924a6308f4d1e6e5853c6b9ed8b4db26cf);\n    __crystax_locale_data_array[108].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[108].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[108].data[LC_CTYPE].blob.data = __crystax_locale_blob_4724752be54a17cac217a7b77124d0ce949af9ad46e9e60108086ffbb1c9c302;\n    __crystax_locale_data_array[108].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_4724752be54a17cac217a7b77124d0ce949af9ad46e9e60108086ffbb1c9c302);\n    __crystax_locale_data_array[108].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[108].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[108].data[LC_TIME].blob.data = __crystax_locale_blob_eee8ddfb11c012aa1b0663db2084ecdca7dc7e8a6ce1ff1f1252c8ac72d30afb;\n    __crystax_locale_data_array[108].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_eee8ddfb11c012aa1b0663db2084ecdca7dc7e8a6ce1ff1f1252c8ac72d30afb);\n    __crystax_locale_data_array[108].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[109].encoding = \"la_LN.ISO8859-13\";\n    __crystax_locale_data_array[109].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[109].data[LC_COLLATE].blob.data = __crystax_locale_blob_5f7efd939f2c1699e0aecd5fa8b6c627ea9cc9a019369032c3f5778df5f439e2;\n    __crystax_locale_data_array[109].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_5f7efd939f2c1699e0aecd5fa8b6c627ea9cc9a019369032c3f5778df5f439e2);\n    __crystax_locale_data_array[109].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[109].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[109].data[LC_CTYPE].blob.data = __crystax_locale_blob_73611a05707d1a746997a5d64435c134a20958c633f6dc3124adcb3a560c2d37;\n    __crystax_locale_data_array[109].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_73611a05707d1a746997a5d64435c134a20958c633f6dc3124adcb3a560c2d37);\n    __crystax_locale_data_array[109].data[LC_CTYPE].blob.compressed = 1;\n\n    __crystax_locale_data_array[110].encoding = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[110].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[110].data[LC_COLLATE].blob.data = __crystax_locale_blob_36f45a887deb9cd676da4a338ed946ff0f4851ea28a3ddeffe42043f8ad7fed2;\n    __crystax_locale_data_array[110].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_36f45a887deb9cd676da4a338ed946ff0f4851ea28a3ddeffe42043f8ad7fed2);\n    __crystax_locale_data_array[110].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[110].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[110].data[LC_CTYPE].blob.data = __crystax_locale_blob_eed5a4beda20a9070a8af1be14b78040503ad0301cbe33c84d37bf984afc668c;\n    __crystax_locale_data_array[110].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_eed5a4beda20a9070a8af1be14b78040503ad0301cbe33c84d37bf984afc668c);\n    __crystax_locale_data_array[110].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[110].data[LC_TIME].alias = \"la_LN.ISO8859-1\";\n\n    __crystax_locale_data_array[111].encoding = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[111].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[111].data[LC_COLLATE].blob.data = __crystax_locale_blob_e9ac0fd0e4a2107ff841acb87e024cc369a40f0432270cb4f5f0b2cebeb6f3ea;\n    __crystax_locale_data_array[111].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_e9ac0fd0e4a2107ff841acb87e024cc369a40f0432270cb4f5f0b2cebeb6f3ea);\n    __crystax_locale_data_array[111].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[111].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[111].data[LC_CTYPE].blob.data = __crystax_locale_blob_fe44a04122094be4f9905c7c3f010b3742e857a3d1854ee69ba6dc701f92749d;\n    __crystax_locale_data_array[111].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_fe44a04122094be4f9905c7c3f010b3742e857a3d1854ee69ba6dc701f92749d);\n    __crystax_locale_data_array[111].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[111].data[LC_TIME].alias = \"la_LN.ISO8859-1\";\n\n    __crystax_locale_data_array[112].encoding = \"la_LN.ISO8859-4\";\n    __crystax_locale_data_array[112].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[112].data[LC_COLLATE].blob.data = __crystax_locale_blob_f9656e81862f3f543eb2014b998f614b845e523d56448188ae90489b7c958c74;\n    __crystax_locale_data_array[112].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_f9656e81862f3f543eb2014b998f614b845e523d56448188ae90489b7c958c74);\n    __crystax_locale_data_array[112].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[112].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[112].data[LC_CTYPE].blob.data = __crystax_locale_blob_692eb6578988cc74674a10ee03635d76f87f8fbc757e0fe5d2574f74257bd03b;\n    __crystax_locale_data_array[112].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_692eb6578988cc74674a10ee03635d76f87f8fbc757e0fe5d2574f74257bd03b);\n    __crystax_locale_data_array[112].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[112].data[LC_TIME].alias = \"la_LN.ISO8859-1\";\n\n    __crystax_locale_data_array[113].encoding = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[113].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[113].data[LC_COLLATE].blob.data = __crystax_locale_blob_80f415ceded4644b28aacecf1032cc9b2b686c4f7b20b047d5541bcd8479ee53;\n    __crystax_locale_data_array[113].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_80f415ceded4644b28aacecf1032cc9b2b686c4f7b20b047d5541bcd8479ee53);\n    __crystax_locale_data_array[113].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[113].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[113].data[LC_CTYPE].blob.data = __crystax_locale_blob_807402b05baef7fc0fc949c9b199d05a375b4b7a4fb04360730ffafa10898daa;\n    __crystax_locale_data_array[113].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_807402b05baef7fc0fc949c9b199d05a375b4b7a4fb04360730ffafa10898daa);\n    __crystax_locale_data_array[113].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[113].data[LC_TIME].alias = \"la_LN.ISO8859-1\";\n\n    __crystax_locale_data_array[114].encoding = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[114].data[LC_COLLATE].alias = \"la_LN.ISO8859-13\";\n    __crystax_locale_data_array[114].data[LC_CTYPE].alias = \"la_LN.ISO8859-13\";\n    __crystax_locale_data_array[114].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[114].data[LC_MESSAGES].blob.data = __crystax_locale_blob_cf14ef208ba01df59bf65bc5f63d3d5bd6d7e06398f5edeeabf5ac52a9427455;\n    __crystax_locale_data_array[114].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_cf14ef208ba01df59bf65bc5f63d3d5bd6d7e06398f5edeeabf5ac52a9427455);\n    __crystax_locale_data_array[114].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[114].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[114].data[LC_MONETARY].blob.data = __crystax_locale_blob_23971c491515b02abeb5309807b70859dcea0e3ae550bc4dd62c8ce81c039f72;\n    __crystax_locale_data_array[114].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_23971c491515b02abeb5309807b70859dcea0e3ae550bc4dd62c8ce81c039f72);\n    __crystax_locale_data_array[114].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[114].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[114].data[LC_NUMERIC].blob.data = __crystax_locale_blob_abaaedfb90acf9df5aa113cd2480412dc5a6590c502d9973038d86496c516a20;\n    __crystax_locale_data_array[114].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_abaaedfb90acf9df5aa113cd2480412dc5a6590c502d9973038d86496c516a20);\n    __crystax_locale_data_array[114].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[114].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[114].data[LC_TIME].blob.data = __crystax_locale_blob_879f7eeafb653a5daddcc4b6d6bfe53057dd6b9b6b2da57a898d60b7d9725f8c;\n    __crystax_locale_data_array[114].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_879f7eeafb653a5daddcc4b6d6bfe53057dd6b9b6b2da57a898d60b7d9725f8c);\n    __crystax_locale_data_array[114].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[115].encoding = \"lt_LT.ISO8859-4\";\n    __crystax_locale_data_array[115].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[115].data[LC_COLLATE].blob.data = __crystax_locale_blob_9e06151e9475a88890a14006c13b13f35489551310014e4b9101b49cab338b45;\n    __crystax_locale_data_array[115].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_9e06151e9475a88890a14006c13b13f35489551310014e4b9101b49cab338b45);\n    __crystax_locale_data_array[115].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[115].data[LC_CTYPE].alias = \"la_LN.ISO8859-4\";\n    __crystax_locale_data_array[115].data[LC_MESSAGES].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[115].data[LC_MONETARY].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[115].data[LC_NUMERIC].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[115].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[115].data[LC_TIME].blob.data = __crystax_locale_blob_be36e5025f87507554aa6ced53ed3125138449b074f9c52f582911ab2904a450;\n    __crystax_locale_data_array[115].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_be36e5025f87507554aa6ced53ed3125138449b074f9c52f582911ab2904a450);\n    __crystax_locale_data_array[115].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[116].encoding = \"lt_LT.UTF-8\";\n    __crystax_locale_data_array[116].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[116].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[116].data[LC_MESSAGES].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[116].data[LC_MONETARY].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[116].data[LC_NUMERIC].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[116].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[116].data[LC_TIME].blob.data = __crystax_locale_blob_ebb42615fb12c7dee1757c7913482ef9de94d05a081e121d43ab79addf7211c0;\n    __crystax_locale_data_array[116].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ebb42615fb12c7dee1757c7913482ef9de94d05a081e121d43ab79addf7211c0);\n    __crystax_locale_data_array[116].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[117].encoding = \"lv_LV.ISO8859-13\";\n    __crystax_locale_data_array[117].data[LC_COLLATE].alias = \"la_LN.ISO8859-13\";\n    __crystax_locale_data_array[117].data[LC_CTYPE].alias = \"la_LN.ISO8859-13\";\n    __crystax_locale_data_array[117].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[117].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3aa7255b1b174b1243be5d38b4a17e6d155321434caa29489f0c010947c31b8a;\n    __crystax_locale_data_array[117].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3aa7255b1b174b1243be5d38b4a17e6d155321434caa29489f0c010947c31b8a);\n    __crystax_locale_data_array[117].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[117].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[117].data[LC_MONETARY].blob.data = __crystax_locale_blob_6953d03a468e540fe4c3066657115ba05cfc6cc8c85c8e1519c53af24587610e;\n    __crystax_locale_data_array[117].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_6953d03a468e540fe4c3066657115ba05cfc6cc8c85c8e1519c53af24587610e);\n    __crystax_locale_data_array[117].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[117].data[LC_NUMERIC].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[117].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[117].data[LC_TIME].blob.data = __crystax_locale_blob_1e4311057a5dd209d021e2c020e191f05fa9f685bc52a675de7a5f28f1f9b2e8;\n    __crystax_locale_data_array[117].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_1e4311057a5dd209d021e2c020e191f05fa9f685bc52a675de7a5f28f1f9b2e8);\n    __crystax_locale_data_array[117].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[118].encoding = \"lv_LV.UTF-8\";\n    __crystax_locale_data_array[118].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[118].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[118].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[118].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3ec39f053d03943d21cc22175978d79273488ba587b81f6fdd55056e1b10f7c8;\n    __crystax_locale_data_array[118].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3ec39f053d03943d21cc22175978d79273488ba587b81f6fdd55056e1b10f7c8);\n    __crystax_locale_data_array[118].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[118].data[LC_MONETARY].alias = \"lv_LV.ISO8859-13\";\n    __crystax_locale_data_array[118].data[LC_NUMERIC].alias = \"lt_LT.ISO8859-13\";\n    __crystax_locale_data_array[118].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[118].data[LC_TIME].blob.data = __crystax_locale_blob_c55ee584ad52d88b1dbaa6f99c8076b966953d98b998844ab73c1203adf2a58c;\n    __crystax_locale_data_array[118].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_c55ee584ad52d88b1dbaa6f99c8076b966953d98b998844ab73c1203adf2a58c);\n    __crystax_locale_data_array[118].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[119].encoding = \"mn_MN.UTF-8\";\n    __crystax_locale_data_array[119].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[119].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[119].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[119].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3ac8244e6944407217d6dd5c223ed686927e5abc17f41d82740027bfe41c9c8b;\n    __crystax_locale_data_array[119].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3ac8244e6944407217d6dd5c223ed686927e5abc17f41d82740027bfe41c9c8b);\n    __crystax_locale_data_array[119].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[119].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[119].data[LC_MONETARY].blob.data = __crystax_locale_blob_9ef80248706566c98532d2f83ba4b7f927910ac6144140f1a7183d580111e587;\n    __crystax_locale_data_array[119].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_9ef80248706566c98532d2f83ba4b7f927910ac6144140f1a7183d580111e587);\n    __crystax_locale_data_array[119].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[119].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[119].data[LC_NUMERIC].blob.data = __crystax_locale_blob_419688ce771142a7fb9691484a336b732ea8335813cbcda5774584693c490c90;\n    __crystax_locale_data_array[119].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_419688ce771142a7fb9691484a336b732ea8335813cbcda5774584693c490c90);\n    __crystax_locale_data_array[119].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[119].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[119].data[LC_TIME].blob.data = __crystax_locale_blob_cebfb38b7e0427d7a4af03351be9420184094b78eb1b0f03c79e85ffe22bb1bc;\n    __crystax_locale_data_array[119].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_cebfb38b7e0427d7a4af03351be9420184094b78eb1b0f03c79e85ffe22bb1bc);\n    __crystax_locale_data_array[119].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[120].encoding = \"nb_NO.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_COLLATE].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[120].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[120].data[LC_TIME].blob.data = __crystax_locale_blob_2c2b68cd953a188c93fc999bea3c524b80a86d834c404fbb2cd8da4c070abc82;\n    __crystax_locale_data_array[120].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_2c2b68cd953a188c93fc999bea3c524b80a86d834c404fbb2cd8da4c070abc82);\n    __crystax_locale_data_array[120].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[121].encoding = \"nb_NO.ISO8859-15\";\n    __crystax_locale_data_array[121].data[LC_COLLATE].alias = \"no_NO.ISO8859-15\";\n    __crystax_locale_data_array[121].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[121].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[121].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[121].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[121].data[LC_TIME].alias = \"nb_NO.ISO8859-1\";\n\n    __crystax_locale_data_array[122].encoding = \"nb_NO.UTF-8\";\n    __crystax_locale_data_array[122].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[122].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[122].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[122].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[122].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[122].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[122].data[LC_TIME].blob.data = __crystax_locale_blob_db87d44a5458d0def9b68efc5ed58c79d78017a52691075c95d83ecd52864fd3;\n    __crystax_locale_data_array[122].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_db87d44a5458d0def9b68efc5ed58c79d78017a52691075c95d83ecd52864fd3);\n    __crystax_locale_data_array[122].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[123].encoding = \"nl_BE.ISO8859-1\";\n    __crystax_locale_data_array[123].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[123].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[123].data[LC_MESSAGES].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[123].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[123].data[LC_MONETARY].blob.data = __crystax_locale_blob_9e50b42fdaab19543d9fbef49c1e72ee219e95305edc621b38954eef674e3782;\n    __crystax_locale_data_array[123].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_9e50b42fdaab19543d9fbef49c1e72ee219e95305edc621b38954eef674e3782);\n    __crystax_locale_data_array[123].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[123].data[LC_NUMERIC].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[123].data[LC_TIME].alias = \"nl_NL.ISO8859-1\";\n\n    __crystax_locale_data_array[124].encoding = \"nl_BE.ISO8859-15\";\n    __crystax_locale_data_array[124].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[124].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[124].data[LC_MESSAGES].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[124].data[LC_MONETARY].alias = \"nl_BE.ISO8859-1\";\n    __crystax_locale_data_array[124].data[LC_NUMERIC].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[124].data[LC_TIME].alias = \"nl_NL.ISO8859-1\";\n\n    __crystax_locale_data_array[125].encoding = \"nl_BE.UTF-8\";\n    __crystax_locale_data_array[125].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[125].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[125].data[LC_MESSAGES].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[125].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[125].data[LC_MONETARY].blob.data = __crystax_locale_blob_95b5bc8f48c28fbe922ad1a09d0c0904fdf8d562127eb5bfdf8a80389f6aff76;\n    __crystax_locale_data_array[125].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_95b5bc8f48c28fbe922ad1a09d0c0904fdf8d562127eb5bfdf8a80389f6aff76);\n    __crystax_locale_data_array[125].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[125].data[LC_NUMERIC].alias = \"fr_BE.ISO8859-1\";\n    __crystax_locale_data_array[125].data[LC_TIME].alias = \"nl_NL.ISO8859-1\";\n\n    __crystax_locale_data_array[126].encoding = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[126].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[126].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[126].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[126].data[LC_MESSAGES].blob.data = __crystax_locale_blob_2e022e9f9d6cb099cafbcf237e2d40ed3181664c2eabd7faf9c44cf3f51de316;\n    __crystax_locale_data_array[126].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_2e022e9f9d6cb099cafbcf237e2d40ed3181664c2eabd7faf9c44cf3f51de316);\n    __crystax_locale_data_array[126].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[126].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[126].data[LC_MONETARY].blob.data = __crystax_locale_blob_f23ac40d94f0053beb84938dc0c1df45a23dd05dfdae6c9c9d166e4f36fb6762;\n    __crystax_locale_data_array[126].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f23ac40d94f0053beb84938dc0c1df45a23dd05dfdae6c9c9d166e4f36fb6762);\n    __crystax_locale_data_array[126].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[126].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[126].data[LC_NUMERIC].blob.data = __crystax_locale_blob_462453d2bf4a3bb28c91b3cfcd1891191841bf175c3e1f14b3d2644605846935;\n    __crystax_locale_data_array[126].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_462453d2bf4a3bb28c91b3cfcd1891191841bf175c3e1f14b3d2644605846935);\n    __crystax_locale_data_array[126].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[126].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[126].data[LC_TIME].blob.data = __crystax_locale_blob_7be039adcf02f254418be107645d35bc666534b10feed6977fb8c2eaa01b4e2c;\n    __crystax_locale_data_array[126].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_7be039adcf02f254418be107645d35bc666534b10feed6977fb8c2eaa01b4e2c);\n    __crystax_locale_data_array[126].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[127].encoding = \"nl_NL.ISO8859-15\";\n    __crystax_locale_data_array[127].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[127].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[127].data[LC_MESSAGES].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[127].data[LC_MONETARY].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[127].data[LC_NUMERIC].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[127].data[LC_TIME].alias = \"nl_NL.ISO8859-1\";\n\n    __crystax_locale_data_array[128].encoding = \"nl_NL.UTF-8\";\n    __crystax_locale_data_array[128].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[128].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[128].data[LC_MESSAGES].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[128].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[128].data[LC_MONETARY].blob.data = __crystax_locale_blob_b50adb3eb20b6ad79f7c76a25d27470cd9bc1c40690105f58ef264cfc3ad7935;\n    __crystax_locale_data_array[128].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b50adb3eb20b6ad79f7c76a25d27470cd9bc1c40690105f58ef264cfc3ad7935);\n    __crystax_locale_data_array[128].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[128].data[LC_NUMERIC].alias = \"nl_NL.ISO8859-1\";\n    __crystax_locale_data_array[128].data[LC_TIME].alias = \"nl_NL.ISO8859-1\";\n\n    __crystax_locale_data_array[129].encoding = \"nn_NO.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_COLLATE].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[129].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[129].data[LC_TIME].blob.data = __crystax_locale_blob_bf19ba829ec0e13d6fa57d8e31602841fa1a7aa3b9a8c8bc68dfdcf1e431d3ee;\n    __crystax_locale_data_array[129].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_bf19ba829ec0e13d6fa57d8e31602841fa1a7aa3b9a8c8bc68dfdcf1e431d3ee);\n    __crystax_locale_data_array[129].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[130].encoding = \"nn_NO.ISO8859-15\";\n    __crystax_locale_data_array[130].data[LC_COLLATE].alias = \"no_NO.ISO8859-15\";\n    __crystax_locale_data_array[130].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[130].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[130].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[130].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[130].data[LC_TIME].alias = \"nn_NO.ISO8859-1\";\n\n    __crystax_locale_data_array[131].encoding = \"nn_NO.UTF-8\";\n    __crystax_locale_data_array[131].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[131].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[131].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[131].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[131].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[131].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[131].data[LC_TIME].blob.data = __crystax_locale_blob_7425e51c52f14bd1f7291d8cf5c8c5ba9890e75e1133bdb9d73f8340bd3a3cb5;\n    __crystax_locale_data_array[131].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_7425e51c52f14bd1f7291d8cf5c8c5ba9890e75e1133bdb9d73f8340bd3a3cb5);\n    __crystax_locale_data_array[131].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[132].encoding = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[132].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[132].data[LC_COLLATE].blob.data = __crystax_locale_blob_42e45ca981f5b896af43f0c5a5fc8acfd41417d3cf7f9416c67192fe6c7a68c6;\n    __crystax_locale_data_array[132].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_42e45ca981f5b896af43f0c5a5fc8acfd41417d3cf7f9416c67192fe6c7a68c6);\n    __crystax_locale_data_array[132].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[132].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[132].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[132].data[LC_MESSAGES].blob.data = __crystax_locale_blob_230b009bd74a34aed8a3a40a747930e47e19c5552d67d563c6dbaa68a7a64ff3;\n    __crystax_locale_data_array[132].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_230b009bd74a34aed8a3a40a747930e47e19c5552d67d563c6dbaa68a7a64ff3);\n    __crystax_locale_data_array[132].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[132].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[132].data[LC_MONETARY].blob.data = __crystax_locale_blob_596d560785b4e76d66aed8c45ae200e2d1529766f80bcc850fa377b2fe4b2bc2;\n    __crystax_locale_data_array[132].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_596d560785b4e76d66aed8c45ae200e2d1529766f80bcc850fa377b2fe4b2bc2);\n    __crystax_locale_data_array[132].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[132].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[132].data[LC_NUMERIC].blob.data = __crystax_locale_blob_24d6193a3a5027fe94454bdb58f9e5b244abbb4bb54e8939611e59faeef00e67;\n    __crystax_locale_data_array[132].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_24d6193a3a5027fe94454bdb58f9e5b244abbb4bb54e8939611e59faeef00e67);\n    __crystax_locale_data_array[132].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[132].data[LC_TIME].alias = \"nb_NO.ISO8859-1\";\n\n    __crystax_locale_data_array[133].encoding = \"no_NO.ISO8859-15\";\n    __crystax_locale_data_array[133].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[133].data[LC_COLLATE].blob.data = __crystax_locale_blob_dc5b7a0d5c465997e190eedf369c12652dd2984e1d3058d8730f8a0d8b9d9b19;\n    __crystax_locale_data_array[133].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_dc5b7a0d5c465997e190eedf369c12652dd2984e1d3058d8730f8a0d8b9d9b19);\n    __crystax_locale_data_array[133].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[133].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[133].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[133].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[133].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[133].data[LC_TIME].alias = \"nb_NO.ISO8859-1\";\n\n    __crystax_locale_data_array[134].encoding = \"no_NO.UTF-8\";\n    __crystax_locale_data_array[134].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[134].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[134].data[LC_MESSAGES].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[134].data[LC_MONETARY].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[134].data[LC_NUMERIC].alias = \"no_NO.ISO8859-1\";\n    __crystax_locale_data_array[134].data[LC_TIME].alias = \"nb_NO.UTF-8\";\n\n    __crystax_locale_data_array[135].encoding = \"pl_PL.ISO8859-2\";\n    __crystax_locale_data_array[135].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[135].data[LC_COLLATE].blob.data = __crystax_locale_blob_edd3496b25a8220395915699e108d1d84dc8bb2b059b5c686b47eeccb62cbd03;\n    __crystax_locale_data_array[135].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_edd3496b25a8220395915699e108d1d84dc8bb2b059b5c686b47eeccb62cbd03);\n    __crystax_locale_data_array[135].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[135].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[135].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[135].data[LC_MESSAGES].blob.data = __crystax_locale_blob_f0e3b03897bfe700c56e2a8938782cb400aac1da33b8fe7bd252330497fbc23b;\n    __crystax_locale_data_array[135].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_f0e3b03897bfe700c56e2a8938782cb400aac1da33b8fe7bd252330497fbc23b);\n    __crystax_locale_data_array[135].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[135].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[135].data[LC_MONETARY].blob.data = __crystax_locale_blob_04bd11dbc1948c0fce59ae9684dc5ecd70736f2c6464963763c7394e751f880c;\n    __crystax_locale_data_array[135].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_04bd11dbc1948c0fce59ae9684dc5ecd70736f2c6464963763c7394e751f880c);\n    __crystax_locale_data_array[135].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[135].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[135].data[LC_NUMERIC].blob.data = __crystax_locale_blob_a94defbefcd5688c9d92260928b63853f7da6a4ec5fbf191e62444faa64cfa16;\n    __crystax_locale_data_array[135].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_a94defbefcd5688c9d92260928b63853f7da6a4ec5fbf191e62444faa64cfa16);\n    __crystax_locale_data_array[135].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[135].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[135].data[LC_TIME].blob.data = __crystax_locale_blob_044c09e7b1b039cda2baf572360f5c6c811692a73b3d45d3d49f43e713e22154;\n    __crystax_locale_data_array[135].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_044c09e7b1b039cda2baf572360f5c6c811692a73b3d45d3d49f43e713e22154);\n    __crystax_locale_data_array[135].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[136].encoding = \"pl_PL.UTF-8\";\n    __crystax_locale_data_array[136].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[136].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[136].data[LC_MESSAGES].alias = \"pl_PL.ISO8859-2\";\n    __crystax_locale_data_array[136].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[136].data[LC_MONETARY].blob.data = __crystax_locale_blob_8a8280b9ba6e218267889e798285941cf8ce4be7316faee62fb17fd91f628fab;\n    __crystax_locale_data_array[136].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_8a8280b9ba6e218267889e798285941cf8ce4be7316faee62fb17fd91f628fab);\n    __crystax_locale_data_array[136].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[136].data[LC_NUMERIC].alias = \"pl_PL.ISO8859-2\";\n    __crystax_locale_data_array[136].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[136].data[LC_TIME].blob.data = __crystax_locale_blob_bbca7d747ff01a5635a5469dbb6ec69558734b0ec070068a21261d27526659ef;\n    __crystax_locale_data_array[136].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_bbca7d747ff01a5635a5469dbb6ec69558734b0ec070068a21261d27526659ef);\n    __crystax_locale_data_array[136].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[137].encoding = \"pt_BR.ISO8859-1\";\n    __crystax_locale_data_array[137].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[137].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[137].data[LC_MESSAGES].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[137].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[137].data[LC_MONETARY].blob.data = __crystax_locale_blob_e1d0bf174e0649df79922610491ef983506c05bf9edbb9a5e2a2f44c8cf4e226;\n    __crystax_locale_data_array[137].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_e1d0bf174e0649df79922610491ef983506c05bf9edbb9a5e2a2f44c8cf4e226);\n    __crystax_locale_data_array[137].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[137].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[137].data[LC_NUMERIC].blob.data = __crystax_locale_blob_dc5d319d959204180c09dece76be1c2e1250e771e0724751b1c28919e716b6bb;\n    __crystax_locale_data_array[137].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_dc5d319d959204180c09dece76be1c2e1250e771e0724751b1c28919e716b6bb);\n    __crystax_locale_data_array[137].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[137].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[137].data[LC_TIME].blob.data = __crystax_locale_blob_9fd3a984765d7c46c8caf874aba082866abc0d554cd8bd246552ea25603deb48;\n    __crystax_locale_data_array[137].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_9fd3a984765d7c46c8caf874aba082866abc0d554cd8bd246552ea25603deb48);\n    __crystax_locale_data_array[137].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[138].encoding = \"pt_BR.UTF-8\";\n    __crystax_locale_data_array[138].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[138].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[138].data[LC_MESSAGES].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[138].data[LC_MONETARY].alias = \"pt_BR.ISO8859-1\";\n    __crystax_locale_data_array[138].data[LC_NUMERIC].alias = \"pt_BR.ISO8859-1\";\n    __crystax_locale_data_array[138].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[138].data[LC_TIME].blob.data = __crystax_locale_blob_b52f0c4c16fea8179e7e962a38af1154d264595ee02f7688806a463fb5650944;\n    __crystax_locale_data_array[138].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_b52f0c4c16fea8179e7e962a38af1154d264595ee02f7688806a463fb5650944);\n    __crystax_locale_data_array[138].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[139].encoding = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[139].data[LC_COLLATE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[139].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[139].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[139].data[LC_MESSAGES].blob.data = __crystax_locale_blob_e7a817c936fbd7e6e1dd055cf8f69ea7c6bf2b28821da7b647b63ba8835c2bd6;\n    __crystax_locale_data_array[139].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_e7a817c936fbd7e6e1dd055cf8f69ea7c6bf2b28821da7b647b63ba8835c2bd6);\n    __crystax_locale_data_array[139].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[139].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[139].data[LC_MONETARY].blob.data = __crystax_locale_blob_bc4573b3d45ddc9ac6bede1a3c6892b875ae7eeb06ad97bbaab69d44d2431329;\n    __crystax_locale_data_array[139].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_bc4573b3d45ddc9ac6bede1a3c6892b875ae7eeb06ad97bbaab69d44d2431329);\n    __crystax_locale_data_array[139].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[139].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[139].data[LC_NUMERIC].blob.data = __crystax_locale_blob_281fa1b1c2d58e14644313b0b819a1112ddb4e59c9c9c8a6c5bb365badf4cc1b;\n    __crystax_locale_data_array[139].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_281fa1b1c2d58e14644313b0b819a1112ddb4e59c9c9c8a6c5bb365badf4cc1b);\n    __crystax_locale_data_array[139].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[139].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[139].data[LC_TIME].blob.data = __crystax_locale_blob_e11aae4171ca53cb05e472cc5f9cf959fb384398c3ae300d9a08bc073b9dd5e4;\n    __crystax_locale_data_array[139].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_e11aae4171ca53cb05e472cc5f9cf959fb384398c3ae300d9a08bc073b9dd5e4);\n    __crystax_locale_data_array[139].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[140].encoding = \"pt_PT.ISO8859-15\";\n    __crystax_locale_data_array[140].data[LC_COLLATE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[140].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[140].data[LC_MESSAGES].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[140].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[140].data[LC_MONETARY].blob.data = __crystax_locale_blob_61fdf1f09b1501328a04478a6ee18de17ae59146110ea60fc2dda842023437f0;\n    __crystax_locale_data_array[140].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_61fdf1f09b1501328a04478a6ee18de17ae59146110ea60fc2dda842023437f0);\n    __crystax_locale_data_array[140].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[140].data[LC_NUMERIC].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[140].data[LC_TIME].alias = \"pt_PT.ISO8859-1\";\n\n    __crystax_locale_data_array[141].encoding = \"pt_PT.UTF-8\";\n    __crystax_locale_data_array[141].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[141].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[141].data[LC_MESSAGES].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[141].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[141].data[LC_MONETARY].blob.data = __crystax_locale_blob_1f45103359b5c71181265ce514607b2b544e82371304285db28200ced39c2621;\n    __crystax_locale_data_array[141].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_1f45103359b5c71181265ce514607b2b544e82371304285db28200ced39c2621);\n    __crystax_locale_data_array[141].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[141].data[LC_NUMERIC].alias = \"pt_PT.ISO8859-1\";\n    __crystax_locale_data_array[141].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[141].data[LC_TIME].blob.data = __crystax_locale_blob_7fb889cbfb627eab458d9f807b43e90ece60ce33c8269afbc950904b0b84e774;\n    __crystax_locale_data_array[141].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_7fb889cbfb627eab458d9f807b43e90ece60ce33c8269afbc950904b0b84e774);\n    __crystax_locale_data_array[141].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[142].encoding = \"ro_RO.ISO8859-2\";\n    __crystax_locale_data_array[142].data[LC_COLLATE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[142].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[142].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[142].data[LC_MESSAGES].blob.data = __crystax_locale_blob_e7ffe885619d0ee73b9fe45c1e333f5f232dc51775a35681c8630bc08fd988f2;\n    __crystax_locale_data_array[142].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_e7ffe885619d0ee73b9fe45c1e333f5f232dc51775a35681c8630bc08fd988f2);\n    __crystax_locale_data_array[142].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[142].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[142].data[LC_MONETARY].blob.data = __crystax_locale_blob_6040811540d3adc0457822b0cc6e273390bcd5bdc5909ed79f513697c98baee0;\n    __crystax_locale_data_array[142].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_6040811540d3adc0457822b0cc6e273390bcd5bdc5909ed79f513697c98baee0);\n    __crystax_locale_data_array[142].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[142].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[142].data[LC_NUMERIC].blob.data = __crystax_locale_blob_57e3b9b67a82983255de750d3a6adc45958c16c6c3a3e7a3991304c770271b06;\n    __crystax_locale_data_array[142].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_57e3b9b67a82983255de750d3a6adc45958c16c6c3a3e7a3991304c770271b06);\n    __crystax_locale_data_array[142].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[142].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[142].data[LC_TIME].blob.data = __crystax_locale_blob_a3cacb04fd781aeefad7bdb671dad99572bdb1bdae848a3b85f73a96e556c43e;\n    __crystax_locale_data_array[142].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_a3cacb04fd781aeefad7bdb671dad99572bdb1bdae848a3b85f73a96e556c43e);\n    __crystax_locale_data_array[142].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[143].encoding = \"ro_RO.UTF-8\";\n    __crystax_locale_data_array[143].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[143].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[143].data[LC_MESSAGES].alias = \"ro_RO.ISO8859-2\";\n    __crystax_locale_data_array[143].data[LC_MONETARY].alias = \"ro_RO.ISO8859-2\";\n    __crystax_locale_data_array[143].data[LC_NUMERIC].alias = \"ro_RO.ISO8859-2\";\n    __crystax_locale_data_array[143].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[143].data[LC_TIME].blob.data = __crystax_locale_blob_ef96b314f98f5109ada20a7bb2f405661086aa65389b924703fa1fe44deccec5;\n    __crystax_locale_data_array[143].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ef96b314f98f5109ada20a7bb2f405661086aa65389b924703fa1fe44deccec5);\n    __crystax_locale_data_array[143].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[144].encoding = \"ru_RU.CP1251\";\n    __crystax_locale_data_array[144].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[144].data[LC_COLLATE].blob.data = __crystax_locale_blob_f91843d74c2b738ca8324e75715feea75b5927a913db0cf7c6d28ebe7f82a228;\n    __crystax_locale_data_array[144].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_f91843d74c2b738ca8324e75715feea75b5927a913db0cf7c6d28ebe7f82a228);\n    __crystax_locale_data_array[144].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[144].data[LC_CTYPE].alias = \"bg_BG.CP1251\";\n    __crystax_locale_data_array[144].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[144].data[LC_MESSAGES].blob.data = __crystax_locale_blob_e51c5fb2e12085b5291cf9f4310f6a57c259b7f75e39aa3651e886b2f19d81d1;\n    __crystax_locale_data_array[144].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_e51c5fb2e12085b5291cf9f4310f6a57c259b7f75e39aa3651e886b2f19d81d1);\n    __crystax_locale_data_array[144].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[144].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[144].data[LC_MONETARY].blob.data = __crystax_locale_blob_7c5a63e19fc73050e5c6866c108bc4b28d10c5ff8d2329867dfa770bd1e03995;\n    __crystax_locale_data_array[144].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_7c5a63e19fc73050e5c6866c108bc4b28d10c5ff8d2329867dfa770bd1e03995);\n    __crystax_locale_data_array[144].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[144].data[LC_NUMERIC].alias = \"ru_RU.KOI8-R\";\n    __crystax_locale_data_array[144].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[144].data[LC_TIME].blob.data = __crystax_locale_blob_3d169b82d55d7ff3e947a735270760709e0d6c87813c3e167538668161099b4d;\n    __crystax_locale_data_array[144].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_3d169b82d55d7ff3e947a735270760709e0d6c87813c3e167538668161099b4d);\n    __crystax_locale_data_array[144].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[145].encoding = \"ru_RU.CP866\";\n    __crystax_locale_data_array[145].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[145].data[LC_COLLATE].blob.data = __crystax_locale_blob_148232aa6131fd832be232a99e12644bfffe3bb38db1b792831d45fd6f6b7dac;\n    __crystax_locale_data_array[145].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_148232aa6131fd832be232a99e12644bfffe3bb38db1b792831d45fd6f6b7dac);\n    __crystax_locale_data_array[145].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[145].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[145].data[LC_CTYPE].blob.data = __crystax_locale_blob_72ba0094e98ff807c64b5c69b62efeef665500f40add020c23317fee1211551a;\n    __crystax_locale_data_array[145].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_72ba0094e98ff807c64b5c69b62efeef665500f40add020c23317fee1211551a);\n    __crystax_locale_data_array[145].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[145].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[145].data[LC_MESSAGES].blob.data = __crystax_locale_blob_bc4b2af896c93afca111628ccd2123fcb7133943cec0ad8c681ae21f35ac23ef;\n    __crystax_locale_data_array[145].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_bc4b2af896c93afca111628ccd2123fcb7133943cec0ad8c681ae21f35ac23ef);\n    __crystax_locale_data_array[145].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[145].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[145].data[LC_MONETARY].blob.data = __crystax_locale_blob_f2e8befe9044f2ede26fe5e1c730baf0cfb46cb73c6eec2bbcb4c4ff4e18e854;\n    __crystax_locale_data_array[145].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f2e8befe9044f2ede26fe5e1c730baf0cfb46cb73c6eec2bbcb4c4ff4e18e854);\n    __crystax_locale_data_array[145].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[145].data[LC_NUMERIC].alias = \"ru_RU.KOI8-R\";\n    __crystax_locale_data_array[145].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[145].data[LC_TIME].blob.data = __crystax_locale_blob_05dc9cc347defcad87971fda523a5531b67dcd7b76a5891167813a2f81e9cfda;\n    __crystax_locale_data_array[145].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_05dc9cc347defcad87971fda523a5531b67dcd7b76a5891167813a2f81e9cfda);\n    __crystax_locale_data_array[145].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[146].encoding = \"ru_RU.ISO8859-5\";\n    __crystax_locale_data_array[146].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[146].data[LC_COLLATE].blob.data = __crystax_locale_blob_802016d51343d91d9a7a47326dc81290dc206ff64ed5ac4d5e6ec1eeaf66c2b5;\n    __crystax_locale_data_array[146].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_802016d51343d91d9a7a47326dc81290dc206ff64ed5ac4d5e6ec1eeaf66c2b5);\n    __crystax_locale_data_array[146].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[146].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[146].data[LC_CTYPE].blob.data = __crystax_locale_blob_0c7892c9bd84a90d22d7a709c856be8528c261eb3ed030dd397fd43d19e089d0;\n    __crystax_locale_data_array[146].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_0c7892c9bd84a90d22d7a709c856be8528c261eb3ed030dd397fd43d19e089d0);\n    __crystax_locale_data_array[146].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[146].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[146].data[LC_MESSAGES].blob.data = __crystax_locale_blob_00177aa413cbf53e520ef83cd417cf0e8d64ffb19d503bf2ad192dc39c184805;\n    __crystax_locale_data_array[146].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_00177aa413cbf53e520ef83cd417cf0e8d64ffb19d503bf2ad192dc39c184805);\n    __crystax_locale_data_array[146].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[146].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[146].data[LC_MONETARY].blob.data = __crystax_locale_blob_aa1b81cefedfe011dcd3275c84149f1112c56028fe4939fbb6eb5052dd62e116;\n    __crystax_locale_data_array[146].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_aa1b81cefedfe011dcd3275c84149f1112c56028fe4939fbb6eb5052dd62e116);\n    __crystax_locale_data_array[146].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[146].data[LC_NUMERIC].alias = \"ru_RU.KOI8-R\";\n    __crystax_locale_data_array[146].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[146].data[LC_TIME].blob.data = __crystax_locale_blob_ec4f3ec135f87d291c72c870d203cc6f1e128ef1ae314766416dbb0d5ed828e1;\n    __crystax_locale_data_array[146].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ec4f3ec135f87d291c72c870d203cc6f1e128ef1ae314766416dbb0d5ed828e1);\n    __crystax_locale_data_array[146].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[147].encoding = \"ru_RU.KOI8-R\";\n    __crystax_locale_data_array[147].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_COLLATE].blob.data = __crystax_locale_blob_73193f6b518ed3a0f71a6f8585cdf056a02d6761462102de1f48c76eb1603756;\n    __crystax_locale_data_array[147].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_73193f6b518ed3a0f71a6f8585cdf056a02d6761462102de1f48c76eb1603756);\n    __crystax_locale_data_array[147].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[147].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_CTYPE].blob.data = __crystax_locale_blob_6e1a3e6a095ccafd23b41aa0f6d8008d6dd8f534582309112808a487b927ca5b;\n    __crystax_locale_data_array[147].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_6e1a3e6a095ccafd23b41aa0f6d8008d6dd8f534582309112808a487b927ca5b);\n    __crystax_locale_data_array[147].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[147].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_MESSAGES].blob.data = __crystax_locale_blob_a2214ae95a73934815e6904389a4463a5fb87f8f8f5e06cd823ced85555c0e0e;\n    __crystax_locale_data_array[147].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_a2214ae95a73934815e6904389a4463a5fb87f8f8f5e06cd823ced85555c0e0e);\n    __crystax_locale_data_array[147].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[147].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_MONETARY].blob.data = __crystax_locale_blob_10ba237a75a0f28120b25cd365f4dd01fea4adf1c6fc25dcd975579173bf2bae;\n    __crystax_locale_data_array[147].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_10ba237a75a0f28120b25cd365f4dd01fea4adf1c6fc25dcd975579173bf2bae);\n    __crystax_locale_data_array[147].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[147].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_NUMERIC].blob.data = __crystax_locale_blob_d8c54fdf9d0f95be9f2db0bfa7d0316ae817f8d61dc57683269bbcb69dd52501;\n    __crystax_locale_data_array[147].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_d8c54fdf9d0f95be9f2db0bfa7d0316ae817f8d61dc57683269bbcb69dd52501);\n    __crystax_locale_data_array[147].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[147].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[147].data[LC_TIME].blob.data = __crystax_locale_blob_37b3bbfd206c427bc31f238171a92eb188bda768539b833b05e741bd467a4a70;\n    __crystax_locale_data_array[147].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_37b3bbfd206c427bc31f238171a92eb188bda768539b833b05e741bd467a4a70);\n    __crystax_locale_data_array[147].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[148].encoding = \"ru_RU.UTF-8\";\n    __crystax_locale_data_array[148].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[148].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[148].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[148].data[LC_MESSAGES].blob.data = __crystax_locale_blob_47f495c68cfbc58f8795861f7bf19e19e02c2ac94c2b21ca899b316a5054410a;\n    __crystax_locale_data_array[148].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_47f495c68cfbc58f8795861f7bf19e19e02c2ac94c2b21ca899b316a5054410a);\n    __crystax_locale_data_array[148].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[148].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[148].data[LC_MONETARY].blob.data = __crystax_locale_blob_b09cf6590a9edb0ca4581fe6192039457180bdbf0e04a026e2833ea12c1dcfef;\n    __crystax_locale_data_array[148].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_b09cf6590a9edb0ca4581fe6192039457180bdbf0e04a026e2833ea12c1dcfef);\n    __crystax_locale_data_array[148].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[148].data[LC_NUMERIC].alias = \"ru_RU.KOI8-R\";\n    __crystax_locale_data_array[148].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[148].data[LC_TIME].blob.data = __crystax_locale_blob_07fbf62a98bb9cab95629eea926bf5be27610653a135de6bb56fc8a2f2a01755;\n    __crystax_locale_data_array[148].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_07fbf62a98bb9cab95629eea926bf5be27610653a135de6bb56fc8a2f2a01755);\n    __crystax_locale_data_array[148].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[149].encoding = \"sk_SK.ISO8859-2\";\n    __crystax_locale_data_array[149].data[LC_COLLATE].alias = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[149].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[149].data[LC_MESSAGES].alias = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[149].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[149].data[LC_MONETARY].blob.data = __crystax_locale_blob_f0574badeea8be125e536f231c6152f15a1c753a553e9398859c80c9a2f90466;\n    __crystax_locale_data_array[149].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f0574badeea8be125e536f231c6152f15a1c753a553e9398859c80c9a2f90466);\n    __crystax_locale_data_array[149].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[149].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[149].data[LC_NUMERIC].blob.data = __crystax_locale_blob_b1720b14d22bf813caae80bcb22d812429a01b50aa8d850353267f1c3fb44838;\n    __crystax_locale_data_array[149].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_b1720b14d22bf813caae80bcb22d812429a01b50aa8d850353267f1c3fb44838);\n    __crystax_locale_data_array[149].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[149].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[149].data[LC_TIME].blob.data = __crystax_locale_blob_2990e52cdbc1d040c5b26835f93fb3adebbd440e5223ac9eae91e866fde13614;\n    __crystax_locale_data_array[149].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_2990e52cdbc1d040c5b26835f93fb3adebbd440e5223ac9eae91e866fde13614);\n    __crystax_locale_data_array[149].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[150].encoding = \"sk_SK.UTF-8\";\n    __crystax_locale_data_array[150].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[150].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[150].data[LC_MESSAGES].alias = \"cs_CZ.ISO8859-2\";\n    __crystax_locale_data_array[150].data[LC_MONETARY].alias = \"sk_SK.ISO8859-2\";\n    __crystax_locale_data_array[150].data[LC_NUMERIC].alias = \"sk_SK.ISO8859-2\";\n    __crystax_locale_data_array[150].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[150].data[LC_TIME].blob.data = __crystax_locale_blob_94edf62a2c9ea63a9c7bc2c31f67b2e8bf8a1fa1f51bff889def540566945a09;\n    __crystax_locale_data_array[150].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_94edf62a2c9ea63a9c7bc2c31f67b2e8bf8a1fa1f51bff889def540566945a09);\n    __crystax_locale_data_array[150].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[151].encoding = \"sl_SI.ISO8859-2\";\n    __crystax_locale_data_array[151].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[151].data[LC_COLLATE].blob.data = __crystax_locale_blob_d945ce35f9c10b35e5da6dc4925bfe67f5eebe796aaae0baddd1b9c5aa0aa982;\n    __crystax_locale_data_array[151].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_d945ce35f9c10b35e5da6dc4925bfe67f5eebe796aaae0baddd1b9c5aa0aa982);\n    __crystax_locale_data_array[151].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[151].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[151].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[151].data[LC_MESSAGES].blob.data = __crystax_locale_blob_e5c68597b20c5551f244dfade51c21d097a465147c799ee423bd2306655ad728;\n    __crystax_locale_data_array[151].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_e5c68597b20c5551f244dfade51c21d097a465147c799ee423bd2306655ad728);\n    __crystax_locale_data_array[151].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[151].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[151].data[LC_MONETARY].blob.data = __crystax_locale_blob_f609eecbfc7cd30cdc21b3246325679df543b68de3d40f172698088b2b9d077d;\n    __crystax_locale_data_array[151].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_f609eecbfc7cd30cdc21b3246325679df543b68de3d40f172698088b2b9d077d);\n    __crystax_locale_data_array[151].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[151].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[151].data[LC_NUMERIC].blob.data = __crystax_locale_blob_c9a2485078b1c44fdddaaf88ab4277dcdadbd99b501d47e876e55a03d4affb45;\n    __crystax_locale_data_array[151].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_c9a2485078b1c44fdddaaf88ab4277dcdadbd99b501d47e876e55a03d4affb45);\n    __crystax_locale_data_array[151].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[151].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[151].data[LC_TIME].blob.data = __crystax_locale_blob_229b26b1185a74b14e58301da32490f9aef09166d3b7ece6d2dd67b31f1ad1ef;\n    __crystax_locale_data_array[151].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_229b26b1185a74b14e58301da32490f9aef09166d3b7ece6d2dd67b31f1ad1ef);\n    __crystax_locale_data_array[151].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[152].encoding = \"sl_SI.UTF-8\";\n    __crystax_locale_data_array[152].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[152].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[152].data[LC_MESSAGES].alias = \"sl_SI.ISO8859-2\";\n    __crystax_locale_data_array[152].data[LC_MONETARY].alias = \"sl_SI.ISO8859-2\";\n    __crystax_locale_data_array[152].data[LC_NUMERIC].alias = \"sl_SI.ISO8859-2\";\n    __crystax_locale_data_array[152].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[152].data[LC_TIME].blob.data = __crystax_locale_blob_cc9157f4e13d1a5080920f3d33c6439f19df53b1a4855f4f748ba4a90dc378f4;\n    __crystax_locale_data_array[152].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_cc9157f4e13d1a5080920f3d33c6439f19df53b1a4855f4f748ba4a90dc378f4);\n    __crystax_locale_data_array[152].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[153].encoding = \"sr_YU.ISO8859-2\";\n    __crystax_locale_data_array[153].data[LC_COLLATE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[153].data[LC_CTYPE].alias = \"la_LN.ISO8859-2\";\n    __crystax_locale_data_array[153].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[153].data[LC_MESSAGES].blob.data = __crystax_locale_blob_8c9e5ab0b14669dfaff0dde1332b13ce887bc2f4e6724effe5d149dcc7f1c00e;\n    __crystax_locale_data_array[153].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_8c9e5ab0b14669dfaff0dde1332b13ce887bc2f4e6724effe5d149dcc7f1c00e);\n    __crystax_locale_data_array[153].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[153].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[153].data[LC_MONETARY].blob.data = __crystax_locale_blob_683b15b96a403a9933c8591814cb74dfbc97c7a5e1237be25fa3edd8c1e2de6a;\n    __crystax_locale_data_array[153].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_683b15b96a403a9933c8591814cb74dfbc97c7a5e1237be25fa3edd8c1e2de6a);\n    __crystax_locale_data_array[153].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[153].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[153].data[LC_NUMERIC].blob.data = __crystax_locale_blob_b87e229987219c0c89e95d6ea02942af19e5a33db9618fab497b7a742be91957;\n    __crystax_locale_data_array[153].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_b87e229987219c0c89e95d6ea02942af19e5a33db9618fab497b7a742be91957);\n    __crystax_locale_data_array[153].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[153].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[153].data[LC_TIME].blob.data = __crystax_locale_blob_3d63b59e119323f0a518574a76b40e9dfd86c9e665c994502b6cda10c1026717;\n    __crystax_locale_data_array[153].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_3d63b59e119323f0a518574a76b40e9dfd86c9e665c994502b6cda10c1026717);\n    __crystax_locale_data_array[153].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[154].encoding = \"sr_YU.ISO8859-5\";\n    __crystax_locale_data_array[154].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[154].data[LC_COLLATE].blob.data = __crystax_locale_blob_173a23edbd724fef42c3dcbda73ba1160b34980c64ef8fa48ab82d611bbf6a72;\n    __crystax_locale_data_array[154].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_173a23edbd724fef42c3dcbda73ba1160b34980c64ef8fa48ab82d611bbf6a72);\n    __crystax_locale_data_array[154].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[154].data[LC_CTYPE].alias = \"ru_RU.ISO8859-5\";\n    __crystax_locale_data_array[154].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[154].data[LC_MESSAGES].blob.data = __crystax_locale_blob_dd4708aded39fbc9470b79735328680b8234ebd52030a44659167b8cdad00a89;\n    __crystax_locale_data_array[154].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_dd4708aded39fbc9470b79735328680b8234ebd52030a44659167b8cdad00a89);\n    __crystax_locale_data_array[154].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[154].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[154].data[LC_MONETARY].blob.data = __crystax_locale_blob_abc5bcfbdcca1864995dcf76a9b96084a801e9c37eadb461c18ea0514cc9f737;\n    __crystax_locale_data_array[154].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_abc5bcfbdcca1864995dcf76a9b96084a801e9c37eadb461c18ea0514cc9f737);\n    __crystax_locale_data_array[154].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[154].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[154].data[LC_NUMERIC].blob.data = __crystax_locale_blob_37a5f564b471f28a5b51f49481160c35b9002ae192d968774e766c83a71f755b;\n    __crystax_locale_data_array[154].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_37a5f564b471f28a5b51f49481160c35b9002ae192d968774e766c83a71f755b);\n    __crystax_locale_data_array[154].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[154].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[154].data[LC_TIME].blob.data = __crystax_locale_blob_386c20c2f55b86c63a7f635504a4a193733f71cff59cdf14fdc94801e6fbe2d7;\n    __crystax_locale_data_array[154].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_386c20c2f55b86c63a7f635504a4a193733f71cff59cdf14fdc94801e6fbe2d7);\n    __crystax_locale_data_array[154].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[155].encoding = \"sr_YU.UTF-8\";\n    __crystax_locale_data_array[155].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[155].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[155].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[155].data[LC_MESSAGES].blob.data = __crystax_locale_blob_c6fcefb4582f864ead717931436c750ad12f2e16e611017908d8f17f34824825;\n    __crystax_locale_data_array[155].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_c6fcefb4582f864ead717931436c750ad12f2e16e611017908d8f17f34824825);\n    __crystax_locale_data_array[155].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[155].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[155].data[LC_MONETARY].blob.data = __crystax_locale_blob_51a600f2e8b549e4e82a116e687aa4a607b649a5d8c014ba2d15c58d2c63d2cf;\n    __crystax_locale_data_array[155].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_51a600f2e8b549e4e82a116e687aa4a607b649a5d8c014ba2d15c58d2c63d2cf);\n    __crystax_locale_data_array[155].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[155].data[LC_NUMERIC].alias = \"sr_YU.ISO8859-5\";\n    __crystax_locale_data_array[155].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[155].data[LC_TIME].blob.data = __crystax_locale_blob_070850dfbb3cd94cdf7adc7be019a4ad8701422e5df10bd0e768e0d23fd3de72;\n    __crystax_locale_data_array[155].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_070850dfbb3cd94cdf7adc7be019a4ad8701422e5df10bd0e768e0d23fd3de72);\n    __crystax_locale_data_array[155].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[156].encoding = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[156].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[156].data[LC_COLLATE].blob.data = __crystax_locale_blob_11c1e8905413bef99a2fde568389e78698c50ff348438fc59d72b08e743d3bc1;\n    __crystax_locale_data_array[156].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_11c1e8905413bef99a2fde568389e78698c50ff348438fc59d72b08e743d3bc1);\n    __crystax_locale_data_array[156].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[156].data[LC_CTYPE].alias = \"la_LN.ISO8859-1\";\n    __crystax_locale_data_array[156].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[156].data[LC_MESSAGES].blob.data = __crystax_locale_blob_52e61555bb139b652f3513202a90c613e02dd44598c5f3430c6f35f39de809cc;\n    __crystax_locale_data_array[156].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_52e61555bb139b652f3513202a90c613e02dd44598c5f3430c6f35f39de809cc);\n    __crystax_locale_data_array[156].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[156].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[156].data[LC_MONETARY].blob.data = __crystax_locale_blob_2b7b57acce761af6545a25f199c595182a9a86e2786e7cf9558f24c0b995f44b;\n    __crystax_locale_data_array[156].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_2b7b57acce761af6545a25f199c595182a9a86e2786e7cf9558f24c0b995f44b);\n    __crystax_locale_data_array[156].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[156].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[156].data[LC_NUMERIC].blob.data = __crystax_locale_blob_f981cd2521f39ed88d9ef445b2d7f12ff9d1576159ffef50838fd15bd286a50c;\n    __crystax_locale_data_array[156].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_f981cd2521f39ed88d9ef445b2d7f12ff9d1576159ffef50838fd15bd286a50c);\n    __crystax_locale_data_array[156].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[156].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[156].data[LC_TIME].blob.data = __crystax_locale_blob_f9111513ae9083b7cf6caf228518890710c521c9079dba21f2ab291e08e32eae;\n    __crystax_locale_data_array[156].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_f9111513ae9083b7cf6caf228518890710c521c9079dba21f2ab291e08e32eae);\n    __crystax_locale_data_array[156].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[157].encoding = \"sv_SE.ISO8859-15\";\n    __crystax_locale_data_array[157].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[157].data[LC_COLLATE].blob.data = __crystax_locale_blob_435b97d65d10364c973cf10a0e730b1892a505f9e09e4302c60637f716140595;\n    __crystax_locale_data_array[157].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_435b97d65d10364c973cf10a0e730b1892a505f9e09e4302c60637f716140595);\n    __crystax_locale_data_array[157].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[157].data[LC_CTYPE].alias = \"la_LN.ISO8859-15\";\n    __crystax_locale_data_array[157].data[LC_MESSAGES].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[157].data[LC_MONETARY].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[157].data[LC_NUMERIC].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[157].data[LC_TIME].alias = \"sv_SE.ISO8859-1\";\n\n    __crystax_locale_data_array[158].encoding = \"sv_SE.UTF-8\";\n    __crystax_locale_data_array[158].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[158].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[158].data[LC_MESSAGES].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[158].data[LC_MONETARY].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[158].data[LC_NUMERIC].alias = \"sv_SE.ISO8859-1\";\n    __crystax_locale_data_array[158].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[158].data[LC_TIME].blob.data = __crystax_locale_blob_88ac38472cc8cd80a1c5ebf24be5ca6aca361edb265973ebf97193e4c50c3c10;\n    __crystax_locale_data_array[158].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_88ac38472cc8cd80a1c5ebf24be5ca6aca361edb265973ebf97193e4c50c3c10);\n    __crystax_locale_data_array[158].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[159].encoding = \"tr_TR.ISO8859-9\";\n    __crystax_locale_data_array[159].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_COLLATE].blob.data = __crystax_locale_blob_3e7c61aad833ef545da6b3e943bd58f6613d0867ec710c20fde39f4908514fbc;\n    __crystax_locale_data_array[159].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_3e7c61aad833ef545da6b3e943bd58f6613d0867ec710c20fde39f4908514fbc);\n    __crystax_locale_data_array[159].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[159].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_CTYPE].blob.data = __crystax_locale_blob_14d6c1f5d34d28ee09f5abb61083e5b9a43099b7bb11d6fc72fee5f061e83d8e;\n    __crystax_locale_data_array[159].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_14d6c1f5d34d28ee09f5abb61083e5b9a43099b7bb11d6fc72fee5f061e83d8e);\n    __crystax_locale_data_array[159].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[159].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_MESSAGES].blob.data = __crystax_locale_blob_0eb4631d11d84ef38e7a8f9420f716ff4dd6c7b7ae18b898844ba7a7620843a6;\n    __crystax_locale_data_array[159].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_0eb4631d11d84ef38e7a8f9420f716ff4dd6c7b7ae18b898844ba7a7620843a6);\n    __crystax_locale_data_array[159].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[159].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_MONETARY].blob.data = __crystax_locale_blob_8c6885d4db4211425b95764025f96dcfefb79ef18eb53453ffdc4f6cba68a27d;\n    __crystax_locale_data_array[159].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_8c6885d4db4211425b95764025f96dcfefb79ef18eb53453ffdc4f6cba68a27d);\n    __crystax_locale_data_array[159].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[159].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_NUMERIC].blob.data = __crystax_locale_blob_d4ca44d3089c52da756f340987185bbd3217a68eb49cf0ac3e9f0706d497d851;\n    __crystax_locale_data_array[159].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_d4ca44d3089c52da756f340987185bbd3217a68eb49cf0ac3e9f0706d497d851);\n    __crystax_locale_data_array[159].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[159].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[159].data[LC_TIME].blob.data = __crystax_locale_blob_c612b4f42f8652c8026f35571b5bf7110e5c8ee8968a2095ee4bcb55df6848e6;\n    __crystax_locale_data_array[159].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_c612b4f42f8652c8026f35571b5bf7110e5c8ee8968a2095ee4bcb55df6848e6);\n    __crystax_locale_data_array[159].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[160].encoding = \"tr_TR.UTF-8\";\n    __crystax_locale_data_array[160].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[160].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[160].data[LC_MESSAGES].alias = \"tr_TR.ISO8859-9\";\n    __crystax_locale_data_array[160].data[LC_MONETARY].alias = \"tr_TR.ISO8859-9\";\n    __crystax_locale_data_array[160].data[LC_NUMERIC].alias = \"tr_TR.ISO8859-9\";\n    __crystax_locale_data_array[160].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[160].data[LC_TIME].blob.data = __crystax_locale_blob_fbf8e10fcdb2f15345aa2a510dd291d8a6abb385a91ccb8742ca61cd378b70eb;\n    __crystax_locale_data_array[160].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_fbf8e10fcdb2f15345aa2a510dd291d8a6abb385a91ccb8742ca61cd378b70eb);\n    __crystax_locale_data_array[160].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[161].encoding = \"uk_UA.CP1251\";\n    __crystax_locale_data_array[161].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[161].data[LC_COLLATE].blob.data = __crystax_locale_blob_db9cb102f9f13ff9a6c0ec007ab24c35a22c3a7b8ce6094d7d3487e5e2538135;\n    __crystax_locale_data_array[161].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_db9cb102f9f13ff9a6c0ec007ab24c35a22c3a7b8ce6094d7d3487e5e2538135);\n    __crystax_locale_data_array[161].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[161].data[LC_CTYPE].alias = \"bg_BG.CP1251\";\n    __crystax_locale_data_array[161].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[161].data[LC_MESSAGES].blob.data = __crystax_locale_blob_bfab068d2cebe49810a878a5d82cd5650a1d107c1c279787869ed8734a5444c8;\n    __crystax_locale_data_array[161].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_bfab068d2cebe49810a878a5d82cd5650a1d107c1c279787869ed8734a5444c8);\n    __crystax_locale_data_array[161].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[161].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[161].data[LC_MONETARY].blob.data = __crystax_locale_blob_1296b9141ed6f2f90058fbdbc654f9093104cf72d89fde4bc671656889786f0f;\n    __crystax_locale_data_array[161].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_1296b9141ed6f2f90058fbdbc654f9093104cf72d89fde4bc671656889786f0f);\n    __crystax_locale_data_array[161].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[161].data[LC_NUMERIC].alias = \"uk_UA.KOI8-U\";\n    __crystax_locale_data_array[161].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[161].data[LC_TIME].blob.data = __crystax_locale_blob_e7709234d2edab817b6e1731e3487b2a2f546d6b5131b63f99c55cc6acd39131;\n    __crystax_locale_data_array[161].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_e7709234d2edab817b6e1731e3487b2a2f546d6b5131b63f99c55cc6acd39131);\n    __crystax_locale_data_array[161].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[162].encoding = \"uk_UA.ISO8859-5\";\n    __crystax_locale_data_array[162].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[162].data[LC_COLLATE].blob.data = __crystax_locale_blob_255db582e3484146454bb4fba72fb912ec5ee1c2547afd40595a0493c872fb1f;\n    __crystax_locale_data_array[162].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_255db582e3484146454bb4fba72fb912ec5ee1c2547afd40595a0493c872fb1f);\n    __crystax_locale_data_array[162].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[162].data[LC_CTYPE].alias = \"ru_RU.ISO8859-5\";\n    __crystax_locale_data_array[162].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[162].data[LC_MESSAGES].blob.data = __crystax_locale_blob_cd2fa9ec3c3251855b142166d7c120756501bf0f49bb0d893770853d1eed7ab2;\n    __crystax_locale_data_array[162].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_cd2fa9ec3c3251855b142166d7c120756501bf0f49bb0d893770853d1eed7ab2);\n    __crystax_locale_data_array[162].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[162].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[162].data[LC_MONETARY].blob.data = __crystax_locale_blob_110ae53ac66cbc3d00efc44ed59bbc2553be8de749e83de2ad3c1facd865dbd9;\n    __crystax_locale_data_array[162].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_110ae53ac66cbc3d00efc44ed59bbc2553be8de749e83de2ad3c1facd865dbd9);\n    __crystax_locale_data_array[162].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[162].data[LC_NUMERIC].alias = \"uk_UA.KOI8-U\";\n    __crystax_locale_data_array[162].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[162].data[LC_TIME].blob.data = __crystax_locale_blob_5655454c98944b71a0acb8cfe60ced5569a28571bdf04c36b84f053f6f0f8387;\n    __crystax_locale_data_array[162].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_5655454c98944b71a0acb8cfe60ced5569a28571bdf04c36b84f053f6f0f8387);\n    __crystax_locale_data_array[162].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[163].encoding = \"uk_UA.KOI8-U\";\n    __crystax_locale_data_array[163].data[LC_COLLATE].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_COLLATE].blob.data = __crystax_locale_blob_cd4dd05d323df59f5f8afeaeb0cfdad4cfd5063e7bcc6910dbd3936ca005c453;\n    __crystax_locale_data_array[163].data[LC_COLLATE].blob.size = sizeof(__crystax_locale_blob_cd4dd05d323df59f5f8afeaeb0cfdad4cfd5063e7bcc6910dbd3936ca005c453);\n    __crystax_locale_data_array[163].data[LC_COLLATE].blob.compressed = 1;\n    __crystax_locale_data_array[163].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_CTYPE].blob.data = __crystax_locale_blob_c40e28a3a770a916e2894e1cc5198fc8878c60552e84fe4c2238b75a0609d208;\n    __crystax_locale_data_array[163].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_c40e28a3a770a916e2894e1cc5198fc8878c60552e84fe4c2238b75a0609d208);\n    __crystax_locale_data_array[163].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[163].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_MESSAGES].blob.data = __crystax_locale_blob_7e0ae12ba9dc86da05411a449ed19abff05f5cff5bcffddf22e74867b3551dab;\n    __crystax_locale_data_array[163].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_7e0ae12ba9dc86da05411a449ed19abff05f5cff5bcffddf22e74867b3551dab);\n    __crystax_locale_data_array[163].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[163].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_MONETARY].blob.data = __crystax_locale_blob_c78ad82f20f2103ef664ce49f965a355d4848dfc63ed5bd29dfe13e8ab90f089;\n    __crystax_locale_data_array[163].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_c78ad82f20f2103ef664ce49f965a355d4848dfc63ed5bd29dfe13e8ab90f089);\n    __crystax_locale_data_array[163].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[163].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_NUMERIC].blob.data = __crystax_locale_blob_35990dc1b6693c99e462b2b2c1db312a047fb813a5bfb7b95d1d53e218f60ce8;\n    __crystax_locale_data_array[163].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_35990dc1b6693c99e462b2b2c1db312a047fb813a5bfb7b95d1d53e218f60ce8);\n    __crystax_locale_data_array[163].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[163].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[163].data[LC_TIME].blob.data = __crystax_locale_blob_6ee7a2ce04692b0426827325666da0e3154591c17dc52267eeb8c4a8d4738d33;\n    __crystax_locale_data_array[163].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_6ee7a2ce04692b0426827325666da0e3154591c17dc52267eeb8c4a8d4738d33);\n    __crystax_locale_data_array[163].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[164].encoding = \"uk_UA.UTF-8\";\n    __crystax_locale_data_array[164].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[164].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[164].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[164].data[LC_MESSAGES].blob.data = __crystax_locale_blob_6fd23494054372b686dbd44182fa5ed4699d02eea52e366fc4d969cf3f739be7;\n    __crystax_locale_data_array[164].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_6fd23494054372b686dbd44182fa5ed4699d02eea52e366fc4d969cf3f739be7);\n    __crystax_locale_data_array[164].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[164].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[164].data[LC_MONETARY].blob.data = __crystax_locale_blob_a8ede73fe7d1c900cf578d9140cf2e4c1085c97a5fe0970adaf449afdcb581bc;\n    __crystax_locale_data_array[164].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_a8ede73fe7d1c900cf578d9140cf2e4c1085c97a5fe0970adaf449afdcb581bc);\n    __crystax_locale_data_array[164].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[164].data[LC_NUMERIC].alias = \"uk_UA.KOI8-U\";\n    __crystax_locale_data_array[164].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[164].data[LC_TIME].blob.data = __crystax_locale_blob_523dff2db1ff7a05052508ff4d6ab9974a3efe237435eaeba398f47a4d18e235;\n    __crystax_locale_data_array[164].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_523dff2db1ff7a05052508ff4d6ab9974a3efe237435eaeba398f47a4d18e235);\n    __crystax_locale_data_array[164].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[165].encoding = \"zh_CN.GB18030\";\n    __crystax_locale_data_array[165].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[165].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[165].data[LC_CTYPE].blob.data = __crystax_locale_blob_a0c8a2aef4c14b17288aa20f1f40bf5e4b0a6fce85656af225970ef4cb6887c7;\n    __crystax_locale_data_array[165].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_a0c8a2aef4c14b17288aa20f1f40bf5e4b0a6fce85656af225970ef4cb6887c7);\n    __crystax_locale_data_array[165].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[165].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[165].data[LC_MESSAGES].blob.data = __crystax_locale_blob_524a5acc4e77a82c0eaf48d52ff2e69d3533829a187e1d52f76000ec430eee2f;\n    __crystax_locale_data_array[165].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_524a5acc4e77a82c0eaf48d52ff2e69d3533829a187e1d52f76000ec430eee2f);\n    __crystax_locale_data_array[165].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[165].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[165].data[LC_MONETARY].blob.data = __crystax_locale_blob_832fb156d79a90e895db6462acb91bf7502cc696051884c528c8ac36a87021d7;\n    __crystax_locale_data_array[165].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_832fb156d79a90e895db6462acb91bf7502cc696051884c528c8ac36a87021d7);\n    __crystax_locale_data_array[165].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[165].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[165].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[165].data[LC_TIME].blob.data = __crystax_locale_blob_65806b2b8bceb79c42313705ed31797501b2c7d43c27a4adf0384d2c5221d40c;\n    __crystax_locale_data_array[165].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_65806b2b8bceb79c42313705ed31797501b2c7d43c27a4adf0384d2c5221d40c);\n    __crystax_locale_data_array[165].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[166].encoding = \"zh_CN.GB2312\";\n    __crystax_locale_data_array[166].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[166].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[166].data[LC_CTYPE].blob.data = __crystax_locale_blob_222cd6c83d3325f93e25cbee51b996d0a6bb59ecc6da4a8283635004538449e6;\n    __crystax_locale_data_array[166].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_222cd6c83d3325f93e25cbee51b996d0a6bb59ecc6da4a8283635004538449e6);\n    __crystax_locale_data_array[166].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[166].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[166].data[LC_MESSAGES].blob.data = __crystax_locale_blob_1f32346cbd33236b721ad979b06245f0fdc8f15f32635b5cef18e4a34704e59f;\n    __crystax_locale_data_array[166].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_1f32346cbd33236b721ad979b06245f0fdc8f15f32635b5cef18e4a34704e59f);\n    __crystax_locale_data_array[166].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[166].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[166].data[LC_MONETARY].blob.data = __crystax_locale_blob_76f94e7cc6650bc618bd90b434d11ee9e6cd7ee6f1a06dcdb682d4a08d290047;\n    __crystax_locale_data_array[166].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_76f94e7cc6650bc618bd90b434d11ee9e6cd7ee6f1a06dcdb682d4a08d290047);\n    __crystax_locale_data_array[166].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[166].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[166].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[166].data[LC_TIME].blob.data = __crystax_locale_blob_611433737a61e3be7c37c681f2124e01841e0e5eec39663a290173d57eb974a7;\n    __crystax_locale_data_array[166].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_611433737a61e3be7c37c681f2124e01841e0e5eec39663a290173d57eb974a7);\n    __crystax_locale_data_array[166].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[167].encoding = \"zh_CN.GBK\";\n    __crystax_locale_data_array[167].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[167].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[167].data[LC_CTYPE].blob.data = __crystax_locale_blob_ca7f98a878eec151fa4408de704ce87ad100d5dc3466e3aa0801d62c578ec402;\n    __crystax_locale_data_array[167].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_ca7f98a878eec151fa4408de704ce87ad100d5dc3466e3aa0801d62c578ec402);\n    __crystax_locale_data_array[167].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[167].data[LC_MESSAGES].alias = \"zh_CN.GB2312\";\n    __crystax_locale_data_array[167].data[LC_MONETARY].alias = \"zh_CN.GB2312\";\n    __crystax_locale_data_array[167].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[167].data[LC_TIME].alias = \"zh_CN.GB2312\";\n\n    __crystax_locale_data_array[168].encoding = \"zh_CN.UTF-8\";\n    __crystax_locale_data_array[168].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[168].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[168].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[168].data[LC_MESSAGES].blob.data = __crystax_locale_blob_3d238dc41bbac672ff5a98aa96a451cfe8bb22b2b10bbd86795abaa20e71a7ce;\n    __crystax_locale_data_array[168].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_3d238dc41bbac672ff5a98aa96a451cfe8bb22b2b10bbd86795abaa20e71a7ce);\n    __crystax_locale_data_array[168].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[168].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[168].data[LC_MONETARY].blob.data = __crystax_locale_blob_6c70369490f26127e3f8367e439444b7fef90dc6142148daebb2e4523907e1be;\n    __crystax_locale_data_array[168].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_6c70369490f26127e3f8367e439444b7fef90dc6142148daebb2e4523907e1be);\n    __crystax_locale_data_array[168].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[168].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[168].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[168].data[LC_TIME].blob.data = __crystax_locale_blob_ed2278729ad67a859319cad187ba49174c50eeaff35d42ddd68cc3385647062d;\n    __crystax_locale_data_array[168].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_ed2278729ad67a859319cad187ba49174c50eeaff35d42ddd68cc3385647062d);\n    __crystax_locale_data_array[168].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[169].encoding = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[169].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[169].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[169].data[LC_CTYPE].blob.data = __crystax_locale_blob_cf1c57b81fb6879ba0ac169c279109f41800d93b768bb34ee033d0eeba456d8c;\n    __crystax_locale_data_array[169].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_cf1c57b81fb6879ba0ac169c279109f41800d93b768bb34ee033d0eeba456d8c);\n    __crystax_locale_data_array[169].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[169].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[169].data[LC_MESSAGES].blob.data = __crystax_locale_blob_2cfa8c31af882a925362429ddd0da3fcb33d49b1b3328b115f5eec8fb4c18fe3;\n    __crystax_locale_data_array[169].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_2cfa8c31af882a925362429ddd0da3fcb33d49b1b3328b115f5eec8fb4c18fe3);\n    __crystax_locale_data_array[169].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[169].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[169].data[LC_MONETARY].blob.data = __crystax_locale_blob_61290c7172e811525a8900e61f8eba85025dfb07a1e3ba76b42b4bc4452c2078;\n    __crystax_locale_data_array[169].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_61290c7172e811525a8900e61f8eba85025dfb07a1e3ba76b42b4bc4452c2078);\n    __crystax_locale_data_array[169].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[169].data[LC_NUMERIC].alias = NULL;\n    __crystax_locale_data_array[169].data[LC_NUMERIC].blob.data = __crystax_locale_blob_b9ef9bd75ff7a6ee96c49a78d24591391efa1c4b11cee8f9772975d5bae3a876;\n    __crystax_locale_data_array[169].data[LC_NUMERIC].blob.size = sizeof(__crystax_locale_blob_b9ef9bd75ff7a6ee96c49a78d24591391efa1c4b11cee8f9772975d5bae3a876);\n    __crystax_locale_data_array[169].data[LC_NUMERIC].blob.compressed = 0;\n    __crystax_locale_data_array[169].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[169].data[LC_TIME].blob.data = __crystax_locale_blob_8be49ac2f61e6c86ec72e959310f665024455533c263702efd58ce6ee8259e3e;\n    __crystax_locale_data_array[169].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_8be49ac2f61e6c86ec72e959310f665024455533c263702efd58ce6ee8259e3e);\n    __crystax_locale_data_array[169].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[170].encoding = \"zh_HK.Big5HKSCS\";\n    __crystax_locale_data_array[170].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[170].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[170].data[LC_CTYPE].blob.data = __crystax_locale_blob_c2778b61f3c9060eaeb17510cb20ccb9a1f0e9478d05374d551650d53939e09f;\n    __crystax_locale_data_array[170].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_c2778b61f3c9060eaeb17510cb20ccb9a1f0e9478d05374d551650d53939e09f);\n    __crystax_locale_data_array[170].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[170].data[LC_MESSAGES].alias = \"zh_TW.Big5\";\n    __crystax_locale_data_array[170].data[LC_MONETARY].alias = \"zh_HK.UTF-8\";\n    __crystax_locale_data_array[170].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[170].data[LC_TIME].alias = \"zh_TW.UTF-8\";\n\n    __crystax_locale_data_array[171].encoding = \"zh_HK.UTF-8\";\n    __crystax_locale_data_array[171].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[171].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[171].data[LC_MESSAGES].alias = \"zh_TW.UTF-8\";\n    __crystax_locale_data_array[171].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[171].data[LC_MONETARY].blob.data = __crystax_locale_blob_90bcae322be4fc25f62458de5c5f964fb95dad22fc3ebfa303b946643156dd3b;\n    __crystax_locale_data_array[171].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_90bcae322be4fc25f62458de5c5f964fb95dad22fc3ebfa303b946643156dd3b);\n    __crystax_locale_data_array[171].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[171].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[171].data[LC_TIME].alias = \"zh_TW.UTF-8\";\n\n    __crystax_locale_data_array[172].encoding = \"zh_TW.Big5\";\n    __crystax_locale_data_array[172].data[LC_COLLATE].alias = \"is_IS.ISO8859-1\";\n    __crystax_locale_data_array[172].data[LC_CTYPE].alias = NULL;\n    __crystax_locale_data_array[172].data[LC_CTYPE].blob.data = __crystax_locale_blob_448c0eba0835903f00cc41035ca89265ec030906f6b589c48eb52f20bb90ca85;\n    __crystax_locale_data_array[172].data[LC_CTYPE].blob.size = sizeof(__crystax_locale_blob_448c0eba0835903f00cc41035ca89265ec030906f6b589c48eb52f20bb90ca85);\n    __crystax_locale_data_array[172].data[LC_CTYPE].blob.compressed = 1;\n    __crystax_locale_data_array[172].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[172].data[LC_MESSAGES].blob.data = __crystax_locale_blob_1ad95ca39935fab98f4fb80fdaca9a27dce499933e86df2a536f3bc6ac5a217a;\n    __crystax_locale_data_array[172].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_1ad95ca39935fab98f4fb80fdaca9a27dce499933e86df2a536f3bc6ac5a217a);\n    __crystax_locale_data_array[172].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[172].data[LC_MONETARY].alias = NULL;\n    __crystax_locale_data_array[172].data[LC_MONETARY].blob.data = __crystax_locale_blob_1baf7da8e616156fdca37cdb579caa2635e3bdf984dd3cdd02301a604a94dbda;\n    __crystax_locale_data_array[172].data[LC_MONETARY].blob.size = sizeof(__crystax_locale_blob_1baf7da8e616156fdca37cdb579caa2635e3bdf984dd3cdd02301a604a94dbda);\n    __crystax_locale_data_array[172].data[LC_MONETARY].blob.compressed = 0;\n    __crystax_locale_data_array[172].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[172].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[172].data[LC_TIME].blob.data = __crystax_locale_blob_c4e4dbb1bd6053ebd05f23f3e5cc9781d1d6c9c73807bc3c86a70601889c28f3;\n    __crystax_locale_data_array[172].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_c4e4dbb1bd6053ebd05f23f3e5cc9781d1d6c9c73807bc3c86a70601889c28f3);\n    __crystax_locale_data_array[172].data[LC_TIME].blob.compressed = 1;\n\n    __crystax_locale_data_array[173].encoding = \"zh_TW.UTF-8\";\n    __crystax_locale_data_array[173].data[LC_COLLATE].alias = \"la_LN.US-ASCII\";\n    __crystax_locale_data_array[173].data[LC_CTYPE].alias = \"UTF-8\";\n    __crystax_locale_data_array[173].data[LC_MESSAGES].alias = NULL;\n    __crystax_locale_data_array[173].data[LC_MESSAGES].blob.data = __crystax_locale_blob_77ef729a45e7b1c8e0c23a85100b42e760913b636d79d91be72731c3d7797273;\n    __crystax_locale_data_array[173].data[LC_MESSAGES].blob.size = sizeof(__crystax_locale_blob_77ef729a45e7b1c8e0c23a85100b42e760913b636d79d91be72731c3d7797273);\n    __crystax_locale_data_array[173].data[LC_MESSAGES].blob.compressed = 0;\n    __crystax_locale_data_array[173].data[LC_MONETARY].alias = \"zh_TW.Big5\";\n    __crystax_locale_data_array[173].data[LC_NUMERIC].alias = \"zh_CN.eucCN\";\n    __crystax_locale_data_array[173].data[LC_TIME].alias = NULL;\n    __crystax_locale_data_array[173].data[LC_TIME].blob.data = __crystax_locale_blob_c50e595ced0bf44d64945e175d822ee34ea83ce222d961bacb6a41d79f7d11d9;\n    __crystax_locale_data_array[173].data[LC_TIME].blob.size = sizeof(__crystax_locale_blob_c50e595ced0bf44d64945e175d822ee34ea83ce222d961bacb6a41d79f7d11d9);\n    __crystax_locale_data_array[173].data[LC_TIME].blob.compressed = 1;\n}\n\nstatic int volatile __crystax_locale_init_flag = 0;\nstatic pthread_mutex_t __crystax_locale_init_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\nint __crystax_locale_init()\n{\n    int rc;\n    if (__sync_add_and_fetch(&__crystax_locale_init_flag, 0) == 0)\n    {\n        if ((rc = pthread_mutex_lock(&__crystax_locale_init_mutex)) != 0) return rc;\n        if (__crystax_locale_init_flag == 0)\n        {\n            __crystax_locale_init_impl();\n            __crystax_locale_init_flag = 1;\n        }\n        if ((rc = pthread_mutex_unlock(&__crystax_locale_init_mutex)) != 0) return rc;\n    }\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/lock.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/lock.hpp>\n#include <stdlib.h>\n\nnamespace crystax\n{\n\nstatic void mtx_lock(pthread_mutex_t &mtx)\n{\n    int ret = ::pthread_mutex_lock(&mtx);\n    if (ret != 0)\n    {\n        ERR(\"can't lock mutex\");\n        ::abort();\n    }\n}\n\nscope_lock_t::scope_lock_t(pthread_mutex_t &m)\n    :mtx(m)\n{\n    mtx_lock(mtx);\n}\n\nscope_lock_t::scope_lock_t(pthread_mutex_t *m)\n    :mtx(*m)\n{\n    mtx_lock(mtx);\n}\n\nscope_lock_t::~scope_lock_t()\n{\n    int ret = ::pthread_mutex_unlock(&mtx);\n    if (ret != 0)\n    {\n        ERR(\"can't unlock mutex\");\n        ::abort();\n    }\n}\n\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/src/crystax/log.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/log.h>\n#include <android/log.h>\n\n#include <stdio.h>\n#include <dlfcn.h>\n\n#include <crystax/ctassert.h>\n\n__CRYSTAX_STATIC_ASSERT(CRYSTAX_LOGLEVEL_DEBUG == ANDROID_LOG_DEBUG, \"Wrong log level DEBUG\");\n__CRYSTAX_STATIC_ASSERT(CRYSTAX_LOGLEVEL_INFO  == ANDROID_LOG_INFO,  \"Wrong log level INFO\");\n__CRYSTAX_STATIC_ASSERT(CRYSTAX_LOGLEVEL_WARN  == ANDROID_LOG_WARN,  \"Wrong log level WARN\");\n__CRYSTAX_STATIC_ASSERT(CRYSTAX_LOGLEVEL_ERROR == ANDROID_LOG_ERROR, \"Wrong log level ERROR\");\n__CRYSTAX_STATIC_ASSERT(CRYSTAX_LOGLEVEL_PANIC == ANDROID_LOG_FATAL, \"Wrong log level PANIC\");\n\n#define __noinstrument __attribute__ ((no_instrument_function))\n\nextern __noreturn void _exit(int);\n\n__noinstrument\nconst char *__crystax_log_short_file(const char *f)\n{\n    int const MAXLEN = 25;\n    const char *s;\n    for (s = f; *s != '\\0'; ++s);\n    if ((s - f) < MAXLEN) return f;\n    return s - MAXLEN;\n}\n\n__noinstrument\n__noreturn static void __crystax_log_abort(int line)\n{\n    /* We can't call abort() function here since logging calls could be called from\n     * the code on very early stage of loading library.\n     * We rely on the fact that accesing low address, either debuggerd or kernel's\n     * crash dump will show the fault address.\n     */\n    *(unsigned int*)((uintptr_t)line) = 0;\n    _exit(line > 0 && line < 255 ? line : 255);\n}\n\nstatic void *__crystax_liblog_handle()\n{\n    static void *handle = NULL;\n    if (!handle)\n    {\n        handle = dlopen(\"liblog.so\", RTLD_LOCAL | RTLD_NOW);\n        if (!handle) __crystax_log_abort(__LINE__);\n    }\n    return handle;\n}\n\n__noinstrument\nint __crystax_logwrite(int prio, const char *tag, const char *text)\n{\n    typedef int (*func_t)(int, const char *, const char *);\n    static func_t func = NULL;\n    if (!func)\n    {\n        func = (func_t)dlsym(__crystax_liblog_handle(), \"__android_log_write\");\n        if (!func) __crystax_log_abort(__LINE__);\n    }\n    return func(prio, tag, text);\n}\n\n__noinstrument\nint __crystax_vlogcat(int prio, const char *tag, const char *fmt, va_list ap)\n{\n    typedef int (*func_t)(int, const char *, const char *, va_list);\n    static func_t func = NULL;\n    if (!func)\n    {\n        func = (func_t)dlsym(__crystax_liblog_handle(), \"__android_log_vprint\");\n        if (!func) __crystax_log_abort(__LINE__);\n    }\n    return func(prio, tag, fmt, ap);\n}\n\n__noinstrument\nint __crystax_logcat(int prio, const char *tag, const char *fmt, ...)\n{\n    int rc;\n    va_list ap;\n\n    va_start(ap, fmt);\n    rc = __crystax_vlogcat(prio, tag, fmt, ap);\n    va_end(ap);\n\n    return rc;\n}\n\n__noinstrument\nint __crystax_vlog(int prio, const char *tag, const char *fmt, va_list ap)\n{\n    int rc;\n\n    char *newfmtfmt = \"%s: %s\\n\";\n    rc = snprintf(NULL, 0, newfmtfmt, tag, fmt);\n    if (rc < 0)\n    {\n        fprintf(stderr, \"CRYSTAX_PANI: can't create new format string\\n\");\n        __crystax_log_abort(__LINE__);\n    }\n    if (rc > 4096)\n    {\n        fprintf(stderr, \"CRYSTAX_PANI: format string too long: \\\"%s\\\"\\n\", fmt);\n        __crystax_log_abort(__LINE__);\n    }\n\n    char newfmt[rc + 1];\n    rc = snprintf(newfmt, sizeof(newfmt), newfmtfmt, tag, fmt);\n    if (rc < 0)\n    {\n        fprintf(stderr, \"CRYSTAX_PANI: can't create new format string\\n\");\n        __crystax_log_abort(__LINE__);\n    }\n\n    FILE *fp = prio < CRYSTAX_LOGLEVEL_WARN ? stdout : stderr;\n    rc = vfprintf(fp, newfmt, ap);\n    fflush(fp);\n\n    return rc;\n}\n\n__noinstrument\nint __crystax_log(int prio, const char *tag,  const char *fmt, ...)\n{\n    int rc;\n    va_list ap;\n\n    va_start(ap, fmt);\n    rc = __crystax_vlog(prio, tag, fmt, ap);\n    va_end(ap);\n\n    return rc;\n}\n\n#if 0\n__noinstrument\nvoid __cyg_profile_func_enter(void *fn, void *caller)\n{\n    __crystax_logcat(CRYSTAX_LOGLEVEL_INFO, \"LIBCRYSTAX\", \"ENTER: fn=%p, caller=%p\", fn, caller);\n}\n\n__noinstrument\nvoid __cyg_profile_func_exit(void *fn, void *caller)\n{\n    __crystax_logcat(CRYSTAX_LOGLEVEL_INFO, \"LIBCRYSTAX\", \"LEAVE: fn=%p, caller=%p\", fn, caller);\n}\n#endif\n"
  },
  {
    "path": "sources/crystax/src/crystax/logcat.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <unistd.h>\n#include <fcntl.h>\n#include <errno.h>\n#include <string.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <pthread.h>\n#include <crystax/log.h>\n\n#undef  LOG_TAG\n#define LOG_TAG \"CRYSTAX\"\n\n#undef  PANIC\n#define PANIC(fmt, ...) \\\n    do { \\\n        __crystax_logcat(CRYSTAX_LOGLEVEL_PANIC, LOG_TAG, fmt, ##__VA_ARGS__); \\\n        abort(); \\\n    } while (0)\n\nextern int __crystax_logwrite(int, const char *, const char *);\nextern int __cxa_atexit(void (*func)(void *), void *arg, void *dso);\n\nstatic int handle_input(int fd, int oldfd, int prio, const char *tag)\n{\n    char buf[4097];\n    ssize_t nread;\n\n    for (;;) {\n        nread = read(fd, buf, sizeof(buf) - 1);\n        if (nread < 0) {\n            if (errno == EINTR)\n                continue;\n            return -1;\n        }\n        if (nread == 0)\n            return -1;\n        if (oldfd >= 0)\n            write(oldfd, buf, nread);\n        break;\n    }\n    buf[nread] = '\\0';\n\n    __crystax_logwrite(prio, tag, buf);\n\n    return 0;\n}\n\ntypedef struct stdio2logcat_t_\n{\n    int ofd;\n    int oldofd;\n    int efd;\n    int oldefd;\n} stdio2logcat_t;\n\nstatic void *stdio2logcat(void *arg)\n{\n    stdio2logcat_t *ls = (stdio2logcat_t *)arg;\n    int ofd    = ls->ofd;\n    int oldofd = ls->oldofd;\n    int efd    = ls->efd;\n    int oldefd = ls->oldefd;\n\n    fd_set fdset;\n    int maxfd = ofd < efd ? efd : ofd;\n\n    for (;;) {\n        if (ofd < 0 || efd < 0) break;\n\n        FD_ZERO(&fdset);\n        if (ofd >= 0) FD_SET(ofd, &fdset);\n        if (efd >= 0) FD_SET(efd, &fdset);\n\n        if (select(maxfd + 1, &fdset, NULL, NULL, NULL) < 0) {\n            if (errno == EINTR)\n                continue;\n            break;\n        }\n\n        if (FD_ISSET(ofd, &fdset) && handle_input(ofd, oldofd, CRYSTAX_LOGLEVEL_INFO, \"STDOUT\") < 0) {\n            close(ofd);\n            if (oldofd >= 0) {\n                dup2(oldofd, ofd);\n                close(oldofd);\n            }\n            ofd = -1;\n        }\n\n        if (FD_ISSET(efd, &fdset) && handle_input(efd, oldefd, CRYSTAX_LOGLEVEL_ERROR, \"STDERR\") < 0) {\n            close(efd);\n            if (oldefd >= 0) {\n                dup2(oldefd, efd);\n                close(oldefd);\n            }\n            efd = -1;\n        }\n    }\n\n    close(ofd);\n    close(oldofd);\n    close(efd);\n    close(oldefd);\n\n    return NULL;\n}\n\nstatic void close_stdio_fds(void *arg)\n{\n    stdio2logcat_t *ls = (stdio2logcat_t *)arg;\n    close(ls->ofd);\n    close(ls->oldofd);\n    close(ls->efd);\n    close(ls->oldefd);\n    free(arg);\n}\n\nstatic void set_flags(int fd, int newflags)\n{\n    int flags;\n\n    if ((flags = fcntl(fd, F_GETFL)) < 0)\n        PANIC(\"can't get pipe's flags: %s\", strerror(errno));\n    if (fcntl(fd, F_SETFL, flags | newflags) < 0)\n        PANIC(\"can't set pipe's flags: %s\", strerror(errno));\n}\n\nstatic int dupfd(int *fds, int fd)\n{\n    int oldfd;\n\n    if (pipe(fds) < 0)\n        PANIC(\"can't open pipe: %s\", strerror(errno));\n\n    oldfd = dup(fd);\n    close(fd);\n    if (dup2(fds[1], fd) < 0)\n        PANIC(\"can't duplicate pipe to fd %d: %s\", fd, strerror(errno));\n    if (close(fds[1]) < 0)\n        PANIC(\"can't close duplicated pipe: %s\", strerror(errno));\n\n    set_flags(fds[0], O_NONBLOCK | O_CLOEXEC);\n    set_flags(fd, O_CLOEXEC);\n\n    return oldfd;\n}\n\nvoid __crystax_redirect_stdio_to_logcat()\n{\n    int ofd[2], efd[2];\n    int oldofd, oldefd;\n    int rc;\n    pthread_t pth;\n    pthread_attr_t pattr;\n    struct sched_param sparam;\n    int policy;\n\n    oldofd = dupfd(ofd, STDOUT_FILENO);\n    oldefd = dupfd(efd, STDERR_FILENO);\n\n    stdio2logcat_t *ls = (stdio2logcat_t*)malloc(sizeof(stdio2logcat_t));\n    if (!ls) PANIC(\"can't allocate memory for pipes: %s\", strerror(errno));\n    ls->ofd    = ofd[0];\n    ls->oldofd = oldofd;\n    ls->efd    = efd[0];\n    ls->oldefd = oldefd;\n\n    __cxa_atexit(&close_stdio_fds, ls, NULL);\n\n    if ((rc = pthread_attr_init(&pattr)) != 0)\n        PANIC(\"can't init logcat writer thread attribute: %s\", strerror(rc));\n    if ((rc = pthread_attr_getschedpolicy(&pattr, &policy)) != 0)\n        PANIC(\"can't get sched policy: %s\", strerror(rc));\n    if ((sparam.sched_priority = sched_get_priority_max(policy)) < 0)\n        PANIC(\"can't get max priority: %s\", strerror(errno));\n    if ((rc = pthread_attr_setschedparam(&pattr, &sparam)) != 0)\n        PANIC(\"can't set sched param: %s\", strerror(rc));\n\n    if ((rc = pthread_create(&pth, &pattr, stdio2logcat, ls)) != 0)\n        PANIC(\"can't create logcat writer thread: %s\", strerror(rc));\n    if ((rc = pthread_detach(pth)) != 0)\n        PANIC(\"can't detach logcat writer thread: %s\", strerror(rc));\n\n    if ((rc = pthread_attr_destroy(&pattr)) != 0)\n        PANIC(\"can't destroy thread attr: %s\", strerror(rc));\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/pthread_workqueue_impl.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/pthread_workqueue_impl.h>\n\nextern int pthread_workqueue_init_np();\n\nint __crystax_pthread_workqueue_init()\n{\n    if (pthread_workqueue_init_np() < 0)\n        return -1;\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/rawargs.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/mman.h>\n#include <sys/prctl.h>\n#include <fcntl.h>\n\n#include \"private/KernelArgumentBlock.h\"\n\n#undef  PAGE_SIZE\n#define PAGE_SIZE 4096\n\nextern \"C\"\n{\n    extern __noreturn void _exit(int);\n    extern int ___close(int);\n    extern int __openat(int, const char *, int, int);\n    extern void * __mmap2(void *, size_t, int, int, int, size_t);\n}\n\nnamespace crystax\n{\nnamespace init\n{\n\n#define EARLY_ABORT_IF(cond) \\\n    do { \\\n        if (cond) { \\\n            ::crystax::init::early_abort(__LINE__); \\\n        } \\\n    } while (0)\n\n__noreturn static void early_abort(int line)\n{\n    // We can't write to stdout or stderr because we're aborting before we've checked that\n    // it's safe for us to use those file descriptors. We probably can't strace either, so\n    // we rely on the fact that if we dereference a low address, either debuggerd or the\n    // kernel's crash dump will show the fault address.\n    *reinterpret_cast<int*>(line) = 0;\n    _exit(line > 0 && line < 255 ? line : 255);\n}\n\nstatic void * memalloc(size_t length)\n{\n#if defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__))\n    return ::mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);\n#else\n    return ::__mmap2(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);\n#endif\n}\n\nstatic void const *readfile(const char *path, size_t *plength)\n{\n    int fd = ::__openat(AT_FDCWD, path, O_RDONLY, 0);\n    EARLY_ABORT_IF(fd < 0);\n\n    size_t length = 0;\n    void *addr = 0;\n    for (;;)\n    {\n        uint8_t buf[PAGE_SIZE];\n        ssize_t n = ::read(fd, buf, sizeof(buf));\n        EARLY_ABORT_IF(n < 0);\n        if (n == 0)\n            break;\n\n        void *newaddr = memalloc(length + n);\n        EARLY_ABORT_IF(newaddr == MAP_FAILED);\n        if (addr)\n        {\n            ::memcpy(newaddr, addr, length);\n            int rc = ::munmap(addr, length);\n            EARLY_ABORT_IF(rc != 0);\n        }\n        ::memcpy(reinterpret_cast<uint8_t*>(newaddr) + length, buf, n);\n\n        addr = newaddr;\n        length += n;\n    }\n    int rc = ::___close(fd);\n    EARLY_ABORT_IF(rc != 0);\n\n    if (plength)\n        *plength = length;\n\n    return addr;\n}\n\ntemplate <typename T>\nstatic void put_to_rawargs(void *&rawargs, size_t &size, off_t &offset, T value)\n{\n    if (!rawargs) size = 0;\n\n    if (offset + sizeof(value) > size)\n    {\n        void *newargs = memalloc(size + PAGE_SIZE);\n        EARLY_ABORT_IF(newargs == MAP_FAILED);\n        if (rawargs)\n        {\n            ::memcpy(newargs, rawargs, size);\n            int rc = ::munmap(rawargs, size);\n            EARLY_ABORT_IF(rc != 0);\n        }\n        rawargs = newargs;\n        size += PAGE_SIZE;\n        EARLY_ABORT_IF(offset + sizeof(value) > size);\n    }\n\n    ::memcpy(reinterpret_cast<uint8_t*>(rawargs) + offset, &value, sizeof(value));\n    offset += sizeof(value);\n}\n\nstatic void *construct_rawargs_impl()\n{\n    size_t argslen = 0;\n    char const *args = static_cast<char const *>(\n            readfile(\"/proc/self/cmdline\", &argslen));\n    EARLY_ABORT_IF(argslen == 0);\n\n    size_t envslen = 0;\n    char const *envs = static_cast<char const *>(\n            readfile(\"/proc/self/environ\", &envslen));\n    EARLY_ABORT_IF(envslen == 0);\n\n    size_t auxvlen;\n    ElfW(auxv_t) const *auxv = static_cast<ElfW(auxv_t) const *>(\n            readfile(\"/proc/self/auxv\", &auxvlen));\n    EARLY_ABORT_IF(auxvlen == 0);\n\n    void *rawargs = 0;\n    size_t rawargssize = 0;\n    off_t rawargsoffset = 0;\n\n    int argc = 0;\n    put_to_rawargs(rawargs, rawargssize, rawargsoffset, static_cast<uintptr_t>(argc));\n\n    char const *ap = args;\n    for (size_t idx = 0; idx < argslen; ++idx)\n    {\n        if (args[idx] != '\\0') continue;\n        put_to_rawargs(rawargs, rawargssize, rawargsoffset, ap);\n        ++argc;\n        ap = args + idx + 1;\n    }\n\n    *reinterpret_cast<uintptr_t*>(rawargs) = static_cast<uintptr_t>(argc);\n\n    char const *ep = envs;\n    for (size_t idx = 0; idx < envslen; ++idx)\n    {\n        if (envs[idx] != '\\0') continue;\n        put_to_rawargs(rawargs, rawargssize, rawargsoffset, ep);\n        ep = envs + idx + 1;\n    }\n    put_to_rawargs(rawargs, rawargssize, rawargsoffset, static_cast<char const *>(0));\n\n    for (ElfW(auxv_t) const *v = auxv; v->a_type != AT_NULL; ++v)\n    {\n        put_to_rawargs(rawargs, rawargssize, rawargsoffset, *v);\n    }\n    ElfW(auxv_t) end;\n    end.a_type = AT_NULL;\n    end.a_un.a_val = 0;\n    put_to_rawargs(rawargs, rawargssize, rawargsoffset, end);\n\n    return rawargs;\n}\n\nstatic void *construct_rawargs()\n{\n    static void *args = NULL;\n    if (!args)\n    {\n        int dumpable = prctl(PR_GET_DUMPABLE, 0, 0, 0, 0);\n        EARLY_ABORT_IF(dumpable < 0);\n\n        int const DUMPABLE = 1;\n\n        if (dumpable != DUMPABLE)\n            EARLY_ABORT_IF(prctl(PR_SET_DUMPABLE, DUMPABLE, 0, 0, 0) < 0);\n\n        args = construct_rawargs_impl();\n\n        if (dumpable != DUMPABLE)\n            EARLY_ABORT_IF(prctl(PR_SET_DUMPABLE, dumpable, 0, 0, 0) < 0);\n    }\n    return args;\n}\n\n} // namespace init\n} // namespace crystax\n\nextern \"C\"\nvoid *__crystax_construct_rawargs()\n{\n    return ::crystax::init::construct_rawargs();\n}\n"
  },
  {
    "path": "sources/crystax/src/crystax/system.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/system.h>\n\n#include <crystax/private.h>\n#include <crystax/atomic.h>\n\n#include <sys/system_properties.h>\n\n#include <string.h>\n\nstatic int devtype = -1;\n\nCRYSTAX_GLOBAL\nint crystax_device_type()\n{\n    static const char *generic = \"generic\";\n\n    int type = __crystax_atomic_fetch(&devtype);\n    if (type < 0)\n    {\n        char brand[PROP_VALUE_MAX + 1];\n\n        if (__system_property_get(\"ro.product.brand\", brand) <= 0)\n            type = CRYSTAX_DEVICE_TYPE_UNKNOWN;\n        else if (memcmp(brand, generic, strlen(generic)) == 0)\n            type = CRYSTAX_DEVICE_TYPE_EMULATOR;\n        else\n            type = CRYSTAX_DEVICE_TYPE_REAL;\n\n        __crystax_atomic_swap(&devtype, type);\n    }\n\n    return type;\n}\n"
  },
  {
    "path": "sources/crystax/src/domainname.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <unistd.h>\n#include <errno.h>\n#include <stdio.h>\n\nint getdomainname(char *name, int namelen)\n{\n    FILE *fp;\n    size_t n;\n\n    if (namelen <= 0) {\n        errno = EINVAL;\n        return -1;\n    }\n\n    fp = fopen(\"/proc/sys/kernel/domainname\", \"rb\");\n    if (!fp) {\n        errno = EFAULT;\n        return -1;\n    }\n\n    n = fread(name, 1, namelen, fp);\n    fclose(fp);\n\n    if (n >= (size_t)namelen) {\n        errno = EINVAL;\n        return -1;\n    }\n\n    name[n] = '\\0';\n    return 0;\n}\n\nint setdomainname(const char *name, int namelen)\n{\n    (void)name;\n    (void)namelen;\n\n    errno = EPERM;\n    return -1;\n}\n"
  },
  {
    "path": "sources/crystax/src/execve.c",
    "content": "/*\n * Copyright (c) 2011-2018 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax/log.h>\n#include <crystax.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <ctype.h>\n#include <string.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <stdio.h>\n#include <errno.h>\n#include <kernel/uapi/linux/binfmts.h>\n\nextern int __execve(const char *filename, char * const argv[], char * const envp[]);\n\nstatic char *extract_shebang(const char *filename)\n{\n    int fd = -1;\n    char *shebang = NULL;\n    char buf[BINPRM_BUF_SIZE + 1];\n    ssize_t n;\n    char *s;\n    char *start;\n\n    if ((fd = open(filename, O_RDONLY)) < 0)\n        return NULL;\n\n    if (read(fd, buf, 2) != 2)\n        goto extract_shebang_exit;\n\n    if (buf[0] != '#' && buf[1] != '!')\n        goto extract_shebang_exit;\n\n    if ((n = read(fd, buf, sizeof(buf) - 1)) < 0)\n        goto extract_shebang_exit;\n    buf[n] = '\\0';\n\n    s = buf;\n    for (; *s != '\\0' && isspace(*s); ++s);\n    if (*s == '\\0')\n        goto extract_shebang_exit;\n\n    start = s;\n    for (; *s != '\\0' && *s != '\\n'; ++s);\n    *s = '\\0';\n\n    n = s - start;\n\n    shebang = (char *)malloc(n + 1);\n    if (shebang == NULL)\n        goto extract_shebang_exit;\n\n    memcpy(shebang, start, n + 1);\n\nextract_shebang_exit:\n\n    close(fd);\n\n    return shebang;\n}\n\nstatic int exec_with_args(char *exe, char *args, char * const argv[], char * const envp[])\n{\n    size_t newargc;\n    char **newargv;\n    char * const *p;\n    char *s;\n    size_t n, i;\n\n    newargc = 1;\n    p = argv;\n    for (; *p; ++p, ++newargc);\n\n    s = args;\n    for (;;) {\n        for (; *s != '\\0' && isspace(*s); ++s);\n        if (*s == '\\0')\n            break;\n        ++newargc;\n        for (; *s != '\\0' && !isspace(*s); ++s);\n        if (*s == '\\0')\n            break;\n        ++s;\n    }\n\n    newargv = (char **) malloc((newargc + 1) * sizeof(char *));\n    if (newargv == NULL) {\n        errno = ENOMEM;\n        return -1;\n    }\n\n    memset(newargv, 0, (newargc + 1) * sizeof(char *));\n\n    n = 0;\n    newargv[n++] = exe;\n\n    s = args;\n    for (;;) {\n        for (; *s != '\\0' && isspace(*s); ++s);\n        if (*s == '\\0')\n            break;\n        newargv[n++] = s;\n        for (; *s != '\\0' && !isspace(*s); ++s);\n        if (*s == '\\0')\n            break;\n        *s++ = '\\0';\n    }\n\n    for (i = n; i < newargc; ++i)\n        newargv[i] = argv[i - n];\n\n    return __execve(exe, newargv, envp);\n}\n\nstatic void exec_env(char *args, char * const argv[], char * const envp[])\n{\n    char *s;\n    char *exe;\n    size_t exelen, len;\n    const char *path, *p, *pend;\n    char *newexe;\n    int serrno;\n\n    path = getenv(\"PATH\");\n    if (path == NULL || strlen(path) == 0)\n        return;\n\n    for (s = args; *s != '\\0' && isspace(*s); ++s);\n    if (*s == '\\0')\n        return;\n    exe = s;\n\n    for (; *s != '\\0' && !isspace(*s); ++s);\n    if (*s != '\\0') {\n        *s++ = '\\0';\n        for (; *s != '\\0' && isspace(*s); ++s);\n        args = s;\n    }\n\n    exelen = strlen(exe);\n    if (exelen == 0 || exe[0] == '/')\n        return;\n\n    p = path;\n    for (;; p = pend + 1) {\n        pend = p;\n        for (; *pend != '\\0' && *pend != ':'; ++pend);\n        if (*pend == '\\0' || pend == p)\n            break;\n\n        len = pend - p + 1 + exelen + 1;\n        newexe = (char *)malloc(len);\n        if (newexe == NULL)\n            return;\n\n        memcpy(newexe, p, pend - p);\n        newexe[pend - p] = '\\0';\n        strcat(newexe, \"/\");\n        strcat(newexe, exe);\n\n        if (access(newexe, R_OK|X_OK) == 0) {\n            exec_with_args(newexe, args, argv, envp);\n\n            serrno = errno;\n            free(newexe);\n            errno = serrno;\n\n            return;\n        }\n\n        free(newexe);\n    }\n}\n\nstatic int exec_shebang(char *shebang, const char *filename, char * const argv[],\n        char * const envp[])\n{\n    char *s;\n    char *exe = NULL, *args = NULL;\n    char *newexe = NULL;\n    ssize_t n;\n    struct stat st;\n    int rc, serrno;\n\n    const char *topdir = NULL;\n\n    for (s = shebang; *s != '\\0' && isspace(*s); ++s);\n    if (*s == '\\0')\n        return __execve(filename, argv, envp);\n\n    exe = s;\n\n    for (; *s != '\\0' && !isspace(*s); ++s);\n\n    args = s;\n    if (*s != '\\0') {\n        *s++ = '\\0';\n        for (; *s != '\\0' && isspace(*s); ++s);\n        if (*s != '\\0')\n            args = s;\n    }\n\n    if (*exe != '/')\n        return __execve(filename, argv, envp);\n\n    topdir = crystax_posix_base();\n    if (topdir == NULL || strlen(topdir) == 0) {\n        if (strcmp(exe, \"/usr/bin/env\") == 0)\n            exec_env(args, argv, envp);\n        return __execve(filename, argv, envp);\n    }\n\n    n = strlen(topdir) + strlen(exe) + 1;\n    newexe = (char *)malloc(n);\n    if (newexe == NULL) {\n        errno = ENOMEM;\n        return -1;\n    }\n\n    if (snprintf(newexe, n, \"%s%s\", topdir, exe) == n) {\n        free(newexe);\n        errno = EFAULT;\n        return -1;\n    }\n\n    if (stat(newexe, &st) < 0) {\n        free(newexe);\n\n        if (errno == ENOENT && strcmp(exe, \"/usr/bin/env\") == 0)\n            exec_env(args, argv, envp);\n\n        return __execve(filename, argv, envp);\n    }\n\n    rc = exec_with_args(newexe, args, argv, envp);\n\n    serrno = errno;\n    free(newexe);\n    errno = serrno;\n\n    return rc;\n}\n\nint execve(const char *filename, char * const argv[], char * const envp[])\n{\n    char *shebang;\n    int rc, serrno;\n\n    shebang = extract_shebang(filename);\n    if (shebang == NULL)\n        return __execve(filename, argv, envp);\n\n    rc = exec_shebang(shebang, filename, argv, envp);\n    serrno = errno;\n    free(shebang);\n    errno = serrno;\n    return rc;\n}\n"
  },
  {
    "path": "sources/crystax/src/fcntl/fcntl.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fcntl.h>\n#include <stdarg.h>\n#include <unistd.h>\n#include <errno.h>\n#include <stdlib.h>\n#include <crystax/log.h>\n\nextern int __fcntl64(int fd, int command, ...);\n\nstatic int dupfd_cloexec(int fd, int fd2)\n{\n    int rc = __fcntl64(fd, F_DUPFD, fd2);\n    if (rc < 0) return -1;\n\n    if (__fcntl64(rc, F_SETFD, FD_CLOEXEC) < 0)\n    {\n        int serrno = errno;\n        close(rc);\n        errno = serrno;\n        return -1;\n    }\n\n    return rc;\n}\n\nstatic int dup2fd_cloexec(int fd, int fd2)\n{\n    int rc = dup2(fd, fd2);\n    if (rc < 0) return -1;\n\n    if (__fcntl64(rc, F_SETFD, FD_CLOEXEC) < 0)\n    {\n        int serrno = errno;\n        close(rc);\n        errno = serrno;\n        return -1;\n    }\n\n    return rc;\n}\n\nstatic int crystax_fcntl(int fd, int command, va_list args)\n{\n    switch (command)\n    {\n        case F_DUPFD_CLOEXEC:\n            return dupfd_cloexec(fd, va_arg(args, int));\n        case F_DUP2FD:\n            return dup2(fd, va_arg(args, int));\n        case F_DUP2FD_CLOEXEC:\n            return dup2fd_cloexec(fd, va_arg(args, int));\n        default:\n            DBG(\"Unknown crystax_fcntl command: %d\", command);\n            errno = EINVAL;\n            return -1;\n    }\n}\n\nint fcntl(int fd, int command, ...)\n{\n    va_list args;\n    int rc;\n    int n;\n    struct flock *flck;\n\n    switch (command)\n    {\n        case F_DUPFD_CLOEXEC:\n        case F_DUP2FD:\n        case F_DUP2FD_CLOEXEC:\n            va_start(args, command);\n            rc = crystax_fcntl(fd, command, args);\n            va_end(args);\n            return rc;\n        case F_GETFD:\n        case F_GETFL:\n        case F_GETLEASE:\n        case F_GETOWN:\n        case F_GETPIPE_SZ:\n        case F_GETSIG:\n            return __fcntl64(fd, command);\n        case F_NOTIFY:\n        case F_DUPFD:\n        case F_SETFD:\n        case F_SETFL:\n        case F_SETLEASE:\n        case F_SETOWN:\n        case F_SETPIPE_SZ:\n        case F_SETSIG:\n            va_start(args, command);\n            n = va_arg(args, int);\n            rc = __fcntl64(fd, command, n);\n            va_end(args);\n            return rc;\n        case F_GETLK:\n        case F_SETLK:\n        case F_SETLKW:\n#if !__LP64__\n        case F_GETLK64:\n        case F_SETLK64:\n        case F_SETLKW64:\n#endif\n            va_start(args, command);\n            flck = va_arg(args, struct flock *);\n            rc = __fcntl64(fd, command, flck);\n            va_end(args);\n            return rc;\n        default:\n            DBG(\"Unknown fcntl command: %d\", command);\n            errno = EINVAL;\n            return -1;\n    }\n}\n"
  },
  {
    "path": "sources/crystax/src/fdprintf.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdio.h>\n#include <stdarg.h>\n\nint fdprintf(int fd, const char* fmt, ...)\n{\n    int rc;\n    va_list ap;\n    va_start(ap, fmt);\n    rc = vdprintf(fd, fmt, ap);\n    va_end(ap);\n    return rc;\n}\n"
  },
  {
    "path": "sources/crystax/src/ftime.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <timeb.h>\n#include <sys/time.h>\n\nint ftime(struct timeb* tb) {\n    struct timeval  tv;\n    struct timezone tz;\n\n    if (gettimeofday(&tv, &tz) < 0)\n        return -1;\n\n    tb->time    = tv.tv_sec;\n    tb->millitm = (tv.tv_usec + 500) / 1000;\n\n    if (tb->millitm == 1000) {\n        ++tb->time;\n        tb->millitm = 0;\n    }\n\n    tb->timezone = tz.tz_minuteswest;\n    tb->dstflag  = tz.tz_dsttime;\n\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/futex.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#define __futex_wake __real_futex_wake\n#define __futex_wait __real_futex_wait\n#include \"private/bionic_futex.h\"\n#undef __futex_wake\n#undef __futex_wait\n\nint __futex_wake(volatile void* ftx, int count)\n{\n    return __real_futex_wake(ftx, count);\n}\n\nint __futex_wait(volatile void* ftx, int value, const struct timespec* timeout)\n{\n    return __real_futex_wait(ftx, value, timeout);\n}\n"
  },
  {
    "path": "sources/crystax/src/getdents.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <dirent.h>\n\nint __getdents64(unsigned int, struct dirent*, unsigned int);\n\nint getdents(unsigned int fd, struct dirent* dirp, unsigned int count)\n{\n    return __getdents64(fd, dirp, count);\n}\n"
  },
  {
    "path": "sources/crystax/src/getdtablesize.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#include <unistd.h>\n#include <sys/resource.h>\n\nint getdtablesize()\n{\n    struct rlimit rl;\n    if (getrlimit(RLIMIT_NOFILE, &rl) < 0)\n        return sysconf(_SC_OPEN_MAX);\n    return rl.rlim_cur;\n}\n"
  },
  {
    "path": "sources/crystax/src/getnetgrent.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <netdb.h>\n#include <crystax/private.h>\n\nint setnetgrent(const char *netgroup)\n{\n    (void)netgroup;\n    PANIC(\"setnetgrent() not implemented!!!\");\n    return 0;\n}\n\nvoid endnetgrent()\n{\n    PANIC(\"endnetgrent() not implemented!!!\");\n}\n\nint getnetgrent(char **host, char **user, char **domain)\n{\n    (void)host;\n    (void)user;\n    (void)domain;\n    PANIC(\"getnetgrent() not implemented!!!\");\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/getrlimit64.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if !defined(__LP64__) && !(defined(__x86_64__) && defined(__ILP32__))\n\n#include <sys/resource.h>\n\nint getrlimit64(int resource, struct rlimit64* limits64)\n{\n    return prlimit64(0, resource, NULL, limits64);\n}\n\nint setrlimit64(int resource, const struct rlimit64* limits64)\n{\n    return prlimit64(0, resource, limits64, NULL);\n}\n\n#endif /* !defined(__LP64__) */\n"
  },
  {
    "path": "sources/crystax/src/grent.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <grp.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <sys/types.h>\n#include <sys/sysconf.h>\n\nstatic struct group me;\nstatic struct group *entries[] = {NULL, NULL};\nstatic size_t current = 0;\n\nstatic void init()\n{\n    struct group *p;\n    char *buf;\n    int buflen;\n\n    if (entries[0] != NULL)\n        return;\n\n    buflen = sysconf(_SC_GETGR_R_SIZE_MAX);\n    if (buflen <= 0) abort();\n    buf = malloc(buflen);\n    if (!buf) abort();\n\n    getgrgid_r(getgid(), &me, buf, buflen, &p);\n    if (!p) abort();\n\n    entries[0] = &me;\n}\n\nstruct group *getgrent()\n{\n    struct group *p;\n\n    init();\n\n    p = entries[current];\n    if (current < sizeof(entries)/sizeof(entries[0]) - 1)\n        ++current;\n\n    return p;\n}\n\nvoid endgrent()\n{\n    init();\n}\n\nvoid setgrent()\n{\n    init();\n    current = 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/arm/arith.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_ARM_ARITH_H_5f4816b2a6ad94ff2caa30cd513e746c763aae2d2509d7265b06870039695274\n#define __CRYSTAX_SRC_INCLUDE_ARM_ARITH_H_5f4816b2a6ad94ff2caa30cd513e746c763aae2d2509d7265b06870039695274\n\n#define IEEE_8087\n#define Arith_Kind_ASL 1\n#define Double_Align\n\n#endif /* __CRYSTAX_SRC_INCLUDE_ARM_ARITH_H_5f4816b2a6ad94ff2caa30cd513e746c763aae2d2509d7265b06870039695274 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/arm/gd_qnan.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_ARM_GD_QNAN_H_5348e2b1b488b3641f950a4606b3ad79829d60f0f40e5ca76b358819fadbbd65\n#define __CRYSTAX_SRC_INCLUDE_ARM_GD_QNAN_H_5348e2b1b488b3641f950a4606b3ad79829d60f0f40e5ca76b358819fadbbd65\n\n#define f_QNAN 0x7fc00000\n#define d_QNAN0 0x0\n#define d_QNAN1 0x7ff80000\n#define ld_QNAN0 0x0\n#define ld_QNAN1 0x7ff80000\n#define ld_QNAN2 0x0\n#define ld_QNAN3 0x0\n#define ldus_QNAN0 0x0\n#define ldus_QNAN1 0x0\n#define ldus_QNAN2 0x0\n#define ldus_QNAN3 0x7ff8\n#define ldus_QNAN4 0x0\n\n#endif /* __CRYSTAX_SRC_INCLUDE_ARM_GD_QNAN_H_5348e2b1b488b3641f950a4606b3ad79829d60f0f40e5ca76b358819fadbbd65 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/arm64/arith.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_ARM64_ARITH_H_d024fd295eb862cefa8f5723dfa8a0a1178ff868d44485918ab866d2cab2b6d3\n#define __CRYSTAX_SRC_INCLUDE_ARM64_ARITH_H_d024fd295eb862cefa8f5723dfa8a0a1178ff868d44485918ab866d2cab2b6d3\n\n#define IEEE_8087\n#define Arith_Kind_ASL 1\n#define Long int\n#define Intcast (int)(long)\n#define Double_Align\n#define X64_bit_pointers\n\n#endif /* __CRYSTAX_SRC_INCLUDE_ARM64_ARITH_H_d024fd295eb862cefa8f5723dfa8a0a1178ff868d44485918ab866d2cab2b6d3 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/arm64/gd_qnan.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_ARM64_GD_QNAN_H_5020604a28210551e71b0fcfe3e2ae13e5711ba7b72c3cc6c91597f228b84f09\n#define __CRYSTAX_SRC_INCLUDE_ARM64_GD_QNAN_H_5020604a28210551e71b0fcfe3e2ae13e5711ba7b72c3cc6c91597f228b84f09\n\n#define f_QNAN 0x7fc00000\n#define d_QNAN0 0x0\n#define d_QNAN1 0x7ff80000\n#define ld_QNAN0 0xffffffff\n#define ld_QNAN1 0xffffffff\n#define ld_QNAN2 0xffffffff\n#define ld_QNAN3 0x7fffffff\n#define ldus_QNAN0 0xffff\n#define ldus_QNAN1 0xffff\n#define ldus_QNAN2 0xffff\n#define ldus_QNAN3 0xffff\n#define ldus_QNAN4 0xffff\n\n#endif /* __CRYSTAX_SRC_INCLUDE_ARM64_GD_QNAN_H_5020604a28210551e71b0fcfe3e2ae13e5711ba7b72c3cc6c91597f228b84f09 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/atomic.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_CRYSTAX_ATOMIC_H_36D0C09D3B094FB3A2C0D3F5C923C88D\n#define __CRYSTAX_SRC_INCLUDE_CRYSTAX_ATOMIC_H_36D0C09D3B094FB3A2C0D3F5C923C88D\n\n#define __crystax_atomic_fetch(p) __sync_add_and_fetch(p, 0)\n\n#define __crystax_atomic_swap(p, v) \\\n    ({ \\\n        __typeof__(v) prev; \\\n        do { \\\n            prev = *p; \\\n        } while (__sync_val_compare_and_swap(p, prev, v) != prev); \\\n    })\n\n#endif /* __CRYSTAX_SRC_INCLUDE_CRYSTAX_ATOMIC_H_36D0C09D3B094FB3A2C0D3F5C923C88D */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/fenvimpl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_FENVIMPL_H_EAE528592A9A47AF83A0AAA3DFB4E855\n#define __CRYSTAX_FENVIMPL_H_EAE528592A9A47AF83A0AAA3DFB4E855\n\n#include <sys/cdefs.h>\n\n__BEGIN_DECLS\n\nint __crystax_fenv_init();\n\n__END_DECLS\n\n#endif /* __CRYSTAX_FENVIMPL_H_EAE528592A9A47AF83A0AAA3DFB4E855 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/internal.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_INTERNAL_H_800619B1E3CF4547AD9EEABF49101679\n#define _CRYSTAX_INTERNAL_H_800619B1E3CF4547AD9EEABF49101679\n\n#include <stdint.h>\n#include <xlocale.h>\n#include <machine/_align.h>\n\n/* Size of long double should be either 64- or 128-bit */\n#if __LDBL_MANT_DIG__ != 53 && __LDBL_MANT_DIG__ != 113\n#error \"Wrong size of long double\"\n#endif\n\n#define ALIGNBYTES _ALIGNBYTES\n#define ALIGN(p) _ALIGN(p)\n\n#define FLOCKFILE(fp)   if (__isthreaded) flockfile(fp)\n#define FUNLOCKFILE(fp) if (__isthreaded) funlockfile(fp)\n\nextern int __isthreaded;\n\nextern void __crystax_stdio_thread_lock();\nextern void __crystax_stdio_thread_unlock();\n#define STDIO_THREAD_LOCK()   __crystax_stdio_thread_lock()\n#define STDIO_THREAD_UNLOCK() __crystax_stdio_thread_unlock()\n\n/*\n * Function to clean up streams, called from abort() and exit().\n */\nextern void (*__cleanup)(void) __attribute__((__visibility__(\"hidden\")));\n\n#ifndef NBBY\n#define NBBY 8\n#endif\n\n#define _pthread_getspecific(x)    pthread_getspecific(x)\n#define _pthread_key_create(x, y)  pthread_key_create(x, y)\n#define _pthread_mutex_destroy(x)  pthread_mutex_destroy(x)\n#define _pthread_mutex_lock(x)     pthread_mutex_lock(x)\n#define _pthread_mutex_trylock(x)  pthread_mutex_trylock(x)\n#define _pthread_mutex_unlock(x)   pthread_mutex_unlock(x)\n#define _pthread_once(x, y)        pthread_once(x, y)\n#define _pthread_rwlock_rdlock(x)  pthread_rwlock_rdlock(x)\n#define _pthread_rwlock_unlock(x)  pthread_rwlock_unlock(x)\n#define _pthread_rwlock_wrlock(x)  pthread_rwlock_wrlock(x)\n#define _pthread_self()            pthread_self()\n#define _pthread_setspecific(x, y) pthread_setspecific(x, y)\n#define _pthread_main_np()         pthread_main_np()\n\n#define _dup2(fd, fd2) dup2(fd, fd2)\n#define _once(o, f) pthread_once(o, f)\n\n#define _close close\n#define _dirfd dirfd\n#define _fcntl fcntl\n#define _fstat fstat\n#define _getprogname getprogname\n#define _open open\n#define _openat openat\n#define _read read\n#define _sigaction sigaction\n#define _sigprocmask sigprocmask\n#define _wait4 wait4\n#define _write write\n#define _writev writev\n\n#endif /* _CRYSTAX_INTERNAL_H_800619B1E3CF4547AD9EEABF49101679 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/localeimpl.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_LOCALEIMPL_H_6A027653796D422F8D10248B5E30AD39\n#define __CRYSTAX_LOCALEIMPL_H_6A027653796D422F8D10248B5E30AD39\n\n#include <stdlib.h>\n#include <string.h>\n#include <locale.h>\n#include <stdint.h>\n\n__BEGIN_DECLS\n\ntypedef struct {\n    uint8_t *data;\n    size_t size;\n    int compressed;\n} __crystax_locale_blob_t;\n\ntypedef struct {\n    const char *encoding;\n    struct {\n        const char *alias;\n        __crystax_locale_blob_t blob;\n    } data[_LC_LAST];\n} __crystax_locale_data_t;\n\nint __crystax_locale_init();\n\nsize_t __crystax_locale_table_size();\n__crystax_locale_data_t * __crystax_locale_data(size_t idx);\n\nint __crystax_locale_load(const char *encoding, int type, void **buf, size_t *bufsize);\nint __crystax_locale_loads(const char *encoding, const char *type, void **buf, size_t *bufsize);\n\n__END_DECLS\n\n#endif /* __CRYSTAX_LOCALEIMPL_H_6A027653796D422F8D10248B5E30AD39 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/lock.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_MUTEX_HPP_6570209faa9a4c929ddcb7f1719d36e4\n#define _CRYSTAX_MUTEX_HPP_6570209faa9a4c929ddcb7f1719d36e4\n\n#include <crystax.h>\n#include <crystax/common.hpp>\n#include <crystax/private.h>\n\n#include <pthread.h>\n\nnamespace crystax\n{\n\nclass scope_lock_t : public non_copyable_t\n{\npublic:\n    scope_lock_t(pthread_mutex_t &m);\n    scope_lock_t(pthread_mutex_t *m);\n    ~scope_lock_t();\n\nprivate:\n    pthread_mutex_t &mtx;\n};\n\n} // namespace crystax\n\n#endif /* _CRYSTAX_MUTEX_HPP_6570209faa9a4c929ddcb7f1719d36e4 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/mips/arith.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_MIPS_ARITH_H_560f7184fa053d69b43e2e2a40859994e9b92e286c7b7dc186785e2478d8c479\n#define __CRYSTAX_SRC_INCLUDE_MIPS_ARITH_H_560f7184fa053d69b43e2e2a40859994e9b92e286c7b7dc186785e2478d8c479\n\n#define IEEE_8087\n#define Arith_Kind_ASL 1\n#define Double_Align\n\n#endif /* __CRYSTAX_SRC_INCLUDE_MIPS_ARITH_H_560f7184fa053d69b43e2e2a40859994e9b92e286c7b7dc186785e2478d8c479 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/mips/gd_qnan.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_MIPS_GD_QNAN_H_65834894cfba1d64c24c599109f8839cdf68f150383e962d943686b5ffcda361\n#define __CRYSTAX_SRC_INCLUDE_MIPS_GD_QNAN_H_65834894cfba1d64c24c599109f8839cdf68f150383e962d943686b5ffcda361\n\n#define f_QNAN 0x7fbfffff\n#define d_QNAN0 0xffffffff\n#define d_QNAN1 0x7ff7ffff\n#define ld_QNAN0 0xffffffff\n#define ld_QNAN1 0x7ff7ffff\n#define ld_QNAN2 0x0\n#define ld_QNAN3 0x0\n#define ldus_QNAN0 0xffff\n#define ldus_QNAN1 0xffff\n#define ldus_QNAN2 0xffff\n#define ldus_QNAN3 0x7ff7\n#define ldus_QNAN4 0x0\n\n#endif /* __CRYSTAX_SRC_INCLUDE_MIPS_GD_QNAN_H_65834894cfba1d64c24c599109f8839cdf68f150383e962d943686b5ffcda361 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/mips64/arith.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64_ARITH_H_0882BCB1BD424539B01E467FCD5888AC\n#define __CRYSTAX_INCLUDE_MIPS64_ARITH_H_0882BCB1BD424539B01E467FCD5888AC\n\n#include <crystax/id.h>\n\n#define IEEE_8087\n#define Long int\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64_ARITH_H_0882BCB1BD424539B01E467FCD5888AC */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/mips64/gd_qnan.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_MIPS64_GD_QNAN_H_1DA89F97A9934AE5BC35666909AF03D1\n#define __CRYSTAX_INCLUDE_MIPS64_GD_QNAN_H_1DA89F97A9934AE5BC35666909AF03D1\n\n#include <crystax/id.h>\n\n/*\n * WARNING!!!\n * These values are stolen from another sources and most likely will not work\n * on real MIPS64 device.\n * TODO: build contrib/gdtoa/qnan.c, run it on MIPS64 device and fill proper values here\n*/\n\n#define f_QNAN  0x7fbfffff\n#define d_QNAN0 0x7ff7ffff\n#define d_QNAN1 0xffffffff\n\n#define ld_QNAN0 0x7fff8000\n#define ld_QNAN1 0x00000000\n#define ld_QNAN2 0x00000000\n#define ld_QNAN3 0x00000000\n\n#define ldus_QNAN0 0xffff\n#define ldus_QNAN1 0xffff\n#define ldus_QNAN2 0xffff\n#define ldus_QNAN3 0xffff\n#define ldus_QNAN4 0xffff\n\n\n#endif /* __CRYSTAX_INCLUDE_MIPS64_GD_QNAN_H_1DA89F97A9934AE5BC35666909AF03D1 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/private.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_PRIVATE_H_99544c48e9174f659a97671e7f64c763\n#define _CRYSTAX_PRIVATE_H_99544c48e9174f659a97671e7f64c763\n\n#include <sys/cdefs.h>\n#include <crystax.h>\n#include <crystax/log.h>\n\n#ifdef __cplusplus\n#   define CRYSTAX_GLOBAL extern \"C\" __attribute__ ((visibility (\"default\")))\n#   define CRYSTAX_HIDDEN extern \"C\" __attribute__ ((visibility (\"hidden\")))\n#else\n#   define CRYSTAX_GLOBAL __attribute__ ((visibility (\"default\")))\n#   define CRYSTAX_HIDDEN __attribute__ ((visibility (\"hidden\")))\n#endif\n#define CRYSTAX_LOCAL  __attribute__ ((visibility (\"hidden\")))\n\n#endif /* _CRYSTAX_PRIVATE_H_99544c48e9174f659a97671e7f64c763 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/pthread_workqueue_impl.h",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_INCLUDE_PTHREAD_WORKQUEUE_IMPL_H_4882A12F42C64B02939E5BD9A1E45865\n#define __CRYSTAX_INCLUDE_PTHREAD_WORKQUEUE_IMPL_H_4882A12F42C64B02939E5BD9A1E45865\n\n#include <sys/cdefs.h>\n\n__BEGIN_DECLS\n\nint __crystax_pthread_workqueue_init();\n\n__END_DECLS\n\n#endif /* __CRYSTAX_INCLUDE_PTHREAD_WORKQUEUE_IMPL_H_4882A12F42C64B02939E5BD9A1E45865 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/x86/arith.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_X86_ARITH_H_f0ae0502c175aa7ec3ab296405b44cb55d55120827433d9a7f7fdcec8d72976a\n#define __CRYSTAX_SRC_INCLUDE_X86_ARITH_H_f0ae0502c175aa7ec3ab296405b44cb55d55120827433d9a7f7fdcec8d72976a\n\n#define IEEE_8087\n#define Arith_Kind_ASL 1\n\n#endif /* __CRYSTAX_SRC_INCLUDE_X86_ARITH_H_f0ae0502c175aa7ec3ab296405b44cb55d55120827433d9a7f7fdcec8d72976a */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/x86/gd_qnan.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_X86_GD_QNAN_H_bbc20bac449d4ea2f7618de03f341894c0d736f6e8d175dcec023e689ea5a670\n#define __CRYSTAX_SRC_INCLUDE_X86_GD_QNAN_H_bbc20bac449d4ea2f7618de03f341894c0d736f6e8d175dcec023e689ea5a670\n\n#define f_QNAN 0x7fc00000\n#define d_QNAN0 0x0\n#define d_QNAN1 0xfff80000\n#define ld_QNAN0 0x0\n#define ld_QNAN1 0xfff80000\n#define ld_QNAN2 0x0\n#define ld_QNAN3 0x0\n#define ldus_QNAN0 0x0\n#define ldus_QNAN1 0x0\n#define ldus_QNAN2 0x0\n#define ldus_QNAN3 0xfff8\n#define ldus_QNAN4 0x0\n\n#endif /* __CRYSTAX_SRC_INCLUDE_X86_GD_QNAN_H_bbc20bac449d4ea2f7618de03f341894c0d736f6e8d175dcec023e689ea5a670 */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/x86_64/arith.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_X86_64_ARITH_H_f97885051e5340a480fed036c449df086a7f88d292a9d52051ff5f1eb27206aa\n#define __CRYSTAX_SRC_INCLUDE_X86_64_ARITH_H_f97885051e5340a480fed036c449df086a7f88d292a9d52051ff5f1eb27206aa\n\n#define IEEE_8087\n#define Arith_Kind_ASL 1\n#define Long int\n#define Intcast (int)(long)\n#define Double_Align\n#define X64_bit_pointers\n\n#endif /* __CRYSTAX_SRC_INCLUDE_X86_64_ARITH_H_f97885051e5340a480fed036c449df086a7f88d292a9d52051ff5f1eb27206aa */\n"
  },
  {
    "path": "sources/crystax/src/include/crystax/x86_64/gd_qnan.h",
    "content": "/* WARNING!!! THIS FILE IS AUTO-GENERATED!!! DO NOT MODIFY IT MANUALLY!!! */\n\n/*\n * This library contains code from libc library of FreeBSD project which by-turn contains\n * code from other projects. To see specific authors and/or licenses, look into appropriate\n * source file. Here is license for those parts which are not derived from any other projects\n * but written by CrystaX.\n *\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef __CRYSTAX_SRC_INCLUDE_X86_64_GD_QNAN_H_0d832f0b22e4a543ebd5ced1cd82a04e8259957207fad3c36da4f5ead3c1ceef\n#define __CRYSTAX_SRC_INCLUDE_X86_64_GD_QNAN_H_0d832f0b22e4a543ebd5ced1cd82a04e8259957207fad3c36da4f5ead3c1ceef\n\n#define f_QNAN 0x7fc00000\n#define d_QNAN0 0x0\n#define d_QNAN1 0xfff80000\n#define ld_QNAN0 0x0\n#define ld_QNAN1 0x0\n#define ld_QNAN2 0x0\n#define ld_QNAN3 0xffff8000\n#define ldus_QNAN0 0x0\n#define ldus_QNAN1 0x0\n#define ldus_QNAN2 0x0\n#define ldus_QNAN3 0x0\n#define ldus_QNAN4 0x0\n\n#endif /* __CRYSTAX_SRC_INCLUDE_X86_64_GD_QNAN_H_0d832f0b22e4a543ebd5ced1cd82a04e8259957207fad3c36da4f5ead3c1ceef */\n"
  },
  {
    "path": "sources/crystax/src/include/jemalloc_defs.h",
    "content": "/* include/jemalloc/jemalloc_defs.h.  Generated from jemalloc_defs.h.in by configure.  */\n/*\n * If JEMALLOC_PREFIX is defined via --with-jemalloc-prefix, it will cause all\n * public APIs to be prefixed.  This makes it possible, with some care, to use\n * multiple allocators simultaneously.\n */\n/* #undef JEMALLOC_PREFIX */\n/* #undef JEMALLOC_CPREFIX */\n\n/*\n * Name mangling for public symbols is controlled by --with-mangling and\n * --with-jemalloc-prefix.  With default settings the je_ prefix is stripped by\n * these macro definitions.\n */\n#define je_malloc_conf        crystax_je_malloc_conf\n#define je_malloc_message     crystax_je_malloc_message\n#define je_malloc             crystax_je_malloc\n#define je_calloc             crystax_je_calloc\n#define je_posix_memalign     crystax_je_posix_memalign\n#define je_aligned_alloc      crystax_je_aligned_alloc\n#define je_realloc            crystax_je_realloc\n#define je_free               crystax_je_free\n#define je_malloc_usable_size crystax_je_malloc_usable_size\n#define je_malloc_stats_print crystax_je_malloc_stats_print\n#define je_mallctl            crystax_je_mallctl\n#define je_mallctlnametomib   crystax_je_mallctlnametomib\n#define je_mallctlbymib       crystax_je_mallctlbymib\n#define je_memalign           crystax_je_memalign\n#define je_valloc             crystax_je_valloc\n#define je_allocm             crystax_je_allocm\n#define je_rallocm            crystax_je_rallocm\n#define je_sallocm            crystax_je_sallocm\n#define je_dallocm            crystax_je_dallocm\n#define je_nallocm            crystax_je_nallocm\n\n#define jemalloc_constructor  __crystax_jemalloc_constructor\n\n/*\n * Hyper-threaded CPUs may need a special instruction inside spin loops in\n * order to yield to another virtual CPU.\n */\n/* #undef CPU_SPINWAIT */\n\n/* Defined if the equivalent of FreeBSD's atomic(9) functions are available. */\n/* #undef JEMALLOC_ATOMIC9 */\n\n/*\n * Defined if OSAtomic*() functions are available, as provided by Darwin, and\n * documented in the atomic(3) manual page.\n */\n/* #undef JEMALLOC_OSATOMIC */\n\n/*\n * Defined if __sync_add_and_fetch(uint32_t *, uint32_t) and\n * __sync_sub_and_fetch(uint32_t *, uint32_t) are available, despite\n * __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 not being defined (which means the\n * functions are defined in libgcc instead of being inlines)\n */\n#define JE_FORCE_SYNC_COMPARE_AND_SWAP_4 1\n\n/*\n * Defined if __sync_add_and_fetch(uint64_t *, uint64_t) and\n * __sync_sub_and_fetch(uint64_t *, uint64_t) are available, despite\n * __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 not being defined (which means the\n * functions are defined in libgcc instead of being inlines)\n */\n#define JE_FORCE_SYNC_COMPARE_AND_SWAP_8 1\n\n/*\n * Defined if OSSpin*() functions are available, as provided by Darwin, and\n * documented in the spinlock(3) manual page.\n */\n/* #undef JEMALLOC_OSSPIN */\n\n/*\n * Defined if _malloc_thread_cleanup() exists.  At least in the case of\n * FreeBSD, pthread_key_create() allocates, which if used during malloc\n * bootstrapping will cause recursion into the pthreads library.  Therefore, if\n * _malloc_thread_cleanup() exists, use it as the basis for thread cleanup in\n * malloc_tsd.\n */\n/* #undef JEMALLOC_MALLOC_THREAD_CLEANUP */\n\n/*\n * Defined if threaded initialization is known to be safe on this platform.\n * Among other things, it must be possible to initialize a mutex without\n * triggering allocation in order for threaded allocation to be safe.\n */\n/* #undef JEMALLOC_THREADED_INIT */\n\n/*\n * Defined if the pthreads implementation defines\n * _pthread_mutex_init_calloc_cb(), in which case the function is used in order\n * to avoid recursive allocation during mutex initialization.\n */\n/* #undef JEMALLOC_MUTEX_INIT_CB */\n\n/* Defined if __attribute__((...)) syntax is supported. */\n#define JEMALLOC_HAVE_ATTR 1\n#define JEMALLOC_ATTR(s) __attribute__((s))\n/* #define JEMALLOC_EXPORT JEMALLOC_ATTR(visibility(\"default\")) */\n#define JEMALLOC_EXPORT JEMALLOC_ATTR(visibility(\"hidden\"))\n#define JEMALLOC_ALIGNED(s) JEMALLOC_ATTR(aligned(s))\n#define JEMALLOC_SECTION(s) JEMALLOC_ATTR(section(s))\n#define JEMALLOC_NOINLINE JEMALLOC_ATTR(noinline)\n\n/* Defined if sbrk() is supported. */\n#define JEMALLOC_HAVE_SBRK 1\n\n/* Non-empty if the tls_model attribute is supported. */\n/*\n#define JEMALLOC_TLS_MODEL __attribute__((tls_model(\"global-dynamic\")))\n*/\n\n/* JEMALLOC_CC_SILENCE enables code that silences unuseful compiler warnings. */\n#define JEMALLOC_CC_SILENCE 1\n\n/*\n * JEMALLOC_DEBUG enables assertions and other sanity checks, and disables\n * inline functions.\n */\n/* #undef JEMALLOC_DEBUG */\n\n/* JEMALLOC_STATS enables statistics calculation. */\n#define JEMALLOC_STATS 1\n\n/* JEMALLOC_PROF enables allocation profiling. */\n/* #undef JEMALLOC_PROF */\n\n/* Use libunwind for profile backtracing if defined. */\n/* #undef JEMALLOC_PROF_LIBUNWIND */\n\n/* Use libgcc for profile backtracing if defined. */\n/* #undef JEMALLOC_PROF_LIBGCC */\n\n/* Use gcc intrinsics for profile backtracing if defined. */\n/* #undef JEMALLOC_PROF_GCC */\n\n/*\n * JEMALLOC_TCACHE enables a thread-specific caching layer for small objects.\n * This makes it possible to allocate/deallocate objects without any locking\n * when the cache is in the steady state.\n */\n#define JEMALLOC_TCACHE 1\n\n/*\n * JEMALLOC_DSS enables use of sbrk(2) to allocate chunks from the data storage\n * segment (DSS).\n */\n#define JEMALLOC_DSS 1\n\n/* Support memory filling (junk/zero/quarantine/redzone). */\n#define JEMALLOC_FILL 1\n\n/* Support the experimental API. */\n#define JEMALLOC_EXPERIMENTAL 1\n\n/* Support utrace(2)-based tracing. */\n/* #undef JEMALLOC_UTRACE */\n\n/* Support Valgrind. */\n/* #undef JEMALLOC_VALGRIND */\n\n/* Support optional abort() on OOM. */\n#define JEMALLOC_XMALLOC 1\n\n/* Support lazy locking (avoid locking unless a second thread is launched). */\n/* #undef JEMALLOC_LAZY_LOCK */\n\n/* One page is 2^STATIC_PAGE_SHIFT bytes. */\n#define STATIC_PAGE_SHIFT 12\n\n/*\n * If defined, use munmap() to unmap freed chunks, rather than storing them for\n * later reuse.  This is disabled by default on Linux because common sequences\n * of mmap()/munmap() calls will cause virtual memory map holes.\n */\n#define JEMALLOC_MUNMAP 1\n\n/*\n * If defined, use mremap(...MREMAP_FIXED...) for huge realloc().  This is\n * disabled by default because it is Linux-specific and it will cause virtual\n * memory map holes, much like munmap(2) does.\n */\n/* #undef JEMALLOC_MREMAP */\n\n/* TLS is used to map arenas and magazine caches to threads. */\n/* #undef JEMALLOC_TLS */\n\n/*\n * JEMALLOC_IVSALLOC enables ivsalloc(), which verifies that pointers reside\n * within jemalloc-owned chunks before dereferencing them.\n */\n#define JEMALLOC_IVSALLOC 1\n\n/*\n * Define overrides for non-standard allocator-related functions if they\n * are present on the system.\n */\n#define JEMALLOC_OVERRIDE_MEMALIGN 1\n#define JEMALLOC_OVERRIDE_VALLOC 1\n\n/*\n * At least Linux omits the \"const\" in:\n *\n *   size_t malloc_usable_size(const void *ptr);\n *\n * Match the operating system's prototype.\n */\n#define JEMALLOC_USABLE_SIZE_CONST const\n\n/*\n * Darwin (OS X) uses zones to work around Mach-O symbol override shortcomings.\n */\n/* #undef JEMALLOC_ZONE */\n/* #undef JEMALLOC_ZONE_VERSION */\n\n/*\n * Methods for purging unused pages differ between operating systems.\n *\n *   madvise(..., MADV_DONTNEED) : On Linux, this immediately discards pages,\n *                                 such that new pages will be demand-zeroed if\n *                                 the address region is later touched.\n *   madvise(..., MADV_FREE) : On FreeBSD and Darwin, this marks pages as being\n *                             unused, such that they will be discarded rather\n *                             than swapped out.\n */\n#define JEMALLOC_PURGE_MADVISE_DONTNEED 1\n/* #undef JEMALLOC_PURGE_MADVISE_FREE */\n\n/*\n * Define if operating system has alloca.h header.\n */\n#define JEMALLOC_HAS_ALLOCA_H 1\n\n/* sizeof(void *) == 2^LG_SIZEOF_PTR. */\n#if __LP64__\n#define LG_SIZEOF_PTR 3\n#else\n#define LG_SIZEOF_PTR 2\n#endif\n\n/* sizeof(int) == 2^LG_SIZEOF_INT. */\n#define LG_SIZEOF_INT 2\n\n/* sizeof(long) == 2^LG_SIZEOF_LONG. */\n#if __LP64__\n#define LG_SIZEOF_LONG 3\n#else\n#define LG_SIZEOF_LONG 2\n#endif\n\n/* sizeof(intmax_t) == 2^LG_SIZEOF_INTMAX_T. */\n#define LG_SIZEOF_INTMAX_T 3\n\nextern int __isthreaded;\n#define isthreaded ((bool)__isthreaded)\n"
  },
  {
    "path": "sources/crystax/src/issetugid.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/auxv.h>\n\nint issetugid()\n{\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/lchmod.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fcntl.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n\nint lchmod(const char *path, mode_t mode)\n{\n    return fchmodat(AT_FDCWD, path, mode, AT_SYMLINK_NOFOLLOW);\n}\n"
  },
  {
    "path": "sources/crystax/src/lseek64.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if !defined(__LP64__) && !(defined(__x86_64__) && defined(__ILP32__))\n\n#include <sys/types.h>\n#include <unistd.h>\n\nextern \"C\"\nint __llseek(int, unsigned long, unsigned long, off64_t*, int);\n\nextern \"C\"\noff64_t lseek64(int fd, off64_t off, int whence)\n{\n    off64_t result;\n    unsigned long off_hi = static_cast<unsigned long>(off >> 32);\n    unsigned long off_lo = static_cast<unsigned long>(off);\n    if (__llseek(fd, off_hi, off_lo, &result, whence) < 0) {\n        return -1;\n    }\n    return result;\n}\n\n#endif /* !defined(__LP64__) && !(defined(__x86_64__) && defined(__ILP32__)) */\n"
  },
  {
    "path": "sources/crystax/src/makedev.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/types.h>\n\nint major(dev_t _dev)\n{\n    return (_dev >> 8) & 0xfff;\n}\n\nint minor(dev_t _dev)\n{\n    return (_dev & 0xff) | ((_dev >> 12) & 0xfff00);\n}\n\ndev_t makedev(int __ma, int __mi)\n{\n    return ((__ma & 0xfff) << 8) | (__mi & 0xff) | ((__mi & 0xfff00) << 12);\n}\n"
  },
  {
    "path": "sources/crystax/src/math/complex.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <complex.h>\n#include <float.h>\n#include <math.h>\n\n#if !defined(__LDBL_MANT_DIG__)\n#error __LDBL_MANT_DIG__ not defined\n#endif\n\n#if __LDBL_MANT_DIG__ <= 53\n#define WARN_IMPRECISE(x)\n#else\n#define WARN_IMPRECISE(x) __warn_references(x, # x \" has lower than advertised precision\");\n#endif\n\n#define BF(name) \\\n    long double complex name ## l (long double complex x) { return name((double complex)x); }; \\\n    WARN_IMPRECISE(name)\n\nBF(cacos);\nBF(cacosh);\nBF(casin);\nBF(casinh);\nBF(catan);\nBF(catanh);\nBF(ccos);\nBF(ccosh);\nBF(cexp);\nBF(csin);\nBF(csinh);\nBF(ctan);\nBF(ctanh);\n\nlong double cargl(long double complex x)\n{\n    return atan2l(cimagl(x), creall(x));\n}\n\ndouble complex clog(double complex x)\n{\n    return log(cabs(x)) + I * carg(x);\n}\n\nfloat complex clogf(float complex x)\n{\n    return logf(cabsf(x)) + I * cargf(x);\n}\n\nlong double complex clogl(long double complex x)\n{\n    return logl(cabsl(x)) + I * cargl(x);\n}\n\ndouble complex cpow(double complex x, double complex y)\n{\n    return cexp(y * clog(x));\n}\n\nfloat complex cpowf(float complex x, float complex y)\n{\n    return cexpf(y * clogf(x));\n}\n\nlong double complex cpowl(long double complex x, long double complex y)\n{\n    return cexpl(y * clogl(x));\n}\n"
  },
  {
    "path": "sources/crystax/src/math/fenvsoft.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*\n * This file implements the functionality of <fenv.h> on platforms that\n * lack an FPU and use softfloat in libc for floating point.  To use it,\n * you must write an <fenv.h> that provides the following:\n *\n *   - a typedef for fenv_t, which may be an integer or struct type\n *   - a typedef for fexcept_t (XXX This file assumes fexcept_t is a\n *     simple integer type containing the exception mask.)\n *   - definitions of FE_* constants for the five exceptions and four\n *     rounding modes in IEEE 754, as described in fenv(3)\n *   - a definition, and the corresponding external symbol, for FE_DFL_ENV\n *   - a macro __set_env(env, flags, mask, rnd), which sets the given fenv_t\n *     from the exception flags, mask, and rounding mode\n *   - macros __env_flags(env), __env_mask(env), and __env_round(env), which\n *     extract fields from an fenv_t\n *   - a definition of __fenv_static\n *\n * If the architecture supports an optional FPU, it's recommended that you\n * define fenv_t and fexcept_t to match the hardware ABI.  Otherwise, it\n * doesn't matter how you define them.\n */\n\n#include <fenv.h>\n#include <signal.h>\n#include <unistd.h>\n\n#if __SOFTFP__\n\n#define _FPSCR_ENABLE_SHIFT 8\n#define _FPSCR_ENABLE_MASK (FE_ALL_EXCEPT << _FPSCR_ENABLE_SHIFT)\n\n#define _FPSCR_RMODE_SHIFT 22\n\n#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)\n\n#define _FPUSW_SHIFT 16\n\n#define __set_env(env, flags, mask, rnd) \\\n        env = ((flags) \\\n        | (mask)<<_FPUSW_SHIFT \\\n        | (rnd) << 24)\n\n#define __env_flags(env) ((env) & FE_ALL_EXCEPT)\n#define __env_mask(env)  (((env) >> _FPUSW_SHIFT) & FE_ALL_EXCEPT)\n#define __env_round(env) (((env) >> 24) & _ROUND_MASK)\n\nconst fenv_t __fe_dfl_env = 0;\n\nstatic int __softfloat_float_rounding_mode = 0;\nstatic int __softfloat_float_exception_mask = 0;\nstatic int __softfloat_float_exception_flags = 0;\n\nvoid __softfloat_float_raise(int e)\n{\n    if ((e & __softfloat_float_exception_mask) == 0)\n        return;\n    kill(getpid(), SIGFPE);\n}\n\nint feclearexcept(int __excepts)\n{\n    __softfloat_float_exception_flags &= ~__excepts;\n    return (0);\n}\n\nint fegetexceptflag(fexcept_t *__flagp, int __excepts)\n{\n    *__flagp = __softfloat_float_exception_flags & __excepts;\n    return (0);\n}\n\nint fesetexceptflag(const fexcept_t *__flagp, int __excepts)\n{\n    __softfloat_float_exception_flags &= ~__excepts;\n    __softfloat_float_exception_flags |= *__flagp & __excepts;\n    return (0);\n}\n\nint feraiseexcept(int __excepts)\n{\n    __softfloat_float_raise(__excepts);\n    return (0);\n}\n\nint fetestexcept(int __excepts)\n{\n    return (__softfloat_float_exception_flags & __excepts);\n}\n\nint fegetround(void)\n{\n    return (__softfloat_float_rounding_mode);\n}\n\nint fesetround(int __round)\n{\n    __softfloat_float_rounding_mode = __round;\n    return (0);\n}\n\nint fegetenv(fenv_t *__envp)\n{\n    __set_env(*__envp, __softfloat_float_exception_flags,\n            __softfloat_float_exception_mask, __softfloat_float_rounding_mode);\n    return (0);\n}\n\nint feholdexcept(fenv_t *__envp)\n{\n    fegetenv(__envp);\n    __softfloat_float_exception_flags = 0;\n    __softfloat_float_exception_mask = 0;\n    return (0);\n}\n\nint fesetenv(const fenv_t *__envp)\n{\n    __softfloat_float_exception_flags = __env_flags(*__envp);\n    __softfloat_float_exception_mask = __env_mask(*__envp);\n    __softfloat_float_rounding_mode = __env_round(*__envp);\n    return (0);\n}\n\nint feupdateenv(const fenv_t *__envp)\n{\n    int __oflags = __softfloat_float_exception_flags;\n\n    fesetenv(__envp);\n    feraiseexcept(__oflags);\n    return (0);\n}\n\nint feenableexcept(int __mask)\n{\n    int __omask = __softfloat_float_exception_mask;\n\n    __softfloat_float_exception_mask |= __mask;\n    return (__omask);\n}\n\nint fedisableexcept(int __mask)\n{\n    int __omask = __softfloat_float_exception_mask;\n\n    __softfloat_float_exception_mask &= ~__mask;\n    return (__omask);\n}\n\nint fegetexcept(void)\n{\n    return (__softfloat_float_exception_mask);\n}\n\n#endif /* __SOFTFP__ */\n"
  },
  {
    "path": "sources/crystax/src/math/math.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <math.h>\n\n#if !defined(__LDBL_MANT_DIG__)\n#error __LDBL_MANT_DIG__ not defined\n#endif\n\n#if __LDBL_MANT_DIG__ <= 53\n#define WARN_IMPRECISE(x)\n#else\n#define WARN_IMPRECISE(x) __warn_references(x, # x \" has lower than advertised precision\");\n#endif\n\n#define BF(name) \\\n    long double name ## l (long double x) { return name((double)x); }; \\\n    WARN_IMPRECISE(name)\n\n#define BF2(name) \\\n    long double name ## l (long double x, long double y) { return name((double)x, (double)y); }; \\\n    WARN_IMPRECISE(name)\n\nBF(tgamma);\nBF2(pow);\n"
  },
  {
    "path": "sources/crystax/src/math/sincos.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*-\n * Copyright (C) 2010 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#define _GNU_SOURCE 1\n#include <math.h>\n\n// Disable sincos optimization for all functions in this file,\n// otherwise gcc would generate infinite calls.\n// Refer to gcc PR46926.\n// -fno-builtin-sin or -fno-builtin-cos can disable sincos optimization,\n// but these two options do not work inside optimize pragma in-file.\n// Thus we just enforce -O0 when compiling this file.\n#pragma GCC optimize (\"O0\")\n\nvoid sincos(double x, double* p_sin, double* p_cos) {\n  *p_sin = sin(x);\n  *p_cos = cos(x);\n}\n\nvoid sincosf(float x, float* p_sinf, float* p_cosf) {\n  *p_sinf = sinf(x);\n  *p_cosf = cosf(x);\n}\n\nvoid sincosl(long double x, long double* p_sinl, long double* p_cosl) {\n  *p_sinl = sinl(x);\n  *p_cosl = cosl(x);\n}\n"
  },
  {
    "path": "sources/crystax/src/memswap.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stddef.h>\n\nvoid memswap(void* m1, void* m2, size_t n)\n{\n    char* p = (char*)m1;\n    char* p_end = p + n;\n    char* q = (char*)m2;\n    while (p < p_end) {\n        char tmp = *p;\n        *p = *q;\n        *q = tmp;\n        p++;\n        q++;\n    }\n}\n"
  },
  {
    "path": "sources/crystax/src/msgcat.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <nl_types.h>\n#include <errno.h>\n\nnl_catd catopen(const char *name, int oflag)\n{\n    (void)name;\n    (void)oflag;\n    return (nl_catd)0;\n}\n\nint catclose(nl_catd catd)\n{\n    (void)catd;\n    return 0;\n}\n\nchar *catgets(nl_catd catd, int set_id, int msg_id, const char *s)\n{\n    (void)catd;\n    (void)set_id;\n    (void)msg_id;\n    errno = ENOMSG;\n    return (char*)s;\n}\n"
  },
  {
    "path": "sources/crystax/src/openbsd/getrrsetbyname.c",
    "content": "/* $OpenBSD: getrrsetbyname.c,v 1.11 2007/10/11 18:36:41 jakob Exp $ */\n\n/*\n * Copyright (c) 2001 Jakob Schlyter. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Portions Copyright (c) 1999-2001 Internet Software Consortium.\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND INTERNET SOFTWARE CONSORTIUM\n * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL\n * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING\n * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,\n * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION\n * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/* OPENBSD ORIGINAL: lib/libc/net/getrrsetbyname.c */\n\n#if !defined (HAVE_GETRRSETBYNAME) && !defined (HAVE_LDNS)\n\n#include <stdlib.h>\n#include <string.h>\n\n#include <netinet/in.h>\n#include <arpa/inet.h>\n\n#include \"getrrsetbyname.h\"\n\n#if __CRYSTAX__\n#include \"resolv_private.h\"\n\n#define HAVE__GETSHORT 1\n#define HAVE__GETLONG  1\n#define HAVE__RES_EXTERN 1\n\n#endif /* __CRYSTAX__ */\n\n#if defined(HAVE_DECL_H_ERRNO) && !HAVE_DECL_H_ERRNO\nextern int h_errno;\n#endif\n\n/* We don't need multithread support here */\n#ifdef _THREAD_PRIVATE\n# undef _THREAD_PRIVATE\n#endif\n#define _THREAD_PRIVATE(a,b,c) (c)\n\n#ifndef HAVE__RES_EXTERN\nstruct __res_state _res;\n#endif\n\n/* Necessary functions and macros */\n\n/*\n * Inline versions of get/put short/long.  Pointer is advanced.\n *\n * These macros demonstrate the property of C whereby it can be\n * portable or it can be elegant but rarely both.\n */\n\n#ifndef INT32SZ\n# define INT32SZ\t4\n#endif\n#ifndef INT16SZ\n# define INT16SZ\t2\n#endif\n\n#ifndef GETSHORT\n#define GETSHORT(s, cp) { \\\n\tregister u_char *t_cp = (u_char *)(cp); \\\n\t(s) = ((u_int16_t)t_cp[0] << 8) \\\n\t    | ((u_int16_t)t_cp[1]) \\\n\t    ; \\\n\t(cp) += INT16SZ; \\\n}\n#endif\n\n#ifndef GETLONG\n#define GETLONG(l, cp) { \\\n\tregister u_char *t_cp = (u_char *)(cp); \\\n\t(l) = ((u_int32_t)t_cp[0] << 24) \\\n\t    | ((u_int32_t)t_cp[1] << 16) \\\n\t    | ((u_int32_t)t_cp[2] << 8) \\\n\t    | ((u_int32_t)t_cp[3]) \\\n\t    ; \\\n\t(cp) += INT32SZ; \\\n}\n#endif\n\n/*\n * Routines to insert/extract short/long's.\n */\n\n#ifndef HAVE__GETSHORT\nstatic u_int16_t\n_getshort(msgp)\n\tregister const u_char *msgp;\n{\n\tregister u_int16_t u;\n\n\tGETSHORT(u, msgp);\n\treturn (u);\n}\n#elif defined(HAVE_DECL__GETSHORT) && (HAVE_DECL__GETSHORT == 0)\nu_int16_t _getshort(register const u_char *);\n#endif\n\n#ifndef HAVE__GETLONG\nstatic u_int32_t\n_getlong(msgp)\n\tregister const u_char *msgp;\n{\n\tregister u_int32_t u;\n\n\tGETLONG(u, msgp);\n\treturn (u);\n}\n#elif defined(HAVE_DECL__GETLONG) && (HAVE_DECL__GETLONG == 0)\nu_int32_t _getlong(register const u_char *);\n#endif\n\n/* ************** */\n\n#define ANSWER_BUFFER_SIZE 0xffff\n\nstruct dns_query {\n\tchar\t\t\t*name;\n\tu_int16_t\t\ttype;\n\tu_int16_t\t\tclass;\n\tstruct dns_query\t*next;\n};\n\nstruct dns_rr {\n\tchar\t\t\t*name;\n\tu_int16_t\t\ttype;\n\tu_int16_t\t\tclass;\n\tu_int16_t\t\tttl;\n\tu_int16_t\t\tsize;\n\tvoid\t\t\t*rdata;\n\tstruct dns_rr\t\t*next;\n};\n\nstruct dns_response {\n\tHEADER\t\t\theader;\n\tstruct dns_query\t*query;\n\tstruct dns_rr\t\t*answer;\n\tstruct dns_rr\t\t*authority;\n\tstruct dns_rr\t\t*additional;\n};\n\nstatic struct dns_response *parse_dns_response(const u_char *, int);\nstatic struct dns_query *parse_dns_qsection(const u_char *, int,\n    const u_char **, int);\nstatic struct dns_rr *parse_dns_rrsection(const u_char *, int, const u_char **,\n    int);\n\nstatic void free_dns_query(struct dns_query *);\nstatic void free_dns_rr(struct dns_rr *);\nstatic void free_dns_response(struct dns_response *);\n\nstatic int count_dns_rr(struct dns_rr *, u_int16_t, u_int16_t);\n\nint\ngetrrsetbyname(const char *hostname, unsigned int rdclass,\n    unsigned int rdtype, unsigned int flags,\n    struct rrsetinfo **res)\n{\n#if __CRYSTAX__\n\tstruct __res_state *_resp = __res_get_state();\n#else\n\tstruct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);\n#endif\n\tint result;\n\tstruct rrsetinfo *rrset = NULL;\n\tstruct dns_response *response = NULL;\n\tstruct dns_rr *rr;\n\tstruct rdatainfo *rdata;\n\tint length;\n\tunsigned int index_ans, index_sig;\n\tu_char answer[ANSWER_BUFFER_SIZE];\n\n\t/* check for invalid class and type */\n\tif (rdclass > 0xffff || rdtype > 0xffff) {\n\t\tresult = ERRSET_INVAL;\n\t\tgoto fail;\n\t}\n\n\t/* don't allow queries of class or type ANY */\n\tif (rdclass == 0xff || rdtype == 0xff) {\n\t\tresult = ERRSET_INVAL;\n\t\tgoto fail;\n\t}\n\n\t/* don't allow flags yet, unimplemented */\n\tif (flags) {\n\t\tresult = ERRSET_INVAL;\n\t\tgoto fail;\n\t}\n\n\t/* initialize resolver */\n\tif ((_resp->options & RES_INIT) == 0 && res_init() == -1) {\n\t\tresult = ERRSET_FAIL;\n\t\tgoto fail;\n\t}\n\n#ifdef DEBUG\n\t_resp->options |= RES_DEBUG;\n#endif /* DEBUG */\n\n#ifdef RES_USE_DNSSEC\n\t/* turn on DNSSEC if EDNS0 is configured */\n\tif (_resp->options & RES_USE_EDNS0)\n\t\t_resp->options |= RES_USE_DNSSEC;\n#endif /* RES_USE_DNSEC */\n\n\t/* make query */\n\tlength = res_query(hostname, (signed int) rdclass, (signed int) rdtype,\n\t    answer, sizeof(answer));\n\tif (length < 0) {\n\t\tswitch(h_errno) {\n\t\tcase HOST_NOT_FOUND:\n\t\t\tresult = ERRSET_NONAME;\n\t\t\tgoto fail;\n\t\tcase NO_DATA:\n\t\t\tresult = ERRSET_NODATA;\n\t\t\tgoto fail;\n\t\tdefault:\n\t\t\tresult = ERRSET_FAIL;\n\t\t\tgoto fail;\n\t\t}\n\t}\n\n\t/* parse result */\n\tresponse = parse_dns_response(answer, length);\n\tif (response == NULL) {\n\t\tresult = ERRSET_FAIL;\n\t\tgoto fail;\n\t}\n\n\tif (response->header.qdcount != 1) {\n\t\tresult = ERRSET_FAIL;\n\t\tgoto fail;\n\t}\n\n\t/* initialize rrset */\n\trrset = calloc(1, sizeof(struct rrsetinfo));\n\tif (rrset == NULL) {\n\t\tresult = ERRSET_NOMEMORY;\n\t\tgoto fail;\n\t}\n\trrset->rri_rdclass = response->query->class;\n\trrset->rri_rdtype = response->query->type;\n\trrset->rri_ttl = response->answer->ttl;\n\trrset->rri_nrdatas = response->header.ancount;\n\n#ifdef HAVE_HEADER_AD\n\t/* check for authenticated data */\n\tif (response->header.ad == 1)\n\t\trrset->rri_flags |= RRSET_VALIDATED;\n#endif\n\n\t/* copy name from answer section */\n\trrset->rri_name = strdup(response->answer->name);\n\tif (rrset->rri_name == NULL) {\n\t\tresult = ERRSET_NOMEMORY;\n\t\tgoto fail;\n\t}\n\n\t/* count answers */\n\trrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass,\n\t    rrset->rri_rdtype);\n\trrset->rri_nsigs = count_dns_rr(response->answer, rrset->rri_rdclass,\n\t    T_RRSIG);\n\n\t/* allocate memory for answers */\n\trrset->rri_rdatas = calloc(rrset->rri_nrdatas,\n\t    sizeof(struct rdatainfo));\n\tif (rrset->rri_rdatas == NULL) {\n\t\tresult = ERRSET_NOMEMORY;\n\t\tgoto fail;\n\t}\n\n\t/* allocate memory for signatures */\n\tif (rrset->rri_nsigs > 0) {\n\t\trrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo));\n\t\tif (rrset->rri_sigs == NULL) {\n\t\t\tresult = ERRSET_NOMEMORY;\n\t\t\tgoto fail;\n\t\t}\n\t}\n\n\t/* copy answers & signatures */\n\tfor (rr = response->answer, index_ans = 0, index_sig = 0;\n\t    rr; rr = rr->next) {\n\n\t\trdata = NULL;\n\n\t\tif (rr->class == rrset->rri_rdclass &&\n\t\t    rr->type  == rrset->rri_rdtype)\n\t\t\trdata = &rrset->rri_rdatas[index_ans++];\n\n\t\tif (rr->class == rrset->rri_rdclass &&\n\t\t    rr->type  == T_RRSIG)\n\t\t\trdata = &rrset->rri_sigs[index_sig++];\n\n\t\tif (rdata) {\n\t\t\trdata->rdi_length = rr->size;\n\t\t\trdata->rdi_data   = malloc(rr->size);\n\n\t\t\tif (rdata->rdi_data == NULL) {\n\t\t\t\tresult = ERRSET_NOMEMORY;\n\t\t\t\tgoto fail;\n\t\t\t}\n\t\t\tmemcpy(rdata->rdi_data, rr->rdata, rr->size);\n\t\t}\n\t}\n\tfree_dns_response(response);\n\n\t*res = rrset;\n\treturn (ERRSET_SUCCESS);\n\nfail:\n\tif (rrset != NULL)\n\t\tfreerrset(rrset);\n\tif (response != NULL)\n\t\tfree_dns_response(response);\n\treturn (result);\n}\n\nvoid\nfreerrset(struct rrsetinfo *rrset)\n{\n\tu_int16_t i;\n\n\tif (rrset == NULL)\n\t\treturn;\n\n\tif (rrset->rri_rdatas) {\n\t\tfor (i = 0; i < rrset->rri_nrdatas; i++) {\n\t\t\tif (rrset->rri_rdatas[i].rdi_data == NULL)\n\t\t\t\tbreak;\n\t\t\tfree(rrset->rri_rdatas[i].rdi_data);\n\t\t}\n\t\tfree(rrset->rri_rdatas);\n\t}\n\n\tif (rrset->rri_sigs) {\n\t\tfor (i = 0; i < rrset->rri_nsigs; i++) {\n\t\t\tif (rrset->rri_sigs[i].rdi_data == NULL)\n\t\t\t\tbreak;\n\t\t\tfree(rrset->rri_sigs[i].rdi_data);\n\t\t}\n\t\tfree(rrset->rri_sigs);\n\t}\n\n\tif (rrset->rri_name)\n\t\tfree(rrset->rri_name);\n\tfree(rrset);\n}\n\n/*\n * DNS response parsing routines\n */\nstatic struct dns_response *\nparse_dns_response(const u_char *answer, int size)\n{\n\tstruct dns_response *resp;\n\tconst u_char *cp;\n\n\t/* allocate memory for the response */\n\tresp = calloc(1, sizeof(*resp));\n\tif (resp == NULL)\n\t\treturn (NULL);\n\n\t/* initialize current pointer */\n\tcp = answer;\n\n\t/* copy header */\n\tmemcpy(&resp->header, cp, HFIXEDSZ);\n\tcp += HFIXEDSZ;\n\n\t/* fix header byte order */\n\tresp->header.qdcount = ntohs(resp->header.qdcount);\n\tresp->header.ancount = ntohs(resp->header.ancount);\n\tresp->header.nscount = ntohs(resp->header.nscount);\n\tresp->header.arcount = ntohs(resp->header.arcount);\n\n\t/* there must be at least one query */\n\tif (resp->header.qdcount < 1) {\n\t\tfree_dns_response(resp);\n\t\treturn (NULL);\n\t}\n\n\t/* parse query section */\n\tresp->query = parse_dns_qsection(answer, size, &cp,\n\t    resp->header.qdcount);\n\tif (resp->header.qdcount && resp->query == NULL) {\n\t\tfree_dns_response(resp);\n\t\treturn (NULL);\n\t}\n\n\t/* parse answer section */\n\tresp->answer = parse_dns_rrsection(answer, size, &cp,\n\t    resp->header.ancount);\n\tif (resp->header.ancount && resp->answer == NULL) {\n\t\tfree_dns_response(resp);\n\t\treturn (NULL);\n\t}\n\n\t/* parse authority section */\n\tresp->authority = parse_dns_rrsection(answer, size, &cp,\n\t    resp->header.nscount);\n\tif (resp->header.nscount && resp->authority == NULL) {\n\t\tfree_dns_response(resp);\n\t\treturn (NULL);\n\t}\n\n\t/* parse additional section */\n\tresp->additional = parse_dns_rrsection(answer, size, &cp,\n\t    resp->header.arcount);\n\tif (resp->header.arcount && resp->additional == NULL) {\n\t\tfree_dns_response(resp);\n\t\treturn (NULL);\n\t}\n\n\treturn (resp);\n}\n\nstatic struct dns_query *\nparse_dns_qsection(const u_char *answer, int size, const u_char **cp, int count)\n{\n\tstruct dns_query *head, *curr, *prev;\n\tint i, length;\n\tchar name[MAXDNAME];\n\n\tfor (i = 1, head = NULL, prev = NULL; i <= count; i++, prev = curr) {\n\n\t\t/* allocate and initialize struct */\n\t\tcurr = calloc(1, sizeof(struct dns_query));\n\t\tif (curr == NULL) {\n\t\t\tfree_dns_query(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\tif (head == NULL)\n\t\t\thead = curr;\n\t\tif (prev != NULL)\n\t\t\tprev->next = curr;\n\n\t\t/* name */\n\t\tlength = dn_expand(answer, answer + size, *cp, name,\n\t\t    sizeof(name));\n\t\tif (length < 0) {\n\t\t\tfree_dns_query(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\tcurr->name = strdup(name);\n\t\tif (curr->name == NULL) {\n\t\t\tfree_dns_query(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\t*cp += length;\n\n\t\t/* type */\n\t\tcurr->type = _getshort(*cp);\n\t\t*cp += INT16SZ;\n\n\t\t/* class */\n\t\tcurr->class = _getshort(*cp);\n\t\t*cp += INT16SZ;\n\t}\n\n\treturn (head);\n}\n\nstatic struct dns_rr *\nparse_dns_rrsection(const u_char *answer, int size, const u_char **cp,\n    int count)\n{\n\tstruct dns_rr *head, *curr, *prev;\n\tint i, length;\n\tchar name[MAXDNAME];\n\n\tfor (i = 1, head = NULL, prev = NULL; i <= count; i++, prev = curr) {\n\n\t\t/* allocate and initialize struct */\n\t\tcurr = calloc(1, sizeof(struct dns_rr));\n\t\tif (curr == NULL) {\n\t\t\tfree_dns_rr(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\tif (head == NULL)\n\t\t\thead = curr;\n\t\tif (prev != NULL)\n\t\t\tprev->next = curr;\n\n\t\t/* name */\n\t\tlength = dn_expand(answer, answer + size, *cp, name,\n\t\t    sizeof(name));\n\t\tif (length < 0) {\n\t\t\tfree_dns_rr(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\tcurr->name = strdup(name);\n\t\tif (curr->name == NULL) {\n\t\t\tfree_dns_rr(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\t*cp += length;\n\n\t\t/* type */\n\t\tcurr->type = _getshort(*cp);\n\t\t*cp += INT16SZ;\n\n\t\t/* class */\n\t\tcurr->class = _getshort(*cp);\n\t\t*cp += INT16SZ;\n\n\t\t/* ttl */\n\t\tcurr->ttl = _getlong(*cp);\n\t\t*cp += INT32SZ;\n\n\t\t/* rdata size */\n\t\tcurr->size = _getshort(*cp);\n\t\t*cp += INT16SZ;\n\n\t\t/* rdata itself */\n\t\tcurr->rdata = malloc(curr->size);\n\t\tif (curr->rdata == NULL) {\n\t\t\tfree_dns_rr(head);\n\t\t\treturn (NULL);\n\t\t}\n\t\tmemcpy(curr->rdata, *cp, curr->size);\n\t\t*cp += curr->size;\n\t}\n\n\treturn (head);\n}\n\nstatic void\nfree_dns_query(struct dns_query *p)\n{\n\tif (p == NULL)\n\t\treturn;\n\n\tif (p->name)\n\t\tfree(p->name);\n\tfree_dns_query(p->next);\n\tfree(p);\n}\n\nstatic void\nfree_dns_rr(struct dns_rr *p)\n{\n\tif (p == NULL)\n\t\treturn;\n\n\tif (p->name)\n\t\tfree(p->name);\n\tif (p->rdata)\n\t\tfree(p->rdata);\n\tfree_dns_rr(p->next);\n\tfree(p);\n}\n\nstatic void\nfree_dns_response(struct dns_response *p)\n{\n\tif (p == NULL)\n\t\treturn;\n\n\tfree_dns_query(p->query);\n\tfree_dns_rr(p->answer);\n\tfree_dns_rr(p->authority);\n\tfree_dns_rr(p->additional);\n\tfree(p);\n}\n\nstatic int\ncount_dns_rr(struct dns_rr *p, u_int16_t class, u_int16_t type)\n{\n\tint n = 0;\n\n\twhile(p) {\n\t\tif (p->class == class && p->type == type)\n\t\t\tn++;\n\t\tp = p->next;\n\t}\n\n\treturn (n);\n}\n\n#endif /*  !defined (HAVE_GETRRSETBYNAME) && !defined (HAVE_LDNS) */\n"
  },
  {
    "path": "sources/crystax/src/posix_fadvise.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fcntl.h>\n#include <errno.h>\n\n#if defined(__arm__)\nint __arm_fadvise64_64(int, int, off64_t, off64_t);\n#else\nint __fadvise64(int, off64_t, off64_t, int);\n#endif\n\nint posix_fadvise(int fd, off_t offset, off_t length, int advice)\n{\n    return posix_fadvise64(fd, offset, length, advice);\n}\n\nint posix_fadvise64(int fd, off64_t offset, off64_t length, int advice)\n{\n    int rc;\n    int saved_errno = errno;\n#if defined(__arm__)\n    rc = __arm_fadvise64_64(fd, advice, offset, length);\n#else\n    rc = __fadvise64(fd, offset, length, advice);\n#endif\n    if (rc != 0) rc = errno;\n    errno = saved_errno;\n    return rc;\n}\n"
  },
  {
    "path": "sources/crystax/src/posix_fallocate.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fcntl.h>\n#include <errno.h>\n\n#if __arm__ || __i386__ || (__mips__ && !__LP64__)\nint fallocate(int fd, int s, off_t offset, off_t len)\n{\n    return fallocate64(fd, s, offset, len);\n}\n#endif\n\nint posix_fallocate(int fd, off_t offset, off_t len)\n{\n    int rc;\n    int saved_errno = errno;\n    rc = fallocate(fd, 0, offset, len);\n    if (rc != 0) rc = errno;\n    errno = saved_errno;\n    return rc;\n}\n\nint posix_fallocate64(int fd, off64_t offset, off64_t len)\n{\n    int rc;\n    int saved_errno = errno;\n    rc = fallocate64(fd, 0, offset, len);\n    if (rc != 0) rc = errno;\n    errno = saved_errno;\n    return rc;\n}\n"
  },
  {
    "path": "sources/crystax/src/pread.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if defined(__arm__) || defined(__i386__) || (defined(__mips__) && !defined(__LP64__))\n\n#include <unistd.h>\n\nssize_t pread(int fd, void* buf, size_t byte_count, off_t offset) {\n    return pread64(fd, buf, byte_count, (off64_t)offset);\n}\n\n#endif /* defined(__arm__) || defined(__i386__) || (defined(__mips__) && !defined(__LP64__)) */\n"
  },
  {
    "path": "sources/crystax/src/progname.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <limits.h>\n#include <string.h>\n\nstatic char __crystax_progname[PATH_MAX + 1];\n\nconst char * getprogname()\n{\n    return __crystax_progname;\n}\n\nvoid setprogname(const char *progname)\n{\n    const char *p;\n\n    p = strrchr(progname, '/');\n    strncpy(__crystax_progname, p ? (p + 1) : progname, sizeof(__crystax_progname) - 1);\n    __crystax_progname[sizeof(__crystax_progname) - 1] = '\\0';\n}\n"
  },
  {
    "path": "sources/crystax/src/pthread_attr_getstackaddr.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread.h>\n#include <errno.h>\n\nint pthread_attr_getstackaddr(const pthread_attr_t* attr, void** stack_addr)\n{\n    *stack_addr = (char*)attr->stack_base + attr->stack_size;\n    return 0;\n}\n\nint pthread_attr_setstackaddr(pthread_attr_t* attr, void* stack_addr)\n{\n    (void)attr;\n    (void)stack_addr;\n    return ENOSYS;\n}\n"
  },
  {
    "path": "sources/crystax/src/pthread_gettid.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread.h>\n\npid_t __pthread_gettid(pthread_t t) {\n    return pthread_gettid_np(t);\n}\n"
  },
  {
    "path": "sources/crystax/src/pthread_main_np.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread_np.h>\n#include <bionic/pthread_internal.h>\n\nint pthread_main_np()\n{\n    pthread_internal_t *self = reinterpret_cast<pthread_internal_t*>(::pthread_self());\n    return self->prev == NULL ? 1 : 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/pwent.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pwd.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <sys/types.h>\n#include <sys/sysconf.h>\n\nstatic struct passwd me;\nstatic struct passwd *entries[] = {NULL, NULL};\nstatic size_t current = 0;\n\nstatic void init()\n{\n    struct passwd *p;\n    char *buf;\n    int buflen;\n\n    if (entries[0] != NULL)\n        return;\n\n    buflen = sysconf(_SC_GETPW_R_SIZE_MAX);\n    if (buflen <= 0) abort();\n    buf = malloc(buflen);\n    if (!buf) abort();\n\n    getpwuid_r(getuid(), &me, buf, buflen, &p);\n    if (!p) abort();\n\n    entries[0] = &me;\n}\n\nstruct passwd *getpwent()\n{\n    struct passwd *p;\n\n    init();\n\n    p = entries[current];\n    if (current < sizeof(entries)/sizeof(entries[0]) - 1)\n        ++current;\n\n    return p;\n}\n\nvoid endpwent()\n{\n    init();\n}\n\nvoid setpwent()\n{\n    init();\n    current = 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/pwrite.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if defined(__arm__) || defined(__i386__) || (defined(__mips__) && !defined(__LP64__))\n\n#include <unistd.h>\n\nssize_t pwrite(int fd, const void* buf, size_t byte_count, off_t offset) {\n    return pwrite64(fd, buf, byte_count, (off64_t)offset);\n}\n\n#endif /* defined(__arm__) || defined(__i386__) || (defined(__mips__) && !defined(__LP64__)) */\n"
  },
  {
    "path": "sources/crystax/src/shmat.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/ipc.h>\n#include <sys/shm.h>\n#include <sys/syscall.h>\n#include <stdint.h>\n\nvoid *shmat(int id, const void *addr, int flag)\n{\n#ifdef __NR_shmat\n    return (void *)syscall(__NR_shmat, id, addr, flag);\n#else\n    unsigned long ret;\n    ret = syscall(SYS_ipc, SHMAT, id, flag, &addr, addr);\n    return (ret > -(unsigned long)SHMLBA) ? (void *)ret : (void *)addr;\n#endif\n}\n"
  },
  {
    "path": "sources/crystax/src/shmctl.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/ipc.h>\n#include <sys/shm.h>\n#include <sys/syscall.h>\n#include <stdint.h>\n\nint shmctl(int id, int cmd, struct shmid_ds *buf)\n{\n#ifdef __NR_shmctl\n    return syscall(__NR_shmctl, id, cmd | IPC_64, buf);\n#else\n    return syscall(SYS_ipc, SHMCTL, id, cmd | IPC_64, 0, buf, 0);\n#endif\n}\n"
  },
  {
    "path": "sources/crystax/src/shmdt.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/ipc.h>\n#include <sys/shm.h>\n#include <sys/syscall.h>\n#include <stdint.h>\n\nint shmdt(const void *addr)\n{\n#ifdef __NR_shmdt\n    return syscall(__NR_shmdt, addr);\n#else\n    return syscall(SYS_ipc, SHMDT, 0, 0, 0, addr);\n#endif\n}\n"
  },
  {
    "path": "sources/crystax/src/shmget.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/ipc.h>\n#include <sys/shm.h>\n#include <sys/syscall.h>\n#include <stdint.h>\n\nint shmget(key_t key, size_t size, int flag)\n{\n#ifdef __NR_shmget\n    return syscall(__NR_shmget, key, size, flag);\n#else\n    return syscall(SYS_ipc, SHMGET, key, size, flag);\n#endif\n}\n"
  },
  {
    "path": "sources/crystax/src/stdlib/abort.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#include <unistd.h>\n\nvoid abort()\n{\n    // Don't block SIGABRT to give any signal handler a chance; we ignore\n    // any errors -- X311J doesn't allow abort to return anyway.\n    sigset_t mask;\n    sigfillset(&mask);\n    sigdelset(&mask, SIGABRT);\n    sigprocmask(SIG_SETMASK, &mask, NULL);\n\n    raise(SIGABRT);\n\n    // If SIGABRT ignored, or caught and the handler returns,\n    // remove the SIGABRT signal handler and raise SIGABRT again.\n    struct sigaction sa;\n    sa.sa_handler = SIG_DFL;\n    sa.sa_flags   = SA_RESTART;\n    sigemptyset(&sa.sa_mask);\n    sigaction(SIGABRT, &sa, &sa);\n    sigprocmask(SIG_SETMASK, &mask, NULL);\n    raise(SIGABRT);\n    _exit(1);\n}\n"
  },
  {
    "path": "sources/crystax/src/stdlib/rand.c",
    "content": "/*-\n * Copyright (c) 1990, 1993\n *  The Regents of the University of California.  All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 4. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * Posix rand_r function added May 1999 by Wes Peters <wes@softweyr.com>.\n */\n\n/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n\nstatic int\ndo_rand(unsigned long *ctx)\n{\n    /*\n     * Compute x = (7^5 * x) mod (2^31 - 1)\n     * without overflowing 31 bits:\n     *      (2^31 - 1) = 127773 * (7^5) + 2836\n     * From \"Random number generators: good ones are hard to find\",\n     * Park and Miller, Communications of the ACM, vol. 31, no. 10,\n     * October 1988, p. 1195.\n     */\n    long hi, lo, x;\n\n    /* Can't be initialized with 0, so use another value. */\n    if (*ctx == 0)\n        *ctx = 123459876;\n    hi = *ctx / 127773;\n    lo = *ctx % 127773;\n    x = 16807 * lo - 2836 * hi;\n    if (x < 0)\n        x += 0x7fffffff;\n    return ((*ctx = x) % ((unsigned long)RAND_MAX + 1));\n}\n\n\nint\nrand_r(unsigned int *ctx)\n{\n    unsigned long val = (unsigned long) *ctx;\n    int r = do_rand(&val);\n\n    *ctx = (unsigned int) val;\n    return (r);\n}\n"
  },
  {
    "path": "sources/crystax/src/string/strerror.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <string.h>\n\nchar *strerror_l(int e, locale_t l)\n{\n    (void)l;\n    return strerror(e);\n}\n"
  },
  {
    "path": "sources/crystax/src/strntoimax.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*\n * Copyright (C) 2013 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include <inttypes.h>\n#include <ctype.h>\n#include <time.h>\n\nstatic inline int digitval(int ch)\n{\n    unsigned d;\n\n    d = (unsigned)(ch - '0');\n    if (d < 10) return (int)d;\n\n    d = (unsigned)(ch - 'a');\n    if (d < 6) return (int)(d+10);\n\n    d = (unsigned)(ch - 'A');\n    if (d < 6) return (int)(d+10);\n\n    return -1;\n}\n\nuintmax_t strntoumax(const char *nptr, char **endptr, int base, size_t n)\n{\n    const unsigned char*  p   = (const unsigned char *)nptr;\n    const unsigned char*  end = p + n;\n    int                   minus = 0;\n    uintmax_t             v = 0;\n    int                   d;\n\n    while (p < end && isspace(*p)) {\n        p++;\n    }\n\n    if (p < end) {\n        char c = p[0];\n        if (c == '-' || c == '+') {\n            minus = (c == '-');\n            p++;\n        }\n    }\n\n    if (base == 0) {\n        if (p+2 < end && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {\n            p += 2;\n            base = 16;\n        } else if (p+1 < end && p[0] == '0') {\n            p   += 1;\n            base = 8;\n        } else {\n            base = 10;\n        }\n    } else if (base == 16) {\n        if (p+2 < end && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) {\n            p += 2;\n        }\n    }\n\n    while (p < end && (d = digitval(*p)) >= 0 && d < base) {\n        v = v*base + d;\n        p += 1;\n    }\n\n    if (endptr) {\n        *endptr = (char*) p;\n    }\n\n    return minus ? -v : v;\n}\n\nintmax_t strntoimax(const char* nptr, char** endptr, int base, size_t n)\n{\n    return (intmax_t) strntoumax(nptr, endptr, base, n);\n}\n\nchar* strtotimeval(const char* str, struct timeval* ts)\n{\n    char* s;\n    ts->tv_sec = strtoumax(str, &s, 10);\n\n    long fractional_seconds = 0;\n    if (*s == '.') {\n        s++;\n        int count = 0;\n\n        // Read up to 6 digits (microseconds).\n        while (*s && isdigit(*s)) {\n            if (++count < 7) {\n                fractional_seconds = fractional_seconds*10 + (*s - '0');\n            }\n            s++;\n        }\n\n        for (; count < 6; count++) {\n            fractional_seconds *= 10;\n        }\n    }\n\n    ts->tv_usec = fractional_seconds;\n    return s;\n}\n"
  },
  {
    "path": "sources/crystax/src/strverscmp.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n/*\n * Copyright © 2005-2014 Rich Felker, et al.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n#include <ctype.h>\n#include <string.h>\n\nint strverscmp(const char *l0, const char *r0)\n{\n\tconst unsigned char *l = (const void *)l0;\n\tconst unsigned char *r = (const void *)r0;\n\tsize_t i, dp, j;\n\tint z = 1;\n\n\t/* Find maximal matching prefix and track its maximal digit\n\t * suffix and whether those digits are all zeros. */\n\tfor (dp=i=0; l[i]==r[i]; i++) {\n\t\tint c = l[i];\n\t\tif (!c) return 0;\n\t\tif (!isdigit(c)) dp=i+1, z=1;\n\t\telse if (c!='0') z=0;\n\t}\n\n\tif (l[dp]!='0' && r[dp]!='0') {\n\t\t/* If we're not looking at a digit sequence that began\n\t\t * with a zero, longest digit string is greater. */\n\t\tfor (j=i; isdigit(l[j]); j++)\n\t\t\tif (!isdigit(r[j])) return 1;\n\t\tif (isdigit(r[j])) return -1;\n\t} else if (z && dp<i && (isdigit(l[i]) || isdigit(r[i]))) {\n\t\t/* Otherwise, if common prefix of digit sequence is\n\t\t * all zeros, digits order less than non-digits. */\n\t\treturn (unsigned char)(l[i]-'0') - (unsigned char)(r[i]-'0');\n\t}\n\n\treturn l[i] - r[i];\n}\n"
  },
  {
    "path": "sources/crystax/src/swapxx.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <endian.h>\n\n#undef swap16\n#undef swap32\n#undef swap64\n\nuint16_t swap16(uint16_t x)\n{\n    return bswap16(x);\n}\n\nuint32_t swap32(uint32_t x)\n{\n    return bswap32(x);\n}\n\nuint64_t swap64(uint64_t x)\n{\n    return bswap64(x);\n}\n"
  },
  {
    "path": "sources/crystax/src/sysctl.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/sysctl.h>\n#include <sys/syscall.h>\n#include <sys/types.h>\n#include <errno.h>\n\n#ifndef __NR__sysctl\n#define __NR__sysctl 1078\n#endif\n\nint __sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,\n    void *newp, size_t newlen)\n{\n    int rc;\n\n    struct __sysctl_args args = {\n        .name    = name,\n        .nlen    = namelen,\n        .oldval  = oldp,\n        .oldlenp = oldlenp,\n        .newval  = newp,\n        .newlen  = newlen,\n    };\n\n    rc = syscall(__NR__sysctl, &args);\n    if (rc != 0) {\n        errno = EFAULT;\n        return -1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/sysv_signal.cpp",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if !defined(__LP64__) && !(defined(__x86_64__) && defined(__ILP32__))\n\n#include <signal.h>\n\nextern sighandler_t _signal(int signum, sighandler_t handler, int flags);\n\nextern \"C\"\nsighandler_t sysv_signal(int signum, sighandler_t handler)\n{\n    return _signal(signum, handler, SA_RESETHAND);\n}\n\n#endif /* !defined(__LP64__) && !(defined(__x86_64__) && defined(__ILP32__)) */\n"
  },
  {
    "path": "sources/crystax/src/tkill.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/syscall.h>\n#include <unistd.h>\n\nint tkill(pid_t tid, int sig)\n{\n    return syscall(__NR_tkill, tid, sig);\n}\n"
  },
  {
    "path": "sources/crystax/src/tls.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX .NET.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX .NET ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX .NET OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX .NET.\n */\n\n#include <crystax/sys/tls.h>\n\nvoid **__crystax_get_tls()\n{\n#if defined(__mips__)\n    /* On mips32r1, this goes via a kernel illegal instruction trap that's optimized for v1. */\n    register void** val asm(\"v1\");\n#else\n    void **val;\n#endif\n\n#if defined(__aarch64__)\n    __asm__(\"mrs %0, tpidr_el0\" : \"=r\"(val));\n#elif defined(__arm__)\n    __asm__(\"mrc p15, 0, %0, c13, c0, 3\" : \"=r\"(val));\n#elif defined(__mips__)\n    __asm__(\".set    push\\n\"\n            \".set    mips32r2\\n\"\n            \"rdhwr   %0,$29\\n\"\n            \".set    pop\\n\" : \"=r\"(val));\n#elif defined(__i386__)\n    __asm__(\"movl %%gs:0, %0\" : \"=r\"(val));\n#elif defined(__x86_64__)\n    __asm__(\"mov %%fs:0, %0\" : \"=r\"(val));\n#else\n#error unsupported architecture\n#endif\n\n    return val;\n}\n\nvoid **__get_tls()\n{\n    return __crystax_get_tls();\n}\n"
  },
  {
    "path": "sources/crystax/src/uname.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/utsname.h>\n#include <string.h>\n#include <sys/system_properties.h>\n\nextern int __uname(struct utsname *buf);\n\nint uname(struct utsname *buf)\n{\n    struct utsname uts;\n    char nodename[PROP_VALUE_MAX];\n    size_t nodelen;\n    int rc;\n\n    rc = __uname(&uts);\n    if (rc != 0) return rc;\n\n    memset(nodename, 0, sizeof(nodename));\n    if (__system_property_get(\"net.hostname\", nodename)) {\n        nodelen = strlen(nodename);\n        if (nodelen >= SYS_NMLN) nodelen = SYS_NMLN - 1;\n        memcpy(uts.nodename, nodename, nodelen);\n        uts.nodename[nodelen] = '\\0';\n    }\n\n    memcpy(buf, &uts, sizeof(uts));\n    return 0;\n}\n"
  },
  {
    "path": "sources/crystax/src/usershell.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#include <crystax/private.h>\n\nchar* getusershell()\n{\n    PANIC(\"getusershell() not implemented!!!\");\n}\n\nvoid setusershell()\n{\n    PANIC(\"setusershell() not implemented!!!\");\n}\n\nvoid endusershell()\n{\n    PANIC(\"endusershell() not implemented!!!\");\n}\n"
  },
  {
    "path": "sources/crystax/src/vfdprintf.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdio.h>\n\nint vfdprintf(int fd, const char* fmt, va_list ap)\n{\n    return vdprintf(fd, fmt, ap);\n}\n"
  },
  {
    "path": "sources/crystax/src/wait3.c",
    "content": "/*\n * Copyright (c) 2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/wait.h>\n\npid_t  wait3(int *status, int options, struct rusage *rusage)\n{\n    return wait4(-1, status, options, rusage);\n}\n"
  },
  {
    "path": "sources/crystax/src/wcswcs.c",
    "content": "/*\n * Copyright (c) 2011-2016 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <wchar.h>\n\nwchar_t *wcswcs(const wchar_t *big, const wchar_t *little)\n{\n    return wcsstr(big, little);\n}\n"
  },
  {
    "path": "sources/crystax/src/write.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/types.h>\n#include <unistd.h>\n\nint __write(int fd, const void *buf, size_t n)\n{\n    return write(fd, buf, n);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/accept.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n#include \"system/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    int extconnfd = system_accept(extfd, addr, addrlen);\n    if (extconnfd == -1)\n        return -1;\n\n    int connfd = alloc_fd(NULL, extconnfd, system::driver_t::instance());\n    if (connfd < 0)\n    {\n        system_close(extconnfd);\n        errno = EMFILE;\n        return -1;\n    }\n\n    DBG(\"return fd=%d\", connfd);\n    return connfd;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    return ::crystax::fileio::accept(sockfd, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/access.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint access(const char *path, int mode)\n{\n    DBG(\"path=%s, mode=%d\", path, mode);\n\n    struct stat st;\n    if (stat(path, &st) == -1)\n        return -1;\n\n    if (((mode & R_OK) && (!(st.st_mode & S_IRUSR))) ||\n        ((mode & W_OK) && (!(st.st_mode & S_IWUSR))) ||\n        ((mode & X_OK) && (!(st.st_mode & S_IXUSR))))\n    {\n        errno = EACCES;\n        return -1;\n    }\n\n    return 0;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint access(const char *path, int mode)\n{\n    return ::crystax::fileio::access(path, mode);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/android.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"crystax/private.h\"\n\nnamespace crystax\n{\n\nnamespace fileio\n{\nnamespace osfs\n{\nbool init(JNIEnv *env);\n} // namespace osfs\n} // namespace fileio\n\n} // namespace crystax\n\nCRYSTAX_GLOBAL __attribute__ ((constructor))\nvoid __crystax_vfs_on_load()\n{\n    DBG(\"initialize vfs module\");\n    if (__crystax_fileio_init() < 0)\n    {\n        ERR(\"vfs initialization failed\");\n        ::abort();\n    }\n}\n\nCRYSTAX_GLOBAL __attribute__ ((destructor))\nvoid __crystax_vfs_on_unload()\n{\n    DBG(\"deinitialize vfs module\");\n}\n\nCRYSTAX_GLOBAL\njint crystax_vfs_jni_on_load(JavaVM *vm)\n{\n    jint jversion = JNI_VERSION_1_4;\n\n    JNIEnv *env = crystax_jnienv();\n\n    TRACE;\n    if (!::crystax::fileio::osfs::init(env))\n    {\n        ERR(\"can't init osfs\");\n        return -1;\n    }\n\n    TRACE;\n    return jversion;\n}\n\nCRYSTAX_GLOBAL\nvoid crystax_vfs_jni_on_unload(JavaVM * /* vm */)\n{\n    TRACE;\n}\n"
  },
  {
    "path": "sources/crystax/vfs/android_jni.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n#include <crystax/vfs.h>\n#include \"crystax/private.h\"\n\nCRYSTAX_GLOBAL\njint JNI_OnLoad(JavaVM* vm, void* reserved)\n{\n    return crystax_vfs_jni_on_load(vm);\n}\n\nCRYSTAX_GLOBAL\nvoid JNI_OnUnload(JavaVM* vm, void* reserved)\n{\n    crystax_vfs_jni_on_unload(vm);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/assets/adriver.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"assets/driver.hpp\"\n\n#define METADATA_V1 1\n\n#define JCHECK \\\n    do \\\n    { \\\n        if (!::crystax::jni::jexcheck()) \\\n        { \\\n            ERR(\"java exception occured\"); \\\n            ::abort(); \\\n        } \\\n    } while(0)\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace assets\n{\n\nusing jni::jhclass;\nusing jni::jhobject;\nusing jni::jhstring;\nusing jni::jhbyteArray;\nusing jni::jhobjectArray;\n\nusing jni::jnienv;\nusing jni::find_class;\nusing jni::get_method_id;\nusing jni::get_field_id;\n\nstatic int const ACCESS_STREAMING = 2;\n\n#if 1\n#define dump_stat(...) do {} while(0)\n#else\nstatic void dump_stat(struct stat const &st)\n{\n    DBG(\"st.st_dev: %llx\", (long long)st.st_dev);\n    DBG(\"st.st_ino: %lx\", (long)st.st_ino);\n    DBG(\"st.st_mode: %x\", (int)st.st_mode);\n    DBG(\"st.st_nlink: %x\", (int)st.st_nlink);\n    DBG(\"st.st_uid: %lx\", (unsigned long)st.st_uid);\n    DBG(\"st.st_gid: %lx\", (unsigned long)st.st_gid);\n    DBG(\"st.st_rdev: %llx\", (long long)st.st_rdev);\n    DBG(\"st.st_size: %lld\", (long long)st.st_size);\n    DBG(\"st.st_blksize: %lu\", (unsigned long)st.st_blksize);\n    DBG(\"st.st_blocks: %llu\", (unsigned long long)st.st_blocks);\n    DBG(\"st.st_atime: %lu\", (unsigned long)st.st_atime);\n    DBG(\"st.st_atime_nsec: %lu\", (unsigned long)st.st_atime_nsec);\n    DBG(\"st.st_mtime: %lu\", (unsigned long)st.st_mtime);\n    DBG(\"st.st_mtime_nsec: %lu\", (unsigned long)st.st_mtime_nsec);\n    DBG(\"st.st_ctime: %lu\", (unsigned long)st.st_ctime);\n    DBG(\"st.st_ctime_nsec: %lu\", (unsigned long)st.st_ctime_nsec);\n    DBG(\"st.st_ino: %llx\", (unsigned long long)st.st_ino);\n}\n#endif\n\nstatic void fill_stat(JNIEnv *env, jhobject const &objContext, fileio::driver_t *d, struct stat *st)\n{\n    jmethodID midContextGetPackageName = get_method_id(\n        env, objContext, \"getPackageName\", \"()Ljava/lang/String;\");\n    JCHECK;\n    jhstring objPackageName((jstring)env->CallObjectMethod(\n        objContext.get(), midContextGetPackageName));\n    JCHECK;\n\n    jmethodID midContextGetPackageManager = get_method_id(\n        env, objContext, \"getPackageManager\", \"()Landroid/content/pm/PackageManager;\");\n    JCHECK;\n    jhobject objPackageManager(env->CallObjectMethod(\n        objContext.get(), midContextGetPackageManager));\n    JCHECK;\n\n    jmethodID midPackageManagerGetApplicationInfo = get_method_id(\n        env, objPackageManager, \"getApplicationInfo\",\n        \"(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;\");\n    JCHECK;\n    jhobject objApplicationInfo(env->CallObjectMethod(\n        objPackageManager.get(), midPackageManagerGetApplicationInfo,\n        objPackageName.get(), 0));\n    JCHECK;\n\n    jfieldID fidAppInfoDataDir = get_field_id(\n        env, objApplicationInfo, \"dataDir\", \"Ljava/lang/String;\");\n    JCHECK;\n    jhstring objDataDir((jstring)env->GetObjectField(objApplicationInfo.get(), fidAppInfoDataDir));\n    JCHECK;\n\n    abspath_t datadir(jcast<const char *>(objDataDir));\n    JCHECK;\n    DBG(\"datadir=%s\", datadir.c_str());\n\n    char *s = (char *)::malloc(datadir.length() + 5);\n    ::strcpy(s, datadir.c_str());\n    ::strcat(s, \"/lib\");\n    abspath_t libdir(s);\n    ::free((void*)s);\n    DBG(\"libdir=%s\", libdir.c_str());\n\n    if (d->stat(libdir.c_str(), st) < 0)\n    {\n        ERR(\"can't get stat for %s\", libdir.c_str());\n        ::abort();\n    }\n\n    st->st_mode = S_IFREG|S_IRWXU;\n    st->st_nlink = 1;\n    st->st_uid = ::getuid();\n    st->st_gid = ::getgid();\n\n    DBG(\"source stat: mode=%d, uid=%d, gid=%d, atime=%lu, mtime=%lu, ctime=%lu\",\n        (int)st->st_mode, (int)st->st_uid, (int)st->st_gid,\n        (unsigned long)st->st_atime, (unsigned long)st->st_mtime, (unsigned long)st->st_ctime);\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::init_jni(JNIEnv *env, jhobject const &objContext)\n{\n    jmethodID midContextGetAssets = get_method_id(\n        env, objContext, \"getAssets\", \"()Landroid/content/res/AssetManager;\");\n    JCHECK;\n    jhobject objAM = jni::call_method<jhobject>(env, objContext, midContextGetAssets);\n    JCHECK;\n    objAssetManager = env->NewGlobalRef(objAM.get());\n\n    midAmOpen = get_method_id(env, objAM,\n        \"open\", \"(Ljava/lang/String;I)Ljava/io/InputStream;\");\n    JCHECK;\n\n    midAmList = get_method_id(env, objAM,\n        \"list\", \"(Ljava/lang/String;)[Ljava/lang/String;\");\n    JCHECK;\n\n    jhclass clsInputStream = find_class(env, \"java/io/InputStream\");\n    JCHECK;\n\n    midIsClose = get_method_id(env, clsInputStream, \"close\", \"()V\");\n    JCHECK;\n\n    midIsAvail = get_method_id(env, clsInputStream, \"available\", \"()I\");\n    JCHECK;\n\n    midIsRead = get_method_id(env, clsInputStream, \"read\", \"([B)I\");\n    JCHECK;\n\n    midIsSkip = get_method_id(env, clsInputStream, \"skip\", \"(J)J\");\n    JCHECK;\n\n    midIsMark = get_method_id(env, clsInputStream, \"mark\", \"(I)V\");\n    JCHECK;\n\n    midIsReset = get_method_id(env, clsInputStream, \"reset\", \"()V\");\n    JCHECK;\n}\n\nCRYSTAX_LOCAL\nbool driver_t::read_metadata_entry(int fd, abspath_t *abspath, bool *removed)\n{\n    uint8_t version;\n    ssize_t n = underlying()->read(fd, &version, sizeof(version));\n    if (n != sizeof(version))\n    {\n        ERR(\"can't read version field\");\n        return false;\n    }\n    if (version != METADATA_V1)\n    {\n        ERR(\"Unknown metadata version: %d\", version);\n        return false;\n    }\n\n    uint32_t length;\n    n = underlying()->read(fd, &length, sizeof(length));\n    if (n != sizeof(length))\n    {\n        ERR(\"can't read length field\");\n        return false;\n    }\n\n    scope_c_ptr_t<char> path((char*)::malloc(length + 1));\n    n = underlying()->read(fd, path.get(), length);\n    if ((size_t)n != length)\n    {\n        ERR(\"can't read path field\");\n        return false;\n    }\n    path[length] = '\\0';\n\n    uint8_t flag;\n    n = underlying()->read(fd, &flag, sizeof(flag));\n    if (n != sizeof(flag))\n    {\n        ERR(\"can't read flag field\");\n        return false;\n    }\n\n    abspath->reset(path.get());\n    *removed = (bool)flag;\n\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool driver_t::write_metadata_entry(int fd, abspath_t const &abspath, bool removed)\n{\n    uint8_t version = METADATA_V1;\n\n    ssize_t n = underlying()->write(fd, &version, sizeof(version));\n    if (n != sizeof(version))\n    {\n        ERR(\"can't write version field\");\n        return false;\n    }\n\n    uint32_t length = abspath.length();\n    n = underlying()->write(fd, &length, sizeof(length));\n    if (n != sizeof(length))\n    {\n        ERR(\"can't write length field\");\n        return false;\n    }\n\n    n = underlying()->write(fd, abspath.c_str(), abspath.length());\n    if ((size_t)n != abspath.length())\n    {\n        ERR(\"can't write path field\");\n        return false;\n    }\n\n    uint8_t flag = removed ? 1 : 0;\n    n = underlying()->write(fd, &flag, sizeof(flag));\n    if (n != sizeof(flag))\n    {\n        ERR(\"can't write flag field\");\n        return false;\n    }\n\n    return true;\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::load_metadata()\n{\n    scope_lock_t guard(metadata_mutex);\n\n    struct stat st;\n    abspath_t mpath(root().c_str());\n    mpath += \".metadata\";\n    if (underlying()->stat(mpath.c_str(), &st) < 0)\n        return;\n\n    int fd = underlying()->open(mpath.c_str(), O_RDONLY);\n    if (fd < 0)\n        return;\n\n    for (;;)\n    {\n        abspath_t abspath;\n        bool removed;\n        if (!read_metadata_entry(fd, &abspath, &removed))\n            break;\n\n        DBG(\"add metadata entry: %s\", abspath.c_str());\n        metadata.push_back(new metadata_entry_t(abspath.c_str(), removed));\n    }\n    underlying()->close(fd);\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::save_metadata()\n{\n    scope_lock_t guard(metadata_mutex);\n\n    abspath_t mpath(root().c_str());\n    mpath += \".metadata\";\n    int fd = underlying()->open(mpath.c_str(), O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);\n    if (fd < 0)\n    {\n        ERR(\"can't open metadata for save\");\n        ::abort();\n    }\n\n    for (metadata_entry_t *entry = metadata.head(); entry; entry = entry->next)\n    {\n        if (!write_metadata_entry(fd, entry->path, entry->removed))\n        {\n            ERR(\"can't write metadata entry: %s\", entry->path.c_str());\n            ::abort();\n        }\n    }\n\n    underlying()->close(fd);\n}\n\nCRYSTAX_LOCAL\nbool driver_t::metadata_comparator(metadata_entry_t const &e, const char *path)\n{\n    abspath_t abspath(path);\n    return e.path == abspath;\n}\n\nCRYSTAX_LOCAL\ndriver_t::driver_t(const char *root, jobject obj, fileio::driver_t *d)\n    :fileio::driver_t(root, d)\n{\n    pthread_mutexattr_t attr;\n    if (::pthread_mutexattr_init(&attr) != 0)\n        ::abort();\n    if (::pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)\n        ::abort();\n\n    if (::pthread_mutex_init(&fd_table_mutex, &attr) != 0)\n        ::abort();\n    init_fd();\n\n    JNIEnv *env = jnienv();\n\n    jhobject objContext(obj);\n    fill_stat(env, objContext, underlying(), &sst);\n    init_jni(env, objContext);\n\n    if (::pthread_mutex_init(&metadata_mutex, &attr) != 0)\n        ::abort();\n    //load_metadata();\n\n    if (::pthread_mutexattr_destroy(&attr) != 0)\n        ::abort();\n}\n\nCRYSTAX_LOCAL\ndriver_t::~driver_t()\n{\n    jnienv()->DeleteGlobalRef(objAssetManager);\n\n    if (::pthread_mutex_destroy(&fd_table_mutex) != 0)\n        ::abort();\n    if (::pthread_mutex_destroy(&metadata_mutex) != 0)\n        ::abort();\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::init_fd()\n{\n    scope_lock_t lock(fd_table_mutex);\n    for (size_t fd = 0; fd != sizeof(fd_table)/sizeof(fd_table[0]); ++fd)\n    {\n        fd_entry_t &e = fd_table[fd];\n        e.obj = NULL;\n        e.pos = 0;\n        e.size = 0;\n        e.extfd = -1;\n        e.path.reset();\n    }\n}\n\nCRYSTAX_LOCAL\nint driver_t::alloc_fd(jobject obj, size_t size, abspath_t const &abspath)\n{\n    DBG(\"obj=%p\", obj);\n    if (obj == NULL)\n        return -1;\n\n    JNIEnv *env = jnienv();\n    scope_lock_t lock(fd_table_mutex);\n    for (size_t fd = 0; fd != sizeof(fd_table)/sizeof(fd_table[0]); ++fd)\n    {\n        fd_entry_t &e = fd_table[fd];\n        if (e.obj != NULL || e.extfd != -1)\n            continue;\n\n        DBG(\"NewGlobalRef for obj %p\", obj);\n        e.obj = env->NewGlobalRef(obj);\n        e.pos = 0;\n        e.size = size;\n        e.extfd = -1;\n        e.path.reset(::strdup(abspath.c_str()));\n        return fd;\n    }\n\n    return -1;\n}\n\nCRYSTAX_LOCAL\nint driver_t::alloc_fd(int extfd, abspath_t const &abspath)\n{\n    DBG(\"extfd=%d\", extfd);\n    if (extfd < 0)\n        return -1;\n\n    scope_lock_t lock(fd_table_mutex);\n    for (size_t fd = 0; fd != sizeof(fd_table)/sizeof(fd_table[0]); ++fd)\n    {\n        fd_entry_t &e = fd_table[fd];\n        if (e.obj != NULL || e.extfd != -1)\n            continue;\n\n        e.obj = NULL;\n        e.pos = 0;\n        e.size = 0;\n        e.extfd = extfd;\n        e.path.reset(::strdup(abspath.c_str()));\n        return fd;\n    }\n\n    return -1;\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::free_fd(int fd)\n{\n    DBG(\"fd=%d\", fd);\n    if (fd < 0 || (size_t)fd >= sizeof(fd_table)/sizeof(fd_table[0]))\n        return;\n\n    JNIEnv *env = jnienv();\n\n    scope_lock_t lock(fd_table_mutex);\n\n    fd_entry_t &e = fd_table[fd];\n    if (e.obj)\n        env->DeleteGlobalRef(e.obj);\n    e.obj = NULL;\n    e.pos = 0;\n    e.size = 0;\n    e.extfd = -1;\n    e.path.reset();\n}\n\nCRYSTAX_LOCAL\nbool driver_t::resolve(int fd, jobject *obj, size_t *pos, size_t *size, int *extfd, abspath_t *abspath)\n{\n    DBG(\"fd=%d\", fd);\n    if (fd < 0 || (size_t)fd >= sizeof(fd_table)/sizeof(fd_table[0]))\n        return false;\n\n    scope_lock_t lock(fd_table_mutex);\n\n    fd_entry_t &e = fd_table[fd];\n    if (obj) *obj = e.obj;\n    if (pos) *pos = e.pos;\n    if (size) *size = e.size;\n    if (extfd) *extfd = e.extfd;\n    if (abspath) abspath->reset(::strdup(e.path.c_str()));\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool driver_t::update(int fd, size_t pos)\n{\n    DBG(\"fd=%d\", fd);\n    if (fd < 0 || (size_t)fd >= sizeof(fd_table)/sizeof(fd_table[0]))\n        return false;\n\n    scope_lock_t lock(fd_table_mutex);\n\n    fd_entry_t &e = fd_table[fd];\n    e.pos = pos;\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool driver_t::check_subpath(abspath_t const &abspath)\n{\n    //DBG(\"abspath=%s\", abspath.c_str());\n    if (!abspath.subpath(root()))\n    {\n        //ERR(\"path %s is not subpath of %s\", abspath.c_str(), root().c_str());\n        errno = EINVAL;\n        return false;\n    }\n    //DBG(\"path %s is subpath of %s\", abspath.c_str(), root().c_str());\n    return true;\n}\n\nCRYSTAX_LOCAL\nint driver_t::chown(const char * /* path */, uid_t /* uid */, gid_t /* gid */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::close(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    JNIEnv *env = jnienv();\n\n    jobject obj;\n    int extfd;\n    if (!resolve(fd, &obj, NULL, NULL, &extfd, NULL))\n    {\n        ERR(\"can't resolve fd=%d\", fd);\n        errno = EINVAL;\n        return -1;\n    }\n\n    DBG(\"use obj=%p\", obj);\n    jhobject objInputStream(obj ? env->NewLocalRef(obj) : 0);\n    free_fd(fd);\n\n    if (objInputStream)\n    {\n        jni::call_method<void>(env, objInputStream, midIsClose);\n        env->ExceptionClear();\n    }\n\n    if (extfd >= 0)\n    {\n        DBG(\"extfd=%d\", extfd);\n        underlying()->close(extfd);\n    }\n\n    DBG(\"return 0\");\n    return 0;\n}\n\nCRYSTAX_LOCAL\nint driver_t::closedir(DIR *dirp)\n{\n    TRACE;\n    return underlying()->closedir(dirp);\n}\n\nCRYSTAX_LOCAL\nbool driver_t::copy_from_assets(abspath_t const &abspath, path_t const &rpath)\n{\n    DBG(\"abspath=%s, rpath=%s\", abspath.c_str(), rpath.c_str());\n    abspath_t dir(abspath.dirname());\n    if (mkdir_p(dir, S_IRWXU) != 0)\n    {\n        TRACE;\n        return false;\n    }\n\n    TRACE;\n    JNIEnv *env = jnienv();\n\n    jhobject objInputStream = jni::call_method<jhobject>(env,\n        objAssetManager, midAmOpen, jcast<jhstring>(rpath), ACCESS_STREAMING);\n    if (env->ExceptionCheck())\n    {\n        TRACE;\n        env->ExceptionClear();\n        errno = ENOENT;\n        return false;\n    }\n\n    TRACE;\n    int fd = underlying()->open(abspath.c_str(), O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);\n    DBG(\"fd=%d\", fd);\n    if (fd == -1)\n    {\n        jni::call_method<void>(env, objInputStream, midIsClose);\n        env->ExceptionClear();\n        return false;\n    }\n\n    char buf[4096];\n    jhbyteArray objArray(env->NewByteArray(sizeof(buf)));\n    for (;;)\n    {\n        jint n = jni::call_method<jint>(env, objInputStream, midIsReset, objArray);\n        DBG(\"n=%d\", n);\n        bool success = !env->ExceptionCheck();\n        env->ExceptionClear();\n        if (!success)\n        {\n            TRACE;\n            jni::call_method<void>(env, objInputStream, midIsClose);\n            env->ExceptionClear();\n            underlying()->close(fd);\n            errno = EFAULT;\n            return false;\n        }\n\n        TRACE;\n        if (n < 0)\n        {\n            TRACE;\n            break;\n        }\n\n        TRACE;\n        env->GetByteArrayRegion(objArray.get(), 0, n, (jbyte*)buf);\n        if (underlying()->write(fd, buf, n) < 0)\n        {\n            TRACE;\n            int save_errno = errno;\n            jni::call_method<void>(env, objInputStream, midIsClose);\n            env->ExceptionClear();\n            underlying()->close(fd);\n            errno = save_errno;\n            return false;\n        }\n    }\n\n    TRACE;\n    jni::call_method<void>(env, objInputStream, midIsClose);\n    env->ExceptionClear();\n    underlying()->close(fd);\n\n    return true;\n}\n\nCRYSTAX_LOCAL\nint driver_t::dirfd(DIR * /* dirp */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::dup(int /* fd */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::dup2(int /* fd */, int /* fd2 */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::fchown(int fd, uid_t uid, gid_t gid)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::fcntl(int /* fd */, int /* command */, va_list &/* vl */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::fdatasync(int /* fd */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nDIR *driver_t::fdopendir(int /* fd */)\n{\n    NOT_IMPLEMENTED_NULL;\n}\n\nCRYSTAX_LOCAL\nint driver_t::flock(int /* fd */, int /* operation */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::fstat(int fd, struct stat *st)\n{\n    abspath_t abspath;\n    if (!resolve(fd, NULL, NULL, NULL, NULL, &abspath))\n    {\n        ERR(\"wrong fd passed\");\n        errno = EINVAL;\n        return -1;\n    }\n\n    return stat(abspath.c_str(), st);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fsync(int /* fd */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::ftruncate(int /* fd */, off_t /* offset */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::getdents(unsigned int /* fd */, struct dirent * /* entry */, unsigned int /* count */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::ioctl(int fd, int request, va_list &vl)\n{\n    DBG(\"fd=%d, request=%d\", fd, request);\n\n    jobject obj;\n    int extfd;\n    if (!resolve(fd, &obj, NULL, NULL, &extfd, NULL))\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    if (extfd != -1)\n    {\n        DBG(\"use extfd=%d\", extfd);\n        return underlying()->ioctl(extfd, request, vl);\n    }\n\n    DBG(\"use obj=%p\", obj);\n\n    JNIEnv *env = jnienv();\n\n    switch (request)\n    {\n    case FIONREAD:\n        {\n            int *avail = va_arg(vl, int *);\n            if (avail == NULL)\n            {\n                errno = EINVAL;\n                return -1;\n            }\n\n            *avail = jni::call_method<jint>(env, obj, midIsAvail);\n            if (env->ExceptionCheck())\n            {\n                env->ExceptionClear();\n                errno = EFAULT;\n                return -1;\n            }\n\n            return 0;\n        }\n        break;\n    default:\n        NOT_IMPLEMENTED;\n    }\n}\n\nCRYSTAX_LOCAL\nint driver_t::lchown(const char * /* path */, uid_t /* uid */, gid_t /* gid */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::link(const char * /* src */, const char * /* dst */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\noff_t driver_t::lseek(int fd, off_t offset, int whence)\n{\n    return lseek64(fd, offset, whence);\n}\n\nCRYSTAX_LOCAL\nloff_t driver_t::lseek64(int fd, loff_t offset, int whence)\n{\n    DBG(\"fd=%d, offset=%ld, whence=%d\", fd, (long)offset, whence);\n\n    jobject obj;\n    size_t pos;\n    size_t size;\n    int extfd;\n    if (!resolve(fd, &obj, &pos, &size, &extfd, NULL))\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    if (extfd != -1)\n    {\n        DBG(\"use extfd=%d\", extfd);\n        return underlying()->lseek64(extfd, offset, whence);\n    }\n\n    DBG(\"use obj=%p\", obj);\n\n    JNIEnv *env = jnienv();\n\n    switch (whence)\n    {\n    case SEEK_SET:\n        if (offset < 0)\n            offset = 0;\n        if (offset > size)\n            offset = size;\n        pos = offset;\n        DBG(\"fd=%d: SEEK_SET: pos=%lld\", fd, (long long)pos);\n        break;\n    case SEEK_CUR:\n        if (pos + offset < 0)\n            offset = -pos;\n        if (pos + offset > size)\n            offset = size - pos;\n        pos += offset;\n        DBG(\"fd=%d: SEEK_CUR: pos=%lld\", fd, (long long)pos);\n        break;\n    case SEEK_END:\n        if (offset > 0)\n            offset = 0;\n        if (-offset > size)\n            offset = -size;\n        pos = size + offset;\n        DBG(\"fd=%d: SEEK_END: pos=%lld\", fd, (long long)pos);\n        break;\n    default:\n        DBG(\"fd=%d: unknown whence value: %d\", fd, whence);\n    }\n\n    jni::call_method<void>(env, obj, midIsReset);\n    if (env->ExceptionCheck())\n    {\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n    jni::call_method<jlong>(env, obj, midIsSkip, (jlong)pos);\n    if (env->ExceptionCheck())\n    {\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n\n    update(fd, pos);\n\n    return pos;\n}\n\nCRYSTAX_LOCAL\nint driver_t::lstat(const char * /* path */, struct stat * /* st */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::mkdir(const char *path, mode_t mode)\n{\n    return underlying()->mkdir(path, mode);\n}\n\nCRYSTAX_LOCAL\nint driver_t::mkdir_p(abspath_t const &abspath, mode_t mode)\n{\n    DBG(\"abspath=%s\", abspath.c_str());\n    if (!abspath || abspath.length() > PATH_MAX)\n    {\n        errno = EINVAL;\n        return -1;\n    }\n\n    char buf[PATH_MAX + 1];\n\n    for (const char *s = abspath.c_str(), *p = s + 1; s; p = s + 1)\n    {\n        s = ::strchr(p, '/');\n        size_t len = s ? s - abspath.c_str() : abspath.length();\n        ::strncpy(buf, abspath.c_str(), len);\n        buf[len] = '\\0';\n        int e = mkdir(buf, mode);\n        if (e == -1 && errno != EEXIST)\n            return -1;\n    }\n\n    return 0;\n}\n\nCRYSTAX_LOCAL\nint driver_t::open(const char *path, int oflag, va_list &vl)\n{\n    DBG(\"path=%s, oflag=%d\", path, oflag);\n\n    abspath_t abspath(path);\n    if (!check_subpath(abspath))\n        return -1;\n\n    // {\n    //     DBG(\"check metadata...\");\n    //     scope_lock_t guard(metadata_mutex);\n    //     metadata_entry_t *entry = metadata.find(metadata_comparator, abspath.c_str());\n    //     if (entry)\n    //     {\n    //         DBG(\"metadata entry found\");\n    //         if (entry->removed)\n    //         {\n    //             if ((oflag & O_CREAT) == 0)\n    //             {\n    //                 errno = ENOENT;\n    //                 return -1;\n    //             }\n\n    //             entry->removed = false;\n    //         }\n    //     }\n    // }\n\n    path_t rpath(abspath.relpath(root()));\n    DBG(\"rpath=%s\", rpath.c_str());\n\n    bool ul = false;\n    struct stat ulst;\n    if (oflag & (O_WRONLY|O_RDWR))\n    {\n        if (!copy_from_assets(abspath, rpath) && errno != ENOENT)\n            return -1;\n        ul = true;\n    }\n    else if (stat_ul(abspath, rpath, &ulst) == 0)\n        ul = true;\n\n    if (ul)\n    {\n        DBG(\"pass to underlying driver\");\n        int extfd = underlying()->open(path, oflag, vl);\n        DBG(\"extfd=%d\", extfd);\n        int fd = alloc_fd(extfd, abspath);\n        if (fd < 0)\n        {\n            DBG(\"can't alloc fd\");\n            underlying()->close(extfd);\n            errno = EMFILE;\n            return -1;\n        }\n        DBG(\"return fd=%d\", fd);\n        return fd;\n    }\n\n    JNIEnv *env = jnienv();\n\n    jhobject objInputStream = jni::call_method<jhobject>(env, objAssetManager, midAmOpen,\n        jcast<jhstring>(rpath), ACCESS_STREAMING);\n    if (env->ExceptionCheck())\n    {\n        ERR(\"can't open %s\", rpath.c_str());\n        env->ExceptionClear();\n        errno = ENOENT;\n        return -1;\n    }\n    DBG(\"objInputStream=%p\", objInputStream.get());\n\n    jni::call_method<void>(env, objInputStream, midIsMark, (jint)INT_MAX);\n    if (env->ExceptionCheck())\n    {\n        ERR(\"can't set mark on stream\");\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n    size_t size = (size_t)jni::call_method<jlong>(env, objInputStream, midIsSkip, (jlong)INT_MAX);\n    if (env->ExceptionCheck())\n    {\n        ERR(\"can't skip stream to the end\");\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n    DBG(\"size=%u\", (unsigned)size);\n    jni::call_method<void>(env, objInputStream, midIsReset);\n    if (env->ExceptionCheck())\n    {\n        ERR(\"can't reset stream\");\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n\n    int fd = alloc_fd(objInputStream.get(), size, abspath);\n    if (fd < 0)\n    {\n        ERR(\"can't alloc fd\");\n        jni::call_method<void>(env, objInputStream, midIsClose);\n        env->ExceptionClear();\n        errno = EMFILE;\n        return -1;\n    }\n\n    DBG(\"return fd=%d\", fd);\n    return fd;\n}\n\nCRYSTAX_LOCAL\nDIR *driver_t::opendir(const char *dirpath)\n{\n    DBG(\"dirpath=%s\", dirpath);\n    return underlying()->opendir(dirpath);\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::pread(int /* fd */, void * /* buf */, size_t /* count */, off_t /* offset */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::pwrite(int /* fd */, const void * /* buf */, size_t /* count */, off_t /* offset */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::read(int fd, void *buf, size_t count)\n{\n    DBG(\"fd=%d, count=%u\", fd, (unsigned)count);\n\n    if (count == 0)\n    {\n        DBG(\"request 0 bytes\");\n        return 0;\n    }\n\n    jobject obj;\n    size_t pos;\n    int extfd;\n    if (!resolve(fd, &obj, &pos, NULL, &extfd, NULL))\n    {\n        ERR(\"wrong fd passed\");\n        errno = EINVAL;\n        return -1;\n    }\n\n    if (extfd != -1)\n    {\n        DBG(\"use extfd=%d\", extfd);\n        return underlying()->read(extfd, buf, count);\n    }\n\n    DBG(\"use obj=%p\", obj);\n    JNIEnv *env = jnienv();\n\n    jhbyteArray objArray(env->NewByteArray(count));\n    if (env->ExceptionCheck())\n    {\n        env->ExceptionClear();\n        ERR(\"can't allocate %u bytes\", (unsigned)count);\n        errno = ENOMEM;\n        return -1;\n    }\n\n    jint n = jni::call_method<jint>(env, obj, midIsRead, objArray);\n    if (env->ExceptionCheck())\n    {\n        ERR(\"java read failed\");\n        env->ExceptionClear();\n        errno = EFAULT;\n        return -1;\n    }\n    if (n < 0)\n    {\n        DBG(\"eof reached\");\n        return 0;\n    }\n\n    if ((size_t)n > count)\n    {\n        ERR(\"java read return more than requested\");\n        errno = EFAULT;\n        return -1;\n    }\n\n    DBG(\"java read return %d\", (int)n);\n    pos += n;\n    update(fd, pos);\n\n    env->GetByteArrayRegion(objArray.get(), 0, n, (jbyte*)buf);\n\n    DBG(\"return %d bytes\", (unsigned)n);\n    return n;\n}\n\nCRYSTAX_LOCAL\nint driver_t::readv(int /* fd */, const struct iovec * /* iov */, int /* count */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nstruct dirent *driver_t::readdir(DIR *dirp)\n{\n    TRACE;\n    return underlying()->readdir(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)\n{\n    TRACE;\n    return underlying()->readdir_r(dirp, entry, result);\n}\n\nCRYSTAX_LOCAL\nint driver_t::readlink(const char * /* path */, char * /* buf */, size_t /* bufsize */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::remove(const char *path)\n{\n    DBG(\"path=%s\", path);\n    return underlying()->remove(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::rename(const char *oldpath, const char *newpath)\n{\n    DBG(\"oldpath=%s, newpath=%s\", oldpath, newpath);\n\n    fileio::driver_t *d = find_driver(oldpath);\n    if (!d)\n        return -1;\n\n    if (d != underlying())\n    {\n        ERR(\"cross device rename not supported\");\n        errno = EXDEV;\n        return -1;\n    }\n\n    // scope_lock_t guard(metadata_mutex);\n    // metadata_entry_t *entry = metadata.find(metadata_comparator, oldpath);\n    // if (entry && entry->removed)\n    // {\n    //     errno = ENOENT;\n    //     return -1;\n    // }\n\n    if (underlying()->rename(oldpath, newpath) < 0)\n        return -1;\n\n    // if (!entry)\n    // {\n    //     entry = new metadata_entry_t(oldpath, true);\n    //     metadata.push_back(entry);\n    // }\n\n    // entry->removed = true;\n\n    return 0;\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::rewinddir(DIR * /* dirp */)\n{\n    NOT_IMPLEMENTED_BASE;\n}\n\nCRYSTAX_LOCAL\nint driver_t::rmdir(const char *path)\n{\n    DBG(\"path=%s\", path);\n    return underlying()->rmdir(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::scandir(const char * /* dir */, struct dirent *** /* namelist */, int (* /* filter */)(const struct dirent *),\n    int (* /* compar */)(const struct dirent **, const struct dirent **))\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::seekdir(DIR * /* dirp */, long /* offset */)\n{\n    NOT_IMPLEMENTED_BASE;\n}\n\nCRYSTAX_LOCAL\nint driver_t::select(int /* maxfd */, fd_set * /* rfd */, fd_set * /* wfd */, fd_set * /* efd */, struct timeval * /* tv */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::stat(const char *path, struct stat *st)\n{\n    DBG(\"path=%s\", path);\n\n    abspath_t abspath(path);\n    if (!check_subpath(abspath))\n        return -1;\n\n    path_t rpath(abspath.relpath(root()));\n    DBG(\"rpath=%s\", rpath.c_str());\n\n    if (stat_ul(abspath, rpath, st) == 0)\n        return 0;\n\n    return stat_as(rpath, st);\n\n    // struct stat ulst, asst;\n    // DBG(\"ask underlying driver\");\n    // int ule = underlying()->stat(abspath.c_str(), &ulst);\n    // DBG(\"ask assets driver\");\n    // int ase = stat_as(rpath, &asst);\n    // if (ase == 0 && (ule != 0 || ulst.st_mtime < asst.st_mtime))\n    // {\n    //     DBG(\"use asset's stat\");\n    //     underlying()->unlink(abspath.c_str());\n    //     ::memcpy(st, &asst, sizeof(asst));\n    //     return 0;\n    // }\n    // if (ule == 0 && (ase != 0 || ulst.st_mtime >= asst.st_mtime))\n    // {\n    //     DBG(\"use underlying stat\");\n    //     ::memcpy(st, &ulst, sizeof(ulst));\n    //     return 0;\n    // }\n    //\n    // DBG(\"no such entry\");\n    // errno = ENOENT;\n    // return -1;\n}\n\nCRYSTAX_LOCAL\nint driver_t::stat_as(path_t const &rpath, struct stat *st)\n{\n    JNIEnv *env = jnienv();\n\n    DBG(\"is it file?\");\n    jhstring objPath = jcast<jhstring>(rpath);\n    jhobject objInputStream = jni::call_method<jhobject>(env, objAssetManager, midAmOpen,\n        objPath, ACCESS_STREAMING);\n    env->ExceptionClear();\n    if (objInputStream)\n    {\n        DBG(\"it is file\");\n\n        jlong skipped = jni::call_method<jlong>(env, objInputStream, midIsSkip, (jlong)INT_MAX);\n        env->ExceptionClear();\n        jni::call_method<void>(env, objInputStream, midIsClose);\n        env->ExceptionClear();\n\n        ::memcpy(st, &sst, sizeof(struct stat));\n        st->st_mode = S_IFREG|S_IRWXU;\n        st->st_size = (size_t)skipped;\n        dump_stat(*st);\n        return 0;\n    }\n\n    DBG(\"is it directory?\");\n    jhobjectArray objArray = jni::call_method<jhobjectArray>(env, objAssetManager, midAmList, objPath);\n    env->ExceptionClear();\n    if (objArray && env->GetArrayLength(objArray.get()) > 0)\n    {\n        DBG(\"it is directory\");\n        ::memcpy(st, &sst, sizeof(struct stat));\n        st->st_mode = S_IFDIR|S_IRWXU;\n        dump_stat(*st);\n        return 0;\n    }\n\n    DBG(\"no such entry\");\n    errno = ENOENT;\n    return -1;\n}\n\nCRYSTAX_LOCAL\nint driver_t::stat_ul(abspath_t const &abspath, path_t const &rpath, struct stat *st)\n{\n    int ret = underlying()->stat(abspath.c_str(), st);\n    if (ret == 0)\n    {\n        DBG(\"entry found\");\n        dump_stat(*st);\n    }\n    return ret;\n    // struct stat ulst, asst;\n    // bool ulexists = underlying()->stat(abspath.c_str(), &ulst);\n    // bool asexists = stat_as(rpath, &asst);\n    // if (asexists && (!ulexists || ulst.st_mtime < asst.st_mtime))\n    // {\n    //     underlying()->unlink(abspath.c_str());\n    //     ulexists = false;\n    // }\n    //\n    // if (!ulexists)\n    // {\n    //     errno = ENOENT;\n    //     return -1;\n    // }\n    //\n    // ::memcpy(st, &ulst, sizeof(ulst));\n    // return 0;\n}\n\nCRYSTAX_LOCAL\nint driver_t::symlink(const char * /* src */, const char * /* dst */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nlong driver_t::telldir(DIR * /* dirp */)\n{\n    NOT_IMPLEMENTED;\n}\n\nCRYSTAX_LOCAL\nint driver_t::unlink(const char *path)\n{\n    // scope_lock_t guard(metadata_mutex);\n\n    // metadata_entry_t *entry = metadata.find(metadata_comparator, path);\n    // if (!entry)\n    // {\n    //     entry = new metadata_entry_t(path, false);\n    //     if (!metadata.push_back(entry))\n    //     {\n    //         errno = EFAULT;\n    //         return -1;\n    //     }\n    // }\n    // entry->removed = true;\n    // save_metadata();\n\n    underlying()->unlink(path);\n\n    return 0;\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::write(int fd, const void *buf, size_t count)\n{\n    DBG(\"fd=%d, count=%u\", fd, (unsigned)count);\n\n    int extfd;\n    if (!resolve(fd, NULL, NULL, NULL, &extfd, NULL))\n    {\n        ERR(\"wrong fd passed\");\n        errno = EINVAL;\n        return -1;\n    }\n\n    return underlying()->write(extfd, buf, count);\n}\n\nCRYSTAX_LOCAL\nint driver_t::writev(int /* fd */, const struct iovec * /* iov */, int /* count */)\n{\n    NOT_IMPLEMENTED;\n}\n\n} // namespace assets\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/assets/driver.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_ASSETS_DRIVER_HPP_ab9b561c8d5944db8adb1654680308cd\n#define _CRYSTAX_FILEIO_ASSETS_DRIVER_HPP_ab9b561c8d5944db8adb1654680308cd\n\n#include <crystax/list.hpp>\n#include \"fileio/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace assets\n{\n\nclass driver_t : public ::crystax::fileio::driver_t\n{\npublic:\n    driver_t(const char *root, jobject context, fileio::driver_t *d);\n    ~driver_t();\n\n    const char *name() const {return \"ASSETS\";}\n    const char *info() const {return root().c_str();}\n\n    int    chown(const char *path, uid_t uid, gid_t gid);\n    int    close(int fd);\n    int    closedir(DIR *dirp);\n    int    dirfd(DIR *dirp);\n    int    dup(int fd);\n    int    dup2(int fd, int fd2);\n    int    fchown(int fd, uid_t uid, gid_t gid);\n    int    fcntl(int fd, int command, va_list &vl);\n    int    fdatasync(int fd);\n    DIR *  fdopendir(int fd);\n    int    flock(int fd, int operation);\n    int    fstat(int fd, struct stat *st);\n    int    fsync(int fd);\n    int    ftruncate(int fd, off_t offset);\n    int    getdents(unsigned int fd, struct dirent *entry, unsigned int count);\n    int    ioctl(int fd, int request, va_list &vl);\n    int    lchown(const char *path, uid_t uid, gid_t gid);\n    int    link(const char *src, const char *dst);\n    off_t  lseek(int fd, off_t offset, int whence);\n    loff_t lseek64(int fd, loff_t offset, int whence);\n    int    lstat(const char *path, struct stat *st);\n    int    mkdir(const char *path, mode_t mode);\n    int    open(const char *path, int oflag, va_list &vl);\n    DIR *  opendir(const char *dirpath);\n    ssize_t pread(int fd, void *buf, size_t count, off_t offset);\n    ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);\n    ssize_t read(int fd, void *buf, size_t count);\n    int    readv(int fd, const struct iovec *iov, int count);\n    struct dirent *readdir(DIR *dirp);\n    int    readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);\n    int    readlink(const char *path, char *buf, size_t bufsize);\n    int    remove(const char *path);\n    int    rename(const char *oldpath, const char *newpath);\n    void   rewinddir(DIR *dirp);\n    int    rmdir(const char *path);\n    int    scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n        int (*compar)(const struct dirent **, const struct dirent **));\n    void   seekdir(DIR *dirp, long offset);\n    int    select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv);\n    int    stat(const char *path, struct stat *st);\n    int    symlink(const char *src, const char *dst);\n    long   telldir(DIR *dirp);\n    int    unlink(const char *path);\n    ssize_t write(int fd, const void *buf, size_t count);\n    int    writev(int fd, const struct iovec *iov, int count);\n\nprivate:\n    void init_jni(JNIEnv *env, jni::jhobject const &objContext);\n    bool check_subpath(abspath_t const &abspath);\n\n    int stat_as(path_t const &rpath, struct stat *st);\n    int stat_ul(abspath_t const &abspath, path_t const &rpath, struct stat *st);\n\n    int mkdir_p(abspath_t const &abspath, mode_t mode);\n    bool copy_from_assets(abspath_t const &abspath, path_t const &rpath);\n\n    void init_fd();\n    int alloc_fd(jobject obj, size_t size, abspath_t const &abspath);\n    int alloc_fd(int extfd, abspath_t const &abspath);\n    void free_fd(int fd);\n    bool resolve(int fd, jobject *obj, size_t *pos, size_t *size, int *extfd, abspath_t *abspath);\n    bool update(int fd, size_t pos);\n\n    void load_metadata();\n    void save_metadata();\n    bool read_metadata_entry(int fd, abspath_t *abspath, bool *removed);\n    bool write_metadata_entry(int fd, abspath_t const &abspath, bool removed);\n\nprivate:\n    jobject objAssetManager;\n\n    jmethodID midAmOpen;\n    jmethodID midAmList;\n    jmethodID midIsClose;\n    jmethodID midIsAvail;\n    jmethodID midIsRead;\n    jmethodID midIsSkip;\n    jmethodID midIsMark;\n    jmethodID midIsReset;\n\n    struct stat sst;\n\n    struct fd_entry_t\n    {\n        jobject obj;\n        size_t pos;\n        size_t size;\n        int extfd;\n        abspath_t path;\n    };\n\n    fd_entry_t fd_table[FD_TABLE_SIZE];\n    pthread_mutex_t fd_table_mutex;\n\n    struct metadata_entry_t\n    {\n        abspath_t path;\n        bool removed;\n\n        metadata_entry_t *next;\n        metadata_entry_t *prev;\n\n        metadata_entry_t(const char *p, bool r)\n            :path(p), removed(r), next(0), prev(0)\n        {}\n    };\n\n    list_t<metadata_entry_t> metadata;\n    pthread_mutex_t metadata_mutex;\n\n    static bool metadata_comparator(metadata_entry_t const &e, const char *path);\n};\n\n} // namespace assets\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_FILEIO_ASSETS_DRIVER_HPP_ab9b561c8d5944db8adb1654680308cd\n"
  },
  {
    "path": "sources/crystax/vfs/bind.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    DBG(\"sockfd=%d, addrlen=%lu\", sockfd, (unsigned long)addrlen);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    return system_bind(extfd, addr, addrlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    return ::crystax::fileio::bind(sockfd, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/chdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nextern const char *cpath;\nextern size_t cpath_length;\nextern pthread_mutex_t cpath_mutex;\n\nCRYSTAX_LOCAL\nint chdir(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    abspath_t abspath(path);\n\n    driver_t *driver = find_driver(abspath.c_str());\n\n    DBG(\"path=%s: get driver's stat\", abspath.c_str());\n    struct stat st;\n    if (driver->stat(abspath.c_str(), &st) == -1)\n        return -1;\n\n    if ((st.st_mode & S_IFDIR) == 0)\n    {\n        ERR(\"path=%s: driver's stat reported this is not dir\", abspath.c_str());\n        errno = ENOTDIR;\n        return -1;\n    }\n\n    scope_lock_t lock(cpath_mutex);\n\n    // Call system_chdir but ignore it's return value\n    system_chdir(abspath.c_str());\n\n    DBG(\"chdir to %s\", abspath.c_str());\n    ::free((void*)cpath);\n    cpath_length = abspath.length();\n    cpath = abspath.release();\n    return 0;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint chdir(const char *path)\n{\n    return ::crystax::fileio::chdir(path);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/chown.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint chown(const char *path, uid_t uid, gid_t gid)\n{\n    DBG(\"path=%s, uid=%u, gid=%u\", path, (unsigned)uid, (unsigned)gid);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->chown(path, uid, gid);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint chown(const char *path, uid_t uid, gid_t gid)\n{\n    return ::crystax::fileio::chown(path, uid, gid);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/chroot.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint chroot(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    return system_chroot(path);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint chroot(const char *path)\n{\n    return ::crystax::fileio::chroot(path);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/close.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint close(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    free_fd(fd);\n    return driver->close(extfd);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint close(int fd)\n{\n    return ::crystax::fileio::close(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/closedir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint closedir(DIR *dirp)\n{\n    DBG(\"dirp=%p\", dirp);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return -1;\n\n    free_dirp(dirp);\n    return driver->closedir(extdirp);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint closedir(DIR *dirp)\n{\n    return ::crystax::fileio::closedir(dirp);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/connect.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n#include \"system/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    DBG(\"sockfd=%d, addrlen=%lu\", sockfd, (unsigned long)addrlen);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    int extconnfd = system_connect(extfd, addr, addrlen);\n    if (extconnfd == -1)\n        return -1;\n\n    int connfd = alloc_fd(NULL, extconnfd, system::driver_t::instance());\n    if (connfd < 0)\n    {\n        system_close(extconnfd);\n        errno = EMFILE;\n        return -1;\n    }\n\n    DBG(\"return fd=%d\", connfd);\n    return connfd;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    return ::crystax::fileio::connect(sockfd, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/dirfd.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint dirfd(DIR *dirp)\n{\n    DBG(\"dirp=%p\", dirp);\n\n    int fd;\n    if (!resolve(dirp, &fd))\n        return -1;\n\n    return fd;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint dirfd(DIR *dirp)\n{\n    return ::crystax::fileio::dirfd(dirp);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/dup.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint dup(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->dup(extfd);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint dup(int fd)\n{\n    return ::crystax::fileio::dup(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/dup2.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint dup2(int fd, int fd2)\n{\n    DBG(\"fd=%d, fd2=%d\", fd, fd2);\n\n    int extfd, extfd2;\n    driver_t *driver, *driver2;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n    if (!resolve(fd2, NULL, &extfd2, NULL, &driver2))\n        return -1;\n\n    if (driver != driver2)\n    {\n        ERR(\"dup2 across sources not supported yet\");\n        errno = EXDEV;\n        return -1;\n    }\n\n    return driver->dup2(fd, fd2);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint dup2(int fd, int fd2)\n{\n    return ::crystax::fileio::dup2(fd, fd2);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fchdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fchdir(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    path_t path;\n    if (!resolve(fd, NULL, NULL, NULL, NULL, &path))\n        return -1;\n\n    return chdir(path.c_str());\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fchdir(int fd)\n{\n    return ::crystax::fileio::fchdir(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fchown.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fchown(int fd, uid_t uid, gid_t gid)\n{\n    DBG(\"fd=%d, uid=%u, gid=%u\", fd, (unsigned)uid, (unsigned)gid);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->fchown(extfd, uid, gid);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fchown(int fd, uid_t uid, gid_t gid)\n{\n    return ::crystax::fileio::fchown(fd, uid, gid);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fcntl.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fcntl(int fd, int command, va_list &vl)\n{\n    DBG(\"fd=%d, command=%d\", fd, command);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->fcntl(extfd, command, vl);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fcntl(int fd, int command, ...)\n{\n    va_list vl;\n    va_start(vl, command);\n    int ret = ::crystax::fileio::fcntl(fd, command, vl);\n    va_end(vl);\n    return ret;\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fdatasync.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fdatasync(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->fdatasync(extfd);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fdatasync(int fd)\n{\n    return ::crystax::fileio::fdatasync(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fdopendir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nDIR *fdopendir(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    driver_t *driver;\n    path_t path;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver, &path))\n        return NULL;\n\n    DIR *extdirp = driver->fdopendir(extfd);\n    DIR *dirp = alloc_dirp(path.c_str(), extdirp, driver);\n    return dirp;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nDIR *fdopendir(int fd)\n{\n    return ::crystax::fileio::fdopendir(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fileio/api.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_API_HPP_c73b0384a5fe46499930982108a2d979\n#define _CRYSTAX_FILEIO_API_HPP_c73b0384a5fe46499930982108a2d979\n\n#include \"fileio/common.hpp\"\n#include \"fileio/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nint alloc_fd(const char *path, int extfd, driver_t *driver);\nvoid free_fd(int fd);\n\nDIR *alloc_dirp(const char *path, DIR *extdirp, driver_t *driver);\nvoid free_dirp(DIR *dirp);\n\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_FILEIO_API_HPP_c73b0384a5fe46499930982108a2d979\n"
  },
  {
    "path": "sources/crystax/vfs/fileio/common.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_COMMON_H_99544c48e9174f659a97671e7f64c763\n#define _CRYSTAX_FILEIO_COMMON_H_99544c48e9174f659a97671e7f64c763\n\n#if defined(CRYSTAX_FILEIO_DEBUG) && CRYSTAX_FILEIO_DEBUG\n#ifdef __CRYSTAX_DEBUG\n#undef __CRYSTAX_DEBUG\n#endif\n#define __CRYSTAX_DEBUG 1\n#endif\n\n#include <crystax.h>\n#include <crystax/jutils.hpp>\n#include \"crystax/private.h\"\n#include \"crystax/lock.hpp\"\n#include \"crystax/path.hpp\"\n\n#define NOT_IMPLEMENTED_BASE \\\n    WARN(\"FUNCTION IS NOT IMPLEMENTED!!!\"); \\\n    errno = EIO\n\n#define NOT_IMPLEMENTED \\\n    NOT_IMPLEMENTED_BASE; \\\n    return -1\n#define NOT_IMPLEMENTED_NULL \\\n    NOT_IMPLEMENTED_BASE; \\\n    return NULL\n\n#endif /* _CRYSTAX_FILEIO_COMMON_H_99544c48e9174f659a97671e7f64c763 */\n"
  },
  {
    "path": "sources/crystax/vfs/fileio/driver.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_DRIVER_HPP_acf1e17ac4114b9a8387b40660a8fc61\n#define _CRYSTAX_FILEIO_DRIVER_HPP_acf1e17ac4114b9a8387b40660a8fc61\n\n#include \"fileio/common.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nclass driver_t : non_copyable_t\n{\npublic:\n    driver_t(const char *root, driver_t *d)\n        :rootpath(root), underlying_driver(d)\n    {}\n\n    virtual const char *name() const = 0;\n    virtual const char *info() const = 0;\n\n    path_t const &root() const {return rootpath;}\n\n    driver_t *underlying() const {return underlying_driver;}\n\n    virtual int    chown(const char *path, uid_t uid, gid_t gid) = 0;\n    virtual int    close(int fd) = 0;\n    virtual int    closedir(DIR *dirp) = 0;\n    virtual int    dirfd(DIR *dirp) = 0;\n    virtual int    dup(int fd) = 0;\n    virtual int    dup2(int fd, int fd2) = 0;\n    virtual int    fchown(int fd, uid_t uid, gid_t gid) = 0;\n    virtual int    fcntl(int fd, int command, va_list &vl) = 0;\n    virtual int    fdatasync(int fd) = 0;\n    virtual DIR *  fdopendir(int fd) = 0;\n    virtual int    flock(int fd, int operation) = 0;\n    virtual int    fstat(int fd, struct stat *st) = 0;\n    virtual int    fsync(int fd) = 0;\n    virtual int    ftruncate(int fd, off_t offset) = 0;\n    virtual int    getdents(unsigned int fd, struct dirent *entry, unsigned int count) = 0;\n    virtual int    ioctl(int fd, int request, va_list &vl) = 0;\n    virtual int    lchown(const char *path, uid_t uid, gid_t gid) = 0;\n    virtual int    link(const char *src, const char *dst) = 0;\n    virtual off_t  lseek(int fd, off_t offset, int whence) = 0;\n    virtual loff_t lseek64(int fd, loff_t offset, int whence) = 0;\n    virtual int    lstat(const char *path, struct stat *st) = 0;\n    virtual int    mkdir(const char *path, mode_t mode) = 0;\n    virtual int    open(const char *path, int oflag, va_list &vl) = 0;\n    virtual DIR *  opendir(const char *dirpath) = 0;\n    virtual ssize_t pread(int fd, void *buf, size_t count, off_t offset) = 0;\n    virtual ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset) = 0;\n    virtual ssize_t read(int fd, void *buf, size_t count) = 0;\n    virtual int    readv(int fd, const struct iovec *iov, int count) = 0;\n    virtual struct dirent *readdir(DIR *dirp) = 0;\n    virtual int    readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) = 0;\n    virtual int    readlink(const char *path, char *buf, size_t bufsize) = 0;\n    virtual int    remove(const char *path) = 0;\n    virtual int    rename(const char *oldpath, const char *newpath) = 0;\n    virtual void   rewinddir(DIR *dirp) = 0;\n    virtual int    rmdir(const char *path) = 0;\n    virtual int    scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n        int (*compar)(const struct dirent **, const struct dirent **)) = 0;\n    virtual void   seekdir(DIR *dirp, long offset) = 0;\n    virtual int    select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv) = 0;\n    virtual int    stat(const char *path, struct stat *st) = 0;\n    virtual int    symlink(const char *src, const char *dst) = 0;\n    virtual long   telldir(DIR *dirp) = 0;\n    virtual int    unlink(const char *path) = 0;\n    virtual ssize_t write(int fd, const void *buf, size_t count) = 0;\n    virtual int    writev(int fd, const struct iovec *iov, int count) = 0;\n\n    int open(const char *path, int oflag, ...)\n    {\n        va_list vl;\n        va_start(vl, oflag);\n        int ret = this->open(path, oflag, vl);\n        va_end(vl);\n        return ret;\n    }\n\n    int fcntl(int fd, int command, ...)\n    {\n        va_list vl;\n        va_start(vl, command);\n        int ret = this->fcntl(fd, command, vl);\n        va_end(vl);\n        return ret;\n    }\n\n    int ioctl(int fd, int request, ...)\n    {\n        va_list vl;\n        va_start(vl, request);\n        int ret = this->ioctl(fd, request, vl);\n        va_end(vl);\n        return ret;\n    }\n\nprivate:\n    path_t rootpath;\n    driver_t *underlying_driver;\n};\n\ndriver_t *find_driver(const char *path);\nbool resolve(int fd, DIR **dirp = 0, int *extfd = 0, DIR **extdirp = 0, driver_t **driver = 0, path_t *path = 0);\nbool resolve(DIR *dirp, int *fd = 0, int *extfd = 0, DIR **extdirp = 0, driver_t **driver = 0, path_t *path = 0);\n\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_FILEIO_DRIVER_HPP_acf1e17ac4114b9a8387b40660a8fc61\n"
  },
  {
    "path": "sources/crystax/vfs/fileio.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/common.hpp\"\n#include \"fileio/driver.hpp\"\n#include \"system/driver.hpp\"\n#include \"assets/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nbool volatile init_flag = false;\npthread_mutex_t init_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\nconst char *cpath = NULL;\nsize_t cpath_length = 0;\npthread_mutex_t cpath_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\nstruct fd_record_t\n{\n    DIR *dirp;\n    int extfd;\n    DIR *extdirp;\n    driver_t *driver;\n    const char *path;\n};\n\nfd_record_t fd_table[FD_TABLE_SIZE];\nsize_t fd_table_top = 0;\npthread_mutex_t fd_table_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\nCRYSTAX_LOCAL\ndriver_t *load_driver(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data, driver_t *underlying)\n{\n    if (source != NULL && ::strcmp(source, \"/dev/assets\") == 0)\n    {\n        if (!jni::jvm())\n        {\n            ERR(\"ASSETS fstype requested but no JVM found\");\n            return NULL;\n        }\n\n        jobject context = (jobject)data;\n        return new assets::driver_t(target, context, underlying);\n    }\n\n    ERR(\"unknown source %s and/or fstype %s\", source, fstype);\n    return NULL;\n}\n\nCRYSTAX_LOCAL\nvoid unload_driver(driver_t *driver)\n{\n    delete driver;\n}\n\nvoid init_fd();\n\nCRYSTAX_LOCAL\nbool init_impl()\n{\n    DBG(\"initialization started\");\n\n    if (!system::driver_t::instance())\n    {\n        TRACE;\n        return false;\n    }\n\n    TRACE;\n    init_fd();\n\n    DBG(\"initialization finished\");\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool init()\n{\n    TRACE;\n    if (!init_flag)\n    {\n        TRACE;\n        scope_lock_t lock(init_mutex);\n\n        TRACE;\n        if (!init_flag)\n        {\n            TRACE;\n            if (!init_impl())\n            {\n                TRACE;\n                return false;\n            }\n            TRACE;\n            init_flag = true;\n        }\n    }\n    TRACE;\n    return true;\n}\n\nCRYSTAX_LOCAL\nvoid init_fd()\n{\n    TRACE;\n    scope_lock_t lock(fd_table_mutex);\n    for (size_t fd = 0; fd != 3; ++fd)\n    {\n        fd_record_t &r = fd_table[fd];\n        r.dirp = NULL;\n        r.extfd = fd;\n        r.extdirp = NULL;\n        r.driver = system::driver_t::instance();\n        r.path = NULL;\n        if (fd_table_top < fd)\n            fd_table_top = fd;\n    }\n    for (size_t fd = 3; fd != FD_TABLE_SIZE; ++fd)\n    {\n        fd_record_t &r = fd_table[fd];\n        r.dirp = NULL;\n        r.extfd = -1;\n        r.extdirp = NULL;\n        r.driver = NULL;\n        r.path = NULL;\n    }\n}\n\nCRYSTAX_LOCAL\nint alloc_fd(const char *path, int extfd, driver_t *driver)\n{\n    scope_lock_t lock(fd_table_mutex);\n\n    for (size_t fd = 0; fd != FD_TABLE_SIZE; ++fd)\n    {\n        fd_record_t &r = fd_table[fd];\n        if (r.extfd < 0)\n        {\n            r.dirp = NULL;\n            r.extfd = extfd;\n            r.extdirp = NULL;\n            r.driver = driver;\n            r.path = absolutize(path);\n            if (fd_table_top < fd)\n                fd_table_top = fd;\n            return fd;\n        }\n    }\n\n    return -1;\n}\n\nCRYSTAX_LOCAL\nvoid free_fd(int fd)\n{\n    if (fd < 0 || fd > FD_TABLE_SIZE)\n        return;\n\n    scope_lock_t lock(fd_table_mutex);\n\n    fd_record_t &r = fd_table[fd];\n    if (r.extfd < 0)\n        return;\n\n    r.dirp = NULL;\n    r.extfd = -1;\n    r.extdirp = NULL;\n    r.driver = NULL;\n    ::free((void*)r.path);\n    r.path = NULL;\n\n    if (fd_table_top == (size_t)fd)\n    {\n        for (size_t i = fd_table_top + 1; i > 0; --i)\n        {\n            if (fd_table[i - 1].extfd >= 0)\n                break;\n            --fd_table_top;\n        }\n    }\n}\n\nCRYSTAX_LOCAL\nDIR *alloc_dirp(const char *path, DIR *extdirp, driver_t *driver)\n{\n    scope_lock_t lock(fd_table_mutex);\n\n    for (size_t fd = 0; fd != FD_TABLE_SIZE; ++fd)\n    {\n        fd_record_t &r = fd_table[fd];\n        if (r.extfd < 0)\n        {\n            r.dirp = reinterpret_cast<DIR*>(-(int)fd - 1);\n            r.extfd = driver->dirfd(extdirp);\n            r.extdirp = extdirp;\n            r.driver = driver;\n            r.path = absolutize(path);\n            if (fd_table_top < fd)\n                fd_table_top = fd;\n            return r.dirp;\n        }\n    }\n\n    return NULL;\n}\n\nCRYSTAX_LOCAL\nvoid free_dirp(DIR *dirp)\n{\n    scope_lock_t lock(fd_table_mutex);\n\n    for (size_t fd = 0; fd != fd_table_top; ++fd)\n    {\n        fd_record_t &r = fd_table[fd];\n        if (r.dirp != dirp)\n            continue;\n\n        if (r.extfd < 0)\n            break;\n\n        r.dirp = NULL;\n        r.extfd = -1;\n        r.extdirp = NULL;\n        r.driver = NULL;\n        ::free((void*)r.path);\n        r.path = NULL;\n\n        if (fd_table_top == (size_t)fd)\n        {\n            for (size_t i = fd_table_top + 1; i > 0; --i)\n            {\n                if (fd_table[i - 1].extfd >= 0)\n                    break;\n                --fd_table_top;\n            }\n        }\n\n        break;\n    }\n}\n\nCRYSTAX_LOCAL\nbool resolve(int fd, DIR **dirp, int *extfd, DIR **extdirp, driver_t **driver, path_t *path)\n{\n    if (fd < 0 || fd > FD_TABLE_SIZE)\n    {\n        errno = EBADFD;\n        return false;\n    }\n\n    scope_lock_t lock(fd_table_mutex);\n\n    fd_record_t const &r = fd_table[fd];\n    if (dirp) *dirp = r.dirp;\n    if (extfd) *extfd = r.extfd;\n    if (extdirp) *extdirp = r.extdirp;\n    if (driver) *driver = r.driver;\n    if (path) path->reset(absolutize(r.path));\n\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool resolve(DIR *dirp, int *fd, int *extfd, DIR **extdirp, driver_t **driver, path_t *path)\n{\n    scope_lock_t lock(fd_table_mutex);\n\n    for (size_t i = 0; i != FD_TABLE_SIZE; ++i)\n    {\n        fd_record_t &r = fd_table[i];\n        if (r.dirp != dirp)\n            continue;\n\n        if (fd) *fd = i;\n        if (extfd) *extfd = r.extfd;\n        if (extdirp) *extdirp = r.extdirp;\n        if (driver) *driver = r.driver;\n        if (path) path->reset(absolutize(r.path));\n        return true;\n    }\n\n    return false;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nint __crystax_fileio_init()\n{\n    return ::crystax::fileio::init() ? 0 : -1;\n}\n"
  },
  {
    "path": "sources/crystax/vfs/flock.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint flock(int fd, int operation)\n{\n    DBG(\"fd=%d, operation=%d\", fd, operation);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->flock(extfd, operation);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint flock(int fd, int operation)\n{\n    return ::crystax::fileio::flock(fd, operation);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fstat.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fstat(int fd, struct stat *st)\n{\n    DBG(\"fd=%d, st=%p\", fd, st);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->fstat(extfd, st);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fstat(int fd, struct stat *st)\n{\n    return ::crystax::fileio::fstat(fd, st);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/fsync.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint fsync(int fd)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->fsync(extfd);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint fsync(int fd)\n{\n    return ::crystax::fileio::fsync(fd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/ftruncate.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint ftruncate(int fd, off_t offset)\n{\n    DBG(\"fd=%d, offset=%llu\", fd, (unsigned long long)offset);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->ftruncate(extfd, offset);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint ftruncate(int fd, off_t offset)\n{\n    return ::crystax::fileio::ftruncate(fd, offset);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/futils.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if defined(__CRYSTAX_DEBUG_PATH_FUNCTIONS) && __CRYSTAX_DEBUG_PATH_FUNCTIONS == 1\n#   ifdef __CRYSTAX_DEBUG\n#   undef __CRYSTAX_DEBUG\n#   endif\n#   define __CRYSTAX_DEBUG 1\n#   define __CRYSTAX_DEBUG_SINK 0\n#else\n#   ifdef __CRYSTAX_DEBUG\n#   undef __CRYSTAX_DEBUG\n#   endif\n#   define __CRYSTAX_DEBUG 0\n#   ifdef CRYSTAX_FILEIO_DEBUG\n#   undef CRYSTAX_FILEIO_DEBUG\n#   endif\n#   define CRYSTAX_FILEIO_DEBUG 0\n#endif\n\n#include \"fileio/common.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nchar *normalize(const char *path)\n{\n    char part[NAME_MAX + 1];\n    char buf[PATH_MAX + 1];\n    size_t buflen;\n\n    DBG(\"** path=%s\", path);\n\n    if (path == NULL)\n    {\n        ERR(\"empty path\");\n        return NULL;\n    }\n\n    buf[0] = '\\0';\n    buflen = 0;\n    for (const char *s = path, *p = path; p; s = p + 1)\n    {\n        DBG(\"s=%s\", s);\n        p = ::strchr(s, '/');\n        DBG(\"p=%s\", p);\n        size_t partlen = p ? p - s : ::strlen(s);\n        if (partlen >= sizeof(part))\n            partlen = sizeof(part) - 1;\n        ::strncpy(part, s, partlen);\n        part[partlen] = '\\0';\n        DBG(\"- part=%s\", part);\n\n        if (partlen == 0)\n        {\n            if (buflen == 0 && *path == '/')\n            {\n                DBG(\"leading slash found\");\n                ::strcat(buf, \"/\");\n                ++buflen;\n            }\n            else\n                DBG(\"ignore empty part\");\n        }\n        else if (partlen == 1 && part[0] == '.')\n        {\n            if (buflen == 0)\n            {\n                DBG(\"'.' part at begin\");\n                ::strcat(buf, \".\");\n                ++buflen;\n            }\n            else\n                DBG(\"ignore '.' part\");\n        }\n        else if (partlen == 2 && part[0] == '.' && part[1] == '.')\n        {\n            if (buflen == 0)\n            {\n                DBG(\"'..' part at begin\");\n                ::strcat(buf, \"..\");\n                buflen += 2;\n            }\n            else\n            {\n                DBG(\"remove last component\");\n                char *v = ::strrchr(buf, '/');\n                DBG(\"v=%s\", v);\n                if (v == NULL)\n                {\n                    // No '/' found. It's possible only if buf contains single non-empty path component\n                    DBG(\"no '/' found\");\n                    if (buflen == 1 && buf[0] == '.')\n                    {\n                        // Special case: '.'\n                        ::strcpy(buf, \"..\");\n                        buflen += 2;\n                    }\n                    else if (buflen == 2 && buf[0] == '.' && buf[1] == '.')\n                    {\n                        // Special case: '..'\n                        ::strcat(buf, \"/..\");\n                        buflen += 3;\n                    }\n                    else\n                    {\n                        ::strcpy(buf, \".\");\n                        buflen = 1;\n                    }\n                }\n                else\n                {\n                    // Cut last path component\n                    DBG(\"cut last path component\");\n                    if (v == buf && *buf == '/')\n                    {\n                        // Special case: '/..'\n                        ++v;\n                    }\n\n                    DBG(\"buf=%s, buflen=%u, v=%s\", buf, (unsigned)buflen, v);\n                    if (buf + buflen - v == 3 && v[0] == '/' && v[1] == '.' && v[2] == '.')\n                    {\n                        // Special case: '../..'\n                        ::strcat(buf, \"/..\");\n                        buflen += 3;\n                    }\n                    else\n                    {\n                        buflen = v - buf;\n                        *v = '\\0';\n                    }\n                }\n            }\n        }\n        else\n        {\n            if (buflen == 1 && *buf == '.')\n            {\n                // We found leading '.' path component. Remove it because we'll add non-empty component now.\n                DBG(\"leading '.' found\");\n                buflen = 0;\n                *buf = '\\0';\n            }\n            if (buflen > 0 && buf[buflen - 1] != '/')\n            {\n                DBG(\"add '/' to the end\");\n                ::strcat(buf, \"/\");\n                ++buflen;\n            }\n            ::strcat(buf, part);\n            buflen += partlen;\n        }\n        DBG(\"-- buf=%s\", buf);\n    }\n\n    DBG(\"++ result=%s\", buf);\n    return ::strdup(buf);\n}\n\nbool is_normalized(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    if (path == NULL || *path == '\\0' ||\n        (path[0] == '/' && path[1] == '\\0'))\n    {\n        DBG(\"path is NULL or empty or '/'\");\n        return true;\n    }\n\n    const char *s = path;\n    if (*s == '/')\n        ++s;\n    for (const char *p = s; p; s = p + 1)\n    {\n        p = strchr(s, '/');\n        DBG(\"p=%s\", p);\n        size_t partlen = p ? p - s : strlen(s);\n        DBG(\"partlen=%lu\", (unsigned long)partlen);\n        if (partlen == 0)\n        {\n            DBG(\"empty path component\");\n            return false;\n        }\n        if (partlen == 1 && s[0] == '.')\n        {\n            DBG(\"'.' path component\");\n            return false;\n        }\n        if (partlen == 2 && s[0] == '.' && s[1] == '.')\n        {\n            DBG(\"'..' path component\");\n            return false;\n        }\n    }\n\n    DBG(\"path is normalized\");\n    return true;\n}\n\nchar *absolutize(const char *path)\n{\n    char buf[PATH_MAX + 1];\n\n    DBG(\"path=%s\", path);\n\n    if (path == NULL || *path == '\\0')\n    {\n        ERR(\"empty path\");\n        return NULL;\n    }\n\n    if (*path == '/')\n    {\n        DBG(\"already absolute path, going to normalize\");\n        return normalize(path);\n    }\n\n    DBG(\"going to getcwd\");\n    if (getcwd(buf, sizeof buf) == NULL)\n    {\n        DBG(\"getcwd return NULL\");\n        return NULL;\n    }\n\n    DBG(\"getcwd() return %s\", buf);\n    if (sizeof(buf) - strlen(buf) - 1 < strlen(path) + 1)\n    {\n        ERR(\"not enough space in buf\");\n        return NULL;\n    }\n\n    strcat(buf, \"/\");\n    strcat(buf, path);\n    DBG(\"going to normalize %s\", buf);\n    return normalize(buf);\n}\n\nbool is_absolute(const char *path)\n{\n    DBG(\"path=%s\", path);\n    return path != NULL && *path == '/';\n}\n\nbool is_subpath(const char *root, const char *path)\n{\n    DBG(\"root=%s, path=%s\", root, path);\n\n    const char *r = is_absolute(root) && is_normalized(root) ? root : absolutize(root);\n    DBG(\"r=%s\", r);\n    const char *p = is_absolute(path) && is_normalized(path) ? path : absolutize(path);\n    DBG(\"p=%s\", p);\n\n    if (r == NULL)\n    {\n        ERR(\"null root\");\n        return false;\n    }\n\n    if (p == NULL)\n    {\n        ERR(\"null path\");\n        return false;\n    }\n\n    bool ret = false;\n\n    size_t rlen = ::strlen(r);\n    size_t plen = ::strlen(p);\n    DBG(\"rlen=%u, plen=%u\", (unsigned)rlen, (unsigned)plen);\n    if (rlen == 1 && *r == '/')\n        ret = true;\n    else if (rlen <= plen && ::strncmp(r, p, rlen) == 0 && (p[rlen] == '\\0' || p[rlen] == '/'))\n        ret = true;\n\n    if (r != root)\n        free((void*)r);\n    if (p != path)\n        free((void*)p);\n\n    DBG(\"ret=%s\", ret ? \"true \" : \"false\");\n    return ret;\n}\n\nchar *relpath(const char *root, const char *path)\n{\n    DBG(\"root=%s, path=%s\", root, path);\n\n    const char *r = is_absolute(root) && is_normalized(root) ? root : absolutize(root);\n    DBG(\"r=%s\", r);\n    const char *p = is_absolute(path) && is_normalized(path) ? path : absolutize(path);\n    DBG(\"p=%s\", p);\n\n    if (r == NULL)\n    {\n        ERR(\"null root\");\n        return NULL;\n    }\n\n    if (p == NULL)\n    {\n        ERR(\"null path\");\n        return NULL;\n    }\n\n    char *ret = NULL;\n\n    size_t rlen = ::strlen(r);\n    size_t plen = ::strlen(p);\n    DBG(\"rlen=%u, plen=%u\", (unsigned)rlen, (unsigned)plen);\n    if (rlen == 1 && *r == '/')\n        ret = ::strdup(p + 1);\n    else if (rlen <= plen && ::strncmp(r, p, rlen) == 0 && (p[rlen] == '\\0' || p[rlen] == '/'))\n    {\n        const char *s = p + rlen;\n        size_t len = plen - rlen;\n        DBG(\"s=%s, len=%u\", s, (unsigned)len);\n        if (*s == '/')\n        {\n            ++s;\n            --len;\n        }\n        DBG(\"s=%s, len=%u\", s, (unsigned)len);\n\n        ret = (char*)malloc(len + 1);\n        strncpy(ret, s, len);\n        ret[len] = '\\0';\n    }\n\n    if (r != root)\n        free((void*)r);\n    if (p != path)\n        free((void*)p);\n\n    DBG(\"ret=%s\", ret);\n    return ret;\n}\n\nchar *basename(const char *path)\n{\n    DBG(\"path=%s\", path);\n    if (path == NULL)\n    {\n        ERR(\"path is null\");\n        return NULL;\n    }\n\n    if (*path == '\\0')\n    {\n        DBG(\"empty path\");\n        return ::strdup(\"\");\n    }\n\n    char buf[NAME_MAX + 1];\n\n    const char *p = is_normalized(path) ? path : normalize(path);\n    size_t len = ::strlen(p);\n    DBG(\"p=%s, len=%u\", p, (unsigned)len);\n    if (len == 0)\n        buf[0] = '\\0';\n    else\n    {\n        char *s = (char*)::memrchr(p, '/', len);\n        DBG(\"s=%s\", s);\n        if (s == NULL)\n        {\n            ::strncpy(buf, p, len);\n            buf[len] = '\\0';\n        }\n        else\n        {\n            size_t partlen = p + len - s - 1;\n            DBG(\"partlen=%u\", (unsigned)partlen);\n            if (partlen == 0)\n                ::strcpy(buf, \".\");\n            else\n            {\n                ::strncpy(buf, s + 1, partlen);\n                buf[partlen] = '\\0';\n            }\n        }\n    }\n\n    if (p != path) ::free((void*)p);\n    DBG(\"buf=%s\", buf);\n    return ::strdup(buf);\n}\n\nchar *dirname(const char *path)\n{\n    DBG(\"path=%s\", path);\n    if (path == NULL)\n    {\n        ERR(\"path is null\");\n        return NULL;\n    }\n\n    char buf[PATH_MAX + 1];\n\n    const char *p = is_normalized(path) ? path : normalize(path);\n    size_t len = ::strlen(p);\n    DBG(\"p=%s, len=%u\", p, (unsigned)len);\n    if (len == 0)\n        ::strcpy(buf, \".\");\n    else\n    {\n        char *s = (char*)::memrchr(p, '/', len);\n        DBG(\"s=%s\", s);\n        if (s == NULL)\n            ::strcpy(buf, \".\");\n        else\n        {\n            ::strncpy(buf, p, s - p);\n            buf[s - p] = '\\0';\n            if (buf[0] == '\\0')\n                ::strcpy(buf, \"/\");\n        }\n    }\n\n    if (p != path) ::free((void*)p);\n    DBG(\"buf=%s\", buf);\n    return ::strdup(buf);\n}\n\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/getcwd.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nextern const char *cpath;\nextern size_t cpath_length;\nextern pthread_mutex_t cpath_mutex;\n\nCRYSTAX_LOCAL\nchar *getcwd(char *buf, size_t size)\n{\n    DBG(\"***\");\n\n    // WARNING!!! 'absolutize' MUST NOT be called from here\n    // because 'getcwd' called from 'absolutize'\n    scope_lock_t lock(cpath_mutex);\n\n    if (!cpath)\n    {\n        DBG(\"cpath were not yet set; use system getcwd\");\n        return system_getcwd(buf, size);\n    }\n\n    if (size < cpath_length + 1)\n    {\n        ERR(\"passed size is less than current path length\");\n        errno = ERANGE;\n        return NULL;\n    }\n\n    DBG(\"return cwd=%s\", cpath);\n    strncpy(buf, cpath, cpath_length);\n    buf[cpath_length] = 0;\n    return buf;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nchar *getcwd(char *buf, size_t size)\n{\n    return ::crystax::fileio::getcwd(buf, size);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/getdents.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint getdents(unsigned int fd, struct dirent *entry, unsigned int count)\n{\n    DBG(\"fd=%u, dirp=%p, count=%u\", fd, entry, count);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve((int)fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->getdents((unsigned int)extfd, entry, count);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint getdents(unsigned int fd, struct dirent *entry, unsigned int count)\n{\n    return ::crystax::fileio::getdents(fd, entry, count);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/getsockname.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    return system_getsockname(extfd, addr, addrlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    return ::crystax::fileio::getsockname(sockfd, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/getsockopt.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)\n{\n    DBG(\"sockfd=%d, level=%d, optname=%d\", sockfd, level, optname);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    return system_getsockopt(extfd, level, optname, optval, optlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)\n{\n    return ::crystax::fileio::getsockopt(sockfd, level, optname, optval, optlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/include/crystax/vfs.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_VFS_H_86150e922dc84672bc8fc4003d28619e\n#define _CRYSTAX_VFS_H_86150e922dc84672bc8fc4003d28619e\n\n#include <jni.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint crystax_vfs_jni_on_load(JavaVM *vm);\nvoid crystax_vfs_jni_on_unload(JavaVM *vm);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _CRYSTAX_VFS_H_86150e922dc84672bc8fc4003d28619e */\n"
  },
  {
    "path": "sources/crystax/vfs/ioctl.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint ioctl(int fd, int request, va_list &vl)\n{\n    DBG(\"fd=%d, request=%d\", fd, request);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->ioctl(extfd, request, vl);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint ioctl(int fd, int request, ...)\n{\n    va_list vl;\n    va_start(vl, request);\n    int ret = ::crystax::fileio::ioctl(fd, request, vl);\n    va_end(vl);\n    return ret;\n}\n"
  },
  {
    "path": "sources/crystax/vfs/lchown.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint lchown(const char *path, uid_t uid, gid_t gid)\n{\n    DBG(\"path=%s, uid=%u, gid=%u\", path, (unsigned)uid, (unsigned)gid);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->lchown(path, uid, gid);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint lchown(const char *path, uid_t uid, gid_t gid)\n{\n    return ::crystax::fileio::lchown(path, uid, gid);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/link.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint link(const char *src, const char *dst)\n{\n    DBG(\"src=%s, dst=%s\", src, dst);\n\n    driver_t *driver = find_driver(src);\n    driver_t *driver2 = find_driver(dst);\n    if (driver != driver2)\n    {\n        ERR(\"link across sources not supported\");\n        errno = EXDEV;\n        return -1;\n    }\n\n    return driver->link(src, dst);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint link(const char *src, const char *dst)\n{\n    return ::crystax::fileio::link(src, dst);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/listen.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint listen(int sockfd, int backlog)\n{\n    DBG(\"sockfd=%d, backlog=%d\", sockfd, backlog);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    return system_listen(extfd, backlog);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint listen(int sockfd, int backlog)\n{\n    return ::crystax::fileio::listen(sockfd, backlog);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/lseek.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\noff_t lseek(int fd, off_t offset, int whence)\n{\n    DBG(\"fd=%d, offset=%llu, whence=%d\", fd, (unsigned long long)offset, whence);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->lseek(extfd, offset, whence);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\noff_t lseek(int fd, off_t offset, int whence)\n{\n    return ::crystax::fileio::lseek(fd, offset, whence);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/lseek64.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nloff_t lseek64(int fd, loff_t offset, int whence)\n{\n    DBG(\"fd=%d, offset=%llu, whence=%d\", fd, (unsigned long long)offset, whence);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->lseek64(extfd, offset, whence);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nloff_t lseek64(int fd, loff_t offset, int whence)\n{\n    return ::crystax::fileio::lseek64(fd, offset, whence);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/lstat.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint lstat(const char *path, struct stat *st)\n{\n    DBG(\"path=%s, st=%p\", path, st);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->lstat(path, st);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint lstat(const char *path, struct stat *st)\n{\n    return ::crystax::fileio::lstat(path, st);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/mkdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint mkdir(const char *path, mode_t mode)\n{\n    DBG(\"path=%s, mode=%d\", path, (int)mode);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->mkdir(path, mode);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint mkdir(const char *path, mode_t mode)\n{\n    return ::crystax::fileio::mkdir(path, mode);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/mmap.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)\n{\n    DBG(\"fd=%d\", fd);\n\n    int extfd;\n    if (fd < 0)\n        extfd = fd;\n    else\n    {\n        if (!resolve(fd, NULL, &extfd, NULL, NULL))\n            return -1;\n\n        if (extfd == -1)\n        {\n            errno = EBADF;\n            return -1;\n        }\n    }\n\n    return system_mmap(addr, length, prot, flags, extfd, offset);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)\n{\n    return ::crystax::fileio::mmap(addr, length, prot, flags, fd, offset);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/mount.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <crystax.h>\n\n#include \"fileio/common.hpp\"\n#include \"fileio/driver.hpp\"\n\n#include \"crystax/memory.hpp\"\n#include \"crystax/lock.hpp\"\n\n#include \"system/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\ndriver_t *load_driver(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data, driver_t *underlying);\nvoid unload_driver(driver_t *driver);\n\nenum\n{\n    MOUNT_TABLE_SIZE = 256\n};\n\nstatic driver_t *mount_table[MOUNT_TABLE_SIZE];\nstatic int mount_table_pos = 0;\nstatic pthread_mutex_t mount_table_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\nCRYSTAX_LOCAL\ndriver_t *find_driver(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    if (path == NULL || *path == '\\0')\n        return NULL;\n\n    scope_lock_t lock(mount_table_mutex);\n\n    if (mount_table_pos == 0)\n    {\n        DBG(\"path=%s: no mount records registered, use SYSTEM driver\", path);\n        return system::driver_t::instance();\n    }\n\n    abspath_t abspath(path);\n    size_t nlen = ::strlen(abspath.c_str());\n    for (size_t i = mount_table_pos; i > 0; --i)\n    {\n        driver_t *d = mount_table[i - 1];\n        size_t len = ::strlen(d->root().c_str());\n        if (nlen >= len && ::strncmp(abspath.c_str(), d->root().c_str(), len) == 0)\n        {\n            DBG(\"path=%s: use driver %s (%s)\", path, d->name(), d->info());\n            return d;\n        }\n    }\n\n    DBG(\"path=%s: no mount record found, use system driver\", path);\n    return system::driver_t::instance();\n}\n\nCRYSTAX_LOCAL\nint mount(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data)\n{\n    DBG(\"source=%s, target=%s, fstype=%s, flags=%lu, data=%p\",\n        source, target, fstype, flags, data);\n\n    scope_lock_t lock(mount_table_mutex);\n\n    if (mount_table_pos >= MOUNT_TABLE_SIZE)\n    {\n        ERR(\"too much mount calls performed (max %d)\", (int)MOUNT_TABLE_SIZE);\n        errno = ENFILE;\n        return -1;\n    }\n\n    abspath_t abspath(target);\n\n    // Found underlying driver\n    driver_t *underlying = system::driver_t::instance();\n    for (size_t i = mount_table_pos; i > 0; --i)\n    {\n        driver_t *prev = mount_table[i - 1];\n        if (abspath.subpath(prev->root()))\n        {\n            underlying = prev;\n            break;\n        }\n    }\n\n    driver_t *driver = load_driver(source, abspath.c_str(), fstype, flags, data, underlying);\n    if (!driver)\n        return system_mount(source, target, fstype, flags, data);\n\n    DBG(\"load driver: %s (%s), underlying: %s (%s)\", driver->name(), driver->info(), underlying->name(), underlying->info());\n\n    mount_table[mount_table_pos] = driver;\n\n    ++mount_table_pos;\n\n    return 0;\n}\n\nCRYSTAX_LOCAL\nint umount(const char *target, int flags)\n{\n    DBG(\"target=%s, flags=%d\", target, flags);\n\n    if (target == NULL || *target == '\\0')\n    {\n        ERR(\"empty target\");\n        errno = EINVAL;\n        return -1;\n    }\n\n    scope_lock_t lock(mount_table_mutex);\n\n    abspath_t abspath(target);\n    for (size_t i = mount_table_pos; i > 0; --i)\n    {\n        driver_t *d = mount_table[i - 1];\n        if (d->root().length() > abspath.length() && d->root().subpath(abspath))\n        {\n            ERR(\"unmount failed: %s busy\", abspath.c_str());\n            errno = EBUSY;\n            return -1;\n        }\n        if (d->root() == abspath)\n        {\n            DBG(\"unmount target %s\", abspath.c_str());\n            unload_driver(d);\n            // Shift above records\n            for (size_t j = i - 1; j < (size_t)mount_table_pos - 1; ++j)\n                mount_table[j] = mount_table[j + 1];\n            --mount_table_pos;\n            return 0;\n        }\n    }\n\n    return system_umount2(target, flags);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint mount(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data)\n{\n    return ::crystax::fileio::mount(source, target, fstype, flags, data);\n}\n\nCRYSTAX_GLOBAL\nint umount(const char *target)\n{\n    return ::crystax::fileio::umount(target, 0);\n}\n\nCRYSTAX_GLOBAL\nint umount2(const char *target, int flags)\n{\n    return ::crystax::fileio::umount(target, flags);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/open.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\n#if defined(__CRYSTAX_DEBUG) && __CRYSTAX_DEBUG == 1\nstatic const char *mode_s(int oflag)\n{\n    switch (oflag)\n    {\n    case O_RDONLY: return \"O_RDONLY\";\n    case O_WRONLY: return \"O_WRONLY\";\n    case O_RDWR:   return \"O_RDWR\";\n    default:       return \"UNKNOWN\";\n    }\n}\n#endif\n\nCRYSTAX_LOCAL\nint open(const char *path, int oflag, va_list &vl)\n{\n    DBG(\"path=%s, oflag=%d (%s)\", path, oflag, mode_s(oflag));\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    DBG(\"use driver %s (%s)\", driver->name(), driver->info());\n    int extfd = driver->open(path, oflag, vl);\n    DBG(\"extfd=%d\", extfd);\n\n    if (extfd == -1)\n        return -1;\n\n    int fd = alloc_fd(path, extfd, driver);\n    if (fd < 0)\n    {\n        ERR(\"can't alloc fd, return -1\");\n        driver->close(extfd);\n        errno = EMFILE;\n        return -1;\n    }\n\n    DBG(\"return fd=%d\", fd);\n    return fd;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint open(const char *path, int oflag, ...)\n{\n    va_list vl;\n    va_start(vl, oflag);\n    int ret = ::crystax::fileio::open(path, oflag, vl);\n    va_end(vl);\n    return ret;\n}\n\nCRYSTAX_GLOBAL\nint creat(const char* path, mode_t mode)\n{\n    return ::open(path, O_WRONLY|O_CREAT|O_TRUNC, mode);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/opendir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nDIR *opendir(const char *dirpath)\n{\n    DBG(\"dirpath=%s\", dirpath);\n\n    driver_t *driver = find_driver(dirpath);\n    if (!driver)\n        return NULL;\n\n    DIR *extdirp = driver->opendir(dirpath);\n    if (!extdirp)\n        return NULL;\n\n    DIR *dirp = alloc_dirp(dirpath, extdirp, driver);\n    if (!dirp)\n    {\n        driver->closedir(extdirp);\n        errno = EMFILE;\n        return NULL;\n    }\n\n    return dirp;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nDIR *opendir(const char *dirpath)\n{\n    return ::crystax::fileio::opendir(dirpath);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/asyncsocketclosemonitor.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include \"crystax/lock.hpp\"\n#include \"osfs/asyncsocketclosemonitor.h\"\n\n#include <errno.h>\n#include <signal.h>\n#include <string.h>\n\n/**\n * We use an intrusive doubly-linked list to keep track of blocked threads.\n * This gives us O(1) insertion and removal, and means we don't need to do any allocation.\n * (The objects themselves are stack-allocated.)\n * Waking potentially-blocked threads when a socket is closed is O(n) in the total number of\n * blocked threads (not the number of threads actually blocked on the socket in question).\n * For now at least, this seems like a good compromise for Android.\n */\nstatic pthread_mutex_t blockedThreadListMutex = PTHREAD_MUTEX_INITIALIZER;\nstatic AsynchronousSocketCloseMonitor* blockedThreadList = NULL;\n\ntypedef ::crystax::scope_lock_t ScopedPthreadMutexLock;\n/**\n * The specific signal chosen here is arbitrary.\n */\nstatic const int BLOCKED_THREAD_SIGNAL = SIGRTMIN + 2;\n\nstatic void blockedThreadSignalHandler(int /*signal*/) {\n    // Do nothing. We only sent this signal for its side-effect of interrupting syscalls.\n}\n\nvoid AsynchronousSocketCloseMonitor::init() {\n    // Ensure that the signal we send interrupts system calls but doesn't kill threads.\n    // Using sigaction(2) lets us ensure that the SA_RESTART flag is not set.\n    // (The whole reason we're sending this signal is to unblock system calls!)\n    struct sigaction sa;\n    memset(&sa, 0, sizeof(sa));\n    sa.sa_handler = blockedThreadSignalHandler;\n    sa.sa_flags = 0;\n    int rc = sigaction(BLOCKED_THREAD_SIGNAL, &sa, NULL);\n    if (rc == -1) {\n        ERR(\"setting blocked thread signal handler failed: %s\", strerror(errno));\n    }\n}\n\nvoid AsynchronousSocketCloseMonitor::signalBlockedThreads(int fd) {\n    ScopedPthreadMutexLock lock(&blockedThreadListMutex);\n    for (AsynchronousSocketCloseMonitor* it = blockedThreadList; it != NULL; it = it->mNext) {\n        if (it->mFd == fd) {\n            pthread_kill(it->mThread, BLOCKED_THREAD_SIGNAL);\n            // Keep going, because there may be more than one thread...\n        }\n    }\n}\n\nAsynchronousSocketCloseMonitor::AsynchronousSocketCloseMonitor(int fd) {\n    ScopedPthreadMutexLock lock(&blockedThreadListMutex);\n    // Who are we, and what are we waiting for?\n    mThread = pthread_self();\n    mFd = fd;\n    // Insert ourselves at the head of the intrusive doubly-linked list...\n    mPrev = NULL;\n    mNext = blockedThreadList;\n    if (mNext != NULL) {\n        mNext->mPrev = this;\n    }\n    blockedThreadList = this;\n}\n\nAsynchronousSocketCloseMonitor::~AsynchronousSocketCloseMonitor() {\n    ScopedPthreadMutexLock lock(&blockedThreadListMutex);\n    // Unlink ourselves from the intrusive doubly-linked list...\n    if (mNext != NULL) {\n        mNext->mPrev = mPrev;\n    }\n    if (mPrev == NULL) {\n        blockedThreadList = mNext;\n    } else {\n        mPrev->mNext = mNext;\n    }\n}\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/asyncsocketclosemonitor.h",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef ASYNCHRONOUS_SOCKET_CLOSE_MONITOR_H_included\n#define ASYNCHRONOUS_SOCKET_CLOSE_MONITOR_H_included\n\n#include <pthread.h>\n\n/**\n * AsynchronousSocketCloseMonitor helps implement Java's asynchronous Socket.close semantics.\n *\n * AsynchronousSocketCloseMonitor::init must be called before anything else.\n *\n * Every blocking network I/O operation must be surrounded by an AsynchronousSocketCloseMonitor\n * instance. For example:\n *\n *   {\n *     AsynchronousSocketCloseMonitor monitor(fd);\n *     byteCount = ::read(fd, buf, sizeof(buf));\n *   }\n *\n * To interrupt all threads currently blocked on file descriptor 'fd', call signalBlockedThreads:\n *\n *   AsynchronousSocketCloseMonitor::signalBlockedThreads(fd);\n */\nclass AsynchronousSocketCloseMonitor {\npublic:\n    AsynchronousSocketCloseMonitor(int fd);\n    ~AsynchronousSocketCloseMonitor();\n\n    static void init();\n\n    static void signalBlockedThreads(int fd);\n\nprivate:\n    AsynchronousSocketCloseMonitor* mPrev;\n    AsynchronousSocketCloseMonitor* mNext;\n    pthread_t mThread;\n    int mFd;\n\n    // Disallow copy and assignment.\n    AsynchronousSocketCloseMonitor(const AsynchronousSocketCloseMonitor&);\n    void operator=(const AsynchronousSocketCloseMonitor&);\n};\n\n#endif  // ASYNCHRONOUS_SOCKET_CLOSE_MONITOR_H_included\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"osfs/osfs.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\n\nnamespace eclair\n{\nbool init(JNIEnv *env);\n} // namespace eclair\n\nnamespace froyo\n{\nbool init(JNIEnv *env);\n} // namespace froyo\n\nnamespace gingerbread\n{\nbool init(JNIEnv *env);\n} // namespace gingerbread\n\nnamespace ics\n{\nbool init(JNIEnv *env);\n} // namespace ics\n\nusing jni::jhclass;\nusing jni::jnienv;\nusing jni::jcast;\nusing jni::find_class;\nusing jni::get_field_id;\nusing jni::get_field;\nusing jni::get_static_field;\n\njhclass clsFD;\njmethodID midFDCtor;\njfieldID fidFD;\n\nenum\n{\n    ANDROID_VERSION_BASE = 1,\n    ANDROID_VERSION_BASE_1_1 = 2,\n    ANDROID_VERSION_CUPCAKE = 3,\n    ANDROID_VERSION_DONUT = 4,\n    ANDROID_VERSION_ECLAIR = 5,\n    ANDROID_VERSION_ECLAIR_0_1 = 6,\n    ANDROID_VERSION_ECLAIR_MR1 = 7,\n    ANDROID_VERSION_FROYO = 8,\n    ANDROID_VERSION_GINGERBREAD = 9,\n    ANDROID_VERSION_GINGERBREAD_MR1 = 10,\n    ANDROID_VERSION_HONEYCOMB = 11,\n    ANDROID_VERSION_HONEYCOMB_MR1 = 12,\n    ANDROID_VERSION_HONEYCOMB_MR2 = 13,\n    ANDROID_VERSION_ICE_CREAM_SANDWICH = 14,\n    ANDROID_VERSION_ICE_CREAM_SANDWICH_MR1 = 15\n};\n\n/*\n * Get a human-readable summary of an exception object.  The buffer will\n * be populated with the \"binary\" class name and, if present, the\n * exception message.\n */\nCRYSTAX_LOCAL\nvoid getExceptionSummary(JNIEnv* env, jthrowable exception, char* buf, size_t bufLen)\n{\n    TRACE;\n    int success = 0;\n\n    /* get the name of the exception's class */\n    jclass exceptionClazz = env->GetObjectClass(exception); // can't fail\n    jclass classClazz = env->GetObjectClass(exceptionClazz); // java.lang.Class, can't fail\n    jmethodID classGetNameMethod = env->GetMethodID(\n            classClazz, \"getName\", \"()Ljava/lang/String;\");\n    jstring classNameStr = (jstring)env->CallObjectMethod(exceptionClazz, classGetNameMethod);\n    if (classNameStr != NULL) {\n        /* get printable string */\n        const char* classNameChars = env->GetStringUTFChars(classNameStr, NULL);\n        if (classNameChars != NULL) {\n            /* if the exception has a message string, get that */\n            jmethodID throwableGetMessageMethod = env->GetMethodID(\n                    exceptionClazz, \"getMessage\", \"()Ljava/lang/String;\");\n            jstring messageStr = (jstring)env->CallObjectMethod(\n                    exception, throwableGetMessageMethod);\n\n            if (messageStr != NULL) {\n                const char* messageChars = env->GetStringUTFChars(messageStr, NULL);\n                if (messageChars != NULL) {\n                    snprintf(buf, bufLen, \"%s: %s\", classNameChars, messageChars);\n                    env->ReleaseStringUTFChars(messageStr, messageChars);\n                } else {\n                    env->ExceptionClear(); // clear OOM\n                    snprintf(buf, bufLen, \"%s: <error getting message>\", classNameChars);\n                }\n                env->DeleteLocalRef(messageStr);\n            } else {\n                strncpy(buf, classNameChars, bufLen);\n                buf[bufLen - 1] = '\\0';\n            }\n\n            env->ReleaseStringUTFChars(classNameStr, classNameChars);\n            success = 1;\n        }\n        env->DeleteLocalRef(classNameStr);\n    }\n    env->DeleteLocalRef(classClazz);\n    env->DeleteLocalRef(exceptionClazz);\n\n    if (! success) {\n        env->ExceptionClear();\n        snprintf(buf, bufLen, \"%s\", \"<error getting class name>\");\n    }\n}\n\nCRYSTAX_LOCAL\nconst char* jniStrError(int errnum, char* buf, size_t buflen)\n{\n    TRACE;\n    // note: glibc has a nonstandard strerror_r that returns char* rather\n    // than POSIX's int.\n    // char *strerror_r(int errnum, char *buf, size_t n);\n    char* ret = (char*) strerror_r(errnum, buf, buflen);\n    if (((int)ret) == 0) {\n        //POSIX strerror_r, success\n        return buf;\n    } else if (((int)ret) == -1) {\n        //POSIX strerror_r, failure\n        // (Strictly, POSIX only guarantees a value other than 0. The safest\n        // way to implement this function is to use C++ and overload on the\n        // type of strerror_r to accurately distinguish GNU from POSIX. But\n        // realistic implementations will always return -1.)\n        snprintf(buf, buflen, \"errno %d\", errnum);\n        return buf;\n    } else {\n        //glibc strerror_r returning a string\n        return ret;\n    }\n}\n\n/*\n * Throw an exception with the specified class and an optional message.\n *\n * If an exception is currently pending, we log a warning message and\n * clear it.\n *\n * Returns 0 if the specified exception was successfully thrown.  (Some\n * sort of exception will always be pending when this returns.)\n */\nCRYSTAX_LOCAL\nint jniThrowException(JNIEnv* env, const char* className, const char* msg)\n{\n    TRACE;\n    jclass exceptionClass;\n\n    if (env->ExceptionCheck()) {\n        /* TODO: consider creating the new exception with this as \"cause\" */\n        char buf[256];\n\n        jthrowable exception = env->ExceptionOccurred();\n        env->ExceptionClear();\n\n        if (exception != NULL) {\n            getExceptionSummary(env, exception, buf, sizeof(buf));\n            env->DeleteLocalRef(exception);\n        }\n    }\n\n    exceptionClass = env->FindClass(className);\n    if (exceptionClass == NULL) {\n        /* ClassNotFoundException now pending */\n        return -1;\n    }\n\n    int result = 0;\n    if (env->ThrowNew(exceptionClass, msg) != JNI_OK) {\n        /* an exception, most likely OOM, will now be pending */\n        result = -1;\n    }\n\n    env->DeleteLocalRef(exceptionClass);\n    return result;\n}\n\n/*\n * Throw a java.lang.NullPointerException, with an optional message.\n */\nCRYSTAX_LOCAL\nint jniThrowNullPointerException(JNIEnv* env, const char* msg)\n{\n    TRACE;\n    return jniThrowException(env, \"java/lang/NullPointerException\", msg);\n}\n\n/*\n * Throw a java.lang.RuntimeException, with an optional message.\n */\nCRYSTAX_LOCAL\nint jniThrowRuntimeException(JNIEnv* env, const char* msg)\n{\n    TRACE;\n    return jniThrowException(env, \"java/lang/RuntimeException\", msg);\n}\n\n/*\n * Throw a java.io.IOException, generating the message from errno.\n */\nCRYSTAX_LOCAL\nint jniThrowIOException(JNIEnv* env, int errnum)\n{\n    TRACE;\n    char buffer[80];\n    const char* message = jniStrError(errnum, buffer, sizeof(buffer));\n    return jniThrowException(env, \"java/io/IOException\", message);\n}\n\nCRYSTAX_LOCAL\nint jniThrowExceptionFmt(JNIEnv* env, const char* className, const char* fmt, va_list args) {\n    char msgBuf[512];\n    vsnprintf(msgBuf, sizeof(msgBuf), fmt, args);\n    return jniThrowException(env, className, msgBuf);\n}\n\nCRYSTAX_LOCAL\njobject jniCreateFileDescriptor(JNIEnv* env, int fd) {\n    DBG(\"fd=%d\", fd);\n    jobject fileDescriptor = env->NewObject(clsFD.get(), midFDCtor);\n    jniSetFileDescriptorOfFD(env, fileDescriptor, fd);\n    return fileDescriptor;\n}\n\nCRYSTAX_LOCAL\nint jniGetFDFromFileDescriptor(JNIEnv* env, jobject fileDescriptor) {\n    TRACE;\n    return env->GetIntField(fileDescriptor, fidFD);\n}\n\nCRYSTAX_LOCAL\nvoid jniSetFileDescriptorOfFD(JNIEnv* env, jobject fileDescriptor, int fd) {\n    DBG(\"fd=%d\", fd);\n    env->SetIntField(fileDescriptor, fidFD, fd);\n}\n\nCRYSTAX_LOCAL\njlong translateLockLength(jlong length) {\n    TRACE;\n    // FileChannel.tryLock uses Long.MAX_VALUE to mean \"lock the whole\n    // file\", where POSIX would use 0. We can support that special case,\n    // even for files whose actual length we can't represent. For other\n    // out of range lengths, though, we want our range checking to fire.\n    return (length == 0x7fffffffffffffffLL) ? 0 : length;\n}\n\n// Checks whether we can safely treat the given jlong as an off_t without\n// accidental loss of precision.\n// TODO: this is bogus; we should use _FILE_OFFSET_BITS=64.\nCRYSTAX_LOCAL\nbool offsetTooLarge(JNIEnv* env, jlong longOffset) {\n    TRACE;\n    if (sizeof(off_t) >= sizeof(jlong)) {\n        // We're only concerned about the possibility that off_t is\n        // smaller than jlong. off_t is signed, so we don't need to\n        // worry about signed/unsigned.\n        return false;\n    }\n\n    // TODO: use std::numeric_limits<off_t>::max() and min() when we have them.\n    assert(sizeof(off_t) == sizeof(int));\n    static const off_t off_t_max = INT_MAX;\n    static const off_t off_t_min = INT_MIN;\n\n    if (longOffset > off_t_max || longOffset < off_t_min) {\n        // \"Value too large for defined data type\".\n        jniThrowIOException(env, EOVERFLOW);\n        return true;\n    }\n    return false;\n}\n\nCRYSTAX_LOCAL\nstruct flock flockFromStartAndLength(jlong start, jlong length) {\n    TRACE;\n    struct flock lock;\n    memset(&lock, 0, sizeof(lock));\n\n    lock.l_whence = SEEK_SET;\n    lock.l_start = start;\n    lock.l_len = length;\n\n    return lock;\n}\n\nCRYSTAX_LOCAL\nint EsTranslateOpenFlags(int flags) {\n    TRACE;\n    int realFlags = 0;\n\n    if (flags & HyOpenAppend) {\n        realFlags |= O_APPEND;\n    }\n    if (flags & HyOpenTruncate) {\n        realFlags |= O_TRUNC;\n    }\n    if (flags & HyOpenCreate) {\n        realFlags |= O_CREAT;\n    }\n    if (flags & HyOpenCreateNew) {\n        realFlags |= O_EXCL | O_CREAT;\n    }\n#ifdef O_SYNC\n    if (flags & HyOpenSync) {\n        realFlags |= O_SYNC;\n    }\n#endif\n    if (flags & HyOpenRead) {\n        if (flags & HyOpenWrite) {\n            return (O_RDWR | realFlags);\n        }\n        return (O_RDONLY | realFlags);\n    }\n    if (flags & HyOpenWrite) {\n        return (O_WRONLY | realFlags);\n    }\n    return -1;\n}\n\nCRYSTAX_LOCAL\nbool register_native_methods(JNIEnv *env, const char *clsname, const JNINativeMethod *table, int size)\n{\n    DBG(\"Registering %s natives\", clsname);\n\n    jclass cls = env->FindClass(clsname);\n    if (!cls)\n    {\n        ERR(\"Native registration unable to find class %s\", clsname);\n        return false;\n    }\n\n    bool result = env->RegisterNatives(cls, table, size) == 0;\n    if (!result)\n        ERR(\"RegisterNatives failed for %s\", clsname);\n\n    env->DeleteLocalRef(cls);\n    return result;\n}\n\nCRYSTAX_LOCAL\nbool init(JNIEnv *env)\n{\n    TRACE;\n\n    DBG(\"init FileDescriptor native variables\");\n    clsFD = find_class(env, \"java/io/FileDescriptor\");\n    midFDCtor = get_method_id(env, clsFD, \"<init>\", \"()V\");\n    fidFD = get_field_id(env, clsFD, \"descriptor\", \"I\");\n\n    DBG(\"detect API level...\");\n    jint sdkInt = get_static_field<jint>(env, \"android/os/Build$VERSION\", \"SDK_INT\");\n    DBG(\"sdkInt: %d\", (int)sdkInt);\n\n    switch (sdkInt)\n    {\n    case ANDROID_VERSION_BASE:\n    case ANDROID_VERSION_BASE_1_1:\n    case ANDROID_VERSION_CUPCAKE:\n    case ANDROID_VERSION_DONUT:\n        ERR(\"not supported android version: %d\", (int)sdkInt);\n        return false;\n    case ANDROID_VERSION_ECLAIR:\n    case ANDROID_VERSION_ECLAIR_0_1:\n    case ANDROID_VERSION_ECLAIR_MR1:\n        DBG(\"use eclair implementation\");\n        return eclair::init(env);\n    case ANDROID_VERSION_FROYO:\n        DBG(\"use froyo implementation\");\n        return froyo::init(env);\n    case ANDROID_VERSION_GINGERBREAD:\n    case ANDROID_VERSION_GINGERBREAD_MR1:\n    case ANDROID_VERSION_HONEYCOMB:\n    case ANDROID_VERSION_HONEYCOMB_MR1:\n    case ANDROID_VERSION_HONEYCOMB_MR2:\n        DBG(\"use gingerbread implementation\");\n        return gingerbread::init(env);\n    default:\n        DBG(\"use ics implementation\");\n        return ics::init(env);\n    }\n}\n\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_OSFS_HPP_f0c846419e2445799a2feab251ed1204\n#define _CRYSTAX_FILEIO_OSFS_HPP_f0c846419e2445799a2feab251ed1204\n\n#include \"fileio/common.hpp\"\n\n/* Values for HyFileOpen */\n#define HyMaxPath 1024\n#define HyOpenRead    1\n#define HyOpenWrite   2\n#define HyOpenCreate  4\n#define HyOpenTruncate  8\n#define HyOpenAppend  16\n#define HyOpenText    32\n/* Use this flag with HyOpenCreate, if this flag is specified then\n * trying to create an existing file will fail\n */\n#define HyOpenCreateNew 64\n#define HyOpenSync      128\n#define SHARED_LOCK_TYPE 1L\n\n#ifdef TEMP_FAILURE_RETRY\n#undef TEMP_FAILURE_RETRY\n#endif\n#define TEMP_FAILURE_RETRY(exp) ({         \\\n    typeof (exp) _rc;                      \\\n    do {                                   \\\n        _rc = (exp);                       \\\n        DBG(\"_rc=%d\", (int)_rc);           \\\n    } while (_rc == -1 && errno == EINTR); \\\n    _rc; })\n\n#ifdef NATIVE_METHOD\n#undef NATIVE_METHOD\n#endif\n#define NATIVE_METHOD(className, functionName, signature) \\\n    { #functionName, signature, reinterpret_cast<void*>(className ## _ ## functionName) }\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\n\nextern jni::jhclass clsFD;\nextern jmethodID midFDCtor;\nextern jfieldID fidFD;\n\nvoid getExceptionSummary(JNIEnv* env, jthrowable exception, char* buf, size_t bufLen);\nconst char* jniStrError(int errnum, char* buf, size_t buflen);\nint jniThrowException(JNIEnv* env, const char* className, const char* msg);\nint jniThrowNullPointerException(JNIEnv* env, const char* msg);\nint jniThrowRuntimeException(JNIEnv* env, const char* msg);\nint jniThrowIOException(JNIEnv* env, int errnum);\nint jniThrowExceptionFmt(JNIEnv* env, const char* className, const char* fmt, va_list args);\n\ninline int jniThrowExceptionFmt(JNIEnv* env, const char* className, const char* fmt, ...) {\n    va_list args;\n    va_start(args, fmt);\n    return jniThrowExceptionFmt(env, className, fmt, args);\n    va_end(args);\n}\n\njobject jniCreateFileDescriptor(JNIEnv* env, int fd);\nint jniGetFDFromFileDescriptor(JNIEnv* env, jobject fileDescriptor);\nvoid jniSetFileDescriptorOfFD(JNIEnv* env, jobject fileDescriptor, int value);\n\njlong translateLockLength(jlong length);\nbool offsetTooLarge(JNIEnv* env, jlong longOffset);\nstruct flock flockFromStartAndLength(jlong start, jlong length);\nint EsTranslateOpenFlags(int flags);\n\n// ScopedBooleanArrayRO, ScopedByteArrayRO, ScopedCharArrayRO, ScopedDoubleArrayRO,\n// ScopedFloatArrayRO, ScopedIntArrayRO, ScopedLongArrayRO, and ScopedShortArrayRO provide\n// convenient read-only access to Java arrays from JNI code. This is cheaper than read-write\n// access and should be used by default.\n#define INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(PRIMITIVE_TYPE, NAME) \\\n    class Scoped ## NAME ## ArrayRO { \\\n    public: \\\n        Scoped ## NAME ## ArrayRO(JNIEnv* env, PRIMITIVE_TYPE ## Array javaArray) \\\n        : mEnv(env), mJavaArray(javaArray), mRawArray(NULL) { \\\n            if (mJavaArray == NULL) { \\\n                jniThrowNullPointerException(mEnv, NULL); \\\n            } else { \\\n                mRawArray = mEnv->Get ## NAME ## ArrayElements(mJavaArray, NULL); \\\n            } \\\n        } \\\n        ~Scoped ## NAME ## ArrayRO() { \\\n            if (mRawArray) { \\\n                mEnv->Release ## NAME ## ArrayElements(mJavaArray, mRawArray, JNI_ABORT); \\\n            } \\\n        } \\\n        const PRIMITIVE_TYPE* get() const { return mRawArray; } \\\n        const PRIMITIVE_TYPE& operator[](size_t n) const { return mRawArray[n]; } \\\n        size_t size() const { return mEnv->GetArrayLength(mJavaArray); } \\\n    private: \\\n        JNIEnv* mEnv; \\\n        PRIMITIVE_TYPE ## Array mJavaArray; \\\n        PRIMITIVE_TYPE* mRawArray; \\\n        Scoped ## NAME ## ArrayRO(const Scoped ## NAME ## ArrayRO&); \\\n        void operator=(const Scoped ## NAME ## ArrayRO&); \\\n    }\n\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jboolean, Boolean);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jbyte, Byte);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jchar, Char);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jdouble, Double);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jfloat, Float);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jint, Int);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jlong, Long);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO(jshort, Short);\n\n#undef INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RO\n\n// ScopedBooleanArrayRW, ScopedByteArrayRW, ScopedCharArrayRW, ScopedDoubleArrayRW,\n// ScopedFloatArrayRW, ScopedIntArrayRW, ScopedLongArrayRW, and ScopedShortArrayRW provide\n// convenient read-write access to Java arrays from JNI code. These are more expensive,\n// since they entail a copy back onto the Java heap, and should only be used when necessary.\n#define INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(PRIMITIVE_TYPE, NAME) \\\n    class Scoped ## NAME ## ArrayRW { \\\n    public: \\\n        Scoped ## NAME ## ArrayRW(JNIEnv* env, PRIMITIVE_TYPE ## Array javaArray) \\\n        : mEnv(env), mJavaArray(javaArray), mRawArray(NULL) { \\\n            if (mJavaArray == NULL) { \\\n                jniThrowNullPointerException(mEnv, NULL); \\\n            } else { \\\n                mRawArray = mEnv->Get ## NAME ## ArrayElements(mJavaArray, NULL); \\\n            } \\\n        } \\\n        ~Scoped ## NAME ## ArrayRW() { \\\n            if (mRawArray) { \\\n                mEnv->Release ## NAME ## ArrayElements(mJavaArray, mRawArray, 0); \\\n            } \\\n        } \\\n        const PRIMITIVE_TYPE* get() const { return mRawArray; } \\\n        const PRIMITIVE_TYPE& operator[](size_t n) const { return mRawArray[n]; } \\\n        PRIMITIVE_TYPE* get() { return mRawArray; } \\\n        PRIMITIVE_TYPE& operator[](size_t n) { return mRawArray[n]; } \\\n        size_t size() const { return mEnv->GetArrayLength(mJavaArray); } \\\n    private: \\\n        JNIEnv* mEnv; \\\n        PRIMITIVE_TYPE ## Array mJavaArray; \\\n        PRIMITIVE_TYPE* mRawArray; \\\n        Scoped ## NAME ## ArrayRW(const Scoped ## NAME ## ArrayRW&); \\\n        void operator=(const Scoped ## NAME ## ArrayRW&); \\\n    }\n\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jboolean, Boolean);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jbyte, Byte);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jchar, Char);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jdouble, Double);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jfloat, Float);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jint, Int);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jlong, Long);\nINSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW(jshort, Short);\n\n#undef INSTANTIATE_SCOPED_PRIMITIVE_ARRAY_RW\n\nbool register_native_methods(JNIEnv *env, const char *clsname, const JNINativeMethod *table, int size);\n\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_FILEIO_OSFS_HPP_f0c846419e2445799a2feab251ed1204\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs_eclair.cpp",
    "content": "/*\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the NOTICE file distributed with\n *  this work for additional information regarding copyright ownership.\n *  The ASF licenses this file to You under the Apache License, Version 2.0\n *  (the \"License\"); you may not use this file except in compliance with\n *  the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"osfs/osfs.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\nnamespace eclair\n{\n\nstatic void convertToPlatform(char *path) {\n    char *pathIndex;\n\n    pathIndex = path;\n    while (*pathIndex != '\\0') {\n        if(*pathIndex == '\\\\') {\n            *pathIndex = '/';\n        }\n        pathIndex++;\n    }\n}\n\nstatic jint OSFileSystem_lockImpl(JNIEnv * env, jobject thiz, jint handle,\n        jlong start, jlong length, jint typeFlag, jboolean waitFlag) {\n\n    DBG(\"fd=%d\", handle);\n    int rc;\n    int waitMode = (waitFlag) ? F_SETLKW : F_SETLK;\n    struct flock lock;\n\n    ::memset(&lock, 0, sizeof(lock));\n\n    // If start or length overflow the max values we can represent, then max them out.\n    if(start > 0x7fffffffL) {\n        start = 0x7fffffffL;\n    }\n    if(length > 0x7fffffffL) {\n        length = 0x7fffffffL;\n    }\n\n    lock.l_whence = SEEK_SET;\n    lock.l_start = start;\n    lock.l_len = length;\n\n    if((typeFlag & SHARED_LOCK_TYPE) == SHARED_LOCK_TYPE) {\n        lock.l_type = F_RDLCK;\n    } else {\n        lock.l_type = F_WRLCK;\n    }\n\n    do {\n        rc = ::fcntl(handle, waitMode, &lock);\n    } while ((rc < 0) && (errno == EINTR));\n\n    return (rc == -1) ? -1 : 0;\n}\n\nstatic jint OSFileSystem_getAllocGranularity(JNIEnv * env, jobject thiz) {\n    TRACE;\n    static int allocGranularity = 0;\n    if(allocGranularity == 0) {\n        allocGranularity = ::getpagesize();\n    }\n    return allocGranularity;\n}\n\nstatic jint OSFileSystem_unlockImpl(JNIEnv * env, jobject thiz, jint handle,\n        jlong start, jlong length) {\n\n    DBG(\"fd=%d\", handle);\n\n    int rc;\n    struct flock lock;\n\n    ::memset(&lock, 0, sizeof(lock));\n\n    // If start or length overflow the max values we can represent, then max them out.\n    if(start > 0x7fffffffL) {\n        start = 0x7fffffffL;\n    }\n    if(length > 0x7fffffffL) {\n        length = 0x7fffffffL;\n    }\n\n    lock.l_whence = SEEK_SET;\n    lock.l_start = start;\n    lock.l_len = length;\n    lock.l_type = F_UNLCK;\n\n    do {\n        rc = ::fcntl(handle, F_SETLKW, &lock);\n    } while ((rc < 0) && (errno == EINTR));\n\n    return (rc == -1) ? -1 : 0;\n}\n\nstatic jint OSFileSystem_fflushImpl(JNIEnv * env, jobject thiz, jint fd,\n        jboolean metadata) {\n    DBG(\"fd=%d\", fd);\n    return (jint) ::fsync(fd);\n}\n\nstatic jlong OSFileSystem_seekImpl(JNIEnv * env, jobject thiz, jint fd,\n        jlong offset, jint whence) {\n\n    DBG(\"fd=%d\", fd);\n    int mywhence = 0;\n\n    /* Convert whence argument */\n    switch (whence) {\n        case 1:\n                mywhence = 0;\n                break;\n        case 2:\n                mywhence = 1;\n                break;\n        case 4:\n                mywhence = 2;\n                break;\n        default:\n                return -1;\n    }\n\n\n    off_t localOffset = (int) offset;\n\n    if((mywhence < 0) || (mywhence > 2)) {\n        return -1;\n    }\n\n    /* If file offsets are 32 bit, truncate the seek to that range */\n    if(sizeof (off_t) < sizeof (jlong)) {\n        if(offset > 0x7FFFFFFF) {\n            localOffset = 0x7FFFFFFF;\n        } else if(offset < -0x7FFFFFFF) {\n            localOffset = -0x7FFFFFFF;\n        }\n    }\n\n    return (jlong) ::lseek(fd, localOffset, mywhence);\n}\n\nstatic jlong OSFileSystem_readDirectImpl(JNIEnv * env, jobject thiz, jint fd,\n        jint buf, jint offset, jint nbytes) {\n    DBG(\"fd=%d\", fd);\n    jint result;\n    if(nbytes == 0) {\n        return (jlong) 0;\n    }\n\n    result = ::read(fd, (void *) ((jint *)(buf+offset)), (int) nbytes);\n    if(result == 0) {\n        return (jlong) -1;\n    } else {\n        return (jlong) result;\n    }\n}\n\nstatic jlong OSFileSystem_writeDirectImpl(JNIEnv * env, jobject thiz, jint fd,\n        jint buf, jint offset, jint nbytes) {\n\n    DBG(\"fd=%d\", fd);\n\n    int rc = 0;\n\n    /* write will just do the right thing for HYPORT_TTY_OUT and HYPORT_TTY_ERR */\n    rc = ::write (fd, (const void *) ((jint *)(buf+offset)), (int) nbytes);\n\n    if(rc == -1) {\n        jniThrowException(env, \"java/io/IOException\", ::strerror(errno));\n        return -2;\n    }\n    return (jlong) rc;\n\n}\n\nstatic jlong OSFileSystem_readImpl(JNIEnv * env, jobject thiz, jint fd,\n        jbyteArray byteArray, jint offset, jint nbytes) {\n\n    DBG(\"fd=%d\", fd);\n    jboolean isCopy;\n    jbyte *bytes;\n    jlong result;\n\n    if (nbytes == 0) {\n        return 0;\n    }\n\n    bytes = env->GetByteArrayElements(byteArray, &isCopy);\n\n    for (;;) {\n        result = ::read(fd, (void *) (bytes + offset), (int) nbytes);\n\n        if ((result != -1) || (errno != EINTR)) {\n            break;\n        }\n\n        /*\n         * If we didn't break above, that means that the read() call\n         * returned due to EINTR. We shield Java code from this\n         * possibility by trying again. Note that this is different\n         * from EAGAIN, which should result in this code throwing\n         * an InterruptedIOException.\n         */\n    }\n\n    env->ReleaseByteArrayElements(byteArray, bytes, 0);\n\n    if (result == 0) {\n        return -1;\n    }\n\n    if (result == -1) {\n        if (errno == EAGAIN) {\n            jniThrowException(env, \"java/io/InterruptedIOException\",\n                    \"Read timed out\");\n        } else {\n        jniThrowException(env, \"java/io/IOException\", ::strerror(errno));\n        }\n    }\n\n    return result;\n}\n\nstatic jlong OSFileSystem_writeImpl(JNIEnv * env, jobject thiz, jint fd,\n        jbyteArray byteArray, jint offset, jint nbytes) {\n\n    DBG(\"fd=%d\", fd);\n    jboolean isCopy;\n    jbyte *bytes = env->GetByteArrayElements(byteArray, &isCopy);\n    jlong result;\n\n    for (;;) {\n        result = ::write(fd, (const char *) bytes + offset, (int) nbytes);\n\n        if ((result != -1) || (errno != EINTR)) {\n            break;\n        }\n\n        /*\n         * If we didn't break above, that means that the read() call\n         * returned due to EINTR. We shield Java code from this\n         * possibility by trying again. Note that this is different\n         * from EAGAIN, which should result in this code throwing\n         * an InterruptedIOException.\n         */\n    }\n\n    env->ReleaseByteArrayElements(byteArray, bytes, JNI_ABORT);\n\n    if (result == -1) {\n        if (errno == EAGAIN) {\n            jniThrowException(env, \"java/io/InterruptedIOException\",\n                    \"Write timed out\");\n        } else {\n        jniThrowException(env, \"java/io/IOException\", strerror(errno));\n        }\n    }\n\n    return result;\n}\n\nstatic jlong OSFileSystem_readvImpl(JNIEnv *env, jobject thiz, jint fd,\n        jintArray jbuffers, jintArray joffsets, jintArray jlengths, jint size) {\n\n    DBG(\"fd=%d\", fd);\n    jboolean bufsCopied = JNI_FALSE;\n    jboolean offsetsCopied = JNI_FALSE;\n    jboolean lengthsCopied = JNI_FALSE;\n    jint *bufs;\n    jint *offsets;\n    jint *lengths;\n    int i = 0;\n    long totalRead = 0;\n    struct iovec *vectors = (struct iovec *)::malloc(size * sizeof(struct iovec));\n    if(vectors == NULL) {\n        return -1;\n    }\n    bufs = env->GetIntArrayElements(jbuffers, &bufsCopied);\n    offsets = env->GetIntArrayElements(joffsets, &offsetsCopied);\n    lengths = env->GetIntArrayElements(jlengths, &lengthsCopied);\n    while(i < size) {\n        vectors[i].iov_base = (void *)((int)(bufs[i]+offsets[i]));\n        vectors[i].iov_len = lengths[i];\n        i++;\n    }\n    totalRead = ::readv(fd, vectors, size);\n    if(bufsCopied) {\n        env->ReleaseIntArrayElements(jbuffers, bufs, JNI_ABORT);\n    }\n    if(offsetsCopied) {\n        env->ReleaseIntArrayElements(joffsets, offsets, JNI_ABORT);\n    }\n    if(lengthsCopied) {\n        env->ReleaseIntArrayElements(jlengths, lengths, JNI_ABORT);\n    }\n    free(vectors);\n    return totalRead;\n}\n\nstatic jlong OSFileSystem_writevImpl(JNIEnv *env, jobject thiz, jint fd,\n        jintArray jbuffers, jintArray joffsets, jintArray jlengths, jint size) {\n\n    DBG(\"fd=%d\", fd);\n    jboolean bufsCopied = JNI_FALSE;\n    jboolean offsetsCopied = JNI_FALSE;\n    jboolean lengthsCopied = JNI_FALSE;\n    jint *bufs;\n    jint *offsets;\n    jint *lengths;\n    int i = 0;\n    long totalRead = 0;\n    struct iovec *vectors = (struct iovec *)::malloc(size * sizeof(struct iovec));\n    if(vectors == NULL) {\n        return -1;\n    }\n    bufs = env->GetIntArrayElements(jbuffers, &bufsCopied);\n    offsets = env->GetIntArrayElements(joffsets, &offsetsCopied);\n    lengths = env->GetIntArrayElements(jlengths, &lengthsCopied);\n    while(i < size) {\n        vectors[i].iov_base = (void *)((int)(bufs[i]+offsets[i]));\n        vectors[i].iov_len = lengths[i];\n        i++;\n    }\n    totalRead = ::writev(fd, vectors, size);\n    if(bufsCopied) {\n        env->ReleaseIntArrayElements(jbuffers, bufs, JNI_ABORT);\n    }\n    if(offsetsCopied) {\n        env->ReleaseIntArrayElements(joffsets, offsets, JNI_ABORT);\n    }\n    if(lengthsCopied) {\n        env->ReleaseIntArrayElements(jlengths, lengths, JNI_ABORT);\n    }\n    free(vectors);\n    return totalRead;\n}\n\nstatic jint OSFileSystem_closeImpl(JNIEnv * env, jobject thiz, jint fd) {\n    jint result;\n\n    DBG(\"fd=%d\", fd);\n    for (;;) {\n        result = (jint) ::close(fd);\n\n        if ((result != -1) || (errno != EINTR)) {\n            break;\n        }\n\n        /*\n         * If we didn't break above, that means that the close() call\n         * returned due to EINTR. We shield Java code from this\n         * possibility by trying again.\n         */\n    }\n\n    return result;\n}\n\nstatic jint OSFileSystem_truncateImpl(JNIEnv * env, jobject thiz, jint fd,\n        jlong size) {\n\n    DBG(\"fd=%d\", fd);\n\n    int rc;\n    off_t length = (off_t) size;\n\n    // If file offsets are 32 bit, truncate the newLength to that range\n    if(sizeof (off_t) < sizeof (jlong)) {\n        if(length > 0x7FFFFFFF) {\n            length = 0x7FFFFFFF;\n        } else if(length < -0x7FFFFFFF) {\n            length = -0x7FFFFFFF;\n        }\n    }\n\n  rc = ::ftruncate((int)fd, length);\n\n  return (jint) rc;\n\n}\n\nstatic jint OSFileSystem_openImpl(JNIEnv * env, jobject obj, jbyteArray path,\n        jint jflags) {\n\n    TRACE;\n    int flags = 0;\n    int mode = 0;\n    jint * portFD;\n    jsize length;\n    char pathCopy[HyMaxPath];\n\n// BEGIN android-changed\n// don't want default permissions to allow global access.\n    switch(jflags) {\n      case 0:\n              flags = HyOpenRead;\n              mode = 0;\n              break;\n      case 1:\n              flags = HyOpenCreate | HyOpenWrite | HyOpenTruncate;\n              mode = 0600;\n              break;\n      case 16:\n              flags = HyOpenRead | HyOpenWrite | HyOpenCreate;\n              mode = 0600;\n              break;\n      case 32:\n              flags = HyOpenRead | HyOpenWrite | HyOpenCreate | HyOpenSync;\n              mode = 0600;\n              break;\n      case 256:\n              flags = HyOpenWrite | HyOpenCreate | HyOpenAppend;\n              mode = 0600;\n              break;\n    }\n// BEGIN android-changed\n\n    flags = EsTranslateOpenFlags(flags);\n\n    length = env->GetArrayLength (path);\n    length = length < HyMaxPath - 1 ? length : HyMaxPath - 1;\n    env->GetByteArrayRegion (path, 0, length, (jbyte *)pathCopy);\n    pathCopy[length] = '\\0';\n    convertToPlatform (pathCopy);\n\n    int cc;\n\n    if(pathCopy == NULL) {\n        jniThrowException(env, \"java/lang/NullPointerException\", NULL);\n        return -1;\n    }\n\n    do {\n        cc = ::open(pathCopy, flags, mode);\n    } while(cc < 0 && errno == EINTR);\n\n    if(cc < 0 && errno > 0) {\n        cc = -errno;\n    }\n\n    DBG(\"return fd=%d\", cc);\n    return cc;\n}\n\nstatic jlong OSFileSystem_transferImpl(JNIEnv *env, jobject thiz, jint fd,\n        jobject sd, jlong offset, jlong count) {\n\n    DBG(\"fd=%d\", fd);\n    int socket;\n    off_t off;\n\n    socket = jniGetFDFromFileDescriptor(env, sd);\n    if(socket == 0 || socket == -1) {\n        return -1;\n    }\n\n    /* Value of offset is checked in jint scope (checked in java layer)\n       The conversion here is to guarantee no value lost when converting offset to off_t\n     */\n    off = offset;\n\n    return sendfile(socket,(int)fd,(off_t *)&off,(size_t)count);\n}\n\nstatic jint OSFileSystem_ioctlAvailable(JNIEnv *env, jobject thiz, jint fd) {\n    DBG(\"fd=%d\", fd);\n    int avail = 0;\n    int rc = ::ioctl(fd, FIONREAD, &avail);\n\n    /*\n     * On underlying platforms Android cares about (read \"Linux\"),\n     * ioctl(fd, FIONREAD, &avail) is supposed to do the following:\n     *\n     * If the fd refers to a regular file, avail is set to\n     * the difference between the file size and the current cursor.\n     * This may be negative if the cursor is past the end of the file.\n     *\n     * If the fd refers to an open socket or the read end of a\n     * pipe, then avail will be set to a number of bytes that are\n     * available to be read without blocking.\n     *\n     * If the fd refers to a special file/device that has some concept\n     * of buffering, then avail will be set in a corresponding way.\n     *\n     * If the fd refers to a special device that does not have any\n     * concept of buffering, then the ioctl call will return a negative\n     * number, and errno will be set to ENOTTY.\n     *\n     * If the fd refers to a special file masquerading as a regular file,\n     * then avail may be returned as negative, in that the special file\n     * may appear to have zero size and yet a previous read call may have\n     * actually read some amount of data and caused the cursor to be\n     * advanced.\n     */\n\n    if (rc >= 0) {\n        /*\n         * Success, but make sure not to return a negative number (see\n         * above).\n         */\n        if (avail < 0) {\n            avail = 0;\n        }\n    } else if (errno == ENOTTY) {\n        /* The fd is unwilling to opine about its read buffer. */\n        avail = 0;\n    } else {\n        /* Something strange is happening. */\n        jniThrowException(env, \"java/io/IOException\", strerror(errno));\n        avail = 0;\n    }\n\n    return (jint) avail;\n}\n\nstatic jlong OSFileSystem_ttyReadImpl(JNIEnv *env, jobject thiz,\n        jbyteArray byteArray, jint offset, jint nbytes) {\n\n    TRACE;\n    jboolean isCopy;\n    jbyte *bytes = env->GetByteArrayElements(byteArray, &isCopy);\n    jlong result;\n\n    for(;;) {\n\n        result = (jlong) ::read(STDIN_FILENO, (char *)(bytes + offset), (int) nbytes);\n\n        if ((result != -1) || (errno != EINTR)) {\n            break;\n        }\n\n        /*\n         * If we didn't break above, that means that the read() call\n         * returned due to EINTR. We shield Java code from this\n         * possibility by trying again. Note that this is different\n         * from EAGAIN, which should result in this code throwing\n         * an InterruptedIOException.\n         */\n    }\n\n    env->ReleaseByteArrayElements(byteArray, bytes, 0);\n\n    if (result == 0) {\n        return -1;\n    }\n\n    if (result == -1) {\n        if (errno == EAGAIN) {\n            jniThrowException(env, \"java/io/InterruptedIOException\",\n                    \"Read timed out\");\n        } else {\n            jniThrowException(env, \"java/io/IOException\", strerror(errno));\n        }\n    }\n\n    return result;\n}\n\nstatic JNINativeMethod osfs_methods[] = {\n    NATIVE_METHOD(OSFileSystem, lockImpl, \"(IJJIZ)I\"),\n    NATIVE_METHOD(OSFileSystem, getAllocGranularity, \"()I\"),\n    NATIVE_METHOD(OSFileSystem, unlockImpl, \"(IJJ)I\"),\n    NATIVE_METHOD(OSFileSystem, fflushImpl, \"(IZ)I\"),\n    NATIVE_METHOD(OSFileSystem, seekImpl, \"(IJI)J\"),\n    NATIVE_METHOD(OSFileSystem, readDirectImpl, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, writeDirectImpl, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, readImpl, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, writeImpl, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, readvImpl, \"(I[I[I[II)J\"),\n    NATIVE_METHOD(OSFileSystem, writevImpl, \"(I[I[I[II)J\"),\n    NATIVE_METHOD(OSFileSystem, closeImpl, \"(I)I\"),\n    NATIVE_METHOD(OSFileSystem, truncateImpl, \"(IJ)I\"),\n    NATIVE_METHOD(OSFileSystem, openImpl, \"([BI)I\"),\n    NATIVE_METHOD(OSFileSystem, transferImpl, \"(ILjava/io/FileDescriptor;JJ)J\"),\n    NATIVE_METHOD(OSFileSystem, ioctlAvailable, \"(I)I\"),\n    NATIVE_METHOD(OSFileSystem, ttyReadImpl, \"([BII)J\"),\n};\n\nCRYSTAX_LOCAL\nbool init(JNIEnv *env)\n{\n    DBG(\"trying to register OSFileSystem (eclair implementation) native methods...\");\n    const char *osfsname = \"org/apache/harmony/luni/platform/OSFileSystem\";\n    if (!register_native_methods(env, osfsname,\n            osfs_methods, sizeof(osfs_methods)/sizeof(osfs_methods[0])))\n    {\n        ERR(\"can't register OSFileSystem native methods\");\n        return false;\n    }\n    DBG(\"OSFileSystem (eclair implementation) native methods registered\");\n\n    return true;\n}\n\n} // namespace eclair\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs_froyo.cpp",
    "content": "/*\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the NOTICE file distributed with\n *  this work for additional information regarding copyright ownership.\n *  The ASF licenses this file to You under the Apache License, Version 2.0\n *  (the \"License\"); you may not use this file except in compliance with\n *  the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"osfs/osfs.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\nnamespace froyo\n{\n\n// Translate three Java int[]s to a native iovec[] for readv and writev.\nCRYSTAX_LOCAL\niovec* initIoVec(JNIEnv* env,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    TRACE;\n    iovec* vectors = new iovec[size];\n    if (vectors == NULL) {\n        jniThrowException(env, \"java/lang/OutOfMemoryError\", \"native heap\");\n        return NULL;\n    }\n    jint *buffers = env->GetIntArrayElements(jBuffers, NULL);\n    jint *offsets = env->GetIntArrayElements(jOffsets, NULL);\n    jint *lengths = env->GetIntArrayElements(jLengths, NULL);\n    for (int i = 0; i < size; ++i) {\n        vectors[i].iov_base = reinterpret_cast<void*>(buffers[i] + offsets[i]);\n        vectors[i].iov_len = lengths[i];\n    }\n    env->ReleaseIntArrayElements(jBuffers, buffers, JNI_ABORT);\n    env->ReleaseIntArrayElements(jOffsets, offsets, JNI_ABORT);\n    env->ReleaseIntArrayElements(jLengths, lengths, JNI_ABORT);\n    return vectors;\n}\n\nstatic jint OSFileSystem_close(JNIEnv* env, jobject, jint fd) {\n    DBG(\"fd=%d\", fd);\n    jint rc = TEMP_FAILURE_RETRY(::close(fd));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic void OSFileSystem_fflush(JNIEnv* env, jobject, jint fd,\n        jboolean metadata) {\n    DBG(\"fd=%d\", fd);\n    int rc = ::fsync(fd);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n}\n\nstatic jint OSFileSystem_getAllocGranularity(JNIEnv* env, jobject) {\n    TRACE;\n    static int allocGranularity = ::getpagesize();\n    return allocGranularity;\n}\n\nstatic jint OSFileSystem_ioctlAvailable(JNIEnv*env, jobject, jint fd) {\n    /*\n     * On underlying platforms Android cares about (read \"Linux\"),\n     * ioctl(fd, FIONREAD, &avail) is supposed to do the following:\n     *\n     * If the fd refers to a regular file, avail is set to\n     * the difference between the file size and the current cursor.\n     * This may be negative if the cursor is past the end of the file.\n     *\n     * If the fd refers to an open socket or the read end of a\n     * pipe, then avail will be set to a number of bytes that are\n     * available to be read without blocking.\n     *\n     * If the fd refers to a special file/device that has some concept\n     * of buffering, then avail will be set in a corresponding way.\n     *\n     * If the fd refers to a special device that does not have any\n     * concept of buffering, then the ioctl call will return a negative\n     * number, and errno will be set to ENOTTY.\n     *\n     * If the fd refers to a special file masquerading as a regular file,\n     * then avail may be returned as negative, in that the special file\n     * may appear to have zero size and yet a previous read call may have\n     * actually read some amount of data and caused the cursor to be\n     * advanced.\n     */\n    DBG(\"fd=%d\", fd);\n    int avail = 0;\n    int rc = ::ioctl(fd, FIONREAD, &avail);\n    if (rc >= 0) {\n        /*\n         * Success, but make sure not to return a negative number (see\n         * above).\n         */\n        if (avail < 0) {\n            avail = 0;\n        }\n    } else if (errno == ENOTTY) {\n        /* The fd is unwilling to opine about its read buffer. */\n        avail = 0;\n    } else {\n        /* Something strange is happening. */\n        jniThrowIOException(env, errno);\n    }\n\n    return (jint) avail;\n}\n\nstatic jint OSFileSystem_lockImpl(JNIEnv* env, jobject, jint handle,\n        jlong start, jlong length, jint typeFlag, jboolean waitFlag) {\n\n    DBG(\"fd=%d\", handle);\n    length = translateLockLength(length);\n    if (offsetTooLarge(env, start) || offsetTooLarge(env, length)) {\n        return -1;\n    }\n\n    struct flock lock(flockFromStartAndLength(start, length));\n\n    if ((typeFlag & SHARED_LOCK_TYPE) == SHARED_LOCK_TYPE) {\n        lock.l_type = F_RDLCK;\n    } else {\n        lock.l_type = F_WRLCK;\n    }\n\n    int waitMode = (waitFlag) ? F_SETLKW : F_SETLK;\n    return TEMP_FAILURE_RETRY(::fcntl(handle, waitMode, &lock));\n}\n\nstatic jint OSFileSystem_openImpl(JNIEnv* env, jobject, jbyteArray pathByteArray,\n        jint jflags) {\n    TRACE;\n    int flags = 0;\n    int mode = 0;\n\n// BEGIN android-changed\n// don't want default permissions to allow global access.\n    switch(jflags) {\n      case 0:\n              flags = HyOpenRead;\n              mode = 0;\n              break;\n      case 1:\n              flags = HyOpenCreate | HyOpenWrite | HyOpenTruncate;\n              mode = 0600;\n              break;\n      case 16:\n              flags = HyOpenRead | HyOpenWrite | HyOpenCreate;\n              mode = 0600;\n              break;\n      case 32:\n              flags = HyOpenRead | HyOpenWrite | HyOpenCreate | HyOpenSync;\n              mode = 0600;\n              break;\n      case 256:\n              flags = HyOpenWrite | HyOpenCreate | HyOpenAppend;\n              mode = 0600;\n              break;\n    }\n// BEGIN android-changed\n\n    flags = EsTranslateOpenFlags(flags);\n\n    ScopedByteArrayRO path(env, pathByteArray);\n    jint rc = TEMP_FAILURE_RETRY(::open((const char *)&path[0], flags, mode));\n    if (rc == -1) {\n        // Get the human-readable form of errno.\n        char buffer[80];\n        const char* reason = jniStrError(errno, &buffer[0], sizeof(buffer));\n\n        // Construct a message that includes the path and the reason.\n        // (pathByteCount already includes space for our trailing NUL.)\n        size_t len = env->GetArrayLength(pathByteArray) + 2 + ::strlen(reason) + 1;\n        scope_cpp_array_t<char> message(new char[len]);\n        snprintf(&message[0], len, \"%s (%s)\", (const char *)&path[0], reason);\n\n        // We always throw FileNotFoundException, regardless of the specific\n        // failure. (This appears to be true of the RI too.)\n        jniThrowException(env, \"java/io/FileNotFoundException\", &message[0]);\n    }\n    DBG(\"return fd=%d\", rc);\n    return rc;\n}\n\nstatic jlong OSFileSystem_readDirect(JNIEnv* env, jobject, jint fd,\n        jint buf, jint offset, jint nbytes) {\n    DBG(\"fd=%d\", fd);\n    if (nbytes == 0) {\n        return 0;\n    }\n\n    jbyte* dst = reinterpret_cast<jbyte*>(buf + offset);\n    jlong rc = TEMP_FAILURE_RETRY(::read(fd, dst, nbytes));\n    if (rc == 0) {\n        return -1;\n    }\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_readImpl(JNIEnv* env, jobject, jint fd,\n        jbyteArray byteArray, jint offset, jint nbytes) {\n\n    DBG(\"fd=%d\", fd);\n    if (nbytes == 0) {\n        return 0;\n    }\n\n    jbyte* bytes = env->GetByteArrayElements(byteArray, NULL);\n    jlong rc = TEMP_FAILURE_RETRY(::read(fd, bytes + offset, nbytes));\n    env->ReleaseByteArrayElements(byteArray, bytes, 0);\n\n    if (rc == 0) {\n        return -1;\n    }\n    if (rc == -1) {\n        if (errno == EAGAIN) {\n            jniThrowException(env, \"java/io/InterruptedIOException\",\n                    \"Read timed out\");\n        } else {\n            jniThrowIOException(env, errno);\n        }\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_readv(JNIEnv* env, jobject, jint fd,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    DBG(\"fd=%d\", fd);\n    iovec* vectors = initIoVec(env, jBuffers, jOffsets, jLengths, size);\n    if (vectors == NULL) {\n        return -1;\n    }\n    long result = ::readv(fd, vectors, size);\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    delete[] vectors;\n    return result;\n}\n\nstatic jlong OSFileSystem_seek(JNIEnv* env, jobject, jint fd, jlong offset,\n        jint javaWhence) {\n    DBG(\"fd=%d\", fd);\n    /* Convert whence argument */\n    int nativeWhence = 0;\n    switch (javaWhence) {\n    case 1:\n        nativeWhence = SEEK_SET;\n        break;\n    case 2:\n        nativeWhence = SEEK_CUR;\n        break;\n    case 4:\n        nativeWhence = SEEK_END;\n        break;\n    default:\n        return -1;\n    }\n\n    // If the offset is relative, lseek(2) will tell us whether it's too large.\n    // We're just worried about too large an absolute offset, which would cause\n    // us to lie to lseek(2).\n    if (offsetTooLarge(env, offset)) {\n        return -1;\n    }\n\n    jlong result = ::lseek(fd, offset, nativeWhence);\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return result;\n}\n\nstatic jlong OSFileSystem_transfer(JNIEnv* env, jobject, jint fd, jobject sd,\n        jlong offset, jlong count) {\n\n    DBG(\"fd=%d\", fd);\n    int socket = jniGetFDFromFileDescriptor(env, sd);\n    if (socket == -1) {\n        return -1;\n    }\n\n    /* Value of offset is checked in jint scope (checked in java layer)\n       The conversion here is to guarantee no value lost when converting offset to off_t\n     */\n    off_t off = offset;\n\n    ssize_t rc = sendfile(socket, fd, &off, count);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jint OSFileSystem_truncate(JNIEnv* env, jobject, jint fd, jlong length) {\n    DBG(\"fd=%d\", fd);\n    if (offsetTooLarge(env, length)) {\n        return -1;\n    }\n\n    int rc = ::ftruncate(fd, length);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic void OSFileSystem_unlockImpl(JNIEnv* env, jobject, jint handle,\n        jlong start, jlong length) {\n\n    DBG(\"fd=%d\", handle);\n    length = translateLockLength(length);\n    if (offsetTooLarge(env, start) || offsetTooLarge(env, length)) {\n        return;\n    }\n\n    struct flock lock(flockFromStartAndLength(start, length));\n    lock.l_type = F_UNLCK;\n\n    int rc = TEMP_FAILURE_RETRY(::fcntl(handle, F_SETLKW, &lock));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n}\n\nstatic jlong OSFileSystem_writeDirect(JNIEnv* env, jobject, jint fd,\n        jint buf, jint offset, jint nbytes) {\n    DBG(\"fd=%d\", fd);\n    jbyte* src = reinterpret_cast<jbyte*>(buf + offset);\n    jlong rc = TEMP_FAILURE_RETRY(::write(fd, src, nbytes));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_writeImpl(JNIEnv* env, jobject, jint fd,\n        jbyteArray byteArray, jint offset, jint nbytes) {\n\n    DBG(\"fd=%d\", fd);\n    jbyte* bytes = env->GetByteArrayElements(byteArray, NULL);\n    jlong result = TEMP_FAILURE_RETRY(::write(fd, bytes + offset, nbytes));\n    env->ReleaseByteArrayElements(byteArray, bytes, JNI_ABORT);\n\n    if (result == -1) {\n        if (errno == EAGAIN) {\n            jniThrowException(env, \"java/io/InterruptedIOException\",\n                    \"Write timed out\");\n        } else {\n            jniThrowIOException(env, errno);\n        }\n    }\n    return result;\n}\n\nstatic jlong OSFileSystem_writev(JNIEnv* env, jobject, jint fd,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    DBG(\"fd=%d\", fd);\n    iovec* vectors = initIoVec(env, jBuffers, jOffsets, jLengths, size);\n    if (vectors == NULL) {\n        return -1;\n    }\n    long result = ::writev(fd, vectors, size);\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    delete[] vectors;\n    return result;\n}\n\nstatic JNINativeMethod osfs_methods[] = {\n    NATIVE_METHOD(OSFileSystem, close, \"(I)V\"),\n    NATIVE_METHOD(OSFileSystem, fflush, \"(IZ)V\"),\n    NATIVE_METHOD(OSFileSystem, getAllocGranularity, \"()I\"),\n    NATIVE_METHOD(OSFileSystem, ioctlAvailable, \"(I)I\"),\n    NATIVE_METHOD(OSFileSystem, lockImpl, \"(IJJIZ)I\"),\n    NATIVE_METHOD(OSFileSystem, openImpl, \"([BI)I\"),\n    NATIVE_METHOD(OSFileSystem, readDirect, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, readImpl, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, readv, \"(I[I[I[II)J\"),\n    NATIVE_METHOD(OSFileSystem, seek, \"(IJI)J\"),\n    NATIVE_METHOD(OSFileSystem, transfer, \"(ILjava/io/FileDescriptor;JJ)J\"),\n    NATIVE_METHOD(OSFileSystem, truncate, \"(IJ)V\"),\n    NATIVE_METHOD(OSFileSystem, unlockImpl, \"(IJJ)V\"),\n    NATIVE_METHOD(OSFileSystem, writeDirect, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, writeImpl, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, writev, \"(I[I[I[II)J\"),\n};\n\nCRYSTAX_LOCAL\nbool init(JNIEnv *env)\n{\n    DBG(\"trying to register OSFileSystem (froyo implementation) native methods...\");\n    const char *osfsname = \"org/apache/harmony/luni/platform/OSFileSystem\";\n    if (!register_native_methods(env, osfsname,\n            osfs_methods, sizeof(osfs_methods)/sizeof(osfs_methods[0])))\n    {\n        ERR(\"can't register OSFileSystem native methods\");\n        return false;\n    }\n    DBG(\"OSFileSystem (froyo implementation) native methods registered\");\n\n    return true;\n}\n\n} // namespace froyo\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs_gingerbread.cpp",
    "content": "/*\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the NOTICE file distributed with\n *  this work for additional information regarding copyright ownership.\n *  The ASF licenses this file to You under the Apache License, Version 2.0\n *  (the \"License\"); you may not use this file except in compliance with\n *  the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"osfs/osfs.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\nnamespace gingerbread\n{\n\nstatic jint OSFileSystem_lockImpl(JNIEnv* env, jobject, jint fd,\n        jlong start, jlong length, jint typeFlag, jboolean waitFlag) {\n\n    DBG(\"fd=%d, start=%lld, length=%lld\", (int)fd, (long long)start, (long long)length);\n    length = translateLockLength(length);\n    if (offsetTooLarge(env, start) || offsetTooLarge(env, length)) {\n        return -1;\n    }\n\n    struct flock lock(flockFromStartAndLength(start, length));\n\n    if ((typeFlag & SHARED_LOCK_TYPE) == SHARED_LOCK_TYPE) {\n        lock.l_type = F_RDLCK;\n    } else {\n        lock.l_type = F_WRLCK;\n    }\n\n    int waitMode = (waitFlag) ? F_SETLKW : F_SETLK;\n    return TEMP_FAILURE_RETRY(::fcntl(fd, waitMode, &lock));\n}\n\nstatic void OSFileSystem_unlockImpl(JNIEnv* env, jobject, jint fd, jlong start, jlong length) {\n    DBG(\"fd=%d, start=%lld, length=%lld\", (int)fd, (long long)start, (long long)length);\n    length = translateLockLength(length);\n    if (offsetTooLarge(env, start) || offsetTooLarge(env, length)) {\n        return;\n    }\n\n    struct flock lock(flockFromStartAndLength(start, length));\n    lock.l_type = F_UNLCK;\n\n    int rc = TEMP_FAILURE_RETRY(::fcntl(fd, F_SETLKW, &lock));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n}\n\n/**\n * Returns the granularity of the starting address for virtual memory allocation.\n * (It's the same as the page size.)\n */\nstatic jint OSFileSystem_getAllocGranularity(JNIEnv*, jobject) {\n    TRACE;\n    static int allocGranularity = getpagesize();\n    return allocGranularity;\n}\n\n// Translate three Java int[]s to a native iovec[] for readv and writev.\nstatic iovec* initIoVec(JNIEnv* env,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    TRACE;\n    scope_cpp_array_t<iovec> vectors(new iovec[size]);\n    if (vectors.get() == NULL) {\n        jniThrowException(env, \"java/lang/OutOfMemoryError\", \"native heap\");\n        return NULL;\n    }\n    ScopedIntArrayRO buffers(env, jBuffers);\n    if (buffers.get() == NULL) {\n        return NULL;\n    }\n    ScopedIntArrayRO offsets(env, jOffsets);\n    if (offsets.get() == NULL) {\n        return NULL;\n    }\n    ScopedIntArrayRO lengths(env, jLengths);\n    if (lengths.get() == NULL) {\n        return NULL;\n    }\n    for (int i = 0; i < size; ++i) {\n        vectors[i].iov_base = reinterpret_cast<void*>(buffers[i] + offsets[i]);\n        vectors[i].iov_len = lengths[i];\n    }\n    return vectors.release();\n}\n\nstatic jlong OSFileSystem_readv(JNIEnv* env, jobject, jint fd,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    DBG(\"fd=%d\", (int)fd);\n    scope_cpp_array_t<iovec> vectors(initIoVec(env, jBuffers, jOffsets, jLengths, size));\n    if (vectors.get() == NULL) {\n        return -1;\n    }\n    long result = ::readv(fd, vectors.get(), size);\n    if (result == 0) {\n        return -1;\n    }\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return result;\n}\n\nstatic jlong OSFileSystem_writev(JNIEnv* env, jobject, jint fd,\n        jintArray jBuffers, jintArray jOffsets, jintArray jLengths, jint size) {\n    DBG(\"fd=%d\", (int)fd);\n    scope_cpp_array_t<iovec> vectors(initIoVec(env, jBuffers, jOffsets, jLengths, size));\n    if (vectors.get() == NULL) {\n        return -1;\n    }\n    long result = ::writev(fd, vectors.get(), size);\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return result;\n}\n\nstatic jlong OSFileSystem_transfer(JNIEnv* env, jobject, jint fd, jobject sd,\n        jlong offset, jlong count) {\n\n    DBG(\"fd=%d\", (int)fd);\n    int socket = jniGetFDFromFileDescriptor(env, sd);\n    if (socket == -1) {\n        return -1;\n    }\n\n    /* Value of offset is checked in jint scope (checked in java layer)\n       The conversion here is to guarantee no value lost when converting offset to off_t\n     */\n    off_t off = offset;\n\n    ssize_t rc = ::sendfile(socket, fd, &off, count);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_readDirect(JNIEnv* env, jobject, jint fd,\n        jint buf, jint offset, jint byteCount) {\n    DBG(\"fd=%d\", (int)fd);\n    if (byteCount == 0) {\n        return 0;\n    }\n    jbyte* dst = reinterpret_cast<jbyte*>(buf + offset);\n    jlong rc = TEMP_FAILURE_RETRY(::read(fd, dst, byteCount));\n    if (rc == 0) {\n        return -1;\n    }\n    if (rc == -1) {\n        // We return 0 rather than throw if we try to read from an empty non-blocking pipe.\n        if (errno == EAGAIN) {\n            return 0;\n        }\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_read(JNIEnv* env, jobject, jint fd,\n        jbyteArray byteArray, jint offset, jint byteCount) {\n    DBG(\"fd=%d\", (int)fd);\n    ScopedByteArrayRW bytes(env, byteArray);\n    if (bytes.get() == NULL) {\n        return 0;\n    }\n    jint buf = static_cast<jint>(reinterpret_cast<uintptr_t>(bytes.get()));\n    return OSFileSystem_readDirect(env, NULL, fd, buf, offset, byteCount);\n}\n\nstatic jlong OSFileSystem_writeDirect(JNIEnv* env, jobject, jint fd,\n        jint buf, jint offset, jint byteCount) {\n    DBG(\"fd=%d\", (int)fd);\n    if (byteCount == 0) {\n        return 0;\n    }\n    jbyte* src = reinterpret_cast<jbyte*>(buf + offset);\n    jlong rc = TEMP_FAILURE_RETRY(::write(fd, src, byteCount));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jlong OSFileSystem_write(JNIEnv* env, jobject, jint fd,\n        jbyteArray byteArray, jint offset, jint byteCount) {\n    DBG(\"fd=%d\", (int)fd);\n    ScopedByteArrayRO bytes(env, byteArray);\n    if (bytes.get() == NULL) {\n        return 0;\n    }\n    jint buf = static_cast<jint>(reinterpret_cast<uintptr_t>(bytes.get()));\n    return OSFileSystem_writeDirect(env, NULL, fd, buf, offset, byteCount);\n}\n\nstatic jlong OSFileSystem_seek(JNIEnv* env, jobject, jint fd, jlong offset, jint javaWhence) {\n    DBG(\"fd=%d\", (int)fd);\n    /* Convert whence argument */\n    int nativeWhence = 0;\n    switch (javaWhence) {\n    case 1:\n        nativeWhence = SEEK_SET;\n        break;\n    case 2:\n        nativeWhence = SEEK_CUR;\n        break;\n    case 4:\n        nativeWhence = SEEK_END;\n        break;\n    default:\n        return -1;\n    }\n\n    // If the offset is relative, lseek(2) will tell us whether it's too large.\n    // We're just worried about too large an absolute offset, which would cause\n    // us to lie to lseek(2).\n    if (offsetTooLarge(env, offset)) {\n        return -1;\n    }\n\n    jlong result = ::lseek(fd, offset, nativeWhence);\n    if (result == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return result;\n}\n\nstatic void OSFileSystem_fsync(JNIEnv* env, jobject, jint fd, jboolean metadataToo) {\n    DBG(\"fd=%d\", (int)fd);\n    int rc = metadataToo ? ::fsync(fd) : ::fdatasync(fd);\n    // int rc = metadataToo ? fsync(fd) : fdatasync(fd);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n}\n\nstatic jint OSFileSystem_truncate(JNIEnv* env, jobject, jint fd, jlong length) {\n    DBG(\"fd=%d\", (int)fd);\n    if (offsetTooLarge(env, length)) {\n        return -1;\n    }\n\n    int rc = ::ftruncate(fd, length);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return rc;\n}\n\nstatic jint OSFileSystem_open(JNIEnv* env, jobject, jstring javaPath, jint jflags) {\n    TRACE;\n    int flags = 0;\n    int mode = 0;\n\n    // On Android, we don't want default permissions to allow global access.\n    switch (jflags) {\n    case 0:\n        flags = HyOpenRead;\n        mode = 0;\n        break;\n    case 1:\n        flags = HyOpenCreate | HyOpenWrite | HyOpenTruncate;\n        mode = 0600;\n        break;\n    case 16:\n        flags = HyOpenRead | HyOpenWrite | HyOpenCreate;\n        mode = 0600;\n        break;\n    case 32:\n        flags = HyOpenRead | HyOpenWrite | HyOpenCreate | HyOpenSync;\n        mode = 0600;\n        break;\n    case 256:\n        flags = HyOpenWrite | HyOpenCreate | HyOpenAppend;\n        mode = 0600;\n        break;\n    }\n\n    flags = EsTranslateOpenFlags(flags);\n\n    path_t path(jni::jcast<const char *>(javaPath));\n    if (path.c_str() == NULL) {\n        return -1;\n    }\n    DBG(\"path=%s\", path.c_str());\n    jint rc = TEMP_FAILURE_RETRY(::open(path.c_str(), flags, mode));\n    if (rc == -1) {\n        // Get the human-readable form of errno.\n        char buffer[80];\n        const char* reason = jniStrError(errno, &buffer[0], sizeof(buffer));\n\n        // Construct a message that includes the path and the reason.\n        size_t len = path.length() + 2 + ::strlen(reason) + 1 + 1;\n        scope_cpp_array_t<char> message(new char[len]);\n        snprintf(&message[0], len, \"%s (%s)\", path.c_str(), reason);\n\n        // We always throw FileNotFoundException, regardless of the specific\n        // failure. (This appears to be true of the RI too.)\n        jniThrowException(env, \"java/io/FileNotFoundException\", &message[0]);\n    }\n    DBG(\"path=%s: return fd=%d\", path.c_str(), rc);\n    return rc;\n}\n\nstatic jint OSFileSystem_ioctlAvailable(JNIEnv*env, jobject, jobject fileDescriptor) {\n    TRACE;\n    /*\n     * On underlying platforms Android cares about (read \"Linux\"),\n     * ioctl(fd, FIONREAD, &avail) is supposed to do the following:\n     *\n     * If the fd refers to a regular file, avail is set to\n     * the difference between the file size and the current cursor.\n     * This may be negative if the cursor is past the end of the file.\n     *\n     * If the fd refers to an open socket or the read end of a\n     * pipe, then avail will be set to a number of bytes that are\n     * available to be read without blocking.\n     *\n     * If the fd refers to a special file/device that has some concept\n     * of buffering, then avail will be set in a corresponding way.\n     *\n     * If the fd refers to a special device that does not have any\n     * concept of buffering, then the ioctl call will return a negative\n     * number, and errno will be set to ENOTTY.\n     *\n     * If the fd refers to a special file masquerading as a regular file,\n     * then avail may be returned as negative, in that the special file\n     * may appear to have zero size and yet a previous read call may have\n     * actually read some amount of data and caused the cursor to be\n     * advanced.\n     */\n    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);\n    DBG(\"fd=%d\", fd);\n    if (fd == -1) {\n        return -1;\n    }\n    int avail = 0;\n    int rc = ::ioctl(fd, FIONREAD, &avail);\n    if (rc >= 0) {\n        /*\n         * Success, but make sure not to return a negative number (see\n         * above).\n         */\n        if (avail < 0) {\n            avail = 0;\n        }\n    } else if (errno == ENOTTY) {\n        /* The fd is unwilling to opine about its read buffer. */\n        avail = 0;\n    } else {\n        /* Something strange is happening. */\n        jniThrowIOException(env, errno);\n    }\n\n    return avail;\n}\n\nstatic jlong OSFileSystem_length(JNIEnv* env, jobject, jint fd) {\n    DBG(\"fd=%d\", (int)fd);\n    struct stat sb;\n    jint rc = TEMP_FAILURE_RETRY(::fstat(fd, &sb));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    return sb.st_size;\n}\n\nstatic void IoUtils_close(JNIEnv* env, jclass, jobject fileDescriptor) {\n    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);\n    DBG(\"fd=%d\", fd);\n    jint rc = TEMP_FAILURE_RETRY(::close(fd));\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n    }\n    jniSetFileDescriptorOfFD(env, fileDescriptor, -1);\n}\n\nstatic jint IoUtils_getFd(JNIEnv* env, jclass, jobject fileDescriptor) {\n    return jniGetFDFromFileDescriptor(env, fileDescriptor);\n}\n\nstatic void IoUtils_pipe(JNIEnv* env, jclass, jintArray javaFds) {\n    ScopedIntArrayRW fds(env, javaFds);\n    if (fds.get() == NULL) {\n        return;\n    }\n    int rc = ::pipe(&fds[0]);\n    if (rc == -1) {\n        jniThrowIOException(env, errno);\n        return;\n    }\n}\n\nstatic void IoUtils_setFd(JNIEnv* env, jclass, jobject fileDescriptor, jint newValue) {\n    DBG(\"newValue=%d\", newValue);\n    return jniSetFileDescriptorOfFD(env, fileDescriptor, newValue);\n}\n\nstatic bool setBlocking(int fd, bool blocking) {\n    DBG(\"fd=%d\", fd);\n    int flags = ::fcntl(fd, F_GETFL);\n    if (flags == -1) {\n        return false;\n    }\n\n    if (!blocking) {\n        flags |= O_NONBLOCK;\n    } else {\n        flags &= ~O_NONBLOCK;\n    }\n\n    int rc = ::fcntl(fd, F_SETFL, flags);\n    return (rc != -1);\n}\n\nstatic void IoUtils_setBlocking(JNIEnv* env, jclass, jobject fileDescriptor, jboolean blocking) {\n    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);\n    DBG(\"fd=%d\", fd);\n    if (fd == -1) {\n        return;\n    }\n    if (!setBlocking(fd, blocking)) {\n        jniThrowIOException(env, errno);\n    }\n}\n\nstatic JNINativeMethod osfs_methods[] = {\n    NATIVE_METHOD(OSFileSystem, fsync, \"(IZ)V\"),\n    NATIVE_METHOD(OSFileSystem, getAllocGranularity, \"()I\"),\n    NATIVE_METHOD(OSFileSystem, ioctlAvailable, \"(Ljava/io/FileDescriptor;)I\"),\n    NATIVE_METHOD(OSFileSystem, length, \"(I)J\"),\n    NATIVE_METHOD(OSFileSystem, lockImpl, \"(IJJIZ)I\"),\n    NATIVE_METHOD(OSFileSystem, open, \"(Ljava/lang/String;I)I\"),\n    NATIVE_METHOD(OSFileSystem, read, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, readDirect, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, readv, \"(I[I[I[II)J\"),\n    NATIVE_METHOD(OSFileSystem, seek, \"(IJI)J\"),\n    NATIVE_METHOD(OSFileSystem, transfer, \"(ILjava/io/FileDescriptor;JJ)J\"),\n    NATIVE_METHOD(OSFileSystem, truncate, \"(IJ)V\"),\n    NATIVE_METHOD(OSFileSystem, unlockImpl, \"(IJJ)V\"),\n    NATIVE_METHOD(OSFileSystem, write, \"(I[BII)J\"),\n    NATIVE_METHOD(OSFileSystem, writeDirect, \"(IIII)J\"),\n    NATIVE_METHOD(OSFileSystem, writev, \"(I[I[I[II)J\"),\n};\n\nstatic JNINativeMethod ioutils_methods[] = {\n    NATIVE_METHOD(IoUtils, close, \"(Ljava/io/FileDescriptor;)V\"),\n    NATIVE_METHOD(IoUtils, getFd, \"(Ljava/io/FileDescriptor;)I\"),\n    NATIVE_METHOD(IoUtils, pipe, \"([I)V\"),\n    NATIVE_METHOD(IoUtils, setFd, \"(Ljava/io/FileDescriptor;I)V\"),\n    NATIVE_METHOD(IoUtils, setBlocking, \"(Ljava/io/FileDescriptor;Z)V\"),\n};\n\nCRYSTAX_LOCAL\nbool init(JNIEnv *env)\n{\n    DBG(\"trying to register IoUtils (gingerbread implementation) native methods...\");\n    const char *ioutilsname = \"libcore/io/IoUtils\";\n    if (!register_native_methods(env, ioutilsname,\n            ioutils_methods, sizeof(ioutils_methods)/sizeof(ioutils_methods[0])))\n    {\n        ERR(\"can't register IoUtils native methods\");\n        return false;\n    }\n    DBG(\"IoUtils (gingerbread implementation) native methods registered\");\n\n    DBG(\"trying to register OSFileSystem (gingerbread implementation) native methods...\");\n    const char *osfsname = \"org/apache/harmony/luni/platform/OSFileSystem\";\n    if (!register_native_methods(env, osfsname,\n            osfs_methods, sizeof(osfs_methods)/sizeof(osfs_methods[0])))\n    {\n        ERR(\"can't register OSFileSystem native methods\");\n        return false;\n    }\n    DBG(\"OSFileSystem (gingerbread implementation) native methods registered\");\n\n    return true;\n}\n\n} // namespace gingerbread\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/osfs/osfs_ics.cpp",
    "content": "/*\n * Copyright (C) 2011 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"osfs/osfs.hpp\"\n#include \"osfs/asyncsocketclosemonitor.h\"\n\n#include <arpa/inet.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <net/if.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <netinet/in.h>\n#include <poll.h>\n#include <pwd.h>\n#include <signal.h>\n#include <stdlib.h>\n#include <sys/ioctl.h>\n#include <sys/mman.h>\n#include <sys/sendfile.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/types.h>\n#include <sys/uio.h>\n#include <sys/utsname.h>\n#include <sys/vfs.h> // Bionic doesn't have <sys/statvfs.h>\n#include <sys/wait.h>\n#include <unistd.h>\n\n#define NET_FAILURE_RETRY(syscall_name, exp) ({ \\\n    typeof (exp) _rc = -1; \\\n    do { \\\n        { \\\n            fd = jniGetFDFromFileDescriptor(env, javaFd); \\\n            DBG(\"fd=%d\", (int)fd); \\\n            AsynchronousSocketCloseMonitor monitor(fd); \\\n            _rc = (exp); \\\n        } \\\n        if (_rc == -1) { \\\n            if (jniGetFDFromFileDescriptor(env, javaFd) == -1) { \\\n                jniThrowException(env, \"java/net/SocketException\", \"Socket closed\"); \\\n                break; \\\n            } else if (errno != EINTR) { \\\n                throwErrnoException(env, syscall_name); \\\n                break; \\\n            } \\\n        } \\\n    } while (_rc == -1); \\\n    _rc; })\n\n#define TO_JAVA_STRING(NAME, EXP) \\\n        jstring NAME = env->NewStringUTF(EXP); \\\n        if (NAME == NULL) return NULL;\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace osfs\n{\nnamespace ics\n{\n\nstatic jni::jhclass byteArrayClass;\nstatic jni::jhclass errnoExceptionClass;\nstatic jni::jhclass gaiExceptionClass;\nstatic jni::jhclass inet6AddressClass;\nstatic jni::jhclass inetAddressClass;\nstatic jni::jhclass inetSocketAddressClass;\nstatic jni::jhclass mutableIntClass;\nstatic jni::jhclass mutableLongClass;\nstatic jni::jhclass stringClass;\nstatic jni::jhclass structAddrinfoClass;\nstatic jni::jhclass structFlockClass;\nstatic jni::jhclass structGroupReqClass;\nstatic jni::jhclass structLingerClass;\nstatic jni::jhclass structPasswdClass;\nstatic jni::jhclass structPollfdClass;\nstatic jni::jhclass structStatClass;\nstatic jni::jhclass structStatFsClass;\nstatic jni::jhclass structTimevalClass;\nstatic jni::jhclass structUtsnameClass;\n\nstatic void throwException(JNIEnv* env, jclass exceptionClass, jmethodID ctor3, jmethodID ctor2,\n        const char* functionName, int error) {\n    TRACE;\n    jthrowable cause = NULL;\n    if (env->ExceptionCheck()) {\n        cause = env->ExceptionOccurred();\n        env->ExceptionClear();\n    }\n\n    jni::jhstring detailMessage(env->NewStringUTF(functionName));\n    if (detailMessage.get() == NULL) {\n        // Not really much we can do here. We're probably dead in the water,\n        // but let's try to stumble on...\n        env->ExceptionClear();\n    }\n\n    jobject exception;\n    if (cause != NULL) {\n        exception = env->NewObject(exceptionClass, ctor3, detailMessage.get(), error, cause);\n    } else {\n        exception = env->NewObject(exceptionClass, ctor2, detailMessage.get(), error);\n    }\n    env->Throw(reinterpret_cast<jthrowable>(exception));\n}\n\nstatic void throwErrnoException(JNIEnv* env, const char* functionName) {\n    TRACE;\n    int error = errno;\n    static jmethodID ctor3 = env->GetMethodID(errnoExceptionClass.get(),\n            \"<init>\", \"(Ljava/lang/String;ILjava/lang/Throwable;)V\");\n    static jmethodID ctor2 = env->GetMethodID(errnoExceptionClass.get(),\n            \"<init>\", \"(Ljava/lang/String;I)V\");\n    throwException(env, errnoExceptionClass.get(), ctor3, ctor2, functionName, error);\n}\n\nstatic void throwGaiException(JNIEnv* env, const char* functionName, int error) {\n    TRACE;\n    if (error == EAI_SYSTEM) {\n        // EAI_SYSTEM means \"look at errno instead\", so we want our GaiException to have the\n        // relevant ErrnoException as its cause.\n        throwErrnoException(env, functionName);\n        // Deliberately fall through to throw another exception...\n    }\n    static jmethodID ctor3 = env->GetMethodID(gaiExceptionClass.get(),\n            \"<init>\", \"(Ljava/lang/String;ILjava/lang/Throwable;)V\");\n    static jmethodID ctor2 = env->GetMethodID(gaiExceptionClass.get(),\n            \"<init>\", \"(Ljava/lang/String;I)V\");\n    throwException(env, gaiExceptionClass.get(), ctor3, ctor2, functionName, error);\n}\n\ntemplate <typename Counter, typename Getter>\njobjectArray toStringArray(JNIEnv* env, Counter* counter, Getter* getter) {\n    size_t count = (*counter)();\n    jobjectArray result = env->NewObjectArray(count, stringClass.get(), NULL);\n    if (result == NULL) {\n        return NULL;\n    }\n    for (size_t i = 0; i < count; ++i) {\n        jni::jhstring s(env->NewStringUTF((*getter)(i)));\n        if (env->ExceptionCheck()) {\n            return NULL;\n        }\n        env->SetObjectArrayElement(result, i, s.get());\n        if (env->ExceptionCheck()) {\n            return NULL;\n        }\n    }\n    return result;\n}\n\nstruct ArrayCounter {\n    const char* const* strings;\n    ArrayCounter(const char* const* strings) : strings(strings) {}\n    size_t operator()() {\n        size_t count = 0;\n        while (strings[count] != NULL) {\n            ++count;\n        }\n        return count;\n    }\n};\n\nstruct ArrayGetter {\n    const char* const* strings;\n    ArrayGetter(const char* const* strings) : strings(strings) {}\n    const char* operator()(size_t i) {\n        return strings[i];\n    }\n};\n\njobjectArray toStringArray(JNIEnv* env, const char* const* strings) {\n    ArrayCounter counter(strings);\n    ArrayGetter getter(strings);\n    return toStringArray(env, &counter, &getter);\n}\n\ntemplate <typename rc_t>\nstatic rc_t throwIfMinusOne(JNIEnv* env, const char* name, rc_t rc) {\n    DBG(\"rc=%d\", (int)rc);\n    if (rc == rc_t(-1)) {\n        throwErrnoException(env, name);\n    }\n    return rc;\n}\n\nclass ScopedUtfChars {\npublic:\n    ScopedUtfChars(JNIEnv* env, jstring s)\n    : mEnv(env), mString(s)\n    {\n        if (s == NULL) {\n            mUtfChars = NULL;\n            jniThrowNullPointerException(env, NULL);\n        } else {\n            mUtfChars = env->GetStringUTFChars(s, NULL);\n        }\n    }\n\n    ~ScopedUtfChars() {\n        if (mUtfChars) {\n            mEnv->ReleaseStringUTFChars(mString, mUtfChars);\n        }\n    }\n\n    const char* c_str() const {\n        return mUtfChars;\n    }\n\n    size_t size() const {\n        return strlen(mUtfChars);\n    }\n\n    // Element access.\n    const char& operator[](size_t n) const {\n        return mUtfChars[n];\n    }\n\nprivate:\n    JNIEnv* mEnv;\n    jstring mString;\n    const char* mUtfChars;\n\n    // Disallow copy and assignment.\n    ScopedUtfChars(const ScopedUtfChars&);\n    void operator=(const ScopedUtfChars&);\n};\n\ntemplate<bool readOnly>\nclass ScopedBytes {\npublic:\n    ScopedBytes(JNIEnv* env, jobject object)\n    : mEnv(env), mObject(object), mByteArray(NULL), mPtr(NULL)\n    {\n        if (mObject == NULL) {\n            jniThrowNullPointerException(mEnv, NULL);\n        } else if (mEnv->IsInstanceOf(mObject, byteArrayClass.get())) {\n            mByteArray = reinterpret_cast<jbyteArray>(mObject);\n            mPtr = mEnv->GetByteArrayElements(mByteArray, NULL);\n        } else {\n            mPtr = reinterpret_cast<jbyte*>(mEnv->GetDirectBufferAddress(mObject));\n        }\n    }\n\n    ~ScopedBytes() {\n        if (mByteArray != NULL) {\n            mEnv->ReleaseByteArrayElements(mByteArray, mPtr, readOnly ? JNI_ABORT : 0);\n        }\n    }\n\nprivate:\n    JNIEnv* mEnv;\n    jobject mObject;\n    jbyteArray mByteArray;\n\nprotected:\n    jbyte* mPtr;\n\nprivate:\n    // Disallow copy and assignment.\n    ScopedBytes(const ScopedBytes&);\n    void operator=(const ScopedBytes&);\n};\n\nclass ScopedBytesRO : public ScopedBytes<true> {\npublic:\n    ScopedBytesRO(JNIEnv* env, jobject object) : ScopedBytes<true>(env, object) {}\n    const jbyte* get() const {\n        return mPtr;\n    }\n};\n\nclass ScopedBytesRW : public ScopedBytes<false> {\npublic:\n    ScopedBytesRW(JNIEnv* env, jobject object) : ScopedBytes<false>(env, object) {}\n    jbyte* get() {\n        return mPtr;\n    }\n};\n\ntemplate <typename T>\nstruct DefaultDelete {\n    enum { type_must_be_complete = sizeof(T) };\n    DefaultDelete() {}\n    void operator()(T* p) const {\n        delete p;\n    }\n};\n\n// Default deleter for array types.\ntemplate <typename T>\nstruct DefaultDelete<T[]> {\n    enum { type_must_be_complete = sizeof(T) };\n    void operator()(T* p) const {\n        delete[] p;\n    }\n};\n\n// A smart pointer that deletes the given pointer on destruction.\n// Equivalent to C++0x's std::unique_ptr (a combination of boost::scoped_ptr\n// and boost::scoped_array).\n// Named to be in keeping with Android style but also to avoid\n// collision with any other implementation, until we can switch over\n// to unique_ptr.\n// Use thus:\n//   UniquePtr<C> c(new C);\ntemplate <typename T, typename D = DefaultDelete<T> >\nclass UniquePtr {\npublic:\n    // Construct a new UniquePtr, taking ownership of the given raw pointer.\n    explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) {\n    }\n\n    ~UniquePtr() {\n        reset();\n    }\n\n    // Accessors.\n    T& operator*() const { return *mPtr; }\n    T* operator->() const { return mPtr; }\n    T* get() const { return mPtr; }\n\n    // Returns the raw pointer and hands over ownership to the caller.\n    // The pointer will not be deleted by UniquePtr.\n    T* release() __attribute__((warn_unused_result)) {\n        T* result = mPtr;\n        mPtr = NULL;\n        return result;\n    }\n\n    // Takes ownership of the given raw pointer.\n    // If this smart pointer previously owned a different raw pointer, that\n    // raw pointer will be freed.\n    void reset(T* ptr = NULL) {\n        if (ptr != mPtr) {\n            D()(mPtr);\n            mPtr = ptr;\n        }\n    }\n\nprivate:\n    // The raw pointer.\n    T* mPtr;\n\n    // Comparing unique pointers is probably a mistake, since they're unique.\n    template <typename T2> bool operator==(const UniquePtr<T2>& p) const;\n    template <typename T2> bool operator!=(const UniquePtr<T2>& p) const;\n\n    // Disallow copy and assignment.\n    UniquePtr(const UniquePtr&);\n    void operator=(const UniquePtr&);\n};\n\n// Partial specialization for array types. Like std::unique_ptr, this removes\n// operator* and operator-> but adds operator[].\ntemplate <typename T, typename D>\nclass UniquePtr<T[], D> {\npublic:\n    explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) {\n    }\n\n    ~UniquePtr() {\n        reset();\n    }\n\n    T& operator[](size_t i) const {\n        return mPtr[i];\n    }\n    T* get() const { return mPtr; }\n\n    T* release() __attribute__((warn_unused_result)) {\n        T* result = mPtr;\n        mPtr = NULL;\n        return result;\n    }\n\n    void reset(T* ptr = NULL) {\n        if (ptr != mPtr) {\n            D()(mPtr);\n            mPtr = ptr;\n        }\n    }\n\nprivate:\n    T* mPtr;\n\n    // Disallow copy and assignment.\n    UniquePtr(const UniquePtr&);\n    void operator=(const UniquePtr&);\n};\n\nstruct addrinfo_deleter {\n    void operator()(addrinfo* p) const {\n        if (p != NULL) { // bionic's freeaddrinfo(3) crashes when passed NULL.\n            freeaddrinfo(p);\n        }\n    }\n};\n\ntemplate <typename ScopedT>\nclass IoVec : public non_copyable_t {\npublic:\n    IoVec(JNIEnv* env, size_t bufferCount) : mEnv(env), mBufferCount(bufferCount) {\n        TRACE;\n        mIoVec = new iovec[mBufferCount];\n        mScopedBuffers = new ScopedT*[mBufferCount];\n    }\n\n    bool init(jobjectArray javaBuffers, jintArray javaOffsets, jintArray javaByteCounts) {\n        TRACE;\n        // We can't delete our local references until after the I/O, so make sure we have room.\n        if (mEnv->PushLocalFrame(mBufferCount + 16) < 0) {\n            return false;\n        }\n        ScopedIntArrayRO offsets(mEnv, javaOffsets);\n        if (offsets.get() == NULL) {\n            return false;\n        }\n        ScopedIntArrayRO byteCounts(mEnv, javaByteCounts);\n        if (byteCounts.get() == NULL) {\n            return false;\n        }\n        // TODO: Linux actually has a 1024 buffer limit. glibc works around this, and we should too.\n        // TODO: you can query the limit at runtime with sysconf(_SC_IOV_MAX).\n        for (size_t i = 0; i < mBufferCount; ++i) {\n            jobject buffer = mEnv->GetObjectArrayElement(javaBuffers, i); // We keep this local ref.\n            mScopedBuffers[i] = new ScopedT(mEnv, buffer);\n            jbyte* ptr = const_cast<jbyte*>(mScopedBuffers[i]->get());\n            if (ptr == NULL) {\n                return false;\n            }\n            struct iovec iov;\n            iov.iov_base = reinterpret_cast<void*>(ptr + offsets[i]);\n            iov.iov_len = byteCounts[i];\n            mIoVec[i] = iov;\n        }\n        return true;\n    }\n\n    ~IoVec() {\n        TRACE;\n        for (size_t i = 0; i < mBufferCount; ++i) {\n            delete mScopedBuffers[i];\n        }\n        delete [] mScopedBuffers;\n        delete [] mIoVec;\n        mEnv->PopLocalFrame(NULL);\n    }\n\n    iovec* get() {\n        return &mIoVec[0];\n    }\n\n    size_t size() {\n        return mBufferCount;\n    }\n\nprivate:\n    JNIEnv* mEnv;\n    size_t mBufferCount;\n    iovec *mIoVec;\n    ScopedT** mScopedBuffers;\n};\n\nstatic jobject sockaddrToInetAddress(JNIEnv* env, const sockaddr_storage* ss, jint* port) {\n    TRACE;\n    // Convert IPv4-mapped IPv6 addresses to IPv4 addresses.\n    // The RI states \"Java will never return an IPv4-mapped address\".\n    sockaddr_storage tmp;\n    memset(&tmp, 0, sizeof(tmp));\n    const sockaddr_in6* sin6 = reinterpret_cast<const sockaddr_in6*>(ss);\n    if (ss->ss_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {\n        // Copy the IPv6 address into the temporary sockaddr_storage.\n        memcpy(&tmp, ss, sizeof(tmp));\n        // Unmap it into an IPv4 address.\n        sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(&tmp);\n        sin->sin_family = AF_INET;\n        sin->sin_port = sin6->sin6_port;\n        memcpy(&sin->sin_addr.s_addr, &sin6->sin6_addr.s6_addr[12], 4);\n        // Fall through into the regular conversion using the unmapped address.\n        ss = &tmp;\n    }\n\n    const void* rawAddress;\n    size_t addressLength;\n    int sin_port;\n    int scope_id = 0;\n    if (ss->ss_family == AF_INET) {\n        const sockaddr_in* sin = reinterpret_cast<const sockaddr_in*>(ss);\n        rawAddress = &sin->sin_addr.s_addr;\n        addressLength = 4;\n        sin_port = ntohs(sin->sin_port);\n    } else if (ss->ss_family == AF_INET6) {\n        const sockaddr_in6* sin6 = reinterpret_cast<const sockaddr_in6*>(ss);\n        rawAddress = &sin6->sin6_addr.s6_addr;\n        addressLength = 16;\n        sin_port = ntohs(sin6->sin6_port);\n        scope_id = sin6->sin6_scope_id;\n    } else {\n        // We can't throw SocketException. We aren't meant to see bad addresses, so seeing one\n        // really does imply an internal error.\n        jniThrowExceptionFmt(env, \"java/lang/IllegalArgumentException\",\n                \"sockaddrToInetAddress bad ss_family: %i\", ss->ss_family);\n        return NULL;\n    }\n    if (port != NULL) {\n        *port = sin_port;\n    }\n\n    jni::jhbyteArray byteArray(env->NewByteArray(addressLength));\n    if (byteArray.get() == NULL) {\n        return NULL;\n    }\n    env->SetByteArrayRegion(byteArray.get(), 0, addressLength,\n            reinterpret_cast<const jbyte*>(rawAddress));\n\n    static jmethodID getByAddressMethod = env->GetStaticMethodID(inetAddressClass.get(),\n            \"getByAddress\", \"(Ljava/lang/String;[BI)Ljava/net/InetAddress;\");\n    if (getByAddressMethod == NULL) {\n        return NULL;\n    }\n    return env->CallStaticObjectMethod(inetAddressClass.get(), getByAddressMethod,\n            NULL, byteArray.get(), scope_id);\n}\n\nstatic bool inetAddressToSockaddr(JNIEnv* env, jobject inetAddress, int port, sockaddr_storage* ss, bool map) {\n    TRACE;\n    memset(ss, 0, sizeof(*ss));\n\n    if (inetAddress == NULL) {\n        jniThrowNullPointerException(env, NULL);\n        return false;\n    }\n\n    // Get the address family.\n    static jfieldID familyFid = env->GetFieldID(inetAddressClass.get(), \"family\", \"I\");\n    ss->ss_family = env->GetIntField(inetAddress, familyFid);\n    if (ss->ss_family == AF_UNSPEC) {\n        return true; // Job done!\n    }\n\n    // Check this is an address family we support.\n    if (ss->ss_family != AF_INET && ss->ss_family != AF_INET6) {\n        jniThrowExceptionFmt(env, \"java/lang/IllegalArgumentException\",\n                \"inetAddressToSockaddr bad family: %i\", ss->ss_family);\n        return false;\n    }\n\n    // Get the byte array that stores the IP address bytes in the InetAddress.\n    static jfieldID bytesFid = env->GetFieldID(inetAddressClass.get(), \"ipaddress\", \"[B\");\n    jni::jhbyteArray addressBytes(reinterpret_cast<jbyteArray>(env->GetObjectField(inetAddress, bytesFid)));\n    if (addressBytes.get() == NULL) {\n        jniThrowNullPointerException(env, NULL);\n        return false;\n    }\n\n    // We use AF_INET6 sockets, so we want an IPv6 address (which may be a IPv4-mapped address).\n    sockaddr_in6* sin6 = reinterpret_cast<sockaddr_in6*>(ss);\n    sin6->sin6_port = htons(port);\n    if (ss->ss_family == AF_INET6) {\n        // IPv6 address. Copy the bytes...\n        jbyte* dst = reinterpret_cast<jbyte*>(&sin6->sin6_addr.s6_addr);\n        env->GetByteArrayRegion(addressBytes.get(), 0, 16, dst);\n        // ...and set the scope id...\n        static jfieldID scopeFid = env->GetFieldID(inet6AddressClass.get(), \"scope_id\", \"I\");\n        sin6->sin6_scope_id = env->GetIntField(inetAddress, scopeFid);\n        return true;\n    }\n\n    // Deal with Inet4Address instances.\n    if (map) {\n        // We should represent this Inet4Address as an IPv4-mapped IPv6 sockaddr_in6.\n        // Change the family...\n        sin6->sin6_family = AF_INET6;\n        // Copy the bytes...\n        jbyte* dst = reinterpret_cast<jbyte*>(&sin6->sin6_addr.s6_addr[12]);\n        env->GetByteArrayRegion(addressBytes.get(), 0, 4, dst);\n        // INADDR_ANY and in6addr_any are both all-zeros...\n        if (!IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {\n            // ...but all other IPv4-mapped addresses are ::ffff:a.b.c.d, so insert the ffff...\n            memset(&(sin6->sin6_addr.s6_addr[10]), 0xff, 2);\n        }\n    } else {\n        // We should represent this Inet4Address as an IPv4 sockaddr_in.\n        sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(ss);\n        sin->sin_port = htons(port);\n        jbyte* dst = reinterpret_cast<jbyte*>(&sin->sin_addr.s_addr);\n        env->GetByteArrayRegion(addressBytes.get(), 0, 4, dst);\n    }\n    return true;\n}\n\nstatic bool inetAddressToSockaddrVerbatim(JNIEnv* env, jobject inetAddress, int port, sockaddr_storage* ss) {\n    return inetAddressToSockaddr(env, inetAddress, port, ss, false);\n}\n\nstatic bool inetAddressToSockaddr(JNIEnv* env, jobject inetAddress, int port, sockaddr_storage* ss) {\n    return inetAddressToSockaddr(env, inetAddress, port, ss, true);\n}\n\nstatic bool fillIfreq(JNIEnv* env, jstring javaInterfaceName, struct ifreq& req) {\n    TRACE;\n    ScopedUtfChars interfaceName(env, javaInterfaceName);\n    if (interfaceName.c_str() == NULL) {\n        return false;\n    }\n    memset(&req, 0, sizeof(req));\n    strncpy(req.ifr_name, interfaceName.c_str(), sizeof(req.ifr_name));\n    req.ifr_name[sizeof(req.ifr_name) - 1] = '\\0';\n    return true;\n}\n\nstatic bool fillInetSocketAddress(JNIEnv* env, jint rc, jobject javaInetSocketAddress, const sockaddr_storage* ss) {\n    TRACE;\n    if (rc == -1 || javaInetSocketAddress == NULL) {\n        return true;\n    }\n    // Fill out the passed-in InetSocketAddress with the sender's IP address and port number.\n    jint port;\n    jobject sender = sockaddrToInetAddress(env, ss, &port);\n    if (sender == NULL) {\n        return false;\n    }\n    static jfieldID addressFid = env->GetFieldID(inetSocketAddressClass.get(), \"addr\", \"Ljava/net/InetAddress;\");\n    static jfieldID portFid = env->GetFieldID(inetSocketAddressClass.get(), \"port\", \"I\");\n    env->SetObjectField(javaInetSocketAddress, addressFid, sender);\n    env->SetIntField(javaInetSocketAddress, portFid, port);\n    return true;\n}\n\nstatic jobject makeSocketAddress(JNIEnv* env, const sockaddr_storage* ss) {\n    TRACE;\n    // TODO: support AF_UNIX and AF_UNSPEC (and other families?)\n    jint port;\n    jobject inetAddress = sockaddrToInetAddress(env, ss, &port);\n    if (inetAddress == NULL) {\n        return NULL;\n    }\n    static jmethodID ctor = env->GetMethodID(inetSocketAddressClass.get(), \"<init>\",\n            \"(Ljava/net/InetAddress;I)V\");\n    return env->NewObject(inetSocketAddressClass.get(), ctor, inetAddress, port);\n}\n\nstatic jobject makeStructPasswd(JNIEnv* env, const struct passwd& pw) {\n    TRACE;\n    TO_JAVA_STRING(pw_name, pw.pw_name);\n    TO_JAVA_STRING(pw_dir, pw.pw_dir);\n    TO_JAVA_STRING(pw_shell, pw.pw_shell);\n    static jmethodID ctor = env->GetMethodID(structPasswdClass.get(), \"<init>\",\n            \"(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)V\");\n    return env->NewObject(structPasswdClass.get(), ctor,\n            pw_name, static_cast<jint>(pw.pw_uid), static_cast<jint>(pw.pw_gid), pw_dir, pw_shell);\n}\n\nclass Passwd {\npublic:\n    Passwd(JNIEnv* env) : mEnv(env), mResult(NULL) {\n        mBufferSize = sysconf(_SC_GETPW_R_SIZE_MAX);\n        if (mBufferSize == -1UL) {\n            // We're probably on bionic, where 1KiB should be enough for anyone.\n            // TODO: fix bionic to return 1024 like glibc.\n            mBufferSize = 1024;\n        }\n        mBuffer.reset(new char[mBufferSize]);\n    }\n\n    jobject getpwnam(const char* name) {\n        return process(\"getpwnam_r\", system_getpwnam_r(name, &mPwd, mBuffer.get(), mBufferSize, &mResult));\n    }\n\n    jobject getpwuid(uid_t uid) {\n        return process(\"getpwuid_r\", system_getpwuid_r(uid, &mPwd, mBuffer.get(), mBufferSize, &mResult));\n    }\n\n    struct passwd* get() {\n        return mResult;\n    }\n\nprivate:\n    jobject process(const char* syscall, int error) {\n        if (mResult == NULL) {\n            errno = error;\n            throwErrnoException(mEnv, syscall);\n            return NULL;\n        }\n        return makeStructPasswd(mEnv, *mResult);\n    }\n\n    JNIEnv* mEnv;\n    UniquePtr<char[]> mBuffer;\n    size_t mBufferSize;\n    struct passwd mPwd;\n    struct passwd* mResult;\n};\n\nstatic jobject makeStructStat(JNIEnv* env, const struct stat& sb) {\n    TRACE;\n    static jmethodID ctor = env->GetMethodID(structStatClass.get(), \"<init>\",\n            \"(JJIJIIJJJJJJJ)V\");\n    return env->NewObject(structStatClass.get(), ctor,\n            static_cast<jlong>(sb.st_dev), static_cast<jlong>(sb.st_ino),\n            static_cast<jint>(sb.st_mode), static_cast<jlong>(sb.st_nlink),\n            static_cast<jint>(sb.st_uid), static_cast<jint>(sb.st_gid),\n            static_cast<jlong>(sb.st_rdev), static_cast<jlong>(sb.st_size),\n            static_cast<jlong>(sb.st_atime), static_cast<jlong>(sb.st_mtime),\n            static_cast<jlong>(sb.st_ctime), static_cast<jlong>(sb.st_blksize),\n            static_cast<jlong>(sb.st_blocks));\n}\n\nstatic jobject doStat(JNIEnv* env, jstring javaPath, bool isLstat) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return NULL;\n    }\n    struct stat sb;\n    int rc = isLstat ? TEMP_FAILURE_RETRY(::lstat(path.c_str(), &sb))\n                     : TEMP_FAILURE_RETRY(::stat(path.c_str(), &sb));\n    if (rc == -1) {\n        throwErrnoException(env, isLstat ? \"lstat\" : \"stat\");\n        return NULL;\n    }\n    return makeStructStat(env, sb);\n}\n\nstatic jobject makeStructStatFs(JNIEnv* env, const struct statfs& sb) {\n    TRACE;\n    static_assert(sizeof(sb.f_bavail) == sizeof(jlong), \"statfs_not_64_bit\");\n    static_assert(sizeof(sb.f_bfree) == sizeof(jlong), \"statfs_not_64_bit\");\n    static_assert(sizeof(sb.f_blocks) == sizeof(jlong), \"statfs_not_64_bit\");\n\n    static jmethodID ctor = env->GetMethodID(structStatFsClass.get(), \"<init>\",\n            \"(JJJJJJJJ)V\");\n    return env->NewObject(structStatFsClass.get(), ctor, static_cast<jlong>(sb.f_bsize),\n            static_cast<jlong>(sb.f_blocks), static_cast<jlong>(sb.f_bfree),\n            static_cast<jlong>(sb.f_bavail), static_cast<jlong>(sb.f_files),\n            static_cast<jlong>(sb.f_ffree), static_cast<jlong>(sb.f_namelen),\n            static_cast<jlong>(sb.f_frsize));\n}\n\nstatic jobject makeStructLinger(JNIEnv* env, const struct linger& l) {\n    TRACE;\n    static jmethodID ctor = env->GetMethodID(structLingerClass.get(), \"<init>\", \"(II)V\");\n    return env->NewObject(structLingerClass.get(), ctor, l.l_onoff, l.l_linger);\n}\n\nstatic jobject makeStructTimeval(JNIEnv* env, const struct timeval& tv) {\n    TRACE;\n    static jmethodID ctor = env->GetMethodID(structTimevalClass.get(), \"<init>\", \"(JJ)V\");\n    return env->NewObject(structTimevalClass.get(), ctor,\n            static_cast<jlong>(tv.tv_sec), static_cast<jlong>(tv.tv_usec));\n}\n\nstatic jobject makeStructUtsname(JNIEnv* env, const struct utsname& buf) {\n    TRACE;\n    TO_JAVA_STRING(sysname, buf.sysname);\n    TO_JAVA_STRING(nodename, buf.nodename);\n    TO_JAVA_STRING(release, buf.release);\n    TO_JAVA_STRING(version, buf.version);\n    TO_JAVA_STRING(machine, buf.machine);\n    static jmethodID ctor = env->GetMethodID(structUtsnameClass.get(), \"<init>\",\n            \"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\");\n    return env->NewObject(structUtsnameClass.get(), ctor,\n            sysname, nodename, release, version, machine);\n}\n\nstatic jboolean Posix_access(JNIEnv* env, jobject, jstring javaPath, jint mode) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return JNI_FALSE;\n    }\n    int rc = TEMP_FAILURE_RETRY(::access(path.c_str(), mode));\n    if (rc == -1) {\n        throwErrnoException(env, \"access\");\n    }\n    return (rc == 0);\n}\n\nstatic jobject Posix_accept(JNIEnv* env, jobject, jobject javaFd, jobject javaInetSocketAddress) {\n    TRACE;\n    sockaddr_storage ss;\n    socklen_t sl = sizeof(ss);\n    memset(&ss, 0, sizeof(ss));\n    int fd;\n    sockaddr* peer = (javaInetSocketAddress != NULL) ? reinterpret_cast<sockaddr*>(&ss) : NULL;\n    socklen_t* peerLength = (javaInetSocketAddress != NULL) ? &sl : 0;\n    jint clientFd = NET_FAILURE_RETRY(\"accept\", accept(fd, peer, peerLength));\n    if (clientFd == -1 || !fillInetSocketAddress(env, clientFd, javaInetSocketAddress, &ss)) {\n        close(clientFd);\n        return NULL;\n    }\n    return (clientFd != -1) ? jniCreateFileDescriptor(env, clientFd) : NULL;\n}\n\nstatic void Posix_bind(JNIEnv* env, jobject, jobject javaFd, jobject javaAddress, jint port) {\n    TRACE;\n    sockaddr_storage ss;\n    if (!inetAddressToSockaddr(env, javaAddress, port, &ss)) {\n        return;\n    }\n    int fd;\n    const sockaddr* sa = reinterpret_cast<const sockaddr*>(&ss);\n    NET_FAILURE_RETRY(\"bind\", bind(fd, sa, sizeof(sockaddr_storage)));\n}\n\nstatic void Posix_chmod(JNIEnv* env, jobject, jstring javaPath, jint mode) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return;\n    }\n    throwIfMinusOne(env, \"chmod\", TEMP_FAILURE_RETRY(::chmod(path.c_str(), mode)));\n}\n\nstatic void Posix_close(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    // Get the FileDescriptor's 'fd' field and clear it.\n    // We need to do this before we can throw an IOException (http://b/3222087).\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    jniSetFileDescriptorOfFD(env, javaFd, -1);\n\n    // Even if close(2) fails with EINTR, the fd will have been closed.\n    // Using TEMP_FAILURE_RETRY will either lead to EBADF or closing someone else's fd.\n    // http://lkml.indiana.edu/hypermail/linux/kernel/0509.1/0877.html\n    throwIfMinusOne(env, \"close\", ::close(fd));\n}\n\nstatic void Posix_connect(JNIEnv* env, jobject, jobject javaFd, jobject javaAddress, jint port) {\n    TRACE;\n    sockaddr_storage ss;\n    if (!inetAddressToSockaddr(env, javaAddress, port, &ss)) {\n        return;\n    }\n    int fd;\n    const sockaddr* sa = reinterpret_cast<const sockaddr*>(&ss);\n    NET_FAILURE_RETRY(\"connect\", connect(fd, sa, sizeof(sockaddr_storage)));\n}\n\nstatic jobject Posix_dup(JNIEnv* env, jobject, jobject javaOldFd) {\n    TRACE;\n    int oldFd = jniGetFDFromFileDescriptor(env, javaOldFd);\n    DBG(\"oldFd=%d\", oldFd);\n    int newFd = throwIfMinusOne(env, \"dup\", TEMP_FAILURE_RETRY(::dup(oldFd)));\n    DBG(\"newFd=%d\", newFd);\n    return (newFd != -1) ? jniCreateFileDescriptor(env, newFd) : NULL;\n}\n\nstatic jobject Posix_dup2(JNIEnv* env, jobject, jobject javaOldFd, jint newFd) {\n    TRACE;\n    int oldFd = jniGetFDFromFileDescriptor(env, javaOldFd);\n    DBG(\"oldFd=%d\", oldFd);\n    int fd = throwIfMinusOne(env, \"dup2\", TEMP_FAILURE_RETRY(::dup2(oldFd, newFd)));\n    DBG(\"fd=%d\", fd);\n    return (fd != -1) ? jniCreateFileDescriptor(env, fd) : NULL;\n}\n\nstatic jobjectArray Posix_environ(JNIEnv* env, jobject) {\n    return toStringArray(env, environ);\n}\n\nstatic jint Posix_fcntlVoid(JNIEnv* env, jobject, jobject javaFd, jint cmd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"fcntl\", TEMP_FAILURE_RETRY(::fcntl(fd, cmd)));\n}\n\nstatic jint Posix_fcntlLong(JNIEnv* env, jobject, jobject javaFd, jint cmd, jlong arg) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"fcntl\", TEMP_FAILURE_RETRY(::fcntl(fd, cmd, arg)));\n}\n\nstatic jint Posix_fcntlFlock(JNIEnv* env, jobject, jobject javaFd, jint cmd, jobject javaFlock) {\n    TRACE;\n    static jfieldID typeFid = env->GetFieldID(structFlockClass.get(), \"l_type\", \"S\");\n    static jfieldID whenceFid = env->GetFieldID(structFlockClass.get(), \"l_whence\", \"S\");\n    static jfieldID startFid = env->GetFieldID(structFlockClass.get(), \"l_start\", \"J\");\n    static jfieldID lenFid = env->GetFieldID(structFlockClass.get(), \"l_len\", \"J\");\n    static jfieldID pidFid = env->GetFieldID(structFlockClass.get(), \"l_pid\", \"I\");\n\n    struct flock64 lock;\n    memset(&lock, 0, sizeof(lock));\n    lock.l_type = env->GetShortField(javaFlock, typeFid);\n    lock.l_whence = env->GetShortField(javaFlock, whenceFid);\n    lock.l_start = env->GetLongField(javaFlock, startFid);\n    lock.l_len = env->GetLongField(javaFlock, lenFid);\n    lock.l_pid = env->GetIntField(javaFlock, pidFid);\n\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    int rc = throwIfMinusOne(env, \"fcntl\", TEMP_FAILURE_RETRY(::fcntl(fd, cmd, &lock)));\n    if (rc != -1) {\n        env->SetShortField(javaFlock, typeFid, lock.l_type);\n        env->SetShortField(javaFlock, whenceFid, lock.l_whence);\n        env->SetLongField(javaFlock, startFid, lock.l_start);\n        env->SetLongField(javaFlock, lenFid, lock.l_len);\n        env->SetIntField(javaFlock, pidFid, lock.l_pid);\n    }\n    return rc;\n}\n\nstatic void Posix_fdatasync(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"fdatasync\", TEMP_FAILURE_RETRY(::fdatasync(fd)));\n}\n\nstatic jobject Posix_fstat(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct stat sb;\n    int rc = TEMP_FAILURE_RETRY(::fstat(fd, &sb));\n    if (rc == -1) {\n        throwErrnoException(env, \"fstat\");\n        return NULL;\n    }\n    return makeStructStat(env, sb);\n}\n\nstatic jobject Posix_fstatfs(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct statfs sb;\n    int rc = TEMP_FAILURE_RETRY(::fstatfs(fd, &sb));\n    if (rc == -1) {\n        throwErrnoException(env, \"fstatfs\");\n        return NULL;\n    }\n    return makeStructStatFs(env, sb);\n}\n\nstatic void Posix_fsync(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"fsync\", TEMP_FAILURE_RETRY(::fsync(fd)));\n}\n\nstatic void Posix_ftruncate(JNIEnv* env, jobject, jobject javaFd, jlong length) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"ftruncate\", TEMP_FAILURE_RETRY(::ftruncate(fd, length)));\n}\n\nstatic jstring Posix_gai_strerror(JNIEnv* env, jobject, jint error) {\n    TRACE;\n    return env->NewStringUTF(gai_strerror(error));\n}\n\nstatic jobjectArray Posix_getaddrinfo(JNIEnv* env, jobject, jstring javaNode, jobject javaHints) {\n    ScopedUtfChars node(env, javaNode);\n    if (node.c_str() == NULL) {\n        return NULL;\n    }\n\n    static jfieldID flagsFid = env->GetFieldID(structAddrinfoClass.get(), \"ai_flags\", \"I\");\n    static jfieldID familyFid = env->GetFieldID(structAddrinfoClass.get(), \"ai_family\", \"I\");\n    static jfieldID socktypeFid = env->GetFieldID(structAddrinfoClass.get(), \"ai_socktype\", \"I\");\n    static jfieldID protocolFid = env->GetFieldID(structAddrinfoClass.get(), \"ai_protocol\", \"I\");\n\n    addrinfo hints;\n    memset(&hints, 0, sizeof(hints));\n    hints.ai_flags = env->GetIntField(javaHints, flagsFid);\n    hints.ai_family = env->GetIntField(javaHints, familyFid);\n    hints.ai_socktype = env->GetIntField(javaHints, socktypeFid);\n    hints.ai_protocol = env->GetIntField(javaHints, protocolFid);\n\n    addrinfo* addressList = NULL;\n    int rc = getaddrinfo(node.c_str(), NULL, &hints, &addressList);\n    UniquePtr<addrinfo, addrinfo_deleter> addressListDeleter(addressList);\n    if (rc != 0) {\n        throwGaiException(env, \"getaddrinfo\", rc);\n        return NULL;\n    }\n\n    // Count results so we know how to size the output array.\n    int addressCount = 0;\n    for (addrinfo* ai = addressList; ai != NULL; ai = ai->ai_next) {\n        if (ai->ai_family == AF_INET || ai->ai_family == AF_INET6) {\n            ++addressCount;\n        } else {\n            ERR(\"getaddrinfo unexpected ai_family %i\", ai->ai_family);\n        }\n    }\n    if (addressCount == 0) {\n        return NULL;\n    }\n\n    // Prepare output array.\n    jobjectArray result = env->NewObjectArray(addressCount, inetAddressClass.get(), NULL);\n    if (result == NULL) {\n        return NULL;\n    }\n\n    // Examine returned addresses one by one, save them in the output array.\n    int index = 0;\n    for (addrinfo* ai = addressList; ai != NULL; ai = ai->ai_next) {\n        if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) {\n            // Unknown address family. Skip this address.\n            ERR(\"getaddrinfo unexpected ai_family %i\", ai->ai_family);\n            continue;\n        }\n\n        // Convert each IP address into a Java byte array.\n        sockaddr_storage* address = reinterpret_cast<sockaddr_storage*>(ai->ai_addr);\n        jni::jhobject inetAddress(sockaddrToInetAddress(env, address, NULL));\n        if (inetAddress.get() == NULL) {\n            return NULL;\n        }\n        env->SetObjectArrayElement(result, index, inetAddress.get());\n        ++index;\n    }\n    return result;\n}\n\nstatic jint Posix_getegid(JNIEnv*, jobject) {\n    TRACE;\n    return getegid();\n}\n\nstatic jint Posix_geteuid(JNIEnv*, jobject) {\n    TRACE;\n    return geteuid();\n}\n\nstatic jint Posix_getgid(JNIEnv*, jobject) {\n    TRACE;\n    return getgid();\n}\n\nstatic jstring Posix_getenv(JNIEnv* env, jobject, jstring javaName) {\n    TRACE;\n    ScopedUtfChars name(env, javaName);\n    if (name.c_str() == NULL) {\n        return NULL;\n    }\n    return env->NewStringUTF(getenv(name.c_str()));\n}\n\nstatic jstring Posix_getnameinfo(JNIEnv* env, jobject, jobject javaAddress, jint flags) {\n    TRACE;\n    sockaddr_storage ss;\n    if (!inetAddressToSockaddrVerbatim(env, javaAddress, 0, &ss)) {\n        return NULL;\n    }\n    // TODO: bionic's getnameinfo(3) seems to want its length parameter to be exactly\n    // sizeof(sockaddr_in) for an IPv4 address and sizeof (sockaddr_in6) for an\n    // IPv6 address. Fix getnameinfo so it accepts sizeof(sockaddr_storage), and\n    // then remove this hack.\n    socklen_t size = (ss.ss_family == AF_INET) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);\n    char buf[NI_MAXHOST]; // NI_MAXHOST is longer than INET6_ADDRSTRLEN.\n    int rc = getnameinfo(reinterpret_cast<sockaddr*>(&ss), size, buf, sizeof(buf), NULL, 0, flags);\n    if (rc != 0) {\n        throwGaiException(env, \"getnameinfo\", rc);\n        return NULL;\n    }\n    return env->NewStringUTF(buf);\n}\n\nstatic jint Posix_getpid(JNIEnv*, jobject) {\n    TRACE;\n    return getpid();\n}\n\nstatic jint Posix_getppid(JNIEnv*, jobject) {\n    TRACE;\n    return getppid();\n}\n\nstatic jobject Posix_getpwnam(JNIEnv* env, jobject, jstring javaName) {\n    TRACE;\n    ScopedUtfChars name(env, javaName);\n    if (name.c_str() == NULL) {\n        return NULL;\n    }\n    return Passwd(env).getpwnam(name.c_str());\n}\n\nstatic jobject Posix_getpwuid(JNIEnv* env, jobject, jint uid) {\n    TRACE;\n    return Passwd(env).getpwuid(uid);\n}\n\nstatic jobject Posix_getsockname(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    sockaddr_storage ss;\n    sockaddr* sa = reinterpret_cast<sockaddr*>(&ss);\n    socklen_t byteCount = sizeof(ss);\n    memset(&ss, 0, byteCount);\n    int rc = TEMP_FAILURE_RETRY(getsockname(fd, sa, &byteCount));\n    if (rc == -1) {\n        throwErrnoException(env, \"getsockname\");\n        return NULL;\n    }\n    return makeSocketAddress(env, &ss);\n}\n\nstatic jint Posix_getsockoptByte(JNIEnv* env, jobject, jobject javaFd, jint level, jint option) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    u_char result = 0;\n    socklen_t size = sizeof(result);\n    throwIfMinusOne(env, \"getsockopt\", TEMP_FAILURE_RETRY(getsockopt(fd, level, option, &result, &size)));\n    return result;\n}\n\nstatic jobject Posix_getsockoptInAddr(JNIEnv* env, jobject, jobject javaFd, jint level, jint option) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    sockaddr_storage ss;\n    memset(&ss, 0, sizeof(ss));\n    ss.ss_family = AF_INET; // This is only for the IPv4-only IP_MULTICAST_IF.\n    sockaddr_in* sa = reinterpret_cast<sockaddr_in*>(&ss);\n    socklen_t size = sizeof(sa->sin_addr);\n    int rc = TEMP_FAILURE_RETRY(getsockopt(fd, level, option, &sa->sin_addr, &size));\n    if (rc == -1) {\n        throwErrnoException(env, \"getsockopt\");\n        return NULL;\n    }\n    return sockaddrToInetAddress(env, &ss, NULL);\n}\n\nstatic jint Posix_getsockoptInt(JNIEnv* env, jobject, jobject javaFd, jint level, jint option) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    jint result = 0;\n    socklen_t size = sizeof(result);\n    throwIfMinusOne(env, \"getsockopt\", TEMP_FAILURE_RETRY(getsockopt(fd, level, option, &result, &size)));\n    return result;\n}\n\nstatic jobject Posix_getsockoptLinger(JNIEnv* env, jobject, jobject javaFd, jint level, jint option) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct linger l;\n    socklen_t size = sizeof(l);\n    memset(&l, 0, size);\n    int rc = TEMP_FAILURE_RETRY(getsockopt(fd, level, option, &l, &size));\n    if (rc == -1) {\n        throwErrnoException(env, \"getsockopt\");\n        return NULL;\n    }\n    return makeStructLinger(env, l);\n}\n\nstatic jobject Posix_getsockoptTimeval(JNIEnv* env, jobject, jobject javaFd, jint level, jint option) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct timeval tv;\n    socklen_t size = sizeof(tv);\n    memset(&tv, 0, size);\n    int rc = TEMP_FAILURE_RETRY(getsockopt(fd, level, option, &tv, &size));\n    if (rc == -1) {\n        throwErrnoException(env, \"getsockopt\");\n        return NULL;\n    }\n    return makeStructTimeval(env, tv);\n}\n\nstatic jint Posix_getuid(JNIEnv*, jobject) {\n    TRACE;\n    return getuid();\n}\n\nstatic jstring Posix_if_indextoname(JNIEnv* env, jobject, jint index) {\n    TRACE;\n    char buf[IF_NAMESIZE];\n    char* name = if_indextoname(index, buf);\n    // if_indextoname(3) returns NULL on failure, which will come out of NewStringUTF unscathed.\n    // There's no useful information in errno, so we don't bother throwing. Callers can null-check.\n    return env->NewStringUTF(name);\n}\n\nstatic jobject Posix_inet_pton(JNIEnv* env, jobject, jint family, jstring javaName) {\n    TRACE;\n    ScopedUtfChars name(env, javaName);\n    if (name.c_str() == NULL) {\n        return NULL;\n    }\n    sockaddr_storage ss;\n    memset(&ss, 0, sizeof(ss));\n    // sockaddr_in and sockaddr_in6 are at the same address, so we can use either here.\n    void* dst = &reinterpret_cast<sockaddr_in*>(&ss)->sin_addr;\n    if (inet_pton(family, name.c_str(), dst) != 1) {\n        return NULL;\n    }\n    ss.ss_family = family;\n    return sockaddrToInetAddress(env, &ss, NULL);\n}\n\nstatic jobject Posix_ioctlInetAddress(JNIEnv* env, jobject, jobject javaFd, jint cmd, jstring javaInterfaceName) {\n    TRACE;\n    struct ifreq req;\n    if (!fillIfreq(env, javaInterfaceName, req)) {\n        return NULL;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    int rc = throwIfMinusOne(env, \"ioctl\", TEMP_FAILURE_RETRY(ioctl(fd, cmd, &req)));\n    if (rc == -1) {\n        return NULL;\n    }\n    return sockaddrToInetAddress(env, reinterpret_cast<sockaddr_storage*>(&req.ifr_addr), NULL);\n}\n\nstatic jint Posix_ioctlInt(JNIEnv* env, jobject, jobject javaFd, jint cmd, jobject javaArg) {\n    TRACE;\n    // This is complicated because ioctls may return their result by updating their argument\n    // or via their return value, so we need to support both.\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    static jfieldID valueFid = env->GetFieldID(mutableIntClass.get(), \"value\", \"I\");\n    jint arg = env->GetIntField(javaArg, valueFid);\n    int rc = throwIfMinusOne(env, \"ioctl\", TEMP_FAILURE_RETRY(::ioctl(fd, cmd, &arg)));\n    if (!env->ExceptionCheck()) {\n        env->SetIntField(javaArg, valueFid, arg);\n    }\n    return rc;\n}\n\nstatic jboolean Posix_isatty(JNIEnv* env, jobject, jobject javaFd) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return TEMP_FAILURE_RETRY(isatty(fd)) == 0;\n}\n\nstatic void Posix_kill(JNIEnv* env, jobject, jint pid, jint sig) {\n    TRACE;\n    throwIfMinusOne(env, \"kill\", TEMP_FAILURE_RETRY(kill(pid, sig)));\n}\n\nstatic void Posix_listen(JNIEnv* env, jobject, jobject javaFd, jint backlog) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"listen\", TEMP_FAILURE_RETRY(listen(fd, backlog)));\n}\n\nstatic jlong Posix_lseek(JNIEnv* env, jobject, jobject javaFd, jlong offset, jint whence) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"lseek\", TEMP_FAILURE_RETRY(::lseek64(fd, offset, whence)));\n}\n\nstatic jobject Posix_lstat(JNIEnv* env, jobject, jstring javaPath) {\n    TRACE;\n    return doStat(env, javaPath, true);\n}\n\nstatic void Posix_mincore(JNIEnv* env, jobject, jlong address, jlong byteCount, jbyteArray javaVector) {\n    TRACE;\n    ScopedByteArrayRW vector(env, javaVector);\n    if (vector.get() == NULL) {\n        return;\n    }\n    void* ptr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    unsigned char* vec = reinterpret_cast<unsigned char*>(vector.get());\n    throwIfMinusOne(env, \"mincore\", TEMP_FAILURE_RETRY(mincore(ptr, byteCount, vec)));\n}\n\nstatic void Posix_mkdir(JNIEnv* env, jobject, jstring javaPath, jint mode) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return;\n    }\n    throwIfMinusOne(env, \"mkdir\", TEMP_FAILURE_RETRY(::mkdir(path.c_str(), mode)));\n}\n\nstatic void Posix_mlock(JNIEnv* env, jobject, jlong address, jlong byteCount) {\n    TRACE;\n    void* ptr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    throwIfMinusOne(env, \"mlock\", TEMP_FAILURE_RETRY(mlock(ptr, byteCount)));\n}\n\nstatic jlong Posix_mmap(JNIEnv* env, jobject, jlong address, jlong byteCount, jint prot, jint flags, jobject javaFd, jlong offset) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    void* suggestedPtr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    void* ptr = mmap(suggestedPtr, byteCount, prot, flags, fd, offset);\n    if (ptr == MAP_FAILED) {\n        throwErrnoException(env, \"mmap\");\n    }\n    return static_cast<jlong>(reinterpret_cast<uintptr_t>(ptr));\n}\n\nstatic void Posix_msync(JNIEnv* env, jobject, jlong address, jlong byteCount, jint flags) {\n    TRACE;\n    void* ptr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    throwIfMinusOne(env, \"msync\", TEMP_FAILURE_RETRY(msync(ptr, byteCount, flags)));\n}\n\nstatic void Posix_munlock(JNIEnv* env, jobject, jlong address, jlong byteCount) {\n    TRACE;\n    void* ptr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    throwIfMinusOne(env, \"munlock\", TEMP_FAILURE_RETRY(munlock(ptr, byteCount)));\n}\n\nstatic void Posix_munmap(JNIEnv* env, jobject, jlong address, jlong byteCount) {\n    TRACE;\n    void* ptr = reinterpret_cast<void*>(static_cast<uintptr_t>(address));\n    throwIfMinusOne(env, \"munmap\", TEMP_FAILURE_RETRY(munmap(ptr, byteCount)));\n}\n\nstatic jobject Posix_open(JNIEnv* env, jobject, jstring javaPath, jint flags, jint mode) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return NULL;\n    }\n    int fd = throwIfMinusOne(env, \"open\", TEMP_FAILURE_RETRY(::open(path.c_str(), flags, mode)));\n    DBG(\"fd=%d\", fd);\n    return fd != -1 ? jniCreateFileDescriptor(env, fd) : NULL;\n}\n\nstatic jobjectArray Posix_pipe(JNIEnv* env, jobject) {\n    TRACE;\n    int fds[2];\n    throwIfMinusOne(env, \"pipe\", TEMP_FAILURE_RETRY(pipe(&fds[0])));\n    jobjectArray result = env->NewObjectArray(2, clsFD.get(), NULL);\n    if (result == NULL) {\n        return NULL;\n    }\n    for (int i = 0; i < 2; ++i) {\n        jni::jhobject fd(jniCreateFileDescriptor(env, fds[i]));\n        if (fd.get() == NULL) {\n            return NULL;\n        }\n        env->SetObjectArrayElement(result, i, fd.get());\n        if (env->ExceptionCheck()) {\n            return NULL;\n        }\n    }\n    return result;\n}\n\nstatic jint Posix_poll(JNIEnv* env, jobject, jobjectArray javaStructs, jint timeoutMs) {\n    TRACE;\n    static jfieldID fdFid = env->GetFieldID(structPollfdClass.get(), \"fd\", \"Ljava/io/FileDescriptor;\");\n    static jfieldID eventsFid = env->GetFieldID(structPollfdClass.get(), \"events\", \"S\");\n    static jfieldID reventsFid = env->GetFieldID(structPollfdClass.get(), \"revents\", \"S\");\n\n    // Turn the Java libcore.io.StructPollfd[] into a C++ struct pollfd[].\n    size_t arrayLength = env->GetArrayLength(javaStructs);\n    UniquePtr<struct pollfd[]> fds(new struct pollfd[arrayLength]);\n    memset(fds.get(), 0, sizeof(struct pollfd) * arrayLength);\n    size_t count = 0; // Some trailing array elements may be irrelevant. (See below.)\n    for (size_t i = 0; i < arrayLength; ++i) {\n        jni::jhobject javaStruct(env->GetObjectArrayElement(javaStructs, i));\n        if (javaStruct.get() == NULL) {\n            break; // We allow trailing nulls in the array for caller convenience.\n        }\n        jni::jhobject javaFd(env->GetObjectField(javaStruct.get(), fdFid));\n        if (javaFd.get() == NULL) {\n            break; // We also allow callers to just clear the fd field (this is what Selector does).\n        }\n        fds[count].fd = jniGetFDFromFileDescriptor(env, javaFd.get());\n        fds[count].events = env->GetShortField(javaStruct.get(), eventsFid);\n        ++count;\n    }\n\n    int rc = TEMP_FAILURE_RETRY(poll(fds.get(), count, timeoutMs));\n    if (rc == -1) {\n        throwErrnoException(env, \"poll\");\n        return -1;\n    }\n\n    // Update the revents fields in the Java libcore.io.StructPollfd[].\n    for (size_t i = 0; i < count; ++i) {\n        jni::jhobject javaStruct(env->GetObjectArrayElement(javaStructs, i));\n        if (javaStruct.get() == NULL) {\n            return -1;\n        }\n        env->SetShortField(javaStruct.get(), reventsFid, fds[i].revents);\n    }\n    return rc;\n}\n\nstatic jint Posix_preadBytes(JNIEnv* env, jobject, jobject javaFd, jobject javaBytes, jint byteOffset, jint byteCount, jlong offset) {\n    TRACE;\n    ScopedBytesRW bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"pread\", TEMP_FAILURE_RETRY(::pread(fd, bytes.get() + byteOffset, byteCount, offset)));\n}\n\nstatic jint Posix_pwriteBytes(JNIEnv* env, jobject, jobject javaFd, jbyteArray javaBytes, jint byteOffset, jint byteCount, jlong offset) {\n    TRACE;\n    ScopedBytesRO bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"pwrite\", TEMP_FAILURE_RETRY(::pwrite(fd, bytes.get() + byteOffset, byteCount, offset)));\n}\n\nstatic jint Posix_readBytes(JNIEnv* env, jobject, jobject javaFd, jobject javaBytes, jint byteOffset, jint byteCount) {\n    TRACE;\n    ScopedBytesRW bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"read\", TEMP_FAILURE_RETRY(::read(fd, bytes.get() + byteOffset, byteCount)));\n}\n\nstatic jint Posix_readv(JNIEnv* env, jobject, jobject javaFd, jobjectArray buffers, jintArray offsets, jintArray byteCounts) {\n    TRACE;\n    IoVec<ScopedBytesRW> ioVec(env, env->GetArrayLength(buffers));\n    if (!ioVec.init(buffers, offsets, byteCounts)) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"readv\", TEMP_FAILURE_RETRY(::readv(fd, ioVec.get(), ioVec.size())));\n}\n\nstatic jint Posix_recvfromBytes(JNIEnv* env, jobject, jobject javaFd, jobject javaBytes, jint byteOffset, jint byteCount, jint flags, jobject javaInetSocketAddress) {\n    TRACE;\n    ScopedBytesRW bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    sockaddr_storage ss;\n    socklen_t sl = sizeof(ss);\n    memset(&ss, 0, sizeof(ss));\n    int fd;\n    sockaddr* from = (javaInetSocketAddress != NULL) ? reinterpret_cast<sockaddr*>(&ss) : NULL;\n    socklen_t* fromLength = (javaInetSocketAddress != NULL) ? &sl : 0;\n    jint recvCount = NET_FAILURE_RETRY(\"recvfrom\", recvfrom(fd, bytes.get() + byteOffset, byteCount, flags, from, fromLength));\n    fillInetSocketAddress(env, recvCount, javaInetSocketAddress, &ss);\n    return recvCount;\n}\n\nstatic void Posix_remove(JNIEnv* env, jobject, jstring javaPath) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return;\n    }\n    throwIfMinusOne(env, \"remove\", TEMP_FAILURE_RETRY(::remove(path.c_str())));\n}\n\nstatic void Posix_rename(JNIEnv* env, jobject, jstring javaOldPath, jstring javaNewPath) {\n    TRACE;\n    ScopedUtfChars oldPath(env, javaOldPath);\n    if (oldPath.c_str() == NULL) {\n        return;\n    }\n    ScopedUtfChars newPath(env, javaNewPath);\n    if (newPath.c_str() == NULL) {\n        return;\n    }\n    throwIfMinusOne(env, \"rename\", TEMP_FAILURE_RETRY(::rename(oldPath.c_str(), newPath.c_str())));\n}\n\nstatic jlong Posix_sendfile(JNIEnv* env, jobject, jobject javaOutFd, jobject javaInFd, jobject javaOffset, jlong byteCount) {\n    TRACE;\n    int outFd = jniGetFDFromFileDescriptor(env, javaOutFd);\n    DBG(\"outFd=%d\", outFd);\n    int inFd = jniGetFDFromFileDescriptor(env, javaInFd);\n    DBG(\"inFd=%d\", inFd);\n    static jfieldID valueFid = env->GetFieldID(mutableLongClass.get(), \"value\", \"J\");\n    off_t offset = 0;\n    off_t* offsetPtr = NULL;\n    if (javaOffset != NULL) {\n        // TODO: fix bionic so we can have a 64-bit off_t!\n        offset = env->GetLongField(javaOffset, valueFid);\n        offsetPtr = &offset;\n    }\n    jlong result = throwIfMinusOne(env, \"sendfile\", TEMP_FAILURE_RETRY(sendfile(outFd, inFd, offsetPtr, byteCount)));\n    if (javaOffset != NULL) {\n        env->SetLongField(javaOffset, valueFid, offset);\n    }\n    return result;\n}\n\nstatic jint Posix_sendtoBytes(JNIEnv* env, jobject, jobject javaFd, jobject javaBytes, jint byteOffset, jint byteCount, jint flags, jobject javaInetAddress, jint port) {\n    TRACE;\n    ScopedBytesRO bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    sockaddr_storage ss;\n    if (javaInetAddress != NULL && !inetAddressToSockaddr(env, javaInetAddress, port, &ss)) {\n        return -1;\n    }\n    int fd;\n    const sockaddr* to = (javaInetAddress != NULL) ? reinterpret_cast<const sockaddr*>(&ss) : NULL;\n    socklen_t toLength = (javaInetAddress != NULL) ? sizeof(ss) : 0;\n    return NET_FAILURE_RETRY(\"sendto\", sendto(fd, bytes.get() + byteOffset, byteCount, flags, to, toLength));\n}\n\nstatic void Posix_setegid(JNIEnv* env, jobject, jint egid) {\n    TRACE;\n    throwIfMinusOne(env, \"setegid\", TEMP_FAILURE_RETRY(setegid(egid)));\n}\n\nstatic void Posix_seteuid(JNIEnv* env, jobject, jint euid) {\n    TRACE;\n    throwIfMinusOne(env, \"seteuid\", TEMP_FAILURE_RETRY(seteuid(euid)));\n}\n\nstatic void Posix_setgid(JNIEnv* env, jobject, jint gid) {\n    TRACE;\n    throwIfMinusOne(env, \"setgid\", TEMP_FAILURE_RETRY(setgid(gid)));\n}\n\nstatic void Posix_setsockoptByte(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jint value) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    u_char byte = value;\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &byte, sizeof(byte))));\n}\n\nstatic void Posix_setsockoptIfreq(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jstring javaInterfaceName) {\n    TRACE;\n    struct ifreq req;\n    if (!fillIfreq(env, javaInterfaceName, req)) {\n        return;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req, sizeof(req))));\n}\n\nstatic void Posix_setsockoptInt(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jint value) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &value, sizeof(value))));\n}\n\nstatic void Posix_setsockoptIpMreqn(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jint value) {\n    TRACE;\n    ip_mreqn req;\n    memset(&req, 0, sizeof(req));\n    req.imr_ifindex = value;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req, sizeof(req))));\n}\n\nstatic void Posix_setsockoptGroupReq(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jobject javaGroupReq) {\n    TRACE;\n    struct group_req req;\n    memset(&req, 0, sizeof(req));\n\n    static jfieldID grInterfaceFid = env->GetFieldID(structGroupReqClass.get(), \"gr_interface\", \"I\");\n    req.gr_interface = env->GetIntField(javaGroupReq, grInterfaceFid);\n    // Get the IPv4 or IPv6 multicast address to join or leave.\n    static jfieldID grGroupFid = env->GetFieldID(structGroupReqClass.get(), \"gr_group\", \"Ljava/net/InetAddress;\");\n    jni::jhobject javaGroup(env->GetObjectField(javaGroupReq, grGroupFid));\n    if (!inetAddressToSockaddrVerbatim(env, javaGroup.get(), 0, &req.gr_group)) {\n        return;\n    }\n\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    int rc = TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req, sizeof(req)));\n    if (rc == -1 && errno == EINVAL) {\n        // Maybe we're a 32-bit binary talking to a 64-bit kernel?\n        // glibc doesn't automatically handle this.\n        struct group_req64 {\n            uint32_t gr_interface;\n            uint32_t my_padding;\n            sockaddr_storage gr_group;\n        };\n        group_req64 req64;\n        req64.gr_interface = req.gr_interface;\n        memcpy(&req64.gr_group, &req.gr_group, sizeof(req.gr_group));\n        rc = TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req64, sizeof(req64)));\n    }\n    throwIfMinusOne(env, \"setsockopt\", rc);\n}\n\nstatic void Posix_setsockoptLinger(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jobject javaLinger) {\n    TRACE;\n    static jfieldID lOnoffFid = env->GetFieldID(structLingerClass.get(), \"l_onoff\", \"I\");\n    static jfieldID lLingerFid = env->GetFieldID(structLingerClass.get(), \"l_linger\", \"I\");\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct linger value;\n    value.l_onoff = env->GetIntField(javaLinger, lOnoffFid);\n    value.l_linger = env->GetIntField(javaLinger, lLingerFid);\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &value, sizeof(value))));\n}\n\nstatic void Posix_setsockoptTimeval(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jobject javaTimeval) {\n    TRACE;\n    static jfieldID tvSecFid = env->GetFieldID(structTimevalClass.get(), \"tv_sec\", \"J\");\n    static jfieldID tvUsecFid = env->GetFieldID(structTimevalClass.get(), \"tv_usec\", \"J\");\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    struct timeval value;\n    value.tv_sec = env->GetLongField(javaTimeval, tvSecFid);\n    value.tv_usec = env->GetLongField(javaTimeval, tvUsecFid);\n    throwIfMinusOne(env, \"setsockopt\", TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &value, sizeof(value))));\n}\n\nstatic void Posix_setuid(JNIEnv* env, jobject, jint uid) {\n    TRACE;\n    throwIfMinusOne(env, \"setuid\", TEMP_FAILURE_RETRY(setuid(uid)));\n}\n\nstatic void Posix_shutdown(JNIEnv* env, jobject, jobject javaFd, jint how) {\n    TRACE;\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    throwIfMinusOne(env, \"shutdown\", TEMP_FAILURE_RETRY(shutdown(fd, how)));\n}\n\nstatic jobject Posix_socket(JNIEnv* env, jobject, jint domain, jint type, jint protocol) {\n    TRACE;\n    int fd = throwIfMinusOne(env, \"socket\", TEMP_FAILURE_RETRY(socket(domain, type, protocol)));\n    DBG(\"fd=%d\", fd);\n    return fd != -1 ? jniCreateFileDescriptor(env, fd) : NULL;\n}\n\nstatic jobject Posix_stat(JNIEnv* env, jobject, jstring javaPath) {\n    TRACE;\n    return doStat(env, javaPath, false);\n}\n\nstatic jobject Posix_statfs(JNIEnv* env, jobject, jstring javaPath) {\n    TRACE;\n    ScopedUtfChars path(env, javaPath);\n    if (path.c_str() == NULL) {\n        return NULL;\n    }\n    struct statfs sb;\n    int rc = TEMP_FAILURE_RETRY(statfs(path.c_str(), &sb));\n    if (rc == -1) {\n        throwErrnoException(env, \"statfs\");\n        return NULL;\n    }\n    return makeStructStatFs(env, sb);\n}\n\nstatic jstring Posix_strerror(JNIEnv* env, jobject, jint errnum) {\n    TRACE;\n    char buffer[BUFSIZ];\n    const char* message = jniStrError(errnum, buffer, sizeof(buffer));\n    return env->NewStringUTF(message);\n}\n\nstatic void Posix_symlink(JNIEnv* env, jobject, jstring javaOldPath, jstring javaNewPath) {\n    TRACE;\n    ScopedUtfChars oldPath(env, javaOldPath);\n    if (oldPath.c_str() == NULL) {\n        return;\n    }\n    ScopedUtfChars newPath(env, javaNewPath);\n    if (newPath.c_str() == NULL) {\n        return;\n    }\n    throwIfMinusOne(env, \"symlink\", TEMP_FAILURE_RETRY(::symlink(oldPath.c_str(), newPath.c_str())));\n}\n\nstatic jlong Posix_sysconf(JNIEnv* env, jobject, jint name) {\n    TRACE;\n    // Since -1 is a valid result from sysconf(3), detecting failure is a little more awkward.\n    errno = 0;\n    long result = sysconf(name);\n    if (result == -1L && errno == EINVAL) {\n        throwErrnoException(env, \"sysconf\");\n    }\n    return result;\n}\n\nstatic jobject Posix_uname(JNIEnv* env, jobject) {\n    TRACE;\n    struct utsname buf;\n    if (TEMP_FAILURE_RETRY(uname(&buf)) == -1) {\n        return NULL; // Can't happen.\n    }\n    return makeStructUtsname(env, buf);\n}\n\nstatic jint Posix_waitpid(JNIEnv* env, jobject, jint pid, jobject javaStatus, jint options) {\n    TRACE;\n    int status;\n    int rc = throwIfMinusOne(env, \"waitpid\", TEMP_FAILURE_RETRY(waitpid(pid, &status, options)));\n    if (rc != -1) {\n        static jfieldID valueFid = env->GetFieldID(mutableIntClass.get(), \"value\", \"I\");\n        env->SetIntField(javaStatus, valueFid, status);\n    }\n    return rc;\n}\n\nstatic jint Posix_writeBytes(JNIEnv* env, jobject, jobject javaFd, jbyteArray javaBytes, jint byteOffset, jint byteCount) {\n    TRACE;\n    ScopedBytesRO bytes(env, javaBytes);\n    if (bytes.get() == NULL) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"write\", TEMP_FAILURE_RETRY(::write(fd, bytes.get() + byteOffset, byteCount)));\n}\n\nstatic jint Posix_writev(JNIEnv* env, jobject, jobject javaFd, jobjectArray buffers, jintArray offsets, jintArray byteCounts) {\n    TRACE;\n    IoVec<ScopedBytesRO> ioVec(env, env->GetArrayLength(buffers));\n    if (!ioVec.init(buffers, offsets, byteCounts)) {\n        return -1;\n    }\n    int fd = jniGetFDFromFileDescriptor(env, javaFd);\n    DBG(\"fd=%d\", fd);\n    return throwIfMinusOne(env, \"writev\", TEMP_FAILURE_RETRY(::writev(fd, ioVec.get(), ioVec.size())));\n}\n\nstatic JNINativeMethod posix_methods[] = {\n    NATIVE_METHOD(Posix, accept, \"(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, access, \"(Ljava/lang/String;I)Z\"),\n    NATIVE_METHOD(Posix, bind, \"(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V\"),\n    NATIVE_METHOD(Posix, chmod, \"(Ljava/lang/String;I)V\"),\n    NATIVE_METHOD(Posix, close, \"(Ljava/io/FileDescriptor;)V\"),\n    NATIVE_METHOD(Posix, connect, \"(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V\"),\n    NATIVE_METHOD(Posix, dup, \"(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, dup2, \"(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, environ, \"()[Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, fcntlVoid, \"(Ljava/io/FileDescriptor;I)I\"),\n    NATIVE_METHOD(Posix, fcntlLong, \"(Ljava/io/FileDescriptor;IJ)I\"),\n    NATIVE_METHOD(Posix, fcntlFlock, \"(Ljava/io/FileDescriptor;ILlibcore/io/StructFlock;)I\"),\n    NATIVE_METHOD(Posix, fdatasync, \"(Ljava/io/FileDescriptor;)V\"),\n    NATIVE_METHOD(Posix, fstat, \"(Ljava/io/FileDescriptor;)Llibcore/io/StructStat;\"),\n    NATIVE_METHOD(Posix, fstatfs, \"(Ljava/io/FileDescriptor;)Llibcore/io/StructStatFs;\"),\n    NATIVE_METHOD(Posix, fsync, \"(Ljava/io/FileDescriptor;)V\"),\n    NATIVE_METHOD(Posix, ftruncate, \"(Ljava/io/FileDescriptor;J)V\"),\n    NATIVE_METHOD(Posix, gai_strerror, \"(I)Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, getaddrinfo, \"(Ljava/lang/String;Llibcore/io/StructAddrinfo;)[Ljava/net/InetAddress;\"),\n    NATIVE_METHOD(Posix, getegid, \"()I\"),\n    NATIVE_METHOD(Posix, geteuid, \"()I\"),\n    NATIVE_METHOD(Posix, getgid, \"()I\"),\n    NATIVE_METHOD(Posix, getenv, \"(Ljava/lang/String;)Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, getnameinfo, \"(Ljava/net/InetAddress;I)Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, getpid, \"()I\"),\n    NATIVE_METHOD(Posix, getppid, \"()I\"),\n    NATIVE_METHOD(Posix, getpwnam, \"(Ljava/lang/String;)Llibcore/io/StructPasswd;\"),\n    NATIVE_METHOD(Posix, getpwuid, \"(I)Llibcore/io/StructPasswd;\"),\n    NATIVE_METHOD(Posix, getsockname, \"(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;\"),\n    NATIVE_METHOD(Posix, getsockoptByte, \"(Ljava/io/FileDescriptor;II)I\"),\n    NATIVE_METHOD(Posix, getsockoptInAddr, \"(Ljava/io/FileDescriptor;II)Ljava/net/InetAddress;\"),\n    NATIVE_METHOD(Posix, getsockoptInt, \"(Ljava/io/FileDescriptor;II)I\"),\n    NATIVE_METHOD(Posix, getsockoptLinger, \"(Ljava/io/FileDescriptor;II)Llibcore/io/StructLinger;\"),\n    NATIVE_METHOD(Posix, getsockoptTimeval, \"(Ljava/io/FileDescriptor;II)Llibcore/io/StructTimeval;\"),\n    NATIVE_METHOD(Posix, getuid, \"()I\"),\n    NATIVE_METHOD(Posix, if_indextoname, \"(I)Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, inet_pton, \"(ILjava/lang/String;)Ljava/net/InetAddress;\"),\n    NATIVE_METHOD(Posix, ioctlInetAddress, \"(Ljava/io/FileDescriptor;ILjava/lang/String;)Ljava/net/InetAddress;\"),\n    NATIVE_METHOD(Posix, ioctlInt, \"(Ljava/io/FileDescriptor;ILlibcore/util/MutableInt;)I\"),\n    NATIVE_METHOD(Posix, isatty, \"(Ljava/io/FileDescriptor;)Z\"),\n    NATIVE_METHOD(Posix, kill, \"(II)V\"),\n    NATIVE_METHOD(Posix, listen, \"(Ljava/io/FileDescriptor;I)V\"),\n    NATIVE_METHOD(Posix, lseek, \"(Ljava/io/FileDescriptor;JI)J\"),\n    NATIVE_METHOD(Posix, lstat, \"(Ljava/lang/String;)Llibcore/io/StructStat;\"),\n    NATIVE_METHOD(Posix, mincore, \"(JJ[B)V\"),\n    NATIVE_METHOD(Posix, mkdir, \"(Ljava/lang/String;I)V\"),\n    NATIVE_METHOD(Posix, mlock, \"(JJ)V\"),\n    NATIVE_METHOD(Posix, mmap, \"(JJIILjava/io/FileDescriptor;J)J\"),\n    NATIVE_METHOD(Posix, msync, \"(JJI)V\"),\n    NATIVE_METHOD(Posix, munlock, \"(JJ)V\"),\n    NATIVE_METHOD(Posix, munmap, \"(JJ)V\"),\n    NATIVE_METHOD(Posix, open, \"(Ljava/lang/String;II)Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, pipe, \"()[Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, poll, \"([Llibcore/io/StructPollfd;I)I\"),\n    NATIVE_METHOD(Posix, preadBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;IIJ)I\"),\n    NATIVE_METHOD(Posix, pwriteBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;IIJ)I\"),\n    NATIVE_METHOD(Posix, readBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;II)I\"),\n    NATIVE_METHOD(Posix, readv, \"(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I\"),\n    NATIVE_METHOD(Posix, recvfromBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;IIILjava/net/InetSocketAddress;)I\"),\n    NATIVE_METHOD(Posix, remove, \"(Ljava/lang/String;)V\"),\n    NATIVE_METHOD(Posix, rename, \"(Ljava/lang/String;Ljava/lang/String;)V\"),\n    NATIVE_METHOD(Posix, sendfile, \"(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Llibcore/util/MutableLong;J)J\"),\n    NATIVE_METHOD(Posix, sendtoBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;IIILjava/net/InetAddress;I)I\"),\n    NATIVE_METHOD(Posix, setegid, \"(I)V\"),\n    NATIVE_METHOD(Posix, seteuid, \"(I)V\"),\n    NATIVE_METHOD(Posix, setgid, \"(I)V\"),\n    NATIVE_METHOD(Posix, setsockoptByte, \"(Ljava/io/FileDescriptor;III)V\"),\n    NATIVE_METHOD(Posix, setsockoptIfreq, \"(Ljava/io/FileDescriptor;IILjava/lang/String;)V\"),\n    NATIVE_METHOD(Posix, setsockoptInt, \"(Ljava/io/FileDescriptor;III)V\"),\n    NATIVE_METHOD(Posix, setsockoptIpMreqn, \"(Ljava/io/FileDescriptor;III)V\"),\n    NATIVE_METHOD(Posix, setsockoptGroupReq, \"(Ljava/io/FileDescriptor;IILlibcore/io/StructGroupReq;)V\"),\n    NATIVE_METHOD(Posix, setsockoptLinger, \"(Ljava/io/FileDescriptor;IILlibcore/io/StructLinger;)V\"),\n    NATIVE_METHOD(Posix, setsockoptTimeval, \"(Ljava/io/FileDescriptor;IILlibcore/io/StructTimeval;)V\"),\n    NATIVE_METHOD(Posix, setuid, \"(I)V\"),\n    NATIVE_METHOD(Posix, shutdown, \"(Ljava/io/FileDescriptor;I)V\"),\n    NATIVE_METHOD(Posix, socket, \"(III)Ljava/io/FileDescriptor;\"),\n    NATIVE_METHOD(Posix, stat, \"(Ljava/lang/String;)Llibcore/io/StructStat;\"),\n    NATIVE_METHOD(Posix, statfs, \"(Ljava/lang/String;)Llibcore/io/StructStatFs;\"),\n    NATIVE_METHOD(Posix, strerror, \"(I)Ljava/lang/String;\"),\n    NATIVE_METHOD(Posix, symlink, \"(Ljava/lang/String;Ljava/lang/String;)V\"),\n    NATIVE_METHOD(Posix, sysconf, \"(I)J\"),\n    NATIVE_METHOD(Posix, uname, \"()Llibcore/io/StructUtsname;\"),\n    NATIVE_METHOD(Posix, waitpid, \"(ILlibcore/util/MutableInt;I)I\"),\n    NATIVE_METHOD(Posix, writeBytes, \"(Ljava/io/FileDescriptor;Ljava/lang/Object;II)I\"),\n    NATIVE_METHOD(Posix, writev, \"(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I\"),\n};\n\nCRYSTAX_LOCAL\nbool init(JNIEnv *env)\n{\n    DBG(\"init ICS classes\");\n    byteArrayClass = jni::find_class(env, \"[B\");\n    errnoExceptionClass = jni::find_class(env, \"libcore/io/ErrnoException\");\n    gaiExceptionClass = jni::find_class(env, \"libcore/io/GaiException\");\n    inet6AddressClass = jni::find_class(env, \"java/net/Inet6Address\");\n    inetAddressClass = jni::find_class(env, \"java/net/InetAddress\");\n    inetSocketAddressClass = jni::find_class(env, \"java/net/InetSocketAddress\");\n    mutableIntClass = jni::find_class(env, \"libcore/util/MutableInt\");\n    mutableLongClass = jni::find_class(env, \"libcore/util/MutableLong\");\n    stringClass = jni::find_class(env, \"java/lang/String\");\n    structAddrinfoClass = jni::find_class(env, \"libcore/io/StructAddrinfo\");\n    structFlockClass = jni::find_class(env, \"libcore/io/StructFlock\");\n    structGroupReqClass = jni::find_class(env, \"libcore/io/StructGroupReq\");\n    structLingerClass = jni::find_class(env, \"libcore/io/StructLinger\");\n    structPasswdClass = jni::find_class(env, \"libcore/io/StructPasswd\");\n    structPollfdClass = jni::find_class(env, \"libcore/io/StructPollfd\");\n    structStatClass = jni::find_class(env, \"libcore/io/StructStat\");\n    structStatFsClass = jni::find_class(env, \"libcore/io/StructStatFs\");\n    structTimevalClass = jni::find_class(env, \"libcore/io/StructTimeval\");\n    structUtsnameClass = jni::find_class(env, \"libcore/io/StructUtsname\");\n\n    DBG(\"trying to register Posix (ics implementation) native methods...\");\n    const char *clsname = \"libcore/io/Posix\";\n    if (!register_native_methods(env, clsname,\n            posix_methods, sizeof(posix_methods)/sizeof(posix_methods[0])))\n    {\n        ERR(\"can't register Posix native methods\");\n        return false;\n    }\n    DBG(\"Posix (gingerbread implementation) native methods registered\");\n\n    return true;\n}\n\n} // namespace ics\n} // namespace osfs\n} // namespace fileio\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/pipe.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n#include \"system/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint pipe(int pipefd[2])\n{\n    TRACE;\n\n    int fds[2];\n    int ret = system_pipe(fds);\n    if (ret < 0)\n        return -1;\n\n    pipefd[0] = alloc_fd(NULL, fds[0], system::driver_t::instance());\n    if (pipefd[0] == -1)\n    {\n        system_close(fds[0]);\n        system_close(fds[1]);\n        errno = EMFILE;\n        return -1;\n    }\n    pipefd[1] = alloc_fd(NULL, fds[1], system::driver_t::instance());\n    if (pipefd[1] == -1)\n    {\n        free_fd(pipefd[0]);\n        system_close(fds[0]);\n        system_close(fds[1]);\n        errno = EMFILE;\n        return -1;\n    }\n\n    return 0;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint pipe(int pipefd[2])\n{\n    return ::crystax::fileio::pipe(pipefd);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/pread.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t pread(int fd, void *buf, size_t count, off_t offset)\n{\n    DBG(\"fd=%d, buf=%p, count=%lu, offset=%ld\", fd, buf, (unsigned long)count, (long)offset);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->pread(extfd, buf, count, offset);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t pread(int fd, void *buf, size_t count, off_t offset)\n{\n    return ::crystax::fileio::pread(fd, buf, count, offset);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/pwrite.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)\n{\n    DBG(\"fd=%d, buf=%p, count=%lu, offset=%ld\", fd, buf, (unsigned long)count, (long)offset);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->pwrite(extfd, buf, count, offset);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t pwrite(int fd, const void *buf, size_t count, off_t offset)\n{\n    return ::crystax::fileio::pwrite(fd, buf, count, offset);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/read.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t read(int fd, void *buf, size_t count)\n{\n    DBG(\"fd=%d, buf=%p, count=%lu\", fd, buf, (unsigned long)count);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->read(extfd, buf, count);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t read(int fd, void *buf, size_t count)\n{\n    return ::crystax::fileio::read(fd, buf, count);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/readdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nstruct dirent *readdir(DIR *dirp)\n{\n    DBG(\"dirp=%p\", dirp);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return NULL;\n\n    return driver->readdir(extdirp);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nstruct dirent *readdir(DIR *dirp)\n{\n    return ::crystax::fileio::readdir(dirp);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/readdir_r.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)\n{\n    DBG(\"dirp=%p, entry=%p, result=%p\", dirp, entry, result);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return -1;\n\n    return driver->readdir_r(extdirp, entry, result);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)\n{\n    return ::crystax::fileio::readdir_r(dirp, entry, result);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/readlink.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint readlink(const char *path, char *buf, size_t bufsize)\n{\n    DBG(\"path=%s, buf=%p, bufsize=%lu\", path, buf, (unsigned long)bufsize);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->readlink(path, buf, bufsize);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint readlink(const char *path, char *buf, size_t bufsize)\n{\n    return ::crystax::fileio::readlink(path, buf, bufsize);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/readv.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint readv(int fd, const struct iovec *iov, int count)\n{\n    DBG(\"fd=%d, iov=%p, count=%lu\", fd, iov, (unsigned long)count);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->readv(extfd, iov, count);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint readv(int fd, const struct iovec *iov, int count)\n{\n    return ::crystax::fileio::readv(fd, iov, count);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/recv.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t recv(int sockfd, void *buf, size_t len, unsigned int flags)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_recv(extfd, buf, len, flags);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t recv(int sockfd, void *buf, size_t len, unsigned int flags)\n{\n    return ::crystax::fileio::recv(sockfd, buf, len, flags);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/recvfrom.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t recvfrom(int sockfd, void *buf, size_t len, unsigned int flags,\n    const struct sockaddr *addr, socklen_t *addrlen)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_recvfrom(extfd, buf, len, flags, addr, addrlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t recvfrom(int sockfd, void *buf, size_t len, unsigned int flags,\n    const struct sockaddr *addr, socklen_t *addrlen)\n{\n    return ::crystax::fileio::recvfrom(sockfd, buf, len, flags, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/recvmsg.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint recvmsg(int sockfd, struct msghdr *msg, unsigned int flags)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_recvmsg(extfd, msg, flags);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint recvmsg(int sockfd, struct msghdr *msg, unsigned int flags)\n{\n    return ::crystax::fileio::recvmsg(sockfd, msg, flags);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/remove.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint remove(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->remove(path);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint remove(const char *path)\n{\n    return ::crystax::fileio::remove(path);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/rename.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint rename(const char *oldpath, const char *newpath)\n{\n    DBG(\"oldpath=%s, newpath=%s\", oldpath, newpath);\n\n    driver_t *driver = find_driver(newpath);\n    if (!driver)\n        return -1;\n\n    return driver->rename(oldpath, newpath);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint rename(const char *oldpath, const char *newpath)\n{\n    return ::crystax::fileio::rename(oldpath, newpath);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/rewinddir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nvoid rewinddir(DIR *dirp)\n{\n    DBG(\"dirp=%p\", dirp);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return;\n\n    driver->rewinddir(extdirp);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nvoid rewinddir(DIR *dirp)\n{\n    ::crystax::fileio::rewinddir(dirp);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/rmdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint rmdir(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->rmdir(path);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint rmdir(const char *path)\n{\n    return ::crystax::fileio::rmdir(path);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/scandir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n    int (*compar)(const struct dirent **, const struct dirent **))\n{\n    DBG(\"dir=%s\", dir);\n\n    driver_t *driver = find_driver(dir);\n    if (!driver)\n        return -1;\n\n    return driver->scandir(dir, namelist, filter, compar);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n    int (*compar)(const struct dirent **, const struct dirent **))\n{\n    return ::crystax::fileio::scandir(dir, namelist, filter, compar);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/seekdir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nvoid seekdir(DIR *dirp, long offset)\n{\n    DBG(\"dirp=%p, offset=%ld\", dirp, offset);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return;\n\n    driver->seekdir(extdirp, offset);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nvoid seekdir(DIR *dirp, long offset)\n{\n    ::crystax::fileio::seekdir(dirp, offset);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/select.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv)\n{\n    DBG(\"maxfd=%d, rfd=%p, wfd=%p, efd=%p, tv=%p\", maxfd, rfd, wfd, efd, tv);\n\n    driver_t *driver = NULL;\n    int extmaxfd = 0;\n    fd_set extrfd;\n    fd_set extwfd;\n    fd_set extefd;\n\n    if (rfd) FD_ZERO(&extrfd);\n    if (wfd) FD_ZERO(&extwfd);\n    if (efd) FD_ZERO(&extefd);\n\n    for (int fd = 0; fd < maxfd; ++fd)\n    {\n#define CRYSTAX_SELECT_SET(fd, fds, extfds)                        \\\n        if (fds && FD_ISSET(fd, fds))                              \\\n        {                                                          \\\n            int extfd;                                             \\\n            driver_t *d;                                           \\\n            if (!resolve(fd, NULL, &extfd, NULL, &d))              \\\n                return -1;                                         \\\n            if (!driver)                                           \\\n                driver = d;                                        \\\n            else if (driver != d)                                  \\\n            {                                                      \\\n                ERR(\"select across sources not supported yet\");    \\\n                errno = EXDEV;                                     \\\n                return -1;                                         \\\n            }                                                      \\\n            if (extmaxfd <= extfd)                                 \\\n                extmaxfd = extfd + 1;                              \\\n            FD_SET(extfd, &extfds);                                \\\n        }\n        CRYSTAX_SELECT_SET(fd, rfd, extrfd);\n        CRYSTAX_SELECT_SET(fd, wfd, extwfd);\n        CRYSTAX_SELECT_SET(fd, efd, extefd);\n#undef CRYSTAX_SELECT_SET\n    }\n    if (!driver)\n    {\n        DBG(\"empty sets\");\n        return 0;\n    }\n\n    return driver->select(extmaxfd, rfd ? &extrfd : NULL, wfd ? &extwfd : NULL,\n        efd ? &extefd : NULL, tv);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv)\n{\n    return ::crystax::fileio::select(maxfd, rfd, wfd, efd, tv);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/send.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t send(int sockfd, const void *buf, size_t len, unsigned int flags)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_send(extfd, buf, len, flags);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t send(int sockfd, const void *buf, size_t len, unsigned int flags)\n{\n    return ::crystax::fileio::send(sockfd, buf, len, flags);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/sendmsg.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint sendmsg(int sockfd, const struct msghdr *msg, unsigned int flags)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_sendmsg(extfd, msg, flags);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint sendmsg(int sockfd, const struct msghdr *msg, unsigned int flags)\n{\n    return ::crystax::fileio::sendmsg(sockfd, msg, flags);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/sendto.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t sendto(int sockfd, const void *buf, size_t len, int flags,\n    const struct sockaddr *addr, socklen_t addrlen)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_sendto(extfd, buf, len, flags, addr, addrlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t sendto(int sockfd, const void *buf, size_t len, int flags,\n    const struct sockaddr *addr, socklen_t addrlen)\n{\n    return ::crystax::fileio::sendto(sockfd, buf, len, flags, addr, addrlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/setsockopt.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)\n{\n    DBG(\"sockfd=%d, level=%d, optname=%d, optlen=%lu\", sockfd, level, optname, (unsigned long)optlen);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    if (extfd == -1)\n    {\n        errno = EBADF;\n        return -1;\n    }\n\n    return system_setsockopt(extfd, level, optname, optval, optlen);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)\n{\n    return ::crystax::fileio::setsockopt(sockfd, level, optname, optval, optlen);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/shutdown.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint shutdown(int sockfd, int how)\n{\n    DBG(\"sockfd=%d\", sockfd);\n\n    int extfd;\n    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))\n        return -1;\n\n    return system_shutdown(extfd, how);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint shutdown(int sockfd, int how)\n{\n    return ::crystax::fileio::shutdown(sockfd, how);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/socket.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n#include \"system/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint socket(int domain, int type, int protocol)\n{\n    DBG(\"domain=%d, type=%d, protocol=%d\", domain, type, protocol);\n\n    int extfd = system_socket(domain, type, protocol);\n    if (extfd == -1)\n        return -1;\n\n    int fd = alloc_fd(NULL, extfd, system::driver_t::instance());\n    if (fd < 0)\n    {\n        system_close(extfd);\n        errno = EMFILE;\n        return -1;\n    }\n\n    DBG(\"return fd=%d\", fd);\n    return fd;\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint socket(int domain, int type, int protocol)\n{\n    return ::crystax::fileio::socket(domain, type, protocol);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/stat.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint stat(const char *path, struct stat *st)\n{\n    DBG(\"path=%s, st=%p\", path, st);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->stat(path, st);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint stat(const char *path, struct stat *st)\n{\n    return ::crystax::fileio::stat(path, st);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/symlink.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint symlink(const char *src, const char *dst)\n{\n    DBG(\"src=%s, dst=%s\", src, dst);\n\n    driver_t *driver = find_driver(src);\n    driver_t *driver2 = find_driver(dst);\n    if (driver != driver2)\n    {\n        ERR(\"symlink across sources not supported yet\");\n        errno = EXDEV;\n        return -1;\n    }\n\n    return driver->symlink(src, dst);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint symlink(const char *src, const char *dst)\n{\n    return ::crystax::fileio::symlink(src, dst);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/system/driver.hpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef _CRYSTAX_FILEIO_SYSTEM_DRIVER_HPP_8c3ea337310344549cb60cbfe3683166\n#define _CRYSTAX_FILEIO_SYSTEM_DRIVER_HPP_8c3ea337310344549cb60cbfe3683166\n\n#include \"fileio/driver.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\nnamespace system\n{\n\nclass driver_t : public ::crystax::fileio::driver_t\n{\nprivate:\n    driver_t();\n    ~driver_t();\n\npublic:\n    static driver_t *instance();\n\n    const char *name() const {return \"SYSTEM\";}\n    const char *info() const {return \"ANDROID\";}\n\n    int    chdir(const char *path);\n    int    chown(const char *path, uid_t uid, gid_t gid);\n    int    chroot(const char *path);\n    int    close(int fd);\n    int    closedir(DIR *dirp);\n    int    dirfd(DIR *dirp);\n    int    dup(int fd);\n    int    dup2(int fd, int fd2);\n    int    fchown(int fd, uid_t uid, gid_t gid);\n    int    fchdir(int fd);\n    int    fcntl(int fd, int command, va_list &vl);\n    int    fdatasync(int fd);\n    DIR *  fdopendir(int fd);\n    int    flock(int fd, int operation);\n    int    fstat(int fd, struct stat *st);\n    int    fsync(int fd);\n    int    ftruncate(int fd, off_t offset);\n    char * getcwd(char *buf, size_t size);\n    int    getdents(unsigned int fd, struct dirent *entry, unsigned int count);\n    int    ioctl(int fd, int request, va_list &vl);\n    int    lchown(const char *path, uid_t uid, gid_t gid);\n    int    link(const char *src, const char *dst);\n    off_t  lseek(int fd, off_t offset, int whence);\n    loff_t lseek64(int fd, loff_t offset, int whence);\n    int    lstat(const char *path, struct stat *st);\n    int    mkdir(const char *path, mode_t mode);\n    int    open(const char *path, int oflag, va_list &vl);\n    DIR *  opendir(const char *dirpath);\n    ssize_t pread(int fd, void *buf, size_t count, off_t offset);\n    ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);\n    ssize_t read(int fd, void *buf, size_t count);\n    int    readv(int fd, const struct iovec *iov, int count);\n    struct dirent *readdir(DIR *dirp);\n    int    readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);\n    int    readlink(const char *path, char *buf, size_t bufsize);\n    int    remove(const char *path);\n    int    rename(const char *oldpath, const char *newpath);\n    void   rewinddir(DIR *dirp);\n    int    rmdir(const char *path);\n    int    scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n        int (*compar)(const struct dirent **, const struct dirent **));\n    void   seekdir(DIR *dirp, long offset);\n    int    select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv);\n    int    stat(const char *path, struct stat *st);\n    int    symlink(const char *src, const char *dst);\n    long   telldir(DIR *dirp);\n    int    unlink(const char *path);\n    ssize_t write(int fd, const void *buf, size_t count);\n    int    writev(int fd, const struct iovec *iov, int count);\n};\n\n} // namespace system\n} // namespace fileio\n} // namespace crystax\n\n#endif // _CRYSTAX_FILEIO_SYSTEM_DRIVER_HPP_8c3ea337310344549cb60cbfe3683166\n"
  },
  {
    "path": "sources/crystax/vfs/system/sdriver.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"system/driver.hpp\"\n\n#include <new>\n\n#ifdef MODULE_INIT\n#undef MODULE_INIT\n#endif\n#define MODULE_INIT \\\n    if (!::crystax::fileio::system::init()) \\\n        ::abort()\n\nnamespace crystax\n{\n\nnamespace fileio\n{\nnamespace system\n{\n\nbool volatile init_flag = false;\npthread_mutex_t init_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;\n\ntypedef int (*func_accept_t)(int sockfd, struct sockaddr *addr, socklen_t *addrlen);\ntypedef int (*func_access_t)(const char *path, int mode);\ntypedef int (*func_bind_t)(int sockfd, const struct sockaddr *addr, socklen_t addrlen);\ntypedef int (*func_chdir_t)(const char *path);\ntypedef int (*func_chown_t)(const char *path, uid_t uid, gid_t gid);\ntypedef int (*func_chroot_t)(const char *path);\ntypedef int (*func_close_t)(int fd);\ntypedef int (*func_closedir_t)(DIR *dirp);\ntypedef int (*func_connect_t)(int sockfd, const struct sockaddr *addr, socklen_t addrlen);\ntypedef int (*func_dirfd_t)(DIR *dirp);\ntypedef int (*func_dup2_t)(int fd, int fd2);\ntypedef int (*func_dup_t)(int fd);\ntypedef int (*func_fchdir_t)(int fd);\ntypedef int (*func_fchown_t)(int fd, uid_t uid, gid_t gid);\ntypedef int (*func_fcntl_t)(int fd, int command, ...);\ntypedef int (*func_fdatasync_t)(int fd);\ntypedef DIR *(*func_fdopendir_t)(int fd);\ntypedef int (*func_flock_t)(int fd, int operation);\ntypedef int (*func_fstat_t)(int filedes, struct stat *buf);\ntypedef int (*func_fsync_t)(int fd);\ntypedef int (*func_ftruncate_t)(int fd, off_t offset);\ntypedef char *(*func_getcwd_t)(char *buf, size_t size);\ntypedef int (*func_getdents_t)(unsigned int, struct dirent *, unsigned int);\ntypedef int (*func_getpwnam_r_t)(const char*, struct passwd*, char*, size_t, struct passwd**);\ntypedef int (*func_getpwuid_r_t)(uid_t, struct passwd*, char*, size_t, struct passwd**);\ntypedef int (*func_getsockname_t)(int sockfd, struct sockaddr *addr, socklen_t *addrlen);\ntypedef int (*func_getsockopt_t)(int sockfd, int level, int optname, void *optval, socklen_t *optlen);\ntypedef int (*func_ioctl_t)(int fd, int request, ...);\ntypedef int (*func_lchown_t)(const char *path, uid_t uid, gid_t gid);\ntypedef int (*func_link_t)(const char *src, const char *dst);\ntypedef int (*func_listen_t)(int sockfd, int backlog);\ntypedef off_t (*func_lseek_t)(int fd, off_t offset, int whence);\ntypedef loff_t (*func_lseek64_t)(int fd, loff_t offset, int whence);\ntypedef int (*func_lstat_t)(const char *path, struct stat *buf);\ntypedef int (*func_mkdir_t)(const char *path, mode_t mode);\ntypedef int (*func_mmap_t)(void *addr, size_t length, int prot, int flags, int fd, off_t offset);\ntypedef int (*func_mount_t)(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data);\ntypedef int (*func_open_t)(const char *path, int oflag, ...);\ntypedef DIR *(*func_opendir_t)(const char *dirpath);\ntypedef int (*func_pipe_t)(int pipefd[2]);\ntypedef ssize_t (*func_pread_t)(int fd, void *buf, size_t count, off_t offset);\ntypedef ssize_t (*func_pwrite_t)(int fd, const void *buf, size_t count, off_t offset);\ntypedef int (*func_pthread_create_t)(pthread_t *pth, pthread_attr_t const *pattr, void * (*func)(void *), void *arg);\ntypedef ssize_t (*func_read_t)(int fd, void *buf, size_t count);\ntypedef int (*func_readv_t)(int fd, const struct iovec *iov, int count);\ntypedef struct dirent *(*func_readdir_t)(DIR *dirp);\ntypedef int (*func_readdir_r_t)(DIR *dirp, struct dirent *entry, struct dirent **result);\ntypedef int (*func_readlink_t)(const char *path, char *buf, size_t bufsize);\ntypedef ssize_t (*func_recv_t)(int sockfd, void *buf, size_t len, unsigned int flags);\ntypedef ssize_t (*func_recvfrom_t)(int sockfd, void *buf, size_t len, unsigned int flags,\n    const struct sockaddr *addr, socklen_t *addrlen);\ntypedef int (*func_recvmsg_t)(int sockfd, struct msghdr *msg, unsigned int flags);\ntypedef int (*func_remove_t)(const char *path);\ntypedef int (*func_rename_t)(const char *oldpath, const char *newpath);\ntypedef void (*func_rewinddir_t)(DIR *dirp);\ntypedef int (*func_rmdir_t)(const char *path);\ntypedef int (*func_scandir_t)(const char *dir, struct dirent ***namelist,\n    int (*filter)(const struct dirent *),\n    int (*compar)(const struct dirent **, const struct dirent **));\ntypedef void (*func_seekdir_t)(DIR *dirp, long offset);\ntypedef int (*func_select_t)(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv);\ntypedef ssize_t (*func_send_t)(int sockfd, const void *buf, size_t len, unsigned int flags);\ntypedef int (*func_sendmsg_t)(int sockfd, const struct msghdr *msg, unsigned int flags);\ntypedef ssize_t (*func_sendto_t)(int sockfd, const void *buf, size_t len, int flags,\n    const struct sockaddr *addr, socklen_t addrlen);\ntypedef int (*func_setsockopt_t)(int sockfd, int level, int optname, const void *optval, socklen_t optlen);\ntypedef int (*func_shutdown_t)(int sockfd, int how);\ntypedef int (*func_socket_t)(int domain, int type, int protocol);\ntypedef int (*func_stat_t)(const char *path, struct stat *buf);\ntypedef int (*func_symlink_t)(const char *src, const char *dst);\ntypedef long (*func_telldir_t)(DIR *dirp);\ntypedef int (*func_umount_t)(const char *target);\ntypedef int (*func_umount2_t)(const char *target, int flags);\ntypedef int (*func_unlink_t)(const char *path);\ntypedef ssize_t (*func_write_t)(int fd, const void *buf, size_t count);\ntypedef int (*func_writev_t)(int fd, const struct iovec *iov, int count);\n\nfunc_accept_t func_accept = NULL;\nfunc_access_t func_access = NULL;\nfunc_bind_t func_bind = NULL;\nfunc_chdir_t func_chdir = NULL;\nfunc_chown_t func_chown = NULL;\nfunc_chroot_t func_chroot = NULL;\nfunc_close_t func_close = NULL;\nfunc_closedir_t func_closedir = NULL;\nfunc_connect_t func_connect = NULL;\nfunc_dirfd_t func_dirfd = NULL;\nfunc_dup2_t func_dup2 = NULL;\nfunc_dup_t func_dup = NULL;\nfunc_fchdir_t func_fchdir = NULL;\nfunc_fchown_t func_fchown = NULL;\nfunc_fcntl_t func_fcntl = NULL;\nfunc_fdatasync_t func_fdatasync = NULL;\nfunc_fdopendir_t func_fdopendir = NULL;\nfunc_flock_t func_flock = NULL;\nfunc_fstat_t func_fstat = NULL;\nfunc_fsync_t func_fsync = NULL;\nfunc_ftruncate_t func_ftruncate = NULL;\nfunc_getcwd_t func_getcwd = NULL;\nfunc_getdents_t func_getdents = NULL;\nfunc_getpwnam_r_t func_getpwnam_r = NULL;\nfunc_getpwuid_r_t func_getpwuid_r = NULL;\nfunc_getsockname_t func_getsockname = NULL;\nfunc_getsockopt_t func_getsockopt = NULL;\nfunc_ioctl_t func_ioctl = NULL;\nfunc_lchown_t func_lchown = NULL;\nfunc_link_t func_link = NULL;\nfunc_listen_t func_listen = NULL;\nfunc_lseek_t func_lseek = NULL;\nfunc_lseek64_t func_lseek64 = NULL;\nfunc_lstat_t func_lstat = NULL;\nfunc_mkdir_t func_mkdir = NULL;\nfunc_mmap_t func_mmap = NULL;\nfunc_mount_t func_mount = NULL;\nfunc_open_t func_open = NULL;\nfunc_opendir_t func_opendir = NULL;\nfunc_pipe_t func_pipe = NULL;\nfunc_pread_t func_pread = NULL;\nfunc_pwrite_t func_pwrite = NULL;\nfunc_pthread_create_t func_pthread_create = NULL;\nfunc_read_t func_read = NULL;\nfunc_readv_t func_readv = NULL;\nfunc_readdir_r_t func_readdir_r = NULL;\nfunc_readdir_t func_readdir = NULL;\nfunc_readlink_t func_readlink = NULL;\nfunc_recv_t func_recv = NULL;\nfunc_recvfrom_t func_recvfrom = NULL;\nfunc_recvmsg_t func_recvmsg = NULL;\nfunc_remove_t func_remove = NULL;\nfunc_rename_t func_rename = NULL;\nfunc_rewinddir_t func_rewinddir = NULL;\nfunc_rmdir_t func_rmdir = NULL;\nfunc_scandir_t func_scandir = NULL;\nfunc_seekdir_t func_seekdir = NULL;\nfunc_select_t func_select = NULL;\nfunc_send_t func_send = NULL;\nfunc_sendmsg_t func_sendmsg = NULL;\nfunc_sendto_t func_sendto = NULL;\nfunc_setsockopt_t func_setsockopt = NULL;\nfunc_shutdown_t func_shutdown = NULL;\nfunc_socket_t func_socket = NULL;\nfunc_stat_t func_stat = NULL;\nfunc_symlink_t func_symlink = NULL;\nfunc_telldir_t func_telldir = NULL;\nfunc_unlink_t func_unlink = NULL;\nfunc_umount_t func_umount = NULL;\nfunc_umount2_t func_umount2 = NULL;\nfunc_write_t func_write = NULL;\nfunc_writev_t func_writev = NULL;\n\nCRYSTAX_LOCAL\nbool init_impl()\n{\n    TRACE;\n\n    void *pc = ::dlopen(\"/system/lib/libc.so\", RTLD_LAZY);\n    TRACE;\n    if (pc == NULL)\n    {\n        DBG(\"dlopen() returned NULL\");\n        return false;\n    }\n\n#define CRYSTAX_LOAD_SYMBOL(x) \\\n    TRACE; \\\n    func_ ## x = (func_ ## x ## _t)dlsym(pc, #x); \\\n    if (func_ ## x == NULL) \\\n    { \\\n        DBG(\"dlsym(\\\"\" #x \"\\\") returned NULL\"); \\\n        return false; \\\n    }\n\n    CRYSTAX_LOAD_SYMBOL(accept);\n    CRYSTAX_LOAD_SYMBOL(access);\n    CRYSTAX_LOAD_SYMBOL(bind);\n    CRYSTAX_LOAD_SYMBOL(chdir);\n    CRYSTAX_LOAD_SYMBOL(chown);\n    CRYSTAX_LOAD_SYMBOL(chroot);\n    CRYSTAX_LOAD_SYMBOL(close);\n    CRYSTAX_LOAD_SYMBOL(closedir);\n    CRYSTAX_LOAD_SYMBOL(connect);\n    CRYSTAX_LOAD_SYMBOL(dirfd);\n    CRYSTAX_LOAD_SYMBOL(dup);\n    CRYSTAX_LOAD_SYMBOL(dup2);\n    CRYSTAX_LOAD_SYMBOL(fchdir);\n    CRYSTAX_LOAD_SYMBOL(fchown);\n    CRYSTAX_LOAD_SYMBOL(fcntl);\n    CRYSTAX_LOAD_SYMBOL(fdopendir);\n    CRYSTAX_LOAD_SYMBOL(flock);\n    CRYSTAX_LOAD_SYMBOL(fstat);\n    CRYSTAX_LOAD_SYMBOL(fsync);\n    CRYSTAX_LOAD_SYMBOL(ftruncate);\n    CRYSTAX_LOAD_SYMBOL(getcwd);\n    CRYSTAX_LOAD_SYMBOL(getdents);\n    CRYSTAX_LOAD_SYMBOL(getsockname);\n    CRYSTAX_LOAD_SYMBOL(getsockopt);\n    CRYSTAX_LOAD_SYMBOL(ioctl);\n    CRYSTAX_LOAD_SYMBOL(lchown);\n    CRYSTAX_LOAD_SYMBOL(link);\n    CRYSTAX_LOAD_SYMBOL(listen);\n    CRYSTAX_LOAD_SYMBOL(lseek);\n    CRYSTAX_LOAD_SYMBOL(lseek64);\n    CRYSTAX_LOAD_SYMBOL(lstat);\n    CRYSTAX_LOAD_SYMBOL(mkdir);\n    CRYSTAX_LOAD_SYMBOL(mmap);\n    CRYSTAX_LOAD_SYMBOL(mount);\n    CRYSTAX_LOAD_SYMBOL(open);\n    CRYSTAX_LOAD_SYMBOL(opendir);\n    CRYSTAX_LOAD_SYMBOL(pipe);\n    CRYSTAX_LOAD_SYMBOL(pread);\n    CRYSTAX_LOAD_SYMBOL(pwrite);\n    CRYSTAX_LOAD_SYMBOL(pthread_create);\n    CRYSTAX_LOAD_SYMBOL(read);\n    CRYSTAX_LOAD_SYMBOL(readv);\n    CRYSTAX_LOAD_SYMBOL(readdir);\n    CRYSTAX_LOAD_SYMBOL(readdir_r);\n    CRYSTAX_LOAD_SYMBOL(readlink);\n    CRYSTAX_LOAD_SYMBOL(recv);\n    CRYSTAX_LOAD_SYMBOL(recvfrom);\n    CRYSTAX_LOAD_SYMBOL(recvmsg);\n    CRYSTAX_LOAD_SYMBOL(remove);\n    CRYSTAX_LOAD_SYMBOL(rename);\n    CRYSTAX_LOAD_SYMBOL(rewinddir);\n    CRYSTAX_LOAD_SYMBOL(rmdir);\n    CRYSTAX_LOAD_SYMBOL(scandir);\n    CRYSTAX_LOAD_SYMBOL(select);\n    CRYSTAX_LOAD_SYMBOL(send);\n    CRYSTAX_LOAD_SYMBOL(sendmsg);\n    CRYSTAX_LOAD_SYMBOL(sendto);\n    CRYSTAX_LOAD_SYMBOL(setsockopt);\n    CRYSTAX_LOAD_SYMBOL(shutdown);\n    CRYSTAX_LOAD_SYMBOL(socket);\n    CRYSTAX_LOAD_SYMBOL(stat);\n    CRYSTAX_LOAD_SYMBOL(symlink);\n    CRYSTAX_LOAD_SYMBOL(umount);\n    CRYSTAX_LOAD_SYMBOL(umount2);\n    CRYSTAX_LOAD_SYMBOL(unlink);\n    CRYSTAX_LOAD_SYMBOL(write);\n    CRYSTAX_LOAD_SYMBOL(writev);\n\n    TRACE;\n    func_fdatasync = (func_fdatasync_t)dlsym(pc, \"fdatasync\");\n    /* Android 2.1 have no fdatasync call. Use fsync instead */\n    if (func_fdatasync == NULL)\n        func_fdatasync = func_fsync;\n\n    TRACE;\n    /* Don't check return value; there is no such functions in Bionic currently,\n       but maybe in future they'll appear, so then we'll use native implementations\n    */\n    func_seekdir = (func_seekdir_t)dlsym(pc, \"seekdir\");\n    func_telldir = (func_telldir_t)dlsym(pc, \"telldir\");\n\n    func_getpwnam_r = (func_getpwnam_r_t)dlsym(pc, \"getpwnam_r\");\n    func_getpwuid_r = (func_getpwuid_r_t)dlsym(pc, \"getpwuid_r\");\n\n#undef CRYSTAX_LOAD_SYMBOL\n    TRACE;\n    dlclose(pc);\n\n    TRACE;\n    return true;\n}\n\nCRYSTAX_LOCAL\nbool init()\n{\n    if (!init_flag)\n    {\n        scope_lock_t lock(init_mutex);\n\n        if (!init_flag)\n        {\n            if (!init_impl())\n                return false;\n            init_flag = true;\n        }\n    }\n    return true;\n}\n\nCRYSTAX_LOCAL\ndriver_t *driver_t::instance()\n{\n    static driver_t volatile *obj = NULL;\n    static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;\n\n    if (!obj)\n    {\n        scope_lock_t guard(lock);\n        if (!obj)\n        {\n            // Allocate memory and ensure it's aligned to int bounds\n            const size_t align = sizeof(int);\n            uint8_t *buf = static_cast<uint8_t *>(::malloc(sizeof(driver_t) + align));\n            unsigned v = reinterpret_cast<uint64_t>(buf) % align;\n            if (v != 0)\n                buf += align - v;\n            // Then, create object in-place on top of allocated memory\n            obj = new (buf) driver_t();\n        }\n    }\n    return const_cast<driver_t *>(obj);\n}\n\nCRYSTAX_LOCAL\ndriver_t::driver_t()\n    :fileio::driver_t(\"/\", NULL)\n{\n    TRACE;\n}\n\nCRYSTAX_LOCAL\ndriver_t::~driver_t()\n{\n    TRACE;\n}\n\nCRYSTAX_LOCAL\nint driver_t::chdir(const char *path)\n{\n    return system_chdir(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::chown(const char *path, uid_t uid, gid_t gid)\n{\n    return system_chown(path, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint driver_t::chroot(const char *path)\n{\n    return system_chroot(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::close(int fd)\n{\n    return system_close(fd);\n}\n\nCRYSTAX_LOCAL\nint driver_t::closedir(DIR *dirp)\n{\n    return system_closedir(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::dirfd(DIR *dirp)\n{\n    return system_dirfd(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::dup(int fd)\n{\n    return system_dup(fd);\n}\n\nCRYSTAX_LOCAL\nint driver_t::dup2(int fd, int fd2)\n{\n    return system_dup2(fd, fd2);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fchdir(int fd)\n{\n    return system_fchdir(fd);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fchown(int fd, uid_t uid, gid_t gid)\n{\n    return system_fchown(fd, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fcntl(int fd, int command, va_list &vl)\n{\n    return system_fcntl_v(fd, command, vl);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fdatasync(int fd)\n{\n    return system_fdatasync(fd);\n}\n\nCRYSTAX_LOCAL\nDIR *driver_t::fdopendir(int fd)\n{\n    return system_fdopendir(fd);\n}\n\nCRYSTAX_LOCAL\nint driver_t::flock(int fd, int operation)\n{\n    return system_flock(fd, operation);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fstat(int fd, struct stat *st)\n{\n    return system_fstat(fd, st);\n}\n\nCRYSTAX_LOCAL\nint driver_t::fsync(int fd)\n{\n    return system_fsync(fd);\n}\n\nCRYSTAX_LOCAL\nint driver_t::ftruncate(int fd, off_t offset)\n{\n    return system_ftruncate(fd, offset);\n}\n\nCRYSTAX_LOCAL\nchar *driver_t::getcwd(char *buf, size_t size)\n{\n    return system_getcwd(buf, size);\n}\n\nCRYSTAX_LOCAL\nint driver_t::getdents(unsigned int fd, struct dirent *entry, unsigned int count)\n{\n    return system_getdents(fd, entry, count);\n}\n\nCRYSTAX_LOCAL\nint driver_t::ioctl(int fd, int request, va_list &vl)\n{\n    return system_ioctl_v(fd, request, vl);\n}\n\nCRYSTAX_LOCAL\nint driver_t::lchown(const char *path, uid_t uid, gid_t gid)\n{\n    return system_lchown(path, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint driver_t::link(const char *src, const char *dst)\n{\n    return system_link(src, dst);\n}\n\nCRYSTAX_LOCAL\noff_t driver_t::lseek(int fd, off_t offset, int whence)\n{\n    return system_lseek(fd, offset, whence);\n}\n\nCRYSTAX_LOCAL\nloff_t driver_t::lseek64(int fd, loff_t offset, int whence)\n{\n    return system_lseek64(fd, offset, whence);\n}\n\nCRYSTAX_LOCAL\nint driver_t::lstat(const char *path, struct stat *st)\n{\n    return system_lstat(path, st);\n}\n\nCRYSTAX_LOCAL\nint driver_t::mkdir(const char *path, mode_t mode)\n{\n    return system_mkdir(path, mode);\n}\n\nCRYSTAX_LOCAL\nint driver_t::open(const char *path, int oflag, va_list &vl)\n{\n    return system_open_v(path, oflag, vl);\n}\n\nCRYSTAX_LOCAL\nDIR *driver_t::opendir(const char *dirpath)\n{\n    return system_opendir(dirpath);\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::pread(int fd, void *buf, size_t count, off_t offset)\n{\n    return system_pread(fd, buf, count, offset);\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::pwrite(int fd, const void *buf, size_t count, off_t offset)\n{\n    return system_pwrite(fd, buf, count, offset);\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::read(int fd, void *buf, size_t count)\n{\n    return system_read(fd, buf, count);\n}\n\nCRYSTAX_LOCAL\nint driver_t::readv(int fd, const struct iovec *iov, int count)\n{\n    return system_readv(fd, iov, count);\n}\n\nCRYSTAX_LOCAL\nstruct dirent *driver_t::readdir(DIR *dirp)\n{\n    return system_readdir(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)\n{\n    return system_readdir_r(dirp, entry, result);\n}\n\nCRYSTAX_LOCAL\nint driver_t::readlink(const char *path, char *buf, size_t bufsize)\n{\n    return system_readlink(path, buf, bufsize);\n}\n\nCRYSTAX_LOCAL\nint driver_t::remove(const char *path)\n{\n    return system_remove(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::rename(const char *oldpath, const char *newpath)\n{\n    return system_rename(oldpath, newpath);\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::rewinddir(DIR *dirp)\n{\n    return system_rewinddir(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::rmdir(const char *path)\n{\n    return system_rmdir(path);\n}\n\nCRYSTAX_LOCAL\nint driver_t::scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n    int (*compar)(const struct dirent **, const struct dirent **))\n{\n    return system_scandir(dir, namelist, filter, compar);\n}\n\nCRYSTAX_LOCAL\nvoid driver_t::seekdir(DIR *dirp, long offset)\n{\n    system_seekdir(dirp, offset);\n}\n\nCRYSTAX_LOCAL\nint driver_t::select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv)\n{\n    return system_select(maxfd, rfd, wfd, efd, tv);\n}\n\nCRYSTAX_LOCAL\nint driver_t::stat(const char *path, struct stat *st)\n{\n    return system_stat(path, st);\n}\n\nCRYSTAX_LOCAL\nint driver_t::symlink(const char *src, const char *dst)\n{\n    return system_symlink(src, dst);\n}\n\nCRYSTAX_LOCAL\nlong driver_t::telldir(DIR *dirp)\n{\n    return system_telldir(dirp);\n}\n\nCRYSTAX_LOCAL\nint driver_t::unlink(const char *path)\n{\n    return system_unlink(path);\n}\n\nCRYSTAX_LOCAL\nssize_t driver_t::write(int fd, const void *buf, size_t count)\n{\n    return system_write(fd, buf, count);\n}\n\nCRYSTAX_LOCAL\nint driver_t::writev(int fd, const struct iovec *iov, int count)\n{\n    return system_writev(fd, iov, count);\n}\n\n} // namespace system\n} // namespace fileio\n\nCRYSTAX_LOCAL\nint system_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_accept(sockfd, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_access(const char *path, int mode)\n{\n    MODULE_INIT;\n    return fileio::system::func_access(path, mode);\n}\n\nCRYSTAX_LOCAL\nint system_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_bind(sockfd, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_chdir(const char *path)\n{\n    MODULE_INIT;\n    return fileio::system::func_chdir(path);\n}\n\nCRYSTAX_LOCAL\nint system_chown(const char *path, uid_t uid, gid_t gid)\n{\n    MODULE_INIT;\n    return fileio::system::func_chown(path, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint system_chroot(const char *path)\n{\n    MODULE_INIT;\n    return fileio::system::func_chroot(path);\n}\n\nCRYSTAX_LOCAL\nint system_close(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_close(fd);\n}\n\nCRYSTAX_LOCAL\nint system_closedir(DIR *dirp)\n{\n    MODULE_INIT;\n    return fileio::system::func_closedir(dirp);\n}\n\nCRYSTAX_LOCAL\nint system_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_connect(sockfd, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_dirfd(DIR *dirp)\n{\n    MODULE_INIT;\n    return fileio::system::func_dirfd(dirp);\n}\n\nCRYSTAX_LOCAL\nint system_dup(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_dup(fd);\n}\n\nCRYSTAX_LOCAL\nint system_dup2(int fd, int fd2)\n{\n    MODULE_INIT;\n    return fileio::system::func_dup2(fd, fd2);\n}\n\nCRYSTAX_LOCAL\nint system_fchdir(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_fchdir(fd);\n}\n\nCRYSTAX_LOCAL\nint system_fchown(int fd, uid_t uid, gid_t gid)\n{\n    MODULE_INIT;\n    return fileio::system::func_fchown(fd, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint system_fcntl(int fd, int command, ...)\n{\n    MODULE_INIT;\n    va_list vl;\n    va_start(vl, command);\n    int ret = system_fcntl_v(fd, command, vl);\n    va_end(vl);\n    return ret;\n}\n\nCRYSTAX_LOCAL\nint system_fcntl_v(int fd, int command, va_list &vl)\n{\n    MODULE_INIT;\n    void *arg = va_arg(vl, void *);\n    return fileio::system::func_fcntl(fd, command, arg);\n}\n\nCRYSTAX_LOCAL\nint system_fdatasync(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_fdatasync(fd);\n}\n\nCRYSTAX_LOCAL\nDIR *system_fdopendir(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_fdopendir(fd);\n}\n\nCRYSTAX_LOCAL\nint system_flock(int fd, int operation)\n{\n    MODULE_INIT;\n    return fileio::system::func_flock(fd, operation);\n}\n\nCRYSTAX_LOCAL\nint system_fstat(int fd, struct stat *st)\n{\n    MODULE_INIT;\n    return fileio::system::func_fstat(fd, st);\n}\n\nCRYSTAX_LOCAL\nint system_fsync(int fd)\n{\n    MODULE_INIT;\n    return fileio::system::func_fsync(fd);\n}\n\nCRYSTAX_LOCAL\nint system_ftruncate(int fd, off_t offset)\n{\n    MODULE_INIT;\n    return fileio::system::func_ftruncate(fd, offset);\n}\n\nCRYSTAX_LOCAL\nchar *system_getcwd(char *buf, size_t size)\n{\n    MODULE_INIT;\n    return fileio::system::func_getcwd(buf, size);\n}\n\nCRYSTAX_LOCAL\nint system_getdents(unsigned int fd, struct dirent *entry, unsigned int count)\n{\n    MODULE_INIT;\n    return fileio::system::func_getdents(fd, entry, count);\n}\n\nCRYSTAX_LOCAL\nint system_getpwnam_r(const char *name, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result)\n{\n    MODULE_INIT;\n    if (!fileio::system::func_getpwnam_r)\n    {\n        errno = ENOENT;\n        return -1;\n    }\n    return fileio::system::func_getpwnam_r(name, pwd, buf, buflen, result);\n}\n\nCRYSTAX_LOCAL\nint system_getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result)\n{\n    MODULE_INIT;\n    if (!fileio::system::func_getpwuid_r)\n    {\n        errno = ENOENT;\n        return -1;\n    }\n    return fileio::system::func_getpwuid_r(uid, pwd, buf, buflen, result);\n}\n\nCRYSTAX_LOCAL\nint system_getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_getsockname(sockfd, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_getsockopt(sockfd, level, optname, optval, optlen);\n}\n\nCRYSTAX_LOCAL\nint system_ioctl(int fd, int request, ...)\n{\n    MODULE_INIT;\n    va_list vl;\n    va_start(vl, request);\n    int ret = system_ioctl_v(fd, request, vl);\n    va_end(vl);\n    return ret;\n}\n\nCRYSTAX_LOCAL\nint system_ioctl_v(int fd, int request, va_list &vl)\n{\n    MODULE_INIT;\n    void *arg = va_arg(vl, void *);\n    return fileio::system::func_ioctl(fd, request, arg);\n}\n\nCRYSTAX_LOCAL\nint system_lchown(const char *path, uid_t uid, gid_t gid)\n{\n    MODULE_INIT;\n    return fileio::system::func_lchown(path, uid, gid);\n}\n\nCRYSTAX_LOCAL\nint system_link(const char *src, const char *dst)\n{\n    MODULE_INIT;\n    return fileio::system::func_link(src, dst);\n}\n\nCRYSTAX_LOCAL\nint system_listen(int sockfd, int backlog)\n{\n    MODULE_INIT;\n    return fileio::system::func_listen(sockfd, backlog);\n}\n\nCRYSTAX_LOCAL\noff_t system_lseek(int fd, off_t offset, int whence)\n{\n    MODULE_INIT;\n    return fileio::system::func_lseek(fd, offset, whence);\n}\n\nCRYSTAX_LOCAL\nloff_t system_lseek64(int fd, loff_t offset, int whence)\n{\n    MODULE_INIT;\n    return fileio::system::func_lseek64(fd, offset, whence);\n}\n\nCRYSTAX_LOCAL\nint system_lstat(const char *path, struct stat *st)\n{\n    MODULE_INIT;\n    return fileio::system::func_lstat(path, st);\n}\n\nCRYSTAX_LOCAL\nint system_mkdir(const char *path, mode_t mode)\n{\n    MODULE_INIT;\n    return fileio::system::func_mkdir(path, mode);\n}\n\nCRYSTAX_LOCAL\nint system_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)\n{\n    MODULE_INIT;\n    return fileio::system::func_mmap(addr, length, prot, flags, fd, offset);\n}\n\nCRYSTAX_LOCAL\nint system_mount(const char *source, const char *target, const char *fstype,\n    unsigned long flags, const void *data)\n{\n    MODULE_INIT;\n    return fileio::system::func_mount(source, target, fstype, flags, data);\n}\n\nCRYSTAX_LOCAL\nint system_open(const char *path, int oflag, ...)\n{\n    MODULE_INIT;\n    va_list vl;\n    va_start(vl, oflag);\n    int ret = system_open_v(path, oflag, vl);\n    va_end(vl);\n    return ret;\n}\n\nCRYSTAX_LOCAL\nint system_open_v(const char *path, int oflag, va_list &vl)\n{\n    MODULE_INIT;\n    if (oflag & O_CREAT)\n    {\n        int mode = va_arg(vl, int);\n        return fileio::system::func_open(path, oflag, mode);\n    }\n\n    return fileio::system::func_open(path, oflag);\n}\n\nCRYSTAX_LOCAL\nDIR *system_opendir(const char *dirpath)\n{\n    MODULE_INIT;\n    return fileio::system::func_opendir(dirpath);\n}\n\nCRYSTAX_LOCAL\nint system_pipe(int pipefd[2])\n{\n    MODULE_INIT;\n    return fileio::system::func_pipe(pipefd);\n}\n\nCRYSTAX_LOCAL\nssize_t system_pread(int fd, void *buf, size_t count, off_t offset)\n{\n    MODULE_INIT;\n    return fileio::system::func_pread(fd, buf, count, offset);\n}\n\nCRYSTAX_LOCAL\nssize_t system_pwrite(int fd, const void *buf, size_t count, off_t offset)\n{\n    MODULE_INIT;\n    return fileio::system::func_pwrite(fd, buf, count, offset);\n}\n\nCRYSTAX_LOCAL\nint system_pthread_create(pthread_t *pth, pthread_attr_t const *pattr, void * (*func)(void *), void *arg)\n{\n    MODULE_INIT;\n    return fileio::system::func_pthread_create(pth, pattr, func, arg);\n}\n\nCRYSTAX_LOCAL\nssize_t system_read(int fd, void *buf, size_t count)\n{\n    MODULE_INIT;\n    return fileio::system::func_read(fd, buf, count);\n}\n\nCRYSTAX_LOCAL\nint system_readv(int fd, const struct iovec *iov, int count)\n{\n    MODULE_INIT;\n    return fileio::system::func_readv(fd, iov, count);\n}\n\nCRYSTAX_LOCAL\nstruct dirent *system_readdir(DIR *dirp)\n{\n    MODULE_INIT;\n    return fileio::system::func_readdir(dirp);\n}\n\nCRYSTAX_LOCAL\nint system_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)\n{\n    MODULE_INIT;\n    return fileio::system::func_readdir_r(dirp, entry, result);\n}\n\nCRYSTAX_LOCAL\nint system_readlink(const char *path, char *buf, size_t bufsize)\n{\n    MODULE_INIT;\n    return fileio::system::func_readlink(path, buf, bufsize);\n}\n\nCRYSTAX_LOCAL\nssize_t system_recv(int sockfd, void *buf, size_t len, unsigned int flags)\n{\n    MODULE_INIT;\n    return fileio::system::func_recv(sockfd, buf, len, flags);\n}\n\nCRYSTAX_LOCAL\nssize_t system_recvfrom(int sockfd, void *buf, size_t len, unsigned int flags,\n    const struct sockaddr *addr, socklen_t *addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_recvfrom(sockfd, buf, len, flags, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_recvmsg(int sockfd, struct msghdr *msg, unsigned int flags)\n{\n    MODULE_INIT;\n    return fileio::system::func_recvmsg(sockfd, msg, flags);\n}\n\nCRYSTAX_LOCAL\nint system_remove(const char *path)\n{\n    MODULE_INIT;\n    return fileio::system::func_remove(path);\n}\n\nCRYSTAX_LOCAL\nint system_rename(const char *oldpath, const char *newpath)\n{\n    MODULE_INIT;\n    return fileio::system::func_rename(oldpath, newpath);\n}\n\nCRYSTAX_LOCAL\nvoid system_rewinddir(DIR *dirp)\n{\n    MODULE_INIT;\n    return fileio::system::func_rewinddir(dirp);\n}\n\nCRYSTAX_LOCAL\nint system_rmdir(const char *path)\n{\n    MODULE_INIT;\n    return fileio::system::func_rmdir(path);\n}\n\nCRYSTAX_LOCAL\nint system_scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *),\n    int (*compar)(const struct dirent **, const struct dirent **))\n{\n    MODULE_INIT;\n    return fileio::system::func_scandir(dir, namelist, filter, compar);\n}\n\nCRYSTAX_LOCAL\nvoid system_seekdir(DIR *dirp, long offset)\n{\n    MODULE_INIT;\n    if (fileio::system::func_seekdir)\n        fileio::system::func_seekdir(dirp, offset);\n}\n\nCRYSTAX_LOCAL\nint system_select(int maxfd, fd_set *rfd, fd_set *wfd, fd_set *efd, struct timeval *tv)\n{\n    MODULE_INIT;\n    return fileio::system::func_select(maxfd, rfd, wfd, efd, tv);\n}\n\nCRYSTAX_LOCAL\nssize_t system_send(int sockfd, const void *buf, size_t len, unsigned int flags)\n{\n    MODULE_INIT;\n    return fileio::system::func_send(sockfd, buf, len, flags);\n}\n\nCRYSTAX_LOCAL\nint system_sendmsg(int sockfd, const struct msghdr *msg, unsigned int flags)\n{\n    MODULE_INIT;\n    return fileio::system::func_sendmsg(sockfd, msg, flags);\n}\n\nCRYSTAX_LOCAL\nssize_t system_sendto(int sockfd, const void *buf, size_t len, int flags,\n    const struct sockaddr *addr, socklen_t addrlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_sendto(sockfd, buf, len, flags, addr, addrlen);\n}\n\nCRYSTAX_LOCAL\nint system_setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)\n{\n    MODULE_INIT;\n    return fileio::system::func_setsockopt(sockfd, level, optname, optval, optlen);\n}\n\nCRYSTAX_LOCAL\nint system_shutdown(int sockfd, int how)\n{\n    MODULE_INIT;\n    return fileio::system::func_shutdown(sockfd, how);\n}\n\nCRYSTAX_LOCAL\nint system_socket(int domain, int type, int protocol)\n{\n    MODULE_INIT;\n    return fileio::system::func_socket(domain, type, protocol);\n}\n\nCRYSTAX_LOCAL\nint system_stat(const char *path, struct stat *st)\n{\n    MODULE_INIT;\n    return fileio::system::func_stat(path, st);\n}\n\nCRYSTAX_LOCAL\nint system_symlink(const char *src, const char *dst)\n{\n    MODULE_INIT;\n    return fileio::system::func_symlink(src, dst);\n}\n\nCRYSTAX_LOCAL\nlong system_telldir(DIR *dirp)\n{\n    MODULE_INIT;\n    if (!fileio::system::func_telldir)\n    {\n        errno = ENOTSUP;\n        return -1;\n    }\n\n    return fileio::system::func_telldir(dirp);\n}\n\nCRYSTAX_LOCAL\nint system_umount(const char *target)\n{\n    MODULE_INIT;\n    return fileio::system::func_umount(target);\n}\n\nCRYSTAX_LOCAL\nint system_umount2(const char *target, int flags)\n{\n    MODULE_INIT;\n    return fileio::system::func_umount2(target, flags);\n}\n\nCRYSTAX_LOCAL\nint system_unlink(const char *path)\n{\n    MODULE_INIT;\n    return fileio::system::func_unlink(path);\n}\n\nCRYSTAX_LOCAL\nssize_t system_write(int fd, const void *buf, size_t count)\n{\n    MODULE_INIT;\n    return fileio::system::func_write(fd, buf, count);\n}\n\nCRYSTAX_LOCAL\nint system_writev(int fd, const struct iovec *iov, int count)\n{\n    MODULE_INIT;\n    return fileio::system::func_writev(fd, iov, count);\n}\n\n} // namespace crystax\n"
  },
  {
    "path": "sources/crystax/vfs/telldir.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nlong telldir(DIR *dirp)\n{\n    DBG(\"dirp=%p\", dirp);\n\n    DIR *extdirp;\n    driver_t *driver;\n    if (!resolve(dirp, NULL, NULL, &extdirp, &driver))\n        return -1;\n\n    return driver->telldir(extdirp);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nlong telldir(DIR *dirp)\n{\n    return ::crystax::fileio::telldir(dirp);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/unlink.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint unlink(const char *path)\n{\n    DBG(\"path=%s\", path);\n\n    driver_t *driver = find_driver(path);\n    if (!driver)\n        return -1;\n\n    return driver->unlink(path);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint unlink(const char *path)\n{\n    return ::crystax::fileio::unlink(path);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/write.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nssize_t write(int fd, const void *buf, size_t count)\n{\n    DBG(\"fd=%d, buf=%p, count=%lu\", fd, buf, (unsigned long)count);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->write(extfd, buf, count);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nssize_t write(int fd, const void *buf, size_t count)\n{\n    return ::crystax::fileio::write(fd, buf, count);\n}\n"
  },
  {
    "path": "sources/crystax/vfs/writev.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include \"fileio/api.hpp\"\n\nnamespace crystax\n{\nnamespace fileio\n{\n\nCRYSTAX_LOCAL\nint writev(int fd, const struct iovec *iov, int count)\n{\n    DBG(\"fd=%d, iov=%p, count=%lu\", fd, iov, (unsigned long)count);\n\n    int extfd;\n    driver_t *driver;\n    if (!resolve(fd, NULL, &extfd, NULL, &driver))\n        return -1;\n\n    return driver->writev(extfd, iov, count);\n}\n\n} // namespace fileio\n} // namespace crystax\n\nCRYSTAX_GLOBAL\nint writev(int fd, const struct iovec *iov, int count)\n{\n    return ::crystax::fileio::writev(fd, iov, count);\n}\n"
  },
  {
    "path": "sources/cxx-stl/gabi++/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "sources/cxx-stl/gnu-libstdc++/.gitignore",
    "content": "4.9/\n5/\n6/\n"
  },
  {
    "path": "sources/cxx-stl/gnu-libstdc++/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n# Compute the compiler flags to export by the module.\n# This is controlled by the APP_GNUSTL_FORCE_CPP_FEATURES variable.\n# See docs/APPLICATION-MK.html for all details.\n#\n\nifeq (undefined,$(origin APP_GNUSTL_FORCE_CPP_FEATURES))\n# Enable RTTI and exceptions by default\nAPP_GNUSTL_FORCE_CPP_FEATURES := rtti exceptions\nendif\n\ngnustl_exported_cppflags := $(strip \\\n  $(if $(filter exceptions,$(APP_GNUSTL_FORCE_CPP_FEATURES)),-fexceptions)\\\n  $(if $(filter rtti,$(APP_GNUSTL_FORCE_CPP_FEATURES)),-frtti))\n\n# Include path to export\ngnustl_exported_c_includes := \\\n  $(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/include \\\n  $(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/include \\\n  $(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/include/backward\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := gnustl_static\nLOCAL_SRC_FILES := $(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libgnustl_static$(TARGET_LIB_EXTENSION)\n# For armeabi*, choose thumb mode unless LOCAL_ARM_MODE := arm\nifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))\nifneq (arm,$(LOCAL_ARM_MODE))\nLOCAL_SRC_FILES:= $(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/thumb/libgnustl_static$(TARGET_LIB_EXTENSION)\nendif\nendif\nLOCAL_EXPORT_CPPFLAGS := $(gnustl_exported_cppflags)\nLOCAL_EXPORT_C_INCLUDES := $(gnustl_exported_c_includes)\ninclude $(PREBUILT_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := gnustl_shared\nLOCAL_SRC_FILES := $(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libgnustl_shared$(TARGET_SONAME_EXTENSION)\n# For armeabi*, choose thumb mode unless LOCAL_ARM_MODE := arm\nifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))\nifneq (arm,$(LOCAL_ARM_MODE))\nLOCAL_SRC_FILES:= $(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/thumb/libgnustl_shared$(TARGET_SONAME_EXTENSION)\nendif\nendif\nLOCAL_EXPORT_CPPFLAGS := $(gnustl_exported_cppflags)\nLOCAL_EXPORT_C_INCLUDES := $(gnustl_exported_c_includes)\nLOCAL_EXPORT_LDLIBS := $(call host-path,$(LOCAL_PATH)/$(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libsupc++$(TARGET_LIB_EXTENSION))\ninclude $(PREBUILT_SHARED_LIBRARY)\n"
  },
  {
    "path": "sources/cxx-stl/gnu-libstdc++/README",
    "content": "This directory contains the headers and prebuilt binaries for the\nGNU libstdc++-v3 C++ Standard Template Library implementation.\n\nThese are generated from the toolchain sources by build.py in this directory.\n\nTo use it, define APP_STL to 'gnustl_static' in your Application.mk.\nSee docs/CPLUSPLUS-SUPPORT.html for more details.\n\nThis implementation fully supports C++ exceptions and RTTI.\n"
  },
  {
    "path": "sources/cxx-stl/gnu-libstdc++/build-gnu-libstdc++.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014, 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the prebuilt GNU libsupc++ and\n#  libstdc++ binaries from their sources. It requires an NDK installation\n#  that contains valid plaforms files and toolchain binaries.\n#\n\n# include common function and variable definitions\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n\nSTL_DIR=sources/cxx-stl\nGNUSTL_DIR=gnu-libstdc++\n\nPROGRAM_PARAMETERS=\"<src-dir>\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt GNU libsupc++ / libstdc++ binaries for the Android NDK.\n\nThis script is called when packaging a new NDK release. It will simply\nrebuild the GNU libsupc++ and libstdc++ static and shared libraries from\nsources.\n\nThis requires a temporary NDK installation containing platforms and\ntoolchain binaries for all target architectures, as well as the path to\nthe corresponding gcc source tree.\n\nBy default, this will try with the current NDK directory, unless\nyou use the --ndk-dir=<path> option.\n\nThe output will be placed in appropriate sub-directories of\n<ndk>/$GNUSTL_SUBDIR, but you can override this with the --out-dir=<path>\noption.\n\"\n\nGCC_VERSION_LIST=$(spaces_to_commas $DEFAULT_GCC_VERSION_LIST)\nregister_var_option \"--gcc-version-list=<vers>\" GCC_VERSION_LIST \"List of GCC versions\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nOUT_DIR=\nregister_var_option \"--out-dir=<path>\" OUT_DIR \"Specify output directory directly.\"\n\nABIS=$(spaces_to_commas $PREBUILT_ABIS)\nregister_var_option \"--abis=<list>\" ABIS \"Specify list of target ABIs.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nVISIBLE_LIBGNUSTL_STATIC=\nregister_var_option \"--visible-libgnustl-static\" VISIBLE_LIBGNUSTL_STATIC \"Do not use hidden visibility for libgnustl_static.a\"\n\nWITH_DEBUG_INFO=\nregister_var_option \"--with-debug-info\" WITH_DEBUG_INFO \"Build with -g.  STL is still built with optimization but with debug info\"\n\nWITH_LIBSUPPORT=\nregister_var_option \"--with-libsupport\" WITH_LIBSUPPORT \"Build with -landroid_support.\"\n\nregister_jobs_option\nregister_try64_option\n\nregister_try64_option\n\nextract_parameters \"$@\"\n\nGCC_VERSION_LIST=$(commas_to_spaces $GCC_VERSION_LIST)\n\nSRCDIR=$(echo $PARAMETERS | sed 1q)\ncheck_toolchain_src_dir \"$SRCDIR\"\n\nABIS=$(commas_to_spaces $ABIS)\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-gnustl\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\n\nHOST_TAG_LIST=\"$HOST_TAG $HOST_TAG32\"\n\nrm -rf \"$BUILD_DIR\"\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\n# $1: ABI name\n# $2: Build directory\n# $3: \"static\" or \"shared\"\n# $4: GCC version\n# $5: optional \"thumb\"\nbuild_gnustl_for_abi ()\n{\n    local ARCH BINPREFIX SYSROOT GNUSTL_SRCDIR\n    local ABI=$1\n    local BUILDDIR=\"$2\"\n    local LIBTYPE=\"$3\"\n    local GCC_VERSION=\"$4\"\n    local THUMB=\"$5\"\n    local DSTDIR=$NDK_DIR/$GNUSTL_SUBDIR/libs/$ABI/$THUMB\n    local PREBUILT_NDK=$ANDROID_BUILD_TOP/prebuilts/ndk/current\n    local SRC OBJ OBJECTS CFLAGS CXXFLAGS CPPFLAGS\n\n    prepare_target_build $ABI $PLATFORM $NDK_DIR\n    fail_panic \"Could not setup target build.\"\n\n    INSTALLDIR=$BUILDDIR/install-$ABI-$GCC_VERSION/$THUMB\n    BUILDDIR=$BUILDDIR/$LIBTYPE-${ABI}${THUMB}-$GCC_VERSION\n\n    mkdir -p $DSTDIR\n\n    ARCH=$(convert_abi_to_arch $ABI)\n    for TAG in $HOST_TAG_LIST; do\n        BINPREFIX=$ANDROID_BUILD_TOP/prebuilts/ndk/current/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG)\n        if [ -f ${BINPREFIX}gcc ]; then\n            break;\n        fi\n    done\n    GNUSTL_SRCDIR=$SRCDIR/gcc/gcc-$GCC_VERSION/libstdc++-v3\n    # Sanity check\n    if [ ! -d \"$GNUSTL_SRCDIR\" ]; then\n        echo \"ERROR: Not a valid toolchain source tree.\"\n        echo \"Can't find: $GNUSTL_SRCDIR\"\n        exit 1\n    fi\n\n    if [ ! -f \"$GNUSTL_SRCDIR/configure\" ]; then\n        echo \"ERROR: Configure script missing: $GNUSTL_SRCDIR/configure\"\n        exit 1\n    fi\n\n    SYSROOT=$PREBUILT_NDK/$(get_default_platform_sysroot_for_arch $ARCH)\n    LDIR=$SYSROOT\"/usr/\"$(get_default_libdir_for_arch $ARCH)\n    # Sanity check\n    if [ ! -f \"$LDIR/libc.a\" ]; then\n\techo \"ERROR: Empty sysroot! you probably need to run gen-platforms.sh before this script.\"\n\texit 1\n    fi\n    if [ ! -f \"$LDIR/libc.so\" ]; then\n        echo \"ERROR: Sysroot misses shared libraries! you probably need to run gen-platforms.sh\"\n        echo \"*without* the --minimal flag before running this script.\"\n        exit 1\n    fi\n\n    EXTRA_CFLAGS=\"-ffunction-sections -fdata-sections\"\n    EXTRA_LDFLAGS=\n    if [ -n \"$THUMB\" ] ; then\n        EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mthumb\"\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -mthumb\"\n    fi\n\n    case $ARCH in\n        arm)\n            BUILD_HOST=arm-linux-androideabi\n            ;;\n        arm64)\n            BUILD_HOST=aarch64-linux-android\n            ;;\n        x86)\n            BUILD_HOST=i686-linux-android\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mstackrealign\"\n            ;;\n        x86_64)\n            BUILD_HOST=x86_64-linux-android\n            # ToDo: remove the following once all x86-based device call JNI function with\n            #       stack aligned to 16-byte\n            EXTRA_CFLAGS=\"$EXTRA_CFLAGS -mstackrealign\"\n            ;;\n        mips)\n            BUILD_HOST=mipsel-linux-android\n            ;;\n        mips64)\n            BUILD_HOST=mips64el-linux-android\n            ;;\n    esac\n\n    CFLAGS=\"-fPIC $CFLAGS --sysroot=$SYSROOT -fexceptions -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS\"\n    CXXFLAGS=\"-fPIC $CXXFLAGS --sysroot=$SYSROOT -fexceptions -frtti -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS\"\n    CPPFLAGS=\"$CPPFLAGS --sysroot=$SYSROOT\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        CFLAGS=\"$CFLAGS -g\"\n        CXXFLAGS=\"$CXXFLAGS -g\"\n    fi\n    if [ \"$WITH_LIBSUPPORT\" ]; then\n        panic \"Building with WITH_LIBSUPPORT is not supported for Crystax NDK\"\n        CFLAGS=\"$CFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include\"\n        CXXFLAGS=\"$CXXFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include\"\n        EXTRA_LDFLAGS=\"$EXTRA_LDFLAGS -L$NDK_DIR/$SUPPORT_SUBDIR/libs/$ABI -landroid_support\"\n    fi\n    export CFLAGS CXXFLAGS CPPFLAGS\n\n    export CC=${BINPREFIX}gcc\n    export CXX=${BINPREFIX}g++\n    export AS=${BINPREFIX}as\n    export LD=${BINPREFIX}ld\n    export AR=${BINPREFIX}ar\n    export RANLIB=${BINPREFIX}ranlib\n    export STRIP=${BINPREFIX}strip\n\n    setup_ccache\n\n    local CRYSTAX_LDFLAGS\n    # We MUST NOT specify path to libcrystax binaries, because it cause\n    # conflict on configure stage for toolchains with more than one incompatible\n    # multilib variants (such as mips64).\n    # To the moment this script called, we already have sysroot patched,\n    # with libcrystax binaries copied to proper folders, taking into account\n    # different multilibs variants, so configure scripts find them there.\n    CRYSTAX_LDFLAGS=\"\"\n    CRYSTAX_LDFLAGS=\"$CRYSTAX_LDFLAGS -lcrystax\"\n\n    export LDFLAGS=\"$CRYSTAX_LDFLAGS $EXTRA_LDFLAGS -lc\"\n\n    case $ABI in\n        armeabi-v7a|armeabi-v7a-hard)\n            CXXFLAGS=$CXXFLAGS\" -march=armv7-a -mfpu=vfpv3-d16\"\n            LDFLAGS=$LDFLAGS\" -Wl,--fix-cortex-a8\"\n            if [ \"$ABI\" != \"armeabi-v7a-hard\" ]; then\n                CXXFLAGS=$CXXFLAGS\" -mfloat-abi=softfp\"\n            else\n                CXXFLAGS=$CXXFLAGS\" -mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n                LDFLAGS=$LDFLAGS\" -Wl,--no-warn-mismatch -lm_hard\"\n            fi\n            ;;\n        arm64-v8a)\n            CFLAGS=\"$CFLAGS -mfix-cortex-a53-835769\"\n            CXXFLAGS=$CXXFLAGS\" -mfix-cortex-a53-835769\"\n            ;;\n    esac\n\n    if [ \"$ABI\" = \"armeabi\" -o \"$ABI\" = \"armeabi-v7a\" -o \"$ABI\" = \"armeabi-v7a-hard\" ]; then\n        CFLAGS=$CFLAGS\" -minline-thumb1-jumptable\"\n        CXXFLAGS=$CXXFLAGS\" -minline-thumb1-jumptable\"\n    fi\n\n    LIBTYPE_FLAGS=\n    if [ $LIBTYPE = \"static\" ]; then\n        # Ensure we disable visibility for the static library to reduce the\n        # size of the code that will be linked against it.\n        if [ -z \"$VISIBLE_LIBGNUSTL_STATIC\" ] ; then\n            LIBTYPE_FLAGS=\"--enable-static --disable-shared\"\n            LIBTYPE_FLAGS=$LIBTYPE_FLAGS\" --disable-libstdcxx-visibility\"\n            CXXFLAGS=$CXXFLAGS\" -fvisibility=hidden -fvisibility-inlines-hidden\"\n        fi\n    else\n        LIBTYPE_FLAGS=\"--disable-static --enable-shared\"\n        #LDFLAGS=$LDFLAGS\" -lsupc++\"\n    fi\n\n    if [ \"$ARCH\" = \"x86_64\" -o \"$ARCH\" = \"mips64\" -o \"$ARCH\" = \"mips\" ] ; then\n        MULTILIB_FLAGS=\n    else\n        MULTILIB_FLAGS=--disable-multilib\n    fi\n\n    INCLUDE_VERSION=`cat $GNUSTL_SRCDIR/../gcc/BASE-VER`\n    PROJECT=\"gnustl_$LIBTYPE gcc-$GCC_VERSION $ABI $THUMB\"\n    echo \"$PROJECT: configuring\"\n    mkdir -p $BUILDDIR && rm -rf $BUILDDIR/* &&\n    cd $BUILDDIR &&\n    run $GNUSTL_SRCDIR/configure \\\n        --enable-bionic-libs \\\n        --prefix=$INSTALLDIR \\\n        --host=$BUILD_HOST \\\n        $LIBTYPE_FLAGS \\\n        --enable-libstdcxx-time \\\n        --disable-symvers \\\n        $MULTILIB_FLAGS \\\n        --disable-nls \\\n        --disable-sjlj-exceptions \\\n        --disable-tls \\\n        --disable-libstdcxx-pch \\\n        --with-gxx-include-dir=$INSTALLDIR/include/c++/$INCLUDE_VERSION\n\n    fail_panic \"Could not configure $PROJECT\"\n\n    echo \"$PROJECT: compiling\"\n    run make -j$NUM_JOBS\n    fail_panic \"Could not build $PROJECT\"\n\n    echo \"$PROJECT: installing\"\n    run make install\n    fail_panic \"Could not create $ABI $THUMB prebuilts for GNU libsupc++/libstdc++\"\n}\n\n\nHAS_COMMON_HEADERS=\n\n# $1: ABI\n# $2: Build directory\n# $3: GCC_VERSION\ncopy_gnustl_libs ()\n{\n    local ABI=\"$1\"\n    local BUILDDIR=\"$2\"\n    local ARCH=$(convert_abi_to_arch $ABI)\n    local GCC_VERSION=\"$3\"\n    local PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n    PREFIX=${PREFIX%%-}\n\n    local GNUSTL_SRCDIR=$SRCDIR/gcc/gcc-$GCC_VERSION/libstdc++-v3\n    local INCLUDE_VERSION=`cat $GNUSTL_SRCDIR/../gcc/BASE-VER`\n\n    local SDIR=\"$BUILDDIR/install-$ABI-$GCC_VERSION\"\n    local DDIR=\"$NDK_DIR/$GNUSTL_SUBDIR\"\n\n    local GCC_VERSION_NO_DOT=$(echo $GCC_VERSION|sed 's/\\./_/g')\n    # Copy the common headers only once per gcc version\n    if [ -z `var_value HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT` ]; then\n        copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION\" \"$DDIR/include\"\n        rm -rf \"$DDIR/include/$PREFIX\"\n\teval HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT=true\n    fi\n\n    rm -rf \"$DDIR/libs/$ABI\" &&\n    mkdir -p \"$DDIR/libs/$ABI/include\"\n\n    # Copy the ABI-specific headers\n    copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/bits\" \"$DDIR/libs/$ABI/include/bits\"\n    case \"$ARCH\" in\n        x86_64)\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/32/bits\" \"$DDIR/libs/$ABI/include/32/bits\"\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/x32/bits\" \"$DDIR/libs/$ABI/include/x32/bits\"\n            ;;\n        mips64)\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/32/mips-r1/bits\" \"$DDIR/libs/$ABI/include/32/mips-r1/bits\"\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/32/mips-r2/bits\" \"$DDIR/libs/$ABI/include/32/mips-r2/bits\"\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/32/mips-r6/bits\" \"$DDIR/libs/$ABI/include/32/mips-r6/bits\"\n            ;;\n        mips)\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/mips-r2/bits\" \"$DDIR/libs/$ABI/include/mips-r2/bits\"\n            copy_directory \"$SDIR/include/c++/$INCLUDE_VERSION/$PREFIX/mips-r6/bits\" \"$DDIR/libs/$ABI/include/mips-r6/bits\"\n            ;;\n    esac\n\n    LDIR=lib\n    if [ \"$ABI\" = \"mips32r6\" ]; then\n        LDIR=libr6\n    elif [ \"$ARCH\" != \"${ARCH%%64*}\" ]; then\n        #Can't call $(get_default_libdir_for_arch $ARCH) which contain hack for arm64\n        LDIR=lib64\n    fi\n\n    # Copy the ABI-specific libraries\n    # Note: the shared library name is libgnustl_shared.so due our custom toolchain patch\n    copy_file_list \"$SDIR/$LDIR\" \"$DDIR/libs/$ABI\" libsupc++.a libgnustl_shared.so\n    # Note: we need to rename libgnustl_shared.a to libgnustl_static.a\n    cp \"$SDIR/$LDIR/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libgnustl_static.a\"\n    case \"$ARCH\" in\n       # for multilib we copy full set. Keep native libs in $ABI dir for compatibility.\n       # TODO: remove it in $ABI top directory\n        x86_64)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/lib64\" \"$DDIR/libs/$ABI/lib64\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libx32\" \"$DDIR/libs/$ABI/libx32\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/lib64/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib64/libgnustl_static.a\"\n            cp \"$SDIR/libx32/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libx32/libgnustl_static.a\"\n            ;;\n        mips64)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr2\" \"$DDIR/libs/$ABI/libr2\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr6\" \"$DDIR/libs/$ABI/libr6\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/lib64\" \"$DDIR/libs/$ABI/lib64\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/libr2/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr2/libgnustl_static.a\"\n            cp \"$SDIR/libr6/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr6/libgnustl_static.a\"\n            cp \"$SDIR/lib64/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib64/libgnustl_static.a\"\n            ;;\n        mips)\n            copy_file_list \"$SDIR/lib\" \"$DDIR/libs/$ABI/lib\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr2\" \"$DDIR/libs/$ABI/libr2\" libsupc++.a libgnustl_shared.so\n            copy_file_list \"$SDIR/libr6\" \"$DDIR/libs/$ABI/libr6\" libsupc++.a libgnustl_shared.so\n            cp \"$SDIR/lib/libgnustl_shared.a\" \"$DDIR/libs/$ABI/lib/libgnustl_static.a\"\n            cp \"$SDIR/libr2/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr2/libgnustl_static.a\"\n            cp \"$SDIR/libr6/libgnustl_shared.a\" \"$DDIR/libs/$ABI/libr6/libgnustl_static.a\"\n            ;;\n    esac\n\n    if [ -d \"$SDIR/thumb\" ] ; then\n        copy_file_list \"$SDIR/thumb/$LDIR\" \"$DDIR/libs/$ABI/thumb\" libsupc++.a libgnustl_shared.so\n        cp \"$SDIR/thumb/$LDIR/libgnustl_shared.a\" \"$DDIR/libs/$ABI/thumb/libgnustl_static.a\"\n    fi\n}\n\n# get_libstdcpp_package_name_for_abi\n# $1: GCC version\n# $2: ABI\nget_libstdcpp_package_name_for_abi ()\n{\n    local package_name\n    \n    package_name=\"gnu-libstdc++-libs-$1-$2\"\n    if [ \"$WITH_DEBUG_INFO\" ]; then\n        package_name=\"${package_name}-g\"\n    fi\n    package_name=\"${package_name}.tar.xz\"\n\n    echo \"$package_name\"\n}\n\nBUILT_GCC_VERSION_LIST=\"\"\nBUILT_ABIS=\"\"\nfor VERSION in $GCC_VERSION_LIST; do\n    PACKAGE_NAME=\"gnu-libstdc++-headers-$VERSION.tar.xz\"\n    echo \"Look for: $PACKAGE_NAME\"\n    try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\ndone\nfor ABI in $ABIS; do\n    ARCH=$(convert_abi_to_arch $ABI)\n    for VERSION in $GCC_VERSION_LIST; do\n        DO_BUILD_PACKAGE=\"yes\"\n        if [ -n \"$PACKAGE_DIR\" ]; then\n            PACKAGE_NAME=$(get_libstdcpp_package_name_for_abi $VERSION $ABI)\n            echo \"Look for: $PACKAGE_NAME\"\n            try_cached_package \"$PACKAGE_DIR\" \"$PACKAGE_NAME\" no_exit\n            if [ $? = 0 ]; then\n                DO_BUILD_PACKAGE=\"no\"\n            else\n                BUILT_GCC_VERSION_LIST=\"$BUILT_GCC_VERSION_LIST $VERSION\"\n                BUILT_ABIS=\"$BUILT_ABIS $ABI\"\n            fi\n        fi\n        if [ \"$DO_BUILD_PACKAGE\" = \"yes\" ]; then\n            build_gnustl_for_abi $ABI \"$BUILD_DIR\" static $VERSION\n            build_gnustl_for_abi $ABI \"$BUILD_DIR\" shared $VERSION\n            # build thumb version of libraries for 32-bit arm\n            if [ \"$ABI\" != \"${ABI%%arm*}\" -a \"$ABI\" = \"${ABI%%64*}\" ] ; then\n                build_gnustl_for_abi $ABI \"$BUILD_DIR\" static $VERSION thumb\n                build_gnustl_for_abi $ABI \"$BUILD_DIR\" shared $VERSION thumb\n            fi\n            copy_gnustl_libs $ABI \"$BUILD_DIR\" $VERSION\n        fi\n    done\ndone\n\n# If needed, package files into tarballs\nif [ -n \"$PACKAGE_DIR\" ] ; then\n    for VERSION in $GCC_VERSION_LIST; do\n        FILES=\"$GNUSTL_DIR/Android.mk $GNUSTL_DIR/include\"\n        for ABI in $ABIS; do\n            if [ ! -d \"$NDK_DIR/$GNUSTL_SUBDIR/libs/$ABI\" ]; then\n                continue\n            fi\n            case \"$ABI\" in\n                x86_64)\n                    MULTILIB=\"include/32/bits include/x32/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libx32/libsupc++.a libx32/libgnustl_static.a libx32/libgnustl_shared.so\n                              lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so\"\n                    ;;\n                mips64)\n                    MULTILIB=\"include/32/mips-r1/bits include/32/mips-r2/bits include/32/mips-r6/bits include/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so\n                              libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so\n                              lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so\"\n                    ;;\n                mips|mips32r6)\n                    MULTILIB=\"include/mips-r2/bits include/mips-r6/bits include/bits\n                              lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so\n                              libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so\n                              libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so\"\n                    ;;\n                *)\n                    MULTILIB=\n                    ;;\n            esac\n            for LIB in include/bits $MULTILIB libsupc++.a libgnustl_static.a libgnustl_shared.so; do\n                FILES=\"$FILES $GNUSTL_DIR/libs/$ABI/$LIB\"\n                THUMB_FILE=\"$GNUSTL_DIR/libs/$ABI/thumb/$LIB\"\n                if [ -f \"$NDK_DIR/sources/cxx-stl/$THUMB_FILE\" ]; then\n                    FILES=\"$FILES $THUMB_FILE\"\n                fi\n            done\n        done\n\n        make_repo_prop \"$NDK_DIR/$STL_DIR/$GNUSTL_DIR\"\n        FILES=\"$FILES $GNUSTL_DIR/repo.prop\"\n\n        cp \"$ANDROID_BUILD_TOP/toolchain/gcc/gcc-4.9/COPYING\" \\\n           \"$NDK_DIR/$STL_DIR/$GNUSTL_DIR/NOTICE\"\n        FILES=\"$FILES $GNUSTL_DIR/NOTICE\"\n\n        PACKAGE=\"$PACKAGE_DIR/gnustl-${VERSION}.zip\"\n        dump \"Packaging: $PACKAGE\"\n        pack_archive \"$PACKAGE\" \"$NDK_DIR/$STL_DIR\" \"$FILES\"\n        fail_panic \"Could not package GNU libstdc++ binaries!\"\n    done\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\n"
  },
  {
    "path": "sources/cxx-stl/gnu-libstdc++/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds GNU libstdc++ for Android.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support\n\n\nclass ArgParser(build_support.ArgParser):\n    def __init__(self):\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Architectures to build. Builds all if not present.')\n\n\ndef main(args):\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    abis = []\n    for arch in arches:\n        abis.extend(build_support.arch_to_abis(arch))\n\n    print('Building libstdc++ for ABIs: {}'.format(' '.join(abis)))\n    abis_arg = '--abis={}'.format(','.join(abis))\n    ndk_dir_arg = '--ndk-dir={}'.format(build_support.ndk_path())\n    build_cmd = [\n        'bash', 'build-gnu-libstdc++.sh', abis_arg, ndk_dir_arg,\n        build_support.jobs_arg(), build_support.toolchain_path(),\n        '--with-debug-info',\n    ]\n\n    build_support.build(build_cmd, args)\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/.gitignore",
    "content": "/3.6/\n/3.7/\n/3.8/\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/Android.mk",
    "content": "# -*- makefile-gmake -*-\n# This file is dual licensed under the MIT and the University of Illinois Open\n# Source Licenses. See LICENSE.TXT for details.\n\nLOCAL_PATH := $(call my-dir)\n\nifeq (,$(strip $(DEFAULT_LLVM_VERSION)))\n$(error INTERNAL ERROR: 'DEFAULT_LLVM_VERSION' is empty!)\nendif\n\n__libcxx_version := $(strip \\\n    $(if $(filter clang%,$(NDK_TOOLCHAIN_VERSION)),\\\n        $(or \\\n            $(patsubst clang%,%,$(NDK_TOOLCHAIN_VERSION)),\\\n            $(DEFAULT_LLVM_VERSION)\\\n        ),\\\n        $(DEFAULT_LLVM_VERSION)\\\n    )\\\n)\n\n# Temporary workaround - if using gcc, use libc++-3.6.\n# This happens because using libc++-3.7 with gcc cause throwing of std::bad_cast,\n# most likely due to incompatibility of used libc++abi with libc++-3.7.\n# TODO: switch to use proper libc++abi, depending on libc++ versions.\n# Here is ticket: https://tracker.crystax.net/issues/1177\nifeq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\n__libcxx_version := 3.6\nendif\n\nifeq (,$(strip $(__libcxx_version)))\n$(error INTERNAL ERROR: Can not detect LLVM libc++ version!)\nendif\n\n# Normally, we distribute the NDK with prebuilt binaries of libc++\n# in $LOCAL_PATH/<libcxx-version>/libs/<abi>/. However,\n#\n\nLIBCXX_FORCE_REBUILD := $(strip $(LIBCXX_FORCE_REBUILD))\n\n__libcxx_force_rebuild := $(LIBCXX_FORCE_REBUILD)\n\nifndef LIBCXX_FORCE_REBUILD\n  ifeq (,$(strip $(wildcard $(LOCAL_PATH)/$(__libcxx_version)/libs/$(TARGET_ARCH_ABI)/libc++_static$(TARGET_LIB_EXTENSION))))\n    $(call __ndk_info,WARNING: Rebuilding libc++ libraries from sources!)\n    $(call __ndk_info,You might want to use $$NDK/build/tools/build-cxx-stl.sh --stl=libc++)\n    $(call __ndk_info,in order to build prebuilt versions to speed up your builds!)\n    __libcxx_force_rebuild := true\n  endif\nendif\n\nllvm_libc++_includes := $(LOCAL_PATH)/$(__libcxx_version)/libcxx/include\nllvm_libc++_export_includes := $(llvm_libc++_includes)\nllvm_libc++_sources := \\\n\talgorithm.cpp \\\n\tbind.cpp \\\n\tchrono.cpp \\\n\tcondition_variable.cpp \\\n\tdebug.cpp \\\n\texception.cpp \\\n\tfuture.cpp \\\n\thash.cpp \\\n\tios.cpp \\\n\tiostream.cpp \\\n\tlocale.cpp \\\n\tmemory.cpp \\\n\tmutex.cpp \\\n\tnew.cpp \\\n\toptional.cpp \\\n\trandom.cpp \\\n\tregex.cpp \\\n\tshared_mutex.cpp \\\n\tstdexcept.cpp \\\n\tstring.cpp \\\n\tstrstream.cpp \\\n\tsystem_error.cpp \\\n\tthread.cpp \\\n\ttypeinfo.cpp \\\n\tutility.cpp \\\n\tvalarray.cpp \\\n\nllvm_libc++_sources := $(llvm_libc++_sources:%=$(__libcxx_version)/libcxx/src/%)\n\n# For now, this library can only be used to build C++11 binaries.\nllvm_libc++_export_cxxflags := -std=c++11\nllvm_libc++_export_cxxflags += -frtti -fexceptions\n\nifeq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\n# Add -fno-strict-aliasing because __list_imp::_end_ breaks TBAA rules by declaring\n# simply as __list_node_base then casted to __list_node derived from that.  See\n# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571 for details\nllvm_libc++_export_cxxflags += -fno-strict-aliasing\nendif\n\nllvm_libc++_cxxflags := $(llvm_libc++_export_cxxflags)\nllvm_libc++_cflags :=\n\nlibcxxabi_sources_dir := $(strip $(wildcard $(LOCAL_PATH)/../llvm-libc++abi))\nifdef libcxxabi_sources_dir\n  libcxxabi_sources_prefix := ../llvm-libc++abi\nelse\n  libcxxabi_sources_dir := $(strip $(wildcard $(NDK_ROOT)/sources/cxx-stl/llvm-libc++abi))\n  ifndef libcxxabi_sources_dir\n    $(error Can not find libcxxabi sources directory!!)\n  endif\n  libcxxabi_sources_prefix := $(libcxxabi_sources_dir)\nendif\n\ninclude $(libcxxabi_sources_dir)/sources.mk\nllvm_libc++_sources += $(addprefix $(libcxxabi_sources_prefix:%/=%)/,$(libcxxabi_src_files))\nllvm_libc++_includes += $(libcxxabi_c_includes)\nllvm_libc++_export_includes += $(libcxxabi_c_includes)\n# For armeabi*, use unwinder from libc++abi\nifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))\nllvm_libc++_cflags += -DLIBCXXABI_USE_LLVM_UNWINDER=1\nllvm_libc++_sources += $(addprefix $(libcxxabi_sources_prefix:%/=%)/,$(libcxxabi_unwind_src_files))\nelse\nllvm_libc++_cflags += -DLIBCXXABI_USE_LLVM_UNWINDER=0\nendif\n\n\nifneq ($(__libcxx_force_rebuild),true)\n\n$(call ndk_log,Using prebuilt libc++ libraries)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := c++_static\nLOCAL_SRC_FILES := $(__libcxx_version)/libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)\n# For armeabi*, choose thumb mode unless LOCAL_ARM_MODE := arm\nifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))\nifneq (arm,$(LOCAL_ARM_MODE))\nifneq (arm,$(TARGET_ARM_MODE))\nLOCAL_SRC_FILES := $(__libcxx_version)/libs/$(TARGET_ARCH_ABI)/thumb/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)\nendif\nendif\nendif\nLOCAL_EXPORT_C_INCLUDES := $(llvm_libc++_export_includes)\nLOCAL_EXPORT_CPPFLAGS := $(llvm_libc++_export_cxxflags)\nLOCAL_EXPORT_LDLIBS := -latomic\ninclude $(PREBUILT_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := c++_shared\nLOCAL_SRC_FILES := $(__libcxx_version)/libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)\n# For armeabi*, choose thumb mode unless LOCAL_ARM_MODE := arm\nifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))\nifneq (arm,$(LOCAL_ARM_MODE))\nifneq (arm,$(TARGET_ARM_MODE))\nLOCAL_SRC_FILES := $(__libcxx_version)/libs/$(TARGET_ARCH_ABI)/thumb/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)\nendif\nendif\nendif\nLOCAL_EXPORT_C_INCLUDES := $(llvm_libc++_export_includes)\nLOCAL_EXPORT_CPPFLAGS := $(llvm_libc++_export_cxxflags)\nLOCAL_EXPORT_LDLIBS := -latomic\ninclude $(PREBUILT_SHARED_LIBRARY)\n\nelse\n# __libcxx_force_rebuild == true\n\n$(call ndk_log,Rebuilding libc++ libraries from sources)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := c++_static\nLOCAL_SRC_FILES := $(llvm_libc++_sources)\nLOCAL_C_INCLUDES := $(llvm_libc++_includes)\nLOCAL_CFLAGS := $(llvm_libc++_cflags)\nLOCAL_CPPFLAGS := $(llvm_libc++_cxxflags)\nLOCAL_CPP_FEATURES := rtti exceptions\nLOCAL_EXPORT_C_INCLUDES := $(llvm_libc++_export_includes)\nLOCAL_EXPORT_CPPFLAGS := $(llvm_libc++_export_cxxflags)\nLOCAL_LDLIBS := -latomic\nLOCAL_EXPORT_LDLIBS := -latomic\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := c++_shared\nLOCAL_SRC_FILES := $(llvm_libc++_sources)\nLOCAL_C_INCLUDES := $(llvm_libc++_includes)\nLOCAL_CFLAGS := $(llvm_libc++_cflags)\nLOCAL_CPPFLAGS := $(llvm_libc++_cxxflags)\nLOCAL_CPP_FEATURES := rtti exceptions\nLOCAL_EXPORT_C_INCLUDES := $(llvm_libc++_export_includes)\nLOCAL_EXPORT_CPPFLAGS := $(llvm_libc++_export_cxxflags)\nLOCAL_LDLIBS := -latomic\nLOCAL_EXPORT_LDLIBS := -latomic\ninclude $(BUILD_SHARED_LIBRARY)\n\nendif # __libcxx_force_rebuild == true\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/README.NDK",
    "content": "This is a copy of LLVM's libc++ project, slightly modified to build\nwith this NDK. It's currently *EXPERIMENTAL*.\n\nUpstream: See 'upstream.config' file in this directory.\nPatches: see patches.android/\nTracking: 36496\n\nThis is a version of LLVM's libc++ that was modified to be built\nwith GAbi++. At the moment, only linking a small test executable is\nsupported, and it will very likely crash as soon as you start it.\n\nIt also includes Android-specific support code, providing missing C\nlibrary functionality, under android/support. Most of the code there\nconsists in stubs waiting for a real implementation.\n\nAll patches are under patches.android/ to make it easier to update\nthe upstream revision of the library while working on this.\n\nYou need a recent NDK release, one which provides a version\nof the GAbi++ C++ runtime that supports rtti _and_ exceptions.\n\nBuild instructions:\n\n  1/ Set NDK to the path of a recent Android NDK install path\n     (Use Android NDK r8e or above), e.g.:\n\n      NDK=$HOME/android/ndk-r8e\n\n  2/ From the top-level directory, do:\n\n      $NDK/ndk-build -C android/test\n\n     This is actually equivalent to:\n\n      cd android/test\n      $NDK/ndk-build\n\n  3/ To see build commands, use V=1, as in:\n\n      $NDK/ndk-build -C android/test V=1\n\n\nAndroid support files:\n\n  android/support/include:\n     Android system header wrappers, to add missing declarations\n\n  android/support/src:\n     Put the implementation of the missing system functions here.\n\n  Android.mk:\n     Main build file for the library. This builds one static and\n     one shared version of the library.\n\n     If modifications are not obvious, read $NDK/docs/ANDROID-MK.html\n     for a description of the Android.mk format.\n\n  android/test/jni:\n     NDK build project for two test programs that link against the\n     static and shared versions of the library.\n\n     See the Android.mk and Application.mk files in this directory\n     if you want to add new test files.\n\n\nToolchain selection:\n  By default, ndk-build tries to build with GCC 4.6, however, experimental\n  versions of GCC 4.8 and Clang 3.4 are available with recent NDK releases.\n\n  Use the NDK_TOOLCHAIN_VERSION environment variable to switch to a\n  different one, valid examples:\n\n\n    export NDK_TOOLCHAIN_VERSION=4.6    # this is the default\n    $NDK/ndk-build -C android/test\n\n    # This is equivalent, but for GCC 4.8\n    $NDK/ndk-build -C android/test NDK_TOOLCHAIN_VERSION=4.8\n\n    # Also equivalent, but for Clang 3.4\n    NDK_TOOLCHAIN_VERSION=Clang3.4 $NDK/ndk-build -C android/test\n\n\nUpdating the sources to a newer revision:\n\n  You can use the tools/update-upstream.sh script to automatically try\n  to update to a more recent version of the upstream sources.\n\n  In case of success, this adds all relevant changes to the current git\n  index so you can review them before committing them.\n\n  In case of problem, try using the --verbose and --no-cleanup options\n  to see the details of the failure. This may require manually updating\n  the patch files.\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds libc++ for Android.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport shutil\nimport site\nimport subprocess\n\nTHIS_DIR = os.path.realpath(os.path.dirname(__file__))\nsite.addsitedir(os.path.join(THIS_DIR, '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\nclass ArgParser(build_support.ArgParser):\n    def __init__(self):  # pylint: disable=super-on-old-class\n        super(ArgParser, self).__init__()\n\n        self.add_argument(\n            '--arch', choices=build_support.ALL_ARCHITECTURES,\n            help='Architectures to build. Builds all if not present.')\n\n\ndef main(args):\n    arches = build_support.ALL_ARCHITECTURES\n    if args.arch is not None:\n        arches = [args.arch]\n\n    abis = []\n    for arch in arches:\n        abis.extend(build_support.arch_to_abis(arch))\n\n    ndk_build = build_support.ndk_path('build/ndk-build')\n    prebuilt_ndk = build_support.android_path('prebuilts/ndk/current')\n    platforms_root = os.path.join(prebuilt_ndk, 'platforms')\n    toolchains_root = os.path.join(prebuilt_ndk, 'toolchains')\n    libcxx_path = build_support.ndk_path('sources/cxx-stl/llvm-libc++')\n    obj_out = os.path.join(args.out_dir, 'libcxx/obj')\n\n    # TODO(danalbert): Stop building to the source directory.\n    # This is historical, and simplifies packaging a bit. We need to pack up\n    # all the source as well as the libraries. If build_support.make_package\n    # were to change to allow a list of directories instead of one directory,\n    # we could make this unnecessary.  Will be a follow up CL.\n    lib_out = os.path.join(libcxx_path, 'libs')\n\n    build_cmd = [\n        'bash', ndk_build, '-C', THIS_DIR, build_support.jobs_arg(), 'V=1',\n        'APP_ABI=' + ' '.join(abis),\n\n        # Use the prebuilt platforms and toolchains.\n        'NDK_PLATFORMS_ROOT=' + platforms_root,\n        'NDK_TOOLCHAINS_ROOT=' + toolchains_root,\n        'NDK_NEW_TOOLCHAINS_LAYOUT=true',\n\n        # Tell ndk-build where all of our makefiles are and where outputs\n        # should go. The defaults in ndk-build are only valid if we have a\n        # typical ndk-build layout with a jni/{Android,Application}.mk.\n        'NDK_PROJECT_PATH=null',\n        'APP_BUILD_SCRIPT=' + os.path.join(THIS_DIR, 'Android.mk'),\n        'NDK_APPLICATION_MK=' + os.path.join(THIS_DIR, 'Application.mk'),\n        'NDK_OUT=' + obj_out,\n        'NDK_LIBS_OUT=' + lib_out,\n\n        # Make sure we don't pick up a cached copy.\n        'LIBCXX_FORCE_REBUILD=true',\n\n        # Put armeabi-v7a-hard in its own directory.\n        '_NDK_TESTING_ALL_=yes',\n    ]\n    print('Building libc++ for ABIs: {}'.format(', '.join(abis)))\n    subprocess.check_call(build_cmd)\n\n    # The static libraries are installed to NDK_OUT, not NDK_LIB_OUT, so we\n    # need to install them to our package directory.\n    for abi in abis:\n        static_lib_dir = os.path.join(obj_out, 'local', abi)\n        install_dir = os.path.join(lib_out, abi)\n        is_arm = abi.startswith('armeabi')\n\n        if is_arm:\n            shutil.copy2(\n                os.path.join(static_lib_dir, 'libunwind.a'), install_dir)\n\n        shutil.copy2(os.path.join(static_lib_dir, 'libc++abi.a'), install_dir)\n        shutil.copy2(\n            os.path.join(static_lib_dir, 'libandroid_support.a'), install_dir)\n        shutil.copy2(\n            os.path.join(static_lib_dir, 'libc++_static.a'), install_dir)\n\n    build_support.make_package('libcxx', libcxx_path, args.dist_dir)\n\n\nif __name__ == '__main__':\n    build_support.run(main, ArgParser)\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/export_symbols.txt",
    "content": "{\n  global:\n    /* libc++abi exports */\n    _Unwind_DeleteException;\n    _Unwind_RaiseException;\n    _Unwind_Resume;\n    _Unwind_Complete;\n    _Unwind_VRS_Get;\n    _Unwind_VRS_Pop;\n    _Unwind_VRS_Set;\n    _ZNKSt10bad_typeid4whatEv;\n    _ZNKSt11logic_error4whatEv;\n    _ZNKSt13bad_exception4whatEv;\n    _ZNKSt13runtime_error4whatEv;\n    _ZNKSt20bad_array_new_length4whatEv;\n    _ZNKSt8bad_cast4whatEv;\n    _ZNKSt9bad_alloc4whatEv;\n    _ZNKSt9exception4whatEv;\n    _ZNSt10bad_typeidC1Ev;\n    _ZNSt10bad_typeidC2Ev;\n    _ZNSt10bad_typeidD0Ev;\n    _ZNSt10bad_typeidD1Ev;\n    _ZNSt10bad_typeidD2Ev;\n    _ZNSt11logic_errorD0Ev;\n    _ZNSt11logic_errorD1Ev;\n    _ZNSt11logic_errorD2Ev;\n    _ZNSt11range_errorD0Ev;\n    _ZNSt11range_errorD1Ev;\n    _ZNSt11range_errorD2Ev;\n    _ZNSt12domain_errorD0Ev;\n    _ZNSt12domain_errorD1Ev;\n    _ZNSt12domain_errorD2Ev;\n    _ZNSt12length_errorD0Ev;\n    _ZNSt12length_errorD1Ev;\n    _ZNSt12length_errorD2Ev;\n    _ZNSt12out_of_rangeD0Ev;\n    _ZNSt12out_of_rangeD1Ev;\n    _ZNSt12out_of_rangeD2Ev;\n    _ZNSt13bad_exceptionC2ERKS_;\n    _ZNSt13bad_exceptionD0Ev;\n    _ZNSt13bad_exceptionD1Ev;\n    _ZNSt13bad_exceptionD2Ev;\n    _ZNSt13runtime_errorD0Ev;\n    _ZNSt13runtime_errorD1Ev;\n    _ZNSt13runtime_errorD2Ev;\n    _ZNSt14overflow_errorD0Ev;\n    _ZNSt14overflow_errorD1Ev;\n    _ZNSt14overflow_errorD2Ev;\n    _ZNSt15underflow_errorD0Ev;\n    _ZNSt15underflow_errorD1Ev;\n    _ZNSt15underflow_errorD2Ev;\n    _ZNSt16invalid_argumentD0Ev;\n    _ZNSt16invalid_argumentD1Ev;\n    _ZNSt16invalid_argumentD2Ev;\n    _ZNSt20bad_array_new_lengthC1Ev;\n    _ZNSt20bad_array_new_lengthC2Ev;\n    _ZNSt20bad_array_new_lengthD0Ev;\n    _ZNSt20bad_array_new_lengthD1Ev;\n    _ZNSt20bad_array_new_lengthD2Ev;\n    _ZNSt8bad_castC1Ev;\n    _ZNSt8bad_castC2Ev;\n    _ZNSt8bad_castD0Ev;\n    _ZNSt8bad_castD1Ev;\n    _ZNSt8bad_castD2Ev;\n    _ZNSt9bad_allocC1Ev;\n    _ZNSt9bad_allocC2Ev;\n    _ZNSt9bad_allocD0Ev;\n    _ZNSt9bad_allocD1Ev;\n    _ZNSt9bad_allocD2Ev;\n    _ZNSt9exceptionC2ERKS_;\n    _ZNSt9exceptionD0Ev;\n    _ZNSt9exceptionD1Ev;\n    _ZNSt9exceptionD2Ev;\n    _ZNSt9type_infoD0Ev;\n    _ZNSt9type_infoD1Ev;\n    _ZNSt9type_infoD2Ev;\n    _ZSt10unexpectedv;\n    _ZSt13get_terminatev;\n    _ZSt13set_terminatePFvvE;\n    _ZSt14get_unexpectedv;\n    _ZSt14set_unexpectedPFvvE;\n    _ZSt15get_new_handlerv;\n    _ZSt15set_new_handlerPFvvE;\n    _ZSt9terminatev;\n    _ZTIDi;\n    _ZTIDn;\n    _ZTIDs;\n    _ZTIN10__cxxabiv116__enum_type_infoE;\n    _ZTIN10__cxxabiv117__array_type_infoE;\n    _ZTIN10__cxxabiv117__class_type_infoE;\n    _ZTIN10__cxxabiv117__pbase_type_infoE;\n    _ZTIN10__cxxabiv119__pointer_type_infoE;\n    _ZTIN10__cxxabiv120__function_type_infoE;\n    _ZTIN10__cxxabiv120__si_class_type_infoE;\n    _ZTIN10__cxxabiv121__vmi_class_type_infoE;\n    _ZTIN10__cxxabiv123__fundamental_type_infoE;\n    _ZTIN10__cxxabiv129__pointer_to_member_type_infoE;\n    _ZTIPDi;\n    _ZTIPDn;\n    _ZTIPDs;\n    _ZTIPKDi;\n    _ZTIPKDn;\n    _ZTIPKDs;\n    _ZTIPKa;\n    _ZTIPKb;\n    _ZTIPKc;\n    _ZTIPKd;\n    _ZTIPKe;\n    _ZTIPKf;\n    _ZTIPKh;\n    _ZTIPKi;\n    _ZTIPKj;\n    _ZTIPKl;\n    _ZTIPKm;\n    _ZTIPKs;\n    _ZTIPKt;\n    _ZTIPKv;\n    _ZTIPKw;\n    _ZTIPKx;\n    _ZTIPKy;\n    _ZTIPa;\n    _ZTIPb;\n    _ZTIPc;\n    _ZTIPd;\n    _ZTIPe;\n    _ZTIPf;\n    _ZTIPh;\n    _ZTIPi;\n    _ZTIPj;\n    _ZTIPl;\n    _ZTIPm;\n    _ZTIPs;\n    _ZTIPt;\n    _ZTIPv;\n    _ZTIPw;\n    _ZTIPx;\n    _ZTIPy;\n    _ZTISt10bad_typeid;\n    _ZTISt11logic_error;\n    _ZTISt11range_error;\n    _ZTISt12domain_error;\n    _ZTISt12length_error;\n    _ZTISt12out_of_range;\n    _ZTISt13bad_exception;\n    _ZTISt13runtime_error;\n    _ZTISt14overflow_error;\n    _ZTISt15underflow_error;\n    _ZTISt16invalid_argument;\n    _ZTISt20bad_array_new_length;\n    _ZTISt8bad_cast;\n    _ZTISt9bad_alloc;\n    _ZTISt9exception;\n    _ZTISt9type_info;\n    _ZTIa;\n    _ZTIb;\n    _ZTIc;\n    _ZTId;\n    _ZTIe;\n    _ZTIf;\n    _ZTIh;\n    _ZTIi;\n    _ZTIj;\n    _ZTIl;\n    _ZTIm;\n    _ZTIs;\n    _ZTIt;\n    _ZTIv;\n    _ZTIw;\n    _ZTIx;\n    _ZTIy;\n    _ZTSDi;\n    _ZTSDn;\n    _ZTSDs;\n    _ZTSN10__cxxabiv116__enum_type_infoE;\n    _ZTSN10__cxxabiv117__array_type_infoE;\n    _ZTSN10__cxxabiv117__class_type_infoE;\n    _ZTSN10__cxxabiv117__pbase_type_infoE;\n    _ZTSN10__cxxabiv119__pointer_type_infoE;\n    _ZTSN10__cxxabiv120__function_type_infoE;\n    _ZTSN10__cxxabiv120__si_class_type_infoE;\n    _ZTSN10__cxxabiv121__vmi_class_type_infoE;\n    _ZTSN10__cxxabiv123__fundamental_type_infoE;\n    _ZTSN10__cxxabiv129__pointer_to_member_type_infoE;\n    _ZTSPDi;\n    _ZTSPDn;\n    _ZTSPDs;\n    _ZTSPKDi;\n    _ZTSPKDn;\n    _ZTSPKDs;\n    _ZTSPKa;\n    _ZTSPKb;\n    _ZTSPKc;\n    _ZTSPKd;\n    _ZTSPKe;\n    _ZTSPKf;\n    _ZTSPKh;\n    _ZTSPKi;\n    _ZTSPKj;\n    _ZTSPKl;\n    _ZTSPKm;\n    _ZTSPKs;\n    _ZTSPKt;\n    _ZTSPKv;\n    _ZTSPKw;\n    _ZTSPKx;\n    _ZTSPKy;\n    _ZTSPa;\n    _ZTSPb;\n    _ZTSPc;\n    _ZTSPd;\n    _ZTSPe;\n    _ZTSPf;\n    _ZTSPh;\n    _ZTSPi;\n    _ZTSPj;\n    _ZTSPl;\n    _ZTSPm;\n    _ZTSPs;\n    _ZTSPt;\n    _ZTSPv;\n    _ZTSPw;\n    _ZTSPx;\n    _ZTSPy;\n    _ZTSSt10bad_typeid;\n    _ZTSSt11logic_error;\n    _ZTSSt11range_error;\n    _ZTSSt12domain_error;\n    _ZTSSt12length_error;\n    _ZTSSt12out_of_range;\n    _ZTSSt13bad_exception;\n    _ZTSSt13runtime_error;\n    _ZTSSt14overflow_error;\n    _ZTSSt15underflow_error;\n    _ZTSSt16invalid_argument;\n    _ZTSSt20bad_array_new_length;\n    _ZTSSt8bad_cast;\n    _ZTSSt9bad_alloc;\n    _ZTSSt9exception;\n    _ZTSSt9type_info;\n    _ZTSa;\n    _ZTSb;\n    _ZTSc;\n    _ZTSd;\n    _ZTSe;\n    _ZTSf;\n    _ZTSh;\n    _ZTSi;\n    _ZTSj;\n    _ZTSl;\n    _ZTSm;\n    _ZTSs;\n    _ZTSt;\n    _ZTSv;\n    _ZTSw;\n    _ZTSx;\n    _ZTSy;\n    _ZTVN10__cxxabiv116__enum_type_infoE;\n    _ZTVN10__cxxabiv117__array_type_infoE;\n    _ZTVN10__cxxabiv117__class_type_infoE;\n    _ZTVN10__cxxabiv117__pbase_type_infoE;\n    _ZTVN10__cxxabiv119__pointer_type_infoE;\n    _ZTVN10__cxxabiv120__function_type_infoE;\n    _ZTVN10__cxxabiv120__si_class_type_infoE;\n    _ZTVN10__cxxabiv121__vmi_class_type_infoE;\n    _ZTVN10__cxxabiv123__fundamental_type_infoE;\n    _ZTVN10__cxxabiv129__pointer_to_member_type_infoE;\n    _ZTVSt10bad_typeid;\n    _ZTVSt11logic_error;\n    _ZTVSt11range_error;\n    _ZTVSt12domain_error;\n    _ZTVSt12length_error;\n    _ZTVSt12out_of_range;\n    _ZTVSt13bad_exception;\n    _ZTVSt13runtime_error;\n    _ZTVSt14overflow_error;\n    _ZTVSt15underflow_error;\n    _ZTVSt16invalid_argument;\n    _ZTVSt20bad_array_new_length;\n    _ZTVSt8bad_cast;\n    _ZTVSt9bad_alloc;\n    _ZTVSt9exception;\n    _ZTVSt9type_info;\n    _ZdaPv;\n    _ZdaPvRKSt9nothrow_t;\n    _ZdlPv;\n    _ZdlPvRKSt9nothrow_t;\n    _Znaj;\n    _ZnajRKSt9nothrow_t;\n    _Znwj;\n    _ZnwjRKSt9nothrow_t;\n    __aeabi_unwind_cpp_pr0;\n    __aeabi_unwind_cpp_pr1;\n    __aeabi_unwind_cpp_pr2;\n    __cxa_allocate_dependent_exception;\n    __cxa_allocate_exception;\n    __cxa_bad_cast;\n    __cxa_bad_typeid;\n    __cxa_begin_catch;\n    __cxa_begin_cleanup;\n    __cxa_call_unexpected;\n    __cxa_current_exception_type;\n    __cxa_current_primary_exception;\n    __cxa_decrement_exception_refcount;\n    __cxa_deleted_virtual;\n    __cxa_demangle;\n    __cxa_end_catch;\n    __cxa_end_cleanup;\n    __cxa_free_dependent_exception;\n    __cxa_free_exception;\n    __cxa_get_exception_ptr;\n    __cxa_get_globals;\n    __cxa_get_globals_fast;\n    __cxa_guard_abort;\n    __cxa_guard_acquire;\n    __cxa_guard_release;\n    __cxa_increment_exception_refcount;\n    __cxa_pure_virtual;\n    __cxa_rethrow;\n    __cxa_rethrow_primary_exception;\n    __cxa_terminate_handler;\n    __cxa_throw;\n    __cxa_uncaught_exception;\n    __cxa_unexpected_handler;\n    __cxa_vec_cctor;\n    __cxa_vec_cleanup;\n    __cxa_vec_ctor;\n    __cxa_vec_delete;\n    __cxa_vec_delete2;\n    __cxa_vec_delete3;\n    __cxa_vec_dtor;\n    __cxa_vec_new;\n    __cxa_vec_new2;\n    __cxa_vec_new3;\n    __dynamic_cast;\n    __gxx_personality_v0;\n\n    /* libc++ exports */\n    _ZGVZNKSt3__120__time_get_c_storageIcE3__cEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIcE3__rEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIcE3__xEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIcE3__XEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm;\n    _ZGVZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks;\n    _ZGVZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months;\n    _ZGVZNKSt3__120__time_get_c_storageIwE3__cEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIwE3__rEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIwE3__xEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIwE3__XEvE1s;\n    _ZGVZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm;\n    _ZGVZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks;\n    _ZGVZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months;\n    _ZNKSt16nested_exception14rethrow_nestedEv;\n    _ZNKSt3__110error_code7messageEv;\n    _ZNKSt3__110moneypunctIcLb0EE11do_groupingEv;\n    _ZNKSt3__110moneypunctIcLb0EE13do_neg_formatEv;\n    _ZNKSt3__110moneypunctIcLb0EE13do_pos_formatEv;\n    _ZNKSt3__110moneypunctIcLb0EE14do_curr_symbolEv;\n    _ZNKSt3__110moneypunctIcLb0EE14do_frac_digitsEv;\n    _ZNKSt3__110moneypunctIcLb0EE16do_decimal_pointEv;\n    _ZNKSt3__110moneypunctIcLb0EE16do_negative_signEv;\n    _ZNKSt3__110moneypunctIcLb0EE16do_positive_signEv;\n    _ZNKSt3__110moneypunctIcLb0EE16do_thousands_sepEv;\n    _ZNKSt3__110moneypunctIcLb1EE11do_groupingEv;\n    _ZNKSt3__110moneypunctIcLb1EE13do_neg_formatEv;\n    _ZNKSt3__110moneypunctIcLb1EE13do_pos_formatEv;\n    _ZNKSt3__110moneypunctIcLb1EE14do_curr_symbolEv;\n    _ZNKSt3__110moneypunctIcLb1EE14do_frac_digitsEv;\n    _ZNKSt3__110moneypunctIcLb1EE16do_decimal_pointEv;\n    _ZNKSt3__110moneypunctIcLb1EE16do_negative_signEv;\n    _ZNKSt3__110moneypunctIcLb1EE16do_positive_signEv;\n    _ZNKSt3__110moneypunctIcLb1EE16do_thousands_sepEv;\n    _ZNKSt3__110moneypunctIwLb0EE11do_groupingEv;\n    _ZNKSt3__110moneypunctIwLb0EE13do_neg_formatEv;\n    _ZNKSt3__110moneypunctIwLb0EE13do_pos_formatEv;\n    _ZNKSt3__110moneypunctIwLb0EE14do_curr_symbolEv;\n    _ZNKSt3__110moneypunctIwLb0EE14do_frac_digitsEv;\n    _ZNKSt3__110moneypunctIwLb0EE16do_decimal_pointEv;\n    _ZNKSt3__110moneypunctIwLb0EE16do_negative_signEv;\n    _ZNKSt3__110moneypunctIwLb0EE16do_positive_signEv;\n    _ZNKSt3__110moneypunctIwLb0EE16do_thousands_sepEv;\n    _ZNKSt3__110moneypunctIwLb1EE11do_groupingEv;\n    _ZNKSt3__110moneypunctIwLb1EE13do_neg_formatEv;\n    _ZNKSt3__110moneypunctIwLb1EE13do_pos_formatEv;\n    _ZNKSt3__110moneypunctIwLb1EE14do_curr_symbolEv;\n    _ZNKSt3__110moneypunctIwLb1EE14do_frac_digitsEv;\n    _ZNKSt3__110moneypunctIwLb1EE16do_decimal_pointEv;\n    _ZNKSt3__110moneypunctIwLb1EE16do_negative_signEv;\n    _ZNKSt3__110moneypunctIwLb1EE16do_positive_signEv;\n    _ZNKSt3__110moneypunctIwLb1EE16do_thousands_sepEv;\n    _ZNKSt3__110__time_put8__do_putEPcRS1_PK2tmcc;\n    _ZNKSt3__110__time_put8__do_putEPwRS1_PK2tmcc;\n    _ZNKSt3__111__libcpp_db15__decrementableEPKv;\n    _ZNKSt3__111__libcpp_db15__find_c_from_iEPv;\n    _ZNKSt3__111__libcpp_db15__subscriptableEPKvi;\n    _ZNKSt3__111__libcpp_db17__dereferenceableEPKv;\n    _ZNKSt3__111__libcpp_db17__find_c_and_lockEPv;\n    _ZNKSt3__111__libcpp_db22__less_than_comparableEPKvS2_;\n    _ZNKSt3__111__libcpp_db6unlockEv;\n    _ZNKSt3__111__libcpp_db8__find_cEPv;\n    _ZNKSt3__111__libcpp_db9__addableEPKvi;\n    _ZNKSt3__112bad_weak_ptr4whatEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKc;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjRKS5_jj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEjjPKw;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEjjPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEjjRKS5_jj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw;\n    _ZNKSt3__112ctype_bynameIcE10do_tolowerEc;\n    _ZNKSt3__112ctype_bynameIcE10do_tolowerEPcPKc;\n    _ZNKSt3__112ctype_bynameIcE10do_toupperEc;\n    _ZNKSt3__112ctype_bynameIcE10do_toupperEPcPKc;\n    _ZNKSt3__112ctype_bynameIwE10do_scan_isEtPKwS3_;\n    _ZNKSt3__112ctype_bynameIwE10do_tolowerEPwPKw;\n    _ZNKSt3__112ctype_bynameIwE10do_tolowerEw;\n    _ZNKSt3__112ctype_bynameIwE10do_toupperEPwPKw;\n    _ZNKSt3__112ctype_bynameIwE10do_toupperEw;\n    _ZNKSt3__112ctype_bynameIwE11do_scan_notEtPKwS3_;\n    _ZNKSt3__112ctype_bynameIwE5do_isEPKwS3_Pt;\n    _ZNKSt3__112ctype_bynameIwE5do_isEtw;\n    _ZNKSt3__112ctype_bynameIwE8do_widenEc;\n    _ZNKSt3__112ctype_bynameIwE8do_widenEPKcS3_Pw;\n    _ZNKSt3__112ctype_bynameIwE9do_narrowEPKwS3_cPc;\n    _ZNKSt3__112ctype_bynameIwE9do_narrowEwc;\n    _ZNKSt3__112strstreambuf6pcountEv;\n    _ZNKSt3__113random_device7entropyEv;\n    _ZNKSt3__114__codecvt_utf8IDiE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__114__codecvt_utf8IDiE11do_encodingEv;\n    _ZNKSt3__114__codecvt_utf8IDiE13do_max_lengthEv;\n    _ZNKSt3__114__codecvt_utf8IDiE16do_always_noconvEv;\n    _ZNKSt3__114__codecvt_utf8IDiE5do_inER9mbstate_tPKcS5_RS5_PDiS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IDiE6do_outER9mbstate_tPKDiS5_RS5_PcS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IDiE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__114__codecvt_utf8IDsE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__114__codecvt_utf8IDsE11do_encodingEv;\n    _ZNKSt3__114__codecvt_utf8IDsE13do_max_lengthEv;\n    _ZNKSt3__114__codecvt_utf8IDsE16do_always_noconvEv;\n    _ZNKSt3__114__codecvt_utf8IDsE5do_inER9mbstate_tPKcS5_RS5_PDsS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IDsE6do_outER9mbstate_tPKDsS5_RS5_PcS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IDsE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__114__codecvt_utf8IwE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__114__codecvt_utf8IwE11do_encodingEv;\n    _ZNKSt3__114__codecvt_utf8IwE13do_max_lengthEv;\n    _ZNKSt3__114__codecvt_utf8IwE16do_always_noconvEv;\n    _ZNKSt3__114__codecvt_utf8IwE5do_inER9mbstate_tPKcS5_RS5_PwS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IwE6do_outER9mbstate_tPKwS5_RS5_PcS7_RS7_;\n    _ZNKSt3__114__codecvt_utf8IwE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__114collate_bynameIcE10do_compareEPKcS3_S3_S3_;\n    _ZNKSt3__114collate_bynameIcE12do_transformEPKcS3_;\n    _ZNKSt3__114collate_bynameIwE10do_compareEPKwS3_S3_S3_;\n    _ZNKSt3__114collate_bynameIwE12do_transformEPKwS3_;\n    _ZNKSt3__114error_category10equivalentEiRKNS_15error_conditionE;\n    _ZNKSt3__114error_category10equivalentERKNS_10error_codeEi;\n    _ZNKSt3__114error_category23default_error_conditionEi;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE6getlocEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE6getlocEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE5do_inER9mbstate_tPKcS5_RS5_PDiS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE6do_outER9mbstate_tPKDiS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE5do_inER9mbstate_tPKcS5_RS5_PDiS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE6do_outER9mbstate_tPKDiS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE5do_inER9mbstate_tPKcS5_RS5_PDsS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE6do_outER9mbstate_tPKDsS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE5do_inER9mbstate_tPKcS5_RS5_PDsS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE6do_outER9mbstate_tPKDsS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE5do_inER9mbstate_tPKcS5_RS5_PwS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE6do_outER9mbstate_tPKwS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE11do_encodingEv;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE13do_max_lengthEv;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE16do_always_noconvEv;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE5do_inER9mbstate_tPKcS5_RS5_PwS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE6do_outER9mbstate_tPKwS5_RS5_PcS7_RS7_;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__115error_condition7messageEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE11do_groupingEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE13do_neg_formatEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE13do_pos_formatEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE14do_curr_symbolEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE14do_frac_digitsEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE16do_decimal_pointEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE16do_negative_signEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE16do_positive_signEv;\n    _ZNKSt3__117moneypunct_bynameIcLb0EE16do_thousands_sepEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE11do_groupingEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE13do_neg_formatEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE13do_pos_formatEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE14do_curr_symbolEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE14do_frac_digitsEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE16do_decimal_pointEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE16do_negative_signEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE16do_positive_signEv;\n    _ZNKSt3__117moneypunct_bynameIcLb1EE16do_thousands_sepEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE11do_groupingEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE13do_neg_formatEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE13do_pos_formatEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE14do_curr_symbolEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE14do_frac_digitsEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE16do_decimal_pointEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE16do_negative_signEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE16do_positive_signEv;\n    _ZNKSt3__117moneypunct_bynameIwLb0EE16do_thousands_sepEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE11do_groupingEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE13do_neg_formatEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE13do_pos_formatEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE14do_curr_symbolEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE14do_frac_digitsEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE16do_decimal_pointEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE16do_negative_signEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE16do_positive_signEv;\n    _ZNKSt3__117moneypunct_bynameIwLb1EE16do_thousands_sepEv;\n    _ZNKSt3__118__time_get_storageIcE15__do_date_orderEv;\n    _ZNKSt3__118__time_get_storageIwE15__do_date_orderEv;\n    _ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE11do_encodingEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE13do_max_lengthEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE16do_always_noconvEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE5do_inER9mbstate_tPKcS5_RS5_PDiS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE6do_outER9mbstate_tPKDiS5_RS5_PcS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE11do_encodingEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE13do_max_lengthEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE16do_always_noconvEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE5do_inER9mbstate_tPKcS5_RS5_PDsS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE6do_outER9mbstate_tPKDsS5_RS5_PcS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE10do_unshiftER9mbstate_tPcS4_RS4_;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE11do_encodingEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE13do_max_lengthEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE16do_always_noconvEv;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE5do_inER9mbstate_tPKcS5_RS5_PwS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE6do_outER9mbstate_tPKwS5_RS5_PcS7_RS7_;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE9do_lengthER9mbstate_tPKcS5_j;\n    _ZNKSt3__120__time_get_c_storageIcE3__cEv;\n    _ZNKSt3__120__time_get_c_storageIcE3__rEv;\n    _ZNKSt3__120__time_get_c_storageIcE3__xEv;\n    _ZNKSt3__120__time_get_c_storageIcE3__XEv;\n    _ZNKSt3__120__time_get_c_storageIcE7__am_pmEv;\n    _ZNKSt3__120__time_get_c_storageIcE7__weeksEv;\n    _ZNKSt3__120__time_get_c_storageIcE8__monthsEv;\n    _ZNKSt3__120__time_get_c_storageIwE3__cEv;\n    _ZNKSt3__120__time_get_c_storageIwE3__rEv;\n    _ZNKSt3__120__time_get_c_storageIwE3__xEv;\n    _ZNKSt3__120__time_get_c_storageIwE3__XEv;\n    _ZNKSt3__120__time_get_c_storageIwE7__am_pmEv;\n    _ZNKSt3__120__time_get_c_storageIwE7__weeksEv;\n    _ZNKSt3__120__time_get_c_storageIwE8__monthsEv;\n    _ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv;\n    _ZNKSt3__120__vector_base_commonILb1EE20__throw_out_of_rangeEv;\n    _ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv;\n    _ZNKSt3__121__basic_string_commonILb1EE20__throw_out_of_rangeEv;\n    _ZNKSt3__123__match_any_but_newlineIcE6__execERNS_7__stateIcEE;\n    _ZNKSt3__123__match_any_but_newlineIwE6__execERNS_7__stateIwEE;\n    _ZNKSt3__15ctypeIcE10do_tolowerEc;\n    _ZNKSt3__15ctypeIcE10do_tolowerEPcPKc;\n    _ZNKSt3__15ctypeIcE10do_toupperEc;\n    _ZNKSt3__15ctypeIcE10do_toupperEPcPKc;\n    _ZNKSt3__15ctypeIcE8do_widenEc;\n    _ZNKSt3__15ctypeIcE8do_widenEPKcS3_Pc;\n    _ZNKSt3__15ctypeIcE9do_narrowEcc;\n    _ZNKSt3__15ctypeIcE9do_narrowEPKcS3_cPc;\n    _ZNKSt3__15ctypeIwE10do_scan_isEtPKwS3_;\n    _ZNKSt3__15ctypeIwE10do_tolowerEPwPKw;\n    _ZNKSt3__15ctypeIwE10do_tolowerEw;\n    _ZNKSt3__15ctypeIwE10do_toupperEPwPKw;\n    _ZNKSt3__15ctypeIwE10do_toupperEw;\n    _ZNKSt3__15ctypeIwE11do_scan_notEtPKwS3_;\n    _ZNKSt3__15ctypeIwE5do_isEPKwS3_Pt;\n    _ZNKSt3__15ctypeIwE5do_isEtw;\n    _ZNKSt3__15ctypeIwE8do_widenEc;\n    _ZNKSt3__15ctypeIwE8do_widenEPKcS3_Pw;\n    _ZNKSt3__15ctypeIwE9do_narrowEPKwS3_cPc;\n    _ZNKSt3__15ctypeIwE9do_narrowEwc;\n    _ZNKSt3__16locale4nameEv;\n    _ZNKSt3__16locale9has_facetERNS0_2idE;\n    _ZNKSt3__16locale9use_facetERNS0_2idE;\n    _ZNKSt3__16localeeqERKS0_;\n    _ZNKSt3__17codecvtIcc9mbstate_tE10do_unshiftERS1_PcS4_RS4_;\n    _ZNKSt3__17codecvtIcc9mbstate_tE11do_encodingEv;\n    _ZNKSt3__17codecvtIcc9mbstate_tE13do_max_lengthEv;\n    _ZNKSt3__17codecvtIcc9mbstate_tE16do_always_noconvEv;\n    _ZNKSt3__17codecvtIcc9mbstate_tE5do_inERS1_PKcS5_RS5_PcS7_RS7_;\n    _ZNKSt3__17codecvtIcc9mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_;\n    _ZNKSt3__17codecvtIcc9mbstate_tE9do_lengthERS1_PKcS5_j;\n    _ZNKSt3__17codecvtIDic9mbstate_tE10do_unshiftERS1_PcS4_RS4_;\n    _ZNKSt3__17codecvtIDic9mbstate_tE11do_encodingEv;\n    _ZNKSt3__17codecvtIDic9mbstate_tE13do_max_lengthEv;\n    _ZNKSt3__17codecvtIDic9mbstate_tE16do_always_noconvEv;\n    _ZNKSt3__17codecvtIDic9mbstate_tE5do_inERS1_PKcS5_RS5_PDiS7_RS7_;\n    _ZNKSt3__17codecvtIDic9mbstate_tE6do_outERS1_PKDiS5_RS5_PcS7_RS7_;\n    _ZNKSt3__17codecvtIDic9mbstate_tE9do_lengthERS1_PKcS5_j;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE10do_unshiftERS1_PcS4_RS4_;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE11do_encodingEv;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE13do_max_lengthEv;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE16do_always_noconvEv;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE5do_inERS1_PKcS5_RS5_PDsS7_RS7_;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE6do_outERS1_PKDsS5_RS5_PcS7_RS7_;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE9do_lengthERS1_PKcS5_j;\n    _ZNKSt3__17codecvtIwc9mbstate_tE10do_unshiftERS1_PcS4_RS4_;\n    _ZNKSt3__17codecvtIwc9mbstate_tE11do_encodingEv;\n    _ZNKSt3__17codecvtIwc9mbstate_tE13do_max_lengthEv;\n    _ZNKSt3__17codecvtIwc9mbstate_tE16do_always_noconvEv;\n    _ZNKSt3__17codecvtIwc9mbstate_tE5do_inERS1_PKcS5_RS5_PwS7_RS7_;\n    _ZNKSt3__17codecvtIwc9mbstate_tE6do_outERS1_PKwS5_RS5_PcS7_RS7_;\n    _ZNKSt3__17codecvtIwc9mbstate_tE9do_lengthERS1_PKcS5_j;\n    _ZNKSt3__17collateIcE10do_compareEPKcS3_S3_S3_;\n    _ZNKSt3__17collateIcE12do_transformEPKcS3_;\n    _ZNKSt3__17collateIcE7do_hashEPKcS3_;\n    _ZNKSt3__17collateIwE10do_compareEPKwS3_S3_S3_;\n    _ZNKSt3__17collateIwE12do_transformEPKwS3_;\n    _ZNKSt3__17collateIwE7do_hashEPKwS3_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRb;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRd;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRe;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRf;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRl;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRm;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRt;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRx;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRy;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIjEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIdEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRb;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRd;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRe;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRf;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRl;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRm;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRt;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRx;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRy;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcb;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcd;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEce;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcl;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcm;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPKv;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcx;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcy;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwb;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwd;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwe;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwl;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwm;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKv;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwx;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwy;\n    _ZNKSt3__18ios_base6getlocEv;\n    _ZNKSt3__18messagesIcE6do_getEiiiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNKSt3__18messagesIcE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE;\n    _ZNKSt3__18messagesIcE8do_closeEi;\n    _ZNKSt3__18messagesIwE6do_getEiiiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE;\n    _ZNKSt3__18messagesIwE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE;\n    _ZNKSt3__18messagesIwE8do_closeEi;\n    _ZNKSt3__18numpunctIcE11do_groupingEv;\n    _ZNKSt3__18numpunctIcE11do_truenameEv;\n    _ZNKSt3__18numpunctIcE12do_falsenameEv;\n    _ZNKSt3__18numpunctIcE16do_decimal_pointEv;\n    _ZNKSt3__18numpunctIcE16do_thousands_sepEv;\n    _ZNKSt3__18numpunctIwE11do_groupingEv;\n    _ZNKSt3__18numpunctIwE11do_truenameEv;\n    _ZNKSt3__18numpunctIwE12do_falsenameEv;\n    _ZNKSt3__18numpunctIwE16do_decimal_pointEv;\n    _ZNKSt3__18numpunctIwE16do_thousands_sepEv;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13do_date_orderEv;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIcEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIwEE;\n    _ZNKSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcPK2tmPKcSC_;\n    _ZNKSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPK2tmcc;\n    _ZNKSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwPK2tmPKwSC_;\n    _ZNKSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPK2tmcc;\n    _ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe;\n    _ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIcS3_NS_9allocatorIcEEEE;\n    _ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe;\n    _ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIwS3_NS_9allocatorIwEEEE;\n    _ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEce;\n    _ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEcRKNS_12basic_stringIcS3_NS_9allocatorIcEEEE;\n    _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwe;\n    _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE;\n    _ZNSt11logic_erroraSERKS_;\n    _ZNSt11logic_errorC1EPKc;\n    _ZNSt11logic_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE;\n    _ZNSt11logic_errorC1ERKS_;\n    _ZNSt11logic_errorC2EPKc;\n    _ZNSt11logic_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE;\n    _ZNSt11logic_errorC2ERKS_;\n    _ZNSt12experimental19bad_optional_accessD0Ev;\n    _ZNSt12experimental19bad_optional_accessD1Ev;\n    _ZNSt12experimental19bad_optional_accessD2Ev;\n    _ZNSt13exception_ptraSERKS_;\n    _ZNSt13exception_ptrC1ERKS_;\n    _ZNSt13exception_ptrC2ERKS_;\n    _ZNSt13exception_ptrD1Ev;\n    _ZNSt13exception_ptrD2Ev;\n    _ZNSt13runtime_erroraSERKS_;\n    _ZNSt13runtime_errorC1EPKc;\n    _ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE;\n    _ZNSt13runtime_errorC1ERKS_;\n    _ZNSt13runtime_errorC2EPKc;\n    _ZNSt13runtime_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE;\n    _ZNSt13runtime_errorC2ERKS_;\n    _ZNSt16nested_exceptionC1Ev;\n    _ZNSt16nested_exceptionC2Ev;\n    _ZNSt16nested_exceptionD0Ev;\n    _ZNSt16nested_exceptionD1Ev;\n    _ZNSt16nested_exceptionD2Ev;\n    _ZNSt3__110adopt_lockE;\n    _ZNSt3__110ctype_base5alnumE;\n    _ZNSt3__110ctype_base5alphaE;\n    _ZNSt3__110ctype_base5blankE;\n    _ZNSt3__110ctype_base5cntrlE;\n    _ZNSt3__110ctype_base5digitE;\n    _ZNSt3__110ctype_base5graphE;\n    _ZNSt3__110ctype_base5lowerE;\n    _ZNSt3__110ctype_base5printE;\n    _ZNSt3__110ctype_base5punctE;\n    _ZNSt3__110ctype_base5spaceE;\n    _ZNSt3__110ctype_base5upperE;\n    _ZNSt3__110ctype_base6xdigitE;\n    _ZNSt3__110defer_lockE;\n    _ZNSt3__110istrstreamD0Ev;\n    _ZNSt3__110istrstreamD1Ev;\n    _ZNSt3__110istrstreamD2Ev;\n    _ZNSt3__110moneypunctIcLb0EE2idE;\n    _ZNSt3__110moneypunctIcLb0EE4intlE;\n    _ZNSt3__110moneypunctIcLb1EE2idE;\n    _ZNSt3__110moneypunctIcLb1EE4intlE;\n    _ZNSt3__110moneypunctIwLb0EE2idE;\n    _ZNSt3__110moneypunctIwLb0EE4intlE;\n    _ZNSt3__110moneypunctIwLb1EE2idE;\n    _ZNSt3__110moneypunctIwLb1EE4intlE;\n    _ZNSt3__110__new_clocEv;\n    _ZNSt3__110ostrstreamD0Ev;\n    _ZNSt3__110ostrstreamD1Ev;\n    _ZNSt3__110ostrstreamD2Ev;\n    _ZNSt3__110__sscanf_lEPKcP13locale_structS1_z;\n    _ZNSt3__110__time_getC1EPKc;\n    _ZNSt3__110__time_getC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__110__time_getC2EPKc;\n    _ZNSt3__110__time_getC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__110__time_getD1Ev;\n    _ZNSt3__110__time_getD2Ev;\n    _ZNSt3__110__time_putC1EPKc;\n    _ZNSt3__110__time_putC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__110__time_putC2EPKc;\n    _ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__110__time_putD1Ev;\n    _ZNSt3__110__time_putD2Ev;\n    _ZNSt3__110to_wstringEd;\n    _ZNSt3__110to_wstringEe;\n    _ZNSt3__110to_wstringEf;\n    _ZNSt3__110to_wstringEg;\n    _ZNSt3__110to_wstringEi;\n    _ZNSt3__110to_wstringEj;\n    _ZNSt3__110to_wstringEl;\n    _ZNSt3__110to_wstringEm;\n    _ZNSt3__110to_wstringEx;\n    _ZNSt3__110to_wstringEy;\n    _ZNSt3__111__call_onceERVmPvPFvS2_E;\n    _ZNSt3__111__libcpp_db10__insert_cEPv;\n    _ZNSt3__111__libcpp_db10__insert_iEPv;\n    _ZNSt3__111__libcpp_db11__insert_icEPvPKv;\n    _ZNSt3__111__libcpp_db15__iterator_copyEPvPKv;\n    _ZNSt3__111__libcpp_db16__invalidate_allEPv;\n    _ZNSt3__111__libcpp_db4swapEPvS1_;\n    _ZNSt3__111__libcpp_db9__erase_cEPv;\n    _ZNSt3__111__libcpp_db9__erase_iEPv;\n    _ZNSt3__111__libcpp_dbC1Ev;\n    _ZNSt3__111__libcpp_dbC2Ev;\n    _ZNSt3__111__libcpp_dbD1Ev;\n    _ZNSt3__111__libcpp_dbD2Ev;\n    _ZNSt3__111__money_getIcE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_SF_Ri;\n    _ZNSt3__111__money_getIwE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_SJ_Ri;\n    _ZNSt3__111__money_putIcE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_Ri;\n    _ZNSt3__111__money_putIcE8__formatEPcRS2_S3_jPKcS5_RKNS_5ctypeIcEEbRKNS_10money_base7patternEccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESL_SL_i;\n    _ZNSt3__111__money_putIwE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_Ri;\n    _ZNSt3__111__money_putIwE8__formatEPwRS2_S3_jPKwS5_RKNS_5ctypeIwEEbRKNS_10money_base7patternEwwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNSE_IwNSF_IwEENSH_IwEEEESQ_i;\n    _ZNSt3__111regex_errorC1ENS_15regex_constants10error_typeE;\n    _ZNSt3__111regex_errorC2ENS_15regex_constants10error_typeE;\n    _ZNSt3__111regex_errorD0Ev;\n    _ZNSt3__111regex_errorD1Ev;\n    _ZNSt3__111regex_errorD2Ev;\n    _ZNSt3__111this_thread9sleep_forERKNS_6chrono8durationIxNS_5ratioILx1ELx1000000000EEEEE;\n    _ZNSt3__111timed_mutex4lockEv;\n    _ZNSt3__111timed_mutex6unlockEv;\n    _ZNSt3__111timed_mutex8try_lockEv;\n    _ZNSt3__111timed_mutexC1Ev;\n    _ZNSt3__111timed_mutexC2Ev;\n    _ZNSt3__111timed_mutexD1Ev;\n    _ZNSt3__111timed_mutexD2Ev;\n    _ZNSt3__111try_to_lockE;\n    _ZNSt3__111unique_lockINS_5mutexEE6unlockEv;\n    _ZNSt3__112__asprintf_lEPPcP13locale_structPKcz;\n    _ZNSt3__112bad_weak_ptrD0Ev;\n    _ZNSt3__112bad_weak_ptrD1Ev;\n    _ZNSt3__112bad_weak_ptrD2Ev;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEjjjjjjPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5eraseEjj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_jj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_jj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcjj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjRKS5_jj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueENS_11__wrap_iterIPcEEE4typeENSB_IS8_EESA_SA_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjRKS5_jj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_jjRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_RKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_jjRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_RKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEjjjjjjPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5eraseEjj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_jj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_jj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignIPwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwjj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjRKS5_jj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueENS_11__wrap_iterIPwEEE4typeENSB_IS8_EESA_SA_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjRKS5_jj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEjjjjjj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_jjRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_RKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_jjRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_RKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev;\n    _ZNSt3__112ctype_bynameIcEC1EPKcj;\n    _ZNSt3__112ctype_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__112ctype_bynameIcEC2EPKcj;\n    _ZNSt3__112ctype_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__112ctype_bynameIcED0Ev;\n    _ZNSt3__112ctype_bynameIcED1Ev;\n    _ZNSt3__112ctype_bynameIcED2Ev;\n    _ZNSt3__112ctype_bynameIwEC1EPKcj;\n    _ZNSt3__112ctype_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__112ctype_bynameIwEC2EPKcj;\n    _ZNSt3__112ctype_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__112ctype_bynameIwED0Ev;\n    _ZNSt3__112ctype_bynameIwED1Ev;\n    _ZNSt3__112ctype_bynameIwED2Ev;\n    _ZNSt3__112__do_nothingEPv;\n    _ZNSt3__112future_errorC1ENS_10error_codeE;\n    _ZNSt3__112future_errorC2ENS_10error_codeE;\n    _ZNSt3__112future_errorC2ERKS0_;\n    _ZNSt3__112future_errorD0Ev;\n    _ZNSt3__112future_errorD1Ev;\n    _ZNSt3__112future_errorD2Ev;\n    _ZNSt3__112__get_sp_mutEPKv;\n    _ZNSt3__112__next_primeEj;\n    _ZNSt3__112__next_primeEm;\n    _ZNSt3__112placeholders2_1E;\n    _ZNSt3__112placeholders2_2E;\n    _ZNSt3__112placeholders2_3E;\n    _ZNSt3__112placeholders2_4E;\n    _ZNSt3__112placeholders2_5E;\n    _ZNSt3__112placeholders2_6E;\n    _ZNSt3__112placeholders2_7E;\n    _ZNSt3__112placeholders2_8E;\n    _ZNSt3__112placeholders2_9E;\n    _ZNSt3__112placeholders3_10E;\n    _ZNSt3__112__rotate_gcdINS_11__wrap_iterIPcEEEET_S4_S4_S4_;\n    _ZNSt3__112__rotate_gcdINS_11__wrap_iterIPwEEEET_S4_S4_S4_;\n    _ZNSt3__112__rs_default4__c_E;\n    _ZNSt3__112__rs_defaultC1ERKS0_;\n    _ZNSt3__112__rs_defaultC1Ev;\n    _ZNSt3__112__rs_defaultC2ERKS0_;\n    _ZNSt3__112__rs_defaultC2Ev;\n    _ZNSt3__112__rs_defaultclEv;\n    _ZNSt3__112__rs_defaultD1Ev;\n    _ZNSt3__112__rs_defaultD2Ev;\n    _ZNSt3__112__snprintf_lEPcjP13locale_structPKcz;\n    _ZNSt3__112strstreambuf3strEv;\n    _ZNSt3__112strstreambuf4swapERS0_;\n    _ZNSt3__112strstreambuf6freezeEb;\n    _ZNSt3__112strstreambuf6__initEPciS1_;\n    _ZNSt3__112strstreambuf7seekoffExNS_8ios_base7seekdirEj;\n    _ZNSt3__112strstreambuf7seekposENS_4fposI9mbstate_tEEj;\n    _ZNSt3__112strstreambuf8overflowEi;\n    _ZNSt3__112strstreambuf9pbackfailEi;\n    _ZNSt3__112strstreambuf9underflowEv;\n    _ZNSt3__112strstreambufC1Ei;\n    _ZNSt3__112strstreambufC1EPaiS1_;\n    _ZNSt3__112strstreambufC1EPciS1_;\n    _ZNSt3__112strstreambufC1EPFPvjEPFvS1_E;\n    _ZNSt3__112strstreambufC1EPhiS1_;\n    _ZNSt3__112strstreambufC1EPKai;\n    _ZNSt3__112strstreambufC1EPKci;\n    _ZNSt3__112strstreambufC1EPKhi;\n    _ZNSt3__112strstreambufC2Ei;\n    _ZNSt3__112strstreambufC2EPaiS1_;\n    _ZNSt3__112strstreambufC2EPciS1_;\n    _ZNSt3__112strstreambufC2EPFPvjEPFvS1_E;\n    _ZNSt3__112strstreambufC2EPhiS1_;\n    _ZNSt3__112strstreambufC2EPKai;\n    _ZNSt3__112strstreambufC2EPKci;\n    _ZNSt3__112strstreambufC2EPKhi;\n    _ZNSt3__112strstreambufD0Ev;\n    _ZNSt3__112strstreambufD1Ev;\n    _ZNSt3__112strstreambufD2Ev;\n    _ZNSt3__112system_error6__initERKNS_10error_codeENS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__112system_errorC1EiRKNS_14error_categoryE;\n    _ZNSt3__112system_errorC1EiRKNS_14error_categoryEPKc;\n    _ZNSt3__112system_errorC1EiRKNS_14error_categoryERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__112system_errorC1ENS_10error_codeE;\n    _ZNSt3__112system_errorC1ENS_10error_codeEPKc;\n    _ZNSt3__112system_errorC1ENS_10error_codeERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__112system_errorC2EiRKNS_14error_categoryE;\n    _ZNSt3__112system_errorC2EiRKNS_14error_categoryEPKc;\n    _ZNSt3__112system_errorC2EiRKNS_14error_categoryERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__112system_errorC2ENS_10error_codeE;\n    _ZNSt3__112system_errorC2ENS_10error_codeEPKc;\n    _ZNSt3__112system_errorC2ENS_10error_codeERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__112system_errorD0Ev;\n    _ZNSt3__112system_errorD1Ev;\n    _ZNSt3__112system_errorD2Ev;\n    _ZNSt3__113allocator_argE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPci;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPcic;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERc;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERNS_15basic_streambufIcS2_EEc;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4peekEv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4readEPci;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4swapERS3_;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4syncEv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5seekgENS_4fposI9mbstate_tEE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5seekgExNS_8ios_base7seekdirE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5tellgEv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5ungetEv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6ignoreEii;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6sentryC1ERS3_b;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6sentryC2ERS3_b;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPci;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPcic;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7putbackEc;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE8readsomeEPci;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED2Ev;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_8ios_baseES5_E;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_9basic_iosIcS2_EES6_E;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRS3_S4_E;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERb;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERd;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERe;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERf;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERi;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERj;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERl;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERm;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERPv;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERs;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERt;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERx;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERy;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwi;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwiw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERNS_15basic_streambufIwS2_EEw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4peekEv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4readEPwi;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4swapERS3_;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4syncEv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5seekgENS_4fposI9mbstate_tEE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5seekgExNS_8ios_base7seekdirE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5tellgEv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5ungetEv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6ignoreEii;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6sentryC1ERS3_b;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6sentryC2ERS3_b;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwi;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwiw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7putbackEw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE8readsomeEPwi;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED2Ev;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_8ios_baseES5_E;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_9basic_iosIwS2_EES6_E;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRS3_S4_E;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERb;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERd;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERe;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERf;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERi;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERj;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERl;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERm;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERPv;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERs;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERt;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERx;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERy;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE4swapERS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpENS_4fposI9mbstate_tEE;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpExNS_8ios_base7seekdirE;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5tellpEv;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5writeEPKci;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD2Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED2Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEb;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEd;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEe;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEf;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEi;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEj;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEl;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEm;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_8ios_baseES5_E;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_9basic_iosIcS2_EES6_E;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRS3_S4_E;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPKv;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEs;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEt;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEx;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEy;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE3putEw;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE4swapERS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5flushEv;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpENS_4fposI9mbstate_tEE;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpExNS_8ios_base7seekdirE;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5tellpEv;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5writeEPKwi;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryC1ERS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryC2ERS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD1Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED2Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEb;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEd;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEe;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEf;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEi;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEj;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEl;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEm;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_8ios_baseES5_E;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_9basic_iosIwS2_EES6_E;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRS3_S4_E;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPKv;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEs;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEt;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEx;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEy;\n    _ZNSt3__113find_first_ofIPKcS2_PFbccEEET_S5_S5_T0_S6_T1_;\n    _ZNSt3__113find_first_ofIPKwS2_PFbwwEEET_S5_S5_T0_S6_T1_;\n    _ZNSt3__113__lower_boundIRNS_6__lessIjjEEPKjjEET0_S6_S6_RKT1_T_;\n    _ZNSt3__113random_deviceC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__113random_deviceC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__113random_deviceclEv;\n    _ZNSt3__113random_deviceD1Ev;\n    _ZNSt3__113random_deviceD2Ev;\n    _ZNSt3__113__rotate_leftINS_11__wrap_iterIPcEEEET_S4_S4_;\n    _ZNSt3__113__rotate_leftINS_11__wrap_iterIPwEEEET_S4_S4_;\n    _ZNSt3__113shared_futureIvEaSERKS1_;\n    _ZNSt3__113shared_futureIvED1Ev;\n    _ZNSt3__113shared_futureIvED2Ev;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEE4swapERS3_;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED2Ev;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tED0Ev;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tED1Ev;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tED2Ev;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tED0Ev;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tED1Ev;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tED2Ev;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tED0Ev;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tED1Ev;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tED2Ev;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tED0Ev;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tED1Ev;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tED2Ev;\n    _ZNSt3__114__codecvt_utf8IDiED0Ev;\n    _ZNSt3__114__codecvt_utf8IDiED2Ev;\n    _ZNSt3__114__codecvt_utf8IDsED0Ev;\n    _ZNSt3__114__codecvt_utf8IDsED2Ev;\n    _ZNSt3__114__codecvt_utf8IwED0Ev;\n    _ZNSt3__114__codecvt_utf8IwED2Ev;\n    _ZNSt3__114collate_bynameIcEC1EPKcj;\n    _ZNSt3__114collate_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114collate_bynameIcEC2EPKcj;\n    _ZNSt3__114collate_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114collate_bynameIcED0Ev;\n    _ZNSt3__114collate_bynameIcED1Ev;\n    _ZNSt3__114collate_bynameIcED2Ev;\n    _ZNSt3__114collate_bynameIwEC1EPKcj;\n    _ZNSt3__114collate_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114collate_bynameIwEC2EPKcj;\n    _ZNSt3__114collate_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114collate_bynameIwED0Ev;\n    _ZNSt3__114collate_bynameIwED1Ev;\n    _ZNSt3__114collate_bynameIwED2Ev;\n    _ZNSt3__114error_categoryC1Ev;\n    _ZNSt3__114error_categoryC2Ev;\n    _ZNSt3__114error_categoryD0Ev;\n    _ZNSt3__114error_categoryD1Ev;\n    _ZNSt3__114error_categoryD2Ev;\n    _ZNSt3__114__get_const_dbEv;\n    _ZNSt3__114__num_get_base10__get_baseERNS_8ios_baseE;\n    _ZNSt3__114__num_get_base5__srcE;\n    _ZNSt3__114__num_put_base12__format_intEPcPKcbj;\n    _ZNSt3__114__num_put_base14__format_floatEPcPKcj;\n    _ZNSt3__114__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE;\n    _ZNSt3__114__rotate_rightINS_11__wrap_iterIPcEEEET_S4_S4_;\n    _ZNSt3__114__rotate_rightINS_11__wrap_iterIPwEEEET_S4_S4_;\n    _ZNSt3__114__shared_count12__add_sharedEv;\n    _ZNSt3__114__shared_count16__release_sharedEv;\n    _ZNSt3__114__shared_countD0Ev;\n    _ZNSt3__114__shared_countD1Ev;\n    _ZNSt3__114__shared_countD2Ev;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekoffExNS_8ios_base7seekdirEj;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekposENS_4fposI9mbstate_tEEj;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setgEPcS4_S4_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setpEPcS4_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4swapERS3_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4syncEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5gbumpEi;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5pbumpEi;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetcEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetnEPci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputcEc;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputnEPKci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5uflowEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6sbumpcEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6setbufEPci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6snextcEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7pubsyncEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7seekoffExNS_8ios_base7seekdirEj;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7seekposENS_4fposI9mbstate_tEEj;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7sungetcEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8in_availEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8overflowEi;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8pubimbueERKNS_6localeE;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pbackfailEi;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pubsetbufEPci;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9showmanycEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9sputbackcEc;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9underflowEv;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEaSERKS3_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC1ERKS3_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC1Ev;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2ERKS3_;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2Ev;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED0Ev;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED1Ev;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED2Ev;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekoffExNS_8ios_base7seekdirEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekposENS_4fposI9mbstate_tEEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setgEPwS4_S4_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setpEPwS4_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4swapERS3_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4syncEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5gbumpEi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5pbumpEi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetcEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetnEPwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputcEw;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputnEPKwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5uflowEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6sbumpcEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6setbufEPwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6snextcEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsgetnEPwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsputnEPKwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7pubsyncEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7seekoffExNS_8ios_base7seekdirEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7seekposENS_4fposI9mbstate_tEEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7sungetcEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8in_availEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8overflowEi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8pubimbueERKNS_6localeE;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pbackfailEi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pubsetbufEPwi;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9showmanycEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9sputbackcEw;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9underflowEv;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEaSERKS3_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC1ERKS3_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC1Ev;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC2ERKS3_;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC2Ev;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED0Ev;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED1Ev;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED2Ev;\n    _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev;\n    _ZNSt3__115__codecvt_utf16IDiLb0EED2Ev;\n    _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev;\n    _ZNSt3__115__codecvt_utf16IDiLb1EED2Ev;\n    _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev;\n    _ZNSt3__115__codecvt_utf16IDsLb0EED2Ev;\n    _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev;\n    _ZNSt3__115__codecvt_utf16IDsLb1EED2Ev;\n    _ZNSt3__115__codecvt_utf16IwLb0EED0Ev;\n    _ZNSt3__115__codecvt_utf16IwLb0EED2Ev;\n    _ZNSt3__115__codecvt_utf16IwLb1EED0Ev;\n    _ZNSt3__115__codecvt_utf16IwLb1EED2Ev;\n    _ZNSt3__115future_categoryEv;\n    _ZNSt3__115__get_classnameEPKcb;\n    _ZNSt3__115__num_get_floatIdEET_PKcS3_Rj;\n    _ZNSt3__115__num_get_floatIeEET_PKcS3_Rj;\n    _ZNSt3__115__num_get_floatIfEET_PKcS3_Rj;\n    _ZNSt3__115numpunct_bynameIcE6__initEPKc;\n    _ZNSt3__115numpunct_bynameIcEC1EPKcj;\n    _ZNSt3__115numpunct_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115numpunct_bynameIcEC2EPKcj;\n    _ZNSt3__115numpunct_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115numpunct_bynameIcED0Ev;\n    _ZNSt3__115numpunct_bynameIcED1Ev;\n    _ZNSt3__115numpunct_bynameIcED2Ev;\n    _ZNSt3__115numpunct_bynameIwE6__initEPKc;\n    _ZNSt3__115numpunct_bynameIwEC1EPKcj;\n    _ZNSt3__115numpunct_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115numpunct_bynameIwEC2EPKcj;\n    _ZNSt3__115numpunct_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115numpunct_bynameIwED0Ev;\n    _ZNSt3__115numpunct_bynameIwED1Ev;\n    _ZNSt3__115numpunct_bynameIwED2Ev;\n    _ZNSt3__115recursive_mutex4lockEv;\n    _ZNSt3__115recursive_mutex6unlockEv;\n    _ZNSt3__115recursive_mutex8try_lockEv;\n    _ZNSt3__115recursive_mutexC1Ev;\n    _ZNSt3__115recursive_mutexC2Ev;\n    _ZNSt3__115recursive_mutexD1Ev;\n    _ZNSt3__115recursive_mutexD2Ev;\n    _ZNSt3__115system_categoryEv;\n    _ZNSt3__115__thread_struct25notify_all_at_thread_exitEPNS_18condition_variableEPNS_5mutexE;\n    _ZNSt3__115__thread_struct27__make_ready_at_thread_exitEPNS_17__assoc_sub_stateE;\n    _ZNSt3__115__thread_structC1Ev;\n    _ZNSt3__115__thread_structC2Ev;\n    _ZNSt3__115__thread_structD1Ev;\n    _ZNSt3__115__thread_structD2Ev;\n    _ZNSt3__116__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj;\n    _ZNSt3__116generic_categoryEv;\n    _ZNSt3__116__narrow_to_utf8ILj16EED0Ev;\n    _ZNSt3__116__narrow_to_utf8ILj16EED1Ev;\n    _ZNSt3__116__narrow_to_utf8ILj16EED2Ev;\n    _ZNSt3__116__narrow_to_utf8ILj32EED0Ev;\n    _ZNSt3__116__narrow_to_utf8ILj32EED1Ev;\n    _ZNSt3__116__narrow_to_utf8ILj32EED2Ev;\n    _ZNSt3__117__assoc_sub_state10__sub_waitERNS_11unique_lockINS_5mutexEEE;\n    _ZNSt3__117__assoc_sub_state12__make_readyEv;\n    _ZNSt3__117__assoc_sub_state13set_exceptionESt13exception_ptr;\n    _ZNSt3__117__assoc_sub_state16__on_zero_sharedEv;\n    _ZNSt3__117__assoc_sub_state24set_value_at_thread_exitEv;\n    _ZNSt3__117__assoc_sub_state28set_exception_at_thread_exitESt13exception_ptr;\n    _ZNSt3__117__assoc_sub_state4copyEv;\n    _ZNSt3__117__assoc_sub_state4waitEv;\n    _ZNSt3__117__assoc_sub_state9__executeEv;\n    _ZNSt3__117__assoc_sub_state9set_valueEv;\n    _ZNSt3__117__assoc_sub_stateD0Ev;\n    _ZNSt3__117__assoc_sub_stateD2Ev;\n    _ZNSt3__117declare_reachableEPv;\n    _ZNSt3__117iostream_categoryEv;\n    _ZNSt3__117moneypunct_bynameIcLb0EE4initEPKc;\n    _ZNSt3__117moneypunct_bynameIcLb1EE4initEPKc;\n    _ZNSt3__117moneypunct_bynameIwLb0EE4initEPKc;\n    _ZNSt3__117moneypunct_bynameIwLb1EE4initEPKc;\n    _ZNSt3__117__widen_from_utf8ILj16EED0Ev;\n    _ZNSt3__117__widen_from_utf8ILj16EED1Ev;\n    _ZNSt3__117__widen_from_utf8ILj16EED2Ev;\n    _ZNSt3__117__widen_from_utf8ILj32EED0Ev;\n    _ZNSt3__117__widen_from_utf8ILj32EED1Ev;\n    _ZNSt3__117__widen_from_utf8ILj32EED2Ev;\n    _ZNSt3__118condition_variable10notify_allEv;\n    _ZNSt3__118condition_variable10notify_oneEv;\n    _ZNSt3__118condition_variable15__do_timed_waitERNS_11unique_lockINS_5mutexEEENS_6chrono10time_pointINS5_12system_clockENS5_8durationIxNS_5ratioILx1ELx1000000000EEEEEEE;\n    _ZNSt3__118condition_variable4waitERNS_11unique_lockINS_5mutexEEE;\n    _ZNSt3__118condition_variableD1Ev;\n    _ZNSt3__118condition_variableD2Ev;\n    _ZNSt3__118get_pointer_safetyEv;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIaaEEPaEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIccEEPcEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIddEEPdEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIeeEEPeEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIffEEPfEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIhhEEPhEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIiiEEPiEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIjjEEPjEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIllEEPlEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessImmEEPmEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIssEEPsEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIttEEPtEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIwwEEPwEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIxxEEPxEEvT0_S5_T_;\n    _ZNSt3__118__insertion_sort_3IRNS_6__lessIyyEEPyEEvT0_S5_T_;\n    _ZNSt3__118shared_timed_mutex11lock_sharedEv;\n    _ZNSt3__118shared_timed_mutex13unlock_sharedEv;\n    _ZNSt3__118shared_timed_mutex15try_lock_sharedEv;\n    _ZNSt3__118shared_timed_mutex4lockEv;\n    _ZNSt3__118shared_timed_mutex6unlockEv;\n    _ZNSt3__118shared_timed_mutex8try_lockEv;\n    _ZNSt3__118shared_timed_mutexC1Ev;\n    _ZNSt3__118shared_timed_mutexC2Ev;\n    _ZNSt3__118__time_get_storageIcE4initERKNS_5ctypeIcEE;\n    _ZNSt3__118__time_get_storageIcE9__analyzeEcRKNS_5ctypeIcEE;\n    _ZNSt3__118__time_get_storageIcEC1EPKc;\n    _ZNSt3__118__time_get_storageIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__118__time_get_storageIcEC2EPKc;\n    _ZNSt3__118__time_get_storageIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__118__time_get_storageIwE4initERKNS_5ctypeIwEE;\n    _ZNSt3__118__time_get_storageIwE9__analyzeEcRKNS_5ctypeIwEE;\n    _ZNSt3__118__time_get_storageIwEC1EPKc;\n    _ZNSt3__118__time_get_storageIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__118__time_get_storageIwEC2EPKc;\n    _ZNSt3__118__time_get_storageIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__119declare_no_pointersEPcj;\n    _ZNSt3__119piecewise_constructE;\n    _ZNSt3__119__shared_weak_count10__add_weakEv;\n    _ZNSt3__119__shared_weak_count12__add_sharedEv;\n    _ZNSt3__119__shared_weak_count14__release_weakEv;\n    _ZNSt3__119__shared_weak_count16__release_sharedEv;\n    _ZNSt3__119__shared_weak_count4lockEv;\n    _ZNSt3__119__shared_weak_countD0Ev;\n    _ZNSt3__119__shared_weak_countD1Ev;\n    _ZNSt3__119__shared_weak_countD2Ev;\n    _ZNSt3__119__start_std_streamsE;\n    _ZNSt3__119__thread_local_dataEv;\n    _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev;\n    _ZNSt3__120__codecvt_utf8_utf16IDiED2Ev;\n    _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev;\n    _ZNSt3__120__codecvt_utf8_utf16IDsED2Ev;\n    _ZNSt3__120__codecvt_utf8_utf16IwED0Ev;\n    _ZNSt3__120__codecvt_utf8_utf16IwED2Ev;\n    _ZNSt3__120__get_collation_nameEPKc;\n    _ZNSt3__120__throw_system_errorEiPKc;\n    _ZNSt3__120__time_get_c_storageIcEC2Ev;\n    _ZNSt3__120__time_get_c_storageIwEC2Ev;\n    _ZNSt3__121__murmur2_or_cityhashIjLj32EEclEPKvj;\n    _ZNSt3__121recursive_timed_mutex4lockEv;\n    _ZNSt3__121recursive_timed_mutex6unlockEv;\n    _ZNSt3__121recursive_timed_mutex8try_lockEv;\n    _ZNSt3__121recursive_timed_mutexC1Ev;\n    _ZNSt3__121recursive_timed_mutexC2Ev;\n    _ZNSt3__121recursive_timed_mutexD1Ev;\n    _ZNSt3__121recursive_timed_mutexD2Ev;\n    _ZNSt3__121__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv;\n    _ZNSt3__121__thread_specific_ptrINS_15__thread_structEEC2Ev;\n    _ZNSt3__121__thread_specific_ptrINS_15__thread_structEED2Ev;\n    _ZNSt3__121__throw_runtime_errorEPKc;\n    _ZNSt3__121undeclare_no_pointersEPcj;\n    _ZNSt3__121__undeclare_reachableEPv;\n    _ZNSt3__122__release_shared_countclEPNS_14__shared_countE;\n    _ZNSt3__123mersenne_twister_engineIjLj32ELj624ELj397ELj31ELj2567483615ELj11ELj4294967295ELj7ELj2636928640ELj15ELj4022730752ELj18ELj1812433253EE4seedEj;\n    _ZNSt3__123mersenne_twister_engineIjLj32ELj624ELj397ELj31ELj2567483615ELj11ELj4294967295ELj7ELj2636928640ELj15ELj4022730752ELj18ELj1812433253EEclEv;\n    _ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE;\n    _ZNSt3__125__num_get_signed_integralIlEET_PKcS3_Rji;\n    _ZNSt3__125__num_get_signed_integralIxEET_PKcS3_Rji;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIaaEEPaEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIccEEPcEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIddEEPdEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIeeEEPeEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIffEEPfEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIhhEEPhEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIiiEEPiEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIjjEEPjEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIllEEPlEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessImmEEPmEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIssEEPsEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIttEEPtEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIwwEEPwEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIxxEEPxEEbT0_S5_T_;\n    _ZNSt3__127__insertion_sort_incompleteIRNS_6__lessIyyEEPyEEbT0_S5_T_;\n    _ZNSt3__127__num_get_unsigned_integralIjEET_PKcS3_Rji;\n    _ZNSt3__127__num_get_unsigned_integralImEET_PKcS3_Rji;\n    _ZNSt3__127__num_get_unsigned_integralItEET_PKcS3_Rji;\n    _ZNSt3__127__num_get_unsigned_integralIyEET_PKcS3_Rji;\n    _ZNSt3__13cinE;\n    _ZNSt3__14cerrE;\n    _ZNSt3__14clogE;\n    _ZNSt3__14coutE;\n    _ZNSt3__14stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPj;\n    _ZNSt3__14stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPj;\n    _ZNSt3__14stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPj;\n    _ZNSt3__14stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPj;\n    _ZNSt3__14stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPji;\n    _ZNSt3__14stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPji;\n    _ZNSt3__14stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPji;\n    _ZNSt3__14stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPji;\n    _ZNSt3__14wcinE;\n    _ZNSt3__15alignEjjRPvRj;\n    _ZNSt3__15ctypeIcE13classic_tableEv;\n    _ZNSt3__15ctypeIcE2idE;\n    _ZNSt3__15ctypeIcEC1EPKtbj;\n    _ZNSt3__15ctypeIcEC2EPKtbj;\n    _ZNSt3__15ctypeIcED0Ev;\n    _ZNSt3__15ctypeIcED1Ev;\n    _ZNSt3__15ctypeIcED2Ev;\n    _ZNSt3__15ctypeIwE2idE;\n    _ZNSt3__15ctypeIwED0Ev;\n    _ZNSt3__15ctypeIwED1Ev;\n    _ZNSt3__15ctypeIwED2Ev;\n    _ZNSt3__15mutex4lockEv;\n    _ZNSt3__15mutex6unlockEv;\n    _ZNSt3__15mutex8try_lockEv;\n    _ZNSt3__15mutexD1Ev;\n    _ZNSt3__15mutexD2Ev;\n    _ZNSt3__15stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPj;\n    _ZNSt3__15stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPj;\n    _ZNSt3__15stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPji;\n    _ZNSt3__15stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPji;\n    _ZNSt3__15stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPji;\n    _ZNSt3__15stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPji;\n    _ZNSt3__15wcerrE;\n    _ZNSt3__15wclogE;\n    _ZNSt3__15wcoutE;\n    _ZNSt3__16chrono12steady_clock3nowEv;\n    _ZNSt3__16chrono12steady_clock9is_steadyE;\n    _ZNSt3__16chrono12system_clock11from_time_tEl;\n    _ZNSt3__16chrono12system_clock3nowEv;\n    _ZNSt3__16chrono12system_clock9is_steadyE;\n    _ZNSt3__16chrono12system_clock9to_time_tERKNS0_10time_pointIS1_NS0_8durationIxNS_5ratioILx1ELx1000000EEEEEEE;\n    _ZNSt3__16__clocEv;\n    _ZNSt3__16futureIvE3getEv;\n    _ZNSt3__16futureIvEC1EPNS_17__assoc_sub_stateE;\n    _ZNSt3__16futureIvEC2EPNS_17__assoc_sub_stateE;\n    _ZNSt3__16futureIvED1Ev;\n    _ZNSt3__16futureIvED2Ev;\n    _ZNSt3__16gslice6__initEj;\n    _ZNSt3__16locale14__install_ctorERKS0_PNS0_5facetEl;\n    _ZNSt3__16locale2id5__getEv;\n    _ZNSt3__16locale2id6__initEv;\n    _ZNSt3__16locale2id9__next_idE;\n    _ZNSt3__16locale3allE;\n    _ZNSt3__16locale4noneE;\n    _ZNSt3__16locale4timeE;\n    _ZNSt3__16locale5ctypeE;\n    _ZNSt3__16locale5facet16__on_zero_sharedEv;\n    _ZNSt3__16locale5facetD0Ev;\n    _ZNSt3__16locale5facetD1Ev;\n    _ZNSt3__16locale5facetD2Ev;\n    _ZNSt3__16locale6globalERKS0_;\n    _ZNSt3__16locale7classicEv;\n    _ZNSt3__16locale7collateE;\n    _ZNSt3__16locale7numericE;\n    _ZNSt3__16locale8__globalEv;\n    _ZNSt3__16locale8messagesE;\n    _ZNSt3__16locale8monetaryE;\n    _ZNSt3__16localeaSERKS0_;\n    _ZNSt3__16localeC1EPKc;\n    _ZNSt3__16localeC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__16localeC1ERKS0_;\n    _ZNSt3__16localeC1ERKS0_PKci;\n    _ZNSt3__16localeC1ERKS0_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi;\n    _ZNSt3__16localeC1ERKS0_S2_i;\n    _ZNSt3__16localeC1Ev;\n    _ZNSt3__16localeC2EPKc;\n    _ZNSt3__16localeC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNSt3__16localeC2ERKS0_;\n    _ZNSt3__16localeC2ERKS0_PKci;\n    _ZNSt3__16localeC2ERKS0_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi;\n    _ZNSt3__16localeC2ERKS0_S2_i;\n    _ZNSt3__16localeC2Ev;\n    _ZNSt3__16localeD1Ev;\n    _ZNSt3__16localeD2Ev;\n    _ZNSt3__16__sortIRNS_6__lessIaaEEPaEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIccEEPcEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIddEEPdEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIeeEEPeEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIffEEPfEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIhhEEPhEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIiiEEPiEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIjjEEPjEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIllEEPlEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessImmEEPmEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIssEEPsEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIttEEPtEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIwwEEPwEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIxxEEPxEEvT0_S5_T_;\n    _ZNSt3__16__sortIRNS_6__lessIyyEEPyEEvT0_S5_T_;\n    _ZNSt3__16stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPji;\n    _ZNSt3__16stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPji;\n    _ZNSt3__16thread20hardware_concurrencyEv;\n    _ZNSt3__16thread4joinEv;\n    _ZNSt3__16thread6detachEv;\n    _ZNSt3__16threadD1Ev;\n    _ZNSt3__16threadD2Ev;\n    _ZNSt3__17codecvtIcc9mbstate_tE2idE;\n    _ZNSt3__17codecvtIcc9mbstate_tED0Ev;\n    _ZNSt3__17codecvtIcc9mbstate_tED1Ev;\n    _ZNSt3__17codecvtIcc9mbstate_tED2Ev;\n    _ZNSt3__17codecvtIDic9mbstate_tE2idE;\n    _ZNSt3__17codecvtIDic9mbstate_tED0Ev;\n    _ZNSt3__17codecvtIDic9mbstate_tED1Ev;\n    _ZNSt3__17codecvtIDic9mbstate_tED2Ev;\n    _ZNSt3__17codecvtIDsc9mbstate_tE2idE;\n    _ZNSt3__17codecvtIDsc9mbstate_tED0Ev;\n    _ZNSt3__17codecvtIDsc9mbstate_tED1Ev;\n    _ZNSt3__17codecvtIDsc9mbstate_tED2Ev;\n    _ZNSt3__17codecvtIwc9mbstate_tE2idE;\n    _ZNSt3__17codecvtIwc9mbstate_tEC1Ej;\n    _ZNSt3__17codecvtIwc9mbstate_tEC1EPKcj;\n    _ZNSt3__17codecvtIwc9mbstate_tEC2Ej;\n    _ZNSt3__17codecvtIwc9mbstate_tEC2EPKcj;\n    _ZNSt3__17codecvtIwc9mbstate_tED0Ev;\n    _ZNSt3__17codecvtIwc9mbstate_tED1Ev;\n    _ZNSt3__17codecvtIwc9mbstate_tED2Ev;\n    _ZNSt3__17collateIcE2idE;\n    _ZNSt3__17collateIcED0Ev;\n    _ZNSt3__17collateIcED1Ev;\n    _ZNSt3__17collateIcED2Ev;\n    _ZNSt3__17collateIwE2idE;\n    _ZNSt3__17collateIwED0Ev;\n    _ZNSt3__17collateIwED1Ev;\n    _ZNSt3__17collateIwED2Ev;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__17promiseIvE10get_futureEv;\n    _ZNSt3__17promiseIvE13set_exceptionESt13exception_ptr;\n    _ZNSt3__17promiseIvE24set_value_at_thread_exitEv;\n    _ZNSt3__17promiseIvE28set_exception_at_thread_exitESt13exception_ptr;\n    _ZNSt3__17promiseIvE9set_valueEv;\n    _ZNSt3__17promiseIvEC1Ev;\n    _ZNSt3__17promiseIvEC2Ev;\n    _ZNSt3__17promiseIvED1Ev;\n    _ZNSt3__17promiseIvED2Ev;\n    _ZNSt3__17__sort3IRNS_6__lessIaaEEPaEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIccEEPcEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIddEEPdEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIeeEEPeEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIffEEPfEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIhhEEPhEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIiiEEPiEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIjjEEPjEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIllEEPlEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessImmEEPmEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIssEEPsEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIttEEPtEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIwwEEPwEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIxxEEPxEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort3IRNS_6__lessIyyEEPyEEjT0_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIaaEEPaEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIccEEPcEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIddEEPdEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIeeEEPeEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIffEEPfEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIhhEEPhEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIiiEEPiEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIjjEEPjEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIllEEPlEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessImmEEPmEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIssEEPsEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIttEEPtEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIwwEEPwEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIxxEEPxEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort4IRNS_6__lessIyyEEPyEEjT0_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIaaEEPaEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIccEEPcEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIddEEPdEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIeeEEPeEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIffEEPfEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIhhEEPhEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIiiEEPiEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIjjEEPjEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIllEEPlEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessImmEEPmEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIssEEPsEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIttEEPtEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIwwEEPwEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIxxEEPxEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__17__sort5IRNS_6__lessIyyEEPyEEjT0_S5_S5_S5_S5_T_;\n    _ZNSt3__18__c_node5__addEPNS_8__i_nodeE;\n    _ZNSt3__18__c_nodeD0Ev;\n    _ZNSt3__18__c_nodeD1Ev;\n    _ZNSt3__18__c_nodeD2Ev;\n    _ZNSt3__18__get_dbEv;\n    _ZNSt3__18__i_nodeD1Ev;\n    _ZNSt3__18__i_nodeD2Ev;\n    _ZNSt3__18ios_base10floatfieldE;\n    _ZNSt3__18ios_base10scientificE;\n    _ZNSt3__18ios_base11adjustfieldE;\n    _ZNSt3__18ios_base15sync_with_stdioEb;\n    _ZNSt3__18ios_base16__call_callbacksENS0_5eventE;\n    _ZNSt3__18ios_base17register_callbackEPFvNS0_5eventERS0_iEi;\n    _ZNSt3__18ios_base2inE;\n    _ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv;\n    _ZNSt3__18ios_base34__set_failbit_and_consider_rethrowEv;\n    _ZNSt3__18ios_base3appE;\n    _ZNSt3__18ios_base3ateE;\n    _ZNSt3__18ios_base3decE;\n    _ZNSt3__18ios_base3hexE;\n    _ZNSt3__18ios_base3octE;\n    _ZNSt3__18ios_base3outE;\n    _ZNSt3__18ios_base4InitC1Ev;\n    _ZNSt3__18ios_base4InitC2Ev;\n    _ZNSt3__18ios_base4InitD1Ev;\n    _ZNSt3__18ios_base4InitD2Ev;\n    _ZNSt3__18ios_base4initEPv;\n    _ZNSt3__18ios_base4leftE;\n    _ZNSt3__18ios_base4moveERS0_;\n    _ZNSt3__18ios_base4swapERS0_;\n    _ZNSt3__18ios_base5clearEj;\n    _ZNSt3__18ios_base5fixedE;\n    _ZNSt3__18ios_base5imbueERKNS_6localeE;\n    _ZNSt3__18ios_base5iwordEi;\n    _ZNSt3__18ios_base5pwordEi;\n    _ZNSt3__18ios_base5rightE;\n    _ZNSt3__18ios_base5truncE;\n    _ZNSt3__18ios_base6badbitE;\n    _ZNSt3__18ios_base6binaryE;\n    _ZNSt3__18ios_base6eofbitE;\n    _ZNSt3__18ios_base6skipwsE;\n    _ZNSt3__18ios_base6xallocEv;\n    _ZNSt3__18ios_base7copyfmtERKS0_;\n    _ZNSt3__18ios_base7failbitE;\n    _ZNSt3__18ios_base7failureC1EPKcRKNS_10error_codeE;\n    _ZNSt3__18ios_base7failureC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_10error_codeE;\n    _ZNSt3__18ios_base7failureC2EPKcRKNS_10error_codeE;\n    _ZNSt3__18ios_base7failureC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_10error_codeE;\n    _ZNSt3__18ios_base7failureD0Ev;\n    _ZNSt3__18ios_base7failureD1Ev;\n    _ZNSt3__18ios_base7failureD2Ev;\n    _ZNSt3__18ios_base7goodbitE;\n    _ZNSt3__18ios_base7showposE;\n    _ZNSt3__18ios_base7unitbufE;\n    _ZNSt3__18ios_base8internalE;\n    _ZNSt3__18ios_base8showbaseE;\n    _ZNSt3__18ios_base9basefieldE;\n    _ZNSt3__18ios_base9boolalphaE;\n    _ZNSt3__18ios_base9showpointE;\n    _ZNSt3__18ios_base9uppercaseE;\n    _ZNSt3__18ios_base9__xindex_E;\n    _ZNSt3__18ios_baseD0Ev;\n    _ZNSt3__18ios_baseD1Ev;\n    _ZNSt3__18ios_baseD2Ev;\n    _ZNSt3__18messagesIcE2idE;\n    _ZNSt3__18messagesIwE2idE;\n    _ZNSt3__18numpunctIcE2idE;\n    _ZNSt3__18numpunctIcEC1Ej;\n    _ZNSt3__18numpunctIcEC2Ej;\n    _ZNSt3__18numpunctIcED0Ev;\n    _ZNSt3__18numpunctIcED1Ev;\n    _ZNSt3__18numpunctIcED2Ev;\n    _ZNSt3__18numpunctIwE2idE;\n    _ZNSt3__18numpunctIwEC1Ej;\n    _ZNSt3__18numpunctIwEC2Ej;\n    _ZNSt3__18numpunctIwED0Ev;\n    _ZNSt3__18numpunctIwED1Ev;\n    _ZNSt3__18numpunctIwED2Ev;\n    _ZNSt3__18__rs_getEv;\n    _ZNSt3__18__sp_mut4lockEv;\n    _ZNSt3__18__sp_mut6unlockEv;\n    _ZNSt3__18__sp_mutC2EPv;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__18valarrayIjE6resizeEjj;\n    _ZNSt3__18valarrayIjEC1Ej;\n    _ZNSt3__18valarrayIjEC2Ej;\n    _ZNSt3__18valarrayIjED1Ev;\n    _ZNSt3__18valarrayIjED2Ev;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE7copyfmtERKS3_;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEED0Ev;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEED1Ev;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEED2Ev;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE7copyfmtERKS3_;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEED0Ev;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEED1Ev;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEED2Ev;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIcEERNS_10unique_ptrIcPFvPvEEERPcSM_;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIwEERNS_10unique_ptrIwPFvPvEEERPwSM_;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE;\n    _ZNSt3__19__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_;\n    _ZNSt3__19__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc;\n    _ZNSt3__19__num_getIcE19__stage2_float_loopEcRbRcPcRS4_ccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjS4_;\n    _ZNSt3__19__num_getIcE19__stage2_float_prepERNS_8ios_baseEPcRcS5_;\n    _ZNSt3__19__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw;\n    _ZNSt3__19__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw;\n    _ZNSt3__19__num_getIwE19__stage2_float_loopEwRbRcPcRS4_wwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjPw;\n    _ZNSt3__19__num_getIwE19__stage2_float_prepERNS_8ios_baseEPwRwS5_;\n    _ZNSt3__19__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE;\n    _ZNSt3__19__num_putIcE23__widen_and_group_floatEPcS2_S2_S2_RS2_S3_RKNS_6localeE;\n    _ZNSt3__19__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE;\n    _ZNSt3__19__num_putIwE23__widen_and_group_floatEPcS2_S2_PwRS3_S4_RKNS_6localeE;\n    _ZNSt3__19strstreamD0Ev;\n    _ZNSt3__19strstreamD1Ev;\n    _ZNSt3__19strstreamD2Ev;\n    _ZNSt3__19to_stringEd;\n    _ZNSt3__19to_stringEe;\n    _ZNSt3__19to_stringEf;\n    _ZNSt3__19to_stringEg;\n    _ZNSt3__19to_stringEi;\n    _ZNSt3__19to_stringEj;\n    _ZNSt3__19to_stringEl;\n    _ZNSt3__19to_stringEm;\n    _ZNSt3__19to_stringEx;\n    _ZNSt3__19to_stringEy;\n    _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_;\n    _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_;\n    _ZSt17current_exceptionv;\n    _ZSt17rethrow_exceptionSt13exception_ptr;\n    _ZSt17__throw_bad_allocv;\n    _ZSt18make_exception_ptrINSt3__112future_errorEESt13exception_ptrT_;\n    _ZSt18uncaught_exceptionv;\n    _ZSt7nothrow;\n    _ZTCNSt3__110istrstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTCNSt3__110ostrstreamE0_NS_13basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE;\n    _ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE8_NS_13basic_ostreamIcS2_EE;\n    _ZTCNSt3__19strstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTCNSt3__19strstreamE0_NS_14basic_iostreamIcNS_11char_traitsIcEEEE;\n    _ZTCNSt3__19strstreamE8_NS_13basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZThn8_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZThn8_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZThn8_NSt3__19strstreamD0Ev;\n    _ZThn8_NSt3__19strstreamD1Ev;\n    _ZTINSt12experimental19bad_optional_accessE;\n    _ZTINSt3__110ctype_baseE;\n    _ZTINSt3__110istrstreamE;\n    _ZTINSt3__110money_baseE;\n    _ZTINSt3__110moneypunctIcLb0EEE;\n    _ZTINSt3__110moneypunctIcLb1EEE;\n    _ZTINSt3__110moneypunctIwLb0EEE;\n    _ZTINSt3__110moneypunctIwLb1EEE;\n    _ZTINSt3__110ostrstreamE;\n    _ZTINSt3__110__time_getE;\n    _ZTINSt3__110__time_putE;\n    _ZTINSt3__111__money_getIcEE;\n    _ZTINSt3__111__money_getIwEE;\n    _ZTINSt3__111__money_putIcEE;\n    _ZTINSt3__111__money_putIwEE;\n    _ZTINSt3__111regex_errorE;\n    _ZTINSt3__112bad_weak_ptrE;\n    _ZTINSt3__112codecvt_baseE;\n    _ZTINSt3__112ctype_bynameIcEE;\n    _ZTINSt3__112ctype_bynameIwEE;\n    _ZTINSt3__112future_errorE;\n    _ZTINSt3__112strstreambufE;\n    _ZTINSt3__112system_errorE;\n    _ZTINSt3__113basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTINSt3__113basic_istreamIwNS_11char_traitsIwEEEE;\n    _ZTINSt3__113basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZTINSt3__113basic_ostreamIwNS_11char_traitsIwEEEE;\n    _ZTINSt3__113messages_baseE;\n    _ZTINSt3__114basic_iostreamIcNS_11char_traitsIcEEEE;\n    _ZTINSt3__114codecvt_bynameIcc9mbstate_tEE;\n    _ZTINSt3__114codecvt_bynameIDic9mbstate_tEE;\n    _ZTINSt3__114codecvt_bynameIDsc9mbstate_tEE;\n    _ZTINSt3__114codecvt_bynameIwc9mbstate_tEE;\n    _ZTINSt3__114__codecvt_utf8IDiEE;\n    _ZTINSt3__114__codecvt_utf8IDsEE;\n    _ZTINSt3__114__codecvt_utf8IwEE;\n    _ZTINSt3__114collate_bynameIcEE;\n    _ZTINSt3__114collate_bynameIwEE;\n    _ZTINSt3__114error_categoryE;\n    _ZTINSt3__114__num_get_baseE;\n    _ZTINSt3__114__num_put_baseE;\n    _ZTINSt3__114__shared_countE;\n    _ZTINSt3__115basic_streambufIcNS_11char_traitsIcEEEE;\n    _ZTINSt3__115basic_streambufIwNS_11char_traitsIwEEEE;\n    _ZTINSt3__115__codecvt_utf16IDiLb0EEE;\n    _ZTINSt3__115__codecvt_utf16IDiLb1EEE;\n    _ZTINSt3__115__codecvt_utf16IDsLb0EEE;\n    _ZTINSt3__115__codecvt_utf16IDsLb1EEE;\n    _ZTINSt3__115__codecvt_utf16IwLb0EEE;\n    _ZTINSt3__115__codecvt_utf16IwLb1EEE;\n    _ZTINSt3__115messages_bynameIcEE;\n    _ZTINSt3__115messages_bynameIwEE;\n    _ZTINSt3__115numpunct_bynameIcEE;\n    _ZTINSt3__115numpunct_bynameIwEE;\n    _ZTINSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__116__narrow_to_utf8ILj16EEE;\n    _ZTINSt3__116__narrow_to_utf8ILj32EEE;\n    _ZTINSt3__117__assoc_sub_stateE;\n    _ZTINSt3__117moneypunct_bynameIcLb0EEE;\n    _ZTINSt3__117moneypunct_bynameIcLb1EEE;\n    _ZTINSt3__117moneypunct_bynameIwLb0EEE;\n    _ZTINSt3__117moneypunct_bynameIwLb1EEE;\n    _ZTINSt3__117__widen_from_utf8ILj16EEE;\n    _ZTINSt3__117__widen_from_utf8ILj32EEE;\n    _ZTINSt3__118__time_get_storageIcEE;\n    _ZTINSt3__118__time_get_storageIwEE;\n    _ZTINSt3__119__shared_weak_countE;\n    _ZTINSt3__120__codecvt_utf8_utf16IDiEE;\n    _ZTINSt3__120__codecvt_utf8_utf16IDsEE;\n    _ZTINSt3__120__codecvt_utf8_utf16IwEE;\n    _ZTINSt3__120__time_get_c_storageIcEE;\n    _ZTINSt3__120__time_get_c_storageIwEE;\n    _ZTINSt3__15ctypeIcEE;\n    _ZTINSt3__15ctypeIwEE;\n    _ZTINSt3__16locale5facetE;\n    _ZTINSt3__17codecvtIcc9mbstate_tEE;\n    _ZTINSt3__17codecvtIDic9mbstate_tEE;\n    _ZTINSt3__17codecvtIDsc9mbstate_tEE;\n    _ZTINSt3__17codecvtIwc9mbstate_tEE;\n    _ZTINSt3__17collateIcEE;\n    _ZTINSt3__17collateIwEE;\n    _ZTINSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__18__c_nodeE;\n    _ZTINSt3__18ios_base7failureE;\n    _ZTINSt3__18ios_baseE;\n    _ZTINSt3__18messagesIcEE;\n    _ZTINSt3__18messagesIwEE;\n    _ZTINSt3__18numpunctIcEE;\n    _ZTINSt3__18numpunctIwEE;\n    _ZTINSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__19basic_iosIcNS_11char_traitsIcEEEE;\n    _ZTINSt3__19basic_iosIwNS_11char_traitsIwEEEE;\n    _ZTINSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTINSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTINSt3__19__num_getIcEE;\n    _ZTINSt3__19__num_getIwEE;\n    _ZTINSt3__19__num_putIcEE;\n    _ZTINSt3__19__num_putIwEE;\n    _ZTINSt3__19strstreamE;\n    _ZTINSt3__19time_baseE;\n    _ZTISt16nested_exception;\n    _ZTSNSt12experimental19bad_optional_accessE;\n    _ZTSNSt3__110ctype_baseE;\n    _ZTSNSt3__110istrstreamE;\n    _ZTSNSt3__110money_baseE;\n    _ZTSNSt3__110moneypunctIcLb0EEE;\n    _ZTSNSt3__110moneypunctIcLb1EEE;\n    _ZTSNSt3__110moneypunctIwLb0EEE;\n    _ZTSNSt3__110moneypunctIwLb1EEE;\n    _ZTSNSt3__110ostrstreamE;\n    _ZTSNSt3__110__time_getE;\n    _ZTSNSt3__110__time_putE;\n    _ZTSNSt3__111__money_getIcEE;\n    _ZTSNSt3__111__money_getIwEE;\n    _ZTSNSt3__111__money_putIcEE;\n    _ZTSNSt3__111__money_putIwEE;\n    _ZTSNSt3__111regex_errorE;\n    _ZTSNSt3__112bad_weak_ptrE;\n    _ZTSNSt3__112codecvt_baseE;\n    _ZTSNSt3__112ctype_bynameIcEE;\n    _ZTSNSt3__112ctype_bynameIwEE;\n    _ZTSNSt3__112future_errorE;\n    _ZTSNSt3__112strstreambufE;\n    _ZTSNSt3__112system_errorE;\n    _ZTSNSt3__113basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTSNSt3__113basic_istreamIwNS_11char_traitsIwEEEE;\n    _ZTSNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZTSNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE;\n    _ZTSNSt3__113messages_baseE;\n    _ZTSNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE;\n    _ZTSNSt3__114codecvt_bynameIcc9mbstate_tEE;\n    _ZTSNSt3__114codecvt_bynameIDic9mbstate_tEE;\n    _ZTSNSt3__114codecvt_bynameIDsc9mbstate_tEE;\n    _ZTSNSt3__114codecvt_bynameIwc9mbstate_tEE;\n    _ZTSNSt3__114__codecvt_utf8IDiEE;\n    _ZTSNSt3__114__codecvt_utf8IDsEE;\n    _ZTSNSt3__114__codecvt_utf8IwEE;\n    _ZTSNSt3__114collate_bynameIcEE;\n    _ZTSNSt3__114collate_bynameIwEE;\n    _ZTSNSt3__114error_categoryE;\n    _ZTSNSt3__114__num_get_baseE;\n    _ZTSNSt3__114__num_put_baseE;\n    _ZTSNSt3__114__shared_countE;\n    _ZTSNSt3__115basic_streambufIcNS_11char_traitsIcEEEE;\n    _ZTSNSt3__115basic_streambufIwNS_11char_traitsIwEEEE;\n    _ZTSNSt3__115__codecvt_utf16IDiLb0EEE;\n    _ZTSNSt3__115__codecvt_utf16IDiLb1EEE;\n    _ZTSNSt3__115__codecvt_utf16IDsLb0EEE;\n    _ZTSNSt3__115__codecvt_utf16IDsLb1EEE;\n    _ZTSNSt3__115__codecvt_utf16IwLb0EEE;\n    _ZTSNSt3__115__codecvt_utf16IwLb1EEE;\n    _ZTSNSt3__115messages_bynameIcEE;\n    _ZTSNSt3__115messages_bynameIwEE;\n    _ZTSNSt3__115numpunct_bynameIcEE;\n    _ZTSNSt3__115numpunct_bynameIwEE;\n    _ZTSNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__116__narrow_to_utf8ILj16EEE;\n    _ZTSNSt3__116__narrow_to_utf8ILj32EEE;\n    _ZTSNSt3__117__assoc_sub_stateE;\n    _ZTSNSt3__117moneypunct_bynameIcLb0EEE;\n    _ZTSNSt3__117moneypunct_bynameIcLb1EEE;\n    _ZTSNSt3__117moneypunct_bynameIwLb0EEE;\n    _ZTSNSt3__117moneypunct_bynameIwLb1EEE;\n    _ZTSNSt3__117__widen_from_utf8ILj16EEE;\n    _ZTSNSt3__117__widen_from_utf8ILj32EEE;\n    _ZTSNSt3__118__time_get_storageIcEE;\n    _ZTSNSt3__118__time_get_storageIwEE;\n    _ZTSNSt3__119__shared_weak_countE;\n    _ZTSNSt3__120__codecvt_utf8_utf16IDiEE;\n    _ZTSNSt3__120__codecvt_utf8_utf16IDsEE;\n    _ZTSNSt3__120__codecvt_utf8_utf16IwEE;\n    _ZTSNSt3__120__time_get_c_storageIcEE;\n    _ZTSNSt3__120__time_get_c_storageIwEE;\n    _ZTSNSt3__15ctypeIcEE;\n    _ZTSNSt3__15ctypeIwEE;\n    _ZTSNSt3__16locale5facetE;\n    _ZTSNSt3__17codecvtIcc9mbstate_tEE;\n    _ZTSNSt3__17codecvtIDic9mbstate_tEE;\n    _ZTSNSt3__17codecvtIDsc9mbstate_tEE;\n    _ZTSNSt3__17codecvtIwc9mbstate_tEE;\n    _ZTSNSt3__17collateIcEE;\n    _ZTSNSt3__17collateIwEE;\n    _ZTSNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__18__c_nodeE;\n    _ZTSNSt3__18ios_base7failureE;\n    _ZTSNSt3__18ios_baseE;\n    _ZTSNSt3__18messagesIcEE;\n    _ZTSNSt3__18messagesIwEE;\n    _ZTSNSt3__18numpunctIcEE;\n    _ZTSNSt3__18numpunctIwEE;\n    _ZTSNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__19basic_iosIcNS_11char_traitsIcEEEE;\n    _ZTSNSt3__19basic_iosIwNS_11char_traitsIwEEEE;\n    _ZTSNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTSNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTSNSt3__19__num_getIcEE;\n    _ZTSNSt3__19__num_getIwEE;\n    _ZTSNSt3__19__num_putIcEE;\n    _ZTSNSt3__19__num_putIwEE;\n    _ZTSNSt3__19strstreamE;\n    _ZTSNSt3__19time_baseE;\n    _ZTSSt16nested_exception;\n    _ZTTNSt3__110istrstreamE;\n    _ZTTNSt3__110ostrstreamE;\n    _ZTTNSt3__113basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTTNSt3__113basic_istreamIwNS_11char_traitsIwEEEE;\n    _ZTTNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZTTNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE;\n    _ZTTNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE;\n    _ZTTNSt3__19strstreamE;\n    _ZTv0_n12_NSt3__110istrstreamD0Ev;\n    _ZTv0_n12_NSt3__110istrstreamD1Ev;\n    _ZTv0_n12_NSt3__110ostrstreamD0Ev;\n    _ZTv0_n12_NSt3__110ostrstreamD1Ev;\n    _ZTv0_n12_NSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n12_NSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n12_NSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev;\n    _ZTv0_n12_NSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev;\n    _ZTv0_n12_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n12_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n12_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev;\n    _ZTv0_n12_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev;\n    _ZTv0_n12_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n12_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n12_NSt3__19strstreamD0Ev;\n    _ZTv0_n12_NSt3__19strstreamD1Ev;\n    _ZTVNSt12experimental19bad_optional_accessE;\n    _ZTVNSt3__110istrstreamE;\n    _ZTVNSt3__110moneypunctIcLb0EEE;\n    _ZTVNSt3__110moneypunctIcLb1EEE;\n    _ZTVNSt3__110moneypunctIwLb0EEE;\n    _ZTVNSt3__110moneypunctIwLb1EEE;\n    _ZTVNSt3__110ostrstreamE;\n    _ZTVNSt3__111regex_errorE;\n    _ZTVNSt3__112bad_weak_ptrE;\n    _ZTVNSt3__112ctype_bynameIcEE;\n    _ZTVNSt3__112ctype_bynameIwEE;\n    _ZTVNSt3__112future_errorE;\n    _ZTVNSt3__112strstreambufE;\n    _ZTVNSt3__112system_errorE;\n    _ZTVNSt3__113basic_istreamIcNS_11char_traitsIcEEEE;\n    _ZTVNSt3__113basic_istreamIwNS_11char_traitsIwEEEE;\n    _ZTVNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZTVNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE;\n    _ZTVNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE;\n    _ZTVNSt3__114codecvt_bynameIcc9mbstate_tEE;\n    _ZTVNSt3__114codecvt_bynameIDic9mbstate_tEE;\n    _ZTVNSt3__114codecvt_bynameIDsc9mbstate_tEE;\n    _ZTVNSt3__114codecvt_bynameIwc9mbstate_tEE;\n    _ZTVNSt3__114__codecvt_utf8IDiEE;\n    _ZTVNSt3__114__codecvt_utf8IDsEE;\n    _ZTVNSt3__114__codecvt_utf8IwEE;\n    _ZTVNSt3__114collate_bynameIcEE;\n    _ZTVNSt3__114collate_bynameIwEE;\n    _ZTVNSt3__114error_categoryE;\n    _ZTVNSt3__114__shared_countE;\n    _ZTVNSt3__115basic_streambufIcNS_11char_traitsIcEEEE;\n    _ZTVNSt3__115basic_streambufIwNS_11char_traitsIwEEEE;\n    _ZTVNSt3__115__codecvt_utf16IDiLb0EEE;\n    _ZTVNSt3__115__codecvt_utf16IDiLb1EEE;\n    _ZTVNSt3__115__codecvt_utf16IDsLb0EEE;\n    _ZTVNSt3__115__codecvt_utf16IDsLb1EEE;\n    _ZTVNSt3__115__codecvt_utf16IwLb0EEE;\n    _ZTVNSt3__115__codecvt_utf16IwLb1EEE;\n    _ZTVNSt3__115messages_bynameIcEE;\n    _ZTVNSt3__115messages_bynameIwEE;\n    _ZTVNSt3__115numpunct_bynameIcEE;\n    _ZTVNSt3__115numpunct_bynameIwEE;\n    _ZTVNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__116__narrow_to_utf8ILj16EEE;\n    _ZTVNSt3__116__narrow_to_utf8ILj32EEE;\n    _ZTVNSt3__117__assoc_sub_stateE;\n    _ZTVNSt3__117moneypunct_bynameIcLb0EEE;\n    _ZTVNSt3__117moneypunct_bynameIcLb1EEE;\n    _ZTVNSt3__117moneypunct_bynameIwLb0EEE;\n    _ZTVNSt3__117moneypunct_bynameIwLb1EEE;\n    _ZTVNSt3__117__widen_from_utf8ILj16EEE;\n    _ZTVNSt3__117__widen_from_utf8ILj32EEE;\n    _ZTVNSt3__119__shared_weak_countE;\n    _ZTVNSt3__120__codecvt_utf8_utf16IDiEE;\n    _ZTVNSt3__120__codecvt_utf8_utf16IDsEE;\n    _ZTVNSt3__120__codecvt_utf8_utf16IwEE;\n    _ZTVNSt3__120__time_get_c_storageIcEE;\n    _ZTVNSt3__120__time_get_c_storageIwEE;\n    _ZTVNSt3__15ctypeIcEE;\n    _ZTVNSt3__15ctypeIwEE;\n    _ZTVNSt3__16locale5facetE;\n    _ZTVNSt3__17codecvtIcc9mbstate_tEE;\n    _ZTVNSt3__17codecvtIDic9mbstate_tEE;\n    _ZTVNSt3__17codecvtIDsc9mbstate_tEE;\n    _ZTVNSt3__17codecvtIwc9mbstate_tEE;\n    _ZTVNSt3__17collateIcEE;\n    _ZTVNSt3__17collateIwEE;\n    _ZTVNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__18__c_nodeE;\n    _ZTVNSt3__18ios_base7failureE;\n    _ZTVNSt3__18ios_baseE;\n    _ZTVNSt3__18messagesIcEE;\n    _ZTVNSt3__18messagesIwEE;\n    _ZTVNSt3__18numpunctIcEE;\n    _ZTVNSt3__18numpunctIwEE;\n    _ZTVNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__19basic_iosIcNS_11char_traitsIcEEEE;\n    _ZTVNSt3__19basic_iosIwNS_11char_traitsIwEEEE;\n    _ZTVNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE;\n    _ZTVNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE;\n    _ZTVNSt3__19strstreamE;\n    _ZTVSt16nested_exception;\n    _ZZNKSt3__120__time_get_c_storageIcE3__cEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIcE3__rEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIcE3__xEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIcE3__XEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm;\n    _ZZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks;\n    _ZZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months;\n    _ZZNKSt3__120__time_get_c_storageIwE3__cEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIwE3__rEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIwE3__xEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIwE3__XEvE1s;\n    _ZZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm;\n    _ZZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks;\n    _ZZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months;\n    atan2l;\n    coshl;\n    cosl;\n    expl;\n    hypotl;\n    log2;\n    logbl;\n    logl;\n    nan;\n    nexttoward;\n    scalbln;\n    scalblnf;\n    scalblnl;\n    sinhl;\n    sinl;\n    sqrtl;\n    strtold_l;\n    strtoll_l;\n    strtoull_l;\n    uselocale;\n\n    /* ToDo: missing from 32-bit */\n    _ZL10assert_rtnPKcS0_iS0_;\n    _ZL17ctype_android_tab;\n    _ZL25default_terminate_handlerv;\n    _ZL26default_unexpected_handlerv;\n    _ZL5cause;\n    _ZN10__cxxabiv114call_terminateEbP21_Unwind_Control_Block;\n    _ZN10__cxxabiv116__enum_type_infoD0Ev;\n    _ZN10__cxxabiv116__enum_type_infoD1Ev;\n    _ZN10__cxxabiv116__enum_type_infoD2Ev;\n    _ZN10__cxxabiv116__shim_type_infoD0Ev;\n    _ZN10__cxxabiv116__shim_type_infoD1Ev;\n    _ZN10__cxxabiv116__shim_type_infoD2Ev;\n    _ZN10__cxxabiv117__array_type_infoD0Ev;\n    _ZN10__cxxabiv117__array_type_infoD1Ev;\n    _ZN10__cxxabiv117__array_type_infoD2Ev;\n    _ZN10__cxxabiv117__class_type_infoD0Ev;\n    _ZN10__cxxabiv117__class_type_infoD1Ev;\n    _ZN10__cxxabiv117__class_type_infoD2Ev;\n    _ZN10__cxxabiv117__pbase_type_infoD0Ev;\n    _ZN10__cxxabiv117__pbase_type_infoD1Ev;\n    _ZN10__cxxabiv117__pbase_type_infoD2Ev;\n    _ZN10__cxxabiv118readEncodedPointerEPPKhh;\n    _ZN10__cxxabiv119__pointer_type_infoD0Ev;\n    _ZN10__cxxabiv119__pointer_type_infoD1Ev;\n    _ZN10__cxxabiv119__pointer_type_infoD2Ev;\n    _ZN10__cxxabiv120__function_type_infoD0Ev;\n    _ZN10__cxxabiv120__function_type_infoD1Ev;\n    _ZN10__cxxabiv120__function_type_infoD2Ev;\n    _ZN10__cxxabiv120__si_class_type_infoD0Ev;\n    _ZN10__cxxabiv120__si_class_type_infoD1Ev;\n    _ZN10__cxxabiv120__si_class_type_infoD2Ev;\n    _ZN10__cxxabiv121__vmi_class_type_infoD0Ev;\n    _ZN10__cxxabiv121__vmi_class_type_infoD1Ev;\n    _ZN10__cxxabiv121__vmi_class_type_infoD2Ev;\n    _ZN10__cxxabiv123__fundamental_type_infoD0Ev;\n    _ZN10__cxxabiv123__fundamental_type_infoD1Ev;\n    _ZN10__cxxabiv123__fundamental_type_infoD2Ev;\n    _ZN10__cxxabiv127dependent_exception_cleanupE19_Unwind_Reason_CodeP21_Unwind_Control_Block;\n    _ZN10__cxxabiv129__pointer_to_member_type_infoD0Ev;\n    _ZN10__cxxabiv129__pointer_to_member_type_infoD1Ev;\n    _ZN10__cxxabiv129__pointer_to_member_type_infoD2Ev;\n    _ZN10__cxxabiv1L22exception_cleanup_funcE19_Unwind_Reason_CodeP21_Unwind_Control_Block;\n    _ZN10__cxxabiv1L7do_freeEPv;\n    _ZN10__cxxabiv1L9do_mallocEj;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE10saveVFPAsXEv;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE11getFloatRegEi;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE11setFloatRegEiy;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE13isSignalFrameEv;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE13validFloatRegEi;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE15getFunctionNameEPcjPj;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE15getRegisterNameEi;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE23getInfoFromEHABISectionEjRKNS_18UnwindInfoSectionsE;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE24setInfoBasedOnIPRegisterEb;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE4stepEv;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE6getRegEi;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE6jumptoEv;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE6setRegEij;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE7getInfoEP15unw_proc_info_t;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEE8validRegEi;\n    _ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEED0Ev;\n    _ZN9libunwind13Registers_arm12restoreiWMMXEPy;\n    _ZN9libunwind13Registers_arm12restoreVFPv3EPy;\n    _ZN9libunwind13Registers_arm16saveiWMMXControlEPj;\n    _ZN9libunwind13Registers_arm16saveVFPWithFSTMDEPy;\n    _ZN9libunwind13Registers_arm16saveVFPWithFSTMXEPy;\n    _ZN9libunwind13Registers_arm19restoreiWMMXControlEPj;\n    _ZN9libunwind13Registers_arm19restoreVFPWithFLDMDEPy;\n    _ZN9libunwind13Registers_arm19restoreVFPWithFLDMXEPy;\n    _ZN9libunwind13Registers_arm20restoreCoreAndJumpToEv;\n    _ZN9libunwind13Registers_arm26restoreSavedFloatRegistersEv;\n    _ZN9libunwind13Registers_arm9saveiWMMXEPy;\n    _ZN9libunwind13Registers_arm9saveVFPv3EPy;\n    _ZN9libunwind17LocalAddressSpace17sThisAddressSpaceE;\n    _ZN9libunwind20AbstractUnwindCursorD2Ev;\n    _ZNK10__cxxabiv116__enum_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv116__shim_type_info5noop1Ev;\n    _ZNK10__cxxabiv116__shim_type_info5noop2Ev;\n    _ZNK10__cxxabiv117__array_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib;\n    _ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib;\n    _ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi;\n    _ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi;\n    _ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i;\n    _ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi;\n    _ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv120__function_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib;\n    _ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib;\n    _ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi;\n    _ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib;\n    _ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib;\n    _ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi;\n    _ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib;\n    _ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib;\n    _ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi;\n    _ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv;\n    _ZNKSt3__110moneypunctIcLb0EE10neg_formatEv;\n    _ZNKSt3__110moneypunctIcLb0EE10pos_formatEv;\n    _ZNKSt3__110moneypunctIcLb0EE11curr_symbolEv;\n    _ZNKSt3__110moneypunctIcLb0EE11frac_digitsEv;\n    _ZNKSt3__110moneypunctIcLb0EE13decimal_pointEv;\n    _ZNKSt3__110moneypunctIcLb0EE13negative_signEv;\n    _ZNKSt3__110moneypunctIcLb0EE13positive_signEv;\n    _ZNKSt3__110moneypunctIcLb0EE13thousands_sepEv;\n    _ZNKSt3__110moneypunctIcLb0EE8groupingEv;\n    _ZNKSt3__110moneypunctIcLb1EE10neg_formatEv;\n    _ZNKSt3__110moneypunctIcLb1EE10pos_formatEv;\n    _ZNKSt3__110moneypunctIcLb1EE11curr_symbolEv;\n    _ZNKSt3__110moneypunctIcLb1EE11frac_digitsEv;\n    _ZNKSt3__110moneypunctIcLb1EE13decimal_pointEv;\n    _ZNKSt3__110moneypunctIcLb1EE13negative_signEv;\n    _ZNKSt3__110moneypunctIcLb1EE13positive_signEv;\n    _ZNKSt3__110moneypunctIcLb1EE13thousands_sepEv;\n    _ZNKSt3__110moneypunctIcLb1EE8groupingEv;\n    _ZNKSt3__110moneypunctIwLb0EE10neg_formatEv;\n    _ZNKSt3__110moneypunctIwLb0EE10pos_formatEv;\n    _ZNKSt3__110moneypunctIwLb0EE11curr_symbolEv;\n    _ZNKSt3__110moneypunctIwLb0EE11frac_digitsEv;\n    _ZNKSt3__110moneypunctIwLb0EE13decimal_pointEv;\n    _ZNKSt3__110moneypunctIwLb0EE13negative_signEv;\n    _ZNKSt3__110moneypunctIwLb0EE13positive_signEv;\n    _ZNKSt3__110moneypunctIwLb0EE13thousands_sepEv;\n    _ZNKSt3__110moneypunctIwLb0EE8groupingEv;\n    _ZNKSt3__110moneypunctIwLb1EE10neg_formatEv;\n    _ZNKSt3__110moneypunctIwLb1EE10pos_formatEv;\n    _ZNKSt3__110moneypunctIwLb1EE11curr_symbolEv;\n    _ZNKSt3__110moneypunctIwLb1EE11frac_digitsEv;\n    _ZNKSt3__110moneypunctIwLb1EE13decimal_pointEv;\n    _ZNKSt3__110moneypunctIwLb1EE13negative_signEv;\n    _ZNKSt3__110moneypunctIwLb1EE13positive_signEv;\n    _ZNKSt3__110moneypunctIwLb1EE13thousands_sepEv;\n    _ZNKSt3__110moneypunctIwLb1EE8groupingEv;\n    _ZNKSt3__111__libcpp_db15__find_iteratorEPKv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__invariantsEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE3endEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4backEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4cendEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4rendEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5crendEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5emptyEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5frontEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindERKS5_j;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6cbeginEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6lengthEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6rbeginEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6substrEjj;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjRKS5_;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareERKS5_;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7crbeginEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longEv;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixEj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__invariantsEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13get_allocatorEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE3endEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4backEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4cendEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4rendEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5crendEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5emptyEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5frontEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindERKS5_j;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6cbeginEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6lengthEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6rbeginEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6substrEjj;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEjjRKS5_;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareERKS5_;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7crbeginEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longEv;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixEj;\n    _ZNKSt3__112__do_message7messageEi;\n    _ZNKSt3__113basic_istreamIcNS_11char_traitsIcEEE6gcountEv;\n    _ZNKSt3__113basic_istreamIcNS_11char_traitsIcEEE6sentrycvbEv;\n    _ZNKSt3__113basic_istreamIwNS_11char_traitsIwEEE6gcountEv;\n    _ZNKSt3__113basic_istreamIwNS_11char_traitsIwEEE6sentrycvbEv;\n    _ZNKSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentrycvbEv;\n    _ZNKSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentrycvbEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE4gptrEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE4pptrEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE5ebackEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE5egptrEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE5epptrEv;\n    _ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE5pbaseEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE4gptrEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE4pptrEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE5ebackEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE5egptrEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE5epptrEv;\n    _ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE5pbaseEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13do_date_orderEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__cEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__rEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__xEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__XEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__am_pmEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__weeksEv;\n    _ZNKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__monthsEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__cEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__rEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__xEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__XEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__am_pmEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__weeksEv;\n    _ZNKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__monthsEv;\n    _ZNKSt3__119__iostream_category4nameEv;\n    _ZNKSt3__119__iostream_category7messageEi;\n    _ZNKSt3__123__future_error_category4nameEv;\n    _ZNKSt3__123__future_error_category7messageEi;\n    _ZNKSt3__123__system_error_category23default_error_conditionEi;\n    _ZNKSt3__123__system_error_category4nameEv;\n    _ZNKSt3__123__system_error_category7messageEi;\n    _ZNKSt3__124__generic_error_category4nameEv;\n    _ZNKSt3__124__generic_error_category7messageEi;\n    _ZNKSt3__16locale5__imp9use_facetEl;\n    _ZNKSt3__17collateIcE4hashEPKcS3_;\n    _ZNKSt3__17collateIcE7compareEPKcS3_S3_S3_;\n    _ZNKSt3__17collateIcE9transformEPKcS3_;\n    _ZNKSt3__17collateIwE4hashEPKwS3_;\n    _ZNKSt3__17collateIwE7compareEPKwS3_S3_S3_;\n    _ZNKSt3__17collateIwE9transformEPKwS3_;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRb;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRd;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRe;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRf;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRl;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRm;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRPv;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRt;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRx;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjRy;\n    _ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjS8_;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRb;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRd;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRe;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRf;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRl;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRm;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRPv;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRt;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRx;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjRy;\n    _ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjS8_;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcb;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcd;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEce;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcl;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcm;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcPKv;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcx;\n    _ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcy;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwb;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwd;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwe;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwl;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwm;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwPKv;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwx;\n    _ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwy;\n    _ZNKSt3__18messagesIcE3getEiiiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNKSt3__18messagesIcE4openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE;\n    _ZNKSt3__18messagesIcE5closeEi;\n    _ZNKSt3__18messagesIwE3getEiiiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE;\n    _ZNKSt3__18messagesIwE4openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE;\n    _ZNKSt3__18messagesIwE5closeEi;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10date_orderEv;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11get_weekdayES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13get_monthnameES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmcc;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8get_dateES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8get_timeES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8get_yearES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10date_orderEv;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11get_weekdayES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13get_monthnameES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmcc;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8get_dateES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8get_timeES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8get_yearES4_S4_RNS_8ios_baseERjP2tm;\n    _ZNKSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcPK2tmcc;\n    _ZNKSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwPK2tmcc;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE10exceptionsEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE3badEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE3eofEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE3tieEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE4failEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE4fillEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE4goodEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5rdbufEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5widenEc;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE6narrowEcc;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE7rdstateEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEEcvbEv;\n    _ZNKSt3__19basic_iosIcNS_11char_traitsIcEEEntEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE10exceptionsEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE3badEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE3eofEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE3tieEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE4failEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE4fillEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE4goodEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE5rdbufEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE5widenEc;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE6narrowEwc;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEE7rdstateEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEEcvbEv;\n    _ZNKSt3__19basic_iosIwNS_11char_traitsIwEEEntEv;\n    _ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_bRNS_8ios_baseERjRe;\n    _ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIcS3_NS_9allocatorIcEEEE;\n    _ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_bRNS_8ios_baseERjRe;\n    _ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIwS3_NS_9allocatorIwEEEE;\n    _ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_bRNS_8ios_baseEce;\n    _ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_bRNS_8ios_baseEcRKNS_12basic_stringIcS3_NS_9allocatorIcEEEE;\n    _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_bRNS_8ios_baseEwe;\n    _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE;\n    _ZNSt3__110moneypunctIcLb0EEC1Ej;\n    _ZNSt3__110moneypunctIcLb0EEC2Ej;\n    _ZNSt3__110moneypunctIcLb0EED0Ev;\n    _ZNSt3__110moneypunctIcLb0EED1Ev;\n    _ZNSt3__110moneypunctIcLb0EED2Ev;\n    _ZNSt3__110moneypunctIcLb1EEC1Ej;\n    _ZNSt3__110moneypunctIcLb1EEC2Ej;\n    _ZNSt3__110moneypunctIcLb1EED0Ev;\n    _ZNSt3__110moneypunctIcLb1EED1Ev;\n    _ZNSt3__110moneypunctIcLb1EED2Ev;\n    _ZNSt3__110moneypunctIwLb0EEC1Ej;\n    _ZNSt3__110moneypunctIwLb0EEC2Ej;\n    _ZNSt3__110moneypunctIwLb0EED0Ev;\n    _ZNSt3__110moneypunctIwLb0EED1Ev;\n    _ZNSt3__110moneypunctIwLb0EED2Ev;\n    _ZNSt3__110moneypunctIwLb1EEC1Ej;\n    _ZNSt3__110moneypunctIwLb1EEC2Ej;\n    _ZNSt3__110moneypunctIwLb1EED0Ev;\n    _ZNSt3__110moneypunctIwLb1EED1Ev;\n    _ZNSt3__110moneypunctIwLb1EED2Ev;\n    _ZNSt3__110__stdinbufIcE5imbueERKNS_6localeE;\n    _ZNSt3__110__stdinbufIcE5uflowEv;\n    _ZNSt3__110__stdinbufIcE9__getcharEb;\n    _ZNSt3__110__stdinbufIcE9pbackfailEi;\n    _ZNSt3__110__stdinbufIcE9underflowEv;\n    _ZNSt3__110__stdinbufIcEC2EP7__sFILEP9mbstate_t;\n    _ZNSt3__110__stdinbufIcED0Ev;\n    _ZNSt3__110__stdinbufIwE5imbueERKNS_6localeE;\n    _ZNSt3__110__stdinbufIwE5uflowEv;\n    _ZNSt3__110__stdinbufIwE9__getcharEb;\n    _ZNSt3__110__stdinbufIwE9pbackfailEi;\n    _ZNSt3__110__stdinbufIwE9underflowEv;\n    _ZNSt3__110__stdinbufIwEC2EP7__sFILEP9mbstate_t;\n    _ZNSt3__110__stdinbufIwED0Ev;\n    _ZNSt3__111__libcpp_db17__insert_iteratorEPv;\n    _ZNSt3__111__money_getIcEC1Ev;\n    _ZNSt3__111__money_getIcEC2Ev;\n    _ZNSt3__111__money_getIwEC1Ev;\n    _ZNSt3__111__money_getIwEC2Ev;\n    _ZNSt3__111__money_putIcEC1Ev;\n    _ZNSt3__111__money_putIcEC2Ev;\n    _ZNSt3__111__money_putIwEC1Ev;\n    _ZNSt3__111__money_putIwEC2Ev;\n    _ZNSt3__111__stdoutbufIcE4syncEv;\n    _ZNSt3__111__stdoutbufIcE5imbueERKNS_6localeE;\n    _ZNSt3__111__stdoutbufIcE6xsputnEPKci;\n    _ZNSt3__111__stdoutbufIcE8overflowEi;\n    _ZNSt3__111__stdoutbufIcEC2EP7__sFILEP9mbstate_t;\n    _ZNSt3__111__stdoutbufIcED0Ev;\n    _ZNSt3__111__stdoutbufIwE4syncEv;\n    _ZNSt3__111__stdoutbufIwE5imbueERKNS_6localeE;\n    _ZNSt3__111__stdoutbufIwE6xsputnEPKwi;\n    _ZNSt3__111__stdoutbufIwE8overflowEi;\n    _ZNSt3__111__stdoutbufIwEC2EP7__sFILEP9mbstate_t;\n    _ZNSt3__111__stdoutbufIwED0Ev;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__swap_allocERS4_S6_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__move_assignERS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__move_assignERS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13shrink_to_fitEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerEPc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__copy_assign_allocERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__copy_assign_allocERKS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__copy_assign_allocERKS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__move_assign_allocERS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__move_assign_allocERS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__move_assign_allocERS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__invalidate_all_iteratorsEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE3endEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4backEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4rendEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4swapERS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5clearEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5eraseENS_11__wrap_iterIPKcEE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5eraseENS_11__wrap_iterIPKcEES9_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5frontEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEOS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjRKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEjc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6rbeginEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjRKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_jc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_RKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_S8_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_S8_j;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_St16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8pop_backEv;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Ejc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EjcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EOS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EOS5_RKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcjRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ESt16initializer_listIcERKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Ev;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ejc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EjcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EOS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EOS5_RKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcjRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ESt16initializer_listIcERKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ev;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixEj;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLERKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLESt16initializer_listIcE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__swap_allocERS4_S6_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__move_assignERS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__move_assignERS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13shrink_to_fitEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerEPw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__copy_assign_allocERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__copy_assign_allocERKS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__copy_assign_allocERKS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__move_assign_allocERS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__move_assign_allocERS5_NS_17integral_constantIbLb0EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__move_assign_allocERS5_NS_17integral_constantIbLb1EEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__invalidate_all_iteratorsEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE3endEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4backEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4rendEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4swapERS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5clearEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5eraseENS_11__wrap_iterIPKwEE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5eraseENS_11__wrap_iterIPKwEES9_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5frontEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEOS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjRKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEjw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6rbeginEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjRKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_jw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_RKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_S8_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_S8_j;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_St16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8pop_backEv;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEOS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1Ejw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EjwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EOS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EOS5_RKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwjRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ESt16initializer_listIwERKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1Ev;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2Ejw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EjwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EOS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EOS5_RKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwjRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ESt16initializer_listIwERKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2Ev;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixEj;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLEPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLERKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLESt16initializer_listIwE;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLEw;\n    _ZNSt3__112__do_messageD0Ev;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEaSEOS3_;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EOS3_;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EOS3_;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEaSEOS3_;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EOS3_;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EOS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEaSEOS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EOS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1Ev;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EOS3_;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEaSEOS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EOS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1Ev;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EOS3_;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2Ev;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEaSEOS3_;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EOS3_;\n    _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EOS3_;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC1EPKcj;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC2EPKcj;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC1EPKcj;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC2EPKcj;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC1EPKcj;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC2EPKcj;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC1EPKcj;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC2EPKcj;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb;\n    _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb;\n    _ZNSt3__114__scan_keywordIPcPNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SC_SB_SB_RKT1_Rjb;\n    _ZNSt3__114__scan_keywordIPwPNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SC_SB_SB_RKT1_Rjb;\n    _ZNSt3__115messages_bynameIcEC1EPKcj;\n    _ZNSt3__115messages_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115messages_bynameIcEC2EPKcj;\n    _ZNSt3__115messages_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115messages_bynameIcED0Ev;\n    _ZNSt3__115messages_bynameIcED1Ev;\n    _ZNSt3__115messages_bynameIcED2Ev;\n    _ZNSt3__115messages_bynameIwEC1EPKcj;\n    _ZNSt3__115messages_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115messages_bynameIwEC2EPKcj;\n    _ZNSt3__115messages_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115messages_bynameIwED0Ev;\n    _ZNSt3__115messages_bynameIwED1Ev;\n    _ZNSt3__115messages_bynameIwED2Ev;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcj;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcj;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcj;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcj;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__115__time_get_tempIcED0Ev;\n    _ZNSt3__115__time_get_tempIwED0Ev;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcj;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcj;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcj;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcj;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_;\n    _ZNSt3__116__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC1EPKcj;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC2EPKcj;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIcLb0EED0Ev;\n    _ZNSt3__117moneypunct_bynameIcLb0EED1Ev;\n    _ZNSt3__117moneypunct_bynameIcLb0EED2Ev;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC1EPKcj;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC2EPKcj;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIcLb1EED0Ev;\n    _ZNSt3__117moneypunct_bynameIcLb1EED1Ev;\n    _ZNSt3__117moneypunct_bynameIcLb1EED2Ev;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC1EPKcj;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC2EPKcj;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIwLb0EED0Ev;\n    _ZNSt3__117moneypunct_bynameIwLb0EED1Ev;\n    _ZNSt3__117moneypunct_bynameIwLb0EED2Ev;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC1EPKcj;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC2EPKcj;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__117moneypunct_bynameIwLb1EED0Ev;\n    _ZNSt3__117moneypunct_bynameIwLb1EED1Ev;\n    _ZNSt3__117moneypunct_bynameIwLb1EED2Ev;\n    _ZNSt3__119__double_or_nothingIcEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_;\n    _ZNSt3__119__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_;\n    _ZNSt3__119__iostream_categoryD0Ev;\n    _ZNSt3__119__thread_struct_imp25notify_all_at_thread_exitEPNS_18condition_variableEPNS_5mutexE;\n    _ZNSt3__119__thread_struct_imp27__make_ready_at_thread_exitEPNS_17__assoc_sub_stateE;\n    _ZNSt3__119__thread_struct_impD1Ev;\n    _ZNSt3__119__thread_struct_impD2Ev;\n    _ZNSt3__120__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi;\n    _ZNSt3__120__get_up_to_n_digitsIcPcEEiRT0_S2_RjRKNS_5ctypeIT_EEi;\n    _ZNSt3__120__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi;\n    _ZNSt3__120__get_up_to_n_digitsIwPwEEiRT0_S2_RjRKNS_5ctypeIT_EEi;\n    _ZNSt3__120__vector_base_commonILb1EEC1Ev;\n    _ZNSt3__120__vector_base_commonILb1EEC2Ev;\n    _ZNSt3__123__future_error_categoryD0Ev;\n    _ZNSt3__123__system_error_categoryD0Ev;\n    _ZNSt3__124__generic_error_categoryD0Ev;\n    _ZNSt3__16locale5__imp11make_globalEv;\n    _ZNSt3__16locale5__imp12make_classicEv;\n    _ZNSt3__16locale5__imp7installEPNS0_5facetEl;\n    _ZNSt3__16locale5__impC1Ej;\n    _ZNSt3__16locale5__impC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__16locale5__impC1ERKS1_;\n    _ZNSt3__16locale5__impC1ERKS1_PNS0_5facetEl;\n    _ZNSt3__16locale5__impC1ERKS1_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi;\n    _ZNSt3__16locale5__impC1ERKS1_S3_i;\n    _ZNSt3__16locale5__impC2Ej;\n    _ZNSt3__16locale5__impC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj;\n    _ZNSt3__16locale5__impC2ERKS1_;\n    _ZNSt3__16locale5__impC2ERKS1_PNS0_5facetEl;\n    _ZNSt3__16locale5__impC2ERKS1_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi;\n    _ZNSt3__16locale5__impC2ERKS1_S3_i;\n    _ZNSt3__16locale5__impD0Ev;\n    _ZNSt3__16locale5__impD1Ev;\n    _ZNSt3__16locale5__impD2Ev;\n    _ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEE21__push_back_slow_pathIS6_EEvOT_;\n    _ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE21__push_back_slow_pathIRKS2_EEvOT_;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6assignIPS3_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS3_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8__appendEj;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEEC2Ej;\n    _ZNSt3__17collateIcEC1Ej;\n    _ZNSt3__17collateIcEC2Ej;\n    _ZNSt3__17collateIwEC1Ej;\n    _ZNSt3__17collateIwEC2Ej;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__18__c_node8__removeEPNS_8__i_nodeE;\n    _ZNSt3__18messagesIcEC1Ej;\n    _ZNSt3__18messagesIcEC2Ej;\n    _ZNSt3__18messagesIcED0Ev;\n    _ZNSt3__18messagesIcED1Ev;\n    _ZNSt3__18messagesIcED2Ev;\n    _ZNSt3__18messagesIwEC1Ej;\n    _ZNSt3__18messagesIwEC2Ej;\n    _ZNSt3__18messagesIwED0Ev;\n    _ZNSt3__18messagesIwED1Ev;\n    _ZNSt3__18messagesIwED2Ev;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcj;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcj;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEj;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcj;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcj;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEj;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE10exceptionsEj;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE3tieEPNS_13basic_ostreamIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4fillEc;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4initEPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4moveEOS3_;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4moveERS3_;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4swapERS3_;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE5clearEj;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE5imbueERKNS_6localeE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE5rdbufEPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE8setstateEj;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE9set_rdbufEPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEEC1Ev;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE;\n    _ZNSt3__19basic_iosIcNS_11char_traitsIcEEEC2Ev;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE10exceptionsEj;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE3tieEPNS_13basic_ostreamIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4fillEw;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4initEPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4moveEOS3_;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4moveERS3_;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4swapERS3_;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE5clearEj;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE5imbueERKNS_6localeE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE5rdbufEPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE8setstateEj;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE9set_rdbufEPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEEC1Ev;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE;\n    _ZNSt3__19basic_iosIwNS_11char_traitsIwEEEC2Ev;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Ej;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Ej;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED0Ev;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED1Ev;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEED2Ev;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Ej;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Ej;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED1Ev;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev;\n    _ZNSt3__1L10__init_patIcEEvRNS_10money_base7patternERNS_12basic_stringIT_NS_11char_traitsIS5_EENS_9allocatorIS5_EEEEbcccS5_;\n    _ZNSt3__1L10__init_patIwEEvRNS_10money_base7patternERNS_12basic_stringIT_NS_11char_traitsIS5_EENS_9allocatorIS5_EEEEbcccS5_;\n    _ZNSt3__1L11state_typesE;\n    _ZNSt3__1L12ucs4_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L12utf8_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L13utf16_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L13utf16_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L15ucs4_to_utf16beEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L15ucs4_to_utf16leEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L15utf16be_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L15utf16le_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE;\n    _ZNSt3__1L19utf8_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE;\n    _ZNSt3__1L20utf8_to_utf16_lengthEPKhS1_jmNS_12codecvt_modeE;\n    _ZNSt3__1L22utf16be_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE;\n    _ZNSt3__1L22utf16le_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE;\n    _ZNSt3__1L5__cinE;\n    _ZNSt3__1L6__cerrE;\n    _ZNSt3__1L6__coutE;\n    _ZNSt3__1L6__wcinE;\n    _ZNSt3__1L7__wcerrE;\n    _ZNSt3__1L7__wcoutE;\n    _ZSt11__terminatePFvvE;\n    _ZSt12__unexpectedPFvvE;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__cEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__rEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__xEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__XEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__am_pmEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__weeksEv;\n    _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__monthsEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__cEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__rEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__xEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__XEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__am_pmEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__weeksEv;\n    _ZThn8_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__monthsEv;\n    _ZTIN10__cxxabiv116__shim_type_infoE;\n    _ZTIN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEEE;\n    _ZTIN9libunwind20AbstractUnwindCursorE;\n    _ZTINSt3__110__stdinbufIcEE;\n    _ZTINSt3__110__stdinbufIwEE;\n    _ZTINSt3__111__stdoutbufIcEE;\n    _ZTINSt3__111__stdoutbufIwEE;\n    _ZTINSt3__112__do_messageE;\n    _ZTINSt3__115__time_get_tempIcEE;\n    _ZTINSt3__115__time_get_tempIwEE;\n    _ZTINSt3__119__iostream_categoryE;\n    _ZTINSt3__123__future_error_categoryE;\n    _ZTINSt3__123__system_error_categoryE;\n    _ZTINSt3__124__generic_error_categoryE;\n    _ZTINSt3__16locale5__impE;\n    _ZTSN10__cxxabiv116__shim_type_infoE;\n    _ZTSN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEEE;\n    _ZTSN9libunwind20AbstractUnwindCursorE;\n    _ZTSNSt3__110__stdinbufIcEE;\n    _ZTSNSt3__110__stdinbufIwEE;\n    _ZTSNSt3__111__stdoutbufIcEE;\n    _ZTSNSt3__111__stdoutbufIwEE;\n    _ZTSNSt3__112__do_messageE;\n    _ZTSNSt3__115__time_get_tempIcEE;\n    _ZTSNSt3__115__time_get_tempIwEE;\n    _ZTSNSt3__119__iostream_categoryE;\n    _ZTSNSt3__123__future_error_categoryE;\n    _ZTSNSt3__123__system_error_categoryE;\n    _ZTSNSt3__124__generic_error_categoryE;\n    _ZTSNSt3__16locale5__impE;\n    _ZTVN10__cxxabiv116__shim_type_infoE;\n    _ZTVN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_13Registers_armEEE;\n    _ZTVNSt3__110__stdinbufIcEE;\n    _ZTVNSt3__110__stdinbufIwEE;\n    _ZTVNSt3__111__stdoutbufIcEE;\n    _ZTVNSt3__111__stdoutbufIwEE;\n    _ZTVNSt3__112__do_messageE;\n    _ZTVNSt3__115__time_get_tempIcEE;\n    _ZTVNSt3__115__time_get_tempIwEE;\n    _ZTVNSt3__119__iostream_categoryE;\n    _ZTVNSt3__123__future_error_categoryE;\n    _ZTVNSt3__123__system_error_categoryE;\n    _ZTVNSt3__124__generic_error_categoryE;\n    _ZTVNSt3__16locale5__impE;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_0;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_1;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_2;\n    _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_3;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_0;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_1;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_2;\n    _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE4__fm_3;\n    _ZZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src;\n    _ZZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src;\n    _ZZNSt3__16locale5__imp11make_globalEvE3buf;\n    _ZZNSt3__16locale5__imp12make_classicEvE3buf;\n    _ZZNSt3__18ios_base15sync_with_stdioEbE14previous_state;\n\n    /* ToDo: missing from 64-bit */\n    _ZGVZNSt3__112__get_sp_mutEPKvE4muts;\n    _ZGVZNSt3__112__rs_defaultclEvE6__rs_g;\n    _ZGVZNSt3__115future_categoryEvE3__f;\n    _ZGVZNSt3__115system_categoryEvE1s;\n    _ZGVZNSt3__116generic_categoryEvE1s;\n    _ZGVZNSt3__117iostream_categoryEvE1s;\n    _ZGVZNSt3__119__thread_local_dataEvE3__p;\n    _ZGVZNSt3__16__clocEvE6result;\n    _ZGVZNSt3__16locale7classicEvE1c;\n    _ZGVZNSt3__16locale8__globalEvE1g;\n    _ZGVZNSt3__18__get_dbEvE2db;\n    _ZGVZNSt3__1L10init_am_pmEvE5am_pm;\n    _ZGVZNSt3__1L10init_weeksEvE5weeks;\n    _ZGVZNSt3__1L11init_monthsEvE6months;\n    _ZGVZNSt3__1L11init_wam_pmEvE5am_pm;\n    _ZGVZNSt3__1L11init_wweeksEvE5weeks;\n    _ZGVZNSt3__1L12init_wmonthsEvE6months;\n    _ZN10__cxxabiv114call_terminateEbP17_Unwind_Exception;\n    _ZN10__cxxabiv127dependent_exception_cleanupE19_Unwind_Reason_CodeP17_Unwind_Exception;\n    _ZN10__cxxabiv1L22exception_cleanup_funcE19_Unwind_Reason_CodeP17_Unwind_Exception;\n    _ZN10__cxxabiv1L9do_mallocEm;\n    _Znam;\n    _ZnamRKSt9nothrow_t;\n    _ZNKSt3__111__libcpp_db15__subscriptableEPKvl;\n    _ZNKSt3__111__libcpp_db9__addableEPKvl;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindERKS5_m;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6substrEmm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm;\n    _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixEm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindERKS5_m;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6substrEmm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm;\n    _ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixEm;\n    _ZNKSt3__114__codecvt_utf8IDiE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__114__codecvt_utf8IDsE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__114__codecvt_utf8IwE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IDiLb0EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IDiLb1EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IDsLb0EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IDsLb1EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IwLb0EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__115__codecvt_utf16IwLb1EE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__120__codecvt_utf8_utf16IDiE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__120__codecvt_utf8_utf16IDsE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__120__codecvt_utf8_utf16IwE9do_lengthER9mbstate_tPKcS5_m;\n    _ZNKSt3__17codecvtIcc9mbstate_tE9do_lengthERS1_PKcS5_m;\n    _ZNKSt3__17codecvtIDic9mbstate_tE9do_lengthERS1_PKcS5_m;\n    _ZNKSt3__17codecvtIDsc9mbstate_tE9do_lengthERS1_PKcS5_m;\n    _ZNKSt3__17codecvtIwc9mbstate_tE9do_lengthERS1_PKcS5_m;\n    _ZNKSt3__18messagesIcE3getEliiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNKSt3__18messagesIcE5closeEl;\n    _ZNKSt3__18messagesIcE6do_getEliiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE;\n    _ZNKSt3__18messagesIcE8do_closeEl;\n    _ZNKSt3__18messagesIwE3getEliiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE;\n    _ZNKSt3__18messagesIwE5closeEl;\n    _ZNKSt3__18messagesIwE6do_getEliiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE;\n    _ZNKSt3__18messagesIwE8do_closeEl;\n    _ZNSt3__110moneypunctIcLb0EEC1Em;\n    _ZNSt3__110moneypunctIcLb0EEC2Em;\n    _ZNSt3__110moneypunctIcLb1EEC1Em;\n    _ZNSt3__110moneypunctIcLb1EEC2Em;\n    _ZNSt3__110moneypunctIwLb0EEC1Em;\n    _ZNSt3__110moneypunctIwLb0EEC2Em;\n    _ZNSt3__110moneypunctIwLb1EEC1Em;\n    _ZNSt3__110moneypunctIwLb1EEC2Em;\n    _ZNSt3__110__sscanf_lEPKcP10__locale_tS1_z;\n    _ZNSt3__110__stdinbufIwE9pbackfailEj;\n    _ZNSt3__111__stdoutbufIcE6xsputnEPKcl;\n    _ZNSt3__111__stdoutbufIwE6xsputnEPKwl;\n    _ZNSt3__111__stdoutbufIwE8overflowEj;\n    _ZNSt3__111this_thread9sleep_forERKNS_6chrono8durationIxNS_5ratioILl1ELl1000000000EEEEE;\n    _ZNSt3__112__asprintf_lEPPcP10__locale_tPKcz;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5eraseEmm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_mc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_S8_m;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Emc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EmcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcmRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Emc;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EmcRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcm;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcmRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_;\n    _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5eraseEmm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_mw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_S8_m;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1Emw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EmwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwmRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2Emw;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EmwRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwm;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwmRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_;\n    _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixEm;\n    _ZNSt3__112ctype_bynameIcEC1EPKcm;\n    _ZNSt3__112ctype_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__112ctype_bynameIcEC2EPKcm;\n    _ZNSt3__112ctype_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__112ctype_bynameIwEC1EPKcm;\n    _ZNSt3__112ctype_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__112ctype_bynameIwEC2EPKcm;\n    _ZNSt3__112ctype_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__112__next_primeEm;\n    _ZNSt3__112__snprintf_lEPcmP10__locale_tPKcz;\n    _ZNSt3__112strstreambuf6__initEPclS1_;\n    _ZNSt3__112strstreambufC1El;\n    _ZNSt3__112strstreambufC1EPalS1_;\n    _ZNSt3__112strstreambufC1EPclS1_;\n    _ZNSt3__112strstreambufC1EPFPvmEPFvS1_E;\n    _ZNSt3__112strstreambufC1EPhlS1_;\n    _ZNSt3__112strstreambufC1EPKal;\n    _ZNSt3__112strstreambufC1EPKcl;\n    _ZNSt3__112strstreambufC1EPKhl;\n    _ZNSt3__112strstreambufC2El;\n    _ZNSt3__112strstreambufC2EPalS1_;\n    _ZNSt3__112strstreambufC2EPclS1_;\n    _ZNSt3__112strstreambufC2EPFPvmEPFvS1_E;\n    _ZNSt3__112strstreambufC2EPhlS1_;\n    _ZNSt3__112strstreambufC2EPKal;\n    _ZNSt3__112strstreambufC2EPKcl;\n    _ZNSt3__112strstreambufC2EPKhl;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPcl;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPclc;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4readEPcl;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6ignoreEli;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPcl;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPclc;\n    _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE8readsomeEPcl;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwl;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwlw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4readEPwl;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6ignoreElj;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwl;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwlw;\n    _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE8readsomeEPwl;\n    _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5writeEPKcl;\n    _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5writeEPKwl;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC1EPKcm;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC2EPKcm;\n    _ZNSt3__114codecvt_bynameIcc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC1EPKcm;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC2EPKcm;\n    _ZNSt3__114codecvt_bynameIDic9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC1EPKcm;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC2EPKcm;\n    _ZNSt3__114codecvt_bynameIDsc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC1EPKcm;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC2EPKcm;\n    _ZNSt3__114codecvt_bynameIwc9mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114collate_bynameIcEC1EPKcm;\n    _ZNSt3__114collate_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114collate_bynameIcEC2EPKcm;\n    _ZNSt3__114collate_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114collate_bynameIwEC1EPKcm;\n    _ZNSt3__114collate_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__114collate_bynameIwEC2EPKcm;\n    _ZNSt3__114collate_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetnEPcl;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputnEPKcl;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6setbufEPcl;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPcl;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKcl;\n    _ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pubsetbufEPcl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetnEPwl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputnEPKwl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6setbufEPwl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsgetnEPwl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsputnEPKwl;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8overflowEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj;\n    _ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pubsetbufEPwl;\n    _ZNSt3__115messages_bynameIcEC1EPKcm;\n    _ZNSt3__115messages_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115messages_bynameIcEC2EPKcm;\n    _ZNSt3__115messages_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115messages_bynameIwEC1EPKcm;\n    _ZNSt3__115messages_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115messages_bynameIwEC2EPKcm;\n    _ZNSt3__115messages_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115numpunct_bynameIcEC1EPKcm;\n    _ZNSt3__115numpunct_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115numpunct_bynameIcEC2EPKcm;\n    _ZNSt3__115numpunct_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115numpunct_bynameIwEC1EPKcm;\n    _ZNSt3__115numpunct_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115numpunct_bynameIwEC2EPKcm;\n    _ZNSt3__115numpunct_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcm;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcm;\n    _ZNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcm;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcm;\n    _ZNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcm;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcm;\n    _ZNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcm;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcm;\n    _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__116__narrow_to_utf8ILm16EED0Ev;\n    _ZNSt3__116__narrow_to_utf8ILm16EED1Ev;\n    _ZNSt3__116__narrow_to_utf8ILm16EED2Ev;\n    _ZNSt3__116__narrow_to_utf8ILm32EED0Ev;\n    _ZNSt3__116__narrow_to_utf8ILm32EED1Ev;\n    _ZNSt3__116__narrow_to_utf8ILm32EED2Ev;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC1EPKcm;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC2EPKcm;\n    _ZNSt3__117moneypunct_bynameIcLb0EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC1EPKcm;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC2EPKcm;\n    _ZNSt3__117moneypunct_bynameIcLb1EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC1EPKcm;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC2EPKcm;\n    _ZNSt3__117moneypunct_bynameIwLb0EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC1EPKcm;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC2EPKcm;\n    _ZNSt3__117moneypunct_bynameIwLb1EEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__117__widen_from_utf8ILm16EED0Ev;\n    _ZNSt3__117__widen_from_utf8ILm16EED1Ev;\n    _ZNSt3__117__widen_from_utf8ILm16EED2Ev;\n    _ZNSt3__117__widen_from_utf8ILm32EED0Ev;\n    _ZNSt3__117__widen_from_utf8ILm32EED1Ev;\n    _ZNSt3__117__widen_from_utf8ILm32EED2Ev;\n    _ZNSt3__118condition_variable15__do_timed_waitERNS_11unique_lockINS_5mutexEEENS_6chrono10time_pointINS5_12system_clockENS5_8durationIxNS_5ratioILl1ELl1000000000EEEEEEE;\n    _ZNSt3__119declare_no_pointersEPcm;\n    _ZNSt3__121undeclare_no_pointersEPcm;\n    _ZNSt3__14stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm;\n    _ZNSt3__14stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm;\n    _ZNSt3__14stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm;\n    _ZNSt3__14stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm;\n    _ZNSt3__14stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi;\n    _ZNSt3__14stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi;\n    _ZNSt3__14stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi;\n    _ZNSt3__14stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi;\n    _ZNSt3__15alignEmmRPvRm;\n    _ZNSt3__15ctypeIcEC1EPKtbm;\n    _ZNSt3__15ctypeIcEC2EPKtbm;\n    _ZNSt3__15stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm;\n    _ZNSt3__15stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm;\n    _ZNSt3__15stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi;\n    _ZNSt3__15stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi;\n    _ZNSt3__15stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi;\n    _ZNSt3__15stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi;\n    _ZNSt3__16chrono12system_clock9to_time_tERKNS0_10time_pointIS1_NS0_8durationIxNS_5ratioILl1ELl1000000EEEEEEE;\n    _ZNSt3__16gslice6__initEm;\n    _ZNSt3__16locale5__impC1Em;\n    _ZNSt3__16locale5__impC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__16locale5__impC2Em;\n    _ZNSt3__16locale5__impC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm;\n    _ZNSt3__16stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi;\n    _ZNSt3__16stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lm28EEEE6assignIPS3_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS3_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lm28EEEE8__appendEm;\n    _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lm28EEEEC2Em;\n    _ZNSt3__17codecvtIwc9mbstate_tEC1Em;\n    _ZNSt3__17codecvtIwc9mbstate_tEC1EPKcm;\n    _ZNSt3__17codecvtIwc9mbstate_tEC2Em;\n    _ZNSt3__17codecvtIwc9mbstate_tEC2EPKcm;\n    _ZNSt3__17collateIcEC1Em;\n    _ZNSt3__17collateIcEC2Em;\n    _ZNSt3__17collateIwEC1Em;\n    _ZNSt3__17collateIwEC2Em;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__18messagesIcEC1Em;\n    _ZNSt3__18messagesIcEC2Em;\n    _ZNSt3__18messagesIwEC1Em;\n    _ZNSt3__18messagesIwEC2Em;\n    _ZNSt3__18numpunctIcEC1Em;\n    _ZNSt3__18numpunctIcEC2Em;\n    _ZNSt3__18numpunctIwEC1Em;\n    _ZNSt3__18numpunctIwEC2Em;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1EPKcm;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2EPKcm;\n    _ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2ERKNS_12basic_stringIcS3_NS_9allocatorIcEEEEm;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1EPKcm;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2EPKcm;\n    _ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2ERKNS_12basic_stringIcNS2_IcEENS_9allocatorIcEEEEm;\n    _ZNSt3__18valarrayImE6resizeEmm;\n    _ZNSt3__18valarrayImEC1Em;\n    _ZNSt3__18valarrayImEC2Em;\n    _ZNSt3__18valarrayImED1Ev;\n    _ZNSt3__18valarrayImED2Ev;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC1Em;\n    _ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEC2Em;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC1Em;\n    _ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEC2Em;\n    _ZNSt3__1L12mut_back_impE;\n    _ZNSt3__1L19utf8_to_ucs4_lengthEPKhS1_mmNS_12codecvt_modeE;\n    _ZNSt3__1L20utf8_to_utf16_lengthEPKhS1_mmNS_12codecvt_modeE;\n    _ZNSt3__1L22utf16be_to_ucs4_lengthEPKhS1_mmNS_12codecvt_modeE;\n    _ZNSt3__1L22utf16le_to_ucs4_lengthEPKhS1_mmNS_12codecvt_modeE;\n    _ZNSt3__1L2cvE;\n    _ZNSt3__1L3mutE;\n    _ZNSt3__1L8__rs_mutE;\n    _Znwm;\n    _ZnwmRKSt9nothrow_t;\n    _ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE16_NS_13basic_ostreamIcS2_EE;\n    _ZTCNSt3__19strstreamE16_NS_13basic_ostreamIcNS_11char_traitsIcEEEE;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__cEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__rEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__xEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__XEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__am_pmEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE7__weeksEv;\n    _ZThn16_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__monthsEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__cEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__rEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__xEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3__XEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__am_pmEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE7__weeksEv;\n    _ZThn16_NKSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__monthsEv;\n    _ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZThn16_NSt3__19strstreamD0Ev;\n    _ZThn16_NSt3__19strstreamD1Ev;\n    _ZTINSt3__116__narrow_to_utf8ILm16EEE;\n    _ZTINSt3__116__narrow_to_utf8ILm32EEE;\n    _ZTINSt3__117__widen_from_utf8ILm16EEE;\n    _ZTINSt3__117__widen_from_utf8ILm32EEE;\n    _ZTSNSt3__116__narrow_to_utf8ILm16EEE;\n    _ZTSNSt3__116__narrow_to_utf8ILm32EEE;\n    _ZTSNSt3__117__widen_from_utf8ILm16EEE;\n    _ZTSNSt3__117__widen_from_utf8ILm32EEE;\n    _ZTv0_n24_NSt3__110istrstreamD0Ev;\n    _ZTv0_n24_NSt3__110istrstreamD1Ev;\n    _ZTv0_n24_NSt3__110ostrstreamD0Ev;\n    _ZTv0_n24_NSt3__110ostrstreamD1Ev;\n    _ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n24_NSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev;\n    _ZTv0_n24_NSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev;\n    _ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n24_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev;\n    _ZTv0_n24_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev;\n    _ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev;\n    _ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev;\n    _ZTv0_n24_NSt3__19strstreamD0Ev;\n    _ZTv0_n24_NSt3__19strstreamD1Ev;\n    _ZTVNSt3__116__narrow_to_utf8ILm16EEE;\n    _ZTVNSt3__116__narrow_to_utf8ILm32EEE;\n    _ZTVNSt3__117__widen_from_utf8ILm16EEE;\n    _ZTVNSt3__117__widen_from_utf8ILm32EEE;\n    _ZZ12logUnwindingE3log;\n    _ZZ12logUnwindingE7checked;\n    _ZZ7logAPIsE3log;\n    _ZZ7logAPIsE7checked;\n    _ZZNSt3__112__get_sp_mutEPKvE4muts;\n    _ZZNSt3__112__rs_defaultclEvE6__rs_g;\n    _ZZNSt3__115future_categoryEvE3__f;\n    _ZZNSt3__115system_categoryEvE1s;\n    _ZZNSt3__116generic_categoryEvE1s;\n    _ZZNSt3__117iostream_categoryEvE1s;\n    _ZZNSt3__119__thread_local_dataEvE3__p;\n    _ZZNSt3__16__clocEvE6result;\n    _ZZNSt3__16locale7classicEvE1c;\n    _ZZNSt3__16locale8__globalEvE1g;\n    _ZZNSt3__18__get_dbEvE2db;\n    _ZZNSt3__18ios_base5iwordEiE5error;\n    _ZZNSt3__18ios_base5pwordEiE5error;\n    _ZZNSt3__1L10init_am_pmEvE5am_pm;\n    _ZZNSt3__1L10init_weeksEvE5weeks;\n    _ZZNSt3__1L11init_monthsEvE6months;\n    _ZZNSt3__1L11init_wam_pmEvE5am_pm;\n    _ZZNSt3__1L11init_wweeksEvE5weeks;\n    _ZZNSt3__1L12init_wmonthsEvE6months;\n\n  local: *;\n};\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/test/Android.mk",
    "content": "# This file is dual licensed under the MIT and the University of Illinois Open\n# Source Licenses. See LICENSE.TXT for details.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_shared\nLOCAL_SRC_FILES := test_1.cc\nLOCAL_SHARED_LIBRARIES := libc++_shared\ninclude $(BUILD_EXECUTABLE)\n\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_static\nLOCAL_SRC_FILES := test_1.cc\nLOCAL_STATIC_LIBRARIES := libc++_static\nLOCAL_LDFLAGS := -Wl,-gc-sections\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(LOCAL_PATH)/../Android.mk\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++/test/test_1.cc",
    "content": "// -*- C++ -*-\n//===-------------------- support/android/wchar_support.c ------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <locale>\n\nint main(void) {\n  // TODO(digit): This imbue is required, otherwise a crash will happen\n  // at runtime, with the following stack trace:\n  //\n  //   #0  0x00069ae0 in std::(anonymous namespace)::default_terminate () at jni/../../../../gabi++/src/terminate.cc:57\n  //   #1  0x00069e48 in std::terminate () at jni/../../../../gabi++/src/terminate.cc:123\n  //   #2  0x00067d44 in __cxxabiv1::call_terminate (unwind_exception=0x1827470) at jni/../../../../gabi++/src/helper_func_internal.cc:58\n  //   #3  0x00066bf8 in (anonymous namespace)::throwException (header=0x1827438) at jni/../../../../gabi++/src/cxxabi.cc:126\n  //   #4  0x00066e64 in __cxxabiv1::__cxa_throw (thrown_exc=0x18274c8, tinfo=0x7fa00, dest=0x69c10 <std::bad_cast::~bad_cast()>)\n  //       at jni/../../../../gabi++/src/cxxabi.cc:190\n  //   #5  0x00010be0 in std::__1::locale::__imp::use_facet (this=0x80b28, id=28) at jni/../../../libcxx/src/locale.cpp:426\n  //   #6  0x00010f50 in std::__1::locale::use_facet (this=0xbe980ab4, x=...) at jni/../../../libcxx/src/locale.cpp:568\n  //   #7  0x00009e88 in use_facet<std::__1::ctype<char> > (__l=<optimized out>) at jni/../../../libcxx/include/__locale:172\n  //   #8  widen (__c=10 '\\n', this=0x80084) at jni/../../../libcxx/include/ios:726\n  //   #9  std::__1::endl<char, std::__1::char_traits<char> > (__os=...) at jni/../../../libcxx/include/ostream:1181\n  //   #10 0x00009ad0 in operator<< (\n  //   __pf=0x9e20 <std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, this=0x80080) at jni/../../../libcxx/include/ostream:306\n  //   #11 main () at jni/test_1.cc:22\n  //\n  // The issue seems to be that on #9, the id retrieved through\n  // locale::id::__get() reaches 28, which is an invalid index in the\n  // facets_ vector defined in locale.cpp:124 and populated in\n  // locale::__imp::__imp(size_t) in the same source file.\n  //\n  // Not sure if a libc++ bug or something else. Investigate.\n  std::cout.imbue(std::locale(\"C\"));\n  std::cout << \"Hello World\" << std::endl;\n  return 0;\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/CREDITS.TXT",
    "content": "This file is a partial list of people who have contributed to the LLVM/libc++abi\nproject.  If you have contributed a patch or made some other contribution to\nLLVM/libc++abi, please submit a patch to this file to add yourself, and it will be\ndone!\n\nThe list is sorted by surname and formatted to allow easy grepping and\nbeautification by scripts.  The fields are: name (N), email (E), web-address\n(W), PGP key ID and fingerprint (P), description (D), and snail-mail address\n(S).\n\nN: Aaron Ballman\nE: aaron@aaronballman.com\nD: Minor patches\n\nN: Logan Chien\nE: logan.chien@mediatek.com\nD: ARM EHABI Unwind & Exception Handling\n\nN: Marshall Clow\nE: mclow.lists@gmail.com\nE: marshall@idio.com\nD: Architect and primary coauthor of libc++abi\n\nN: Matthew Dempsky\nE: matthew@dempsky.org\nD: Minor patches and bug fixes.\n\nN: Nowar Gu\nE: wenhan.gu@gmail.com\nD: Minor patches and fixes\n\nN: Howard Hinnant\nE: hhinnant@apple.com\nD: Architect and primary coauthor of libc++abi\n\nN: Dana Jansens\nE: danakj@chromium.org\nD: ARM EHABI Unwind & Exception Handling\n\nN: Nick Kledzik\nE: kledzik@apple.com\n\nN: Antoine Labour\nE: piman@chromium.org\nD: ARM EHABI Unwind & Exception Handling\n\nN: Bruce Mitchener, Jr.\nE: bruce.mitchener@gmail.com\nD: Minor typo fixes\n\nN: Andrew Morrow\nE: andrew.c.morrow@gmail.com\nD: Minor patches and fixes\n\nN: Erik Olofsson\nE: erik.olofsson@hansoft.se\nE: erik@olofsson.info\nD: Minor patches and fixes\n\nN: Jon Roelofs\nE: jonathan@codesourcery.com\nD: ARM EHABI Unwind & Exception Handling, Bare-metal\n\nN: Nico Weber\nE: thakis@chromium.org\nD: ARM EHABI Unwind & Exception Handling\n\nN: Albert J. Wong\nE: ajwong@google.com\nD: ARM EHABI Unwind & Exception Handling\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/LICENSE.TXT",
    "content": "==============================================================================\nlibc++abi License\n==============================================================================\n\nThe libc++abi library is dual licensed under both the University of Illinois\n\"BSD-Like\" license and the MIT license.  As a user of this code you may choose\nto use it under either license.  As a contributor, you agree to allow your code\nto be used under both.\n\nFull text of the relevant licenses is included below.\n\n==============================================================================\n\nUniversity of Illinois/NCSA\nOpen Source License\n\nCopyright (c) 2009-2014 by the contributors listed in CREDITS.TXT\n\nAll rights reserved.\n\nDeveloped by:\n\n    LLVM Team\n\n    University of Illinois at Urbana-Champaign\n\n    http://llvm.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal with\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimers.\n\n    * Redistributions in binary form must reproduce the above copyright notice,\n      this list of conditions and the following disclaimers in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the names of the LLVM Team, University of Illinois at\n      Urbana-Champaign, nor the names of its contributors may be used to\n      endorse or promote products derived from this Software without specific\n      prior written permission.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nCONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE\nSOFTWARE.\n\n==============================================================================\n\nCopyright (c) 2009-2014 by the contributors listed in CREDITS.TXT\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/include/__cxxabi_config.h",
    "content": "//===-------------------------- __cxxabi_config.h -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef ____CXXABI_CONFIG_H\n#define ____CXXABI_CONFIG_H\n\n#if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \\\n    !defined(__ARM_DWARF_EH__)\n#define LIBCXXABI_ARM_EHABI 1\n#else\n#define LIBCXXABI_ARM_EHABI 0\n#endif\n\n#endif // ____CXXABI_CONFIG_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/include/cxxabi.h",
    "content": "//===--------------------------- cxxabi.h ---------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __CXXABI_H\n#define __CXXABI_H\n\n/*\n * This header provides the interface to the C++ ABI as defined at:\n *       http://www.codesourcery.com/cxx-abi/\n */\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include <__cxxabi_config.h>\n\n#define _LIBCPPABI_VERSION 1001\n#define LIBCXXABI_NORETURN  __attribute__((noreturn))\n\n#ifdef __cplusplus\n\nnamespace std {\nclass type_info; // forward declaration\n}\n\n\n// runtime routines use C calling conventions, but are in __cxxabiv1 namespace\nnamespace __cxxabiv1 {\nextern \"C\"  {\n\n// 2.4.2 Allocating the Exception Object\nextern void * __cxa_allocate_exception(size_t thrown_size) throw();\nextern void __cxa_free_exception(void * thrown_exception) throw();\n\n// 2.4.3 Throwing the Exception Object\nextern LIBCXXABI_NORETURN void __cxa_throw(void * thrown_exception,\n        std::type_info * tinfo, void (*dest)(void *));\n\n// 2.5.3 Exception Handlers\nextern void * __cxa_get_exception_ptr(void * exceptionObject) throw();\nextern void * __cxa_begin_catch(void * exceptionObject) throw();\nextern void __cxa_end_catch();\n#if LIBCXXABI_ARM_EHABI\nextern bool __cxa_begin_cleanup(void * exceptionObject) throw();\nextern void __cxa_end_cleanup();\n#endif\nextern std::type_info * __cxa_current_exception_type();\n\n// 2.5.4 Rethrowing Exceptions\nextern LIBCXXABI_NORETURN void __cxa_rethrow();\n\n\n\n// 2.6 Auxiliary Runtime APIs\nextern LIBCXXABI_NORETURN void __cxa_bad_cast(void);\nextern LIBCXXABI_NORETURN void __cxa_bad_typeid(void);\nextern LIBCXXABI_NORETURN void __cxa_throw_bad_array_new_length(void);\n\n\n\n// 3.2.6 Pure Virtual Function API\nextern LIBCXXABI_NORETURN void __cxa_pure_virtual(void);\n\n// 3.2.7 Deleted Virtual Function API\nextern LIBCXXABI_NORETURN void __cxa_deleted_virtual(void);\n\n// 3.3.2 One-time Construction API\n#ifdef __arm__\nextern int  __cxa_guard_acquire(uint32_t*);\nextern void __cxa_guard_release(uint32_t*);\nextern void __cxa_guard_abort(uint32_t*);\n#else\nextern int  __cxa_guard_acquire(uint64_t*);\nextern void __cxa_guard_release(uint64_t*);\nextern void __cxa_guard_abort(uint64_t*);\n#endif\n\n// 3.3.3 Array Construction and Destruction API\nextern void* __cxa_vec_new(size_t element_count,\n                           size_t element_size,\n                           size_t padding_size,\n                           void (*constructor)(void*),\n                           void (*destructor)(void*));\n\nextern void* __cxa_vec_new2(size_t element_count,\n                            size_t element_size,\n                            size_t padding_size,\n                            void  (*constructor)(void*),\n                            void  (*destructor)(void*),\n                            void* (*alloc)(size_t),\n                            void  (*dealloc)(void*));\n\nextern void* __cxa_vec_new3(size_t element_count,\n                            size_t element_size,\n                            size_t padding_size,\n                            void  (*constructor)(void*),\n                            void  (*destructor)(void*),\n                            void* (*alloc)(size_t),\n                            void  (*dealloc)(void*, size_t));\n\nextern void __cxa_vec_ctor(void*  array_address,\n                           size_t element_count,\n                           size_t element_size,\n                           void (*constructor)(void*),\n                           void (*destructor)(void*));\n\nextern void __cxa_vec_dtor(void*  array_address,\n                           size_t element_count,\n                           size_t element_size,\n                           void (*destructor)(void*));\n\nextern void __cxa_vec_cleanup(void* array_address,\n                             size_t element_count,\n                             size_t element_size,\n                             void  (*destructor)(void*));\n\nextern void __cxa_vec_delete(void*  array_address,\n                             size_t element_size,\n                             size_t padding_size,\n                             void  (*destructor)(void*));\n\nextern void __cxa_vec_delete2(void* array_address,\n                             size_t element_size,\n                             size_t padding_size,\n                             void  (*destructor)(void*),\n                             void  (*dealloc)(void*));\n\nextern void __cxa_vec_delete3(void* __array_address,\n                             size_t element_size,\n                             size_t padding_size,\n                             void  (*destructor)(void*),\n                             void  (*dealloc)(void*, size_t));\n\nextern void __cxa_vec_cctor(void*  dest_array,\n                            void*  src_array,\n                            size_t element_count,\n                            size_t element_size,\n                            void  (*constructor)(void*, void*),\n                            void  (*destructor)(void*));\n\n// 3.3.5.3 Runtime API\nextern int __cxa_atexit(void (*f)(void*), void* p, void* d);\nextern int __cxa_finalize(void*);\n\n// 3.4 Demangler API\nextern char* __cxa_demangle(const char* mangled_name,\n                            char*       output_buffer,\n                            size_t*     length,\n                            int*        status);\n\n// Apple additions to support C++ 0x exception_ptr class\n// These are primitives to wrap a smart pointer around an exception object\nextern void * __cxa_current_primary_exception() throw();\nextern void __cxa_rethrow_primary_exception(void* primary_exception);\nextern void __cxa_increment_exception_refcount(void* primary_exception) throw();\nextern void __cxa_decrement_exception_refcount(void* primary_exception) throw();\n\n// Apple addition to support std::uncaught_exception()\nextern bool __cxa_uncaught_exception() throw();\n\n#ifdef __linux__\n// Linux TLS support. Not yet an official part of the Itanium ABI.\n// https://sourceware.org/glibc/wiki/Destructor%20support%20for%20thread_local%20variables\nextern int __cxa_thread_atexit(void (*)(void *), void *, void *) throw();\n#endif\n\n  } // extern \"C\"\n} // namespace __cxxabiv1\n\nnamespace abi = __cxxabiv1;\n\n#endif // __cplusplus\n\n#endif // __CXXABI_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/include/libunwind.h",
    "content": "//===---------------------------- libunwind.h -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// Compatible with libuwind API documented at:\n//   http://www.nongnu.org/libunwind/man/libunwind(3).html\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __LIBUNWIND__\n#define __LIBUNWIND__\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include <__cxxabi_config.h>\n\n#ifdef __APPLE__\n  #include <Availability.h>\n    #ifdef __arm__\n       #define LIBUNWIND_AVAIL __attribute__((unavailable))\n    #else\n      #define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0)\n    #endif\n#else\n  #define LIBUNWIND_AVAIL\n#endif\n\n/* error codes */\nenum {\n  UNW_ESUCCESS      = 0,     /* no error */\n  UNW_EUNSPEC       = -6540, /* unspecified (general) error */\n  UNW_ENOMEM        = -6541, /* out of memory */\n  UNW_EBADREG       = -6542, /* bad register number */\n  UNW_EREADONLYREG  = -6543, /* attempt to write read-only register */\n  UNW_ESTOPUNWIND   = -6544, /* stop unwinding */\n  UNW_EINVALIDIP    = -6545, /* invalid IP */\n  UNW_EBADFRAME     = -6546, /* bad frame */\n  UNW_EINVAL        = -6547, /* unsupported operation or bad value */\n  UNW_EBADVERSION   = -6548, /* unwind info has unsupported version */\n  UNW_ENOINFO       = -6549  /* no unwind info found */\n};\n\nstruct unw_context_t {\n  uint64_t data[128];\n};\ntypedef struct unw_context_t unw_context_t;\n\nstruct unw_cursor_t {\n  uint64_t data[140];\n};\ntypedef struct unw_cursor_t unw_cursor_t;\n\ntypedef struct unw_addr_space *unw_addr_space_t;\n\ntypedef int unw_regnum_t;\n#if LIBCXXABI_ARM_EHABI\ntypedef uint32_t unw_word_t;\ntypedef uint64_t unw_fpreg_t;\n#else\ntypedef uint64_t unw_word_t;\ntypedef double unw_fpreg_t;\n#endif\n\nstruct unw_proc_info_t {\n  unw_word_t  start_ip;         /* start address of function */\n  unw_word_t  end_ip;           /* address after end of function */\n  unw_word_t  lsda;             /* address of language specific data area, */\n                                /*  or zero if not used */\n  unw_word_t  handler;          /* personality routine, or zero if not used */\n  unw_word_t  gp;               /* not used */\n  unw_word_t  flags;            /* not used */\n  uint32_t    format;           /* compact unwind encoding, or zero if none */\n  uint32_t    unwind_info_size; /* size of dwarf unwind info, or zero if none */\n  unw_word_t  unwind_info;      /* address of dwarf unwind info, or zero */\n  unw_word_t  extra;            /* mach_header of mach-o image containing func */\n};\ntypedef struct unw_proc_info_t unw_proc_info_t;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int unw_getcontext(unw_context_t *) LIBUNWIND_AVAIL;\nextern int unw_init_local(unw_cursor_t *, unw_context_t *) LIBUNWIND_AVAIL;\nextern int unw_step(unw_cursor_t *) LIBUNWIND_AVAIL;\nextern int unw_get_reg(unw_cursor_t *, unw_regnum_t, unw_word_t *) LIBUNWIND_AVAIL;\nextern int unw_get_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *) LIBUNWIND_AVAIL;\nextern int unw_set_reg(unw_cursor_t *, unw_regnum_t, unw_word_t) LIBUNWIND_AVAIL;\nextern int unw_set_fpreg(unw_cursor_t *, unw_regnum_t, unw_fpreg_t)  LIBUNWIND_AVAIL;\nextern int unw_resume(unw_cursor_t *) LIBUNWIND_AVAIL;\n\n#ifdef __arm__\n/* Save VFP registers in FSTMX format (instead of FSTMD). */\nextern void unw_save_vfp_as_X(unw_cursor_t *) LIBUNWIND_AVAIL;\n#endif\n\n\nextern const char *unw_regname(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;\nextern int unw_get_proc_info(unw_cursor_t *, unw_proc_info_t *) LIBUNWIND_AVAIL;\nextern int unw_is_fpreg(unw_cursor_t *, unw_regnum_t) LIBUNWIND_AVAIL;\nextern int unw_is_signal_frame(unw_cursor_t *) LIBUNWIND_AVAIL;\nextern int unw_get_proc_name(unw_cursor_t *, char *, size_t, unw_word_t *) LIBUNWIND_AVAIL;\n//extern int       unw_get_save_loc(unw_cursor_t*, int, unw_save_loc_t*);\n\nextern unw_addr_space_t unw_local_addr_space;\n\n#ifdef UNW_REMOTE\n/*\n * Mac OS X \"remote\" API for unwinding other processes on same machine\n *\n */\nextern unw_addr_space_t unw_create_addr_space_for_task(task_t);\nextern void unw_destroy_addr_space(unw_addr_space_t);\nextern int unw_init_remote_thread(unw_cursor_t *, unw_addr_space_t, thread_t *);\n#endif /* UNW_REMOTE */\n\n/*\n * traditional libuwind \"remote\" API\n *   NOT IMPLEMENTED on Mac OS X\n *\n * extern int               unw_init_remote(unw_cursor_t*, unw_addr_space_t,\n *                                          thread_t*);\n * extern unw_accessors_t   unw_get_accessors(unw_addr_space_t);\n * extern unw_addr_space_t  unw_create_addr_space(unw_accessors_t, int);\n * extern void              unw_flush_cache(unw_addr_space_t, unw_word_t,\n *                                          unw_word_t);\n * extern int               unw_set_caching_policy(unw_addr_space_t,\n *                                                 unw_caching_policy_t);\n * extern void              _U_dyn_register(unw_dyn_info_t*);\n * extern void              _U_dyn_cancel(unw_dyn_info_t*);\n */\n\n#ifdef __cplusplus\n}\n#endif\n\n// architecture independent register numbers\nenum {\n  UNW_REG_IP = -1, // instruction pointer\n  UNW_REG_SP = -2, // stack pointer\n};\n\n// 32-bit x86 registers\nenum {\n  UNW_X86_EAX = 0,\n  UNW_X86_ECX = 1,\n  UNW_X86_EDX = 2,\n  UNW_X86_EBX = 3,\n  UNW_X86_EBP = 4,\n  UNW_X86_ESP = 5,\n  UNW_X86_ESI = 6,\n  UNW_X86_EDI = 7\n};\n\n// 64-bit x86_64 registers\nenum {\n  UNW_X86_64_RAX = 0,\n  UNW_X86_64_RDX = 1,\n  UNW_X86_64_RCX = 2,\n  UNW_X86_64_RBX = 3,\n  UNW_X86_64_RSI = 4,\n  UNW_X86_64_RDI = 5,\n  UNW_X86_64_RBP = 6,\n  UNW_X86_64_RSP = 7,\n  UNW_X86_64_R8  = 8,\n  UNW_X86_64_R9  = 9,\n  UNW_X86_64_R10 = 10,\n  UNW_X86_64_R11 = 11,\n  UNW_X86_64_R12 = 12,\n  UNW_X86_64_R13 = 13,\n  UNW_X86_64_R14 = 14,\n  UNW_X86_64_R15 = 15\n};\n\n\n// 32-bit ppc register numbers\nenum {\n  UNW_PPC_R0  = 0,\n  UNW_PPC_R1  = 1,\n  UNW_PPC_R2  = 2,\n  UNW_PPC_R3  = 3,\n  UNW_PPC_R4  = 4,\n  UNW_PPC_R5  = 5,\n  UNW_PPC_R6  = 6,\n  UNW_PPC_R7  = 7,\n  UNW_PPC_R8  = 8,\n  UNW_PPC_R9  = 9,\n  UNW_PPC_R10 = 10,\n  UNW_PPC_R11 = 11,\n  UNW_PPC_R12 = 12,\n  UNW_PPC_R13 = 13,\n  UNW_PPC_R14 = 14,\n  UNW_PPC_R15 = 15,\n  UNW_PPC_R16 = 16,\n  UNW_PPC_R17 = 17,\n  UNW_PPC_R18 = 18,\n  UNW_PPC_R19 = 19,\n  UNW_PPC_R20 = 20,\n  UNW_PPC_R21 = 21,\n  UNW_PPC_R22 = 22,\n  UNW_PPC_R23 = 23,\n  UNW_PPC_R24 = 24,\n  UNW_PPC_R25 = 25,\n  UNW_PPC_R26 = 26,\n  UNW_PPC_R27 = 27,\n  UNW_PPC_R28 = 28,\n  UNW_PPC_R29 = 29,\n  UNW_PPC_R30 = 30,\n  UNW_PPC_R31 = 31,\n  UNW_PPC_F0  = 32,\n  UNW_PPC_F1  = 33,\n  UNW_PPC_F2  = 34,\n  UNW_PPC_F3  = 35,\n  UNW_PPC_F4  = 36,\n  UNW_PPC_F5  = 37,\n  UNW_PPC_F6  = 38,\n  UNW_PPC_F7  = 39,\n  UNW_PPC_F8  = 40,\n  UNW_PPC_F9  = 41,\n  UNW_PPC_F10 = 42,\n  UNW_PPC_F11 = 43,\n  UNW_PPC_F12 = 44,\n  UNW_PPC_F13 = 45,\n  UNW_PPC_F14 = 46,\n  UNW_PPC_F15 = 47,\n  UNW_PPC_F16 = 48,\n  UNW_PPC_F17 = 49,\n  UNW_PPC_F18 = 50,\n  UNW_PPC_F19 = 51,\n  UNW_PPC_F20 = 52,\n  UNW_PPC_F21 = 53,\n  UNW_PPC_F22 = 54,\n  UNW_PPC_F23 = 55,\n  UNW_PPC_F24 = 56,\n  UNW_PPC_F25 = 57,\n  UNW_PPC_F26 = 58,\n  UNW_PPC_F27 = 59,\n  UNW_PPC_F28 = 60,\n  UNW_PPC_F29 = 61,\n  UNW_PPC_F30 = 62,\n  UNW_PPC_F31 = 63,\n  UNW_PPC_MQ  = 64,\n  UNW_PPC_LR  = 65,\n  UNW_PPC_CTR = 66,\n  UNW_PPC_AP  = 67,\n  UNW_PPC_CR0 = 68,\n  UNW_PPC_CR1 = 69,\n  UNW_PPC_CR2 = 70,\n  UNW_PPC_CR3 = 71,\n  UNW_PPC_CR4 = 72,\n  UNW_PPC_CR5 = 73,\n  UNW_PPC_CR6 = 74,\n  UNW_PPC_CR7 = 75,\n  UNW_PPC_XER = 76,\n  UNW_PPC_V0  = 77,\n  UNW_PPC_V1  = 78,\n  UNW_PPC_V2  = 79,\n  UNW_PPC_V3  = 80,\n  UNW_PPC_V4  = 81,\n  UNW_PPC_V5  = 82,\n  UNW_PPC_V6  = 83,\n  UNW_PPC_V7  = 84,\n  UNW_PPC_V8  = 85,\n  UNW_PPC_V9  = 86,\n  UNW_PPC_V10 = 87,\n  UNW_PPC_V11 = 88,\n  UNW_PPC_V12 = 89,\n  UNW_PPC_V13 = 90,\n  UNW_PPC_V14 = 91,\n  UNW_PPC_V15 = 92,\n  UNW_PPC_V16 = 93,\n  UNW_PPC_V17 = 94,\n  UNW_PPC_V18 = 95,\n  UNW_PPC_V19 = 96,\n  UNW_PPC_V20 = 97,\n  UNW_PPC_V21 = 98,\n  UNW_PPC_V22 = 99,\n  UNW_PPC_V23 = 100,\n  UNW_PPC_V24 = 101,\n  UNW_PPC_V25 = 102,\n  UNW_PPC_V26 = 103,\n  UNW_PPC_V27 = 104,\n  UNW_PPC_V28 = 105,\n  UNW_PPC_V29 = 106,\n  UNW_PPC_V30 = 107,\n  UNW_PPC_V31 = 108,\n  UNW_PPC_VRSAVE  = 109,\n  UNW_PPC_VSCR    = 110,\n  UNW_PPC_SPE_ACC = 111,\n  UNW_PPC_SPEFSCR = 112\n};\n\n// 64-bit ARM64 registers\nenum {\n  UNW_ARM64_X0  = 0,\n  UNW_ARM64_X1  = 1,\n  UNW_ARM64_X2  = 2,\n  UNW_ARM64_X3  = 3,\n  UNW_ARM64_X4  = 4,\n  UNW_ARM64_X5  = 5,\n  UNW_ARM64_X6  = 6,\n  UNW_ARM64_X7  = 7,\n  UNW_ARM64_X8  = 8,\n  UNW_ARM64_X9  = 9,\n  UNW_ARM64_X10 = 10,\n  UNW_ARM64_X11 = 11,\n  UNW_ARM64_X12 = 12,\n  UNW_ARM64_X13 = 13,\n  UNW_ARM64_X14 = 14,\n  UNW_ARM64_X15 = 15,\n  UNW_ARM64_X16 = 16,\n  UNW_ARM64_X17 = 17,\n  UNW_ARM64_X18 = 18,\n  UNW_ARM64_X19 = 19,\n  UNW_ARM64_X20 = 20,\n  UNW_ARM64_X21 = 21,\n  UNW_ARM64_X22 = 22,\n  UNW_ARM64_X23 = 23,\n  UNW_ARM64_X24 = 24,\n  UNW_ARM64_X25 = 25,\n  UNW_ARM64_X26 = 26,\n  UNW_ARM64_X27 = 27,\n  UNW_ARM64_X28 = 28,\n  UNW_ARM64_X29 = 29,\n  UNW_ARM64_FP  = 29,\n  UNW_ARM64_X30 = 30,\n  UNW_ARM64_LR  = 30,\n  UNW_ARM64_X31 = 31,\n  UNW_ARM64_SP  = 31,\n  // reserved block\n  UNW_ARM64_D0  = 64,\n  UNW_ARM64_D1  = 65,\n  UNW_ARM64_D2  = 66,\n  UNW_ARM64_D3  = 67,\n  UNW_ARM64_D4  = 68,\n  UNW_ARM64_D5  = 69,\n  UNW_ARM64_D6  = 70,\n  UNW_ARM64_D7  = 71,\n  UNW_ARM64_D8  = 72,\n  UNW_ARM64_D9  = 73,\n  UNW_ARM64_D10 = 74,\n  UNW_ARM64_D11 = 75,\n  UNW_ARM64_D12 = 76,\n  UNW_ARM64_D13 = 77,\n  UNW_ARM64_D14 = 78,\n  UNW_ARM64_D15 = 79,\n  UNW_ARM64_D16 = 80,\n  UNW_ARM64_D17 = 81,\n  UNW_ARM64_D18 = 82,\n  UNW_ARM64_D19 = 83,\n  UNW_ARM64_D20 = 84,\n  UNW_ARM64_D21 = 85,\n  UNW_ARM64_D22 = 86,\n  UNW_ARM64_D23 = 87,\n  UNW_ARM64_D24 = 88,\n  UNW_ARM64_D25 = 89,\n  UNW_ARM64_D26 = 90,\n  UNW_ARM64_D27 = 91,\n  UNW_ARM64_D28 = 92,\n  UNW_ARM64_D29 = 93,\n  UNW_ARM64_D30 = 94,\n  UNW_ARM64_D31 = 95,\n};\n\n// 32-bit ARM registers. Numbers match DWARF for ARM spec #3.1 Table 1.\n// Naming scheme uses recommendations given in Note 4 for VFP-v2 and VFP-v3.\n// In this scheme, even though the 64-bit floating point registers D0-D31\n// overlap physically with the 32-bit floating pointer registers S0-S31,\n// they are given a non-overlapping range of register numbers.\n//\n// Commented out ranges are not preserved during unwinding.\nenum {\n  UNW_ARM_R0  = 0,\n  UNW_ARM_R1  = 1,\n  UNW_ARM_R2  = 2,\n  UNW_ARM_R3  = 3,\n  UNW_ARM_R4  = 4,\n  UNW_ARM_R5  = 5,\n  UNW_ARM_R6  = 6,\n  UNW_ARM_R7  = 7,\n  UNW_ARM_R8  = 8,\n  UNW_ARM_R9  = 9,\n  UNW_ARM_R10 = 10,\n  UNW_ARM_R11 = 11,\n  UNW_ARM_R12 = 12,\n  UNW_ARM_SP  = 13,  // Logical alias for UNW_REG_SP\n  UNW_ARM_R13 = 13,\n  UNW_ARM_LR  = 14,\n  UNW_ARM_R14 = 14,\n  UNW_ARM_IP  = 15,  // Logical alias for UNW_REG_IP\n  UNW_ARM_R15 = 15,\n  // 16-63 -- OBSOLETE. Used in VFP1 to represent both S0-S31 and D0-D31.\n  UNW_ARM_S0  = 64,\n  UNW_ARM_S1  = 65,\n  UNW_ARM_S2  = 66,\n  UNW_ARM_S3  = 67,\n  UNW_ARM_S4  = 68,\n  UNW_ARM_S5  = 69,\n  UNW_ARM_S6  = 70,\n  UNW_ARM_S7  = 71,\n  UNW_ARM_S8  = 72,\n  UNW_ARM_S9  = 73,\n  UNW_ARM_S10 = 74,\n  UNW_ARM_S11 = 75,\n  UNW_ARM_S12 = 76,\n  UNW_ARM_S13 = 77,\n  UNW_ARM_S14 = 78,\n  UNW_ARM_S15 = 79,\n  UNW_ARM_S16 = 80,\n  UNW_ARM_S17 = 81,\n  UNW_ARM_S18 = 82,\n  UNW_ARM_S19 = 83,\n  UNW_ARM_S20 = 84,\n  UNW_ARM_S21 = 85,\n  UNW_ARM_S22 = 86,\n  UNW_ARM_S23 = 87,\n  UNW_ARM_S24 = 88,\n  UNW_ARM_S25 = 89,\n  UNW_ARM_S26 = 90,\n  UNW_ARM_S27 = 91,\n  UNW_ARM_S28 = 92,\n  UNW_ARM_S29 = 93,\n  UNW_ARM_S30 = 94,\n  UNW_ARM_S31 = 95,\n  //  96-103 -- OBSOLETE. F0-F7. Used by the FPA system. Superseded by VFP.\n  // 104-111 -- wCGR0-wCGR7, ACC0-ACC7 (Intel wireless MMX)\n  UNW_ARM_WR0 = 112,\n  UNW_ARM_WR1 = 113,\n  UNW_ARM_WR2 = 114,\n  UNW_ARM_WR3 = 115,\n  UNW_ARM_WR4 = 116,\n  UNW_ARM_WR5 = 117,\n  UNW_ARM_WR6 = 118,\n  UNW_ARM_WR7 = 119,\n  UNW_ARM_WR8 = 120,\n  UNW_ARM_WR9 = 121,\n  UNW_ARM_WR10 = 122,\n  UNW_ARM_WR11 = 123,\n  UNW_ARM_WR12 = 124,\n  UNW_ARM_WR13 = 125,\n  UNW_ARM_WR14 = 126,\n  UNW_ARM_WR15 = 127,\n  // 128-133 -- SPSR, SPSR_{FIQ|IRQ|ABT|UND|SVC}\n  // 134-143 -- Reserved\n  // 144-150 -- R8_USR-R14_USR\n  // 151-157 -- R8_FIQ-R14_FIQ\n  // 158-159 -- R13_IRQ-R14_IRQ\n  // 160-161 -- R13_ABT-R14_ABT\n  // 162-163 -- R13_UND-R14_UND\n  // 164-165 -- R13_SVC-R14_SVC\n  // 166-191 -- Reserved\n  UNW_ARM_WC0 = 192,\n  UNW_ARM_WC1 = 193,\n  UNW_ARM_WC2 = 194,\n  UNW_ARM_WC3 = 195,\n  // 196-199 -- wC4-wC7 (Intel wireless MMX control)\n  // 200-255 -- Reserved\n  UNW_ARM_D0  = 256,\n  UNW_ARM_D1  = 257,\n  UNW_ARM_D2  = 258,\n  UNW_ARM_D3  = 259,\n  UNW_ARM_D4  = 260,\n  UNW_ARM_D5  = 261,\n  UNW_ARM_D6  = 262,\n  UNW_ARM_D7  = 263,\n  UNW_ARM_D8  = 264,\n  UNW_ARM_D9  = 265,\n  UNW_ARM_D10 = 266,\n  UNW_ARM_D11 = 267,\n  UNW_ARM_D12 = 268,\n  UNW_ARM_D13 = 269,\n  UNW_ARM_D14 = 270,\n  UNW_ARM_D15 = 271,\n  UNW_ARM_D16 = 272,\n  UNW_ARM_D17 = 273,\n  UNW_ARM_D18 = 274,\n  UNW_ARM_D19 = 275,\n  UNW_ARM_D20 = 276,\n  UNW_ARM_D21 = 277,\n  UNW_ARM_D22 = 278,\n  UNW_ARM_D23 = 279,\n  UNW_ARM_D24 = 280,\n  UNW_ARM_D25 = 281,\n  UNW_ARM_D26 = 282,\n  UNW_ARM_D27 = 283,\n  UNW_ARM_D28 = 284,\n  UNW_ARM_D29 = 285,\n  UNW_ARM_D30 = 286,\n  UNW_ARM_D31 = 287,\n  // 288-319 -- Reserved for VFP/Neon\n  // 320-8191 -- Reserved\n  // 8192-16383 -- Unspecified vendor co-processor register.\n};\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/include/mach-o/compact_unwind_encoding.h",
    "content": "//===------------------ mach-o/compact_unwind_encoding.h ------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// Darwin's alternative to dwarf based unwind encodings.\n//\n//===----------------------------------------------------------------------===//\n\n\n#ifndef __COMPACT_UNWIND_ENCODING__\n#define __COMPACT_UNWIND_ENCODING__\n\n#include <stdint.h>\n\n//\n// Compilers can emit standard Dwarf FDEs in the __TEXT,__eh_frame section\n// of object files. Or compilers can emit compact unwind information in\n// the __LD,__compact_unwind section.\n//\n// When the linker creates a final linked image, it will create a\n// __TEXT,__unwind_info section.  This section is a small and fast way for the\n// runtime to access unwind info for any given function.  If the compiler\n// emitted compact unwind info for the function, that compact unwind info will\n// be encoded in the __TEXT,__unwind_info section. If the compiler emitted\n// dwarf unwind info, the __TEXT,__unwind_info section will contain the offset\n// of the FDE in the __TEXT,__eh_frame section in the final linked image.\n//\n// Note: Previously, the linker would transform some dwarf unwind infos into\n//       compact unwind info.  But that is fragile and no longer done.\n\n\n//\n// The compact unwind endoding is a 32-bit value which encoded in an\n// architecture specific way, which registers to restore from where, and how\n// to unwind out of the function.\n//\ntypedef uint32_t compact_unwind_encoding_t;\n\n\n// architecture independent bits\nenum {\n    UNWIND_IS_NOT_FUNCTION_START           = 0x80000000,\n    UNWIND_HAS_LSDA                        = 0x40000000,\n    UNWIND_PERSONALITY_MASK                = 0x30000000,\n};\n\n\n\n\n//\n// x86\n//\n// 1-bit: start\n// 1-bit: has lsda\n// 2-bit: personality index\n//\n// 4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=dwarf\n//  ebp based:\n//        15-bits (5*3-bits per reg) register permutation\n//        8-bits for stack offset\n//  frameless:\n//        8-bits stack size\n//        3-bits stack adjust\n//        3-bits register count\n//        10-bits register permutation\n//\nenum {\n    UNWIND_X86_MODE_MASK                         = 0x0F000000,\n    UNWIND_X86_MODE_EBP_FRAME                    = 0x01000000,\n    UNWIND_X86_MODE_STACK_IMMD                   = 0x02000000,\n    UNWIND_X86_MODE_STACK_IND                    = 0x03000000,\n    UNWIND_X86_MODE_DWARF                        = 0x04000000,\n\n    UNWIND_X86_EBP_FRAME_REGISTERS               = 0x00007FFF,\n    UNWIND_X86_EBP_FRAME_OFFSET                  = 0x00FF0000,\n\n    UNWIND_X86_FRAMELESS_STACK_SIZE              = 0x00FF0000,\n    UNWIND_X86_FRAMELESS_STACK_ADJUST            = 0x0000E000,\n    UNWIND_X86_FRAMELESS_STACK_REG_COUNT         = 0x00001C00,\n    UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION   = 0x000003FF,\n\n    UNWIND_X86_DWARF_SECTION_OFFSET              = 0x00FFFFFF,\n};\n\nenum {\n    UNWIND_X86_REG_NONE     = 0,\n    UNWIND_X86_REG_EBX      = 1,\n    UNWIND_X86_REG_ECX      = 2,\n    UNWIND_X86_REG_EDX      = 3,\n    UNWIND_X86_REG_EDI      = 4,\n    UNWIND_X86_REG_ESI      = 5,\n    UNWIND_X86_REG_EBP      = 6,\n};\n\n//\n// For x86 there are four modes for the compact unwind encoding:\n// UNWIND_X86_MODE_EBP_FRAME:\n//    EBP based frame where EBP is push on stack immediately after return address,\n//    then ESP is moved to EBP. Thus, to unwind ESP is restored with the current\n//    EPB value, then EBP is restored by popping off the stack, and the return\n//    is done by popping the stack once more into the pc.\n//    All non-volatile registers that need to be restored must have been saved\n//    in a small range in the stack that starts EBP-4 to EBP-1020.  The offset/4\n//    is encoded in the UNWIND_X86_EBP_FRAME_OFFSET bits.  The registers saved\n//    are encoded in the UNWIND_X86_EBP_FRAME_REGISTERS bits as five 3-bit entries.\n//    Each entry contains which register to restore.\n// UNWIND_X86_MODE_STACK_IMMD:\n//    A \"frameless\" (EBP not used as frame pointer) function with a small \n//    constant stack size.  To return, a constant (encoded in the compact\n//    unwind encoding) is added to the ESP. Then the return is done by\n//    popping the stack into the pc.\n//    All non-volatile registers that need to be restored must have been saved\n//    on the stack immediately after the return address.  The stack_size/4 is\n//    encoded in the UNWIND_X86_FRAMELESS_STACK_SIZE (max stack size is 1024).\n//    The number of registers saved is encoded in UNWIND_X86_FRAMELESS_STACK_REG_COUNT.\n//    UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION constains which registers were\n//    saved and their order.\n// UNWIND_X86_MODE_STACK_IND:\n//    A \"frameless\" (EBP not used as frame pointer) function large constant \n//    stack size.  This case is like the previous, except the stack size is too\n//    large to encode in the compact unwind encoding.  Instead it requires that \n//    the function contains \"subl $nnnnnnnn,ESP\" in its prolog.  The compact \n//    encoding contains the offset to the nnnnnnnn value in the function in\n//    UNWIND_X86_FRAMELESS_STACK_SIZE.  \n// UNWIND_X86_MODE_DWARF:\n//    No compact unwind encoding is available.  Instead the low 24-bits of the\n//    compact encoding is the offset of the dwarf FDE in the __eh_frame section.\n//    This mode is never used in object files.  It is only generated by the \n//    linker in final linked images which have only dwarf unwind info for a\n//    function.\n//\n// The permutation encoding is a Lehmer code sequence encoded into a\n// single variable-base number so we can encode the ordering of up to\n// six registers in a 10-bit space.\n//\n// The following is the algorithm used to create the permutation encoding used\n// with frameless stacks.  It is passed the number of registers to be saved and\n// an array of the register numbers saved.\n//\n//uint32_t permute_encode(uint32_t registerCount, const uint32_t registers[6])\n//{\n//    uint32_t renumregs[6];\n//    for (int i=6-registerCount; i < 6; ++i) {\n//        int countless = 0;\n//        for (int j=6-registerCount; j < i; ++j) {\n//            if ( registers[j] < registers[i] )\n//                ++countless;\n//        }\n//        renumregs[i] = registers[i] - countless -1;\n//    }\n//    uint32_t permutationEncoding = 0;\n//    switch ( registerCount ) {\n//        case 6:\n//            permutationEncoding |= (120*renumregs[0] + 24*renumregs[1]\n//                                    + 6*renumregs[2] + 2*renumregs[3]\n//                                      + renumregs[4]);\n//            break;\n//        case 5:\n//            permutationEncoding |= (120*renumregs[1] + 24*renumregs[2]\n//                                    + 6*renumregs[3] + 2*renumregs[4]\n//                                      + renumregs[5]);\n//            break;\n//        case 4:\n//            permutationEncoding |= (60*renumregs[2] + 12*renumregs[3]\n//                                   + 3*renumregs[4] + renumregs[5]);\n//            break;\n//        case 3:\n//            permutationEncoding |= (20*renumregs[3] + 4*renumregs[4]\n//                                     + renumregs[5]);\n//            break;\n//        case 2:\n//            permutationEncoding |= (5*renumregs[4] + renumregs[5]);\n//            break;\n//        case 1:\n//            permutationEncoding |= (renumregs[5]);\n//            break;\n//    }\n//    return permutationEncoding;\n//}\n//\n\n\n\n\n//\n// x86_64\n//\n// 1-bit: start\n// 1-bit: has lsda\n// 2-bit: personality index\n//\n// 4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=dwarf\n//  rbp based:\n//        15-bits (5*3-bits per reg) register permutation\n//        8-bits for stack offset\n//  frameless:\n//        8-bits stack size\n//        3-bits stack adjust\n//        3-bits register count\n//        10-bits register permutation\n//\nenum {\n    UNWIND_X86_64_MODE_MASK                         = 0x0F000000,\n    UNWIND_X86_64_MODE_RBP_FRAME                    = 0x01000000,\n    UNWIND_X86_64_MODE_STACK_IMMD                   = 0x02000000,\n    UNWIND_X86_64_MODE_STACK_IND                    = 0x03000000,\n    UNWIND_X86_64_MODE_DWARF                        = 0x04000000,\n\n    UNWIND_X86_64_RBP_FRAME_REGISTERS               = 0x00007FFF,\n    UNWIND_X86_64_RBP_FRAME_OFFSET                  = 0x00FF0000,\n\n    UNWIND_X86_64_FRAMELESS_STACK_SIZE              = 0x00FF0000,\n    UNWIND_X86_64_FRAMELESS_STACK_ADJUST            = 0x0000E000,\n    UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT         = 0x00001C00,\n    UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION   = 0x000003FF,\n\n    UNWIND_X86_64_DWARF_SECTION_OFFSET              = 0x00FFFFFF,\n};\n\nenum {\n    UNWIND_X86_64_REG_NONE       = 0,\n    UNWIND_X86_64_REG_RBX        = 1,\n    UNWIND_X86_64_REG_R12        = 2,\n    UNWIND_X86_64_REG_R13        = 3,\n    UNWIND_X86_64_REG_R14        = 4,\n    UNWIND_X86_64_REG_R15        = 5,\n    UNWIND_X86_64_REG_RBP        = 6,\n};\n//\n// For x86_64 there are four modes for the compact unwind encoding:\n// UNWIND_X86_64_MODE_RBP_FRAME:\n//    RBP based frame where RBP is push on stack immediately after return address,\n//    then RSP is moved to RBP. Thus, to unwind RSP is restored with the current \n//    EPB value, then RBP is restored by popping off the stack, and the return \n//    is done by popping the stack once more into the pc.\n//    All non-volatile registers that need to be restored must have been saved\n//    in a small range in the stack that starts RBP-8 to RBP-2040.  The offset/8 \n//    is encoded in the UNWIND_X86_64_RBP_FRAME_OFFSET bits.  The registers saved\n//    are encoded in the UNWIND_X86_64_RBP_FRAME_REGISTERS bits as five 3-bit entries.\n//    Each entry contains which register to restore.  \n// UNWIND_X86_64_MODE_STACK_IMMD:\n//    A \"frameless\" (RBP not used as frame pointer) function with a small \n//    constant stack size.  To return, a constant (encoded in the compact \n//    unwind encoding) is added to the RSP. Then the return is done by \n//    popping the stack into the pc.\n//    All non-volatile registers that need to be restored must have been saved\n//    on the stack immediately after the return address.  The stack_size/8 is\n//    encoded in the UNWIND_X86_64_FRAMELESS_STACK_SIZE (max stack size is 2048).\n//    The number of registers saved is encoded in UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT.\n//    UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION constains which registers were\n//    saved and their order.  \n// UNWIND_X86_64_MODE_STACK_IND:\n//    A \"frameless\" (RBP not used as frame pointer) function large constant \n//    stack size.  This case is like the previous, except the stack size is too\n//    large to encode in the compact unwind encoding.  Instead it requires that \n//    the function contains \"subq $nnnnnnnn,RSP\" in its prolog.  The compact \n//    encoding contains the offset to the nnnnnnnn value in the function in\n//    UNWIND_X86_64_FRAMELESS_STACK_SIZE.  \n// UNWIND_X86_64_MODE_DWARF:\n//    No compact unwind encoding is available.  Instead the low 24-bits of the\n//    compact encoding is the offset of the dwarf FDE in the __eh_frame section.\n//    This mode is never used in object files.  It is only generated by the \n//    linker in final linked images which have only dwarf unwind info for a\n//    function.\n//\n\n\n// ARM64\n//\n// 1-bit: start\n// 1-bit: has lsda\n// 2-bit: personality index\n//\n// 4-bits: 4=frame-based, 3=dwarf, 2=frameless\n//  frameless:\n//        12-bits of stack size\n//  frame-based:\n//        4-bits D reg pairs saved\n//        5-bits X reg pairs saved\n//  dwarf:\n//        24-bits offset of dwarf FDE in __eh_frame section\n//\nenum {\n    UNWIND_ARM64_MODE_MASK                     = 0x0F000000,\n    UNWIND_ARM64_MODE_FRAMELESS                = 0x02000000,\n    UNWIND_ARM64_MODE_DWARF                    = 0x03000000,\n    UNWIND_ARM64_MODE_FRAME                    = 0x04000000,\n\n    UNWIND_ARM64_FRAME_X19_X20_PAIR            = 0x00000001,\n    UNWIND_ARM64_FRAME_X21_X22_PAIR            = 0x00000002,\n    UNWIND_ARM64_FRAME_X23_X24_PAIR            = 0x00000004,\n    UNWIND_ARM64_FRAME_X25_X26_PAIR            = 0x00000008,\n    UNWIND_ARM64_FRAME_X27_X28_PAIR            = 0x00000010,\n    UNWIND_ARM64_FRAME_D8_D9_PAIR              = 0x00000100,\n    UNWIND_ARM64_FRAME_D10_D11_PAIR            = 0x00000200,\n    UNWIND_ARM64_FRAME_D12_D13_PAIR            = 0x00000400,\n    UNWIND_ARM64_FRAME_D14_D15_PAIR            = 0x00000800,\n\n    UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK     = 0x00FFF000,\n    UNWIND_ARM64_DWARF_SECTION_OFFSET          = 0x00FFFFFF,\n};\n// For arm64 there are three modes for the compact unwind encoding:\n// UNWIND_ARM64_MODE_FRAME:\n//    This is a standard arm64 prolog where FP/LR are immediately pushed on the\n//    stack, then SP is copied to FP. If there are any non-volatile registers\n//    saved, then are copied into the stack frame in pairs in a contiguous\n//    range right below the saved FP/LR pair.  Any subset of the five X pairs \n//    and four D pairs can be saved, but the memory layout must be in register\n//    number order.  \n// UNWIND_ARM64_MODE_FRAMELESS:\n//    A \"frameless\" leaf function, where FP/LR are not saved. The return address \n//    remains in LR throughout the function. If any non-volatile registers\n//    are saved, they must be pushed onto the stack before any stack space is\n//    allocated for local variables.  The stack sized (including any saved\n//    non-volatile registers) divided by 16 is encoded in the bits \n//    UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK.\n// UNWIND_ARM64_MODE_DWARF:\n//    No compact unwind encoding is available.  Instead the low 24-bits of the\n//    compact encoding is the offset of the dwarf FDE in the __eh_frame section.\n//    This mode is never used in object files.  It is only generated by the \n//    linker in final linked images which have only dwarf unwind info for a\n//    function.\n//\n\n\n\n\n\n////////////////////////////////////////////////////////////////////////////////\n//\n//  Relocatable Object Files: __LD,__compact_unwind\n//\n////////////////////////////////////////////////////////////////////////////////\n\n//\n// A compiler can generated compact unwind information for a function by adding\n// a \"row\" to the __LD,__compact_unwind section.  This section has the \n// S_ATTR_DEBUG bit set, so the section will be ignored by older linkers. \n// It is removed by the new linker, so never ends up in final executables. \n// This section is a table, initially with one row per function (that needs \n// unwind info).  The table columns and some conceptual entries are:\n//\n//     range-start               pointer to start of function/range\n//     range-length              \n//     compact-unwind-encoding   32-bit encoding  \n//     personality-function      or zero if no personality function\n//     lsda                      or zero if no LSDA data\n//\n// The length and encoding fields are 32-bits.  The other are all pointer sized. \n//\n// In x86_64 assembly, these entry would look like:\n//\n//     .section __LD,__compact_unwind,regular,debug\n//\n//     #compact unwind for _foo\n//     .quad    _foo\n//     .set     L1,LfooEnd-_foo\n//     .long    L1\n//     .long    0x01010001\n//     .quad    0\n//     .quad    0\n//\n//     #compact unwind for _bar\n//     .quad    _bar\n//     .set     L2,LbarEnd-_bar\n//     .long    L2\n//     .long    0x01020011\n//     .quad    __gxx_personality\n//     .quad    except_tab1\n//\n//\n// Notes: There is no need for any labels in the the __compact_unwind section.  \n//        The use of the .set directive is to force the evaluation of the \n//        range-length at assembly time, instead of generating relocations.\n//\n// To support future compiler optimizations where which non-volatile registers \n// are saved changes within a function (e.g. delay saving non-volatiles until\n// necessary), there can by multiple lines in the __compact_unwind table for one\n// function, each with a different (non-overlapping) range and each with \n// different compact unwind encodings that correspond to the non-volatiles \n// saved at that range of the function.\n//\n// If a particular function is so wacky that there is no compact unwind way\n// to encode it, then the compiler can emit traditional dwarf unwind info.  \n// The runtime will use which ever is available.\n//\n// Runtime support for compact unwind encodings are only available on 10.6 \n// and later.  So, the compiler should not generate it when targeting pre-10.6. \n\n\n\n\n////////////////////////////////////////////////////////////////////////////////\n//\n//  Final Linked Images: __TEXT,__unwind_info\n//\n////////////////////////////////////////////////////////////////////////////////\n\n//\n// The __TEXT,__unwind_info section is laid out for an efficient two level lookup.\n// The header of the section contains a coarse index that maps function address\n// to the page (4096 byte block) containing the unwind info for that function.  \n//\n\n#define UNWIND_SECTION_VERSION 1\nstruct unwind_info_section_header\n{\n    uint32_t    version;            // UNWIND_SECTION_VERSION\n    uint32_t    commonEncodingsArraySectionOffset;\n    uint32_t    commonEncodingsArrayCount;\n    uint32_t    personalityArraySectionOffset;\n    uint32_t    personalityArrayCount;\n    uint32_t    indexSectionOffset;\n    uint32_t    indexCount;\n    // compact_unwind_encoding_t[]\n    // uint32_t personalities[]\n    // unwind_info_section_header_index_entry[]\n    // unwind_info_section_header_lsda_index_entry[]\n};\n\nstruct unwind_info_section_header_index_entry\n{\n    uint32_t        functionOffset;\n    uint32_t        secondLevelPagesSectionOffset;  // section offset to start of regular or compress page\n    uint32_t        lsdaIndexArraySectionOffset;    // section offset to start of lsda_index array for this range\n};\n\nstruct unwind_info_section_header_lsda_index_entry\n{\n    uint32_t        functionOffset;\n    uint32_t        lsdaOffset;\n};\n\n//\n// There are two kinds of second level index pages: regular and compressed.\n// A compressed page can hold up to 1021 entries, but it cannot be used\n// if too many different encoding types are used.  The regular page holds\n// 511 entries.\n//\n\nstruct unwind_info_regular_second_level_entry\n{\n    uint32_t                    functionOffset;\n    compact_unwind_encoding_t    encoding;\n};\n\n#define UNWIND_SECOND_LEVEL_REGULAR 2\nstruct unwind_info_regular_second_level_page_header\n{\n    uint32_t    kind;    // UNWIND_SECOND_LEVEL_REGULAR\n    uint16_t    entryPageOffset;\n    uint16_t    entryCount;\n    // entry array\n};\n\n#define UNWIND_SECOND_LEVEL_COMPRESSED 3\nstruct unwind_info_compressed_second_level_page_header\n{\n    uint32_t    kind;    // UNWIND_SECOND_LEVEL_COMPRESSED\n    uint16_t    entryPageOffset;\n    uint16_t    entryCount;\n    uint16_t    encodingsPageOffset;\n    uint16_t    encodingsCount;\n    // 32-bit entry array\n    // encodings array\n};\n\n#define UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry)            (entry & 0x00FFFFFF)\n#define UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry)        ((entry >> 24) & 0xFF)\n\n\n\n#endif\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/include/unwind.h",
    "content": "//===------------------------------- unwind.h -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// C++ ABI Level 1 ABI documented at:\n//   http://mentorembedded.github.io/cxx-abi/abi-eh.html\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __UNWIND_H__\n#define __UNWIND_H__\n\n#include <stdint.h>\n#include <stddef.h>\n\n#if defined(__APPLE__)\n#define LIBUNWIND_UNAVAIL __attribute__ (( unavailable ))\n#else\n#define LIBUNWIND_UNAVAIL\n#endif\n\n#include <__cxxabi_config.h>\n\ntypedef enum {\n  _URC_NO_REASON = 0,\n  _URC_OK = 0,\n  _URC_FOREIGN_EXCEPTION_CAUGHT = 1,\n  _URC_FATAL_PHASE2_ERROR = 2,\n  _URC_FATAL_PHASE1_ERROR = 3,\n  _URC_NORMAL_STOP = 4,\n  _URC_END_OF_STACK = 5,\n  _URC_HANDLER_FOUND = 6,\n  _URC_INSTALL_CONTEXT = 7,\n  _URC_CONTINUE_UNWIND = 8,\n#if LIBCXXABI_ARM_EHABI\n  _URC_FAILURE = 9\n#endif\n} _Unwind_Reason_Code;\n\ntypedef enum {\n  _UA_SEARCH_PHASE = 1,\n  _UA_CLEANUP_PHASE = 2,\n  _UA_HANDLER_FRAME = 4,\n  _UA_FORCE_UNWIND = 8,\n  _UA_END_OF_STACK = 16 // gcc extension to C++ ABI\n} _Unwind_Action;\n\ntypedef struct _Unwind_Context _Unwind_Context;   // opaque\n\n#if LIBCXXABI_ARM_EHABI\ntypedef uint32_t _Unwind_State;\n\nstatic const _Unwind_State _US_VIRTUAL_UNWIND_FRAME   = 0;\nstatic const _Unwind_State _US_UNWIND_FRAME_STARTING  = 1;\nstatic const _Unwind_State _US_UNWIND_FRAME_RESUME    = 2;\n/* Undocumented flag for force unwinding. */\nstatic const _Unwind_State _US_FORCE_UNWIND           = 8;\n\ntypedef uint32_t _Unwind_EHT_Header;\n\nstruct _Unwind_Control_Block;\ntypedef struct _Unwind_Control_Block _Unwind_Control_Block;\ntypedef struct _Unwind_Control_Block _Unwind_Exception; /* Alias */\n\nstruct _Unwind_Control_Block {\n  uint64_t exception_class;\n  void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block*);\n\n  /* Unwinder cache, private fields for the unwinder's use */\n  struct {\n    uint32_t reserved1; /* init reserved1 to 0, then don't touch */\n    uint32_t reserved2;\n    uint32_t reserved3;\n    uint32_t reserved4;\n    uint32_t reserved5;\n  } unwinder_cache;\n\n  /* Propagation barrier cache (valid after phase 1): */\n  struct {\n    uint32_t sp;\n    uint32_t bitpattern[5];\n  } barrier_cache;\n\n  /* Cleanup cache (preserved over cleanup): */\n  struct {\n    uint32_t bitpattern[4];\n  } cleanup_cache;\n\n  /* Pr cache (for pr's benefit): */\n  struct {\n    uint32_t fnstart; /* function start address */\n    _Unwind_EHT_Header* ehtp; /* pointer to EHT entry header word */\n    uint32_t additional;\n    uint32_t reserved1;\n  } pr_cache;\n\n  long long int :0; /* Enforce the 8-byte alignment */\n};\n\ntypedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)\n      (_Unwind_State state,\n       _Unwind_Exception* exceptionObject,\n       struct _Unwind_Context* context);\n\ntypedef _Unwind_Reason_Code (*__personality_routine)\n      (_Unwind_State state,\n       _Unwind_Exception* exceptionObject,\n       struct _Unwind_Context* context);\n#else\nstruct _Unwind_Context;   // opaque\nstruct _Unwind_Exception; // forward declaration\ntypedef struct _Unwind_Exception _Unwind_Exception;\n\nstruct _Unwind_Exception {\n  uint64_t exception_class;\n  void (*exception_cleanup)(_Unwind_Reason_Code reason,\n                            _Unwind_Exception *exc);\n  uintptr_t private_1; // non-zero means forced unwind\n  uintptr_t private_2; // holds sp that phase1 found for phase2 to use\n#ifndef __LP64__\n  // The gcc implementation of _Unwind_Exception used attribute mode on the\n  // above fields which had the side effect of causing this whole struct to\n  // round up to 32 bytes in size. To be more explicit, we add pad fields\n  // added for binary compatibility.\n  uint32_t reserved[3];\n#endif\n};\n\ntypedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)\n    (int version,\n     _Unwind_Action actions,\n     uint64_t exceptionClass,\n     _Unwind_Exception* exceptionObject,\n     struct _Unwind_Context* context,\n     void* stop_parameter );\n\ntypedef _Unwind_Reason_Code (*__personality_routine)\n      (int version,\n       _Unwind_Action actions,\n       uint64_t exceptionClass,\n       _Unwind_Exception* exceptionObject,\n       struct _Unwind_Context* context);\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//\n// The following are the base functions documented by the C++ ABI\n//\n#ifdef __USING_SJLJ_EXCEPTIONS__\nextern _Unwind_Reason_Code\n    _Unwind_SjLj_RaiseException(_Unwind_Exception *exception_object);\nextern void _Unwind_SjLj_Resume(_Unwind_Exception *exception_object);\n#else\nextern _Unwind_Reason_Code\n    _Unwind_RaiseException(_Unwind_Exception *exception_object);\nextern void _Unwind_Resume(_Unwind_Exception *exception_object);\n#endif\nextern void _Unwind_DeleteException(_Unwind_Exception *exception_object);\n\n#if LIBCXXABI_ARM_EHABI\ntypedef enum {\n  _UVRSC_CORE = 0, /* integer register */\n  _UVRSC_VFP = 1, /* vfp */\n  _UVRSC_WMMXD = 3, /* Intel WMMX data register */\n  _UVRSC_WMMXC = 4 /* Intel WMMX control register */\n} _Unwind_VRS_RegClass;\n\ntypedef enum {\n  _UVRSD_UINT32 = 0,\n  _UVRSD_VFPX = 1,\n  _UVRSD_UINT64 = 3,\n  _UVRSD_FLOAT = 4,\n  _UVRSD_DOUBLE = 5\n} _Unwind_VRS_DataRepresentation;\n\ntypedef enum {\n  _UVRSR_OK = 0,\n  _UVRSR_NOT_IMPLEMENTED = 1,\n  _UVRSR_FAILED = 2\n} _Unwind_VRS_Result;\n\nextern void _Unwind_Complete(_Unwind_Exception* exception_object);\n\nextern _Unwind_VRS_Result\n_Unwind_VRS_Get(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,\n                uint32_t regno, _Unwind_VRS_DataRepresentation representation,\n                void *valuep);\n\nextern _Unwind_VRS_Result\n_Unwind_VRS_Set(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,\n                uint32_t regno, _Unwind_VRS_DataRepresentation representation,\n                void *valuep);\n\nextern _Unwind_VRS_Result\n_Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,\n                uint32_t discriminator,\n                _Unwind_VRS_DataRepresentation representation);\n#endif\n\nextern uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index);\nextern void _Unwind_SetGR(struct _Unwind_Context *context, int index,\n                          uintptr_t new_value);\nextern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context);\nextern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value);\n\nextern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context);\nextern uintptr_t\n    _Unwind_GetLanguageSpecificData(struct _Unwind_Context *context);\n#ifdef __USING_SJLJ_EXCEPTIONS__\nextern _Unwind_Reason_Code\n    _Unwind_SjLj_ForcedUnwind(_Unwind_Exception *exception_object,\n                              _Unwind_Stop_Fn stop, void *stop_parameter);\n#else\nextern _Unwind_Reason_Code\n    _Unwind_ForcedUnwind(_Unwind_Exception *exception_object,\n                         _Unwind_Stop_Fn stop, void *stop_parameter);\n#endif\n\n#ifdef __USING_SJLJ_EXCEPTIONS__\ntypedef struct _Unwind_FunctionContext *_Unwind_FunctionContext_t;\nextern void _Unwind_SjLj_Register(_Unwind_FunctionContext_t fc);\nextern void _Unwind_SjLj_Unregister(_Unwind_FunctionContext_t fc);\n#endif\n\n//\n// The following are semi-suppoted extensions to the C++ ABI\n//\n\n//\n//  called by __cxa_rethrow().\n//\n#ifdef __USING_SJLJ_EXCEPTIONS__\nextern _Unwind_Reason_Code\n    _Unwind_SjLj_Resume_or_Rethrow(_Unwind_Exception *exception_object);\n#else\nextern _Unwind_Reason_Code\n    _Unwind_Resume_or_Rethrow(_Unwind_Exception *exception_object);\n#endif\n\n// _Unwind_Backtrace() is a gcc extension that walks the stack and calls the\n// _Unwind_Trace_Fn once per frame until it reaches the bottom of the stack\n// or the _Unwind_Trace_Fn function returns something other than _URC_NO_REASON.\ntypedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *,\n                                                void *);\nextern _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *);\n\n// _Unwind_GetCFA is a gcc extension that can be called from within a\n// personality handler to get the CFA (stack pointer before call) of\n// current frame.\nextern uintptr_t _Unwind_GetCFA(struct _Unwind_Context *);\n\n\n// _Unwind_GetIPInfo is a gcc extension that can be called from within a\n// personality handler.  Similar to _Unwind_GetIP() but also returns in\n// *ipBefore a non-zero value if the instruction pointer is at or before the\n// instruction causing the unwind. Normally, in a function call, the IP returned\n// is the return address which is after the call instruction and may be past the\n// end of the function containing the call instruction.\nextern uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context,\n                                   int *ipBefore);\n\n\n// __register_frame() is used with dynamically generated code to register the\n// FDE for a generated (JIT) code.  The FDE must use pc-rel addressing to point\n// to its function and optional LSDA.\n// __register_frame() has existed in all versions of Mac OS X, but in 10.4 and\n// 10.5 it was buggy and did not actually register the FDE with the unwinder.\n// In 10.6 and later it does register properly.\nextern void __register_frame(const void *fde);\nextern void __deregister_frame(const void *fde);\n\n// _Unwind_Find_FDE() will locate the FDE if the pc is in some function that has\n// an associated FDE. Note, Mac OS X 10.6 and later, introduces \"compact unwind\n// info\" which the runtime uses in preference to dwarf unwind info.  This\n// function will only work if the target function has an FDE but no compact\n// unwind info.\nstruct dwarf_eh_bases {\n  uintptr_t tbase;\n  uintptr_t dbase;\n  uintptr_t func;\n};\nextern const void *_Unwind_Find_FDE(const void *pc, struct dwarf_eh_bases *);\n\n\n// This function attempts to find the start (address of first instruction) of\n// a function given an address inside the function.  It only works if the\n// function has an FDE (dwarf unwind info).\n// This function is unimplemented on Mac OS X 10.6 and later.  Instead, use\n// _Unwind_Find_FDE() and look at the dwarf_eh_bases.func result.\nextern void *_Unwind_FindEnclosingFunction(void *pc);\n\n// Mac OS X does not support text-rel and data-rel addressing so these functions\n// are unimplemented\nextern uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *context)\n    LIBUNWIND_UNAVAIL;\nextern uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *context)\n    LIBUNWIND_UNAVAIL;\n\n// Mac OS X 10.4 and 10.5 had implementations of these functions in\n// libgcc_s.dylib, but they never worked.\n/// These functions are no longer available on Mac OS X.\nextern void __register_frame_info_bases(const void *fde, void *ob, void *tb,\n                                        void *db) LIBUNWIND_UNAVAIL;\nextern void __register_frame_info(const void *fde, void *ob)\n    LIBUNWIND_UNAVAIL;\nextern void __register_frame_info_table_bases(const void *fde, void *ob,\n                                              void *tb, void *db)\n    LIBUNWIND_UNAVAIL;\nextern void __register_frame_info_table(const void *fde, void *ob)\n    LIBUNWIND_UNAVAIL;\nextern void __register_frame_table(const void *fde)\n    LIBUNWIND_UNAVAIL;\nextern void *__deregister_frame_info(const void *fde)\n    LIBUNWIND_UNAVAIL;\nextern void *__deregister_frame_info_bases(const void *fde)\n    LIBUNWIND_UNAVAIL;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // __UNWIND_H__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/lib/buildit",
    "content": "#! /bin/sh\n#\n# Set the $TRIPLE environment variable to your system's triple before\n# running this script.  If you set $CXX, that will be used to compile\n# the library.  Otherwise we'll use clang++.\n\nset -e\n\nif [ `basename $(pwd)` != \"lib\" ]\nthen\n\techo \"current directory must be lib\"\n\texit 1\nfi\n\nif [ -z \"$CXX\" ]\nthen\n\tCXX=clang++\nfi\n\nif [ -z \"$CC\" ]\nthen\n    CC=clang\nfi\n\nif [ -z $RC_ProjectSourceVersion ]\nthen\n  RC_ProjectSourceVersion=1\nfi\n\nEXTRA_FLAGS=\"-std=c++11 -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 \\\n             -Wsign-conversion -Wshadow -Wconversion -Wunused-variable \\\n             -Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags \\\n             -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare \\\n             -Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter \\\n             -Wnewline-eof\"\n\ncase $TRIPLE in\n  *-apple-*)\n    if [ -z $RC_XBS ]\n    then\n      RC_CFLAGS=\"-arch i386 -arch x86_64\"\n    fi\n    SOEXT=dylib\n    if [ -n \"$SDKROOT\" ]\n    then\n        EXTRA_FLAGS+=\"-isysroot ${SDKROOT}\"\n        CXX=`xcrun -sdk \"${SDKROOT}\"  -find clang++`\n        CC=`xcrun -sdk \"${SDKROOT}\"  -find clang`\n    fi\n    LDSHARED_FLAGS=\"-o libc++abi.dylib \\\n        -dynamiclib -nodefaultlibs  \\\n        -current_version ${RC_ProjectSourceVersion} \\\n        -compatibility_version 1 \\\n        -install_name /usr/lib/libc++abi.dylib \\\n        -lSystem\"\n\tif [ -f \"${SDKROOT}/usr/local/lib/libCrashReporterClient.a\" ]\n\tthen\n\t\tLDSHARED_FLAGS+=\" -lCrashReporterClient\"\n\tfi\n    ;;\n  *-*-mingw*)\n    # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt\n    SOEXT=dll\n    LDSHARED_FLAGS=\"-o libc++abi.dll \\\n        -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++abi.dll.a \\\n        -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt\"\n\t;;\n  *)\n    RC_CFLAGS=\"-fPIC\"\n    SOEXT=so\n    LDSHARED_FLAGS=\"-o libc++abi.so.1.0 \\\n        -shared -nodefaultlibs -Wl,-soname,libc++abi.so.1 \\\n        -lpthread -lrt -lc -lstdc++\"\n    ;;\nesac\n\nif [ -z $RC_XBS ]\nthen\n    rm -f libc++abi.1.$SOEXT*\nfi\n\nset -x\n\nfor FILE in ../src/*.cpp; do\n\t$CXX -c -g -O3 $RC_CFLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE\ndone\ncase $TRIPLE in\n  *-*-mingw*)\n  for FILE in ../src/support/win32/*.cpp; do\n    $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -I../include $OPTIONS $FILE\n  done\n  ;;\nesac\n$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS\n\nif [ -z $RC_XBS ]\nthen\n    rm *.o\nfi\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/AddressSpace.hpp",
    "content": "//===------------------------- AddressSpace.hpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// Abstracts accessing local vs remote address spaces.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __ADDRESSSPACE_HPP__\n#define __ADDRESSSPACE_HPP__\n\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef _LIBUNWIND_IS_BAREMETAL\n#include <dlfcn.h>\n#endif\n\n#ifdef __APPLE__\n#include <mach-o/getsect.h>\nnamespace libunwind {\n   bool checkKeyMgrRegisteredFDEs(uintptr_t targetAddr, void *&fde);\n}\n#endif\n\n#include \"libunwind.h\"\n#include \"config.h\"\n#include \"dwarf2.h\"\n#include \"Registers.hpp\"\n\n#if LIBCXXABI_ARM_EHABI\n#ifdef __linux__\n\ntypedef long unsigned int *_Unwind_Ptr;\nextern \"C\" _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr addr, int *len);\n\n// Emulate the BSD dl_unwind_find_exidx API when on a GNU libdl system.\n#define dl_unwind_find_exidx __gnu_Unwind_Find_exidx\n\n#elif !defined(_LIBUNWIND_IS_BAREMETAL)\n#include <link.h>\n#else // !defined(_LIBUNWIND_IS_BAREMETAL)\n// When statically linked on bare-metal, the symbols for the EH table are looked\n// up without going through the dynamic loader.\nstruct EHTEntry {\n  uint32_t functionOffset;\n  uint32_t unwindOpcodes;\n};\nextern EHTEntry __exidx_start;\nextern EHTEntry __exidx_end;\n#endif // !defined(_LIBUNWIND_IS_BAREMETAL)\n#endif  // LIBCXXABI_ARM_EHABI\n\n#if defined(__linux__)\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND && _LIBUNWIND_SUPPORT_DWARF_INDEX\n#include <link.h>\n#include \"EHHeaderParser.hpp\"\n#endif\n#endif\n\nnamespace libunwind {\n\n/// Used by findUnwindSections() to return info about needed sections.\nstruct UnwindInfoSections {\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND || _LIBUNWIND_SUPPORT_DWARF_INDEX ||       \\\n    _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n  // No dso_base for ARM EHABI.\n  uintptr_t       dso_base;\n#endif\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n  uintptr_t       dwarf_section;\n  uintptr_t       dwarf_section_length;\n#endif\n#if _LIBUNWIND_SUPPORT_DWARF_INDEX\n  uintptr_t       dwarf_index_section;\n  uintptr_t       dwarf_index_section_length;\n#endif\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n  uintptr_t       compact_unwind_section;\n  uintptr_t       compact_unwind_section_length;\n#endif\n#if LIBCXXABI_ARM_EHABI\n  uintptr_t       arm_section;\n  uintptr_t       arm_section_length;\n#endif\n};\n\n\n/// LocalAddressSpace is used as a template parameter to UnwindCursor when\n/// unwinding a thread in the same process.  The wrappers compile away,\n/// making local unwinds fast.\nclass __attribute__((visibility(\"hidden\"))) LocalAddressSpace {\npublic:\n#ifdef __LP64__\n  typedef uint64_t pint_t;\n  typedef int64_t  sint_t;\n#else\n  typedef uint32_t pint_t;\n  typedef int32_t  sint_t;\n#endif\n  uint8_t         get8(pint_t addr) {\n    uint8_t val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  uint16_t         get16(pint_t addr) {\n    uint16_t val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  uint32_t         get32(pint_t addr) {\n    uint32_t val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  uint64_t         get64(pint_t addr) {\n    uint64_t val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  double           getDouble(pint_t addr) {\n    double val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  v128             getVector(pint_t addr) {\n    v128 val;\n    memcpy(&val, (void *)addr, sizeof(val));\n    return val;\n  }\n  uintptr_t       getP(pint_t addr);\n  static uint64_t getULEB128(pint_t &addr, pint_t end);\n  static int64_t  getSLEB128(pint_t &addr, pint_t end);\n\n  pint_t getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,\n                     pint_t datarelBase = 0);\n  bool findFunctionName(pint_t addr, char *buf, size_t bufLen,\n                        unw_word_t *offset);\n  bool findUnwindSections(pint_t targetAddr, UnwindInfoSections &info);\n  bool findOtherFDE(pint_t targetAddr, pint_t &fde);\n\n  static LocalAddressSpace sThisAddressSpace;\n};\n\ninline uintptr_t LocalAddressSpace::getP(pint_t addr) {\n#ifdef __LP64__\n  return get64(addr);\n#else\n  return get32(addr);\n#endif\n}\n\n/// Read a ULEB128 into a 64-bit word.\ninline uint64_t LocalAddressSpace::getULEB128(pint_t &addr, pint_t end) {\n  const uint8_t *p = (uint8_t *)addr;\n  const uint8_t *pend = (uint8_t *)end;\n  uint64_t result = 0;\n  int bit = 0;\n  do {\n    uint64_t b;\n\n    if (p == pend)\n      _LIBUNWIND_ABORT(\"truncated uleb128 expression\");\n\n    b = *p & 0x7f;\n\n    if (bit >= 64 || b << bit >> bit != b) {\n      _LIBUNWIND_ABORT(\"malformed uleb128 expression\");\n    } else {\n      result |= b << bit;\n      bit += 7;\n    }\n  } while (*p++ >= 0x80);\n  addr = (pint_t) p;\n  return result;\n}\n\n/// Read a SLEB128 into a 64-bit word.\ninline int64_t LocalAddressSpace::getSLEB128(pint_t &addr, pint_t end) {\n  const uint8_t *p = (uint8_t *)addr;\n  const uint8_t *pend = (uint8_t *)end;\n  int64_t result = 0;\n  int bit = 0;\n  uint8_t byte;\n  do {\n    if (p == pend)\n      _LIBUNWIND_ABORT(\"truncated sleb128 expression\");\n    byte = *p++;\n    result |= ((byte & 0x7f) << bit);\n    bit += 7;\n  } while (byte & 0x80);\n  // sign extend negative numbers\n  if ((byte & 0x40) != 0)\n    result |= (-1LL) << bit;\n  addr = (pint_t) p;\n  return result;\n}\n\ninline LocalAddressSpace::pint_t\nLocalAddressSpace::getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,\n                               pint_t datarelBase) {\n  pint_t startAddr = addr;\n  const uint8_t *p = (uint8_t *)addr;\n  pint_t result;\n\n  // first get value\n  switch (encoding & 0x0F) {\n  case DW_EH_PE_ptr:\n    result = getP(addr);\n    p += sizeof(pint_t);\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_uleb128:\n    result = (pint_t)getULEB128(addr, end);\n    break;\n  case DW_EH_PE_udata2:\n    result = get16(addr);\n    p += 2;\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_udata4:\n    result = get32(addr);\n    p += 4;\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_udata8:\n    result = (pint_t)get64(addr);\n    p += 8;\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_sleb128:\n    result = (pint_t)getSLEB128(addr, end);\n    break;\n  case DW_EH_PE_sdata2:\n    // Sign extend from signed 16-bit value.\n    result = (pint_t)(int16_t)get16(addr);\n    p += 2;\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_sdata4:\n    // Sign extend from signed 32-bit value.\n    result = (pint_t)(int32_t)get32(addr);\n    p += 4;\n    addr = (pint_t) p;\n    break;\n  case DW_EH_PE_sdata8:\n    result = (pint_t)get64(addr);\n    p += 8;\n    addr = (pint_t) p;\n    break;\n  default:\n    _LIBUNWIND_ABORT(\"unknown pointer encoding\");\n  }\n\n  // then add relative offset\n  switch (encoding & 0x70) {\n  case DW_EH_PE_absptr:\n    // do nothing\n    break;\n  case DW_EH_PE_pcrel:\n    result += startAddr;\n    break;\n  case DW_EH_PE_textrel:\n    _LIBUNWIND_ABORT(\"DW_EH_PE_textrel pointer encoding not supported\");\n    break;\n  case DW_EH_PE_datarel:\n    // DW_EH_PE_datarel is only valid in a few places, so the parameter has a\n    // default value of 0, and we abort in the event that someone calls this\n    // function with a datarelBase of 0 and DW_EH_PE_datarel encoding.\n    if (datarelBase == 0)\n      _LIBUNWIND_ABORT(\"DW_EH_PE_datarel is invalid with a datarelBase of 0\");\n    result += datarelBase;\n    break;\n  case DW_EH_PE_funcrel:\n    _LIBUNWIND_ABORT(\"DW_EH_PE_funcrel pointer encoding not supported\");\n    break;\n  case DW_EH_PE_aligned:\n    _LIBUNWIND_ABORT(\"DW_EH_PE_aligned pointer encoding not supported\");\n    break;\n  default:\n    _LIBUNWIND_ABORT(\"unknown pointer encoding\");\n    break;\n  }\n\n  if (encoding & DW_EH_PE_indirect)\n    result = getP(result);\n\n  return result;\n}\n\n#ifdef __APPLE__ \n  struct dyld_unwind_sections\n  {\n    const struct mach_header*   mh;\n    const void*                 dwarf_section;\n    uintptr_t                   dwarf_section_length;\n    const void*                 compact_unwind_section;\n    uintptr_t                   compact_unwind_section_length;\n  };\n  #if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) \\\n                                 && (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1070)) \\\n      || defined(__IPHONE_OS_VERSION_MIN_REQUIRED)\n    // In 10.7.0 or later, libSystem.dylib implements this function.\n    extern \"C\" bool _dyld_find_unwind_sections(void *, dyld_unwind_sections *);\n  #else\n    // In 10.6.x and earlier, we need to implement this functionality.\n    static inline bool _dyld_find_unwind_sections(void* addr, \n                                                    dyld_unwind_sections* info) {\n      // Find mach-o image containing address.\n      Dl_info dlinfo;\n      if (!dladdr(addr, &dlinfo))\n        return false;\n      const mach_header *mh = (const mach_header *)dlinfo.dli_saddr;\n      \n      // Find dwarf unwind section in that image.\n      unsigned long size;\n      const uint8_t *p = getsectiondata(mh, \"__TEXT\", \"__eh_frame\", &size);\n      if (!p)\n        return false;\n      \n      // Fill in return struct.\n      info->mh = mh;\n      info->dwarf_section = p;\n      info->dwarf_section_length = size;\n      info->compact_unwind_section = 0;\n      info->compact_unwind_section_length = 0;\n     \n      return true;\n    }\n  #endif\n#endif\n\ninline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,\n                                                  UnwindInfoSections &info) {\n#ifdef __APPLE__\n  dyld_unwind_sections dyldInfo;\n  if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) {\n    info.dso_base                      = (uintptr_t)dyldInfo.mh;\n #if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n    info.dwarf_section                 = (uintptr_t)dyldInfo.dwarf_section;\n    info.dwarf_section_length          = dyldInfo.dwarf_section_length;\n #endif\n    info.compact_unwind_section        = (uintptr_t)dyldInfo.compact_unwind_section;\n    info.compact_unwind_section_length = dyldInfo.compact_unwind_section_length;\n    return true;\n  }\n#elif LIBCXXABI_ARM_EHABI\n #ifdef _LIBUNWIND_IS_BAREMETAL\n  // Bare metal is statically linked, so no need to ask the dynamic loader\n  info.arm_section =        (uintptr_t)(&__exidx_start);\n  info.arm_section_length = (uintptr_t)(&__exidx_end - &__exidx_start);\n #else\n  int length = 0;\n  info.arm_section = (uintptr_t) dl_unwind_find_exidx(\n      (_Unwind_Ptr) targetAddr, &length);\n  info.arm_section_length = (uintptr_t)length;\n #endif\n  _LIBUNWIND_TRACE_UNWINDING(\"findUnwindSections: section %X length %x\\n\",\n                             info.arm_section, info.arm_section_length);\n  if (info.arm_section && info.arm_section_length)\n    return true;\n#elif _LIBUNWIND_SUPPORT_DWARF_UNWIND\n#if _LIBUNWIND_SUPPORT_DWARF_INDEX\n  struct dl_iterate_cb_data {\n    LocalAddressSpace *addressSpace;\n    UnwindInfoSections *sects;\n    uintptr_t targetAddr;\n  };\n\n  dl_iterate_cb_data cb_data = {this, &info, targetAddr};\n  int found = dl_iterate_phdr(\n      [](struct dl_phdr_info *pinfo, size_t, void *data) -> int {\n        auto cbdata = static_cast<dl_iterate_cb_data *>(data);\n        size_t object_length;\n        bool found_obj = false;\n        bool found_hdr = false;\n\n        assert(cbdata);\n        assert(cbdata->sects);\n\n        if (cbdata->targetAddr < pinfo->dlpi_addr) {\n          return false;\n        }\n\n        for (ElfW(Half) i = 0; i < pinfo->dlpi_phnum; i++) {\n          const ElfW(Phdr) *phdr = &pinfo->dlpi_phdr[i];\n          if (phdr->p_type == PT_LOAD) {\n            uintptr_t begin = pinfo->dlpi_addr + phdr->p_vaddr;\n            uintptr_t end = begin + phdr->p_memsz;\n            if (cbdata->targetAddr >= begin && cbdata->targetAddr < end) {\n              cbdata->sects->dso_base = begin;\n              object_length = phdr->p_memsz;\n              found_obj = true;\n            }\n          } else if (phdr->p_type == PT_GNU_EH_FRAME) {\n            EHHeaderParser<LocalAddressSpace>::EHHeaderInfo hdrInfo;\n            uintptr_t eh_frame_hdr_start = pinfo->dlpi_addr + phdr->p_vaddr;\n            cbdata->sects->dwarf_index_section = eh_frame_hdr_start;\n            cbdata->sects->dwarf_index_section_length = phdr->p_memsz;\n            EHHeaderParser<LocalAddressSpace>::decodeEHHdr(\n                *cbdata->addressSpace, eh_frame_hdr_start, phdr->p_memsz,\n                hdrInfo);\n            cbdata->sects->dwarf_section = hdrInfo.eh_frame_ptr;\n            found_hdr = true;\n          }\n        }\n\n        if (found_obj && found_hdr) {\n          cbdata->sects->dwarf_section_length = object_length;\n          return true;\n        } else {\n          return false;\n        }\n      },\n      &cb_data);\n  return static_cast<bool>(found);\n#else\n#error \"_LIBUNWIND_SUPPORT_DWARF_UNWIND requires _LIBUNWIND_SUPPORT_DWARF_INDEX on this platform.\"\n#endif\n#endif\n\n  return false;\n}\n\n\ninline bool LocalAddressSpace::findOtherFDE(pint_t targetAddr, pint_t &fde) {\n#ifdef __APPLE__\n  return checkKeyMgrRegisteredFDEs(targetAddr, *((void**)&fde));\n#else\n  // TO DO: if OS has way to dynamically register FDEs, check that.\n  (void)targetAddr;\n  (void)fde;\n  return false;\n#endif\n}\n\ninline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf,\n                                                size_t bufLen,\n                                                unw_word_t *offset) {\n#ifndef _LIBUNWIND_IS_BAREMETAL\n  Dl_info dyldInfo;\n  if (dladdr((void *)addr, &dyldInfo)) {\n    if (dyldInfo.dli_sname != NULL) {\n      snprintf(buf, bufLen, \"%s\", dyldInfo.dli_sname);\n      *offset = (addr - (pint_t) dyldInfo.dli_saddr);\n      return true;\n    }\n  }\n#endif\n  return false;\n}\n\n\n\n#ifdef UNW_REMOTE\n\n/// OtherAddressSpace is used as a template parameter to UnwindCursor when\n/// unwinding a thread in the another process.  The other process can be a\n/// different endianness and a different pointer size which is handled by\n/// the P template parameter.\ntemplate <typename P>\nclass OtherAddressSpace {\npublic:\n  OtherAddressSpace(task_t task) : fTask(task) {}\n\n  typedef typename P::uint_t pint_t;\n\n  uint8_t   get8(pint_t addr);\n  uint16_t  get16(pint_t addr);\n  uint32_t  get32(pint_t addr);\n  uint64_t  get64(pint_t addr);\n  pint_t    getP(pint_t addr);\n  uint64_t  getULEB128(pint_t &addr, pint_t end);\n  int64_t   getSLEB128(pint_t &addr, pint_t end);\n  pint_t    getEncodedP(pint_t &addr, pint_t end, uint8_t encoding,\n                        pint_t datarelBase = 0);\n  bool      findFunctionName(pint_t addr, char *buf, size_t bufLen,\n                        unw_word_t *offset);\n  bool      findUnwindSections(pint_t targetAddr, UnwindInfoSections &info);\n  bool      findOtherFDE(pint_t targetAddr, pint_t &fde);\nprivate:\n  void *localCopy(pint_t addr);\n\n  task_t fTask;\n};\n\ntemplate <typename P> uint8_t OtherAddressSpace<P>::get8(pint_t addr) {\n  return *((uint8_t *)localCopy(addr));\n}\n\ntemplate <typename P> uint16_t OtherAddressSpace<P>::get16(pint_t addr) {\n  return P::E::get16(*(uint16_t *)localCopy(addr));\n}\n\ntemplate <typename P> uint32_t OtherAddressSpace<P>::get32(pint_t addr) {\n  return P::E::get32(*(uint32_t *)localCopy(addr));\n}\n\ntemplate <typename P> uint64_t OtherAddressSpace<P>::get64(pint_t addr) {\n  return P::E::get64(*(uint64_t *)localCopy(addr));\n}\n\ntemplate <typename P>\ntypename P::uint_t OtherAddressSpace<P>::getP(pint_t addr) {\n  return P::getP(*(uint64_t *)localCopy(addr));\n}\n\ntemplate <typename P>\nuint64_t OtherAddressSpace<P>::getULEB128(pint_t &addr, pint_t end) {\n  uintptr_t size = (end - addr);\n  LocalAddressSpace::pint_t laddr = (LocalAddressSpace::pint_t) localCopy(addr);\n  LocalAddressSpace::pint_t sladdr = laddr;\n  uint64_t result = LocalAddressSpace::getULEB128(laddr, laddr + size);\n  addr += (laddr - sladdr);\n  return result;\n}\n\ntemplate <typename P>\nint64_t OtherAddressSpace<P>::getSLEB128(pint_t &addr, pint_t end) {\n  uintptr_t size = (end - addr);\n  LocalAddressSpace::pint_t laddr = (LocalAddressSpace::pint_t) localCopy(addr);\n  LocalAddressSpace::pint_t sladdr = laddr;\n  uint64_t result = LocalAddressSpace::getSLEB128(laddr, laddr + size);\n  addr += (laddr - sladdr);\n  return result;\n}\n\ntemplate <typename P> void *OtherAddressSpace<P>::localCopy(pint_t addr) {\n  // FIX ME\n}\n\ntemplate <typename P>\nbool OtherAddressSpace<P>::findFunctionName(pint_t addr, char *buf,\n                                            size_t bufLen, unw_word_t *offset) {\n  // FIX ME\n}\n\n/// unw_addr_space is the base class that abstract unw_addr_space_t type in\n/// libunwind.h points to.\nstruct unw_addr_space {\n  cpu_type_t cpuType;\n  task_t taskPort;\n};\n\n/// unw_addr_space_i386 is the concrete instance that a unw_addr_space_t points\n/// to when examining\n/// a 32-bit intel process.\nstruct unw_addr_space_i386 : public unw_addr_space {\n  unw_addr_space_i386(task_t task) : oas(task) {}\n  OtherAddressSpace<Pointer32<LittleEndian> > oas;\n};\n\n/// unw_addr_space_x86_64 is the concrete instance that a unw_addr_space_t\n/// points to when examining\n/// a 64-bit intel process.\nstruct unw_addr_space_x86_64 : public unw_addr_space {\n  unw_addr_space_x86_64(task_t task) : oas(task) {}\n  OtherAddressSpace<Pointer64<LittleEndian> > oas;\n};\n\n/// unw_addr_space_ppc is the concrete instance that a unw_addr_space_t points\n/// to when examining\n/// a 32-bit PowerPC process.\nstruct unw_addr_space_ppc : public unw_addr_space {\n  unw_addr_space_ppc(task_t task) : oas(task) {}\n  OtherAddressSpace<Pointer32<BigEndian> > oas;\n};\n\n#endif // UNW_REMOTE\n\n} // namespace libunwind\n\n#endif // __ADDRESSSPACE_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/CompactUnwinder.hpp",
    "content": "//===-------------------------- CompactUnwinder.hpp -----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Does runtime stack unwinding using compact unwind encodings.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __COMPACT_UNWINDER_HPP__\n#define __COMPACT_UNWINDER_HPP__\n\n#include <stdint.h>\n#include <stdlib.h>\n\n#include <libunwind.h>\n#include <mach-o/compact_unwind_encoding.h>\n\n#include \"AddressSpace.hpp\"\n#include \"Registers.hpp\"\n\n#define EXTRACT_BITS(value, mask)                                              \\\n  ((value >> __builtin_ctz(mask)) & (((1 << __builtin_popcount(mask))) - 1))\n\nnamespace libunwind {\n\n/// CompactUnwinder_x86 uses a compact unwind info to virtually \"step\" (aka\n/// unwind) by modifying a Registers_x86 register set\ntemplate <typename A>\nclass CompactUnwinder_x86 {\npublic:\n\n  static int stepWithCompactEncoding(compact_unwind_encoding_t info,\n                                     uint32_t functionStart, A &addressSpace,\n                                     Registers_x86 &registers);\n\nprivate:\n  typename A::pint_t pint_t;\n\n  static void frameUnwind(A &addressSpace, Registers_x86 &registers);\n  static void framelessUnwind(A &addressSpace,\n                              typename A::pint_t returnAddressLocation,\n                              Registers_x86 &registers);\n  static int\n      stepWithCompactEncodingEBPFrame(compact_unwind_encoding_t compactEncoding,\n                                      uint32_t functionStart, A &addressSpace,\n                                      Registers_x86 &registers);\n  static int stepWithCompactEncodingFrameless(\n      compact_unwind_encoding_t compactEncoding, uint32_t functionStart,\n      A &addressSpace, Registers_x86 &registers, bool indirectStackSize);\n};\n\ntemplate <typename A>\nint CompactUnwinder_x86<A>::stepWithCompactEncoding(\n    compact_unwind_encoding_t compactEncoding, uint32_t functionStart,\n    A &addressSpace, Registers_x86 &registers) {\n  switch (compactEncoding & UNWIND_X86_MODE_MASK) {\n  case UNWIND_X86_MODE_EBP_FRAME:\n    return stepWithCompactEncodingEBPFrame(compactEncoding, functionStart,\n                                           addressSpace, registers);\n  case UNWIND_X86_MODE_STACK_IMMD:\n    return stepWithCompactEncodingFrameless(compactEncoding, functionStart,\n                                            addressSpace, registers, false);\n  case UNWIND_X86_MODE_STACK_IND:\n    return stepWithCompactEncodingFrameless(compactEncoding, functionStart,\n                                            addressSpace, registers, true);\n  }\n  _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n}\n\ntemplate <typename A>\nint CompactUnwinder_x86<A>::stepWithCompactEncodingEBPFrame(\n    compact_unwind_encoding_t compactEncoding, uint32_t functionStart,\n    A &addressSpace, Registers_x86 &registers) {\n  uint32_t savedRegistersOffset =\n      EXTRACT_BITS(compactEncoding, UNWIND_X86_EBP_FRAME_OFFSET);\n  uint32_t savedRegistersLocations =\n      EXTRACT_BITS(compactEncoding, UNWIND_X86_EBP_FRAME_REGISTERS);\n\n  uint32_t savedRegisters = registers.getEBP() - 4 * savedRegistersOffset;\n  for (int i = 0; i < 5; ++i) {\n    switch (savedRegistersLocations & 0x7) {\n    case UNWIND_X86_REG_NONE:\n      // no register saved in this slot\n      break;\n    case UNWIND_X86_REG_EBX:\n      registers.setEBX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_ECX:\n      registers.setECX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_EDX:\n      registers.setEDX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_EDI:\n      registers.setEDI(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_ESI:\n      registers.setESI(addressSpace.get32(savedRegisters));\n      break;\n    default:\n      (void)functionStart;\n      _LIBUNWIND_DEBUG_LOG(\"bad register for EBP frame, encoding=%08X for  \"\n                           \"function starting at 0x%X\\n\",\n                            compactEncoding, functionStart);\n      _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n    }\n    savedRegisters += 4;\n    savedRegistersLocations = (savedRegistersLocations >> 3);\n  }\n  frameUnwind(addressSpace, registers);\n  return UNW_STEP_SUCCESS;\n}\n\ntemplate <typename A>\nint CompactUnwinder_x86<A>::stepWithCompactEncodingFrameless(\n    compact_unwind_encoding_t encoding, uint32_t functionStart,\n    A &addressSpace, Registers_x86 &registers, bool indirectStackSize) {\n  uint32_t stackSizeEncoded =\n      EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_SIZE);\n  uint32_t stackAdjust =\n      EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_ADJUST);\n  uint32_t regCount =\n      EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_COUNT);\n  uint32_t permutation =\n      EXTRACT_BITS(encoding, UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION);\n  uint32_t stackSize = stackSizeEncoded * 4;\n  if (indirectStackSize) {\n    // stack size is encoded in subl $xxx,%esp instruction\n    uint32_t subl = addressSpace.get32(functionStart + stackSizeEncoded);\n    stackSize = subl + 4 * stackAdjust;\n  }\n  // decompress permutation\n  uint32_t permunreg[6];\n  switch (regCount) {\n  case 6:\n    permunreg[0] = permutation / 120;\n    permutation -= (permunreg[0] * 120);\n    permunreg[1] = permutation / 24;\n    permutation -= (permunreg[1] * 24);\n    permunreg[2] = permutation / 6;\n    permutation -= (permunreg[2] * 6);\n    permunreg[3] = permutation / 2;\n    permutation -= (permunreg[3] * 2);\n    permunreg[4] = permutation;\n    permunreg[5] = 0;\n    break;\n  case 5:\n    permunreg[0] = permutation / 120;\n    permutation -= (permunreg[0] * 120);\n    permunreg[1] = permutation / 24;\n    permutation -= (permunreg[1] * 24);\n    permunreg[2] = permutation / 6;\n    permutation -= (permunreg[2] * 6);\n    permunreg[3] = permutation / 2;\n    permutation -= (permunreg[3] * 2);\n    permunreg[4] = permutation;\n    break;\n  case 4:\n    permunreg[0] = permutation / 60;\n    permutation -= (permunreg[0] * 60);\n    permunreg[1] = permutation / 12;\n    permutation -= (permunreg[1] * 12);\n    permunreg[2] = permutation / 3;\n    permutation -= (permunreg[2] * 3);\n    permunreg[3] = permutation;\n    break;\n  case 3:\n    permunreg[0] = permutation / 20;\n    permutation -= (permunreg[0] * 20);\n    permunreg[1] = permutation / 4;\n    permutation -= (permunreg[1] * 4);\n    permunreg[2] = permutation;\n    break;\n  case 2:\n    permunreg[0] = permutation / 5;\n    permutation -= (permunreg[0] * 5);\n    permunreg[1] = permutation;\n    break;\n  case 1:\n    permunreg[0] = permutation;\n    break;\n  }\n  // re-number registers back to standard numbers\n  int registersSaved[6];\n  bool used[7] = { false, false, false, false, false, false, false };\n  for (uint32_t i = 0; i < regCount; ++i) {\n    uint32_t renum = 0;\n    for (int u = 1; u < 7; ++u) {\n      if (!used[u]) {\n        if (renum == permunreg[i]) {\n          registersSaved[i] = u;\n          used[u] = true;\n          break;\n        }\n        ++renum;\n      }\n    }\n  }\n  uint32_t savedRegisters = registers.getSP() + stackSize - 4 - 4 * regCount;\n  for (uint32_t i = 0; i < regCount; ++i) {\n    switch (registersSaved[i]) {\n    case UNWIND_X86_REG_EBX:\n      registers.setEBX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_ECX:\n      registers.setECX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_EDX:\n      registers.setEDX(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_EDI:\n      registers.setEDI(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_ESI:\n      registers.setESI(addressSpace.get32(savedRegisters));\n      break;\n    case UNWIND_X86_REG_EBP:\n      registers.setEBP(addressSpace.get32(savedRegisters));\n      break;\n    default:\n      _LIBUNWIND_DEBUG_LOG(\"bad register for frameless, encoding=%08X for \"\n                           \"function starting at 0x%X\\n\",\n                           encoding, functionStart);\n      _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n    }\n    savedRegisters += 4;\n  }\n  framelessUnwind(addressSpace, savedRegisters, registers);\n  return UNW_STEP_SUCCESS;\n}\n\n\ntemplate <typename A>\nvoid CompactUnwinder_x86<A>::frameUnwind(A &addressSpace,\n                                         Registers_x86 &registers) {\n  typename A::pint_t bp = registers.getEBP();\n  // ebp points to old ebp\n  registers.setEBP(addressSpace.get32(bp));\n  // old esp is ebp less saved ebp and return address\n  registers.setSP((uint32_t)bp + 8);\n  // pop return address into eip\n  registers.setIP(addressSpace.get32(bp + 4));\n}\n\ntemplate <typename A>\nvoid CompactUnwinder_x86<A>::framelessUnwind(\n    A &addressSpace, typename A::pint_t returnAddressLocation,\n    Registers_x86 &registers) {\n  // return address is on stack after last saved register\n  registers.setIP(addressSpace.get32(returnAddressLocation));\n  // old esp is before return address\n  registers.setSP((uint32_t)returnAddressLocation + 4);\n}\n\n\n/// CompactUnwinder_x86_64 uses a compact unwind info to virtually \"step\" (aka\n/// unwind) by modifying a Registers_x86_64 register set\ntemplate <typename A>\nclass CompactUnwinder_x86_64 {\npublic:\n\n  static int stepWithCompactEncoding(compact_unwind_encoding_t compactEncoding,\n                                     uint64_t functionStart, A &addressSpace,\n                                     Registers_x86_64 &registers);\n\nprivate:\n  typename A::pint_t pint_t;\n\n  static void frameUnwind(A &addressSpace, Registers_x86_64 &registers);\n  static void framelessUnwind(A &addressSpace, uint64_t returnAddressLocation,\n                              Registers_x86_64 &registers);\n  static int\n      stepWithCompactEncodingRBPFrame(compact_unwind_encoding_t compactEncoding,\n                                      uint64_t functionStart, A &addressSpace,\n                                      Registers_x86_64 &registers);\n  static int stepWithCompactEncodingFrameless(\n      compact_unwind_encoding_t compactEncoding, uint64_t functionStart,\n      A &addressSpace, Registers_x86_64 &registers, bool indirectStackSize);\n};\n\ntemplate <typename A>\nint CompactUnwinder_x86_64<A>::stepWithCompactEncoding(\n    compact_unwind_encoding_t compactEncoding, uint64_t functionStart,\n    A &addressSpace, Registers_x86_64 &registers) {\n  switch (compactEncoding & UNWIND_X86_64_MODE_MASK) {\n  case UNWIND_X86_64_MODE_RBP_FRAME:\n    return stepWithCompactEncodingRBPFrame(compactEncoding, functionStart,\n                                           addressSpace, registers);\n  case UNWIND_X86_64_MODE_STACK_IMMD:\n    return stepWithCompactEncodingFrameless(compactEncoding, functionStart,\n                                            addressSpace, registers, false);\n  case UNWIND_X86_64_MODE_STACK_IND:\n    return stepWithCompactEncodingFrameless(compactEncoding, functionStart,\n                                            addressSpace, registers, true);\n  }\n  _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n}\n\ntemplate <typename A>\nint CompactUnwinder_x86_64<A>::stepWithCompactEncodingRBPFrame(\n    compact_unwind_encoding_t compactEncoding, uint64_t functionStart,\n    A &addressSpace, Registers_x86_64 &registers) {\n  uint32_t savedRegistersOffset =\n      EXTRACT_BITS(compactEncoding, UNWIND_X86_64_RBP_FRAME_OFFSET);\n  uint32_t savedRegistersLocations =\n      EXTRACT_BITS(compactEncoding, UNWIND_X86_64_RBP_FRAME_REGISTERS);\n\n  uint64_t savedRegisters = registers.getRBP() - 8 * savedRegistersOffset;\n  for (int i = 0; i < 5; ++i) {\n    switch (savedRegistersLocations & 0x7) {\n    case UNWIND_X86_64_REG_NONE:\n      // no register saved in this slot\n      break;\n    case UNWIND_X86_64_REG_RBX:\n      registers.setRBX(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R12:\n      registers.setR12(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R13:\n      registers.setR13(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R14:\n      registers.setR14(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R15:\n      registers.setR15(addressSpace.get64(savedRegisters));\n      break;\n    default:\n      (void)functionStart;\n      _LIBUNWIND_DEBUG_LOG(\"bad register for RBP frame, encoding=%08X for \"\n                           \"function starting at 0x%llX\\n\",\n                            compactEncoding, functionStart);\n      _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n    }\n    savedRegisters += 8;\n    savedRegistersLocations = (savedRegistersLocations >> 3);\n  }\n  frameUnwind(addressSpace, registers);\n  return UNW_STEP_SUCCESS;\n}\n\ntemplate <typename A>\nint CompactUnwinder_x86_64<A>::stepWithCompactEncodingFrameless(\n    compact_unwind_encoding_t encoding, uint64_t functionStart, A &addressSpace,\n    Registers_x86_64 &registers, bool indirectStackSize) {\n  uint32_t stackSizeEncoded =\n      EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_SIZE);\n  uint32_t stackAdjust =\n      EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_ADJUST);\n  uint32_t regCount =\n      EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT);\n  uint32_t permutation =\n      EXTRACT_BITS(encoding, UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION);\n  uint32_t stackSize = stackSizeEncoded * 8;\n  if (indirectStackSize) {\n    // stack size is encoded in subl $xxx,%esp instruction\n    uint32_t subl = addressSpace.get32(functionStart + stackSizeEncoded);\n    stackSize = subl + 8 * stackAdjust;\n  }\n  // decompress permutation\n  uint32_t permunreg[6];\n  switch (regCount) {\n  case 6:\n    permunreg[0] = permutation / 120;\n    permutation -= (permunreg[0] * 120);\n    permunreg[1] = permutation / 24;\n    permutation -= (permunreg[1] * 24);\n    permunreg[2] = permutation / 6;\n    permutation -= (permunreg[2] * 6);\n    permunreg[3] = permutation / 2;\n    permutation -= (permunreg[3] * 2);\n    permunreg[4] = permutation;\n    permunreg[5] = 0;\n    break;\n  case 5:\n    permunreg[0] = permutation / 120;\n    permutation -= (permunreg[0] * 120);\n    permunreg[1] = permutation / 24;\n    permutation -= (permunreg[1] * 24);\n    permunreg[2] = permutation / 6;\n    permutation -= (permunreg[2] * 6);\n    permunreg[3] = permutation / 2;\n    permutation -= (permunreg[3] * 2);\n    permunreg[4] = permutation;\n    break;\n  case 4:\n    permunreg[0] = permutation / 60;\n    permutation -= (permunreg[0] * 60);\n    permunreg[1] = permutation / 12;\n    permutation -= (permunreg[1] * 12);\n    permunreg[2] = permutation / 3;\n    permutation -= (permunreg[2] * 3);\n    permunreg[3] = permutation;\n    break;\n  case 3:\n    permunreg[0] = permutation / 20;\n    permutation -= (permunreg[0] * 20);\n    permunreg[1] = permutation / 4;\n    permutation -= (permunreg[1] * 4);\n    permunreg[2] = permutation;\n    break;\n  case 2:\n    permunreg[0] = permutation / 5;\n    permutation -= (permunreg[0] * 5);\n    permunreg[1] = permutation;\n    break;\n  case 1:\n    permunreg[0] = permutation;\n    break;\n  }\n  // re-number registers back to standard numbers\n  int registersSaved[6];\n  bool used[7] = { false, false, false, false, false, false, false };\n  for (uint32_t i = 0; i < regCount; ++i) {\n    uint32_t renum = 0;\n    for (int u = 1; u < 7; ++u) {\n      if (!used[u]) {\n        if (renum == permunreg[i]) {\n          registersSaved[i] = u;\n          used[u] = true;\n          break;\n        }\n        ++renum;\n      }\n    }\n  }\n  uint64_t savedRegisters = registers.getSP() + stackSize - 8 - 8 * regCount;\n  for (uint32_t i = 0; i < regCount; ++i) {\n    switch (registersSaved[i]) {\n    case UNWIND_X86_64_REG_RBX:\n      registers.setRBX(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R12:\n      registers.setR12(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R13:\n      registers.setR13(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R14:\n      registers.setR14(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_R15:\n      registers.setR15(addressSpace.get64(savedRegisters));\n      break;\n    case UNWIND_X86_64_REG_RBP:\n      registers.setRBP(addressSpace.get64(savedRegisters));\n      break;\n    default:\n      _LIBUNWIND_DEBUG_LOG(\"bad register for frameless, encoding=%08X for \"\n                           \"function starting at 0x%llX\\n\",\n                            encoding, functionStart);\n      _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n    }\n    savedRegisters += 8;\n  }\n  framelessUnwind(addressSpace, savedRegisters, registers);\n  return UNW_STEP_SUCCESS;\n}\n\n\ntemplate <typename A>\nvoid CompactUnwinder_x86_64<A>::frameUnwind(A &addressSpace,\n                                            Registers_x86_64 &registers) {\n  uint64_t rbp = registers.getRBP();\n  // ebp points to old ebp\n  registers.setRBP(addressSpace.get64(rbp));\n  // old esp is ebp less saved ebp and return address\n  registers.setSP(rbp + 16);\n  // pop return address into eip\n  registers.setIP(addressSpace.get64(rbp + 8));\n}\n\ntemplate <typename A>\nvoid CompactUnwinder_x86_64<A>::framelessUnwind(A &addressSpace,\n                                                uint64_t returnAddressLocation,\n                                                Registers_x86_64 &registers) {\n  // return address is on stack after last saved register\n  registers.setIP(addressSpace.get64(returnAddressLocation));\n  // old esp is before return address\n  registers.setSP(returnAddressLocation + 8);\n}\n\n\n\n/// CompactUnwinder_arm64 uses a compact unwind info to virtually \"step\" (aka\n/// unwind) by modifying a Registers_arm64 register set\ntemplate <typename A>\nclass CompactUnwinder_arm64 {\npublic:\n\n  static int stepWithCompactEncoding(compact_unwind_encoding_t compactEncoding,\n                                     uint64_t functionStart, A &addressSpace,\n                                     Registers_arm64 &registers);\n\nprivate:\n  typename A::pint_t pint_t;\n\n  static int\n      stepWithCompactEncodingFrame(compact_unwind_encoding_t compactEncoding,\n                                   uint64_t functionStart, A &addressSpace,\n                                   Registers_arm64 &registers);\n  static int stepWithCompactEncodingFrameless(\n      compact_unwind_encoding_t compactEncoding, uint64_t functionStart,\n      A &addressSpace, Registers_arm64 &registers);\n};\n\ntemplate <typename A>\nint CompactUnwinder_arm64<A>::stepWithCompactEncoding(\n    compact_unwind_encoding_t compactEncoding, uint64_t functionStart,\n    A &addressSpace, Registers_arm64 &registers) {\n  switch (compactEncoding & UNWIND_ARM64_MODE_MASK) {\n  case UNWIND_ARM64_MODE_FRAME:\n    return stepWithCompactEncodingFrame(compactEncoding, functionStart,\n                                        addressSpace, registers);\n  case UNWIND_ARM64_MODE_FRAMELESS:\n    return stepWithCompactEncodingFrameless(compactEncoding, functionStart,\n                                            addressSpace, registers);\n  }\n  _LIBUNWIND_ABORT(\"invalid compact unwind encoding\");\n}\n\ntemplate <typename A>\nint CompactUnwinder_arm64<A>::stepWithCompactEncodingFrameless(\n    compact_unwind_encoding_t encoding, uint64_t, A &addressSpace,\n    Registers_arm64 &registers) {\n  uint32_t stackSize =\n      16 * EXTRACT_BITS(encoding, UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK);\n\n  uint64_t savedRegisterLoc = registers.getSP() + stackSize;\n\n  if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) {\n    registers.setRegister(UNW_ARM64_X19, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X20, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X21_X22_PAIR) {\n    registers.setRegister(UNW_ARM64_X21, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X22, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X23_X24_PAIR) {\n    registers.setRegister(UNW_ARM64_X23, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X24, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X25_X26_PAIR) {\n    registers.setRegister(UNW_ARM64_X25, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X26, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X27_X28_PAIR) {\n    registers.setRegister(UNW_ARM64_X27, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X28, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n\n  if (encoding & UNWIND_ARM64_FRAME_D8_D9_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D8,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D9,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D10_D11_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D10,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D11,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D12_D13_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D12,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D13,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D14_D15_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D14,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D15,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n\n  // subtract stack size off of sp\n  registers.setSP(savedRegisterLoc);\n\n  // set pc to be value in lr\n  registers.setIP(registers.getRegister(UNW_ARM64_LR));\n\n  return UNW_STEP_SUCCESS;\n}\n\ntemplate <typename A>\nint CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame(\n    compact_unwind_encoding_t encoding, uint64_t, A &addressSpace,\n    Registers_arm64 &registers) {\n  uint64_t savedRegisterLoc = registers.getFP() - 8;\n\n  if (encoding & UNWIND_ARM64_FRAME_X19_X20_PAIR) {\n    registers.setRegister(UNW_ARM64_X19, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X20, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X21_X22_PAIR) {\n    registers.setRegister(UNW_ARM64_X21, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X22, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X23_X24_PAIR) {\n    registers.setRegister(UNW_ARM64_X23, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X24, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X25_X26_PAIR) {\n    registers.setRegister(UNW_ARM64_X25, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X26, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_X27_X28_PAIR) {\n    registers.setRegister(UNW_ARM64_X27, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setRegister(UNW_ARM64_X28, addressSpace.get64(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n\n  if (encoding & UNWIND_ARM64_FRAME_D8_D9_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D8,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D9,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D10_D11_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D10,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D11,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D12_D13_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D12,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D13,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n  if (encoding & UNWIND_ARM64_FRAME_D14_D15_PAIR) {\n    registers.setFloatRegister(UNW_ARM64_D14,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n    registers.setFloatRegister(UNW_ARM64_D15,\n                               addressSpace.getDouble(savedRegisterLoc));\n    savedRegisterLoc -= 8;\n  }\n\n  uint64_t fp = registers.getFP();\n  // fp points to old fp\n  registers.setFP(addressSpace.get64(fp));\n  // old sp is fp less saved fp and lr\n  registers.setSP(fp + 16);\n  // pop return address into pc\n  registers.setIP(addressSpace.get64(fp + 8));\n\n  return UNW_STEP_SUCCESS;\n}\n\n\n} // namespace libunwind\n\n#endif // __COMPACT_UNWINDER_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/DwarfInstructions.hpp",
    "content": "//===-------------------------- DwarfInstructions.hpp ---------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Processor specific interpretation of dwarf unwind info.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __DWARF_INSTRUCTIONS_HPP__\n#define __DWARF_INSTRUCTIONS_HPP__\n\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"dwarf2.h\"\n#include \"AddressSpace.hpp\"\n#include \"Registers.hpp\"\n#include \"DwarfParser.hpp\"\n#include \"config.h\"\n\n\nnamespace libunwind {\n\n\n/// DwarfInstructions maps abtract dwarf unwind instructions to a particular\n/// architecture\ntemplate <typename A, typename R>\nclass DwarfInstructions {\npublic:\n  typedef typename A::pint_t pint_t;\n  typedef typename A::sint_t sint_t;\n\n  static int stepWithDwarf(A &addressSpace, pint_t pc, pint_t fdeStart,\n                           R &registers);\n\nprivate:\n\n  enum {\n    DW_X86_64_RET_ADDR = 16\n  };\n\n  enum {\n    DW_X86_RET_ADDR = 8\n  };\n\n  typedef typename CFI_Parser<A>::RegisterLocation  RegisterLocation;\n  typedef typename CFI_Parser<A>::PrologInfo        PrologInfo;\n  typedef typename CFI_Parser<A>::FDE_Info          FDE_Info;\n  typedef typename CFI_Parser<A>::CIE_Info          CIE_Info;\n\n  static pint_t evaluateExpression(pint_t expression, A &addressSpace,\n                                   const R &registers,\n                                   pint_t initialStackValue);\n  static pint_t getSavedRegister(A &addressSpace, const R &registers,\n                                 pint_t cfa, const RegisterLocation &savedReg);\n  static double getSavedFloatRegister(A &addressSpace, const R &registers,\n                                  pint_t cfa, const RegisterLocation &savedReg);\n  static v128 getSavedVectorRegister(A &addressSpace, const R &registers,\n                                  pint_t cfa, const RegisterLocation &savedReg);\n\n  static pint_t getCFA(A &addressSpace, const PrologInfo &prolog,\n                       const R &registers) {\n    if (prolog.cfaRegister != 0)\n      return (pint_t)((sint_t)registers.getRegister((int)prolog.cfaRegister) +\n             prolog.cfaRegisterOffset);\n    if (prolog.cfaExpression != 0)\n      return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace, \n                                registers, 0);\n    assert(0 && \"getCFA(): unknown location\");\n    __builtin_unreachable();\n  }\n};\n\n\ntemplate <typename A, typename R>\ntypename A::pint_t DwarfInstructions<A, R>::getSavedRegister(\n    A &addressSpace, const R &registers, pint_t cfa,\n    const RegisterLocation &savedReg) {\n  switch (savedReg.location) {\n  case CFI_Parser<A>::kRegisterInCFA:\n    return addressSpace.getP(cfa + (pint_t)savedReg.value);\n\n  case CFI_Parser<A>::kRegisterAtExpression:\n    return addressSpace.getP(\n        evaluateExpression((pint_t)savedReg.value, addressSpace,\n                            registers, cfa));\n\n  case CFI_Parser<A>::kRegisterIsExpression:\n    return evaluateExpression((pint_t)savedReg.value, addressSpace,\n                              registers, cfa);\n\n  case CFI_Parser<A>::kRegisterInRegister:\n    return registers.getRegister((int)savedReg.value);\n\n  case CFI_Parser<A>::kRegisterUnused:\n  case CFI_Parser<A>::kRegisterOffsetFromCFA:\n    // FIX ME\n    break;\n  }\n  _LIBUNWIND_ABORT(\"unsupported restore location for register\");\n}\n\ntemplate <typename A, typename R>\ndouble DwarfInstructions<A, R>::getSavedFloatRegister(\n    A &addressSpace, const R &registers, pint_t cfa,\n    const RegisterLocation &savedReg) {\n  switch (savedReg.location) {\n  case CFI_Parser<A>::kRegisterInCFA:\n    return addressSpace.getDouble(cfa + (pint_t)savedReg.value);\n\n  case CFI_Parser<A>::kRegisterAtExpression:\n    return addressSpace.getDouble(\n        evaluateExpression((pint_t)savedReg.value, addressSpace,\n                            registers, cfa));\n\n  case CFI_Parser<A>::kRegisterIsExpression:\n  case CFI_Parser<A>::kRegisterUnused:\n  case CFI_Parser<A>::kRegisterOffsetFromCFA:\n  case CFI_Parser<A>::kRegisterInRegister:\n    // FIX ME\n    break;\n  }\n  _LIBUNWIND_ABORT(\"unsupported restore location for float register\");\n}\n\ntemplate <typename A, typename R>\nv128 DwarfInstructions<A, R>::getSavedVectorRegister(\n    A &addressSpace, const R &registers, pint_t cfa,\n    const RegisterLocation &savedReg) {\n  switch (savedReg.location) {\n  case CFI_Parser<A>::kRegisterInCFA:\n    return addressSpace.getVector(cfa + (pint_t)savedReg.value);\n\n  case CFI_Parser<A>::kRegisterAtExpression:\n    return addressSpace.getVector(\n        evaluateExpression((pint_t)savedReg.value, addressSpace,\n                            registers, cfa));\n\n  case CFI_Parser<A>::kRegisterIsExpression:\n  case CFI_Parser<A>::kRegisterUnused:\n  case CFI_Parser<A>::kRegisterOffsetFromCFA:\n  case CFI_Parser<A>::kRegisterInRegister:\n    // FIX ME\n    break;\n  }\n  _LIBUNWIND_ABORT(\"unsupported restore location for vector register\");\n}\n\ntemplate <typename A, typename R>\nint DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,\n                                           pint_t fdeStart, R &registers) {\n  FDE_Info fdeInfo;\n  CIE_Info cieInfo;\n  if (CFI_Parser<A>::decodeFDE(addressSpace, fdeStart, &fdeInfo,\n                               &cieInfo) == NULL) {\n    PrologInfo prolog;\n    if (CFI_Parser<A>::parseFDEInstructions(addressSpace, fdeInfo, cieInfo, pc,\n                                            &prolog)) {\n      // get pointer to cfa (architecture specific)\n      pint_t cfa = getCFA(addressSpace, prolog, registers);\n\n       // restore registers that dwarf says were saved\n      R newRegisters = registers;\n      pint_t returnAddress = 0;\n      const int lastReg = R::lastDwarfRegNum();\n      assert((int)CFI_Parser<A>::kMaxRegisterNumber > lastReg &&\n             \"register range too large\");\n      assert(lastReg <= (int)cieInfo.returnAddressRegister &&\n             \"register range does not contain return address register\");\n      for (int i = 0; i <= lastReg; ++i) {\n         if (prolog.savedRegisters[i].location !=\n             CFI_Parser<A>::kRegisterUnused) {\n           if (registers.validFloatRegister(i))\n            newRegisters.setFloatRegister(\n                i, getSavedFloatRegister(addressSpace, registers, cfa,\n                                         prolog.savedRegisters[i]));\n          else if (registers.validVectorRegister(i))\n            newRegisters.setVectorRegister(\n                i, getSavedVectorRegister(addressSpace, registers, cfa,\n                                          prolog.savedRegisters[i]));\n          else if (i == (int)cieInfo.returnAddressRegister)\n            returnAddress = getSavedRegister(addressSpace, registers, cfa,\n                                             prolog.savedRegisters[i]);\n          else if (registers.validRegister(i))\n            newRegisters.setRegister(\n                i, getSavedRegister(addressSpace, registers, cfa,\n                                    prolog.savedRegisters[i]));\n          else\n            return UNW_EBADREG;\n        }\n      }\n\n      // By definition, the CFA is the stack pointer at the call site, so\n      // restoring SP means setting it to CFA.\n      newRegisters.setSP(cfa);\n\n      // Return address is address after call site instruction, so setting IP to\n      // that does simualates a return.\n      newRegisters.setIP(returnAddress);\n\n      // Simulate the step by replacing the register set with the new ones.\n      registers = newRegisters;\n\n      return UNW_STEP_SUCCESS;\n    }\n  }\n  return UNW_EBADFRAME;\n}\n\ntemplate <typename A, typename R>\ntypename A::pint_t\nDwarfInstructions<A, R>::evaluateExpression(pint_t expression, A &addressSpace,\n                                            const R &registers,\n                                            pint_t initialStackValue) {\n  const bool log = false;\n  pint_t p = expression;\n  pint_t expressionEnd = expression + 20; // temp, until len read\n  pint_t length = (pint_t)addressSpace.getULEB128(p, expressionEnd);\n  expressionEnd = p + length;\n  if (log)\n    fprintf(stderr, \"evaluateExpression(): length=%\" PRIu64 \"\\n\",\n            (uint64_t)length);\n  pint_t stack[100];\n  pint_t *sp = stack;\n  *(++sp) = initialStackValue;\n\n  while (p < expressionEnd) {\n    if (log) {\n      for (pint_t *t = sp; t > stack; --t) {\n        fprintf(stderr, \"sp[] = 0x%\" PRIx64 \"\\n\", (uint64_t)(*t));\n      }\n    }\n    uint8_t opcode = addressSpace.get8(p++);\n    sint_t svalue, svalue2;\n    pint_t value;\n    uint32_t reg;\n    switch (opcode) {\n    case DW_OP_addr:\n      // push immediate address sized value\n      value = addressSpace.getP(p);\n      p += sizeof(pint_t);\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_deref:\n      // pop stack, dereference, push result\n      value = *sp--;\n      *(++sp) = addressSpace.getP(value);\n      if (log)\n        fprintf(stderr, \"dereference 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_const1u:\n      // push immediate 1 byte value\n      value = addressSpace.get8(p);\n      p += 1;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_const1s:\n      // push immediate 1 byte signed value\n      svalue = (int8_t) addressSpace.get8(p);\n      p += 1;\n      *(++sp) = (pint_t)svalue;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_const2u:\n      // push immediate 2 byte value\n      value = addressSpace.get16(p);\n      p += 2;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_const2s:\n      // push immediate 2 byte signed value\n      svalue = (int16_t) addressSpace.get16(p);\n      p += 2;\n      *(++sp) = (pint_t)svalue;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_const4u:\n      // push immediate 4 byte value\n      value = addressSpace.get32(p);\n      p += 4;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_const4s:\n      // push immediate 4 byte signed value\n      svalue = (int32_t)addressSpace.get32(p);\n      p += 4;\n      *(++sp) = (pint_t)svalue;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_const8u:\n      // push immediate 8 byte value\n      value = (pint_t)addressSpace.get64(p);\n      p += 8;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_const8s:\n      // push immediate 8 byte signed value\n      value = (pint_t)addressSpace.get64(p);\n      p += 8;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_constu:\n      // push immediate ULEB128 value\n      value = (pint_t)addressSpace.getULEB128(p, expressionEnd);\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_consts:\n      // push immediate SLEB128 value\n      svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd);\n      *(++sp) = (pint_t)svalue;\n      if (log)\n        fprintf(stderr, \"push 0x%\" PRIx64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_dup:\n      // push top of stack\n      value = *sp;\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"duplicate top of stack\\n\");\n      break;\n\n    case DW_OP_drop:\n      // pop\n      --sp;\n      if (log)\n        fprintf(stderr, \"pop top of stack\\n\");\n      break;\n\n    case DW_OP_over:\n      // dup second\n      value = sp[-1];\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"duplicate second in stack\\n\");\n      break;\n\n    case DW_OP_pick:\n      // pick from\n      reg = addressSpace.get8(p);\n      p += 1;\n      value = sp[-reg];\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"duplicate %d in stack\\n\", reg);\n      break;\n\n    case DW_OP_swap:\n      // swap top two\n      value = sp[0];\n      sp[0] = sp[-1];\n      sp[-1] = value;\n      if (log)\n        fprintf(stderr, \"swap top of stack\\n\");\n      break;\n\n    case DW_OP_rot:\n      // rotate top three\n      value = sp[0];\n      sp[0] = sp[-1];\n      sp[-1] = sp[-2];\n      sp[-2] = value;\n      if (log)\n        fprintf(stderr, \"rotate top three of stack\\n\");\n      break;\n\n    case DW_OP_xderef:\n      // pop stack, dereference, push result\n      value = *sp--;\n      *sp = *((pint_t*)value);\n      if (log)\n        fprintf(stderr, \"x-dereference 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_abs:\n      svalue = (sint_t)*sp;\n      if (svalue < 0)\n        *sp = (pint_t)(-svalue);\n      if (log)\n        fprintf(stderr, \"abs\\n\");\n      break;\n\n    case DW_OP_and:\n      value = *sp--;\n      *sp &= value;\n      if (log)\n        fprintf(stderr, \"and\\n\");\n      break;\n\n    case DW_OP_div:\n      svalue = (sint_t)(*sp--);\n      svalue2 = (sint_t)*sp;\n      *sp = (pint_t)(svalue2 / svalue);\n      if (log)\n        fprintf(stderr, \"div\\n\");\n      break;\n\n    case DW_OP_minus:\n      value = *sp--;\n      *sp = *sp - value;\n      if (log)\n        fprintf(stderr, \"minus\\n\");\n      break;\n\n    case DW_OP_mod:\n      svalue = (sint_t)(*sp--);\n      svalue2 = (sint_t)*sp;\n      *sp = (pint_t)(svalue2 % svalue);\n      if (log)\n        fprintf(stderr, \"module\\n\");\n      break;\n\n    case DW_OP_mul:\n      svalue = (sint_t)(*sp--);\n      svalue2 = (sint_t)*sp;\n      *sp = (pint_t)(svalue2 * svalue);\n      if (log)\n        fprintf(stderr, \"mul\\n\");\n      break;\n\n    case DW_OP_neg:\n      *sp = 0 - *sp;\n      if (log)\n        fprintf(stderr, \"neg\\n\");\n      break;\n\n    case DW_OP_not:\n      svalue = (sint_t)(*sp);\n      *sp = (pint_t)(~svalue);\n      if (log)\n        fprintf(stderr, \"not\\n\");\n      break;\n\n    case DW_OP_or:\n      value = *sp--;\n      *sp |= value;\n      if (log)\n        fprintf(stderr, \"or\\n\");\n      break;\n\n    case DW_OP_plus:\n      value = *sp--;\n      *sp += value;\n      if (log)\n        fprintf(stderr, \"plus\\n\");\n      break;\n\n    case DW_OP_plus_uconst:\n      // pop stack, add uelb128 constant, push result\n      *sp += addressSpace.getULEB128(p, expressionEnd);\n      if (log)\n        fprintf(stderr, \"add constant\\n\");\n      break;\n\n    case DW_OP_shl:\n      value = *sp--;\n      *sp = *sp << value;\n      if (log)\n        fprintf(stderr, \"shift left\\n\");\n      break;\n\n    case DW_OP_shr:\n      value = *sp--;\n      *sp = *sp >> value;\n      if (log)\n        fprintf(stderr, \"shift left\\n\");\n      break;\n\n    case DW_OP_shra:\n      value = *sp--;\n      svalue = (sint_t)*sp;\n      *sp = (pint_t)(svalue >> value);\n      if (log)\n        fprintf(stderr, \"shift left arithmetric\\n\");\n      break;\n\n    case DW_OP_xor:\n      value = *sp--;\n      *sp ^= value;\n      if (log)\n        fprintf(stderr, \"xor\\n\");\n      break;\n\n    case DW_OP_skip:\n      svalue = (int16_t) addressSpace.get16(p);\n      p += 2;\n      p = (pint_t)((sint_t)p + svalue);\n      if (log)\n        fprintf(stderr, \"skip %\" PRIu64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_bra:\n      svalue = (int16_t) addressSpace.get16(p);\n      p += 2;\n      if (*sp--)\n        p = (pint_t)((sint_t)p + svalue);\n      if (log)\n        fprintf(stderr, \"bra %\" PRIu64 \"\\n\", (uint64_t)svalue);\n      break;\n\n    case DW_OP_eq:\n      value = *sp--;\n      *sp = (*sp == value);\n      if (log)\n        fprintf(stderr, \"eq\\n\");\n      break;\n\n    case DW_OP_ge:\n      value = *sp--;\n      *sp = (*sp >= value);\n      if (log)\n        fprintf(stderr, \"ge\\n\");\n      break;\n\n    case DW_OP_gt:\n      value = *sp--;\n      *sp = (*sp > value);\n      if (log)\n        fprintf(stderr, \"gt\\n\");\n      break;\n\n    case DW_OP_le:\n      value = *sp--;\n      *sp = (*sp <= value);\n      if (log)\n        fprintf(stderr, \"le\\n\");\n      break;\n\n    case DW_OP_lt:\n      value = *sp--;\n      *sp = (*sp < value);\n      if (log)\n        fprintf(stderr, \"lt\\n\");\n      break;\n\n    case DW_OP_ne:\n      value = *sp--;\n      *sp = (*sp != value);\n      if (log)\n        fprintf(stderr, \"ne\\n\");\n      break;\n\n    case DW_OP_lit0:\n    case DW_OP_lit1:\n    case DW_OP_lit2:\n    case DW_OP_lit3:\n    case DW_OP_lit4:\n    case DW_OP_lit5:\n    case DW_OP_lit6:\n    case DW_OP_lit7:\n    case DW_OP_lit8:\n    case DW_OP_lit9:\n    case DW_OP_lit10:\n    case DW_OP_lit11:\n    case DW_OP_lit12:\n    case DW_OP_lit13:\n    case DW_OP_lit14:\n    case DW_OP_lit15:\n    case DW_OP_lit16:\n    case DW_OP_lit17:\n    case DW_OP_lit18:\n    case DW_OP_lit19:\n    case DW_OP_lit20:\n    case DW_OP_lit21:\n    case DW_OP_lit22:\n    case DW_OP_lit23:\n    case DW_OP_lit24:\n    case DW_OP_lit25:\n    case DW_OP_lit26:\n    case DW_OP_lit27:\n    case DW_OP_lit28:\n    case DW_OP_lit29:\n    case DW_OP_lit30:\n    case DW_OP_lit31:\n      value = static_cast<pint_t>(opcode - DW_OP_lit0);\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"push literal 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_reg0:\n    case DW_OP_reg1:\n    case DW_OP_reg2:\n    case DW_OP_reg3:\n    case DW_OP_reg4:\n    case DW_OP_reg5:\n    case DW_OP_reg6:\n    case DW_OP_reg7:\n    case DW_OP_reg8:\n    case DW_OP_reg9:\n    case DW_OP_reg10:\n    case DW_OP_reg11:\n    case DW_OP_reg12:\n    case DW_OP_reg13:\n    case DW_OP_reg14:\n    case DW_OP_reg15:\n    case DW_OP_reg16:\n    case DW_OP_reg17:\n    case DW_OP_reg18:\n    case DW_OP_reg19:\n    case DW_OP_reg20:\n    case DW_OP_reg21:\n    case DW_OP_reg22:\n    case DW_OP_reg23:\n    case DW_OP_reg24:\n    case DW_OP_reg25:\n    case DW_OP_reg26:\n    case DW_OP_reg27:\n    case DW_OP_reg28:\n    case DW_OP_reg29:\n    case DW_OP_reg30:\n    case DW_OP_reg31:\n      reg = static_cast<uint32_t>(opcode - DW_OP_reg0);\n      *(++sp) = registers.getRegister((int)reg);\n      if (log)\n        fprintf(stderr, \"push reg %d\\n\", reg);\n      break;\n\n    case DW_OP_regx:\n      reg = static_cast<uint32_t>(addressSpace.getULEB128(p, expressionEnd));\n      *(++sp) = registers.getRegister((int)reg);\n      if (log)\n        fprintf(stderr, \"push reg %d + 0x%\" PRIx64 \"\\n\", reg, (uint64_t)svalue);\n      break;\n\n    case DW_OP_breg0:\n    case DW_OP_breg1:\n    case DW_OP_breg2:\n    case DW_OP_breg3:\n    case DW_OP_breg4:\n    case DW_OP_breg5:\n    case DW_OP_breg6:\n    case DW_OP_breg7:\n    case DW_OP_breg8:\n    case DW_OP_breg9:\n    case DW_OP_breg10:\n    case DW_OP_breg11:\n    case DW_OP_breg12:\n    case DW_OP_breg13:\n    case DW_OP_breg14:\n    case DW_OP_breg15:\n    case DW_OP_breg16:\n    case DW_OP_breg17:\n    case DW_OP_breg18:\n    case DW_OP_breg19:\n    case DW_OP_breg20:\n    case DW_OP_breg21:\n    case DW_OP_breg22:\n    case DW_OP_breg23:\n    case DW_OP_breg24:\n    case DW_OP_breg25:\n    case DW_OP_breg26:\n    case DW_OP_breg27:\n    case DW_OP_breg28:\n    case DW_OP_breg29:\n    case DW_OP_breg30:\n    case DW_OP_breg31:\n      reg = static_cast<uint32_t>(opcode - DW_OP_breg0);\n      svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd);\n      svalue += static_cast<sint_t>(registers.getRegister((int)reg));\n      *(++sp) = (pint_t)(svalue);\n      if (log)\n        fprintf(stderr, \"push reg %d + 0x%\" PRIx64 \"\\n\", reg, (uint64_t)svalue);\n      break;\n\n    case DW_OP_bregx:\n      reg = static_cast<uint32_t>(addressSpace.getULEB128(p, expressionEnd));\n      svalue = (sint_t)addressSpace.getSLEB128(p, expressionEnd);\n      svalue += static_cast<sint_t>(registers.getRegister((int)reg));\n      *(++sp) = (pint_t)(svalue);\n      if (log)\n        fprintf(stderr, \"push reg %d + 0x%\" PRIx64 \"\\n\", reg, (uint64_t)svalue);\n      break;\n\n    case DW_OP_fbreg:\n      _LIBUNWIND_ABORT(\"DW_OP_fbreg not implemented\");\n      break;\n\n    case DW_OP_piece:\n      _LIBUNWIND_ABORT(\"DW_OP_piece not implemented\");\n      break;\n\n    case DW_OP_deref_size:\n      // pop stack, dereference, push result\n      value = *sp--;\n      switch (addressSpace.get8(p++)) {\n      case 1:\n        value = addressSpace.get8(value);\n        break;\n      case 2:\n        value = addressSpace.get16(value);\n        break;\n      case 4:\n        value = addressSpace.get32(value);\n        break;\n      case 8:\n        value = (pint_t)addressSpace.get64(value);\n        break;\n      default:\n        _LIBUNWIND_ABORT(\"DW_OP_deref_size with bad size\");\n      }\n      *(++sp) = value;\n      if (log)\n        fprintf(stderr, \"sized dereference 0x%\" PRIx64 \"\\n\", (uint64_t)value);\n      break;\n\n    case DW_OP_xderef_size:\n    case DW_OP_nop:\n    case DW_OP_push_object_addres:\n    case DW_OP_call2:\n    case DW_OP_call4:\n    case DW_OP_call_ref:\n    default:\n      _LIBUNWIND_ABORT(\"dwarf opcode not implemented\");\n    }\n\n  }\n  if (log)\n    fprintf(stderr, \"expression evaluates to 0x%\" PRIx64 \"\\n\", (uint64_t)*sp);\n  return *sp;\n}\n\n\n\n} // namespace libunwind\n\n#endif // __DWARF_INSTRUCTIONS_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/DwarfParser.hpp",
    "content": "//===--------------------------- DwarfParser.hpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Parses DWARF CFIs (FDEs and CIEs).\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __DWARF_PARSER_HPP__\n#define __DWARF_PARSER_HPP__\n\n#include <inttypes.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <vector>\n\n#include \"libunwind.h\"\n#include \"dwarf2.h\"\n\n#include \"AddressSpace.hpp\"\n\nnamespace libunwind {\n\n/// CFI_Parser does basic parsing of a CFI (Call Frame Information) records.\n/// See Dwarf Spec for details:\n///    http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html\n///\ntemplate <typename A>\nclass CFI_Parser {\npublic:\n  typedef typename A::pint_t pint_t;\n\n  /// Information encoded in a CIE (Common Information Entry)\n  struct CIE_Info {\n    pint_t    cieStart;\n    pint_t    cieLength;\n    pint_t    cieInstructions;\n    uint8_t   pointerEncoding;\n    uint8_t   lsdaEncoding;\n    uint8_t   personalityEncoding;\n    uint8_t   personalityOffsetInCIE;\n    pint_t    personality;\n    uint32_t  codeAlignFactor;\n    int       dataAlignFactor;\n    bool      isSignalFrame;\n    bool      fdesHaveAugmentationData;\n    uint8_t   returnAddressRegister;\n  };\n\n  /// Information about an FDE (Frame Description Entry)\n  struct FDE_Info {\n    pint_t  fdeStart;\n    pint_t  fdeLength;\n    pint_t  fdeInstructions;\n    pint_t  pcStart;\n    pint_t  pcEnd;\n    pint_t  lsda;\n  };\n\n  enum {\n    kMaxRegisterNumber = 120\n  };\n  enum RegisterSavedWhere {\n    kRegisterUnused,\n    kRegisterInCFA,\n    kRegisterOffsetFromCFA,\n    kRegisterInRegister,\n    kRegisterAtExpression,\n    kRegisterIsExpression\n  };\n  struct RegisterLocation {\n    RegisterSavedWhere location;\n    int64_t value;\n  };\n  /// Information about a frame layout and registers saved determined\n  /// by \"running\" the dwarf FDE \"instructions\"\n  struct PrologInfo {\n    uint32_t          cfaRegister;\n    int32_t           cfaRegisterOffset;  // CFA = (cfaRegister)+cfaRegisterOffset\n    int64_t           cfaExpression;      // CFA = expression\n    uint32_t          spExtraArgSize;\n    uint32_t          codeOffsetAtStackDecrement;\n    bool              registersInOtherRegisters;\n    bool              sameValueUsed;\n    RegisterLocation  savedRegisters[kMaxRegisterNumber];\n  };\n\n  struct PrologInfoStackEntry {\n    PrologInfoStackEntry(PrologInfoStackEntry *n, const PrologInfo &i)\n        : next(n), info(i) {}\n    PrologInfoStackEntry *next;\n    PrologInfo info;\n  };\n\n  static bool findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart,\n                      uint32_t sectionLength, pint_t fdeHint, FDE_Info *fdeInfo,\n                      CIE_Info *cieInfo);\n  static const char *decodeFDE(A &addressSpace, pint_t fdeStart,\n                               FDE_Info *fdeInfo, CIE_Info *cieInfo);\n  static bool parseFDEInstructions(A &addressSpace, const FDE_Info &fdeInfo,\n                                   const CIE_Info &cieInfo, pint_t upToPC,\n                                   PrologInfo *results);\n\n  static const char *parseCIE(A &addressSpace, pint_t cie, CIE_Info *cieInfo);\n\nprivate:\n  static bool parseInstructions(A &addressSpace, pint_t instructions,\n                                pint_t instructionsEnd, const CIE_Info &cieInfo,\n                                pint_t pcoffset,\n                                PrologInfoStackEntry *&rememberStack,\n                                PrologInfo *results);\n};\n\n/// Parse a FDE into a CIE_Info and an FDE_Info\ntemplate <typename A>\nconst char *CFI_Parser<A>::decodeFDE(A &addressSpace, pint_t fdeStart,\n                                     FDE_Info *fdeInfo, CIE_Info *cieInfo) {\n  pint_t p = fdeStart;\n  pint_t cfiLength = (pint_t)addressSpace.get32(p);\n  p += 4;\n  if (cfiLength == 0xffffffff) {\n    // 0xffffffff means length is really next 8 bytes\n    cfiLength = (pint_t)addressSpace.get64(p);\n    p += 8;\n  }\n  if (cfiLength == 0)\n    return \"FDE has zero length\"; // end marker\n  uint32_t ciePointer = addressSpace.get32(p);\n  if (ciePointer == 0)\n    return \"FDE is really a CIE\"; // this is a CIE not an FDE\n  pint_t nextCFI = p + cfiLength;\n  pint_t cieStart = p - ciePointer;\n  const char *err = parseCIE(addressSpace, cieStart, cieInfo);\n  if (err != NULL)\n    return err;\n  p += 4;\n  // parse pc begin and range\n  pint_t pcStart =\n      addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding);\n  pint_t pcRange =\n      addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding & 0x0F);\n  // parse rest of info\n  fdeInfo->lsda = 0;\n  // check for augmentation length\n  if (cieInfo->fdesHaveAugmentationData) {\n    pint_t augLen = (pint_t)addressSpace.getULEB128(p, nextCFI);\n    pint_t endOfAug = p + augLen;\n    if (cieInfo->lsdaEncoding != DW_EH_PE_omit) {\n      // peek at value (without indirection).  Zero means no lsda\n      pint_t lsdaStart = p;\n      if (addressSpace.getEncodedP(p, nextCFI, cieInfo->lsdaEncoding & 0x0F) !=\n          0) {\n        // reset pointer and re-parse lsda address\n        p = lsdaStart;\n        fdeInfo->lsda =\n            addressSpace.getEncodedP(p, nextCFI, cieInfo->lsdaEncoding);\n      }\n    }\n    p = endOfAug;\n  }\n  fdeInfo->fdeStart = fdeStart;\n  fdeInfo->fdeLength = nextCFI - fdeStart;\n  fdeInfo->fdeInstructions = p;\n  fdeInfo->pcStart = pcStart;\n  fdeInfo->pcEnd = pcStart + pcRange;\n  return NULL; // success\n}\n\n/// Scan an eh_frame section to find an FDE for a pc\ntemplate <typename A>\nbool CFI_Parser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehSectionStart,\n                            uint32_t sectionLength, pint_t fdeHint,\n                            FDE_Info *fdeInfo, CIE_Info *cieInfo) {\n  //fprintf(stderr, \"findFDE(0x%llX)\\n\", (long long)pc);\n  pint_t p = (fdeHint != 0) ? fdeHint : ehSectionStart;\n  const pint_t ehSectionEnd = p + sectionLength;\n  while (p < ehSectionEnd) {\n    pint_t currentCFI = p;\n    //fprintf(stderr, \"findFDE() CFI at 0x%llX\\n\", (long long)p);\n    pint_t cfiLength = addressSpace.get32(p);\n    p += 4;\n    if (cfiLength == 0xffffffff) {\n      // 0xffffffff means length is really next 8 bytes\n      cfiLength = (pint_t)addressSpace.get64(p);\n      p += 8;\n    }\n    if (cfiLength == 0)\n      return false; // end marker\n    uint32_t id = addressSpace.get32(p);\n    if (id == 0) {\n      // skip over CIEs\n      p += cfiLength;\n    } else {\n      // process FDE to see if it covers pc\n      pint_t nextCFI = p + cfiLength;\n      uint32_t ciePointer = addressSpace.get32(p);\n      pint_t cieStart = p - ciePointer;\n      // validate pointer to CIE is within section\n      if ((ehSectionStart <= cieStart) && (cieStart < ehSectionEnd)) {\n        if (parseCIE(addressSpace, cieStart, cieInfo) == NULL) {\n          p += 4;\n          // parse pc begin and range\n          pint_t pcStart =\n              addressSpace.getEncodedP(p, nextCFI, cieInfo->pointerEncoding);\n          pint_t pcRange = addressSpace.getEncodedP(\n              p, nextCFI, cieInfo->pointerEncoding & 0x0F);\n          // test if pc is within the function this FDE covers\n          if ((pcStart < pc) && (pc <= pcStart + pcRange)) {\n            // parse rest of info\n            fdeInfo->lsda = 0;\n            // check for augmentation length\n            if (cieInfo->fdesHaveAugmentationData) {\n              pint_t augLen = (pint_t)addressSpace.getULEB128(p, nextCFI);\n              pint_t endOfAug = p + augLen;\n              if (cieInfo->lsdaEncoding != DW_EH_PE_omit) {\n                // peek at value (without indirection).  Zero means no lsda\n                pint_t lsdaStart = p;\n                if (addressSpace.getEncodedP(\n                        p, nextCFI, cieInfo->lsdaEncoding & 0x0F) != 0) {\n                  // reset pointer and re-parse lsda address\n                  p = lsdaStart;\n                  fdeInfo->lsda = addressSpace\n                      .getEncodedP(p, nextCFI, cieInfo->lsdaEncoding);\n                }\n              }\n              p = endOfAug;\n            }\n            fdeInfo->fdeStart = currentCFI;\n            fdeInfo->fdeLength = nextCFI - currentCFI;\n            fdeInfo->fdeInstructions = p;\n            fdeInfo->pcStart = pcStart;\n            fdeInfo->pcEnd = pcStart + pcRange;\n            return true;\n          } else {\n            // pc is not in begin/range, skip this FDE\n          }\n        } else {\n          // malformed CIE, now augmentation describing pc range encoding\n        }\n      } else {\n        // malformed FDE.  CIE is bad\n      }\n      p = nextCFI;\n    }\n  }\n  return false;\n}\n\n/// Extract info from a CIE\ntemplate <typename A>\nconst char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie,\n                                    CIE_Info *cieInfo) {\n  cieInfo->pointerEncoding = 0;\n  cieInfo->lsdaEncoding = DW_EH_PE_omit;\n  cieInfo->personalityEncoding = 0;\n  cieInfo->personalityOffsetInCIE = 0;\n  cieInfo->personality = 0;\n  cieInfo->codeAlignFactor = 0;\n  cieInfo->dataAlignFactor = 0;\n  cieInfo->isSignalFrame = false;\n  cieInfo->fdesHaveAugmentationData = false;\n  cieInfo->cieStart = cie;\n  pint_t p = cie;\n  pint_t cieLength = (pint_t)addressSpace.get32(p);\n  p += 4;\n  pint_t cieContentEnd = p + cieLength;\n  if (cieLength == 0xffffffff) {\n    // 0xffffffff means length is really next 8 bytes\n    cieLength = (pint_t)addressSpace.get64(p);\n    p += 8;\n    cieContentEnd = p + cieLength;\n  }\n  if (cieLength == 0)\n    return NULL;\n  // CIE ID is always 0\n  if (addressSpace.get32(p) != 0)\n    return \"CIE ID is not zero\";\n  p += 4;\n  // Version is always 1 or 3\n  uint8_t version = addressSpace.get8(p);\n  if ((version != 1) && (version != 3))\n    return \"CIE version is not 1 or 3\";\n  ++p;\n  // save start of augmentation string and find end\n  pint_t strStart = p;\n  while (addressSpace.get8(p) != 0)\n    ++p;\n  ++p;\n  // parse code aligment factor\n  cieInfo->codeAlignFactor = (uint32_t)addressSpace.getULEB128(p, cieContentEnd);\n  // parse data alignment factor\n  cieInfo->dataAlignFactor = (int)addressSpace.getSLEB128(p, cieContentEnd);\n  // parse return address register\n  uint64_t raReg = addressSpace.getULEB128(p, cieContentEnd);\n  assert(raReg < 255 && \"return address register too large\");\n  cieInfo->returnAddressRegister = (uint8_t)raReg;\n  // parse augmentation data based on augmentation string\n  const char *result = NULL;\n  if (addressSpace.get8(strStart) == 'z') {\n    // parse augmentation data length\n    addressSpace.getULEB128(p, cieContentEnd);\n    for (pint_t s = strStart; addressSpace.get8(s) != '\\0'; ++s) {\n      switch (addressSpace.get8(s)) {\n      case 'z':\n        cieInfo->fdesHaveAugmentationData = true;\n        break;\n      case 'P':\n        cieInfo->personalityEncoding = addressSpace.get8(p);\n        ++p;\n        cieInfo->personalityOffsetInCIE = (uint8_t)(p - cie);\n        cieInfo->personality = addressSpace\n            .getEncodedP(p, cieContentEnd, cieInfo->personalityEncoding);\n        break;\n      case 'L':\n        cieInfo->lsdaEncoding = addressSpace.get8(p);\n        ++p;\n        break;\n      case 'R':\n        cieInfo->pointerEncoding = addressSpace.get8(p);\n        ++p;\n        break;\n      case 'S':\n        cieInfo->isSignalFrame = true;\n        break;\n      default:\n        // ignore unknown letters\n        break;\n      }\n    }\n  }\n  cieInfo->cieLength = cieContentEnd - cieInfo->cieStart;\n  cieInfo->cieInstructions = p;\n  return result;\n}\n\n\n/// \"run\" the dwarf instructions and create the abstact PrologInfo for an FDE\ntemplate <typename A>\nbool CFI_Parser<A>::parseFDEInstructions(A &addressSpace,\n                                         const FDE_Info &fdeInfo,\n                                         const CIE_Info &cieInfo, pint_t upToPC,\n                                         PrologInfo *results) {\n  // clear results\n  memset(results, '\\0', sizeof(PrologInfo));\n  PrologInfoStackEntry *rememberStack = NULL;\n\n  // parse CIE then FDE instructions\n  return parseInstructions(addressSpace, cieInfo.cieInstructions,\n                           cieInfo.cieStart + cieInfo.cieLength, cieInfo,\n                           (pint_t)(-1), rememberStack, results) &&\n         parseInstructions(addressSpace, fdeInfo.fdeInstructions,\n                           fdeInfo.fdeStart + fdeInfo.fdeLength, cieInfo,\n                           upToPC - fdeInfo.pcStart, rememberStack, results);\n}\n\n/// \"run\" the dwarf instructions\ntemplate <typename A>\nbool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions,\n                                      pint_t instructionsEnd,\n                                      const CIE_Info &cieInfo, pint_t pcoffset,\n                                      PrologInfoStackEntry *&rememberStack,\n                                      PrologInfo *results) {\n  const bool logDwarf = false;\n  pint_t p = instructions;\n  pint_t codeOffset = 0;\n  PrologInfo initialState = *results;\n  if (logDwarf)\n    fprintf(stderr, \"parseInstructions(instructions=0x%0\" PRIx64 \")\\n\",\n            (uint64_t)instructionsEnd);\n\n  // see Dwarf Spec, section 6.4.2 for details on unwind opcodes\n  while ((p < instructionsEnd) && (codeOffset < pcoffset)) {\n    uint64_t reg;\n    uint64_t reg2;\n    int64_t offset;\n    uint64_t length;\n    uint8_t opcode = addressSpace.get8(p);\n    uint8_t operand;\n    PrologInfoStackEntry *entry;\n    ++p;\n    switch (opcode) {\n    case DW_CFA_nop:\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_nop\\n\");\n      break;\n    case DW_CFA_set_loc:\n      codeOffset =\n          addressSpace.getEncodedP(p, instructionsEnd, cieInfo.pointerEncoding);\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_set_loc\\n\");\n      break;\n    case DW_CFA_advance_loc1:\n      codeOffset += (addressSpace.get8(p) * cieInfo.codeAlignFactor);\n      p += 1;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_advance_loc1: new offset=%\" PRIu64 \"\\n\",\n                (uint64_t)codeOffset);\n      break;\n    case DW_CFA_advance_loc2:\n      codeOffset += (addressSpace.get16(p) * cieInfo.codeAlignFactor);\n      p += 2;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_advance_loc2: new offset=%\" PRIu64 \"\\n\",\n                (uint64_t)codeOffset);\n      break;\n    case DW_CFA_advance_loc4:\n      codeOffset += (addressSpace.get32(p) * cieInfo.codeAlignFactor);\n      p += 4;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_advance_loc4: new offset=%\" PRIu64 \"\\n\",\n                (uint64_t)codeOffset);\n      break;\n    case DW_CFA_offset_extended:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd)\n                                                  * cieInfo.dataAlignFactor;\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_offset_extended dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg].location = kRegisterInCFA;\n      results->savedRegisters[reg].value = offset;\n      if (logDwarf)\n        fprintf(stderr,\n                \"DW_CFA_offset_extended(reg=%\" PRIu64 \", offset=%\" PRId64 \")\\n\",\n                reg, offset);\n      break;\n    case DW_CFA_restore_extended:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      ;\n      if (reg > kMaxRegisterNumber) {\n        fprintf(\n            stderr,\n            \"malformed DW_CFA_restore_extended dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg] = initialState.savedRegisters[reg];\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_restore_extended(reg=%\" PRIu64 \")\\n\", reg);\n      break;\n    case DW_CFA_undefined:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_undefined dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg].location = kRegisterUnused;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_undefined(reg=%\" PRIu64 \")\\n\", reg);\n      break;\n    case DW_CFA_same_value:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_same_value dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      // <rdar://problem/8456377> DW_CFA_same_value unsupported\n      // \"same value\" means register was stored in frame, but its current\n      // value has not changed, so no need to restore from frame.\n      // We model this as if the register was never saved.\n      results->savedRegisters[reg].location = kRegisterUnused;\n      // set flag to disable conversion to compact unwind\n      results->sameValueUsed = true;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_same_value(reg=%\" PRIu64 \")\\n\", reg);\n      break;\n    case DW_CFA_register:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      reg2 = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_register dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      if (reg2 > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_register dwarf unwind, reg2 too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg].location = kRegisterInRegister;\n      results->savedRegisters[reg].value = (int64_t)reg2;\n      // set flag to disable conversion to compact unwind\n      results->registersInOtherRegisters = true;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_register(reg=%\" PRIu64 \", reg2=%\" PRIu64 \")\\n\",\n                reg, reg2);\n      break;\n    case DW_CFA_remember_state:\n      // avoid operator new, because that would be an upward dependency\n      entry = (PrologInfoStackEntry *)malloc(sizeof(PrologInfoStackEntry));\n      if (entry != NULL) {\n        entry->next = rememberStack;\n        entry->info = *results;\n        rememberStack = entry;\n      } else {\n        return false;\n      }\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_remember_state\\n\");\n      break;\n    case DW_CFA_restore_state:\n      if (rememberStack != NULL) {\n        PrologInfoStackEntry *top = rememberStack;\n        *results = top->info;\n        rememberStack = top->next;\n        free((char *)top);\n      } else {\n        return false;\n      }\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_restore_state\\n\");\n      break;\n    case DW_CFA_def_cfa:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr, \"malformed DW_CFA_def_cfa dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->cfaRegister = (uint32_t)reg;\n      results->cfaRegisterOffset = (int32_t)offset;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_def_cfa(reg=%\" PRIu64 \", offset=%\" PRIu64 \")\\n\",\n                reg, offset);\n      break;\n    case DW_CFA_def_cfa_register:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(\n            stderr,\n            \"malformed DW_CFA_def_cfa_register dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->cfaRegister = (uint32_t)reg;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_def_cfa_register(%\" PRIu64 \")\\n\", reg);\n      break;\n    case DW_CFA_def_cfa_offset:\n      results->cfaRegisterOffset = (int32_t)\n                                  addressSpace.getULEB128(p, instructionsEnd);\n      results->codeOffsetAtStackDecrement = (uint32_t)codeOffset;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_def_cfa_offset(%d)\\n\",\n                results->cfaRegisterOffset);\n      break;\n    case DW_CFA_def_cfa_expression:\n      results->cfaRegister = 0;\n      results->cfaExpression = (int64_t)p;\n      length = addressSpace.getULEB128(p, instructionsEnd);\n      p += length;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_def_cfa_expression(expression=0x%\" PRIx64\n                        \", length=%\" PRIu64 \")\\n\",\n                results->cfaExpression, length);\n      break;\n    case DW_CFA_expression:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_expression dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg].location = kRegisterAtExpression;\n      results->savedRegisters[reg].value = (int64_t)p;\n      length = addressSpace.getULEB128(p, instructionsEnd);\n      p += length;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_expression(reg=%\" PRIu64\n                        \", expression=0x%\" PRIx64 \", length=%\" PRIu64 \")\\n\",\n                reg, results->savedRegisters[reg].value, length);\n      break;\n    case DW_CFA_offset_extended_sf:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(\n            stderr,\n            \"malformed DW_CFA_offset_extended_sf dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      offset =\n          addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor;\n      results->savedRegisters[reg].location = kRegisterInCFA;\n      results->savedRegisters[reg].value = offset;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_offset_extended_sf(reg=%\" PRIu64\n                        \", offset=%\" PRId64 \")\\n\",\n                reg, offset);\n      break;\n    case DW_CFA_def_cfa_sf:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      offset =\n          addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor;\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_def_cfa_sf dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->cfaRegister = (uint32_t)reg;\n      results->cfaRegisterOffset = (int32_t)offset;\n      if (logDwarf)\n        fprintf(stderr,\n                \"DW_CFA_def_cfa_sf(reg=%\" PRIu64 \", offset=%\" PRId64 \")\\n\", reg,\n                offset);\n      break;\n    case DW_CFA_def_cfa_offset_sf:\n      results->cfaRegisterOffset = (int32_t)\n        (addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor);\n      results->codeOffsetAtStackDecrement = (uint32_t)codeOffset;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_def_cfa_offset_sf(%d)\\n\",\n                results->cfaRegisterOffset);\n      break;\n    case DW_CFA_val_offset:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd)\n                                                    * cieInfo.dataAlignFactor;\n      results->savedRegisters[reg].location = kRegisterOffsetFromCFA;\n      results->savedRegisters[reg].value = offset;\n      if (logDwarf)\n        fprintf(stderr,\n                \"DW_CFA_val_offset(reg=%\" PRIu64 \", offset=%\" PRId64 \"\\n\", reg,\n                offset);\n      break;\n    case DW_CFA_val_offset_sf:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_val_offset_sf dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      offset =\n          addressSpace.getSLEB128(p, instructionsEnd) * cieInfo.dataAlignFactor;\n      results->savedRegisters[reg].location = kRegisterOffsetFromCFA;\n      results->savedRegisters[reg].value = offset;\n      if (logDwarf)\n        fprintf(stderr,\n                \"DW_CFA_val_offset_sf(reg=%\" PRIu64 \", offset=%\" PRId64 \"\\n\",\n                reg, offset);\n      break;\n    case DW_CFA_val_expression:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr,\n                \"malformed DW_CFA_val_expression dwarf unwind, reg too big\\n\");\n        return false;\n      }\n      results->savedRegisters[reg].location = kRegisterIsExpression;\n      results->savedRegisters[reg].value = (int64_t)p;\n      length = addressSpace.getULEB128(p, instructionsEnd);\n      p += length;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_val_expression(reg=%\" PRIu64\n                        \", expression=0x%\" PRIx64 \", length=%\" PRIu64 \")\\n\",\n                reg, results->savedRegisters[reg].value, length);\n      break;\n    case DW_CFA_GNU_args_size:\n      length = addressSpace.getULEB128(p, instructionsEnd);\n      results->spExtraArgSize = (uint32_t)length;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_GNU_args_size(%\" PRIu64 \")\\n\", length);\n      break;\n    case DW_CFA_GNU_negative_offset_extended:\n      reg = addressSpace.getULEB128(p, instructionsEnd);\n      if (reg > kMaxRegisterNumber) {\n        fprintf(stderr, \"malformed DW_CFA_GNU_negative_offset_extended dwarf \"\n                        \"unwind, reg too big\\n\");\n        return false;\n      }\n      offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd)\n                                                    * cieInfo.dataAlignFactor;\n      results->savedRegisters[reg].location = kRegisterInCFA;\n      results->savedRegisters[reg].value = -offset;\n      if (logDwarf)\n        fprintf(stderr, \"DW_CFA_GNU_negative_offset_extended(%\" PRId64 \")\\n\",\n                offset);\n      break;\n    default:\n      operand = opcode & 0x3F;\n      switch (opcode & 0xC0) {\n      case DW_CFA_offset:\n        reg = operand;\n        offset = (int64_t)addressSpace.getULEB128(p, instructionsEnd)\n                                                    * cieInfo.dataAlignFactor;\n        results->savedRegisters[reg].location = kRegisterInCFA;\n        results->savedRegisters[reg].value = offset;\n        if (logDwarf)\n          fprintf(stderr, \"DW_CFA_offset(reg=%d, offset=%\" PRId64 \")\\n\",\n                  operand, offset);\n        break;\n      case DW_CFA_advance_loc:\n        codeOffset += operand * cieInfo.codeAlignFactor;\n        if (logDwarf)\n          fprintf(stderr, \"DW_CFA_advance_loc: new offset=%\" PRIu64 \"\\n\",\n                  (uint64_t)codeOffset);\n        break;\n      case DW_CFA_restore:\n        reg = operand;\n        results->savedRegisters[reg] = initialState.savedRegisters[reg];\n        if (logDwarf)\n          fprintf(stderr, \"DW_CFA_restore(reg=%\" PRIu64 \")\\n\", reg);\n        break;\n      default:\n        if (logDwarf)\n          fprintf(stderr, \"unknown CFA opcode 0x%02X\\n\", opcode);\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\n} // namespace libunwind\n\n#endif // __DWARF_PARSER_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/EHHeaderParser.hpp",
    "content": "//===------------------------- EHHeaderParser.hpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Parses ELF .eh_frame_hdr sections.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __EHHEADERPARSER_HPP__\n#define __EHHEADERPARSER_HPP__\n\n#include \"libunwind.h\"\n\n#include \"AddressSpace.hpp\"\n#include \"DwarfParser.hpp\"\n\nnamespace libunwind {\n\n/// \\brief EHHeaderParser does basic parsing of an ELF .eh_frame_hdr section.\n///\n/// See DWARF spec for details:\n///    http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html\n///\ntemplate <typename A> class EHHeaderParser {\npublic:\n  typedef typename A::pint_t pint_t;\n\n  /// Information encoded in the EH frame header.\n  struct EHHeaderInfo {\n    pint_t eh_frame_ptr;\n    size_t fde_count;\n    pint_t table;\n    uint8_t table_enc;\n  };\n\n  static void decodeEHHdr(A &addressSpace, pint_t ehHdrStart, pint_t ehHdrEnd,\n                          EHHeaderInfo &ehHdrInfo);\n  static bool findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart,\n                      uint32_t sectionLength,\n                      typename CFI_Parser<A>::FDE_Info *fdeInfo,\n                      typename CFI_Parser<A>::CIE_Info *cieInfo);\n\nprivate:\n  static bool decodeTableEntry(A &addressSpace, pint_t &tableEntry,\n                               pint_t ehHdrStart, pint_t ehHdrEnd,\n                               uint8_t tableEnc,\n                               typename CFI_Parser<A>::FDE_Info *fdeInfo,\n                               typename CFI_Parser<A>::CIE_Info *cieInfo);\n  static size_t getTableEntrySize(uint8_t tableEnc);\n};\n\ntemplate <typename A>\nvoid EHHeaderParser<A>::decodeEHHdr(A &addressSpace, pint_t ehHdrStart,\n                                    pint_t ehHdrEnd, EHHeaderInfo &ehHdrInfo) {\n  pint_t p = ehHdrStart;\n  uint8_t version = addressSpace.get8(p++);\n  if (version != 1)\n    _LIBUNWIND_ABORT(\"Unsupported .eh_frame_hdr version\");\n\n  uint8_t eh_frame_ptr_enc = addressSpace.get8(p++);\n  uint8_t fde_count_enc = addressSpace.get8(p++);\n  ehHdrInfo.table_enc = addressSpace.get8(p++);\n\n  ehHdrInfo.eh_frame_ptr =\n      addressSpace.getEncodedP(p, ehHdrEnd, eh_frame_ptr_enc, ehHdrStart);\n  ehHdrInfo.fde_count =\n      addressSpace.getEncodedP(p, ehHdrEnd, fde_count_enc, ehHdrStart);\n  ehHdrInfo.table = p;\n}\n\ntemplate <typename A>\nbool EHHeaderParser<A>::decodeTableEntry(\n    A &addressSpace, pint_t &tableEntry, pint_t ehHdrStart, pint_t ehHdrEnd,\n    uint8_t tableEnc, typename CFI_Parser<A>::FDE_Info *fdeInfo,\n    typename CFI_Parser<A>::CIE_Info *cieInfo) {\n  // Have to decode the whole FDE for the PC range anyway, so just throw away\n  // the PC start.\n  addressSpace.getEncodedP(tableEntry, ehHdrEnd, tableEnc, ehHdrStart);\n  pint_t fde =\n      addressSpace.getEncodedP(tableEntry, ehHdrEnd, tableEnc, ehHdrStart);\n  const char *message =\n      CFI_Parser<A>::decodeFDE(addressSpace, fde, fdeInfo, cieInfo);\n  if (message != NULL) {\n    _LIBUNWIND_DEBUG_LOG(\"EHHeaderParser::decodeTableEntry: bad fde: %s\\n\",\n                         message);\n    return false;\n  }\n\n  return true;\n}\n\ntemplate <typename A>\nbool EHHeaderParser<A>::findFDE(A &addressSpace, pint_t pc, pint_t ehHdrStart,\n                                uint32_t sectionLength,\n                                typename CFI_Parser<A>::FDE_Info *fdeInfo,\n                                typename CFI_Parser<A>::CIE_Info *cieInfo) {\n  pint_t ehHdrEnd = ehHdrStart + sectionLength;\n\n  EHHeaderParser<A>::EHHeaderInfo hdrInfo;\n  EHHeaderParser<A>::decodeEHHdr(addressSpace, ehHdrStart, ehHdrEnd, hdrInfo);\n\n  size_t tableEntrySize = getTableEntrySize(hdrInfo.table_enc);\n  pint_t tableEntry;\n\n  size_t low = 0;\n  for (size_t len = hdrInfo.fde_count; len > 1;) {\n    size_t mid = low + (len / 2);\n    tableEntry = hdrInfo.table + mid * tableEntrySize;\n    pint_t start = addressSpace.getEncodedP(tableEntry, ehHdrEnd,\n                                            hdrInfo.table_enc, ehHdrStart);\n\n    if (start == pc) {\n      low = mid;\n      break;\n    } else if (start < pc) {\n      low = mid;\n      len -= (len / 2);\n    } else {\n      len /= 2;\n    }\n  }\n\n  tableEntry = hdrInfo.table + low * tableEntrySize;\n  if (decodeTableEntry(addressSpace, tableEntry, ehHdrStart, ehHdrEnd,\n                       hdrInfo.table_enc, fdeInfo, cieInfo)) {\n    if (pc >= fdeInfo->pcStart && pc < fdeInfo->pcEnd)\n      return true;\n  }\n\n  return false;\n}\n\ntemplate <typename A>\nsize_t EHHeaderParser<A>::getTableEntrySize(uint8_t tableEnc) {\n  switch (tableEnc & 0x0f) {\n  case DW_EH_PE_sdata2:\n  case DW_EH_PE_udata2:\n    return 4;\n  case DW_EH_PE_sdata4:\n  case DW_EH_PE_udata4:\n    return 8;\n  case DW_EH_PE_sdata8:\n  case DW_EH_PE_udata8:\n    return 16;\n  case DW_EH_PE_sleb128:\n  case DW_EH_PE_uleb128:\n    _LIBUNWIND_ABORT(\"Can't binary search on variable length encoded data.\");\n  case DW_EH_PE_omit:\n    return 0;\n  default:\n    _LIBUNWIND_ABORT(\"Unknown DWARF encoding for search table.\");\n  }\n}\n\n}\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/Registers.hpp",
    "content": "//===----------------------------- Registers.hpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Models register sets for supported processors.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __REGISTERS_HPP__\n#define __REGISTERS_HPP__\n\n#include <stdint.h>\n#include <strings.h>\n#include <string.h>\n\n#include \"libunwind.h\"\n#include \"config.h\"\n\nnamespace libunwind {\n\n// For emulating 128-bit registers\nstruct v128 { uint32_t vec[4]; };\n\n\n/// Registers_x86 holds the register state of a thread in a 32-bit intel\n/// process.\nclass _LIBUNWIND_HIDDEN Registers_x86 {\npublic:\n  Registers_x86();\n  Registers_x86(const void *registers);\n\n  bool        validRegister(int num) const;\n  uint32_t    getRegister(int num) const;\n  void        setRegister(int num, uint32_t value);\n  bool        validFloatRegister(int) const { return false; }\n  double      getFloatRegister(int num) const;\n  void        setFloatRegister(int num, double value);\n  bool        validVectorRegister(int) const { return false; }\n  v128        getVectorRegister(int num) const;\n  void        setVectorRegister(int num, v128 value);\n  const char *getRegisterName(int num);\n  void        jumpto();\n  static int  lastDwarfRegNum() { return 8; }\n\n  uint32_t  getSP() const          { return _registers.__esp; }\n  void      setSP(uint32_t value)  { _registers.__esp = value; }\n  uint32_t  getIP() const          { return _registers.__eip; }\n  void      setIP(uint32_t value)  { _registers.__eip = value; }\n  uint32_t  getEBP() const         { return _registers.__ebp; }\n  void      setEBP(uint32_t value) { _registers.__ebp = value; }\n  uint32_t  getEBX() const         { return _registers.__ebx; }\n  void      setEBX(uint32_t value) { _registers.__ebx = value; }\n  uint32_t  getECX() const         { return _registers.__ecx; }\n  void      setECX(uint32_t value) { _registers.__ecx = value; }\n  uint32_t  getEDX() const         { return _registers.__edx; }\n  void      setEDX(uint32_t value) { _registers.__edx = value; }\n  uint32_t  getESI() const         { return _registers.__esi; }\n  void      setESI(uint32_t value) { _registers.__esi = value; }\n  uint32_t  getEDI() const         { return _registers.__edi; }\n  void      setEDI(uint32_t value) { _registers.__edi = value; }\n\nprivate:\n  struct GPRs {\n    unsigned int __eax;\n    unsigned int __ebx;\n    unsigned int __ecx;\n    unsigned int __edx;\n    unsigned int __edi;\n    unsigned int __esi;\n    unsigned int __ebp;\n    unsigned int __esp;\n    unsigned int __ss;\n    unsigned int __eflags;\n    unsigned int __eip;\n    unsigned int __cs;\n    unsigned int __ds;\n    unsigned int __es;\n    unsigned int __fs;\n    unsigned int __gs;\n  };\n\n  GPRs _registers;\n};\n\ninline Registers_x86::Registers_x86(const void *registers) {\n  static_assert(sizeof(Registers_x86) < sizeof(unw_context_t),\n                    \"x86 registers do not fit into unw_context_t\");\n  memcpy(&_registers, registers, sizeof(_registers));\n}\n\ninline Registers_x86::Registers_x86() {\n  memset(&_registers, 0, sizeof(_registers));\n}\n\ninline bool Registers_x86::validRegister(int regNum) const {\n  if (regNum == UNW_REG_IP)\n    return true;\n  if (regNum == UNW_REG_SP)\n    return true;\n  if (regNum < 0)\n    return false;\n  if (regNum > 7)\n    return false;\n  return true;\n}\n\ninline uint32_t Registers_x86::getRegister(int regNum) const {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return _registers.__eip;\n  case UNW_REG_SP:\n    return _registers.__esp;\n  case UNW_X86_EAX:\n    return _registers.__eax;\n  case UNW_X86_ECX:\n    return _registers.__ecx;\n  case UNW_X86_EDX:\n    return _registers.__edx;\n  case UNW_X86_EBX:\n    return _registers.__ebx;\n  case UNW_X86_EBP:\n    return _registers.__ebp;\n  case UNW_X86_ESP:\n    return _registers.__esp;\n  case UNW_X86_ESI:\n    return _registers.__esi;\n  case UNW_X86_EDI:\n    return _registers.__edi;\n  }\n  _LIBUNWIND_ABORT(\"unsupported x86 register\");\n}\n\ninline void Registers_x86::setRegister(int regNum, uint32_t value) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    _registers.__eip = value;\n    return;\n  case UNW_REG_SP:\n    _registers.__esp = value;\n    return;\n  case UNW_X86_EAX:\n    _registers.__eax = value;\n    return;\n  case UNW_X86_ECX:\n    _registers.__ecx = value;\n    return;\n  case UNW_X86_EDX:\n    _registers.__edx = value;\n    return;\n  case UNW_X86_EBX:\n    _registers.__ebx = value;\n    return;\n  case UNW_X86_EBP:\n    _registers.__ebp = value;\n    return;\n  case UNW_X86_ESP:\n    _registers.__esp = value;\n    return;\n  case UNW_X86_ESI:\n    _registers.__esi = value;\n    return;\n  case UNW_X86_EDI:\n    _registers.__edi = value;\n    return;\n  }\n  _LIBUNWIND_ABORT(\"unsupported x86 register\");\n}\n\ninline const char *Registers_x86::getRegisterName(int regNum) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return \"ip\";\n  case UNW_REG_SP:\n    return \"esp\";\n  case UNW_X86_EAX:\n    return \"eax\";\n  case UNW_X86_ECX:\n    return \"ecx\";\n  case UNW_X86_EDX:\n    return \"edx\";\n  case UNW_X86_EBX:\n    return \"ebx\";\n  case UNW_X86_EBP:\n    return \"ebp\";\n  case UNW_X86_ESP:\n    return \"esp\";\n  case UNW_X86_ESI:\n    return \"esi\";\n  case UNW_X86_EDI:\n    return \"edi\";\n  default:\n    return \"unknown register\";\n  }\n}\n\ninline double Registers_x86::getFloatRegister(int) const {\n  _LIBUNWIND_ABORT(\"no x86 float registers\");\n}\n\ninline void Registers_x86::setFloatRegister(int, double) {\n  _LIBUNWIND_ABORT(\"no x86 float registers\");\n}\n\ninline v128 Registers_x86::getVectorRegister(int) const {\n  _LIBUNWIND_ABORT(\"no x86 vector registers\");\n}\n\ninline void Registers_x86::setVectorRegister(int, v128) {\n  _LIBUNWIND_ABORT(\"no x86 vector registers\");\n}\n\n\n/// Registers_x86_64  holds the register state of a thread in a 64-bit intel\n/// process.\nclass _LIBUNWIND_HIDDEN Registers_x86_64 {\npublic:\n  Registers_x86_64();\n  Registers_x86_64(const void *registers);\n\n  bool        validRegister(int num) const;\n  uint64_t    getRegister(int num) const;\n  void        setRegister(int num, uint64_t value);\n  bool        validFloatRegister(int) const { return false; }\n  double      getFloatRegister(int num) const;\n  void        setFloatRegister(int num, double value);\n  bool        validVectorRegister(int) const { return false; }\n  v128        getVectorRegister(int num) const;\n  void        setVectorRegister(int num, v128 value);\n  const char *getRegisterName(int num);\n  void        jumpto();\n  static int  lastDwarfRegNum() { return 16; }\n\n  uint64_t  getSP() const          { return _registers.__rsp; }\n  void      setSP(uint64_t value)  { _registers.__rsp = value; }\n  uint64_t  getIP() const          { return _registers.__rip; }\n  void      setIP(uint64_t value)  { _registers.__rip = value; }\n  uint64_t  getRBP() const         { return _registers.__rbp; }\n  void      setRBP(uint64_t value) { _registers.__rbp = value; }\n  uint64_t  getRBX() const         { return _registers.__rbx; }\n  void      setRBX(uint64_t value) { _registers.__rbx = value; }\n  uint64_t  getR12() const         { return _registers.__r12; }\n  void      setR12(uint64_t value) { _registers.__r12 = value; }\n  uint64_t  getR13() const         { return _registers.__r13; }\n  void      setR13(uint64_t value) { _registers.__r13 = value; }\n  uint64_t  getR14() const         { return _registers.__r14; }\n  void      setR14(uint64_t value) { _registers.__r14 = value; }\n  uint64_t  getR15() const         { return _registers.__r15; }\n  void      setR15(uint64_t value) { _registers.__r15 = value; }\n\nprivate:\n  struct GPRs {\n    uint64_t __rax;\n    uint64_t __rbx;\n    uint64_t __rcx;\n    uint64_t __rdx;\n    uint64_t __rdi;\n    uint64_t __rsi;\n    uint64_t __rbp;\n    uint64_t __rsp;\n    uint64_t __r8;\n    uint64_t __r9;\n    uint64_t __r10;\n    uint64_t __r11;\n    uint64_t __r12;\n    uint64_t __r13;\n    uint64_t __r14;\n    uint64_t __r15;\n    uint64_t __rip;\n    uint64_t __rflags;\n    uint64_t __cs;\n    uint64_t __fs;\n    uint64_t __gs;\n  };\n  GPRs _registers;\n};\n\ninline Registers_x86_64::Registers_x86_64(const void *registers) {\n  static_assert(sizeof(Registers_x86_64) < sizeof(unw_context_t),\n                    \"x86_64 registers do not fit into unw_context_t\");\n  memcpy(&_registers, registers, sizeof(_registers));\n}\n\ninline Registers_x86_64::Registers_x86_64() {\n  memset(&_registers, 0, sizeof(_registers));\n}\n\ninline bool Registers_x86_64::validRegister(int regNum) const {\n  if (regNum == UNW_REG_IP)\n    return true;\n  if (regNum == UNW_REG_SP)\n    return true;\n  if (regNum < 0)\n    return false;\n  if (regNum > 15)\n    return false;\n  return true;\n}\n\ninline uint64_t Registers_x86_64::getRegister(int regNum) const {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return _registers.__rip;\n  case UNW_REG_SP:\n    return _registers.__rsp;\n  case UNW_X86_64_RAX:\n    return _registers.__rax;\n  case UNW_X86_64_RDX:\n    return _registers.__rdx;\n  case UNW_X86_64_RCX:\n    return _registers.__rcx;\n  case UNW_X86_64_RBX:\n    return _registers.__rbx;\n  case UNW_X86_64_RSI:\n    return _registers.__rsi;\n  case UNW_X86_64_RDI:\n    return _registers.__rdi;\n  case UNW_X86_64_RBP:\n    return _registers.__rbp;\n  case UNW_X86_64_RSP:\n    return _registers.__rsp;\n  case UNW_X86_64_R8:\n    return _registers.__r8;\n  case UNW_X86_64_R9:\n    return _registers.__r9;\n  case UNW_X86_64_R10:\n    return _registers.__r10;\n  case UNW_X86_64_R11:\n    return _registers.__r11;\n  case UNW_X86_64_R12:\n    return _registers.__r12;\n  case UNW_X86_64_R13:\n    return _registers.__r13;\n  case UNW_X86_64_R14:\n    return _registers.__r14;\n  case UNW_X86_64_R15:\n    return _registers.__r15;\n  }\n  _LIBUNWIND_ABORT(\"unsupported x86_64 register\");\n}\n\ninline void Registers_x86_64::setRegister(int regNum, uint64_t value) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    _registers.__rip = value;\n    return;\n  case UNW_REG_SP:\n    _registers.__rsp = value;\n    return;\n  case UNW_X86_64_RAX:\n    _registers.__rax = value;\n    return;\n  case UNW_X86_64_RDX:\n    _registers.__rdx = value;\n    return;\n  case UNW_X86_64_RCX:\n    _registers.__rcx = value;\n    return;\n  case UNW_X86_64_RBX:\n    _registers.__rbx = value;\n    return;\n  case UNW_X86_64_RSI:\n    _registers.__rsi = value;\n    return;\n  case UNW_X86_64_RDI:\n    _registers.__rdi = value;\n    return;\n  case UNW_X86_64_RBP:\n    _registers.__rbp = value;\n    return;\n  case UNW_X86_64_RSP:\n    _registers.__rsp = value;\n    return;\n  case UNW_X86_64_R8:\n    _registers.__r8 = value;\n    return;\n  case UNW_X86_64_R9:\n    _registers.__r9 = value;\n    return;\n  case UNW_X86_64_R10:\n    _registers.__r10 = value;\n    return;\n  case UNW_X86_64_R11:\n    _registers.__r11 = value;\n    return;\n  case UNW_X86_64_R12:\n    _registers.__r12 = value;\n    return;\n  case UNW_X86_64_R13:\n    _registers.__r13 = value;\n    return;\n  case UNW_X86_64_R14:\n    _registers.__r14 = value;\n    return;\n  case UNW_X86_64_R15:\n    _registers.__r15 = value;\n    return;\n  }\n  _LIBUNWIND_ABORT(\"unsupported x86_64 register\");\n}\n\ninline const char *Registers_x86_64::getRegisterName(int regNum) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return \"rip\";\n  case UNW_REG_SP:\n    return \"rsp\";\n  case UNW_X86_64_RAX:\n    return \"rax\";\n  case UNW_X86_64_RDX:\n    return \"rdx\";\n  case UNW_X86_64_RCX:\n    return \"rcx\";\n  case UNW_X86_64_RBX:\n    return \"rbx\";\n  case UNW_X86_64_RSI:\n    return \"rsi\";\n  case UNW_X86_64_RDI:\n    return \"rdi\";\n  case UNW_X86_64_RBP:\n    return \"rbp\";\n  case UNW_X86_64_RSP:\n    return \"rsp\";\n  case UNW_X86_64_R8:\n    return \"r8\";\n  case UNW_X86_64_R9:\n    return \"r9\";\n  case UNW_X86_64_R10:\n    return \"r10\";\n  case UNW_X86_64_R11:\n    return \"r11\";\n  case UNW_X86_64_R12:\n    return \"r12\";\n  case UNW_X86_64_R13:\n    return \"r13\";\n  case UNW_X86_64_R14:\n    return \"r14\";\n  case UNW_X86_64_R15:\n    return \"r15\";\n  default:\n    return \"unknown register\";\n  }\n}\n\ninline double Registers_x86_64::getFloatRegister(int) const {\n  _LIBUNWIND_ABORT(\"no x86_64 float registers\");\n}\n\ninline void Registers_x86_64::setFloatRegister(int, double) {\n  _LIBUNWIND_ABORT(\"no x86_64 float registers\");\n}\n\ninline v128 Registers_x86_64::getVectorRegister(int) const {\n  _LIBUNWIND_ABORT(\"no x86_64 vector registers\");\n}\n\ninline void Registers_x86_64::setVectorRegister(int, v128) {\n  _LIBUNWIND_ABORT(\"no x86_64 vector registers\");\n}\n\n\n/// Registers_ppc holds the register state of a thread in a 32-bit PowerPC\n/// process.\nclass _LIBUNWIND_HIDDEN Registers_ppc {\npublic:\n  Registers_ppc();\n  Registers_ppc(const void *registers);\n\n  bool        validRegister(int num) const;\n  uint32_t    getRegister(int num) const;\n  void        setRegister(int num, uint32_t value);\n  bool        validFloatRegister(int num) const;\n  double      getFloatRegister(int num) const;\n  void        setFloatRegister(int num, double value);\n  bool        validVectorRegister(int num) const;\n  v128        getVectorRegister(int num) const;\n  void        setVectorRegister(int num, v128 value);\n  const char *getRegisterName(int num);\n  void        jumpto();\n  static int  lastDwarfRegNum() { return 112; }\n\n  uint64_t  getSP() const         { return _registers.__r1; }\n  void      setSP(uint32_t value) { _registers.__r1 = value; }\n  uint64_t  getIP() const         { return _registers.__srr0; }\n  void      setIP(uint32_t value) { _registers.__srr0 = value; }\n\nprivate:\n  struct ppc_thread_state_t {\n    unsigned int __srr0; /* Instruction address register (PC) */\n    unsigned int __srr1; /* Machine state register (supervisor) */\n    unsigned int __r0;\n    unsigned int __r1;\n    unsigned int __r2;\n    unsigned int __r3;\n    unsigned int __r4;\n    unsigned int __r5;\n    unsigned int __r6;\n    unsigned int __r7;\n    unsigned int __r8;\n    unsigned int __r9;\n    unsigned int __r10;\n    unsigned int __r11;\n    unsigned int __r12;\n    unsigned int __r13;\n    unsigned int __r14;\n    unsigned int __r15;\n    unsigned int __r16;\n    unsigned int __r17;\n    unsigned int __r18;\n    unsigned int __r19;\n    unsigned int __r20;\n    unsigned int __r21;\n    unsigned int __r22;\n    unsigned int __r23;\n    unsigned int __r24;\n    unsigned int __r25;\n    unsigned int __r26;\n    unsigned int __r27;\n    unsigned int __r28;\n    unsigned int __r29;\n    unsigned int __r30;\n    unsigned int __r31;\n    unsigned int __cr;     /* Condition register */\n    unsigned int __xer;    /* User's integer exception register */\n    unsigned int __lr;     /* Link register */\n    unsigned int __ctr;    /* Count register */\n    unsigned int __mq;     /* MQ register (601 only) */\n    unsigned int __vrsave; /* Vector Save Register */\n  };\n\n  struct ppc_float_state_t {\n    double __fpregs[32];\n\n    unsigned int __fpscr_pad; /* fpscr is 64 bits, 32 bits of rubbish */\n    unsigned int __fpscr;     /* floating point status register */\n  };\n\n  ppc_thread_state_t _registers;\n  ppc_float_state_t  _floatRegisters;\n  v128               _vectorRegisters[32]; // offset 424\n};\n\ninline Registers_ppc::Registers_ppc(const void *registers) {\n  static_assert(sizeof(Registers_ppc) < sizeof(unw_context_t),\n                    \"ppc registers do not fit into unw_context_t\");\n  memcpy(&_registers, static_cast<const uint8_t *>(registers),\n         sizeof(_registers));\n  static_assert(sizeof(ppc_thread_state_t) == 160,\n                \"expected float register offset to be 160\");\n  memcpy(&_floatRegisters,\n         static_cast<const uint8_t *>(registers) + sizeof(ppc_thread_state_t),\n         sizeof(_floatRegisters));\n  static_assert(sizeof(ppc_thread_state_t) + sizeof(ppc_float_state_t) == 424,\n                \"expected vector register offset to be 424 bytes\");\n  memcpy(_vectorRegisters,\n         static_cast<const uint8_t *>(registers) + sizeof(ppc_thread_state_t) +\n             sizeof(ppc_float_state_t),\n         sizeof(_vectorRegisters));\n}\n\ninline Registers_ppc::Registers_ppc() {\n  memset(&_registers, 0, sizeof(_registers));\n  memset(&_floatRegisters, 0, sizeof(_floatRegisters));\n  memset(&_vectorRegisters, 0, sizeof(_vectorRegisters));\n}\n\ninline bool Registers_ppc::validRegister(int regNum) const {\n  if (regNum == UNW_REG_IP)\n    return true;\n  if (regNum == UNW_REG_SP)\n    return true;\n  if (regNum == UNW_PPC_VRSAVE)\n    return true;\n  if (regNum < 0)\n    return false;\n  if (regNum <= UNW_PPC_R31)\n    return true;\n  if (regNum == UNW_PPC_MQ)\n    return true;\n  if (regNum == UNW_PPC_LR)\n    return true;\n  if (regNum == UNW_PPC_CTR)\n    return true;\n  if ((UNW_PPC_CR0 <= regNum) && (regNum <= UNW_PPC_CR7))\n    return true;\n  return false;\n}\n\ninline uint32_t Registers_ppc::getRegister(int regNum) const {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return _registers.__srr0;\n  case UNW_REG_SP:\n    return _registers.__r1;\n  case UNW_PPC_R0:\n    return _registers.__r0;\n  case UNW_PPC_R1:\n    return _registers.__r1;\n  case UNW_PPC_R2:\n    return _registers.__r2;\n  case UNW_PPC_R3:\n    return _registers.__r3;\n  case UNW_PPC_R4:\n    return _registers.__r4;\n  case UNW_PPC_R5:\n    return _registers.__r5;\n  case UNW_PPC_R6:\n    return _registers.__r6;\n  case UNW_PPC_R7:\n    return _registers.__r7;\n  case UNW_PPC_R8:\n    return _registers.__r8;\n  case UNW_PPC_R9:\n    return _registers.__r9;\n  case UNW_PPC_R10:\n    return _registers.__r10;\n  case UNW_PPC_R11:\n    return _registers.__r11;\n  case UNW_PPC_R12:\n    return _registers.__r12;\n  case UNW_PPC_R13:\n    return _registers.__r13;\n  case UNW_PPC_R14:\n    return _registers.__r14;\n  case UNW_PPC_R15:\n    return _registers.__r15;\n  case UNW_PPC_R16:\n    return _registers.__r16;\n  case UNW_PPC_R17:\n    return _registers.__r17;\n  case UNW_PPC_R18:\n    return _registers.__r18;\n  case UNW_PPC_R19:\n    return _registers.__r19;\n  case UNW_PPC_R20:\n    return _registers.__r20;\n  case UNW_PPC_R21:\n    return _registers.__r21;\n  case UNW_PPC_R22:\n    return _registers.__r22;\n  case UNW_PPC_R23:\n    return _registers.__r23;\n  case UNW_PPC_R24:\n    return _registers.__r24;\n  case UNW_PPC_R25:\n    return _registers.__r25;\n  case UNW_PPC_R26:\n    return _registers.__r26;\n  case UNW_PPC_R27:\n    return _registers.__r27;\n  case UNW_PPC_R28:\n    return _registers.__r28;\n  case UNW_PPC_R29:\n    return _registers.__r29;\n  case UNW_PPC_R30:\n    return _registers.__r30;\n  case UNW_PPC_R31:\n    return _registers.__r31;\n  case UNW_PPC_LR:\n    return _registers.__lr;\n  case UNW_PPC_CR0:\n    return (_registers.__cr & 0xF0000000);\n  case UNW_PPC_CR1:\n    return (_registers.__cr & 0x0F000000);\n  case UNW_PPC_CR2:\n    return (_registers.__cr & 0x00F00000);\n  case UNW_PPC_CR3:\n    return (_registers.__cr & 0x000F0000);\n  case UNW_PPC_CR4:\n    return (_registers.__cr & 0x0000F000);\n  case UNW_PPC_CR5:\n    return (_registers.__cr & 0x00000F00);\n  case UNW_PPC_CR6:\n    return (_registers.__cr & 0x000000F0);\n  case UNW_PPC_CR7:\n    return (_registers.__cr & 0x0000000F);\n  case UNW_PPC_VRSAVE:\n    return _registers.__vrsave;\n  }\n  _LIBUNWIND_ABORT(\"unsupported ppc register\");\n}\n\ninline void Registers_ppc::setRegister(int regNum, uint32_t value) {\n  //fprintf(stderr, \"Registers_ppc::setRegister(%d, 0x%08X)\\n\", regNum, value);\n  switch (regNum) {\n  case UNW_REG_IP:\n    _registers.__srr0 = value;\n    return;\n  case UNW_REG_SP:\n    _registers.__r1 = value;\n    return;\n  case UNW_PPC_R0:\n    _registers.__r0 = value;\n    return;\n  case UNW_PPC_R1:\n    _registers.__r1 = value;\n    return;\n  case UNW_PPC_R2:\n    _registers.__r2 = value;\n    return;\n  case UNW_PPC_R3:\n    _registers.__r3 = value;\n    return;\n  case UNW_PPC_R4:\n    _registers.__r4 = value;\n    return;\n  case UNW_PPC_R5:\n    _registers.__r5 = value;\n    return;\n  case UNW_PPC_R6:\n    _registers.__r6 = value;\n    return;\n  case UNW_PPC_R7:\n    _registers.__r7 = value;\n    return;\n  case UNW_PPC_R8:\n    _registers.__r8 = value;\n    return;\n  case UNW_PPC_R9:\n    _registers.__r9 = value;\n    return;\n  case UNW_PPC_R10:\n    _registers.__r10 = value;\n    return;\n  case UNW_PPC_R11:\n    _registers.__r11 = value;\n    return;\n  case UNW_PPC_R12:\n    _registers.__r12 = value;\n    return;\n  case UNW_PPC_R13:\n    _registers.__r13 = value;\n    return;\n  case UNW_PPC_R14:\n    _registers.__r14 = value;\n    return;\n  case UNW_PPC_R15:\n    _registers.__r15 = value;\n    return;\n  case UNW_PPC_R16:\n    _registers.__r16 = value;\n    return;\n  case UNW_PPC_R17:\n    _registers.__r17 = value;\n    return;\n  case UNW_PPC_R18:\n    _registers.__r18 = value;\n    return;\n  case UNW_PPC_R19:\n    _registers.__r19 = value;\n    return;\n  case UNW_PPC_R20:\n    _registers.__r20 = value;\n    return;\n  case UNW_PPC_R21:\n    _registers.__r21 = value;\n    return;\n  case UNW_PPC_R22:\n    _registers.__r22 = value;\n    return;\n  case UNW_PPC_R23:\n    _registers.__r23 = value;\n    return;\n  case UNW_PPC_R24:\n    _registers.__r24 = value;\n    return;\n  case UNW_PPC_R25:\n    _registers.__r25 = value;\n    return;\n  case UNW_PPC_R26:\n    _registers.__r26 = value;\n    return;\n  case UNW_PPC_R27:\n    _registers.__r27 = value;\n    return;\n  case UNW_PPC_R28:\n    _registers.__r28 = value;\n    return;\n  case UNW_PPC_R29:\n    _registers.__r29 = value;\n    return;\n  case UNW_PPC_R30:\n    _registers.__r30 = value;\n    return;\n  case UNW_PPC_R31:\n    _registers.__r31 = value;\n    return;\n  case UNW_PPC_MQ:\n    _registers.__mq = value;\n    return;\n  case UNW_PPC_LR:\n    _registers.__lr = value;\n    return;\n  case UNW_PPC_CTR:\n    _registers.__ctr = value;\n    return;\n  case UNW_PPC_CR0:\n    _registers.__cr &= 0x0FFFFFFF;\n    _registers.__cr |= (value & 0xF0000000);\n    return;\n  case UNW_PPC_CR1:\n    _registers.__cr &= 0xF0FFFFFF;\n    _registers.__cr |= (value & 0x0F000000);\n    return;\n  case UNW_PPC_CR2:\n    _registers.__cr &= 0xFF0FFFFF;\n    _registers.__cr |= (value & 0x00F00000);\n    return;\n  case UNW_PPC_CR3:\n    _registers.__cr &= 0xFFF0FFFF;\n    _registers.__cr |= (value & 0x000F0000);\n    return;\n  case UNW_PPC_CR4:\n    _registers.__cr &= 0xFFFF0FFF;\n    _registers.__cr |= (value & 0x0000F000);\n    return;\n  case UNW_PPC_CR5:\n    _registers.__cr &= 0xFFFFF0FF;\n    _registers.__cr |= (value & 0x00000F00);\n    return;\n  case UNW_PPC_CR6:\n    _registers.__cr &= 0xFFFFFF0F;\n    _registers.__cr |= (value & 0x000000F0);\n    return;\n  case UNW_PPC_CR7:\n    _registers.__cr &= 0xFFFFFFF0;\n    _registers.__cr |= (value & 0x0000000F);\n    return;\n  case UNW_PPC_VRSAVE:\n    _registers.__vrsave = value;\n    return;\n    // not saved\n    return;\n  case UNW_PPC_XER:\n    _registers.__xer = value;\n    return;\n  case UNW_PPC_AP:\n  case UNW_PPC_VSCR:\n  case UNW_PPC_SPEFSCR:\n    // not saved\n    return;\n  }\n  _LIBUNWIND_ABORT(\"unsupported ppc register\");\n}\n\ninline bool Registers_ppc::validFloatRegister(int regNum) const {\n  if (regNum < UNW_PPC_F0)\n    return false;\n  if (regNum > UNW_PPC_F31)\n    return false;\n  return true;\n}\n\ninline double Registers_ppc::getFloatRegister(int regNum) const {\n  assert(validFloatRegister(regNum));\n  return _floatRegisters.__fpregs[regNum - UNW_PPC_F0];\n}\n\ninline void Registers_ppc::setFloatRegister(int regNum, double value) {\n  assert(validFloatRegister(regNum));\n  _floatRegisters.__fpregs[regNum - UNW_PPC_F0] = value;\n}\n\ninline bool Registers_ppc::validVectorRegister(int regNum) const {\n  if (regNum < UNW_PPC_V0)\n    return false;\n  if (regNum > UNW_PPC_V31)\n    return false;\n  return true;\n}\n\ninline v128 Registers_ppc::getVectorRegister(int regNum) const {\n  assert(validVectorRegister(regNum));\n  v128 result = _vectorRegisters[regNum - UNW_PPC_V0];\n  return result;\n}\n\ninline void Registers_ppc::setVectorRegister(int regNum, v128 value) {\n  assert(validVectorRegister(regNum));\n  _vectorRegisters[regNum - UNW_PPC_V0] = value;\n}\n\ninline const char *Registers_ppc::getRegisterName(int regNum) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return \"ip\";\n  case UNW_REG_SP:\n    return \"sp\";\n  case UNW_PPC_R0:\n    return \"r0\";\n  case UNW_PPC_R1:\n    return \"r1\";\n  case UNW_PPC_R2:\n    return \"r2\";\n  case UNW_PPC_R3:\n    return \"r3\";\n  case UNW_PPC_R4:\n    return \"r4\";\n  case UNW_PPC_R5:\n    return \"r5\";\n  case UNW_PPC_R6:\n    return \"r6\";\n  case UNW_PPC_R7:\n    return \"r7\";\n  case UNW_PPC_R8:\n    return \"r8\";\n  case UNW_PPC_R9:\n    return \"r9\";\n  case UNW_PPC_R10:\n    return \"r10\";\n  case UNW_PPC_R11:\n    return \"r11\";\n  case UNW_PPC_R12:\n    return \"r12\";\n  case UNW_PPC_R13:\n    return \"r13\";\n  case UNW_PPC_R14:\n    return \"r14\";\n  case UNW_PPC_R15:\n    return \"r15\";\n  case UNW_PPC_R16:\n    return \"r16\";\n  case UNW_PPC_R17:\n    return \"r17\";\n  case UNW_PPC_R18:\n    return \"r18\";\n  case UNW_PPC_R19:\n    return \"r19\";\n  case UNW_PPC_R20:\n    return \"r20\";\n  case UNW_PPC_R21:\n    return \"r21\";\n  case UNW_PPC_R22:\n    return \"r22\";\n  case UNW_PPC_R23:\n    return \"r23\";\n  case UNW_PPC_R24:\n    return \"r24\";\n  case UNW_PPC_R25:\n    return \"r25\";\n  case UNW_PPC_R26:\n    return \"r26\";\n  case UNW_PPC_R27:\n    return \"r27\";\n  case UNW_PPC_R28:\n    return \"r28\";\n  case UNW_PPC_R29:\n    return \"r29\";\n  case UNW_PPC_R30:\n    return \"r30\";\n  case UNW_PPC_R31:\n    return \"r31\";\n  case UNW_PPC_F0:\n    return \"fp0\";\n  case UNW_PPC_F1:\n    return \"fp1\";\n  case UNW_PPC_F2:\n    return \"fp2\";\n  case UNW_PPC_F3:\n    return \"fp3\";\n  case UNW_PPC_F4:\n    return \"fp4\";\n  case UNW_PPC_F5:\n    return \"fp5\";\n  case UNW_PPC_F6:\n    return \"fp6\";\n  case UNW_PPC_F7:\n    return \"fp7\";\n  case UNW_PPC_F8:\n    return \"fp8\";\n  case UNW_PPC_F9:\n    return \"fp9\";\n  case UNW_PPC_F10:\n    return \"fp10\";\n  case UNW_PPC_F11:\n    return \"fp11\";\n  case UNW_PPC_F12:\n    return \"fp12\";\n  case UNW_PPC_F13:\n    return \"fp13\";\n  case UNW_PPC_F14:\n    return \"fp14\";\n  case UNW_PPC_F15:\n    return \"fp15\";\n  case UNW_PPC_F16:\n    return \"fp16\";\n  case UNW_PPC_F17:\n    return \"fp17\";\n  case UNW_PPC_F18:\n    return \"fp18\";\n  case UNW_PPC_F19:\n    return \"fp19\";\n  case UNW_PPC_F20:\n    return \"fp20\";\n  case UNW_PPC_F21:\n    return \"fp21\";\n  case UNW_PPC_F22:\n    return \"fp22\";\n  case UNW_PPC_F23:\n    return \"fp23\";\n  case UNW_PPC_F24:\n    return \"fp24\";\n  case UNW_PPC_F25:\n    return \"fp25\";\n  case UNW_PPC_F26:\n    return \"fp26\";\n  case UNW_PPC_F27:\n    return \"fp27\";\n  case UNW_PPC_F28:\n    return \"fp28\";\n  case UNW_PPC_F29:\n    return \"fp29\";\n  case UNW_PPC_F30:\n    return \"fp30\";\n  case UNW_PPC_F31:\n    return \"fp31\";\n  case UNW_PPC_LR:\n    return \"lr\";\n  default:\n    return \"unknown register\";\n  }\n\n}\n\n\n/// Registers_arm64  holds the register state of a thread in a 64-bit arm\n/// process.\nclass _LIBUNWIND_HIDDEN Registers_arm64 {\npublic:\n  Registers_arm64();\n  Registers_arm64(const void *registers);\n\n  bool        validRegister(int num) const;\n  uint64_t    getRegister(int num) const;\n  void        setRegister(int num, uint64_t value);\n  bool        validFloatRegister(int num) const;\n  double      getFloatRegister(int num) const;\n  void        setFloatRegister(int num, double value);\n  bool        validVectorRegister(int num) const;\n  v128        getVectorRegister(int num) const;\n  void        setVectorRegister(int num, v128 value);\n  const char *getRegisterName(int num);\n  void        jumpto();\n  static int  lastDwarfRegNum() { return 95; }\n\n  uint64_t  getSP() const         { return _registers.__sp; }\n  void      setSP(uint64_t value) { _registers.__sp = value; }\n  uint64_t  getIP() const         { return _registers.__pc; }\n  void      setIP(uint64_t value) { _registers.__pc = value; }\n  uint64_t  getFP() const         { return _registers.__fp; }\n  void      setFP(uint64_t value) { _registers.__fp = value; }\n\nprivate:\n  struct GPRs {\n    uint64_t __x[29]; // x0-x28\n    uint64_t __fp;    // Frame pointer x29\n    uint64_t __lr;    // Link register x30\n    uint64_t __sp;    // Stack pointer x31\n    uint64_t __pc;    // Program counter\n    uint64_t padding; // 16-byte align\n  };\n\n  GPRs    _registers;\n  double  _vectorHalfRegisters[32];\n  // Currently only the lower double in 128-bit vectore registers\n  // is perserved during unwinding.  We could define new register\n  // numbers (> 96) which mean whole vector registers, then this\n  // struct would need to change to contain whole vector registers.\n};\n\ninline Registers_arm64::Registers_arm64(const void *registers) {\n  static_assert(sizeof(Registers_arm64) < sizeof(unw_context_t),\n                    \"arm64 registers do not fit into unw_context_t\");\n  memcpy(&_registers, registers, sizeof(_registers));\n  static_assert(sizeof(GPRs) == 0x110,\n                \"expected VFP registers to be at offset 272\");\n  memcpy(_vectorHalfRegisters,\n         static_cast<const uint8_t *>(registers) + sizeof(GPRs),\n         sizeof(_vectorHalfRegisters));\n}\n\ninline Registers_arm64::Registers_arm64() {\n  memset(&_registers, 0, sizeof(_registers));\n  memset(&_vectorHalfRegisters, 0, sizeof(_vectorHalfRegisters));\n}\n\ninline bool Registers_arm64::validRegister(int regNum) const {\n  if (regNum == UNW_REG_IP)\n    return true;\n  if (regNum == UNW_REG_SP)\n    return true;\n  if (regNum < 0)\n    return false;\n  if (regNum > 95)\n    return false;\n  if ((regNum > 31) && (regNum < 64))\n    return false;\n  return true;\n}\n\ninline uint64_t Registers_arm64::getRegister(int regNum) const {\n  if (regNum == UNW_REG_IP)\n    return _registers.__pc;\n  if (regNum == UNW_REG_SP)\n    return _registers.__sp;\n  if ((regNum >= 0) && (regNum < 32))\n    return _registers.__x[regNum];\n  _LIBUNWIND_ABORT(\"unsupported arm64 register\");\n}\n\ninline void Registers_arm64::setRegister(int regNum, uint64_t value) {\n  if (regNum == UNW_REG_IP)\n    _registers.__pc = value;\n  else if (regNum == UNW_REG_SP)\n    _registers.__sp = value;\n  else if ((regNum >= 0) && (regNum < 32))\n    _registers.__x[regNum] = value;\n  else\n    _LIBUNWIND_ABORT(\"unsupported arm64 register\");\n}\n\ninline const char *Registers_arm64::getRegisterName(int regNum) {\n  switch (regNum) {\n  case UNW_REG_IP:\n    return \"pc\";\n  case UNW_REG_SP:\n    return \"sp\";\n  case UNW_ARM64_X0:\n    return \"x0\";\n  case UNW_ARM64_X1:\n    return \"x1\";\n  case UNW_ARM64_X2:\n    return \"x2\";\n  case UNW_ARM64_X3:\n    return \"x3\";\n  case UNW_ARM64_X4:\n    return \"x4\";\n  case UNW_ARM64_X5:\n    return \"x5\";\n  case UNW_ARM64_X6:\n    return \"x6\";\n  case UNW_ARM64_X7:\n    return \"x7\";\n  case UNW_ARM64_X8:\n    return \"x8\";\n  case UNW_ARM64_X9:\n    return \"x9\";\n  case UNW_ARM64_X10:\n    return \"x10\";\n  case UNW_ARM64_X11:\n    return \"x11\";\n  case UNW_ARM64_X12:\n    return \"x12\";\n  case UNW_ARM64_X13:\n    return \"x13\";\n  case UNW_ARM64_X14:\n    return \"x14\";\n  case UNW_ARM64_X15:\n    return \"x15\";\n  case UNW_ARM64_X16:\n    return \"x16\";\n  case UNW_ARM64_X17:\n    return \"x17\";\n  case UNW_ARM64_X18:\n    return \"x18\";\n  case UNW_ARM64_X19:\n    return \"x19\";\n  case UNW_ARM64_X20:\n    return \"x20\";\n  case UNW_ARM64_X21:\n    return \"x21\";\n  case UNW_ARM64_X22:\n    return \"x22\";\n  case UNW_ARM64_X23:\n    return \"x23\";\n  case UNW_ARM64_X24:\n    return \"x24\";\n  case UNW_ARM64_X25:\n    return \"x25\";\n  case UNW_ARM64_X26:\n    return \"x26\";\n  case UNW_ARM64_X27:\n    return \"x27\";\n  case UNW_ARM64_X28:\n    return \"x28\";\n  case UNW_ARM64_X29:\n    return \"fp\";\n  case UNW_ARM64_X30:\n    return \"lr\";\n  case UNW_ARM64_X31:\n    return \"sp\";\n  case UNW_ARM64_D0:\n    return \"d0\";\n  case UNW_ARM64_D1:\n    return \"d1\";\n  case UNW_ARM64_D2:\n    return \"d2\";\n  case UNW_ARM64_D3:\n    return \"d3\";\n  case UNW_ARM64_D4:\n    return \"d4\";\n  case UNW_ARM64_D5:\n    return \"d5\";\n  case UNW_ARM64_D6:\n    return \"d6\";\n  case UNW_ARM64_D7:\n    return \"d7\";\n  case UNW_ARM64_D8:\n    return \"d8\";\n  case UNW_ARM64_D9:\n    return \"d9\";\n  case UNW_ARM64_D10:\n    return \"d10\";\n  case UNW_ARM64_D11:\n    return \"d11\";\n  case UNW_ARM64_D12:\n    return \"d12\";\n  case UNW_ARM64_D13:\n    return \"d13\";\n  case UNW_ARM64_D14:\n    return \"d14\";\n  case UNW_ARM64_D15:\n    return \"d15\";\n  case UNW_ARM64_D16:\n    return \"d16\";\n  case UNW_ARM64_D17:\n    return \"d17\";\n  case UNW_ARM64_D18:\n    return \"d18\";\n  case UNW_ARM64_D19:\n    return \"d19\";\n  case UNW_ARM64_D20:\n    return \"d20\";\n  case UNW_ARM64_D21:\n    return \"d21\";\n  case UNW_ARM64_D22:\n    return \"d22\";\n  case UNW_ARM64_D23:\n    return \"d23\";\n  case UNW_ARM64_D24:\n    return \"d24\";\n  case UNW_ARM64_D25:\n    return \"d25\";\n  case UNW_ARM64_D26:\n    return \"d26\";\n  case UNW_ARM64_D27:\n    return \"d27\";\n  case UNW_ARM64_D28:\n    return \"d28\";\n  case UNW_ARM64_D29:\n    return \"d29\";\n  case UNW_ARM64_D30:\n    return \"d30\";\n  case UNW_ARM64_D31:\n    return \"d31\";\n  default:\n    return \"unknown register\";\n  }\n}\n\ninline bool Registers_arm64::validFloatRegister(int regNum) const {\n  if (regNum < UNW_ARM64_D0)\n    return false;\n  if (regNum > UNW_ARM64_D31)\n    return false;\n  return true;\n}\n\ninline double Registers_arm64::getFloatRegister(int regNum) const {\n  assert(validFloatRegister(regNum));\n  return _vectorHalfRegisters[regNum - UNW_ARM64_D0];\n}\n\ninline void Registers_arm64::setFloatRegister(int regNum, double value) {\n  assert(validFloatRegister(regNum));\n  _vectorHalfRegisters[regNum - UNW_ARM64_D0] = value;\n}\n\ninline bool Registers_arm64::validVectorRegister(int) const {\n  return false;\n}\n\ninline v128 Registers_arm64::getVectorRegister(int) const {\n  _LIBUNWIND_ABORT(\"no arm64 vector register support yet\");\n}\n\ninline void Registers_arm64::setVectorRegister(int, v128) {\n  _LIBUNWIND_ABORT(\"no arm64 vector register support yet\");\n}\n\n/// Registers_arm holds the register state of a thread in a 32-bit arm\n/// process.\n///\n/// NOTE: Assumes VFPv3. On ARM processors without a floating point unit,\n/// this uses more memory than required.\nclass _LIBUNWIND_HIDDEN Registers_arm {\npublic:\n  Registers_arm();\n  Registers_arm(const void *registers);\n\n  bool        validRegister(int num) const;\n  uint32_t    getRegister(int num);\n  void        setRegister(int num, uint32_t value);\n  bool        validFloatRegister(int num) const;\n  unw_fpreg_t getFloatRegister(int num);\n  void        setFloatRegister(int num, unw_fpreg_t value);\n  bool        validVectorRegister(int num) const;\n  v128        getVectorRegister(int num) const;\n  void        setVectorRegister(int num, v128 value);\n  const char *getRegisterName(int num);\n  void        jumpto() {\n    restoreSavedFloatRegisters();\n    restoreCoreAndJumpTo();\n  }\n\n  uint32_t  getSP() const         { return _registers.__sp; }\n  void      setSP(uint32_t value) { _registers.__sp = value; }\n  uint32_t  getIP() const         { return _registers.__pc; }\n  void      setIP(uint32_t value) { _registers.__pc = value; }\n\n  void saveVFPAsX() {\n    assert(_use_X_for_vfp_save || !_saved_vfp_d0_d15);\n    _use_X_for_vfp_save = true;\n  }\n\n  void restoreSavedFloatRegisters() {\n    if (_saved_vfp_d0_d15) {\n      if (_use_X_for_vfp_save)\n        restoreVFPWithFLDMX(_vfp_d0_d15_pad);\n      else\n        restoreVFPWithFLDMD(_vfp_d0_d15_pad);\n    }\n    if (_saved_vfp_d16_d31)\n      restoreVFPv3(_vfp_d16_d31);\n    if (_saved_iwmmx)\n      restoreiWMMX(_iwmmx);\n    if (_saved_iwmmx_control)\n      restoreiWMMXControl(_iwmmx_control);\n  }\n\nprivate:\n  struct GPRs {\n    uint32_t __r[13]; // r0-r12\n    uint32_t __sp;    // Stack pointer r13\n    uint32_t __lr;    // Link register r14\n    uint32_t __pc;    // Program counter r15\n  };\n\n  static void saveVFPWithFSTMD(unw_fpreg_t*);\n  static void saveVFPWithFSTMX(unw_fpreg_t*);\n  static void saveVFPv3(unw_fpreg_t*);\n  static void saveiWMMX(unw_fpreg_t*);\n  static void saveiWMMXControl(uint32_t*);\n  static void restoreVFPWithFLDMD(unw_fpreg_t*);\n  static void restoreVFPWithFLDMX(unw_fpreg_t*);\n  static void restoreVFPv3(unw_fpreg_t*);\n  static void restoreiWMMX(unw_fpreg_t*);\n  static void restoreiWMMXControl(uint32_t*);\n  void restoreCoreAndJumpTo();\n\n  // ARM registers\n  GPRs _registers;\n\n  // We save floating point registers lazily because we can't know ahead of\n  // time which ones are used. See EHABI #4.7.\n\n  // Whether D0-D15 are saved in the FTSMX instead of FSTMD format.\n  //\n  // See EHABI #7.5 that explains how matching instruction sequences for load\n  // and store need to be used to correctly restore the exact register bits.\n  bool _use_X_for_vfp_save;\n  // Whether VFP D0-D15 are saved.\n  bool _saved_vfp_d0_d15;\n  // Whether VFPv3 D16-D31 are saved.\n  bool _saved_vfp_d16_d31;\n  // Whether iWMMX data registers are saved.\n  bool _saved_iwmmx;\n  // Whether iWMMX control registers are saved.\n  bool _saved_iwmmx_control;\n  // VFP registers D0-D15, + padding if saved using FSTMX\n  unw_fpreg_t _vfp_d0_d15_pad[17];\n  // VFPv3 registers D16-D31, always saved using FSTMD\n  unw_fpreg_t _vfp_d16_d31[16];\n  // iWMMX registers\n  unw_fpreg_t _iwmmx[16];\n  // iWMMX control registers\n  uint32_t _iwmmx_control[4];\n};\n\ninline Registers_arm::Registers_arm(const void *registers)\n  : _use_X_for_vfp_save(false),\n    _saved_vfp_d0_d15(false),\n    _saved_vfp_d16_d31(false),\n    _saved_iwmmx(false),\n    _saved_iwmmx_control(false) {\n  static_assert(sizeof(Registers_arm) < sizeof(unw_context_t),\n                    \"arm registers do not fit into unw_context_t\");\n  // See unw_getcontext() note about data.\n  memcpy(&_registers, registers, sizeof(_registers));\n  memset(&_vfp_d0_d15_pad, 0, sizeof(_vfp_d0_d15_pad));\n  memset(&_vfp_d16_d31, 0, sizeof(_vfp_d16_d31));\n  memset(&_iwmmx, 0, sizeof(_iwmmx));\n  memset(&_iwmmx_control, 0, sizeof(_iwmmx_control));\n}\n\ninline Registers_arm::Registers_arm()\n  : _use_X_for_vfp_save(false),\n    _saved_vfp_d0_d15(false),\n    _saved_vfp_d16_d31(false),\n    _saved_iwmmx(false),\n    _saved_iwmmx_control(false) {\n  memset(&_registers, 0, sizeof(_registers));\n  memset(&_vfp_d0_d15_pad, 0, sizeof(_vfp_d0_d15_pad));\n  memset(&_vfp_d16_d31, 0, sizeof(_vfp_d16_d31));\n  memset(&_iwmmx, 0, sizeof(_iwmmx));\n  memset(&_iwmmx_control, 0, sizeof(_iwmmx_control));\n}\n\ninline bool Registers_arm::validRegister(int regNum) const {\n  // Returns true for all non-VFP registers supported by the EHABI\n  // virtual register set (VRS).\n  if (regNum == UNW_REG_IP)\n    return true;\n  if (regNum == UNW_REG_SP)\n    return true;\n  if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R15)\n    return true;\n  if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3)\n    return true;\n  return false;\n}\n\ninline uint32_t Registers_arm::getRegister(int regNum) {\n  if (regNum == UNW_REG_SP || regNum == UNW_ARM_SP)\n    return _registers.__sp;\n  if (regNum == UNW_ARM_LR)\n    return _registers.__lr;\n  if (regNum == UNW_REG_IP || regNum == UNW_ARM_IP)\n    return _registers.__pc;\n  if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R12)\n    return _registers.__r[regNum];\n  if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3) {\n    if (!_saved_iwmmx_control) {\n      _saved_iwmmx_control = true;\n      saveiWMMXControl(_iwmmx_control);\n    }\n    return _iwmmx_control[regNum - UNW_ARM_WC0];\n  }\n  _LIBUNWIND_ABORT(\"unsupported arm register\");\n}\n\ninline void Registers_arm::setRegister(int regNum, uint32_t value) {\n  if (regNum == UNW_REG_SP || regNum == UNW_ARM_SP)\n    _registers.__sp = value;\n  else if (regNum == UNW_ARM_LR)\n    _registers.__lr = value;\n  else if (regNum == UNW_REG_IP || regNum == UNW_ARM_IP)\n    _registers.__pc = value;\n  else if (regNum >= UNW_ARM_R0 && regNum <= UNW_ARM_R12)\n    _registers.__r[regNum] = value;\n  else if (regNum >= UNW_ARM_WC0 && regNum <= UNW_ARM_WC3) {\n    if (!_saved_iwmmx_control) {\n      _saved_iwmmx_control = true;\n      saveiWMMXControl(_iwmmx_control);\n    }\n    _iwmmx_control[regNum - UNW_ARM_WC0] = value;\n  } else\n    _LIBUNWIND_ABORT(\"unsupported arm register\");\n}\n\ninline const char *Registers_arm::getRegisterName(int regNum) {\n  switch (regNum) {\n  case UNW_REG_IP:\n  case UNW_ARM_IP: // UNW_ARM_R15 is alias\n    return \"pc\";\n  case UNW_ARM_LR: // UNW_ARM_R14 is alias\n    return \"lr\";\n  case UNW_REG_SP:\n  case UNW_ARM_SP: // UNW_ARM_R13 is alias\n    return \"sp\";\n  case UNW_ARM_R0:\n    return \"r0\";\n  case UNW_ARM_R1:\n    return \"r1\";\n  case UNW_ARM_R2:\n    return \"r2\";\n  case UNW_ARM_R3:\n    return \"r3\";\n  case UNW_ARM_R4:\n    return \"r4\";\n  case UNW_ARM_R5:\n    return \"r5\";\n  case UNW_ARM_R6:\n    return \"r6\";\n  case UNW_ARM_R7:\n    return \"r7\";\n  case UNW_ARM_R8:\n    return \"r8\";\n  case UNW_ARM_R9:\n    return \"r9\";\n  case UNW_ARM_R10:\n    return \"r10\";\n  case UNW_ARM_R11:\n    return \"r11\";\n  case UNW_ARM_R12:\n    return \"r12\";\n  case UNW_ARM_S0:\n    return \"s0\";\n  case UNW_ARM_S1:\n    return \"s1\";\n  case UNW_ARM_S2:\n    return \"s2\";\n  case UNW_ARM_S3:\n    return \"s3\";\n  case UNW_ARM_S4:\n    return \"s4\";\n  case UNW_ARM_S5:\n    return \"s5\";\n  case UNW_ARM_S6:\n    return \"s6\";\n  case UNW_ARM_S7:\n    return \"s7\";\n  case UNW_ARM_S8:\n    return \"s8\";\n  case UNW_ARM_S9:\n    return \"s9\";\n  case UNW_ARM_S10:\n    return \"s10\";\n  case UNW_ARM_S11:\n    return \"s11\";\n  case UNW_ARM_S12:\n    return \"s12\";\n  case UNW_ARM_S13:\n    return \"s13\";\n  case UNW_ARM_S14:\n    return \"s14\";\n  case UNW_ARM_S15:\n    return \"s15\";\n  case UNW_ARM_S16:\n    return \"s16\";\n  case UNW_ARM_S17:\n    return \"s17\";\n  case UNW_ARM_S18:\n    return \"s18\";\n  case UNW_ARM_S19:\n    return \"s19\";\n  case UNW_ARM_S20:\n    return \"s20\";\n  case UNW_ARM_S21:\n    return \"s21\";\n  case UNW_ARM_S22:\n    return \"s22\";\n  case UNW_ARM_S23:\n    return \"s23\";\n  case UNW_ARM_S24:\n    return \"s24\";\n  case UNW_ARM_S25:\n    return \"s25\";\n  case UNW_ARM_S26:\n    return \"s26\";\n  case UNW_ARM_S27:\n    return \"s27\";\n  case UNW_ARM_S28:\n    return \"s28\";\n  case UNW_ARM_S29:\n    return \"s29\";\n  case UNW_ARM_S30:\n    return \"s30\";\n  case UNW_ARM_S31:\n    return \"s31\";\n  case UNW_ARM_D0:\n    return \"d0\";\n  case UNW_ARM_D1:\n    return \"d1\";\n  case UNW_ARM_D2:\n    return \"d2\";\n  case UNW_ARM_D3:\n    return \"d3\";\n  case UNW_ARM_D4:\n    return \"d4\";\n  case UNW_ARM_D5:\n    return \"d5\";\n  case UNW_ARM_D6:\n    return \"d6\";\n  case UNW_ARM_D7:\n    return \"d7\";\n  case UNW_ARM_D8:\n    return \"d8\";\n  case UNW_ARM_D9:\n    return \"d9\";\n  case UNW_ARM_D10:\n    return \"d10\";\n  case UNW_ARM_D11:\n    return \"d11\";\n  case UNW_ARM_D12:\n    return \"d12\";\n  case UNW_ARM_D13:\n    return \"d13\";\n  case UNW_ARM_D14:\n    return \"d14\";\n  case UNW_ARM_D15:\n    return \"d15\";\n  case UNW_ARM_D16:\n    return \"d16\";\n  case UNW_ARM_D17:\n    return \"d17\";\n  case UNW_ARM_D18:\n    return \"d18\";\n  case UNW_ARM_D19:\n    return \"d19\";\n  case UNW_ARM_D20:\n    return \"d20\";\n  case UNW_ARM_D21:\n    return \"d21\";\n  case UNW_ARM_D22:\n    return \"d22\";\n  case UNW_ARM_D23:\n    return \"d23\";\n  case UNW_ARM_D24:\n    return \"d24\";\n  case UNW_ARM_D25:\n    return \"d25\";\n  case UNW_ARM_D26:\n    return \"d26\";\n  case UNW_ARM_D27:\n    return \"d27\";\n  case UNW_ARM_D28:\n    return \"d28\";\n  case UNW_ARM_D29:\n    return \"d29\";\n  case UNW_ARM_D30:\n    return \"d30\";\n  case UNW_ARM_D31:\n    return \"d31\";\n  default:\n    return \"unknown register\";\n  }\n}\n\ninline bool Registers_arm::validFloatRegister(int regNum) const {\n  // NOTE: Consider the intel MMX registers floating points so the\n  // unw_get_fpreg can be used to transmit the 64-bit data back.\n  return ((regNum >= UNW_ARM_D0) && (regNum <= UNW_ARM_D31))\n      || ((regNum >= UNW_ARM_WR0) && (regNum <= UNW_ARM_WR15));\n}\n\ninline unw_fpreg_t Registers_arm::getFloatRegister(int regNum) {\n  if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D15) {\n    if (!_saved_vfp_d0_d15) {\n      _saved_vfp_d0_d15 = true;\n      if (_use_X_for_vfp_save)\n        saveVFPWithFSTMX(_vfp_d0_d15_pad);\n      else\n        saveVFPWithFSTMD(_vfp_d0_d15_pad);\n    }\n    return _vfp_d0_d15_pad[regNum - UNW_ARM_D0];\n  } else if (regNum >= UNW_ARM_D16 && regNum <= UNW_ARM_D31) {\n    if (!_saved_vfp_d16_d31) {\n      _saved_vfp_d16_d31 = true;\n      saveVFPv3(_vfp_d16_d31);\n    }\n    return _vfp_d16_d31[regNum - UNW_ARM_D16];\n  } else if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) {\n    if (!_saved_iwmmx) {\n      _saved_iwmmx = true;\n      saveiWMMX(_iwmmx);\n    }\n    return _iwmmx[regNum - UNW_ARM_WR0];\n  } else {\n    _LIBUNWIND_ABORT(\"Unknown ARM float register\");\n  }\n}\n\ninline void Registers_arm::setFloatRegister(int regNum, unw_fpreg_t value) {\n  if (regNum >= UNW_ARM_D0 && regNum <= UNW_ARM_D15) {\n    if (!_saved_vfp_d0_d15) {\n      _saved_vfp_d0_d15 = true;\n      if (_use_X_for_vfp_save)\n        saveVFPWithFSTMX(_vfp_d0_d15_pad);\n      else\n        saveVFPWithFSTMD(_vfp_d0_d15_pad);\n    }\n    _vfp_d0_d15_pad[regNum - UNW_ARM_D0] = value;\n  } else if (regNum >= UNW_ARM_D16 && regNum <= UNW_ARM_D31) {\n    if (!_saved_vfp_d16_d31) {\n      _saved_vfp_d16_d31 = true;\n      saveVFPv3(_vfp_d16_d31);\n    }\n    _vfp_d16_d31[regNum - UNW_ARM_D0] = value;\n  } else if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) {\n    if (!_saved_iwmmx) {\n      _saved_iwmmx = true;\n      saveiWMMX(_iwmmx);\n    }\n    _iwmmx[regNum - UNW_ARM_WR0] = value;\n  } else {\n    _LIBUNWIND_ABORT(\"Unknown ARM float register\");\n  }\n}\n\ninline bool Registers_arm::validVectorRegister(int) const {\n  return false;\n}\n\ninline v128 Registers_arm::getVectorRegister(int) const {\n  _LIBUNWIND_ABORT(\"ARM vector support not implemented\");\n}\n\ninline void Registers_arm::setVectorRegister(int, v128) {\n  _LIBUNWIND_ABORT(\"ARM vector support not implemented\");\n}\n\n} // namespace libunwind\n\n#endif // __REGISTERS_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/Unwind-EHABI.cpp",
    "content": "//===--------------------------- Unwind-EHABI.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Implements ARM zero-cost C++ exceptions\n//\n//===----------------------------------------------------------------------===//\n\n#include \"Unwind-EHABI.h\"\n\n#if LIBCXXABI_ARM_EHABI\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <type_traits>\n\n#include \"config.h\"\n#include \"libunwind.h\"\n#include \"libunwind_ext.h\"\n#include \"unwind.h\"\n#include \"../private_typeinfo.h\"\n\nnamespace {\n\n// Strange order: take words in order, but inside word, take from most to least\n// signinficant byte.\nuint8_t getByte(const uint32_t* data, size_t offset) {\n  const uint8_t* byteData = reinterpret_cast<const uint8_t*>(data);\n  return byteData[(offset & ~(size_t)0x03) + (3 - (offset & (size_t)0x03))];\n}\n\nconst char* getNextWord(const char* data, uint32_t* out) {\n  *out = *reinterpret_cast<const uint32_t*>(data);\n  return data + 4;\n}\n\nconst char* getNextNibble(const char* data, uint32_t* out) {\n  *out = *reinterpret_cast<const uint16_t*>(data);\n  return data + 2;\n}\n\nstruct Descriptor {\n  // See # 9.2\n  typedef enum {\n    SU16 = 0, // Short descriptor, 16-bit entries\n    LU16 = 1, // Long descriptor,  16-bit entries\n    LU32 = 3, // Long descriptor,  32-bit entries\n    RESERVED0 =  4, RESERVED1 =  5, RESERVED2  = 6,  RESERVED3  =  7,\n    RESERVED4 =  8, RESERVED5 =  9, RESERVED6  = 10, RESERVED7  = 11,\n    RESERVED8 = 12, RESERVED9 = 13, RESERVED10 = 14, RESERVED11 = 15\n  } Format;\n\n  // See # 9.2\n  typedef enum {\n    CLEANUP = 0x0,\n    FUNC    = 0x1,\n    CATCH   = 0x2,\n    INVALID = 0x4\n  } Kind;\n};\n\n_Unwind_Reason_Code ProcessDescriptors(\n    _Unwind_State state,\n    _Unwind_Control_Block* ucbp,\n    struct _Unwind_Context* context,\n    Descriptor::Format format,\n    const char* descriptorStart,\n    uint32_t flags) {\n\n  // EHT is inlined in the index using compact form. No descriptors. #5\n  if (flags & 0x1)\n    return _URC_CONTINUE_UNWIND;\n\n  // TODO: We should check the state here, and determine whether we need to\n  // perform phase1 or phase2 unwinding.\n  (void)state;\n\n  const char* descriptor = descriptorStart;\n  uint32_t descriptorWord;\n  getNextWord(descriptor, &descriptorWord);\n  while (descriptorWord) {\n    // Read descriptor based on # 9.2.\n    uint32_t length;\n    uint32_t offset;\n    switch (format) {\n      case Descriptor::LU32:\n        descriptor = getNextWord(descriptor, &length);\n        descriptor = getNextWord(descriptor, &offset);\n      case Descriptor::LU16:\n        descriptor = getNextNibble(descriptor, &length);\n        descriptor = getNextNibble(descriptor, &offset);\n      default:\n        assert(false);\n        return _URC_FAILURE;\n    }\n\n    // See # 9.2 table for decoding the kind of descriptor. It's a 2-bit value.\n    Descriptor::Kind kind =\n        static_cast<Descriptor::Kind>((length & 0x1) | ((offset & 0x1) << 1));\n\n    // Clear off flag from last bit.\n    length &= ~1u;\n    offset &= ~1u;\n    uintptr_t scopeStart = ucbp->pr_cache.fnstart + offset;\n    uintptr_t scopeEnd = scopeStart + length;\n    uintptr_t pc = _Unwind_GetIP(context);\n    bool isInScope = (scopeStart <= pc) && (pc < scopeEnd);\n\n    switch (kind) {\n      case Descriptor::CLEANUP: {\n        // TODO(ajwong): Handle cleanup descriptors.\n        break;\n      }\n      case Descriptor::FUNC: {\n        // TODO(ajwong): Handle function descriptors.\n        break;\n      }\n      case Descriptor::CATCH: {\n        // Catch descriptors require gobbling one more word.\n        uint32_t landing_pad;\n        descriptor = getNextWord(descriptor, &landing_pad);\n\n        if (isInScope) {\n          // TODO(ajwong): This is only phase1 compatible logic. Implement\n          // phase2.\n          landing_pad = signExtendPrel31(landing_pad & ~0x80000000);\n          if (landing_pad == 0xffffffff) {\n            return _URC_HANDLER_FOUND;\n          } else if (landing_pad == 0xfffffffe) {\n            return _URC_FAILURE;\n          } else {\n            /*\n            bool is_reference_type = landing_pad & 0x80000000;\n            void* matched_object;\n            if (__cxxabiv1::__cxa_type_match(\n                    ucbp, reinterpret_cast<const std::type_info *>(landing_pad),\n                    is_reference_type,\n                    &matched_object) != __cxxabiv1::ctm_failed)\n                return _URC_HANDLER_FOUND;\n                */\n            _LIBUNWIND_ABORT(\"Type matching not implemented\");\n          }\n        }\n        break;\n      }\n      default:\n        _LIBUNWIND_ABORT(\"Invalid descriptor kind found.\");\n    }\n\n    getNextWord(descriptor, &descriptorWord);\n  }\n\n  return _URC_CONTINUE_UNWIND;\n}\n\nstatic _Unwind_Reason_Code unwindOneFrame(_Unwind_State state,\n                                          _Unwind_Control_Block* ucbp,\n                                          struct _Unwind_Context* context) {\n  // Read the compact model EHT entry's header # 6.3\n  const uint32_t* unwindingData = ucbp->pr_cache.ehtp;\n  assert((*unwindingData & 0xf0000000) == 0x80000000 && \"Must be a compact entry\");\n  Descriptor::Format format =\n      static_cast<Descriptor::Format>((*unwindingData & 0x0f000000) >> 24);\n  size_t len = 0;\n  size_t off = 0;\n  unwindingData = decode_eht_entry(unwindingData, &off, &len);\n  if (unwindingData == nullptr) {\n    return _URC_FAILURE;\n  }\n\n  // Handle descriptors before unwinding so they are processed in the context\n  // of the correct stack frame.\n  _Unwind_Reason_Code result =\n      ProcessDescriptors(\n          state, ucbp, context, format,\n          reinterpret_cast<const char*>(ucbp->pr_cache.ehtp) + len,\n          ucbp->pr_cache.additional);\n\n  if (result != _URC_CONTINUE_UNWIND)\n    return result;\n\n  return _Unwind_VRS_Interpret(context, unwindingData, off, len);\n}\n\n// Generates mask discriminator for _Unwind_VRS_Pop, e.g. for _UVRSC_CORE /\n// _UVRSD_UINT32.\nuint32_t RegisterMask(uint8_t start, uint8_t count_minus_one) {\n  return ((1U << (count_minus_one + 1)) - 1) << start;\n}\n\n// Generates mask discriminator for _Unwind_VRS_Pop, e.g. for _UVRSC_VFP /\n// _UVRSD_DOUBLE.\nuint32_t RegisterRange(uint8_t start, uint8_t count_minus_one) {\n  return ((uint32_t)start << 16) | ((uint32_t)count_minus_one + 1);\n}\n\n} // end anonymous namespace\n\n/**\n * Decodes an EHT entry.\n *\n * @param data Pointer to EHT.\n * @param[out] off Offset from return value (in bytes) to begin interpretation.\n * @param[out] len Number of bytes in unwind code.\n * @return Pointer to beginning of unwind code.\n */\nextern \"C\" const uint32_t*\ndecode_eht_entry(const uint32_t* data, size_t* off, size_t* len) {\n  assert((*data & 0x80000000) != 0 &&\n         \"decode_eht_entry() does not support user-defined personality\");\n\n  // 6.3: ARM Compact Model\n  // EHT entries here correspond to the __aeabi_unwind_cpp_pr[012] PRs indeded\n  // by format:\n  Descriptor::Format format =\n      static_cast<Descriptor::Format>((*data & 0x0f000000) >> 24);\n  switch (format) {\n    case Descriptor::SU16:\n      *len = 4;\n      *off = 1;\n      break;\n    case Descriptor::LU16:\n    case Descriptor::LU32:\n      *len = 4 + 4 * ((*data & 0x00ff0000) >> 16);\n      *off = 2;\n      break;\n    default:\n      return nullptr;\n  }\n  return data;\n}\n\n_Unwind_Reason_Code _Unwind_VRS_Interpret(\n    _Unwind_Context* context,\n    const uint32_t* data,\n    size_t offset,\n    size_t len) {\n  bool wrotePC = false;\n  bool finish = false;\n  while (offset < len && !finish) {\n    uint8_t byte = getByte(data, offset++);\n    if ((byte & 0x80) == 0) {\n      uint32_t sp;\n      _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp);\n      if (byte & 0x40)\n        sp -= (((uint32_t)byte & 0x3f) << 2) + 4;\n      else\n        sp += ((uint32_t)byte << 2) + 4;\n      _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32, &sp);\n    } else {\n      switch (byte & 0xf0) {\n        case 0x80: {\n          if (offset >= len)\n            return _URC_FAILURE;\n          uint32_t registers =\n              (((uint32_t)byte & 0x0f) << 12) |\n              (((uint32_t)getByte(data, offset++)) << 4);\n          if (!registers)\n            return _URC_FAILURE;\n          if (registers & (1 << 15))\n            wrotePC = true;\n          _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32);\n          break;\n        }\n        case 0x90: {\n          uint8_t reg = byte & 0x0f;\n          if (reg == 13 || reg == 15)\n            return _URC_FAILURE;\n          uint32_t sp;\n          _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_R0 + reg,\n                          _UVRSD_UINT32, &sp);\n          _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32,\n                          &sp);\n          break;\n        }\n        case 0xa0: {\n          uint32_t registers = RegisterMask(4, byte & 0x07);\n          if (byte & 0x08)\n            registers |= 1 << 14;\n          _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32);\n          break;\n        }\n        case 0xb0: {\n          switch (byte) {\n            case 0xb0:\n              finish = true;\n              break;\n            case 0xb1: {\n              if (offset >= len)\n                return _URC_FAILURE;\n              uint8_t registers = getByte(data, offset++);\n              if (registers & 0xf0 || !registers)\n                return _URC_FAILURE;\n              _Unwind_VRS_Pop(context, _UVRSC_CORE, registers, _UVRSD_UINT32);\n              break;\n            }\n            case 0xb2: {\n              uint32_t addend = 0;\n              uint32_t shift = 0;\n              // This decodes a uleb128 value.\n              while (true) {\n                if (offset >= len)\n                  return _URC_FAILURE;\n                uint32_t v = getByte(data, offset++);\n                addend |= (v & 0x7f) << shift;\n                if ((v & 0x80) == 0)\n                  break;\n                shift += 7;\n              }\n              uint32_t sp;\n              _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32,\n                              &sp);\n              sp += 0x204 + (addend << 2);\n              _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32,\n                              &sp);\n              break;\n            }\n            case 0xb3: {\n              uint8_t v = getByte(data, offset++);\n              _Unwind_VRS_Pop(context, _UVRSC_VFP,\n                              RegisterRange(static_cast<uint8_t>(v >> 4),\n                                            v & 0x0f), _UVRSD_VFPX);\n              break;\n            }\n            case 0xb4:\n            case 0xb5:\n            case 0xb6:\n            case 0xb7:\n              return _URC_FAILURE;\n            default:\n              _Unwind_VRS_Pop(context, _UVRSC_VFP,\n                              RegisterRange(8, byte & 0x07), _UVRSD_VFPX);\n              break;\n          }\n          break;\n        }\n        case 0xc0: {\n          switch (byte) {\n            case 0xc0:\n            case 0xc1:\n            case 0xc2:\n            case 0xc3:\n            case 0xc4:\n            case 0xc5:\n              _Unwind_VRS_Pop(context, _UVRSC_WMMXD,\n                              RegisterRange(10, byte & 0x7), _UVRSD_DOUBLE);\n              break;\n            case 0xc6: {\n              uint8_t v = getByte(data, offset++);\n              uint8_t start = static_cast<uint8_t>(v >> 4);\n              uint8_t count_minus_one = v & 0xf;\n              if (start + count_minus_one >= 16)\n                return _URC_FAILURE;\n              _Unwind_VRS_Pop(context, _UVRSC_WMMXD,\n                              RegisterRange(start, count_minus_one),\n                              _UVRSD_DOUBLE);\n              break;\n            }\n            case 0xc7: {\n              uint8_t v = getByte(data, offset++);\n              if (!v || v & 0xf0)\n                return _URC_FAILURE;\n              _Unwind_VRS_Pop(context, _UVRSC_WMMXC, v, _UVRSD_DOUBLE);\n              break;\n            }\n            case 0xc8:\n            case 0xc9: {\n              uint8_t v = getByte(data, offset++);\n              uint8_t start =\n                  static_cast<uint8_t>(((byte == 0xc8) ? 16 : 0) + (v >> 4));\n              uint8_t count_minus_one = v & 0xf;\n              if (start + count_minus_one >= 32)\n                return _URC_FAILURE;\n              _Unwind_VRS_Pop(context, _UVRSC_VFP,\n                              RegisterRange(start, count_minus_one),\n                              _UVRSD_DOUBLE);\n              break;\n            }\n            default:\n              return _URC_FAILURE;\n          }\n          break;\n        }\n        case 0xd0: {\n          if (byte & 0x08)\n            return _URC_FAILURE;\n          _Unwind_VRS_Pop(context, _UVRSC_VFP, RegisterRange(8, byte & 0x7),\n                          _UVRSD_DOUBLE);\n          break;\n        }\n        default:\n          return _URC_FAILURE;\n      }\n    }\n  }\n  if (!wrotePC) {\n    uint32_t lr;\n    _Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_LR, _UVRSD_UINT32, &lr);\n    _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_IP, _UVRSD_UINT32, &lr);\n  }\n  return _URC_CONTINUE_UNWIND;\n}\n\nextern \"C\" _Unwind_Reason_Code __aeabi_unwind_cpp_pr0(\n    _Unwind_State state,\n    _Unwind_Control_Block *ucbp,\n    _Unwind_Context *context) {\n  return unwindOneFrame(state, ucbp, context);\n}\n\nextern \"C\" _Unwind_Reason_Code __aeabi_unwind_cpp_pr1(\n    _Unwind_State state,\n    _Unwind_Control_Block *ucbp,\n    _Unwind_Context *context) {\n  return unwindOneFrame(state, ucbp, context);\n}\n\nextern \"C\" _Unwind_Reason_Code __aeabi_unwind_cpp_pr2(\n    _Unwind_State state,\n    _Unwind_Control_Block *ucbp,\n    _Unwind_Context *context) {\n  return unwindOneFrame(state, ucbp, context);\n}\n\nstatic _Unwind_Reason_Code\nunwind_phase1(unw_context_t *uc, _Unwind_Exception *exception_object) {\n  // EHABI #7.3 discusses preserving the VRS in a \"temporary VRS\" during\n  // phase 1 and then restoring it to the \"primary VRS\" for phase 2. The\n  // effect is phase 2 doesn't see any of the VRS manipulations from phase 1.\n  // In this implementation, the phases don't share the VRS backing store.\n  // Instead, they are passed the original |uc| and they create a new VRS\n  // from scratch thus achieving the same effect.\n  unw_cursor_t cursor1;\n  unw_init_local(&cursor1, uc);\n\n  // Walk each frame looking for a place to stop.\n  for (bool handlerNotFound = true; handlerNotFound;) {\n\n    // Ask libuwind to get next frame (skip over first which is\n    // _Unwind_RaiseException).\n    int stepResult = unw_step(&cursor1);\n    if (stepResult == 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_step() reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_END_OF_STACK;\n    } else if (stepResult < 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_step failed => \"\n                                 \"_URC_FATAL_PHASE1_ERROR\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_FATAL_PHASE1_ERROR;\n    }\n\n    // See if frame has code to run (has personality routine).\n    unw_proc_info_t frameInfo;\n    if (unw_get_proc_info(&cursor1, &frameInfo) != UNW_ESUCCESS) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_get_proc_info \"\n                                 \"failed => _URC_FATAL_PHASE1_ERROR\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_FATAL_PHASE1_ERROR;\n    }\n\n    // When tracing, print state information.\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionBuf[512];\n      const char *functionName = functionBuf;\n      unw_word_t offset;\n      if ((unw_get_proc_name(&cursor1, functionBuf, sizeof(functionBuf),\n                             &offset) != UNW_ESUCCESS) ||\n          (frameInfo.start_ip + offset > frameInfo.end_ip))\n        functionName = \".anonymous.\";\n      unw_word_t pc;\n      unw_get_reg(&cursor1, UNW_REG_IP, &pc);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase1(ex_ojb=%p): pc=0x%llX, start_ip=0x%llX, func=%s, \"\n          \"lsda=0x%llX, personality=0x%llX\\n\",\n          static_cast<void *>(exception_object), (long long)pc,\n          (long long)frameInfo.start_ip, functionName,\n          (long long)frameInfo.lsda, (long long)frameInfo.handler);\n    }\n\n    // If there is a personality routine, ask it if it will want to stop at\n    // this frame.\n    if (frameInfo.handler != 0) {\n      __personality_routine p =\n          (__personality_routine)(long)(frameInfo.handler);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase1(ex_ojb=%p): calling personality function %p\\n\",\n          static_cast<void *>(exception_object),\n          reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(p)));\n      struct _Unwind_Context *context = (struct _Unwind_Context *)(&cursor1);\n      exception_object->pr_cache.fnstart = frameInfo.start_ip;\n      exception_object->pr_cache.ehtp =\n          (_Unwind_EHT_Header *)frameInfo.unwind_info;\n      exception_object->pr_cache.additional = frameInfo.flags;\n      _Unwind_Reason_Code personalityResult =\n          (*p)(_US_VIRTUAL_UNWIND_FRAME, exception_object, context);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase1(ex_ojb=%p): personality result %d start_ip %x ehtp %p \"\n          \"additional %x\\n\",\n          static_cast<void *>(exception_object), personalityResult,\n          exception_object->pr_cache.fnstart,\n          static_cast<void *>(exception_object->pr_cache.ehtp),\n          exception_object->pr_cache.additional);\n      switch (personalityResult) {\n      case _URC_HANDLER_FOUND:\n        // found a catch clause or locals that need destructing in this frame\n        // stop search and remember stack pointer at the frame\n        handlerNotFound = false;\n        // p should have initialized barrier_cache. EHABI #7.3.5\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_HANDLER_FOUND \\n\",\n            static_cast<void *>(exception_object));\n        return _URC_NO_REASON;\n\n      case _URC_CONTINUE_UNWIND:\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_CONTINUE_UNWIND\\n\",\n            static_cast<void *>(exception_object));\n        // continue unwinding\n        break;\n\n      // EHABI #7.3.3\n      case _URC_FAILURE:\n        return _URC_FAILURE;\n\n      default:\n        // something went wrong\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_FATAL_PHASE1_ERROR\\n\",\n            static_cast<void *>(exception_object));\n        return _URC_FATAL_PHASE1_ERROR;\n      }\n    }\n  }\n  return _URC_NO_REASON;\n}\n\nstatic _Unwind_Reason_Code unwind_phase2(unw_context_t *uc,\n                                         _Unwind_Exception *exception_object,\n                                         bool resume) {\n  // See comment at the start of unwind_phase1 regarding VRS integrity.\n  unw_cursor_t cursor2;\n  unw_init_local(&cursor2, uc);\n\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p)\\n\",\n                             static_cast<void *>(exception_object));\n  int frame_count = 0;\n\n  // Walk each frame until we reach where search phase said to stop.\n  while (true) {\n    // Ask libuwind to get next frame (skip over first which is\n    // _Unwind_RaiseException or _Unwind_Resume).\n    //\n    // Resume only ever makes sense for 1 frame.\n    _Unwind_State state =\n        resume ? _US_UNWIND_FRAME_RESUME : _US_UNWIND_FRAME_STARTING;\n    if (resume && frame_count == 1) {\n      // On a resume, first unwind the _Unwind_Resume() frame. The next frame\n      // is now the landing pad for the cleanup from a previous execution of\n      // phase2. To continue unwindingly correctly, replace VRS[15] with the\n      // IP of the frame that the previous run of phase2 installed the context\n      // for. After this, continue unwinding as if normal.\n      //\n      // See #7.4.6 for details.\n      unw_set_reg(&cursor2, UNW_REG_IP,\n                  exception_object->unwinder_cache.reserved2);\n      resume = false;\n    }\n\n    int stepResult = unw_step(&cursor2);\n    if (stepResult == 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step() reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_END_OF_STACK;\n    } else if (stepResult < 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step failed => \"\n                                 \"_URC_FATAL_PHASE1_ERROR\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // Get info about this frame.\n    unw_word_t sp;\n    unw_proc_info_t frameInfo;\n    unw_get_reg(&cursor2, UNW_REG_SP, &sp);\n    if (unw_get_proc_info(&cursor2, &frameInfo) != UNW_ESUCCESS) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_get_proc_info \"\n                                 \"failed => _URC_FATAL_PHASE1_ERROR\\n\",\n                                 static_cast<void *>(exception_object));\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // When tracing, print state information.\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionBuf[512];\n      const char *functionName = functionBuf;\n      unw_word_t offset;\n      if ((unw_get_proc_name(&cursor2, functionBuf, sizeof(functionBuf),\n                             &offset) != UNW_ESUCCESS) ||\n          (frameInfo.start_ip + offset > frameInfo.end_ip))\n        functionName = \".anonymous.\";\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase2(ex_ojb=%p): start_ip=0x%llX, func=%s, sp=0x%llX, \"\n          \"lsda=0x%llX, personality=0x%llX\\n\",\n          static_cast<void *>(exception_object), (long long)frameInfo.start_ip,\n          functionName, (long long)sp, (long long)frameInfo.lsda,\n          (long long)frameInfo.handler);\n    }\n\n    // If there is a personality routine, tell it we are unwinding.\n    if (frameInfo.handler != 0) {\n      __personality_routine p =\n          (__personality_routine)(long)(frameInfo.handler);\n      struct _Unwind_Context *context = (struct _Unwind_Context *)(&cursor2);\n      // EHABI #7.2\n      exception_object->pr_cache.fnstart = frameInfo.start_ip;\n      exception_object->pr_cache.ehtp =\n          (_Unwind_EHT_Header *)frameInfo.unwind_info;\n      exception_object->pr_cache.additional = frameInfo.flags;\n      _Unwind_Reason_Code personalityResult =\n          (*p)(state, exception_object, context);\n      switch (personalityResult) {\n      case _URC_CONTINUE_UNWIND:\n        // Continue unwinding\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase2(ex_ojb=%p): _URC_CONTINUE_UNWIND\\n\",\n            static_cast<void *>(exception_object));\n        // EHABI #7.2\n        if (sp == exception_object->barrier_cache.sp) {\n          // Phase 1 said we would stop at this frame, but we did not...\n          _LIBUNWIND_ABORT(\"during phase1 personality function said it would \"\n                           \"stop here, but now in phase2 it did not stop here\");\n        }\n        break;\n      case _URC_INSTALL_CONTEXT:\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase2(ex_ojb=%p): _URC_INSTALL_CONTEXT\\n\",\n            static_cast<void *>(exception_object));\n        // Personality routine says to transfer control to landing pad.\n        // We may get control back if landing pad calls _Unwind_Resume().\n        if (_LIBUNWIND_TRACING_UNWINDING) {\n          unw_word_t pc;\n          unw_get_reg(&cursor2, UNW_REG_IP, &pc);\n          unw_get_reg(&cursor2, UNW_REG_SP, &sp);\n          _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): re-entering \"\n                                     \"user code with ip=0x%llX, sp=0x%llX\\n\",\n                                     static_cast<void *>(exception_object),\n                                     (long long)pc, (long long)sp);\n        }\n\n        {\n          // EHABI #7.4.1 says we need to preserve pc for when _Unwind_Resume\n          // is called back, to find this same frame.\n          unw_word_t pc;\n          unw_get_reg(&cursor2, UNW_REG_IP, &pc);\n          exception_object->unwinder_cache.reserved2 = (uint32_t)pc;\n        }\n        unw_resume(&cursor2);\n        // unw_resume() only returns if there was an error.\n        return _URC_FATAL_PHASE2_ERROR;\n\n      // # EHABI #7.4.3\n      case _URC_FAILURE:\n        abort();\n\n      default:\n        // Personality routine returned an unknown result code.\n        _LIBUNWIND_DEBUG_LOG(\"personality function returned unknown result %d\",\n                      personalityResult);\n        return _URC_FATAL_PHASE2_ERROR;\n      }\n    }\n    frame_count++;\n  }\n\n  // Clean up phase did not resume at the frame that the search phase\n  // said it would...\n  return _URC_FATAL_PHASE2_ERROR;\n}\n\n/// Called by __cxa_throw.  Only returns if there is a fatal error.\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_RaiseException(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_RaiseException(ex_obj=%p)\\n\",\n                       static_cast<void *>(exception_object));\n  unw_context_t uc;\n  unw_getcontext(&uc);\n\n  // This field for is for compatibility with GCC to say this isn't a forced\n  // unwind. EHABI #7.2\n  exception_object->unwinder_cache.reserved1 = 0;\n\n  // phase 1: the search phase\n  _Unwind_Reason_Code phase1 = unwind_phase1(&uc, exception_object);\n  if (phase1 != _URC_NO_REASON)\n    return phase1;\n\n  // phase 2: the clean up phase\n  return unwind_phase2(&uc, exception_object, false);\n}\n\n_LIBUNWIND_EXPORT void _Unwind_Complete(_Unwind_Exception* exception_object) {\n  // This is to be called when exception handling completes to give us a chance\n  // to perform any housekeeping. EHABI #7.2. But we have nothing to do here.\n  (void)exception_object;\n}\n\n/// When _Unwind_RaiseException() is in phase2, it hands control\n/// to the personality function at each frame.  The personality\n/// may force a jump to a landing pad in that function, the landing\n/// pad code may then call _Unwind_Resume() to continue with the\n/// unwinding.  Note: the call to _Unwind_Resume() is from compiler\n/// geneated user code.  All other _Unwind_* routines are called\n/// by the C++ runtime __cxa_* routines.\n///\n/// Note: re-throwing an exception (as opposed to continuing the unwind)\n/// is implemented by having the code call __cxa_rethrow() which\n/// in turn calls _Unwind_Resume_or_Rethrow().\n_LIBUNWIND_EXPORT void\n_Unwind_Resume(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_Resume(ex_obj=%p)\\n\",\n                       static_cast<void *>(exception_object));\n  unw_context_t uc;\n  unw_getcontext(&uc);\n\n  // _Unwind_RaiseException on EHABI will always set the reserved1 field to 0,\n  // which is in the same position as private_1 below.\n  // TODO(ajwong): Who wronte the above? Why is it true?\n  unwind_phase2(&uc, exception_object, true);\n\n  // Clients assume _Unwind_Resume() does not return, so all we can do is abort.\n  _LIBUNWIND_ABORT(\"_Unwind_Resume() can't return\");\n}\n\n/// Called by personality handler during phase 2 to get LSDA for current frame.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_proc_info_t frameInfo;\n  uintptr_t result = 0;\n  if (unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS)\n    result = (uintptr_t)frameInfo.lsda;\n  _LIBUNWIND_TRACE_API(\n      \"_Unwind_GetLanguageSpecificData(context=%p) => 0x%llx\\n\",\n      static_cast<void *>(context), (long long)result);\n  if (result != 0) {\n    if (*((uint8_t *)result) != 0xFF)\n      _LIBUNWIND_DEBUG_LOG(\"lsda at 0x%llx does not start with 0xFF\\n\",\n                           (long long)result);\n  }\n  return result;\n}\n\nstatic uint64_t ValueAsBitPattern(_Unwind_VRS_DataRepresentation representation,\n                                  void* valuep) {\n  uint64_t value = 0;\n  switch (representation) {\n    case _UVRSD_UINT32:\n    case _UVRSD_FLOAT:\n      memcpy(&value, valuep, sizeof(uint32_t));\n      break;\n\n    case _UVRSD_VFPX:\n    case _UVRSD_UINT64:\n    case _UVRSD_DOUBLE:\n      memcpy(&value, valuep, sizeof(uint64_t));\n      break;\n  }\n  return value;\n}\n\n_Unwind_VRS_Result\n_Unwind_VRS_Set(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,\n                uint32_t regno, _Unwind_VRS_DataRepresentation representation,\n                void *valuep) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_VRS_Set(context=%p, regclass=%d, reg=%d, \"\n                       \"rep=%d, value=0x%llX)\\n\",\n                       static_cast<void *>(context), regclass, regno,\n                       representation,\n                       ValueAsBitPattern(representation, valuep));\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  switch (regclass) {\n    case _UVRSC_CORE:\n      if (representation != _UVRSD_UINT32 || regno > 15)\n        return _UVRSR_FAILED;\n      return unw_set_reg(cursor, (unw_regnum_t)(UNW_ARM_R0 + regno),\n                         *(unw_word_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_WMMXC:\n      if (representation != _UVRSD_UINT32 || regno > 3)\n        return _UVRSR_FAILED;\n      return unw_set_reg(cursor, (unw_regnum_t)(UNW_ARM_WC0 + regno),\n                         *(unw_word_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_VFP:\n      if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE)\n        return _UVRSR_FAILED;\n      if (representation == _UVRSD_VFPX) {\n        // Can only touch d0-15 with FSTMFDX.\n        if (regno > 15)\n          return _UVRSR_FAILED;\n        unw_save_vfp_as_X(cursor);\n      } else {\n        if (regno > 31)\n          return _UVRSR_FAILED;\n      }\n      return unw_set_fpreg(cursor, (unw_regnum_t)(UNW_ARM_D0 + regno),\n                           *(unw_fpreg_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_WMMXD:\n      if (representation != _UVRSD_DOUBLE || regno > 31)\n        return _UVRSR_FAILED;\n      return unw_set_fpreg(cursor, (unw_regnum_t)(UNW_ARM_WR0 + regno),\n                           *(unw_fpreg_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n  }\n  _LIBUNWIND_ABORT(\"unsupported register class\");\n}\n\nstatic _Unwind_VRS_Result\n_Unwind_VRS_Get_Internal(_Unwind_Context *context,\n                         _Unwind_VRS_RegClass regclass, uint32_t regno,\n                         _Unwind_VRS_DataRepresentation representation,\n                         void *valuep) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  switch (regclass) {\n    case _UVRSC_CORE:\n      if (representation != _UVRSD_UINT32 || regno > 15)\n        return _UVRSR_FAILED;\n      return unw_get_reg(cursor, (unw_regnum_t)(UNW_ARM_R0 + regno),\n                         (unw_word_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_WMMXC:\n      if (representation != _UVRSD_UINT32 || regno > 3)\n        return _UVRSR_FAILED;\n      return unw_get_reg(cursor, (unw_regnum_t)(UNW_ARM_WC0 + regno),\n                         (unw_word_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_VFP:\n      if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE)\n        return _UVRSR_FAILED;\n      if (representation == _UVRSD_VFPX) {\n        // Can only touch d0-15 with FSTMFDX.\n        if (regno > 15)\n          return _UVRSR_FAILED;\n        unw_save_vfp_as_X(cursor);\n      } else {\n        if (regno > 31)\n          return _UVRSR_FAILED;\n      }\n      return unw_get_fpreg(cursor, (unw_regnum_t)(UNW_ARM_D0 + regno),\n                           (unw_fpreg_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n    case _UVRSC_WMMXD:\n      if (representation != _UVRSD_DOUBLE || regno > 31)\n        return _UVRSR_FAILED;\n      return unw_get_fpreg(cursor, (unw_regnum_t)(UNW_ARM_WR0 + regno),\n                           (unw_fpreg_t *)valuep) == UNW_ESUCCESS\n                 ? _UVRSR_OK\n                 : _UVRSR_FAILED;\n  }\n  _LIBUNWIND_ABORT(\"unsupported register class\");\n}\n\n_Unwind_VRS_Result _Unwind_VRS_Get(\n    _Unwind_Context *context,\n    _Unwind_VRS_RegClass regclass,\n    uint32_t regno,\n    _Unwind_VRS_DataRepresentation representation,\n    void *valuep) {\n  _Unwind_VRS_Result result =\n      _Unwind_VRS_Get_Internal(context, regclass, regno, representation,\n                               valuep);\n  _LIBUNWIND_TRACE_API(\"_Unwind_VRS_Get(context=%p, regclass=%d, reg=%d, \"\n                       \"rep=%d, value=0x%llX, result = %d)\\n\",\n                       static_cast<void *>(context), regclass, regno,\n                       representation,\n                       ValueAsBitPattern(representation, valuep), result);\n  return result;\n}\n\n_Unwind_VRS_Result\n_Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,\n                uint32_t discriminator,\n                _Unwind_VRS_DataRepresentation representation) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_VRS_Pop(context=%p, regclass=%d, \"\n                       \"discriminator=%d, representation=%d)\\n\",\n                       static_cast<void *>(context), regclass, discriminator,\n                       representation);\n  switch (regclass) {\n    case _UVRSC_CORE:\n    case _UVRSC_WMMXC: {\n      if (representation != _UVRSD_UINT32)\n        return _UVRSR_FAILED;\n      // When popping SP from the stack, we don't want to override it from the\n      // computed new stack location. See EHABI #7.5.4 table 3.\n      bool poppedSP = false;\n      uint32_t* sp;\n      if (_Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP,\n                          _UVRSD_UINT32, &sp) != _UVRSR_OK) {\n        return _UVRSR_FAILED;\n      }\n      for (uint32_t i = 0; i < 16; ++i) {\n        if (!(discriminator & static_cast<uint32_t>(1 << i)))\n          continue;\n        uint32_t value = *sp++;\n        if (regclass == _UVRSC_CORE && i == 13)\n          poppedSP = true;\n        if (_Unwind_VRS_Set(context, regclass, i,\n                            _UVRSD_UINT32, &value) != _UVRSR_OK) {\n          return _UVRSR_FAILED;\n        }\n      }\n      if (!poppedSP) {\n        return _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP,\n                               _UVRSD_UINT32, &sp);\n      }\n      return _UVRSR_OK;\n    }\n    case _UVRSC_VFP:\n    case _UVRSC_WMMXD: {\n      if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE)\n        return _UVRSR_FAILED;\n      uint32_t first = discriminator >> 16;\n      uint32_t count = discriminator & 0xffff;\n      uint32_t end = first+count;\n      uint32_t* sp;\n      if (_Unwind_VRS_Get(context, _UVRSC_CORE, UNW_ARM_SP,\n                          _UVRSD_UINT32, &sp) != _UVRSR_OK) {\n        return _UVRSR_FAILED;\n      }\n      // For _UVRSD_VFPX, we're assuming the data is stored in FSTMX \"standard\n      // format 1\", which is equivalent to FSTMD + a padding word.\n      for (uint32_t i = first; i < end; ++i) {\n        // SP is only 32-bit aligned so don't copy 64-bit at a time.\n        uint64_t value = *sp++;\n        value |= ((uint64_t)(*sp++)) << 32;\n        if (_Unwind_VRS_Set(context, regclass, i, representation, &value) !=\n            _UVRSR_OK)\n          return _UVRSR_FAILED;\n      }\n      if (representation == _UVRSD_VFPX)\n        ++sp;\n      return _Unwind_VRS_Set(context, _UVRSC_CORE, UNW_ARM_SP, _UVRSD_UINT32,\n                             &sp);\n    }\n  }\n  _LIBUNWIND_ABORT(\"unsupported register class\");\n}\n\n/// Called by personality handler during phase 2 to find the start of the\n/// function.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetRegionStart(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_proc_info_t frameInfo;\n  uintptr_t result = 0;\n  if (unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS)\n    result = (uintptr_t)frameInfo.start_ip;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetRegionStart(context=%p) => 0x%llX\\n\",\n                       static_cast<void *>(context), (long long)result);\n  return result;\n}\n\n\n/// Called by personality handler during phase 2 if a foreign exception\n// is caught.\n_LIBUNWIND_EXPORT void\n_Unwind_DeleteException(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_DeleteException(ex_obj=%p)\\n\",\n                       static_cast<void *>(exception_object));\n  if (exception_object->exception_cleanup != NULL)\n    (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT,\n                                           exception_object);\n}\n\n#endif  // LIBCXXABI_ARM_EHABI\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/Unwind-EHABI.h",
    "content": "//===------------------------- Unwind-EHABI.hpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __UNWIND_EHABI_H__\n#define __UNWIND_EHABI_H__\n\n#include <__cxxabi_config.h>\n\n#if LIBCXXABI_ARM_EHABI\n\n#include <stdint.h>\n#include <unwind.h>\n\n// Unable to unwind in the ARM index table (section 5 EHABI).\n#define UNW_EXIDX_CANTUNWIND 0x1\n\nstatic inline uint32_t signExtendPrel31(uint32_t data) {\n  return data | ((data & 0x40000000u) << 1);\n}\n\nstatic inline uint32_t readPrel31(const uint32_t *data) {\n  return (((uint32_t)(uintptr_t)data) + signExtendPrel31(*data));\n}\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern _Unwind_Reason_Code __aeabi_unwind_cpp_pr0(\n    _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context);\n\nextern _Unwind_Reason_Code __aeabi_unwind_cpp_pr1(\n    _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context);\n\nextern _Unwind_Reason_Code __aeabi_unwind_cpp_pr2(\n    _Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context);\n\n#if defined(__cplusplus)\n} // extern \"C\"\n#endif\n\n#endif // LIBCXXABI_ARM_EHABI\n\n#endif  // __UNWIND_EHABI_H__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/Unwind-sjlj.c",
    "content": "//===--------------------------- Unwind-sjlj.c ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Implements setjump-longjump based C++ exceptions\n//\n//===----------------------------------------------------------------------===//\n\n#include <unwind.h>\n\n#include <stdint.h>\n#include <stdbool.h>\n#include <stdlib.h>\n\n#include \"config.h\"\n#include \"unwind_ext.h\"\n\n//\n// 32-bit iOS uses setjump/longjump based C++ exceptions.\n// Other architectures use \"zero cost\" exceptions.\n//\n// With SJLJ based exceptions, any function that has a catch clause or needs to\n// do any clean up when an exception propagates through it, needs to call \n// _Unwind_SjLj_Register() at the start of the function and \n// _Unwind_SjLj_Unregister() at the end.  The register function is called with \n// the address of a block of memory in the function's stack frame.  The runtime\n// keeps a linked list (stack) of these blocks - one per thread.  The calling \n// function also sets the personality and lsda fields of the block.\n//\n\n#if _LIBUNWIND_BUILD_SJLJ_APIS\n\nstruct _Unwind_FunctionContext {\n  // next function in stack of handlers\n  struct _Unwind_FunctionContext *prev;\n\n  // set by calling function before registering to be the landing pad\n  uintptr_t                       resumeLocation;\n\n  // set by personality handler to be parameters passed to landing pad function\n  uintptr_t                       resumeParameters[4];\n\n  // set by calling function before registering\n  __personality_routine           personality; // arm offset=24\n  uintptr_t                       lsda;        // arm offset=28\n\n  // variable length array, contains registers to restore\n  // 0 = r7, 1 = pc, 2 = sp\n  void                           *jbuf[];\n};\n\n\n/// Called at start of each function that catches exceptions\n_LIBUNWIND_EXPORT void\n_Unwind_SjLj_Register(struct _Unwind_FunctionContext *fc) {\n  fc->prev = __Unwind_SjLj_GetTopOfFunctionStack();\n  __Unwind_SjLj_SetTopOfFunctionStack(fc);\n}\n\n\n/// Called at end of each function that catches exceptions\n_LIBUNWIND_EXPORT void\n_Unwind_SjLj_Unregister(struct _Unwind_FunctionContext *fc) {\n  __Unwind_SjLj_SetTopOfFunctionStack(fc->prev);\n}\n\n\nstatic _Unwind_Reason_Code\nunwind_phase1(struct _Unwind_Exception *exception_object) {\n  _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack();\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1: initial function-context=%p\\n\", c);\n\n  // walk each frame looking for a place to stop\n  for (bool handlerNotFound = true; handlerNotFound; c = c->prev) {\n\n    // check for no more frames\n    if (c == NULL) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                  exception_object);\n      return _URC_END_OF_STACK;\n    }\n\n    _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1: function-context=%p\\n\", c);\n    // if there is a personality routine, ask it if it will want to stop at this\n    // frame\n    if (c->personality != NULL) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): calling \"\n                                \"personality function %p\\n\",\n                                 exception_object, c->personality);\n      _Unwind_Reason_Code personalityResult = (*c->personality)(\n          1, _UA_SEARCH_PHASE, exception_object->exception_class,\n          exception_object, (struct _Unwind_Context *)c);\n      switch (personalityResult) {\n      case _URC_HANDLER_FOUND:\n        // found a catch clause or locals that need destructing in this frame\n        // stop search and remember function context\n        handlerNotFound = false;\n        exception_object->private_2 = (uintptr_t) c;\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): \"\n                                   \"_URC_HANDLER_FOUND\\n\", exception_object);\n        return _URC_NO_REASON;\n\n      case _URC_CONTINUE_UNWIND:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): \"\n                                   \"_URC_CONTINUE_UNWIND\\n\", exception_object);\n        // continue unwinding\n        break;\n\n      default:\n        // something went wrong\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_FATAL_PHASE1_ERROR\\n\",\n            exception_object);\n        return _URC_FATAL_PHASE1_ERROR;\n      }\n    }\n  }\n  return _URC_NO_REASON;\n}\n\n\nstatic _Unwind_Reason_Code\nunwind_phase2(struct _Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p)\\n\", exception_object);\n\n  // walk each frame until we reach where search phase said to stop\n  _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack();\n  while (true) {\n    _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2s(ex_ojb=%p): context=%p\\n\",\n                              exception_object, c);\n\n    // check for no more frames\n    if (c == NULL) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step() reached \"\n                                \"bottom => _URC_END_OF_STACK\\n\",\n                                 exception_object);\n      return _URC_END_OF_STACK;\n    }\n\n    // if there is a personality routine, tell it we are unwinding\n    if (c->personality != NULL) {\n      _Unwind_Action action = _UA_CLEANUP_PHASE;\n      if ((uintptr_t) c == exception_object->private_2)\n        action = (_Unwind_Action)(\n            _UA_CLEANUP_PHASE |\n            _UA_HANDLER_FRAME); // tell personality this was the frame it marked\n                                // in phase 1\n      _Unwind_Reason_Code personalityResult =\n          (*c->personality)(1, action, exception_object->exception_class,\n                            exception_object, (struct _Unwind_Context *)c);\n      switch (personalityResult) {\n      case _URC_CONTINUE_UNWIND:\n        // continue unwinding\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase2(ex_ojb=%p): _URC_CONTINUE_UNWIND\\n\",\n            exception_object);\n        if ((uintptr_t) c == exception_object->private_2) {\n          // phase 1 said we would stop at this frame, but we did not...\n          _LIBUNWIND_ABORT(\"during phase1 personality function said it would \"\n                           \"stop here, but now if phase2 it did not stop here\");\n        }\n        break;\n      case _URC_INSTALL_CONTEXT:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): \"\n                                  \"_URC_INSTALL_CONTEXT, will resume at \"\n                                  \"landing pad %p\\n\",\n                                  exception_object, c->jbuf[1]);\n        // personality routine says to transfer control to landing pad\n        // we may get control back if landing pad calls _Unwind_Resume()\n        __Unwind_SjLj_SetTopOfFunctionStack(c);\n        __builtin_longjmp(c->jbuf, 1);\n        // unw_resume() only returns if there was an error\n        return _URC_FATAL_PHASE2_ERROR;\n      default:\n        // something went wrong\n        _LIBUNWIND_DEBUG_LOG(\"personality function returned unknown result %d\",\n                      personalityResult);\n        return _URC_FATAL_PHASE2_ERROR;\n      }\n    }\n    c = c->prev;\n  }\n\n  // clean up phase did not resume at the frame that the search phase said it\n  // would\n  return _URC_FATAL_PHASE2_ERROR;\n}\n\n\nstatic _Unwind_Reason_Code\nunwind_phase2_forced(struct _Unwind_Exception *exception_object,\n                     _Unwind_Stop_Fn stop, void *stop_parameter) {\n  // walk each frame until we reach where search phase said to stop\n  _Unwind_FunctionContext_t c = __Unwind_SjLj_GetTopOfFunctionStack();\n  while (true) {\n\n    // get next frame (skip over first which is _Unwind_RaiseException)\n    if (c == NULL) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step() reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                 exception_object);\n      return _URC_END_OF_STACK;\n    }\n\n    // call stop function at each frame\n    _Unwind_Action action =\n        (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE);\n    _Unwind_Reason_Code stopResult =\n        (*stop)(1, action, exception_object->exception_class, exception_object,\n                (struct _Unwind_Context *)c, stop_parameter);\n    _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                               \"stop function returned %d\\n\",\n                                exception_object, stopResult);\n    if (stopResult != _URC_NO_REASON) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                 \"stopped by stop function\\n\",\n                                  exception_object);\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // if there is a personality routine, tell it we are unwinding\n    if (c->personality != NULL) {\n      __personality_routine p = (__personality_routine) c->personality;\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                 \"calling personality function %p\\n\",\n                                  exception_object, p);\n      _Unwind_Reason_Code personalityResult =\n          (*p)(1, action, exception_object->exception_class, exception_object,\n               (struct _Unwind_Context *)c);\n      switch (personalityResult) {\n      case _URC_CONTINUE_UNWIND:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p):  \"\n                                   \"personality returned _URC_CONTINUE_UNWIND\\n\",\n                                    exception_object);\n        // destructors called, continue unwinding\n        break;\n      case _URC_INSTALL_CONTEXT:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                   \"personality returned _URC_INSTALL_CONTEXT\\n\",\n                                    exception_object);\n        // we may get control back if landing pad calls _Unwind_Resume()\n        __Unwind_SjLj_SetTopOfFunctionStack(c);\n        __builtin_longjmp(c->jbuf, 1);\n        break;\n      default:\n        // something went wrong\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                   \"personality returned %d, \"\n                                   \"_URC_FATAL_PHASE2_ERROR\\n\",\n                                    exception_object, personalityResult);\n        return _URC_FATAL_PHASE2_ERROR;\n      }\n    }\n    c = c->prev;\n  }\n\n  // call stop function one last time and tell it we've reached the end of the\n  // stack\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): calling stop \"\n                        \"function with _UA_END_OF_STACK\\n\",\n                        exception_object);\n  _Unwind_Action lastAction =\n      (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK);\n  (*stop)(1, lastAction, exception_object->exception_class, exception_object,\n          (struct _Unwind_Context *)c, stop_parameter);\n\n  // clean up phase did not resume at the frame that the search phase said it\n  // would\n  return _URC_FATAL_PHASE2_ERROR;\n}\n\n\n/// Called by __cxa_throw.  Only returns if there is a fatal error\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_SjLj_RaiseException(struct _Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SjLj_RaiseException(ex_obj=%p)\\n\", exception_object);\n\n  // mark that this is a non-forced unwind, so _Unwind_Resume() can do the right\n  // thing\n  exception_object->private_1 = 0;\n  exception_object->private_2 = 0;\n\n  // phase 1: the search phase\n  _Unwind_Reason_Code phase1 = unwind_phase1(exception_object);\n  if (phase1 != _URC_NO_REASON)\n    return phase1;\n\n  // phase 2: the clean up phase\n  return unwind_phase2(exception_object);\n}\n\n\n\n/// When _Unwind_RaiseException() is in phase2, it hands control\n/// to the personality function at each frame.  The personality\n/// may force a jump to a landing pad in that function, the landing\n/// pad code may then call _Unwind_Resume() to continue with the\n/// unwinding.  Note: the call to _Unwind_Resume() is from compiler\n/// geneated user code.  All other _Unwind_* routines are called\n/// by the C++ runtime __cxa_* routines.\n///\n/// Re-throwing an exception is implemented by having the code call\n/// __cxa_rethrow() which in turn calls _Unwind_Resume_or_Rethrow()\n_LIBUNWIND_EXPORT void\n_Unwind_SjLj_Resume(struct _Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SjLj_Resume(ex_obj=%p)\\n\", exception_object);\n\n  if (exception_object->private_1 != 0)\n    unwind_phase2_forced(exception_object,\n                         (_Unwind_Stop_Fn) exception_object->private_1,\n                         (void *)exception_object->private_2);\n  else\n    unwind_phase2(exception_object);\n\n  // clients assume _Unwind_Resume() does not return, so all we can do is abort.\n  _LIBUNWIND_ABORT(\"_Unwind_SjLj_Resume() can't return\");\n}\n\n\n///  Called by __cxa_rethrow().\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"__Unwind_SjLj_Resume_or_Rethrow(ex_obj=%p), \"\n                             \"private_1=%ld\\n\",\n                              exception_object, exception_object->private_1);\n  // If this is non-forced and a stopping place was found, then this is a\n  // re-throw.\n  // Call _Unwind_RaiseException() as if this was a new exception.\n  if (exception_object->private_1 == 0) {\n    return _Unwind_SjLj_RaiseException(exception_object);\n    // should return if there is no catch clause, so that __cxa_rethrow can call\n    // std::terminate()\n  }\n\n  // Call through to _Unwind_Resume() which distiguishes between forced and\n  // regular exceptions.\n  _Unwind_SjLj_Resume(exception_object);\n  _LIBUNWIND_ABORT(\"__Unwind_SjLj_Resume_or_Rethrow() called \"\n                    \"_Unwind_SjLj_Resume() which unexpectedly returned\");\n}\n\n\n/// Called by personality handler during phase 2 to get LSDA for current frame.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) {\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetLanguageSpecificData(context=%p) \"\n                             \"=> 0x%0lX\\n\",  context, ufc->lsda);\n  return ufc->lsda;\n}\n\n\n/// Called by personality handler during phase 2 to get register values.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetGR(struct _Unwind_Context *context,\n                                          int index) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetGR(context=%p, reg=%d)\\n\",\n                             context, index);\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  return ufc->resumeParameters[index];\n}\n\n\n/// Called by personality handler during phase 2 to alter register values.\n_LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index,\n                                     uintptr_t new_value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetGR(context=%p, reg=%d, value=0x%0lX)\\n\"\n                            , context, index, new_value);\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  ufc->resumeParameters[index] = new_value;\n}\n\n\n/// Called by personality handler during phase 2 to get instruction pointer.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetIP(context=%p) => 0x%lX\\n\", context,\n                  ufc->resumeLocation + 1);\n  return ufc->resumeLocation + 1;\n}\n\n\n/// Called by personality handler during phase 2 to get instruction pointer.\n/// ipBefore is a boolean that says if IP is already adjusted to be the call\n/// site address.  Normally IP is the return address.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context,\n                                              int *ipBefore) {\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  *ipBefore = 0;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetIPInfo(context=%p, %p) => 0x%lX\\n\",\n                             context, ipBefore, ufc->resumeLocation + 1);\n  return ufc->resumeLocation + 1;\n}\n\n\n/// Called by personality handler during phase 2 to alter instruction pointer.\n_LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *context,\n                                     uintptr_t new_value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetIP(context=%p, value=0x%0lX)\\n\",\n                             context, new_value);\n  _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n  ufc->resumeLocation = new_value - 1;\n}\n\n\n/// Called by personality handler during phase 2 to find the start of the\n/// function.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetRegionStart(struct _Unwind_Context *context) {\n  // Not supported or needed for sjlj based unwinding\n  (void)context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetRegionStart(context=%p)\\n\", context);\n  return 0;\n}\n\n\n/// Called by personality handler during phase 2 if a foreign exception\n/// is caught.\n_LIBUNWIND_EXPORT void\n_Unwind_DeleteException(struct _Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_DeleteException(ex_obj=%p)\\n\",\n                              exception_object);\n  if (exception_object->exception_cleanup != NULL)\n    (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT,\n                                           exception_object);\n}\n\n\n\n/// Called by personality handler during phase 2 to get base address for data\n/// relative encodings.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetDataRelBase(struct _Unwind_Context *context) {\n  // Not supported or needed for sjlj based unwinding\n  (void)context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetDataRelBase(context=%p)\\n\", context);\n  _LIBUNWIND_ABORT(\"_Unwind_GetDataRelBase() not implemented\");\n}\n\n\n/// Called by personality handler during phase 2 to get base address for text\n/// relative encodings.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetTextRelBase(struct _Unwind_Context *context) {\n  // Not supported or needed for sjlj based unwinding\n  (void)context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetTextRelBase(context=%p)\\n\", context);\n  _LIBUNWIND_ABORT(\"_Unwind_GetTextRelBase() not implemented\");\n}\n\n\n/// Called by personality handler to get \"Call Frame Area\" for current frame.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetCFA(struct _Unwind_Context *context) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetCFA(context=%p)\\n\", context);\n  if (context != NULL) {\n    _Unwind_FunctionContext_t ufc = (_Unwind_FunctionContext_t) context;\n    // Setjmp/longjmp based exceptions don't have a true CFA.\n    // Instead, the SP in the jmpbuf is the closest approximation.\n    return (uintptr_t) ufc->jbuf[2];\n  }\n  return 0;\n}\n\n#endif // _LIBUNWIND_BUILD_SJLJ_APIS\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/UnwindCursor.hpp",
    "content": "//===------------------------- UnwindCursor.hpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// C++ interface to lower levels of libuwind\n//===----------------------------------------------------------------------===//\n\n#ifndef __UNWINDCURSOR_HPP__\n#define __UNWINDCURSOR_HPP__\n\n#include <algorithm>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <pthread.h>\n#include <unwind.h>\n\n#ifdef __APPLE__\n  #include <mach-o/dyld.h>\n#endif\n\n#include \"config.h\"\n\n#include \"AddressSpace.hpp\"\n#include \"CompactUnwinder.hpp\"\n#include \"config.h\"\n#include \"DwarfInstructions.hpp\"\n#include \"EHHeaderParser.hpp\"\n#include \"libunwind.h\"\n#include \"Registers.hpp\"\n#include \"Unwind-EHABI.h\"\n\nnamespace libunwind {\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n/// Cache of recently found FDEs.\ntemplate <typename A>\nclass _LIBUNWIND_HIDDEN DwarfFDECache {\n  typedef typename A::pint_t pint_t;\npublic:\n  static pint_t findFDE(pint_t mh, pint_t pc);\n  static void add(pint_t mh, pint_t ip_start, pint_t ip_end, pint_t fde);\n  static void removeAllIn(pint_t mh);\n  static void iterateCacheEntries(void (*func)(unw_word_t ip_start,\n                                               unw_word_t ip_end,\n                                               unw_word_t fde, unw_word_t mh));\n\nprivate:\n\n  struct entry {\n    pint_t mh;\n    pint_t ip_start;\n    pint_t ip_end;\n    pint_t fde;\n  };\n\n  // These fields are all static to avoid needing an initializer.\n  // There is only one instance of this class per process.\n  static pthread_rwlock_t _lock;\n#ifdef __APPLE__\n  static void dyldUnloadHook(const struct mach_header *mh, intptr_t slide);\n  static bool _registeredForDyldUnloads;\n#endif\n  // Can't use std::vector<> here because this code is below libc++.\n  static entry *_buffer;\n  static entry *_bufferUsed;\n  static entry *_bufferEnd;\n  static entry _initialBuffer[64];\n};\n\ntemplate <typename A>\ntypename DwarfFDECache<A>::entry *\nDwarfFDECache<A>::_buffer = _initialBuffer;\n\ntemplate <typename A>\ntypename DwarfFDECache<A>::entry *\nDwarfFDECache<A>::_bufferUsed = _initialBuffer;\n\ntemplate <typename A>\ntypename DwarfFDECache<A>::entry *\nDwarfFDECache<A>::_bufferEnd = &_initialBuffer[64];\n\ntemplate <typename A>\ntypename DwarfFDECache<A>::entry DwarfFDECache<A>::_initialBuffer[64];\n\ntemplate <typename A>\npthread_rwlock_t DwarfFDECache<A>::_lock = PTHREAD_RWLOCK_INITIALIZER;\n\n#ifdef __APPLE__\ntemplate <typename A>\nbool DwarfFDECache<A>::_registeredForDyldUnloads = false;\n#endif\n\ntemplate <typename A>\ntypename A::pint_t DwarfFDECache<A>::findFDE(pint_t mh, pint_t pc) {\n  pint_t result = 0;\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_rdlock(&_lock));\n  for (entry *p = _buffer; p < _bufferUsed; ++p) {\n    if ((mh == p->mh) || (mh == 0)) {\n      if ((p->ip_start <= pc) && (pc < p->ip_end)) {\n        result = p->fde;\n        break;\n      }\n    }\n  }\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_unlock(&_lock));\n  return result;\n}\n\ntemplate <typename A>\nvoid DwarfFDECache<A>::add(pint_t mh, pint_t ip_start, pint_t ip_end,\n                           pint_t fde) {\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_wrlock(&_lock));\n  if (_bufferUsed >= _bufferEnd) {\n    size_t oldSize = (size_t)(_bufferEnd - _buffer);\n    size_t newSize = oldSize * 4;\n    // Can't use operator new (we are below it).\n    entry *newBuffer = (entry *)malloc(newSize * sizeof(entry));\n    memcpy(newBuffer, _buffer, oldSize * sizeof(entry));\n    if (_buffer != _initialBuffer)\n      free(_buffer);\n    _buffer = newBuffer;\n    _bufferUsed = &newBuffer[oldSize];\n    _bufferEnd = &newBuffer[newSize];\n  }\n  _bufferUsed->mh = mh;\n  _bufferUsed->ip_start = ip_start;\n  _bufferUsed->ip_end = ip_end;\n  _bufferUsed->fde = fde;\n  ++_bufferUsed;\n#ifdef __APPLE__\n  if (!_registeredForDyldUnloads) {\n    _dyld_register_func_for_remove_image(&dyldUnloadHook);\n    _registeredForDyldUnloads = true;\n  }\n#endif\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_unlock(&_lock));\n}\n\ntemplate <typename A>\nvoid DwarfFDECache<A>::removeAllIn(pint_t mh) {\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_wrlock(&_lock));\n  entry *d = _buffer;\n  for (const entry *s = _buffer; s < _bufferUsed; ++s) {\n    if (s->mh != mh) {\n      if (d != s)\n        *d = *s;\n      ++d;\n    }\n  }\n  _bufferUsed = d;\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_unlock(&_lock));\n}\n\n#ifdef __APPLE__\ntemplate <typename A>\nvoid DwarfFDECache<A>::dyldUnloadHook(const struct mach_header *mh, intptr_t ) {\n  removeAllIn((pint_t) mh);\n}\n#endif\n\ntemplate <typename A>\nvoid DwarfFDECache<A>::iterateCacheEntries(void (*func)(\n    unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)) {\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_wrlock(&_lock));\n  for (entry *p = _buffer; p < _bufferUsed; ++p) {\n    (*func)(p->ip_start, p->ip_end, p->fde, p->mh);\n  }\n  _LIBUNWIND_LOG_NON_ZERO(::pthread_rwlock_unlock(&_lock));\n}\n#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n\n#define arrayoffsetof(type, index, field) ((size_t)(&((type *)0)[index].field))\n\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\ntemplate <typename A> class UnwindSectionHeader {\npublic:\n  UnwindSectionHeader(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t version() const {\n    return _addressSpace.get32(_addr +\n                               offsetof(unwind_info_section_header, version));\n  }\n  uint32_t commonEncodingsArraySectionOffset() const {\n    return _addressSpace.get32(_addr +\n                               offsetof(unwind_info_section_header,\n                                        commonEncodingsArraySectionOffset));\n  }\n  uint32_t commonEncodingsArrayCount() const {\n    return _addressSpace.get32(_addr + offsetof(unwind_info_section_header,\n                                                commonEncodingsArrayCount));\n  }\n  uint32_t personalityArraySectionOffset() const {\n    return _addressSpace.get32(_addr + offsetof(unwind_info_section_header,\n                                                personalityArraySectionOffset));\n  }\n  uint32_t personalityArrayCount() const {\n    return _addressSpace.get32(\n        _addr + offsetof(unwind_info_section_header, personalityArrayCount));\n  }\n  uint32_t indexSectionOffset() const {\n    return _addressSpace.get32(\n        _addr + offsetof(unwind_info_section_header, indexSectionOffset));\n  }\n  uint32_t indexCount() const {\n    return _addressSpace.get32(\n        _addr + offsetof(unwind_info_section_header, indexCount));\n  }\n\nprivate:\n  A                     &_addressSpace;\n  typename A::pint_t     _addr;\n};\n\ntemplate <typename A> class UnwindSectionIndexArray {\npublic:\n  UnwindSectionIndexArray(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t functionOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_section_header_index_entry, index,\n                              functionOffset));\n  }\n  uint32_t secondLevelPagesSectionOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_section_header_index_entry, index,\n                              secondLevelPagesSectionOffset));\n  }\n  uint32_t lsdaIndexArraySectionOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_section_header_index_entry, index,\n                              lsdaIndexArraySectionOffset));\n  }\n\nprivate:\n  A                   &_addressSpace;\n  typename A::pint_t   _addr;\n};\n\ntemplate <typename A> class UnwindSectionRegularPageHeader {\npublic:\n  UnwindSectionRegularPageHeader(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t kind() const {\n    return _addressSpace.get32(\n        _addr + offsetof(unwind_info_regular_second_level_page_header, kind));\n  }\n  uint16_t entryPageOffset() const {\n    return _addressSpace.get16(\n        _addr + offsetof(unwind_info_regular_second_level_page_header,\n                         entryPageOffset));\n  }\n  uint16_t entryCount() const {\n    return _addressSpace.get16(\n        _addr +\n        offsetof(unwind_info_regular_second_level_page_header, entryCount));\n  }\n\nprivate:\n  A &_addressSpace;\n  typename A::pint_t _addr;\n};\n\ntemplate <typename A> class UnwindSectionRegularArray {\npublic:\n  UnwindSectionRegularArray(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t functionOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_regular_second_level_entry, index,\n                              functionOffset));\n  }\n  uint32_t encoding(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr +\n        arrayoffsetof(unwind_info_regular_second_level_entry, index, encoding));\n  }\n\nprivate:\n  A &_addressSpace;\n  typename A::pint_t _addr;\n};\n\ntemplate <typename A> class UnwindSectionCompressedPageHeader {\npublic:\n  UnwindSectionCompressedPageHeader(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t kind() const {\n    return _addressSpace.get32(\n        _addr +\n        offsetof(unwind_info_compressed_second_level_page_header, kind));\n  }\n  uint16_t entryPageOffset() const {\n    return _addressSpace.get16(\n        _addr + offsetof(unwind_info_compressed_second_level_page_header,\n                         entryPageOffset));\n  }\n  uint16_t entryCount() const {\n    return _addressSpace.get16(\n        _addr +\n        offsetof(unwind_info_compressed_second_level_page_header, entryCount));\n  }\n  uint16_t encodingsPageOffset() const {\n    return _addressSpace.get16(\n        _addr + offsetof(unwind_info_compressed_second_level_page_header,\n                         encodingsPageOffset));\n  }\n  uint16_t encodingsCount() const {\n    return _addressSpace.get16(\n        _addr + offsetof(unwind_info_compressed_second_level_page_header,\n                         encodingsCount));\n  }\n\nprivate:\n  A &_addressSpace;\n  typename A::pint_t _addr;\n};\n\ntemplate <typename A> class UnwindSectionCompressedArray {\npublic:\n  UnwindSectionCompressedArray(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t functionOffset(uint32_t index) const {\n    return UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(\n        _addressSpace.get32(_addr + index * sizeof(uint32_t)));\n  }\n  uint16_t encodingIndex(uint32_t index) const {\n    return UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(\n        _addressSpace.get32(_addr + index * sizeof(uint32_t)));\n  }\n\nprivate:\n  A &_addressSpace;\n  typename A::pint_t _addr;\n};\n\ntemplate <typename A> class UnwindSectionLsdaArray {\npublic:\n  UnwindSectionLsdaArray(A &addressSpace, typename A::pint_t addr)\n      : _addressSpace(addressSpace), _addr(addr) {}\n\n  uint32_t functionOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_section_header_lsda_index_entry,\n                              index, functionOffset));\n  }\n  uint32_t lsdaOffset(uint32_t index) const {\n    return _addressSpace.get32(\n        _addr + arrayoffsetof(unwind_info_section_header_lsda_index_entry,\n                              index, lsdaOffset));\n  }\n\nprivate:\n  A                   &_addressSpace;\n  typename A::pint_t   _addr;\n};\n#endif // _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n\nclass _LIBUNWIND_HIDDEN AbstractUnwindCursor {\npublic:\n  // NOTE: provide a class specific placement deallocation function (S5.3.4 p20)\n  // This avoids an unnecessary dependency to libc++abi.\n  void operator delete(void *, size_t) {}\n\n  virtual ~AbstractUnwindCursor() {}\n  virtual bool validReg(int) { _LIBUNWIND_ABORT(\"validReg not implemented\"); }\n  virtual unw_word_t getReg(int) { _LIBUNWIND_ABORT(\"getReg not implemented\"); }\n  virtual void setReg(int, unw_word_t) {\n    _LIBUNWIND_ABORT(\"setReg not implemented\");\n  }\n  virtual bool validFloatReg(int) {\n    _LIBUNWIND_ABORT(\"validFloatReg not implemented\");\n  }\n  virtual unw_fpreg_t getFloatReg(int) {\n    _LIBUNWIND_ABORT(\"getFloatReg not implemented\");\n  }\n  virtual void setFloatReg(int, unw_fpreg_t) {\n    _LIBUNWIND_ABORT(\"setFloatReg not implemented\");\n  }\n  virtual int step() { _LIBUNWIND_ABORT(\"step not implemented\"); }\n  virtual void getInfo(unw_proc_info_t *) {\n    _LIBUNWIND_ABORT(\"getInfo not implemented\");\n  }\n  virtual void jumpto() { _LIBUNWIND_ABORT(\"jumpto not implemented\"); }\n  virtual bool isSignalFrame() {\n    _LIBUNWIND_ABORT(\"isSignalFrame not implemented\");\n  }\n  virtual bool getFunctionName(char *, size_t, unw_word_t *) {\n    _LIBUNWIND_ABORT(\"getFunctionName not implemented\");\n  }\n  virtual void setInfoBasedOnIPRegister(bool = false) {\n    _LIBUNWIND_ABORT(\"setInfoBasedOnIPRegister not implemented\");\n  }\n  virtual const char *getRegisterName(int) {\n    _LIBUNWIND_ABORT(\"getRegisterName not implemented\");\n  }\n#ifdef __arm__\n  virtual void saveVFPAsX() { _LIBUNWIND_ABORT(\"saveVFPAsX not implemented\"); }\n#endif\n};\n\n/// UnwindCursor contains all state (including all register values) during\n/// an unwind.  This is normally stack allocated inside a unw_cursor_t.\ntemplate <typename A, typename R>\nclass UnwindCursor : public AbstractUnwindCursor{\n  typedef typename A::pint_t pint_t;\npublic:\n                      UnwindCursor(unw_context_t *context, A &as);\n                      UnwindCursor(A &as, void *threadArg);\n  virtual             ~UnwindCursor() {}\n  virtual bool        validReg(int);\n  virtual unw_word_t  getReg(int);\n  virtual void        setReg(int, unw_word_t);\n  virtual bool        validFloatReg(int);\n  virtual unw_fpreg_t getFloatReg(int);\n  virtual void        setFloatReg(int, unw_fpreg_t);\n  virtual int         step();\n  virtual void        getInfo(unw_proc_info_t *);\n  virtual void        jumpto();\n  virtual bool        isSignalFrame();\n  virtual bool        getFunctionName(char *buf, size_t len, unw_word_t *off);\n  virtual void        setInfoBasedOnIPRegister(bool isReturnAddress = false);\n  virtual const char *getRegisterName(int num);\n#ifdef __arm__\n  virtual void        saveVFPAsX();\n#endif\n\nprivate:\n\n#if LIBCXXABI_ARM_EHABI\n  bool getInfoFromEHABISection(pint_t pc, const UnwindInfoSections &sects);\n#endif\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n  bool getInfoFromDwarfSection(pint_t pc, const UnwindInfoSections &sects,\n                                            uint32_t fdeSectionOffsetHint=0);\n  int stepWithDwarfFDE() {\n    return DwarfInstructions<A, R>::stepWithDwarf(_addressSpace,\n                                              (pint_t)this->getReg(UNW_REG_IP),\n                                              (pint_t)_info.unwind_info,\n                                              _registers);\n  }\n#endif\n\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n  bool getInfoFromCompactEncodingSection(pint_t pc,\n                                            const UnwindInfoSections &sects);\n  int stepWithCompactEncoding() {\n  #if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n    if ( compactSaysUseDwarf() )\n      return stepWithDwarfFDE();\n  #endif\n    R dummy;\n    return stepWithCompactEncoding(dummy);\n  }\n\n  int stepWithCompactEncoding(Registers_x86_64 &) {\n    return CompactUnwinder_x86_64<A>::stepWithCompactEncoding(\n        _info.format, _info.start_ip, _addressSpace, _registers);\n  }\n\n  int stepWithCompactEncoding(Registers_x86 &) {\n    return CompactUnwinder_x86<A>::stepWithCompactEncoding(\n        _info.format, (uint32_t)_info.start_ip, _addressSpace, _registers);\n  }\n\n  int stepWithCompactEncoding(Registers_ppc &) {\n    return UNW_EINVAL;\n  }\n\n  int stepWithCompactEncoding(Registers_arm64 &) {\n    return CompactUnwinder_arm64<A>::stepWithCompactEncoding(\n        _info.format, _info.start_ip, _addressSpace, _registers);\n  }\n\n  bool compactSaysUseDwarf(uint32_t *offset=NULL) const {\n    R dummy;\n    return compactSaysUseDwarf(dummy, offset);\n  }\n\n  bool compactSaysUseDwarf(Registers_x86_64 &, uint32_t *offset) const {\n    if ((_info.format & UNWIND_X86_64_MODE_MASK) == UNWIND_X86_64_MODE_DWARF) {\n      if (offset)\n        *offset = (_info.format & UNWIND_X86_64_DWARF_SECTION_OFFSET);\n      return true;\n    }\n    return false;\n  }\n\n  bool compactSaysUseDwarf(Registers_x86 &, uint32_t *offset) const {\n    if ((_info.format & UNWIND_X86_MODE_MASK) == UNWIND_X86_MODE_DWARF) {\n      if (offset)\n        *offset = (_info.format & UNWIND_X86_DWARF_SECTION_OFFSET);\n      return true;\n    }\n    return false;\n  }\n\n  bool compactSaysUseDwarf(Registers_ppc &, uint32_t *) const {\n    return true;\n  }\n\n  bool compactSaysUseDwarf(Registers_arm64 &, uint32_t *offset) const {\n    if ((_info.format & UNWIND_ARM64_MODE_MASK) == UNWIND_ARM64_MODE_DWARF) {\n      if (offset)\n        *offset = (_info.format & UNWIND_ARM64_DWARF_SECTION_OFFSET);\n      return true;\n    }\n    return false;\n  }\n#endif // _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n  compact_unwind_encoding_t dwarfEncoding() const {\n    R dummy;\n    return dwarfEncoding(dummy);\n  }\n\n  compact_unwind_encoding_t dwarfEncoding(Registers_x86_64 &) const {\n    return UNWIND_X86_64_MODE_DWARF;\n  }\n\n  compact_unwind_encoding_t dwarfEncoding(Registers_x86 &) const {\n    return UNWIND_X86_MODE_DWARF;\n  }\n\n  compact_unwind_encoding_t dwarfEncoding(Registers_ppc &) const {\n    return 0;\n  }\n\n  compact_unwind_encoding_t dwarfEncoding(Registers_arm64 &) const {\n    return UNWIND_ARM64_MODE_DWARF;\n  }\n#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n\n  A               &_addressSpace;\n  R                _registers;\n  unw_proc_info_t  _info;\n  bool             _unwindInfoMissing;\n  bool             _isSignalFrame;\n};\n\n\ntemplate <typename A, typename R>\nUnwindCursor<A, R>::UnwindCursor(unw_context_t *context, A &as)\n    : _addressSpace(as), _registers(context), _unwindInfoMissing(false),\n      _isSignalFrame(false) {\n  static_assert(sizeof(UnwindCursor<A, R>) < sizeof(unw_cursor_t),\n                \"UnwindCursor<> does not fit in unw_cursor_t\");\n  memset(&_info, 0, sizeof(_info));\n}\n\ntemplate <typename A, typename R>\nUnwindCursor<A, R>::UnwindCursor(A &as, void *)\n    : _addressSpace(as), _unwindInfoMissing(false), _isSignalFrame(false) {\n  memset(&_info, 0, sizeof(_info));\n  // FIXME\n  // fill in _registers from thread arg\n}\n\n\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::validReg(int regNum) {\n  return _registers.validRegister(regNum);\n}\n\ntemplate <typename A, typename R>\nunw_word_t UnwindCursor<A, R>::getReg(int regNum) {\n  return _registers.getRegister(regNum);\n}\n\ntemplate <typename A, typename R>\nvoid UnwindCursor<A, R>::setReg(int regNum, unw_word_t value) {\n  _registers.setRegister(regNum, (typename A::pint_t)value);\n}\n\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::validFloatReg(int regNum) {\n  return _registers.validFloatRegister(regNum);\n}\n\ntemplate <typename A, typename R>\nunw_fpreg_t UnwindCursor<A, R>::getFloatReg(int regNum) {\n  return _registers.getFloatRegister(regNum);\n}\n\ntemplate <typename A, typename R>\nvoid UnwindCursor<A, R>::setFloatReg(int regNum, unw_fpreg_t value) {\n  _registers.setFloatRegister(regNum, value);\n}\n\ntemplate <typename A, typename R> void UnwindCursor<A, R>::jumpto() {\n  _registers.jumpto();\n}\n\n#ifdef __arm__\ntemplate <typename A, typename R> void UnwindCursor<A, R>::saveVFPAsX() {\n  _registers.saveVFPAsX();\n}\n#endif\n\ntemplate <typename A, typename R>\nconst char *UnwindCursor<A, R>::getRegisterName(int regNum) {\n  return _registers.getRegisterName(regNum);\n}\n\ntemplate <typename A, typename R> bool UnwindCursor<A, R>::isSignalFrame() {\n  return _isSignalFrame;\n}\n\n#if LIBCXXABI_ARM_EHABI\nstruct EHABIIndexEntry {\n  uint32_t functionOffset;\n  uint32_t data;\n};\n\ntemplate<typename A>\nstruct EHABISectionIterator {\n  typedef EHABISectionIterator _Self;\n\n  typedef std::random_access_iterator_tag iterator_category;\n  typedef typename A::pint_t value_type;\n  typedef typename A::pint_t* pointer;\n  typedef typename A::pint_t& reference;\n  typedef size_t size_type;\n  typedef size_t difference_type;\n\n  static _Self begin(A& addressSpace, const UnwindInfoSections& sects) {\n    return _Self(addressSpace, sects, 0);\n  }\n  static _Self end(A& addressSpace, const UnwindInfoSections& sects) {\n    return _Self(addressSpace, sects, sects.arm_section_length);\n  }\n\n  EHABISectionIterator(A& addressSpace, const UnwindInfoSections& sects, size_t i)\n      : _i(i), _addressSpace(&addressSpace), _sects(&sects) {}\n\n  _Self& operator++() { ++_i; return *this; }\n  _Self& operator+=(size_t a) { _i += a; return *this; }\n  _Self& operator--() { assert(_i > 0); --_i; return *this; }\n  _Self& operator-=(size_t a) { assert(_i >= a); _i -= a; return *this; }\n\n  _Self operator+(size_t a) { _Self out = *this; out._i += a; return out; }\n  _Self operator-(size_t a) { assert(_i >= a); _Self out = *this; out._i -= a; return out; }\n\n  size_t operator-(const _Self& other) { return _i - other._i; }\n\n  bool operator==(const _Self& other) const {\n    assert(_addressSpace == other._addressSpace);\n    assert(_sects == other._sects);\n    return _i == other._i;\n  }\n\n  typename A::pint_t operator*() const { return functionAddress(); }\n\n  typename A::pint_t functionAddress() const {\n    typename A::pint_t indexAddr = _sects->arm_section + arrayoffsetof(\n        EHABIIndexEntry, _i, functionOffset);\n    return indexAddr + signExtendPrel31(_addressSpace->get32(indexAddr));\n  }\n\n  typename A::pint_t dataAddress() {\n    typename A::pint_t indexAddr = _sects->arm_section + arrayoffsetof(\n        EHABIIndexEntry, _i, data);\n    return indexAddr;\n  }\n\n private:\n  size_t _i;\n  A* _addressSpace;\n  const UnwindInfoSections* _sects;\n};\n\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::getInfoFromEHABISection(\n    pint_t pc,\n    const UnwindInfoSections &sects) {\n  EHABISectionIterator<A> begin =\n      EHABISectionIterator<A>::begin(_addressSpace, sects);\n  EHABISectionIterator<A> end =\n      EHABISectionIterator<A>::end(_addressSpace, sects);\n\n  EHABISectionIterator<A> itNextPC = std::upper_bound(begin, end, pc);\n  if (itNextPC == begin || itNextPC == end)\n    return false;\n  EHABISectionIterator<A> itThisPC = itNextPC - 1;\n\n  pint_t thisPC = itThisPC.functionAddress();\n  pint_t nextPC = itNextPC.functionAddress();\n  pint_t indexDataAddr = itThisPC.dataAddress();\n\n  if (indexDataAddr == 0)\n    return false;\n\n  uint32_t indexData = _addressSpace.get32(indexDataAddr);\n  if (indexData == UNW_EXIDX_CANTUNWIND)\n    return false;\n\n  // If the high bit is set, the exception handling table entry is inline inside\n  // the index table entry on the second word (aka |indexDataAddr|). Otherwise,\n  // the table points at an offset in the exception handling table (section 5 EHABI).\n  pint_t exceptionTableAddr;\n  uint32_t exceptionTableData;\n  bool isSingleWordEHT;\n  if (indexData & 0x80000000) {\n    exceptionTableAddr = indexDataAddr;\n    // TODO(ajwong): Should this data be 0?\n    exceptionTableData = indexData;\n    isSingleWordEHT = true;\n  } else {\n    exceptionTableAddr = indexDataAddr + signExtendPrel31(indexData);\n    exceptionTableData = _addressSpace.get32(exceptionTableAddr);\n    isSingleWordEHT = false;\n  }\n\n  // Now we know the 3 things:\n  //   exceptionTableAddr -- exception handler table entry.\n  //   exceptionTableData -- the data inside the first word of the eht entry.\n  //   isSingleWordEHT -- whether the entry is in the index.\n  unw_word_t personalityRoutine = 0xbadf00d;\n  bool scope32 = false;\n  uintptr_t lsda = 0xbadf00d;\n\n  // If the high bit in the exception handling table entry is set, the entry is\n  // in compact form (section 6.3 EHABI).\n  if (exceptionTableData & 0x80000000) {\n    // Grab the index of the personality routine from the compact form.\n    uint32_t choice = (exceptionTableData & 0x0f000000) >> 24;\n    uint32_t extraWords = 0;\n    switch (choice) {\n      case 0:\n        personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr0;\n        extraWords = 0;\n        scope32 = false;\n        break;\n      case 1:\n        personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr1;\n        extraWords = (exceptionTableData & 0x00ff0000) >> 16;\n        scope32 = false;\n        break;\n      case 2:\n        personalityRoutine = (unw_word_t) &__aeabi_unwind_cpp_pr2;\n        extraWords = (exceptionTableData & 0x00ff0000) >> 16;\n        scope32 = true;\n        break;\n      default:\n        _LIBUNWIND_ABORT(\"unknown personality routine\");\n        return false;\n    }\n\n    if (isSingleWordEHT) {\n      if (extraWords != 0) {\n        _LIBUNWIND_ABORT(\"index inlined table detected but pr function \"\n                         \"requires extra words\");\n        return false;\n      }\n    }\n  } else {\n    pint_t personalityAddr =\n        exceptionTableAddr + signExtendPrel31(exceptionTableData);\n    personalityRoutine = personalityAddr;\n\n    // ARM EHABI # 6.2, # 9.2\n    //\n    //  +---- ehtp\n    //  v\n    // +--------------------------------------+\n    // | +--------+--------+--------+-------+ |\n    // | |0| prel31 to personalityRoutine   | |\n    // | +--------+--------+--------+-------+ |\n    // | |      N |      unwind opcodes     | |  <-- UnwindData\n    // | +--------+--------+--------+-------+ |\n    // | | Word 2        unwind opcodes     | |\n    // | +--------+--------+--------+-------+ |\n    // | ...                                  |\n    // | +--------+--------+--------+-------+ |\n    // | | Word N        unwind opcodes     | |\n    // | +--------+--------+--------+-------+ |\n    // | | LSDA                             | |  <-- lsda\n    // | | ...                              | |\n    // | +--------+--------+--------+-------+ |\n    // +--------------------------------------+\n\n    uint32_t *UnwindData = reinterpret_cast<uint32_t*>(exceptionTableAddr) + 1;\n    uint32_t FirstDataWord = *UnwindData;\n    size_t N = ((FirstDataWord >> 24) & 0xff);\n    size_t NDataWords = N + 1;\n    lsda = reinterpret_cast<uintptr_t>(UnwindData + NDataWords);\n  }\n\n  _info.start_ip = thisPC;\n  _info.end_ip = nextPC;\n  _info.handler = personalityRoutine;\n  _info.unwind_info = exceptionTableAddr;\n  _info.lsda = lsda;\n  // flags is pr_cache.additional. See EHABI #7.2 for definition of bit 0.\n  _info.flags = isSingleWordEHT ? 1 : 0 | scope32 ? 0x2 : 0;  // Use enum?\n\n  return true;\n}\n#endif\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::getInfoFromDwarfSection(pint_t pc,\n                                                const UnwindInfoSections &sects,\n                                                uint32_t fdeSectionOffsetHint) {\n  typename CFI_Parser<A>::FDE_Info fdeInfo;\n  typename CFI_Parser<A>::CIE_Info cieInfo;\n  bool foundFDE = false;\n  bool foundInCache = false;\n  // If compact encoding table gave offset into dwarf section, go directly there\n  if (fdeSectionOffsetHint != 0) {\n    foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,\n                                    (uint32_t)sects.dwarf_section_length,\n                                    sects.dwarf_section + fdeSectionOffsetHint,\n                                    &fdeInfo, &cieInfo);\n  }\n#if _LIBUNWIND_SUPPORT_DWARF_INDEX\n  if (!foundFDE && (sects.dwarf_index_section != 0)) {\n    foundFDE = EHHeaderParser<A>::findFDE(\n        _addressSpace, pc, sects.dwarf_index_section,\n        (uint32_t)sects.dwarf_index_section_length, &fdeInfo, &cieInfo);\n  }\n#endif\n  if (!foundFDE) {\n    // otherwise, search cache of previously found FDEs.\n    pint_t cachedFDE = DwarfFDECache<A>::findFDE(sects.dso_base, pc);\n    if (cachedFDE != 0) {\n      foundFDE =\n          CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,\n                                 (uint32_t)sects.dwarf_section_length,\n                                 cachedFDE, &fdeInfo, &cieInfo);\n      foundInCache = foundFDE;\n    }\n  }\n  if (!foundFDE) {\n    // Still not found, do full scan of __eh_frame section.\n    foundFDE = CFI_Parser<A>::findFDE(_addressSpace, pc, sects.dwarf_section,\n                                      (uint32_t)sects.dwarf_section_length, 0,\n                                      &fdeInfo, &cieInfo);\n  }\n  if (foundFDE) {\n    typename CFI_Parser<A>::PrologInfo prolog;\n    if (CFI_Parser<A>::parseFDEInstructions(_addressSpace, fdeInfo, cieInfo, pc,\n                                            &prolog)) {\n      // Save off parsed FDE info\n      _info.start_ip          = fdeInfo.pcStart;\n      _info.end_ip            = fdeInfo.pcEnd;\n      _info.lsda              = fdeInfo.lsda;\n      _info.handler           = cieInfo.personality;\n      _info.gp                = prolog.spExtraArgSize;\n      _info.flags             = 0;\n      _info.format            = dwarfEncoding();\n      _info.unwind_info       = fdeInfo.fdeStart;\n      _info.unwind_info_size  = (uint32_t)fdeInfo.fdeLength;\n      _info.extra             = (unw_word_t) sects.dso_base;\n\n      // Add to cache (to make next lookup faster) if we had no hint\n      // and there was no index.\n      if (!foundInCache && (fdeSectionOffsetHint == 0)) {\n  #if _LIBUNWIND_SUPPORT_DWARF_INDEX\n        if (sects.dwarf_index_section == 0)\n  #endif\n        DwarfFDECache<A>::add(sects.dso_base, fdeInfo.pcStart, fdeInfo.pcEnd,\n                              fdeInfo.fdeStart);\n      }\n      return true;\n    }\n  }\n  //_LIBUNWIND_DEBUG_LOG(\"can't find/use FDE for pc=0x%llX\\n\", (uint64_t)pc);\n  return false;\n}\n#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::getInfoFromCompactEncodingSection(pint_t pc,\n                                              const UnwindInfoSections &sects) {\n  const bool log = false;\n  if (log)\n    fprintf(stderr, \"getInfoFromCompactEncodingSection(pc=0x%llX, mh=0x%llX)\\n\",\n            (uint64_t)pc, (uint64_t)sects.dso_base);\n\n  const UnwindSectionHeader<A> sectionHeader(_addressSpace,\n                                                sects.compact_unwind_section);\n  if (sectionHeader.version() != UNWIND_SECTION_VERSION)\n    return false;\n\n  // do a binary search of top level index to find page with unwind info\n  pint_t targetFunctionOffset = pc - sects.dso_base;\n  const UnwindSectionIndexArray<A> topIndex(_addressSpace,\n                                           sects.compact_unwind_section\n                                         + sectionHeader.indexSectionOffset());\n  uint32_t low = 0;\n  uint32_t high = sectionHeader.indexCount();\n  uint32_t last = high - 1;\n  while (low < high) {\n    uint32_t mid = (low + high) / 2;\n    //if ( log ) fprintf(stderr, \"\\tmid=%d, low=%d, high=%d, *mid=0x%08X\\n\",\n    //mid, low, high, topIndex.functionOffset(mid));\n    if (topIndex.functionOffset(mid) <= targetFunctionOffset) {\n      if ((mid == last) ||\n          (topIndex.functionOffset(mid + 1) > targetFunctionOffset)) {\n        low = mid;\n        break;\n      } else {\n        low = mid + 1;\n      }\n    } else {\n      high = mid;\n    }\n  }\n  const uint32_t firstLevelFunctionOffset = topIndex.functionOffset(low);\n  const uint32_t firstLevelNextPageFunctionOffset =\n      topIndex.functionOffset(low + 1);\n  const pint_t secondLevelAddr =\n      sects.compact_unwind_section + topIndex.secondLevelPagesSectionOffset(low);\n  const pint_t lsdaArrayStartAddr =\n      sects.compact_unwind_section + topIndex.lsdaIndexArraySectionOffset(low);\n  const pint_t lsdaArrayEndAddr =\n      sects.compact_unwind_section + topIndex.lsdaIndexArraySectionOffset(low+1);\n  if (log)\n    fprintf(stderr, \"\\tfirst level search for result index=%d \"\n                    \"to secondLevelAddr=0x%llX\\n\",\n                    low, (uint64_t) secondLevelAddr);\n  // do a binary search of second level page index\n  uint32_t encoding = 0;\n  pint_t funcStart = 0;\n  pint_t funcEnd = 0;\n  pint_t lsda = 0;\n  pint_t personality = 0;\n  uint32_t pageKind = _addressSpace.get32(secondLevelAddr);\n  if (pageKind == UNWIND_SECOND_LEVEL_REGULAR) {\n    // regular page\n    UnwindSectionRegularPageHeader<A> pageHeader(_addressSpace,\n                                                 secondLevelAddr);\n    UnwindSectionRegularArray<A> pageIndex(\n        _addressSpace, secondLevelAddr + pageHeader.entryPageOffset());\n    // binary search looks for entry with e where index[e].offset <= pc <\n    // index[e+1].offset\n    if (log)\n      fprintf(stderr, \"\\tbinary search for targetFunctionOffset=0x%08llX in \"\n                      \"regular page starting at secondLevelAddr=0x%llX\\n\",\n              (uint64_t) targetFunctionOffset, (uint64_t) secondLevelAddr);\n    low = 0;\n    high = pageHeader.entryCount();\n    while (low < high) {\n      uint32_t mid = (low + high) / 2;\n      if (pageIndex.functionOffset(mid) <= targetFunctionOffset) {\n        if (mid == (uint32_t)(pageHeader.entryCount() - 1)) {\n          // at end of table\n          low = mid;\n          funcEnd = firstLevelNextPageFunctionOffset + sects.dso_base;\n          break;\n        } else if (pageIndex.functionOffset(mid + 1) > targetFunctionOffset) {\n          // next is too big, so we found it\n          low = mid;\n          funcEnd = pageIndex.functionOffset(low + 1) + sects.dso_base;\n          break;\n        } else {\n          low = mid + 1;\n        }\n      } else {\n        high = mid;\n      }\n    }\n    encoding = pageIndex.encoding(low);\n    funcStart = pageIndex.functionOffset(low) + sects.dso_base;\n    if (pc < funcStart) {\n      if (log)\n        fprintf(\n            stderr,\n            \"\\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\\n\",\n            (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd);\n      return false;\n    }\n    if (pc > funcEnd) {\n      if (log)\n        fprintf(\n            stderr,\n            \"\\tpc not in table, pc=0x%llX, funcStart=0x%llX, funcEnd=0x%llX\\n\",\n            (uint64_t) pc, (uint64_t) funcStart, (uint64_t) funcEnd);\n      return false;\n    }\n  } else if (pageKind == UNWIND_SECOND_LEVEL_COMPRESSED) {\n    // compressed page\n    UnwindSectionCompressedPageHeader<A> pageHeader(_addressSpace,\n                                                    secondLevelAddr);\n    UnwindSectionCompressedArray<A> pageIndex(\n        _addressSpace, secondLevelAddr + pageHeader.entryPageOffset());\n    const uint32_t targetFunctionPageOffset =\n        (uint32_t)(targetFunctionOffset - firstLevelFunctionOffset);\n    // binary search looks for entry with e where index[e].offset <= pc <\n    // index[e+1].offset\n    if (log)\n      fprintf(stderr, \"\\tbinary search of compressed page starting at \"\n                      \"secondLevelAddr=0x%llX\\n\",\n              (uint64_t) secondLevelAddr);\n    low = 0;\n    last = pageHeader.entryCount() - 1;\n    high = pageHeader.entryCount();\n    while (low < high) {\n      uint32_t mid = (low + high) / 2;\n      if (pageIndex.functionOffset(mid) <= targetFunctionPageOffset) {\n        if ((mid == last) ||\n            (pageIndex.functionOffset(mid + 1) > targetFunctionPageOffset)) {\n          low = mid;\n          break;\n        } else {\n          low = mid + 1;\n        }\n      } else {\n        high = mid;\n      }\n    }\n    funcStart = pageIndex.functionOffset(low) + firstLevelFunctionOffset\n                                                              + sects.dso_base;\n    if (low < last)\n      funcEnd =\n          pageIndex.functionOffset(low + 1) + firstLevelFunctionOffset\n                                                              + sects.dso_base;\n    else\n      funcEnd = firstLevelNextPageFunctionOffset + sects.dso_base;\n    if (pc < funcStart) {\n      _LIBUNWIND_DEBUG_LOG(\"malformed __unwind_info, pc=0x%llX not in second  \"\n                           \"level compressed unwind table. funcStart=0x%llX\\n\",\n                            (uint64_t) pc, (uint64_t) funcStart);\n      return false;\n    }\n    if (pc > funcEnd) {\n      _LIBUNWIND_DEBUG_LOG(\"malformed __unwind_info, pc=0x%llX not in second  \"\n                          \"level compressed unwind table. funcEnd=0x%llX\\n\",\n                           (uint64_t) pc, (uint64_t) funcEnd);\n      return false;\n    }\n    uint16_t encodingIndex = pageIndex.encodingIndex(low);\n    if (encodingIndex < sectionHeader.commonEncodingsArrayCount()) {\n      // encoding is in common table in section header\n      encoding = _addressSpace.get32(\n          sects.compact_unwind_section +\n          sectionHeader.commonEncodingsArraySectionOffset() +\n          encodingIndex * sizeof(uint32_t));\n    } else {\n      // encoding is in page specific table\n      uint16_t pageEncodingIndex =\n          encodingIndex - (uint16_t)sectionHeader.commonEncodingsArrayCount();\n      encoding = _addressSpace.get32(secondLevelAddr +\n                                     pageHeader.encodingsPageOffset() +\n                                     pageEncodingIndex * sizeof(uint32_t));\n    }\n  } else {\n    _LIBUNWIND_DEBUG_LOG(\"malformed __unwind_info at 0x%0llX bad second \"\n                         \"level page\\n\",\n                          (uint64_t) sects.compact_unwind_section);\n    return false;\n  }\n\n  // look up LSDA, if encoding says function has one\n  if (encoding & UNWIND_HAS_LSDA) {\n    UnwindSectionLsdaArray<A> lsdaIndex(_addressSpace, lsdaArrayStartAddr);\n    uint32_t funcStartOffset = (uint32_t)(funcStart - sects.dso_base);\n    low = 0;\n    high = (uint32_t)(lsdaArrayEndAddr - lsdaArrayStartAddr) /\n                    sizeof(unwind_info_section_header_lsda_index_entry);\n    // binary search looks for entry with exact match for functionOffset\n    if (log)\n      fprintf(stderr,\n              \"\\tbinary search of lsda table for targetFunctionOffset=0x%08X\\n\",\n              funcStartOffset);\n    while (low < high) {\n      uint32_t mid = (low + high) / 2;\n      if (lsdaIndex.functionOffset(mid) == funcStartOffset) {\n        lsda = lsdaIndex.lsdaOffset(mid) + sects.dso_base;\n        break;\n      } else if (lsdaIndex.functionOffset(mid) < funcStartOffset) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    if (lsda == 0) {\n      _LIBUNWIND_DEBUG_LOG(\"found encoding 0x%08X with HAS_LSDA bit set for \"\n                    \"pc=0x%0llX, but lsda table has no entry\\n\",\n                    encoding, (uint64_t) pc);\n      return false;\n    }\n  }\n\n  // extact personality routine, if encoding says function has one\n  uint32_t personalityIndex = (encoding & UNWIND_PERSONALITY_MASK) >>\n                              (__builtin_ctz(UNWIND_PERSONALITY_MASK));\n  if (personalityIndex != 0) {\n    --personalityIndex; // change 1-based to zero-based index\n    if (personalityIndex > sectionHeader.personalityArrayCount()) {\n      _LIBUNWIND_DEBUG_LOG(\"found encoding 0x%08X with personality index %d,  \"\n                            \"but personality table has only %d entires\\n\",\n                            encoding, personalityIndex,\n                            sectionHeader.personalityArrayCount());\n      return false;\n    }\n    int32_t personalityDelta = (int32_t)_addressSpace.get32(\n        sects.compact_unwind_section +\n        sectionHeader.personalityArraySectionOffset() +\n        personalityIndex * sizeof(uint32_t));\n    pint_t personalityPointer = sects.dso_base + (pint_t)personalityDelta;\n    personality = _addressSpace.getP(personalityPointer);\n    if (log)\n      fprintf(stderr, \"getInfoFromCompactEncodingSection(pc=0x%llX), \"\n                      \"personalityDelta=0x%08X, personality=0x%08llX\\n\",\n              (uint64_t) pc, personalityDelta, (uint64_t) personality);\n  }\n\n  if (log)\n    fprintf(stderr, \"getInfoFromCompactEncodingSection(pc=0x%llX), \"\n                    \"encoding=0x%08X, lsda=0x%08llX for funcStart=0x%llX\\n\",\n            (uint64_t) pc, encoding, (uint64_t) lsda, (uint64_t) funcStart);\n  _info.start_ip = funcStart;\n  _info.end_ip = funcEnd;\n  _info.lsda = lsda;\n  _info.handler = personality;\n  _info.gp = 0;\n  _info.flags = 0;\n  _info.format = encoding;\n  _info.unwind_info = 0;\n  _info.unwind_info_size = 0;\n  _info.extra = sects.dso_base;\n  return true;\n}\n#endif // _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n\n\ntemplate <typename A, typename R>\nvoid UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {\n  pint_t pc = (pint_t)this->getReg(UNW_REG_IP);\n#if LIBCXXABI_ARM_EHABI\n  // Remove the thumb bit so the IP represents the actual instruction address.\n  // This matches the behaviour of _Unwind_GetIP on arm.\n  pc &= (pint_t)~0x1;\n#endif\n\n  // If the last line of a function is a \"throw\" the compiler sometimes\n  // emits no instructions after the call to __cxa_throw.  This means\n  // the return address is actually the start of the next function.\n  // To disambiguate this, back up the pc when we know it is a return\n  // address.\n  if (isReturnAddress)\n    --pc;\n\n  // Ask address space object to find unwind sections for this pc.\n  UnwindInfoSections sects;\n  if (_addressSpace.findUnwindSections(pc, sects)) {\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n    // If there is a compact unwind encoding table, look there first.\n    if (sects.compact_unwind_section != 0) {\n      if (this->getInfoFromCompactEncodingSection(pc, sects)) {\n  #if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n        // Found info in table, done unless encoding says to use dwarf.\n        uint32_t dwarfOffset;\n        if ((sects.dwarf_section != 0) && compactSaysUseDwarf(&dwarfOffset)) {\n          if (this->getInfoFromDwarfSection(pc, sects, dwarfOffset)) {\n            // found info in dwarf, done\n            return;\n          }\n        }\n  #endif\n        // If unwind table has entry, but entry says there is no unwind info,\n        // record that we have no unwind info.\n        if (_info.format == 0)\n          _unwindInfoMissing = true;\n        return;\n      }\n    }\n#endif // _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n    // If there is dwarf unwind info, look there next.\n    if (sects.dwarf_section != 0) {\n      if (this->getInfoFromDwarfSection(pc, sects)) {\n        // found info in dwarf, done\n        return;\n      }\n    }\n#endif\n\n#if LIBCXXABI_ARM_EHABI\n    // If there is ARM EHABI unwind info, look there next.\n    if (sects.arm_section != 0 && this->getInfoFromEHABISection(pc, sects))\n      return;\n#endif\n  }\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n  // There is no static unwind info for this pc. Look to see if an FDE was\n  // dynamically registered for it.\n  pint_t cachedFDE = DwarfFDECache<A>::findFDE(0, pc);\n  if (cachedFDE != 0) {\n    CFI_Parser<LocalAddressSpace>::FDE_Info fdeInfo;\n    CFI_Parser<LocalAddressSpace>::CIE_Info cieInfo;\n    const char *msg = CFI_Parser<A>::decodeFDE(_addressSpace,\n                                                cachedFDE, &fdeInfo, &cieInfo);\n    if (msg == NULL) {\n      typename CFI_Parser<A>::PrologInfo prolog;\n      if (CFI_Parser<A>::parseFDEInstructions(_addressSpace, fdeInfo, cieInfo,\n                                                                pc, &prolog)) {\n        // save off parsed FDE info\n        _info.start_ip         = fdeInfo.pcStart;\n        _info.end_ip           = fdeInfo.pcEnd;\n        _info.lsda             = fdeInfo.lsda;\n        _info.handler          = cieInfo.personality;\n        _info.gp               = prolog.spExtraArgSize;\n                                  // Some frameless functions need SP\n                                  // altered when resuming in function.\n        _info.flags            = 0;\n        _info.format           = dwarfEncoding();\n        _info.unwind_info      = fdeInfo.fdeStart;\n        _info.unwind_info_size = (uint32_t)fdeInfo.fdeLength;\n        _info.extra            = 0;\n        return;\n      }\n    }\n  }\n\n  // Lastly, ask AddressSpace object about platform specific ways to locate\n  // other FDEs.\n  pint_t fde;\n  if (_addressSpace.findOtherFDE(pc, fde)) {\n    CFI_Parser<LocalAddressSpace>::FDE_Info fdeInfo;\n    CFI_Parser<LocalAddressSpace>::CIE_Info cieInfo;\n    if (!CFI_Parser<A>::decodeFDE(_addressSpace, fde, &fdeInfo, &cieInfo)) {\n      // Double check this FDE is for a function that includes the pc.\n      if ((fdeInfo.pcStart <= pc) && (pc < fdeInfo.pcEnd)) {\n        typename CFI_Parser<A>::PrologInfo prolog;\n        if (CFI_Parser<A>::parseFDEInstructions(_addressSpace, fdeInfo,\n                                                cieInfo, pc, &prolog)) {\n          // save off parsed FDE info\n          _info.start_ip         = fdeInfo.pcStart;\n          _info.end_ip           = fdeInfo.pcEnd;\n          _info.lsda             = fdeInfo.lsda;\n          _info.handler          = cieInfo.personality;\n          _info.gp               = prolog.spExtraArgSize;\n          _info.flags            = 0;\n          _info.format           = dwarfEncoding();\n          _info.unwind_info      = fdeInfo.fdeStart;\n          _info.unwind_info_size = (uint32_t)fdeInfo.fdeLength;\n          _info.extra            = 0;\n          return;\n        }\n      }\n    }\n  }\n#endif // #if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n  // no unwind info, flag that we can't reliably unwind\n  _unwindInfoMissing = true;\n}\n\ntemplate <typename A, typename R>\nint UnwindCursor<A, R>::step() {\n  // Bottom of stack is defined is when unwind info cannot be found.\n  if (_unwindInfoMissing)\n    return UNW_STEP_END;\n\n  // Use unwinding info to modify register set as if function returned.\n  int result;\n#if _LIBUNWIND_SUPPORT_COMPACT_UNWIND\n  result = this->stepWithCompactEncoding();\n#elif _LIBUNWIND_SUPPORT_DWARF_UNWIND\n  result = this->stepWithDwarfFDE();\n#elif LIBCXXABI_ARM_EHABI\n  result = UNW_STEP_SUCCESS;\n#else\n  #error Need _LIBUNWIND_SUPPORT_COMPACT_UNWIND or \\\n              _LIBUNWIND_SUPPORT_DWARF_UNWIND or \\\n              LIBCXXABI_ARM_EHABI\n#endif\n\n  // update info based on new PC\n  if (result == UNW_STEP_SUCCESS) {\n    this->setInfoBasedOnIPRegister(true);\n    if (_unwindInfoMissing)\n      return UNW_STEP_END;\n    if (_info.gp)\n      setReg(UNW_REG_SP, getReg(UNW_REG_SP) + _info.gp);\n  }\n\n  return result;\n}\n\ntemplate <typename A, typename R>\nvoid UnwindCursor<A, R>::getInfo(unw_proc_info_t *info) {\n  *info = _info;\n}\n\ntemplate <typename A, typename R>\nbool UnwindCursor<A, R>::getFunctionName(char *buf, size_t bufLen,\n                                                           unw_word_t *offset) {\n  return _addressSpace.findFunctionName((pint_t)this->getReg(UNW_REG_IP),\n                                         buf, bufLen, offset);\n}\n\n} // namespace libunwind\n\n#endif // __UNWINDCURSOR_HPP__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/UnwindLevel1-gcc-ext.c",
    "content": "//===--------------------- UnwindLevel1-gcc-ext.c -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Implements gcc extensions to the C++ ABI Exception Handling Level 1.\n//\n//===----------------------------------------------------------------------===//\n\n#include <inttypes.h>\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"config.h\"\n#include \"libunwind_ext.h\"\n#include \"libunwind.h\"\n#include \"Unwind-EHABI.h\"\n#include \"unwind.h\"\n\n#if _LIBUNWIND_BUILD_ZERO_COST_APIS\n\n///  Called by __cxa_rethrow().\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_Resume_or_Rethrow(_Unwind_Exception *exception_object) {\n#if LIBCXXABI_ARM_EHABI\n  _LIBUNWIND_TRACE_API(\"_Unwind_Resume_or_Rethrow(ex_obj=%p), private_1=%ld\\n\",\n                       (void *)exception_object,\n                       (long)exception_object->unwinder_cache.reserved1);\n#else\n  _LIBUNWIND_TRACE_API(\"_Unwind_Resume_or_Rethrow(ex_obj=%p), private_1=%ld\\n\",\n                       (void *)exception_object,\n                       (long)exception_object->private_1);\n#endif\n\n#if LIBCXXABI_ARM_EHABI\n  // _Unwind_RaiseException on EHABI will always set the reserved1 field to 0,\n  // which is in the same position as private_1 below.\n  return _Unwind_RaiseException(exception_object);\n#else\n  // If this is non-forced and a stopping place was found, then this is a\n  // re-throw.\n  // Call _Unwind_RaiseException() as if this was a new exception\n  if (exception_object->private_1 == 0) {\n    return _Unwind_RaiseException(exception_object);\n    // Will return if there is no catch clause, so that __cxa_rethrow can call\n    // std::terminate().\n  }\n\n  // Call through to _Unwind_Resume() which distiguishes between forced and\n  // regular exceptions.\n  _Unwind_Resume(exception_object);\n  _LIBUNWIND_ABORT(\"_Unwind_Resume_or_Rethrow() called _Unwind_RaiseException()\"\n                   \" which unexpectedly returned\");\n#endif\n}\n\n\n/// Called by personality handler during phase 2 to get base address for data\n/// relative encodings.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetDataRelBase(struct _Unwind_Context *context) {\n  (void)context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetDataRelBase(context=%p)\\n\", (void *)context);\n  _LIBUNWIND_ABORT(\"_Unwind_GetDataRelBase() not implemented\");\n}\n\n\n/// Called by personality handler during phase 2 to get base address for text\n/// relative encodings.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetTextRelBase(struct _Unwind_Context *context) {\n  (void)context;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetTextRelBase(context=%p)\\n\", (void *)context);\n  _LIBUNWIND_ABORT(\"_Unwind_GetTextRelBase() not implemented\");\n}\n\n\n/// Scans unwind information to find the function that contains the\n/// specified code address \"pc\".\n_LIBUNWIND_EXPORT void *_Unwind_FindEnclosingFunction(void *pc) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_FindEnclosingFunction(pc=%p)\\n\", pc);\n  // This is slow, but works.\n  // We create an unwind cursor then alter the IP to be pc\n  unw_cursor_t cursor;\n  unw_context_t uc;\n  unw_proc_info_t info;\n  unw_getcontext(&uc);\n  unw_init_local(&cursor, &uc);\n  unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)(long) pc);\n  if (unw_get_proc_info(&cursor, &info) == UNW_ESUCCESS)\n    return (void *)(long) info.start_ip;\n  else\n    return NULL;\n}\n\n/// Walk every frame and call trace function at each one.  If trace function\n/// returns anything other than _URC_NO_REASON, then walk is terminated.\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_Backtrace(_Unwind_Trace_Fn callback, void *ref) {\n  unw_cursor_t cursor;\n  unw_context_t uc;\n  unw_getcontext(&uc);\n  unw_init_local(&cursor, &uc);\n\n  _LIBUNWIND_TRACE_API(\"_Unwind_Backtrace(callback=%p)\\n\",\n                       (void *)(uintptr_t)callback);\n\n  // walk each frame\n  while (true) {\n    _Unwind_Reason_Code result;\n\n    // ask libuwind to get next frame (skip over first frame which is\n    // _Unwind_Backtrace())\n    if (unw_step(&cursor) <= 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\" _backtrace: ended because cursor reached \"\n                                 \"bottom of stack, returning %d\\n\",\n                                 _URC_END_OF_STACK);\n      return _URC_END_OF_STACK;\n    }\n\n#if LIBCXXABI_ARM_EHABI\n    // Get the information for this frame.\n    unw_proc_info_t frameInfo;\n    if (unw_get_proc_info(&cursor, &frameInfo) != UNW_ESUCCESS) {\n      return _URC_END_OF_STACK;\n    }\n\n    struct _Unwind_Context *context = (struct _Unwind_Context *)&cursor;\n    const uint32_t* unwindInfo = (uint32_t *) frameInfo.unwind_info;\n    if ((*unwindInfo & 0x80000000) == 0) {\n      // 6.2: Generic Model\n      // EHT entry is a prel31 pointing to the PR, followed by data understood\n      // only by the personality routine. Since EHABI doesn't guarantee the\n      // location or availability of the unwind opcodes in the generic model,\n      // we have to call personality functions with (_US_VIRTUAL_UNWIND_FRAME |\n      // _US_FORCE_UNWIND) state.\n\n      // Create a mock exception object for force unwinding.\n      _Unwind_Exception ex;\n      ex.exception_class = 0x434C4E47554E5700; // CLNGUNW\\0\n      ex.pr_cache.fnstart = frameInfo.start_ip;\n      ex.pr_cache.ehtp = (_Unwind_EHT_Header *) unwindInfo;\n      ex.pr_cache.additional= frameInfo.flags;\n\n      // Get and call the personality function to unwind the frame.\n      __personality_routine pr = (__personality_routine) readPrel31(unwindInfo);\n      if (pr(_US_VIRTUAL_UNWIND_FRAME | _US_FORCE_UNWIND, &ex, context) !=\n              _URC_CONTINUE_UNWIND) {\n        return _URC_END_OF_STACK;\n      }\n    } else {\n      size_t off, len;\n      unwindInfo = decode_eht_entry(unwindInfo, &off, &len);\n      if (unwindInfo == NULL) {\n        return _URC_FAILURE;\n      }\n\n      result = _Unwind_VRS_Interpret(context, unwindInfo, off, len);\n      if (result != _URC_CONTINUE_UNWIND) {\n        return _URC_END_OF_STACK;\n      }\n    }\n#endif // LIBCXXABI_ARM_EHABI\n\n    // debugging\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionName[512];\n      unw_proc_info_t frame;\n      unw_word_t offset;\n      unw_get_proc_name(&cursor, functionName, 512, &offset);\n      unw_get_proc_info(&cursor, &frame);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \" _backtrace: start_ip=0x%llX, func=%s, lsda=0x%llX, context=%p\\n\",\n          (long long)frame.start_ip, functionName, (long long)frame.lsda,\n          (void *)&cursor);\n    }\n\n    // call trace function with this frame\n    result = (*callback)((struct _Unwind_Context *)(&cursor), ref);\n    if (result != _URC_NO_REASON) {\n      _LIBUNWIND_TRACE_UNWINDING(\n          \" _backtrace: ended because callback returned %d\\n\", result);\n      return result;\n    }\n  }\n}\n\n\n/// Find dwarf unwind info for an address 'pc' in some function.\n_LIBUNWIND_EXPORT const void *_Unwind_Find_FDE(const void *pc,\n                                               struct dwarf_eh_bases *bases) {\n  // This is slow, but works.\n  // We create an unwind cursor then alter the IP to be pc\n  unw_cursor_t cursor;\n  unw_context_t uc;\n  unw_proc_info_t info;\n  unw_getcontext(&uc);\n  unw_init_local(&cursor, &uc);\n  unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)(long) pc);\n  unw_get_proc_info(&cursor, &info);\n  bases->tbase = (uintptr_t)info.extra;\n  bases->dbase = 0; // dbase not used on Mac OS X\n  bases->func = (uintptr_t)info.start_ip;\n  _LIBUNWIND_TRACE_API(\"_Unwind_Find_FDE(pc=%p) => %p\\n\", pc,\n                  (void *)(long) info.unwind_info);\n  return (void *)(long) info.unwind_info;\n}\n\n/// Returns the CFA (call frame area, or stack pointer at start of function)\n/// for the current context.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetCFA(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_word_t result;\n  unw_get_reg(cursor, UNW_REG_SP, &result);\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetCFA(context=%p) => 0x%\" PRIx64 \"\\n\",\n                       (void *)context, (uint64_t)result);\n  return (uintptr_t)result;\n}\n\n\n/// Called by personality handler during phase 2 to get instruction pointer.\n/// ipBefore is a boolean that says if IP is already adjusted to be the call\n/// site address.  Normally IP is the return address.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context,\n                                              int *ipBefore) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetIPInfo(context=%p)\\n\", (void *)context);\n  *ipBefore = 0;\n  return _Unwind_GetIP(context);\n}\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n/// Called by programs with dynamic code generators that want\n/// to register a dynamically generated FDE.\n/// This function has existed on Mac OS X since 10.4, but\n/// was broken until 10.6.\n_LIBUNWIND_EXPORT void __register_frame(const void *fde) {\n  _LIBUNWIND_TRACE_API(\"__register_frame(%p)\\n\", fde);\n  _unw_add_dynamic_fde((unw_word_t)(uintptr_t) fde);\n}\n\n\n/// Called by programs with dynamic code generators that want\n/// to unregister a dynamically generated FDE.\n/// This function has existed on Mac OS X since 10.4, but\n/// was broken until 10.6.\n_LIBUNWIND_EXPORT void __deregister_frame(const void *fde) {\n  _LIBUNWIND_TRACE_API(\"__deregister_frame(%p)\\n\", fde);\n  _unw_remove_dynamic_fde((unw_word_t)(uintptr_t) fde);\n}\n\n\n// The following register/deregister functions are gcc extensions.\n// They have existed on Mac OS X, but have never worked because Mac OS X\n// before 10.6 used keymgr to track known FDEs, but these functions\n// never got updated to use keymgr.\n// For now, we implement these as do-nothing functions to keep any existing\n// applications working.  We also add the not in 10.6 symbol so that nwe\n// application won't be able to use them.\n\n#if _LIBUNWIND_SUPPORT_FRAME_APIS\n_LIBUNWIND_EXPORT void __register_frame_info_bases(const void *fde, void *ob,\n                                                   void *tb, void *db) {\n  (void)fde;\n  (void)ob;\n  (void)tb;\n  (void)db;\n _LIBUNWIND_TRACE_API(\"__register_frame_info_bases(%p,%p, %p, %p)\\n\",\n                            fde, ob, tb, db);\n  // do nothing, this function never worked in Mac OS X\n}\n\n_LIBUNWIND_EXPORT void __register_frame_info(const void *fde, void *ob) {\n  (void)fde;\n  (void)ob;\n  _LIBUNWIND_TRACE_API(\"__register_frame_info(%p, %p)\\n\", fde, ob);\n  // do nothing, this function never worked in Mac OS X\n}\n\n_LIBUNWIND_EXPORT void __register_frame_info_table_bases(const void *fde,\n                                                         void *ob, void *tb,\n                                                         void *db) {\n  (void)fde;\n  (void)ob;\n  (void)tb;\n  (void)db;\n  _LIBUNWIND_TRACE_API(\"__register_frame_info_table_bases\"\n                             \"(%p,%p, %p, %p)\\n\", fde, ob, tb, db);\n  // do nothing, this function never worked in Mac OS X\n}\n\n_LIBUNWIND_EXPORT void __register_frame_info_table(const void *fde, void *ob) {\n  (void)fde;\n  (void)ob;\n  _LIBUNWIND_TRACE_API(\"__register_frame_info_table(%p, %p)\\n\", fde, ob);\n  // do nothing, this function never worked in Mac OS X\n}\n\n_LIBUNWIND_EXPORT void __register_frame_table(const void *fde) {\n  (void)fde;\n  _LIBUNWIND_TRACE_API(\"__register_frame_table(%p)\\n\", fde);\n  // do nothing, this function never worked in Mac OS X\n}\n\n_LIBUNWIND_EXPORT void *__deregister_frame_info(const void *fde) {\n  (void)fde;\n  _LIBUNWIND_TRACE_API(\"__deregister_frame_info(%p)\\n\", fde);\n  // do nothing, this function never worked in Mac OS X\n  return NULL;\n}\n\n_LIBUNWIND_EXPORT void *__deregister_frame_info_bases(const void *fde) {\n  (void)fde;\n  _LIBUNWIND_TRACE_API(\"__deregister_frame_info_bases(%p)\\n\", fde);\n  // do nothing, this function never worked in Mac OS X\n  return NULL;\n}\n#endif // _LIBUNWIND_SUPPORT_FRAME_APIS\n\n#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n#endif // _LIBUNWIND_BUILD_ZERO_COST_APIS\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/UnwindLevel1.c",
    "content": "//===------------------------- UnwindLevel1.c -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// Implements C++ ABI Exception Handling Level 1 as documented at:\n//      http://mentorembedded.github.io/cxx-abi/abi-eh.html\n// using libunwind\n//\n//===----------------------------------------------------------------------===//\n\n#include <inttypes.h>\n#include <stdint.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"libunwind.h\"\n#include \"unwind.h\"\n#include \"config.h\"\n\n#if _LIBUNWIND_BUILD_ZERO_COST_APIS && !LIBCXXABI_ARM_EHABI\n\nstatic _Unwind_Reason_Code\nunwind_phase1(unw_context_t *uc, _Unwind_Exception *exception_object) {\n  unw_cursor_t cursor1;\n  unw_init_local(&cursor1, uc);\n\n  // Walk each frame looking for a place to stop.\n  for (bool handlerNotFound = true; handlerNotFound;) {\n\n    // Ask libuwind to get next frame (skip over first which is\n    // _Unwind_RaiseException).\n    int stepResult = unw_step(&cursor1);\n    if (stepResult == 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_step() reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                 (void *)exception_object);\n      return _URC_END_OF_STACK;\n    } else if (stepResult < 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_step failed => \"\n                                 \"_URC_FATAL_PHASE1_ERROR\\n\",\n                                 (void *)exception_object);\n      return _URC_FATAL_PHASE1_ERROR;\n    }\n\n    // See if frame has code to run (has personality routine).\n    unw_proc_info_t frameInfo;\n    unw_word_t sp;\n    if (unw_get_proc_info(&cursor1, &frameInfo) != UNW_ESUCCESS) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase1(ex_ojb=%p): unw_get_proc_info \"\n                                 \"failed => _URC_FATAL_PHASE1_ERROR\\n\",\n                                 (void *)exception_object);\n      return _URC_FATAL_PHASE1_ERROR;\n    }\n\n    // When tracing, print state information.\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionBuf[512];\n      const char *functionName = functionBuf;\n      unw_word_t offset;\n      if ((unw_get_proc_name(&cursor1, functionBuf, sizeof(functionBuf),\n                             &offset) != UNW_ESUCCESS) ||\n          (frameInfo.start_ip + offset > frameInfo.end_ip))\n        functionName = \".anonymous.\";\n      unw_word_t pc;\n      unw_get_reg(&cursor1, UNW_REG_IP, &pc);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase1(ex_ojb=%p): pc=0x%\" PRIx64 \", start_ip=0x%\" PRIx64\n          \", func=%s, lsda=0x%\" PRIx64 \", personality=0x%\" PRIx64 \"\\n\",\n          (void *)exception_object, pc, frameInfo.start_ip, functionName,\n          frameInfo.lsda, frameInfo.handler);\n    }\n\n    // If there is a personality routine, ask it if it will want to stop at\n    // this frame.\n    if (frameInfo.handler != 0) {\n      __personality_routine p =\n          (__personality_routine)(long)(frameInfo.handler);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase1(ex_ojb=%p): calling personality function %p\\n\",\n          (void *)exception_object, (void *)(uintptr_t)p);\n      _Unwind_Reason_Code personalityResult =\n          (*p)(1, _UA_SEARCH_PHASE, exception_object->exception_class,\n               exception_object, (struct _Unwind_Context *)(&cursor1));\n      switch (personalityResult) {\n      case _URC_HANDLER_FOUND:\n        // found a catch clause or locals that need destructing in this frame\n        // stop search and remember stack pointer at the frame\n        handlerNotFound = false;\n        unw_get_reg(&cursor1, UNW_REG_SP, &sp);\n        exception_object->private_2 = (uintptr_t)sp;\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_HANDLER_FOUND \\n\",\n            (void *)exception_object);\n        return _URC_NO_REASON;\n\n      case _URC_CONTINUE_UNWIND:\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_CONTINUE_UNWIND\\n\",\n            (void *)exception_object);\n        // continue unwinding\n        break;\n\n      default:\n        // something went wrong\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase1(ex_ojb=%p): _URC_FATAL_PHASE1_ERROR\\n\",\n            (void *)exception_object);\n        return _URC_FATAL_PHASE1_ERROR;\n      }\n    }\n  }\n  return _URC_NO_REASON;\n}\n\n\nstatic _Unwind_Reason_Code\nunwind_phase2(unw_context_t *uc, _Unwind_Exception *exception_object) {\n  unw_cursor_t cursor2;\n  unw_init_local(&cursor2, uc);\n\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p)\\n\",\n                             (void *)exception_object);\n\n  // Walk each frame until we reach where search phase said to stop.\n  while (true) {\n\n    // Ask libuwind to get next frame (skip over first which is\n    // _Unwind_RaiseException).\n    int stepResult = unw_step(&cursor2);\n    if (stepResult == 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step() reached \"\n                                 \"bottom => _URC_END_OF_STACK\\n\",\n                                 (void *)exception_object);\n      return _URC_END_OF_STACK;\n    } else if (stepResult < 0) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_step failed => \"\n                                 \"_URC_FATAL_PHASE1_ERROR\\n\",\n                                 (void *)exception_object);\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // Get info about this frame.\n    unw_word_t sp;\n    unw_proc_info_t frameInfo;\n    unw_get_reg(&cursor2, UNW_REG_SP, &sp);\n    if (unw_get_proc_info(&cursor2, &frameInfo) != UNW_ESUCCESS) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): unw_get_proc_info \"\n                                 \"failed => _URC_FATAL_PHASE1_ERROR\\n\",\n                                 (void *)exception_object);\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // When tracing, print state information.\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionBuf[512];\n      const char *functionName = functionBuf;\n      unw_word_t offset;\n      if ((unw_get_proc_name(&cursor2, functionBuf, sizeof(functionBuf),\n                             &offset) != UNW_ESUCCESS) ||\n          (frameInfo.start_ip + offset > frameInfo.end_ip))\n        functionName = \".anonymous.\";\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): start_ip=0x%\" PRIx64\n                                 \", func=%s, sp=0x%\" PRIx64 \", lsda=0x%\" PRIx64\n                                 \", personality=0x%\" PRIx64 \"\\n\",\n                                 (void *)exception_object, frameInfo.start_ip,\n                                 functionName, sp, frameInfo.lsda,\n                                 frameInfo.handler);\n    }\n\n    // If there is a personality routine, tell it we are unwinding.\n    if (frameInfo.handler != 0) {\n      __personality_routine p =\n          (__personality_routine)(long)(frameInfo.handler);\n      _Unwind_Action action = _UA_CLEANUP_PHASE;\n      if (sp == exception_object->private_2) {\n        // Tell personality this was the frame it marked in phase 1.\n        action = (_Unwind_Action)(_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME);\n      }\n       _Unwind_Reason_Code personalityResult =\n          (*p)(1, action, exception_object->exception_class, exception_object,\n               (struct _Unwind_Context *)(&cursor2));\n      switch (personalityResult) {\n      case _URC_CONTINUE_UNWIND:\n        // Continue unwinding\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase2(ex_ojb=%p): _URC_CONTINUE_UNWIND\\n\",\n            (void *)exception_object);\n        if (sp == exception_object->private_2) {\n          // Phase 1 said we would stop at this frame, but we did not...\n          _LIBUNWIND_ABORT(\"during phase1 personality function said it would \"\n                           \"stop here, but now in phase2 it did not stop here\");\n        }\n        break;\n      case _URC_INSTALL_CONTEXT:\n        _LIBUNWIND_TRACE_UNWINDING(\n            \"unwind_phase2(ex_ojb=%p): _URC_INSTALL_CONTEXT\\n\",\n            (void *)exception_object);\n        // Personality routine says to transfer control to landing pad.\n        // We may get control back if landing pad calls _Unwind_Resume().\n        if (_LIBUNWIND_TRACING_UNWINDING) {\n          unw_word_t pc;\n          unw_get_reg(&cursor2, UNW_REG_IP, &pc);\n          unw_get_reg(&cursor2, UNW_REG_SP, &sp);\n          _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2(ex_ojb=%p): re-entering \"\n                                     \"user code with ip=0x%\" PRIx64\n                                     \", sp=0x%\" PRIx64 \"\\n\",\n                                     (void *)exception_object, pc, sp);\n        }\n        unw_resume(&cursor2);\n        // unw_resume() only returns if there was an error.\n        return _URC_FATAL_PHASE2_ERROR;\n      default:\n        // Personality routine returned an unknown result code.\n        _LIBUNWIND_DEBUG_LOG(\"personality function returned unknown result %d\",\n                             personalityResult);\n        return _URC_FATAL_PHASE2_ERROR;\n      }\n    }\n  }\n\n  // Clean up phase did not resume at the frame that the search phase\n  // said it would...\n  return _URC_FATAL_PHASE2_ERROR;\n}\n\nstatic _Unwind_Reason_Code\nunwind_phase2_forced(unw_context_t *uc,\n                     _Unwind_Exception *exception_object,\n                     _Unwind_Stop_Fn stop, void *stop_parameter) {\n  unw_cursor_t cursor2;\n  unw_init_local(&cursor2, uc);\n\n  // Walk each frame until we reach where search phase said to stop\n  while (unw_step(&cursor2) > 0) {\n\n    // Update info about this frame.\n    unw_proc_info_t frameInfo;\n    if (unw_get_proc_info(&cursor2, &frameInfo) != UNW_ESUCCESS) {\n      _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): unw_step \"\n                                 \"failed => _URC_END_OF_STACK\\n\",\n                                 (void *)exception_object);\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // When tracing, print state information.\n    if (_LIBUNWIND_TRACING_UNWINDING) {\n      char functionBuf[512];\n      const char *functionName = functionBuf;\n      unw_word_t offset;\n      if ((unw_get_proc_name(&cursor2, functionBuf, sizeof(functionBuf),\n                             &offset) != UNW_ESUCCESS) ||\n          (frameInfo.start_ip + offset > frameInfo.end_ip))\n        functionName = \".anonymous.\";\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase2_forced(ex_ojb=%p): start_ip=0x%\" PRIx64\n          \", func=%s, lsda=0x%\" PRIx64 \", personality=0x%\" PRIx64 \"\\n\",\n          (void *)exception_object, frameInfo.start_ip, functionName,\n          frameInfo.lsda, frameInfo.handler);\n    }\n\n    // Call stop function at each frame.\n    _Unwind_Action action =\n        (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE);\n    _Unwind_Reason_Code stopResult =\n        (*stop)(1, action, exception_object->exception_class, exception_object,\n                (struct _Unwind_Context *)(&cursor2), stop_parameter);\n    _LIBUNWIND_TRACE_UNWINDING(\n        \"unwind_phase2_forced(ex_ojb=%p): stop function returned %d\\n\",\n        (void *)exception_object, stopResult);\n    if (stopResult != _URC_NO_REASON) {\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase2_forced(ex_ojb=%p): stopped by stop function\\n\",\n          (void *)exception_object);\n      return _URC_FATAL_PHASE2_ERROR;\n    }\n\n    // If there is a personality routine, tell it we are unwinding.\n    if (frameInfo.handler != 0) {\n      __personality_routine p =\n          (__personality_routine)(long)(frameInfo.handler);\n      _LIBUNWIND_TRACE_UNWINDING(\n          \"unwind_phase2_forced(ex_ojb=%p): calling personality function %p\\n\",\n          (void *)exception_object, (void *)(uintptr_t)p);\n      _Unwind_Reason_Code personalityResult =\n          (*p)(1, action, exception_object->exception_class, exception_object,\n               (struct _Unwind_Context *)(&cursor2));\n      switch (personalityResult) {\n      case _URC_CONTINUE_UNWIND:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                   \"personality returned \"\n                                   \"_URC_CONTINUE_UNWIND\\n\",\n                                   (void *)exception_object);\n        // Destructors called, continue unwinding\n        break;\n      case _URC_INSTALL_CONTEXT:\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                   \"personality returned \"\n                                   \"_URC_INSTALL_CONTEXT\\n\",\n                                   (void *)exception_object);\n        // We may get control back if landing pad calls _Unwind_Resume().\n        unw_resume(&cursor2);\n        break;\n      default:\n        // Personality routine returned an unknown result code.\n        _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): \"\n                                   \"personality returned %d, \"\n                                   \"_URC_FATAL_PHASE2_ERROR\\n\",\n                                   (void *)exception_object, personalityResult);\n        return _URC_FATAL_PHASE2_ERROR;\n      }\n    }\n  }\n\n  // Call stop function one last time and tell it we've reached the end\n  // of the stack.\n  _LIBUNWIND_TRACE_UNWINDING(\"unwind_phase2_forced(ex_ojb=%p): calling stop \"\n                             \"function with _UA_END_OF_STACK\\n\",\n                             (void *)exception_object);\n  _Unwind_Action lastAction =\n      (_Unwind_Action)(_UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK);\n  (*stop)(1, lastAction, exception_object->exception_class, exception_object,\n          (struct _Unwind_Context *)(&cursor2), stop_parameter);\n\n  // Clean up phase did not resume at the frame that the search phase said it\n  // would.\n  return _URC_FATAL_PHASE2_ERROR;\n}\n\n\n/// Called by __cxa_throw.  Only returns if there is a fatal error.\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_RaiseException(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_RaiseException(ex_obj=%p)\\n\",\n                       (void *)exception_object);\n  unw_context_t uc;\n  unw_getcontext(&uc);\n\n  // Mark that this is a non-forced unwind, so _Unwind_Resume()\n  // can do the right thing.\n  exception_object->private_1 = 0;\n  exception_object->private_2 = 0;\n\n  // phase 1: the search phase\n  _Unwind_Reason_Code phase1 = unwind_phase1(&uc, exception_object);\n  if (phase1 != _URC_NO_REASON)\n    return phase1;\n\n  // phase 2: the clean up phase\n  return unwind_phase2(&uc, exception_object);\n}\n\n\n\n/// When _Unwind_RaiseException() is in phase2, it hands control\n/// to the personality function at each frame.  The personality\n/// may force a jump to a landing pad in that function, the landing\n/// pad code may then call _Unwind_Resume() to continue with the\n/// unwinding.  Note: the call to _Unwind_Resume() is from compiler\n/// geneated user code.  All other _Unwind_* routines are called\n/// by the C++ runtime __cxa_* routines.\n///\n/// Note: re-throwing an exception (as opposed to continuing the unwind)\n/// is implemented by having the code call __cxa_rethrow() which\n/// in turn calls _Unwind_Resume_or_Rethrow().\n_LIBUNWIND_EXPORT void\n_Unwind_Resume(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_Resume(ex_obj=%p)\\n\", (void *)exception_object);\n  unw_context_t uc;\n  unw_getcontext(&uc);\n\n  if (exception_object->private_1 != 0)\n    unwind_phase2_forced(&uc, exception_object,\n                         (_Unwind_Stop_Fn) exception_object->private_1,\n                         (void *)exception_object->private_2);\n  else\n    unwind_phase2(&uc, exception_object);\n\n  // Clients assume _Unwind_Resume() does not return, so all we can do is abort.\n  _LIBUNWIND_ABORT(\"_Unwind_Resume() can't return\");\n}\n\n\n\n/// Not used by C++.\n/// Unwinds stack, calling \"stop\" function at each frame.\n/// Could be used to implement longjmp().\n_LIBUNWIND_EXPORT _Unwind_Reason_Code\n_Unwind_ForcedUnwind(_Unwind_Exception *exception_object,\n                     _Unwind_Stop_Fn stop, void *stop_parameter) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_ForcedUnwind(ex_obj=%p, stop=%p)\\n\",\n                       (void *)exception_object, (void *)(uintptr_t)stop);\n  unw_context_t uc;\n  unw_getcontext(&uc);\n\n  // Mark that this is a forced unwind, so _Unwind_Resume() can do\n  // the right thing.\n  exception_object->private_1 = (uintptr_t) stop;\n  exception_object->private_2 = (uintptr_t) stop_parameter;\n\n  // do it\n  return unwind_phase2_forced(&uc, exception_object, stop, stop_parameter);\n}\n\n\n/// Called by personality handler during phase 2 to get LSDA for current frame.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetLanguageSpecificData(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_proc_info_t frameInfo;\n  uintptr_t result = 0;\n  if (unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS)\n    result = (uintptr_t)frameInfo.lsda;\n  _LIBUNWIND_TRACE_API(\n      \"_Unwind_GetLanguageSpecificData(context=%p) => 0x%\" PRIxPTR \"\\n\",\n      (void *)context, result);\n  if (result != 0) {\n    if (*((uint8_t *)result) != 0xFF)\n      _LIBUNWIND_DEBUG_LOG(\"lsda at 0x%\" PRIxPTR \" does not start with 0xFF\\n\",\n                           result);\n  }\n  return result;\n}\n\n\n/// Called by personality handler during phase 2 to find the start of the\n/// function.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetRegionStart(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_proc_info_t frameInfo;\n  uintptr_t result = 0;\n  if (unw_get_proc_info(cursor, &frameInfo) == UNW_ESUCCESS)\n    result = (uintptr_t)frameInfo.start_ip;\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetRegionStart(context=%p) => 0x%\" PRIxPTR \"\\n\",\n                       (void *)context, result);\n  return result;\n}\n\n\n/// Called by personality handler during phase 2 if a foreign exception\n// is caught.\n_LIBUNWIND_EXPORT void\n_Unwind_DeleteException(_Unwind_Exception *exception_object) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_DeleteException(ex_obj=%p)\\n\",\n                       (void *)exception_object);\n  if (exception_object->exception_cleanup != NULL)\n    (*exception_object->exception_cleanup)(_URC_FOREIGN_EXCEPTION_CAUGHT,\n                                           exception_object);\n}\n\n#endif // _LIBUNWIND_BUILD_ZERO_COST_APIS && !LIBCXXABI_ARM_EHABI\n\n#if LIBCXXABI_ARM_EHABI\n\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetGR(struct _Unwind_Context *context, int index) {\n  uintptr_t value = 0;\n  _Unwind_VRS_Get(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetGR(context=%p, reg=%d) => 0x%\" PRIx64 \"\\n\",\n                       (void *)context, index, (uint64_t)value);\n  return value;\n}\n\n_LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index,\n                                     uintptr_t value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetGR(context=%p, reg=%d, value=0x%0\"PRIx64\")\\n\",\n                       (void *)context, index, (uint64_t)value);\n  _Unwind_VRS_Set(context, _UVRSC_CORE, (uint32_t)index, _UVRSD_UINT32, &value);\n}\n\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {\n  // remove the thumb-bit before returning\n  uintptr_t value = _Unwind_GetGR(context, 15) & (~(uintptr_t)0x1);\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetIP(context=%p) => 0x%\" PRIx64 \"\\n\",\n                       (void *)context, (uint64_t)value);\n  return value;\n}\n\n_LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *context,\n                                     uintptr_t value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetIP(context=%p, value=0x%0\" PRIx64 \")\\n\",\n                       (void *)context, (uint64_t)value);\n  uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1);\n  _Unwind_SetGR(context, 15, value | thumb_bit);\n}\n\n#else\n\n/// Called by personality handler during phase 2 to get register values.\n_LIBUNWIND_EXPORT uintptr_t\n_Unwind_GetGR(struct _Unwind_Context *context, int index) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_word_t result;\n  unw_get_reg(cursor, index, &result);\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetGR(context=%p, reg=%d) => 0x%\" PRIx64 \"\\n\",\n                       (void *)context, index, (uint64_t)result);\n  return (uintptr_t)result;\n}\n\n/// Called by personality handler during phase 2 to alter register values.\n_LIBUNWIND_EXPORT void _Unwind_SetGR(struct _Unwind_Context *context, int index,\n                                     uintptr_t value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetGR(context=%p, reg=%d, value=0x%0\" PRIx64\n                       \")\\n\",\n                       (void *)context, index, (uint64_t)value);\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_set_reg(cursor, index, value);\n}\n\n/// Called by personality handler during phase 2 to get instruction pointer.\n_LIBUNWIND_EXPORT uintptr_t _Unwind_GetIP(struct _Unwind_Context *context) {\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_word_t result;\n  unw_get_reg(cursor, UNW_REG_IP, &result);\n  _LIBUNWIND_TRACE_API(\"_Unwind_GetIP(context=%p) => 0x%\" PRIx64 \"\\n\",\n                       (void *)context, (uint64_t)result);\n  return (uintptr_t)result;\n}\n\n/// Called by personality handler during phase 2 to alter instruction pointer,\n/// such as setting where the landing pad is, so _Unwind_Resume() will\n/// start executing in the landing pad.\n_LIBUNWIND_EXPORT void _Unwind_SetIP(struct _Unwind_Context *context,\n                                     uintptr_t value) {\n  _LIBUNWIND_TRACE_API(\"_Unwind_SetIP(context=%p, value=0x%0\" PRIx64 \")\\n\",\n                       (void *)context, (uint64_t)value);\n  unw_cursor_t *cursor = (unw_cursor_t *)context;\n  unw_set_reg(cursor, UNW_REG_IP, value);\n}\n\n#endif\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/UnwindRegistersRestore.S",
    "content": "//===-------------------- UnwindRegistersRestore.S ------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"assembly.h\"\n\n  .text\n\n#if defined(__i386__)\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_x866jumptoEv)\n#\n# void libunwind::Registers_x86::jumpto()\n#\n# On entry:\n#  +                       +\n#  +-----------------------+\n#  + thread_state pointer  +\n#  +-----------------------+\n#  + return address        +\n#  +-----------------------+   <-- SP\n#  +                       +\n  movl   4(%esp), %eax\n  # set up eax and ret on new stack location\n  movl  28(%eax), %edx # edx holds new stack pointer\n  subl  $8,%edx\n  movl  %edx, 28(%eax)\n  movl  0(%eax), %ebx\n  movl  %ebx, 0(%edx)\n  movl  40(%eax), %ebx\n  movl  %ebx, 4(%edx)\n  # we now have ret and eax pushed onto where new stack will be\n  # restore all registers\n  movl   4(%eax), %ebx\n  movl   8(%eax), %ecx\n  movl  12(%eax), %edx\n  movl  16(%eax), %edi\n  movl  20(%eax), %esi\n  movl  24(%eax), %ebp\n  movl  28(%eax), %esp\n  # skip ss\n  # skip eflags\n  pop    %eax  # eax was already pushed on new stack\n  ret        # eip was already pushed on new stack\n  # skip cs\n  # skip ds\n  # skip es\n  # skip fs\n  # skip gs\n\n#elif defined(__x86_64__)\n\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind16Registers_x86_646jumptoEv)\n#\n# void libunwind::Registers_x86_64::jumpto()\n#\n# On entry, thread_state pointer is in rdi\n\n  movq  56(%rdi), %rax # rax holds new stack pointer\n  subq  $16, %rax\n  movq  %rax, 56(%rdi)\n  movq  32(%rdi), %rbx  # store new rdi on new stack\n  movq  %rbx, 0(%rax)\n  movq  128(%rdi), %rbx # store new rip on new stack\n  movq  %rbx, 8(%rax)\n  # restore all registers\n  movq    0(%rdi), %rax\n  movq    8(%rdi), %rbx\n  movq   16(%rdi), %rcx\n  movq   24(%rdi), %rdx\n  # restore rdi later\n  movq   40(%rdi), %rsi\n  movq   48(%rdi), %rbp\n  # restore rsp later\n  movq   64(%rdi), %r8\n  movq   72(%rdi), %r9\n  movq   80(%rdi), %r10\n  movq   88(%rdi), %r11\n  movq   96(%rdi), %r12\n  movq  104(%rdi), %r13\n  movq  112(%rdi), %r14\n  movq  120(%rdi), %r15\n  # skip rflags\n  # skip cs\n  # skip fs\n  # skip gs\n  movq  56(%rdi), %rsp  # cut back rsp to new location\n  pop    %rdi      # rdi was saved here earlier\n  ret            # rip was saved here\n\n\n#elif defined(__ppc__)\n\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)\n;\n; void libunwind::Registers_ppc::jumpto()\n;\n; On entry:\n;  thread_state pointer is in r3\n;\n\n  ; restore integral registerrs\n  ; skip r0 for now\n  ; skip r1 for now\n  lwz     r2, 16(r3)\n  ; skip r3 for now\n  ; skip r4 for now\n  ; skip r5 for now\n  lwz     r6, 32(r3)\n  lwz     r7, 36(r3)\n  lwz     r8, 40(r3)\n  lwz     r9, 44(r3)\n  lwz    r10, 48(r3)\n  lwz    r11, 52(r3)\n  lwz    r12, 56(r3)\n  lwz    r13, 60(r3)\n  lwz    r14, 64(r3)\n  lwz    r15, 68(r3)\n  lwz    r16, 72(r3)\n  lwz    r17, 76(r3)\n  lwz    r18, 80(r3)\n  lwz    r19, 84(r3)\n  lwz    r20, 88(r3)\n  lwz    r21, 92(r3)\n  lwz    r22, 96(r3)\n  lwz    r23,100(r3)\n  lwz    r24,104(r3)\n  lwz    r25,108(r3)\n  lwz    r26,112(r3)\n  lwz    r27,116(r3)\n  lwz    r28,120(r3)\n  lwz    r29,124(r3)\n  lwz    r30,128(r3)\n  lwz    r31,132(r3)\n\n  ; restore float registers\n  lfd    f0, 160(r3)\n  lfd    f1, 168(r3)\n  lfd    f2, 176(r3)\n  lfd    f3, 184(r3)\n  lfd    f4, 192(r3)\n  lfd    f5, 200(r3)\n  lfd    f6, 208(r3)\n  lfd    f7, 216(r3)\n  lfd    f8, 224(r3)\n  lfd    f9, 232(r3)\n  lfd    f10,240(r3)\n  lfd    f11,248(r3)\n  lfd    f12,256(r3)\n  lfd    f13,264(r3)\n  lfd    f14,272(r3)\n  lfd    f15,280(r3)\n  lfd    f16,288(r3)\n  lfd    f17,296(r3)\n  lfd    f18,304(r3)\n  lfd    f19,312(r3)\n  lfd    f20,320(r3)\n  lfd    f21,328(r3)\n  lfd    f22,336(r3)\n  lfd    f23,344(r3)\n  lfd    f24,352(r3)\n  lfd    f25,360(r3)\n  lfd    f26,368(r3)\n  lfd    f27,376(r3)\n  lfd    f28,384(r3)\n  lfd    f29,392(r3)\n  lfd    f30,400(r3)\n  lfd    f31,408(r3)\n\n  ; restore vector registers if any are in use\n  lwz    r5,156(r3)  ; test VRsave\n  cmpwi  r5,0\n  beq    Lnovec\n\n  subi  r4,r1,16\n  rlwinm  r4,r4,0,0,27  ; mask low 4-bits\n  ; r4 is now a 16-byte aligned pointer into the red zone\n  ; the _vectorRegisters may not be 16-byte aligned so copy via red zone temp buffer\n\n\n#define LOAD_VECTOR_UNALIGNEDl(_index) \\\n  andis.  r0,r5,(1<<(15-_index))  @\\\n  beq    Ldone  ## _index     @\\\n  lwz    r0, 424+_index*16(r3)  @\\\n  stw    r0, 0(r4)        @\\\n  lwz    r0, 424+_index*16+4(r3)  @\\\n  stw    r0, 4(r4)        @\\\n  lwz    r0, 424+_index*16+8(r3)  @\\\n  stw    r0, 8(r4)        @\\\n  lwz    r0, 424+_index*16+12(r3)@\\\n  stw    r0, 12(r4)        @\\\n  lvx    v ## _index,0,r4    @\\\nLdone  ## _index:\n\n#define LOAD_VECTOR_UNALIGNEDh(_index) \\\n  andi.  r0,r5,(1<<(31-_index))  @\\\n  beq    Ldone  ## _index    @\\\n  lwz    r0, 424+_index*16(r3)  @\\\n  stw    r0, 0(r4)        @\\\n  lwz    r0, 424+_index*16+4(r3)  @\\\n  stw    r0, 4(r4)        @\\\n  lwz    r0, 424+_index*16+8(r3)  @\\\n  stw    r0, 8(r4)        @\\\n  lwz    r0, 424+_index*16+12(r3)@\\\n  stw    r0, 12(r4)        @\\\n  lvx    v ## _index,0,r4    @\\\n  Ldone  ## _index:\n\n\n  LOAD_VECTOR_UNALIGNEDl(0)\n  LOAD_VECTOR_UNALIGNEDl(1)\n  LOAD_VECTOR_UNALIGNEDl(2)\n  LOAD_VECTOR_UNALIGNEDl(3)\n  LOAD_VECTOR_UNALIGNEDl(4)\n  LOAD_VECTOR_UNALIGNEDl(5)\n  LOAD_VECTOR_UNALIGNEDl(6)\n  LOAD_VECTOR_UNALIGNEDl(7)\n  LOAD_VECTOR_UNALIGNEDl(8)\n  LOAD_VECTOR_UNALIGNEDl(9)\n  LOAD_VECTOR_UNALIGNEDl(10)\n  LOAD_VECTOR_UNALIGNEDl(11)\n  LOAD_VECTOR_UNALIGNEDl(12)\n  LOAD_VECTOR_UNALIGNEDl(13)\n  LOAD_VECTOR_UNALIGNEDl(14)\n  LOAD_VECTOR_UNALIGNEDl(15)\n  LOAD_VECTOR_UNALIGNEDh(16)\n  LOAD_VECTOR_UNALIGNEDh(17)\n  LOAD_VECTOR_UNALIGNEDh(18)\n  LOAD_VECTOR_UNALIGNEDh(19)\n  LOAD_VECTOR_UNALIGNEDh(20)\n  LOAD_VECTOR_UNALIGNEDh(21)\n  LOAD_VECTOR_UNALIGNEDh(22)\n  LOAD_VECTOR_UNALIGNEDh(23)\n  LOAD_VECTOR_UNALIGNEDh(24)\n  LOAD_VECTOR_UNALIGNEDh(25)\n  LOAD_VECTOR_UNALIGNEDh(26)\n  LOAD_VECTOR_UNALIGNEDh(27)\n  LOAD_VECTOR_UNALIGNEDh(28)\n  LOAD_VECTOR_UNALIGNEDh(29)\n  LOAD_VECTOR_UNALIGNEDh(30)\n  LOAD_VECTOR_UNALIGNEDh(31)\n\nLnovec:\n  lwz    r0, 136(r3) ; __cr\n  mtocrf  255,r0\n  lwz    r0, 148(r3) ; __ctr\n  mtctr  r0\n  lwz    r0, 0(r3)  ; __ssr0\n  mtctr  r0\n  lwz    r0, 8(r3)  ; do r0 now\n  lwz    r5,28(r3)  ; do r5 now\n  lwz    r4,24(r3)  ; do r4 now\n  lwz    r1,12(r3)  ; do sp now\n  lwz    r3,20(r3)  ; do r3 last\n  bctr\n\n#elif defined(__arm64__)\n\n;\n; void libunwind::Registers_arm64::jumpto()\n;\n; On entry:\n;  thread_state pointer is in x0\n;\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind15Registers_arm646jumptoEv)\n  ; skip restore of x0,x1 for now\n  ldp    x2, x3,  [x0, #0x010]\n  ldp    x4, x5,  [x0, #0x020]\n  ldp    x6, x7,  [x0, #0x030]\n  ldp    x8, x9,  [x0, #0x040]\n  ldp    x10,x11, [x0, #0x050]\n  ldp    x12,x13, [x0, #0x060]\n  ldp    x14,x15, [x0, #0x070]\n  ldp    x16,x17, [x0, #0x080]\n  ldp    x18,x19, [x0, #0x090]\n  ldp    x20,x21, [x0, #0x0A0]\n  ldp    x22,x23, [x0, #0x0B0]\n  ldp    x24,x25, [x0, #0x0C0]\n  ldp    x26,x27, [x0, #0x0D0]\n  ldp    x28,fp,  [x0, #0x0E0]\n  ldr    lr,      [x0, #0x100]  ; restore pc into lr\n  ldr    x1,      [x0, #0x0F8]\n  mov    sp,x1          ; restore sp\n\n  ldp    d0, d1,  [x0, #0x110]\n  ldp    d2, d3,  [x0, #0x120]\n  ldp    d4, d5,  [x0, #0x130]\n  ldp    d6, d7,  [x0, #0x140]\n  ldp    d8, d9,  [x0, #0x150]\n  ldp    d10,d11, [x0, #0x160]\n  ldp    d12,d13, [x0, #0x170]\n  ldp    d14,d15, [x0, #0x180]\n  ldp    d16,d17, [x0, #0x190]\n  ldp    d18,d19, [x0, #0x1A0]\n  ldp    d20,d21, [x0, #0x1B0]\n  ldp    d22,d23, [x0, #0x1C0]\n  ldp    d24,d25, [x0, #0x1D0]\n  ldp    d26,d27, [x0, #0x1E0]\n  ldp    d28,d29, [x0, #0x1F0]\n  ldr    d30,     [x0, #0x200]\n  ldr    d31,     [x0, #0x208]\n\n  ldp    x0, x1,  [x0, #0x000]  ; restore x0,x1\n  ret    lr            ; jump to pc\n\n#elif defined(__arm__) && !defined(__APPLE__)\n\n#if !defined(__ARM_ARCH_ISA_ARM)\n  .thumb\n#endif\n\n@\n@ void libunwind::Registers_arm::restoreCoreAndJumpTo()\n@\n@ On entry:\n@  thread_state pointer is in r0\n@\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm20restoreCoreAndJumpToEv)\n#if !defined(__ARM_ARCH_ISA_ARM)\n  ldr r2, [r0, #52]\n  ldr r3, [r0, #60]\n  mov sp, r2\n  mov lr, r3         @ restore pc into lr\n  ldm r0, {r0-r7}\n#else\n  @ Use lr as base so that r0 can be restored.\n  mov lr, r0\n  @ 32bit thumb-2 restrictions for ldm:\n  @ . the sp (r13) cannot be in the list\n  @ . the pc (r15) and lr (r14) cannot both be in the list in an LDM instruction\n  ldm lr, {r0-r12}\n  ldr sp, [lr, #52]\n  ldr lr, [lr, #60]  @ restore pc into lr\n#endif\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::restoreVFPWithFLDMD(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3-d16\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm19restoreVFPWithFLDMDEPy)\n  @ VFP and iwMMX instructions are only available when compiling with the flags\n  @ that enable them. We do not want to do that in the library (because we do not\n  @ want the compiler to generate instructions that access those) but this is\n  @ only accessed if the personality routine needs these registers. Use of\n  @ these registers implies they are, actually, available on the target, so\n  @ it's ok to execute.\n  @ So, generate the instruction using the corresponding coprocessor mnemonic.\n  vldmia r0, {d0-d15}\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::restoreVFPWithFLDMX(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3-d16\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm19restoreVFPWithFLDMXEPy)\n  vldmia r0, {d0-d15} @ fldmiax is deprecated in ARMv7+ and now behaves like vldmia\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::restoreVFPv3(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm12restoreVFPv3EPy)\n  vldmia r0, {d16-d31}\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::restoreiWMMX(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm12restoreiWMMXEPy)\n#if (!defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_6SM__)) || defined(__ARM_WMMX)\n  ldcl p1, cr0, [r0], #8  @ wldrd wR0, [r0], #8\n  ldcl p1, cr1, [r0], #8  @ wldrd wR1, [r0], #8\n  ldcl p1, cr2, [r0], #8  @ wldrd wR2, [r0], #8\n  ldcl p1, cr3, [r0], #8  @ wldrd wR3, [r0], #8\n  ldcl p1, cr4, [r0], #8  @ wldrd wR4, [r0], #8\n  ldcl p1, cr5, [r0], #8  @ wldrd wR5, [r0], #8\n  ldcl p1, cr6, [r0], #8  @ wldrd wR6, [r0], #8\n  ldcl p1, cr7, [r0], #8  @ wldrd wR7, [r0], #8\n  ldcl p1, cr8, [r0], #8  @ wldrd wR8, [r0], #8\n  ldcl p1, cr9, [r0], #8  @ wldrd wR9, [r0], #8\n  ldcl p1, cr10, [r0], #8  @ wldrd wR10, [r0], #8\n  ldcl p1, cr11, [r0], #8  @ wldrd wR11, [r0], #8\n  ldcl p1, cr12, [r0], #8  @ wldrd wR12, [r0], #8\n  ldcl p1, cr13, [r0], #8  @ wldrd wR13, [r0], #8\n  ldcl p1, cr14, [r0], #8  @ wldrd wR14, [r0], #8\n  ldcl p1, cr15, [r0], #8  @ wldrd wR15, [r0], #8\n#endif\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::restoreiWMMXControl(unw_uint32_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm19restoreiWMMXControlEPj)\n#if (!defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_6SM__)) || defined(__ARM_WMMX)\n  ldc2 p1, cr8, [r0], #4  @ wldrw wCGR0, [r0], #4\n  ldc2 p1, cr9, [r0], #4  @ wldrw wCGR1, [r0], #4\n  ldc2 p1, cr10, [r0], #4  @ wldrw wCGR2, [r0], #4\n  ldc2 p1, cr11, [r0], #4  @ wldrw wCGR3, [r0], #4\n#endif\n  JMP(lr)\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/UnwindRegistersSave.S",
    "content": "//===------------------------ UnwindRegistersSave.S -----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"assembly.h\"\n\n    .text\n\n#if defined(__i386__)\n\n#\n# extern int unw_getcontext(unw_context_t* thread_state)\n#\n# On entry:\n#   +                       +\n#   +-----------------------+\n#   + thread_state pointer  +\n#   +-----------------------+\n#   + return address        +\n#   +-----------------------+   <-- SP\n#   +                       +\n#\nDEFINE_LIBUNWIND_FUNCTION(unw_getcontext)\n  push  %eax\n  movl  8(%esp), %eax\n  movl  %ebx,  4(%eax)\n  movl  %ecx,  8(%eax)\n  movl  %edx, 12(%eax)\n  movl  %edi, 16(%eax)\n  movl  %esi, 20(%eax)\n  movl  %ebp, 24(%eax)\n  movl  %esp, %edx\n  addl  $8, %edx\n  movl  %edx, 28(%eax)  # store what sp was at call site as esp\n  # skip ss\n  # skip eflags\n  movl  4(%esp), %edx\n  movl  %edx, 40(%eax)  # store return address as eip\n  # skip cs\n  # skip ds\n  # skip es\n  # skip fs\n  # skip gs\n  movl  (%esp), %edx\n  movl  %edx, (%eax)  # store original eax\n  popl  %eax\n  xorl  %eax, %eax    # return UNW_ESUCCESS\n  ret\n\n#elif defined(__x86_64__)\n\n#\n# extern int unw_getcontext(unw_context_t* thread_state)\n#\n# On entry:\n#  thread_state pointer is in rdi\n#\nDEFINE_LIBUNWIND_FUNCTION(unw_getcontext)\n  movq  %rax,   (%rdi)\n  movq  %rbx,  8(%rdi)\n  movq  %rcx, 16(%rdi)\n  movq  %rdx, 24(%rdi)\n  movq  %rdi, 32(%rdi)\n  movq  %rsi, 40(%rdi)\n  movq  %rbp, 48(%rdi)\n  movq  %rsp, 56(%rdi)\n  addq  $8,   56(%rdi)\n  movq  %r8,  64(%rdi)\n  movq  %r9,  72(%rdi)\n  movq  %r10, 80(%rdi)\n  movq  %r11, 88(%rdi)\n  movq  %r12, 96(%rdi)\n  movq  %r13,104(%rdi)\n  movq  %r14,112(%rdi)\n  movq  %r15,120(%rdi)\n  movq  (%rsp),%rsi\n  movq  %rsi,128(%rdi) # store return address as rip\n  # skip rflags\n  # skip cs\n  # skip fs\n  # skip gs\n  xorl  %eax, %eax    # return UNW_ESUCCESS\n  ret\n\n#elif defined(__ppc__)\n\n;\n; extern int unw_getcontext(unw_context_t* thread_state)\n;\n; On entry:\n;  thread_state pointer is in r3\n;\nDEFINE_LIBUNWIND_FUNCTION(unw_getcontext)\n  stw    r0,  8(r3)\n  mflr  r0\n  stw    r0,  0(r3)  ; store lr as ssr0\n  stw    r1, 12(r3)\n  stw    r2, 16(r3)\n  stw    r3, 20(r3)\n  stw    r4, 24(r3)\n  stw    r5, 28(r3)\n  stw    r6, 32(r3)\n  stw    r7, 36(r3)\n  stw    r8, 40(r3)\n  stw    r9, 44(r3)\n  stw     r10, 48(r3)\n  stw     r11, 52(r3)\n  stw     r12, 56(r3)\n  stw     r13, 60(r3)\n  stw     r14, 64(r3)\n  stw     r15, 68(r3)\n  stw     r16, 72(r3)\n  stw     r17, 76(r3)\n  stw     r18, 80(r3)\n  stw     r19, 84(r3)\n  stw     r20, 88(r3)\n  stw     r21, 92(r3)\n  stw     r22, 96(r3)\n  stw     r23,100(r3)\n  stw     r24,104(r3)\n  stw     r25,108(r3)\n  stw     r26,112(r3)\n  stw     r27,116(r3)\n  stw     r28,120(r3)\n  stw     r29,124(r3)\n  stw     r30,128(r3)\n  stw     r31,132(r3)\n\n  ; save VRSave register\n  mfspr  r0,256\n  stw    r0,156(r3)\n  ; save CR registers\n  mfcr  r0\n  stw    r0,136(r3)\n  ; save CTR register\n  mfctr  r0\n  stw    r0,148(r3)\n\n  ; save float registers\n  stfd    f0, 160(r3)\n  stfd    f1, 168(r3)\n  stfd    f2, 176(r3)\n  stfd    f3, 184(r3)\n  stfd    f4, 192(r3)\n  stfd    f5, 200(r3)\n  stfd    f6, 208(r3)\n  stfd    f7, 216(r3)\n  stfd    f8, 224(r3)\n  stfd    f9, 232(r3)\n  stfd    f10,240(r3)\n  stfd    f11,248(r3)\n  stfd    f12,256(r3)\n  stfd    f13,264(r3)\n  stfd    f14,272(r3)\n  stfd    f15,280(r3)\n  stfd    f16,288(r3)\n  stfd    f17,296(r3)\n  stfd    f18,304(r3)\n  stfd    f19,312(r3)\n  stfd    f20,320(r3)\n  stfd    f21,328(r3)\n  stfd    f22,336(r3)\n  stfd    f23,344(r3)\n  stfd    f24,352(r3)\n  stfd    f25,360(r3)\n  stfd    f26,368(r3)\n  stfd    f27,376(r3)\n  stfd    f28,384(r3)\n  stfd    f29,392(r3)\n  stfd    f30,400(r3)\n  stfd    f31,408(r3)\n\n\n  ; save vector registers\n\n  subi  r4,r1,16\n  rlwinm  r4,r4,0,0,27  ; mask low 4-bits\n  ; r4 is now a 16-byte aligned pointer into the red zone\n\n#define SAVE_VECTOR_UNALIGNED(_vec, _offset) \\\n  stvx  _vec,0,r4           @\\\n  lwz    r5, 0(r4)          @\\\n  stw    r5, _offset(r3)    @\\\n  lwz    r5, 4(r4)          @\\\n  stw    r5, _offset+4(r3)  @\\\n  lwz    r5, 8(r4)          @\\\n  stw    r5, _offset+8(r3)  @\\\n  lwz    r5, 12(r4)         @\\\n  stw    r5, _offset+12(r3)\n\n  SAVE_VECTOR_UNALIGNED( v0, 424+0x000)\n  SAVE_VECTOR_UNALIGNED( v1, 424+0x010)\n  SAVE_VECTOR_UNALIGNED( v2, 424+0x020)\n  SAVE_VECTOR_UNALIGNED( v3, 424+0x030)\n  SAVE_VECTOR_UNALIGNED( v4, 424+0x040)\n  SAVE_VECTOR_UNALIGNED( v5, 424+0x050)\n  SAVE_VECTOR_UNALIGNED( v6, 424+0x060)\n  SAVE_VECTOR_UNALIGNED( v7, 424+0x070)\n  SAVE_VECTOR_UNALIGNED( v8, 424+0x080)\n  SAVE_VECTOR_UNALIGNED( v9, 424+0x090)\n  SAVE_VECTOR_UNALIGNED(v10, 424+0x0A0)\n  SAVE_VECTOR_UNALIGNED(v11, 424+0x0B0)\n  SAVE_VECTOR_UNALIGNED(v12, 424+0x0C0)\n  SAVE_VECTOR_UNALIGNED(v13, 424+0x0D0)\n  SAVE_VECTOR_UNALIGNED(v14, 424+0x0E0)\n  SAVE_VECTOR_UNALIGNED(v15, 424+0x0F0)\n  SAVE_VECTOR_UNALIGNED(v16, 424+0x100)\n  SAVE_VECTOR_UNALIGNED(v17, 424+0x110)\n  SAVE_VECTOR_UNALIGNED(v18, 424+0x120)\n  SAVE_VECTOR_UNALIGNED(v19, 424+0x130)\n  SAVE_VECTOR_UNALIGNED(v20, 424+0x140)\n  SAVE_VECTOR_UNALIGNED(v21, 424+0x150)\n  SAVE_VECTOR_UNALIGNED(v22, 424+0x160)\n  SAVE_VECTOR_UNALIGNED(v23, 424+0x170)\n  SAVE_VECTOR_UNALIGNED(v24, 424+0x180)\n  SAVE_VECTOR_UNALIGNED(v25, 424+0x190)\n  SAVE_VECTOR_UNALIGNED(v26, 424+0x1A0)\n  SAVE_VECTOR_UNALIGNED(v27, 424+0x1B0)\n  SAVE_VECTOR_UNALIGNED(v28, 424+0x1C0)\n  SAVE_VECTOR_UNALIGNED(v29, 424+0x1D0)\n  SAVE_VECTOR_UNALIGNED(v30, 424+0x1E0)\n  SAVE_VECTOR_UNALIGNED(v31, 424+0x1F0)\n\n  li  r3, 0    ; return UNW_ESUCCESS\n  blr\n\n\n#elif defined(__arm64__)\n\n;\n; extern int unw_getcontext(unw_context_t* thread_state)\n;\n; On entry:\n;  thread_state pointer is in x0\n;\n  .p2align 2\nDEFINE_LIBUNWIND_FUNCTION(unw_getcontext)\n  stp    x0, x1,  [x0, #0x000]\n  stp    x2, x3,  [x0, #0x010]\n  stp    x4, x5,  [x0, #0x020]\n  stp    x6, x7,  [x0, #0x030]\n  stp    x8, x9,  [x0, #0x040]\n  stp    x10,x11, [x0, #0x050]\n  stp    x12,x13, [x0, #0x060]\n  stp    x14,x15, [x0, #0x070]\n  stp    x16,x17, [x0, #0x080]\n  stp    x18,x19, [x0, #0x090]\n  stp    x20,x21, [x0, #0x0A0]\n  stp    x22,x23, [x0, #0x0B0]\n  stp    x24,x25, [x0, #0x0C0]\n  stp    x26,x27, [x0, #0x0D0]\n  stp    x28,fp,  [x0, #0x0E0]\n  str    lr,      [x0, #0x0F0]\n  mov    x1,sp\n  str    x1,      [x0, #0x0F8]\n  str    lr,      [x0, #0x100]    ; store return address as pc\n  ; skip cpsr\n  stp    d0, d1,  [x0, #0x110]\n  stp    d2, d3,  [x0, #0x120]\n  stp    d4, d5,  [x0, #0x130]\n  stp    d6, d7,  [x0, #0x140]\n  stp    d8, d9,  [x0, #0x150]\n  stp    d10,d11, [x0, #0x160]\n  stp    d12,d13, [x0, #0x170]\n  stp    d14,d15, [x0, #0x180]\n  stp    d16,d17, [x0, #0x190]\n  stp    d18,d19, [x0, #0x1A0]\n  stp    d20,d21, [x0, #0x1B0]\n  stp    d22,d23, [x0, #0x1C0]\n  stp    d24,d25, [x0, #0x1D0]\n  stp    d26,d27, [x0, #0x1E0]\n  stp    d28,d29, [x0, #0x1F0]\n  str    d30,     [x0, #0x200]\n  str    d31,     [x0, #0x208]\n  ldr    x0, #0      ; return UNW_ESUCCESS\n  ret\n\n#elif defined(__arm__) && !defined(__APPLE__)\n\n#if !defined(__ARM_ARCH_ISA_ARM)\n  .thumb\n#endif\n\n@\n@ extern int unw_getcontext(unw_context_t* thread_state)\n@\n@ On entry:\n@  thread_state pointer is in r0\n@ \n@ Per EHABI #4.7 this only saves the core integer registers.\n@ EHABI #7.4.5 notes that in general all VRS registers should be restored\n@ however this is very hard to do for VFP registers because it is unknown\n@ to the library how many registers are implemented by the architecture.\n@ Instead, VFP registers are demand saved by logic external to unw_getcontext.\n@\n  .p2align 2\nDEFINE_LIBUNWIND_FUNCTION(unw_getcontext)\n#if !defined(__ARM_ARCH_ISA_ARM)\n  stm r0!, {r0-r7}\n  mov r2, sp\n  mov r3, lr\n  str r2, [r0, #52]\n  str r3, [r0, #56]\n  str r3, [r0, #60]  @ store return address as pc\n#else\n  @ 32bit thumb-2 restrictions for stm:\n  @ . the sp (r13) cannot be in the list\n  @ . the pc (r15) cannot be in the list in an STM instruction\n  stm r0, {r0-r12}\n  str sp, [r0, #52]\n  str lr, [r0, #56]\n  str lr, [r0, #60]  @ store return address as pc\n#endif\n#if __ARM_ARCH_ISA_THUMB == 1\n  @ T1 does not have a non-cpsr-clobbering register-zeroing instruction.\n  @ It is safe to use here though because we are about to return, and cpsr is\n  @ not expected to be preserved.\n  movs r0, #0        @ return UNW_ESUCCESS\n#else\n  mov r0, #0         @ return UNW_ESUCCESS\n#endif\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::saveVFPWithFSTMD(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3-d16\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm16saveVFPWithFSTMDEPy)\n  vstmia r0, {d0-d15}\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::saveVFPWithFSTMX(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3-d16\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm16saveVFPWithFSTMXEPy)\n  vstmia r0, {d0-d15} @ fstmiax is deprecated in ARMv7+ and now behaves like vstmia\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::saveVFPv3(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\n  .fpu vfpv3\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm9saveVFPv3EPy)\n  @ VFP and iwMMX instructions are only available when compiling with the flags\n  @ that enable them. We do not want to do that in the library (because we do not\n  @ want the compiler to generate instructions that access those) but this is\n  @ only accessed if the personality routine needs these registers. Use of\n  @ these registers implies they are, actually, available on the target, so\n  @ it's ok to execute.\n  @ So, generate the instructions using the corresponding coprocessor mnemonic.\n  vstmia r0, {d16-d31}\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::saveiWMMX(unw_fpreg_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm9saveiWMMXEPy)\n#if (!defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_6SM__)) || defined(__ARM_WMMX)\n  stcl p1, cr0, [r0], #8  @ wstrd wR0, [r0], #8\n  stcl p1, cr1, [r0], #8  @ wstrd wR1, [r0], #8\n  stcl p1, cr2, [r0], #8  @ wstrd wR2, [r0], #8\n  stcl p1, cr3, [r0], #8  @ wstrd wR3, [r0], #8\n  stcl p1, cr4, [r0], #8  @ wstrd wR4, [r0], #8\n  stcl p1, cr5, [r0], #8  @ wstrd wR5, [r0], #8\n  stcl p1, cr6, [r0], #8  @ wstrd wR6, [r0], #8\n  stcl p1, cr7, [r0], #8  @ wstrd wR7, [r0], #8\n  stcl p1, cr8, [r0], #8  @ wstrd wR8, [r0], #8\n  stcl p1, cr9, [r0], #8  @ wstrd wR9, [r0], #8\n  stcl p1, cr10, [r0], #8  @ wstrd wR10, [r0], #8\n  stcl p1, cr11, [r0], #8  @ wstrd wR11, [r0], #8\n  stcl p1, cr12, [r0], #8  @ wstrd wR12, [r0], #8\n  stcl p1, cr13, [r0], #8  @ wstrd wR13, [r0], #8\n  stcl p1, cr14, [r0], #8  @ wstrd wR14, [r0], #8\n  stcl p1, cr15, [r0], #8  @ wstrd wR15, [r0], #8\n#endif\n  JMP(lr)\n\n@\n@ static void libunwind::Registers_arm::saveiWMMXControl(unw_uint32_t* values)\n@\n@ On entry:\n@  values pointer is in r0\n@\n  .p2align 2\nDEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm16saveiWMMXControlEPj)\n#if (!defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_6SM__)) || defined(__ARM_WMMX)\n  stc2 p1, cr8, [r0], #4  @ wstrw wCGR0, [r0], #4\n  stc2 p1, cr9, [r0], #4  @ wstrw wCGR1, [r0], #4\n  stc2 p1, cr10, [r0], #4  @ wstrw wCGR2, [r0], #4\n  stc2 p1, cr11, [r0], #4  @ wstrw wCGR3, [r0], #4\n#endif\n  JMP(lr)\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/Unwind_AppleExtras.cpp",
    "content": "//===--------------------- Unwind_AppleExtras.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//===----------------------------------------------------------------------===//\n\n#include \"config.h\"\n#include \"DwarfParser.hpp\"\n#include \"unwind_ext.h\"\n\n\n// private keymgr stuff\n#define KEYMGR_GCC3_DW2_OBJ_LIST 302\nextern \"C\" {\n extern void _keymgr_set_and_unlock_processwide_ptr(int key, void *ptr);\n extern void *_keymgr_get_and_lock_processwide_ptr(int key);\n}\n\n// undocumented libgcc \"struct object\"\nstruct libgcc_object {\n  void          *start;\n  void          *unused1;\n  void          *unused2;\n  void          *fde;\n  unsigned long  encoding;\n  void          *fde_end;\n  libgcc_object *next;\n};\n\n// undocumented libgcc \"struct km_object_info\" referenced by\n// KEYMGR_GCC3_DW2_OBJ_LIST\nstruct libgcc_object_info {\n  libgcc_object   *seen_objects;\n  libgcc_object   *unseen_objects;\n  unsigned         spare[2];\n};\n\n\n// static linker symbols to prevent wrong two level namespace for _Unwind symbols\n#if defined(__arm__)\n   #define NOT_HERE_BEFORE_5_0(sym)     \\\n       extern const char sym##_tmp30 __asm(\"$ld$hide$os3.0$_\" #sym ); \\\n       __attribute__((visibility(\"default\"))) const char sym##_tmp30 = 0; \\\n       extern const char sym##_tmp31 __asm(\"$ld$hide$os3.1$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp31 = 0; \\\n       extern const char sym##_tmp32 __asm(\"$ld$hide$os3.2$_\" #sym );\\\n           __attribute__((visibility(\"default\"))) const char sym##_tmp32 = 0; \\\n       extern const char sym##_tmp40 __asm(\"$ld$hide$os4.0$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp40 = 0; \\\n       extern const char sym##_tmp41 __asm(\"$ld$hide$os4.1$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp41 = 0; \\\n       extern const char sym##_tmp42 __asm(\"$ld$hide$os4.2$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp42 = 0; \\\n       extern const char sym##_tmp43 __asm(\"$ld$hide$os4.3$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp43 = 0;\n#elif defined(__arm64__)\n  #define NOT_HERE_BEFORE_10_6(sym)\n  #define NEVER_HERE(sym)\n#else\n  #define NOT_HERE_BEFORE_10_6(sym) \\\n    extern const char sym##_tmp4 __asm(\"$ld$hide$os10.4$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp4 = 0; \\\n    extern const char sym##_tmp5 __asm(\"$ld$hide$os10.5$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp5 = 0;\n  #define NEVER_HERE(sym) \\\n    extern const char sym##_tmp4 __asm(\"$ld$hide$os10.4$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp4 = 0; \\\n    extern const char sym##_tmp5 __asm(\"$ld$hide$os10.5$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp5 = 0; \\\n    extern const char sym##_tmp6 __asm(\"$ld$hide$os10.6$_\" #sym ); \\\n          __attribute__((visibility(\"default\"))) const char sym##_tmp6 = 0;\n#endif\n\n\n#if _LIBUNWIND_BUILD_ZERO_COST_APIS\n\n//\n// symbols in libSystem.dylib in 10.6 and later, but are in libgcc_s.dylib in\n// earlier versions\n//\nNOT_HERE_BEFORE_10_6(_Unwind_DeleteException)\nNOT_HERE_BEFORE_10_6(_Unwind_Find_FDE)\nNOT_HERE_BEFORE_10_6(_Unwind_ForcedUnwind)\nNOT_HERE_BEFORE_10_6(_Unwind_GetGR)\nNOT_HERE_BEFORE_10_6(_Unwind_GetIP)\nNOT_HERE_BEFORE_10_6(_Unwind_GetLanguageSpecificData)\nNOT_HERE_BEFORE_10_6(_Unwind_GetRegionStart)\nNOT_HERE_BEFORE_10_6(_Unwind_RaiseException)\nNOT_HERE_BEFORE_10_6(_Unwind_Resume)\nNOT_HERE_BEFORE_10_6(_Unwind_SetGR)\nNOT_HERE_BEFORE_10_6(_Unwind_SetIP)\nNOT_HERE_BEFORE_10_6(_Unwind_Backtrace)\nNOT_HERE_BEFORE_10_6(_Unwind_FindEnclosingFunction)\nNOT_HERE_BEFORE_10_6(_Unwind_GetCFA)\nNOT_HERE_BEFORE_10_6(_Unwind_GetDataRelBase)\nNOT_HERE_BEFORE_10_6(_Unwind_GetTextRelBase)\nNOT_HERE_BEFORE_10_6(_Unwind_Resume_or_Rethrow)\nNOT_HERE_BEFORE_10_6(_Unwind_GetIPInfo)\nNOT_HERE_BEFORE_10_6(__register_frame)\nNOT_HERE_BEFORE_10_6(__deregister_frame)\n\n//\n// symbols in libSystem.dylib for compatibility, but we don't want any new code\n// using them\n//\nNEVER_HERE(__register_frame_info_bases)\nNEVER_HERE(__register_frame_info)\nNEVER_HERE(__register_frame_info_table_bases)\nNEVER_HERE(__register_frame_info_table)\nNEVER_HERE(__register_frame_table)\nNEVER_HERE(__deregister_frame_info)\nNEVER_HERE(__deregister_frame_info_bases)\n\n#endif // _LIBUNWIND_BUILD_ZERO_COST_APIS\n\n\n\n\n#if _LIBUNWIND_BUILD_SJLJ_APIS\n//\n// symbols in libSystem.dylib in iOS 5.0 and later, but are in libgcc_s.dylib in\n// earlier versions\n//\nNOT_HERE_BEFORE_5_0(_Unwind_GetLanguageSpecificData)\nNOT_HERE_BEFORE_5_0(_Unwind_GetRegionStart)\nNOT_HERE_BEFORE_5_0(_Unwind_GetIP)\nNOT_HERE_BEFORE_5_0(_Unwind_SetGR)\nNOT_HERE_BEFORE_5_0(_Unwind_SetIP)\nNOT_HERE_BEFORE_5_0(_Unwind_DeleteException)\nNOT_HERE_BEFORE_5_0(_Unwind_SjLj_Register)\nNOT_HERE_BEFORE_5_0(_Unwind_GetGR)\nNOT_HERE_BEFORE_5_0(_Unwind_GetIPInfo)\nNOT_HERE_BEFORE_5_0(_Unwind_GetCFA)\nNOT_HERE_BEFORE_5_0(_Unwind_SjLj_Resume)\nNOT_HERE_BEFORE_5_0(_Unwind_SjLj_RaiseException)\nNOT_HERE_BEFORE_5_0(_Unwind_SjLj_Resume_or_Rethrow)\nNOT_HERE_BEFORE_5_0(_Unwind_SjLj_Unregister)\n\n#endif // _LIBUNWIND_BUILD_SJLJ_APIS\n\n\nnamespace libunwind {\n\n_LIBUNWIND_HIDDEN\nbool checkKeyMgrRegisteredFDEs(uintptr_t pc, void *&fde) {\n#if __MAC_OS_X_VERSION_MIN_REQUIRED\n  // lastly check for old style keymgr registration of dynamically generated\n  // FDEs acquire exclusive access to libgcc_object_info\n  libgcc_object_info *head = (libgcc_object_info *)\n                _keymgr_get_and_lock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST);\n  if (head != NULL) {\n    // look at each FDE in keymgr\n    for (libgcc_object *ob = head->unseen_objects; ob != NULL; ob = ob->next) {\n      CFI_Parser<LocalAddressSpace>::FDE_Info fdeInfo;\n      CFI_Parser<LocalAddressSpace>::CIE_Info cieInfo;\n      const char *msg = CFI_Parser<LocalAddressSpace>::decodeFDE(\n                                      LocalAddressSpace::sThisAddressSpace,\n                                      (uintptr_t)ob->fde, &fdeInfo, &cieInfo);\n      if (msg == NULL) {\n        // Check if this FDE is for a function that includes the pc\n        if ((fdeInfo.pcStart <= pc) && (pc < fdeInfo.pcEnd)) {\n          fde = (void*)fdeInfo.pcStart;\n          _keymgr_set_and_unlock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST,\n                                                 head);\n          return true;\n        }\n      }\n    }\n  }\n  // release libgcc_object_info\n  _keymgr_set_and_unlock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST, head);\n#else\n  (void)pc;\n  (void)fde;\n#endif\n  return false;\n}\n\n}\n\n\n#if !defined(FOR_DYLD) && _LIBUNWIND_BUILD_SJLJ_APIS\n\n#include <System/pthread_machdep.h>\n\n// Accessors to get get/set linked list of frames for sjlj based execeptions.\n_LIBUNWIND_HIDDEN\nstruct _Unwind_FunctionContext *__Unwind_SjLj_GetTopOfFunctionStack() {\n  return (struct _Unwind_FunctionContext *)\n    _pthread_getspecific_direct(__PTK_LIBC_DYLD_Unwind_SjLj_Key);\n}\n\n_LIBUNWIND_HIDDEN\nvoid __Unwind_SjLj_SetTopOfFunctionStack(struct _Unwind_FunctionContext *fc) {\n  _pthread_setspecific_direct(__PTK_LIBC_DYLD_Unwind_SjLj_Key, fc);\n}\n#endif\n\n\n\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/assembly.h",
    "content": "/* ===-- assembly.h - libUnwind assembler support macros -------------------===\n *\n *                     The LLVM Compiler Infrastructure\n *\n * This file is dual licensed under the MIT and the University of Illinois Open\n * Source Licenses. See LICENSE.TXT for details.\n *\n * ===----------------------------------------------------------------------===\n *\n * This file defines macros for use in libUnwind assembler source.\n * This file is not part of the interface of this library.\n *\n * ===----------------------------------------------------------------------===\n */\n\n#ifndef UNWIND_ASSEMBLY_H\n#define UNWIND_ASSEMBLY_H\n\n#if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)\n#define SEPARATOR @\n#elif defined(__arm64__)\n#define SEPARATOR %%\n#else\n#define SEPARATOR ;\n#endif\n\n#if defined(__APPLE__)\n#define HIDDEN_DIRECTIVE .private_extern\n#else\n#define HIDDEN_DIRECTIVE .hidden\n#endif\n\n#define GLUE2(a, b) a ## b\n#define GLUE(a, b) GLUE2(a, b)\n#define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)\n\n#if defined(__APPLE__)\n#define SYMBOL_IS_FUNC(name)\n#elif defined(__ELF__)\n#if defined(__arm__)\n#define SYMBOL_IS_FUNC(name) .type name,%function\n#else\n#define SYMBOL_IS_FUNC(name) .type name,@function\n#endif\n#else\n#define SYMBOL_IS_FUNC(name)                                                   \\\n  .def name SEPARATOR                                                          \\\n    .scl 2 SEPARATOR                                                           \\\n    .type 32 SEPARATOR                                                         \\\n  .endef\n#endif\n\n#define DEFINE_LIBUNWIND_FUNCTION(name)                   \\\n  .globl SYMBOL_NAME(name) SEPARATOR                      \\\n  SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR             \\\n  SYMBOL_NAME(name):\n\n#define DEFINE_LIBUNWIND_PRIVATE_FUNCTION(name)           \\\n  .globl SYMBOL_NAME(name) SEPARATOR                      \\\n  HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR            \\\n  SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR             \\\n  SYMBOL_NAME(name):\n\n#if defined(__arm__)\n#if !defined(__ARM_ARCH)\n#define __ARM_ARCH 4\n#endif\n\n#if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5\n#define ARM_HAS_BX\n#endif\n\n#ifdef ARM_HAS_BX\n#define JMP(r) bx r\n#else\n#define JMP(r) mov pc, r\n#endif\n#endif /* __arm__ */\n\n#endif /* UNWIND_ASSEMBLY_H */\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/config.h",
    "content": "//===----------------------------- config.h -------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Defines macros used within libuwind project.\n//\n//===----------------------------------------------------------------------===//\n\n\n#ifndef LIBUNWIND_CONFIG_H\n#define LIBUNWIND_CONFIG_H\n\n#include <assert.h>\n#include <stdio.h>\n\n// Define static_assert() unless already defined by compiler.\n#ifndef __has_feature\n  #define __has_feature(__x) 0\n#endif\n#if !(__has_feature(cxx_static_assert)) && !defined(static_assert)\n  #define static_assert(__b, __m) \\\n      extern int compile_time_assert_failed[ ( __b ) ? 1 : -1 ]  \\\n                                                  __attribute__( ( unused ) );\n#endif\n\n// Platform specific configuration defines.\n#ifdef __APPLE__\n  #include <Availability.h>\n  #ifdef __cplusplus\n    extern \"C\" {\n  #endif\n    void __assert_rtn(const char *, const char *, int, const char *)\n                                                      __attribute__((noreturn));\n  #ifdef __cplusplus\n    }\n  #endif\n\n  #define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \\\n                                           defined(__x86_64__) || \\\n                                           defined(__arm64__))\n  #define _LIBUNWIND_BUILD_SJLJ_APIS      defined(__arm__)\n  #define _LIBUNWIND_SUPPORT_FRAME_APIS   (defined(__i386__) || \\\n                                           defined(__x86_64__))\n  #define _LIBUNWIND_EXPORT               __attribute__((visibility(\"default\")))\n  #define _LIBUNWIND_HIDDEN               __attribute__((visibility(\"hidden\")))\n  #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, \"libunwind: \" msg, __VA_ARGS__)\n  #define _LIBUNWIND_ABORT(msg) __assert_rtn(__func__, __FILE__, __LINE__, msg)\n\n  #if defined(FOR_DYLD)\n    #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1\n    #define _LIBUNWIND_SUPPORT_DWARF_UNWIND   0\n    #define _LIBUNWIND_SUPPORT_DWARF_INDEX    0\n  #else\n    #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1\n    #define _LIBUNWIND_SUPPORT_DWARF_UNWIND   1\n    #define _LIBUNWIND_SUPPORT_DWARF_INDEX    0\n  #endif\n\n#else\n  #include <stdlib.h>\n\n  static inline void assert_rtn(const char* func, const char* file, int line, const char* msg)  __attribute__ ((noreturn));\n  static inline void assert_rtn(const char* func, const char* file, int line, const char* msg) {\n    fprintf(stderr, \"libunwind: %s %s:%d - %s\\n\",  func, file, line, msg);\n    assert(false);\n    abort();\n  }\n\n  #define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \\\n                                           defined(__x86_64__) || \\\n                                           defined(__arm64__) || \\\n                                           defined(__arm__))\n  #define _LIBUNWIND_BUILD_SJLJ_APIS      0\n  #define _LIBUNWIND_SUPPORT_FRAME_APIS   (defined(__i386__) || \\\n                                           defined(__x86_64__))\n  #define _LIBUNWIND_EXPORT               __attribute__((visibility(\"default\")))\n  #define _LIBUNWIND_HIDDEN               __attribute__((visibility(\"hidden\")))\n  #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, \"libuwind: \" msg, __VA_ARGS__)\n  #define _LIBUNWIND_ABORT(msg) assert_rtn(__func__, __FILE__, __LINE__, msg)\n\n  #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 0\n  #define _LIBUNWIND_SUPPORT_DWARF_UNWIND !defined(__arm__) || \\\n                                          defined(__ARM_DWARF_EH__)\n  #define _LIBUNWIND_SUPPORT_DWARF_INDEX _LIBUNWIND_SUPPORT_DWARF_UNWIND\n#endif\n\n\n// Macros that define away in non-Debug builds\n#ifdef NDEBUG\n  #define _LIBUNWIND_DEBUG_LOG(msg, ...)\n  #define _LIBUNWIND_TRACE_API(msg, ...)\n  #define _LIBUNWIND_TRACING_UNWINDING 0\n  #define _LIBUNWIND_TRACE_UNWINDING(msg, ...)\n  #define _LIBUNWIND_LOG_NON_ZERO(x) x\n#else\n  #ifdef __cplusplus\n    extern \"C\" {\n  #endif\n    extern  bool logAPIs();\n    extern  bool logUnwinding();\n  #ifdef __cplusplus\n    }\n  #endif\n  #define _LIBUNWIND_DEBUG_LOG(msg, ...)  _LIBUNWIND_LOG(msg, __VA_ARGS__)\n  #define _LIBUNWIND_LOG_NON_ZERO(x) \\\n            do { \\\n              int _err = x; \\\n              if ( _err != 0 ) \\\n                _LIBUNWIND_LOG(\"\" #x \"=%d in %s\", _err, __FUNCTION__); \\\n             } while (0)\n  #define _LIBUNWIND_TRACE_API(msg, ...) \\\n            do { \\\n              if ( logAPIs() ) _LIBUNWIND_LOG(msg, __VA_ARGS__); \\\n            } while(0)\n  #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \\\n            do { \\\n              if ( logUnwinding() ) _LIBUNWIND_LOG(msg, __VA_ARGS__); \\\n            } while(0)\n  #define _LIBUNWIND_TRACING_UNWINDING logUnwinding()\n#endif\n\n\n#endif // LIBUNWIND_CONFIG_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/dwarf2.h",
    "content": "//===------------------------------- dwarf2.h -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n\n/*\n   These constants were taken from version 3 of the DWARF standard,\n   which is Copyright (c) 2005 Free Standards Group, and\n   Copyright (c) 1992, 1993 UNIX International, Inc.\n*/\n\n#ifndef __DWARF2__\n#define __DWARF2__\n\n// DWARF unwind instructions\nenum {\n  DW_CFA_nop                 = 0x0,\n  DW_CFA_set_loc             = 0x1,\n  DW_CFA_advance_loc1        = 0x2,\n  DW_CFA_advance_loc2        = 0x3,\n  DW_CFA_advance_loc4        = 0x4,\n  DW_CFA_offset_extended     = 0x5,\n  DW_CFA_restore_extended    = 0x6,\n  DW_CFA_undefined           = 0x7,\n  DW_CFA_same_value          = 0x8,\n  DW_CFA_register            = 0x9,\n  DW_CFA_remember_state      = 0xA,\n  DW_CFA_restore_state       = 0xB,\n  DW_CFA_def_cfa             = 0xC,\n  DW_CFA_def_cfa_register    = 0xD,\n  DW_CFA_def_cfa_offset      = 0xE,\n  DW_CFA_def_cfa_expression  = 0xF,\n  DW_CFA_expression         = 0x10,\n  DW_CFA_offset_extended_sf = 0x11,\n  DW_CFA_def_cfa_sf         = 0x12,\n  DW_CFA_def_cfa_offset_sf  = 0x13,\n  DW_CFA_val_offset         = 0x14,\n  DW_CFA_val_offset_sf      = 0x15,\n  DW_CFA_val_expression     = 0x16,\n  DW_CFA_advance_loc        = 0x40, // high 2 bits are 0x1, lower 6 bits are delta\n  DW_CFA_offset             = 0x80, // high 2 bits are 0x2, lower 6 bits are register\n  DW_CFA_restore            = 0xC0, // high 2 bits are 0x3, lower 6 bits are register\n\n  // GNU extensions\n  DW_CFA_GNU_window_save              = 0x2D,\n  DW_CFA_GNU_args_size                = 0x2E,\n  DW_CFA_GNU_negative_offset_extended = 0x2F\n};\n\n\n// FSF exception handling Pointer-Encoding constants\n// Used in CFI augmentation by GCC\nenum {\n  DW_EH_PE_ptr       = 0x00,\n  DW_EH_PE_uleb128   = 0x01,\n  DW_EH_PE_udata2    = 0x02,\n  DW_EH_PE_udata4    = 0x03,\n  DW_EH_PE_udata8    = 0x04,\n  DW_EH_PE_signed    = 0x08,\n  DW_EH_PE_sleb128   = 0x09,\n  DW_EH_PE_sdata2    = 0x0A,\n  DW_EH_PE_sdata4    = 0x0B,\n  DW_EH_PE_sdata8    = 0x0C,\n  DW_EH_PE_absptr    = 0x00,\n  DW_EH_PE_pcrel     = 0x10,\n  DW_EH_PE_textrel   = 0x20,\n  DW_EH_PE_datarel   = 0x30,\n  DW_EH_PE_funcrel   = 0x40,\n  DW_EH_PE_aligned   = 0x50,\n  DW_EH_PE_indirect  = 0x80,\n  DW_EH_PE_omit      = 0xFF\n};\n\n\n// DWARF expressions\nenum {\n  DW_OP_addr               = 0x03, // constant address (size target specific)\n  DW_OP_deref              = 0x06,\n  DW_OP_const1u            = 0x08, // 1-byte constant\n  DW_OP_const1s            = 0x09, // 1-byte constant\n  DW_OP_const2u            = 0x0A, // 2-byte constant\n  DW_OP_const2s            = 0x0B, // 2-byte constant\n  DW_OP_const4u            = 0x0C, // 4-byte constant\n  DW_OP_const4s            = 0x0D, // 4-byte constant\n  DW_OP_const8u            = 0x0E, // 8-byte constant\n  DW_OP_const8s            = 0x0F, // 8-byte constant\n  DW_OP_constu             = 0x10, // ULEB128 constant\n  DW_OP_consts             = 0x11, // SLEB128 constant\n  DW_OP_dup                = 0x12,\n  DW_OP_drop               = 0x13,\n  DW_OP_over               = 0x14,\n  DW_OP_pick               = 0x15, // 1-byte stack index\n  DW_OP_swap               = 0x16,\n  DW_OP_rot                = 0x17,\n  DW_OP_xderef             = 0x18,\n  DW_OP_abs                = 0x19,\n  DW_OP_and                = 0x1A,\n  DW_OP_div                = 0x1B,\n  DW_OP_minus              = 0x1C,\n  DW_OP_mod                = 0x1D,\n  DW_OP_mul                = 0x1E,\n  DW_OP_neg                = 0x1F,\n  DW_OP_not                = 0x20,\n  DW_OP_or                 = 0x21,\n  DW_OP_plus               = 0x22,\n  DW_OP_plus_uconst        = 0x23, // ULEB128 addend\n  DW_OP_shl                = 0x24,\n  DW_OP_shr                = 0x25,\n  DW_OP_shra               = 0x26,\n  DW_OP_xor                = 0x27,\n  DW_OP_skip               = 0x2F, // signed 2-byte constant\n  DW_OP_bra                = 0x28, // signed 2-byte constant\n  DW_OP_eq                 = 0x29,\n  DW_OP_ge                 = 0x2A,\n  DW_OP_gt                 = 0x2B,\n  DW_OP_le                 = 0x2C,\n  DW_OP_lt                 = 0x2D,\n  DW_OP_ne                 = 0x2E,\n  DW_OP_lit0               = 0x30, // Literal 0\n  DW_OP_lit1               = 0x31, // Literal 1\n  DW_OP_lit2               = 0x32, // Literal 2\n  DW_OP_lit3               = 0x33, // Literal 3\n  DW_OP_lit4               = 0x34, // Literal 4\n  DW_OP_lit5               = 0x35, // Literal 5\n  DW_OP_lit6               = 0x36, // Literal 6\n  DW_OP_lit7               = 0x37, // Literal 7\n  DW_OP_lit8               = 0x38, // Literal 8\n  DW_OP_lit9               = 0x39, // Literal 9\n  DW_OP_lit10              = 0x3A, // Literal 10\n  DW_OP_lit11              = 0x3B, // Literal 11\n  DW_OP_lit12              = 0x3C, // Literal 12\n  DW_OP_lit13              = 0x3D, // Literal 13\n  DW_OP_lit14              = 0x3E, // Literal 14\n  DW_OP_lit15              = 0x3F, // Literal 15\n  DW_OP_lit16              = 0x40, // Literal 16\n  DW_OP_lit17              = 0x41, // Literal 17\n  DW_OP_lit18              = 0x42, // Literal 18\n  DW_OP_lit19              = 0x43, // Literal 19\n  DW_OP_lit20              = 0x44, // Literal 20\n  DW_OP_lit21              = 0x45, // Literal 21\n  DW_OP_lit22              = 0x46, // Literal 22\n  DW_OP_lit23              = 0x47, // Literal 23\n  DW_OP_lit24              = 0x48, // Literal 24\n  DW_OP_lit25              = 0x49, // Literal 25\n  DW_OP_lit26              = 0x4A, // Literal 26\n  DW_OP_lit27              = 0x4B, // Literal 27\n  DW_OP_lit28              = 0x4C, // Literal 28\n  DW_OP_lit29              = 0x4D, // Literal 29\n  DW_OP_lit30              = 0x4E, // Literal 30\n  DW_OP_lit31              = 0x4F, // Literal 31\n  DW_OP_reg0               = 0x50, // Contents of reg0\n  DW_OP_reg1               = 0x51, // Contents of reg1\n  DW_OP_reg2               = 0x52, // Contents of reg2\n  DW_OP_reg3               = 0x53, // Contents of reg3\n  DW_OP_reg4               = 0x54, // Contents of reg4\n  DW_OP_reg5               = 0x55, // Contents of reg5\n  DW_OP_reg6               = 0x56, // Contents of reg6\n  DW_OP_reg7               = 0x57, // Contents of reg7\n  DW_OP_reg8               = 0x58, // Contents of reg8\n  DW_OP_reg9               = 0x59, // Contents of reg9\n  DW_OP_reg10              = 0x5A, // Contents of reg10\n  DW_OP_reg11              = 0x5B, // Contents of reg11\n  DW_OP_reg12              = 0x5C, // Contents of reg12\n  DW_OP_reg13              = 0x5D, // Contents of reg13\n  DW_OP_reg14              = 0x5E, // Contents of reg14\n  DW_OP_reg15              = 0x5F, // Contents of reg15\n  DW_OP_reg16              = 0x60, // Contents of reg16\n  DW_OP_reg17              = 0x61, // Contents of reg17\n  DW_OP_reg18              = 0x62, // Contents of reg18\n  DW_OP_reg19              = 0x63, // Contents of reg19\n  DW_OP_reg20              = 0x64, // Contents of reg20\n  DW_OP_reg21              = 0x65, // Contents of reg21\n  DW_OP_reg22              = 0x66, // Contents of reg22\n  DW_OP_reg23              = 0x67, // Contents of reg23\n  DW_OP_reg24              = 0x68, // Contents of reg24\n  DW_OP_reg25              = 0x69, // Contents of reg25\n  DW_OP_reg26              = 0x6A, // Contents of reg26\n  DW_OP_reg27              = 0x6B, // Contents of reg27\n  DW_OP_reg28              = 0x6C, // Contents of reg28\n  DW_OP_reg29              = 0x6D, // Contents of reg29\n  DW_OP_reg30              = 0x6E, // Contents of reg30\n  DW_OP_reg31              = 0x6F, // Contents of reg31\n  DW_OP_breg0              = 0x70, // base register 0 + SLEB128 offset\n  DW_OP_breg1              = 0x71, // base register 1 + SLEB128 offset\n  DW_OP_breg2              = 0x72, // base register 2 + SLEB128 offset\n  DW_OP_breg3              = 0x73, // base register 3 + SLEB128 offset\n  DW_OP_breg4              = 0x74, // base register 4 + SLEB128 offset\n  DW_OP_breg5              = 0x75, // base register 5 + SLEB128 offset\n  DW_OP_breg6              = 0x76, // base register 6 + SLEB128 offset\n  DW_OP_breg7              = 0x77, // base register 7 + SLEB128 offset\n  DW_OP_breg8              = 0x78, // base register 8 + SLEB128 offset\n  DW_OP_breg9              = 0x79, // base register 9 + SLEB128 offset\n  DW_OP_breg10             = 0x7A, // base register 10 + SLEB128 offset\n  DW_OP_breg11             = 0x7B, // base register 11 + SLEB128 offset\n  DW_OP_breg12             = 0x7C, // base register 12 + SLEB128 offset\n  DW_OP_breg13             = 0x7D, // base register 13 + SLEB128 offset\n  DW_OP_breg14             = 0x7E, // base register 14 + SLEB128 offset\n  DW_OP_breg15             = 0x7F, // base register 15 + SLEB128 offset\n  DW_OP_breg16             = 0x80, // base register 16 + SLEB128 offset\n  DW_OP_breg17             = 0x81, // base register 17 + SLEB128 offset\n  DW_OP_breg18             = 0x82, // base register 18 + SLEB128 offset\n  DW_OP_breg19             = 0x83, // base register 19 + SLEB128 offset\n  DW_OP_breg20             = 0x84, // base register 20 + SLEB128 offset\n  DW_OP_breg21             = 0x85, // base register 21 + SLEB128 offset\n  DW_OP_breg22             = 0x86, // base register 22 + SLEB128 offset\n  DW_OP_breg23             = 0x87, // base register 23 + SLEB128 offset\n  DW_OP_breg24             = 0x88, // base register 24 + SLEB128 offset\n  DW_OP_breg25             = 0x89, // base register 25 + SLEB128 offset\n  DW_OP_breg26             = 0x8A, // base register 26 + SLEB128 offset\n  DW_OP_breg27             = 0x8B, // base register 27 + SLEB128 offset\n  DW_OP_breg28             = 0x8C, // base register 28 + SLEB128 offset\n  DW_OP_breg29             = 0x8D, // base register 29 + SLEB128 offset\n  DW_OP_breg30             = 0x8E, // base register 30 + SLEB128 offset\n  DW_OP_breg31             = 0x8F, // base register 31 + SLEB128 offset\n  DW_OP_regx               = 0x90, // ULEB128 register\n  DW_OP_fbreg              = 0x91, // SLEB128 offset\n  DW_OP_bregx              = 0x92, // ULEB128 register followed by SLEB128 offset\n  DW_OP_piece              = 0x93, // ULEB128 size of piece addressed\n  DW_OP_deref_size         = 0x94, // 1-byte size of data retrieved\n  DW_OP_xderef_size        = 0x95, // 1-byte size of data retrieved\n  DW_OP_nop                = 0x96,\n  DW_OP_push_object_addres = 0x97,\n  DW_OP_call2              = 0x98, // 2-byte offset of DIE\n  DW_OP_call4              = 0x99, // 4-byte offset of DIE\n  DW_OP_call_ref           = 0x9A, // 4- or 8-byte offset of DIE\n  DW_OP_lo_user            = 0xE0,\n  DW_OP_APPLE_uninit       = 0xF0,\n  DW_OP_hi_user            = 0xFF\n};\n\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/libunwind.cpp",
    "content": "//===--------------------------- libuwind.cpp -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Implements unw_* functions from <libunwind.h>\n//\n//===----------------------------------------------------------------------===//\n\n#include <libunwind.h>\n\n#ifndef NDEBUG\n#include <cstdlib> // getenv\n#endif\n#include <new>\n#include <tuple>\n#include <memory>\n#include <vector>\n\n#include \"libunwind_ext.h\"\n#include \"config.h\"\n\n#include <stdlib.h>\n\n\n#if _LIBUNWIND_BUILD_ZERO_COST_APIS\n\n#include \"UnwindCursor.hpp\"\n\nusing namespace libunwind;\n\n/// internal object to represent this processes address space\nLocalAddressSpace LocalAddressSpace::sThisAddressSpace;\n\n_LIBUNWIND_EXPORT unw_addr_space_t unw_local_addr_space =\n    (unw_addr_space_t)&LocalAddressSpace::sThisAddressSpace;\n\n/// record the registers and stack position of the caller\nextern int unw_getcontext(unw_context_t *);\n// note: unw_getcontext() implemented in assembly\n\n/// Create a cursor of a thread in this process given 'context' recorded by\n/// unw_getcontext().\n_LIBUNWIND_EXPORT int unw_init_local(unw_cursor_t *cursor,\n                                     unw_context_t *context) {\n  _LIBUNWIND_TRACE_API(\"unw_init_local(cursor=%p, context=%p)\\n\",\n                       static_cast<void *>(cursor),\n                       static_cast<void *>(context));\n  // Use \"placement new\" to allocate UnwindCursor in the cursor buffer.\n#if defined(__i386__)\n  new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_x86>(\n                                 context, LocalAddressSpace::sThisAddressSpace);\n#elif defined(__x86_64__)\n  new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_x86_64>(\n                                 context, LocalAddressSpace::sThisAddressSpace);\n#elif defined(__ppc__)\n  new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_ppc>(\n                                 context, LocalAddressSpace::sThisAddressSpace);\n#elif defined(__arm64__)\n  new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm64>(\n                                 context, LocalAddressSpace::sThisAddressSpace);\n#elif LIBCXXABI_ARM_EHABI\n  new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm>(\n                                 context, LocalAddressSpace::sThisAddressSpace);\n#endif\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  co->setInfoBasedOnIPRegister();\n\n  return UNW_ESUCCESS;\n}\n\n#ifdef UNW_REMOTE\n/// Create a cursor into a thread in another process.\n_LIBUNWIND_EXPORT int unw_init_remote_thread(unw_cursor_t *cursor,\n                                             unw_addr_space_t as,\n                                             void *arg) {\n  // special case: unw_init_remote(xx, unw_local_addr_space, xx)\n  if (as == (unw_addr_space_t)&LocalAddressSpace::sThisAddressSpace)\n    return unw_init_local(cursor, NULL); //FIXME\n\n  // use \"placement new\" to allocate UnwindCursor in the cursor buffer\n  switch (as->cpuType) {\n  case CPU_TYPE_I386:\n    new ((void *)cursor)\n        UnwindCursor<OtherAddressSpace<Pointer32<LittleEndian> >,\n                     Registers_x86>(((unw_addr_space_i386 *)as)->oas, arg);\n    break;\n  case CPU_TYPE_X86_64:\n    new ((void *)cursor) UnwindCursor<\n        OtherAddressSpace<Pointer64<LittleEndian> >, Registers_x86_64>(\n        ((unw_addr_space_x86_64 *)as)->oas, arg);\n    break;\n  case CPU_TYPE_POWERPC:\n    new ((void *)cursor)\n        UnwindCursor<OtherAddressSpace<Pointer32<BigEndian> >, Registers_ppc>(\n            ((unw_addr_space_ppc *)as)->oas, arg);\n    break;\n  default:\n    return UNW_EUNSPEC;\n  }\n  return UNW_ESUCCESS;\n}\n\n\nstatic bool is64bit(task_t task) {\n  return false; // FIXME\n}\n\n/// Create an address_space object for use in examining another task.\n_LIBUNWIND_EXPORT unw_addr_space_t unw_create_addr_space_for_task(task_t task) {\n#if __i386__\n  if (is64bit(task)) {\n    unw_addr_space_x86_64 *as = new unw_addr_space_x86_64(task);\n    as->taskPort = task;\n    as->cpuType = CPU_TYPE_X86_64;\n    //as->oas\n  } else {\n    unw_addr_space_i386 *as = new unw_addr_space_i386(task);\n    as->taskPort = task;\n    as->cpuType = CPU_TYPE_I386;\n    //as->oas\n  }\n#else\n// FIXME\n#endif\n}\n\n\n/// Delete an address_space object.\n_LIBUNWIND_EXPORT void unw_destroy_addr_space(unw_addr_space_t asp) {\n  switch (asp->cpuType) {\n#if __i386__ || __x86_64__\n  case CPU_TYPE_I386: {\n    unw_addr_space_i386 *as = (unw_addr_space_i386 *)asp;\n    delete as;\n  }\n  break;\n  case CPU_TYPE_X86_64: {\n    unw_addr_space_x86_64 *as = (unw_addr_space_x86_64 *)asp;\n    delete as;\n  }\n  break;\n#endif\n  case CPU_TYPE_POWERPC: {\n    unw_addr_space_ppc *as = (unw_addr_space_ppc *)asp;\n    delete as;\n  }\n  break;\n  }\n}\n#endif // UNW_REMOTE\n\n\n/// Get value of specified register at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_get_reg(unw_cursor_t *cursor, unw_regnum_t regNum,\n                                  unw_word_t *value) {\n  _LIBUNWIND_TRACE_API(\"unw_get_reg(cursor=%p, regNum=%d, &value=%p)\\n\",\n                       static_cast<void *>(cursor), regNum,\n                       static_cast<void *>(value));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  if (co->validReg(regNum)) {\n    *value = co->getReg(regNum);\n    return UNW_ESUCCESS;\n  }\n  return UNW_EBADREG;\n}\n\n\n/// Set value of specified register at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_set_reg(unw_cursor_t *cursor, unw_regnum_t regNum,\n                                  unw_word_t value) {\n  _LIBUNWIND_TRACE_API(\"unw_set_reg(cursor=%p, regNum=%d, value=0x%llX)\\n\",\n                       static_cast<void *>(cursor), regNum, (long long)value);\n  typedef LocalAddressSpace::pint_t pint_t;\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  if (co->validReg(regNum)) {\n    co->setReg(regNum, (pint_t)value);\n    // specical case altering IP to re-find info (being called by personality\n    // function)\n    if (regNum == UNW_REG_IP)\n      co->setInfoBasedOnIPRegister(false);\n    return UNW_ESUCCESS;\n  }\n  return UNW_EBADREG;\n}\n\n\n/// Get value of specified float register at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_get_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum,\n                                    unw_fpreg_t *value) {\n  _LIBUNWIND_TRACE_API(\"unw_get_fpreg(cursor=%p, regNum=%d, &value=%p)\\n\",\n                       static_cast<void *>(cursor), regNum,\n                       static_cast<void *>(value));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  if (co->validFloatReg(regNum)) {\n    *value = co->getFloatReg(regNum);\n    return UNW_ESUCCESS;\n  }\n  return UNW_EBADREG;\n}\n\n\n/// Set value of specified float register at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_set_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum,\n                                    unw_fpreg_t value) {\n#if LIBCXXABI_ARM_EHABI\n  _LIBUNWIND_TRACE_API(\"unw_set_fpreg(cursor=%p, regNum=%d, value=%llX)\\n\",\n                       static_cast<void *>(cursor), regNum, value);\n#else\n  _LIBUNWIND_TRACE_API(\"unw_set_fpreg(cursor=%p, regNum=%d, value=%g)\\n\",\n                       static_cast<void *>(cursor), regNum, value);\n#endif\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  if (co->validFloatReg(regNum)) {\n    co->setFloatReg(regNum, value);\n    return UNW_ESUCCESS;\n  }\n  return UNW_EBADREG;\n}\n\n\n/// Move cursor to next frame.\n_LIBUNWIND_EXPORT int unw_step(unw_cursor_t *cursor) {\n  _LIBUNWIND_TRACE_API(\"unw_step(cursor=%p)\\n\", static_cast<void *>(cursor));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  return co->step();\n}\n\n\n/// Get unwind info at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_get_proc_info(unw_cursor_t *cursor,\n                                        unw_proc_info_t *info) {\n  _LIBUNWIND_TRACE_API(\"unw_get_proc_info(cursor=%p, &info=%p)\\n\",\n                       static_cast<void *>(cursor), static_cast<void *>(info));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  co->getInfo(info);\n  if (info->end_ip == 0)\n    return UNW_ENOINFO;\n  else\n    return UNW_ESUCCESS;\n}\n\n\n/// Resume execution at cursor position (aka longjump).\n_LIBUNWIND_EXPORT int unw_resume(unw_cursor_t *cursor) {\n  _LIBUNWIND_TRACE_API(\"unw_resume(cursor=%p)\\n\", static_cast<void *>(cursor));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  co->jumpto();\n  return UNW_EUNSPEC;\n}\n\n\n/// Get name of function at cursor position in stack frame.\n_LIBUNWIND_EXPORT int unw_get_proc_name(unw_cursor_t *cursor, char *buf,\n                                        size_t bufLen, unw_word_t *offset) {\n  _LIBUNWIND_TRACE_API(\"unw_get_proc_name(cursor=%p, &buf=%p, bufLen=%lu)\\n\",\n                       static_cast<void *>(cursor), static_cast<void *>(buf),\n                       static_cast<unsigned long>(bufLen));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  if (co->getFunctionName(buf, bufLen, offset))\n    return UNW_ESUCCESS;\n  else\n    return UNW_EUNSPEC;\n}\n\n\n/// Checks if a register is a floating-point register.\n_LIBUNWIND_EXPORT int unw_is_fpreg(unw_cursor_t *cursor, unw_regnum_t regNum) {\n  _LIBUNWIND_TRACE_API(\"unw_is_fpreg(cursor=%p, regNum=%d)\\n\",\n                       static_cast<void *>(cursor), regNum);\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  return co->validFloatReg(regNum);\n}\n\n\n/// Checks if a register is a floating-point register.\n_LIBUNWIND_EXPORT const char *unw_regname(unw_cursor_t *cursor,\n                                          unw_regnum_t regNum) {\n  _LIBUNWIND_TRACE_API(\"unw_regname(cursor=%p, regNum=%d)\\n\",\n                       static_cast<void *>(cursor), regNum);\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  return co->getRegisterName(regNum);\n}\n\n\n/// Checks if current frame is signal trampoline.\n_LIBUNWIND_EXPORT int unw_is_signal_frame(unw_cursor_t *cursor) {\n  _LIBUNWIND_TRACE_API(\"unw_is_signal_frame(cursor=%p)\\n\",\n                       static_cast<void *>(cursor));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  return co->isSignalFrame();\n}\n\n#ifdef __arm__\n// Save VFP registers d0-d15 using FSTMIADX instead of FSTMIADD\n_LIBUNWIND_EXPORT void unw_save_vfp_as_X(unw_cursor_t *cursor) {\n  _LIBUNWIND_TRACE_API(\"unw_fpreg_save_vfp_as_X(cursor=%p)\\n\",\n                       static_cast<void *>(cursor));\n  AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor;\n  return co->saveVFPAsX();\n}\n#endif\n\n\n#if _LIBUNWIND_SUPPORT_DWARF_UNWIND\n/// SPI: walks cached dwarf entries\n_LIBUNWIND_EXPORT void unw_iterate_dwarf_unwind_cache(void (*func)(\n    unw_word_t ip_start, unw_word_t ip_end, unw_word_t fde, unw_word_t mh)) {\n  _LIBUNWIND_TRACE_API(\"unw_iterate_dwarf_unwind_cache(func=%p)\\n\",\n                       reinterpret_cast<void *>(func));\n  DwarfFDECache<LocalAddressSpace>::iterateCacheEntries(func);\n}\n\n\n/// IPI: for __register_frame()\nvoid _unw_add_dynamic_fde(unw_word_t fde) {\n  CFI_Parser<LocalAddressSpace>::FDE_Info fdeInfo;\n  CFI_Parser<LocalAddressSpace>::CIE_Info cieInfo;\n  const char *message = CFI_Parser<LocalAddressSpace>::decodeFDE(\n                           LocalAddressSpace::sThisAddressSpace,\n                          (LocalAddressSpace::pint_t) fde, &fdeInfo, &cieInfo);\n  if (message == NULL) {\n    // dynamically registered FDEs don't have a mach_header group they are in.\n    // Use fde as mh_group\n    unw_word_t mh_group = fdeInfo.fdeStart;\n    DwarfFDECache<LocalAddressSpace>::add((LocalAddressSpace::pint_t)mh_group,\n                                          fdeInfo.pcStart, fdeInfo.pcEnd,\n                                          fdeInfo.fdeStart);\n  } else {\n    _LIBUNWIND_DEBUG_LOG(\"_unw_add_dynamic_fde: bad fde: %s\", message);\n  }\n}\n\n/// IPI: for __deregister_frame()\nvoid _unw_remove_dynamic_fde(unw_word_t fde) {\n  // fde is own mh_group\n  DwarfFDECache<LocalAddressSpace>::removeAllIn((LocalAddressSpace::pint_t)fde);\n}\n#endif // _LIBUNWIND_SUPPORT_DWARF_UNWIND\n\n#endif // _LIBUNWIND_BUILD_ZERO_COST_APIS\n\n\n\n// Add logging hooks in Debug builds only\n#ifndef NDEBUG\n#include <stdlib.h>\n\n_LIBUNWIND_HIDDEN\nbool logAPIs() {\n  // do manual lock to avoid use of _cxa_guard_acquire or initializers\n  static bool checked = false;\n  static bool log = false;\n  if (!checked) {\n    log = (getenv(\"LIBUNWIND_PRINT_APIS\") != NULL);\n    checked = true;\n  }\n  return log;\n}\n\n_LIBUNWIND_HIDDEN\nbool logUnwinding() {\n  // do manual lock to avoid use of _cxa_guard_acquire or initializers\n  static bool checked = false;\n  static bool log = false;\n  if (!checked) {\n    log = (getenv(\"LIBUNWIND_PRINT_UNWINDING\") != NULL);\n    checked = true;\n  }\n  return log;\n}\n\n#endif // NDEBUG\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/libunwind_ext.h",
    "content": "//===------------------------ libunwind_ext.h -----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Extensions to libunwind API.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __LIBUNWIND_EXT__\n#define __LIBUNWIND_EXT__\n\n#include \"config.h\"\n#include <libunwind.h>\n#include <unwind.h>\n\n#define UNW_STEP_SUCCESS 1\n#define UNW_STEP_END     0\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n// SPI\nextern void unw_iterate_dwarf_unwind_cache(void (*func)(unw_word_t ip_start,\n                                                        unw_word_t ip_end,\n                                                        unw_word_t fde,\n                                                        unw_word_t mh));\n\n// IPI\nextern void _unw_add_dynamic_fde(unw_word_t fde);\nextern void _unw_remove_dynamic_fde(unw_word_t fde);\n\n#if LIBCXXABI_ARM_EHABI\nextern const uint32_t* decode_eht_entry(const uint32_t*, size_t*, size_t*);\nextern _Unwind_Reason_Code _Unwind_VRS_Interpret(_Unwind_Context *context,\n                                                 const uint32_t *data,\n                                                 size_t offset, size_t len);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // __LIBUNWIND_EXT__\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/Unwind/unwind_ext.h",
    "content": "//===-------------------------- unwind_ext.h ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Extensions to unwind API.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __UNWIND_EXT__\n#define __UNWIND_EXT__\n\n#include \"unwind.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// These platform specific functions to get and set the top context are\n// implemented elsewhere.\n\nextern struct _Unwind_FunctionContext *\n__Unwind_SjLj_GetTopOfFunctionStack();\n\nextern void\n__Unwind_SjLj_SetTopOfFunctionStack(struct _Unwind_FunctionContext *fc);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // __UNWIND_EXT__\n\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/abort_message.cpp",
    "content": "//===------------------------- abort_message.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include \"abort_message.h\"\n\n#ifdef __BIONIC__\n#include <android/api-level.h>\n#if __ANDROID_API__ >= 21\n#include <syslog.h>\nextern \"C\" void android_set_abort_message(const char* msg);\n#else\n#include <assert.h>\n#endif // __ANDROID_API__ >= 21\n#endif // __BIONIC__\n\n#pragma GCC visibility push(hidden)\n\n#ifdef __APPLE__\n#   if defined(__has_include) && __has_include(<CrashReporterClient.h>)\n#       define HAVE_CRASHREPORTERCLIENT_H\n#       include <CrashReporterClient.h>\n#   endif\n#endif\n\n__attribute__((visibility(\"hidden\"), noreturn))\nvoid abort_message(const char* format, ...)\n{\n    // write message to stderr\n#ifdef __APPLE__\n    fprintf(stderr, \"libc++abi.dylib: \");\n#endif\n    va_list list;\n    va_start(list, format);\n    vfprintf(stderr, format, list);\n    va_end(list);\n    fprintf(stderr, \"\\n\");\n\n#if defined(__APPLE__) && defined(HAVE_CRASHREPORTERCLIENT_H)\n    // record message in crash report\n    char* buffer;\n    va_list list2;\n    va_start(list2, format);\n    vasprintf(&buffer, format, list2);\n    va_end(list2);\n    CRSetCrashLogMessage(buffer);\n#elif defined(__BIONIC__)\n    char* buffer;\n    va_list list2;\n    va_start(list2, format);\n    vasprintf(&buffer, format, list2);\n    va_end(list2);\n\n#if __ANDROID_API__ >= 21\n    // Show error in tombstone.\n    android_set_abort_message(buffer);\n\n    // Show error in logcat.\n    openlog(\"libc++abi\", 0, 0);\n    syslog(LOG_CRIT, \"%s\", buffer);\n    closelog();\n#else\n    // The good error reporting wasn't available in Android until L. Since we're\n    // about to abort anyway, just call __assert2, which will log _somewhere_\n    // (tombstone and/or logcat) in older releases.\n    __assert2(__FILE__, __LINE__, __func__, buffer);\n#endif // __ANDROID_API__ >= 21\n#endif // __BIONIC__\n\n    abort();\n}\n\n#pragma GCC visibility pop\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/abort_message.h",
    "content": "//===-------------------------- abort_message.h-----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __ABORT_MESSAGE_H_\n#define __ABORT_MESSAGE_H_\n\n#include <stdio.h>\n\n#pragma GCC visibility push(hidden)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n__attribute__((visibility(\"hidden\"), noreturn))\n       void abort_message(const char* format, ...) \n            __attribute__((format(printf, 1, 2)));\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#pragma GCC visibility pop\n\n#endif\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/config.h",
    "content": "//===----------------------------- config.h -------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n//  Defines macros used within the libc++abi project.\n//\n//===----------------------------------------------------------------------===//\n\n\n#ifndef LIBCXXABI_CONFIG_H\n#define LIBCXXABI_CONFIG_H\n\n#include <unistd.h>\n\n// Set this in the CXXFLAGS when you need it\n#if !defined(LIBCXXABI_HAS_NO_THREADS)\n#  define LIBCXXABI_HAS_NO_THREADS 0\n#endif\n\n// Set this in the CXXFLAGS when you need it, because otherwise we'd have to\n// #if !defined(__linux__) && !defined(__APPLE__) && ...\n// and so-on for *every* platform.\n#ifndef LIBCXXABI_BAREMETAL\n#  define LIBCXXABI_BAREMETAL 0\n#endif\n\n#endif // LIBCXXABI_CONFIG_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_aux_runtime.cpp",
    "content": "//===------------------------ cxa_aux_runtime.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// This file implements the \"Auxiliary Runtime APIs\"\n// http://mentorembedded.github.io/cxx-abi/abi-eh.html#cxx-aux\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n#include <new>\n#include <typeinfo>\n\nnamespace __cxxabiv1\n{\n\nextern \"C\"\n{\n\nLIBCXXABI_NORETURN\nvoid __cxa_bad_cast (void) {\n    throw std::bad_cast();\n}\n\nLIBCXXABI_NORETURN\nvoid __cxa_bad_typeid(void) {\n    throw std::bad_typeid();\n}\n\nLIBCXXABI_NORETURN\nvoid __cxa_throw_bad_array_new_length(void) {\n    throw std::bad_array_new_length();\n}\n}  // extern \"C\"\n\n}  // abi\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_default_handlers.cpp",
    "content": "//===------------------------- cxa_default_handlers.cpp -------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// This file implements the default terminate_handler and unexpected_handler.\n//===----------------------------------------------------------------------===//\n\n#include <stdexcept>\n#include <new>\n#include <exception>\n#include \"abort_message.h\"\n#include \"config.h\" // For __sync_swap\n#include \"cxxabi.h\"\n#include \"cxa_handlers.hpp\"\n#include \"cxa_exception.hpp\"\n#include \"private_typeinfo.h\"\n\nstatic const char* cause = \"uncaught\";\n\n__attribute__((noreturn))\nstatic void default_terminate_handler()\n{\n    // If there might be an uncaught exception\n    using namespace __cxxabiv1;\n    __cxa_eh_globals* globals = __cxa_get_globals_fast();\n    if (globals)\n    {\n        __cxa_exception* exception_header = globals->caughtExceptions;\n        // If there is an uncaught exception\n        if (exception_header)\n        {\n            _Unwind_Exception* unwind_exception =\n                reinterpret_cast<_Unwind_Exception*>(exception_header + 1) - 1;\n            bool native_exception =\n                (unwind_exception->exception_class   & get_vendor_and_language) == \n                                 (kOurExceptionClass & get_vendor_and_language);\n            if (native_exception)\n            {\n                void* thrown_object =\n                    unwind_exception->exception_class == kOurDependentExceptionClass ?\n                        ((__cxa_dependent_exception*)exception_header)->primaryException :\n                        exception_header + 1;\n                const __shim_type_info* thrown_type =\n                    static_cast<const __shim_type_info*>(exception_header->exceptionType);\n                // Try to get demangled name of thrown_type\n                int status;\n                char buf[1024];\n                size_t len = sizeof(buf);\n                const char* name = __cxa_demangle(thrown_type->name(), buf, &len, &status);\n                if (status != 0)\n                    name = thrown_type->name();\n                // If the uncaught exception can be caught with std::exception&\n                const __shim_type_info* catch_type =\n\t\t\t\t static_cast<const __shim_type_info*>(&typeid(std::exception));\n                if (catch_type->can_catch(thrown_type, thrown_object))\n                {\n                    // Include the what() message from the exception\n                    const std::exception* e = static_cast<const std::exception*>(thrown_object);\n                    abort_message(\"terminating with %s exception of type %s: %s\",\n                                  cause, name, e->what());\n                }\n                else\n                    // Else just note that we're terminating with an exception\n                    abort_message(\"terminating with %s exception of type %s\",\n                                   cause, name);\n            }\n            else\n                // Else we're terminating with a foreign exception\n                abort_message(\"terminating with %s foreign exception\", cause);\n        }\n    }\n    // Else just note that we're terminating\n    abort_message(\"terminating\");\n}\n\n__attribute__((noreturn))\nstatic void default_unexpected_handler() \n{\n    cause = \"unexpected\";\n    std::terminate();\n}\n\n\n//\n// Global variables that hold the pointers to the current handler\n//\nstd::terminate_handler  __cxa_terminate_handler = default_terminate_handler;\nstd::unexpected_handler __cxa_unexpected_handler = default_unexpected_handler;\n\n// In the future these will become:\n// std::atomic<std::terminate_handler>  __cxa_terminate_handler(default_terminate_handler);\n// std::atomic<std::unexpected_handler> __cxa_unexpected_handler(default_unexpected_handler);\n\nnamespace std\n{\n\nunexpected_handler\nset_unexpected(unexpected_handler func) _NOEXCEPT\n{\n    if (func == 0)\n        func = default_unexpected_handler;\n    return __atomic_exchange_n(&__cxa_unexpected_handler, func,\n                               __ATOMIC_ACQ_REL);\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_unexpected_handler.exchange(func, memory_order_acq_rel);\n}\n\nterminate_handler\nset_terminate(terminate_handler func) _NOEXCEPT\n{\n    if (func == 0)\n        func = default_terminate_handler;\n    return __atomic_exchange_n(&__cxa_terminate_handler, func,\n                               __ATOMIC_ACQ_REL);\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_terminate_handler.exchange(func, memory_order_acq_rel);\n}\n\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_demangle.cpp",
    "content": "//===-------------------------- cxa_demangle.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#define _LIBCPP_EXTERN_TEMPLATE(...)\n#define _LIBCPP_NO_EXCEPTIONS\n\n#include <vector>\n#include <algorithm>\n#include <string>\n#include <numeric>\n#include <cstdlib>\n#include <cstring>\n#include <cctype>\n\nnamespace __cxxabiv1\n{\n\nnamespace\n{\n\nenum\n{\n    unknown_error = -4,\n    invalid_args = -3,\n    invalid_mangled_name,\n    memory_alloc_failure,\n    success\n};\n\ntemplate <class C>\n    const char* parse_type(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_encoding(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_name(const char* first, const char* last, C& db,\n                           bool* ends_with_template_args = 0);\ntemplate <class C>\n    const char* parse_expression(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_template_args(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_operator_name(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_unqualified_name(const char* first, const char* last, C& db);\ntemplate <class C>\n    const char* parse_decltype(const char* first, const char* last, C& db);\n\ntemplate <class C>\nvoid\nprint_stack(const C& db)\n{\n    printf(\"---------\\n\");\n    printf(\"names:\\n\");\n    for (auto& s : db.names)\n        printf(\"{%s#%s}\\n\", s.first.c_str(), s.second.c_str());\n    int i = -1;\n    printf(\"subs:\\n\");\n    for (auto& v : db.subs)\n    {\n        if (i >= 0)\n            printf(\"S%i_ = {\", i);\n        else\n            printf(\"S_  = {\");\n        for (auto& s : v)\n            printf(\"{%s#%s}\", s.first.c_str(), s.second.c_str());\n        printf(\"}\\n\");\n        ++i;\n    }\n    printf(\"template_param:\\n\");\n    for (auto& t : db.template_param)\n    {\n        printf(\"--\\n\");\n        i = -1;\n        for (auto& v : t)\n        {\n            if (i >= 0)\n                printf(\"T%i_ = {\", i);\n            else\n                printf(\"T_  = {\");\n            for (auto& s : v)\n                printf(\"{%s#%s}\", s.first.c_str(), s.second.c_str());\n            printf(\"}\\n\");\n            ++i;\n        }\n    }\n    printf(\"---------\\n\\n\");\n}\n\ntemplate <class C>\nvoid\nprint_state(const char* msg, const char* first, const char* last, const C& db)\n{\n    printf(\"%s: \", msg);\n    for (; first != last; ++first)\n        printf(\"%c\", *first);\n    printf(\"\\n\");\n    print_stack(db);\n}\n\n// <number> ::= [n] <non-negative decimal integer>\n\nconst char*\nparse_number(const char* first, const char* last)\n{\n    if (first != last)\n    {\n        const char* t = first;\n        if (*t == 'n')\n            ++t;\n        if (t != last)\n        {\n            if (*t == '0')\n            {\n                first = t+1;\n            }\n            else if ('1' <= *t && *t <= '9')\n            {\n                first = t+1;\n                while (first != last && std::isdigit(*first))\n                    ++first;\n            }\n        }\n    }\n    return first;\n}\n\ntemplate <class Float>\nstruct float_data;\n\ntemplate <>\nstruct float_data<float>\n{\n    static const size_t mangled_size = 8;\n    static const size_t max_demangled_size = 24;\n    static constexpr const char* spec = \"%af\";\n};\n\nconstexpr const char* float_data<float>::spec;\n\ntemplate <>\nstruct float_data<double>\n{\n    static const size_t mangled_size = 16;\n    static const size_t max_demangled_size = 32;\n    static constexpr const char* spec = \"%a\";\n};\n\nconstexpr const char* float_data<double>::spec;\n\ntemplate <>\nstruct float_data<long double>\n{\n#if defined(__arm__)\n    static const size_t mangled_size = 16;\n#else\n    static const size_t mangled_size = 20;  // May need to be adjusted to 16 or 24 on other platforms\n#endif\n    static const size_t max_demangled_size = 40;\n    static constexpr const char* spec = \"%LaL\";\n};\n\nconstexpr const char* float_data<long double>::spec;\n\ntemplate <class Float, class C>\nconst char*\nparse_floating_number(const char* first, const char* last, C& db)\n{\n    const size_t N = float_data<Float>::mangled_size;\n    if (static_cast<std::size_t>(last - first) > N)\n    {\n        last = first + N;\n        union\n        {\n            Float value;\n            char buf[sizeof(Float)];\n        };\n        const char* t = first;\n        char* e = buf;\n        for (; t != last; ++t, ++e)\n        {\n            if (!isxdigit(*t))\n                return first;\n            unsigned d1 = isdigit(*t) ? static_cast<unsigned>(*t - '0') :\n                                        static_cast<unsigned>(*t - 'a' + 10);\n            ++t;\n            unsigned d0 = isdigit(*t) ? static_cast<unsigned>(*t - '0') :\n                                        static_cast<unsigned>(*t - 'a' + 10);\n            *e = static_cast<char>((d1 << 4) + d0);\n        }\n        if (*t == 'E')\n        {\n#if __LITTLE_ENDIAN__\n            std::reverse(buf, e);\n#endif\n            char num[float_data<Float>::max_demangled_size] = {0};\n            int n = snprintf(num, sizeof(num), float_data<Float>::spec, value);\n            if (static_cast<std::size_t>(n) >= sizeof(num))\n                return first;\n            db.names.push_back(typename C::String(num, static_cast<std::size_t>(n)));\n            first = t+1;\n        }\n    }\n    return first;\n}\n\n// <source-name> ::= <positive length number> <identifier>\n\ntemplate <class C>\nconst char*\nparse_source_name(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        char c = *first;\n        if (isdigit(c) && first+1 != last)\n        {\n            const char* t = first+1;\n            size_t n = static_cast<size_t>(c - '0');\n            for (c = *t; isdigit(c); c = *t)\n            {\n                n = n * 10 + static_cast<size_t>(c - '0');\n                if (++t == last)\n                    return first;\n            }\n            if (static_cast<size_t>(last - t) >= n)\n            {\n                typename C::String r(t, n);\n                if (r.substr(0, 10) == \"_GLOBAL__N\")\n                    db.names.push_back(\"(anonymous namespace)\");\n                else\n                    db.names.push_back(std::move(r));\n                first = t + n;\n            }\n        }\n    }\n    return first;\n}\n\n// <substitution> ::= S <seq-id> _\n//                ::= S_\n// <substitution> ::= Sa # ::std::allocator\n// <substitution> ::= Sb # ::std::basic_string\n// <substitution> ::= Ss # ::std::basic_string < char,\n//                                               ::std::char_traits<char>,\n//                                               ::std::allocator<char> >\n// <substitution> ::= Si # ::std::basic_istream<char,  std::char_traits<char> >\n// <substitution> ::= So # ::std::basic_ostream<char,  std::char_traits<char> >\n// <substitution> ::= Sd # ::std::basic_iostream<char, std::char_traits<char> >\n\ntemplate <class C>\nconst char*\nparse_substitution(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        if (*first == 'S')\n        {\n            switch (first[1])\n            {\n            case 'a':\n                db.names.push_back(\"std::allocator\");\n                first += 2;\n                break;\n            case 'b':\n                db.names.push_back(\"std::basic_string\");\n                first += 2;\n                break;\n            case 's':\n                db.names.push_back(\"std::string\");\n                first += 2;\n                break;\n            case 'i':\n                db.names.push_back(\"std::istream\");\n                first += 2;\n                break;\n            case 'o':\n                db.names.push_back(\"std::ostream\");\n                first += 2;\n                break;\n            case 'd':\n                db.names.push_back(\"std::iostream\");\n                first += 2;\n                break;\n            case '_':\n                if (!db.subs.empty())\n                {\n                    for (const auto& n : db.subs.front())\n                        db.names.push_back(n);\n                    first += 2;\n                }\n                break;\n            default:\n                if (std::isdigit(first[1]) || std::isupper(first[1]))\n                {\n                    size_t sub = 0;\n                    const char* t = first+1;\n                    if (std::isdigit(*t))\n                        sub = static_cast<size_t>(*t - '0');\n                    else\n                        sub = static_cast<size_t>(*t - 'A') + 10;\n                    for (++t; t != last && (std::isdigit(*t) || std::isupper(*t)); ++t)\n                    {\n                        sub *= 36;\n                        if (std::isdigit(*t))\n                            sub += static_cast<size_t>(*t - '0');\n                        else\n                            sub += static_cast<size_t>(*t - 'A') + 10;\n                    }\n                    if (t == last || *t != '_')\n                        return first;\n                    ++sub;\n                    if (sub < db.subs.size())\n                    {\n                        for (const auto& n : db.subs[sub])\n                            db.names.push_back(n);\n                        first = t+1;\n                    }\n                }\n                break;\n            }\n        }\n    }\n    return first;\n}\n\n// <builtin-type> ::= v    # void\n//                ::= w    # wchar_t\n//                ::= b    # bool\n//                ::= c    # char\n//                ::= a    # signed char\n//                ::= h    # unsigned char\n//                ::= s    # short\n//                ::= t    # unsigned short\n//                ::= i    # int\n//                ::= j    # unsigned int\n//                ::= l    # long\n//                ::= m    # unsigned long\n//                ::= x    # long long, __int64\n//                ::= y    # unsigned long long, __int64\n//                ::= n    # __int128\n//                ::= o    # unsigned __int128\n//                ::= f    # float\n//                ::= d    # double\n//                ::= e    # long double, __float80\n//                ::= g    # __float128\n//                ::= z    # ellipsis\n//                ::= Dd   # IEEE 754r decimal floating point (64 bits)\n//                ::= De   # IEEE 754r decimal floating point (128 bits)\n//                ::= Df   # IEEE 754r decimal floating point (32 bits)\n//                ::= Dh   # IEEE 754r half-precision floating point (16 bits)\n//                ::= Di   # char32_t\n//                ::= Ds   # char16_t\n//                ::= Da   # auto (in dependent new-expressions)\n//                ::= Dc   # decltype(auto)\n//                ::= Dn   # std::nullptr_t (i.e., decltype(nullptr))\n//                ::= u <source-name>    # vendor extended type\n\ntemplate <class C>\nconst char*\nparse_builtin_type(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        switch (*first)\n        {\n        case 'v':\n            db.names.push_back(\"void\");\n            ++first;\n            break;\n        case 'w':\n            db.names.push_back(\"wchar_t\");\n            ++first;\n            break;\n        case 'b':\n            db.names.push_back(\"bool\");\n            ++first;\n            break;\n        case 'c':\n            db.names.push_back(\"char\");\n            ++first;\n            break;\n        case 'a':\n            db.names.push_back(\"signed char\");\n            ++first;\n            break;\n        case 'h':\n            db.names.push_back(\"unsigned char\");\n            ++first;\n            break;\n        case 's':\n            db.names.push_back(\"short\");\n            ++first;\n            break;\n        case 't':\n            db.names.push_back(\"unsigned short\");\n            ++first;\n            break;\n        case 'i':\n            db.names.push_back(\"int\");\n            ++first;\n            break;\n        case 'j':\n            db.names.push_back(\"unsigned int\");\n            ++first;\n            break;\n        case 'l':\n            db.names.push_back(\"long\");\n            ++first;\n            break;\n        case 'm':\n            db.names.push_back(\"unsigned long\");\n            ++first;\n            break;\n        case 'x':\n            db.names.push_back(\"long long\");\n            ++first;\n            break;\n        case 'y':\n            db.names.push_back(\"unsigned long long\");\n            ++first;\n            break;\n        case 'n':\n            db.names.push_back(\"__int128\");\n            ++first;\n            break;\n        case 'o':\n            db.names.push_back(\"unsigned __int128\");\n            ++first;\n            break;\n        case 'f':\n            db.names.push_back(\"float\");\n            ++first;\n            break;\n        case 'd':\n            db.names.push_back(\"double\");\n            ++first;\n            break;\n        case 'e':\n            db.names.push_back(\"long double\");\n            ++first;\n            break;\n        case 'g':\n            db.names.push_back(\"__float128\");\n            ++first;\n            break;\n        case 'z':\n            db.names.push_back(\"...\");\n            ++first;\n            break;\n        case 'u':\n            {\n                const char*t = parse_source_name(first+1, last, db);\n                if (t != first+1)\n                    first = t;\n            }\n            break;\n        case 'D':\n            if (first+1 != last)\n            {\n                switch (first[1])\n                {\n                case 'd':\n                    db.names.push_back(\"decimal64\");\n                    first += 2;\n                    break;\n                case 'e':\n                    db.names.push_back(\"decimal128\");\n                    first += 2;\n                    break;\n                case 'f':\n                    db.names.push_back(\"decimal32\");\n                    first += 2;\n                    break;\n                case 'h':\n                    db.names.push_back(\"decimal16\");\n                    first += 2;\n                    break;\n                case 'i':\n                    db.names.push_back(\"char32_t\");\n                    first += 2;\n                    break;\n                case 's':\n                    db.names.push_back(\"char16_t\");\n                    first += 2;\n                    break;\n                case 'a':\n                    db.names.push_back(\"auto\");\n                    first += 2;\n                    break;\n                case 'c':\n                    db.names.push_back(\"decltype(auto)\");\n                    first += 2;\n                    break;\n                case 'n':\n                    db.names.push_back(\"std::nullptr_t\");\n                    first += 2;\n                    break;\n                }\n            }\n            break;\n        }\n    }\n    return first;\n}\n\n// <CV-qualifiers> ::= [r] [V] [K]\n\nconst char*\nparse_cv_qualifiers(const char* first, const char* last, unsigned& cv)\n{\n    cv = 0;\n    if (first != last)\n    {\n        if (*first == 'r')\n        {\n            cv |= 4;\n            ++first;\n        }\n        if (*first == 'V')\n        {\n            cv |= 2;\n            ++first;\n        }\n        if (*first == 'K')\n        {\n            cv |= 1;\n            ++first;\n        }\n    }\n    return first;\n}\n\n// <template-param> ::= T_    # first template parameter\n//                  ::= T <parameter-2 non-negative number> _\n\ntemplate <class C>\nconst char*\nparse_template_param(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        if (*first == 'T')\n        {\n            if (first[1] == '_')\n            {\n                if (db.template_param.empty())\n                    return first;\n                if (!db.template_param.back().empty())\n                {\n                    for (auto& t : db.template_param.back().front())\n                        db.names.push_back(t);\n                    first += 2;\n                }\n                else\n                {\n                    db.names.push_back(\"T_\");\n                    first += 2;\n                    db.fix_forward_references = true;\n                }\n            }\n            else if (isdigit(first[1]))\n            {\n                const char* t = first+1;\n                size_t sub = static_cast<size_t>(*t - '0');\n                for (++t; t != last && isdigit(*t); ++t)\n                {\n                    sub *= 10;\n                    sub += static_cast<size_t>(*t - '0');\n                }\n                if (t == last || *t != '_' || db.template_param.empty())\n                    return first;\n                ++sub;\n                if (sub < db.template_param.back().size())\n                {\n                    for (auto& temp : db.template_param.back()[sub])\n                        db.names.push_back(temp);\n                    first = t+1;\n                }\n                else\n                {\n                    db.names.push_back(typename C::String(first, t+1));\n                    first = t+1;\n                    db.fix_forward_references = true;\n                }\n            }\n        }\n    }\n    return first;\n}\n\n// cc <type> <expression>                               # const_cast<type> (expression)\n\ntemplate <class C>\nconst char*\nparse_const_cast_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'c' && first[1] == 'c')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto expr = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back() = \"const_cast<\" + db.names.back().move_full() + \">(\" + expr + \")\";\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// dc <type> <expression>                               # dynamic_cast<type> (expression)\n\ntemplate <class C>\nconst char*\nparse_dynamic_cast_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'd' && first[1] == 'c')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto expr = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back() = \"dynamic_cast<\" + db.names.back().move_full() + \">(\" + expr + \")\";\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// rc <type> <expression>                               # reinterpret_cast<type> (expression)\n\ntemplate <class C>\nconst char*\nparse_reinterpret_cast_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'r' && first[1] == 'c')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto expr = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back() = \"reinterpret_cast<\" + db.names.back().move_full() + \">(\" + expr + \")\";\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// sc <type> <expression>                               # static_cast<type> (expression)\n\ntemplate <class C>\nconst char*\nparse_static_cast_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 'c')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto expr = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back() = \"static_cast<\" + db.names.back().move_full() + \">(\" + expr + \")\";\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// sp <expression>                                  # pack expansion\n\ntemplate <class C>\nconst char*\nparse_pack_expansion(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 'p')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n            first = t;\n    }\n    return first;\n}\n\n// st <type>                                            # sizeof (a type)\n\ntemplate <class C>\nconst char*\nparse_sizeof_type_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 't')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back() = \"sizeof (\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// sz <expr>                                            # sizeof (a expression)\n\ntemplate <class C>\nconst char*\nparse_sizeof_expr_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 'z')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back() = \"sizeof (\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// sZ <template-param>                                  # size of a parameter pack\n\ntemplate <class C>\nconst char*\nparse_sizeof_param_pack_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'T')\n    {\n        size_t k0 = db.names.size();\n        const char* t = parse_template_param(first+2, last, db);\n        size_t k1 = db.names.size();\n        if (t != first+2)\n        {\n            typename C::String tmp(\"sizeof...(\");\n            size_t k = k0;\n            if (k != k1)\n            {\n                tmp += db.names[k].move_full();\n                for (++k; k != k1; ++k)\n                    tmp += \", \" + db.names[k].move_full();\n            }\n            tmp += \")\";\n            for (; k1 != k0; --k1)\n                db.names.pop_back();\n            db.names.push_back(std::move(tmp));\n            first = t;\n        }\n    }\n    return first;\n}\n\n// <function-param> ::= fp <top-level CV-qualifiers> _                                     # L == 0, first parameter\n//                  ::= fp <top-level CV-qualifiers> <parameter-2 non-negative number> _   # L == 0, second and later parameters\n//                  ::= fL <L-1 non-negative number> p <top-level CV-qualifiers> _         # L > 0, first parameter\n//                  ::= fL <L-1 non-negative number> p <top-level CV-qualifiers> <parameter-2 non-negative number> _   # L > 0, second and later parameters\n\ntemplate <class C>\nconst char*\nparse_function_param(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && *first == 'f')\n    {\n        if (first[1] == 'p')\n        {\n            unsigned cv;\n            const char* t = parse_cv_qualifiers(first+2, last, cv);\n            const char* t1 = parse_number(t, last);\n            if (t1 != last && *t1 == '_')\n            {\n                db.names.push_back(\"fp\" + typename C::String(t, t1));\n                first = t1+1;\n            }\n        }\n        else if (first[1] == 'L')\n        {\n            unsigned cv;\n            const char* t0 = parse_number(first+2, last);\n            if (t0 != last && *t0 == 'p')\n            {\n                ++t0;\n                const char* t = parse_cv_qualifiers(t0, last, cv);\n                const char* t1 = parse_number(t, last);\n                if (t1 != last && *t1 == '_')\n                {\n                    db.names.push_back(\"fp\" + typename C::String(t, t1));\n                    first = t1+1;\n                }\n            }\n        }\n    }\n    return first;\n}\n\n// sZ <function-param>                                  # size of a function parameter pack\n\ntemplate <class C>\nconst char*\nparse_sizeof_function_param_pack_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 's' && first[1] == 'Z' && first[2] == 'f')\n    {\n        const char* t = parse_function_param(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back() = \"sizeof...(\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// te <expression>                                      # typeid (expression)\n// ti <type>                                            # typeid (type)\n\ntemplate <class C>\nconst char*\nparse_typeid_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 't' && (first[1] == 'e' || first[1] == 'i'))\n    {\n        const char* t;\n        if (first[1] == 'e')\n            t = parse_expression(first+2, last, db);\n        else\n            t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back() = \"typeid(\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// tw <expression>                                      # throw expression\n\ntemplate <class C>\nconst char*\nparse_throw_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 't' && first[1] == 'w')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back() = \"throw \" + db.names.back().move_full();\n            first = t;\n        }\n    }\n    return first;\n}\n\n// ds <expression> <expression>                         # expr.*expr\n\ntemplate <class C>\nconst char*\nparse_dot_star_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'd' && first[1] == 's')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto expr = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first += \".*\" + expr;\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// <simple-id> ::= <source-name> [ <template-args> ]\n\ntemplate <class C>\nconst char*\nparse_simple_id(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        const char* t = parse_source_name(first, last, db);\n        if (t != first)\n        {\n            const char* t1 = parse_template_args(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto args = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first += std::move(args);\n            }\n            first = t1;\n        }\n        else\n            first = t;\n    }\n    return first;\n}\n\n// <unresolved-type> ::= <template-param>\n//                   ::= <decltype>\n//                   ::= <substitution>\n\ntemplate <class C>\nconst char*\nparse_unresolved_type(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        const char* t = first;\n        switch (*first)\n        {\n        case 'T':\n          {\n            size_t k0 = db.names.size();\n            t = parse_template_param(first, last, db);\n            size_t k1 = db.names.size();\n            if (t != first && k1 == k0 + 1)\n            {\n                db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                first = t;\n            }\n            else\n            {\n                for (; k1 != k0; --k1)\n                    db.names.pop_back();\n            }\n            break;\n          }\n        case 'D':\n            t = parse_decltype(first, last, db);\n            if (t != first)\n            {\n                if (db.names.empty())\n                    return first;\n                db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                first = t;\n            }\n            break;\n        case 'S':\n            t = parse_substitution(first, last, db);\n            if (t != first)\n                first = t;\n            else\n            {\n                if (last - first > 2 && first[1] == 't')\n                {\n                    t = parse_unqualified_name(first+2, last, db);\n                    if (t != first+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first.insert(0, \"std::\");\n                        db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        first = t;\n                    }\n                }\n            }\n            break;\n       }\n    }\n    return first;\n}\n\n// <destructor-name> ::= <unresolved-type>                               # e.g., ~T or ~decltype(f())\n//                   ::= <simple-id>                                     # e.g., ~A<2*N>\n\ntemplate <class C>\nconst char*\nparse_destructor_name(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        const char* t = parse_unresolved_type(first, last, db);\n        if (t == first)\n            t = parse_simple_id(first, last, db);\n        if (t != first)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back().first.insert(0, \"~\");\n            first = t;\n        }\n    }\n    return first;\n}\n\n// <base-unresolved-name> ::= <simple-id>                                # unresolved name\n//          extension     ::= <operator-name>                            # unresolved operator-function-id\n//          extension     ::= <operator-name> <template-args>            # unresolved operator template-id\n//                        ::= on <operator-name>                         # unresolved operator-function-id\n//                        ::= on <operator-name> <template-args>         # unresolved operator template-id\n//                        ::= dn <destructor-name>                       # destructor or pseudo-destructor;\n//                                                                         # e.g. ~X or ~X<N-1>\n\ntemplate <class C>\nconst char*\nparse_base_unresolved_name(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        if ((first[0] == 'o' || first[0] == 'd') && first[1] == 'n')\n        {\n            if (first[0] == 'o')\n            {\n                const char* t = parse_operator_name(first+2, last, db);\n                if (t != first+2)\n                {\n                    first = parse_template_args(t, last, db);\n                    if (first != t)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto args = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += std::move(args);\n                    }\n                }\n            }\n            else\n            {\n                const char* t = parse_destructor_name(first+2, last, db);\n                if (t != first+2)\n                    first = t;\n            }\n        }\n        else\n        {\n            const char* t = parse_simple_id(first, last, db);\n            if (t == first)\n            {\n                t = parse_operator_name(first, last, db);\n                if (t != first)\n                {\n                    first = parse_template_args(t, last, db);\n                    if (first != t)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto args = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += std::move(args);\n                    }\n                }\n            }\n            else\n                first = t;\n        }\n    }\n    return first;\n}\n\n// <unresolved-qualifier-level> ::= <simple-id>\n\ntemplate <class C>\nconst char*\nparse_unresolved_qualifier_level(const char* first, const char* last, C& db)\n{\n    return parse_simple_id(first, last, db);\n}\n\n// <unresolved-name>\n//  extension        ::= srN <unresolved-type> [<template-args>] <unresolved-qualifier-level>* E <base-unresolved-name>\n//                   ::= [gs] <base-unresolved-name>                     # x or (with \"gs\") ::x\n//                   ::= [gs] sr <unresolved-qualifier-level>+ E <base-unresolved-name>  \n//                                                                       # A::x, N::y, A<T>::z; \"gs\" means leading \"::\"\n//                   ::= sr <unresolved-type> <base-unresolved-name>     # T::x / decltype(p)::x\n//  extension        ::= sr <unresolved-type> <template-args> <base-unresolved-name>\n//                                                                       # T::N::x /decltype(p)::N::x\n//  (ignored)        ::= srN <unresolved-type>  <unresolved-qualifier-level>+ E <base-unresolved-name>\n\ntemplate <class C>\nconst char*\nparse_unresolved_name(const char* first, const char* last, C& db)\n{\n    if (last - first > 2)\n    {\n        const char* t = first;\n        bool global = false;\n        if (t[0] == 'g' && t[1] == 's')\n        {\n            global = true;\n            t += 2;\n        }\n        const char* t2 = parse_base_unresolved_name(t, last, db);\n        if (t2 != t)\n        {\n            if (global)\n            {\n                if (db.names.empty())\n                    return first;\n                db.names.back().first.insert(0, \"::\");\n            }\n            first = t2;\n        }\n        else if (last - t > 2 && t[0] == 's' && t[1] == 'r')\n        {\n            if (t[2] == 'N')\n            {\n                t += 3;\n                const char* t1 = parse_unresolved_type(t, last, db);\n                if (t1 == t || t1 == last)\n                    return first;\n                t = t1;\n                t1 = parse_template_args(t, last, db);\n                if (t1 != t)\n                {\n                    if (db.names.size() < 2)\n                        return first;\n                    auto args = db.names.back().move_full();\n                    db.names.pop_back();\n                    db.names.back().first += std::move(args);\n                    t = t1;\n                    if (t == last)\n                    {\n                        db.names.pop_back();\n                        return first;\n                    }\n                }\n                while (*t != 'E')\n                {\n                    t1 = parse_unresolved_qualifier_level(t, last, db);\n                    if (t1 == t || t1 == last || db.names.size() < 2)\n                        return first;\n                    auto s = db.names.back().move_full();\n                    db.names.pop_back();\n                    db.names.back().first += \"::\" + std::move(s);\n                    t = t1;\n                }\n                ++t;\n                t1 = parse_base_unresolved_name(t, last, db);\n                if (t1 == t)\n                {\n                    if (!db.names.empty())\n                        db.names.pop_back();\n                    return first;\n                }\n                if (db.names.size() < 2)\n                    return first;\n                auto s = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first += \"::\" + std::move(s);\n                first = t1;\n            }\n            else\n            {\n                t += 2;\n                const char* t1 = parse_unresolved_type(t, last, db);\n                if (t1 != t)\n                {\n                    t = t1;\n                    t1 = parse_template_args(t, last, db);\n                    if (t1 != t)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto args = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += std::move(args);\n                        t = t1;\n                    }\n                    t1 = parse_base_unresolved_name(t, last, db);\n                    if (t1 == t)\n                    {\n                        if (!db.names.empty())\n                            db.names.pop_back();\n                        return first;\n                    }\n                    if (db.names.size() < 2)\n                        return first;\n                    auto s = db.names.back().move_full();\n                    db.names.pop_back();\n                    db.names.back().first += \"::\" + std::move(s);\n                    first = t1;\n                }\n                else\n                {\n                    t1 = parse_unresolved_qualifier_level(t, last, db);\n                    if (t1 == t || t1 == last)\n                        return first;\n                    t = t1;\n                    if (global)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first.insert(0, \"::\");\n                    }\n                    while (*t != 'E')\n                    {\n                        t1 = parse_unresolved_qualifier_level(t, last, db);\n                        if (t1 == t || t1 == last || db.names.size() < 2)\n                            return first;\n                        auto s = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += \"::\" + std::move(s);\n                        t = t1;\n                    }\n                    ++t;\n                    t1 = parse_base_unresolved_name(t, last, db);\n                    if (t1 == t)\n                    {\n                        if (!db.names.empty())\n                            db.names.pop_back();\n                        return first;\n                    }\n                    if (db.names.size() < 2)\n                        return first;\n                    auto s = db.names.back().move_full();\n                    db.names.pop_back();\n                    db.names.back().first += \"::\" + std::move(s);\n                    first = t1;\n                }\n            }\n        }\n    }\n    return first;\n}\n\n// dt <expression> <unresolved-name>                    # expr.name\n\ntemplate <class C>\nconst char*\nparse_dot_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'd' && first[1] == 't')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_unresolved_name(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto name = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first += \".\" + name;\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n// cl <expression>+ E                                   # call\n\ntemplate <class C>\nconst char*\nparse_call_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 4 && first[0] == 'c' && first[1] == 'l')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            if (t == last)\n                return first;\n            if (db.names.empty())\n                return first;\n            db.names.back().first += db.names.back().second;\n            db.names.back().second = typename C::String();\n            db.names.back().first.append(\"(\");\n            bool first_expr = true;\n            while (*t != 'E')\n            {\n                const char* t1 = parse_expression(t, last, db);\n                if (t1 == t || t1 == last)\n                    return first;\n                if (db.names.empty())\n                    return first;\n                auto tmp = db.names.back().move_full();\n                db.names.pop_back();\n                if (!tmp.empty())\n                {\n                    if (db.names.empty())\n                        return first;\n                    if (!first_expr)\n                    {\n                        db.names.back().first.append(\", \");\n                        first_expr = false;\n                    }\n                    db.names.back().first.append(tmp);\n                }\n                t = t1;\n            }\n            ++t;\n            if (db.names.empty())\n                return first;\n            db.names.back().first.append(\")\");\n            first = t;\n        }\n    }\n    return first;\n}\n\n// [gs] nw <expression>* _ <type> E                     # new (expr-list) type\n// [gs] nw <expression>* _ <type> <initializer>         # new (expr-list) type (init)\n// [gs] na <expression>* _ <type> E                     # new[] (expr-list) type\n// [gs] na <expression>* _ <type> <initializer>         # new[] (expr-list) type (init)\n// <initializer> ::= pi <expression>* E                 # parenthesized initialization\n\ntemplate <class C>\nconst char*\nparse_new_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 4)\n    {\n        const char* t = first;\n        bool parsed_gs = false;\n        if (t[0] == 'g' && t[1] == 's')\n        {\n            t += 2;\n            parsed_gs = true;\n        }\n        if (t[0] == 'n' && (t[1] == 'w' || t[1] == 'a'))\n        {\n            bool is_array = t[1] == 'a';\n            t += 2;\n            if (t == last)\n                return first;\n            bool has_expr_list = false;\n            bool first_expr = true;\n            while (*t != '_')\n            {\n                const char* t1 = parse_expression(t, last, db);\n                if (t1 == t || t1 == last)\n                    return first;\n                has_expr_list = true;\n                if (!first_expr)\n                {\n                    if (db.names.empty())\n                        return first;\n                    auto tmp = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!tmp.empty())\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first.append(\", \");\n                        db.names.back().first.append(tmp);\n                        first_expr = false;\n                    }\n                }\n                t = t1;\n            }\n            ++t;\n            const char* t1 = parse_type(t, last, db);\n            if (t1 == t || t1 == last)\n                return first;\n            t = t1;\n            bool has_init = false;\n            if (last - t >= 3 && t[0] == 'p' && t[1] == 'i')\n            {\n                t += 2;\n                has_init = true;\n                first_expr = true;\n                while (*t != 'E')\n                {\n                    t1 = parse_expression(t, last, db);\n                    if (t1 == t || t1 == last)\n                        return first;\n                    if (!first_expr)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        auto tmp = db.names.back().move_full();\n                        db.names.pop_back();\n                        if (!tmp.empty())\n                        {\n                            if (db.names.empty())\n                                return first;\n                            db.names.back().first.append(\", \");\n                            db.names.back().first.append(tmp);\n                            first_expr = false;\n                        }\n                    }\n                    t = t1;\n                }\n            }\n            if (*t != 'E')\n                return first;\n            typename C::String init_list;\n            if (has_init)\n            {\n                if (db.names.empty())\n                    return first;\n                init_list = db.names.back().move_full();\n                db.names.pop_back();\n            }\n            if (db.names.empty())\n                return first;\n            auto type = db.names.back().move_full();\n            db.names.pop_back();\n            typename C::String expr_list;\n            if (has_expr_list)\n            {\n                if (db.names.empty())\n                    return first;\n                expr_list = db.names.back().move_full();\n                db.names.pop_back();\n            }\n            typename C::String r;\n            if (parsed_gs)\n                r = \"::\";\n            if (is_array)\n                r += \"[] \";\n            else\n                r += \" \";\n            if (has_expr_list)\n                r += \"(\" + expr_list + \") \";\n            r += type;\n            if (has_init)\n                r += \" (\" + init_list + \")\";\n            db.names.push_back(std::move(r));\n            first = t+1;\n        }\n    }\n    return first;\n}\n\n// cv <type> <expression>                               # conversion with one argument\n// cv <type> _ <expression>* E                          # conversion with a different number of arguments\n\ntemplate <class C>\nconst char*\nparse_conversion_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'c' && first[1] == 'v')\n    {\n        bool try_to_parse_template_args = db.try_to_parse_template_args;\n        db.try_to_parse_template_args = false;\n        const char* t = parse_type(first+2, last, db);\n        db.try_to_parse_template_args = try_to_parse_template_args;\n        if (t != first+2 && t != last)\n        {\n            if (*t != '_')\n            {\n                const char* t1 = parse_expression(t, last, db);\n                if (t1 == t)\n                    return first;\n                t = t1;\n            }\n            else\n            {\n                ++t;\n                if (t == last)\n                    return first;\n                if (*t == 'E')\n                    db.names.emplace_back();\n                else\n                {\n                    bool first_expr = true;\n                    while (*t != 'E')\n                    {\n                        const char* t1 = parse_expression(t, last, db);\n                        if (t1 == t || t1 == last)\n                            return first;\n                        if (!first_expr)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            auto tmp = db.names.back().move_full();\n                            db.names.pop_back();\n                            if (!tmp.empty())\n                            {\n                                if (db.names.empty())\n                                    return first;\n                                db.names.back().first.append(\", \");\n                                db.names.back().first.append(tmp);\n                                first_expr = false;\n                            }\n                        }\n                        t = t1;\n                    }\n                }\n                ++t;\n            }\n            if (db.names.size() < 2)\n                return first;\n            auto tmp = db.names.back().move_full();\n            db.names.pop_back();\n            db.names.back() = \"(\" + db.names.back().move_full() + \")(\" + tmp + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// pt <expression> <expression>                    # expr->name\n\ntemplate <class C>\nconst char*\nparse_arrow_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'p' && first[1] == 't')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            const char* t1 = parse_expression(t, last, db);\n            if (t1 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto tmp = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first += \"->\";\n                db.names.back().first += tmp;\n                first = t1;\n            }\n        }\n    }\n    return first;\n}\n\n//  <ref-qualifier> ::= R                   # & ref-qualifier\n//  <ref-qualifier> ::= O                   # && ref-qualifier\n\n// <function-type> ::= F [Y] <bare-function-type> [<ref-qualifier>] E\n\ntemplate <class C>\nconst char*\nparse_function_type(const char* first, const char* last, C& db)\n{\n    if (first != last && *first == 'F')\n    {\n        const char* t = first+1;\n        if (t != last)\n        {\n            bool externC = false;\n            if (*t == 'Y')\n            {\n                externC = true;\n                if (++t == last)\n                    return first;\n            }\n            const char* t1 = parse_type(t, last, db);\n            if (t1 != t)\n            {\n                t = t1;\n                typename C::String sig(\"(\");\n                int ref_qual = 0;\n                while (true)\n                {\n                    if (t == last)\n                    {\n                        db.names.pop_back();\n                        return first;\n                    }\n                    if (*t == 'E')\n                    {\n                        ++t;\n                        break;\n                    }\n                    if (*t == 'v')\n                    {\n                        ++t;\n                        continue;\n                    }\n                    if (*t == 'R' && t+1 != last && t[1] == 'E')\n                    {\n                        ref_qual = 1;\n                        ++t;\n                        continue;\n                    }\n                    if (*t == 'O' && t+1 != last && t[1] == 'E')\n                    {\n                        ref_qual = 2;\n                        ++t;\n                        continue;\n                    }\n                    size_t k0 = db.names.size();\n                    t1 = parse_type(t, last, db);\n                    size_t k1 = db.names.size();\n                    if (t1 == t || t1 == last)\n                        return first;\n                    for (size_t k = k0; k < k1; ++k)\n                    {\n                        if (sig.size() > 1)\n                            sig += \", \";\n                        sig += db.names[k].move_full();\n                    }\n                    for (size_t k = k0; k < k1; ++k)\n                        db.names.pop_back();\n                    t = t1;\n                }\n                sig += \")\";\n                switch (ref_qual)\n                {\n                case 1:\n                    sig += \" &\";\n                    break;\n                case 2:\n                    sig += \" &&\";\n                    break;\n                }\n                if (db.names.empty())\n                    return first;\n                db.names.back().first += \" \";\n                db.names.back().second.insert(0, sig);\n                first = t;\n            }\n        }\n    }\n    return first;\n}\n\n// <pointer-to-member-type> ::= M <class type> <member type>\n\ntemplate <class C>\nconst char*\nparse_pointer_to_member_type(const char* first, const char* last, C& db)\n{\n    if (first != last && *first == 'M')\n    {\n        const char* t = parse_type(first+1, last, db);\n        if (t != first+1)\n        {\n            const char* t2 = parse_type(t, last, db);\n            if (t2 != t)\n            {\n                if (db.names.size() < 2)\n                    return first;\n                auto func = std::move(db.names.back());\n                db.names.pop_back();\n                auto class_type = std::move(db.names.back());\n                if (func.second.front() == '(')\n                {\n                    db.names.back().first = std::move(func.first) + \"(\" + class_type.move_full() + \"::*\";\n                    db.names.back().second = \")\" + std::move(func.second);\n                }\n                else\n                {\n                    db.names.back().first = std::move(func.first) + \" \" + class_type.move_full() + \"::*\";\n                    db.names.back().second = std::move(func.second);\n                }\n                first = t2;\n            }\n        }\n    }\n    return first;\n}\n\n// <array-type> ::= A <positive dimension number> _ <element type>\n//              ::= A [<dimension expression>] _ <element type>\n\ntemplate <class C>\nconst char*\nparse_array_type(const char* first, const char* last, C& db)\n{\n    if (first != last && *first == 'A' && first+1 != last)\n    {\n        if (first[1] == '_')\n        {\n            const char* t = parse_type(first+2, last, db);\n            if (t != first+2)\n            {\n                if (db.names.empty())\n                    return first;\n                if (db.names.back().second.substr(0, 2) == \" [\")\n                    db.names.back().second.erase(0, 1);\n                db.names.back().second.insert(0, \" []\");\n                first = t;\n            }\n        }\n        else if ('1' <= first[1] && first[1] <= '9')\n        {\n            const char* t = parse_number(first+1, last);\n            if (t != last && *t == '_')\n            {\n                const char* t2 = parse_type(t+1, last, db);\n                if (t2 != t+1)\n                {\n                    if (db.names.empty())\n                        return first;\n                    if (db.names.back().second.substr(0, 2) == \" [\")\n                        db.names.back().second.erase(0, 1);\n                    db.names.back().second.insert(0, \" [\" + typename C::String(first+1, t) + \"]\");\n                    first = t2;\n                }\n            }\n        }\n        else\n        {\n            const char* t = parse_expression(first+1, last, db);\n            if (t != first+1 && t != last && *t == '_')\n            {\n                const char* t2 = parse_type(++t, last, db);\n                if (t2 != t)\n                {\n                    if (db.names.size() < 2)\n                        return first;\n                    auto type = std::move(db.names.back());\n                    db.names.pop_back();\n                    auto expr = std::move(db.names.back());\n                    db.names.back().first = std::move(type.first);\n                    if (type.second.substr(0, 2) == \" [\")\n                        type.second.erase(0, 1);\n                    db.names.back().second = \" [\" + expr.move_full() + \"]\" + std::move(type.second);\n                    first = t2;\n                }\n            }\n        }\n    }\n    return first;\n}\n\n// <decltype>  ::= Dt <expression> E  # decltype of an id-expression or class member access (C++0x)\n//             ::= DT <expression> E  # decltype of an expression (C++0x)\n\ntemplate <class C>\nconst char*\nparse_decltype(const char* first, const char* last, C& db)\n{\n    if (last - first >= 4 && first[0] == 'D')\n    {\n        switch (first[1])\n        {\n        case 't':\n        case 'T':\n            {\n                const char* t = parse_expression(first+2, last, db);\n                if (t != first+2 && t != last && *t == 'E')\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back() = \"decltype(\" + db.names.back().move_full() + \")\";\n                    first = t+1;\n                }\n            }\n            break;\n        }\n    }\n    return first;\n}\n\n// extension:\n// <vector-type>           ::= Dv <positive dimension number> _\n//                                    <extended element type>\n//                         ::= Dv [<dimension expression>] _ <element type>\n// <extended element type> ::= <element type>\n//                         ::= p # AltiVec vector pixel\n\ntemplate <class C>\nconst char*\nparse_vector_type(const char* first, const char* last, C& db)\n{\n    if (last - first > 3 && first[0] == 'D' && first[1] == 'v')\n    {\n        if ('1' <= first[2] && first[2] <= '9')\n        {\n            const char* t = parse_number(first+2, last);\n            if (t == last || *t != '_')\n                return first;\n            const char* num = first + 2;\n            size_t sz = static_cast<size_t>(t - num);\n            if (++t != last)\n            {\n                if (*t != 'p')\n                {\n                    const char* t1 = parse_type(t, last, db);\n                    if (t1 != t)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first += \" vector[\" + typename C::String(num, sz) + \"]\";\n                        first = t1;\n                    }\n                }\n                else\n                {\n                    ++t;\n                    db.names.push_back(\"pixel vector[\" + typename C::String(num, sz) + \"]\");\n                    first = t;\n                }\n            }\n        }\n        else\n        {\n            typename C::String num;\n            const char* t1 = first+2;\n            if (*t1 != '_')\n            {\n                const char* t = parse_expression(t1, last, db);\n                if (t != t1)\n                {\n                    if (db.names.empty())\n                        return first;\n                    num = db.names.back().move_full();\n                    db.names.pop_back();\n                    t1 = t;\n                }\n            }\n            if (t1 != last && *t1 == '_' && ++t1 != last)\n            {\n                const char* t = parse_type(t1, last, db);\n                if (t != t1)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first += \" vector[\" + num + \"]\";\n                    first = t;\n                }\n            }\n        }\n    }\n    return first;\n}\n\n// <type> ::= <builtin-type>\n//        ::= <function-type>\n//        ::= <class-enum-type>\n//        ::= <array-type>\n//        ::= <pointer-to-member-type>\n//        ::= <template-param>\n//        ::= <template-template-param> <template-args>\n//        ::= <decltype>\n//        ::= <substitution>\n//        ::= <CV-qualifiers> <type>\n//        ::= P <type>        # pointer-to\n//        ::= R <type>        # reference-to\n//        ::= O <type>        # rvalue reference-to (C++0x)\n//        ::= C <type>        # complex pair (C 2000)\n//        ::= G <type>        # imaginary (C 2000)\n//        ::= Dp <type>       # pack expansion (C++0x)\n//        ::= U <source-name> <type>  # vendor extended type qualifier\n// extension := U <objc-name> <objc-type>  # objc-type<identifier>\n// extension := <vector-type> # <vector-type> starts with Dv\n\n// <objc-name> ::= <k0 number> objcproto <k1 number> <identifier>  # k0 = 9 + <number of digits in k1> + k1\n// <objc-type> := <source-name>  # PU<11+>objcproto 11objc_object<source-name> 11objc_object -> id<source-name>\n\ntemplate <class C>\nconst char*\nparse_type(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        switch (*first)\n        {\n            case 'r':\n            case 'V':\n            case 'K':\n              {\n                unsigned cv = 0;\n                const char* t = parse_cv_qualifiers(first, last, cv);\n                if (t != first)\n                {\n                    bool is_function = *t == 'F';\n                    size_t k0 = db.names.size();\n                    const char* t1 = parse_type(t, last, db);\n                    size_t k1 = db.names.size();\n                    if (t1 != t)\n                    {\n                        if (is_function)\n                            db.subs.pop_back();\n                        db.subs.emplace_back(db.names.get_allocator());\n                        for (size_t k = k0; k < k1; ++k)\n                        {\n                            if (is_function)\n                            {\n                                size_t p = db.names[k].second.size();\n                                if (db.names[k].second[p-2] == '&')\n                                    p -= 3;\n                                else if (db.names[k].second.back() == '&')\n                                    p -= 2;\n                                if (cv & 1)\n                                {\n                                    db.names[k].second.insert(p, \" const\");\n                                    p += 6;\n                                }\n                                if (cv & 2)\n                                {\n                                    db.names[k].second.insert(p, \" volatile\");\n                                    p += 9;\n                                }\n                                if (cv & 4)\n                                    db.names[k].second.insert(p, \" restrict\");\n                            }\n                            else\n                            {\n                                if (cv & 1)\n                                    db.names[k].first.append(\" const\");\n                                if (cv & 2)\n                                    db.names[k].first.append(\" volatile\");\n                                if (cv & 4)\n                                    db.names[k].first.append(\" restrict\");\n                            }\n                            db.subs.back().push_back(db.names[k]);\n                        }\n                        first = t1;\n                    }\n                }\n              }\n                break;\n            default:\n              {\n                const char* t = parse_builtin_type(first, last, db);\n                if (t != first)\n                {\n                    first = t;\n                }\n                else\n                {\n                    switch (*first)\n                    {\n                    case 'A':\n                        t = parse_array_type(first, last, db);\n                        if (t != first)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            first = t;\n                            db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        }\n                        break;\n                    case 'C':\n                        t = parse_type(first+1, last, db);\n                        if (t != first+1)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            db.names.back().first.append(\" complex\");\n                            first = t;\n                            db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        }\n                        break;\n                    case 'F':\n                        t = parse_function_type(first, last, db);\n                        if (t != first)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            first = t;\n                            db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        }\n                        break;\n                    case 'G':\n                        t = parse_type(first+1, last, db);\n                        if (t != first+1)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            db.names.back().first.append(\" imaginary\");\n                            first = t;\n                            db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        }\n                        break;\n                    case 'M':\n                        t = parse_pointer_to_member_type(first, last, db);\n                        if (t != first)\n                        {\n                            if (db.names.empty())\n                                return first;\n                            first = t;\n                            db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                        }\n                        break;\n                    case 'O':\n                      {\n                        size_t k0 = db.names.size();\n                        t = parse_type(first+1, last, db);\n                        size_t k1 = db.names.size();\n                        if (t != first+1)\n                        {\n                            db.subs.emplace_back(db.names.get_allocator());\n                            for (size_t k = k0; k < k1; ++k)\n                            {\n                                if (db.names[k].second.substr(0, 2) == \" [\")\n                                {\n                                    db.names[k].first += \" (\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                else if (db.names[k].second.front() == '(')\n                                {\n                                    db.names[k].first += \"(\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                db.names[k].first.append(\"&&\");\n                                db.subs.back().push_back(db.names[k]);\n                            }\n                            first = t;\n                        }\n                        break;\n                      }\n                    case 'P':\n                      {\n                        size_t k0 = db.names.size();\n                        t = parse_type(first+1, last, db);\n                        size_t k1 = db.names.size();\n                        if (t != first+1)\n                        {\n                            db.subs.emplace_back(db.names.get_allocator());\n                            for (size_t k = k0; k < k1; ++k)\n                            {\n                                if (db.names[k].second.substr(0, 2) == \" [\")\n                                {\n                                    db.names[k].first += \" (\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                else if (db.names[k].second.front() == '(')\n                                {\n                                    db.names[k].first += \"(\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                if (first[1] != 'U' || db.names[k].first.substr(0, 12) != \"objc_object<\")\n                                {\n                                    db.names[k].first.append(\"*\");\n                                }\n                                else\n                                {\n                                    db.names[k].first.replace(0, 11, \"id\");\n                                }\n                                db.subs.back().push_back(db.names[k]);\n                            }\n                            first = t;\n                        }\n                        break;\n                      }\n                    case 'R':\n                      {\n                        size_t k0 = db.names.size();\n                        t = parse_type(first+1, last, db);\n                        size_t k1 = db.names.size();\n                        if (t != first+1)\n                        {\n                            db.subs.emplace_back(db.names.get_allocator());\n                            for (size_t k = k0; k < k1; ++k)\n                            {\n                                if (db.names[k].second.substr(0, 2) == \" [\")\n                                {\n                                    db.names[k].first += \" (\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                else if (db.names[k].second.front() == '(')\n                                {\n                                    db.names[k].first += \"(\";\n                                    db.names[k].second.insert(0, \")\");\n                                }\n                                db.names[k].first.append(\"&\");\n                                db.subs.back().push_back(db.names[k]);\n                            }\n                            first = t;\n                        }\n                        break;\n                      }\n                    case 'T':\n                      {\n                        size_t k0 = db.names.size();\n                        t = parse_template_param(first, last, db);\n                        size_t k1 = db.names.size();\n                        if (t != first)\n                        {\n                            db.subs.emplace_back(db.names.get_allocator());\n                            for (size_t k = k0; k < k1; ++k)\n                                db.subs.back().push_back(db.names[k]);\n                            if (db.try_to_parse_template_args && k1 == k0+1)\n                            {\n                                const char* t1 = parse_template_args(t, last, db);\n                                if (t1 != t)\n                                {\n                                    auto args = db.names.back().move_full();\n                                    db.names.pop_back();\n                                    db.names.back().first += std::move(args);\n                                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                    t = t1;\n                                }\n                            }\n                            first = t;\n                        }\n                        break;\n                      }\n                    case 'U':\n                        if (first+1 != last)\n                        {\n                            t = parse_source_name(first+1, last, db);\n                            if (t != first+1)\n                            {\n                                const char* t2 = parse_type(t, last, db);\n                                if (t2 != t)\n                                {\n                                    if (db.names.size() < 2)\n                                        return first;\n                                    auto type = db.names.back().move_full();\n                                    db.names.pop_back();\n                                    if (db.names.back().first.substr(0, 9) != \"objcproto\")\n                                    {\n                                        db.names.back() = type + \" \" + db.names.back().move_full();\n                                    }\n                                    else\n                                    {\n                                        auto proto = db.names.back().move_full();\n                                        db.names.pop_back();\n                                        t = parse_source_name(proto.data() + 9, proto.data() + proto.size(), db);\n                                        if (t != proto.data() + 9)\n                                        {\n                                            db.names.back() = type + \"<\" + db.names.back().move_full() + \">\";\n                                        }\n                                        else\n                                        {\n                                            db.names.push_back(type + \" \" + proto);\n                                        }\n                                    }\n                                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                    first = t2;\n                                }\n                            }\n                        }\n                        break;\n                    case 'S':\n                        if (first+1 != last && first[1] == 't')\n                        {\n                            t = parse_name(first, last, db);\n                            if (t != first)\n                            {\n                                if (db.names.empty())\n                                    return first;\n                                db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                first = t;\n                            }\n                        }\n                        else\n                        {\n                            t = parse_substitution(first, last, db);\n                            if (t != first)\n                            {\n                                first = t;\n                                // Parsed a substitution.  If the substitution is a\n                                //  <template-param> it might be followed by <template-args>.\n                                t = parse_template_args(first, last, db);\n                                if (t != first)\n                                {\n                                    if (db.names.size() < 2)\n                                        return first;\n                                    auto template_args = db.names.back().move_full();\n                                    db.names.pop_back();\n                                    db.names.back().first += template_args;\n                                    // Need to create substitution for <template-template-param> <template-args>\n                                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                    first = t;\n                                }\n                            }\n                        }\n                        break;\n                    case 'D':\n                        if (first+1 != last)\n                        {\n                            switch (first[1])\n                            {\n                            case 'p':\n                              {\n                                size_t k0 = db.names.size();\n                                t = parse_type(first+2, last, db);\n                                size_t k1 = db.names.size();\n                                if (t != first+2)\n                                {\n                                    db.subs.emplace_back(db.names.get_allocator());\n                                    for (size_t k = k0; k < k1; ++k)\n                                        db.subs.back().push_back(db.names[k]);\n                                    first = t;\n                                    return first;\n                                }\n                                break;\n                              }\n                            case 't':\n                            case 'T':\n                                t = parse_decltype(first, last, db);\n                                if (t != first)\n                                {\n                                    if (db.names.empty())\n                                        return first;\n                                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                    first = t;\n                                    return first;\n                                }\n                                break;\n                            case 'v':\n                                t = parse_vector_type(first, last, db);\n                                if (t != first)\n                                {\n                                    if (db.names.empty())\n                                        return first;\n                                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                    first = t;\n                                    return first;\n                                }\n                                break;\n                            }\n                        }\n                        // drop through\n                    default:\n                        // must check for builtin-types before class-enum-types to avoid\n                        // ambiguities with operator-names\n                        t = parse_builtin_type(first, last, db);\n                        if (t != first)\n                        {\n                            first = t;\n                        }\n                        else\n                        {\n                            t = parse_name(first, last, db);\n                            if (t != first)\n                            {\n                                if (db.names.empty())\n                                    return first;\n                                db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                                first = t;\n                            }\n                        }\n                        break;\n                    }\n              }\n                break;\n            }\n        }\n    }\n    return first;\n}\n\n//   <operator-name>\n//                   ::= aa    # &&            \n//                   ::= ad    # & (unary)     \n//                   ::= an    # &             \n//                   ::= aN    # &=            \n//                   ::= aS    # =             \n//                   ::= cl    # ()            \n//                   ::= cm    # ,             \n//                   ::= co    # ~             \n//                   ::= cv <type>    # (cast)        \n//                   ::= da    # delete[]      \n//                   ::= de    # * (unary)     \n//                   ::= dl    # delete        \n//                   ::= dv    # /             \n//                   ::= dV    # /=            \n//                   ::= eo    # ^             \n//                   ::= eO    # ^=            \n//                   ::= eq    # ==            \n//                   ::= ge    # >=            \n//                   ::= gt    # >             \n//                   ::= ix    # []            \n//                   ::= le    # <=            \n//                   ::= li <source-name>  # operator \"\"\n//                   ::= ls    # <<            \n//                   ::= lS    # <<=           \n//                   ::= lt    # <             \n//                   ::= mi    # -             \n//                   ::= mI    # -=            \n//                   ::= ml    # *             \n//                   ::= mL    # *=            \n//                   ::= mm    # -- (postfix in <expression> context)           \n//                   ::= na    # new[]\n//                   ::= ne    # !=            \n//                   ::= ng    # - (unary)     \n//                   ::= nt    # !             \n//                   ::= nw    # new           \n//                   ::= oo    # ||            \n//                   ::= or    # |             \n//                   ::= oR    # |=            \n//                   ::= pm    # ->*           \n//                   ::= pl    # +             \n//                   ::= pL    # +=            \n//                   ::= pp    # ++ (postfix in <expression> context)\n//                   ::= ps    # + (unary)\n//                   ::= pt    # ->            \n//                   ::= qu    # ?             \n//                   ::= rm    # %             \n//                   ::= rM    # %=            \n//                   ::= rs    # >>            \n//                   ::= rS    # >>=           \n//                   ::= v <digit> <source-name>        # vendor extended operator\n\ntemplate <class C>\nconst char*\nparse_operator_name(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        switch (first[0])\n        {\n        case 'a':\n            switch (first[1])\n            {\n            case 'a':\n                db.names.push_back(\"operator&&\");\n                first += 2;\n                break;\n            case 'd':\n            case 'n':\n                db.names.push_back(\"operator&\");\n                first += 2;\n                break;\n            case 'N':\n                db.names.push_back(\"operator&=\");\n                first += 2;\n                break;\n            case 'S':\n                db.names.push_back(\"operator=\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'c':\n            switch (first[1])\n            {\n            case 'l':\n                db.names.push_back(\"operator()\");\n                first += 2;\n                break;\n            case 'm':\n                db.names.push_back(\"operator,\");\n                first += 2;\n                break;\n            case 'o':\n                db.names.push_back(\"operator~\");\n                first += 2;\n                break;\n            case 'v':\n                {\n                    bool try_to_parse_template_args = db.try_to_parse_template_args;\n                    db.try_to_parse_template_args = false;\n                    const char* t = parse_type(first+2, last, db);\n                    db.try_to_parse_template_args = try_to_parse_template_args;\n                    if (t != first+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first.insert(0, \"operator \");\n                        db.parsed_ctor_dtor_cv = true;\n                        first = t;\n                    }\n                }\n                break;\n            }\n            break;\n        case 'd':\n            switch (first[1])\n            {\n            case 'a':\n                db.names.push_back(\"operator delete[]\");\n                first += 2;\n                break;\n            case 'e':\n                db.names.push_back(\"operator*\");\n                first += 2;\n                break;\n            case 'l':\n                db.names.push_back(\"operator delete\");\n                first += 2;\n                break;\n            case 'v':\n                db.names.push_back(\"operator/\");\n                first += 2;\n                break;\n            case 'V':\n                db.names.push_back(\"operator/=\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'e':\n            switch (first[1])\n            {\n            case 'o':\n                db.names.push_back(\"operator^\");\n                first += 2;\n                break;\n            case 'O':\n                db.names.push_back(\"operator^=\");\n                first += 2;\n                break;\n            case 'q':\n                db.names.push_back(\"operator==\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'g':\n            switch (first[1])\n            {\n            case 'e':\n                db.names.push_back(\"operator>=\");\n                first += 2;\n                break;\n            case 't':\n                db.names.push_back(\"operator>\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'i':\n            if (first[1] == 'x')\n            {\n                db.names.push_back(\"operator[]\");\n                first += 2;\n            }\n            break;\n        case 'l':\n            switch (first[1])\n            {\n            case 'e':\n                db.names.push_back(\"operator<=\");\n                first += 2;\n                break;\n            case 'i':\n                {\n                    const char* t = parse_source_name(first+2, last, db);\n                    if (t != first+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first.insert(0, \"operator\\\"\\\" \");\n                        first = t;\n                    }\n                }\n                break;\n            case 's':\n                db.names.push_back(\"operator<<\");\n                first += 2;\n                break;\n            case 'S':\n                db.names.push_back(\"operator<<=\");\n                first += 2;\n                break;\n            case 't':\n                db.names.push_back(\"operator<\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'm':\n            switch (first[1])\n            {\n            case 'i':\n                db.names.push_back(\"operator-\");\n                first += 2;\n                break;\n            case 'I':\n                db.names.push_back(\"operator-=\");\n                first += 2;\n                break;\n            case 'l':\n                db.names.push_back(\"operator*\");\n                first += 2;\n                break;\n            case 'L':\n                db.names.push_back(\"operator*=\");\n                first += 2;\n                break;\n            case 'm':\n                db.names.push_back(\"operator--\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'n':\n            switch (first[1])\n            {\n            case 'a':\n                db.names.push_back(\"operator new[]\");\n                first += 2;\n                break;\n            case 'e':\n                db.names.push_back(\"operator!=\");\n                first += 2;\n                break;\n            case 'g':\n                db.names.push_back(\"operator-\");\n                first += 2;\n                break;\n            case 't':\n                db.names.push_back(\"operator!\");\n                first += 2;\n                break;\n            case 'w':\n                db.names.push_back(\"operator new\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'o':\n            switch (first[1])\n            {\n            case 'o':\n                db.names.push_back(\"operator||\");\n                first += 2;\n                break;\n            case 'r':\n                db.names.push_back(\"operator|\");\n                first += 2;\n                break;\n            case 'R':\n                db.names.push_back(\"operator|=\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'p':\n            switch (first[1])\n            {\n            case 'm':\n                db.names.push_back(\"operator->*\");\n                first += 2;\n                break;\n            case 'l':\n                db.names.push_back(\"operator+\");\n                first += 2;\n                break;\n            case 'L':\n                db.names.push_back(\"operator+=\");\n                first += 2;\n                break;\n            case 'p':\n                db.names.push_back(\"operator++\");\n                first += 2;\n                break;\n            case 's':\n                db.names.push_back(\"operator+\");\n                first += 2;\n                break;\n            case 't':\n                db.names.push_back(\"operator->\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'q':\n            if (first[1] == 'u')\n            {\n                db.names.push_back(\"operator?\");\n                first += 2;\n            }\n            break;\n        case 'r':\n            switch (first[1])\n            {\n            case 'm':\n                db.names.push_back(\"operator%\");\n                first += 2;\n                break;\n            case 'M':\n                db.names.push_back(\"operator%=\");\n                first += 2;\n                break;\n            case 's':\n                db.names.push_back(\"operator>>\");\n                first += 2;\n                break;\n            case 'S':\n                db.names.push_back(\"operator>>=\");\n                first += 2;\n                break;\n            }\n            break;\n        case 'v':\n            if (std::isdigit(first[1]))\n            {\n                const char* t = parse_source_name(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"operator \");\n                    first = t;\n                }\n            }\n            break;\n        }\n    }\n    return first;\n}\n\ntemplate <class C>\nconst char*\nparse_integer_literal(const char* first, const char* last, const typename C::String& lit, C& db)\n{\n    const char* t = parse_number(first, last);\n    if (t != first && t != last && *t == 'E')\n    {\n        if (lit.size() > 3)\n            db.names.push_back(\"(\" + lit + \")\");\n        else\n            db.names.emplace_back();\n        if (*first == 'n')\n        {\n            db.names.back().first += '-';\n            ++first;\n        }\n        db.names.back().first.append(first, t);\n        if (lit.size() <= 3)\n            db.names.back().first += lit;\n        first = t+1;\n    }\n    return first;\n}\n\n// <expr-primary> ::= L <type> <value number> E                          # integer literal\n//                ::= L <type> <value float> E                           # floating literal\n//                ::= L <string type> E                                  # string literal\n//                ::= L <nullptr type> E                                 # nullptr literal (i.e., \"LDnE\")\n//                ::= L <type> <real-part float> _ <imag-part float> E   # complex floating point literal (C 2000)\n//                ::= L <mangled-name> E                                 # external name\n\ntemplate <class C>\nconst char*\nparse_expr_primary(const char* first, const char* last, C& db)\n{\n    if (last - first >= 4 && *first == 'L')\n    {\n        switch (first[1])\n        {\n        case 'w':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"wchar_t\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'b':\n            if (first[3] == 'E')\n            {\n                switch (first[2])\n                {\n                case '0':\n                    db.names.push_back(\"false\");\n                    first += 4;\n                    break;\n                case '1':\n                    db.names.push_back(\"true\");\n                    first += 4;\n                    break;\n                }\n            }\n            break;\n        case 'c':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"char\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'a':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"signed char\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'h':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"unsigned char\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 's':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"short\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 't':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"unsigned short\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'i':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'j':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"u\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'l':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"l\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'm':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"ul\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'x':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"ll\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'y':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"ull\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'n':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"__int128\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'o':\n            {\n            const char* t = parse_integer_literal(first+2, last, \"unsigned __int128\", db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'f':\n            {\n            const char* t = parse_floating_number<float>(first+2, last, db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case 'd':\n            {\n            const char* t = parse_floating_number<double>(first+2, last, db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n         case 'e':\n            {\n            const char* t = parse_floating_number<long double>(first+2, last, db);\n            if (t != first+2)\n                first = t;\n            }\n            break;\n        case '_':\n            if (first[2] == 'Z')\n            {\n                const char* t = parse_encoding(first+3, last, db);\n                if (t != first+3 && t != last && *t == 'E')\n                    first = t+1;\n            }\n            break;\n        case 'T':\n            // Invalid mangled name per\n            //   http://sourcerytools.com/pipermail/cxx-abi-dev/2011-August/002422.html\n            break;\n        default:\n            {\n                // might be named type\n                const char* t = parse_type(first+1, last, db);\n                if (t != first+1 && t != last)\n                {\n                    if (*t != 'E')\n                    {\n                        const char* n = t;\n                        for (; n != last && isdigit(*n); ++n)\n                            ;\n                        if (n != t && n != last && *n == 'E')\n                        {\n                            if (db.names.empty())\n                                return first;\n                            db.names.back() = \"(\" + db.names.back().move_full() + \")\" + typename C::String(t, n);\n                            first = n+1;\n                            break;\n                        }\n                    }\n                    else\n                    {\n                        first = t+1;\n                        break;\n                    }\n                }\n            }\n        }\n    }\n    return first;\n}\n\ntemplate <class String>\nString\nbase_name(String& s)\n{\n    if (s.empty())\n        return s;\n    if (s == \"std::string\")\n    {\n        s = \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >\";\n        return \"basic_string\";\n    }\n    if (s == \"std::istream\")\n    {\n        s = \"std::basic_istream<char, std::char_traits<char> >\";\n        return \"basic_istream\";\n    }\n    if (s == \"std::ostream\")\n    {\n        s = \"std::basic_ostream<char, std::char_traits<char> >\";\n        return \"basic_ostream\";\n    }\n    if (s == \"std::iostream\")\n    {\n        s = \"std::basic_iostream<char, std::char_traits<char> >\";\n        return \"basic_iostream\";\n    }\n    const char* const pf = s.data();\n    const char* pe = pf + s.size();\n    if (pe[-1] == '>')\n    {\n        unsigned c = 1;\n        while (true)\n        {\n            if (--pe == pf)\n                return String();\n            if (pe[-1] == '<')\n            {\n                if (--c == 0)\n                {\n                    --pe;\n                    break;\n                }\n            }\n            else if (pe[-1] == '>')\n                ++c;\n        }\n    }\n    const char* p0 = pe - 1;\n    for (; p0 != pf; --p0)\n    {\n        if (*p0 == ':')\n        {\n            ++p0;\n            break;\n        }\n    }\n    return String(p0, pe);\n}\n\n// <ctor-dtor-name> ::= C1    # complete object constructor\n//                  ::= C2    # base object constructor\n//                  ::= C3    # complete object allocating constructor\n//   extension      ::= C5    # ?\n//                  ::= D0    # deleting destructor\n//                  ::= D1    # complete object destructor\n//                  ::= D2    # base object destructor\n//   extension      ::= D5    # ?\n\ntemplate <class C>\nconst char*\nparse_ctor_dtor_name(const char* first, const char* last, C& db)\n{\n    if (last-first >= 2 && !db.names.empty())\n    {\n        switch (first[0])\n        {\n        case 'C':\n            switch (first[1])\n            {\n            case '1':\n            case '2':\n            case '3':\n            case '5':\n                if (db.names.empty())\n                    return first;\n                db.names.push_back(base_name(db.names.back().first));\n                first += 2;\n                db.parsed_ctor_dtor_cv = true;\n                break;\n            }\n            break;\n        case 'D':\n            switch (first[1])\n            {\n            case '0':\n            case '1':\n            case '2':\n            case '5':\n                if (db.names.empty())\n                    return first;\n                db.names.push_back(\"~\" + base_name(db.names.back().first));\n                first += 2;\n                db.parsed_ctor_dtor_cv = true;\n                break;\n            }\n            break;\n        }\n    }\n    return first;\n}\n\n// <unnamed-type-name> ::= Ut [ <nonnegative number> ] _\n//                     ::= <closure-type-name>\n// \n// <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ \n// \n// <lambda-sig> ::= <parameter type>+  # Parameter types or \"v\" if the lambda has no parameters\n\ntemplate <class C>\nconst char*\nparse_unnamed_type_name(const char* first, const char* last, C& db)\n{\n    if (last - first > 2 && first[0] == 'U')\n    {\n        char type = first[1];\n        switch (type)\n        {\n        case 't':\n          {\n            db.names.push_back(typename C::String(\"'unnamed\"));\n            const char* t0 = first+2;\n            if (t0 == last)\n            {\n                db.names.pop_back();\n                return first;\n            }\n            if (std::isdigit(*t0))\n            {\n                const char* t1 = t0 + 1;\n                while (t1 != last && std::isdigit(*t1))\n                    ++t1;\n                db.names.back().first.append(t0, t1);\n                t0 = t1;\n            }\n            db.names.back().first.push_back('\\'');\n            if (t0 == last || *t0 != '_')\n            {\n                db.names.pop_back();\n                return first;\n            }\n            first = t0 + 1;\n          }\n            break;\n        case 'l':\n          {\n            db.names.push_back(typename C::String(\"'lambda'(\"));\n            const char* t0 = first+2;\n            if (first[2] == 'v')\n            {\n                db.names.back().first += ')';\n                ++t0;\n            }\n            else\n            {\n                const char* t1 = parse_type(t0, last, db);\n                if (t1 == t0)\n                {\n                    db.names.pop_back();\n                    return first;\n                }\n                if (db.names.size() < 2)\n                    return first;\n                auto tmp = db.names.back().move_full();\n                db.names.pop_back();\n                db.names.back().first.append(tmp);\n                t0 = t1;\n                while (true)\n                {\n                    t1 = parse_type(t0, last, db);\n                    if (t1 == t0)\n                        break;\n                    if (db.names.size() < 2)\n                        return first;\n                    tmp = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!tmp.empty())\n                    {\n                        db.names.back().first.append(\", \");\n                        db.names.back().first.append(tmp);\n                    }\n                    t0 = t1;\n                }\n                db.names.back().first.append(\")\");\n            }\n            if (t0 == last || *t0 != 'E')\n            {\n                db.names.pop_back();\n                return first;\n            }\n            ++t0;\n            if (t0 == last)\n            {\n                db.names.pop_back();\n                return first;\n            }\n            if (std::isdigit(*t0))\n            {\n                const char* t1 = t0 + 1;\n                while (t1 != last && std::isdigit(*t1))\n                    ++t1;\n                db.names.back().first.insert(db.names.back().first.begin()+7, t0, t1);\n                t0 = t1;\n            }\n            if (t0 == last || *t0 != '_')\n            {\n                db.names.pop_back();\n                return first;\n            }\n            first = t0 + 1;\n          }\n            break;\n        }\n    }\n    return first;\n}\n\n// <unqualified-name> ::= <operator-name>\n//                    ::= <ctor-dtor-name>\n//                    ::= <source-name>   \n//                    ::= <unnamed-type-name>\n\ntemplate <class C>\nconst char*\nparse_unqualified_name(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        const char* t;\n        switch (*first)\n        {\n        case 'C':\n        case 'D':\n            t = parse_ctor_dtor_name(first, last, db);\n            if (t != first)\n                first = t;\n            break;\n        case 'U':\n            t = parse_unnamed_type_name(first, last, db);\n            if (t != first)\n                first = t;\n            break;\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            t = parse_source_name(first, last, db);\n            if (t != first)\n                first = t;\n            break;\n        default:\n            t = parse_operator_name(first, last, db);\n            if (t != first)\n                first = t;\n            break;\n        };\n    }\n    return first;\n}\n\n// <unscoped-name> ::= <unqualified-name>\n//                 ::= St <unqualified-name>   # ::std::\n// extension       ::= StL<unqualified-name>\n\ntemplate <class C>\nconst char*\nparse_unscoped_name(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        const char* t0 = first;\n        bool St = false;\n        if (first[0] == 'S' && first[1] == 't')\n        {\n            t0 += 2;\n            St = true;\n            if (t0 != last && *t0 == 'L')\n                ++t0;\n        }\n        const char* t1 = parse_unqualified_name(t0, last, db);\n        if (t1 != t0)\n        {\n            if (St)\n            {\n                if (db.names.empty())\n                    return first;\n                db.names.back().first.insert(0, \"std::\");\n            }\n            first = t1;\n        }\n    }\n    return first;\n}\n\n// at <type>                                            # alignof (a type)\n\ntemplate <class C>\nconst char*\nparse_alignof_type(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'a' && first[1] == 't')\n    {\n        const char* t = parse_type(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back().first = \"alignof (\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\n// az <expression>                                            # alignof (a expression)\n\ntemplate <class C>\nconst char*\nparse_alignof_expr(const char* first, const char* last, C& db)\n{\n    if (last - first >= 3 && first[0] == 'a' && first[1] == 'z')\n    {\n        const char* t = parse_expression(first+2, last, db);\n        if (t != first+2)\n        {\n            if (db.names.empty())\n                return first;\n            db.names.back().first = \"alignof (\" + db.names.back().move_full() + \")\";\n            first = t;\n        }\n    }\n    return first;\n}\n\ntemplate <class C>\nconst char*\nparse_noexcept_expression(const char* first, const char* last, C& db)\n{\n    const char* t1 = parse_expression(first, last, db);\n    if (t1 != first)\n    {\n        if (db.names.empty())\n            return first;\n        db.names.back().first =  \"noexcept (\" + db.names.back().move_full() + \")\";\n        first = t1;\n    }\n    return first;\n}\n\ntemplate <class C>\nconst char*\nparse_prefix_expression(const char* first, const char* last, const typename C::String& op, C& db)\n{\n    const char* t1 = parse_expression(first, last, db);\n    if (t1 != first)\n    {\n        if (db.names.empty())\n            return first;\n        db.names.back().first =  op + \"(\" + db.names.back().move_full() + \")\";\n        first = t1;\n    }\n    return first;\n}\n\ntemplate <class C>\nconst char*\nparse_binary_expression(const char* first, const char* last, const typename C::String& op, C& db)\n{\n    const char* t1 = parse_expression(first, last, db);\n    if (t1 != first)\n    {\n        const char* t2 = parse_expression(t1, last, db);\n        if (t2 != t1)\n        {\n            if (db.names.size() < 2)\n                return first;\n            auto op2 = db.names.back().move_full();\n            db.names.pop_back();\n            auto op1 = db.names.back().move_full();\n            auto& nm = db.names.back().first;\n            nm.clear();\n            if (op == \">\")\n                nm += '(';\n            nm += \"(\" + op1 + \") \" + op + \" (\" + op2 + \")\";\n            if (op == \">\")\n                nm += ')';\n            first = t2;\n        }\n        else\n            db.names.pop_back();\n    }\n    return first;\n}\n\n// <expression> ::= <unary operator-name> <expression>\n//              ::= <binary operator-name> <expression> <expression>\n//              ::= <ternary operator-name> <expression> <expression> <expression>\n//              ::= cl <expression>+ E                                   # call\n//              ::= cv <type> <expression>                               # conversion with one argument\n//              ::= cv <type> _ <expression>* E                          # conversion with a different number of arguments\n//              ::= [gs] nw <expression>* _ <type> E                     # new (expr-list) type\n//              ::= [gs] nw <expression>* _ <type> <initializer>         # new (expr-list) type (init)\n//              ::= [gs] na <expression>* _ <type> E                     # new[] (expr-list) type\n//              ::= [gs] na <expression>* _ <type> <initializer>         # new[] (expr-list) type (init)\n//              ::= [gs] dl <expression>                                 # delete expression\n//              ::= [gs] da <expression>                                 # delete[] expression\n//              ::= pp_ <expression>                                     # prefix ++\n//              ::= mm_ <expression>                                     # prefix --\n//              ::= ti <type>                                            # typeid (type)\n//              ::= te <expression>                                      # typeid (expression)\n//              ::= dc <type> <expression>                               # dynamic_cast<type> (expression)\n//              ::= sc <type> <expression>                               # static_cast<type> (expression)\n//              ::= cc <type> <expression>                               # const_cast<type> (expression)\n//              ::= rc <type> <expression>                               # reinterpret_cast<type> (expression)\n//              ::= st <type>                                            # sizeof (a type)\n//              ::= sz <expression>                                      # sizeof (an expression)\n//              ::= at <type>                                            # alignof (a type)\n//              ::= az <expression>                                      # alignof (an expression)\n//              ::= nx <expression>                                      # noexcept (expression)\n//              ::= <template-param>\n//              ::= <function-param>\n//              ::= dt <expression> <unresolved-name>                    # expr.name\n//              ::= pt <expression> <unresolved-name>                    # expr->name\n//              ::= ds <expression> <expression>                         # expr.*expr\n//              ::= sZ <template-param>                                  # size of a parameter pack\n//              ::= sZ <function-param>                                  # size of a function parameter pack\n//              ::= sp <expression>                                      # pack expansion\n//              ::= tw <expression>                                      # throw expression\n//              ::= tr                                                   # throw with no operand (rethrow)\n//              ::= <unresolved-name>                                    # f(p), N::f(p), ::f(p),\n//                                                                       # freestanding dependent name (e.g., T::x),\n//                                                                       # objectless nonstatic member reference\n//              ::= <expr-primary>\n\ntemplate <class C>\nconst char*\nparse_expression(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2)\n    {\n        const char* t = first;\n        bool parsed_gs = false;\n        if (last - first >= 4 && t[0] == 'g' && t[1] == 's')\n        {\n            t += 2;\n            parsed_gs = true;\n        }\n        switch (*t)\n        {\n        case 'L':\n            first = parse_expr_primary(first, last, db);\n            break;\n        case 'T':\n            first = parse_template_param(first, last, db);\n            break;\n        case 'f':\n            first = parse_function_param(first, last, db);\n            break;\n        case 'a':\n            switch (t[1])\n            {\n            case 'a':\n                t = parse_binary_expression(first+2, last, \"&&\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'd':\n                t = parse_prefix_expression(first+2, last, \"&\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'n':\n                t = parse_binary_expression(first+2, last, \"&\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'N':\n                t = parse_binary_expression(first+2, last, \"&=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'S':\n                t = parse_binary_expression(first+2, last, \"=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 't':\n                first = parse_alignof_type(first, last, db);\n                break;\n            case 'z':\n                first = parse_alignof_expr(first, last, db);\n                break;\n            }\n            break;\n        case 'c':\n            switch (t[1])\n            {\n            case 'c':\n                first = parse_const_cast_expr(first, last, db);\n                break;\n            case 'l':\n                first = parse_call_expr(first, last, db);\n                break;\n            case 'm':\n                t = parse_binary_expression(first+2, last, \",\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'o':\n                t = parse_prefix_expression(first+2, last, \"~\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'v':\n                first = parse_conversion_expr(first, last, db);\n                break;\n            }\n            break;\n        case 'd':\n            switch (t[1])\n            {\n            case 'a':\n                {\n                    const char* t1 = parse_expression(t+2, last, db);\n                    if (t1 != t+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first = (parsed_gs ? typename C::String(\"::\") : typename C::String()) +\n                                          \"delete[] \" + db.names.back().move_full();\n                        first = t1;\n                    }\n                }\n                break;\n            case 'c':\n                first = parse_dynamic_cast_expr(first, last, db);\n                break;\n            case 'e':\n                t = parse_prefix_expression(first+2, last, \"*\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'l':\n                {\n                    const char* t1 = parse_expression(t+2, last, db);\n                    if (t1 != t+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back().first = (parsed_gs ? typename C::String(\"::\") : typename C::String()) +\n                                          \"delete \" + db.names.back().move_full();\n                        first = t1;\n                    }\n                }\n                break;\n            case 'n':\n                return parse_unresolved_name(first, last, db);\n            case 's':\n                first = parse_dot_star_expr(first, last, db);\n                break;\n            case 't':\n                first = parse_dot_expr(first, last, db);\n                break;\n            case 'v':\n                t = parse_binary_expression(first+2, last, \"/\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'V':\n                t = parse_binary_expression(first+2, last, \"/=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'e':\n            switch (t[1])\n            {\n            case 'o':\n                t = parse_binary_expression(first+2, last, \"^\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'O':\n                t = parse_binary_expression(first+2, last, \"^=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'q':\n                t = parse_binary_expression(first+2, last, \"==\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'g':\n            switch (t[1])\n            {\n            case 'e':\n                t = parse_binary_expression(first+2, last, \">=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 't':\n                t = parse_binary_expression(first+2, last, \">\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'i':\n            if (t[1] == 'x')\n            {\n                const char* t1 = parse_expression(first+2, last, db);\n                if (t1 != first+2)\n                {\n                    const char* t2 = parse_expression(t1, last, db);\n                    if (t2 != t1)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto op2 = db.names.back().move_full();\n                        db.names.pop_back();\n                        auto op1 = db.names.back().move_full();\n                        db.names.back() = \"(\" + op1 + \")[\" + op2 + \"]\";\n                        first = t2;\n                    }\n                    else\n                        db.names.pop_back();\n                }\n            }\n            break;\n        case 'l':\n            switch (t[1])\n            {\n            case 'e':\n                t = parse_binary_expression(first+2, last, \"<=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 's':\n                t = parse_binary_expression(first+2, last, \"<<\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'S':\n                t = parse_binary_expression(first+2, last, \"<<=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 't':\n                t = parse_binary_expression(first+2, last, \"<\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'm':\n            switch (t[1])\n            {\n            case 'i':\n                t = parse_binary_expression(first+2, last, \"-\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'I':\n                t = parse_binary_expression(first+2, last, \"-=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'l':\n                t = parse_binary_expression(first+2, last, \"*\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'L':\n                t = parse_binary_expression(first+2, last, \"*=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'm':\n                if (first+2 != last && first[2] == '_')\n                {\n                    t = parse_prefix_expression(first+3, last, \"--\", db);\n                    if (t != first+3)\n                        first = t;\n                }\n                else\n                {\n                    const char* t1 = parse_expression(first+2, last, db);\n                    if (t1 != first+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back() = \"(\" + db.names.back().move_full() + \")--\";\n                        first = t1;\n                    }\n                }\n                break;\n            }\n            break;\n        case 'n':\n            switch (t[1])\n            {\n            case 'a':\n            case 'w':\n                first = parse_new_expr(first, last, db);\n                break;\n            case 'e':\n                t = parse_binary_expression(first+2, last, \"!=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'g':\n                t = parse_prefix_expression(first+2, last, \"-\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 't':\n                t = parse_prefix_expression(first+2, last, \"!\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'x':\n                t = parse_noexcept_expression(first+2, last, db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'o':\n            switch (t[1])\n            {\n            case 'n':\n                return parse_unresolved_name(first, last, db);\n            case 'o':\n                t = parse_binary_expression(first+2, last, \"||\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'r':\n                t = parse_binary_expression(first+2, last, \"|\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'R':\n                t = parse_binary_expression(first+2, last, \"|=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 'p':\n            switch (t[1])\n            {\n            case 'm':\n                t = parse_binary_expression(first+2, last, \"->*\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'l':\n                t = parse_binary_expression(first+2, last, \"+\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'L':\n                t = parse_binary_expression(first+2, last, \"+=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'p':\n                if (first+2 != last && first[2] == '_')\n                {\n                    t = parse_prefix_expression(first+3, last, \"++\", db);\n                    if (t != first+3)\n                        first = t;\n                }\n                else\n                {\n                    const char* t1 = parse_expression(first+2, last, db);\n                    if (t1 != first+2)\n                    {\n                        if (db.names.empty())\n                            return first;\n                        db.names.back() = \"(\" + db.names.back().move_full() + \")++\";\n                        first = t1;\n                    }\n                }\n                break;\n            case 's':\n                t = parse_prefix_expression(first+2, last, \"+\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 't':\n                first = parse_arrow_expr(first, last, db);\n                break;\n            }\n            break;\n        case 'q':\n            if (t[1] == 'u')\n            {\n                const char* t1 = parse_expression(first+2, last, db);\n                if (t1 != first+2)\n                {\n                    const char* t2 = parse_expression(t1, last, db);\n                    if (t2 != t1)\n                    {\n                        const char* t3 = parse_expression(t2, last, db);\n                        if (t3 != t2)\n                        {\n                            if (db.names.size() < 3)\n                                return first;\n                            auto op3 = db.names.back().move_full();\n                            db.names.pop_back();\n                            auto op2 = db.names.back().move_full();\n                            db.names.pop_back();\n                            auto op1 = db.names.back().move_full();\n                            db.names.back() = \"(\" + op1 + \") ? (\" + op2 + \") : (\" + op3 + \")\";\n                            first = t3;\n                        }\n                        else\n                        {\n                            db.names.pop_back();\n                            db.names.pop_back();\n                        }\n                    }\n                    else\n                        db.names.pop_back();\n                }\n            }\n            break;\n        case 'r':\n            switch (t[1])\n            {\n            case 'c':\n                first = parse_reinterpret_cast_expr(first, last, db);\n                break;\n            case 'm':\n                t = parse_binary_expression(first+2, last, \"%\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'M':\n                t = parse_binary_expression(first+2, last, \"%=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 's':\n                t = parse_binary_expression(first+2, last, \">>\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            case 'S':\n                t = parse_binary_expression(first+2, last, \">>=\", db);\n                if (t != first+2)\n                    first = t;\n                break;\n            }\n            break;\n        case 's':\n            switch (t[1])\n            {\n            case 'c':\n                first = parse_static_cast_expr(first, last, db);\n                break;\n            case 'p':\n                first = parse_pack_expansion(first, last, db);\n                break;\n            case 'r':\n                return parse_unresolved_name(first, last, db);\n            case 't':\n                first = parse_sizeof_type_expr(first, last, db);\n                break;\n            case 'z':\n                first = parse_sizeof_expr_expr(first, last, db);\n                break;\n            case 'Z':\n                if (last - t >= 3)\n                {\n                    switch (t[2])\n                    {\n                    case 'T':\n                        first = parse_sizeof_param_pack_expr(first, last, db);\n                        break;\n                    case 'f':\n                        first = parse_sizeof_function_param_pack_expr(first, last, db);\n                        break;\n                    }\n                }\n                break;\n            }\n            break;\n        case 't':\n            switch (t[1])\n            {\n            case 'e':\n            case 'i':\n                first = parse_typeid_expr(first, last, db);\n                break;\n            case 'r':\n                db.names.push_back(\"throw\");\n                first += 2;\n                break;\n            case 'w':\n                first = parse_throw_expr(first, last, db);\n                break;\n            }\n            break;\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            return parse_unresolved_name(first, last, db);\n        }\n    }\n    return first;\n}\n\n// <template-arg> ::= <type>                                             # type or template\n//                ::= X <expression> E                                   # expression\n//                ::= <expr-primary>                                     # simple expressions\n//                ::= J <template-arg>* E                                # argument pack\n//                ::= LZ <encoding> E                                    # extension\n\ntemplate <class C>\nconst char*\nparse_template_arg(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        const char* t;\n        switch (*first)\n        {\n        case 'X':\n            t = parse_expression(first+1, last, db);\n            if (t != first+1)\n            {\n                if (t != last && *t == 'E')\n                    first = t+1;\n            }\n            break;\n        case 'J':\n            t = first+1;\n            if (t == last)\n                return first;\n            while (*t != 'E')\n            {\n                const char* t1 = parse_template_arg(t, last, db);\n                if (t1 == t)\n                    return first;\n                t = t1;\n            }\n            first = t+1;\n            break;\n        case 'L':\n            // <expr-primary> or LZ <encoding> E\n            if (first+1 != last && first[1] == 'Z')\n            {\n                t = parse_encoding(first+2, last, db);\n                if (t != first+2 && t != last && *t == 'E')\n                    first = t+1;\n            }\n            else\n                first = parse_expr_primary(first, last, db);\n            break;\n        default:\n            // <type>\n            first = parse_type(first, last, db);\n            break;\n        }\n    }\n    return first;\n}\n\n// <template-args> ::= I <template-arg>* E\n//     extension, the abi says <template-arg>+\n\ntemplate <class C>\nconst char*\nparse_template_args(const char* first, const char* last, C& db)\n{\n    if (last - first >= 2 && *first == 'I')\n    {\n        if (db.tag_templates)\n            db.template_param.back().clear();\n        const char* t = first+1;\n        typename C::String args(\"<\");\n        while (*t != 'E')\n        {\n            if (db.tag_templates)\n                db.template_param.emplace_back(db.names.get_allocator());\n            size_t k0 = db.names.size();\n            const char* t1 = parse_template_arg(t, last, db);\n            size_t k1 = db.names.size();\n            if (db.tag_templates)\n                db.template_param.pop_back();\n            if (t1 == t || t1 == last)\n                return first;\n            if (db.tag_templates)\n            {\n                db.template_param.back().emplace_back(db.names.get_allocator());\n                for (size_t k = k0; k < k1; ++k)\n                    db.template_param.back().back().push_back(db.names[k]);\n            }\n            for (size_t k = k0; k < k1; ++k)\n            {\n                if (args.size() > 1)\n                    args += \", \";\n                args += db.names[k].move_full();\n            }\n            for (; k1 != k0; --k1)\n                db.names.pop_back();\n            t = t1;\n        }\n        first = t + 1;\n        if (args.back() != '>')\n            args += \">\";\n        else\n            args += \" >\";\n        db.names.push_back(std::move(args));\n        \n    }\n    return first;\n}\n\n// <nested-name> ::= N [<CV-qualifiers>] [<ref-qualifier>] <prefix> <unqualified-name> E\n//               ::= N [<CV-qualifiers>] [<ref-qualifier>] <template-prefix> <template-args> E\n// \n// <prefix> ::= <prefix> <unqualified-name>\n//          ::= <template-prefix> <template-args>\n//          ::= <template-param>\n//          ::= <decltype>\n//          ::= # empty\n//          ::= <substitution>\n//          ::= <prefix> <data-member-prefix>\n//  extension ::= L\n// \n// <template-prefix> ::= <prefix> <template unqualified-name>\n//                   ::= <template-param>\n//                   ::= <substitution>\n\ntemplate <class C>\nconst char*\nparse_nested_name(const char* first, const char* last, C& db,\n                  bool* ends_with_template_args)\n{\n    if (first != last && *first == 'N')\n    {\n        unsigned cv;\n        const char* t0 = parse_cv_qualifiers(first+1, last, cv);\n        if (t0 == last)\n            return first;\n        db.ref = 0;\n        if (*t0 == 'R')\n        {\n            db.ref = 1;\n            ++t0;\n        }\n        else if (*t0 == 'O')\n        {\n            db.ref = 2;\n            ++t0;\n        }\n        db.names.emplace_back();\n        if (last - t0 >= 2 && t0[0] == 'S' && t0[1] == 't')\n        {\n            t0 += 2;\n            db.names.back().first = \"std\";\n        }\n        if (t0 == last)\n        {\n            db.names.pop_back();\n            return first;\n        }\n        bool pop_subs = false;\n        bool component_ends_with_template_args = false;\n        while (*t0 != 'E')\n        {\n            component_ends_with_template_args = false;\n            const char* t1;\n            switch (*t0)\n            {\n            case 'S':\n                if (t0 + 1 != last && t0[1] == 't')\n                    goto do_parse_unqualified_name;\n                t1 = parse_substitution(t0, last, db);\n                if (t1 != t0 && t1 != last)\n                {\n                    auto name = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!db.names.back().first.empty())\n                    {\n                        db.names.back().first += \"::\" + name;\n                        db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    }\n                    else\n                        db.names.back().first = name;\n                    pop_subs = true;\n                    t0 = t1;\n                }\n                else\n                    return first;\n                break;\n            case 'T':\n                t1 = parse_template_param(t0, last, db);\n                if (t1 != t0 && t1 != last)\n                {\n                    auto name = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!db.names.back().first.empty())\n                        db.names.back().first += \"::\" + name;\n                    else\n                        db.names.back().first = name;\n                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    pop_subs = true;\n                    t0 = t1;\n                }\n                else\n                    return first;\n                break;\n            case 'D':\n                if (t0 + 1 != last && t0[1] != 't' && t0[1] != 'T')\n                    goto do_parse_unqualified_name;\n                t1 = parse_decltype(t0, last, db);\n                if (t1 != t0 && t1 != last)\n                {\n                    auto name = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!db.names.back().first.empty())\n                        db.names.back().first += \"::\" + name;\n                    else\n                        db.names.back().first = name;\n                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    pop_subs = true;\n                    t0 = t1;\n                }\n                else\n                    return first;\n                break;\n            case 'I':\n                t1 = parse_template_args(t0, last, db);\n                if (t1 != t0 && t1 != last)\n                {\n                    auto name = db.names.back().move_full();\n                    db.names.pop_back();\n                    db.names.back().first += name;\n                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    t0 = t1;\n                    component_ends_with_template_args = true;\n                }\n                else\n                    return first;\n                break;\n            case 'L':\n                if (++t0 == last)\n                    return first;\n                break;\n            default:\n            do_parse_unqualified_name:\n                t1 = parse_unqualified_name(t0, last, db);\n                if (t1 != t0 && t1 != last)\n                {\n                    auto name = db.names.back().move_full();\n                    db.names.pop_back();\n                    if (!db.names.back().first.empty())\n                        db.names.back().first += \"::\" + name;\n                    else\n                        db.names.back().first = name;\n                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    pop_subs = true;\n                    t0 = t1;\n                }\n                else\n                    return first;\n            }\n        }\n        first = t0 + 1;\n        db.cv = cv;\n        if (pop_subs && !db.subs.empty())\n            db.subs.pop_back();\n        if (ends_with_template_args)\n            *ends_with_template_args = component_ends_with_template_args;\n    }\n    return first;\n}\n\n// <discriminator> := _ <non-negative number>      # when number < 10\n//                 := __ <non-negative number> _   # when number >= 10\n//  extension      := decimal-digit+\n\nconst char*\nparse_discriminator(const char* first, const char* last)\n{\n    // parse but ignore discriminator\n    if (first != last)\n    {\n        if (*first == '_')\n        {\n            const char* t1 = first+1;\n            if (t1 != last)\n            {\n                if (std::isdigit(*t1))\n                    first = t1+1;\n                else if (*t1 == '_')\n                {\n                    for (++t1; t1 != last && std::isdigit(*t1); ++t1)\n                        ;\n                    if (t1 != last && *t1 == '_')\n                        first = t1 + 1;\n                }\n            }\n        }\n        else if (std::isdigit(*first))\n        {\n            const char* t1 = first+1;\n            for (; t1 != last && std::isdigit(*t1); ++t1)\n                ;\n            first = t1;\n        }\n    }\n    return first;\n}\n\n// <local-name> := Z <function encoding> E <entity name> [<discriminator>]\n//              := Z <function encoding> E s [<discriminator>]\n//              := Z <function encoding> Ed [ <parameter number> ] _ <entity name>\n\ntemplate <class C>\nconst char*\nparse_local_name(const char* first, const char* last, C& db,\n                 bool* ends_with_template_args)\n{\n    if (first != last && *first == 'Z')\n    {\n        const char* t = parse_encoding(first+1, last, db);\n        if (t != first+1 && t != last && *t == 'E' && ++t != last)\n        {\n            switch (*t)\n            {\n            case 's':\n                first = parse_discriminator(t+1, last);\n                if (db.names.empty())\n                    return first;\n                db.names.back().first.append(\"::string literal\");\n                break;\n            case 'd':\n                if (++t != last)\n                {\n                    const char* t1 = parse_number(t, last);\n                    if (t1 != last && *t1 == '_')\n                    {\n                        t = t1 + 1;\n                        t1 = parse_name(t, last, db,\n                                        ends_with_template_args);\n                        if (t1 != t)\n                        {\n                            if (db.names.size() < 2)\n                                return first;\n                            auto name = db.names.back().move_full();\n                            db.names.pop_back();\n                            db.names.back().first.append(\"::\");\n                            db.names.back().first.append(name);\n                            first = t1;\n                        }\n                        else\n                            db.names.pop_back();\n                    }\n                }\n                break;\n            default:\n                {\n                    const char* t1 = parse_name(t, last, db,\n                                                ends_with_template_args);\n                    if (t1 != t)\n                    {\n                        // parse but ignore discriminator\n                        first = parse_discriminator(t1, last);\n                        if (db.names.size() < 2)\n                            return first;\n                        auto name = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first.append(\"::\");\n                        db.names.back().first.append(name);\n                    }\n                    else\n                        db.names.pop_back();\n                }\n                break;\n            }\n        }\n    }\n    return first;\n}\n\n// <name> ::= <nested-name> // N\n//        ::= <local-name> # See Scope Encoding below  // Z\n//        ::= <unscoped-template-name> <template-args>\n//        ::= <unscoped-name>\n\n// <unscoped-template-name> ::= <unscoped-name>\n//                          ::= <substitution>\n\ntemplate <class C>\nconst char*\nparse_name(const char* first, const char* last, C& db,\n           bool* ends_with_template_args)\n{\n    if (last - first >= 2)\n    {\n        const char* t0 = first;\n        // extension: ignore L here\n        if (*t0 == 'L')\n            ++t0;\n        switch (*t0)\n        {\n        case 'N':\n          {\n            const char* t1 = parse_nested_name(t0, last, db,\n                                               ends_with_template_args);\n            if (t1 != t0)\n                first = t1;\n            break;\n          }\n        case 'Z':\n          {\n            const char* t1 = parse_local_name(t0, last, db,\n                                              ends_with_template_args);\n            if (t1 != t0)\n                first = t1;\n            break;\n          }\n        default:\n          {\n            const char* t1 = parse_unscoped_name(t0, last, db);\n            if (t1 != t0)\n            {\n                if (t1 != last && *t1 == 'I')  // <unscoped-template-name> <template-args>\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.subs.push_back(typename C::sub_type(1, db.names.back(), db.names.get_allocator()));\n                    t0 = t1;\n                    t1 = parse_template_args(t0, last, db);\n                    if (t1 != t0)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto tmp = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += tmp;\n                        first = t1;\n                        if (ends_with_template_args)\n                            *ends_with_template_args = true;\n                    }\n                }\n                else   // <unscoped-name>\n                    first = t1;\n            }\n            else\n            {   // try <substitution> <template-args>\n                t1 = parse_substitution(t0, last, db);\n                if (t1 != t0 && t1 != last && *t1 == 'I')\n                {\n                    t0 = t1;\n                    t1 = parse_template_args(t0, last, db);\n                    if (t1 != t0)\n                    {\n                        if (db.names.size() < 2)\n                            return first;\n                        auto tmp = db.names.back().move_full();\n                        db.names.pop_back();\n                        db.names.back().first += tmp;\n                        first = t1;\n                        if (ends_with_template_args)\n                            *ends_with_template_args = true;\n                    }\n                }\n            }\n            break;\n          }\n        }\n    }\n    return first;\n}\n\n// <call-offset> ::= h <nv-offset> _\n//               ::= v <v-offset> _\n// \n// <nv-offset> ::= <offset number>\n//               # non-virtual base override\n// \n// <v-offset>  ::= <offset number> _ <virtual offset number>\n//               # virtual base override, with vcall offset\n\nconst char*\nparse_call_offset(const char* first, const char* last)\n{\n    if (first != last)\n    {\n        switch (*first)\n        {\n        case 'h':\n            {\n            const char* t = parse_number(first + 1, last);\n            if (t != first + 1 && t != last && *t == '_')\n                first = t + 1;\n            }\n            break;\n        case 'v':\n            {\n            const char* t = parse_number(first + 1, last);\n            if (t != first + 1 && t != last && *t == '_')\n            {\n                const char* t2 = parse_number(++t, last);\n                if (t2 != t && t2 != last && *t2 == '_')\n                    first = t2 + 1;\n            }\n            }\n            break;\n        }\n    }\n    return first;\n}\n\n// <special-name> ::= TV <type>    # virtual table\n//                ::= TT <type>    # VTT structure (construction vtable index)\n//                ::= TI <type>    # typeinfo structure\n//                ::= TS <type>    # typeinfo name (null-terminated byte string)\n//                ::= Tc <call-offset> <call-offset> <base encoding>\n//                    # base is the nominal target function of thunk\n//                    # first call-offset is 'this' adjustment\n//                    # second call-offset is result adjustment\n//                ::= T <call-offset> <base encoding>\n//                    # base is the nominal target function of thunk\n//                ::= GV <object name> # Guard variable for one-time initialization\n//                                     # No <type>\n//      extension ::= TC <first type> <number> _ <second type> # construction vtable for second-in-first\n//      extension ::= GR <object name> # reference temporary for object\n\ntemplate <class C>\nconst char*\nparse_special_name(const char* first, const char* last, C& db)\n{\n    if (last - first > 2)\n    {\n        const char* t;\n        switch (*first)\n        {\n        case 'T':\n            switch (first[1])\n            {\n            case 'V':\n                // TV <type>    # virtual table\n                t = parse_type(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"vtable for \");\n                    first = t;\n                }\n                break;\n            case 'T':\n                // TT <type>    # VTT structure (construction vtable index)\n                t = parse_type(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"VTT for \");\n                    first = t;\n                }\n                break;\n            case 'I':\n                // TI <type>    # typeinfo structure\n                t = parse_type(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"typeinfo for \");\n                    first = t;\n                }\n                break;\n            case 'S':\n                // TS <type>    # typeinfo name (null-terminated byte string)\n                t = parse_type(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"typeinfo name for \");\n                    first = t;\n                }\n                break;\n            case 'c':\n                // Tc <call-offset> <call-offset> <base encoding>\n              {\n                const char* t0 = parse_call_offset(first+2, last);\n                if (t0 == first+2)\n                    break;\n                const char* t1 = parse_call_offset(t0, last);\n                if (t1 == t0)\n                    break;\n                t = parse_encoding(t1, last, db);\n                if (t != t1)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"covariant return thunk to \");\n                    first = t;\n                }\n              }\n                break;\n            case 'C':\n                // extension ::= TC <first type> <number> _ <second type> # construction vtable for second-in-first\n                t = parse_type(first+2, last, db);\n                if (t != first+2)\n                {\n                    const char* t0 = parse_number(t, last);\n                    if (t0 != t && t0 != last && *t0 == '_')\n                    {\n                        const char* t1 = parse_type(++t0, last, db);\n                        if (t1 != t0)\n                        {\n                            if (db.names.size() < 2)\n                                return first;\n                            auto left = db.names.back().move_full();\n                            db.names.pop_back();\n                            db.names.back().first = \"construction vtable for \" +\n                                                    std::move(left) + \"-in-\" +\n                                                    db.names.back().move_full();\n                            first = t1;\n                        }\n                    }\n                }\n                break;\n            default:\n                // T <call-offset> <base encoding>\n                {\n                const char* t0 = parse_call_offset(first+1, last);\n                if (t0 == first+1)\n                    break;\n                t = parse_encoding(t0, last, db);\n                if (t != t0)\n                {\n                    if (db.names.empty())\n                        return first;\n                    if (first[2] == 'v')\n                    {\n                        db.names.back().first.insert(0, \"virtual thunk to \");\n                        first = t;\n                    }\n                    else\n                    {\n                        db.names.back().first.insert(0, \"non-virtual thunk to \");\n                        first = t;\n                    }\n                }\n                }\n                break;\n            }\n            break;\n        case 'G':\n            switch (first[1])\n            {\n            case 'V':\n                // GV <object name> # Guard variable for one-time initialization\n                t = parse_name(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"guard variable for \");\n                    first = t;\n                }\n                break;\n            case 'R':\n                // extension ::= GR <object name> # reference temporary for object\n                t = parse_name(first+2, last, db);\n                if (t != first+2)\n                {\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first.insert(0, \"reference temporary for \");\n                    first = t;\n                }\n                break;\n            }\n            break;\n        }\n    }\n    return first;\n}\n\ntemplate <class T>\nclass save_value\n{\n    T& restore_;\n    T original_value_;\npublic:\n    save_value(T& restore)\n        : restore_(restore),\n          original_value_(restore)\n        {}\n\n    ~save_value()\n    {\n        restore_ = std::move(original_value_);\n    }\n\n    save_value(const save_value&) = delete;\n    save_value& operator=(const save_value&) = delete;\n};\n\n// <encoding> ::= <function name> <bare-function-type>\n//            ::= <data name>\n//            ::= <special-name>\n\ntemplate <class C>\nconst char*\nparse_encoding(const char* first, const char* last, C& db)\n{\n    if (first != last)\n    {\n        save_value<decltype(db.encoding_depth)> su(db.encoding_depth);\n        ++db.encoding_depth;\n        save_value<decltype(db.tag_templates)> sb(db.tag_templates);\n        if (db.encoding_depth > 1)\n            db.tag_templates = true;\n        switch (*first)\n        {\n        case 'G':\n        case 'T':\n            first = parse_special_name(first, last, db);\n            break;\n        default:\n          {\n            bool ends_with_template_args = false;\n            const char* t = parse_name(first, last, db,\n                                       &ends_with_template_args);\n            unsigned cv = db.cv;\n            unsigned ref = db.ref;\n            if (t != first)\n            {\n                if (t != last && *t != 'E' && *t != '.')\n                {\n                    save_value<bool> sb2(db.tag_templates);\n                    db.tag_templates = false;\n                    const char* t2;\n                    typename C::String ret2;\n                    if (db.names.empty())\n                        return first;\n                    const typename C::String& nm = db.names.back().first;\n                    if (nm.empty())\n                        return first;\n                    if (!db.parsed_ctor_dtor_cv && ends_with_template_args)\n                    {\n                        t2 = parse_type(t, last, db);\n                        if (t2 == t)\n                            return first;\n                        if (db.names.size() < 2)\n                            return first;\n                        auto ret1 = std::move(db.names.back().first);\n                        ret2 = std::move(db.names.back().second);\n                        if (ret2.empty())\n                            ret1 += ' ';\n                        db.names.pop_back();\n                        db.names.back().first.insert(0, ret1);\n                        t = t2;\n                    }\n                    db.names.back().first += '(';\n                    if (t != last && *t == 'v')\n                    {\n                        ++t;\n                    }\n                    else\n                    {\n                        bool first_arg = true;\n                        while (true)\n                        {\n                            size_t k0 = db.names.size();\n                            t2 = parse_type(t, last, db);\n                            size_t k1 = db.names.size();\n                            if (t2 == t)\n                                break;\n                            if (k1 > k0)\n                            {\n                                typename C::String tmp;\n                                for (size_t k = k0; k < k1; ++k)\n                                {\n                                    if (!tmp.empty())\n                                        tmp += \", \";\n                                    tmp += db.names[k].move_full();\n                                }\n                                for (size_t k = k0; k < k1; ++k)\n                                    db.names.pop_back();\n                                if (!tmp.empty())\n                                {\n                                    if (db.names.empty())\n                                        return first;\n                                    if (!first_arg)\n                                        db.names.back().first += \", \";\n                                    else\n                                        first_arg = false;\n                                    db.names.back().first += tmp;\n                                }\n                            }\n                            t = t2;\n                        }\n                    }\n                    if (db.names.empty())\n                        return first;\n                    db.names.back().first += ')';\n                    if (cv & 1)\n                        db.names.back().first.append(\" const\");\n                    if (cv & 2)\n                        db.names.back().first.append(\" volatile\");\n                    if (cv & 4)\n                        db.names.back().first.append(\" restrict\");\n                    if (ref == 1)\n                        db.names.back().first.append(\" &\");\n                    else if (ref == 2)\n                        db.names.back().first.append(\" &&\");\n                    db.names.back().first += ret2;\n                    first = t;\n                }\n                else\n                    first = t;\n            }\n            break;\n          }\n        }\n    }\n    return first;\n}\n\n// _block_invoke\n// _block_invoke<decimal-digit>+\n// _block_invoke_<decimal-digit>+\n\ntemplate <class C>\nconst char*\nparse_block_invoke(const char* first, const char* last, C& db)\n{\n    if (last - first >= 13)\n    {\n        const char test[] = \"_block_invoke\";\n        const char* t = first;\n        for (int i = 0; i < 13; ++i, ++t)\n        {\n            if (*t != test[i])\n                return first;\n        }\n        if (t != last)\n        {\n            if (*t == '_')\n            {\n                // must have at least 1 decimal digit\n                if (++t == last || !std::isdigit(*t))\n                    return first;\n                ++t;\n            }\n            // parse zero or more digits\n            while (t != last && isdigit(*t))\n                ++t;\n        }\n        if (db.names.empty())\n            return first;\n        db.names.back().first.insert(0, \"invocation function for block in \");\n        first = t;\n    }\n    return first;\n}\n\n// extension\n// <dot-suffix> := .<anything and everything>\n\ntemplate <class C>\nconst char*\nparse_dot_suffix(const char* first, const char* last, C& db)\n{\n    if (first != last && *first == '.')\n    {\n        if (db.names.empty())\n            return first;\n        db.names.back().first += \" (\" + typename C::String(first, last) + \")\";\n        first = last;\n    }\n    return first;\n}\n\n// <block-involcaton-function> ___Z<encoding>_block_invoke\n// <block-involcaton-function> ___Z<encoding>_block_invoke<decimal-digit>+\n// <block-involcaton-function> ___Z<encoding>_block_invoke_<decimal-digit>+\n// <mangled-name> ::= _Z<encoding>\n//                ::= <type>\n\ntemplate <class C>\nvoid\ndemangle(const char* first, const char* last, C& db, int& status)\n{\n    if (first >= last)\n    {\n        status = invalid_mangled_name;\n        return;\n    }\n    if (*first == '_')\n    {\n        if (last - first >= 4)\n        {\n            if (first[1] == 'Z')\n            {\n                const char* t = parse_encoding(first+2, last, db);\n                if (t != first+2 && t != last && *t == '.')\n                    t = parse_dot_suffix(t, last, db);\n                if (t != last)\n                    status = invalid_mangled_name;\n            }\n            else if (first[1] == '_' && first[2] == '_' && first[3] == 'Z')\n            {\n                const char* t = parse_encoding(first+4, last, db);\n                if (t != first+4 && t != last)\n                {\n                    const char* t1 = parse_block_invoke(t, last, db);\n                    if (t1 != last)\n                        status = invalid_mangled_name;\n                }\n                else\n                    status = invalid_mangled_name;\n            }\n            else\n                status = invalid_mangled_name;\n        }\n        else\n            status = invalid_mangled_name;\n    }\n    else\n    {\n        const char* t = parse_type(first, last, db);\n        if (t != last)\n            status = invalid_mangled_name;\n    }\n    if (status == success && db.names.empty())\n        status = invalid_mangled_name;\n}\n\ntemplate <std::size_t N>\nclass arena\n{\n    static const std::size_t alignment = 16;\n    alignas(alignment) char buf_[N];\n    char* ptr_;\n\n    std::size_t \n    align_up(std::size_t n) noexcept\n        {return n + (alignment-1) & ~(alignment-1);}\n\n    bool\n    pointer_in_buffer(char* p) noexcept\n        {return buf_ <= p && p <= buf_ + N;}\n\npublic:\n    arena() noexcept : ptr_(buf_) {}\n    ~arena() {ptr_ = nullptr;}\n    arena(const arena&) = delete;\n    arena& operator=(const arena&) = delete;\n\n    char* allocate(std::size_t n);\n    void deallocate(char* p, std::size_t n) noexcept;\n\n    static constexpr std::size_t size() {return N;}\n    std::size_t used() const {return static_cast<std::size_t>(ptr_ - buf_);}\n    void reset() {ptr_ = buf_;}\n};\n\ntemplate <std::size_t N>\nchar*\narena<N>::allocate(std::size_t n)\n{\n    n = align_up(n);\n    if (static_cast<std::size_t>(buf_ + N - ptr_) >= n)\n    {\n        char* r = ptr_;\n        ptr_ += n;\n        return r;\n    }\n    return static_cast<char*>(std::malloc(n));\n}\n\ntemplate <std::size_t N>\nvoid\narena<N>::deallocate(char* p, std::size_t n) noexcept\n{\n    if (pointer_in_buffer(p))\n    {\n        n = align_up(n);\n        if (p + n == ptr_)\n            ptr_ = p;\n    }\n    else\n        std::free(p);\n}\n\ntemplate <class T, std::size_t N>\nclass short_alloc\n{\n    arena<N>& a_;\npublic:\n    typedef T value_type;\n\npublic:\n    template <class _Up> struct rebind {typedef short_alloc<_Up, N> other;};\n\n    short_alloc(arena<N>& a) noexcept : a_(a) {}\n    template <class U>\n        short_alloc(const short_alloc<U, N>& a) noexcept\n            : a_(a.a_) {}\n    short_alloc(const short_alloc&) = default;\n    short_alloc& operator=(const short_alloc&) = delete;\n\n    T* allocate(std::size_t n)\n    {\n        return reinterpret_cast<T*>(a_.allocate(n*sizeof(T)));\n    }\n    void deallocate(T* p, std::size_t n) noexcept\n    {\n        a_.deallocate(reinterpret_cast<char*>(p), n*sizeof(T));\n    }\n\n    template <class T1, std::size_t N1, class U, std::size_t M>\n    friend\n    bool\n    operator==(const short_alloc<T1, N1>& x, const short_alloc<U, M>& y) noexcept;\n\n    template <class U, std::size_t M> friend class short_alloc;\n};\n\ntemplate <class T, std::size_t N, class U, std::size_t M>\ninline\nbool\noperator==(const short_alloc<T, N>& x, const short_alloc<U, M>& y) noexcept\n{\n    return N == M && &x.a_ == &y.a_;\n}\n\ntemplate <class T, std::size_t N, class U, std::size_t M>\ninline\nbool\noperator!=(const short_alloc<T, N>& x, const short_alloc<U, M>& y) noexcept\n{\n    return !(x == y);\n}\n\ntemplate <class T>\nclass malloc_alloc\n{\npublic:\n    typedef T value_type;\n\n    malloc_alloc() = default;\n    template <class U> malloc_alloc(const malloc_alloc<U>&) noexcept {}\n\n    T* allocate(std::size_t n)\n    {\n        return static_cast<T*>(std::malloc(n*sizeof(T)));\n    }\n    void deallocate(T* p, std::size_t) noexcept\n    {\n        std::free(p);\n    }\n};\n\ntemplate <class T, class U>\ninline\nbool\noperator==(const malloc_alloc<T>&, const malloc_alloc<U>&) noexcept\n{\n    return true;\n}\n\ntemplate <class T, class U>\ninline\nbool\noperator!=(const malloc_alloc<T>& x, const malloc_alloc<U>& y) noexcept\n{\n    return !(x == y);\n}\n\nconst size_t bs = 4 * 1024;\ntemplate <class T> using Alloc = short_alloc<T, bs>;\ntemplate <class T> using Vector = std::vector<T, Alloc<T>>;\n\ntemplate <class StrT>\nstruct string_pair\n{\n    StrT first;\n    StrT second;\n\n    string_pair() = default;\n    string_pair(StrT f) : first(std::move(f)) {}\n    string_pair(StrT f, StrT s)\n        : first(std::move(f)), second(std::move(s)) {}\n    template <size_t N>\n        string_pair(const char (&s)[N]) : first(s, N-1) {}\n\n    size_t size() const {return first.size() + second.size();}\n    StrT full() const {return first + second;}\n    StrT move_full() {return std::move(first) + std::move(second);}\n};\n\nstruct Db\n{\n    typedef std::basic_string<char, std::char_traits<char>,\n                              malloc_alloc<char>> String;\n    typedef Vector<string_pair<String>> sub_type;\n    typedef Vector<sub_type> template_param_type;\n    sub_type names;\n    template_param_type subs;\n    Vector<template_param_type> template_param;\n    unsigned cv;\n    unsigned ref;\n    unsigned encoding_depth;\n    bool parsed_ctor_dtor_cv;\n    bool tag_templates;\n    bool fix_forward_references;\n    bool try_to_parse_template_args;\n\n    template <size_t N>\n    Db(arena<N>& ar) :\n        names(ar),\n        subs(0, names, ar),\n        template_param(0, subs, ar)\n    {}\n};\n\n}  // unnamed namespace\n\nextern \"C\"\n__attribute__ ((__visibility__(\"default\")))\nchar*\n__cxa_demangle(const char* mangled_name, char* buf, size_t* n, int* status)\n{\n    if (mangled_name == nullptr || (buf != nullptr && n == nullptr))\n    {\n        if (status)\n            *status = invalid_args;\n        return nullptr;\n    }\n    size_t internal_size = buf != nullptr ? *n : 0;\n    arena<bs> a;\n    Db db(a);\n    db.cv = 0;\n    db.ref = 0;\n    db.encoding_depth = 0;\n    db.parsed_ctor_dtor_cv = false;\n    db.tag_templates = true;\n    db.template_param.emplace_back(a);\n    db.fix_forward_references = false;\n    db.try_to_parse_template_args = true;\n    int internal_status = success;\n    size_t len = std::strlen(mangled_name);\n    demangle(mangled_name, mangled_name + len, db,\n             internal_status);\n    if (internal_status == success && db.fix_forward_references &&\n           !db.template_param.empty() && !db.template_param.front().empty())\n    {\n        db.fix_forward_references = false;\n        db.tag_templates = false;\n        db.names.clear();\n        db.subs.clear();\n        demangle(mangled_name, mangled_name + len, db, internal_status);\n        if (db.fix_forward_references)\n            internal_status = invalid_mangled_name;\n    }\n    if (internal_status == success)\n    {\n        size_t sz = db.names.back().size() + 1;\n        if (sz > internal_size)\n        {\n            char* newbuf = static_cast<char*>(std::realloc(buf, sz));\n            if (newbuf == nullptr)\n            {\n                internal_status = memory_alloc_failure;\n                buf = nullptr;\n            }\n            else\n            {\n                buf = newbuf;\n                if (n != nullptr)\n                    *n = sz;\n            }\n        }\n        if (buf != nullptr)\n        {\n            db.names.back().first += db.names.back().second;\n            std::memcpy(buf, db.names.back().first.data(), sz-1);\n            buf[sz-1] = char(0);\n        }\n    }\n    else\n        buf = nullptr;\n    if (status)\n        *status = internal_status;\n    return buf;\n}\n\n}  // __cxxabiv1\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_exception.cpp",
    "content": "//===------------------------- cxa_exception.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the \"Exception Handling APIs\"\n//  http://mentorembedded.github.io/cxx-abi/abi-eh.html\n//  \n//===----------------------------------------------------------------------===//\n\n#include \"config.h\"\n#include \"cxxabi.h\"\n\n#include <exception>        // for std::terminate\n#include <cstdlib>          // for malloc, free\n#include <cstring>          // for memset\n#if !LIBCXXABI_HAS_NO_THREADS\n#  include <pthread.h>      // for fallback_malloc.ipp's mutexes\n#endif\n#include \"cxa_exception.hpp\"\n#include \"cxa_handlers.hpp\"\n\n// +---------------------------+-----------------------------+---------------+\n// | __cxa_exception           | _Unwind_Exception CLNGC++\\0 | thrown object |\n// +---------------------------+-----------------------------+---------------+\n//                                                           ^\n//                                                           |\n//   +-------------------------------------------------------+\n//   |\n// +---------------------------+-----------------------------+\n// | __cxa_dependent_exception | _Unwind_Exception CLNGC++\\1 |\n// +---------------------------+-----------------------------+\n\nnamespace __cxxabiv1 {\n\n#pragma GCC visibility push(default)\n\n//  Utility routines\nstatic\ninline\n__cxa_exception*\ncxa_exception_from_thrown_object(void* thrown_object)\n{\n    return static_cast<__cxa_exception*>(thrown_object) - 1;\n}\n\n// Note:  This is never called when exception_header is masquerading as a\n//        __cxa_dependent_exception.\nstatic\ninline\nvoid*\nthrown_object_from_cxa_exception(__cxa_exception* exception_header)\n{\n    return static_cast<void*>(exception_header + 1);\n}\n\n//  Get the exception object from the unwind pointer.\n//  Relies on the structure layout, where the unwind pointer is right in\n//  front of the user's exception object\nstatic\ninline\n__cxa_exception*\ncxa_exception_from_exception_unwind_exception(_Unwind_Exception* unwind_exception)\n{\n    return cxa_exception_from_thrown_object(unwind_exception + 1 );\n}\n\nstatic\ninline\nsize_t\ncxa_exception_size_from_exception_thrown_size(size_t size)\n{\n    return size + sizeof (__cxa_exception);\n}\n\nstatic void setExceptionClass(_Unwind_Exception* unwind_exception) {\n    unwind_exception->exception_class = kOurExceptionClass;\n}\n\nstatic void setDependentExceptionClass(_Unwind_Exception* unwind_exception) {\n    unwind_exception->exception_class = kOurDependentExceptionClass;\n}\n\n//  Is it one of ours?\nstatic bool isOurExceptionClass(const _Unwind_Exception* unwind_exception) {\n    return (unwind_exception->exception_class & get_vendor_and_language) == \n           (kOurExceptionClass                & get_vendor_and_language);\n}\n\nstatic bool isDependentException(_Unwind_Exception* unwind_exception) {\n    return (unwind_exception->exception_class & 0xFF) == 0x01;\n}\n\n//  This does not need to be atomic\nstatic inline int incrementHandlerCount(__cxa_exception *exception) {\n    return ++exception->handlerCount;\n}\n\n//  This does not need to be atomic\nstatic inline  int decrementHandlerCount(__cxa_exception *exception) {\n    return --exception->handlerCount;\n}\n\n#include \"fallback_malloc.ipp\"\n\n//  Allocate some memory from _somewhere_\nstatic void *do_malloc(size_t size) {\n    void *ptr = std::malloc(size);\n    if (NULL == ptr) // if malloc fails, fall back to emergency stash\n        ptr = fallback_malloc(size);\n    return ptr;\n}\n\nstatic void do_free(void *ptr) {\n    is_fallback_ptr(ptr) ? fallback_free(ptr) : std::free(ptr);\n}\n\n/*\n    If reason isn't _URC_FOREIGN_EXCEPTION_CAUGHT, then the terminateHandler\n    stored in exc is called.  Otherwise the exceptionDestructor stored in \n    exc is called, and then the memory for the exception is deallocated.\n\n    This is never called for a __cxa_dependent_exception.\n*/\nstatic\nvoid\nexception_cleanup_func(_Unwind_Reason_Code reason, _Unwind_Exception* unwind_exception)\n{\n    __cxa_exception* exception_header = cxa_exception_from_exception_unwind_exception(unwind_exception);\n    if (_URC_FOREIGN_EXCEPTION_CAUGHT != reason)\n        std::__terminate(exception_header->terminateHandler);\n    // Just in case there exists a dependent exception that is pointing to this,\n    //    check the reference count and only destroy this if that count goes to zero.\n    __cxa_decrement_exception_refcount(unwind_exception + 1);\n}\n\nstatic LIBCXXABI_NORETURN void failed_throw(__cxa_exception* exception_header) {\n//  Section 2.5.3 says:\n//      * For purposes of this ABI, several things are considered exception handlers:\n//      ** A terminate() call due to a throw.\n//  and\n//      * Upon entry, Following initialization of the catch parameter, \n//          a handler must call:\n//      * void *__cxa_begin_catch(void *exceptionObject );\n    (void) __cxa_begin_catch(&exception_header->unwindHeader);\n    std::__terminate(exception_header->terminateHandler);\n}\n\nextern \"C\" {\n\n//  Allocate a __cxa_exception object, and zero-fill it.\n//  Reserve \"thrown_size\" bytes on the end for the user's exception\n//  object. Zero-fill the object. If memory can't be allocated, call\n//  std::terminate. Return a pointer to the memory to be used for the\n//  user's exception object.\nvoid * __cxa_allocate_exception (size_t thrown_size) throw() {\n    size_t actual_size = cxa_exception_size_from_exception_thrown_size(thrown_size);\n    __cxa_exception* exception_header = static_cast<__cxa_exception*>(do_malloc(actual_size));\n    if (NULL == exception_header)\n        std::terminate();\n    std::memset(exception_header, 0, actual_size);\n    return thrown_object_from_cxa_exception(exception_header);\n}\n\n\n//  Free a __cxa_exception object allocated with __cxa_allocate_exception.\nvoid __cxa_free_exception (void * thrown_object) throw() {\n    do_free(cxa_exception_from_thrown_object(thrown_object));\n}\n\n\n//  This function shall allocate a __cxa_dependent_exception and\n//  return a pointer to it. (Really to the object, not past its' end).\n//  Otherwise, it will work like __cxa_allocate_exception.\nvoid * __cxa_allocate_dependent_exception () {\n    size_t actual_size = sizeof(__cxa_dependent_exception);\n    void *ptr = do_malloc(actual_size);\n    if (NULL == ptr)\n        std::terminate();\n    std::memset(ptr, 0, actual_size);\n    return ptr;\n}\n\n\n//  This function shall free a dependent_exception.\n//  It does not affect the reference count of the primary exception.\nvoid __cxa_free_dependent_exception (void * dependent_exception) {\n    do_free(dependent_exception);\n}\n\n\n// 2.4.3 Throwing the Exception Object\n/*\nAfter constructing the exception object with the throw argument value,\nthe generated code calls the __cxa_throw runtime library routine. This\nroutine never returns.\n\nThe __cxa_throw routine will do the following:\n\n* Obtain the __cxa_exception header from the thrown exception object address,\nwhich can be computed as follows: \n __cxa_exception *header = ((__cxa_exception *) thrown_exception - 1); \n* Save the current unexpected_handler and terminate_handler in the __cxa_exception header.\n* Save the tinfo and dest arguments in the __cxa_exception header. \n* Set the exception_class field in the unwind header. This is a 64-bit value\nrepresenting the ASCII string \"XXXXC++\\0\", where \"XXXX\" is a\nvendor-dependent string. That is, for implementations conforming to this\nABI, the low-order 4 bytes of this 64-bit value will be \"C++\\0\".\n* Increment the uncaught_exception flag. \n* Call _Unwind_RaiseException in the system unwind library, Its argument is the\npointer to the thrown exception, which __cxa_throw itself received as an argument.\n__Unwind_RaiseException begins the process of stack unwinding, described\nin Section 2.5. In special cases, such as an inability to find a\nhandler, _Unwind_RaiseException may return. In that case, __cxa_throw\nwill call terminate, assuming that there was no handler for the\nexception.\n*/\nLIBCXXABI_NORETURN\nvoid \n__cxa_throw(void* thrown_object, std::type_info* tinfo, void (*dest)(void*))\n{\n    __cxa_eh_globals *globals = __cxa_get_globals();\n    __cxa_exception* exception_header = cxa_exception_from_thrown_object(thrown_object);\n\n    exception_header->unexpectedHandler = std::get_unexpected();\n    exception_header->terminateHandler  = std::get_terminate();\n    exception_header->exceptionType = tinfo;\n    exception_header->exceptionDestructor = dest;\n    setExceptionClass(&exception_header->unwindHeader);\n    exception_header->referenceCount = 1;  // This is a newly allocated exception, no need for thread safety.\n    globals->uncaughtExceptions += 1;   // Not atomically, since globals are thread-local\n\n    exception_header->unwindHeader.exception_cleanup = exception_cleanup_func;\n#ifdef __USING_SJLJ_EXCEPTIONS__\n    _Unwind_SjLj_RaiseException(&exception_header->unwindHeader);\n#else\n    _Unwind_RaiseException(&exception_header->unwindHeader);\n#endif\n    //  This only happens when there is no handler, or some unexpected unwinding\n    //     error happens.\n    failed_throw(exception_header);\n}\n\n\n// 2.5.3 Exception Handlers\n/*\nThe adjusted pointer is computed by the personality routine during phase 1\n  and saved in the exception header (either __cxa_exception or\n  __cxa_dependent_exception).\n\n  Requires:  exception is native\n*/\nvoid*\n__cxa_get_exception_ptr(void* unwind_exception) throw()\n{\n#if LIBCXXABI_ARM_EHABI\n    return reinterpret_cast<void*>(\n        static_cast<_Unwind_Control_Block*>(unwind_exception)->barrier_cache.bitpattern[0]);\n#else\n    return cxa_exception_from_exception_unwind_exception(\n        static_cast<_Unwind_Exception*>(unwind_exception))->adjustedPtr;\n#endif\n}\n\n#if LIBCXXABI_ARM_EHABI\n/*\nThe routine to be called before the cleanup.  This will save __cxa_exception in\n__cxa_eh_globals, so that __cxa_end_cleanup() can recover later.\n*/\nbool\n__cxa_begin_cleanup(void* unwind_arg) throw ()\n{\n    _Unwind_Exception* unwind_exception = static_cast<_Unwind_Exception*>(unwind_arg);\n    __cxa_eh_globals* globals = __cxa_get_globals();\n    __cxa_exception* exception_header =\n        cxa_exception_from_exception_unwind_exception(unwind_exception);\n\n    if (isOurExceptionClass(unwind_exception))\n    {\n        if (0 == exception_header->propagationCount)\n        {\n            exception_header->nextPropagatingException = globals->propagatingExceptions;\n            globals->propagatingExceptions = exception_header;\n        }\n        ++exception_header->propagationCount;\n    }\n    else\n    {\n        // If the propagatingExceptions stack is not empty, since we can't\n        // chain the foreign exception, terminate it.\n        if (NULL != globals->propagatingExceptions)\n            std::terminate();\n        globals->propagatingExceptions = exception_header;\n    }\n    return true;\n}\n\n/*\nThe routine to be called after the cleanup has been performed.  It will get the\npropagating __cxa_exception from __cxa_eh_globals, and continue the stack\nunwinding with _Unwind_Resume.\n\nAccording to ARM EHABI 8.4.1, __cxa_end_cleanup() should not clobber any\nregister, thus we have to write this function in assembly so that we can save\n{r1, r2, r3}.  We don't have to save r0 because it is the return value and the\nfirst argument to _Unwind_Resume().  In addition, we are saving r4 in order to\nalign the stack to 16 bytes, even though it is a callee-save register.\n*/\n__attribute__((used)) static _Unwind_Exception *\n__cxa_end_cleanup_impl()\n{\n    __cxa_eh_globals* globals = __cxa_get_globals();\n    __cxa_exception* exception_header = globals->propagatingExceptions;\n    if (NULL == exception_header)\n    {\n        // It seems that __cxa_begin_cleanup() is not called properly.\n        // We have no choice but terminate the program now.\n        std::terminate();\n    }\n\n    if (isOurExceptionClass(&exception_header->unwindHeader))\n    {\n        --exception_header->propagationCount;\n        if (0 == exception_header->propagationCount)\n        {\n            globals->propagatingExceptions = exception_header->nextPropagatingException;\n            exception_header->nextPropagatingException = NULL;\n        }\n    }\n    else\n    {\n        globals->propagatingExceptions = NULL;\n    }\n    return &exception_header->unwindHeader;\n}\n\nasm (\n    \"\t.pushsection\t.text.__cxa_end_cleanup\\n\"\n    \"\t.globl\t__cxa_end_cleanup\\n\"\n    \"\t.type\t__cxa_end_cleanup,%function\\n\"\n    \"__cxa_end_cleanup:\\n\"\n    \"\tpush\t{r1, r2, r3, r4}\\n\"\n    \"\tbl\t__cxa_end_cleanup_impl\\n\"\n    \"\tpop\t{r1, r2, r3, r4}\\n\"\n    \"\tbl\t_Unwind_Resume\\n\"\n    \"\tbl\tabort\\n\"\n    \"\t.popsection\"\n);\n#endif  // LIBCXXABI_ARM_EHABI\n    \n/*\nThis routine can catch foreign or native exceptions.  If native, the exception\ncan be a primary or dependent variety.  This routine may remain blissfully\nignorant of whether the native exception is primary or dependent.\n\nIf the exception is native:\n* Increment's the exception's handler count.\n* Push the exception on the stack of currently-caught exceptions if it is not \n  already there (from a rethrow).\n* Decrements the uncaught_exception count.\n* Returns the adjusted pointer to the exception object, which is stored in\n  the __cxa_exception by the personality routine.\n\nIf the exception is foreign, this means it did not originate from one of throw\nroutines.  The foreign exception does not necessarily have a __cxa_exception\nheader.  However we can catch it here with a catch (...), or with a call\nto terminate or unexpected during unwinding.\n* Do not try to increment the exception's handler count, we don't know where\n  it is.\n* Push the exception on the stack of currently-caught exceptions only if the\n  stack is empty.  The foreign exception has no way to link to the current\n  top of stack.  If the stack is not empty, call terminate.  Even with an\n  empty stack, this is hacked in by pushing a pointer to an imaginary\n  __cxa_exception block in front of the foreign exception.  It would be better\n  if the __cxa_eh_globals structure had a stack of _Unwind_Exception, but it\n  doesn't.  It has a stack of __cxa_exception (which has a next* in it).\n* Do not decrement the uncaught_exception count because we didn't increment it\n  in __cxa_throw (or one of our rethrow functions).\n* If we haven't terminated, assume the exception object is just past the \n  _Unwind_Exception and return a pointer to that.\n*/\nvoid*\n__cxa_begin_catch(void* unwind_arg) throw()\n{\n    _Unwind_Exception* unwind_exception = static_cast<_Unwind_Exception*>(unwind_arg);\n    bool native_exception = isOurExceptionClass(unwind_exception);\n    __cxa_eh_globals* globals = __cxa_get_globals();\n    // exception_header is a hackish offset from a foreign exception, but it\n    //   works as long as we're careful not to try to access any __cxa_exception\n    //   parts.\n    __cxa_exception* exception_header =\n            cxa_exception_from_exception_unwind_exception\n            (\n                static_cast<_Unwind_Exception*>(unwind_exception)\n            );\n    if (native_exception)\n    {\n        // Increment the handler count, removing the flag about being rethrown\n        exception_header->handlerCount = exception_header->handlerCount < 0 ?\n            -exception_header->handlerCount + 1 : exception_header->handlerCount + 1;\n        //  place the exception on the top of the stack if it's not already\n        //    there by a previous rethrow\n        if (exception_header != globals->caughtExceptions)\n        {\n            exception_header->nextException = globals->caughtExceptions;\n            globals->caughtExceptions = exception_header;\n        }\n        globals->uncaughtExceptions -= 1;   // Not atomically, since globals are thread-local\n#if LIBCXXABI_ARM_EHABI\n        return reinterpret_cast<void*>(exception_header->unwindHeader.barrier_cache.bitpattern[0]);\n#else\n        return exception_header->adjustedPtr;\n#endif\n    }\n    // Else this is a foreign exception\n    // If the caughtExceptions stack is not empty, terminate\n    if (globals->caughtExceptions != 0)\n        std::terminate();\n    // Push the foreign exception on to the stack\n    globals->caughtExceptions = exception_header;\n    return unwind_exception + 1;\n}\n\n\n/*\nUpon exit for any reason, a handler must call:\n    void __cxa_end_catch ();\n\nThis routine can be called for either a native or foreign exception.\nFor a native exception:\n* Locates the most recently caught exception and decrements its handler count.\n* Removes the exception from the caught exception stack, if the handler count goes to zero.\n* If the handler count goes down to zero, and the exception was not re-thrown\n  by throw, it locates the primary exception (which may be the same as the one\n  it's handling) and decrements its reference count. If that reference count\n  goes to zero, the function destroys the exception. In any case, if the current\n  exception is a dependent exception, it destroys that.\n\nFor a foreign exception:\n* If it has been rethrown, there is nothing to do.\n* Otherwise delete the exception and pop the catch stack to empty.\n*/\nvoid __cxa_end_catch()\n{\n  static_assert(sizeof(__cxa_exception) == sizeof(__cxa_dependent_exception),\n                \"sizeof(__cxa_exception) must be equal to \"\n                \"sizeof(__cxa_dependent_exception)\");\n    static_assert(offsetof(__cxa_exception, referenceCount) ==\n                      offsetof(__cxa_dependent_exception, primaryException),\n                  \"the layout of __cxa_exception must match the layout of \"\n                  \"__cxa_dependent_exception\");\n    static_assert(offsetof(__cxa_exception, handlerCount) ==\n                      offsetof(__cxa_dependent_exception, handlerCount),\n                  \"the layout of __cxa_exception must match the layout of \"\n                  \"__cxa_dependent_exception\");\n    __cxa_eh_globals* globals = __cxa_get_globals_fast(); // __cxa_get_globals called in __cxa_begin_catch\n    __cxa_exception* exception_header = globals->caughtExceptions;\n    // If we've rethrown a foreign exception, then globals->caughtExceptions\n    //    will have been made an empty stack by __cxa_rethrow() and there is\n    //    nothing more to be done.  Do nothing!\n    if (NULL != exception_header)\n    {\n        bool native_exception = isOurExceptionClass(&exception_header->unwindHeader);\n        if (native_exception)\n        {\n            // This is a native exception\n            if (exception_header->handlerCount < 0)\n            {\n                //  The exception has been rethrown by __cxa_rethrow, so don't delete it\n                if (0 == incrementHandlerCount(exception_header))\n                {\n                    //  Remove from the chain of uncaught exceptions\n                    globals->caughtExceptions = exception_header->nextException;\n                    // but don't destroy\n                }\n                // Keep handlerCount negative in case there are nested catch's\n                //   that need to be told that this exception is rethrown.  Don't\n                //   erase this rethrow flag until the exception is recaught.\n            }\n            else\n            {\n                // The native exception has not been rethrown\n                if (0 == decrementHandlerCount(exception_header))\n                {\n                    //  Remove from the chain of uncaught exceptions\n                    globals->caughtExceptions = exception_header->nextException;\n                    // Destroy this exception, being careful to distinguish\n                    //    between dependent and primary exceptions\n                    if (isDependentException(&exception_header->unwindHeader))\n                    {\n                        // Reset exception_header to primaryException and deallocate the dependent exception\n                        __cxa_dependent_exception* dep_exception_header =\n                            reinterpret_cast<__cxa_dependent_exception*>(exception_header);\n                        exception_header =\n                            cxa_exception_from_thrown_object(dep_exception_header->primaryException);\n                        __cxa_free_dependent_exception(dep_exception_header);\n                    }\n                    // Destroy the primary exception only if its referenceCount goes to 0\n                    //    (this decrement must be atomic)\n                    __cxa_decrement_exception_refcount(thrown_object_from_cxa_exception(exception_header));\n                }\n            }\n        }       \n        else\n        {\n            // The foreign exception has not been rethrown.  Pop the stack\n            //    and delete it.  If there are nested catch's and they try\n            //    to touch a foreign exception in any way, that is undefined\n            //     behavior.  They likely can't since the only way to catch\n            //     a foreign exception is with catch (...)!\n            _Unwind_DeleteException(&globals->caughtExceptions->unwindHeader);\n            globals->caughtExceptions = 0;\n        }\n    }\n}\n\n// Note:  exception_header may be masquerading as a __cxa_dependent_exception\n//        and that's ok.  exceptionType is there too.\n//        However watch out for foreign exceptions.  Return null for them.\nstd::type_info * __cxa_current_exception_type() {\n//  get the current exception\n    __cxa_eh_globals *globals = __cxa_get_globals_fast();\n    if (NULL == globals)\n        return NULL;     //  If there have never been any exceptions, there are none now.\n    __cxa_exception *exception_header = globals->caughtExceptions;\n    if (NULL == exception_header)\n        return NULL;        //  No current exception\n    if (!isOurExceptionClass(&exception_header->unwindHeader))\n        return NULL;\n    return exception_header->exceptionType;\n}\n\n// 2.5.4 Rethrowing Exceptions\n/*  This routine can rethrow native or foreign exceptions.\nIf the exception is native:\n* marks the exception object on top of the caughtExceptions stack \n  (in an implementation-defined way) as being rethrown. \n* If the caughtExceptions stack is empty, it calls terminate() \n  (see [C++FDIS] [except.throw], 15.1.8). \n* It then calls _Unwind_RaiseException which should not return\n   (terminate if it does).\n  Note:  exception_header may be masquerading as a __cxa_dependent_exception\n         and that's ok.\n*/\nLIBCXXABI_NORETURN\nvoid\n__cxa_rethrow()\n{\n    __cxa_eh_globals* globals = __cxa_get_globals();\n    __cxa_exception* exception_header = globals->caughtExceptions;\n    if (NULL == exception_header)\n        std::terminate();      // throw; called outside of a exception handler\n    bool native_exception = isOurExceptionClass(&exception_header->unwindHeader);\n    if (native_exception)\n    {\n        //  Mark the exception as being rethrown (reverse the effects of __cxa_begin_catch)\n        exception_header->handlerCount = -exception_header->handlerCount;\n        globals->uncaughtExceptions += 1;\n        //  __cxa_end_catch will remove this exception from the caughtExceptions stack if necessary\n    }\n    else  // this is a foreign exception\n    {\n        // The only way to communicate to __cxa_end_catch that we've rethrown\n        //   a foreign exception, so don't delete us, is to pop the stack here\n        //   which must be empty afterwards.  Then __cxa_end_catch will do\n        //   nothing\n        globals->caughtExceptions = 0;\n    }\n#ifdef __USING_SJLJ_EXCEPTIONS__\n    _Unwind_SjLj_RaiseException(&exception_header->unwindHeader);\n#else\n    _Unwind_RaiseException(&exception_header->unwindHeader);\n#endif\n\n    //  If we get here, some kind of unwinding error has occurred.\n    //  There is some weird code generation bug happening with \n    //     Apple clang version 4.0 (tags/Apple/clang-418.0.2) (based on LLVM 3.1svn)\n    //     If we call failed_throw here.  Turns up with -O2 or higher, and -Os.\n    __cxa_begin_catch(&exception_header->unwindHeader);\n    if (native_exception)\n        std::__terminate(exception_header->terminateHandler);\n    // Foreign exception: can't get exception_header->terminateHandler\n    std::terminate();\n}\n\n/*\n    If thrown_object is not null, atomically increment the referenceCount field\n    of the __cxa_exception header associated with the thrown object referred to\n    by thrown_object.\n\n    Requires:  If thrown_object is not NULL, it is a native exception.\n*/\nvoid\n__cxa_increment_exception_refcount(void* thrown_object) throw()\n{\n    if (thrown_object != NULL )\n    {\n        __cxa_exception* exception_header = cxa_exception_from_thrown_object(thrown_object);\n        __sync_add_and_fetch(&exception_header->referenceCount, 1);\n    }\n}\n\n/*\n    If thrown_object is not null, atomically decrement the referenceCount field\n    of the __cxa_exception header associated with the thrown object referred to\n    by thrown_object.  If the referenceCount drops to zero, destroy and\n    deallocate the exception.\n\n    Requires:  If thrown_object is not NULL, it is a native exception.\n*/\nvoid\n__cxa_decrement_exception_refcount(void* thrown_object) throw()\n{\n    if (thrown_object != NULL )\n    {\n        __cxa_exception* exception_header = cxa_exception_from_thrown_object(thrown_object);\n        if (__sync_sub_and_fetch(&exception_header->referenceCount, size_t(1)) == 0)\n        {\n            if (NULL != exception_header->exceptionDestructor)\n                exception_header->exceptionDestructor(thrown_object);\n            __cxa_free_exception(thrown_object);\n        }\n    }\n}\n\n/*\n    Returns a pointer to the thrown object (if any) at the top of the\n    caughtExceptions stack.  Atomically increment the exception's referenceCount.\n    If there is no such thrown object or if the thrown object is foreign,\n    returns null.\n\n    We can use __cxa_get_globals_fast here to get the globals because if there have\n    been no exceptions thrown, ever, on this thread, we can return NULL without \n    the need to allocate the exception-handling globals.\n*/\nvoid*\n__cxa_current_primary_exception() throw()\n{\n//  get the current exception\n    __cxa_eh_globals* globals = __cxa_get_globals_fast();\n    if (NULL == globals)\n        return NULL;        //  If there are no globals, there is no exception\n    __cxa_exception* exception_header = globals->caughtExceptions;\n    if (NULL == exception_header)\n        return NULL;        //  No current exception\n    if (!isOurExceptionClass(&exception_header->unwindHeader))\n        return NULL;        // Can't capture a foreign exception (no way to refcount it)\n    if (isDependentException(&exception_header->unwindHeader)) {\n        __cxa_dependent_exception* dep_exception_header =\n            reinterpret_cast<__cxa_dependent_exception*>(exception_header);\n        exception_header = cxa_exception_from_thrown_object(dep_exception_header->primaryException);\n    }\n    void* thrown_object = thrown_object_from_cxa_exception(exception_header);\n    __cxa_increment_exception_refcount(thrown_object);\n    return thrown_object;\n}\n\n/*\n    If reason isn't _URC_FOREIGN_EXCEPTION_CAUGHT, then the terminateHandler\n    stored in exc is called.  Otherwise the referenceCount stored in the\n    primary exception is decremented, destroying the primary if necessary.\n    Finally the dependent exception is destroyed.\n*/\nstatic\nvoid\ndependent_exception_cleanup(_Unwind_Reason_Code reason, _Unwind_Exception* unwind_exception)\n{\n    __cxa_dependent_exception* dep_exception_header = \n                      reinterpret_cast<__cxa_dependent_exception*>(unwind_exception + 1) - 1;\n    if (_URC_FOREIGN_EXCEPTION_CAUGHT != reason)\n        std::__terminate(dep_exception_header->terminateHandler);\n    __cxa_decrement_exception_refcount(dep_exception_header->primaryException);\n    __cxa_free_dependent_exception(dep_exception_header);\n}\n\n/*\n    If thrown_object is not null, allocate, initialize and throw a dependent\n    exception.\n*/\nvoid\n__cxa_rethrow_primary_exception(void* thrown_object)\n{\n    if ( thrown_object != NULL )\n    {\n        // thrown_object guaranteed to be native because\n        //   __cxa_current_primary_exception returns NULL for foreign exceptions\n        __cxa_exception* exception_header = cxa_exception_from_thrown_object(thrown_object);\n        __cxa_dependent_exception* dep_exception_header =\n            static_cast<__cxa_dependent_exception*>(__cxa_allocate_dependent_exception());\n        dep_exception_header->primaryException = thrown_object;\n        __cxa_increment_exception_refcount(thrown_object);\n        dep_exception_header->exceptionType = exception_header->exceptionType;\n        dep_exception_header->unexpectedHandler = std::get_unexpected();\n        dep_exception_header->terminateHandler = std::get_terminate();\n        setDependentExceptionClass(&dep_exception_header->unwindHeader);\n        __cxa_get_globals()->uncaughtExceptions += 1;\n        dep_exception_header->unwindHeader.exception_cleanup = dependent_exception_cleanup;\n#ifdef __USING_SJLJ_EXCEPTIONS__\n        _Unwind_SjLj_RaiseException(&dep_exception_header->unwindHeader);\n#else\n        _Unwind_RaiseException(&dep_exception_header->unwindHeader);\n#endif\n        // Some sort of unwinding error.  Note that terminate is a handler.\n        __cxa_begin_catch(&dep_exception_header->unwindHeader);\n    }\n    // If we return client will call terminate()\n}\n\nbool\n__cxa_uncaught_exception() throw()\n{\n    // This does not report foreign exceptions in flight\n    __cxa_eh_globals* globals = __cxa_get_globals_fast();\n    if (globals == 0)\n        return false;\n    return globals->uncaughtExceptions != 0;\n}\n\n}  // extern \"C\"\n\n#pragma GCC visibility pop\n\n}  // abi\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_exception.hpp",
    "content": "//===------------------------- cxa_exception.hpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the \"Exception Handling APIs\"\n//  http://mentorembedded.github.io/cxx-abi/abi-eh.html\n//  \n//===----------------------------------------------------------------------===//\n\n#ifndef _CXA_EXCEPTION_H\n#define _CXA_EXCEPTION_H\n\n#include <exception> // for std::unexpected_handler and std::terminate_handler\n#include <cxxabi.h>\n#include \"unwind.h\"\n\nnamespace __cxxabiv1 {\n\n#pragma GCC visibility push(hidden)\n\nstatic const uint64_t kOurExceptionClass          = 0x434C4E47432B2B00; // CLNGC++\\0\nstatic const uint64_t kOurDependentExceptionClass = 0x434C4E47432B2B01; // CLNGC++\\1\nstatic const uint64_t get_vendor_and_language     = 0xFFFFFFFFFFFFFF00; // mask for CLNGC++\n\nstruct __cxa_exception {\n#if defined(__LP64__) || LIBCXXABI_ARM_EHABI\n    // This is a new field to support C++ 0x exception_ptr.\n    // For binary compatibility it is at the start of this\n    // struct which is prepended to the object thrown in\n    // __cxa_allocate_exception.\n    size_t referenceCount;\n#endif\n\n    //  Manage the exception object itself.\n    std::type_info *exceptionType;\n    void (*exceptionDestructor)(void *);\n    std::unexpected_handler unexpectedHandler;\n    std::terminate_handler  terminateHandler;\n\n    __cxa_exception *nextException;\n\n    int handlerCount;\n\n#if LIBCXXABI_ARM_EHABI\n    __cxa_exception* nextPropagatingException;\n    int propagationCount;\n#else\n    int handlerSwitchValue;\n    const unsigned char *actionRecord;\n    const unsigned char *languageSpecificData;\n    void *catchTemp;\n    void *adjustedPtr;\n#endif\n\n#if !defined(__LP64__) && !LIBCXXABI_ARM_EHABI\n    // This is a new field to support C++ 0x exception_ptr.\n    // For binary compatibility it is placed where the compiler\n    // previously adding padded to 64-bit align unwindHeader.\n    size_t referenceCount;\n#endif\n\n    _Unwind_Exception unwindHeader;\n};\n\n// http://sourcery.mentor.com/archives/cxx-abi-dev/msg01924.html\n// The layout of this structure MUST match the layout of __cxa_exception, with\n// primaryException instead of referenceCount.\nstruct __cxa_dependent_exception {\n#if defined(__LP64__) || LIBCXXABI_ARM_EHABI\n    void* primaryException;\n#endif\n\n    std::type_info *exceptionType;\n    void (*exceptionDestructor)(void *);\n    std::unexpected_handler unexpectedHandler;\n    std::terminate_handler terminateHandler;\n\n    __cxa_exception *nextException;\n\n    int handlerCount;\n\n#if LIBCXXABI_ARM_EHABI\n    __cxa_exception* nextPropagatingException;\n    int propagationCount;\n#else\n    int handlerSwitchValue;\n    const unsigned char *actionRecord;\n    const unsigned char *languageSpecificData;\n    void * catchTemp;\n    void *adjustedPtr;\n#endif\n\n#if !defined(__LP64__) && !LIBCXXABI_ARM_EHABI\n    void* primaryException;\n#endif\n\n    _Unwind_Exception unwindHeader;\n};\n\nstruct __cxa_eh_globals {\n    __cxa_exception *   caughtExceptions;\n    unsigned int        uncaughtExceptions;\n#if LIBCXXABI_ARM_EHABI\n    __cxa_exception* propagatingExceptions;\n#endif\n};\n\n#pragma GCC visibility pop\n#pragma GCC visibility push(default)\n\nextern \"C\" __cxa_eh_globals * __cxa_get_globals      ();\nextern \"C\" __cxa_eh_globals * __cxa_get_globals_fast ();\n\nextern \"C\" void * __cxa_allocate_dependent_exception ();\nextern \"C\" void __cxa_free_dependent_exception (void * dependent_exception);\n\n#pragma GCC visibility pop\n\n}  // namespace __cxxabiv1\n\n#endif  // _CXA_EXCEPTION_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_exception_storage.cpp",
    "content": "//===--------------------- cxa_exception_storage.cpp ----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the storage for the \"Caught Exception Stack\"\n//  http://mentorembedded.github.io/cxx-abi/abi-eh.html (section 2.2.2)\n//  \n//===----------------------------------------------------------------------===//\n\n#include \"cxa_exception.hpp\"\n\n#include \"config.h\"\n\n#if LIBCXXABI_HAS_NO_THREADS\n\nnamespace __cxxabiv1 {\nextern \"C\" {\n    static __cxa_eh_globals eh_globals;\n    __cxa_eh_globals *__cxa_get_globals() { return &eh_globals; }\n    __cxa_eh_globals *__cxa_get_globals_fast() { return &eh_globals; }\n    }\n}\n\n#elif defined(HAS_THREAD_LOCAL)\n\nnamespace __cxxabiv1 {\n\nnamespace {\n    __cxa_eh_globals * __globals () {\n        static thread_local __cxa_eh_globals eh_globals;\n        return &eh_globals;\n        }\n    }\n\nextern \"C\" {\n    __cxa_eh_globals * __cxa_get_globals      () { return __globals (); }\n    __cxa_eh_globals * __cxa_get_globals_fast () { return __globals (); }\n    }\n}\n\n#else\n\n#include <pthread.h>\n#include <cstdlib>          // for calloc, free\n#include \"abort_message.h\"\n\n//  In general, we treat all pthread errors as fatal.\n//  We cannot call std::terminate() because that will in turn\n//  call __cxa_get_globals() and cause infinite recursion.\n\nnamespace __cxxabiv1 {\nnamespace {\n    pthread_key_t  key_;\n    pthread_once_t flag_ = PTHREAD_ONCE_INIT;\n\n    void destruct_ (void *p) {\n        std::free ( p );\n        if ( 0 != ::pthread_setspecific ( key_, NULL ) ) \n            abort_message(\"cannot zero out thread value for __cxa_get_globals()\");\n        }\n\n    void construct_ () {\n        if ( 0 != pthread_key_create ( &key_, destruct_ ) )\n            abort_message(\"cannot create pthread key for __cxa_get_globals()\");\n        }\n}   \n\nextern \"C\" {\n    __cxa_eh_globals * __cxa_get_globals () {\n    //  Try to get the globals for this thread\n        __cxa_eh_globals* retVal = __cxa_get_globals_fast ();\n    \n    //  If this is the first time we've been asked for these globals, create them\n        if ( NULL == retVal ) {\n            retVal = static_cast<__cxa_eh_globals*>\n                        (std::calloc (1, sizeof (__cxa_eh_globals)));\n            if ( NULL == retVal )\n                abort_message(\"cannot allocate __cxa_eh_globals\");\n            if ( 0 != pthread_setspecific ( key_, retVal ) )\n               abort_message(\"pthread_setspecific failure in __cxa_get_globals()\");\n           }\n        return retVal;\n        }\n\n    // Note that this implementation will reliably return NULL if not\n    // preceded by a call to __cxa_get_globals().  This is an extension\n    // to the Itanium ABI and is taken advantage of in several places in\n    // libc++abi.\n    __cxa_eh_globals * __cxa_get_globals_fast () {\n    //  First time through, create the key.\n        if (0 != pthread_once(&flag_, construct_))\n            abort_message(\"pthread_once failure in __cxa_get_globals_fast()\");\n//        static int init = construct_();\n        return static_cast<__cxa_eh_globals*>(::pthread_getspecific(key_));\n        }\n    \n}\n}\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_guard.cpp",
    "content": "//===---------------------------- cxa_guard.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"abort_message.h\"\n#include \"config.h\"\n\n#if !LIBCXXABI_HAS_NO_THREADS\n#  include <pthread.h>\n#endif\n#include <stdint.h>\n\n/*\n    This implementation must be careful to not call code external to this file\n    which will turn around and try to call __cxa_guard_acquire reentrantly.\n    For this reason, the headers of this file are as restricted as possible.\n    Previous implementations of this code for __APPLE__ have used\n    pthread_mutex_lock and the abort_message utility without problem.  This\n    implementation also uses pthread_cond_wait which has tested to not be a\n    problem.\n*/\n\nnamespace __cxxabiv1\n{\n\nnamespace\n{\n\n#ifdef __arm__\n\n// A 32-bit, 4-byte-aligned static data value. The least significant 2 bits must\n// be statically initialized to 0.\ntypedef uint32_t guard_type;\n\n// Test the lowest bit.\ninline bool is_initialized(guard_type* guard_object) {\n    return (*guard_object) & 1;\n}\n\ninline void set_initialized(guard_type* guard_object) {\n    *guard_object |= 1;\n}\n\n#else\n\ntypedef uint64_t guard_type;\n\nbool is_initialized(guard_type* guard_object) {\n    char* initialized = (char*)guard_object;\n    return *initialized;\n}\n\nvoid set_initialized(guard_type* guard_object) {\n    char* initialized = (char*)guard_object;\n    *initialized = 1;\n}\n\n#endif\n\n#if !LIBCXXABI_HAS_NO_THREADS\npthread_mutex_t guard_mut = PTHREAD_MUTEX_INITIALIZER;\npthread_cond_t  guard_cv  = PTHREAD_COND_INITIALIZER;\n#endif\n\n#if defined(__APPLE__) && !defined(__arm__)\n\ntypedef uint32_t lock_type;\n\n#if __LITTLE_ENDIAN__\n\ninline\nlock_type\nget_lock(uint64_t x)\n{\n    return static_cast<lock_type>(x >> 32);\n}\n\ninline\nvoid\nset_lock(uint64_t& x, lock_type y)\n{\n    x = static_cast<uint64_t>(y) << 32;\n}\n\n#else  // __LITTLE_ENDIAN__\n\ninline\nlock_type\nget_lock(uint64_t x)\n{\n    return static_cast<lock_type>(x);\n}\n\ninline\nvoid\nset_lock(uint64_t& x, lock_type y)\n{\n    x = y;\n}\n\n#endif  // __LITTLE_ENDIAN__\n\n#else  // !__APPLE__ || __arm__\n\ntypedef bool lock_type;\n\ninline\nlock_type\nget_lock(uint64_t x)\n{\n    union\n    {\n        uint64_t guard;\n        uint8_t lock[2];\n    } f = {x};\n    return f.lock[1] != 0;\n}\n\ninline\nvoid\nset_lock(uint64_t& x, lock_type y)\n{\n    union\n    {\n        uint64_t guard;\n        uint8_t lock[2];\n    } f = {0};\n    f.lock[1] = y;\n    x = f.guard;\n}\n\ninline\nlock_type\nget_lock(uint32_t x)\n{\n    union\n    {\n        uint32_t guard;\n        uint8_t lock[2];\n    } f = {x};\n    return f.lock[1] != 0;\n}\n\ninline\nvoid\nset_lock(uint32_t& x, lock_type y)\n{\n    union\n    {\n        uint32_t guard;\n        uint8_t lock[2];\n    } f = {0};\n    f.lock[1] = y;\n    x = f.guard;\n}\n\n#endif  // __APPLE__\n\n}  // unnamed namespace\n\nextern \"C\"\n{\n\n#if LIBCXXABI_HAS_NO_THREADS\nint __cxa_guard_acquire(guard_type* guard_object)\n{\n    return !is_initialized(guard_object);\n}\n\nvoid __cxa_guard_release(guard_type* guard_object)\n{\n    *guard_object = 0;\n    set_initialized(guard_object);\n}\n\nvoid __cxa_guard_abort(guard_type* guard_object)\n{\n    *guard_object = 0;\n}\n\n#else // !LIBCXXABI_HAS_NO_THREADS\n\nint __cxa_guard_acquire(guard_type* guard_object)\n{\n    char* initialized = (char*)guard_object;\n    if (pthread_mutex_lock(&guard_mut))\n        abort_message(\"__cxa_guard_acquire failed to acquire mutex\");\n    int result = *initialized == 0;\n    if (result)\n    {\n#if defined(__APPLE__) && !defined(__arm__)\n        const lock_type id = pthread_mach_thread_np(pthread_self());\n        lock_type lock = get_lock(*guard_object);\n        if (lock)\n        {\n            // if this thread set lock for this same guard_object, abort\n            if (lock == id)\n                abort_message(\"__cxa_guard_acquire detected deadlock\");\n            do\n            {\n                if (pthread_cond_wait(&guard_cv, &guard_mut))\n                    abort_message(\"__cxa_guard_acquire condition variable wait failed\");\n                lock = get_lock(*guard_object);\n            } while (lock);\n            result = !is_initialized(guard_object);\n            if (result)\n                set_lock(*guard_object, id);\n        }\n        else\n            set_lock(*guard_object, id);\n#else  // !__APPLE__ || __arm__\n        while (get_lock(*guard_object))\n            if (pthread_cond_wait(&guard_cv, &guard_mut))\n                abort_message(\"__cxa_guard_acquire condition variable wait failed\");\n        result = *initialized == 0;\n        if (result)\n            set_lock(*guard_object, true);\n#endif  // !__APPLE__ || __arm__\n    }\n    if (pthread_mutex_unlock(&guard_mut))\n        abort_message(\"__cxa_guard_acquire failed to release mutex\");\n    return result;\n}\n\nvoid __cxa_guard_release(guard_type* guard_object)\n{\n    if (pthread_mutex_lock(&guard_mut))\n        abort_message(\"__cxa_guard_release failed to acquire mutex\");\n    *guard_object = 0;\n    set_initialized(guard_object);\n    if (pthread_mutex_unlock(&guard_mut))\n        abort_message(\"__cxa_guard_release failed to release mutex\");\n    if (pthread_cond_broadcast(&guard_cv))\n        abort_message(\"__cxa_guard_release failed to broadcast condition variable\");\n}\n\nvoid __cxa_guard_abort(guard_type* guard_object)\n{\n    if (pthread_mutex_lock(&guard_mut))\n        abort_message(\"__cxa_guard_abort failed to acquire mutex\");\n    *guard_object = 0;\n    if (pthread_mutex_unlock(&guard_mut))\n        abort_message(\"__cxa_guard_abort failed to release mutex\");\n    if (pthread_cond_broadcast(&guard_cv))\n        abort_message(\"__cxa_guard_abort failed to broadcast condition variable\");\n}\n\n#endif // !LIBCXXABI_HAS_NO_THREADS\n\n}  // extern \"C\"\n\n}  // __cxxabiv1\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_handlers.cpp",
    "content": "//===------------------------- cxa_handlers.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// This file implements the functionality associated with the terminate_handler,\n//   unexpected_handler, and new_handler.\n//===----------------------------------------------------------------------===//\n\n#include <stdexcept>\n#include <new>\n#include <exception>\n#include \"abort_message.h\"\n#include \"config.h\"\n#include \"cxxabi.h\"\n#include \"cxa_handlers.hpp\"\n#include \"cxa_exception.hpp\"\n#include \"private_typeinfo.h\"\n\nnamespace std\n{\n\nunexpected_handler\nget_unexpected() _NOEXCEPT\n{\n    return __sync_fetch_and_add(&__cxa_unexpected_handler, (unexpected_handler)0);\n//  The above is safe but overkill on x86\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_unexpected_handler.load(memory_order_acq);\n}\n\n__attribute__((visibility(\"hidden\"), noreturn))\nvoid\n__unexpected(unexpected_handler func)\n{\n    func();\n    // unexpected handler should not return\n    abort_message(\"unexpected_handler unexpectedly returned\");\n}\n\n__attribute__((noreturn))\nvoid\nunexpected()\n{\n    __unexpected(get_unexpected());\n}\n\nterminate_handler\nget_terminate() _NOEXCEPT\n{\n    return __sync_fetch_and_add(&__cxa_terminate_handler, (terminate_handler)0);\n//  The above is safe but overkill on x86\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_terminate_handler.load(memory_order_acq);\n}\n\n__attribute__((visibility(\"hidden\"), noreturn))\nvoid\n__terminate(terminate_handler func) _NOEXCEPT\n{\n#if __has_feature(cxx_exceptions)\n    try\n    {\n#endif  // __has_feature(cxx_exceptions)\n        func();\n        // handler should not return\n        abort_message(\"terminate_handler unexpectedly returned\");\n#if __has_feature(cxx_exceptions)\n    }\n    catch (...)\n    {\n        // handler should not throw exception\n        abort_message(\"terminate_handler unexpectedly threw an exception\");\n    }\n#endif  // #if __has_feature(cxx_exceptions)\n}\n\n__attribute__((noreturn))\nvoid\nterminate() _NOEXCEPT\n{\n    // If there might be an uncaught exception\n    using namespace __cxxabiv1;\n    __cxa_eh_globals* globals = __cxa_get_globals_fast();\n    if (globals)\n    {\n        __cxa_exception* exception_header = globals->caughtExceptions;\n        if (exception_header)\n        {\n            _Unwind_Exception* unwind_exception =\n                reinterpret_cast<_Unwind_Exception*>(exception_header + 1) - 1;\n            bool native_exception =\n                (unwind_exception->exception_class & get_vendor_and_language) ==\n                               (kOurExceptionClass & get_vendor_and_language);\n            if (native_exception)\n                __terminate(exception_header->terminateHandler);\n        }\n    }\n    __terminate(get_terminate());\n}\n\nnew_handler __cxa_new_handler = 0;\n// In the future these will become:\n// std::atomic<std::new_handler>  __cxa_new_handler(0);\n\nnew_handler\nset_new_handler(new_handler handler) _NOEXCEPT\n{\n    return __atomic_exchange_n(&__cxa_new_handler, handler, __ATOMIC_ACQ_REL);\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_new_handler.exchange(handler, memory_order_acq_rel);\n}\n\nnew_handler\nget_new_handler() _NOEXCEPT\n{\n    return __sync_fetch_and_add(&__cxa_new_handler, (new_handler)0);\n//  The above is safe but overkill on x86\n//  Using of C++11 atomics this should be rewritten\n//  return __cxa_new_handler.load(memory_order_acq);\n}\n\n}  // std\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_handlers.hpp",
    "content": "//===------------------------- cxa_handlers.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// This file implements the functionality associated with the terminate_handler,\n//   unexpected_handler, and new_handler.\n//===----------------------------------------------------------------------===//\n\n#ifndef _CXA_HANDLERS_H\n#define _CXA_HANDLERS_H\n\n#include <exception>\n\nnamespace std\n{\n\n__attribute__((visibility(\"hidden\"), noreturn))\nvoid\n__unexpected(unexpected_handler func);\n\n__attribute__((visibility(\"hidden\"), noreturn))\nvoid\n__terminate(terminate_handler func) _NOEXCEPT;\n\n}  // std\n\nextern \"C\"\n{\n\nextern void (*__cxa_terminate_handler)();\nextern void (*__cxa_unexpected_handler)();\nextern void (*__cxa_new_handler)();\n\n/*\n\n    At some point in the future these three symbols will become\n    C++11 atomic variables:\n\n    extern std::atomic<std::terminate_handler>  __cxa_terminate_handler;\n    extern std::atomic<std::unexpected_handler> __cxa_unexpected_handler;\n    extern std::atomic<std::new_handler>        __cxa_new_handler;\n\n    This change will not impact their ABI.  But it will allow for a\n    portable performance optimization.\n\n*/\n\n} // extern \"C\"\n\n#endif  // _CXA_HANDLERS_H\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_new_delete.cpp",
    "content": "//===------------------------ cxa_new_delete.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//\n// This file implements the new and delete operators.\n//===----------------------------------------------------------------------===//\n\n#define _LIBCPP_BUILDING_NEW\n\n#include <new>\n#include <cstdlib>\n\n/*\n[new.delete.single]\n\n* Executes a loop: Within the loop, the function first attempts to allocate\n  the requested storage. Whether the attempt involves a call to the Standard C\n  library function malloc is unspecified.\n\n* Returns a pointer to the allocated storage if the attempt is successful.\n  Otherwise, if the current new_handler (18.6.2.5) is a null pointer value,\n  throws bad_alloc.\n\n* Otherwise, the function calls the current new_handler function (18.6.2.3).\n  If the called function returns, the loop repeats.\n\n* The loop terminates when an attempt to allocate the requested storage is\n  successful or when a called new_handler function does not return.\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid *\noperator new(std::size_t size)\n#if !__has_feature(cxx_noexcept)\n    throw(std::bad_alloc)\n#endif\n{\n    if (size == 0)\n        size = 1;\n    void* p;\n    while ((p = std::malloc(size)) == 0)\n    {\n        std::new_handler nh = std::get_new_handler();\n        if (nh)\n            nh();\n        else\n            throw std::bad_alloc();\n    }\n    return p;\n}\n\n/*\nNote:  The relationships among these operators is both carefully considered\nand standard in C++11.  Please do not change them without fully understanding\nthe consequences of doing so.  Reference:\nhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2158.html\n*/\n/*\n[new.delete.single]\n\nCalls operator new(size). If the call returns normally, returns the result of\nthat call. Otherwise, returns a null pointer.\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid*\noperator new(size_t size, const std::nothrow_t&)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    void* p = 0;\n    try\n    {\n        p = ::operator new(size);\n    }\n    catch (...)\n    {\n    }\n    return p;\n}\n\n/*\n[new.delete.array]\n\nReturns operator new(size).\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid*\noperator new[](size_t size)\n#if !__has_feature(cxx_noexcept)\n    throw(std::bad_alloc)\n#endif\n{\n    return ::operator new(size);\n}\n\n/*\n[new.delete.array]\n\nCalls operator new[](size). If the call returns normally, returns the result\nof that call. Otherwise, returns a null pointer.\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid*\noperator new[](size_t size, const std::nothrow_t&)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    void* p = 0;\n    try\n    {\n        p = ::operator new[](size);\n    }\n    catch (...)\n    {\n    }\n    return p;\n}\n\n/*\n[new.delete.single]\n\nIf ptr is null, does nothing. Otherwise, reclaims the storage allocated by the\nearlier call to operator new.\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid\noperator delete(void* ptr)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    if (ptr)\n        std::free(ptr);\n}\n\n/*\n[new.delete.single]\n\ncalls operator delete(ptr)\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid\noperator delete(void* ptr, const std::nothrow_t&)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    ::operator delete(ptr);\n}\n\n/*\n[new.delete.array]\n\nCalls operator delete(ptr)\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid\noperator delete[] (void* ptr)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    ::operator delete(ptr);\n}\n\n/*\n[new.delete.array]\n\ncalls operator delete[](ptr)\n*/\n__attribute__((__weak__, __visibility__(\"default\")))\nvoid\noperator delete[] (void* ptr, const std::nothrow_t&)\n#if __has_feature(cxx_noexcept)\n    noexcept\n#else\n    throw()\n#endif\n{\n    ::operator delete[](ptr);\n}\n\nnamespace std\n{\n\n//  bad_alloc\n\nbad_alloc::bad_alloc() _NOEXCEPT\n{\n}\n\nbad_alloc::~bad_alloc() _NOEXCEPT\n{\n}\n\nconst char*\nbad_alloc::what() const _NOEXCEPT\n{\n    return \"std::bad_alloc\";\n}\n\n// bad_array_new_length\n\nbad_array_new_length::bad_array_new_length() _NOEXCEPT\n{\n}\n\nbad_array_new_length::~bad_array_new_length() _NOEXCEPT\n{\n}\n\nconst char*\nbad_array_new_length::what() const _NOEXCEPT\n{\n    return \"bad_array_new_length\";\n}\n\n// bad_array_length\n\n#ifndef _LIBCPP_BAD_ARRAY_LENGTH_DEFINED\n\nclass _LIBCPP_EXCEPTION_ABI bad_array_length\n    : public bad_alloc\n{\npublic:\n    bad_array_length() _NOEXCEPT;\n    virtual ~bad_array_length() _NOEXCEPT;\n    virtual const char* what() const _NOEXCEPT;\n};\n\n#endif  // _LIBCPP_BAD_ARRAY_LENGTH_DEFINED\n\nbad_array_length::bad_array_length() _NOEXCEPT\n{\n}\n\nbad_array_length::~bad_array_length() _NOEXCEPT\n{\n}\n\nconst char*\nbad_array_length::what() const _NOEXCEPT\n{\n    return \"bad_array_length\";\n}\n\n}  // std\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_personality.cpp",
    "content": "//===------------------------- cxa_exception.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the \"Exception Handling APIs\"\n//  http://mentorembedded.github.io/cxx-abi/abi-eh.html\n//  http://www.intel.com/design/itanium/downloads/245358.htm\n//  \n//===----------------------------------------------------------------------===//\n\n#include <assert.h>\n#include <stdlib.h>\n#include <typeinfo>\n\n#include \"config.h\"\n#include \"cxa_exception.hpp\"\n#include \"cxa_handlers.hpp\"\n#include \"private_typeinfo.h\"\n#include \"unwind.h\"\n\n#if LIBCXXABI_ARM_EHABI\n#include \"Unwind/libunwind_ext.h\"\n#endif\n\n/*\n    Exception Header Layout:\n\n+---------------------------+-----------------------------+---------------+\n| __cxa_exception           | _Unwind_Exception CLNGC++\\0 | thrown object |\n+---------------------------+-----------------------------+---------------+\n                                                          ^\n                                                          |\n  +-------------------------------------------------------+\n  |\n+---------------------------+-----------------------------+\n| __cxa_dependent_exception | _Unwind_Exception CLNGC++\\1 |\n+---------------------------+-----------------------------+\n\n    Exception Handling Table Layout:\n\n+-----------------+--------+\n| lpStartEncoding | (char) |\n+---------+-------+--------+---------------+-----------------------+\n| lpStart | (encoded with lpStartEncoding) | defaults to funcStart |\n+---------+-----+--------+-----------------+---------------+-------+\n| ttypeEncoding | (char) | Encoding of the type_info table |\n+---------------+-+------+----+----------------------------+----------------+\n| classInfoOffset | (ULEB128) | Offset to type_info table, defaults to null |\n+-----------------++--------+-+----------------------------+----------------+\n| callSiteEncoding | (char) | Encoding for Call Site Table |\n+------------------+--+-----+-----+------------------------+--------------------------+\n| callSiteTableLength | (ULEB128) | Call Site Table length, used to find Action table |\n+---------------------+-----------+---------------------------------------------------+\n#ifndef __USING_SJLJ_EXCEPTIONS__\n+---------------------+-----------+------------------------------------------------+\n| Beginning of Call Site Table            The current ip lies within the           |\n| ...                                     (start, length) range of one of these    |\n|                                         call sites. There may be action needed.  |\n| +-------------+---------------------------------+------------------------------+ |\n| | start       | (encoded with callSiteEncoding) | offset relative to funcStart | |\n| | length      | (encoded with callSiteEncoding) | length of code fragment      | |\n| | landingPad  | (encoded with callSiteEncoding) | offset relative to lpStart   | |\n| | actionEntry | (ULEB128)                       | Action Table Index 1-based   | |\n| |             |                                 | actionEntry == 0 -> cleanup  | |\n| +-------------+---------------------------------+------------------------------+ |\n| ...                                                                              |\n+----------------------------------------------------------------------------------+\n#else  // __USING_SJLJ_EXCEPTIONS__\n+---------------------+-----------+------------------------------------------------+\n| Beginning of Call Site Table            The current ip is a 1-based index into   |\n| ...                                     this table.  Or it is -1 meaning no      |\n|                                         action is needed.  Or it is 0 meaning    |\n|                                         terminate.                               |\n| +-------------+---------------------------------+------------------------------+ |\n| | landingPad  | (ULEB128)                       | offset relative to lpStart   | |\n| | actionEntry | (ULEB128)                       | Action Table Index 1-based   | |\n| |             |                                 | actionEntry == 0 -> cleanup  | |\n| +-------------+---------------------------------+------------------------------+ |\n| ...                                                                              |\n+----------------------------------------------------------------------------------+\n#endif  // __USING_SJLJ_EXCEPTIONS__\n+---------------------------------------------------------------------+\n| Beginning of Action Table       ttypeIndex == 0 : cleanup           |\n| ...                             ttypeIndex  > 0 : catch             |\n|                                 ttypeIndex  < 0 : exception spec    |\n| +--------------+-----------+--------------------------------------+ |\n| | ttypeIndex   | (SLEB128) | Index into type_info Table (1-based) | |\n| | actionOffset | (SLEB128) | Offset into next Action Table entry  | |\n| +--------------+-----------+--------------------------------------+ |\n| ...                                                                 |\n+---------------------------------------------------------------------+-----------------+\n| type_info Table, but classInfoOffset does *not* point here!                           |\n| +----------------+------------------------------------------------+-----------------+ |\n| | Nth type_info* | Encoded with ttypeEncoding, 0 means catch(...) | ttypeIndex == N | |\n| +----------------+------------------------------------------------+-----------------+ |\n| ...                                                                                   |\n| +----------------+------------------------------------------------+-----------------+ |\n| | 1st type_info* | Encoded with ttypeEncoding, 0 means catch(...) | ttypeIndex == 1 | |\n| +----------------+------------------------------------------------+-----------------+ |\n| +---------------------------------------+-----------+------------------------------+  |\n| | 1st ttypeIndex for 1st exception spec | (ULEB128) | classInfoOffset points here! |  |\n| | ...                                   | (ULEB128) |                              |  |\n| | Mth ttypeIndex for 1st exception spec | (ULEB128) |                              |  |\n| | 0                                     | (ULEB128) |                              |  |\n| +---------------------------------------+------------------------------------------+  |\n| ...                                                                                   |\n| +---------------------------------------+------------------------------------------+  |\n| | 0                                     | (ULEB128) | throw()                      |  |\n| +---------------------------------------+------------------------------------------+  |\n| ...                                                                                   |\n| +---------------------------------------+------------------------------------------+  |\n| | 1st ttypeIndex for Nth exception spec | (ULEB128) |                              |  |\n| | ...                                   | (ULEB128) |                              |  |\n| | Mth ttypeIndex for Nth exception spec | (ULEB128) |                              |  |\n| | 0                                     | (ULEB128) |                              |  |\n| +---------------------------------------+------------------------------------------+  |\n+---------------------------------------------------------------------------------------+\n\nNotes:\n\n*  ttypeIndex in the Action Table, and in the exception spec table, is an index,\n     not a byte count, if positive.  It is a negative index offset of\n     classInfoOffset and the sizeof entry depends on ttypeEncoding.\n   But if ttypeIndex is negative, it is a positive 1-based byte offset into the\n     type_info Table.\n   And if ttypeIndex is zero, it refers to a catch (...).\n\n*  landingPad can be 0, this implies there is nothing to be done.\n\n*  landingPad != 0 and actionEntry == 0 implies a cleanup needs to be done\n     @landingPad.\n\n*  A cleanup can also be found under landingPad != 0 and actionEntry != 0 in\n     the Action Table with ttypeIndex == 0.\n*/\n\nnamespace __cxxabiv1\n{\n\nextern \"C\"\n{\n\n// private API\n\n// Heavily borrowed from llvm/examples/ExceptionDemo/ExceptionDemo.cpp\n\n// DWARF Constants\nenum\n{\n    DW_EH_PE_absptr   = 0x00,\n    DW_EH_PE_uleb128  = 0x01,\n    DW_EH_PE_udata2   = 0x02,\n    DW_EH_PE_udata4   = 0x03,\n    DW_EH_PE_udata8   = 0x04,\n    DW_EH_PE_sleb128  = 0x09,\n    DW_EH_PE_sdata2   = 0x0A,\n    DW_EH_PE_sdata4   = 0x0B,\n    DW_EH_PE_sdata8   = 0x0C,\n    DW_EH_PE_pcrel    = 0x10,\n    DW_EH_PE_textrel  = 0x20,\n    DW_EH_PE_datarel  = 0x30,\n    DW_EH_PE_funcrel  = 0x40,\n    DW_EH_PE_aligned  = 0x50,\n    DW_EH_PE_indirect = 0x80,\n    DW_EH_PE_omit     = 0xFF\n};\n\n/// Read a uleb128 encoded value and advance pointer \n/// See Variable Length Data Appendix C in: \n/// @link http://dwarfstd.org/Dwarf4.pdf @unlink\n/// @param data reference variable holding memory pointer to decode from\n/// @returns decoded value\nstatic\nuintptr_t\nreadULEB128(const uint8_t** data)\n{\n    uintptr_t result = 0;\n    uintptr_t shift = 0;\n    unsigned char byte;\n    const uint8_t *p = *data;\n    do\n    {\n        byte = *p++;\n        result |= static_cast<uintptr_t>(byte & 0x7F) << shift;\n        shift += 7;\n    } while (byte & 0x80);\n    *data = p;\n    return result;\n}\n\n/// Read a sleb128 encoded value and advance pointer \n/// See Variable Length Data Appendix C in: \n/// @link http://dwarfstd.org/Dwarf4.pdf @unlink\n/// @param data reference variable holding memory pointer to decode from\n/// @returns decoded value\nstatic\nintptr_t\nreadSLEB128(const uint8_t** data)\n{\n    uintptr_t result = 0;\n    uintptr_t shift = 0;\n    unsigned char byte;\n    const uint8_t *p = *data;\n    do\n    {\n        byte = *p++;\n        result |= static_cast<uintptr_t>(byte & 0x7F) << shift;\n        shift += 7;\n    } while (byte & 0x80);\n    *data = p;\n    if ((byte & 0x40) && (shift < (sizeof(result) << 3)))\n        result |= static_cast<uintptr_t>(~0) << shift;\n    return static_cast<intptr_t>(result);\n}\n\n/// Read a pointer encoded value and advance pointer \n/// See Variable Length Data in: \n/// @link http://dwarfstd.org/Dwarf3.pdf @unlink\n/// @param data reference variable holding memory pointer to decode from\n/// @param encoding dwarf encoding type\n/// @returns decoded value\nstatic\nuintptr_t\nreadEncodedPointer(const uint8_t** data, uint8_t encoding)\n{\n    uintptr_t result = 0;\n    if (encoding == DW_EH_PE_omit) \n        return result;\n    const uint8_t* p = *data;\n    // first get value \n    switch (encoding & 0x0F)\n    {\n    case DW_EH_PE_absptr:\n        result = *((uintptr_t*)p);\n        p += sizeof(uintptr_t);\n        break;\n    case DW_EH_PE_uleb128:\n        result = readULEB128(&p);\n        break;\n    case DW_EH_PE_sleb128:\n        result = static_cast<uintptr_t>(readSLEB128(&p));\n        break;\n    case DW_EH_PE_udata2:\n        result = *((uint16_t*)p);\n        p += sizeof(uint16_t);\n        break;\n    case DW_EH_PE_udata4:\n        result = *((uint32_t*)p);\n        p += sizeof(uint32_t);\n        break;\n    case DW_EH_PE_udata8:\n        result = static_cast<uintptr_t>(*((uint64_t*)p));\n        p += sizeof(uint64_t);\n        break;\n    case DW_EH_PE_sdata2:\n        result = static_cast<uintptr_t>(*((int16_t*)p));\n        p += sizeof(int16_t);\n        break;\n    case DW_EH_PE_sdata4:\n        result = static_cast<uintptr_t>(*((int32_t*)p));\n        p += sizeof(int32_t);\n        break;\n    case DW_EH_PE_sdata8:\n        result = static_cast<uintptr_t>(*((int64_t*)p));\n        p += sizeof(int64_t);\n        break;\n    default:\n        // not supported \n        abort();\n        break;\n    }\n    // then add relative offset \n    switch (encoding & 0x70)\n    {\n    case DW_EH_PE_absptr:\n        // do nothing \n        break;\n    case DW_EH_PE_pcrel:\n        if (result)\n            result += (uintptr_t)(*data);\n        break;\n    case DW_EH_PE_textrel:\n    case DW_EH_PE_datarel:\n    case DW_EH_PE_funcrel:\n    case DW_EH_PE_aligned:\n    default:\n        // not supported \n        abort();\n        break;\n    }\n    // then apply indirection \n    if (result && (encoding & DW_EH_PE_indirect))\n        result = *((uintptr_t*)result);\n    *data = p;\n    return result;\n}\n\nstatic\nvoid\ncall_terminate(bool native_exception, _Unwind_Exception* unwind_exception)\n{\n    __cxa_begin_catch(unwind_exception);\n    if (native_exception)\n    {\n        // Use the stored terminate_handler if possible\n        __cxa_exception* exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n        std::__terminate(exception_header->terminateHandler);\n    }\n    std::terminate();\n}\n\n#if LIBCXXABI_ARM_EHABI\nstatic const void* read_target2_value(const void* ptr)\n{\n    uintptr_t offset = *reinterpret_cast<const uintptr_t*>(ptr);\n    if (!offset)\n        return 0;\n    // \"ARM EABI provides a TARGET2 relocation to describe these typeinfo\n    // pointers. The reason being it allows their precise semantics to be\n    // deferred to the linker. For bare-metal they turn into absolute\n    // relocations. For linux they turn into GOT-REL relocations.\"\n    // https://gcc.gnu.org/ml/gcc-patches/2009-08/msg00264.html\n#if LIBCXXABI_BAREMETAL\n    return reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(ptr) +\n                                         offset);\n#else\n    return *reinterpret_cast<const void **>(reinterpret_cast<uintptr_t>(ptr) +\n                                            offset);\n#endif\n}\n\nstatic const __shim_type_info*\nget_shim_type_info(uint64_t ttypeIndex, const uint8_t* classInfo,\n                   uint8_t ttypeEncoding, bool native_exception,\n                   _Unwind_Exception* unwind_exception)\n{\n    if (classInfo == 0)\n    {\n        // this should not happen.  Indicates corrupted eh_table.\n        call_terminate(native_exception, unwind_exception);\n    }\n\n    assert(ttypeEncoding == DW_EH_PE_absptr && \"Unexpected TTypeEncoding\");\n    (void)ttypeEncoding;\n\n    const uint8_t* ttypePtr = classInfo - ttypeIndex * sizeof(uintptr_t);\n    return reinterpret_cast<const __shim_type_info *>(\n        read_target2_value(ttypePtr));\n}\n#else // !LIBCXXABI_ARM_EHABI\nstatic\nconst __shim_type_info*\nget_shim_type_info(uint64_t ttypeIndex, const uint8_t* classInfo,\n                   uint8_t ttypeEncoding, bool native_exception,\n                   _Unwind_Exception* unwind_exception)\n{\n    if (classInfo == 0)\n    {\n        // this should not happen.  Indicates corrupted eh_table.\n        call_terminate(native_exception, unwind_exception);\n    }\n    switch (ttypeEncoding & 0x0F)\n    {\n    case DW_EH_PE_absptr:\n        ttypeIndex *= sizeof(void*);\n        break;\n    case DW_EH_PE_udata2:\n    case DW_EH_PE_sdata2:\n        ttypeIndex *= 2;\n        break;\n    case DW_EH_PE_udata4:\n    case DW_EH_PE_sdata4:\n        ttypeIndex *= 4;\n        break;\n    case DW_EH_PE_udata8:\n    case DW_EH_PE_sdata8:\n        ttypeIndex *= 8;\n        break;\n    default:\n        // this should not happen.   Indicates corrupted eh_table.\n        call_terminate(native_exception, unwind_exception);\n    }\n    classInfo -= ttypeIndex;\n    return (const __shim_type_info*)readEncodedPointer(&classInfo, ttypeEncoding);\n}\n#endif // !LIBCXXABI_ARM_EHABI\n\n/*\n    This is checking a thrown exception type, excpType, against a possibly empty\n    list of catchType's which make up an exception spec.\n\n    An exception spec acts like a catch handler, but in reverse.  This \"catch\n    handler\" will catch an excpType if and only if none of the catchType's in\n    the list will catch a excpType.  If any catchType in the list can catch an\n    excpType, then this exception spec does not catch the excpType.\n*/\n#if LIBCXXABI_ARM_EHABI\nstatic\nbool\nexception_spec_can_catch(int64_t specIndex, const uint8_t* classInfo,\n                         uint8_t ttypeEncoding, const __shim_type_info* excpType,\n                         void* adjustedPtr, _Unwind_Exception* unwind_exception)\n{\n    if (classInfo == 0)\n    {\n        // this should not happen.   Indicates corrupted eh_table.\n        call_terminate(false, unwind_exception);\n    }\n\n    assert(ttypeEncoding == DW_EH_PE_absptr && \"Unexpected TTypeEncoding\");\n    (void)ttypeEncoding;\n\n    // specIndex is negative of 1-based byte offset into classInfo;\n    specIndex = -specIndex;\n    --specIndex;\n    const void** temp = reinterpret_cast<const void**>(\n        reinterpret_cast<uintptr_t>(classInfo) +\n        static_cast<uintptr_t>(specIndex) * sizeof(uintptr_t));\n    // If any type in the spec list can catch excpType, return false, else return true\n    //    adjustments to adjustedPtr are ignored.\n    while (true)\n    {\n        // ARM EHABI exception specification table (filter table) consists of\n        // several pointers which will directly point to the type info object\n        // (instead of ttypeIndex).  The table will be terminated with 0.\n        const void** ttypePtr = temp++;\n        if (*ttypePtr == 0)\n            break;\n        // We can get the __shim_type_info simply by performing a\n        // R_ARM_TARGET2 relocation, and cast the result to __shim_type_info.\n        const __shim_type_info* catchType =\n            static_cast<const __shim_type_info*>(read_target2_value(ttypePtr));\n        void* tempPtr = adjustedPtr;\n        if (catchType->can_catch(excpType, tempPtr))\n            return false;\n    }\n    return true;\n}\n#else\nstatic\nbool\nexception_spec_can_catch(int64_t specIndex, const uint8_t* classInfo,\n                         uint8_t ttypeEncoding, const __shim_type_info* excpType,\n                         void* adjustedPtr, _Unwind_Exception* unwind_exception)\n{\n    if (classInfo == 0)\n    {\n        // this should not happen.   Indicates corrupted eh_table.\n        call_terminate(false, unwind_exception);\n    }\n    // specIndex is negative of 1-based byte offset into classInfo;\n    specIndex = -specIndex;\n    --specIndex;\n    const uint8_t* temp = classInfo + specIndex;\n    // If any type in the spec list can catch excpType, return false, else return true\n    //    adjustments to adjustedPtr are ignored.\n    while (true)\n    {\n        uint64_t ttypeIndex = readULEB128(&temp);\n        if (ttypeIndex == 0)\n            break;\n        const __shim_type_info* catchType = get_shim_type_info(ttypeIndex,\n                                                               classInfo,\n                                                               ttypeEncoding,\n                                                               true,\n                                                               unwind_exception);\n        void* tempPtr = adjustedPtr;\n        if (catchType->can_catch(excpType, tempPtr))\n            return false;\n    }\n    return true;\n}\n#endif\n\nstatic\nvoid*\nget_thrown_object_ptr(_Unwind_Exception* unwind_exception)\n{\n    // Even for foreign exceptions, the exception object is *probably* at unwind_exception + 1\n    //    Regardless, this library is prohibited from touching a foreign exception\n    void* adjustedPtr = unwind_exception + 1;\n    if (unwind_exception->exception_class == kOurDependentExceptionClass)\n        adjustedPtr = ((__cxa_dependent_exception*)adjustedPtr - 1)->primaryException;\n    return adjustedPtr;\n}\n\nnamespace\n{\n\nstruct scan_results\n{\n    int64_t        ttypeIndex;   // > 0 catch handler, < 0 exception spec handler, == 0 a cleanup\n    const uint8_t* actionRecord;         // Currently unused.  Retained to ease future maintenance.\n    const uint8_t* languageSpecificData;  // Needed only for __cxa_call_unexpected\n    uintptr_t      landingPad;   // null -> nothing found, else something found\n    void*          adjustedPtr;  // Used in cxa_exception.cpp\n    _Unwind_Reason_Code reason;  // One of _URC_FATAL_PHASE1_ERROR,\n                                 //        _URC_FATAL_PHASE2_ERROR,\n                                 //        _URC_CONTINUE_UNWIND,\n                                 //        _URC_HANDLER_FOUND\n};\n\n}  // unnamed namespace\n\nstatic\nvoid\nset_registers(_Unwind_Exception* unwind_exception, _Unwind_Context* context,\n              const scan_results& results)\n{\n    _Unwind_SetGR(context, __builtin_eh_return_data_regno(0),\n                                 reinterpret_cast<uintptr_t>(unwind_exception));\n    _Unwind_SetGR(context, __builtin_eh_return_data_regno(1),\n                                    static_cast<uintptr_t>(results.ttypeIndex));\n    _Unwind_SetIP(context, results.landingPad);\n}\n\n/*\n    There are 3 types of scans needed:\n\n    1.  Scan for handler with native or foreign exception.  If handler found,\n        save state and return _URC_HANDLER_FOUND, else return _URC_CONTINUE_UNWIND.\n        May also report an error on invalid input.\n        May terminate for invalid exception table.\n        _UA_SEARCH_PHASE\n\n    2.  Scan for handler with foreign exception.  Must return _URC_HANDLER_FOUND,\n        or call terminate.\n        _UA_CLEANUP_PHASE && _UA_HANDLER_FRAME && !native_exception\n\n    3.  Scan for cleanups.  If a handler is found and this isn't forced unwind,\n        then terminate, otherwise ignore the handler and keep looking for cleanup.\n        If a cleanup is found, return _URC_HANDLER_FOUND, else return _URC_CONTINUE_UNWIND.\n        May also report an error on invalid input.\n        May terminate for invalid exception table.\n        _UA_CLEANUP_PHASE && !_UA_HANDLER_FRAME\n*/\n\nstatic void scan_eh_tab(scan_results &results, _Unwind_Action actions,\n                        bool native_exception,\n                        _Unwind_Exception *unwind_exception,\n                        _Unwind_Context *context) {\n    // Initialize results to found nothing but an error\n    results.ttypeIndex = 0;\n    results.actionRecord = 0;\n    results.languageSpecificData = 0;\n    results.landingPad = 0;\n    results.adjustedPtr = 0;\n    results.reason = _URC_FATAL_PHASE1_ERROR;\n    // Check for consistent actions\n    if (actions & _UA_SEARCH_PHASE)\n    {\n        // Do Phase 1\n        if (actions & (_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME | _UA_FORCE_UNWIND))\n        {\n            // None of these flags should be set during Phase 1\n            //   Client error\n            results.reason = _URC_FATAL_PHASE1_ERROR;\n            return;\n        }\n    }\n    else if (actions & _UA_CLEANUP_PHASE)\n    {\n        if ((actions & _UA_HANDLER_FRAME) && (actions & _UA_FORCE_UNWIND))\n        {\n            // _UA_HANDLER_FRAME should only be set if phase 1 found a handler.\n            // If _UA_FORCE_UNWIND is set, phase 1 shouldn't have happened.\n            //    Client error\n            results.reason = _URC_FATAL_PHASE2_ERROR;\n            return;\n        }\n    }\n    else // Neither _UA_SEARCH_PHASE nor _UA_CLEANUP_PHASE is set\n    {\n        // One of these should be set.\n        //   Client error\n        results.reason = _URC_FATAL_PHASE1_ERROR;\n        return;\n    }\n    // Start scan by getting exception table address\n    const uint8_t *lsda = (const uint8_t *)_Unwind_GetLanguageSpecificData(context);\n    if (lsda == 0)\n    {\n        // There is no exception table\n        results.reason = _URC_CONTINUE_UNWIND;\n        return;\n    }\n    results.languageSpecificData = lsda;\n    // Get the current instruction pointer and offset it before next\n    // instruction in the current frame which threw the exception.\n    uintptr_t ip = _Unwind_GetIP(context) - 1;\n    // Get beginning current frame's code (as defined by the \n    // emitted dwarf code)\n    uintptr_t funcStart = _Unwind_GetRegionStart(context);\n#ifdef __USING_SJLJ_EXCEPTIONS__\n    if (ip == uintptr_t(-1))\n    {\n        // no action\n        results.reason = _URC_CONTINUE_UNWIND;\n        return;\n    }\n    else if (ip == 0)\n        call_terminate(native_exception, unwind_exception);\n    // ip is 1-based index into call site table\n#else  // !__USING_SJLJ_EXCEPTIONS__\n    uintptr_t ipOffset = ip - funcStart;\n#endif  // !defined(_USING_SLJL_EXCEPTIONS__)\n    const uint8_t* classInfo = NULL;\n    // Note: See JITDwarfEmitter::EmitExceptionTable(...) for corresponding\n    //       dwarf emission\n    // Parse LSDA header.\n    uint8_t lpStartEncoding = *lsda++;\n    const uint8_t* lpStart = (const uint8_t*)readEncodedPointer(&lsda, lpStartEncoding);\n    if (lpStart == 0)\n        lpStart = (const uint8_t*)funcStart;\n    uint8_t ttypeEncoding = *lsda++;\n    if (ttypeEncoding != DW_EH_PE_omit)\n    {\n        // Calculate type info locations in emitted dwarf code which\n        // were flagged by type info arguments to llvm.eh.selector\n        // intrinsic\n        uintptr_t classInfoOffset = readULEB128(&lsda);\n        classInfo = lsda + classInfoOffset;\n    }\n    // Walk call-site table looking for range that \n    // includes current PC. \n    uint8_t callSiteEncoding = *lsda++;\n#ifdef __USING_SJLJ_EXCEPTIONS__\n    (void)callSiteEncoding;  // When using SjLj exceptions, callSiteEncoding is never used\n#endif\n    uint32_t callSiteTableLength = static_cast<uint32_t>(readULEB128(&lsda));\n    const uint8_t* callSiteTableStart = lsda;\n    const uint8_t* callSiteTableEnd = callSiteTableStart + callSiteTableLength;\n    const uint8_t* actionTableStart = callSiteTableEnd;\n    const uint8_t* callSitePtr = callSiteTableStart;\n    while (callSitePtr < callSiteTableEnd)\n    {\n        // There is one entry per call site.\n#ifndef __USING_SJLJ_EXCEPTIONS__\n        // The call sites are non-overlapping in [start, start+length)\n        // The call sites are ordered in increasing value of start\n        uintptr_t start = readEncodedPointer(&callSitePtr, callSiteEncoding);\n        uintptr_t length = readEncodedPointer(&callSitePtr, callSiteEncoding);\n        uintptr_t landingPad = readEncodedPointer(&callSitePtr, callSiteEncoding);\n        uintptr_t actionEntry = readULEB128(&callSitePtr);\n        if ((start <= ipOffset) && (ipOffset < (start + length)))\n#else  // __USING_SJLJ_EXCEPTIONS__\n        // ip is 1-based index into this table\n        uintptr_t landingPad = readULEB128(&callSitePtr);\n        uintptr_t actionEntry = readULEB128(&callSitePtr);\n        if (--ip == 0)\n#endif  // __USING_SJLJ_EXCEPTIONS__\n        {\n            // Found the call site containing ip.\n#ifndef __USING_SJLJ_EXCEPTIONS__\n            if (landingPad == 0)\n            {\n                // No handler here\n                results.reason = _URC_CONTINUE_UNWIND;\n                return;\n            }\n            landingPad = (uintptr_t)lpStart + landingPad;\n#else  // __USING_SJLJ_EXCEPTIONS__\n            ++landingPad;\n#endif  // __USING_SJLJ_EXCEPTIONS__\n            if (actionEntry == 0)\n            {\n                // Found a cleanup\n                // If this is a type 1 or type 2 search, there are no handlers\n                // If this is a type 3 search, you want to install the cleanup.\n                if ((actions & _UA_CLEANUP_PHASE) && !(actions & _UA_HANDLER_FRAME))\n                {\n                    results.ttypeIndex = 0;  // Redundant but clarifying\n                    results.landingPad = landingPad;\n                    results.reason = _URC_HANDLER_FOUND;\n                    return;\n                }\n                // No handler here\n                results.reason = _URC_CONTINUE_UNWIND;\n                return;\n            }\n            // Convert 1-based byte offset into\n            const uint8_t* action = actionTableStart + (actionEntry - 1);\n            // Scan action entries until you find a matching handler, cleanup, or the end of action list\n            while (true)\n            {\n                const uint8_t* actionRecord = action;\n                int64_t ttypeIndex = readSLEB128(&action);\n                if (ttypeIndex > 0)\n                {\n                    // Found a catch, does it actually catch?\n                    // First check for catch (...)\n                    const __shim_type_info* catchType =\n                        get_shim_type_info(static_cast<uint64_t>(ttypeIndex),\n                                           classInfo, ttypeEncoding,\n                                           native_exception, unwind_exception);\n                    if (catchType == 0)\n                    {\n                        // Found catch (...) catches everything, including foreign exceptions\n                        // If this is a type 1 search save state and return _URC_HANDLER_FOUND\n                        // If this is a type 2 search save state and return _URC_HANDLER_FOUND\n                        // If this is a type 3 search !_UA_FORCE_UNWIND, we should have found this in phase 1!\n                        // If this is a type 3 search _UA_FORCE_UNWIND, ignore handler and continue scan\n                        if ((actions & _UA_SEARCH_PHASE) || (actions & _UA_HANDLER_FRAME))\n                        {\n                            // Save state and return _URC_HANDLER_FOUND\n                            results.ttypeIndex = ttypeIndex;\n                            results.actionRecord = actionRecord;\n                            results.landingPad = landingPad;\n                            results.adjustedPtr = get_thrown_object_ptr(unwind_exception);\n                            results.reason = _URC_HANDLER_FOUND;\n                            return;\n                        }\n                        else if (!(actions & _UA_FORCE_UNWIND))\n                        {\n                            // It looks like the exception table has changed\n                            //    on us.  Likely stack corruption!\n                            call_terminate(native_exception, unwind_exception);\n                        }\n                    }\n                    // Else this is a catch (T) clause and will never\n                    //    catch a foreign exception\n                    else if (native_exception)\n                    {\n                        __cxa_exception* exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n                        void* adjustedPtr = get_thrown_object_ptr(unwind_exception);\n                        const __shim_type_info* excpType =\n                            static_cast<const __shim_type_info*>(exception_header->exceptionType);\n                        if (adjustedPtr == 0 || excpType == 0)\n                        {\n                            // Something very bad happened\n                            call_terminate(native_exception, unwind_exception);\n                        }\n                        if (catchType->can_catch(excpType, adjustedPtr))\n                        {\n                            // Found a matching handler\n                            // If this is a type 1 search save state and return _URC_HANDLER_FOUND\n                            // If this is a type 3 search and !_UA_FORCE_UNWIND, we should have found this in phase 1!\n                            // If this is a type 3 search and _UA_FORCE_UNWIND, ignore handler and continue scan\n                            if (actions & _UA_SEARCH_PHASE)\n                            {\n                                // Save state and return _URC_HANDLER_FOUND\n                                results.ttypeIndex = ttypeIndex;\n                                results.actionRecord = actionRecord;\n                                results.landingPad = landingPad;\n                                results.adjustedPtr = adjustedPtr;\n                                results.reason = _URC_HANDLER_FOUND;\n                                return;\n                            }\n                            else if (!(actions & _UA_FORCE_UNWIND))\n                            {\n                                // It looks like the exception table has changed\n                                //    on us.  Likely stack corruption!\n                                call_terminate(native_exception, unwind_exception);\n                            }\n                        }\n                    }\n                    // Scan next action ...\n                }\n                else if (ttypeIndex < 0)\n                {\n                    // Found an exception spec.  If this is a foreign exception,\n                    //   it is always caught.\n                    if (native_exception)\n                    {\n                        // Does the exception spec catch this native exception?\n                        __cxa_exception* exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n                        void* adjustedPtr = get_thrown_object_ptr(unwind_exception);\n                        const __shim_type_info* excpType =\n                            static_cast<const __shim_type_info*>(exception_header->exceptionType);\n                        if (adjustedPtr == 0 || excpType == 0)\n                        {\n                            // Something very bad happened\n                            call_terminate(native_exception, unwind_exception);\n                        }\n                        if (exception_spec_can_catch(ttypeIndex, classInfo,\n                                                     ttypeEncoding, excpType,\n                                                     adjustedPtr, unwind_exception))\n                        {\n                            // native exception caught by exception spec\n                            // If this is a type 1 search, save state and return _URC_HANDLER_FOUND\n                            // If this is a type 3 search !_UA_FORCE_UNWIND, we should have found this in phase 1!\n                            // If this is a type 3 search _UA_FORCE_UNWIND, ignore handler and continue scan\n                            if (actions & _UA_SEARCH_PHASE)\n                            {\n                                // Save state and return _URC_HANDLER_FOUND\n                                results.ttypeIndex = ttypeIndex;\n                                results.actionRecord = actionRecord;\n                                results.landingPad = landingPad;\n                                results.adjustedPtr = adjustedPtr;\n                                results.reason = _URC_HANDLER_FOUND;\n                                return;\n                            }\n                            else if (!(actions & _UA_FORCE_UNWIND))\n                            {\n                                // It looks like the exception table has changed\n                                //    on us.  Likely stack corruption!\n                                call_terminate(native_exception, unwind_exception);\n                            }\n                        }\n                    }\n                    else\n                    {\n                        // foreign exception caught by exception spec\n                        // If this is a type 1 search, save state and return _URC_HANDLER_FOUND\n                        // If this is a type 2 search, save state and return _URC_HANDLER_FOUND\n                        // If this is a type 3 search !_UA_FORCE_UNWIND, we should have found this in phase 1!\n                        // If this is a type 3 search _UA_FORCE_UNWIND, ignore handler and continue scan\n                        if ((actions & _UA_SEARCH_PHASE) || (actions & _UA_HANDLER_FRAME))\n                        {\n                            // Save state and return _URC_HANDLER_FOUND\n                            results.ttypeIndex = ttypeIndex;\n                            results.actionRecord = actionRecord;\n                            results.landingPad = landingPad;\n                            results.adjustedPtr = get_thrown_object_ptr(unwind_exception);\n                            results.reason = _URC_HANDLER_FOUND;\n                            return;\n                        }\n                        else if (!(actions & _UA_FORCE_UNWIND))\n                        {\n                            // It looks like the exception table has changed\n                            //    on us.  Likely stack corruption!\n                            call_terminate(native_exception, unwind_exception);\n                        }\n                    }\n                    // Scan next action ...\n                }\n                else  // ttypeIndex == 0\n                {\n                    // Found a cleanup\n                    // If this is a type 1 search, ignore it and continue scan\n                    // If this is a type 2 search, ignore it and continue scan\n                    // If this is a type 3 search, save state and return _URC_HANDLER_FOUND\n                    if ((actions & _UA_CLEANUP_PHASE) && !(actions & _UA_HANDLER_FRAME))\n                    {\n                        // Save state and return _URC_HANDLER_FOUND\n                        results.ttypeIndex = ttypeIndex;\n                        results.actionRecord = actionRecord;\n                        results.landingPad = landingPad;\n                        results.adjustedPtr = get_thrown_object_ptr(unwind_exception);\n                        results.reason = _URC_HANDLER_FOUND;\n                        return;\n                    }\n                }\n                const uint8_t* temp = action;\n                int64_t actionOffset = readSLEB128(&temp);\n                if (actionOffset == 0)\n                {\n                    // End of action list, no matching handler or cleanup found\n                    results.reason = _URC_CONTINUE_UNWIND;\n                    return;\n                }\n                // Go to next action\n                action += actionOffset;\n            }  // there is no break out of this loop, only return\n        }\n#ifndef __USING_SJLJ_EXCEPTIONS__\n        else if (ipOffset < start)\n        {\n            // There is no call site for this ip\n            // Something bad has happened.  We should never get here.\n            // Possible stack corruption.\n            call_terminate(native_exception, unwind_exception);\n        }\n#endif  // !__USING_SJLJ_EXCEPTIONS__\n    }  // there might be some tricky cases which break out of this loop\n\n    // It is possible that no eh table entry specify how to handle\n    // this exception. By spec, terminate it immediately.\n    call_terminate(native_exception, unwind_exception);\n}\n\n// public API\n\n/*\nThe personality function branches on actions like so:\n\n_UA_SEARCH_PHASE\n\n    If _UA_CLEANUP_PHASE or _UA_HANDLER_FRAME or _UA_FORCE_UNWIND there's\n      an error from above, return _URC_FATAL_PHASE1_ERROR.\n\n    Scan for anything that could stop unwinding:\n\n       1.  A catch clause that will catch this exception\n           (will never catch foreign).\n       2.  A catch (...) (will always catch foreign).\n       3.  An exception spec that will catch this exception\n           (will always catch foreign).\n    If a handler is found\n        If not foreign\n            Save state in header\n        return _URC_HANDLER_FOUND\n    Else a handler not found\n        return _URC_CONTINUE_UNWIND\n\n_UA_CLEANUP_PHASE\n\n    If _UA_HANDLER_FRAME\n        If _UA_FORCE_UNWIND\n            How did this happen?  return _URC_FATAL_PHASE2_ERROR\n        If foreign\n            Do _UA_SEARCH_PHASE to recover state\n        else\n            Recover state from header\n        Transfer control to landing pad.  return _URC_INSTALL_CONTEXT\n    \n    Else\n\n        This branch handles both normal C++ non-catching handlers (cleanups)\n          and forced unwinding.    \n        Scan for anything that can not stop unwinding:\n    \n            1.  A cleanup.\n\n        If a cleanup is found\n            transfer control to it. return _URC_INSTALL_CONTEXT\n        Else a cleanup is not found: return _URC_CONTINUE_UNWIND\n*/\n\n#if !LIBCXXABI_ARM_EHABI\n_Unwind_Reason_Code\n#ifdef __USING_SJLJ_EXCEPTIONS__\n__gxx_personality_sj0\n#else\n__gxx_personality_v0\n#endif\n                    (int version, _Unwind_Action actions, uint64_t exceptionClass,\n                     _Unwind_Exception* unwind_exception, _Unwind_Context* context)\n{\n    if (version != 1 || unwind_exception == 0 || context == 0)\n        return _URC_FATAL_PHASE1_ERROR;\n\n    bool native_exception = (exceptionClass     & get_vendor_and_language) ==\n                            (kOurExceptionClass & get_vendor_and_language);\n    scan_results results;\n    if (actions & _UA_SEARCH_PHASE)\n    {\n        // Phase 1 search:  All we're looking for in phase 1 is a handler that\n        //   halts unwinding\n        scan_eh_tab(results, actions, native_exception, unwind_exception, context);\n        if (results.reason == _URC_HANDLER_FOUND)\n        {\n            // Found one.  Can we cache the results somewhere to optimize phase 2?\n            if (native_exception)\n            {\n                __cxa_exception* exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n                exception_header->handlerSwitchValue = static_cast<int>(results.ttypeIndex);\n                exception_header->actionRecord = results.actionRecord;\n                exception_header->languageSpecificData = results.languageSpecificData;\n                exception_header->catchTemp = reinterpret_cast<void*>(results.landingPad);\n                exception_header->adjustedPtr = results.adjustedPtr;\n            }\n            return _URC_HANDLER_FOUND;\n        }\n        // Did not find a catching-handler.  Return the results of the scan\n        //    (normally _URC_CONTINUE_UNWIND, but could have been _URC_FATAL_PHASE1_ERROR\n        //     if we were called improperly).\n        return results.reason;\n    }\n    if (actions & _UA_CLEANUP_PHASE)\n    {\n        // Phase 2 search:\n        //  Did we find a catching handler in phase 1?\n        if (actions & _UA_HANDLER_FRAME)\n        {\n            // Yes, phase 1 said we have a catching handler here.\n            // Did we cache the results of the scan?\n            if (native_exception)\n            {\n                // Yes, reload the results from the cache.\n                __cxa_exception* exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n                results.ttypeIndex = exception_header->handlerSwitchValue;\n                results.actionRecord = exception_header->actionRecord;\n                results.languageSpecificData = exception_header->languageSpecificData;\n                results.landingPad = reinterpret_cast<uintptr_t>(exception_header->catchTemp);\n                results.adjustedPtr = exception_header->adjustedPtr;\n            }\n            else\n            {\n                // No, do the scan again to reload the results.\n                scan_eh_tab(results, actions, native_exception, unwind_exception, context);\n                // Phase 1 told us we would find a handler.  Now in Phase 2 we\n                //   didn't find a handler.  The eh table should not be changing!\n                if (results.reason != _URC_HANDLER_FOUND)\n                    call_terminate(native_exception, unwind_exception);\n            }\n            // Jump to the handler\n            set_registers(unwind_exception, context, results);\n            return _URC_INSTALL_CONTEXT;\n        }\n        // Either we didn't do a phase 1 search (due to forced unwinding), or\n        //   phase 1 reported no catching-handlers.\n        // Search for a (non-catching) cleanup\n        scan_eh_tab(results, actions, native_exception, unwind_exception, context);\n        if (results.reason == _URC_HANDLER_FOUND)\n        {\n            // Found a non-catching handler.  Jump to it:\n            set_registers(unwind_exception, context, results);\n            return _URC_INSTALL_CONTEXT;\n        }\n        // Did not find a cleanup.  Return the results of the scan\n        //    (normally _URC_CONTINUE_UNWIND, but could have been _URC_FATAL_PHASE2_ERROR\n        //     if we were called improperly).\n        return results.reason;\n    }\n    // We were called improperly: neither a phase 1 or phase 2 search\n    return _URC_FATAL_PHASE1_ERROR;\n}\n#else\n\n#if !LIBCXXABI_USE_LLVM_UNWINDER\nextern \"C\" _Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception*, _Unwind_Context*);\n#endif\n\n// Helper function to unwind one frame.\n// ARM EHABI 7.3 and 7.4: If the personality function returns _URC_CONTINUE_UNWIND, the\n// personality routine should update the virtual register set (VRS) according to the\n// corresponding frame unwinding instructions (ARM EHABI 9.3.)\nstatic _Unwind_Reason_Code continue_unwind(_Unwind_Exception* unwind_exception,\n                                           _Unwind_Context* context)\n{\n#if LIBCXXABI_USE_LLVM_UNWINDER\n    // ARM EHABI # 6.2, # 9.2\n    //\n    //  +---- ehtp\n    //  v\n    // +--------------------------------------+\n    // | +--------+--------+--------+-------+ |\n    // | |0| prel31 to __gxx_personality_v0 | |\n    // | +--------+--------+--------+-------+ |\n    // | |      N |      unwind opcodes     | |  <-- unwind_opcodes\n    // | +--------+--------+--------+-------+ |\n    // | | Word 2        unwind opcodes     | |\n    // | +--------+--------+--------+-------+ |\n    // | ...                                  |\n    // | +--------+--------+--------+-------+ |\n    // | | Word N        unwind opcodes     | |\n    // | +--------+--------+--------+-------+ |\n    // | | LSDA                             | |  <-- lsda\n    // | | ...                              | |\n    // | +--------+--------+--------+-------+ |\n    // +--------------------------------------+\n\n    uint32_t *unwind_opcodes = unwind_exception->pr_cache.ehtp + 1;\n    size_t opcode_words = ((*unwind_opcodes >> 24) & 0xff) + 1;\n    if (_Unwind_VRS_Interpret(context, unwind_opcodes, 1, opcode_words * 4) !=\n        _URC_CONTINUE_UNWIND)\n        return _URC_FAILURE;\n#else\n    if (__gnu_unwind_frame(unwind_exception, context) != _URC_OK)\n        return _URC_FAILURE;\n#endif\n    return _URC_CONTINUE_UNWIND;\n}\n\n// ARM register names\n#if !LIBCXXABI_USE_LLVM_UNWINDER\nstatic const uint32_t REG_UCB = 12;  // Register to save _Unwind_Control_Block\n#endif\nstatic const uint32_t REG_SP = 13;\n\nstatic void save_results_to_barrier_cache(_Unwind_Exception* unwind_exception,\n                                          const scan_results& results)\n{\n    unwind_exception->barrier_cache.bitpattern[0] = (uint32_t)results.adjustedPtr;\n    unwind_exception->barrier_cache.bitpattern[1] = (uint32_t)results.actionRecord;\n    unwind_exception->barrier_cache.bitpattern[2] = (uint32_t)results.languageSpecificData;\n    unwind_exception->barrier_cache.bitpattern[3] = (uint32_t)results.landingPad;\n    unwind_exception->barrier_cache.bitpattern[4] = (uint32_t)results.ttypeIndex;\n}\n\nstatic void load_results_from_barrier_cache(scan_results& results,\n                                            const _Unwind_Exception* unwind_exception)\n{\n    results.adjustedPtr = (void*)unwind_exception->barrier_cache.bitpattern[0];\n    results.actionRecord = (const uint8_t*)unwind_exception->barrier_cache.bitpattern[1];\n    results.languageSpecificData = (const uint8_t*)unwind_exception->barrier_cache.bitpattern[2];\n    results.landingPad = (uintptr_t)unwind_exception->barrier_cache.bitpattern[3];\n    results.ttypeIndex = (int64_t)(int32_t)unwind_exception->barrier_cache.bitpattern[4];\n}\n\nextern \"C\" _Unwind_Reason_Code\n__gxx_personality_v0(_Unwind_State state,\n                     _Unwind_Exception* unwind_exception,\n                     _Unwind_Context* context)\n{\n    if (unwind_exception == 0 || context == 0)\n        return _URC_FATAL_PHASE1_ERROR;\n\n    bool native_exception = (unwind_exception->exception_class & get_vendor_and_language) ==\n                            (kOurExceptionClass & get_vendor_and_language);\n\n#if !LIBCXXABI_USE_LLVM_UNWINDER\n    // Copy the address of _Unwind_Control_Block to r12 so that\n    // _Unwind_GetLanguageSpecificData() and _Unwind_GetRegionStart() can\n    // return correct address.\n    _Unwind_SetGR(context, REG_UCB, reinterpret_cast<uint32_t>(unwind_exception));\n#endif\n\n    // Check the undocumented force unwinding behavior\n    bool is_force_unwinding = state & _US_FORCE_UNWIND;\n    state &= ~_US_FORCE_UNWIND;\n\n    scan_results results;\n    switch (state) {\n    case _US_VIRTUAL_UNWIND_FRAME:\n        if (is_force_unwinding)\n            return continue_unwind(unwind_exception, context);\n\n        // Phase 1 search:  All we're looking for in phase 1 is a handler that halts unwinding\n        scan_eh_tab(results, _UA_SEARCH_PHASE, native_exception, unwind_exception, context);\n        if (results.reason == _URC_HANDLER_FOUND)\n        {\n            unwind_exception->barrier_cache.sp = _Unwind_GetGR(context, REG_SP);\n            if (native_exception)\n                save_results_to_barrier_cache(unwind_exception, results);\n            return _URC_HANDLER_FOUND;\n        }\n        // Did not find the catch handler\n        if (results.reason == _URC_CONTINUE_UNWIND)\n            return continue_unwind(unwind_exception, context);\n        return results.reason;\n\n    case _US_UNWIND_FRAME_STARTING:\n        // TODO: Support force unwinding in the phase 2 search.\n        // NOTE: In order to call the cleanup functions, _Unwind_ForcedUnwind()\n        // will call this personality function with (_US_FORCE_UNWIND |\n        // _US_UNWIND_FRAME_STARTING).\n\n        // Phase 2 search\n        if (unwind_exception->barrier_cache.sp == _Unwind_GetGR(context, REG_SP))\n        {\n            // Found a catching handler in phase 1\n            if (native_exception)\n            {\n                // Load the result from the native exception barrier cache.\n                load_results_from_barrier_cache(results, unwind_exception);\n                results.reason = _URC_HANDLER_FOUND;\n            }\n            else\n            {\n                // Search for the catching handler again for the foreign exception.\n                scan_eh_tab(results, static_cast<_Unwind_Action>(_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME),\n                            native_exception, unwind_exception, context);\n                if (results.reason != _URC_HANDLER_FOUND)  // phase1 search should guarantee to find one\n                    call_terminate(native_exception, unwind_exception);\n            }\n\n            // Install the context for the catching handler\n            set_registers(unwind_exception, context, results);\n            return _URC_INSTALL_CONTEXT;\n        }\n\n        // Either we didn't do a phase 1 search (due to forced unwinding), or\n        //  phase 1 reported no catching-handlers.\n        // Search for a (non-catching) cleanup\n        scan_eh_tab(results, _UA_CLEANUP_PHASE, native_exception, unwind_exception, context);\n        if (results.reason == _URC_HANDLER_FOUND)\n        {\n            // Found a non-catching handler\n\n            // ARM EHABI 8.4.2: Before we can jump to the cleanup handler, we have to setup some\n            // internal data structures, so that __cxa_end_cleanup() can get unwind_exception from\n            // __cxa_get_globals().\n            __cxa_begin_cleanup(unwind_exception);\n\n            // Install the context for the cleanup handler\n            set_registers(unwind_exception, context, results);\n            return _URC_INSTALL_CONTEXT;\n        }\n\n        // Did not find any handler\n        if (results.reason == _URC_CONTINUE_UNWIND)\n            return continue_unwind(unwind_exception, context);\n        return results.reason;\n\n    case _US_UNWIND_FRAME_RESUME:\n        return continue_unwind(unwind_exception, context);\n    }\n\n    // We were called improperly: neither a phase 1 or phase 2 search\n    return _URC_FATAL_PHASE1_ERROR;\n}\n#endif\n\n\n__attribute__((noreturn))\nvoid\n__cxa_call_unexpected(void* arg)\n{\n    _Unwind_Exception* unwind_exception = static_cast<_Unwind_Exception*>(arg);\n    if (unwind_exception == 0)\n        call_terminate(false, unwind_exception);\n    __cxa_begin_catch(unwind_exception);\n    bool native_old_exception =\n        (unwind_exception->exception_class & get_vendor_and_language) ==\n        (kOurExceptionClass                & get_vendor_and_language);\n    std::unexpected_handler u_handler;\n    std::terminate_handler t_handler;\n    __cxa_exception* old_exception_header = 0;\n    int64_t ttypeIndex;\n    const uint8_t* lsda;\n    if (native_old_exception)\n    {\n        old_exception_header = (__cxa_exception*)(unwind_exception+1) - 1;\n        t_handler = old_exception_header->terminateHandler;\n        u_handler = old_exception_header->unexpectedHandler;\n        // If std::__unexpected(u_handler) rethrows the same exception,\n        //   these values get overwritten by the rethrow.  So save them now:\n#if LIBCXXABI_ARM_EHABI\n        ttypeIndex = (int64_t)(int32_t)unwind_exception->barrier_cache.bitpattern[4];\n        lsda = (const uint8_t*)unwind_exception->barrier_cache.bitpattern[2];\n#else\n        ttypeIndex = old_exception_header->handlerSwitchValue;\n        lsda = old_exception_header->languageSpecificData;\n#endif\n    }\n    else\n    {\n        t_handler = std::get_terminate();\n        u_handler = std::get_unexpected();\n    }\n    try\n    {\n        std::__unexpected(u_handler);\n    }\n    catch (...)\n    {\n        // If the old exception is foreign, then all we can do is terminate.\n        //   We have no way to recover the needed old exception spec.  There's\n        //   no way to pass that information here.  And the personality routine\n        //   can't call us directly and do anything but terminate() if we throw\n        //   from here.\n        if (native_old_exception)\n        {\n            // Have:\n            //   old_exception_header->languageSpecificData\n            //   old_exception_header->actionRecord\n            // Need\n            //   const uint8_t* classInfo\n            //   uint8_t ttypeEncoding\n            uint8_t lpStartEncoding = *lsda++;\n            const uint8_t* lpStart = (const uint8_t*)readEncodedPointer(&lsda, lpStartEncoding);\n            (void)lpStart;  // purposefully unused.  Just needed to increment lsda.\n            uint8_t ttypeEncoding = *lsda++;\n            if (ttypeEncoding == DW_EH_PE_omit)\n                std::__terminate(t_handler);\n            uintptr_t classInfoOffset = readULEB128(&lsda);\n            const uint8_t* classInfo = lsda + classInfoOffset;\n            // Is this new exception catchable by the exception spec at ttypeIndex?\n            // The answer is obviously yes if the new and old exceptions are the same exception\n            // If no\n            //    throw;\n            __cxa_eh_globals* globals = __cxa_get_globals_fast();\n            __cxa_exception* new_exception_header = globals->caughtExceptions;\n            if (new_exception_header == 0)\n                // This shouldn't be able to happen!\n                std::__terminate(t_handler);\n            bool native_new_exception =\n                (new_exception_header->unwindHeader.exception_class & get_vendor_and_language) ==\n                                                (kOurExceptionClass & get_vendor_and_language);\n            void* adjustedPtr;\n            if (native_new_exception && (new_exception_header != old_exception_header))\n            {\n                const __shim_type_info* excpType =\n                    static_cast<const __shim_type_info*>(new_exception_header->exceptionType);\n                adjustedPtr =\n                    new_exception_header->unwindHeader.exception_class == kOurDependentExceptionClass ?\n                        ((__cxa_dependent_exception*)new_exception_header)->primaryException :\n                        new_exception_header + 1;\n                if (!exception_spec_can_catch(ttypeIndex, classInfo, ttypeEncoding,\n                                              excpType, adjustedPtr, unwind_exception))\n                {\n                    // We need to __cxa_end_catch, but for the old exception,\n                    //   not the new one.  This is a little tricky ...\n                    // Disguise new_exception_header as a rethrown exception, but\n                    //   don't actually rethrow it.  This means you can temporarily\n                    //   end the catch clause enclosing new_exception_header without\n                    //   __cxa_end_catch destroying new_exception_header.\n                    new_exception_header->handlerCount = -new_exception_header->handlerCount;\n                    globals->uncaughtExceptions += 1;\n                    // Call __cxa_end_catch for new_exception_header\n                    __cxa_end_catch();\n                    // Call __cxa_end_catch for old_exception_header\n                    __cxa_end_catch();\n                    // Renter this catch clause with new_exception_header\n                    __cxa_begin_catch(&new_exception_header->unwindHeader);\n                    // Rethrow new_exception_header\n                    throw;\n                }\n            }\n            // Will a std::bad_exception be catchable by the exception spec at\n            //   ttypeIndex?\n            // If no\n            //    throw std::bad_exception();\n            const __shim_type_info* excpType =\n                static_cast<const __shim_type_info*>(&typeid(std::bad_exception));\n            std::bad_exception be;\n            adjustedPtr = &be;\n            if (!exception_spec_can_catch(ttypeIndex, classInfo, ttypeEncoding,\n                                          excpType, adjustedPtr, unwind_exception))\n            {\n                // We need to __cxa_end_catch for both the old exception and the\n                //   new exception.  Technically we should do it in that order.\n                //   But it is expedient to do it in the opposite order:\n                // Call __cxa_end_catch for new_exception_header\n                __cxa_end_catch();\n                // Throw std::bad_exception will __cxa_end_catch for\n                //   old_exception_header\n                throw be;\n            }\n        }\n    }\n    std::__terminate(t_handler);\n}\n\n}  // extern \"C\"\n\n}  // __cxxabiv1\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_thread_atexit.cpp",
    "content": "//===----------------------- cxa_thread_atexit.cpp ------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n\nnamespace __cxxabiv1 {\n\nextern \"C\" {\n\n#ifdef HAVE___CXA_THREAD_ATEXIT_IMPL\n\nint __cxa_thread_atexit(void (*dtor)(void *), void *obj,\n                        void *dso_symbol) throw() {\n  extern int __cxa_thread_atexit_impl(void (*)(void *), void *, void *);\n  return __cxa_thread_atexit_impl(dtor, obj, dso_symbol);\n}\n\n#endif // HAVE__CXA_THREAD_ATEXIT_IMPL\n\n} // extern \"C\"\n\n} // namespace __cxxabiv1\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_unexpected.cpp",
    "content": "//===------------------------- cxa_unexpected.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <cxxabi.h>\n#include \"cxa_exception.hpp\"\n\nnamespace __cxxabiv1\n{\n\n#pragma GCC visibility push(default)\n\nextern \"C\"\n{\n\n}\n\n#pragma GCC visibility pop\n\n}  // namespace __cxxabiv1\n\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_vector.cpp",
    "content": "//===-------------------------- cxa_vector.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the \"Array Construction and Destruction APIs\"\n//  http://mentorembedded.github.io/cxx-abi/abi.html#array-ctor\n//  \n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n\n#include <exception>        // for std::terminate\n\nnamespace __cxxabiv1 {\n\n#pragma mark --Helper routines and classes --\n\nnamespace {\n    inline static size_t __get_element_count ( void *p ) {\n        return static_cast <size_t *> (p)[-1];\n        }\n\n    inline static void __set_element_count ( void *p, size_t element_count ) {\n        static_cast <size_t *> (p)[-1] = element_count;\n        }\n\n\n//  A pair of classes to simplify exception handling and control flow.\n//  They get passed a block of memory in the constructor, and unless the\n//  'release' method is called, they deallocate the memory in the destructor.\n//  Preferred usage is to allocate some memory, attach it to one of these objects,\n//  and then, when all the operations to set up the memory block have succeeded,\n//  call 'release'. If any of the setup operations fail, or an exception is\n//  thrown, then the block is automatically deallocated.\n//\n//  The only difference between these two classes is the signature for the\n//  deallocation function (to match new2/new3 and delete2/delete3.\n    class st_heap_block2 {\n    public:\n        typedef void (*dealloc_f)(void *);\n        \n        st_heap_block2 ( dealloc_f dealloc, void *ptr ) \n            : dealloc_ ( dealloc ), ptr_ ( ptr ), enabled_ ( true ) {}\n        ~st_heap_block2 () { if ( enabled_ ) dealloc_ ( ptr_ ) ; }\n        void release () { enabled_ = false; }\n    \n    private:\n        dealloc_f dealloc_;\n        void *ptr_;\n        bool enabled_;\n    };\n    \n    class st_heap_block3 {\n    public:\n        typedef void (*dealloc_f)(void *, size_t);\n        \n        st_heap_block3 ( dealloc_f dealloc, void *ptr, size_t size ) \n            : dealloc_ ( dealloc ), ptr_ ( ptr ), size_ ( size ), enabled_ ( true ) {}\n        ~st_heap_block3 () { if ( enabled_ ) dealloc_ ( ptr_, size_ ) ; }\n        void release () { enabled_ = false; }\n    \n    private:\n        dealloc_f dealloc_;\n        void *ptr_;\n        size_t size_;\n        bool enabled_;\n    };\n\n    class st_cxa_cleanup {\n    public:\n        typedef void (*destruct_f)(void *);\n        \n        st_cxa_cleanup ( void *ptr, size_t &idx, size_t element_size, destruct_f destructor )\n            : ptr_ ( ptr ), idx_ ( idx ), element_size_ ( element_size ), \n                destructor_ ( destructor ), enabled_ ( true ) {}\n        ~st_cxa_cleanup () {\n            if ( enabled_ ) \n                __cxa_vec_cleanup ( ptr_, idx_, element_size_, destructor_ );\n            }\n        \n        void release () { enabled_ = false; }\n    \n    private:\n        void *ptr_;\n        size_t &idx_;\n        size_t element_size_;\n        destruct_f destructor_;\n        bool enabled_;\n    };\n    \n    class st_terminate {\n    public:\n        st_terminate ( bool enabled = true ) : enabled_ ( enabled ) {}\n        ~st_terminate () { if ( enabled_ ) std::terminate (); }\n        void release () { enabled_ = false; }\n    private:\n        bool enabled_ ;\n    };\n}\n\n#pragma mark --Externally visible routines--\n\nextern \"C\" {\n\n// Equivalent to\n// \n//   __cxa_vec_new2(element_count, element_size, padding_size, constructor,\n//                  destructor, &::operator new[], &::operator delete[])\nvoid* __cxa_vec_new(\n    size_t element_count, size_t element_size, size_t padding_size, \n        void (*constructor)(void*), void (*destructor)(void*) ) {\n\n    return __cxa_vec_new2 ( element_count, element_size, padding_size, \n        constructor, destructor, &::operator new [], &::operator delete [] );\n}\n\n\n\n// Given the number and size of elements for an array and the non-negative\n// size of prefix padding for a cookie, allocate space (using alloc) for\n// the array preceded by the specified padding, initialize the cookie if\n// the padding is non-zero, and call the given constructor on each element.\n// Return the address of the array proper, after the padding.\n// \n// If alloc throws an exception, rethrow the exception. If alloc returns\n// NULL, return NULL. If the constructor throws an exception, call\n// destructor for any already constructed elements, and rethrow the\n// exception. If the destructor throws an exception, call std::terminate.\n// \n// The constructor may be NULL, in which case it must not be called. If the\n// padding_size is zero, the destructor may be NULL; in that case it must\n// not be called.\n// \n// Neither alloc nor dealloc may be NULL.\nvoid* __cxa_vec_new2(\n    size_t element_count, size_t element_size, size_t padding_size,\n        void  (*constructor)(void*), void  (*destructor)(void*),\n        void* (*alloc)(size_t), void  (*dealloc)(void*) ) {\n\n    const size_t heap_size = element_count * element_size + padding_size;\n    char * const heap_block = static_cast<char *> ( alloc ( heap_size ));\n    char *vec_base = heap_block;\n    \n    if ( NULL != vec_base ) {\n        st_heap_block2 heap ( dealloc, heap_block );\n\n    //  put the padding before the array elements\n        if ( 0 != padding_size ) {\n            vec_base += padding_size;\n            __set_element_count ( vec_base, element_count );\n        }\n            \n    //  Construct the elements\n        __cxa_vec_ctor ( vec_base, element_count, element_size, constructor, destructor );\n        heap.release ();    // We're good!\n    }\n    \n    return vec_base;\n}\n\n\n// Same as __cxa_vec_new2 except that the deallocation function takes both\n// the object address and its size.\nvoid* __cxa_vec_new3(\n    size_t element_count, size_t element_size, size_t padding_size,\n        void  (*constructor)(void*), void  (*destructor)(void*),\n        void* (*alloc)(size_t), void  (*dealloc)(void*, size_t) ) {\n\n    const size_t heap_size = element_count * element_size + padding_size;\n    char * const heap_block = static_cast<char *> ( alloc ( heap_size ));\n    char *vec_base = heap_block;\n    \n    if ( NULL != vec_base ) {\n        st_heap_block3 heap ( dealloc, heap_block, heap_size );\n\n    //  put the padding before the array elements\n        if ( 0 != padding_size ) {\n            vec_base += padding_size;\n            __set_element_count ( vec_base, element_count );\n        }\n            \n    //  Construct the elements\n        __cxa_vec_ctor ( vec_base, element_count, element_size, constructor, destructor );\n        heap.release ();    // We're good!\n    }\n    \n    return vec_base;\n}\n \n \n// Given the (data) addresses of a destination and a source array, an\n// element count and an element size, call the given copy constructor to\n// copy each element from the source array to the destination array. The\n// copy constructor's arguments are the destination address and source\n// address, respectively. If an exception occurs, call the given destructor\n// (if non-NULL) on each copied element and rethrow. If the destructor\n// throws an exception, call terminate(). The constructor and or destructor\n// pointers may be NULL. If either is NULL, no action is taken when it\n// would have been called.\n\nvoid __cxa_vec_cctor( void*  dest_array, void*  src_array, \n    size_t element_count, size_t element_size, \n        void  (*constructor) (void*, void*), void  (*destructor)(void*) ) {\n\n    if ( NULL != constructor ) {\n        size_t idx = 0;\n        char *src_ptr  = static_cast<char *>(src_array);\n        char *dest_ptr = static_cast<char *>(dest_array);\n        st_cxa_cleanup cleanup ( dest_array, idx, element_size, destructor );        \n\n        for ( idx = 0; idx < element_count; \n                    ++idx, src_ptr += element_size, dest_ptr += element_size )\n            constructor ( dest_ptr, src_ptr );\n        cleanup.release ();     // We're good!\n    }\n}\n\n\n// Given the (data) address of an array, not including any cookie padding,\n// and the number and size of its elements, call the given constructor on\n// each element. If the constructor throws an exception, call the given\n// destructor for any already-constructed elements, and rethrow the\n// exception. If the destructor throws an exception, call terminate(). The\n// constructor and/or destructor pointers may be NULL. If either is NULL,\n// no action is taken when it would have been called.\nvoid __cxa_vec_ctor(\n    void*  array_address, size_t element_count, size_t element_size, \n       void (*constructor)(void*), void (*destructor)(void*) ) {\n\n    if ( NULL != constructor ) {\n        size_t idx;\n        char *ptr = static_cast <char *> ( array_address );\n        st_cxa_cleanup cleanup ( array_address, idx, element_size, destructor );        \n        \n    //  Construct the elements\n        for ( idx = 0; idx < element_count; ++idx, ptr += element_size )\n            constructor ( ptr );\n        cleanup.release ();     // We're good!\n    }\n}\n\n// Given the (data) address of an array, the number of elements, and the\n// size of its elements, call the given destructor on each element. If the\n// destructor throws an exception, rethrow after destroying the remaining\n// elements if possible. If the destructor throws a second exception, call\n// terminate(). The destructor pointer may be NULL, in which case this\n// routine does nothing.\nvoid __cxa_vec_dtor(\n    void*  array_address, size_t element_count, size_t element_size, \n       void (*destructor)(void*) ) {\n    \n    if ( NULL != destructor ) {\n        char *ptr = static_cast <char *> (array_address);\n        size_t idx = element_count;\n        st_cxa_cleanup cleanup ( array_address, idx, element_size, destructor );        \n        {\n            st_terminate exception_guard (__cxa_uncaught_exception ());\n            ptr +=  element_count * element_size;   // one past the last element\n\n            while ( idx-- > 0 ) {\n                ptr -= element_size;\n                destructor ( ptr );\n            }\n            exception_guard.release (); //  We're good !\n        }\n        cleanup.release ();     // We're still good!\n    }\n}\n\n// Given the (data) address of an array, the number of elements, and the\n// size of its elements, call the given destructor on each element. If the\n// destructor throws an exception, call terminate(). The destructor pointer\n// may be NULL, in which case this routine does nothing.\nvoid __cxa_vec_cleanup( void* array_address, size_t element_count,\n        size_t element_size, void  (*destructor)(void*) ) {\n\n    if ( NULL != destructor ) {\n        char *ptr = static_cast <char *> (array_address);\n        size_t idx = element_count;\n        st_terminate exception_guard;\n        \n        ptr += element_count * element_size;    // one past the last element\n        while ( idx-- > 0 ) {\n            ptr -= element_size;\n            destructor ( ptr );\n            }\n        exception_guard.release ();     // We're done!\n    }\n}\n\n\n// If the array_address is NULL, return immediately. Otherwise, given the\n// (data) address of an array, the non-negative size of prefix padding for\n// the cookie, and the size of its elements, call the given destructor on\n// each element, using the cookie to determine the number of elements, and\n// then delete the space by calling ::operator delete[](void *). If the\n// destructor throws an exception, rethrow after (a) destroying the\n// remaining elements, and (b) deallocating the storage. If the destructor\n// throws a second exception, call terminate(). If padding_size is 0, the\n// destructor pointer must be NULL. If the destructor pointer is NULL, no\n// destructor call is to be made.\n// \n// The intent of this function is to permit an implementation to call this\n// function when confronted with an expression of the form delete[] p in\n// the source code, provided that the default deallocation function can be\n// used. Therefore, the semantics of this function are consistent with\n// those required by the standard. The requirement that the deallocation\n// function be called even if the destructor throws an exception derives\n// from the resolution to DR 353 to the C++ standard, which was adopted in\n// April, 2003.\nvoid __cxa_vec_delete( void* array_address,\n        size_t element_size, size_t padding_size, void  (*destructor)(void*) ) {\n\n    __cxa_vec_delete2 ( array_address, element_size, padding_size,\n               destructor, &::operator delete [] );\n}\n\n\n// Same as __cxa_vec_delete, except that the given function is used for\n// deallocation instead of the default delete function. If dealloc throws\n// an exception, the result is undefined. The dealloc pointer may not be\n// NULL.\nvoid __cxa_vec_delete2( void* array_address,\n        size_t element_size, size_t padding_size, \n        void  (*destructor)(void*), void  (*dealloc)(void*) ) {\n\n    if ( NULL != array_address ) {\n        char *vec_base   = static_cast <char *> (array_address);\n        char *heap_block = vec_base - padding_size;\n        st_heap_block2 heap ( dealloc, heap_block );\n        \n        if ( 0 != padding_size && NULL != destructor ) // call the destructors\n            __cxa_vec_dtor ( array_address, __get_element_count ( vec_base ), \n                                    element_size, destructor );\n    }\n}\n\n\n// Same as __cxa_vec_delete, except that the given function is used for\n// deallocation instead of the default delete function. The deallocation\n// function takes both the object address and its size. If dealloc throws\n// an exception, the result is undefined. The dealloc pointer may not be\n// NULL.\nvoid __cxa_vec_delete3( void* array_address, \n        size_t element_size, size_t padding_size, \n        void  (*destructor)(void*), void  (*dealloc) (void*, size_t)) {\n\n    if ( NULL != array_address ) {\n        char *vec_base   = static_cast <char *> (array_address);\n        char *heap_block = vec_base - padding_size;\n        const size_t element_count = padding_size ? __get_element_count ( vec_base ) : 0;\n        const size_t heap_block_size = element_size * element_count + padding_size;\n        st_heap_block3 heap ( dealloc, heap_block, heap_block_size );\n\n        if ( 0 != padding_size && NULL != destructor ) // call the destructors\n            __cxa_vec_dtor ( array_address, element_count, element_size, destructor );\n    }\n}\n\n\n}  // extern \"C\"\n\n}  // abi\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/cxa_virtual.cpp",
    "content": "//===-------------------------- cxa_virtual.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n#include \"abort_message.h\"\n\nnamespace __cxxabiv1\n{\n\nextern \"C\"\n{\n\nLIBCXXABI_NORETURN\nvoid __cxa_pure_virtual(void) {\n    abort_message(\"Pure virtual function called!\");\n}\n\nLIBCXXABI_NORETURN\nvoid __cxa_deleted_virtual(void) {\n    abort_message(\"Deleted virtual function called!\");\n}\n\n}  // extern \"C\"\n\n}  // abi\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/exception.cpp",
    "content": "//===---------------------------- exception.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n\n#pragma GCC visibility push(default)\n\nnamespace std\n{\n\n// exception\n\nexception::~exception() _NOEXCEPT\n{\n}\n\nconst char* exception::what() const _NOEXCEPT\n{\n  return \"std::exception\";\n}\n\n// bad_exception\n\nbad_exception::~bad_exception() _NOEXCEPT\n{\n}\n\nconst char* bad_exception::what() const _NOEXCEPT\n{\n  return \"std::bad_exception\";\n}\n\n}  // std\n\n#pragma GCC visibility pop\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/fallback_malloc.ipp",
    "content": "//===------------------------ fallback_malloc.ipp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//  \n//  This file implements the \"Exception Handling APIs\"\n//  http://mentorembedded.github.io/cxx-abi/abi-eh.html\n//  \n//===----------------------------------------------------------------------===//\n\n#include \"config.h\"\n\n//  A small, simple heap manager based (loosely) on \n//  the startup heap manager from FreeBSD, optimized for space.\n//\n//  Manages a fixed-size memory pool, supports malloc and free only.\n//  No support for realloc.\n//\n//  Allocates chunks in multiples of four bytes, with a four byte header\n//  for each chunk. The overhead of each chunk is kept low by keeping pointers\n//  as two byte offsets within the heap, rather than (4 or 8 byte) pointers.\n\nnamespace {\n\n// When POSIX threads are not available, make the mutex operations a nop\n#if LIBCXXABI_HAS_NO_THREADS\nstatic void * heap_mutex = 0;\n#else\nstatic pthread_mutex_t heap_mutex = PTHREAD_MUTEX_INITIALIZER;\n#endif\n\nclass mutexor {\npublic:\n#if LIBCXXABI_HAS_NO_THREADS\n    mutexor ( void * ) {}\n    ~mutexor () {}\n#else\n    mutexor ( pthread_mutex_t *m ) : mtx_(m) { pthread_mutex_lock ( mtx_ ); }\n    ~mutexor () { pthread_mutex_unlock ( mtx_ ); }\n#endif\nprivate:\n    mutexor ( const mutexor &rhs );\n    mutexor & operator = ( const mutexor &rhs );\n#if !LIBCXXABI_HAS_NO_THREADS\n    pthread_mutex_t *mtx_;\n#endif\n    };\n\n        \n#define HEAP_SIZE   512\nchar heap [ HEAP_SIZE ];\n\ntypedef unsigned short heap_offset;\ntypedef unsigned short heap_size;\n\nstruct heap_node {\n    heap_offset next_node;  // offset into heap\n    heap_size   len;        // size in units of \"sizeof(heap_node)\"\n};\n\nstatic const heap_node *list_end = (heap_node *) ( &heap [ HEAP_SIZE ] );   // one past the end of the heap\nstatic heap_node *freelist = NULL;\n\nheap_node *node_from_offset ( const heap_offset offset )\n    { return (heap_node *) ( heap + ( offset * sizeof (heap_node))); }\n\nheap_offset offset_from_node ( const heap_node *ptr )\n    { return static_cast<heap_offset>(static_cast<size_t>(((char *) ptr ) - heap)  / sizeof (heap_node)); }\n \nvoid init_heap () {\n    freelist = (heap_node *) heap;\n    freelist->next_node = offset_from_node ( list_end );\n    freelist->len = HEAP_SIZE / sizeof (heap_node);\n    }\n    \n//  How big a chunk we allocate\nsize_t alloc_size (size_t len)\n    { return (len + sizeof(heap_node) - 1) / sizeof(heap_node) + 1; }\n\nbool is_fallback_ptr ( void *ptr )\n    { return ptr >= heap && ptr < ( heap + HEAP_SIZE ); }\n\nvoid *fallback_malloc(size_t len) {\n    heap_node *p, *prev;\n    const size_t nelems = alloc_size ( len );\n    mutexor mtx ( &heap_mutex );\n    \n    if ( NULL == freelist )\n        init_heap ();\n\n//  Walk the free list, looking for a \"big enough\" chunk\n    for (p = freelist, prev = 0; \n            p && p != list_end;     prev = p, p = node_from_offset ( p->next_node)) {\n\n        if (p->len > nelems) {  //  chunk is larger, shorten, and return the tail\n            heap_node *q;\n            \n            p->len -= nelems;\n            q = p + p->len;\n            q->next_node = 0;\n            q->len = static_cast<heap_size>(nelems);\n            return (void *) (q + 1);\n        }\n        \n        if (p->len == nelems) { // exact size match\n            if (prev == 0)\n                freelist = node_from_offset(p->next_node);\n            else\n                prev->next_node = p->next_node;\n            p->next_node = 0;\n            return (void *) (p + 1);\n        }\n    }\n    return NULL;    // couldn't find a spot big enough\n}\n\n//  Return the start of the next block\nheap_node *after ( struct heap_node *p ) { return p + p->len; }\n\nvoid fallback_free (void *ptr) {\n    struct heap_node *cp = ((struct heap_node *) ptr) - 1;      // retrieve the chunk\n    struct heap_node *p, *prev;\n\n    mutexor mtx ( &heap_mutex );\n\n#ifdef DEBUG_FALLBACK_MALLOC\n        std::cout << \"Freeing item at \" << offset_from_node ( cp ) << \" of size \" << cp->len << std::endl;\n#endif\n\n    for (p = freelist, prev = 0; \n            p && p != list_end;     prev = p, p = node_from_offset (p->next_node)) {\n#ifdef DEBUG_FALLBACK_MALLOC\n        std::cout << \"  p, cp, after (p), after(cp) \"\n            << offset_from_node ( p ) << ' '\n            << offset_from_node ( cp ) << ' '\n            << offset_from_node ( after ( p )) << ' '\n            << offset_from_node ( after ( cp )) << std::endl;\n#endif\n        if ( after ( p ) == cp ) {\n#ifdef DEBUG_FALLBACK_MALLOC\n            std::cout << \"  Appending onto chunk at \" << offset_from_node ( p ) << std::endl;\n#endif\n            p->len += cp->len;  // make the free heap_node larger\n            return;\n            }\n        else if ( after ( cp ) == p ) { // there's a free heap_node right after\n#ifdef DEBUG_FALLBACK_MALLOC\n            std::cout << \"  Appending free chunk at \" << offset_from_node ( p ) << std::endl;\n#endif\n            cp->len += p->len;\n            if ( prev == 0 ) {\n                freelist = cp;\n                cp->next_node = p->next_node;\n                }\n            else\n                prev->next_node = offset_from_node(cp);\n            return;\n            }\n        }\n//  Nothing to merge with, add it to the start of the free list\n#ifdef DEBUG_FALLBACK_MALLOC\n            std::cout << \"  Making new free list entry \" << offset_from_node ( cp ) << std::endl;\n#endif\n    cp->next_node = offset_from_node ( freelist );\n    freelist = cp;\n}\n\n#ifdef INSTRUMENT_FALLBACK_MALLOC\nsize_t print_free_list () {\n    struct heap_node *p, *prev;\n    heap_size total_free = 0;\n    if ( NULL == freelist )\n        init_heap ();\n    \n    for (p = freelist, prev = 0; \n            p && p != list_end;     prev = p, p = node_from_offset (p->next_node)) {\n        std::cout << ( prev == 0 ? \"\" : \"  \")  << \"Offset: \" << offset_from_node ( p ) \n                << \"\\tsize: \" << p->len << \" Next: \" << p->next_node << std::endl;\n        total_free += p->len;\n        }\n    std::cout << \"Total Free space: \" << total_free << std::endl;\n    return total_free;\n    }\n#endif\n}  // end unnamed namespace\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/private_typeinfo.cpp",
    "content": "//===----------------------- private_typeinfo.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"private_typeinfo.h\"\n\n// The flag _LIBCXX_DYNAMIC_FALLBACK is used to make dynamic_cast more\n// forgiving when type_info's mistakenly have hidden visibility and thus\n// multiple type_infos can exist for a single type.\n//\n// When _LIBCXX_DYNAMIC_FALLBACK is defined, and only in the case where\n// there is a detected inconsistency in the type_info hierarchy during a\n// dynamic_cast, then the equality operation will fall back to using strcmp\n// on type_info names to determine type_info equality.\n//\n// This change happens *only* under dynamic_cast, and only when\n// dynamic_cast is faced with the choice:  abort, or possibly give back the\n// wrong answer.  If when the dynamic_cast is done with this fallback\n// algorithm and an inconsistency is still detected, dynamic_cast will call\n// abort with an appropriate message.\n//\n// The current implementation of _LIBCXX_DYNAMIC_FALLBACK requires a\n// printf-like function called syslog:\n//\n//     void syslog(int facility_priority, const char* format, ...);\n//\n// If you want this functionality but your platform doesn't have syslog,\n// just implement it in terms of fprintf(stderr, ...).\n//\n// _LIBCXX_DYNAMIC_FALLBACK is currently off by default.\n\n#ifdef _LIBCXX_DYNAMIC_FALLBACK\n#include \"abort_message.h\"\n#include <string.h>\n#include <sys/syslog.h>\n#endif\n\n// On Windows, typeids are different between DLLs and EXEs, so comparing\n// type_info* will work for typeids from the same compiled file but fail\n// for typeids from a DLL and an executable. Among other things, exceptions\n// are not caught by handlers since can_catch() returns false.\n//\n// Defining _LIBCXX_DYNAMIC_FALLBACK does not help since can_catch() calls\n// is_equal() with use_strcmp=false so the string names are not compared.\n\n#ifdef _WIN32\n#include <string.h>\n#endif\n\nnamespace __cxxabiv1\n{\n\n#pragma GCC visibility push(hidden)\n\n#ifdef _LIBCXX_DYNAMIC_FALLBACK\n\ninline\nbool\nis_equal(const std::type_info* x, const std::type_info* y, bool use_strcmp)\n{\n    if (!use_strcmp)\n        return x == y;\n    return strcmp(x->name(), y->name()) == 0;\n}\n\n#else  // !_LIBCXX_DYNAMIC_FALLBACK\n\ninline\nbool\nis_equal(const std::type_info* x, const std::type_info* y, bool)\n{\n#ifndef _WIN32\n    return x == y;\n#else\n    return (x == y) || (strcmp(x->name(), y->name()) == 0);\n#endif\n}\n\n#endif  // _LIBCXX_DYNAMIC_FALLBACK\n\n// __shim_type_info\n\n__shim_type_info::~__shim_type_info()\n{\n}\n\nvoid __shim_type_info::noop1() const {}\nvoid __shim_type_info::noop2() const {}\n\n// __fundamental_type_info\n\n// This miraculously (compiler magic) emits the type_info's for:\n//   1. all of the fundamental types\n//   2. pointers to all of the fundamental types\n//   3. pointers to all of the const fundamental types\n__fundamental_type_info::~__fundamental_type_info()\n{\n}\n\n// __array_type_info\n\n__array_type_info::~__array_type_info()\n{\n}\n\n// __function_type_info\n\n__function_type_info::~__function_type_info()\n{\n}\n\n// __enum_type_info\n\n__enum_type_info::~__enum_type_info()\n{\n}\n\n// __class_type_info\n\n__class_type_info::~__class_type_info()\n{\n}\n\n// __si_class_type_info\n\n__si_class_type_info::~__si_class_type_info()\n{\n}\n\n// __vmi_class_type_info\n\n__vmi_class_type_info::~__vmi_class_type_info()\n{\n}\n\n// __pbase_type_info\n\n__pbase_type_info::~__pbase_type_info()\n{\n}\n\n// __pointer_type_info\n\n__pointer_type_info::~__pointer_type_info()\n{\n}\n\n// __pointer_to_member_type_info\n\n__pointer_to_member_type_info::~__pointer_to_member_type_info()\n{\n}\n\n// can_catch\n\n// A handler is a match for an exception object of type E if\n//   1. The handler is of type cv T or cv T& and E and T are the same type\n//      (ignoring the top-level cv-qualifiers), or\n//   2. the handler is of type cv T or cv T& and T is an unambiguous public\n//       base class of E, or\n//   3. the handler is of type cv1 T* cv2 and E is a pointer type that can be\n//      converted to the type of the handler by either or both of\n//      A. a standard pointer conversion (4.10) not involving conversions to\n//         pointers to private or protected or ambiguous classes\n//      B. a qualification conversion\n//   4. the handler is a pointer or pointer to member type and E is\n//      std::nullptr_t.\n\n// adjustedPtr:\n//\n// catch (A& a) : adjustedPtr == &a\n// catch (A* a) : adjustedPtr == a\n// catch (A** a) : adjustedPtr == a\n//\n// catch (D2& d2) : adjustedPtr == &d2  (d2 is base class of thrown object)\n// catch (D2* d2) : adjustedPtr == d2\n// catch (D2*& d2) : adjustedPtr == d2\n//\n// catch (...) : adjustedPtr == & of the exception\n\n// Handles bullet 1\nbool\n__fundamental_type_info::can_catch(const __shim_type_info* thrown_type,\n                                   void*&) const\n{\n    return is_equal(this, thrown_type, false);\n}\n\nbool\n__array_type_info::can_catch(const __shim_type_info*, void*&) const\n{\n    // We can get here if someone tries to catch an array by reference.\n    //   However if someone tries to throw an array, it immediately gets\n    //   converted to a pointer, which will not convert back to an array\n    //   at the catch clause.  So this can never catch anything.\n    return false;\n}\n\nbool\n__function_type_info::can_catch(const __shim_type_info*, void*&) const\n{\n    // We can get here if someone tries to catch a function by reference.\n    //   However if someone tries to throw a function, it immediately gets\n    //   converted to a pointer, which will not convert back to a function\n    //   at the catch clause.  So this can never catch anything.\n    return false;\n}\n\n// Handles bullet 1\nbool\n__enum_type_info::can_catch(const __shim_type_info* thrown_type,\n                            void*&) const\n{\n    return is_equal(this, thrown_type, false);\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wmissing-field-initializers\"\n\n// Handles bullets 1 and 2\nbool\n__class_type_info::can_catch(const __shim_type_info* thrown_type,\n                             void*& adjustedPtr) const\n{\n    // bullet 1\n    if (is_equal(this, thrown_type, false))\n        return true;\n    const __class_type_info* thrown_class_type =\n        dynamic_cast<const __class_type_info*>(thrown_type);\n    if (thrown_class_type == 0)\n        return false;\n    // bullet 2\n    __dynamic_cast_info info = {thrown_class_type, 0, this, -1, 0};\n    info.number_of_dst_type = 1;\n    thrown_class_type->has_unambiguous_public_base(&info, adjustedPtr, public_path);\n    if (info.path_dst_ptr_to_static_ptr == public_path)\n    {\n        adjustedPtr = const_cast<void*>(info.dst_ptr_leading_to_static_ptr);\n        return true;\n    }\n    return false;\n}\n\n#pragma clang diagnostic pop\n\nvoid\n__class_type_info::process_found_base_class(__dynamic_cast_info* info,\n                                               void* adjustedPtr,\n                                               int path_below) const\n{\n    if (info->dst_ptr_leading_to_static_ptr == 0)\n    {\n        // First time here\n        info->dst_ptr_leading_to_static_ptr = adjustedPtr;\n        info->path_dst_ptr_to_static_ptr = path_below;\n        info->number_to_static_ptr = 1;\n    }\n    else if (info->dst_ptr_leading_to_static_ptr == adjustedPtr)\n    {\n        // We've been here before.  Update path to \"most public\"\n        if (info->path_dst_ptr_to_static_ptr == not_public_path)\n            info->path_dst_ptr_to_static_ptr = path_below;\n    }\n    else\n    {\n        // We've detected an ambiguous cast from (thrown_class_type, adjustedPtr)\n        //   to a static_type\n        info->number_to_static_ptr += 1;\n        info->path_dst_ptr_to_static_ptr = not_public_path;\n        info->search_done = true;\n    }\n}\n\nvoid\n__class_type_info::has_unambiguous_public_base(__dynamic_cast_info* info,\n                                               void* adjustedPtr,\n                                               int path_below) const\n{\n    if (is_equal(this, info->static_type, false))\n        process_found_base_class(info, adjustedPtr, path_below);\n}\n\nvoid\n__si_class_type_info::has_unambiguous_public_base(__dynamic_cast_info* info,\n                                                  void* adjustedPtr,\n                                                  int path_below) const\n{\n    if (is_equal(this, info->static_type, false))\n        process_found_base_class(info, adjustedPtr, path_below);\n    else\n        __base_type->has_unambiguous_public_base(info, adjustedPtr, path_below);\n}\n\nvoid\n__base_class_type_info::has_unambiguous_public_base(__dynamic_cast_info* info,\n                                                    void* adjustedPtr,\n                                                    int path_below) const\n{\n    ptrdiff_t offset_to_base = 0;\n    if (adjustedPtr != nullptr)\n    {\n        offset_to_base = __offset_flags >> __offset_shift;\n        if (__offset_flags & __virtual_mask)\n        {\n            const char* vtable = *static_cast<const char*const*>(adjustedPtr);\n            offset_to_base = *reinterpret_cast<const ptrdiff_t*>(vtable + offset_to_base);\n        }\n    }\n    __base_type->has_unambiguous_public_base(\n            info,\n            static_cast<char*>(adjustedPtr) + offset_to_base,\n            (__offset_flags & __public_mask) ? path_below : not_public_path);\n}\n\nvoid\n__vmi_class_type_info::has_unambiguous_public_base(__dynamic_cast_info* info,\n                                                   void* adjustedPtr,\n                                                   int path_below) const\n{\n    if (is_equal(this, info->static_type, false))\n        process_found_base_class(info, adjustedPtr, path_below);\n    else\n    {\n        typedef const __base_class_type_info* Iter;\n        const Iter e = __base_info + __base_count;\n        Iter p = __base_info;\n        p->has_unambiguous_public_base(info, adjustedPtr, path_below);\n        if (++p < e)\n        {\n            do\n            {\n                p->has_unambiguous_public_base(info, adjustedPtr, path_below);\n                if (info->search_done)\n                    break;\n            } while (++p < e);\n        }\n    }\n}\n\n// Handles bullets 1 and 4 for both pointers and member pointers\nbool\n__pbase_type_info::can_catch(const __shim_type_info* thrown_type,\n                             void*&) const\n{\n    return is_equal(this, thrown_type, false) ||\n           is_equal(thrown_type, &typeid(std::nullptr_t), false);\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wmissing-field-initializers\"\n\n// Handles bullets 1, 3 and 4\n// NOTE: It might not be safe to adjust the pointer if it is not not a pointer\n// type. Only adjust the pointer after we know it is safe to do so.\nbool\n__pointer_type_info::can_catch(const __shim_type_info* thrown_type,\n                               void*& adjustedPtr) const\n{\n    // bullets 1 and 4\n    if (__pbase_type_info::can_catch(thrown_type, adjustedPtr)) {\n        if (adjustedPtr != NULL)\n            adjustedPtr = *static_cast<void**>(adjustedPtr);\n        return true;\n    }\n    // bullet 3\n    const __pointer_type_info* thrown_pointer_type =\n        dynamic_cast<const __pointer_type_info*>(thrown_type);\n    if (thrown_pointer_type == 0)\n        return false;\n    // Do the dereference adjustment\n    if (adjustedPtr != NULL)\n        adjustedPtr = *static_cast<void**>(adjustedPtr);\n    // bullet 3B\n    if (thrown_pointer_type->__flags & ~__flags)\n        return false;\n    if (is_equal(__pointee, thrown_pointer_type->__pointee, false))\n        return true;\n    // bullet 3A\n    if (is_equal(__pointee, &typeid(void), false))\n        return true;\n    const __class_type_info* catch_class_type =\n        dynamic_cast<const __class_type_info*>(__pointee);\n    if (catch_class_type == 0)\n        return false;\n    const __class_type_info* thrown_class_type =\n        dynamic_cast<const __class_type_info*>(thrown_pointer_type->__pointee);\n    if (thrown_class_type == 0)\n        return false;\n    __dynamic_cast_info info = {thrown_class_type, 0, catch_class_type, -1, 0};\n    info.number_of_dst_type = 1;\n    thrown_class_type->has_unambiguous_public_base(&info, adjustedPtr, public_path);\n    if (info.path_dst_ptr_to_static_ptr == public_path)\n    {\n        if (adjustedPtr != NULL)\n            adjustedPtr = const_cast<void*>(info.dst_ptr_leading_to_static_ptr);\n        return true;\n    }\n    return false;\n}\n\n#pragma clang diagnostic pop\n\n#pragma GCC visibility pop\n#pragma GCC visibility push(default)\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wmissing-field-initializers\"\n\n// __dynamic_cast\n\n// static_ptr: pointer to an object of type static_type; nonnull, and since the\n//   object is polymorphic, *(void**)static_ptr is a virtual table pointer.\n//   static_ptr is &v in the expression dynamic_cast<T>(v).\n// static_type: static type of the object pointed to by static_ptr.\n// dst_type: destination type of the cast (the \"T\" in \"dynamic_cast<T>(v)\").\n// src2dst_offset: a static hint about the location of the\n//                 source subobject with respect to the complete object;\n//                 special negative values are:\n//                     -1: no hint\n//                     -2: static_type is not a public base of dst_type\n//                     -3: static_type is a multiple public base type but never a\n//                         virtual base type\n//                 otherwise, the static_type type is a unique public nonvirtual\n//                 base type of dst_type at offset src2dst_offset from the\n//                 origin of dst_type.\n//\n// (dynamic_ptr, dynamic_type) are the run time type of the complete object\n// referred to by static_ptr and a pointer to it.  These can be found from\n// static_ptr for polymorphic types.\n// static_type is guaranteed to be a polymorphic type.\n//\n// (dynamic_ptr, dynamic_type) is the root of a DAG that grows upward.  Each\n// node of the tree represents a base class/object of its parent (or parents) below.\n// Each node is uniquely represented by a pointer to the object, and a pointer\n// to a type_info - its type.  Different nodes may have the same pointer and\n// different nodes may have the same type.  But only one node has a specific\n// (pointer-value, type) pair.  In C++ two objects of the same type can not\n// share the same address.\n//\n// There are two flavors of nodes which have the type dst_type:\n//    1.  Those that are derived from (below) (static_ptr, static_type).\n//    2.  Those that are not derived from (below) (static_ptr, static_type).\n//\n// Invariants of the DAG:\n//\n// There is at least one path from the root (dynamic_ptr, dynamic_type) to\n// the node (static_ptr, static_type).  This path may or may not be public.\n// There may be more than one such path (some public some not).  Such a path may\n// or may not go through a node having type dst_type.\n//\n// No node of type T appears above a node of the same type.  That means that\n// there is only one node with dynamic_type.  And if dynamic_type == dst_type,\n// then there is only one dst_type in the DAG.\n//\n// No node of type dst_type appears above a node of type static_type.  Such\n// DAG's are possible in C++, but the compiler computes those dynamic_casts at\n// compile time, and only calls __dynamic_cast when dst_type lies below\n// static_type in the DAG.\n//\n// dst_type != static_type:  The compiler computes the dynamic_cast in this case too.\n// dynamic_type != static_type:  The compiler computes the dynamic_cast in this case too.\n//\n// Returns:\n//\n// If there is exactly one dst_type of flavor 1, and\n//    If there is a public path from that dst_type to (static_ptr, static_type), or\n//    If there are 0 dst_types of flavor 2, and there is a public path from\n//        (dynamic_ptr, dynamic_type) to (static_ptr, static_type) and a public\n//        path from (dynamic_ptr, dynamic_type) to the one dst_type, then return\n//        a pointer to that dst_type.\n// Else if there are 0 dst_types of flavor 1 and exactly 1 dst_type of flavor 2, and\n//    if there is a public path from (dynamic_ptr, dynamic_type) to\n//    (static_ptr, static_type) and a public path from (dynamic_ptr, dynamic_type)\n//    to the one dst_type, then return a pointer to that one dst_type.\n// Else return nullptr.\n//\n// If dynamic_type == dst_type, then the above algorithm collapses to the\n// following cheaper algorithm:\n//\n// If there is a public path from (dynamic_ptr, dynamic_type) to\n//    (static_ptr, static_type), then return dynamic_ptr.\n// Else return nullptr.\nextern \"C\"\nvoid*\n__dynamic_cast(const void* static_ptr,\n               const __class_type_info* static_type,\n               const __class_type_info* dst_type,\n               std::ptrdiff_t src2dst_offset)\n{\n    // Possible future optimization:  Take advantage of src2dst_offset\n    // Currently clang always sets src2dst_offset to -1 (no hint).\n\n    // Get (dynamic_ptr, dynamic_type) from static_ptr\n    void** vtable = *(void***)static_ptr;\n    ptrdiff_t offset_to_derived = reinterpret_cast<ptrdiff_t>(vtable[-2]);\n    const void* dynamic_ptr = static_cast<const char*>(static_ptr) + offset_to_derived;\n    const __class_type_info* dynamic_type = static_cast<const __class_type_info*>(vtable[-1]);\n\n    // Initialize answer to nullptr.  This will be changed from the search\n    //    results if a non-null answer is found.  Regardless, this is what will\n    //    be returned.\n    const void* dst_ptr = 0;\n    // Initialize info struct for this search.\n    __dynamic_cast_info info = {dst_type, static_ptr, static_type, src2dst_offset, 0};\n\n    // Find out if we can use a giant short cut in the search\n    if (is_equal(dynamic_type, dst_type, false))\n    {\n        // Using giant short cut.  Add that information to info.\n        info.number_of_dst_type = 1;\n        // Do the  search\n        dynamic_type->search_above_dst(&info, dynamic_ptr, dynamic_ptr, public_path, false);\n#ifdef _LIBCXX_DYNAMIC_FALLBACK\n        // The following if should always be false because we should definitely\n        //   find (static_ptr, static_type), either on a public or private path\n        if (info.path_dst_ptr_to_static_ptr == unknown)\n        {\n            // We get here only if there is some kind of visibility problem\n            //   in client code.\n            syslog(LOG_ERR, \"dynamic_cast error 1: Both of the following type_info's \"\n                    \"should have public visibility.  At least one of them is hidden. %s\"\n                    \", %s.\\n\", static_type->name(), dynamic_type->name());\n            // Redo the search comparing type_info's using strcmp\n            info = {dst_type, static_ptr, static_type, src2dst_offset, 0};\n            info.number_of_dst_type = 1;\n            dynamic_type->search_above_dst(&info, dynamic_ptr, dynamic_ptr, public_path, true);\n        }\n#endif  // _LIBCXX_DYNAMIC_FALLBACK\n        // Query the search.\n        if (info.path_dst_ptr_to_static_ptr == public_path)\n            dst_ptr = dynamic_ptr;\n    }\n    else\n    {\n        // Not using giant short cut.  Do the search\n        dynamic_type->search_below_dst(&info, dynamic_ptr, public_path, false);\n #ifdef _LIBCXX_DYNAMIC_FALLBACK\n        // The following if should always be false because we should definitely\n        //   find (static_ptr, static_type), either on a public or private path\n        if (info.path_dst_ptr_to_static_ptr == unknown &&\n            info.path_dynamic_ptr_to_static_ptr == unknown)\n        {\n            syslog(LOG_ERR, \"dynamic_cast error 2: One or more of the following type_info's \"\n                            \" has hidden visibility.  They should all have public visibility.  \"\n                            \" %s, %s, %s.\\n\", static_type->name(), dynamic_type->name(),\n                    dst_type->name());\n            // Redo the search comparing type_info's using strcmp\n            info = {dst_type, static_ptr, static_type, src2dst_offset, 0};\n            dynamic_type->search_below_dst(&info, dynamic_ptr, public_path, true);\n        }\n#endif  // _LIBCXX_DYNAMIC_FALLBACK\n        // Query the search.\n        switch (info.number_to_static_ptr)\n        {\n        case 0:\n            if (info.number_to_dst_ptr == 1 &&\n                    info.path_dynamic_ptr_to_static_ptr == public_path &&\n                    info.path_dynamic_ptr_to_dst_ptr == public_path)\n                dst_ptr = info.dst_ptr_not_leading_to_static_ptr;\n            break;\n        case 1:\n            if (info.path_dst_ptr_to_static_ptr == public_path ||\n                   (\n                       info.number_to_dst_ptr == 0 &&\n                       info.path_dynamic_ptr_to_static_ptr == public_path &&\n                       info.path_dynamic_ptr_to_dst_ptr == public_path\n                   )\n               )\n                dst_ptr = info.dst_ptr_leading_to_static_ptr;\n            break;\n        }\n    }\n    return const_cast<void*>(dst_ptr);\n}\n\n#pragma clang diagnostic pop\n\n#pragma GCC visibility pop\n#pragma GCC visibility push(hidden)\n\n// Call this function when you hit a static_type which is a base (above) a dst_type.\n// Let caller know you hit a static_type.  But only start recording details if\n// this is (static_ptr, static_type) -- the node we are casting from.\n// If this is (static_ptr, static_type)\n//   Record the path (public or not) from the dst_type to here.  There may be\n//   multiple paths from the same dst_type to here, record the \"most public\" one.\n//   Record the dst_ptr as pointing to (static_ptr, static_type).\n//   If more than one (dst_ptr, dst_type) points to (static_ptr, static_type),\n//   then mark this dyanmic_cast as ambiguous and stop the search.\nvoid\n__class_type_info::process_static_type_above_dst(__dynamic_cast_info* info,\n                                                 const void* dst_ptr,\n                                                 const void* current_ptr,\n                                                 int path_below) const\n{\n    // Record that we found a static_type\n    info->found_any_static_type = true;\n    if (current_ptr == info->static_ptr)\n    {\n        // Record that we found (static_ptr, static_type)\n        info->found_our_static_ptr = true;\n        if (info->dst_ptr_leading_to_static_ptr == 0)\n        {\n            // First time here\n            info->dst_ptr_leading_to_static_ptr = dst_ptr;\n            info->path_dst_ptr_to_static_ptr = path_below;\n            info->number_to_static_ptr = 1;\n            // If there is only one dst_type in the entire tree and the path from\n            //    there to here is public then we are done!\n            if (info->number_of_dst_type == 1 && info->path_dst_ptr_to_static_ptr == public_path)\n                info->search_done = true;\n        }\n        else if (info->dst_ptr_leading_to_static_ptr == dst_ptr)\n        {\n            // We've been here before.  Update path to \"most public\"\n            if (info->path_dst_ptr_to_static_ptr == not_public_path)\n                info->path_dst_ptr_to_static_ptr = path_below;\n            // If there is only one dst_type in the entire tree and the path from\n            //    there to here is public then we are done!\n            if (info->number_of_dst_type == 1 && info->path_dst_ptr_to_static_ptr == public_path)\n                info->search_done = true;\n        }\n        else\n        {\n            // We've detected an ambiguous cast from (static_ptr, static_type)\n            //   to a dst_type\n            info->number_to_static_ptr += 1;\n            info->search_done = true;\n        }\n    }\n}\n\n// Call this function when you hit a static_type which is not a base (above) a dst_type.\n// If this is (static_ptr, static_type)\n//   Record the path (public or not) from (dynamic_ptr, dynamic_type) to here.  There may be\n//   multiple paths from (dynamic_ptr, dynamic_type) to here, record the \"most public\" one.\nvoid\n__class_type_info::process_static_type_below_dst(__dynamic_cast_info* info,\n                                                 const void* current_ptr,\n                                                 int path_below) const\n{\n    if (current_ptr == info->static_ptr)\n    {\n        // Record the most public path from (dynamic_ptr, dynamic_type) to\n        //                                  (static_ptr, static_type)\n        if (info->path_dynamic_ptr_to_static_ptr != public_path)\n            info->path_dynamic_ptr_to_static_ptr = path_below;\n    }\n}\n\n// Call this function when searching below a dst_type node.  This function searches\n// for a path to (static_ptr, static_type) and for paths to one or more dst_type nodes.\n// If it finds a static_type node, there is no need to further search base classes\n// above.\n// If it finds a dst_type node it should search base classes using search_above_dst\n// to find out if this dst_type points to (static_ptr, static_type) or not.\n// Either way, the dst_type is recorded as one of two \"flavors\":  one that does\n// or does not point to (static_ptr, static_type).\n// If this is neither a static_type nor a dst_type node, continue searching\n// base classes above.\n// All the hoopla surrounding the search code is doing nothing but looking for\n// excuses to stop the search prematurely (break out of the for-loop).  That is,\n// the algorithm below is simply an optimization of this:\n// void\n// __vmi_class_type_info::search_below_dst(__dynamic_cast_info* info,\n//                                         const void* current_ptr,\n//                                         int path_below) const\n// {\n//     typedef const __base_class_type_info* Iter;\n//     if (this == info->static_type)\n//         process_static_type_below_dst(info, current_ptr, path_below);\n//     else if (this == info->dst_type)\n//     {\n//         // Record the most public access path that got us here\n//         if (info->path_dynamic_ptr_to_dst_ptr != public_path)\n//             info->path_dynamic_ptr_to_dst_ptr = path_below;\n//         bool does_dst_type_point_to_our_static_type = false;\n//         for (Iter p = __base_info, e= __base_info + __base_count; p < e; ++p)\n//         {\n//             p->search_above_dst(info, current_ptr, current_ptr, public_path);\n//             if (info->found_our_static_ptr)\n//                 does_dst_type_point_to_our_static_type = true;\n//             // break out early here if you can detect it doesn't matter if you do\n//         }\n//         if (!does_dst_type_point_to_our_static_type)\n//         {\n//             // We found a dst_type that doesn't point to (static_ptr, static_type)\n//             // So record the address of this dst_ptr and increment the\n//             // count of the number of such dst_types found in the tree.\n//             info->dst_ptr_not_leading_to_static_ptr = current_ptr;\n//             info->number_to_dst_ptr += 1;\n//         }\n//     }\n//     else\n//     {\n//         // This is not a static_type and not a dst_type.\n//         for (Iter p = __base_info, e = __base_info + __base_count; p < e; ++p)\n//         {\n//             p->search_below_dst(info, current_ptr, public_path);\n//             // break out early here if you can detect it doesn't matter if you do\n//         }\n//     }\n// }\nvoid\n__vmi_class_type_info::search_below_dst(__dynamic_cast_info* info,\n                                        const void* current_ptr,\n                                        int path_below,\n                                        bool use_strcmp) const\n{\n    typedef const __base_class_type_info* Iter;\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_below_dst(info, current_ptr, path_below);\n    else if (is_equal(this, info->dst_type, use_strcmp))\n    {\n        // We've been here before if we've recorded current_ptr in one of these\n        //   two places:\n        if (current_ptr == info->dst_ptr_leading_to_static_ptr ||\n            current_ptr == info->dst_ptr_not_leading_to_static_ptr)\n        {\n            // We've seen this node before, and therefore have already searched\n            // its base classes above.\n            //  Update path to here that is \"most public\".\n            if (path_below == public_path)\n                info->path_dynamic_ptr_to_dst_ptr = public_path;\n        }\n        else  // We have haven't been here before\n        {\n            // Record the access path that got us here\n            //   If there is more than one dst_type this path doesn't matter.\n            info->path_dynamic_ptr_to_dst_ptr = path_below;\n            // Only search above here if dst_type derives from static_type, or\n            //    if it is unknown if dst_type derives from static_type.\n            if (info->is_dst_type_derived_from_static_type != no)\n            {\n                // Set up flags to record results from all base classes\n                bool is_dst_type_derived_from_static_type = false;\n                bool does_dst_type_point_to_our_static_type = false;\n                // We've found a dst_type with a potentially public path to here.\n                // We have to assume the path is public because it may become\n                //   public later (if we get back to here with a public path).\n                // We can stop looking above if:\n                //    1.  We've found a public path to (static_ptr, static_type).\n                //    2.  We've found an ambiguous cast from (static_ptr, static_type) to a dst_type.\n                //        This is detected at the (static_ptr, static_type).\n                //    3.  We can prove that there is no public path to (static_ptr, static_type)\n                //        above here.\n                const Iter e = __base_info + __base_count;\n                for (Iter p = __base_info; p < e; ++p)\n                {\n                    // Zero out found flags\n                    info->found_our_static_ptr = false;\n                    info->found_any_static_type = false;\n                    p->search_above_dst(info, current_ptr, current_ptr, public_path, use_strcmp);\n                    if (info->search_done)\n                        break;\n                    if (info->found_any_static_type)\n                    {\n                        is_dst_type_derived_from_static_type = true;\n                        if (info->found_our_static_ptr)\n                        {\n                            does_dst_type_point_to_our_static_type = true;\n                            // If we found what we're looking for, stop looking above.\n                            if (info->path_dst_ptr_to_static_ptr == public_path)\n                                break;\n                            // We found a private path to (static_ptr, static_type)\n                            //   If there is no diamond then there is only one path\n                            //   to (static_ptr, static_type) and we just found it.\n                            if (!(__flags & __diamond_shaped_mask))\n                                break;\n                        }\n                        else\n                        {\n                            // If we found a static_type that isn't the one we're looking\n                            //    for, and if there are no repeated types above here,\n                            //    then stop looking.\n                            if (!(__flags & __non_diamond_repeat_mask))\n                                break;\n                        }\n                    }\n                }\n                if (!does_dst_type_point_to_our_static_type)\n                {\n                    // We found a dst_type that doesn't point to (static_ptr, static_type)\n                    // So record the address of this dst_ptr and increment the\n                    // count of the number of such dst_types found in the tree.\n                    info->dst_ptr_not_leading_to_static_ptr = current_ptr;\n                    info->number_to_dst_ptr += 1;\n                    // If there exists another dst with a private path to\n                    //    (static_ptr, static_type), then the cast from\n                    //     (dynamic_ptr, dynamic_type) to dst_type is now ambiguous,\n                    //      so stop search.\n                    if (info->number_to_static_ptr == 1 &&\n                            info->path_dst_ptr_to_static_ptr == not_public_path)\n                        info->search_done = true;\n                }\n                // If we found no static_type,s then dst_type doesn't derive\n                //   from static_type, else it does.  Record this result so that\n                //   next time we hit a dst_type we will know not to search above\n                //   it if it doesn't derive from static_type.\n                if (is_dst_type_derived_from_static_type)\n                    info->is_dst_type_derived_from_static_type = yes;\n                else\n                    info->is_dst_type_derived_from_static_type = no;\n            }\n        }\n    }\n    else\n    {\n        // This is not a static_type and not a dst_type.\n        const Iter e = __base_info + __base_count;\n        Iter p = __base_info;\n        p->search_below_dst(info, current_ptr, path_below, use_strcmp);\n        if (++p < e)\n        {\n            if ((__flags & __diamond_shaped_mask) || info->number_to_static_ptr == 1)\n            {\n                // If there are multiple paths to a base above from here, or if\n                //    a dst_type pointing to (static_ptr, static_type) has been found,\n                //    then there is no way to break out of this loop early unless\n                //    something below detects the search is done.\n                do\n                {\n                    if (info->search_done)\n                        break;\n                    p->search_below_dst(info, current_ptr, path_below, use_strcmp);\n                } while (++p < e);\n            }\n            else if (__flags & __non_diamond_repeat_mask)\n            {\n                // There are not multiple paths to any base class from here and a\n                //   dst_type pointing to (static_ptr, static_type) has not yet been\n                //   found.\n                do\n                {\n                    if (info->search_done)\n                        break;\n                    // If we just found a dst_type with a public path to (static_ptr, static_type),\n                    //    then the only reason to continue the search is to make sure\n                    //    no other dst_type points to (static_ptr, static_type).\n                    //    If !diamond, then we don't need to search here.\n                    if (info->number_to_static_ptr == 1 &&\n                              info->path_dst_ptr_to_static_ptr == public_path)\n                        break;\n                    p->search_below_dst(info, current_ptr, path_below, use_strcmp);\n                } while (++p < e);\n            }\n            else\n            {\n                // There are no repeated types above this node.\n                // There are no nodes with multiple parents above this node.\n                // no dst_type has been found to (static_ptr, static_type)\n                do\n                {\n                    if (info->search_done)\n                        break;\n                    // If we just found a dst_type with a public path to (static_ptr, static_type),\n                    //    then the only reason to continue the search is to make sure sure\n                    //    no other dst_type points to (static_ptr, static_type).\n                    //    If !diamond, then we don't need to search here.\n                    // if we just found a dst_type with a private path to (static_ptr, static_type),\n                    //    then we're only looking for a public path to (static_ptr, static_type)\n                    //    and to check for other dst_types.\n                    //    If !diamond & !repeat, then there is not a pointer to (static_ptr, static_type)\n                    //    and not a dst_type under here.\n                    if (info->number_to_static_ptr == 1)\n                        break;\n                    p->search_below_dst(info, current_ptr, path_below, use_strcmp);\n                } while (++p < e);\n            }\n        }\n    }\n}\n\n// This is the same algorithm as __vmi_class_type_info::search_below_dst but\n//   simplified to the case that there is only a single base class.\nvoid\n__si_class_type_info::search_below_dst(__dynamic_cast_info* info,\n                                       const void* current_ptr,\n                                       int path_below,\n                                       bool use_strcmp) const\n{\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_below_dst(info, current_ptr, path_below);\n    else if (is_equal(this, info->dst_type, use_strcmp))\n    {\n        // We've been here before if we've recorded current_ptr in one of these\n        //   two places:\n        if (current_ptr == info->dst_ptr_leading_to_static_ptr ||\n            current_ptr == info->dst_ptr_not_leading_to_static_ptr)\n        {\n            // We've seen this node before, and therefore have already searched\n            // its base classes above.\n            //  Update path to here that is \"most public\".\n            if (path_below == public_path)\n                info->path_dynamic_ptr_to_dst_ptr = public_path;\n        }\n        else  // We have haven't been here before\n        {\n            // Record the access path that got us here\n            //   If there is more than one dst_type this path doesn't matter.\n            info->path_dynamic_ptr_to_dst_ptr = path_below;\n            // Only search above here if dst_type derives from static_type, or\n            //    if it is unknown if dst_type derives from static_type.\n            if (info->is_dst_type_derived_from_static_type != no)\n            {\n                // Set up flags to record results from all base classes\n                bool is_dst_type_derived_from_static_type = false;\n                bool does_dst_type_point_to_our_static_type = false;\n                // Zero out found flags\n                info->found_our_static_ptr = false;\n                info->found_any_static_type = false;\n                __base_type->search_above_dst(info, current_ptr, current_ptr, public_path, use_strcmp);\n                if (info->found_any_static_type)\n                {\n                    is_dst_type_derived_from_static_type = true;\n                    if (info->found_our_static_ptr)\n                        does_dst_type_point_to_our_static_type = true;\n                }\n                if (!does_dst_type_point_to_our_static_type)\n                {\n                    // We found a dst_type that doesn't point to (static_ptr, static_type)\n                    // So record the address of this dst_ptr and increment the\n                    // count of the number of such dst_types found in the tree.\n                    info->dst_ptr_not_leading_to_static_ptr = current_ptr;\n                    info->number_to_dst_ptr += 1;\n                    // If there exists another dst with a private path to\n                    //    (static_ptr, static_type), then the cast from\n                    //     (dynamic_ptr, dynamic_type) to dst_type is now ambiguous.\n                    if (info->number_to_static_ptr == 1 &&\n                            info->path_dst_ptr_to_static_ptr == not_public_path)\n                        info->search_done = true;\n                }\n                // If we found no static_type,s then dst_type doesn't derive\n                //   from static_type, else it does.  Record this result so that\n                //   next time we hit a dst_type we will know not to search above\n                //   it if it doesn't derive from static_type.\n                if (is_dst_type_derived_from_static_type)\n                    info->is_dst_type_derived_from_static_type = yes;\n                else\n                    info->is_dst_type_derived_from_static_type = no;\n            }\n        }\n    }\n    else\n    {\n        // This is not a static_type and not a dst_type\n        __base_type->search_below_dst(info, current_ptr, path_below, use_strcmp);\n    }\n}\n\n// This is the same algorithm as __vmi_class_type_info::search_below_dst but\n//   simplified to the case that there is no base class.\nvoid\n__class_type_info::search_below_dst(__dynamic_cast_info* info,\n                                    const void* current_ptr,\n                                    int path_below,\n                                    bool use_strcmp) const\n{\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_below_dst(info, current_ptr, path_below);\n    else if (is_equal(this, info->dst_type, use_strcmp))\n    {\n        // We've been here before if we've recorded current_ptr in one of these\n        //   two places:\n        if (current_ptr == info->dst_ptr_leading_to_static_ptr ||\n            current_ptr == info->dst_ptr_not_leading_to_static_ptr)\n        {\n            // We've seen this node before, and therefore have already searched\n            // its base classes above.\n            //  Update path to here that is \"most public\".\n            if (path_below == public_path)\n                info->path_dynamic_ptr_to_dst_ptr = public_path;\n        }\n        else  // We have haven't been here before\n        {\n            // Record the access path that got us here\n            //   If there is more than one dst_type this path doesn't matter.\n            info->path_dynamic_ptr_to_dst_ptr = path_below;\n            // We found a dst_type that doesn't point to (static_ptr, static_type)\n            // So record the address of this dst_ptr and increment the\n            // count of the number of such dst_types found in the tree.\n            info->dst_ptr_not_leading_to_static_ptr = current_ptr;\n            info->number_to_dst_ptr += 1;\n            // If there exists another dst with a private path to\n            //    (static_ptr, static_type), then the cast from\n            //     (dynamic_ptr, dynamic_type) to dst_type is now ambiguous.\n            if (info->number_to_static_ptr == 1 &&\n                    info->path_dst_ptr_to_static_ptr == not_public_path)\n                info->search_done = true;\n            // We found that dst_type does not derive from static_type\n            info->is_dst_type_derived_from_static_type = no;\n        }\n    }\n}\n\n// Call this function when searching above a dst_type node.  This function searches\n// for a public path to (static_ptr, static_type).\n// This function is guaranteed not to find a node of type dst_type.\n// Theoretically this is a very simple function which just stops if it finds a\n// static_type node:  All the hoopla surrounding the search code is doing\n// nothing but looking for excuses to stop the search prematurely (break out of\n// the for-loop).  That is, the algorithm below is simply an optimization of this:\n// void\n// __vmi_class_type_info::search_above_dst(__dynamic_cast_info* info,\n//                                         const void* dst_ptr,\n//                                         const void* current_ptr,\n//                                         int path_below) const\n// {\n//     if (this == info->static_type)\n//         process_static_type_above_dst(info, dst_ptr, current_ptr, path_below);\n//     else\n//     {\n//         typedef const __base_class_type_info* Iter;\n//         // This is not a static_type and not a dst_type\n//         for (Iter p = __base_info, e = __base_info + __base_count; p < e; ++p)\n//         {\n//             p->search_above_dst(info, dst_ptr, current_ptr, public_path);\n//             // break out early here if you can detect it doesn't matter if you do\n//         }\n//     }\n// }\nvoid\n__vmi_class_type_info::search_above_dst(__dynamic_cast_info* info,\n                                        const void* dst_ptr,\n                                        const void* current_ptr,\n                                        int path_below,\n                                        bool use_strcmp) const\n{\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_above_dst(info, dst_ptr, current_ptr, path_below);\n    else\n    {\n        typedef const __base_class_type_info* Iter;\n        // This is not a static_type and not a dst_type\n        // Save flags so they can be restored when returning to nodes below.\n        bool found_our_static_ptr = info->found_our_static_ptr;\n        bool found_any_static_type = info->found_any_static_type;\n        // We've found a dst_type below with a path to here.  If the path\n        //    to here is not public, there may be another path to here that\n        //    is public.  So we have to assume that the path to here is public.\n        //  We can stop looking above if:\n        //    1.  We've found a public path to (static_ptr, static_type).\n        //    2.  We've found an ambiguous cast from (static_ptr, static_type) to a dst_type.\n        //        This is detected at the (static_ptr, static_type).\n        //    3.  We can prove that there is no public path to (static_ptr, static_type)\n        //        above here.\n        const Iter e = __base_info + __base_count;\n        Iter p = __base_info;\n        // Zero out found flags\n        info->found_our_static_ptr = false;\n        info->found_any_static_type = false;\n        p->search_above_dst(info, dst_ptr, current_ptr, path_below, use_strcmp);\n        if (++p < e)\n        {\n            do\n            {\n                if (info->search_done)\n                    break;\n                if (info->found_our_static_ptr)\n                {\n                    // If we found what we're looking for, stop looking above.\n                    if (info->path_dst_ptr_to_static_ptr == public_path)\n                        break;\n                    // We found a private path to (static_ptr, static_type)\n                    //   If there is no diamond then there is only one path\n                    //   to (static_ptr, static_type) from here and we just found it.\n                    if (!(__flags & __diamond_shaped_mask))\n                        break;\n                }\n                else if (info->found_any_static_type)\n                {\n                    // If we found a static_type that isn't the one we're looking\n                    //    for, and if there are no repeated types above here,\n                    //    then stop looking.\n                    if (!(__flags & __non_diamond_repeat_mask))\n                        break;\n                }\n                // Zero out found flags\n                info->found_our_static_ptr = false;\n                info->found_any_static_type = false;\n                p->search_above_dst(info, dst_ptr, current_ptr, path_below, use_strcmp);\n            } while (++p < e);\n        }\n        // Restore flags\n        info->found_our_static_ptr = found_our_static_ptr;\n        info->found_any_static_type = found_any_static_type;\n    }\n}\n\n// This is the same algorithm as __vmi_class_type_info::search_above_dst but\n//   simplified to the case that there is only a single base class.\nvoid\n__si_class_type_info::search_above_dst(__dynamic_cast_info* info,\n                                       const void* dst_ptr,\n                                       const void* current_ptr,\n                                       int path_below,\n                                       bool use_strcmp) const\n{\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_above_dst(info, dst_ptr, current_ptr, path_below);\n    else\n        __base_type->search_above_dst(info, dst_ptr, current_ptr, path_below, use_strcmp);\n}\n\n// This is the same algorithm as __vmi_class_type_info::search_above_dst but\n//   simplified to the case that there is no base class.\nvoid\n__class_type_info::search_above_dst(__dynamic_cast_info* info,\n                                    const void* dst_ptr,\n                                    const void* current_ptr,\n                                    int path_below,\n                                    bool use_strcmp) const\n{\n    if (is_equal(this, info->static_type, use_strcmp))\n        process_static_type_above_dst(info, dst_ptr, current_ptr, path_below);\n}\n\n// The search functions for __base_class_type_info are simply convenience\n//   functions for adjusting the current_ptr and path_below as the search is\n//   passed up to the base class node.\n\nvoid\n__base_class_type_info::search_above_dst(__dynamic_cast_info* info,\n                                         const void* dst_ptr,\n                                         const void* current_ptr,\n                                         int path_below,\n                                         bool use_strcmp) const\n{\n    ptrdiff_t offset_to_base = __offset_flags >> __offset_shift;\n    if (__offset_flags & __virtual_mask)\n    {\n        const char* vtable = *static_cast<const char*const*>(current_ptr);\n        offset_to_base = *reinterpret_cast<const ptrdiff_t*>(vtable + offset_to_base);\n    }\n    __base_type->search_above_dst(info, dst_ptr,\n                                  static_cast<const char*>(current_ptr) + offset_to_base,\n                                  (__offset_flags & __public_mask) ?\n                                      path_below :\n                                      not_public_path,\n                                  use_strcmp);\n}\n\nvoid\n__base_class_type_info::search_below_dst(__dynamic_cast_info* info,\n                                         const void* current_ptr,\n                                         int path_below,\n                                         bool use_strcmp) const\n{\n    ptrdiff_t offset_to_base = __offset_flags >> __offset_shift;\n    if (__offset_flags & __virtual_mask)\n    {\n        const char* vtable = *static_cast<const char*const*>(current_ptr);\n        offset_to_base = *reinterpret_cast<const ptrdiff_t*>(vtable + offset_to_base);\n    }\n    __base_type->search_below_dst(info,\n                                  static_cast<const char*>(current_ptr) + offset_to_base,\n                                  (__offset_flags & __public_mask) ?\n                                      path_below :\n                                      not_public_path,\n                                  use_strcmp);\n}\n\n#pragma GCC visibility pop\n\n}  // __cxxabiv1\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/private_typeinfo.h",
    "content": "//===------------------------ private_typeinfo.h --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#ifndef __PRIVATE_TYPEINFO_H_\n#define __PRIVATE_TYPEINFO_H_\n\n#include <typeinfo>\n#include <cstddef>\n\nnamespace __cxxabiv1\n{\n\n#pragma GCC visibility push(hidden)\n\nclass __attribute__ ((__visibility__(\"default\"))) __shim_type_info\n    : public std::type_info\n{\npublic:\n     __attribute__ ((__visibility__(\"hidden\"))) virtual ~__shim_type_info();\n\n     __attribute__ ((__visibility__(\"hidden\"))) virtual void noop1() const;\n     __attribute__ ((__visibility__(\"hidden\"))) virtual void noop2() const;\n     __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info* thrown_type, void*& adjustedPtr) const = 0;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __fundamental_type_info\n    : public __shim_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__fundamental_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __array_type_info\n    : public __shim_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__array_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __function_type_info\n    : public __shim_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__function_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __enum_type_info\n    : public __shim_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__enum_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nenum\n{\n    unknown = 0,\n    public_path,\n    not_public_path,\n    yes,\n    no\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __class_type_info;\n\nstruct __dynamic_cast_info\n{\n// const data supplied to the search:\n\n    const __class_type_info* dst_type;\n    const void* static_ptr;\n    const __class_type_info* static_type;\n    std::ptrdiff_t src2dst_offset;\n\n// Data that represents the answer:\n\n    // pointer to a dst_type which has (static_ptr, static_type) above it\n    const void* dst_ptr_leading_to_static_ptr;\n    // pointer to a dst_type which does not have (static_ptr, static_type) above it\n    const void* dst_ptr_not_leading_to_static_ptr;\n\n    // The following three paths are either unknown, public_path or not_public_path.\n    // access of path from dst_ptr_leading_to_static_ptr to (static_ptr, static_type)\n    int path_dst_ptr_to_static_ptr;\n    // access of path from (dynamic_ptr, dynamic_type) to (static_ptr, static_type)\n    //    when there is no dst_type along the path\n    int path_dynamic_ptr_to_static_ptr;\n    // access of path from (dynamic_ptr, dynamic_type) to dst_type\n    //    (not used if there is a (static_ptr, static_type) above a dst_type).\n    int path_dynamic_ptr_to_dst_ptr;\n\n    // Number of dst_types below (static_ptr, static_type)\n    int number_to_static_ptr;\n    // Number of dst_types not below (static_ptr, static_type)\n    int number_to_dst_ptr;\n\n// Data that helps stop the search before the entire tree is searched:\n\n    // is_dst_type_derived_from_static_type is either unknown, yes or no.\n    int is_dst_type_derived_from_static_type;\n    // Number of dst_type in tree.  If 0, then that means unknown.\n    int number_of_dst_type;\n    // communicates to a dst_type node that (static_ptr, static_type) was found\n    //    above it.\n    bool found_our_static_ptr;\n    // communicates to a dst_type node that a static_type was found\n    //    above it, but it wasn't (static_ptr, static_type)\n    bool found_any_static_type;\n    // Set whenever a search can be stopped\n    bool search_done;\n};\n\n// Has no base class\nclass __attribute__ ((__visibility__(\"default\"))) __class_type_info\n    : public __shim_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__class_type_info();\n\n    __attribute__ ((__visibility__(\"hidden\")))\n        void process_static_type_above_dst(__dynamic_cast_info*, const void*, const void*, int) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        void process_static_type_below_dst(__dynamic_cast_info*, const void*, int) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        void process_found_base_class(__dynamic_cast_info*, void*, int) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_below_dst(__dynamic_cast_info*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual bool can_catch(const __shim_type_info*, void*&) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const;\n};\n\n// Has one non-virtual public base class at offset zero\nclass __attribute__ ((__visibility__(\"default\"))) __si_class_type_info\n    : public __class_type_info\n{\npublic:\n    const __class_type_info* __base_type;\n\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__si_class_type_info();\n\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_below_dst(__dynamic_cast_info*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const;\n};\n\nstruct __base_class_type_info\n{\npublic:\n    const __class_type_info* __base_type;\n    long __offset_flags;\n\n    enum __offset_flags_masks\n    {\n        __virtual_mask = 0x1,\n        __public_mask  = 0x2, // base is public\n        __offset_shift = 8\n    };\n\n    void search_above_dst(__dynamic_cast_info*, const void*, const void*, int, bool) const;\n    void search_below_dst(__dynamic_cast_info*, const void*, int, bool) const;\n    void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const;\n};\n\n// Has one or more base classes\nclass __attribute__ ((__visibility__(\"default\"))) __vmi_class_type_info\n    : public __class_type_info\n{\npublic:\n    unsigned int __flags;\n    unsigned int __base_count;\n    __base_class_type_info __base_info[1];\n\n    enum __flags_masks\n    {\n        __non_diamond_repeat_mask = 0x1,  // has two or more distinct base class\n                                          //    objects of the same type\n        __diamond_shaped_mask     = 0x2   // has base class object with two or\n                                          //    more derived objects\n    };\n\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__vmi_class_type_info();\n\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_above_dst(__dynamic_cast_info*, const void*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void search_below_dst(__dynamic_cast_info*, const void*, int, bool) const;\n    __attribute__ ((__visibility__(\"hidden\")))\n        virtual void has_unambiguous_public_base(__dynamic_cast_info*, void*, int) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __pbase_type_info\n    : public __shim_type_info\n{\npublic:\n    unsigned int __flags;\n    const __shim_type_info* __pointee;\n\n    enum __masks\n    {\n        __const_mask            = 0x1,\n        __volatile_mask         = 0x2,\n        __restrict_mask         = 0x4,\n        __incomplete_mask       = 0x8,\n        __incomplete_class_mask = 0x10\n    };\n\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__pbase_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __pointer_type_info\n    : public __pbase_type_info\n{\npublic:\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__pointer_type_info();\n    __attribute__ ((__visibility__(\"hidden\"))) virtual bool can_catch(const __shim_type_info*, void*&) const;\n};\n\nclass __attribute__ ((__visibility__(\"default\"))) __pointer_to_member_type_info\n    : public __pbase_type_info\n{\npublic:\n    const __class_type_info* __context;\n\n    __attribute__ ((__visibility__(\"hidden\"))) virtual ~__pointer_to_member_type_info();\n};\n\n#pragma GCC visibility pop\n\n}  // __cxxabiv1\n\n#endif  // __PRIVATE_TYPEINFO_H_\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/stdexcept.cpp",
    "content": "//===------------------------ stdexcept.cpp -------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"__refstring\"\n#include \"stdexcept\"\n#include \"new\"\n#include <cstdlib>\n#include <cstring>\n#include <cstdint>\n#include <cstddef>\n\nstatic_assert(sizeof(std::__libcpp_refstring) == sizeof(const char *), \"\");\n\nnamespace std  // purposefully not using versioning namespace\n{\n\nlogic_error::~logic_error() _NOEXCEPT {}\n\nconst char*\nlogic_error::what() const _NOEXCEPT\n{\n    return __imp_.c_str();\n}\n\nruntime_error::~runtime_error() _NOEXCEPT {}\n\nconst char*\nruntime_error::what() const _NOEXCEPT\n{\n    return __imp_.c_str();\n}\n\ndomain_error::~domain_error() _NOEXCEPT {}\ninvalid_argument::~invalid_argument() _NOEXCEPT {}\nlength_error::~length_error() _NOEXCEPT {}\nout_of_range::~out_of_range() _NOEXCEPT {}\n\nrange_error::~range_error() _NOEXCEPT {}\noverflow_error::~overflow_error() _NOEXCEPT {}\nunderflow_error::~underflow_error() _NOEXCEPT {}\n\n}  // std\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/src/typeinfo.cpp",
    "content": "//===----------------------------- typeinfo.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <typeinfo>\n\nnamespace std\n{\n\n// type_info\n\ntype_info::~type_info()\n{\n}\n\n// bad_cast\n\nbad_cast::bad_cast() _NOEXCEPT\n{\n}\n\nbad_cast::~bad_cast() _NOEXCEPT\n{\n}\n\nconst char*\nbad_cast::what() const _NOEXCEPT\n{\n  return \"std::bad_cast\";\n}\n\n// bad_typeid\n\nbad_typeid::bad_typeid() _NOEXCEPT\n{\n}\n\nbad_typeid::~bad_typeid() _NOEXCEPT\n{\n}\n\nconst char*\nbad_typeid::what() const _NOEXCEPT\n{\n  return \"std::bad_typeid\";\n}\n\n}  // std\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/backtrace_test.pass.cpp",
    "content": "//===---------------------- backtrace_test.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n#include <assert.h>\n#include <stddef.h>\n#include <unwind.h>\n\nextern \"C\" _Unwind_Reason_Code\ntrace_function(struct _Unwind_Context* context, void* ntraced) {\n  (*reinterpret_cast<size_t*>(ntraced))++;\n  // We should never have a call stack this deep...\n  assert(*reinterpret_cast<size_t*>(ntraced) < 20);\n  return _URC_NO_REASON;\n}\n\nvoid call3_throw(size_t* ntraced) {\n  try {\n    _Unwind_Backtrace(trace_function, ntraced);\n  } catch (...) {\n    assert(false);\n  }\n}\n\nvoid call3_nothrow(size_t* ntraced) {\n  _Unwind_Backtrace(trace_function, ntraced);\n}\n\nvoid call2(size_t* ntraced, bool do_throw) {\n  if (do_throw) {\n    call3_throw(ntraced);\n  } else {\n    call3_nothrow(ntraced);\n  }\n}\n\nvoid call1(size_t* ntraced, bool do_throw) {\n  call2(ntraced, do_throw);\n}\n\nint main() {\n  size_t throw_ntraced = 0;\n  size_t nothrow_ntraced = 0;\n\n  call1(&nothrow_ntraced, false);\n\n  try {\n    call1(&throw_ntraced, true);\n  } catch (...) {\n    assert(false);\n  }\n\n  // Different platforms (and different runtimes) will unwind a different number\n  // of times, so we can't make any better assumptions than this.\n  assert(nothrow_ntraced > 1);\n  assert(throw_ntraced == nothrow_ntraced); // Make sure we unwind through catch\n  return 0;\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_array_01.pass.cpp",
    "content": "//===---------------------- catch_array_01.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n// Can you have a catch clause of array type that catches anything?\n\n#include <cassert>\n\nint main()\n{\n    typedef char Array[4];\n    Array a = {'H', 'i', '!', 0};\n    try\n    {\n        throw a;  // converts to char*\n        assert(false);\n    }\n    catch (Array& b)  // can't catch char*\n    {\n        assert(false);\n    }\n    catch (...)\n    {\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_array_02.pass.cpp",
    "content": "//===---------------------- catch_array_02.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n// Can you have a catch clause of array type that catches anything?\n\n#include <cassert>\n\nint main()\n{\n    typedef char Array[4];\n    Array a = {'H', 'i', '!', 0};\n    try\n    {\n        throw a;  // converts to char*\n        assert(false);\n    }\n    catch (Array b)  // equivalent to char*\n    {\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_class_01.pass.cpp",
    "content": "//===---------------------- catch_class_01.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    explicit A(int id) : id_(id) {count++;}\n    A(const A& a) : id_(a.id_) {count++;}\n    ~A() {count--;}\n};\n\nint A::count = 0;\n\nvoid f1()\n{\n    throw A(3);\n}\n\nvoid f2()\n{\n    try\n    {\n        assert(A::count == 0);\n        f1();\n    }\n    catch (A a)\n    {\n        assert(A::count != 0);\n        assert(a.id_ == 3);\n        throw;\n    }\n}\n\nint main()\n{\n    try\n    {\n        f2();\n        assert(false);\n    }\n    catch (const A& a)\n    {\n        assert(A::count != 0);\n        assert(a.id_ == 3);\n    }\n    assert(A::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_class_02.pass.cpp",
    "content": "//===---------------------- catch_class_02.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct B\n{\n    static int count;\n    int id_;\n    explicit B(int id) : id_(id) {count++;}\n    B(const B& a) : id_(a.id_) {count++;}\n    ~B() {count--;}\n};\n\nint B::count = 0;\n\nstruct A\n    : B\n{\n    static int count;\n    int id_;\n    explicit A(int id) : B(id-1), id_(id) {count++;}\n    A(const A& a) : B(a.id_-1), id_(a.id_) {count++;}\n    ~A() {count--;}\n};\n\nint A::count = 0;\n\nvoid f1()\n{\n    assert(A::count == 0);\n    assert(B::count == 0);\n    A a(3);\n    assert(A::count == 1);\n    assert(B::count == 1);\n    throw a;\n    assert(false);\n}\n\nvoid f2()\n{\n    try\n    {\n        assert(A::count == 0);\n        f1();\n    assert(false);\n    }\n    catch (A a)\n    {\n        assert(A::count != 0);\n        assert(B::count != 0);\n        assert(a.id_ == 3);\n        throw;\n    }\n    catch (B b)\n    {\n        assert(false);\n    }\n}\n\nint main()\n{\n    try\n    {\n        f2();\n        assert(false);\n    }\n    catch (const B& b)\n    {\n        assert(B::count != 0);\n        assert(b.id_ == 2);\n    }\n    assert(A::count == 0);\n    assert(B::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_class_03.pass.cpp",
    "content": "//===---------------------- catch_class_03.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n/*\n    This test checks that adjustedPtr is correct as there exist offsets in this\n    object for the various subobjects, all of which have a unique id_ to\n    check against.\n*/\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct B\n{\n    static int count;\n    int id_;\n    explicit B(int id) : id_(id) {count++;}\n    B(const B& a) : id_(a.id_) {count++;}\n    ~B() {count--;}\n};\n\nint B::count = 0;\n\nstruct C1\n    : B\n{\n    static int count;\n    int id_;\n    explicit C1(int id) : B(id-2), id_(id) {count++;}\n    C1(const C1& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C1() {count--;}\n};\n\nint C1::count = 0;\n\nstruct C2\n    : B\n{\n    static int count;\n    int id_;\n    explicit C2(int id) : B(id-2), id_(id) {count++;}\n    C2(const C2& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C2() {count--;}\n};\n\nint C2::count = 0;\n\nstruct A\n    : C1, C2\n{\n    static int count;\n    int id_;\n    explicit A(int id) : C1(id-1), C2(id-2), id_(id) {count++;}\n    A(const A& a) : C1(a.id_-1), C2(a.id_-2), id_(a.id_) {count++;}\n    ~A() {count--;}\n};\n\nint A::count = 0;\n\nvoid f1()\n{\n    assert(A::count == 0);\n    assert(C1::count == 0);\n    assert(C2::count == 0);\n    assert(B::count == 0);\n    A a(5);\n    assert(A::count == 1);\n    assert(C1::count == 1);\n    assert(C2::count == 1);\n    assert(B::count == 2);\n\n    assert(a.id_ == 5);\n    assert(static_cast<C1&>(a).id_ == 4);\n    assert(static_cast<C2&>(a).id_ == 3);\n    assert(static_cast<B&>(static_cast<C1&>(a)).id_ == 2);\n    assert(static_cast<B&>(static_cast<C2&>(a)).id_ == 1);\n    throw a;\n    assert(false);\n}\n\nvoid f2()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f1();\n        assert(false);\n    }\n    catch (const A& a)  // can catch A\n    {\n        assert(a.id_ == 5);\n        assert(static_cast<const C1&>(a).id_ == 4);\n        assert(static_cast<const C2&>(a).id_ == 3);\n        assert(static_cast<const B&>(static_cast<const C1&>(a)).id_ == 2);\n        assert(static_cast<const B&>(static_cast<const C2&>(a)).id_ == 1);\n        throw;\n    }\n    catch (const C1&)\n    {\n        assert(false);\n    }\n    catch (const C2&)\n    {\n        assert(false);\n    }\n    catch (const B&)\n    {\n        assert(false);\n    }\n}\n\nvoid f3()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f2();\n        assert(false);\n    }\n    catch (const B& a)  // can not catch B (ambiguous base)\n    {\n        assert(false);\n    }\n    catch (const C1& c1)  // can catch C1\n    {\n        assert(c1.id_ == 4);\n        assert(static_cast<const B&>(c1).id_ == 2);\n        throw;\n    }\n    catch (const C2&)\n    {\n        assert(false);\n    }\n}\n\nvoid f4()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f3();\n        assert(false);\n    }\n    catch (const B& a)  // can not catch B (ambiguous base)\n    {\n        assert(false);\n    }\n    catch (const C2& c2)  // can catch C2\n    {\n        assert(c2.id_ == 3);\n        assert(static_cast<const B&>(c2).id_ == 1);\n        throw;\n    }\n    catch (const C1&)\n    {\n        assert(false);\n    }\n}\n\nint main()\n{\n    try\n    {\n        f4();\n        assert(false);\n    }\n    catch (...)\n    {\n    }\n    assert(A::count == 0);\n    assert(C1::count == 0);\n    assert(C2::count == 0);\n    assert(B::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_class_04.pass.cpp",
    "content": "//===---------------------- catch_class_04.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n/*\n    This test checks that adjustedPtr is correct as there exist offsets in this\n    object for the various subobjects, all of which have a unique id_ to\n    check against.  It also checks that virtual bases work properly\n*/\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct B\n{\n    static int count;\n    int id_;\n    explicit B(int id) : id_(id) {count++;}\n    B(const B& a) : id_(a.id_) {count++;}\n    ~B() {count--;}\n};\n\nint B::count = 0;\n\nstruct C1\n    : virtual B\n{\n    static int count;\n    int id_;\n    explicit C1(int id) : B(id-2), id_(id) {count++;}\n    C1(const C1& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C1() {count--;}\n};\n\nint C1::count = 0;\n\nstruct C2\n    : virtual private B\n{\n    static int count;\n    int id_;\n    explicit C2(int id) : B(id-2), id_(id) {count++;}\n    C2(const C2& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C2() {count--;}\n};\n\nint C2::count = 0;\n\nstruct A\n    : C1, C2\n{\n    static int count;\n    int id_;\n    explicit A(int id) : C1(id-1), C2(id-2), B(id+3), id_(id) {count++;}\n    A(const A& a) : C1(a.id_-1), C2(a.id_-2), B(a.id_+3), id_(a.id_) {count++;}\n    ~A() {count--;}\n};\n\nint A::count = 0;\n\nvoid f1()\n{\n    assert(A::count == 0);\n    assert(C1::count == 0);\n    assert(C2::count == 0);\n    assert(B::count == 0);\n    A a(5);\n    assert(A::count == 1);\n    assert(C1::count == 1);\n    assert(C2::count == 1);\n    assert(B::count == 1);\n\n    assert(a.id_ == 5);\n    assert(static_cast<C1&>(a).id_ == 4);\n    assert(static_cast<C2&>(a).id_ == 3);\n    assert(static_cast<B&>(a).id_ == 8);\n    throw a;\n    assert(false);\n}\n\nvoid f2()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f1();\n        assert(false);\n    }\n    catch (const A& a)  // can catch A\n    {\n        assert(a.id_ == 5);\n        assert(static_cast<const C1&>(a).id_ == 4);\n        assert(static_cast<const C2&>(a).id_ == 3);\n        assert(static_cast<const B&>(a).id_ == 8);\n        throw;\n    }\n    catch (const C1&)\n    {\n        assert(false);\n    }\n    catch (const C2&)\n    {\n        assert(false);\n    }\n    catch (const B&)\n    {\n        assert(false);\n    }\n}\n\nvoid f3()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f2();\n        assert(false);\n    }\n    catch (const B& a)  // can catch B\n    {\n        assert(static_cast<const B&>(a).id_ == 8);\n        throw;\n    }\n    catch (const C1& c1)\n    {\n        assert(false);\n    }\n    catch (const C2&)\n    {\n        assert(false);\n    }\n}\n\nvoid f4()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f3();\n        assert(false);\n    }\n    catch (const C2& c2)  // can catch C2\n    {\n        assert(c2.id_ == 3);\n        throw;\n    }\n    catch (const B& a)  // can not catch B (ambiguous base)\n    {\n        assert(false);\n    }\n    catch (const C1&)\n    {\n        assert(false);\n    }\n}\n\nvoid f5()\n{\n    try\n    {\n        assert(A::count == 0);\n        assert(C1::count == 0);\n        assert(C2::count == 0);\n        assert(B::count == 0);\n        f4();\n        assert(false);\n    }\n    catch (const C1& c1)  // can catch C1\n    {\n        assert(c1.id_ == 4);\n        assert(static_cast<const B&>(c1).id_ == 8);\n        throw;\n    }\n    catch (const B& a)\n    {\n        assert(false);\n    }\n    catch (const C2&)\n    {\n        assert(false);\n    }\n}\n\nint main()\n{\n    try\n    {\n        f5();\n        assert(false);\n    }\n    catch (...)\n    {\n    }\n    assert(A::count == 0);\n    assert(C1::count == 0);\n    assert(C2::count == 0);\n    assert(B::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_const_pointer_nullptr.pass.cpp",
    "content": "//===--------------------- catch_const_pointer_nullptr.cpp ----------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\n#if __has_feature(cxx_nullptr)\n\nstruct A {};\n\nvoid test1()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (A*)\n    {\n    }\n    catch (const A*)\n    {\n        assert(false);\n    }\n}\n\n\nvoid test2()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (const A*)\n    {\n    }\n    catch (A*)\n    {\n        assert(false);\n    }\n}\n\nvoid test3()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (const A* const)\n    {\n    }\n    catch (A*)\n    {\n        assert(false);\n    }\n}\n\nvoid test4()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (A*)\n    {\n    }\n    catch (const A* const)\n    {\n        assert(false);\n    }\n}\n\nvoid test5()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (A const*)\n    {\n    }\n    catch (A*)\n    {\n        assert(false);\n    }\n}\n\nvoid test6()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (A*)\n    {\n    }\n    catch (A const*)\n    {\n        assert(false);\n    }\n}\n\n\n#else\n\nvoid test1() {}\nvoid test2() {}\nvoid test3() {}\nvoid test4() {}\nvoid test5() {}\nvoid test6() {}\n\n#endif\n\nint main()\n{\n    test1();\n    test2();\n    test3();\n    test4();\n    test5();\n    test6();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_function_01.pass.cpp",
    "content": "//===----------------------- catch_function_01.cpp ------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n// Can you have a catch clause of array type that catches anything?\n\n#include <cassert>\n\nvoid f() {}\n\nint main()\n{\n    typedef void Function();\n    try\n    {\n        throw f;     // converts to void (*)()\n        assert(false);\n    }\n    catch (Function& b)  // can't catch void (*)()\n    {\n        assert(false);\n    }\n    catch (...)\n    {\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_function_02.pass.cpp",
    "content": "//===---------------------- catch_function_02.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n// Can you have a catch clause of array type that catches anything?\n\n#include <cassert>\n\nvoid f() {}\n\nint main()\n{\n    typedef void Function();\n    try\n    {\n        throw f;     // converts to void (*)()\n        assert(false);\n    }\n    catch (Function b)  // equivalent to void (*)()\n    {\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_in_noexcept.pass.cpp",
    "content": "//===---------------------- catch_in_noexcept.cpp--------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct A {};\n\n// Despite being marked as noexcept, this function must have an EHT entry that\n// is not 'cantunwind', so that the unwinder can correctly deal with the throw.\nvoid f1() noexcept\n{\n    try {\n        A a;\n        throw a;\n        assert(false);\n    } catch (...) {\n        assert(true);\n        return;\n    }\n    assert(false);\n}\n\nint main()\n{\n    f1();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_member_data_pointer_01.pass.cpp",
    "content": "//===----------------- catch_member_data_pointer_01.cpp -------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\nstruct A\n{\n    const int i;\n    int j;\n};\n\ntypedef const int A::*md1;\ntypedef       int A::*md2;\n\nvoid test1()\n{\n    try\n    {\n        throw &A::i;\n        assert(false);\n    }\n    catch (md2)\n    {\n        assert(false);\n    }\n    catch (md1)\n    {\n    }\n}\n\nvoid test2()\n{\n    try\n    {\n        throw &A::j;\n        assert(false);\n    }\n    catch (md1)\n    {\n        assert(false);\n    }\n    catch (md2)\n    {\n    }\n}\n\nint main()\n{\n    test1();\n    test2();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_member_function_pointer_01.pass.cpp",
    "content": "//===--------------- catch_member_function_pointer_01.cpp -----------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\nstruct A\n{\n    void foo() {}\n    void bar() const {}\n};\n\ntypedef void (A::*mf1)();\ntypedef void (A::*mf2)() const;\n\nvoid test1()\n{\n    try\n    {\n        throw &A::foo;\n        assert(false);\n    }\n    catch (mf2)\n    {\n        assert(false);\n    }\n    catch (mf1)\n    {\n    }\n}\n\nvoid test2()\n{\n    try\n    {\n        throw &A::bar;\n        assert(false);\n    }\n    catch (mf1)\n    {\n        assert(false);\n    }\n    catch (mf2)\n    {\n    }\n}\n\nint main()\n{\n    test1();\n    test2();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_member_pointer_nullptr.pass.cpp",
    "content": "//===----------------- catch_member_pointer_nullptr.cpp -------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\n#if __has_feature(cxx_nullptr)\n\nstruct A\n{\n    const int i;\n    int j;\n};\n\ntypedef const int A::*md1;\ntypedef       int A::*md2;\n\nvoid test1()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (md2)\n    {\n    }\n    catch (md1)\n    {\n        assert(false);\n    }\n}\n\nvoid test2()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (md1)\n    {\n    }\n    catch (md2)\n    {\n        assert(false);\n    }\n}\n\n#else\n\nvoid test1()\n{\n}\n\nvoid test2()\n{\n}\n\n#endif\n\nint main()\n{\n    test1();\n    test2();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_pointer_nullptr.pass.cpp",
    "content": "//===--------------------- catch_pointer_nullptr.cpp ----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\n#if __has_feature(cxx_nullptr)\n\nvoid test1()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (int*)\n    {\n    }\n    catch (long*)\n    {\n        assert(false);\n    }\n}\n\nstruct A {};\n\nvoid test2()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (A*)\n    {\n    }\n    catch (int*)\n    {\n        assert(false);\n    }\n}\n\n#else\n\nvoid test1()\n{\n}\n\nvoid test2()\n{\n}\n\n#endif\n\nint main()\n{\n    test1();\n    test2();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_pointer_reference.pass.cpp",
    "content": "//===---------------------- catch_pointer_referece.cpp --------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n//\n//  This test case checks specifically the cases under bullet 3.1 & 3.2:\n//\n//  C++ ABI 15.3:\n//  A handler is a match for an exception object of type E if\n//     *  The handler is of type cv T or cv T& and E and T are the same type\n//        (ignoring the top-level cv-qualifiers), or\n//     *  the handler is of type cv T or cv T& and T is an unambiguous base\n//        class of E, or\n//  /  *  the handler is of type cv1 T* cv2 and E is a pointer type that can   \\\n//  |     be converted to the type of the handler by either or both of         |\n//  |       o  a standard pointer conversion (4.10 [conv.ptr]) not involving   |\n//  |          conversions to private or protected or ambiguous classes        |\n//  \\       o  a qualification conversion                                      /\n//     *  the handler is a pointer or pointer to member type and E is\n//        std::nullptr_t\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n#include <stdio.h>\n\nstruct Base {};\nstruct Derived  : Base {};\nstruct Derived2 : Base {};\nstruct Ambiguous : Derived, Derived2 {};\nstruct Private : private Base {};\nstruct Protected : protected Base {};\n\ntemplate <typename T  // Handler type\n         ,typename E  // Thrown exception type\n         ,typename O  // Object type\n         >\nvoid assert_catches()\n{\n    try\n    {\n        O o;\n        throw static_cast<E>(&o);\n        printf(\"%s\\n\", __PRETTY_FUNCTION__);\n        assert(false && \"Statements after throw must be unreachable\");\n    }\n    catch (T t)\n    {\n        assert(true);\n        return;\n    }\n    catch (...)\n    {\n        printf(\"%s\\n\", __PRETTY_FUNCTION__);\n        assert(false && \"Should not have entered catch-all\");\n    }\n\n    printf(\"%s\\n\", __PRETTY_FUNCTION__);\n    assert(false && \"The catch should have returned\");\n}\n\ntemplate <typename T  // Handler type\n         ,typename E  // Thrown exception type\n         ,typename O  // Object type\n         >\nvoid assert_cannot_catch()\n{\n    try\n    {\n        O o;\n        throw static_cast<E>(&o);\n        printf(\"%s\\n\", __PRETTY_FUNCTION__);\n        assert(false && \"Statements after throw must be unreachable\");\n    }\n    catch (T t)\n    {\n        printf(\"%s\\n\", __PRETTY_FUNCTION__);\n        assert(false && \"Should not have entered the catch\");\n    }\n    catch (...)\n    {\n        assert(true);\n        return;\n    }\n\n    printf(\"%s\\n\", __PRETTY_FUNCTION__);\n    assert(false && \"The catch-all should have returned\");\n}\n\nvoid f1()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Base * cv2\n    // catches an exception of type:\n    //   Derived *\n    assert_catches<               Base *               , Derived *, Derived>();\n    assert_catches<const          Base *               , Derived *, Derived>();\n    assert_catches<      volatile Base *               , Derived *, Derived>();\n    assert_catches<const volatile Base *               , Derived *, Derived>();\n    assert_catches<               Base * const         , Derived *, Derived>();\n    assert_catches<const          Base * const         , Derived *, Derived>();\n    assert_catches<      volatile Base * const         , Derived *, Derived>();\n    assert_catches<const volatile Base * const         , Derived *, Derived>();\n    assert_catches<               Base *       volatile, Derived *, Derived>();\n    assert_catches<const          Base *       volatile, Derived *, Derived>();\n    assert_catches<      volatile Base *       volatile, Derived *, Derived>();\n    assert_catches<const volatile Base *       volatile, Derived *, Derived>();\n    assert_catches<               Base * const volatile, Derived *, Derived>();\n    assert_catches<const          Base * const volatile, Derived *, Derived>();\n    assert_catches<      volatile Base * const volatile, Derived *, Derived>();\n    assert_catches<const volatile Base * const volatile, Derived *, Derived>();\n}\n\nvoid f2()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Base * cv2\n    // catches an exception of type:\n    //   Base *\n    assert_catches<               Base *               , Base *, Derived>();\n    assert_catches<const          Base *               , Base *, Derived>();\n    assert_catches<      volatile Base *               , Base *, Derived>();\n    assert_catches<const volatile Base *               , Base *, Derived>();\n    assert_catches<               Base * const         , Base *, Derived>();\n    assert_catches<const          Base * const         , Base *, Derived>();\n    assert_catches<      volatile Base * const         , Base *, Derived>();\n    assert_catches<const volatile Base * const         , Base *, Derived>();\n    assert_catches<               Base *       volatile, Base *, Derived>();\n    assert_catches<const          Base *       volatile, Base *, Derived>();\n    assert_catches<      volatile Base *       volatile, Base *, Derived>();\n    assert_catches<const volatile Base *       volatile, Base *, Derived>();\n    assert_catches<               Base * const volatile, Base *, Derived>();\n    assert_catches<const          Base * const volatile, Base *, Derived>();\n    assert_catches<      volatile Base * const volatile, Base *, Derived>();\n    assert_catches<const volatile Base * const volatile, Base *, Derived>();\n}\n\nvoid f3()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Derived * cv2\n    // catches an exception of type:\n    //   Derived *\n    assert_catches<               Derived *               , Derived *, Derived>();\n    assert_catches<const          Derived *               , Derived *, Derived>();\n    assert_catches<      volatile Derived *               , Derived *, Derived>();\n    assert_catches<const volatile Derived *               , Derived *, Derived>();\n    assert_catches<               Derived * const         , Derived *, Derived>();\n    assert_catches<const          Derived * const         , Derived *, Derived>();\n    assert_catches<      volatile Derived * const         , Derived *, Derived>();\n    assert_catches<const volatile Derived * const         , Derived *, Derived>();\n    assert_catches<               Derived *       volatile, Derived *, Derived>();\n    assert_catches<const          Derived *       volatile, Derived *, Derived>();\n    assert_catches<      volatile Derived *       volatile, Derived *, Derived>();\n    assert_catches<const volatile Derived *       volatile, Derived *, Derived>();\n    assert_catches<               Derived * const volatile, Derived *, Derived>();\n    assert_catches<const          Derived * const volatile, Derived *, Derived>();\n    assert_catches<      volatile Derived * const volatile, Derived *, Derived>();\n    assert_catches<const volatile Derived * const volatile, Derived *, Derived>();\n}\n\nvoid f4()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Derived * cv2\n    // cannot catch an exception of type:\n    //   Base *\n    assert_cannot_catch<               Derived *               , Base *, Derived>();\n    assert_cannot_catch<const          Derived *               , Base *, Derived>();\n    assert_cannot_catch<      volatile Derived *               , Base *, Derived>();\n    assert_cannot_catch<const volatile Derived *               , Base *, Derived>();\n    assert_cannot_catch<               Derived * const         , Base *, Derived>();\n    assert_cannot_catch<const          Derived * const         , Base *, Derived>();\n    assert_cannot_catch<      volatile Derived * const         , Base *, Derived>();\n    assert_cannot_catch<const volatile Derived * const         , Base *, Derived>();\n    assert_cannot_catch<               Derived *       volatile, Base *, Derived>();\n    assert_cannot_catch<const          Derived *       volatile, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived *       volatile, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived *       volatile, Base *, Derived>();\n    assert_cannot_catch<               Derived * const volatile, Base *, Derived>();\n    assert_cannot_catch<const          Derived * const volatile, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived * const volatile, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived * const volatile, Base *, Derived>();\n}\n\nvoid f5()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Derived * cv2 &\n    // catches an exception of type:\n    //   Derived *\n    assert_catches<               Derived *                &, Derived *, Derived>();\n    assert_catches<const          Derived *                &, Derived *, Derived>();\n    assert_catches<      volatile Derived *                &, Derived *, Derived>();\n    assert_catches<const volatile Derived *                &, Derived *, Derived>();\n    assert_catches<               Derived * const          &, Derived *, Derived>();\n    assert_catches<const          Derived * const          &, Derived *, Derived>();\n    assert_catches<      volatile Derived * const          &, Derived *, Derived>();\n    assert_catches<const volatile Derived * const          &, Derived *, Derived>();\n    assert_catches<               Derived *       volatile &, Derived *, Derived>();\n    assert_catches<const          Derived *       volatile &, Derived *, Derived>();\n    assert_catches<      volatile Derived *       volatile &, Derived *, Derived>();\n    assert_catches<const volatile Derived *       volatile &, Derived *, Derived>();\n    assert_catches<               Derived * const volatile &, Derived *, Derived>();\n    assert_catches<const          Derived * const volatile &, Derived *, Derived>();\n    assert_catches<      volatile Derived * const volatile &, Derived *, Derived>();\n    assert_catches<const volatile Derived * const volatile &, Derived *, Derived>();\n}\n\nvoid f6()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Base * cv2 &\n    // catches an exception of type:\n    //   Base *\n    assert_catches<               Base *                &, Base *, Derived>();\n    assert_catches<const          Base *                &, Base *, Derived>();\n    assert_catches<      volatile Base *                &, Base *, Derived>();\n    assert_catches<const volatile Base *                &, Base *, Derived>();\n    assert_catches<               Base * const          &, Base *, Derived>();\n    assert_catches<const          Base * const          &, Base *, Derived>();\n    assert_catches<      volatile Base * const          &, Base *, Derived>();\n    assert_catches<const volatile Base * const          &, Base *, Derived>();\n    assert_catches<               Base *       volatile &, Base *, Derived>();\n    assert_catches<const          Base *       volatile &, Base *, Derived>();\n    assert_catches<      volatile Base *       volatile &, Base *, Derived>();\n    assert_catches<const volatile Base *       volatile &, Base *, Derived>();\n    assert_catches<               Base * const volatile &, Base *, Derived>();\n    assert_catches<const          Base * const volatile &, Base *, Derived>();\n    assert_catches<      volatile Base * const volatile &, Base *, Derived>();\n    assert_catches<const volatile Base * const volatile &, Base *, Derived>();\n\n}\n\nvoid f7()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Derived * cv2 &\n    // cannot catch an exception of type:\n    //   Base *\n    assert_cannot_catch<               Derived *                &, Base *, Derived>();\n    assert_cannot_catch<const          Derived *                &, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived *                &, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived *                &, Base *, Derived>();\n    assert_cannot_catch<               Derived * const          &, Base *, Derived>();\n    assert_cannot_catch<const          Derived * const          &, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived * const          &, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived * const          &, Base *, Derived>();\n    assert_cannot_catch<               Derived *       volatile &, Base *, Derived>();\n    assert_cannot_catch<const          Derived *       volatile &, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived *       volatile &, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived *       volatile &, Base *, Derived>();\n    assert_cannot_catch<               Derived * const volatile &, Base *, Derived>();\n    assert_cannot_catch<const          Derived * const volatile &, Base *, Derived>();\n    assert_cannot_catch<      volatile Derived * const volatile &, Base *, Derived>();\n    assert_cannot_catch<const volatile Derived * const volatile &, Base *, Derived>();\n}\n\nvoid f8()\n{\n    // This test case has a caveat noted in the discussion here:\n    //   https://gcc.gnu.org/ml/gcc-patches/2009-08/msg00264.html\n    // Specifically:\n    //   This [test exposes a] corner case of the ARM C++ ABI. The generic C++\n    //   ABI also gets this wrong, because I failed to notice the subtlety here.\n    //   The issue is that 15.3/3 3rd bullet says:\n    //     The handler is of type cv1 T* cv2 and E is a pointer type that\n    //     can be converted to the type of the handler by either or both of:\n    //       * a standard pointer conversion (4.10) not involving conversions\n    //         to pointers to private or protected or ambiguous classes\n    //   Notice that the handlers of type \"cv1 T*cv2&\" are not allowed such\n    //   freedom to find a base class. The ABI error is that we treat handlers\n    //   of reference type exactly the same as the corresponding hander of\n    //   non-reference type. Elsewhere in the exception handling this makes no\n    //   difference (for instance bullet 1 explicitly says 'cv T or cv T&').\n    //\n    // See also: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#388\n    //\n    //  TL;DR: it is an unresolved C++ ABI defect that these do catch\n\n    // Test that every combination of handler of type:\n    //   cv1 Base * cv2 &\n    // catches an exception of type:\n    //   Derived *\n    assert_catches<               Base *                &, Derived *, Derived>();\n    assert_catches<const          Base *                &, Derived *, Derived>();\n    assert_catches<      volatile Base *                &, Derived *, Derived>();\n    assert_catches<const volatile Base *                &, Derived *, Derived>();\n    assert_catches<               Base * const          &, Derived *, Derived>();\n    assert_catches<const          Base * const          &, Derived *, Derived>();\n    assert_catches<      volatile Base * const          &, Derived *, Derived>();\n    assert_catches<const volatile Base * const          &, Derived *, Derived>();\n    assert_catches<               Base *       volatile &, Derived *, Derived>();\n    assert_catches<const          Base *       volatile &, Derived *, Derived>();\n    assert_catches<      volatile Base *       volatile &, Derived *, Derived>();\n    assert_catches<const volatile Base *       volatile &, Derived *, Derived>();\n    assert_catches<               Base * const volatile &, Derived *, Derived>();\n    assert_catches<const          Base * const volatile &, Derived *, Derived>();\n    assert_catches<      volatile Base * const volatile &, Derived *, Derived>();\n    assert_catches<const volatile Base * const volatile &, Derived *, Derived>();\n}\n\nvoid f9()\n{\n    // Test that every combination of handler of type:\n    //   cv1 Base * cv2\n    // cannot catch an exception of type:\n    //   Ambiguous *\n    assert_cannot_catch<               Base *               , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const          Base *               , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<      volatile Base *               , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const volatile Base *               , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<               Base * const         , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const          Base * const         , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<      volatile Base * const         , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const volatile Base * const         , Ambiguous *, Ambiguous>();\n    assert_cannot_catch<               Base *       volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const          Base *       volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<      volatile Base *       volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const volatile Base *       volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<               Base * const volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const          Base * const volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<      volatile Base * const volatile, Ambiguous *, Ambiguous>();\n    assert_cannot_catch<const volatile Base * const volatile, Ambiguous *, Ambiguous>();\n}\n\nvoid f10()\n{\n    // Test that every combination of handler of type:\n    //  cv1 Base * cv2\n    // cannot catch an exception of type:\n    //  Private *\n    assert_cannot_catch<               Base *               , Private *, Private>();\n    assert_cannot_catch<const          Base *               , Private *, Private>();\n    assert_cannot_catch<      volatile Base *               , Private *, Private>();\n    assert_cannot_catch<const volatile Base *               , Private *, Private>();\n    assert_cannot_catch<               Base * const         , Private *, Private>();\n    assert_cannot_catch<const          Base * const         , Private *, Private>();\n    assert_cannot_catch<      volatile Base * const         , Private *, Private>();\n    assert_cannot_catch<const volatile Base * const         , Private *, Private>();\n    assert_cannot_catch<               Base *       volatile, Private *, Private>();\n    assert_cannot_catch<const          Base *       volatile, Private *, Private>();\n    assert_cannot_catch<      volatile Base *       volatile, Private *, Private>();\n    assert_cannot_catch<const volatile Base *       volatile, Private *, Private>();\n    assert_cannot_catch<               Base * const volatile, Private *, Private>();\n    assert_cannot_catch<const          Base * const volatile, Private *, Private>();\n    assert_cannot_catch<      volatile Base * const volatile, Private *, Private>();\n    assert_cannot_catch<const volatile Base * const volatile, Private *, Private>();\n}\n\nvoid f11()\n{\n    // Test that every combination of handler of type:\n    //  cv1 Base * cv2\n    // cannot catch an exception of type:\n    //  Protected *\n    assert_cannot_catch<               Base *               , Protected *, Protected>();\n    assert_cannot_catch<const          Base *               , Protected *, Protected>();\n    assert_cannot_catch<      volatile Base *               , Protected *, Protected>();\n    assert_cannot_catch<const volatile Base *               , Protected *, Protected>();\n    assert_cannot_catch<               Base * const         , Protected *, Protected>();\n    assert_cannot_catch<const          Base * const         , Protected *, Protected>();\n    assert_cannot_catch<      volatile Base * const         , Protected *, Protected>();\n    assert_cannot_catch<const volatile Base * const         , Protected *, Protected>();\n    assert_cannot_catch<               Base *       volatile, Protected *, Protected>();\n    assert_cannot_catch<const          Base *       volatile, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base *       volatile, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base *       volatile, Protected *, Protected>();\n    assert_cannot_catch<               Base * const volatile, Protected *, Protected>();\n    assert_cannot_catch<const          Base * const volatile, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base * const volatile, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base * const volatile, Protected *, Protected>();\n}\n\nvoid f12()\n{\n    // Test that every combination of handler of type:\n    //  cv1 Base * cv2 &\n    // cannot catch an exception of type:\n    //  Private *\n    assert_cannot_catch<               Base *                &, Private *, Private>();\n    assert_cannot_catch<const          Base *                &, Private *, Private>();\n    assert_cannot_catch<      volatile Base *                &, Private *, Private>();\n    assert_cannot_catch<const volatile Base *                &, Private *, Private>();\n    assert_cannot_catch<               Base * const          &, Private *, Private>();\n    assert_cannot_catch<const          Base * const          &, Private *, Private>();\n    assert_cannot_catch<      volatile Base * const          &, Private *, Private>();\n    assert_cannot_catch<const volatile Base * const          &, Private *, Private>();\n    assert_cannot_catch<               Base *       volatile &, Private *, Private>();\n    assert_cannot_catch<const          Base *       volatile &, Private *, Private>();\n    assert_cannot_catch<      volatile Base *       volatile &, Private *, Private>();\n    assert_cannot_catch<const volatile Base *       volatile &, Private *, Private>();\n    assert_cannot_catch<               Base * const volatile &, Private *, Private>();\n    assert_cannot_catch<const          Base * const volatile &, Private *, Private>();\n    assert_cannot_catch<      volatile Base * const volatile &, Private *, Private>();\n    assert_cannot_catch<const volatile Base * const volatile &, Private *, Private>();\n}\n\nvoid f13()\n{\n    // Test that every combination of handler of type:\n    //  cv1 Base * cv2 &\n    // cannot catch an exception of type:\n    //  Protected *\n    assert_cannot_catch<               Base *                &, Protected *, Protected>();\n    assert_cannot_catch<const          Base *                &, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base *                &, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base *                &, Protected *, Protected>();\n    assert_cannot_catch<               Base * const          &, Protected *, Protected>();\n    assert_cannot_catch<const          Base * const          &, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base * const          &, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base * const          &, Protected *, Protected>();\n    assert_cannot_catch<               Base *       volatile &, Protected *, Protected>();\n    assert_cannot_catch<const          Base *       volatile &, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base *       volatile &, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base *       volatile &, Protected *, Protected>();\n    assert_cannot_catch<               Base * const volatile &, Protected *, Protected>();\n    assert_cannot_catch<const          Base * const volatile &, Protected *, Protected>();\n    assert_cannot_catch<      volatile Base * const volatile &, Protected *, Protected>();\n    assert_cannot_catch<const volatile Base * const volatile &, Protected *, Protected>();\n}\n\nint main()\n{\n    f1();\n    f2();\n    f3();\n    f4();\n    f5();\n    f6();\n    f7();\n    f8();\n    f9();\n    f10();\n    f11();\n    f12();\n    f13();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_ptr.pass.cpp",
    "content": "//===---------------------- catch_class_04.cpp ----------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n/*\n    This test checks that adjustedPtr is correct as there exist offsets in this\n    object for the various subobjects, all of which have a unique id_ to\n    check against.  It also checks that virtual bases work properly\n*/\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct B\n{\n    static int count;\n    int id_;\n    explicit B(int id) : id_(id) {count++;}\n    B(const B& a) : id_(a.id_) {count++;}\n    ~B() {count--;}\n};\n\nint B::count = 0;\n\nstruct C1\n    : virtual B\n{\n    static int count;\n    int id_;\n    explicit C1(int id) : B(id-2), id_(id) {count++;}\n    C1(const C1& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C1() {count--;}\n};\n\nint C1::count = 0;\n\nstruct C2\n    : virtual private B\n{\n    static int count;\n    int id_;\n    explicit C2(int id) : B(id-2), id_(id) {count++;}\n    C2(const C2& a) : B(a.id_-2), id_(a.id_) {count++;}\n    ~C2() {count--;}\n};\n\nint C2::count = 0;\n\nstruct A\n    : C1, C2\n{\n    static int count;\n    int id_;\n    explicit A(int id) : C1(id-1), C2(id-2), B(id+3), id_(id) {count++;}\n    A(const A& a) : C1(a.id_-1), C2(a.id_-2), B(a.id_+3), id_(a.id_) {count++;}\n    ~A() {count--;}\n};\n\nint A::count = 0;\n\nA a(5);\n\nvoid f1()\n{\n    throw &a;\n    assert(false);\n}\n\nvoid f2()\n{\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (const A* a)  // can catch A\n    {\n        assert(a->id_ == 5);\n        assert(static_cast<const C1*>(a)->id_ == 4);\n        assert(static_cast<const C2*>(a)->id_ == 3);\n        assert(static_cast<const B*>(a)->id_ == 8);\n        throw;\n    }\n    catch (const C1*)\n    {\n        assert(false);\n    }\n    catch (const C2*)\n    {\n        assert(false);\n    }\n    catch (const B*)\n    {\n        assert(false);\n    }\n}\n\nvoid f3()\n{\n    try\n    {\n        f2();\n        assert(false);\n    }\n    catch (const B* a)  // can catch B\n    {\n        assert(static_cast<const B*>(a)->id_ == 8);\n        throw;\n    }\n    catch (const C1* c1)\n    {\n        assert(false);\n    }\n    catch (const C2*)\n    {\n        assert(false);\n    }\n}\n\nvoid f4()\n{\n    try\n    {\n        f3();\n        assert(false);\n    }\n    catch (const C2* c2)  // can catch C2\n    {\n        assert(c2->id_ == 3);\n        throw;\n    }\n    catch (const B* a)\n    {\n        assert(false);\n    }\n    catch (const C1*)\n    {\n        assert(false);\n    }\n}\n\nvoid f5()\n{\n    try\n    {\n        f4();\n        assert(false);\n    }\n    catch (const C1* c1)  // can catch C1\n    {\n        assert(c1->id_ == 4);\n        assert(static_cast<const B*>(c1)->id_ == 8);\n        throw;\n    }\n    catch (const B* a)\n    {\n        assert(false);\n    }\n    catch (const C2*)\n    {\n        assert(false);\n    }\n}\n\nint main()\n{\n    try\n    {\n        f5();\n        assert(false);\n    }\n    catch (...)\n    {\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/catch_ptr_02.pass.cpp",
    "content": "//===------------------------- catch_ptr_02.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n\nstruct  A {};\nA a;\nconst A ca = A();\n\nvoid test1 ()\n{\n    try\n    {\n        throw &a;\n        assert(false);\n    }\n    catch ( const A* )\n    {\n    }\n    catch ( A *)\n    {\n        assert (false);\n    }\n}\n\nvoid test2 ()\n{\n    try\n     {\n        throw &a;\n        assert(false);\n    }\n    catch ( A* )\n    {\n    }\n    catch ( const A *)\n    {\n         assert (false);\n    }\n}\n\nvoid test3 ()\n{\n    try\n    {\n        throw &ca;\n        assert(false);\n    }\n    catch ( const A* )\n    {\n    }\n    catch ( A *)\n    {\n        assert (false);\n    }\n}\n\nvoid test4 ()\n{\n    try\n    {\n        throw &ca;\n        assert(false);\n    }\n    catch ( A *)\n    {\n        assert (false);\n    }\n    catch ( const A* )\n    {\n    }\n}\n\nstruct base1 {int x;};\nstruct base2 {int x;};\nstruct derived : base1, base2 {};\n\nvoid test5 ()\n{\n    try\n    {\n        throw (derived*)0;\n        assert(false);\n    }\n    catch (base2 *p) {\n        assert (p == 0);\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\nvoid test6 ()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (base2 *p) {\n        assert (p == nullptr);\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\nvoid test7 ()\n{\n    try\n    {\n        throw (derived*)12;\n        assert(false);\n    }\n    catch (base2 *p) {\n        assert ((unsigned long)p == 12+sizeof(base1));\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\n\nstruct vBase {};\nstruct vDerived : virtual public vBase {};\n\nvoid test8 ()\n{\n    vDerived derived;\n    try\n    {\n        throw &derived;\n        assert(false);\n    }\n    catch (vBase *p) {\n        assert(p != 0);\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\nvoid test9 ()\n{\n    try\n    {\n        throw nullptr;\n        assert(false);\n    }\n    catch (vBase *p) {\n        assert(p == 0);\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\nvoid test10 ()\n{\n    try\n    {\n        throw (vDerived*)0;\n        assert(false);\n    }\n    catch (vBase *p) {\n        assert(p == 0);\n    }\n    catch (...)\n    {\n        assert (false);\n    }\n}\n\nint main()\n{\n    test1();\n    test2();\n    test3();\n    test4();\n    test5();\n    test6();\n    test7();\n    test8();\n    test9();\n    test10();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/cxa_thread_atexit_test.pass.cpp",
    "content": "//===--------------------- cxa_thread_atexit_test.cpp ---------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n// REQUIRES: linux\n\n#include <assert.h>\n#include <cxxabi.h>\n\nstatic bool AtexitImplCalled = false;\n\nextern \"C\" int __cxa_thread_atexit_impl(void (*dtor)(void *), void *obj,\n                                        void *dso_symbol) {\n  assert(dtor == reinterpret_cast<void (*)(void *)>(1));\n  assert(obj == reinterpret_cast<void *>(2));\n  assert(dso_symbol == reinterpret_cast<void *>(3));\n  AtexitImplCalled = true;\n  return 4;\n}\n\nint main() {\n  int RV = __cxxabiv1::__cxa_thread_atexit(\n      reinterpret_cast<void (*)(void *)>(1), reinterpret_cast<void *>(2),\n      reinterpret_cast<void *>(3));\n  assert(RV = 4);\n  assert(AtexitImplCalled);\n  return 0;\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/dynamic_cast14.pass.cpp",
    "content": "//===------------------------- dynamic_cast14.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n#include \"support/timer.hpp\"\n\nnamespace t1\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1_3() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public virtual A2,\n      public A1\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1_4() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[13489];\n    virtual ~A5() {}\n\n    A1* getA1_3() {return A3::getA1();}\n    A1* getA1_4() {return A4::getA1();}\n    A2* getA2() {return A3::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nstruct A6\n    : public A1\n{\n    char _[81349];\n    virtual ~A6() {}\n\n    A1* getA1_6() {return A1::getA1();}\n    A6* getA6() {return this;}\n};\n\nstruct A7\n    : public A5,\n      public A6\n{\n    char _[34819];\n    virtual ~A7() {}\n\n    A1* getA1_3() {return A5::getA1_3();}\n    A1* getA1_4() {return A5::getA1_4();}\n    A1* getA1_6() {return A6::getA1_6();}\n    A2* getA2() {return A5::getA2();}\n    A3* getA3() {return A5::getA3();}\n    A4* getA4() {return A5::getA4();}\n    A5* getA5() {return A5::getA5();}\n    A6* getA6() {return A6::getA6();}\n    A7* getA7() {return this;}\n};\n\nstruct A8\n    : public A7\n{\n    char _[3489];\n    virtual ~A8() {}\n\n    A1* getA1_3() {return A7::getA1_3();}\n    A1* getA1_4() {return A7::getA1_4();}\n    A1* getA1_6() {return A7::getA1_6();}\n    A2* getA2() {return A7::getA2();}\n    A3* getA3() {return A7::getA3();}\n    A4* getA4() {return A7::getA4();}\n    A5* getA5() {return A7::getA5();}\n    A6* getA6() {return A7::getA6();}\n    A7* getA7() {return A7::getA7();}\n    A8* getA8() {return this;}\n};\n\nstruct A9\n    : public A1\n{\n    char _[3481];\n    virtual ~A9() {}\n\n    A1* getA1_9() {return A1::getA1();}\n    A9* getA9() {return this;}\n};\n\nstruct A10\n    : public virtual A8\n{\n    char _[4831];\n    virtual ~A10() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A10* getA10() {return this;}\n};\n\nstruct A11\n    : public virtual A8,\n      public A9\n{\n    char _[6483];\n    virtual ~A11() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A1* getA1_9() {return A9::getA1_9();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A9* getA9() {return A9::getA9();}\n    A11* getA11() {return this;}\n};\n\nstruct A12\n    : public A10,\n      public A11\n{\n    char _[2283];\n    virtual ~A12() {}\n\n    A1* getA1_3() {return A10::getA1_3();}\n    A1* getA1_4() {return A10::getA1_4();}\n    A1* getA1_6() {return A10::getA1_6();}\n    A1* getA1_9() {return A11::getA1_9();}\n    A2* getA2() {return A10::getA2();}\n    A3* getA3() {return A10::getA3();}\n    A4* getA4() {return A10::getA4();}\n    A5* getA5() {return A10::getA5();}\n    A6* getA6() {return A10::getA6();}\n    A7* getA7() {return A10::getA7();}\n    A8* getA8() {return A10::getA8();}\n    A9* getA9() {return A11::getA9();}\n    A10* getA10() {return A10::getA10();}\n    A11* getA11() {return A11::getA11();}\n    A12* getA12() {return this;}\n};\n\nstruct A13\n    : public A12\n{\n    char _[1283];\n    virtual ~A13() {}\n\n    A1* getA1_3() {return A12::getA1_3();}\n    A1* getA1_4() {return A12::getA1_4();}\n    A1* getA1_6() {return A12::getA1_6();}\n    A1* getA1_9() {return A12::getA1_9();}\n    A2* getA2() {return A12::getA2();}\n    A3* getA3() {return A12::getA3();}\n    A4* getA4() {return A12::getA4();}\n    A5* getA5() {return A12::getA5();}\n    A6* getA6() {return A12::getA6();}\n    A7* getA7() {return A12::getA7();}\n    A8* getA8() {return A12::getA8();}\n    A9* getA9() {return A12::getA9();}\n    A10* getA10() {return A12::getA10();}\n    A11* getA11() {return A12::getA11();}\n    A12* getA12() {return A12::getA12();}\n    A13* getA13() {return this;}\n};\n\nvoid test()\n{\n    A3 a3;\n    A4 a4;\n    A5 a5;\n    A6 a6;\n    A7 a7;\n    A8 a8;\n    A9 a9;\n    A10 a10;\n    A11 a11;\n    A12 a12;\n    A13 a13;\n\n    assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n\n    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n\n    assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n\n    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());\n\n    assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());\n    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());\n    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());\n\n    assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());\n\n    assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());\n\n    assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());\n\n    assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());\n\n    assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());\n    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());\n    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());\n\n    assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());\n\n    assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());\n\n    assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());\n\n    assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());\n\n    assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());\n\n    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());\n\n    assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());\n\n    assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());\n\n    assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());\n\n    assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());\n\n    assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());\n\n    assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());\n\n    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA2()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA5()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA7()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA8()) == 0);\n\n    assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());\n\n    assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());\n\n    assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());\n\n    assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());\n\n    assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());\n\n    assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());\n\n    assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());\n\n    assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());\n\n    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA2()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA5()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA7()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA8()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA9()) == 0);\n\n    assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());\n\n    assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());\n\n    assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());\n\n    assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());\n\n    assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());\n\n    assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());\n\n    assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());\n\n    assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());\n\n    assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());\n\n    assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());\n\n    assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());\n\n    assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());\n\n    assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());\n\n    assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());\n\n    assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());\n\n    assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());\n\n    assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());\n\n    assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());\n\n    assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());\n\n    assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());\n\n    assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());\n\n    assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());\n}\n\n}  // t1\n\nnamespace t2\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : protected A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1_3() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public virtual A2,\n      public A1\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1_4() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[13489];\n    virtual ~A5() {}\n\n    A1* getA1_3() {return A3::getA1();}\n    A1* getA1_4() {return A4::getA1();}\n    A2* getA2() {return A3::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nstruct A6\n    : public A1\n{\n    char _[81349];\n    virtual ~A6() {}\n\n    A1* getA1_6() {return A1::getA1();}\n    A6* getA6() {return this;}\n};\n\nstruct A7\n    : public A5,\n      public A6\n{\n    char _[34819];\n    virtual ~A7() {}\n\n    A1* getA1_3() {return A5::getA1_3();}\n    A1* getA1_4() {return A5::getA1_4();}\n    A1* getA1_6() {return A6::getA1_6();}\n    A2* getA2() {return A5::getA2();}\n    A3* getA3() {return A5::getA3();}\n    A4* getA4() {return A5::getA4();}\n    A5* getA5() {return A5::getA5();}\n    A6* getA6() {return A6::getA6();}\n    A7* getA7() {return this;}\n};\n\nstruct A8\n    : public A7\n{\n    char _[3489];\n    virtual ~A8() {}\n\n    A1* getA1_3() {return A7::getA1_3();}\n    A1* getA1_4() {return A7::getA1_4();}\n    A1* getA1_6() {return A7::getA1_6();}\n    A2* getA2() {return A7::getA2();}\n    A3* getA3() {return A7::getA3();}\n    A4* getA4() {return A7::getA4();}\n    A5* getA5() {return A7::getA5();}\n    A6* getA6() {return A7::getA6();}\n    A7* getA7() {return A7::getA7();}\n    A8* getA8() {return this;}\n};\n\nstruct A9\n    : public A1\n{\n    char _[3481];\n    virtual ~A9() {}\n\n    A1* getA1_9() {return A1::getA1();}\n    A9* getA9() {return this;}\n};\n\nstruct A10\n    : public virtual A8\n{\n    char _[4831];\n    virtual ~A10() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A10* getA10() {return this;}\n};\n\nstruct A11\n    : public virtual A8,\n      public A9\n{\n    char _[6483];\n    virtual ~A11() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A1* getA1_9() {return A9::getA1_9();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A9* getA9() {return A9::getA9();}\n    A11* getA11() {return this;}\n};\n\nstruct A12\n    : public A10,\n      public A11\n{\n    char _[2283];\n    virtual ~A12() {}\n\n    A1* getA1_3() {return A10::getA1_3();}\n    A1* getA1_4() {return A10::getA1_4();}\n    A1* getA1_6() {return A10::getA1_6();}\n    A1* getA1_9() {return A11::getA1_9();}\n    A2* getA2() {return A10::getA2();}\n    A3* getA3() {return A10::getA3();}\n    A4* getA4() {return A10::getA4();}\n    A5* getA5() {return A10::getA5();}\n    A6* getA6() {return A10::getA6();}\n    A7* getA7() {return A10::getA7();}\n    A8* getA8() {return A10::getA8();}\n    A9* getA9() {return A11::getA9();}\n    A10* getA10() {return A10::getA10();}\n    A11* getA11() {return A11::getA11();}\n    A12* getA12() {return this;}\n};\n\nstruct A13\n    : public A12\n{\n    char _[1283];\n    virtual ~A13() {}\n\n    A1* getA1_3() {return A12::getA1_3();}\n    A1* getA1_4() {return A12::getA1_4();}\n    A1* getA1_6() {return A12::getA1_6();}\n    A1* getA1_9() {return A12::getA1_9();}\n    A2* getA2() {return A12::getA2();}\n    A3* getA3() {return A12::getA3();}\n    A4* getA4() {return A12::getA4();}\n    A5* getA5() {return A12::getA5();}\n    A6* getA6() {return A12::getA6();}\n    A7* getA7() {return A12::getA7();}\n    A8* getA8() {return A12::getA8();}\n    A9* getA9() {return A12::getA9();}\n    A10* getA10() {return A12::getA10();}\n    A11* getA11() {return A12::getA11();}\n    A12* getA12() {return A12::getA12();}\n    A13* getA13() {return this;}\n};\n\nvoid test()\n{\n    A3 a3;\n    A4 a4;\n    A5 a5;\n    A6 a6;\n    A7 a7;\n    A8 a8;\n    A9 a9;\n    A10 a10;\n    A11 a11;\n    A12 a12;\n    A13 a13;\n\n    assert(dynamic_cast<A3*>(a3.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n\n    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n\n    assert(dynamic_cast<A3*>(a5.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a5.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a5.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n\n    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());\n\n    assert(dynamic_cast<A3*>(a7.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());\n    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());\n\n    assert(dynamic_cast<A4*>(a7.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());\n\n    assert(dynamic_cast<A5*>(a7.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());\n\n    assert(dynamic_cast<A6*>(a7.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());\n\n    assert(dynamic_cast<A7*>(a7.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());\n\n    assert(dynamic_cast<A3*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());\n    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());\n\n    assert(dynamic_cast<A4*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());\n\n    assert(dynamic_cast<A5*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());\n\n    assert(dynamic_cast<A6*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());\n\n    assert(dynamic_cast<A7*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());\n\n    assert(dynamic_cast<A8*>(a8.getA1_3()) == 0);\n    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());\n\n    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());\n\n    assert(dynamic_cast<A3*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());\n\n    assert(dynamic_cast<A4*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());\n\n    assert(dynamic_cast<A5*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());\n\n    assert(dynamic_cast<A6*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());\n\n    assert(dynamic_cast<A7*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());\n\n    assert(dynamic_cast<A8*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());\n\n    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA2()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA5()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA7()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA8()) == 0);\n\n    assert(dynamic_cast<A10*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());\n\n    assert(dynamic_cast<A3*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());\n\n    assert(dynamic_cast<A4*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());\n\n    assert(dynamic_cast<A5*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());\n\n    assert(dynamic_cast<A6*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());\n\n    assert(dynamic_cast<A7*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());\n\n    assert(dynamic_cast<A8*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());\n\n    assert(dynamic_cast<A9*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());\n\n    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA2()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA5()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA7()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA8()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA9()) == 0);\n\n    assert(dynamic_cast<A11*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());\n\n    assert(dynamic_cast<A3*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());\n\n    assert(dynamic_cast<A4*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());\n\n    assert(dynamic_cast<A5*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());\n\n    assert(dynamic_cast<A6*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());\n\n    assert(dynamic_cast<A7*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());\n\n    assert(dynamic_cast<A8*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());\n\n    assert(dynamic_cast<A9*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());\n\n    assert(dynamic_cast<A10*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());\n\n    assert(dynamic_cast<A11*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());\n\n    assert(dynamic_cast<A12*>(a12.getA1_3()) == 0);\n    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());\n\n    assert(dynamic_cast<A3*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());\n\n    assert(dynamic_cast<A4*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());\n\n    assert(dynamic_cast<A5*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());\n\n    assert(dynamic_cast<A6*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());\n\n    assert(dynamic_cast<A7*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());\n\n    assert(dynamic_cast<A8*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());\n\n    assert(dynamic_cast<A9*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());\n\n    assert(dynamic_cast<A10*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());\n\n    assert(dynamic_cast<A11*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());\n\n    assert(dynamic_cast<A12*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());\n\n    assert(dynamic_cast<A13*>(a13.getA1_3()) == 0);\n    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());\n}\n\n}  // t2\n\nnamespace t3\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      protected virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1_3() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public virtual A2,\n      public A1\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1_4() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[13489];\n    virtual ~A5() {}\n\n    A1* getA1_3() {return A3::getA1();}\n    A1* getA1_4() {return A4::getA1();}\n    A2* getA2() {return A3::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nstruct A6\n    : public A1\n{\n    char _[81349];\n    virtual ~A6() {}\n\n    A1* getA1_6() {return A1::getA1();}\n    A6* getA6() {return this;}\n};\n\nstruct A7\n    : public A5,\n      public A6\n{\n    char _[34819];\n    virtual ~A7() {}\n\n    A1* getA1_3() {return A5::getA1_3();}\n    A1* getA1_4() {return A5::getA1_4();}\n    A1* getA1_6() {return A6::getA1_6();}\n    A2* getA2() {return A5::getA2();}\n    A3* getA3() {return A5::getA3();}\n    A4* getA4() {return A5::getA4();}\n    A5* getA5() {return A5::getA5();}\n    A6* getA6() {return A6::getA6();}\n    A7* getA7() {return this;}\n};\n\nstruct A8\n    : public A7\n{\n    char _[3489];\n    virtual ~A8() {}\n\n    A1* getA1_3() {return A7::getA1_3();}\n    A1* getA1_4() {return A7::getA1_4();}\n    A1* getA1_6() {return A7::getA1_6();}\n    A2* getA2() {return A7::getA2();}\n    A3* getA3() {return A7::getA3();}\n    A4* getA4() {return A7::getA4();}\n    A5* getA5() {return A7::getA5();}\n    A6* getA6() {return A7::getA6();}\n    A7* getA7() {return A7::getA7();}\n    A8* getA8() {return this;}\n};\n\nstruct A9\n    : public A1\n{\n    char _[3481];\n    virtual ~A9() {}\n\n    A1* getA1_9() {return A1::getA1();}\n    A9* getA9() {return this;}\n};\n\nstruct A10\n    : public virtual A8\n{\n    char _[4831];\n    virtual ~A10() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A10* getA10() {return this;}\n};\n\nstruct A11\n    : public virtual A8,\n      public A9\n{\n    char _[6483];\n    virtual ~A11() {}\n\n    A1* getA1_3() {return A8::getA1_3();}\n    A1* getA1_4() {return A8::getA1_4();}\n    A1* getA1_6() {return A8::getA1_6();}\n    A1* getA1_9() {return A9::getA1_9();}\n    A2* getA2() {return A8::getA2();}\n    A3* getA3() {return A8::getA3();}\n    A4* getA4() {return A8::getA4();}\n    A5* getA5() {return A8::getA5();}\n    A6* getA6() {return A8::getA6();}\n    A7* getA7() {return A8::getA7();}\n    A8* getA8() {return A8::getA8();}\n    A9* getA9() {return A9::getA9();}\n    A11* getA11() {return this;}\n};\n\nstruct A12\n    : public A10,\n      public A11\n{\n    char _[2283];\n    virtual ~A12() {}\n\n    A1* getA1_3() {return A10::getA1_3();}\n    A1* getA1_4() {return A10::getA1_4();}\n    A1* getA1_6() {return A10::getA1_6();}\n    A1* getA1_9() {return A11::getA1_9();}\n    A2* getA2() {return A10::getA2();}\n    A3* getA3() {return A10::getA3();}\n    A4* getA4() {return A10::getA4();}\n    A5* getA5() {return A10::getA5();}\n    A6* getA6() {return A10::getA6();}\n    A7* getA7() {return A10::getA7();}\n    A8* getA8() {return A10::getA8();}\n    A9* getA9() {return A11::getA9();}\n    A10* getA10() {return A10::getA10();}\n    A11* getA11() {return A11::getA11();}\n    A12* getA12() {return this;}\n};\n\nstruct A13\n    : public A12\n{\n    char _[1283];\n    virtual ~A13() {}\n\n    A1* getA1_3() {return A12::getA1_3();}\n    A1* getA1_4() {return A12::getA1_4();}\n    A1* getA1_6() {return A12::getA1_6();}\n    A1* getA1_9() {return A12::getA1_9();}\n    A2* getA2() {return A12::getA2();}\n    A3* getA3() {return A12::getA3();}\n    A4* getA4() {return A12::getA4();}\n    A5* getA5() {return A12::getA5();}\n    A6* getA6() {return A12::getA6();}\n    A7* getA7() {return A12::getA7();}\n    A8* getA8() {return A12::getA8();}\n    A9* getA9() {return A12::getA9();}\n    A10* getA10() {return A12::getA10();}\n    A11* getA11() {return A12::getA11();}\n    A12* getA12() {return A12::getA12();}\n    A13* getA13() {return this;}\n};\n\nvoid test()\n{\n    A3 a3;\n    A4 a4;\n    A5 a5;\n    A6 a6;\n    A7 a7;\n    A8 a8;\n    A9 a9;\n    A10 a10;\n    A11 a11;\n    A12 a12;\n    A13 a13;\n\n    assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n\n    assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n\n    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);\n\n    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());\n\n    assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());\n    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());\n    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());\n\n    assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());\n    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());\n\n    assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());\n    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());\n\n    assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());\n    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());\n\n    assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());\n    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());\n\n    assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());\n    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());\n    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());\n\n    assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());\n    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());\n\n    assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());\n    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());\n\n    assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());\n    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());\n\n    assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());\n    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());\n\n    assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());\n    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());\n\n    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);\n\n    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());\n\n    assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());\n    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());\n\n    assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());\n    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());\n\n    assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());\n    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());\n\n    assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());\n    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());\n\n    assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());\n    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());\n\n    assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());\n    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());\n\n    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA2()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA3()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA4()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA5()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA6()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA7()) == 0);\n    assert(dynamic_cast<A9*>(a10.getA8()) == 0);\n\n    assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());\n    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());\n\n    assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());\n    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());\n\n    assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());\n    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());\n\n    assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());\n    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());\n\n    assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());\n    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());\n\n    assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());\n    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());\n\n    assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());\n    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());\n\n    assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());\n    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());\n\n    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA2()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA3()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA4()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA5()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA6()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA7()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA8()) == 0);\n    assert(dynamic_cast<A10*>(a11.getA9()) == 0);\n\n    assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());\n    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());\n\n    assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());\n    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());\n\n    assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());\n    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());\n\n    assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());\n    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());\n\n    assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());\n    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());\n\n    assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());\n    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());\n\n    assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());\n    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());\n\n    assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());\n    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());\n\n    assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());\n    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());\n\n    assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());\n    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());\n\n    assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());\n    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());\n\n    assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());\n    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());\n\n    assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());\n    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());\n\n    assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());\n    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());\n\n    assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());\n    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());\n\n    assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());\n    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());\n\n    assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());\n    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());\n\n    assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());\n    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());\n\n    assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());\n    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());\n\n    assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());\n    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());\n\n    assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());\n    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());\n\n    assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());\n    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());\n}\n\n}  // t3\n\nint main()\n{\n    timer t;\n    t1::test();\n    t2::test();\n    t3::test();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/dynamic_cast3.pass.cpp",
    "content": "//===------------------------- dynamic_cast3.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n#include \"support/timer.hpp\"\n\n/*\n\nA1   A2   A3\n\n*/\n\nnamespace t1\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t1\n\n/*\n\nA1   A2\n|\nA3\n\n*/\n\nnamespace t2\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA3()) == 0);\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t2\n\nnamespace t3\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA3()) == 0);\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t3\n\nnamespace t4\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA3()) == 0);\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t4\n\nnamespace t5\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA3()) == 0);\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t5\n\n/*\n\nA1   A2\n \\  /\n  A3\n\n*/\n\nnamespace t6\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t6\n\nnamespace t7\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t7\n\nnamespace t8\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t8\n\nnamespace t9\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t9\n\nnamespace t10\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t10\n\nnamespace t11\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t11\n\nnamespace t12\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t12\n\nnamespace t13\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t13\n\nnamespace t14\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t14\n\nnamespace t15\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      private virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t15\n\n/*\n\nA1\n|\nA2\n|\nA3\n\n*/\n\nnamespace t16\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t16\n\nnamespace t17\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t17\n\nnamespace t18\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t18\n\nnamespace t19\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : protected virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t19\n\nnamespace t20\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t20\n\nnamespace t21\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t21\n\nnamespace t22\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : protected virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t22\n\nnamespace t23\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    t23::A1* getA1() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t23\n\nnamespace t24\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : protected virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    t24::A1* getA1() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t24\n\nnamespace t25\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : protected virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    t25::A1* getA1() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t25\n\n/*\n\nA1 A1\n|  |\nA2 |\n \\ |  \n  A3\n\n*/\n\nnamespace t26\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t26\n\nnamespace t27\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t27\n\nnamespace t28\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t28\n\nnamespace t29\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t29\n\nnamespace t30\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t30\n\nnamespace t31\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t31\n\nnamespace t32\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t32\n\nnamespace t33\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA12() {return A2::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA12()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t33\n\n/*\n\nA1\n| \\\nA2 \\\n \\ |  \n  A3\n\n*/\n\nnamespace t34\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t34\n\nnamespace t35\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t35\n\nnamespace t36\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t36\n\nnamespace t37\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t37\n\nnamespace t38\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : public virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t38\n\nnamespace t39\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t39\n\nnamespace t40\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t40\n\nnamespace t41\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n    : private virtual A1\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A1* getA1() {return this;}\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : private virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return this;}\n    A3* getA3() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n}\n\n}  // t41\n\nint main()\n{\n    timer t;\n    t1::test();\n    t2::test();\n    t3::test();\n    t4::test();\n    t5::test();\n    t6::test();\n    t7::test();\n    t8::test();\n    t9::test();\n    t10::test();\n    t11::test();\n    t12::test();\n    t13::test();\n    t14::test();\n    t15::test();\n    t16::test();\n    t17::test();\n    t18::test();\n    t19::test();\n    t20::test();\n    t21::test();\n    t22::test();\n    t23::test();\n    t24::test();\n    t25::test();\n    t26::test();\n    t27::test();\n    t28::test();\n    t29::test();\n    t30::test();\n    t31::test();\n    t32::test();\n    t33::test();\n    t34::test();\n    t35::test();\n    t36::test();\n    t37::test();\n    t38::test();\n    t39::test();\n    t40::test();\n    t41::test();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/dynamic_cast5.pass.cpp",
    "content": "//===------------------------- dynamic_cast5.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n#include \"support/timer.hpp\"\n\nnamespace t1\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      private A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A3,\n      public A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    t1::A1* getA1() {return A3::getA1();}\n    A2* getA2() {return A3::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A4,\n      public A3\n{\n    char _[13489];\n    virtual ~A5() {}\n\n    t1::A1* getA1() {return A4::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A4::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n//    assert(dynamic_cast<A2*>(a3.getA3()) == 0);  // cast to private base\n    assert(dynamic_cast<A2*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n//    assert(dynamic_cast<A2*>(a4.getA3()) == 0);  // cast to private base\n//    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base\n    assert(dynamic_cast<A2*>(a5.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n//    assert(dynamic_cast<A2*>(a5.getA3()) == 0);  // cast to private base\n//    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base\n//    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a5.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n//    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t1\n\nnamespace t2\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public virtual A1,\n      public A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A3,\n      public A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    t2::A1* getA1() {return A3::getA1();}\n    A2* getA2() {return A3::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A4,\n      public A3\n{\n    char _[13489];\n    virtual ~A5() {}\n\n    t2::A1* getA1() {return A4::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A4::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA2()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());\n    assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA3()) == a4.getA2());\n//    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base\n    assert(dynamic_cast<A2*>(a5.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n//    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base\n//    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a4.getA2()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());\n    assert(dynamic_cast<A3*>(a5.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n//    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t2\n\nnamespace t3\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t3\n\nnamespace t4\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : protected A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n//    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());  // cast to protected base\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n//    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());  // cast to protected base\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t4\n\nnamespace t5\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      protected virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n//    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());  // cast to protected base\n    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n//    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());  // cast to protected base\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t5\n\nnamespace t6\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : protected A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == 0);\n//    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());  // cast to protected base\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n//    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());  // cast to protected base\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t6\n\nnamespace t7\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      protected virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n//    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());  // cast to protected base\n    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n//    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());  // cast to protected base\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t7\n\nnamespace t8\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : protected A3,\n      public A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == 0);\n//    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());  // cast to protected base\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t8\n\nnamespace t9\n{\n\nstruct A1\n{\n    char _[43981];\n    virtual ~A1() {}\n\n    A1* getA1() {return this;}\n};\n\nstruct A2\n{\n    char _[34981];\n    virtual ~A2() {}\n\n    A2* getA2() {return this;}\n};\n\nstruct A3\n    : public A1,\n      public virtual A2\n{\n    char _[93481];\n    virtual ~A3() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A3* getA3() {return this;}\n};\n\nstruct A4\n    : public A1,\n      public virtual A2\n{\n    char _[13489];\n    virtual ~A4() {}\n\n    A1* getA1() {return A1::getA1();}\n    A2* getA2() {return A2::getA2();}\n    A4* getA4() {return this;}\n};\n\nstruct A5\n    : public A3,\n      protected A4\n{\n    char _[41389];\n    virtual ~A5() {}\n\n    A1* getA14() {return A4::getA1();}\n    A1* getA13() {return A3::getA1();}\n    A2* getA2() {return A4::getA2();}\n    A3* getA3() {return A3::getA3();}\n    A4* getA4() {return A4::getA4();}\n    A5* getA5() {return this;}\n};\n\nvoid test()\n{\n    A1 a1;\n    A2 a2;\n    A3 a3;\n    A4 a4;\n    A5 a5;\n\n    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());\n    assert(dynamic_cast<A1*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());\n    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());\n    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());\n    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA2()) == 0);\n    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());\n    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());\n\n    assert(dynamic_cast<A2*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());\n    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());\n    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());\n    assert(dynamic_cast<A2*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());\n    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());\n\n    assert(dynamic_cast<A3*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());\n    assert(dynamic_cast<A3*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A3*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());\n    assert(dynamic_cast<A3*>(a5.getA4()) == 0);\n    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());\n\n    assert(dynamic_cast<A4*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A4*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());\n    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA13()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());\n    assert(dynamic_cast<A4*>(a5.getA3()) == 0);\n    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());\n//    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());  // cast to protected base\n\n    assert(dynamic_cast<A5*>(a1.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a2.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a3.getA3()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA1()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA2()) == 0);\n    assert(dynamic_cast<A5*>(a4.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA14()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());\n    assert(dynamic_cast<A5*>(a5.getA4()) == 0);\n    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());\n}\n\n}  // t9\n\n\nint main()\n{\n    timer t;\n    t1::test();\n    t2::test();\n    t3::test();\n    t4::test();\n    t5::test();\n    t6::test();\n    t7::test();\n    t8::test();\n    t9::test();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/dynamic_cast_stress.pass.cpp",
    "content": "//===------------------------- dynamic_cast_stress.cpp --------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n#include <tuple>\n#include \"support/timer.hpp\"\n\ntemplate <std::size_t Indx, std::size_t Depth>\nstruct C\n    : public virtual C<Indx, Depth-1>,\n      public virtual C<Indx+1, Depth-1>\n{\n    virtual ~C() {}\n};\n\ntemplate <std::size_t Indx>\nstruct C<Indx, 0>\n{\n    virtual ~C() {}\n};\n\ntemplate <std::size_t Indx, std::size_t Depth>\nstruct B\n    : public virtual C<Indx, Depth-1>,\n      public virtual C<Indx+1, Depth-1>\n{\n};\n\ntemplate <class Indx, std::size_t Depth>\nstruct makeB;\n\ntemplate <std::size_t ...Indx, std::size_t Depth>\nstruct makeB<std::__tuple_indices<Indx...>, Depth>\n    : public B<Indx, Depth>...\n{\n};\n\ntemplate <std::size_t Width, std::size_t Depth>\nstruct A\n    : public makeB<typename std::__make_tuple_indices<Width>::type, Depth>\n{\n};\n\nvoid test()\n{\n    const std::size_t Width = 10;\n    const std::size_t Depth = 5;\n    A<Width, Depth> a;\n    typedef B<Width/2, Depth> Destination;\n//    typedef A<Width, Depth> Destination;\n    Destination *b = nullptr;\n    {\n        timer t;\n        b = dynamic_cast<Destination*>((C<Width/2, 0>*)&a);\n    }\n    assert(b != 0);\n}\n\nint main()\n{\n    test();\n}\n\n/*\nTiming results I'm seeing (median of 3 microseconds):\n\n                          libc++abi    gcc's dynamic_cast\nB<Width/2, Depth> -O3      48.334         93.190           libc++abi 93% faster\nB<Width/2, Depth> -Os      58.535         94.103           libc++abi 61% faster\nA<Width, Depth>   -O3      11.515         33.134           libc++abi 188% faster\nA<Width, Depth>   -Os      12.631         31.553           libc++abi 150% faster\n\n*/\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/inherited_exception.pass.cpp",
    "content": "//===--------------------- inherited_exception.cpp ------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n//\n// This test case checks specifically the cases under C++ ABI 15.3.1, and 15.3.2\n//\n//  C++ ABI 15.3:\n//  A handler is a match for an exception object of type E if\n//  /  *  The handler is of type cv T or cv T& and E and T are the same type   \\\n//  |     (ignoring the top-level cv-qualifiers), or                           |\n//  |  *  the handler is of type cv T or cv T& and T is an unambiguous base    |\n//  \\     class of E, or                                                       /\n//     *  the handler is of type cv1 T* cv2 and E is a pointer type that can\n//        be converted to the type of the handler by either or both of\n//          o  a standard pointer conversion (4.10 [conv.ptr]) not involving\n//             conversions to private or protected or ambiguous classes\n//          o  a qualification conversion\n//     *  the handler is a pointer or pointer to member type and E is\n//        std::nullptr_t\n//\n//===----------------------------------------------------------------------===//\n\n#include <assert.h>\n\nstruct Base {\n  int b1;\n};\n\nstruct Base2 {\n  int b2;\n};\n\nstruct Child : public Base, public Base2 {\n  int c;\n};\n\nvoid f1() {\n  Child child;\n  child.b1 = 10;\n  child.b2 = 11;\n  child.c = 12;\n  throw child;\n}\n\nvoid f2() {\n  Child child;\n  child.b1 = 10;\n  child.b2 = 11;\n  child.c = 12;\n  throw static_cast<Base2&>(child);\n}\n\nvoid f3() {\n  static Child child;\n  child.b1 = 10;\n  child.b2 = 11;\n  child.c = 12;\n  throw static_cast<Base2*>(&child);\n}\n\nint main()\n{\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (const Child& c)\n    {\n        assert(true);\n    }\n    catch (const Base& b)\n    {\n        assert(false);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (const Base& c)\n    {\n        assert(true);\n    }\n    catch (const Child& b)\n    {\n        assert(false);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (const Base2& c)\n    {\n        assert(true);\n    }\n    catch (const Child& b)\n    {\n        assert(false);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n\n    try\n    {\n        f2();\n        assert(false);\n    }\n    catch (const Child& c)\n    {\n        assert(false);\n    }\n    catch (const Base& b)\n    {\n        assert(false);\n    }\n    catch (const Base2& b)\n    {\n        assert(true);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n\n    try\n    {\n        f3();\n        assert(false);\n    }\n    catch (const Base* c)\n    {\n        assert(false);\n    }\n    catch (const Child* b)\n    {\n        assert(false);\n    }\n    catch (const Base2* c)\n    {\n        assert(true);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/libcxxabi/__init__.py",
    "content": ""
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/libcxxabi/test/__init__.py",
    "content": ""
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/libcxxabi/test/config.py",
    "content": "import os\nimport sys\n\nfrom libcxx.test.config import Configuration as LibcxxConfiguration\n\n\nclass Configuration(LibcxxConfiguration):\n    # pylint: disable=redefined-outer-name\n    def __init__(self, lit_config, config):\n        super(Configuration, self).__init__(lit_config, config)\n        self.libcxxabi_src_root = None\n        self.libcxxabi_obj_root = None\n        self.libcxxabi_lib_root = None\n        self.libcxx_src_root = None\n\n    def configure_src_root(self):\n        self.libcxxabi_src_root = self.get_lit_conf(\n            'libcxxabi_src_root',\n            os.path.dirname(self.config.test_source_root))\n        self.libcxx_src_root = self.get_lit_conf(\n            'libcxx_src_root',\n            os.path.join(self.libcxxabi_src_root, '/../libcxx'))\n\n    def configure_obj_root(self):\n        self.libcxxabi_obj_root = self.get_lit_conf('libcxxabi_obj_root')\n        self.libcxxabi_lib_root = self.get_lit_conf('libcxxabi_lib_root',\n                                                     self.libcxxabi_obj_root)\n        super(Configuration, self).configure_obj_root()\n\n    def configure_compile_flags(self):\n        self.cxx.compile_flags += ['-DLIBCXXABI_NO_TIMER']\n        super(Configuration, self).configure_compile_flags()\n\n    def configure_compile_flags_header_includes(self):\n        cxx_headers = self.get_lit_conf(\n            'cxx_headers',\n            os.path.join(self.libcxx_src_root, '/include'))\n        if not os.path.isdir(cxx_headers):\n            self.lit_config.fatal(\"cxx_headers='%s' is not a directory.\"\n                                  % cxx_headers)\n        self.cxx.compile_flags += ['-I' + cxx_headers]\n\n        libcxxabi_headers = self.get_lit_conf(\n            'libcxxabi_headers',\n            os.path.join(self.libcxxabi_src_root, 'include'))\n        if not os.path.isdir(libcxxabi_headers):\n            self.lit_config.fatal(\"libcxxabi_headers='%s' is not a directory.\"\n                                  % libcxxabi_headers)\n        self.cxx.compile_flags += ['-I' + libcxxabi_headers]\n\n    def configure_compile_flags_exceptions(self):\n        pass\n\n    def configure_compile_flags_rtti(self):\n        pass\n\n    def configure_compile_flags_no_threads(self):\n        self.cxx.compile_flags += ['-DLIBCXXABI_HAS_NO_THREADS=1']\n\n    def configure_compile_flags_no_monotonic_clock(self):\n        pass\n\n    def configure_link_flags_abi_library_path(self):\n        # Configure ABI library paths.\n        if self.libcxxabi_lib_root:\n            self.cxx.link_flags += ['-L' + self.libcxxabi_lib_root,\n                                    '-Wl,-rpath,' + self.libcxxabi_lib_root]\n\n    # TODO(ericwf): Remove this. This is a hack for OS X.\n    # libc++ *should* export all of the symbols found in libc++abi on OS X.\n    # For this reason LibcxxConfiguration will not link libc++abi in OS X.\n    # However __cxa_throw_bad_new_array_length doesn't get exported into libc++\n    # yet so we still need to explicitly link libc++abi.\n    # See PR22654.\n    def configure_link_flags_abi_library(self):\n        self.cxx.link_flags += ['-lc++abi']\n\n    def configure_env(self):\n        if sys.platform == 'darwin' and self.libcxxabi_lib_root:\n            self.env['DYLD_LIBRARY_PATH'] = self.libcxxabi_lib_root\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/lit.cfg",
    "content": "# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:\n\n# Configuration file for the 'lit' test runner.\n\n\nimport os\nimport site\n\nsite.addsitedir(os.path.dirname(__file__))\n\n\n# Tell pylint that we know config and lit_config exist somewhere.\nif 'PYLINT_IMPORT' in os.environ:\n    config = object()\n    lit_config = object()\n\n# name: The name of this test suite.\nconfig.name = 'libc++abi'\n\n# suffixes: A list of file extensions to treat as test files.\nconfig.suffixes = ['.cpp']\n\n# test_source_root: The root path where tests are located.\nconfig.test_source_root = os.path.dirname(__file__)\n\n# Infer the libcxx_test_source_root for configuration import.\n# If libcxx_source_root isn't specified in the config, assume that the libcxx\n# and libcxxabi source directories are sibling directories.\nlibcxx_src_root = getattr(config, 'libcxx_src_root', None)\nif not libcxx_src_root:\n    libcxx_src_root = os.path.join(config.test_source_root, '../../libcxx')\nlibcxx_test_src_root = os.path.join(libcxx_src_root, 'test')\nif os.path.isfile(os.path.join(libcxx_test_src_root, 'libcxx', '__init__.py')):\n    site.addsitedir(libcxx_test_src_root)\nelse:\n    lit_config.fatal('Could not find libcxx test directory for test imports'\n                     ' in: %s' % libcxx_test_src_root)\n\n# Infer the test_exec_root from the libcxx_object root.\nobj_root = getattr(config, 'libcxxabi_obj_root', None)\n\n# Check that the test exec root is known.\nif obj_root is None:\n    import libcxx.test.config\n    libcxx.test.config.loadSiteConfig(\n        lit_config, config, 'libcxxabi_site_config', 'LIBCXXABI_SITE_CONFIG')\n    obj_root = getattr(config, 'libcxxabi_obj_root', None)\n    if obj_root is None:\n        import tempfile\n        obj_root = tempfile.mkdtemp(prefix='libcxxabi-testsuite-')\n        lit_config.warning('Creating temporary directory for object root: %s' %\n                           obj_root)\n\nconfig.test_exec_root = os.path.join(obj_root, 'test')\n\ncfg_variant = getattr(config, 'configuration_variant', 'libcxxabi')\nif cfg_variant:\n    print 'Using configuration variant: %s' % cfg_variant\n\n# Load the Configuration class from the module name <cfg_variant>.test.config.\nconfig_module_name = '.'.join([cfg_variant, 'test', 'config'])\nconfig_module = __import__(config_module_name, fromlist=['Configuration'])\n\nconfiguration = config_module.Configuration(lit_config, config)\nconfiguration.configure()\nconfiguration.print_config_info()\nconfig.test_format = configuration.get_test_format()\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/lit.site.cfg.in",
    "content": "@AUTO_GEN_COMMENT@\nconfig.cxx_under_test           = \"@LIBCXXABI_COMPILER@\"\nconfig.libcxxabi_src_root       = \"@LIBCXXABI_SOURCE_DIR@\"\nconfig.libcxxabi_obj_root       = \"@LIBCXXABI_BINARY_DIR@\"\nconfig.libcxxabi_lib_root       = \"@LIBCXXABI_LIBRARY_DIR@\"\nconfig.libcxx_src_root          = \"@LIBCXXABI_LIBCXX_PATH@\"\nconfig.cxx_headers              = \"@LIBCXXABI_LIBCXX_INCLUDES@\"\nconfig.llvm_unwinder            = \"@LIBCXXABI_USE_LLVM_UNWINDER@\"\nconfig.enable_threads           = \"@LIBCXXABI_ENABLE_THREADS@\"\nconfig.use_sanitizer            = \"@LLVM_USE_SANITIZER@\"\nconfig.enable_32bit             = \"@LIBCXXABI_BUILD_32_BITS@\"\nconfig.target_info              = \"@LIBCXXABI_TARGET_INFO@\"\nconfig.executor                 = \"@LIBCXXABI_EXECUTOR@\"\n\n# Let the main config do the real work.\nlit_config.load_config(config, \"@LIBCXXABI_SOURCE_DIR@/test/lit.cfg\")\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/support/timer.hpp",
    "content": "#ifndef TIMER_HPP\n#define TIMER_HPP\n\n// Define LIBCXXABI_NO_TIMER to disable testing with a timer.\n#ifndef LIBCXXABI_NO_TIMER\n\n#include <chrono>\n#include <iostream>\n\nclass timer\n{\n    typedef std::chrono::high_resolution_clock Clock;\n    typedef Clock::time_point TimePoint;\n    typedef std::chrono::microseconds MicroSeconds;\npublic:\n    timer() : m_start(Clock::now()) {}\n\n    timer(timer const &) = delete;\n    timer & operator=(timer const &) = delete;\n\n    ~timer()\n    {\n        using std::chrono::duration_cast;\n        TimePoint end = Clock::now();\n        MicroSeconds us = duration_cast<MicroSeconds>(end - m_start);\n        std::cout << us.count() << \" microseconds\\n\";\n    }\n\nprivate:\n    TimePoint m_start;\n};\n\n#else /* LIBCXXABI_NO_TIMER */\n\nclass timer\n{\npublic:\n    timer() {}\n    timer(timer const &) = delete;\n    timer & operator=(timer const &) = delete;\n    ~timer() {}\n};\n\n#endif /* LIBCXXABI_NO_TIMER */\n\n#endif /* TIMER_HPP */"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_aux_runtime.pass.cpp",
    "content": "//===-------------------------- test_aux_runtime.cpp ----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <typeinfo>\n#include <iostream>\n\n//  Test taken from 5.2.8.2\n//  When typeid is applied to a glvalue expression whose type is a polymorphic \n//  class type, (10.3), the result refers to a std::type_info object \n//  representing the type of the most derived object (1.8) (that is, the \n//  dynamic type) to which the glvalue refers. If the glvalue expression is \n//  obtained by applying the unary * operator to a pointer(68) and the pointer \n//  is a null pointer value (4.10), the typeid expression throws the \n//  std::bad_typeid exception (18.7.3).\n//\n//  68) If p is an expression of pointer type, then *p, (*p), *(p), \n//      ((*p)), *((p)), and so on all meet this requirement.\nbool bad_typeid_test () {\n    class A { virtual void f() {}}; \n    class B { virtual void g() {}}; \n    \n    B *bp = NULL;\n    try {bool b = typeid(*bp) == typeid (A); }\n    catch ( const std::bad_typeid &bc ) { return true; }\n    return false;\n    }\n    \n\n//  The value of a failed cast to pointer type is the null pointer value of \n//  the required result type. A failed cast to reference type throws \n//  std::bad_cast (18.7.2).\nbool bad_cast_test () {\n    class A { virtual void f() {}};\n    class B { virtual void g() {}};\n    class D : public virtual A, private B {};   \n\n    D d;\n    B *bp = (B*)&d;     // cast needed to break protection\n    try { D &dr = dynamic_cast<D&> (*bp); }\n    catch ( const std::bad_cast &bc ) { return true; }\n    return false;\n    }\n    \nint main ( int argc, char *argv [] ) {\n    int ret_val = 0;\n    \n    if ( !bad_typeid_test ()) {\n        std::cerr << \"TypeID test failed!\" << std::endl;\n        ret_val = 1;\n    }\n    \n    if ( !bad_cast_test ()) {\n        std::cerr << \"Bad cast test failed!\" << std::endl;\n        ret_val = 1;\n    }\n    \n    return ret_val;\n    }\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_aux_runtime_op_array_new.pass.cpp",
    "content": "//===-------------------------- test_aux_runtime_op_array_new.cpp ---------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <cxxabi.h>\n\n//  If the expression passed to operator new[] would result in an overflow, the\n//  allocation function is not called, and a std::bad_array_new_length exception\n//  is thrown instead (5.3.4p7).\nbool bad_array_new_length_test() {\n    try {\n      // We test this directly because Clang does not currently codegen the\n      // correct call to __cxa_bad_array_new_length, so this test would result\n      // in passing -1 to ::operator new[], which would then throw a\n      // std::bad_alloc, causing the test to fail.\n      __cxxabiv1::__cxa_throw_bad_array_new_length();\n    } catch ( const std::bad_array_new_length &banl ) {\n      return true;\n    }\n    return false;\n}\n\nint main(int argc, char *argv []) {\n    int ret_val = 0;\n\n    if ( !bad_array_new_length_test ()) {\n        std::cerr << \"Bad array new length test failed!\" << std::endl;\n        ret_val = 1;\n    }\n\n    return ret_val;\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_demangle.pass.cpp",
    "content": "//===-------------------------- test_demangle.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"support/timer.hpp\"\n#include <iostream>\n#include <string>\n#include <cstdlib>\n#include <cxxabi.h>\n#include <cassert>\n\n// Is long double fp80?  (Only x87 extended double has 64-bit mantissa)\n#define LDBL_FP80 (__LDBL_MANT_DIG__ == 64)\n\nconst char* cases[][2] =\n{\n    {\"_Z1A\", \"A\"},\n    {\"_Z1Av\", \"A()\"},\n    {\"_Z1A1B1C\", \"A(B, C)\"},\n    {\"_Z4testI1A1BE1Cv\", \"C test<A, B>()\"},\n    {\"_Z4testI1A1BET0_T_S3_\", \"B test<A, B>(A, A)\"},\n    {\"_ZN1SgtEi\", \"S::operator>(int)\"},\n    {\"_ZrsI1QEiT_i\", \"int operator>><Q>(Q, int)\"},\n    {\"_ZN13dyldbootstrap5startEPK12macho_headeriPPKcl\", \"dyldbootstrap::start(macho_header const*, int, char const**, long)\"},\n    {\"_ZN4dyld17getExecutablePathEv\", \"dyld::getExecutablePath()\"},\n    {\"_ZN4dyld22mainExecutablePreboundEv\", \"dyld::mainExecutablePrebound()\"},\n    {\"_ZN4dyld14mainExecutableEv\", \"dyld::mainExecutable()\"},\n    {\"_ZN4dyld21findImageByMachHeaderEPK11mach_header\", \"dyld::findImageByMachHeader(mach_header const*)\"},\n    {\"_ZN4dyld26findImageContainingAddressEPKv\", \"dyld::findImageContainingAddress(void const*)\"},\n    {\"_ZN4dyld17clearErrorMessageEv\", \"dyld::clearErrorMessage()\"},\n    {\"_ZN4dyld15getErrorMessageEv\", \"dyld::getErrorMessage()\"},\n    {\"_ZN4dyld24registerUndefinedHandlerEPFvPKcE\", \"dyld::registerUndefinedHandler(void (*)(char const*))\"},\n    {\"_ZN4dyld19openSharedCacheFileEv\", \"dyld::openSharedCacheFile()\"},\n    {\"_ZN4dyld15setErrorMessageEPKc\", \"dyld::setErrorMessage(char const*)\"},\n    {\"_ZN4dyld22registerRemoveCallbackEPFvPK11mach_headerlE\", \"dyld::registerRemoveCallback(void (*)(mach_header const*, long))\"},\n    {\"_ZN4dyld13inSharedCacheEPKc\", \"dyld::inSharedCache(char const*)\"},\n    {\"_ZN4dyld15runInitializersEP11ImageLoader\", \"dyld::runInitializers(ImageLoader*)\"},\n    {\"_ZN4dyld27findCoalescedExportedSymbolEPKcPPKN11ImageLoader6SymbolEPPKS2_\", \"dyld::findCoalescedExportedSymbol(char const*, ImageLoader::Symbol const**, ImageLoader const**)\"},\n    {\"_ZN4dyld22flatFindExportedSymbolEPKcPPKN11ImageLoader6SymbolEPPKS2_\", \"dyld::flatFindExportedSymbol(char const*, ImageLoader::Symbol const**, ImageLoader const**)\"},\n    {\"_ZN4dyld15findLoadedImageERK4stat\", \"dyld::findLoadedImage(stat const&)\"},\n    {\"_ZN4dyld24initializeMainExecutableEv\", \"dyld::initializeMainExecutable()\"},\n    {\"_ZN4dyld4warnEPKcz\", \"dyld::warn(char const*, ...)\"},\n    {\"_ZN4dyld29processDyldEnvironmentVaribleEPKcS1_\", \"dyld::processDyldEnvironmentVarible(char const*, char const*)\"},\n    {\"_ZN4dyld3logEPKcz\", \"dyld::log(char const*, ...)\"},\n    {\"_ZN4dyld6throwfEPKcz\", \"dyld::throwf(char const*, ...)\"},\n    {\"_ZN4dyld9mkstringfEPKcz\", \"dyld::mkstringf(char const*, ...)\"},\n    {\"_ZN4dyld14addMappedRangeEP11ImageLoadermm\", \"dyld::addMappedRange(ImageLoader*, unsigned long, unsigned long)\"},\n    {\"_Z28coresymbolication_load_imageP25CSCppDyldSharedMemoryPagePK11ImageLoadery\", \"coresymbolication_load_image(CSCppDyldSharedMemoryPage*, ImageLoader const*, unsigned long long)\"},\n    {\"_Z30coresymbolication_unload_imageP25CSCppDyldSharedMemoryPagePK11ImageLoader\", \"coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*)\"},\n    {\"_ZN4dyld18getCoalescedImagesEPP11ImageLoader\", \"dyld::getCoalescedImages(ImageLoader**)\"},\n    {\"_ZN4dyld25findImageContainingSymbolEPKv\", \"dyld::findImageContainingSymbol(void const*)\"},\n    {\"_ZN4dyld19registerAddCallbackEPFvPK11mach_headerlE\", \"dyld::registerAddCallback(void (*)(mach_header const*, long))\"},\n    {\"_ZN4dyld14forEachImageDoEPFvP11ImageLoaderPvES2_\", \"dyld::forEachImageDo(void (*)(ImageLoader*, void*), void*)\"},\n    {\"_ZN4dyld15getIndexedImageEj\", \"dyld::getIndexedImage(unsigned int)\"},\n    {\"_ZN4dyld13getImageCountEv\", \"dyld::getImageCount()\"},\n    {\"_ZN4dyld10validImageEPK11ImageLoader\", \"dyld::validImage(ImageLoader const*)\"},\n    {\"_ZN4dyld30flatFindExportedSymbolWithHintEPKcS1_PPKN11ImageLoader6SymbolEPPKS2_\", \"dyld::flatFindExportedSymbolWithHint(char const*, char const*, ImageLoader::Symbol const**, ImageLoader const**)\"},\n    {\"_ZN4dyld14loadFromMemoryEPKhyPKc\", \"dyld::loadFromMemory(unsigned char const*, unsigned long long, char const*)\"},\n    {\"_ZN4dyld36registerImageStateBatchChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE\", \"dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*))\"},\n    {\"_ZN4dyld37registerImageStateSingleChangeHandlerE17dyld_image_statesPFPKcS0_jPK15dyld_image_infoE\", \"dyld::registerImageStateSingleChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*))\"},\n    {\"_ZN4dyld4haltEPKc\", \"dyld::halt(char const*)\"},\n    {\"_ZN4dyld18fastBindLazySymbolEPP11ImageLoaderm\", \"dyld::fastBindLazySymbol(ImageLoader**, unsigned long)\"},\n    {\"_ZN4dyld14bindLazySymbolEPK11mach_headerPm\", \"dyld::bindLazySymbol(mach_header const*, unsigned long*)\"},\n    {\"_ZN4dyld14runTerminatorsEPv\", \"dyld::runTerminators(void*)\"},\n    {\"_ZN4dyld11removeImageEP11ImageLoader\", \"dyld::removeImage(ImageLoader*)\"},\n    {\"_ZN4dyld20garbageCollectImagesEv\", \"dyld::garbageCollectImages()\"},\n    {\"_ZN4dyld9preflightEP11ImageLoaderRKNS0_10RPathChainE\", \"dyld::preflight(ImageLoader*, ImageLoader::RPathChain const&)\"},\n    {\"_ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE\", \"dyld::link(ImageLoader*, bool, ImageLoader::RPathChain const&)\"},\n    {\"_ZN4dyld10cloneImageEP11ImageLoader\", \"dyld::cloneImage(ImageLoader*)\"},\n    {\"_ZN4dyld4loadEPKcRKNS_11LoadContextE\", \"dyld::load(char const*, dyld::LoadContext const&)\"},\n    {\"_ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_\", \"dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**)\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE\", \"std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::erase(__gnu_cxx::__normal_iterator<dyld::RegisteredDOF*, std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> > >)\"},\n    {\"_ZNSt12_Vector_baseIPKcSaIS1_EED2Ev\", \"std::_Vector_base<char const*, std::allocator<char const*> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIPKcSaIS1_EED2Ev\", \"std::vector<char const*, std::allocator<char const*> >::~vector()\"},\n    {\"_ZNSt12_Vector_baseIPFPKc17dyld_image_statesjPK15dyld_image_infoESaIS7_EED2Ev\", \"std::_Vector_base<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIPFPKc17dyld_image_statesjPK15dyld_image_infoESaIS7_EED2Ev\", \"std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::~vector()\"},\n    {\"_ZNSt12_Vector_baseIPFvPK11mach_headerlESaIS4_EED2Ev\", \"std::_Vector_base<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIPFvPK11mach_headerlESaIS4_EED2Ev\", \"std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::~vector()\"},\n    {\"_ZNSt12_Vector_baseIN4dyld13RegisteredDOFESaIS1_EED2Ev\", \"std::_Vector_base<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EED2Ev\", \"std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::~vector()\"},\n    {\"_ZNSt12_Vector_baseIP11ImageLoaderSaIS1_EED2Ev\", \"std::_Vector_base<ImageLoader*, std::allocator<ImageLoader*> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EED2Ev\", \"std::vector<ImageLoader*, std::allocator<ImageLoader*> >::~vector()\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIPFPKc17dyld_image_statesjPK15dyld_image_infoEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)>::allocate(unsigned long, void const*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIPFvPK11mach_headerlEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<void (*)(mach_header const*, long)>::allocate(unsigned long, void const*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIPKcE8allocateEmPKv\", \"__gnu_cxx::new_allocator<char const*>::allocate(unsigned long, void const*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIP11ImageLoaderE8allocateEmPKv\", \"__gnu_cxx::new_allocator<ImageLoader*>::allocate(unsigned long, void const*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIN4dyld13RegisteredDOFEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<dyld::RegisteredDOF>::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::_M_insert_aux(__gnu_cxx::__normal_iterator<dyld::RegisteredDOF*, std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> > >, dyld::RegisteredDOF const&)\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EE9push_backERKS1_\", \"std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::push_back(dyld::RegisteredDOF const&)\"},\n    {\"_ZSt18uninitialized_copyIPPFPKc17dyld_image_statesjPK15dyld_image_infoES8_ET0_T_SA_S9_\", \"char const* (**std::uninitialized_copy<char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*)>(char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*)))(dyld_image_states, unsigned int, dyld_image_info const*)\"},\n    {\"_ZSt18uninitialized_copyIPPFvPK11mach_headerlES5_ET0_T_S7_S6_\", \"void (**std::uninitialized_copy<void (**)(mach_header const*, long), void (**)(mach_header const*, long)>(void (**)(mach_header const*, long), void (**)(mach_header const*, long), void (**)(mach_header const*, long)))(mach_header const*, long)\"},\n    {\"_ZSt18uninitialized_copyIPPKcS2_ET0_T_S4_S3_\", \"char const** std::uninitialized_copy<char const**, char const**>(char const**, char const**, char const**)\"},\n    {\"_ZNSt15__copy_backwardILb1ESt26random_access_iterator_tagE8__copy_bIPFPKc17dyld_image_statesjPK15dyld_image_infoEEEPT_PKSB_SE_SC_\", \"char const* (**std::__copy_backward<true, std::random_access_iterator_tag>::__copy_b<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)>(char const* (* const*)(dyld_image_states, unsigned int, dyld_image_info const*), char const* (* const*)(dyld_image_states, unsigned int, dyld_image_info const*), char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*)))(dyld_image_states, unsigned int, dyld_image_info const*)\"},\n    {\"_ZNSt6vectorIPFPKc17dyld_image_statesjPK15dyld_image_infoESaIS7_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> > >, char const* (* const&)(dyld_image_states, unsigned int, dyld_image_info const*))\"},\n    {\"_ZNSt6vectorIPFPKc17dyld_image_statesjPK15dyld_image_infoESaIS7_EE6insertEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::insert(__gnu_cxx::__normal_iterator<char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> > >, char const* (* const&)(dyld_image_states, unsigned int, dyld_image_info const*))\"},\n    {\"_ZNSt6vectorIPFPKc17dyld_image_statesjPK15dyld_image_infoESaIS7_EE9push_backERKS7_\", \"std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::push_back(char const* (* const&)(dyld_image_states, unsigned int, dyld_image_info const*))\"},\n    {\"_ZNSt15__copy_backwardILb1ESt26random_access_iterator_tagE8__copy_bIPFvPK11mach_headerlEEEPT_PKS8_SB_S9_\", \"void (**std::__copy_backward<true, std::random_access_iterator_tag>::__copy_b<void (*)(mach_header const*, long)>(void (* const*)(mach_header const*, long), void (* const*)(mach_header const*, long), void (**)(mach_header const*, long)))(mach_header const*, long)\"},\n    {\"_ZNSt6vectorIPFvPK11mach_headerlESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::_M_insert_aux(__gnu_cxx::__normal_iterator<void (**)(mach_header const*, long), std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> > >, void (* const&)(mach_header const*, long))\"},\n    {\"_ZNSt6vectorIPFvPK11mach_headerlESaIS4_EE9push_backERKS4_\", \"std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::push_back(void (* const&)(mach_header const*, long))\"},\n    {\"_ZNSt15__copy_backwardILb1ESt26random_access_iterator_tagE8__copy_bIPKcEEPT_PKS5_S8_S6_\", \"char const** std::__copy_backward<true, std::random_access_iterator_tag>::__copy_b<char const*>(char const* const*, char const* const*, char const**)\"},\n    {\"_ZNSt6vectorIPKcSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<char const*, std::allocator<char const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > >, char const* const&)\"},\n    {\"_ZNSt6vectorIPKcSaIS1_EE9push_backERKS1_\", \"std::vector<char const*, std::allocator<char const*> >::push_back(char const* const&)\"},\n    {\"_ZNSt15__copy_backwardILb1ESt26random_access_iterator_tagE8__copy_bIP11ImageLoaderEEPT_PKS5_S8_S6_\", \"ImageLoader** std::__copy_backward<true, std::random_access_iterator_tag>::__copy_b<ImageLoader*>(ImageLoader* const*, ImageLoader* const*, ImageLoader**)\"},\n    {\"_ZNSt6vectorIPFvPK11mach_headerlESaIS4_EE20_M_allocate_and_copyIPS4_EES8_mT_S9_\", \"void (**std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::_M_allocate_and_copy<void (**)(mach_header const*, long)>(unsigned long, void (**)(mach_header const*, long), void (**)(mach_header const*, long)))(mach_header const*, long)\"},\n    {\"_ZNSt6vectorIPFvPK11mach_headerlESaIS4_EE7reserveEm\", \"std::vector<void (*)(mach_header const*, long), std::allocator<void (*)(mach_header const*, long)> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EE20_M_allocate_and_copyIPS1_EES5_mT_S6_\", \"dyld::RegisteredDOF* std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::_M_allocate_and_copy<dyld::RegisteredDOF*>(unsigned long, dyld::RegisteredDOF*, dyld::RegisteredDOF*)\"},\n    {\"_ZNSt6vectorIN4dyld13RegisteredDOFESaIS1_EE7reserveEm\", \"std::vector<dyld::RegisteredDOF, std::allocator<dyld::RegisteredDOF> >::reserve(unsigned long)\"},\n    {\"_ZSt18uninitialized_copyIPP11ImageLoaderS2_ET0_T_S4_S3_\", \"ImageLoader** std::uninitialized_copy<ImageLoader**, ImageLoader**>(ImageLoader**, ImageLoader**, ImageLoader**)\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EE20_M_allocate_and_copyIPS1_EES5_mT_S6_\", \"ImageLoader** std::vector<ImageLoader*, std::allocator<ImageLoader*> >::_M_allocate_and_copy<ImageLoader**>(unsigned long, ImageLoader**, ImageLoader**)\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EE7reserveEm\", \"std::vector<ImageLoader*, std::allocator<ImageLoader*> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<ImageLoader*, std::allocator<ImageLoader*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<ImageLoader**, std::vector<ImageLoader*, std::allocator<ImageLoader*> > >, ImageLoader* const&)\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EE9push_backERKS1_\", \"std::vector<ImageLoader*, std::allocator<ImageLoader*> >::push_back(ImageLoader* const&)\"},\n    {\"_ZNSt6vectorIP11ImageLoaderSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE\", \"std::vector<ImageLoader*, std::allocator<ImageLoader*> >::erase(__gnu_cxx::__normal_iterator<ImageLoader**, std::vector<ImageLoader*, std::allocator<ImageLoader*> > >)\"},\n    {\"_Z18lookupDyldFunctionPKcPm\", \"lookupDyldFunction(char const*, unsigned long*)\"},\n    {\"_ZNSt12_Vector_baseIP19__NSObjectFileImageSaIS1_EED2Ev\", \"std::_Vector_base<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIP19__NSObjectFileImageSaIS1_EED2Ev\", \"std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> >::~vector()\"},\n    {\"_ZNSt15__copy_backwardILb1ESt26random_access_iterator_tagE8__copy_bIP19__NSObjectFileImageEEPT_PKS5_S8_S6_\", \"__NSObjectFileImage** std::__copy_backward<true, std::random_access_iterator_tag>::__copy_b<__NSObjectFileImage*>(__NSObjectFileImage* const*, __NSObjectFileImage* const*, __NSObjectFileImage**)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIP19__NSObjectFileImageE8allocateEmPKv\", \"__gnu_cxx::new_allocator<__NSObjectFileImage*>::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt6vectorIP19__NSObjectFileImageSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<__NSObjectFileImage**, std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> > >, __NSObjectFileImage* const&)\"},\n    {\"_ZNSt6vectorIP19__NSObjectFileImageSaIS1_EE9push_backERKS1_\", \"std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> >::push_back(__NSObjectFileImage* const&)\"},\n    {\"_ZNSt6vectorIP19__NSObjectFileImageSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE\", \"std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> >::erase(__gnu_cxx::__normal_iterator<__NSObjectFileImage**, std::vector<__NSObjectFileImage*, std::allocator<__NSObjectFileImage*> > >)\"},\n    {\"_Z19setAlImageInfosHaltPKcm\", \"setAlImageInfosHalt(char const*, unsigned long)\"},\n    {\"_Z24removeImageFromAllImagesPK11mach_header\", \"removeImageFromAllImages(mach_header const*)\"},\n    {\"_Z20addImagesToAllImagesjPK15dyld_image_info\", \"addImagesToAllImages(unsigned int, dyld_image_info const*)\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE\", \"std::vector<dyld_image_info, std::allocator<dyld_image_info> >::erase(__gnu_cxx::__normal_iterator<dyld_image_info*, std::vector<dyld_image_info, std::allocator<dyld_image_info> > >)\"},\n    {\"_ZNSt12_Vector_baseI15dyld_image_infoSaIS0_EED2Ev\", \"std::_Vector_base<dyld_image_info, std::allocator<dyld_image_info> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EED2Ev\", \"std::vector<dyld_image_info, std::allocator<dyld_image_info> >::~vector()\"},\n    {\"_ZN9__gnu_cxx13new_allocatorI15dyld_image_infoE8allocateEmPKv\", \"__gnu_cxx::new_allocator<dyld_image_info>::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EE20_M_allocate_and_copyIPS0_EES4_mT_S5_\", \"dyld_image_info* std::vector<dyld_image_info, std::allocator<dyld_image_info> >::_M_allocate_and_copy<dyld_image_info*>(unsigned long, dyld_image_info*, dyld_image_info*)\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EE7reserveEm\", \"std::vector<dyld_image_info, std::allocator<dyld_image_info> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_\", \"std::vector<dyld_image_info, std::allocator<dyld_image_info> >::_M_insert_aux(__gnu_cxx::__normal_iterator<dyld_image_info*, std::vector<dyld_image_info, std::allocator<dyld_image_info> > >, dyld_image_info const&)\"},\n    {\"_ZNSt6vectorI15dyld_image_infoSaIS0_EE9push_backERKS0_\", \"std::vector<dyld_image_info, std::allocator<dyld_image_info> >::push_back(dyld_image_info const&)\"},\n    {\"_ZN10__cxxabiv112__unexpectedEPFvvE\", \"__cxxabiv1::__unexpected(void (*)())\"},\n    {\"_ZN10__cxxabiv111__terminateEPFvvE\", \"__cxxabiv1::__terminate(void (*)())\"},\n    {\"_ZSt10unexpectedv\", \"std::unexpected()\"},\n    {\"_ZSt9terminatev\", \"std::terminate()\"},\n    {\"_ZN11ImageLoaderC2EPKcj\", \"ImageLoader::ImageLoader(char const*, unsigned int)\"},\n    {\"_ZN11ImageLoader11deleteImageEPS_\", \"ImageLoader::deleteImage(ImageLoader*)\"},\n    {\"_ZN11ImageLoader11setFileInfoEiyl\", \"ImageLoader::setFileInfo(int, unsigned long long, long)\"},\n    {\"_ZN11ImageLoader9setMappedERKNS_11LinkContextE\", \"ImageLoader::setMapped(ImageLoader::LinkContext const&)\"},\n    {\"_ZNK11ImageLoader7compareEPKS_\", \"ImageLoader::compare(ImageLoader const*) const\"},\n    {\"_ZN11ImageLoader4hashEPKc\", \"ImageLoader::hash(char const*)\"},\n    {\"_ZNK11ImageLoader16matchInstallPathEv\", \"ImageLoader::matchInstallPath() const\"},\n    {\"_ZN11ImageLoader19setMatchInstallPathEb\", \"ImageLoader::setMatchInstallPath(bool)\"},\n    {\"_ZNK11ImageLoader9statMatchERK4stat\", \"ImageLoader::statMatch(stat const&) const\"},\n    {\"_ZN11ImageLoader14setLeaveMappedEv\", \"ImageLoader::setLeaveMapped()\"},\n    {\"_ZN11ImageLoader14setHideExportsEb\", \"ImageLoader::setHideExports(bool)\"},\n    {\"_ZNK11ImageLoader16hasHiddenExportsEv\", \"ImageLoader::hasHiddenExports() const\"},\n    {\"_ZNK11ImageLoader8isLinkedEv\", \"ImageLoader::isLinked() const\"},\n    {\"_ZNK11ImageLoader12lastModifiedEv\", \"ImageLoader::lastModified() const\"},\n    {\"_ZNK11ImageLoader24overlapsWithAddressRangeEPKvS1_\", \"ImageLoader::overlapsWithAddressRange(void const*, void const*) const\"},\n    {\"_ZNK11ImageLoader16getMappedRegionsERPNS_12MappedRegionE\", \"ImageLoader::getMappedRegions(ImageLoader::MappedRegion*&) const\"},\n    {\"_ZNK11ImageLoader41findExportedSymbolInDependentImagesExceptEPKcPPKS_RS4_S4_S4_\", \"ImageLoader::findExportedSymbolInDependentImagesExcept(char const*, ImageLoader const**, ImageLoader const**&, ImageLoader const**, ImageLoader const**) const\"},\n    {\"_ZN11ImageLoader29decrementDlopenReferenceCountEv\", \"ImageLoader::decrementDlopenReferenceCount()\"},\n    {\"_ZN11ImageLoader19bindAllLazyPointersERKNS_11LinkContextEb\", \"ImageLoader::bindAllLazyPointers(ImageLoader::LinkContext const&, bool)\"},\n    {\"_ZNK11ImageLoader35allDependentLibrariesAsWhenPreBoundEv\", \"ImageLoader::allDependentLibrariesAsWhenPreBound() const\"},\n    {\"_ZN11ImageLoader20recursiveUpdateDepthEj\", \"ImageLoader::recursiveUpdateDepth(unsigned int)\"},\n    {\"_ZN11ImageLoader23recursiveGetDOFSectionsERKNS_11LinkContextERSt6vectorINS_7DOFInfoESaIS4_EE\", \"ImageLoader::recursiveGetDOFSections(ImageLoader::LinkContext const&, std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >&)\"},\n    {\"_ZNK11ImageLoader12getShortNameEv\", \"ImageLoader::getShortName() const\"},\n    {\"_ZN11ImageLoader9addSuffixEPKcS1_Pc\", \"ImageLoader::addSuffix(char const*, char const*, char*)\"},\n    {\"_ZN11ImageLoader15printStatisticsEj\", \"ImageLoader::printStatistics(unsigned int)\"},\n    {\"_ZN11ImageLoader13recursiveBindERKNS_11LinkContextEb\", \"ImageLoader::recursiveBind(ImageLoader::LinkContext const&, bool)\"},\n    {\"_ZN11ImageLoader25recursiveApplyInterposingERKNS_11LinkContextE\", \"ImageLoader::recursiveApplyInterposing(ImageLoader::LinkContext const&)\"},\n    {\"_ZN11ImageLoader16applyInterposingERKNS_11LinkContextE\", \"ImageLoader::applyInterposing(ImageLoader::LinkContext const&)\"},\n    {\"_ZN11ImageLoader15recursiveRebaseERKNS_11LinkContextE\", \"ImageLoader::recursiveRebase(ImageLoader::LinkContext const&)\"},\n    {\"_ZNK11ImageLoader42findExportedSymbolInImageOrDependentImagesEPKcRKNS_11LinkContextEPPKS_\", \"ImageLoader::findExportedSymbolInImageOrDependentImages(char const*, ImageLoader::LinkContext const&, ImageLoader const**) const\"},\n    {\"_ZNK11ImageLoader35findExportedSymbolInDependentImagesEPKcRKNS_11LinkContextEPPKS_\", \"ImageLoader::findExportedSymbolInDependentImages(char const*, ImageLoader::LinkContext const&, ImageLoader const**) const\"},\n    {\"_ZN11ImageLoader8reExportEPS_\", \"ImageLoader::reExport(ImageLoader*)\"},\n    {\"_ZN11ImageLoader19addDynamicReferenceEPKS_\", \"ImageLoader::addDynamicReference(ImageLoader const*)\"},\n    {\"_ZN11ImageLoader14setPathUnownedEPKc\", \"ImageLoader::setPathUnowned(char const*)\"},\n    {\"_ZN11ImageLoader7setPathEPKc\", \"ImageLoader::setPath(char const*)\"},\n    {\"_ZN11ImageLoaderD0Ev\", \"ImageLoader::~ImageLoader()\"},\n    {\"_ZNK11ImageLoader15containsAddressEPKv\", \"ImageLoader::containsAddress(void const*) const\"},\n    {\"_ZN11ImageLoaderD2Ev\", \"ImageLoader::~ImageLoader()\"},\n    {\"_ZN11ImageLoaderD1Ev\", \"ImageLoader::~ImageLoader()\"},\n    {\"_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj\", \"ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int)\"},\n    {\"_ZN11ImageLoader15runInitializersERKNS_11LinkContextE\", \"ImageLoader::runInitializers(ImageLoader::LinkContext const&)\"},\n    {\"_ZN11ImageLoader8weakBindERKNS_11LinkContextE\", \"ImageLoader::weakBind(ImageLoader::LinkContext const&)\"},\n    {\"_ZN11ImageLoader22recursiveLoadLibrariesERKNS_11LinkContextEbRKNS_10RPathChainE\", \"ImageLoader::recursiveLoadLibraries(ImageLoader::LinkContext const&, bool, ImageLoader::RPathChain const&)\"},\n    {\"_ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE\", \"ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, ImageLoader::RPathChain const&)\"},\n    {\"_ZNSt12_Vector_baseIN11ImageLoader7DOFInfoESaIS1_EED2Ev\", \"std::_Vector_base<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIN11ImageLoader7DOFInfoESaIS1_EED2Ev\", \"std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >::~vector()\"},\n    {\"_ZNSt8_Rb_treeIPK11ImageLoaderS2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<ImageLoader const*, ImageLoader const*, std::_Identity<ImageLoader const*>, std::less<ImageLoader const*>, std::allocator<ImageLoader const*> >::_M_erase(std::_Rb_tree_node<ImageLoader const*>*)\"},\n    {\"_ZNSt12_Vector_baseIN11ImageLoader14InterposeTupleESaIS1_EED2Ev\", \"std::_Vector_base<ImageLoader::InterposeTuple, std::allocator<ImageLoader::InterposeTuple> >::~_Vector_base()\"},\n    {\"_ZNSt6vectorIN11ImageLoader14InterposeTupleESaIS1_EED2Ev\", \"std::vector<ImageLoader::InterposeTuple, std::allocator<ImageLoader::InterposeTuple> >::~vector()\"},\n    {\"_ZNSt12_Vector_baseISt4pairIP11ImageLoaderS2_ESaIS3_EED2Ev\", \"std::_Vector_base<std::pair<ImageLoader*, ImageLoader*>, std::allocator<std::pair<ImageLoader*, ImageLoader*> > >::~_Vector_base()\"},\n    {\"_ZNSt6vectorISt4pairIP11ImageLoaderS2_ESaIS3_EED2Ev\", \"std::vector<std::pair<ImageLoader*, ImageLoader*>, std::allocator<std::pair<ImageLoader*, ImageLoader*> > >::~vector()\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPK11ImageLoaderEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<std::_Rb_tree_node<ImageLoader const*> >::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt8_Rb_treeIPK11ImageLoaderS2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE14_M_create_nodeERKS2_\", \"std::_Rb_tree<ImageLoader const*, ImageLoader const*, std::_Identity<ImageLoader const*>, std::less<ImageLoader const*>, std::allocator<ImageLoader const*> >::_M_create_node(ImageLoader const* const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIP11ImageLoaderS3_EE8allocateEmPKv\", \"__gnu_cxx::new_allocator<std::pair<ImageLoader*, ImageLoader*> >::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt6vectorISt4pairIP11ImageLoaderS2_ESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<ImageLoader*, ImageLoader*>, std::allocator<std::pair<ImageLoader*, ImageLoader*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<ImageLoader*, ImageLoader*>*, std::vector<std::pair<ImageLoader*, ImageLoader*>, std::allocator<std::pair<ImageLoader*, ImageLoader*> > > >, std::pair<ImageLoader*, ImageLoader*> const&)\"},\n    {\"_ZNSt6vectorISt4pairIP11ImageLoaderS2_ESaIS3_EE9push_backERKS3_\", \"std::vector<std::pair<ImageLoader*, ImageLoader*>, std::allocator<std::pair<ImageLoader*, ImageLoader*> > >::push_back(std::pair<ImageLoader*, ImageLoader*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPK11ImageLoaderS2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_\", \"std::_Rb_tree<ImageLoader const*, ImageLoader const*, std::_Identity<ImageLoader const*>, std::less<ImageLoader const*>, std::allocator<ImageLoader const*> >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, ImageLoader const* const&)\"},\n    {\"_ZNSt8_Rb_treeIPK11ImageLoaderS2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<ImageLoader const*, ImageLoader const*, std::_Identity<ImageLoader const*>, std::less<ImageLoader const*>, std::allocator<ImageLoader const*> >::_M_insert_unique(ImageLoader const* const&)\"},\n    {\"_ZNK16ImageLoaderMachO12segmentCountEv\", \"ImageLoaderMachO::segmentCount() const\"},\n    {\"_ZN16ImageLoaderMachO22segHasTrailingZeroFillEj\", \"ImageLoaderMachO::segHasTrailingZeroFill(unsigned int)\"},\n    {\"_ZNK16ImageLoaderMachO19segActualEndAddressEj\", \"ImageLoaderMachO::segActualEndAddress(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO25segmentsMustSlideTogetherEv\", \"ImageLoaderMachO::segmentsMustSlideTogether() const\"},\n    {\"_ZNK16ImageLoaderMachO16segmentsCanSlideEv\", \"ImageLoaderMachO::segmentsCanSlide() const\"},\n    {\"_ZNK16ImageLoaderMachO8isBundleEv\", \"ImageLoaderMachO::isBundle() const\"},\n    {\"_ZNK16ImageLoaderMachO7isDylibEv\", \"ImageLoaderMachO::isDylib() const\"},\n    {\"_ZNK16ImageLoaderMachO12isExecutableEv\", \"ImageLoaderMachO::isExecutable() const\"},\n    {\"_ZNK16ImageLoaderMachO31isPositionIndependentExecutableEv\", \"ImageLoaderMachO::isPositionIndependentExecutable() const\"},\n    {\"_ZNK16ImageLoaderMachO9forceFlatEv\", \"ImageLoaderMachO::forceFlat() const\"},\n    {\"_ZNK16ImageLoaderMachO21usesTwoLevelNameSpaceEv\", \"ImageLoaderMachO::usesTwoLevelNameSpace() const\"},\n    {\"_ZNK16ImageLoaderMachO13isPrebindableEv\", \"ImageLoaderMachO::isPrebindable() const\"},\n    {\"_ZNK16ImageLoaderMachO19hasCoalescedExportsEv\", \"ImageLoaderMachO::hasCoalescedExports() const\"},\n    {\"_ZN16ImageLoaderMachO8setSlideEl\", \"ImageLoaderMachO::setSlide(long)\"},\n    {\"_ZNK16ImageLoaderMachO14getInstallPathEv\", \"ImageLoaderMachO::getInstallPath() const\"},\n    {\"_ZNK16ImageLoaderMachO7getMainEv\", \"ImageLoaderMachO::getMain() const\"},\n    {\"_ZN16ImageLoaderMachO16doGetLibraryInfoEv\", \"ImageLoaderMachO::doGetLibraryInfo()\"},\n    {\"_ZNK16ImageLoaderMachO21getExportedSymbolInfoEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachO::getExportedSymbolInfo(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK16ImageLoaderMachO21getExportedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachO::getExportedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK16ImageLoaderMachO22getExportedSymbolCountEv\", \"ImageLoaderMachO::getExportedSymbolCount() const\"},\n    {\"_ZNK16ImageLoaderMachO24getIndexedExportedSymbolEj\", \"ImageLoaderMachO::getIndexedExportedSymbol(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO22getImportedSymbolCountEv\", \"ImageLoaderMachO::getImportedSymbolCount() const\"},\n    {\"_ZNK16ImageLoaderMachO24getIndexedImportedSymbolEj\", \"ImageLoaderMachO::getIndexedImportedSymbol(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO21getImportedSymbolInfoEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachO::getImportedSymbolInfo(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK16ImageLoaderMachO21getImportedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachO::getImportedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZN16ImageLoaderMachO13getUnwindInfoEP20dyld_unwind_sections\", \"ImageLoaderMachO::getUnwindInfo(dyld_unwind_sections*)\"},\n    {\"_ZN16ImageLoaderMachO11findSectionEPKvPPKcS4_Pm\", \"ImageLoaderMachO::findSection(void const*, char const**, char const**, unsigned long*)\"},\n    {\"_ZNK16ImageLoaderMachO10machHeaderEv\", \"ImageLoaderMachO::machHeader() const\"},\n    {\"_ZNK16ImageLoaderMachO8getSlideEv\", \"ImageLoaderMachO::getSlide() const\"},\n    {\"_ZNK16ImageLoaderMachO17lookupProgramVarsERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::lookupProgramVars(ImageLoader::LinkContext const&) const\"},\n    {\"_ZN16ImageLoaderMachO19needsInitializationEv\", \"ImageLoaderMachO::needsInitialization()\"},\n    {\"_ZN16ImageLoaderMachO16needsTerminationEv\", \"ImageLoaderMachO::needsTermination()\"},\n    {\"_ZN16ImageLoaderMachO10segProtectEjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::segProtect(unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO11doImageInitERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::doImageInit(ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&)\"},\n    {\"_ZNK16ImageLoaderMachO16getSymbolAddressEPKN11ImageLoader6SymbolEPKS0_RKNS0_11LinkContextE\", \"ImageLoaderMachO::getSymbolAddress(ImageLoader::Symbol const*, ImageLoader const*, ImageLoader::LinkContext const&) const\"},\n    {\"_ZNK16ImageLoaderMachO24getExportedSymbolAddressEPKN11ImageLoader6SymbolERKNS0_11LinkContextEPKS0_\", \"ImageLoaderMachO::getExportedSymbolAddress(ImageLoader::Symbol const*, ImageLoader::LinkContext const&, ImageLoader const*) const\"},\n    {\"_ZN16ImageLoaderMachO19throwSymbolNotFoundEPKcS1_S1_\", \"ImageLoaderMachO::throwSymbolNotFound(char const*, char const*, char const*)\"},\n    {\"_ZN16ImageLoaderMachO21reserveAnAddressRangeEmRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::reserveAnAddressRange(unsigned long, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO23setupLazyPointerHandlerERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::setupLazyPointerHandler(ImageLoader::LinkContext const&)\"},\n    {\"_ZNK16ImageLoaderMachO6getEndEv\", \"ImageLoaderMachO::getEnd() const\"},\n    {\"_ZN16ImageLoaderMachO17getSectionContentEPKcS1_PPvPm\", \"ImageLoaderMachO::getSectionContent(char const*, char const*, void**, unsigned long*)\"},\n    {\"_ZN16ImageLoaderMachO13parseLoadCmdsEv\", \"ImageLoaderMachO::parseLoadCmds()\"},\n    {\"_ZN16ImageLoaderMachO15printStatisticsEj\", \"ImageLoaderMachO::printStatistics(unsigned int)\"},\n    {\"_ZN16ImageLoaderMachO12bindLocationERKN11ImageLoader11LinkContextEmmPKS0_hPKclS7_\", \"ImageLoaderMachO::bindLocation(ImageLoader::LinkContext const&, unsigned long, unsigned long, ImageLoader const*, unsigned char, char const*, long, char const*)\"},\n    {\"_ZN16ImageLoaderMachO16doGetDOFSectionsERKN11ImageLoader11LinkContextERSt6vectorINS0_7DOFInfoESaIS5_EE\", \"ImageLoaderMachO::doGetDOFSections(ImageLoader::LinkContext const&, std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >&)\"},\n    {\"_ZNK16ImageLoaderMachO16usablePrebindingERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::usablePrebinding(ImageLoader::LinkContext const&) const\"},\n    {\"_ZNK16ImageLoaderMachO7getUUIDEPh\", \"ImageLoaderMachO::getUUID(unsigned char*) const\"},\n    {\"_ZN16ImageLoaderMachO26needsAddedLibSystemDepencyEjPK12macho_header\", \"ImageLoaderMachO::needsAddedLibSystemDepency(unsigned int, macho_header const*)\"},\n    {\"_ZN16ImageLoaderMachO23doGetDependentLibrariesEPN11ImageLoader20DependentLibraryInfoE\", \"ImageLoaderMachO::doGetDependentLibraries(ImageLoader::DependentLibraryInfo*)\"},\n    {\"_ZN16ImageLoaderMachO17sniffLoadCommandsEPK12macho_headerPKcPbPjS6_\", \"ImageLoaderMachO::sniffLoadCommands(macho_header const*, char const*, bool*, unsigned int*, unsigned int*)\"},\n    {\"_ZNK16ImageLoaderMachO24participatesInCoalescingEv\", \"ImageLoaderMachO::participatesInCoalescing() const\"},\n    {\"_ZN16ImageLoaderMachO12preFetchDATAEiyRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::preFetchDATA(int, unsigned long long, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO13UnmapSegmentsEv\", \"ImageLoaderMachO::UnmapSegments()\"},\n    {\"_ZN16ImageLoaderMachO7destroyEv\", \"ImageLoaderMachO::destroy()\"},\n    {\"_ZN16ImageLoaderMachO21instantiateFromMemoryEPKcPK12macho_headeryRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::instantiateFromMemory(char const*, macho_header const*, unsigned long long, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO20instantiateFromCacheEPK12macho_headerPKcRK4statRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::instantiateFromCache(macho_header const*, char const*, stat const&, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO19instantiateFromFileEPKciPKhyyRK4statRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::instantiateFromFile(char const*, int, unsigned char const*, unsigned long long, unsigned long long, stat const&, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO25instantiateMainExecutableEPK12macho_headermPKcRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::instantiateMainExecutable(macho_header const*, unsigned long, char const*, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachOC2EPK12macho_headerPKcjPjj\", \"ImageLoaderMachO::ImageLoaderMachO(macho_header const*, char const*, unsigned int, unsigned int*, unsigned int)\"},\n    {\"_ZN16ImageLoaderMachO13doTerminationERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::doTermination(ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO8doRebaseERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::doRebase(ImageLoader::LinkContext const&)\"},\n    {\"_ZNK16ImageLoaderMachO9getRPathsERKN11ImageLoader11LinkContextERSt6vectorIPKcSaIS6_EE\", \"ImageLoaderMachO::getRPaths(ImageLoader::LinkContext const&, std::vector<char const*, std::allocator<char const*> >&) const\"},\n    {\"_ZN16ImageLoaderMachO19registerInterposingEv\", \"ImageLoaderMachO::registerInterposing()\"},\n    {\"_ZNK16ImageLoaderMachO18findExportedSymbolEPKcbPPK11ImageLoader\", \"ImageLoaderMachO::findExportedSymbol(char const*, bool, ImageLoader const**) const\"},\n    {\"_ZN16ImageLoaderMachO22assignSegmentAddressesERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::assignSegmentAddresses(ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO11mapSegmentsEPKvyRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::mapSegments(void const*, unsigned long long, ImageLoader::LinkContext const&)\"},\n    {\"_ZN16ImageLoaderMachO11mapSegmentsEiyyyRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachO::mapSegments(int, unsigned long long, unsigned long long, unsigned long long, ImageLoader::LinkContext const&)\"},\n    {\"_ZNK16ImageLoaderMachO23segPreferredLoadAddressEj\", \"ImageLoaderMachO::segPreferredLoadAddress(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO26segHasPreferredLoadAddressEj\", \"ImageLoaderMachO::segHasPreferredLoadAddress(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO15segUnaccessibleEj\", \"ImageLoaderMachO::segUnaccessible(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO13segExecutableEj\", \"ImageLoaderMachO::segExecutable(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO20segActualLoadAddressEj\", \"ImageLoaderMachO::segActualLoadAddress(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO7segSizeEj\", \"ImageLoaderMachO::segSize(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO7segNameEj\", \"ImageLoaderMachO::segName(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO12segWriteableEj\", \"ImageLoaderMachO::segWriteable(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO11segReadableEj\", \"ImageLoaderMachO::segReadable(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO13segFileOffsetEj\", \"ImageLoaderMachO::segFileOffset(unsigned int) const\"},\n    {\"_ZNK16ImageLoaderMachO11segFileSizeEj\", \"ImageLoaderMachO::segFileSize(unsigned int) const\"},\n    {\"_ZN16ImageLoaderMachOD2Ev\", \"ImageLoaderMachO::~ImageLoaderMachO()\"},\n    {\"_ZN16ImageLoaderMachOD1Ev\", \"ImageLoaderMachO::~ImageLoaderMachO()\"},\n    {\"_ZN16ImageLoaderMachOD0Ev\", \"ImageLoaderMachO::~ImageLoaderMachO()\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIN11ImageLoader7DOFInfoEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<ImageLoader::DOFInfo>::allocate(unsigned long, void const*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIN11ImageLoader14InterposeTupleEE8allocateEmPKv\", \"__gnu_cxx::new_allocator<ImageLoader::InterposeTuple>::allocate(unsigned long, void const*)\"},\n    {\"_ZNSt6vectorIN11ImageLoader7DOFInfoESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<ImageLoader::DOFInfo*, std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> > >, ImageLoader::DOFInfo const&)\"},\n    {\"_ZNSt6vectorIN11ImageLoader7DOFInfoESaIS1_EE9push_backERKS1_\", \"std::vector<ImageLoader::DOFInfo, std::allocator<ImageLoader::DOFInfo> >::push_back(ImageLoader::DOFInfo const&)\"},\n    {\"_ZNSt6vectorIN11ImageLoader14InterposeTupleESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<ImageLoader::InterposeTuple, std::allocator<ImageLoader::InterposeTuple> >::_M_insert_aux(__gnu_cxx::__normal_iterator<ImageLoader::InterposeTuple*, std::vector<ImageLoader::InterposeTuple, std::allocator<ImageLoader::InterposeTuple> > >, ImageLoader::InterposeTuple const&)\"},\n    {\"_ZNSt6vectorIN11ImageLoader14InterposeTupleESaIS1_EE9push_backERKS1_\", \"std::vector<ImageLoader::InterposeTuple, std::allocator<ImageLoader::InterposeTuple> >::push_back(ImageLoader::InterposeTuple const&)\"},\n    {\"_ZNK23ImageLoaderMachOClassic21segmentCommandOffsetsEv\", \"ImageLoaderMachOClassic::segmentCommandOffsets() const\"},\n    {\"_ZNK23ImageLoaderMachOClassic8libImageEj\", \"ImageLoaderMachOClassic::libImage(unsigned int) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic13libReExportedEj\", \"ImageLoaderMachOClassic::libReExported(unsigned int) const\"},\n    {\"_ZN23ImageLoaderMachOClassic11setLibImageEjP11ImageLoaderb\", \"ImageLoaderMachOClassic::setLibImage(unsigned int, ImageLoader*, bool)\"},\n    {\"_ZN23ImageLoaderMachOClassic18setSymbolTableInfoEPK11macho_nlistPKcPK16dysymtab_command\", \"ImageLoaderMachOClassic::setSymbolTableInfo(macho_nlist const*, char const*, dysymtab_command const*)\"},\n    {\"_ZNK23ImageLoaderMachOClassic14containsSymbolEPKv\", \"ImageLoaderMachOClassic::containsSymbol(void const*) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic21exportedSymbolAddressEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOClassic::exportedSymbolAddress(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic29exportedSymbolIsWeakDefintionEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOClassic::exportedSymbolIsWeakDefintion(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic18exportedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOClassic::exportedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic19exportedSymbolCountEv\", \"ImageLoaderMachOClassic::exportedSymbolCount() const\"},\n    {\"_ZNK23ImageLoaderMachOClassic21exportedSymbolIndexedEj\", \"ImageLoaderMachOClassic::exportedSymbolIndexed(unsigned int) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic19importedSymbolCountEv\", \"ImageLoaderMachOClassic::importedSymbolCount() const\"},\n    {\"_ZNK23ImageLoaderMachOClassic21importedSymbolIndexedEj\", \"ImageLoaderMachOClassic::importedSymbolIndexed(unsigned int) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic18importedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOClassic::importedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZN23ImageLoaderMachOClassic22initializeCoalIteratorERN11ImageLoader12CoalIteratorEj\", \"ImageLoaderMachOClassic::initializeCoalIterator(ImageLoader::CoalIterator&, unsigned int)\"},\n    {\"_ZN23ImageLoaderMachOClassic21incrementCoalIteratorERN11ImageLoader12CoalIteratorE\", \"ImageLoaderMachOClassic::incrementCoalIterator(ImageLoader::CoalIterator&)\"},\n    {\"_ZN23ImageLoaderMachOClassic22getAddressCoalIteratorERN11ImageLoader12CoalIteratorERKNS0_11LinkContextE\", \"ImageLoaderMachOClassic::getAddressCoalIterator(ImageLoader::CoalIterator&, ImageLoader::LinkContext const&)\"},\n    {\"_ZNK23ImageLoaderMachOClassic17findClosestSymbolEPKvPS1_\", \"ImageLoaderMachOClassic::findClosestSymbol(void const*, void const**) const\"},\n    {\"_ZN23ImageLoaderMachOClassic20doBindFastLazySymbolEjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic30getFirstWritableSegmentAddressEv\", \"ImageLoaderMachOClassic::getFirstWritableSegmentAddress()\"},\n    {\"_ZN23ImageLoaderMachOClassic18bindIndirectSymbolEPmPK13macho_sectionPKcmPK11ImageLoaderRKNS6_11LinkContextE\", \"ImageLoaderMachOClassic::bindIndirectSymbol(unsigned long*, macho_section const*, char const*, unsigned long, ImageLoader const*, ImageLoader::LinkContext const&)\"},\n    {\"_ZNK23ImageLoaderMachOClassic12binarySearchEPKcS1_PK11macho_nlistj\", \"ImageLoaderMachOClassic::binarySearch(char const*, char const*, macho_nlist const*, unsigned int) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic19binarySearchWithTocEPKcS1_PK11macho_nlistPK23dylib_table_of_contentsjj\", \"ImageLoaderMachOClassic::binarySearchWithToc(char const*, char const*, macho_nlist const*, dylib_table_of_contents const*, unsigned int, unsigned int) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic18findExportedSymbolEPKcPPK11ImageLoader\", \"ImageLoaderMachOClassic::findExportedSymbol(char const*, ImageLoader const**) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic13hasSubLibraryERKN11ImageLoader11LinkContextEPKS0_\", \"ImageLoaderMachOClassic::hasSubLibrary(ImageLoader::LinkContext const&, ImageLoader const*) const\"},\n    {\"_ZNK23ImageLoaderMachOClassic16isSubframeworkOfERKN11ImageLoader11LinkContextEPKS0_\", \"ImageLoaderMachOClassic::isSubframeworkOf(ImageLoader::LinkContext const&, ImageLoader const*) const\"},\n    {\"_ZN23ImageLoaderMachOClassic18mapSegmentsClassicEiyyyRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::mapSegmentsClassic(int, unsigned long long, unsigned long long, unsigned long long, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic16prefetchLINKEDITERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::prefetchLINKEDIT(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassicD2Ev\", \"ImageLoaderMachOClassic::~ImageLoaderMachOClassic()\"},\n    {\"_ZN23ImageLoaderMachOClassicD1Ev\", \"ImageLoaderMachOClassic::~ImageLoaderMachOClassic()\"},\n    {\"_ZN23ImageLoaderMachOClassicD0Ev\", \"ImageLoaderMachOClassic::~ImageLoaderMachOClassic()\"},\n    {\"_ZN23ImageLoaderMachOClassic17instantiateFinishERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::instantiateFinish(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic6rebaseERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::rebase(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic11doInterposeERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::doInterpose(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic16resolveUndefinedERKN11ImageLoader11LinkContextEPK11macho_nlistbbPPKS0_\", \"ImageLoaderMachOClassic::resolveUndefined(ImageLoader::LinkContext const&, macho_nlist const*, bool, bool, ImageLoader const**)\"},\n    {\"_ZN23ImageLoaderMachOClassic26bindIndirectSymbolPointersERKN11ImageLoader11LinkContextEbb\", \"ImageLoaderMachOClassic::bindIndirectSymbolPointers(ImageLoader::LinkContext const&, bool, bool)\"},\n    {\"_ZN23ImageLoaderMachOClassic16doBindJustLaziesERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::doBindJustLazies(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic16doBindLazySymbolEPmRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::doBindLazySymbol(unsigned long*, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic16instantiateStartEPK12macho_headerPKcjj\", \"ImageLoaderMachOClassic::instantiateStart(macho_header const*, char const*, unsigned int, unsigned int)\"},\n    {\"_ZN23ImageLoaderMachOClassic21instantiateFromMemoryEPKcPK12macho_headeryjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::instantiateFromMemory(char const*, macho_header const*, unsigned long long, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic20instantiateFromCacheEPK12macho_headerPKcRK4statjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::instantiateFromCache(macho_header const*, char const*, stat const&, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic19instantiateFromFileEPKciPKhyyRK4statjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::instantiateFromFile(char const*, int, unsigned char const*, unsigned long long, unsigned long long, stat const&, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic25instantiateMainExecutableEPK12macho_headermPKcjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::instantiateMainExecutable(macho_header const*, unsigned long, char const*, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic22updateUsesCoalIteratorERN11ImageLoader12CoalIteratorEmPS0_RKNS0_11LinkContextE\", \"ImageLoaderMachOClassic::updateUsesCoalIterator(ImageLoader::CoalIterator&, unsigned long, ImageLoader*, ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic25doBindExternalRelocationsERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOClassic::doBindExternalRelocations(ImageLoader::LinkContext const&)\"},\n    {\"_ZN23ImageLoaderMachOClassic6doBindERKN11ImageLoader11LinkContextEb\", \"ImageLoaderMachOClassic::doBind(ImageLoader::LinkContext const&, bool)\"},\n    {\"_ZN23ImageLoaderMachOClassic11setDyldInfoEPK17dyld_info_command\", \"ImageLoaderMachOClassic::setDyldInfo(dyld_info_command const*)\"},\n    {\"_ZNK26ImageLoaderMachOCompressed21segmentCommandOffsetsEv\", \"ImageLoaderMachOCompressed::segmentCommandOffsets() const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed8libImageEj\", \"ImageLoaderMachOCompressed::libImage(unsigned int) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed13libReExportedEj\", \"ImageLoaderMachOCompressed::libReExported(unsigned int) const\"},\n    {\"_ZN26ImageLoaderMachOCompressed11setLibImageEjP11ImageLoaderb\", \"ImageLoaderMachOCompressed::setLibImage(unsigned int, ImageLoader*, bool)\"},\n    {\"_ZNK26ImageLoaderMachOCompressed14containsSymbolEPKv\", \"ImageLoaderMachOCompressed::containsSymbol(void const*) const\"},\n    {\"_ZN26ImageLoaderMachOCompressed22initializeCoalIteratorERN11ImageLoader12CoalIteratorEj\", \"ImageLoaderMachOCompressed::initializeCoalIterator(ImageLoader::CoalIterator&, unsigned int)\"},\n    {\"_ZN26ImageLoaderMachOCompressed22getAddressCoalIteratorERN11ImageLoader12CoalIteratorERKNS0_11LinkContextE\", \"ImageLoaderMachOCompressed::getAddressCoalIterator(ImageLoader::CoalIterator&, ImageLoader::LinkContext const&)\"},\n    {\"_ZNK26ImageLoaderMachOCompressed17findClosestSymbolEPKvPS1_\", \"ImageLoaderMachOCompressed::findClosestSymbol(void const*, void const**) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed18importedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOCompressed::importedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed21importedSymbolIndexedEj\", \"ImageLoaderMachOCompressed::importedSymbolIndexed(unsigned int) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed19importedSymbolCountEv\", \"ImageLoaderMachOCompressed::importedSymbolCount() const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed21exportedSymbolIndexedEj\", \"ImageLoaderMachOCompressed::exportedSymbolIndexed(unsigned int) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed19exportedSymbolCountEv\", \"ImageLoaderMachOCompressed::exportedSymbolCount() const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed18exportedSymbolNameEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOCompressed::exportedSymbolName(ImageLoader::Symbol const*) const\"},\n    {\"_ZN26ImageLoaderMachOCompressed15resolveTwolevelERKN11ImageLoader11LinkContextEPKS0_bPKcPS5_\", \"ImageLoaderMachOCompressed::resolveTwolevel(ImageLoader::LinkContext const&, ImageLoader const*, bool, char const*, ImageLoader const**)\"},\n    {\"_ZN26ImageLoaderMachOCompressed11resolveFlatERKN11ImageLoader11LinkContextEPKcbPPKS0_\", \"ImageLoaderMachOCompressed::resolveFlat(ImageLoader::LinkContext const&, char const*, bool, ImageLoader const**)\"},\n    {\"_ZN26ImageLoaderMachOCompressed7resolveERKN11ImageLoader11LinkContextEPKchiPPKS0_PNS_10LastLookupE\", \"ImageLoaderMachOCompressed::resolve(ImageLoader::LinkContext const&, char const*, unsigned char, int, ImageLoader const**, ImageLoaderMachOCompressed::LastLookup*)\"},\n    {\"_ZN26ImageLoaderMachOCompressed6bindAtERKN11ImageLoader11LinkContextEmhPKchliS5_PNS_10LastLookupE\", \"ImageLoaderMachOCompressed::bindAt(ImageLoader::LinkContext const&, unsigned long, unsigned char, char const*, unsigned char, long, int, char const*, ImageLoaderMachOCompressed::LastLookup*)\"},\n    {\"_ZN26ImageLoaderMachOCompressed11interposeAtERKN11ImageLoader11LinkContextEmhPKchliS5_PNS_10LastLookupE\", \"ImageLoaderMachOCompressed::interposeAt(ImageLoader::LinkContext const&, unsigned long, unsigned char, char const*, unsigned char, long, int, char const*, ImageLoaderMachOCompressed::LastLookup*)\"},\n    {\"_ZN26ImageLoaderMachOCompressed16instantiateStartEPK12macho_headerPKcjj\", \"ImageLoaderMachOCompressed::instantiateStart(macho_header const*, char const*, unsigned int, unsigned int)\"},\n    {\"_ZN26ImageLoaderMachOCompressed16doBindLazySymbolEPmRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::doBindLazySymbol(unsigned long*, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed20instantiateFromCacheEPK12macho_headerPKcRK4statjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::instantiateFromCache(macho_header const*, char const*, stat const&, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed21instantiateFromMemoryEPKcPK12macho_headeryjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::instantiateFromMemory(char const*, macho_header const*, unsigned long long, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed25instantiateMainExecutableEPK12macho_headermPKcjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::instantiateMainExecutable(macho_header const*, unsigned long, char const*, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressedD0Ev\", \"ImageLoaderMachOCompressed::~ImageLoaderMachOCompressed()\"},\n    {\"_ZN26ImageLoaderMachOCompressedD1Ev\", \"ImageLoaderMachOCompressed::~ImageLoaderMachOCompressed()\"},\n    {\"_ZN26ImageLoaderMachOCompressed19instantiateFromFileEPKciPKhyyRK4statjjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::instantiateFromFile(char const*, int, unsigned char const*, unsigned long long, unsigned long long, stat const&, unsigned int, unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZNK26ImageLoaderMachOCompressed29exportedSymbolIsWeakDefintionEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOCompressed::exportedSymbolIsWeakDefintion(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed21exportedSymbolAddressEPKN11ImageLoader6SymbolE\", \"ImageLoaderMachOCompressed::exportedSymbolAddress(ImageLoader::Symbol const*) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed18findExportedSymbolEPKcPPK11ImageLoader\", \"ImageLoaderMachOCompressed::findExportedSymbol(char const*, ImageLoader const**) const\"},\n    {\"_ZN26ImageLoaderMachOCompressed6rebaseERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::rebase(ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed22updateUsesCoalIteratorERN11ImageLoader12CoalIteratorEmPS0_RKNS0_11LinkContextE\", \"ImageLoaderMachOCompressed::updateUsesCoalIterator(ImageLoader::CoalIterator&, unsigned long, ImageLoader*, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed21incrementCoalIteratorERN11ImageLoader12CoalIteratorE\", \"ImageLoaderMachOCompressed::incrementCoalIterator(ImageLoader::CoalIterator&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed20doBindFastLazySymbolEjRKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed12eachLazyBindERKN11ImageLoader11LinkContextEMS_FmS3_mhPKchliS5_PNS_10LastLookupEE\", \"ImageLoaderMachOCompressed::eachLazyBind(ImageLoader::LinkContext const&, unsigned long (ImageLoaderMachOCompressed::*)(ImageLoader::LinkContext const&, unsigned long, unsigned char, char const*, unsigned char, long, int, char const*, ImageLoaderMachOCompressed::LastLookup*))\"},\n    {\"_ZN26ImageLoaderMachOCompressed16doBindJustLaziesERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::doBindJustLazies(ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed8eachBindERKN11ImageLoader11LinkContextEMS_FmS3_mhPKchliS5_PNS_10LastLookupEE\", \"ImageLoaderMachOCompressed::eachBind(ImageLoader::LinkContext const&, unsigned long (ImageLoaderMachOCompressed::*)(ImageLoader::LinkContext const&, unsigned long, unsigned char, char const*, unsigned char, long, int, char const*, ImageLoaderMachOCompressed::LastLookup*))\"},\n    {\"_ZN26ImageLoaderMachOCompressed11doInterposeERKN11ImageLoader11LinkContextE\", \"ImageLoaderMachOCompressed::doInterpose(ImageLoader::LinkContext const&)\"},\n    {\"_ZN26ImageLoaderMachOCompressed6doBindERKN11ImageLoader11LinkContextEb\", \"ImageLoaderMachOCompressed::doBind(ImageLoader::LinkContext const&, bool)\"},\n    {\"_ZN26ImageLoaderMachOCompressed11setDyldInfoEPK17dyld_info_command\", \"ImageLoaderMachOCompressed::setDyldInfo(dyld_info_command const*)\"},\n    {\"_ZN26ImageLoaderMachOCompressed18setSymbolTableInfoEPK11macho_nlistPKcPK16dysymtab_command\", \"ImageLoaderMachOCompressed::setSymbolTableInfo(macho_nlist const*, char const*, dysymtab_command const*)\"},\n    {\"_ZNK26ImageLoaderMachOCompressed16isSubframeworkOfERKN11ImageLoader11LinkContextEPKS0_\", \"ImageLoaderMachOCompressed::isSubframeworkOf(ImageLoader::LinkContext const&, ImageLoader const*) const\"},\n    {\"_ZNK26ImageLoaderMachOCompressed13hasSubLibraryERKN11ImageLoader11LinkContextEPKS0_\", \"ImageLoaderMachOCompressed::hasSubLibrary(ImageLoader::LinkContext const&, ImageLoader const*) const\"},\n    {\"_ZSt17__throw_bad_allocv\", \"std::__throw_bad_alloc()\"},\n    {\"_ZSt20__throw_length_errorPKc\", \"std::__throw_length_error(char const*)\"},\n    {\"_ZSt19__throw_logic_errorPKc\", \"std::__throw_logic_error(char const*)\"},\n    {\"_ZNSt12length_errorD0Ev\", \"std::length_error::~length_error()\"},\n    {\"_ZNSt12length_errorD2Ev\", \"std::length_error::~length_error()\"},\n    {\"_ZNSt12length_errorD1Ev\", \"std::length_error::~length_error()\"},\n    {\"_ZNKSt11logic_error4whatEv\", \"std::logic_error::what() const\"},\n    {\"_ZNSt11logic_errorC2ERKSs\", \"std::logic_error::logic_error(std::string const&)\"},\n    {\"_ZNSt11logic_errorC1ERKSs\", \"std::logic_error::logic_error(std::string const&)\"},\n    {\"_ZNSt12length_errorC1ERKSs\", \"std::length_error::length_error(std::string const&)\"},\n    {\"_ZNSt11logic_errorD0Ev\", \"std::logic_error::~logic_error()\"},\n    {\"_ZNSt11logic_errorD2Ev\", \"std::logic_error::~logic_error()\"},\n    {\"_ZNSt11logic_errorD1Ev\", \"std::logic_error::~logic_error()\"},\n    {\"_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base\", \"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)\"},\n    {\"_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_\", \"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)\"},\n    {\"_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base\", \"std::_Rb_tree_increment(std::_Rb_tree_node_base const*)\"},\n    {\"_ZNSs4_Rep10_M_disposeERKSaIcE\", \"std::string::_Rep::_M_dispose(std::allocator<char> const&)\"},\n    {\"_ZNSs4_Rep9_S_createEmmRKSaIcE\", \"std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)\"},\n    {\"_ZNSs4_Rep8_M_cloneERKSaIcEm\", \"std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned long)\"},\n    {\"_ZNSs4_Rep7_M_grabERKSaIcES2_\", \"std::string::_Rep::_M_grab(std::allocator<char> const&, std::allocator<char> const&)\"},\n    {\"_ZNSsC2ERKSs\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)\"},\n    {\"_ZNSsC1ERKSs\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)\"},\n    {\"_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag\", \"char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag)\"},\n    {\"_ZNSsC2EPKcRKSaIcE\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)\"},\n    {\"_ZNSsC1EPKcRKSaIcE\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv\", \"__gnu_cxx::new_allocator<char>::allocate(unsigned long, void const*)\"},\n    {\"_ZdlPv\", \"operator delete(void*)\"},\n    {\"_ZdaPv\", \"operator delete[](void*)\"},\n    {\"_ZNK9__gnu_cxx24__concurrence_lock_error4whatEv\", \"__gnu_cxx::__concurrence_lock_error::what() const\"},\n    {\"_ZNK9__gnu_cxx26__concurrence_unlock_error4whatEv\", \"__gnu_cxx::__concurrence_unlock_error::what() const\"},\n    {\"_ZN9__gnu_cxx32__throw_concurrence_unlock_errorEv\", \"__gnu_cxx::__throw_concurrence_unlock_error()\"},\n    {\"_ZN9__gnu_cxx30__throw_concurrence_lock_errorEv\", \"__gnu_cxx::__throw_concurrence_lock_error()\"},\n    {\"_ZN9__gnu_cxx7__mutex4lockEv\", \"__gnu_cxx::__mutex::lock()\"},\n    {\"_ZN9__gnu_cxx26__concurrence_unlock_errorD0Ev\", \"__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error()\"},\n    {\"_ZN9__gnu_cxx26__concurrence_unlock_errorD2Ev\", \"__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error()\"},\n    {\"_ZN9__gnu_cxx26__concurrence_unlock_errorD1Ev\", \"__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error()\"},\n    {\"_ZN9__gnu_cxx24__concurrence_lock_errorD0Ev\", \"__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error()\"},\n    {\"_ZN9__gnu_cxx24__concurrence_lock_errorD2Ev\", \"__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error()\"},\n    {\"_ZN9__gnu_cxx24__concurrence_lock_errorD1Ev\", \"__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error()\"},\n    {\"_ZN9__gnu_cxx7__mutex6unlockEv\", \"__gnu_cxx::__mutex::unlock()\"},\n    {\"_ZN9__gnu_cxx13__scoped_lockD2Ev\", \"__gnu_cxx::__scoped_lock::~__scoped_lock()\"},\n    {\"_ZNKSt9exception4whatEv\", \"std::exception::what() const\"},\n    {\"_ZNKSt13bad_exception4whatEv\", \"std::bad_exception::what() const\"},\n    {\"_ZNSt13bad_exceptionD0Ev\", \"std::bad_exception::~bad_exception()\"},\n    {\"_ZNSt9exceptionD0Ev\", \"std::exception::~exception()\"},\n    {\"_ZNSt9exceptionD2Ev\", \"std::exception::~exception()\"},\n    {\"_ZNSt13bad_exceptionD1Ev\", \"std::bad_exception::~bad_exception()\"},\n    {\"_ZNSt9exceptionD1Ev\", \"std::exception::~exception()\"},\n    {\"_ZNKSt9bad_alloc4whatEv\", \"std::bad_alloc::what() const\"},\n    {\"_ZNSt9bad_allocD0Ev\", \"std::bad_alloc::~bad_alloc()\"},\n    {\"_ZNSt9bad_allocD2Ev\", \"std::bad_alloc::~bad_alloc()\"},\n    {\"_ZNSt9bad_allocD1Ev\", \"std::bad_alloc::~bad_alloc()\"},\n    {\"_Znwm\", \"operator new(unsigned long)\"},\n    {\"_Znam\", \"operator new[](unsigned long)\"},\n    {\"_ZNKSt9type_info14__is_pointer_pEv\", \"std::type_info::__is_pointer_p() const\"},\n    {\"_ZNKSt9type_info15__is_function_pEv\", \"std::type_info::__is_function_p() const\"},\n    {\"_ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv\", \"std::type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const\"},\n    {\"_ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj\", \"__cxxabiv1::__class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const\"},\n    {\"_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv\", \"__cxxabiv1::__class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const\"},\n    {\"_ZNK10__cxxabiv117__class_type_info20__do_find_public_srcElPKvPKS0_S2_\", \"__cxxabiv1::__class_type_info::__do_find_public_src(long, void const*, __cxxabiv1::__class_type_info const*, void const*) const\"},\n    {\"_ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE\", \"__cxxabiv1::__class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__upcast_result&) const\"},\n    {\"_ZN10__cxxabiv117__class_type_infoD0Ev\", \"__cxxabiv1::__class_type_info::~__class_type_info()\"},\n    {\"_ZN10__cxxabiv117__class_type_infoD1Ev\", \"__cxxabiv1::__class_type_info::~__class_type_info()\"},\n    {\"_ZNSt9type_infoD0Ev\", \"std::type_info::~type_info()\"},\n    {\"_ZNSt9type_infoD1Ev\", \"std::type_info::~type_info()\"},\n    {\"_ZNSt9type_infoD2Ev\", \"std::type_info::~type_info()\"},\n    {\"_ZNKSt9type_info10__do_catchEPKS_PPvj\", \"std::type_info::__do_catch(std::type_info const*, void**, unsigned int) const\"},\n    {\"_ZNK10__cxxabiv117__class_type_info12__do_dyncastElNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE\", \"__cxxabiv1::__class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const\"},\n    {\"_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_\", \"__cxxabiv1::__si_class_type_info::__do_find_public_src(long, void const*, __cxxabiv1::__class_type_info const*, void const*) const\"},\n    {\"_ZNK10__cxxabiv120__si_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE\", \"__cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const\"},\n    {\"_ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE\", \"__cxxabiv1::__si_class_type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__upcast_result&) const\"},\n    {\"_ZN10__cxxabiv120__si_class_type_infoD0Ev\", \"__cxxabiv1::__si_class_type_info::~__si_class_type_info()\"},\n    {\"_ZN10__cxxabiv120__si_class_type_infoD2Ev\", \"__cxxabiv1::__si_class_type_info::~__si_class_type_info()\"},\n    {\"_ZN10__cxxabiv120__si_class_type_infoD1Ev\", \"__cxxabiv1::__si_class_type_info::~__si_class_type_info()\"},\n    {\"_ZNK10__cxxabiv119__pointer_type_info14__is_pointer_pEv\", \"__cxxabiv1::__pointer_type_info::__is_pointer_p() const\"},\n    {\"_ZN10__cxxabiv117__pbase_type_infoD0Ev\", \"__cxxabiv1::__pbase_type_info::~__pbase_type_info()\"},\n    {\"_ZN10__cxxabiv117__pbase_type_infoD2Ev\", \"__cxxabiv1::__pbase_type_info::~__pbase_type_info()\"},\n    {\"_ZN10__cxxabiv119__pointer_type_infoD0Ev\", \"__cxxabiv1::__pointer_type_info::~__pointer_type_info()\"},\n    {\"_ZN10__cxxabiv119__pointer_type_infoD2Ev\", \"__cxxabiv1::__pointer_type_info::~__pointer_type_info()\"},\n    {\"_ZN10__cxxabiv119__pointer_type_infoD1Ev\", \"__cxxabiv1::__pointer_type_info::~__pointer_type_info()\"},\n    {\"_ZN10__cxxabiv117__pbase_type_infoD1Ev\", \"__cxxabiv1::__pbase_type_info::~__pbase_type_info()\"},\n    {\"_ZN10__cxxabiv123__fundamental_type_infoD0Ev\", \"__cxxabiv1::__fundamental_type_info::~__fundamental_type_info()\"},\n    {\"_ZN10__cxxabiv123__fundamental_type_infoD2Ev\", \"__cxxabiv1::__fundamental_type_info::~__fundamental_type_info()\"},\n    {\"_ZN10__cxxabiv123__fundamental_type_infoD1Ev\", \"__cxxabiv1::__fundamental_type_info::~__fundamental_type_info()\"},\n    {\"_ZNK10__cxxabiv117__pbase_type_info10__do_catchEPKSt9type_infoPPvj\", \"__cxxabiv1::__pbase_type_info::__do_catch(std::type_info const*, void**, unsigned int) const\"},\n    {\"_ZNK10__cxxabiv119__pointer_type_info15__pointer_catchEPKNS_17__pbase_type_infoEPPvj\", \"__cxxabiv1::__pointer_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*, void**, unsigned int) const\"},\n    {\"_ZNK10__cxxabiv117__pbase_type_info15__pointer_catchEPKS0_PPvj\", \"__cxxabiv1::__pbase_type_info::__pointer_catch(__cxxabiv1::__pbase_type_info const*, void**, unsigned int) const\"},\n    {\"_ZN16CSCppTimeoutLockD1Ev\", \"CSCppTimeoutLock::~CSCppTimeoutLock()\"},\n    {\"_ZN16CSCppTimeoutLockC2EPjj\", \"CSCppTimeoutLock::CSCppTimeoutLock(unsigned int*, unsigned int)\"},\n    {\"_ZN16CSCppTimeoutLockC1EPjj\", \"CSCppTimeoutLock::CSCppTimeoutLock(unsigned int*, unsigned int)\"},\n    {\"_ZN25CSCppDyldSharedMemoryPage11send_noticeEjRjS0_\", \"CSCppDyldSharedMemoryPage::send_notice(unsigned int, unsigned int&, unsigned int&)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE8validRegEi\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::validReg(int)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE13validFloatRegEi\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::validFloatReg(int)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE7getInfoEP15unw_proc_info_t\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getInfo(unw_proc_info_t*)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE15getRegisterNameEi\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getRegisterName(int)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE13isSignalFrameEv\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::isSignalFrame()\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EED0Ev\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::~UnwindCursor()\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE33getInfoFromCompactEncodingSectionEyyy\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getInfoFromCompactEncodingSection(unsigned long long, unsigned long long, unsigned long long)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE24setInfoBasedOnIPRegisterEb\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::setInfoBasedOnIPRegister(bool)\"},\n    {\"_ZN9libunwind17LocalAddressSpace16findFunctionNameEyPcmPy\", \"libunwind::LocalAddressSpace::findFunctionName(unsigned long long, char*, unsigned long, unsigned long long*)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE15getFunctionNameEPcmPy\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getFunctionName(char*, unsigned long, unsigned long long*)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE6jumptoEv\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::jumpto()\"},\n    {\"_ZN9libunwind22CompactUnwinder_x86_64INS_17LocalAddressSpaceEE32stepWithCompactEncodingFramelessEjyRS1_RNS_16Registers_x86_64Eb\", \"libunwind::CompactUnwinder_x86_64<libunwind::LocalAddressSpace>::stepWithCompactEncodingFrameless(unsigned int, unsigned long long, libunwind::LocalAddressSpace&, libunwind::Registers_x86_64&, bool)\"},\n    {\"_ZN9libunwind22CompactUnwinder_x86_64INS_17LocalAddressSpaceEE31stepWithCompactEncodingRBPFrameEjyRS1_RNS_16Registers_x86_64E\", \"libunwind::CompactUnwinder_x86_64<libunwind::LocalAddressSpace>::stepWithCompactEncodingRBPFrame(unsigned int, unsigned long long, libunwind::LocalAddressSpace&, libunwind::Registers_x86_64&)\"},\n    {\"_ZN9libunwind22CompactUnwinder_x86_64INS_17LocalAddressSpaceEE23stepWithCompactEncodingEjyRS1_RNS_16Registers_x86_64E\", \"libunwind::CompactUnwinder_x86_64<libunwind::LocalAddressSpace>::stepWithCompactEncoding(unsigned int, unsigned long long, libunwind::LocalAddressSpace&, libunwind::Registers_x86_64&)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE23stepWithCompactEncodingEv\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::stepWithCompactEncoding()\"},\n    {\"_ZN9libunwind16Registers_x86_6411setRegisterEiy\", \"libunwind::Registers_x86_64::setRegister(int, unsigned long long)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE6setRegEiy\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::setReg(int, unsigned long long)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE6getRegEi\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getReg(int)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EED1Ev\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::~UnwindCursor()\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE4stepEv\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::step()\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE11setFloatRegEid\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::setFloatReg(int, double)\"},\n    {\"_ZN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EE11getFloatRegEi\", \"libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getFloatReg(int)\"},\n    {\"_ZN9libunwind16Registers_x86_646jumptoEv\", \"libunwind::Registers_x86_64::jumpto()\"},\n    {\"_Z41__static_initialization_and_destruction_0ii\", \"__static_initialization_and_destruction_0(int, int)\"},\n    {\"_Z41__static_initialization_and_destruction_0ii\", \"__static_initialization_and_destruction_0(int, int)\"},\n    {\"_Z41__static_initialization_and_destruction_0ii\", \"__static_initialization_and_destruction_0(int, int)\"},\n    {\"_Z41__static_initialization_and_destruction_0ii\", \"__static_initialization_and_destruction_0(int, int)\"},\n    {\"_Z41__static_initialization_and_destruction_0ii\", \"__static_initialization_and_destruction_0(int, int)\"},\n    {\"_ZZ34dyld_image_path_containing_addressE8__func__\", \"dyld_image_path_containing_address::__func__\"},\n    {\"_ZZ40dyld_register_image_state_change_handlerE8__func__\", \"dyld_register_image_state_change_handler::__func__\"},\n    {\"_ZZ5dlsymE8__func__\", \"dlsym::__func__\"},\n    {\"_ZZ7dlerrorE8__func__\", \"dlerror::__func__\"},\n    {\"_ZZ6dladdrE8__func__\", \"dladdr::__func__\"},\n    {\"_ZZ7dlcloseE8__func__\", \"dlclose::__func__\"},\n    {\"_ZZ6dlopenE8__func__\", \"dlopen::__func__\"},\n    {\"_ZZ16dlopen_preflightE8__func__\", \"dlopen_preflight::__func__\"},\n    {\"_ZZ23_dyld_launched_preboundE8__func__\", \"_dyld_launched_prebound::__func__\"},\n    {\"_ZZ14NSUnLinkModuleE8__func__\", \"NSUnLinkModule::__func__\"},\n    {\"_ZZ22NSLibraryNameForModuleE8__func__\", \"NSLibraryNameForModule::__func__\"},\n    {\"_ZZ14NSNameOfModuleE8__func__\", \"NSNameOfModule::__func__\"},\n    {\"_ZZ22NSLookupSymbolInModuleE8__func__\", \"NSLookupSymbolInModule::__func__\"},\n    {\"_ZZ12NSLinkModuleE8__func__\", \"NSLinkModule::__func__\"},\n    {\"_ZZ34NSIsSymbolDefinedInObjectFileImageE8__func__\", \"NSIsSymbolDefinedInObjectFileImage::__func__\"},\n    {\"_ZZ33NSGetSectionDataInObjectFileImageE8__func__\", \"NSGetSectionDataInObjectFileImage::__func__\"},\n    {\"_ZZ38NSSymbolReferenceNameInObjectFileImageE8__func__\", \"NSSymbolReferenceNameInObjectFileImage::__func__\"},\n    {\"_ZZ39NSSymbolReferenceCountInObjectFileImageE8__func__\", \"NSSymbolReferenceCountInObjectFileImage::__func__\"},\n    {\"_ZZ39NSSymbolDefinitionNameInObjectFileImageE8__func__\", \"NSSymbolDefinitionNameInObjectFileImage::__func__\"},\n    {\"_ZZ40NSSymbolDefinitionCountInObjectFileImageE8__func__\", \"NSSymbolDefinitionCountInObjectFileImage::__func__\"},\n    {\"_ZZ27NSHasModInitObjectFileImageE8__func__\", \"NSHasModInitObjectFileImage::__func__\"},\n    {\"_ZZ24NSDestroyObjectFileImageE8__func__\", \"NSDestroyObjectFileImage::__func__\"},\n    {\"_ZZ33NSCreateObjectFileImageFromMemoryE8__func__\", \"NSCreateObjectFileImageFromMemory::__func__\"},\n    {\"_ZZ31NSCreateObjectFileImageFromFileE8__func__\", \"NSCreateObjectFileImageFromFile::__func__\"},\n    {\"_ZZ30_dyld_image_containing_addressE8__func__\", \"_dyld_image_containing_address::__func__\"},\n    {\"_ZZ41_dyld_bind_fully_image_containing_addressE8__func__\", \"_dyld_bind_fully_image_containing_address::__func__\"},\n    {\"_ZZ22_dyld_bind_objc_moduleE8__func__\", \"_dyld_bind_objc_module::__func__\"},\n    {\"_ZZ35_dyld_all_twolevel_modules_preboundE8__func__\", \"_dyld_all_twolevel_modules_prebound::__func__\"},\n    {\"_ZZ17NSModuleForSymbolE8__func__\", \"NSModuleForSymbol::__func__\"},\n    {\"_ZZ17NSAddressOfSymbolE8__func__\", \"NSAddressOfSymbol::__func__\"},\n    {\"_ZZ14NSNameOfSymbolE8__func__\", \"NSNameOfSymbol::__func__\"},\n    {\"_ZZ29NSIsSymbolNameDefinedWithHintE8__func__\", \"NSIsSymbolNameDefinedWithHint::__func__\"},\n    {\"_ZZ21NSLookupSymbolInImageE8__func__\", \"NSLookupSymbolInImage::__func__\"},\n    {\"_ZZ28NSIsSymbolNameDefinedInImageE8__func__\", \"NSIsSymbolNameDefinedInImage::__func__\"},\n    {\"_ZZ25NSAddLibraryWithSearchingE8__func__\", \"NSAddLibraryWithSearching::__func__\"},\n    {\"_ZZ12NSAddLibraryE8__func__\", \"NSAddLibrary::__func__\"},\n    {\"_ZZ10NSAddImageE8__func__\", \"NSAddImage::__func__\"},\n    {\"_ZZ29NSLookupAndBindSymbolWithHintE8__func__\", \"NSLookupAndBindSymbolWithHint::__func__\"},\n    {\"_ZZ21NSLookupAndBindSymbolE8__func__\", \"NSLookupAndBindSymbol::__func__\"},\n    {\"_ZZ31_dyld_lookup_and_bind_with_hintE8__func__\", \"_dyld_lookup_and_bind_with_hint::__func__\"},\n    {\"_ZZ27_dyld_lookup_and_bind_fullyE8__func__\", \"_dyld_lookup_and_bind_fully::__func__\"},\n    {\"_ZZ36_dyld_register_func_for_remove_imageE8__func__\", \"_dyld_register_func_for_remove_image::__func__\"},\n    {\"_ZZ33_dyld_register_func_for_add_imageE8__func__\", \"_dyld_register_func_for_add_image::__func__\"},\n    {\"_ZZ41_dyld_get_image_header_containing_addressE8__func__\", \"_dyld_get_image_header_containing_address::__func__\"},\n    {\"_ZZ20_dyld_get_image_nameE8__func__\", \"_dyld_get_image_name::__func__\"},\n    {\"_ZZ21_dyld_get_image_slideE8__func__\", \"_dyld_get_image_slide::__func__\"},\n    {\"_ZZ28_dyld_get_image_vmaddr_slideE8__func__\", \"_dyld_get_image_vmaddr_slide::__func__\"},\n    {\"_ZZ22_dyld_get_image_headerE8__func__\", \"_dyld_get_image_header::__func__\"},\n    {\"_ZZ17_dyld_image_countE8__func__\", \"_dyld_image_count::__func__\"},\n    {\"_ZZ20_NSGetExecutablePathE8__func__\", \"_NSGetExecutablePath::__func__\"},\n    {\"_ZTSSt11logic_error\", \"typeinfo name for std::logic_error\"},\n    {\"_ZTSSt13bad_exception\", \"typeinfo name for std::bad_exception\"},\n    {\"_ZTSSt9exception\", \"typeinfo name for std::exception\"},\n    {\"_ZTSSt9bad_alloc\", \"typeinfo name for std::bad_alloc\"},\n    {\"_ZTSN10__cxxabiv120__si_class_type_infoE\", \"typeinfo name for __cxxabiv1::__si_class_type_info\"},\n    {\"_ZTSN10__cxxabiv117__class_type_infoE\", \"typeinfo name for __cxxabiv1::__class_type_info\"},\n    {\"_ZTSSt9type_info\", \"typeinfo name for std::type_info\"},\n    {\"_ZTSPKc\", \"typeinfo name for char const*\"},\n    {\"_ZTSPc\", \"typeinfo name for char*\"},\n    {\"_ZTSc\", \"typeinfo name for char\"},\n    {\"_ZTSv\", \"typeinfo name for void\"},\n    {\"_ZTSN10__cxxabiv119__pointer_type_infoE\", \"typeinfo name for __cxxabiv1::__pointer_type_info\"},\n    {\"_ZTSN10__cxxabiv117__pbase_type_infoE\", \"typeinfo name for __cxxabiv1::__pbase_type_info\"},\n    {\"_ZTSN10__cxxabiv123__fundamental_type_infoE\", \"typeinfo name for __cxxabiv1::__fundamental_type_info\"},\n    {\"_ZTSSt12length_error\", \"typeinfo name for std::length_error\"},\n    {\"_ZTSN9__gnu_cxx24__concurrence_lock_errorE\", \"typeinfo name for __gnu_cxx::__concurrence_lock_error\"},\n    {\"_ZTSN9__gnu_cxx26__concurrence_unlock_errorE\", \"typeinfo name for __gnu_cxx::__concurrence_unlock_error\"},\n    {\"_ZTV11ImageLoader\", \"vtable for ImageLoader\"},\n    {\"_ZTV16ImageLoaderMachO\", \"vtable for ImageLoaderMachO\"},\n    {\"_ZTV23ImageLoaderMachOClassic\", \"vtable for ImageLoaderMachOClassic\"},\n    {\"_ZTV26ImageLoaderMachOCompressed\", \"vtable for ImageLoaderMachOCompressed\"},\n    {\"_ZTISt12length_error\", \"typeinfo for std::length_error\"},\n    {\"_ZTVSt12length_error\", \"vtable for std::length_error\"},\n    {\"_ZTVSt11logic_error\", \"vtable for std::logic_error\"},\n    {\"_ZTISt11logic_error\", \"typeinfo for std::logic_error\"},\n    {\"_ZTIN9__gnu_cxx24__concurrence_lock_errorE\", \"typeinfo for __gnu_cxx::__concurrence_lock_error\"},\n    {\"_ZTVN9__gnu_cxx24__concurrence_lock_errorE\", \"vtable for __gnu_cxx::__concurrence_lock_error\"},\n    {\"_ZTIN9__gnu_cxx26__concurrence_unlock_errorE\", \"typeinfo for __gnu_cxx::__concurrence_unlock_error\"},\n    {\"_ZTVN9__gnu_cxx26__concurrence_unlock_errorE\", \"vtable for __gnu_cxx::__concurrence_unlock_error\"},\n    {\"_ZTVSt13bad_exception\", \"vtable for std::bad_exception\"},\n    {\"_ZTVSt9exception\", \"vtable for std::exception\"},\n    {\"_ZTISt13bad_exception\", \"typeinfo for std::bad_exception\"},\n    {\"_ZTISt9exception\", \"typeinfo for std::exception\"},\n    {\"_ZTVSt9bad_alloc\", \"vtable for std::bad_alloc\"},\n    {\"_ZTISt9bad_alloc\", \"typeinfo for std::bad_alloc\"},\n    {\"_ZTVN10__cxxabiv120__si_class_type_infoE\", \"vtable for __cxxabiv1::__si_class_type_info\"},\n    {\"_ZTVN10__cxxabiv117__class_type_infoE\", \"vtable for __cxxabiv1::__class_type_info\"},\n    {\"_ZTVSt9type_info\", \"vtable for std::type_info\"},\n    {\"_ZTIN10__cxxabiv120__si_class_type_infoE\", \"typeinfo for __cxxabiv1::__si_class_type_info\"},\n    {\"_ZTIN10__cxxabiv117__class_type_infoE\", \"typeinfo for __cxxabiv1::__class_type_info\"},\n    {\"_ZTISt9type_info\", \"typeinfo for std::type_info\"},\n    {\"_ZTVN10__cxxabiv119__pointer_type_infoE\", \"vtable for __cxxabiv1::__pointer_type_info\"},\n    {\"_ZTVN10__cxxabiv117__pbase_type_infoE\", \"vtable for __cxxabiv1::__pbase_type_info\"},\n    {\"_ZTVN10__cxxabiv123__fundamental_type_infoE\", \"vtable for __cxxabiv1::__fundamental_type_info\"},\n    {\"_ZTIPKc\", \"typeinfo for char const*\"},\n    {\"_ZTIPc\", \"typeinfo for char*\"},\n    {\"_ZTIc\", \"typeinfo for char\"},\n    {\"_ZTIv\", \"typeinfo for void\"},\n    {\"_ZTIN10__cxxabiv119__pointer_type_infoE\", \"typeinfo for __cxxabiv1::__pointer_type_info\"},\n    {\"_ZTIN10__cxxabiv117__pbase_type_infoE\", \"typeinfo for __cxxabiv1::__pbase_type_info\"},\n    {\"_ZTIN10__cxxabiv123__fundamental_type_infoE\", \"typeinfo for __cxxabiv1::__fundamental_type_info\"},\n    {\"_ZTVN9libunwind12UnwindCursorINS_17LocalAddressSpaceENS_16Registers_x86_64EEE\", \"vtable for libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>\"},\n    {\"_ZN4dyld8gLogAPIsE\", \"dyld::gLogAPIs\"},\n    {\"_ZN4dyld17gLibSystemHelpersE\", \"dyld::gLibSystemHelpers\"},\n    {\"_ZN10__cxxabiv119__terminate_handlerE\", \"__cxxabiv1::__terminate_handler\"},\n    {\"_ZN10__cxxabiv120__unexpected_handlerE\", \"__cxxabiv1::__unexpected_handler\"},\n    {\"_ZN11ImageLoader27fgImagesUsedFromSharedCacheE\", \"ImageLoader::fgImagesUsedFromSharedCache\"},\n    {\"_ZN11ImageLoader26fgImagesWithUsedPrebindingE\", \"ImageLoader::fgImagesWithUsedPrebinding\"},\n    {\"_ZN11ImageLoader25fgImagesRequiringNoFixupsE\", \"ImageLoader::fgImagesRequiringNoFixups\"},\n    {\"_ZN11ImageLoader27fgImagesRequiringCoalescingE\", \"ImageLoader::fgImagesRequiringCoalescing\"},\n    {\"_ZN11ImageLoader26fgImagesHasWeakDefinitionsE\", \"ImageLoader::fgImagesHasWeakDefinitions\"},\n    {\"_ZN11ImageLoader19fgTotalRebaseFixupsE\", \"ImageLoader::fgTotalRebaseFixups\"},\n    {\"_ZN11ImageLoader17fgTotalBindFixupsE\", \"ImageLoader::fgTotalBindFixups\"},\n    {\"_ZN11ImageLoader26fgTotalBindSymbolsResolvedE\", \"ImageLoader::fgTotalBindSymbolsResolved\"},\n    {\"_ZN11ImageLoader24fgTotalBindImageSearchesE\", \"ImageLoader::fgTotalBindImageSearches\"},\n    {\"_ZN11ImageLoader21fgTotalLazyBindFixupsE\", \"ImageLoader::fgTotalLazyBindFixups\"},\n    {\"_ZN11ImageLoader29fgTotalPossibleLazyBindFixupsE\", \"ImageLoader::fgTotalPossibleLazyBindFixups\"},\n    {\"_ZN11ImageLoader21fgTotalSegmentsMappedE\", \"ImageLoader::fgTotalSegmentsMapped\"},\n    {\"_ZN11ImageLoader18fgTotalBytesMappedE\", \"ImageLoader::fgTotalBytesMapped\"},\n    {\"_ZN11ImageLoader22fgTotalBytesPreFetchedE\", \"ImageLoader::fgTotalBytesPreFetched\"},\n    {\"_ZN11ImageLoader21fgNextPIEDylibAddressE\", \"ImageLoader::fgNextPIEDylibAddress\"},\n    {\"_ZN16ImageLoaderMachO26fgSymbolTableBinarySearchsE\", \"ImageLoaderMachO::fgSymbolTableBinarySearchs\"},\n    {\"_ZN16ImageLoaderMachO19fgSymbolTrieSearchsE\", \"ImageLoaderMachO::fgSymbolTrieSearchs\"},\n    {\"_ZN4dyld12gLinkContextE\", \"dyld::gLinkContext\"},\n    {\"_ZN11ImageLoader24fgTotalLoadLibrariesTimeE\", \"ImageLoader::fgTotalLoadLibrariesTime\"},\n    {\"_ZN11ImageLoader17fgTotalRebaseTimeE\", \"ImageLoader::fgTotalRebaseTime\"},\n    {\"_ZN11ImageLoader15fgTotalBindTimeE\", \"ImageLoader::fgTotalBindTime\"},\n    {\"_ZN11ImageLoader19fgTotalWeakBindTimeE\", \"ImageLoader::fgTotalWeakBindTime\"},\n    {\"_ZN11ImageLoader10fgTotalDOFE\", \"ImageLoader::fgTotalDOF\"},\n    {\"_ZN11ImageLoader15fgTotalInitTimeE\", \"ImageLoader::fgTotalInitTime\"},\n    {\"_ZN11ImageLoader23fgDynamicImageReExportsE\", \"ImageLoader::fgDynamicImageReExports\"},\n    {\"_ZN11ImageLoader19fgInterposingTuplesE\", \"ImageLoader::fgInterposingTuples\"},\n    {\"_ZNSs4_Rep20_S_empty_rep_storageE\", \"std::string::_Rep::_S_empty_rep_storage\"},\n    {\"_ZZN23ImageLoaderMachOClassic26bindIndirectSymbolPointersERKN11ImageLoader11LinkContextEbbE13alreadyWarned\", \"ImageLoaderMachOClassic::bindIndirectSymbolPointers(ImageLoader::LinkContext const&, bool, bool)::alreadyWarned\"},\n    {\"_ZN12_GLOBAL__N_115emergency_mutexE\", \"(anonymous namespace)::emergency_mutex\"},\n\n    // clang\n\n    {\"_ZN4llvm8DenseMapIjcNS_12DenseMapInfoIjEENS1_IcEEE6insertERKSt4pairIjcE\", \"llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> >::insert(std::pair<unsigned int, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIjcNS_12DenseMapInfoIjEENS1_IcEEE16InsertIntoBucketERKjRKcPSt4pairIjcE\", \"llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> >::InsertIntoBucket(unsigned int const&, char const&, std::pair<unsigned int, char>*)\"},\n    {\"_ZN4llvm8DenseMapIjcNS_12DenseMapInfoIjEENS1_IcEEE4growEj\", \"llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm19MachinePassRegistry3AddEPNS_23MachinePassRegistryNodeE\", \"llvm::MachinePassRegistry::Add(llvm::MachinePassRegistryNode*)\"},\n    {\"_ZN4llvm2cl6valuesIiEENS0_11ValuesClassIT_EEPKcS3_S6_z\", \"llvm::cl::ValuesClass<int> llvm::cl::values<int>(char const*, int, char const*, ...)\"},\n    {\"_ZN4llvm2cl11ValuesClassIiEC2EPKciS4_P13__va_list_tag\", \"llvm::cl::ValuesClass<int>::ValuesClass(char const*, int, char const*, __va_list_tag*)\"},\n    {\"_ZN4llvm24PassRegistrationListenerC2Ev\", \"llvm::PassRegistrationListener::PassRegistrationListener()\"},\n    {\"_ZN4llvm24PassRegistrationListener15enumeratePassesEv\", \"llvm::PassRegistrationListener::enumeratePasses()\"},\n    {\"_ZN4llvm12PassRegistry15getPassRegistryEv\", \"llvm::PassRegistry::getPassRegistry()\"},\n    {\"_ZNK4llvm12PassRegistry7getImplEv\", \"llvm::PassRegistry::getImpl() const\"},\n    {\"_ZN4llvm12PassRegistry13enumerateWithEPNS_24PassRegistrationListenerE\", \"llvm::PassRegistry::enumerateWith(llvm::PassRegistrationListener*)\"},\n    {\"_ZN4llvm12PassRegistry23addRegistrationListenerEPNS_24PassRegistrationListenerE\", \"llvm::PassRegistry::addRegistrationListener(llvm::PassRegistrationListener*)\"},\n    {\"_ZNSt6vectorIPN4llvm24PassRegistrationListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::PassRegistrationListener**, std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> > >, llvm::PassRegistrationListener* const&)\"},\n    {\"_ZN4llvm3sys11MemoryFenceEv\", \"llvm::sys::MemoryFence()\"},\n    {\"_ZN4llvm2cl6Option11addArgumentEv\", \"llvm::cl::Option::addArgument()\"},\n    {\"_ZN4llvm2cl18MarkOptionsChangedEv\", \"llvm::cl::MarkOptionsChanged()\"},\n    {\"_ZNK4llvm17ManagedStaticBase21RegisterManagedStaticEPFPvvEPFvS1_E\", \"llvm::ManagedStaticBase::RegisterManagedStatic(void* (*)(), void (*)(void*)) const\"},\n    {\"_ZN4llvm3sys9MutexImplC2Eb\", \"llvm::sys::MutexImpl::MutexImpl(bool)\"},\n    {\"_ZN4llvm3sys9MutexImpl7acquireEv\", \"llvm::sys::MutexImpl::acquire()\"},\n    {\"_ZN4llvm3sys9MutexImpl7releaseEv\", \"llvm::sys::MutexImpl::release()\"},\n    {\"_ZN4llvm15SmallVectorBase8grow_podEmm\", \"llvm::SmallVectorBase::grow_pod(unsigned long, unsigned long)\"},\n    {\"_ZN4llvm3sys15ThreadLocalImplC2Ev\", \"llvm::sys::ThreadLocalImpl::ThreadLocalImpl()\"},\n    {\"_ZN4llvm21llvm_is_multithreadedEv\", \"llvm::llvm_is_multithreaded()\"},\n    {\"_ZN4llvm24llvm_acquire_global_lockEv\", \"llvm::llvm_acquire_global_lock()\"},\n    {\"_ZN4llvm24llvm_release_global_lockEv\", \"llvm::llvm_release_global_lock()\"},\n    {\"_ZN4llvm15system_categoryEv\", \"llvm::system_category()\"},\n    {\"_Z8cc1_mainPPKcS1_S0_Pv\", \"cc1_main(char const**, char const**, char const*, void*)\"},\n    {\"_Z16LLVMErrorHandlerPvRKSs\", \"LLVMErrorHandler(void*, std::string const&)\"},\n    {\"_ZNK5clang17DiagnosticBuilder9AddStringEN4llvm9StringRefE\", \"clang::DiagnosticBuilder::AddString(llvm::StringRef) const\"},\n    {\"_ZNK4llvm18IntrusiveRefCntPtrIN5clang10DiagnosticEE6getPtrEv\", \"llvm::IntrusiveRefCntPtr<clang::Diagnostic>::getPtr() const\"},\n    {\"_ZN5clang16DiagnosticClient15BeginSourceFileERKNS_11LangOptionsEPKNS_12PreprocessorE\", \"clang::DiagnosticClient::BeginSourceFile(clang::LangOptions const&, clang::Preprocessor const*)\"},\n    {\"_ZN5clang16DiagnosticClient13EndSourceFileEv\", \"clang::DiagnosticClient::EndSourceFile()\"},\n    {\"_ZN5clang18CompilerInvocationD2Ev\", \"clang::CompilerInvocation::~CompilerInvocation()\"},\n    {\"_ZN5clang14CodeGenOptionsD2Ev\", \"clang::CodeGenOptions::~CodeGenOptions()\"},\n    {\"_ZN5clang23DependencyOutputOptionsD2Ev\", \"clang::DependencyOutputOptions::~DependencyOutputOptions()\"},\n    {\"_ZN5clang15FrontendOptionsD2Ev\", \"clang::FrontendOptions::~FrontendOptions()\"},\n    {\"_ZNSt6vectorIS_ISsSaISsEESaIS1_EED2Ev\", \"std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >::~vector()\"},\n    {\"_ZN5clang19HeaderSearchOptionsD2Ev\", \"clang::HeaderSearchOptions::~HeaderSearchOptions()\"},\n    {\"_ZN5clang19PreprocessorOptionsD2Ev\", \"clang::PreprocessorOptions::~PreprocessorOptions()\"},\n    {\"_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE\", \"std::_Rb_tree<std::string, std::string, std::_Identity<std::string>, std::less<std::string>, std::allocator<std::string> >::_M_erase(std::_Rb_tree_node<std::string>*)\"},\n    {\"_ZNSt6vectorISt4pairISsSsESaIS1_EED2Ev\", \"std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > >::~vector()\"},\n    {\"_ZN5clang13TargetOptionsD2Ev\", \"clang::TargetOptions::~TargetOptions()\"},\n    {\"_ZN5clang18CompilerInvocationC2Ev\", \"clang::CompilerInvocation::CompilerInvocation()\"},\n    {\"_Z10cc1as_mainPPKcS1_S0_Pv\", \"cc1as_main(char const**, char const**, char const*, void*)\"},\n    {\"_Z16LLVMErrorHandlerPvRKSs\", \"LLVMErrorHandler(void*, std::string const&)\"},\n    {\"_ZN4llvm23PrettyStackTraceProgramD1Ev\", \"llvm::PrettyStackTraceProgram::~PrettyStackTraceProgram()\"},\n    {\"_ZN4llvm23PrettyStackTraceProgramD0Ev\", \"llvm::PrettyStackTraceProgram::~PrettyStackTraceProgram()\"},\n    {\"_ZN4llvm21formatted_raw_ostream9setStreamERNS_11raw_ostreamEb\", \"llvm::formatted_raw_ostream::setStream(llvm::raw_ostream&, bool)\"},\n    {\"_ZN4llvm21formatted_raw_ostreamD1Ev\", \"llvm::formatted_raw_ostream::~formatted_raw_ostream()\"},\n    {\"_ZN4llvm21formatted_raw_ostreamD0Ev\", \"llvm::formatted_raw_ostream::~formatted_raw_ostream()\"},\n    {\"_ZN4llvm11raw_ostream11changeColorENS0_6ColorsEbb\", \"llvm::raw_ostream::changeColor(llvm::raw_ostream::Colors, bool, bool)\"},\n    {\"_ZN4llvm11raw_ostream10resetColorEv\", \"llvm::raw_ostream::resetColor()\"},\n    {\"_ZNK4llvm11raw_ostream12is_displayedEv\", \"llvm::raw_ostream::is_displayed() const\"},\n    {\"_ZNK4llvm21formatted_raw_ostream11current_posEv\", \"llvm::formatted_raw_ostream::current_pos() const\"},\n    {\"_ZN4llvm21formatted_raw_ostream13releaseStreamEv\", \"llvm::formatted_raw_ostream::releaseStream()\"},\n    {\"_ZNSt6vectorISsSaISsEEaSERKS1_\", \"std::vector<std::string, std::allocator<std::string> >::operator=(std::vector<std::string, std::allocator<std::string> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm9SourceMgr9SrcBufferESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SourceMgr::SrcBuffer, std::allocator<llvm::SourceMgr::SrcBuffer> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SourceMgr::SrcBuffer*, std::vector<llvm::SourceMgr::SrcBuffer, std::allocator<llvm::SourceMgr::SrcBuffer> > >, llvm::SourceMgr::SrcBuffer const&)\"},\n    {\"_ZN4llvm10error_code21unspecified_bool_trueEv\", \"llvm::error_code::unspecified_bool_true()\"},\n    {\"_Z17GetExecutablePathPKcb\", \"GetExecutablePath(char const*, bool)\"},\n    {\"_Z17ExpandArgsFromBufPKcRN4llvm15SmallVectorImplIS0_EERSt3setISsSt4lessISsESaISsEE\", \"ExpandArgsFromBuf(char const*, llvm::SmallVectorImpl<char const*>&, std::set<std::string, std::less<std::string>, std::allocator<std::string> >&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKcE6insertIN9__gnu_cxx17__normal_iteratorIPS2_St6vectorIS2_SaIS2_EEEEEES7_S7_T_SC_\", \"char const** llvm::SmallVectorImpl<char const*>::insert<__gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > > >(char const**, __gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > >, __gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > >)\"},\n    {\"_ZNSt6vectorIPKcSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<char const*, std::allocator<char const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > >, char const* const&)\"},\n    {\"_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs\", \"std::_Rb_tree<std::string, std::string, std::_Identity<std::string>, std::less<std::string>, std::allocator<std::string> >::_M_insert_unique(std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE9_M_insertEPSt18_Rb_tree_node_baseS7_RKSs\", \"std::_Rb_tree<std::string, std::string, std::_Identity<std::string>, std::less<std::string>, std::allocator<std::string> >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::string const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKcE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<char const*>::insert(char const**, char const* const&)\"},\n    {\"_ZN5clang25ExecuteCompilerInvocationEPNS_16CompilerInstanceE\", \"clang::ExecuteCompilerInvocation(clang::CompilerInstance*)\"},\n    {\"_ZN5clang14FrontendAction21BeginSourceFileActionERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::FrontendAction::BeginSourceFileAction(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang14FrontendAction19EndSourceFileActionEv\", \"clang::FrontendAction::EndSourceFileAction()\"},\n    {\"_ZNK5clang26PreprocessorFrontendAction20usesPreprocessorOnlyEv\", \"clang::PreprocessorFrontendAction::usesPreprocessorOnly() const\"},\n    {\"_ZN5clang14FrontendAction27usesCompleteTranslationUnitEv\", \"clang::FrontendAction::usesCompleteTranslationUnit()\"},\n    {\"_ZNK5clang14FrontendAction13hasPCHSupportEv\", \"clang::FrontendAction::hasPCHSupport() const\"},\n    {\"_ZNK5clang14FrontendAction17hasASTFileSupportEv\", \"clang::FrontendAction::hasASTFileSupport() const\"},\n    {\"_ZNK5clang14FrontendAction12hasIRSupportEv\", \"clang::FrontendAction::hasIRSupport() const\"},\n    {\"_ZNK5clang14FrontendAction24hasCodeCompletionSupportEv\", \"clang::FrontendAction::hasCodeCompletionSupport() const\"},\n    {\"_ZN5clang26PreprocessorFrontendActionD1Ev\", \"clang::PreprocessorFrontendAction::~PreprocessorFrontendAction()\"},\n    {\"_ZN5clang26PreprocessorFrontendActionD0Ev\", \"clang::PreprocessorFrontendAction::~PreprocessorFrontendAction()\"},\n    {\"_ZNK5clang17ASTFrontendAction20usesPreprocessorOnlyEv\", \"clang::ASTFrontendAction::usesPreprocessorOnly() const\"},\n    {\"_ZN5clang17ASTFrontendActionD1Ev\", \"clang::ASTFrontendAction::~ASTFrontendAction()\"},\n    {\"_ZN5clang17ASTFrontendActionD0Ev\", \"clang::ASTFrontendAction::~ASTFrontendAction()\"},\n    {\"_ZNK5clang23PrintPreprocessedAction13hasPCHSupportEv\", \"clang::PrintPreprocessedAction::hasPCHSupport() const\"},\n    {\"_ZN5clang19PrintPreambleAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::PrintPreambleAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZNK5clang19PrintPreambleAction20usesPreprocessorOnlyEv\", \"clang::PrintPreambleAction::usesPreprocessorOnly() const\"},\n    {\"_ZN5clang16SyntaxOnlyActionD1Ev\", \"clang::SyntaxOnlyAction::~SyntaxOnlyAction()\"},\n    {\"_ZN5clang16SyntaxOnlyActionD0Ev\", \"clang::SyntaxOnlyAction::~SyntaxOnlyAction()\"},\n    {\"_ZNK5clang16SyntaxOnlyAction24hasCodeCompletionSupportEv\", \"clang::SyntaxOnlyAction::hasCodeCompletionSupport() const\"},\n    {\"_ZNK5clang14InitOnlyAction20usesPreprocessorOnlyEv\", \"clang::InitOnlyAction::usesPreprocessorOnly() const\"},\n    {\"_ZN5clang17GeneratePCHAction27usesCompleteTranslationUnitEv\", \"clang::GeneratePCHAction::usesCompleteTranslationUnit()\"},\n    {\"_ZNK5clang17GeneratePCHAction17hasASTFileSupportEv\", \"clang::GeneratePCHAction::hasASTFileSupport() const\"},\n    {\"_ZN5clang16CreateASTPrinterEPN4llvm11raw_ostreamE\", \"clang::CreateASTPrinter(llvm::raw_ostream*)\"},\n    {\"_ZN5clang19CreateASTPrinterXMLEPN4llvm11raw_ostreamE\", \"clang::CreateASTPrinterXML(llvm::raw_ostream*)\"},\n    {\"_ZN5clang15CreateASTDumperEv\", \"clang::CreateASTDumper()\"},\n    {\"_ZN5clang15CreateASTViewerEv\", \"clang::CreateASTViewer()\"},\n    {\"_ZN5clang24CreateDeclContextPrinterEv\", \"clang::CreateDeclContextPrinter()\"},\n    {\"_ZN5clang23CreateInheritanceViewerERKSs\", \"clang::CreateInheritanceViewer(std::string const&)\"},\n    {\"_ZN5clang18CreateASTDumperXMLERN4llvm11raw_ostreamE\", \"clang::CreateASTDumperXML(llvm::raw_ostream&)\"},\n    {\"_ZN12_GLOBAL__N_110ASTDumpXMLD1Ev\", \"(anonymous namespace)::ASTDumpXML::~ASTDumpXML()\"},\n    {\"_ZN12_GLOBAL__N_110ASTDumpXMLD0Ev\", \"(anonymous namespace)::ASTDumpXML::~ASTDumpXML()\"},\n    {\"_ZN12_GLOBAL__N_110ASTDumpXML21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::ASTDumpXML::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_117InheritanceViewerD1Ev\", \"(anonymous namespace)::InheritanceViewer::~InheritanceViewer()\"},\n    {\"_ZN12_GLOBAL__N_117InheritanceViewerD0Ev\", \"(anonymous namespace)::InheritanceViewer::~InheritanceViewer()\"},\n    {\"_ZN12_GLOBAL__N_117InheritanceViewer21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::InheritanceViewer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_118DeclContextPrinterD1Ev\", \"(anonymous namespace)::DeclContextPrinter::~DeclContextPrinter()\"},\n    {\"_ZN12_GLOBAL__N_118DeclContextPrinterD0Ev\", \"(anonymous namespace)::DeclContextPrinter::~DeclContextPrinter()\"},\n    {\"_ZN12_GLOBAL__N_118DeclContextPrinter21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::DeclContextPrinter::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_118DeclContextPrinter16PrintDeclContextEPKN5clang11DeclContextEj\", \"(anonymous namespace)::DeclContextPrinter::PrintDeclContext(clang::DeclContext const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_19ASTViewerD1Ev\", \"(anonymous namespace)::ASTViewer::~ASTViewer()\"},\n    {\"_ZN12_GLOBAL__N_19ASTViewerD0Ev\", \"(anonymous namespace)::ASTViewer::~ASTViewer()\"},\n    {\"_ZN12_GLOBAL__N_19ASTViewer10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::ASTViewer::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_19ASTViewer18HandleTopLevelDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::ASTViewer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_113ASTPrinterXMLD1Ev\", \"(anonymous namespace)::ASTPrinterXML::~ASTPrinterXML()\"},\n    {\"_ZN12_GLOBAL__N_113ASTPrinterXMLD0Ev\", \"(anonymous namespace)::ASTPrinterXML::~ASTPrinterXML()\"},\n    {\"_ZN12_GLOBAL__N_113ASTPrinterXML10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::ASTPrinterXML::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_113ASTPrinterXML21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::ASTPrinterXML::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_110ASTPrinterD1Ev\", \"(anonymous namespace)::ASTPrinter::~ASTPrinter()\"},\n    {\"_ZN12_GLOBAL__N_110ASTPrinterD0Ev\", \"(anonymous namespace)::ASTPrinter::~ASTPrinter()\"},\n    {\"_ZN12_GLOBAL__N_110ASTPrinter21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::ASTPrinter::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZNSt5dequeISsSaISsEED2Ev\", \"std::deque<std::string, std::allocator<std::string> >::~deque()\"},\n    {\"_ZNSt5dequeISsSaISsEE19_M_destroy_data_auxESt15_Deque_iteratorISsRSsPSsES5_\", \"std::deque<std::string, std::allocator<std::string> >::_M_destroy_data_aux(std::_Deque_iterator<std::string, std::string&, std::string*>, std::_Deque_iterator<std::string, std::string&, std::string*>)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_jESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, unsigned int>, std::_Select1st<std::pair<clang::QualType const, unsigned int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::QualType const, unsigned int> >*)\"},\n    {\"_ZN5clang14ASTMergeAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTMergeAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang14ASTMergeAction21BeginSourceFileActionERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTMergeAction::BeginSourceFileAction(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang14ASTMergeAction13ExecuteActionEv\", \"clang::ASTMergeAction::ExecuteAction()\"},\n    {\"_ZN5clang14ASTMergeAction19EndSourceFileActionEv\", \"clang::ASTMergeAction::EndSourceFileAction()\"},\n    {\"_ZN5clang14ASTMergeActionC1EPNS_14FrontendActionEPSsj\", \"clang::ASTMergeAction::ASTMergeAction(clang::FrontendAction*, std::string*, unsigned int)\"},\n    {\"_ZN5clang14ASTMergeActionC2EPNS_14FrontendActionEPSsj\", \"clang::ASTMergeAction::ASTMergeAction(clang::FrontendAction*, std::string*, unsigned int)\"},\n    {\"_ZN5clang14ASTMergeActionD0Ev\", \"clang::ASTMergeAction::~ASTMergeAction()\"},\n    {\"_ZN5clang14ASTMergeActionD1Ev\", \"clang::ASTMergeAction::~ASTMergeAction()\"},\n    {\"_ZN5clang14ASTMergeActionD2Ev\", \"clang::ASTMergeAction::~ASTMergeAction()\"},\n    {\"_ZNK5clang14ASTMergeAction20usesPreprocessorOnlyEv\", \"clang::ASTMergeAction::usesPreprocessorOnly() const\"},\n    {\"_ZN5clang14ASTMergeAction27usesCompleteTranslationUnitEv\", \"clang::ASTMergeAction::usesCompleteTranslationUnit()\"},\n    {\"_ZNK5clang14ASTMergeAction13hasPCHSupportEv\", \"clang::ASTMergeAction::hasPCHSupport() const\"},\n    {\"_ZNK5clang14ASTMergeAction17hasASTFileSupportEv\", \"clang::ASTMergeAction::hasASTFileSupport() const\"},\n    {\"_ZNK5clang14ASTMergeAction24hasCodeCompletionSupportEv\", \"clang::ASTMergeAction::hasCodeCompletionSupport() const\"},\n    {\"_ZN5clang7ASTUnitC1Eb\", \"clang::ASTUnit::ASTUnit(bool)\"},\n    {\"_ZN5clang7ASTUnitC2Eb\", \"clang::ASTUnit::ASTUnit(bool)\"},\n    {\"_ZN5clang7ASTUnitD1Ev\", \"clang::ASTUnit::~ASTUnit()\"},\n    {\"_ZN5clang7ASTUnitD2Ev\", \"clang::ASTUnit::~ASTUnit()\"},\n    {\"_ZN5clang7ASTUnit19CleanTemporaryFilesEv\", \"clang::ASTUnit::CleanTemporaryFiles()\"},\n    {\"_ZN5clang7ASTUnit28ClearCachedCompletionResultsEv\", \"clang::ASTUnit::ClearCachedCompletionResults()\"},\n    {\"_ZN5clang7ASTUnit26CacheCodeCompletionResultsEv\", \"clang::ASTUnit::CacheCodeCompletionResults()\"},\n    {\"_ZNK5clang7ASTUnit15getMainFileNameEv\", \"clang::ASTUnit::getMainFileName() const\"},\n    {\"_ZN12_GLOBAL__N_111SimpleTimerD1Ev\", \"(anonymous namespace)::SimpleTimer::~SimpleTimer()\"},\n    {\"_ZN5clang7ASTUnit25getOriginalSourceFileNameEv\", \"clang::ASTUnit::getOriginalSourceFileName()\"},\n    {\"_ZN5clang7ASTUnit14getASTFileNameEv\", \"clang::ASTUnit::getASTFileName()\"},\n    {\"_ZN5clang7ASTUnit16getBufferForFileEN4llvm9StringRefEPSs\", \"clang::ASTUnit::getBufferForFile(llvm::StringRef, std::string*)\"},\n    {\"_ZN5clang7ASTUnit14ConfigureDiagsERN4llvm18IntrusiveRefCntPtrINS_10DiagnosticEEEPPKcS8_RS0_b\", \"clang::ASTUnit::ConfigureDiags(llvm::IntrusiveRefCntPtr<clang::Diagnostic>&, char const**, char const**, clang::ASTUnit&, bool)\"},\n    {\"_ZN5clang7ASTUnit15LoadFromASTFileERKSsN4llvm18IntrusiveRefCntPtrINS_10DiagnosticEEERKNS_17FileSystemOptionsEbPSt4pairISsPKNS3_12MemoryBufferEEjb\", \"clang::ASTUnit::LoadFromASTFile(std::string const&, llvm::IntrusiveRefCntPtr<clang::Diagnostic>, clang::FileSystemOptions const&, bool, std::pair<std::string, llvm::MemoryBuffer const*>*, unsigned int, bool)\"},\n    {\"_ZN5clang7ASTUnit5ParseEPN4llvm12MemoryBufferE\", \"clang::ASTUnit::Parse(llvm::MemoryBuffer*)\"},\n    {\"_ZN5clang7ASTUnit15ComputePreambleERNS_18CompilerInvocationEjRb\", \"clang::ASTUnit::ComputePreamble(clang::CompilerInvocation&, unsigned int, bool&)\"},\n    {\"_ZN5clang7ASTUnit36getMainBufferWithPrecompiledPreambleENS_18CompilerInvocationEbj\", \"clang::ASTUnit::getMainBufferWithPrecompiledPreamble(clang::CompilerInvocation, bool, unsigned int)\"},\n    {\"_ZN5clang7ASTUnit32RealizeTopLevelDeclsFromPreambleEv\", \"clang::ASTUnit::RealizeTopLevelDeclsFromPreamble()\"},\n    {\"_ZN5clang7ASTUnit39RealizePreprocessedEntitiesFromPreambleEv\", \"clang::ASTUnit::RealizePreprocessedEntitiesFromPreamble()\"},\n    {\"_ZN5clang7ASTUnit15pp_entity_beginEv\", \"clang::ASTUnit::pp_entity_begin()\"},\n    {\"_ZN5clang7ASTUnit13pp_entity_endEv\", \"clang::ASTUnit::pp_entity_end()\"},\n    {\"_ZNK5clang7ASTUnit14getMaxPCHLevelEv\", \"clang::ASTUnit::getMaxPCHLevel() const\"},\n    {\"_ZN5clang7ASTUnit26LoadFromCompilerInvocationEb\", \"clang::ASTUnit::LoadFromCompilerInvocation(bool)\"},\n    {\"_ZN5clang7ASTUnit26LoadFromCompilerInvocationEPNS_18CompilerInvocationEN4llvm18IntrusiveRefCntPtrINS_10DiagnosticEEEbbbbb\", \"clang::ASTUnit::LoadFromCompilerInvocation(clang::CompilerInvocation*, llvm::IntrusiveRefCntPtr<clang::Diagnostic>, bool, bool, bool, bool, bool)\"},\n    {\"_ZN5clang7ASTUnit19LoadFromCommandLineEPPKcS3_N4llvm18IntrusiveRefCntPtrINS_10DiagnosticEEENS4_9StringRefEbbPSt4pairISsPKNS4_12MemoryBufferEEjbbbbb\", \"clang::ASTUnit::LoadFromCommandLine(char const**, char const**, llvm::IntrusiveRefCntPtr<clang::Diagnostic>, llvm::StringRef, bool, bool, std::pair<std::string, llvm::MemoryBuffer const*>*, unsigned int, bool, bool, bool, bool, bool)\"},\n    {\"_ZN5clang7ASTUnit7ReparseEPSt4pairISsPKN4llvm12MemoryBufferEEj\", \"clang::ASTUnit::Reparse(std::pair<std::string, llvm::MemoryBuffer const*>*, unsigned int)\"},\n    {\"_ZN5clang7ASTUnit12CodeCompleteEN4llvm9StringRefEjjPSt4pairISsPKNS1_12MemoryBufferEEjbbRNS_20CodeCompleteConsumerERNS_10DiagnosticERNS_11LangOptionsERNS_13SourceManagerERNS_11FileManagerERNS1_15SmallVectorImplINS_16StoredDiagnosticEEERNSJ_IS6_EE\", \"clang::ASTUnit::CodeComplete(llvm::StringRef, unsigned int, unsigned int, std::pair<std::string, llvm::MemoryBuffer const*>*, unsigned int, bool, bool, clang::CodeCompleteConsumer&, clang::Diagnostic&, clang::LangOptions&, clang::SourceManager&, clang::FileManager&, llvm::SmallVectorImpl<clang::StoredDiagnostic>&, llvm::SmallVectorImpl<llvm::MemoryBuffer const*>&)\"},\n    {\"_ZN5clang7ASTUnit4SaveEN4llvm9StringRefE\", \"clang::ASTUnit::Save(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_129AugmentedCodeCompleteConsumerD1Ev\", \"(anonymous namespace)::AugmentedCodeCompleteConsumer::~AugmentedCodeCompleteConsumer()\"},\n    {\"_ZN12_GLOBAL__N_129AugmentedCodeCompleteConsumerD0Ev\", \"(anonymous namespace)::AugmentedCodeCompleteConsumer::~AugmentedCodeCompleteConsumer()\"},\n    {\"_ZN12_GLOBAL__N_129AugmentedCodeCompleteConsumer26ProcessCodeCompleteResultsERN5clang4SemaENS1_21CodeCompletionContextEPNS1_20CodeCompletionResultEj\", \"(anonymous namespace)::AugmentedCodeCompleteConsumer::ProcessCodeCompleteResults(clang::Sema&, clang::CodeCompletionContext, clang::CodeCompletionResult*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_129AugmentedCodeCompleteConsumer25ProcessOverloadCandidatesERN5clang4SemaEjPNS1_20CodeCompleteConsumer17OverloadCandidateEj\", \"(anonymous namespace)::AugmentedCodeCompleteConsumer::ProcessOverloadCandidates(clang::Sema&, unsigned int, clang::CodeCompleteConsumer::OverloadCandidate*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_129AugmentedCodeCompleteConsumer12getAllocatorEv\", \"(anonymous namespace)::AugmentedCodeCompleteConsumer::getAllocator()\"},\n    {\"_ZN12_GLOBAL__N_122StoredDiagnosticClientD1Ev\", \"(anonymous namespace)::StoredDiagnosticClient::~StoredDiagnosticClient()\"},\n    {\"_ZN12_GLOBAL__N_122StoredDiagnosticClientD0Ev\", \"(anonymous namespace)::StoredDiagnosticClient::~StoredDiagnosticClient()\"},\n    {\"_ZN12_GLOBAL__N_122StoredDiagnosticClient16HandleDiagnosticEN5clang10Diagnostic5LevelERKNS1_14DiagnosticInfoE\", \"(anonymous namespace)::StoredDiagnosticClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_124PrecompilePreambleAction17CreateASTConsumerERN5clang16CompilerInstanceEN4llvm9StringRefE\", \"(anonymous namespace)::PrecompilePreambleAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_124PrecompilePreambleActionD1Ev\", \"(anonymous namespace)::PrecompilePreambleAction::~PrecompilePreambleAction()\"},\n    {\"_ZN12_GLOBAL__N_124PrecompilePreambleActionD0Ev\", \"(anonymous namespace)::PrecompilePreambleAction::~PrecompilePreambleAction()\"},\n    {\"_ZN12_GLOBAL__N_124PrecompilePreambleAction27usesCompleteTranslationUnitEv\", \"(anonymous namespace)::PrecompilePreambleAction::usesCompleteTranslationUnit()\"},\n    {\"_ZNK12_GLOBAL__N_124PrecompilePreambleAction17hasASTFileSupportEv\", \"(anonymous namespace)::PrecompilePreambleAction::hasASTFileSupport() const\"},\n    {\"_ZNK12_GLOBAL__N_124PrecompilePreambleAction24hasCodeCompletionSupportEv\", \"(anonymous namespace)::PrecompilePreambleAction::hasCodeCompletionSupport() const\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumerD1Ev\", \"(anonymous namespace)::PrecompilePreambleConsumer::~PrecompilePreambleConsumer()\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumerD0Ev\", \"(anonymous namespace)::PrecompilePreambleConsumer::~PrecompilePreambleConsumer()\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumer18HandleTopLevelDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::PrecompilePreambleConsumer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumer21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::PrecompilePreambleConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumer27GetASTSerializationListenerEv\", \"(anonymous namespace)::PrecompilePreambleConsumer::GetASTSerializationListener()\"},\n    {\"_ZN12_GLOBAL__N_126PrecompilePreambleConsumer28SerializedPreprocessedEntityEPN5clang18PreprocessedEntityEy\", \"(anonymous namespace)::PrecompilePreambleConsumer::SerializedPreprocessedEntity(clang::PreprocessedEntity*, unsigned long long)\"},\n    {\"_ZThn1912_N12_GLOBAL__N_126PrecompilePreambleConsumerD1Ev\", \"non-virtual thunk to (anonymous namespace)::PrecompilePreambleConsumer::~PrecompilePreambleConsumer()\"},\n    {\"_ZThn1912_N12_GLOBAL__N_126PrecompilePreambleConsumerD0Ev\", \"non-virtual thunk to (anonymous namespace)::PrecompilePreambleConsumer::~PrecompilePreambleConsumer()\"},\n    {\"_ZThn1912_N12_GLOBAL__N_126PrecompilePreambleConsumer28SerializedPreprocessedEntityEPN5clang18PreprocessedEntityEy\", \"non-virtual thunk to (anonymous namespace)::PrecompilePreambleConsumer::SerializedPreprocessedEntity(clang::PreprocessedEntity*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_125TopLevelDeclTrackerAction17CreateASTConsumerERN5clang16CompilerInstanceEN4llvm9StringRefE\", \"(anonymous namespace)::TopLevelDeclTrackerAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_125TopLevelDeclTrackerActionD1Ev\", \"(anonymous namespace)::TopLevelDeclTrackerAction::~TopLevelDeclTrackerAction()\"},\n    {\"_ZN12_GLOBAL__N_125TopLevelDeclTrackerActionD0Ev\", \"(anonymous namespace)::TopLevelDeclTrackerAction::~TopLevelDeclTrackerAction()\"},\n    {\"_ZN12_GLOBAL__N_125TopLevelDeclTrackerAction27usesCompleteTranslationUnitEv\", \"(anonymous namespace)::TopLevelDeclTrackerAction::usesCompleteTranslationUnit()\"},\n    {\"_ZNK12_GLOBAL__N_125TopLevelDeclTrackerAction24hasCodeCompletionSupportEv\", \"(anonymous namespace)::TopLevelDeclTrackerAction::hasCodeCompletionSupport() const\"},\n    {\"_ZN12_GLOBAL__N_127TopLevelDeclTrackerConsumerD1Ev\", \"(anonymous namespace)::TopLevelDeclTrackerConsumer::~TopLevelDeclTrackerConsumer()\"},\n    {\"_ZN12_GLOBAL__N_127TopLevelDeclTrackerConsumerD0Ev\", \"(anonymous namespace)::TopLevelDeclTrackerConsumer::~TopLevelDeclTrackerConsumer()\"},\n    {\"_ZN12_GLOBAL__N_127TopLevelDeclTrackerConsumer18HandleTopLevelDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::TopLevelDeclTrackerConsumer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_127TopLevelDeclTrackerConsumer21HandleInterestingDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::TopLevelDeclTrackerConsumer::HandleInterestingDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollectorD1Ev\", \"(anonymous namespace)::ASTInfoCollector::~ASTInfoCollector()\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollectorD0Ev\", \"(anonymous namespace)::ASTInfoCollector::~ASTInfoCollector()\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollector19ReadLanguageOptionsERKN5clang11LangOptionsE\", \"(anonymous namespace)::ASTInfoCollector::ReadLanguageOptions(clang::LangOptions const&)\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollector16ReadTargetTripleEN4llvm9StringRefE\", \"(anonymous namespace)::ASTInfoCollector::ReadTargetTriple(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollector20ReadPredefinesBufferERKN4llvm11SmallVectorIN5clang18PCHPredefinesBlockELj2EEENS1_9StringRefERSs\", \"(anonymous namespace)::ASTInfoCollector::ReadPredefinesBuffer(llvm::SmallVector<clang::PCHPredefinesBlock, 2u> const&, llvm::StringRef, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollector18ReadHeaderFileInfoERKN5clang14HeaderFileInfoEj\", \"(anonymous namespace)::ASTInfoCollector::ReadHeaderFileInfo(clang::HeaderFileInfo const&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116ASTInfoCollector11ReadCounterEj\", \"(anonymous namespace)::ASTInfoCollector::ReadCounter(unsigned int)\"},\n    {\"_ZN5clang19PreprocessorOptions15addRemappedFileEN4llvm9StringRefEPKNS1_12MemoryBufferE\", \"clang::PreprocessorOptions::addRemappedFile(llvm::StringRef, llvm::MemoryBuffer const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKcE6insertIPS2_EES5_S5_T_S6_\", \"char const** llvm::SmallVectorImpl<char const*>::insert<char const**>(char const**, char const**, char const**)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang16StoredDiagnosticEE4swapERS3_\", \"llvm::SmallVectorImpl<clang::StoredDiagnostic>::swap(llvm::SmallVectorImpl<clang::StoredDiagnostic>&)\"},\n    {\"_ZN5clang11LangOptionsaSERKS0_\", \"clang::LangOptions::operator=(clang::LangOptions const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang16StoredDiagnosticEE6insertIPS2_EES5_S5_T_S6_\", \"clang::StoredDiagnostic* llvm::SmallVectorImpl<clang::StoredDiagnostic>::insert<clang::StoredDiagnostic*>(clang::StoredDiagnostic*, clang::StoredDiagnostic*, clang::StoredDiagnostic*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang16StoredDiagnosticEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::StoredDiagnostic>::push_back(clang::StoredDiagnostic const&)\"},\n    {\"_ZN5clang9ASTWriterD1Ev\", \"clang::ASTWriter::~ASTWriter()\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang16StoredDiagnosticEE6appendIPS2_EEvT_S6_\", \"void llvm::SmallVectorImpl<clang::StoredDiagnostic>::append<clang::StoredDiagnostic*>(clang::StoredDiagnostic*, clang::StoredDiagnostic*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang16StoredDiagnosticELb0EE18uninitialized_copyIPS2_S5_EEvT_S6_T0_\", \"void llvm::SmallVectorTemplateBase<clang::StoredDiagnostic, false>::uninitialized_copy<clang::StoredDiagnostic*, clang::StoredDiagnostic*>(clang::StoredDiagnostic*, clang::StoredDiagnostic*, clang::StoredDiagnostic*)\"},\n    {\"_ZNSt6vectorIN5clang15CharSourceRangeESaIS1_EEaSERKS3_\", \"std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> >::operator=(std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> > const&)\"},\n    {\"_ZNSt6vectorIN5clang9FixItHintESaIS1_EEaSERKS3_\", \"std::vector<clang::FixItHint, std::allocator<clang::FixItHint> >::operator=(std::vector<clang::FixItHint, std::allocator<clang::FixItHint> > const&)\"},\n    {\"_ZNSt6vectorIN5clang9FixItHintESaIS1_EEC2ERKS3_\", \"std::vector<clang::FixItHint, std::allocator<clang::FixItHint> >::vector(std::vector<clang::FixItHint, std::allocator<clang::FixItHint> > const&)\"},\n    {\"_ZNSt6vectorIN5clang15CharSourceRangeESaIS1_EEC2ERKS3_\", \"std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> >::vector(std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> > const&)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPN5clang16StoredDiagnosticES5_EET0_T_S7_S6_\", \"clang::StoredDiagnostic* std::__copy<false, std::random_access_iterator_tag>::copy<clang::StoredDiagnostic*, clang::StoredDiagnostic*>(clang::StoredDiagnostic*, clang::StoredDiagnostic*, clang::StoredDiagnostic*)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN5clang16StoredDiagnosticES5_EET0_T_S7_S6_\", \"clang::StoredDiagnostic* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<clang::StoredDiagnostic*, clang::StoredDiagnostic*>(clang::StoredDiagnostic*, clang::StoredDiagnostic*, clang::StoredDiagnostic*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang16StoredDiagnosticELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::StoredDiagnostic, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIPN5clang18PreprocessedEntityESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS2_S4_EEEEvS9_T_SA_St20forward_iterator_tag\", \"void std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> >::_M_range_insert<__gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > > >(__gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, __gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, __gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, std::forward_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN5clang18PreprocessedEntityESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, clang::PreprocessedEntity* const&)\"},\n    {\"_ZNSt6vectorIPN5clang4DeclESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS2_S4_EEEEvS9_T_SA_St20forward_iterator_tag\", \"void std::vector<clang::Decl*, std::allocator<clang::Decl*> >::_M_range_insert<__gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > > >(__gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > >, __gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > >, __gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > >, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm9StringMapISt4pairIxlENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<std::pair<long long, long> >& llvm::StringMap<std::pair<long long, long>, llvm::MallocAllocator>::GetOrCreateValue<std::pair<long long, long> >(llvm::StringRef, std::pair<long long, long>)\"},\n    {\"_ZNSt8_Rb_treeIN5clang6FileIDESt4pairIKS1_St6vectorIPNS0_18PreprocessedEntityESaIS6_EEESt10_Select1stIS9_ESt4lessIS1_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<clang::FileID, std::pair<clang::FileID const, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, std::_Select1st<std::pair<clang::FileID const, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > > >, std::less<clang::FileID>, std::allocator<std::pair<clang::FileID const, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::FileID const, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > > >*)\"},\n    {\"_ZNSt6vectorIN5clang7ASTUnit26CachedCodeCompletionResultESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::ASTUnit::CachedCodeCompletionResult, std::allocator<clang::ASTUnit::CachedCodeCompletionResult> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ASTUnit::CachedCodeCompletionResult*, std::vector<clang::ASTUnit::CachedCodeCompletionResult, std::allocator<clang::ASTUnit::CachedCodeCompletionResult> > >, clang::ASTUnit::CachedCodeCompletionResult const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CanQualINS1_4TypeEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::CanQual<clang::Type>, unsigned int, llvm::DenseMapInfo<clang::CanQual<clang::Type> >, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::CanQual<clang::Type> const&, unsigned int const&, std::pair<clang::CanQual<clang::Type>, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CanQualINS1_4TypeEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::CanQual<clang::Type>, unsigned int, llvm::DenseMapInfo<clang::CanQual<clang::Type> >, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN5clang4DeclESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::Decl*, std::allocator<clang::Decl*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > >, clang::Decl* const&)\"},\n    {\"_ZN4llvm15BitstreamWriterD2Ev\", \"llvm::BitstreamWriter::~BitstreamWriter()\"},\n    {\"_ZThn8_N5clang9ASTWriterD1Ev\", \"non-virtual thunk to clang::ASTWriter::~ASTWriter()\"},\n    {\"_ZN5clang9ASTWriterD2Ev\", \"clang::ASTWriter::~ASTWriter()\"},\n    {\"_ZN5clang9ASTWriterD0Ev\", \"clang::ASTWriter::~ASTWriter()\"},\n    {\"_ZThn8_N5clang9ASTWriterD0Ev\", \"non-virtual thunk to clang::ASTWriter::~ASTWriter()\"},\n    {\"_ZNSt8_Rb_treeIPN5clang10SwitchCaseESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::SwitchCase*, std::pair<clang::SwitchCase* const, unsigned int>, std::_Select1st<std::pair<clang::SwitchCase* const, unsigned int> >, std::less<clang::SwitchCase*>, std::allocator<std::pair<clang::SwitchCase* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::SwitchCase* const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang9LabelStmtESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::LabelStmt*, std::pair<clang::LabelStmt* const, unsigned int>, std::_Select1st<std::pair<clang::LabelStmt* const, unsigned int> >, std::less<clang::LabelStmt*>, std::allocator<std::pair<clang::LabelStmt* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::LabelStmt* const, unsigned int> >*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang20CodeCompletionResultEE6insertIPS2_EES5_S5_T_S6_\", \"clang::CodeCompletionResult* llvm::SmallVectorImpl<clang::CodeCompletionResult>::insert<clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang20CodeCompletionResultELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeCompletionResult, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang20CodeCompletionString5ChunkELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeCompletionString::Chunk, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm9StringSetINS_16BumpPtrAllocatorEE6insertENS_9StringRefE\", \"llvm::StringSet<llvm::BumpPtrAllocator>::insert(llvm::StringRef)\"},\n    {\"_ZNSt6vectorISt4pairISsSsESaIS1_EE5clearEv\", \"std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > >::clear()\"},\n    {\"_ZN5clang18CompilerInvocationC2ERKS0_\", \"clang::CompilerInvocation::CompilerInvocation(clang::CompilerInvocation const&)\"},\n    {\"_ZN5clang19PreprocessorOptionsC2ERKS0_\", \"clang::PreprocessorOptions::PreprocessorOptions(clang::PreprocessorOptions const&)\"},\n    {\"_ZNSt6vectorISt4pairISsPKN4llvm12MemoryBufferEESaIS5_EEC2ERKS7_\", \"std::vector<std::pair<std::string, llvm::MemoryBuffer const*>, std::allocator<std::pair<std::string, llvm::MemoryBuffer const*> > >::vector(std::vector<std::pair<std::string, llvm::MemoryBuffer const*>, std::allocator<std::pair<std::string, llvm::MemoryBuffer const*> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairISsSsESaIS1_EEC2ERKS3_\", \"std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > >::vector(std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairISsbESaIS1_EEC2ERKS3_\", \"std::vector<std::pair<std::string, bool>, std::allocator<std::pair<std::string, bool> > >::vector(std::vector<std::pair<std::string, bool>, std::allocator<std::pair<std::string, bool> > > const&)\"},\n    {\"_ZNSt6vectorIN5clang19HeaderSearchOptions5EntryESaIS2_EEC2ERKS4_\", \"std::vector<clang::HeaderSearchOptions::Entry, std::allocator<clang::HeaderSearchOptions::Entry> >::vector(std::vector<clang::HeaderSearchOptions::Entry, std::allocator<clang::HeaderSearchOptions::Entry> > const&)\"},\n    {\"_ZN5clang15FrontendOptionsC2ERKS0_\", \"clang::FrontendOptions::FrontendOptions(clang::FrontendOptions const&)\"},\n    {\"_ZNSt6vectorIS_ISsSaISsEESaIS1_EEC2ERKS3_\", \"std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >::vector(std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIN5clang9InputKindESsESaIS3_EEC2ERKS5_\", \"std::vector<std::pair<clang::InputKind, std::string>, std::allocator<std::pair<clang::InputKind, std::string> > >::vector(std::vector<std::pair<clang::InputKind, std::string>, std::allocator<std::pair<clang::InputKind, std::string> > > const&)\"},\n    {\"_ZN5clang17DiagnosticOptionsC2ERKS0_\", \"clang::DiagnosticOptions::DiagnosticOptions(clang::DiagnosticOptions const&)\"},\n    {\"_ZN5clang14CodeGenOptionsC2ERKS0_\", \"clang::CodeGenOptions::CodeGenOptions(clang::CodeGenOptions const&)\"},\n    {\"_ZN5clang15AnalyzerOptionsC2ERKS0_\", \"clang::AnalyzerOptions::AnalyzerOptions(clang::AnalyzerOptions const&)\"},\n    {\"_ZNSt6vectorIN5clang8AnalysesESaIS1_EEC2ERKS3_\", \"std::vector<clang::Analyses, std::allocator<clang::Analyses> >::vector(std::vector<clang::Analyses, std::allocator<clang::Analyses> > const&)\"},\n    {\"_ZN5clang12PCHGenerator14InitializeSemaERNS_4SemaE\", \"clang::PCHGenerator::InitializeSema(clang::Sema&)\"},\n    {\"_ZNSt6vectorIySaIyEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPyS1_EERKy\", \"std::vector<unsigned long long, std::allocator<unsigned long long> >::_M_insert_aux(__gnu_cxx::__normal_iterator<unsigned long long*, std::vector<unsigned long long, std::allocator<unsigned long long> > >, unsigned long long const&)\"},\n    {\"_ZN5clang12PCHGeneratorD1Ev\", \"clang::PCHGenerator::~PCHGenerator()\"},\n    {\"_ZN5clang12PCHGeneratorD0Ev\", \"clang::PCHGenerator::~PCHGenerator()\"},\n    {\"_ZNSt6vectorISt4pairISsPKN4llvm12MemoryBufferEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<std::string, llvm::MemoryBuffer const*>, std::allocator<std::pair<std::string, llvm::MemoryBuffer const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<std::string, llvm::MemoryBuffer const*>*, std::vector<std::pair<std::string, llvm::MemoryBuffer const*>, std::allocator<std::pair<std::string, llvm::MemoryBuffer const*> > > >, std::pair<std::string, llvm::MemoryBuffer const*> const&)\"},\n    {\"_ZN5clang14BoostConAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::BoostConAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_119BoostConASTConsumerD1Ev\", \"(anonymous namespace)::BoostConASTConsumer::~BoostConASTConsumer()\"},\n    {\"_ZN12_GLOBAL__N_119BoostConASTConsumerD0Ev\", \"(anonymous namespace)::BoostConASTConsumer::~BoostConASTConsumer()\"},\n    {\"_ZN12_GLOBAL__N_119BoostConASTConsumer21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::BoostConASTConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE12TraverseDeclEPNS_4DeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseDecl(clang::Decl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE12TraverseStmtEPNS_4StmtE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseStmt(clang::Stmt*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE15TraverseTypeLocENS_7TypeLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseTypeLoc(clang::TypeLoc)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE27TraverseNestedNameSpecifierEPNS_19NestedNameSpecifierE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseNestedNameSpecifier(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE27TraverseTemplateArgumentLocERKNS_19TemplateArgumentLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseTemplateArgumentLoc(clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE24TraverseTemplateArgumentERKNS_16TemplateArgumentE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE12TraverseTypeENS_8QualTypeE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseType(clang::QualType)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE24TraverseDeclaratorHelperEPNS_14DeclaratorDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseDeclaratorHelper(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE22TraverseFunctionHelperEPNS_12FunctionDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseFunctionHelper(clang::FunctionDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE23TraverseCXXRecordHelperEPNS_13CXXRecordDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::TraverseCXXRecordHelper(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119BoostConASTConsumerEE23WalkUpFromCXXRecordDeclEPNS_13CXXRecordDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::BoostConASTConsumer>::WalkUpFromCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang14BoostConActionD1Ev\", \"clang::BoostConAction::~BoostConAction()\"},\n    {\"_ZN5clang14BoostConActionD0Ev\", \"clang::BoostConAction::~BoostConAction()\"},\n    {\"_ZNK5clang38DependentTemplateSpecializationTypeLoc9getArgLocEj\", \"clang::DependentTemplateSpecializationTypeLoc::getArgLoc(unsigned int) const\"},\n    {\"_ZNK5clang29TemplateSpecializationTypeLoc9getArgLocEj\", \"clang::TemplateSpecializationTypeLoc::getArgLoc(unsigned int) const\"},\n    {\"_ZN5clang11CacheTokensERNS_12PreprocessorEPN4llvm14raw_fd_ostreamE\", \"clang::CacheTokens(clang::Preprocessor&, llvm::raw_fd_ostream*)\"},\n    {\"_ZN5clang31OnDiskChainedHashTableGeneratorIN12_GLOBAL__N_121FileEntryPTHEntryInfoEE6insertENS1_18PTHEntryKeyVariantERKNS1_8PTHEntryE\", \"clang::OnDiskChainedHashTableGenerator<(anonymous namespace)::FileEntryPTHEntryInfo>::insert((anonymous namespace)::PTHEntryKeyVariant, (anonymous namespace)::PTHEntry const&)\"},\n    {\"_ZN12_GLOBAL__N_19PTHWriter9EmitTokenERKN5clang5TokenE\", \"(anonymous namespace)::PTHWriter::EmitToken(clang::Token const&)\"},\n    {\"_ZN12_GLOBAL__N_112StatListenerD1Ev\", \"(anonymous namespace)::StatListener::~StatListener()\"},\n    {\"_ZN12_GLOBAL__N_112StatListenerD0Ev\", \"(anonymous namespace)::StatListener::~StatListener()\"},\n    {\"_ZN12_GLOBAL__N_112StatListener7getStatEPKcR4statPi\", \"(anonymous namespace)::StatListener::getStat(char const*, stat&, int*)\"},\n    {\"_ZN5clang2io6Emit32ERN4llvm11raw_ostreamEj\", \"clang::io::Emit32(llvm::raw_ostream&, unsigned int)\"},\n    {\"_ZN5clang2io6Emit64ERN4llvm11raw_ostreamEy\", \"clang::io::Emit64(llvm::raw_ostream&, unsigned long long)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14IdentifierInfoEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::IdentifierInfo const*, unsigned int, llvm::DenseMapInfo<clang::IdentifierInfo const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::IdentifierInfo const* const&, unsigned int const&, std::pair<clang::IdentifierInfo const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14IdentifierInfoEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo const*, unsigned int, llvm::DenseMapInfo<clang::IdentifierInfo const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang16CompilerInstanceC1Ev\", \"clang::CompilerInstance::CompilerInstance()\"},\n    {\"_ZN5clang16CompilerInstanceC2Ev\", \"clang::CompilerInstance::CompilerInstance()\"},\n    {\"_ZN5clang16CompilerInstanceD1Ev\", \"clang::CompilerInstance::~CompilerInstance()\"},\n    {\"_ZN5clang16CompilerInstanceD2Ev\", \"clang::CompilerInstance::~CompilerInstance()\"},\n    {\"_ZN5clang16CompilerInstance14setLLVMContextEPN4llvm11LLVMContextE\", \"clang::CompilerInstance::setLLVMContext(llvm::LLVMContext*)\"},\n    {\"_ZN5clang16CompilerInstance13setInvocationEPNS_18CompilerInvocationE\", \"clang::CompilerInstance::setInvocation(clang::CompilerInvocation*)\"},\n    {\"_ZN5clang16CompilerInstance14setDiagnosticsEPNS_10DiagnosticE\", \"clang::CompilerInstance::setDiagnostics(clang::Diagnostic*)\"},\n    {\"_ZN5clang16CompilerInstance9setTargetEPNS_10TargetInfoE\", \"clang::CompilerInstance::setTarget(clang::TargetInfo*)\"},\n    {\"_ZN5clang16CompilerInstance14setFileManagerEPNS_11FileManagerE\", \"clang::CompilerInstance::setFileManager(clang::FileManager*)\"},\n    {\"_ZN5clang16CompilerInstance16setSourceManagerEPNS_13SourceManagerE\", \"clang::CompilerInstance::setSourceManager(clang::SourceManager*)\"},\n    {\"_ZN5clang16CompilerInstance15setPreprocessorEPNS_12PreprocessorE\", \"clang::CompilerInstance::setPreprocessor(clang::Preprocessor*)\"},\n    {\"_ZN5clang16CompilerInstance13setASTContextEPNS_10ASTContextE\", \"clang::CompilerInstance::setASTContext(clang::ASTContext*)\"},\n    {\"_ZN5clang16CompilerInstance7setSemaEPNS_4SemaE\", \"clang::CompilerInstance::setSema(clang::Sema*)\"},\n    {\"_ZN5clang16CompilerInstance14setASTConsumerEPNS_11ASTConsumerE\", \"clang::CompilerInstance::setASTConsumer(clang::ASTConsumer*)\"},\n    {\"_ZN5clang16CompilerInstance25setCodeCompletionConsumerEPNS_20CodeCompleteConsumerE\", \"clang::CompilerInstance::setCodeCompletionConsumer(clang::CodeCompleteConsumer*)\"},\n    {\"_ZN5clang16CompilerInstance17createDiagnosticsEiPKPKcPNS_16DiagnosticClientE\", \"clang::CompilerInstance::createDiagnostics(int, char const* const*, clang::DiagnosticClient*)\"},\n    {\"_ZN5clang16CompilerInstance17createDiagnosticsERKNS_17DiagnosticOptionsEiPKPKcPNS_16DiagnosticClientE\", \"clang::CompilerInstance::createDiagnostics(clang::DiagnosticOptions const&, int, char const* const*, clang::DiagnosticClient*)\"},\n    {\"_ZN5clang16CompilerInstance17createFileManagerEv\", \"clang::CompilerInstance::createFileManager()\"},\n    {\"_ZN5clang16CompilerInstance19createSourceManagerERNS_11FileManagerE\", \"clang::CompilerInstance::createSourceManager(clang::FileManager&)\"},\n    {\"_ZN5clang16CompilerInstance18createPreprocessorEv\", \"clang::CompilerInstance::createPreprocessor()\"},\n    {\"_ZN5clang16CompilerInstance18createPreprocessorERNS_10DiagnosticERKNS_11LangOptionsERKNS_19PreprocessorOptionsERKNS_19HeaderSearchOptionsERKNS_23DependencyOutputOptionsERKNS_10TargetInfoERKNS_15FrontendOptionsERNS_13SourceManagerERNS_11FileManagerE\", \"clang::CompilerInstance::createPreprocessor(clang::Diagnostic&, clang::LangOptions const&, clang::PreprocessorOptions const&, clang::HeaderSearchOptions const&, clang::DependencyOutputOptions const&, clang::TargetInfo const&, clang::FrontendOptions const&, clang::SourceManager&, clang::FileManager&)\"},\n    {\"_ZN5clang16CompilerInstance16createASTContextEv\", \"clang::CompilerInstance::createASTContext()\"},\n    {\"_ZN5clang16CompilerInstance26createPCHExternalASTSourceEN4llvm9StringRefEbbPv\", \"clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, bool, bool, void*)\"},\n    {\"_ZN5clang16CompilerInstance26createPCHExternalASTSourceEN4llvm9StringRefERKSsbbRNS_12PreprocessorERNS_10ASTContextEPvb\", \"clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, std::string const&, bool, bool, clang::Preprocessor&, clang::ASTContext&, void*, bool)\"},\n    {\"_ZN5clang16CompilerInstance28createCodeCompletionConsumerEv\", \"clang::CompilerInstance::createCodeCompletionConsumer()\"},\n    {\"_ZN5clang16CompilerInstance28createCodeCompletionConsumerERNS_12PreprocessorERKSsjjbbbRN4llvm11raw_ostreamE\", \"clang::CompilerInstance::createCodeCompletionConsumer(clang::Preprocessor&, std::string const&, unsigned int, unsigned int, bool, bool, bool, llvm::raw_ostream&)\"},\n    {\"_Z20EnableCodeCompletionRN5clang12PreprocessorERKSsjj\", \"EnableCodeCompletion(clang::Preprocessor&, std::string const&, unsigned int, unsigned int)\"},\n    {\"_ZN5clang16CompilerInstance19createFrontendTimerEv\", \"clang::CompilerInstance::createFrontendTimer()\"},\n    {\"_ZN5clang16CompilerInstance10createSemaEbPNS_20CodeCompleteConsumerE\", \"clang::CompilerInstance::createSema(bool, clang::CodeCompleteConsumer*)\"},\n    {\"_ZN5clang16CompilerInstance13addOutputFileERKNS0_10OutputFileE\", \"clang::CompilerInstance::addOutputFile(clang::CompilerInstance::OutputFile const&)\"},\n    {\"_ZN5clang16CompilerInstance16clearOutputFilesEb\", \"clang::CompilerInstance::clearOutputFiles(bool)\"},\n    {\"_ZN5clang16CompilerInstance23createDefaultOutputFileEbN4llvm9StringRefES2_\", \"clang::CompilerInstance::createDefaultOutputFile(bool, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang16CompilerInstance16createOutputFileEN4llvm9StringRefEbbS2_S2_\", \"clang::CompilerInstance::createOutputFile(llvm::StringRef, bool, bool, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang16CompilerInstance16createOutputFileEN4llvm9StringRefERSsbbS2_S2_PSsS4_\", \"clang::CompilerInstance::createOutputFile(llvm::StringRef, std::string&, bool, bool, llvm::StringRef, llvm::StringRef, std::string*, std::string*)\"},\n    {\"_ZN5clang16CompilerInstance23InitializeSourceManagerEN4llvm9StringRefE\", \"clang::CompilerInstance::InitializeSourceManager(llvm::StringRef)\"},\n    {\"_ZN5clang16CompilerInstance23InitializeSourceManagerEN4llvm9StringRefERNS_10DiagnosticERNS_11FileManagerERNS_13SourceManagerERKNS_15FrontendOptionsE\", \"clang::CompilerInstance::InitializeSourceManager(llvm::StringRef, clang::Diagnostic&, clang::FileManager&, clang::SourceManager&, clang::FrontendOptions const&)\"},\n    {\"_ZN5clang16CompilerInstance13ExecuteActionERNS_14FrontendActionE\", \"clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)\"},\n    {\"_ZNSt10_List_baseIN5clang16CompilerInstance10OutputFileESaIS2_EE8_M_clearEv\", \"std::_List_base<clang::CompilerInstance::OutputFile, std::allocator<clang::CompilerInstance::OutputFile> >::_M_clear()\"},\n    {\"_ZN5clang28PrintingCodeCompleteConsumer12getAllocatorEv\", \"clang::PrintingCodeCompleteConsumer::getAllocator()\"},\n    {\"_ZN5clang20CodeCompleteConsumer26ProcessCodeCompleteResultsERNS_4SemaENS_21CodeCompletionContextEPNS_20CodeCompletionResultEj\", \"clang::CodeCompleteConsumer::ProcessCodeCompleteResults(clang::Sema&, clang::CodeCompletionContext, clang::CodeCompletionResult*, unsigned int)\"},\n    {\"_ZN5clang20CodeCompleteConsumer25ProcessOverloadCandidatesERNS_4SemaEjPNS0_17OverloadCandidateEj\", \"clang::CodeCompleteConsumer::ProcessOverloadCandidates(clang::Sema&, unsigned int, clang::CodeCompleteConsumer::OverloadCandidate*, unsigned int)\"},\n    {\"_ZN5clang23ChainedDiagnosticClientD1Ev\", \"clang::ChainedDiagnosticClient::~ChainedDiagnosticClient()\"},\n    {\"_ZN5clang23ChainedDiagnosticClientD0Ev\", \"clang::ChainedDiagnosticClient::~ChainedDiagnosticClient()\"},\n    {\"_ZN5clang23ChainedDiagnosticClient15BeginSourceFileERKNS_11LangOptionsEPKNS_12PreprocessorE\", \"clang::ChainedDiagnosticClient::BeginSourceFile(clang::LangOptions const&, clang::Preprocessor const*)\"},\n    {\"_ZN5clang23ChainedDiagnosticClient13EndSourceFileEv\", \"clang::ChainedDiagnosticClient::EndSourceFile()\"},\n    {\"_ZNK5clang23ChainedDiagnosticClient25IncludeInDiagnosticCountsEv\", \"clang::ChainedDiagnosticClient::IncludeInDiagnosticCounts() const\"},\n    {\"_ZN5clang23ChainedDiagnosticClient16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::ChainedDiagnosticClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN5clang18CompilerInvocation6toArgsERSt6vectorISsSaISsEE\", \"clang::CompilerInvocation::toArgs(std::vector<std::string, std::allocator<std::string> >&)\"},\n    {\"_ZN5clang18CompilerInvocation16GetResourcesPathEPKcPv\", \"clang::CompilerInvocation::GetResourcesPath(char const*, void*)\"},\n    {\"_ZN5clang18CompilerInvocation15setLangDefaultsERNS_11LangOptionsENS_9InputKindENS_12LangStandard4KindE\", \"clang::CompilerInvocation::setLangDefaults(clang::LangOptions&, clang::InputKind, clang::LangStandard::Kind)\"},\n    {\"_ZN5clang18CompilerInvocation14CreateFromArgsERS0_PKPKcS5_RNS_10DiagnosticE\", \"clang::CompilerInvocation::CreateFromArgs(clang::CompilerInvocation&, char const* const*, char const* const*, clang::Diagnostic&)\"},\n    {\"_ZN5clang19PreprocessorOptions11addMacroDefEN4llvm9StringRefE\", \"clang::PreprocessorOptions::addMacroDef(llvm::StringRef)\"},\n    {\"_ZN5clang19PreprocessorOptions13addMacroUndefEN4llvm9StringRefE\", \"clang::PreprocessorOptions::addMacroUndef(llvm::StringRef)\"},\n    {\"_ZN5clang19PreprocessorOptions15addRemappedFileEN4llvm9StringRefES2_\", \"clang::PreprocessorOptions::addRemappedFile(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNSt6vectorISt4pairISsSsESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<std::string, std::string>*, std::vector<std::pair<std::string, std::string>, std::allocator<std::pair<std::string, std::string> > > >, std::pair<std::string, std::string> const&)\"},\n    {\"_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs\", \"std::vector<std::string, std::allocator<std::string> >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, std::string const&)\"},\n    {\"_ZNSt6vectorISt4pairISsbESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<std::string, bool>, std::allocator<std::pair<std::string, bool> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<std::string, bool>*, std::vector<std::pair<std::string, bool>, std::allocator<std::pair<std::string, bool> > > >, std::pair<std::string, bool> const&)\"},\n    {\"_ZN5clang19HeaderSearchOptions7AddPathEN4llvm9StringRefENS_8frontend15IncludeDirGroupEbbb\", \"clang::HeaderSearchOptions::AddPath(llvm::StringRef, clang::frontend::IncludeDirGroup, bool, bool, bool)\"},\n    {\"_ZNSt6vectorIN5clang19HeaderSearchOptions5EntryESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::HeaderSearchOptions::Entry, std::allocator<clang::HeaderSearchOptions::Entry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::HeaderSearchOptions::Entry*, std::vector<clang::HeaderSearchOptions::Entry, std::allocator<clang::HeaderSearchOptions::Entry> > >, clang::HeaderSearchOptions::Entry const&)\"},\n    {\"_ZN5clang20ParsedSourceLocation10FromStringEN4llvm9StringRefE\", \"clang::ParsedSourceLocation::FromString(llvm::StringRef)\"},\n    {\"_ZNSt6vectorISt4pairIN5clang9InputKindESsESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<clang::InputKind, std::string>, std::allocator<std::pair<clang::InputKind, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::InputKind, std::string>*, std::vector<std::pair<clang::InputKind, std::string>, std::allocator<std::pair<clang::InputKind, std::string> > > >, std::pair<clang::InputKind, std::string> const&)\"},\n    {\"_ZNSt6vectorIS_ISsSaISsEESaIS1_EE15_M_erase_at_endEPS1_\", \"std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >::_M_erase_at_end(std::vector<std::string, std::allocator<std::string> >*)\"},\n    {\"_ZNSt6vectorIS_ISsSaISsEESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::vector<std::string, std::allocator<std::string> >*, std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > > >, unsigned long, std::vector<std::string, std::allocator<std::string> > const&)\"},\n    {\"_ZNSt6vectorISsSaISsEEC2ERKS1_\", \"std::vector<std::string, std::allocator<std::string> >::vector(std::vector<std::string, std::allocator<std::string> > const&)\"},\n    {\"_ZNSt6vectorIN5clang8AnalysesESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::Analyses, std::allocator<clang::Analyses> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Analyses*, std::vector<clang::Analyses, std::allocator<clang::Analyses> > >, clang::Analyses const&)\"},\n    {\"_ZN5clang11DocumentXML14writeDeclToXMLEPNS_4DeclE\", \"clang::DocumentXML::writeDeclToXML(clang::Decl*)\"},\n    {\"_ZN5clang11DeclVisitorINS_11DocumentXML11DeclPrinterEvE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<clang::DocumentXML::DeclPrinter, void>::Visit(clang::Decl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter20VisitLinkageSpecDeclEPNS_15LinkageSpecDeclE\", \"clang::DocumentXML::DeclPrinter::VisitLinkageSpecDecl(clang::LinkageSpecDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter18VisitNamespaceDeclEPNS_13NamespaceDeclE\", \"clang::DocumentXML::DeclPrinter::VisitNamespaceDecl(clang::NamespaceDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter23VisitNamespaceAliasDeclEPNS_18NamespaceAliasDeclE\", \"clang::DocumentXML::DeclPrinter::VisitNamespaceAliasDecl(clang::NamespaceAliasDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter13VisitEnumDeclEPNS_8EnumDeclE\", \"clang::DocumentXML::DeclPrinter::VisitEnumDecl(clang::EnumDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter15VisitRecordDeclEPNS_10RecordDeclE\", \"clang::DocumentXML::DeclPrinter::VisitRecordDecl(clang::RecordDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter18VisitCXXRecordDeclEPNS_13CXXRecordDeclE\", \"clang::DocumentXML::DeclPrinter::VisitCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter25VisitTemplateTypeParmDeclEPNS_20TemplateTypeParmDeclE\", \"clang::DocumentXML::DeclPrinter::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter16VisitTypedefDeclEPNS_11TypedefDeclE\", \"clang::DocumentXML::DeclPrinter::VisitTypedefDecl(clang::TypedefDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter14VisitUsingDeclEPNS_9UsingDeclE\", \"clang::DocumentXML::DeclPrinter::VisitUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter23VisitUsingDirectiveDeclEPNS_18UsingDirectiveDeclE\", \"clang::DocumentXML::DeclPrinter::VisitUsingDirectiveDecl(clang::UsingDirectiveDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter20VisitUsingShadowDeclEPNS_15UsingShadowDeclE\", \"clang::DocumentXML::DeclPrinter::VisitUsingShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter14VisitFieldDeclEPNS_9FieldDeclE\", \"clang::DocumentXML::DeclPrinter::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter17VisitFunctionDeclEPNS_12FunctionDeclE\", \"clang::DocumentXML::DeclPrinter::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter18VisitCXXMethodDeclEPNS_13CXXMethodDeclE\", \"clang::DocumentXML::DeclPrinter::VisitCXXMethodDecl(clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter23VisitCXXConstructorDeclEPNS_18CXXConstructorDeclE\", \"clang::DocumentXML::DeclPrinter::VisitCXXConstructorDecl(clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter22VisitCXXConversionDeclEPNS_17CXXConversionDeclE\", \"clang::DocumentXML::DeclPrinter::VisitCXXConversionDecl(clang::CXXConversionDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter22VisitCXXDestructorDeclEPNS_17CXXDestructorDeclE\", \"clang::DocumentXML::DeclPrinter::VisitCXXDestructorDecl(clang::CXXDestructorDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter12VisitVarDeclEPNS_7VarDeclE\", \"clang::DocumentXML::DeclPrinter::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter16VisitParmVarDeclEPNS_11ParmVarDeclE\", \"clang::DocumentXML::DeclPrinter::VisitParmVarDecl(clang::ParmVarDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter21VisitEnumConstantDeclEPNS_16EnumConstantDeclE\", \"clang::DocumentXML::DeclPrinter::VisitEnumConstantDecl(clang::EnumConstantDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter9VisitDeclEPNS_4DeclE\", \"clang::DocumentXML::DeclPrinter::VisitDecl(clang::Decl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter15addFunctionBodyEPNS_12FunctionDeclE\", \"clang::DocumentXML::DeclPrinter::addFunctionBody(clang::FunctionDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter11addSubNodesEPNS_13CXXRecordDeclE\", \"clang::DocumentXML::DeclPrinter::addSubNodes(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter11addSubNodesEPNS_10RecordDeclE\", \"clang::DocumentXML::DeclPrinter::addSubNodes(clang::RecordDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter11addSubNodesEPNS_8EnumDeclE\", \"clang::DocumentXML::DeclPrinter::addSubNodes(clang::EnumDecl*)\"},\n    {\"_ZN5clang11DocumentXML11DeclPrinter17VisitTemplateDeclEPNS_12TemplateDeclE\", \"clang::DocumentXML::DeclPrinter::VisitTemplateDecl(clang::TemplateDecl*)\"},\n    {\"_ZN5clang23AttachDependencyFileGenERNS_12PreprocessorERKNS_23DependencyOutputOptionsE\", \"clang::AttachDependencyFileGen(clang::Preprocessor&, clang::DependencyOutputOptions const&)\"},\n    {\"_ZN12_GLOBAL__N_122DependencyFileCallbackD1Ev\", \"(anonymous namespace)::DependencyFileCallback::~DependencyFileCallback()\"},\n    {\"_ZN12_GLOBAL__N_122DependencyFileCallbackD0Ev\", \"(anonymous namespace)::DependencyFileCallback::~DependencyFileCallback()\"},\n    {\"_ZN12_GLOBAL__N_122DependencyFileCallback11FileChangedEN5clang14SourceLocationENS1_11PPCallbacks16FileChangeReasonENS1_6SrcMgr18CharacteristicKindE\", \"(anonymous namespace)::DependencyFileCallback::FileChanged(clang::SourceLocation, clang::PPCallbacks::FileChangeReason, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN12_GLOBAL__N_122DependencyFileCallback13EndOfMainFileEv\", \"(anonymous namespace)::DependencyFileCallback::EndOfMainFile()\"},\n    {\"_ZN5clang11DocumentXMLC1ERKSsRN4llvm11raw_ostreamE\", \"clang::DocumentXML::DocumentXML(std::string const&, llvm::raw_ostream&)\"},\n    {\"_ZN5clang11DocumentXMLC2ERKSsRN4llvm11raw_ostreamE\", \"clang::DocumentXML::DocumentXML(std::string const&, llvm::raw_ostream&)\"},\n    {\"_ZN5clang11DocumentXML10addSubNodeERKSs\", \"clang::DocumentXML::addSubNode(std::string const&)\"},\n    {\"_ZN5clang11DocumentXML6IndentEv\", \"clang::DocumentXML::Indent()\"},\n    {\"_ZN5clang11DocumentXML8toParentEv\", \"clang::DocumentXML::toParent()\"},\n    {\"_ZN5clang11DocumentXML12escapeStringEPKcm\", \"clang::DocumentXML::escapeString(char const*, unsigned long)\"},\n    {\"_ZN5clang11DocumentXML8finalizeEv\", \"clang::DocumentXML::finalize()\"},\n    {\"_ZN5clang11DocumentXML12addAttributeEPKcRKNS_8QualTypeE\", \"clang::DocumentXML::addAttribute(char const*, clang::QualType const&)\"},\n    {\"_ZN5clang11DocumentXML18addTypeRecursivelyERKNS_8QualTypeE\", \"clang::DocumentXML::addTypeRecursively(clang::QualType const&)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_4TypeE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::Type const*)\"},\n    {\"_ZN5clang11DocumentXML18addTypeRecursivelyEPKNS_4TypeE\", \"clang::DocumentXML::addTypeRecursively(clang::Type const*)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_19NestedNameSpecifierE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::NestedNameSpecifier const*)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_13NamespaceDeclE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::NamespaceDecl const*)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_11DeclContextE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::DeclContext const*)\"},\n    {\"_ZN5clang11DocumentXML22addContextsRecursivelyEPKNS_11DeclContextE\", \"clang::DocumentXML::addContextsRecursively(clang::DeclContext const*)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_9NamedDeclE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::NamedDecl const*)\"},\n    {\"_ZN5clang11DocumentXML22addSourceFileAttributeERKSs\", \"clang::DocumentXML::addSourceFileAttribute(std::string const&)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcPKNS_9LabelStmtE\", \"clang::DocumentXML::addPtrAttribute(char const*, clang::LabelStmt const*)\"},\n    {\"_ZN5clang11DocumentXML11addLocationERKNS_14SourceLocationE\", \"clang::DocumentXML::addLocation(clang::SourceLocation const&)\"},\n    {\"_ZN5clang11DocumentXML16addLocationRangeERKNS_11SourceRangeE\", \"clang::DocumentXML::addLocationRange(clang::SourceRange const&)\"},\n    {\"_ZN5clang11DocumentXML9PrintDeclEPNS_4DeclE\", \"clang::DocumentXML::PrintDecl(clang::Decl*)\"},\n    {\"_ZN5clang11DocumentXML12addAttributeISsEEvPKcRKT_\", \"void clang::DocumentXML::addAttribute<std::string>(char const*, std::string const&)\"},\n    {\"_ZN5clang11DocumentXML15addPtrAttributeEPKcS2_\", \"clang::DocumentXML::addPtrAttribute(char const*, char const*)\"},\n    {\"_ZN5clang11DocumentXML12addAttributeIjEEvPKcRKT_\", \"void clang::DocumentXML::addAttribute<unsigned int>(char const*, unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9LabelStmtEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::LabelStmt const*, unsigned int, llvm::DenseMapInfo<clang::LabelStmt const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::LabelStmt const* const&, unsigned int const&, std::pair<clang::LabelStmt const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9LabelStmtEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::LabelStmt const*, unsigned int, llvm::DenseMapInfo<clang::LabelStmt const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9LabelStmtEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::LabelStmt const*, unsigned int, llvm::DenseMapInfo<clang::LabelStmt const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::LabelStmt const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::DeclContext const*, unsigned int, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::DeclContext const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::DeclContext const*, unsigned int, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::DeclContext const* const&, unsigned int const&, std::pair<clang::DeclContext const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::DeclContext const*, unsigned int, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9NamedDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::NamedDecl const*, unsigned int, llvm::DenseMapInfo<clang::NamedDecl const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::NamedDecl const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::Type const*, unsigned int, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::Type const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::Type const*, unsigned int, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::Type const* const&, unsigned int const&, std::pair<clang::Type const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::Type const*, unsigned int, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_jESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE16_M_insert_uniqueERKS4_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, unsigned int>, std::_Select1st<std::pair<clang::QualType const, unsigned int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, unsigned int> > >::_M_insert_unique(std::pair<clang::QualType const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_jESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS4_ERKS4_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, unsigned int>, std::_Select1st<std::pair<clang::QualType const, unsigned int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::QualType const, unsigned int> >, std::pair<clang::QualType const, unsigned int> const&)\"},\n    {\"_ZNSt5dequeISsSaISsEE8pop_backEv\", \"std::deque<std::string, std::allocator<std::string> >::pop_back()\"},\n    {\"_ZNSt11_Deque_baseISsSaISsEE17_M_initialize_mapEm\", \"std::_Deque_base<std::string, std::allocator<std::string> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeISsSaISsEEC2ERKS1_\", \"std::deque<std::string, std::allocator<std::string> >::deque(std::deque<std::string, std::allocator<std::string> > const&)\"},\n    {\"_ZN5clang14FrontendActionC1Ev\", \"clang::FrontendAction::FrontendAction()\"},\n    {\"_ZN5clang14FrontendActionC2Ev\", \"clang::FrontendAction::FrontendAction()\"},\n    {\"_ZN5clang14FrontendActionD0Ev\", \"clang::FrontendAction::~FrontendAction()\"},\n    {\"_ZN5clang14FrontendActionD1Ev\", \"clang::FrontendAction::~FrontendAction()\"},\n    {\"_ZN5clang14FrontendActionD2Ev\", \"clang::FrontendAction::~FrontendAction()\"},\n    {\"_ZN5clang14FrontendAction14setCurrentFileEN4llvm9StringRefENS_9InputKindEPNS_7ASTUnitE\", \"clang::FrontendAction::setCurrentFile(llvm::StringRef, clang::InputKind, clang::ASTUnit*)\"},\n    {\"_ZN5clang14FrontendAction24CreateWrappedASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::FrontendAction::CreateWrappedASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang14FrontendAction15BeginSourceFileERNS_16CompilerInstanceEN4llvm9StringRefENS_9InputKindE\", \"clang::FrontendAction::BeginSourceFile(clang::CompilerInstance&, llvm::StringRef, clang::InputKind)\"},\n    {\"_ZN5clang14FrontendAction7ExecuteEv\", \"clang::FrontendAction::Execute()\"},\n    {\"_ZN5clang14FrontendAction13EndSourceFileEv\", \"clang::FrontendAction::EndSourceFile()\"},\n    {\"_ZN5clang17ASTFrontendAction13ExecuteActionEv\", \"clang::ASTFrontendAction::ExecuteAction()\"},\n    {\"_ZN5clang26PreprocessorFrontendAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::PreprocessorFrontendAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_124DeserializedDeclsCheckerD1Ev\", \"(anonymous namespace)::DeserializedDeclsChecker::~DeserializedDeclsChecker()\"},\n    {\"_ZN12_GLOBAL__N_124DeserializedDeclsCheckerD0Ev\", \"(anonymous namespace)::DeserializedDeclsChecker::~DeserializedDeclsChecker()\"},\n    {\"_ZN12_GLOBAL__N_124DeserializedDeclsChecker8DeclReadEjPKN5clang4DeclE\", \"(anonymous namespace)::DeserializedDeclsChecker::DeclRead(unsigned int, clang::Decl const*)\"},\n    {\"_ZN12_GLOBAL__N_123DeserializedDeclsDumperD1Ev\", \"(anonymous namespace)::DeserializedDeclsDumper::~DeserializedDeclsDumper()\"},\n    {\"_ZN12_GLOBAL__N_123DeserializedDeclsDumperD0Ev\", \"(anonymous namespace)::DeserializedDeclsDumper::~DeserializedDeclsDumper()\"},\n    {\"_ZN12_GLOBAL__N_123DeserializedDeclsDumper8DeclReadEjPKN5clang4DeclE\", \"(anonymous namespace)::DeserializedDeclsDumper::DeclRead(unsigned int, clang::Decl const*)\"},\n    {\"_ZNSt6vectorIPN5clang11ASTConsumerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::ASTConsumer*, std::allocator<clang::ASTConsumer*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ASTConsumer**, std::vector<clang::ASTConsumer*, std::allocator<clang::ASTConsumer*> > >, clang::ASTConsumer* const&)\"},\n    {\"_ZN5clang26ASTDeserializationListener17ReaderInitializedEPNS_9ASTReaderE\", \"clang::ASTDeserializationListener::ReaderInitialized(clang::ASTReader*)\"},\n    {\"_ZN5clang26ASTDeserializationListener14IdentifierReadEjPNS_14IdentifierInfoE\", \"clang::ASTDeserializationListener::IdentifierRead(unsigned int, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang26ASTDeserializationListener8TypeReadENS_13serialization7TypeIdxENS_8QualTypeE\", \"clang::ASTDeserializationListener::TypeRead(clang::serialization::TypeIdx, clang::QualType)\"},\n    {\"_ZN5clang26ASTDeserializationListener12SelectorReadEjNS_8SelectorE\", \"clang::ASTDeserializationListener::SelectorRead(unsigned int, clang::Selector)\"},\n    {\"_ZN5clang26ASTDeserializationListener19MacroDefinitionReadEjPNS_15MacroDefinitionE\", \"clang::ASTDeserializationListener::MacroDefinitionRead(unsigned int, clang::MacroDefinition*)\"},\n    {\"_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE4findERKSs\", \"std::_Rb_tree<std::string, std::string, std::_Identity<std::string>, std::less<std::string>, std::allocator<std::string> >::find(std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7_\", \"std::_Rb_tree<std::string, std::string, std::_Identity<std::string>, std::less<std::string>, std::allocator<std::string> >::_M_copy(std::_Rb_tree_node<std::string> const*, std::_Rb_tree_node<std::string>*)\"},\n    {\"_ZN5clang26ASTDeserializationListener8DeclReadEjPKNS_4DeclE\", \"clang::ASTDeserializationListener::DeclRead(unsigned int, clang::Decl const*)\"},\n    {\"_ZN5clang14InitOnlyAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::InitOnlyAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang14InitOnlyAction13ExecuteActionEv\", \"clang::InitOnlyAction::ExecuteAction()\"},\n    {\"_ZN5clang14ASTPrintAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTPrintAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang17ASTPrintXMLAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTPrintXMLAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang13ASTDumpAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTDumpAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang16ASTDumpXMLAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTDumpXMLAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang13ASTViewAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ASTViewAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang22DeclContextPrintAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::DeclContextPrintAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang17GeneratePCHAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::GeneratePCHAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang17GeneratePCHAction27ComputeASTConsumerArgumentsERNS_16CompilerInstanceEN4llvm9StringRefERSsRPNS3_11raw_ostreamERb\", \"clang::GeneratePCHAction::ComputeASTConsumerArguments(clang::CompilerInstance&, llvm::StringRef, std::string&, llvm::raw_ostream*&, bool&)\"},\n    {\"_ZN5clang21InheritanceViewAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::InheritanceViewAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang16SyntaxOnlyAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::SyntaxOnlyAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang19DumpRawTokensAction13ExecuteActionEv\", \"clang::DumpRawTokensAction::ExecuteAction()\"},\n    {\"_ZN5clang16DumpTokensAction13ExecuteActionEv\", \"clang::DumpTokensAction::ExecuteAction()\"},\n    {\"_ZN5clang17GeneratePTHAction13ExecuteActionEv\", \"clang::GeneratePTHAction::ExecuteAction()\"},\n    {\"_ZN5clang20PreprocessOnlyAction13ExecuteActionEv\", \"clang::PreprocessOnlyAction::ExecuteAction()\"},\n    {\"_ZN5clang23PrintPreprocessedAction13ExecuteActionEv\", \"clang::PrintPreprocessedAction::ExecuteAction()\"},\n    {\"_ZN5clang19PrintPreambleAction13ExecuteActionEv\", \"clang::PrintPreambleAction::ExecuteAction()\"},\n    {\"_ZN5clang5LexerD1Ev\", \"clang::Lexer::~Lexer()\"},\n    {\"_ZN5clang12Preprocessor3LexERNS_5TokenE\", \"clang::Preprocessor::Lex(clang::Token&)\"},\n    {\"_ZN5clang14InitOnlyActionD1Ev\", \"clang::InitOnlyAction::~InitOnlyAction()\"},\n    {\"_ZN5clang14InitOnlyActionD0Ev\", \"clang::InitOnlyAction::~InitOnlyAction()\"},\n    {\"_ZN5clang14ASTPrintActionD1Ev\", \"clang::ASTPrintAction::~ASTPrintAction()\"},\n    {\"_ZN5clang14ASTPrintActionD0Ev\", \"clang::ASTPrintAction::~ASTPrintAction()\"},\n    {\"_ZN5clang17ASTPrintXMLActionD1Ev\", \"clang::ASTPrintXMLAction::~ASTPrintXMLAction()\"},\n    {\"_ZN5clang17ASTPrintXMLActionD0Ev\", \"clang::ASTPrintXMLAction::~ASTPrintXMLAction()\"},\n    {\"_ZN5clang13ASTDumpActionD1Ev\", \"clang::ASTDumpAction::~ASTDumpAction()\"},\n    {\"_ZN5clang13ASTDumpActionD0Ev\", \"clang::ASTDumpAction::~ASTDumpAction()\"},\n    {\"_ZN5clang16ASTDumpXMLActionD1Ev\", \"clang::ASTDumpXMLAction::~ASTDumpXMLAction()\"},\n    {\"_ZN5clang16ASTDumpXMLActionD0Ev\", \"clang::ASTDumpXMLAction::~ASTDumpXMLAction()\"},\n    {\"_ZN5clang13ASTViewActionD1Ev\", \"clang::ASTViewAction::~ASTViewAction()\"},\n    {\"_ZN5clang13ASTViewActionD0Ev\", \"clang::ASTViewAction::~ASTViewAction()\"},\n    {\"_ZN5clang22DeclContextPrintActionD1Ev\", \"clang::DeclContextPrintAction::~DeclContextPrintAction()\"},\n    {\"_ZN5clang22DeclContextPrintActionD0Ev\", \"clang::DeclContextPrintAction::~DeclContextPrintAction()\"},\n    {\"_ZN5clang17GeneratePCHActionD1Ev\", \"clang::GeneratePCHAction::~GeneratePCHAction()\"},\n    {\"_ZN5clang17GeneratePCHActionD0Ev\", \"clang::GeneratePCHAction::~GeneratePCHAction()\"},\n    {\"_ZN5clang21InheritanceViewActionD1Ev\", \"clang::InheritanceViewAction::~InheritanceViewAction()\"},\n    {\"_ZN5clang21InheritanceViewActionD0Ev\", \"clang::InheritanceViewAction::~InheritanceViewAction()\"},\n    {\"_ZN5clang19PrintPreambleActionD1Ev\", \"clang::PrintPreambleAction::~PrintPreambleAction()\"},\n    {\"_ZN5clang19PrintPreambleActionD0Ev\", \"clang::PrintPreambleAction::~PrintPreambleAction()\"},\n    {\"_ZN5clang19DumpRawTokensActionD1Ev\", \"clang::DumpRawTokensAction::~DumpRawTokensAction()\"},\n    {\"_ZN5clang19DumpRawTokensActionD0Ev\", \"clang::DumpRawTokensAction::~DumpRawTokensAction()\"},\n    {\"_ZN5clang16DumpTokensActionD1Ev\", \"clang::DumpTokensAction::~DumpTokensAction()\"},\n    {\"_ZN5clang16DumpTokensActionD0Ev\", \"clang::DumpTokensAction::~DumpTokensAction()\"},\n    {\"_ZN5clang17GeneratePTHActionD1Ev\", \"clang::GeneratePTHAction::~GeneratePTHAction()\"},\n    {\"_ZN5clang17GeneratePTHActionD0Ev\", \"clang::GeneratePTHAction::~GeneratePTHAction()\"},\n    {\"_ZN5clang20PreprocessOnlyActionD1Ev\", \"clang::PreprocessOnlyAction::~PreprocessOnlyAction()\"},\n    {\"_ZN5clang20PreprocessOnlyActionD0Ev\", \"clang::PreprocessOnlyAction::~PreprocessOnlyAction()\"},\n    {\"_ZN5clang23PrintPreprocessedActionD1Ev\", \"clang::PrintPreprocessedAction::~PrintPreprocessedAction()\"},\n    {\"_ZN5clang23PrintPreprocessedActionD0Ev\", \"clang::PrintPreprocessedAction::~PrintPreprocessedAction()\"},\n    {\"_ZN5clang5LexerD0Ev\", \"clang::Lexer::~Lexer()\"},\n    {\"_ZN5clang5Lexer11IndirectLexERNS_5TokenE\", \"clang::Lexer::IndirectLex(clang::Token&)\"},\n    {\"_ZN5clang5Lexer17getSourceLocationEv\", \"clang::Lexer::getSourceLocation()\"},\n    {\"_ZN5clang17PreprocessorLexerD1Ev\", \"clang::PreprocessorLexer::~PreprocessorLexer()\"},\n    {\"_ZN5clang17PreprocessorLexerD0Ev\", \"clang::PreprocessorLexer::~PreprocessorLexer()\"},\n    {\"_ZN5clang11ASTConsumerD1Ev\", \"clang::ASTConsumer::~ASTConsumer()\"},\n    {\"_ZN5clang11ASTConsumerD0Ev\", \"clang::ASTConsumer::~ASTConsumer()\"},\n    {\"_ZN5clang11ASTConsumer10InitializeERNS_10ASTContextE\", \"clang::ASTConsumer::Initialize(clang::ASTContext&)\"},\n    {\"_ZN5clang11ASTConsumer21HandleTranslationUnitERNS_10ASTContextE\", \"clang::ASTConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang11ASTConsumer23HandleTagDeclDefinitionEPNS_7TagDeclE\", \"clang::ASTConsumer::HandleTagDeclDefinition(clang::TagDecl*)\"},\n    {\"_ZN5clang11ASTConsumer27CompleteTentativeDefinitionEPNS_7VarDeclE\", \"clang::ASTConsumer::CompleteTentativeDefinition(clang::VarDecl*)\"},\n    {\"_ZN5clang11ASTConsumer12HandleVTableEPNS_13CXXRecordDeclEb\", \"clang::ASTConsumer::HandleVTable(clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN5clang11ASTConsumer22GetASTMutationListenerEv\", \"clang::ASTConsumer::GetASTMutationListener()\"},\n    {\"_ZN5clang11ASTConsumer29GetASTDeserializationListenerEv\", \"clang::ASTConsumer::GetASTDeserializationListener()\"},\n    {\"_ZN5clang11ASTConsumer10PrintStatsEv\", \"clang::ASTConsumer::PrintStats()\"},\n    {\"_ZN5clang15FrontendOptions24getInputKindForExtensionEN4llvm9StringRefE\", \"clang::FrontendOptions::getInputKindForExtension(llvm::StringRef)\"},\n    {\"_ZN4llvm12StringSwitchIN5clang9InputKindES2_E5CasesILj4ELj4ELj4ELj4ELj4EEERS3_RAT__KcRAT0__S6_RAT1__S6_RAT2__S6_RAT3__S6_RKS2_\", \"llvm::StringSwitch<clang::InputKind, clang::InputKind>& llvm::StringSwitch<clang::InputKind, clang::InputKind>::Cases<4u, 4u, 4u, 4u, 4u>(char const (&) [4u], char const (&) [4u], char const (&) [4u], char const (&) [4u], char const (&) [4u], clang::InputKind const&)\"},\n    {\"_ZN5clang22AttachHeaderIncludeGenERNS_12PreprocessorEbN4llvm9StringRefE\", \"clang::AttachHeaderIncludeGen(clang::Preprocessor&, bool, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_122HeaderIncludesCallbackD1Ev\", \"(anonymous namespace)::HeaderIncludesCallback::~HeaderIncludesCallback()\"},\n    {\"_ZN12_GLOBAL__N_122HeaderIncludesCallbackD0Ev\", \"(anonymous namespace)::HeaderIncludesCallback::~HeaderIncludesCallback()\"},\n    {\"_ZN12_GLOBAL__N_122HeaderIncludesCallback11FileChangedEN5clang14SourceLocationENS1_11PPCallbacks16FileChangeReasonENS1_6SrcMgr18CharacteristicKindE\", \"(anonymous namespace)::HeaderIncludesCallback::FileChanged(clang::SourceLocation, clang::PPCallbacks::FileChangeReason, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang24ApplyHeaderSearchOptionsERNS_12HeaderSearchERKNS_19HeaderSearchOptionsERKNS_11LangOptionsERKN4llvm6TripleE\", \"clang::ApplyHeaderSearchOptions(clang::HeaderSearch&, clang::HeaderSearchOptions const&, clang::LangOptions const&, llvm::Triple const&)\"},\n    {\"_ZN12_GLOBAL__N_116InitHeaderSearch7AddPathERKN4llvm5TwineEN5clang8frontend15IncludeDirGroupEbbbb\", \"(anonymous namespace)::InitHeaderSearch::AddPath(llvm::Twine const&, clang::frontend::IncludeDirGroup, bool, bool, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_116InitHeaderSearch17AddDelimitedPathsEN4llvm9StringRefE\", \"(anonymous namespace)::InitHeaderSearch::AddDelimitedPaths(llvm::StringRef)\"},\n    {\"_Z16RemoveDuplicatesRSt6vectorIN5clang15DirectoryLookupESaIS1_EEb\", \"RemoveDuplicates(std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> >&, bool)\"},\n    {\"_ZN12_GLOBAL__N_116InitHeaderSearch27AddGnuCPlusPlusIncludePathsEN4llvm9StringRefES2_S2_S2_RKNS1_6TripleE\", \"(anonymous namespace)::InitHeaderSearch::AddGnuCPlusPlusIncludePaths(llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::Triple const&)\"},\n    {\"_ZN12_GLOBAL__N_116InitHeaderSearch29AddMinGWCPlusPlusIncludePathsEN4llvm9StringRefES2_S2_\", \"(anonymous namespace)::InitHeaderSearch::AddMinGWCPlusPlusIncludePaths(llvm::StringRef, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNSt6vectorIN5clang15DirectoryLookupESaIS1_EEaSERKS3_\", \"std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> >::operator=(std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > const&)\"},\n    {\"_ZNSt6vectorIN5clang15DirectoryLookupESaIS1_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS1_S3_EEEEvS8_T_S9_St20forward_iterator_tag\", \"void std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> >::_M_range_insert<__gnu_cxx::__normal_iterator<clang::DirectoryLookup*, std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > > >(__gnu_cxx::__normal_iterator<clang::DirectoryLookup*, std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > >, __gnu_cxx::__normal_iterator<clang::DirectoryLookup*, std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > >, __gnu_cxx::__normal_iterator<clang::DirectoryLookup*, std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > >, std::forward_iterator_tag)\"},\n    {\"_ZNSt6vectorIN5clang15DirectoryLookupESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::DirectoryLookup*, std::vector<clang::DirectoryLookup, std::allocator<clang::DirectoryLookup> > >, clang::DirectoryLookup const&)\"},\n    {\"_ZN5clang24NormalizeDashIncludePathEN4llvm9StringRefE\", \"clang::NormalizeDashIncludePath(llvm::StringRef)\"},\n    {\"_ZN5clang22InitializePreprocessorERNS_12PreprocessorERKNS_19PreprocessorOptionsERKNS_19HeaderSearchOptionsERKNS_15FrontendOptionsE\", \"clang::InitializePreprocessor(clang::Preprocessor&, clang::PreprocessorOptions const&, clang::HeaderSearchOptions const&, clang::FrontendOptions const&)\"},\n    {\"_Z18AddImplicitIncludeRN5clang12MacroBuilderEN4llvm9StringRefE\", \"AddImplicitInclude(clang::MacroBuilder&, llvm::StringRef)\"},\n    {\"_Z17DefineFloatMacrosRN5clang12MacroBuilderEN4llvm9StringRefEPKNS2_12fltSemanticsE\", \"DefineFloatMacros(clang::MacroBuilder&, llvm::StringRef, llvm::fltSemantics const*)\"},\n    {\"_Z23DefineExactWidthIntTypeN5clang10TargetInfo7IntTypeERKS0_RNS_12MacroBuilderE\", \"DefineExactWidthIntType(clang::TargetInfo::IntType, clang::TargetInfo const&, clang::MacroBuilder&)\"},\n    {\"_ZN5clang12LangStandard22getLangStandardForKindENS0_4KindE\", \"clang::LangStandard::getLangStandardForKind(clang::LangStandard::Kind)\"},\n    {\"_ZN5clang12LangStandard22getLangStandardForNameEN4llvm9StringRefE\", \"clang::LangStandard::getLangStandardForName(llvm::StringRef)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListenerC1ERKSt6vectorIPNS_26ASTDeserializationListenerESaIS3_EE\", \"clang::MultiplexASTDeserializationListener::MultiplexASTDeserializationListener(std::vector<clang::ASTDeserializationListener*, std::allocator<clang::ASTDeserializationListener*> > const&)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListenerC2ERKSt6vectorIPNS_26ASTDeserializationListenerESaIS3_EE\", \"clang::MultiplexASTDeserializationListener::MultiplexASTDeserializationListener(std::vector<clang::ASTDeserializationListener*, std::allocator<clang::ASTDeserializationListener*> > const&)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener17ReaderInitializedEPNS_9ASTReaderE\", \"clang::MultiplexASTDeserializationListener::ReaderInitialized(clang::ASTReader*)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener14IdentifierReadEjPNS_14IdentifierInfoE\", \"clang::MultiplexASTDeserializationListener::IdentifierRead(unsigned int, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener8TypeReadENS_13serialization7TypeIdxENS_8QualTypeE\", \"clang::MultiplexASTDeserializationListener::TypeRead(clang::serialization::TypeIdx, clang::QualType)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener8DeclReadEjPKNS_4DeclE\", \"clang::MultiplexASTDeserializationListener::DeclRead(unsigned int, clang::Decl const*)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener12SelectorReadEjNS_8SelectorE\", \"clang::MultiplexASTDeserializationListener::SelectorRead(unsigned int, clang::Selector)\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListener19MacroDefinitionReadEjPNS_15MacroDefinitionE\", \"clang::MultiplexASTDeserializationListener::MacroDefinitionRead(unsigned int, clang::MacroDefinition*)\"},\n    {\"_ZN5clang28MultiplexASTMutationListenerC1ERKSt6vectorIPNS_19ASTMutationListenerESaIS3_EE\", \"clang::MultiplexASTMutationListener::MultiplexASTMutationListener(std::vector<clang::ASTMutationListener*, std::allocator<clang::ASTMutationListener*> > const&)\"},\n    {\"_ZN5clang28MultiplexASTMutationListenerC2ERKSt6vectorIPNS_19ASTMutationListenerESaIS3_EE\", \"clang::MultiplexASTMutationListener::MultiplexASTMutationListener(std::vector<clang::ASTMutationListener*, std::allocator<clang::ASTMutationListener*> > const&)\"},\n    {\"_ZN5clang28MultiplexASTMutationListener22CompletedTagDefinitionEPKNS_7TagDeclE\", \"clang::MultiplexASTMutationListener::CompletedTagDefinition(clang::TagDecl const*)\"},\n    {\"_ZN5clang28MultiplexASTMutationListener16AddedVisibleDeclEPKNS_11DeclContextEPKNS_4DeclE\", \"clang::MultiplexASTMutationListener::AddedVisibleDecl(clang::DeclContext const*, clang::Decl const*)\"},\n    {\"_ZN5clang28MultiplexASTMutationListener22AddedCXXImplicitMemberEPKNS_13CXXRecordDeclEPKNS_4DeclE\", \"clang::MultiplexASTMutationListener::AddedCXXImplicitMember(clang::CXXRecordDecl const*, clang::Decl const*)\"},\n    {\"_ZN5clang28MultiplexASTMutationListener30AddedCXXTemplateSpecializationEPKNS_17ClassTemplateDeclEPKNS_31ClassTemplateSpecializationDeclE\", \"clang::MultiplexASTMutationListener::AddedCXXTemplateSpecialization(clang::ClassTemplateDecl const*, clang::ClassTemplateSpecializationDecl const*)\"},\n    {\"_ZN5clang17MultiplexConsumerC1ERKSt6vectorIPNS_11ASTConsumerESaIS3_EE\", \"clang::MultiplexConsumer::MultiplexConsumer(std::vector<clang::ASTConsumer*, std::allocator<clang::ASTConsumer*> > const&)\"},\n    {\"_ZN5clang17MultiplexConsumerC2ERKSt6vectorIPNS_11ASTConsumerESaIS3_EE\", \"clang::MultiplexConsumer::MultiplexConsumer(std::vector<clang::ASTConsumer*, std::allocator<clang::ASTConsumer*> > const&)\"},\n    {\"_ZN5clang17MultiplexConsumerD0Ev\", \"clang::MultiplexConsumer::~MultiplexConsumer()\"},\n    {\"_ZN5clang17MultiplexConsumerD1Ev\", \"clang::MultiplexConsumer::~MultiplexConsumer()\"},\n    {\"_ZN5clang17MultiplexConsumerD2Ev\", \"clang::MultiplexConsumer::~MultiplexConsumer()\"},\n    {\"_ZN5clang17MultiplexConsumer10InitializeERNS_10ASTContextE\", \"clang::MultiplexConsumer::Initialize(clang::ASTContext&)\"},\n    {\"_ZN5clang17MultiplexConsumer18HandleTopLevelDeclENS_12DeclGroupRefE\", \"clang::MultiplexConsumer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN5clang17MultiplexConsumer21HandleInterestingDeclENS_12DeclGroupRefE\", \"clang::MultiplexConsumer::HandleInterestingDecl(clang::DeclGroupRef)\"},\n    {\"_ZN5clang17MultiplexConsumer21HandleTranslationUnitERNS_10ASTContextE\", \"clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang17MultiplexConsumer23HandleTagDeclDefinitionEPNS_7TagDeclE\", \"clang::MultiplexConsumer::HandleTagDeclDefinition(clang::TagDecl*)\"},\n    {\"_ZN5clang17MultiplexConsumer27CompleteTentativeDefinitionEPNS_7VarDeclE\", \"clang::MultiplexConsumer::CompleteTentativeDefinition(clang::VarDecl*)\"},\n    {\"_ZN5clang17MultiplexConsumer12HandleVTableEPNS_13CXXRecordDeclEb\", \"clang::MultiplexConsumer::HandleVTable(clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN5clang17MultiplexConsumer22GetASTMutationListenerEv\", \"clang::MultiplexConsumer::GetASTMutationListener()\"},\n    {\"_ZN5clang17MultiplexConsumer29GetASTDeserializationListenerEv\", \"clang::MultiplexConsumer::GetASTDeserializationListener()\"},\n    {\"_ZN5clang17MultiplexConsumer10PrintStatsEv\", \"clang::MultiplexConsumer::PrintStats()\"},\n    {\"_ZN5clang17MultiplexConsumer14InitializeSemaERNS_4SemaE\", \"clang::MultiplexConsumer::InitializeSema(clang::Sema&)\"},\n    {\"_ZN5clang17MultiplexConsumer10ForgetSemaEv\", \"clang::MultiplexConsumer::ForgetSema()\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListenerD1Ev\", \"clang::MultiplexASTDeserializationListener::~MultiplexASTDeserializationListener()\"},\n    {\"_ZN5clang35MultiplexASTDeserializationListenerD0Ev\", \"clang::MultiplexASTDeserializationListener::~MultiplexASTDeserializationListener()\"},\n    {\"_ZN5clang28MultiplexASTMutationListenerD1Ev\", \"clang::MultiplexASTMutationListener::~MultiplexASTMutationListener()\"},\n    {\"_ZN5clang28MultiplexASTMutationListenerD0Ev\", \"clang::MultiplexASTMutationListener::~MultiplexASTMutationListener()\"},\n    {\"_ZNSt6vectorIPN5clang26ASTDeserializationListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::ASTDeserializationListener*, std::allocator<clang::ASTDeserializationListener*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ASTDeserializationListener**, std::vector<clang::ASTDeserializationListener*, std::allocator<clang::ASTDeserializationListener*> > >, clang::ASTDeserializationListener* const&)\"},\n    {\"_ZNSt6vectorIPN5clang19ASTMutationListenerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::ASTMutationListener*, std::allocator<clang::ASTMutationListener*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ASTMutationListener**, std::vector<clang::ASTMutationListener*, std::allocator<clang::ASTMutationListener*> > >, clang::ASTMutationListener* const&)\"},\n    {\"_ZN5clang12SemaConsumerD1Ev\", \"clang::SemaConsumer::~SemaConsumer()\"},\n    {\"_ZN5clang12SemaConsumerD0Ev\", \"clang::SemaConsumer::~SemaConsumer()\"},\n    {\"_ZN5clang12SemaConsumer14InitializeSemaERNS_4SemaE\", \"clang::SemaConsumer::InitializeSema(clang::Sema&)\"},\n    {\"_ZN5clang12SemaConsumer10ForgetSemaEv\", \"clang::SemaConsumer::ForgetSema()\"},\n    {\"_ZN5clang24DoPrintPreprocessedInputERNS_12PreprocessorEPN4llvm11raw_ostreamERKNS_25PreprocessorOutputOptionsE\", \"clang::DoPrintPreprocessedInput(clang::Preprocessor&, llvm::raw_ostream*, clang::PreprocessorOutputOptions const&)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks10MoveToLineEj\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::MoveToLine(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks13WriteLineInfoEjPKcj\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::WriteLineInfo(unsigned int, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_120UnknownPragmaHandlerD1Ev\", \"(anonymous namespace)::UnknownPragmaHandler::~UnknownPragmaHandler()\"},\n    {\"_ZN12_GLOBAL__N_120UnknownPragmaHandlerD0Ev\", \"(anonymous namespace)::UnknownPragmaHandler::~UnknownPragmaHandler()\"},\n    {\"_ZN12_GLOBAL__N_120UnknownPragmaHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::UnknownPragmaHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacksD1Ev\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::~PrintPPOutputPPCallbacks()\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacksD0Ev\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::~PrintPPOutputPPCallbacks()\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks11FileChangedEN5clang14SourceLocationENS1_11PPCallbacks16FileChangeReasonENS1_6SrcMgr18CharacteristicKindE\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::FileChanged(clang::SourceLocation, clang::PPCallbacks::FileChangeReason, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks5IdentEN5clang14SourceLocationERKSs\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::Ident(clang::SourceLocation, std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks13PragmaCommentEN5clang14SourceLocationEPKNS1_14IdentifierInfoERKSs\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::PragmaComment(clang::SourceLocation, clang::IdentifierInfo const*, std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks13PragmaMessageEN5clang14SourceLocationEN4llvm9StringRefE\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::PragmaMessage(clang::SourceLocation, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks12MacroDefinedERKN5clang5TokenEPKNS1_9MacroInfoE\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::MacroDefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_124PrintPPOutputPPCallbacks14MacroUndefinedERKN5clang5TokenEPKNS1_9MacroInfoE\", \"(anonymous namespace)::PrintPPOutputPPCallbacks::MacroUndefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_Z20PrintMacroDefinitionRKN5clang14IdentifierInfoERKNS_9MacroInfoERNS_12PreprocessorERN4llvm11raw_ostreamE\", \"PrintMacroDefinition(clang::IdentifierInfo const&, clang::MacroInfo const&, clang::Preprocessor&, llvm::raw_ostream&)\"},\n    {\"_Z14MacroIDComparePKvS0_\", \"MacroIDCompare(void const*, void const*)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPN5clang14IdentifierInfoEPNS2_9MacroInfoEEE6appendINS_16DenseMapIteratorIS4_S6_NS_12DenseMapInfoIS4_EENSB_IS6_EELb1EEEEEvT_SF_\", \"void llvm::SmallVectorImpl<std::pair<clang::IdentifierInfo*, clang::MacroInfo*> >::append<llvm::DenseMapIterator<clang::IdentifierInfo*, clang::MacroInfo*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::MacroInfo*>, true> >(llvm::DenseMapIterator<clang::IdentifierInfo*, clang::MacroInfo*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::MacroInfo*>, true>, llvm::DenseMapIterator<clang::IdentifierInfo*, clang::MacroInfo*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::MacroInfo*>, true>)\"},\n    {\"_ZN5clang11DocumentXML9PrintStmtEPKNS_4StmtE\", \"clang::DocumentXML::PrintStmt(clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML11DumpSubTreeEPN5clang4StmtE\", \"(anonymous namespace)::StmtXML::DumpSubTree(clang::Stmt*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_17StmtXMLEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::StmtXML, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::StmtXML::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML21VisitCXXConstructExprEPN5clang16CXXConstructExprE\", \"(anonymous namespace)::StmtXML::VisitCXXConstructExpr(clang::CXXConstructExpr*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML13VisitCallExprEPN5clang8CallExprE\", \"(anonymous namespace)::StmtXML::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::StmtXML::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML9VisitStmtEPN5clang4StmtE\", \"(anonymous namespace)::StmtXML::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_17StmtXML21VisitCXXNamedCastExprEPN5clang16CXXNamedCastExprE\", \"(anonymous namespace)::StmtXML::VisitCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN5clang20TextDiagnosticBuffer16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::TextDiagnosticBuffer::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZNK5clang20TextDiagnosticBuffer16FlushDiagnosticsERNS_10DiagnosticE\", \"clang::TextDiagnosticBuffer::FlushDiagnostics(clang::Diagnostic&) const\"},\n    {\"_ZN5clang20TextDiagnosticBufferD1Ev\", \"clang::TextDiagnosticBuffer::~TextDiagnosticBuffer()\"},\n    {\"_ZN5clang20TextDiagnosticBufferD0Ev\", \"clang::TextDiagnosticBuffer::~TextDiagnosticBuffer()\"},\n    {\"_ZNSt6vectorISt4pairIN5clang14SourceLocationESsESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string>*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, std::pair<clang::SourceLocation, std::string> const&)\"},\n    {\"_ZN5clang20TextDiagnosticBufferD2Ev\", \"clang::TextDiagnosticBuffer::~TextDiagnosticBuffer()\"},\n    {\"_ZN5clang21TextDiagnosticPrinterC1ERN4llvm11raw_ostreamERKNS_17DiagnosticOptionsEb\", \"clang::TextDiagnosticPrinter::TextDiagnosticPrinter(llvm::raw_ostream&, clang::DiagnosticOptions const&, bool)\"},\n    {\"_ZN5clang21TextDiagnosticPrinterC2ERN4llvm11raw_ostreamERKNS_17DiagnosticOptionsEb\", \"clang::TextDiagnosticPrinter::TextDiagnosticPrinter(llvm::raw_ostream&, clang::DiagnosticOptions const&, bool)\"},\n    {\"_ZN5clang21TextDiagnosticPrinterD0Ev\", \"clang::TextDiagnosticPrinter::~TextDiagnosticPrinter()\"},\n    {\"_ZN5clang21TextDiagnosticPrinterD1Ev\", \"clang::TextDiagnosticPrinter::~TextDiagnosticPrinter()\"},\n    {\"_ZN5clang21TextDiagnosticPrinterD2Ev\", \"clang::TextDiagnosticPrinter::~TextDiagnosticPrinter()\"},\n    {\"_ZN5clang21TextDiagnosticPrinter17PrintIncludeStackENS_14SourceLocationERKNS_13SourceManagerE\", \"clang::TextDiagnosticPrinter::PrintIncludeStack(clang::SourceLocation, clang::SourceManager const&)\"},\n    {\"_ZN5clang21TextDiagnosticPrinter14HighlightRangeERKNS_15CharSourceRangeERKNS_13SourceManagerEjNS_6FileIDERSsRKSs\", \"clang::TextDiagnosticPrinter::HighlightRange(clang::CharSourceRange const&, clang::SourceManager const&, unsigned int, clang::FileID, std::string&, std::string const&)\"},\n    {\"_ZN5clang21TextDiagnosticPrinter19EmitCaretDiagnosticENS_14SourceLocationEPNS_15CharSourceRangeEjRKNS_13SourceManagerEPKNS_9FixItHintEjjjjj\", \"clang::TextDiagnosticPrinter::EmitCaretDiagnostic(clang::SourceLocation, clang::CharSourceRange*, unsigned int, clang::SourceManager const&, clang::FixItHint const*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN5clang21TextDiagnosticPrinter16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::TextDiagnosticPrinter::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_Z13findEndOfWordjRKN4llvm15SmallVectorImplIcEEjjj\", \"findEndOfWord(unsigned int, llvm::SmallVectorImpl<char> const&, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZNK5clang13SourceManager16getDecomposedLocENS_14SourceLocationE\", \"clang::SourceManager::getDecomposedLoc(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager29getDecomposedInstantiationLocENS_14SourceLocationE\", \"clang::SourceManager::getDecomposedInstantiationLoc(clang::SourceLocation) const\"},\n    {\"_ZN5clang21TextDiagnosticPrinter15BeginSourceFileERKNS_11LangOptionsEPKNS_12PreprocessorE\", \"clang::TextDiagnosticPrinter::BeginSourceFile(clang::LangOptions const&, clang::Preprocessor const*)\"},\n    {\"_ZN5clang21TextDiagnosticPrinter13EndSourceFileEv\", \"clang::TextDiagnosticPrinter::EndSourceFile()\"},\n    {\"_ZNK5clang13SourceManager16isOffsetInFileIDENS_6FileIDEj\", \"clang::SourceManager::isOffsetInFileID(clang::FileID, unsigned int) const\"},\n    {\"_ZN5clang11DocumentXML14addParentTypesEPKNS_4TypeE\", \"clang::DocumentXML::addParentTypes(clang::Type const*)\"},\n    {\"_ZN5clang11DocumentXML14writeTypeToXMLEPKNS_4TypeE\", \"clang::DocumentXML::writeTypeToXML(clang::Type const*)\"},\n    {\"_ZN5clang11DocumentXML14writeTypeToXMLERKNS_8QualTypeE\", \"clang::DocumentXML::writeTypeToXML(clang::QualType const&)\"},\n    {\"_ZN5clang3XML12_GLOBAL__N_110TypeWriter9VisitTypeEPKNS_4TypeE\", \"clang::XML::(anonymous namespace)::TypeWriter::VisitType(clang::Type const*)\"},\n    {\"_ZN5clang11TypeVisitorINS_11DocumentXML9TypeAdderEvE5VisitEPKNS_4TypeE\", \"clang::TypeVisitor<clang::DocumentXML::TypeAdder, void>::Visit(clang::Type const*)\"},\n    {\"_ZN5clang11DocumentXML12addAttributeIN4llvm5APIntEEEvPKcRKT_\", \"void clang::DocumentXML::addAttribute<llvm::APInt>(char const*, llvm::APInt const&)\"},\n    {\"_ZN5clang11DocumentXML12addAttributeINS_10Qualifiers2GCEEEvPKcRKT_\", \"void clang::DocumentXML::addAttribute<clang::Qualifiers::GC>(char const*, clang::Qualifiers::GC const&)\"},\n    {\"_ZN5clang23VerifyDiagnosticsClientC1ERNS_10DiagnosticEPNS_16DiagnosticClientE\", \"clang::VerifyDiagnosticsClient::VerifyDiagnosticsClient(clang::Diagnostic&, clang::DiagnosticClient*)\"},\n    {\"_ZN5clang23VerifyDiagnosticsClientC2ERNS_10DiagnosticEPNS_16DiagnosticClientE\", \"clang::VerifyDiagnosticsClient::VerifyDiagnosticsClient(clang::Diagnostic&, clang::DiagnosticClient*)\"},\n    {\"_ZN5clang23VerifyDiagnosticsClientD0Ev\", \"clang::VerifyDiagnosticsClient::~VerifyDiagnosticsClient()\"},\n    {\"_ZN5clang23VerifyDiagnosticsClientD1Ev\", \"clang::VerifyDiagnosticsClient::~VerifyDiagnosticsClient()\"},\n    {\"_ZN5clang23VerifyDiagnosticsClientD2Ev\", \"clang::VerifyDiagnosticsClient::~VerifyDiagnosticsClient()\"},\n    {\"_ZN5clang23VerifyDiagnosticsClient16CheckDiagnosticsEv\", \"clang::VerifyDiagnosticsClient::CheckDiagnostics()\"},\n    {\"_ZN5clang23VerifyDiagnosticsClient15BeginSourceFileERKNS_11LangOptionsEPKNS_12PreprocessorE\", \"clang::VerifyDiagnosticsClient::BeginSourceFile(clang::LangOptions const&, clang::Preprocessor const*)\"},\n    {\"_ZN5clang23VerifyDiagnosticsClient13EndSourceFileEv\", \"clang::VerifyDiagnosticsClient::EndSourceFile()\"},\n    {\"_ZN5clang23VerifyDiagnosticsClient16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::VerifyDiagnosticsClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_Z12PrintProblemRN5clang10DiagnosticEPNS_13SourceManagerEN9__gnu_cxx17__normal_iteratorIPKSt4pairINS_14SourceLocationESsESt6vectorIS8_SaIS8_EEEESE_PKcb\", \"PrintProblem(clang::Diagnostic&, clang::SourceManager*, __gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, char const*, bool)\"},\n    {\"_Z10CheckListsRN5clang10DiagnosticERNS_13SourceManagerEPKcRSt6vectorIPN12_GLOBAL__N_19DirectiveESaIS9_EEN9__gnu_cxx17__normal_iteratorIPKSt4pairINS_14SourceLocationESsES6_ISH_SaISH_EEEESM_\", \"CheckLists(clang::Diagnostic&, clang::SourceManager&, char const*, std::vector<(anonymous namespace)::Directive*, std::allocator<(anonymous namespace)::Directive*> >&, __gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >)\"},\n    {\"_ZNSt6vectorIPN12_GLOBAL__N_19DirectiveESaIS2_EE9push_backERKS2_\", \"std::vector<(anonymous namespace)::Directive*, std::allocator<(anonymous namespace)::Directive*> >::push_back((anonymous namespace)::Directive* const&)\"},\n    {\"_ZN12_GLOBAL__N_117StandardDirectiveD1Ev\", \"(anonymous namespace)::StandardDirective::~StandardDirective()\"},\n    {\"_ZN12_GLOBAL__N_117StandardDirectiveD0Ev\", \"(anonymous namespace)::StandardDirective::~StandardDirective()\"},\n    {\"_ZN12_GLOBAL__N_117StandardDirective7isValidERSs\", \"(anonymous namespace)::StandardDirective::isValid(std::string&)\"},\n    {\"_ZN12_GLOBAL__N_117StandardDirective5MatchERKSs\", \"(anonymous namespace)::StandardDirective::Match(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_19DirectiveD1Ev\", \"(anonymous namespace)::Directive::~Directive()\"},\n    {\"_ZN12_GLOBAL__N_19DirectiveD0Ev\", \"(anonymous namespace)::Directive::~Directive()\"},\n    {\"_ZN12_GLOBAL__N_114RegexDirectiveD1Ev\", \"(anonymous namespace)::RegexDirective::~RegexDirective()\"},\n    {\"_ZN12_GLOBAL__N_114RegexDirectiveD0Ev\", \"(anonymous namespace)::RegexDirective::~RegexDirective()\"},\n    {\"_ZN12_GLOBAL__N_114RegexDirective7isValidERSs\", \"(anonymous namespace)::RegexDirective::isValid(std::string&)\"},\n    {\"_ZN12_GLOBAL__N_114RegexDirective5MatchERKSs\", \"(anonymous namespace)::RegexDirective::Match(std::string const&)\"},\n    {\"_ZNSt6vectorISt4pairIN5clang14SourceLocationESsESaIS3_EE19_M_range_initializeIN9__gnu_cxx17__normal_iteratorIPKS3_S5_EEEEvT_SC_St20forward_iterator_tag\", \"void std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > >::_M_range_initialize<__gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<clang::SourceLocation, std::string> const*, std::vector<std::pair<clang::SourceLocation, std::string>, std::allocator<std::pair<clang::SourceLocation, std::string> > > >, std::forward_iterator_tag)\"},\n    {\"_ZSt6searchIPKcS1_ET_S2_S2_T0_S3_\", \"char const* std::search<char const*, char const*>(char const*, char const*, char const*, char const*)\"},\n    {\"_ZN5clang21ProcessWarningOptionsERNS_10DiagnosticERKNS_17DiagnosticOptionsE\", \"clang::ProcessWarningOptions(clang::Diagnostic&, clang::DiagnosticOptions const&)\"},\n    {\"_ZN5clang6driver6ActionD0Ev\", \"clang::driver::Action::~Action()\"},\n    {\"_ZN5clang6driver6ActionD1Ev\", \"clang::driver::Action::~Action()\"},\n    {\"_ZN5clang6driver6ActionD2Ev\", \"clang::driver::Action::~Action()\"},\n    {\"_ZN5clang6driver6Action12getClassNameENS1_11ActionClassE\", \"clang::driver::Action::getClassName(clang::driver::Action::ActionClass)\"},\n    {\"_ZN5clang6driver11InputActionC1ERKNS0_3ArgENS0_5types2IDE\", \"clang::driver::InputAction::InputAction(clang::driver::Arg const&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver11InputActionC2ERKNS0_3ArgENS0_5types2IDE\", \"clang::driver::InputAction::InputAction(clang::driver::Arg const&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver14BindArchActionC1EPNS0_6ActionEPKc\", \"clang::driver::BindArchAction::BindArchAction(clang::driver::Action*, char const*)\"},\n    {\"_ZN5clang6driver14BindArchActionC2EPNS0_6ActionEPKc\", \"clang::driver::BindArchAction::BindArchAction(clang::driver::Action*, char const*)\"},\n    {\"_ZN5clang6driver9JobActionC1ENS0_6Action11ActionClassEPS2_NS0_5types2IDE\", \"clang::driver::JobAction::JobAction(clang::driver::Action::ActionClass, clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver9JobActionC2ENS0_6Action11ActionClassEPS2_NS0_5types2IDE\", \"clang::driver::JobAction::JobAction(clang::driver::Action::ActionClass, clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver9JobActionC1ENS0_6Action11ActionClassERKN4llvm11SmallVectorIPS2_Lj3EEENS0_5types2IDE\", \"clang::driver::JobAction::JobAction(clang::driver::Action::ActionClass, llvm::SmallVector<clang::driver::Action*, 3u> const&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver9JobActionC2ENS0_6Action11ActionClassERKN4llvm11SmallVectorIPS2_Lj3EEENS0_5types2IDE\", \"clang::driver::JobAction::JobAction(clang::driver::Action::ActionClass, llvm::SmallVector<clang::driver::Action*, 3u> const&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver19PreprocessJobActionC1EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::PreprocessJobAction::PreprocessJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver19PreprocessJobActionC2EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::PreprocessJobAction::PreprocessJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver19PrecompileJobActionC1EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::PrecompileJobAction::PrecompileJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver19PrecompileJobActionC2EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::PrecompileJobAction::PrecompileJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver16AnalyzeJobActionC1EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::AnalyzeJobAction::AnalyzeJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver16AnalyzeJobActionC2EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::AnalyzeJobAction::AnalyzeJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver16CompileJobActionC1EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::CompileJobAction::CompileJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver16CompileJobActionC2EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::CompileJobAction::CompileJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver17AssembleJobActionC1EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::AssembleJobAction::AssembleJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver17AssembleJobActionC2EPNS0_6ActionENS0_5types2IDE\", \"clang::driver::AssembleJobAction::AssembleJobAction(clang::driver::Action*, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver13LinkJobActionC1ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::LinkJobAction::LinkJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver13LinkJobActionC2ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::LinkJobAction::LinkJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver13LipoJobActionC1ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::LipoJobAction::LipoJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver13LipoJobActionC2ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::LipoJobAction::LipoJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver17DsymutilJobActionC1ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::DsymutilJobAction::DsymutilJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver17DsymutilJobActionC2ERN4llvm11SmallVectorIPNS0_6ActionELj3EEENS0_5types2IDE\", \"clang::driver::DsymutilJobAction::DsymutilJobAction(llvm::SmallVector<clang::driver::Action*, 3u>&, clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver17DsymutilJobActionD1Ev\", \"clang::driver::DsymutilJobAction::~DsymutilJobAction()\"},\n    {\"_ZN5clang6driver17DsymutilJobActionD0Ev\", \"clang::driver::DsymutilJobAction::~DsymutilJobAction()\"},\n    {\"_ZN5clang6driver13LipoJobActionD1Ev\", \"clang::driver::LipoJobAction::~LipoJobAction()\"},\n    {\"_ZN5clang6driver13LipoJobActionD0Ev\", \"clang::driver::LipoJobAction::~LipoJobAction()\"},\n    {\"_ZN5clang6driver13LinkJobActionD1Ev\", \"clang::driver::LinkJobAction::~LinkJobAction()\"},\n    {\"_ZN5clang6driver13LinkJobActionD0Ev\", \"clang::driver::LinkJobAction::~LinkJobAction()\"},\n    {\"_ZN5clang6driver17AssembleJobActionD1Ev\", \"clang::driver::AssembleJobAction::~AssembleJobAction()\"},\n    {\"_ZN5clang6driver17AssembleJobActionD0Ev\", \"clang::driver::AssembleJobAction::~AssembleJobAction()\"},\n    {\"_ZN5clang6driver16CompileJobActionD1Ev\", \"clang::driver::CompileJobAction::~CompileJobAction()\"},\n    {\"_ZN5clang6driver16CompileJobActionD0Ev\", \"clang::driver::CompileJobAction::~CompileJobAction()\"},\n    {\"_ZN5clang6driver16AnalyzeJobActionD1Ev\", \"clang::driver::AnalyzeJobAction::~AnalyzeJobAction()\"},\n    {\"_ZN5clang6driver16AnalyzeJobActionD0Ev\", \"clang::driver::AnalyzeJobAction::~AnalyzeJobAction()\"},\n    {\"_ZN5clang6driver19PrecompileJobActionD1Ev\", \"clang::driver::PrecompileJobAction::~PrecompileJobAction()\"},\n    {\"_ZN5clang6driver19PrecompileJobActionD0Ev\", \"clang::driver::PrecompileJobAction::~PrecompileJobAction()\"},\n    {\"_ZN5clang6driver19PreprocessJobActionD1Ev\", \"clang::driver::PreprocessJobAction::~PreprocessJobAction()\"},\n    {\"_ZN5clang6driver19PreprocessJobActionD0Ev\", \"clang::driver::PreprocessJobAction::~PreprocessJobAction()\"},\n    {\"_ZN5clang6driver9JobActionD1Ev\", \"clang::driver::JobAction::~JobAction()\"},\n    {\"_ZN5clang6driver9JobActionD0Ev\", \"clang::driver::JobAction::~JobAction()\"},\n    {\"_ZN5clang6driver14BindArchActionD1Ev\", \"clang::driver::BindArchAction::~BindArchAction()\"},\n    {\"_ZN5clang6driver14BindArchActionD0Ev\", \"clang::driver::BindArchAction::~BindArchAction()\"},\n    {\"_ZN5clang6driver11InputActionD1Ev\", \"clang::driver::InputAction::~InputAction()\"},\n    {\"_ZN5clang6driver11InputActionD0Ev\", \"clang::driver::InputAction::~InputAction()\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang6driver6ActionEEaSERKS5_\", \"llvm::SmallVectorImpl<clang::driver::Action*>::operator=(llvm::SmallVectorImpl<clang::driver::Action*> const&)\"},\n    {\"_ZN5clang6driver3ArgC1EPKNS0_6OptionEjPKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgC2EPKNS0_6OptionEjPKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgC1EPKNS0_6OptionEjPKcPKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, char const*, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgC2EPKNS0_6OptionEjPKcPKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, char const*, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgC1EPKNS0_6OptionEjPKcS6_PKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, char const*, char const*, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgC2EPKNS0_6OptionEjPKcS6_PKS1_\", \"clang::driver::Arg::Arg(clang::driver::Option const*, unsigned int, char const*, char const*, clang::driver::Arg const*)\"},\n    {\"_ZN5clang6driver3ArgD1Ev\", \"clang::driver::Arg::~Arg()\"},\n    {\"_ZN5clang6driver3ArgD2Ev\", \"clang::driver::Arg::~Arg()\"},\n    {\"_ZNK5clang6driver3Arg4dumpEv\", \"clang::driver::Arg::dump() const\"},\n    {\"_ZNK5clang6driver3Arg11getAsStringERKNS0_7ArgListE\", \"clang::driver::Arg::getAsString(clang::driver::ArgList const&) const\"},\n    {\"_ZNK5clang6driver3Arg6renderERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::Arg::render(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver3Arg13renderAsInputERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::Arg::renderAsInput(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZN5clang6driver12arg_iterator13SkipToNextArgEv\", \"clang::driver::arg_iterator::SkipToNextArg()\"},\n    {\"_ZN5clang6driver7ArgListC1Ev\", \"clang::driver::ArgList::ArgList()\"},\n    {\"_ZN5clang6driver7ArgListC2Ev\", \"clang::driver::ArgList::ArgList()\"},\n    {\"_ZN5clang6driver7ArgListD0Ev\", \"clang::driver::ArgList::~ArgList()\"},\n    {\"_ZN5clang6driver7ArgListD1Ev\", \"clang::driver::ArgList::~ArgList()\"},\n    {\"_ZN5clang6driver7ArgListD2Ev\", \"clang::driver::ArgList::~ArgList()\"},\n    {\"_ZN5clang6driver7ArgList6appendEPNS0_3ArgE\", \"clang::driver::ArgList::append(clang::driver::Arg*)\"},\n    {\"_ZNK5clang6driver7ArgList17getLastArgNoClaimENS0_12OptSpecifierE\", \"clang::driver::ArgList::getLastArgNoClaim(clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10getLastArgENS0_12OptSpecifierE\", \"clang::driver::ArgList::getLastArg(clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10getLastArgENS0_12OptSpecifierES2_\", \"clang::driver::ArgList::getLastArg(clang::driver::OptSpecifier, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10getLastArgENS0_12OptSpecifierES2_S2_\", \"clang::driver::ArgList::getLastArg(clang::driver::OptSpecifier, clang::driver::OptSpecifier, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10getLastArgENS0_12OptSpecifierES2_S2_S2_\", \"clang::driver::ArgList::getLastArg(clang::driver::OptSpecifier, clang::driver::OptSpecifier, clang::driver::OptSpecifier, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList7hasFlagENS0_12OptSpecifierES2_b\", \"clang::driver::ArgList::hasFlag(clang::driver::OptSpecifier, clang::driver::OptSpecifier, bool) const\"},\n    {\"_ZNK5clang6driver7ArgList15getLastArgValueENS0_12OptSpecifierEN4llvm9StringRefE\", \"clang::driver::ArgList::getLastArgValue(clang::driver::OptSpecifier, llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver7ArgList18getLastArgIntValueENS0_12OptSpecifierEiRNS_10DiagnosticE\", \"clang::driver::ArgList::getLastArgIntValue(clang::driver::OptSpecifier, int, clang::Diagnostic&) const\"},\n    {\"_ZNK5clang6driver7ArgList15getAllArgValuesENS0_12OptSpecifierE\", \"clang::driver::ArgList::getAllArgValues(clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList15AddAllArgValuesERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierES8_S8_\", \"clang::driver::ArgList::AddAllArgValues(llvm::SmallVector<char const*, 16u>&, clang::driver::OptSpecifier, clang::driver::OptSpecifier, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10AddLastArgERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierE\", \"clang::driver::ArgList::AddLastArg(llvm::SmallVector<char const*, 16u>&, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList10AddAllArgsERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierES8_S8_\", \"clang::driver::ArgList::AddAllArgs(llvm::SmallVector<char const*, 16u>&, clang::driver::OptSpecifier, clang::driver::OptSpecifier, clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList20AddAllArgsTranslatedERN4llvm11SmallVectorIPKcLj16EEENS0_12OptSpecifierES5_b\", \"clang::driver::ArgList::AddAllArgsTranslated(llvm::SmallVector<char const*, 16u>&, clang::driver::OptSpecifier, char const*, bool) const\"},\n    {\"_ZNK5clang6driver7ArgList13MakeArgStringERKN4llvm5TwineE\", \"clang::driver::ArgList::MakeArgString(llvm::Twine const&) const\"},\n    {\"_ZNK5clang6driver7ArgList12ClaimAllArgsENS0_12OptSpecifierE\", \"clang::driver::ArgList::ClaimAllArgs(clang::driver::OptSpecifier) const\"},\n    {\"_ZNK5clang6driver7ArgList24GetOrMakeJoinedArgStringEjN4llvm9StringRefES3_\", \"clang::driver::ArgList::GetOrMakeJoinedArgString(unsigned int, llvm::StringRef, llvm::StringRef) const\"},\n    {\"_ZN5clang6driver12InputArgListC1EPKPKcS5_\", \"clang::driver::InputArgList::InputArgList(char const* const*, char const* const*)\"},\n    {\"_ZN5clang6driver12InputArgListC2EPKPKcS5_\", \"clang::driver::InputArgList::InputArgList(char const* const*, char const* const*)\"},\n    {\"_ZN5clang6driver12InputArgListD0Ev\", \"clang::driver::InputArgList::~InputArgList()\"},\n    {\"_ZN5clang6driver12InputArgListD1Ev\", \"clang::driver::InputArgList::~InputArgList()\"},\n    {\"_ZN5clang6driver12InputArgListD2Ev\", \"clang::driver::InputArgList::~InputArgList()\"},\n    {\"_ZNK5clang6driver12InputArgList9MakeIndexEN4llvm9StringRefE\", \"clang::driver::InputArgList::MakeIndex(llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver12InputArgList9MakeIndexEN4llvm9StringRefES3_\", \"clang::driver::InputArgList::MakeIndex(llvm::StringRef, llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver12InputArgList13MakeArgStringEN4llvm9StringRefE\", \"clang::driver::InputArgList::MakeArgString(llvm::StringRef) const\"},\n    {\"_ZN5clang6driver14DerivedArgListC1ERKNS0_12InputArgListE\", \"clang::driver::DerivedArgList::DerivedArgList(clang::driver::InputArgList const&)\"},\n    {\"_ZN5clang6driver14DerivedArgListC2ERKNS0_12InputArgListE\", \"clang::driver::DerivedArgList::DerivedArgList(clang::driver::InputArgList const&)\"},\n    {\"_ZN5clang6driver14DerivedArgListD0Ev\", \"clang::driver::DerivedArgList::~DerivedArgList()\"},\n    {\"_ZN5clang6driver14DerivedArgListD1Ev\", \"clang::driver::DerivedArgList::~DerivedArgList()\"},\n    {\"_ZN5clang6driver14DerivedArgListD2Ev\", \"clang::driver::DerivedArgList::~DerivedArgList()\"},\n    {\"_ZNK5clang6driver14DerivedArgList13MakeArgStringEN4llvm9StringRefE\", \"clang::driver::DerivedArgList::MakeArgString(llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver14DerivedArgList11MakeFlagArgEPKNS0_3ArgEPKNS0_6OptionE\", \"clang::driver::DerivedArgList::MakeFlagArg(clang::driver::Arg const*, clang::driver::Option const*) const\"},\n    {\"_ZNK5clang6driver14DerivedArgList17MakePositionalArgEPKNS0_3ArgEPKNS0_6OptionEN4llvm9StringRefE\", \"clang::driver::DerivedArgList::MakePositionalArg(clang::driver::Arg const*, clang::driver::Option const*, llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver14DerivedArgList15MakeSeparateArgEPKNS0_3ArgEPKNS0_6OptionEN4llvm9StringRefE\", \"clang::driver::DerivedArgList::MakeSeparateArg(clang::driver::Arg const*, clang::driver::Option const*, llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver14DerivedArgList13MakeJoinedArgEPKNS0_3ArgEPKNS0_6OptionEN4llvm9StringRefE\", \"clang::driver::DerivedArgList::MakeJoinedArg(clang::driver::Arg const*, clang::driver::Option const*, llvm::StringRef) const\"},\n    {\"_ZNK5clang6driver12InputArgList12getArgStringEj\", \"clang::driver::InputArgList::getArgString(unsigned int) const\"},\n    {\"_ZNK5clang6driver12InputArgList21getNumInputArgStringsEv\", \"clang::driver::InputArgList::getNumInputArgStrings() const\"},\n    {\"_ZNK5clang6driver14DerivedArgList12getArgStringEj\", \"clang::driver::DerivedArgList::getArgString(unsigned int) const\"},\n    {\"_ZNK5clang6driver14DerivedArgList21getNumInputArgStringsEv\", \"clang::driver::DerivedArgList::getNumInputArgStrings() const\"},\n    {\"_ZNSt6vectorISsSaISsEE22_M_initialize_dispatchIPPKcEEvT_S6_St12__false_type\", \"void std::vector<std::string, std::allocator<std::string> >::_M_initialize_dispatch<char const**>(char const**, char const**, std::__false_type)\"},\n    {\"_ZN5clang6driver19createCC1AsOptTableEv\", \"clang::driver::createCC1AsOptTable()\"},\n    {\"_ZN5clang6driver17createCC1OptTableEv\", \"clang::driver::createCC1OptTable()\"},\n    {\"_ZN5clang6driver11CompilationC1ERKNS0_6DriverERKNS0_9ToolChainEPNS0_12InputArgListEPNS0_14DerivedArgListE\", \"clang::driver::Compilation::Compilation(clang::driver::Driver const&, clang::driver::ToolChain const&, clang::driver::InputArgList*, clang::driver::DerivedArgList*)\"},\n    {\"_ZN5clang6driver11CompilationC2ERKNS0_6DriverERKNS0_9ToolChainEPNS0_12InputArgListEPNS0_14DerivedArgListE\", \"clang::driver::Compilation::Compilation(clang::driver::Driver const&, clang::driver::ToolChain const&, clang::driver::InputArgList*, clang::driver::DerivedArgList*)\"},\n    {\"_ZN5clang6driver11CompilationD1Ev\", \"clang::driver::Compilation::~Compilation()\"},\n    {\"_ZN5clang6driver11CompilationD2Ev\", \"clang::driver::Compilation::~Compilation()\"},\n    {\"_ZN5clang6driver11Compilation19getArgsForToolChainEPKNS0_9ToolChainEPKc\", \"clang::driver::Compilation::getArgsForToolChain(clang::driver::ToolChain const*, char const*)\"},\n    {\"_ZNK5clang6driver11Compilation8PrintJobERN4llvm11raw_ostreamERKNS0_3JobEPKcb\", \"clang::driver::Compilation::PrintJob(llvm::raw_ostream&, clang::driver::Job const&, char const*, bool) const\"},\n    {\"_ZNK5clang6driver11Compilation15CleanupFileListERKN4llvm11SmallVectorIPKcLj16EEEb\", \"clang::driver::Compilation::CleanupFileList(llvm::SmallVector<char const*, 16u> const&, bool) const\"},\n    {\"_ZNK5clang6driver11Compilation14ExecuteCommandERKNS0_7CommandERPS3_\", \"clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const\"},\n    {\"_ZNK5clang6driver11Compilation10ExecuteJobERKNS0_3JobERPKNS0_7CommandE\", \"clang::driver::Compilation::ExecuteJob(clang::driver::Job const&, clang::driver::Command const*&) const\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPKN5clang6driver9ToolChainEPKcEPNS3_14DerivedArgListENS_12DenseMapInfoIS9_EENSC_ISB_EEE15LookupBucketForERKS9_RPS1_IS9_SB_E\", \"llvm::DenseMap<std::pair<clang::driver::ToolChain const*, char const*>, clang::driver::DerivedArgList*, llvm::DenseMapInfo<std::pair<clang::driver::ToolChain const*, char const*> >, llvm::DenseMapInfo<clang::driver::DerivedArgList*> >::LookupBucketFor(std::pair<clang::driver::ToolChain const*, char const*> const&, std::pair<std::pair<clang::driver::ToolChain const*, char const*>, clang::driver::DerivedArgList*>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang6driver9ToolChainEPKcEPNS3_14DerivedArgListENS_12DenseMapInfoIS9_EENSC_ISB_EEE16InsertIntoBucketERKS9_RKSB_PS1_IS9_SB_E\", \"llvm::DenseMap<std::pair<clang::driver::ToolChain const*, char const*>, clang::driver::DerivedArgList*, llvm::DenseMapInfo<std::pair<clang::driver::ToolChain const*, char const*> >, llvm::DenseMapInfo<clang::driver::DerivedArgList*> >::InsertIntoBucket(std::pair<clang::driver::ToolChain const*, char const*> const&, clang::driver::DerivedArgList* const&, std::pair<std::pair<clang::driver::ToolChain const*, char const*>, clang::driver::DerivedArgList*>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang6driver9ToolChainEPKcEPNS3_14DerivedArgListENS_12DenseMapInfoIS9_EENSC_ISB_EEE4growEj\", \"llvm::DenseMap<std::pair<clang::driver::ToolChain const*, char const*>, clang::driver::DerivedArgList*, llvm::DenseMapInfo<std::pair<clang::driver::ToolChain const*, char const*> >, llvm::DenseMapInfo<clang::driver::DerivedArgList*> >::grow(unsigned int)\"},\n    {\"_ZN5clang6driver6DriverC1EN4llvm9StringRefES3_S3_bbRNS_10DiagnosticE\", \"clang::driver::Driver::Driver(llvm::StringRef, llvm::StringRef, llvm::StringRef, bool, bool, clang::Diagnostic&)\"},\n    {\"_ZN5clang6driver6DriverC2EN4llvm9StringRefES3_S3_bbRNS_10DiagnosticE\", \"clang::driver::Driver::Driver(llvm::StringRef, llvm::StringRef, llvm::StringRef, bool, bool, clang::Diagnostic&)\"},\n    {\"_ZN5clang6driver6DriverD1Ev\", \"clang::driver::Driver::~Driver()\"},\n    {\"_ZN5clang6driver6DriverD2Ev\", \"clang::driver::Driver::~Driver()\"},\n    {\"_ZN5clang6driver6Driver15ParseArgStringsEPPKcS4_\", \"clang::driver::Driver::ParseArgStrings(char const**, char const**)\"},\n    {\"_ZNK5clang6driver6Driver18TranslateInputArgsERKNS0_12InputArgListE\", \"clang::driver::Driver::TranslateInputArgs(clang::driver::InputArgList const&) const\"},\n    {\"_ZN5clang6driver6Driver16BuildCompilationEiPPKc\", \"clang::driver::Driver::BuildCompilation(int, char const**)\"},\n    {\"_ZNK5clang6driver6Driver11GetHostInfoEPKc\", \"clang::driver::Driver::GetHostInfo(char const*) const\"},\n    {\"_ZNK5clang6driver6Driver12PrintOptionsERKNS0_7ArgListE\", \"clang::driver::Driver::PrintOptions(clang::driver::ArgList const&) const\"},\n    {\"_ZN5clang6driver6Driver19HandleImmediateArgsERKNS0_11CompilationE\", \"clang::driver::Driver::HandleImmediateArgs(clang::driver::Compilation const&)\"},\n    {\"_ZNK5clang6driver6Driver21BuildUniversalActionsERKNS0_9ToolChainERKNS0_7ArgListERN4llvm11SmallVectorIPNS0_6ActionELj3EEE\", \"clang::driver::Driver::BuildUniversalActions(clang::driver::ToolChain const&, clang::driver::ArgList const&, llvm::SmallVector<clang::driver::Action*, 3u>&) const\"},\n    {\"_ZNK5clang6driver6Driver12BuildActionsERKNS0_9ToolChainERKNS0_7ArgListERN4llvm11SmallVectorIPNS0_6ActionELj3EEE\", \"clang::driver::Driver::BuildActions(clang::driver::ToolChain const&, clang::driver::ArgList const&, llvm::SmallVector<clang::driver::Action*, 3u>&) const\"},\n    {\"_ZNK5clang6driver6Driver12PrintActionsERKNS0_11CompilationE\", \"clang::driver::Driver::PrintActions(clang::driver::Compilation const&) const\"},\n    {\"_ZNK5clang6driver6Driver9BuildJobsERNS0_11CompilationE\", \"clang::driver::Driver::BuildJobs(clang::driver::Compilation&) const\"},\n    {\"_ZNK5clang6driver6Driver18ExecuteCompilationERKNS0_11CompilationE\", \"clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation const&) const\"},\n    {\"_ZNK5clang6driver6Driver9PrintHelpEb\", \"clang::driver::Driver::PrintHelp(bool) const\"},\n    {\"_ZNK5clang6driver6Driver12PrintVersionERKNS0_11CompilationERN4llvm11raw_ostreamE\", \"clang::driver::Driver::PrintVersion(clang::driver::Compilation const&, llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang6driver6Driver11GetFilePathEPKcRKNS0_9ToolChainE\", \"clang::driver::Driver::GetFilePath(char const*, clang::driver::ToolChain const&) const\"},\n    {\"_ZNK5clang6driver6Driver14GetProgramPathEPKcRKNS0_9ToolChainEb\", \"clang::driver::Driver::GetProgramPath(char const*, clang::driver::ToolChain const&, bool) const\"},\n    {\"_Z13PrintActions1RKN5clang6driver11CompilationEPNS0_6ActionERSt3mapIS5_jSt4lessIS5_ESaISt4pairIKS5_jEEE\", \"PrintActions1(clang::driver::Compilation const&, clang::driver::Action*, std::map<clang::driver::Action*, unsigned int, std::less<clang::driver::Action*>, std::allocator<std::pair<clang::driver::Action* const, unsigned int> > >&)\"},\n    {\"_Z21ContainsCompileActionPKN5clang6driver6ActionE\", \"ContainsCompileAction(clang::driver::Action const*)\"},\n    {\"_ZNK5clang6driver6Driver20ConstructPhaseActionERKNS0_7ArgListENS0_6phases2IDEPNS0_6ActionE\", \"clang::driver::Driver::ConstructPhaseAction(clang::driver::ArgList const&, clang::driver::phases::ID, clang::driver::Action*) const\"},\n    {\"_ZNK5clang6driver6Driver18BuildJobsForActionERNS0_11CompilationEPKNS0_6ActionEPKNS0_9ToolChainEPKcbSB_RNS0_9InputInfoE\", \"clang::driver::Driver::BuildJobsForAction(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, char const*, bool, char const*, clang::driver::InputInfo&) const\"},\n    {\"_ZNK5clang6driver6Driver18GetNamedOutputPathERNS0_11CompilationERKNS0_9JobActionEPKcb\", \"clang::driver::Driver::GetNamedOutputPath(clang::driver::Compilation&, clang::driver::JobAction const&, char const*, bool) const\"},\n    {\"_ZNK5clang6driver6Driver16GetTemporaryPathEPKc\", \"clang::driver::Driver::GetTemporaryPath(char const*) const\"},\n    {\"_ZNK5clang6driver6Driver22ShouldUseClangCompilerERKNS0_11CompilationERKNS0_9JobActionERKN4llvm6TripleE\", \"clang::driver::Driver::ShouldUseClangCompiler(clang::driver::Compilation const&, clang::driver::JobAction const&, llvm::Triple const&) const\"},\n    {\"_ZN5clang6driver6Driver17GetReleaseVersionEPKcRjS4_S4_Rb\", \"clang::driver::Driver::GetReleaseVersion(char const*, unsigned int&, unsigned int&, unsigned int&, bool&)\"},\n    {\"_ZN4llvm22PrettyStackTraceStringD1Ev\", \"llvm::PrettyStackTraceString::~PrettyStackTraceString()\"},\n    {\"_ZN4llvm9StringSetINS_15MallocAllocatorEE6insertENS_9StringRefE\", \"llvm::StringSet<llvm::MallocAllocator>::insert(llvm::StringRef)\"},\n    {\"_ZNK5clang6driver9InputInfo11getAsStringEv\", \"clang::driver::InputInfo::getAsString() const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang6driver9InputInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::driver::InputInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISsLb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::string, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm6Triple8ArchTypeES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::Triple::ArchType, llvm::Triple::ArchType, std::_Identity<llvm::Triple::ArchType>, std::less<llvm::Triple::ArchType>, std::allocator<llvm::Triple::ArchType> >::_M_erase(std::_Rb_tree_node<llvm::Triple::ArchType>*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm6Triple8ArchTypeES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<llvm::Triple::ArchType, llvm::Triple::ArchType, std::_Identity<llvm::Triple::ArchType>, std::less<llvm::Triple::ArchType>, std::allocator<llvm::Triple::ArchType> >::_M_insert_unique(llvm::Triple::ArchType const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang6driver6ActionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<clang::driver::Action*, std::pair<clang::driver::Action* const, unsigned int>, std::_Select1st<std::pair<clang::driver::Action* const, unsigned int> >, std::less<clang::driver::Action*>, std::allocator<std::pair<clang::driver::Action* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::driver::Action* const, unsigned int> >*)\"},\n    {\"_ZNK4llvm18raw_string_ostream11current_posEv\", \"llvm::raw_string_ostream::current_pos() const\"},\n    {\"_ZNSt8_Rb_treeIPN5clang6driver6ActionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<clang::driver::Action*, std::pair<clang::driver::Action* const, unsigned int>, std::_Select1st<std::pair<clang::driver::Action* const, unsigned int> >, std::less<clang::driver::Action*>, std::allocator<std::pair<clang::driver::Action* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::driver::Action* const, unsigned int> >, std::pair<clang::driver::Action* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang6driver6ActionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<clang::driver::Action*, std::pair<clang::driver::Action* const, unsigned int>, std::_Select1st<std::pair<clang::driver::Action* const, unsigned int> >, std::less<clang::driver::Action*>, std::allocator<std::pair<clang::driver::Action* const, unsigned int> > >::_M_insert_unique(std::pair<clang::driver::Action* const, unsigned int> const&)\"},\n    {\"_ZN4llvm6TripleC2ENS_9StringRefES1_S1_\", \"llvm::Triple::Triple(llvm::StringRef, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm22PrettyStackTraceStringD0Ev\", \"llvm::PrettyStackTraceString::~PrettyStackTraceString()\"},\n    {\"_ZN5clang6driver20createDriverOptTableEv\", \"clang::driver::createDriverOptTable()\"},\n    {\"_ZN5clang6driver8HostInfoC1ERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::HostInfo::HostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver8HostInfoC2ERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::HostInfo::HostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver8HostInfoD0Ev\", \"clang::driver::HostInfo::~HostInfo()\"},\n    {\"_ZN5clang6driver8HostInfoD1Ev\", \"clang::driver::HostInfo::~HostInfo()\"},\n    {\"_ZN5clang6driver8HostInfoD2Ev\", \"clang::driver::HostInfo::~HostInfo()\"},\n    {\"_ZN5clang6driver22createAuroraUXHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createAuroraUXHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver20createDarwinHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createDarwinHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver21createOpenBSDHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createOpenBSDHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver21createFreeBSDHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createFreeBSDHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver20createNetBSDHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createNetBSDHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver19createMinixHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createMinixHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver23createDragonFlyHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createDragonFlyHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver19createLinuxHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createLinuxHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver17createTCEHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createTCEHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver21createWindowsHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createWindowsHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver19createMinGWHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createMinGWHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver21createUnknownHostInfoERKNS0_6DriverERKN4llvm6TripleE\", \"clang::driver::createUnknownHostInfo(clang::driver::Driver const&, llvm::Triple const&)\"},\n    {\"_ZN12_GLOBAL__N_115UnknownHostInfoD1Ev\", \"(anonymous namespace)::UnknownHostInfo::~UnknownHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_115UnknownHostInfoD0Ev\", \"(anonymous namespace)::UnknownHostInfo::~UnknownHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115UnknownHostInfo15useDriverDriverEv\", \"(anonymous namespace)::UnknownHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_115UnknownHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::UnknownHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_115UnknownHostInfoD2Ev\", \"(anonymous namespace)::UnknownHostInfo::~UnknownHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_113MinGWHostInfoD1Ev\", \"(anonymous namespace)::MinGWHostInfo::~MinGWHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_113MinGWHostInfoD0Ev\", \"(anonymous namespace)::MinGWHostInfo::~MinGWHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_115WindowsHostInfoD1Ev\", \"(anonymous namespace)::WindowsHostInfo::~WindowsHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_115WindowsHostInfoD0Ev\", \"(anonymous namespace)::WindowsHostInfo::~WindowsHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115WindowsHostInfo15useDriverDriverEv\", \"(anonymous namespace)::WindowsHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_115WindowsHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::WindowsHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK12_GLOBAL__N_115WindowsHostInfo22lookupTypeForExtensionEPKc\", \"(anonymous namespace)::WindowsHostInfo::lookupTypeForExtension(char const*) const\"},\n    {\"_ZN12_GLOBAL__N_111TCEHostInfoD1Ev\", \"(anonymous namespace)::TCEHostInfo::~TCEHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_111TCEHostInfoD0Ev\", \"(anonymous namespace)::TCEHostInfo::~TCEHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_111TCEHostInfo15useDriverDriverEv\", \"(anonymous namespace)::TCEHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_111TCEHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::TCEHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_113LinuxHostInfoD1Ev\", \"(anonymous namespace)::LinuxHostInfo::~LinuxHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_113LinuxHostInfoD0Ev\", \"(anonymous namespace)::LinuxHostInfo::~LinuxHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113LinuxHostInfo15useDriverDriverEv\", \"(anonymous namespace)::LinuxHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_113LinuxHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::LinuxHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_117DragonFlyHostInfoD1Ev\", \"(anonymous namespace)::DragonFlyHostInfo::~DragonFlyHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_117DragonFlyHostInfoD0Ev\", \"(anonymous namespace)::DragonFlyHostInfo::~DragonFlyHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117DragonFlyHostInfo15useDriverDriverEv\", \"(anonymous namespace)::DragonFlyHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_117DragonFlyHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::DragonFlyHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_113MinixHostInfoD1Ev\", \"(anonymous namespace)::MinixHostInfo::~MinixHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_113MinixHostInfoD0Ev\", \"(anonymous namespace)::MinixHostInfo::~MinixHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113MinixHostInfo15useDriverDriverEv\", \"(anonymous namespace)::MinixHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_113MinixHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::MinixHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_114NetBSDHostInfoD1Ev\", \"(anonymous namespace)::NetBSDHostInfo::~NetBSDHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_114NetBSDHostInfoD0Ev\", \"(anonymous namespace)::NetBSDHostInfo::~NetBSDHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_114NetBSDHostInfo15useDriverDriverEv\", \"(anonymous namespace)::NetBSDHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_114NetBSDHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::NetBSDHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_115FreeBSDHostInfoD1Ev\", \"(anonymous namespace)::FreeBSDHostInfo::~FreeBSDHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_115FreeBSDHostInfoD0Ev\", \"(anonymous namespace)::FreeBSDHostInfo::~FreeBSDHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115FreeBSDHostInfo15useDriverDriverEv\", \"(anonymous namespace)::FreeBSDHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_115FreeBSDHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::FreeBSDHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_115OpenBSDHostInfoD1Ev\", \"(anonymous namespace)::OpenBSDHostInfo::~OpenBSDHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_115OpenBSDHostInfoD0Ev\", \"(anonymous namespace)::OpenBSDHostInfo::~OpenBSDHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115OpenBSDHostInfo15useDriverDriverEv\", \"(anonymous namespace)::OpenBSDHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_115OpenBSDHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::OpenBSDHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_114DarwinHostInfoD1Ev\", \"(anonymous namespace)::DarwinHostInfo::~DarwinHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_114DarwinHostInfoD0Ev\", \"(anonymous namespace)::DarwinHostInfo::~DarwinHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_114DarwinHostInfo15useDriverDriverEv\", \"(anonymous namespace)::DarwinHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_114DarwinHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::DarwinHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_116AuroraUXHostInfoD1Ev\", \"(anonymous namespace)::AuroraUXHostInfo::~AuroraUXHostInfo()\"},\n    {\"_ZN12_GLOBAL__N_116AuroraUXHostInfoD0Ev\", \"(anonymous namespace)::AuroraUXHostInfo::~AuroraUXHostInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116AuroraUXHostInfo15useDriverDriverEv\", \"(anonymous namespace)::AuroraUXHostInfo::useDriverDriver() const\"},\n    {\"_ZNK12_GLOBAL__N_116AuroraUXHostInfo15CreateToolChainERKN5clang6driver7ArgListEPKc\", \"(anonymous namespace)::AuroraUXHostInfo::CreateToolChain(clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN4llvm9StringMapIPN5clang6driver9ToolChainENS_15MallocAllocatorEE16GetOrCreateValueIS4_EERNS_14StringMapEntryIS4_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::driver::ToolChain*>& llvm::StringMap<clang::driver::ToolChain*, llvm::MallocAllocator>::GetOrCreateValue<clang::driver::ToolChain*>(llvm::StringRef, clang::driver::ToolChain*)\"},\n    {\"_ZNK5clang6driver9ToolChain13TranslateArgsERKNS0_14DerivedArgListEPKc\", \"clang::driver::ToolChain::TranslateArgs(clang::driver::DerivedArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver9ToolChain15IsBlocksDefaultEv\", \"clang::driver::ToolChain::IsBlocksDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain28IsIntegratedAssemblerDefaultEv\", \"clang::driver::ToolChain::IsIntegratedAssemblerDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain23IsStrictAliasingDefaultEv\", \"clang::driver::ToolChain::IsStrictAliasingDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain35IsObjCDefaultSynthPropertiesDefaultEv\", \"clang::driver::ToolChain::IsObjCDefaultSynthPropertiesDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain26IsObjCNonFragileABIDefaultEv\", \"clang::driver::ToolChain::IsObjCNonFragileABIDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain27IsObjCLegacyDispatchDefaultEv\", \"clang::driver::ToolChain::IsObjCLegacyDispatchDefault() const\"},\n    {\"_ZNK5clang6driver9ToolChain20UseObjCMixedDispatchEv\", \"clang::driver::ToolChain::UseObjCMixedDispatch() const\"},\n    {\"_ZNK5clang6driver9ToolChain29GetDefaultStackProtectorLevelEv\", \"clang::driver::ToolChain::GetDefaultStackProtectorLevel() const\"},\n    {\"_ZNK5clang6driver10toolchains18Darwin_Generic_GCC25GetDefaultRelocationModelEv\", \"clang::driver::toolchains::Darwin_Generic_GCC::GetDefaultRelocationModel() const\"},\n    {\"_ZNK5clang6driver9ToolChain14SupportsObjCGCEv\", \"clang::driver::ToolChain::SupportsObjCGC() const\"},\n    {\"_ZNK5clang6driver9ToolChain18UseDwarfDebugFlagsEv\", \"clang::driver::ToolChain::UseDwarfDebugFlags() const\"},\n    {\"_ZNK5clang6driver9ToolChain17UseSjLjExceptionsEv\", \"clang::driver::ToolChain::UseSjLjExceptions() const\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang6driver9ToolChainENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PSt4pairIjS4_E\", \"llvm::DenseMap<unsigned int, clang::driver::ToolChain*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::driver::ToolChain*> >::InsertIntoBucket(unsigned int const&, clang::driver::ToolChain* const&, std::pair<unsigned int, clang::driver::ToolChain*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang6driver9ToolChainENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, clang::driver::ToolChain*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::driver::ToolChain*> >::grow(unsigned int)\"},\n    {\"_ZN5clang6driver3JobD0Ev\", \"clang::driver::Job::~Job()\"},\n    {\"_ZN5clang6driver3JobD1Ev\", \"clang::driver::Job::~Job()\"},\n    {\"_ZN5clang6driver3JobD2Ev\", \"clang::driver::Job::~Job()\"},\n    {\"_ZN5clang6driver7CommandC1ERKNS0_6ActionERKNS0_4ToolEPKcRKN4llvm11SmallVectorIS9_Lj16EEE\", \"clang::driver::Command::Command(clang::driver::Action const&, clang::driver::Tool const&, char const*, llvm::SmallVector<char const*, 16u> const&)\"},\n    {\"_ZN5clang6driver7CommandC2ERKNS0_6ActionERKNS0_4ToolEPKcRKN4llvm11SmallVectorIS9_Lj16EEE\", \"clang::driver::Command::Command(clang::driver::Action const&, clang::driver::Tool const&, char const*, llvm::SmallVector<char const*, 16u> const&)\"},\n    {\"_ZN5clang6driver7JobListC1Ev\", \"clang::driver::JobList::JobList()\"},\n    {\"_ZN5clang6driver7JobListC2Ev\", \"clang::driver::JobList::JobList()\"},\n    {\"_ZN5clang6driver7JobListD0Ev\", \"clang::driver::JobList::~JobList()\"},\n    {\"_ZN5clang6driver7JobListD1Ev\", \"clang::driver::JobList::~JobList()\"},\n    {\"_ZN5clang6driver7JobListD2Ev\", \"clang::driver::JobList::~JobList()\"},\n    {\"_ZN5clang6driver3Job10addCommandEPNS0_7CommandE\", \"clang::driver::Job::addCommand(clang::driver::Command*)\"},\n    {\"_ZN5clang6driver7CommandD1Ev\", \"clang::driver::Command::~Command()\"},\n    {\"_ZN5clang6driver7CommandD0Ev\", \"clang::driver::Command::~Command()\"},\n    {\"_ZN4llvm15SmallVectorImplIPKcEaSERKS3_\", \"llvm::SmallVectorImpl<char const*>::operator=(llvm::SmallVectorImpl<char const*> const&)\"},\n    {\"_ZN5clang6driver12OptSpecifierC1EPKNS0_6OptionE\", \"clang::driver::OptSpecifier::OptSpecifier(clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver12OptSpecifierC2EPKNS0_6OptionE\", \"clang::driver::OptSpecifier::OptSpecifier(clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver8OptTableC1EPKNS1_4InfoEj\", \"clang::driver::OptTable::OptTable(clang::driver::OptTable::Info const*, unsigned int)\"},\n    {\"_ZN5clang6driver8OptTableC2EPKNS1_4InfoEj\", \"clang::driver::OptTable::OptTable(clang::driver::OptTable::Info const*, unsigned int)\"},\n    {\"_ZN5clang6driver8OptTableD1Ev\", \"clang::driver::OptTable::~OptTable()\"},\n    {\"_ZN5clang6driver8OptTableD2Ev\", \"clang::driver::OptTable::~OptTable()\"},\n    {\"_ZNK5clang6driver8OptTable12CreateOptionEj\", \"clang::driver::OptTable::CreateOption(unsigned int) const\"},\n    {\"_ZNK5clang6driver8OptTable11ParseOneArgERKNS0_7ArgListERj\", \"clang::driver::OptTable::ParseOneArg(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZNK5clang6driver8OptTable9ParseArgsEPKPKcS5_RjS6_\", \"clang::driver::OptTable::ParseArgs(char const* const*, char const* const*, unsigned int&, unsigned int&) const\"},\n    {\"_ZNK5clang6driver8OptTable9PrintHelpERN4llvm11raw_ostreamEPKcS6_b\", \"clang::driver::OptTable::PrintHelp(llvm::raw_ostream&, char const*, char const*, bool) const\"},\n    {\"_ZNSt3mapISsSt6vectorISt4pairISsPKcESaIS4_EESt4lessISsESaIS1_IKSsS6_EEEixERS9_\", \"std::map<std::string, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > > >::operator[](std::string const&)\"},\n    {\"_ZNSt6vectorISt4pairISsPKcESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<std::string, char const*>*, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >, std::pair<std::string, char const*> const&)\"},\n    {\"_ZNSt6vectorISt4pairISsPKcESaIS3_EEC2ERKS5_\", \"std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > >::vector(std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIS0_ISsPKcESaIS5_EEESt10_Select1stIS8_ESt4lessISsESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >, std::_Select1st<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIS0_ISsPKcESaIS5_EEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >, std::_Select1st<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIS0_ISsPKcESaIS5_EEESt10_Select1stIS8_ESt4lessISsESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >, std::_Select1st<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > > >::_M_insert_unique(std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIS0_ISsPKcESaIS5_EEESt10_Select1stIS8_ESt4lessISsESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >, std::_Select1st<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >*)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIKSsSt6vectorIS1_ISsPKcESaIS6_EEEE7destroyEPS9_\", \"__gnu_cxx::new_allocator<std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > > >::destroy(std::pair<std::string const, std::vector<std::pair<std::string, char const*>, std::allocator<std::pair<std::string, char const*> > > >*)\"},\n    {\"_ZN5clang6driver6OptionC1ENS1_11OptionClassENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKS1_\", \"clang::driver::Option::Option(clang::driver::Option::OptionClass, clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver6OptionC2ENS1_11OptionClassENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKS1_\", \"clang::driver::Option::Option(clang::driver::Option::OptionClass, clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver6OptionD0Ev\", \"clang::driver::Option::~Option()\"},\n    {\"_ZN5clang6driver6OptionD1Ev\", \"clang::driver::Option::~Option()\"},\n    {\"_ZN5clang6driver6OptionD2Ev\", \"clang::driver::Option::~Option()\"},\n    {\"_ZNK5clang6driver6Option4dumpEv\", \"clang::driver::Option::dump() const\"},\n    {\"_ZNK5clang6driver6Option7matchesENS0_12OptSpecifierE\", \"clang::driver::Option::matches(clang::driver::OptSpecifier) const\"},\n    {\"_ZN5clang6driver11OptionGroupC1ENS0_12OptSpecifierEPKcPKS1_\", \"clang::driver::OptionGroup::OptionGroup(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*)\"},\n    {\"_ZN5clang6driver11OptionGroupC2ENS0_12OptSpecifierEPKcPKS1_\", \"clang::driver::OptionGroup::OptionGroup(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*)\"},\n    {\"_ZNK5clang6driver11OptionGroup6acceptERKNS0_7ArgListERj\", \"clang::driver::OptionGroup::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver11InputOptionC1ENS0_12OptSpecifierE\", \"clang::driver::InputOption::InputOption(clang::driver::OptSpecifier)\"},\n    {\"_ZN5clang6driver11InputOptionC2ENS0_12OptSpecifierE\", \"clang::driver::InputOption::InputOption(clang::driver::OptSpecifier)\"},\n    {\"_ZNK5clang6driver11InputOption6acceptERKNS0_7ArgListERj\", \"clang::driver::InputOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver13UnknownOptionC1ENS0_12OptSpecifierE\", \"clang::driver::UnknownOption::UnknownOption(clang::driver::OptSpecifier)\"},\n    {\"_ZN5clang6driver13UnknownOptionC2ENS0_12OptSpecifierE\", \"clang::driver::UnknownOption::UnknownOption(clang::driver::OptSpecifier)\"},\n    {\"_ZNK5clang6driver13UnknownOption6acceptERKNS0_7ArgListERj\", \"clang::driver::UnknownOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver10FlagOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::FlagOption::FlagOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver10FlagOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::FlagOption::FlagOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver10FlagOption6acceptERKNS0_7ArgListERj\", \"clang::driver::FlagOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver12JoinedOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedOption::JoinedOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver12JoinedOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedOption::JoinedOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver12JoinedOption6acceptERKNS0_7ArgListERj\", \"clang::driver::JoinedOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver17CommaJoinedOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::CommaJoinedOption::CommaJoinedOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver17CommaJoinedOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::CommaJoinedOption::CommaJoinedOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver17CommaJoinedOption6acceptERKNS0_7ArgListERj\", \"clang::driver::CommaJoinedOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver14SeparateOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::SeparateOption::SeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver14SeparateOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::SeparateOption::SeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver14SeparateOption6acceptERKNS0_7ArgListERj\", \"clang::driver::SeparateOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver14MultiArgOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionEj\", \"clang::driver::MultiArgOption::MultiArgOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*, unsigned int)\"},\n    {\"_ZN5clang6driver14MultiArgOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionEj\", \"clang::driver::MultiArgOption::MultiArgOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*, unsigned int)\"},\n    {\"_ZNK5clang6driver14MultiArgOption6acceptERKNS0_7ArgListERj\", \"clang::driver::MultiArgOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver22JoinedOrSeparateOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedOrSeparateOption::JoinedOrSeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver22JoinedOrSeparateOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedOrSeparateOption::JoinedOrSeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver22JoinedOrSeparateOption6acceptERKNS0_7ArgListERj\", \"clang::driver::JoinedOrSeparateOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver23JoinedAndSeparateOptionC1ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedAndSeparateOption::JoinedAndSeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZN5clang6driver23JoinedAndSeparateOptionC2ENS0_12OptSpecifierEPKcPKNS0_11OptionGroupEPKNS0_6OptionE\", \"clang::driver::JoinedAndSeparateOption::JoinedAndSeparateOption(clang::driver::OptSpecifier, char const*, clang::driver::OptionGroup const*, clang::driver::Option const*)\"},\n    {\"_ZNK5clang6driver23JoinedAndSeparateOption6acceptERKNS0_7ArgListERj\", \"clang::driver::JoinedAndSeparateOption::accept(clang::driver::ArgList const&, unsigned int&) const\"},\n    {\"_ZN5clang6driver11OptionGroupD1Ev\", \"clang::driver::OptionGroup::~OptionGroup()\"},\n    {\"_ZN5clang6driver11OptionGroupD0Ev\", \"clang::driver::OptionGroup::~OptionGroup()\"},\n    {\"_ZN5clang6driver11InputOptionD1Ev\", \"clang::driver::InputOption::~InputOption()\"},\n    {\"_ZN5clang6driver11InputOptionD0Ev\", \"clang::driver::InputOption::~InputOption()\"},\n    {\"_ZN5clang6driver13UnknownOptionD1Ev\", \"clang::driver::UnknownOption::~UnknownOption()\"},\n    {\"_ZN5clang6driver13UnknownOptionD0Ev\", \"clang::driver::UnknownOption::~UnknownOption()\"},\n    {\"_ZN5clang6driver10FlagOptionD1Ev\", \"clang::driver::FlagOption::~FlagOption()\"},\n    {\"_ZN5clang6driver10FlagOptionD0Ev\", \"clang::driver::FlagOption::~FlagOption()\"},\n    {\"_ZN5clang6driver12JoinedOptionD1Ev\", \"clang::driver::JoinedOption::~JoinedOption()\"},\n    {\"_ZN5clang6driver12JoinedOptionD0Ev\", \"clang::driver::JoinedOption::~JoinedOption()\"},\n    {\"_ZN5clang6driver17CommaJoinedOptionD1Ev\", \"clang::driver::CommaJoinedOption::~CommaJoinedOption()\"},\n    {\"_ZN5clang6driver17CommaJoinedOptionD0Ev\", \"clang::driver::CommaJoinedOption::~CommaJoinedOption()\"},\n    {\"_ZN5clang6driver14SeparateOptionD1Ev\", \"clang::driver::SeparateOption::~SeparateOption()\"},\n    {\"_ZN5clang6driver14SeparateOptionD0Ev\", \"clang::driver::SeparateOption::~SeparateOption()\"},\n    {\"_ZN5clang6driver14MultiArgOptionD1Ev\", \"clang::driver::MultiArgOption::~MultiArgOption()\"},\n    {\"_ZN5clang6driver14MultiArgOptionD0Ev\", \"clang::driver::MultiArgOption::~MultiArgOption()\"},\n    {\"_ZN5clang6driver22JoinedOrSeparateOptionD1Ev\", \"clang::driver::JoinedOrSeparateOption::~JoinedOrSeparateOption()\"},\n    {\"_ZN5clang6driver22JoinedOrSeparateOptionD0Ev\", \"clang::driver::JoinedOrSeparateOption::~JoinedOrSeparateOption()\"},\n    {\"_ZN5clang6driver23JoinedAndSeparateOptionD1Ev\", \"clang::driver::JoinedAndSeparateOption::~JoinedAndSeparateOption()\"},\n    {\"_ZN5clang6driver23JoinedAndSeparateOptionD0Ev\", \"clang::driver::JoinedAndSeparateOption::~JoinedAndSeparateOption()\"},\n    {\"_ZN5clang6driver6phases12getPhaseNameENS1_2IDE\", \"clang::driver::phases::getPhaseName(clang::driver::phases::ID)\"},\n    {\"_ZN5clang6driver4ToolC1EPKcS3_RKNS0_9ToolChainE\", \"clang::driver::Tool::Tool(char const*, char const*, clang::driver::ToolChain const&)\"},\n    {\"_ZN5clang6driver4ToolC2EPKcS3_RKNS0_9ToolChainE\", \"clang::driver::Tool::Tool(char const*, char const*, clang::driver::ToolChain const&)\"},\n    {\"_ZN5clang6driver4ToolD0Ev\", \"clang::driver::Tool::~Tool()\"},\n    {\"_ZN5clang6driver4ToolD1Ev\", \"clang::driver::Tool::~Tool()\"},\n    {\"_ZN5clang6driver4ToolD2Ev\", \"clang::driver::Tool::~Tool()\"},\n    {\"_ZN5clang6driver9ToolChainC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::ToolChain::ToolChain(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver9ToolChainC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::ToolChain::ToolChain(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver9ToolChainD0Ev\", \"clang::driver::ToolChain::~ToolChain()\"},\n    {\"_ZN5clang6driver9ToolChainD1Ev\", \"clang::driver::ToolChain::~ToolChain()\"},\n    {\"_ZN5clang6driver9ToolChainD2Ev\", \"clang::driver::ToolChain::~ToolChain()\"},\n    {\"_ZNK5clang6driver9ToolChain9getDriverEv\", \"clang::driver::ToolChain::getDriver() const\"},\n    {\"_ZNK5clang6driver9ToolChain11GetFilePathEPKc\", \"clang::driver::ToolChain::GetFilePath(char const*) const\"},\n    {\"_ZNK5clang6driver9ToolChain14GetProgramPathEPKcb\", \"clang::driver::ToolChain::GetProgramPath(char const*, bool) const\"},\n    {\"_ZNK5clang6driver9ToolChain22LookupTypeForExtensionEPKc\", \"clang::driver::ToolChain::LookupTypeForExtension(char const*) const\"},\n    {\"_ZNK5clang6driver9ToolChain20HasNativeLLVMSupportEv\", \"clang::driver::ToolChain::HasNativeLLVMSupport() const\"},\n    {\"_ZNK5clang6driver9ToolChain17ComputeLLVMTripleERKNS0_7ArgListE\", \"clang::driver::ToolChain::ComputeLLVMTriple(clang::driver::ArgList const&) const\"},\n    {\"_ZNK5clang6driver9ToolChain27ComputeEffectiveClangTripleERKNS0_7ArgListE\", \"clang::driver::ToolChain::ComputeEffectiveClangTriple(clang::driver::ArgList const&) const\"},\n    {\"_ZNK5clang6driver9ToolChain16GetCXXStdlibTypeERKNS0_7ArgListE\", \"clang::driver::ToolChain::GetCXXStdlibType(clang::driver::ArgList const&) const\"},\n    {\"_ZNK5clang6driver9ToolChain28AddClangCXXStdlibIncludeArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::ToolChain::AddClangCXXStdlibIncludeArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver9ToolChain19AddCXXStdlibLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::ToolChain::AddCXXStdlibLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver9ToolChain16AddCCKextLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::ToolChain::AddCCKextLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZN5clang6driver10toolchains6DarwinC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Darwin::Darwin(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains6DarwinC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Darwin::Darwin(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin22LookupTypeForExtensionEPKc\", \"clang::driver::toolchains::Darwin::LookupTypeForExtension(char const*) const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin20HasNativeLLVMSupportEv\", \"clang::driver::toolchains::Darwin::HasNativeLLVMSupport() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin17getDarwinArchNameERKNS0_7ArgListE\", \"clang::driver::toolchains::Darwin::getDarwinArchName(clang::driver::ArgList const&) const\"},\n    {\"_ZN5clang6driver10toolchains9DarwinGCCC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DarwinGCC::DarwinGCC(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains9DarwinGCCC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DarwinGCC::DarwinGCC(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains6DarwinD0Ev\", \"clang::driver::toolchains::Darwin::~Darwin()\"},\n    {\"_ZN5clang6driver10toolchains6DarwinD1Ev\", \"clang::driver::toolchains::Darwin::~Darwin()\"},\n    {\"_ZN5clang6driver10toolchains6DarwinD2Ev\", \"clang::driver::toolchains::Darwin::~Darwin()\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin27ComputeEffectiveClangTripleERKNS0_7ArgListE\", \"clang::driver::toolchains::Darwin::ComputeEffectiveClangTriple(clang::driver::ArgList const&) const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::Darwin::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZNK5clang6driver10toolchains9DarwinGCC21AddLinkSearchPathArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinGCC::AddLinkSearchPathArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver10toolchains9DarwinGCC21AddLinkRuntimeLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinGCC::AddLinkRuntimeLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZN5clang6driver10toolchains11DarwinClangC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DarwinClang::DarwinClang(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains11DarwinClangC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DarwinClang::DarwinClang(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains11DarwinClang21AddLinkSearchPathArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinClang::AddLinkSearchPathArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver10toolchains11DarwinClang21AddLinkRuntimeLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinClang::AddLinkRuntimeLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin19AddDeploymentTargetERNS0_14DerivedArgListE\", \"clang::driver::toolchains::Darwin::AddDeploymentTarget(clang::driver::DerivedArgList&) const\"},\n    {\"_ZNK5clang6driver10toolchains11DarwinClang19AddCXXStdlibLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinClang::AddCXXStdlibLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver10toolchains11DarwinClang16AddCCKextLibArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::toolchains::DarwinClang::AddCCKextLibArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin13TranslateArgsERKNS0_14DerivedArgListEPKc\", \"clang::driver::toolchains::Darwin::TranslateArgs(clang::driver::DerivedArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin21IsUnwindTablesDefaultEv\", \"clang::driver::toolchains::Darwin::IsUnwindTablesDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin18UseDwarfDebugFlagsEv\", \"clang::driver::toolchains::Darwin::UseDwarfDebugFlags() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin17UseSjLjExceptionsEv\", \"clang::driver::toolchains::Darwin::UseSjLjExceptions() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin25GetDefaultRelocationModelEv\", \"clang::driver::toolchains::Darwin::GetDefaultRelocationModel() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin17GetForcedPicModelEv\", \"clang::driver::toolchains::Darwin::GetForcedPicModel() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin14SupportsObjCGCEv\", \"clang::driver::toolchains::Darwin::SupportsObjCGC() const\"},\n    {\"_ZNK5clang6driver10toolchains18Darwin_Generic_GCC27ComputeEffectiveClangTripleERKNS0_7ArgListE\", \"clang::driver::toolchains::Darwin_Generic_GCC::ComputeEffectiveClangTriple(clang::driver::ArgList const&) const\"},\n    {\"_ZN5clang6driver10toolchains11Generic_GCCC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Generic_GCC::Generic_GCC(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains11Generic_GCCC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Generic_GCC::Generic_GCC(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains11Generic_GCCD0Ev\", \"clang::driver::toolchains::Generic_GCC::~Generic_GCC()\"},\n    {\"_ZN5clang6driver10toolchains11Generic_GCCD1Ev\", \"clang::driver::toolchains::Generic_GCC::~Generic_GCC()\"},\n    {\"_ZN5clang6driver10toolchains11Generic_GCCD2Ev\", \"clang::driver::toolchains::Generic_GCC::~Generic_GCC()\"},\n    {\"_ZNK5clang6driver10toolchains11Generic_GCC10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::Generic_GCC::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZNK5clang6driver10toolchains11Generic_GCC21IsUnwindTablesDefaultEv\", \"clang::driver::toolchains::Generic_GCC::IsUnwindTablesDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains11Generic_GCC25GetDefaultRelocationModelEv\", \"clang::driver::toolchains::Generic_GCC::GetDefaultRelocationModel() const\"},\n    {\"_ZNK5clang6driver10toolchains11Generic_GCC17GetForcedPicModelEv\", \"clang::driver::toolchains::Generic_GCC::GetForcedPicModel() const\"},\n    {\"_ZN5clang6driver10toolchains12TCEToolChainC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::TCEToolChain::TCEToolChain(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains12TCEToolChainC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::TCEToolChain::TCEToolChain(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains12TCEToolChainD0Ev\", \"clang::driver::toolchains::TCEToolChain::~TCEToolChain()\"},\n    {\"_ZN5clang6driver10toolchains12TCEToolChainD1Ev\", \"clang::driver::toolchains::TCEToolChain::~TCEToolChain()\"},\n    {\"_ZN5clang6driver10toolchains12TCEToolChainD2Ev\", \"clang::driver::toolchains::TCEToolChain::~TCEToolChain()\"},\n    {\"_ZNK5clang6driver10toolchains12TCEToolChain18IsMathErrnoDefaultEv\", \"clang::driver::toolchains::TCEToolChain::IsMathErrnoDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains12TCEToolChain21IsUnwindTablesDefaultEv\", \"clang::driver::toolchains::TCEToolChain::IsUnwindTablesDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains12TCEToolChain25GetDefaultRelocationModelEv\", \"clang::driver::toolchains::TCEToolChain::GetDefaultRelocationModel() const\"},\n    {\"_ZNK5clang6driver10toolchains12TCEToolChain17GetForcedPicModelEv\", \"clang::driver::toolchains::TCEToolChain::GetForcedPicModel() const\"},\n    {\"_ZNK5clang6driver10toolchains12TCEToolChain10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::TCEToolChain::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains7OpenBSDC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::OpenBSD::OpenBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains7OpenBSDC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::OpenBSD::OpenBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains7OpenBSD10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::OpenBSD::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains7FreeBSDC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::FreeBSD::FreeBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains7FreeBSDC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::FreeBSD::FreeBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains7FreeBSD10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::FreeBSD::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains6NetBSDC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::NetBSD::NetBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains6NetBSDC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::NetBSD::NetBSD(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains6NetBSD10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::NetBSD::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains5MinixC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Minix::Minix(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains5MinixC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Minix::Minix(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains5Minix10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::Minix::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains8AuroraUXC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::AuroraUX::AuroraUX(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains8AuroraUXC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::AuroraUX::AuroraUX(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains8AuroraUX10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::AuroraUX::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains5LinuxC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Linux::Linux(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains5LinuxC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Linux::Linux(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains5Linux20HasNativeLLVMSupportEv\", \"clang::driver::toolchains::Linux::HasNativeLLVMSupport() const\"},\n    {\"_ZNK5clang6driver10toolchains5Linux10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::Linux::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains9DragonFlyC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DragonFly::DragonFly(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains9DragonFlyC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::DragonFly::DragonFly(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains9DragonFly10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::DragonFly::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZN5clang6driver10toolchains7WindowsC1ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Windows::Windows(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZN5clang6driver10toolchains7WindowsC2ERKNS0_8HostInfoERKN4llvm6TripleE\", \"clang::driver::toolchains::Windows::Windows(clang::driver::HostInfo const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver10toolchains7Windows10SelectToolERKNS0_11CompilationERKNS0_9JobActionE\", \"clang::driver::toolchains::Windows::SelectTool(clang::driver::Compilation const&, clang::driver::JobAction const&) const\"},\n    {\"_ZNK5clang6driver10toolchains7Windows28IsIntegratedAssemblerDefaultEv\", \"clang::driver::toolchains::Windows::IsIntegratedAssemblerDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains7Windows21IsUnwindTablesDefaultEv\", \"clang::driver::toolchains::Windows::IsUnwindTablesDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains7Windows25GetDefaultRelocationModelEv\", \"clang::driver::toolchains::Windows::GetDefaultRelocationModel() const\"},\n    {\"_ZNK5clang6driver10toolchains7Windows17GetForcedPicModelEv\", \"clang::driver::toolchains::Windows::GetForcedPicModel() const\"},\n    {\"_ZN5clang6driver10toolchains18Darwin_Generic_GCCD1Ev\", \"clang::driver::toolchains::Darwin_Generic_GCC::~Darwin_Generic_GCC()\"},\n    {\"_ZN5clang6driver10toolchains18Darwin_Generic_GCCD0Ev\", \"clang::driver::toolchains::Darwin_Generic_GCC::~Darwin_Generic_GCC()\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin15IsBlocksDefaultEv\", \"clang::driver::toolchains::Darwin::IsBlocksDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin28IsIntegratedAssemblerDefaultEv\", \"clang::driver::toolchains::Darwin::IsIntegratedAssemblerDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin23IsStrictAliasingDefaultEv\", \"clang::driver::toolchains::Darwin::IsStrictAliasingDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin35IsObjCDefaultSynthPropertiesDefaultEv\", \"clang::driver::toolchains::Darwin::IsObjCDefaultSynthPropertiesDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin26IsObjCNonFragileABIDefaultEv\", \"clang::driver::toolchains::Darwin::IsObjCNonFragileABIDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin27IsObjCLegacyDispatchDefaultEv\", \"clang::driver::toolchains::Darwin::IsObjCLegacyDispatchDefault() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin20UseObjCMixedDispatchEv\", \"clang::driver::toolchains::Darwin::UseObjCMixedDispatch() const\"},\n    {\"_ZNK5clang6driver10toolchains6Darwin29GetDefaultStackProtectorLevelEv\", \"clang::driver::toolchains::Darwin::GetDefaultStackProtectorLevel() const\"},\n    {\"_ZN5clang6driver10toolchains9DarwinGCCD1Ev\", \"clang::driver::toolchains::DarwinGCC::~DarwinGCC()\"},\n    {\"_ZN5clang6driver10toolchains9DarwinGCCD0Ev\", \"clang::driver::toolchains::DarwinGCC::~DarwinGCC()\"},\n    {\"_ZN5clang6driver10toolchains11DarwinClangD1Ev\", \"clang::driver::toolchains::DarwinClang::~DarwinClang()\"},\n    {\"_ZN5clang6driver10toolchains11DarwinClangD0Ev\", \"clang::driver::toolchains::DarwinClang::~DarwinClang()\"},\n    {\"_ZN5clang6driver10toolchains7OpenBSDD1Ev\", \"clang::driver::toolchains::OpenBSD::~OpenBSD()\"},\n    {\"_ZN5clang6driver10toolchains7OpenBSDD0Ev\", \"clang::driver::toolchains::OpenBSD::~OpenBSD()\"},\n    {\"_ZNK5clang6driver10toolchains11Generic_ELF28IsIntegratedAssemblerDefaultEv\", \"clang::driver::toolchains::Generic_ELF::IsIntegratedAssemblerDefault() const\"},\n    {\"_ZN5clang6driver10toolchains7FreeBSDD1Ev\", \"clang::driver::toolchains::FreeBSD::~FreeBSD()\"},\n    {\"_ZN5clang6driver10toolchains7FreeBSDD0Ev\", \"clang::driver::toolchains::FreeBSD::~FreeBSD()\"},\n    {\"_ZN5clang6driver10toolchains6NetBSDD1Ev\", \"clang::driver::toolchains::NetBSD::~NetBSD()\"},\n    {\"_ZN5clang6driver10toolchains6NetBSDD0Ev\", \"clang::driver::toolchains::NetBSD::~NetBSD()\"},\n    {\"_ZN5clang6driver10toolchains5MinixD1Ev\", \"clang::driver::toolchains::Minix::~Minix()\"},\n    {\"_ZN5clang6driver10toolchains5MinixD0Ev\", \"clang::driver::toolchains::Minix::~Minix()\"},\n    {\"_ZN5clang6driver10toolchains8AuroraUXD1Ev\", \"clang::driver::toolchains::AuroraUX::~AuroraUX()\"},\n    {\"_ZN5clang6driver10toolchains8AuroraUXD0Ev\", \"clang::driver::toolchains::AuroraUX::~AuroraUX()\"},\n    {\"_ZN5clang6driver10toolchains5LinuxD1Ev\", \"clang::driver::toolchains::Linux::~Linux()\"},\n    {\"_ZN5clang6driver10toolchains5LinuxD0Ev\", \"clang::driver::toolchains::Linux::~Linux()\"},\n    {\"_ZN5clang6driver10toolchains9DragonFlyD1Ev\", \"clang::driver::toolchains::DragonFly::~DragonFly()\"},\n    {\"_ZN5clang6driver10toolchains9DragonFlyD0Ev\", \"clang::driver::toolchains::DragonFly::~DragonFly()\"},\n    {\"_ZN5clang6driver10toolchains7WindowsD1Ev\", \"clang::driver::toolchains::Windows::~Windows()\"},\n    {\"_ZN5clang6driver10toolchains7WindowsD0Ev\", \"clang::driver::toolchains::Windows::~Windows()\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang6driver4ToolENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PSt4pairIjS4_E\", \"llvm::DenseMap<unsigned int, clang::driver::Tool*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::driver::Tool*> >::InsertIntoBucket(unsigned int const&, clang::driver::Tool* const&, std::pair<unsigned int, clang::driver::Tool*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang6driver4ToolENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, clang::driver::Tool*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::driver::Tool*> >::grow(unsigned int)\"},\n    {\"_ZN5clang6driver10toolchains11Generic_ELFD1Ev\", \"clang::driver::toolchains::Generic_ELF::~Generic_ELF()\"},\n    {\"_ZN5clang6driver10toolchains11Generic_ELFD0Ev\", \"clang::driver::toolchains::Generic_ELF::~Generic_ELF()\"},\n    {\"_ZN5clang6driver10toolchains5LinuxD2Ev\", \"clang::driver::toolchains::Linux::~Linux()\"},\n    {\"_ZNK5clang6driver4Tool22hasIntegratedAssemblerEv\", \"clang::driver::Tool::hasIntegratedAssembler() const\"},\n    {\"_ZNK5clang6driver5tools12visualstudio4Link16hasIntegratedCPPEv\", \"clang::driver::tools::visualstudio::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver4Tool18hasGoodDiagnosticsEv\", \"clang::driver::Tool::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools9dragonfly4Link16hasIntegratedCPPEv\", \"clang::driver::tools::dragonfly::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools9dragonfly8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::dragonfly::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools10linuxtools4Link16hasIntegratedCPPEv\", \"clang::driver::tools::linuxtools::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools10linuxtools8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::linuxtools::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools8auroraux4Link16hasIntegratedCPPEv\", \"clang::driver::tools::auroraux::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools8auroraux8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::auroraux::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools5minix4Link16hasIntegratedCPPEv\", \"clang::driver::tools::minix::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools5minix8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::minix::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools6netbsd4Link16hasIntegratedCPPEv\", \"clang::driver::tools::netbsd::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools6netbsd8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::netbsd::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7freebsd4Link16hasIntegratedCPPEv\", \"clang::driver::tools::freebsd::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7freebsd8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::freebsd::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7openbsd4Link16hasIntegratedCPPEv\", \"clang::driver::tools::openbsd::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7openbsd8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::openbsd::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools3gcc4Link16hasIntegratedCPPEv\", \"clang::driver::tools::gcc::Link::hasIntegratedCPP() const\"},\n    {\"_ZN5clang6driver5tools3gcc6CommonD1Ev\", \"clang::driver::tools::gcc::Common::~Common()\"},\n    {\"_ZN5clang6driver5tools3gcc6CommonD0Ev\", \"clang::driver::tools::gcc::Common::~Common()\"},\n    {\"_ZNK5clang6driver5tools3gcc8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::gcc::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools3gcc7Compile16hasIntegratedCPPEv\", \"clang::driver::tools::gcc::Compile::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools3gcc7Compile18hasGoodDiagnosticsEv\", \"clang::driver::tools::gcc::Compile::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Precompile16hasIntegratedCPPEv\", \"clang::driver::tools::gcc::Precompile::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Precompile18hasGoodDiagnosticsEv\", \"clang::driver::tools::gcc::Precompile::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Preprocess16hasIntegratedCPPEv\", \"clang::driver::tools::gcc::Preprocess::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Preprocess18hasGoodDiagnosticsEv\", \"clang::driver::tools::gcc::Preprocess::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools6darwin8Dsymutil16hasIntegratedCPPEv\", \"clang::driver::tools::darwin::Dsymutil::hasIntegratedCPP() const\"},\n    {\"_ZN5clang6driver5tools6darwin10DarwinToolD1Ev\", \"clang::driver::tools::darwin::DarwinTool::~DarwinTool()\"},\n    {\"_ZN5clang6driver5tools6darwin10DarwinToolD0Ev\", \"clang::driver::tools::darwin::DarwinTool::~DarwinTool()\"},\n    {\"_ZNK5clang6driver5tools6darwin4Lipo16hasIntegratedCPPEv\", \"clang::driver::tools::darwin::Lipo::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools6darwin4Link16hasIntegratedCPPEv\", \"clang::driver::tools::darwin::Link::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools6darwin8Assemble16hasIntegratedCPPEv\", \"clang::driver::tools::darwin::Assemble::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7ClangAs22hasIntegratedAssemblerEv\", \"clang::driver::tools::ClangAs::hasIntegratedAssembler() const\"},\n    {\"_ZNK5clang6driver5tools7ClangAs16hasIntegratedCPPEv\", \"clang::driver::tools::ClangAs::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools7ClangAs18hasGoodDiagnosticsEv\", \"clang::driver::tools::ClangAs::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC116hasIntegratedCPPEv\", \"clang::driver::tools::darwin::CC1::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC118hasGoodDiagnosticsEv\", \"clang::driver::tools::darwin::CC1::hasGoodDiagnostics() const\"},\n    {\"_ZN5clang6driver5tools6darwin3CC1D1Ev\", \"clang::driver::tools::darwin::CC1::~CC1()\"},\n    {\"_ZN5clang6driver5tools6darwin3CC1D0Ev\", \"clang::driver::tools::darwin::CC1::~CC1()\"},\n    {\"_ZNK5clang6driver5tools5Clang22hasIntegratedAssemblerEv\", \"clang::driver::tools::Clang::hasIntegratedAssembler() const\"},\n    {\"_ZNK5clang6driver5tools5Clang16hasIntegratedCPPEv\", \"clang::driver::tools::Clang::hasIntegratedCPP() const\"},\n    {\"_ZNK5clang6driver5tools5Clang18hasGoodDiagnosticsEv\", \"clang::driver::tools::Clang::hasGoodDiagnostics() const\"},\n    {\"_ZNK5clang6driver5tools5Clang23AddPreprocessingOptionsERKNS0_6DriverERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEERKNS0_9InputInfoERKNSA_ISF_Lj4EEE\", \"clang::driver::tools::Clang::AddPreprocessingOptions(clang::driver::Driver const&, clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&) const\"},\n    {\"_Z25CheckPreprocessingOptionsRKN5clang6driver6DriverERKNS0_7ArgListE\", \"CheckPreprocessingOptions(clang::driver::Driver const&, clang::driver::ArgList const&)\"},\n    {\"_ZN5clang6driver5tools6darwin3CC121getDependencyFileNameERKNS0_7ArgListERKN4llvm11SmallVectorINS0_9InputInfoELj4EEE\", \"clang::driver::tools::darwin::CC1::getDependencyFileName(clang::driver::ArgList const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&)\"},\n    {\"_Z11QuoteTargetN4llvm9StringRefERNS_15SmallVectorImplIcEE\", \"QuoteTarget(llvm::StringRef, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZNK5clang6driver5tools5Clang16AddARMTargetArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::Clang::AddARMTargetArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_Z15getARMTargetCPURKN5clang6driver7ArgListERKN4llvm6TripleE\", \"getARMTargetCPU(clang::driver::ArgList const&, llvm::Triple const&)\"},\n    {\"_ZNK5clang6driver5tools5Clang17AddMIPSTargetArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::Clang::AddMIPSTargetArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools5Clang18AddSparcTargetArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::Clang::AddSparcTargetArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools5Clang16AddX86TargetArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::Clang::AddX86TargetArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools5Clang12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS8_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::Clang::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN5clang6driver5tools6darwin3CC116getBaseInputNameERKNS0_7ArgListERKN4llvm11SmallVectorINS0_9InputInfoELj4EEE\", \"clang::driver::tools::darwin::CC1::getBaseInputName(clang::driver::ArgList const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&)\"},\n    {\"_Z26CheckCodeGenerationOptionsRKN5clang6driver6DriverERKNS0_7ArgListE\", \"CheckCodeGenerationOptions(clang::driver::Driver const&, clang::driver::ArgList const&)\"},\n    {\"_ZNK5clang6driver5tools7ClangAs12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS8_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::ClangAs::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools3gcc6Common12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::gcc::Common::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Preprocess19RenderExtraToolArgsERKNS0_9JobActionERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::gcc::Preprocess::RenderExtraToolArgs(clang::driver::JobAction const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools3gcc10Precompile19RenderExtraToolArgsERKNS0_9JobActionERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::gcc::Precompile::RenderExtraToolArgs(clang::driver::JobAction const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools3gcc7Compile19RenderExtraToolArgsERKNS0_9JobActionERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::gcc::Compile::RenderExtraToolArgs(clang::driver::JobAction const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools3gcc8Assemble19RenderExtraToolArgsERKNS0_9JobActionERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::gcc::Assemble::RenderExtraToolArgs(clang::driver::JobAction const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools3gcc4Link19RenderExtraToolArgsERKNS0_9JobActionERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::gcc::Link::RenderExtraToolArgs(clang::driver::JobAction const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC110getCC1NameENS0_5types2IDE\", \"clang::driver::tools::darwin::CC1::getCC1Name(clang::driver::types::ID) const\"},\n    {\"_ZN5clang6driver5tools6darwin3CC116getBaseInputStemERKNS0_7ArgListERKN4llvm11SmallVectorINS0_9InputInfoELj4EEE\", \"clang::driver::tools::darwin::CC1::getBaseInputStem(clang::driver::ArgList const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&)\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC110AddCC1ArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::darwin::CC1::AddCC1Args(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC117AddCC1OptionsArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEERKNS8_INS0_9InputInfoELj4EEERKSB_\", \"clang::driver::tools::darwin::CC1::AddCC1OptionsArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, llvm::SmallVector<char const*, 16u> const&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC117AddCPPOptionsArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEERKNS8_INS0_9InputInfoELj4EEERKSB_\", \"clang::driver::tools::darwin::CC1::AddCPPOptionsArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, llvm::SmallVector<char const*, 16u> const&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC123AddCPPUniqueOptionsArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEERKNS8_INS0_9InputInfoELj4EEE\", \"clang::driver::tools::darwin::CC1::AddCPPUniqueOptionsArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin3CC110AddCPPArgsERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::darwin::CC1::AddCPPArgs(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin10Preprocess12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Preprocess::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6darwin7Compile12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Compile::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6darwin8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6darwin10DarwinTool13AddDarwinArchERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::darwin::DarwinTool::AddDarwinArch(clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin4Link11AddLinkArgsERNS0_11CompilationERKNS0_7ArgListERN4llvm11SmallVectorIPKcLj16EEE\", \"clang::driver::tools::darwin::Link::AddLinkArgs(clang::driver::Compilation&, clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&) const\"},\n    {\"_ZNK5clang6driver5tools6darwin4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_Z15AddLinkerInputsRKN5clang6driver9ToolChainERKN4llvm11SmallVectorINS0_9InputInfoELj4EEERKNS0_7ArgListERNS5_IPKcLj16EEE\", \"AddLinkerInputs(clang::driver::ToolChain const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, llvm::SmallVector<char const*, 16u>&)\"},\n    {\"_ZNK5clang6driver5tools6darwin4Lipo12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Lipo::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6darwin8Dsymutil12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::darwin::Dsymutil::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools8auroraux8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::auroraux::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools8auroraux4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::auroraux::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools7openbsd8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::openbsd::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools7openbsd4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::openbsd::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools7freebsd8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::freebsd::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools7freebsd4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::freebsd::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6netbsd8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::netbsd::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools6netbsd4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::netbsd::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools10linuxtools8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::linuxtools::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools10linuxtools4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::linuxtools::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools5minix8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::minix::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools5minix4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::minix::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools9dragonfly8Assemble12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::dragonfly::Assemble::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools9dragonfly4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::dragonfly::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZNK5clang6driver5tools12visualstudio4Link12ConstructJobERNS0_11CompilationERKNS0_9JobActionERKNS0_9InputInfoERKN4llvm11SmallVectorIS9_Lj4EEERKNS0_7ArgListEPKc\", \"clang::driver::tools::visualstudio::Link::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, clang::driver::ArgList const&, char const*) const\"},\n    {\"_ZN5clang6driver5tools5ClangD1Ev\", \"clang::driver::tools::Clang::~Clang()\"},\n    {\"_ZN5clang6driver5tools5ClangD0Ev\", \"clang::driver::tools::Clang::~Clang()\"},\n    {\"_ZN5clang6driver5tools7ClangAsD1Ev\", \"clang::driver::tools::ClangAs::~ClangAs()\"},\n    {\"_ZN5clang6driver5tools7ClangAsD0Ev\", \"clang::driver::tools::ClangAs::~ClangAs()\"},\n    {\"_ZN5clang6driver5tools3gcc10PreprocessD1Ev\", \"clang::driver::tools::gcc::Preprocess::~Preprocess()\"},\n    {\"_ZN5clang6driver5tools3gcc10PreprocessD0Ev\", \"clang::driver::tools::gcc::Preprocess::~Preprocess()\"},\n    {\"_ZN5clang6driver5tools3gcc10PrecompileD1Ev\", \"clang::driver::tools::gcc::Precompile::~Precompile()\"},\n    {\"_ZN5clang6driver5tools3gcc10PrecompileD0Ev\", \"clang::driver::tools::gcc::Precompile::~Precompile()\"},\n    {\"_ZN5clang6driver5tools3gcc7CompileD1Ev\", \"clang::driver::tools::gcc::Compile::~Compile()\"},\n    {\"_ZN5clang6driver5tools3gcc7CompileD0Ev\", \"clang::driver::tools::gcc::Compile::~Compile()\"},\n    {\"_ZN5clang6driver5tools3gcc8AssembleD1Ev\", \"clang::driver::tools::gcc::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools3gcc8AssembleD0Ev\", \"clang::driver::tools::gcc::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools3gcc4LinkD1Ev\", \"clang::driver::tools::gcc::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools3gcc4LinkD0Ev\", \"clang::driver::tools::gcc::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools6darwin10PreprocessD1Ev\", \"clang::driver::tools::darwin::Preprocess::~Preprocess()\"},\n    {\"_ZN5clang6driver5tools6darwin10PreprocessD0Ev\", \"clang::driver::tools::darwin::Preprocess::~Preprocess()\"},\n    {\"_ZN5clang6driver5tools6darwin7CompileD1Ev\", \"clang::driver::tools::darwin::Compile::~Compile()\"},\n    {\"_ZN5clang6driver5tools6darwin7CompileD0Ev\", \"clang::driver::tools::darwin::Compile::~Compile()\"},\n    {\"_ZN5clang6driver5tools6darwin8AssembleD1Ev\", \"clang::driver::tools::darwin::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools6darwin8AssembleD0Ev\", \"clang::driver::tools::darwin::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools6darwin4LinkD1Ev\", \"clang::driver::tools::darwin::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools6darwin4LinkD0Ev\", \"clang::driver::tools::darwin::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools6darwin4LipoD1Ev\", \"clang::driver::tools::darwin::Lipo::~Lipo()\"},\n    {\"_ZN5clang6driver5tools6darwin4LipoD0Ev\", \"clang::driver::tools::darwin::Lipo::~Lipo()\"},\n    {\"_ZN5clang6driver5tools6darwin8DsymutilD1Ev\", \"clang::driver::tools::darwin::Dsymutil::~Dsymutil()\"},\n    {\"_ZN5clang6driver5tools6darwin8DsymutilD0Ev\", \"clang::driver::tools::darwin::Dsymutil::~Dsymutil()\"},\n    {\"_ZN5clang6driver5tools7openbsd8AssembleD1Ev\", \"clang::driver::tools::openbsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools7openbsd8AssembleD0Ev\", \"clang::driver::tools::openbsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools7openbsd4LinkD1Ev\", \"clang::driver::tools::openbsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools7openbsd4LinkD0Ev\", \"clang::driver::tools::openbsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools7freebsd8AssembleD1Ev\", \"clang::driver::tools::freebsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools7freebsd8AssembleD0Ev\", \"clang::driver::tools::freebsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools7freebsd4LinkD1Ev\", \"clang::driver::tools::freebsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools7freebsd4LinkD0Ev\", \"clang::driver::tools::freebsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools6netbsd8AssembleD1Ev\", \"clang::driver::tools::netbsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools6netbsd8AssembleD0Ev\", \"clang::driver::tools::netbsd::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools6netbsd4LinkD1Ev\", \"clang::driver::tools::netbsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools6netbsd4LinkD0Ev\", \"clang::driver::tools::netbsd::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools10linuxtools8AssembleD1Ev\", \"clang::driver::tools::linuxtools::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools10linuxtools8AssembleD0Ev\", \"clang::driver::tools::linuxtools::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools10linuxtools4LinkD1Ev\", \"clang::driver::tools::linuxtools::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools10linuxtools4LinkD0Ev\", \"clang::driver::tools::linuxtools::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools5minix8AssembleD1Ev\", \"clang::driver::tools::minix::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools5minix8AssembleD0Ev\", \"clang::driver::tools::minix::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools5minix4LinkD1Ev\", \"clang::driver::tools::minix::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools5minix4LinkD0Ev\", \"clang::driver::tools::minix::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools8auroraux8AssembleD1Ev\", \"clang::driver::tools::auroraux::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools8auroraux8AssembleD0Ev\", \"clang::driver::tools::auroraux::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools8auroraux4LinkD1Ev\", \"clang::driver::tools::auroraux::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools8auroraux4LinkD0Ev\", \"clang::driver::tools::auroraux::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools9dragonfly8AssembleD1Ev\", \"clang::driver::tools::dragonfly::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools9dragonfly8AssembleD0Ev\", \"clang::driver::tools::dragonfly::Assemble::~Assemble()\"},\n    {\"_ZN5clang6driver5tools9dragonfly4LinkD1Ev\", \"clang::driver::tools::dragonfly::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools9dragonfly4LinkD0Ev\", \"clang::driver::tools::dragonfly::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools12visualstudio4LinkD1Ev\", \"clang::driver::tools::visualstudio::Link::~Link()\"},\n    {\"_ZN5clang6driver5tools12visualstudio4LinkD0Ev\", \"clang::driver::tools::visualstudio::Link::~Link()\"},\n    {\"_ZN4llvm15SmallVectorImplISsEaSERKS1_\", \"llvm::SmallVectorImpl<std::string>::operator=(llvm::SmallVectorImpl<std::string> const&)\"},\n    {\"_ZN5clang6driver5types11getTypeNameENS1_2IDE\", \"clang::driver::types::getTypeName(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types19getPreprocessedTypeENS1_2IDE\", \"clang::driver::types::getPreprocessedType(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types17getTypeTempSuffixENS1_2IDE\", \"clang::driver::types::getTypeTempSuffix(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types16onlyAssembleTypeENS1_2IDE\", \"clang::driver::types::onlyAssembleType(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types18onlyPrecompileTypeENS1_2IDE\", \"clang::driver::types::onlyPrecompileType(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types22canTypeBeUserSpecifiedENS1_2IDE\", \"clang::driver::types::canTypeBeUserSpecified(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types19appendSuffixForTypeENS1_2IDE\", \"clang::driver::types::appendSuffixForType(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types11canLipoTypeENS1_2IDE\", \"clang::driver::types::canLipoType(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types17isAcceptedByClangENS1_2IDE\", \"clang::driver::types::isAcceptedByClang(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types21isOnlyAcceptedByClangENS1_2IDE\", \"clang::driver::types::isOnlyAcceptedByClang(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types6isObjCENS1_2IDE\", \"clang::driver::types::isObjC(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types5isCXXENS1_2IDE\", \"clang::driver::types::isCXX(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types22lookupTypeForExtensionEPKc\", \"clang::driver::types::lookupTypeForExtension(char const*)\"},\n    {\"_ZN5clang6driver5types26lookupTypeForTypeSpecifierEPKc\", \"clang::driver::types::lookupTypeForTypeSpecifier(char const*)\"},\n    {\"_ZN5clang6driver5types23getNumCompilationPhasesENS1_2IDE\", \"clang::driver::types::getNumCompilationPhases(clang::driver::types::ID)\"},\n    {\"_ZN5clang6driver5types19getCompilationPhaseENS1_2IDEj\", \"clang::driver::types::getCompilationPhase(clang::driver::types::ID, unsigned int)\"},\n    {\"_ZN5clang6driver5types21lookupCXXTypeForCTypeENS1_2IDE\", \"clang::driver::types::lookupCXXTypeForCType(clang::driver::types::ID)\"},\n    {\"_ZN5clang26ASTDeserializationListenerD0Ev\", \"clang::ASTDeserializationListener::~ASTDeserializationListener()\"},\n    {\"_ZN5clang26ASTDeserializationListenerD1Ev\", \"clang::ASTDeserializationListener::~ASTDeserializationListener()\"},\n    {\"_ZN5clang26ASTDeserializationListenerD2Ev\", \"clang::ASTDeserializationListener::~ASTDeserializationListener()\"},\n    {\"_ZN5clang13serialization18TypeIdxFromBuiltinEPKNS_11BuiltinTypeE\", \"clang::serialization::TypeIdxFromBuiltin(clang::BuiltinType const*)\"},\n    {\"_ZN5clang13serialization11ComputeHashENS_8SelectorE\", \"clang::serialization::ComputeHash(clang::Selector)\"},\n    {\"_ZN5clang17ASTReaderListenerD0Ev\", \"clang::ASTReaderListener::~ASTReaderListener()\"},\n    {\"_ZN5clang17ASTReaderListenerD1Ev\", \"clang::ASTReaderListener::~ASTReaderListener()\"},\n    {\"_ZN5clang17ASTReaderListenerD2Ev\", \"clang::ASTReaderListener::~ASTReaderListener()\"},\n    {\"_ZN5clang12PCHValidator19ReadLanguageOptionsERKNS_11LangOptionsE\", \"clang::PCHValidator::ReadLanguageOptions(clang::LangOptions const&)\"},\n    {\"_ZN5clang9ASTReader4DiagEj\", \"clang::ASTReader::Diag(unsigned int)\"},\n    {\"_ZN5clang12PCHValidator16ReadTargetTripleEN4llvm9StringRefE\", \"clang::PCHValidator::ReadTargetTriple(llvm::StringRef)\"},\n    {\"_ZN5clang12PCHValidator20ReadPredefinesBufferERKN4llvm11SmallVectorINS_18PCHPredefinesBlockELj2EEENS1_9StringRefERSs\", \"clang::PCHValidator::ReadPredefinesBuffer(llvm::SmallVector<clang::PCHPredefinesBlock, 2u> const&, llvm::StringRef, std::string&)\"},\n    {\"_ZN5clang9ASTReader4DiagENS_14SourceLocationEj\", \"clang::ASTReader::Diag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang12PCHValidator18ReadHeaderFileInfoERKNS_14HeaderFileInfoEj\", \"clang::PCHValidator::ReadHeaderFileInfo(clang::HeaderFileInfo const&, unsigned int)\"},\n    {\"_ZN5clang12PCHValidator11ReadCounterEj\", \"clang::PCHValidator::ReadCounter(unsigned int)\"},\n    {\"_ZN5clang9ASTReader26setDeserializationListenerEPNS_26ASTDeserializationListenerE\", \"clang::ASTReader::setDeserializationListener(clang::ASTDeserializationListener*)\"},\n    {\"_ZN5clang9ASTReader22ReadDeclContextStorageERN4llvm15BitstreamCursorERKSt4pairIyyERNS0_15DeclContextInfoE\", \"clang::ASTReader::ReadDeclContextStorage(llvm::BitstreamCursor&, std::pair<unsigned long long, unsigned long long> const&, clang::ASTReader::DeclContextInfo&)\"},\n    {\"_ZN5clang9ASTReader5ErrorEPKc\", \"clang::ASTReader::Error(char const*)\"},\n    {\"_ZN5clang9ASTReader22CheckPredefinesBuffersEv\", \"clang::ASTReader::CheckPredefinesBuffers()\"},\n    {\"_ZN5clang9ASTReader14ParseLineTableERNS0_11PerFileDataERN4llvm15SmallVectorImplIyEE\", \"clang::ASTReader::ParseLineTable(clang::ASTReader::PerFileData&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTReader28MaybeAddSystemRootToFilenameERSs\", \"clang::ASTReader::MaybeAddSystemRootToFilename(std::string&)\"},\n    {\"_ZN5clang9ASTReader22ReadSourceManagerBlockERNS0_11PerFileDataE\", \"clang::ASTReader::ReadSourceManagerBlock(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang9ASTReader15SLocCursorForIDEj\", \"clang::ASTReader::SLocCursorForID(unsigned int)\"},\n    {\"_ZN5clang9ASTReader19ReadSLocEntryRecordEj\", \"clang::ASTReader::ReadSLocEntryRecord(unsigned int)\"},\n    {\"_ZN5clang9ASTReader16ReadBlockAbbrevsERN4llvm15BitstreamCursorEj\", \"clang::ASTReader::ReadBlockAbbrevs(llvm::BitstreamCursor&, unsigned int)\"},\n    {\"_ZN5clang9ASTReader15ReadMacroRecordERNS0_11PerFileDataEy\", \"clang::ASTReader::ReadMacroRecord(clang::ASTReader::PerFileData&, unsigned long long)\"},\n    {\"_ZN5clang9ASTReader20DecodeIdentifierInfoEj\", \"clang::ASTReader::DecodeIdentifierInfo(unsigned int)\"},\n    {\"_ZN5clang9ASTReader18getMacroDefinitionEj\", \"clang::ASTReader::getMacroDefinition(unsigned int)\"},\n    {\"_ZN5clang9ASTReader22LoadPreprocessedEntityERNS0_11PerFileDataE\", \"clang::ASTReader::LoadPreprocessedEntity(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang9ASTReader20SetIdentifierIsMacroEPNS_14IdentifierInfoERNS0_11PerFileDataEy\", \"clang::ASTReader::SetIdentifierIsMacro(clang::IdentifierInfo*, clang::ASTReader::PerFileData&, unsigned long long)\"},\n    {\"_ZN5clang9ASTReader17ReadDefinedMacrosEv\", \"clang::ASTReader::ReadDefinedMacros()\"},\n    {\"_ZN5clang9ASTReader19LoadMacroDefinitionEN4llvm16DenseMapIteratorIPNS_14IdentifierInfoEyNS1_12DenseMapInfoIS4_EENS5_IyEELb0EEE\", \"clang::ASTReader::LoadMacroDefinition(llvm::DenseMapIterator<clang::IdentifierInfo*, unsigned long long, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<unsigned long long>, false>)\"},\n    {\"_ZN5clang9ASTReader19LoadMacroDefinitionEPNS_14IdentifierInfoE\", \"clang::ASTReader::LoadMacroDefinition(clang::IdentifierInfo*)\"},\n    {\"_ZN5clang9ASTReader12ReadASTBlockERNS0_11PerFileDataE\", \"clang::ASTReader::ReadASTBlock(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang9ASTReader11ReadASTCoreEN4llvm9StringRefENS0_11ASTFileTypeE\", \"clang::ASTReader::ReadASTCore(llvm::StringRef, clang::ASTReader::ASTFileType)\"},\n    {\"_ZN5clang9ASTReader20ParseLanguageOptionsERKN4llvm15SmallVectorImplIyEE\", \"clang::ASTReader::ParseLanguageOptions(llvm::SmallVectorImpl<unsigned long long> const&)\"},\n    {\"_ZN5clang9ASTReader7ReadASTERKSsNS0_11ASTFileTypeE\", \"clang::ASTReader::ReadAST(std::string const&, clang::ASTReader::ASTFileType)\"},\n    {\"_ZN5clang9ASTReader17InitializeContextERNS_10ASTContextE\", \"clang::ASTReader::InitializeContext(clang::ASTContext&)\"},\n    {\"_ZN5clang9ASTReader11PerFileDataC1ENS0_11ASTFileTypeE\", \"clang::ASTReader::PerFileData::PerFileData(clang::ASTReader::ASTFileType)\"},\n    {\"_ZN5clang9ASTReader15setPreprocessorERNS_12PreprocessorE\", \"clang::ASTReader::setPreprocessor(clang::Preprocessor&)\"},\n    {\"_ZN5clang9ASTReader22GetTranslationUnitDeclEv\", \"clang::ASTReader::GetTranslationUnitDecl()\"},\n    {\"_ZN5clang9ASTReader7GetTypeEj\", \"clang::ASTReader::GetType(unsigned int)\"},\n    {\"_ZN5clang9ASTReader28ReadPragmaDiagnosticMappingsERNS_10DiagnosticE\", \"clang::ASTReader::ReadPragmaDiagnosticMappings(clang::Diagnostic&)\"},\n    {\"_ZN5clang9ASTReader7GetDeclEj\", \"clang::ASTReader::GetDecl(unsigned int)\"},\n    {\"_ZN5clang9ASTReader21getOriginalSourceFileERKSsRNS_11FileManagerERNS_10DiagnosticE\", \"clang::ASTReader::getOriginalSourceFile(std::string const&, clang::FileManager&, clang::Diagnostic&)\"},\n    {\"_ZThn8_N5clang9ASTReader24ReadPreprocessedEntitiesEv\", \"non-virtual thunk to clang::ASTReader::ReadPreprocessedEntities()\"},\n    {\"_ZN5clang9ASTReader24ReadPreprocessedEntitiesEv\", \"clang::ASTReader::ReadPreprocessedEntities()\"},\n    {\"_ZThn8_N5clang9ASTReader22ReadPreprocessedEntityEy\", \"non-virtual thunk to clang::ASTReader::ReadPreprocessedEntity(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader22ReadPreprocessedEntityEy\", \"clang::ASTReader::ReadPreprocessedEntity(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader18TypeCursorForIndexEj\", \"clang::ASTReader::TypeCursorForIndex(unsigned int)\"},\n    {\"_ZN5clang9ASTReader14ReadTypeRecordEj\", \"clang::ASTReader::ReadTypeRecord(unsigned int)\"},\n    {\"_ZN5clang9ASTReader9ReadAPIntERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadAPInt(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader23ReadNestedNameSpecifierERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadNestedNameSpecifier(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader20ReadTemplateArgumentERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadTemplateArgument(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader15ReadSourceRangeERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadSourceRange(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader16ReadTemplateNameERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadTemplateName(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader24ReadTemplateArgumentListERN4llvm11SmallVectorINS_16TemplateArgumentELj8EEERNS0_11PerFileDataERKNS2_IyLj64EEERj\", \"clang::ASTReader::ReadTemplateArgumentList(llvm::SmallVector<clang::TemplateArgument, 8u>&, clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13TypeLocReader21VisitQualifiedTypeLocENS_16QualifiedTypeLocE\", \"clang::TypeLocReader::VisitQualifiedTypeLoc(clang::QualifiedTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader19VisitBuiltinTypeLocENS_14BuiltinTypeLocE\", \"clang::TypeLocReader::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader19VisitComplexTypeLocENS_14ComplexTypeLocE\", \"clang::TypeLocReader::VisitComplexTypeLoc(clang::ComplexTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader19VisitPointerTypeLocENS_14PointerTypeLocE\", \"clang::TypeLocReader::VisitPointerTypeLoc(clang::PointerTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader24VisitBlockPointerTypeLocENS_19BlockPointerTypeLocE\", \"clang::TypeLocReader::VisitBlockPointerTypeLoc(clang::BlockPointerTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader27VisitLValueReferenceTypeLocENS_22LValueReferenceTypeLocE\", \"clang::TypeLocReader::VisitLValueReferenceTypeLoc(clang::LValueReferenceTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader27VisitRValueReferenceTypeLocENS_22RValueReferenceTypeLocE\", \"clang::TypeLocReader::VisitRValueReferenceTypeLoc(clang::RValueReferenceTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitMemberPointerTypeLocENS_20MemberPointerTypeLocE\", \"clang::TypeLocReader::VisitMemberPointerTypeLoc(clang::MemberPointerTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader17VisitArrayTypeLocENS_12ArrayTypeLocE\", \"clang::TypeLocReader::VisitArrayTypeLoc(clang::ArrayTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitConstantArrayTypeLocENS_20ConstantArrayTypeLocE\", \"clang::TypeLocReader::VisitConstantArrayTypeLoc(clang::ConstantArrayTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader27VisitIncompleteArrayTypeLocENS_22IncompleteArrayTypeLocE\", \"clang::TypeLocReader::VisitIncompleteArrayTypeLoc(clang::IncompleteArrayTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitVariableArrayTypeLocENS_20VariableArrayTypeLocE\", \"clang::TypeLocReader::VisitVariableArrayTypeLoc(clang::VariableArrayTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader31VisitDependentSizedArrayTypeLocENS_26DependentSizedArrayTypeLocE\", \"clang::TypeLocReader::VisitDependentSizedArrayTypeLoc(clang::DependentSizedArrayTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader35VisitDependentSizedExtVectorTypeLocENS_30DependentSizedExtVectorTypeLocE\", \"clang::TypeLocReader::VisitDependentSizedExtVectorTypeLoc(clang::DependentSizedExtVectorTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader18VisitVectorTypeLocENS_13VectorTypeLocE\", \"clang::TypeLocReader::VisitVectorTypeLoc(clang::VectorTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader21VisitExtVectorTypeLocENS_16ExtVectorTypeLocE\", \"clang::TypeLocReader::VisitExtVectorTypeLoc(clang::ExtVectorTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader20VisitFunctionTypeLocENS_15FunctionTypeLocE\", \"clang::TypeLocReader::VisitFunctionTypeLoc(clang::FunctionTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitFunctionProtoTypeLocENS_20FunctionProtoTypeLocE\", \"clang::TypeLocReader::VisitFunctionProtoTypeLoc(clang::FunctionProtoTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader27VisitFunctionNoProtoTypeLocENS_22FunctionNoProtoTypeLocE\", \"clang::TypeLocReader::VisitFunctionNoProtoTypeLoc(clang::FunctionNoProtoTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader27VisitUnresolvedUsingTypeLocENS_22UnresolvedUsingTypeLocE\", \"clang::TypeLocReader::VisitUnresolvedUsingTypeLoc(clang::UnresolvedUsingTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader19VisitTypedefTypeLocENS_14TypedefTypeLocE\", \"clang::TypeLocReader::VisitTypedefTypeLoc(clang::TypedefTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader22VisitTypeOfExprTypeLocENS_17TypeOfExprTypeLocE\", \"clang::TypeLocReader::VisitTypeOfExprTypeLoc(clang::TypeOfExprTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader18VisitTypeOfTypeLocENS_13TypeOfTypeLocE\", \"clang::TypeLocReader::VisitTypeOfTypeLoc(clang::TypeOfTypeLoc)\"},\n    {\"_ZN5clang9ASTReader17GetTypeSourceInfoERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::GetTypeSourceInfo(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13TypeLocReader20VisitDecltypeTypeLocENS_15DecltypeTypeLocE\", \"clang::TypeLocReader::VisitDecltypeTypeLoc(clang::DecltypeTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader18VisitRecordTypeLocENS_13RecordTypeLocE\", \"clang::TypeLocReader::VisitRecordTypeLoc(clang::RecordTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader16VisitEnumTypeLocENS_11EnumTypeLocE\", \"clang::TypeLocReader::VisitEnumTypeLoc(clang::EnumTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader22VisitAttributedTypeLocENS_17AttributedTypeLocE\", \"clang::TypeLocReader::VisitAttributedTypeLoc(clang::AttributedTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader28VisitTemplateTypeParmTypeLocENS_23TemplateTypeParmTypeLocE\", \"clang::TypeLocReader::VisitTemplateTypeParmTypeLoc(clang::TemplateTypeParmTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader33VisitSubstTemplateTypeParmTypeLocENS_28SubstTemplateTypeParmTypeLocE\", \"clang::TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(clang::SubstTemplateTypeParmTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader37VisitSubstTemplateTypeParmPackTypeLocENS_32SubstTemplateTypeParmPackTypeLocE\", \"clang::TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(clang::SubstTemplateTypeParmPackTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader34VisitTemplateSpecializationTypeLocENS_29TemplateSpecializationTypeLocE\", \"clang::TypeLocReader::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)\"},\n    {\"_ZN5clang9ASTReader26GetTemplateArgumentLocInfoERNS0_11PerFileDataENS_16TemplateArgument7ArgKindERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::GetTemplateArgumentLocInfo(clang::ASTReader::PerFileData&, clang::TemplateArgument::ArgKind, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13TypeLocReader17VisitParenTypeLocENS_12ParenTypeLocE\", \"clang::TypeLocReader::VisitParenTypeLoc(clang::ParenTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader22VisitElaboratedTypeLocENS_17ElaboratedTypeLocE\", \"clang::TypeLocReader::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader29VisitInjectedClassNameTypeLocENS_24InjectedClassNameTypeLocE\", \"clang::TypeLocReader::VisitInjectedClassNameTypeLoc(clang::InjectedClassNameTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitDependentNameTypeLocENS_20DependentNameTypeLocE\", \"clang::TypeLocReader::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader43VisitDependentTemplateSpecializationTypeLocENS_38DependentTemplateSpecializationTypeLocE\", \"clang::TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitPackExpansionTypeLocENS_20PackExpansionTypeLocE\", \"clang::TypeLocReader::VisitPackExpansionTypeLoc(clang::PackExpansionTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader25VisitObjCInterfaceTypeLocENS_20ObjCInterfaceTypeLocE\", \"clang::TypeLocReader::VisitObjCInterfaceTypeLoc(clang::ObjCInterfaceTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader22VisitObjCObjectTypeLocENS_17ObjCObjectTypeLocE\", \"clang::TypeLocReader::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)\"},\n    {\"_ZN5clang13TypeLocReader29VisitObjCObjectPointerTypeLocENS_24ObjCObjectPointerTypeLocE\", \"clang::TypeLocReader::VisitObjCObjectPointerTypeLoc(clang::ObjCObjectPointerTypeLoc)\"},\n    {\"_ZNK5clang9ASTReader9GetTypeIDENS_8QualTypeE\", \"clang::ASTReader::GetTypeID(clang::QualType) const\"},\n    {\"_ZNK5clang9ASTReader10GetTypeIdxENS_8QualTypeE\", \"clang::ASTReader::GetTypeIdx(clang::QualType) const\"},\n    {\"_ZNK5clang9ASTReader28getTotalNumCXXBaseSpecifiersEv\", \"clang::ASTReader::getTotalNumCXXBaseSpecifiers() const\"},\n    {\"_ZN5clang9ASTReader23ReadTemplateArgumentLocERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadTemplateArgumentLoc(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZThn16_N5clang9ASTReader15GetExternalDeclEj\", \"non-virtual thunk to clang::ASTReader::GetExternalDecl(unsigned int)\"},\n    {\"_ZN5clang9ASTReader15GetExternalDeclEj\", \"clang::ASTReader::GetExternalDecl(unsigned int)\"},\n    {\"_ZN5clang9ASTReader26GetCXXBaseSpecifiersOffsetEj\", \"clang::ASTReader::GetCXXBaseSpecifiersOffset(unsigned int)\"},\n    {\"_ZThn16_N5clang9ASTReader28GetExternalCXXBaseSpecifiersEy\", \"non-virtual thunk to clang::ASTReader::GetExternalCXXBaseSpecifiers(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader28GetExternalCXXBaseSpecifiersEy\", \"clang::ASTReader::GetExternalCXXBaseSpecifiers(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader20ReadCXXBaseSpecifierERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadCXXBaseSpecifier(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZThn16_N5clang9ASTReader19GetExternalDeclStmtEy\", \"non-virtual thunk to clang::ASTReader::GetExternalDeclStmt(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader19GetExternalDeclStmtEy\", \"clang::ASTReader::GetExternalDeclStmt(unsigned long long)\"},\n    {\"_ZN5clang9ASTReader18ClearSwitchCaseIDsEv\", \"clang::ASTReader::ClearSwitchCaseIDs()\"},\n    {\"_ZThn16_N5clang9ASTReader24FindExternalLexicalDeclsEPKNS_11DeclContextEPFbNS_4Decl4KindEERN4llvm15SmallVectorImplIPS4_EE\", \"non-virtual thunk to clang::ASTReader::FindExternalLexicalDecls(clang::DeclContext const*, bool (*)(clang::Decl::Kind), llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang9ASTReader24FindExternalLexicalDeclsEPKNS_11DeclContextEPFbNS_4Decl4KindEERN4llvm15SmallVectorImplIPS4_EE\", \"clang::ASTReader::FindExternalLexicalDecls(clang::DeclContext const*, bool (*)(clang::Decl::Kind), llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZThn16_N5clang9ASTReader30FindExternalVisibleDeclsByNameEPKNS_11DeclContextENS_15DeclarationNameE\", \"non-virtual thunk to clang::ASTReader::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName)\"},\n    {\"_ZN5clang9ASTReader30FindExternalVisibleDeclsByNameEPKNS_11DeclContextENS_15DeclarationNameE\", \"clang::ASTReader::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName)\"},\n    {\"_ZThn16_N5clang9ASTReader23MaterializeVisibleDeclsEPKNS_11DeclContextE\", \"non-virtual thunk to clang::ASTReader::MaterializeVisibleDecls(clang::DeclContext const*)\"},\n    {\"_ZN5clang9ASTReader23MaterializeVisibleDeclsEPKNS_11DeclContextE\", \"clang::ASTReader::MaterializeVisibleDecls(clang::DeclContext const*)\"},\n    {\"_ZN5clang9ASTReader30PassInterestingDeclsToConsumerEv\", \"clang::ASTReader::PassInterestingDeclsToConsumer()\"},\n    {\"_ZThn16_N5clang9ASTReader20StartTranslationUnitEPNS_11ASTConsumerE\", \"non-virtual thunk to clang::ASTReader::StartTranslationUnit(clang::ASTConsumer*)\"},\n    {\"_ZN5clang9ASTReader20StartTranslationUnitEPNS_11ASTConsumerE\", \"clang::ASTReader::StartTranslationUnit(clang::ASTConsumer*)\"},\n    {\"_ZThn16_N5clang9ASTReader10PrintStatsEv\", \"non-virtual thunk to clang::ASTReader::PrintStats()\"},\n    {\"_ZN5clang9ASTReader10PrintStatsEv\", \"clang::ASTReader::PrintStats()\"},\n    {\"_ZThn16_N5clang9ASTReader14InitializeSemaERNS_4SemaE\", \"non-virtual thunk to clang::ASTReader::InitializeSema(clang::Sema&)\"},\n    {\"_ZN5clang9ASTReader14InitializeSemaERNS_4SemaE\", \"clang::ASTReader::InitializeSema(clang::Sema&)\"},\n    {\"_ZN5clang9ASTReader14DecodeSelectorEj\", \"clang::ASTReader::DecodeSelector(unsigned int)\"},\n    {\"_ZN5clang9ASTReader3getEPKcS2_\", \"clang::ASTReader::get(char const*, char const*)\"},\n    {\"_ZN5clang21ASTIdentifierIteratorC1ERKNS_9ASTReaderE\", \"clang::ASTIdentifierIterator::ASTIdentifierIterator(clang::ASTReader const&)\"},\n    {\"_ZN5clang21ASTIdentifierIteratorC2ERKNS_9ASTReaderE\", \"clang::ASTIdentifierIterator::ASTIdentifierIterator(clang::ASTReader const&)\"},\n    {\"_ZN5clang21ASTIdentifierIterator4NextEv\", \"clang::ASTIdentifierIterator::Next()\"},\n    {\"_ZThn32_NK5clang9ASTReader14getIdentifiersEv\", \"non-virtual thunk to clang::ASTReader::getIdentifiers() const\"},\n    {\"_ZNK5clang9ASTReader14getIdentifiersEv\", \"clang::ASTReader::getIdentifiers() const\"},\n    {\"_ZThn16_N5clang9ASTReader14ReadMethodPoolENS_8SelectorE\", \"non-virtual thunk to clang::ASTReader::ReadMethodPool(clang::Selector)\"},\n    {\"_ZN5clang9ASTReader14ReadMethodPoolENS_8SelectorE\", \"clang::ASTReader::ReadMethodPool(clang::Selector)\"},\n    {\"_ZN5clang9ASTReader12LoadSelectorENS_8SelectorE\", \"clang::ASTReader::LoadSelector(clang::Selector)\"},\n    {\"_ZN5clang9ASTReader17SetIdentifierInfoEjPNS_14IdentifierInfoE\", \"clang::ASTReader::SetIdentifierInfo(unsigned int, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang9ASTReader23SetGloballyVisibleDeclsEPNS_14IdentifierInfoERKN4llvm15SmallVectorImplIjEEb\", \"clang::ASTReader::SetGloballyVisibleDecls(clang::IdentifierInfo*, llvm::SmallVectorImpl<unsigned int> const&, bool)\"},\n    {\"_ZThn48_N5clang9ASTReader13ReadSLocEntryEj\", \"non-virtual thunk to clang::ASTReader::ReadSLocEntry(unsigned int)\"},\n    {\"_ZN5clang9ASTReader13ReadSLocEntryEj\", \"clang::ASTReader::ReadSLocEntry(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_122ASTSelectorLookupTrait7ReadKeyEPKhj\", \"(anonymous namespace)::ASTSelectorLookupTrait::ReadKey(unsigned char const*, unsigned int)\"},\n    {\"_ZThn16_N5clang9ASTReader19GetExternalSelectorEj\", \"non-virtual thunk to clang::ASTReader::GetExternalSelector(unsigned int)\"},\n    {\"_ZN5clang9ASTReader19GetExternalSelectorEj\", \"clang::ASTReader::GetExternalSelector(unsigned int)\"},\n    {\"_ZThn16_N5clang9ASTReader23GetNumExternalSelectorsEv\", \"non-virtual thunk to clang::ASTReader::GetNumExternalSelectors()\"},\n    {\"_ZN5clang9ASTReader23GetNumExternalSelectorsEv\", \"clang::ASTReader::GetNumExternalSelectors()\"},\n    {\"_ZN5clang9ASTReader19ReadDeclarationNameERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadDeclarationName(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader22ReadDeclarationNameLocERNS0_11PerFileDataERNS_18DeclarationNameLocENS_15DeclarationNameERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadDeclarationNameLoc(clang::ASTReader::PerFileData&, clang::DeclarationNameLoc&, clang::DeclarationName, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader23ReadDeclarationNameInfoERNS0_11PerFileDataERNS_19DeclarationNameInfoERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadDeclarationNameInfo(clang::ASTReader::PerFileData&, clang::DeclarationNameInfo&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader17ReadQualifierInfoERNS0_11PerFileDataERNS_13QualifierInfoERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadQualifierInfo(clang::ASTReader::PerFileData&, clang::QualifierInfo&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader25ReadTemplateParameterListERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadTemplateParameterList(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader10ReadAPSIntERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadAPSInt(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader17ReadUnresolvedSetERNS_17UnresolvedSetImplERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadUnresolvedSet(clang::UnresolvedSetImpl&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader23ReadCXXCtorInitializersERNS0_11PerFileDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadCXXCtorInitializers(clang::ASTReader::PerFileData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader11ReadAPFloatERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadAPFloat(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader10ReadStringERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadString(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader16ReadCXXTemporaryERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTReader::ReadCXXTemporary(llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang9ASTReader18getIdentifierTableEv\", \"clang::ASTReader::getIdentifierTable()\"},\n    {\"_ZN5clang9ASTReader18RecordSwitchCaseIDEPNS_10SwitchCaseEj\", \"clang::ASTReader::RecordSwitchCaseID(clang::SwitchCase*, unsigned int)\"},\n    {\"_ZN5clang9ASTReader19getSwitchCaseWithIDEj\", \"clang::ASTReader::getSwitchCaseWithID(unsigned int)\"},\n    {\"_ZN5clang9ASTReader15RecordLabelStmtEPNS_9LabelStmtEj\", \"clang::ASTReader::RecordLabelStmt(clang::LabelStmt*, unsigned int)\"},\n    {\"_ZN5clang9ASTReader10SetLabelOfEPNS_8GotoStmtEj\", \"clang::ASTReader::SetLabelOf(clang::GotoStmt*, unsigned int)\"},\n    {\"_ZN5clang9ASTReader10SetLabelOfEPNS_13AddrLabelExprEj\", \"clang::ASTReader::SetLabelOf(clang::AddrLabelExpr*, unsigned int)\"},\n    {\"_ZThn16_N5clang9ASTReader21FinishedDeserializingEv\", \"non-virtual thunk to clang::ASTReader::FinishedDeserializing()\"},\n    {\"_ZN5clang9ASTReader21FinishedDeserializingEv\", \"clang::ASTReader::FinishedDeserializing()\"},\n    {\"_ZN5clang9ASTReaderC1ERNS_12PreprocessorEPNS_10ASTContextEPKcbb\", \"clang::ASTReader::ASTReader(clang::Preprocessor&, clang::ASTContext*, char const*, bool, bool)\"},\n    {\"_ZN5clang9ASTReaderC2ERNS_12PreprocessorEPNS_10ASTContextEPKcbb\", \"clang::ASTReader::ASTReader(clang::Preprocessor&, clang::ASTContext*, char const*, bool, bool)\"},\n    {\"_ZN5clang9ASTReaderC1ERNS_13SourceManagerERNS_11FileManagerERNS_10DiagnosticEPKcbb\", \"clang::ASTReader::ASTReader(clang::SourceManager&, clang::FileManager&, clang::Diagnostic&, char const*, bool, bool)\"},\n    {\"_ZN5clang9ASTReaderC2ERNS_13SourceManagerERNS_11FileManagerERNS_10DiagnosticEPKcbb\", \"clang::ASTReader::ASTReader(clang::SourceManager&, clang::FileManager&, clang::Diagnostic&, char const*, bool, bool)\"},\n    {\"_ZThn8_N5clang9ASTReaderD0Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZN5clang9ASTReaderD0Ev\", \"clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn16_N5clang9ASTReaderD0Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn32_N5clang9ASTReaderD0Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn40_N5clang9ASTReaderD0Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn48_N5clang9ASTReaderD0Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZN5clang9ASTReaderD1Ev\", \"clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn8_N5clang9ASTReaderD1Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn16_N5clang9ASTReaderD1Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn32_N5clang9ASTReaderD1Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn40_N5clang9ASTReaderD1Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZThn48_N5clang9ASTReaderD1Ev\", \"non-virtual thunk to clang::ASTReader::~ASTReader()\"},\n    {\"_ZN5clang9ASTReaderD2Ev\", \"clang::ASTReader::~ASTReader()\"},\n    {\"_ZN5clang9ASTReader11PerFileDataD1Ev\", \"clang::ASTReader::PerFileData::~PerFileData()\"},\n    {\"_ZN5clang9ASTReader11PerFileDataC2ENS0_11ASTFileTypeE\", \"clang::ASTReader::PerFileData::PerFileData(clang::ASTReader::ASTFileType)\"},\n    {\"_ZN5clang9ASTReader11PerFileDataD2Ev\", \"clang::ASTReader::PerFileData::~PerFileData()\"},\n    {\"_ZN12_GLOBAL__N_129ASTDeclContextNameLookupTrait7ReadKeyEPKhj\", \"(anonymous namespace)::ASTDeclContextNameLookupTrait::ReadKey(unsigned char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_112ASTStatCacheD1Ev\", \"(anonymous namespace)::ASTStatCache::~ASTStatCache()\"},\n    {\"_ZN12_GLOBAL__N_112ASTStatCacheD0Ev\", \"(anonymous namespace)::ASTStatCache::~ASTStatCache()\"},\n    {\"_ZN12_GLOBAL__N_112ASTStatCache7getStatEPKcR4statPi\", \"(anonymous namespace)::ASTStatCache::getStat(char const*, stat&, int*)\"},\n    {\"_ZSt14set_differenceIPN4llvm9StringRefES2_St20back_insert_iteratorISt6vectorIS1_SaIS1_EEEET1_T_S9_T0_SA_S8_\", \"std::back_insert_iterator<std::vector<llvm::StringRef, std::allocator<llvm::StringRef> > > std::set_difference<llvm::StringRef*, llvm::StringRef*, std::back_insert_iterator<std::vector<llvm::StringRef, std::allocator<llvm::StringRef> > > >(llvm::StringRef*, llvm::StringRef*, llvm::StringRef*, llvm::StringRef*, std::back_insert_iterator<std::vector<llvm::StringRef, std::allocator<llvm::StringRef> > >)\"},\n    {\"_ZN4llvm15BitstreamCursor10ReadRecordEjRNS_15SmallVectorImplIyEEPPKcPj\", \"llvm::BitstreamCursor::ReadRecord(unsigned int, llvm::SmallVectorImpl<unsigned long long>&, char const**, unsigned int*)\"},\n    {\"_ZNSt6vectorIN5clang9LineEntryESaIS1_EE7reserveEm\", \"std::vector<clang::LineEntry, std::allocator<clang::LineEntry> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm15BitstreamCursoraSERKS0_\", \"llvm::BitstreamCursor::operator=(llvm::BitstreamCursor const&)\"},\n    {\"_ZN4llvm15BitstreamCursor9SkipBlockEv\", \"llvm::BitstreamCursor::SkipBlock()\"},\n    {\"_ZN4llvm15BitstreamCursor13EnterSubBlockEjPj\", \"llvm::BitstreamCursor::EnterSubBlock(unsigned int, unsigned int*)\"},\n    {\"_ZN4llvm15BitstreamCursor14ReadSubBlockIDEv\", \"llvm::BitstreamCursor::ReadSubBlockID()\"},\n    {\"_ZN4llvm15BitstreamCursor16ReadAbbrevRecordEv\", \"llvm::BitstreamCursor::ReadAbbrevRecord()\"},\n    {\"_ZN4llvm15SmallVectorImplIyE4swapERS1_\", \"llvm::SmallVectorImpl<unsigned long long>::swap(llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN4llvm15SmallVectorImplIyE6insertIPyEES3_S3_T_S4_\", \"unsigned long long* llvm::SmallVectorImpl<unsigned long long>::insert<unsigned long long*>(unsigned long long*, unsigned long long*, unsigned long long*)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang15MacroDefinitionEE6resizeEj\", \"llvm::SmallVectorImpl<clang::MacroDefinition*>::resize(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang8SelectorEE6resizeEj\", \"llvm::SmallVectorImpl<clang::Selector>::resize(unsigned int)\"},\n    {\"_ZN5clang22OnDiskChainedHashTableINS_24ASTIdentifierLookupTraitEE4findERKSt4pairIPKcjEPS1_\", \"clang::OnDiskChainedHashTable<clang::ASTIdentifierLookupTrait>::find(std::pair<char const*, unsigned int> const&, clang::ASTIdentifierLookupTrait*)\"},\n    {\"_ZN4llvm15BitstreamCursor4ReadEj\", \"llvm::BitstreamCursor::Read(unsigned int)\"},\n    {\"_ZN4llvm15BitstreamCursor18ReadBlockInfoBlockEv\", \"llvm::BitstreamCursor::ReadBlockInfoBlock()\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang9ASTReader15DeclContextInfoEE4swapERS4_\", \"llvm::SmallVectorImpl<clang::ASTReader::DeclContextInfo>::swap(llvm::SmallVectorImpl<clang::ASTReader::DeclContextInfo>&)\"},\n    {\"_ZN5clang14TypeLocVisitorINS_13TypeLocReaderEvE5VisitENS_7TypeLocE\", \"clang::TypeLocVisitor<clang::TypeLocReader, void>::Visit(clang::TypeLoc)\"},\n    {\"_ZN5clang13serialization10MakeTypeIDISt9binder1stISt16const_mem_fun1_tINS0_7TypeIdxENS_9ASTReaderENS_8QualTypeEEEEEjS6_T_\", \"unsigned int clang::serialization::MakeTypeID<std::binder1st<std::const_mem_fun1_t<clang::serialization::TypeIdx, clang::ASTReader, clang::QualType> > >(clang::QualType, std::binder1st<std::const_mem_fun1_t<clang::serialization::TypeIdx, clang::ASTReader, clang::QualType> >)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorENS1_14SourceLocationENS_12DenseMapInfoIS2_EENS4_IS3_EEE6insertERKSt4pairIS2_S3_E\", \"llvm::DenseMap<clang::Selector, clang::SourceLocation, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::SourceLocation> >::insert(std::pair<clang::Selector, clang::SourceLocation> const&)\"},\n    {\"_ZNSt5dequeISt4pairIPN5clang9ValueDeclENS1_14SourceLocationEESaIS5_EE9push_backERKS5_\", \"std::deque<std::pair<clang::ValueDecl*, clang::SourceLocation>, std::allocator<std::pair<clang::ValueDecl*, clang::SourceLocation> > >::push_back(std::pair<clang::ValueDecl*, clang::SourceLocation> const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoENS1_4Sema8WeakInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::Sema::WeakInfo, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::Sema::WeakInfo> >::insert(std::pair<clang::IdentifierInfo*, clang::Sema::WeakInfo> const&)\"},\n    {\"_ZN5clang17ASTReaderListener19ReadLanguageOptionsERKNS_11LangOptionsE\", \"clang::ASTReaderListener::ReadLanguageOptions(clang::LangOptions const&)\"},\n    {\"_ZN5clang17ASTReaderListener16ReadTargetTripleEN4llvm9StringRefE\", \"clang::ASTReaderListener::ReadTargetTriple(llvm::StringRef)\"},\n    {\"_ZN5clang17ASTReaderListener20ReadPredefinesBufferERKN4llvm11SmallVectorINS_18PCHPredefinesBlockELj2EEENS1_9StringRefERSs\", \"clang::ASTReaderListener::ReadPredefinesBuffer(llvm::SmallVector<clang::PCHPredefinesBlock, 2u> const&, llvm::StringRef, std::string&)\"},\n    {\"_ZN5clang17ASTReaderListener18ReadHeaderFileInfoERKNS_14HeaderFileInfoEj\", \"clang::ASTReaderListener::ReadHeaderFileInfo(clang::HeaderFileInfo const&, unsigned int)\"},\n    {\"_ZN5clang17ASTReaderListener11ReadCounterEj\", \"clang::ASTReaderListener::ReadCounter(unsigned int)\"},\n    {\"_ZN5clang12PCHValidatorD1Ev\", \"clang::PCHValidator::~PCHValidator()\"},\n    {\"_ZN5clang12PCHValidatorD0Ev\", \"clang::PCHValidator::~PCHValidator()\"},\n    {\"_ZN5clang9ASTReader20StartedDeserializingEv\", \"clang::ASTReader::StartedDeserializing()\"},\n    {\"_ZN5clang9ASTReader10ForgetSemaEv\", \"clang::ASTReader::ForgetSema()\"},\n    {\"_ZN5clang9ASTReader3getEN4llvm9StringRefE\", \"clang::ASTReader::get(llvm::StringRef)\"},\n    {\"_ZN5clang9ASTReader13GetIdentifierEj\", \"clang::ASTReader::GetIdentifier(unsigned int)\"},\n    {\"_ZThn16_N5clang9ASTReader20StartedDeserializingEv\", \"non-virtual thunk to clang::ASTReader::StartedDeserializing()\"},\n    {\"_ZThn16_N5clang9ASTReader10ForgetSemaEv\", \"non-virtual thunk to clang::ASTReader::ForgetSema()\"},\n    {\"_ZThn32_N5clang9ASTReader3getEN4llvm9StringRefE\", \"non-virtual thunk to clang::ASTReader::get(llvm::StringRef)\"},\n    {\"_ZThn40_N5clang9ASTReader13GetIdentifierEj\", \"non-virtual thunk to clang::ASTReader::GetIdentifier(unsigned int)\"},\n    {\"_ZN5clang21ASTIdentifierIteratorD1Ev\", \"clang::ASTIdentifierIterator::~ASTIdentifierIterator()\"},\n    {\"_ZN5clang21ASTIdentifierIteratorD0Ev\", \"clang::ASTIdentifierIterator::~ASTIdentifierIterator()\"},\n    {\"_ZNSt5dequeIN5clang9ASTReader21PendingIdentifierInfoESaIS2_EED2Ev\", \"std::deque<clang::ASTReader::PendingIdentifierInfo, std::allocator<clang::ASTReader::PendingIdentifierInfo> >::~deque()\"},\n    {\"_ZNSt5dequeIN5clang9ASTReader21PendingIdentifierInfoESaIS2_EE19_M_destroy_data_auxESt15_Deque_iteratorIS2_RS2_PS2_ES8_\", \"std::deque<clang::ASTReader::PendingIdentifierInfo, std::allocator<clang::ASTReader::PendingIdentifierInfo> >::_M_destroy_data_aux(std::_Deque_iterator<clang::ASTReader::PendingIdentifierInfo, clang::ASTReader::PendingIdentifierInfo&, clang::ASTReader::PendingIdentifierInfo*>, std::_Deque_iterator<clang::ASTReader::PendingIdentifierInfo, clang::ASTReader::PendingIdentifierInfo&, clang::ASTReader::PendingIdentifierInfo*>)\"},\n    {\"_ZNSt11_Deque_baseIPN5clang4DeclESaIS2_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::Decl*, std::allocator<clang::Decl*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt11_Deque_baseIN5clang9ASTReader21PendingIdentifierInfoESaIS2_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::ASTReader::PendingIdentifierInfo, std::allocator<clang::ASTReader::PendingIdentifierInfo> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang13AddrLabelExprEESt10_Select1stIS5_ESt4lessIjESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::AddrLabelExpr*>, std::_Select1st<std::pair<unsigned int const, clang::AddrLabelExpr*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::AddrLabelExpr*> > >::erase(std::_Rb_tree_iterator<std::pair<unsigned int const, clang::AddrLabelExpr*> >, std::_Rb_tree_iterator<std::pair<unsigned int const, clang::AddrLabelExpr*> >)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang13AddrLabelExprEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::AddrLabelExpr*>, std::_Select1st<std::pair<unsigned int const, clang::AddrLabelExpr*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::AddrLabelExpr*> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, clang::AddrLabelExpr*> >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang8GotoStmtEESt10_Select1stIS5_ESt4lessIjESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::GotoStmt*>, std::_Select1st<std::pair<unsigned int const, clang::GotoStmt*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::GotoStmt*> > >::erase(std::_Rb_tree_iterator<std::pair<unsigned int const, clang::GotoStmt*> >, std::_Rb_tree_iterator<std::pair<unsigned int const, clang::GotoStmt*> >)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang8GotoStmtEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::GotoStmt*>, std::_Select1st<std::pair<unsigned int const, clang::GotoStmt*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::GotoStmt*> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, clang::GotoStmt*> >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang9LabelStmtEESt10_Select1stIS5_ESt4lessIjESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::LabelStmt*>, std::_Select1st<std::pair<unsigned int const, clang::LabelStmt*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::LabelStmt*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, clang::LabelStmt*> >, std::pair<unsigned int const, clang::LabelStmt*> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang9LabelStmtEESt10_Select1stIS5_ESt4lessIjESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::LabelStmt*>, std::_Select1st<std::pair<unsigned int const, clang::LabelStmt*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::LabelStmt*> > >::_M_insert_unique(std::pair<unsigned int const, clang::LabelStmt*> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang10SwitchCaseEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::SwitchCase*>, std::_Select1st<std::pair<unsigned int const, clang::SwitchCase*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::SwitchCase*> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, clang::SwitchCase*> >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang10SwitchCaseEESt10_Select1stIS5_ESt4lessIjESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::SwitchCase*>, std::_Select1st<std::pair<unsigned int const, clang::SwitchCase*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::SwitchCase*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, clang::SwitchCase*> >, std::pair<unsigned int const, clang::SwitchCase*> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang10SwitchCaseEESt10_Select1stIS5_ESt4lessIjESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::SwitchCase*>, std::_Select1st<std::pair<unsigned int const, clang::SwitchCase*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::SwitchCase*> > >::_M_insert_unique(std::pair<unsigned int const, clang::SwitchCase*> const&)\"},\n    {\"_ZNSt5dequeIN5clang9ASTReader21PendingIdentifierInfoESaIS2_EE16_M_push_back_auxERKS2_\", \"std::deque<clang::ASTReader::PendingIdentifierInfo, std::allocator<clang::ASTReader::PendingIdentifierInfo> >::_M_push_back_aux(clang::ASTReader::PendingIdentifierInfo const&)\"},\n    {\"_ZNSt5dequeIN5clang9ASTReader21PendingIdentifierInfoESaIS2_EE17_M_reallocate_mapEmb\", \"std::deque<clang::ASTReader::PendingIdentifierInfo, std::allocator<clang::ASTReader::PendingIdentifierInfo> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang13CXXRecordDeclEbNS_12DenseMapInfoIS3_EENS4_IbEEE16InsertIntoBucketERKS3_RKbPSt4pairIS3_bE\", \"llvm::DenseMap<clang::CXXRecordDecl*, bool, llvm::DenseMapInfo<clang::CXXRecordDecl*>, llvm::DenseMapInfo<bool> >::InsertIntoBucket(clang::CXXRecordDecl* const&, bool const&, std::pair<clang::CXXRecordDecl*, bool>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang13CXXRecordDeclEbNS_12DenseMapInfoIS3_EENS4_IbEEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl*, bool, llvm::DenseMapInfo<clang::CXXRecordDecl*>, llvm::DenseMapInfo<bool> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoENS1_4Sema8WeakInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::Sema::WeakInfo, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::Sema::WeakInfo> >::InsertIntoBucket(clang::IdentifierInfo* const&, clang::Sema::WeakInfo const&, std::pair<clang::IdentifierInfo*, clang::Sema::WeakInfo>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoENS1_4Sema8WeakInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::Sema::WeakInfo, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::Sema::WeakInfo> >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeISt4pairIPN5clang9ValueDeclENS1_14SourceLocationEESaIS5_EE17_M_reallocate_mapEmb\", \"std::deque<std::pair<clang::ValueDecl*, clang::SourceLocation>, std::allocator<std::pair<clang::ValueDecl*, clang::SourceLocation> > >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorENS1_14SourceLocationENS_12DenseMapInfoIS2_EENS4_IS3_EEE16InsertIntoBucketERKS2_RKS3_PSt4pairIS2_S3_E\", \"llvm::DenseMap<clang::Selector, clang::SourceLocation, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::SourceLocation> >::InsertIntoBucket(clang::Selector const&, clang::SourceLocation const&, std::pair<clang::Selector, clang::SourceLocation>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorENS1_14SourceLocationENS_12DenseMapInfoIS2_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<clang::Selector, clang::SourceLocation, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::SourceLocation> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameEPNS1_9NamedDeclENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::DeclarationName, clang::NamedDecl*, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::NamedDecl*> >::InsertIntoBucket(clang::DeclarationName const&, clang::NamedDecl* const&, std::pair<clang::DeclarationName, clang::NamedDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameEPNS1_9NamedDeclENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::DeclarationName, clang::NamedDecl*, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::NamedDecl*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang9ASTReader15DeclContextInfoEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::ASTReader::DeclContextInfo>::operator=(llvm::SmallVectorImpl<clang::ASTReader::DeclContextInfo> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang9ASTReader15DeclContextInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ASTReader::DeclContextInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8QualTypeENS1_13serialization7TypeIdxENS3_26UnsafeQualTypeDenseMapInfoENS_12DenseMapInfoIS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::QualType, clang::serialization::TypeIdx, clang::serialization::UnsafeQualTypeDenseMapInfo, llvm::DenseMapInfo<clang::serialization::TypeIdx> >::InsertIntoBucket(clang::QualType const&, clang::serialization::TypeIdx const&, std::pair<clang::QualType, clang::serialization::TypeIdx>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8QualTypeENS1_13serialization7TypeIdxENS3_26UnsafeQualTypeDenseMapInfoENS_12DenseMapInfoIS4_EEE4growEj\", \"llvm::DenseMap<clang::QualType, clang::serialization::TypeIdx, clang::serialization::UnsafeQualTypeDenseMapInfo, llvm::DenseMapInfo<clang::serialization::TypeIdx> >::grow(unsigned int)\"},\n    {\"_ZN5clang24ASTIdentifierLookupTrait8ReadDataERKSt4pairIPKcjEPKhj\", \"clang::ASTIdentifierLookupTrait::ReadData(std::pair<char const*, unsigned int> const&, unsigned char const*, unsigned int)\"},\n    {\"_ZNSt6vectorIPN5clang4DeclESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<clang::Decl*, std::allocator<clang::Decl*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::Decl**, std::vector<clang::Decl*, std::allocator<clang::Decl*> > >, unsigned long, clang::Decl* const&)\"},\n    {\"_ZNSt6vectorIN5clang8QualTypeESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<clang::QualType, std::allocator<clang::QualType> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::QualType*, std::vector<clang::QualType, std::allocator<clang::QualType> > >, unsigned long, clang::QualType const&)\"},\n    {\"_ZNSt6vectorIPN5clang14IdentifierInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<clang::IdentifierInfo*, std::allocator<clang::IdentifierInfo*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::IdentifierInfo**, std::vector<clang::IdentifierInfo*, std::allocator<clang::IdentifierInfo*> > >, unsigned long, clang::IdentifierInfo* const&)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIPN5clang9ASTReader11PerFileDataEyENS_12DenseMapInfoIjEENS7_IS6_EEE16InsertIntoBucketERKjRKS6_PS1_IjS6_E\", \"llvm::DenseMap<unsigned int, std::pair<clang::ASTReader::PerFileData*, unsigned long long>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<clang::ASTReader::PerFileData*, unsigned long long> > >::InsertIntoBucket(unsigned int const&, std::pair<clang::ASTReader::PerFileData*, unsigned long long> const&, std::pair<unsigned int, std::pair<clang::ASTReader::PerFileData*, unsigned long long> >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIPN5clang9ASTReader11PerFileDataEyENS_12DenseMapInfoIjEENS7_IS6_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::pair<clang::ASTReader::PerFileData*, unsigned long long>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<clang::ASTReader::PerFileData*, unsigned long long> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIPN5clang9ASTReader11PerFileDataEyELj2EEENS_12DenseMapInfoIjEENS9_IS8_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u> > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIPN5clang9ASTReader11PerFileDataEyELj2EEENS_12DenseMapInfoIjEENS9_IS8_EEE16InsertIntoBucketERKjRKS8_PS2_IjS8_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u> const&, std::pair<unsigned int, llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIPN5clang9ASTReader11PerFileDataEyELj2EEENS_12DenseMapInfoIjEENS9_IS8_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::ASTReader::PerFileData*, unsigned long long>, 2u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPN5clang9ASTReader11PerFileDataEyEEaSERKS7_\", \"llvm::SmallVectorImpl<std::pair<clang::ASTReader::PerFileData*, unsigned long long> >::operator=(llvm::SmallVectorImpl<std::pair<clang::ASTReader::PerFileData*, unsigned long long> > const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPvLj1EEENS_12DenseMapInfoIjEENS4_IS3_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<void*, 1u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<void*, 1u> > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPvLj1EEENS_12DenseMapInfoIjEENS4_IS3_EEE16InsertIntoBucketERKjRKS3_PSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<void*, 1u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<void*, 1u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallVector<void*, 1u> const&, std::pair<unsigned int, llvm::SmallVector<void*, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPvLj1EEENS_12DenseMapInfoIjEENS4_IS3_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<void*, 1u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<void*, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPvEaSERKS2_\", \"llvm::SmallVectorImpl<void*>::operator=(llvm::SmallVectorImpl<void*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextENS_11SmallVectorINS1_9ASTReader15DeclContextInfoELj1EEENS_12DenseMapInfoIS4_EENS9_IS8_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::DeclContext const*, llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u>, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u> > >::FindAndConstruct(clang::DeclContext const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextENS_11SmallVectorINS1_9ASTReader15DeclContextInfoELj1EEENS_12DenseMapInfoIS4_EENS9_IS8_EEE16InsertIntoBucketERKS4_RKS8_PSt4pairIS4_S8_E\", \"llvm::DenseMap<clang::DeclContext const*, llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u>, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u> > >::InsertIntoBucket(clang::DeclContext const* const&, llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u> const&, std::pair<clang::DeclContext const*, llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang11DeclContextENS_11SmallVectorINS1_9ASTReader15DeclContextInfoELj1EEENS_12DenseMapInfoIS4_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<clang::DeclContext const*, llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u>, llvm::DenseMapInfo<clang::DeclContext const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ASTReader::DeclContextInfo, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEyNS_12DenseMapInfoIS3_EENS4_IyEEE16InsertIntoBucketERKS3_RKyPSt4pairIS3_yE\", \"llvm::DenseMap<clang::IdentifierInfo*, unsigned long long, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(clang::IdentifierInfo* const&, unsigned long long const&, std::pair<clang::IdentifierInfo*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEyNS_12DenseMapInfoIS3_EENS4_IyEEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, unsigned long long, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang18PCHPredefinesBlockELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::PCHPredefinesBlock, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS2_ERKS2_\", \"std::_Rb_tree<int, std::pair<int const, int>, std::_Select1st<std::pair<int const, int> >, std::less<int>, std::allocator<std::pair<int const, int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, int> >, std::pair<int const, int> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<int, std::pair<int const, int>, std::_Select1st<std::pair<int const, int> >, std::less<int>, std::allocator<std::pair<int const, int> > >::_M_insert_unique(std::pair<int const, int> const&)\"},\n    {\"_ZSt16__introsort_loopIPN4llvm9StringRefElEvT_S3_T0_\", \"void std::__introsort_loop<llvm::StringRef*, long>(llvm::StringRef*, llvm::StringRef*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPN4llvm9StringRefEEvT_S3_\", \"void std::__final_insertion_sort<llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*)\"},\n    {\"_ZSt16__insertion_sortIPN4llvm9StringRefEEvT_S3_\", \"void std::__insertion_sort<llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*)\"},\n    {\"_ZSt21__unguarded_partitionIPN4llvm9StringRefES1_ET_S3_S3_T0_\", \"llvm::StringRef* std::__unguarded_partition<llvm::StringRef*, llvm::StringRef>(llvm::StringRef*, llvm::StringRef*, llvm::StringRef)\"},\n    {\"_ZSt8__medianIN4llvm9StringRefEERKT_S4_S4_S4_\", \"llvm::StringRef const& std::__median<llvm::StringRef>(llvm::StringRef const&, llvm::StringRef const&, llvm::StringRef const&)\"},\n    {\"_ZSt13__heap_selectIPN4llvm9StringRefEEvT_S3_S3_\", \"void std::__heap_select<llvm::StringRef*>(llvm::StringRef*, llvm::StringRef*, llvm::StringRef*)\"},\n    {\"_ZSt13__adjust_heapIPN4llvm9StringRefElS1_EvT_T0_S4_T1_\", \"void std::__adjust_heap<llvm::StringRef*, long, llvm::StringRef>(llvm::StringRef*, long, long, llvm::StringRef)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang18PCHPredefinesBlockEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::PCHPredefinesBlock>::operator=(llvm::SmallVectorImpl<clang::PCHPredefinesBlock> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9StringRefEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::StringRef>::operator=(llvm::SmallVectorImpl<llvm::StringRef> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN5clang9LabelStmtEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, clang::LabelStmt*>, std::_Select1st<std::pair<unsigned int const, clang::LabelStmt*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, clang::LabelStmt*> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, clang::LabelStmt*> >*)\"},\n    {\"_ZN5clang18ExternalSemaSource14InitializeSemaERNS_4SemaE\", \"clang::ExternalSemaSource::InitializeSema(clang::Sema&)\"},\n    {\"_ZN5clang18ExternalSemaSource10ForgetSemaEv\", \"clang::ExternalSemaSource::ForgetSema()\"},\n    {\"_ZN4llvm15BitstreamReaderD2Ev\", \"llvm::BitstreamReader::~BitstreamReader()\"},\n    {\"_ZN4llvm15BitstreamReader9BlockInfoD2Ev\", \"llvm::BitstreamReader::BlockInfo::~BlockInfo()\"},\n    {\"_ZN4llvm15BitstreamReader20getOrCreateBlockInfoEj\", \"llvm::BitstreamReader::getOrCreateBlockInfo(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIjSsESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, std::string>*, std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > > >, std::pair<unsigned int, std::string> const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIN4llvm15BitstreamReader9BlockInfoEE9constructEPS3_RKS3_\", \"__gnu_cxx::new_allocator<llvm::BitstreamReader::BlockInfo>::construct(llvm::BitstreamReader::BlockInfo*, llvm::BitstreamReader::BlockInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm15BitstreamReader9BlockInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BitstreamReader::BlockInfo, std::allocator<llvm::BitstreamReader::BlockInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BitstreamReader::BlockInfo*, std::vector<llvm::BitstreamReader::BlockInfo, std::allocator<llvm::BitstreamReader::BlockInfo> > >, llvm::BitstreamReader::BlockInfo const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN4llvm15BitstreamReader9BlockInfoES3_ET0_T_S5_S4_St12__false_type\", \"llvm::BitstreamReader::BlockInfo* std::__uninitialized_copy_aux<llvm::BitstreamReader::BlockInfo*, llvm::BitstreamReader::BlockInfo*>(llvm::BitstreamReader::BlockInfo*, llvm::BitstreamReader::BlockInfo*, llvm::BitstreamReader::BlockInfo*, std::__false_type)\"},\n    {\"_ZNSt6vectorIPN4llvm13BitCodeAbbrevESaIS2_EEaSERKS4_\", \"std::vector<llvm::BitCodeAbbrev*, std::allocator<llvm::BitCodeAbbrev*> >::operator=(std::vector<llvm::BitCodeAbbrev*, std::allocator<llvm::BitCodeAbbrev*> > const&)\"},\n    {\"_ZNSt6vectorISt4pairIjSsESaIS1_EEaSERKS3_\", \"std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > >::operator=(std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIjSsESaIS1_EEC2ERKS3_\", \"std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > >::vector(std::vector<std::pair<unsigned int, std::string>, std::allocator<std::pair<unsigned int, std::string> > > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm13BitCodeAbbrevESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BitCodeAbbrev*, std::allocator<llvm::BitCodeAbbrev*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BitCodeAbbrev**, std::vector<llvm::BitCodeAbbrev*, std::allocator<llvm::BitCodeAbbrev*> > >, llvm::BitCodeAbbrev* const&)\"},\n    {\"_ZN4llvm15BitstreamCursor9freeStateEv\", \"llvm::BitstreamCursor::freeState()\"},\n    {\"_ZN5clang19FileSystemStatCacheD1Ev\", \"clang::FileSystemStatCache::~FileSystemStatCache()\"},\n    {\"_ZN5clang19FileSystemStatCacheD0Ev\", \"clang::FileSystemStatCache::~FileSystemStatCache()\"},\n    {\"_ZN4llvm15BitstreamCursorD2Ev\", \"llvm::BitstreamCursor::~BitstreamCursor()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15BitCodeAbbrevOpELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::BitCodeAbbrevOp, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15BitstreamCursor13PopBlockScopeEv\", \"llvm::BitstreamCursor::PopBlockScope()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_15BitstreamCursor5BlockEE9push_backERKS2_\", \"llvm::SmallVectorImpl<llvm::BitstreamCursor::Block>::push_back(llvm::BitstreamCursor::Block const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15BitstreamCursor5BlockELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::BitstreamCursor::Block, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15BitstreamCursor5BlockELb0EE18uninitialized_copyIPS2_S5_EEvT_S6_T0_\", \"void llvm::SmallVectorTemplateBase<llvm::BitstreamCursor::Block, false>::uninitialized_copy<llvm::BitstreamCursor::Block*, llvm::BitstreamCursor::Block*>(llvm::BitstreamCursor::Block*, llvm::BitstreamCursor::Block*, llvm::BitstreamCursor::Block*)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<int, std::pair<int const, int>, std::_Select1st<std::pair<int const, int> >, std::less<int>, std::allocator<std::pair<int const, int> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, int> >*)\"},\n    {\"_ZN4llvm15BitstreamCursor20ReadAbbreviatedFieldERKNS_15BitCodeAbbrevOpERNS_15SmallVectorImplIyEE\", \"llvm::BitstreamCursor::ReadAbbreviatedField(llvm::BitCodeAbbrevOp const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang13ASTDeclReader22GetCurrentCursorOffsetEv\", \"clang::ASTDeclReader::GetCurrentCursorOffset()\"},\n    {\"_ZN5clang13ASTDeclReader5VisitEPNS_4DeclE\", \"clang::ASTDeclReader::Visit(clang::Decl*)\"},\n    {\"_ZN5clang13ASTDeclReader9VisitDeclEPNS_4DeclE\", \"clang::ASTDeclReader::VisitDecl(clang::Decl*)\"},\n    {\"_ZN5clang9ASTReader14ReadAttributesERNS0_11PerFileDataERN4llvm11SmallVectorIPNS_4AttrELj2EEERKNS4_IyLj64EEERj\", \"clang::ASTReader::ReadAttributes(clang::ASTReader::PerFileData&, llvm::SmallVector<clang::Attr*, 2u>&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13ASTDeclReader24VisitTranslationUnitDeclEPNS_19TranslationUnitDeclE\", \"clang::ASTDeclReader::VisitTranslationUnitDecl(clang::TranslationUnitDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader14VisitNamedDeclEPNS_9NamedDeclE\", \"clang::ASTDeclReader::VisitNamedDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader13VisitTypeDeclEPNS_8TypeDeclE\", \"clang::ASTDeclReader::VisitTypeDecl(clang::TypeDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader16VisitTypedefDeclEPNS_11TypedefDeclE\", \"clang::ASTDeclReader::VisitTypedefDecl(clang::TypedefDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader12VisitTagDeclEPNS_7TagDeclE\", \"clang::ASTDeclReader::VisitTagDecl(clang::TagDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader13VisitEnumDeclEPNS_8EnumDeclE\", \"clang::ASTDeclReader::VisitEnumDecl(clang::EnumDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader15VisitRecordDeclEPNS_10RecordDeclE\", \"clang::ASTDeclReader::VisitRecordDecl(clang::RecordDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader14VisitValueDeclEPNS_9ValueDeclE\", \"clang::ASTDeclReader::VisitValueDecl(clang::ValueDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitEnumConstantDeclEPNS_16EnumConstantDeclE\", \"clang::ASTDeclReader::VisitEnumConstantDecl(clang::EnumConstantDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader19VisitDeclaratorDeclEPNS_14DeclaratorDeclE\", \"clang::ASTDeclReader::VisitDeclaratorDecl(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitFunctionDeclEPNS_12FunctionDeclE\", \"clang::ASTDeclReader::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader19VisitObjCMethodDeclEPNS_14ObjCMethodDeclE\", \"clang::ASTDeclReader::VisitObjCMethodDecl(clang::ObjCMethodDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitObjCContainerDeclEPNS_17ObjCContainerDeclE\", \"clang::ASTDeclReader::VisitObjCContainerDecl(clang::ObjCContainerDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitObjCInterfaceDeclEPNS_17ObjCInterfaceDeclE\", \"clang::ASTDeclReader::VisitObjCInterfaceDecl(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitObjCIvarDeclEPNS_12ObjCIvarDeclE\", \"clang::ASTDeclReader::VisitObjCIvarDecl(clang::ObjCIvarDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader14VisitFieldDeclEPNS_9FieldDeclE\", \"clang::ASTDeclReader::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitObjCProtocolDeclEPNS_16ObjCProtocolDeclE\", \"clang::ASTDeclReader::VisitObjCProtocolDecl(clang::ObjCProtocolDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader24VisitObjCAtDefsFieldDeclEPNS_19ObjCAtDefsFieldDeclE\", \"clang::ASTDeclReader::VisitObjCAtDefsFieldDecl(clang::ObjCAtDefsFieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader18VisitObjCClassDeclEPNS_13ObjCClassDeclE\", \"clang::ASTDeclReader::VisitObjCClassDecl(clang::ObjCClassDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader28VisitObjCForwardProtocolDeclEPNS_23ObjCForwardProtocolDeclE\", \"clang::ASTDeclReader::VisitObjCForwardProtocolDecl(clang::ObjCForwardProtocolDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitObjCCategoryDeclEPNS_16ObjCCategoryDeclE\", \"clang::ASTDeclReader::VisitObjCCategoryDecl(clang::ObjCCategoryDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader28VisitObjCCompatibleAliasDeclEPNS_23ObjCCompatibleAliasDeclE\", \"clang::ASTDeclReader::VisitObjCCompatibleAliasDecl(clang::ObjCCompatibleAliasDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitObjCPropertyDeclEPNS_16ObjCPropertyDeclE\", \"clang::ASTDeclReader::VisitObjCPropertyDecl(clang::ObjCPropertyDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitObjCImplDeclEPNS_12ObjCImplDeclE\", \"clang::ASTDeclReader::VisitObjCImplDecl(clang::ObjCImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader25VisitObjCCategoryImplDeclEPNS_20ObjCCategoryImplDeclE\", \"clang::ASTDeclReader::VisitObjCCategoryImplDecl(clang::ObjCCategoryImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader27VisitObjCImplementationDeclEPNS_22ObjCImplementationDeclE\", \"clang::ASTDeclReader::VisitObjCImplementationDecl(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader25VisitObjCPropertyImplDeclEPNS_20ObjCPropertyImplDeclE\", \"clang::ASTDeclReader::VisitObjCPropertyImplDecl(clang::ObjCPropertyImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitIndirectFieldDeclEPNS_17IndirectFieldDeclE\", \"clang::ASTDeclReader::VisitIndirectFieldDecl(clang::IndirectFieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader12VisitVarDeclEPNS_7VarDeclE\", \"clang::ASTDeclReader::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitImplicitParamDeclEPNS_17ImplicitParamDeclE\", \"clang::ASTDeclReader::VisitImplicitParamDecl(clang::ImplicitParamDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader16VisitParmVarDeclEPNS_11ParmVarDeclE\", \"clang::ASTDeclReader::VisitParmVarDecl(clang::ParmVarDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitFileScopeAsmDeclEPNS_16FileScopeAsmDeclE\", \"clang::ASTDeclReader::VisitFileScopeAsmDecl(clang::FileScopeAsmDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader14VisitBlockDeclEPNS_9BlockDeclE\", \"clang::ASTDeclReader::VisitBlockDecl(clang::BlockDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader20VisitLinkageSpecDeclEPNS_15LinkageSpecDeclE\", \"clang::ASTDeclReader::VisitLinkageSpecDecl(clang::LinkageSpecDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader18VisitNamespaceDeclEPNS_13NamespaceDeclE\", \"clang::ASTDeclReader::VisitNamespaceDecl(clang::NamespaceDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader23VisitNamespaceAliasDeclEPNS_18NamespaceAliasDeclE\", \"clang::ASTDeclReader::VisitNamespaceAliasDecl(clang::NamespaceAliasDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader14VisitUsingDeclEPNS_9UsingDeclE\", \"clang::ASTDeclReader::VisitUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader20VisitUsingShadowDeclEPNS_15UsingShadowDeclE\", \"clang::ASTDeclReader::VisitUsingShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader23VisitUsingDirectiveDeclEPNS_18UsingDirectiveDeclE\", \"clang::ASTDeclReader::VisitUsingDirectiveDecl(clang::UsingDirectiveDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader29VisitUnresolvedUsingValueDeclEPNS_24UnresolvedUsingValueDeclE\", \"clang::ASTDeclReader::VisitUnresolvedUsingValueDecl(clang::UnresolvedUsingValueDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader32VisitUnresolvedUsingTypenameDeclEPNS_27UnresolvedUsingTypenameDeclE\", \"clang::ASTDeclReader::VisitUnresolvedUsingTypenameDecl(clang::UnresolvedUsingTypenameDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21ReadCXXDefinitionDataERNS_13CXXRecordDecl14DefinitionDataERKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTDeclReader::ReadCXXDefinitionData(clang::CXXRecordDecl::DefinitionData&, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13ASTDeclReader27InitializeCXXDefinitionDataEPNS_13CXXRecordDeclES2_RKN4llvm11SmallVectorIyLj64EEERj\", \"clang::ASTDeclReader::InitializeCXXDefinitionData(clang::CXXRecordDecl*, clang::CXXRecordDecl*, llvm::SmallVector<unsigned long long, 64u> const&, unsigned int&)\"},\n    {\"_ZN5clang13ASTDeclReader18VisitCXXRecordDeclEPNS_13CXXRecordDeclE\", \"clang::ASTDeclReader::VisitCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader18VisitCXXMethodDeclEPNS_13CXXMethodDeclE\", \"clang::ASTDeclReader::VisitCXXMethodDecl(clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader23VisitCXXConstructorDeclEPNS_18CXXConstructorDeclE\", \"clang::ASTDeclReader::VisitCXXConstructorDecl(clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitCXXDestructorDeclEPNS_17CXXDestructorDeclE\", \"clang::ASTDeclReader::VisitCXXDestructorDecl(clang::CXXDestructorDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitCXXConversionDeclEPNS_17CXXConversionDeclE\", \"clang::ASTDeclReader::VisitCXXConversionDecl(clang::CXXConversionDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader19VisitAccessSpecDeclEPNS_14AccessSpecDeclE\", \"clang::ASTDeclReader::VisitAccessSpecDecl(clang::AccessSpecDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader15VisitFriendDeclEPNS_10FriendDeclE\", \"clang::ASTDeclReader::VisitFriendDecl(clang::FriendDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader23VisitFriendTemplateDeclEPNS_18FriendTemplateDeclE\", \"clang::ASTDeclReader::VisitFriendTemplateDecl(clang::FriendTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitTemplateDeclEPNS_12TemplateDeclE\", \"clang::ASTDeclReader::VisitTemplateDecl(clang::TemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader29VisitRedeclarableTemplateDeclEPNS_24RedeclarableTemplateDeclE\", \"clang::ASTDeclReader::VisitRedeclarableTemplateDecl(clang::RedeclarableTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader22VisitClassTemplateDeclEPNS_17ClassTemplateDeclE\", \"clang::ASTDeclReader::VisitClassTemplateDecl(clang::ClassTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader36VisitClassTemplateSpecializationDeclEPNS_31ClassTemplateSpecializationDeclE\", \"clang::ASTDeclReader::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader43VisitClassTemplatePartialSpecializationDeclEPNS_38ClassTemplatePartialSpecializationDeclE\", \"clang::ASTDeclReader::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader25VisitFunctionTemplateDeclEPNS_20FunctionTemplateDeclE\", \"clang::ASTDeclReader::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader25VisitTemplateTypeParmDeclEPNS_20TemplateTypeParmDeclE\", \"clang::ASTDeclReader::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader28VisitNonTypeTemplateParmDeclEPNS_23NonTypeTemplateParmDeclE\", \"clang::ASTDeclReader::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader29VisitTemplateTemplateParmDeclEPNS_24TemplateTemplateParmDeclE\", \"clang::ASTDeclReader::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader21VisitStaticAssertDeclEPNS_16StaticAssertDeclE\", \"clang::ASTDeclReader::VisitStaticAssertDecl(clang::StaticAssertDecl*)\"},\n    {\"_ZN5clang13ASTDeclReader16VisitDeclContextEPNS_11DeclContextE\", \"clang::ASTDeclReader::VisitDeclContext(clang::DeclContext*)\"},\n    {\"_ZN5clang9ASTReader18DeclCursorForIndexEjj\", \"clang::ASTReader::DeclCursorForIndex(unsigned int, unsigned int)\"},\n    {\"_ZN5clang9ASTReader14ReadDeclRecordEjj\", \"clang::ASTReader::ReadDeclRecord(unsigned int, unsigned int)\"},\n    {\"_ZN5clang13ASTDeclReader10UpdateDeclEPNS_4DeclERKN4llvm11SmallVectorIyLj64EEE\", \"clang::ASTDeclReader::UpdateDecl(clang::Decl*, llvm::SmallVector<unsigned long long, 64u> const&)\"},\n    {\"_ZN5clang11DeclVisitorINS_13ASTDeclReaderEvE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<clang::ASTDeclReader, void>::Visit(clang::Decl*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitRedeclarableINS_7TagDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclReader::VisitRedeclarable<clang::TagDecl>(clang::Redeclarable<clang::TagDecl>*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitRedeclarableINS_12FunctionDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclReader::VisitRedeclarable<clang::FunctionDecl>(clang::Redeclarable<clang::FunctionDecl>*)\"},\n    {\"_ZN5clang13ASTDeclReader17VisitRedeclarableINS_7VarDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclReader::VisitRedeclarable<clang::VarDecl>(clang::Redeclarable<clang::VarDecl>*)\"},\n    {\"_ZN5clang14AccessSpecDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::AccessSpecDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang9ASTReader15DeclContextInfoEE6insertEPS3_RKS3_\", \"llvm::SmallVectorImpl<clang::ASTReader::DeclContextInfo>::insert(clang::ASTReader::DeclContextInfo*, clang::ASTReader::DeclContextInfo const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorIPS2_Lj4EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<clang::CXXRecordDecl*, 4u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl*, 4u> > >::FindAndConstruct(clang::CXXRecordDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorIPS2_Lj4EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<clang::CXXRecordDecl*, 4u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl*, 4u> > >::InsertIntoBucket(clang::CXXRecordDecl const* const&, llvm::SmallVector<clang::CXXRecordDecl*, 4u> const&, std::pair<clang::CXXRecordDecl const*, llvm::SmallVector<clang::CXXRecordDecl*, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorIPS2_Lj4EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<clang::CXXRecordDecl*, 4u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl*, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang13CXXRecordDeclEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::CXXRecordDecl*>::operator=(llvm::SmallVectorImpl<clang::CXXRecordDecl*> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang9BlockDecl7CaptureELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::BlockDecl::Capture, false>::grow(unsigned long)\"},\n    {\"_ZN5clang13ASTStmtReader32ReadExplicitTemplateArgumentListERNS_28ExplicitTemplateArgumentListEj\", \"clang::ASTStmtReader::ReadExplicitTemplateArgumentList(clang::ExplicitTemplateArgumentList&, unsigned int)\"},\n    {\"_ZN5clang13ASTStmtReader9VisitStmtEPNS_4StmtE\", \"clang::ASTStmtReader::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitNullStmtEPNS_8NullStmtE\", \"clang::ASTStmtReader::VisitNullStmt(clang::NullStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitCompoundStmtEPNS_12CompoundStmtE\", \"clang::ASTStmtReader::VisitCompoundStmt(clang::CompoundStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitSwitchCaseEPNS_10SwitchCaseE\", \"clang::ASTStmtReader::VisitSwitchCase(clang::SwitchCase*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitCaseStmtEPNS_8CaseStmtE\", \"clang::ASTStmtReader::VisitCaseStmt(clang::CaseStmt*)\"},\n    {\"_ZN5clang9ASTReader11ReadSubExprEv\", \"clang::ASTReader::ReadSubExpr()\"},\n    {\"_ZN5clang13ASTStmtReader16VisitDefaultStmtEPNS_11DefaultStmtE\", \"clang::ASTStmtReader::VisitDefaultStmt(clang::DefaultStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitLabelStmtEPNS_9LabelStmtE\", \"clang::ASTStmtReader::VisitLabelStmt(clang::LabelStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader11VisitIfStmtEPNS_6IfStmtE\", \"clang::ASTStmtReader::VisitIfStmt(clang::IfStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitSwitchStmtEPNS_10SwitchStmtE\", \"clang::ASTStmtReader::VisitSwitchStmt(clang::SwitchStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitWhileStmtEPNS_9WhileStmtE\", \"clang::ASTStmtReader::VisitWhileStmt(clang::WhileStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader11VisitDoStmtEPNS_6DoStmtE\", \"clang::ASTStmtReader::VisitDoStmt(clang::DoStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader12VisitForStmtEPNS_7ForStmtE\", \"clang::ASTStmtReader::VisitForStmt(clang::ForStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitGotoStmtEPNS_8GotoStmtE\", \"clang::ASTStmtReader::VisitGotoStmt(clang::GotoStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitIndirectGotoStmtEPNS_16IndirectGotoStmtE\", \"clang::ASTStmtReader::VisitIndirectGotoStmt(clang::IndirectGotoStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitContinueStmtEPNS_12ContinueStmtE\", \"clang::ASTStmtReader::VisitContinueStmt(clang::ContinueStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitBreakStmtEPNS_9BreakStmtE\", \"clang::ASTStmtReader::VisitBreakStmt(clang::BreakStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitReturnStmtEPNS_10ReturnStmtE\", \"clang::ASTStmtReader::VisitReturnStmt(clang::ReturnStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitDeclStmtEPNS_8DeclStmtE\", \"clang::ASTStmtReader::VisitDeclStmt(clang::DeclStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader12VisitAsmStmtEPNS_7AsmStmtE\", \"clang::ASTStmtReader::VisitAsmStmt(clang::AsmStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader9VisitExprEPNS_4ExprE\", \"clang::ASTStmtReader::VisitExpr(clang::Expr*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitPredefinedExprEPNS_14PredefinedExprE\", \"clang::ASTStmtReader::VisitPredefinedExpr(clang::PredefinedExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader16VisitDeclRefExprEPNS_11DeclRefExprE\", \"clang::ASTStmtReader::VisitDeclRefExpr(clang::DeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitIntegerLiteralEPNS_14IntegerLiteralE\", \"clang::ASTStmtReader::VisitIntegerLiteral(clang::IntegerLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitFloatingLiteralEPNS_15FloatingLiteralE\", \"clang::ASTStmtReader::VisitFloatingLiteral(clang::FloatingLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitImaginaryLiteralEPNS_16ImaginaryLiteralE\", \"clang::ASTStmtReader::VisitImaginaryLiteral(clang::ImaginaryLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitStringLiteralEPNS_13StringLiteralE\", \"clang::ASTStmtReader::VisitStringLiteral(clang::StringLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitCharacterLiteralEPNS_16CharacterLiteralE\", \"clang::ASTStmtReader::VisitCharacterLiteral(clang::CharacterLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitParenExprEPNS_9ParenExprE\", \"clang::ASTStmtReader::VisitParenExpr(clang::ParenExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitParenListExprEPNS_13ParenListExprE\", \"clang::ASTStmtReader::VisitParenListExpr(clang::ParenListExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitUnaryOperatorEPNS_13UnaryOperatorE\", \"clang::ASTStmtReader::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitOffsetOfExprEPNS_12OffsetOfExprE\", \"clang::ASTStmtReader::VisitOffsetOfExpr(clang::OffsetOfExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitSizeOfAlignOfExprEPNS_17SizeOfAlignOfExprE\", \"clang::ASTStmtReader::VisitSizeOfAlignOfExpr(clang::SizeOfAlignOfExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitArraySubscriptExprEPNS_18ArraySubscriptExprE\", \"clang::ASTStmtReader::VisitArraySubscriptExpr(clang::ArraySubscriptExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitCallExprEPNS_8CallExprE\", \"clang::ASTStmtReader::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitMemberExprEPNS_10MemberExprE\", \"clang::ASTStmtReader::VisitMemberExpr(clang::MemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader16VisitObjCIsaExprEPNS_11ObjCIsaExprE\", \"clang::ASTStmtReader::VisitObjCIsaExpr(clang::ObjCIsaExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitCastExprEPNS_8CastExprE\", \"clang::ASTStmtReader::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitBinaryOperatorEPNS_14BinaryOperatorE\", \"clang::ASTStmtReader::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN5clang13ASTStmtReader27VisitCompoundAssignOperatorEPNS_22CompoundAssignOperatorE\", \"clang::ASTStmtReader::VisitCompoundAssignOperator(clang::CompoundAssignOperator*)\"},\n    {\"_ZN5clang13ASTStmtReader24VisitConditionalOperatorEPNS_19ConditionalOperatorE\", \"clang::ASTStmtReader::VisitConditionalOperator(clang::ConditionalOperator*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitImplicitCastExprEPNS_16ImplicitCastExprE\", \"clang::ASTStmtReader::VisitImplicitCastExpr(clang::ImplicitCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitExplicitCastExprEPNS_16ExplicitCastExprE\", \"clang::ASTStmtReader::VisitExplicitCastExpr(clang::ExplicitCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitCStyleCastExprEPNS_14CStyleCastExprE\", \"clang::ASTStmtReader::VisitCStyleCastExpr(clang::CStyleCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader24VisitCompoundLiteralExprEPNS_19CompoundLiteralExprE\", \"clang::ASTStmtReader::VisitCompoundLiteralExpr(clang::CompoundLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader25VisitExtVectorElementExprEPNS_20ExtVectorElementExprE\", \"clang::ASTStmtReader::VisitExtVectorElementExpr(clang::ExtVectorElementExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitInitListExprEPNS_12InitListExprE\", \"clang::ASTStmtReader::VisitInitListExpr(clang::InitListExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitDesignatedInitExprEPNS_18DesignatedInitExprE\", \"clang::ASTStmtReader::VisitDesignatedInitExpr(clang::DesignatedInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader26VisitImplicitValueInitExprEPNS_21ImplicitValueInitExprE\", \"clang::ASTStmtReader::VisitImplicitValueInitExpr(clang::ImplicitValueInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitVAArgExprEPNS_9VAArgExprE\", \"clang::ASTStmtReader::VisitVAArgExpr(clang::VAArgExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitAddrLabelExprEPNS_13AddrLabelExprE\", \"clang::ASTStmtReader::VisitAddrLabelExpr(clang::AddrLabelExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader13VisitStmtExprEPNS_8StmtExprE\", \"clang::ASTStmtReader::VisitStmtExpr(clang::StmtExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitChooseExprEPNS_10ChooseExprE\", \"clang::ASTStmtReader::VisitChooseExpr(clang::ChooseExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader16VisitGNUNullExprEPNS_11GNUNullExprE\", \"clang::ASTStmtReader::VisitGNUNullExpr(clang::GNUNullExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitShuffleVectorExprEPNS_17ShuffleVectorExprE\", \"clang::ASTStmtReader::VisitShuffleVectorExpr(clang::ShuffleVectorExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader14VisitBlockExprEPNS_9BlockExprE\", \"clang::ASTStmtReader::VisitBlockExpr(clang::BlockExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitBlockDeclRefExprEPNS_16BlockDeclRefExprE\", \"clang::ASTStmtReader::VisitBlockDeclRefExpr(clang::BlockDeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitObjCStringLiteralEPNS_17ObjCStringLiteralE\", \"clang::ASTStmtReader::VisitObjCStringLiteral(clang::ObjCStringLiteral*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitObjCEncodeExprEPNS_14ObjCEncodeExprE\", \"clang::ASTStmtReader::VisitObjCEncodeExpr(clang::ObjCEncodeExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitObjCSelectorExprEPNS_16ObjCSelectorExprE\", \"clang::ASTStmtReader::VisitObjCSelectorExpr(clang::ObjCSelectorExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitObjCProtocolExprEPNS_16ObjCProtocolExprE\", \"clang::ASTStmtReader::VisitObjCProtocolExpr(clang::ObjCProtocolExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitObjCIvarRefExprEPNS_15ObjCIvarRefExprE\", \"clang::ASTStmtReader::VisitObjCIvarRefExpr(clang::ObjCIvarRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader24VisitObjCPropertyRefExprEPNS_19ObjCPropertyRefExprE\", \"clang::ASTStmtReader::VisitObjCPropertyRefExpr(clang::ObjCPropertyRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitObjCMessageExprEPNS_15ObjCMessageExprE\", \"clang::ASTStmtReader::VisitObjCMessageExpr(clang::ObjCMessageExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader26VisitObjCForCollectionStmtEPNS_21ObjCForCollectionStmtE\", \"clang::ASTStmtReader::VisitObjCForCollectionStmt(clang::ObjCForCollectionStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitObjCAtCatchStmtEPNS_15ObjCAtCatchStmtE\", \"clang::ASTStmtReader::VisitObjCAtCatchStmt(clang::ObjCAtCatchStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitObjCAtFinallyStmtEPNS_17ObjCAtFinallyStmtE\", \"clang::ASTStmtReader::VisitObjCAtFinallyStmt(clang::ObjCAtFinallyStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitObjCAtTryStmtEPNS_13ObjCAtTryStmtE\", \"clang::ASTStmtReader::VisitObjCAtTryStmt(clang::ObjCAtTryStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader27VisitObjCAtSynchronizedStmtEPNS_22ObjCAtSynchronizedStmtE\", \"clang::ASTStmtReader::VisitObjCAtSynchronizedStmt(clang::ObjCAtSynchronizedStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitObjCAtThrowStmtEPNS_15ObjCAtThrowStmtE\", \"clang::ASTStmtReader::VisitObjCAtThrowStmt(clang::ObjCAtThrowStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitCXXCatchStmtEPNS_12CXXCatchStmtE\", \"clang::ASTStmtReader::VisitCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitCXXTryStmtEPNS_10CXXTryStmtE\", \"clang::ASTStmtReader::VisitCXXTryStmt(clang::CXXTryStmt*)\"},\n    {\"_ZN5clang13ASTStmtReader24VisitCXXOperatorCallExprEPNS_19CXXOperatorCallExprE\", \"clang::ASTStmtReader::VisitCXXOperatorCallExpr(clang::CXXOperatorCallExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitCXXConstructExprEPNS_16CXXConstructExprE\", \"clang::ASTStmtReader::VisitCXXConstructExpr(clang::CXXConstructExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader27VisitCXXTemporaryObjectExprEPNS_22CXXTemporaryObjectExprE\", \"clang::ASTStmtReader::VisitCXXTemporaryObjectExpr(clang::CXXTemporaryObjectExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitCXXNamedCastExprEPNS_16CXXNamedCastExprE\", \"clang::ASTStmtReader::VisitCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitCXXStaticCastExprEPNS_17CXXStaticCastExprE\", \"clang::ASTStmtReader::VisitCXXStaticCastExpr(clang::CXXStaticCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitCXXDynamicCastExprEPNS_18CXXDynamicCastExprE\", \"clang::ASTStmtReader::VisitCXXDynamicCastExpr(clang::CXXDynamicCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader27VisitCXXReinterpretCastExprEPNS_22CXXReinterpretCastExprE\", \"clang::ASTStmtReader::VisitCXXReinterpretCastExpr(clang::CXXReinterpretCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitCXXConstCastExprEPNS_16CXXConstCastExprE\", \"clang::ASTStmtReader::VisitCXXConstCastExpr(clang::CXXConstCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader26VisitCXXFunctionalCastExprEPNS_21CXXFunctionalCastExprE\", \"clang::ASTStmtReader::VisitCXXFunctionalCastExpr(clang::CXXFunctionalCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitCXXBoolLiteralExprEPNS_18CXXBoolLiteralExprE\", \"clang::ASTStmtReader::VisitCXXBoolLiteralExpr(clang::CXXBoolLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader26VisitCXXNullPtrLiteralExprEPNS_21CXXNullPtrLiteralExprE\", \"clang::ASTStmtReader::VisitCXXNullPtrLiteralExpr(clang::CXXNullPtrLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitCXXTypeidExprEPNS_13CXXTypeidExprE\", \"clang::ASTStmtReader::VisitCXXTypeidExpr(clang::CXXTypeidExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitCXXUuidofExprEPNS_13CXXUuidofExprE\", \"clang::ASTStmtReader::VisitCXXUuidofExpr(clang::CXXUuidofExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader16VisitCXXThisExprEPNS_11CXXThisExprE\", \"clang::ASTStmtReader::VisitCXXThisExpr(clang::CXXThisExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitCXXThrowExprEPNS_12CXXThrowExprE\", \"clang::ASTStmtReader::VisitCXXThrowExpr(clang::CXXThrowExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitCXXDefaultArgExprEPNS_17CXXDefaultArgExprE\", \"clang::ASTStmtReader::VisitCXXDefaultArgExpr(clang::CXXDefaultArgExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader25VisitCXXBindTemporaryExprEPNS_20CXXBindTemporaryExprE\", \"clang::ASTStmtReader::VisitCXXBindTemporaryExpr(clang::CXXBindTemporaryExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader27VisitCXXScalarValueInitExprEPNS_22CXXScalarValueInitExprE\", \"clang::ASTStmtReader::VisitCXXScalarValueInitExpr(clang::CXXScalarValueInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader15VisitCXXNewExprEPNS_10CXXNewExprE\", \"clang::ASTStmtReader::VisitCXXNewExpr(clang::CXXNewExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader18VisitCXXDeleteExprEPNS_13CXXDeleteExprE\", \"clang::ASTStmtReader::VisitCXXDeleteExpr(clang::CXXDeleteExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader28VisitCXXPseudoDestructorExprEPNS_23CXXPseudoDestructorExprE\", \"clang::ASTStmtReader::VisitCXXPseudoDestructorExpr(clang::CXXPseudoDestructorExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader21VisitExprWithCleanupsEPNS_16ExprWithCleanupsE\", \"clang::ASTStmtReader::VisitExprWithCleanups(clang::ExprWithCleanups*)\"},\n    {\"_ZN5clang13ASTStmtReader32VisitCXXDependentScopeMemberExprEPNS_27CXXDependentScopeMemberExprE\", \"clang::ASTStmtReader::VisitCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader30VisitDependentScopeDeclRefExprEPNS_25DependentScopeDeclRefExprE\", \"clang::ASTStmtReader::VisitDependentScopeDeclRefExpr(clang::DependentScopeDeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader31VisitCXXUnresolvedConstructExprEPNS_26CXXUnresolvedConstructExprE\", \"clang::ASTStmtReader::VisitCXXUnresolvedConstructExpr(clang::CXXUnresolvedConstructExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader17VisitOverloadExprEPNS_12OverloadExprE\", \"clang::ASTStmtReader::VisitOverloadExpr(clang::OverloadExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader25VisitUnresolvedMemberExprEPNS_20UnresolvedMemberExprE\", \"clang::ASTStmtReader::VisitUnresolvedMemberExpr(clang::UnresolvedMemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader25VisitUnresolvedLookupExprEPNS_20UnresolvedLookupExprE\", \"clang::ASTStmtReader::VisitUnresolvedLookupExpr(clang::UnresolvedLookupExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitUnaryTypeTraitExprEPNS_18UnaryTypeTraitExprE\", \"clang::ASTStmtReader::VisitUnaryTypeTraitExpr(clang::UnaryTypeTraitExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader24VisitBinaryTypeTraitExprEPNS_19BinaryTypeTraitExprE\", \"clang::ASTStmtReader::VisitBinaryTypeTraitExpr(clang::BinaryTypeTraitExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitCXXNoexceptExprEPNS_15CXXNoexceptExprE\", \"clang::ASTStmtReader::VisitCXXNoexceptExpr(clang::CXXNoexceptExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader22VisitPackExpansionExprEPNS_17PackExpansionExprE\", \"clang::ASTStmtReader::VisitPackExpansionExpr(clang::PackExpansionExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader19VisitSizeOfPackExprEPNS_14SizeOfPackExprE\", \"clang::ASTStmtReader::VisitSizeOfPackExpr(clang::SizeOfPackExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader37VisitSubstNonTypeTemplateParmPackExprEPNS_32SubstNonTypeTemplateParmPackExprE\", \"clang::ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(clang::SubstNonTypeTemplateParmPackExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader20VisitOpaqueValueExprEPNS_15OpaqueValueExprE\", \"clang::ASTStmtReader::VisitOpaqueValueExpr(clang::OpaqueValueExpr*)\"},\n    {\"_ZN5clang13ASTStmtReader23VisitCUDAKernelCallExprEPNS_18CUDAKernelCallExprE\", \"clang::ASTStmtReader::VisitCUDAKernelCallExpr(clang::CUDAKernelCallExpr*)\"},\n    {\"_ZN5clang9ASTReader8ReadStmtERNS0_11PerFileDataE\", \"clang::ASTReader::ReadStmt(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang9ASTReader18ReadStmtFromStreamERNS0_11PerFileDataE\", \"clang::ASTReader::ReadStmtFromStream(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang9ASTReader8ReadExprERNS0_11PerFileDataE\", \"clang::ASTReader::ReadExpr(clang::ASTReader::PerFileData&)\"},\n    {\"_ZN5clang11StmtVisitorINS_13ASTStmtReaderEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<clang::ASTStmtReader, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang18DesignatedInitExpr10DesignatorELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::DesignatedInitExpr::Designator, false>::grow(unsigned long)\"},\n    {\"_ZN5clang9ASTWriter19WriteBlockInfoBlockEv\", \"clang::ASTWriter::WriteBlockInfoBlock()\"},\n    {\"_Z11EmitBlockIDjPKcRN4llvm15BitstreamWriterERNS1_15SmallVectorImplIyEE\", \"EmitBlockID(unsigned int, char const*, llvm::BitstreamWriter&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_Z12EmitRecordIDjPKcRN4llvm15BitstreamWriterERNS1_15SmallVectorImplIyEE\", \"EmitRecordID(unsigned int, char const*, llvm::BitstreamWriter&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter13WriteMetadataERNS_10ASTContextEPKc\", \"clang::ASTWriter::WriteMetadata(clang::ASTContext&, char const*)\"},\n    {\"_ZN5clang9ASTWriter20WriteLanguageOptionsERKNS_11LangOptionsE\", \"clang::ASTWriter::WriteLanguageOptions(clang::LangOptions const&)\"},\n    {\"_ZN5clang9ASTWriter14WriteStatCacheERNS_17MemorizeStatCallsE\", \"clang::ASTWriter::WriteStatCache(clang::MemorizeStatCalls&)\"},\n    {\"_ZN5clang9ASTWriter23WriteSourceManagerBlockERNS_13SourceManagerERKNS_12PreprocessorEPKc\", \"clang::ASTWriter::WriteSourceManagerBlock(clang::SourceManager&, clang::Preprocessor const&, char const*)\"},\n    {\"_ZN5clang9ASTWriter16AddIdentifierRefEPKNS_14IdentifierInfoERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddIdentifierRef(clang::IdentifierInfo const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter17WritePreprocessorERKNS_12PreprocessorE\", \"clang::ASTWriter::WritePreprocessor(clang::Preprocessor const&)\"},\n    {\"_ZN5clang9ASTWriter20getMacroDefinitionIDEPNS_15MacroDefinitionE\", \"clang::ASTWriter::getMacroDefinitionID(clang::MacroDefinition*)\"},\n    {\"_ZN5clang9ASTWriter23WritePreprocessorDetailERNS_19PreprocessingRecordE\", \"clang::ASTWriter::WritePreprocessorDetail(clang::PreprocessingRecord&)\"},\n    {\"_ZN5clang9ASTWriter17AddSourceLocationENS_14SourceLocationERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddSourceLocation(clang::SourceLocation, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter29WritePragmaDiagnosticMappingsERKNS_10DiagnosticE\", \"clang::ASTWriter::WritePragmaDiagnosticMappings(clang::Diagnostic const&)\"},\n    {\"_ZN5clang9ASTWriter9WriteTypeENS_8QualTypeE\", \"clang::ASTWriter::WriteType(clang::QualType)\"},\n    {\"_ZN5clang9ASTWriter10AddTypeRefENS_8QualTypeERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTypeRef(clang::QualType, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN12_GLOBAL__N_113ASTTypeWriter15VisitVectorTypeEPKN5clang10VectorTypeE\", \"(anonymous namespace)::ASTTypeWriter::VisitVectorType(clang::VectorType const*)\"},\n    {\"_ZN5clang9ASTWriter28WriteDeclContextLexicalBlockERNS_10ASTContextEPNS_11DeclContextE\", \"clang::ASTWriter::WriteDeclContextLexicalBlock(clang::ASTContext&, clang::DeclContext*)\"},\n    {\"_ZN5clang9ASTWriter10GetDeclRefEPKNS_4DeclE\", \"clang::ASTWriter::GetDeclRef(clang::Decl const*)\"},\n    {\"_ZN5clang9ASTWriter20WriteTypeDeclOffsetsEv\", \"clang::ASTWriter::WriteTypeDeclOffsets()\"},\n    {\"_ZN5clang9ASTWriter14WriteSelectorsERNS_4SemaE\", \"clang::ASTWriter::WriteSelectors(clang::Sema&)\"},\n    {\"_ZN5clang9ASTWriter28WriteReferencedSelectorsPoolERNS_4SemaE\", \"clang::ASTWriter::WriteReferencedSelectorsPool(clang::Sema&)\"},\n    {\"_ZN5clang9ASTWriter14AddSelectorRefENS_8SelectorERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddSelectorRef(clang::Selector, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter20WriteIdentifierTableERNS_12PreprocessorE\", \"clang::ASTWriter::WriteIdentifierTable(clang::Preprocessor&)\"},\n    {\"_ZN5clang9ASTWriter16getIdentifierRefEPKNS_14IdentifierInfoE\", \"clang::ASTWriter::getIdentifierRef(clang::IdentifierInfo const*)\"},\n    {\"_ZN5clang9ASTWriter28WriteDeclContextVisibleBlockERNS_10ASTContextEPNS_11DeclContextE\", \"clang::ASTWriter::WriteDeclContextVisibleBlock(clang::ASTContext&, clang::DeclContext*)\"},\n    {\"_ZN5clang31OnDiskChainedHashTableGeneratorIN12_GLOBAL__N_129ASTDeclContextNameLookupTraitEE6insertENS_15DeclarationNameERKNS_23DeclContextLookupResultERS2_\", \"clang::OnDiskChainedHashTableGenerator<(anonymous namespace)::ASTDeclContextNameLookupTrait>::insert(clang::DeclarationName, clang::DeclContextLookupResult const&, (anonymous namespace)::ASTDeclContextNameLookupTrait&)\"},\n    {\"_ZN5clang31OnDiskChainedHashTableGeneratorIN12_GLOBAL__N_129ASTDeclContextNameLookupTraitEE4EmitERN4llvm11raw_ostreamERS2_\", \"clang::OnDiskChainedHashTableGenerator<(anonymous namespace)::ASTDeclContextNameLookupTrait>::Emit(llvm::raw_ostream&, (anonymous namespace)::ASTDeclContextNameLookupTrait&)\"},\n    {\"_ZN5clang9ASTWriter29WriteDeclContextVisibleUpdateEPKNS_11DeclContextE\", \"clang::ASTWriter::WriteDeclContextVisibleUpdate(clang::DeclContext const*)\"},\n    {\"_ZN5clang9ASTWriter9getDeclIDEPKNS_4DeclE\", \"clang::ASTWriter::getDeclID(clang::Decl const*)\"},\n    {\"_ZN5clang9ASTWriter15WriteAttributesERKN4llvm11SmallVectorIPNS_4AttrELj2EEERNS1_15SmallVectorImplIyEE\", \"clang::ASTWriter::WriteAttributes(llvm::SmallVector<clang::Attr*, 2u> const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter9AddStringEN4llvm9StringRefERNS1_15SmallVectorImplIyEE\", \"clang::ASTWriter::AddString(llvm::StringRef, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter17AddTypeSourceInfoEPNS_14TypeSourceInfoERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTypeSourceInfo(clang::TypeSourceInfo*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter10AddDeclRefEPKNS_4DeclERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddDeclRef(clang::Decl const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter19SetIdentifierOffsetEPKNS_14IdentifierInfoEj\", \"clang::ASTWriter::SetIdentifierOffset(clang::IdentifierInfo const*, unsigned int)\"},\n    {\"_ZN5clang9ASTWriter17SetSelectorOffsetENS_8SelectorEj\", \"clang::ASTWriter::SetSelectorOffset(clang::Selector, unsigned int)\"},\n    {\"_ZN5clang9ASTWriterC1ERN4llvm15BitstreamWriterE\", \"clang::ASTWriter::ASTWriter(llvm::BitstreamWriter&)\"},\n    {\"_ZN5clang9ASTWriterC2ERN4llvm15BitstreamWriterE\", \"clang::ASTWriter::ASTWriter(llvm::BitstreamWriter&)\"},\n    {\"_ZN5clang9ASTWriter8WriteASTERNS_4SemaEPNS_17MemorizeStatCallsEPKc\", \"clang::ASTWriter::WriteAST(clang::Sema&, clang::MemorizeStatCalls*, char const*)\"},\n    {\"_ZN5clang9ASTWriter13WriteASTChainERNS_4SemaEPNS_17MemorizeStatCallsEPKc\", \"clang::ASTWriter::WriteASTChain(clang::Sema&, clang::MemorizeStatCalls*, char const*)\"},\n    {\"_ZN5clang9ASTWriter12WriteASTCoreERNS_4SemaEPNS_17MemorizeStatCallsEPKc\", \"clang::ASTWriter::WriteASTCore(clang::Sema&, clang::MemorizeStatCalls*, char const*)\"},\n    {\"_ZN5clang9ASTWriter22WriteDeclUpdatesBlocksEv\", \"clang::ASTWriter::WriteDeclUpdatesBlocks()\"},\n    {\"_ZN5clang9ASTWriter26WriteDeclReplacementsBlockEv\", \"clang::ASTWriter::WriteDeclReplacementsBlock()\"},\n    {\"_ZN5clang9ASTWriter14AddSourceRangeENS_11SourceRangeERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddSourceRange(clang::SourceRange, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter8AddAPIntERKN4llvm5APIntERNS1_15SmallVectorImplIyEE\", \"clang::ASTWriter::AddAPInt(llvm::APInt const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter9AddAPSIntERKN4llvm6APSIntERNS1_15SmallVectorImplIyEE\", \"clang::ASTWriter::AddAPSInt(llvm::APSInt const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter10AddAPFloatERKN4llvm7APFloatERNS1_15SmallVectorImplIyEE\", \"clang::ASTWriter::AddAPFloat(llvm::APFloat const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter14getSelectorRefENS_8SelectorE\", \"clang::ASTWriter::getSelectorRef(clang::Selector)\"},\n    {\"_ZN5clang9ASTWriter15AddCXXTemporaryEPKNS_12CXXTemporaryERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddCXXTemporary(clang::CXXTemporary const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter23AddCXXBaseSpecifiersRefEPKNS_16CXXBaseSpecifierES3_RN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddCXXBaseSpecifiersRef(clang::CXXBaseSpecifier const*, clang::CXXBaseSpecifier const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter26AddTemplateArgumentLocInfoENS_16TemplateArgument7ArgKindERKNS_23TemplateArgumentLocInfoERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateArgumentLocInfo(clang::TemplateArgument::ArgKind, clang::TemplateArgumentLocInfo const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter22AddTemplateArgumentLocERKNS_19TemplateArgumentLocERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateArgumentLoc(clang::TemplateArgumentLoc const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter19AddTemplateArgumentERKNS_16TemplateArgumentERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateArgument(clang::TemplateArgument const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter17GetOrCreateTypeIDENS_8QualTypeE\", \"clang::ASTWriter::GetOrCreateTypeID(clang::QualType)\"},\n    {\"_ZN5clang9ASTWriter18GetOrCreateTypeIdxENS_8QualTypeE\", \"clang::ASTWriter::GetOrCreateTypeIdx(clang::QualType)\"},\n    {\"_ZNK5clang9ASTWriter9getTypeIDENS_8QualTypeE\", \"clang::ASTWriter::getTypeID(clang::QualType) const\"},\n    {\"_ZNK5clang9ASTWriter10getTypeIdxENS_8QualTypeE\", \"clang::ASTWriter::getTypeIdx(clang::QualType) const\"},\n    {\"_ZN5clang9ASTWriter18AddDeclarationNameENS_15DeclarationNameERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddDeclarationName(clang::DeclarationName, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter21AddDeclarationNameLocERKNS_18DeclarationNameLocENS_15DeclarationNameERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddDeclarationNameLoc(clang::DeclarationNameLoc const&, clang::DeclarationName, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter22AddDeclarationNameInfoERKNS_19DeclarationNameInfoERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddDeclarationNameInfo(clang::DeclarationNameInfo const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter16AddQualifierInfoERKNS_13QualifierInfoERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddQualifierInfo(clang::QualifierInfo const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter22AddNestedNameSpecifierEPNS_19NestedNameSpecifierERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddNestedNameSpecifier(clang::NestedNameSpecifier*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter24AddTemplateParameterListEPKNS_21TemplateParameterListERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateParameterList(clang::TemplateParameterList const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter15AddTemplateNameENS_12TemplateNameERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateName(clang::TemplateName, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter23AddTemplateArgumentListEPKNS_20TemplateArgumentListERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddTemplateArgumentList(clang::TemplateArgumentList const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter16AddUnresolvedSetERKNS_17UnresolvedSetImplERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddUnresolvedSet(clang::UnresolvedSetImpl const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter19AddCXXBaseSpecifierERKNS_16CXXBaseSpecifierERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddCXXBaseSpecifier(clang::CXXBaseSpecifier const&, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter22FlushCXXBaseSpecifiersEv\", \"clang::ASTWriter::FlushCXXBaseSpecifiers()\"},\n    {\"_ZN5clang9ASTWriter22AddCXXCtorInitializersEPKPKNS_18CXXCtorInitializerEjRN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddCXXCtorInitializers(clang::CXXCtorInitializer const* const*, unsigned int, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter20AddCXXDefinitionDataEPKNS_13CXXRecordDeclERN4llvm15SmallVectorImplIyEE\", \"clang::ASTWriter::AddCXXDefinitionData(clang::CXXRecordDecl const*, llvm::SmallVectorImpl<unsigned long long>&)\"},\n    {\"_ZN5clang9ASTWriter17ReaderInitializedEPNS_9ASTReaderE\", \"clang::ASTWriter::ReaderInitialized(clang::ASTReader*)\"},\n    {\"_ZN5clang9ASTWriter14IdentifierReadEjPNS_14IdentifierInfoE\", \"clang::ASTWriter::IdentifierRead(unsigned int, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang9ASTWriter8TypeReadENS_13serialization7TypeIdxENS_8QualTypeE\", \"clang::ASTWriter::TypeRead(clang::serialization::TypeIdx, clang::QualType)\"},\n    {\"_ZN5clang9ASTWriter8DeclReadEjPKNS_4DeclE\", \"clang::ASTWriter::DeclRead(unsigned int, clang::Decl const*)\"},\n    {\"_ZN5clang9ASTWriter12SelectorReadEjNS_8SelectorE\", \"clang::ASTWriter::SelectorRead(unsigned int, clang::Selector)\"},\n    {\"_ZN5clang9ASTWriter19MacroDefinitionReadEjPNS_15MacroDefinitionE\", \"clang::ASTWriter::MacroDefinitionRead(unsigned int, clang::MacroDefinition*)\"},\n    {\"_ZThn8_N5clang9ASTWriter22CompletedTagDefinitionEPKNS_7TagDeclE\", \"non-virtual thunk to clang::ASTWriter::CompletedTagDefinition(clang::TagDecl const*)\"},\n    {\"_ZN5clang9ASTWriter22CompletedTagDefinitionEPKNS_7TagDeclE\", \"clang::ASTWriter::CompletedTagDefinition(clang::TagDecl const*)\"},\n    {\"_ZThn8_N5clang9ASTWriter16AddedVisibleDeclEPKNS_11DeclContextEPKNS_4DeclE\", \"non-virtual thunk to clang::ASTWriter::AddedVisibleDecl(clang::DeclContext const*, clang::Decl const*)\"},\n    {\"_ZN5clang9ASTWriter16AddedVisibleDeclEPKNS_11DeclContextEPKNS_4DeclE\", \"clang::ASTWriter::AddedVisibleDecl(clang::DeclContext const*, clang::Decl const*)\"},\n    {\"_ZThn8_N5clang9ASTWriter22AddedCXXImplicitMemberEPKNS_13CXXRecordDeclEPKNS_4DeclE\", \"non-virtual thunk to clang::ASTWriter::AddedCXXImplicitMember(clang::CXXRecordDecl const*, clang::Decl const*)\"},\n    {\"_ZN5clang9ASTWriter22AddedCXXImplicitMemberEPKNS_13CXXRecordDeclEPKNS_4DeclE\", \"clang::ASTWriter::AddedCXXImplicitMember(clang::CXXRecordDecl const*, clang::Decl const*)\"},\n    {\"_ZThn8_N5clang9ASTWriter30AddedCXXTemplateSpecializationEPKNS_17ClassTemplateDeclEPKNS_31ClassTemplateSpecializationDeclE\", \"non-virtual thunk to clang::ASTWriter::AddedCXXTemplateSpecialization(clang::ClassTemplateDecl const*, clang::ClassTemplateSpecializationDecl const*)\"},\n    {\"_ZN5clang9ASTWriter30AddedCXXTemplateSpecializationEPKNS_17ClassTemplateDeclEPKNS_31ClassTemplateSpecializationDeclE\", \"clang::ASTWriter::AddedCXXTemplateSpecialization(clang::ClassTemplateDecl const*, clang::ClassTemplateSpecializationDecl const*)\"},\n    {\"_ZN5clang24ASTSerializationListenerD0Ev\", \"clang::ASTSerializationListener::~ASTSerializationListener()\"},\n    {\"_ZN5clang24ASTSerializationListenerD1Ev\", \"clang::ASTSerializationListener::~ASTSerializationListener()\"},\n    {\"_ZN5clang24ASTSerializationListenerD2Ev\", \"clang::ASTSerializationListener::~ASTSerializationListener()\"},\n    {\"_ZN12_GLOBAL__N_113TypeLocWriter20VisitFunctionTypeLocEN5clang15FunctionTypeLocE\", \"(anonymous namespace)::TypeLocWriter::VisitFunctionTypeLoc(clang::FunctionTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_113TypeLocWriter17VisitArrayTypeLocEN5clang12ArrayTypeLocE\", \"(anonymous namespace)::TypeLocWriter::VisitArrayTypeLoc(clang::ArrayTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_113ASTTypeWriter12VisitTagTypeEPKN5clang7TagTypeE\", \"(anonymous namespace)::ASTTypeWriter::VisitTagType(clang::TagType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ASTTypeWriter17VisitFunctionTypeEPKN5clang12FunctionTypeE\", \"(anonymous namespace)::ASTTypeWriter::VisitFunctionType(clang::FunctionType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ASTTypeWriter14VisitArrayTypeEPKN5clang9ArrayTypeE\", \"(anonymous namespace)::ASTTypeWriter::VisitArrayType(clang::ArrayType const*)\"},\n    {\"_ZN4llvm15BitstreamWriter13EnterSubblockEjj\", \"llvm::BitstreamWriter::EnterSubblock(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm15BitstreamWriter9ExitBlockEv\", \"llvm::BitstreamWriter::ExitBlock()\"},\n    {\"_ZN4llvm15BitstreamWriter10EmitRecordIyEEvjRNS_15SmallVectorImplIT_EEj\", \"void llvm::BitstreamWriter::EmitRecord<unsigned long long>(unsigned int, llvm::SmallVectorImpl<unsigned long long>&, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIyE6insertIPKcEEPyS5_T_S6_\", \"unsigned long long* llvm::SmallVectorImpl<unsigned long long>::insert<char const*>(unsigned long long*, char const*, char const*)\"},\n    {\"_ZN4llvm15BitstreamWriter4EmitEjj\", \"llvm::BitstreamWriter::Emit(unsigned int, unsigned int)\"},\n    {\"_ZN5clang13serialization10MakeTypeIDISt9binder1stISt10mem_fun1_tINS0_7TypeIdxENS_9ASTWriterENS_8QualTypeEEEEEjS6_T_\", \"unsigned int clang::serialization::MakeTypeID<std::binder1st<std::mem_fun1_t<clang::serialization::TypeIdx, clang::ASTWriter, clang::QualType> > >(clang::QualType, std::binder1st<std::mem_fun1_t<clang::serialization::TypeIdx, clang::ASTWriter, clang::QualType> >)\"},\n    {\"_ZN5clang13serialization10MakeTypeIDISt9binder1stISt16const_mem_fun1_tINS0_7TypeIdxENS_9ASTWriterENS_8QualTypeEEEEEjS6_T_\", \"unsigned int clang::serialization::MakeTypeID<std::binder1st<std::const_mem_fun1_t<clang::serialization::TypeIdx, clang::ASTWriter, clang::QualType> > >(clang::QualType, std::binder1st<std::const_mem_fun1_t<clang::serialization::TypeIdx, clang::ASTWriter, clang::QualType> >)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_11SmallVectorIyLj2EEENS_12DenseMapInfoIS4_EENS7_IS6_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::Decl const*, llvm::SmallVector<unsigned long long, 2u>, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned long long, 2u> > >::FindAndConstruct(clang::Decl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_11SmallVectorIyLj2EEENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Decl const*, llvm::SmallVector<unsigned long long, 2u>, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned long long, 2u> > >::InsertIntoBucket(clang::Decl const* const&, llvm::SmallVector<unsigned long long, 2u> const&, std::pair<clang::Decl const*, llvm::SmallVector<unsigned long long, 2u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_11SmallVectorIyLj2EEENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, llvm::SmallVector<unsigned long long, 2u>, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned long long, 2u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIyEaSERKS1_\", \"llvm::SmallVectorImpl<unsigned long long>::operator=(llvm::SmallVectorImpl<unsigned long long> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang9ASTWriter23QueuedCXXBaseSpecifiersELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ASTWriter::QueuedCXXBaseSpecifiers, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang15MacroDefinitionEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::MacroDefinition const*, unsigned int, llvm::DenseMapInfo<clang::MacroDefinition const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::MacroDefinition const* const&, unsigned int const&, std::pair<clang::MacroDefinition const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang15MacroDefinitionEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::MacroDefinition const*, unsigned int, llvm::DenseMapInfo<clang::MacroDefinition const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeIN5clang9ASTWriter10DeclOrTypeESaIS2_EE9push_backERKS2_\", \"std::deque<clang::ASTWriter::DeclOrType, std::allocator<clang::ASTWriter::DeclOrType> >::push_back(clang::ASTWriter::DeclOrType const&)\"},\n    {\"_ZNSt5dequeIN5clang9ASTWriter10DeclOrTypeESaIS2_EE17_M_reallocate_mapEmb\", \"std::deque<clang::ASTWriter::DeclOrType, std::allocator<clang::ASTWriter::DeclOrType> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIN5clang9ASTWriter10DeclOrTypeESaIS2_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::ASTWriter::DeclOrType, std::allocator<clang::ASTWriter::DeclOrType> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeIN5clang9ASTWriter10DeclOrTypeESaIS2_EEC2ERKS4_\", \"std::deque<clang::ASTWriter::DeclOrType, std::allocator<clang::ASTWriter::DeclOrType> >::deque(std::deque<clang::ASTWriter::DeclOrType, std::allocator<clang::ASTWriter::DeclOrType> > const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<clang::Selector, unsigned int, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::Selector const&, unsigned int const&, std::pair<clang::Selector, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<clang::Selector, unsigned int, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang4DeclEE6appendINS1_18IdentifierResolver8iteratorEEEvT_S8_\", \"void llvm::SmallVectorImpl<clang::Decl*>::append<clang::IdentifierResolver::iterator>(clang::IdentifierResolver::iterator, clang::IdentifierResolver::iterator)\"},\n    {\"_ZN4llvm15BitstreamWriter24EmitRecordWithAbbrevImplIyEEvjRNS_15SmallVectorImplIT_EENS_9StringRefE\", \"void llvm::BitstreamWriter::EmitRecordWithAbbrevImpl<unsigned long long>(unsigned int, llvm::SmallVectorImpl<unsigned long long>&, llvm::StringRef)\"},\n    {\"_ZN4llvm15BitstreamWriter20EmitAbbreviatedFieldIhEEvRKNS_15BitCodeAbbrevOpET_\", \"void llvm::BitstreamWriter::EmitAbbreviatedField<unsigned char>(llvm::BitCodeAbbrevOp const&, unsigned char)\"},\n    {\"_ZN4llvm15BitstreamWriter20EmitAbbreviatedFieldIyEEvRKNS_15BitCodeAbbrevOpET_\", \"void llvm::BitstreamWriter::EmitAbbreviatedField<unsigned long long>(llvm::BitCodeAbbrevOp const&, unsigned long long)\"},\n    {\"_ZN4llvm15BitstreamWriter11FlushToWordEv\", \"llvm::BitstreamWriter::FlushToWord()\"},\n    {\"_ZNSt6vectorIhSaIhEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPhS1_EERKh\", \"std::vector<unsigned char, std::allocator<unsigned char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, unsigned char const&)\"},\n    {\"_ZN4llvm15BitstreamWriter9EmitVBR64Eyj\", \"llvm::BitstreamWriter::EmitVBR64(unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIyE6insertEPyRKy\", \"llvm::SmallVectorImpl<unsigned long long>::insert(unsigned long long*, unsigned long long const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14IdentifierInfoEyNS_12DenseMapInfoIS4_EENS5_IyEEE16InsertIntoBucketERKS4_RKyPSt4pairIS4_yE\", \"llvm::DenseMap<clang::IdentifierInfo const*, unsigned long long, llvm::DenseMapInfo<clang::IdentifierInfo const*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(clang::IdentifierInfo const* const&, unsigned long long const&, std::pair<clang::IdentifierInfo const*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14IdentifierInfoEyNS_12DenseMapInfoIS4_EENS5_IyEEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo const*, unsigned long long, llvm::DenseMapInfo<clang::IdentifierInfo const*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15BitstreamWriter12EncodeAbbrevEPNS_13BitCodeAbbrevE\", \"llvm::BitstreamWriter::EncodeAbbrev(llvm::BitCodeAbbrev*)\"},\n    {\"_ZNSt6vectorIN4llvm15BitstreamWriter5BlockESaIS2_EE9push_backERKS2_\", \"std::vector<llvm::BitstreamWriter::Block, std::allocator<llvm::BitstreamWriter::Block> >::push_back(llvm::BitstreamWriter::Block const&)\"},\n    {\"_ZNSt6vectorIN4llvm15BitstreamWriter5BlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BitstreamWriter::Block, std::allocator<llvm::BitstreamWriter::Block> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BitstreamWriter::Block*, std::vector<llvm::BitstreamWriter::Block, std::allocator<llvm::BitstreamWriter::Block> > >, llvm::BitstreamWriter::Block const&)\"},\n    {\"_ZN5clang13ASTDeclWriter5VisitEPNS_4DeclE\", \"clang::ASTDeclWriter::Visit(clang::Decl*)\"},\n    {\"_ZN5clang13ASTDeclWriter9VisitDeclEPNS_4DeclE\", \"clang::ASTDeclWriter::VisitDecl(clang::Decl*)\"},\n    {\"_ZN5clang13ASTDeclWriter24VisitTranslationUnitDeclEPNS_19TranslationUnitDeclE\", \"clang::ASTDeclWriter::VisitTranslationUnitDecl(clang::TranslationUnitDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter14VisitNamedDeclEPNS_9NamedDeclE\", \"clang::ASTDeclWriter::VisitNamedDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter13VisitTypeDeclEPNS_8TypeDeclE\", \"clang::ASTDeclWriter::VisitTypeDecl(clang::TypeDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter16VisitTypedefDeclEPNS_11TypedefDeclE\", \"clang::ASTDeclWriter::VisitTypedefDecl(clang::TypedefDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter12VisitTagDeclEPNS_7TagDeclE\", \"clang::ASTDeclWriter::VisitTagDecl(clang::TagDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter13VisitEnumDeclEPNS_8EnumDeclE\", \"clang::ASTDeclWriter::VisitEnumDecl(clang::EnumDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter15VisitRecordDeclEPNS_10RecordDeclE\", \"clang::ASTDeclWriter::VisitRecordDecl(clang::RecordDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter14VisitValueDeclEPNS_9ValueDeclE\", \"clang::ASTDeclWriter::VisitValueDecl(clang::ValueDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitEnumConstantDeclEPNS_16EnumConstantDeclE\", \"clang::ASTDeclWriter::VisitEnumConstantDecl(clang::EnumConstantDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter19VisitDeclaratorDeclEPNS_14DeclaratorDeclE\", \"clang::ASTDeclWriter::VisitDeclaratorDecl(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitFunctionDeclEPNS_12FunctionDeclE\", \"clang::ASTDeclWriter::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter19VisitObjCMethodDeclEPNS_14ObjCMethodDeclE\", \"clang::ASTDeclWriter::VisitObjCMethodDecl(clang::ObjCMethodDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitObjCContainerDeclEPNS_17ObjCContainerDeclE\", \"clang::ASTDeclWriter::VisitObjCContainerDecl(clang::ObjCContainerDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitObjCInterfaceDeclEPNS_17ObjCInterfaceDeclE\", \"clang::ASTDeclWriter::VisitObjCInterfaceDecl(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitObjCIvarDeclEPNS_12ObjCIvarDeclE\", \"clang::ASTDeclWriter::VisitObjCIvarDecl(clang::ObjCIvarDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter14VisitFieldDeclEPNS_9FieldDeclE\", \"clang::ASTDeclWriter::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitObjCProtocolDeclEPNS_16ObjCProtocolDeclE\", \"clang::ASTDeclWriter::VisitObjCProtocolDecl(clang::ObjCProtocolDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter24VisitObjCAtDefsFieldDeclEPNS_19ObjCAtDefsFieldDeclE\", \"clang::ASTDeclWriter::VisitObjCAtDefsFieldDecl(clang::ObjCAtDefsFieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter18VisitObjCClassDeclEPNS_13ObjCClassDeclE\", \"clang::ASTDeclWriter::VisitObjCClassDecl(clang::ObjCClassDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter28VisitObjCForwardProtocolDeclEPNS_23ObjCForwardProtocolDeclE\", \"clang::ASTDeclWriter::VisitObjCForwardProtocolDecl(clang::ObjCForwardProtocolDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitObjCCategoryDeclEPNS_16ObjCCategoryDeclE\", \"clang::ASTDeclWriter::VisitObjCCategoryDecl(clang::ObjCCategoryDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter28VisitObjCCompatibleAliasDeclEPNS_23ObjCCompatibleAliasDeclE\", \"clang::ASTDeclWriter::VisitObjCCompatibleAliasDecl(clang::ObjCCompatibleAliasDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitObjCPropertyDeclEPNS_16ObjCPropertyDeclE\", \"clang::ASTDeclWriter::VisitObjCPropertyDecl(clang::ObjCPropertyDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitObjCImplDeclEPNS_12ObjCImplDeclE\", \"clang::ASTDeclWriter::VisitObjCImplDecl(clang::ObjCImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter25VisitObjCCategoryImplDeclEPNS_20ObjCCategoryImplDeclE\", \"clang::ASTDeclWriter::VisitObjCCategoryImplDecl(clang::ObjCCategoryImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter27VisitObjCImplementationDeclEPNS_22ObjCImplementationDeclE\", \"clang::ASTDeclWriter::VisitObjCImplementationDecl(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter25VisitObjCPropertyImplDeclEPNS_20ObjCPropertyImplDeclE\", \"clang::ASTDeclWriter::VisitObjCPropertyImplDecl(clang::ObjCPropertyImplDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitIndirectFieldDeclEPNS_17IndirectFieldDeclE\", \"clang::ASTDeclWriter::VisitIndirectFieldDecl(clang::IndirectFieldDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter12VisitVarDeclEPNS_7VarDeclE\", \"clang::ASTDeclWriter::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitImplicitParamDeclEPNS_17ImplicitParamDeclE\", \"clang::ASTDeclWriter::VisitImplicitParamDecl(clang::ImplicitParamDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter16VisitParmVarDeclEPNS_11ParmVarDeclE\", \"clang::ASTDeclWriter::VisitParmVarDecl(clang::ParmVarDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitFileScopeAsmDeclEPNS_16FileScopeAsmDeclE\", \"clang::ASTDeclWriter::VisitFileScopeAsmDecl(clang::FileScopeAsmDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter14VisitBlockDeclEPNS_9BlockDeclE\", \"clang::ASTDeclWriter::VisitBlockDecl(clang::BlockDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter20VisitLinkageSpecDeclEPNS_15LinkageSpecDeclE\", \"clang::ASTDeclWriter::VisitLinkageSpecDecl(clang::LinkageSpecDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter18VisitNamespaceDeclEPNS_13NamespaceDeclE\", \"clang::ASTDeclWriter::VisitNamespaceDecl(clang::NamespaceDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter23VisitNamespaceAliasDeclEPNS_18NamespaceAliasDeclE\", \"clang::ASTDeclWriter::VisitNamespaceAliasDecl(clang::NamespaceAliasDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter14VisitUsingDeclEPNS_9UsingDeclE\", \"clang::ASTDeclWriter::VisitUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter20VisitUsingShadowDeclEPNS_15UsingShadowDeclE\", \"clang::ASTDeclWriter::VisitUsingShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter23VisitUsingDirectiveDeclEPNS_18UsingDirectiveDeclE\", \"clang::ASTDeclWriter::VisitUsingDirectiveDecl(clang::UsingDirectiveDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter29VisitUnresolvedUsingValueDeclEPNS_24UnresolvedUsingValueDeclE\", \"clang::ASTDeclWriter::VisitUnresolvedUsingValueDecl(clang::UnresolvedUsingValueDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter32VisitUnresolvedUsingTypenameDeclEPNS_27UnresolvedUsingTypenameDeclE\", \"clang::ASTDeclWriter::VisitUnresolvedUsingTypenameDecl(clang::UnresolvedUsingTypenameDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter18VisitCXXRecordDeclEPNS_13CXXRecordDeclE\", \"clang::ASTDeclWriter::VisitCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter18VisitCXXMethodDeclEPNS_13CXXMethodDeclE\", \"clang::ASTDeclWriter::VisitCXXMethodDecl(clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter23VisitCXXConstructorDeclEPNS_18CXXConstructorDeclE\", \"clang::ASTDeclWriter::VisitCXXConstructorDecl(clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitCXXDestructorDeclEPNS_17CXXDestructorDeclE\", \"clang::ASTDeclWriter::VisitCXXDestructorDecl(clang::CXXDestructorDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitCXXConversionDeclEPNS_17CXXConversionDeclE\", \"clang::ASTDeclWriter::VisitCXXConversionDecl(clang::CXXConversionDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter19VisitAccessSpecDeclEPNS_14AccessSpecDeclE\", \"clang::ASTDeclWriter::VisitAccessSpecDecl(clang::AccessSpecDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter15VisitFriendDeclEPNS_10FriendDeclE\", \"clang::ASTDeclWriter::VisitFriendDecl(clang::FriendDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter23VisitFriendTemplateDeclEPNS_18FriendTemplateDeclE\", \"clang::ASTDeclWriter::VisitFriendTemplateDecl(clang::FriendTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitTemplateDeclEPNS_12TemplateDeclE\", \"clang::ASTDeclWriter::VisitTemplateDecl(clang::TemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter29VisitRedeclarableTemplateDeclEPNS_24RedeclarableTemplateDeclE\", \"clang::ASTDeclWriter::VisitRedeclarableTemplateDecl(clang::RedeclarableTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter22VisitClassTemplateDeclEPNS_17ClassTemplateDeclE\", \"clang::ASTDeclWriter::VisitClassTemplateDecl(clang::ClassTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter36VisitClassTemplateSpecializationDeclEPNS_31ClassTemplateSpecializationDeclE\", \"clang::ASTDeclWriter::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter43VisitClassTemplatePartialSpecializationDeclEPNS_38ClassTemplatePartialSpecializationDeclE\", \"clang::ASTDeclWriter::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter25VisitFunctionTemplateDeclEPNS_20FunctionTemplateDeclE\", \"clang::ASTDeclWriter::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter25VisitTemplateTypeParmDeclEPNS_20TemplateTypeParmDeclE\", \"clang::ASTDeclWriter::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter28VisitNonTypeTemplateParmDeclEPNS_23NonTypeTemplateParmDeclE\", \"clang::ASTDeclWriter::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter29VisitTemplateTemplateParmDeclEPNS_24TemplateTemplateParmDeclE\", \"clang::ASTDeclWriter::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter21VisitStaticAssertDeclEPNS_16StaticAssertDeclE\", \"clang::ASTDeclWriter::VisitStaticAssertDecl(clang::StaticAssertDecl*)\"},\n    {\"_ZN5clang13ASTDeclWriter16VisitDeclContextEPNS_11DeclContextEyy\", \"clang::ASTDeclWriter::VisitDeclContext(clang::DeclContext*, unsigned long long, unsigned long long)\"},\n    {\"_ZN5clang9ASTWriter22WriteDeclsBlockAbbrevsEv\", \"clang::ASTWriter::WriteDeclsBlockAbbrevs()\"},\n    {\"_ZN5clang9ASTWriter9WriteDeclERNS_10ASTContextEPNS_4DeclE\", \"clang::ASTWriter::WriteDecl(clang::ASTContext&, clang::Decl*)\"},\n    {\"_ZN5clang11DeclVisitorINS_13ASTDeclWriterEvE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<clang::ASTDeclWriter, void>::Visit(clang::Decl*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitRedeclarableINS_7TagDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclWriter::VisitRedeclarable<clang::TagDecl>(clang::Redeclarable<clang::TagDecl>*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitRedeclarableINS_12FunctionDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclWriter::VisitRedeclarable<clang::FunctionDecl>(clang::Redeclarable<clang::FunctionDecl>*)\"},\n    {\"_ZN5clang13ASTDeclWriter17VisitRedeclarableINS_7VarDeclEEEvPNS_12RedeclarableIT_EE\", \"void clang::ASTDeclWriter::VisitRedeclarable<clang::VarDecl>(clang::Redeclarable<clang::VarDecl>*)\"},\n    {\"_ZN5clang13ASTStmtWriter31AddExplicitTemplateArgumentListERKNS_28ExplicitTemplateArgumentListE\", \"clang::ASTStmtWriter::AddExplicitTemplateArgumentList(clang::ExplicitTemplateArgumentList const&)\"},\n    {\"_ZN5clang13ASTStmtWriter9VisitStmtEPNS_4StmtE\", \"clang::ASTStmtWriter::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitNullStmtEPNS_8NullStmtE\", \"clang::ASTStmtWriter::VisitNullStmt(clang::NullStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitCompoundStmtEPNS_12CompoundStmtE\", \"clang::ASTStmtWriter::VisitCompoundStmt(clang::CompoundStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitSwitchCaseEPNS_10SwitchCaseE\", \"clang::ASTStmtWriter::VisitSwitchCase(clang::SwitchCase*)\"},\n    {\"_ZN5clang9ASTWriter15getSwitchCaseIDEPNS_10SwitchCaseE\", \"clang::ASTWriter::getSwitchCaseID(clang::SwitchCase*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitCaseStmtEPNS_8CaseStmtE\", \"clang::ASTStmtWriter::VisitCaseStmt(clang::CaseStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter16VisitDefaultStmtEPNS_11DefaultStmtE\", \"clang::ASTStmtWriter::VisitDefaultStmt(clang::DefaultStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitLabelStmtEPNS_9LabelStmtE\", \"clang::ASTStmtWriter::VisitLabelStmt(clang::LabelStmt*)\"},\n    {\"_ZN5clang9ASTWriter10GetLabelIDEPNS_9LabelStmtE\", \"clang::ASTWriter::GetLabelID(clang::LabelStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter11VisitIfStmtEPNS_6IfStmtE\", \"clang::ASTStmtWriter::VisitIfStmt(clang::IfStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitSwitchStmtEPNS_10SwitchStmtE\", \"clang::ASTStmtWriter::VisitSwitchStmt(clang::SwitchStmt*)\"},\n    {\"_ZN5clang9ASTWriter18RecordSwitchCaseIDEPNS_10SwitchCaseE\", \"clang::ASTWriter::RecordSwitchCaseID(clang::SwitchCase*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitWhileStmtEPNS_9WhileStmtE\", \"clang::ASTStmtWriter::VisitWhileStmt(clang::WhileStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter11VisitDoStmtEPNS_6DoStmtE\", \"clang::ASTStmtWriter::VisitDoStmt(clang::DoStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter12VisitForStmtEPNS_7ForStmtE\", \"clang::ASTStmtWriter::VisitForStmt(clang::ForStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitGotoStmtEPNS_8GotoStmtE\", \"clang::ASTStmtWriter::VisitGotoStmt(clang::GotoStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitIndirectGotoStmtEPNS_16IndirectGotoStmtE\", \"clang::ASTStmtWriter::VisitIndirectGotoStmt(clang::IndirectGotoStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitContinueStmtEPNS_12ContinueStmtE\", \"clang::ASTStmtWriter::VisitContinueStmt(clang::ContinueStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitBreakStmtEPNS_9BreakStmtE\", \"clang::ASTStmtWriter::VisitBreakStmt(clang::BreakStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitReturnStmtEPNS_10ReturnStmtE\", \"clang::ASTStmtWriter::VisitReturnStmt(clang::ReturnStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitDeclStmtEPNS_8DeclStmtE\", \"clang::ASTStmtWriter::VisitDeclStmt(clang::DeclStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter12VisitAsmStmtEPNS_7AsmStmtE\", \"clang::ASTStmtWriter::VisitAsmStmt(clang::AsmStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter9VisitExprEPNS_4ExprE\", \"clang::ASTStmtWriter::VisitExpr(clang::Expr*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitPredefinedExprEPNS_14PredefinedExprE\", \"clang::ASTStmtWriter::VisitPredefinedExpr(clang::PredefinedExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter16VisitDeclRefExprEPNS_11DeclRefExprE\", \"clang::ASTStmtWriter::VisitDeclRefExpr(clang::DeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitIntegerLiteralEPNS_14IntegerLiteralE\", \"clang::ASTStmtWriter::VisitIntegerLiteral(clang::IntegerLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitFloatingLiteralEPNS_15FloatingLiteralE\", \"clang::ASTStmtWriter::VisitFloatingLiteral(clang::FloatingLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitImaginaryLiteralEPNS_16ImaginaryLiteralE\", \"clang::ASTStmtWriter::VisitImaginaryLiteral(clang::ImaginaryLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitStringLiteralEPNS_13StringLiteralE\", \"clang::ASTStmtWriter::VisitStringLiteral(clang::StringLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitCharacterLiteralEPNS_16CharacterLiteralE\", \"clang::ASTStmtWriter::VisitCharacterLiteral(clang::CharacterLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitParenExprEPNS_9ParenExprE\", \"clang::ASTStmtWriter::VisitParenExpr(clang::ParenExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitParenListExprEPNS_13ParenListExprE\", \"clang::ASTStmtWriter::VisitParenListExpr(clang::ParenListExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitUnaryOperatorEPNS_13UnaryOperatorE\", \"clang::ASTStmtWriter::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitOffsetOfExprEPNS_12OffsetOfExprE\", \"clang::ASTStmtWriter::VisitOffsetOfExpr(clang::OffsetOfExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitSizeOfAlignOfExprEPNS_17SizeOfAlignOfExprE\", \"clang::ASTStmtWriter::VisitSizeOfAlignOfExpr(clang::SizeOfAlignOfExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitArraySubscriptExprEPNS_18ArraySubscriptExprE\", \"clang::ASTStmtWriter::VisitArraySubscriptExpr(clang::ArraySubscriptExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitCallExprEPNS_8CallExprE\", \"clang::ASTStmtWriter::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitMemberExprEPNS_10MemberExprE\", \"clang::ASTStmtWriter::VisitMemberExpr(clang::MemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter16VisitObjCIsaExprEPNS_11ObjCIsaExprE\", \"clang::ASTStmtWriter::VisitObjCIsaExpr(clang::ObjCIsaExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitCastExprEPNS_8CastExprE\", \"clang::ASTStmtWriter::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitBinaryOperatorEPNS_14BinaryOperatorE\", \"clang::ASTStmtWriter::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN5clang13ASTStmtWriter27VisitCompoundAssignOperatorEPNS_22CompoundAssignOperatorE\", \"clang::ASTStmtWriter::VisitCompoundAssignOperator(clang::CompoundAssignOperator*)\"},\n    {\"_ZN5clang13ASTStmtWriter24VisitConditionalOperatorEPNS_19ConditionalOperatorE\", \"clang::ASTStmtWriter::VisitConditionalOperator(clang::ConditionalOperator*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitImplicitCastExprEPNS_16ImplicitCastExprE\", \"clang::ASTStmtWriter::VisitImplicitCastExpr(clang::ImplicitCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitExplicitCastExprEPNS_16ExplicitCastExprE\", \"clang::ASTStmtWriter::VisitExplicitCastExpr(clang::ExplicitCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitCStyleCastExprEPNS_14CStyleCastExprE\", \"clang::ASTStmtWriter::VisitCStyleCastExpr(clang::CStyleCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter24VisitCompoundLiteralExprEPNS_19CompoundLiteralExprE\", \"clang::ASTStmtWriter::VisitCompoundLiteralExpr(clang::CompoundLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter25VisitExtVectorElementExprEPNS_20ExtVectorElementExprE\", \"clang::ASTStmtWriter::VisitExtVectorElementExpr(clang::ExtVectorElementExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitInitListExprEPNS_12InitListExprE\", \"clang::ASTStmtWriter::VisitInitListExpr(clang::InitListExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitDesignatedInitExprEPNS_18DesignatedInitExprE\", \"clang::ASTStmtWriter::VisitDesignatedInitExpr(clang::DesignatedInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter26VisitImplicitValueInitExprEPNS_21ImplicitValueInitExprE\", \"clang::ASTStmtWriter::VisitImplicitValueInitExpr(clang::ImplicitValueInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitVAArgExprEPNS_9VAArgExprE\", \"clang::ASTStmtWriter::VisitVAArgExpr(clang::VAArgExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitAddrLabelExprEPNS_13AddrLabelExprE\", \"clang::ASTStmtWriter::VisitAddrLabelExpr(clang::AddrLabelExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter13VisitStmtExprEPNS_8StmtExprE\", \"clang::ASTStmtWriter::VisitStmtExpr(clang::StmtExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitChooseExprEPNS_10ChooseExprE\", \"clang::ASTStmtWriter::VisitChooseExpr(clang::ChooseExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter16VisitGNUNullExprEPNS_11GNUNullExprE\", \"clang::ASTStmtWriter::VisitGNUNullExpr(clang::GNUNullExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitShuffleVectorExprEPNS_17ShuffleVectorExprE\", \"clang::ASTStmtWriter::VisitShuffleVectorExpr(clang::ShuffleVectorExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter14VisitBlockExprEPNS_9BlockExprE\", \"clang::ASTStmtWriter::VisitBlockExpr(clang::BlockExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitBlockDeclRefExprEPNS_16BlockDeclRefExprE\", \"clang::ASTStmtWriter::VisitBlockDeclRefExpr(clang::BlockDeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitObjCStringLiteralEPNS_17ObjCStringLiteralE\", \"clang::ASTStmtWriter::VisitObjCStringLiteral(clang::ObjCStringLiteral*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitObjCEncodeExprEPNS_14ObjCEncodeExprE\", \"clang::ASTStmtWriter::VisitObjCEncodeExpr(clang::ObjCEncodeExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitObjCSelectorExprEPNS_16ObjCSelectorExprE\", \"clang::ASTStmtWriter::VisitObjCSelectorExpr(clang::ObjCSelectorExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitObjCProtocolExprEPNS_16ObjCProtocolExprE\", \"clang::ASTStmtWriter::VisitObjCProtocolExpr(clang::ObjCProtocolExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitObjCIvarRefExprEPNS_15ObjCIvarRefExprE\", \"clang::ASTStmtWriter::VisitObjCIvarRefExpr(clang::ObjCIvarRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter24VisitObjCPropertyRefExprEPNS_19ObjCPropertyRefExprE\", \"clang::ASTStmtWriter::VisitObjCPropertyRefExpr(clang::ObjCPropertyRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitObjCMessageExprEPNS_15ObjCMessageExprE\", \"clang::ASTStmtWriter::VisitObjCMessageExpr(clang::ObjCMessageExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter26VisitObjCForCollectionStmtEPNS_21ObjCForCollectionStmtE\", \"clang::ASTStmtWriter::VisitObjCForCollectionStmt(clang::ObjCForCollectionStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitObjCAtCatchStmtEPNS_15ObjCAtCatchStmtE\", \"clang::ASTStmtWriter::VisitObjCAtCatchStmt(clang::ObjCAtCatchStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitObjCAtFinallyStmtEPNS_17ObjCAtFinallyStmtE\", \"clang::ASTStmtWriter::VisitObjCAtFinallyStmt(clang::ObjCAtFinallyStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitObjCAtTryStmtEPNS_13ObjCAtTryStmtE\", \"clang::ASTStmtWriter::VisitObjCAtTryStmt(clang::ObjCAtTryStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter27VisitObjCAtSynchronizedStmtEPNS_22ObjCAtSynchronizedStmtE\", \"clang::ASTStmtWriter::VisitObjCAtSynchronizedStmt(clang::ObjCAtSynchronizedStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitObjCAtThrowStmtEPNS_15ObjCAtThrowStmtE\", \"clang::ASTStmtWriter::VisitObjCAtThrowStmt(clang::ObjCAtThrowStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitCXXCatchStmtEPNS_12CXXCatchStmtE\", \"clang::ASTStmtWriter::VisitCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitCXXTryStmtEPNS_10CXXTryStmtE\", \"clang::ASTStmtWriter::VisitCXXTryStmt(clang::CXXTryStmt*)\"},\n    {\"_ZN5clang13ASTStmtWriter24VisitCXXOperatorCallExprEPNS_19CXXOperatorCallExprE\", \"clang::ASTStmtWriter::VisitCXXOperatorCallExpr(clang::CXXOperatorCallExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitCXXMemberCallExprEPNS_17CXXMemberCallExprE\", \"clang::ASTStmtWriter::VisitCXXMemberCallExpr(clang::CXXMemberCallExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitCXXConstructExprEPNS_16CXXConstructExprE\", \"clang::ASTStmtWriter::VisitCXXConstructExpr(clang::CXXConstructExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter27VisitCXXTemporaryObjectExprEPNS_22CXXTemporaryObjectExprE\", \"clang::ASTStmtWriter::VisitCXXTemporaryObjectExpr(clang::CXXTemporaryObjectExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitCXXNamedCastExprEPNS_16CXXNamedCastExprE\", \"clang::ASTStmtWriter::VisitCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitCXXStaticCastExprEPNS_17CXXStaticCastExprE\", \"clang::ASTStmtWriter::VisitCXXStaticCastExpr(clang::CXXStaticCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitCXXDynamicCastExprEPNS_18CXXDynamicCastExprE\", \"clang::ASTStmtWriter::VisitCXXDynamicCastExpr(clang::CXXDynamicCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter27VisitCXXReinterpretCastExprEPNS_22CXXReinterpretCastExprE\", \"clang::ASTStmtWriter::VisitCXXReinterpretCastExpr(clang::CXXReinterpretCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitCXXConstCastExprEPNS_16CXXConstCastExprE\", \"clang::ASTStmtWriter::VisitCXXConstCastExpr(clang::CXXConstCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter26VisitCXXFunctionalCastExprEPNS_21CXXFunctionalCastExprE\", \"clang::ASTStmtWriter::VisitCXXFunctionalCastExpr(clang::CXXFunctionalCastExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitCXXBoolLiteralExprEPNS_18CXXBoolLiteralExprE\", \"clang::ASTStmtWriter::VisitCXXBoolLiteralExpr(clang::CXXBoolLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter26VisitCXXNullPtrLiteralExprEPNS_21CXXNullPtrLiteralExprE\", \"clang::ASTStmtWriter::VisitCXXNullPtrLiteralExpr(clang::CXXNullPtrLiteralExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitCXXTypeidExprEPNS_13CXXTypeidExprE\", \"clang::ASTStmtWriter::VisitCXXTypeidExpr(clang::CXXTypeidExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitCXXUuidofExprEPNS_13CXXUuidofExprE\", \"clang::ASTStmtWriter::VisitCXXUuidofExpr(clang::CXXUuidofExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter16VisitCXXThisExprEPNS_11CXXThisExprE\", \"clang::ASTStmtWriter::VisitCXXThisExpr(clang::CXXThisExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitCXXThrowExprEPNS_12CXXThrowExprE\", \"clang::ASTStmtWriter::VisitCXXThrowExpr(clang::CXXThrowExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitCXXDefaultArgExprEPNS_17CXXDefaultArgExprE\", \"clang::ASTStmtWriter::VisitCXXDefaultArgExpr(clang::CXXDefaultArgExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter25VisitCXXBindTemporaryExprEPNS_20CXXBindTemporaryExprE\", \"clang::ASTStmtWriter::VisitCXXBindTemporaryExpr(clang::CXXBindTemporaryExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter27VisitCXXScalarValueInitExprEPNS_22CXXScalarValueInitExprE\", \"clang::ASTStmtWriter::VisitCXXScalarValueInitExpr(clang::CXXScalarValueInitExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter15VisitCXXNewExprEPNS_10CXXNewExprE\", \"clang::ASTStmtWriter::VisitCXXNewExpr(clang::CXXNewExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter18VisitCXXDeleteExprEPNS_13CXXDeleteExprE\", \"clang::ASTStmtWriter::VisitCXXDeleteExpr(clang::CXXDeleteExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter28VisitCXXPseudoDestructorExprEPNS_23CXXPseudoDestructorExprE\", \"clang::ASTStmtWriter::VisitCXXPseudoDestructorExpr(clang::CXXPseudoDestructorExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter21VisitExprWithCleanupsEPNS_16ExprWithCleanupsE\", \"clang::ASTStmtWriter::VisitExprWithCleanups(clang::ExprWithCleanups*)\"},\n    {\"_ZN5clang13ASTStmtWriter32VisitCXXDependentScopeMemberExprEPNS_27CXXDependentScopeMemberExprE\", \"clang::ASTStmtWriter::VisitCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter30VisitDependentScopeDeclRefExprEPNS_25DependentScopeDeclRefExprE\", \"clang::ASTStmtWriter::VisitDependentScopeDeclRefExpr(clang::DependentScopeDeclRefExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter31VisitCXXUnresolvedConstructExprEPNS_26CXXUnresolvedConstructExprE\", \"clang::ASTStmtWriter::VisitCXXUnresolvedConstructExpr(clang::CXXUnresolvedConstructExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter17VisitOverloadExprEPNS_12OverloadExprE\", \"clang::ASTStmtWriter::VisitOverloadExpr(clang::OverloadExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter25VisitUnresolvedMemberExprEPNS_20UnresolvedMemberExprE\", \"clang::ASTStmtWriter::VisitUnresolvedMemberExpr(clang::UnresolvedMemberExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter25VisitUnresolvedLookupExprEPNS_20UnresolvedLookupExprE\", \"clang::ASTStmtWriter::VisitUnresolvedLookupExpr(clang::UnresolvedLookupExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitUnaryTypeTraitExprEPNS_18UnaryTypeTraitExprE\", \"clang::ASTStmtWriter::VisitUnaryTypeTraitExpr(clang::UnaryTypeTraitExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter24VisitBinaryTypeTraitExprEPNS_19BinaryTypeTraitExprE\", \"clang::ASTStmtWriter::VisitBinaryTypeTraitExpr(clang::BinaryTypeTraitExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitCXXNoexceptExprEPNS_15CXXNoexceptExprE\", \"clang::ASTStmtWriter::VisitCXXNoexceptExpr(clang::CXXNoexceptExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter22VisitPackExpansionExprEPNS_17PackExpansionExprE\", \"clang::ASTStmtWriter::VisitPackExpansionExpr(clang::PackExpansionExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter19VisitSizeOfPackExprEPNS_14SizeOfPackExprE\", \"clang::ASTStmtWriter::VisitSizeOfPackExpr(clang::SizeOfPackExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter37VisitSubstNonTypeTemplateParmPackExprEPNS_32SubstNonTypeTemplateParmPackExprE\", \"clang::ASTStmtWriter::VisitSubstNonTypeTemplateParmPackExpr(clang::SubstNonTypeTemplateParmPackExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter20VisitOpaqueValueExprEPNS_15OpaqueValueExprE\", \"clang::ASTStmtWriter::VisitOpaqueValueExpr(clang::OpaqueValueExpr*)\"},\n    {\"_ZN5clang13ASTStmtWriter23VisitCUDAKernelCallExprEPNS_18CUDAKernelCallExprE\", \"clang::ASTStmtWriter::VisitCUDAKernelCallExpr(clang::CUDAKernelCallExpr*)\"},\n    {\"_ZN5clang9ASTWriter18ClearSwitchCaseIDsEv\", \"clang::ASTWriter::ClearSwitchCaseIDs()\"},\n    {\"_ZN5clang9ASTWriter12WriteSubStmtEPNS_4StmtE\", \"clang::ASTWriter::WriteSubStmt(clang::Stmt*)\"},\n    {\"_ZN5clang9ASTWriter10FlushStmtsEv\", \"clang::ASTWriter::FlushStmts()\"},\n    {\"_ZN5clang11StmtVisitorINS_13ASTStmtWriterEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<clang::ASTStmtWriter, void>::Visit(clang::Stmt*)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang9LabelStmtESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::LabelStmt*, std::pair<clang::LabelStmt* const, unsigned int>, std::_Select1st<std::pair<clang::LabelStmt* const, unsigned int> >, std::less<clang::LabelStmt*>, std::allocator<std::pair<clang::LabelStmt* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::LabelStmt* const, unsigned int> >, std::pair<clang::LabelStmt* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang9LabelStmtESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::LabelStmt*, std::pair<clang::LabelStmt* const, unsigned int>, std::_Select1st<std::pair<clang::LabelStmt* const, unsigned int> >, std::less<clang::LabelStmt*>, std::allocator<std::pair<clang::LabelStmt* const, unsigned int> > >::_M_insert_unique(std::pair<clang::LabelStmt* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang10SwitchCaseESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::SwitchCase*, std::pair<clang::SwitchCase* const, unsigned int>, std::_Select1st<std::pair<clang::SwitchCase* const, unsigned int> >, std::less<clang::SwitchCase*>, std::allocator<std::pair<clang::SwitchCase* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::SwitchCase* const, unsigned int> >, std::pair<clang::SwitchCase* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang10SwitchCaseESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::SwitchCase*, std::pair<clang::SwitchCase* const, unsigned int>, std::_Select1st<std::pair<clang::SwitchCase* const, unsigned int> >, std::less<clang::SwitchCase*>, std::allocator<std::pair<clang::SwitchCase* const, unsigned int> > >::_M_insert_unique(std::pair<clang::SwitchCase* const, unsigned int> const&)\"},\n    {\"_ZN5clang12PCHGeneratorC1ERKNS_12PreprocessorEbPKcPN4llvm11raw_ostreamE\", \"clang::PCHGenerator::PCHGenerator(clang::Preprocessor const&, bool, char const*, llvm::raw_ostream*)\"},\n    {\"_ZN5clang12PCHGeneratorC2ERKNS_12PreprocessorEbPKcPN4llvm11raw_ostreamE\", \"clang::PCHGenerator::PCHGenerator(clang::Preprocessor const&, bool, char const*, llvm::raw_ostream*)\"},\n    {\"_ZN5clang12PCHGenerator21HandleTranslationUnitERNS_10ASTContextE\", \"clang::PCHGenerator::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang12PCHGenerator22GetASTMutationListenerEv\", \"clang::PCHGenerator::GetASTMutationListener()\"},\n    {\"_ZN5clang12PCHGenerator27GetASTSerializationListenerEv\", \"clang::PCHGenerator::GetASTSerializationListener()\"},\n    {\"_ZN5clang12PCHGenerator29GetASTDeserializationListenerEv\", \"clang::PCHGenerator::GetASTDeserializationListener()\"},\n    {\"_ZN5clang17EmitBackendOutputERNS_10DiagnosticERKNS_14CodeGenOptionsERKNS_13TargetOptionsEPN4llvm6ModuleENS_13BackendActionEPNS8_11raw_ostreamE\", \"clang::EmitBackendOutput(clang::Diagnostic&, clang::CodeGenOptions const&, clang::TargetOptions const&, llvm::Module*, clang::BackendAction, llvm::raw_ostream*)\"},\n    {\"_ZN5clang7CodeGen11CGBlockInfoC1EPKNS_9BlockExprEPKc\", \"clang::CodeGen::CGBlockInfo::CGBlockInfo(clang::BlockExpr const*, char const*)\"},\n    {\"_ZN5clang7CodeGen11CGBlockInfoC2EPKNS_9BlockExprEPKc\", \"clang::CodeGen::CGBlockInfo::CGBlockInfo(clang::BlockExpr const*, char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitBlockLiteralEPKNS_9BlockExprE\", \"clang::CodeGen::CodeGenFunction::EmitBlockLiteral(clang::BlockExpr const*)\"},\n    {\"_Z16computeBlockInfoRN5clang7CodeGen13CodeGenModuleERNS0_11CGBlockInfoE\", \"computeBlockInfo(clang::CodeGen::CodeGenModule&, clang::CodeGen::CGBlockInfo&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21GenerateBlockFunctionENS0_10GlobalDeclERKNS0_11CGBlockInfoEPKNS_4DeclERKN4llvm8DenseMapIS8_PNS9_5ValueENS9_12DenseMapInfoIS8_EENSD_ISC_EEEE\", \"clang::CodeGen::CodeGenFunction::GenerateBlockFunction(clang::CodeGen::GlobalDecl, clang::CodeGen::CGBlockInfo const&, clang::Decl const*, llvm::DenseMap<clang::Decl const*, llvm::Value*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::Value*> > const&)\"},\n    {\"_Z16buildGlobalBlockRN5clang7CodeGen13CodeGenModuleERKNS0_11CGBlockInfoEPN4llvm8ConstantE\", \"buildGlobalBlock(clang::CodeGen::CodeGenModule&, clang::CodeGen::CGBlockInfo const&, llvm::Constant*)\"},\n    {\"_Z20buildBlockDescriptorRN5clang7CodeGen13CodeGenModuleERKNS0_11CGBlockInfoE\", \"buildBlockDescriptor(clang::CodeGen::CodeGenModule&, clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule22getBlockDescriptorTypeEv\", \"clang::CodeGen::CodeGenModule::getBlockDescriptorType()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule26getGenericBlockLiteralTypeEv\", \"clang::CodeGen::CodeGenModule::getGenericBlockLiteralType()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitBlockCallExprEPKNS_8CallExprENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitBlockCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18GetAddrOfBlockDeclEPKNS_7VarDeclEb\", \"clang::CodeGen::CodeGenFunction::GetAddrOfBlockDecl(clang::VarDecl const*, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule20GetAddrOfGlobalBlockEPKNS_9BlockExprEPKc\", \"clang::CodeGen::CodeGenModule::GetAddrOfGlobalBlock(clang::BlockExpr const*, char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26GenerateCopyHelperFunctionERKNS0_11CGBlockInfoE\", \"clang::CodeGen::CodeGenFunction::GenerateCopyHelperFunction(clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29GenerateDestroyHelperFunctionERKNS0_11CGBlockInfoE\", \"clang::CodeGen::CodeGenFunction::GenerateDestroyHelperFunction(clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17BuildBlockReleaseEPN4llvm5ValueENS0_15BlockFieldFlagsE\", \"clang::CodeGen::CodeGenFunction::BuildBlockRelease(llvm::Value*, clang::CodeGen::BlockFieldFlags)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction31GeneratebyrefCopyHelperFunctionEPKN4llvm4TypeENS0_15BlockFieldFlagsEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::GeneratebyrefCopyHelperFunction(llvm::Type const*, clang::CodeGen::BlockFieldFlags, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction34GeneratebyrefDestroyHelperFunctionEPKN4llvm4TypeENS0_15BlockFieldFlagsEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::GeneratebyrefDestroyHelperFunction(llvm::Type const*, clang::CodeGen::BlockFieldFlags, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule20BuildbyrefCopyHelperEPKN4llvm4TypeENS0_15BlockFieldFlagsEjPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenModule::BuildbyrefCopyHelper(llvm::Type const*, clang::CodeGen::BlockFieldFlags, unsigned int, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23BuildbyrefDestroyHelperEPKN4llvm4TypeENS0_15BlockFieldFlagsEjPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenModule::BuildbyrefDestroyHelper(llvm::Type const*, clang::CodeGen::BlockFieldFlags, unsigned int, clang::VarDecl const*)\"},\n    {\"_ZSt21__inplace_stable_sortIPN12_GLOBAL__N_116BlockLayoutChunkEEvT_S3_\", \"void std::__inplace_stable_sort<(anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPN12_GLOBAL__N_116BlockLayoutChunkES2_lEvT_S3_T0_T1_\", \"void std::__stable_sort_adaptive<(anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, long>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, long)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPN12_GLOBAL__N_116BlockLayoutChunkES2_EvT_S3_T0_\", \"void std::__merge_sort_with_buffer<(anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*)\"},\n    {\"_ZSt16__merge_adaptiveIPN12_GLOBAL__N_116BlockLayoutChunkElS2_EvT_S3_S3_T0_S4_T1_S4_\", \"void std::__merge_adaptive<(anonymous namespace)::BlockLayoutChunk*, long, (anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, long, long, (anonymous namespace)::BlockLayoutChunk*, long)\"},\n    {\"_ZSt13copy_backwardIPN12_GLOBAL__N_116BlockLayoutChunkES2_ET0_T_S4_S3_\", \"(anonymous namespace)::BlockLayoutChunk* std::copy_backward<(anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*)\"},\n    {\"_ZSt6rotateIPN12_GLOBAL__N_116BlockLayoutChunkEEvT_S3_S3_\", \"void std::rotate<(anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*)\"},\n    {\"_ZSt16__insertion_sortIPN12_GLOBAL__N_116BlockLayoutChunkEEvT_S3_\", \"void std::__insertion_sort<(anonymous namespace)::BlockLayoutChunk*>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*)\"},\n    {\"_ZSt22__merge_without_bufferIPN12_GLOBAL__N_116BlockLayoutChunkElEvT_S3_S3_T0_S4_\", \"void std::__merge_without_buffer<(anonymous namespace)::BlockLayoutChunk*, long>((anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, (anonymous namespace)::BlockLayoutChunk*, long, long)\"},\n    {\"_Z15hasMutableFieldPKN5clang13CXXRecordDeclE\", \"hasMutableField(clang::CXXRecordDecl const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_116BlockLayoutChunkELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::BlockLayoutChunk, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIyPNS_8ConstantENS_12DenseMapInfoIyEENS3_IS2_EEE16InsertIntoBucketERKyRKS2_PSt4pairIyS2_E\", \"llvm::DenseMap<unsigned long long, llvm::Constant*, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<llvm::Constant*> >::InsertIntoBucket(unsigned long long const&, llvm::Constant* const&, std::pair<unsigned long long, llvm::Constant*>*)\"},\n    {\"_ZN4llvm8DenseMapIyPNS_8ConstantENS_12DenseMapInfoIyEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned long long, llvm::Constant*, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<llvm::Constant*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclENS1_7CodeGen11CGBlockInfo7CaptureENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::VarDecl const*, clang::CodeGen::CGBlockInfo::Capture, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::CodeGen::CGBlockInfo::Capture> >::InsertIntoBucket(clang::VarDecl const* const&, clang::CodeGen::CGBlockInfo::Capture const&, std::pair<clang::VarDecl const*, clang::CodeGen::CGBlockInfo::Capture>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclENS1_7CodeGen11CGBlockInfo7CaptureENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, clang::CodeGen::CGBlockInfo::Capture, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::CodeGen::CGBlockInfo::Capture> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitBuiltinExprEPKNS_12FunctionDeclEjPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitBuiltinExpr(clang::FunctionDecl const*, unsigned int, clang::CallExpr const*)\"},\n    {\"_Z8EmitFAbsRN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueENS_8QualTypeE\", \"EmitFAbs(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::QualType)\"},\n    {\"_Z16EmitBinaryAtomicRN5clang7CodeGen15CodeGenFunctionEN4llvm9Intrinsic2IDEPKNS_8CallExprE\", \"EmitBinaryAtomic(clang::CodeGen::CodeGenFunction&, llvm::Intrinsic::ID, clang::CallExpr const*)\"},\n    {\"_Z20EmitBinaryAtomicPostRN5clang7CodeGen15CodeGenFunctionEN4llvm9Intrinsic2IDEPKNS_8CallExprENS3_11Instruction9BinaryOpsE\", \"EmitBinaryAtomicPost(clang::CodeGen::CodeGenFunction&, llvm::Intrinsic::ID, clang::CallExpr const*, llvm::Instruction::BinaryOps)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitTargetBuiltinExprEjPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitTargetBuiltinExpr(unsigned int, clang::CallExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitARMBuiltinExprEjPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr(unsigned int, clang::CallExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitX86BuiltinExprEjPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitX86BuiltinExpr(unsigned int, clang::CallExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitPPCBuiltinExprEjPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitPPCBuiltinExpr(unsigned int, clang::CallExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitNeonSplatEPN4llvm5ValueEPNS2_8ConstantE\", \"clang::CodeGen::CodeGenFunction::EmitNeonSplat(llvm::Value*, llvm::Constant*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitNeonCallEPN4llvm8FunctionERNS2_15SmallVectorImplIPNS2_5ValueEEEPKcjb\", \"clang::CodeGen::CodeGenFunction::EmitNeonCall(llvm::Function*, llvm::SmallVectorImpl<llvm::Value*>&, char const*, unsigned int, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitNeonShiftVectorEPN4llvm5ValueEPKNS2_4TypeEb\", \"clang::CodeGen::CodeGenFunction::EmitNeonShiftVector(llvm::Value*, llvm::Type const*, bool)\"},\n    {\"_Z19GetPointeeAlignmentRN5clang7CodeGen15CodeGenFunctionEPKNS_4ExprE\", \"GetPointeeAlignment(clang::CodeGen::CodeGenFunction&, clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11BuildVectorERKN4llvm15SmallVectorImplIPNS2_5ValueEEE\", \"clang::CodeGen::CodeGenFunction::BuildVector(llvm::SmallVectorImpl<llvm::Value*> const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule28TryEmitBaseDestructorAsAliasEPKNS_17CXXDestructorDeclE\", \"clang::CodeGen::CodeGenModule::TryEmitBaseDestructorAsAlias(clang::CXXDestructorDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule24TryEmitDefinitionAsAliasENS0_10GlobalDeclES2_\", \"clang::CodeGen::CodeGenModule::TryEmitDefinitionAsAlias(clang::CodeGen::GlobalDecl, clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19EmitCXXConstructorsEPKNS_18CXXConstructorDeclE\", \"clang::CodeGen::CodeGenModule::EmitCXXConstructors(clang::CXXConstructorDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18EmitCXXConstructorEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeE\", \"clang::CodeGen::CodeGenModule::EmitCXXConstructor(clang::CXXConstructorDecl const*, clang::CXXCtorType)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23GetAddrOfCXXConstructorEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeE\", \"clang::CodeGen::CodeGenModule::GetAddrOfCXXConstructor(clang::CXXConstructorDecl const*, clang::CXXCtorType)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18EmitCXXDestructorsEPKNS_17CXXDestructorDeclE\", \"clang::CodeGen::CodeGenModule::EmitCXXDestructors(clang::CXXDestructorDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule17EmitCXXDestructorEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeE\", \"clang::CodeGen::CodeGenModule::EmitCXXDestructor(clang::CXXDestructorDecl const*, clang::CXXDtorType)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule22GetAddrOfCXXDestructorEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeE\", \"clang::CodeGen::CodeGenModule::GetAddrOfCXXDestructor(clang::CXXDestructorDecl const*, clang::CXXDtorType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16BuildVirtualCallEPKNS_13CXXMethodDeclEPN4llvm5ValueEPKNS5_4TypeE\", \"clang::CodeGen::CodeGenFunction::BuildVirtualCall(clang::CXXMethodDecl const*, llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25BuildAppleKextVirtualCallEPKNS_13CXXMethodDeclEPNS_19NestedNameSpecifierEPKN4llvm4TypeE\", \"clang::CodeGen::CodeGenFunction::BuildAppleKextVirtualCall(clang::CXXMethodDecl const*, clang::NestedNameSpecifier*, llvm::Type const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction35BuildAppleKextVirtualDestructorCallEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenFunction::BuildAppleKextVirtualDestructorCall(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16BuildVirtualCallEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeEPN4llvm5ValueEPKNS6_4TypeE\", \"clang::CodeGen::CodeGenFunction::BuildVirtualCall(clang::CXXDestructorDecl const*, clang::CXXDtorType, llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule15GetAddrOfGlobalENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::GetAddrOfGlobal(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABID0Ev\", \"clang::CodeGen::CGCXXABI::~CGCXXABI()\"},\n    {\"_ZN5clang7CodeGen8CGCXXABID1Ev\", \"clang::CodeGen::CGCXXABI::~CGCXXABI()\"},\n    {\"_ZN5clang7CodeGen8CGCXXABID2Ev\", \"clang::CodeGen::CGCXXABI::~CGCXXABI()\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI24ConvertMemberPointerTypeEPKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::ConvertMemberPointerType(clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI31EmitLoadOfMemberFunctionPointerERNS0_15CodeGenFunctionERPN4llvm5ValueES6_PKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::EmitLoadOfMemberFunctionPointer(clang::CodeGen::CodeGenFunction&, llvm::Value*&, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI28EmitMemberDataPointerAddressERNS0_15CodeGenFunctionEPN4llvm5ValueES6_PKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::EmitMemberDataPointerAddress(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI27EmitMemberPointerConversionERNS0_15CodeGenFunctionEPKNS_8CastExprEPN4llvm5ValueE\", \"clang::CodeGen::CGCXXABI::EmitMemberPointerConversion(clang::CodeGen::CodeGenFunction&, clang::CastExpr const*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI27EmitMemberPointerComparisonERNS0_15CodeGenFunctionEPN4llvm5ValueES6_PKNS_17MemberPointerTypeEb\", \"clang::CodeGen::CGCXXABI::EmitMemberPointerComparison(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::MemberPointerType const*, bool)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI26EmitMemberPointerIsNotNullERNS0_15CodeGenFunctionEPN4llvm5ValueEPKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::EmitMemberPointerIsNotNull(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI27EmitMemberPointerConversionEPN4llvm8ConstantEPKNS_8CastExprE\", \"clang::CodeGen::CGCXXABI::EmitMemberPointerConversion(llvm::Constant*, clang::CastExpr const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI21EmitNullMemberPointerEPKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::EmitNullMemberPointer(clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI17EmitMemberPointerEPKNS_13CXXMethodDeclE\", \"clang::CodeGen::CGCXXABI::EmitMemberPointer(clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI21EmitMemberDataPointerEPKNS_17MemberPointerTypeENS_9CharUnitsE\", \"clang::CodeGen::CGCXXABI::EmitMemberDataPointer(clang::MemberPointerType const*, clang::CharUnits)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI19isZeroInitializableEPKNS_17MemberPointerTypeE\", \"clang::CodeGen::CGCXXABI::isZeroInitializable(clang::MemberPointerType const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI14BuildThisParamERNS0_15CodeGenFunctionERN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CGCXXABI::BuildThisParam(clang::CodeGen::CodeGenFunction&, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI13EmitThisParamERNS0_15CodeGenFunctionE\", \"clang::CodeGen::CGCXXABI::EmitThisParam(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI19EmitReturnFromThunkERNS0_15CodeGenFunctionENS0_6RValueENS_8QualTypeE\", \"clang::CodeGen::CGCXXABI::EmitReturnFromThunk(clang::CodeGen::CodeGenFunction&, clang::CodeGen::RValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI18GetArrayCookieSizeEPKNS_10CXXNewExprE\", \"clang::CodeGen::CGCXXABI::GetArrayCookieSize(clang::CXXNewExpr const*)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI21InitializeArrayCookieERNS0_15CodeGenFunctionEPN4llvm5ValueES6_PKNS_10CXXNewExprENS_8QualTypeE\", \"clang::CodeGen::CGCXXABI::InitializeArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::CXXNewExpr const*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI15ReadArrayCookieERNS0_15CodeGenFunctionEPN4llvm5ValueEPKNS_13CXXDeleteExprENS_8QualTypeERS6_SB_RNS_9CharUnitsE\", \"clang::CodeGen::CGCXXABI::ReadArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::CXXDeleteExpr const*, clang::QualType, llvm::Value*&, llvm::Value*&, clang::CharUnits&)\"},\n    {\"_ZN5clang7CodeGen8CGCXXABI15EmitGuardedInitERNS0_15CodeGenFunctionERKNS_7VarDeclEPN4llvm14GlobalVariableE\", \"clang::CodeGen::CGCXXABI::EmitGuardedInit(clang::CodeGen::CodeGenFunction&, clang::VarDecl const&, llvm::GlobalVariable*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS_7CanQualINS_19FunctionNoProtoTypeEEEb\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CanQual<clang::FunctionNoProtoType>, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS_7CanQualINS_4TypeEEERKN4llvm15SmallVectorImplIS4_EERKNS_12FunctionType7ExtInfoEb\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CanQual<clang::Type>, llvm::SmallVectorImpl<clang::CanQual<clang::Type> > const&, clang::FunctionType::ExtInfo const&, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS_7CanQualINS_17FunctionProtoTypeEEEb\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CanQual<clang::FunctionProtoType>, bool)\"},\n    {\"_Z15getFunctionInfoRN5clang7CodeGen12CodeGenTypesERN4llvm15SmallVectorImplINS_7CanQualINS_4TypeEEEEENS5_INS_17FunctionProtoTypeEEEb\", \"getFunctionInfo(clang::CodeGen::CodeGenTypes&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&, clang::CanQual<clang::FunctionProtoType>, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_13CXXRecordDeclEPKNS_17FunctionProtoTypeE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CXXRecordDecl const*, clang::FunctionProtoType const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_13CXXMethodDeclE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CXXConstructorDecl const*, clang::CXXCtorType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CXXDestructorDecl const*, clang::CXXDtorType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_12FunctionDeclE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoEPKNS_14ObjCMethodDeclE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS_8QualTypeERKN4llvm11SmallVectorISt4pairINS0_6RValueES2_ELj16EEERKNS_12FunctionType7ExtInfoE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::QualType, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::FunctionType::ExtInfo const&)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15getFunctionInfoENS_8QualTypeERKN4llvm11SmallVectorISt4pairIPKNS_7VarDeclES2_ELj16EEERKNS_12FunctionType7ExtInfoE\", \"clang::CodeGen::CodeGenTypes::getFunctionInfo(clang::QualType, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u> const&, clang::FunctionType::ExtInfo const&)\"},\n    {\"_ZN5clang7CodeGen14CGFunctionInfoC1EjbjNS_7CanQualINS_4TypeEEEPKS4_j\", \"clang::CodeGen::CGFunctionInfo::CGFunctionInfo(unsigned int, bool, unsigned int, clang::CanQual<clang::Type>, clang::CanQual<clang::Type> const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen14CGFunctionInfoC2EjbjNS_7CanQualINS_4TypeEEEPKS4_j\", \"clang::CodeGen::CGFunctionInfo::CGFunctionInfo(unsigned int, bool, unsigned int, clang::CanQual<clang::Type>, clang::CanQual<clang::Type> const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes16GetExpandedTypesENS_8QualTypeERSt6vectorIPKN4llvm4TypeESaIS7_EEb\", \"clang::CodeGen::CodeGenTypes::GetExpandedTypes(clang::QualType, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> >&, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18ExpandTypeFromArgsENS_8QualTypeENS0_6LValueEN4llvm14ilist_iteratorINS4_8ArgumentEEE\", \"clang::CodeGen::CodeGenFunction::ExpandTypeFromArgs(clang::QualType, clang::CodeGen::LValue, llvm::ilist_iterator<llvm::Argument>)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16ExpandTypeToArgsENS_8QualTypeENS0_6RValueERN4llvm11SmallVectorIPNS4_5ValueELj16EEE\", \"clang::CodeGen::CodeGenFunction::ExpandTypeToArgs(clang::QualType, clang::CodeGen::RValue, llvm::SmallVector<llvm::Value*, 16u>&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18ReturnTypeUsesSRetERKNS0_14CGFunctionInfoE\", \"clang::CodeGen::CodeGenModule::ReturnTypeUsesSRet(clang::CodeGen::CGFunctionInfo const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19ReturnTypeUsesFPRetENS_8QualTypeE\", \"clang::CodeGen::CodeGenModule::ReturnTypeUsesFPRet(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15GetFunctionTypeENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenTypes::GetFunctionType(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes15GetFunctionTypeERKNS0_14CGFunctionInfoEbb\", \"clang::CodeGen::CodeGenTypes::GetFunctionType(clang::CodeGen::CGFunctionInfo const&, bool, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes24GetFunctionTypeForVTableENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenTypes::GetFunctionTypeForVTable(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule22ConstructAttributeListERKNS0_14CGFunctionInfoEPKNS_4DeclERN4llvm11SmallVectorINS8_18AttributeWithIndexELj8EEERj\", \"clang::CodeGen::CodeGenModule::ConstructAttributeList(clang::CodeGen::CGFunctionInfo const&, clang::Decl const*, llvm::SmallVector<llvm::AttributeWithIndex, 8u>&, unsigned int&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitFunctionPrologERKNS0_14CGFunctionInfoEPN4llvm8FunctionERKNS5_11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitFunctionProlog(clang::CodeGen::CGFunctionInfo const&, llvm::Function*, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u> const&)\"},\n    {\"_Z18CreateCoercedStorePN4llvm5ValueES1_bRN5clang7CodeGen15CodeGenFunctionE\", \"CreateCoercedStore(llvm::Value*, llvm::Value*, bool, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitFunctionEpilogERKNS0_14CGFunctionInfoE\", \"clang::CodeGen::CodeGenFunction::EmitFunctionEpilog(clang::CodeGen::CGFunctionInfo const&)\"},\n    {\"_Z17CreateCoercedLoadPN4llvm5ValueEPKNS_4TypeERN5clang7CodeGen15CodeGenFunctionE\", \"CreateCoercedLoad(llvm::Value*, llvm::Type const*, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitDelegateCallArgEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::EmitDelegateCallArg(clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitCallArgEPKNS_4ExprENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitCallArg(clang::Expr const*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitCallOrInvokeEPN4llvm5ValueEPKS4_S6_RKNS2_5TwineE\", \"clang::CodeGen::CodeGenFunction::EmitCallOrInvoke(llvm::Value*, llvm::Value* const*, llvm::Value* const*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction8EmitCallERKNS0_14CGFunctionInfoEPN4llvm5ValueENS0_15ReturnValueSlotERKNS5_11SmallVectorISt4pairINS0_6RValueENS_8QualTypeEELj16EEEPKNS_4DeclEPPNS5_11InstructionE\", \"clang::CodeGen::CodeGenFunction::EmitCall(clang::CodeGen::CGFunctionInfo const&, llvm::Value*, clang::CodeGen::ReturnValueSlot, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::Decl const*, llvm::Instruction**)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction9EmitVAArgEPN4llvm5ValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitVAArg(llvm::Value*, clang::QualType)\"},\n    {\"_Z34EnterStructPointerForCoercedAccessPN4llvm5ValueEPKNS_10StructTypeEyRN5clang7CodeGen15CodeGenFunctionE\", \"EnterStructPointerForCoercedAccess(llvm::Value*, llvm::StructType const*, unsigned long long, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_Z24CoerceIntOrPtrToIntOrPtrPN4llvm5ValueEPKNS_4TypeERN5clang7CodeGen15CodeGenFunctionE\", \"CoerceIntOrPtrToIntOrPtr(llvm::Value*, llvm::Type const*, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen14CGFunctionInfo7ProfileIPKNS_7CanQualINS_4TypeEEEEEvRN4llvm16FoldingSetNodeIDERKNS_12FunctionType7ExtInfoES5_T_SF_\", \"void clang::CodeGen::CGFunctionInfo::Profile<clang::CanQual<clang::Type> const*>(llvm::FoldingSetNodeID&, clang::FunctionType::ExtInfo const&, clang::CanQual<clang::Type>, clang::CanQual<clang::Type> const*, clang::CanQual<clang::Type> const*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE18CreateConstGEP2_32EPNS_5ValueEjjRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstGEP2_32(llvm::Value*, unsigned int, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE13CreateRetVoidEv\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateRetVoid()\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateRetEPNS_5ValueE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateRet(llvm::Value*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCallIPKPNS_5ValueEEEPNS_8CallInstES7_T_SC_RKNS_5TwineE\", \"llvm::CallInst* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall<llvm::Value* const*>(llvm::Value*, llvm::Value* const*, llvm::Value* const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateInvokeIPKPNS_5ValueEEEPNS_10InvokeInstES7_PNS_10BasicBlockESD_T_SE_RKNS_5TwineE\", \"llvm::InvokeInst* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInvoke<llvm::Value* const*>(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value* const*, llvm::Value* const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE18CreateExtractValueEPNS_5ValueEjRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateExtractValue(llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm10InvokeInstC2IPKPNS_5ValueEEES3_PNS_10BasicBlockES7_T_S8_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::InvokeInst::InvokeInst<llvm::Value* const*>(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value* const*, llvm::Value* const*, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CallInstC2IPKPNS_5ValueEEES3_T_S6_RKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst<llvm::Value* const*>(llvm::Value*, llvm::Value* const*, llvm::Value* const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE13CreateIntCastEPNS_5ValueEPKNS_4TypeEbRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateIntCast(llvm::Value*, llvm::Type const*, bool, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule28GetNonVirtualBaseClassOffsetEPKNS_13CXXRecordDeclEPKPKNS_16CXXBaseSpecifierES9_\", \"clang::CodeGen::CodeGenModule::GetNonVirtualBaseClassOffset(clang::CXXRecordDecl const*, clang::CXXBaseSpecifier const* const*, clang::CXXBaseSpecifier const* const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction37GetAddressOfDirectBaseInCompleteClassEPN4llvm5ValueEPKNS_13CXXRecordDeclES7_b\", \"clang::CodeGen::CodeGenFunction::GetAddressOfDirectBaseInCompleteClass(llvm::Value*, clang::CXXRecordDecl const*, clang::CXXRecordDecl const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21GetAddressOfBaseClassEPN4llvm5ValueEPKNS_13CXXRecordDeclEPKPKNS_16CXXBaseSpecifierESC_b\", \"clang::CodeGen::CodeGenFunction::GetAddressOfBaseClass(llvm::Value*, clang::CXXRecordDecl const*, clang::CXXBaseSpecifier const* const*, clang::CXXBaseSpecifier const* const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25GetVirtualBaseClassOffsetEPN4llvm5ValueEPKNS_13CXXRecordDeclES7_\", \"clang::CodeGen::CodeGenFunction::GetVirtualBaseClassOffset(llvm::Value*, clang::CXXRecordDecl const*, clang::CXXRecordDecl const*)\"},\n    {\"_Z31ApplyNonVirtualAndVirtualOffsetRN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueEyS5_\", \"ApplyNonVirtualAndVirtualOffset(clang::CodeGen::CodeGenFunction&, llvm::Value*, unsigned long long, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24GetAddressOfDerivedClassEPN4llvm5ValueEPKNS_13CXXRecordDeclEPKPKNS_16CXXBaseSpecifierESC_b\", \"clang::CodeGen::CodeGenFunction::GetAddressOfDerivedClass(llvm::Value*, clang::CXXRecordDecl const*, clang::CXXBaseSpecifier const* const*, clang::CXXBaseSpecifier const* const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitConstructorBodyERN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitConstructorBody(llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction30EmitDelegateCXXConstructorCallEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeERKN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitDelegateCXXConstructorCall(clang::CXXConstructorDecl const*, clang::CXXCtorType, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u> const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitCtorPrologueEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeERN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitCtorPrologue(clang::CXXConstructorDecl const*, clang::CXXCtorType, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24InitializeVTablePointersEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenFunction::InitializeVTablePointers(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitDestructorBodyERN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitDestructorBody(llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EnterDtorCleanupsEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeE\", \"clang::CodeGen::CodeGenFunction::EnterDtorCleanups(clang::CXXDestructorDecl const*, clang::CXXDtorType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitCXXDestructorCallEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeEbPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::EmitCXXDestructorCall(clang::CXXDestructorDecl const*, clang::CXXDtorType, bool, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitCXXAggrConstructorCallEPKNS_18CXXConstructorDeclEPKNS_17ConstantArrayTypeEPN4llvm5ValueENS_17ConstExprIteratorESB_b\", \"clang::CodeGen::CodeGenFunction::EmitCXXAggrConstructorCall(clang::CXXConstructorDecl const*, clang::ConstantArrayType const*, llvm::Value*, clang::ConstExprIterator, clang::ConstExprIterator, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitCXXAggrConstructorCallEPKNS_18CXXConstructorDeclEPN4llvm5ValueES7_NS_17ConstExprIteratorES8_b\", \"clang::CodeGen::CodeGenFunction::EmitCXXAggrConstructorCall(clang::CXXConstructorDecl const*, llvm::Value*, llvm::Value*, clang::ConstExprIterator, clang::ConstExprIterator, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitCXXConstructorCallEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeEbPN4llvm5ValueENS_17ConstExprIteratorES9_\", \"clang::CodeGen::CodeGenFunction::EmitCXXConstructorCall(clang::CXXConstructorDecl const*, clang::CXXCtorType, bool, llvm::Value*, clang::ConstExprIterator, clang::ConstExprIterator)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitCXXAggrDestructorCallEPKNS_17CXXDestructorDeclEPKNS_9ArrayTypeEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::EmitCXXAggrDestructorCall(clang::CXXDestructorDecl const*, clang::ArrayType const*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitCXXAggrDestructorCallEPKNS_17CXXDestructorDeclEPN4llvm5ValueES7_\", \"clang::CodeGen::CodeGenFunction::EmitCXXAggrDestructorCall(clang::CXXDestructorDecl const*, llvm::Value*, llvm::Value*)\"},\n    {\"_Z15GetVTTParameterRN5clang7CodeGen15CodeGenFunctionENS0_10GlobalDeclEb\", \"GetVTTParameter(clang::CodeGen::CodeGenFunction&, clang::CodeGen::GlobalDecl, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction30EmitSynthesizedCXXCopyCtorCallEPKNS_18CXXConstructorDeclEPN4llvm5ValueES7_NS_17ConstExprIteratorES8_\", \"clang::CodeGen::CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(clang::CXXConstructorDecl const*, llvm::Value*, llvm::Value*, clang::ConstExprIterator, clang::ConstExprIterator)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21PushDestructorCleanupEPKNS_17CXXDestructorDeclEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::PushDestructorCleanup(clang::CXXDestructorDecl const*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21PushDestructorCleanupENS_8QualTypeEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::PushDestructorCleanup(clang::QualType, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12GetVTablePtrEPN4llvm5ValueEPKNS2_4TypeE\", \"clang::CodeGen::CodeGenFunction::GetVTablePtr(llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23InitializeVTablePointerENS0_13BaseSubobjectEPKNS_13CXXRecordDeclEyPN4llvm8ConstantES5_\", \"clang::CodeGen::CodeGenFunction::InitializeVTablePointer(clang::CodeGen::BaseSubobject, clang::CXXRecordDecl const*, unsigned long long, llvm::Constant*, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24InitializeVTablePointersENS0_13BaseSubobjectEPKNS_13CXXRecordDeclEybPN4llvm8ConstantES5_RNS6_11SmallPtrSetIS5_Lj4EEE\", \"clang::CodeGen::CodeGenFunction::InitializeVTablePointers(clang::CodeGen::BaseSubobject, clang::CXXRecordDecl const*, unsigned long long, bool, llvm::Constant*, clang::CXXRecordDecl const*, llvm::SmallPtrSet<clang::CXXRecordDecl const*, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_113CallLocalDtorD1Ev\", \"(anonymous namespace)::CallLocalDtor::~CallLocalDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallLocalDtorD0Ev\", \"(anonymous namespace)::CallLocalDtor::~CallLocalDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallLocalDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallLocalDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_113CallFieldDtorD1Ev\", \"(anonymous namespace)::CallFieldDtor::~CallFieldDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallFieldDtorD0Ev\", \"(anonymous namespace)::CallFieldDtor::~CallFieldDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallFieldDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallFieldDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_118CallArrayFieldDtorD1Ev\", \"(anonymous namespace)::CallArrayFieldDtor::~CallArrayFieldDtor()\"},\n    {\"_ZN12_GLOBAL__N_118CallArrayFieldDtorD0Ev\", \"(anonymous namespace)::CallArrayFieldDtor::~CallArrayFieldDtor()\"},\n    {\"_ZN12_GLOBAL__N_118CallArrayFieldDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallArrayFieldDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CallDtorDeleteD1Ev\", \"(anonymous namespace)::CallDtorDelete::~CallDtorDelete()\"},\n    {\"_ZN12_GLOBAL__N_114CallDtorDeleteD0Ev\", \"(anonymous namespace)::CallDtorDelete::~CallDtorDelete()\"},\n    {\"_ZN12_GLOBAL__N_114CallDtorDelete4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallDtorDelete::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_112CallBaseDtorD1Ev\", \"(anonymous namespace)::CallBaseDtor::~CallBaseDtor()\"},\n    {\"_ZN12_GLOBAL__N_112CallBaseDtorD0Ev\", \"(anonymous namespace)::CallBaseDtor::~CallBaseDtor()\"},\n    {\"_ZN12_GLOBAL__N_112CallBaseDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallBaseDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_Z24EmitAggMemberInitializerRN5clang7CodeGen15CodeGenFunctionENS0_6LValueEPN4llvm5ValueEPNS_18CXXCtorInitializerENS_8QualTypeEj\", \"EmitAggMemberInitializer(clang::CodeGen::CodeGenFunction&, clang::CodeGen::LValue, llvm::Value*, clang::CXXCtorInitializer*, clang::QualType, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114CallMemberDtorD1Ev\", \"(anonymous namespace)::CallMemberDtor::~CallMemberDtor()\"},\n    {\"_ZN12_GLOBAL__N_114CallMemberDtorD0Ev\", \"(anonymous namespace)::CallMemberDtor::~CallMemberDtor()\"},\n    {\"_ZN12_GLOBAL__N_114CallMemberDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallMemberDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_121DynamicThisUseCheckerEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::DynamicThisUseChecker, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang20EvaluatedExprVisitorIN12_GLOBAL__N_121DynamicThisUseCheckerEE9VisitStmtEPNS_4StmtE\", \"clang::EvaluatedExprVisitor<(anonymous namespace)::DynamicThisUseChecker>::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE18CreateConstGEP1_64EPNS_5ValueEyRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstGEP1_64(llvm::Value*, unsigned long long, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE26CreateConstInBoundsGEP2_64EPNS_5ValueEyyRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstInBoundsGEP2_64(llvm::Value*, unsigned long long, unsigned long long, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15DominatingValueINS0_6RValueEE10saved_type11needsSavingES2_\", \"clang::CodeGen::DominatingValue<clang::CodeGen::RValue>::saved_type::needsSaving(clang::CodeGen::RValue)\"},\n    {\"_ZN5clang7CodeGen15DominatingValueINS0_6RValueEE10saved_type4saveERNS0_15CodeGenFunctionES2_\", \"clang::CodeGen::DominatingValue<clang::CodeGen::RValue>::saved_type::save(clang::CodeGen::CodeGenFunction&, clang::CodeGen::RValue)\"},\n    {\"_ZN5clang7CodeGen15DominatingValueINS0_6RValueEE10saved_type7restoreERNS0_15CodeGenFunctionE\", \"clang::CodeGen::DominatingValue<clang::CodeGen::RValue>::saved_type::restore(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack8allocateEm\", \"clang::CodeGen::EHScopeStack::allocate(unsigned long)\"},\n    {\"_ZNK5clang7CodeGen12EHScopeStack21getEnclosingEHCleanupENS1_8iteratorE\", \"clang::CodeGen::EHScopeStack::getEnclosingEHCleanup(clang::CodeGen::EHScopeStack::iterator) const\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack11pushCleanupENS0_11CleanupKindEm\", \"clang::CodeGen::EHScopeStack::pushCleanup(clang::CodeGen::CleanupKind, unsigned long)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack10popCleanupEv\", \"clang::CodeGen::EHScopeStack::popCleanup()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack13popNullFixupsEv\", \"clang::CodeGen::EHScopeStack::popNullFixups()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack10pushFilterEj\", \"clang::CodeGen::EHScopeStack::pushFilter(unsigned int)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack9popFilterEv\", \"clang::CodeGen::EHScopeStack::popFilter()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack9pushCatchEj\", \"clang::CodeGen::EHScopeStack::pushCatch(unsigned int)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack13pushTerminateEv\", \"clang::CodeGen::EHScopeStack::pushTerminate()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19initFullExprCleanupEv\", \"clang::CodeGen::CodeGenFunction::initFullExprCleanup()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack7CleanupD0Ev\", \"clang::CodeGen::EHScopeStack::Cleanup::~Cleanup()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack7CleanupD1Ev\", \"clang::CodeGen::EHScopeStack::Cleanup::~Cleanup()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack7CleanupD2Ev\", \"clang::CodeGen::EHScopeStack::Cleanup::~Cleanup()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19ResolveBranchFixupsEPN4llvm10BasicBlockE\", \"clang::CodeGen::CodeGenFunction::ResolveBranchFixups(llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16PopCleanupBlocksENS0_12EHScopeStack15stable_iteratorE\", \"clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15PopCleanupBlockEb\", \"clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool)\"},\n    {\"_Z29ForwardPrebranchedFallthroughPN4llvm10BasicBlockES1_S1_\", \"ForwardPrebranchedFallthrough(llvm::BasicBlock*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_Z20SimplifyCleanupEntryRN5clang7CodeGen15CodeGenFunctionEPN4llvm10BasicBlockE\", \"SimplifyCleanupEntry(clang::CodeGen::CodeGenFunction&, llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20getEHCleanupDestSlotEv\", \"clang::CodeGen::CodeGenFunction::getEHCleanupDestSlot()\"},\n    {\"_Z11EmitCleanupRN5clang7CodeGen15CodeGenFunctionEPNS0_12EHScopeStack7CleanupEbPN4llvm5ValueE\", \"EmitCleanup(clang::CodeGen::CodeGenFunction&, clang::CodeGen::EHScopeStack::Cleanup*, bool, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24getNormalCleanupDestSlotEv\", \"clang::CodeGen::CodeGenFunction::getNormalCleanupDestSlot()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitBranchThroughCleanupENS1_8JumpDestE\", \"clang::CodeGen::CodeGenFunction::EmitBranchThroughCleanup(clang::CodeGen::CodeGenFunction::JumpDest)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitBranchThroughEHCleanupENS1_10UnwindDestE\", \"clang::CodeGen::CodeGenFunction::EmitBranchThroughEHCleanup(clang::CodeGen::CodeGenFunction::UnwindDest)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20ActivateCleanupBlockENS0_12EHScopeStack15stable_iteratorE\", \"clang::CodeGen::CodeGenFunction::ActivateCleanupBlock(clang::CodeGen::EHScopeStack::stable_iterator)\"},\n    {\"_Z27SetupCleanupBlockActivationRN5clang7CodeGen15CodeGenFunctionENS0_12EHScopeStack15stable_iteratorE15ForActivation_t\", \"SetupCleanupBlockActivation(clang::CodeGen::CodeGenFunction&, clang::CodeGen::EHScopeStack::stable_iterator, ForActivation_t)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22DeactivateCleanupBlockENS0_12EHScopeStack15stable_iteratorE\", \"clang::CodeGen::CodeGenFunction::DeactivateCleanupBlock(clang::CodeGen::EHScopeStack::stable_iterator)\"},\n    {\"_ZN5clang7CodeGen14EHCleanupScope14addBranchAfterEPN4llvm11ConstantIntEPNS2_10BasicBlockE\", \"clang::CodeGen::EHCleanupScope::addBranchAfter(llvm::ConstantInt*, llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen14EHCleanupScope16addEHBranchAfterEPN4llvm11ConstantIntEPNS2_10BasicBlockE\", \"clang::CodeGen::EHCleanupScope::addEHBranchAfter(llvm::ConstantInt*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7CodeGen11BranchFixupELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeGen::BranchFixup, false>::grow(unsigned long)\"},\n    {\"_ZN5clang7CodeGen14EHCleanupScopeD2Ev\", \"clang::CodeGen::EHCleanupScope::~EHCleanupScope()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfoC1ERNS0_13CodeGenModuleE\", \"clang::CodeGen::CGDebugInfo::CGDebugInfo(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfoC2ERNS0_13CodeGenModuleE\", \"clang::CodeGen::CGDebugInfo::CGDebugInfo(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17CreateCompileUnitEv\", \"clang::CodeGen::CGDebugInfo::CreateCompileUnit()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfoD1Ev\", \"clang::CodeGen::CGDebugInfo::~CGDebugInfo()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfoD2Ev\", \"clang::CodeGen::CGDebugInfo::~CGDebugInfo()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo11setLocationENS_14SourceLocationE\", \"clang::CodeGen::CGDebugInfo::setLocation(clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo20getContextDescriptorEPKNS_4DeclE\", \"clang::CodeGen::CGDebugInfo::getContextDescriptor(clang::Decl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo20getOrCreateNameSpaceEPKNS_13NamespaceDeclE\", \"clang::CodeGen::CGDebugInfo::getOrCreateNameSpace(clang::NamespaceDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15getOrCreateTypeENS_8QualTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::getOrCreateType(clang::QualType, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo19getOrCreateMainFileEv\", \"clang::CodeGen::CGDebugInfo::getOrCreateMainFile()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15getFunctionNameEPKNS_12FunctionDeclE\", \"clang::CodeGen::CGDebugInfo::getFunctionName(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17getObjCMethodNameEPKNS_14ObjCMethodDeclE\", \"clang::CodeGen::CGDebugInfo::getObjCMethodName(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo12getClassNameEPNS_10RecordDeclE\", \"clang::CodeGen::CGDebugInfo::getClassName(clang::RecordDecl*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15getOrCreateFileENS_14SourceLocationE\", \"clang::CodeGen::CGDebugInfo::getOrCreateFile(clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17getCurrentDirnameEv\", \"clang::CodeGen::CGDebugInfo::getCurrentDirname()\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo13getLineNumberENS_14SourceLocationE\", \"clang::CodeGen::CGDebugInfo::getLineNumber(clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15getColumnNumberENS_14SourceLocationE\", \"clang::CodeGen::CGDebugInfo::getColumnNumber(clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_11BuiltinTypeE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::BuiltinType const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_11ComplexTypeE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::ComplexType const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo19CreateQualifiedTypeENS_8QualTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateQualifiedType(clang::QualType, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_21ObjCObjectPointerTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::ObjCObjectPointerType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo21CreatePointerLikeTypeEjPKNS_4TypeENS_8QualTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreatePointerLikeType(unsigned int, clang::Type const*, clang::QualType, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_11PointerTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::PointerType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17CreatePointeeTypeENS_8QualTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreatePointeeType(clang::QualType, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_16BlockPointerTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::BlockPointerType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo16CreateMemberTypeEN4llvm6DIFileENS_8QualTypeENS2_9StringRefEPy\", \"clang::CodeGen::CGDebugInfo::CreateMemberType(llvm::DIFile, clang::QualType, llvm::StringRef, unsigned long long*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_11TypedefTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::TypedefType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_12FunctionTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::FunctionType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo19CollectRecordFieldsEPKNS_10RecordDeclEN4llvm6DIFileERNS5_15SmallVectorImplIPNS5_5ValueEEE\", \"clang::CodeGen::CGDebugInfo::CollectRecordFields(clang::RecordDecl const*, llvm::DIFile, llvm::SmallVectorImpl<llvm::Value*>&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo21getOrCreateMethodTypeEPKNS_13CXXMethodDeclEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::getOrCreateMethodType(clang::CXXMethodDecl const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo23CreateCXXMemberFunctionEPKNS_13CXXMethodDeclEN4llvm6DIFileENS5_6DITypeE\", \"clang::CodeGen::CGDebugInfo::CreateCXXMemberFunction(clang::CXXMethodDecl const*, llvm::DIFile, llvm::DIType)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo25CollectCXXMemberFunctionsEPKNS_13CXXRecordDeclEN4llvm6DIFileERNS5_15SmallVectorImplIPNS5_5ValueEEENS5_6DITypeE\", \"clang::CodeGen::CGDebugInfo::CollectCXXMemberFunctions(clang::CXXRecordDecl const*, llvm::DIFile, llvm::SmallVectorImpl<llvm::Value*>&, llvm::DIType)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17CollectCXXFriendsEPKNS_13CXXRecordDeclEN4llvm6DIFileERNS5_15SmallVectorImplIPNS5_5ValueEEENS5_6DITypeE\", \"clang::CodeGen::CGDebugInfo::CollectCXXFriends(clang::CXXRecordDecl const*, llvm::DIFile, llvm::SmallVectorImpl<llvm::Value*>&, llvm::DIType)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15CollectCXXBasesEPKNS_13CXXRecordDeclEN4llvm6DIFileERNS5_15SmallVectorImplIPNS5_5ValueEEENS5_6DITypeE\", \"clang::CodeGen::CGDebugInfo::CollectCXXBases(clang::CXXRecordDecl const*, llvm::DIFile, llvm::SmallVectorImpl<llvm::Value*>&, llvm::DIType)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo24getOrCreateVTablePtrTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo13getVTableNameEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CGDebugInfo::getVTableName(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17CollectVTableInfoEPKNS_13CXXRecordDeclEN4llvm6DIFileERNS5_15SmallVectorImplIPNS5_5ValueEEE\", \"clang::CodeGen::CGDebugInfo::CollectVTableInfo(clang::CXXRecordDecl const*, llvm::DIFile, llvm::SmallVectorImpl<llvm::Value*>&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo21getOrCreateRecordTypeENS_8QualTypeENS_14SourceLocationE\", \"clang::CodeGen::CGDebugInfo::getOrCreateRecordType(clang::QualType, clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_10RecordTypeE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::RecordType const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_14ObjCObjectTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::ObjCObjectType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_17ObjCInterfaceTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::ObjCInterfaceType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_7TagTypeE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::TagType const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo14CreateEnumTypeEPKNS_8EnumDeclE\", \"clang::CodeGen::CGDebugInfo::CreateEnumType(clang::EnumDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_10VectorTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::VectorType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_9ArrayTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::ArrayType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_19LValueReferenceTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::LValueReferenceType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_19RValueReferenceTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::RValueReferenceType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo10CreateTypeEPKNS_17MemberPointerTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateType(clang::MemberPointerType const*, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo14CreateTypeNodeENS_8QualTypeEN4llvm6DIFileE\", \"clang::CodeGen::CGDebugInfo::CreateTypeNode(clang::QualType, llvm::DIFile)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo17EmitFunctionStartENS0_10GlobalDeclENS_8QualTypeEPN4llvm8FunctionERNS4_9IRBuilderILb0ENS4_14ConstantFolderENS4_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitFunctionStart(clang::CodeGen::GlobalDecl, clang::QualType, llvm::Function*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo13EmitStopPointERN4llvm9IRBuilderILb0ENS2_14ConstantFolderENS2_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitStopPoint(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo25UpdateLineDirectiveRegionERN4llvm9IRBuilderILb0ENS2_14ConstantFolderENS2_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::UpdateLineDirectiveRegion(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15EmitRegionStartERN4llvm9IRBuilderILb0ENS2_14ConstantFolderENS2_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitRegionStart(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo13EmitRegionEndERN4llvm9IRBuilderILb0ENS2_14ConstantFolderENS2_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitRegionEnd(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo15EmitFunctionEndERN4llvm9IRBuilderILb0ENS2_14ConstantFolderENS2_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitFunctionEnd(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo28EmitTypeForVarWithBlocksAttrEPKNS_9ValueDeclEPy\", \"clang::CodeGen::CGDebugInfo::EmitTypeForVarWithBlocksAttr(clang::ValueDecl const*, unsigned long long*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo11EmitDeclareEPKNS_7VarDeclEjPN4llvm5ValueERNS5_9IRBuilderILb0ENS5_14ConstantFolderENS5_24IRBuilderDefaultInserterILb0EEEEEb\", \"clang::CodeGen::CGDebugInfo::EmitDeclare(clang::VarDecl const*, unsigned int, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, bool)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo11EmitDeclareEPKNS_7VarDeclEjPN4llvm5ValueERNS5_9IRBuilderILb0ENS5_14ConstantFolderENS5_24IRBuilderDefaultInserterILb0EEEEERKNS0_11CGBlockInfoE\", \"clang::CodeGen::CGDebugInfo::EmitDeclare(clang::VarDecl const*, unsigned int, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo25EmitDeclareOfAutoVariableEPKNS_7VarDeclEPN4llvm5ValueERNS5_9IRBuilderILb0ENS5_14ConstantFolderENS5_24IRBuilderDefaultInserterILb0EEEEE\", \"clang::CodeGen::CGDebugInfo::EmitDeclareOfAutoVariable(clang::VarDecl const*, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo33EmitDeclareOfBlockDeclRefVariableEPKNS_7VarDeclEPN4llvm5ValueERNS5_9IRBuilderILb0ENS5_14ConstantFolderENS5_24IRBuilderDefaultInserterILb0EEEEERKNS0_11CGBlockInfoE\", \"clang::CodeGen::CGDebugInfo::EmitDeclareOfBlockDeclRefVariable(clang::VarDecl const*, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo24EmitDeclareOfArgVariableEPKNS_7VarDeclEPN4llvm5ValueERNS5_9IRBuilderILb0ENS5_14ConstantFolderENS5_24IRBuilderDefaultInserterILb0EEEEEb\", \"clang::CodeGen::CGDebugInfo::EmitDeclareOfArgVariable(clang::VarDecl const*, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, bool)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo18EmitGlobalVariableEPN4llvm14GlobalVariableEPKNS_7VarDeclE\", \"clang::CodeGen::CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable*, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo18EmitGlobalVariableEPN4llvm14GlobalVariableEPNS_17ObjCInterfaceDeclE\", \"clang::CodeGen::CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang7CodeGen11CGDebugInfo18EmitGlobalVariableEPKNS_9ValueDeclEPN4llvm8ConstantE\", \"clang::CodeGen::CGDebugInfo::EmitGlobalVariable(clang::ValueDecl const*, llvm::Constant*)\"},\n    {\"_ZNK5clang15ASTRecordLayout24getBaseClassOffsetInBitsEPKNS_13CXXRecordDeclE\", \"clang::ASTRecordLayout::getBaseClassOffsetInBits(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13NamespaceDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::NamespaceDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::NamespaceDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::FindAndConstruct(clang::NamespaceDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13NamespaceDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::NamespaceDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::NamespaceDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::InsertIntoBucket(clang::NamespaceDecl const* const&, llvm::WeakVH const&, std::pair<clang::NamespaceDecl const*, llvm::WeakVH>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13NamespaceDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::NamespaceDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::NamespaceDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::Decl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::FindAndConstruct(clang::Decl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::Decl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::InsertIntoBucket(clang::Decl const* const&, llvm::WeakVH const&, std::pair<clang::Decl const*, llvm::WeakVH>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm10TrackingVHINS0_6MDNodeEEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::TrackingVH<llvm::MDNode>, std::allocator<llvm::TrackingVH<llvm::MDNode> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::TrackingVH<llvm::MDNode>*, std::vector<llvm::TrackingVH<llvm::MDNode>, std::allocator<llvm::TrackingVH<llvm::MDNode> > > >, llvm::TrackingVH<llvm::MDNode> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang12FunctionDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::FunctionDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::FunctionDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::FindAndConstruct(clang::FunctionDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang12FunctionDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::FunctionDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::FunctionDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::InsertIntoBucket(clang::FunctionDecl const* const&, llvm::WeakVH const&, std::pair<clang::FunctionDecl const*, llvm::WeakVH>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang12FunctionDeclENS_6WeakVHENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::FunctionDecl const*, llvm::WeakVH, llvm::DenseMapInfo<clang::FunctionDecl const*>, llvm::DenseMapInfo<llvm::WeakVH> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPvNS_6WeakVHENS_12DenseMapInfoIS1_EENS3_IS2_EEE16FindAndConstructERKS1_\", \"llvm::DenseMap<void*, llvm::WeakVH, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<llvm::WeakVH> >::FindAndConstruct(void* const&)\"},\n    {\"_ZN4llvm8DenseMapIPvNS_6WeakVHENS_12DenseMapInfoIS1_EENS3_IS2_EEE16InsertIntoBucketERKS1_RKS2_PSt4pairIS1_S2_E\", \"llvm::DenseMap<void*, llvm::WeakVH, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<llvm::WeakVH> >::InsertIntoBucket(void* const&, llvm::WeakVH const&, std::pair<void*, llvm::WeakVH>*)\"},\n    {\"_ZN4llvm8DenseMapIPvNS_6WeakVHENS_12DenseMapInfoIS1_EENS3_IS2_EEE4growEj\", \"llvm::DenseMap<void*, llvm::WeakVH, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<llvm::WeakVH> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKcNS_6WeakVHENS_12DenseMapInfoIS2_EENS4_IS3_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<char const*, llvm::WeakVH, llvm::DenseMapInfo<char const*>, llvm::DenseMapInfo<llvm::WeakVH> >::FindAndConstruct(char const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKcNS_6WeakVHENS_12DenseMapInfoIS2_EENS4_IS3_EEE16InsertIntoBucketERKS2_RKS3_PSt4pairIS2_S3_E\", \"llvm::DenseMap<char const*, llvm::WeakVH, llvm::DenseMapInfo<char const*>, llvm::DenseMapInfo<llvm::WeakVH> >::InsertIntoBucket(char const* const&, llvm::WeakVH const&, std::pair<char const*, llvm::WeakVH>*)\"},\n    {\"_ZN4llvm8DenseMapIPKcNS_6WeakVHENS_12DenseMapInfoIS2_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<char const*, llvm::WeakVH, llvm::DenseMapInfo<char const*>, llvm::DenseMapInfo<llvm::WeakVH> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction8EmitDeclERKNS_4DeclE\", \"clang::CodeGen::CodeGenFunction::EmitDecl(clang::Decl const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitVarDeclERKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::EmitVarDecl(clang::VarDecl const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitAutoVarDeclERKNS_7VarDeclEPFvRS1_S4_PN4llvm5ValueEE\", \"clang::CodeGen::CodeGenFunction::EmitAutoVarDecl(clang::VarDecl const&, void (*)(clang::CodeGen::CodeGenFunction&, clang::VarDecl const&, llvm::Value*))\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitStaticVarDeclERKNS_7VarDeclEN4llvm11GlobalValue12LinkageTypesE\", \"clang::CodeGen::CodeGenFunction::EmitStaticVarDecl(clang::VarDecl const&, llvm::GlobalValue::LinkageTypes)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19CreateStaticVarDeclERKNS_7VarDeclEPKcN4llvm11GlobalValue12LinkageTypesE\", \"clang::CodeGen::CodeGenFunction::CreateStaticVarDecl(clang::VarDecl const&, char const*, llvm::GlobalValue::LinkageTypes)\"},\n    {\"_Z17GetStaticDeclNameRN5clang7CodeGen15CodeGenFunctionERKNS_7VarDeclEPKc\", \"GetStaticDeclName(clang::CodeGen::CodeGenFunction&, clang::VarDecl const&, char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29AddInitializerToStaticVarDeclERKNS_7VarDeclEPN4llvm14GlobalVariableE\", \"clang::CodeGen::CodeGenFunction::AddInitializerToStaticVarDecl(clang::VarDecl const&, llvm::GlobalVariable*)\"},\n    {\"_ZNK5clang7CodeGen15CodeGenFunction22getByRefValueLLVMFieldEPKNS_9ValueDeclE\", \"clang::CodeGen::CodeGenFunction::getByRefValueLLVMField(clang::ValueDecl const*) const\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22BuildBlockByrefAddressEPN4llvm5ValueEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::BuildBlockByrefAddress(llvm::Value*, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14BuildByRefTypeEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::BuildByRefType(clang::VarDecl const*)\"},\n    {\"_Z28emitStoresForInitAfterMemsetPN4llvm8ConstantEPNS_5ValueERNS_9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEEE\", \"emitStoresForInitAfterMemset(llvm::Constant*, llvm::Value*, llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitParmDeclERKNS_7VarDeclEPN4llvm5ValueEb\", \"clang::CodeGen::CodeGenFunction::EmitParmDecl(clang::VarDecl const&, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_116CallBlockReleaseD1Ev\", \"(anonymous namespace)::CallBlockRelease::~CallBlockRelease()\"},\n    {\"_ZN12_GLOBAL__N_116CallBlockReleaseD0Ev\", \"(anonymous namespace)::CallBlockRelease::~CallBlockRelease()\"},\n    {\"_ZN12_GLOBAL__N_116CallBlockRelease4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallBlockRelease::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_119CallCleanupFunctionD1Ev\", \"(anonymous namespace)::CallCleanupFunction::~CallCleanupFunction()\"},\n    {\"_ZN12_GLOBAL__N_119CallCleanupFunctionD0Ev\", \"(anonymous namespace)::CallCleanupFunction::~CallCleanupFunction()\"},\n    {\"_ZN12_GLOBAL__N_119CallCleanupFunction4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallCleanupFunction::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111CallVarDtorD1Ev\", \"(anonymous namespace)::CallVarDtor::~CallVarDtor()\"},\n    {\"_ZN12_GLOBAL__N_111CallVarDtorD0Ev\", \"(anonymous namespace)::CallVarDtor::~CallVarDtor()\"},\n    {\"_ZN12_GLOBAL__N_111CallVarDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallVarDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_113CallArrayDtorD1Ev\", \"(anonymous namespace)::CallArrayDtor::~CallArrayDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallArrayDtorD0Ev\", \"(anonymous namespace)::CallArrayDtor::~CallArrayDtor()\"},\n    {\"_ZN12_GLOBAL__N_113CallArrayDtor4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallArrayDtor::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_116CallStackRestoreD1Ev\", \"(anonymous namespace)::CallStackRestore::~CallStackRestore()\"},\n    {\"_ZN12_GLOBAL__N_116CallStackRestoreD0Ev\", \"(anonymous namespace)::CallStackRestore::~CallStackRestore()\"},\n    {\"_ZN12_GLOBAL__N_116CallStackRestore4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallStackRestore::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_Z35canEmitInitWithFewStoresAfterMemsetPN4llvm8ConstantERj\", \"canEmitInitWithFewStoresAfterMemset(llvm::Constant*, unsigned int&)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_11CleanupAttrEEEPT_v\", \"clang::CleanupAttr* clang::Decl::getAttr<clang::CleanupAttr>() const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9ValueDeclESt4pairIPKNS_4TypeEjENS_12DenseMapInfoIS4_EENSA_IS9_EEE16InsertIntoBucketERKS4_RKS9_PS5_IS4_S9_E\", \"llvm::DenseMap<clang::ValueDecl const*, std::pair<llvm::Type const*, unsigned int>, llvm::DenseMapInfo<clang::ValueDecl const*>, llvm::DenseMapInfo<std::pair<llvm::Type const*, unsigned int> > >::InsertIntoBucket(clang::ValueDecl const* const&, std::pair<llvm::Type const*, unsigned int> const&, std::pair<clang::ValueDecl const*, std::pair<llvm::Type const*, unsigned int> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9ValueDeclESt4pairIPKNS_4TypeEjENS_12DenseMapInfoIS4_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::ValueDecl const*, std::pair<llvm::Type const*, unsigned int>, llvm::DenseMapInfo<clang::ValueDecl const*>, llvm::DenseMapInfo<std::pair<llvm::Type const*, unsigned int> > >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitCXXGlobalVarDeclInitERKNS_7VarDeclEPN4llvm8ConstantE\", \"clang::CodeGen::CodeGenFunction::EmitCXXGlobalVarDeclInit(clang::VarDecl const&, llvm::Constant*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29EmitCXXGlobalDtorRegistrationEPN4llvm8ConstantES4_\", \"clang::CodeGen::CodeGenFunction::EmitCXXGlobalDtorRegistration(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitCXXGuardedInitERKNS_7VarDeclEPN4llvm14GlobalVariableE\", \"clang::CodeGen::CodeGenFunction::EmitCXXGuardedInit(clang::VarDecl const&, llvm::GlobalVariable*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule28EmitCXXGlobalVarDeclInitFuncEPKNS_7VarDeclEPN4llvm14GlobalVariableE\", \"clang::CodeGen::CodeGenModule::EmitCXXGlobalVarDeclInitFunc(clang::VarDecl const*, llvm::GlobalVariable*)\"},\n    {\"_Z34CreateGlobalInitOrDestructFunctionRN5clang7CodeGen13CodeGenModuleEPKN4llvm12FunctionTypeENS3_9StringRefE\", \"CreateGlobalInitOrDestructFunction(clang::CodeGen::CodeGenModule&, llvm::FunctionType const*, llvm::StringRef)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction32GenerateCXXGlobalVarDeclInitFuncEPN4llvm8FunctionEPKNS_7VarDeclEPNS2_14GlobalVariableE\", \"clang::CodeGen::CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function*, clang::VarDecl const*, llvm::GlobalVariable*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21EmitCXXGlobalInitFuncEv\", \"clang::CodeGen::CodeGenModule::EmitCXXGlobalInitFunc()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25GenerateCXXGlobalInitFuncEPN4llvm8FunctionEPPNS2_8ConstantEj\", \"clang::CodeGen::CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function*, llvm::Constant**, unsigned int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21EmitCXXGlobalDtorFuncEv\", \"clang::CodeGen::CodeGenModule::EmitCXXGlobalDtorFunc()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25GenerateCXXGlobalDtorFuncEPN4llvm8FunctionERKSt6vectorISt4pairINS2_6WeakVHEPNS2_8ConstantEESaISA_EE\", \"clang::CodeGen::CodeGenFunction::GenerateCXXGlobalDtorFunc(llvm::Function*, std::vector<std::pair<llvm::WeakVH, llvm::Constant*>, std::allocator<std::pair<llvm::WeakVH, llvm::Constant*> > > const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction31GenerateCXXAggrDestructorHelperEPKNS_17CXXDestructorDeclEPKNS_9ArrayTypeEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::GenerateCXXAggrDestructorHelper(clang::CXXDestructorDecl const*, clang::ArrayType const*, llvm::Value*)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIN5clang7CodeGen16OrderGlobalInitsEPNS_8FunctionEEEEiPKvS9_\", \"int llvm::array_pod_sort_comparator<std::pair<clang::CodeGen::OrderGlobalInits, llvm::Function*> >(void const*, void const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule15AddCXXDtorEntryEPN4llvm8ConstantES4_\", \"clang::CodeGen::CodeGenModule::AddCXXDtorEntry(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_16InitPriorityAttrEEEPT_v\", \"clang::InitPriorityAttr* clang::Decl::getAttr<clang::InitPriorityAttr>() const\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCallEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIN5clang7CodeGen16OrderGlobalInitsEPNS_8FunctionEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::CodeGen::OrderGlobalInits, llvm::Function*>, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm6WeakVHEPNS1_8ConstantEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::WeakVH, llvm::Constant*>, std::allocator<std::pair<llvm::WeakVH, llvm::Constant*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::Constant*>*, std::vector<std::pair<llvm::WeakVH, llvm::Constant*>, std::allocator<std::pair<llvm::WeakVH, llvm::Constant*> > > >, std::pair<llvm::WeakVH, llvm::Constant*> const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm6WeakVHEPNS4_8ConstantEES9_EET0_T_SB_SA_\", \"std::pair<llvm::WeakVH, llvm::Constant*>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::WeakVH, llvm::Constant*>*, std::pair<llvm::WeakVH, llvm::Constant*>*>(std::pair<llvm::WeakVH, llvm::Constant*>*, std::pair<llvm::WeakVH, llvm::Constant*>*, std::pair<llvm::WeakVH, llvm::Constant*>*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26getUnwindResumeOrRethrowFnEv\", \"clang::CodeGen::CodeGenFunction::getUnwindResumeOrRethrowFn()\"},\n    {\"_ZN5clang7CodeGen13EHPersonality3getERKNS_11LangOptionsE\", \"clang::CodeGen::EHPersonality::get(clang::LangOptions const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19SimplifyPersonalityEv\", \"clang::CodeGen::CodeGenModule::SimplifyPersonality()\"},\n    {\"_Z25PersonalityHasOnlyCXXUsesPN4llvm8ConstantE\", \"PersonalityHasOnlyCXXUses(llvm::Constant*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16getExceptionSlotEv\", \"clang::CodeGen::CodeGenFunction::getExceptionSlot()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitCXXThrowExprEPKNS_12CXXThrowExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXThrowExpr(clang::CXXThrowExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitStartEHSpecEPKNS_4DeclE\", \"clang::CodeGen::CodeGenFunction::EmitStartEHSpec(clang::Decl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitEndEHSpecEPKNS_4DeclE\", \"clang::CodeGen::CodeGenFunction::EmitEndEHSpec(clang::Decl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitCXXTryStmtERKNS_10CXXTryStmtE\", \"clang::CodeGen::CodeGenFunction::EmitCXXTryStmt(clang::CXXTryStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EnterCXXTryStmtERKNS_10CXXTryStmtEb\", \"clang::CodeGen::CodeGenFunction::EnterCXXTryStmt(clang::CXXTryStmt const&, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14ExitCXXTryStmtERKNS_10CXXTryStmtEb\", \"clang::CodeGen::CodeGenFunction::ExitCXXTryStmt(clang::CXXTryStmt const&, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17getInvokeDestImplEv\", \"clang::CodeGen::CodeGenFunction::getInvokeDestImpl()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitLandingPadEv\", \"clang::CodeGen::CodeGenFunction::EmitLandingPad()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22getTerminateLandingPadEv\", \"clang::CodeGen::CodeGenFunction::getTerminateLandingPad()\"},\n    {\"_Z22getOpaquePersonalityFnRN5clang7CodeGen13CodeGenModuleERKNS0_13EHPersonalityE\", \"getOpaquePersonalityFn(clang::CodeGen::CodeGenModule&, clang::CodeGen::EHPersonality const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19getTerminateHandlerEv\", \"clang::CodeGen::CodeGenFunction::getTerminateHandler()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14getRethrowDestEv\", \"clang::CodeGen::CodeGenFunction::getRethrowDest()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EnterFinallyBlockEPKNS_4StmtEPN4llvm8ConstantES7_S7_\", \"clang::CodeGen::CodeGenFunction::EnterFinallyBlock(clang::Stmt const*, llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16ExitFinallyBlockERNS1_11FinallyInfoE\", \"clang::CodeGen::CodeGenFunction::ExitFinallyBlock(clang::CodeGen::CodeGenFunction::FinallyInfo&)\"},\n    {\"_Z14getTerminateFnRN5clang7CodeGen15CodeGenFunctionE\", \"getTerminateFn(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN12_GLOBAL__N_114PerformFinallyD1Ev\", \"(anonymous namespace)::PerformFinally::~PerformFinally()\"},\n    {\"_ZN12_GLOBAL__N_114PerformFinallyD0Ev\", \"(anonymous namespace)::PerformFinally::~PerformFinally()\"},\n    {\"_ZN12_GLOBAL__N_114PerformFinally4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::PerformFinally::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_122CallEndCatchForFinallyD1Ev\", \"(anonymous namespace)::CallEndCatchForFinally::~CallEndCatchForFinally()\"},\n    {\"_ZN12_GLOBAL__N_122CallEndCatchForFinallyD0Ev\", \"(anonymous namespace)::CallEndCatchForFinally::~CallEndCatchForFinally()\"},\n    {\"_ZN12_GLOBAL__N_122CallEndCatchForFinally4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallEndCatchForFinally::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111CallRethrowD1Ev\", \"(anonymous namespace)::CallRethrow::~CallRethrow()\"},\n    {\"_ZN12_GLOBAL__N_111CallRethrowD0Ev\", \"(anonymous namespace)::CallRethrow::~CallRethrow()\"},\n    {\"_ZN12_GLOBAL__N_111CallRethrow4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallRethrow::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_Z14CallBeginCatchRN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueEb\", \"CallBeginCatch(clang::CodeGen::CodeGenFunction&, llvm::Value*, bool)\"},\n    {\"_Z14InitCatchParamRN5clang7CodeGen15CodeGenFunctionERKNS_7VarDeclEPN4llvm5ValueE\", \"InitCatchParam(clang::CodeGen::CodeGenFunction&, clang::VarDecl const&, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_112CallEndCatchD1Ev\", \"(anonymous namespace)::CallEndCatch::~CallEndCatch()\"},\n    {\"_ZN12_GLOBAL__N_112CallEndCatchD0Ev\", \"(anonymous namespace)::CallEndCatch::~CallEndCatch()\"},\n    {\"_ZN12_GLOBAL__N_112CallEndCatch4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallEndCatch::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEED1Ev\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::~ConditionalCleanup1()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEED0Ev\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::~ConditionalCleanup1()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEE4EmitERNS0_15CodeGenFunctionEb\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_113FreeException4EmitERN5clang7CodeGen15CodeGenFunctionEbPN4llvm5ValueE\", \"(anonymous namespace)::FreeException::Emit(clang::CodeGen::CodeGenFunction&, bool, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEED1Ev\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::~UnconditionalCleanup1()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEED0Ev\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::~UnconditionalCleanup1()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEE4EmitERNS0_15CodeGenFunctionEb\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateInvokeEPNS_5ValueEPNS_10BasicBlockES8_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInvoke(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19getUnreachableBlockEv\", \"clang::CodeGen::CodeGenFunction::getUnreachableBlock()\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE13CreateInvoke3EPNS_5ValueEPNS_10BasicBlockES8_S6_S6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInvoke3(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7CodeGen12EHCatchScope7HandlerELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeGen::EHCatchScope::Handler, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEN5clang7CodeGen15CodeGenFunction10UnwindDestENS_12DenseMapInfoIS2_EENS7_IS6_EEE16InsertIntoBucketERKS2_RKS6_PSt4pairIS2_S6_E\", \"llvm::DenseMap<llvm::Value*, clang::CodeGen::CodeGenFunction::UnwindDest, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<clang::CodeGen::CodeGenFunction::UnwindDest> >::InsertIntoBucket(llvm::Value* const&, clang::CodeGen::CodeGenFunction::UnwindDest const&, std::pair<llvm::Value*, clang::CodeGen::CodeGenFunction::UnwindDest>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEN5clang7CodeGen15CodeGenFunction10UnwindDestENS_12DenseMapInfoIS2_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, clang::CodeGen::CodeGenFunction::UnwindDest, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<clang::CodeGen::CodeGenFunction::UnwindDest> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen19DominatingLLVMValue4saveERNS0_15CodeGenFunctionEPN4llvm5ValueE\", \"clang::CodeGen::DominatingLLVMValue::save(clang::CodeGen::CodeGenFunction&, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCastToVoidPtrEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::EmitCastToVoidPtr(llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16CreateTempAllocaEPKN4llvm4TypeERKNS2_5TwineE\", \"clang::CodeGen::CodeGenFunction::CreateTempAlloca(llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14InitTempAllocaEPN4llvm10AllocaInstEPNS2_5ValueE\", \"clang::CodeGen::CodeGenFunction::InitTempAlloca(llvm::AllocaInst*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12CreateIRTempENS_8QualTypeERKN4llvm5TwineE\", \"clang::CodeGen::CodeGenFunction::CreateIRTemp(clang::QualType, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13CreateMemTempENS_8QualTypeERKN4llvm5TwineE\", \"clang::CodeGen::CodeGenFunction::CreateMemTemp(clang::QualType, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EvaluateExprAsBoolEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EvaluateExprAsBool(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitIgnoredExprEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitAnyExprEPKNS_4ExprENS0_12AggValueSlotEb\", \"clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction10EmitLValueEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitAnyExprToTempEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitAnyExprToTemp(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitAnyExprToMemEPKNS_4ExprEPN4llvm5ValueEbb\", \"clang::CodeGen::CodeGenFunction::EmitAnyExprToMem(clang::Expr const*, llvm::Value*, bool, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitStoreThroughLValueENS0_6RValueENS0_6LValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(clang::CodeGen::RValue, clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitReferenceBindingToExprEPKNS_4ExprEPKNS_9NamedDeclE\", \"clang::CodeGen::CodeGenFunction::EmitReferenceBindingToExpr(clang::Expr const*, clang::NamedDecl const*)\"},\n    {\"_Z27EmitExprForReferenceBindingRN5clang7CodeGen15CodeGenFunctionEPKNS_4ExprERPN4llvm5ValueERPKNS_17CXXDestructorDeclEPKNS_9NamedDeclE\", \"EmitExprForReferenceBinding(clang::CodeGen::CodeGenFunction&, clang::Expr const*, llvm::Value*&, clang::CXXDestructorDecl const*&, clang::NamedDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18getAccessedFieldNoEjPKN4llvm8ConstantE\", \"clang::CodeGen::CodeGenFunction::getAccessedFieldNo(unsigned int, llvm::Constant const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction9EmitCheckEPN4llvm5ValueEj\", \"clang::CodeGen::CodeGenFunction::EmitCheck(llvm::Value*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction9getTrapBBEv\", \"clang::CodeGen::CodeGenFunction::getTrapBB()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitComplexPrePostIncDecEPKNS_13UnaryOperatorENS0_6LValueEbb\", \"clang::CodeGen::CodeGenFunction::EmitComplexPrePostIncDec(clang::UnaryOperator const*, clang::CodeGen::LValue, bool, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14GetUndefRValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::GetUndefRValue(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitUnsupportedRValueEPKNS_4ExprEPKc\", \"clang::CodeGen::CodeGenFunction::EmitUnsupportedRValue(clang::Expr const*, char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitUnsupportedLValueEPKNS_4ExprEPKc\", \"clang::CodeGen::CodeGenFunction::EmitUnsupportedLValue(clang::Expr const*, char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCheckedLValueEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitObjCSelectorLValueEPKNS_16ObjCSelectorExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCSelectorLValue(clang::ObjCSelectorExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitBinaryOperatorLValueEPKNS_14BinaryOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitBinaryOperatorLValue(clang::BinaryOperator const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitCallExprLValueEPKNS_8CallExprE\", \"clang::CodeGen::CodeGenFunction::EmitCallExprLValue(clang::CallExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitVAArgExprLValueEPKNS_9VAArgExprE\", \"clang::CodeGen::CodeGenFunction::EmitVAArgExprLValue(clang::VAArgExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitDeclRefLValueEPKNS_11DeclRefExprE\", \"clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(clang::DeclRefExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitPredefinedLValueEPKNS_14PredefinedExprE\", \"clang::CodeGen::CodeGenFunction::EmitPredefinedLValue(clang::PredefinedExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23EmitStringLiteralLValueEPKNS_13StringLiteralE\", \"clang::CodeGen::CodeGenFunction::EmitStringLiteralLValue(clang::StringLiteral const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitObjCEncodeExprLValueEPKNS_14ObjCEncodeExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCEncodeExprLValue(clang::ObjCEncodeExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitBlockDeclRefLValueEPKNS_16BlockDeclRefExprE\", \"clang::CodeGen::CodeGenFunction::EmitBlockDeclRefLValue(clang::BlockDeclRefExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitCXXConstructLValueEPKNS_16CXXConstructExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXConstructLValue(clang::CXXConstructExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitCXXBindTemporaryLValueEPKNS_20CXXBindTemporaryExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXBindTemporaryLValue(clang::CXXBindTemporaryExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction28EmitNullInitializationLValueEPKNS_22CXXScalarValueInitExprE\", \"clang::CodeGen::CodeGenFunction::EmitNullInitializationLValue(clang::CXXScalarValueInitExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitCXXTypeidLValueEPKNS_13CXXTypeidExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXTypeidLValue(clang::CXXTypeidExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitObjCMessageExprLValueEPKNS_15ObjCMessageExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCMessageExprLValue(clang::ObjCMessageExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitObjCIvarRefLValueEPKNS_15ObjCIvarRefExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCIvarRefLValue(clang::ObjCIvarRefExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitStmtExprLValueEPKNS_8StmtExprE\", \"clang::CodeGen::CodeGenFunction::EmitStmtExprLValue(clang::StmtExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitUnaryOpLValueEPKNS_13UnaryOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitUnaryOpLValue(clang::UnaryOperator const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitArraySubscriptExprEPKNS_18ArraySubscriptExprE\", \"clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(clang::ArraySubscriptExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitExtVectorElementExprEPKNS_20ExtVectorElementExprE\", \"clang::CodeGen::CodeGenFunction::EmitExtVectorElementExpr(clang::ExtVectorElementExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitMemberExprEPKNS_10MemberExprE\", \"clang::CodeGen::CodeGenFunction::EmitMemberExpr(clang::MemberExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitCompoundLiteralLValueEPKNS_19CompoundLiteralExprE\", \"clang::CodeGen::CodeGenFunction::EmitCompoundLiteralLValue(clang::CompoundLiteralExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29EmitConditionalOperatorLValueEPKNS_19ConditionalOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitConditionalOperatorLValue(clang::ConditionalOperator const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitCastLValueEPKNS_8CastExprE\", \"clang::CodeGen::CodeGenFunction::EmitCastLValue(clang::CastExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitLoadOfScalarEPN4llvm5ValueEbjNS_8QualTypeEPNS2_6MDNodeE\", \"clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(llvm::Value*, bool, unsigned int, clang::QualType, llvm::MDNode*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitFromMemoryEPN4llvm5ValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitFromMemory(llvm::Value*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitToMemoryEPN4llvm5ValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitToMemory(llvm::Value*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitStoreOfScalarEPN4llvm5ValueES4_bjNS_8QualTypeEPNS2_6MDNodeE\", \"clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(llvm::Value*, llvm::Value*, bool, unsigned int, clang::QualType, llvm::MDNode*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitLoadOfLValueENS0_6LValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction32EmitLoadOfExtVectorElementLValueENS0_6LValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitLoadOfExtVectorElementLValue(clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24EmitLoadOfBitfieldLValueENS0_6LValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitLoadOfBitfieldLValue(clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction40EmitStoreThroughExtVectorComponentLValueENS0_6RValueENS0_6LValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(clang::CodeGen::RValue, clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction30EmitStoreThroughBitfieldLValueENS0_6RValueENS0_6LValueENS_8QualTypeEPPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::EmitStoreThroughBitfieldLValue(clang::CodeGen::RValue, clang::CodeGen::LValue, clang::QualType, llvm::Value**)\"},\n    {\"_Z23EmitGlobalVarDeclLValueRN5clang7CodeGen15CodeGenFunctionEPKNS_4ExprEPKNS_7VarDeclE\", \"EmitGlobalVarDeclLValue(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::VarDecl const*)\"},\n    {\"_Z20setObjCGCLValueClassRKN5clang10ASTContextEPKNS_4ExprERNS_7CodeGen6LValueE\", \"setObjCGCLValueClass(clang::ASTContext const&, clang::Expr const*, clang::CodeGen::LValue&)\"},\n    {\"_Z22EmitFunctionDeclLValueRN5clang7CodeGen15CodeGenFunctionEPKNS_4ExprEPKNS_12FunctionDeclE\", \"EmitFunctionDeclLValue(clang::CodeGen::CodeGenFunction&, clang::Expr const*, clang::FunctionDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitLValueForFieldEPN4llvm5ValueEPKNS_9FieldDeclEj\", \"clang::CodeGen::CodeGenFunction::EmitLValueForField(llvm::Value*, clang::FieldDecl const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitLValueForBitfieldEPN4llvm5ValueEPKNS_9FieldDeclEj\", \"clang::CodeGen::CodeGenFunction::EmitLValueForBitfield(llvm::Value*, clang::FieldDecl const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction28EmitLValueForAnonRecordFieldEPN4llvm5ValueEPKNS_17IndirectFieldDeclEj\", \"clang::CodeGen::CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value*, clang::IndirectFieldDecl const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction32EmitLValueForFieldInitializationEPN4llvm5ValueEPKNS_9FieldDeclEj\", \"clang::CodeGen::CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value*, clang::FieldDecl const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitCallExprEPKNS_8CallExprENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction8EmitCallENS_8QualTypeEPN4llvm5ValueENS0_15ReturnValueSlotENS_17ConstExprIteratorES7_PKNS_4DeclE\", \"clang::CodeGen::CodeGenFunction::EmitCall(clang::QualType, llvm::Value*, clang::CodeGen::ReturnValueSlot, clang::ConstExprIterator, clang::ConstExprIterator, clang::Decl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction33EmitPointerToDataMemberBinaryExprEPKNS_14BinaryOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitPointerToDataMemberBinaryExpr(clang::BinaryOperator const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitIvarOffsetEPKNS_17ObjCInterfaceDeclEPKNS_12ObjCIvarDeclE\", \"clang::CodeGen::CodeGenFunction::EmitIvarOffset(clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitLValueForIvarENS_8QualTypeEPN4llvm5ValueEPKNS_12ObjCIvarDeclEj\", \"clang::CodeGen::CodeGenFunction::EmitLValueForIvar(clang::QualType, llvm::Value*, clang::ObjCIvarDecl const*, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_119SubobjectAdjustmentEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::SubobjectAdjustment>::push_back((anonymous namespace)::SubobjectAdjustment const&)\"},\n    {\"_Z24CreateReferenceTemporaryRN5clang7CodeGen15CodeGenFunctionENS_8QualTypeEPKNS_9NamedDeclE\", \"CreateReferenceTemporary(clang::CodeGen::CodeGenFunction&, clang::QualType, clang::NamedDecl const*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE17CreateInBoundsGEPIPPNS_5ValueEEES7_S7_T_S9_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInBoundsGEP<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitCallArgsINS_17FunctionProtoTypeEEEvRN4llvm11SmallVectorISt4pairINS0_6RValueENS_8QualTypeEELj16EEEPKT_NS_17ConstExprIteratorESF_\", \"void clang::CodeGen::CodeGenFunction::EmitCallArgs<clang::FunctionProtoType>(llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u>&, clang::FunctionProtoType const*, clang::ConstExprIterator, clang::ConstExprIterator)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprENS1_7CodeGen6LValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Expr const*, clang::CodeGen::LValue, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<clang::CodeGen::LValue> >::InsertIntoBucket(clang::Expr const* const&, clang::CodeGen::LValue const&, std::pair<clang::Expr const*, clang::CodeGen::LValue>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprENS1_7CodeGen6LValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Expr const*, clang::CodeGen::LValue, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<clang::CodeGen::LValue> >::grow(unsigned int)\"},\n    {\"_ZN4llvm11SmallVectorIPNS_8ConstantELj4EEC2EjRKS2_\", \"llvm::SmallVector<llvm::Constant*, 4u>::SmallVector(unsigned int, llvm::Constant* const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitAggExprEPKNS_4ExprENS0_12AggValueSlotEb\", \"clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_114AggExprEmitterEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::AggExprEmitter, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitAggExprToLValueEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitAggExprToLValue(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitAggregateCopyEPN4llvm5ValueES4_NS_8QualTypeEb\", \"clang::CodeGen::CodeGenFunction::EmitAggregateCopy(llvm::Value*, llvm::Value*, clang::QualType, bool)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter13VisitCallExprEPKN5clang8CallExprE\", \"(anonymous namespace)::AggExprEmitter::VisitCallExpr(clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter17EmitFinalDestCopyEPKN5clang4ExprENS1_7CodeGen6LValueEb\", \"(anonymous namespace)::AggExprEmitter::EmitFinalDestCopy(clang::Expr const*, clang::CodeGen::LValue, bool)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter10EmitGCMoveEPKN5clang4ExprENS1_7CodeGen6RValueE\", \"(anonymous namespace)::AggExprEmitter::EmitGCMove(clang::Expr const*, clang::CodeGen::RValue)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter26EmitInitializationToLValueEPN5clang4ExprENS1_7CodeGen6LValueENS1_8QualTypeE\", \"(anonymous namespace)::AggExprEmitter::EmitInitializationToLValue(clang::Expr*, clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter30EmitNullInitializationToLValueEN5clang7CodeGen6LValueENS1_8QualTypeE\", \"(anonymous namespace)::AggExprEmitter::EmitNullInitializationToLValue(clang::CodeGen::LValue, clang::QualType)\"},\n    {\"_Z12isSimpleZeroPKN5clang4ExprERNS_7CodeGen15CodeGenFunctionE\", \"isSimpleZero(clang::Expr const*, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN12_GLOBAL__N_114AggExprEmitter13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::AggExprEmitter::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_Z24GetNumNonZeroBytesInInitPKN5clang4ExprERNS_7CodeGen15CodeGenFunctionE\", \"GetNumNonZeroBytesInInit(clang::Expr const*, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCXXMemberCallEPKNS_13CXXMethodDeclEPN4llvm5ValueENS0_15ReturnValueSlotES7_S7_NS_17ConstExprIteratorES9_\", \"clang::CodeGen::CodeGenFunction::EmitCXXMemberCall(clang::CXXMethodDecl const*, llvm::Value*, clang::CodeGen::ReturnValueSlot, llvm::Value*, llvm::Value*, clang::ConstExprIterator, clang::ConstExprIterator)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitCXXMemberCallExprEPKNS_17CXXMemberCallExprENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCXXMemberCallExpr(clang::CXXMemberCallExpr const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction28EmitCXXMemberPointerCallExprEPKNS_17CXXMemberCallExprENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCXXMemberPointerCallExpr(clang::CXXMemberCallExpr const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_Z34canDevirtualizeMemberFunctionCallsRN5clang10ASTContextEPKNS_4ExprEPKNS_13CXXMethodDeclE\", \"canDevirtualizeMemberFunctionCalls(clang::ASTContext&, clang::Expr const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29EmitCXXOperatorMemberCallExprEPKNS_19CXXOperatorCallExprEPKNS_13CXXMethodDeclENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCXXOperatorMemberCallExpr(clang::CXXOperatorCallExpr const*, clang::CXXMethodDecl const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitCXXConstructExprEPKNS_16CXXConstructExprENS0_12AggValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCXXConstructExpr(clang::CXXConstructExpr const*, clang::CodeGen::AggValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitSynthesizedCXXCopyCtorEPN4llvm5ValueES4_PKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitSynthesizedCXXCopyCtor(llvm::Value*, llvm::Value*, clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23EmitNewArrayInitializerEPKNS_10CXXNewExprEPN4llvm5ValueES7_\", \"clang::CodeGen::CodeGenFunction::EmitNewArrayInitializer(clang::CXXNewExpr const*, llvm::Value*, llvm::Value*)\"},\n    {\"_Z23StoreAnyExprIntoOneUnitRN5clang7CodeGen15CodeGenFunctionEPKNS_10CXXNewExprEPN4llvm5ValueE\", \"StoreAnyExprIntoOneUnit(clang::CodeGen::CodeGenFunction&, clang::CXXNewExpr const*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitCXXNewExprEPKNS_10CXXNewExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXNewExpr(clang::CXXNewExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitDeleteCallEPKNS_12FunctionDeclEPN4llvm5ValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitDeleteCall(clang::FunctionDecl const*, llvm::Value*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCXXDeleteExprEPKNS_13CXXDeleteExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXDeleteExpr(clang::CXXDeleteExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCXXTypeidExprEPKNS_13CXXTypeidExprE\", \"clang::CodeGen::CodeGenFunction::EmitCXXTypeidExpr(clang::CXXTypeidExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitDynamicCastEPN4llvm5ValueEPKNS_18CXXDynamicCastExprE\", \"clang::CodeGen::CodeGenFunction::EmitDynamicCast(llvm::Value*, clang::CXXDynamicCastExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_116CallObjectDeleteD1Ev\", \"(anonymous namespace)::CallObjectDelete::~CallObjectDelete()\"},\n    {\"_ZN12_GLOBAL__N_116CallObjectDeleteD0Ev\", \"(anonymous namespace)::CallObjectDelete::~CallObjectDelete()\"},\n    {\"_ZN12_GLOBAL__N_116CallObjectDelete4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallObjectDelete::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115CallArrayDeleteD1Ev\", \"(anonymous namespace)::CallArrayDelete::~CallArrayDelete()\"},\n    {\"_ZN12_GLOBAL__N_115CallArrayDeleteD0Ev\", \"(anonymous namespace)::CallArrayDelete::~CallArrayDelete()\"},\n    {\"_ZN12_GLOBAL__N_115CallArrayDelete4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallArrayDelete::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_130CallDeleteDuringConditionalNewD1Ev\", \"(anonymous namespace)::CallDeleteDuringConditionalNew::~CallDeleteDuringConditionalNew()\"},\n    {\"_ZN12_GLOBAL__N_130CallDeleteDuringConditionalNewD0Ev\", \"(anonymous namespace)::CallDeleteDuringConditionalNew::~CallDeleteDuringConditionalNew()\"},\n    {\"_ZN12_GLOBAL__N_130CallDeleteDuringConditionalNew4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallDeleteDuringConditionalNew::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_119CallDeleteDuringNewD1Ev\", \"(anonymous namespace)::CallDeleteDuringNew::~CallDeleteDuringNew()\"},\n    {\"_ZN12_GLOBAL__N_119CallDeleteDuringNewD0Ev\", \"(anonymous namespace)::CallDeleteDuringNew::~CallDeleteDuringNew()\"},\n    {\"_ZN12_GLOBAL__N_119CallDeleteDuringNew4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallDeleteDuringNew::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitComplexExprEPKNS_4ExprEbb\", \"clang::CodeGen::CodeGenFunction::EmitComplexExpr(clang::Expr const*, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter5VisitEPN5clang4ExprE\", \"(anonymous namespace)::ComplexExprEmitter::Visit(clang::Expr*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23EmitComplexExprIntoAddrEPKNS_4ExprEPN4llvm5ValueEb\", \"clang::CodeGen::CodeGenFunction::EmitComplexExprIntoAddr(clang::Expr const*, llvm::Value*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18StoreComplexToAddrESt4pairIPN4llvm5ValueES5_ES5_b\", \"clang::CodeGen::CodeGenFunction::StoreComplexToAddr(std::pair<llvm::Value*, llvm::Value*>, llvm::Value*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19LoadComplexFromAddrEPN4llvm5ValueEb\", \"clang::CodeGen::CodeGenFunction::LoadComplexFromAddr(llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter17EmitLoadOfComplexEPN4llvm5ValueEb\", \"(anonymous namespace)::ComplexExprEmitter::EmitLoadOfComplex(llvm::Value*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction27EmitComplexAssignmentLValueEPKNS_14BinaryOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitComplexAssignmentLValue(clang::BinaryOperator const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction35EmitComplexCompoundAssignmentLValueEPKNS_22CompoundAssignOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitComplexCompoundAssignmentLValue(clang::CompoundAssignOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter10EmitBinMulERKNS0_9BinOpInfoE\", \"(anonymous namespace)::ComplexExprEmitter::EmitBinMul((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter10EmitBinDivERKNS0_9BinOpInfoE\", \"(anonymous namespace)::ComplexExprEmitter::EmitBinDiv((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter10EmitBinSubERKNS0_9BinOpInfoE\", \"(anonymous namespace)::ComplexExprEmitter::EmitBinSub((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter10EmitBinAddERKNS0_9BinOpInfoE\", \"(anonymous namespace)::ComplexExprEmitter::EmitBinAdd((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter24EmitCompoundAssignLValueEPKN5clang22CompoundAssignOperatorEMS0_FSt4pairIPN4llvm5ValueES8_ERKNS0_9BinOpInfoEERS9_\", \"(anonymous namespace)::ComplexExprEmitter::EmitCompoundAssignLValue(clang::CompoundAssignOperator const*, std::pair<llvm::Value*, llvm::Value*> ((anonymous namespace)::ComplexExprEmitter::*)((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&), std::pair<llvm::Value*, llvm::Value*>&)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter24EmitComplexToComplexCastESt4pairIPN4llvm5ValueES4_EN5clang8QualTypeES7_\", \"(anonymous namespace)::ComplexExprEmitter::EmitComplexToComplexCast(std::pair<llvm::Value*, llvm::Value*>, clang::QualType, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter22EmitStoreThroughLValueESt4pairIPN4llvm5ValueES4_EN5clang7CodeGen6LValueE\", \"(anonymous namespace)::ComplexExprEmitter::EmitStoreThroughLValue(std::pair<llvm::Value*, llvm::Value*>, clang::CodeGen::LValue)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_118ComplexExprEmitterESt4pairIPN4llvm5ValueES6_EE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::ComplexExprEmitter, std::pair<llvm::Value*, llvm::Value*> >::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter9VisitExprEPN5clang4ExprE\", \"(anonymous namespace)::ComplexExprEmitter::VisitExpr(clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter16EmitLoadOfLValueEPKN5clang4ExprE\", \"(anonymous namespace)::ComplexExprEmitter::EmitLoadOfLValue(clang::Expr const*)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter8EmitCastEN5clang8CastKindEPNS1_4ExprENS1_8QualTypeE\", \"(anonymous namespace)::ComplexExprEmitter::EmitCast(clang::CastKind, clang::Expr*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118ComplexExprEmitter18EmitCompoundAssignEPKN5clang22CompoundAssignOperatorEMS0_FSt4pairIPN4llvm5ValueES8_ERKNS0_9BinOpInfoEE\", \"(anonymous namespace)::ComplexExprEmitter::EmitCompoundAssign(clang::CompoundAssignOperator const*, std::pair<llvm::Value*, llvm::Value*> ((anonymous namespace)::ComplexExprEmitter::*)((anonymous namespace)::ComplexExprEmitter::BinOpInfo const&))\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprESt4pairIPNS_5ValueES7_ENS_12DenseMapInfoIS4_EENS9_IS8_EEE16InsertIntoBucketERKS4_RKS8_PS5_IS4_S8_E\", \"llvm::DenseMap<clang::Expr const*, std::pair<llvm::Value*, llvm::Value*>, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::Value*> > >::InsertIntoBucket(clang::Expr const* const&, std::pair<llvm::Value*, llvm::Value*> const&, std::pair<clang::Expr const*, std::pair<llvm::Value*, llvm::Value*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprESt4pairIPNS_5ValueES7_ENS_12DenseMapInfoIS4_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<clang::Expr const*, std::pair<llvm::Value*, llvm::Value*>, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::Value*> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFNegEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFNeg(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16EmitConstantExprEPKNS_4ExprENS_8QualTypeEPNS0_15CodeGenFunctionE\", \"clang::CodeGen::CodeGenModule::EmitConstantExpr(clang::Expr const*, clang::QualType, clang::CodeGen::CodeGenFunction*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_116ConstExprEmitterEPN4llvm8ConstantEE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::ConstExprEmitter, llvm::Constant*>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule24getMemberPointerConstantEPKNS_13UnaryOperatorE\", \"clang::CodeGen::CodeGenModule::getMemberPointerConstant(clang::UnaryOperator const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16EmitNullConstantENS_8QualTypeE\", \"clang::CodeGen::CodeGenModule::EmitNullConstant(clang::QualType)\"},\n    {\"_Z16EmitNullConstantRN5clang7CodeGen13CodeGenModuleEPKNS_13CXXRecordDeclE\", \"EmitNullConstant(clang::CodeGen::CodeGenModule&, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_116ConstExprEmitter21VisitCXXConstructExprEPN5clang16CXXConstructExprE\", \"(anonymous namespace)::ConstExprEmitter::VisitCXXConstructExpr(clang::CXXConstructExpr*)\"},\n    {\"_ZN12_GLOBAL__N_116ConstExprEmitter23EmitArrayInitializationEPN5clang12InitListExprE\", \"(anonymous namespace)::ConstExprEmitter::EmitArrayInitialization(clang::InitListExpr*)\"},\n    {\"_ZN12_GLOBAL__N_118ConstStructBuilder5BuildEPN5clang12InitListExprE\", \"(anonymous namespace)::ConstStructBuilder::Build(clang::InitListExpr*)\"},\n    {\"_ZN12_GLOBAL__N_118ConstStructBuilder21ConvertStructToPackedEv\", \"(anonymous namespace)::ConstStructBuilder::ConvertStructToPacked()\"},\n    {\"_ZN12_GLOBAL__N_118ConstStructBuilder13AppendPaddingEy\", \"(anonymous namespace)::ConstStructBuilder::AppendPadding(unsigned long long)\"},\n    {\"_ZNK12_GLOBAL__N_118ConstStructBuilder14getSizeInBytesEPKN4llvm8ConstantE\", \"(anonymous namespace)::ConstStructBuilder::getSizeInBytes(llvm::Constant const*) const\"},\n    {\"_ZN12_GLOBAL__N_116ConstExprEmitter13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::ConstExprEmitter::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_Z28FillInNullDataMemberPointersRN5clang7CodeGen13CodeGenModuleENS_8QualTypeERSt6vectorIPN4llvm8ConstantESaIS7_EEy\", \"FillInNullDataMemberPointers(clang::CodeGen::CodeGenModule&, clang::QualType, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >&, unsigned long long)\"},\n    {\"_ZNSt6vectorIPN4llvm8ConstantESaIS2_EEaSERKS4_\", \"std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >::operator=(std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Decl const*, llvm::Value*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(clang::Decl const* const&, llvm::Value* const&, std::pair<clang::Decl const*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, llvm::Value*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitScalarExprEPKNS_4ExprEb\", \"clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitScalarConversionEPN4llvm5ValueENS_8QualTypeES5_\", \"clang::CodeGen::CodeGenFunction::EmitScalarConversion(llvm::Value*, clang::QualType, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter20EmitScalarConversionEPN4llvm5ValueEN5clang8QualTypeES5_\", \"(anonymous namespace)::ScalarExprEmitter::EmitScalarConversion(llvm::Value*, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction29EmitComplexToScalarConversionESt4pairIPN4llvm5ValueES5_ENS_8QualTypeES7_\", \"clang::CodeGen::CodeGenFunction::EmitComplexToScalarConversion(std::pair<llvm::Value*, llvm::Value*>, clang::QualType, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter29EmitComplexToScalarConversionESt4pairIPN4llvm5ValueES4_EN5clang8QualTypeES7_\", \"(anonymous namespace)::ScalarExprEmitter::EmitComplexToScalarConversion(std::pair<llvm::Value*, llvm::Value*>, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23EmitScalarPrePostIncDecEPKNS_13UnaryOperatorENS0_6LValueEbb\", \"clang::CodeGen::CodeGenFunction::EmitScalarPrePostIncDec(clang::UnaryOperator const*, clang::CodeGen::LValue, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter23EmitScalarPrePostIncDecEPKN5clang13UnaryOperatorENS1_7CodeGen6LValueEbb\", \"(anonymous namespace)::ScalarExprEmitter::EmitScalarPrePostIncDec(clang::UnaryOperator const*, clang::CodeGen::LValue, bool, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitObjCIsaExprEPKNS_11ObjCIsaExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCIsaExpr(clang::ObjCIsaExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction28EmitCompoundAssignmentLValueEPKNS_22CompoundAssignOperatorE\", \"clang::CodeGen::CodeGenFunction::EmitCompoundAssignmentLValue(clang::CompoundAssignOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter24EmitCompoundAssignLValueEPKN5clang22CompoundAssignOperatorEMS0_FPN4llvm5ValueERKNS_9BinOpInfoEERS7_\", \"(anonymous namespace)::ScalarExprEmitter::EmitCompoundAssignLValue(clang::CompoundAssignOperator const*, llvm::Value* ((anonymous namespace)::ScalarExprEmitter::*)((anonymous namespace)::BinOpInfo const&), llvm::Value*&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitMulERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitMul((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitDivERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitDiv((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitRemERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitRem((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitAddERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitAdd((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitSubERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitSub((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitShlERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitShl((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitShrERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitShr((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitAndERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitAnd((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter7EmitXorERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitXor((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter6EmitOrERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitOr((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter24EmitOverflowCheckedBinOpERKNS_9BinOpInfoE\", \"(anonymous namespace)::ScalarExprEmitter::EmitOverflowCheckedBinOp((anonymous namespace)::BinOpInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter42EmitUndefinedBehaviorIntegerDivAndRemCheckERKNS_9BinOpInfoEPN4llvm5ValueEb\", \"(anonymous namespace)::ScalarExprEmitter::EmitUndefinedBehaviorIntegerDivAndRemCheck((anonymous namespace)::BinOpInfo const&, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter31EmitAddConsiderOverflowBehaviorEPKN5clang13UnaryOperatorEPN4llvm5ValueES7_b\", \"(anonymous namespace)::ScalarExprEmitter::EmitAddConsiderOverflowBehavior(clang::UnaryOperator const*, llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter25EmitFloatToBoolConversionEPN4llvm5ValueE\", \"(anonymous namespace)::ScalarExprEmitter::EmitFloatToBoolConversion(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter23EmitIntToBoolConversionEPN4llvm5ValueE\", \"(anonymous namespace)::ScalarExprEmitter::EmitIntToBoolConversion(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter27EmitPointerToBoolConversionEPN4llvm5ValueE\", \"(anonymous namespace)::ScalarExprEmitter::EmitPointerToBoolConversion(llvm::Value*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_117ScalarExprEmitterEPN4llvm5ValueEE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter13VisitCallExprEPKN5clang8CallExprE\", \"(anonymous namespace)::ScalarExprEmitter::VisitCallExpr(clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter13EmitNullValueEN5clang8QualTypeE\", \"(anonymous namespace)::ScalarExprEmitter::EmitNullValue(clang::QualType)\"},\n    {\"_Z38isCheapEnoughToEvaluateUnconditionallyPKN5clang4ExprERNS_7CodeGen15CodeGenFunctionE\", \"isCheapEnoughToEvaluateUnconditionally(clang::Expr const*, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter12EmitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::ScalarExprEmitter::EmitCastExpr(clang::CastExpr*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter18EmitCompoundAssignEPKN5clang22CompoundAssignOperatorEMS0_FPN4llvm5ValueERKNS_9BinOpInfoEE\", \"(anonymous namespace)::ScalarExprEmitter::EmitCompoundAssign(clang::CompoundAssignOperator const*, llvm::Value* ((anonymous namespace)::ScalarExprEmitter::*)((anonymous namespace)::BinOpInfo const&))\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter10EmitBinOpsEPKN5clang14BinaryOperatorE\", \"(anonymous namespace)::ScalarExprEmitter::EmitBinOps(clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_117ScalarExprEmitter11EmitCompareEPKN5clang14BinaryOperatorEjjj\", \"(anonymous namespace)::ScalarExprEmitter::EmitCompare(clang::BinaryOperator const*, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateXorEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateXor(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateLShrEPNS_5ValueES6_RKNS_5TwineEb\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateLShr(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateShlEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateShl(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFSubEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateNegEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateNeg(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateSDivEPNS_5ValueES6_RKNS_5TwineEb\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateSDiv(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateCall4EPNS_5ValueES6_S6_S6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall4(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFAddEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateURemEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateURem(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateSRemEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateSRem(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFDivEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFDiv(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateUDivEPNS_5ValueES6_RKNS_5TwineEb\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateUDiv(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFCmpENS_7CmpInst9PredicateEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFCmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateNSWMulEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateNSWMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateFMulEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateFMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE19CreateInsertElementEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInsertElement(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE19CreateShuffleVectorEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateShuffleVector(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateVAArgEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateVAArg(llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE20CreateExtractElementEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateExtractElement(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateNotEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateNot(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE19CreateZExtOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateZExtOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21EmitObjCStringLiteralEPKNS_17ObjCStringLiteralE\", \"clang::CodeGen::CodeGenFunction::EmitObjCStringLiteral(clang::ObjCStringLiteral const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitObjCSelectorExprEPKNS_16ObjCSelectorExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCSelectorExpr(clang::ObjCSelectorExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitObjCProtocolExprEPKNS_16ObjCProtocolExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCProtocolExpr(clang::ObjCProtocolExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitObjCMessageExprEPKNS_15ObjCMessageExprENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(clang::ObjCMessageExpr const*, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12LoadObjCSelfEv\", \"clang::CodeGen::CodeGenFunction::LoadObjCSelf()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15StartObjCMethodEPKNS_14ObjCMethodDeclEPKNS_17ObjCContainerDeclE\", \"clang::CodeGen::CodeGenFunction::StartObjCMethod(clang::ObjCMethodDecl const*, clang::ObjCContainerDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18GenerateObjCMethodEPKNS_14ObjCMethodDeclE\", \"clang::CodeGen::CodeGenFunction::GenerateObjCMethod(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18GenerateObjCGetterEPNS_22ObjCImplementationDeclEPKNS_20ObjCPropertyImplDeclE\", \"clang::CodeGen::CodeGenFunction::GenerateObjCGetter(clang::ObjCImplementationDecl*, clang::ObjCPropertyImplDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16TypeOfSelfObjectEv\", \"clang::CodeGen::CodeGenFunction::TypeOfSelfObject()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25IvarTypeWithAggrGCObjectsENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::IvarTypeWithAggrGCObjects(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18GenerateObjCSetterEPNS_22ObjCImplementationDeclEPKNS_20ObjCPropertyImplDeclE\", \"clang::CodeGen::CodeGenFunction::GenerateObjCSetter(clang::ObjCImplementationDecl*, clang::ObjCPropertyImplDecl const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction21IndirectObjCSetterArgERKNS0_14CGFunctionInfoE\", \"clang::CodeGen::CodeGenFunction::IndirectObjCSetterArg(clang::CodeGen::CGFunctionInfo const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26GenerateObjCCtorDtorMethodEPNS_22ObjCImplementationDeclEPNS_14ObjCMethodDeclEb\", \"clang::CodeGen::CodeGenFunction::GenerateObjCCtorDtorMethod(clang::ObjCImplementationDecl*, clang::ObjCMethodDecl*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitObjCPropertyRefLValueEPKNS_19ObjCPropertyRefExprE\", \"clang::CodeGen::CodeGenFunction::EmitObjCPropertyRefLValue(clang::ObjCPropertyRefExpr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction27EmitLoadOfPropertyRefLValueENS0_6LValueENS0_15ReturnValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitLoadOfPropertyRefLValue(clang::CodeGen::LValue, clang::CodeGen::ReturnValueSlot)\"},\n    {\"_Z24GenerateMessageSendSuperRN5clang7CodeGen15CodeGenFunctionENS0_15ReturnValueSlotENS_8QualTypeENS_8SelectorEPN4llvm5ValueERKNS6_11SmallVectorISt4pairINS0_6RValueES4_ELj16EEE\", \"GenerateMessageSendSuper(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, llvm::Value*, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction33EmitStoreThroughPropertyRefLValueENS0_6RValueENS0_6LValueE\", \"clang::CodeGen::CodeGenFunction::EmitStoreThroughPropertyRefLValue(clang::CodeGen::RValue, clang::CodeGen::LValue)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction25EmitObjCForCollectionStmtERKNS_21ObjCForCollectionStmtE\", \"clang::CodeGen::CodeGenFunction::EmitObjCForCollectionStmt(clang::ObjCForCollectionStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitObjCAtTryStmtERKNS_13ObjCAtTryStmtE\", \"clang::CodeGen::CodeGenFunction::EmitObjCAtTryStmt(clang::ObjCAtTryStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19EmitObjCAtThrowStmtERKNS_15ObjCAtThrowStmtE\", \"clang::CodeGen::CodeGenFunction::EmitObjCAtThrowStmt(clang::ObjCAtThrowStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitObjCAtSynchronizedStmtERKNS_22ObjCAtSynchronizedStmtE\", \"clang::CodeGen::CodeGenFunction::EmitObjCAtSynchronizedStmt(clang::ObjCAtSynchronizedStmt const&)\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntimeD0Ev\", \"clang::CodeGen::CGObjCRuntime::~CGObjCRuntime()\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntimeD1Ev\", \"clang::CodeGen::CGObjCRuntime::~CGObjCRuntime()\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntimeD2Ev\", \"clang::CodeGen::CGObjCRuntime::~CGObjCRuntime()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitCallArgsINS_14ObjCMethodDeclEEEvRN4llvm11SmallVectorISt4pairINS0_6RValueENS_8QualTypeEELj16EEEPKT_NS_17ConstExprIteratorESF_\", \"void clang::CodeGen::CodeGenFunction::EmitCallArgs<clang::ObjCMethodDecl>(llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u>&, clang::ObjCMethodDecl const*, clang::ConstExprIterator, clang::ConstExprIterator)\"},\n    {\"_ZNK5clang9ValueDecl7getTypeEv\", \"clang::ValueDecl::getType() const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7CodeGen15CodeGenFunction13BreakContinueELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeGen::CodeGenFunction::BreakContinue, false>::grow(unsigned long)\"},\n    {\"_ZN5clang7CodeGen20CreateGNUObjCRuntimeERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateGNUObjCRuntime(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNUD1Ev\", \"(anonymous namespace)::CGObjCGNU::~CGObjCGNU()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNUD0Ev\", \"(anonymous namespace)::CGObjCGNU::~CGObjCGNU()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18ModuleInitFunctionEv\", \"(anonymous namespace)::CGObjCGNU::ModuleInitFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEN5clang8SelectorEb\", \"(anonymous namespace)::CGObjCGNU::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::Selector, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCGNU::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU9GetEHTypeEN5clang8QualTypeE\", \"(anonymous namespace)::CGObjCGNU::GetEHType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU22GenerateConstantStringEPKN5clang13StringLiteralE\", \"(anonymous namespace)::CGObjCGNU::GenerateConstantString(clang::StringLiteral const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU16GenerateCategoryEPKN5clang20ObjCCategoryImplDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateCategory(clang::ObjCCategoryImplDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU13GenerateClassEPKN5clang22ObjCImplementationDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateClass(clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU19GenerateMessageSendERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPN4llvm5ValueERKNS8_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_17ObjCInterfaceDeclEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateMessageSend(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, llvm::Value*, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU24GenerateMessageSendSuperERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPKNS1_17ObjCInterfaceDeclEbPN4llvm5ValueEbRKNSB_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateMessageSendSuper(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, clang::ObjCInterfaceDecl const*, bool, llvm::Value*, bool, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU19GenerateProtocolRefERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateProtocolRef(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU16GenerateProtocolEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateProtocol(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU14GenerateMethodEPKN5clang14ObjCMethodDeclEPKNS1_17ObjCContainerDeclE\", \"(anonymous namespace)::CGObjCGNU::GenerateMethod(clang::ObjCMethodDecl const*, clang::ObjCContainerDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU22GetPropertyGetFunctionEv\", \"(anonymous namespace)::CGObjCGNU::GetPropertyGetFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU22GetPropertySetFunctionEv\", \"(anonymous namespace)::CGObjCGNU::GetPropertySetFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20GetGetStructFunctionEv\", \"(anonymous namespace)::CGObjCGNU::GetGetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20GetSetStructFunctionEv\", \"(anonymous namespace)::CGObjCGNU::GetSetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU8GetClassERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::CGObjCGNU::GetClass(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU27EnumerationMutationFunctionEv\", \"(anonymous namespace)::CGObjCGNU::EnumerationMutationFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20EmitSynchronizedStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_22ObjCAtSynchronizedStmtE\", \"(anonymous namespace)::CGObjCGNU::EmitSynchronizedStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtSynchronizedStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU11EmitTryStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_13ObjCAtTryStmtE\", \"(anonymous namespace)::CGObjCGNU::EmitTryStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtTryStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU13EmitThrowStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_15ObjCAtThrowStmtE\", \"(anonymous namespace)::CGObjCGNU::EmitThrowStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtThrowStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU16EmitObjCWeakReadERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::CGObjCGNU::EmitObjCWeakRead(clang::CodeGen::CodeGenFunction&, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18EmitObjCWeakAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCGNU::EmitObjCWeakAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20EmitObjCGlobalAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_b\", \"(anonymous namespace)::CGObjCGNU::EmitObjCGlobalAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18EmitObjCIvarAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCGNU::EmitObjCIvarAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU24EmitObjCStrongCastAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCGNU::EmitObjCStrongCastAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20EmitObjCValueForIvarERN5clang7CodeGen15CodeGenFunctionENS1_8QualTypeEPN4llvm5ValueEPKNS1_12ObjCIvarDeclEj\", \"(anonymous namespace)::CGObjCGNU::EmitObjCValueForIvar(clang::CodeGen::CodeGenFunction&, clang::QualType, llvm::Value*, clang::ObjCIvarDecl const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU14EmitIvarOffsetERN5clang7CodeGen15CodeGenFunctionEPKNS1_17ObjCInterfaceDeclEPKNS1_12ObjCIvarDeclE\", \"(anonymous namespace)::CGObjCGNU::EmitIvarOffset(clang::CodeGen::CodeGenFunction&, clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU24EmitGCMemmoveCollectableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCGNU::EmitGCMemmoveCollectable(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18BuildGCBlockLayoutERN5clang7CodeGen13CodeGenModuleERKNS2_11CGBlockInfoE\", \"(anonymous namespace)::CGObjCGNU::BuildGCBlockLayout(clang::CodeGen::CodeGenModule&, clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_Z17FindIvarInterfaceRN5clang10ASTContextEPKNS_17ObjCInterfaceDeclEPKNS_12ObjCIvarDeclE\", \"FindIvarInterface(clang::ASTContext&, clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExitD1Ev\", \"(anonymous namespace)::CallSyncExit::~CallSyncExit()\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExitD0Ev\", \"(anonymous namespace)::CallSyncExit::~CallSyncExit()\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExit4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallSyncExit::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU12EmitClassRefERKSs\", \"(anonymous namespace)::CGObjCGNU::EmitClassRef(std::string const&)\"},\n    {\"_Z19SymbolNameForMethodRKSsS0_S0_b\", \"SymbolNameForMethod(std::string const&, std::string const&, std::string const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU20GenerateProtocolListERKN4llvm15SmallVectorImplISsEE\", \"(anonymous namespace)::CGObjCGNU::GenerateProtocolList(llvm::SmallVectorImpl<std::string> const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU26GenerateProtocolMethodListERKN4llvm15SmallVectorImplIPNS1_8ConstantEEES7_\", \"(anonymous namespace)::CGObjCGNU::GenerateProtocolMethodList(llvm::SmallVectorImpl<llvm::Constant*> const&, llvm::SmallVectorImpl<llvm::Constant*> const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18GenerateMethodListERKSsS2_RKN4llvm15SmallVectorImplIN5clang8SelectorEEERKNS4_IPNS3_8ConstantEEEb\", \"(anonymous namespace)::CGObjCGNU::GenerateMethodList(std::string const&, std::string const&, llvm::SmallVectorImpl<clang::Selector> const&, llvm::SmallVectorImpl<llvm::Constant*> const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU16GenerateIvarListERKN4llvm15SmallVectorImplIPNS1_8ConstantEEES7_S7_\", \"(anonymous namespace)::CGObjCGNU::GenerateIvarList(llvm::SmallVectorImpl<llvm::Constant*> const&, llvm::SmallVectorImpl<llvm::Constant*> const&, llvm::SmallVectorImpl<llvm::Constant*> const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU22GenerateClassStructureEPN4llvm8ConstantES3_jPKcS3_S3_S3_S3_S3_S3_S3_b\", \"(anonymous namespace)::CGObjCGNU::GenerateClassStructure(llvm::Constant*, llvm::Constant*, unsigned int, char const*, llvm::Constant*, llvm::Constant*, llvm::Constant*, llvm::Constant*, llvm::Constant*, llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCGNU18ExportUniqueStringERKSsSs\", \"(anonymous namespace)::CGObjCGNU::ExportUniqueString(std::string const&, std::string)\"},\n    {\"_Z19MangleSelectorTypesRKSs\", \"MangleSelectorTypes(std::string const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateCall3EPNS_5ValueES6_S6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall3(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateLoadEPNS_5ValueEbRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateLoad(llvm::Value*, bool, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateCall2EPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall2(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCallEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE17CreateUnreachableEv\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateUnreachable()\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateInvokeIPPNS_5ValueEEEPNS_10InvokeInstES7_PNS_10BasicBlockESC_T_SD_RKNS_5TwineE\", \"llvm::InvokeInst* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInvoke<llvm::Value**>(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7CanQualINS1_4TypeEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CanQual<clang::Type>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIN5clang7CodeGen6RValueENS2_8QualTypeEEE6insertIPKS6_EEPS6_SB_T_SC_\", \"std::pair<clang::CodeGen::RValue, clang::QualType>* llvm::SmallVectorImpl<std::pair<clang::CodeGen::RValue, clang::QualType> >::insert<std::pair<clang::CodeGen::RValue, clang::QualType> const*>(std::pair<clang::CodeGen::RValue, clang::QualType>*, std::pair<clang::CodeGen::RValue, clang::QualType> const*, std::pair<clang::CodeGen::RValue, clang::QualType> const*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateAllocaEPKNS_4TypeEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateAlloca(llvm::Type const*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCallIPPNS_5ValueEEEPNS_8CallInstES7_T_SB_RKNS_5TwineE\", \"llvm::CallInst* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIN5clang7CodeGen6RValueENS2_8QualTypeEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::CodeGen::RValue, clang::QualType>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE8CreateBrEPNS_10BasicBlockE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateBr(llvm::BasicBlock*)\"},\n    {\"_ZNSt3mapISt4pairISsSsEPN4llvm11GlobalAliasESt4lessIS1_ESaIS0_IKS1_S4_EEEixERS7_\", \"std::map<std::pair<std::string, std::string>, llvm::GlobalAlias*, std::less<std::pair<std::string, std::string> >, std::allocator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> > >::operator[](std::pair<std::string, std::string> const&)\"},\n    {\"_ZNKSt4lessISt4pairISsSsEEclERKS1_S4_\", \"std::less<std::pair<std::string, std::string> >::operator()(std::pair<std::string, std::string> const&, std::pair<std::string, std::string> const&) const\"},\n    {\"_ZNSt8_Rb_treeISt4pairISsSsES0_IKS1_PN4llvm11GlobalAliasEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<std::pair<std::string, std::string>, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*>, std::_Select1st<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >, std::less<std::pair<std::string, std::string> >, std::allocator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISsSsES0_IKS1_PN4llvm11GlobalAliasEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::pair<std::string, std::string>, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*>, std::_Select1st<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >, std::less<std::pair<std::string, std::string> >, std::allocator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISsSsES0_IKS1_PN4llvm11GlobalAliasEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::pair<std::string, std::string>, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*>, std::_Select1st<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >, std::less<std::pair<std::string, std::string> >, std::allocator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> > >::_M_insert_unique(std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> const&)\"},\n    {\"_ZN4llvm9StringMapIPNS_11GlobalAliasENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::GlobalAlias*>& llvm::StringMap<llvm::GlobalAlias*, llvm::MallocAllocator>::GetOrCreateValue<llvm::GlobalAlias*>(llvm::StringRef, llvm::GlobalAlias*)\"},\n    {\"_ZNSt6vectorIPN4llvm8ConstantESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS2_S4_EEEEvS9_T_SA_St20forward_iterator_tag\", \"void std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >(__gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, __gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, __gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::forward_iterator_tag)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISsSsES0_IKS1_PN4llvm11GlobalAliasEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::pair<std::string, std::string>, std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*>, std::_Select1st<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >, std::less<std::pair<std::string, std::string> >, std::allocator<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<std::string, std::string> const, llvm::GlobalAlias*> >*)\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntime21ComputeIvarBaseOffsetERNS0_13CodeGenModuleEPKNS_17ObjCInterfaceDeclEPKNS_12ObjCIvarDeclE\", \"clang::CodeGen::CGObjCRuntime::ComputeIvarBaseOffset(clang::CodeGen::CodeGenModule&, clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_Z20LookupFieldBitOffsetRN5clang7CodeGen13CodeGenModuleEPKNS_17ObjCInterfaceDeclEPKNS_22ObjCImplementationDeclEPKNS_12ObjCIvarDeclE\", \"LookupFieldBitOffset(clang::CodeGen::CodeGenModule&, clang::ObjCInterfaceDecl const*, clang::ObjCImplementationDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntime21ComputeIvarBaseOffsetERNS0_13CodeGenModuleEPKNS_22ObjCImplementationDeclEPKNS_12ObjCIvarDeclE\", \"clang::CodeGen::CGObjCRuntime::ComputeIvarBaseOffset(clang::CodeGen::CodeGenModule&, clang::ObjCImplementationDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CGObjCRuntime24EmitValueForIvarAtOffsetERNS0_15CodeGenFunctionEPKNS_17ObjCInterfaceDeclEPN4llvm5ValueEPKNS_12ObjCIvarDeclEjS9_\", \"clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(clang::CodeGen::CodeGenFunction&, clang::ObjCInterfaceDecl const*, llvm::Value*, clang::ObjCIvarDecl const*, unsigned int, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen20CreateMacObjCRuntimeERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateMacObjCRuntime(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen33CreateMacNonFragileABIObjCRuntimeERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateMacNonFragileABIObjCRuntime(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMacC2ERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::CGObjCCommonMac::CGObjCCommonMac(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMacD1Ev\", \"(anonymous namespace)::CGObjCNonFragileABIMac::~CGObjCNonFragileABIMac()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMacD0Ev\", \"(anonymous namespace)::CGObjCNonFragileABIMac::~CGObjCNonFragileABIMac()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18ModuleInitFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::ModuleInitFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEN5clang8SelectorEb\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::Selector, bool)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac9GetEHTypeEN5clang8QualTypeE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetEHType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac22GenerateConstantStringEPKN5clang13StringLiteralE\", \"(anonymous namespace)::CGObjCCommonMac::GenerateConstantString(clang::StringLiteral const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac16GenerateCategoryEPKN5clang20ObjCCategoryImplDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GenerateCategory(clang::ObjCCategoryImplDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac13GenerateClassEPKN5clang22ObjCImplementationDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GenerateClass(clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac19GenerateMessageSendERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPN4llvm5ValueERKNS8_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_17ObjCInterfaceDeclEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GenerateMessageSend(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, llvm::Value*, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac24GenerateMessageSendSuperERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPKNS1_17ObjCInterfaceDeclEbPN4llvm5ValueEbRKNSB_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GenerateMessageSendSuper(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, clang::ObjCInterfaceDecl const*, bool, llvm::Value*, bool, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac19GenerateProtocolRefERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GenerateProtocolRef(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac16GenerateProtocolEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCCommonMac::GenerateProtocol(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac14GenerateMethodEPKN5clang14ObjCMethodDeclEPKNS1_17ObjCContainerDeclE\", \"(anonymous namespace)::CGObjCCommonMac::GenerateMethod(clang::ObjCMethodDecl const*, clang::ObjCContainerDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac22GetPropertyGetFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetPropertyGetFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac22GetPropertySetFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetPropertySetFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20GetGetStructFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetGetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20GetSetStructFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetSetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac8GetClassERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetClass(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac27EnumerationMutationFunctionEv\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EnumerationMutationFunction()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20EmitSynchronizedStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_22ObjCAtSynchronizedStmtE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitSynchronizedStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtSynchronizedStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac11EmitTryStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_13ObjCAtTryStmtE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitTryStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtTryStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac13EmitThrowStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_15ObjCAtThrowStmtE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitThrowStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtThrowStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac16EmitObjCWeakReadERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCWeakRead(clang::CodeGen::CodeGenFunction&, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18EmitObjCWeakAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCWeakAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20EmitObjCGlobalAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_b\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCGlobalAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18EmitObjCIvarAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCIvarAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac24EmitObjCStrongCastAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCStrongCastAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20EmitObjCValueForIvarERN5clang7CodeGen15CodeGenFunctionENS1_8QualTypeEPN4llvm5ValueEPKNS1_12ObjCIvarDeclEj\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitObjCValueForIvar(clang::CodeGen::CodeGenFunction&, clang::QualType, llvm::Value*, clang::ObjCIvarDecl const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac14EmitIvarOffsetERN5clang7CodeGen15CodeGenFunctionEPKNS1_17ObjCInterfaceDeclEPKNS1_12ObjCIvarDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitIvarOffset(clang::CodeGen::CodeGenFunction&, clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac24EmitGCMemmoveCollectableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitGCMemmoveCollectable(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac18BuildGCBlockLayoutERN5clang7CodeGen13CodeGenModuleERKNS2_11CGBlockInfoE\", \"(anonymous namespace)::CGObjCCommonMac::BuildGCBlockLayout(clang::CodeGen::CodeGenModule&, clang::CodeGen::CGBlockInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac17GetOrEmitProtocolEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetOrEmitProtocol(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac20GetOrEmitProtocolRefEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetOrEmitProtocolRef(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac28GetMethodDescriptionConstantEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetMethodDescriptionConstant(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac12GetClassNameEPN5clang14IdentifierInfoE\", \"(anonymous namespace)::CGObjCCommonMac::GetClassName(clang::IdentifierInfo*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac16EmitProtocolListEN4llvm5TwineEPKPN5clang16ObjCProtocolDeclES7_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitProtocolList(llvm::Twine, clang::ObjCProtocolDecl* const*, clang::ObjCProtocolDecl* const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac14EmitMethodListEN4llvm5TwineEPKcRKSt6vectorIPNS1_8ConstantESaIS7_EE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitMethodList(llvm::Twine, char const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac16EmitPropertyListEN4llvm5TwineEPKN5clang4DeclEPKNS3_17ObjCContainerDeclERKNS_21ObjCCommonTypesHelperE\", \"(anonymous namespace)::CGObjCCommonMac::EmitPropertyList(llvm::Twine, clang::Decl const*, clang::ObjCContainerDecl const*, (anonymous namespace)::ObjCCommonTypesHelper const&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac15GetPropertyNameEPN5clang14IdentifierInfoE\", \"(anonymous namespace)::CGObjCCommonMac::GetPropertyName(clang::IdentifierInfo*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac21GetPropertyTypeStringEPKN5clang16ObjCPropertyDeclEPKNS1_4DeclE\", \"(anonymous namespace)::CGObjCCommonMac::GetPropertyTypeString(clang::ObjCPropertyDecl const*, clang::Decl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac22PushProtocolPropertiesERN4llvm11SmallPtrSetIPKN5clang14IdentifierInfoELj16EEERSt6vectorIPNS1_8ConstantESaISB_EEPKNS3_4DeclEPKNS3_16ObjCProtocolDeclERKNS_21ObjCCommonTypesHelperE\", \"(anonymous namespace)::CGObjCCommonMac::PushProtocolProperties(llvm::SmallPtrSet<clang::IdentifierInfo const*, 16u>&, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >&, clang::Decl const*, clang::ObjCProtocolDecl const*, (anonymous namespace)::ObjCCommonTypesHelper const&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac17CreateMetadataVarEN4llvm5TwineEPNS1_8ConstantEPKcjb\", \"(anonymous namespace)::CGObjCCommonMac::CreateMetadataVar(llvm::Twine, llvm::Constant*, char const*, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac16GetMethodVarNameEN5clang8SelectorE\", \"(anonymous namespace)::CGObjCCommonMac::GetMethodVarName(clang::Selector)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac16GetMethodVarTypeEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCCommonMac::GetMethodVarType(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_115CGObjCCommonMac7GC_IVAREE9push_backERKS3_\", \"llvm::SmallVectorImpl<(anonymous namespace)::CGObjCCommonMac::GC_IVAR>::push_back((anonymous namespace)::CGObjCCommonMac::GC_IVAR const&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac25BuildAggrIvarRecordLayoutEPKN5clang10RecordTypeEjbRb\", \"(anonymous namespace)::CGObjCCommonMac::BuildAggrIvarRecordLayout(clang::RecordType const*, unsigned int, bool, bool&)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac21BuildIvarLayoutBitmapERSs\", \"(anonymous namespace)::CGObjCCommonMac::BuildIvarLayoutBitmap(std::string&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_115CGObjCCommonMac9SKIP_SCANEE9push_backERKS3_\", \"llvm::SmallVectorImpl<(anonymous namespace)::CGObjCCommonMac::SKIP_SCAN>::push_back((anonymous namespace)::CGObjCCommonMac::SKIP_SCAN const&)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_115CGObjCCommonMac7GC_IVAREEEiPKvS5_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::CGObjCCommonMac::GC_IVAR>(void const*, void const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac19BuildAggrIvarLayoutEPKN5clang22ObjCImplementationDeclEPKN4llvm12StructLayoutEPKNS1_10RecordDeclERKNS5_15SmallVectorImplIPNS1_9FieldDeclEEEjbRb\", \"(anonymous namespace)::CGObjCCommonMac::BuildAggrIvarLayout(clang::ObjCImplementationDecl const*, llvm::StructLayout const*, clang::RecordDecl const*, llvm::SmallVectorImpl<clang::FieldDecl*> const&, unsigned int, bool, bool&)\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper22GcMemmoveCollectableFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::GcMemmoveCollectableFn()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac22ObjCIvarOffsetVariableEPKN5clang17ObjCInterfaceDeclEPKNS1_12ObjCIvarDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::ObjCIvarOffsetVariable(clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper23getGcAssignStrongCastFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcAssignStrongCastFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper17getGcAssignIvarFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcAssignIvarFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper19getGcAssignGlobalFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcAssignGlobalFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper24getGcAssignThreadLocalFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcAssignThreadLocalFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper17getGcAssignWeakFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcAssignWeakFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper15getGcReadWeakFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGcReadWeakFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper19getExceptionThrowFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getExceptionThrowFn()\"},\n    {\"_ZN12_GLOBAL__N_116CallObjCEndCatchD1Ev\", \"(anonymous namespace)::CallObjCEndCatch::~CallObjCEndCatch()\"},\n    {\"_ZN12_GLOBAL__N_116CallObjCEndCatchD0Ev\", \"(anonymous namespace)::CallObjCEndCatch::~CallObjCEndCatch()\"},\n    {\"_ZN12_GLOBAL__N_116CallObjCEndCatch4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallObjCEndCatch::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper14getSyncEnterFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getSyncEnterFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper13getSyncExitFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getSyncExitFn()\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExitD1Ev\", \"(anonymous namespace)::CallSyncExit::~CallSyncExit()\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExitD0Ev\", \"(anonymous namespace)::CallSyncExit::~CallSyncExit()\"},\n    {\"_ZN12_GLOBAL__N_112CallSyncExit4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallSyncExit::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper24getEnumerationMutationFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getEnumerationMutationFn()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac14GetClassGlobalERKSs\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetClassGlobal(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac12EmitClassRefERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitClassRef(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper15getCopyStructFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getCopyStructFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper16getSetPropertyFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getSetPropertyFn()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelper16getGetPropertyFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getGetPropertyFn()\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac24LegacyDispatchedSelectorEN5clang8SelectorE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::LegacyDispatchedSelector(clang::Selector)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac21EmitLegacyMessageSendERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeEPN4llvm5ValueES9_S6_bRKNS7_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_14ObjCMethodDeclERKNS_21ObjCCommonTypesHelperE\", \"(anonymous namespace)::CGObjCCommonMac::EmitLegacyMessageSend(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, llvm::Value*, llvm::Value*, clang::QualType, bool, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCMethodDecl const*, (anonymous namespace)::ObjCCommonTypesHelper const&)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac12EmitSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEN5clang8SelectorEb\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::Selector, bool)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac15EmitMessageSendERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPN4llvm5ValueES6_bRKNS8_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::EmitMessageSend(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, llvm::Value*, clang::QualType, bool, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&)\"},\n    {\"_ZNK12_GLOBAL__N_121ObjCCommonTypesHelper21getMessageSendSuperFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getMessageSendSuperFn() const\"},\n    {\"_ZNK12_GLOBAL__N_121ObjCCommonTypesHelper16getMessageSendFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getMessageSendFn() const\"},\n    {\"_ZNK12_GLOBAL__N_121ObjCCommonTypesHelper22getMessageSendSuperFn2Ev\", \"(anonymous namespace)::ObjCCommonTypesHelper::getMessageSendSuperFn2() const\"},\n    {\"_ZNK12_GLOBAL__N_121ObjCCommonTypesHelper21getMessageSendFpretFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getMessageSendFpretFn() const\"},\n    {\"_ZNK12_GLOBAL__N_121ObjCCommonTypesHelper21getMessageSendStretFnEv\", \"(anonymous namespace)::ObjCCommonTypesHelper::getMessageSendStretFn() const\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac24BuildClassRoTInitializerEjjjPKN5clang22ObjCImplementationDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::BuildClassRoTInitializer(unsigned int, unsigned int, unsigned int, clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18BuildClassMetaDataERSsPN4llvm8ConstantES4_S4_b\", \"(anonymous namespace)::CGObjCNonFragileABIMac::BuildClassMetaData(std::string&, llvm::Constant*, llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_Z25hasObjCExceptionAttributeRN5clang10ASTContextEPKNS_17ObjCInterfaceDeclE\", \"hasObjCExceptionAttribute(clang::ASTContext&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18GetInterfaceEHTypeEPKN5clang17ObjCInterfaceDeclEb\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetInterfaceEHType(clang::ObjCInterfaceDecl const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac15BuildIvarLayoutEPKN5clang22ObjCImplementationDeclEb\", \"(anonymous namespace)::CGObjCCommonMac::BuildIvarLayout(clang::ObjCImplementationDecl const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac17GetMethodConstantEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCNonFragileABIMac::GetMethodConstant(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac16GetMethodVarTypeEPKN5clang9FieldDeclE\", \"(anonymous namespace)::CGObjCCommonMac::GetMethodVarType(clang::FieldDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac19GetMethodDefinitionEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCCommonMac::GetMethodDefinition(clang::ObjCMethodDecl const*)\"},\n    {\"_ZSt4sortIPN12_GLOBAL__N_115CGObjCCommonMac7GC_IVAREEvT_S4_\", \"void std::sort<(anonymous namespace)::CGObjCCommonMac::GC_IVAR*>((anonymous namespace)::CGObjCCommonMac::GC_IVAR*, (anonymous namespace)::CGObjCCommonMac::GC_IVAR*)\"},\n    {\"_ZSt16__introsort_loopIPN12_GLOBAL__N_115CGObjCCommonMac7GC_IVARElEvT_S4_T0_\", \"void std::__introsort_loop<(anonymous namespace)::CGObjCCommonMac::GC_IVAR*, long>((anonymous namespace)::CGObjCCommonMac::GC_IVAR*, (anonymous namespace)::CGObjCCommonMac::GC_IVAR*, long)\"},\n    {\"_ZSt16__insertion_sortIPN12_GLOBAL__N_115CGObjCCommonMac7GC_IVAREEvT_S4_\", \"void std::__insertion_sort<(anonymous namespace)::CGObjCCommonMac::GC_IVAR*>((anonymous namespace)::CGObjCCommonMac::GC_IVAR*, (anonymous namespace)::CGObjCCommonMac::GC_IVAR*)\"},\n    {\"_ZN12_GLOBAL__N_122CGObjCNonFragileABIMac18AddModuleClassListERKSt6vectorIPN4llvm11GlobalValueESaIS4_EEPKcSA_\", \"(anonymous namespace)::CGObjCNonFragileABIMac::AddModuleClassList(std::vector<llvm::GlobalValue*, std::allocator<llvm::GlobalValue*> > const&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMac13EmitImageInfoEv\", \"(anonymous namespace)::CGObjCCommonMac::EmitImageInfo()\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMacD2Ev\", \"(anonymous namespace)::CGObjCCommonMac::~CGObjCCommonMac()\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMacD1Ev\", \"(anonymous namespace)::CGObjCCommonMac::~CGObjCCommonMac()\"},\n    {\"_ZN12_GLOBAL__N_115CGObjCCommonMacD0Ev\", \"(anonymous namespace)::CGObjCCommonMac::~CGObjCCommonMac()\"},\n    {\"_ZN12_GLOBAL__N_121ObjCCommonTypesHelperC2ERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::ObjCCommonTypesHelper::ObjCCommonTypesHelper(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMacD1Ev\", \"(anonymous namespace)::CGObjCMac::~CGObjCMac()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMacD0Ev\", \"(anonymous namespace)::CGObjCMac::~CGObjCMac()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac18ModuleInitFunctionEv\", \"(anonymous namespace)::CGObjCMac::ModuleInitFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEN5clang8SelectorEb\", \"(anonymous namespace)::CGObjCMac::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::Selector, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac11GetSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCMac::GetSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac9GetEHTypeEN5clang8QualTypeE\", \"(anonymous namespace)::CGObjCMac::GetEHType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac16GenerateCategoryEPKN5clang20ObjCCategoryImplDeclE\", \"(anonymous namespace)::CGObjCMac::GenerateCategory(clang::ObjCCategoryImplDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac13GenerateClassEPKN5clang22ObjCImplementationDeclE\", \"(anonymous namespace)::CGObjCMac::GenerateClass(clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac19GenerateMessageSendERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPN4llvm5ValueERKNS8_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_17ObjCInterfaceDeclEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCMac::GenerateMessageSend(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, llvm::Value*, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac24GenerateMessageSendSuperERN5clang7CodeGen15CodeGenFunctionENS2_15ReturnValueSlotENS1_8QualTypeENS1_8SelectorEPKNS1_17ObjCInterfaceDeclEbPN4llvm5ValueEbRKNSB_11SmallVectorISt4pairINS2_6RValueES6_ELj16EEEPKNS1_14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCMac::GenerateMessageSendSuper(clang::CodeGen::CodeGenFunction&, clang::CodeGen::ReturnValueSlot, clang::QualType, clang::Selector, clang::ObjCInterfaceDecl const*, bool, llvm::Value*, bool, llvm::SmallVector<std::pair<clang::CodeGen::RValue, clang::QualType>, 16u> const&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac19GenerateProtocolRefERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCMac::GenerateProtocolRef(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac22GetPropertyGetFunctionEv\", \"(anonymous namespace)::CGObjCMac::GetPropertyGetFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac22GetPropertySetFunctionEv\", \"(anonymous namespace)::CGObjCMac::GetPropertySetFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20GetGetStructFunctionEv\", \"(anonymous namespace)::CGObjCMac::GetGetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20GetSetStructFunctionEv\", \"(anonymous namespace)::CGObjCMac::GetSetStructFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac8GetClassERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::CGObjCMac::GetClass(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac27EnumerationMutationFunctionEv\", \"(anonymous namespace)::CGObjCMac::EnumerationMutationFunction()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20EmitSynchronizedStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_22ObjCAtSynchronizedStmtE\", \"(anonymous namespace)::CGObjCMac::EmitSynchronizedStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtSynchronizedStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac11EmitTryStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_13ObjCAtTryStmtE\", \"(anonymous namespace)::CGObjCMac::EmitTryStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtTryStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac13EmitThrowStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_15ObjCAtThrowStmtE\", \"(anonymous namespace)::CGObjCMac::EmitThrowStmt(clang::CodeGen::CodeGenFunction&, clang::ObjCAtThrowStmt const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac16EmitObjCWeakReadERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::CGObjCMac::EmitObjCWeakRead(clang::CodeGen::CodeGenFunction&, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac18EmitObjCWeakAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCMac::EmitObjCWeakAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20EmitObjCGlobalAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_b\", \"(anonymous namespace)::CGObjCMac::EmitObjCGlobalAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac18EmitObjCIvarAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCMac::EmitObjCIvarAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac24EmitObjCStrongCastAssignERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_\", \"(anonymous namespace)::CGObjCMac::EmitObjCStrongCastAssign(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20EmitObjCValueForIvarERN5clang7CodeGen15CodeGenFunctionENS1_8QualTypeEPN4llvm5ValueEPKNS1_12ObjCIvarDeclEj\", \"(anonymous namespace)::CGObjCMac::EmitObjCValueForIvar(clang::CodeGen::CodeGenFunction&, clang::QualType, llvm::Value*, clang::ObjCIvarDecl const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac14EmitIvarOffsetERN5clang7CodeGen15CodeGenFunctionEPKNS1_17ObjCInterfaceDeclEPKNS1_12ObjCIvarDeclE\", \"(anonymous namespace)::CGObjCMac::EmitIvarOffset(clang::CodeGen::CodeGenFunction&, clang::ObjCInterfaceDecl const*, clang::ObjCIvarDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac24EmitGCMemmoveCollectableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_S7_\", \"(anonymous namespace)::CGObjCMac::EmitGCMemmoveCollectable(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac17GetOrEmitProtocolEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCMac::GetOrEmitProtocol(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac20GetOrEmitProtocolRefEPKN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::CGObjCMac::GetOrEmitProtocolRef(clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac28GetMethodDescriptionConstantEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCMac::GetMethodDescriptionConstant(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac16EmitProtocolListEN4llvm5TwineEPKPN5clang16ObjCProtocolDeclES7_\", \"(anonymous namespace)::CGObjCMac::EmitProtocolList(llvm::Twine, clang::ObjCProtocolDecl* const*, clang::ObjCProtocolDecl* const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac18EmitMethodDescListEN4llvm5TwineEPKcRKSt6vectorIPNS1_8ConstantESaIS7_EE\", \"(anonymous namespace)::CGObjCMac::EmitMethodDescList(llvm::Twine, char const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac25EmitTryOrSynchronizedStmtERN5clang7CodeGen15CodeGenFunctionERKNS1_4StmtE\", \"(anonymous namespace)::CGObjCMac::EmitTryOrSynchronizedStmt(clang::CodeGen::CodeGenFunction&, clang::Stmt const&)\"},\n    {\"_ZN12_GLOBAL__N_115ObjCTypesHelper22getExceptionTryEnterFnEv\", \"(anonymous namespace)::ObjCTypesHelper::getExceptionTryEnterFn()\"},\n    {\"_ZN12_GLOBAL__N_115ObjCTypesHelper11getSetJmpFnEv\", \"(anonymous namespace)::ObjCTypesHelper::getSetJmpFn()\"},\n    {\"_ZN12_GLOBAL__N_115ObjCTypesHelper21getExceptionExtractFnEv\", \"(anonymous namespace)::ObjCTypesHelper::getExceptionExtractFn()\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac12EmitClassRefERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEPKN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::CGObjCMac::EmitClassRef(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_121PerformFragileFinallyD1Ev\", \"(anonymous namespace)::PerformFragileFinally::~PerformFragileFinally()\"},\n    {\"_ZN12_GLOBAL__N_121PerformFragileFinallyD0Ev\", \"(anonymous namespace)::PerformFragileFinally::~PerformFragileFinally()\"},\n    {\"_ZN12_GLOBAL__N_121PerformFragileFinally4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::PerformFragileFinally::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac12EmitSelectorERN4llvm9IRBuilderILb0ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb0EEEEEN5clang8SelectorEb\", \"(anonymous namespace)::CGObjCMac::EmitSelector(llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >&, clang::Selector, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac17GetMethodConstantEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::CGObjCMac::GetMethodConstant(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac12EmitIvarListEPKN5clang22ObjCImplementationDeclEb\", \"(anonymous namespace)::CGObjCMac::EmitIvarList(clang::ObjCImplementationDecl const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_19CGObjCMac14EmitMethodListEN4llvm5TwineEPKcRKSt6vectorIPNS1_8ConstantESaIS7_EE\", \"(anonymous namespace)::CGObjCMac::EmitMethodList(llvm::Twine, char const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS_14GlobalVariableENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::InsertIntoBucket(clang::IdentifierInfo* const&, llvm::GlobalVariable* const&, std::pair<clang::IdentifierInfo*, llvm::GlobalVariable*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS_14GlobalVariableENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9StringMapIPNS_14GlobalVariableENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::GlobalVariable*>& llvm::StringMap<llvm::GlobalVariable*, llvm::MallocAllocator>::GetOrCreateValue<llvm::GlobalVariable*>(llvm::StringRef, llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPNS_14GlobalVariableENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::Selector, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::InsertIntoBucket(clang::Selector const&, llvm::GlobalVariable* const&, std::pair<clang::Selector, llvm::GlobalVariable*>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPNS_14GlobalVariableENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::Selector, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang9FieldDeclEE6appendINS1_11DeclContext22specific_decl_iteratorIS2_EEEEvT_S9_\", \"void llvm::SmallVectorImpl<clang::FieldDecl*>::append<clang::DeclContext::specific_decl_iterator<clang::FieldDecl> >(clang::DeclContext::specific_decl_iterator<clang::FieldDecl>, clang::DeclContext::specific_decl_iterator<clang::FieldDecl>)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14ObjCMethodDeclEPNS_8FunctionENS_12DenseMapInfoIS4_EENS7_IS6_EEE6insertERKSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::ObjCMethodDecl const*, llvm::Function*, llvm::DenseMapInfo<clang::ObjCMethodDecl const*>, llvm::DenseMapInfo<llvm::Function*> >::insert(std::pair<clang::ObjCMethodDecl const*, llvm::Function*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14ObjCMethodDeclEPNS_8FunctionENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::ObjCMethodDecl const*, llvm::Function*, llvm::DenseMapInfo<clang::ObjCMethodDecl const*>, llvm::DenseMapInfo<llvm::Function*> >::InsertIntoBucket(clang::ObjCMethodDecl const* const&, llvm::Function* const&, std::pair<clang::ObjCMethodDecl const*, llvm::Function*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14ObjCMethodDeclEPNS_8FunctionENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::ObjCMethodDecl const*, llvm::Function*, llvm::DenseMapInfo<clang::ObjCMethodDecl const*>, llvm::DenseMapInfo<llvm::Function*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<clang::IdentifierInfo*, char, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::IdentifierInfo*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<clang::IdentifierInfo*, char, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::IdentifierInfo* const&, char const&, std::pair<clang::IdentifierInfo*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, char, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9SetVectorISsSt6vectorISsSaISsEENS_8SmallSetISsLj16EEEED2Ev\", \"llvm::SetVector<std::string, std::vector<std::string, std::allocator<std::string> >, llvm::SmallSet<std::string, 16u> >::~SetVector()\"},\n    {\"_ZNSt6vectorIPN5clang14IdentifierInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::IdentifierInfo*, std::allocator<clang::IdentifierInfo*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::IdentifierInfo**, std::vector<clang::IdentifierInfo*, std::allocator<clang::IdentifierInfo*> > >, clang::IdentifierInfo* const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateGEPIPPNS_5ValueEEES7_S7_T_S9_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateGEP<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm8SmallSetISsLj16EE6insertERKSs\", \"llvm::SmallSet<std::string, 16u>::insert(std::string const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23GetAddrOfRTTIDescriptorENS_8QualTypeEb\", \"clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(clang::QualType, bool)\"},\n    {\"_ZN12_GLOBAL__N_111RTTIBuilder13BuildTypeInfoEN5clang8QualTypeEb\", \"(anonymous namespace)::RTTIBuilder::BuildTypeInfo(clang::QualType, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule29EmitFundamentalRTTIDescriptorENS_8QualTypeE\", \"clang::CodeGen::CodeGenModule::EmitFundamentalRTTIDescriptor(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule30EmitFundamentalRTTIDescriptorsEv\", \"clang::CodeGen::CodeGenModule::EmitFundamentalRTTIDescriptors()\"},\n    {\"_Z18getTypeInfoLinkageRN5clang7CodeGen13CodeGenModuleENS_8QualTypeE\", \"getTypeInfoLinkage(clang::CodeGen::CodeGenModule&, clang::QualType)\"},\n    {\"_Z23CanUseSingleInheritancePKN5clang13CXXRecordDeclE\", \"CanUseSingleInheritance(clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_111RTTIBuilder20BuildPointerTypeInfoEN5clang8QualTypeE\", \"(anonymous namespace)::RTTIBuilder::BuildPointerTypeInfo(clang::QualType)\"},\n    {\"_Z27ContainsIncompleteClassTypeN5clang8QualTypeE\", \"ContainsIncompleteClassType(clang::QualType)\"},\n    {\"_Z28ComputeVMIClassTypeInfoFlagsPKN5clang16CXXBaseSpecifierERN12_GLOBAL__N_19SeenBasesE\", \"ComputeVMIClassTypeInfoFlags(clang::CXXBaseSpecifier const*, (anonymous namespace)::SeenBases&)\"},\n    {\"_ZN5clang7CodeGen14CGBitFieldInfo8MakeInfoERNS0_12CodeGenTypesEPKNS_9FieldDeclEyyyj\", \"clang::CodeGen::CGBitFieldInfo::MakeInfo(clang::CodeGen::CodeGenTypes&, clang::FieldDecl const*, unsigned long long, unsigned long long, unsigned long long, unsigned int)\"},\n    {\"_ZN5clang7CodeGen14CGBitFieldInfo8MakeInfoERNS0_12CodeGenTypesEPKNS_9FieldDeclEyy\", \"clang::CodeGen::CGBitFieldInfo::MakeInfo(clang::CodeGen::CodeGenTypes&, clang::FieldDecl const*, unsigned long long, unsigned long long)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes19ComputeRecordLayoutEPKNS_10RecordDeclE\", \"clang::CodeGen::CodeGenTypes::ComputeRecordLayout(clang::RecordDecl const*)\"},\n    {\"_ZNK5clang7CodeGen14CGRecordLayout4dumpEv\", \"clang::CodeGen::CGRecordLayout::dump() const\"},\n    {\"_ZNK5clang7CodeGen14CGRecordLayout5printERN4llvm11raw_ostreamE\", \"clang::CodeGen::CGRecordLayout::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang7CodeGen14CGBitFieldInfo5printERN4llvm11raw_ostreamE\", \"clang::CodeGen::CGBitFieldInfo::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang7CodeGen14CGBitFieldInfo4dumpEv\", \"clang::CodeGen::CGBitFieldInfo::dump() const\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIjPKN5clang7CodeGen14CGBitFieldInfoEEEEiPKvS9_\", \"int llvm::array_pod_sort_comparator<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*> >(void const*, void const*)\"},\n    {\"_ZN12_GLOBAL__N_121CGRecordLayoutBuilder12LayoutFieldsEPKN5clang10RecordDeclE\", \"(anonymous namespace)::CGRecordLayoutBuilder::LayoutFields(clang::RecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_121CGRecordLayoutBuilder18LayoutVirtualBasesEPKN5clang13CXXRecordDeclERKNS1_15ASTRecordLayoutE\", \"(anonymous namespace)::CGRecordLayoutBuilder::LayoutVirtualBases(clang::CXXRecordDecl const*, clang::ASTRecordLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_121CGRecordLayoutBuilder17LayoutVirtualBaseEPKN5clang13CXXRecordDeclEy\", \"(anonymous namespace)::CGRecordLayoutBuilder::LayoutVirtualBase(clang::CXXRecordDecl const*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_121CGRecordLayoutBuilder20LayoutNonVirtualBaseEPKN5clang13CXXRecordDeclEy\", \"(anonymous namespace)::CGRecordLayoutBuilder::LayoutNonVirtualBase(clang::CXXRecordDecl const*, unsigned long long)\"},\n    {\"_ZNSt6vectorISt4pairIjPKN5clang7CodeGen14CGBitFieldInfoEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*>, std::allocator<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*>*, std::vector<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*>, std::allocator<std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*> > > >, std::pair<unsigned int, clang::CodeGen::CGBitFieldInfo const*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclENS1_7CodeGen14CGBitFieldInfoENS_12DenseMapInfoIS4_EENS7_IS6_EEE6insertERKSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<clang::CodeGen::CGBitFieldInfo> >::insert(std::pair<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclENS1_7CodeGen14CGBitFieldInfoENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<clang::CodeGen::CGBitFieldInfo> >::InsertIntoBucket(clang::FieldDecl const* const&, clang::CodeGen::CGBitFieldInfo const&, std::pair<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclENS1_7CodeGen14CGBitFieldInfoENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<clang::CodeGen::CGBitFieldInfo> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::FieldDecl const*, unsigned int, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::FieldDecl const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::FieldDecl const*, unsigned int, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::FieldDecl const* const&, unsigned int const&, std::pair<clang::FieldDecl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FieldDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::FieldDecl const*, unsigned int, llvm::DenseMapInfo<clang::FieldDecl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, unsigned int, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::CXXRecordDecl const*, unsigned int> const&)\"},\n    {\"_ZN5clang7CodeGen14CGRecordLayoutC2EPKN4llvm10StructTypeES5_b\", \"clang::CodeGen::CGRecordLayout::CGRecordLayout(llvm::StructType const*, llvm::StructType const*, bool)\"},\n    {\"_ZNSt6vectorIPKN4llvm4TypeESaIS3_EEaSERKS5_\", \"std::vector<llvm::Type const*, std::allocator<llvm::Type const*> >::operator=(std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPKN5clang9FieldDeclENS2_7CodeGen14CGBitFieldInfoEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::FieldDecl const*, clang::CodeGen::CGBitFieldInfo>, false>::grow(unsigned long)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitStopPointEPKNS_4StmtE\", \"clang::CodeGen::CodeGenFunction::EmitStopPoint(clang::Stmt const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction8EmitStmtEPKNS_4StmtE\", \"clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitSimpleStmtEPKNS_4StmtE\", \"clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitIndirectGotoStmtERKNS_16IndirectGotoStmtE\", \"clang::CodeGen::CodeGenFunction::EmitIndirectGotoStmt(clang::IndirectGotoStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction10EmitIfStmtERKNS_6IfStmtE\", \"clang::CodeGen::CodeGenFunction::EmitIfStmt(clang::IfStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitWhileStmtERKNS_9WhileStmtE\", \"clang::CodeGen::CodeGenFunction::EmitWhileStmt(clang::WhileStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction10EmitDoStmtERKNS_6DoStmtE\", \"clang::CodeGen::CodeGenFunction::EmitDoStmt(clang::DoStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitForStmtERKNS_7ForStmtE\", \"clang::CodeGen::CodeGenFunction::EmitForStmt(clang::ForStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitReturnStmtERKNS_10ReturnStmtE\", \"clang::CodeGen::CodeGenFunction::EmitReturnStmt(clang::ReturnStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14EmitSwitchStmtERKNS_10SwitchStmtE\", \"clang::CodeGen::CodeGenFunction::EmitSwitchStmt(clang::SwitchStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitAsmStmtERKNS_7AsmStmtE\", \"clang::CodeGen::CodeGenFunction::EmitAsmStmt(clang::AsmStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitCompoundStmtERKNS_12CompoundStmtEbNS0_12AggValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitCompoundStmt(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitDeclStmtERKNS_8DeclStmtE\", \"clang::CodeGen::CodeGenFunction::EmitDeclStmt(clang::DeclStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitLabelStmtERKNS_9LabelStmtE\", \"clang::CodeGen::CodeGenFunction::EmitLabelStmt(clang::LabelStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitGotoStmtERKNS_8GotoStmtE\", \"clang::CodeGen::CodeGenFunction::EmitGotoStmt(clang::GotoStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitBreakStmtERKNS_9BreakStmtE\", \"clang::CodeGen::CodeGenFunction::EmitBreakStmt(clang::BreakStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitContinueStmtERKNS_12ContinueStmtE\", \"clang::CodeGen::CodeGenFunction::EmitContinueStmt(clang::ContinueStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitDefaultStmtERKNS_11DefaultStmtE\", \"clang::CodeGen::CodeGenFunction::EmitDefaultStmt(clang::DefaultStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitCaseStmtERKNS_8CaseStmtE\", \"clang::CodeGen::CodeGenFunction::EmitCaseStmt(clang::CaseStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction9EmitLabelERKNS_9LabelStmtE\", \"clang::CodeGen::CodeGenFunction::EmitLabel(clang::LabelStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24SimplifyForwardingBlocksEPN4llvm10BasicBlockE\", \"clang::CodeGen::CodeGenFunction::SimplifyForwardingBlocks(llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction9EmitBlockEPN4llvm10BasicBlockEb\", \"clang::CodeGen::CodeGenFunction::EmitBlock(llvm::BasicBlock*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction10EmitBranchEPN4llvm10BasicBlockE\", \"clang::CodeGen::CodeGenFunction::EmitBranch(llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction19getJumpDestForLabelEPKNS_9LabelStmtE\", \"clang::CodeGen::CodeGenFunction::getJumpDestForLabel(clang::LabelStmt const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitReturnOfRValueENS0_6RValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitReturnOfRValue(clang::CodeGen::RValue, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17EmitCaseStmtRangeERKNS_8CaseStmtE\", \"clang::CodeGen::CodeGenFunction::EmitCaseStmtRange(clang::CaseStmt const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction18EmitAsmInputLValueERKNS_7AsmStmtERKNS_10TargetInfo14ConstraintInfoENS0_6LValueENS_8QualTypeERSs\", \"clang::CodeGen::CodeGenFunction::EmitAsmInputLValue(clang::AsmStmt const&, clang::TargetInfo::ConstraintInfo const&, clang::CodeGen::LValue, clang::QualType, std::string&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12EmitAsmInputERKNS_7AsmStmtERKNS_10TargetInfo14ConstraintInfoEPKNS_4ExprERSs\", \"clang::CodeGen::CodeGenFunction::EmitAsmInput(clang::AsmStmt const&, clang::TargetInfo::ConstraintInfo const&, clang::Expr const*, std::string&)\"},\n    {\"_Z18SimplifyConstraintPKcRKN5clang10TargetInfoEPN4llvm15SmallVectorImplINS2_14ConstraintInfoEEE\", \"SimplifyConstraint(char const*, clang::TargetInfo const&, llvm::SmallVectorImpl<clang::TargetInfo::ConstraintInfo>*)\"},\n    {\"_Z22AddVariableConstraintsRKSsRKN5clang4ExprERKNS1_10TargetInfoERNS1_7CodeGen13CodeGenModuleERKNS1_7AsmStmtE\", \"AddVariableConstraints(std::string const&, clang::Expr const&, clang::TargetInfo const&, clang::CodeGen::CodeGenModule&, clang::AsmStmt const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateSwitchEPNS_5ValueEPNS_10BasicBlockEj\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateSwitch(llvm::Value*, llvm::BasicBlock*, unsigned int)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCallIN9__gnu_cxx17__normal_iteratorIPPNS_5ValueESt6vectorIS9_SaIS9_EEEEEEPNS_8CallInstES9_T_SH_RKNS_5TwineE\", \"llvm::CallInst* llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCall<__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >(llvm::Value*, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, llvm::Twine const&)\"},\n    {\"_ZNSt6vectorIN5clang7CodeGen6LValueESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::CodeGen::LValue, std::allocator<clang::CodeGen::LValue> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CodeGen::LValue*, std::vector<clang::CodeGen::LValue, std::allocator<clang::CodeGen::LValue> > >, clang::CodeGen::LValue const&)\"},\n    {\"_ZNSt6vectorIN5clang8QualTypeESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::QualType, std::allocator<clang::QualType> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::QualType*, std::vector<clang::QualType, std::allocator<clang::QualType> > >, clang::QualType const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::VarDecl const*, llvm::Value*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(clang::VarDecl const* const&, llvm::Value* const&, std::pair<clang::VarDecl const*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, llvm::Value*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9LabelStmtENS1_7CodeGen15CodeGenFunction8JumpDestENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::LabelStmt const*, clang::CodeGen::CodeGenFunction::JumpDest, llvm::DenseMapInfo<clang::LabelStmt const*>, llvm::DenseMapInfo<clang::CodeGen::CodeGenFunction::JumpDest> >::InsertIntoBucket(clang::LabelStmt const* const&, clang::CodeGen::CodeGenFunction::JumpDest const&, std::pair<clang::LabelStmt const*, clang::CodeGen::CodeGenFunction::JumpDest>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9LabelStmtENS1_7CodeGen15CodeGenFunction8JumpDestENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::LabelStmt const*, clang::CodeGen::CodeGenFunction::JumpDest, llvm::DenseMapInfo<clang::LabelStmt const*>, llvm::DenseMapInfo<clang::CodeGen::CodeGenFunction::JumpDest> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitCXXTemporaryEPKNS_12CXXTemporaryEPN4llvm5ValueE\", \"clang::CodeGen::CodeGenFunction::EmitCXXTemporary(clang::CXXTemporary const*, llvm::Value*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitExprWithCleanupsEPKNS_16ExprWithCleanupsENS0_12AggValueSlotE\", \"clang::CodeGen::CodeGenFunction::EmitExprWithCleanups(clang::ExprWithCleanups const*, clang::CodeGen::AggValueSlot)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction26EmitExprWithCleanupsLValueEPKNS_16ExprWithCleanupsE\", \"clang::CodeGen::CodeGenFunction::EmitExprWithCleanupsLValue(clang::ExprWithCleanups const*)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEED1Ev\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::~ConditionalCleanup2()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEED0Ev\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::~ConditionalCleanup2()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack19ConditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEE4EmitERNS0_15CodeGenFunctionEb\", \"clang::CodeGen::EHScopeStack::ConditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEED1Ev\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::~UnconditionalCleanup2()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEED0Ev\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::~UnconditionalCleanup2()\"},\n    {\"_ZN5clang7CodeGen12EHScopeStack21UnconditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEE4EmitERNS0_15CodeGenFunctionEb\", \"clang::CodeGen::EHScopeStack::UnconditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables17EmitVTTDefinitionEPN4llvm14GlobalVariableENS2_11GlobalValue12LinkageTypesEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::EmitVTTDefinition(llvm::GlobalVariable*, llvm::GlobalValue::LinkageTypes, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_110VTTBuilderC1ERN5clang7CodeGen13CodeGenModuleEPKNS1_13CXXRecordDeclEb\", \"(anonymous namespace)::VTTBuilder::VTTBuilder(clang::CodeGen::CodeGenModule&, clang::CXXRecordDecl const*, bool)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables12GetAddrOfVTTEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::GetAddrOfVTT(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables17needsVTTParameterENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenVTables::needsVTTParameter(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables14getSubVTTIndexEPKNS_13CXXRecordDeclENS0_13BaseSubobjectE\", \"clang::CodeGen::CodeGenVTables::getSubVTTIndex(clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables31getSecondaryVirtualPointerIndexEPKNS_13CXXRecordDeclENS0_13BaseSubobjectE\", \"clang::CodeGen::CodeGenVTables::getSecondaryVirtualPointerIndex(clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject)\"},\n    {\"_ZN12_GLOBAL__N_110VTTBuilder9LayoutVTTEN5clang7CodeGen13BaseSubobjectEb\", \"(anonymous namespace)::VTTBuilder::LayoutVTT(clang::CodeGen::BaseSubobject, bool)\"},\n    {\"_ZN12_GLOBAL__N_110VTTBuilder16AddVTablePointerEN5clang7CodeGen13BaseSubobjectEPN4llvm8ConstantEPKNS1_13CXXRecordDeclERKNS4_8DenseMapIS3_yNS4_12DenseMapInfoIS3_EENSB_IyEEEE\", \"(anonymous namespace)::VTTBuilder::AddVTablePointer(clang::CodeGen::BaseSubobject, llvm::Constant*, clang::CXXRecordDecl const*, llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> > const&)\"},\n    {\"_ZN12_GLOBAL__N_110VTTBuilder17LayoutVirtualVTTsEPKN5clang13CXXRecordDeclERN4llvm11SmallPtrSetIS4_Lj4EEE\", \"(anonymous namespace)::VTTBuilder::LayoutVirtualVTTs(clang::CXXRecordDecl const*, llvm::SmallPtrSet<clang::CXXRecordDecl const*, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_110VTTBuilder30LayoutSecondaryVirtualPointersEN5clang7CodeGen13BaseSubobjectEbPN4llvm8ConstantEPKNS1_13CXXRecordDeclERKNS4_8DenseMapIS3_yNS4_12DenseMapInfoIS3_EENSB_IyEEEERNS4_11SmallPtrSetIS9_Lj4EEE\", \"(anonymous namespace)::VTTBuilder::LayoutSecondaryVirtualPointers(clang::CodeGen::BaseSubobject, bool, llvm::Constant*, clang::CXXRecordDecl const*, llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> > const&, llvm::SmallPtrSet<clang::CXXRecordDecl const*, 4u>&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclENS2_7CodeGen13BaseSubobjectEEyNS_12DenseMapInfoIS8_EENS9_IyEEE6insertERKS1_IS8_yE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> >, llvm::DenseMapInfo<unsigned long long> >::insert(std::pair<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen13BaseSubobjectEyNS_12DenseMapInfoIS3_EENS4_IyEEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> >::FindAndConstruct(clang::CodeGen::BaseSubobject const&)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables26ComputeMethodVTableIndicesEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::ComputeMethodVTableIndices(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables29getNumVirtualFunctionPointersEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::getNumVirtualFunctionPointers(clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_127FindNearestOverriddenMethodEPKN5clang13CXXMethodDeclERN4llvm14SmallSetVectorIPKNS0_13CXXRecordDeclELj8EEE\", \"(anonymous namespace)::FindNearestOverriddenMethod(clang::CXXMethodDecl const*, llvm::SmallSetVector<clang::CXXRecordDecl const*, 8u>&)\"},\n    {\"_ZN12_GLOBAL__N_133ComputeReturnAdjustmentBaseOffsetERN5clang10ASTContextEPKNS0_13CXXMethodDeclES5_\", \"(anonymous namespace)::ComputeReturnAdjustmentBaseOffset(clang::ASTContext&, clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables20getMethodVTableIndexENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenVTables::getMethodVTableIndex(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables24ShouldEmitVTableInThisTUEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::ShouldEmitVTableInThisTU(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables26getVirtualBaseOffsetOffsetEPKNS_13CXXRecordDeclES4_\", \"clang::CodeGen::CodeGenVTables::getVirtualBaseOffsetOffset(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_126VCallAndVBaseOffsetBuilderC1EPKN5clang13CXXRecordDeclES4_PKNS_15FinalOverridersENS1_7CodeGen13BaseSubobjectEby\", \"(anonymous namespace)::VCallAndVBaseOffsetBuilder::VCallAndVBaseOffsetBuilder(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*, (anonymous namespace)::FinalOverriders const*, clang::CodeGen::BaseSubobject, bool, unsigned long long)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables15getAddressPointENS0_13BaseSubobjectEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::getAddressPoint(clang::CodeGen::BaseSubobject, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule14GetAddrOfThunkENS0_10GlobalDeclERKNS_9ThunkInfoE\", \"clang::CodeGen::CodeGenModule::GetAddrOfThunk(clang::CodeGen::GlobalDecl, clang::ThunkInfo const&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13GenerateThunkEPN4llvm8FunctionENS0_10GlobalDeclERKNS_9ThunkInfoE\", \"clang::CodeGen::CodeGenFunction::GenerateThunk(llvm::Function*, clang::CodeGen::GlobalDecl, clang::ThunkInfo const&)\"},\n    {\"_Z21PerformTypeAdjustmentRN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueExx\", \"PerformTypeAdjustment(clang::CodeGen::CodeGenFunction&, llvm::Value*, long long, long long)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables9EmitThunkENS0_10GlobalDeclERKNS_9ThunkInfoEb\", \"clang::CodeGen::CodeGenVTables::EmitThunk(clang::CodeGen::GlobalDecl, clang::ThunkInfo const&, bool)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables33MaybeEmitThunkAvailableExternallyENS0_10GlobalDeclERKNS_9ThunkInfoE\", \"clang::CodeGen::CodeGenVTables::MaybeEmitThunkAvailableExternally(clang::CodeGen::GlobalDecl, clang::ThunkInfo const&)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables10EmitThunksENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenVTables::EmitThunks(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables31ComputeVTableRelatedInformationEPKNS_13CXXRecordDeclEb\", \"clang::CodeGen::CodeGenVTables::ComputeVTableRelatedInformation(clang::CXXRecordDecl const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilderC1ERN5clang7CodeGen14CodeGenVTablesEPKNS1_13CXXRecordDeclEybS7_\", \"(anonymous namespace)::VTableBuilder::VTableBuilder(clang::CodeGen::CodeGenVTables&, clang::CXXRecordDecl const*, unsigned long long, bool, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilderD1Ev\", \"(anonymous namespace)::VTableBuilder::~VTableBuilder()\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables23CreateVTableInitializerEPKNS_13CXXRecordDeclEPKyjRKN4llvm11SmallVectorISt4pairIyNS_9ThunkInfoEELj1EEE\", \"clang::CodeGen::CodeGenVTables::CreateVTableInitializer(clang::CXXRecordDecl const*, unsigned long long const*, unsigned int, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> const&)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables15GetAddrOfVTableEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::GetAddrOfVTable(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables20EmitVTableDefinitionEPN4llvm14GlobalVariableENS2_11GlobalValue12LinkageTypesEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::EmitVTableDefinition(llvm::GlobalVariable*, llvm::GlobalValue::LinkageTypes, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder10dumpLayoutERN4llvm11raw_ostreamE\", \"(anonymous namespace)::VTableBuilder::dumpLayout(llvm::raw_ostream&)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables26GenerateConstructionVTableEPKNS_13CXXRecordDeclERKNS0_13BaseSubobjectEbRN4llvm8DenseMapIS5_yNS8_12DenseMapInfoIS5_EENSA_IyEEEE\", \"clang::CodeGen::CodeGenVTables::GenerateConstructionVTable(clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject const&, bool, llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> >&)\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTables17GenerateClassDataEN4llvm11GlobalValue12LinkageTypesEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenVTables::GenerateClassData(llvm::GlobalValue::LinkageTypes, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder32LayoutPrimaryAndSecondaryVTablesEN5clang7CodeGen13BaseSubobjectEbby\", \"(anonymous namespace)::VTableBuilder::LayoutPrimaryAndSecondaryVTables(clang::CodeGen::BaseSubobject, bool, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder28DeterminePrimaryVirtualBasesEPKN5clang13CXXRecordDeclEyRN4llvm11SmallPtrSetIS4_Lj4EEE\", \"(anonymous namespace)::VTableBuilder::DeterminePrimaryVirtualBases(clang::CXXRecordDecl const*, unsigned long long, llvm::SmallPtrSet<clang::CXXRecordDecl const*, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder28LayoutVTablesForVirtualBasesEPKN5clang13CXXRecordDeclERN4llvm11SmallPtrSetIS4_Lj4EEE\", \"(anonymous namespace)::VTableBuilder::LayoutVTablesForVirtualBases(clang::CXXRecordDecl const*, llvm::SmallPtrSet<clang::CXXRecordDecl const*, 4u>&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEN12_GLOBAL__N_114VCallOffsetMapENS_12DenseMapInfoIS4_EENS7_IS6_EEEixERKS4_\", \"llvm::DenseMap<clang::CXXRecordDecl const*, (anonymous namespace)::VCallOffsetMap, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<(anonymous namespace)::VCallOffsetMap> >::operator[](clang::CXXRecordDecl const* const&)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder10AddMethodsEN5clang7CodeGen13BaseSubobjectEyPKNS1_13CXXRecordDeclEyRN4llvm14SmallSetVectorIS6_Lj8EEE\", \"(anonymous namespace)::VTableBuilder::AddMethods(clang::CodeGen::BaseSubobject, unsigned long long, clang::CXXRecordDecl const*, unsigned long long, llvm::SmallSetVector<clang::CXXRecordDecl const*, 8u>&)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder22LayoutSecondaryVTablesEN5clang7CodeGen13BaseSubobjectEby\", \"(anonymous namespace)::VTableBuilder::LayoutSecondaryVTables(clang::CodeGen::BaseSubobject, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_113VTableBuilder21ComputeThisAdjustmentEPKN5clang13CXXMethodDeclEyNS_15FinalOverriders13OverriderInfoE\", \"(anonymous namespace)::VTableBuilder::ComputeThisAdjustment(clang::CXXMethodDecl const*, unsigned long long, (anonymous namespace)::FinalOverriders::OverriderInfo)\"},\n    {\"_ZN12_GLOBAL__N_114VCallOffsetMap26MethodsCanShareVCallOffsetEPKN5clang13CXXMethodDeclES4_\", \"(anonymous namespace)::VCallOffsetMap::MethodsCanShareVCallOffset(clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_117ComputeBaseOffsetERN5clang10ASTContextEPKNS0_13CXXRecordDeclERKNS0_11CXXBasePathE\", \"(anonymous namespace)::ComputeBaseOffset(clang::ASTContext&, clang::CXXRecordDecl const*, clang::CXXBasePath const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPKN5clang13CXXMethodDeclEyEN12_GLOBAL__N_115FinalOverriders13OverriderInfoENS_12DenseMapInfoIS6_EENSA_IS9_EEE15LookupBucketForERKS6_RPS1_IS6_S9_E\", \"llvm::DenseMap<std::pair<clang::CXXMethodDecl const*, unsigned long long>, (anonymous namespace)::FinalOverriders::OverriderInfo, llvm::DenseMapInfo<std::pair<clang::CXXMethodDecl const*, unsigned long long> >, llvm::DenseMapInfo<(anonymous namespace)::FinalOverriders::OverriderInfo> >::LookupBucketFor(std::pair<clang::CXXMethodDecl const*, unsigned long long> const&, std::pair<std::pair<clang::CXXMethodDecl const*, unsigned long long>, (anonymous namespace)::FinalOverriders::OverriderInfo>*&) const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclEN12_GLOBAL__N_113VTableBuilder10MethodInfoENS_12DenseMapInfoIS4_EENS8_IS7_EEE6insertERKSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, (anonymous namespace)::VTableBuilder::MethodInfo, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<(anonymous namespace)::VTableBuilder::MethodInfo> >::insert(std::pair<clang::CXXMethodDecl const*, (anonymous namespace)::VTableBuilder::MethodInfo> const&)\"},\n    {\"_ZN12_GLOBAL__N_130OverridesIndirectMethodInBasesEPKN5clang13CXXMethodDeclERN4llvm14SmallSetVectorIPKNS0_13CXXRecordDeclELj8EEE\", \"(anonymous namespace)::OverridesIndirectMethodInBases(clang::CXXMethodDecl const*, llvm::SmallSetVector<clang::CXXRecordDecl const*, 8u>&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclEN12_GLOBAL__N_113VTableBuilder10MethodInfoENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, (anonymous namespace)::VTableBuilder::MethodInfo, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<(anonymous namespace)::VTableBuilder::MethodInfo> >::InsertIntoBucket(clang::CXXMethodDecl const* const&, (anonymous namespace)::VTableBuilder::MethodInfo const&, std::pair<clang::CXXMethodDecl const*, (anonymous namespace)::VTableBuilder::MethodInfo>*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_115VTableComponentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::VTableComponent, false>::grow(unsigned long)\"},\n    {\"_ZN12_GLOBAL__N_115FinalOverriders18ComputeBaseOffsetsEN5clang7CodeGen13BaseSubobjectEbyRN4llvm8DenseMapISt4pairIPKNS1_13CXXRecordDeclEjEyNS4_12DenseMapInfoISA_EENSB_IyEEEESF_RNS5_IS9_jNSB_IS9_EENSB_IjEEEE\", \"(anonymous namespace)::FinalOverriders::ComputeBaseOffsets(clang::CodeGen::BaseSubobject, bool, unsigned long long, llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, unsigned int> >, llvm::DenseMapInfo<unsigned long long> >&, llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, unsigned int> >, llvm::DenseMapInfo<unsigned long long> >&, llvm::DenseMap<clang::CXXRecordDecl const*, unsigned int, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN12_GLOBAL__N_126VCallAndVBaseOffsetBuilder23AddVCallAndVBaseOffsetsEN5clang7CodeGen13BaseSubobjectEby\", \"(anonymous namespace)::VCallAndVBaseOffsetBuilder::AddVCallAndVBaseOffsets(clang::CodeGen::BaseSubobject, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_126VCallAndVBaseOffsetBuilder15AddVBaseOffsetsEPKN5clang13CXXRecordDeclEy\", \"(anonymous namespace)::VCallAndVBaseOffsetBuilder::AddVBaseOffsets(clang::CXXRecordDecl const*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_126VCallAndVBaseOffsetBuilder15AddVCallOffsetsEN5clang7CodeGen13BaseSubobjectEy\", \"(anonymous namespace)::VCallAndVBaseOffsetBuilder::AddVCallOffsets(clang::CodeGen::BaseSubobject, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_127ComputeAllOverriddenMethodsEPKN5clang13CXXMethodDeclERN4llvm11SmallPtrSetIS3_Lj8EEE\", \"(anonymous namespace)::ComputeAllOverriddenMethods(clang::CXXMethodDecl const*, llvm::SmallPtrSet<clang::CXXMethodDecl const*, 8u>&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclES5_ExNS_12DenseMapInfoIS6_EENS7_IxEEE6insertERKS1_IS6_xE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> >, llvm::DenseMapInfo<long long> >::insert(std::pair<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIyN5clang9ThunkInfoEEE6appendINS_16DenseMapIteratorIyS3_NS_12DenseMapInfoIyEENS8_IS3_EELb1EEEEEvT_SC_\", \"void llvm::SmallVectorImpl<std::pair<unsigned long long, clang::ThunkInfo> >::append<llvm::DenseMapIterator<unsigned long long, clang::ThunkInfo, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<clang::ThunkInfo>, true> >(llvm::DenseMapIterator<unsigned long long, clang::ThunkInfo, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<clang::ThunkInfo>, true>, llvm::DenseMapIterator<unsigned long long, clang::ThunkInfo, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<clang::ThunkInfo>, true>)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPNS_14GlobalVariableENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, llvm::GlobalVariable* const&, std::pair<clang::CXXRecordDecl const*, llvm::GlobalVariable*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPNS_14GlobalVariableENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::GlobalVariable*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen13BaseSubobjectEyNS_12DenseMapInfoIS3_EENS4_IyEEE6insertERKSt4pairIS3_yE\", \"llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> >::insert(std::pair<clang::CodeGen::BaseSubobject, unsigned long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen13BaseSubobjectEyNS_12DenseMapInfoIS3_EENS4_IyEEE16InsertIntoBucketERKS3_RKyPSt4pairIS3_yE\", \"llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(clang::CodeGen::BaseSubobject const&, unsigned long long const&, std::pair<clang::CodeGen::BaseSubobject, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen13BaseSubobjectEyNS_12DenseMapInfoIS3_EENS4_IyEEE4growEj\", \"llvm::DenseMap<clang::CodeGen::BaseSubobject, unsigned long long, llvm::DenseMapInfo<clang::CodeGen::BaseSubobject>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclES5_ExNS_12DenseMapInfoIS6_EENS7_IxEEE15LookupBucketForERKS6_RPS1_IS6_xE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> >, llvm::DenseMapInfo<long long> >::LookupBucketFor(std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> const&, std::pair<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long>*&) const\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclENS2_7CodeGen13BaseSubobjectEEyNS_12DenseMapInfoIS8_EENS9_IyEEE15LookupBucketForERKS8_RPS1_IS8_yE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> >, llvm::DenseMapInfo<unsigned long long> >::LookupBucketFor(std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> const&, std::pair<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclENS2_7CodeGen13BaseSubobjectEEyNS_12DenseMapInfoIS8_EENS9_IyEEE16InsertIntoBucketERKS8_RKyPS1_IS8_yE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> >, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> const&, unsigned long long const&, std::pair<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclENS2_7CodeGen13BaseSubobjectEEyNS_12DenseMapInfoIS8_EENS9_IyEEE4growEj\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CodeGen::BaseSubobject> >, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIyN5clang9ThunkInfoEElEvT_S5_T0_\", \"void std::__introsort_loop<std::pair<unsigned long long, clang::ThunkInfo>*, long>(std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPSt4pairIyN5clang9ThunkInfoEEEvT_S5_\", \"void std::__final_insertion_sort<std::pair<unsigned long long, clang::ThunkInfo>*>(std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIyN5clang9ThunkInfoEEEvT_S5_\", \"void std::__insertion_sort<std::pair<unsigned long long, clang::ThunkInfo>*>(std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*)\"},\n    {\"_ZSt21__unguarded_partitionIPSt4pairIyN5clang9ThunkInfoEES3_ET_S5_S5_T0_\", \"std::pair<unsigned long long, clang::ThunkInfo>* std::__unguarded_partition<std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo> >(std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>)\"},\n    {\"_ZSt8__medianISt4pairIyN5clang9ThunkInfoEEERKT_S6_S6_S6_\", \"std::pair<unsigned long long, clang::ThunkInfo> const& std::__median<std::pair<unsigned long long, clang::ThunkInfo> >(std::pair<unsigned long long, clang::ThunkInfo> const&, std::pair<unsigned long long, clang::ThunkInfo> const&, std::pair<unsigned long long, clang::ThunkInfo> const&)\"},\n    {\"_ZSt13__heap_selectIPSt4pairIyN5clang9ThunkInfoEEEvT_S5_S5_\", \"void std::__heap_select<std::pair<unsigned long long, clang::ThunkInfo>*>(std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*, std::pair<unsigned long long, clang::ThunkInfo>*)\"},\n    {\"_ZSt13__adjust_heapIPSt4pairIyN5clang9ThunkInfoEElS3_EvT_T0_S6_T1_\", \"void std::__adjust_heap<std::pair<unsigned long long, clang::ThunkInfo>*, long, std::pair<unsigned long long, clang::ThunkInfo> >(std::pair<unsigned long long, clang::ThunkInfo>*, long, long, std::pair<unsigned long long, clang::ThunkInfo>)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIyN5clang9ThunkInfoEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<unsigned long long, clang::ThunkInfo>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorISt4pairIyNS1_9ThunkInfoEELj1EEENS_12DenseMapInfoIS4_EENSA_IS9_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> > >::FindAndConstruct(clang::CXXRecordDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorISt4pairIyNS1_9ThunkInfoEELj1EEENS_12DenseMapInfoIS4_EENSA_IS9_EEE16InsertIntoBucketERKS4_RKS9_PS6_IS4_S9_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> > >::InsertIntoBucket(clang::CXXRecordDecl const* const&, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> const&, std::pair<clang::CXXRecordDecl const*, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_11SmallVectorISt4pairIyNS1_9ThunkInfoEELj1EEENS_12DenseMapInfoIS4_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u>, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned long long, clang::ThunkInfo>, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIyN5clang9ThunkInfoEEEaSERKS5_\", \"llvm::SmallVectorImpl<std::pair<unsigned long long, clang::ThunkInfo> >::operator=(llvm::SmallVectorImpl<std::pair<unsigned long long, clang::ThunkInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS_11SmallVectorINS1_9ThunkInfoELj1EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE6insertERKSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ThunkInfo, 1u> > >::insert(std::pair<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS_11SmallVectorINS1_9ThunkInfoELj1EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ThunkInfo, 1u> > >::InsertIntoBucket(clang::CXXMethodDecl const* const&, llvm::SmallVector<clang::ThunkInfo, 1u> const&, std::pair<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS_11SmallVectorINS1_9ThunkInfoELj1EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ThunkInfo, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang9ThunkInfoEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::ThunkInfo>::operator=(llvm::SmallVectorImpl<clang::ThunkInfo> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang9ThunkInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ThunkInfo, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIPKN5clang13CXXRecordDeclESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::CXXRecordDecl const*, std::allocator<clang::CXXRecordDecl const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CXXRecordDecl const**, std::vector<clang::CXXRecordDecl const*, std::allocator<clang::CXXRecordDecl const*> > >, clang::CXXRecordDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_14PointerIntPairIPyLj1EbNS_21PointerLikeTypeTraitsIS6_EEEENS_12DenseMapInfoIS4_EENSA_IS9_EEE16InsertIntoBucketERKS4_RKS9_PSt4pairIS4_S9_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> >, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> > > >::InsertIntoBucket(clang::CXXRecordDecl const* const&, llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> > const&, std::pair<clang::CXXRecordDecl const*, llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS_14PointerIntPairIPyLj1EbNS_21PointerLikeTypeTraitsIS6_EEEENS_12DenseMapInfoIS4_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> >, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<llvm::PointerIntPair<unsigned long long*, 1u, bool, llvm::PointerLikeTypeTraits<unsigned long long*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclES5_ExNS_12DenseMapInfoIS6_EENS7_IxEEE16InsertIntoBucketERKS6_RKxPS1_IS6_xE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> >, llvm::DenseMapInfo<long long> >::InsertIntoBucket(std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> const&, long long const&, std::pair<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclES5_ExNS_12DenseMapInfoIS6_EENS7_IxEEE4growEj\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*>, long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, clang::CXXRecordDecl const*> >, llvm::DenseMapInfo<long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEyNS_12DenseMapInfoIS4_EENS5_IyEEE16InsertIntoBucketERKS4_RKyPSt4pairIS4_yE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, unsigned long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, unsigned long long const&, std::pair<clang::CXXRecordDecl const*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEyNS_12DenseMapInfoIS4_EENS5_IyEEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, unsigned long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen10GlobalDeclExNS_12DenseMapInfoIS3_EENS4_IxEEE16InsertIntoBucketERKS3_RKxPSt4pairIS3_xE\", \"llvm::DenseMap<clang::CodeGen::GlobalDecl, long long, llvm::DenseMapInfo<clang::CodeGen::GlobalDecl>, llvm::DenseMapInfo<long long> >::InsertIntoBucket(clang::CodeGen::GlobalDecl const&, long long const&, std::pair<clang::CodeGen::GlobalDecl, long long>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen10GlobalDeclExNS_12DenseMapInfoIS3_EENS4_IxEEE4growEj\", \"llvm::DenseMap<clang::CodeGen::GlobalDecl, long long, llvm::DenseMapInfo<clang::CodeGen::GlobalDecl>, llvm::DenseMapInfo<long long> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIySt4pairIKyN5clang7CodeGen13BaseSubobjectEESt10_Select1stIS5_ESt4lessIyESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned long long, std::pair<unsigned long long const, clang::CodeGen::BaseSubobject>, std::_Select1st<std::pair<unsigned long long const, clang::CodeGen::BaseSubobject> >, std::less<unsigned long long>, std::allocator<std::pair<unsigned long long const, clang::CodeGen::BaseSubobject> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned long long const, clang::CodeGen::BaseSubobject> >*)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPKN5clang13CXXMethodDeclEESt10_Select1stIS6_ESt4lessISsESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, clang::CXXMethodDecl const*>, std::_Select1st<std::pair<std::string const, clang::CXXMethodDecl const*> >, std::less<std::string>, std::allocator<std::pair<std::string const, clang::CXXMethodDecl const*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, clang::CXXMethodDecl const*> >*)\"},\n    {\"_ZSt16__introsort_loopIPN5clang9ThunkInfoElEvT_S3_T0_\", \"void std::__introsort_loop<clang::ThunkInfo*, long>(clang::ThunkInfo*, clang::ThunkInfo*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPN5clang9ThunkInfoEEvT_S3_\", \"void std::__final_insertion_sort<clang::ThunkInfo*>(clang::ThunkInfo*, clang::ThunkInfo*)\"},\n    {\"_ZSt16__insertion_sortIPN5clang9ThunkInfoEEvT_S3_\", \"void std::__insertion_sort<clang::ThunkInfo*>(clang::ThunkInfo*, clang::ThunkInfo*)\"},\n    {\"_ZSt21__unguarded_partitionIPN5clang9ThunkInfoES1_ET_S3_S3_T0_\", \"clang::ThunkInfo* std::__unguarded_partition<clang::ThunkInfo*, clang::ThunkInfo>(clang::ThunkInfo*, clang::ThunkInfo*, clang::ThunkInfo)\"},\n    {\"_ZSt8__medianIN5clang9ThunkInfoEERKT_S4_S4_S4_\", \"clang::ThunkInfo const& std::__median<clang::ThunkInfo>(clang::ThunkInfo const&, clang::ThunkInfo const&, clang::ThunkInfo const&)\"},\n    {\"_ZSt13__heap_selectIPN5clang9ThunkInfoEEvT_S3_S3_\", \"void std::__heap_select<clang::ThunkInfo*>(clang::ThunkInfo*, clang::ThunkInfo*, clang::ThunkInfo*)\"},\n    {\"_ZSt13__adjust_heapIPN5clang9ThunkInfoElS1_EvT_T0_S4_T1_\", \"void std::__adjust_heap<clang::ThunkInfo*, long, clang::ThunkInfo>(clang::ThunkInfo*, long, long, clang::ThunkInfo)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS_11SmallVectorINS1_9ThunkInfoELj1EEENS_12DenseMapInfoIS4_EENS8_IS7_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::CXXMethodDecl const*, llvm::SmallVector<clang::ThunkInfo, 1u>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ThunkInfo, 1u> > >::FindAndConstruct(clang::CXXMethodDecl const* const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPKN5clang13CXXMethodDeclEESt10_Select1stIS6_ESt4lessISsESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::string, std::pair<std::string const, clang::CXXMethodDecl const*>, std::_Select1st<std::pair<std::string const, clang::CXXMethodDecl const*> >, std::less<std::string>, std::allocator<std::pair<std::string const, clang::CXXMethodDecl const*> > >::_M_insert_unique(std::pair<std::string const, clang::CXXMethodDecl const*> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPKN5clang13CXXMethodDeclEESt10_Select1stIS6_ESt4lessISsESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::string, std::pair<std::string const, clang::CXXMethodDecl const*>, std::_Select1st<std::pair<std::string const, clang::CXXMethodDecl const*> >, std::less<std::string>, std::allocator<std::pair<std::string const, clang::CXXMethodDecl const*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, clang::CXXMethodDecl const*> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsxESt10_Select1stIS2_ESt4lessISsESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, long long>, std::_Select1st<std::pair<std::string const, long long> >, std::less<std::string>, std::allocator<std::pair<std::string const, long long> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, long long> >*)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsxESt10_Select1stIS2_ESt4lessISsESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<std::string, std::pair<std::string const, long long>, std::_Select1st<std::pair<std::string const, long long> >, std::less<std::string>, std::allocator<std::pair<std::string const, long long> > >::_M_insert_unique(std::pair<std::string const, long long> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsxESt10_Select1stIS2_ESt4lessISsESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_\", \"std::_Rb_tree<std::string, std::pair<std::string const, long long>, std::_Select1st<std::pair<std::string const, long long> >, std::less<std::string>, std::allocator<std::pair<std::string const, long long> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, long long> const&)\"},\n    {\"_ZNK5clang15ASTRecordLayout25getVBaseClassOffsetInBitsEPKNS_13CXXRecordDeclE\", \"clang::ASTRecordLayout::getVBaseClassOffsetInBits(clang::CXXRecordDecl const*) const\"},\n    {\"_ZSt6__findIPN5clang9ThunkInfoES1_ET_S3_S3_RKT0_St26random_access_iterator_tag\", \"clang::ThunkInfo* std::__find<clang::ThunkInfo*, clang::ThunkInfo>(clang::ThunkInfo*, clang::ThunkInfo*, clang::ThunkInfo const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIyN5clang9ThunkInfoENS_12DenseMapInfoIyEENS3_IS2_EEE16InsertIntoBucketERKyRKS2_PSt4pairIyS2_E\", \"llvm::DenseMap<unsigned long long, clang::ThunkInfo, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<clang::ThunkInfo> >::InsertIntoBucket(unsigned long long const&, clang::ThunkInfo const&, std::pair<unsigned long long, clang::ThunkInfo>*)\"},\n    {\"_ZN4llvm8DenseMapIyN5clang9ThunkInfoENS_12DenseMapInfoIyEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned long long, clang::ThunkInfo, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<clang::ThunkInfo> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclExNS_12DenseMapInfoIS4_EENS5_IxEEE8CopyFromERKS8_\", \"llvm::DenseMap<clang::CXXRecordDecl const*, long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<long long> >::CopyFrom(llvm::DenseMap<clang::CXXRecordDecl const*, long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<long long> > const&)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPKN5clang13CXXMethodDeclExEEaSERKS7_\", \"llvm::SmallVectorImpl<std::pair<clang::CXXMethodDecl const*, long long> >::operator=(llvm::SmallVectorImpl<std::pair<clang::CXXMethodDecl const*, long long> > const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclEjEyNS_12DenseMapInfoIS6_EENS7_IyEEE15LookupBucketForERKS6_RPS1_IS6_yE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, unsigned int> >, llvm::DenseMapInfo<unsigned long long> >::LookupBucketFor(std::pair<clang::CXXRecordDecl const*, unsigned int> const&, std::pair<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclEjEyNS_12DenseMapInfoIS6_EENS7_IyEEE16InsertIntoBucketERKS6_RKyPS1_IS6_yE\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, unsigned int> >, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(std::pair<clang::CXXRecordDecl const*, unsigned int> const&, unsigned long long const&, std::pair<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPKN5clang13CXXRecordDeclEjEyNS_12DenseMapInfoIS6_EENS7_IyEEE4growEj\", \"llvm::DenseMap<std::pair<clang::CXXRecordDecl const*, unsigned int>, unsigned long long, llvm::DenseMapInfo<std::pair<clang::CXXRecordDecl const*, unsigned int> >, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE26CreateConstInBoundsGEP1_64EPNS_5ValueEyRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstInBoundsGEP1_64(llvm::Value*, unsigned long long, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE17CreateInBoundsGEPEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInBoundsGEP(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclExNS_12DenseMapInfoIS4_EENS5_IxEEE6insertERKSt4pairIS4_xE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<long long> >::insert(std::pair<clang::CXXRecordDecl const*, long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclExNS_12DenseMapInfoIS4_EENS5_IxEEE16InsertIntoBucketERKS4_RKxPSt4pairIS4_xE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<long long> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, long long const&, std::pair<clang::CXXRecordDecl const*, long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclExNS_12DenseMapInfoIS4_EENS5_IxEEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, long long, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<long long> >::grow(unsigned int)\"},\n    {\"_ZN5clang15BackendConsumer21InlineAsmDiagHandler2ERKN4llvm12SMDiagnosticENS_14SourceLocationE\", \"clang::BackendConsumer::InlineAsmDiagHandler2(llvm::SMDiagnostic const&, clang::SourceLocation)\"},\n    {\"_ZN5clang13CodeGenActionC1Ej\", \"clang::CodeGenAction::CodeGenAction(unsigned int)\"},\n    {\"_ZN5clang13CodeGenActionC2Ej\", \"clang::CodeGenAction::CodeGenAction(unsigned int)\"},\n    {\"_ZN5clang13CodeGenActionD0Ev\", \"clang::CodeGenAction::~CodeGenAction()\"},\n    {\"_ZN5clang13CodeGenActionD1Ev\", \"clang::CodeGenAction::~CodeGenAction()\"},\n    {\"_ZN5clang13CodeGenActionD2Ev\", \"clang::CodeGenAction::~CodeGenAction()\"},\n    {\"_ZNK5clang13CodeGenAction12hasIRSupportEv\", \"clang::CodeGenAction::hasIRSupport() const\"},\n    {\"_ZN5clang13CodeGenAction19EndSourceFileActionEv\", \"clang::CodeGenAction::EndSourceFileAction()\"},\n    {\"_ZN5clang13CodeGenAction10takeModuleEv\", \"clang::CodeGenAction::takeModule()\"},\n    {\"_ZN5clang13CodeGenAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::CodeGenAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_Z15GetOutputStreamRN5clang16CompilerInstanceEN4llvm9StringRefENS_13BackendActionE\", \"GetOutputStream(clang::CompilerInstance&, llvm::StringRef, clang::BackendAction)\"},\n    {\"_ZN5clang13CodeGenAction13ExecuteActionEv\", \"clang::CodeGenAction::ExecuteAction()\"},\n    {\"_ZN5clang18EmitAssemblyActionC1Ev\", \"clang::EmitAssemblyAction::EmitAssemblyAction()\"},\n    {\"_ZN5clang18EmitAssemblyActionC2Ev\", \"clang::EmitAssemblyAction::EmitAssemblyAction()\"},\n    {\"_ZN5clang12EmitBCActionC1Ev\", \"clang::EmitBCAction::EmitBCAction()\"},\n    {\"_ZN5clang12EmitBCActionC2Ev\", \"clang::EmitBCAction::EmitBCAction()\"},\n    {\"_ZN5clang14EmitLLVMActionC1Ev\", \"clang::EmitLLVMAction::EmitLLVMAction()\"},\n    {\"_ZN5clang14EmitLLVMActionC2Ev\", \"clang::EmitLLVMAction::EmitLLVMAction()\"},\n    {\"_ZN5clang18EmitLLVMOnlyActionC1Ev\", \"clang::EmitLLVMOnlyAction::EmitLLVMOnlyAction()\"},\n    {\"_ZN5clang18EmitLLVMOnlyActionC2Ev\", \"clang::EmitLLVMOnlyAction::EmitLLVMOnlyAction()\"},\n    {\"_ZN5clang21EmitCodeGenOnlyActionC1Ev\", \"clang::EmitCodeGenOnlyAction::EmitCodeGenOnlyAction()\"},\n    {\"_ZN5clang21EmitCodeGenOnlyActionC2Ev\", \"clang::EmitCodeGenOnlyAction::EmitCodeGenOnlyAction()\"},\n    {\"_ZN5clang13EmitObjActionC1Ev\", \"clang::EmitObjAction::EmitObjAction()\"},\n    {\"_ZN5clang13EmitObjActionC2Ev\", \"clang::EmitObjAction::EmitObjAction()\"},\n    {\"_ZN4llvm7ParseIREPNS_12MemoryBufferERNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::ParseIR(llvm::MemoryBuffer*, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZN5clang13EmitObjActionD1Ev\", \"clang::EmitObjAction::~EmitObjAction()\"},\n    {\"_ZN5clang13EmitObjActionD0Ev\", \"clang::EmitObjAction::~EmitObjAction()\"},\n    {\"_ZN5clang21EmitCodeGenOnlyActionD1Ev\", \"clang::EmitCodeGenOnlyAction::~EmitCodeGenOnlyAction()\"},\n    {\"_ZN5clang21EmitCodeGenOnlyActionD0Ev\", \"clang::EmitCodeGenOnlyAction::~EmitCodeGenOnlyAction()\"},\n    {\"_ZN5clang18EmitLLVMOnlyActionD1Ev\", \"clang::EmitLLVMOnlyAction::~EmitLLVMOnlyAction()\"},\n    {\"_ZN5clang18EmitLLVMOnlyActionD0Ev\", \"clang::EmitLLVMOnlyAction::~EmitLLVMOnlyAction()\"},\n    {\"_ZN5clang14EmitLLVMActionD1Ev\", \"clang::EmitLLVMAction::~EmitLLVMAction()\"},\n    {\"_ZN5clang14EmitLLVMActionD0Ev\", \"clang::EmitLLVMAction::~EmitLLVMAction()\"},\n    {\"_ZN5clang12EmitBCActionD1Ev\", \"clang::EmitBCAction::~EmitBCAction()\"},\n    {\"_ZN5clang12EmitBCActionD0Ev\", \"clang::EmitBCAction::~EmitBCAction()\"},\n    {\"_ZN5clang18EmitAssemblyActionD1Ev\", \"clang::EmitAssemblyAction::~EmitAssemblyAction()\"},\n    {\"_ZN5clang18EmitAssemblyActionD0Ev\", \"clang::EmitAssemblyAction::~EmitAssemblyAction()\"},\n    {\"_ZN5clang15BackendConsumerD1Ev\", \"clang::BackendConsumer::~BackendConsumer()\"},\n    {\"_ZN5clang15BackendConsumerD0Ev\", \"clang::BackendConsumer::~BackendConsumer()\"},\n    {\"_ZN5clang15BackendConsumer10InitializeERNS_10ASTContextE\", \"clang::BackendConsumer::Initialize(clang::ASTContext&)\"},\n    {\"_ZN5clang15BackendConsumer18HandleTopLevelDeclENS_12DeclGroupRefE\", \"clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN5clang15BackendConsumer21HandleTranslationUnitERNS_10ASTContextE\", \"clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang15BackendConsumer23HandleTagDeclDefinitionEPNS_7TagDeclE\", \"clang::BackendConsumer::HandleTagDeclDefinition(clang::TagDecl*)\"},\n    {\"_ZN5clang15BackendConsumer27CompleteTentativeDefinitionEPNS_7VarDeclE\", \"clang::BackendConsumer::CompleteTentativeDefinition(clang::VarDecl*)\"},\n    {\"_ZN5clang15BackendConsumer12HandleVTableEPNS_13CXXRecordDeclEb\", \"clang::BackendConsumer::HandleVTable(clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN5clang20PrettyStackTraceDeclD1Ev\", \"clang::PrettyStackTraceDecl::~PrettyStackTraceDecl()\"},\n    {\"_ZN5clang20PrettyStackTraceDeclD0Ev\", \"clang::PrettyStackTraceDecl::~PrettyStackTraceDecl()\"},\n    {\"_ZN5clang15BackendConsumer20InlineAsmDiagHandlerERKN4llvm12SMDiagnosticEPvj\", \"clang::BackendConsumer::InlineAsmDiagHandler(llvm::SMDiagnostic const&, void*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunctionC1ERNS0_13CodeGenModuleE\", \"clang::CodeGen::CodeGenFunction::CodeGenFunction(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunctionC2ERNS0_13CodeGenModuleE\", \"clang::CodeGen::CodeGenFunction::CodeGenFunction(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZNK5clang7CodeGen15CodeGenFunction10getContextEv\", \"clang::CodeGen::CodeGenFunction::getContext() const\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17ConvertTypeForMemENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::ConvertTypeForMem(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11ConvertTypeENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::ConvertType(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20hasAggregateLLVMTypeENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::hasAggregateLLVMType(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction15EmitReturnBlockEv\", \"clang::CodeGen::CodeGenFunction::EmitReturnBlock()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14FinishFunctionENS_14SourceLocationE\", \"clang::CodeGen::CodeGenFunction::FinishFunction(clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction27EmitFunctionInstrumentationEPKc\", \"clang::CodeGen::CodeGenFunction::EmitFunctionInstrumentation(char const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction24ShouldInstrumentFunctionEv\", \"clang::CodeGen::CodeGenFunction::ShouldInstrumentFunction()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13StartFunctionENS0_10GlobalDeclENS_8QualTypeEPN4llvm8FunctionERKNS4_11SmallVectorISt4pairIPKNS_7VarDeclES3_ELj16EEENS_14SourceLocationE\", \"clang::CodeGen::CodeGenFunction::StartFunction(clang::CodeGen::GlobalDecl, clang::QualType, llvm::Function*, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u> const&, clang::SourceLocation)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction11EmitVLASizeENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitVLASize(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitFunctionBodyERN4llvm11SmallVectorISt4pairIPKNS_7VarDeclENS_8QualTypeEELj16EEE\", \"clang::CodeGen::CodeGenFunction::EmitFunctionBody(llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction12GenerateCodeENS0_10GlobalDeclEPN4llvm8FunctionE\", \"clang::CodeGen::CodeGenFunction::GenerateCode(clang::CodeGen::GlobalDecl, llvm::Function*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13ContainsLabelEPKNS_4StmtEb\", \"clang::CodeGen::CodeGenFunction::ContainsLabel(clang::Stmt const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction28ConstantFoldsToSimpleIntegerEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::ConstantFoldsToSimpleInteger(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20EmitBranchOnBoolExprEPKNS_4ExprEPN4llvm10BasicBlockES7_\", \"clang::CodeGen::CodeGenFunction::EmitBranchOnBoolExpr(clang::Expr const*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16ErrorUnsupportedEPKNS_4StmtEPKcb\", \"clang::CodeGen::CodeGenFunction::ErrorUnsupported(clang::Stmt const*, char const*, bool)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction22EmitNullInitializationEPN4llvm5ValueENS_8QualTypeE\", \"clang::CodeGen::CodeGenFunction::EmitNullInitialization(llvm::Value*, clang::QualType)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction10GetVLASizeEPKNS_17VariableArrayTypeE\", \"clang::CodeGen::CodeGenFunction::GetVLASize(clang::VariableArrayType const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction14GetAddrOfLabelEPKNS_9LabelStmtE\", \"clang::CodeGen::CodeGenFunction::GetAddrOfLabel(clang::LabelStmt const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction20GetIndirectGotoBlockEv\", \"clang::CodeGen::CodeGenFunction::GetIndirectGotoBlock()\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction13EmitVAListRefEPKNS_4ExprE\", \"clang::CodeGen::CodeGenFunction::EmitVAListRef(clang::Expr const*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction23EmitDeclRefExprDbgValueEPKNS_11DeclRefExprEPN4llvm8ConstantE\", \"clang::CodeGen::CodeGenFunction::EmitDeclRefExprDbgValue(clang::DeclRefExpr const*, llvm::Constant*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateMulEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Expr const*, llvm::Value*, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(clang::Expr const* const&, llvm::Value* const&, std::pair<clang::Expr const*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ExprEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Expr const*, llvm::Value*, llvm::DenseMapInfo<clang::Expr const*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModuleC1ERNS_10ASTContextERKNS_14CodeGenOptionsERN4llvm6ModuleERKNS7_10DataLayoutERNS_10DiagnosticE\", \"clang::CodeGen::CodeGenModule::CodeGenModule(clang::ASTContext&, clang::CodeGenOptions const&, llvm::Module&, llvm::DataLayout const&, clang::Diagnostic&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModuleC2ERNS_10ASTContextERKNS_14CodeGenOptionsERN4llvm6ModuleERKNS7_10DataLayoutERNS_10DiagnosticE\", \"clang::CodeGen::CodeGenModule::CodeGenModule(clang::ASTContext&, clang::CodeGenOptions const&, llvm::Module&, llvm::DataLayout const&, clang::Diagnostic&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModuleD1Ev\", \"clang::CodeGen::CodeGenModule::~CodeGenModule()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModuleD2Ev\", \"clang::CodeGen::CodeGenModule::~CodeGenModule()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule17createObjCRuntimeEv\", \"clang::CodeGen::CodeGenModule::createObjCRuntime()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule7ReleaseEv\", \"clang::CodeGen::CodeGenModule::Release()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule12EmitDeferredEv\", \"clang::CodeGen::CodeGenModule::EmitDeferred()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule13AddGlobalCtorEPN4llvm8FunctionEi\", \"clang::CodeGen::CodeGenModule::AddGlobalCtor(llvm::Function*, int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule12EmitCtorListERKSt6vectorISt4pairIPN4llvm8ConstantEiESaIS7_EEPKc\", \"clang::CodeGen::CodeGenModule::EmitCtorList(std::vector<std::pair<llvm::Constant*, int>, std::allocator<std::pair<llvm::Constant*, int> > > const&, char const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule15EmitAnnotationsEv\", \"clang::CodeGen::CodeGenModule::EmitAnnotations()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule12EmitLLVMUsedEv\", \"clang::CodeGen::CodeGenModule::EmitLLVMUsed()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16EmitDeclMetadataEv\", \"clang::CodeGen::CodeGenModule::EmitDeclMetadata()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule11getTBAAInfoENS_8QualTypeE\", \"clang::CodeGen::CodeGenModule::getTBAAInfo(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19DecorateInstructionEPN4llvm11InstructionEPNS2_6MDNodeE\", \"clang::CodeGen::CodeGenModule::DecorateInstruction(llvm::Instruction*, llvm::MDNode*)\"},\n    {\"_ZNK5clang7CodeGen13CodeGenModule14isTargetDarwinEv\", \"clang::CodeGen::CodeGenModule::isTargetDarwin() const\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16ErrorUnsupportedEPKNS_4StmtEPKcb\", \"clang::CodeGen::CodeGenModule::ErrorUnsupported(clang::Stmt const*, char const*, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16ErrorUnsupportedEPKNS_4DeclEPKcb\", \"clang::CodeGen::CodeGenModule::ErrorUnsupported(clang::Decl const*, char const*, bool)\"},\n    {\"_ZNK5clang7CodeGen13CodeGenModule19setGlobalVisibilityEPN4llvm11GlobalValueEPKNS_9NamedDeclE\", \"clang::CodeGen::CodeGenModule::setGlobalVisibility(llvm::GlobalValue*, clang::NamedDecl const*) const\"},\n    {\"_ZNK5clang7CodeGen13CodeGenModule17setTypeVisibilityEPN4llvm11GlobalValueEPKNS_13CXXRecordDeclENS1_18TypeVisibilityKindE\", \"clang::CodeGen::CodeGenModule::setTypeVisibility(llvm::GlobalValue*, clang::CXXRecordDecl const*, clang::CodeGen::CodeGenModule::TypeVisibilityKind) const\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule14getMangledNameENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::getMangledName(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19getBlockMangledNameENS0_10GlobalDeclERNS_12MangleBufferEPKNS_9BlockDeclE\", \"clang::CodeGen::CodeGenModule::getBlockMangledName(clang::CodeGen::GlobalDecl, clang::MangleBuffer&, clang::BlockDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule14GetGlobalValueEN4llvm9StringRefE\", \"clang::CodeGen::CodeGenModule::GetGlobalValue(llvm::StringRef)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule13AddGlobalDtorEPN4llvm8FunctionEi\", \"clang::CodeGen::CodeGenModule::AddGlobalDtor(llvm::Function*, int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18getFunctionLinkageEPKNS_12FunctionDeclE\", \"clang::CodeGen::CodeGenModule::getFunctionLinkage(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule31SetFunctionDefinitionAttributesEPKNS_12FunctionDeclEPN4llvm11GlobalValueE\", \"clang::CodeGen::CodeGenModule::SetFunctionDefinitionAttributes(clang::FunctionDecl const*, llvm::GlobalValue*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19SetCommonAttributesEPKNS_4DeclEPN4llvm11GlobalValueE\", \"clang::CodeGen::CodeGenModule::SetCommonAttributes(clang::Decl const*, llvm::GlobalValue*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule25SetLLVMFunctionAttributesEPKNS_4DeclERKNS0_14CGFunctionInfoEPN4llvm8FunctionE\", \"clang::CodeGen::CodeGenModule::SetLLVMFunctionAttributes(clang::Decl const*, clang::CodeGen::CGFunctionInfo const&, llvm::Function*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule38SetLLVMFunctionAttributesForDefinitionEPKNS_4DeclEPN4llvm8FunctionE\", \"clang::CodeGen::CodeGenModule::SetLLVMFunctionAttributesForDefinition(clang::Decl const*, llvm::Function*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule13AddUsedGlobalEPN4llvm11GlobalValueE\", \"clang::CodeGen::CodeGenModule::AddUsedGlobal(llvm::GlobalValue*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule29SetInternalFunctionAttributesEPKNS_4DeclEPN4llvm8FunctionERKNS0_14CGFunctionInfoE\", \"clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(clang::Decl const*, llvm::Function*, clang::CodeGen::CGFunctionInfo const&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21SetFunctionAttributesENS0_10GlobalDeclEPN4llvm8FunctionEb\", \"clang::CodeGen::CodeGenModule::SetFunctionAttributes(clang::CodeGen::GlobalDecl, llvm::Function*, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16getVTableLinkageEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenModule::getVTableLinkage(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule20EmitGlobalDefinitionENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16EmitAnnotateAttrEPN4llvm11GlobalValueEPKNS_12AnnotateAttrEj\", \"clang::CodeGen::CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue*, clang::AnnotateAttr const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18MayDeferGenerationEPKNS_9ValueDeclE\", \"clang::CodeGen::CodeGenModule::MayDeferGeneration(clang::ValueDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19GetWeakRefReferenceEPKNS_9ValueDeclE\", \"clang::CodeGen::CodeGenModule::GetWeakRefReference(clang::ValueDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23GetOrCreateLLVMFunctionEN4llvm9StringRefEPKNS2_4TypeENS0_10GlobalDeclEb\", \"clang::CodeGen::CodeGenModule::GetOrCreateLLVMFunction(llvm::StringRef, llvm::Type const*, clang::CodeGen::GlobalDecl, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21GetOrCreateLLVMGlobalEN4llvm9StringRefEPKNS2_11PointerTypeEPKNS_7VarDeclEb\", \"clang::CodeGen::CodeGenModule::GetOrCreateLLVMGlobal(llvm::StringRef, llvm::PointerType const*, clang::VarDecl const*, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule10EmitGlobalENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::EmitGlobal(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule19EmitAliasDefinitionENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::EmitAliasDefinition(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule28EmitGlobalFunctionDefinitionENS0_10GlobalDeclE\", \"clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::CodeGen::GlobalDecl)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23EmitGlobalVarDefinitionEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule17GetAddrOfFunctionENS0_10GlobalDeclEPKN4llvm4TypeEb\", \"clang::CodeGen::CodeGenModule::GetAddrOfFunction(clang::CodeGen::GlobalDecl, llvm::Type const*, bool)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21CreateRuntimeFunctionEPKN4llvm12FunctionTypeENS2_9StringRefE\", \"clang::CodeGen::CodeGenModule::CreateRuntimeFunction(llvm::FunctionType const*, llvm::StringRef)\"},\n    {\"_Z20DeclIsConstantGlobalRN5clang10ASTContextEPKNS_7VarDeclE\", \"DeclIsConstantGlobal(clang::ASTContext&, clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule33CreateOrReplaceCXXRuntimeVariableEN4llvm9StringRefEPKNS2_4TypeENS2_11GlobalValue12LinkageTypesE\", \"clang::CodeGen::CodeGenModule::CreateOrReplaceCXXRuntimeVariable(llvm::StringRef, llvm::Type const*, llvm::GlobalValue::LinkageTypes)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule18GetAddrOfGlobalVarEPKNS_7VarDeclEPKN4llvm4TypeE\", \"clang::CodeGen::CodeGenModule::GetAddrOfGlobalVar(clang::VarDecl const*, llvm::Type const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21CreateRuntimeVariableEPKN4llvm4TypeENS2_9StringRefE\", \"clang::CodeGen::CodeGenModule::CreateRuntimeVariable(llvm::Type const*, llvm::StringRef)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23EmitTentativeDefinitionEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenModule::EmitTentativeDefinition(clang::VarDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule10EmitVTableEPNS_13CXXRecordDeclEb\", \"clang::CodeGen::CodeGenModule::EmitVTable(clang::CXXRecordDecl*, bool)\"},\n    {\"_ZNK5clang7CodeGen13CodeGenModule22GetTargetTypeStoreSizeEPKN4llvm4TypeE\", \"clang::CodeGen::CodeGenModule::GetTargetTypeStoreSize(llvm::Type const*) const\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule27GetLLVMLinkageVarDefinitionEPKNS_7VarDeclEPN4llvm14GlobalVariableE\", \"clang::CodeGen::CodeGenModule::GetLLVMLinkageVarDefinition(clang::VarDecl const*, llvm::GlobalVariable*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21getBuiltinLibFunctionEPKNS_12FunctionDeclEj\", \"clang::CodeGen::CodeGenModule::getBuiltinLibFunction(clang::FunctionDecl const*, unsigned int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule12getIntrinsicEjPPKN4llvm4TypeEj\", \"clang::CodeGen::CodeGenModule::getIntrinsic(unsigned int, llvm::Type const**, unsigned int)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule25GetAddrOfConstantCFStringEPKNS_13StringLiteralE\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantCFString(clang::StringLiteral const*)\"},\n    {\"_Z24GetConstantCFStringEntryRN4llvm9StringMapIPNS_8ConstantENS_15MallocAllocatorEEEPKN5clang13StringLiteralEbRbRj\", \"GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*, llvm::MallocAllocator>&, clang::StringLiteral const*, bool, bool&, unsigned int&)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23GetAddrOfConstantStringEPKNS_13StringLiteralE\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantString(clang::StringLiteral const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule25GetStringForStringLiteralEPKNS_13StringLiteralE\", \"clang::CodeGen::CodeGenModule::GetStringForStringLiteral(clang::StringLiteral const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule34GetAddrOfConstantStringFromLiteralEPKNS_13StringLiteralE\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantStringFromLiteral(clang::StringLiteral const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23GetAddrOfConstantStringERKSsPKc\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantString(std::string const&, char const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule37GetAddrOfConstantStringFromObjCEncodeEPKNS_14ObjCEncodeExprE\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantStringFromObjCEncode(clang::ObjCEncodeExpr const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule24GetAddrOfConstantCStringERKSsPKc\", \"clang::CodeGen::CodeGenModule::GetAddrOfConstantCString(std::string const&, char const*)\"},\n    {\"_Z21GenerateStringLiteralRKSsbRN5clang7CodeGen13CodeGenModuleEPKc\", \"GenerateStringLiteral(std::string const&, bool, clang::CodeGen::CodeGenModule&, char const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule31EmitObjCPropertyImplementationsEPKNS_22ObjCImplementationDeclE\", \"clang::CodeGen::CodeGenModule::EmitObjCPropertyImplementations(clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule27EmitObjCIvarInitializationsEPNS_22ObjCImplementationDeclE\", \"clang::CodeGen::CodeGenModule::EmitObjCIvarInitializations(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule13EmitNamespaceEPKNS_13NamespaceDeclE\", \"clang::CodeGen::CodeGenModule::EmitNamespace(clang::NamespaceDecl const*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule16EmitTopLevelDeclEPNS_4DeclE\", \"clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*)\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule15EmitLinkageSpecEPKNS_15LinkageSpecDeclE\", \"clang::CodeGen::CodeGenModule::EmitLinkageSpec(clang::LinkageSpecDecl const*)\"},\n    {\"_Z22EmitGlobalDeclMetadataRN5clang7CodeGen13CodeGenModuleERPN4llvm11NamedMDNodeENS0_10GlobalDeclEPNS3_11GlobalValueE\", \"EmitGlobalDeclMetadata(clang::CodeGen::CodeGenModule&, llvm::NamedMDNode*&, clang::CodeGen::GlobalDecl, llvm::GlobalValue*)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction16EmitDeclMetadataEv\", \"clang::CodeGen::CodeGenFunction::EmitDeclMetadata()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule21getBlockObjectDisposeEv\", \"clang::CodeGen::CodeGenModule::getBlockObjectDispose()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule20getBlockObjectAssignEv\", \"clang::CodeGen::CodeGenModule::getBlockObjectAssign()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule24getNSConcreteGlobalBlockEv\", \"clang::CodeGen::CodeGenModule::getNSConcreteGlobalBlock()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule23getNSConcreteStackBlockEv\", \"clang::CodeGen::CodeGenModule::getNSConcreteStackBlock()\"},\n    {\"_ZNK5clang4Decl7getAttrINS_11SectionAttrEEEPT_v\", \"clang::SectionAttr* clang::Decl::getAttr<clang::SectionAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_9AliasAttrEEEPT_v\", \"clang::AliasAttr* clang::Decl::getAttr<clang::AliasAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12AnnotateAttrEEEPT_v\", \"clang::AnnotateAttr* clang::Decl::getAttr<clang::AnnotateAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12NoCommonAttrEEEPT_v\", \"clang::NoCommonAttr* clang::Decl::getAttr<clang::NoCommonAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_10CommonAttrEEEPT_v\", \"clang::CommonAttr* clang::Decl::getAttr<clang::CommonAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_15ConstructorAttrEEEPT_v\", \"clang::ConstructorAttr* clang::Decl::getAttr<clang::ConstructorAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_14DestructorAttrEEEPT_v\", \"clang::DestructorAttr* clang::Decl::getAttr<clang::DestructorAttr>() const\"},\n    {\"_ZN4llvm9StringMapIPNS_8ConstantENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::Constant*>& llvm::StringMap<llvm::Constant*, llvm::MallocAllocator>::GetOrCreateValue<llvm::Constant*>(llvm::StringRef, llvm::Constant*)\"},\n    {\"_ZN4llvm9StringMapIN5clang7CodeGen10GlobalDeclENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::CodeGen::GlobalDecl>& llvm::StringMap<clang::CodeGen::GlobalDecl, llvm::MallocAllocator>::GetOrCreateValue<clang::CodeGen::GlobalDecl>(llvm::StringRef, clang::CodeGen::GlobalDecl)\"},\n    {\"_ZNSt6vectorIN5clang7CodeGen10GlobalDeclESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::CodeGen::GlobalDecl, std::allocator<clang::CodeGen::GlobalDecl> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CodeGen::GlobalDecl*, std::vector<clang::CodeGen::GlobalDecl, std::allocator<clang::CodeGen::GlobalDecl> > >, clang::CodeGen::GlobalDecl const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::Decl const*, unsigned int, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::Decl const* const&, unsigned int const&, std::pair<clang::Decl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::Decl const*, unsigned int, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm8ConstantEiESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::Constant*, int>, std::allocator<std::pair<llvm::Constant*, int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, int>*, std::vector<std::pair<llvm::Constant*, int>, std::allocator<std::pair<llvm::Constant*, int> > > >, std::pair<llvm::Constant*, int> const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen10GlobalDeclENS_9StringRefENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<clang::CodeGen::GlobalDecl, llvm::StringRef, llvm::DenseMapInfo<clang::CodeGen::GlobalDecl>, llvm::DenseMapInfo<llvm::StringRef> >::InsertIntoBucket(clang::CodeGen::GlobalDecl const&, llvm::StringRef const&, std::pair<clang::CodeGen::GlobalDecl, llvm::StringRef>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang7CodeGen10GlobalDeclENS_9StringRefENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::CodeGen::GlobalDecl, llvm::StringRef, llvm::DenseMapInfo<clang::CodeGen::GlobalDecl>, llvm::DenseMapInfo<llvm::StringRef> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunctionD2Ev\", \"clang::CodeGen::CodeGenFunction::~CodeGenFunction()\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTablesD2Ev\", \"clang::CodeGen::CodeGenVTables::~CodeGenVTables()\"},\n    {\"_ZN5clang7CodeGen14CodeGenVTablesC2ERNS0_13CodeGenModuleE\", \"clang::CodeGen::CodeGenVTables::CodeGenVTables(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAAC1ERNS_10ASTContextERN4llvm11LLVMContextERKNS_11LangOptionsERNS_13MangleContextE\", \"clang::CodeGen::CodeGenTBAA::CodeGenTBAA(clang::ASTContext&, llvm::LLVMContext&, clang::LangOptions const&, clang::MangleContext&)\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAAC2ERNS_10ASTContextERN4llvm11LLVMContextERKNS_11LangOptionsERNS_13MangleContextE\", \"clang::CodeGen::CodeGenTBAA::CodeGenTBAA(clang::ASTContext&, llvm::LLVMContext&, clang::LangOptions const&, clang::MangleContext&)\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAAD1Ev\", \"clang::CodeGen::CodeGenTBAA::~CodeGenTBAA()\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAAD2Ev\", \"clang::CodeGen::CodeGenTBAA::~CodeGenTBAA()\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAA7getRootEv\", \"clang::CodeGen::CodeGenTBAA::getRoot()\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAA23getTBAAInfoForNamedTypeEN4llvm9StringRefEPNS2_6MDNodeEb\", \"clang::CodeGen::CodeGenTBAA::getTBAAInfoForNamedType(llvm::StringRef, llvm::MDNode*, bool)\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAA7getCharEv\", \"clang::CodeGen::CodeGenTBAA::getChar()\"},\n    {\"_ZN5clang7CodeGen11CodeGenTBAA11getTBAAInfoENS_8QualTypeE\", \"clang::CodeGen::CodeGenTBAA::getTBAAInfo(clang::QualType)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEPNS_6MDNodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Type const*, llvm::MDNode*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::MDNode*> >::InsertIntoBucket(clang::Type const* const&, llvm::MDNode* const&, std::pair<clang::Type const*, llvm::MDNode*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEPNS_6MDNodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Type const*, llvm::MDNode*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::MDNode*> >::grow(unsigned int)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypesC1ERNS_10ASTContextERN4llvm6ModuleERKNS4_10DataLayoutERKNS_7ABIInfoERNS0_8CGCXXABIE\", \"clang::CodeGen::CodeGenTypes::CodeGenTypes(clang::ASTContext&, llvm::Module&, llvm::DataLayout const&, clang::ABIInfo const&, clang::CodeGen::CGCXXABI&)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypesC2ERNS_10ASTContextERN4llvm6ModuleERKNS4_10DataLayoutERKNS_7ABIInfoERNS0_8CGCXXABIE\", \"clang::CodeGen::CodeGenTypes::CodeGenTypes(clang::ASTContext&, llvm::Module&, llvm::DataLayout const&, clang::ABIInfo const&, clang::CodeGen::CGCXXABI&)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypesD1Ev\", \"clang::CodeGen::CodeGenTypes::~CodeGenTypes()\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypesD2Ev\", \"clang::CodeGen::CodeGenTypes::~CodeGenTypes()\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes26HandleLateResolvedPointersEv\", \"clang::CodeGen::CodeGenTypes::HandleLateResolvedPointers()\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes11ConvertTypeENS_8QualTypeEb\", \"clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes20ConvertTypeRecursiveENS_8QualTypeE\", \"clang::CodeGen::CodeGenTypes::ConvertTypeRecursive(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes14ConvertNewTypeENS_8QualTypeE\", \"clang::CodeGen::CodeGenTypes::ConvertNewType(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes17ConvertTypeForMemENS_8QualTypeEb\", \"clang::CodeGen::CodeGenTypes::ConvertTypeForMem(clang::QualType, bool)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes22VerifyFuncTypeCompleteEPKNS_4TypeE\", \"clang::CodeGen::CodeGenTypes::VerifyFuncTypeComplete(clang::Type const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes19UpdateCompletedTypeEPKNS_7TagDeclE\", \"clang::CodeGen::CodeGenTypes::UpdateCompletedType(clang::TagDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes18ConvertTagDeclTypeEPKNS_7TagDeclE\", \"clang::CodeGen::CodeGenTypes::ConvertTagDeclType(clang::TagDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes17getCGRecordLayoutEPKNS_10RecordDeclE\", \"clang::CodeGen::CodeGenTypes::getCGRecordLayout(clang::RecordDecl const*)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes19isZeroInitializableENS_8QualTypeE\", \"clang::CodeGen::CodeGenTypes::isZeroInitializable(clang::QualType)\"},\n    {\"_ZN5clang7CodeGen12CodeGenTypes19isZeroInitializableEPKNS_13CXXRecordDeclE\", \"clang::CodeGen::CodeGenTypes::isZeroInitializable(clang::CXXRecordDecl const*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeENS_12PATypeHolderENS_12DenseMapInfoIS4_EENS6_IS5_EEED1Ev\", \"llvm::DenseMap<clang::Type const*, llvm::PATypeHolder, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::PATypeHolder> >::~DenseMap()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEED1Ev\", \"llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>::~FoldingSet()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeENS_12PATypeHolderENS_12DenseMapInfoIS4_EENS6_IS5_EEE6insertERKSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::Type const*, llvm::PATypeHolder, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::PATypeHolder> >::insert(std::pair<clang::Type const*, llvm::PATypeHolder> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEPNS1_7CodeGen14CGRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::Type const*, clang::CodeGen::CGRecordLayout*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<clang::CodeGen::CGRecordLayout*> >::InsertIntoBucket(clang::Type const* const&, clang::CodeGen::CGRecordLayout* const&, std::pair<clang::Type const*, clang::CodeGen::CGRecordLayout*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeEPNS1_7CodeGen14CGRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::Type const*, clang::CodeGen::CGRecordLayout*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<clang::CodeGen::CGRecordLayout*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17ObjCInterfaceTypeEPKNS_4TypeENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::ObjCInterfaceType const*, llvm::Type const*, llvm::DenseMapInfo<clang::ObjCInterfaceType const*>, llvm::DenseMapInfo<llvm::Type const*> >::InsertIntoBucket(clang::ObjCInterfaceType const* const&, llvm::Type const* const&, std::pair<clang::ObjCInterfaceType const*, llvm::Type const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17ObjCInterfaceTypeEPKNS_4TypeENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::ObjCInterfaceType const*, llvm::Type const*, llvm::DenseMapInfo<clang::ObjCInterfaceType const*>, llvm::DenseMapInfo<llvm::Type const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeENS_12PATypeHolderENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::Type const*, llvm::PATypeHolder, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::PATypeHolder> >::InsertIntoBucket(clang::Type const* const&, llvm::PATypeHolder const&, std::pair<clang::Type const*, llvm::PATypeHolder>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeENS_12PATypeHolderENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Type const*, llvm::PATypeHolder, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<llvm::PATypeHolder> >::grow(unsigned int)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEED0Ev\", \"llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang7CodeGen14CGFunctionInfo7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::CodeGen::CGFunctionInfo::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang7CodeGen14CGRecordLayoutD2Ev\", \"clang::CodeGen::CGRecordLayout::~CGRecordLayout()\"},\n    {\"_ZN5clang7CodeGen19CreateItaniumCXXABIERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateItaniumCXXABI(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN5clang7CodeGen15CreateARMCXXABIERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateARMCXXABI(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABID1Ev\", \"(anonymous namespace)::ARMCXXABI::~ARMCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABID0Ev\", \"(anonymous namespace)::ARMCXXABI::~ARMCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI24ConvertMemberPointerTypeEPKN5clang17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::ConvertMemberPointerType(clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI31EmitLoadOfMemberFunctionPointerERN5clang7CodeGen15CodeGenFunctionERPN4llvm5ValueES7_PKNS1_17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::EmitLoadOfMemberFunctionPointer(clang::CodeGen::CodeGenFunction&, llvm::Value*&, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI28EmitMemberDataPointerAddressERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_PKNS1_17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberDataPointerAddress(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI27EmitMemberPointerConversionERN5clang7CodeGen15CodeGenFunctionEPKNS1_8CastExprEPN4llvm5ValueE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberPointerConversion(clang::CodeGen::CodeGenFunction&, clang::CastExpr const*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI27EmitMemberPointerConversionEPN4llvm8ConstantEPKN5clang8CastExprE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberPointerConversion(llvm::Constant*, clang::CastExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI19isZeroInitializableEPKN5clang17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::isZeroInitializable(clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI21EmitNullMemberPointerEPKN5clang17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::EmitNullMemberPointer(clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI17EmitMemberPointerEPKN5clang13CXXMethodDeclE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberPointer(clang::CXXMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI21EmitMemberDataPointerEPKN5clang17MemberPointerTypeENS1_9CharUnitsE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberDataPointer(clang::MemberPointerType const*, clang::CharUnits)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI27EmitMemberPointerComparisonERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_PKNS1_17MemberPointerTypeEb\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberPointerComparison(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::MemberPointerType const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI26EmitMemberPointerIsNotNullERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueEPKNS1_17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::EmitMemberPointerIsNotNull(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::MemberPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI25BuildConstructorSignatureEPKN5clang18CXXConstructorDeclENS1_11CXXCtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::ARMCXXABI::BuildConstructorSignature(clang::CXXConstructorDecl const*, clang::CXXCtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI24BuildDestructorSignatureEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::ARMCXXABI::BuildDestructorSignature(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI27BuildInstanceFunctionParamsERN5clang7CodeGen15CodeGenFunctionERNS1_8QualTypeERN4llvm11SmallVectorISt4pairIPKNS1_7VarDeclES5_ELj16EEE\", \"(anonymous namespace)::ARMCXXABI::BuildInstanceFunctionParams(clang::CodeGen::CodeGenFunction&, clang::QualType&, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI26EmitInstanceFunctionPrologERN5clang7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::ARMCXXABI::EmitInstanceFunctionProlog(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI19EmitReturnFromThunkERN5clang7CodeGen15CodeGenFunctionENS2_6RValueENS1_8QualTypeE\", \"(anonymous namespace)::ARMCXXABI::EmitReturnFromThunk(clang::CodeGen::CodeGenFunction&, clang::CodeGen::RValue, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI18GetArrayCookieSizeEPKN5clang10CXXNewExprE\", \"(anonymous namespace)::ARMCXXABI::GetArrayCookieSize(clang::CXXNewExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI21InitializeArrayCookieERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_PKNS1_10CXXNewExprENS1_8QualTypeE\", \"(anonymous namespace)::ARMCXXABI::InitializeArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::CXXNewExpr const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABI15ReadArrayCookieERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueEPKNS1_13CXXDeleteExprENS1_8QualTypeERS7_SC_RNS1_9CharUnitsE\", \"(anonymous namespace)::ARMCXXABI::ReadArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::CXXDeleteExpr const*, clang::QualType, llvm::Value*&, llvm::Value*&, clang::CharUnits&)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI15EmitGuardedInitERN5clang7CodeGen15CodeGenFunctionERKNS1_7VarDeclEPN4llvm14GlobalVariableE\", \"(anonymous namespace)::ItaniumCXXABI::EmitGuardedInit(clang::CodeGen::CodeGenFunction&, clang::VarDecl const&, llvm::GlobalVariable*)\"},\n    {\"_ZN12_GLOBAL__N_114CallGuardAbortD1Ev\", \"(anonymous namespace)::CallGuardAbort::~CallGuardAbort()\"},\n    {\"_ZN12_GLOBAL__N_114CallGuardAbortD0Ev\", \"(anonymous namespace)::CallGuardAbort::~CallGuardAbort()\"},\n    {\"_ZN12_GLOBAL__N_114CallGuardAbort4EmitERN5clang7CodeGen15CodeGenFunctionEb\", \"(anonymous namespace)::CallGuardAbort::Emit(clang::CodeGen::CodeGenFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI26EmitInstanceFunctionPrologERN5clang7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::ItaniumCXXABI::EmitInstanceFunctionProlog(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI27BuildInstanceFunctionParamsERN5clang7CodeGen15CodeGenFunctionERNS1_8QualTypeERN4llvm11SmallVectorISt4pairIPKNS1_7VarDeclES5_ELj16EEE\", \"(anonymous namespace)::ItaniumCXXABI::BuildInstanceFunctionParams(clang::CodeGen::CodeGenFunction&, clang::QualType&, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI24BuildDestructorSignatureEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::ItaniumCXXABI::BuildDestructorSignature(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI25BuildConstructorSignatureEPKN5clang18CXXConstructorDeclENS1_11CXXCtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::ItaniumCXXABI::BuildConstructorSignature(clang::CXXConstructorDecl const*, clang::CXXCtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABID1Ev\", \"(anonymous namespace)::ItaniumCXXABI::~ItaniumCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABID0Ev\", \"(anonymous namespace)::ItaniumCXXABI::~ItaniumCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI18GetArrayCookieSizeEPKN5clang10CXXNewExprE\", \"(anonymous namespace)::ItaniumCXXABI::GetArrayCookieSize(clang::CXXNewExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI21InitializeArrayCookieERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueES7_PKNS1_10CXXNewExprENS1_8QualTypeE\", \"(anonymous namespace)::ItaniumCXXABI::InitializeArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, llvm::Value*, clang::CXXNewExpr const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABI15ReadArrayCookieERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueEPKNS1_13CXXDeleteExprENS1_8QualTypeERS7_SC_RNS1_9CharUnitsE\", \"(anonymous namespace)::ItaniumCXXABI::ReadArrayCookie(clang::CodeGen::CodeGenFunction&, llvm::Value*, clang::CXXDeleteExpr const*, clang::QualType, llvm::Value*&, llvm::Value*&, clang::CharUnits&)\"},\n    {\"_ZN5clang7CodeGen15CodeGenFunction17GetAddrOfLocalVarEPKNS_7VarDeclE\", \"clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(clang::VarDecl const*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE8CreateOrEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateOr(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateBinOpENS_11Instruction9BinaryOpsEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateBinOp(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateNSWSubEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateNSWSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateNSWAddEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateNSWAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateSelectEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateSelect(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE17CreateInsertValueEPNS_5ValueES6_jRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateInsertValue(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateAShrEPNS_5ValueES6_RKNS_5TwineEb\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateAShr(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateSubEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN5clang7CodeGen21CreateMicrosoftCXXABIERNS0_13CodeGenModuleE\", \"clang::CodeGen::CreateMicrosoftCXXABI(clang::CodeGen::CodeGenModule&)\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABID1Ev\", \"(anonymous namespace)::MicrosoftCXXABI::~MicrosoftCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABID0Ev\", \"(anonymous namespace)::MicrosoftCXXABI::~MicrosoftCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABI25BuildConstructorSignatureEPKN5clang18CXXConstructorDeclENS1_11CXXCtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::MicrosoftCXXABI::BuildConstructorSignature(clang::CXXConstructorDecl const*, clang::CXXCtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABI24BuildDestructorSignatureEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERNS1_7CanQualINS1_4TypeEEERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::MicrosoftCXXABI::BuildDestructorSignature(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::CanQual<clang::Type>&, llvm::SmallVectorImpl<clang::CanQual<clang::Type> >&)\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABI27BuildInstanceFunctionParamsERN5clang7CodeGen15CodeGenFunctionERNS1_8QualTypeERN4llvm11SmallVectorISt4pairIPKNS1_7VarDeclES5_ELj16EEE\", \"(anonymous namespace)::MicrosoftCXXABI::BuildInstanceFunctionParams(clang::CodeGen::CodeGenFunction&, clang::QualType&, llvm::SmallVector<std::pair<clang::VarDecl const*, clang::QualType>, 16u>&)\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABI26EmitInstanceFunctionPrologERN5clang7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::MicrosoftCXXABI::EmitInstanceFunctionProlog(clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZN5clang17CreateLLVMCodeGenERNS_10DiagnosticERKSsRKNS_14CodeGenOptionsERN4llvm11LLVMContextE\", \"clang::CreateLLVMCodeGen(clang::Diagnostic&, std::string const&, clang::CodeGenOptions const&, llvm::LLVMContext&)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImplD1Ev\", \"(anonymous namespace)::CodeGeneratorImpl::~CodeGeneratorImpl()\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImplD0Ev\", \"(anonymous namespace)::CodeGeneratorImpl::~CodeGeneratorImpl()\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::CodeGeneratorImpl::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl18HandleTopLevelDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl23HandleTagDeclDefinitionEPN5clang7TagDeclE\", \"(anonymous namespace)::CodeGeneratorImpl::HandleTagDeclDefinition(clang::TagDecl*)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl27CompleteTentativeDefinitionEPN5clang7VarDeclE\", \"(anonymous namespace)::CodeGeneratorImpl::CompleteTentativeDefinition(clang::VarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl12HandleVTableEPN5clang13CXXRecordDeclEb\", \"(anonymous namespace)::CodeGeneratorImpl::HandleVTable(clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl9GetModuleEv\", \"(anonymous namespace)::CodeGeneratorImpl::GetModule()\"},\n    {\"_ZN12_GLOBAL__N_117CodeGeneratorImpl13ReleaseModuleEv\", \"(anonymous namespace)::CodeGeneratorImpl::ReleaseModule()\"},\n    {\"_ZN5clang13CodeGeneratorD1Ev\", \"clang::CodeGenerator::~CodeGenerator()\"},\n    {\"_ZN5clang13CodeGeneratorD0Ev\", \"clang::CodeGenerator::~CodeGenerator()\"},\n    {\"_ZN5clang7ABIInfoD0Ev\", \"clang::ABIInfo::~ABIInfo()\"},\n    {\"_ZN5clang7ABIInfoD1Ev\", \"clang::ABIInfo::~ABIInfo()\"},\n    {\"_ZN5clang7ABIInfoD2Ev\", \"clang::ABIInfo::~ABIInfo()\"},\n    {\"_ZNK5clang7ABIInfo10getContextEv\", \"clang::ABIInfo::getContext() const\"},\n    {\"_ZNK5clang7ABIInfo12getVMContextEv\", \"clang::ABIInfo::getVMContext() const\"},\n    {\"_ZNK5clang7ABIInfo13getDataLayoutEv\", \"clang::ABIInfo::getDataLayout() const\"},\n    {\"_ZNK5clang10ABIArgInfo4dumpEv\", \"clang::ABIArgInfo::dump() const\"},\n    {\"_ZN5clang17TargetCodeGenInfoD0Ev\", \"clang::TargetCodeGenInfo::~TargetCodeGenInfo()\"},\n    {\"_ZN5clang17TargetCodeGenInfoD1Ev\", \"clang::TargetCodeGenInfo::~TargetCodeGenInfo()\"},\n    {\"_ZN5clang17TargetCodeGenInfoD2Ev\", \"clang::TargetCodeGenInfo::~TargetCodeGenInfo()\"},\n    {\"_ZN5clang7CodeGen13CodeGenModule20getTargetCodeGenInfoEv\", \"clang::CodeGen::CodeGenModule::getTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_123X86_64TargetCodeGenInfoD1Ev\", \"(anonymous namespace)::X86_64TargetCodeGenInfo::~X86_64TargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_123X86_64TargetCodeGenInfoD0Ev\", \"(anonymous namespace)::X86_64TargetCodeGenInfo::~X86_64TargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_123X86_64TargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::X86_64TargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_123X86_64TargetCodeGenInfo23initDwarfEHRegSizeTableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::X86_64TargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZN12_GLOBAL__N_113X86_64ABIInfoD1Ev\", \"(anonymous namespace)::X86_64ABIInfo::~X86_64ABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_113X86_64ABIInfoD0Ev\", \"(anonymous namespace)::X86_64ABIInfo::~X86_64ABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::X86_64ABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::X86_64ABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo20classifyArgumentTypeEN5clang8QualTypeERjS3_\", \"(anonymous namespace)::X86_64ABIInfo::classifyArgumentType(clang::QualType, unsigned int&, unsigned int&) const\"},\n    {\"_Z19EmitVAArgFromMemoryPN4llvm5ValueEN5clang8QualTypeERNS2_7CodeGen15CodeGenFunctionE\", \"EmitVAArgFromMemory(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&)\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo8classifyEN5clang8QualTypeEyRNS0_5ClassES4_\", \"(anonymous namespace)::X86_64ABIInfo::classify(clang::QualType, unsigned long long, (anonymous namespace)::X86_64ABIInfo::Class&, (anonymous namespace)::X86_64ABIInfo::Class&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo17getIndirectResultEN5clang8QualTypeE\", \"(anonymous namespace)::X86_64ABIInfo::getIndirectResult(clang::QualType) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo22GetINTEGERTypeAtOffsetEPKN4llvm4TypeEjN5clang8QualTypeEj\", \"(anonymous namespace)::X86_64ABIInfo::GetINTEGERTypeAtOffset(llvm::Type const*, unsigned int, clang::QualType, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo18GetSSETypeAtOffsetEPKN4llvm4TypeEjN5clang8QualTypeEj\", \"(anonymous namespace)::X86_64ABIInfo::GetSSETypeAtOffset(llvm::Type const*, unsigned int, clang::QualType, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_64ABIInfo19Get16ByteVectorTypeEN5clang8QualTypeE\", \"(anonymous namespace)::X86_64ABIInfo::Get16ByteVectorType(clang::QualType) const\"},\n    {\"_Z26GetX86_64ByValArgumentPairPKN4llvm4TypeES2_RKNS_10DataLayoutE\", \"GetX86_64ByValArgumentPair(llvm::Type const*, llvm::Type const*, llvm::DataLayout const&)\"},\n    {\"_Z21BitsContainNoUserDataN5clang8QualTypeEjjRNS_10ASTContextE\", \"BitsContainNoUserData(clang::QualType, unsigned int, unsigned int, clang::ASTContext&)\"},\n    {\"_Z21ContainsFloatAtOffsetPKN4llvm4TypeEjRKNS_10DataLayoutE\", \"ContainsFloatAtOffset(llvm::Type const*, unsigned int, llvm::DataLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_126WinX86_64TargetCodeGenInfoD1Ev\", \"(anonymous namespace)::WinX86_64TargetCodeGenInfo::~WinX86_64TargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_126WinX86_64TargetCodeGenInfoD0Ev\", \"(anonymous namespace)::WinX86_64TargetCodeGenInfo::~WinX86_64TargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_126WinX86_64TargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::WinX86_64TargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_126WinX86_64TargetCodeGenInfo23initDwarfEHRegSizeTableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::WinX86_64TargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZN12_GLOBAL__N_116WinX86_64ABIInfoD1Ev\", \"(anonymous namespace)::WinX86_64ABIInfo::~WinX86_64ABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_116WinX86_64ABIInfoD0Ev\", \"(anonymous namespace)::WinX86_64ABIInfo::~WinX86_64ABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116WinX86_64ABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::WinX86_64ABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_116WinX86_64ABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::WinX86_64ABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_ZNK12_GLOBAL__N_116WinX86_64ABIInfo8classifyEN5clang8QualTypeE\", \"(anonymous namespace)::WinX86_64ABIInfo::classify(clang::QualType) const\"},\n    {\"_ZN12_GLOBAL__N_123X86_32TargetCodeGenInfoD1Ev\", \"(anonymous namespace)::X86_32TargetCodeGenInfo::~X86_32TargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_123X86_32TargetCodeGenInfoD0Ev\", \"(anonymous namespace)::X86_32TargetCodeGenInfo::~X86_32TargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_123X86_32TargetCodeGenInfo19SetTargetAttributesEPKN5clang4DeclEPN4llvm11GlobalValueERNS1_7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::X86_32TargetCodeGenInfo::SetTargetAttributes(clang::Decl const*, llvm::GlobalValue*, clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_123X86_32TargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::X86_32TargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_123X86_32TargetCodeGenInfo23initDwarfEHRegSizeTableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::X86_32TargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZN12_GLOBAL__N_113X86_32ABIInfoD1Ev\", \"(anonymous namespace)::X86_32ABIInfo::~X86_32ABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_113X86_32ABIInfoD0Ev\", \"(anonymous namespace)::X86_32ABIInfo::~X86_32ABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113X86_32ABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::X86_32ABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86_32ABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::X86_32ABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_Z25isRecordWithSSEVectorTypeRN5clang10ASTContextENS_8QualTypeE\", \"isRecordWithSSEVectorType(clang::ASTContext&, clang::QualType)\"},\n    {\"_Z21isSingleElementStructN5clang8QualTypeERNS_10ASTContextE\", \"isSingleElementStruct(clang::QualType, clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_113X86_32ABIInfo26shouldReturnTypeInRegisterEN5clang8QualTypeERNS1_10ASTContextE\", \"(anonymous namespace)::X86_32ABIInfo::shouldReturnTypeInRegister(clang::QualType, clang::ASTContext&)\"},\n    {\"_Z12isEmptyFieldRN5clang10ASTContextEPKNS_9FieldDeclEb\", \"isEmptyField(clang::ASTContext&, clang::FieldDecl const*, bool)\"},\n    {\"_Z13isEmptyRecordRN5clang10ASTContextENS_8QualTypeEb\", \"isEmptyRecord(clang::ASTContext&, clang::QualType, bool)\"},\n    {\"_ZN12_GLOBAL__N_123MSP430TargetCodeGenInfoD1Ev\", \"(anonymous namespace)::MSP430TargetCodeGenInfo::~MSP430TargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_123MSP430TargetCodeGenInfoD0Ev\", \"(anonymous namespace)::MSP430TargetCodeGenInfo::~MSP430TargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_123MSP430TargetCodeGenInfo19SetTargetAttributesEPKN5clang4DeclEPN4llvm11GlobalValueERNS1_7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::MSP430TargetCodeGenInfo::SetTargetAttributes(clang::Decl const*, llvm::GlobalValue*, clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZN12_GLOBAL__N_114DefaultABIInfoD1Ev\", \"(anonymous namespace)::DefaultABIInfo::~DefaultABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_114DefaultABIInfoD0Ev\", \"(anonymous namespace)::DefaultABIInfo::~DefaultABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_114DefaultABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::DefaultABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_114DefaultABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::DefaultABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_ZN12_GLOBAL__N_123MBlazeTargetCodeGenInfoD1Ev\", \"(anonymous namespace)::MBlazeTargetCodeGenInfo::~MBlazeTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_123MBlazeTargetCodeGenInfoD0Ev\", \"(anonymous namespace)::MBlazeTargetCodeGenInfo::~MBlazeTargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_123MBlazeTargetCodeGenInfo19SetTargetAttributesEPKN5clang4DeclEPN4llvm11GlobalValueERNS1_7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::MBlazeTargetCodeGenInfo::SetTargetAttributes(clang::Decl const*, llvm::GlobalValue*, clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZN12_GLOBAL__N_113MBlazeABIInfoD1Ev\", \"(anonymous namespace)::MBlazeABIInfo::~MBlazeABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_113MBlazeABIInfoD0Ev\", \"(anonymous namespace)::MBlazeABIInfo::~MBlazeABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113MBlazeABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::MBlazeABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_113MBlazeABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::MBlazeABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_ZN12_GLOBAL__N_124SystemZTargetCodeGenInfoD1Ev\", \"(anonymous namespace)::SystemZTargetCodeGenInfo::~SystemZTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_124SystemZTargetCodeGenInfoD0Ev\", \"(anonymous namespace)::SystemZTargetCodeGenInfo::~SystemZTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_114SystemZABIInfoD1Ev\", \"(anonymous namespace)::SystemZABIInfo::~SystemZABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_114SystemZABIInfoD0Ev\", \"(anonymous namespace)::SystemZABIInfo::~SystemZABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_114SystemZABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::SystemZABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_114SystemZABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::SystemZABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_ZN12_GLOBAL__N_122PPC32TargetCodeGenInfoD1Ev\", \"(anonymous namespace)::PPC32TargetCodeGenInfo::~PPC32TargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_122PPC32TargetCodeGenInfoD0Ev\", \"(anonymous namespace)::PPC32TargetCodeGenInfo::~PPC32TargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_122PPC32TargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::PPC32TargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_122PPC32TargetCodeGenInfo23initDwarfEHRegSizeTableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::PPC32TargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZN12_GLOBAL__N_124DefaultTargetCodeGenInfoD1Ev\", \"(anonymous namespace)::DefaultTargetCodeGenInfo::~DefaultTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_124DefaultTargetCodeGenInfoD0Ev\", \"(anonymous namespace)::DefaultTargetCodeGenInfo::~DefaultTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_120ARMTargetCodeGenInfoD1Ev\", \"(anonymous namespace)::ARMTargetCodeGenInfo::~ARMTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_120ARMTargetCodeGenInfoD0Ev\", \"(anonymous namespace)::ARMTargetCodeGenInfo::~ARMTargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_120ARMTargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::ARMTargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZN12_GLOBAL__N_110ARMABIInfoD1Ev\", \"(anonymous namespace)::ARMABIInfo::~ARMABIInfo()\"},\n    {\"_ZN12_GLOBAL__N_110ARMABIInfoD0Ev\", \"(anonymous namespace)::ARMABIInfo::~ARMABIInfo()\"},\n    {\"_ZNK12_GLOBAL__N_110ARMABIInfo11computeInfoERN5clang7CodeGen14CGFunctionInfoE\", \"(anonymous namespace)::ARMABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_110ARMABIInfo9EmitVAArgEPN4llvm5ValueEN5clang8QualTypeERNS4_7CodeGen15CodeGenFunctionE\", \"(anonymous namespace)::ARMABIInfo::EmitVAArg(llvm::Value*, clang::QualType, clang::CodeGen::CodeGenFunction&) const\"},\n    {\"_Z17isIntegerLikeTypeN5clang8QualTypeERNS_10ASTContextERN4llvm11LLVMContextE\", \"isIntegerLikeType(clang::QualType, clang::ASTContext&, llvm::LLVMContext&)\"},\n    {\"_ZN12_GLOBAL__N_121MIPSTargetCodeGenInfoD1Ev\", \"(anonymous namespace)::MIPSTargetCodeGenInfo::~MIPSTargetCodeGenInfo()\"},\n    {\"_ZN12_GLOBAL__N_121MIPSTargetCodeGenInfoD0Ev\", \"(anonymous namespace)::MIPSTargetCodeGenInfo::~MIPSTargetCodeGenInfo()\"},\n    {\"_ZNK12_GLOBAL__N_121MIPSTargetCodeGenInfo22getDwarfEHStackPointerERN5clang7CodeGen13CodeGenModuleE\", \"(anonymous namespace)::MIPSTargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK12_GLOBAL__N_121MIPSTargetCodeGenInfo23initDwarfEHRegSizeTableERN5clang7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"(anonymous namespace)::MIPSTargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo19SetTargetAttributesEPKNS_4DeclEPN4llvm11GlobalValueERNS_7CodeGen13CodeGenModuleE\", \"clang::TargetCodeGenInfo::SetTargetAttributes(clang::Decl const*, llvm::GlobalValue*, clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo21extendPointerWithSExtEv\", \"clang::TargetCodeGenInfo::extendPointerWithSExt() const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo22getDwarfEHStackPointerERNS_7CodeGen13CodeGenModuleE\", \"clang::TargetCodeGenInfo::getDwarfEHStackPointer(clang::CodeGen::CodeGenModule&) const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo23initDwarfEHRegSizeTableERNS_7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"clang::TargetCodeGenInfo::initDwarfEHRegSizeTable(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo19decodeReturnAddressERNS_7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"clang::TargetCodeGenInfo::decodeReturnAddress(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZNK5clang17TargetCodeGenInfo19encodeReturnAddressERNS_7CodeGen15CodeGenFunctionEPN4llvm5ValueE\", \"clang::TargetCodeGenInfo::encodeReturnAddress(clang::CodeGen::CodeGenFunction&, llvm::Value*) const\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE26CreateConstInBoundsGEP1_32EPNS_5ValueEjRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstInBoundsGEP1_32(llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE11CreateStoreEPNS_5ValueES6_b\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateStore(llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateLoadEPNS_5ValueEPKc\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateLoad(llvm::Value*, char const*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateAndEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateAnd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE12CreateCondBrEPNS_5ValueEPNS_10BasicBlockES8_\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCondBr(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateGEPEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateGEP(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateLoadEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateLoad(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE18CreateConstGEP1_32EPNS_5ValueEjRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstGEP1_32(llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreateAddEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE9CreatePHIEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreatePHI(llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateCastENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE10CreateICmpENS_7CmpInst9PredicateEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateICmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb0ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb0EEEE26CreateConstInBoundsGEP2_32EPNS_5ValueEjjRKNS_5TwineE\", \"llvm::IRBuilder<false, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<false> >::CreateConstInBoundsGEP2_32(llvm::Value*, unsigned int, unsigned int, llvm::Twine const&)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_19MSP430InterruptAttrEEEPT_v\", \"clang::MSP430InterruptAttr* clang::Decl::getAttr<clang::MSP430InterruptAttr>() const\"},\n    {\"_ZN5clang8ParseASTERNS_12PreprocessorEPNS_11ASTConsumerERNS_10ASTContextEbbPNS_20CodeCompleteConsumerE\", \"clang::ParseAST(clang::Preprocessor&, clang::ASTConsumer*, clang::ASTContext&, bool, bool, clang::CodeCompleteConsumer*)\"},\n    {\"_ZN5clang8ParseASTERNS_4SemaEb\", \"clang::ParseAST(clang::Sema&, bool)\"},\n    {\"_ZN5clang6Parser23ParseCXXInlineMethodDefENS_15AccessSpecifierERNS_10DeclaratorERKNS0_18ParsedTemplateInfoERKNS_14VirtSpecifiersE\", \"clang::Parser::ParseCXXInlineMethodDef(clang::AccessSpecifier, clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::VirtSpecifiers const&)\"},\n    {\"_ZN5clang6Parser21LateParsedDeclarationD0Ev\", \"clang::Parser::LateParsedDeclaration::~LateParsedDeclaration()\"},\n    {\"_ZN5clang6Parser21LateParsedDeclarationD1Ev\", \"clang::Parser::LateParsedDeclaration::~LateParsedDeclaration()\"},\n    {\"_ZN5clang6Parser21LateParsedDeclarationD2Ev\", \"clang::Parser::LateParsedDeclaration::~LateParsedDeclaration()\"},\n    {\"_ZN5clang6Parser21LateParsedDeclaration28ParseLexedMethodDeclarationsEv\", \"clang::Parser::LateParsedDeclaration::ParseLexedMethodDeclarations()\"},\n    {\"_ZN5clang6Parser21LateParsedDeclaration20ParseLexedMethodDefsEv\", \"clang::Parser::LateParsedDeclaration::ParseLexedMethodDefs()\"},\n    {\"_ZN5clang6Parser15LateParsedClassC1EPS0_PNS0_12ParsingClassE\", \"clang::Parser::LateParsedClass::LateParsedClass(clang::Parser*, clang::Parser::ParsingClass*)\"},\n    {\"_ZN5clang6Parser15LateParsedClassC2EPS0_PNS0_12ParsingClassE\", \"clang::Parser::LateParsedClass::LateParsedClass(clang::Parser*, clang::Parser::ParsingClass*)\"},\n    {\"_ZN5clang6Parser15LateParsedClassD0Ev\", \"clang::Parser::LateParsedClass::~LateParsedClass()\"},\n    {\"_ZN5clang6Parser15LateParsedClassD1Ev\", \"clang::Parser::LateParsedClass::~LateParsedClass()\"},\n    {\"_ZN5clang6Parser15LateParsedClassD2Ev\", \"clang::Parser::LateParsedClass::~LateParsedClass()\"},\n    {\"_ZN5clang6Parser15LateParsedClass28ParseLexedMethodDeclarationsEv\", \"clang::Parser::LateParsedClass::ParseLexedMethodDeclarations()\"},\n    {\"_ZN5clang6Parser28ParseLexedMethodDeclarationsERNS0_12ParsingClassE\", \"clang::Parser::ParseLexedMethodDeclarations(clang::Parser::ParsingClass&)\"},\n    {\"_ZN5clang6Parser15LateParsedClass20ParseLexedMethodDefsEv\", \"clang::Parser::LateParsedClass::ParseLexedMethodDefs()\"},\n    {\"_ZN5clang6Parser20ParseLexedMethodDefsERNS0_12ParsingClassE\", \"clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&)\"},\n    {\"_ZN5clang6Parser27LateParsedMethodDeclaration28ParseLexedMethodDeclarationsEv\", \"clang::Parser::LateParsedMethodDeclaration::ParseLexedMethodDeclarations()\"},\n    {\"_ZN5clang6Parser27ParseLexedMethodDeclarationERNS0_27LateParsedMethodDeclarationE\", \"clang::Parser::ParseLexedMethodDeclaration(clang::Parser::LateParsedMethodDeclaration&)\"},\n    {\"_ZN5clang6Parser11LexedMethod20ParseLexedMethodDefsEv\", \"clang::Parser::LexedMethod::ParseLexedMethodDefs()\"},\n    {\"_ZN5clang6Parser19ParseLexedMethodDefERNS0_11LexedMethodE\", \"clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&)\"},\n    {\"_ZN5clang6Parser20ConsumeAndStoreUntilENS_3tok9TokenKindES2_RN4llvm11SmallVectorINS_5TokenELj4EEEbb\", \"clang::Parser::ConsumeAndStoreUntil(clang::tok::TokenKind, clang::tok::TokenKind, llvm::SmallVector<clang::Token, 4u>&, bool, bool)\"},\n    {\"_ZN5clang6Parser11LexedMethodD1Ev\", \"clang::Parser::LexedMethod::~LexedMethod()\"},\n    {\"_ZN5clang6Parser11LexedMethodD0Ev\", \"clang::Parser::LexedMethod::~LexedMethod()\"},\n    {\"_ZN5clang6Parser27LateParsedMethodDeclarationD1Ev\", \"clang::Parser::LateParsedMethodDeclaration::~LateParsedMethodDeclaration()\"},\n    {\"_ZN5clang6Parser27LateParsedMethodDeclarationD0Ev\", \"clang::Parser::LateParsedMethodDeclaration::~LateParsedMethodDeclaration()\"},\n    {\"_ZN5clang6Parser13ParseTypeNameEPNS_11SourceRangeENS_10Declarator10TheContextE\", \"clang::Parser::ParseTypeName(clang::SourceRange*, clang::Declarator::TheContext)\"},\n    {\"_ZN5clang6Parser27ParseSpecifierQualifierListERNS_8DeclSpecE\", \"clang::Parser::ParseSpecifierQualifierList(clang::DeclSpec&)\"},\n    {\"_ZN5clang6Parser15ParseDeclaratorERNS_10DeclaratorE\", \"clang::Parser::ParseDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser18ParseGNUAttributesERNS_16ParsedAttributesEPNS_14SourceLocationE\", \"clang::Parser::ParseGNUAttributes(clang::ParsedAttributes&, clang::SourceLocation*)\"},\n    {\"_ZN5clang6Parser22isDeclarationSpecifierEb\", \"clang::Parser::isDeclarationSpecifier(bool)\"},\n    {\"_ZN5clang6Parser22ParseMicrosoftDeclSpecERNS_16ParsedAttributesE\", \"clang::Parser::ParseMicrosoftDeclSpec(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser28ParseMicrosoftTypeAttributesERNS_16ParsedAttributesE\", \"clang::Parser::ParseMicrosoftTypeAttributes(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser26ParseBorlandTypeAttributesERNS_16ParsedAttributesE\", \"clang::Parser::ParseBorlandTypeAttributes(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser28DiagnoseProhibitedAttributesERNS0_25ParsedAttributesWithRangeE\", \"clang::Parser::DiagnoseProhibitedAttributes(clang::Parser::ParsedAttributesWithRange&)\"},\n    {\"_ZN5clang6Parser16ParseDeclarationERNS_15ASTOwningVectorIPNS_4StmtELj32EEEjRNS_14SourceLocationERNS0_25ParsedAttributesWithRangeE\", \"clang::Parser::ParseDeclaration(clang::ASTOwningVector<clang::Stmt*, 32u>&, unsigned int, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&)\"},\n    {\"_ZN5clang6Parser22ParseSimpleDeclarationERNS_15ASTOwningVectorIPNS_4StmtELj32EEEjRNS_14SourceLocationERNS_16ParsedAttributesEb\", \"clang::Parser::ParseSimpleDeclaration(clang::ASTOwningVector<clang::Stmt*, 32u>&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, bool)\"},\n    {\"_ZN5clang6Parser26ParseDeclarationSpecifiersERNS_8DeclSpecERKNS0_18ParsedTemplateInfoENS_15AccessSpecifierENS0_15DeclSpecContextE\", \"clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext)\"},\n    {\"_ZN5clang6Parser39getDeclSpecContextFromDeclaratorContextEj\", \"clang::Parser::getDeclSpecContextFromDeclaratorContext(unsigned int)\"},\n    {\"_ZN5clang6Parser14ParseDeclGroupERNS0_15ParsingDeclSpecEjbPNS_14SourceLocationE\", \"clang::Parser::ParseDeclGroup(clang::Parser::ParsingDeclSpec&, unsigned int, bool, clang::SourceLocation*)\"},\n    {\"_ZN5clang6Parser31ParseDeclarationAfterDeclaratorERNS_10DeclaratorERKNS0_18ParsedTemplateInfoE\", \"clang::Parser::ParseDeclarationAfterDeclarator(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&)\"},\n    {\"_ZN5clang6Parser16ParseImplicitIntERNS_8DeclSpecEPNS_12CXXScopeSpecERKNS0_18ParsedTemplateInfoENS_15AccessSpecifierE\", \"clang::Parser::ParseImplicitInt(clang::DeclSpec&, clang::CXXScopeSpec*, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser18ParseEnumSpecifierENS_14SourceLocationERNS_8DeclSpecERKNS0_18ParsedTemplateInfoENS_15AccessSpecifierE\", \"clang::Parser::ParseEnumSpecifier(clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser23isConstructorDeclaratorEv\", \"clang::Parser::isConstructorDeclarator()\"},\n    {\"_ZN5clang6Parser20ParseTypeofSpecifierERNS_8DeclSpecE\", \"clang::Parser::ParseTypeofSpecifier(clang::DeclSpec&)\"},\n    {\"_ZN5clang6Parser26ParseOptionalTypeSpecifierERNS_8DeclSpecERbRPKcRjRKNS0_18ParsedTemplateInfoEb\", \"clang::Parser::ParseOptionalTypeSpecifier(clang::DeclSpec&, bool&, char const*&, unsigned int&, clang::Parser::ParsedTemplateInfo const&, bool)\"},\n    {\"_ZN5clang6Parser22ParseStructDeclarationERNS_8DeclSpecERNS0_13FieldCallbackE\", \"clang::Parser::ParseStructDeclaration(clang::DeclSpec&, clang::Parser::FieldCallback&)\"},\n    {\"_ZN5clang6Parser20ParseStructUnionBodyENS_14SourceLocationEjPNS_4DeclE\", \"clang::Parser::ParseStructUnionBody(clang::SourceLocation, unsigned int, clang::Decl*)\"},\n    {\"_ZZN5clang6Parser20ParseStructUnionBodyENS_14SourceLocationEjPNS_4DeclEEN14CFieldCallbackD1Ev\", \"clang::Parser::ParseStructUnionBody(clang::SourceLocation, unsigned int, clang::Decl*)::CFieldCallback::~CFieldCallback()\"},\n    {\"_ZN5clang6Parser13ParseEnumBodyENS_14SourceLocationEPNS_4DeclE\", \"clang::Parser::ParseEnumBody(clang::SourceLocation, clang::Decl*)\"},\n    {\"_ZNK5clang6Parser15isTypeQualifierEv\", \"clang::Parser::isTypeQualifier() const\"},\n    {\"_ZNK5clang6Parser24isKnownToBeTypeSpecifierERKNS_5TokenE\", \"clang::Parser::isKnownToBeTypeSpecifier(clang::Token const&) const\"},\n    {\"_ZN5clang6Parser24isTypeSpecifierQualifierEv\", \"clang::Parser::isTypeSpecifierQualifier()\"},\n    {\"_ZN5clang6Parser25ParseTypeQualifierListOptERNS_8DeclSpecEbb\", \"clang::Parser::ParseTypeQualifierListOpt(clang::DeclSpec&, bool, bool)\"},\n    {\"_ZN5clang6Parser23ParseDeclaratorInternalERNS_10DeclaratorEMS0_FvS2_E\", \"clang::Parser::ParseDeclaratorInternal(clang::Declarator&, void (clang::Parser::*)(clang::Declarator&))\"},\n    {\"_ZN5clang6Parser21ParseDirectDeclaratorERNS_10DeclaratorE\", \"clang::Parser::ParseDirectDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser20ParseParenDeclaratorERNS_10DeclaratorE\", \"clang::Parser::ParseParenDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser23ParseFunctionDeclaratorENS_14SourceLocationERNS_10DeclaratorERNS_16ParsedAttributesEb\", \"clang::Parser::ParseFunctionDeclarator(clang::SourceLocation, clang::Declarator&, clang::ParsedAttributes&, bool)\"},\n    {\"_ZN5clang6Parser22ParseBracketDeclaratorERNS_10DeclaratorE\", \"clang::Parser::ParseBracketDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser37ParseFunctionDeclaratorIdentifierListENS_14SourceLocationEPNS_14IdentifierInfoES1_RNS_10DeclaratorE\", \"clang::Parser::ParseFunctionDeclaratorIdentifierList(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Declarator&)\"},\n    {\"_ZN5clang6Parser30TryAltiVecVectorTokenOutOfLineEv\", \"clang::Parser::TryAltiVecVectorTokenOutOfLine()\"},\n    {\"_ZN5clang6Parser24TryAltiVecTokenOutOfLineERNS_8DeclSpecENS_14SourceLocationERPKcRjRb\", \"clang::Parser::TryAltiVecTokenOutOfLine(clang::DeclSpec&, clang::SourceLocation, char const*&, unsigned int&, bool&)\"},\n    {\"_ZZN5clang6Parser20ParseStructUnionBodyENS_14SourceLocationEjPNS_4DeclEEN14CFieldCallback6invokeERNS_15FieldDeclaratorE\", \"clang::Parser::ParseStructUnionBody(clang::SourceLocation, unsigned int, clang::Decl*)::CFieldCallback::invoke(clang::FieldDeclarator&)\"},\n    {\"_ZZN5clang6Parser20ParseStructUnionBodyENS_14SourceLocationEjPNS_4DeclEEN14CFieldCallbackD0Ev\", \"clang::Parser::ParseStructUnionBody(clang::SourceLocation, unsigned int, clang::Decl*)::CFieldCallback::~CFieldCallback()\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang4DeclEE6insertIPS3_EES6_S6_T_S7_\", \"clang::Decl** llvm::SmallVectorImpl<clang::Decl*>::insert<clang::Decl**>(clang::Decl**, clang::Decl**, clang::Decl**)\"},\n    {\"_ZN5clang6Parser14ParseNamespaceEjRNS_14SourceLocationES1_\", \"clang::Parser::ParseNamespace(unsigned int, clang::SourceLocation&, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser19ParseNamespaceAliasENS_14SourceLocationES1_PNS_14IdentifierInfoERS1_\", \"clang::Parser::ParseNamespaceAlias(clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser12ParseLinkageERNS0_15ParsingDeclSpecEj\", \"clang::Parser::ParseLinkage(clang::Parser::ParsingDeclSpec&, unsigned int)\"},\n    {\"_ZN5clang6Parser32ParseUsingDirectiveOrDeclarationEjRKNS0_18ParsedTemplateInfoERNS_14SourceLocationERNS0_25ParsedAttributesWithRangeE\", \"clang::Parser::ParseUsingDirectiveOrDeclaration(unsigned int, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&)\"},\n    {\"_ZN5clang6Parser19ParseUsingDirectiveEjNS_14SourceLocationERS1_RNS_16ParsedAttributesE\", \"clang::Parser::ParseUsingDirective(unsigned int, clang::SourceLocation, clang::SourceLocation&, clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser21ParseUsingDeclarationEjRKNS0_18ParsedTemplateInfoENS_14SourceLocationERS4_NS_15AccessSpecifierE\", \"clang::Parser::ParseUsingDeclaration(unsigned int, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::SourceLocation&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser28ParseStaticAssertDeclarationERNS_14SourceLocationE\", \"clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser22ParseDecltypeSpecifierERNS_8DeclSpecE\", \"clang::Parser::ParseDecltypeSpecifier(clang::DeclSpec&)\"},\n    {\"_ZN5clang6Parser14ParseClassNameERNS_14SourceLocationEPNS_12CXXScopeSpecE\", \"clang::Parser::ParseClassName(clang::SourceLocation&, clang::CXXScopeSpec*)\"},\n    {\"_ZN5clang6Parser19ParseClassSpecifierENS_3tok9TokenKindENS_14SourceLocationERNS_8DeclSpecERKNS0_18ParsedTemplateInfoENS_15AccessSpecifierEb\", \"clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool)\"},\n    {\"_ZNK5clang6Parser25isCXX0XClassVirtSpecifierEv\", \"clang::Parser::isCXX0XClassVirtSpecifier() const\"},\n    {\"_ZN5clang6Parser27ParseCXXMemberSpecificationENS_14SourceLocationEjPNS_4DeclE\", \"clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, unsigned int, clang::Decl*)\"},\n    {\"_ZN5clang6Parser15ParseBaseClauseEPNS_4DeclE\", \"clang::Parser::ParseBaseClause(clang::Decl*)\"},\n    {\"_ZN5clang6Parser18ParseBaseSpecifierEPNS_4DeclE\", \"clang::Parser::ParseBaseSpecifier(clang::Decl*)\"},\n    {\"_ZNK5clang6Parser27getAccessSpecifierIfPresentEv\", \"clang::Parser::getAccessSpecifierIfPresent() const\"},\n    {\"_ZN5clang6Parser31HandleMemberFunctionDefaultArgsERNS_10DeclaratorEPNS_4DeclE\", \"clang::Parser::HandleMemberFunctionDefaultArgs(clang::Declarator&, clang::Decl*)\"},\n    {\"_ZNK5clang6Parser20isCXX0XVirtSpecifierEv\", \"clang::Parser::isCXX0XVirtSpecifier() const\"},\n    {\"_ZN5clang6Parser34ParseOptionalCXX0XVirtSpecifierSeqERNS_14VirtSpecifiersE\", \"clang::Parser::ParseOptionalCXX0XVirtSpecifierSeq(clang::VirtSpecifiers&)\"},\n    {\"_ZN5clang6Parser39ParseOptionalCXX0XClassVirtSpecifierSeqERNS_19ClassVirtSpecifiersE\", \"clang::Parser::ParseOptionalCXX0XClassVirtSpecifierSeq(clang::ClassVirtSpecifiers&)\"},\n    {\"_ZN5clang6Parser30ParseCXXClassMemberDeclarationENS_15AccessSpecifierERKNS0_18ParsedTemplateInfoEPNS0_21ParsingDeclRAIIObjectE\", \"clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ParsingDeclRAIIObject*)\"},\n    {\"_ZN5clang6Parser27ParseConstructorInitializerEPNS_4DeclE\", \"clang::Parser::ParseConstructorInitializer(clang::Decl*)\"},\n    {\"_ZN5clang6Parser19ParseMemInitializerEPNS_4DeclE\", \"clang::Parser::ParseMemInitializer(clang::Decl*)\"},\n    {\"_ZN5clang6Parser27ParseExceptionSpecificationERNS_14SourceLocationERN4llvm15SmallVectorImplINS_9OpaquePtrINS_8QualTypeEEEEERNS4_INS_11SourceRangeEEERb\", \"clang::Parser::ParseExceptionSpecification(clang::SourceLocation&, llvm::SmallVectorImpl<clang::OpaquePtr<clang::QualType> >&, llvm::SmallVectorImpl<clang::SourceRange>&, bool&)\"},\n    {\"_ZN5clang6Parser23ParseTrailingReturnTypeEv\", \"clang::Parser::ParseTrailingReturnType()\"},\n    {\"_ZN5clang6Parser16PushParsingClassEPNS_4DeclEb\", \"clang::Parser::PushParsingClass(clang::Decl*, bool)\"},\n    {\"_ZN5clang6Parser23DeallocateParsedClassesEPNS0_12ParsingClassE\", \"clang::Parser::DeallocateParsedClasses(clang::Parser::ParsingClass*)\"},\n    {\"_ZN5clang6Parser15PopParsingClassEv\", \"clang::Parser::PopParsingClass()\"},\n    {\"_ZN5clang6Parser20ParseCXX0XAttributesERNS0_25ParsedAttributesWithRangeEPNS_14SourceLocationE\", \"clang::Parser::ParseCXX0XAttributes(clang::Parser::ParsedAttributesWithRange&, clang::SourceLocation*)\"},\n    {\"_ZN5clang6Parser23ParseCXX0XAlignArgumentENS_14SourceLocationE\", \"clang::Parser::ParseCXX0XAlignArgument(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser24ParseMicrosoftAttributesERNS_16ParsedAttributesEPNS_14SourceLocationE\", \"clang::Parser::ParseMicrosoftAttributes(clang::ParsedAttributes&, clang::SourceLocation*)\"},\n    {\"_ZNSt5dequeIPN5clang6Parser12ParsingClassESaIS3_EE9push_backERKS3_\", \"std::deque<clang::Parser::ParsingClass*, std::allocator<clang::Parser::ParsingClass*> >::push_back(clang::Parser::ParsingClass* const&)\"},\n    {\"_ZNSt5dequeIPN5clang6Parser12ParsingClassESaIS3_EE17_M_reallocate_mapEmb\", \"std::deque<clang::Parser::ParsingClass*, std::allocator<clang::Parser::ParsingClass*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang6Parser25LateParsedDefaultArgumentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Parser::LateParsedDefaultArgument, false>::grow(unsigned long)\"},\n    {\"_ZN5clang6Parser15ParseExpressionEv\", \"clang::Parser::ParseExpression()\"},\n    {\"_ZN5clang6Parser25ParseAssignmentExpressionEv\", \"clang::Parser::ParseAssignmentExpression()\"},\n    {\"_ZN5clang6Parser26ParseRHSOfBinaryExpressionENS_12ActionResultIPNS_4ExprELb1EEENS_4prec5LevelE\", \"clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*, true>, clang::prec::Level)\"},\n    {\"_ZN5clang6Parser28ParseExpressionWithLeadingAtENS_14SourceLocationE\", \"clang::Parser::ParseExpressionWithLeadingAt(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser35ParseExpressionWithLeadingExtensionENS_14SourceLocationE\", \"clang::Parser::ParseExpressionWithLeadingExtension(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser19ParseCastExpressionEbbNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Parser::ParseCastExpression(bool, bool, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang6Parser43ParseAssignmentExprWithObjCMessageExprStartENS_14SourceLocationES1_NS_9OpaquePtrINS_8QualTypeEEEPNS_4ExprE\", \"clang::Parser::ParseAssignmentExprWithObjCMessageExprStart(clang::SourceLocation, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::Expr*)\"},\n    {\"_ZN5clang6Parser28ParsePostfixExpressionSuffixENS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_ZN5clang6Parser23ParseConstantExpressionEv\", \"clang::Parser::ParseConstantExpression()\"},\n    {\"_ZN5clang6Parser19ParseCastExpressionEbbRbNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Parser::ParseCastExpression(bool, bool, bool&, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang6Parser20ParseParenExpressionERNS0_16ParenParseOptionEbNS_9OpaquePtrINS_8QualTypeEEERS5_RNS_14SourceLocationE\", \"clang::Parser::ParseParenExpression(clang::Parser::ParenParseOption&, bool, clang::OpaquePtr<clang::QualType>, clang::OpaquePtr<clang::QualType>&, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser28ParseStringLiteralExpressionEv\", \"clang::Parser::ParseStringLiteralExpression()\"},\n    {\"_ZN5clang6Parser29ParseBuiltinPrimaryExpressionEv\", \"clang::Parser::ParseBuiltinPrimaryExpression()\"},\n    {\"_ZN5clang6Parser28ParseSizeofAlignofExpressionEv\", \"clang::Parser::ParseSizeofAlignofExpression()\"},\n    {\"_ZN5clang6Parser27ParseBlockLiteralExpressionEv\", \"clang::Parser::ParseBlockLiteralExpression()\"},\n    {\"_ZN5clang6Parser19ParseExpressionListERN4llvm15SmallVectorImplIPNS_4ExprEEERNS2_INS_14SourceLocationEEEMNS_4SemaEFvPNS_5ScopeES4_PS4_jES4_\", \"clang::Parser::ParseExpressionList(llvm::SmallVectorImpl<clang::Expr*>&, llvm::SmallVectorImpl<clang::SourceLocation>&, void (clang::Sema::*)(clang::Scope*, clang::Expr*, clang::Expr**, unsigned int), clang::Expr*)\"},\n    {\"_ZN5clang6Parser33ParseExprAfterTypeofSizeofAlignofERKNS_5TokenERbRNS_9OpaquePtrINS_8QualTypeEEERNS_11SourceRangeE\", \"clang::Parser::ParseExprAfterTypeofSizeofAlignof(clang::Token const&, bool&, clang::OpaquePtr<clang::QualType>&, clang::SourceRange&)\"},\n    {\"_ZN5clang6Parser30ParseCompoundLiteralExpressionENS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationES4_\", \"clang::Parser::ParseCompoundLiteralExpression(clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser12ParseBlockIdEv\", \"clang::Parser::ParseBlockId()\"},\n    {\"_ZN5clang6Parser30ParseOptionalCXXScopeSpecifierERNS_12CXXScopeSpecENS_9OpaquePtrINS_8QualTypeEEEbPb\", \"clang::Parser::ParseOptionalCXXScopeSpecifier(clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>, bool, bool*)\"},\n    {\"_ZN5clang6Parser26ParseUnqualifiedIdOperatorERNS_12CXXScopeSpecEbNS_9OpaquePtrINS_8QualTypeEEERNS_13UnqualifiedIdE\", \"clang::Parser::ParseUnqualifiedIdOperator(clang::CXXScopeSpec&, bool, clang::OpaquePtr<clang::QualType>, clang::UnqualifiedId&)\"},\n    {\"_ZN5clang6Parser20ParseCXXIdExpressionEb\", \"clang::Parser::ParseCXXIdExpression(bool)\"},\n    {\"_ZN5clang6Parser18ParseUnqualifiedIdERNS_12CXXScopeSpecEbbbNS_9OpaquePtrINS_8QualTypeEEERNS_13UnqualifiedIdE\", \"clang::Parser::ParseUnqualifiedId(clang::CXXScopeSpec&, bool, bool, bool, clang::OpaquePtr<clang::QualType>, clang::UnqualifiedId&)\"},\n    {\"_ZN5clang6Parser13ParseCXXCastsEv\", \"clang::Parser::ParseCXXCasts()\"},\n    {\"_ZN5clang6Parser14ParseCXXTypeidEv\", \"clang::Parser::ParseCXXTypeid()\"},\n    {\"_ZN5clang6Parser14ParseCXXUuidofEv\", \"clang::Parser::ParseCXXUuidof()\"},\n    {\"_ZN5clang6Parser24ParseCXXPseudoDestructorEPNS_4ExprENS_14SourceLocationENS_3tok9TokenKindERNS_12CXXScopeSpecENS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Parser::ParseCXXPseudoDestructor(clang::Expr*, clang::SourceLocation, clang::tok::TokenKind, clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang6Parser28ParseUnqualifiedIdTemplateIdERNS_12CXXScopeSpecEPNS_14IdentifierInfoENS_14SourceLocationEbNS_9OpaquePtrINS_8QualTypeEEERNS_13UnqualifiedIdEbS5_\", \"clang::Parser::ParseUnqualifiedIdTemplateId(clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation, bool, clang::OpaquePtr<clang::QualType>, clang::UnqualifiedId&, bool, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser19ParseCXXBoolLiteralEv\", \"clang::Parser::ParseCXXBoolLiteral()\"},\n    {\"_ZN5clang6Parser20ParseThrowExpressionEv\", \"clang::Parser::ParseThrowExpression()\"},\n    {\"_ZN5clang6Parser12ParseCXXThisEv\", \"clang::Parser::ParseCXXThis()\"},\n    {\"_ZN5clang6Parser31ParseCXXTypeConstructExpressionERKNS_8DeclSpecE\", \"clang::Parser::ParseCXXTypeConstructExpression(clang::DeclSpec const&)\"},\n    {\"_ZN5clang6Parser17ParseCXXConditionERNS_12ActionResultIPNS_4ExprELb1EEERPNS_4DeclENS_14SourceLocationEb\", \"clang::Parser::ParseCXXCondition(clang::ActionResult<clang::Expr*, true>&, clang::Decl*&, clang::SourceLocation, bool)\"},\n    {\"_ZNK5clang6Parser24isCXXSimpleTypeSpecifierEv\", \"clang::Parser::isCXXSimpleTypeSpecifier() const\"},\n    {\"_ZN5clang6Parser27ParseCXXSimpleTypeSpecifierERNS_8DeclSpecE\", \"clang::Parser::ParseCXXSimpleTypeSpecifier(clang::DeclSpec&)\"},\n    {\"_ZN5clang6Parser24ParseCXXTypeSpecifierSeqERNS_8DeclSpecE\", \"clang::Parser::ParseCXXTypeSpecifierSeq(clang::DeclSpec&)\"},\n    {\"_ZN5clang6Parser21ParseCXXNewExpressionEbNS_14SourceLocationE\", \"clang::Parser::ParseCXXNewExpression(bool, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser27ParseExpressionListOrTypeIdERN4llvm15SmallVectorImplIPNS_4ExprEEERNS_10DeclaratorE\", \"clang::Parser::ParseExpressionListOrTypeId(llvm::SmallVectorImpl<clang::Expr*>&, clang::Declarator&)\"},\n    {\"_ZN5clang6Parser24ParseDirectNewDeclaratorERNS_10DeclaratorE\", \"clang::Parser::ParseDirectNewDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser24ParseCXXDeleteExpressionEbNS_14SourceLocationE\", \"clang::Parser::ParseCXXDeleteExpression(bool, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser19ParseUnaryTypeTraitEv\", \"clang::Parser::ParseUnaryTypeTrait()\"},\n    {\"_ZN5clang6Parser20ParseBinaryTypeTraitEv\", \"clang::Parser::ParseBinaryTypeTrait()\"},\n    {\"_ZN5clang6Parser32ParseCXXAmbiguousParenExpressionERNS0_16ParenParseOptionERNS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationERS7_\", \"clang::Parser::ParseCXXAmbiguousParenExpression(clang::Parser::ParenParseOption&, clang::OpaquePtr<clang::QualType>&, clang::SourceLocation, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser39ParseInitializerWithPotentialDesignatorEv\", \"clang::Parser::ParseInitializerWithPotentialDesignator()\"},\n    {\"_ZN5clang6Parser21ParseBraceInitializerEv\", \"clang::Parser::ParseBraceInitializer()\"},\n    {\"_ZN5clang6Parser21ParseObjCAtDirectivesEv\", \"clang::Parser::ParseObjCAtDirectives()\"},\n    {\"_ZN5clang6Parser27ParseObjCAtClassDeclarationENS_14SourceLocationE\", \"clang::Parser::ParseObjCAtClassDeclaration(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser31ParseObjCAtInterfaceDeclarationENS_14SourceLocationERNS_16ParsedAttributesE\", \"clang::Parser::ParseObjCAtInterfaceDeclaration(clang::SourceLocation, clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser30ParseObjCAtProtocolDeclarationENS_14SourceLocationERNS_16ParsedAttributesE\", \"clang::Parser::ParseObjCAtProtocolDeclaration(clang::SourceLocation, clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser36ParseObjCAtImplementationDeclarationENS_14SourceLocationE\", \"clang::Parser::ParseObjCAtImplementationDeclaration(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser25ParseObjCAtEndDeclarationENS_11SourceRangeE\", \"clang::Parser::ParseObjCAtEndDeclaration(clang::SourceRange)\"},\n    {\"_ZN5clang6Parser27ParseObjCAtAliasDeclarationENS_14SourceLocationE\", \"clang::Parser::ParseObjCAtAliasDeclaration(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser27ParseObjCPropertySynthesizeENS_14SourceLocationE\", \"clang::Parser::ParseObjCPropertySynthesize(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser24ParseObjCPropertyDynamicENS_14SourceLocationE\", \"clang::Parser::ParseObjCPropertyDynamic(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser27ParseObjCProtocolReferencesERN4llvm15SmallVectorImplIPNS_4DeclEEERNS2_INS_14SourceLocationEEEbRS7_SA_\", \"clang::Parser::ParseObjCProtocolReferences(llvm::SmallVectorImpl<clang::Decl*>&, llvm::SmallVectorImpl<clang::SourceLocation>&, bool, clang::SourceLocation&, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser31ParseObjCClassInstanceVariablesEPNS_4DeclENS_3tok15ObjCKeywordKindENS_14SourceLocationE\", \"clang::Parser::ParseObjCClassInstanceVariables(clang::Decl*, clang::tok::ObjCKeywordKind, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser26ParseObjCInterfaceDeclListEPNS_4DeclENS_3tok15ObjCKeywordKindE\", \"clang::Parser::ParseObjCInterfaceDeclList(clang::Decl*, clang::tok::ObjCKeywordKind)\"},\n    {\"_ZN5clang6Parser24ParseObjCMethodPrototypeEPNS_4DeclENS_3tok15ObjCKeywordKindE\", \"clang::Parser::ParseObjCMethodPrototype(clang::Decl*, clang::tok::ObjCKeywordKind)\"},\n    {\"_ZN5clang6Parser19ParseObjCMethodDeclENS_14SourceLocationENS_3tok9TokenKindEPNS_4DeclENS2_15ObjCKeywordKindE\", \"clang::Parser::ParseObjCMethodDecl(clang::SourceLocation, clang::tok::TokenKind, clang::Decl*, clang::tok::ObjCKeywordKind)\"},\n    {\"_ZN5clang6Parser26ParseObjCPropertyAttributeERNS_12ObjCDeclSpecEPNS_4DeclE\", \"clang::Parser::ParseObjCPropertyAttribute(clang::ObjCDeclSpec&, clang::Decl*)\"},\n    {\"_ZN5clang6Parser22ParseObjCSelectorPieceERNS_14SourceLocationE\", \"clang::Parser::ParseObjCSelectorPiece(clang::SourceLocation&)\"},\n    {\"_ZNK5clang6Parser18isTokIdentifier_inEv\", \"clang::Parser::isTokIdentifier_in() const\"},\n    {\"_ZN5clang6Parser26ParseObjCTypeQualifierListERNS_12ObjCDeclSpecEb\", \"clang::Parser::ParseObjCTypeQualifierList(clang::ObjCDeclSpec&, bool)\"},\n    {\"_ZN5clang6Parser17ParseObjCTypeNameERNS_12ObjCDeclSpecEb\", \"clang::Parser::ParseObjCTypeName(clang::ObjCDeclSpec&, bool)\"},\n    {\"_ZN5clang6Parser27ParseObjCProtocolQualifiersERNS_8DeclSpecE\", \"clang::Parser::ParseObjCProtocolQualifiers(clang::DeclSpec&)\"},\n    {\"_ZZN5clang6Parser31ParseObjCClassInstanceVariablesEPNS_4DeclENS_3tok15ObjCKeywordKindENS_14SourceLocationEEN16ObjCIvarCallbackD1Ev\", \"clang::Parser::ParseObjCClassInstanceVariables(clang::Decl*, clang::tok::ObjCKeywordKind, clang::SourceLocation)::ObjCIvarCallback::~ObjCIvarCallback()\"},\n    {\"_ZN5clang6Parser24FinishPendingObjCActionsEv\", \"clang::Parser::FinishPendingObjCActions()\"},\n    {\"_ZN5clang6Parser18ParseObjCThrowStmtENS_14SourceLocationE\", \"clang::Parser::ParseObjCThrowStmt(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser25ParseObjCSynchronizedStmtENS_14SourceLocationE\", \"clang::Parser::ParseObjCSynchronizedStmt(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser16ParseObjCTryStmtENS_14SourceLocationE\", \"clang::Parser::ParseObjCTryStmt(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser25ParseObjCMethodDefinitionEv\", \"clang::Parser::ParseObjCMethodDefinition()\"},\n    {\"_ZN5clang6Parser20ParseObjCAtStatementENS_14SourceLocationE\", \"clang::Parser::ParseObjCAtStatement(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser21ParseObjCAtExpressionENS_14SourceLocationE\", \"clang::Parser::ParseObjCAtExpression(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser22ParseObjCStringLiteralENS_14SourceLocationE\", \"clang::Parser::ParseObjCStringLiteral(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser25ParseObjCEncodeExpressionENS_14SourceLocationE\", \"clang::Parser::ParseObjCEncodeExpression(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser27ParseObjCProtocolExpressionENS_14SourceLocationE\", \"clang::Parser::ParseObjCProtocolExpression(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser27ParseObjCSelectorExpressionENS_14SourceLocationE\", \"clang::Parser::ParseObjCSelectorExpression(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser26ParseObjCXXMessageReceiverERbRPv\", \"clang::Parser::ParseObjCXXMessageReceiver(bool&, void*&)\"},\n    {\"_ZN5clang6Parser29isSimpleObjCMessageExpressionEv\", \"clang::Parser::isSimpleObjCMessageExpression()\"},\n    {\"_ZN5clang6Parser43isStartOfObjCClassMessageMissingOpenBracketEv\", \"clang::Parser::isStartOfObjCClassMessageMissingOpenBracket()\"},\n    {\"_ZN5clang6Parser26ParseObjCMessageExpressionEv\", \"clang::Parser::ParseObjCMessageExpression()\"},\n    {\"_ZN5clang6Parser30ParseObjCMessageExpressionBodyENS_14SourceLocationES1_NS_9OpaquePtrINS_8QualTypeEEEPNS_4ExprE\", \"clang::Parser::ParseObjCMessageExpressionBody(clang::SourceLocation, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::Expr*)\"},\n    {\"_ZZN5clang6Parser31ParseObjCClassInstanceVariablesEPNS_4DeclENS_3tok15ObjCKeywordKindENS_14SourceLocationEEN16ObjCIvarCallback6invokeERNS_15FieldDeclaratorE\", \"clang::Parser::ParseObjCClassInstanceVariables(clang::Decl*, clang::tok::ObjCKeywordKind, clang::SourceLocation)::ObjCIvarCallback::invoke(clang::FieldDeclarator&)\"},\n    {\"_ZZN5clang6Parser31ParseObjCClassInstanceVariablesEPNS_4DeclENS_3tok15ObjCKeywordKindENS_14SourceLocationEEN16ObjCIvarCallbackD0Ev\", \"clang::Parser::ParseObjCClassInstanceVariables(clang::Decl*, clang::tok::ObjCKeywordKind, clang::SourceLocation)::ObjCIvarCallback::~ObjCIvarCallback()\"},\n    {\"_ZN5clang6Parser20ObjCPropertyCallbackD1Ev\", \"clang::Parser::ObjCPropertyCallback::~ObjCPropertyCallback()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang15DeclaratorChunk9ParamInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::DeclaratorChunk::ParamInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4Sema11ObjCArgInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Sema::ObjCArgInfo, false>::grow(unsigned long)\"},\n    {\"_ZN5clang6Parser20ObjCPropertyCallback6invokeERNS_15FieldDeclaratorE\", \"clang::Parser::ObjCPropertyCallback::invoke(clang::FieldDeclarator&)\"},\n    {\"_ZN5clang6Parser20ObjCPropertyCallbackD0Ev\", \"clang::Parser::ObjCPropertyCallback::~ObjCPropertyCallback()\"},\n    {\"_ZN5clang6Parser18HandlePragmaUnusedEv\", \"clang::Parser::HandlePragmaUnused()\"},\n    {\"_ZN5clang26PragmaGCCVisibilityHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaGCCVisibilityHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang17PragmaPackHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaPackHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang18PragmaAlignHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaAlignHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_Z16ParseAlignPragmaRN5clang4SemaERNS_12PreprocessorERNS_5TokenEb\", \"ParseAlignPragma(clang::Sema&, clang::Preprocessor&, clang::Token&, bool)\"},\n    {\"_ZN5clang20PragmaOptionsHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaOptionsHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang19PragmaUnusedHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaUnusedHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang17PragmaWeakHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaWeakHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang18PragmaAlignHandlerD1Ev\", \"clang::PragmaAlignHandler::~PragmaAlignHandler()\"},\n    {\"_ZN5clang18PragmaAlignHandlerD0Ev\", \"clang::PragmaAlignHandler::~PragmaAlignHandler()\"},\n    {\"_ZN5clang26PragmaGCCVisibilityHandlerD1Ev\", \"clang::PragmaGCCVisibilityHandler::~PragmaGCCVisibilityHandler()\"},\n    {\"_ZN5clang26PragmaGCCVisibilityHandlerD0Ev\", \"clang::PragmaGCCVisibilityHandler::~PragmaGCCVisibilityHandler()\"},\n    {\"_ZN5clang20PragmaOptionsHandlerD1Ev\", \"clang::PragmaOptionsHandler::~PragmaOptionsHandler()\"},\n    {\"_ZN5clang20PragmaOptionsHandlerD0Ev\", \"clang::PragmaOptionsHandler::~PragmaOptionsHandler()\"},\n    {\"_ZN5clang17PragmaPackHandlerD1Ev\", \"clang::PragmaPackHandler::~PragmaPackHandler()\"},\n    {\"_ZN5clang17PragmaPackHandlerD0Ev\", \"clang::PragmaPackHandler::~PragmaPackHandler()\"},\n    {\"_ZN5clang19PragmaUnusedHandlerD1Ev\", \"clang::PragmaUnusedHandler::~PragmaUnusedHandler()\"},\n    {\"_ZN5clang19PragmaUnusedHandlerD0Ev\", \"clang::PragmaUnusedHandler::~PragmaUnusedHandler()\"},\n    {\"_ZN5clang17PragmaWeakHandlerD1Ev\", \"clang::PragmaWeakHandler::~PragmaWeakHandler()\"},\n    {\"_ZN5clang17PragmaWeakHandlerD0Ev\", \"clang::PragmaWeakHandler::~PragmaWeakHandler()\"},\n    {\"_ZN5clang6Parser27ParseStatementOrDeclarationERNS_15ASTOwningVectorIPNS_4StmtELj32EEEb\", \"clang::Parser::ParseStatementOrDeclaration(clang::ASTOwningVector<clang::Stmt*, 32u>&, bool)\"},\n    {\"_ZN5clang6Parser21ParseLabeledStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseLabeledStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser18ParseCaseStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseCaseStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser21ParseDefaultStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseDefaultStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser22ParseCompoundStatementERNS_16ParsedAttributesEb\", \"clang::Parser::ParseCompoundStatement(clang::ParsedAttributes&, bool)\"},\n    {\"_ZN5clang6Parser16ParseIfStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseIfStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser20ParseSwitchStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseSwitchStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser19ParseWhileStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseWhileStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser16ParseDoStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseDoStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser17ParseForStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseForStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser18ParseGotoStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseGotoStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser22ParseContinueStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseContinueStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser19ParseBreakStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseBreakStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser20ParseReturnStatementERNS_16ParsedAttributesE\", \"clang::Parser::ParseReturnStatement(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser17ParseAsmStatementERb\", \"clang::Parser::ParseAsmStatement(bool&)\"},\n    {\"_ZN5clang6Parser16ParseCXXTryBlockERNS_16ParsedAttributesE\", \"clang::Parser::ParseCXXTryBlock(clang::ParsedAttributes&)\"},\n    {\"_ZN5clang6Parser26ParseCompoundStatementBodyEb\", \"clang::Parser::ParseCompoundStatementBody(bool)\"},\n    {\"_ZN5clang6Parser25ParseParenExprOrConditionERNS_12ActionResultIPNS_4ExprELb1EEERPNS_4DeclENS_14SourceLocationEb\", \"clang::Parser::ParseParenExprOrCondition(clang::ActionResult<clang::Expr*, true>&, clang::Decl*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang6Parser31FuzzyParseMicrosoftAsmStatementENS_14SourceLocationE\", \"clang::Parser::FuzzyParseMicrosoftAsmStatement(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser19ParseAsmOperandsOptERN4llvm15SmallVectorImplIPNS_14IdentifierInfoEEERNS2_IPNS_4ExprEEESA_\", \"clang::Parser::ParseAsmOperandsOpt(llvm::SmallVectorImpl<clang::IdentifierInfo*>&, llvm::SmallVectorImpl<clang::Expr*>&, llvm::SmallVectorImpl<clang::Expr*>&)\"},\n    {\"_ZN5clang6Parser26ParseFunctionStatementBodyEPNS_4DeclE\", \"clang::Parser::ParseFunctionStatementBody(clang::Decl*)\"},\n    {\"_ZN5clang6Parser40trySkippingFunctionBodyForCodeCompletionEv\", \"clang::Parser::trySkippingFunctionBodyForCodeCompletion()\"},\n    {\"_ZN5clang6Parser21ParseFunctionTryBlockEPNS_4DeclE\", \"clang::Parser::ParseFunctionTryBlock(clang::Decl*)\"},\n    {\"_ZN5clang6Parser22ParseCXXTryBlockCommonENS_14SourceLocationE\", \"clang::Parser::ParseCXXTryBlockCommon(clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser18ParseCXXCatchBlockEv\", \"clang::Parser::ParseCXXCatchBlock()\"},\n    {\"_ZN5clang6Parser36ParseDeclarationStartingWithTemplateEjRNS_14SourceLocationENS_15AccessSpecifierE\", \"clang::Parser::ParseDeclarationStartingWithTemplate(unsigned int, clang::SourceLocation&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser26ParseExplicitInstantiationENS_14SourceLocationES1_RS1_\", \"clang::Parser::ParseExplicitInstantiation(clang::SourceLocation, clang::SourceLocation, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser40ParseTemplateDeclarationOrSpecializationEjRNS_14SourceLocationENS_15AccessSpecifierE\", \"clang::Parser::ParseTemplateDeclarationOrSpecialization(unsigned int, clang::SourceLocation&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser23ParseTemplateParametersEjRN4llvm15SmallVectorImplIPNS_4DeclEEERNS_14SourceLocationES8_\", \"clang::Parser::ParseTemplateParameters(unsigned int, llvm::SmallVectorImpl<clang::Decl*>&, clang::SourceLocation&, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser35ParseSingleDeclarationAfterTemplateEjRKNS0_18ParsedTemplateInfoERNS0_21ParsingDeclRAIIObjectERNS_14SourceLocationENS_15AccessSpecifierE\", \"clang::Parser::ParseSingleDeclarationAfterTemplate(unsigned int, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser26ParseTemplateParameterListEjRN4llvm15SmallVectorImplIPNS_4DeclEEE\", \"clang::Parser::ParseTemplateParameterList(unsigned int, llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang6Parser22ParseTemplateParameterEjj\", \"clang::Parser::ParseTemplateParameter(unsigned int, unsigned int)\"},\n    {\"_ZN5clang6Parser30isStartOfTemplateTypeParameterEv\", \"clang::Parser::isStartOfTemplateTypeParameter()\"},\n    {\"_ZN5clang6Parser18ParseTypeParameterEjj\", \"clang::Parser::ParseTypeParameter(unsigned int, unsigned int)\"},\n    {\"_ZN5clang6Parser30ParseTemplateTemplateParameterEjj\", \"clang::Parser::ParseTemplateTemplateParameter(unsigned int, unsigned int)\"},\n    {\"_ZN5clang6Parser29ParseNonTypeTemplateParameterEjj\", \"clang::Parser::ParseNonTypeTemplateParameter(unsigned int, unsigned int)\"},\n    {\"_ZN5clang6Parser29ParseTemplateTemplateArgumentEv\", \"clang::Parser::ParseTemplateTemplateArgument()\"},\n    {\"_ZN5clang6Parser32ParseTemplateIdAfterTemplateNameENS_9OpaquePtrINS_12TemplateNameEEENS_14SourceLocationEPKNS_12CXXScopeSpecEbRS4_RN4llvm11SmallVectorINS_22ParsedTemplateArgumentELj16EEES8_\", \"clang::Parser::ParseTemplateIdAfterTemplateName(clang::OpaquePtr<clang::TemplateName>, clang::SourceLocation, clang::CXXScopeSpec const*, bool, clang::SourceLocation&, llvm::SmallVector<clang::ParsedTemplateArgument, 16u>&, clang::SourceLocation&)\"},\n    {\"_ZN5clang6Parser25ParseTemplateArgumentListERN4llvm11SmallVectorINS_22ParsedTemplateArgumentELj16EEE\", \"clang::Parser::ParseTemplateArgumentList(llvm::SmallVector<clang::ParsedTemplateArgument, 16u>&)\"},\n    {\"_ZN5clang6Parser23AnnotateTemplateIdTokenENS_9OpaquePtrINS_12TemplateNameEEENS_16TemplateNameKindEPKNS_12CXXScopeSpecERNS_13UnqualifiedIdENS_14SourceLocationEb\", \"clang::Parser::AnnotateTemplateIdToken(clang::OpaquePtr<clang::TemplateName>, clang::TemplateNameKind, clang::CXXScopeSpec const*, clang::UnqualifiedId&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang6Parser29AnnotateTemplateIdTokenAsTypeEPKNS_12CXXScopeSpecE\", \"clang::Parser::AnnotateTemplateIdTokenAsType(clang::CXXScopeSpec const*)\"},\n    {\"_ZN5clang6Parser21ParseTemplateArgumentEv\", \"clang::Parser::ParseTemplateArgument()\"},\n    {\"_ZN5clang6Parser22IsTemplateArgumentListEj\", \"clang::Parser::IsTemplateArgumentList(unsigned int)\"},\n    {\"_ZNK5clang6Parser18ParsedTemplateInfo14getSourceRangeEv\", \"clang::Parser::ParsedTemplateInfo::getSourceRange() const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang22ParsedTemplateArgumentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long)\"},\n    {\"_ZN5clang6Parser25isCXXDeclarationStatementEv\", \"clang::Parser::isCXXDeclarationStatement()\"},\n    {\"_ZN5clang6Parser22isCXXSimpleDeclarationEv\", \"clang::Parser::isCXXSimpleDeclaration()\"},\n    {\"_ZN5clang6Parser25isCXXDeclarationSpecifierEv\", \"clang::Parser::isCXXDeclarationSpecifier()\"},\n    {\"_ZN5clang6Parser25TryParseSimpleDeclarationEv\", \"clang::Parser::TryParseSimpleDeclaration()\"},\n    {\"_ZN5clang6Parser23TryParseTypeofSpecifierEv\", \"clang::Parser::TryParseTypeofSpecifier()\"},\n    {\"_ZN5clang6Parser26TryParseProtocolQualifiersEv\", \"clang::Parser::TryParseProtocolQualifiers()\"},\n    {\"_ZN5clang6Parser26TryParseInitDeclaratorListEv\", \"clang::Parser::TryParseInitDeclaratorList()\"},\n    {\"_ZN5clang6Parser18TryParseDeclaratorEbb\", \"clang::Parser::TryParseDeclarator(bool, bool)\"},\n    {\"_ZN5clang6Parser25isCXXConditionDeclarationEv\", \"clang::Parser::isCXXConditionDeclaration()\"},\n    {\"_ZN5clang6Parser11isCXXTypeIdENS0_25TentativeCXXTypeIdContextERb\", \"clang::Parser::isCXXTypeId(clang::Parser::TentativeCXXTypeIdContext, bool&)\"},\n    {\"_ZN5clang6Parser25isCXX0XAttributeSpecifierEbPNS_3tok9TokenKindE\", \"clang::Parser::isCXX0XAttributeSpecifier(bool, clang::tok::TokenKind*)\"},\n    {\"_ZN5clang6Parser26TryParseFunctionDeclaratorEv\", \"clang::Parser::TryParseFunctionDeclarator()\"},\n    {\"_ZN5clang6Parser23isCXXFunctionDeclaratorEb\", \"clang::Parser::isCXXFunctionDeclarator(bool)\"},\n    {\"_ZN5clang6Parser25TryParseBracketDeclaratorEv\", \"clang::Parser::TryParseBracketDeclarator()\"},\n    {\"_ZN5clang6Parser33isExpressionOrTypeSpecifierSimpleENS_3tok9TokenKindE\", \"clang::Parser::isExpressionOrTypeSpecifierSimple(clang::tok::TokenKind)\"},\n    {\"_ZN5clang6Parser28TryParseDeclarationSpecifierEv\", \"clang::Parser::TryParseDeclarationSpecifier()\"},\n    {\"_ZN5clang6Parser34TryParseParameterDeclarationClauseEv\", \"clang::Parser::TryParseParameterDeclarationClause()\"},\n    {\"_ZN5clang6ParserC1ERNS_12PreprocessorERNS_4SemaE\", \"clang::Parser::Parser(clang::Preprocessor&, clang::Sema&)\"},\n    {\"_ZN5clang6ParserC2ERNS_12PreprocessorERNS_4SemaE\", \"clang::Parser::Parser(clang::Preprocessor&, clang::Sema&)\"},\n    {\"_ZNK5clang27PrettyStackTraceParserEntry5printERN4llvm11raw_ostreamE\", \"clang::PrettyStackTraceParserEntry::print(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang6Parser4DiagENS_14SourceLocationEj\", \"clang::Parser::Diag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang6Parser4DiagERKNS_5TokenEj\", \"clang::Parser::Diag(clang::Token const&, unsigned int)\"},\n    {\"_ZN5clang6Parser18SuggestParenthesesENS_14SourceLocationEjNS_11SourceRangeE\", \"clang::Parser::SuggestParentheses(clang::SourceLocation, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang6Parser19MatchRHSPunctuationENS_3tok9TokenKindENS_14SourceLocationE\", \"clang::Parser::MatchRHSPunctuation(clang::tok::TokenKind, clang::SourceLocation)\"},\n    {\"_ZN5clang6Parser16ExpectAndConsumeENS_3tok9TokenKindEjPKcS2_\", \"clang::Parser::ExpectAndConsume(clang::tok::TokenKind, unsigned int, char const*, clang::tok::TokenKind)\"},\n    {\"_ZN5clang6Parser20ExpectAndConsumeSemiEj\", \"clang::Parser::ExpectAndConsumeSemi(unsigned int)\"},\n    {\"_ZN5clang6Parser9SkipUntilEPKNS_3tok9TokenKindEjbbb\", \"clang::Parser::SkipUntil(clang::tok::TokenKind const*, unsigned int, bool, bool, bool)\"},\n    {\"_ZN5clang6Parser10EnterScopeEj\", \"clang::Parser::EnterScope(unsigned int)\"},\n    {\"_ZN5clang6Parser9ExitScopeEv\", \"clang::Parser::ExitScope()\"},\n    {\"_ZN5clang6ParserD0Ev\", \"clang::Parser::~Parser()\"},\n    {\"_ZN5clang6ParserD1Ev\", \"clang::Parser::~Parser()\"},\n    {\"_ZN5clang6ParserD2Ev\", \"clang::Parser::~Parser()\"},\n    {\"_ZN5clang6Parser10InitializeEv\", \"clang::Parser::Initialize()\"},\n    {\"_ZN5clang6Parser17ParseTopLevelDeclERNS_9OpaquePtrINS_12DeclGroupRefEEE\", \"clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)\"},\n    {\"_ZN5clang6Parser24ParseExternalDeclarationERNS0_25ParsedAttributesWithRangeEPNS0_15ParsingDeclSpecE\", \"clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::Parser::ParsingDeclSpec*)\"},\n    {\"_ZN5clang6Parser20ParseTranslationUnitEv\", \"clang::Parser::ParseTranslationUnit()\"},\n    {\"_ZN5clang6Parser14ParseSimpleAsmEPNS_14SourceLocationE\", \"clang::Parser::ParseSimpleAsm(clang::SourceLocation*)\"},\n    {\"_ZN5clang6Parser36ParseDeclarationOrFunctionDefinitionERNS0_15ParsingDeclSpecENS_15AccessSpecifierE\", \"clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsingDeclSpec&, clang::AccessSpecifier)\"},\n    {\"_ZN5clang6Parser36ParseDeclarationOrFunctionDefinitionERNS_16ParsedAttributesENS_15AccessSpecifierE\", \"clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::AccessSpecifier)\"},\n    {\"_ZNK5clang6Parser28isDeclarationAfterDeclaratorEv\", \"clang::Parser::isDeclarationAfterDeclarator() const\"},\n    {\"_ZN5clang6Parser27isStartOfFunctionDefinitionERKNS0_17ParsingDeclaratorE\", \"clang::Parser::isStartOfFunctionDefinition(clang::Parser::ParsingDeclarator const&)\"},\n    {\"_ZN5clang6Parser23ParseFunctionDefinitionERNS0_17ParsingDeclaratorERKNS0_18ParsedTemplateInfoE\", \"clang::Parser::ParseFunctionDefinition(clang::Parser::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&)\"},\n    {\"_ZN5clang6Parser25ParseKNRParamDeclarationsERNS_10DeclaratorE\", \"clang::Parser::ParseKNRParamDeclarations(clang::Declarator&)\"},\n    {\"_ZN5clang6Parser21ParseAsmStringLiteralEv\", \"clang::Parser::ParseAsmStringLiteral()\"},\n    {\"_ZN5clang6Parser27TryAnnotateTypeOrScopeTokenEb\", \"clang::Parser::TryAnnotateTypeOrScopeToken(bool)\"},\n    {\"_ZN5clang6Parser24TryAnnotateCXXScopeTokenEb\", \"clang::Parser::TryAnnotateCXXScopeToken(bool)\"},\n    {\"_ZN5clang6Parser32isTokenEqualOrMistypedEqualEqualEj\", \"clang::Parser::isTokenEqualOrMistypedEqualEqual(unsigned int)\"},\n    {\"_ZN5clang6Parser22CodeCompletionRecoveryEv\", \"clang::Parser::CodeCompletionRecovery()\"},\n    {\"_ZN5clang6Parser13FieldCallback7_anchorEv\", \"clang::Parser::FieldCallback::_anchor()\"},\n    {\"_ZN5clang6Parser21CodeCompleteDirectiveEb\", \"clang::Parser::CodeCompleteDirective(bool)\"},\n    {\"_ZN5clang6Parser34CodeCompleteInConditionalExclusionEv\", \"clang::Parser::CodeCompleteInConditionalExclusion()\"},\n    {\"_ZN5clang6Parser21CodeCompleteMacroNameEb\", \"clang::Parser::CodeCompleteMacroName(bool)\"},\n    {\"_ZN5clang6Parser34CodeCompletePreprocessorExpressionEv\", \"clang::Parser::CodeCompletePreprocessorExpression()\"},\n    {\"_ZN5clang6Parser25CodeCompleteMacroArgumentEPNS_14IdentifierInfoEPNS_9MacroInfoEj\", \"clang::Parser::CodeCompleteMacroArgument(clang::IdentifierInfo*, clang::MacroInfo*, unsigned int)\"},\n    {\"_ZN5clang6Parser27CodeCompleteNaturalLanguageEv\", \"clang::Parser::CodeCompleteNaturalLanguage()\"},\n    {\"_ZN5clang6Parser15ConsumeAnyTokenEv\", \"clang::Parser::ConsumeAnyToken()\"},\n    {\"_ZN5clang5Scope4InitEPS0_j\", \"clang::Scope::Init(clang::Scope*, unsigned int)\"},\n    {\"_ZN5clang27PrettyStackTraceParserEntryD1Ev\", \"clang::PrettyStackTraceParserEntry::~PrettyStackTraceParserEntry()\"},\n    {\"_ZN5clang27PrettyStackTraceParserEntryD0Ev\", \"clang::PrettyStackTraceParserEntry::~PrettyStackTraceParserEntry()\"},\n    {\"_ZN5clang6Parser13FieldCallbackD1Ev\", \"clang::Parser::FieldCallback::~FieldCallback()\"},\n    {\"_ZN5clang6Parser13FieldCallbackD0Ev\", \"clang::Parser::FieldCallback::~FieldCallback()\"},\n    {\"_ZNSt11_Deque_baseIPN5clang6Parser12ParsingClassESaIS3_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::Parser::ParsingClass*, std::allocator<clang::Parser::ParsingClass*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeIPN5clang6Parser12ParsingClassESaIS3_EEC2ERKS5_\", \"std::deque<clang::Parser::ParsingClass*, std::allocator<clang::Parser::ParsingClass*> >::deque(std::deque<clang::Parser::ParsingClass*, std::allocator<clang::Parser::ParsingClass*> > const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang5TokenEE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<clang::Token>::insert(clang::Token*, clang::Token const&)\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings6PolicyC1Ev\", \"clang::sema::AnalysisBasedWarnings::Policy::Policy()\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings6PolicyC2Ev\", \"clang::sema::AnalysisBasedWarnings::Policy::Policy()\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarningsC1ERNS_4SemaE\", \"clang::sema::AnalysisBasedWarnings::AnalysisBasedWarnings(clang::Sema&)\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarningsC2ERNS_4SemaE\", \"clang::sema::AnalysisBasedWarnings::AnalysisBasedWarnings(clang::Sema&)\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings13IssueWarningsENS1_6PolicyEPKNS_4DeclENS_8QualTypeE\", \"clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::sema::AnalysisBasedWarnings::Policy, clang::Decl const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_122UninitValsDiagReporterD1Ev\", \"(anonymous namespace)::UninitValsDiagReporter::~UninitValsDiagReporter()\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings13IssueWarningsENS1_6PolicyEPKNS_9BlockExprE\", \"clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::sema::AnalysisBasedWarnings::Policy, clang::BlockExpr const*)\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings13IssueWarningsENS1_6PolicyEPKNS_14ObjCMethodDeclE\", \"clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::sema::AnalysisBasedWarnings::Policy, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN5clang4sema21AnalysisBasedWarnings13IssueWarningsENS1_6PolicyEPKNS_12FunctionDeclE\", \"clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::sema::AnalysisBasedWarnings::Policy, clang::FunctionDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122UninitValsDiagReporterD0Ev\", \"(anonymous namespace)::UninitValsDiagReporter::~UninitValsDiagReporter()\"},\n    {\"_ZN12_GLOBAL__N_122UninitValsDiagReporter25handleUseOfUninitVariableEPKN5clang4ExprEPKNS1_7VarDeclE\", \"(anonymous namespace)::UninitValsDiagReporter::handleUseOfUninitVariable(clang::Expr const*, clang::VarDecl const*)\"},\n    {\"_ZSt16__introsort_loopIPPKN5clang4ExprElN12_GLOBAL__N_18SLocSortEEvT_S7_T0_T1_\", \"void std::__introsort_loop<clang::Expr const**, long, (anonymous namespace)::SLocSort>(clang::Expr const**, clang::Expr const**, long, (anonymous namespace)::SLocSort)\"},\n    {\"_ZSt16__insertion_sortIPPKN5clang4ExprEN12_GLOBAL__N_18SLocSortEEvT_S7_T0_\", \"void std::__insertion_sort<clang::Expr const**, (anonymous namespace)::SLocSort>(clang::Expr const**, clang::Expr const**, (anonymous namespace)::SLocSort)\"},\n    {\"_ZSt25__unguarded_linear_insertIPPKN5clang4ExprES3_N12_GLOBAL__N_18SLocSortEEvT_T0_T1_\", \"void std::__unguarded_linear_insert<clang::Expr const**, clang::Expr const*, (anonymous namespace)::SLocSort>(clang::Expr const**, clang::Expr const*, (anonymous namespace)::SLocSort)\"},\n    {\"_ZSt13__adjust_heapIPPKN5clang4ExprElS3_N12_GLOBAL__N_18SLocSortEEvT_T0_S8_T1_T2_\", \"void std::__adjust_heap<clang::Expr const**, long, clang::Expr const*, (anonymous namespace)::SLocSort>(clang::Expr const**, long, long, clang::Expr const*, (anonymous namespace)::SLocSort)\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeHandlerD1Ev\", \"(anonymous namespace)::UnreachableCodeHandler::~UnreachableCodeHandler()\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeHandlerD0Ev\", \"(anonymous namespace)::UnreachableCodeHandler::~UnreachableCodeHandler()\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeHandler17HandleUnreachableEN5clang14SourceLocationENS1_11SourceRangeES3_\", \"(anonymous namespace)::UnreachableCodeHandler::HandleUnreachable(clang::SourceLocation, clang::SourceRange, clang::SourceRange)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS_11SmallVectorIPKNS1_4ExprELj2EEENS_12DenseMapInfoIS4_EENSB_ISA_EEE16InsertIntoBucketERKS4_RKSA_PSt4pairIS4_SA_E\", \"llvm::DenseMap<clang::VarDecl const*, llvm::SmallVector<clang::Expr const*, 2u>*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::Expr const*, 2u>*> >::InsertIntoBucket(clang::VarDecl const* const&, llvm::SmallVector<clang::Expr const*, 2u>* const&, std::pair<clang::VarDecl const*, llvm::SmallVector<clang::Expr const*, 2u>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS_11SmallVectorIPKNS1_4ExprELj2EEENS_12DenseMapInfoIS4_EENSB_ISA_EEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, llvm::SmallVector<clang::Expr const*, 2u>*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::Expr const*, 2u>*> >::grow(unsigned int)\"},\n    {\"_ZN5clang22UninitVariablesHandler25handleUseOfUninitVariableEPKNS_4ExprEPKNS_7VarDeclE\", \"clang::UninitVariablesHandler::handleUseOfUninitVariable(clang::Expr const*, clang::VarDecl const*)\"},\n    {\"_ZN5clang14reachable_code8CallbackD1Ev\", \"clang::reachable_code::Callback::~Callback()\"},\n    {\"_ZN5clang14reachable_code8CallbackD0Ev\", \"clang::reachable_code::Callback::~Callback()\"},\n    {\"_ZSt6__findIPKPN5clang8CFGBlockES2_ET_S5_S5_RKT0_St26random_access_iterator_tag\", \"clang::CFGBlock* const* std::__find<clang::CFGBlock* const*, clang::CFGBlock*>(clang::CFGBlock* const*, clang::CFGBlock* const*, clang::CFGBlock* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN5clang13AttributeListC1ERN4llvm16BumpPtrAllocatorEPNS_14IdentifierInfoENS_14SourceLocationES5_S6_S5_S6_PPNS_4ExprEjbb\", \"clang::AttributeList::AttributeList(llvm::BumpPtrAllocator&, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Expr**, unsigned int, bool, bool)\"},\n    {\"_ZN5clang13AttributeListC2ERN4llvm16BumpPtrAllocatorEPNS_14IdentifierInfoENS_14SourceLocationES5_S6_S5_S6_PPNS_4ExprEjbb\", \"clang::AttributeList::AttributeList(llvm::BumpPtrAllocator&, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Expr**, unsigned int, bool, bool)\"},\n    {\"_ZN5clang13AttributeList7getKindEPKNS_14IdentifierInfoE\", \"clang::AttributeList::getKind(clang::IdentifierInfo const*)\"},\n    {\"_ZNK5clang21CodeCompletionContext22wantConstructorResultsEv\", \"clang::CodeCompletionContext::wantConstructorResults() const\"},\n    {\"_ZN5clang20CodeCompletionString5ChunkC1ENS0_9ChunkKindEPKc\", \"clang::CodeCompletionString::Chunk::Chunk(clang::CodeCompletionString::ChunkKind, char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5ChunkC2ENS0_9ChunkKindEPKc\", \"clang::CodeCompletionString::Chunk::Chunk(clang::CodeCompletionString::ChunkKind, char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk10CreateTextEPKc\", \"clang::CodeCompletionString::Chunk::CreateText(char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk14CreateOptionalEPS0_\", \"clang::CodeCompletionString::Chunk::CreateOptional(clang::CodeCompletionString*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk17CreatePlaceholderEPKc\", \"clang::CodeCompletionString::Chunk::CreatePlaceholder(char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk17CreateInformativeEPKc\", \"clang::CodeCompletionString::Chunk::CreateInformative(char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk16CreateResultTypeEPKc\", \"clang::CodeCompletionString::Chunk::CreateResultType(char const*)\"},\n    {\"_ZN5clang20CodeCompletionString5Chunk22CreateCurrentParameterEPKc\", \"clang::CodeCompletionString::Chunk::CreateCurrentParameter(char const*)\"},\n    {\"_ZN5clang20CodeCompletionStringC1EPKNS0_5ChunkEjj18CXAvailabilityKind\", \"clang::CodeCompletionString::CodeCompletionString(clang::CodeCompletionString::Chunk const*, unsigned int, unsigned int, CXAvailabilityKind)\"},\n    {\"_ZN5clang20CodeCompletionStringC2EPKNS0_5ChunkEjj18CXAvailabilityKind\", \"clang::CodeCompletionString::CodeCompletionString(clang::CodeCompletionString::Chunk const*, unsigned int, unsigned int, CXAvailabilityKind)\"},\n    {\"_ZNK5clang20CodeCompletionString11getAsStringEv\", \"clang::CodeCompletionString::getAsString() const\"},\n    {\"_ZNK5clang20CodeCompletionString12getTypedTextEv\", \"clang::CodeCompletionString::getTypedText() const\"},\n    {\"_ZN5clang23CodeCompletionAllocator10CopyStringEN4llvm9StringRefE\", \"clang::CodeCompletionAllocator::CopyString(llvm::StringRef)\"},\n    {\"_ZN5clang21CodeCompletionBuilder10TakeStringEv\", \"clang::CodeCompletionBuilder::TakeString()\"},\n    {\"_ZN5clang20CodeCompletionResult19getPriorityFromDeclEPNS_9NamedDeclE\", \"clang::CodeCompletionResult::getPriorityFromDecl(clang::NamedDecl*)\"},\n    {\"_ZNK5clang20CodeCompleteConsumer17OverloadCandidate11getFunctionEv\", \"clang::CodeCompleteConsumer::OverloadCandidate::getFunction() const\"},\n    {\"_ZNK5clang20CodeCompleteConsumer17OverloadCandidate15getFunctionTypeEv\", \"clang::CodeCompleteConsumer::OverloadCandidate::getFunctionType() const\"},\n    {\"_ZN5clang20CodeCompleteConsumerD0Ev\", \"clang::CodeCompleteConsumer::~CodeCompleteConsumer()\"},\n    {\"_ZN5clang20CodeCompleteConsumerD1Ev\", \"clang::CodeCompleteConsumer::~CodeCompleteConsumer()\"},\n    {\"_ZN5clang20CodeCompleteConsumerD2Ev\", \"clang::CodeCompleteConsumer::~CodeCompleteConsumer()\"},\n    {\"_ZN5clang28PrintingCodeCompleteConsumer26ProcessCodeCompleteResultsERNS_4SemaENS_21CodeCompletionContextEPNS_20CodeCompletionResultEj\", \"clang::PrintingCodeCompleteConsumer::ProcessCodeCompleteResults(clang::Sema&, clang::CodeCompletionContext, clang::CodeCompletionResult*, unsigned int)\"},\n    {\"_ZN5clang28PrintingCodeCompleteConsumer25ProcessOverloadCandidatesERNS_4SemaEjPNS_20CodeCompleteConsumer17OverloadCandidateEj\", \"clang::PrintingCodeCompleteConsumer::ProcessOverloadCandidates(clang::Sema&, unsigned int, clang::CodeCompleteConsumer::OverloadCandidate*, unsigned int)\"},\n    {\"_ZN5clang20CodeCompletionResult32computeCursorKindAndAvailabilityEv\", \"clang::CodeCompletionResult::computeCursorKindAndAvailability()\"},\n    {\"_ZN5clangltERKNS_20CodeCompletionResultES2_\", \"clang::operator<(clang::CodeCompletionResult const&, clang::CodeCompletionResult const&)\"},\n    {\"_Z14getOrderedNameRKN5clang20CodeCompletionResultERSs\", \"getOrderedName(clang::CodeCompletionResult const&, std::string&)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_15UnavailableAttrEEEPT_v\", \"clang::UnavailableAttr* clang::Decl::getAttr<clang::UnavailableAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_14DeprecatedAttrEEEPT_v\", \"clang::DeprecatedAttr* clang::Decl::getAttr<clang::DeprecatedAttr>() const\"},\n    {\"_ZN5clang28PrintingCodeCompleteConsumerD1Ev\", \"clang::PrintingCodeCompleteConsumer::~PrintingCodeCompleteConsumer()\"},\n    {\"_ZN5clang28PrintingCodeCompleteConsumerD0Ev\", \"clang::PrintingCodeCompleteConsumer::~PrintingCodeCompleteConsumer()\"},\n    {\"_ZSt21__inplace_stable_sortIPN5clang20CodeCompletionResultEEvT_S3_\", \"void std::__inplace_stable_sort<clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPN5clang20CodeCompletionResultES2_lEvT_S3_T0_T1_\", \"void std::__stable_sort_adaptive<clang::CodeCompletionResult*, clang::CodeCompletionResult*, long>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, long)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPN5clang20CodeCompletionResultES2_EvT_S3_T0_\", \"void std::__merge_sort_with_buffer<clang::CodeCompletionResult*, clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZSt16__merge_adaptiveIPN5clang20CodeCompletionResultElS2_EvT_S3_S3_T0_S4_T1_S4_\", \"void std::__merge_adaptive<clang::CodeCompletionResult*, long, clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, long, long, clang::CodeCompletionResult*, long)\"},\n    {\"_ZSt5mergeIPN5clang20CodeCompletionResultES2_S2_ET1_T_S4_T0_S5_S3_\", \"clang::CodeCompletionResult* std::merge<clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZSt16__merge_backwardIPN5clang20CodeCompletionResultES2_S2_ET1_T_S4_T0_S5_S3_\", \"clang::CodeCompletionResult* std::__merge_backward<clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZSt17__rotate_adaptiveIPN5clang20CodeCompletionResultES2_lET_S3_S3_S3_T1_S4_T0_S4_\", \"clang::CodeCompletionResult* std::__rotate_adaptive<clang::CodeCompletionResult*, clang::CodeCompletionResult*, long>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, long, long, clang::CodeCompletionResult*, long)\"},\n    {\"_ZSt8__rotateIPN5clang20CodeCompletionResultEEvT_S3_S3_St26random_access_iterator_tag\", \"void std::__rotate<clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, std::random_access_iterator_tag)\"},\n    {\"_ZSt16__insertion_sortIPN5clang20CodeCompletionResultEEvT_S3_\", \"void std::__insertion_sort<clang::CodeCompletionResult*>(clang::CodeCompletionResult*, clang::CodeCompletionResult*)\"},\n    {\"_ZSt22__merge_without_bufferIPN5clang20CodeCompletionResultElEvT_S3_S3_T0_S4_\", \"void std::__merge_without_buffer<clang::CodeCompletionResult*, long>(clang::CodeCompletionResult*, clang::CodeCompletionResult*, clang::CodeCompletionResult*, long, long)\"},\n    {\"_ZN5clang13UnqualifiedId13setTemplateIdEPNS_20TemplateIdAnnotationE\", \"clang::UnqualifiedId::setTemplateId(clang::TemplateIdAnnotation*)\"},\n    {\"_ZN5clang13UnqualifiedId24setConstructorTemplateIdEPNS_20TemplateIdAnnotationE\", \"clang::UnqualifiedId::setConstructorTemplateId(clang::TemplateIdAnnotation*)\"},\n    {\"_ZN5clang15DeclaratorChunk11getFunctionERKNS_16ParsedAttributesEbbNS_14SourceLocationEPNS0_9ParamInfoEjjbS4_bS4_bPNS_9OpaquePtrINS_8QualTypeEEEPNS_11SourceRangeEjS4_S4_RNS_10DeclaratorES9_\", \"clang::DeclaratorChunk::getFunction(clang::ParsedAttributes const&, bool, bool, clang::SourceLocation, clang::DeclaratorChunk::ParamInfo*, unsigned int, unsigned int, bool, clang::SourceLocation, bool, clang::SourceLocation, bool, clang::OpaquePtr<clang::QualType>*, clang::SourceRange*, unsigned int, clang::SourceLocation, clang::SourceLocation, clang::Declarator&, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZNK5clang8DeclSpec19getParsedSpecifiersEv\", \"clang::DeclSpec::getParsedSpecifiers() const\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS0_3SCSE\", \"clang::DeclSpec::getSpecifierName(clang::DeclSpec::SCS)\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS_18TypeSpecifierWidthE\", \"clang::DeclSpec::getSpecifierName(clang::TypeSpecifierWidth)\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS0_3TSCE\", \"clang::DeclSpec::getSpecifierName(clang::DeclSpec::TSC)\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS_17TypeSpecifierSignE\", \"clang::DeclSpec::getSpecifierName(clang::TypeSpecifierSign)\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS_17TypeSpecifierTypeE\", \"clang::DeclSpec::getSpecifierName(clang::TypeSpecifierType)\"},\n    {\"_ZN5clang8DeclSpec16getSpecifierNameENS0_2TQE\", \"clang::DeclSpec::getSpecifierName(clang::DeclSpec::TQ)\"},\n    {\"_ZN5clang8DeclSpec19SetStorageClassSpecENS0_3SCSENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetStorageClassSpec(clang::DeclSpec::SCS, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec25SetStorageClassSpecThreadENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetStorageClassSpecThread(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec16SetTypeSpecWidthENS_18TypeSpecifierWidthENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeSpecWidth(clang::TypeSpecifierWidth, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec18SetTypeSpecComplexENS0_3TSCENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeSpecComplex(clang::DeclSpec::TSC, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec15SetTypeSpecSignENS_17TypeSpecifierSignENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeSpecSign(clang::TypeSpecifierSign, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec15SetTypeSpecTypeENS_17TypeSpecifierTypeENS_14SourceLocationERPKcRjNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::DeclSpec::SetTypeSpecType(clang::TypeSpecifierType, clang::SourceLocation, char const*&, unsigned int&, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang8DeclSpec15SetTypeSpecTypeENS_17TypeSpecifierTypeENS_14SourceLocationERPKcRjPNS_4ExprE\", \"clang::DeclSpec::SetTypeSpecType(clang::TypeSpecifierType, clang::SourceLocation, char const*&, unsigned int&, clang::Expr*)\"},\n    {\"_ZN5clang8DeclSpec15SetTypeSpecTypeENS_17TypeSpecifierTypeENS_14SourceLocationERPKcRjPNS_4DeclEb\", \"clang::DeclSpec::SetTypeSpecType(clang::TypeSpecifierType, clang::SourceLocation, char const*&, unsigned int&, clang::Decl*, bool)\"},\n    {\"_ZN5clang8DeclSpec15SetTypeSpecTypeENS_17TypeSpecifierTypeENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeSpecType(clang::TypeSpecifierType, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec20SetTypeAltiVecVectorEbNS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeAltiVecVector(bool, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec19SetTypeAltiVecPixelEbNS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetTypeAltiVecPixel(bool, clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec16SetTypeSpecErrorEv\", \"clang::DeclSpec::SetTypeSpecError()\"},\n    {\"_ZN5clang8DeclSpec11SetTypeQualENS0_2TQENS_14SourceLocationERPKcRjRKNS_11LangOptionsE\", \"clang::DeclSpec::SetTypeQual(clang::DeclSpec::TQ, clang::SourceLocation, char const*&, unsigned int&, clang::LangOptions const&)\"},\n    {\"_ZN5clang8DeclSpec21SetFunctionSpecInlineENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetFunctionSpecInline(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec22SetFunctionSpecVirtualENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetFunctionSpecVirtual(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec23SetFunctionSpecExplicitENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetFunctionSpecExplicit(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec13SetFriendSpecENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetFriendSpec(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec16SetConstexprSpecENS_14SourceLocationERPKcRj\", \"clang::DeclSpec::SetConstexprSpec(clang::SourceLocation, char const*&, unsigned int&)\"},\n    {\"_ZN5clang8DeclSpec21setProtocolQualifiersEPKPNS_4DeclEjPNS_14SourceLocationES5_\", \"clang::DeclSpec::setProtocolQualifiers(clang::Decl* const*, unsigned int, clang::SourceLocation*, clang::SourceLocation)\"},\n    {\"_ZN5clang8DeclSpec23SaveWrittenBuiltinSpecsEv\", \"clang::DeclSpec::SaveWrittenBuiltinSpecs()\"},\n    {\"_ZN5clang8DeclSpec29SaveStorageSpecifierAsWrittenEv\", \"clang::DeclSpec::SaveStorageSpecifierAsWritten()\"},\n    {\"_ZN5clang8DeclSpec6FinishERNS_10DiagnosticERNS_12PreprocessorE\", \"clang::DeclSpec::Finish(clang::Diagnostic&, clang::Preprocessor&)\"},\n    {\"_ZN5clang8DeclSpec21isMissingDeclaratorOkEv\", \"clang::DeclSpec::isMissingDeclaratorOk()\"},\n    {\"_ZN5clang13UnqualifiedId5clearEv\", \"clang::UnqualifiedId::clear()\"},\n    {\"_ZN5clang13UnqualifiedId21setOperatorFunctionIdENS_14SourceLocationENS_22OverloadedOperatorKindEPS1_\", \"clang::UnqualifiedId::setOperatorFunctionId(clang::SourceLocation, clang::OverloadedOperatorKind, clang::SourceLocation*)\"},\n    {\"_ZN5clang14VirtSpecifiers12SetSpecifierENS0_9SpecifierENS_14SourceLocationERPKc\", \"clang::VirtSpecifiers::SetSpecifier(clang::VirtSpecifiers::Specifier, clang::SourceLocation, char const*&)\"},\n    {\"_ZN5clang14VirtSpecifiers16getSpecifierNameENS0_9SpecifierE\", \"clang::VirtSpecifiers::getSpecifierName(clang::VirtSpecifiers::Specifier)\"},\n    {\"_ZN5clang19ClassVirtSpecifiers12SetSpecifierENS0_9SpecifierENS_14SourceLocationERPKc\", \"clang::ClassVirtSpecifiers::SetSpecifier(clang::ClassVirtSpecifiers::Specifier, clang::SourceLocation, char const*&)\"},\n    {\"_ZN5clang19ClassVirtSpecifiers16getSpecifierNameENS0_9SpecifierE\", \"clang::ClassVirtSpecifiers::getSpecifierName(clang::ClassVirtSpecifiers::Specifier)\"},\n    {\"_ZN5clang18IdentifierResolver10IdDeclInfo10RemoveDeclEPNS_9NamedDeclE\", \"clang::IdentifierResolver::IdDeclInfo::RemoveDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolver10IdDeclInfo11ReplaceDeclEPNS_9NamedDeclES3_\", \"clang::IdentifierResolver::IdDeclInfo::ReplaceDecl(clang::NamedDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolverC1ERKNS_11LangOptionsE\", \"clang::IdentifierResolver::IdentifierResolver(clang::LangOptions const&)\"},\n    {\"_ZN5clang18IdentifierResolverC2ERKNS_11LangOptionsE\", \"clang::IdentifierResolver::IdentifierResolver(clang::LangOptions const&)\"},\n    {\"_ZN5clang18IdentifierResolverD1Ev\", \"clang::IdentifierResolver::~IdentifierResolver()\"},\n    {\"_ZN5clang18IdentifierResolverD2Ev\", \"clang::IdentifierResolver::~IdentifierResolver()\"},\n    {\"_ZNK5clang18IdentifierResolver13isDeclInScopeEPNS_4DeclEPNS_11DeclContextERNS_10ASTContextEPNS_5ScopeE\", \"clang::IdentifierResolver::isDeclInScope(clang::Decl*, clang::DeclContext*, clang::ASTContext&, clang::Scope*) const\"},\n    {\"_ZN5clang18IdentifierResolver7AddDeclEPNS_9NamedDeclE\", \"clang::IdentifierResolver::AddDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolver13IdDeclInfoMapixENS_15DeclarationNameE\", \"clang::IdentifierResolver::IdDeclInfoMap::operator[](clang::DeclarationName)\"},\n    {\"_ZN5clang18IdentifierResolver10RemoveDeclEPNS_9NamedDeclE\", \"clang::IdentifierResolver::RemoveDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolver11ReplaceDeclEPNS_9NamedDeclES2_\", \"clang::IdentifierResolver::ReplaceDecl(clang::NamedDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolver5beginENS_15DeclarationNameE\", \"clang::IdentifierResolver::begin(clang::DeclarationName)\"},\n    {\"_ZN5clang18IdentifierResolver24AddDeclToIdentifierChainEPNS_14IdentifierInfoEPNS_9NamedDeclE\", \"clang::IdentifierResolver::AddDeclToIdentifierChain(clang::IdentifierInfo*, clang::NamedDecl*)\"},\n    {\"_ZN5clang18IdentifierResolver8iterator17incrementSlowCaseEv\", \"clang::IdentifierResolver::iterator::incrementSlowCase()\"},\n    {\"_ZN5clang4Sema20DiagnoseInvalidJumpsEPNS_4StmtE\", \"clang::Sema::DiagnoseInvalidJumps(clang::Stmt*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_116JumpScopeChecker9GotoScopeEE9push_backERKS3_\", \"llvm::SmallVectorImpl<(anonymous namespace)::JumpScopeChecker::GotoScope>::push_back((anonymous namespace)::JumpScopeChecker::GotoScope const&)\"},\n    {\"_ZN12_GLOBAL__N_116JumpScopeChecker21BuildScopeInformationEPN5clang4StmtEj\", \"(anonymous namespace)::JumpScopeChecker::BuildScopeInformation(clang::Stmt*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116JumpScopeChecker9CheckJumpEPN5clang4StmtES3_NS1_14SourceLocationEj\", \"(anonymous namespace)::JumpScopeChecker::CheckJump(clang::Stmt*, clang::Stmt*, clang::SourceLocation, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116JumpScopeChecker21BuildScopeInformationEPN5clang4DeclERj\", \"(anonymous namespace)::JumpScopeChecker::BuildScopeInformation(clang::Decl*, unsigned int&)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang9LabelStmtENS_12DenseMapInfoIjEENS4_IS3_EEE16InsertIntoBucketERKjRKS3_PSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, clang::LabelStmt*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::LabelStmt*> >::InsertIntoBucket(unsigned int const&, clang::LabelStmt* const&, std::pair<unsigned int, clang::LabelStmt*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang9LabelStmtENS_12DenseMapInfoIjEENS4_IS3_EEE4growEj\", \"llvm::DenseMap<unsigned int, clang::LabelStmt*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::LabelStmt*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang16IndirectGotoStmtENS_12DenseMapInfoIjEENS4_IS3_EEE16InsertIntoBucketERKjRKS3_PSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, clang::IndirectGotoStmt*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::IndirectGotoStmt*> >::InsertIntoBucket(unsigned int const&, clang::IndirectGotoStmt* const&, std::pair<unsigned int, clang::IndirectGotoStmt*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPN5clang16IndirectGotoStmtENS_12DenseMapInfoIjEENS4_IS3_EEE4growEj\", \"llvm::DenseMap<unsigned int, clang::IndirectGotoStmt*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<clang::IndirectGotoStmt*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<clang::Stmt*, unsigned int, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::Stmt* const&, unsigned int const&, std::pair<clang::Stmt*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<clang::Stmt*, unsigned int, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang4sema17FunctionScopeInfoD0Ev\", \"clang::sema::FunctionScopeInfo::~FunctionScopeInfo()\"},\n    {\"_ZN5clang4sema17FunctionScopeInfoD1Ev\", \"clang::sema::FunctionScopeInfo::~FunctionScopeInfo()\"},\n    {\"_ZN5clang4sema17FunctionScopeInfoD2Ev\", \"clang::sema::FunctionScopeInfo::~FunctionScopeInfo()\"},\n    {\"_ZN5clang4sema17FunctionScopeInfo5ClearEv\", \"clang::sema::FunctionScopeInfo::Clear()\"},\n    {\"_ZN5clang4sema14BlockScopeInfoD0Ev\", \"clang::sema::BlockScopeInfo::~BlockScopeInfo()\"},\n    {\"_ZN5clang4sema14BlockScopeInfoD1Ev\", \"clang::sema::BlockScopeInfo::~BlockScopeInfo()\"},\n    {\"_ZN5clang4sema14BlockScopeInfoD2Ev\", \"clang::sema::BlockScopeInfo::~BlockScopeInfo()\"},\n    {\"_ZN5clang4Sema25ActOnTranslationUnitScopeEPNS_5ScopeE\", \"clang::Sema::ActOnTranslationUnitScope(clang::Scope*)\"},\n    {\"_ZN5clang4SemaC1ERNS_12PreprocessorERNS_10ASTContextERNS_11ASTConsumerEbPNS_20CodeCompleteConsumerE\", \"clang::Sema::Sema(clang::Preprocessor&, clang::ASTContext&, clang::ASTConsumer&, bool, clang::CodeCompleteConsumer*)\"},\n    {\"_ZN5clang4SemaC2ERNS_12PreprocessorERNS_10ASTContextERNS_11ASTConsumerEbPNS_20CodeCompleteConsumerE\", \"clang::Sema::Sema(clang::Preprocessor&, clang::ASTContext&, clang::ASTConsumer&, bool, clang::CodeCompleteConsumer*)\"},\n    {\"_ZN5clang4Sema10InitializeEv\", \"clang::Sema::Initialize()\"},\n    {\"_ZN5clang4SemaD1Ev\", \"clang::Sema::~Sema()\"},\n    {\"_ZN5clang4SemaD2Ev\", \"clang::Sema::~Sema()\"},\n    {\"_ZN5clang4Sema17ImpCastExprToTypeERPNS_4ExprENS_8QualTypeENS_8CastKindENS_13ExprValueKindEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"clang::Sema::ImpCastExprToType(clang::Expr*&, clang::QualType, clang::CastKind, clang::ExprValueKind, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*)\"},\n    {\"_ZN5clang4Sema12CastCategoryEPNS_4ExprE\", \"clang::Sema::CastCategory(clang::Expr*)\"},\n    {\"_ZN5clang4Sema25ActOnEndOfTranslationUnitEv\", \"clang::Sema::ActOnEndOfTranslationUnit()\"},\n    {\"_Z22ShouldRemoveFromUnusedPN5clang4SemaEPKNS_14DeclaratorDeclE\", \"ShouldRemoveFromUnused(clang::Sema*, clang::DeclaratorDecl const*)\"},\n    {\"_ZN5clang4Sema4DiagENS_14SourceLocationEj\", \"clang::Sema::Diag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang4Sema21SemaDiagnosticBuilderD1Ev\", \"clang::Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder()\"},\n    {\"_ZN5clang4Sema27getFunctionLevelDeclContextEv\", \"clang::Sema::getFunctionLevelDeclContext()\"},\n    {\"_ZN5clang4Sema18getCurFunctionDeclEv\", \"clang::Sema::getCurFunctionDecl()\"},\n    {\"_ZN5clang4Sema16getCurMethodDeclEv\", \"clang::Sema::getCurMethodDecl()\"},\n    {\"_ZN5clang4Sema26getCurFunctionOrMethodDeclEv\", \"clang::Sema::getCurFunctionOrMethodDecl()\"},\n    {\"_ZN5clang4Sema21SemaDiagnosticBuilderD2Ev\", \"clang::Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder()\"},\n    {\"_ZN5clang4Sema4DiagENS_14SourceLocationERKNS_17PartialDiagnosticE\", \"clang::Sema::Diag(clang::SourceLocation, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema18getScopeForContextEPNS_11DeclContextE\", \"clang::Sema::getScopeForContext(clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema17PushFunctionScopeEv\", \"clang::Sema::PushFunctionScope()\"},\n    {\"_ZN5clang4Sema14PushBlockScopeEPNS_5ScopeEPNS_9BlockDeclE\", \"clang::Sema::PushBlockScope(clang::Scope*, clang::BlockDecl*)\"},\n    {\"_ZN5clang4Sema23PopFunctionOrBlockScopeEv\", \"clang::Sema::PopFunctionOrBlockScope()\"},\n    {\"_ZNK5clang4Sema26hasAnyErrorsInThisFunctionEv\", \"clang::Sema::hasAnyErrorsInThisFunction() const\"},\n    {\"_ZN5clang4Sema11getCurBlockEv\", \"clang::Sema::getCurBlock()\"},\n    {\"_ZN5clang18ExternalSemaSourceD0Ev\", \"clang::ExternalSemaSource::~ExternalSemaSource()\"},\n    {\"_ZN5clang18ExternalSemaSourceD1Ev\", \"clang::ExternalSemaSource::~ExternalSemaSource()\"},\n    {\"_ZN5clang18ExternalSemaSourceD2Ev\", \"clang::ExternalSemaSource::~ExternalSemaSource()\"},\n    {\"_ZN5clang18ExternalSemaSource14ReadMethodPoolENS_8SelectorE\", \"clang::ExternalSemaSource::ReadMethodPool(clang::Selector)\"},\n    {\"_ZNK5clang25PrettyDeclStackTraceEntry5printERN4llvm11raw_ostreamE\", \"clang::PrettyDeclStackTraceEntry::print(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang4sema21TemplateDeductionInfo23addSuppressedDiagnosticENS_14SourceLocationERKNS_17PartialDiagnosticE\", \"clang::sema::TemplateDeductionInfo::addSuppressedDiagnostic(clang::SourceLocation, clang::PartialDiagnostic const&)\"},\n    {\"_ZNK5clang17PartialDiagnostic4EmitERKNS_17DiagnosticBuilderE\", \"clang::PartialDiagnostic::Emit(clang::DiagnosticBuilder const&) const\"},\n    {\"_ZN5clang25PrettyDeclStackTraceEntryD1Ev\", \"clang::PrettyDeclStackTraceEntry::~PrettyDeclStackTraceEntry()\"},\n    {\"_ZN5clang25PrettyDeclStackTraceEntryD0Ev\", \"clang::PrettyDeclStackTraceEntry::~PrettyDeclStackTraceEntry()\"},\n    {\"_ZSt9__find_ifIPPKN5clang14DeclaratorDeclESt9binder1stISt26pointer_to_binary_functionIPNS0_4SemaES3_bEEET_SB_SB_T0_St26random_access_iterator_tag\", \"clang::DeclaratorDecl const** std::__find_if<clang::DeclaratorDecl const**, std::binder1st<std::pointer_to_binary_function<clang::Sema*, clang::DeclaratorDecl const*, bool> > >(clang::DeclaratorDecl const**, clang::DeclaratorDecl const**, std::binder1st<std::pointer_to_binary_function<clang::Sema*, clang::DeclaratorDecl const*, bool> >, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4Sema33ExpressionEvaluationContextRecordELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Sema::ExpressionEvaluationContextRecord, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclENS_11SmallVectorISt4pairINS1_14SourceLocationENS1_17PartialDiagnosticEELj1EEENS_12DenseMapInfoIS3_EENSA_IS9_EEED2Ev\", \"llvm::DenseMap<clang::Decl*, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> > >::~DenseMap()\"},\n    {\"_ZNSt11_Deque_baseISt4pairIPN5clang9ValueDeclENS1_14SourceLocationEESaIS5_EE17_M_initialize_mapEm\", \"std::_Deque_base<std::pair<clang::ValueDecl*, clang::SourceLocation>, std::allocator<std::pair<clang::ValueDecl*, clang::SourceLocation> > >::_M_initialize_map(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_9LabelStmtENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::LabelStmt*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::LabelStmt*> >::shrink_and_clear()\"},\n    {\"_ZN5clang4sema14BlockScopeInfoC2ERNS_10DiagnosticEPNS_5ScopeEPNS_9BlockDeclE\", \"clang::sema::BlockScopeInfo::BlockScopeInfo(clang::Diagnostic&, clang::Scope*, clang::BlockDecl*)\"},\n    {\"_ZN5clang17PartialDiagnostic11freeStorageEv\", \"clang::PartialDiagnostic::freeStorage()\"},\n    {\"_ZN5clang17PartialDiagnosticC2ERKNS_14DiagnosticInfoERNS0_16StorageAllocatorE\", \"clang::PartialDiagnostic::PartialDiagnostic(clang::DiagnosticInfo const&, clang::PartialDiagnostic::StorageAllocator&)\"},\n    {\"_ZNK5clang17PartialDiagnostic9AddStringEN4llvm9StringRefE\", \"clang::PartialDiagnostic::AddString(llvm::StringRef) const\"},\n    {\"_ZNK5clang17PartialDiagnostic10getStorageEv\", \"clang::PartialDiagnostic::getStorage() const\"},\n    {\"_ZN5clang17PartialDiagnostic16StorageAllocator8AllocateEv\", \"clang::PartialDiagnostic::StorageAllocator::Allocate()\"},\n    {\"_ZN5clang17PartialDiagnostic7StorageaSERKS1_\", \"clang::PartialDiagnostic::Storage::operator=(clang::PartialDiagnostic::Storage const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIN5clang14SourceLocationENS2_17PartialDiagnosticEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4Sema24SetMemberAccessSpecifierEPNS_9NamedDeclES2_NS_15AccessSpecifierE\", \"clang::Sema::SetMemberAccessSpecifier(clang::NamedDecl*, clang::NamedDecl*, clang::AccessSpecifier)\"},\n    {\"_ZN5clang4Sema24HandleDelayedAccessCheckERNS_4sema17DelayedDiagnosticEPNS_4DeclE\", \"clang::Sema::HandleDelayedAccessCheck(clang::sema::DelayedDiagnostic&, clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_116EffectiveContextC1EPN5clang11DeclContextE\", \"(anonymous namespace)::EffectiveContext::EffectiveContext(clang::DeclContext*)\"},\n    {\"_Z20CheckEffectiveAccessRN5clang4SemaERKN12_GLOBAL__N_116EffectiveContextENS_14SourceLocationERNS2_12AccessTargetE\", \"CheckEffectiveAccess(clang::Sema&, (anonymous namespace)::EffectiveContext const&, clang::SourceLocation, (anonymous namespace)::AccessTarget&)\"},\n    {\"_ZN5clang4Sema26HandleDependentAccessCheckERKNS_19DependentDiagnosticERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::HandleDependentAccessCheck(clang::DependentDiagnostic const&, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_Z11CheckAccessRN5clang4SemaENS_14SourceLocationERN12_GLOBAL__N_112AccessTargetE\", \"CheckAccess(clang::Sema&, clang::SourceLocation, (anonymous namespace)::AccessTarget&)\"},\n    {\"_ZN5clang4Sema27CheckUnresolvedLookupAccessEPNS_20UnresolvedLookupExprENS_14DeclAccessPairE\", \"clang::Sema::CheckUnresolvedLookupAccess(clang::UnresolvedLookupExpr*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang4Sema27CheckUnresolvedMemberAccessEPNS_20UnresolvedMemberExprENS_14DeclAccessPairE\", \"clang::Sema::CheckUnresolvedMemberAccess(clang::UnresolvedMemberExpr*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang4Sema21CheckDestructorAccessENS_14SourceLocationEPNS_17CXXDestructorDeclERKNS_17PartialDiagnosticE\", \"clang::Sema::CheckDestructorAccess(clang::SourceLocation, clang::CXXDestructorDecl*, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema22CheckConstructorAccessENS_14SourceLocationEPNS_18CXXConstructorDeclERKNS_17InitializedEntityENS_15AccessSpecifierEb\", \"clang::Sema::CheckConstructorAccess(clang::SourceLocation, clang::CXXConstructorDecl*, clang::InitializedEntity const&, clang::AccessSpecifier, bool)\"},\n    {\"_ZN5clang4Sema23CheckDirectMemberAccessENS_14SourceLocationEPNS_9NamedDeclERKNS_17PartialDiagnosticE\", \"clang::Sema::CheckDirectMemberAccess(clang::SourceLocation, clang::NamedDecl*, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema21CheckAllocationAccessENS_14SourceLocationENS_11SourceRangeEPNS_13CXXRecordDeclENS_14DeclAccessPairE\", \"clang::Sema::CheckAllocationAccess(clang::SourceLocation, clang::SourceRange, clang::CXXRecordDecl*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang4Sema25CheckMemberOperatorAccessENS_14SourceLocationEPNS_4ExprES3_NS_14DeclAccessPairE\", \"clang::Sema::CheckMemberOperatorAccess(clang::SourceLocation, clang::Expr*, clang::Expr*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang4Sema26CheckAddressOfMemberAccessEPNS_4ExprENS_14DeclAccessPairE\", \"clang::Sema::CheckAddressOfMemberAccess(clang::Expr*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang4Sema20CheckBaseClassAccessENS_14SourceLocationENS_8QualTypeES2_RKNS_11CXXBasePathEjbb\", \"clang::Sema::CheckBaseClassAccess(clang::SourceLocation, clang::QualType, clang::QualType, clang::CXXBasePath const&, unsigned int, bool, bool)\"},\n    {\"_ZN5clang4Sema17CheckLookupAccessERKNS_12LookupResultE\", \"clang::Sema::CheckLookupAccess(clang::LookupResult const&)\"},\n    {\"_ZN5clang4Sema33ActOnStartSuppressingAccessChecksEv\", \"clang::Sema::ActOnStartSuppressingAccessChecks()\"},\n    {\"_ZN5clang4Sema32ActOnStopSuppressingAccessChecksEv\", \"clang::Sema::ActOnStopSuppressingAccessChecks()\"},\n    {\"_Z18FindDeclaringClassPN5clang9NamedDeclE\", \"FindDeclaringClass(clang::NamedDecl*)\"},\n    {\"_Z9HasAccessRN5clang4SemaERKN12_GLOBAL__N_116EffectiveContextEPKNS_13CXXRecordDeclENS_15AccessSpecifierERKNS2_12AccessTargetE\", \"HasAccess(clang::Sema&, (anonymous namespace)::EffectiveContext const&, clang::CXXRecordDecl const*, clang::AccessSpecifier, (anonymous namespace)::AccessTarget const&)\"},\n    {\"_Z12FindBestPathRN5clang4SemaERKN12_GLOBAL__N_116EffectiveContextERNS2_12AccessTargetENS_15AccessSpecifierERNS_12CXXBasePathsE\", \"FindBestPath(clang::Sema&, (anonymous namespace)::EffectiveContext const&, (anonymous namespace)::AccessTarget&, clang::AccessSpecifier, clang::CXXBasePaths&)\"},\n    {\"_Z13GetFriendKindRN5clang4SemaERKN12_GLOBAL__N_116EffectiveContextEPKNS_13CXXRecordDeclE\", \"GetFriendKind(clang::Sema&, (anonymous namespace)::EffectiveContext const&, clang::CXXRecordDecl const*)\"},\n    {\"_Z13MatchesFriendRN5clang4SemaERKN12_GLOBAL__N_116EffectiveContextEPKNS_13CXXRecordDeclE\", \"MatchesFriend(clang::Sema&, (anonymous namespace)::EffectiveContext const&, clang::CXXRecordDecl const*)\"},\n    {\"_Z18MightInstantiateToRN5clang4SemaEPNS_12FunctionDeclES3_\", \"MightInstantiateTo(clang::Sema&, clang::FunctionDecl*, clang::FunctionDecl*)\"},\n    {\"_Z22IsDerivedFromInclusivePKN5clang13CXXRecordDeclES2_\", \"IsDerivedFromInclusive(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122ProtectedFriendContext14findFriendshipEPKN5clang13CXXRecordDeclEj\", \"(anonymous namespace)::ProtectedFriendContext::findFriendship(clang::CXXRecordDecl const*, unsigned int)\"},\n    {\"_ZSt6__findIPKPN5clang13CXXRecordDeclEPKS1_ET_S7_S7_RKT0_St26random_access_iterator_tag\", \"clang::CXXRecordDecl* const* std::__find<clang::CXXRecordDecl* const*, clang::CXXRecordDecl const*>(clang::CXXRecordDecl* const*, clang::CXXRecordDecl* const*, clang::CXXRecordDecl const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN5clang4Sema17FreePackedContextEv\", \"clang::Sema::FreePackedContext()\"},\n    {\"_ZN5clang4Sema31AddAlignmentAttributesForRecordEPNS_10RecordDeclE\", \"clang::Sema::AddAlignmentAttributesForRecord(clang::RecordDecl*)\"},\n    {\"_ZN5clang4Sema23ActOnPragmaOptionsAlignENS0_22PragmaOptionsAlignKindENS_14SourceLocationES2_\", \"clang::Sema::ActOnPragmaOptionsAlign(clang::Sema::PragmaOptionsAlignKind, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN12_GLOBAL__N_115PragmaPackStack4pushEPN5clang14IdentifierInfoE\", \"(anonymous namespace)::PragmaPackStack::push(clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema15ActOnPragmaPackENS0_14PragmaPackKindEPNS_14IdentifierInfoEPNS_4ExprENS_14SourceLocationES6_S6_\", \"clang::Sema::ActOnPragmaPack(clang::Sema::PragmaPackKind, clang::IdentifierInfo*, clang::Expr*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17ActOnPragmaUnusedERKNS_5TokenEPNS_5ScopeENS_14SourceLocationE\", \"clang::Sema::ActOnPragmaUnused(clang::Token const&, clang::Scope*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema28AddPushedVisibilityAttributeEPNS_4DeclE\", \"clang::Sema::AddPushedVisibilityAttribute(clang::Decl*)\"},\n    {\"_ZN5clang4Sema14FreeVisContextEv\", \"clang::Sema::FreeVisContext()\"},\n    {\"_ZN5clang4Sema21ActOnPragmaVisibilityEbPKNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::ActOnPragmaVisibility(bool, clang::IdentifierInfo const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19PopPragmaVisibilityEv\", \"clang::Sema::PopPragmaVisibility()\"},\n    {\"_ZN5clang4Sema27PushNamespaceVisibilityAttrEPKNS_14VisibilityAttrE\", \"clang::Sema::PushNamespaceVisibilityAttr(clang::VisibilityAttr const*)\"},\n    {\"_ZN5clang4Decl7addAttrEPNS_4AttrE\", \"clang::Decl::addAttr(clang::Attr*)\"},\n    {\"_ZNSt6vectorISt4pairIjN5clang14SourceLocationEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<unsigned int, clang::SourceLocation>, std::allocator<std::pair<unsigned int, clang::SourceLocation> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, clang::SourceLocation>*, std::vector<std::pair<unsigned int, clang::SourceLocation>, std::allocator<std::pair<unsigned int, clang::SourceLocation> > > >, std::pair<unsigned int, clang::SourceLocation> const&)\"},\n    {\"_ZN5clang15InheritableAttrD1Ev\", \"clang::InheritableAttr::~InheritableAttr()\"},\n    {\"_ZN5clang15InheritableAttrD0Ev\", \"clang::InheritableAttr::~InheritableAttr()\"},\n    {\"_ZN4llvm11SmallVectorIPN5clang4AttrELj2EEC2EjRKS3_\", \"llvm::SmallVector<clang::Attr*, 2u>::SmallVector(unsigned int, clang::Attr* const&)\"},\n    {\"_ZN5clang4Sema17ActOnCXXNamedCastENS_14SourceLocationENS_3tok9TokenKindES1_NS_9OpaquePtrINS_8QualTypeEEES1_S1_PNS_4ExprES1_\", \"clang::Sema::ActOnCXXNamedCast(clang::SourceLocation, clang::tok::TokenKind, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17BuildCXXNamedCastENS_14SourceLocationENS_3tok9TokenKindEPNS_14TypeSourceInfoEPNS_4ExprENS_11SourceRangeES8_\", \"clang::Sema::BuildCXXNamedCast(clang::SourceLocation, clang::tok::TokenKind, clang::TypeSourceInfo*, clang::Expr*, clang::SourceRange, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema18CXXCheckCStyleCastENS_11SourceRangeENS_8QualTypeERNS_13ExprValueKindERPNS_4ExprERNS_8CastKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEb\", \"clang::Sema::CXXCheckCStyleCast(clang::SourceRange, clang::QualType, clang::ExprValueKind&, clang::Expr*&, clang::CastKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&, bool)\"},\n    {\"_Z12TryConstCastRN5clang4SemaEPNS_4ExprENS_8QualTypeEbRj\", \"TryConstCast(clang::Sema&, clang::Expr*, clang::QualType, bool, unsigned int&)\"},\n    {\"_Z13TryStaticCastRN5clang4SemaERPNS_4ExprENS_8QualTypeEbRKNS_11SourceRangeERjRNS_8CastKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"TryStaticCast(clang::Sema&, clang::Expr*&, clang::QualType, bool, clang::SourceRange const&, unsigned int&, clang::CastKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&)\"},\n    {\"_Z18TryReinterpretCastRN5clang4SemaEPNS_4ExprENS_8QualTypeEbRKNS_11SourceRangeERjRNS_8CastKindE\", \"TryReinterpretCast(clang::Sema&, clang::Expr*, clang::QualType, bool, clang::SourceRange const&, unsigned int&, clang::CastKind&)\"},\n    {\"_Z18CastsAwayConstnessRN5clang4SemaENS_8QualTypeES2_\", \"CastsAwayConstness(clang::Sema&, clang::QualType, clang::QualType)\"},\n    {\"_Z17TryStaticDowncastRN5clang4SemaENS_7CanQualINS_4TypeEEES4_bRKNS_11SourceRangeENS_8QualTypeES8_RjRNS_8CastKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"TryStaticDowncast(clang::Sema&, clang::CanQual<clang::Type>, clang::CanQual<clang::Type>, bool, clang::SourceRange const&, clang::QualType, clang::QualType, unsigned int&, clang::CastKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&)\"},\n    {\"_Z25NoteAllOverloadCandidatesPN5clang4ExprERNS_4SemaE\", \"NoteAllOverloadCandidates(clang::Expr*, clang::Sema&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang10QualifiersELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Qualifiers, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4Sema18computeDeclContextENS_8QualTypeE\", \"clang::Sema::computeDeclContext(clang::QualType)\"},\n    {\"_ZN5clang4Sema18computeDeclContextERKNS_12CXXScopeSpecEb\", \"clang::Sema::computeDeclContext(clang::CXXScopeSpec const&, bool)\"},\n    {\"_ZN5clang4Sema25getCurrentInstantiationOfEPNS_19NestedNameSpecifierE\", \"clang::Sema::getCurrentInstantiationOf(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang4Sema25isDependentScopeSpecifierERKNS_12CXXScopeSpecE\", \"clang::Sema::isDependentScopeSpecifier(clang::CXXScopeSpec const&)\"},\n    {\"_ZN5clang4Sema23isUnknownSpecializationERKNS_12CXXScopeSpecE\", \"clang::Sema::isUnknownSpecialization(clang::CXXScopeSpec const&)\"},\n    {\"_ZN5clang4Sema26RequireCompleteDeclContextERNS_12CXXScopeSpecEPNS_11DeclContextE\", \"clang::Sema::RequireCompleteDeclContext(clang::CXXScopeSpec&, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema28ActOnCXXGlobalScopeSpecifierEPNS_5ScopeENS_14SourceLocationE\", \"clang::Sema::ActOnCXXGlobalScopeSpecifier(clang::Scope*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema31isAcceptableNestedNameSpecifierEPNS_9NamedDeclE\", \"clang::Sema::isAcceptableNestedNameSpecifier(clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema25FindFirstQualifierInScopeEPNS_5ScopeEPNS_19NestedNameSpecifierE\", \"clang::Sema::FindFirstQualifierInScope(clang::Scope*, clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang4Sema28isNonTypeNestedNameSpecifierEPNS_5ScopeERNS_12CXXScopeSpecENS_14SourceLocationERNS_14IdentifierInfoENS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::isNonTypeNestedNameSpecifier(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::IdentifierInfo&, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang4Sema27BuildCXXNestedNameSpecifierEPNS_5ScopeERNS_12CXXScopeSpecENS_14SourceLocationES5_RNS_14IdentifierInfoENS_8QualTypeEPNS_9NamedDeclEbb\", \"clang::Sema::BuildCXXNestedNameSpecifier(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo&, clang::QualType, clang::NamedDecl*, bool, bool)\"},\n    {\"_ZN5clang4Sema27ActOnCXXNestedNameSpecifierEPNS_5ScopeERNS_12CXXScopeSpecENS_14SourceLocationES5_RNS_14IdentifierInfoENS_9OpaquePtrINS_8QualTypeEEEb\", \"clang::Sema::ActOnCXXNestedNameSpecifier(clang::Scope*, clang::CXXScopeSpec&, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo&, clang::OpaquePtr<clang::QualType>, bool)\"},\n    {\"_ZN5clang4Sema25IsInvalidUnlessNestedNameEPNS_5ScopeERNS_12CXXScopeSpecERNS_14IdentifierInfoENS_9OpaquePtrINS_8QualTypeEEEb\", \"clang::Sema::IsInvalidUnlessNestedName(clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo&, clang::OpaquePtr<clang::QualType>, bool)\"},\n    {\"_ZN5clang4Sema27ActOnCXXNestedNameSpecifierEPNS_5ScopeERKNS_12CXXScopeSpecENS_9OpaquePtrINS_8QualTypeEEENS_11SourceRangeENS_14SourceLocationE\", \"clang::Sema::ActOnCXXNestedNameSpecifier(clang::Scope*, clang::CXXScopeSpec const&, clang::OpaquePtr<clang::QualType>, clang::SourceRange, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema26ShouldEnterDeclaratorScopeEPNS_5ScopeERKNS_12CXXScopeSpecE\", \"clang::Sema::ShouldEnterDeclaratorScope(clang::Scope*, clang::CXXScopeSpec const&)\"},\n    {\"_ZN5clang4Sema28ActOnCXXEnterDeclaratorScopeEPNS_5ScopeERNS_12CXXScopeSpecE\", \"clang::Sema::ActOnCXXEnterDeclaratorScope(clang::Scope*, clang::CXXScopeSpec&)\"},\n    {\"_ZN5clang4Sema27ActOnCXXExitDeclaratorScopeEPNS_5ScopeERKNS_12CXXScopeSpecE\", \"clang::Sema::ActOnCXXExitDeclaratorScope(clang::Scope*, clang::CXXScopeSpec const&)\"},\n    {\"_ZNK5clang4Sema30getLocationOfStringLiteralByteEPKNS_13StringLiteralEj\", \"clang::Sema::getLocationOfStringLiteralByte(clang::StringLiteral const*, unsigned int) const\"},\n    {\"_ZN5clang4Sema19CheckablePrintfAttrEPKNS_10FormatAttrEPNS_8CallExprE\", \"clang::Sema::CheckablePrintfAttr(clang::FormatAttr const*, clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema24CheckBuiltinFunctionCallEjPNS_8CallExprE\", \"clang::Sema::CheckBuiltinFunctionCall(unsigned int, clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema22SemaBuiltinConstantArgEPNS_8CallExprEiRN4llvm6APSIntE\", \"clang::Sema::SemaBuiltinConstantArg(clang::CallExpr*, int, llvm::APSInt&)\"},\n    {\"_ZN5clang4Sema15CheckObjCStringEPNS_4ExprE\", \"clang::Sema::CheckObjCString(clang::Expr*)\"},\n    {\"_ZN5clang4Sema18SemaBuiltinVAStartEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinVAStart(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema27SemaBuiltinUnorderedCompareEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinUnorderedCompare(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema27SemaBuiltinFPClassificationEPNS_8CallExprEj\", \"clang::Sema::SemaBuiltinFPClassification(clang::CallExpr*, unsigned int)\"},\n    {\"_ZN5clang4Sema24SemaBuiltinShuffleVectorEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinShuffleVector(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema19SemaBuiltinPrefetchEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinPrefetch(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema21SemaBuiltinObjectSizeEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinObjectSize(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema18SemaBuiltinLongjmpEPNS_8CallExprE\", \"clang::Sema::SemaBuiltinLongjmp(clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema27SemaBuiltinAtomicOverloadedENS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Sema::SemaBuiltinAtomicOverloaded(clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_ZN5clang4Sema27CheckARMBuiltinFunctionCallEjPNS_8CallExprE\", \"clang::Sema::CheckARMBuiltinFunctionCall(unsigned int, clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema17CheckFunctionCallEPNS_12FunctionDeclEPNS_8CallExprE\", \"clang::Sema::CheckFunctionCall(clang::FunctionDecl*, clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema25CheckPrintfScanfArgumentsEPKNS_8CallExprEbjjb\", \"clang::Sema::CheckPrintfScanfArguments(clang::CallExpr const*, bool, unsigned int, unsigned int, bool)\"},\n    {\"_ZN5clang4Sema21CheckNonNullArgumentsEPKNS_11NonNullAttrEPKNS_8CallExprE\", \"clang::Sema::CheckNonNullArguments(clang::NonNullAttr const*, clang::CallExpr const*)\"},\n    {\"_ZN5clang4Sema14CheckBlockCallEPNS_9NamedDeclEPNS_8CallExprE\", \"clang::Sema::CheckBlockCall(clang::NamedDecl*, clang::CallExpr*)\"},\n    {\"_ZN5clang4Sema22SemaCheckStringLiteralEPKNS_4ExprEPKNS_8CallExprEbjjb\", \"clang::Sema::SemaCheckStringLiteral(clang::Expr const*, clang::CallExpr const*, bool, unsigned int, unsigned int, bool)\"},\n    {\"_ZN5clang4Sema17CheckFormatStringEPKNS_13StringLiteralEPKNS_4ExprEPKNS_8CallExprEbjjb\", \"clang::Sema::CheckFormatString(clang::StringLiteral const*, clang::Expr const*, clang::CallExpr const*, bool, unsigned int, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler14DoneProcessingEv\", \"(anonymous namespace)::CheckFormatHandler::DoneProcessing()\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandlerD1Ev\", \"(anonymous namespace)::CheckPrintfHandler::~CheckPrintfHandler()\"},\n    {\"_ZN12_GLOBAL__N_117CheckScanfHandlerD1Ev\", \"(anonymous namespace)::CheckScanfHandler::~CheckScanfHandler()\"},\n    {\"_ZN5clang4Sema20CheckReturnStackAddrEPNS_4ExprENS_8QualTypeENS_14SourceLocationE\", \"clang::Sema::CheckReturnStackAddr(clang::Expr*, clang::QualType, clang::SourceLocation)\"},\n    {\"_Z8EvalAddrPN5clang4ExprERN4llvm15SmallVectorImplIPNS_11DeclRefExprEEE\", \"EvalAddr(clang::Expr*, llvm::SmallVectorImpl<clang::DeclRefExpr*>&)\"},\n    {\"_Z7EvalValPN5clang4ExprERN4llvm15SmallVectorImplIPNS_11DeclRefExprEEE\", \"EvalVal(clang::Expr*, llvm::SmallVectorImpl<clang::DeclRefExpr*>&)\"},\n    {\"_ZN5clang4Sema20CheckFloatComparisonENS_14SourceLocationEPNS_4ExprES3_\", \"clang::Sema::CheckFloatComparison(clang::SourceLocation, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema24CheckImplicitConversionsEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::CheckImplicitConversions(clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN12_GLOBAL__N_126AnalyzeImplicitConversionsERN5clang4SemaEPNS0_4ExprENS0_14SourceLocationE\", \"(anonymous namespace)::AnalyzeImplicitConversions(clang::Sema&, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema27CheckBitFieldInitializationENS_14SourceLocationEPNS_9FieldDeclEPNS_4ExprE\", \"clang::Sema::CheckBitFieldInitialization(clang::SourceLocation, clang::FieldDecl*, clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_125AnalyzeBitFieldAssignmentERN5clang4SemaEPNS0_9FieldDeclEPNS0_4ExprENS0_14SourceLocationE\", \"(anonymous namespace)::AnalyzeBitFieldAssignment(clang::Sema&, clang::FieldDecl*, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24CheckParmsForFunctionDefEPPNS_11ParmVarDeclES3_b\", \"clang::Sema::CheckParmsForFunctionDef(clang::ParmVarDecl**, clang::ParmVarDecl**, bool)\"},\n    {\"_ZN5clang4Sema14CheckCastAlignEPNS_4ExprENS_8QualTypeENS_11SourceRangeE\", \"clang::Sema::CheckCastAlign(clang::Expr*, clang::QualType, clang::SourceRange)\"},\n    {\"_ZN12_GLOBAL__N_124CheckConditionalOperatorERN5clang4SemaEPNS0_19ConditionalOperatorENS0_8QualTypeE\", \"(anonymous namespace)::CheckConditionalOperator(clang::Sema&, clang::ConditionalOperator*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_123CheckImplicitConversionERN5clang4SemaEPNS0_4ExprENS0_8QualTypeENS0_14SourceLocationEPb\", \"(anonymous namespace)::CheckImplicitConversion(clang::Sema&, clang::Expr*, clang::QualType, clang::SourceLocation, bool*)\"},\n    {\"_ZN12_GLOBAL__N_130CheckTrivialUnsignedComparisonERN5clang4SemaEPNS0_14BinaryOperatorE\", \"(anonymous namespace)::CheckTrivialUnsignedComparison(clang::Sema&, clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_112GetExprRangeERN5clang10ASTContextEPNS0_4ExprEj\", \"(anonymous namespace)::GetExprRange(clang::ASTContext&, clang::Expr*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113GetValueRangeERN5clang10ASTContextERNS0_7APValueENS0_8QualTypeEj\", \"(anonymous namespace)::GetValueRange(clang::ASTContext&, clang::APValue&, clang::QualType, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_18IntRange14forValueOfTypeERN5clang10ASTContextENS1_8QualTypeE\", \"(anonymous namespace)::IntRange::forValueOfType(clang::ASTContext&, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_113GetValueRangeERN5clang10ASTContextERN4llvm6APSIntEj\", \"(anonymous namespace)::GetValueRange(clang::ASTContext&, llvm::APSInt&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_16IsZeroERN5clang4SemaEPNS0_4ExprE\", \"(anonymous namespace)::IsZero(clang::Sema&, clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_115DiagnoseImpCastERN5clang4SemaEPNS0_4ExprENS0_8QualTypeENS0_14SourceLocationEj\", \"(anonymous namespace)::DiagnoseImpCast(clang::Sema&, clang::Expr*, clang::QualType, clang::SourceLocation, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_120IsSameFloatAfterCastERKN5clang7APValueERKN4llvm12fltSemanticsES7_\", \"(anonymous namespace)::IsSameFloatAfterCast(clang::APValue const&, llvm::fltSemantics const&, llvm::fltSemantics const&)\"},\n    {\"_ZN12_GLOBAL__N_123CheckConditionalOperandERN5clang4SemaEPNS0_4ExprENS0_8QualTypeENS0_14SourceLocationERb\", \"(anonymous namespace)::CheckConditionalOperand(clang::Sema&, clang::Expr*, clang::QualType, clang::SourceLocation, bool&)\"},\n    {\"_ZN12_GLOBAL__N_117CheckScanfHandlerD0Ev\", \"(anonymous namespace)::CheckScanfHandler::~CheckScanfHandler()\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler14HandleNullCharEPKc\", \"(anonymous namespace)::CheckFormatHandler::HandleNullChar(char const*)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler21HandleInvalidPositionEPKcjN5clang21analyze_format_string15PositionContextE\", \"(anonymous namespace)::CheckFormatHandler::HandleInvalidPosition(char const*, unsigned int, clang::analyze_format_string::PositionContext)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler18HandleZeroPositionEPKcj\", \"(anonymous namespace)::CheckFormatHandler::HandleZeroPosition(char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler25HandleIncompleteSpecifierEPKcj\", \"(anonymous namespace)::CheckFormatHandler::HandleIncompleteSpecifier(char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117CheckScanfHandler37HandleInvalidScanfConversionSpecifierERKN5clang13analyze_scanf14ScanfSpecifierEPKcj\", \"(anonymous namespace)::CheckScanfHandler::HandleInvalidScanfConversionSpecifier(clang::analyze_scanf::ScanfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117CheckScanfHandler20HandleScanfSpecifierERKN5clang13analyze_scanf14ScanfSpecifierEPKcj\", \"(anonymous namespace)::CheckScanfHandler::HandleScanfSpecifier(clang::analyze_scanf::ScanfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117CheckScanfHandler24HandleIncompleteScanListEPKcS2_\", \"(anonymous namespace)::CheckScanfHandler::HandleIncompleteScanList(char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler12CheckNumArgsERKN5clang21analyze_format_string15FormatSpecifierERKNS2_19ConversionSpecifierEPKcjj\", \"(anonymous namespace)::CheckFormatHandler::CheckNumArgs(clang::analyze_format_string::FormatSpecifier const&, clang::analyze_format_string::ConversionSpecifier const&, char const*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandler32HandleInvalidConversionSpecifierEjN5clang14SourceLocationEPKcjS4_j\", \"(anonymous namespace)::CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned int, clang::SourceLocation, char const*, unsigned int, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandlerD1Ev\", \"(anonymous namespace)::CheckFormatHandler::~CheckFormatHandler()\"},\n    {\"_ZN12_GLOBAL__N_118CheckFormatHandlerD0Ev\", \"(anonymous namespace)::CheckFormatHandler::~CheckFormatHandler()\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandlerD0Ev\", \"(anonymous namespace)::CheckPrintfHandler::~CheckPrintfHandler()\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler38HandleInvalidPrintfConversionSpecifierERKN5clang14analyze_printf15PrintfSpecifierEPKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandleInvalidPrintfConversionSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler21HandlePrintfSpecifierERKN5clang14analyze_printf15PrintfSpecifierEPKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandlePrintfSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler12HandleAmountERKN5clang21analyze_format_string14OptionalAmountEjPKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandleAmount(clang::analyze_format_string::OptionalAmount const&, unsigned int, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler19HandleInvalidAmountERKN5clang14analyze_printf15PrintfSpecifierERKNS1_21analyze_format_string14OptionalAmountEjPKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandleInvalidAmount(clang::analyze_printf::PrintfSpecifier const&, clang::analyze_format_string::OptionalAmount const&, unsigned int, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler10HandleFlagERKN5clang14analyze_printf15PrintfSpecifierERKNS1_21analyze_format_string12OptionalFlagEPKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandleFlag(clang::analyze_printf::PrintfSpecifier const&, clang::analyze_format_string::OptionalFlag const&, char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118CheckPrintfHandler17HandleIgnoredFlagERKN5clang14analyze_printf15PrintfSpecifierERKNS1_21analyze_format_string12OptionalFlagES9_PKcj\", \"(anonymous namespace)::CheckPrintfHandler::HandleIgnoredFlag(clang::analyze_printf::PrintfSpecifier const&, clang::analyze_format_string::OptionalFlag const&, clang::analyze_format_string::OptionalFlag const&, char const*, unsigned int)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_13FormatArgAttrEEEPT_v\", \"clang::FormatArgAttr* clang::Decl::getAttr<clang::FormatArgAttr>() const\"},\n    {\"_ZN4llvm11SmallVectorItLj128EEC2EjRKt\", \"llvm::SmallVector<unsigned short, 128u>::SmallVector(unsigned int, unsigned short const&)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler38HandleInvalidPrintfConversionSpecifierERKNS_14analyze_printf15PrintfSpecifierEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandleInvalidPrintfConversionSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler21HandlePrintfSpecifierERKNS_14analyze_printf15PrintfSpecifierEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandlePrintfSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler37HandleInvalidScanfConversionSpecifierERKNS_13analyze_scanf14ScanfSpecifierEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandleInvalidScanfConversionSpecifier(clang::analyze_scanf::ScanfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler20HandleScanfSpecifierERKNS_13analyze_scanf14ScanfSpecifierEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandleScanfSpecifier(clang::analyze_scanf::ScanfSpecifier const&, char const*, unsigned int)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler24HandleIncompleteScanListEPKcS3_\", \"clang::analyze_format_string::FormatStringHandler::HandleIncompleteScanList(char const*, char const*)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler14HandleNullCharEPKc\", \"clang::analyze_format_string::FormatStringHandler::HandleNullChar(char const*)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler21HandleInvalidPositionEPKcjNS0_15PositionContextE\", \"clang::analyze_format_string::FormatStringHandler::HandleInvalidPosition(char const*, unsigned int, clang::analyze_format_string::PositionContext)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler18HandleZeroPositionEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandleZeroPosition(char const*, unsigned int)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandler25HandleIncompleteSpecifierEPKcj\", \"clang::analyze_format_string::FormatStringHandler::HandleIncompleteSpecifier(char const*, unsigned int)\"},\n    {\"_ZN5clang22getSimplifiedTypeClassENS_7CanQualINS_4TypeEEE\", \"clang::getSimplifiedTypeClass(clang::CanQual<clang::Type>)\"},\n    {\"_ZN5clang16getDeclUsageTypeERNS_10ASTContextEPNS_9NamedDeclE\", \"clang::getDeclUsageType(clang::ASTContext&, clang::NamedDecl*)\"},\n    {\"_Z23GetCompletionTypeStringN5clang8QualTypeERNS_10ASTContextERNS_23CodeCompletionAllocatorE\", \"GetCompletionTypeString(clang::QualType, clang::ASTContext&, clang::CodeCompletionAllocator&)\"},\n    {\"_ZN5clang20CodeCompletionResult26CreateCodeCompletionStringERNS_4SemaERNS_23CodeCompletionAllocatorE\", \"clang::CodeCompletionResult::CreateCodeCompletionString(clang::Sema&, clang::CodeCompletionAllocator&)\"},\n    {\"_Z18AddResultTypeChunkRN5clang10ASTContextEPNS_9NamedDeclERNS_21CodeCompletionBuilderE\", \"AddResultTypeChunk(clang::ASTContext&, clang::NamedDecl*, clang::CodeCompletionBuilder&)\"},\n    {\"_Z30AddQualifierToCompletionStringRN5clang21CodeCompletionBuilderEPNS_19NestedNameSpecifierEbRNS_10ASTContextE\", \"AddQualifierToCompletionString(clang::CodeCompletionBuilder&, clang::NestedNameSpecifier*, bool, clang::ASTContext&)\"},\n    {\"_Z17AddTypedNameChunkRN5clang10ASTContextEPNS_9NamedDeclERNS_21CodeCompletionBuilderE\", \"AddTypedNameChunk(clang::ASTContext&, clang::NamedDecl*, clang::CodeCompletionBuilder&)\"},\n    {\"_Z26AddFunctionParameterChunksRN5clang10ASTContextEPNS_12FunctionDeclERNS_21CodeCompletionBuilderEjb\", \"AddFunctionParameterChunks(clang::ASTContext&, clang::FunctionDecl*, clang::CodeCompletionBuilder&, unsigned int, bool)\"},\n    {\"_Z38AddFunctionTypeQualsToCompletionStringRN5clang21CodeCompletionBuilderEPNS_12FunctionDeclE\", \"AddFunctionTypeQualsToCompletionString(clang::CodeCompletionBuilder&, clang::FunctionDecl*)\"},\n    {\"_Z26AddTemplateParameterChunksRN5clang10ASTContextEPNS_12TemplateDeclERNS_21CodeCompletionBuilderEjjb\", \"AddTemplateParameterChunks(clang::ASTContext&, clang::TemplateDecl*, clang::CodeCompletionBuilder&, unsigned int, unsigned int, bool)\"},\n    {\"_Z23FormatFunctionParameterRN5clang10ASTContextEPNS_11ParmVarDeclEb\", \"FormatFunctionParameter(clang::ASTContext&, clang::ParmVarDecl*, bool)\"},\n    {\"_Z16MaybeAddSentinelRN5clang10ASTContextEPNS_9NamedDeclERNS_21CodeCompletionBuilderE\", \"MaybeAddSentinel(clang::ASTContext&, clang::NamedDecl*, clang::CodeCompletionBuilder&)\"},\n    {\"_ZNK5clang20CodeCompleteConsumer17OverloadCandidate21CreateSignatureStringEjRNS_4SemaERNS_23CodeCompletionAllocatorE\", \"clang::CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(unsigned int, clang::Sema&, clang::CodeCompletionAllocator&) const\"},\n    {\"_ZN5clang21getMacroUsagePriorityEN4llvm9StringRefERKNS_11LangOptionsEb\", \"clang::getMacroUsagePriority(llvm::StringRef, clang::LangOptions const&, bool)\"},\n    {\"_ZN5clang20getCursorKindForDeclEPNS_4DeclE\", \"clang::getCursorKindForDecl(clang::Decl*)\"},\n    {\"_ZN5clang4Sema24CodeCompleteOrdinaryNameEPNS_5ScopeENS0_23ParserCompletionContextE\", \"clang::Sema::CodeCompleteOrdinaryName(clang::Scope*, clang::Sema::ParserCompletionContext)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder13EnterNewScopeEv\", \"(anonymous namespace)::ResultBuilder::EnterNewScope()\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder22IsOrdinaryNonValueNameEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsOrdinaryNonValueName(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder14IsOrdinaryNameEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsOrdinaryName(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder21IsOrdinaryNonTypeNameEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsOrdinaryNonTypeName(clang::NamedDecl*) const\"},\n    {\"_Z21MaybeAddOverrideCallsRN5clang4SemaEPNS_11DeclContextERN12_GLOBAL__N_113ResultBuilderE\", \"MaybeAddOverrideCalls(clang::Sema&, clang::DeclContext*, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_Z22AddOrdinaryNameResultsN5clang4Sema23ParserCompletionContextEPNS_5ScopeERS0_RN12_GLOBAL__N_113ResultBuilderE\", \"AddOrdinaryNameResults(clang::Sema::ParserCompletionContext, clang::Scope*, clang::Sema&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder9ExitScopeEv\", \"(anonymous namespace)::ResultBuilder::ExitScope()\"},\n    {\"_Z24AddPrettyFunctionResultsRKN5clang11LangOptionsERN12_GLOBAL__N_113ResultBuilderE\", \"AddPrettyFunctionResults(clang::LangOptions const&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_Z15AddMacroResultsRN5clang12PreprocessorERN12_GLOBAL__N_113ResultBuilderEb\", \"AddMacroResults(clang::Preprocessor&, (anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_ZN12_GLOBAL__N_126CodeCompletionDeclConsumerD1Ev\", \"(anonymous namespace)::CodeCompletionDeclConsumer::~CodeCompletionDeclConsumer()\"},\n    {\"_ZN5clang4Sema20CodeCompleteDeclSpecEPNS_5ScopeERNS_8DeclSpecEbb\", \"clang::Sema::CodeCompleteDeclSpec(clang::Scope*, clang::DeclSpec&, bool, bool)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder21IsImpossibleToSatisfyEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsImpossibleToSatisfy(clang::NamedDecl*) const\"},\n    {\"_Z26AddClassMessageCompletionsRN5clang4SemaEPNS_5ScopeENS_9OpaquePtrINS_8QualTypeEEEPPNS_14IdentifierInfoEjbbRN12_GLOBAL__N_113ResultBuilderE\", \"AddClassMessageCompletions(clang::Sema&, clang::Scope*, clang::OpaquePtr<clang::QualType>, clang::IdentifierInfo**, unsigned int, bool, bool, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN5clang4Sema22CodeCompleteExpressionEPNS_5ScopeERKNS0_26CodeCompleteExpressionDataE\", \"clang::Sema::CodeCompleteExpression(clang::Scope*, clang::Sema::CodeCompleteExpressionData const&)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder16IsObjCCollectionEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsObjCCollection(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder23IsIntegralConstantValueEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsIntegralConstantValue(clang::NamedDecl*) const\"},\n    {\"_ZN5clang4Sema29CodeCompletePostfixExpressionEPNS_5ScopeENS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Sema::CodeCompletePostfixExpression(clang::Scope*, clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_ZN5clang4Sema31CodeCompleteObjCInstanceMessageEPNS_5ScopeEPNS_4ExprEPPNS_14IdentifierInfoEjbPNS_17ObjCInterfaceDeclE\", \"clang::Sema::CodeCompleteObjCInstanceMessage(clang::Scope*, clang::Expr*, clang::IdentifierInfo**, unsigned int, bool, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema31CodeCompleteMemberReferenceExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationEb\", \"clang::Sema::CodeCompleteMemberReferenceExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, bool)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder8IsMemberEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsMember(clang::NamedDecl*) const\"},\n    {\"_Z17AddObjCPropertiesPN5clang17ObjCContainerDeclEbPNS_11DeclContextERN4llvm11SmallPtrSetIPNS_14IdentifierInfoELj16EEERN12_GLOBAL__N_113ResultBuilderE\", \"AddObjCProperties(clang::ObjCContainerDecl*, bool, clang::DeclContext*, llvm::SmallPtrSet<clang::IdentifierInfo*, 16u>&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder10IsObjCIvarEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsObjCIvar(clang::NamedDecl*) const\"},\n    {\"_ZN5clang4Sema15CodeCompleteTagEPNS_5ScopeEj\", \"clang::Sema::CodeCompleteTag(clang::Scope*, unsigned int)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder6IsEnumEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsEnum(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder7IsUnionEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsUnion(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder15IsClassOrStructEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsClassOrStruct(clang::NamedDecl*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder21IsNestedNameSpecifierEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsNestedNameSpecifier(clang::NamedDecl*) const\"},\n    {\"_ZN5clang4Sema26CodeCompleteTypeQualifiersERNS_8DeclSpecE\", \"clang::Sema::CodeCompleteTypeQualifiers(clang::DeclSpec&)\"},\n    {\"_ZN5clang4Sema16CodeCompleteCaseEPNS_5ScopeE\", \"clang::Sema::CodeCompleteCase(clang::Scope*)\"},\n    {\"_Z24getRequiredQualificationRN5clang10ASTContextEPNS_11DeclContextES3_\", \"getRequiredQualification(clang::ASTContext&, clang::DeclContext*, clang::DeclContext*)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder9AddResultEN5clang20CodeCompletionResultEPNS1_11DeclContextEPNS1_9NamedDeclEb\", \"(anonymous namespace)::ResultBuilder::AddResult(clang::CodeCompletionResult, clang::DeclContext*, clang::NamedDecl*, bool)\"},\n    {\"_ZN5clang4Sema16CodeCompleteCallEPNS_5ScopeEPNS_4ExprEPS4_j\", \"clang::Sema::CodeCompleteCall(clang::Scope*, clang::Expr*, clang::Expr**, unsigned int)\"},\n    {\"_ZN5clang4Sema23CodeCompleteInitializerEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::CodeCompleteInitializer(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema18CodeCompleteReturnEPNS_5ScopeE\", \"clang::Sema::CodeCompleteReturn(clang::Scope*)\"},\n    {\"_ZN5clang4Sema25CodeCompleteAssignmentRHSEPNS_5ScopeEPNS_4ExprE\", \"clang::Sema::CodeCompleteAssignmentRHS(clang::Scope*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema23CodeCompleteQualifiedIdEPNS_5ScopeERNS_12CXXScopeSpecEb\", \"clang::Sema::CodeCompleteQualifiedId(clang::Scope*, clang::CXXScopeSpec&, bool)\"},\n    {\"_ZN5clang4Sema17CodeCompleteUsingEPNS_5ScopeE\", \"clang::Sema::CodeCompleteUsing(clang::Scope*)\"},\n    {\"_ZN5clang4Sema26CodeCompleteUsingDirectiveEPNS_5ScopeE\", \"clang::Sema::CodeCompleteUsingDirective(clang::Scope*)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder18IsNamespaceOrAliasEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsNamespaceOrAlias(clang::NamedDecl*) const\"},\n    {\"_ZN5clang4Sema25CodeCompleteNamespaceDeclEPNS_5ScopeE\", \"clang::Sema::CodeCompleteNamespaceDecl(clang::Scope*)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder11IsNamespaceEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsNamespace(clang::NamedDecl*) const\"},\n    {\"_ZN5clang4Sema30CodeCompleteNamespaceAliasDeclEPNS_5ScopeE\", \"clang::Sema::CodeCompleteNamespaceAliasDecl(clang::Scope*)\"},\n    {\"_ZN5clang4Sema24CodeCompleteOperatorNameEPNS_5ScopeE\", \"clang::Sema::CodeCompleteOperatorName(clang::Scope*)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder6IsTypeEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsType(clang::NamedDecl*) const\"},\n    {\"_Z23AddTypeSpecifierResultsRKN5clang11LangOptionsERN12_GLOBAL__N_113ResultBuilderE\", \"AddTypeSpecifierResults(clang::LangOptions const&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN5clang4Sema34CodeCompleteConstructorInitializerEPNS_4DeclEPPNS_18CXXCtorInitializerEj\", \"clang::Sema::CodeCompleteConstructorInitializer(clang::Decl*, clang::CXXCtorInitializer**, unsigned int)\"},\n    {\"_ZN5clang4Sema27CodeCompleteObjCAtDirectiveEPNS_5ScopeEPNS_4DeclEb\", \"clang::Sema::CodeCompleteObjCAtDirective(clang::Scope*, clang::Decl*, bool)\"},\n    {\"_Z28AddObjCImplementationResultsRKN5clang11LangOptionsERN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCImplementationResults(clang::LangOptions const&, (anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_Z23AddObjCInterfaceResultsRKN5clang11LangOptionsERN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCInterfaceResults(clang::LangOptions const&, (anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_Z22AddObjCTopLevelResultsRN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCTopLevelResults((anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_ZN5clang4Sema28CodeCompleteObjCAtVisibilityEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCAtVisibility(clang::Scope*)\"},\n    {\"_Z24AddObjCVisibilityResultsRKN5clang11LangOptionsERN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCVisibilityResults(clang::LangOptions const&, (anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_ZN5clang4Sema27CodeCompleteObjCAtStatementEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCAtStatement(clang::Scope*)\"},\n    {\"_Z23AddObjCStatementResultsRN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCStatementResults((anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_Z24AddObjCExpressionResultsRN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCExpressionResults((anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_ZN5clang4Sema28CodeCompleteObjCAtExpressionEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCAtExpression(clang::Scope*)\"},\n    {\"_ZN5clang4Sema29CodeCompleteObjCPropertyFlagsEPNS_5ScopeERNS_12ObjCDeclSpecE\", \"clang::Sema::CodeCompleteObjCPropertyFlags(clang::Scope*, clang::ObjCDeclSpec&)\"},\n    {\"_ZN5clang4Sema30CodeCompleteObjCPropertyGetterEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::CodeCompleteObjCPropertyGetter(clang::Scope*, clang::Decl*)\"},\n    {\"_Z14AddObjCMethodsPN5clang17ObjCContainerDeclEb14ObjCMethodKindPPNS_14IdentifierInfoEjPNS_11DeclContextERN4llvm11SmallPtrSetINS_8SelectorELj16EEEbRN12_GLOBAL__N_113ResultBuilderEb\", \"AddObjCMethods(clang::ObjCContainerDecl*, bool, ObjCMethodKind, clang::IdentifierInfo**, unsigned int, clang::DeclContext*, llvm::SmallPtrSet<clang::Selector, 16u>&, bool, (anonymous namespace)::ResultBuilder&, bool)\"},\n    {\"_ZN5clang4Sema30CodeCompleteObjCPropertySetterEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::CodeCompleteObjCPropertySetter(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema27CodeCompleteObjCPassingTypeEPNS_5ScopeERNS_12ObjCDeclSpecE\", \"clang::Sema::CodeCompleteObjCPassingType(clang::Scope*, clang::ObjCDeclSpec&)\"},\n    {\"_ZN5clang4Sema31CodeCompleteObjCMessageReceiverEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCMessageReceiver(clang::Scope*)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder21IsObjCMessageReceiverEPN5clang9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::IsObjCMessageReceiver(clang::NamedDecl*) const\"},\n    {\"_Z22AddSuperSendCompletionRN5clang4SemaEbPPNS_14IdentifierInfoEjRN12_GLOBAL__N_113ResultBuilderE\", \"AddSuperSendCompletion(clang::Sema&, bool, clang::IdentifierInfo**, unsigned int, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN5clang4Sema28CodeCompleteObjCSuperMessageEPNS_5ScopeENS_14SourceLocationEPPNS_14IdentifierInfoEjb\", \"clang::Sema::CodeCompleteObjCSuperMessage(clang::Scope*, clang::SourceLocation, clang::IdentifierInfo**, unsigned int, bool)\"},\n    {\"_ZN5clang4Sema28CodeCompleteObjCClassMessageEPNS_5ScopeENS_9OpaquePtrINS_8QualTypeEEEPPNS_14IdentifierInfoEjbb\", \"clang::Sema::CodeCompleteObjCClassMessage(clang::Scope*, clang::OpaquePtr<clang::QualType>, clang::IdentifierInfo**, unsigned int, bool, bool)\"},\n    {\"_Z38getPreferredArgumentTypeForMessageSendRN12_GLOBAL__N_113ResultBuilderEj\", \"getPreferredArgumentTypeForMessageSend((anonymous namespace)::ResultBuilder&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder14MaybeAddResultEN5clang20CodeCompletionResultEPNS1_11DeclContextE\", \"(anonymous namespace)::ResultBuilder::MaybeAddResult(clang::CodeCompletionResult, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema29CodeCompleteObjCForCollectionEPNS_5ScopeENS_9OpaquePtrINS_12DeclGroupRefEEE\", \"clang::Sema::CodeCompleteObjCForCollection(clang::Scope*, clang::OpaquePtr<clang::DeclGroupRef>)\"},\n    {\"_ZN5clang4Sema24CodeCompleteObjCSelectorEPNS_5ScopeEPPNS_14IdentifierInfoEj\", \"clang::Sema::CodeCompleteObjCSelector(clang::Scope*, clang::IdentifierInfo**, unsigned int)\"},\n    {\"_Z24isAcceptableObjCSelectorN5clang8SelectorE14ObjCMethodKindPPNS_14IdentifierInfoEjb\", \"isAcceptableObjCSelector(clang::Selector, ObjCMethodKind, clang::IdentifierInfo**, unsigned int, bool)\"},\n    {\"_ZN5clang4Sema34CodeCompleteObjCProtocolReferencesEPSt4pairIPNS_14IdentifierInfoENS_14SourceLocationEEj\", \"clang::Sema::CodeCompleteObjCProtocolReferences(std::pair<clang::IdentifierInfo*, clang::SourceLocation>*, unsigned int)\"},\n    {\"_Z18AddProtocolResultsPN5clang11DeclContextES1_bRN12_GLOBAL__N_113ResultBuilderE\", \"AddProtocolResults(clang::DeclContext*, clang::DeclContext*, bool, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN5clang4Sema28CodeCompleteObjCProtocolDeclEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCProtocolDecl(clang::Scope*)\"},\n    {\"_ZN5clang4Sema29CodeCompleteObjCInterfaceDeclEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCInterfaceDecl(clang::Scope*)\"},\n    {\"_Z19AddInterfaceResultsPN5clang11DeclContextES1_bbRN12_GLOBAL__N_113ResultBuilderE\", \"AddInterfaceResults(clang::DeclContext*, clang::DeclContext*, bool, bool, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZN5clang4Sema26CodeCompleteObjCSuperclassEPNS_5ScopeEPNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::CodeCompleteObjCSuperclass(clang::Scope*, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema34CodeCompleteObjCImplementationDeclEPNS_5ScopeE\", \"clang::Sema::CodeCompleteObjCImplementationDecl(clang::Scope*)\"},\n    {\"_ZN5clang4Sema33CodeCompleteObjCInterfaceCategoryEPNS_5ScopeEPNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::CodeCompleteObjCInterfaceCategory(clang::Scope*, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema38CodeCompleteObjCImplementationCategoryEPNS_5ScopeEPNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::CodeCompleteObjCImplementationCategory(clang::Scope*, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema34CodeCompleteObjCPropertyDefinitionEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::CodeCompleteObjCPropertyDefinition(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema38CodeCompleteObjCPropertySynthesizeIvarEPNS_5ScopeEPNS_14IdentifierInfoEPNS_4DeclE\", \"clang::Sema::CodeCompleteObjCPropertySynthesizeIvar(clang::Scope*, clang::IdentifierInfo*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema26CodeCompleteObjCMethodDeclEPNS_5ScopeEbNS_9OpaquePtrINS_8QualTypeEEEPNS_4DeclE\", \"clang::Sema::CodeCompleteObjCMethodDecl(clang::Scope*, bool, clang::OpaquePtr<clang::QualType>, clang::Decl*)\"},\n    {\"_Z24FindImplementableMethodsRN5clang10ASTContextEPNS_17ObjCContainerDeclEbNS_8QualTypeERN4llvm8DenseMapINS_8SelectorESt4pairIPNS_14ObjCMethodDeclEbENS5_12DenseMapInfoIS7_EENSC_ISB_EEEEb\", \"FindImplementableMethods(clang::ASTContext&, clang::ObjCContainerDecl*, bool, clang::QualType, llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodDecl*, bool>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodDecl*, bool> > >&, bool)\"},\n    {\"_ZN5clang4Sema34CodeCompleteObjCMethodDeclSelectorEPNS_5ScopeEbbNS_9OpaquePtrINS_8QualTypeEEEPPNS_14IdentifierInfoEj\", \"clang::Sema::CodeCompleteObjCMethodDeclSelector(clang::Scope*, bool, bool, clang::OpaquePtr<clang::QualType>, clang::IdentifierInfo**, unsigned int)\"},\n    {\"_ZN5clang4Sema33CodeCompletePreprocessorDirectiveEb\", \"clang::Sema::CodeCompletePreprocessorDirective(bool)\"},\n    {\"_ZN5clang4Sema46CodeCompleteInPreprocessorConditionalExclusionEPNS_5ScopeE\", \"clang::Sema::CodeCompleteInPreprocessorConditionalExclusion(clang::Scope*)\"},\n    {\"_ZN5clang4Sema33CodeCompletePreprocessorMacroNameEb\", \"clang::Sema::CodeCompletePreprocessorMacroName(bool)\"},\n    {\"_ZN5clang4Sema34CodeCompletePreprocessorExpressionEv\", \"clang::Sema::CodeCompletePreprocessorExpression()\"},\n    {\"_ZN5clang4Sema37CodeCompletePreprocessorMacroArgumentEPNS_5ScopeEPNS_14IdentifierInfoEPNS_9MacroInfoEj\", \"clang::Sema::CodeCompletePreprocessorMacroArgument(clang::Scope*, clang::IdentifierInfo*, clang::MacroInfo*, unsigned int)\"},\n    {\"_ZN5clang4Sema27CodeCompleteNaturalLanguageEv\", \"clang::Sema::CodeCompleteNaturalLanguage()\"},\n    {\"_ZN5clang4Sema27GatherGlobalCodeCompletionsERNS_23CodeCompletionAllocatorERN4llvm15SmallVectorImplINS_20CodeCompletionResultEEE\", \"clang::Sema::GatherGlobalCodeCompletions(clang::CodeCompletionAllocator&, llvm::SmallVectorImpl<clang::CodeCompletionResult>&)\"},\n    {\"_ZSt21__inplace_stable_sortIPN5clang17OverloadCandidateEN12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_T0_\", \"void std::__inplace_stable_sort<clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPN5clang17OverloadCandidateES2_lN12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_T0_T1_T2_\", \"void std::__stable_sort_adaptive<clang::OverloadCandidate*, clang::OverloadCandidate*, long, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, long, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPN5clang17OverloadCandidateES2_N12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_T0_T1_\", \"void std::__merge_sort_with_buffer<clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt16__merge_adaptiveIPN5clang17OverloadCandidateElS2_N12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_S5_T0_S6_T1_S6_T2_\", \"void std::__merge_adaptive<clang::OverloadCandidate*, long, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, long, long, clang::OverloadCandidate*, long, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt5mergeIPN5clang17OverloadCandidateES2_S2_N12_GLOBAL__N_125IsBetterOverloadCandidateEET1_T_S6_T0_S7_S5_T2_\", \"clang::OverloadCandidate* std::merge<clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt16__insertion_sortIPN5clang17OverloadCandidateEN12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_T0_\", \"void std::__insertion_sort<clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZSt22__merge_without_bufferIPN5clang17OverloadCandidateElN12_GLOBAL__N_125IsBetterOverloadCandidateEEvT_S5_S5_T0_S6_T1_\", \"void std::__merge_without_buffer<clang::OverloadCandidate*, long, (anonymous namespace)::IsBetterOverloadCandidate>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, long, long, (anonymous namespace)::IsBetterOverloadCandidate)\"},\n    {\"_ZNK12_GLOBAL__N_113ResultBuilder17isInterestingDeclEPN5clang9NamedDeclERb\", \"(anonymous namespace)::ResultBuilder::isInterestingDecl(clang::NamedDecl*, bool&) const\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder17CheckHiddenResultERN5clang20CodeCompletionResultEPNS1_11DeclContextEPNS1_9NamedDeclE\", \"(anonymous namespace)::ResultBuilder::CheckHiddenResult(clang::CodeCompletionResult&, clang::DeclContext*, clang::NamedDecl*)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder27AdjustResultPriorityForDeclERN5clang20CodeCompletionResultE\", \"(anonymous namespace)::ResultBuilder::AdjustResultPriorityForDecl(clang::CodeCompletionResult&)\"},\n    {\"_ZN12_GLOBAL__N_113ResultBuilder26MaybeAddConstructorResultsEN5clang20CodeCompletionResultE\", \"(anonymous namespace)::ResultBuilder::MaybeAddConstructorResults(clang::CodeCompletionResult)\"},\n    {\"_ZN12_GLOBAL__N_126CodeCompletionDeclConsumerD0Ev\", \"(anonymous namespace)::CodeCompletionDeclConsumer::~CodeCompletionDeclConsumer()\"},\n    {\"_ZN12_GLOBAL__N_126CodeCompletionDeclConsumer9FoundDeclEPN5clang9NamedDeclES3_b\", \"(anonymous namespace)::CodeCompletionDeclConsumer::FoundDecl(clang::NamedDecl*, clang::NamedDecl*, bool)\"},\n    {\"_Z16AddTypedefResultRN12_GLOBAL__N_113ResultBuilderE\", \"AddTypedefResult((anonymous namespace)::ResultBuilder&)\"},\n    {\"_Z20AddStorageSpecifiersN5clang4Sema23ParserCompletionContextERKNS_11LangOptionsERN12_GLOBAL__N_113ResultBuilderE\", \"AddStorageSpecifiers(clang::Sema::ParserCompletionContext, clang::LangOptions const&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_Z21AddFunctionSpecifiersN5clang4Sema23ParserCompletionContextERKNS_11LangOptionsERN12_GLOBAL__N_113ResultBuilderE\", \"AddFunctionSpecifiers(clang::Sema::ParserCompletionContext, clang::LangOptions const&, (anonymous namespace)::ResultBuilder&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang13NamespaceDeclESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::NamespaceDecl*, std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*>, std::_Select1st<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> >, std::less<clang::NamespaceDecl*>, std::allocator<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> >, std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang13NamespaceDeclESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::NamespaceDecl*, std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*>, std::_Select1st<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> >, std::less<clang::NamespaceDecl*>, std::allocator<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> > >::_M_insert_unique(std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> const&)\"},\n    {\"_ZNSt17_Temporary_bufferIPN5clang17OverloadCandidateES1_ED2Ev\", \"std::_Temporary_buffer<clang::OverloadCandidate*, clang::OverloadCandidate>::~_Temporary_buffer()\"},\n    {\"_ZSt17__rotate_adaptiveIPN5clang17OverloadCandidateES2_lET_S3_S3_S3_T1_S4_T0_S4_\", \"clang::OverloadCandidate* std::__rotate_adaptive<clang::OverloadCandidate*, clang::OverloadCandidate*, long>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, long, long, clang::OverloadCandidate*, long)\"},\n    {\"_ZSt8__rotateIPN5clang17OverloadCandidateEEvT_S3_S3_St26random_access_iterator_tag\", \"void std::__rotate<clang::OverloadCandidate*>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang26ImplicitConversionSequenceEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::ImplicitConversionSequence>::operator=(llvm::SmallVectorImpl<clang::ImplicitConversionSequence> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang26ImplicitConversionSequenceELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ImplicitConversionSequence, false>::grow(unsigned long)\"},\n    {\"_ZSt4swapIN5clang17OverloadCandidateEEvRT_S3_\", \"void std::swap<clang::OverloadCandidate>(clang::OverloadCandidate&, clang::OverloadCandidate&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN5clang17OverloadCandidateES5_EET0_T_S7_S6_\", \"clang::OverloadCandidate* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<clang::OverloadCandidate*, clang::OverloadCandidate*>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPN5clang17OverloadCandidateES5_EET0_T_S7_S6_\", \"clang::OverloadCandidate* std::__copy<false, std::random_access_iterator_tag>::copy<clang::OverloadCandidate*, clang::OverloadCandidate*>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*)\"},\n    {\"_ZSt26__uninitialized_fill_n_auxIPN5clang17OverloadCandidateElS1_EvT_T0_RKT1_St12__false_type\", \"void std::__uninitialized_fill_n_aux<clang::OverloadCandidate*, long, clang::OverloadCandidate>(clang::OverloadCandidate*, long, clang::OverloadCandidate const&, std::__false_type)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang20CodeCompleteConsumer17OverloadCandidateELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CodeCompleteConsumer::OverloadCandidate, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorESt4pairIPNS1_14ObjCMethodDeclEbENS_12DenseMapInfoIS2_EENS7_IS6_EEE16InsertIntoBucketERKS2_RKS6_PS3_IS2_S6_E\", \"llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodDecl*, bool>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodDecl*, bool> > >::InsertIntoBucket(clang::Selector const&, std::pair<clang::ObjCMethodDecl*, bool> const&, std::pair<clang::Selector, std::pair<clang::ObjCMethodDecl*, bool> >*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorESt4pairIPNS1_14ObjCMethodDeclEbENS_12DenseMapInfoIS2_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodDecl*, bool>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodDecl*, bool> > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN5clang20CodeCompletionResultESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::CodeCompletionResult, std::allocator<clang::CodeCompletionResult> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CodeCompletionResult*, std::vector<clang::CodeCompletionResult, std::allocator<clang::CodeCompletionResult> > >, clang::CodeCompletionResult const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang13NamespaceDeclESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::NamespaceDecl*, std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*>, std::_Select1st<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> >, std::less<clang::NamespaceDecl*>, std::allocator<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::NamespaceDecl* const, clang::NamespaceDecl*> >*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang17OverloadCandidateEED2Ev\", \"llvm::SmallVectorImpl<clang::OverloadCandidate>::~SmallVectorImpl()\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12SentinelAttrEEEPT_v\", \"clang::SentinelAttr* clang::Decl::getAttr<clang::SentinelAttr>() const\"},\n    {\"_ZN5clang4Sema22ConvertDeclToDeclGroupEPNS_4DeclE\", \"clang::Sema::ConvertDeclToDeclGroup(clang::Decl*)\"},\n    {\"_ZN5clang4Sema11getTypeNameERNS_14IdentifierInfoENS_14SourceLocationEPNS_5ScopeEPNS_12CXXScopeSpecEbbNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::getTypeName(clang::IdentifierInfo&, clang::SourceLocation, clang::Scope*, clang::CXXScopeSpec*, bool, bool, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang4Sema9isTagNameERNS_14IdentifierInfoEPNS_5ScopeE\", \"clang::Sema::isTagName(clang::IdentifierInfo&, clang::Scope*)\"},\n    {\"_ZN5clang4Sema23DiagnoseUnknownTypeNameERKNS_14IdentifierInfoENS_14SourceLocationEPNS_5ScopeEPNS_12CXXScopeSpecERNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::DiagnoseUnknownTypeName(clang::IdentifierInfo const&, clang::SourceLocation, clang::Scope*, clang::CXXScopeSpec*, clang::OpaquePtr<clang::QualType>&)\"},\n    {\"_ZN5clang4Sema15getContainingDCEPNS_11DeclContextE\", \"clang::Sema::getContainingDC(clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema15PushDeclContextEPNS_5ScopeEPNS_11DeclContextE\", \"clang::Sema::PushDeclContext(clang::Scope*, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema14PopDeclContextEv\", \"clang::Sema::PopDeclContext()\"},\n    {\"_ZN5clang4Sema22EnterDeclaratorContextEPNS_5ScopeEPNS_11DeclContextE\", \"clang::Sema::EnterDeclaratorContext(clang::Scope*, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema21ExitDeclaratorContextEPNS_5ScopeE\", \"clang::Sema::ExitDeclaratorContext(clang::Scope*)\"},\n    {\"_ZN5clang4Sema17PushOnScopeChainsEPNS_9NamedDeclEPNS_5ScopeEb\", \"clang::Sema::PushOnScopeChains(clang::NamedDecl*, clang::Scope*, bool)\"},\n    {\"_ZN5clang4Sema13isDeclInScopeERPNS_9NamedDeclEPNS_11DeclContextEPNS_5ScopeE\", \"clang::Sema::isDeclInScope(clang::NamedDecl*&, clang::DeclContext*, clang::Scope*)\"},\n    {\"_ZN5clang4Sema22getScopeForDeclContextEPNS_5ScopeEPNS_11DeclContextE\", \"clang::Sema::getScopeForDeclContext(clang::Scope*, clang::DeclContext*)\"},\n    {\"_ZNK5clang4Sema32ShouldWarnIfUnusedFileScopedDeclEPKNS_14DeclaratorDeclE\", \"clang::Sema::ShouldWarnIfUnusedFileScopedDecl(clang::DeclaratorDecl const*) const\"},\n    {\"_ZN5clang4Sema24MarkUnusedFileScopedDeclEPKNS_14DeclaratorDeclE\", \"clang::Sema::MarkUnusedFileScopedDecl(clang::DeclaratorDecl const*)\"},\n    {\"_ZN5clang4Sema18DiagnoseUnusedDeclEPKNS_9NamedDeclE\", \"clang::Sema::DiagnoseUnusedDecl(clang::NamedDecl const*)\"},\n    {\"_ZN5clang4Sema13ActOnPopScopeENS_14SourceLocationEPNS_5ScopeE\", \"clang::Sema::ActOnPopScope(clang::SourceLocation, clang::Scope*)\"},\n    {\"_ZN5clang4Sema20getObjCInterfaceDeclERPNS_14IdentifierInfoENS_14SourceLocationEb\", \"clang::Sema::getObjCInterfaceDecl(clang::IdentifierInfo*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema20getNonFieldDeclScopeEPNS_5ScopeE\", \"clang::Sema::getNonFieldDeclScope(clang::Scope*)\"},\n    {\"_ZN5clang4Sema19LazilyCreateBuiltinEPNS_14IdentifierInfoEjPNS_5ScopeEbNS_14SourceLocationE\", \"clang::Sema::LazilyCreateBuiltin(clang::IdentifierInfo*, unsigned int, clang::Scope*, bool, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema26AddKnownFunctionAttributesEPNS_12FunctionDeclE\", \"clang::Sema::AddKnownFunctionAttributes(clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema16MergeTypeDefDeclEPNS_11TypedefDeclERNS_12LookupResultE\", \"clang::Sema::MergeTypeDefDecl(clang::TypedefDecl*, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema16getSpecialMemberEPKNS_13CXXMethodDeclE\", \"clang::Sema::getSpecialMember(clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang4Sema17MergeFunctionDeclEPNS_12FunctionDeclEPNS_4DeclE\", \"clang::Sema::MergeFunctionDecl(clang::FunctionDecl*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema28MergeCompatibleFunctionDeclsEPNS_12FunctionDeclES2_\", \"clang::Sema::MergeCompatibleFunctionDecls(clang::FunctionDecl*, clang::FunctionDecl*)\"},\n    {\"_Z19MergeDeclAttributesPN5clang4DeclES1_RNS_10ASTContextE\", \"MergeDeclAttributes(clang::Decl*, clang::Decl*, clang::ASTContext&)\"},\n    {\"_ZN5clang4Sema12MergeVarDeclEPNS_7VarDeclERNS_12LookupResultE\", \"clang::Sema::MergeVarDecl(clang::VarDecl*, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema26ParsedFreeStandingDeclSpecEPNS_5ScopeENS_15AccessSpecifierERNS_8DeclSpecE\", \"clang::Sema::ParsedFreeStandingDeclSpec(clang::Scope*, clang::AccessSpecifier, clang::DeclSpec&)\"},\n    {\"_ZN5clang4Sema27BuildAnonymousStructOrUnionEPNS_5ScopeERNS_8DeclSpecENS_15AccessSpecifierEPNS_10RecordDeclE\", \"clang::Sema::BuildAnonymousStructOrUnion(clang::Scope*, clang::DeclSpec&, clang::AccessSpecifier, clang::RecordDecl*)\"},\n    {\"_ZN5clang4Sema30BuildMicrosoftCAnonymousStructEPNS_5ScopeERNS_8DeclSpecEPNS_10RecordDeclE\", \"clang::Sema::BuildMicrosoftCAnonymousStruct(clang::Scope*, clang::DeclSpec&, clang::RecordDecl*)\"},\n    {\"_ZN5clang4Sema12ActOnVlaStmtERKNS_8DeclSpecE\", \"clang::Sema::ActOnVlaStmt(clang::DeclSpec const&)\"},\n    {\"_ZN5clang4Sema20CheckNontrivialFieldEPNS_9FieldDeclE\", \"clang::Sema::CheckNontrivialField(clang::FieldDecl*)\"},\n    {\"_Z35InjectAnonymousStructOrUnionMembersRN5clang4SemaEPNS_5ScopeEPNS_11DeclContextEPNS_10RecordDeclENS_15AccessSpecifierERN4llvm11SmallVectorIPNS_9NamedDeclELj2EEEb\", \"InjectAnonymousStructOrUnionMembers(clang::Sema&, clang::Scope*, clang::DeclContext*, clang::RecordDecl*, clang::AccessSpecifier, llvm::SmallVector<clang::NamedDecl*, 2u>&, bool)\"},\n    {\"_ZN5clang4Sema20GetNameForDeclaratorERNS_10DeclaratorE\", \"clang::Sema::GetNameForDeclarator(clang::Declarator&)\"},\n    {\"_ZN5clang4Sema24GetNameFromUnqualifiedIdERKNS_13UnqualifiedIdE\", \"clang::Sema::GetNameFromUnqualifiedId(clang::UnqualifiedId const&)\"},\n    {\"_ZN5clang4Sema15ActOnDeclaratorEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnDeclarator(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema16HandleDeclaratorEPNS_5ScopeERNS_10DeclaratorENS_11ASTMultiPtrIPNS_21TemplateParameterListEEEb\", \"clang::Sema::HandleDeclarator(clang::Scope*, clang::Declarator&, clang::ASTMultiPtr<clang::TemplateParameterList*>, bool)\"},\n    {\"_ZN5clang4Sema22ActOnTypedefDeclaratorEPNS_5ScopeERNS_10DeclaratorEPNS_11DeclContextENS_8QualTypeEPNS_14TypeSourceInfoERNS_12LookupResultERb\", \"clang::Sema::ActOnTypedefDeclarator(clang::Scope*, clang::Declarator&, clang::DeclContext*, clang::QualType, clang::TypeSourceInfo*, clang::LookupResult&, bool&)\"},\n    {\"_ZN5clang4Sema23ActOnFunctionDeclaratorEPNS_5ScopeERNS_10DeclaratorEPNS_11DeclContextENS_8QualTypeEPNS_14TypeSourceInfoERNS_12LookupResultENS_11ASTMultiPtrIPNS_21TemplateParameterListEEEbRb\", \"clang::Sema::ActOnFunctionDeclarator(clang::Scope*, clang::Declarator&, clang::DeclContext*, clang::QualType, clang::TypeSourceInfo*, clang::LookupResult&, clang::ASTMultiPtr<clang::TemplateParameterList*>, bool, bool&)\"},\n    {\"_ZN5clang4Sema23ActOnVariableDeclaratorEPNS_5ScopeERNS_10DeclaratorEPNS_11DeclContextENS_8QualTypeEPNS_14TypeSourceInfoERNS_12LookupResultENS_11ASTMultiPtrIPNS_21TemplateParameterListEEERb\", \"clang::Sema::ActOnVariableDeclarator(clang::Scope*, clang::Declarator&, clang::DeclContext*, clang::QualType, clang::TypeSourceInfo*, clang::LookupResult&, clang::ASTMultiPtr<clang::TemplateParameterList*>, bool&)\"},\n    {\"_ZN5clang4Sema32RegisterLocallyScopedExternCDeclEPNS_9NamedDeclERKNS_12LookupResultEPNS_5ScopeE\", \"clang::Sema::RegisterLocallyScopedExternCDecl(clang::NamedDecl*, clang::LookupResult const&, clang::Scope*)\"},\n    {\"_ZN5clang4Sema26DiagnoseFunctionSpecifiersERNS_10DeclaratorE\", \"clang::Sema::DiagnoseFunctionSpecifiers(clang::Declarator&)\"},\n    {\"_ZN5clang4Sema16ParseTypedefDeclEPNS_5ScopeERNS_10DeclaratorENS_8QualTypeEPNS_14TypeSourceInfoE\", \"clang::Sema::ParseTypedefDecl(clang::Scope*, clang::Declarator&, clang::QualType, clang::TypeSourceInfo*)\"},\n    {\"_Z35TryToFixInvalidVariablyModifiedTypeN5clang8QualTypeERNS_10ASTContextERbRN4llvm6APSIntE\", \"TryToFixInvalidVariablyModifiedType(clang::QualType, clang::ASTContext&, bool&, llvm::APSInt&)\"},\n    {\"_Z20FilterLookupForScopeRN5clang4SemaERNS_12LookupResultEPNS_11DeclContextEPNS_5ScopeEb\", \"FilterLookupForScope(clang::Sema&, clang::LookupResult&, clang::DeclContext*, clang::Scope*, bool)\"},\n    {\"_ZN5clang4Sema11CheckShadowEPNS_5ScopeEPNS_7VarDeclERKNS_12LookupResultE\", \"clang::Sema::CheckShadow(clang::Scope*, clang::VarDecl*, clang::LookupResult const&)\"},\n    {\"_ZN5clang4Sema24CheckVariableDeclarationEPNS_7VarDeclERNS_12LookupResultERb\", \"clang::Sema::CheckVariableDeclaration(clang::VarDecl*, clang::LookupResult&, bool&)\"},\n    {\"_ZN5clang4Sema11CheckShadowEPNS_5ScopeEPNS_7VarDeclE\", \"clang::Sema::CheckShadow(clang::Scope*, clang::VarDecl*)\"},\n    {\"_ZN5clang4Sema20AddOverriddenMethodsEPNS_13CXXRecordDeclEPNS_13CXXMethodDeclE\", \"clang::Sema::AddOverriddenMethods(clang::CXXRecordDecl*, clang::CXXMethodDecl*)\"},\n    {\"_Z20FindOverriddenMethodPKN5clang16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"FindOverriddenMethod(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang4Sema26BuildParmVarDeclForTypedefEPNS_11DeclContextENS_14SourceLocationENS_8QualTypeE\", \"clang::Sema::BuildParmVarDeclForTypedef(clang::DeclContext*, clang::SourceLocation, clang::QualType)\"},\n    {\"_ZN5clang4Sema24CheckFunctionDeclarationEPNS_5ScopeEPNS_12FunctionDeclERNS_12LookupResultEbRb\", \"clang::Sema::CheckFunctionDeclaration(clang::Scope*, clang::FunctionDecl*, clang::LookupResult&, bool, bool&)\"},\n    {\"_Z28DiagnoseInvalidRedeclarationRN5clang4SemaEPNS_12FunctionDeclE\", \"DiagnoseInvalidRedeclaration(clang::Sema&, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema9CheckMainEPNS_12FunctionDeclE\", \"clang::Sema::CheckMain(clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema27CheckForConstantInitializerEPNS_4ExprENS_8QualTypeE\", \"clang::Sema::CheckForConstantInitializer(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang4Sema20AddInitializerToDeclEPNS_4DeclEPNS_4ExprE\", \"clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema20AddInitializerToDeclEPNS_4DeclEPNS_4ExprEb\", \"clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool)\"},\n    {\"_ZN5clang4Sema32CheckCompleteVariableDeclarationEPNS_7VarDeclE\", \"clang::Sema::CheckCompleteVariableDeclaration(clang::VarDecl*)\"},\n    {\"_ZN5clang4Sema21ActOnInitializerErrorEPNS_4DeclE\", \"clang::Sema::ActOnInitializerError(clang::Decl*)\"},\n    {\"_ZN5clang4Sema22ActOnUninitializedDeclEPNS_4DeclEb\", \"clang::Sema::ActOnUninitializedDecl(clang::Decl*, bool)\"},\n    {\"_ZN5clang4Sema23FinalizeDeclaratorGroupEPNS_5ScopeERKNS_8DeclSpecEPPNS_4DeclEj\", \"clang::Sema::FinalizeDeclaratorGroup(clang::Scope*, clang::DeclSpec const&, clang::Decl**, unsigned int)\"},\n    {\"_ZN5clang4Sema20ActOnParamDeclaratorEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnParamDeclarator(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema14CheckParameterEPNS_11DeclContextEPNS_14TypeSourceInfoENS_8QualTypeEPNS_14IdentifierInfoENS_14SourceLocationENS_12StorageClassES9_\", \"clang::Sema::CheckParameter(clang::DeclContext*, clang::TypeSourceInfo*, clang::QualType, clang::IdentifierInfo*, clang::SourceLocation, clang::StorageClass, clang::StorageClass)\"},\n    {\"_ZN5clang4Sema24DiagnoseUnusedParametersEPKPNS_11ParmVarDeclES4_\", \"clang::Sema::DiagnoseUnusedParameters(clang::ParmVarDecl* const*, clang::ParmVarDecl* const*)\"},\n    {\"_ZN5clang4Sema38DiagnoseSizeOfParametersAndReturnValueEPKPNS_11ParmVarDeclES4_NS_8QualTypeEPNS_9NamedDeclE\", \"clang::Sema::DiagnoseSizeOfParametersAndReturnValue(clang::ParmVarDecl* const*, clang::ParmVarDecl* const*, clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema31ActOnFinishKNRParamDeclarationsEPNS_5ScopeERNS_10DeclaratorENS_14SourceLocationE\", \"clang::Sema::ActOnFinishKNRParamDeclarations(clang::Scope*, clang::Declarator&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema23ActOnStartOfFunctionDefEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnStartOfFunctionDef(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema23ActOnStartOfFunctionDefEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnStartOfFunctionDef(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema23ActOnFinishFunctionBodyEPNS_4DeclEPNS_4StmtE\", \"clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema23ActOnFinishFunctionBodyEPNS_4DeclEPNS_4StmtEb\", \"clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool)\"},\n    {\"_ZN5clang4Sema24ImplicitlyDefineFunctionENS_14SourceLocationERNS_14IdentifierInfoEPNS_5ScopeE\", \"clang::Sema::ImplicitlyDefineFunction(clang::SourceLocation, clang::IdentifierInfo&, clang::Scope*)\"},\n    {\"_ZN5clang4Sema28isAcceptableTagRedeclarationEPKNS_7TagDeclENS_11TagTypeKindENS_14SourceLocationERKNS_14IdentifierInfoE\", \"clang::Sema::isAcceptableTagRedeclaration(clang::TagDecl const*, clang::TagTypeKind, clang::SourceLocation, clang::IdentifierInfo const&)\"},\n    {\"_ZN5clang4Sema8ActOnTagEPNS_5ScopeEjNS0_10TagUseKindENS_14SourceLocationERNS_12CXXScopeSpecEPNS_14IdentifierInfoES4_PNS_13AttributeListENS_15AccessSpecifierENS_11ASTMultiPtrIPNS_21TemplateParameterListEEERbSG_bbNS_12ActionResultINS_9OpaquePtrINS_8QualTypeEEELb0EEE\", \"clang::Sema::ActOnTag(clang::Scope*, unsigned int, clang::Sema::TagUseKind, clang::SourceLocation, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*, clang::AccessSpecifier, clang::ASTMultiPtr<clang::TemplateParameterList*>, bool&, bool&, bool, bool, clang::ActionResult<clang::OpaquePtr<clang::QualType>, false>)\"},\n    {\"_ZN5clang4Sema23ActOnTagStartDefinitionEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnTagStartDefinition(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema31ActOnStartCXXMemberDeclarationsEPNS_5ScopeEPNS_4DeclERNS_19ClassVirtSpecifiersENS_14SourceLocationE\", \"clang::Sema::ActOnStartCXXMemberDeclarations(clang::Scope*, clang::Decl*, clang::ClassVirtSpecifiers&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24ActOnTagFinishDefinitionEPNS_5ScopeEPNS_4DeclENS_14SourceLocationE\", \"clang::Sema::ActOnTagFinishDefinition(clang::Scope*, clang::Decl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema23ActOnTagDefinitionErrorEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnTagDefinitionError(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema14VerifyBitFieldENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPKNS_4ExprEPb\", \"clang::Sema::VerifyBitField(clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::Expr const*, bool*)\"},\n    {\"_ZN5clang4Sema10ActOnFieldEPNS_5ScopeEPNS_4DeclENS_14SourceLocationERNS_10DeclaratorEPNS_4ExprE\", \"clang::Sema::ActOnField(clang::Scope*, clang::Decl*, clang::SourceLocation, clang::Declarator&, clang::Expr*)\"},\n    {\"_ZN5clang4Sema11HandleFieldEPNS_5ScopeEPNS_10RecordDeclENS_14SourceLocationERNS_10DeclaratorEPNS_4ExprENS_15AccessSpecifierE\", \"clang::Sema::HandleField(clang::Scope*, clang::RecordDecl*, clang::SourceLocation, clang::Declarator&, clang::Expr*, clang::AccessSpecifier)\"},\n    {\"_ZN5clang4Sema14CheckFieldDeclENS_15DeclarationNameENS_8QualTypeEPNS_14TypeSourceInfoEPNS_10RecordDeclENS_14SourceLocationEbPNS_4ExprES7_NS_15AccessSpecifierEPNS_9NamedDeclEPNS_10DeclaratorE\", \"clang::Sema::CheckFieldDecl(clang::DeclarationName, clang::QualType, clang::TypeSourceInfo*, clang::RecordDecl*, clang::SourceLocation, bool, clang::Expr*, clang::SourceLocation, clang::AccessSpecifier, clang::NamedDecl*, clang::Declarator*)\"},\n    {\"_ZN5clang4Sema18DiagnoseNontrivialEPKNS_10RecordTypeENS0_16CXXSpecialMemberE\", \"clang::Sema::DiagnoseNontrivial(clang::RecordType const*, clang::Sema::CXXSpecialMember)\"},\n    {\"_ZN5clang4Sema9ActOnIvarEPNS_5ScopeENS_14SourceLocationEPNS_4DeclERNS_10DeclaratorEPNS_4ExprENS_3tok15ObjCKeywordKindE\", \"clang::Sema::ActOnIvar(clang::Scope*, clang::SourceLocation, clang::Decl*, clang::Declarator&, clang::Expr*, clang::tok::ObjCKeywordKind)\"},\n    {\"_ZN5clang4Sema17ActOnLastBitfieldENS_14SourceLocationEPNS_4DeclERN4llvm15SmallVectorImplIS3_EE\", \"clang::Sema::ActOnLastBitfield(clang::SourceLocation, clang::Decl*, llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang4Sema11ActOnFieldsEPNS_5ScopeENS_14SourceLocationEPNS_4DeclEPS5_jS3_S3_PNS_13AttributeListE\", \"clang::Sema::ActOnFields(clang::Scope*, clang::SourceLocation, clang::Decl*, clang::Decl**, unsigned int, clang::SourceLocation, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema17CheckEnumConstantEPNS_8EnumDeclEPNS_16EnumConstantDeclENS_14SourceLocationEPNS_14IdentifierInfoEPNS_4ExprE\", \"clang::Sema::CheckEnumConstant(clang::EnumDecl*, clang::EnumConstantDecl*, clang::SourceLocation, clang::IdentifierInfo*, clang::Expr*)\"},\n    {\"_Z27isRepresentableIntegerValueRN5clang10ASTContextERN4llvm6APSIntENS_8QualTypeE\", \"isRepresentableIntegerValue(clang::ASTContext&, llvm::APSInt&, clang::QualType)\"},\n    {\"_ZN5clang4Sema17ActOnEnumConstantEPNS_5ScopeEPNS_4DeclES4_NS_14SourceLocationEPNS_14IdentifierInfoEPNS_13AttributeListES5_PNS_4ExprE\", \"clang::Sema::ActOnEnumConstant(clang::Scope*, clang::Decl*, clang::Decl*, clang::SourceLocation, clang::IdentifierInfo*, clang::AttributeList*, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema13ActOnEnumBodyENS_14SourceLocationES1_S1_PNS_4DeclEPS3_jPNS_5ScopeEPNS_13AttributeListE\", \"clang::Sema::ActOnEnumBody(clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::Decl*, clang::Decl**, unsigned int, clang::Scope*, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema21ActOnFileScopeAsmDeclENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnFileScopeAsmDecl(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema17ActOnPragmaWeakIDEPNS_14IdentifierInfoENS_14SourceLocationES3_\", \"clang::Sema::ActOnPragmaWeakID(clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20ActOnPragmaWeakAliasEPNS_14IdentifierInfoES2_NS_14SourceLocationES3_S3_\", \"clang::Sema::ActOnPragmaWeakAlias(clang::IdentifierInfo*, clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang12RedeclarableINS_11TypedefDeclEE22setPreviousDeclarationEPS1_\", \"clang::Redeclarable<clang::TypedefDecl>::setPreviousDeclaration(clang::TypedefDecl*)\"},\n    {\"_ZN5clang12RedeclarableINS_7VarDeclEE22setPreviousDeclarationEPS1_\", \"clang::Redeclarable<clang::VarDecl>::setPreviousDeclaration(clang::VarDecl*)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_13DLLImportAttrEEEPT_v\", \"clang::DLLImportAttr* clang::Decl::getAttr<clang::DLLImportAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_13DLLExportAttrEEEPT_v\", \"clang::DLLExportAttr* clang::Decl::getAttr<clang::DLLExportAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_10FormatAttrEEEPT_v\", \"clang::FormatAttr* clang::Decl::getAttr<clang::FormatAttr>() const\"},\n    {\"_ZNK5clang13CXXRecordDecl25hasTrivialCopyConstructorEv\", \"clang::CXXRecordDecl::hasTrivialCopyConstructor() const\"},\n    {\"_ZNK5clang13CXXRecordDecl21hasTrivialConstructorEv\", \"clang::CXXRecordDecl::hasTrivialConstructor() const\"},\n    {\"_ZNK5clang13CXXRecordDecl24hasTrivialCopyAssignmentEv\", \"clang::CXXRecordDecl::hasTrivialCopyAssignment() const\"},\n    {\"_ZNK5clang13CXXRecordDecl20hasTrivialDestructorEv\", \"clang::CXXRecordDecl::hasTrivialDestructor() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_10PackedAttrEEEPT_v\", \"clang::PackedAttr* clang::Decl::getAttr<clang::PackedAttr>() const\"},\n    {\"_ZNK4llvm6APSInt10extOrTruncEj\", \"llvm::APSInt::extOrTrunc(unsigned int) const\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang9FieldDeclEE6resizeEj\", \"llvm::SmallVectorImpl<clang::FieldDecl*>::resize(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang15DeclaratorChunkELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::DeclaratorChunk, false>::grow(unsigned long)\"},\n    {\"_ZN5clang12CXXBasePathsD2Ev\", \"clang::CXXBasePaths::~CXXBasePaths()\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_S2_IbjEESt10_Select1stIS5_ENS0_16QualTypeOrderingESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, std::pair<bool, unsigned int> >, std::_Select1st<std::pair<clang::QualType const, std::pair<bool, unsigned int> > >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, std::pair<bool, unsigned int> > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::QualType const, std::pair<bool, unsigned int> > >*)\"},\n    {\"_ZN5clang12LookupResult22resolveKindAfterFilterEv\", \"clang::LookupResult::resolveKindAfterFilter()\"},\n    {\"_ZN5clang10Declarator5clearEv\", \"clang::Declarator::clear()\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang9NamedDeclEE6resizeEj\", \"llvm::SmallVectorImpl<clang::NamedDecl*>::resize(unsigned int)\"},\n    {\"_ZN5clang4Sema17CheckNoReturnAttrERKNS_13AttributeListE\", \"clang::Sema::CheckNoReturnAttr(clang::AttributeList const&)\"},\n    {\"_ZN5clang4Sema14AddAlignedAttrENS_14SourceLocationEPNS_4DeclEPNS_4ExprE\", \"clang::Sema::AddAlignedAttr(clang::SourceLocation, clang::Decl*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema14AddAlignedAttrENS_14SourceLocationEPNS_4DeclEPNS_14TypeSourceInfoE\", \"clang::Sema::AddAlignedAttr(clang::SourceLocation, clang::Decl*, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema20CheckCallingConvAttrERKNS_13AttributeListERNS_11CallingConvE\", \"clang::Sema::CheckCallingConvAttr(clang::AttributeList const&, clang::CallingConv&)\"},\n    {\"_ZN5clang4Sema16CheckRegparmAttrERKNS_13AttributeListERj\", \"clang::Sema::CheckRegparmAttr(clang::AttributeList const&, unsigned int&)\"},\n    {\"_ZN5clang4Sema24ProcessDeclAttributeListEPNS_5ScopeEPNS_4DeclEPKNS_13AttributeListEbb\", \"clang::Sema::ProcessDeclAttributeList(clang::Scope*, clang::Decl*, clang::AttributeList const*, bool, bool)\"},\n    {\"_ZN5clang4Sema19DeclClonePragmaWeakEPNS_9NamedDeclEPNS_14IdentifierInfoE\", \"clang::Sema::DeclClonePragmaWeak(clang::NamedDecl*, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema19DeclApplyPragmaWeakEPNS_5ScopeEPNS_9NamedDeclERNS0_8WeakInfoE\", \"clang::Sema::DeclApplyPragmaWeak(clang::Scope*, clang::NamedDecl*, clang::Sema::WeakInfo&)\"},\n    {\"_ZN5clang4Sema21ProcessDeclAttributesEPNS_5ScopeEPNS_4DeclERKNS_10DeclaratorEbb\", \"clang::Sema::ProcessDeclAttributes(clang::Scope*, clang::Decl*, clang::Declarator const&, bool, bool)\"},\n    {\"_ZN5clang4Sema22PushParsingDeclarationEv\", \"clang::Sema::PushParsingDeclaration()\"},\n    {\"_ZN5clang4Sema21PopParsingDeclarationEmPNS_4DeclE\", \"clang::Sema::PopParsingDeclaration(unsigned long, clang::Decl*)\"},\n    {\"_ZN5clang4Sema29HandleDelayedDeprecationCheckERNS_4sema17DelayedDiagnosticEPNS_4DeclE\", \"clang::Sema::HandleDelayedDeprecationCheck(clang::sema::DelayedDiagnostic&, clang::Decl*)\"},\n    {\"_ZN5clang4Sema22EmitDeprecationWarningEPNS_9NamedDeclEN4llvm9StringRefENS_14SourceLocationEb\", \"clang::Sema::EmitDeprecationWarning(clang::NamedDecl*, llvm::StringRef, clang::SourceLocation, bool)\"},\n    {\"_Z26ProcessInheritableDeclAttrPN5clang5ScopeEPNS_4DeclERKNS_13AttributeListERNS_4SemaE\", \"ProcessInheritableDeclAttr(clang::Scope*, clang::Decl*, clang::AttributeList const&, clang::Sema&)\"},\n    {\"_Z15getFunctionTypePKN5clang4DeclEb\", \"getFunctionType(clang::Decl const*, bool)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIjEEiPKvS2_\", \"int llvm::array_pod_sort_comparator<unsigned int>(void const*, void const*)\"},\n    {\"_Z14isNSStringTypeN5clang8QualTypeERNS_10ASTContextE\", \"isNSStringType(clang::QualType, clang::ASTContext&)\"},\n    {\"_Z14isCFStringTypeN5clang8QualTypeERNS_10ASTContextE\", \"isCFStringType(clang::QualType, clang::ASTContext&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4sema17DelayedDiagnosticELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::sema::DelayedDiagnostic, false>::grow(unsigned long)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_13VecReturnAttrEEEPT_v\", \"clang::VecReturnAttr* clang::Decl::getAttr<clang::VecReturnAttr>() const\"},\n    {\"_ZN5clang4Sema23SetParamDefaultArgumentEPNS_11ParmVarDeclEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::SetParamDefaultArgument(clang::ParmVarDecl*, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema25ActOnParamDefaultArgumentEPNS_4DeclENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnParamDefaultArgument(clang::Decl*, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_127CheckDefaultArgumentVisitorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::CheckDefaultArgumentVisitor, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang4Sema33ActOnParamUnparsedDefaultArgumentEPNS_4DeclENS_14SourceLocationES3_\", \"clang::Sema::ActOnParamUnparsedDefaultArgument(clang::Decl*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema30ActOnParamDefaultArgumentErrorEPNS_4DeclE\", \"clang::Sema::ActOnParamDefaultArgumentError(clang::Decl*)\"},\n    {\"_ZN5clang4Sema29CheckExtraCXXDefaultArgumentsERNS_10DeclaratorE\", \"clang::Sema::CheckExtraCXXDefaultArguments(clang::Declarator&)\"},\n    {\"_ZN5clang4Sema20MergeCXXFunctionDeclEPNS_12FunctionDeclES2_\", \"clang::Sema::MergeCXXFunctionDecl(clang::FunctionDecl*, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema24CheckCXXDefaultArgumentsEPNS_12FunctionDeclE\", \"clang::Sema::CheckCXXDefaultArguments(clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema18isCurrentClassNameERKNS_14IdentifierInfoEPNS_5ScopeEPKNS_12CXXScopeSpecE\", \"clang::Sema::isCurrentClassName(clang::IdentifierInfo const&, clang::Scope*, clang::CXXScopeSpec const*)\"},\n    {\"_ZN5clang4Sema18CheckBaseSpecifierEPNS_13CXXRecordDeclENS_11SourceRangeEbNS_15AccessSpecifierEPNS_14TypeSourceInfoENS_14SourceLocationE\", \"clang::Sema::CheckBaseSpecifier(clang::CXXRecordDecl*, clang::SourceRange, bool, clang::AccessSpecifier, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18ActOnBaseSpecifierEPNS_4DeclENS_11SourceRangeEbNS_15AccessSpecifierENS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationES8_\", \"clang::Sema::ActOnBaseSpecifier(clang::Decl*, clang::SourceRange, bool, clang::AccessSpecifier, clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20AttachBaseSpecifiersEPNS_13CXXRecordDeclEPPNS_16CXXBaseSpecifierEj\", \"clang::Sema::AttachBaseSpecifiers(clang::CXXRecordDecl*, clang::CXXBaseSpecifier**, unsigned int)\"},\n    {\"_ZN5clang4Sema19ActOnBaseSpecifiersEPNS_4DeclEPPNS_16CXXBaseSpecifierEj\", \"clang::Sema::ActOnBaseSpecifiers(clang::Decl*, clang::CXXBaseSpecifier**, unsigned int)\"},\n    {\"_ZN5clang4Sema13IsDerivedFromENS_8QualTypeES1_\", \"clang::Sema::IsDerivedFrom(clang::QualType, clang::QualType)\"},\n    {\"_Z15GetClassForTypeN5clang8QualTypeE\", \"GetClassForType(clang::QualType)\"},\n    {\"_ZN5clang4Sema13IsDerivedFromENS_8QualTypeES1_RNS_12CXXBasePathsE\", \"clang::Sema::IsDerivedFrom(clang::QualType, clang::QualType, clang::CXXBasePaths&)\"},\n    {\"_ZN5clang4Sema18BuildBasePathArrayERKNS_12CXXBasePathsERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"clang::Sema::BuildBasePathArray(clang::CXXBasePaths const&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&)\"},\n    {\"_ZN5clang4Sema27BasePathInvolvesVirtualBaseERKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"clang::Sema::BasePathInvolvesVirtualBase(llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const&)\"},\n    {\"_ZN5clang4Sema28CheckDerivedToBaseConversionENS_8QualTypeES1_jjNS_14SourceLocationENS_11SourceRangeENS_15DeclarationNameEPN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"clang::Sema::CheckDerivedToBaseConversion(clang::QualType, clang::QualType, unsigned int, unsigned int, clang::SourceLocation, clang::SourceRange, clang::DeclarationName, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>*)\"},\n    {\"_ZN5clang4Sema30getAmbiguousPathsDisplayStringERNS_12CXXBasePathsE\", \"clang::Sema::getAmbiguousPathsDisplayString(clang::CXXBasePaths&)\"},\n    {\"_ZN5clang4Sema28CheckDerivedToBaseConversionENS_8QualTypeES1_NS_14SourceLocationENS_11SourceRangeEPN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEb\", \"clang::Sema::CheckDerivedToBaseConversion(clang::QualType, clang::QualType, clang::SourceLocation, clang::SourceRange, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>*, bool)\"},\n    {\"_ZN5clang4Sema20ActOnAccessSpecifierENS_15AccessSpecifierENS_14SourceLocationES2_\", \"clang::Sema::ActOnAccessSpecifier(clang::AccessSpecifier, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20CheckOverrideControlEPKNS_4DeclE\", \"clang::Sema::CheckOverrideControl(clang::Decl const*)\"},\n    {\"_ZN5clang4Sema38CheckIfOverriddenFunctionIsMarkedFinalEPKNS_13CXXMethodDeclES3_\", \"clang::Sema::CheckIfOverriddenFunctionIsMarkedFinal(clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang4Sema24ActOnCXXMemberDeclaratorEPNS_5ScopeENS_15AccessSpecifierERNS_10DeclaratorENS_11ASTMultiPtrIPNS_21TemplateParameterListEEEPNS_4ExprERKNS_14VirtSpecifiersESB_bb\", \"clang::Sema::ActOnCXXMemberDeclarator(clang::Scope*, clang::AccessSpecifier, clang::Declarator&, clang::ASTMultiPtr<clang::TemplateParameterList*>, clang::Expr*, clang::VirtSpecifiers const&, clang::Expr*, bool, bool)\"},\n    {\"_ZN5clang4Sema14SetDeclDeletedEPNS_4DeclENS_14SourceLocationE\", \"clang::Sema::SetDeclDeleted(clang::Decl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19ActOnMemInitializerEPNS_4DeclEPNS_5ScopeERNS_12CXXScopeSpecEPNS_14IdentifierInfoENS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationESC_PPNS_4ExprEjSC_SC_\", \"clang::Sema::ActOnMemInitializer(clang::Decl*, clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema22BuildMemberInitializerEPNS_9ValueDeclEPPNS_4ExprEjNS_14SourceLocationES6_S6_\", \"clang::Sema::BuildMemberInitializer(clang::ValueDecl*, clang::Expr**, unsigned int, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_Z19FindBaseInitializerRN5clang4SemaEPNS_13CXXRecordDeclENS_8QualTypeERPKNS_16CXXBaseSpecifierES8_\", \"FindBaseInitializer(clang::Sema&, clang::CXXRecordDecl*, clang::QualType, clang::CXXBaseSpecifier const*&, clang::CXXBaseSpecifier const*&)\"},\n    {\"_ZN5clang4Sema20BuildBaseInitializerENS_8QualTypeEPNS_14TypeSourceInfoEPPNS_4ExprEjNS_14SourceLocationES7_PNS_13CXXRecordDeclES7_\", \"clang::Sema::BuildBaseInitializer(clang::QualType, clang::TypeSourceInfo*, clang::Expr**, unsigned int, clang::SourceLocation, clang::SourceLocation, clang::CXXRecordDecl*, clang::SourceLocation)\"},\n    {\"_Z35InitExprContainsUninitializedFieldsPKN5clang4StmtEPKNS_9ValueDeclEPNS_14SourceLocationE\", \"InitExprContainsUninitializedFields(clang::Stmt const*, clang::ValueDecl const*, clang::SourceLocation*)\"},\n    {\"_ZN5clang4Sema26BuildDelegatingInitializerEPNS_14TypeSourceInfoEPPNS_4ExprEjNS_14SourceLocationES6_PNS_13CXXRecordDeclES6_\", \"clang::Sema::BuildDelegatingInitializer(clang::TypeSourceInfo*, clang::Expr**, unsigned int, clang::SourceLocation, clang::SourceLocation, clang::CXXRecordDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19SetCtorInitializersEPNS_18CXXConstructorDeclEPPNS_18CXXCtorInitializerEjb\", \"clang::Sema::SetCtorInitializers(clang::CXXConstructorDecl*, clang::CXXCtorInitializer**, unsigned int, bool)\"},\n    {\"_Z28BuildImplicitBaseInitializerRN5clang4SemaEPNS_18CXXConstructorDeclE23ImplicitInitializerKindPNS_16CXXBaseSpecifierEbRPNS_18CXXCtorInitializerE\", \"BuildImplicitBaseInitializer(clang::Sema&, clang::CXXConstructorDecl*, ImplicitInitializerKind, clang::CXXBaseSpecifier*, bool, clang::CXXCtorInitializer*&)\"},\n    {\"_Z23CollectFieldInitializerRN12_GLOBAL__N_116BaseAndFieldInfoEPN5clang9FieldDeclES4_\", \"CollectFieldInitializer((anonymous namespace)::BaseAndFieldInfo&, clang::FieldDecl*, clang::FieldDecl*)\"},\n    {\"_ZN5clang4Sema38MarkBaseAndMemberDestructorsReferencedENS_14SourceLocationEPNS_13CXXRecordDeclE\", \"clang::Sema::MarkBaseAndMemberDestructorsReferenced(clang::SourceLocation, clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema20ActOnMemInitializersEPNS_4DeclENS_14SourceLocationEPPNS_18CXXCtorInitializerEjb\", \"clang::Sema::ActOnMemInitializers(clang::Decl*, clang::SourceLocation, clang::CXXCtorInitializer**, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_118CheckRedundantInitERN5clang4SemaEPNS0_18CXXCtorInitializerERS4_\", \"(anonymous namespace)::CheckRedundantInit(clang::Sema&, clang::CXXCtorInitializer*, clang::CXXCtorInitializer*&)\"},\n    {\"_ZN5clang4Sema28ActOnDefaultCtorInitializersEPNS_4DeclE\", \"clang::Sema::ActOnDefaultCtorInitializers(clang::Decl*)\"},\n    {\"_ZN5clang4Sema22RequireNonAbstractTypeENS_14SourceLocationENS_8QualTypeEjNS0_17AbstractDiagSelIDE\", \"clang::Sema::RequireNonAbstractType(clang::SourceLocation, clang::QualType, unsigned int, clang::Sema::AbstractDiagSelID)\"},\n    {\"_ZN5clang4Sema22RequireNonAbstractTypeENS_14SourceLocationENS_8QualTypeERKNS_17PartialDiagnosticE\", \"clang::Sema::RequireNonAbstractType(clang::SourceLocation, clang::QualType, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema20DiagnoseAbstractTypeEPKNS_13CXXRecordDeclE\", \"clang::Sema::DiagnoseAbstractType(clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang4Sema22CheckCompletedCXXClassEPNS_13CXXRecordDeclE\", \"clang::Sema::CheckCompletedCXXClass(clang::CXXRecordDecl*)\"},\n    {\"_Z23CheckAbstractClassUsageRN12_GLOBAL__N_117AbstractUsageInfoEPN5clang13CXXRecordDeclE\", \"CheckAbstractClassUsage((anonymous namespace)::AbstractUsageInfo&, clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema28DiagnoseHiddenVirtualMethodsEPNS_13CXXRecordDeclEPNS_13CXXMethodDeclE\", \"clang::Sema::DiagnoseHiddenVirtualMethods(clang::CXXRecordDecl*, clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang4Sema28DeclareInheritedConstructorsEPNS_13CXXRecordDeclE\", \"clang::Sema::DeclareInheritedConstructors(clang::CXXRecordDecl*)\"},\n    {\"_Z23FindHiddenVirtualMethodPKN5clang16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"FindHiddenVirtualMethod(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang4Sema33ActOnFinishCXXMemberSpecificationEPNS_5ScopeENS_14SourceLocationEPNS_4DeclES3_S3_PNS_13AttributeListE\", \"clang::Sema::ActOnFinishCXXMemberSpecification(clang::Scope*, clang::SourceLocation, clang::Decl*, clang::SourceLocation, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema35AddImplicitlyDeclaredMembersToClassEPNS_13CXXRecordDeclE\", \"clang::Sema::AddImplicitlyDeclaredMembersToClass(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema29DeclareImplicitCopyAssignmentEPNS_13CXXRecordDeclE\", \"clang::Sema::DeclareImplicitCopyAssignment(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema25DeclareImplicitDestructorEPNS_13CXXRecordDeclE\", \"clang::Sema::DeclareImplicitDestructor(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema25ActOnReenterTemplateScopeEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnReenterTemplateScope(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema35ActOnStartDelayedMemberDeclarationsEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnStartDelayedMemberDeclarations(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema36ActOnFinishDelayedMemberDeclarationsEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnFinishDelayedMemberDeclarations(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema37ActOnStartDelayedCXXMethodDeclarationEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnStartDelayedCXXMethodDeclaration(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema30ActOnDelayedCXXMethodParameterEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnDelayedCXXMethodParameter(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema38ActOnFinishDelayedCXXMethodDeclarationEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnFinishDelayedCXXMethodDeclaration(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema16CheckConstructorEPNS_18CXXConstructorDeclE\", \"clang::Sema::CheckConstructor(clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang4Sema26CheckConstructorDeclaratorERNS_10DeclaratorENS_8QualTypeERNS_12StorageClassE\", \"clang::Sema::CheckConstructorDeclarator(clang::Declarator&, clang::QualType, clang::StorageClass&)\"},\n    {\"_ZN5clang4Sema15CheckDestructorEPNS_17CXXDestructorDeclE\", \"clang::Sema::CheckDestructor(clang::CXXDestructorDecl*)\"},\n    {\"_ZN5clang4Sema25CheckDestructorDeclaratorERNS_10DeclaratorENS_8QualTypeERNS_12StorageClassE\", \"clang::Sema::CheckDestructorDeclarator(clang::Declarator&, clang::QualType, clang::StorageClass&)\"},\n    {\"_ZN5clang4Sema25CheckConversionDeclaratorERNS_10DeclaratorERNS_8QualTypeERNS_12StorageClassE\", \"clang::Sema::CheckConversionDeclarator(clang::Declarator&, clang::QualType&, clang::StorageClass&)\"},\n    {\"_ZN5clang4Sema25ActOnConversionDeclaratorEPNS_17CXXConversionDeclE\", \"clang::Sema::ActOnConversionDeclarator(clang::CXXConversionDecl*)\"},\n    {\"_ZN5clang4Sema22ActOnStartNamespaceDefEPNS_5ScopeENS_14SourceLocationES3_PNS_14IdentifierInfoES3_PNS_13AttributeListE\", \"clang::Sema::ActOnStartNamespaceDef(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZNK5clang4Sema15getStdNamespaceEv\", \"clang::Sema::getStdNamespace() const\"},\n    {\"_ZN5clang4Sema23ActOnFinishNamespaceDefEPNS_4DeclENS_14SourceLocationE\", \"clang::Sema::ActOnFinishNamespaceDef(clang::Decl*, clang::SourceLocation)\"},\n    {\"_ZNK5clang4Sema14getStdBadAllocEv\", \"clang::Sema::getStdBadAlloc() const\"},\n    {\"_ZN5clang4Sema23getOrCreateStdNamespaceEv\", \"clang::Sema::getOrCreateStdNamespace()\"},\n    {\"_ZN5clang4Sema19ActOnUsingDirectiveEPNS_5ScopeENS_14SourceLocationES3_RNS_12CXXScopeSpecES3_PNS_14IdentifierInfoEPNS_13AttributeListE\", \"clang::Sema::ActOnUsingDirective(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::CXXScopeSpec&, clang::SourceLocation, clang::IdentifierInfo*, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema18PushUsingDirectiveEPNS_5ScopeEPNS_18UsingDirectiveDeclE\", \"clang::Sema::PushUsingDirective(clang::Scope*, clang::UsingDirectiveDecl*)\"},\n    {\"_ZN5clang4Sema21ActOnUsingDeclarationEPNS_5ScopeENS_15AccessSpecifierEbNS_14SourceLocationERNS_12CXXScopeSpecERNS_13UnqualifiedIdEPNS_13AttributeListEbS4_\", \"clang::Sema::ActOnUsingDeclaration(clang::Scope*, clang::AccessSpecifier, bool, clang::SourceLocation, clang::CXXScopeSpec&, clang::UnqualifiedId&, clang::AttributeList*, bool, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema21BuildUsingDeclarationEPNS_5ScopeENS_15AccessSpecifierENS_14SourceLocationERNS_12CXXScopeSpecERKNS_19DeclarationNameInfoEPNS_13AttributeListEbbS4_\", \"clang::Sema::BuildUsingDeclaration(clang::Scope*, clang::AccessSpecifier, clang::SourceLocation, clang::CXXScopeSpec&, clang::DeclarationNameInfo const&, clang::AttributeList*, bool, bool, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20CheckUsingShadowDeclEPNS_9UsingDeclEPNS_9NamedDeclERKNS_12LookupResultE\", \"clang::Sema::CheckUsingShadowDecl(clang::UsingDecl*, clang::NamedDecl*, clang::LookupResult const&)\"},\n    {\"_ZN5clang4Sema20BuildUsingShadowDeclEPNS_5ScopeEPNS_9UsingDeclEPNS_9NamedDeclE\", \"clang::Sema::BuildUsingShadowDecl(clang::Scope*, clang::UsingDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema19HideUsingShadowDeclEPNS_5ScopeEPNS_15UsingShadowDeclE\", \"clang::Sema::HideUsingShadowDecl(clang::Scope*, clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang4Sema27CheckUsingDeclRedeclarationENS_14SourceLocationEbRKNS_12CXXScopeSpecES1_RKNS_12LookupResultE\", \"clang::Sema::CheckUsingDeclRedeclaration(clang::SourceLocation, bool, clang::CXXScopeSpec const&, clang::SourceLocation, clang::LookupResult const&)\"},\n    {\"_ZN5clang4Sema23CheckUsingDeclQualifierENS_14SourceLocationERKNS_12CXXScopeSpecES1_\", \"clang::Sema::CheckUsingDeclQualifier(clang::SourceLocation, clang::CXXScopeSpec const&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema34CheckInheritedConstructorUsingDeclEPNS_9UsingDeclE\", \"clang::Sema::CheckInheritedConstructorUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang4Sema22ActOnNamespaceAliasDefEPNS_5ScopeENS_14SourceLocationES3_PNS_14IdentifierInfoERNS_12CXXScopeSpecES3_S5_\", \"clang::Sema::ActOnNamespaceAliasDef(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*, clang::CXXScopeSpec&, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema33DeclareImplicitDefaultConstructorEPNS_13CXXRecordDeclE\", \"clang::Sema::DeclareImplicitDefaultConstructor(clang::CXXRecordDecl*)\"},\n    {\"_ZN12_GLOBAL__N_130ImplicitExceptionSpecification10CalledDeclEPN5clang13CXXMethodDeclE\", \"(anonymous namespace)::ImplicitExceptionSpecification::CalledDecl(clang::CXXMethodDecl*)\"},\n    {\"_Z27getDefaultConstructorUnsafeRN5clang4SemaEPNS_13CXXRecordDeclE\", \"getDefaultConstructorUnsafe(clang::Sema&, clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema32DefineImplicitDefaultConstructorENS_14SourceLocationEPNS_18CXXConstructorDeclE\", \"clang::Sema::DefineImplicitDefaultConstructor(clang::SourceLocation, clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang4Sema14MarkVTableUsedENS_14SourceLocationEPNS_13CXXRecordDeclEb\", \"clang::Sema::MarkVTableUsed(clang::SourceLocation, clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN5clang4Sema24DefineImplicitDestructorENS_14SourceLocationEPNS_17CXXDestructorDeclE\", \"clang::Sema::DefineImplicitDestructor(clang::SourceLocation, clang::CXXDestructorDecl*)\"},\n    {\"_Z22hasConstCopyAssignmentRN5clang4SemaEPKNS_13CXXRecordDeclE\", \"hasConstCopyAssignment(clang::Sema&, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang4Sema28DefineImplicitCopyAssignmentENS_14SourceLocationEPNS_13CXXMethodDeclE\", \"clang::Sema::DefineImplicitCopyAssignment(clang::SourceLocation, clang::CXXMethodDecl*)\"},\n    {\"_Z21BuildSingleCopyAssignRN5clang4SemaENS_14SourceLocationENS_8QualTypeEPNS_4ExprES5_bj\", \"BuildSingleCopyAssign(clang::Sema&, clang::SourceLocation, clang::QualType, clang::Expr*, clang::Expr*, bool, unsigned int)\"},\n    {\"_ZN5clang4Sema30DeclareImplicitCopyConstructorEPNS_13CXXRecordDeclE\", \"clang::Sema::DeclareImplicitCopyConstructor(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema29DefineImplicitCopyConstructorENS_14SourceLocationEPNS_18CXXConstructorDeclEj\", \"clang::Sema::DefineImplicitCopyConstructor(clang::SourceLocation, clang::CXXConstructorDecl*, unsigned int)\"},\n    {\"_ZN5clang4Sema21BuildCXXConstructExprENS_14SourceLocationENS_8QualTypeEPNS_18CXXConstructorDeclENS_11ASTMultiPtrIPNS_4ExprEEEbjNS_11SourceRangeE\", \"clang::Sema::BuildCXXConstructExpr(clang::SourceLocation, clang::QualType, clang::CXXConstructorDecl*, clang::ASTMultiPtr<clang::Expr*>, bool, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21BuildCXXConstructExprENS_14SourceLocationENS_8QualTypeEPNS_18CXXConstructorDeclEbNS_11ASTMultiPtrIPNS_4ExprEEEbjNS_11SourceRangeE\", \"clang::Sema::BuildCXXConstructExpr(clang::SourceLocation, clang::QualType, clang::CXXConstructorDecl*, bool, clang::ASTMultiPtr<clang::Expr*>, bool, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema28InitializeVarWithConstructorEPNS_7VarDeclEPNS_18CXXConstructorDeclENS_11ASTMultiPtrIPNS_4ExprEEE\", \"clang::Sema::InitializeVarWithConstructor(clang::VarDecl*, clang::CXXConstructorDecl*, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema25FinalizeVarWithDestructorEPNS_7VarDeclEPKNS_10RecordTypeE\", \"clang::Sema::FinalizeVarWithDestructor(clang::VarDecl*, clang::RecordType const*)\"},\n    {\"_ZN5clang4Sema29AddCXXDirectInitializerToDeclEPNS_4DeclENS_14SourceLocationENS_11ASTMultiPtrIPNS_4ExprEEES3_\", \"clang::Sema::AddCXXDirectInitializerToDecl(clang::Decl*, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema23CompleteConstructorCallEPNS_18CXXConstructorDeclENS_11ASTMultiPtrIPNS_4ExprEEENS_14SourceLocationERNS_15ASTOwningVectorIS5_Lj8EEE\", \"clang::Sema::CompleteConstructorCall(clang::CXXConstructorDecl*, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation, clang::ASTOwningVector<clang::Expr*, 8u>&)\"},\n    {\"_ZN5clang4Sema34CheckOverloadedOperatorDeclarationEPNS_12FunctionDeclE\", \"clang::Sema::CheckOverloadedOperatorDeclaration(clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema31CheckLiteralOperatorDeclarationEPNS_12FunctionDeclE\", \"clang::Sema::CheckLiteralOperatorDeclaration(clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema30ActOnStartLinkageSpecificationEPNS_5ScopeENS_14SourceLocationES3_N4llvm9StringRefES3_\", \"clang::Sema::ActOnStartLinkageSpecification(clang::Scope*, clang::SourceLocation, clang::SourceLocation, llvm::StringRef, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema31ActOnFinishLinkageSpecificationEPNS_5ScopeEPNS_4DeclENS_14SourceLocationE\", \"clang::Sema::ActOnFinishLinkageSpecification(clang::Scope*, clang::Decl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema25BuildExceptionDeclarationEPNS_5ScopeEPNS_14TypeSourceInfoEPNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::BuildExceptionDeclaration(clang::Scope*, clang::TypeSourceInfo*, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24ActOnExceptionDeclaratorEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnExceptionDeclarator(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema28ActOnStaticAssertDeclarationENS_14SourceLocationEPNS_4ExprES3_\", \"clang::Sema::ActOnStaticAssertDeclaration(clang::SourceLocation, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema19CheckFriendTypeDeclENS_14SourceLocationEPNS_14TypeSourceInfoE\", \"clang::Sema::CheckFriendTypeDecl(clang::SourceLocation, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema23ActOnTemplatedFriendTagEPNS_5ScopeENS_14SourceLocationEjS3_RNS_12CXXScopeSpecEPNS_14IdentifierInfoES3_PNS_13AttributeListENS_11ASTMultiPtrIPNS_21TemplateParameterListEEE\", \"clang::Sema::ActOnTemplatedFriendTag(clang::Scope*, clang::SourceLocation, unsigned int, clang::SourceLocation, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*, clang::ASTMultiPtr<clang::TemplateParameterList*>)\"},\n    {\"_ZN5clang4Sema19ActOnFriendTypeDeclEPNS_5ScopeERKNS_8DeclSpecENS_11ASTMultiPtrIPNS_21TemplateParameterListEEE\", \"clang::Sema::ActOnFriendTypeDecl(clang::Scope*, clang::DeclSpec const&, clang::ASTMultiPtr<clang::TemplateParameterList*>)\"},\n    {\"_ZN5clang4Sema23ActOnFriendFunctionDeclEPNS_5ScopeERNS_10DeclaratorEbNS_11ASTMultiPtrIPNS_21TemplateParameterListEEE\", \"clang::Sema::ActOnFriendFunctionDecl(clang::Scope*, clang::Declarator&, bool, clang::ASTMultiPtr<clang::TemplateParameterList*>)\"},\n    {\"_ZN5clang4Sema43DiagnoseReturnInConstructorExceptionHandlerEPNS_10CXXTryStmtE\", \"clang::Sema::DiagnoseReturnInConstructorExceptionHandler(clang::CXXTryStmt*)\"},\n    {\"_Z21SearchForReturnInStmtRN5clang4SemaEPNS_4StmtE\", \"SearchForReturnInStmt(clang::Sema&, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema33CheckOverridingFunctionReturnTypeEPKNS_13CXXMethodDeclES3_\", \"clang::Sema::CheckOverridingFunctionReturnType(clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang4Sema15CheckPureMethodEPNS_13CXXMethodDeclENS_11SourceRangeE\", \"clang::Sema::CheckPureMethod(clang::CXXMethodDecl*, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema28ActOnCXXEnterDeclInitializerEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnCXXEnterDeclInitializer(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema27ActOnCXXExitDeclInitializerEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnCXXExitDeclInitializer(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema28ActOnCXXConditionDeclarationEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnCXXConditionDeclaration(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema28MarkVirtualMembersReferencedENS_14SourceLocationEPKNS_13CXXRecordDeclE\", \"clang::Sema::MarkVirtualMembersReferenced(clang::SourceLocation, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang4Sema17DefineUsedVTablesEv\", \"clang::Sema::DefineUsedVTables()\"},\n    {\"_ZN5clang4Sema19SetIvarInitializersEPNS_22ObjCImplementationDeclE\", \"clang::Sema::SetIvarInitializers(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN12_GLOBAL__N_127CheckDefaultArgumentVisitor9VisitExprEPN5clang4ExprE\", \"(anonymous namespace)::CheckDefaultArgumentVisitor::VisitExpr(clang::Expr*)\"},\n    {\"_Z38CheckOperatorNewDeleteDeclarationScopeRN5clang4SemaEPKNS_12FunctionDeclE\", \"CheckOperatorNewDeleteDeclarationScope(clang::Sema&, clang::FunctionDecl const*)\"},\n    {\"_Z27CheckOperatorNewDeleteTypesRN5clang4SemaEPKNS_12FunctionDeclENS_7CanQualINS_4TypeEEES7_jj\", \"CheckOperatorNewDeleteTypes(clang::Sema&, clang::FunctionDecl const*, clang::CanQual<clang::Type>, clang::CanQual<clang::Type>, unsigned int, unsigned int)\"},\n    {\"_ZZN5clang4Sema23CheckUsingDeclQualifierENS_14SourceLocationERKNS_12CXXScopeSpecES1_EN8UserData14doesNotContainEPKNS_13CXXRecordDeclEPv\", \"clang::Sema::CheckUsingDeclQualifier(clang::SourceLocation, clang::CXXScopeSpec const&, clang::SourceLocation)::UserData::doesNotContain(clang::CXXRecordDecl const*, void*)\"},\n    {\"_ZZN5clang4Sema23CheckUsingDeclQualifierENS_14SourceLocationERKNS_12CXXScopeSpecES1_EN8UserData7collectEPKNS_13CXXRecordDeclEPv\", \"clang::Sema::CheckUsingDeclQualifier(clang::SourceLocation, clang::CXXScopeSpec const&, clang::SourceLocation)::UserData::collect(clang::CXXRecordDecl const*, void*)\"},\n    {\"_ZN12_GLOBAL__N_118CheckAbstractUsage5VisitEN5clang7TypeLocENS1_4Sema17AbstractDiagSelIDE\", \"(anonymous namespace)::CheckAbstractUsage::Visit(clang::TypeLoc, clang::Sema::AbstractDiagSelID)\"},\n    {\"_ZN12_GLOBAL__N_118CheckAbstractUsage5CheckEN5clang7TypeLocENS1_4Sema17AbstractDiagSelIDE\", \"(anonymous namespace)::CheckAbstractUsage::Check(clang::TypeLoc, clang::Sema::AbstractDiagSelID)\"},\n    {\"_ZN5clang14AccessSpecDecl6CreateERNS_10ASTContextENS_15AccessSpecifierEPNS_11DeclContextENS_14SourceLocationES6_\", \"clang::AccessSpecDecl::Create(clang::ASTContext&, clang::AccessSpecifier, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeESt4pairINS1_7CanQualIS2_EEPNS1_18CXXConstructorDeclEENS_12DenseMapInfoIS4_EENSB_ISA_EEE6insertERKS5_IS4_SA_E\", \"llvm::DenseMap<clang::Type const*, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*>, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> > >::insert(std::pair<clang::Type const*, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang13CXXRecordDeclEbNS_12DenseMapInfoIS3_EENS4_IbEEE6insertERKSt4pairIS3_bE\", \"llvm::DenseMap<clang::CXXRecordDecl*, bool, llvm::DenseMapInfo<clang::CXXRecordDecl*>, llvm::DenseMapInfo<bool> >::insert(std::pair<clang::CXXRecordDecl*, bool> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeESt4pairINS1_7CanQualIS2_EEPNS1_18CXXConstructorDeclEENS_12DenseMapInfoIS4_EENSB_ISA_EEE16InsertIntoBucketERKS4_RKSA_PS5_IS4_SA_E\", \"llvm::DenseMap<clang::Type const*, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*>, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> > >::InsertIntoBucket(clang::Type const* const&, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> const&, std::pair<clang::Type const*, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeESt4pairINS1_7CanQualIS2_EEPNS1_18CXXConstructorDeclEENS_12DenseMapInfoIS4_EENSB_ISA_EEE4growEj\", \"llvm::DenseMap<clang::Type const*, std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*>, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CXXConstructorDecl*> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPvPN5clang18CXXCtorInitializerENS_12DenseMapInfoIS1_EENS5_IS4_EEE16InsertIntoBucketERKS1_RKS4_PSt4pairIS1_S4_E\", \"llvm::DenseMap<void*, clang::CXXCtorInitializer*, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<clang::CXXCtorInitializer*> >::InsertIntoBucket(void* const&, clang::CXXCtorInitializer* const&, std::pair<void*, clang::CXXCtorInitializer*>*)\"},\n    {\"_ZN4llvm8DenseMapIPvPN5clang18CXXCtorInitializerENS_12DenseMapInfoIS1_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<void*, clang::CXXCtorInitializer*, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<clang::CXXCtorInitializer*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKvPN5clang18CXXCtorInitializerENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<void const*, clang::CXXCtorInitializer*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<clang::CXXCtorInitializer*> >::InsertIntoBucket(void const* const&, clang::CXXCtorInitializer* const&, std::pair<void const*, clang::CXXCtorInitializer*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKvPN5clang18CXXCtorInitializerENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<void const*, clang::CXXCtorInitializer*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<clang::CXXCtorInitializer*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_PNS0_16CXXBaseSpecifierEESt10_Select1stIS6_ENS0_16QualTypeOrderingESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, clang::CXXBaseSpecifier*>, std::_Select1st<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> >, std::pair<clang::QualType const, clang::CXXBaseSpecifier*> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_PNS0_16CXXBaseSpecifierEESt10_Select1stIS6_ENS0_16QualTypeOrderingESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, clang::CXXBaseSpecifier*>, std::_Select1st<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> > >::_M_insert_unique(std::pair<clang::QualType const, clang::CXXBaseSpecifier*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11ParmVarDeclENS1_14SourceLocationENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<clang::ParmVarDecl*, clang::SourceLocation, llvm::DenseMapInfo<clang::ParmVarDecl*>, llvm::DenseMapInfo<clang::SourceLocation> >::InsertIntoBucket(clang::ParmVarDecl* const&, clang::SourceLocation const&, std::pair<clang::ParmVarDecl*, clang::SourceLocation>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11ParmVarDeclENS1_14SourceLocationENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::ParmVarDecl*, clang::SourceLocation, llvm::DenseMapInfo<clang::ParmVarDecl*>, llvm::DenseMapInfo<clang::SourceLocation> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEcNS_12DenseMapInfoIS4_EENS5_IcEEE6insertERKSt4pairIS4_cE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, char, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::CXXRecordDecl const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEcNS_12DenseMapInfoIS4_EENS5_IcEEE16InsertIntoBucketERKS4_RKcPSt4pairIS4_cE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, char, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, char const&, std::pair<clang::CXXRecordDecl const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEcNS_12DenseMapInfoIS4_EENS5_IcEEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, char, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang15UsingShadowDeclC2EPNS_11DeclContextENS_14SourceLocationEPNS_9UsingDeclEPNS_9NamedDeclE\", \"clang::UsingShadowDecl::UsingShadowDecl(clang::DeclContext*, clang::SourceLocation, clang::UsingDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang15UsingShadowDeclD1Ev\", \"clang::UsingShadowDecl::~UsingShadowDecl()\"},\n    {\"_ZN5clang15UsingShadowDeclD0Ev\", \"clang::UsingShadowDecl::~UsingShadowDecl()\"},\n    {\"_ZN4llvm8DenseMapIPN5clang10RecordDeclESt4pairIPNS1_9NamedDeclEPNS1_18CXXCtorInitializerEENS_12DenseMapInfoIS3_EENSA_IS9_EEE16InsertIntoBucketERKS3_RKS9_PS4_IS3_S9_E\", \"llvm::DenseMap<clang::RecordDecl*, std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*>, llvm::DenseMapInfo<clang::RecordDecl*>, llvm::DenseMapInfo<std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*> > >::InsertIntoBucket(clang::RecordDecl* const&, std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*> const&, std::pair<clang::RecordDecl*, std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang10RecordDeclESt4pairIPNS1_9NamedDeclEPNS1_18CXXCtorInitializerEENS_12DenseMapInfoIS3_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::RecordDecl*, std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*>, llvm::DenseMapInfo<clang::RecordDecl*>, llvm::DenseMapInfo<std::pair<clang::NamedDecl*, clang::CXXCtorInitializer*> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang17InitializedEntityELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::InitializedEntity, false>::grow(unsigned long)\"},\n    {\"_ZN5clang14AccessSpecDeclD1Ev\", \"clang::AccessSpecDecl::~AccessSpecDecl()\"},\n    {\"_ZN5clang14AccessSpecDeclD0Ev\", \"clang::AccessSpecDecl::~AccessSpecDecl()\"},\n    {\"_ZNK5clang14AccessSpecDecl14getSourceRangeEv\", \"clang::AccessSpecDecl::getSourceRange() const\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_PNS0_16CXXBaseSpecifierEESt10_Select1stIS6_ENS0_16QualTypeOrderingESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, clang::CXXBaseSpecifier*>, std::_Select1st<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::QualType const, clang::CXXBaseSpecifier*> >*)\"},\n    {\"_ZN5clang4Sema25ActOnStartOfObjCMethodDefEPNS_5ScopeEPNS_4DeclE\", \"clang::Sema::ActOnStartOfObjCMethodDef(clang::Scope*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema24ActOnStartClassInterfaceENS_14SourceLocationEPNS_14IdentifierInfoES1_S3_S1_PKPNS_4DeclEjPKS1_S1_PNS_13AttributeListE\", \"clang::Sema::ActOnStartClassInterface(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Decl* const*, unsigned int, clang::SourceLocation const*, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema18CheckObjCDeclScopeEPNS_4DeclE\", \"clang::Sema::CheckObjCDeclScope(clang::Decl*)\"},\n    {\"_ZN5clang4Sema22ActOnCompatiblityAliasENS_14SourceLocationEPNS_14IdentifierInfoES1_S3_S1_\", \"clang::Sema::ActOnCompatiblityAlias(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema52CheckForwardProtocolDeclarationForCircularDependencyEPNS_14IdentifierInfoERNS_14SourceLocationES3_RKNS_8ObjCListINS_16ObjCProtocolDeclEEE\", \"clang::Sema::CheckForwardProtocolDeclarationForCircularDependency(clang::IdentifierInfo*, clang::SourceLocation&, clang::SourceLocation, clang::ObjCList<clang::ObjCProtocolDecl> const&)\"},\n    {\"_ZN5clang4Sema27ActOnStartProtocolInterfaceENS_14SourceLocationEPNS_14IdentifierInfoES1_PKPNS_4DeclEjPKS1_S1_PNS_13AttributeListE\", \"clang::Sema::ActOnStartProtocolInterface(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Decl* const*, unsigned int, clang::SourceLocation const*, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema23FindProtocolDeclarationEbPKSt4pairIPNS_14IdentifierInfoENS_14SourceLocationEEjRN4llvm15SmallVectorImplIPNS_4DeclEEE\", \"clang::Sema::FindProtocolDeclaration(bool, std::pair<clang::IdentifierInfo*, clang::SourceLocation> const*, unsigned int, llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang4Sema32DiagnoseClassExtensionDupMethodsEPNS_16ObjCCategoryDeclEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::DiagnoseClassExtensionDupMethods(clang::ObjCCategoryDecl*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema26MatchTwoMethodDeclarationsEPKNS_14ObjCMethodDeclES3_bb\", \"clang::Sema::MatchTwoMethodDeclarations(clang::ObjCMethodDecl const*, clang::ObjCMethodDecl const*, bool, bool)\"},\n    {\"_ZN5clang4Sema31ActOnForwardProtocolDeclarationENS_14SourceLocationEPKSt4pairIPNS_14IdentifierInfoES1_EjPNS_13AttributeListE\", \"clang::Sema::ActOnForwardProtocolDeclaration(clang::SourceLocation, std::pair<clang::IdentifierInfo*, clang::SourceLocation> const*, unsigned int, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema27ActOnStartCategoryInterfaceENS_14SourceLocationEPNS_14IdentifierInfoES1_S3_S1_PKPNS_4DeclEjPKS1_S1_\", \"clang::Sema::ActOnStartCategoryInterface(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Decl* const*, unsigned int, clang::SourceLocation const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema32ActOnStartCategoryImplementationENS_14SourceLocationEPNS_14IdentifierInfoES1_S3_S1_\", \"clang::Sema::ActOnStartCategoryImplementation(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema29ActOnStartClassImplementationENS_14SourceLocationEPNS_14IdentifierInfoES1_S3_S1_\", \"clang::Sema::ActOnStartClassImplementation(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24CheckImplementationIvarsEPNS_22ObjCImplementationDeclEPPNS_12ObjCIvarDeclEjNS_14SourceLocationE\", \"clang::Sema::CheckImplementationIvars(clang::ObjCImplementationDecl*, clang::ObjCIvarDecl**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19WarnUndefinedMethodENS_14SourceLocationEPNS_14ObjCMethodDeclERbj\", \"clang::Sema::WarnUndefinedMethod(clang::SourceLocation, clang::ObjCMethodDecl*, bool&, unsigned int)\"},\n    {\"_ZN5clang4Sema27WarnConflictingTypedMethodsEPNS_14ObjCMethodDeclES2_\", \"clang::Sema::WarnConflictingTypedMethods(clang::ObjCMethodDecl*, clang::ObjCMethodDecl*)\"},\n    {\"_ZN5clang4Sema23CheckProtocolMethodDefsENS_14SourceLocationEPNS_16ObjCProtocolDeclERbRKN4llvm8DenseSetINS_8SelectorENS5_12DenseMapInfoIS7_EEEESC_PNS_17ObjCContainerDeclE\", \"clang::Sema::CheckProtocolMethodDefs(clang::SourceLocation, clang::ObjCProtocolDecl*, bool&, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> > const&, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> > const&, clang::ObjCContainerDecl*)\"},\n    {\"_ZN5clang4Sema26MatchAllMethodDeclarationsERKN4llvm8DenseSetINS_8SelectorENS1_12DenseMapInfoIS3_EEEES8_RS6_S9_PNS_12ObjCImplDeclEPNS_17ObjCContainerDeclERbb\", \"clang::Sema::MatchAllMethodDeclarations(llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> > const&, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> > const&, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> >&, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> >&, clang::ObjCImplDecl*, clang::ObjCContainerDecl*, bool&, bool)\"},\n    {\"_ZN5clang4Sema25ImplMethodsVsClassMethodsEPNS_5ScopeEPNS_12ObjCImplDeclEPNS_17ObjCContainerDeclEb\", \"clang::Sema::ImplMethodsVsClassMethods(clang::Scope*, clang::ObjCImplDecl*, clang::ObjCContainerDecl*, bool)\"},\n    {\"_ZN5clang4Sema28ActOnForwardClassDeclarationENS_14SourceLocationEPPNS_14IdentifierInfoEPS1_j\", \"clang::Sema::ActOnForwardClassDeclaration(clang::SourceLocation, clang::IdentifierInfo**, clang::SourceLocation*, unsigned int)\"},\n    {\"_ZN5clang4Sema14ReadMethodPoolENS_8SelectorE\", \"clang::Sema::ReadMethodPool(clang::Selector)\"},\n    {\"_ZN5clang4Sema21AddMethodToGlobalPoolEPNS_14ObjCMethodDeclEbb\", \"clang::Sema::AddMethodToGlobalPool(clang::ObjCMethodDecl*, bool, bool)\"},\n    {\"_ZN5clang4Sema24LookupMethodInGlobalPoolENS_8SelectorENS_11SourceRangeEbbb\", \"clang::Sema::LookupMethodInGlobalPool(clang::Selector, clang::SourceRange, bool, bool, bool)\"},\n    {\"_ZN5clang4Sema35LookupImplementedMethodInGlobalPoolENS_8SelectorE\", \"clang::Sema::LookupImplementedMethodInGlobalPool(clang::Selector)\"},\n    {\"_ZN5clang4Sema33CompareMethodParamsInBaseAndSuperEPNS_4DeclEPNS_14ObjCMethodDeclEb\", \"clang::Sema::CompareMethodParamsInBaseAndSuper(clang::Decl*, clang::ObjCMethodDecl*, bool)\"},\n    {\"_ZN5clang4Sema22DiagnoseDuplicateIvarsEPNS_17ObjCInterfaceDeclES2_\", \"clang::Sema::DiagnoseDuplicateIvars(clang::ObjCInterfaceDecl*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema10ActOnAtEndEPNS_5ScopeENS_11SourceRangeEPNS_4DeclEPS5_jS6_jPNS_9OpaquePtrINS_12DeclGroupRefEEEj\", \"clang::Sema::ActOnAtEnd(clang::Scope*, clang::SourceRange, clang::Decl*, clang::Decl**, unsigned int, clang::Decl**, unsigned int, clang::OpaquePtr<clang::DeclGroupRef>*, unsigned int)\"},\n    {\"_ZN5clang4Sema22ActOnMethodDeclarationEPNS_5ScopeENS_14SourceLocationES3_NS_3tok9TokenKindEPNS_4DeclERNS_12ObjCDeclSpecENS_9OpaquePtrINS_8QualTypeEEENS_8SelectorEPNS0_11ObjCArgInfoEPNS_15DeclaratorChunk9ParamInfoEjPNS_13AttributeListENS4_15ObjCKeywordKindEb\", \"clang::Sema::ActOnMethodDeclaration(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::tok::TokenKind, clang::Decl*, clang::ObjCDeclSpec&, clang::OpaquePtr<clang::QualType>, clang::Selector, clang::Sema::ObjCArgInfo*, clang::DeclaratorChunk::ParamInfo*, unsigned int, clang::AttributeList*, clang::tok::ObjCKeywordKind, bool)\"},\n    {\"_ZN5clang4Sema9ActOnDefsEPNS_5ScopeEPNS_4DeclENS_14SourceLocationEPNS_14IdentifierInfoERN4llvm15SmallVectorImplIS4_EE\", \"clang::Sema::ActOnDefs(clang::Scope*, clang::Decl*, clang::SourceLocation, clang::IdentifierInfo*, llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang4Sema22BuildObjCExceptionDeclEPNS_14TypeSourceInfoENS_8QualTypeEPNS_14IdentifierInfoENS_14SourceLocationEb\", \"clang::Sema::BuildObjCExceptionDecl(clang::TypeSourceInfo*, clang::QualType, clang::IdentifierInfo*, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema22ActOnObjCExceptionDeclEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnObjCExceptionDecl(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema33CollectIvarsToConstructOrDestructEPNS_17ObjCInterfaceDeclERN4llvm15SmallVectorImplIPNS_12ObjCIvarDeclEEE\", \"clang::Sema::CollectIvarsToConstructOrDestruct(clang::ObjCInterfaceDecl*, llvm::SmallVectorImpl<clang::ObjCIvarDecl*>&)\"},\n    {\"_ZN5clang22ObjCImplementationDecl19setIvarInitializersERNS_10ASTContextEPPNS_18CXXCtorInitializerEj\", \"clang::ObjCImplementationDecl::setIvarInitializers(clang::ASTContext&, clang::CXXCtorInitializer**, unsigned int)\"},\n    {\"_ZN5clang4Sema35DiagnoseUseOfUnimplementedSelectorsEv\", \"clang::Sema::DiagnoseUseOfUnimplementedSelectors()\"},\n    {\"_Z23isObjCTypeSubstitutableRN5clang10ASTContextEPKNS_21ObjCObjectPointerTypeES4_b\", \"isObjCTypeSubstitutable(clang::ASTContext&, clang::ObjCObjectPointerType const*, clang::ObjCObjectPointerType const*, bool)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorESt4pairINS1_14ObjCMethodListES4_ENS_12DenseMapInfoIS2_EENS6_IS5_EEE6insertERKS3_IS2_S5_E\", \"llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodList, clang::ObjCMethodList>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodList, clang::ObjCMethodList> > >::insert(std::pair<clang::Selector, std::pair<clang::ObjCMethodList, clang::ObjCMethodList> > const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorESt4pairINS1_14ObjCMethodListES4_ENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PS3_IS2_S5_E\", \"llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodList, clang::ObjCMethodList>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodList, clang::ObjCMethodList> > >::InsertIntoBucket(clang::Selector const&, std::pair<clang::ObjCMethodList, clang::ObjCMethodList> const&, std::pair<clang::Selector, std::pair<clang::ObjCMethodList, clang::ObjCMethodList> >*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorESt4pairINS1_14ObjCMethodListES4_ENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Selector, std::pair<clang::ObjCMethodList, clang::ObjCMethodList>, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<std::pair<clang::ObjCMethodList, clang::ObjCMethodList> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEcNS_12DenseMapInfoIS2_EENS3_IcEEE6insertERKSt4pairIS2_cE\", \"llvm::DenseMap<clang::Selector, char, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::Selector, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEcNS_12DenseMapInfoIS2_EENS3_IcEEE16InsertIntoBucketERKS2_RKcPSt4pairIS2_cE\", \"llvm::DenseMap<clang::Selector, char, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::Selector const&, char const&, std::pair<clang::Selector, char>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEcNS_12DenseMapInfoIS2_EENS3_IcEEE4growEj\", \"llvm::DenseMap<clang::Selector, char, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPKNS1_14ObjCMethodDeclENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<clang::Selector, clang::ObjCMethodDecl const*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::ObjCMethodDecl const*> >::InsertIntoBucket(clang::Selector const&, clang::ObjCMethodDecl const* const&, std::pair<clang::Selector, clang::ObjCMethodDecl const*>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPKNS1_14ObjCMethodDeclENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Selector, clang::ObjCMethodDecl const*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::ObjCMethodDecl const*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4Sema27CheckSpecifiedExceptionTypeENS_8QualTypeERKNS_11SourceRangeE\", \"clang::Sema::CheckSpecifiedExceptionType(clang::QualType, clang::SourceRange const&)\"},\n    {\"_ZN5clang4Sema25CheckDistantExceptionSpecENS_8QualTypeE\", \"clang::Sema::CheckDistantExceptionSpec(clang::QualType)\"},\n    {\"_ZN5clang4Sema28CheckEquivalentExceptionSpecEPNS_12FunctionDeclES2_\", \"clang::Sema::CheckEquivalentExceptionSpec(clang::FunctionDecl*, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema28CheckEquivalentExceptionSpecERKNS_17PartialDiagnosticES3_PKNS_17FunctionProtoTypeENS_14SourceLocationES6_S7_PbS8_\", \"clang::Sema::CheckEquivalentExceptionSpec(clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::FunctionProtoType const*, clang::SourceLocation, clang::FunctionProtoType const*, clang::SourceLocation, bool*, bool*)\"},\n    {\"_ZN5clang4Sema28CheckEquivalentExceptionSpecEPKNS_17FunctionProtoTypeENS_14SourceLocationES3_S4_\", \"clang::Sema::CheckEquivalentExceptionSpec(clang::FunctionProtoType const*, clang::SourceLocation, clang::FunctionProtoType const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24CheckExceptionSpecSubsetERKNS_17PartialDiagnosticES3_PKNS_17FunctionProtoTypeENS_14SourceLocationES6_S7_\", \"clang::Sema::CheckExceptionSpecSubset(clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::FunctionProtoType const*, clang::SourceLocation, clang::FunctionProtoType const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema23CheckParamExceptionSpecERKNS_17PartialDiagnosticEPKNS_17FunctionProtoTypeENS_14SourceLocationES6_S7_\", \"clang::Sema::CheckParamExceptionSpec(clang::PartialDiagnostic const&, clang::FunctionProtoType const*, clang::SourceLocation, clang::FunctionProtoType const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema31CheckExceptionSpecCompatibilityEPNS_4ExprENS_8QualTypeE\", \"clang::Sema::CheckExceptionSpecCompatibility(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang21GetUnderlyingFunctionENS_8QualTypeE\", \"clang::GetUnderlyingFunction(clang::QualType)\"},\n    {\"_ZN5clang4Sema36CheckOverridingFunctionExceptionSpecEPKNS_13CXXMethodDeclES3_\", \"clang::Sema::CheckOverridingFunctionExceptionSpec(clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZN5clang4Sema17DiagnoseUseOfDeclEPNS_9NamedDeclENS_14SourceLocationEb\", \"clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema21DiagnoseSentinelCallsEPNS_9NamedDeclENS_14SourceLocationEPPNS_4ExprEj\", \"clang::Sema::DiagnoseSentinelCalls(clang::NamedDecl*, clang::SourceLocation, clang::Expr**, unsigned int)\"},\n    {\"_ZNK5clang4Sema12getExprRangeEPNS_4ExprE\", \"clang::Sema::getExprRange(clang::Expr*) const\"},\n    {\"_ZN5clang4Sema30DefaultFunctionArrayConversionERPNS_4ExprE\", \"clang::Sema::DefaultFunctionArrayConversion(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema23DefaultLvalueConversionERPNS_4ExprE\", \"clang::Sema::DefaultLvalueConversion(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema24ConvertPropertyForRValueERPNS_4ExprE\", \"clang::Sema::ConvertPropertyForRValue(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema36DefaultFunctionArrayLvalueConversionERPNS_4ExprE\", \"clang::Sema::DefaultFunctionArrayLvalueConversion(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema21UsualUnaryConversionsERPNS_4ExprE\", \"clang::Sema::UsualUnaryConversions(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema24DefaultArgumentPromotionERPNS_4ExprE\", \"clang::Sema::DefaultArgumentPromotion(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema32DefaultVariadicArgumentPromotionERPNS_4ExprENS0_16VariadicCallTypeEPNS_12FunctionDeclE\", \"clang::Sema::DefaultVariadicArgumentPromotion(clang::Expr*&, clang::Sema::VariadicCallType, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema19DiagRuntimeBehaviorENS_14SourceLocationERKNS_17PartialDiagnosticE\", \"clang::Sema::DiagRuntimeBehavior(clang::SourceLocation, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema26UsualArithmeticConversionsERPNS_4ExprES3_b\", \"clang::Sema::UsualArithmeticConversions(clang::Expr*&, clang::Expr*&, bool)\"},\n    {\"_ZN5clang4Sema18ActOnStringLiteralEPKNS_5TokenEj\", \"clang::Sema::ActOnStringLiteral(clang::Token const*, unsigned int)\"},\n    {\"_ZN5clang4Sema16BuildDeclRefExprEPNS_9ValueDeclENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPKNS_12CXXScopeSpecE\", \"clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::CXXScopeSpec const*)\"},\n    {\"_ZN5clang4Sema16BuildDeclRefExprEPNS_9ValueDeclENS_8QualTypeENS_13ExprValueKindERKNS_19DeclarationNameInfoEPKNS_12CXXScopeSpecE\", \"clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::CXXScopeSpec const*)\"},\n    {\"_ZN5clang4Sema25MarkDeclarationReferencedENS_14SourceLocationEPNS_4DeclE\", \"clang::Sema::MarkDeclarationReferenced(clang::SourceLocation, clang::Decl*)\"},\n    {\"_ZN5clang4Sema40BuildAnonymousStructUnionMemberReferenceERKNS_12CXXScopeSpecENS_14SourceLocationEPNS_17IndirectFieldDeclEPNS_4ExprES4_\", \"clang::Sema::BuildAnonymousStructUnionMemberReference(clang::CXXScopeSpec const&, clang::SourceLocation, clang::IndirectFieldDecl*, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24BuildDeclarationNameExprERKNS_12CXXScopeSpecERKNS_19DeclarationNameInfoEPNS_9NamedDeclE\", \"clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*)\"},\n    {\"_Z23BuildFieldReferenceExprRN5clang4SemaEPNS_4ExprEbRKNS_12CXXScopeSpecEPNS_9FieldDeclENS_14DeclAccessPairERKNS_19DeclarationNameInfoE\", \"BuildFieldReferenceExpr(clang::Sema&, clang::Expr*, bool, clang::CXXScopeSpec const&, clang::FieldDecl*, clang::DeclAccessPair, clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang4Sema19DiagnoseEmptyLookupEPNS_5ScopeERNS_12CXXScopeSpecERNS_12LookupResultENS0_18CorrectTypoContextE\", \"clang::Sema::DiagnoseEmptyLookup(clang::Scope*, clang::CXXScopeSpec&, clang::LookupResult&, clang::Sema::CorrectTypoContext)\"},\n    {\"_ZN5clang4Sema28canSynthesizeProvisionalIvarEPNS_14IdentifierInfoE\", \"clang::Sema::canSynthesizeProvisionalIvar(clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema28canSynthesizeProvisionalIvarEPNS_16ObjCPropertyDeclE\", \"clang::Sema::canSynthesizeProvisionalIvar(clang::ObjCPropertyDecl*)\"},\n    {\"_ZN5clang4Sema17ActOnIdExpressionEPNS_5ScopeERNS_12CXXScopeSpecERNS_13UnqualifiedIdEbb\", \"clang::Sema::ActOnIdExpression(clang::Scope*, clang::CXXScopeSpec&, clang::UnqualifiedId&, bool, bool)\"},\n    {\"_Z22DecomposeUnqualifiedIdRN5clang4SemaERKNS_13UnqualifiedIdERNS_24TemplateArgumentListInfoERNS_19DeclarationNameInfoERPKS5_\", \"DecomposeUnqualifiedId(clang::Sema&, clang::UnqualifiedId const&, clang::TemplateArgumentListInfo&, clang::DeclarationNameInfo&, clang::TemplateArgumentListInfo const*&)\"},\n    {\"_ZN5clang4Sema18LookupInObjCMethodERNS_12LookupResultEPNS_5ScopeEPNS_14IdentifierInfoEb\", \"clang::Sema::LookupInObjCMethod(clang::LookupResult&, clang::Scope*, clang::IdentifierInfo*, bool)\"},\n    {\"_ZN5clang4Sema26UseArgumentDependentLookupERKNS_12CXXScopeSpecERKNS_12LookupResultEb\", \"clang::Sema::UseArgumentDependentLookup(clang::CXXScopeSpec const&, clang::LookupResult const&, bool)\"},\n    {\"_ZN5clang4Sema31BuildPossibleImplicitMemberExprERKNS_12CXXScopeSpecERNS_12LookupResultEPKNS_24TemplateArgumentListInfoE\", \"clang::Sema::BuildPossibleImplicitMemberExpr(clang::CXXScopeSpec const&, clang::LookupResult&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang4Sema24BuildDeclarationNameExprERKNS_12CXXScopeSpecERNS_12LookupResultEb\", \"clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::LookupResult&, bool)\"},\n    {\"_ZN5clang4Sema23BuildImplicitMemberExprERKNS_12CXXScopeSpecERNS_12LookupResultEPKNS_24TemplateArgumentListInfoEb\", \"clang::Sema::BuildImplicitMemberExpr(clang::CXXScopeSpec const&, clang::LookupResult&, clang::TemplateArgumentListInfo const*, bool)\"},\n    {\"_Z25DiagnoseInstanceReferenceRN5clang4SemaERKNS_12CXXScopeSpecEPNS_9NamedDeclERKNS_19DeclarationNameInfoE\", \"DiagnoseInstanceReference(clang::Sema&, clang::CXXScopeSpec const&, clang::NamedDecl*, clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang4Sema33BuildQualifiedDeclarationNameExprERNS_12CXXScopeSpecERKNS_19DeclarationNameInfoE\", \"clang::Sema::BuildQualifiedDeclarationNameExpr(clang::CXXScopeSpec&, clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang4Sema29PerformObjectMemberConversionERPNS_4ExprEPNS_19NestedNameSpecifierEPNS_9NamedDeclES7_\", \"clang::Sema::PerformObjectMemberConversion(clang::Expr*&, clang::NestedNameSpecifier*, clang::NamedDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema24BuildMemberReferenceExprEPNS_4ExprENS_8QualTypeENS_14SourceLocationEbRKNS_12CXXScopeSpecEPNS_9NamedDeclERNS_12LookupResultEPKNS_24TemplateArgumentListInfoEb\", \"clang::Sema::BuildMemberReferenceExpr(clang::Expr*, clang::QualType, clang::SourceLocation, bool, clang::CXXScopeSpec const&, clang::NamedDecl*, clang::LookupResult&, clang::TemplateArgumentListInfo const*, bool)\"},\n    {\"_Z15CheckDeclInExprRN5clang4SemaENS_14SourceLocationEPNS_9NamedDeclE\", \"CheckDeclInExpr(clang::Sema&, clang::SourceLocation, clang::NamedDecl*)\"},\n    {\"_Z21BuildBlockDeclRefExprRN5clang4SemaEPNS_9ValueDeclERKNS_19DeclarationNameInfoEb\", \"BuildBlockDeclRefExpr(clang::Sema&, clang::ValueDecl*, clang::DeclarationNameInfo const&, bool)\"},\n    {\"_ZN5clang4Sema19ActOnPredefinedExprENS_14SourceLocationENS_3tok9TokenKindE\", \"clang::Sema::ActOnPredefinedExpr(clang::SourceLocation, clang::tok::TokenKind)\"},\n    {\"_ZN5clang4Sema22ActOnCharacterConstantERKNS_5TokenE\", \"clang::Sema::ActOnCharacterConstant(clang::Token const&)\"},\n    {\"_ZN5clang4Sema20ActOnNumericConstantERKNS_5TokenE\", \"clang::Sema::ActOnNumericConstant(clang::Token const&)\"},\n    {\"_ZN5clang4Sema14ActOnParenExprENS_14SourceLocationES1_PNS_4ExprE\", \"clang::Sema::ActOnParenExpr(clang::SourceLocation, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema25CheckSizeOfAlignOfOperandENS_8QualTypeENS_14SourceLocationENS_11SourceRangeEb\", \"clang::Sema::CheckSizeOfAlignOfOperand(clang::QualType, clang::SourceLocation, clang::SourceRange, bool)\"},\n    {\"_ZN5clang4Sema23CreateSizeOfAlignOfExprEPNS_14TypeSourceInfoENS_14SourceLocationEbNS_11SourceRangeE\", \"clang::Sema::CreateSizeOfAlignOfExpr(clang::TypeSourceInfo*, clang::SourceLocation, bool, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema23CreateSizeOfAlignOfExprEPNS_4ExprENS_14SourceLocationEbNS_11SourceRangeE\", \"clang::Sema::CreateSizeOfAlignOfExpr(clang::Expr*, clang::SourceLocation, bool, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema20CheckPlaceholderExprEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::CheckPlaceholderExpr(clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema22ActOnSizeOfAlignOfExprENS_14SourceLocationEbbPvRKNS_11SourceRangeE\", \"clang::Sema::ActOnSizeOfAlignOfExpr(clang::SourceLocation, bool, bool, void*, clang::SourceRange const&)\"},\n    {\"_ZN5clang4Sema19ActOnPostfixUnaryOpEPNS_5ScopeENS_14SourceLocationENS_3tok9TokenKindEPNS_4ExprE\", \"clang::Sema::ActOnPostfixUnaryOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*)\"},\n    {\"_ZN5clang4Sema12BuildUnaryOpEPNS_5ScopeENS_14SourceLocationENS_17UnaryOperatorKindEPNS_4ExprE\", \"clang::Sema::BuildUnaryOp(clang::Scope*, clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*)\"},\n    {\"_ZN5clang4Sema23ActOnArraySubscriptExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationES4_S5_\", \"clang::Sema::ActOnArraySubscriptExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema36MaybeConvertParenListExprToParenExprEPNS_5ScopeEPNS_4ExprE\", \"clang::Sema::MaybeConvertParenListExprToParenExpr(clang::Scope*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema31CreateBuiltinArraySubscriptExprEPNS_4ExprENS_14SourceLocationES2_S3_\", \"clang::Sema::CreateBuiltinArraySubscriptExpr(clang::Expr*, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24ActOnDependentMemberExprEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationERKNS_12CXXScopeSpecEPNS_9NamedDeclERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::Sema::ActOnDependentMemberExpr(clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::CXXScopeSpec const&, clang::NamedDecl*, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang4Sema29CheckQualifiedMemberReferenceEPNS_4ExprENS_8QualTypeERKNS_12CXXScopeSpecERKNS_12LookupResultE\", \"clang::Sema::CheckQualifiedMemberReference(clang::Expr*, clang::QualType, clang::CXXScopeSpec const&, clang::LookupResult const&)\"},\n    {\"_Z24IsProvablyNotDerivedFromRN5clang4SemaEPNS_13CXXRecordDeclERKN4llvm11SmallPtrSetIS3_Lj4EEE\", \"IsProvablyNotDerivedFrom(clang::Sema&, clang::CXXRecordDecl*, llvm::SmallPtrSet<clang::CXXRecordDecl*, 4u> const&)\"},\n    {\"_ZN5clang4Sema24BuildMemberReferenceExprEPNS_4ExprENS_8QualTypeENS_14SourceLocationEbRNS_12CXXScopeSpecEPNS_9NamedDeclERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::Sema::BuildMemberReferenceExpr(clang::Expr*, clang::QualType, clang::SourceLocation, bool, clang::CXXScopeSpec&, clang::NamedDecl*, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_Z24LookupMemberExprInRecordRN5clang4SemaERNS_12LookupResultENS_11SourceRangeEPKNS_10RecordTypeENS_14SourceLocationERNS_12CXXScopeSpecEb\", \"LookupMemberExprInRecord(clang::Sema&, clang::LookupResult&, clang::SourceRange, clang::RecordType const*, clang::SourceLocation, clang::CXXScopeSpec&, bool)\"},\n    {\"_ZN5clang4Sema16LookupMemberExprERNS_12LookupResultERPNS_4ExprERbNS_14SourceLocationERNS_12CXXScopeSpecEPNS_4DeclEb\", \"clang::Sema::LookupMemberExpr(clang::LookupResult&, clang::Expr*&, bool&, clang::SourceLocation, clang::CXXScopeSpec&, clang::Decl*, bool)\"},\n    {\"_Z34ShouldTryAgainWithRedefinitionTypeRN5clang4SemaERPNS_4ExprE\", \"ShouldTryAgainWithRedefinitionType(clang::Sema&, clang::Expr*&)\"},\n    {\"_Z24FindGetterSetterNameDeclPKN5clang21ObjCObjectPointerTypeEPNS_14IdentifierInfoERKNS_8SelectorERNS_10ASTContextE\", \"FindGetterSetterNameDecl(clang::ObjCObjectPointerType const*, clang::IdentifierInfo*, clang::Selector const&, clang::ASTContext&)\"},\n    {\"_ZN5clang4Sema13ActOnCallExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationENS_11ASTMultiPtrIS4_EES5_S4_\", \"clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema21ActOnMemberAccessExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationENS_3tok9TokenKindERNS_12CXXScopeSpecERNS_13UnqualifiedIdEPNS_4DeclEb\", \"clang::Sema::ActOnMemberAccessExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::tok::TokenKind, clang::CXXScopeSpec&, clang::UnqualifiedId&, clang::Decl*, bool)\"},\n    {\"_ZN5clang4Sema22BuildCXXDefaultArgExprENS_14SourceLocationEPNS_12FunctionDeclEPNS_11ParmVarDeclE\", \"clang::Sema::BuildCXXDefaultArgExpr(clang::SourceLocation, clang::FunctionDecl*, clang::ParmVarDecl*)\"},\n    {\"_ZN5clang4Sema32MarkDeclarationsReferencedInExprEPNS_4ExprE\", \"clang::Sema::MarkDeclarationsReferencedInExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema23ConvertArgumentsForCallEPNS_8CallExprEPNS_4ExprEPNS_12FunctionDeclEPKNS_17FunctionProtoTypeEPS4_jNS_14SourceLocationE\", \"clang::Sema::ConvertArgumentsForCall(clang::CallExpr*, clang::Expr*, clang::FunctionDecl*, clang::FunctionProtoType const*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema22GatherArgumentsForCallENS_14SourceLocationEPNS_12FunctionDeclEPKNS_17FunctionProtoTypeEjPPNS_4ExprEjRN4llvm11SmallVectorIS8_Lj8EEENS0_16VariadicCallTypeE\", \"clang::Sema::GatherArgumentsForCall(clang::SourceLocation, clang::FunctionDecl*, clang::FunctionProtoType const*, unsigned int, clang::Expr**, unsigned int, llvm::SmallVector<clang::Expr*, 8u>&, clang::Sema::VariadicCallType)\"},\n    {\"_ZN5clang4Sema19CheckCallReturnTypeENS_8QualTypeENS_14SourceLocationEPNS_8CallExprEPNS_12FunctionDeclE\", \"clang::Sema::CheckCallReturnType(clang::QualType, clang::SourceLocation, clang::CallExpr*, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema21BuildResolvedCallExprEPNS_4ExprEPNS_9NamedDeclENS_14SourceLocationEPS2_jS5_S2_\", \"clang::Sema::BuildResolvedCallExpr(clang::Expr*, clang::NamedDecl*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema23ActOnCUDAExecConfigExprEPNS_5ScopeENS_14SourceLocationENS_11ASTMultiPtrIPNS_4ExprEEES3_\", \"clang::Sema::ActOnCUDAExecConfigExpr(clang::Scope*, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20ActOnCompoundLiteralENS_14SourceLocationENS_9OpaquePtrINS_8QualTypeEEES1_PNS_4ExprE\", \"clang::Sema::ActOnCompoundLiteral(clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema24BuildCompoundLiteralExprENS_14SourceLocationEPNS_14TypeSourceInfoES1_PNS_4ExprE\", \"clang::Sema::BuildCompoundLiteralExpr(clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema13ActOnInitListENS_14SourceLocationENS_11ASTMultiPtrIPNS_4ExprEEES1_\", \"clang::Sema::ActOnInitList(clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14CheckCastTypesENS_11SourceRangeENS_8QualTypeERPNS_4ExprERNS_8CastKindERNS_13ExprValueKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEb\", \"clang::Sema::CheckCastTypes(clang::SourceRange, clang::QualType, clang::Expr*&, clang::CastKind&, clang::ExprValueKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&, bool)\"},\n    {\"_ZN5clang4Sema18CheckExtVectorCastENS_11SourceRangeENS_8QualTypeERPNS_4ExprERNS_8CastKindE\", \"clang::Sema::CheckExtVectorCast(clang::SourceRange, clang::QualType, clang::Expr*&, clang::CastKind&)\"},\n    {\"_ZN5clang4Sema15CheckVectorCastENS_11SourceRangeENS_8QualTypeES2_RNS_8CastKindE\", \"clang::Sema::CheckVectorCast(clang::SourceRange, clang::QualType, clang::QualType, clang::CastKind&)\"},\n    {\"_Z17PrepareScalarCastRN5clang4SemaERPNS_4ExprENS_8QualTypeE\", \"PrepareScalarCast(clang::Sema&, clang::Expr*&, clang::QualType)\"},\n    {\"_ZN5clang4Sema13ActOnCastExprEPNS_5ScopeENS_14SourceLocationENS_9OpaquePtrINS_8QualTypeEEES3_PNS_4ExprE\", \"clang::Sema::ActOnCastExpr(clang::Scope*, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema24ActOnCastOfParenListExprEPNS_5ScopeENS_14SourceLocationES3_PNS_4ExprEPNS_14TypeSourceInfoE\", \"clang::Sema::ActOnCastOfParenListExpr(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema19BuildCStyleCastExprENS_14SourceLocationEPNS_14TypeSourceInfoES1_PNS_4ExprE\", \"clang::Sema::BuildCStyleCastExpr(clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema10ActOnBinOpEPNS_5ScopeENS_14SourceLocationENS_3tok9TokenKindEPNS_4ExprES7_\", \"clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema25ActOnParenOrParenListExprENS_14SourceLocationES1_NS_11ASTMultiPtrIPNS_4ExprEEENS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::ActOnParenOrParenListExpr(clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang4Sema24CheckConditionalOperandsERPNS_4ExprES3_S3_S3_RNS_13ExprValueKindERNS_14ExprObjectKindENS_14SourceLocationE\", \"clang::Sema::CheckConditionalOperands(clang::Expr*&, clang::Expr*&, clang::Expr*&, clang::Expr*&, clang::ExprValueKind&, clang::ExprObjectKind&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19CheckVectorOperandsENS_14SourceLocationERPNS_4ExprES4_\", \"clang::Sema::CheckVectorOperands(clang::SourceLocation, clang::Expr*&, clang::Expr*&)\"},\n    {\"_ZN5clang4Sema28FindCompositeObjCPointerTypeERPNS_4ExprES3_NS_14SourceLocationE\", \"clang::Sema::FindCompositeObjCPointerType(clang::Expr*&, clang::Expr*&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18ActOnConditionalOpENS_14SourceLocationES1_PNS_4ExprES3_S3_\", \"clang::Sema::ActOnConditionalOp(clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema26CheckAssignmentConstraintsENS_14SourceLocationENS_8QualTypeES2_\", \"clang::Sema::CheckAssignmentConstraints(clang::SourceLocation, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang4Sema26CheckAssignmentConstraintsENS_8QualTypeERPNS_4ExprERNS_8CastKindE\", \"clang::Sema::CheckAssignmentConstraints(clang::QualType, clang::Expr*&, clang::CastKind&)\"},\n    {\"_ZN5clang4Sema40CheckTransparentUnionArgumentConstraintsENS_8QualTypeERPNS_4ExprE\", \"clang::Sema::CheckTransparentUnionArgumentConstraints(clang::QualType, clang::Expr*&)\"},\n    {\"_ZN5clang4Sema32CheckSingleAssignmentConstraintsENS_8QualTypeERPNS_4ExprE\", \"clang::Sema::CheckSingleAssignmentConstraints(clang::QualType, clang::Expr*&)\"},\n    {\"_ZN5clang4Sema15InvalidOperandsENS_14SourceLocationERPNS_4ExprES4_\", \"clang::Sema::InvalidOperands(clang::SourceLocation, clang::Expr*&, clang::Expr*&)\"},\n    {\"_ZN5clang4Sema27CheckMultiplyDivideOperandsERPNS_4ExprES3_NS_14SourceLocationEbb\", \"clang::Sema::CheckMultiplyDivideOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang4Sema22CheckRemainderOperandsERPNS_4ExprES3_NS_14SourceLocationEb\", \"clang::Sema::CheckRemainderOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema21CheckAdditionOperandsERPNS_4ExprES3_NS_14SourceLocationEPNS_8QualTypeE\", \"clang::Sema::CheckAdditionOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, clang::QualType*)\"},\n    {\"_ZN5clang4Sema24CheckSubtractionOperandsERPNS_4ExprES3_NS_14SourceLocationEPNS_8QualTypeE\", \"clang::Sema::CheckSubtractionOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, clang::QualType*)\"},\n    {\"_ZN5clang4Sema18CheckShiftOperandsERPNS_4ExprES3_NS_14SourceLocationEb\", \"clang::Sema::CheckShiftOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema20CheckCompareOperandsERPNS_4ExprES3_NS_14SourceLocationEjb\", \"clang::Sema::CheckCompareOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, unsigned int, bool)\"},\n    {\"_ZN5clang4Sema26CheckVectorCompareOperandsERPNS_4ExprES3_NS_14SourceLocationEb\", \"clang::Sema::CheckVectorCompareOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema23CheckAssignmentOperandsEPNS_4ExprERS2_NS_14SourceLocationENS_8QualTypeE\", \"clang::Sema::CheckAssignmentOperands(clang::Expr*, clang::Expr*&, clang::SourceLocation, clang::QualType)\"},\n    {\"_Z24CheckForModifiableLvaluePN5clang4ExprENS_14SourceLocationERNS_4SemaE\", \"CheckForModifiableLvalue(clang::Expr*, clang::SourceLocation, clang::Sema&)\"},\n    {\"_ZN5clang4Sema24ConvertPropertyForLValueERPNS_4ExprES3_RNS_8QualTypeE\", \"clang::Sema::ConvertPropertyForLValue(clang::Expr*&, clang::Expr*&, clang::QualType&)\"},\n    {\"_ZN5clang4Sema24DiagnoseAssignmentResultENS0_17AssignConvertTypeENS_14SourceLocationENS_8QualTypeES3_PNS_4ExprENS0_16AssignmentActionEPb\", \"clang::Sema::DiagnoseAssignmentResult(clang::Sema::AssignConvertType, clang::SourceLocation, clang::QualType, clang::QualType, clang::Expr*, clang::Sema::AssignmentAction, bool*)\"},\n    {\"_ZN5clang4Sema18CreateBuiltinBinOpENS_14SourceLocationENS_18BinaryOperatorKindEPNS_4ExprES4_\", \"clang::Sema::CreateBuiltinBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema10BuildBinOpEPNS_5ScopeENS_14SourceLocationENS_18BinaryOperatorKindEPNS_4ExprES6_\", \"clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema20CreateBuiltinUnaryOpENS_14SourceLocationENS_17UnaryOperatorKindEPNS_4ExprE\", \"clang::Sema::CreateBuiltinUnaryOp(clang::SourceLocation, clang::UnaryOperatorKind, clang::Expr*)\"},\n    {\"_Z30CheckIncrementDecrementOperandRN5clang4SemaEPNS_4ExprERNS_13ExprValueKindENS_14SourceLocationEbb\", \"CheckIncrementDecrementOperand(clang::Sema&, clang::Expr*, clang::ExprValueKind&, clang::SourceLocation, bool, bool)\"},\n    {\"_Z23CheckIndirectionOperandRN5clang4SemaEPNS_4ExprERNS_13ExprValueKindENS_14SourceLocationE\", \"CheckIndirectionOperand(clang::Sema&, clang::Expr*, clang::ExprValueKind&, clang::SourceLocation)\"},\n    {\"_Z20CheckRealImagOperandRN5clang4SemaERPNS_4ExprENS_14SourceLocationEb\", \"CheckRealImagOperand(clang::Sema&, clang::Expr*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema12ActOnUnaryOpEPNS_5ScopeENS_14SourceLocationENS_3tok9TokenKindEPNS_4ExprE\", \"clang::Sema::ActOnUnaryOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*)\"},\n    {\"_ZN5clang4Sema14ActOnAddrLabelENS_14SourceLocationES1_PNS_14IdentifierInfoE\", \"clang::Sema::ActOnAddrLabel(clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema13ActOnStmtExprENS_14SourceLocationEPNS_4StmtES1_\", \"clang::Sema::ActOnStmtExpr(clang::SourceLocation, clang::Stmt*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20BuildBuiltinOffsetOfENS_14SourceLocationEPNS_14TypeSourceInfoEPNS0_17OffsetOfComponentEjS1_\", \"clang::Sema::BuildBuiltinOffsetOf(clang::SourceLocation, clang::TypeSourceInfo*, clang::Sema::OffsetOfComponent*, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20ActOnBuiltinOffsetOfEPNS_5ScopeENS_14SourceLocationES3_NS_9OpaquePtrINS_8QualTypeEEEPNS0_17OffsetOfComponentEjS3_\", \"clang::Sema::ActOnBuiltinOffsetOf(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::Sema::OffsetOfComponent*, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema15ActOnChooseExprENS_14SourceLocationEPNS_4ExprES3_S3_S1_\", \"clang::Sema::ActOnChooseExpr(clang::SourceLocation, clang::Expr*, clang::Expr*, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema15ActOnBlockStartENS_14SourceLocationEPNS_5ScopeE\", \"clang::Sema::ActOnBlockStart(clang::SourceLocation, clang::Scope*)\"},\n    {\"_ZN5clang4Sema19ActOnBlockArgumentsERNS_10DeclaratorEPNS_5ScopeE\", \"clang::Sema::ActOnBlockArguments(clang::Declarator&, clang::Scope*)\"},\n    {\"_ZN5clang4Sema15ActOnBlockErrorENS_14SourceLocationEPNS_5ScopeE\", \"clang::Sema::ActOnBlockError(clang::SourceLocation, clang::Scope*)\"},\n    {\"_ZN5clang4Sema18ActOnBlockStmtExprENS_14SourceLocationEPNS_4StmtEPNS_5ScopeE\", \"clang::Sema::ActOnBlockStmtExpr(clang::SourceLocation, clang::Stmt*, clang::Scope*)\"},\n    {\"_ZN5clang4Sema10ActOnVAArgENS_14SourceLocationEPNS_4ExprENS_9OpaquePtrINS_8QualTypeEEES1_\", \"clang::Sema::ActOnVAArg(clang::SourceLocation, clang::Expr*, clang::OpaquePtr<clang::QualType>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14BuildVAArgExprENS_14SourceLocationEPNS_4ExprEPNS_14TypeSourceInfoES1_\", \"clang::Sema::BuildVAArgExpr(clang::SourceLocation, clang::Expr*, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema16ActOnGNUNullExprENS_14SourceLocationE\", \"clang::Sema::ActOnGNUNullExpr(clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema31VerifyIntegerConstantExpressionEPKNS_4ExprEPN4llvm6APSIntE\", \"clang::Sema::VerifyIntegerConstantExpression(clang::Expr const*, llvm::APSInt*)\"},\n    {\"_ZN5clang4Sema31PushExpressionEvaluationContextENS0_27ExpressionEvaluationContextE\", \"clang::Sema::PushExpressionEvaluationContext(clang::Sema::ExpressionEvaluationContext)\"},\n    {\"_ZN5clang4Sema30PopExpressionEvaluationContextEv\", \"clang::Sema::PopExpressionEvaluationContext()\"},\n    {\"_ZN5clang4Sema32MarkDeclarationsReferencedInTypeENS_14SourceLocationENS_8QualTypeE\", \"clang::Sema::MarkDeclarationsReferencedInType(clang::SourceLocation, clang::QualType)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE12TraverseTypeENS_8QualTypeE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseType(clang::QualType)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_119EvaluatedExprMarkerEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::EvaluatedExprMarker, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang4Sema29DiagnoseAssignmentAsConditionEPNS_4ExprE\", \"clang::Sema::DiagnoseAssignmentAsCondition(clang::Expr*)\"},\n    {\"_ZN5clang4Sema31DiagnoseEqualityWithExtraParensEPNS_9ParenExprE\", \"clang::Sema::DiagnoseEqualityWithExtraParens(clang::ParenExpr*)\"},\n    {\"_ZN5clang4Sema21CheckBooleanConditionERPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::CheckBooleanCondition(clang::Expr*&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema21ActOnBooleanConditionEPNS_5ScopeENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnBooleanCondition(clang::Scope*, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang20EvaluatedExprVisitorIN12_GLOBAL__N_119EvaluatedExprMarkerEE9VisitStmtEPNS_4StmtE\", \"clang::EvaluatedExprVisitor<(anonymous namespace)::EvaluatedExprMarker>::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE27TraverseNestedNameSpecifierEPNS_19NestedNameSpecifierE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseNestedNameSpecifier(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE24TraverseTemplateArgumentERKNS_16TemplateArgumentE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE12TraverseStmtEPNS_4StmtE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseStmt(clang::Stmt*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE15TraverseTypeLocENS_7TypeLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseTypeLoc(clang::TypeLoc)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE27TraverseTemplateArgumentLocERKNS_19TemplateArgumentLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseTemplateArgumentLoc(clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE12TraverseDeclEPNS_4DeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseDecl(clang::Decl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE24TraverseDeclaratorHelperEPNS_14DeclaratorDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseDeclaratorHelper(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE22TraverseFunctionHelperEPNS_12FunctionDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseFunctionHelper(clang::FunctionDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_119MarkReferencedDeclsEE23TraverseCXXRecordHelperEPNS_13CXXRecordDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::MarkReferencedDecls>::TraverseCXXRecordHelper(clang::CXXRecordDecl*)\"},\n    {\"_Z38EmitDiagnosticForLogicalAndInLogicalOrRN5clang4SemaENS_14SourceLocationEPNS_4ExprE\", \"EmitDiagnosticForLogicalAndInLogicalOr(clang::Sema&, clang::SourceLocation, clang::Expr*)\"},\n    {\"_Z18SuggestParenthesesRN5clang4SemaENS_14SourceLocationERKNS_17PartialDiagnosticES5_NS_11SourceRangeES5_S6_\", \"SuggestParentheses(clang::Sema&, clang::SourceLocation, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::SourceRange, clang::PartialDiagnostic const&, clang::SourceRange)\"},\n    {\"_Z40FindGetterSetterNameDeclFromProtocolListPKN5clang16ObjCProtocolDeclEPNS_14IdentifierInfoERKNS_8SelectorERNS_10ASTContextE\", \"FindGetterSetterNameDeclFromProtocolList(clang::ObjCProtocolDecl const*, clang::IdentifierInfo*, clang::Selector const&, clang::ASTContext&)\"},\n    {\"_Z16propagateCaptureRN5clang4SemaEjRKNS_9BlockDecl7CaptureE\", \"propagateCapture(clang::Sema&, unsigned int, clang::BlockDecl::Capture const&)\"},\n    {\"_ZN5clang13SelectorTable19constructSetterNameERNS_15IdentifierTableERS0_PKNS_14IdentifierInfoE\", \"clang::SelectorTable::constructSetterName(clang::IdentifierTable&, clang::SelectorTable&, clang::IdentifierInfo const*)\"},\n    {\"_ZN5clang4Sema20CheckBitwiseOperandsERPNS_4ExprES3_NS_14SourceLocationEb\", \"clang::Sema::CheckBitwiseOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema20CheckLogicalOperandsERPNS_4ExprES3_NS_14SourceLocationEj\", \"clang::Sema::CheckLogicalOperands(clang::Expr*&, clang::Expr*&, clang::SourceLocation, unsigned int)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12NoReturnAttrEEEPT_v\", \"clang::NoReturnAttr* clang::Decl::getAttr<clang::NoReturnAttr>() const\"},\n    {\"_ZN5clang4Sema33ExpressionEvaluationContextRecord7DestroyEv\", \"clang::Sema::ExpressionEvaluationContextRecord::Destroy()\"},\n    {\"_ZN5clang4Sema33ExpressionEvaluationContextRecord13addDiagnosticENS_14SourceLocationERKNS_17PartialDiagnosticE\", \"clang::Sema::ExpressionEvaluationContextRecord::addDiagnostic(clang::SourceLocation, clang::PartialDiagnostic const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang12OffsetOfExpr12OffsetOfNodeELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::OffsetOfExpr::OffsetOfNode, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_9LabelStmtENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::LabelStmt*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::LabelStmt*> >::InsertIntoBucket(clang::IdentifierInfo* const&, clang::LabelStmt* const&, std::pair<clang::IdentifierInfo*, clang::LabelStmt*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_9LabelStmtENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::LabelStmt*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::LabelStmt*> >::grow(unsigned int)\"},\n    {\"_ZN5clang10ChooseExprC2ENS_14SourceLocationEPNS_4ExprES3_S3_NS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindES1_bb\", \"clang::ChooseExpr::ChooseExpr(clang::SourceLocation, clang::Expr*, clang::Expr*, clang::Expr*, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang17CXXDefaultArgExprC2ENS_4Stmt9StmtClassENS_14SourceLocationEPNS_11ParmVarDeclE\", \"clang::CXXDefaultArgExpr::CXXDefaultArgExpr(clang::Stmt::StmtClass, clang::SourceLocation, clang::ParmVarDecl*)\"},\n    {\"_ZN5clang18ArraySubscriptExprC2EPNS_4ExprES2_NS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindENS_14SourceLocationE\", \"clang::ArraySubscriptExpr::ArraySubscriptExpr(clang::Expr*, clang::Expr*, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind, clang::SourceLocation)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang7VarDeclEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<clang::VarDecl*, unsigned int, llvm::DenseMapInfo<clang::VarDecl*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::VarDecl* const&, unsigned int const&, std::pair<clang::VarDecl*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang7VarDeclEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<clang::VarDecl*, unsigned int, llvm::DenseMapInfo<clang::VarDecl*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang4Sema17getDestructorNameENS_14SourceLocationERNS_14IdentifierInfoES1_PNS_5ScopeERNS_12CXXScopeSpecENS_9OpaquePtrINS_8QualTypeEEEb\", \"clang::Sema::getDestructorName(clang::SourceLocation, clang::IdentifierInfo&, clang::SourceLocation, clang::Scope*, clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>, bool)\"},\n    {\"_ZN5clang4Sema14BuildCXXTypeIdENS_8QualTypeENS_14SourceLocationEPNS_14TypeSourceInfoES2_\", \"clang::Sema::BuildCXXTypeId(clang::QualType, clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14BuildCXXTypeIdENS_8QualTypeENS_14SourceLocationEPNS_4ExprES2_\", \"clang::Sema::BuildCXXTypeId(clang::QualType, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14ActOnCXXTypeidENS_14SourceLocationES1_bPvS1_\", \"clang::Sema::ActOnCXXTypeid(clang::SourceLocation, clang::SourceLocation, bool, void*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14BuildCXXUuidofENS_8QualTypeENS_14SourceLocationEPNS_14TypeSourceInfoES2_\", \"clang::Sema::BuildCXXUuidof(clang::QualType, clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_Z17GetUuidAttrOfTypeN5clang8QualTypeE\", \"GetUuidAttrOfType(clang::QualType)\"},\n    {\"_ZN5clang4Sema14BuildCXXUuidofENS_8QualTypeENS_14SourceLocationEPNS_4ExprES2_\", \"clang::Sema::BuildCXXUuidof(clang::QualType, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema14ActOnCXXUuidofENS_14SourceLocationES1_bPvS1_\", \"clang::Sema::ActOnCXXUuidof(clang::SourceLocation, clang::SourceLocation, bool, void*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19ActOnCXXBoolLiteralENS_14SourceLocationENS_3tok9TokenKindE\", \"clang::Sema::ActOnCXXBoolLiteral(clang::SourceLocation, clang::tok::TokenKind)\"},\n    {\"_ZN5clang4Sema22ActOnCXXNullPtrLiteralENS_14SourceLocationE\", \"clang::Sema::ActOnCXXNullPtrLiteral(clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema13ActOnCXXThrowENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnCXXThrow(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema20CheckCXXThrowOperandENS_14SourceLocationERPNS_4ExprE\", \"clang::Sema::CheckCXXThrowOperand(clang::SourceLocation, clang::Expr*&)\"},\n    {\"_ZN5clang4Sema17tryCaptureCXXThisEv\", \"clang::Sema::tryCaptureCXXThis()\"},\n    {\"_ZN5clang4Sema12ActOnCXXThisENS_14SourceLocationE\", \"clang::Sema::ActOnCXXThis(clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema25ActOnCXXTypeConstructExprENS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationENS_11ASTMultiPtrIPNS_4ExprEEES4_\", \"clang::Sema::ActOnCXXTypeConstructExpr(clang::OpaquePtr<clang::QualType>, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema25BuildCXXTypeConstructExprEPNS_14TypeSourceInfoENS_14SourceLocationENS_11ASTMultiPtrIPNS_4ExprEEES3_\", \"clang::Sema::BuildCXXTypeConstructExpr(clang::TypeSourceInfo*, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema11ActOnCXXNewENS_14SourceLocationEbS1_NS_11ASTMultiPtrIPNS_4ExprEEES1_NS_11SourceRangeERNS_10DeclaratorES1_S5_S1_\", \"clang::Sema::ActOnCXXNew(clang::SourceLocation, bool, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation, clang::SourceRange, clang::Declarator&, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema11BuildCXXNewENS_14SourceLocationEbS1_NS_11ASTMultiPtrIPNS_4ExprEEES1_NS_11SourceRangeENS_8QualTypeEPNS_14TypeSourceInfoES4_S1_S5_S1_\", \"clang::Sema::BuildCXXNew(clang::SourceLocation, bool, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation, clang::SourceRange, clang::QualType, clang::TypeSourceInfo*, clang::Expr*, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18CheckAllocatedTypeENS_8QualTypeENS_14SourceLocationENS_11SourceRangeE\", \"clang::Sema::CheckAllocatedType(clang::QualType, clang::SourceLocation, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema23FindAllocationFunctionsENS_14SourceLocationENS_11SourceRangeEbNS_8QualTypeEbPPNS_4ExprEjRPNS_12FunctionDeclES9_\", \"clang::Sema::FindAllocationFunctions(clang::SourceLocation, clang::SourceRange, bool, clang::QualType, bool, clang::Expr**, unsigned int, clang::FunctionDecl*&, clang::FunctionDecl*&)\"},\n    {\"_Z28doesUsualArrayDeleteWantSizeRN5clang4SemaENS_14SourceLocationENS_8QualTypeE\", \"doesUsualArrayDeleteWantSize(clang::Sema&, clang::SourceLocation, clang::QualType)\"},\n    {\"_ZN5clang4Sema22FindAllocationOverloadENS_14SourceLocationENS_11SourceRangeENS_15DeclarationNameEPPNS_4ExprEjPNS_11DeclContextEbRPNS_12FunctionDeclE\", \"clang::Sema::FindAllocationOverload(clang::SourceLocation, clang::SourceRange, clang::DeclarationName, clang::Expr**, unsigned int, clang::DeclContext*, bool, clang::FunctionDecl*&)\"},\n    {\"_ZN5clang4Sema22DeclareGlobalNewDeleteEv\", \"clang::Sema::DeclareGlobalNewDelete()\"},\n    {\"_ZN5clang4Sema31DeclareGlobalAllocationFunctionENS_15DeclarationNameENS_8QualTypeES2_b\", \"clang::Sema::DeclareGlobalAllocationFunction(clang::DeclarationName, clang::QualType, clang::QualType, bool)\"},\n    {\"_ZN5clang4Sema24FindDeallocationFunctionENS_14SourceLocationEPNS_13CXXRecordDeclENS_15DeclarationNameERPNS_12FunctionDeclE\", \"clang::Sema::FindDeallocationFunction(clang::SourceLocation, clang::CXXRecordDecl*, clang::DeclarationName, clang::FunctionDecl*&)\"},\n    {\"_ZN5clang4Sema14ActOnCXXDeleteENS_14SourceLocationEbbPNS_4ExprE\", \"clang::Sema::ActOnCXXDelete(clang::SourceLocation, bool, bool, clang::Expr*)\"},\n    {\"_ZN5clang4Sema22CheckConditionVariableEPNS_7VarDeclENS_14SourceLocationEb\", \"clang::Sema::CheckConditionVariable(clang::VarDecl*, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema24CheckCXXBooleanConditionERPNS_4ExprE\", \"clang::Sema::CheckCXXBooleanCondition(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema42IsStringLiteralToNonConstPointerConversionEPNS_4ExprENS_8QualTypeE\", \"clang::Sema::IsStringLiteralToNonConstPointerConversion(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang4Sema25PerformImplicitConversionERPNS_4ExprENS_8QualTypeERKNS_26ImplicitConversionSequenceENS0_16AssignmentActionEb\", \"clang::Sema::PerformImplicitConversion(clang::Expr*&, clang::QualType, clang::ImplicitConversionSequence const&, clang::Sema::AssignmentAction, bool)\"},\n    {\"_ZN5clang4Sema25PerformImplicitConversionERPNS_4ExprENS_8QualTypeERKNS_26StandardConversionSequenceENS0_16AssignmentActionEb\", \"clang::Sema::PerformImplicitConversion(clang::Expr*&, clang::QualType, clang::StandardConversionSequence const&, clang::Sema::AssignmentAction, bool)\"},\n    {\"_ZN5clang4Sema19ActOnUnaryTypeTraitENS_14UnaryTypeTraitENS_14SourceLocationENS_9OpaquePtrINS_8QualTypeEEES2_\", \"clang::Sema::ActOnUnaryTypeTrait(clang::UnaryTypeTrait, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19BuildUnaryTypeTraitENS_14UnaryTypeTraitENS_14SourceLocationEPNS_14TypeSourceInfoES2_\", \"clang::Sema::BuildUnaryTypeTrait(clang::UnaryTypeTrait, clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20ActOnBinaryTypeTraitENS_15BinaryTypeTraitENS_14SourceLocationENS_9OpaquePtrINS_8QualTypeEEES5_S2_\", \"clang::Sema::ActOnBinaryTypeTrait(clang::BinaryTypeTrait, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::OpaquePtr<clang::QualType>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20BuildBinaryTypeTraitENS_15BinaryTypeTraitENS_14SourceLocationEPNS_14TypeSourceInfoES4_S2_\", \"clang::Sema::BuildBinaryTypeTrait(clang::BinaryTypeTrait, clang::SourceLocation, clang::TypeSourceInfo*, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema28CheckPointerToMemberOperandsERPNS_4ExprES3_RNS_13ExprValueKindENS_14SourceLocationEb\", \"clang::Sema::CheckPointerToMemberOperands(clang::Expr*&, clang::Expr*&, clang::ExprValueKind&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema27CXXCheckConditionalOperandsERPNS_4ExprES3_S3_S3_RNS_13ExprValueKindERNS_14ExprObjectKindENS_14SourceLocationE\", \"clang::Sema::CXXCheckConditionalOperands(clang::Expr*&, clang::Expr*&, clang::Expr*&, clang::Expr*&, clang::ExprValueKind&, clang::ExprObjectKind&, clang::SourceLocation)\"},\n    {\"_Z19TryClassUnificationRN5clang4SemaEPNS_4ExprES3_NS_14SourceLocationERbRNS_8QualTypeE\", \"TryClassUnification(clang::Sema&, clang::Expr*, clang::Expr*, clang::SourceLocation, bool&, clang::QualType&)\"},\n    {\"_Z21ConvertForConditionalRN5clang4SemaERPNS_4ExprENS_8QualTypeE\", \"ConvertForConditional(clang::Sema&, clang::Expr*&, clang::QualType)\"},\n    {\"_ZN5clang4Sema24FindCompositePointerTypeENS_14SourceLocationERPNS_4ExprES4_Pb\", \"clang::Sema::FindCompositePointerType(clang::SourceLocation, clang::Expr*&, clang::Expr*&, bool*)\"},\n    {\"_ZN5clang4Sema20MaybeBindToTemporaryEPNS_4ExprE\", \"clang::Sema::MaybeBindToTemporary(clang::Expr*)\"},\n    {\"_ZN5clang4Sema27MaybeCreateExprWithCleanupsEPNS_4ExprE\", \"clang::Sema::MaybeCreateExprWithCleanups(clang::Expr*)\"},\n    {\"_ZN5clang4Sema27MaybeCreateExprWithCleanupsENS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Sema::MaybeCreateExprWithCleanups(clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_ZN5clang4Sema27MaybeCreateStmtWithCleanupsEPNS_4StmtE\", \"clang::Sema::MaybeCreateStmtWithCleanups(clang::Stmt*)\"},\n    {\"_ZN5clang4Sema28ActOnStartCXXMemberReferenceEPNS_5ScopeEPNS_4ExprENS_14SourceLocationENS_3tok9TokenKindERNS_9OpaquePtrINS_8QualTypeEEERb\", \"clang::Sema::ActOnStartCXXMemberReference(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::tok::TokenKind, clang::OpaquePtr<clang::QualType>&, bool&)\"},\n    {\"_ZN5clang4Sema21DiagnoseDtorReferenceENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::DiagnoseDtorReference(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema25BuildPseudoDestructorExprEPNS_4ExprENS_14SourceLocationENS_3tok9TokenKindERKNS_12CXXScopeSpecEPNS_14TypeSourceInfoES3_S3_NS_27PseudoDestructorTypeStorageEb\", \"clang::Sema::BuildPseudoDestructorExpr(clang::Expr*, clang::SourceLocation, clang::tok::TokenKind, clang::CXXScopeSpec const&, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation, clang::PseudoDestructorTypeStorage, bool)\"},\n    {\"_ZN5clang4Sema25ActOnPseudoDestructorExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationENS_3tok9TokenKindERNS_12CXXScopeSpecERNS_13UnqualifiedIdES5_S5_SB_b\", \"clang::Sema::ActOnPseudoDestructorExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::tok::TokenKind, clang::CXXScopeSpec&, clang::UnqualifiedId&, clang::SourceLocation, clang::SourceLocation, clang::UnqualifiedId&, bool)\"},\n    {\"_ZN5clang4Sema22BuildCXXMemberCallExprEPNS_4ExprEPNS_9NamedDeclEPNS_13CXXMethodDeclE\", \"clang::Sema::BuildCXXMemberCallExpr(clang::Expr*, clang::NamedDecl*, clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang4Sema20BuildCXXNoexceptExprENS_14SourceLocationEPNS_4ExprES1_\", \"clang::Sema::BuildCXXNoexceptExpr(clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17ActOnNoexceptExprENS_14SourceLocationES1_PNS_4ExprES1_\", \"clang::Sema::ActOnNoexceptExpr(clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema23IgnoredValueConversionsERPNS_4ExprE\", \"clang::Sema::IgnoredValueConversions(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema19ActOnFinishFullExprEPNS_4ExprE\", \"clang::Sema::ActOnFinishFullExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema19ActOnFinishFullStmtEPNS_4StmtE\", \"clang::Sema::ActOnFinishFullStmt(clang::Stmt*)\"},\n    {\"_ZN5clang10Declarator19DropFirstTypeObjectEv\", \"clang::Declarator::DropFirstTypeObject()\"},\n    {\"_ZN4llvm11SmallVectorIPN5clang4ExprELj8EEC2EjRKS3_\", \"llvm::SmallVector<clang::Expr*, 8u>::SmallVector(unsigned int, clang::Expr* const&)\"},\n    {\"_ZN5clang19BinaryTypeTraitExprC2ENS_14SourceLocationENS_15BinaryTypeTraitEPNS_14TypeSourceInfoES4_bS1_NS_8QualTypeE\", \"clang::BinaryTypeTraitExpr::BinaryTypeTraitExpr(clang::SourceLocation, clang::BinaryTypeTrait, clang::TypeSourceInfo*, clang::TypeSourceInfo*, bool, clang::SourceLocation, clang::QualType)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_8UuidAttrEEEPT_v\", \"clang::UuidAttr* clang::Decl::getAttr<clang::UuidAttr>() const\"},\n    {\"_ZN5clang4Sema22ParseObjCStringLiteralEPNS_14SourceLocationEPPNS_4ExprEj\", \"clang::Sema::ParseObjCStringLiteral(clang::SourceLocation*, clang::Expr**, unsigned int)\"},\n    {\"_ZN5clang4Sema25BuildObjCEncodeExpressionENS_14SourceLocationEPNS_14TypeSourceInfoES1_\", \"clang::Sema::BuildObjCEncodeExpression(clang::SourceLocation, clang::TypeSourceInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema25ParseObjCEncodeExpressionENS_14SourceLocationES1_S1_NS_9OpaquePtrINS_8QualTypeEEES1_\", \"clang::Sema::ParseObjCEncodeExpression(clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::OpaquePtr<clang::QualType>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema27ParseObjCSelectorExpressionENS_8SelectorENS_14SourceLocationES2_S2_S2_\", \"clang::Sema::ParseObjCSelectorExpression(clang::Selector, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema27ParseObjCProtocolExpressionEPNS_14IdentifierInfoENS_14SourceLocationES3_S3_S3_\", \"clang::Sema::ParseObjCProtocolExpression(clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18tryCaptureObjCSelfEv\", \"clang::Sema::tryCaptureObjCSelf()\"},\n    {\"_ZN5clang4Sema25CheckMessageArgumentTypesEPPNS_4ExprEjNS_8SelectorEPNS_14ObjCMethodDeclEbNS_14SourceLocationES7_RNS_8QualTypeERNS_13ExprValueKindE\", \"clang::Sema::CheckMessageArgumentTypes(clang::Expr**, unsigned int, clang::Selector, clang::ObjCMethodDecl*, bool, clang::SourceLocation, clang::SourceLocation, clang::QualType&, clang::ExprValueKind&)\"},\n    {\"_ZN5clang4Sema10isSelfExprEPNS_4ExprE\", \"clang::Sema::isSelfExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema24LookupPrivateClassMethodENS_8SelectorEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::LookupPrivateClassMethod(clang::Selector, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema27LookupPrivateInstanceMethodENS_8SelectorEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::LookupPrivateInstanceMethod(clang::Selector, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema25HandleExprPropertyRefExprEPKNS_21ObjCObjectPointerTypeEPNS_4ExprENS_15DeclarationNameENS_14SourceLocationES7_NS_8QualTypeEb\", \"clang::Sema::HandleExprPropertyRefExpr(clang::ObjCObjectPointerType const*, clang::Expr*, clang::DeclarationName, clang::SourceLocation, clang::SourceLocation, clang::QualType, bool)\"},\n    {\"_ZN5clang4Sema25ActOnClassPropertyRefExprERNS_14IdentifierInfoES2_NS_14SourceLocationES3_\", \"clang::Sema::ActOnClassPropertyRefExpr(clang::IdentifierInfo&, clang::IdentifierInfo&, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18getObjCMessageKindEPNS_5ScopeEPNS_14IdentifierInfoENS_14SourceLocationEbbRNS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::getObjCMessageKind(clang::Scope*, clang::IdentifierInfo*, clang::SourceLocation, bool, bool, clang::OpaquePtr<clang::QualType>&)\"},\n    {\"_ZN5clang4Sema17ActOnSuperMessageEPNS_5ScopeENS_14SourceLocationENS_8SelectorES3_S3_S3_NS_11ASTMultiPtrIPNS_4ExprEEE\", \"clang::Sema::ActOnSuperMessage(clang::Scope*, clang::SourceLocation, clang::Selector, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema20BuildInstanceMessageEPNS_4ExprENS_8QualTypeENS_14SourceLocationENS_8SelectorEPNS_14ObjCMethodDeclES4_S4_S4_NS_11ASTMultiPtrIS2_EE\", \"clang::Sema::BuildInstanceMessage(clang::Expr*, clang::QualType, clang::SourceLocation, clang::Selector, clang::ObjCMethodDecl*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema17BuildClassMessageEPNS_14TypeSourceInfoENS_8QualTypeENS_14SourceLocationENS_8SelectorEPNS_14ObjCMethodDeclES4_S4_S4_NS_11ASTMultiPtrIPNS_4ExprEEE\", \"clang::Sema::BuildClassMessage(clang::TypeSourceInfo*, clang::QualType, clang::SourceLocation, clang::Selector, clang::ObjCMethodDecl*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema17ActOnClassMessageEPNS_5ScopeENS_9OpaquePtrINS_8QualTypeEEENS_8SelectorENS_14SourceLocationES7_S7_NS_11ASTMultiPtrIPNS_4ExprEEE\", \"clang::Sema::ActOnClassMessage(clang::Scope*, clang::OpaquePtr<clang::QualType>, clang::Selector, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema20ActOnInstanceMessageEPNS_5ScopeEPNS_4ExprENS_8SelectorENS_14SourceLocationES6_S6_NS_11ASTMultiPtrIS4_EE\", \"clang::Sema::ActOnInstanceMessage(clang::Scope*, clang::Expr*, clang::Selector, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Expr*>)\"},\n    {\"_ZN5clang4Sema26ActOnDesignatedInitializerERNS_11DesignationENS_14SourceLocationEbNS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Sema::ActOnDesignatedInitializer(clang::Designation&, clang::SourceLocation, bool, clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_Z24CheckArrayDesignatorExprRN5clang4SemaEPNS_4ExprERN4llvm6APSIntE\", \"CheckArrayDesignatorExpr(clang::Sema&, clang::Expr*, llvm::APSInt&)\"},\n    {\"_ZN5clang4Sema13CheckInitListERKNS_17InitializedEntityERPNS_12InitListExprERNS_8QualTypeE\", \"clang::Sema::CheckInitList(clang::InitializedEntity const&, clang::InitListExpr*&, clang::QualType&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListCheckerC1ERN5clang4SemaERKNS1_17InitializedEntityEPNS1_12InitListExprERNS1_8QualTypeE\", \"(anonymous namespace)::InitListChecker::InitListChecker(clang::Sema&, clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType&)\"},\n    {\"_ZN5clang17InitializedEntityC1ERNS_10ASTContextEjRKS0_\", \"clang::InitializedEntity::InitializedEntity(clang::ASTContext&, unsigned int, clang::InitializedEntity const&)\"},\n    {\"_ZN5clang17InitializedEntityC2ERNS_10ASTContextEjRKS0_\", \"clang::InitializedEntity::InitializedEntity(clang::ASTContext&, unsigned int, clang::InitializedEntity const&)\"},\n    {\"_ZN5clang17InitializedEntity14InitializeBaseERNS_10ASTContextEPNS_16CXXBaseSpecifierEb\", \"clang::InitializedEntity::InitializeBase(clang::ASTContext&, clang::CXXBaseSpecifier*, bool)\"},\n    {\"_ZNK5clang17InitializedEntity7getNameEv\", \"clang::InitializedEntity::getName() const\"},\n    {\"_ZNK5clang17InitializedEntity7getDeclEv\", \"clang::InitializedEntity::getDecl() const\"},\n    {\"_ZNK5clang17InitializedEntity10allowsNRVOEv\", \"clang::InitializedEntity::allowsNRVO() const\"},\n    {\"_ZN5clang22InitializationSequence4Step7DestroyEv\", \"clang::InitializationSequence::Step::Destroy()\"},\n    {\"_ZNK5clang22InitializationSequence24isDirectReferenceBindingEv\", \"clang::InitializationSequence::isDirectReferenceBinding() const\"},\n    {\"_ZNK5clang22InitializationSequence11isAmbiguousEv\", \"clang::InitializationSequence::isAmbiguous() const\"},\n    {\"_ZNK5clang22InitializationSequence27isConstructorInitializationEv\", \"clang::InitializationSequence::isConstructorInitialization() const\"},\n    {\"_ZN5clang22InitializationSequence32AddAddressOverloadResolutionStepEPNS_12FunctionDeclENS_14DeclAccessPairE\", \"clang::InitializationSequence::AddAddressOverloadResolutionStep(clang::FunctionDecl*, clang::DeclAccessPair)\"},\n    {\"_ZN5clang22InitializationSequence24AddDerivedToBaseCastStepENS_8QualTypeENS_13ExprValueKindE\", \"clang::InitializationSequence::AddDerivedToBaseCastStep(clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang22InitializationSequence23AddReferenceBindingStepENS_8QualTypeEb\", \"clang::InitializationSequence::AddReferenceBindingStep(clang::QualType, bool)\"},\n    {\"_ZN5clang22InitializationSequence28AddExtraneousCopyToTemporaryENS_8QualTypeE\", \"clang::InitializationSequence::AddExtraneousCopyToTemporary(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence21AddUserConversionStepEPNS_12FunctionDeclENS_14DeclAccessPairENS_8QualTypeE\", \"clang::InitializationSequence::AddUserConversionStep(clang::FunctionDecl*, clang::DeclAccessPair, clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence30AddQualificationConversionStepENS_8QualTypeENS_13ExprValueKindE\", \"clang::InitializationSequence::AddQualificationConversionStep(clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang22InitializationSequence25AddConversionSequenceStepERKNS_26ImplicitConversionSequenceENS_8QualTypeE\", \"clang::InitializationSequence::AddConversionSequenceStep(clang::ImplicitConversionSequence const&, clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence25AddListInitializationStepENS_8QualTypeE\", \"clang::InitializationSequence::AddListInitializationStep(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence32AddConstructorInitializationStepEPNS_18CXXConstructorDeclENS_15AccessSpecifierENS_8QualTypeE\", \"clang::InitializationSequence::AddConstructorInitializationStep(clang::CXXConstructorDecl*, clang::AccessSpecifier, clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence25AddZeroInitializationStepENS_8QualTypeE\", \"clang::InitializationSequence::AddZeroInitializationStep(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence18AddCAssignmentStepENS_8QualTypeE\", \"clang::InitializationSequence::AddCAssignmentStep(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence17AddStringInitStepENS_8QualTypeE\", \"clang::InitializationSequence::AddStringInitStep(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence27AddObjCObjectConversionStepENS_8QualTypeE\", \"clang::InitializationSequence::AddObjCObjectConversionStep(clang::QualType)\"},\n    {\"_ZN5clang22InitializationSequence18SetOverloadFailureENS0_11FailureKindENS_17OverloadingResultE\", \"clang::InitializationSequence::SetOverloadFailure(clang::InitializationSequence::FailureKind, clang::OverloadingResult)\"},\n    {\"_ZN5clang22InitializationSequenceC1ERNS_4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPPNS_4ExprEj\", \"clang::InitializationSequence::InitializationSequence(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr**, unsigned int)\"},\n    {\"_ZN5clang22InitializationSequenceC2ERNS_4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPPNS_4ExprEj\", \"clang::InitializationSequence::InitializationSequence(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr**, unsigned int)\"},\n    {\"_Z12IsStringInitPN5clang4ExprENS_8QualTypeERNS_10ASTContextE\", \"IsStringInit(clang::Expr*, clang::QualType, clang::ASTContext&)\"},\n    {\"_Z28TryConstructorInitializationRN5clang4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPPNS_4ExprEjNS_8QualTypeERNS_22InitializationSequenceE\", \"TryConstructorInitialization(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr**, unsigned int, clang::QualType, clang::InitializationSequence&)\"},\n    {\"_Z24TryUserDefinedConversionRN5clang4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPNS_4ExprERNS_22InitializationSequenceE\", \"TryUserDefinedConversion(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr*, clang::InitializationSequence&)\"},\n    {\"_ZN5clang22InitializationSequenceD1Ev\", \"clang::InitializationSequence::~InitializationSequence()\"},\n    {\"_ZN5clang22InitializationSequenceD2Ev\", \"clang::InitializationSequence::~InitializationSequence()\"},\n    {\"_ZN5clang22InitializationSequence21PrintInitLocationNoteERNS_4SemaERKNS_17InitializedEntityE\", \"clang::InitializationSequence::PrintInitLocationNote(clang::Sema&, clang::InitializedEntity const&)\"},\n    {\"_ZN5clang22InitializationSequence7PerformERNS_4SemaERKNS_17InitializedEntityERKNS_18InitializationKindENS_11ASTMultiPtrIPNS_4ExprEEEPNS_8QualTypeE\", \"clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::ASTMultiPtr<clang::Expr*>, clang::QualType*)\"},\n    {\"_ZN5clang22InitializationSequence8DiagnoseERNS_4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPPNS_4ExprEj\", \"clang::InitializationSequence::Diagnose(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr**, unsigned int)\"},\n    {\"_Z10CopyObjectRN5clang4SemaENS_8QualTypeERKNS_17InitializedEntityENS_12ActionResultIPNS_4ExprELb1EEEb\", \"CopyObject(clang::Sema&, clang::QualType, clang::InitializedEntity const&, clang::ActionResult<clang::Expr*, true>, bool)\"},\n    {\"_Z15CheckStringInitPN5clang4ExprERNS_8QualTypeERNS_4SemaE\", \"CheckStringInit(clang::Expr*, clang::QualType&, clang::Sema&)\"},\n    {\"_ZNK5clang22InitializationSequence4dumpERN4llvm11raw_ostreamE\", \"clang::InitializationSequence::dump(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang22InitializationSequence4dumpEv\", \"clang::InitializationSequence::dump() const\"},\n    {\"_ZN5clang4Sema25PerformCopyInitializationERKNS_17InitializedEntityENS_14SourceLocationENS_12ActionResultIPNS_4ExprELb1EEE\", \"clang::Sema::PerformCopyInitialization(clang::InitializedEntity const&, clang::SourceLocation, clang::ActionResult<clang::Expr*, true>)\"},\n    {\"_Z32TryRefInitWithConversionFunctionRN5clang4SemaERKNS_17InitializedEntityERKNS_18InitializationKindEPNS_4ExprEbRNS_22InitializationSequenceE\", \"TryRefInitWithConversionFunction(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, clang::Expr*, bool, clang::InitializationSequence&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker26getStructuredSubobjectInitEPN5clang12InitListExprEjNS1_8QualTypeES3_jNS1_11SourceRangeE\", \"(anonymous namespace)::InitListChecker::getStructuredSubobjectInit(clang::InitListExpr*, unsigned int, clang::QualType, clang::InitListExpr*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker21CheckExplicitInitListERKN5clang17InitializedEntityEPNS1_12InitListExprERNS1_8QualTypeERjS6_S9_b\", \"(anonymous namespace)::InitListChecker::CheckExplicitInitList(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType&, unsigned int&, clang::InitListExpr*, unsigned int&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker26FillInValueInitializationsERKN5clang17InitializedEntityEPNS1_12InitListExprERb\", \"(anonymous namespace)::InitListChecker::FillInValueInitializations(clang::InitializedEntity const&, clang::InitListExpr*, bool&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker23FillInValueInitForFieldEjPN5clang9FieldDeclERKNS1_17InitializedEntityEPNS1_12InitListExprERb\", \"(anonymous namespace)::InitListChecker::FillInValueInitForField(unsigned int, clang::FieldDecl*, clang::InitializedEntity const&, clang::InitListExpr*, bool&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker21CheckListElementTypesERKN5clang17InitializedEntityEPNS1_12InitListExprERNS1_8QualTypeEbRjS6_S9_b\", \"(anonymous namespace)::InitListChecker::CheckListElementTypes(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType&, bool, unsigned int&, clang::InitListExpr*, unsigned int&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker15CheckScalarTypeERKN5clang17InitializedEntityEPNS1_12InitListExprENS1_8QualTypeERjS6_S8_\", \"(anonymous namespace)::InitListChecker::CheckScalarType(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType, unsigned int&, clang::InitListExpr*, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker21CheckStructUnionTypesERKN5clang17InitializedEntityEPNS1_12InitListExprENS1_8QualTypeENS1_11DeclContext22specific_decl_iteratorINS1_9FieldDeclEEEbRjS6_SC_b\", \"(anonymous namespace)::InitListChecker::CheckStructUnionTypes(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType, clang::DeclContext::specific_decl_iterator<clang::FieldDecl>, bool, unsigned int&, clang::InitListExpr*, unsigned int&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker14CheckArrayTypeERKN5clang17InitializedEntityEPNS1_12InitListExprERNS1_8QualTypeEN4llvm6APSIntEbRjS6_SB_\", \"(anonymous namespace)::InitListChecker::CheckArrayType(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType&, llvm::APSInt, bool, unsigned int&, clang::InitListExpr*, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker18CheckReferenceTypeERKN5clang17InitializedEntityEPNS1_12InitListExprENS1_8QualTypeERjS6_S8_\", \"(anonymous namespace)::InitListChecker::CheckReferenceType(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType, unsigned int&, clang::InitListExpr*, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker27UpdateStructuredListElementEPN5clang12InitListExprERjPNS1_4ExprE\", \"(anonymous namespace)::InitListChecker::UpdateStructuredListElement(clang::InitListExpr*, unsigned int&, clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker26CheckDesignatedInitializerERKN5clang17InitializedEntityEPNS1_12InitListExprEPNS1_18DesignatedInitExprEjRNS1_8QualTypeEPNS1_11DeclContext22specific_decl_iteratorINS1_9FieldDeclEEEPN4llvm6APSIntERjS6_SJ_bb\", \"(anonymous namespace)::InitListChecker::CheckDesignatedInitializer(clang::InitializedEntity const&, clang::InitListExpr*, clang::DesignatedInitExpr*, unsigned int, clang::QualType&, clang::DeclContext::specific_decl_iterator<clang::FieldDecl>*, llvm::APSInt*, unsigned int&, clang::InitListExpr*, unsigned int&, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker19CheckSubElementTypeERKN5clang17InitializedEntityEPNS1_12InitListExprENS1_8QualTypeERjS6_S8_\", \"(anonymous namespace)::InitListChecker::CheckSubElementType(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType, unsigned int&, clang::InitListExpr*, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_115InitListChecker21CheckImplicitInitListERKN5clang17InitializedEntityEPNS1_12InitListExprENS1_8QualTypeERjS6_S8_b\", \"(anonymous namespace)::InitListChecker::CheckImplicitInitList(clang::InitializedEntity const&, clang::InitListExpr*, clang::QualType, unsigned int&, clang::InitListExpr*, unsigned int&, bool)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang22InitializationSequence4StepELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::InitializationSequence::Step, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang12InitListExprESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::InitListExpr*, std::pair<clang::InitListExpr* const, clang::InitListExpr*>, std::_Select1st<std::pair<clang::InitListExpr* const, clang::InitListExpr*> >, std::less<clang::InitListExpr*>, std::allocator<std::pair<clang::InitListExpr* const, clang::InitListExpr*> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::InitListExpr* const, clang::InitListExpr*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang12InitListExprESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::InitListExpr*, std::pair<clang::InitListExpr* const, clang::InitListExpr*>, std::_Select1st<std::pair<clang::InitListExpr* const, clang::InitListExpr*> >, std::less<clang::InitListExpr*>, std::allocator<std::pair<clang::InitListExpr* const, clang::InitListExpr*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::InitListExpr* const, clang::InitListExpr*> >, std::pair<clang::InitListExpr* const, clang::InitListExpr*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang12InitListExprESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::InitListExpr*, std::pair<clang::InitListExpr* const, clang::InitListExpr*>, std::_Select1st<std::pair<clang::InitListExpr* const, clang::InitListExpr*> >, std::less<clang::InitListExpr*>, std::allocator<std::pair<clang::InitListExpr* const, clang::InitListExpr*> > >::_M_insert_unique(std::pair<clang::InitListExpr* const, clang::InitListExpr*> const&)\"},\n    {\"_ZN5clang12LookupResult9configureEv\", \"clang::LookupResult::configure()\"},\n    {\"_ZNK5clang12LookupResult6sanityEv\", \"clang::LookupResult::sanity() const\"},\n    {\"_ZN5clang12LookupResult11deletePathsEPNS_12CXXBasePathsE\", \"clang::LookupResult::deletePaths(clang::CXXBasePaths*)\"},\n    {\"_ZN5clang12LookupResult11resolveKindEv\", \"clang::LookupResult::resolveKind()\"},\n    {\"_ZN5clang12LookupResult21addDeclsFromBasePathsERKNS_12CXXBasePathsE\", \"clang::LookupResult::addDeclsFromBasePaths(clang::CXXBasePaths const&)\"},\n    {\"_ZN5clang12LookupResult26setAmbiguousBaseSubobjectsERNS_12CXXBasePathsE\", \"clang::LookupResult::setAmbiguousBaseSubobjects(clang::CXXBasePaths&)\"},\n    {\"_ZN5clang12LookupResult30setAmbiguousBaseSubobjectTypesERNS_12CXXBasePathsE\", \"clang::LookupResult::setAmbiguousBaseSubobjectTypes(clang::CXXBasePaths&)\"},\n    {\"_ZN5clang12LookupResult5printERN4llvm11raw_ostreamE\", \"clang::LookupResult::print(llvm::raw_ostream&)\"},\n    {\"_ZN5clang4Sema33ForceDeclarationOfImplicitMembersEPNS_13CXXRecordDeclE\", \"clang::Sema::ForceDeclarationOfImplicitMembers(clang::CXXRecordDecl*)\"},\n    {\"_Z31CanDeclareSpecialMemberFunctionRN5clang10ASTContextEPKNS_13CXXRecordDeclE\", \"CanDeclareSpecialMemberFunction(clang::ASTContext&, clang::CXXRecordDecl const*)\"},\n    {\"_ZN5clang4Sema13CppLookupNameERNS_12LookupResultEPNS_5ScopeE\", \"clang::Sema::CppLookupName(clang::LookupResult&, clang::Scope*)\"},\n    {\"_Z38DeclareImplicitMemberFunctionsWithNameRN5clang4SemaENS_15DeclarationNameEPKNS_11DeclContextE\", \"DeclareImplicitMemberFunctionsWithName(clang::Sema&, clang::DeclarationName, clang::DeclContext const*)\"},\n    {\"_Z16findOuterContextPN5clang5ScopeE\", \"findOuterContext(clang::Scope*)\"},\n    {\"_ZN5clang4Sema19LookupQualifiedNameERNS_12LookupResultEPNS_11DeclContextEb\", \"clang::Sema::LookupQualifiedName(clang::LookupResult&, clang::DeclContext*, bool)\"},\n    {\"_ZN12_GLOBAL__N_123UnqualUsingDirectiveSet15visitScopeChainEPN5clang5ScopeES3_\", \"(anonymous namespace)::UnqualUsingDirectiveSet::visitScopeChain(clang::Scope*, clang::Scope*)\"},\n    {\"_ZN12_GLOBAL__N_123UnqualUsingDirectiveSet4doneEv\", \"(anonymous namespace)::UnqualUsingDirectiveSet::done()\"},\n    {\"_ZN5clang4Sema10LookupNameERNS_12LookupResultEPNS_5ScopeEb\", \"clang::Sema::LookupName(clang::LookupResult&, clang::Scope*, bool)\"},\n    {\"_Z13LookupBuiltinRN5clang4SemaERNS_12LookupResultE\", \"LookupBuiltin(clang::Sema&, clang::LookupResult&)\"},\n    {\"_Z12LookupDirectRN5clang4SemaERNS_12LookupResultEPKNS_11DeclContextE\", \"LookupDirect(clang::Sema&, clang::LookupResult&, clang::DeclContext const*)\"},\n    {\"_Z15LookupAnyMemberPKN5clang16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"LookupAnyMember(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang4Sema16LookupParsedNameERNS_12LookupResultEPNS_5ScopeEPNS_12CXXScopeSpecEbb\", \"clang::Sema::LookupParsedName(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec*, bool, bool)\"},\n    {\"_ZN5clang4Sema23DiagnoseAmbiguousLookupERNS_12LookupResultE\", \"clang::Sema::DiagnoseAmbiguousLookup(clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema34FindAssociatedClassesAndNamespacesEPPNS_4ExprEjRN4llvm11SmallPtrSetIPNS_11DeclContextELj16EEERNS5_IPNS_13CXXRecordDeclELj16EEE\", \"clang::Sema::FindAssociatedClassesAndNamespaces(clang::Expr**, unsigned int, llvm::SmallPtrSet<clang::DeclContext*, 16u>&, llvm::SmallPtrSet<clang::CXXRecordDecl*, 16u>&)\"},\n    {\"_Z33addAssociatedClassesAndNamespacesRN12_GLOBAL__N_116AssociatedLookupEN5clang8QualTypeE\", \"addAssociatedClassesAndNamespaces((anonymous namespace)::AssociatedLookup&, clang::QualType)\"},\n    {\"_ZN5clang4Sema16LookupSingleNameEPNS_5ScopeENS_15DeclarationNameENS_14SourceLocationENS0_14LookupNameKindENS0_17RedeclarationKindE\", \"clang::Sema::LookupSingleName(clang::Scope*, clang::DeclarationName, clang::SourceLocation, clang::Sema::LookupNameKind, clang::Sema::RedeclarationKind)\"},\n    {\"_ZN5clang4Sema14LookupProtocolEPNS_14IdentifierInfoENS_14SourceLocationE\", \"clang::Sema::LookupProtocol(clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema28LookupOverloadedOperatorNameENS_22OverloadedOperatorKindEPNS_5ScopeENS_8QualTypeES4_RNS_17UnresolvedSetImplE\", \"clang::Sema::LookupOverloadedOperatorName(clang::OverloadedOperatorKind, clang::Scope*, clang::QualType, clang::QualType, clang::UnresolvedSetImpl&)\"},\n    {\"_Z38IsAcceptableNonMemberOperatorCandidatePN5clang12FunctionDeclENS_8QualTypeES2_RNS_10ASTContextE\", \"IsAcceptableNonMemberOperatorCandidate(clang::FunctionDecl*, clang::QualType, clang::QualType, clang::ASTContext&)\"},\n    {\"_ZN5clang4Sema18LookupConstructorsEPNS_13CXXRecordDeclE\", \"clang::Sema::LookupConstructors(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema16LookupDestructorEPNS_13CXXRecordDeclE\", \"clang::Sema::LookupDestructor(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang9ADLResult6insertEPNS_9NamedDeclE\", \"clang::ADLResult::insert(clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema23ArgumentDependentLookupENS_15DeclarationNameEbPPNS_4ExprEjRNS_9ADLResultE\", \"clang::Sema::ArgumentDependentLookup(clang::DeclarationName, bool, clang::Expr**, unsigned int, clang::ADLResult&)\"},\n    {\"_ZN5clang19VisibleDeclConsumerD0Ev\", \"clang::VisibleDeclConsumer::~VisibleDeclConsumer()\"},\n    {\"_ZN5clang19VisibleDeclConsumerD1Ev\", \"clang::VisibleDeclConsumer::~VisibleDeclConsumer()\"},\n    {\"_ZN5clang19VisibleDeclConsumerD2Ev\", \"clang::VisibleDeclConsumer::~VisibleDeclConsumer()\"},\n    {\"_ZN5clang4Sema18LookupVisibleDeclsEPNS_5ScopeENS0_14LookupNameKindERNS_19VisibleDeclConsumerEb\", \"clang::Sema::LookupVisibleDecls(clang::Scope*, clang::Sema::LookupNameKind, clang::VisibleDeclConsumer&, bool)\"},\n    {\"_ZN12_GLOBAL__N_117ShadowContextRAIIC1ERNS_18VisibleDeclsRecordE\", \"(anonymous namespace)::ShadowContextRAII::ShadowContextRAII((anonymous namespace)::VisibleDeclsRecord&)\"},\n    {\"_Z18LookupVisibleDeclsPN5clang5ScopeERNS_12LookupResultERN12_GLOBAL__N_123UnqualUsingDirectiveSetERNS_19VisibleDeclConsumerERNS4_18VisibleDeclsRecordE\", \"LookupVisibleDecls(clang::Scope*, clang::LookupResult&, (anonymous namespace)::UnqualUsingDirectiveSet&, clang::VisibleDeclConsumer&, (anonymous namespace)::VisibleDeclsRecord&)\"},\n    {\"_ZN12_GLOBAL__N_117ShadowContextRAIID1Ev\", \"(anonymous namespace)::ShadowContextRAII::~ShadowContextRAII()\"},\n    {\"_ZN5clang4Sema18LookupVisibleDeclsEPNS_11DeclContextENS0_14LookupNameKindERNS_19VisibleDeclConsumerEb\", \"clang::Sema::LookupVisibleDecls(clang::DeclContext*, clang::Sema::LookupNameKind, clang::VisibleDeclConsumer&, bool)\"},\n    {\"_Z18LookupVisibleDeclsPN5clang11DeclContextERNS_12LookupResultEbbRNS_19VisibleDeclConsumerERN12_GLOBAL__N_118VisibleDeclsRecordE\", \"LookupVisibleDecls(clang::DeclContext*, clang::LookupResult&, bool, bool, clang::VisibleDeclConsumer&, (anonymous namespace)::VisibleDeclsRecord&)\"},\n    {\"_ZN5clang4Sema11CorrectTypoERNS_12LookupResultEPNS_5ScopeEPNS_12CXXScopeSpecEPNS_11DeclContextEbNS0_18CorrectTypoContextEPKNS_21ObjCObjectPointerTypeE\", \"clang::Sema::CorrectTypo(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec*, clang::DeclContext*, bool, clang::Sema::CorrectTypoContext, clang::ObjCObjectPointerType const*)\"},\n    {\"_ZN12_GLOBAL__N_122TypoCorrectionConsumer9FoundNameEN4llvm9StringRefE\", \"(anonymous namespace)::TypoCorrectionConsumer::FoundName(llvm::StringRef)\"},\n    {\"_Z25LookupPotentialTypoResultRN5clang4SemaERNS_12LookupResultEPNS_14IdentifierInfoEPNS_5ScopeEPNS_12CXXScopeSpecEPNS_11DeclContextEbNS0_18CorrectTypoContextE\", \"LookupPotentialTypoResult(clang::Sema&, clang::LookupResult&, clang::IdentifierInfo*, clang::Scope*, clang::CXXScopeSpec*, clang::DeclContext*, bool, clang::Sema::CorrectTypoContext)\"},\n    {\"_ZN12_GLOBAL__N_122TypoCorrectionConsumerD1Ev\", \"(anonymous namespace)::TypoCorrectionConsumer::~TypoCorrectionConsumer()\"},\n    {\"_ZN12_GLOBAL__N_122TypoCorrectionConsumerD0Ev\", \"(anonymous namespace)::TypoCorrectionConsumer::~TypoCorrectionConsumer()\"},\n    {\"_ZN12_GLOBAL__N_122TypoCorrectionConsumer9FoundDeclEPN5clang9NamedDeclES3_b\", \"(anonymous namespace)::TypoCorrectionConsumer::FoundDecl(clang::NamedDecl*, clang::NamedDecl*, bool)\"},\n    {\"_ZN12_GLOBAL__N_118VisibleDeclsRecord11checkHiddenEPN5clang9NamedDeclE\", \"(anonymous namespace)::VisibleDeclsRecord::checkHidden(clang::NamedDecl*)\"},\n    {\"_ZN12_GLOBAL__N_118VisibleDeclsRecord3addEPN5clang9NamedDeclE\", \"(anonymous namespace)::VisibleDeclsRecord::add(clang::NamedDecl*)\"},\n    {\"_ZNK12_GLOBAL__N_123UnqualUsingDirectiveSet16getNamespacesForEPN5clang11DeclContextE\", \"(anonymous namespace)::UnqualUsingDirectiveSet::getNamespacesFor(clang::DeclContext*) const\"},\n    {\"_Z25CollectEnclosingNamespaceRN4llvm11SmallPtrSetIPN5clang11DeclContextELj16EEES3_\", \"CollectEnclosingNamespace(llvm::SmallPtrSet<clang::DeclContext*, 16u>&, clang::DeclContext*)\"},\n    {\"_Z33addAssociatedClassesAndNamespacesRN12_GLOBAL__N_116AssociatedLookupERKN5clang16TemplateArgumentE\", \"addAssociatedClassesAndNamespaces((anonymous namespace)::AssociatedLookup&, clang::TemplateArgument const&)\"},\n    {\"_ZSt16__introsort_loopIPN12_GLOBAL__N_116UnqualUsingEntryElNS1_10ComparatorEEvT_S4_T0_T1_\", \"void std::__introsort_loop<(anonymous namespace)::UnqualUsingEntry*, long, (anonymous namespace)::UnqualUsingEntry::Comparator>((anonymous namespace)::UnqualUsingEntry*, (anonymous namespace)::UnqualUsingEntry*, long, (anonymous namespace)::UnqualUsingEntry::Comparator)\"},\n    {\"_ZSt16__insertion_sortIPN12_GLOBAL__N_116UnqualUsingEntryENS1_10ComparatorEEvT_S4_T0_\", \"void std::__insertion_sort<(anonymous namespace)::UnqualUsingEntry*, (anonymous namespace)::UnqualUsingEntry::Comparator>((anonymous namespace)::UnqualUsingEntry*, (anonymous namespace)::UnqualUsingEntry*, (anonymous namespace)::UnqualUsingEntry::Comparator)\"},\n    {\"_ZN12_GLOBAL__N_123UnqualUsingDirectiveSet17addUsingDirectiveEPN5clang18UsingDirectiveDeclEPNS1_11DeclContextE\", \"(anonymous namespace)::UnqualUsingDirectiveSet::addUsingDirective(clang::UsingDirectiveDecl*, clang::DeclContext*)\"},\n    {\"_ZN12_GLOBAL__N_123UnqualUsingDirectiveSet18addUsingDirectivesEPN5clang11DeclContextES3_\", \"(anonymous namespace)::UnqualUsingDirectiveSet::addUsingDirectives(clang::DeclContext*, clang::DeclContext*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoESt4pairINS_9StringRefEbENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PS4_IS3_S6_E\", \"llvm::DenseMap<clang::IdentifierInfo*, std::pair<llvm::StringRef, bool>, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<std::pair<llvm::StringRef, bool> > >::InsertIntoBucket(clang::IdentifierInfo* const&, std::pair<llvm::StringRef, bool> const&, std::pair<clang::IdentifierInfo*, std::pair<llvm::StringRef, bool> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoESt4pairINS_9StringRefEbENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, std::pair<llvm::StringRef, bool>, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<std::pair<llvm::StringRef, bool> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9NamedDeclES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<clang::NamedDecl*, clang::NamedDecl*, llvm::DenseMapInfo<clang::NamedDecl*>, llvm::DenseMapInfo<clang::NamedDecl*> >::InsertIntoBucket(clang::NamedDecl* const&, clang::NamedDecl* const&, std::pair<clang::NamedDecl*, clang::NamedDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9NamedDeclES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<clang::NamedDecl*, clang::NamedDecl*, llvm::DenseMapInfo<clang::NamedDecl*>, llvm::DenseMapInfo<clang::NamedDecl*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang4DeclES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<clang::Decl*, clang::Decl*, std::_Identity<clang::Decl*>, std::less<clang::Decl*>, std::allocator<clang::Decl*> >::_M_insert_unique(clang::Decl* const&)\"},\n    {\"_ZN4llvm9StringMapIbNS_16BumpPtrAllocatorEE16GetOrCreateValueIbEERNS_14StringMapEntryIbEENS_9StringRefET_\", \"llvm::StringMapEntry<bool>& llvm::StringMap<bool, llvm::BumpPtrAllocator>::GetOrCreateValue<bool>(llvm::StringRef, bool)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang4DeclES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<clang::Decl*, clang::Decl*, std::_Identity<clang::Decl*>, std::less<clang::Decl*>, std::allocator<clang::Decl*> >::_M_erase(std::_Rb_tree_node<clang::Decl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11DeclContextEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<clang::DeclContext*, char, llvm::DenseMapInfo<clang::DeclContext*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::DeclContext*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11DeclContextEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<clang::DeclContext*, char, llvm::DenseMapInfo<clang::DeclContext*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::DeclContext* const&, char const&, std::pair<clang::DeclContext*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11DeclContextEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<clang::DeclContext*, char, llvm::DenseMapInfo<clang::DeclContext*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang4Sema13ActOnPropertyEPNS_5ScopeENS_14SourceLocationERNS_15FieldDeclaratorERNS_12ObjCDeclSpecENS_8SelectorES8_PNS_4DeclEPbNS_3tok15ObjCKeywordKindEPNS_11DeclContextE\", \"clang::Sema::ActOnProperty(clang::Scope*, clang::SourceLocation, clang::FieldDeclarator&, clang::ObjCDeclSpec&, clang::Selector, clang::Selector, clang::Decl*, bool*, clang::tok::ObjCKeywordKind, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema30HandlePropertyInClassExtensionEPNS_5ScopeEPNS_16ObjCCategoryDeclENS_14SourceLocationERNS_15FieldDeclaratorENS_8SelectorES8_bbjPbPNS_14TypeSourceInfoENS_3tok15ObjCKeywordKindE\", \"clang::Sema::HandlePropertyInClassExtension(clang::Scope*, clang::ObjCCategoryDecl*, clang::SourceLocation, clang::FieldDeclarator&, clang::Selector, clang::Selector, bool, bool, unsigned int, bool*, clang::TypeSourceInfo*, clang::tok::ObjCKeywordKind)\"},\n    {\"_ZN5clang4Sema27CheckObjCPropertyAttributesEPNS_4DeclENS_14SourceLocationERj\", \"clang::Sema::CheckObjCPropertyAttributes(clang::Decl*, clang::SourceLocation, unsigned int&)\"},\n    {\"_ZN5clang4Sema18CreatePropertyDeclEPNS_5ScopeEPNS_17ObjCContainerDeclENS_14SourceLocationERNS_15FieldDeclaratorENS_8SelectorES8_bbjPNS_14TypeSourceInfoENS_3tok15ObjCKeywordKindEPNS_11DeclContextE\", \"clang::Sema::CreatePropertyDecl(clang::Scope*, clang::ObjCContainerDecl*, clang::SourceLocation, clang::FieldDeclarator&, clang::Selector, clang::Selector, bool, bool, unsigned int, clang::TypeSourceInfo*, clang::tok::ObjCKeywordKind, clang::DeclContext*)\"},\n    {\"_ZN5clang4Sema19ProcessPropertyDeclEPNS_16ObjCPropertyDeclEPNS_17ObjCContainerDeclES2_S4_\", \"clang::Sema::ProcessPropertyDecl(clang::ObjCPropertyDecl*, clang::ObjCContainerDecl*, clang::ObjCPropertyDecl*, clang::ObjCContainerDecl*)\"},\n    {\"_ZN5clang4Sema21ActOnPropertyImplDeclEPNS_5ScopeENS_14SourceLocationES3_bPNS_4DeclEPNS_14IdentifierInfoES7_S3_\", \"clang::Sema::ActOnPropertyImplDecl(clang::Scope*, clang::SourceLocation, clang::SourceLocation, bool, clang::Decl*, clang::IdentifierInfo*, clang::IdentifierInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24DiagnosePropertyMismatchEPNS_16ObjCPropertyDeclES2_PKNS_14IdentifierInfoE\", \"clang::Sema::DiagnosePropertyMismatch(clang::ObjCPropertyDecl*, clang::ObjCPropertyDecl*, clang::IdentifierInfo const*)\"},\n    {\"_ZN5clang4Sema32DiagnosePropertyAccessorMismatchEPNS_16ObjCPropertyDeclEPNS_14ObjCMethodDeclENS_14SourceLocationE\", \"clang::Sema::DiagnosePropertyAccessorMismatch(clang::ObjCPropertyDecl*, clang::ObjCMethodDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema31ComparePropertiesInBaseAndSuperEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::ComparePropertiesInBaseAndSuper(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema33MatchOneProtocolPropertiesInClassEPNS_4DeclEPNS_16ObjCProtocolDeclE\", \"clang::Sema::MatchOneProtocolPropertiesInClass(clang::Decl*, clang::ObjCProtocolDecl*)\"},\n    {\"_ZN5clang4Sema17ComparePropertiesEPNS_4DeclES2_\", \"clang::Sema::CompareProperties(clang::Decl*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema18isPropertyReadonlyEPNS_16ObjCPropertyDeclEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::isPropertyReadonly(clang::ObjCPropertyDecl*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang4Sema26CollectImmediatePropertiesEPNS_17ObjCContainerDeclERN4llvm8DenseMapIPNS_14IdentifierInfoEPNS_16ObjCPropertyDeclENS3_12DenseMapInfoIS6_EENS9_IS8_EEEESD_\", \"clang::Sema::CollectImmediateProperties(clang::ObjCContainerDecl*, llvm::DenseMap<clang::IdentifierInfo*, clang::ObjCPropertyDecl*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::ObjCPropertyDecl*> >&, llvm::DenseMap<clang::IdentifierInfo*, clang::ObjCPropertyDecl*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::ObjCPropertyDecl*> >&)\"},\n    {\"_ZN5clang4Sema18LookupPropertyDeclEPKNS_17ObjCContainerDeclEPNS_14IdentifierInfoE\", \"clang::Sema::LookupPropertyDecl(clang::ObjCContainerDecl const*, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema27DefaultSynthesizePropertiesEPNS_5ScopeEPNS_12ObjCImplDeclEPNS_17ObjCInterfaceDeclE\", \"clang::Sema::DefaultSynthesizeProperties(clang::Scope*, clang::ObjCImplDecl*, clang::ObjCInterfaceDecl*)\"},\n    {\"_Z35CollectClassPropertyImplementationsPN5clang17ObjCContainerDeclERN4llvm8DenseMapIPNS_14IdentifierInfoEPNS_16ObjCPropertyDeclENS2_12DenseMapInfoIS5_EENS8_IS7_EEEE\", \"CollectClassPropertyImplementations(clang::ObjCContainerDecl*, llvm::DenseMap<clang::IdentifierInfo*, clang::ObjCPropertyDecl*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::ObjCPropertyDecl*> >&)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnimplementedPropertiesEPNS_5ScopeEPNS_12ObjCImplDeclEPNS_17ObjCContainerDeclERKN4llvm8DenseSetINS_8SelectorENS7_12DenseMapInfoIS9_EEEE\", \"clang::Sema::DiagnoseUnimplementedProperties(clang::Scope*, clang::ObjCImplDecl*, clang::ObjCContainerDecl*, llvm::DenseSet<clang::Selector, llvm::DenseMapInfo<clang::Selector> > const&)\"},\n    {\"_ZN5clang4Sema31AtomicPropertySetterGetterRulesEPNS_12ObjCImplDeclEPNS_17ObjCContainerDeclE\", \"clang::Sema::AtomicPropertySetterGetterRules(clang::ObjCImplDecl*, clang::ObjCContainerDecl*)\"},\n    {\"_Z16AddPropertyAttrsRN5clang4SemaEPNS_14ObjCMethodDeclEPNS_16ObjCPropertyDeclE\", \"AddPropertyAttrs(clang::Sema&, clang::ObjCMethodDecl*, clang::ObjCPropertyDecl*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang16ObjCPropertyDeclEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<clang::ObjCPropertyDecl*, char, llvm::DenseMapInfo<clang::ObjCPropertyDecl*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::ObjCPropertyDecl*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang16ObjCPropertyDeclEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<clang::ObjCPropertyDecl*, char, llvm::DenseMapInfo<clang::ObjCPropertyDecl*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::ObjCPropertyDecl* const&, char const&, std::pair<clang::ObjCPropertyDecl*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang16ObjCPropertyDeclEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<clang::ObjCPropertyDecl*, char, llvm::DenseMapInfo<clang::ObjCPropertyDecl*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_16ObjCPropertyDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::ObjCPropertyDecl*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::ObjCPropertyDecl*> >::InsertIntoBucket(clang::IdentifierInfo* const&, clang::ObjCPropertyDecl* const&, std::pair<clang::IdentifierInfo*, clang::ObjCPropertyDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_16ObjCPropertyDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::ObjCPropertyDecl*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::ObjCPropertyDecl*> >::grow(unsigned int)\"},\n    {\"_ZN5clang21GetConversionCategoryENS_22ImplicitConversionKindE\", \"clang::GetConversionCategory(clang::ImplicitConversionKind)\"},\n    {\"_ZN5clang17GetConversionRankENS_22ImplicitConversionKindE\", \"clang::GetConversionRank(clang::ImplicitConversionKind)\"},\n    {\"_ZN5clang25GetImplicitConversionNameENS_22ImplicitConversionKindE\", \"clang::GetImplicitConversionName(clang::ImplicitConversionKind)\"},\n    {\"_ZN5clang26StandardConversionSequence23setAsIdentityConversionEv\", \"clang::StandardConversionSequence::setAsIdentityConversion()\"},\n    {\"_ZNK5clang26StandardConversionSequence7getRankEv\", \"clang::StandardConversionSequence::getRank() const\"},\n    {\"_ZNK5clang26StandardConversionSequence25isPointerConversionToBoolEv\", \"clang::StandardConversionSequence::isPointerConversionToBool() const\"},\n    {\"_ZNK5clang26StandardConversionSequence32isPointerConversionToVoidPointerERNS_10ASTContextE\", \"clang::StandardConversionSequence::isPointerConversionToVoidPointer(clang::ASTContext&) const\"},\n    {\"_ZNK5clang26StandardConversionSequence10DebugPrintEv\", \"clang::StandardConversionSequence::DebugPrint() const\"},\n    {\"_ZNK5clang29UserDefinedConversionSequence10DebugPrintEv\", \"clang::UserDefinedConversionSequence::DebugPrint() const\"},\n    {\"_ZNK5clang26ImplicitConversionSequence10DebugPrintEv\", \"clang::ImplicitConversionSequence::DebugPrint() const\"},\n    {\"_ZN5clang27AmbiguousConversionSequence9constructEv\", \"clang::AmbiguousConversionSequence::construct()\"},\n    {\"_ZN5clang27AmbiguousConversionSequence8destructEv\", \"clang::AmbiguousConversionSequence::destruct()\"},\n    {\"_ZN5clang27AmbiguousConversionSequence8copyFromERKS0_\", \"clang::AmbiguousConversionSequence::copyFrom(clang::AmbiguousConversionSequence const&)\"},\n    {\"_ZN5clang17OverloadCandidate20DeductionFailureInfo7DestroyEv\", \"clang::OverloadCandidate::DeductionFailureInfo::Destroy()\"},\n    {\"_ZN5clang17OverloadCandidate20DeductionFailureInfo20getTemplateParameterEv\", \"clang::OverloadCandidate::DeductionFailureInfo::getTemplateParameter()\"},\n    {\"_ZN5clang17OverloadCandidate20DeductionFailureInfo23getTemplateArgumentListEv\", \"clang::OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList()\"},\n    {\"_ZN5clang17OverloadCandidate20DeductionFailureInfo11getFirstArgEv\", \"clang::OverloadCandidate::DeductionFailureInfo::getFirstArg()\"},\n    {\"_ZN5clang17OverloadCandidate20DeductionFailureInfo12getSecondArgEv\", \"clang::OverloadCandidate::DeductionFailureInfo::getSecondArg()\"},\n    {\"_ZN5clang20OverloadCandidateSet5clearEv\", \"clang::OverloadCandidateSet::clear()\"},\n    {\"_ZN5clang4Sema13CheckOverloadEPNS_5ScopeEPNS_12FunctionDeclERKNS_12LookupResultERPNS_9NamedDeclEb\", \"clang::Sema::CheckOverload(clang::Scope*, clang::FunctionDecl*, clang::LookupResult const&, clang::NamedDecl*&, bool)\"},\n    {\"_ZN5clang4Sema10IsOverloadEPNS_12FunctionDeclES2_b\", \"clang::Sema::IsOverload(clang::FunctionDecl*, clang::FunctionDecl*, bool)\"},\n    {\"_ZN5clang4Sema24FunctionArgTypesAreEqualEPKNS_17FunctionProtoTypeES3_\", \"clang::Sema::FunctionArgTypesAreEqual(clang::FunctionProtoType const*, clang::FunctionProtoType const*)\"},\n    {\"_ZN5clang4Sema21TryImplicitConversionERNS_22InitializationSequenceERKNS_17InitializedEntityEPNS_4ExprEbbbb\", \"clang::Sema::TryImplicitConversion(clang::InitializationSequence&, clang::InitializedEntity const&, clang::Expr*, bool, bool, bool, bool)\"},\n    {\"_ZN5clang21TryImplicitConversionERNS_4SemaEPNS_4ExprENS_8QualTypeEbbbb\", \"clang::TryImplicitConversion(clang::Sema&, clang::Expr*, clang::QualType, bool, bool, bool, bool)\"},\n    {\"_ZN5clang4Sema25PerformImplicitConversionERPNS_4ExprENS_8QualTypeENS0_16AssignmentActionEb\", \"clang::Sema::PerformImplicitConversion(clang::Expr*&, clang::QualType, clang::Sema::AssignmentAction, bool)\"},\n    {\"_ZN5clang4Sema25PerformImplicitConversionERPNS_4ExprENS_8QualTypeENS0_16AssignmentActionEbRNS_26ImplicitConversionSequenceE\", \"clang::Sema::PerformImplicitConversion(clang::Expr*&, clang::QualType, clang::Sema::AssignmentAction, bool, clang::ImplicitConversionSequence&)\"},\n    {\"_ZN5clang4Sema19IsIntegralPromotionEPNS_4ExprENS_8QualTypeES3_\", \"clang::Sema::IsIntegralPromotion(clang::Expr*, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang4Sema24IsFloatingPointPromotionENS_8QualTypeES1_\", \"clang::Sema::IsFloatingPointPromotion(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang4Sema18IsComplexPromotionENS_8QualTypeES1_\", \"clang::Sema::IsComplexPromotion(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang4Sema19IsPointerConversionEPNS_4ExprENS_8QualTypeES3_bRS3_Rb\", \"clang::Sema::IsPointerConversion(clang::Expr*, clang::QualType, clang::QualType, bool, clang::QualType&, bool&)\"},\n    {\"_ZN5clang4Sema23isObjCPointerConversionENS_8QualTypeES1_RS1_Rb\", \"clang::Sema::isObjCPointerConversion(clang::QualType, clang::QualType, clang::QualType&, bool&)\"},\n    {\"_ZN5clang34BuildSimilarlyQualifiedPointerTypeEPKNS_4TypeENS_8QualTypeES3_RNS_10ASTContextE\", \"clang::BuildSimilarlyQualifiedPointerType(clang::Type const*, clang::QualType, clang::QualType, clang::ASTContext&)\"},\n    {\"_ZN5clang4Sema22CheckPointerConversionEPNS_4ExprENS_8QualTypeERNS_8CastKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEb\", \"clang::Sema::CheckPointerConversion(clang::Expr*, clang::QualType, clang::CastKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&, bool)\"},\n    {\"_ZN5clang4Sema25IsMemberPointerConversionEPNS_4ExprENS_8QualTypeES3_bRS3_\", \"clang::Sema::IsMemberPointerConversion(clang::Expr*, clang::QualType, clang::QualType, bool, clang::QualType&)\"},\n    {\"_ZN5clang4Sema28CheckMemberPointerConversionEPNS_4ExprENS_8QualTypeERNS_8CastKindERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEb\", \"clang::Sema::CheckMemberPointerConversion(clang::Expr*, clang::QualType, clang::CastKind&, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&, bool)\"},\n    {\"_ZN5clang4Sema25IsQualificationConversionENS_8QualTypeES1_b\", \"clang::Sema::IsQualificationConversion(clang::QualType, clang::QualType, bool)\"},\n    {\"_ZN5clang4Sema37DiagnoseMultipleUserDefinedConversionEPNS_4ExprENS_8QualTypeE\", \"clang::Sema::DiagnoseMultipleUserDefinedConversion(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang23IsUserDefinedConversionERNS_4SemaEPNS_4ExprENS_8QualTypeERNS_29UserDefinedConversionSequenceERNS_20OverloadCandidateSetEb\", \"clang::IsUserDefinedConversion(clang::Sema&, clang::Expr*, clang::QualType, clang::UserDefinedConversionSequence&, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang20OverloadCandidateSet14NoteCandidatesERNS_4SemaENS_28OverloadCandidateDisplayKindEPPNS_4ExprEjPKcNS_14SourceLocationE\", \"clang::OverloadCandidateSet::NoteCandidates(clang::Sema&, clang::OverloadCandidateDisplayKind, clang::Expr**, unsigned int, char const*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema28CompareReferenceRelationshipENS_14SourceLocationENS_8QualTypeES2_RbS3_\", \"clang::Sema::CompareReferenceRelationship(clang::SourceLocation, clang::QualType, clang::QualType, bool&, bool&)\"},\n    {\"_ZN5clang4Sema35PerformObjectArgumentInitializationERPNS_4ExprEPNS_19NestedNameSpecifierEPNS_9NamedDeclEPNS_13CXXMethodDeclE\", \"clang::Sema::PerformObjectArgumentInitialization(clang::Expr*&, clang::NestedNameSpecifier*, clang::NamedDecl*, clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang31TryObjectArgumentInitializationERNS_4SemaENS_8QualTypeENS_4Expr14ClassificationEPNS_13CXXMethodDeclEPNS_13CXXRecordDeclE\", \"clang::TryObjectArgumentInitialization(clang::Sema&, clang::QualType, clang::Expr::Classification, clang::CXXMethodDecl*, clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang4Sema32PerformContextuallyConvertToBoolERPNS_4ExprE\", \"clang::Sema::PerformContextuallyConvertToBool(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema34PerformContextuallyConvertToObjCIdERPNS_4ExprE\", \"clang::Sema::PerformContextuallyConvertToObjCId(clang::Expr*&)\"},\n    {\"_ZN5clang4Sema34ConvertToIntegralOrEnumerationTypeENS_14SourceLocationEPNS_4ExprERKNS_17PartialDiagnosticES6_S6_S6_S6_S6_S6_\", \"clang::Sema::ConvertToIntegralOrEnumerationType(clang::SourceLocation, clang::Expr*, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema20AddOverloadCandidateEPNS_12FunctionDeclENS_14DeclAccessPairEPPNS_4ExprEjRNS_20OverloadCandidateSetEbb\", \"clang::Sema::AddOverloadCandidate(clang::FunctionDecl*, clang::DeclAccessPair, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool, bool)\"},\n    {\"_ZN5clang4Sema18AddMethodCandidateEPNS_13CXXMethodDeclENS_14DeclAccessPairEPNS_13CXXRecordDeclENS_8QualTypeENS_4Expr14ClassificationEPPS7_jRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddMethodCandidate(clang::CXXMethodDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::QualType, clang::Expr::Classification, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang21TryCopyInitializationERNS_4SemaEPNS_4ExprENS_8QualTypeEbb\", \"clang::TryCopyInitialization(clang::Sema&, clang::Expr*, clang::QualType, bool, bool)\"},\n    {\"_ZN5clang4Sema21AddFunctionCandidatesERKNS_17UnresolvedSetImplEPPNS_4ExprEjRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddFunctionCandidates(clang::UnresolvedSetImpl const&, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang4Sema26AddMethodTemplateCandidateEPNS_20FunctionTemplateDeclENS_14DeclAccessPairEPNS_13CXXRecordDeclEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_4Expr14ClassificationEPPSA_jRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo const*, clang::QualType, clang::Expr::Classification, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang4Sema28AddTemplateOverloadCandidateEPNS_20FunctionTemplateDeclENS_14DeclAccessPairEPKNS_24TemplateArgumentListInfoEPPNS_4ExprEjRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo const*, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang4Sema18AddMethodCandidateENS_14DeclAccessPairENS_8QualTypeENS_4Expr14ClassificationEPPS3_jRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang4Sema22AddConversionCandidateEPNS_17CXXConversionDeclENS_14DeclAccessPairEPNS_13CXXRecordDeclEPNS_4ExprENS_8QualTypeERNS_20OverloadCandidateSetE\", \"clang::Sema::AddConversionCandidate(clang::CXXConversionDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::Expr*, clang::QualType, clang::OverloadCandidateSet&)\"},\n    {\"_ZN5clang4Sema30AddTemplateConversionCandidateEPNS_20FunctionTemplateDeclENS_14DeclAccessPairEPNS_13CXXRecordDeclEPNS_4ExprENS_8QualTypeERNS_20OverloadCandidateSetE\", \"clang::Sema::AddTemplateConversionCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::Expr*, clang::QualType, clang::OverloadCandidateSet&)\"},\n    {\"_ZN5clang4Sema21AddSurrogateCandidateEPNS_17CXXConversionDeclENS_14DeclAccessPairEPNS_13CXXRecordDeclEPKNS_17FunctionProtoTypeEPNS_4ExprEPSA_jRNS_20OverloadCandidateSetE\", \"clang::Sema::AddSurrogateCandidate(clang::CXXConversionDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::FunctionProtoType const*, clang::Expr*, clang::Expr**, unsigned int, clang::OverloadCandidateSet&)\"},\n    {\"_ZN5clang4Sema27AddMemberOperatorCandidatesENS_22OverloadedOperatorKindENS_14SourceLocationEPPNS_4ExprEjRNS_20OverloadCandidateSetENS_11SourceRangeE\", \"clang::Sema::AddMemberOperatorCandidates(clang::OverloadedOperatorKind, clang::SourceLocation, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema19AddBuiltinCandidateENS_8QualTypeEPS1_PPNS_4ExprEjRNS_20OverloadCandidateSetEbj\", \"clang::Sema::AddBuiltinCandidate(clang::QualType, clang::QualType*, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool, unsigned int)\"},\n    {\"_ZN5clang23BuiltinCandidateTypeSet39AddPointerWithMoreQualifiedTypeVariantsENS_8QualTypeERKNS_10QualifiersE\", \"clang::BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(clang::QualType, clang::Qualifiers const&)\"},\n    {\"_ZN5clang23BuiltinCandidateTypeSet45AddMemberPointerWithMoreQualifiedTypeVariantsENS_8QualTypeE\", \"clang::BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(clang::QualType)\"},\n    {\"_ZN5clang23BuiltinCandidateTypeSet21AddTypesConvertedFromENS_8QualTypeENS_14SourceLocationEbbRKNS_10QualifiersE\", \"clang::BuiltinCandidateTypeSet::AddTypesConvertedFrom(clang::QualType, clang::SourceLocation, bool, bool, clang::Qualifiers const&)\"},\n    {\"_ZN5clang4Sema28AddBuiltinOperatorCandidatesENS_22OverloadedOperatorKindENS_14SourceLocationEPPNS_4ExprEjRNS_20OverloadCandidateSetE\", \"clang::Sema::AddBuiltinOperatorCandidates(clang::OverloadedOperatorKind, clang::SourceLocation, clang::Expr**, unsigned int, clang::OverloadCandidateSet&)\"},\n    {\"_ZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder35addGenericBinaryArithmeticOverloadsEb\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::addGenericBinaryArithmeticOverloads(bool)\"},\n    {\"_ZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder35addBinaryBitwiseArithmeticOverloadsENS_22OverloadedOperatorKindE\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::addBinaryBitwiseArithmeticOverloads(clang::OverloadedOperatorKind)\"},\n    {\"_ZN5clang4Sema36AddArgumentDependentLookupCandidatesENS_15DeclarationNameEbPPNS_4ExprEjPKNS_24TemplateArgumentListInfoERNS_20OverloadCandidateSetEb\", \"clang::Sema::AddArgumentDependentLookupCandidates(clang::DeclarationName, bool, clang::Expr**, unsigned int, clang::TemplateArgumentListInfo const*, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang25isBetterOverloadCandidateERNS_4SemaERKNS_17OverloadCandidateES4_NS_14SourceLocationEb\", \"clang::isBetterOverloadCandidate(clang::Sema&, clang::OverloadCandidate const&, clang::OverloadCandidate const&, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang34CompareImplicitConversionSequencesERNS_4SemaERKNS_26ImplicitConversionSequenceES4_\", \"clang::CompareImplicitConversionSequences(clang::Sema&, clang::ImplicitConversionSequence const&, clang::ImplicitConversionSequence const&)\"},\n    {\"_ZN5clang34CompareStandardConversionSequencesERNS_4SemaERKNS_26StandardConversionSequenceES4_\", \"clang::CompareStandardConversionSequences(clang::Sema&, clang::StandardConversionSequence const&, clang::StandardConversionSequence const&)\"},\n    {\"_ZN5clang20OverloadCandidateSet18BestViableFunctionERNS_4SemaENS_14SourceLocationERPNS_17OverloadCandidateEb\", \"clang::OverloadCandidateSet::BestViableFunction(clang::Sema&, clang::SourceLocation, clang::OverloadCandidate*&, bool)\"},\n    {\"_ZN5clang4Sema21NoteOverloadCandidateEPNS_12FunctionDeclE\", \"clang::Sema::NoteOverloadCandidate(clang::FunctionDecl*)\"},\n    {\"_ZN5clang12_GLOBAL__N_125ClassifyOverloadCandidateERNS_4SemaEPNS_12FunctionDeclERSs\", \"clang::(anonymous namespace)::ClassifyOverloadCandidate(clang::Sema&, clang::FunctionDecl*, std::string&)\"},\n    {\"_ZNK5clang26ImplicitConversionSequence27DiagnoseAmbiguousConversionERNS_4SemaENS_14SourceLocationERKNS_17PartialDiagnosticE\", \"clang::ImplicitConversionSequence::DiagnoseAmbiguousConversion(clang::Sema&, clang::SourceLocation, clang::PartialDiagnostic const&) const\"},\n    {\"_ZN5clang4Sema34ResolveAddressOfOverloadedFunctionEPNS_4ExprENS_8QualTypeEbRNS_14DeclAccessPairE\", \"clang::Sema::ResolveAddressOfOverloadedFunction(clang::Expr*, clang::QualType, bool, clang::DeclAccessPair&)\"},\n    {\"_ZN5clang20IsNoReturnConversionERNS_10ASTContextENS_8QualTypeES2_RS2_\", \"clang::IsNoReturnConversion(clang::ASTContext&, clang::QualType, clang::QualType, clang::QualType&)\"},\n    {\"_ZN5clang4Sema43ResolveSingleFunctionTemplateSpecializationEPNS_4ExprE\", \"clang::Sema::ResolveSingleFunctionTemplateSpecialization(clang::Expr*)\"},\n    {\"_ZN5clang4Sema27AddOverloadedCallCandidatesEPNS_20UnresolvedLookupExprEPPNS_4ExprEjRNS_20OverloadCandidateSetEb\", \"clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*, clang::Expr**, unsigned int, clang::OverloadCandidateSet&, bool)\"},\n    {\"_ZN5clang4Sema23BuildOverloadedCallExprEPNS_5ScopeEPNS_4ExprEPNS_20UnresolvedLookupExprENS_14SourceLocationEPS4_jS7_S4_\", \"clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema30FixOverloadedFunctionReferenceEPNS_4ExprENS_14DeclAccessPairEPNS_12FunctionDeclE\", \"clang::Sema::FixOverloadedFunctionReference(clang::Expr*, clang::DeclAccessPair, clang::FunctionDecl*)\"},\n    {\"_ZN5clang4Sema23CreateOverloadedUnaryOpENS_14SourceLocationEjRKNS_17UnresolvedSetImplEPNS_4ExprE\", \"clang::Sema::CreateOverloadedUnaryOp(clang::SourceLocation, unsigned int, clang::UnresolvedSetImpl const&, clang::Expr*)\"},\n    {\"_ZN5clang4Sema21CreateOverloadedBinOpENS_14SourceLocationEjRKNS_17UnresolvedSetImplEPNS_4ExprES6_\", \"clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, unsigned int, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema34CreateOverloadedArraySubscriptExprENS_14SourceLocationES1_PNS_4ExprES3_\", \"clang::Sema::CreateOverloadedArraySubscriptExpr(clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::Expr*)\"},\n    {\"_ZN5clang4Sema25BuildCallToMemberFunctionEPNS_5ScopeEPNS_4ExprENS_14SourceLocationEPS4_jS5_\", \"clang::Sema::BuildCallToMemberFunction(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema28BuildCallToObjectOfClassTypeEPNS_5ScopeEPNS_4ExprENS_14SourceLocationEPS4_jS5_\", \"clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema24BuildOverloadedArrowExprEPNS_5ScopeEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::BuildOverloadedArrowExpr(clang::Scope*, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema30FixOverloadedFunctionReferenceENS_12ActionResultIPNS_4ExprELb1EEENS_14DeclAccessPairEPNS_12FunctionDeclE\", \"clang::Sema::FixOverloadedFunctionReference(clang::ActionResult<clang::Expr*, true>, clang::DeclAccessPair, clang::FunctionDecl*)\"},\n    {\"_ZSt16__introsort_loopIPPN5clang17OverloadCandidateElNS0_12_GLOBAL__N_135CompareOverloadCandidatesForDisplayEEvT_S6_T0_T1_\", \"void std::__introsort_loop<clang::OverloadCandidate**, long, clang::(anonymous namespace)::CompareOverloadCandidatesForDisplay>(clang::OverloadCandidate**, clang::OverloadCandidate**, long, clang::(anonymous namespace)::CompareOverloadCandidatesForDisplay)\"},\n    {\"_ZN5clang12_GLOBAL__N_135CompareOverloadCandidatesForDisplayclEPKNS_17OverloadCandidateES4_\", \"clang::(anonymous namespace)::CompareOverloadCandidatesForDisplay::operator()(clang::OverloadCandidate const*, clang::OverloadCandidate const*)\"},\n    {\"_ZSt13__adjust_heapIPPN5clang17OverloadCandidateElS2_NS0_12_GLOBAL__N_135CompareOverloadCandidatesForDisplayEEvT_T0_S7_T1_T2_\", \"void std::__adjust_heap<clang::OverloadCandidate**, long, clang::OverloadCandidate*, clang::(anonymous namespace)::CompareOverloadCandidatesForDisplay>(clang::OverloadCandidate**, long, long, clang::OverloadCandidate*, clang::(anonymous namespace)::CompareOverloadCandidatesForDisplay)\"},\n    {\"_ZN5clang12_GLOBAL__N_121DiagnoseArityMismatchERNS_4SemaEPNS_17OverloadCandidateEj\", \"clang::(anonymous namespace)::DiagnoseArityMismatch(clang::Sema&, clang::OverloadCandidate*, unsigned int)\"},\n    {\"_ZN5clang38AddBuiltinAssignmentOperatorCandidatesERNS_4SemaENS_8QualTypeEPPNS_4ExprEjRNS_20OverloadCandidateSetE\", \"clang::AddBuiltinAssignmentOperatorCandidates(clang::Sema&, clang::QualType, clang::Expr**, unsigned int, clang::OverloadCandidateSet&)\"},\n    {\"_ZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder29getUsualArithmeticConversionsEjj\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::getUsualArithmeticConversions(unsigned int, unsigned int)\"},\n    {\"_ZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder35addPlusPlusMinusMinusStyleOverloadsENS_8QualTypeEb\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::addPlusPlusMinusMinusStyleOverloads(clang::QualType, bool)\"},\n    {\"_ZN5clang24FindConversionForRefInitERNS_4SemaERNS_26ImplicitConversionSequenceENS_8QualTypeENS_14SourceLocationEPNS_4ExprES4_bb\", \"clang::FindConversionForRefInit(clang::Sema&, clang::ImplicitConversionSequence&, clang::QualType, clang::SourceLocation, clang::Expr*, clang::QualType, bool, bool)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang17OverloadCandidateEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::OverloadCandidate>::push_back(clang::OverloadCandidate const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang26ImplicitConversionSequenceEE6resizeEj\", \"llvm::SmallVectorImpl<clang::ImplicitConversionSequence>::resize(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23BuiltinCandidateTypeSetEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::BuiltinCandidateTypeSet>::push_back(clang::BuiltinCandidateTypeSet const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang23BuiltinCandidateTypeSetELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::BuiltinCandidateTypeSet, false>::grow(unsigned long)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN5clang23BuiltinCandidateTypeSetES2_ET0_T_S4_S3_St12__false_type\", \"clang::BuiltinCandidateTypeSet* std::__uninitialized_copy_aux<clang::BuiltinCandidateTypeSet*, clang::BuiltinCandidateTypeSet*>(clang::BuiltinCandidateTypeSet*, clang::BuiltinCandidateTypeSet*, clang::BuiltinCandidateTypeSet*, std::__false_type)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang26ImplicitConversionSequenceELb0EE18uninitialized_copyIPS2_S5_EEvT_S6_T0_\", \"void llvm::SmallVectorTemplateBase<clang::ImplicitConversionSequence, false>::uninitialized_copy<clang::ImplicitConversionSequence*, clang::ImplicitConversionSequence*>(clang::ImplicitConversionSequence*, clang::ImplicitConversionSequence*, clang::ImplicitConversionSequence*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang17OverloadCandidateELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::OverloadCandidate, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang17OverloadCandidateELb0EE13destroy_rangeEPS2_S4_\", \"llvm::SmallVectorTemplateBase<clang::OverloadCandidate, false>::destroy_range(clang::OverloadCandidate*, clang::OverloadCandidate*)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN5clang17OverloadCandidateES2_ET0_T_S4_S3_St12__false_type\", \"clang::OverloadCandidate* std::__uninitialized_copy_aux<clang::OverloadCandidate*, clang::OverloadCandidate*>(clang::OverloadCandidate*, clang::OverloadCandidate*, clang::OverloadCandidate*, std::__false_type)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang26ImplicitConversionSequenceELb0EE18uninitialized_copyIPKS2_PS2_EEvT_S8_T0_\", \"void llvm::SmallVectorTemplateBase<clang::ImplicitConversionSequence, false>::uninitialized_copy<clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence*>(clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence*)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPKN5clang26ImplicitConversionSequenceEPS4_EET0_T_S9_S8_\", \"clang::ImplicitConversionSequence* std::__copy<false, std::random_access_iterator_tag>::copy<clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence*>(clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence const*, clang::ImplicitConversionSequence*)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang12FunctionDeclEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::FunctionDecl*>::operator=(llvm::SmallVectorImpl<clang::FunctionDecl*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23BuiltinCandidateTypeSetEED2Ev\", \"llvm::SmallVectorImpl<clang::BuiltinCandidateTypeSet>::~SmallVectorImpl()\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIN5clang7CanQualINS2_4TypeEEES5_EcNS_12DenseMapInfoIS6_EENS7_IcEEE15LookupBucketForERKS6_RPS1_IS6_cE\", \"llvm::DenseMap<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > >, llvm::DenseMapInfo<char> >::LookupBucketFor(std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > const&, std::pair<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIN5clang7CanQualINS2_4TypeEEES5_EcNS_12DenseMapInfoIS6_EENS7_IcEEE6insertERKS1_IS6_cE\", \"llvm::DenseMap<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char> const&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIN5clang7CanQualINS2_4TypeEEES5_EcNS_12DenseMapInfoIS6_EENS7_IcEEE16InsertIntoBucketERKS6_RKcPS1_IS6_cE\", \"llvm::DenseMap<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > const&, char const&, std::pair<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIN5clang7CanQualINS2_4TypeEEES5_EcNS_12DenseMapInfoIS6_EENS7_IcEEE4growEj\", \"llvm::DenseMap<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> >, char, llvm::DenseMapInfo<std::pair<clang::CanQual<clang::Type>, clang::CanQual<clang::Type> > >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang20OverloadCandidateSetD2Ev\", \"clang::OverloadCandidateSet::~OverloadCandidateSet()\"},\n    {\"_ZN5clang4Sema13ActOnExprStmtENS0_11FullExprArgE\", \"clang::Sema::ActOnExprStmt(clang::Sema::FullExprArg)\"},\n    {\"_ZN5clang4Sema13ActOnNullStmtENS_14SourceLocationEb\", \"clang::Sema::ActOnNullStmt(clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema13ActOnDeclStmtENS_9OpaquePtrINS_12DeclGroupRefEEENS_14SourceLocationES4_\", \"clang::Sema::ActOnDeclStmt(clang::OpaquePtr<clang::DeclGroupRef>, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema20ActOnForEachDeclStmtENS_9OpaquePtrINS_12DeclGroupRefEEE\", \"clang::Sema::ActOnForEachDeclStmt(clang::OpaquePtr<clang::DeclGroupRef>)\"},\n    {\"_ZN5clang4Sema24DiagnoseUnusedExprResultEPKNS_4StmtE\", \"clang::Sema::DiagnoseUnusedExprResult(clang::Stmt const*)\"},\n    {\"_ZN5clang4Sema17ActOnCompoundStmtENS_14SourceLocationES1_NS_11ASTMultiPtrIPNS_4StmtEEEb\", \"clang::Sema::ActOnCompoundStmt(clang::SourceLocation, clang::SourceLocation, clang::ASTMultiPtr<clang::Stmt*>, bool)\"},\n    {\"_ZN5clang4Sema13ActOnCaseStmtENS_14SourceLocationEPNS_4ExprES1_S3_S1_\", \"clang::Sema::ActOnCaseStmt(clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17ActOnCaseStmtBodyEPNS_4StmtES2_\", \"clang::Sema::ActOnCaseStmtBody(clang::Stmt*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema16ActOnDefaultStmtENS_14SourceLocationES1_PNS_4StmtEPNS_5ScopeE\", \"clang::Sema::ActOnDefaultStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::Scope*)\"},\n    {\"_ZN5clang4Sema14ActOnLabelStmtENS_14SourceLocationEPNS_14IdentifierInfoES1_PNS_4StmtEPKNS_13AttributeListE\", \"clang::Sema::ActOnLabelStmt(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Stmt*, clang::AttributeList const*)\"},\n    {\"_ZN5clang4Sema14ActOnLabelStmtENS_14SourceLocationEPNS_14IdentifierInfoES1_PNS_4StmtEb\", \"clang::Sema::ActOnLabelStmt(clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::Stmt*, bool)\"},\n    {\"_ZN5clang4Sema11ActOnIfStmtENS_14SourceLocationENS0_11FullExprArgEPNS_4DeclEPNS_4StmtES1_S6_\", \"clang::Sema::ActOnIfStmt(clang::SourceLocation, clang::Sema::FullExprArg, clang::Decl*, clang::Stmt*, clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema34ConvertIntegerToTypeWarnOnOverflowERN4llvm6APSIntEjbNS_14SourceLocationEj\", \"clang::Sema::ConvertIntegerToTypeWarnOnOverflow(llvm::APSInt&, unsigned int, bool, clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang4Sema22ActOnStartOfSwitchStmtENS_14SourceLocationEPNS_4ExprEPNS_4DeclE\", \"clang::Sema::ActOnStartOfSwitchStmt(clang::SourceLocation, clang::Expr*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema21ActOnFinishSwitchStmtENS_14SourceLocationEPNS_4StmtES3_\", \"clang::Sema::ActOnFinishSwitchStmt(clang::SourceLocation, clang::Stmt*, clang::Stmt*)\"},\n    {\"_Z11CmpCaseValsRKSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_\", \"CmpCaseVals(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)\"},\n    {\"_Z12AdjustAPSIntRN4llvm6APSIntEjb\", \"AdjustAPSInt(llvm::APSInt&, unsigned int, bool)\"},\n    {\"_Z11CmpEnumValsRKSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_\", \"CmpEnumVals(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)\"},\n    {\"_Z10EqEnumValsRKSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_\", \"EqEnumVals(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)\"},\n    {\"_ZN5clang4Sema14ActOnWhileStmtENS_14SourceLocationENS0_11FullExprArgEPNS_4DeclEPNS_4StmtE\", \"clang::Sema::ActOnWhileStmt(clang::SourceLocation, clang::Sema::FullExprArg, clang::Decl*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema11ActOnDoStmtENS_14SourceLocationEPNS_4StmtES1_S1_PNS_4ExprES1_\", \"clang::Sema::ActOnDoStmt(clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema12ActOnForStmtENS_14SourceLocationES1_PNS_4StmtENS0_11FullExprArgEPNS_4DeclES4_S1_S3_\", \"clang::Sema::ActOnForStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::Sema::FullExprArg, clang::Decl*, clang::Sema::FullExprArg, clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema22ActOnForEachLValueExprEPNS_4ExprE\", \"clang::Sema::ActOnForEachLValueExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema26ActOnObjCForCollectionStmtENS_14SourceLocationES1_PNS_4StmtEPNS_4ExprES1_S3_\", \"clang::Sema::ActOnObjCForCollectionStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::Expr*, clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema13ActOnGotoStmtENS_14SourceLocationES1_PNS_14IdentifierInfoE\", \"clang::Sema::ActOnGotoStmt(clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang4Sema21ActOnIndirectGotoStmtENS_14SourceLocationES1_PNS_4ExprE\", \"clang::Sema::ActOnIndirectGotoStmt(clang::SourceLocation, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema17ActOnContinueStmtENS_14SourceLocationEPNS_5ScopeE\", \"clang::Sema::ActOnContinueStmt(clang::SourceLocation, clang::Scope*)\"},\n    {\"_ZN5clang4Sema14ActOnBreakStmtENS_14SourceLocationEPNS_5ScopeE\", \"clang::Sema::ActOnBreakStmt(clang::SourceLocation, clang::Scope*)\"},\n    {\"_ZN5clang4Sema23getCopyElisionCandidateENS_8QualTypeEPNS_4ExprEb\", \"clang::Sema::getCopyElisionCandidate(clang::QualType, clang::Expr*, bool)\"},\n    {\"_ZN5clang4Sema31PerformMoveOrCopyInitializationERKNS_17InitializedEntityEPKNS_7VarDeclENS_8QualTypeEPNS_4ExprE\", \"clang::Sema::PerformMoveOrCopyInitialization(clang::InitializedEntity const&, clang::VarDecl const*, clang::QualType, clang::Expr*)\"},\n    {\"_ZN5clang4Sema20ActOnBlockReturnStmtENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnBlockReturnStmt(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema15ActOnReturnStmtENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnReturnStmt(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema12ActOnAsmStmtENS_14SourceLocationEbbjjPPNS_14IdentifierInfoENS_11ASTMultiPtrIPNS_4ExprEEES8_S7_S8_S1_b\", \"clang::Sema::ActOnAsmStmt(clang::SourceLocation, bool, bool, unsigned int, unsigned int, clang::IdentifierInfo**, clang::ASTMultiPtr<clang::Expr*>, clang::ASTMultiPtr<clang::Expr*>, clang::Expr*, clang::ASTMultiPtr<clang::Expr*>, clang::SourceLocation, bool)\"},\n    {\"_Z14CheckAsmLValuePKN5clang4ExprERNS_4SemaE\", \"CheckAsmLValue(clang::Expr const*, clang::Sema&)\"},\n    {\"_ZN5clang4Sema20ActOnObjCAtCatchStmtENS_14SourceLocationES1_PNS_4DeclEPNS_4StmtE\", \"clang::Sema::ActOnObjCAtCatchStmt(clang::SourceLocation, clang::SourceLocation, clang::Decl*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema22ActOnObjCAtFinallyStmtENS_14SourceLocationEPNS_4StmtE\", \"clang::Sema::ActOnObjCAtFinallyStmt(clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema18ActOnObjCAtTryStmtENS_14SourceLocationEPNS_4StmtENS_11ASTMultiPtrIS3_EES3_\", \"clang::Sema::ActOnObjCAtTryStmt(clang::SourceLocation, clang::Stmt*, clang::ASTMultiPtr<clang::Stmt*>, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema20BuildObjCAtThrowStmtENS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::BuildObjCAtThrowStmt(clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema20ActOnObjCAtThrowStmtENS_14SourceLocationEPNS_4ExprEPNS_5ScopeE\", \"clang::Sema::ActOnObjCAtThrowStmt(clang::SourceLocation, clang::Expr*, clang::Scope*)\"},\n    {\"_ZN5clang4Sema27ActOnObjCAtSynchronizedStmtENS_14SourceLocationEPNS_4ExprEPNS_4StmtE\", \"clang::Sema::ActOnObjCAtSynchronizedStmt(clang::SourceLocation, clang::Expr*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema18ActOnCXXCatchBlockENS_14SourceLocationEPNS_4DeclEPNS_4StmtE\", \"clang::Sema::ActOnCXXCatchBlock(clang::SourceLocation, clang::Decl*, clang::Stmt*)\"},\n    {\"_ZN5clang4Sema16ActOnCXXTryBlockENS_14SourceLocationEPNS_4StmtENS_11ASTMultiPtrIS3_EE\", \"clang::Sema::ActOnCXXTryBlock(clang::SourceLocation, clang::Stmt*, clang::ASTMultiPtr<clang::Stmt*>)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_115TypeWithHandlerEEEiPKvS4_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::TypeWithHandler>(void const*, void const*)\"},\n    {\"_ZSt6uniqueIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEEPFbRKS6_S9_EET_SC_SC_T0_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::unique<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang10TargetInfo14ConstraintInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::TargetInfo::ConstraintInfo, false>::grow(unsigned long)\"},\n    {\"_ZSt21__inplace_stable_sortIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEEPFbRKS6_S9_EEvT_SC_T0_\", \"void std::__inplace_stable_sort<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt22__stable_sort_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_lPFbRKS6_S9_EEvT_SC_T0_T1_T2_\", \"void std::__stable_sort_adaptive<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt24__merge_sort_with_bufferIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_PFbRKS6_S9_EEvT_SC_T0_T1_\", \"void std::__merge_sort_with_buffer<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt16__merge_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEElS7_PFbRKS6_S9_EEvT_SC_SC_T0_SD_T1_SD_T2_\", \"void std::__merge_adaptive<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, long, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt5mergeIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_S7_PFbRKS6_S9_EET1_T_SD_T0_SE_SC_T2_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::merge<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt16__merge_backwardIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_S7_PFbRKS6_S9_EET1_T_SD_T0_SE_SC_T2_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::__merge_backward<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt17__rotate_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES7_lET_S8_S8_S8_T1_S9_T0_S9_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::__rotate_adaptive<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, long, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long)\"},\n    {\"_ZSt8__rotateIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEEEvT_S8_S8_St26random_access_iterator_tag\", \"void std::__rotate<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::random_access_iterator_tag)\"},\n    {\"_ZSt4swapISt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEEEvRT_S8_\", \"void std::swap<std::pair<llvm::APSInt, clang::EnumConstantDecl*> >(std::pair<llvm::APSInt, clang::EnumConstantDecl*>&, std::pair<llvm::APSInt, clang::EnumConstantDecl*>&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEESA_EET0_T_SC_SB_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEESA_EET0_T_SC_SB_\", \"std::pair<llvm::APSInt, clang::EnumConstantDecl*>* std::__copy<false, std::random_access_iterator_tag>::copy<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEEPFbRKS6_S9_EEvT_SC_T0_\", \"void std::__insertion_sort<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt25__unguarded_linear_insertIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES6_PFbRKS6_S9_EEvT_T0_T1_\", \"void std::__unguarded_linear_insert<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZSt22__merge_without_bufferIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEElPFbRKS6_S9_EEvT_SC_SC_T0_SD_T1_\", \"void std::__merge_without_buffer<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&)>(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, long, long, bool (*)(std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&, std::pair<llvm::APSInt, clang::EnumConstantDecl*> const&))\"},\n    {\"_ZNSt17_Temporary_bufferIPSt4pairIN4llvm6APSIntEPN5clang16EnumConstantDeclEES6_EC2ES7_S7_\", \"std::_Temporary_buffer<std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*> >::_Temporary_buffer(std::pair<llvm::APSInt, clang::EnumConstantDecl*>*, std::pair<llvm::APSInt, clang::EnumConstantDecl*>*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairINS_6APSIntEPN5clang16EnumConstantDeclEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::APSInt, clang::EnumConstantDecl*>, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIN4llvm6APSIntESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::APSInt, std::allocator<llvm::APSInt> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::APSInt*, std::vector<llvm::APSInt, std::allocator<llvm::APSInt> > >, llvm::APSInt const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm6APSIntES5_EET0_T_S7_S6_\", \"llvm::APSInt* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::APSInt*, llvm::APSInt*>(llvm::APSInt*, llvm::APSInt*, llvm::APSInt*)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESA_EET0_T_SC_SB_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::__copy<false, std::random_access_iterator_tag>::copy<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*)\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEEEvT_SE_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES9_lEvT_SE_T0_T1_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*, long)\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES9_EvT_SE_T0_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*)\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEElS9_EvT_SE_SE_T0_SF_T1_SF_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, long, std::pair<llvm::APSInt, clang::CaseStmt*>*>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, long, long, std::pair<llvm::APSInt, clang::CaseStmt*>*, long)\"},\n    {\"_ZSt5mergeIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEEN9__gnu_cxx17__normal_iteratorIS7_St6vectorIS6_SaIS6_EEEESD_ET1_T_SF_T0_SG_SE_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::merge<std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt16__merge_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES9_SD_ET1_T_SF_T0_SG_SE_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::__merge_backward<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES8_ET_SE_SE_RKT0_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::lower_bound<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> const&)\"},\n    {\"_ZSt11upper_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES8_ET_SE_SE_RKT0_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::upper_bound<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> const&)\"},\n    {\"_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES9_lET_SE_SE_SE_T1_SF_T0_SF_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::__rotate_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, long, long, std::pair<llvm::APSInt, clang::CaseStmt*>*, long)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEEEvT_SE_SE_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::random_access_iterator_tag)\"},\n    {\"_ZSt4swapISt4pairIN4llvm6APSIntEPN5clang8CaseStmtEEEvRT_S8_\", \"void std::swap<std::pair<llvm::APSInt, clang::CaseStmt*> >(std::pair<llvm::APSInt, clang::CaseStmt*>&, std::pair<llvm::APSInt, clang::CaseStmt*>&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESA_EET0_T_SC_SB_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*)\"},\n    {\"_ZSt5mergeIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_N9__gnu_cxx17__normal_iteratorIS7_St6vectorIS6_SaIS6_EEEEET1_T_SF_T0_SG_SE_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > std::merge<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt5mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEESD_S9_ET1_T_SF_T0_SG_SE_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::merge<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>*)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEEEvT_SE_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES8_EvT_T0_\", \"void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> >(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*>)\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEElEvT_SE_SE_T0_SF_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, long, long)\"},\n    {\"_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESt6vectorIS8_SaIS8_EEEES8_EC2ESD_SD_\", \"std::_Temporary_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> >::_Temporary_buffer(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >)\"},\n    {\"_ZSt21__inplace_stable_sortIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEEPFbRKS6_S9_EEvT_SC_T0_\", \"void std::__inplace_stable_sort<std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt22__stable_sort_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_lPFbRKS6_S9_EEvT_SC_T0_T1_T2_\", \"void std::__stable_sort_adaptive<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt24__merge_sort_with_bufferIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_PFbRKS6_S9_EEvT_SC_T0_T1_\", \"void std::__merge_sort_with_buffer<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt16__merge_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEElS7_PFbRKS6_S9_EEvT_SC_SC_T0_SD_T1_SD_T2_\", \"void std::__merge_adaptive<std::pair<llvm::APSInt, clang::CaseStmt*>*, long, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, long, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt5mergeIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_S7_PFbRKS6_S9_EET1_T_SD_T0_SE_SC_T2_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::merge<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt16__merge_backwardIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_S7_PFbRKS6_S9_EET1_T_SD_T0_SE_SC_T2_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::__merge_backward<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt17__rotate_adaptiveIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES7_lET_S8_S8_S8_T1_S9_T0_S9_\", \"std::pair<llvm::APSInt, clang::CaseStmt*>* std::__rotate_adaptive<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, long, std::pair<llvm::APSInt, clang::CaseStmt*>*, long)\"},\n    {\"_ZSt8__rotateIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEEEvT_S8_S8_St26random_access_iterator_tag\", \"void std::__rotate<std::pair<llvm::APSInt, clang::CaseStmt*>*>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::random_access_iterator_tag)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEEPFbRKS6_S9_EEvT_SC_T0_\", \"void std::__insertion_sort<std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt25__unguarded_linear_insertIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES6_PFbRKS6_S9_EEvT_T0_T1_\", \"void std::__unguarded_linear_insert<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZSt22__merge_without_bufferIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEElPFbRKS6_S9_EEvT_SC_SC_T0_SD_T1_\", \"void std::__merge_without_buffer<std::pair<llvm::APSInt, clang::CaseStmt*>*, long, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&)>(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*, long, long, bool (*)(std::pair<llvm::APSInt, clang::CaseStmt*> const&, std::pair<llvm::APSInt, clang::CaseStmt*> const&))\"},\n    {\"_ZNSt17_Temporary_bufferIPSt4pairIN4llvm6APSIntEPN5clang8CaseStmtEES6_EC2ES7_S7_\", \"std::_Temporary_buffer<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*> >::_Temporary_buffer(std::pair<llvm::APSInt, clang::CaseStmt*>*, std::pair<llvm::APSInt, clang::CaseStmt*>*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairINS_6APSIntEPN5clang8CaseStmtEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::APSInt, clang::CaseStmt*>, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm6APSIntEPN5clang8CaseStmtEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::APSInt, clang::CaseStmt*>*, std::vector<std::pair<llvm::APSInt, clang::CaseStmt*>, std::allocator<std::pair<llvm::APSInt, clang::CaseStmt*> > > >, std::pair<llvm::APSInt, clang::CaseStmt*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang10TargetInfo14ConstraintInfoEED2Ev\", \"llvm::SmallVectorImpl<clang::TargetInfo::ConstraintInfo>::~SmallVectorImpl()\"},\n    {\"_ZN5clang22getTemplateParamsRangeEPKPKNS_21TemplateParameterListEj\", \"clang::getTemplateParamsRange(clang::TemplateParameterList const* const*, unsigned int)\"},\n    {\"_ZN5clang4Sema14isTemplateNameEPNS_5ScopeERNS_12CXXScopeSpecEbRNS_13UnqualifiedIdENS_9OpaquePtrINS_8QualTypeEEEbRNS7_INS_12TemplateNameEEERb\", \"clang::Sema::isTemplateName(clang::Scope*, clang::CXXScopeSpec&, bool, clang::UnqualifiedId&, clang::OpaquePtr<clang::QualType>, bool, clang::OpaquePtr<clang::TemplateName>&, bool&)\"},\n    {\"_ZN5clang4Sema18LookupTemplateNameERNS_12LookupResultEPNS_5ScopeERNS_12CXXScopeSpecENS_8QualTypeEbRb\", \"clang::Sema::LookupTemplateName(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec&, clang::QualType, bool, bool&)\"},\n    {\"_ZN5clang4Sema27DiagnoseUnknownTemplateNameERKNS_14IdentifierInfoENS_14SourceLocationEPNS_5ScopeEPKNS_12CXXScopeSpecERNS_9OpaquePtrINS_12TemplateNameEEERNS_16TemplateNameKindE\", \"clang::Sema::DiagnoseUnknownTemplateName(clang::IdentifierInfo const&, clang::SourceLocation, clang::Scope*, clang::CXXScopeSpec const*, clang::OpaquePtr<clang::TemplateName>&, clang::TemplateNameKind&)\"},\n    {\"_Z29FilterAcceptableTemplateNamesRN5clang10ASTContextERNS_12LookupResultE\", \"FilterAcceptableTemplateNames(clang::ASTContext&, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema26ActOnDependentIdExpressionERKNS_12CXXScopeSpecERKNS_19DeclarationNameInfoEbPKNS_24TemplateArgumentListInfoE\", \"clang::Sema::ActOnDependentIdExpression(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, bool, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang4Sema25BuildDependentDeclRefExprERKNS_12CXXScopeSpecERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::Sema::BuildDependentDeclRefExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang4Sema31DiagnoseTemplateParameterShadowENS_14SourceLocationEPNS_4DeclE\", \"clang::Sema::DiagnoseTemplateParameterShadow(clang::SourceLocation, clang::Decl*)\"},\n    {\"_ZN5clang4Sema20AdjustDeclIfTemplateERPNS_4DeclE\", \"clang::Sema::AdjustDeclIfTemplate(clang::Decl*&)\"},\n    {\"_ZNK5clang22ParsedTemplateArgument24getTemplatePackExpansionENS_14SourceLocationE\", \"clang::ParsedTemplateArgument::getTemplatePackExpansion(clang::SourceLocation) const\"},\n    {\"_ZN5clang4Sema26translateTemplateArgumentsERKNS_18ASTTemplateArgsPtrERNS_24TemplateArgumentListInfoE\", \"clang::Sema::translateTemplateArguments(clang::ASTTemplateArgsPtr const&, clang::TemplateArgumentListInfo&)\"},\n    {\"_Z25translateTemplateArgumentRN5clang4SemaERKNS_22ParsedTemplateArgumentE\", \"translateTemplateArgument(clang::Sema&, clang::ParsedTemplateArgument const&)\"},\n    {\"_ZN5clang4Sema18ActOnTypeParameterEPNS_5ScopeEbbNS_14SourceLocationES3_PNS_14IdentifierInfoES3_jjS3_NS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::ActOnTypeParameter(clang::Scope*, bool, bool, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, unsigned int, unsigned int, clang::SourceLocation, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang4Sema21CheckTemplateArgumentEPNS_20TemplateTypeParmDeclEPNS_14TypeSourceInfoE\", \"clang::Sema::CheckTemplateArgument(clang::TemplateTypeParmDecl*, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema33CheckNonTypeTemplateParameterTypeENS_8QualTypeENS_14SourceLocationE\", \"clang::Sema::CheckNonTypeTemplateParameterType(clang::QualType, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema29ActOnNonTypeTemplateParameterEPNS_5ScopeERNS_10DeclaratorEjjNS_14SourceLocationEPNS_4ExprE\", \"clang::Sema::ActOnNonTypeTemplateParameter(clang::Scope*, clang::Declarator&, unsigned int, unsigned int, clang::SourceLocation, clang::Expr*)\"},\n    {\"_ZN5clang4Sema21CheckTemplateArgumentEPNS_23NonTypeTemplateParmDeclENS_8QualTypeERPNS_4ExprERNS_16TemplateArgumentENS0_25CheckTemplateArgumentKindE\", \"clang::Sema::CheckTemplateArgument(clang::NonTypeTemplateParmDecl*, clang::QualType, clang::Expr*&, clang::TemplateArgument&, clang::Sema::CheckTemplateArgumentKind)\"},\n    {\"_ZN5clang4Sema30ActOnTemplateTemplateParameterEPNS_5ScopeENS_14SourceLocationEPNS_21TemplateParameterListES3_PNS_14IdentifierInfoES3_jjS3_NS_22ParsedTemplateArgumentE\", \"clang::Sema::ActOnTemplateTemplateParameter(clang::Scope*, clang::SourceLocation, clang::TemplateParameterList*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, unsigned int, unsigned int, clang::SourceLocation, clang::ParsedTemplateArgument)\"},\n    {\"_ZN5clang4Sema26ActOnTemplateParameterListEjNS_14SourceLocationES1_S1_PPNS_4DeclEjS1_\", \"clang::Sema::ActOnTemplateParameterList(unsigned int, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::Decl**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18CheckClassTemplateEPNS_5ScopeEjNS0_10TagUseKindENS_14SourceLocationERNS_12CXXScopeSpecEPNS_14IdentifierInfoES4_PNS_13AttributeListEPNS_21TemplateParameterListENS_15AccessSpecifierE\", \"clang::Sema::CheckClassTemplate(clang::Scope*, unsigned int, clang::Sema::TagUseKind, clang::SourceLocation, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*, clang::TemplateParameterList*, clang::AccessSpecifier)\"},\n    {\"_ZN5clang4Sema22CheckTemplateDeclScopeEPNS_5ScopeEPNS_21TemplateParameterListE\", \"clang::Sema::CheckTemplateDeclScope(clang::Scope*, clang::TemplateParameterList*)\"},\n    {\"_ZN5clang4Sema30TemplateParameterListsAreEqualEPNS_21TemplateParameterListES2_bNS0_30TemplateParameterListEqualKindENS_14SourceLocationE\", \"clang::Sema::TemplateParameterListsAreEqual(clang::TemplateParameterList*, clang::TemplateParameterList*, bool, clang::Sema::TemplateParameterListEqualKind, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema26CheckTemplateParameterListEPNS_21TemplateParameterListES2_NS0_24TemplateParamListContextE\", \"clang::Sema::CheckTemplateParameterList(clang::TemplateParameterList*, clang::TemplateParameterList*, clang::Sema::TemplateParamListContext)\"},\n    {\"_Z32DiagnoseUnexpandedParameterPacksRN5clang4SemaEPNS_24TemplateTemplateParmDeclE\", \"DiagnoseUnexpandedParameterPacks(clang::Sema&, clang::TemplateTemplateParmDecl*)\"},\n    {\"_Z31DiagnoseDefaultTemplateArgumentRN5clang4SemaENS0_24TemplateParamListContextENS_14SourceLocationENS_11SourceRangeE\", \"DiagnoseDefaultTemplateArgument(clang::Sema&, clang::Sema::TemplateParamListContext, clang::SourceLocation, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema39MatchTemplateParametersToScopeSpecifierENS_14SourceLocationERKNS_12CXXScopeSpecEPPNS_21TemplateParameterListEjbRbS8_\", \"clang::Sema::MatchTemplateParametersToScopeSpecifier(clang::SourceLocation, clang::CXXScopeSpec const&, clang::TemplateParameterList**, unsigned int, bool, bool&, bool&)\"},\n    {\"_ZN5clang4Sema19CheckTemplateIdTypeENS_12TemplateNameENS_14SourceLocationERKNS_24TemplateArgumentListInfoE\", \"clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang4Sema25CheckTemplateArgumentListEPNS_12TemplateDeclENS_14SourceLocationERKNS_24TemplateArgumentListInfoEbRN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_ZN5clang4Sema19ActOnTemplateIdTypeENS_9OpaquePtrINS_12TemplateNameEEENS_14SourceLocationES4_NS_18ASTTemplateArgsPtrES4_\", \"clang::Sema::ActOnTemplateIdType(clang::OpaquePtr<clang::TemplateName>, clang::SourceLocation, clang::SourceLocation, clang::ASTTemplateArgsPtr, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema22ActOnTagTemplateIdTypeERNS_12CXXScopeSpecENS_12ActionResultINS_9OpaquePtrINS_8QualTypeEEELb0EEENS0_10TagUseKindENS_17TypeSpecifierTypeENS_14SourceLocationE\", \"clang::Sema::ActOnTagTemplateIdType(clang::CXXScopeSpec&, clang::ActionResult<clang::OpaquePtr<clang::QualType>, false>, clang::Sema::TagUseKind, clang::TypeSpecifierType, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema19BuildTemplateIdExprERKNS_12CXXScopeSpecERNS_12LookupResultEbRKNS_24TemplateArgumentListInfoE\", \"clang::Sema::BuildTemplateIdExpr(clang::CXXScopeSpec const&, clang::LookupResult&, bool, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang4Sema28BuildQualifiedTemplateIdExprERNS_12CXXScopeSpecERKNS_19DeclarationNameInfoERKNS_24TemplateArgumentListInfoE\", \"clang::Sema::BuildQualifiedTemplateIdExpr(clang::CXXScopeSpec&, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang4Sema26ActOnDependentTemplateNameEPNS_5ScopeENS_14SourceLocationERNS_12CXXScopeSpecERNS_13UnqualifiedIdENS_9OpaquePtrINS_8QualTypeEEEbRNS8_INS_12TemplateNameEEE\", \"clang::Sema::ActOnDependentTemplateName(clang::Scope*, clang::SourceLocation, clang::CXXScopeSpec&, clang::UnqualifiedId&, clang::OpaquePtr<clang::QualType>, bool, clang::OpaquePtr<clang::TemplateName>&)\"},\n    {\"_ZN5clang4Sema25CheckTemplateTypeArgumentEPNS_20TemplateTypeParmDeclERKNS_19TemplateArgumentLocERN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"clang::Sema::CheckTemplateTypeArgument(clang::TemplateTypeParmDecl*, clang::TemplateArgumentLoc const&, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_ZN5clang4Sema39SubstDefaultTemplateArgumentIfAvailableEPNS_12TemplateDeclENS_14SourceLocationES3_PNS_4DeclERN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"clang::Sema::SubstDefaultTemplateArgumentIfAvailable(clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::Decl*, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_Z28SubstDefaultTemplateArgumentRN5clang4SemaEPNS_12TemplateDeclENS_14SourceLocationES4_PNS_20TemplateTypeParmDeclERN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"SubstDefaultTemplateArgument(clang::Sema&, clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::TemplateTypeParmDecl*, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_Z28SubstDefaultTemplateArgumentRN5clang4SemaEPNS_12TemplateDeclENS_14SourceLocationES4_PNS_23NonTypeTemplateParmDeclERN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"SubstDefaultTemplateArgument(clang::Sema&, clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::NonTypeTemplateParmDecl*, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_Z28SubstDefaultTemplateArgumentRN5clang4SemaEPNS_12TemplateDeclENS_14SourceLocationES4_PNS_24TemplateTemplateParmDeclERN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"SubstDefaultTemplateArgument(clang::Sema&, clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::TemplateTemplateParmDecl*, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_ZN5clang4Sema21CheckTemplateArgumentEPNS_9NamedDeclERKNS_19TemplateArgumentLocES2_NS_14SourceLocationES6_jRN4llvm15SmallVectorImplINS_16TemplateArgumentEEENS0_25CheckTemplateArgumentKindE\", \"clang::Sema::CheckTemplateArgument(clang::NamedDecl*, clang::TemplateArgumentLoc const&, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, unsigned int, llvm::SmallVectorImpl<clang::TemplateArgument>&, clang::Sema::CheckTemplateArgumentKind)\"},\n    {\"_ZN5clang4Sema21CheckTemplateArgumentEPNS_24TemplateTemplateParmDeclERKNS_19TemplateArgumentLocE\", \"clang::Sema::CheckTemplateArgument(clang::TemplateTemplateParmDecl*, clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN5clang4Sema36CheckTemplateArgumentPointerToMemberEPNS_4ExprERNS_16TemplateArgumentE\", \"clang::Sema::CheckTemplateArgumentPointerToMember(clang::Expr*, clang::TemplateArgument&)\"},\n    {\"_Z46CheckTemplateArgumentAddressOfObjectOrFunctionRN5clang4SemaEPNS_23NonTypeTemplateParmDeclENS_8QualTypeEPNS_4ExprERNS_16TemplateArgumentE\", \"CheckTemplateArgumentAddressOfObjectOrFunction(clang::Sema&, clang::NonTypeTemplateParmDecl*, clang::QualType, clang::Expr*, clang::TemplateArgument&)\"},\n    {\"_ZN5clang4Sema39BuildExpressionFromDeclTemplateArgumentERKNS_16TemplateArgumentENS_8QualTypeENS_14SourceLocationE\", \"clang::Sema::BuildExpressionFromDeclTemplateArgument(clang::TemplateArgument const&, clang::QualType, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema43BuildExpressionFromIntegralTemplateArgumentERKNS_16TemplateArgumentENS_14SourceLocationE\", \"clang::Sema::BuildExpressionFromIntegralTemplateArgument(clang::TemplateArgument const&, clang::SourceLocation)\"},\n    {\"_Z42DiagnoseTemplateParameterListArityMismatchRN5clang4SemaEPNS_21TemplateParameterListES3_NS0_30TemplateParameterListEqualKindENS_14SourceLocationE\", \"DiagnoseTemplateParameterListArityMismatch(clang::Sema&, clang::TemplateParameterList*, clang::TemplateParameterList*, clang::Sema::TemplateParameterListEqualKind, clang::SourceLocation)\"},\n    {\"_Z26MatchTemplateParameterKindRN5clang4SemaEPNS_9NamedDeclES3_bNS0_30TemplateParameterListEqualKindENS_14SourceLocationE\", \"MatchTemplateParameterKind(clang::Sema&, clang::NamedDecl*, clang::NamedDecl*, bool, clang::Sema::TemplateParameterListEqualKind, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema32ActOnClassTemplateSpecializationEPNS_5ScopeEjNS0_10TagUseKindENS_14SourceLocationERNS_12CXXScopeSpecENS_9OpaquePtrINS_12TemplateNameEEES4_S4_NS_18ASTTemplateArgsPtrES4_PNS_13AttributeListENS_11ASTMultiPtrIPNS_21TemplateParameterListEEE\", \"clang::Sema::ActOnClassTemplateSpecialization(clang::Scope*, unsigned int, clang::Sema::TagUseKind, clang::SourceLocation, clang::CXXScopeSpec&, clang::OpaquePtr<clang::TemplateName>, clang::SourceLocation, clang::SourceLocation, clang::ASTTemplateArgsPtr, clang::SourceLocation, clang::AttributeList*, clang::ASTMultiPtr<clang::TemplateParameterList*>)\"},\n    {\"_Z32CheckTemplateSpecializationScopeRN5clang4SemaEPNS_9NamedDeclES3_NS_14SourceLocationEb\", \"CheckTemplateSpecializationScope(clang::Sema&, clang::NamedDecl*, clang::NamedDecl*, clang::SourceLocation, bool)\"},\n    {\"_Z15getPreviousDeclPN5clang9NamedDeclE\", \"getPreviousDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema23ActOnTemplateDeclaratorEPNS_5ScopeENS_11ASTMultiPtrIPNS_21TemplateParameterListEEERNS_10DeclaratorE\", \"clang::Sema::ActOnTemplateDeclarator(clang::Scope*, clang::ASTMultiPtr<clang::TemplateParameterList*>, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema31ActOnStartOfFunctionTemplateDefEPNS_5ScopeENS_11ASTMultiPtrIPNS_21TemplateParameterListEEERNS_10DeclaratorE\", \"clang::Sema::ActOnStartOfFunctionTemplateDef(clang::Scope*, clang::ASTMultiPtr<clang::TemplateParameterList*>, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema38CheckSpecializationInstantiationRedeclENS_14SourceLocationENS_26TemplateSpecializationKindEPNS_9NamedDeclES2_S1_Rb\", \"clang::Sema::CheckSpecializationInstantiationRedecl(clang::SourceLocation, clang::TemplateSpecializationKind, clang::NamedDecl*, clang::TemplateSpecializationKind, clang::SourceLocation, bool&)\"},\n    {\"_ZN5clang4Sema44CheckDependentFunctionTemplateSpecializationEPNS_12FunctionDeclERKNS_24TemplateArgumentListInfoERNS_12LookupResultE\", \"clang::Sema::CheckDependentFunctionTemplateSpecialization(clang::FunctionDecl*, clang::TemplateArgumentListInfo const&, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema35CheckFunctionTemplateSpecializationEPNS_12FunctionDeclEPKNS_24TemplateArgumentListInfoERNS_12LookupResultE\", \"clang::Sema::CheckFunctionTemplateSpecialization(clang::FunctionDecl*, clang::TemplateArgumentListInfo const*, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema25CheckMemberSpecializationEPNS_9NamedDeclERNS_12LookupResultE\", \"clang::Sema::CheckMemberSpecialization(clang::NamedDecl*, clang::LookupResult&)\"},\n    {\"_ZN5clang4Sema26ActOnExplicitInstantiationEPNS_5ScopeENS_14SourceLocationES3_jS3_RKNS_12CXXScopeSpecENS_9OpaquePtrINS_12TemplateNameEEES3_S3_NS_18ASTTemplateArgsPtrES3_PNS_13AttributeListE\", \"clang::Sema::ActOnExplicitInstantiation(clang::Scope*, clang::SourceLocation, clang::SourceLocation, unsigned int, clang::SourceLocation, clang::CXXScopeSpec const&, clang::OpaquePtr<clang::TemplateName>, clang::SourceLocation, clang::SourceLocation, clang::ASTTemplateArgsPtr, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_Z31CheckExplicitInstantiationScopeRN5clang4SemaEPNS_9NamedDeclENS_14SourceLocationEb\", \"CheckExplicitInstantiationScope(clang::Sema&, clang::NamedDecl*, clang::SourceLocation, bool)\"},\n    {\"_ZN5clang4Sema26ActOnExplicitInstantiationEPNS_5ScopeENS_14SourceLocationES3_jS3_RNS_12CXXScopeSpecEPNS_14IdentifierInfoES3_PNS_13AttributeListE\", \"clang::Sema::ActOnExplicitInstantiation(clang::Scope*, clang::SourceLocation, clang::SourceLocation, unsigned int, clang::SourceLocation, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema26ActOnExplicitInstantiationEPNS_5ScopeENS_14SourceLocationES3_RNS_10DeclaratorE\", \"clang::Sema::ActOnExplicitInstantiation(clang::Scope*, clang::SourceLocation, clang::SourceLocation, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema17ActOnDependentTagEPNS_5ScopeEjNS0_10TagUseKindERKNS_12CXXScopeSpecEPNS_14IdentifierInfoENS_14SourceLocationES9_\", \"clang::Sema::ActOnDependentTag(clang::Scope*, unsigned int, clang::Sema::TagUseKind, clang::CXXScopeSpec const&, clang::IdentifierInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17ActOnTypenameTypeEPNS_5ScopeENS_14SourceLocationERKNS_12CXXScopeSpecERKNS_14IdentifierInfoES3_\", \"clang::Sema::ActOnTypenameType(clang::Scope*, clang::SourceLocation, clang::CXXScopeSpec const&, clang::IdentifierInfo const&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17CheckTypenameTypeENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierERKNS_14IdentifierInfoENS_14SourceLocationENS_11SourceRangeES7_\", \"clang::Sema::CheckTypenameType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const&, clang::SourceLocation, clang::SourceRange, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17ActOnTypenameTypeEPNS_5ScopeENS_14SourceLocationERKNS_12CXXScopeSpecES3_NS_9OpaquePtrINS_8QualTypeEEE\", \"clang::Sema::ActOnTypenameType(clang::Scope*, clang::SourceLocation, clang::CXXScopeSpec const&, clang::SourceLocation, clang::OpaquePtr<clang::QualType>)\"},\n    {\"_ZN5clang4Sema33RebuildTypeInCurrentInstantiationEPNS_14TypeSourceInfoENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::RebuildTypeInCurrentInstantiation(clang::TypeSourceInfo*, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE13TransformTypeEPNS_14TypeSourceInfoE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformType(clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema33RebuildExprInCurrentInstantiationEPNS_4ExprE\", \"clang::Sema::RebuildExprInCurrentInstantiation(clang::Expr*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE13TransformExprEPNS_4ExprE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema48RebuildNestedNameSpecifierInCurrentInstantiationERNS_12CXXScopeSpecE\", \"clang::Sema::RebuildNestedNameSpecifierInCurrentInstantiation(clang::CXXScopeSpec&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE28TransformNestedNameSpecifierEPNS_19NestedNameSpecifierENS_11SourceRangeENS_8QualTypeEPNS_9NamedDeclE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformNestedNameSpecifier(clang::NestedNameSpecifier*, clang::SourceRange, clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema31getTemplateArgumentBindingsTextEPKNS_21TemplateParameterListERKNS_20TemplateArgumentListE\", \"clang::Sema::getTemplateArgumentBindingsText(clang::TemplateParameterList const*, clang::TemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema31getTemplateArgumentBindingsTextEPKNS_21TemplateParameterListEPKNS_16TemplateArgumentEj\", \"clang::Sema::getTemplateArgumentBindingsText(clang::TemplateParameterList const*, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE26TransformTypeInObjectScopeEPNS_14TypeSourceInfoENS_8QualTypeEPNS_9NamedDeclEPNS_19NestedNameSpecifierE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTypeInObjectScope(clang::TypeSourceInfo*, clang::QualType, clang::NamedDecl*, clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE21TransformTemplateNameENS_12TemplateNameENS_8QualTypeEPNS_9NamedDeclE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTemplateName(clang::TemplateName, clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE35TransformTemplateSpecializationTypeERNS_14TypeLocBuilderENS_29TemplateSpecializationTypeLocENS_12TemplateNameE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE44TransformDependentTemplateSpecializationTypeERNS_14TypeLocBuilderENS_38DependentTemplateSpecializationTypeLocEPNS_19NestedNameSpecifierE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformDependentTemplateSpecializationType(clang::TypeLocBuilder&, clang::DependentTemplateSpecializationTypeLoc, clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE13TransformTypeERNS_14TypeLocBuilderENS_7TypeLocE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE27TransformFunctionTypeParamsENS_14SourceLocationEPPNS_11ParmVarDeclEjPKNS_8QualTypeERN4llvm15SmallVectorImplIS8_EEPNSC_IS6_EE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformFunctionTypeParams(clang::SourceLocation, clang::ParmVarDecl**, unsigned int, clang::QualType const*, llvm::SmallVectorImpl<clang::QualType>&, llvm::SmallVectorImpl<clang::ParmVarDecl*>*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE26TransformFunctionTypeParamEPNS_11ParmVarDeclEN4llvm8OptionalIjEE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformFunctionTypeParam(clang::ParmVarDecl*, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE16RebuildArrayTypeENS_8QualTypeENS_9ArrayType17ArraySizeModifierEPKN4llvm5APIntEPNS_4ExprEjNS_11SourceRangeE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::RebuildArrayType(clang::QualType, clang::ArrayType::ArraySizeModifier, llvm::APInt const*, clang::Expr*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE22TransformReferenceTypeERNS_14TypeLocBuilderENS_16ReferenceTypeLocE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformReferenceType(clang::TypeLocBuilder&, clang::ReferenceTypeLoc)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE26TransformTemplateArgumentsINS_33TemplateArgumentLocInventIteratorIS2_PKNS_16TemplateArgumentEEEEEbT_SA_RNS_24TemplateArgumentListInfoE\", \"bool clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTemplateArguments<clang::TemplateArgumentLocInventIterator<(anonymous namespace)::CurrentInstantiationRebuilder, clang::TemplateArgument const*> >(clang::TemplateArgumentLocInventIterator<(anonymous namespace)::CurrentInstantiationRebuilder, clang::TemplateArgument const*>, clang::TemplateArgumentLocInventIterator<(anonymous namespace)::CurrentInstantiationRebuilder, clang::TemplateArgument const*>, clang::TemplateArgumentListInfo&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE25TransformTemplateArgumentERKNS_19TemplateArgumentLocERS4_\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE20RebuildPackExpansionENS_19TemplateArgumentLocENS_14SourceLocationEN4llvm8OptionalIjEE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::RebuildPackExpansion(clang::TemplateArgumentLoc, clang::SourceLocation, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE25InventTemplateArgumentLocERKNS_16TemplateArgumentERNS_19TemplateArgumentLocE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::InventTemplateArgumentLoc(clang::TemplateArgument const&, clang::TemplateArgumentLoc&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE23TransformBinaryOperatorEPNS_14BinaryOperatorE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE17TransformCallExprEPNS_8CallExprE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformCallExpr(clang::CallExpr*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE21TransformCompoundStmtEPNS_12CompoundStmtEb\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformCompoundStmt(clang::CompoundStmt*, bool)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE13TransformStmtEPNS_4StmtE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformStmt(clang::Stmt*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE21TransformCXXCatchStmtEPNS_12CXXCatchStmtE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE14TransformExprsEPPNS_4ExprEjbRN4llvm15SmallVectorImplIS5_EEPb\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformExprs(clang::Expr**, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>&, bool*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE26TransformTemplateArgumentsIPKNS_19TemplateArgumentLocEEEbT_S8_RNS_24TemplateArgumentListInfoE\", \"bool clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE28TransformDeclarationNameInfoERKNS_19DeclarationNameInfoE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformDeclarationNameInfo(clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_129CurrentInstantiationRebuilderEE25TransformCXXNamedCastExprEPNS_16CXXNamedCastExprE\", \"clang::TreeTransform<(anonymous namespace)::CurrentInstantiationRebuilder>::TransformCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_Z50CheckNonTypeClassTemplatePartialSpecializationArgsRN5clang4SemaEPNS_23NonTypeTemplateParmDeclEPKNS_16TemplateArgumentEj\", \"CheckNonTypeClassTemplatePartialSpecializationArgs(clang::Sema&, clang::NonTypeTemplateParmDecl*, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN5clang11TypeVisitorIN12_GLOBAL__N_127UnnamedLocalNoLinkageFinderEbE5VisitEPKNS_4TypeE\", \"clang::TypeVisitor<(anonymous namespace)::UnnamedLocalNoLinkageFinder, bool>::Visit(clang::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_127UnnamedLocalNoLinkageFinder24VisitNestedNameSpecifierEPN5clang19NestedNameSpecifierE\", \"(anonymous namespace)::UnnamedLocalNoLinkageFinder::VisitNestedNameSpecifier(clang::NestedNameSpecifier*)\"},\n    {\"_ZN12_GLOBAL__N_127UnnamedLocalNoLinkageFinder12VisitTagDeclEPKN5clang7TagDeclE\", \"(anonymous namespace)::UnnamedLocalNoLinkageFinder::VisitTagDecl(clang::TagDecl const*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE12TraverseTypeENS_8QualTypeE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseType(clang::QualType)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE27TraverseNestedNameSpecifierEPNS_19NestedNameSpecifierE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseNestedNameSpecifier(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE24TraverseTemplateArgumentERKNS_16TemplateArgumentE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE12TraverseStmtEPNS_4StmtE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseStmt(clang::Stmt*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE15TraverseTypeLocENS_7TypeLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseTypeLoc(clang::TypeLoc)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE27TraverseTemplateArgumentLocERKNS_19TemplateArgumentLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseTemplateArgumentLoc(clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE12TraverseDeclEPNS_4DeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseDecl(clang::Decl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE24TraverseDeclaratorHelperEPNS_14DeclaratorDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseDeclaratorHelper(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE22TraverseFunctionHelperEPNS_12FunctionDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseFunctionHelper(clang::FunctionDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_117DependencyCheckerEE23TraverseCXXRecordHelperEPNS_13CXXRecordDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::DependencyChecker>::TraverseCXXRecordHelper(clang::CXXRecordDecl*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang19TemplateArgumentLocEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::TemplateArgumentLoc>::operator=(llvm::SmallVectorImpl<clang::TemplateArgumentLoc> const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPKN5clang19TemplateArgumentLocEPS1_ET0_T_S6_S5_St12__false_type\", \"clang::TemplateArgumentLoc* std::__uninitialized_copy_aux<clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc*, std::__false_type)\"},\n    {\"_ZN5clang4Sema23DeduceTemplateArgumentsEPNS_38ClassTemplatePartialSpecializationDeclERKNS_20TemplateArgumentListERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::DeduceTemplateArguments(clang::ClassTemplatePartialSpecializationDecl*, clang::TemplateArgumentList const&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_Z31FinishTemplateArgumentDeductionRN5clang4SemaEPNS_38ClassTemplatePartialSpecializationDeclERKNS_20TemplateArgumentListERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEERNS_4sema21TemplateDeductionInfoE\", \"FinishTemplateArgumentDeduction(clang::Sema&, clang::ClassTemplatePartialSpecializationDecl*, clang::TemplateArgumentList const&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema35SubstituteExplicitTemplateArgumentsEPNS_20FunctionTemplateDeclERKNS_24TemplateArgumentListInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEERNS7_INS_8QualTypeEEEPSB_RNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::SubstituteExplicitTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo const&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<clang::QualType>&, clang::QualType*, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema31FinishTemplateArgumentDeductionEPNS_20FunctionTemplateDeclERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEEjRPNS_12FunctionDeclERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_Z30ConvertDeducedTemplateArgumentRN5clang4SemaEPNS_9NamedDeclENS_23DeducedTemplateArgumentES3_NS_8QualTypeEjRNS_4sema21TemplateDeductionInfoEbRN4llvm15SmallVectorImplINS_16TemplateArgumentEEE\", \"ConvertDeducedTemplateArgument(clang::Sema&, clang::NamedDecl*, clang::DeducedTemplateArgument, clang::NamedDecl*, clang::QualType, unsigned int, clang::sema::TemplateDeductionInfo&, bool, llvm::SmallVectorImpl<clang::TemplateArgument>&)\"},\n    {\"_ZN5clang4Sema23DeduceTemplateArgumentsEPNS_20FunctionTemplateDeclEPKNS_24TemplateArgumentListInfoEPPNS_4ExprEjRPNS_12FunctionDeclERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo const*, clang::Expr**, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_Z41AdjustFunctionParmAndArgTypesForDeductionRN5clang4SemaEPNS_21TemplateParameterListERNS_8QualTypeES5_PNS_4ExprERj\", \"AdjustFunctionParmAndArgTypesForDeduction(clang::Sema&, clang::TemplateParameterList*, clang::QualType&, clang::QualType&, clang::Expr*, unsigned int&)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListENS_8QualTypeES4_RNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEEjbPNS9_I33RefParamPartialOrderingComparisonEE\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::QualType, clang::QualType, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, bool, llvm::SmallVectorImpl<RefParamPartialOrderingComparison>*)\"},\n    {\"_Z28PrepareArgumentPackDeductionRN5clang4SemaERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEERKNS3_IjEES6_RNS3_INS2_11SmallVectorIS4_Lj4EEEEE\", \"PrepareArgumentPackDeduction(clang::Sema&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<unsigned int> const&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<llvm::SmallVector<clang::DeducedTemplateArgument, 4u> >&)\"},\n    {\"_Z27FinishArgumentPackDeductionRN5clang4SemaEPNS_21TemplateParameterListEbRN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEERKNS5_IjEES8_RNS5_INS4_11SmallVectorIS6_Lj4EEEEERNS_4sema21TemplateDeductionInfoE\", \"FinishArgumentPackDeduction(clang::Sema&, clang::TemplateParameterList*, bool, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<unsigned int> const&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, llvm::SmallVectorImpl<llvm::SmallVector<clang::DeducedTemplateArgument, 4u> >&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema23DeduceTemplateArgumentsEPNS_20FunctionTemplateDeclEPKNS_24TemplateArgumentListInfoENS_8QualTypeERPNS_12FunctionDeclERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo const*, clang::QualType, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema23DeduceTemplateArgumentsEPNS_20FunctionTemplateDeclENS_8QualTypeERPNS_17CXXConversionDeclERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::QualType, clang::CXXConversionDecl*&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema23DeduceTemplateArgumentsEPNS_20FunctionTemplateDeclEPKNS_24TemplateArgumentListInfoERPNS_12FunctionDeclERNS_4sema21TemplateDeductionInfoE\", \"clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo const*, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&)\"},\n    {\"_ZN5clang4Sema26getMoreSpecializedTemplateEPNS_20FunctionTemplateDeclES2_NS_14SourceLocationENS_30TemplatePartialOrderingContextEj\", \"clang::Sema::getMoreSpecializedTemplate(clang::FunctionTemplateDecl*, clang::FunctionTemplateDecl*, clang::SourceLocation, clang::TemplatePartialOrderingContext, unsigned int)\"},\n    {\"_Z24isAtLeastAsSpecializedAsRN5clang4SemaENS_14SourceLocationEPNS_20FunctionTemplateDeclES4_NS_30TemplatePartialOrderingContextEjPN4llvm15SmallVectorImplI33RefParamPartialOrderingComparisonEE\", \"isAtLeastAsSpecializedAs(clang::Sema&, clang::SourceLocation, clang::FunctionTemplateDecl*, clang::FunctionTemplateDecl*, clang::TemplatePartialOrderingContext, unsigned int, llvm::SmallVectorImpl<RefParamPartialOrderingComparison>*)\"},\n    {\"_ZN5clang4Sema18getMostSpecializedENS_21UnresolvedSetIteratorES1_NS_30TemplatePartialOrderingContextEjNS_14SourceLocationERKNS_17PartialDiagnosticES6_S6_\", \"clang::Sema::getMostSpecialized(clang::UnresolvedSetIterator, clang::UnresolvedSetIterator, clang::TemplatePartialOrderingContext, unsigned int, clang::SourceLocation, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema39getMoreSpecializedPartialSpecializationEPNS_38ClassTemplatePartialSpecializationDeclES2_NS_14SourceLocationE\", \"clang::Sema::getMoreSpecializedPartialSpecialization(clang::ClassTemplatePartialSpecializationDecl*, clang::ClassTemplatePartialSpecializationDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema26MarkUsedTemplateParametersERKNS_20TemplateArgumentListEbjRN4llvm15SmallVectorImplIbEE\", \"clang::Sema::MarkUsedTemplateParameters(clang::TemplateArgumentList const&, bool, unsigned int, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_Z26MarkUsedTemplateParametersRN5clang4SemaERKNS_16TemplateArgumentEbjRN4llvm15SmallVectorImplIbEE\", \"MarkUsedTemplateParameters(clang::Sema&, clang::TemplateArgument const&, bool, unsigned int, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_ZN5clang4Sema29MarkDeducedTemplateParametersEPNS_20FunctionTemplateDeclERN4llvm15SmallVectorImplIbEE\", \"clang::Sema::MarkDeducedTemplateParameters(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_Z26MarkUsedTemplateParametersRN5clang4SemaENS_8QualTypeEbjRN4llvm15SmallVectorImplIbEE\", \"MarkUsedTemplateParameters(clang::Sema&, clang::QualType, bool, unsigned int, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_Z26MarkUsedTemplateParametersRN5clang4SemaENS_12TemplateNameEbjRN4llvm15SmallVectorImplIbEE\", \"MarkUsedTemplateParameters(clang::Sema&, clang::TemplateName, bool, unsigned int, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_Z26MarkUsedTemplateParametersRN5clang4SemaEPNS_19NestedNameSpecifierEbjRN4llvm15SmallVectorImplIbEE\", \"MarkUsedTemplateParameters(clang::Sema&, clang::NestedNameSpecifier*, bool, unsigned int, llvm::SmallVectorImpl<bool>&)\"},\n    {\"_Z35MaybeAddImplicitObjectParameterTypeRN5clang10ASTContextEPNS_13CXXMethodDeclERN4llvm15SmallVectorImplINS_8QualTypeEEE\", \"MaybeAddImplicitObjectParameterType(clang::ASTContext&, clang::CXXMethodDecl*, llvm::SmallVectorImpl<clang::QualType>&)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListEPKNS_8QualTypeEjS6_jRNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEEjbPNSB_I33RefParamPartialOrderingComparisonEE\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::QualType const*, unsigned int, clang::QualType const*, unsigned int, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, bool, llvm::SmallVectorImpl<RefParamPartialOrderingComparison>*)\"},\n    {\"_Z29checkDeducedTemplateArgumentsRN5clang10ASTContextERKNS_23DeducedTemplateArgumentES4_\", \"checkDeducedTemplateArguments(clang::ASTContext&, clang::DeducedTemplateArgument const&, clang::DeducedTemplateArgument const&)\"},\n    {\"_Z20hasSameExtendedValueN4llvm6APSIntES0_\", \"hasSameExtendedValue(llvm::APSInt, llvm::APSInt)\"},\n    {\"_Z29DeduceNonTypeTemplateArgumentRN5clang4SemaEPNS_23NonTypeTemplateParmDeclEN4llvm6APSIntENS_8QualTypeEbRNS_4sema21TemplateDeductionInfoERNS4_15SmallVectorImplINS_23DeducedTemplateArgumentEEE\", \"DeduceNonTypeTemplateArgument(clang::Sema&, clang::NonTypeTemplateParmDecl*, llvm::APSInt, clang::QualType, bool, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&)\"},\n    {\"_Z29DeduceNonTypeTemplateArgumentRN5clang4SemaEPNS_23NonTypeTemplateParmDeclEPNS_4ExprERNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEE\", \"DeduceNonTypeTemplateArgument(clang::Sema&, clang::NonTypeTemplateParmDecl*, clang::Expr*, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListEPKNS_26TemplateSpecializationTypeENS_8QualTypeERNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEE\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::TemplateSpecializationType const*, clang::QualType, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListENS_12TemplateNameES4_RNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEE\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::TemplateName, clang::TemplateName, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListEPKNS_16TemplateArgumentEjS6_jRNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEEb\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::TemplateArgument const*, unsigned int, clang::TemplateArgument const*, unsigned int, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, bool)\"},\n    {\"_Z23DeduceTemplateArgumentsRN5clang4SemaEPNS_21TemplateParameterListERKNS_16TemplateArgumentES4_RNS_4sema21TemplateDeductionInfoERN4llvm15SmallVectorImplINS_23DeducedTemplateArgumentEEE\", \"DeduceTemplateArguments(clang::Sema&, clang::TemplateParameterList*, clang::TemplateArgument const&, clang::TemplateArgument, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&)\"},\n    {\"_Z17GetTypeOfFunctionRN5clang10ASTContextERKNS_12OverloadExpr10FindResultEPNS_12FunctionDeclE\", \"GetTypeOfFunction(clang::ASTContext&, clang::OverloadExpr::FindResult const&, clang::FunctionDecl*)\"},\n    {\"_Z17isSameTemplateArgRN5clang10ASTContextERKNS_16TemplateArgumentES4_\", \"isSameTemplateArg(clang::ASTContext&, clang::TemplateArgument const&, clang::TemplateArgument const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23DeducedTemplateArgumentEE6resizeEj\", \"llvm::SmallVectorImpl<clang::DeducedTemplateArgument>::resize(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23DeducedTemplateArgumentEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::DeducedTemplateArgument>::push_back(clang::DeducedTemplateArgument const&)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIN5clang14SourceLocationENS2_17PartialDiagnosticEEE6appendIPKS5_EEvT_SA_\", \"void llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic> >::append<std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*>(std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*, std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclENS_11SmallVectorISt4pairINS1_14SourceLocationENS1_17PartialDiagnosticEELj1EEENS_12DenseMapInfoIS3_EENSA_IS9_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::Decl*, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> > >::FindAndConstruct(clang::Decl* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclENS_11SmallVectorISt4pairINS1_14SourceLocationENS1_17PartialDiagnosticEELj1EEENS_12DenseMapInfoIS3_EENSA_IS9_EEE16InsertIntoBucketERKS3_RKS9_PS5_IS3_S9_E\", \"llvm::DenseMap<clang::Decl*, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> > >::InsertIntoBucket(clang::Decl* const&, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> const&, std::pair<clang::Decl*, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclENS_11SmallVectorISt4pairINS1_14SourceLocationENS1_17PartialDiagnosticEELj1EEENS_12DenseMapInfoIS3_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::Decl*, llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<clang::SourceLocation, clang::PartialDiagnostic>, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIN5clang14SourceLocationENS2_17PartialDiagnosticEEEaSERKS6_\", \"llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic> >::operator=(llvm::SmallVectorImpl<std::pair<clang::SourceLocation, clang::PartialDiagnostic> > const&)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPKSt4pairIN5clang14SourceLocationENS4_17PartialDiagnosticEEPS7_EET0_T_SC_SB_\", \"std::pair<clang::SourceLocation, clang::PartialDiagnostic>* std::__copy<false, std::random_access_iterator_tag>::copy<std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*, std::pair<clang::SourceLocation, clang::PartialDiagnostic>*>(std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*, std::pair<clang::SourceLocation, clang::PartialDiagnostic> const*, std::pair<clang::SourceLocation, clang::PartialDiagnostic>*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang23DeducedTemplateArgumentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::DeducedTemplateArgument, false>::grow(unsigned long)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN5clang23DeducedTemplateArgumentES2_ET0_T_S4_S3_St12__false_type\", \"clang::DeducedTemplateArgument* std::__uninitialized_copy_aux<clang::DeducedTemplateArgument*, clang::DeducedTemplateArgument*>(clang::DeducedTemplateArgument*, clang::DeducedTemplateArgument*, clang::DeducedTemplateArgument*, std::__false_type)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23DeducedTemplateArgumentEE15construct_rangeEPS2_S4_RKS2_\", \"llvm::SmallVectorImpl<clang::DeducedTemplateArgument>::construct_range(clang::DeducedTemplateArgument*, clang::DeducedTemplateArgument*, clang::DeducedTemplateArgument const&)\"},\n    {\"_ZN4llvm11SmallVectorINS0_IN5clang23DeducedTemplateArgumentELj4EEELj2EEC2EjRKS3_\", \"llvm::SmallVector<llvm::SmallVector<clang::DeducedTemplateArgument, 4u>, 2u>::SmallVector(unsigned int, llvm::SmallVector<clang::DeducedTemplateArgument, 4u> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIN5clang23DeducedTemplateArgumentELj4EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<clang::DeducedTemplateArgument, 4u>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIN5clang23DeducedTemplateArgumentELj4EEELb0EE13destroy_rangeEPS4_S6_\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<clang::DeducedTemplateArgument, 4u>, false>::destroy_range(llvm::SmallVector<clang::DeducedTemplateArgument, 4u>*, llvm::SmallVector<clang::DeducedTemplateArgument, 4u>*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23DeducedTemplateArgumentEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::DeducedTemplateArgument>::operator=(llvm::SmallVectorImpl<clang::DeducedTemplateArgument> const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPKN5clang23DeducedTemplateArgumentEPS1_ET0_T_S6_S5_St12__false_type\", \"clang::DeducedTemplateArgument* std::__uninitialized_copy_aux<clang::DeducedTemplateArgument const*, clang::DeducedTemplateArgument*>(clang::DeducedTemplateArgument const*, clang::DeducedTemplateArgument const*, clang::DeducedTemplateArgument*, std::__false_type)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang8QualTypeEE6insertIPKS2_EEPS2_S7_T_S8_\", \"clang::QualType* llvm::SmallVectorImpl<clang::QualType>::insert<clang::QualType const*>(clang::QualType*, clang::QualType const*, clang::QualType const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang8QualTypeEE6resizeEj\", \"llvm::SmallVectorImpl<clang::QualType>::resize(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang23DeducedTemplateArgumentEE6appendIPKNS1_16TemplateArgumentEEEvT_S8_\", \"void llvm::SmallVectorImpl<clang::DeducedTemplateArgument>::append<clang::TemplateArgument const*>(clang::TemplateArgument const*, clang::TemplateArgument const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseI33RefParamPartialOrderingComparisonLb0EE4growEm\", \"llvm::SmallVectorTemplateBase<RefParamPartialOrderingComparison, false>::grow(unsigned long)\"},\n    {\"_ZN5clang23DeducedTemplateArgumentC2ERKNS_16TemplateArgumentEb\", \"clang::DeducedTemplateArgument::DeducedTemplateArgument(clang::TemplateArgument const&, bool)\"},\n    {\"_ZN5clang4Sema28getTemplateInstantiationArgsEPNS_9NamedDeclEPKNS_20TemplateArgumentListEbPKNS_12FunctionDeclE\", \"clang::Sema::getTemplateInstantiationArgs(clang::NamedDecl*, clang::TemplateArgumentList const*, bool, clang::FunctionDecl const*)\"},\n    {\"_ZNK5clang4Sema27ActiveTemplateInstantiation21isInstantiationRecordEv\", \"clang::Sema::ActiveTemplateInstantiation::isInstantiationRecord() const\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_4DeclENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::Decl*, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_4DeclENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::Decl*, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplate23CheckInstantiationDepthENS_14SourceLocationENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::CheckInstantiationDepth(clang::SourceLocation, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_12TemplateDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::TemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_12TemplateDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::TemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_20FunctionTemplateDeclEPKNS_16TemplateArgumentEjNS0_27ActiveTemplateInstantiation17InstantiationKindERNS_4sema21TemplateDeductionInfoENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::FunctionTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::Sema::ActiveTemplateInstantiation::InstantiationKind, clang::sema::TemplateDeductionInfo&, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_20FunctionTemplateDeclEPKNS_16TemplateArgumentEjNS0_27ActiveTemplateInstantiation17InstantiationKindERNS_4sema21TemplateDeductionInfoENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::FunctionTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::Sema::ActiveTemplateInstantiation::InstantiationKind, clang::sema::TemplateDeductionInfo&, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_38ClassTemplatePartialSpecializationDeclEPKNS_16TemplateArgumentEjRNS_4sema21TemplateDeductionInfoENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::ClassTemplatePartialSpecializationDecl*, clang::TemplateArgument const*, unsigned int, clang::sema::TemplateDeductionInfo&, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_38ClassTemplatePartialSpecializationDeclEPKNS_16TemplateArgumentEjRNS_4sema21TemplateDeductionInfoENS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::ClassTemplatePartialSpecializationDecl*, clang::TemplateArgument const*, unsigned int, clang::sema::TemplateDeductionInfo&, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_11ParmVarDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::ParmVarDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_11ParmVarDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::ParmVarDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_9NamedDeclEPNS_23NonTypeTemplateParmDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::NamedDecl*, clang::NonTypeTemplateParmDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_9NamedDeclEPNS_23NonTypeTemplateParmDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::NamedDecl*, clang::NonTypeTemplateParmDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_9NamedDeclEPNS_24TemplateTemplateParmDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::NamedDecl*, clang::TemplateTemplateParmDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_9NamedDeclEPNS_24TemplateTemplateParmDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::NamedDecl*, clang::TemplateTemplateParmDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC1ERS0_NS_14SourceLocationEPNS_12TemplateDeclEPNS_9NamedDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::TemplateDecl*, clang::NamedDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplateC2ERS0_NS_14SourceLocationEPNS_12TemplateDeclEPNS_9NamedDeclEPKNS_16TemplateArgumentEjNS_11SourceRangeE\", \"clang::Sema::InstantiatingTemplate::InstantiatingTemplate(clang::Sema&, clang::SourceLocation, clang::TemplateDecl*, clang::NamedDecl*, clang::TemplateArgument const*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang4Sema21InstantiatingTemplate5ClearEv\", \"clang::Sema::InstantiatingTemplate::Clear()\"},\n    {\"_ZN5clang4Sema23PrintInstantiationStackEv\", \"clang::Sema::PrintInstantiationStack()\"},\n    {\"_ZNK5clang4Sema15isSFINAEContextEv\", \"clang::Sema::isSFINAEContext() const\"},\n    {\"_ZN5clang4Sema9SubstTypeEPNS_14TypeSourceInfoERKNS_30MultiLevelTemplateArgumentListENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::SubstType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE13TransformTypeEPNS_14TypeSourceInfoE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang4Sema9SubstTypeENS_7TypeLocERKNS_30MultiLevelTemplateArgumentListENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::SubstType(clang::TypeLoc, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE13TransformTypeERNS_14TypeLocBuilderENS_7TypeLocE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc)\"},\n    {\"_ZN5clang4Sema9SubstTypeENS_8QualTypeERKNS_30MultiLevelTemplateArgumentListENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::SubstType(clang::QualType, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE13TransformTypeENS_8QualTypeE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::QualType)\"},\n    {\"_ZN5clang4Sema21SubstFunctionDeclTypeEPNS_14TypeSourceInfoERKNS_30MultiLevelTemplateArgumentListENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::SubstFunctionDeclType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema16SubstParmVarDeclEPNS_11ParmVarDeclERKNS_30MultiLevelTemplateArgumentListEN4llvm8OptionalIjEE\", \"clang::Sema::SubstParmVarDecl(clang::ParmVarDecl*, clang::MultiLevelTemplateArgumentList const&, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang23LocalInstantiationScope24InstantiatedLocalPackArgEPKNS_4DeclEPS1_\", \"clang::LocalInstantiationScope::InstantiatedLocalPackArg(clang::Decl const*, clang::Decl*)\"},\n    {\"_ZN5clang23LocalInstantiationScope17InstantiatedLocalEPKNS_4DeclEPS1_\", \"clang::LocalInstantiationScope::InstantiatedLocal(clang::Decl const*, clang::Decl*)\"},\n    {\"_ZN5clang4Sema14SubstParmTypesENS_14SourceLocationEPPNS_11ParmVarDeclEjRKNS_30MultiLevelTemplateArgumentListERN4llvm15SmallVectorImplINS_8QualTypeEEEPNS9_IS3_EE\", \"clang::Sema::SubstParmTypes(clang::SourceLocation, clang::ParmVarDecl**, unsigned int, clang::MultiLevelTemplateArgumentList const&, llvm::SmallVectorImpl<clang::QualType>&, llvm::SmallVectorImpl<clang::ParmVarDecl*>*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE27TransformFunctionTypeParamsENS_14SourceLocationEPPNS_11ParmVarDeclEjPKNS_8QualTypeERN4llvm15SmallVectorImplIS8_EEPNSC_IS6_EE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformFunctionTypeParams(clang::SourceLocation, clang::ParmVarDecl**, unsigned int, clang::QualType const*, llvm::SmallVectorImpl<clang::QualType>&, llvm::SmallVectorImpl<clang::ParmVarDecl*>*)\"},\n    {\"_ZN5clang4Sema19SubstBaseSpecifiersEPNS_13CXXRecordDeclES2_RKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstBaseSpecifiers(clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema16InstantiateClassENS_14SourceLocationEPNS_13CXXRecordDeclES3_RKNS_30MultiLevelTemplateArgumentListENS_26TemplateSpecializationKindEb\", \"clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool)\"},\n    {\"_ZN5clang4Sema38InstantiateClassTemplateSpecializationENS_14SourceLocationEPNS_31ClassTemplateSpecializationDeclENS_26TemplateSpecializationKindEb\", \"clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool)\"},\n    {\"_ZN5clang4Sema23InstantiateClassMembersENS_14SourceLocationEPNS_13CXXRecordDeclERKNS_30MultiLevelTemplateArgumentListENS_26TemplateSpecializationKindE\", \"clang::Sema::InstantiateClassMembers(clang::SourceLocation, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind)\"},\n    {\"_ZN5clang4Sema45InstantiateClassTemplateSpecializationMembersENS_14SourceLocationEPNS_31ClassTemplateSpecializationDeclENS_26TemplateSpecializationKindE\", \"clang::Sema::InstantiateClassTemplateSpecializationMembers(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind)\"},\n    {\"_ZN5clang4Sema9SubstStmtEPNS_4StmtERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE13TransformStmtEPNS_4StmtE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*)\"},\n    {\"_ZN5clang4Sema9SubstExprEPNS_4ExprERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE13TransformExprEPNS_4ExprE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)\"},\n    {\"_ZN5clang4Sema10SubstExprsEPPNS_4ExprEjbRKNS_30MultiLevelTemplateArgumentListERN4llvm15SmallVectorImplIS2_EE\", \"clang::Sema::SubstExprs(clang::Expr**, unsigned int, bool, clang::MultiLevelTemplateArgumentList const&, llvm::SmallVectorImpl<clang::Expr*>&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE14TransformExprsEPPNS_4ExprEjbRN4llvm15SmallVectorImplIS5_EEPb\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(clang::Expr**, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>&, bool*)\"},\n    {\"_ZN5clang4Sema24SubstNestedNameSpecifierEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstNestedNameSpecifier(clang::NestedNameSpecifier*, clang::SourceRange, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE28TransformNestedNameSpecifierEPNS_19NestedNameSpecifierENS_11SourceRangeENS_8QualTypeEPNS_9NamedDeclE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformNestedNameSpecifier(clang::NestedNameSpecifier*, clang::SourceRange, clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema24SubstDeclarationNameInfoERKNS_19DeclarationNameInfoERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstDeclarationNameInfo(clang::DeclarationNameInfo const&, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE28TransformDeclarationNameInfoERKNS_19DeclarationNameInfoE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclarationNameInfo(clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang4Sema17SubstTemplateNameENS_12TemplateNameENS_14SourceLocationERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstTemplateName(clang::TemplateName, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN12_GLOBAL__N_120TemplateInstantiator21TransformTemplateNameEN5clang12TemplateNameENS1_8QualTypeEPNS1_9NamedDeclE\", \"(anonymous namespace)::TemplateInstantiator::TransformTemplateName(clang::TemplateName, clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN5clang4Sema5SubstEPKNS_19TemplateArgumentLocEjRNS_24TemplateArgumentListInfoERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::Subst(clang::TemplateArgumentLoc const*, unsigned int, clang::TemplateArgumentListInfo&, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang23LocalInstantiationScope18getInstantiationOfEPKNS_4DeclE\", \"clang::LocalInstantiationScope::getInstantiationOf(clang::Decl const*)\"},\n    {\"_ZN5clang23LocalInstantiationScope19findInstantiationOfEPKNS_4DeclE\", \"clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*)\"},\n    {\"_ZN5clang23LocalInstantiationScope28MakeInstantiatedLocalArgPackEPKNS_4DeclE\", \"clang::LocalInstantiationScope::MakeInstantiatedLocalArgPack(clang::Decl const*)\"},\n    {\"_ZN5clang23LocalInstantiationScope27SetPartiallySubstitutedPackEPNS_9NamedDeclEPKNS_16TemplateArgumentEj\", \"clang::LocalInstantiationScope::SetPartiallySubstitutedPack(clang::NamedDecl*, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZNK5clang23LocalInstantiationScope27getPartiallySubstitutedPackEPPKNS_16TemplateArgumentEPj\", \"clang::LocalInstantiationScope::getPartiallySubstitutedPack(clang::TemplateArgument const**, unsigned int*) const\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE26TransformTemplateArgumentsIPKNS_19TemplateArgumentLocEEEbT_S8_RNS_24TemplateArgumentListInfoE\", \"bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE26TransformTemplateArgumentsINS_33TemplateArgumentLocInventIteratorIS2_PKNS_16TemplateArgumentEEEEEbT_SA_RNS_24TemplateArgumentListInfoE\", \"bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLocInventIterator<(anonymous namespace)::TemplateInstantiator, clang::TemplateArgument const*> >(clang::TemplateArgumentLocInventIterator<(anonymous namespace)::TemplateInstantiator, clang::TemplateArgument const*>, clang::TemplateArgumentLocInventIterator<(anonymous namespace)::TemplateInstantiator, clang::TemplateArgument const*>, clang::TemplateArgumentListInfo&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE25TransformTemplateArgumentERKNS_19TemplateArgumentLocERS4_\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE20RebuildPackExpansionENS_19TemplateArgumentLocENS_14SourceLocationEN4llvm8OptionalIjEE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildPackExpansion(clang::TemplateArgumentLoc, clang::SourceLocation, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE34ForgetPartiallySubstitutedPackRAIIC1ERS2_\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::ForgetPartiallySubstitutedPackRAII::ForgetPartiallySubstitutedPackRAII((anonymous namespace)::TemplateInstantiator&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE34ForgetPartiallySubstitutedPackRAIID1Ev\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::ForgetPartiallySubstitutedPackRAII::~ForgetPartiallySubstitutedPackRAII()\"},\n    {\"_ZN12_GLOBAL__N_120TemplateInstantiator13TransformDeclEN5clang14SourceLocationEPNS1_4DeclE\", \"(anonymous namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation, clang::Decl*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE25InventTemplateArgumentLocERKNS_16TemplateArgumentERNS_19TemplateArgumentLocE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::InventTemplateArgumentLoc(clang::TemplateArgument const&, clang::TemplateArgumentLoc&)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE26TransformTypeInObjectScopeEPNS_14TypeSourceInfoENS_8QualTypeEPNS_9NamedDeclEPNS_19NestedNameSpecifierE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTypeInObjectScope(clang::TypeSourceInfo*, clang::QualType, clang::NamedDecl*, clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE35TransformTemplateSpecializationTypeERNS_14TypeLocBuilderENS_29TemplateSpecializationTypeLocENS_12TemplateNameE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE44TransformDependentTemplateSpecializationTypeERNS_14TypeLocBuilderENS_38DependentTemplateSpecializationTypeLocEPNS_19NestedNameSpecifierE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDependentTemplateSpecializationType(clang::TypeLocBuilder&, clang::DependentTemplateSpecializationTypeLoc, clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE23TransformBinaryOperatorEPNS_14BinaryOperatorE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE21TransformCompoundStmtEPNS_12CompoundStmtEb\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool)\"},\n    {\"_ZN12_GLOBAL__N_120TemplateInstantiator28TransformTemplateParmRefExprEPN5clang11DeclRefExprEPNS1_23NonTypeTemplateParmDeclE\", \"(anonymous namespace)::TemplateInstantiator::TransformTemplateParmRefExpr(clang::DeclRefExpr*, clang::NonTypeTemplateParmDecl*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE20TransformDeclRefExprEPNS_11DeclRefExprE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE25TransformCXXNamedCastExprEPNS_16CXXNamedCastExprE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE17TransformCallExprEPNS_8CallExprE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE21TransformCXXCatchStmtEPNS_12CXXCatchStmtE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE26TransformFunctionProtoTypeERNS_14TypeLocBuilderENS_20FunctionProtoTypeLocE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformFunctionProtoType(clang::TypeLocBuilder&, clang::FunctionProtoTypeLoc)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE16RebuildArrayTypeENS_8QualTypeENS_9ArrayType17ArraySizeModifierEPKN4llvm5APIntEPNS_4ExprEjNS_11SourceRangeE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildArrayType(clang::QualType, clang::ArrayType::ArraySizeModifier, llvm::APInt const*, clang::Expr*, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang13TreeTransformIN12_GLOBAL__N_120TemplateInstantiatorEE22TransformReferenceTypeERNS_14TypeLocBuilderENS_16ReferenceTypeLocE\", \"clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReferenceType(clang::TypeLocBuilder&, clang::ReferenceTypeLoc)\"},\n    {\"_ZN5clang14TypeLocBuilder12pushFullCopyENS_7TypeLocE\", \"clang::TypeLocBuilder::pushFullCopy(clang::TypeLoc)\"},\n    {\"_ZN5clang11DeclVisitorINS_24TemplateDeclInstantiatorEPNS_4DeclEE5VisitES3_\", \"clang::DeclVisitor<clang::TemplateDeclInstantiator, clang::Decl*>::Visit(clang::Decl*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_12PointerUnionIPS2_PNS_11SmallVectorIS6_Lj4EEEEENS_12DenseMapInfoIS4_EENSB_ISA_EEE16InsertIntoBucketERKS4_RKSA_PSt4pairIS4_SA_E\", \"llvm::DenseMap<clang::Decl const*, llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*>, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*> > >::InsertIntoBucket(clang::Decl const* const&, llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*> const&, std::pair<clang::Decl const*, llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclENS_12PointerUnionIPS2_PNS_11SmallVectorIS6_Lj4EEEEENS_12DenseMapInfoIS4_EENSB_ISA_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*>, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::Decl*, 4u>*> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang19TemplateArgumentLocEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::TemplateArgumentLoc>::push_back(clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang19TemplateArgumentLocELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::TemplateArgumentLoc, false>::grow(unsigned long)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN5clang19TemplateArgumentLocES2_ET0_T_S4_S3_St12__false_type\", \"clang::TemplateArgumentLoc* std::__uninitialized_copy_aux<clang::TemplateArgumentLoc*, clang::TemplateArgumentLoc*>(clang::TemplateArgumentLoc*, clang::TemplateArgumentLoc*, clang::TemplateArgumentLoc*, std::__false_type)\"},\n    {\"_ZN5clang19TemplateArgumentLocC2ERKNS_16TemplateArgumentENS_11SourceRangeENS_14SourceLocationES5_\", \"clang::TemplateArgumentLoc::TemplateArgumentLoc(clang::TemplateArgument const&, clang::SourceRange, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang14TypeLocBuilder8pushImplENS_8QualTypeEm\", \"clang::TypeLocBuilder::pushImpl(clang::QualType, unsigned long)\"},\n    {\"_ZN5clang4Expr19getValueKindForTypeENS_8QualTypeE\", \"clang::Expr::getValueKindForType(clang::QualType)\"},\n    {\"_ZN5clang12LookupResultD2Ev\", \"clang::LookupResult::~LookupResult()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4Sema17OffsetOfComponentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Sema::OffsetOfComponent, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang10DesignatorELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Designator, false>::grow(unsigned long)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator9VisitDeclEPNS_4DeclE\", \"clang::TemplateDeclInstantiator::VisitDecl(clang::Decl*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11ParmVarDeclENS_11SmallVectorIS3_Lj1EEENS_12DenseMapInfoIS3_EENS6_IS5_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::ParmVarDecl*, llvm::SmallVector<clang::ParmVarDecl*, 1u>, llvm::DenseMapInfo<clang::ParmVarDecl*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ParmVarDecl*, 1u> > >::FindAndConstruct(clang::ParmVarDecl* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11ParmVarDeclENS_11SmallVectorIS3_Lj1EEENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::ParmVarDecl*, llvm::SmallVector<clang::ParmVarDecl*, 1u>, llvm::DenseMapInfo<clang::ParmVarDecl*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ParmVarDecl*, 1u> > >::InsertIntoBucket(clang::ParmVarDecl* const&, llvm::SmallVector<clang::ParmVarDecl*, 1u> const&, std::pair<clang::ParmVarDecl*, llvm::SmallVector<clang::ParmVarDecl*, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang11ParmVarDeclENS_11SmallVectorIS3_Lj1EEENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::ParmVarDecl*, llvm::SmallVector<clang::ParmVarDecl*, 1u>, llvm::DenseMapInfo<clang::ParmVarDecl*>, llvm::DenseMapInfo<llvm::SmallVector<clang::ParmVarDecl*, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang11ParmVarDeclEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::ParmVarDecl*>::operator=(llvm::SmallVectorImpl<clang::ParmVarDecl*> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4Sema27ActiveTemplateInstantiationELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::Sema::ActiveTemplateInstantiation, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4sema21TemplateDeductionInfoD2Ev\", \"clang::sema::TemplateDeductionInfo::~TemplateDeductionInfo()\"},\n    {\"_ZN5clang23LocalInstantiationScope4ExitEv\", \"clang::LocalInstantiationScope::Exit()\"},\n    {\"_ZN5clang24TemplateDeclInstantiator14SubstQualifierEPKNS_14DeclaratorDeclEPS1_\", \"clang::TemplateDeclInstantiator::SubstQualifier(clang::DeclaratorDecl const*, clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator14SubstQualifierEPKNS_7TagDeclEPS1_\", \"clang::TemplateDeclInstantiator::SubstQualifier(clang::TagDecl const*, clang::TagDecl*)\"},\n    {\"_ZN5clang4Sema16InstantiateAttrsERKNS_30MultiLevelTemplateArgumentListEPNS_4DeclES5_\", \"clang::Sema::InstantiateAttrs(clang::MultiLevelTemplateArgumentList const&, clang::Decl*, clang::Decl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator24VisitTranslationUnitDeclEPNS_19TranslationUnitDeclE\", \"clang::TemplateDeclInstantiator::VisitTranslationUnitDecl(clang::TranslationUnitDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator18VisitNamespaceDeclEPNS_13NamespaceDeclE\", \"clang::TemplateDeclInstantiator::VisitNamespaceDecl(clang::NamespaceDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator23VisitNamespaceAliasDeclEPNS_18NamespaceAliasDeclE\", \"clang::TemplateDeclInstantiator::VisitNamespaceAliasDecl(clang::NamespaceAliasDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator16VisitTypedefDeclEPNS_11TypedefDeclE\", \"clang::TemplateDeclInstantiator::VisitTypedefDecl(clang::TypedefDecl*)\"},\n    {\"_ZN5clang4Sema20FindInstantiatedDeclENS_14SourceLocationEPNS_9NamedDeclERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::FindInstantiatedDecl(clang::SourceLocation, clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator12VisitVarDeclEPNS_7VarDeclE\", \"clang::TemplateDeclInstantiator::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator18VisitCXXRecordDeclEPNS_13CXXRecordDeclE\", \"clang::TemplateDeclInstantiator::VisitCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_Z22InstantiateInitializerRN5clang4SemaEPNS_4ExprERKNS_30MultiLevelTemplateArgumentListERNS_14SourceLocationERNS_15ASTOwningVectorIS3_Lj8EEES8_\", \"InstantiateInitializer(clang::Sema&, clang::Expr*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation&, clang::ASTOwningVector<clang::Expr*, 8u>&, clang::SourceLocation&)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator19VisitAccessSpecDeclEPNS_14AccessSpecDeclE\", \"clang::TemplateDeclInstantiator::VisitAccessSpecDecl(clang::AccessSpecDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator14VisitFieldDeclEPNS_9FieldDeclE\", \"clang::TemplateDeclInstantiator::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator22VisitIndirectFieldDeclEPNS_17IndirectFieldDeclE\", \"clang::TemplateDeclInstantiator::VisitIndirectFieldDecl(clang::IndirectFieldDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator15VisitFriendDeclEPNS_10FriendDeclE\", \"clang::TemplateDeclInstantiator::VisitFriendDecl(clang::FriendDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator21VisitStaticAssertDeclEPNS_16StaticAssertDeclE\", \"clang::TemplateDeclInstantiator::VisitStaticAssertDecl(clang::StaticAssertDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator13VisitEnumDeclEPNS_8EnumDeclE\", \"clang::TemplateDeclInstantiator::VisitEnumDecl(clang::EnumDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator21VisitEnumConstantDeclEPNS_16EnumConstantDeclE\", \"clang::TemplateDeclInstantiator::VisitEnumConstantDecl(clang::EnumConstantDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator22VisitClassTemplateDeclEPNS_17ClassTemplateDeclE\", \"clang::TemplateDeclInstantiator::VisitClassTemplateDecl(clang::ClassTemplateDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator19SubstTemplateParamsEPNS_21TemplateParameterListE\", \"clang::TemplateDeclInstantiator::SubstTemplateParams(clang::TemplateParameterList*)\"},\n    {\"_ZN5clang4Sema23FindInstantiatedContextENS_14SourceLocationEPNS_11DeclContextERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::FindInstantiatedContext(clang::SourceLocation, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator43VisitClassTemplatePartialSpecializationDeclEPNS_38ClassTemplatePartialSpecializationDeclE\", \"clang::TemplateDeclInstantiator::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator45InstantiateClassTemplatePartialSpecializationEPNS_17ClassTemplateDeclEPNS_38ClassTemplatePartialSpecializationDeclE\", \"clang::TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(clang::ClassTemplateDecl*, clang::ClassTemplatePartialSpecializationDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator25VisitFunctionTemplateDeclEPNS_20FunctionTemplateDeclE\", \"clang::TemplateDeclInstantiator::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator18VisitCXXMethodDeclEPNS_13CXXMethodDeclEPNS_21TemplateParameterListE\", \"clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*, clang::TemplateParameterList*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator17VisitFunctionDeclEPNS_12FunctionDeclEPNS_21TemplateParameterListE\", \"clang::TemplateDeclInstantiator::VisitFunctionDecl(clang::FunctionDecl*, clang::TemplateParameterList*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator17SubstFunctionTypeEPNS_12FunctionDeclERN4llvm15SmallVectorImplIPNS_11ParmVarDeclEEE\", \"clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*, llvm::SmallVectorImpl<clang::ParmVarDecl*>&)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator25InitFunctionInstantiationEPNS_12FunctionDeclES2_\", \"clang::TemplateDeclInstantiator::InitFunctionInstantiation(clang::FunctionDecl*, clang::FunctionDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator23InitMethodInstantiationEPNS_13CXXMethodDeclES2_\", \"clang::TemplateDeclInstantiator::InitMethodInstantiation(clang::CXXMethodDecl*, clang::CXXMethodDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator23VisitCXXConstructorDeclEPNS_18CXXConstructorDeclE\", \"clang::TemplateDeclInstantiator::VisitCXXConstructorDecl(clang::CXXConstructorDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator22VisitCXXDestructorDeclEPNS_17CXXDestructorDeclE\", \"clang::TemplateDeclInstantiator::VisitCXXDestructorDecl(clang::CXXDestructorDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator22VisitCXXConversionDeclEPNS_17CXXConversionDeclE\", \"clang::TemplateDeclInstantiator::VisitCXXConversionDecl(clang::CXXConversionDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator16VisitParmVarDeclEPNS_11ParmVarDeclE\", \"clang::TemplateDeclInstantiator::VisitParmVarDecl(clang::ParmVarDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator25VisitTemplateTypeParmDeclEPNS_20TemplateTypeParmDeclE\", \"clang::TemplateDeclInstantiator::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator28VisitNonTypeTemplateParmDeclEPNS_23NonTypeTemplateParmDeclE\", \"clang::TemplateDeclInstantiator::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator29VisitTemplateTemplateParmDeclEPNS_24TemplateTemplateParmDeclE\", \"clang::TemplateDeclInstantiator::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator23VisitUsingDirectiveDeclEPNS_18UsingDirectiveDeclE\", \"clang::TemplateDeclInstantiator::VisitUsingDirectiveDecl(clang::UsingDirectiveDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator14VisitUsingDeclEPNS_9UsingDeclE\", \"clang::TemplateDeclInstantiator::VisitUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator20VisitUsingShadowDeclEPNS_15UsingShadowDeclE\", \"clang::TemplateDeclInstantiator::VisitUsingShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator32VisitUnresolvedUsingTypenameDeclEPNS_27UnresolvedUsingTypenameDeclE\", \"clang::TemplateDeclInstantiator::VisitUnresolvedUsingTypenameDecl(clang::UnresolvedUsingTypenameDecl*)\"},\n    {\"_ZN5clang24TemplateDeclInstantiator29VisitUnresolvedUsingValueDeclEPNS_24UnresolvedUsingValueDeclE\", \"clang::TemplateDeclInstantiator::VisitUnresolvedUsingValueDecl(clang::UnresolvedUsingValueDecl*)\"},\n    {\"_ZN5clang4Sema9SubstDeclEPNS_4DeclEPNS_11DeclContextERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema29InstantiateFunctionDefinitionENS_14SourceLocationEPNS_12FunctionDeclEbb\", \"clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool)\"},\n    {\"_ZN5clang4Sema26InstantiateMemInitializersEPNS_18CXXConstructorDeclEPKS1_RKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::InstantiateMemInitializers(clang::CXXConstructorDecl*, clang::CXXConstructorDecl const*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema27PerformDependentDiagnosticsEPKNS_11DeclContextERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::PerformDependentDiagnostics(clang::DeclContext const*, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema28PerformPendingInstantiationsEb\", \"clang::Sema::PerformPendingInstantiations(bool)\"},\n    {\"_ZN5clang4Sema37InstantiateStaticDataMemberDefinitionENS_14SourceLocationEPNS_7VarDeclEbb\", \"clang::Sema::InstantiateStaticDataMemberDefinition(clang::SourceLocation, clang::VarDecl*, bool, bool)\"},\n    {\"_Z17isInstantiationOfRN5clang10ASTContextEPNS_9NamedDeclEPNS_4DeclE\", \"isInstantiationOf(clang::ASTContext&, clang::NamedDecl*, clang::Decl*)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPN5clang13CXXRecordDeclENS2_14SourceLocationEEE4swapERS7_\", \"llvm::SmallVectorImpl<std::pair<clang::CXXRecordDecl*, clang::SourceLocation> >::swap(llvm::SmallVectorImpl<std::pair<clang::CXXRecordDecl*, clang::SourceLocation> >&)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackENS_14SourceLocationEPNS_14TypeSourceInfoENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::SourceLocation, clang::TypeSourceInfo*, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_Z32DiagnoseUnexpandedParameterPacksRN5clang4SemaENS_14SourceLocationENS0_30UnexpandedParameterPackContextERKN4llvm15SmallVectorImplISt4pairINS4_12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEES2_EEE\", \"DiagnoseUnexpandedParameterPacks(clang::Sema&, clang::SourceLocation, clang::Sema::UnexpandedParameterPackContext, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> > const&)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackEPNS_4ExprENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackERKNS_12CXXScopeSpecENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::CXXScopeSpec const&, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE27TraverseNestedNameSpecifierEPNS_19NestedNameSpecifierE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseNestedNameSpecifier(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackERKNS_19DeclarationNameInfoENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::DeclarationNameInfo const&, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackENS_14SourceLocationENS_12TemplateNameENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::SourceLocation, clang::TemplateName, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_ZN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitor20TraverseTemplateNameEN5clang12TemplateNameE\", \"(anonymous namespace)::CollectUnexpandedParameterPacksVisitor::TraverseTemplateName(clang::TemplateName)\"},\n    {\"_ZN5clang4Sema31DiagnoseUnexpandedParameterPackENS_19TemplateArgumentLocENS0_30UnexpandedParameterPackContextE\", \"clang::Sema::DiagnoseUnexpandedParameterPack(clang::TemplateArgumentLoc, clang::Sema::UnexpandedParameterPackContext)\"},\n    {\"_ZN5clang4Sema31collectUnexpandedParameterPacksENS_16TemplateArgumentERN4llvm15SmallVectorImplISt4pairINS2_12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEENS_14SourceLocationEEEE\", \"clang::Sema::collectUnexpandedParameterPacks(clang::TemplateArgument, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> >&)\"},\n    {\"_ZN5clang4Sema31collectUnexpandedParameterPacksENS_19TemplateArgumentLocERN4llvm15SmallVectorImplISt4pairINS2_12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEENS_14SourceLocationEEEE\", \"clang::Sema::collectUnexpandedParameterPacks(clang::TemplateArgumentLoc, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> >&)\"},\n    {\"_ZN5clang4Sema31collectUnexpandedParameterPacksENS_8QualTypeERN4llvm15SmallVectorImplISt4pairINS2_12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEENS_14SourceLocationEEEE\", \"clang::Sema::collectUnexpandedParameterPacks(clang::QualType, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> >&)\"},\n    {\"_ZN5clang4Sema31collectUnexpandedParameterPacksENS_7TypeLocERN4llvm15SmallVectorImplISt4pairINS2_12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEENS_14SourceLocationEEEE\", \"clang::Sema::collectUnexpandedParameterPacks(clang::TypeLoc, llvm::SmallVectorImpl<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> >&)\"},\n    {\"_ZN5clang4Sema18ActOnPackExpansionERKNS_22ParsedTemplateArgumentENS_14SourceLocationE\", \"clang::Sema::ActOnPackExpansion(clang::ParsedTemplateArgument const&, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18ActOnPackExpansionENS_9OpaquePtrINS_8QualTypeEEENS_14SourceLocationE\", \"clang::Sema::ActOnPackExpansion(clang::OpaquePtr<clang::QualType>, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18ActOnPackExpansionEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::ActOnPackExpansion(clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema18CheckPackExpansionEPNS_14TypeSourceInfoENS_14SourceLocationEN4llvm8OptionalIjEE\", \"clang::Sema::CheckPackExpansion(clang::TypeSourceInfo*, clang::SourceLocation, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang4Sema18CheckPackExpansionENS_8QualTypeENS_11SourceRangeENS_14SourceLocationEN4llvm8OptionalIjEE\", \"clang::Sema::CheckPackExpansion(clang::QualType, clang::SourceRange, clang::SourceLocation, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang4Sema18CheckPackExpansionEPNS_4ExprENS_14SourceLocationEN4llvm8OptionalIjEE\", \"clang::Sema::CheckPackExpansion(clang::Expr*, clang::SourceLocation, llvm::Optional<unsigned int>)\"},\n    {\"_ZN5clang4Sema31CheckParameterPacksForExpansionENS_14SourceLocationENS_11SourceRangeEPKSt4pairIN4llvm12PointerUnionIPKNS_20TemplateTypeParmTypeEPNS_9NamedDeclEEES1_EjRKNS_30MultiLevelTemplateArgumentListERbSI_RNS4_8OptionalIjEE\", \"clang::Sema::CheckParameterPacksForExpansion(clang::SourceLocation, clang::SourceRange, std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation> const*, unsigned int, clang::MultiLevelTemplateArgumentList const&, bool&, bool&, llvm::Optional<unsigned int>&)\"},\n    {\"_ZN5clang4Sema26getNumArgumentsInExpansionENS_8QualTypeERKNS_30MultiLevelTemplateArgumentListE\", \"clang::Sema::getNumArgumentsInExpansion(clang::QualType, clang::MultiLevelTemplateArgumentList const&)\"},\n    {\"_ZN5clang4Sema32containsUnexpandedParameterPacksERNS_10DeclaratorE\", \"clang::Sema::containsUnexpandedParameterPacks(clang::Declarator&)\"},\n    {\"_ZN5clang4Sema28ActOnSizeofParameterPackExprEPNS_5ScopeENS_14SourceLocationERNS_14IdentifierInfoES3_S3_\", \"clang::Sema::ActOnSizeofParameterPackExpr(clang::Scope*, clang::SourceLocation, clang::IdentifierInfo&, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE24TraverseTemplateArgumentERKNS_16TemplateArgumentE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE27TraverseTemplateArgumentLocERKNS_19TemplateArgumentLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseTemplateArgumentLoc(clang::TemplateArgumentLoc const&)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE12TraverseTypeENS_8QualTypeE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseType(clang::QualType)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE12TraverseStmtEPNS_4StmtE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseStmt(clang::Stmt*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE12TraverseDeclEPNS_4DeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseDecl(clang::Decl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE24TraverseDeclaratorHelperEPNS_14DeclaratorDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseDeclaratorHelper(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE22TraverseFunctionHelperEPNS_12FunctionDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseFunctionHelper(clang::FunctionDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE23TraverseCXXRecordHelperEPNS_13CXXRecordDeclE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseCXXRecordHelper(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang19RecursiveASTVisitorIN12_GLOBAL__N_138CollectUnexpandedParameterPacksVisitorEE15TraverseTypeLocENS_7TypeLocE\", \"clang::RecursiveASTVisitor<(anonymous namespace)::CollectUnexpandedParameterPacksVisitor>::TraverseTypeLoc(clang::TypeLoc)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairINS_12PointerUnionIPKN5clang20TemplateTypeParmTypeEPNS3_9NamedDeclEEENS3_14SourceLocationEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::PointerUnion<clang::TemplateTypeParmType const*, clang::NamedDecl*>, clang::SourceLocation>, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4Sema19adjustParameterTypeENS_8QualTypeE\", \"clang::Sema::adjustParameterType(clang::QualType)\"},\n    {\"_ZN5clang4Sema18BuildQualifiedTypeENS_8QualTypeENS_14SourceLocationENS_10QualifiersE\", \"clang::Sema::BuildQualifiedType(clang::QualType, clang::SourceLocation, clang::Qualifiers)\"},\n    {\"_ZN5clang4Sema14BuildParenTypeENS_8QualTypeE\", \"clang::Sema::BuildParenType(clang::QualType)\"},\n    {\"_ZN5clang4Sema16BuildPointerTypeENS_8QualTypeENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::BuildPointerType(clang::QualType, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema18BuildReferenceTypeENS_8QualTypeEbNS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::BuildReferenceType(clang::QualType, bool, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema14BuildArrayTypeENS_8QualTypeENS_9ArrayType17ArraySizeModifierEPNS_4ExprEjNS_11SourceRangeENS_15DeclarationNameE\", \"clang::Sema::BuildArrayType(clang::QualType, clang::ArrayType::ArraySizeModifier, clang::Expr*, unsigned int, clang::SourceRange, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema19RequireCompleteTypeENS_14SourceLocationENS_8QualTypeEj\", \"clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, unsigned int)\"},\n    {\"_ZN5clang4Sema18BuildExtVectorTypeENS_8QualTypeEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::BuildExtVectorType(clang::QualType, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17BuildFunctionTypeENS_8QualTypeEPS1_jbjNS_16RefQualifierKindENS_14SourceLocationENS_15DeclarationNameENS_12FunctionType7ExtInfoE\", \"clang::Sema::BuildFunctionType(clang::QualType, clang::QualType*, unsigned int, bool, unsigned int, clang::RefQualifierKind, clang::SourceLocation, clang::DeclarationName, clang::FunctionType::ExtInfo)\"},\n    {\"_ZN5clang4Sema22BuildMemberPointerTypeENS_8QualTypeES1_NS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::BuildMemberPointerType(clang::QualType, clang::QualType, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema21BuildBlockPointerTypeENS_8QualTypeENS_14SourceLocationENS_15DeclarationNameE\", \"clang::Sema::BuildBlockPointerType(clang::QualType, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang4Sema17GetTypeFromParserENS_9OpaquePtrINS_8QualTypeEEEPPNS_14TypeSourceInfoE\", \"clang::Sema::GetTypeFromParser(clang::OpaquePtr<clang::QualType>, clang::TypeSourceInfo**)\"},\n    {\"_ZN5clang4Sema20GetTypeForDeclaratorERNS_10DeclaratorEPNS_5ScopeEPPNS_7TagDeclE\", \"clang::Sema::GetTypeForDeclarator(clang::Declarator&, clang::Scope*, clang::TagDecl**)\"},\n    {\"_Z16processTypeAttrsRN12_GLOBAL__N_119TypeProcessingStateERN5clang8QualTypeEbPNS2_13AttributeListE\", \"processTypeAttrs((anonymous namespace)::TypeProcessingState&, clang::QualType&, bool, clang::AttributeList*)\"},\n    {\"_ZN5clang4Sema30GetTypeSourceInfoForDeclaratorERNS_10DeclaratorENS_8QualTypeEPNS_14TypeSourceInfoE\", \"clang::Sema::GetTypeSourceInfoForDeclarator(clang::Declarator&, clang::QualType, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_117TypeSpecLocFillerEvE5VisitENS_13UnqualTypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::TypeSpecLocFiller, void>::Visit(clang::UnqualTypeLoc)\"},\n    {\"_ZN5clang4Sema16CreateParsedTypeENS_8QualTypeEPNS_14TypeSourceInfoE\", \"clang::Sema::CreateParsedType(clang::QualType, clang::TypeSourceInfo*)\"},\n    {\"_ZNK5clang11LocInfoType19getAsStringInternalERSsRKNS_14PrintingPolicyE\", \"clang::LocInfoType::getAsStringInternal(std::string&, clang::PrintingPolicy const&) const\"},\n    {\"_ZN5clang4Sema13ActOnTypeNameEPNS_5ScopeERNS_10DeclaratorE\", \"clang::Sema::ActOnTypeName(clang::Scope*, clang::Declarator&)\"},\n    {\"_ZN5clang4Sema19RequireCompleteTypeENS_14SourceLocationENS_8QualTypeERKNS_17PartialDiagnosticESt4pairIS1_S3_E\", \"clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::PartialDiagnostic const&, std::pair<clang::SourceLocation, clang::PartialDiagnostic>)\"},\n    {\"_ZN5clang4Sema19RequireCompleteTypeENS_14SourceLocationENS_8QualTypeERKNS_17PartialDiagnosticE\", \"clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::PartialDiagnostic const&)\"},\n    {\"_ZN5clang4Sema17getElaboratedTypeENS_21ElaboratedTypeKeywordERKNS_12CXXScopeSpecENS_8QualTypeE\", \"clang::Sema::getElaboratedType(clang::ElaboratedTypeKeyword, clang::CXXScopeSpec const&, clang::QualType)\"},\n    {\"_ZN5clang4Sema19BuildTypeofExprTypeEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::BuildTypeofExprType(clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang4Sema17BuildDecltypeTypeEPNS_4ExprENS_14SourceLocationE\", \"clang::Sema::BuildDecltypeType(clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_119DeclaratorLocFillerEvE18VisitVectorTypeLocENS_13VectorTypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::DeclaratorLocFiller, void>::VisitVectorTypeLoc(clang::VectorTypeLoc)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_119DeclaratorLocFillerEvE22VisitObjCObjectTypeLocENS_17ObjCObjectTypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::DeclaratorLocFiller, void>::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_119DeclaratorLocFiller12VisitTypeLocEN5clang7TypeLocE\", \"(anonymous namespace)::DeclaratorLocFiller::VisitTypeLoc(clang::TypeLoc)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_119DeclaratorLocFillerEvE15VisitTagTypeLocENS_10TagTypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::DeclaratorLocFiller, void>::VisitTagTypeLoc(clang::TagTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller19VisitBuiltinTypeLocEN5clang14BuiltinTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitBuiltinTypeLoc(clang::BuiltinTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller22VisitElaboratedTypeLocEN5clang17ElaboratedTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitElaboratedTypeLoc(clang::ElaboratedTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller34VisitTemplateSpecializationTypeLocEN5clang29TemplateSpecializationTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller25VisitDependentNameTypeLocEN5clang20DependentNameTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitDependentNameTypeLoc(clang::DependentNameTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller43VisitDependentTemplateSpecializationTypeLocEN5clang38DependentTemplateSpecializationTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitDependentTemplateSpecializationTypeLoc(clang::DependentTemplateSpecializationTypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_117TypeSpecLocFiller22VisitObjCObjectTypeLocEN5clang17ObjCObjectTypeLocE\", \"(anonymous namespace)::TypeSpecLocFiller::VisitObjCObjectTypeLoc(clang::ObjCObjectTypeLoc)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_117TypeSpecLocFillerEvE5VisitENS_7TypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::TypeSpecLocFiller, void>::Visit(clang::TypeLoc)\"},\n    {\"_Z25handleObjCPointerTypeAttrRN12_GLOBAL__N_119TypeProcessingStateERN5clang13AttributeListERNS2_8QualTypeE\", \"handleObjCPointerTypeAttr((anonymous namespace)::TypeProcessingState&, clang::AttributeList&, clang::QualType&)\"},\n    {\"_Z24HandleNeonVectorTypeAttrRN5clang8QualTypeERKNS_13AttributeListERNS_4SemaENS_10VectorType10VectorKindEPKc\", \"HandleNeonVectorTypeAttr(clang::QualType&, clang::AttributeList const&, clang::Sema&, clang::VectorType::VectorKind, char const*)\"},\n    {\"_Z22handleFunctionTypeAttrRN12_GLOBAL__N_119TypeProcessingStateERN5clang13AttributeListERNS2_8QualTypeE\", \"handleFunctionTypeAttr((anonymous namespace)::TypeProcessingState&, clang::AttributeList&, clang::QualType&)\"},\n    {\"_ZN12_GLOBAL__N_121FunctionTypeUnwrapper4wrapERN5clang10ASTContextENS1_8QualTypeEj\", \"(anonymous namespace)::FunctionTypeUnwrapper::wrap(clang::ASTContext&, clang::QualType, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_121FunctionTypeUnwrapper4wrapERN5clang10ASTContextEPKNS1_4TypeEj\", \"(anonymous namespace)::FunctionTypeUnwrapper::wrap(clang::ASTContext&, clang::Type const*, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang15DeclaratorChunkEE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<clang::DeclaratorChunk>::insert(clang::DeclaratorChunk*, clang::DeclaratorChunk const&)\"},\n    {\"_ZN5clang20TargetAttributesSemaD0Ev\", \"clang::TargetAttributesSema::~TargetAttributesSema()\"},\n    {\"_ZN5clang20TargetAttributesSemaD1Ev\", \"clang::TargetAttributesSema::~TargetAttributesSema()\"},\n    {\"_ZN5clang20TargetAttributesSemaD2Ev\", \"clang::TargetAttributesSema::~TargetAttributesSema()\"},\n    {\"_ZNK5clang20TargetAttributesSema20ProcessDeclAttributeEPNS_5ScopeEPNS_4DeclERKNS_13AttributeListERNS_4SemaE\", \"clang::TargetAttributesSema::ProcessDeclAttribute(clang::Scope*, clang::Decl*, clang::AttributeList const&, clang::Sema&) const\"},\n    {\"_ZNK5clang4Sema23getTargetAttributesSemaEv\", \"clang::Sema::getTargetAttributesSema() const\"},\n    {\"_ZN12_GLOBAL__N_117X86AttributesSemaD1Ev\", \"(anonymous namespace)::X86AttributesSema::~X86AttributesSema()\"},\n    {\"_ZN12_GLOBAL__N_117X86AttributesSemaD0Ev\", \"(anonymous namespace)::X86AttributesSema::~X86AttributesSema()\"},\n    {\"_ZNK12_GLOBAL__N_117X86AttributesSema20ProcessDeclAttributeEPN5clang5ScopeEPNS1_4DeclERKNS1_13AttributeListERNS1_4SemaE\", \"(anonymous namespace)::X86AttributesSema::ProcessDeclAttribute(clang::Scope*, clang::Decl*, clang::AttributeList const&, clang::Sema&) const\"},\n    {\"_ZN12_GLOBAL__N_120MBlazeAttributesSemaD1Ev\", \"(anonymous namespace)::MBlazeAttributesSema::~MBlazeAttributesSema()\"},\n    {\"_ZN12_GLOBAL__N_120MBlazeAttributesSemaD0Ev\", \"(anonymous namespace)::MBlazeAttributesSema::~MBlazeAttributesSema()\"},\n    {\"_ZNK12_GLOBAL__N_120MBlazeAttributesSema20ProcessDeclAttributeEPN5clang5ScopeEPNS1_4DeclERKNS1_13AttributeListERNS1_4SemaE\", \"(anonymous namespace)::MBlazeAttributesSema::ProcessDeclAttribute(clang::Scope*, clang::Decl*, clang::AttributeList const&, clang::Sema&) const\"},\n    {\"_ZN12_GLOBAL__N_120MSP430AttributesSemaD1Ev\", \"(anonymous namespace)::MSP430AttributesSema::~MSP430AttributesSema()\"},\n    {\"_ZN12_GLOBAL__N_120MSP430AttributesSemaD0Ev\", \"(anonymous namespace)::MSP430AttributesSema::~MSP430AttributesSema()\"},\n    {\"_ZNK12_GLOBAL__N_120MSP430AttributesSema20ProcessDeclAttributeEPN5clang5ScopeEPNS1_4DeclERKNS1_13AttributeListERNS1_4SemaE\", \"(anonymous namespace)::MSP430AttributesSema::ProcessDeclAttribute(clang::Scope*, clang::Decl*, clang::AttributeList const&, clang::Sema&) const\"},\n    {\"_ZN5clang4ento34RegisterAdjustedReturnValueCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterAdjustedReturnValueChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_126AdjustedReturnValueCheckerD1Ev\", \"(anonymous namespace)::AdjustedReturnValueChecker::~AdjustedReturnValueChecker()\"},\n    {\"_ZN12_GLOBAL__N_126AdjustedReturnValueCheckerD0Ev\", \"(anonymous namespace)::AdjustedReturnValueChecker::~AdjustedReturnValueChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126AdjustedReturnValueCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AdjustedReturnValueChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126AdjustedReturnValueCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AdjustedReturnValueChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126AdjustedReturnValueCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AdjustedReturnValueChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126AdjustedReturnValueCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AdjustedReturnValueChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento22CreateAnalysisConsumerERKNS_12PreprocessorERKSsRKNS_15AnalyzerOptionsE\", \"clang::ento::CreateAnalysisConsumer(clang::Preprocessor const&, std::string const&, clang::AnalyzerOptions const&)\"},\n    {\"_Z13ActionCFGDumpRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionCFGDump((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z13ActionCFGViewRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionCFGView((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z26ActionDisplayLiveVariablesRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionDisplayLiveVariables((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z29ActionSecuritySyntacticChecksRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionSecuritySyntacticChecks((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z27ActionLLVMConventionCheckerRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerERNS2_19TranslationUnitDeclE\", \"ActionLLVMConventionChecker((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::TranslationUnitDecl&)\"},\n    {\"_Z20ActionWarnDeadStoresRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnDeadStores((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z20ActionWarnUninitValsRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnUninitVals((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z22ActionWarnObjCMethSigsRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnObjCMethSigs((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z21ActionWarnObjCDeallocRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnObjCDealloc((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z25ActionWarnObjCUnusedIvarsRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnObjCUnusedIvars((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z20ActionObjCMemCheckerRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionObjCMemChecker((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z23ActionWarnSizeofPointerRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclE\", \"ActionWarnSizeofPointer((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)\"},\n    {\"_Z23ActionObjCMemCheckerAuxRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS2_4DeclEb\", \"ActionObjCMemCheckerAux((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*, bool)\"},\n    {\"_ZN12_GLOBAL__N_111UbigraphVizD1Ev\", \"(anonymous namespace)::UbigraphViz::~UbigraphViz()\"},\n    {\"_ZN12_GLOBAL__N_111UbigraphVizD0Ev\", \"(anonymous namespace)::UbigraphViz::~UbigraphViz()\"},\n    {\"_ZN12_GLOBAL__N_111UbigraphViz7AddEdgeEPN5clang4ento12ExplodedNodeES4_\", \"(anonymous namespace)::UbigraphViz::AddEdge(clang::ento::ExplodedNode*, clang::ento::ExplodedNode*)\"},\n    {\"_ZNSt6vectorIPFvRN12_GLOBAL__N_116AnalysisConsumerERN5clang4ento15AnalysisManagerEPNS3_4DeclEESaISA_EE9push_backERKSA_\", \"std::vector<void (*)((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*), std::allocator<void (*)((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)> >::push_back(void (* const&)((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*))\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumerD1Ev\", \"(anonymous namespace)::AnalysisConsumer::~AnalysisConsumer()\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumerD0Ev\", \"(anonymous namespace)::AnalysisConsumer::~AnalysisConsumer()\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumer10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::AnalysisConsumer::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumer21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumer17HandleDeclContextERN5clang10ASTContextEPNS1_11DeclContextE\", \"(anonymous namespace)::AnalysisConsumer::HandleDeclContext(clang::ASTContext&, clang::DeclContext*)\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumer15DisplayFunctionEPKN5clang4DeclE\", \"(anonymous namespace)::AnalysisConsumer::DisplayFunction(clang::Decl const*)\"},\n    {\"_ZN12_GLOBAL__N_116AnalysisConsumer10HandleCodeEPN5clang4DeclERSt6vectorIPFvRS0_RNS1_4ento15AnalysisManagerES3_ESaISA_EE\", \"(anonymous namespace)::AnalysisConsumer::HandleCode(clang::Decl*, std::vector<void (*)((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*), std::allocator<void (*)((anonymous namespace)::AnalysisConsumer&, clang::ento::AnalysisManager&, clang::Decl*)> >&)\"},\n    {\"_Z10FindBlocksPN5clang11DeclContextERN4llvm15SmallVectorImplIPNS_4DeclEEE\", \"FindBlocks(clang::DeclContext*, llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang4ento11BugReporter22GeneratePathDiagnosticERNS0_14PathDiagnosticERN4llvm15SmallVectorImplIPNS0_9BugReportEEE\", \"clang::ento::BugReporter::GeneratePathDiagnostic(clang::ento::PathDiagnostic&, llvm::SmallVectorImpl<clang::ento::BugReport*>&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEEC2Ev\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::ImutAVLFactory()\"},\n    {\"_ZN4llvm8DenseMapIPvjNS_12DenseMapInfoIS1_EENS2_IjEEE16InsertIntoBucketERKS1_RKjPSt4pairIS1_jE\", \"llvm::DenseMap<void*, unsigned int, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(void* const&, unsigned int const&, std::pair<void*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPvjNS_12DenseMapInfoIS1_EENS2_IjEEE4growEj\", \"llvm::DenseMap<void*, unsigned int, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento15AnalysisManagerD1Ev\", \"clang::ento::AnalysisManager::~AnalysisManager()\"},\n    {\"_ZN5clang4ento15AnalysisManagerD0Ev\", \"clang::ento::AnalysisManager::~AnalysisManager()\"},\n    {\"_ZN5clang4ento15AnalysisManager13getDiagnosticEv\", \"clang::ento::AnalysisManager::getDiagnostic()\"},\n    {\"_ZN5clang4ento15AnalysisManager23getPathDiagnosticClientEv\", \"clang::ento::AnalysisManager::getPathDiagnosticClient()\"},\n    {\"_ZN5clang4ento15AnalysisManager13getASTContextEv\", \"clang::ento::AnalysisManager::getASTContext()\"},\n    {\"_ZN5clang4ento15AnalysisManager16getSourceManagerEv\", \"clang::ento::AnalysisManager::getSourceManager()\"},\n    {\"_ZN5clang4ento15AnalysisManagerD2Ev\", \"clang::ento::AnalysisManager::~AnalysisManager()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang15LocationContextEED1Ev\", \"llvm::FoldingSet<clang::LocationContext>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang15LocationContextEED0Ev\", \"llvm::FoldingSet<clang::LocationContext>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang15LocationContextEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::LocationContext>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang15LocationContextEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::LocationContext>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang15LocationContextEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::LocationContext>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento28RegisterAnalyzerStatsCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterAnalyzerStatsChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_120AnalyzerStatsCheckerD1Ev\", \"(anonymous namespace)::AnalyzerStatsChecker::~AnalyzerStatsChecker()\"},\n    {\"_ZN12_GLOBAL__N_120AnalyzerStatsCheckerD0Ev\", \"(anonymous namespace)::AnalyzerStatsChecker::~AnalyzerStatsChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120AnalyzerStatsCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AnalyzerStatsChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120AnalyzerStatsCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AnalyzerStatsChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_120AnalyzerStatsChecker16VisitEndAnalysisERN5clang4ento13ExplodedGraphERNS2_11BugReporterERNS2_10ExprEngineE\", \"(anonymous namespace)::AnalyzerStatsChecker::VisitEndAnalysis(clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120AnalyzerStatsCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AnalyzerStatsChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120AnalyzerStatsCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AnalyzerStatsChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento25RegisterArrayBoundCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterArrayBoundChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_117ArrayBoundCheckerD1Ev\", \"(anonymous namespace)::ArrayBoundChecker::~ArrayBoundChecker()\"},\n    {\"_ZN12_GLOBAL__N_117ArrayBoundCheckerD0Ev\", \"(anonymous namespace)::ArrayBoundChecker::~ArrayBoundChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ArrayBoundCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ArrayBoundCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_117ArrayBoundChecker13visitLocationERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValEb\", \"(anonymous namespace)::ArrayBoundChecker::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ArrayBoundCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ArrayBoundCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento27RegisterArrayBoundCheckerV2ERNS0_10ExprEngineE\", \"clang::ento::RegisterArrayBoundCheckerV2(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_119ArrayBoundCheckerV2D1Ev\", \"(anonymous namespace)::ArrayBoundCheckerV2::~ArrayBoundCheckerV2()\"},\n    {\"_ZN12_GLOBAL__N_119ArrayBoundCheckerV2D0Ev\", \"(anonymous namespace)::ArrayBoundCheckerV2::~ArrayBoundCheckerV2()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ArrayBoundCheckerV2EE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundCheckerV2>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ArrayBoundCheckerV2EE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundCheckerV2>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119ArrayBoundCheckerV213visitLocationERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValEb\", \"(anonymous namespace)::ArrayBoundCheckerV2::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN12_GLOBAL__N_119ArrayBoundCheckerV29reportOOBERN5clang4ento14CheckerContextEPKNS2_7GRStateENS0_8OOB_KindE\", \"(anonymous namespace)::ArrayBoundCheckerV2::reportOOB(clang::ento::CheckerContext&, clang::ento::GRState const*, (anonymous namespace)::ArrayBoundCheckerV2::OOB_Kind)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ArrayBoundCheckerV2EED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundCheckerV2>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ArrayBoundCheckerV2EED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundCheckerV2>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento10BuiltinBugC2EPKc\", \"clang::ento::BuiltinBug::BuiltinBug(char const*)\"},\n    {\"_ZN5clang4ento10BuiltinBugD1Ev\", \"clang::ento::BuiltinBug::~BuiltinBug()\"},\n    {\"_ZN5clang4ento10BuiltinBugD0Ev\", \"clang::ento::BuiltinBug::~BuiltinBug()\"},\n    {\"_ZN5clang4ento26RegisterAttrNonNullCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterAttrNonNullChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118AttrNonNullCheckerD1Ev\", \"(anonymous namespace)::AttrNonNullChecker::~AttrNonNullChecker()\"},\n    {\"_ZN12_GLOBAL__N_118AttrNonNullCheckerD0Ev\", \"(anonymous namespace)::AttrNonNullChecker::~AttrNonNullChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118AttrNonNullCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AttrNonNullChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118AttrNonNullCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AttrNonNullChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118AttrNonNullCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AttrNonNullChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118AttrNonNullCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::AttrNonNullChecker>::~CheckerVisitor()\"},\n    {\"_ZNK5clang4Decl7getAttrINS_11NonNullAttrEEEPT_v\", \"clang::NonNullAttr* clang::Decl::getAttr<clang::NonNullAttr>() const\"},\n    {\"_ZN5clang4ento19RegisterAppleChecksERNS0_10ExprEngineERKNS_4DeclE\", \"clang::ento::RegisterAppleChecks(clang::ento::ExprEngine&, clang::Decl const&)\"},\n    {\"_ZN12_GLOBAL__N_119ClassReleaseCheckerD1Ev\", \"(anonymous namespace)::ClassReleaseChecker::~ClassReleaseChecker()\"},\n    {\"_ZN12_GLOBAL__N_119ClassReleaseCheckerD0Ev\", \"(anonymous namespace)::ClassReleaseChecker::~ClassReleaseChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ClassReleaseCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ClassReleaseChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ClassReleaseCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ClassReleaseChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119ClassReleaseChecker19preVisitObjCMessageERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::ClassReleaseChecker::preVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN12_GLOBAL__N_19APIMisuseD1Ev\", \"(anonymous namespace)::APIMisuse::~APIMisuse()\"},\n    {\"_ZN12_GLOBAL__N_19APIMisuseD0Ev\", \"(anonymous namespace)::APIMisuse::~APIMisuse()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ClassReleaseCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ClassReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ClassReleaseCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ClassReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN12_GLOBAL__N_122CFRetainReleaseCheckerD1Ev\", \"(anonymous namespace)::CFRetainReleaseChecker::~CFRetainReleaseChecker()\"},\n    {\"_ZN12_GLOBAL__N_122CFRetainReleaseCheckerD0Ev\", \"(anonymous namespace)::CFRetainReleaseChecker::~CFRetainReleaseChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_122CFRetainReleaseCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFRetainReleaseChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_122CFRetainReleaseCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFRetainReleaseChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_122CFRetainReleaseCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFRetainReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_122CFRetainReleaseCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFRetainReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN12_GLOBAL__N_121CFNumberCreateCheckerD1Ev\", \"(anonymous namespace)::CFNumberCreateChecker::~CFNumberCreateChecker()\"},\n    {\"_ZN12_GLOBAL__N_121CFNumberCreateCheckerD0Ev\", \"(anonymous namespace)::CFNumberCreateChecker::~CFNumberCreateChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CFNumberCreateCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFNumberCreateChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CFNumberCreateCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFNumberCreateChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CFNumberCreateCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFNumberCreateChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CFNumberCreateCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CFNumberCreateChecker>::~CheckerVisitor()\"},\n    {\"_ZN12_GLOBAL__N_113NilArgCheckerD1Ev\", \"(anonymous namespace)::NilArgChecker::~NilArgChecker()\"},\n    {\"_ZN12_GLOBAL__N_113NilArgCheckerD0Ev\", \"(anonymous namespace)::NilArgChecker::~NilArgChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113NilArgCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NilArgChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113NilArgCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NilArgChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_113NilArgChecker19preVisitObjCMessageERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::NilArgChecker::preVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113NilArgCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NilArgChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113NilArgCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NilArgChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerContext12generateNodeEb\", \"clang::ento::CheckerContext::generateNode(bool)\"},\n    {\"_ZN5clang4ento30RegisterBuiltinFunctionCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterBuiltinFunctionChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_122BuiltinFunctionCheckerD1Ev\", \"(anonymous namespace)::BuiltinFunctionChecker::~BuiltinFunctionChecker()\"},\n    {\"_ZN12_GLOBAL__N_122BuiltinFunctionCheckerD0Ev\", \"(anonymous namespace)::BuiltinFunctionChecker::~BuiltinFunctionChecker()\"},\n    {\"_ZN12_GLOBAL__N_122BuiltinFunctionChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::BuiltinFunctionChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento22RegisterCStringCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterCStringChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_114CStringCheckerD1Ev\", \"(anonymous namespace)::CStringChecker::~CStringChecker()\"},\n    {\"_ZN12_GLOBAL__N_114CStringCheckerD0Ev\", \"(anonymous namespace)::CStringChecker::~CStringChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114CStringCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CStringChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114CStringCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CStringChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker15evalDeadSymbolsERN5clang4ento14CheckerContextERNS2_12SymbolReaperE\", \"(anonymous namespace)::CStringChecker::evalDeadSymbols(clang::ento::CheckerContext&, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker15MarkLiveSymbolsEPKN5clang4ento7GRStateERNS2_12SymbolReaperE\", \"(anonymous namespace)::CStringChecker::MarkLiveSymbols(clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker23wantsRegionChangeUpdateEPKN5clang4ento7GRStateE\", \"(anonymous namespace)::CStringChecker::wantsRegionChangeUpdate(clang::ento::GRState const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker17EvalRegionChangesEPKN5clang4ento7GRStateEPKPKNS2_9MemRegionESA_Pb\", \"(anonymous namespace)::CStringChecker::EvalRegionChanges(clang::ento::GRState const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, bool*)\"},\n    {\"_ZNK5clang4ento7GRState3setIN12_GLOBAL__N_113CStringLengthEEEPKS1_NS0_12GRStateTraitIT_E9data_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<(anonymous namespace)::CStringLength>(clang::ento::GRStateTrait<(anonymous namespace)::CStringLength>::data_type) const\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker10evalMemcpyERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalMemcpy(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker10evalMemcmpERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalMemcmp(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker11evalMemmoveERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalMemmove(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker10evalStrcpyERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalStrcpy(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker10evalStpcpyERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalStpcpy(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker13evalstrLengthERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalstrLength(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker9evalBcopyERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CStringChecker::evalBcopy(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker14evalCopyCommonERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4ExprESA_SA_b\", \"(anonymous namespace)::CStringChecker::evalCopyCommon(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Expr const*, clang::Expr const*, clang::Expr const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker10assumeZeroERN5clang4ento14CheckerContextEPKNS2_7GRStateENS2_4SValENS1_8QualTypeE\", \"(anonymous namespace)::CStringChecker::assumeZero(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::ento::SVal, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker17CheckBufferAccessERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4ExprESA_SA_b\", \"(anonymous namespace)::CStringChecker::CheckBufferAccess(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Expr const*, clang::Expr const*, clang::Expr const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker16InvalidateBufferERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4ExprENS2_4SValE\", \"(anonymous namespace)::CStringChecker::InvalidateBuffer(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Expr const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker14emitOverlapBugERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4StmtESA_\", \"(anonymous namespace)::CStringChecker::emitOverlapBug(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Stmt const*, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker12checkNonNullERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4ExprENS2_4SValE\", \"(anonymous namespace)::CStringChecker::checkNonNull(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Expr const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker13CheckLocationERN5clang4ento14CheckerContextEPKNS2_7GRStateEPKNS1_4ExprENS2_4SValEb\", \"(anonymous namespace)::CStringChecker::CheckLocation(clang::ento::CheckerContext&, clang::ento::GRState const*, clang::Expr const*, clang::ento::SVal, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker16getCStringLengthERN5clang4ento14CheckerContextERPKNS2_7GRStateEPKNS1_4ExprENS2_4SValE\", \"(anonymous namespace)::CStringChecker::getCStringLength(clang::ento::CheckerContext&, clang::ento::GRState const*&, clang::Expr const*, clang::ento::SVal)\"},\n    {\"_ZNK5clang4ento7GRState3setIN12_GLOBAL__N_113CStringLengthEEEPKS1_NS0_12GRStateTraitIT_E8key_typeENS9_10value_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<(anonymous namespace)::CStringLength>(clang::ento::GRStateTrait<(anonymous namespace)::CStringLength>::key_type, clang::ento::GRStateTrait<(anonymous namespace)::CStringLength>::value_type) const\"},\n    {\"_ZN12_GLOBAL__N_114CStringChecker16evalStrcpyCommonERN5clang4ento14CheckerContextEPKNS1_8CallExprEb\", \"(anonymous namespace)::CStringChecker::evalStrcpyCommon(clang::ento::CheckerContext&, clang::CallExpr const*, bool)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114CStringCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CStringChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114CStringCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CStringChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_9MemRegionENS0_4SValENS2_16ImutKeyValueInfoIS6_S7_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_9MemRegionENS0_4SValENS2_16ImutKeyValueInfoIS6_S7_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> > >::DeleteContext(void*)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_9MemRegionENS0_4SValENS2_16ImutKeyValueInfoIS6_S7_EEEEE3SetESA_S6_S7_RNSA_7FactoryE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> > >::Set(llvm::ImmutableMap<clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >, clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImmutableMap<clang::ento::MemRegion const*, clang::ento::SVal, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::Factory&)\"},\n    {\"_ZN5clang4ento29RegisterCallAndMessageCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterCallAndMessageChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageCheckerD1Ev\", \"(anonymous namespace)::CallAndMessageChecker::~CallAndMessageChecker()\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageCheckerD0Ev\", \"(anonymous namespace)::CallAndMessageChecker::~CallAndMessageChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CallAndMessageCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CallAndMessageChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CallAndMessageCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CallAndMessageChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageChecker19preVisitObjCMessageERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::CallAndMessageChecker::preVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageChecker15evalNilReceiverERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::CallAndMessageChecker::evalNilReceiver(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageChecker18emitNilReceiverBugERN5clang4ento14CheckerContextERKNS2_11ObjCMessageEPNS2_12ExplodedNodeE\", \"(anonymous namespace)::CallAndMessageChecker::emitNilReceiverBug(clang::ento::CheckerContext&, clang::ento::ObjCMessage const&, clang::ento::ExplodedNode*)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageChecker19PreVisitProcessArgsERN5clang4ento14CheckerContextENS2_17CallOrObjCMessageEPKcRPNS2_7BugTypeE\", \"(anonymous namespace)::CallAndMessageChecker::PreVisitProcessArgs(clang::ento::CheckerContext&, clang::ento::CallOrObjCMessage, char const*, clang::ento::BugType*&)\"},\n    {\"_ZZN12_GLOBAL__N_121CallAndMessageChecker18PreVisitProcessArgERN5clang4ento14CheckerContextENS2_4SValENS1_11SourceRangeEPKNS1_4ExprEPKcRPNS2_7BugTypeEEN22FindUninitializedField4FindEPKNS2_11TypedRegionE\", \"(anonymous namespace)::CallAndMessageChecker::PreVisitProcessArg(clang::ento::CheckerContext&, clang::ento::SVal, clang::SourceRange, clang::Expr const*, char const*, clang::ento::BugType*&)::FindUninitializedField::Find(clang::ento::TypedRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_121CallAndMessageChecker11EmitBadCallEPN5clang4ento7BugTypeERNS2_14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::CallAndMessageChecker::EmitBadCall(clang::ento::BugType*, clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CallAndMessageCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CallAndMessageChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CallAndMessageCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CallAndMessageChecker>::~CheckerVisitor()\"},\n    {\"_ZNK5clang4ento17CallOrObjCMessage10getArgSValEj\", \"clang::ento::CallOrObjCMessage::getArgSVal(unsigned int) const\"},\n    {\"_ZN5clang4ento23RegisterCastSizeCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterCastSizeChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_115CastSizeCheckerD1Ev\", \"(anonymous namespace)::CastSizeChecker::~CastSizeChecker()\"},\n    {\"_ZN12_GLOBAL__N_115CastSizeCheckerD0Ev\", \"(anonymous namespace)::CastSizeChecker::~CastSizeChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_115CastSizeCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastSizeChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_115CastSizeCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastSizeChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_115CastSizeChecker16PreVisitCastExprERN5clang4ento14CheckerContextEPKNS1_8CastExprE\", \"(anonymous namespace)::CastSizeChecker::PreVisitCastExpr(clang::ento::CheckerContext&, clang::CastExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_115CastSizeCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastSizeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_115CastSizeCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastSizeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento10BuiltinBugC2EPKcS3_\", \"clang::ento::BuiltinBug::BuiltinBug(char const*, char const*)\"},\n    {\"_ZN5clang4ento27RegisterCastToStructCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterCastToStructChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_119CastToStructCheckerD1Ev\", \"(anonymous namespace)::CastToStructChecker::~CastToStructChecker()\"},\n    {\"_ZN12_GLOBAL__N_119CastToStructCheckerD0Ev\", \"(anonymous namespace)::CastToStructChecker::~CastToStructChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119CastToStructCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastToStructChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119CastToStructCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastToStructChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119CastToStructChecker16PreVisitCastExprERN5clang4ento14CheckerContextEPKNS1_8CastExprE\", \"(anonymous namespace)::CastToStructChecker::PreVisitCastExpr(clang::ento::CheckerContext&, clang::CastExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119CastToStructCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastToStructChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119CastToStructCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::CastToStructChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento16CheckObjCDeallocEPKNS_22ObjCImplementationDeclERKNS_11LangOptionsERNS0_11BugReporterE\", \"clang::ento::CheckObjCDealloc(clang::ObjCImplementationDecl const*, clang::LangOptions const&, clang::ento::BugReporter&)\"},\n    {\"_Z12scan_deallocPN5clang4StmtENS_8SelectorE\", \"scan_dealloc(clang::Stmt*, clang::Selector)\"},\n    {\"_Z17scan_ivar_releasePN5clang4StmtEPNS_12ObjCIvarDeclEPKNS_16ObjCPropertyDeclENS_8SelectorEPNS_14IdentifierInfoERNS_10ASTContextE\", \"scan_ivar_release(clang::Stmt*, clang::ObjCIvarDecl*, clang::ObjCPropertyDecl const*, clang::Selector, clang::IdentifierInfo*, clang::ASTContext&)\"},\n    {\"_ZN5clang4ento26CheckObjCInstMethSignatureEPKNS_22ObjCImplementationDeclERNS0_11BugReporterE\", \"clang::ento::CheckObjCInstMethSignature(clang::ObjCImplementationDecl const*, clang::ento::BugReporter&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPNS1_14ObjCMethodDeclENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::Selector, clang::ObjCMethodDecl*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::ObjCMethodDecl*> >::InsertIntoBucket(clang::Selector const&, clang::ObjCMethodDecl* const&, std::pair<clang::Selector, clang::ObjCMethodDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang8SelectorEPNS1_14ObjCMethodDeclENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::Selector, clang::ObjCMethodDecl*, llvm::DenseMapInfo<clang::Selector>, llvm::DenseMapInfo<clang::ObjCMethodDecl*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento23CheckSecuritySyntaxOnlyEPKNS_4DeclERNS0_11BugReporterE\", \"clang::ento::CheckSecuritySyntaxOnly(clang::Decl const*, clang::ento::BugReporter&)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_17WalkASTEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::WalkAST, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_17WalkAST13VisitCallExprEPN5clang8CallExprE\", \"(anonymous namespace)::WalkAST::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN12_GLOBAL__N_17WalkAST13VisitChildrenEPN5clang4StmtE\", \"(anonymous namespace)::WalkAST::VisitChildren(clang::Stmt*)\"},\n    {\"_Z17GetIncrementedVarPKN5clang4ExprEPKNS_7VarDeclES5_\", \"GetIncrementedVar(clang::Expr const*, clang::VarDecl const*, clang::VarDecl const*)\"},\n    {\"_ZN5clang4ento18CheckSizeofPointerEPKNS_4DeclERNS0_11BugReporterE\", \"clang::ento::CheckSizeofPointer(clang::Decl const*, clang::ento::BugReporter&)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_17WalkASTEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::WalkAST, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_17WalkAST13VisitChildrenEPN5clang4StmtE\", \"(anonymous namespace)::WalkAST::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN5clang4ento21RegisterChrootCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterChrootChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_113ChrootCheckerD1Ev\", \"(anonymous namespace)::ChrootChecker::~ChrootChecker()\"},\n    {\"_ZN12_GLOBAL__N_113ChrootCheckerD0Ev\", \"(anonymous namespace)::ChrootChecker::~ChrootChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113ChrootCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ChrootChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113ChrootCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ChrootChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_113ChrootChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::ChrootChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113ChrootChecker16PreVisitCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::ChrootChecker::PreVisitCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113ChrootCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ChrootChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113ChrootCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ChrootChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento15CheckDeadStoresERNS_3CFGERNS_13LiveVariablesERNS_9ParentMapERNS0_11BugReporterE\", \"clang::ento::CheckDeadStores(clang::CFG&, clang::LiveVariables&, clang::ParentMap&, clang::ento::BugReporter&)\"},\n    {\"_ZN12_GLOBAL__N_112DeadStoreObsD1Ev\", \"(anonymous namespace)::DeadStoreObs::~DeadStoreObs()\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_111FindEscapedEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::FindEscaped, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111FindEscaped18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::FindEscaped::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_111FindEscapedEvE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::FindEscaped, void>::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_112DeadStoreObsD0Ev\", \"(anonymous namespace)::DeadStoreObs::~DeadStoreObs()\"},\n    {\"_ZN12_GLOBAL__N_112DeadStoreObs11ObserveStmtEPN5clang4StmtERKNS1_24LiveVariables_ValueTypes14AnalysisDataTyERKNS1_23StmtDeclBitVector_Types5ValTyE\", \"(anonymous namespace)::DeadStoreObs::ObserveStmt(clang::Stmt*, clang::LiveVariables_ValueTypes::AnalysisDataTy const&, clang::StmtDeclBitVector_Types::ValTy const&)\"},\n    {\"_ZN12_GLOBAL__N_112DeadStoreObs12CheckVarDeclEPN5clang7VarDeclEPNS1_4ExprES5_NS0_13DeadStoreKindERKNS1_24LiveVariables_ValueTypes14AnalysisDataTyERKNS1_23StmtDeclBitVector_Types5ValTyE\", \"(anonymous namespace)::DeadStoreObs::CheckVarDecl(clang::VarDecl*, clang::Expr*, clang::Expr*, (anonymous namespace)::DeadStoreObs::DeadStoreKind, clang::LiveVariables_ValueTypes::AnalysisDataTy const&, clang::StmtDeclBitVector_Types::ValTy const&)\"},\n    {\"_ZN12_GLOBAL__N_112DeadStoreObs6ReportEPN5clang7VarDeclENS0_13DeadStoreKindENS1_14SourceLocationENS1_11SourceRangeE\", \"(anonymous namespace)::DeadStoreObs::Report(clang::VarDecl*, (anonymous namespace)::DeadStoreObs::DeadStoreKind, clang::SourceLocation, clang::SourceRange)\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes10ObserverTy12ObserverKillEPNS_11DeclRefExprE\", \"clang::LiveVariables_ValueTypes::ObserverTy::ObserverKill(clang::DeclRefExpr*)\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes10ObserverTyD1Ev\", \"clang::LiveVariables_ValueTypes::ObserverTy::~ObserverTy()\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes10ObserverTyD0Ev\", \"clang::LiveVariables_ValueTypes::ObserverTy::~ObserverTy()\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes10ObserverTy11ObserveStmtEPNS_4StmtERKNS0_14AnalysisDataTyERKNS_23StmtDeclBitVector_Types5ValTyE\", \"clang::LiveVariables_ValueTypes::ObserverTy::ObserveStmt(clang::Stmt*, clang::LiveVariables_ValueTypes::AnalysisDataTy const&, clang::StmtDeclBitVector_Types::ValTy const&)\"},\n    {\"_ZN5clang4ento26RegisterDereferenceCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterDereferenceChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento27GetImplicitNullDereferencesERNS0_10ExprEngineE\", \"clang::ento::GetImplicitNullDereferences(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118DereferenceCheckerD1Ev\", \"(anonymous namespace)::DereferenceChecker::~DereferenceChecker()\"},\n    {\"_ZN12_GLOBAL__N_118DereferenceCheckerD0Ev\", \"(anonymous namespace)::DereferenceChecker::~DereferenceChecker()\"},\n    {\"_ZN12_GLOBAL__N_118DereferenceChecker13visitLocationERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValEb\", \"(anonymous namespace)::DereferenceChecker::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN12_GLOBAL__N_118DereferenceChecker14AddDerefSourceERN4llvm11raw_ostreamERNS1_15SmallVectorImplIN5clang11SourceRangeEEEPKNS5_4ExprEb\", \"(anonymous namespace)::DereferenceChecker::AddDerefSource(llvm::raw_ostream&, llvm::SmallVectorImpl<clang::SourceRange>&, clang::Expr const*, bool)\"},\n    {\"_ZN5clang4ento22RegisterDivZeroCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterDivZeroChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_114DivZeroCheckerD1Ev\", \"(anonymous namespace)::DivZeroChecker::~DivZeroChecker()\"},\n    {\"_ZN12_GLOBAL__N_114DivZeroCheckerD0Ev\", \"(anonymous namespace)::DivZeroChecker::~DivZeroChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114DivZeroCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::DivZeroChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114DivZeroCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::DivZeroChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_114DivZeroChecker22PreVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::DivZeroChecker::PreVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114DivZeroCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::DivZeroChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114DivZeroCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::DivZeroChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento26RegisterExperimentalChecksERNS0_10ExprEngineE\", \"clang::ento::RegisterExperimentalChecks(clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento34RegisterExperimentalInternalChecksERNS0_10ExprEngineE\", \"clang::ento::RegisterExperimentalInternalChecks(clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento10ExprEngine12CheckerVisitEPKNS_4StmtERNS0_15ExplodedNodeSetES6_NS1_12CallbackKindE\", \"clang::ento::ExprEngine::CheckerVisit(clang::Stmt const*, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine::CallbackKind)\"},\n    {\"_ZN5clang4ento10ExprEngine23CheckerVisitObjCMessageERKNS0_11ObjCMessageERNS0_15ExplodedNodeSetES6_b\", \"clang::ento::ExprEngine::CheckerVisitObjCMessage(clang::ento::ObjCMessage const&, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine22CheckerEvalNilReceiverERKNS0_11ObjCMessageERNS0_15ExplodedNodeSetEPKNS0_7GRStateEPNS0_12ExplodedNodeE\", \"clang::ento::ExprEngine::CheckerEvalNilReceiver(clang::ento::ObjCMessage const&, clang::ento::ExplodedNodeSet&, clang::ento::GRState const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10ExprEngine15CheckerEvalCallEPKNS_8CallExprERNS0_15ExplodedNodeSetEPNS0_12ExplodedNodeE\", \"clang::ento::ExprEngine::CheckerEvalCall(clang::CallExpr const*, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10ExprEngine16CheckerVisitBindEPKNS_4StmtERNS0_15ExplodedNodeSetES6_NS0_4SValES7_b\", \"clang::ento::ExprEngine::CheckerVisitBind(clang::Stmt const*, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, clang::ento::SVal, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento10ExprEngineC1ERNS0_15AnalysisManagerEPNS0_13TransferFuncsE\", \"clang::ento::ExprEngine::ExprEngine(clang::ento::AnalysisManager&, clang::ento::TransferFuncs*)\"},\n    {\"_ZN5clang4ento10ExprEngineC2ERNS0_15AnalysisManagerEPNS0_13TransferFuncsE\", \"clang::ento::ExprEngine::ExprEngine(clang::ento::AnalysisManager&, clang::ento::TransferFuncs*)\"},\n    {\"_ZN5clang4ento10ExprEngineD0Ev\", \"clang::ento::ExprEngine::~ExprEngine()\"},\n    {\"_ZN5clang4ento10ExprEngineD1Ev\", \"clang::ento::ExprEngine::~ExprEngine()\"},\n    {\"_ZN5clang4ento10ExprEngineD2Ev\", \"clang::ento::ExprEngine::~ExprEngine()\"},\n    {\"_ZN5clang4ento10ExprEngine15getInitialStateEPKNS_15LocationContextE\", \"clang::ento::ExprEngine::getInitialState(clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento10ExprEngine13processAssumeEPKNS0_7GRStateENS0_4SValEb\", \"clang::ento::ExprEngine::processAssume(clang::ento::GRState const*, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine23wantsRegionChangeUpdateEPKNS0_7GRStateE\", \"clang::ento::ExprEngine::wantsRegionChangeUpdate(clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento10ExprEngine20processRegionChangesEPKNS0_7GRStateEPKPKNS0_9MemRegionES9_\", \"clang::ento::ExprEngine::processRegionChanges(clang::ento::GRState const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*)\"},\n    {\"_ZN5clang4ento10ExprEngine18processEndWorklistEb\", \"clang::ento::ExprEngine::processEndWorklist(bool)\"},\n    {\"_ZN5clang4ento10ExprEngine17processCFGElementENS_10CFGElementERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine11ProcessStmtENS_7CFGStmtERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessStmt(clang::CFGStmt, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine18ProcessInitializerENS_14CFGInitializerERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessInitializer(clang::CFGInitializer, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine19ProcessImplicitDtorENS_15CFGImplicitDtorERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessImplicitDtor(clang::CFGImplicitDtor, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine5VisitEPKNS_4StmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine23ProcessAutomaticObjDtorENS_19CFGAutomaticObjDtorERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessAutomaticObjDtor(clang::CFGAutomaticObjDtor, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine15ProcessBaseDtorENS_11CFGBaseDtorERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessBaseDtor(clang::CFGBaseDtor, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine17ProcessMemberDtorENS_13CFGMemberDtorERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessMemberDtor(clang::CFGMemberDtor, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine20ProcessTemporaryDtorENS_16CFGTemporaryDtorERNS0_15StmtNodeBuilderE\", \"clang::ento::ExprEngine::ProcessTemporaryDtor(clang::CFGTemporaryDtor, clang::ento::StmtNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine8MakeNodeERNS0_15ExplodedNodeSetEPKNS_4StmtEPNS0_12ExplodedNodeEPKNS0_7GRStateENS_12ProgramPoint4KindEPKv\", \"clang::ento::ExprEngine::MakeNode(clang::ento::ExplodedNodeSet&, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ProgramPoint::Kind, void const*)\"},\n    {\"_ZN5clang4ento10ExprEngine27VisitObjCAtSynchronizedStmtEPKNS_22ObjCAtSynchronizedStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitObjCAtSynchronizedStmt(clang::ObjCAtSynchronizedStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine24VisitObjCPropertyRefExprEPKNS_19ObjCPropertyRefExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitObjCPropertyRefExpr(clang::ObjCPropertyRefExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine27VisitLvalArraySubscriptExprEPKNS_18ArraySubscriptExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitLvalArraySubscriptExpr(clang::ArraySubscriptExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine12VisitAsmStmtEPKNS_7AsmStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitAsmStmt(clang::AsmStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine22VisitCommonDeclRefExprEPKNS_4ExprEPKNS_9NamedDeclEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCommonDeclRefExpr(clang::Expr const*, clang::NamedDecl const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine14VisitBlockExprEPKNS_9BlockExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitBlockExpr(clang::BlockExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine16VisitLogicalExprEPKNS_14BinaryOperatorEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitLogicalExpr(clang::BinaryOperator const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine19VisitBinaryOperatorEPKNS_14BinaryOperatorEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitBinaryOperator(clang::BinaryOperator const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine17evalEagerlyAssumeERNS0_15ExplodedNodeSetES3_PKNS_4ExprE\", \"clang::ento::ExprEngine::evalEagerlyAssume(clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, clang::Expr const*)\"},\n    {\"_ZN5clang4ento10ExprEngine9VisitCallEPKNS_8CallExprEPNS0_12ExplodedNodeENS_17ConstExprIteratorES7_RNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCall(clang::CallExpr const*, clang::ento::ExplodedNode*, clang::ConstExprIterator, clang::ConstExprIterator, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine16VisitGuardedExprEPKNS_4ExprES4_S4_PNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitGuardedExpr(clang::Expr const*, clang::Expr const*, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine24VisitCompoundLiteralExprEPKNS_19CompoundLiteralExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCompoundLiteralExpr(clang::CompoundLiteralExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine13VisitDeclStmtEPKNS_8DeclStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitDeclStmt(clang::DeclStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine13VisitCondInitEPKNS_7VarDeclEPKNS_4StmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCondInit(clang::VarDecl const*, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine9VisitCastEPKNS_8CastExprEPKNS_4ExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCast(clang::CastExpr const*, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine17VisitInitListExprEPKNS_12InitListExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitInitListExpr(clang::InitListExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine15VisitMemberExprEPKNS_10MemberExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitMemberExpr(clang::MemberExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine24VisitLvalObjCIvarRefExprEPKNS_15ObjCIvarRefExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitLvalObjCIvarRefExpr(clang::ObjCIvarRefExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine26VisitObjCForCollectionStmtEPKNS_21ObjCForCollectionStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitObjCForCollectionStmt(clang::ObjCForCollectionStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine20VisitObjCMessageExprEPKNS_15ObjCMessageExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitObjCMessageExpr(clang::ObjCMessageExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine15VisitReturnStmtEPKNS_10ReturnStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitReturnStmt(clang::ReturnStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine17VisitOffsetOfExprEPKNS_12OffsetOfExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitOffsetOfExpr(clang::OffsetOfExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine22VisitSizeOfAlignOfExprEPKNS_17SizeOfAlignOfExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitSizeOfAlignOfExpr(clang::SizeOfAlignOfExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine18VisitUnaryOperatorEPKNS_13UnaryOperatorEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitUnaryOperator(clang::UnaryOperator const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine23processCFGBlockEntranceERNS0_15ExplodedNodeSetERNS0_18GenericNodeBuilderINS_13BlockEntranceEEE\", \"clang::ento::ExprEngine::processCFGBlockEntrance(clang::ento::ExplodedNodeSet&, clang::ento::GenericNodeBuilder<clang::BlockEntrance>&)\"},\n    {\"_ZN5clang4ento10ExprEngine10MarkBranchEPKNS0_7GRStateEPKNS_4StmtEb\", \"clang::ento::ExprEngine::MarkBranch(clang::ento::GRState const*, clang::Stmt const*, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine13processBranchEPKNS_4StmtES4_RNS0_17BranchNodeBuilderE\", \"clang::ento::ExprEngine::processBranch(clang::Stmt const*, clang::Stmt const*, clang::ento::BranchNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine19processIndirectGotoERNS0_23IndirectGotoNodeBuilderE\", \"clang::ento::ExprEngine::processIndirectGoto(clang::ento::IndirectGotoNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine20processEndOfFunctionERNS0_24EndOfFunctionNodeBuilderE\", \"clang::ento::ExprEngine::processEndOfFunction(clang::ento::EndOfFunctionNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine13processSwitchERNS0_17SwitchNodeBuilderE\", \"clang::ento::ExprEngine::processSwitch(clang::ento::SwitchNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine16processCallEnterERNS0_20CallEnterNodeBuilderE\", \"clang::ento::ExprEngine::processCallEnter(clang::ento::CallEnterNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine15processCallExitERNS0_19CallExitNodeBuilderE\", \"clang::ento::ExprEngine::processCallExit(clang::ento::CallExitNodeBuilder&)\"},\n    {\"_ZN5clang4ento10ExprEngine8evalLoadERNS0_15ExplodedNodeSetEPKNS_4ExprEPNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValEPKvNS_8QualTypeE\", \"clang::ento::ExprEngine::evalLoad(clang::ento::ExplodedNodeSet&, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, void const*, clang::QualType)\"},\n    {\"_ZN5clang4ento10ExprEngine8evalBindERNS0_15ExplodedNodeSetEPKNS_4StmtEPNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValESC_b\", \"clang::ento::ExprEngine::evalBind(clang::ento::ExplodedNodeSet&, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine9evalStoreERNS0_15ExplodedNodeSetEPKNS_4ExprES6_PNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValESC_PKv\", \"clang::ento::ExprEngine::evalStore(clang::ento::ExplodedNodeSet&, clang::Expr const*, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, clang::ento::SVal, void const*)\"},\n    {\"_ZN5clang4ento10ExprEngine16VisitObjCMessageERKNS0_11ObjCMessageERNS0_15ExplodedNodeSetES6_\", \"clang::ento::ExprEngine::VisitObjCMessage(clang::ento::ObjCMessage const&, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine12evalLocationERNS0_15ExplodedNodeSetEPKNS_4StmtEPNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValEPKvb\", \"clang::ento::ExprEngine::evalLocation(clang::ento::ExplodedNodeSet&, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, void const*, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine14evalLoadCommonERNS0_15ExplodedNodeSetEPKNS_4ExprEPNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValEPKvNS_8QualTypeE\", \"clang::ento::ExprEngine::evalLoadCommon(clang::ento::ExplodedNodeSet&, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, void const*, clang::QualType)\"},\n    {\"_ZN5clang4ento10ExprEngine10InlineCallERNS0_15ExplodedNodeSetEPKNS_8CallExprEPNS0_12ExplodedNodeE\", \"clang::ento::ExprEngine::InlineCall(clang::ento::ExplodedNodeSet&, clang::CallExpr const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10ExprEngine29VisitObjCForCollectionStmtAuxEPKNS_21ObjCForCollectionStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetENS0_4SValE\", \"clang::ento::ExprEngine::VisitObjCForCollectionStmtAux(clang::ObjCForCollectionStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&, clang::ento::SVal)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_113ObjCMsgWLItemEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::ObjCMsgWLItem>::push_back((anonymous namespace)::ObjCMsgWLItem const&)\"},\n    {\"_ZN5clang4ento10ExprEngine25VisitAsmStmtHelperOutputsEPKNS_7AsmStmtENS_17ConstExprIteratorES5_PNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitAsmStmtHelperOutputs(clang::AsmStmt const*, clang::ConstExprIterator, clang::ConstExprIterator, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine24VisitAsmStmtHelperInputsEPKNS_7AsmStmtENS_17ConstExprIteratorES5_PNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitAsmStmtHelperInputs(clang::AsmStmt const*, clang::ConstExprIterator, clang::ConstExprIterator, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZNK5clang4ento10ExprEngine13lookupCheckerEPv\", \"clang::ento::ExprEngine::lookupChecker(void*) const\"},\n    {\"_ZN5clang4ento10ExprEngine9ViewGraphEb\", \"clang::ento::ExprEngine::ViewGraph(bool)\"},\n    {\"_ZN5clang4ento10ExprEngine9ViewGraphEPPNS0_12ExplodedNodeES4_\", \"clang::ento::ExprEngine::ViewGraph(clang::ento::ExplodedNode**, clang::ento::ExplodedNode**)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_114InitListWLItemELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::InitListWLItem, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4ento15ExplodedNodeSet6insertERKS1_\", \"clang::ento::ExplodedNodeSet::insert(clang::ento::ExplodedNodeSet const&)\"},\n    {\"_ZN5clang4ento7Checker8GR_VisitERNS0_15ExplodedNodeSetERNS0_15StmtNodeBuilderERNS0_10ExprEngineEPKNS_4StmtEPNS0_12ExplodedNodeEPvbRb\", \"clang::ento::Checker::GR_Visit(clang::ento::ExplodedNodeSet&, clang::ento::StmtNodeBuilder&, clang::ento::ExprEngine&, clang::Stmt const*, clang::ento::ExplodedNode*, void*, bool, bool&)\"},\n    {\"_ZN5clang4ento7Checker19GR_visitObjCMessageERNS0_15ExplodedNodeSetERNS0_15StmtNodeBuilderERNS0_10ExprEngineERKNS0_11ObjCMessageEPNS0_12ExplodedNodeEPvb\", \"clang::ento::Checker::GR_visitObjCMessage(clang::ento::ExplodedNodeSet&, clang::ento::StmtNodeBuilder&, clang::ento::ExprEngine&, clang::ento::ObjCMessage const&, clang::ento::ExplodedNode*, void*, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine18getAnalysisManagerEv\", \"clang::ento::ExprEngine::getAnalysisManager()\"},\n    {\"_ZN5clang4ento10ExprEngine15getStateManagerEv\", \"clang::ento::ExprEngine::getStateManager()\"},\n    {\"_ZN4llvm8DenseMapIjPSt6vectorISt4pairIPvPN5clang4ento7CheckerEESaIS8_EENS_12DenseMapInfoIjEENSC_ISB_EEE16InsertIntoBucketERKjRKSB_PS2_IjSB_E\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >*> >::InsertIntoBucket(unsigned int const&, std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >* const&, std::pair<unsigned int, std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPSt6vectorISt4pairIPvPN5clang4ento7CheckerEESaIS8_EENS_12DenseMapInfoIjEENSC_ISB_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm20ImmutableListFactoryIN5clang4ento4SValEE6concatERKS3_NS_13ImmutableListIS3_EE\", \"llvm::ImmutableListFactory<clang::ento::SVal>::concat(clang::ento::SVal const&, llvm::ImmutableList<clang::ento::SVal>)\"},\n    {\"_ZN5clang4ento18StmtNodeBuilderRefD2Ev\", \"clang::ento::StmtNodeBuilderRef::~StmtNodeBuilderRef()\"},\n    {\"_ZN5clang4ento12SymbolReaperC2EPKNS_15LocationContextEPKNS_4StmtERNS0_13SymbolManagerE\", \"clang::ento::SymbolReaper::SymbolReaper(clang::LocationContext const*, clang::Stmt const*, clang::ento::SymbolManager&)\"},\n    {\"_ZN5clang4ento9SubEngineD1Ev\", \"clang::ento::SubEngine::~SubEngine()\"},\n    {\"_ZN5clang4ento9SubEngineD0Ev\", \"clang::ento::SubEngine::~SubEngine()\"},\n    {\"_ZN5clang4ento10CoreEngineD2Ev\", \"clang::ento::CoreEngine::~CoreEngine()\"},\n    {\"_ZN5clang4ento14GRStateManagerC2ERNS_10ASTContextEPFPNS0_12StoreManagerERS1_EPFPNS0_17ConstraintManagerES6_RNS0_9SubEngineEERN4llvm16BumpPtrAllocatorESC_\", \"clang::ento::GRStateManager::GRStateManager(clang::ASTContext&, clang::ento::StoreManager* (*)(clang::ento::GRStateManager&), clang::ento::ConstraintManager* (*)(clang::ento::GRStateManager&, clang::ento::SubEngine&), llvm::BumpPtrAllocator&, clang::ento::SubEngine&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento7GRStateEED1Ev\", \"llvm::FoldingSet<clang::ento::GRState>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento7GRStateEED0Ev\", \"llvm::FoldingSet<clang::ento::GRState>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7GRStateEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::GRState>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7GRStateEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::GRState>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7GRStateEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::GRState>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento12ExplodedNodeEED1Ev\", \"llvm::FoldingSet<clang::ento::ExplodedNode>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento12ExplodedNodeEED0Ev\", \"llvm::FoldingSet<clang::ento::ExplodedNode>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento12ExplodedNodeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::ExplodedNode>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento12ExplodedNodeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::ExplodedNode>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento12ExplodedNodeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::ExplodedNode>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento27RegisterFixedAddressCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterFixedAddressChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_119FixedAddressCheckerD1Ev\", \"(anonymous namespace)::FixedAddressChecker::~FixedAddressChecker()\"},\n    {\"_ZN12_GLOBAL__N_119FixedAddressCheckerD0Ev\", \"(anonymous namespace)::FixedAddressChecker::~FixedAddressChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119FixedAddressCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::FixedAddressChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119FixedAddressCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::FixedAddressChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119FixedAddressChecker22PreVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::FixedAddressChecker::PreVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119FixedAddressCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::FixedAddressChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119FixedAddressCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::FixedAddressChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14AnalysisAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::ento::AnalysisAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang4ento14AnalysisActionD1Ev\", \"clang::ento::AnalysisAction::~AnalysisAction()\"},\n    {\"_ZN5clang4ento14AnalysisActionD0Ev\", \"clang::ento::AnalysisAction::~AnalysisAction()\"},\n    {\"_ZN5clang4ento34RegisterIdempotentOperationCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterIdempotentOperationChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationCheckerD1Ev\", \"(anonymous namespace)::IdempotentOperationChecker::~IdempotentOperationChecker()\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationCheckerD0Ev\", \"(anonymous namespace)::IdempotentOperationChecker::~IdempotentOperationChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126IdempotentOperationCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::IdempotentOperationChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126IdempotentOperationCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::IdempotentOperationChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationChecker16VisitEndAnalysisERN5clang4ento13ExplodedGraphERNS2_11BugReporterERNS2_10ExprEngineE\", \"(anonymous namespace)::IdempotentOperationChecker::VisitEndAnalysis(clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationChecker23CFGReachabilityAnalysis11isReachableEPKN5clang8CFGBlockES5_\", \"(anonymous namespace)::IdempotentOperationChecker::CFGReachabilityAnalysis::isReachable(clang::CFGBlock const*, clang::CFGBlock const*)\"},\n    {\"_ZZN12_GLOBAL__N_126IdempotentOperationChecker25PathWasCompletelyAnalyzedEPKN5clang3CFGEPKNS1_8CFGBlockEPKNS1_10CFGStmtMapERKNS1_4ento10CoreEngineEEN7VisitWLD1Ev\", \"(anonymous namespace)::IdempotentOperationChecker::PathWasCompletelyAnalyzed(clang::CFG const*, clang::CFGBlock const*, clang::CFGStmtMap const*, clang::ento::CoreEngine const&)::VisitWL::~VisitWL()\"},\n    {\"_ZZN12_GLOBAL__N_126IdempotentOperationChecker25PathWasCompletelyAnalyzedEPKN5clang3CFGEPKNS1_8CFGBlockEPKNS1_10CFGStmtMapERKNS1_4ento10CoreEngineEEN7VisitWLD0Ev\", \"(anonymous namespace)::IdempotentOperationChecker::PathWasCompletelyAnalyzed(clang::CFG const*, clang::CFGBlock const*, clang::CFGStmtMap const*, clang::ento::CoreEngine const&)::VisitWL::~VisitWL()\"},\n    {\"_ZZN12_GLOBAL__N_126IdempotentOperationChecker25PathWasCompletelyAnalyzedEPKN5clang3CFGEPKNS1_8CFGBlockEPKNS1_10CFGStmtMapERKNS1_4ento10CoreEngineEEN7VisitWL5visitERKNSB_12WorkListUnitE\", \"(anonymous namespace)::IdempotentOperationChecker::PathWasCompletelyAnalyzed(clang::CFG const*, clang::CFGBlock const*, clang::CFGStmtMap const*, clang::ento::CoreEngine const&)::VisitWL::visit(clang::ento::WorkListUnit const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang14BinaryOperatorEN12_GLOBAL__N_126IdempotentOperationChecker18BinaryOperatorDataENS_12DenseMapInfoIS4_EENS8_IS7_EEEixERKS4_\", \"llvm::DenseMap<clang::BinaryOperator const*, (anonymous namespace)::IdempotentOperationChecker::BinaryOperatorData, llvm::DenseMapInfo<clang::BinaryOperator const*>, llvm::DenseMapInfo<(anonymous namespace)::IdempotentOperationChecker::BinaryOperatorData> >::operator[](clang::BinaryOperator const* const&)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationChecker22PreVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::IdempotentOperationChecker::PreVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationChecker7CanVaryEPKN5clang4ExprEPNS1_15AnalysisContextE\", \"(anonymous namespace)::IdempotentOperationChecker::CanVary(clang::Expr const*, clang::AnalysisContext*)\"},\n    {\"_ZN12_GLOBAL__N_126IdempotentOperationChecker23containsNonLocalVarDeclEPKN5clang4StmtE\", \"(anonymous namespace)::IdempotentOperationChecker::containsNonLocalVarDecl(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126IdempotentOperationCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::IdempotentOperationChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126IdempotentOperationCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::IdempotentOperationChecker>::~CheckerVisitor()\"},\n    {\"_ZNSt6vectorISt4pairIPFvRN5clang4ento18BugReporterContextEPKvPKNS2_12ExplodedNodeEES6_ESaISC_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSC_SE_EERKSC_\", \"std::vector<std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*>, std::allocator<std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*>*, std::vector<std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*>, std::allocator<std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*> > > >, std::pair<void (*)(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*), void const*> const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8SmallSetIjLj32EEENS_12DenseMapInfoIjEENS3_IS2_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, llvm::SmallSet<unsigned int, 32u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallSet<unsigned int, 32u> > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8SmallSetIjLj32EEENS_12DenseMapInfoIjEENS3_IS2_EEE16InsertIntoBucketERKjRKS2_PSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::SmallSet<unsigned int, 32u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallSet<unsigned int, 32u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallSet<unsigned int, 32u> const&, std::pair<unsigned int, llvm::SmallSet<unsigned int, 32u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8SmallSetIjLj32EEENS_12DenseMapInfoIjEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallSet<unsigned int, 32u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallSet<unsigned int, 32u> > >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeIPKN5clang8CFGBlockESaIS3_EE9push_backERKS3_\", \"std::deque<clang::CFGBlock const*, std::allocator<clang::CFGBlock const*> >::push_back(clang::CFGBlock const* const&)\"},\n    {\"_ZNSt5dequeIPKN5clang8CFGBlockESaIS3_EE17_M_reallocate_mapEmb\", \"std::deque<clang::CFGBlock const*, std::allocator<clang::CFGBlock const*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIPKN5clang8CFGBlockESaIS3_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::CFGBlock const*, std::allocator<clang::CFGBlock const*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8SmallSetIjLj32EEENS_12DenseMapInfoIjEENS3_IS2_EEED1Ev\", \"llvm::DenseMap<unsigned int, llvm::SmallSet<unsigned int, 32u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallSet<unsigned int, 32u> > >::~DenseMap()\"},\n    {\"_ZN5clang4ento20CheckLLVMConventionsERNS_19TranslationUnitDeclERNS0_11BugReporterE\", \"clang::ento::CheckLLVMConventions(clang::TranslationUnitDecl&, clang::ento::BugReporter&)\"},\n    {\"_Z13ScanCodeDeclsPN5clang11DeclContextERNS_4ento11BugReporterE\", \"ScanCodeDecls(clang::DeclContext*, clang::ento::BugReporter&)\"},\n    {\"_Z11IsPartOfASTPKN5clang13CXXRecordDeclE\", \"IsPartOfAST(clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTFieldVisitor5VisitEPN5clang9FieldDeclE\", \"(anonymous namespace)::ASTFieldVisitor::Visit(clang::FieldDecl*)\"},\n    {\"_Z11IsStdStringN5clang8QualTypeE\", \"IsStdString(clang::QualType)\"},\n    {\"_Z11InNamespacePKN5clang4DeclEN4llvm9StringRefE\", \"InNamespace(clang::Decl const*, llvm::StringRef)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_123StringRefCheckerVisitorEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::StringRefCheckerVisitor, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_123StringRefCheckerVisitor13VisitChildrenEPN5clang4StmtE\", \"(anonymous namespace)::StringRefCheckerVisitor::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN5clang4ento24RegisterMacOSXAPICheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterMacOSXAPIChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_116MacOSXAPICheckerD1Ev\", \"(anonymous namespace)::MacOSXAPIChecker::~MacOSXAPIChecker()\"},\n    {\"_ZN12_GLOBAL__N_116MacOSXAPICheckerD0Ev\", \"(anonymous namespace)::MacOSXAPIChecker::~MacOSXAPIChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_116MacOSXAPICheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MacOSXAPIChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_116MacOSXAPICheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MacOSXAPIChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_Z17CheckDispatchOnceRN5clang4ento14CheckerContextEPKNS_8CallExprERPNS0_7BugTypeEPKNS_14IdentifierInfoE\", \"CheckDispatchOnce(clang::ento::CheckerContext&, clang::CallExpr const*, clang::ento::BugType*&, clang::IdentifierInfo const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_116MacOSXAPICheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MacOSXAPIChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_116MacOSXAPICheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MacOSXAPIChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento21RegisterMallocCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterMallocChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_113MallocCheckerD1Ev\", \"(anonymous namespace)::MallocChecker::~MallocChecker()\"},\n    {\"_ZN12_GLOBAL__N_113MallocCheckerD0Ev\", \"(anonymous namespace)::MallocChecker::~MallocChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113MallocCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MallocChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113MallocCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MallocChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker13visitLocationERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValEb\", \"(anonymous namespace)::MallocChecker::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker12PreVisitBindERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValES8_\", \"(anonymous namespace)::MallocChecker::PreVisitBind(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker15evalDeadSymbolsERN5clang4ento14CheckerContextERNS2_12SymbolReaperE\", \"(anonymous namespace)::MallocChecker::evalDeadSymbols(clang::ento::CheckerContext&, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineE\", \"(anonymous namespace)::MallocChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::MallocChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker10evalAssumeEPKN5clang4ento7GRStateENS2_4SValEbPb\", \"(anonymous namespace)::MallocChecker::evalAssume(clang::ento::GRState const*, clang::ento::SVal, bool, bool*)\"},\n    {\"_ZNK5clang4ento7GRState3setIN12_GLOBAL__N_111RegionStateEEEPKS1_NS0_12GRStateTraitIT_E8key_typeENS9_10value_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<(anonymous namespace)::RegionState>(clang::ento::GRStateTrait<(anonymous namespace)::RegionState>::key_type, clang::ento::GRStateTrait<(anonymous namespace)::RegionState>::value_type) const\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEEENS_12DenseMapInfoIjEENSD_ISC_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEEESaISC_EE9push_backERKSC_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >* const&)\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::operator++()\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_18RefStateENS2_16ImutKeyValueInfoIS6_S8_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefState, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_18RefStateENS2_16ImutKeyValueInfoIS6_S8_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefState, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE12add_internalERKSt4pairIS6_S8_EPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::add_internal(std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE13markImmutableEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE10createNodeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE11balanceTreeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker10FreeMemAuxERN5clang4ento14CheckerContextEPKNS1_8CallExprEPKNS2_7GRStateEjb\", \"(anonymous namespace)::MallocChecker::FreeMemAux(clang::ento::CheckerContext&, clang::CallExpr const*, clang::ento::GRState const*, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker13ReportBadFreeERN5clang4ento14CheckerContextENS2_4SValENS1_11SourceRangeE\", \"(anonymous namespace)::MallocChecker::ReportBadFree(clang::ento::CheckerContext&, clang::ento::SVal, clang::SourceRange)\"},\n    {\"_ZN12_GLOBAL__N_113MallocChecker12MallocMemAuxERN5clang4ento14CheckerContextEPKNS1_8CallExprENS2_4SValES8_PKNS2_7GRStateE\", \"(anonymous namespace)::MallocChecker::MallocMemAux(clang::ento::CheckerContext&, clang::CallExpr const*, clang::ento::SVal, clang::ento::SVal, clang::ento::GRState const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE15remove_internalERKS6_PNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::remove_internal(clang::ento::SymbolData const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RefStateEEEE16removeMinBindingEPNS_11ImutAVLTreeIS9_EERSD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefState> >*&)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113MallocCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MallocChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113MallocCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::MallocChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento31RegisterNSAutoreleasePoolChecksERNS0_10ExprEngineE\", \"clang::ento::RegisterNSAutoreleasePoolChecks(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_124NSAutoreleasePoolCheckerD1Ev\", \"(anonymous namespace)::NSAutoreleasePoolChecker::~NSAutoreleasePoolChecker()\"},\n    {\"_ZN12_GLOBAL__N_124NSAutoreleasePoolCheckerD0Ev\", \"(anonymous namespace)::NSAutoreleasePoolChecker::~NSAutoreleasePoolChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_124NSAutoreleasePoolCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NSAutoreleasePoolChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_124NSAutoreleasePoolCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NSAutoreleasePoolChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_124NSAutoreleasePoolChecker19preVisitObjCMessageERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::NSAutoreleasePoolChecker::preVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_124NSAutoreleasePoolCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NSAutoreleasePoolChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_124NSAutoreleasePoolCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NSAutoreleasePoolChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento21RegisterNSErrorChecksERNS0_11BugReporterERNS0_10ExprEngineERKNS_4DeclE\", \"clang::ento::RegisterNSErrorChecks(clang::ento::BugReporter&, clang::ento::ExprEngine&, clang::Decl const&)\"},\n    {\"_ZN12_GLOBAL__N_114NSErrorCheckerC1ERKN5clang4DeclEbRNS1_4ento10ExprEngineE\", \"(anonymous namespace)::NSErrorChecker::NSErrorChecker(clang::Decl const&, bool, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_114NSErrorCheckerD1Ev\", \"(anonymous namespace)::NSErrorChecker::~NSErrorChecker()\"},\n    {\"_ZN12_GLOBAL__N_114NSErrorCheckerD0Ev\", \"(anonymous namespace)::NSErrorChecker::~NSErrorChecker()\"},\n    {\"_ZN12_GLOBAL__N_114NSErrorChecker12FlushReportsERN5clang4ento11BugReporterE\", \"(anonymous namespace)::NSErrorChecker::FlushReports(clang::ento::BugReporter&)\"},\n    {\"_ZN12_GLOBAL__N_114NSErrorChecker20CheckNSErrorArgumentEN5clang8QualTypeE\", \"(anonymous namespace)::NSErrorChecker::CheckNSErrorArgument(clang::QualType)\"},\n    {\"_ZN5clang4ento31RegisterNoReturnFunctionCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterNoReturnFunctionChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_123NoReturnFunctionCheckerD1Ev\", \"(anonymous namespace)::NoReturnFunctionChecker::~NoReturnFunctionChecker()\"},\n    {\"_ZN12_GLOBAL__N_123NoReturnFunctionCheckerD0Ev\", \"(anonymous namespace)::NoReturnFunctionChecker::~NoReturnFunctionChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_123NoReturnFunctionCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NoReturnFunctionChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_123NoReturnFunctionCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NoReturnFunctionChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_123NoReturnFunctionCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NoReturnFunctionChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_123NoReturnFunctionCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::NoReturnFunctionChecker>::~CheckerVisitor()\"},\n    {\"_ZNK5clang4Decl7getAttrINS_20AnalyzerNoReturnAttrEEEPT_v\", \"clang::AnalyzerNoReturnAttr* clang::Decl::getAttr<clang::AnalyzerNoReturnAttr>() const\"},\n    {\"_ZN5clang4ento23RegisterOSAtomicCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterOSAtomicChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_115OSAtomicCheckerD1Ev\", \"(anonymous namespace)::OSAtomicChecker::~OSAtomicChecker()\"},\n    {\"_ZN12_GLOBAL__N_115OSAtomicCheckerD0Ev\", \"(anonymous namespace)::OSAtomicChecker::~OSAtomicChecker()\"},\n    {\"_ZN12_GLOBAL__N_115OSAtomicChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::OSAtomicChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento25RegisterObjCAtSyncCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterObjCAtSyncChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_117ObjCAtSyncCheckerD1Ev\", \"(anonymous namespace)::ObjCAtSyncChecker::~ObjCAtSyncChecker()\"},\n    {\"_ZN12_GLOBAL__N_117ObjCAtSyncCheckerD0Ev\", \"(anonymous namespace)::ObjCAtSyncChecker::~ObjCAtSyncChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ObjCAtSyncCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCAtSyncChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ObjCAtSyncCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCAtSyncChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ObjCAtSyncCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCAtSyncChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ObjCAtSyncCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCAtSyncChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento27registerObjCSelfInitCheckerERNS0_10ExprEngineE\", \"clang::ento::registerObjCSelfInitChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitCheckerD1Ev\", \"(anonymous namespace)::ObjCSelfInitChecker::~ObjCSelfInitChecker()\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitCheckerD0Ev\", \"(anonymous namespace)::ObjCSelfInitChecker::~ObjCSelfInitChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ObjCSelfInitCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCSelfInitChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ObjCSelfInitCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCSelfInitChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitChecker20postVisitObjCMessageERN5clang4ento14CheckerContextENS2_11ObjCMessageE\", \"(anonymous namespace)::ObjCSelfInitChecker::postVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitChecker13visitLocationERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValEb\", \"(anonymous namespace)::ObjCSelfInitChecker::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_Z11addSelfFlagN5clang4ento4SValEN12_GLOBAL__N_112SelfFlagEnumERNS0_14CheckerContextE\", \"addSelfFlag(clang::ento::SVal, (anonymous namespace)::SelfFlagEnum, clang::ento::CheckerContext&)\"},\n    {\"_Z12getSelfFlagsN5clang4ento4SValERNS0_14CheckerContextE\", \"getSelfFlags(clang::ento::SVal, clang::ento::CheckerContext&)\"},\n    {\"_Z27shouldRunOnFunctionOrMethodPKN5clang9NamedDeclE\", \"shouldRunOnFunctionOrMethod(clang::NamedDecl const*)\"},\n    {\"_Z19checkForInvalidSelfPKN5clang4ExprERNS_4ento14CheckerContextEPKc\", \"checkForInvalidSelf(clang::Expr const*, clang::ento::CheckerContext&, char const*)\"},\n    {\"_ZN12_GLOBAL__N_111InitSelfBugD1Ev\", \"(anonymous namespace)::InitSelfBug::~InitSelfBug()\"},\n    {\"_ZN12_GLOBAL__N_111InitSelfBugD0Ev\", \"(anonymous namespace)::InitSelfBug::~InitSelfBug()\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitChecker20PostVisitGenericCallERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::ObjCSelfInitChecker::PostVisitGenericCall(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_119ObjCSelfInitChecker19PreVisitGenericCallERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::ObjCSelfInitChecker::PreVisitGenericCall(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ObjCSelfInitCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCSelfInitChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ObjCSelfInitCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ObjCSelfInitChecker>::~CheckerVisitor()\"},\n    {\"_ZNSt6vectorISt4pairIPvPN5clang4ento7CheckerEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<void*, clang::ento::Checker*>*, std::vector<std::pair<void*, clang::ento::Checker*>, std::allocator<std::pair<void*, clang::ento::Checker*> > > >, std::pair<void*, clang::ento::Checker*> const&)\"},\n    {\"_ZN5clang4ento7Checker19preVisitObjCMessageERNS0_14CheckerContextENS0_11ObjCMessageE\", \"clang::ento::Checker::preVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN5clang4ento7Checker12PreVisitBindERNS0_14CheckerContextEPKNS_4StmtENS0_4SValES7_\", \"clang::ento::Checker::PreVisitBind(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento7Checker15evalDeadSymbolsERNS0_14CheckerContextERNS0_12SymbolReaperE\", \"clang::ento::Checker::evalDeadSymbols(clang::ento::CheckerContext&, clang::ento::SymbolReaper&)\"},\n    {\"_ZN5clang4ento7Checker11evalEndPathERNS0_24EndOfFunctionNodeBuilderEPvRNS0_10ExprEngineE\", \"clang::ento::Checker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento7Checker15MarkLiveSymbolsEPKNS0_7GRStateERNS0_12SymbolReaperE\", \"clang::ento::Checker::MarkLiveSymbols(clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN5clang4ento7Checker20VisitBranchConditionERNS0_17BranchNodeBuilderERNS0_10ExprEngineEPKNS_4StmtEPv\", \"clang::ento::Checker::VisitBranchCondition(clang::ento::BranchNodeBuilder&, clang::ento::ExprEngine&, clang::Stmt const*, void*)\"},\n    {\"_ZN5clang4ento7Checker15evalNilReceiverERNS0_14CheckerContextENS0_11ObjCMessageE\", \"clang::ento::Checker::evalNilReceiver(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN5clang4ento7Checker12evalCallExprERNS0_14CheckerContextEPKNS_8CallExprE\", \"clang::ento::Checker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento7Checker10evalAssumeEPKNS0_7GRStateENS0_4SValEbPb\", \"clang::ento::Checker::evalAssume(clang::ento::GRState const*, clang::ento::SVal, bool, bool*)\"},\n    {\"_ZN5clang4ento7Checker23wantsRegionChangeUpdateEPKNS0_7GRStateE\", \"clang::ento::Checker::wantsRegionChangeUpdate(clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento7Checker17EvalRegionChangesEPKNS0_7GRStateEPKPKNS0_9MemRegionES9_Pb\", \"clang::ento::Checker::EvalRegionChanges(clang::ento::GRState const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, bool*)\"},\n    {\"_ZN5clang4ento7Checker16VisitEndAnalysisERNS0_13ExplodedGraphERNS0_11BugReporterERNS0_10ExprEngineE\", \"clang::ento::Checker::VisitEndAnalysis(clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento14CheckerContext13addTransitionEPKNS0_7GRStateEPKv\", \"clang::ento::CheckerContext::addTransition(clang::ento::GRState const*, void const*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEEESaISA_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSA_SC_EERKSA_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEEENS_12DenseMapInfoIjEENSB_ISA_EEE16InsertIntoBucketERKjRKSA_PSt4pairIjSA_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEEENS_12DenseMapInfoIjEENSB_ISA_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento14GRStateManager3setIN4llvm12ImmutableMapIPKNS0_10SymbolDataEjNS3_16ImutKeyValueInfoIS7_jEEEEEEPKNS0_7GRStateESD_NS0_12GRStateTraitIT_E8key_typeENSG_10value_typeENSG_12context_typeE\", \"clang::ento::GRState const* clang::ento::GRStateManager::set<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >(clang::ento::GRState const*, clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::key_type, clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::value_type, clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::context_type)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEjNS2_16ImutKeyValueInfoIS6_jEEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEjNS2_16ImutKeyValueInfoIS6_jEEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEjNS2_16ImutKeyValueInfoIS6_jEEEEE3SetES9_S6_jRNS9_7FactoryE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::Set(llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, clang::ento::SymbolData const*, unsigned int, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::Factory&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE3addEPNS_11ImutAVLTreeIS7_EERKSt4pairIS6_jE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, std::pair<clang::ento::SymbolData const*, unsigned int> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS7_EERNS_26ImutAVLTreeInOrderIteratorIS7_EESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE12add_internalERKSt4pairIS6_jEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::add_internal(std::pair<clang::ento::SymbolData const*, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE13markImmutableEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE10createNodeEPNS_11ImutAVLTreeIS7_EERKSt4pairIS6_jESB_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, std::pair<clang::ento::SymbolData const*, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE11balanceTreeEPNS_11ImutAVLTreeIS7_EERKSt4pairIS6_jESB_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*, std::pair<clang::ento::SymbolData const*, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >*)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEED1Ev\", \"llvm::FoldingSet<clang::ento::BugReportEquivClass>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEED0Ev\", \"llvm::FoldingSet<clang::ento::BugReportEquivClass>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::BugReportEquivClass>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::BugReportEquivClass>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::BugReportEquivClass>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento17EnhancedBugReportD1Ev\", \"clang::ento::EnhancedBugReport::~EnhancedBugReport()\"},\n    {\"_ZN5clang4ento17EnhancedBugReportD0Ev\", \"clang::ento::EnhancedBugReport::~EnhancedBugReport()\"},\n    {\"_ZN5clang4ento9BugReport24isOwnedByReporterContextEv\", \"clang::ento::BugReport::isOwnedByReporterContext()\"},\n    {\"_ZNK5clang4ento9BugReport7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::BugReport::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento9BugReport23getExtraDescriptiveTextEv\", \"clang::ento::BugReport::getExtraDescriptiveText()\"},\n    {\"_ZNK5clang4ento15RangedBugReport9getRangesEv\", \"clang::ento::RangedBugReport::getRanges() const\"},\n    {\"_ZN5clang4ento17EnhancedBugReport23registerInitialVisitorsERNS0_18BugReporterContextEPKNS0_12ExplodedNodeE\", \"clang::ento::EnhancedBugReport::registerInitialVisitors(clang::ento::BugReporterContext&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento9BugReport23registerInitialVisitorsERNS0_18BugReporterContextEPKNS0_12ExplodedNodeE\", \"clang::ento::BugReport::registerInitialVisitors(clang::ento::BugReporterContext&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento18BugReporterVisitor24isOwnedByReporterContextEv\", \"clang::ento::BugReporterVisitor::isOwnedByReporterContext()\"},\n    {\"_ZN5clang4ento7Checker20postVisitObjCMessageERNS0_14CheckerContextENS0_11ObjCMessageE\", \"clang::ento::Checker::postVisitObjCMessage(clang::ento::CheckerContext&, clang::ento::ObjCMessage)\"},\n    {\"_ZN5clang4ento7Checker13visitLocationERNS0_14CheckerContextEPKNS_4StmtENS0_4SValEb\", \"clang::ento::Checker::visitLocation(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento7Checker9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::Checker::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento7Checker10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::Checker::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento19CheckObjCUnusedIvarEPKNS_22ObjCImplementationDeclERNS0_11BugReporterE\", \"clang::ento::CheckObjCUnusedIvar(clang::ObjCImplementationDecl const*, clang::ento::BugReporter&)\"},\n    {\"_Z4ScanRN4llvm8DenseMapIPKN5clang12ObjCIvarDeclE9IVarStateNS_12DenseMapInfoIS4_EENS6_IS5_EEEEPKNS1_17ObjCContainerDeclE\", \"Scan(llvm::DenseMap<clang::ObjCIvarDecl const*, IVarState, llvm::DenseMapInfo<clang::ObjCIvarDecl const*>, llvm::DenseMapInfo<IVarState> >&, clang::ObjCContainerDecl const*)\"},\n    {\"_Z4ScanRN4llvm8DenseMapIPKN5clang12ObjCIvarDeclE9IVarStateNS_12DenseMapInfoIS4_EENS6_IS5_EEEEPKNS1_4StmtE\", \"Scan(llvm::DenseMap<clang::ObjCIvarDecl const*, IVarState, llvm::DenseMapInfo<clang::ObjCIvarDecl const*>, llvm::DenseMapInfo<IVarState> >&, clang::Stmt const*)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_10UnusedAttrEEEPT_v\", \"clang::UnusedAttr* clang::Decl::getAttr<clang::UnusedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12IBOutletAttrEEEPT_v\", \"clang::IBOutletAttr* clang::Decl::getAttr<clang::IBOutletAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_22IBOutletCollectionAttrEEEPT_v\", \"clang::IBOutletCollectionAttr* clang::Decl::getAttr<clang::IBOutletCollectionAttr>() const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang12ObjCIvarDeclE9IVarStateNS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::ObjCIvarDecl const*, IVarState, llvm::DenseMapInfo<clang::ObjCIvarDecl const*>, llvm::DenseMapInfo<IVarState> >::InsertIntoBucket(clang::ObjCIvarDecl const* const&, IVarState const&, std::pair<clang::ObjCIvarDecl const*, IVarState>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang12ObjCIvarDeclE9IVarStateNS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::ObjCIvarDecl const*, IVarState, llvm::DenseMapInfo<clang::ObjCIvarDecl const*>, llvm::DenseMapInfo<IVarState> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento27RegisterPointerArithCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterPointerArithChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_119PointerArithCheckerD1Ev\", \"(anonymous namespace)::PointerArithChecker::~PointerArithChecker()\"},\n    {\"_ZN12_GLOBAL__N_119PointerArithCheckerD0Ev\", \"(anonymous namespace)::PointerArithChecker::~PointerArithChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119PointerArithCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerArithChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119PointerArithCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerArithChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_119PointerArithChecker22PreVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::PointerArithChecker::PreVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119PointerArithCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerArithChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119PointerArithCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerArithChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento25RegisterPointerSubCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterPointerSubChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_117PointerSubCheckerD1Ev\", \"(anonymous namespace)::PointerSubChecker::~PointerSubChecker()\"},\n    {\"_ZN12_GLOBAL__N_117PointerSubCheckerD0Ev\", \"(anonymous namespace)::PointerSubChecker::~PointerSubChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117PointerSubCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerSubChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117PointerSubCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerSubChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_117PointerSubChecker22PreVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::PointerSubChecker::PreVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117PointerSubCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerSubChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117PointerSubCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PointerSubChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento26RegisterPthreadLockCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterPthreadLockChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118PthreadLockCheckerD1Ev\", \"(anonymous namespace)::PthreadLockChecker::~PthreadLockChecker()\"},\n    {\"_ZN12_GLOBAL__N_118PthreadLockCheckerD0Ev\", \"(anonymous namespace)::PthreadLockChecker::~PthreadLockChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118PthreadLockCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PthreadLockChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118PthreadLockCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PthreadLockChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_118PthreadLockChecker11AcquireLockERN5clang4ento14CheckerContextEPKNS1_8CallExprENS2_4SValEb\", \"(anonymous namespace)::PthreadLockChecker::AcquireLock(clang::ento::CheckerContext&, clang::CallExpr const*, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118PthreadLockCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PthreadLockChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118PthreadLockCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::PthreadLockChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableSetIPKNS0_9MemRegionENS2_17ImutContainerInfoIS6_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableSetIPKNS0_9MemRegionENS2_17ImutContainerInfoIS6_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE6removeEPNS_11ImutAVLTreeIS7_EES6_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::remove(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, clang::ento::MemRegion const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE15remove_internalES6_PNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::remove_internal(clang::ento::MemRegion const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE16removeMinBindingEPNS_11ImutAVLTreeIS7_EERSB_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*&)\"},\n    {\"_ZN5clang4ento33RegisterReturnPointerRangeCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterReturnPointerRangeChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_125ReturnPointerRangeCheckerD1Ev\", \"(anonymous namespace)::ReturnPointerRangeChecker::~ReturnPointerRangeChecker()\"},\n    {\"_ZN12_GLOBAL__N_125ReturnPointerRangeCheckerD0Ev\", \"(anonymous namespace)::ReturnPointerRangeChecker::~ReturnPointerRangeChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_125ReturnPointerRangeCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnPointerRangeChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_125ReturnPointerRangeCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnPointerRangeChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_125ReturnPointerRangeCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnPointerRangeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_125ReturnPointerRangeCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnPointerRangeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento26RegisterReturnUndefCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterReturnUndefChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118ReturnUndefCheckerD1Ev\", \"(anonymous namespace)::ReturnUndefChecker::~ReturnUndefChecker()\"},\n    {\"_ZN12_GLOBAL__N_118ReturnUndefCheckerD0Ev\", \"(anonymous namespace)::ReturnUndefChecker::~ReturnUndefChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118ReturnUndefCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnUndefChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118ReturnUndefCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnUndefChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118ReturnUndefCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnUndefChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118ReturnUndefCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::ReturnUndefChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento28RegisterStackAddrLeakCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterStackAddrLeakChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_120StackAddrLeakCheckerD1Ev\", \"(anonymous namespace)::StackAddrLeakChecker::~StackAddrLeakChecker()\"},\n    {\"_ZN12_GLOBAL__N_120StackAddrLeakCheckerD0Ev\", \"(anonymous namespace)::StackAddrLeakChecker::~StackAddrLeakChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120StackAddrLeakCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StackAddrLeakChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120StackAddrLeakCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StackAddrLeakChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_120StackAddrLeakChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineE\", \"(anonymous namespace)::StackAddrLeakChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_120StackAddrLeakChecker7GenNameERN4llvm11raw_ostreamEPKN5clang4ento9MemRegionERNS4_13SourceManagerE\", \"(anonymous namespace)::StackAddrLeakChecker::GenName(llvm::raw_ostream&, clang::ento::MemRegion const*, clang::SourceManager&)\"},\n    {\"_ZZN12_GLOBAL__N_120StackAddrLeakChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineEEN8CallBackD1Ev\", \"(anonymous namespace)::StackAddrLeakChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)::CallBack::~CallBack()\"},\n    {\"_ZZN12_GLOBAL__N_120StackAddrLeakChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineEEN8CallBackD0Ev\", \"(anonymous namespace)::StackAddrLeakChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)::CallBack::~CallBack()\"},\n    {\"_ZZN12_GLOBAL__N_120StackAddrLeakChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineEEN8CallBack13HandleBindingERNS2_12StoreManagerEPKvPKNS2_9MemRegionENS2_4SValE\", \"(anonymous namespace)::StackAddrLeakChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)::CallBack::HandleBinding(clang::ento::StoreManager&, void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120StackAddrLeakCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StackAddrLeakChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120StackAddrLeakCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StackAddrLeakChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento21RegisterStreamCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterStreamChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_113StreamCheckerD1Ev\", \"(anonymous namespace)::StreamChecker::~StreamChecker()\"},\n    {\"_ZN12_GLOBAL__N_113StreamCheckerD0Ev\", \"(anonymous namespace)::StreamChecker::~StreamChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113StreamCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StreamChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113StreamCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StreamChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_113StreamChecker15evalDeadSymbolsERN5clang4ento14CheckerContextERNS2_12SymbolReaperE\", \"(anonymous namespace)::StreamChecker::evalDeadSymbols(clang::ento::CheckerContext&, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_113StreamChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineE\", \"(anonymous namespace)::StreamChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_113StreamChecker12evalCallExprERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::StreamChecker::evalCallExpr(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113StreamChecker15CheckNullStreamEN5clang4ento4SValEPKNS2_7GRStateERNS2_14CheckerContextE\", \"(anonymous namespace)::StreamChecker::CheckNullStream(clang::ento::SVal, clang::ento::GRState const*, clang::ento::CheckerContext&)\"},\n    {\"_ZNK5clang4ento7GRState3setIN12_GLOBAL__N_111StreamStateEEEPKS1_NS0_12GRStateTraitIT_E8key_typeENS9_10value_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<(anonymous namespace)::StreamState>(clang::ento::GRStateTrait<(anonymous namespace)::StreamState>::key_type, clang::ento::GRStateTrait<(anonymous namespace)::StreamState>::value_type) const\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_111StreamStateENS2_16ImutKeyValueInfoIS6_S8_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::StreamState, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_111StreamStateENS2_16ImutKeyValueInfoIS6_S8_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::StreamState, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEEENS_12DenseMapInfoIjEENSD_ISC_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEEESaISC_EE9push_backERKSC_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >* const&)\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE12add_internalERKSt4pairIS6_S8_EPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::add_internal(std::pair<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE13markImmutableEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE10createNodeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_111StreamStateEEEE11balanceTreeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::StreamState> >*)\"},\n    {\"_ZN12_GLOBAL__N_113StreamChecker11OpenFileAuxERN5clang4ento14CheckerContextEPKNS1_8CallExprE\", \"(anonymous namespace)::StreamChecker::OpenFileAux(clang::ento::CheckerContext&, clang::CallExpr const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113StreamCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StreamChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113StreamCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::StreamChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento26RegisterUndefBranchCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUndefBranchChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118UndefBranchCheckerD1Ev\", \"(anonymous namespace)::UndefBranchChecker::~UndefBranchChecker()\"},\n    {\"_ZN12_GLOBAL__N_118UndefBranchCheckerD0Ev\", \"(anonymous namespace)::UndefBranchChecker::~UndefBranchChecker()\"},\n    {\"_ZN12_GLOBAL__N_118UndefBranchChecker20VisitBranchConditionERN5clang4ento17BranchNodeBuilderERNS2_10ExprEngineEPKNS1_4StmtEPv\", \"(anonymous namespace)::UndefBranchChecker::VisitBranchCondition(clang::ento::BranchNodeBuilder&, clang::ento::ExprEngine&, clang::Stmt const*, void*)\"},\n    {\"_ZN12_GLOBAL__N_118UndefBranchChecker13FindUndefExpr8FindExprEPKN5clang4ExprE\", \"(anonymous namespace)::UndefBranchChecker::FindUndefExpr::FindExpr(clang::Expr const*)\"},\n    {\"_ZN5clang4ento36RegisterUndefCapturedBlockVarCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUndefCapturedBlockVarChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_128UndefCapturedBlockVarCheckerD1Ev\", \"(anonymous namespace)::UndefCapturedBlockVarChecker::~UndefCapturedBlockVarChecker()\"},\n    {\"_ZN12_GLOBAL__N_128UndefCapturedBlockVarCheckerD0Ev\", \"(anonymous namespace)::UndefCapturedBlockVarChecker::~UndefCapturedBlockVarChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_128UndefCapturedBlockVarCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefCapturedBlockVarChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_128UndefCapturedBlockVarCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefCapturedBlockVarChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_Z20FindBlockDeclRefExprPKN5clang4StmtEPKNS_7VarDeclE\", \"FindBlockDeclRefExpr(clang::Stmt const*, clang::VarDecl const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_128UndefCapturedBlockVarCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefCapturedBlockVarChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_128UndefCapturedBlockVarCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefCapturedBlockVarChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento26RegisterUndefResultCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUndefResultChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_118UndefResultCheckerD1Ev\", \"(anonymous namespace)::UndefResultChecker::~UndefResultChecker()\"},\n    {\"_ZN12_GLOBAL__N_118UndefResultCheckerD0Ev\", \"(anonymous namespace)::UndefResultChecker::~UndefResultChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118UndefResultCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefResultChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118UndefResultCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefResultChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_118UndefResultChecker23PostVisitBinaryOperatorERN5clang4ento14CheckerContextEPKNS1_14BinaryOperatorE\", \"(anonymous namespace)::UndefResultChecker::PostVisitBinaryOperator(clang::ento::CheckerContext&, clang::BinaryOperator const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118UndefResultCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefResultChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118UndefResultCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefResultChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento38RegisterUndefinedArraySubscriptCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUndefinedArraySubscriptChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_130UndefinedArraySubscriptCheckerD1Ev\", \"(anonymous namespace)::UndefinedArraySubscriptChecker::~UndefinedArraySubscriptChecker()\"},\n    {\"_ZN12_GLOBAL__N_130UndefinedArraySubscriptCheckerD0Ev\", \"(anonymous namespace)::UndefinedArraySubscriptChecker::~UndefinedArraySubscriptChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_130UndefinedArraySubscriptCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedArraySubscriptChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_130UndefinedArraySubscriptCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedArraySubscriptChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_130UndefinedArraySubscriptCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedArraySubscriptChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_130UndefinedArraySubscriptCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedArraySubscriptChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento34RegisterUndefinedAssignmentCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUndefinedAssignmentChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_126UndefinedAssignmentCheckerD1Ev\", \"(anonymous namespace)::UndefinedAssignmentChecker::~UndefinedAssignmentChecker()\"},\n    {\"_ZN12_GLOBAL__N_126UndefinedAssignmentCheckerD0Ev\", \"(anonymous namespace)::UndefinedAssignmentChecker::~UndefinedAssignmentChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126UndefinedAssignmentCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedAssignmentChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126UndefinedAssignmentCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedAssignmentChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_126UndefinedAssignmentChecker12PreVisitBindERN5clang4ento14CheckerContextEPKNS1_4StmtENS2_4SValES8_\", \"(anonymous namespace)::UndefinedAssignmentChecker::PreVisitBind(clang::ento::CheckerContext&, clang::Stmt const*, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126UndefinedAssignmentCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedAssignmentChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126UndefinedAssignmentCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedAssignmentChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento22RegisterUnixAPICheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUnixAPIChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_114UnixAPICheckerD1Ev\", \"(anonymous namespace)::UnixAPIChecker::~UnixAPIChecker()\"},\n    {\"_ZN12_GLOBAL__N_114UnixAPICheckerD0Ev\", \"(anonymous namespace)::UnixAPIChecker::~UnixAPIChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114UnixAPICheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UnixAPIChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114UnixAPICheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UnixAPIChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_Z9CheckOpenRN5clang4ento14CheckerContextERN12_GLOBAL__N_114UnixAPICheckerEPKNS_8CallExprERPNS0_7BugTypeE\", \"CheckOpen(clang::ento::CheckerContext&, (anonymous namespace)::UnixAPIChecker&, clang::CallExpr const*, clang::ento::BugType*&)\"},\n    {\"_Z16CheckPthreadOnceRN5clang4ento14CheckerContextERN12_GLOBAL__N_114UnixAPICheckerEPKNS_8CallExprERPNS0_7BugTypeE\", \"CheckPthreadOnce(clang::ento::CheckerContext&, (anonymous namespace)::UnixAPIChecker&, clang::CallExpr const*, clang::ento::BugType*&)\"},\n    {\"_Z15CheckMallocZeroRN5clang4ento14CheckerContextERN12_GLOBAL__N_114UnixAPICheckerEPKNS_8CallExprERPNS0_7BugTypeE\", \"CheckMallocZero(clang::ento::CheckerContext&, (anonymous namespace)::UnixAPIChecker&, clang::CallExpr const*, clang::ento::BugType*&)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114UnixAPICheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UnixAPIChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114UnixAPICheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::UnixAPIChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento30RegisterUnreachableCodeCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterUnreachableCodeChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeCheckerD1Ev\", \"(anonymous namespace)::UnreachableCodeChecker::~UnreachableCodeChecker()\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeCheckerD0Ev\", \"(anonymous namespace)::UnreachableCodeChecker::~UnreachableCodeChecker()\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeChecker16VisitEndAnalysisERN5clang4ento13ExplodedGraphERNS2_11BugReporterERNS2_10ExprEngineE\", \"(anonymous namespace)::UnreachableCodeChecker::VisitEndAnalysis(clang::ento::ExplodedGraph&, clang::ento::BugReporter&, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_122UnreachableCodeChecker26FindUnreachableEntryPointsEPKN5clang8CFGBlockE\", \"(anonymous namespace)::UnreachableCodeChecker::FindUnreachableEntryPoints(clang::CFGBlock const*)\"},\n    {\"_ZN4llvm8SmallSetIjLj256EE6insertERKj\", \"llvm::SmallSet<unsigned int, 256u>::insert(unsigned int const&)\"},\n    {\"_ZN5clang4ento12containsStmtINS_17SizeOfAlignOfExprEEEbPKNS_4StmtE\", \"bool clang::ento::containsStmt<clang::SizeOfAlignOfExpr>(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento22RegisterVLASizeCheckerERNS0_10ExprEngineE\", \"clang::ento::RegisterVLASizeChecker(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_114VLASizeCheckerD1Ev\", \"(anonymous namespace)::VLASizeChecker::~VLASizeChecker()\"},\n    {\"_ZN12_GLOBAL__N_114VLASizeCheckerD0Ev\", \"(anonymous namespace)::VLASizeChecker::~VLASizeChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114VLASizeCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::VLASizeChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114VLASizeCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::VLASizeChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114VLASizeCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::VLASizeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114VLASizeCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::VLASizeChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento10ExprEngine12VisitAggExprEPKNS_4ExprEPKNS0_9MemRegionEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitAggExpr(clang::Expr const*, clang::ento::MemRegion const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_114AggExprVisitorEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::AggExprVisitor, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang4ento15AnalysisManager29getAnalysisContextInAnotherTUEPKNS_4DeclE\", \"clang::ento::AnalysisManager::getAnalysisContextInAnotherTU(clang::Decl const*)\"},\n    {\"_ZN5clang4ento28CreateBasicConstraintManagerERNS0_14GRStateManagerERNS0_9SubEngineE\", \"clang::ento::CreateBasicConstraintManager(clang::ento::GRStateManager&, clang::ento::SubEngine&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManagerD1Ev\", \"(anonymous namespace)::BasicConstraintManager::~BasicConstraintManager()\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManagerD0Ev\", \"(anonymous namespace)::BasicConstraintManager::~BasicConstraintManager()\"},\n    {\"_ZNK12_GLOBAL__N_122BasicConstraintManager9getSymValEPKN5clang4ento7GRStateEPKNS2_10SymbolDataE\", \"(anonymous namespace)::BasicConstraintManager::getSymVal(clang::ento::GRState const*, clang::ento::SymbolData const*) const\"},\n    {\"_ZNK12_GLOBAL__N_122BasicConstraintManager7isEqualEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntE\", \"(anonymous namespace)::BasicConstraintManager::isEqual(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&) const\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager18removeDeadBindingsEPKN5clang4ento7GRStateERNS2_12SymbolReaperE\", \"(anonymous namespace)::BasicConstraintManager::removeDeadBindings(clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager5printEPKN5clang4ento7GRStateERN4llvm11raw_ostreamEPKcSA_\", \"(anonymous namespace)::BasicConstraintManager::print(clang::ento::GRState const*, llvm::raw_ostream&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymNEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymNE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymEQEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymEQ(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymLTEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymLT(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymGTEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymGT(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymLEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymLE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager11assumeSymGEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::BasicConstraintManager::assumeSymGE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122BasicConstraintManager5AddEQEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntE\", \"(anonymous namespace)::BasicConstraintManager::AddEQ(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&)\"},\n    {\"_ZNK5clang4ento7GRState3getIN12_GLOBAL__N_110ConstNotEqEEENS0_12GRStateTraitIT_E11lookup_typeENS7_8key_typeE\", \"clang::ento::GRStateTrait<(anonymous namespace)::ConstNotEq>::lookup_type clang::ento::GRState::get<(anonymous namespace)::ConstNotEq>(clang::ento::GRStateTrait<(anonymous namespace)::ConstNotEq>::key_type) const\"},\n    {\"_ZNK5clang4ento7GRState3getIN12_GLOBAL__N_17ConstEqEEENS0_12GRStateTraitIT_E11lookup_typeENS7_8key_typeE\", \"clang::ento::GRStateTrait<(anonymous namespace)::ConstEq>::lookup_type clang::ento::GRState::get<(anonymous namespace)::ConstEq>(clang::ento::GRStateTrait<(anonymous namespace)::ConstEq>::key_type) const\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEPKNS2_6APSIntENS2_16ImutKeyValueInfoIS6_S9_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEPKNS2_6APSIntENS2_16ImutKeyValueInfoIS6_S9_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEPKNS2_6APSIntENS2_16ImutKeyValueInfoIS6_S9_EEEEE3SetESC_S6_S9_RNSC_7FactoryE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> > >::Set(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >, clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::Factory&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS0_6APSIntEEEEESaISD_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSD_SF_EERKSD_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE16InsertIntoBucketERKjRKSD_PSt4pairIjSD_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE3addEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, std::pair<clang::ento::SymbolData const*, llvm::APSInt const*> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE16getCanonicalTreeEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeISA_EERNS_26ImutAVLTreeInOrderIteratorISA_EESH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE12add_internalERKSt4pairIS6_S9_EPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::add_internal(std::pair<clang::ento::SymbolData const*, llvm::APSInt const*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE13markImmutableEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE10createNodeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, std::pair<clang::ento::SymbolData const*, llvm::APSInt const*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE11balanceTreeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, std::pair<clang::ento::SymbolData const*, llvm::APSInt const*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS2_12ImmutableSetIPNS2_6APSIntENS2_17ImutContainerInfoIS9_EEEENS2_16ImutKeyValueInfoIS6_SC_EEEEE6LookupESF_S6_\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > > >::Lookup(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >, clang::ento::SymbolData const*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS0_12ImmutableSetIPNS0_6APSIntENS0_17ImutContainerInfoISA_EEEEEEEESaISG_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSG_SI_EERKSG_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoISA_EEEEEEEENS_12DenseMapInfoIjEENSH_ISG_EEE16InsertIntoBucketERKjRKSG_PSt4pairIjSG_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoISA_EEEEEEEENS_12DenseMapInfoIjEENSH_ISG_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS2_12ImmutableSetIPNS2_6APSIntENS2_17ImutContainerInfoIS9_EEEENS2_16ImutKeyValueInfoIS6_SC_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS2_12ImmutableSetIPNS2_6APSIntENS2_17ImutContainerInfoIS9_EEEENS2_16ImutKeyValueInfoIS6_SC_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm12ImmutableMapIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS8_EEEENS_16ImutKeyValueInfoIS5_SB_EEE7Factory3addESE_RKS5_RKSB_\", \"llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::Factory::add(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >, clang::ento::SymbolData const* const&, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE3addEPNS_11ImutAVLTreeISD_EERKSt4pairIS6_SC_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE16getCanonicalTreeEPNS_11ImutAVLTreeISD_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeISD_EERNS_26ImutAVLTreeInOrderIteratorISD_EESK_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::operator++()\"},\n    {\"_ZNK4llvm11ImutAVLTreeINS_17ImutContainerInfoIPNS_6APSIntEEEE7isEqualERKS5_\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >::isEqual(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> > const&) const\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_17ImutContainerInfoIPNS_6APSIntEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutContainerInfo<llvm::APSInt*> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE12add_internalERKSt4pairIS6_SC_EPNS_11ImutAVLTreeISD_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::add_internal(std::pair<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE13markImmutableEPNS_11ImutAVLTreeISD_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE10createNodeEPNS_11ImutAVLTreeISD_EERKSt4pairIS6_SC_ESH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE11balanceTreeEPNS_11ImutAVLTreeISD_EERKSt4pairIS6_SC_ESH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPNS_6APSIntEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPNS_6APSIntEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_17ImutContainerInfoIPNS0_6APSIntEEEEESaIS7_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >**, std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*> > >, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPNS_6APSIntEEEEENS_12DenseMapInfoIjEENS8_IS7_EEE16InsertIntoBucketERKjRKS7_PSt4pairIjS7_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPNS_6APSIntEEEEENS_12DenseMapInfoIjEENS8_IS7_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE3addEPNS_11ImutAVLTreeIS4_EEPKS2_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::add(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::APSInt const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS4_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS4_EERNS_26ImutAVLTreeInOrderIteratorIS4_EESB_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<llvm::APSInt*> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<llvm::APSInt*> >&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE12add_internalEPKS2_PNS_11ImutAVLTreeIS4_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::add_internal(llvm::APSInt const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE13markImmutableEPNS_11ImutAVLTreeIS4_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::markImmutable(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE10createNodeEPNS_11ImutAVLTreeIS4_EEPKS2_S8_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::createNode(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::APSInt const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEE11balanceTreeEPNS_11ImutAVLTreeIS4_EEPKS2_S8_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::balanceTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*, llvm::APSInt const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<llvm::APSInt*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE6removeEPNS_11ImutAVLTreeISD_EERKS6_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::remove(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, clang::ento::SymbolData const* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE15remove_internalERKS6_PNS_11ImutAVLTreeISD_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::remove_internal(clang::ento::SymbolData const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableSetIPNS_6APSIntENS_17ImutContainerInfoIS9_EEEEEEE16removeMinBindingEPNS_11ImutAVLTreeISD_EERSH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableSet<llvm::APSInt*, llvm::ImutContainerInfo<llvm::APSInt*> > > >*&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE6removeEPNS_11ImutAVLTreeISA_EERKS6_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::remove(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, clang::ento::SymbolData const* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE15remove_internalERKS6_PNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::remove_internal(clang::ento::SymbolData const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEPKNS_6APSIntEEEE16removeMinBindingEPNS_11ImutAVLTreeISA_EERSE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >*&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEPKNS2_6APSIntENS2_16ImutKeyValueInfoIS6_S9_EEEEE6LookupESC_S6_\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> > >::Lookup(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::APSInt const*, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::APSInt const*> >, clang::ento::SymbolData const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPNS_6APSIntEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<llvm::APSInt*> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento23CreateBasicStoreManagerERNS0_14GRStateManagerE\", \"clang::ento::CreateBasicStoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento12StoreManager15BindingsHandlerD0Ev\", \"clang::ento::StoreManager::BindingsHandler::~BindingsHandler()\"},\n    {\"_ZN5clang4ento12StoreManager15BindingsHandlerD1Ev\", \"clang::ento::StoreManager::BindingsHandler::~BindingsHandler()\"},\n    {\"_ZN5clang4ento12StoreManager15BindingsHandlerD2Ev\", \"clang::ento::StoreManager::BindingsHandler::~BindingsHandler()\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManagerD1Ev\", \"(anonymous namespace)::BasicStoreManager::~BasicStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManagerD0Ev\", \"(anonymous namespace)::BasicStoreManager::~BasicStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager8RetrieveEPKvN5clang4ento3LocENS3_8QualTypeE\", \"(anonymous namespace)::BasicStoreManager::Retrieve(void const*, clang::ento::Loc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager4BindEPKvN5clang4ento3LocENS4_4SValE\", \"(anonymous namespace)::BasicStoreManager::Bind(void const*, clang::ento::Loc, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager6RemoveEPKvN5clang4ento3LocE\", \"(anonymous namespace)::BasicStoreManager::Remove(void const*, clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager19BindCompoundLiteralEPKvPKN5clang19CompoundLiteralExprEPKNS3_15LocationContextENS3_4ento4SValE\", \"(anonymous namespace)::BasicStoreManager::BindCompoundLiteral(void const*, clang::CompoundLiteralExpr const*, clang::LocationContext const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager15getInitialStoreEPKN5clang15LocationContextE\", \"(anonymous namespace)::BasicStoreManager::getInitialStore(clang::LocationContext const*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager15getSubRegionMapEPKv\", \"(anonymous namespace)::BasicStoreManager::getSubRegionMap(void const*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager14ArrayToPointerEN5clang4ento3LocE\", \"(anonymous namespace)::BasicStoreManager::ArrayToPointer(clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager18removeDeadBindingsEPKvPKN5clang17StackFrameContextERNS3_4ento12SymbolReaperERN4llvm15SmallVectorImplIPKNS7_9MemRegionEEE\", \"(anonymous namespace)::BasicStoreManager::removeDeadBindings(void const*, clang::StackFrameContext const*, clang::ento::SymbolReaper&, llvm::SmallVectorImpl<clang::ento::MemRegion const*>&)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager8BindDeclEPKvPKN5clang4ento9VarRegionENS4_4SValE\", \"(anonymous namespace)::BasicStoreManager::BindDecl(void const*, clang::ento::VarRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager18BindDeclWithNoInitEPKvPKN5clang4ento9VarRegionE\", \"(anonymous namespace)::BasicStoreManager::BindDeclWithNoInit(void const*, clang::ento::VarRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager17InvalidateRegionsEPKvPKPKN5clang4ento9MemRegionES9_PKNS3_4ExprEjPN4llvm8DenseSetIPKNS4_10SymbolDataENSD_12DenseMapInfoISH_EEEEbPNSD_11SmallVectorIS7_Lj8EEE\", \"(anonymous namespace)::BasicStoreManager::InvalidateRegions(void const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, clang::Expr const*, unsigned int, llvm::DenseSet<clang::ento::SymbolData const*, llvm::DenseMapInfo<clang::ento::SymbolData const*> >*, bool, llvm::SmallVector<clang::ento::MemRegion const*, 8u>*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager5printEPKvRN4llvm11raw_ostreamEPKcS7_\", \"(anonymous namespace)::BasicStoreManager::print(void const*, llvm::raw_ostream&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager12iterBindingsEPKvRN5clang4ento12StoreManager15BindingsHandlerE\", \"(anonymous namespace)::BasicStoreManager::iterBindings(void const*, clang::ento::StoreManager::BindingsHandler&)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager16InvalidateRegionEPKvPKN5clang4ento9MemRegionEPKNS3_4ExprEjPN4llvm8DenseSetIPKNS4_10SymbolDataENSB_12DenseMapInfoISF_EEEE\", \"(anonymous namespace)::BasicStoreManager::InvalidateRegion(void const*, clang::ento::MemRegion const*, clang::Expr const*, unsigned int, llvm::DenseSet<clang::ento::SymbolData const*, llvm::DenseMapInfo<clang::ento::SymbolData const*> >*)\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager16BindDeclInternalEPKvPKN5clang4ento9VarRegionEPNS4_4SValE\", \"(anonymous namespace)::BasicStoreManager::BindDeclInternal(void const*, clang::ento::VarRegion const*, clang::ento::SVal*)\"},\n    {\"_ZN12_GLOBAL__N_122BasicStoreSubRegionMapD1Ev\", \"(anonymous namespace)::BasicStoreSubRegionMap::~BasicStoreSubRegionMap()\"},\n    {\"_ZN12_GLOBAL__N_122BasicStoreSubRegionMapD0Ev\", \"(anonymous namespace)::BasicStoreSubRegionMap::~BasicStoreSubRegionMap()\"},\n    {\"_ZNK12_GLOBAL__N_122BasicStoreSubRegionMap14iterSubRegionsEPKN5clang4ento9MemRegionERNS2_12SubRegionMap7VisitorE\", \"(anonymous namespace)::BasicStoreSubRegionMap::iterSubRegions(clang::ento::MemRegion const*, clang::ento::SubRegionMap::Visitor&) const\"},\n    {\"_ZN12_GLOBAL__N_117BasicStoreManager12scanForIvarsEPN5clang4StmtEPKNS1_4DeclEPKNS1_4ento9MemRegionEPKv\", \"(anonymous namespace)::BasicStoreManager::scanForIvars(clang::Stmt*, clang::Decl const*, clang::ento::MemRegion const*, void const*)\"},\n    {\"_ZN5clang4ento12StoreManager11BindDefaultEPKvPKNS0_9MemRegionENS0_4SValE\", \"clang::ento::StoreManager::BindDefault(void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento12StoreManager12getLValueVarEPKNS_7VarDeclEPKNS_15LocationContextE\", \"clang::ento::StoreManager::getLValueVar(clang::VarDecl const*, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento12StoreManager15getLValueStringEPKNS_13StringLiteralE\", \"clang::ento::StoreManager::getLValueString(clang::StringLiteral const*)\"},\n    {\"_ZN5clang4ento12StoreManager13getLValueIvarEPKNS_12ObjCIvarDeclENS0_4SValE\", \"clang::ento::StoreManager::getLValueIvar(clang::ObjCIvarDecl const*, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento12StoreManager14getLValueFieldEPKNS_9FieldDeclENS0_4SValE\", \"clang::ento::StoreManager::getLValueField(clang::FieldDecl const*, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento12StoreManager17getSizeInElementsEPKNS0_7GRStateEPKNS0_9MemRegionENS_8QualTypeE\", \"clang::ento::StoreManager::getSizeInElements(clang::ento::GRState const*, clang::ento::MemRegion const*, clang::QualType)\"},\n    {\"_ZN5clang4ento12StoreManager17evalDerivedToBaseENS0_4SValENS_8QualTypeE\", \"clang::ento::StoreManager::evalDerivedToBase(clang::ento::SVal, clang::QualType)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS4_4SValEEEEESaISB_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSB_SD_EERKSB_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >* const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE13computeDigestEPS9_SA_RKSt4pairIS6_S7_E\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::computeDigest(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::pair<clang::ento::MemRegion const*, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS4_4SValEEEEENS_12DenseMapInfoIjEENSC_ISB_EEE16InsertIntoBucketERKjRKSB_PSt4pairIjSB_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS4_4SValEEEEENS_12DenseMapInfoIjEENSC_ISB_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::operator++()\"},\n    {\"_ZN5clang4ento12SubRegionMapD1Ev\", \"clang::ento::SubRegionMap::~SubRegionMap()\"},\n    {\"_ZN5clang4ento12SubRegionMapD0Ev\", \"clang::ento::SubRegionMap::~SubRegionMap()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE6removeEPNS_11ImutAVLTreeIS8_EERKS6_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::remove(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, clang::ento::MemRegion const* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS8_EERNS_26ImutAVLTreeInOrderIteratorIS8_EESF_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE15remove_internalERKS6_PNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::remove_internal(clang::ento::MemRegion const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE13markImmutableEPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE11balanceTreeEPNS_11ImutAVLTreeIS8_EERKSt4pairIS6_S7_ESC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::pair<clang::ento::MemRegion const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE10createNodeEPNS_11ImutAVLTreeIS8_EERKSt4pairIS6_S7_ESC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::pair<clang::ento::MemRegion const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE16removeMinBindingEPNS_11ImutAVLTreeIS8_EERSC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE3addEPNS_11ImutAVLTreeIS8_EERKSt4pairIS6_S7_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*, std::pair<clang::ento::MemRegion const*, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEE12add_internalERKSt4pairIS6_S7_EPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::add_internal(std::pair<clang::ento::MemRegion const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >*)\"},\n    {\"_ZN5clang4ento12StoreManagerD1Ev\", \"clang::ento::StoreManager::~StoreManager()\"},\n    {\"_ZN5clang4ento12StoreManagerD0Ev\", \"clang::ento::StoreManager::~StoreManager()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS3_4SValEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, clang::ento::SVal> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento15CompoundValData7ProfileERN4llvm16FoldingSetNodeIDENS_8QualTypeENS2_13ImmutableListINS0_4SValEEE\", \"clang::ento::CompoundValData::Profile(llvm::FoldingSetNodeID&, clang::QualType, llvm::ImmutableList<clang::ento::SVal>)\"},\n    {\"_ZN5clang4ento19LazyCompoundValData7ProfileERN4llvm16FoldingSetNodeIDEPKvPKNS0_11TypedRegionE\", \"clang::ento::LazyCompoundValData::Profile(llvm::FoldingSetNodeID&, void const*, clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento17BasicValueFactoryD1Ev\", \"clang::ento::BasicValueFactory::~BasicValueFactory()\"},\n    {\"_ZN5clang4ento17BasicValueFactoryD2Ev\", \"clang::ento::BasicValueFactory::~BasicValueFactory()\"},\n    {\"_ZN5clang4ento17BasicValueFactory8getValueERKN4llvm6APSIntE\", \"clang::ento::BasicValueFactory::getValue(llvm::APSInt const&)\"},\n    {\"_ZN5clang4ento17BasicValueFactory8getValueERKN4llvm5APIntEb\", \"clang::ento::BasicValueFactory::getValue(llvm::APInt const&, bool)\"},\n    {\"_ZN5clang4ento17BasicValueFactory8getValueEyjb\", \"clang::ento::BasicValueFactory::getValue(unsigned long long, unsigned int, bool)\"},\n    {\"_ZN5clang4ento17BasicValueFactory8getValueEyNS_8QualTypeE\", \"clang::ento::BasicValueFactory::getValue(unsigned long long, clang::QualType)\"},\n    {\"_ZN5clang4ento17BasicValueFactory18getCompoundValDataENS_8QualTypeEN4llvm13ImmutableListINS0_4SValEEE\", \"clang::ento::BasicValueFactory::getCompoundValData(clang::QualType, llvm::ImmutableList<clang::ento::SVal>)\"},\n    {\"_ZN5clang4ento17BasicValueFactory22getLazyCompoundValDataEPKvPKNS0_11TypedRegionE\", \"clang::ento::BasicValueFactory::getLazyCompoundValData(void const*, clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento17BasicValueFactory10evalAPSIntENS_18BinaryOperatorKindERKN4llvm6APSIntES6_\", \"clang::ento::BasicValueFactory::evalAPSInt(clang::BinaryOperatorKind, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN5clang4ento17BasicValueFactory25getPersistentSValWithDataERKNS0_4SValEm\", \"clang::ento::BasicValueFactory::getPersistentSValWithData(clang::ento::SVal const&, unsigned long)\"},\n    {\"_ZN5clang4ento17BasicValueFactory21getPersistentSValPairERKNS0_4SValES4_\", \"clang::ento::BasicValueFactory::getPersistentSValPair(clang::ento::SVal const&, clang::ento::SVal const&)\"},\n    {\"_ZN5clang4ento17BasicValueFactory17getPersistentSValENS0_4SValE\", \"clang::ento::BasicValueFactory::getPersistentSVal(clang::ento::SVal)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEED1Ev\", \"llvm::FoldingSet<clang::ento::LazyCompoundValData>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento15CompoundValDataEED1Ev\", \"llvm::FoldingSet<clang::ento::CompoundValData>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEED1Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >::~FoldingSet()\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES4_EED1Ev\", \"llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> >::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES4_EED0Ev\", \"llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> >::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEED1Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEED0Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERSC_\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEED1Ev\", \"llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> >::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEED0Ev\", \"llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> >::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEED1Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEED0Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERSC_\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperINS_6APSIntEED1Ev\", \"llvm::FoldingSetNodeWrapper<llvm::APSInt>::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm21FoldingSetNodeWrapperINS_6APSIntEED0Ev\", \"llvm::FoldingSetNodeWrapper<llvm::APSInt>::~FoldingSetNodeWrapper()\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEED1Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEED0Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERSA_\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEED0Ev\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento15CompoundValDataEED0Ev\", \"llvm::FoldingSet<clang::ento::CompoundValData>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento15CompoundValDataEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::CompoundValData>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento15CompoundValDataEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::CompoundValData>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento15CompoundValDataEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::CompoundValData>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEED0Ev\", \"llvm::FoldingSet<clang::ento::LazyCompoundValData>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::LazyCompoundValData>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::LazyCompoundValData>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::LazyCompoundValData>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento12BlockCounter13getNumVisitedEPKNS_17StackFrameContextEj\", \"clang::ento::BlockCounter::getNumVisited(clang::StackFrameContext const*, unsigned int) const\"},\n    {\"_ZN5clang4ento12BlockCounter7FactoryC1ERN4llvm16BumpPtrAllocatorE\", \"clang::ento::BlockCounter::Factory::Factory(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento12BlockCounter7FactoryC2ERN4llvm16BumpPtrAllocatorE\", \"clang::ento::BlockCounter::Factory::Factory(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento12BlockCounter7FactoryD1Ev\", \"clang::ento::BlockCounter::Factory::~Factory()\"},\n    {\"_ZN5clang4ento12BlockCounter7FactoryD2Ev\", \"clang::ento::BlockCounter::Factory::~Factory()\"},\n    {\"_ZN5clang4ento12BlockCounter7Factory14IncrementCountES1_PKNS_17StackFrameContextEj\", \"clang::ento::BlockCounter::Factory::IncrementCount(clang::ento::BlockCounter, clang::StackFrameContext const*, unsigned int)\"},\n    {\"_ZN5clang4ento12BlockCounter7Factory15GetEmptyCounterEv\", \"clang::ento::BlockCounter::Factory::GetEmptyCounter()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::computeDigest()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEEENS_12DenseMapInfoIjEENS8_IS7_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEEESaIS7_EE9push_backERKS7_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >* const&)\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE12add_internalERKSt4pairIS3_jEPNS_11ImutAVLTreeIS4_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::add_internal(std::pair<(anonymous namespace)::CountKey, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE13markImmutableEPNS_11ImutAVLTreeIS4_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE10createNodeEPNS_11ImutAVLTreeIS4_EERKSt4pairIS3_jES8_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*, std::pair<(anonymous namespace)::CountKey, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_18CountKeyEjEEE11balanceTreeEPNS_11ImutAVLTreeIS4_EERKSt4pairIS3_jES8_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*, std::pair<(anonymous namespace)::CountKey, unsigned int> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::CountKey, unsigned int> >*)\"},\n    {\"_ZN5clang4ento18BugReporterVisitorD0Ev\", \"clang::ento::BugReporterVisitor::~BugReporterVisitor()\"},\n    {\"_ZN5clang4ento18BugReporterVisitorD1Ev\", \"clang::ento::BugReporterVisitor::~BugReporterVisitor()\"},\n    {\"_ZN5clang4ento18BugReporterVisitorD2Ev\", \"clang::ento::BugReporterVisitor::~BugReporterVisitor()\"},\n    {\"_ZN5clang4ento18BugReporterContextD0Ev\", \"clang::ento::BugReporterContext::~BugReporterContext()\"},\n    {\"_ZN5clang4ento18BugReporterContextD1Ev\", \"clang::ento::BugReporterContext::~BugReporterContext()\"},\n    {\"_ZN5clang4ento18BugReporterContextD2Ev\", \"clang::ento::BugReporterContext::~BugReporterContext()\"},\n    {\"_ZN5clang4ento18BugReporterContext10addVisitorEPNS0_18BugReporterVisitorE\", \"clang::ento::BugReporterContext::addVisitor(clang::ento::BugReporterVisitor*)\"},\n    {\"_ZN5clang4ento7BugTypeD0Ev\", \"clang::ento::BugType::~BugType()\"},\n    {\"_ZN5clang4ento7BugTypeD1Ev\", \"clang::ento::BugType::~BugType()\"},\n    {\"_ZN5clang4ento7BugTypeD2Ev\", \"clang::ento::BugType::~BugType()\"},\n    {\"_ZN5clang4ento19BugReportEquivClassD1Ev\", \"clang::ento::BugReportEquivClass::~BugReportEquivClass()\"},\n    {\"_ZN5clang4ento7BugType12FlushReportsERNS0_11BugReporterE\", \"clang::ento::BugType::FlushReports(clang::ento::BugReporter&)\"},\n    {\"_ZN5clang4ento9BugReportD0Ev\", \"clang::ento::BugReport::~BugReport()\"},\n    {\"_ZN5clang4ento9BugReportD1Ev\", \"clang::ento::BugReport::~BugReport()\"},\n    {\"_ZN5clang4ento9BugReportD2Ev\", \"clang::ento::BugReport::~BugReport()\"},\n    {\"_ZN5clang4ento15RangedBugReportD0Ev\", \"clang::ento::RangedBugReport::~RangedBugReport()\"},\n    {\"_ZN5clang4ento15RangedBugReportD1Ev\", \"clang::ento::RangedBugReport::~RangedBugReport()\"},\n    {\"_ZN5clang4ento15RangedBugReportD2Ev\", \"clang::ento::RangedBugReport::~RangedBugReport()\"},\n    {\"_ZNK5clang4ento9BugReport7getStmtEv\", \"clang::ento::BugReport::getStmt() const\"},\n    {\"_ZN5clang4ento9BugReport10getEndPathERNS0_18BugReporterContextEPKNS0_12ExplodedNodeE\", \"clang::ento::BugReport::getEndPath(clang::ento::BugReporterContext&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZNK5clang4ento9BugReport9getRangesEv\", \"clang::ento::BugReport::getRanges() const\"},\n    {\"_ZNK5clang4ento9BugReport11getLocationEv\", \"clang::ento::BugReport::getLocation() const\"},\n    {\"_ZN5clang4ento9BugReport9VisitNodeEPKNS0_12ExplodedNodeES4_RNS0_18BugReporterContextE\", \"clang::ento::BugReport::VisitNode(clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, clang::ento::BugReporterContext&)\"},\n    {\"_ZN5clang4ento19BugReportEquivClassD2Ev\", \"clang::ento::BugReportEquivClass::~BugReportEquivClass()\"},\n    {\"_ZN5clang4ento13GRBugReporterD0Ev\", \"clang::ento::GRBugReporter::~GRBugReporter()\"},\n    {\"_ZN5clang4ento13GRBugReporterD1Ev\", \"clang::ento::GRBugReporter::~GRBugReporter()\"},\n    {\"_ZN5clang4ento13GRBugReporterD2Ev\", \"clang::ento::GRBugReporter::~GRBugReporter()\"},\n    {\"_ZN5clang4ento11BugReporterD2Ev\", \"clang::ento::BugReporter::~BugReporter()\"},\n    {\"_ZN5clang4ento15BugReporterDataD0Ev\", \"clang::ento::BugReporterData::~BugReporterData()\"},\n    {\"_ZN5clang4ento15BugReporterDataD1Ev\", \"clang::ento::BugReporterData::~BugReporterData()\"},\n    {\"_ZN5clang4ento15BugReporterDataD2Ev\", \"clang::ento::BugReporterData::~BugReporterData()\"},\n    {\"_ZN5clang4ento13GRBugReporter8getGraphEv\", \"clang::ento::GRBugReporter::getGraph()\"},\n    {\"_ZN5clang4ento13GRBugReporter15getStateManagerEv\", \"clang::ento::GRBugReporter::getStateManager()\"},\n    {\"_ZN5clang4ento11BugReporterD0Ev\", \"clang::ento::BugReporter::~BugReporter()\"},\n    {\"_ZN5clang4ento11BugReporterD1Ev\", \"clang::ento::BugReporter::~BugReporter()\"},\n    {\"_ZN5clang4ento11BugReporter12FlushReportsEv\", \"clang::ento::BugReporter::FlushReports()\"},\n    {\"_ZN5clang4ento11BugReporter11FlushReportERNS0_19BugReportEquivClassE\", \"clang::ento::BugReporter::FlushReport(clang::ento::BugReportEquivClass&)\"},\n    {\"_ZN5clang4ento13GRBugReporter22GeneratePathDiagnosticERNS0_14PathDiagnosticERN4llvm15SmallVectorImplIPNS0_9BugReportEEE\", \"clang::ento::GRBugReporter::GeneratePathDiagnostic(clang::ento::PathDiagnostic&, llvm::SmallVectorImpl<clang::ento::BugReport*>&)\"},\n    {\"_ZN12_GLOBAL__N_121PathDiagnosticBuilderD1Ev\", \"(anonymous namespace)::PathDiagnosticBuilder::~PathDiagnosticBuilder()\"},\n    {\"_ZN5clang4ento11BugReporter8RegisterEPNS0_7BugTypeE\", \"clang::ento::BugReporter::Register(clang::ento::BugType*)\"},\n    {\"_ZN5clang4ento11BugReporter10EmitReportEPNS0_9BugReportE\", \"clang::ento::BugReporter::EmitReport(clang::ento::BugReport*)\"},\n    {\"_ZN5clang4ento11BugReporter15EmitBasicReportEN4llvm9StringRefES3_NS_14SourceLocationEPNS_11SourceRangeEj\", \"clang::ento::BugReporter::EmitBasicReport(llvm::StringRef, llvm::StringRef, clang::SourceLocation, clang::SourceRange*, unsigned int)\"},\n    {\"_ZN5clang4ento11BugReporter15EmitBasicReportEN4llvm9StringRefES3_S3_NS_14SourceLocationEPNS_11SourceRangeEj\", \"clang::ento::BugReporter::EmitBasicReport(llvm::StringRef, llvm::StringRef, llvm::StringRef, clang::SourceLocation, clang::SourceRange*, unsigned int)\"},\n    {\"_ZN4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEED1Ev\", \"llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEED0Ev\", \"llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_112FRIEC_WLItemEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::FRIEC_WLItem>::push_back((anonymous namespace)::FRIEC_WLItem const&)\"},\n    {\"_ZN12_GLOBAL__N_114NodeMapClosureD1Ev\", \"(anonymous namespace)::NodeMapClosure::~NodeMapClosure()\"},\n    {\"_ZN12_GLOBAL__N_121PathDiagnosticBuilderD0Ev\", \"(anonymous namespace)::PathDiagnosticBuilder::~PathDiagnosticBuilder()\"},\n    {\"_ZN12_GLOBAL__N_121PathDiagnosticBuilder15getNodeResolverEv\", \"(anonymous namespace)::PathDiagnosticBuilder::getNodeResolver()\"},\n    {\"_ZN12_GLOBAL__N_114NodeMapClosureD0Ev\", \"(anonymous namespace)::NodeMapClosure::~NodeMapClosure()\"},\n    {\"_ZN12_GLOBAL__N_114NodeMapClosure15getOriginalNodeEPKN5clang4ento12ExplodedNodeE\", \"(anonymous namespace)::NodeMapClosure::getOriginalNode(clang::ento::ExplodedNode const*)\"},\n    {\"_Z11GetNextStmtPKN5clang4ento12ExplodedNodeE\", \"GetNextStmt(clang::ento::ExplodedNode const*)\"},\n    {\"_ZN12_GLOBAL__N_121PathDiagnosticBuilder24getEnclosingStmtLocationEPKN5clang4StmtE\", \"(anonymous namespace)::PathDiagnosticBuilder::getEnclosingStmtLocation(clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_121PathDiagnosticBuilder18ExecutionContinuesERN4llvm18raw_string_ostreamEPKN5clang4ento12ExplodedNodeE\", \"(anonymous namespace)::PathDiagnosticBuilder::ExecutionContinues(llvm::raw_string_ostream&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN12_GLOBAL__N_118ScanNotableSymbolsD1Ev\", \"(anonymous namespace)::ScanNotableSymbols::~ScanNotableSymbols()\"},\n    {\"_ZN12_GLOBAL__N_118ScanNotableSymbolsD0Ev\", \"(anonymous namespace)::ScanNotableSymbols::~ScanNotableSymbols()\"},\n    {\"_ZN12_GLOBAL__N_118ScanNotableSymbols13HandleBindingERN5clang4ento12StoreManagerEPKvPKNS2_9MemRegionENS2_4SValE\", \"(anonymous namespace)::ScanNotableSymbols::HandleBinding(clang::ento::StoreManager&, void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_120NotableSymbolHandlerD1Ev\", \"(anonymous namespace)::NotableSymbolHandler::~NotableSymbolHandler()\"},\n    {\"_ZN12_GLOBAL__N_120NotableSymbolHandlerD0Ev\", \"(anonymous namespace)::NotableSymbolHandler::~NotableSymbolHandler()\"},\n    {\"_ZN12_GLOBAL__N_120NotableSymbolHandler13HandleBindingERN5clang4ento12StoreManagerEPKvPKNS2_9MemRegionENS2_4SValE\", \"(anonymous namespace)::NotableSymbolHandler::HandleBinding(clang::ento::StoreManager&, void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder7addEdgeEN5clang4ento22PathDiagnosticLocationEb\", \"(anonymous namespace)::EdgeBuilder::addEdge(clang::ento::PathDiagnosticLocation, bool)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder10addContextEPKN5clang4StmtE\", \"(anonymous namespace)::EdgeBuilder::addContext(clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder18addExtendedContextEPKN5clang4StmtE\", \"(anonymous namespace)::EdgeBuilder::addExtendedContext(clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder10rawAddEdgeEN5clang4ento22PathDiagnosticLocationE\", \"(anonymous namespace)::EdgeBuilder::rawAddEdge(clang::ento::PathDiagnosticLocation)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder15cleanUpLocationEN5clang4ento22PathDiagnosticLocationEb\", \"(anonymous namespace)::EdgeBuilder::cleanUpLocation(clang::ento::PathDiagnosticLocation, bool)\"},\n    {\"_ZN12_GLOBAL__N_111EdgeBuilder16containsLocationERKN5clang4ento22PathDiagnosticLocationES5_\", \"(anonymous namespace)::EdgeBuilder::containsLocation(clang::ento::PathDiagnosticLocation const&, clang::ento::PathDiagnosticLocation const&)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_115ContextLocationESaIS1_EE9push_backERKS1_\", \"std::vector<(anonymous namespace)::ContextLocation, std::allocator<(anonymous namespace)::ContextLocation> >::push_back((anonymous namespace)::ContextLocation const&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEED1Ev\", \"llvm::FoldingSet<clang::ento::BugReporterVisitor>::~FoldingSet()\"},\n    {\"_ZN5clang4ento14PathDiagnostic7addMetaEN4llvm9StringRefE\", \"clang::ento::PathDiagnostic::addMeta(llvm::StringRef)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE3addEPNS_11ImutAVLTreeIS6_EEPKS4_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::add(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, clang::ento::BugType const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS6_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >::computeDigest()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS6_EERNS_26ImutAVLTreeInOrderIteratorIS6_EESD_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<clang::ento::BugType*> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<clang::ento::BugType*> >&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_17ImutContainerInfoIPN5clang4ento7BugTypeEEEEESaIS9_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS9_SB_EERKS9_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >**, std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*> > >, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >* const&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutContainerInfo<clang::ento::BugType*> >::operator++()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEEENS_12DenseMapInfoIjEENSA_IS9_EEE16InsertIntoBucketERKjRKS9_PSt4pairIjS9_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEEENS_12DenseMapInfoIjEENSA_IS9_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE12add_internalEPKS4_PNS_11ImutAVLTreeIS6_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::add_internal(clang::ento::BugType const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE13markImmutableEPNS_11ImutAVLTreeIS6_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::markImmutable(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE10createNodeEPNS_11ImutAVLTreeIS6_EEPKS4_SA_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::createNode(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, clang::ento::BugType const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEE11balanceTreeEPNS_11ImutAVLTreeIS6_EEPKS4_SA_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::balanceTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*, clang::ento::BugType const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::BugType*> >*)\"},\n    {\"_ZN4llvm20ImmutableListFactoryIPN5clang4ento18BugReporterVisitorEE6concatERKS4_NS_13ImmutableListIS4_EE\", \"llvm::ImmutableListFactory<clang::ento::BugReporterVisitor*>::concat(clang::ento::BugReporterVisitor* const&, llvm::ImmutableList<clang::ento::BugReporterVisitor*>)\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEED1Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEED0Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERSB_\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang11SourceRangeELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::SourceRange, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4ento13DiagBugReportD1Ev\", \"clang::ento::DiagBugReport::~DiagBugReport()\"},\n    {\"_ZN5clang4ento13DiagBugReportD0Ev\", \"clang::ento::DiagBugReport::~DiagBugReport()\"},\n    {\"_ZNK5clang4ento13DiagBugReport11getLocationEv\", \"clang::ento::DiagBugReport::getLocation() const\"},\n    {\"_ZNSt5dequeISsSaISsEE16_M_push_back_auxERKSs\", \"std::deque<std::string, std::allocator<std::string> >::_M_push_back_aux(std::string const&)\"},\n    {\"_ZNSt5dequeISsSaISsEE17_M_reallocate_mapEmb\", \"std::deque<std::string, std::allocator<std::string> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEjNS_12DenseMapInfoIS5_EENS6_IjEEE16InsertIntoBucketERKS5_RKjPSt4pairIS5_jE\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, unsigned int, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::ento::ExplodedNode const* const&, unsigned int const&, std::pair<clang::ento::ExplodedNode const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEjNS_12DenseMapInfoIS5_EENS6_IjEEE4growEj\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, unsigned int, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento9BugReport12NodeResolverD1Ev\", \"clang::ento::BugReport::NodeResolver::~NodeResolver()\"},\n    {\"_ZN5clang4ento9BugReport12NodeResolverD0Ev\", \"clang::ento::BugReport::NodeResolver::~NodeResolver()\"},\n    {\"_ZN5clang4ento14PathDiagnostic10push_frontEPNS0_19PathDiagnosticPieceE\", \"clang::ento::PathDiagnostic::push_front(clang::ento::PathDiagnosticPiece*)\"},\n    {\"_ZNSt6vectorISt4pairIPN5clang4ento24PathDiagnosticMacroPieceENS1_14SourceLocationEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation>, std::allocator<std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation>*, std::vector<std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation>, std::allocator<std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation> > > >, std::pair<clang::ento::PathDiagnosticMacroPiece*, clang::SourceLocation> const&)\"},\n    {\"_ZN5clang4ento24PathDiagnosticMacroPieceC2ERKNS0_22PathDiagnosticLocationE\", \"clang::ento::PathDiagnosticMacroPiece::PathDiagnosticMacroPiece(clang::ento::PathDiagnosticLocation const&)\"},\n    {\"_ZNK5clang4ento23PathDiagnosticSpotPiece11getLocationEv\", \"clang::ento::PathDiagnosticSpotPiece::getLocation() const\"},\n    {\"_ZN5clang4ento24PathDiagnosticMacroPiece16flattenLocationsEv\", \"clang::ento::PathDiagnosticMacroPiece::flattenLocations()\"},\n    {\"_ZN5clang4ento23PathDiagnosticSpotPiece16flattenLocationsEv\", \"clang::ento::PathDiagnosticSpotPiece::flattenLocations()\"},\n    {\"_ZN5clang4ento23PathDiagnosticSpotPieceD1Ev\", \"clang::ento::PathDiagnosticSpotPiece::~PathDiagnosticSpotPiece()\"},\n    {\"_ZN5clang4ento23PathDiagnosticSpotPieceD0Ev\", \"clang::ento::PathDiagnosticSpotPiece::~PathDiagnosticSpotPiece()\"},\n    {\"_ZNSt6vectorIPN5clang4ento19PathDiagnosticPieceESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::ento::PathDiagnosticPiece*, std::allocator<clang::ento::PathDiagnosticPiece*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnosticPiece**, std::vector<clang::ento::PathDiagnosticPiece*, std::allocator<clang::ento::PathDiagnosticPiece*> > >, clang::ento::PathDiagnosticPiece* const&)\"},\n    {\"_ZNK5clang4ento30PathDiagnosticControlFlowPiece11getLocationEv\", \"clang::ento::PathDiagnosticControlFlowPiece::getLocation() const\"},\n    {\"_ZN5clang4ento30PathDiagnosticControlFlowPiece16flattenLocationsEv\", \"clang::ento::PathDiagnosticControlFlowPiece::flattenLocations()\"},\n    {\"_ZNSt6vectorIN5clang4ento26PathDiagnosticLocationPairESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::ento::PathDiagnosticLocationPair, std::allocator<clang::ento::PathDiagnosticLocationPair> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnosticLocationPair*, std::vector<clang::ento::PathDiagnosticLocationPair, std::allocator<clang::ento::PathDiagnosticLocationPair> > >, clang::ento::PathDiagnosticLocationPair const&)\"},\n    {\"_ZNSt5dequeIPN5clang4ento19PathDiagnosticPieceESaIS3_EE17_M_reallocate_mapEmb\", \"std::deque<clang::ento::PathDiagnosticPiece*, std::allocator<clang::ento::PathDiagnosticPiece*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt5dequeIPN5clang4ento19PathDiagnosticPieceESaIS3_EE9push_backERKS3_\", \"std::deque<clang::ento::PathDiagnosticPiece*, std::allocator<clang::ento::PathDiagnosticPiece*> >::push_back(clang::ento::PathDiagnosticPiece* const&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEED0Ev\", \"llvm::FoldingSet<clang::ento::BugReporterVisitor>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::BugReporterVisitor>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::BugReporterVisitor>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::BugReporterVisitor>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeES5_NS_12DenseMapInfoIS5_EES7_E16InsertIntoBucketERKS5_SA_PSt4pairIS5_S5_E\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<clang::ento::ExplodedNode const*> >::InsertIntoBucket(clang::ento::ExplodedNode const* const&, clang::ento::ExplodedNode const* const&, std::pair<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeES5_NS_12DenseMapInfoIS5_EES7_E4growEj\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<clang::ento::ExplodedNode const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKvjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<void const*, unsigned int, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(void const* const&, unsigned int const&, std::pair<void const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKvjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<void const*, unsigned int, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeIPKN5clang4ento12ExplodedNodeESaIS4_EE9push_backERKS4_\", \"std::deque<clang::ento::ExplodedNode const*, std::allocator<clang::ento::ExplodedNode const*> >::push_back(clang::ento::ExplodedNode const* const&)\"},\n    {\"_ZNSt5dequeIPKN5clang4ento12ExplodedNodeESaIS4_EE17_M_reallocate_mapEmb\", \"std::deque<clang::ento::ExplodedNode const*, std::allocator<clang::ento::ExplodedNode const*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIPKN5clang4ento12ExplodedNodeESaIS4_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::ento::ExplodedNode const*, std::allocator<clang::ento::ExplodedNode const*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeIPKN5clang4ento12ExplodedNodeESaIS4_EEC2ERKS6_\", \"std::deque<clang::ento::ExplodedNode const*, std::allocator<clang::ento::ExplodedNode const*> >::deque(std::deque<clang::ento::ExplodedNode const*, std::allocator<clang::ento::ExplodedNode const*> > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPN5clang4ento7BugTypeEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::BugType*> >::~ImutAVLFactory()\"},\n    {\"_ZNSt6vectorIN5clang11SourceRangeESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::SourceRange, std::allocator<clang::SourceRange> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::SourceRange*, std::vector<clang::SourceRange, std::allocator<clang::SourceRange> > >, clang::SourceRange const&)\"},\n    {\"_ZN5clang4ento11bugreporter12GetDerefExprEPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::GetDerefExpr(clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter12GetDenomExprEPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::GetDenomExpr(clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter13GetCalleeExprEPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::GetCalleeExpr(clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter13GetRetValExprEPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::GetRetValExpr(clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter29registerTrackNullOrUndefValueERNS0_18BugReporterContextEPKvPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::registerTrackNullOrUndefValue(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter21registerFindLastStoreERNS0_18BugReporterContextEPKvPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::registerFindLastStore(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN5clang4ento11bugreporter26registerNilReceiverVisitorERNS0_18BugReporterContextE\", \"clang::ento::bugreporter::registerNilReceiverVisitor(clang::ento::BugReporterContext&)\"},\n    {\"_ZN5clang4ento11bugreporter25registerVarDeclsLastStoreERNS0_18BugReporterContextEPKvPKNS0_12ExplodedNodeE\", \"clang::ento::bugreporter::registerVarDeclsLastStore(clang::ento::BugReporterContext&, void const*, clang::ento::ExplodedNode const*)\"},\n    {\"_ZN12_GLOBAL__N_118NilReceiverVisitorD1Ev\", \"(anonymous namespace)::NilReceiverVisitor::~NilReceiverVisitor()\"},\n    {\"_ZN12_GLOBAL__N_118NilReceiverVisitorD0Ev\", \"(anonymous namespace)::NilReceiverVisitor::~NilReceiverVisitor()\"},\n    {\"_ZN12_GLOBAL__N_118NilReceiverVisitor9VisitNodeEPKN5clang4ento12ExplodedNodeES5_RNS2_18BugReporterContextE\", \"(anonymous namespace)::NilReceiverVisitor::VisitNode(clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, clang::ento::BugReporterContext&)\"},\n    {\"_ZNK12_GLOBAL__N_118NilReceiverVisitor7ProfileERN4llvm16FoldingSetNodeIDE\", \"(anonymous namespace)::NilReceiverVisitor::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN12_GLOBAL__N_122FindLastStoreBRVisitorD1Ev\", \"(anonymous namespace)::FindLastStoreBRVisitor::~FindLastStoreBRVisitor()\"},\n    {\"_ZN12_GLOBAL__N_122FindLastStoreBRVisitorD0Ev\", \"(anonymous namespace)::FindLastStoreBRVisitor::~FindLastStoreBRVisitor()\"},\n    {\"_ZN12_GLOBAL__N_122FindLastStoreBRVisitor9VisitNodeEPKN5clang4ento12ExplodedNodeES5_RNS2_18BugReporterContextE\", \"(anonymous namespace)::FindLastStoreBRVisitor::VisitNode(clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, clang::ento::BugReporterContext&)\"},\n    {\"_ZNK12_GLOBAL__N_122FindLastStoreBRVisitor7ProfileERN4llvm16FoldingSetNodeIDE\", \"(anonymous namespace)::FindLastStoreBRVisitor::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN12_GLOBAL__N_124TrackConstraintBRVisitorD1Ev\", \"(anonymous namespace)::TrackConstraintBRVisitor::~TrackConstraintBRVisitor()\"},\n    {\"_ZN12_GLOBAL__N_124TrackConstraintBRVisitorD0Ev\", \"(anonymous namespace)::TrackConstraintBRVisitor::~TrackConstraintBRVisitor()\"},\n    {\"_ZN12_GLOBAL__N_124TrackConstraintBRVisitor9VisitNodeEPKN5clang4ento12ExplodedNodeES5_RNS2_18BugReporterContextE\", \"(anonymous namespace)::TrackConstraintBRVisitor::VisitNode(clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, clang::ento::BugReporterContext&)\"},\n    {\"_ZNK12_GLOBAL__N_124TrackConstraintBRVisitor7ProfileERN4llvm16FoldingSetNodeIDE\", \"(anonymous namespace)::TrackConstraintBRVisitor::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNSt5dequeIPKN5clang4StmtESaIS3_EE9push_backERKS3_\", \"std::deque<clang::Stmt const*, std::allocator<clang::Stmt const*> >::push_back(clang::Stmt const* const&)\"},\n    {\"_ZNSt5dequeIPKN5clang4StmtESaIS3_EE17_M_reallocate_mapEmb\", \"std::deque<clang::Stmt const*, std::allocator<clang::Stmt const*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIPKN5clang4StmtESaIS3_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::Stmt const*, std::allocator<clang::Stmt const*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZN5clang4ento16MakeCFRefCountTFERNS_10ASTContextEbRKNS_11LangOptionsE\", \"clang::ento::MakeCFRefCountTF(clang::ASTContext&, bool, clang::LangOptions const&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCountD1Ev\", \"(anonymous namespace)::CFRefCount::~CFRefCount()\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCountD0Ev\", \"(anonymous namespace)::CFRefCount::~CFRefCount()\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount16RegisterPrintersERSt6vectorIPN5clang4ento7GRState7PrinterESaIS6_EE\", \"(anonymous namespace)::CFRefCount::RegisterPrinters(std::vector<clang::ento::GRState::Printer*, std::allocator<clang::ento::GRState::Printer*> >&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount14RegisterChecksERN5clang4ento10ExprEngineE\", \"(anonymous namespace)::CFRefCount::RegisterChecks(clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount8evalCallERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_8CallExprENS2_4SValEPNS2_12ExplodedNodeE\", \"(anonymous namespace)::CFRefCount::evalCall(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::CallExpr const*, clang::ento::SVal, clang::ento::ExplodedNode*)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount15evalObjCMessageERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderENS2_11ObjCMessageEPNS2_12ExplodedNodeEPKNS2_7GRStateE\", \"(anonymous namespace)::CFRefCount::evalObjCMessage(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ento::ObjCMessage, clang::ento::ExplodedNode*, clang::ento::GRState const*)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount8evalBindERN5clang4ento18StmtNodeBuilderRefENS2_4SValES5_\", \"(anonymous namespace)::CFRefCount::evalBind(clang::ento::StmtNodeBuilderRef&, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount11evalEndPathERN5clang4ento10ExprEngineERNS2_24EndOfFunctionNodeBuilderE\", \"(anonymous namespace)::CFRefCount::evalEndPath(clang::ento::ExprEngine&, clang::ento::EndOfFunctionNodeBuilder&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount15evalDeadSymbolsERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPNS2_12ExplodedNodeEPKNS2_7GRStateERNS2_12SymbolReaperE\", \"(anonymous namespace)::CFRefCount::evalDeadSymbols(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount10evalReturnERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_10ReturnStmtEPNS2_12ExplodedNodeE\", \"(anonymous namespace)::CFRefCount::evalReturn(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ReturnStmt const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount10evalAssumeEPKN5clang4ento7GRStateENS2_4SValEb\", \"(anonymous namespace)::CFRefCount::evalAssume(clang::ento::GRState const*, clang::ento::SVal, bool)\"},\n    {\"_ZN4llvm12ImmutableMapIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValENS_16ImutKeyValueInfoIS5_S7_EEE7Factory6removeESA_RKS5_\", \"llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::Factory::remove(llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >, clang::ento::SymbolData const* const&)\"},\n    {\"_ZNK5clang4ento7GRState3setIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS3_16ImutKeyValueInfoIS7_S9_EEEEEEPKS1_NS0_12GRStateTraitIT_E9data_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >(clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::data_type) const\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::operator++()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEEENS_12DenseMapInfoIjEENSD_ISC_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEEESaISC_EE9push_backERKSC_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE15remove_internalERKS6_PNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::remove_internal(clang::ento::SymbolData const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE13markImmutableEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE11balanceTreeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE10createNodeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE16removeMinBindingEPNS_11ImutAVLTreeIS9_EERSD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS2_16ImutKeyValueInfoIS6_S8_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS2_16ImutKeyValueInfoIS6_S8_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::DeleteContext(void*)\"},\n    {\"_ZNK5clang4ento7GRState3setIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS3_16ImutKeyValueInfoIS7_S9_EEEEEEPKS1_NS0_12GRStateTraitIT_E8key_typeENSH_10value_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >(clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::key_type, clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::value_type) const\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount23HandleAutoreleaseCountsEPKN5clang4ento7GRStateENS_26GenericNodeBuilderRefCountEPNS2_12ExplodedNodeERNS2_10ExprEngineEPKNS2_10SymbolDataENS_6RefValERb\", \"(anonymous namespace)::CFRefCount::HandleAutoreleaseCounts(clang::ento::GRState const*, (anonymous namespace)::GenericNodeBuilderRefCount, clang::ento::ExplodedNode*, clang::ento::ExprEngine&, clang::ento::SymbolData const*, (anonymous namespace)::RefVal, bool&)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager16getMethodSummaryEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::RetainSummaryManager::getMethodSummary(clang::ObjCMethodDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_115CFRefLeakReportC1ERNS_8CFRefBugERKNS_10CFRefCountEPN5clang4ento12ExplodedNodeEPKNS7_10SymbolDataERNS7_10ExprEngineE\", \"(anonymous namespace)::CFRefLeakReport::CFRefLeakReport((anonymous namespace)::CFRefBug&, (anonymous namespace)::CFRefCount const&, clang::ento::ExplodedNode*, clang::ento::SymbolData const*, clang::ento::ExprEngine&)\"},\n    {\"_ZN12_GLOBAL__N_111CFRefReportD1Ev\", \"(anonymous namespace)::CFRefReport::~CFRefReport()\"},\n    {\"_ZN12_GLOBAL__N_111CFRefReportD0Ev\", \"(anonymous namespace)::CFRefReport::~CFRefReport()\"},\n    {\"_ZN12_GLOBAL__N_111CFRefReport9VisitNodeEPKN5clang4ento12ExplodedNodeES5_RNS2_18BugReporterContextE\", \"(anonymous namespace)::CFRefReport::VisitNode(clang::ento::ExplodedNode const*, clang::ento::ExplodedNode const*, clang::ento::BugReporterContext&)\"},\n    {\"_ZN12_GLOBAL__N_111CFRefReport23getExtraDescriptiveTextEv\", \"(anonymous namespace)::CFRefReport::getExtraDescriptiveText()\"},\n    {\"_ZN12_GLOBAL__N_111CFRefReport10getEndPathERN5clang4ento18BugReporterContextEPKNS2_12ExplodedNodeE\", \"(anonymous namespace)::CFRefReport::getEndPath(clang::ento::BugReporterContext&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZNK12_GLOBAL__N_111CFRefReport9getRangesEv\", \"(anonymous namespace)::CFRefReport::getRanges() const\"},\n    {\"_Z17GetAllocationSiteRN5clang4ento14GRStateManagerEPKNS0_12ExplodedNodeEPKNS0_10SymbolDataE\", \"GetAllocationSite(clang::ento::GRStateManager&, clang::ento::ExplodedNode const*, clang::ento::SymbolData const*)\"},\n    {\"_ZN12_GLOBAL__N_115CFRefLeakReportD1Ev\", \"(anonymous namespace)::CFRefLeakReport::~CFRefLeakReport()\"},\n    {\"_ZN12_GLOBAL__N_115CFRefLeakReportD0Ev\", \"(anonymous namespace)::CFRefLeakReport::~CFRefLeakReport()\"},\n    {\"_ZN12_GLOBAL__N_115CFRefLeakReport10getEndPathERN5clang4ento18BugReporterContextEPKNS2_12ExplodedNodeE\", \"(anonymous namespace)::CFRefLeakReport::getEndPath(clang::ento::BugReporterContext&, clang::ento::ExplodedNode const*)\"},\n    {\"_ZNK12_GLOBAL__N_115CFRefLeakReport11getLocationEv\", \"(anonymous namespace)::CFRefLeakReport::getLocation() const\"},\n    {\"_ZN12_GLOBAL__N_117FindUniqueBindingD1Ev\", \"(anonymous namespace)::FindUniqueBinding::~FindUniqueBinding()\"},\n    {\"_ZN12_GLOBAL__N_117FindUniqueBindingD0Ev\", \"(anonymous namespace)::FindUniqueBinding::~FindUniqueBinding()\"},\n    {\"_ZN12_GLOBAL__N_117FindUniqueBinding13HandleBindingERN5clang4ento12StoreManagerEPKvPKNS2_9MemRegionENS2_4SValE\", \"(anonymous namespace)::FindUniqueBinding::HandleBinding(clang::ento::StoreManager&, void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager24getInstanceMethodSummaryEN5clang8SelectorEPNS1_14IdentifierInfoEPKNS1_17ObjCInterfaceDeclEPKNS1_14ObjCMethodDeclENS1_8QualTypeE\", \"(anonymous namespace)::RetainSummaryManager::getInstanceMethodSummary(clang::Selector, clang::IdentifierInfo*, clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager21getClassMethodSummaryEN5clang8SelectorEPNS1_14IdentifierInfoEPKNS1_17ObjCInterfaceDeclEPKNS1_14ObjCMethodDeclENS1_8QualTypeE\", \"(anonymous namespace)::RetainSummaryManager::getClassMethodSummary(clang::Selector, clang::IdentifierInfo*, clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_116ObjCSummaryCache4findEPKN5clang17ObjCInterfaceDeclEPNS1_14IdentifierInfoENS1_8SelectorE\", \"(anonymous namespace)::ObjCSummaryCache::find(clang::ObjCInterfaceDecl const*, clang::IdentifierInfo*, clang::Selector)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager22getCommonMethodSummaryEPKN5clang14ObjCMethodDeclENS1_8SelectorENS1_8QualTypeE\", \"(anonymous namespace)::RetainSummaryManager::getCommonMethodSummary(clang::ObjCMethodDecl const*, clang::Selector, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager28updateSummaryFromAnnotationsERNS_13RetainSummaryEPKN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::RetainSummaryManager::updateSummaryFromAnnotations((anonymous namespace)::RetainSummary&, clang::ObjCMethodDecl const*)\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_114ObjCSummaryKeyEPNS1_13RetainSummaryENS_12DenseMapInfoIS2_EENS5_IS4_EEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::ObjCSummaryKey, (anonymous namespace)::RetainSummary*, llvm::DenseMapInfo<(anonymous namespace)::ObjCSummaryKey>, llvm::DenseMapInfo<(anonymous namespace)::RetainSummary*> >::operator[]((anonymous namespace)::ObjCSummaryKey const&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_114ObjCSummaryKeyEPNS1_13RetainSummaryENS_12DenseMapInfoIS2_EENS5_IS4_EEE15LookupBucketForERKS2_RPSt4pairIS2_S4_E\", \"llvm::DenseMap<(anonymous namespace)::ObjCSummaryKey, (anonymous namespace)::RetainSummary*, llvm::DenseMapInfo<(anonymous namespace)::ObjCSummaryKey>, llvm::DenseMapInfo<(anonymous namespace)::RetainSummary*> >::LookupBucketFor((anonymous namespace)::ObjCSummaryKey const&, std::pair<(anonymous namespace)::ObjCSummaryKey, (anonymous namespace)::RetainSummary*>*&) const\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_16RefValEEEE12add_internalERKSt4pairIS6_S8_EPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >::add_internal(std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> >*)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount17HandleSymbolDeathEPKN5clang4ento7GRStateEPKNS2_10SymbolDataENS_6RefValERN4llvm15SmallVectorImplIS8_EE\", \"(anonymous namespace)::CFRefCount::HandleSymbolDeath(clang::ento::GRState const*, clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::SmallVectorImpl<clang::ento::SymbolData const*>&)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount12ProcessLeaksEPKN5clang4ento7GRStateERN4llvm15SmallVectorImplIPKNS2_10SymbolDataEEERNS_26GenericNodeBuilderRefCountERNS2_10ExprEngineEPNS2_12ExplodedNodeE\", \"(anonymous namespace)::CFRefCount::ProcessLeaks(clang::ento::GRState const*, llvm::SmallVectorImpl<clang::ento::SymbolData const*>&, (anonymous namespace)::GenericNodeBuilderRefCount&, clang::ento::ExprEngine&, clang::ento::ExplodedNode*)\"},\n    {\"_ZNK5clang4ento7GRState6removeIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS3_16ImutKeyValueInfoIS7_S9_EEEEEEPKS1_NS0_12GRStateTraitIT_E8key_typeE\", \"clang::ento::GRState const* clang::ento::GRState::remove<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >(clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::key_type) const\"},\n    {\"_ZN12_GLOBAL__N_120StopTrackingCallbackD1Ev\", \"(anonymous namespace)::StopTrackingCallback::~StopTrackingCallback()\"},\n    {\"_ZN12_GLOBAL__N_120StopTrackingCallback11VisitSymbolEPKN5clang4ento10SymbolDataE\", \"(anonymous namespace)::StopTrackingCallback::VisitSymbol(clang::ento::SymbolData const*)\"},\n    {\"_ZN12_GLOBAL__N_120StopTrackingCallbackD0Ev\", \"(anonymous namespace)::StopTrackingCallback::~StopTrackingCallback()\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount11evalSummaryERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_4ExprERKNS2_17CallOrObjCMessageENS_16InstanceReceiverERKNS_13RetainSummaryEPKNS2_9MemRegionEPNS2_12ExplodedNodeEPKNS2_7GRStateE\", \"(anonymous namespace)::CFRefCount::evalSummary(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::Expr const*, clang::ento::CallOrObjCMessage const&, (anonymous namespace)::InstanceReceiver, (anonymous namespace)::RetainSummary const&, clang::ento::MemRegion const*, clang::ento::ExplodedNode*, clang::ento::GRState const*)\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount6UpdateEPKN5clang4ento7GRStateEPKNS2_10SymbolDataENS_6RefValE9ArgEffectRNS9_4KindE\", \"(anonymous namespace)::CFRefCount::Update(clang::ento::GRState const*, clang::ento::SymbolData const*, (anonymous namespace)::RefVal, ArgEffect, (anonymous namespace)::RefVal::Kind&)\"},\n    {\"_ZN12_GLOBAL__N_116InstanceReceiver20getSValAsScalarOrLocEPKN5clang4ento7GRStateE\", \"(anonymous namespace)::InstanceReceiver::getSValAsScalarOrLoc(clang::ento::GRState const*)\"},\n    {\"_Z13GetReturnTypePKN5clang4ExprERNS_10ASTContextE\", \"GetReturnType(clang::Expr const*, clang::ASTContext&)\"},\n    {\"_ZNK5clang4ento7GRState3getIN12_GLOBAL__N_123AutoreleasePoolContentsEEENS0_12GRStateTraitIT_E11lookup_typeENS7_8key_typeE\", \"clang::ento::GRStateTrait<(anonymous namespace)::AutoreleasePoolContents>::lookup_type clang::ento::GRState::get<(anonymous namespace)::AutoreleasePoolContents>(clang::ento::GRStateTrait<(anonymous namespace)::AutoreleasePoolContents>::key_type) const\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager15getUnarySummaryEPKN5clang12FunctionTypeENS0_13UnaryFuncKindE\", \"(anonymous namespace)::RetainSummaryManager::getUnarySummary(clang::FunctionType const*, (anonymous namespace)::RetainSummaryManager::UnaryFuncKind)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager25getCFCreateGetRuleSummaryEPKN5clang12FunctionDeclEN4llvm9StringRefE\", \"(anonymous namespace)::RetainSummaryManager::getCFCreateGetRuleSummary(clang::FunctionDecl const*, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_120RetainReleaseCheckerD1Ev\", \"(anonymous namespace)::RetainReleaseChecker::~RetainReleaseChecker()\"},\n    {\"_ZN12_GLOBAL__N_120RetainReleaseCheckerD0Ev\", \"(anonymous namespace)::RetainReleaseChecker::~RetainReleaseChecker()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120RetainReleaseCheckerEE9_PreVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::RetainReleaseChecker>::_PreVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120RetainReleaseCheckerEE10_PostVisitERNS0_14CheckerContextEPKNS_4StmtE\", \"clang::ento::CheckerVisitor<(anonymous namespace)::RetainReleaseChecker>::_PostVisit(clang::ento::CheckerContext&, clang::Stmt const*)\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120RetainReleaseCheckerEED1Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::RetainReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120RetainReleaseCheckerEED0Ev\", \"clang::ento::CheckerVisitor<(anonymous namespace)::RetainReleaseChecker>::~CheckerVisitor()\"},\n    {\"_ZN12_GLOBAL__N_118LeakWithinFunctionD1Ev\", \"(anonymous namespace)::LeakWithinFunction::~LeakWithinFunction()\"},\n    {\"_ZN12_GLOBAL__N_118LeakWithinFunctionD0Ev\", \"(anonymous namespace)::LeakWithinFunction::~LeakWithinFunction()\"},\n    {\"_ZNK12_GLOBAL__N_14Leak14getDescriptionEv\", \"(anonymous namespace)::Leak::getDescription() const\"},\n    {\"_ZNK12_GLOBAL__N_14Leak6isLeakEv\", \"(anonymous namespace)::Leak::isLeak() const\"},\n    {\"_ZN12_GLOBAL__N_14LeakD1Ev\", \"(anonymous namespace)::Leak::~Leak()\"},\n    {\"_ZN12_GLOBAL__N_14LeakD0Ev\", \"(anonymous namespace)::Leak::~Leak()\"},\n    {\"_ZN12_GLOBAL__N_18CFRefBugD1Ev\", \"(anonymous namespace)::CFRefBug::~CFRefBug()\"},\n    {\"_ZN12_GLOBAL__N_18CFRefBugD0Ev\", \"(anonymous namespace)::CFRefBug::~CFRefBug()\"},\n    {\"_ZNK12_GLOBAL__N_18CFRefBug6isLeakEv\", \"(anonymous namespace)::CFRefBug::isLeak() const\"},\n    {\"_ZN12_GLOBAL__N_112LeakAtReturnD1Ev\", \"(anonymous namespace)::LeakAtReturn::~LeakAtReturn()\"},\n    {\"_ZN12_GLOBAL__N_112LeakAtReturnD0Ev\", \"(anonymous namespace)::LeakAtReturn::~LeakAtReturn()\"},\n    {\"_ZN12_GLOBAL__N_124ReturnedNotOwnedForOwnedD1Ev\", \"(anonymous namespace)::ReturnedNotOwnedForOwned::~ReturnedNotOwnedForOwned()\"},\n    {\"_ZN12_GLOBAL__N_124ReturnedNotOwnedForOwnedD0Ev\", \"(anonymous namespace)::ReturnedNotOwnedForOwned::~ReturnedNotOwnedForOwned()\"},\n    {\"_ZNK12_GLOBAL__N_124ReturnedNotOwnedForOwned14getDescriptionEv\", \"(anonymous namespace)::ReturnedNotOwnedForOwned::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_115OverAutoreleaseD1Ev\", \"(anonymous namespace)::OverAutorelease::~OverAutorelease()\"},\n    {\"_ZN12_GLOBAL__N_115OverAutoreleaseD0Ev\", \"(anonymous namespace)::OverAutorelease::~OverAutorelease()\"},\n    {\"_ZNK12_GLOBAL__N_115OverAutorelease14getDescriptionEv\", \"(anonymous namespace)::OverAutorelease::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_115DeallocNotOwnedD1Ev\", \"(anonymous namespace)::DeallocNotOwned::~DeallocNotOwned()\"},\n    {\"_ZN12_GLOBAL__N_115DeallocNotOwnedD0Ev\", \"(anonymous namespace)::DeallocNotOwned::~DeallocNotOwned()\"},\n    {\"_ZNK12_GLOBAL__N_115DeallocNotOwned14getDescriptionEv\", \"(anonymous namespace)::DeallocNotOwned::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_19DeallocGCD1Ev\", \"(anonymous namespace)::DeallocGC::~DeallocGC()\"},\n    {\"_ZN12_GLOBAL__N_19DeallocGCD0Ev\", \"(anonymous namespace)::DeallocGC::~DeallocGC()\"},\n    {\"_ZNK12_GLOBAL__N_19DeallocGC14getDescriptionEv\", \"(anonymous namespace)::DeallocGC::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_110BadReleaseD1Ev\", \"(anonymous namespace)::BadRelease::~BadRelease()\"},\n    {\"_ZN12_GLOBAL__N_110BadReleaseD0Ev\", \"(anonymous namespace)::BadRelease::~BadRelease()\"},\n    {\"_ZNK12_GLOBAL__N_110BadRelease14getDescriptionEv\", \"(anonymous namespace)::BadRelease::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_115UseAfterReleaseD1Ev\", \"(anonymous namespace)::UseAfterRelease::~UseAfterRelease()\"},\n    {\"_ZN12_GLOBAL__N_115UseAfterReleaseD0Ev\", \"(anonymous namespace)::UseAfterRelease::~UseAfterRelease()\"},\n    {\"_ZNK12_GLOBAL__N_115UseAfterRelease14getDescriptionEv\", \"(anonymous namespace)::UseAfterRelease::getDescription() const\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount15BindingsPrinterD1Ev\", \"(anonymous namespace)::CFRefCount::BindingsPrinter::~BindingsPrinter()\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount15BindingsPrinterD0Ev\", \"(anonymous namespace)::CFRefCount::BindingsPrinter::~BindingsPrinter()\"},\n    {\"_ZN12_GLOBAL__N_110CFRefCount15BindingsPrinter5PrintERN4llvm11raw_ostreamEPKN5clang4ento7GRStateEPKcSB_\", \"(anonymous namespace)::CFRefCount::BindingsPrinter::Print(llvm::raw_ostream&, clang::ento::GRState const*, char const*, char const*)\"},\n    {\"_Z9PrintPoolRN4llvm11raw_ostreamEPKN5clang4ento10SymbolDataEPKNS3_7GRStateE\", \"PrintPool(llvm::raw_ostream&, clang::ento::SymbolData const*, clang::ento::GRState const*)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager15addPanicSummaryEPKcz\", \"(anonymous namespace)::RetainSummaryManager::addPanicSummary(char const*, ...)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager18addInstMethSummaryEPKcPNS_13RetainSummaryEz\", \"(anonymous namespace)::RetainSummaryManager::addInstMethSummary(char const*, (anonymous namespace)::RetainSummary*, ...)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager16addMethodSummaryEPN5clang14IdentifierInfoERNS_16ObjCSummaryCacheEPNS_13RetainSummaryEP13__va_list_tag\", \"(anonymous namespace)::RetainSummaryManager::addMethodSummary(clang::IdentifierInfo*, (anonymous namespace)::ObjCSummaryCache&, (anonymous namespace)::RetainSummary*, __va_list_tag*)\"},\n    {\"_ZN12_GLOBAL__N_120RetainSummaryManager17addClsMethSummaryEPN5clang14IdentifierInfoEPNS_13RetainSummaryEz\", \"(anonymous namespace)::RetainSummaryManager::addClsMethSummary(clang::IdentifierInfo*, (anonymous namespace)::RetainSummary*, ...)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_18NSConsumesSelfAttrEEEPT_v\", \"clang::NSConsumesSelfAttr* clang::Decl::getAttr<clang::NSConsumesSelfAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_14NSConsumedAttrEEEPT_v\", \"clang::NSConsumedAttr* clang::Decl::getAttr<clang::NSConsumedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_14CFConsumedAttrEEEPT_v\", \"clang::CFConsumedAttr* clang::Decl::getAttr<clang::CFConsumedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_21NSReturnsRetainedAttrEEEPT_v\", \"clang::NSReturnsRetainedAttr* clang::Decl::getAttr<clang::NSReturnsRetainedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_24NSReturnsNotRetainedAttrEEEPT_v\", \"clang::NSReturnsNotRetainedAttr* clang::Decl::getAttr<clang::NSReturnsNotRetainedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_21CFReturnsRetainedAttrEEEPT_v\", \"clang::CFReturnsRetainedAttr* clang::Decl::getAttr<clang::CFReturnsRetainedAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_24CFReturnsNotRetainedAttrEEEPT_v\", \"clang::CFReturnsNotRetainedAttr* clang::Decl::getAttr<clang::CFReturnsNotRetainedAttr>() const\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIj9ArgEffectEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIj9ArgEffectEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIj9ArgEffectEEEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIj9ArgEffectEEEENS_12DenseMapInfoIjEENS7_IS6_EEE16InsertIntoBucketERKjRKS6_PSt4pairIjS6_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIj9ArgEffectEEEENS_12DenseMapInfoIjEENS7_IS6_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE3addEPNS_11ImutAVLTreeIS3_EERKSt4pairIjS2_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, std::pair<unsigned int, ArgEffect> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS3_EERNS_26ImutAVLTreeInOrderIteratorIS3_EESA_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIj9ArgEffectEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE12add_internalERKSt4pairIjS2_EPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::add_internal(std::pair<unsigned int, ArgEffect> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE13markImmutableEPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE10createNodeEPNS_11ImutAVLTreeIS3_EERKSt4pairIjS2_ES7_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, std::pair<unsigned int, ArgEffect> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEE11balanceTreeEPNS_11ImutAVLTreeIS3_EERKSt4pairIjS2_ES7_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*, std::pair<unsigned int, ArgEffect> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >*)\"},\n    {\"_ZNK5clang4ento17CallOrObjCMessage17getArgSourceRangeEj\", \"clang::ento::CallOrObjCMessage::getArgSourceRange(unsigned int) const\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS3_IS6_jNS2_16ImutKeyValueInfoIS6_jEEEENS7_IS6_S9_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS3_IS6_jNS2_16ImutKeyValueInfoIS6_jEEEENS7_IS6_S9_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS0_12ImmutableMapIS7_jNS2_IS7_jEEEEEEEESaISD_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSD_SF_EERKSD_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS7_jNS2_IS7_jEEEEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE16InsertIntoBucketERKjRKSD_PSt4pairIjSD_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS7_jNS2_IS7_jEEEEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12ImmutableMapIPKN5clang4ento10SymbolDataENS0_IS5_jNS_16ImutKeyValueInfoIS5_jEEEENS6_IS5_S8_EEE7Factory3addESA_RKS5_RKS8_\", \"llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::Factory::add(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >, clang::ento::SymbolData const* const&, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE3addEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE16getCanonicalTreeEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeISA_EERNS_26ImutAVLTreeInOrderIteratorISA_EESH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::operator++()\"},\n    {\"_ZNK4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEE7isEqualERKS8_\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::isEqual(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > const&) const\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE12add_internalERKSt4pairIS6_S9_EPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::add_internal(std::pair<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE13markImmutableEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE10createNodeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataENS_12ImmutableMapIS6_jNS1_IS6_jEEEEEEE11balanceTreeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*, std::pair<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >*)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataENS3_IS6_jNS2_16ImutKeyValueInfoIS6_jEEEENS7_IS6_S9_EEEEE6LookupESB_S6_\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > > >::Lookup(llvm::ImmutableMap<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > > >, clang::ento::SymbolData const*)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm13ImmutableListIPKNS0_10SymbolDataEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableList<clang::ento::SymbolData const*> >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm13ImmutableListIPKNS0_10SymbolDataEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableList<clang::ento::SymbolData const*> >::DeleteContext(void*)\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEED1Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEED0Ev\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERSC_\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm20ImmutableListFactoryIPKN5clang4ento10SymbolDataEE6concatERKS5_NS_13ImmutableListIS5_EE\", \"llvm::ImmutableListFactory<clang::ento::SymbolData const*>::concat(clang::ento::SymbolData const* const&, llvm::ImmutableList<clang::ento::SymbolData const*>)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento10SymbolDataEcNS_12DenseMapInfoIS5_EENS6_IcEEE6insertERKSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::SymbolData const*, char, llvm::DenseMapInfo<clang::ento::SymbolData const*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::ento::SymbolData const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento10SymbolDataEcNS_12DenseMapInfoIS5_EENS6_IcEEE16InsertIntoBucketERKS5_RKcPSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::SymbolData const*, char, llvm::DenseMapInfo<clang::ento::SymbolData const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::ento::SymbolData const* const&, char const&, std::pair<clang::ento::SymbolData const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento10SymbolDataEcNS_12DenseMapInfoIS5_EENS6_IcEEE4growEj\", \"llvm::DenseMap<clang::ento::SymbolData const*, char, llvm::DenseMapInfo<clang::ento::SymbolData const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento7GRState7PrinterD1Ev\", \"clang::ento::GRState::Printer::~Printer()\"},\n    {\"_ZN5clang4ento7GRState7PrinterD0Ev\", \"clang::ento::GRState::Printer::~Printer()\"},\n    {\"_ZNSt6vectorIPN5clang4ento7GRState7PrinterESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<clang::ento::GRState::Printer*, std::allocator<clang::ento::GRState::Printer*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::GRState::Printer**, std::vector<clang::ento::GRState::Printer*, std::allocator<clang::ento::GRState::Printer*> > >, clang::ento::GRState::Printer* const&)\"},\n    {\"_ZN5clang4ento13TransferFuncsD1Ev\", \"clang::ento::TransferFuncs::~TransferFuncs()\"},\n    {\"_ZN5clang4ento13TransferFuncsD0Ev\", \"clang::ento::TransferFuncs::~TransferFuncs()\"},\n    {\"_ZN5clang4ento13TransferFuncs16RegisterPrintersERSt6vectorIPNS0_7GRState7PrinterESaIS5_EE\", \"clang::ento::TransferFuncs::RegisterPrinters(std::vector<clang::ento::GRState::Printer*, std::allocator<clang::ento::GRState::Printer*> >&)\"},\n    {\"_ZN5clang4ento13TransferFuncs14RegisterChecksERNS0_10ExprEngineE\", \"clang::ento::TransferFuncs::RegisterChecks(clang::ento::ExprEngine&)\"},\n    {\"_ZN5clang4ento13TransferFuncs8evalCallERNS0_15ExplodedNodeSetERNS0_10ExprEngineERNS0_15StmtNodeBuilderEPKNS_8CallExprENS0_4SValEPNS0_12ExplodedNodeE\", \"clang::ento::TransferFuncs::evalCall(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::CallExpr const*, clang::ento::SVal, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento13TransferFuncs15evalObjCMessageERNS0_15ExplodedNodeSetERNS0_10ExprEngineERNS0_15StmtNodeBuilderENS0_11ObjCMessageEPNS0_12ExplodedNodeEPKNS0_7GRStateE\", \"clang::ento::TransferFuncs::evalObjCMessage(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ento::ObjCMessage, clang::ento::ExplodedNode*, clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento13TransferFuncs8evalBindERNS0_18StmtNodeBuilderRefENS0_4SValES4_\", \"clang::ento::TransferFuncs::evalBind(clang::ento::StmtNodeBuilderRef&, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento13TransferFuncs11evalEndPathERNS0_10ExprEngineERNS0_24EndOfFunctionNodeBuilderE\", \"clang::ento::TransferFuncs::evalEndPath(clang::ento::ExprEngine&, clang::ento::EndOfFunctionNodeBuilder&)\"},\n    {\"_ZN5clang4ento13TransferFuncs15evalDeadSymbolsERNS0_15ExplodedNodeSetERNS0_10ExprEngineERNS0_15StmtNodeBuilderEPNS0_12ExplodedNodeEPKNS0_7GRStateERNS0_12SymbolReaperE\", \"clang::ento::TransferFuncs::evalDeadSymbols(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN5clang4ento13TransferFuncs10evalReturnERNS0_15ExplodedNodeSetERNS0_10ExprEngineERNS0_15StmtNodeBuilderEPKNS_10ReturnStmtEPNS0_12ExplodedNodeE\", \"clang::ento::TransferFuncs::evalReturn(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ReturnStmt const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento13TransferFuncs10evalAssumeEPKNS0_7GRStateENS0_4SValEb\", \"clang::ento::TransferFuncs::evalAssume(clang::ento::GRState const*, clang::ento::SVal, bool)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIj9ArgEffectEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<unsigned int, ArgEffect> >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEjEEEC2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> >::ImutAVLFactory()\"},\n    {\"_ZN5clang4ento10ExprEngine13evalArgumentsENS_17ConstExprIteratorES2_PKNS_17FunctionProtoTypeEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetEb\", \"clang::ento::ExprEngine::evalArguments(clang::ConstExprIterator, clang::ConstExprIterator, clang::FunctionProtoType const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&, bool)\"},\n    {\"_ZN5clang4ento10ExprEngine16getCXXThisRegionEPKNS_13CXXRecordDeclEPKNS_17StackFrameContextE\", \"clang::ento::ExprEngine::getCXXThisRegion(clang::CXXRecordDecl const*, clang::StackFrameContext const*)\"},\n    {\"_ZN5clang4ento10ExprEngine16getCXXThisRegionEPKNS_13CXXMethodDeclEPKNS_17StackFrameContextE\", \"clang::ento::ExprEngine::getCXXThisRegion(clang::CXXMethodDecl const*, clang::StackFrameContext const*)\"},\n    {\"_ZN5clang4ento10ExprEngine24CreateCXXTemporaryObjectEPKNS_4ExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::CreateCXXTemporaryObject(clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine21VisitCXXConstructExprEPKNS_16CXXConstructExprEPKNS0_9MemRegionEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXConstructExpr(clang::CXXConstructExpr const*, clang::ento::MemRegion const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine18VisitCXXDestructorEPKNS_17CXXDestructorDeclEPKNS0_9MemRegionEPKNS_4StmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXDestructor(clang::CXXDestructorDecl const*, clang::ento::MemRegion const*, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine22VisitCXXMemberCallExprEPKNS_17CXXMemberCallExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXMemberCallExpr(clang::CXXMemberCallExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine14evalMethodCallEPKNS_8CallExprEPKNS_13CXXMethodDeclEPKNS_4ExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetESE_\", \"clang::ento::ExprEngine::evalMethodCall(clang::CallExpr const*, clang::CXXMethodDecl const*, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine24VisitCXXOperatorCallExprEPKNS_19CXXOperatorCallExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXOperatorCallExpr(clang::CXXOperatorCallExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine15VisitCXXNewExprEPKNS_10CXXNewExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXNewExpr(clang::CXXNewExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine18VisitCXXDeleteExprEPKNS_13CXXDeleteExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXDeleteExpr(clang::CXXDeleteExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento10ExprEngine16VisitCXXThisExprEPKNS_11CXXThisExprEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetE\", \"clang::ento::ExprEngine::VisitCXXThisExpr(clang::CXXThisExpr const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_114CallExprWLItemELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::CallExprWLItem, false>::grow(unsigned long)\"},\n    {\"_ZN5clang4ento7CheckerD0Ev\", \"clang::ento::Checker::~Checker()\"},\n    {\"_ZN5clang4ento7CheckerD1Ev\", \"clang::ento::Checker::~Checker()\"},\n    {\"_ZN5clang4ento7CheckerD2Ev\", \"clang::ento::Checker::~Checker()\"},\n    {\"_ZN5clang4ento14CheckerContextD1Ev\", \"clang::ento::CheckerContext::~CheckerContext()\"},\n    {\"_ZN5clang4ento14CheckerContextD2Ev\", \"clang::ento::CheckerContext::~CheckerContext()\"},\n    {\"_ZN5clang4ento13containsMacroEPKNS_4StmtE\", \"clang::ento::containsMacro(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento12containsEnumEPKNS_4StmtE\", \"clang::ento::containsEnum(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento19containsStaticLocalEPKNS_4StmtE\", \"clang::ento::containsStaticLocal(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento23containsBuiltinOffsetOfEPKNS_4StmtE\", \"clang::ento::containsBuiltinOffsetOf(clang::Stmt const*)\"},\n    {\"_ZN5clang4ento8WorkList7VisitorD0Ev\", \"clang::ento::WorkList::Visitor::~Visitor()\"},\n    {\"_ZN5clang4ento8WorkList7VisitorD1Ev\", \"clang::ento::WorkList::Visitor::~Visitor()\"},\n    {\"_ZN5clang4ento8WorkList7VisitorD2Ev\", \"clang::ento::WorkList::Visitor::~Visitor()\"},\n    {\"_ZN5clang4ento8WorkListD0Ev\", \"clang::ento::WorkList::~WorkList()\"},\n    {\"_ZN5clang4ento8WorkListD1Ev\", \"clang::ento::WorkList::~WorkList()\"},\n    {\"_ZN5clang4ento8WorkListD2Ev\", \"clang::ento::WorkList::~WorkList()\"},\n    {\"_ZN5clang4ento8WorkList7makeDFSEv\", \"clang::ento::WorkList::makeDFS()\"},\n    {\"_ZN5clang4ento8WorkList7makeBFSEv\", \"clang::ento::WorkList::makeBFS()\"},\n    {\"_ZN5clang4ento8WorkList23makeBFSBlockDFSContentsEv\", \"clang::ento::WorkList::makeBFSBlockDFSContents()\"},\n    {\"_ZN5clang4ento10CoreEngine15ExecuteWorkListEPKNS_15LocationContextEjPKNS0_7GRStateE\", \"clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento10CoreEngine12generateNodeERKNS_12ProgramPointEPKNS0_7GRStateEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::generateNode(clang::ProgramPoint const&, clang::ento::GRState const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine15HandleBlockEdgeERKNS_9BlockEdgeEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleBlockEdge(clang::BlockEdge const&, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine19HandleBlockEntranceERKNS_13BlockEntranceEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleBlockEntrance(clang::BlockEntrance const&, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine15HandleCallEnterERKNS_9CallEnterEPKNS_8CFGBlockEjPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleCallEnter(clang::CallEnter const&, clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine14HandleCallExitERKNS_8CallExitEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleCallExit(clang::CallExit const&, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine14HandlePostStmtEPKNS_8CFGBlockEjPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandlePostStmt(clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine31ExecuteWorkListWithInitialStateEPKNS_15LocationContextEjPKNS0_7GRStateERNS0_15ExplodedNodeSetE\", \"clang::ento::CoreEngine::ExecuteWorkListWithInitialState(clang::LocationContext const*, unsigned int, clang::ento::GRState const*, clang::ento::ExplodedNodeSet&)\"},\n    {\"_ZN5clang4ento24EndOfFunctionNodeBuilderD1Ev\", \"clang::ento::EndOfFunctionNodeBuilder::~EndOfFunctionNodeBuilder()\"},\n    {\"_ZN5clang4ento15StmtNodeBuilderC1EPKNS_8CFGBlockEjPNS0_12ExplodedNodeEPNS0_10CoreEngineERNS0_14GRStateManagerE\", \"clang::ento::StmtNodeBuilder::StmtNodeBuilder(clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*, clang::ento::CoreEngine*, clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilderD1Ev\", \"clang::ento::StmtNodeBuilder::~StmtNodeBuilder()\"},\n    {\"_ZN5clang4ento10CoreEngine15HandleBlockExitEPKNS_8CFGBlockEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleBlockExit(clang::CFGBlock const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento10CoreEngine12HandleBranchEPKNS_4StmtES4_PKNS_8CFGBlockEPNS0_12ExplodedNodeE\", \"clang::ento::CoreEngine::HandleBranch(clang::Stmt const*, clang::Stmt const*, clang::CFGBlock const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento17BranchNodeBuilderD1Ev\", \"clang::ento::BranchNodeBuilder::~BranchNodeBuilder()\"},\n    {\"_ZN5clang4ento22GenericNodeBuilderImpl16generateNodeImplEPKNS0_7GRStateEPNS0_12ExplodedNodeENS_12ProgramPointEb\", \"clang::ento::GenericNodeBuilderImpl::generateNodeImpl(clang::ento::GRState const*, clang::ento::ExplodedNode*, clang::ProgramPoint, bool)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilderC2EPKNS_8CFGBlockEjPNS0_12ExplodedNodeEPNS0_10CoreEngineERNS0_14GRStateManagerE\", \"clang::ento::StmtNodeBuilder::StmtNodeBuilder(clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*, clang::ento::CoreEngine*, clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilderD2Ev\", \"clang::ento::StmtNodeBuilder::~StmtNodeBuilder()\"},\n    {\"_ZN5clang4ento15StmtNodeBuilder22GenerateAutoTransitionEPNS0_12ExplodedNodeE\", \"clang::ento::StmtNodeBuilder::GenerateAutoTransition(clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilder8MakeNodeERNS0_15ExplodedNodeSetEPKNS_4StmtEPNS0_12ExplodedNodeEPKNS0_7GRStateENS_12ProgramPoint4KindE\", \"clang::ento::StmtNodeBuilder::MakeNode(clang::ento::ExplodedNodeSet&, clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ProgramPoint::Kind)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilder20generateNodeInternalEPKNS_4StmtEPKNS0_7GRStateEPNS0_12ExplodedNodeENS_12ProgramPoint4KindEPKv\", \"clang::ento::StmtNodeBuilder::generateNodeInternal(clang::Stmt const*, clang::ento::GRState const*, clang::ento::ExplodedNode*, clang::ProgramPoint::Kind, void const*)\"},\n    {\"_ZN5clang4ento15StmtNodeBuilder20generateNodeInternalERKNS_12ProgramPointEPKNS0_7GRStateEPNS0_12ExplodedNodeE\", \"clang::ento::StmtNodeBuilder::generateNodeInternal(clang::ProgramPoint const&, clang::ento::GRState const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento17BranchNodeBuilder12generateNodeEPKNS0_7GRStateEb\", \"clang::ento::BranchNodeBuilder::generateNode(clang::ento::GRState const*, bool)\"},\n    {\"_ZN5clang4ento17BranchNodeBuilderD2Ev\", \"clang::ento::BranchNodeBuilder::~BranchNodeBuilder()\"},\n    {\"_ZN5clang4ento23IndirectGotoNodeBuilder12generateNodeERKNS1_8iteratorEPKNS0_7GRStateEb\", \"clang::ento::IndirectGotoNodeBuilder::generateNode(clang::ento::IndirectGotoNodeBuilder::iterator const&, clang::ento::GRState const*, bool)\"},\n    {\"_ZN5clang4ento17SwitchNodeBuilder20generateCaseStmtNodeERKNS1_8iteratorEPKNS0_7GRStateE\", \"clang::ento::SwitchNodeBuilder::generateCaseStmtNode(clang::ento::SwitchNodeBuilder::iterator const&, clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento17SwitchNodeBuilder23generateDefaultCaseNodeEPKNS0_7GRStateEb\", \"clang::ento::SwitchNodeBuilder::generateDefaultCaseNode(clang::ento::GRState const*, bool)\"},\n    {\"_ZN5clang4ento24EndOfFunctionNodeBuilderD2Ev\", \"clang::ento::EndOfFunctionNodeBuilder::~EndOfFunctionNodeBuilder()\"},\n    {\"_ZN5clang4ento24EndOfFunctionNodeBuilder20GenerateCallExitNodeEPKNS0_7GRStateE\", \"clang::ento::EndOfFunctionNodeBuilder::GenerateCallExitNode(clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento24EndOfFunctionNodeBuilder12generateNodeEPKNS0_7GRStateEPKvPNS0_12ExplodedNodeE\", \"clang::ento::EndOfFunctionNodeBuilder::generateNode(clang::ento::GRState const*, void const*, clang::ento::ExplodedNode*)\"},\n    {\"_ZN5clang4ento20CallEnterNodeBuilder12generateNodeEPKNS0_7GRStateE\", \"clang::ento::CallEnterNodeBuilder::generateNode(clang::ento::GRState const*)\"},\n    {\"_ZN5clang4ento19CallExitNodeBuilder12generateNodeEPKNS0_7GRStateE\", \"clang::ento::CallExitNodeBuilder::generateNode(clang::ento::GRState const*)\"},\n    {\"_ZN12_GLOBAL__N_119BFSBlockDFSContentsD1Ev\", \"(anonymous namespace)::BFSBlockDFSContents::~BFSBlockDFSContents()\"},\n    {\"_ZN12_GLOBAL__N_119BFSBlockDFSContentsD0Ev\", \"(anonymous namespace)::BFSBlockDFSContents::~BFSBlockDFSContents()\"},\n    {\"_ZNK12_GLOBAL__N_119BFSBlockDFSContents7hasWorkEv\", \"(anonymous namespace)::BFSBlockDFSContents::hasWork() const\"},\n    {\"_ZN12_GLOBAL__N_119BFSBlockDFSContents7enqueueERKN5clang4ento12WorkListUnitE\", \"(anonymous namespace)::BFSBlockDFSContents::enqueue(clang::ento::WorkListUnit const&)\"},\n    {\"_ZN12_GLOBAL__N_119BFSBlockDFSContents7dequeueEv\", \"(anonymous namespace)::BFSBlockDFSContents::dequeue()\"},\n    {\"_ZN12_GLOBAL__N_119BFSBlockDFSContents20visitItemsInWorkListERN5clang4ento8WorkList7VisitorE\", \"(anonymous namespace)::BFSBlockDFSContents::visitItemsInWorkList(clang::ento::WorkList::Visitor&)\"},\n    {\"_ZN12_GLOBAL__N_13BFSD1Ev\", \"(anonymous namespace)::BFS::~BFS()\"},\n    {\"_ZN12_GLOBAL__N_13BFSD0Ev\", \"(anonymous namespace)::BFS::~BFS()\"},\n    {\"_ZNK12_GLOBAL__N_13BFS7hasWorkEv\", \"(anonymous namespace)::BFS::hasWork() const\"},\n    {\"_ZN12_GLOBAL__N_13BFS7enqueueERKN5clang4ento12WorkListUnitE\", \"(anonymous namespace)::BFS::enqueue(clang::ento::WorkListUnit const&)\"},\n    {\"_ZN12_GLOBAL__N_13BFS7dequeueEv\", \"(anonymous namespace)::BFS::dequeue()\"},\n    {\"_ZN12_GLOBAL__N_13BFS20visitItemsInWorkListERN5clang4ento8WorkList7VisitorE\", \"(anonymous namespace)::BFS::visitItemsInWorkList(clang::ento::WorkList::Visitor&)\"},\n    {\"_ZN12_GLOBAL__N_13DFSD1Ev\", \"(anonymous namespace)::DFS::~DFS()\"},\n    {\"_ZN12_GLOBAL__N_13DFSD0Ev\", \"(anonymous namespace)::DFS::~DFS()\"},\n    {\"_ZNK12_GLOBAL__N_13DFS7hasWorkEv\", \"(anonymous namespace)::DFS::hasWork() const\"},\n    {\"_ZN12_GLOBAL__N_13DFS7enqueueERKN5clang4ento12WorkListUnitE\", \"(anonymous namespace)::DFS::enqueue(clang::ento::WorkListUnit const&)\"},\n    {\"_ZN12_GLOBAL__N_13DFS7dequeueEv\", \"(anonymous namespace)::DFS::dequeue()\"},\n    {\"_ZN12_GLOBAL__N_13DFS20visitItemsInWorkListERN5clang4ento8WorkList7VisitorE\", \"(anonymous namespace)::DFS::visitItemsInWorkList(clang::ento::WorkList::Visitor&)\"},\n    {\"_ZNSt6vectorISt4pairIN5clang9BlockEdgeEPKNS1_4ento12ExplodedNodeEESaIS7_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*>, std::allocator<std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*>*, std::vector<std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*>, std::allocator<std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*> > > >, std::pair<clang::BlockEdge, clang::ento::ExplodedNode const*> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang4ento12WorkListUnitELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::ento::WorkListUnit, false>::grow(unsigned long)\"},\n    {\"_ZNSt5dequeIN5clang4ento12WorkListUnitESaIS2_EE17_M_reallocate_mapEmb\", \"std::deque<clang::ento::WorkListUnit, std::allocator<clang::ento::WorkListUnit> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIN5clang4ento12WorkListUnitESaIS2_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::ento::WorkListUnit, std::allocator<clang::ento::WorkListUnit> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNK5clang4ento11Environment10lookupExprEPKNS_4StmtE\", \"clang::ento::Environment::lookupExpr(clang::Stmt const*) const\"},\n    {\"_ZNK5clang4ento11Environment7getSValEPKNS_4StmtERNS0_11SValBuilderE\", \"clang::ento::Environment::getSVal(clang::Stmt const*, clang::ento::SValBuilder&) const\"},\n    {\"_ZN5clang4ento18EnvironmentManager8bindExprENS0_11EnvironmentEPKNS_4StmtENS0_4SValEb\", \"clang::ento::EnvironmentManager::bindExpr(clang::ento::Environment, clang::Stmt const*, clang::ento::SVal, bool)\"},\n    {\"_ZN5clang4ento18EnvironmentManager19bindExprAndLocationENS0_11EnvironmentEPKNS_4StmtENS0_4SValES6_\", \"clang::ento::EnvironmentManager::bindExprAndLocation(clang::ento::Environment, clang::Stmt const*, clang::ento::SVal, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento18EnvironmentManager18removeDeadBindingsENS0_11EnvironmentERNS0_12SymbolReaperEPKNS0_7GRStateERN4llvm15SmallVectorImplIPKNS0_9MemRegionEEE\", \"clang::ento::EnvironmentManager::removeDeadBindings(clang::ento::Environment, clang::ento::SymbolReaper&, clang::ento::GRState const*, llvm::SmallVectorImpl<clang::ento::MemRegion const*>&)\"},\n    {\"_ZN12_GLOBAL__N_116MarkLiveCallbackD1Ev\", \"(anonymous namespace)::MarkLiveCallback::~MarkLiveCallback()\"},\n    {\"_ZN12_GLOBAL__N_116MarkLiveCallback11VisitSymbolEPKN5clang4ento10SymbolDataE\", \"(anonymous namespace)::MarkLiveCallback::VisitSymbol(clang::ento::SymbolData const*)\"},\n    {\"_ZN12_GLOBAL__N_116MarkLiveCallbackD0Ev\", \"(anonymous namespace)::MarkLiveCallback::~MarkLiveCallback()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPKN5clang4StmtENS2_4ento4SValEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::Stmt const*, clang::ento::SVal>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE3addEPNS_11ImutAVLTreeIS8_EERKSt4pairIS5_S7_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::pair<clang::Stmt const*, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS8_EERNS_26ImutAVLTreeInOrderIteratorIS8_EESF_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE12add_internalERKSt4pairIS5_S7_EPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::add_internal(std::pair<clang::Stmt const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE13markImmutableEPNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE10createNodeEPNS_11ImutAVLTreeIS8_EERKSt4pairIS5_S7_ESC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::pair<clang::Stmt const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE11balanceTreeEPNS_11ImutAVLTreeIS8_EERKSt4pairIS5_S7_ESC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::pair<clang::Stmt const*, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE6removeEPNS_11ImutAVLTreeIS8_EERKS5_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::remove(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, clang::Stmt const* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE15remove_internalERKS5_PNS_11ImutAVLTreeIS8_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::remove_internal(clang::Stmt const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE16removeMinBindingEPNS_11ImutAVLTreeIS8_EERSC_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*&)\"},\n    {\"_ZN5clang4ento12ExplodedNode7AuditorD0Ev\", \"clang::ento::ExplodedNode::Auditor::~Auditor()\"},\n    {\"_ZN5clang4ento12ExplodedNode7AuditorD1Ev\", \"clang::ento::ExplodedNode::Auditor::~Auditor()\"},\n    {\"_ZN5clang4ento12ExplodedNode7AuditorD2Ev\", \"clang::ento::ExplodedNode::Auditor::~Auditor()\"},\n    {\"_ZN5clang4ento12ExplodedNode10SetAuditorEPNS1_7AuditorE\", \"clang::ento::ExplodedNode::SetAuditor(clang::ento::ExplodedNode::Auditor*)\"},\n    {\"_ZN5clang4ento13ExplodedGraphD1Ev\", \"clang::ento::ExplodedGraph::~ExplodedGraph()\"},\n    {\"_ZN5clang4ento13ExplodedGraphD2Ev\", \"clang::ento::ExplodedGraph::~ExplodedGraph()\"},\n    {\"_ZN5clang4ento13ExplodedGraph29reclaimRecentlyAllocatedNodesEv\", \"clang::ento::ExplodedGraph::reclaimRecentlyAllocatedNodes()\"},\n    {\"_ZN5clang4ento12ExplodedNode14addPredecessorEPS1_RNS0_13ExplodedGraphE\", \"clang::ento::ExplodedNode::addPredecessor(clang::ento::ExplodedNode*, clang::ento::ExplodedGraph&)\"},\n    {\"_ZN5clang4ento12ExplodedNode9NodeGroup7addNodeEPS1_RNS0_13ExplodedGraphE\", \"clang::ento::ExplodedNode::NodeGroup::addNode(clang::ento::ExplodedNode*, clang::ento::ExplodedGraph&)\"},\n    {\"_ZN5clang4ento12ExplodedNode9NodeGroup11replaceNodeEPS1_\", \"clang::ento::ExplodedNode::NodeGroup::replaceNode(clang::ento::ExplodedNode*)\"},\n    {\"_ZNK5clang4ento12ExplodedNode9NodeGroup4sizeEv\", \"clang::ento::ExplodedNode::NodeGroup::size() const\"},\n    {\"_ZNK5clang4ento12ExplodedNode9NodeGroup5beginEv\", \"clang::ento::ExplodedNode::NodeGroup::begin() const\"},\n    {\"_ZNK5clang4ento12ExplodedNode9NodeGroup3endEv\", \"clang::ento::ExplodedNode::NodeGroup::end() const\"},\n    {\"_ZN5clang4ento13ExplodedGraph7getNodeERKNS_12ProgramPointEPKNS0_7GRStateEPb\", \"clang::ento::ExplodedGraph::getNode(clang::ProgramPoint const&, clang::ento::GRState const*, bool*)\"},\n    {\"_ZNK5clang4ento13ExplodedGraph4TrimEPKPKNS0_12ExplodedNodeES6_PN4llvm8DenseMapIPKvSA_NS7_12DenseMapInfoISA_EESC_EE\", \"clang::ento::ExplodedGraph::Trim(clang::ento::ExplodedNode const* const*, clang::ento::ExplodedNode const* const*, llvm::DenseMap<void const*, void const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<void const*> >*) const\"},\n    {\"_ZNK5clang4ento13ExplodedGraph12TrimInternalEPKPKNS0_12ExplodedNodeES6_PNS0_21InterExplodedGraphMapEPN4llvm8DenseMapIPKvSC_NS9_12DenseMapInfoISC_EESE_EE\", \"clang::ento::ExplodedGraph::TrimInternal(clang::ento::ExplodedNode const* const*, clang::ento::ExplodedNode const* const*, clang::ento::InterExplodedGraphMap*, llvm::DenseMap<void const*, void const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<void const*> >*) const\"},\n    {\"_ZNK5clang4ento21InterExplodedGraphMap13getMappedNodeEPKNS0_12ExplodedNodeE\", \"clang::ento::InterExplodedGraphMap::getMappedNode(clang::ento::ExplodedNode const*) const\"},\n    {\"_ZN4llvm8DenseMapIPKvS2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<void const*, void const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<void const*> >::InsertIntoBucket(void const* const&, void const* const&, std::pair<void const*, void const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKvS2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<void const*, void const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<void const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEPS3_NS_12DenseMapInfoIS5_EENS7_IS6_EEE16InsertIntoBucketERKS5_RKS6_PSt4pairIS5_S6_E\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode*, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<clang::ento::ExplodedNode*> >::InsertIntoBucket(clang::ento::ExplodedNode const* const&, clang::ento::ExplodedNode* const&, std::pair<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEPS3_NS_12DenseMapInfoIS5_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, clang::ento::ExplodedNode*, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<clang::ento::ExplodedNode*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEcNS_12DenseMapInfoIS5_EENS6_IcEEE6insertERKSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, char, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::ento::ExplodedNode const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEcNS_12DenseMapInfoIS5_EENS6_IcEEE16InsertIntoBucketERKS5_RKcPSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, char, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::ento::ExplodedNode const* const&, char const&, std::pair<clang::ento::ExplodedNode const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento12ExplodedNodeEcNS_12DenseMapInfoIS5_EENS6_IcEEE4growEj\", \"llvm::DenseMap<clang::ento::ExplodedNode const*, char, llvm::DenseMapInfo<clang::ento::ExplodedNode const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN5clang4ento12ExplodedNodeESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::ento::ExplodedNode*, std::allocator<clang::ento::ExplodedNode*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::ExplodedNode**, std::vector<clang::ento::ExplodedNode*, std::allocator<clang::ento::ExplodedNode*> > >, clang::ento::ExplodedNode* const&)\"},\n    {\"_ZNK4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPvS2_EEE7isEqualERKS4_\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >::isEqual(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> > const&) const\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPvS2_EEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<void*, void*> >::operator++()\"},\n    {\"_ZN5clang4ento21InterExplodedGraphMapD1Ev\", \"clang::ento::InterExplodedGraphMap::~InterExplodedGraphMap()\"},\n    {\"_ZN5clang4ento21InterExplodedGraphMapD0Ev\", \"clang::ento::InterExplodedGraphMap::~InterExplodedGraphMap()\"},\n    {\"_ZN5clang4ento22CreateFlatStoreManagerERNS0_14GRStateManagerE\", \"clang::ento::CreateFlatStoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManagerD1Ev\", \"(anonymous namespace)::FlatStoreManager::~FlatStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManagerD0Ev\", \"(anonymous namespace)::FlatStoreManager::~FlatStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager8RetrieveEPKvN5clang4ento3LocENS3_8QualTypeE\", \"(anonymous namespace)::FlatStoreManager::Retrieve(void const*, clang::ento::Loc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager4BindEPKvN5clang4ento3LocENS4_4SValE\", \"(anonymous namespace)::FlatStoreManager::Bind(void const*, clang::ento::Loc, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager6RemoveEPKvN5clang4ento3LocE\", \"(anonymous namespace)::FlatStoreManager::Remove(void const*, clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager19BindCompoundLiteralEPKvPKN5clang19CompoundLiteralExprEPKNS3_15LocationContextENS3_4ento4SValE\", \"(anonymous namespace)::FlatStoreManager::BindCompoundLiteral(void const*, clang::CompoundLiteralExpr const*, clang::LocationContext const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager15getInitialStoreEPKN5clang15LocationContextE\", \"(anonymous namespace)::FlatStoreManager::getInitialStore(clang::LocationContext const*)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager15getSubRegionMapEPKv\", \"(anonymous namespace)::FlatStoreManager::getSubRegionMap(void const*)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager14ArrayToPointerEN5clang4ento3LocE\", \"(anonymous namespace)::FlatStoreManager::ArrayToPointer(clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager18removeDeadBindingsEPKvPKN5clang17StackFrameContextERNS3_4ento12SymbolReaperERN4llvm15SmallVectorImplIPKNS7_9MemRegionEEE\", \"(anonymous namespace)::FlatStoreManager::removeDeadBindings(void const*, clang::StackFrameContext const*, clang::ento::SymbolReaper&, llvm::SmallVectorImpl<clang::ento::MemRegion const*>&)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager8BindDeclEPKvPKN5clang4ento9VarRegionENS4_4SValE\", \"(anonymous namespace)::FlatStoreManager::BindDecl(void const*, clang::ento::VarRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager18BindDeclWithNoInitEPKvPKN5clang4ento9VarRegionE\", \"(anonymous namespace)::FlatStoreManager::BindDeclWithNoInit(void const*, clang::ento::VarRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager17InvalidateRegionsEPKvPKPKN5clang4ento9MemRegionES9_PKNS3_4ExprEjPN4llvm8DenseSetIPKNS4_10SymbolDataENSD_12DenseMapInfoISH_EEEEbPNSD_11SmallVectorIS7_Lj8EEE\", \"(anonymous namespace)::FlatStoreManager::InvalidateRegions(void const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, clang::Expr const*, unsigned int, llvm::DenseSet<clang::ento::SymbolData const*, llvm::DenseMapInfo<clang::ento::SymbolData const*> >*, bool, llvm::SmallVector<clang::ento::MemRegion const*, 8u>*)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager5printEPKvRN4llvm11raw_ostreamEPKcS7_\", \"(anonymous namespace)::FlatStoreManager::print(void const*, llvm::raw_ostream&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager12iterBindingsEPKvRN5clang4ento12StoreManager15BindingsHandlerE\", \"(anonymous namespace)::FlatStoreManager::iterBindings(void const*, clang::ento::StoreManager::BindingsHandler&)\"},\n    {\"_ZN12_GLOBAL__N_116FlatStoreManager16RegionToIntervalEPKN5clang4ento9MemRegionE\", \"(anonymous namespace)::FlatStoreManager::RegionToInterval(clang::ento::MemRegion const*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS0_20ImmutableIntervalMapINS4_4SValEEEEEEESaISD_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSD_SF_EERKSD_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS4_4SValEEEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE16InsertIntoBucketERKjRKSD_PSt4pairIjSD_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS4_4SValEEEEEEENS_12DenseMapInfoIjEENSE_ISD_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12ImmutableMapIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS2_4SValEEENS_16ImutKeyValueInfoIS5_S8_EEE7Factory3addESB_RKS5_RKS8_\", \"llvm::ImmutableMap<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal>, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::Factory::add(llvm::ImmutableMap<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal>, llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >, clang::ento::MemRegion const* const&, llvm::ImmutableIntervalMap<clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE3addEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, std::pair<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE16getCanonicalTreeEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeISA_EERNS_26ImutAVLTreeInOrderIteratorISA_EESH_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >&)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::operator++()\"},\n    {\"_ZNK4llvm11ImutAVLTreeINS_16ImutIntervalInfoIN5clang4ento4SValEEEE7isEqualERKS6_\", \"llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >::isEqual(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> > const&) const\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutIntervalInfoIN5clang4ento4SValEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutIntervalInfo<clang::ento::SVal> >::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE12add_internalERKSt4pairIS6_S9_EPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::add_internal(std::pair<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE13markImmutableEPNS_11ImutAVLTreeISA_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE10createNodeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, std::pair<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEE11balanceTreeEPNS_11ImutAVLTreeISA_EERKSt4pairIS6_S9_ESE_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*, std::pair<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutIntervalInfoIN5clang4ento4SValEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutIntervalInfoIN5clang4ento4SValEEEEESaIS8_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS8_SA_EERKS8_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >**, std::vector<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*> > >, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >* const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutIntervalInfoIN5clang4ento4SValEEEE13computeDigestEPS6_S7_RKSt4pairINS_8IntervalES4_E\", \"llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >::computeDigest(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::pair<llvm::Interval, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutIntervalInfoIN5clang4ento4SValEEEEENS_12DenseMapInfoIjEENS9_IS8_EEE16InsertIntoBucketERKjRKS8_PSt4pairIjS8_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutIntervalInfoIN5clang4ento4SValEEEEENS_12DenseMapInfoIjEENS9_IS8_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE3addEPNS_11ImutAVLTreeIS5_EERKSt4pairINS_8IntervalES4_E\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::add(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::pair<llvm::Interval, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS5_EE\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS5_EERNS_26ImutAVLTreeInOrderIteratorIS5_EESC_\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutIntervalInfo<clang::ento::SVal> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutIntervalInfo<clang::ento::SVal> >&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE12add_internalERKSt4pairINS_8IntervalES4_EPNS_11ImutAVLTreeIS5_EE\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::add_internal(std::pair<llvm::Interval, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE13markImmutableEPNS_11ImutAVLTreeIS5_EE\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::markImmutable(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE10createNodeEPNS_11ImutAVLTreeIS5_EERKSt4pairINS_8IntervalES4_ES9_\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::createNode(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::pair<llvm::Interval, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEE11balanceTreeEPNS_11ImutAVLTreeIS5_EERKSt4pairINS_8IntervalES4_ES9_\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::balanceTree(llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*, std::pair<llvm::Interval, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutIntervalInfo<clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento9MemRegionENS_20ImmutableIntervalMapINS3_4SValEEEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::MemRegion const*, llvm::ImmutableIntervalMap<clang::ento::SVal> > >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutIntervalInfoIN5clang4ento4SValEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutIntervalInfo<clang::ento::SVal> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento17ConstraintManagerD0Ev\", \"clang::ento::ConstraintManager::~ConstraintManager()\"},\n    {\"_ZN5clang4ento17ConstraintManagerD1Ev\", \"clang::ento::ConstraintManager::~ConstraintManager()\"},\n    {\"_ZN5clang4ento17ConstraintManagerD2Ev\", \"clang::ento::ConstraintManager::~ConstraintManager()\"},\n    {\"_ZN5clang4ento14GRStateManagerD1Ev\", \"clang::ento::GRStateManager::~GRStateManager()\"},\n    {\"_ZN5clang4ento14GRStateManagerD2Ev\", \"clang::ento::GRStateManager::~GRStateManager()\"},\n    {\"_ZN5clang4ento14GRStateManager18removeDeadBindingsEPKNS0_7GRStateEPKNS_17StackFrameContextERNS0_12SymbolReaperE\", \"clang::ento::GRStateManager::removeDeadBindings(clang::ento::GRState const*, clang::StackFrameContext const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN5clang4ento14GRStateManager18getPersistentStateERNS0_7GRStateE\", \"clang::ento::GRStateManager::getPersistentState(clang::ento::GRState&)\"},\n    {\"_ZN5clang4ento14GRStateManager12MarshalStateEPKNS0_7GRStateEPKNS_17StackFrameContextE\", \"clang::ento::GRStateManager::MarshalState(clang::ento::GRState const*, clang::StackFrameContext const*)\"},\n    {\"_ZNK5clang4ento7GRState19bindCompoundLiteralEPKNS_19CompoundLiteralExprEPKNS_15LocationContextENS0_4SValE\", \"clang::ento::GRState::bindCompoundLiteral(clang::CompoundLiteralExpr const*, clang::LocationContext const*, clang::ento::SVal) const\"},\n    {\"_ZNK5clang4ento7GRState13makeWithStoreEPKv\", \"clang::ento::GRState::makeWithStore(void const*) const\"},\n    {\"_ZNK5clang4ento7GRState8bindDeclEPKNS0_9VarRegionENS0_4SValE\", \"clang::ento::GRState::bindDecl(clang::ento::VarRegion const*, clang::ento::SVal) const\"},\n    {\"_ZNK5clang4ento7GRState18bindDeclWithNoInitEPKNS0_9VarRegionE\", \"clang::ento::GRState::bindDeclWithNoInit(clang::ento::VarRegion const*) const\"},\n    {\"_ZNK5clang4ento7GRState7bindLocENS0_3LocENS0_4SValE\", \"clang::ento::GRState::bindLoc(clang::ento::Loc, clang::ento::SVal) const\"},\n    {\"_ZNK5clang4ento7GRState11bindDefaultENS0_4SValES2_\", \"clang::ento::GRState::bindDefault(clang::ento::SVal, clang::ento::SVal) const\"},\n    {\"_ZNK5clang4ento7GRState17InvalidateRegionsEPKPKNS0_9MemRegionES6_PKNS_4ExprEjPN4llvm8DenseSetIPKNS0_10SymbolDataENSA_12DenseMapInfoISE_EEEEb\", \"clang::ento::GRState::InvalidateRegions(clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, clang::Expr const*, unsigned int, llvm::DenseSet<clang::ento::SymbolData const*, llvm::DenseMapInfo<clang::ento::SymbolData const*> >*, bool) const\"},\n    {\"_ZNK5clang4ento7GRState9unbindLocENS0_3LocE\", \"clang::ento::GRState::unbindLoc(clang::ento::Loc) const\"},\n    {\"_ZNK5clang4ento7GRState15enterStackFrameEPKNS_17StackFrameContextE\", \"clang::ento::GRState::enterStackFrame(clang::StackFrameContext const*) const\"},\n    {\"_ZNK5clang4ento7GRState20getSValAsScalarOrLocEPKNS0_9MemRegionE\", \"clang::ento::GRState::getSValAsScalarOrLoc(clang::ento::MemRegion const*) const\"},\n    {\"_ZNK5clang4ento7GRState7getSValENS0_3LocENS_8QualTypeE\", \"clang::ento::GRState::getSVal(clang::ento::Loc, clang::QualType) const\"},\n    {\"_ZNK5clang4ento7GRState8BindExprEPKNS_4StmtENS0_4SValEb\", \"clang::ento::GRState::BindExpr(clang::Stmt const*, clang::ento::SVal, bool) const\"},\n    {\"_ZNK5clang4ento7GRState19bindExprAndLocationEPKNS_4StmtENS0_4SValES5_\", \"clang::ento::GRState::bindExprAndLocation(clang::Stmt const*, clang::ento::SVal, clang::ento::SVal) const\"},\n    {\"_ZNK5clang4ento7GRState13assumeInBoundENS0_20DefinedOrUnknownSValES2_b\", \"clang::ento::GRState::assumeInBound(clang::ento::DefinedOrUnknownSVal, clang::ento::DefinedOrUnknownSVal, bool) const\"},\n    {\"_ZN5clang4ento14GRStateManager15getInitialStateEPKNS_15LocationContextE\", \"clang::ento::GRStateManager::getInitialState(clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento14GRStateManager19recycleUnusedStatesEv\", \"clang::ento::GRStateManager::recycleUnusedStates()\"},\n    {\"_ZNK5clang4ento7GRState5printERN4llvm11raw_ostreamERNS_3CFGEPKcS8_\", \"clang::ento::GRState::print(llvm::raw_ostream&, clang::CFG&, char const*, char const*) const\"},\n    {\"_ZNK5clang4ento7GRState8printDOTERN4llvm11raw_ostreamERNS_3CFGE\", \"clang::ento::GRState::printDOT(llvm::raw_ostream&, clang::CFG&) const\"},\n    {\"_ZNK5clang4ento7GRState11printStdErrERNS_3CFGE\", \"clang::ento::GRState::printStdErr(clang::CFG&) const\"},\n    {\"_ZNK5clang4ento7GRState7FindGDMEPv\", \"clang::ento::GRState::FindGDM(void*) const\"},\n    {\"_ZN5clang4ento14GRStateManager14FindGDMContextEPvPFS2_RN4llvm16BumpPtrAllocatorEEPFvS2_E\", \"clang::ento::GRStateManager::FindGDMContext(void*, void* (*)(llvm::BumpPtrAllocator&), void (*)(void*))\"},\n    {\"_ZN5clang4ento14GRStateManager6addGDMEPKNS0_7GRStateEPvS5_\", \"clang::ento::GRStateManager::addGDM(clang::ento::GRState const*, void*, void*)\"},\n    {\"_ZN5clang4ento14GRStateManager9removeGDMEPKNS0_7GRStateEPv\", \"clang::ento::GRStateManager::removeGDM(clang::ento::GRState const*, void*)\"},\n    {\"_ZNK5clang4ento7GRState20scanReachableSymbolsENS0_4SValERNS0_13SymbolVisitorE\", \"clang::ento::GRState::scanReachableSymbols(clang::ento::SVal, clang::ento::SymbolVisitor&) const\"},\n    {\"_ZN12_GLOBAL__N_120ScanReachableSymbols4scanEN5clang4ento4SValE\", \"(anonymous namespace)::ScanReachableSymbols::scan(clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_120ScanReachableSymbolsD1Ev\", \"(anonymous namespace)::ScanReachableSymbols::~ScanReachableSymbols()\"},\n    {\"_ZNK5clang4ento7GRState20scanReachableSymbolsEPKNS0_4SValES4_RNS0_13SymbolVisitorE\", \"clang::ento::GRState::scanReachableSymbols(clang::ento::SVal const*, clang::ento::SVal const*, clang::ento::SymbolVisitor&) const\"},\n    {\"_ZNK5clang4ento7GRState20scanReachableSymbolsEPKPKNS0_9MemRegionES6_RNS0_13SymbolVisitorE\", \"clang::ento::GRState::scanReachableSymbols(clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, clang::ento::SymbolVisitor&) const\"},\n    {\"_ZN12_GLOBAL__N_120ScanReachableSymbols4scanEPKN5clang4ento9MemRegionE\", \"(anonymous namespace)::ScanReachableSymbols::scan(clang::ento::MemRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_120ScanReachableSymbolsD0Ev\", \"(anonymous namespace)::ScanReachableSymbols::~ScanReachableSymbols()\"},\n    {\"_ZN12_GLOBAL__N_120ScanReachableSymbols5VisitEPKN5clang4ento9MemRegionES5_\", \"(anonymous namespace)::ScanReachableSymbols::Visit(clang::ento::MemRegion const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento17BasicValueFactory7ConvertENS_8QualTypeERKN4llvm6APSIntE\", \"clang::ento::BasicValueFactory::Convert(clang::QualType, llvm::APSInt const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE6removeEPNS_11ImutAVLTreeIS3_EERKS2_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::remove(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, void* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE16getCanonicalTreeEPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPvS2_EEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >::computeDigest()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS3_EERNS_26ImutAVLTreeInOrderIteratorIS3_EESA_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<void*, void*> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<void*, void*> >&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPvS2_EEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPvS3_EEEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPvS3_EEEENS_12DenseMapInfoIjEENS7_IS6_EEE16InsertIntoBucketERKjRKS6_PSt4pairIjS6_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPvS3_EEEENS_12DenseMapInfoIjEENS7_IS6_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE15remove_internalERKS2_PNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::remove_internal(void* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE13markImmutableEPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE11balanceTreeEPNS_11ImutAVLTreeIS3_EERKSt4pairIS2_S2_ES7_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, std::pair<void*, void*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE10createNodeEPNS_11ImutAVLTreeIS3_EERKSt4pairIS2_S2_ES7_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, std::pair<void*, void*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE16removeMinBindingEPNS_11ImutAVLTreeIS3_EERS7_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE3addEPNS_11ImutAVLTreeIS3_EERKSt4pairIS2_S2_E\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::add(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*, std::pair<void*, void*> const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEE12add_internalERKSt4pairIS2_S2_EPNS_11ImutAVLTreeIS3_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::add_internal(std::pair<void*, void*> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<void*, void*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPvSt4pairIS1_PFvS1_EENS_12DenseMapInfoIS1_EENS6_IS5_EEE16InsertIntoBucketERKS1_RKS5_PS2_IS1_S5_E\", \"llvm::DenseMap<void*, std::pair<void*, void (*)(void*)>, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<std::pair<void*, void (*)(void*)> > >::InsertIntoBucket(void* const&, std::pair<void*, void (*)(void*)> const&, std::pair<void*, std::pair<void*, void (*)(void*)> >*)\"},\n    {\"_ZN4llvm8DenseMapIPvSt4pairIS1_PFvS1_EENS_12DenseMapInfoIS1_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<void*, std::pair<void*, void (*)(void*)>, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<std::pair<void*, void (*)(void*)> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::operator++()\"},\n    {\"_ZNSt6vectorIPN5clang4ento7GRStateESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::ento::GRState*, std::allocator<clang::ento::GRState*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::GRState**, std::vector<clang::ento::GRState*, std::allocator<clang::ento::GRState*> > >, clang::ento::GRState* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionEcNS_12DenseMapInfoIS5_EENS6_IcEEE6insertERKSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::MemRegion const*, char, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<char> >::insert(std::pair<clang::ento::MemRegion const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionEcNS_12DenseMapInfoIS5_EENS6_IcEEE16InsertIntoBucketERKS5_RKcPSt4pairIS5_cE\", \"llvm::DenseMap<clang::ento::MemRegion const*, char, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(clang::ento::MemRegion const* const&, char const&, std::pair<clang::ento::MemRegion const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionEcNS_12DenseMapInfoIS5_EENS6_IcEEE4growEj\", \"llvm::DenseMap<clang::ento::MemRegion const*, char, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento12SubRegionMap7VisitorD1Ev\", \"clang::ento::SubRegionMap::Visitor::~Visitor()\"},\n    {\"_ZN5clang4ento12SubRegionMap7VisitorD0Ev\", \"clang::ento::SubRegionMap::Visitor::~Visitor()\"},\n    {\"_ZNK4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE7isEqualERKS9_\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::isEqual(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> > const&) const\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::destroy()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4StmtENS3_4ento4SValEEEEESaISB_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSB_SD_EERKSB_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >**, std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*> > >, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >* const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEE13computeDigestEPS9_SA_RKSt4pairIS5_S7_E\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::computeDigest(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, std::pair<clang::Stmt const*, clang::ento::SVal> const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4StmtENS3_4ento4SValEEEEENS_12DenseMapInfoIjEENSC_ISB_EEE16InsertIntoBucketERKjRKSB_PSt4pairIjSB_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4StmtENS3_4ento4SValEEEEENS_12DenseMapInfoIjEENSC_ISB_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4StmtENS2_4ento4SValEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::Stmt const*, clang::ento::SVal> >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPvS2_EEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<void*, void*> >::~ImutAVLFactory()\"},\n    {\"_ZN5clang4ento26createHTMLDiagnosticClientERKSsRKNS_12PreprocessorE\", \"clang::ento::createHTMLDiagnosticClient(std::string const&, clang::Preprocessor const&)\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnosticsD1Ev\", \"(anonymous namespace)::HTMLDiagnostics::~HTMLDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnosticsD0Ev\", \"(anonymous namespace)::HTMLDiagnostics::~HTMLDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnostics16FlushDiagnosticsEPN4llvm15SmallVectorImplISsEE\", \"(anonymous namespace)::HTMLDiagnostics::FlushDiagnostics(llvm::SmallVectorImpl<std::string>*)\"},\n    {\"_ZNK12_GLOBAL__N_115HTMLDiagnostics7getNameEv\", \"(anonymous namespace)::HTMLDiagnostics::getName() const\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnostics20HandlePathDiagnosticEPKN5clang4ento14PathDiagnosticE\", \"(anonymous namespace)::HTMLDiagnostics::HandlePathDiagnostic(clang::ento::PathDiagnostic const*)\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnostics10ReportDiagERKN5clang4ento14PathDiagnosticEPN4llvm15SmallVectorImplISsEE\", \"(anonymous namespace)::HTMLDiagnostics::ReportDiag(clang::ento::PathDiagnostic const&, llvm::SmallVectorImpl<std::string>*)\"},\n    {\"_ZN12_GLOBAL__N_115HTMLDiagnostics17ProcessMacroPieceERN4llvm11raw_ostreamERKN5clang4ento24PathDiagnosticMacroPieceEj\", \"(anonymous namespace)::HTMLDiagnostics::ProcessMacroPiece(llvm::raw_ostream&, clang::ento::PathDiagnosticMacroPiece const&, unsigned int)\"},\n    {\"_Z16EmitAlphaCounterRN4llvm11raw_ostreamEj\", \"EmitAlphaCounter(llvm::raw_ostream&, unsigned int)\"},\n    {\"_ZN5clang4ento9MemRegionD0Ev\", \"clang::ento::MemRegion::~MemRegion()\"},\n    {\"_ZN5clang4ento9MemRegionD1Ev\", \"clang::ento::MemRegion::~MemRegion()\"},\n    {\"_ZN5clang4ento9MemRegionD2Ev\", \"clang::ento::MemRegion::~MemRegion()\"},\n    {\"_ZN5clang4ento16MemRegionManagerD1Ev\", \"clang::ento::MemRegionManager::~MemRegionManager()\"},\n    {\"_ZN5clang4ento16MemRegionManagerD2Ev\", \"clang::ento::MemRegionManager::~MemRegionManager()\"},\n    {\"_ZNK5clang4ento9SubRegion13isSubRegionOfEPKNS0_9MemRegionE\", \"clang::ento::SubRegion::isSubRegionOf(clang::ento::MemRegion const*) const\"},\n    {\"_ZNK5clang4ento9SubRegion19getMemRegionManagerEv\", \"clang::ento::SubRegion::getMemRegionManager() const\"},\n    {\"_ZNK5clang4ento9VarRegion13getStackFrameEv\", \"clang::ento::VarRegion::getStackFrame() const\"},\n    {\"_ZNK5clang4ento9MemRegion14getMemorySpaceEv\", \"clang::ento::MemRegion::getMemorySpace() const\"},\n    {\"_ZNK5clang4ento10DeclRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::DeclRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento11FieldRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::FieldRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento12AllocaRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::AllocaRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento14SymbolicRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::SymbolicRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento12StringRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::StringRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento19CXXBaseObjectRegion12getValueTypeEv\", \"clang::ento::CXXBaseObjectRegion::getValueType() const\"},\n    {\"_ZNK5clang4ento14MemSpaceRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::MemSpaceRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento16StackSpaceRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::StackSpaceRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento23StaticGlobalSpaceRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::StaticGlobalSpaceRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento12StringRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_13StringLiteralEPKNS0_9MemRegionE\", \"clang::ento::StringRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::StringLiteral const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento12AllocaRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_4ExprEjPKNS0_9MemRegionE\", \"clang::ento::AllocaRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::Expr const*, unsigned int, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento12AllocaRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::AllocaRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento21CompoundLiteralRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::CompoundLiteralRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento21CompoundLiteralRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_19CompoundLiteralExprEPKNS0_9MemRegionE\", \"clang::ento::CompoundLiteralRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::CompoundLiteralExpr const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento13CXXThisRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_11PointerTypeEPKNS0_9MemRegionE\", \"clang::ento::CXXThisRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::PointerType const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento13CXXThisRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::CXXThisRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento10DeclRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_4DeclEPKNS0_9MemRegionENS8_4KindE\", \"clang::ento::DeclRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::Decl const*, clang::ento::MemRegion const*, clang::ento::MemRegion::Kind)\"},\n    {\"_ZNK5clang4ento10DeclRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::DeclRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento9VarRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::VarRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento14SymbolicRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS0_10SymbolDataEPKNS0_9MemRegionE\", \"clang::ento::SymbolicRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::ento::SymbolData const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento14SymbolicRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolicRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento13ElementRegion13ProfileRegionERN4llvm16FoldingSetNodeIDENS_8QualTypeENS0_4SValEPKNS0_9MemRegionE\", \"clang::ento::ElementRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::QualType, clang::ento::SVal, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento13ElementRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::ElementRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento18FunctionTextRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_12FunctionDeclEPKNS0_9MemRegionE\", \"clang::ento::FunctionTextRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::FunctionDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento18FunctionTextRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::FunctionTextRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento15BlockTextRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_9BlockDeclENS_7CanQualINS_4TypeEEEPKNS_15AnalysisContextEPKNS0_9MemRegionE\", \"clang::ento::BlockTextRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::BlockDecl const*, clang::CanQual<clang::Type>, clang::AnalysisContext const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento15BlockTextRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::BlockTextRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento15BlockDataRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS0_15BlockTextRegionEPKNS_15LocationContextEPKNS0_9MemRegionE\", \"clang::ento::BlockDataRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::ento::BlockTextRegion const*, clang::LocationContext const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento15BlockDataRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::BlockDataRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento19CXXTempObjectRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_4ExprEPKNS0_9MemRegionE\", \"clang::ento::CXXTempObjectRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::Expr const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento19CXXTempObjectRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::CXXTempObjectRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento19CXXBaseObjectRegion13ProfileRegionERN4llvm16FoldingSetNodeIDEPKNS_13CXXRecordDeclEPKNS0_9MemRegionE\", \"clang::ento::CXXBaseObjectRegion::ProfileRegion(llvm::FoldingSetNodeID&, clang::CXXRecordDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento19CXXBaseObjectRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::CXXBaseObjectRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento9MemRegion4dumpEv\", \"clang::ento::MemRegion::dump() const\"},\n    {\"_ZNK5clang4ento9MemRegion9getStringEv\", \"clang::ento::MemRegion::getString() const\"},\n    {\"_ZNK5clang4ento9MemRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::MemRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento12AllocaRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::AllocaRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento18FunctionTextRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::FunctionTextRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento15BlockTextRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::BlockTextRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento15BlockDataRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::BlockDataRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento21CompoundLiteralRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::CompoundLiteralRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento19CXXTempObjectRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::CXXTempObjectRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento19CXXBaseObjectRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::CXXBaseObjectRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento13CXXThisRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::CXXThisRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento13ElementRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::ElementRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento11FieldRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::FieldRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento26NonStaticGlobalSpaceRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::NonStaticGlobalSpaceRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento14ObjCIvarRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::ObjCIvarRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento12StringRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::StringRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento14SymbolicRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolicRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento9VarRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::VarRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento15RegionRawOffset4dumpEv\", \"clang::ento::RegionRawOffset::dump() const\"},\n    {\"_ZNK5clang4ento15RegionRawOffset12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::RegionRawOffset::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento23StaticGlobalSpaceRegion12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::StaticGlobalSpaceRegion::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang4ento16MemRegionManager20getStackLocalsRegionEPKNS_17StackFrameContextE\", \"clang::ento::MemRegionManager::getStackLocalsRegion(clang::StackFrameContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager23getStackArgumentsRegionEPKNS_17StackFrameContextE\", \"clang::ento::MemRegionManager::getStackArgumentsRegion(clang::StackFrameContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager16getGlobalsRegionEPKNS0_14CodeTextRegionE\", \"clang::ento::MemRegionManager::getGlobalsRegion(clang::ento::CodeTextRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager13getHeapRegionEv\", \"clang::ento::MemRegionManager::getHeapRegion()\"},\n    {\"_ZN5clang4ento16MemRegionManager16getUnknownRegionEv\", \"clang::ento::MemRegionManager::getUnknownRegion()\"},\n    {\"_ZN5clang4ento16MemRegionManager13getCodeRegionEv\", \"clang::ento::MemRegionManager::getCodeRegion()\"},\n    {\"_ZN5clang4ento16MemRegionManager15getStringRegionEPKNS_13StringLiteralE\", \"clang::ento::MemRegionManager::getStringRegion(clang::StringLiteral const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getVarRegionEPKNS_7VarDeclEPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getVarRegion(clang::VarDecl const*, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager21getFunctionTextRegionEPKNS_12FunctionDeclE\", \"clang::ento::MemRegionManager::getFunctionTextRegion(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager18getBlockTextRegionEPKNS_9BlockDeclENS_7CanQualINS_4TypeEEEPNS_15AnalysisContextE\", \"clang::ento::MemRegionManager::getBlockTextRegion(clang::BlockDecl const*, clang::CanQual<clang::Type>, clang::AnalysisContext*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getVarRegionEPKNS_7VarDeclEPKNS0_9MemRegionE\", \"clang::ento::MemRegionManager::getVarRegion(clang::VarDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager18getBlockDataRegionEPKNS0_15BlockTextRegionEPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getBlockDataRegion(clang::ento::BlockTextRegion const*, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager24getCompoundLiteralRegionEPKNS_19CompoundLiteralExprEPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getCompoundLiteralRegion(clang::CompoundLiteralExpr const*, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager16getElementRegionENS_8QualTypeENS0_6NonLocEPKNS0_9MemRegionERNS_10ASTContextE\", \"clang::ento::MemRegionManager::getElementRegion(clang::QualType, clang::ento::NonLoc, clang::ento::MemRegion const*, clang::ASTContext&)\"},\n    {\"_ZN5clang4ento16MemRegionManager17getSymbolicRegionEPKNS0_10SymbolDataE\", \"clang::ento::MemRegionManager::getSymbolicRegion(clang::ento::SymbolData const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager14getFieldRegionEPKNS_9FieldDeclEPKNS0_9MemRegionE\", \"clang::ento::MemRegionManager::getFieldRegion(clang::FieldDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager17getObjCIvarRegionEPKNS_12ObjCIvarDeclEPKNS0_9MemRegionE\", \"clang::ento::MemRegionManager::getObjCIvarRegion(clang::ObjCIvarDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager22getCXXTempObjectRegionEPKNS_4ExprEPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getCXXTempObjectRegion(clang::Expr const*, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager22getCXXBaseObjectRegionEPKNS_13CXXRecordDeclEPKNS0_9MemRegionE\", \"clang::ento::MemRegionManager::getCXXBaseObjectRegion(clang::CXXRecordDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager16getCXXThisRegionENS_8QualTypeEPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getCXXThisRegion(clang::QualType, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager15getAllocaRegionEPKNS_4ExprEjPKNS_15LocationContextE\", \"clang::ento::MemRegionManager::getAllocaRegion(clang::Expr const*, unsigned int, clang::LocationContext const*)\"},\n    {\"_ZNK5clang4ento9MemRegion15hasStackStorageEv\", \"clang::ento::MemRegion::hasStackStorage() const\"},\n    {\"_ZNK5clang4ento9MemRegion28hasStackNonParametersStorageEv\", \"clang::ento::MemRegion::hasStackNonParametersStorage() const\"},\n    {\"_ZNK5clang4ento9MemRegion25hasStackParametersStorageEv\", \"clang::ento::MemRegion::hasStackParametersStorage() const\"},\n    {\"_ZNK5clang4ento9MemRegion29hasGlobalsOrParametersStorageEv\", \"clang::ento::MemRegion::hasGlobalsOrParametersStorage() const\"},\n    {\"_ZNK5clang4ento9MemRegion13getBaseRegionEv\", \"clang::ento::MemRegion::getBaseRegion() const\"},\n    {\"_ZNK5clang4ento9MemRegion10StripCastsEv\", \"clang::ento::MemRegion::StripCasts() const\"},\n    {\"_ZNK5clang4ento13ElementRegion16getAsArrayOffsetEv\", \"clang::ento::ElementRegion::getAsArrayOffset() const\"},\n    {\"_ZNK5clang4ento9MemRegion11getAsOffsetEv\", \"clang::ento::MemRegion::getAsOffset() const\"},\n    {\"_ZN5clang4ento15BlockDataRegion28LazyInitializeReferencedVarsEv\", \"clang::ento::BlockDataRegion::LazyInitializeReferencedVars()\"},\n    {\"_ZNK5clang4ento15BlockDataRegion21referenced_vars_beginEv\", \"clang::ento::BlockDataRegion::referenced_vars_begin() const\"},\n    {\"_ZNK5clang4ento15BlockDataRegion19referenced_vars_endEv\", \"clang::ento::BlockDataRegion::referenced_vars_end() const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento9MemRegionEED1Ev\", \"llvm::FoldingSet<clang::ento::MemRegion>::~FoldingSet()\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_12StringRegionEPKNS_13StringLiteralEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::StringRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::StringRegion, clang::StringLiteral const*>(clang::StringLiteral const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_9VarRegionEPKNS_7VarDeclEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::VarRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::VarRegion, clang::VarDecl const*>(clang::VarDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_15BlockDataRegionEPKNS0_15BlockTextRegionEPKNS_15LocationContextEEEPT_T0_T1_PKNS0_9MemRegionE\", \"clang::ento::BlockDataRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::BlockDataRegion, clang::ento::BlockTextRegion const*, clang::LocationContext const*>(clang::ento::BlockTextRegion const*, clang::LocationContext const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_21CompoundLiteralRegionEPKNS_19CompoundLiteralExprEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::CompoundLiteralRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::CompoundLiteralRegion, clang::CompoundLiteralExpr const*>(clang::CompoundLiteralExpr const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_18FunctionTextRegionEPKNS_12FunctionDeclEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::FunctionTextRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::FunctionTextRegion, clang::FunctionDecl const*>(clang::FunctionDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_15BlockTextRegionEPKNS_9BlockDeclENS_7CanQualINS_4TypeEEEPNS_15AnalysisContextEEEPT_T0_T1_T2_PKNS0_9MemRegionE\", \"clang::ento::BlockTextRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::BlockTextRegion, clang::BlockDecl const*, clang::CanQual<clang::Type>, clang::AnalysisContext*>(clang::BlockDecl const*, clang::CanQual<clang::Type>, clang::AnalysisContext*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_14SymbolicRegionEPKNS0_10SymbolDataEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::SymbolicRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::SymbolicRegion, clang::ento::SymbolData const*>(clang::ento::SymbolData const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_11FieldRegionEPKNS_9FieldDeclEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::FieldRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::FieldRegion, clang::FieldDecl const*>(clang::FieldDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_14ObjCIvarRegionEPKNS_12ObjCIvarDeclEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::ObjCIvarRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::ObjCIvarRegion, clang::ObjCIvarDecl const*>(clang::ObjCIvarDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_19CXXTempObjectRegionEPKNS_4ExprEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::CXXTempObjectRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::CXXTempObjectRegion, clang::Expr const*>(clang::Expr const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_19CXXBaseObjectRegionEPKNS_13CXXRecordDeclEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::CXXBaseObjectRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::CXXBaseObjectRegion, clang::CXXRecordDecl const*>(clang::CXXRecordDecl const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_13CXXThisRegionEPKNS_11PointerTypeEEEPT_T0_PKNS0_9MemRegionE\", \"clang::ento::CXXThisRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::CXXThisRegion, clang::PointerType const*>(clang::PointerType const*, clang::ento::MemRegion const*)\"},\n    {\"_ZN5clang4ento16MemRegionManager12getSubRegionINS0_12AllocaRegionEPKNS_4ExprEjEEPT_T0_T1_PKNS0_9MemRegionE\", \"clang::ento::AllocaRegion* clang::ento::MemRegionManager::getSubRegion<clang::ento::AllocaRegion, clang::Expr const*, unsigned int>(clang::Expr const*, unsigned int, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento9MemRegion11isBoundableEv\", \"clang::ento::MemRegion::isBoundable() const\"},\n    {\"_ZN5clang4ento14MemSpaceRegionD1Ev\", \"clang::ento::MemSpaceRegion::~MemSpaceRegion()\"},\n    {\"_ZN5clang4ento14MemSpaceRegionD0Ev\", \"clang::ento::MemSpaceRegion::~MemSpaceRegion()\"},\n    {\"_ZNK5clang4ento14MemSpaceRegion19getMemRegionManagerEv\", \"clang::ento::MemSpaceRegion::getMemRegionManager() const\"},\n    {\"_ZNK5clang4ento14MemSpaceRegion11isBoundableEv\", \"clang::ento::MemSpaceRegion::isBoundable() const\"},\n    {\"_ZN5clang4ento23StaticGlobalSpaceRegionD1Ev\", \"clang::ento::StaticGlobalSpaceRegion::~StaticGlobalSpaceRegion()\"},\n    {\"_ZN5clang4ento23StaticGlobalSpaceRegionD0Ev\", \"clang::ento::StaticGlobalSpaceRegion::~StaticGlobalSpaceRegion()\"},\n    {\"_ZN5clang4ento26NonStaticGlobalSpaceRegionD1Ev\", \"clang::ento::NonStaticGlobalSpaceRegion::~NonStaticGlobalSpaceRegion()\"},\n    {\"_ZN5clang4ento26NonStaticGlobalSpaceRegionD0Ev\", \"clang::ento::NonStaticGlobalSpaceRegion::~NonStaticGlobalSpaceRegion()\"},\n    {\"_ZN5clang4ento16StackSpaceRegionD1Ev\", \"clang::ento::StackSpaceRegion::~StackSpaceRegion()\"},\n    {\"_ZN5clang4ento16StackSpaceRegionD0Ev\", \"clang::ento::StackSpaceRegion::~StackSpaceRegion()\"},\n    {\"_ZN5clang4ento9SubRegionD1Ev\", \"clang::ento::SubRegion::~SubRegion()\"},\n    {\"_ZN5clang4ento9SubRegionD0Ev\", \"clang::ento::SubRegion::~SubRegion()\"},\n    {\"_ZNK5clang4ento9SubRegion9getExtentERNS0_11SValBuilderE\", \"clang::ento::SubRegion::getExtent(clang::ento::SValBuilder&) const\"},\n    {\"_ZN5clang4ento12AllocaRegionD1Ev\", \"clang::ento::AllocaRegion::~AllocaRegion()\"},\n    {\"_ZN5clang4ento12AllocaRegionD0Ev\", \"clang::ento::AllocaRegion::~AllocaRegion()\"},\n    {\"_ZNK5clang4ento12AllocaRegion11isBoundableEv\", \"clang::ento::AllocaRegion::isBoundable() const\"},\n    {\"_ZN5clang4ento18FunctionTextRegionD1Ev\", \"clang::ento::FunctionTextRegion::~FunctionTextRegion()\"},\n    {\"_ZN5clang4ento18FunctionTextRegionD0Ev\", \"clang::ento::FunctionTextRegion::~FunctionTextRegion()\"},\n    {\"_ZNK5clang4ento14CodeTextRegion11isBoundableEv\", \"clang::ento::CodeTextRegion::isBoundable() const\"},\n    {\"_ZNK5clang4ento14CodeTextRegion12getValueTypeEv\", \"clang::ento::CodeTextRegion::getValueType() const\"},\n    {\"_ZNK5clang4ento18FunctionTextRegion15getLocationTypeEv\", \"clang::ento::FunctionTextRegion::getLocationType() const\"},\n    {\"_ZN5clang4ento15BlockTextRegionD1Ev\", \"clang::ento::BlockTextRegion::~BlockTextRegion()\"},\n    {\"_ZN5clang4ento15BlockTextRegionD0Ev\", \"clang::ento::BlockTextRegion::~BlockTextRegion()\"},\n    {\"_ZNK5clang4ento15BlockTextRegion15getLocationTypeEv\", \"clang::ento::BlockTextRegion::getLocationType() const\"},\n    {\"_ZN5clang4ento15BlockDataRegionD1Ev\", \"clang::ento::BlockDataRegion::~BlockDataRegion()\"},\n    {\"_ZN5clang4ento15BlockDataRegionD0Ev\", \"clang::ento::BlockDataRegion::~BlockDataRegion()\"},\n    {\"_ZN5clang4ento14SymbolicRegionD1Ev\", \"clang::ento::SymbolicRegion::~SymbolicRegion()\"},\n    {\"_ZN5clang4ento14SymbolicRegionD0Ev\", \"clang::ento::SymbolicRegion::~SymbolicRegion()\"},\n    {\"_ZNK5clang4ento14SymbolicRegion11isBoundableEv\", \"clang::ento::SymbolicRegion::isBoundable() const\"},\n    {\"_ZN5clang4ento12StringRegionD1Ev\", \"clang::ento::StringRegion::~StringRegion()\"},\n    {\"_ZN5clang4ento12StringRegionD0Ev\", \"clang::ento::StringRegion::~StringRegion()\"},\n    {\"_ZNK5clang4ento12StringRegion7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::StringRegion::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento12StringRegion11isBoundableEv\", \"clang::ento::StringRegion::isBoundable() const\"},\n    {\"_ZNK5clang4ento12StringRegion12getValueTypeEv\", \"clang::ento::StringRegion::getValueType() const\"},\n    {\"_ZNK5clang4ento11TypedRegion15getLocationTypeEv\", \"clang::ento::TypedRegion::getLocationType() const\"},\n    {\"_ZN5clang4ento21CompoundLiteralRegionD1Ev\", \"clang::ento::CompoundLiteralRegion::~CompoundLiteralRegion()\"},\n    {\"_ZN5clang4ento21CompoundLiteralRegionD0Ev\", \"clang::ento::CompoundLiteralRegion::~CompoundLiteralRegion()\"},\n    {\"_ZNK5clang4ento21CompoundLiteralRegion11isBoundableEv\", \"clang::ento::CompoundLiteralRegion::isBoundable() const\"},\n    {\"_ZNK5clang4ento21CompoundLiteralRegion12getValueTypeEv\", \"clang::ento::CompoundLiteralRegion::getValueType() const\"},\n    {\"_ZN5clang4ento10DeclRegionD1Ev\", \"clang::ento::DeclRegion::~DeclRegion()\"},\n    {\"_ZN5clang4ento10DeclRegionD0Ev\", \"clang::ento::DeclRegion::~DeclRegion()\"},\n    {\"_ZNK5clang4ento11TypedRegion11isBoundableEv\", \"clang::ento::TypedRegion::isBoundable() const\"},\n    {\"_ZN5clang4ento9VarRegionD1Ev\", \"clang::ento::VarRegion::~VarRegion()\"},\n    {\"_ZN5clang4ento9VarRegionD0Ev\", \"clang::ento::VarRegion::~VarRegion()\"},\n    {\"_ZNK5clang4ento9VarRegion12getValueTypeEv\", \"clang::ento::VarRegion::getValueType() const\"},\n    {\"_ZN5clang4ento13CXXThisRegionD1Ev\", \"clang::ento::CXXThisRegion::~CXXThisRegion()\"},\n    {\"_ZN5clang4ento13CXXThisRegionD0Ev\", \"clang::ento::CXXThisRegion::~CXXThisRegion()\"},\n    {\"_ZNK5clang4ento13CXXThisRegion12getValueTypeEv\", \"clang::ento::CXXThisRegion::getValueType() const\"},\n    {\"_ZN5clang4ento11FieldRegionD1Ev\", \"clang::ento::FieldRegion::~FieldRegion()\"},\n    {\"_ZN5clang4ento11FieldRegionD0Ev\", \"clang::ento::FieldRegion::~FieldRegion()\"},\n    {\"_ZNK5clang4ento11FieldRegion12getValueTypeEv\", \"clang::ento::FieldRegion::getValueType() const\"},\n    {\"_ZN5clang4ento14ObjCIvarRegionD1Ev\", \"clang::ento::ObjCIvarRegion::~ObjCIvarRegion()\"},\n    {\"_ZN5clang4ento14ObjCIvarRegionD0Ev\", \"clang::ento::ObjCIvarRegion::~ObjCIvarRegion()\"},\n    {\"_ZNK5clang4ento14ObjCIvarRegion12getValueTypeEv\", \"clang::ento::ObjCIvarRegion::getValueType() const\"},\n    {\"_ZN5clang4ento13ElementRegionD1Ev\", \"clang::ento::ElementRegion::~ElementRegion()\"},\n    {\"_ZN5clang4ento13ElementRegionD0Ev\", \"clang::ento::ElementRegion::~ElementRegion()\"},\n    {\"_ZNK5clang4ento13ElementRegion12getValueTypeEv\", \"clang::ento::ElementRegion::getValueType() const\"},\n    {\"_ZN5clang4ento19CXXTempObjectRegionD1Ev\", \"clang::ento::CXXTempObjectRegion::~CXXTempObjectRegion()\"},\n    {\"_ZN5clang4ento19CXXTempObjectRegionD0Ev\", \"clang::ento::CXXTempObjectRegion::~CXXTempObjectRegion()\"},\n    {\"_ZNK5clang4ento19CXXTempObjectRegion12getValueTypeEv\", \"clang::ento::CXXTempObjectRegion::getValueType() const\"},\n    {\"_ZN5clang4ento19CXXBaseObjectRegionD1Ev\", \"clang::ento::CXXBaseObjectRegion::~CXXBaseObjectRegion()\"},\n    {\"_ZN5clang4ento19CXXBaseObjectRegionD0Ev\", \"clang::ento::CXXBaseObjectRegion::~CXXBaseObjectRegion()\"},\n    {\"_ZN5clang4ento11TypedRegionD1Ev\", \"clang::ento::TypedRegion::~TypedRegion()\"},\n    {\"_ZN5clang4ento11TypedRegionD0Ev\", \"clang::ento::TypedRegion::~TypedRegion()\"},\n    {\"_ZN5clang4ento14CodeTextRegionD1Ev\", \"clang::ento::CodeTextRegion::~CodeTextRegion()\"},\n    {\"_ZN5clang4ento14CodeTextRegionD0Ev\", \"clang::ento::CodeTextRegion::~CodeTextRegion()\"},\n    {\"_ZN5clang4ento18UnknownSpaceRegionD1Ev\", \"clang::ento::UnknownSpaceRegion::~UnknownSpaceRegion()\"},\n    {\"_ZN5clang4ento18UnknownSpaceRegionD0Ev\", \"clang::ento::UnknownSpaceRegion::~UnknownSpaceRegion()\"},\n    {\"_ZN5clang4ento15HeapSpaceRegionD1Ev\", \"clang::ento::HeapSpaceRegion::~HeapSpaceRegion()\"},\n    {\"_ZN5clang4ento15HeapSpaceRegionD0Ev\", \"clang::ento::HeapSpaceRegion::~HeapSpaceRegion()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento14CodeTextRegionEPNS2_23StaticGlobalSpaceRegionENS_12DenseMapInfoIS5_EENS8_IS7_EEE16InsertIntoBucketERKS5_RKS7_PSt4pairIS5_S7_E\", \"llvm::DenseMap<clang::ento::CodeTextRegion const*, clang::ento::StaticGlobalSpaceRegion*, llvm::DenseMapInfo<clang::ento::CodeTextRegion const*>, llvm::DenseMapInfo<clang::ento::StaticGlobalSpaceRegion*> >::InsertIntoBucket(clang::ento::CodeTextRegion const* const&, clang::ento::StaticGlobalSpaceRegion* const&, std::pair<clang::ento::CodeTextRegion const*, clang::ento::StaticGlobalSpaceRegion*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento14CodeTextRegionEPNS2_23StaticGlobalSpaceRegionENS_12DenseMapInfoIS5_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::ento::CodeTextRegion const*, clang::ento::StaticGlobalSpaceRegion*, llvm::DenseMapInfo<clang::ento::CodeTextRegion const*>, llvm::DenseMapInfo<clang::ento::StaticGlobalSpaceRegion*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento18GlobalsSpaceRegionD1Ev\", \"clang::ento::GlobalsSpaceRegion::~GlobalsSpaceRegion()\"},\n    {\"_ZN5clang4ento18GlobalsSpaceRegionD0Ev\", \"clang::ento::GlobalsSpaceRegion::~GlobalsSpaceRegion()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17StackFrameContextEPNS1_4ento25StackArgumentsSpaceRegionENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::StackFrameContext const*, clang::ento::StackArgumentsSpaceRegion*, llvm::DenseMapInfo<clang::StackFrameContext const*>, llvm::DenseMapInfo<clang::ento::StackArgumentsSpaceRegion*> >::InsertIntoBucket(clang::StackFrameContext const* const&, clang::ento::StackArgumentsSpaceRegion* const&, std::pair<clang::StackFrameContext const*, clang::ento::StackArgumentsSpaceRegion*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17StackFrameContextEPNS1_4ento25StackArgumentsSpaceRegionENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::StackFrameContext const*, clang::ento::StackArgumentsSpaceRegion*, llvm::DenseMapInfo<clang::StackFrameContext const*>, llvm::DenseMapInfo<clang::ento::StackArgumentsSpaceRegion*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17StackFrameContextEPNS1_4ento22StackLocalsSpaceRegionENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::StackFrameContext const*, clang::ento::StackLocalsSpaceRegion*, llvm::DenseMapInfo<clang::StackFrameContext const*>, llvm::DenseMapInfo<clang::ento::StackLocalsSpaceRegion*> >::InsertIntoBucket(clang::StackFrameContext const* const&, clang::ento::StackLocalsSpaceRegion* const&, std::pair<clang::StackFrameContext const*, clang::ento::StackLocalsSpaceRegion*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17StackFrameContextEPNS1_4ento22StackLocalsSpaceRegionENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::StackFrameContext const*, clang::ento::StackLocalsSpaceRegion*, llvm::DenseMapInfo<clang::StackFrameContext const*>, llvm::DenseMapInfo<clang::ento::StackLocalsSpaceRegion*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento25StackArgumentsSpaceRegionD1Ev\", \"clang::ento::StackArgumentsSpaceRegion::~StackArgumentsSpaceRegion()\"},\n    {\"_ZN5clang4ento25StackArgumentsSpaceRegionD0Ev\", \"clang::ento::StackArgumentsSpaceRegion::~StackArgumentsSpaceRegion()\"},\n    {\"_ZN5clang4ento22StackLocalsSpaceRegionD1Ev\", \"clang::ento::StackLocalsSpaceRegion::~StackLocalsSpaceRegion()\"},\n    {\"_ZN5clang4ento22StackLocalsSpaceRegionD0Ev\", \"clang::ento::StackLocalsSpaceRegion::~StackLocalsSpaceRegion()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento9MemRegionEED0Ev\", \"llvm::FoldingSet<clang::ento::MemRegion>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento9MemRegionEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::MemRegion>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento9MemRegionEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::MemRegion>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento9MemRegionEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::MemRegion>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento11ObjCMessage7getTypeERNS_10ASTContextE\", \"clang::ento::ObjCMessage::getType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento11ObjCMessage11getSelectorEv\", \"clang::ento::ObjCMessage::getSelector() const\"},\n    {\"_ZNK5clang4ento11ObjCMessage13getMethodDeclEv\", \"clang::ento::ObjCMessage::getMethodDecl() const\"},\n    {\"_ZNK5clang4ento11ObjCMessage20getReceiverInterfaceEv\", \"clang::ento::ObjCMessage::getReceiverInterface() const\"},\n    {\"_ZNK5clang4ento11ObjCMessage10getArgExprEj\", \"clang::ento::ObjCMessage::getArgExpr(unsigned int) const\"},\n    {\"_ZNK5clang4ento17CallOrObjCMessage13getResultTypeERNS_10ASTContextE\", \"clang::ento::CallOrObjCMessage::getResultType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento17CallOrObjCMessage23getArgSValAsScalarOrLocEj\", \"clang::ento::CallOrObjCMessage::getArgSValAsScalarOrLoc(unsigned int) const\"},\n    {\"_ZNK5clang4ento24PathDiagnosticMacroPiece13containsEventEv\", \"clang::ento::PathDiagnosticMacroPiece::containsEvent() const\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceC1EN4llvm9StringRefENS1_4KindENS1_11DisplayHintE\", \"clang::ento::PathDiagnosticPiece::PathDiagnosticPiece(llvm::StringRef, clang::ento::PathDiagnosticPiece::Kind, clang::ento::PathDiagnosticPiece::DisplayHint)\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceC2EN4llvm9StringRefENS1_4KindENS1_11DisplayHintE\", \"clang::ento::PathDiagnosticPiece::PathDiagnosticPiece(llvm::StringRef, clang::ento::PathDiagnosticPiece::Kind, clang::ento::PathDiagnosticPiece::DisplayHint)\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceC1ENS1_4KindENS1_11DisplayHintE\", \"clang::ento::PathDiagnosticPiece::PathDiagnosticPiece(clang::ento::PathDiagnosticPiece::Kind, clang::ento::PathDiagnosticPiece::DisplayHint)\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceC2ENS1_4KindENS1_11DisplayHintE\", \"clang::ento::PathDiagnosticPiece::PathDiagnosticPiece(clang::ento::PathDiagnosticPiece::Kind, clang::ento::PathDiagnosticPiece::DisplayHint)\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceD0Ev\", \"clang::ento::PathDiagnosticPiece::~PathDiagnosticPiece()\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceD1Ev\", \"clang::ento::PathDiagnosticPiece::~PathDiagnosticPiece()\"},\n    {\"_ZN5clang4ento19PathDiagnosticPieceD2Ev\", \"clang::ento::PathDiagnosticPiece::~PathDiagnosticPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticEventPieceD0Ev\", \"clang::ento::PathDiagnosticEventPiece::~PathDiagnosticEventPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticEventPieceD1Ev\", \"clang::ento::PathDiagnosticEventPiece::~PathDiagnosticEventPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticEventPieceD2Ev\", \"clang::ento::PathDiagnosticEventPiece::~PathDiagnosticEventPiece()\"},\n    {\"_ZN5clang4ento30PathDiagnosticControlFlowPieceD0Ev\", \"clang::ento::PathDiagnosticControlFlowPiece::~PathDiagnosticControlFlowPiece()\"},\n    {\"_ZN5clang4ento30PathDiagnosticControlFlowPieceD1Ev\", \"clang::ento::PathDiagnosticControlFlowPiece::~PathDiagnosticControlFlowPiece()\"},\n    {\"_ZN5clang4ento30PathDiagnosticControlFlowPieceD2Ev\", \"clang::ento::PathDiagnosticControlFlowPiece::~PathDiagnosticControlFlowPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticMacroPieceD0Ev\", \"clang::ento::PathDiagnosticMacroPiece::~PathDiagnosticMacroPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticMacroPieceD1Ev\", \"clang::ento::PathDiagnosticMacroPiece::~PathDiagnosticMacroPiece()\"},\n    {\"_ZN5clang4ento24PathDiagnosticMacroPieceD2Ev\", \"clang::ento::PathDiagnosticMacroPiece::~PathDiagnosticMacroPiece()\"},\n    {\"_ZN5clang4ento14PathDiagnosticC1Ev\", \"clang::ento::PathDiagnostic::PathDiagnostic()\"},\n    {\"_ZN5clang4ento14PathDiagnosticC2Ev\", \"clang::ento::PathDiagnostic::PathDiagnostic()\"},\n    {\"_ZN5clang4ento14PathDiagnosticD1Ev\", \"clang::ento::PathDiagnostic::~PathDiagnostic()\"},\n    {\"_ZN5clang4ento14PathDiagnosticD2Ev\", \"clang::ento::PathDiagnostic::~PathDiagnostic()\"},\n    {\"_ZN5clang4ento14PathDiagnostic9resetPathEb\", \"clang::ento::PathDiagnostic::resetPath(bool)\"},\n    {\"_ZN5clang4ento14PathDiagnosticC1EN4llvm9StringRefES3_S3_\", \"clang::ento::PathDiagnostic::PathDiagnostic(llvm::StringRef, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang4ento14PathDiagnosticC2EN4llvm9StringRefES3_S3_\", \"clang::ento::PathDiagnostic::PathDiagnostic(llvm::StringRef, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang4ento20PathDiagnosticClient16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::ento::PathDiagnosticClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZNK5clang4ento22PathDiagnosticLocation10asLocationEv\", \"clang::ento::PathDiagnosticLocation::asLocation() const\"},\n    {\"_ZNK5clang4ento22PathDiagnosticLocation7asRangeEv\", \"clang::ento::PathDiagnosticLocation::asRange() const\"},\n    {\"_ZN5clang4ento22PathDiagnosticLocation7flattenEv\", \"clang::ento::PathDiagnosticLocation::flatten()\"},\n    {\"_ZNK5clang4ento22PathDiagnosticLocation7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnosticLocation::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento19PathDiagnosticPiece7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnosticPiece::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento23PathDiagnosticSpotPiece7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnosticSpotPiece::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento30PathDiagnosticControlFlowPiece7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnosticControlFlowPiece::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento24PathDiagnosticMacroPiece7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnosticMacroPiece::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4ento14PathDiagnostic7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::PathDiagnostic::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNSt11_Deque_baseIPN5clang4ento19PathDiagnosticPieceESaIS3_EE17_M_initialize_mapEm\", \"std::_Deque_base<clang::ento::PathDiagnosticPiece*, std::allocator<clang::ento::PathDiagnosticPiece*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZN5clang4ento23PathDiagnosticSpotPieceC2ERKNS0_22PathDiagnosticLocationEN4llvm9StringRefENS0_19PathDiagnosticPiece4KindEb\", \"clang::ento::PathDiagnosticSpotPiece::PathDiagnosticSpotPiece(clang::ento::PathDiagnosticLocation const&, llvm::StringRef, clang::ento::PathDiagnosticPiece::Kind, bool)\"},\n    {\"_ZN5clang4ento27createPlistDiagnosticClientERKSsRKNS_12PreprocessorEPNS0_20PathDiagnosticClientE\", \"clang::ento::createPlistDiagnosticClient(std::string const&, clang::Preprocessor const&, clang::ento::PathDiagnosticClient*)\"},\n    {\"_ZN12_GLOBAL__N_116PlistDiagnosticsD1Ev\", \"(anonymous namespace)::PlistDiagnostics::~PlistDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_116PlistDiagnosticsD0Ev\", \"(anonymous namespace)::PlistDiagnostics::~PlistDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_116PlistDiagnostics16FlushDiagnosticsEPN4llvm15SmallVectorImplISsEE\", \"(anonymous namespace)::PlistDiagnostics::FlushDiagnostics(llvm::SmallVectorImpl<std::string>*)\"},\n    {\"_ZNK12_GLOBAL__N_116PlistDiagnostics7getNameEv\", \"(anonymous namespace)::PlistDiagnostics::getName() const\"},\n    {\"_ZN12_GLOBAL__N_116PlistDiagnostics20HandlePathDiagnosticEPKN5clang4ento14PathDiagnosticE\", \"(anonymous namespace)::PlistDiagnostics::HandlePathDiagnostic(clang::ento::PathDiagnostic const*)\"},\n    {\"_ZNK12_GLOBAL__N_116PlistDiagnostics19getGenerationSchemeEv\", \"(anonymous namespace)::PlistDiagnostics::getGenerationScheme() const\"},\n    {\"_ZNK12_GLOBAL__N_116PlistDiagnostics28supportsLogicalOpControlFlowEv\", \"(anonymous namespace)::PlistDiagnostics::supportsLogicalOpControlFlow() const\"},\n    {\"_ZNK12_GLOBAL__N_116PlistDiagnostics21supportsAllBlockEdgesEv\", \"(anonymous namespace)::PlistDiagnostics::supportsAllBlockEdges() const\"},\n    {\"_ZNK12_GLOBAL__N_116PlistDiagnostics21useVerboseDescriptionEv\", \"(anonymous namespace)::PlistDiagnostics::useVerboseDescription() const\"},\n    {\"_Z6AddFIDRN4llvm8DenseMapIN5clang6FileIDEjNS_12DenseMapInfoIS2_EENS3_IjEEEERNS_15SmallVectorImplIS2_EEPKNS1_13SourceManagerENS1_14SourceLocationE\", \"AddFID(llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> >&, llvm::SmallVectorImpl<clang::FileID>&, clang::SourceManager const*, clang::SourceLocation)\"},\n    {\"_Z10EmitStringRN4llvm11raw_ostreamERKSs\", \"EmitString(llvm::raw_ostream&, std::string const&)\"},\n    {\"_Z12EmitLocationRN4llvm11raw_ostreamERKN5clang13SourceManagerERKNS2_11LangOptionsENS2_14SourceLocationERKNS_8DenseMapINS2_6FileIDEjNS_12DenseMapInfoISB_EENSC_IjEEEEjb\", \"EmitLocation(llvm::raw_ostream&, clang::SourceManager const&, clang::LangOptions const&, clang::SourceLocation, llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> > const&, unsigned int, bool)\"},\n    {\"_Z11ReportEventRN4llvm11raw_ostreamERKN5clang4ento19PathDiagnosticPieceERKNS_8DenseMapINS2_6FileIDEjNS_12DenseMapInfoIS8_EENS9_IjEEEERKNS2_13SourceManagerERKNS2_11LangOptionsEj\", \"ReportEvent(llvm::raw_ostream&, clang::ento::PathDiagnosticPiece const&, llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> > const&, clang::SourceManager const&, clang::LangOptions const&, unsigned int)\"},\n    {\"_Z11ReportMacroRN4llvm11raw_ostreamERKN5clang4ento24PathDiagnosticMacroPieceERKNS_8DenseMapINS2_6FileIDEjNS_12DenseMapInfoIS8_EENS9_IjEEEERKNS2_13SourceManagerERKNS2_11LangOptionsEj\", \"ReportMacro(llvm::raw_ostream&, clang::ento::PathDiagnosticMacroPiece const&, llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> > const&, clang::SourceManager const&, clang::LangOptions const&, unsigned int)\"},\n    {\"_Z9EmitRangeRN4llvm11raw_ostreamERKN5clang13SourceManagerERKNS2_11LangOptionsENS2_4ento19PathDiagnosticRangeERKNS_8DenseMapINS2_6FileIDEjNS_12DenseMapInfoISC_EENSD_IjEEEEj\", \"EmitRange(llvm::raw_ostream&, clang::SourceManager const&, clang::LangOptions const&, clang::ento::PathDiagnosticRange, llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> > const&, unsigned int)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPPKN5clang4ento14PathDiagnosticESt6vectorIS6_SaIS6_EEEElN12_GLOBAL__N_118CompareDiagnosticsEEvT_SE_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, long, (anonymous namespace)::CompareDiagnostics>(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, __gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, long, (anonymous namespace)::CompareDiagnostics)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPPKN5clang4ento14PathDiagnosticESt6vectorIS6_SaIS6_EEEEN12_GLOBAL__N_118CompareDiagnosticsEEvT_SE_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, (anonymous namespace)::CompareDiagnostics>(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, __gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, (anonymous namespace)::CompareDiagnostics)\"},\n    {\"_ZNK12_GLOBAL__N_118CompareDiagnosticsclEPKN5clang4ento14PathDiagnosticES5_\", \"(anonymous namespace)::CompareDiagnostics::operator()(clang::ento::PathDiagnostic const*, clang::ento::PathDiagnostic const*) const\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPPKN5clang4ento14PathDiagnosticESt6vectorIS6_SaIS6_EEEElS6_N12_GLOBAL__N_118CompareDiagnosticsEEvT_T0_SF_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, long, clang::ento::PathDiagnostic const*, (anonymous namespace)::CompareDiagnostics>(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, long, long, clang::ento::PathDiagnostic const*, (anonymous namespace)::CompareDiagnostics)\"},\n    {\"_ZNSt6vectorIPKN5clang4ento14PathDiagnosticESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::ento::PathDiagnostic const**, std::vector<clang::ento::PathDiagnostic const*, std::allocator<clang::ento::PathDiagnostic const*> > >, clang::ento::PathDiagnostic const* const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang6FileIDEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::FileID const&, unsigned int const&, std::pair<clang::FileID, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang6FileIDEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<clang::FileID, unsigned int, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento28CreateRangeConstraintManagerERNS0_14GRStateManagerERNS0_9SubEngineE\", \"clang::ento::CreateRangeConstraintManager(clang::ento::GRStateManager&, clang::ento::SubEngine&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManagerD1Ev\", \"(anonymous namespace)::RangeConstraintManager::~RangeConstraintManager()\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManagerD0Ev\", \"(anonymous namespace)::RangeConstraintManager::~RangeConstraintManager()\"},\n    {\"_ZNK12_GLOBAL__N_122RangeConstraintManager9getSymValEPKN5clang4ento7GRStateEPKNS2_10SymbolDataE\", \"(anonymous namespace)::RangeConstraintManager::getSymVal(clang::ento::GRState const*, clang::ento::SymbolData const*) const\"},\n    {\"_ZNK12_GLOBAL__N_122RangeConstraintManager7isEqualEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntE\", \"(anonymous namespace)::RangeConstraintManager::isEqual(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&) const\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager18removeDeadBindingsEPKN5clang4ento7GRStateERNS2_12SymbolReaperE\", \"(anonymous namespace)::RangeConstraintManager::removeDeadBindings(clang::ento::GRState const*, clang::ento::SymbolReaper&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager5printEPKN5clang4ento7GRStateERN4llvm11raw_ostreamEPKcSA_\", \"(anonymous namespace)::RangeConstraintManager::print(clang::ento::GRState const*, llvm::raw_ostream&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymNEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymNE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymEQEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymEQ(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymLTEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymLT(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymGTEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymGT(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymLEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymLE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager11assumeSymGEEPKN5clang4ento7GRStateEPKNS2_10SymbolDataERKN4llvm6APSIntESC_\", \"(anonymous namespace)::RangeConstraintManager::assumeSymGE(clang::ento::GRState const*, clang::ento::SymbolData const*, llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_122RangeConstraintManager8GetRangeEPKN5clang4ento7GRStateEPKNS2_10SymbolDataE\", \"(anonymous namespace)::RangeConstraintManager::GetRange(clang::ento::GRState const*, clang::ento::SymbolData const*)\"},\n    {\"_ZNK12_GLOBAL__N_18RangeSet9IntersectERN5clang4ento17BasicValueFactoryERN4llvm12ImmutableSetINS_5RangeENS_10RangeTraitEE7FactoryERKNS5_6APSIntESE_\", \"(anonymous namespace)::RangeSet::Intersect(clang::ento::BasicValueFactory&, llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>::Factory&, llvm::APSInt const&, llvm::APSInt const&) const\"},\n    {\"_ZNK5clang4ento7GRState3setIN12_GLOBAL__N_115ConstraintRangeEEEPKS1_NS0_12GRStateTraitIT_E8key_typeENS9_10value_typeE\", \"clang::ento::GRState const* clang::ento::GRState::set<(anonymous namespace)::ConstraintRange>(clang::ento::GRStateTrait<(anonymous namespace)::ConstraintRange>::key_type, clang::ento::GRStateTrait<(anonymous namespace)::ConstraintRange>::value_type) const\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_18RangeSetENS2_16ImutKeyValueInfoIS6_S8_EEEEE13CreateContextERNS2_16BumpPtrAllocatorE\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> > >::CreateContext(llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento19GRStatePartialTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_18RangeSetENS2_16ImutKeyValueInfoIS6_S8_EEEEE13DeleteContextEPv\", \"clang::ento::GRStatePartialTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> > >::DeleteContext(void*)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEEENS_12DenseMapInfoIjEENSD_ISC_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEEESaISC_EE9push_backERKSC_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >* const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::operator++()\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorIN12_GLOBAL__N_110RangeTraitEEppEv\", \"llvm::ImutAVLTreeGenericIterator<(anonymous namespace)::RangeTrait>::operator++()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE12add_internalERKSt4pairIS6_S8_EPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::add_internal(std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE13markImmutableEPNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE10createNodeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE11balanceTreeEPNS_11ImutAVLTreeIS9_EERKSt4pairIS6_S8_ESD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*, std::pair<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm11ImutAVLTreeIN12_GLOBAL__N_110RangeTraitEE7destroyEv\", \"llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeIN12_GLOBAL__N_110RangeTraitEEENS_12DenseMapInfoIjEENS6_IS5_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeIN12_GLOBAL__N_110RangeTraitEE13computeDigestEv\", \"llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeIN12_GLOBAL__N_110RangeTraitEEESaIS5_EE9push_backERKS5_\", \"std::vector<llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*, std::allocator<llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*> >::push_back(llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>* const&)\"},\n    {\"_ZNK12_GLOBAL__N_18RangeSet16IntersectInRangeERN5clang4ento17BasicValueFactoryERN4llvm12ImmutableSetINS_5RangeENS_10RangeTraitEE7FactoryERKNS5_6APSIntESE_RS9_RNS9_8iteratorESH_\", \"(anonymous namespace)::RangeSet::IntersectInRange(clang::ento::BasicValueFactory&, llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>::Factory&, llvm::APSInt const&, llvm::APSInt const&, llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>&, llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>::iterator&, llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>::iterator&) const\"},\n    {\"_ZN4llvm12ImmutableSetIN12_GLOBAL__N_15RangeENS1_10RangeTraitEE7Factory3addES4_RKS2_\", \"llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>::Factory::add(llvm::ImmutableSet<(anonymous namespace)::Range, (anonymous namespace)::RangeTrait>, (anonymous namespace)::Range const&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryIN12_GLOBAL__N_110RangeTraitEE12add_internalERKNS1_5RangeEPNS_11ImutAVLTreeIS2_EE\", \"llvm::ImutAVLFactory<(anonymous namespace)::RangeTrait>::add_internal((anonymous namespace)::Range const&, llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryIN12_GLOBAL__N_110RangeTraitEE13markImmutableEPNS_11ImutAVLTreeIS2_EE\", \"llvm::ImutAVLFactory<(anonymous namespace)::RangeTrait>::markImmutable(llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryIN12_GLOBAL__N_110RangeTraitEE10createNodeEPNS_11ImutAVLTreeIS2_EERKNS1_5RangeES6_\", \"llvm::ImutAVLFactory<(anonymous namespace)::RangeTrait>::createNode(llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*, (anonymous namespace)::Range const&, llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryIN12_GLOBAL__N_110RangeTraitEE11balanceTreeEPNS_11ImutAVLTreeIS2_EERKNS1_5RangeES6_\", \"llvm::ImutAVLFactory<(anonymous namespace)::RangeTrait>::balanceTree(llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*, (anonymous namespace)::Range const&, llvm::ImutAVLTree<(anonymous namespace)::RangeTrait>*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE15remove_internalERKS6_PNS_11ImutAVLTreeIS9_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::remove_internal(clang::ento::SymbolData const* const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIPKN5clang4ento10SymbolDataEN12_GLOBAL__N_18RangeSetEEEE16removeMinBindingEPNS_11ImutAVLTreeIS9_EERSD_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RangeSet> >*&)\"},\n    {\"_ZN5clang4ento17ConstraintManager7EndPathEPKNS0_7GRStateE\", \"clang::ento::ConstraintManager::EndPath(clang::ento::GRState const*)\"},\n    {\"_ZN4llvm6APSInt11getMaxValueEjb\", \"llvm::APSInt::getMaxValue(unsigned int, bool)\"},\n    {\"_ZN4llvm6APSInt11getMinValueEjb\", \"llvm::APSInt::getMinValue(unsigned int, bool)\"},\n    {\"_ZN5clang4ento24CreateRegionStoreManagerERNS0_14GRStateManagerE\", \"clang::ento::CreateRegionStoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento34CreateFieldsOnlyRegionStoreManagerERNS0_14GRStateManagerE\", \"clang::ento::CreateFieldsOnlyRegionStoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManagerD1Ev\", \"(anonymous namespace)::RegionStoreManager::~RegionStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManagerD0Ev\", \"(anonymous namespace)::RegionStoreManager::~RegionStoreManager()\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager8RetrieveEPKvN5clang4ento3LocENS3_8QualTypeE\", \"(anonymous namespace)::RegionStoreManager::Retrieve(void const*, clang::ento::Loc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager4BindEPKvN5clang4ento3LocENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::Bind(void const*, clang::ento::Loc, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager11BindDefaultEPKvPKN5clang4ento9MemRegionENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::BindDefault(void const*, clang::ento::MemRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager6RemoveEPKvN5clang4ento3LocE\", \"(anonymous namespace)::RegionStoreManager::Remove(void const*, clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager19BindCompoundLiteralEPKvPKN5clang19CompoundLiteralExprEPKNS3_15LocationContextENS3_4ento4SValE\", \"(anonymous namespace)::RegionStoreManager::BindCompoundLiteral(void const*, clang::CompoundLiteralExpr const*, clang::LocationContext const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager15getInitialStoreEPKN5clang15LocationContextE\", \"(anonymous namespace)::RegionStoreManager::getInitialStore(clang::LocationContext const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager15getSubRegionMapEPKv\", \"(anonymous namespace)::RegionStoreManager::getSubRegionMap(void const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager17getSizeInElementsEPKN5clang4ento7GRStateEPKNS2_9MemRegionENS1_8QualTypeE\", \"(anonymous namespace)::RegionStoreManager::getSizeInElements(clang::ento::GRState const*, clang::ento::MemRegion const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager14ArrayToPointerEN5clang4ento3LocE\", \"(anonymous namespace)::RegionStoreManager::ArrayToPointer(clang::ento::Loc)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager17evalDerivedToBaseEN5clang4ento4SValENS1_8QualTypeE\", \"(anonymous namespace)::RegionStoreManager::evalDerivedToBase(clang::ento::SVal, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager18removeDeadBindingsEPKvPKN5clang17StackFrameContextERNS3_4ento12SymbolReaperERN4llvm15SmallVectorImplIPKNS7_9MemRegionEEE\", \"(anonymous namespace)::RegionStoreManager::removeDeadBindings(void const*, clang::StackFrameContext const*, clang::ento::SymbolReaper&, llvm::SmallVectorImpl<clang::ento::MemRegion const*>&)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager8BindDeclEPKvPKN5clang4ento9VarRegionENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::BindDecl(void const*, clang::ento::VarRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager18BindDeclWithNoInitEPKvPKN5clang4ento9VarRegionE\", \"(anonymous namespace)::RegionStoreManager::BindDeclWithNoInit(void const*, clang::ento::VarRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager17InvalidateRegionsEPKvPKPKN5clang4ento9MemRegionES9_PKNS3_4ExprEjPN4llvm8DenseSetIPKNS4_10SymbolDataENSD_12DenseMapInfoISH_EEEEbPNSD_11SmallVectorIS7_Lj8EEE\", \"(anonymous namespace)::RegionStoreManager::InvalidateRegions(void const*, clang::ento::MemRegion const* const*, clang::ento::MemRegion const* const*, clang::Expr const*, unsigned int, llvm::DenseSet<clang::ento::SymbolData const*, llvm::DenseMapInfo<clang::ento::SymbolData const*> >*, bool, llvm::SmallVector<clang::ento::MemRegion const*, 8u>*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager15enterStackFrameEPKN5clang4ento7GRStateEPKNS1_17StackFrameContextE\", \"(anonymous namespace)::RegionStoreManager::enterStackFrame(clang::ento::GRState const*, clang::StackFrameContext const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager5printEPKvRN4llvm11raw_ostreamEPKcS7_\", \"(anonymous namespace)::RegionStoreManager::print(void const*, llvm::raw_ostream&, char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager12iterBindingsEPKvRN5clang4ento12StoreManager15BindingsHandlerE\", \"(anonymous namespace)::RegionStoreManager::iterBindings(void const*, clang::ento::StoreManager::BindingsHandler&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::destroy()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEEENS_12DenseMapInfoIjEENSB_ISA_EEEixERKj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*> >::operator[](unsigned int const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEEESaISA_EE9push_backERKSA_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*> >::push_back(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >* const&)\"},\n    {\"_ZN4llvm26ImutAVLTreeInOrderIteratorINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEEppEv\", \"llvm::ImutAVLTreeInOrderIterator<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::operator++()\"},\n    {\"_ZN12_GLOBAL__N_115ClusterAnalysisINS_23InvalidateRegionsWorkerEE13AddToWorkListEPKN5clang4ento9MemRegionE\", \"(anonymous namespace)::ClusterAnalysis<(anonymous namespace)::InvalidateRegionsWorker>::AddToWorkList(clang::ento::MemRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager10addBindingEN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEES3_S6_\", \"(anonymous namespace)::RegionStoreManager::addBinding(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >, (anonymous namespace)::BindingKey, clang::ento::SVal)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE12add_internalERKSt4pairIS3_S6_EPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::add_internal(std::pair<(anonymous namespace)::BindingKey, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE13markImmutableEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::markImmutable(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE10createNodeEPNS_11ImutAVLTreeIS7_EERKSt4pairIS3_S6_ESB_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::createNode(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*, std::pair<(anonymous namespace)::BindingKey, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE11balanceTreeEPNS_11ImutAVLTreeIS7_EERKSt4pairIS3_S6_ESB_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::balanceTree(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*, std::pair<(anonymous namespace)::BindingKey, clang::ento::SVal> const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager13removeBindingEN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEES3_\", \"(anonymous namespace)::RegionStoreManager::removeBinding(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >, (anonymous namespace)::BindingKey)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE15remove_internalERKS3_PNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::remove_internal((anonymous namespace)::BindingKey const&, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_16ImutKeyValueInfoIN12_GLOBAL__N_110BindingKeyEN5clang4ento4SValEEEE16removeMinBindingEPNS_11ImutAVLTreeIS7_EERSB_\", \"llvm::ImutAVLFactory<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >::removeMinBinding(llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*, llvm::ImutAVLTree<llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >*&)\"},\n    {\"_ZN12_GLOBAL__N_123InvalidateRegionsWorker12VisitBindingEN5clang4ento4SValE\", \"(anonymous namespace)::InvalidateRegionsWorker::VisitBinding(clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_115ClusterAnalysisINS_23InvalidateRegionsWorkerEE10getClusterEPKN5clang4ento9MemRegionE\", \"(anonymous namespace)::ClusterAnalysis<(anonymous namespace)::InvalidateRegionsWorker>::getCluster(clang::ento::MemRegion const*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionEPNS1_10BumpVectorIN12_GLOBAL__N_110BindingKeyEEENS_12DenseMapInfoIS5_EENSB_ISA_EEEixERKS5_\", \"llvm::DenseMap<clang::ento::MemRegion const*, clang::BumpVector<(anonymous namespace)::BindingKey>*, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<clang::BumpVector<(anonymous namespace)::BindingKey>*> >::operator[](clang::ento::MemRegion const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang10BumpVectorIN12_GLOBAL__N_110BindingKeyEEEjNS_12DenseMapInfoIS7_EENS8_IjEEEixERKS7_\", \"llvm::DenseMap<clang::BumpVector<(anonymous namespace)::BindingKey> const*, unsigned int, llvm::DenseMapInfo<clang::BumpVector<(anonymous namespace)::BindingKey> const*>, llvm::DenseMapInfo<unsigned int> >::operator[](clang::BumpVector<(anonymous namespace)::BindingKey> const* const&)\"},\n    {\"_ZN5clang10BumpVectorIN12_GLOBAL__N_110BindingKeyEE9push_backERKS2_RNS_17BumpVectorContextE\", \"clang::BumpVector<(anonymous namespace)::BindingKey>::push_back((anonymous namespace)::BindingKey const&, clang::BumpVectorContext&)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager9BindArrayEPKvPKN5clang4ento11TypedRegionENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::BindArray(void const*, clang::ento::TypedRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager10BindStructEPKvPKN5clang4ento11TypedRegionENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::BindStruct(void const*, clang::ento::TypedRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager16CopyLazyBindingsEN5clang4ento6nonloc15LazyCompoundValEPKvPKNS2_11TypedRegionE\", \"(anonymous namespace)::RegionStoreManager::CopyLazyBindings(clang::ento::nonloc::LazyCompoundVal, void const*, clang::ento::TypedRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager10KillStructEPKvPKN5clang4ento11TypedRegionENS4_4SValE\", \"(anonymous namespace)::RegionStoreManager::KillStruct(void const*, clang::ento::TypedRegion const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager26getRegionStoreSubRegionMapEPKv\", \"(anonymous namespace)::RegionStoreManager::getRegionStoreSubRegionMap(void const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager23RemoveSubRegionBindingsERN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEEPKNS5_9MemRegionERNS_23RegionStoreSubRegionMapE\", \"(anonymous namespace)::RegionStoreManager::RemoveSubRegionBindings(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >&, clang::ento::MemRegion const*, (anonymous namespace)::RegionStoreSubRegionMap&)\"},\n    {\"_ZN12_GLOBAL__N_123RegionStoreSubRegionMap7processERN4llvm15SmallVectorImplIPKN5clang4ento9SubRegionEEES7_\", \"(anonymous namespace)::RegionStoreSubRegionMap::process(llvm::SmallVectorImpl<clang::ento::SubRegion const*>&, clang::ento::SubRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_123RegionStoreSubRegionMapD1Ev\", \"(anonymous namespace)::RegionStoreSubRegionMap::~RegionStoreSubRegionMap()\"},\n    {\"_ZN12_GLOBAL__N_123RegionStoreSubRegionMapD0Ev\", \"(anonymous namespace)::RegionStoreSubRegionMap::~RegionStoreSubRegionMap()\"},\n    {\"_ZNK12_GLOBAL__N_123RegionStoreSubRegionMap14iterSubRegionsEPKN5clang4ento9MemRegionERNS2_12SubRegionMap7VisitorE\", \"(anonymous namespace)::RegionStoreSubRegionMap::iterSubRegions(clang::ento::MemRegion const*, clang::ento::SubRegionMap::Visitor&) const\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager23setImplicitDefaultValueEPKvPKN5clang4ento9MemRegionENS3_8QualTypeE\", \"(anonymous namespace)::RegionStoreManager::setImplicitDefaultValue(void const*, clang::ento::MemRegion const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_115ClusterAnalysisINS_24removeDeadBindingsWorkerEE13AddToWorkListEPKN5clang4ento9MemRegionE\", \"(anonymous namespace)::ClusterAnalysis<(anonymous namespace)::removeDeadBindingsWorker>::AddToWorkList(clang::ento::MemRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_124removeDeadBindingsWorker12VisitBindingEN5clang4ento4SValE\", \"(anonymous namespace)::removeDeadBindingsWorker::VisitBinding(clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager13RetrieveFieldEPKvPKN5clang4ento11FieldRegionE\", \"(anonymous namespace)::RegionStoreManager::RetrieveField(void const*, clang::ento::FieldRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager15RetrieveElementEPKvPKN5clang4ento13ElementRegionE\", \"(anonymous namespace)::RegionStoreManager::RetrieveElement(void const*, clang::ento::ElementRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager27RetrieveDerivedDefaultValueEN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEEPKNS5_9MemRegionEPKNS5_11TypedRegionENS4_8QualTypeE\", \"(anonymous namespace)::RegionStoreManager::RetrieveDerivedDefaultValue(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >, clang::ento::MemRegion const*, clang::ento::TypedRegion const*, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager17getDefaultBindingEN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEEPKNS5_9MemRegionE\", \"(anonymous namespace)::RegionStoreManager::getDefaultBinding(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >, clang::ento::MemRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager28RetrieveFieldOrElementCommonEPKvPKN5clang4ento11TypedRegionENS3_8QualTypeEPKNS4_9MemRegionE\", \"(anonymous namespace)::RegionStoreManager::RetrieveFieldOrElementCommon(void const*, clang::ento::TypedRegion const*, clang::QualType, clang::ento::MemRegion const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegionStoreManager14GetLazyBindingEN4llvm12ImmutableMapINS_10BindingKeyEN5clang4ento4SValENS1_16ImutKeyValueInfoIS3_S6_EEEEPKNS5_9MemRegionE\", \"(anonymous namespace)::RegionStoreManager::GetLazyBinding(llvm::ImmutableMap<(anonymous namespace)::BindingKey, clang::ento::SVal, llvm::ImutKeyValueInfo<(anonymous namespace)::BindingKey, clang::ento::SVal> >, clang::ento::MemRegion const*)\"},\n    {\"_ZN4llvm26ImutAVLTreeGenericIteratorINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEEppEv\", \"llvm::ImutAVLTreeGenericIterator<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::operator++()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionENS_12ImmutableSetIS5_NS_17ImutContainerInfoIS5_EEEENS_12DenseMapInfoIS5_EENSA_IS9_EEE6insertERKSt4pairIS5_S9_E\", \"llvm::DenseMap<clang::ento::MemRegion const*, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> >, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > > >::insert(std::pair<clang::ento::MemRegion const*, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > > const&)\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE7destroyEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::destroy()\"},\n    {\"_ZN4llvm11ImutAVLTreeINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE13computeDigestEv\", \"llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::computeDigest()\"},\n    {\"_ZNSt6vectorIPN4llvm11ImutAVLTreeINS0_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEEESaISA_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSA_SC_EERKSA_\", \"std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >**, std::vector<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, std::allocator<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*> > >, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >* const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEEENS_12DenseMapInfoIjEENSB_ISA_EEE16InsertIntoBucketERKjRKSA_PSt4pairIjSA_E\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*> >::InsertIntoBucket(unsigned int const&, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >* const&, std::pair<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_11ImutAVLTreeINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEEENS_12DenseMapInfoIjEENSB_ISA_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE3addEPNS_11ImutAVLTreeIS7_EES6_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::add(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, clang::ento::MemRegion const*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE16getCanonicalTreeEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::getCanonicalTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE22compareTreeWithSectionEPNS_11ImutAVLTreeIS7_EERNS_26ImutAVLTreeInOrderIteratorIS7_EESE_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::compareTreeWithSection(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >&, llvm::ImutAVLTreeInOrderIterator<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >&)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE12add_internalES6_PNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::add_internal(clang::ento::MemRegion const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE13markImmutableEPNS_11ImutAVLTreeIS7_EE\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::markImmutable(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE10createNodeEPNS_11ImutAVLTreeIS7_EES6_SB_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::createNode(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, clang::ento::MemRegion const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEE11balanceTreeEPNS_11ImutAVLTreeIS7_EES6_SB_\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::balanceTree(llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*, clang::ento::MemRegion const*, llvm::ImutAVLTree<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionENS_12ImmutableSetIS5_NS_17ImutContainerInfoIS5_EEEENS_12DenseMapInfoIS5_EENSA_IS9_EEE16InsertIntoBucketERKS5_RKS9_PSt4pairIS5_S9_E\", \"llvm::DenseMap<clang::ento::MemRegion const*, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> >, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > > >::InsertIntoBucket(clang::ento::MemRegion const* const&, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > const&, std::pair<clang::ento::MemRegion const*, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4ento9MemRegionENS_12ImmutableSetIS5_NS_17ImutContainerInfoIS5_EEEENS_12DenseMapInfoIS5_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::ento::MemRegion const*, llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> >, llvm::DenseMapInfo<clang::ento::MemRegion const*>, llvm::DenseMapInfo<llvm::ImmutableSet<clang::ento::MemRegion const*, llvm::ImutContainerInfo<clang::ento::MemRegion const*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEED2Ev\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::~ImutAVLFactory()\"},\n    {\"_ZN4llvm14ImutAVLFactoryINS_17ImutContainerInfoIPKN5clang4ento9MemRegionEEEEC2Ev\", \"llvm::ImutAVLFactory<llvm::ImutContainerInfo<clang::ento::MemRegion const*> >::ImutAVLFactory()\"},\n    {\"_ZN5clang4ento11SValBuilder11makeZeroValENS_8QualTypeE\", \"clang::ento::SValBuilder::makeZeroVal(clang::QualType)\"},\n    {\"_ZN5clang4ento11SValBuilder10makeNonLocEPKNS0_7SymExprENS_18BinaryOperatorKindERKN4llvm6APSIntENS_8QualTypeE\", \"clang::ento::SValBuilder::makeNonLoc(clang::ento::SymExpr const*, clang::BinaryOperatorKind, llvm::APSInt const&, clang::QualType)\"},\n    {\"_ZN5clang4ento11SValBuilder10makeNonLocEPKNS0_7SymExprENS_18BinaryOperatorKindES4_NS_8QualTypeE\", \"clang::ento::SValBuilder::makeNonLoc(clang::ento::SymExpr const*, clang::BinaryOperatorKind, clang::ento::SymExpr const*, clang::QualType)\"},\n    {\"_ZN5clang4ento11SValBuilder19convertToArrayIndexENS0_4SValE\", \"clang::ento::SValBuilder::convertToArrayIndex(clang::ento::SVal)\"},\n    {\"_ZN5clang4ento11SValBuilder23getRegionValueSymbolValEPKNS0_11TypedRegionE\", \"clang::ento::SValBuilder::getRegionValueSymbolVal(clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento11SValBuilder20getConjuredSymbolValEPKvPKNS_4ExprEj\", \"clang::ento::SValBuilder::getConjuredSymbolVal(void const*, clang::Expr const*, unsigned int)\"},\n    {\"_ZN5clang4ento11SValBuilder20getConjuredSymbolValEPKvPKNS_4ExprENS_8QualTypeEj\", \"clang::ento::SValBuilder::getConjuredSymbolVal(void const*, clang::Expr const*, clang::QualType, unsigned int)\"},\n    {\"_ZN5clang4ento11SValBuilder20getMetadataSymbolValEPKvPKNS0_9MemRegionEPKNS_4ExprENS_8QualTypeEj\", \"clang::ento::SValBuilder::getMetadataSymbolVal(void const*, clang::ento::MemRegion const*, clang::Expr const*, clang::QualType, unsigned int)\"},\n    {\"_ZN5clang4ento11SValBuilder30getDerivedRegionValueSymbolValEPKNS0_10SymbolDataEPKNS0_11TypedRegionE\", \"clang::ento::SValBuilder::getDerivedRegionValueSymbolVal(clang::ento::SymbolData const*, clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento11SValBuilder18getFunctionPointerEPKNS_12FunctionDeclE\", \"clang::ento::SValBuilder::getFunctionPointer(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang4ento11SValBuilder15getBlockPointerEPKNS_9BlockDeclENS_7CanQualINS_4TypeEEEPKNS_15LocationContextE\", \"clang::ento::SValBuilder::getBlockPointer(clang::BlockDecl const*, clang::CanQual<clang::Type>, clang::LocationContext const*)\"},\n    {\"_ZN5clang4ento11SValBuilder9evalBinOpEPKNS0_7GRStateENS_18BinaryOperatorKindENS0_4SValES6_NS_8QualTypeE\", \"clang::ento::SValBuilder::evalBinOp(clang::ento::GRState const*, clang::BinaryOperatorKind, clang::ento::SVal, clang::ento::SVal, clang::QualType)\"},\n    {\"_ZN5clang4ento11SValBuilder6evalEQEPKNS0_7GRStateENS0_20DefinedOrUnknownSValES5_\", \"clang::ento::SValBuilder::evalEQ(clang::ento::GRState const*, clang::ento::DefinedOrUnknownSVal, clang::ento::DefinedOrUnknownSVal)\"},\n    {\"_ZN5clang4ento11SValBuilder8evalCastENS0_4SValENS_8QualTypeES3_\", \"clang::ento::SValBuilder::evalCast(clang::ento::SVal, clang::QualType, clang::QualType)\"},\n    {\"_ZNK5clang4ento4SVal17hasConjuredSymbolEv\", \"clang::ento::SVal::hasConjuredSymbol() const\"},\n    {\"_ZNK5clang4ento4SVal17getAsFunctionDeclEv\", \"clang::ento::SVal::getAsFunctionDecl() const\"},\n    {\"_ZNK5clang4ento4SVal14getAsLocSymbolEv\", \"clang::ento::SVal::getAsLocSymbol() const\"},\n    {\"_ZNK5clang4ento3loc12MemRegionVal10StripCastsEv\", \"clang::ento::loc::MemRegionVal::StripCasts() const\"},\n    {\"_ZNK5clang4ento4SVal18getLocSymbolInBaseEv\", \"clang::ento::SVal::getLocSymbolInBase() const\"},\n    {\"_ZNK5clang4ento4SVal11getAsSymbolEv\", \"clang::ento::SVal::getAsSymbol() const\"},\n    {\"_ZNK5clang4ento4SVal23getAsSymbolicExpressionEv\", \"clang::ento::SVal::getAsSymbolicExpression() const\"},\n    {\"_ZNK5clang4ento4SVal11getAsRegionEv\", \"clang::ento::SVal::getAsRegion() const\"},\n    {\"_ZNK5clang4ento4SVal15symbol_iteratoreqERKS2_\", \"clang::ento::SVal::symbol_iterator::operator==(clang::ento::SVal::symbol_iterator const&) const\"},\n    {\"_ZNK5clang4ento4SVal15symbol_iteratorneERKS2_\", \"clang::ento::SVal::symbol_iterator::operator!=(clang::ento::SVal::symbol_iterator const&) const\"},\n    {\"_ZN5clang4ento4SVal15symbol_iteratorC1EPKNS0_7SymExprE\", \"clang::ento::SVal::symbol_iterator::symbol_iterator(clang::ento::SymExpr const*)\"},\n    {\"_ZN5clang4ento4SVal15symbol_iteratorC2EPKNS0_7SymExprE\", \"clang::ento::SVal::symbol_iterator::symbol_iterator(clang::ento::SymExpr const*)\"},\n    {\"_ZN5clang4ento4SVal15symbol_iterator6expandEv\", \"clang::ento::SVal::symbol_iterator::expand()\"},\n    {\"_ZN5clang4ento4SVal15symbol_iteratorppEv\", \"clang::ento::SVal::symbol_iterator::operator++()\"},\n    {\"_ZN5clang4ento4SVal15symbol_iteratordeEv\", \"clang::ento::SVal::symbol_iterator::operator*()\"},\n    {\"_ZNK5clang4ento6nonloc15LazyCompoundVal8getStoreEv\", \"clang::ento::nonloc::LazyCompoundVal::getStore() const\"},\n    {\"_ZNK5clang4ento6nonloc15LazyCompoundVal9getRegionEv\", \"clang::ento::nonloc::LazyCompoundVal::getRegion() const\"},\n    {\"_ZNK5clang4ento6nonloc11CompoundVal5beginEv\", \"clang::ento::nonloc::CompoundVal::begin() const\"},\n    {\"_ZNK5clang4ento6nonloc11CompoundVal3endEv\", \"clang::ento::nonloc::CompoundVal::end() const\"},\n    {\"_ZNK5clang4ento4SVal10isConstantEv\", \"clang::ento::SVal::isConstant() const\"},\n    {\"_ZNK5clang4ento4SVal10isConstantEi\", \"clang::ento::SVal::isConstant(int) const\"},\n    {\"_ZNK5clang4ento4SVal14isZeroConstantEv\", \"clang::ento::SVal::isZeroConstant() const\"},\n    {\"_ZNK5clang4ento6nonloc11ConcreteInt9evalBinOpERNS0_11SValBuilderENS_18BinaryOperatorKindERKS2_\", \"clang::ento::nonloc::ConcreteInt::evalBinOp(clang::ento::SValBuilder&, clang::BinaryOperatorKind, clang::ento::nonloc::ConcreteInt const&) const\"},\n    {\"_ZNK5clang4ento6nonloc11ConcreteInt14evalComplementERNS0_11SValBuilderE\", \"clang::ento::nonloc::ConcreteInt::evalComplement(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento6nonloc11ConcreteInt9evalMinusERNS0_11SValBuilderE\", \"clang::ento::nonloc::ConcreteInt::evalMinus(clang::ento::SValBuilder&) const\"},\n    {\"_ZNK5clang4ento3loc11ConcreteInt9evalBinOpERNS0_17BasicValueFactoryENS_18BinaryOperatorKindERKS2_\", \"clang::ento::loc::ConcreteInt::evalBinOp(clang::ento::BasicValueFactory&, clang::BinaryOperatorKind, clang::ento::loc::ConcreteInt const&) const\"},\n    {\"_ZNK5clang4ento4SVal4dumpEv\", \"clang::ento::SVal::dump() const\"},\n    {\"_ZNK5clang4ento4SVal12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SVal::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento6NonLoc12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::NonLoc::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento3Loc12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::Loc::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang4ento23SimpleConstraintManagerD0Ev\", \"clang::ento::SimpleConstraintManager::~SimpleConstraintManager()\"},\n    {\"_ZN5clang4ento23SimpleConstraintManagerD1Ev\", \"clang::ento::SimpleConstraintManager::~SimpleConstraintManager()\"},\n    {\"_ZN5clang4ento23SimpleConstraintManagerD2Ev\", \"clang::ento::SimpleConstraintManager::~SimpleConstraintManager()\"},\n    {\"_ZNK5clang4ento23SimpleConstraintManager14canReasonAboutENS0_4SValE\", \"clang::ento::SimpleConstraintManager::canReasonAbout(clang::ento::SVal) const\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager6assumeEPKNS0_7GRStateENS0_11DefinedSValEb\", \"clang::ento::SimpleConstraintManager::assume(clang::ento::GRState const*, clang::ento::DefinedSVal, bool)\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager6assumeEPKNS0_7GRStateENS0_6NonLocEb\", \"clang::ento::SimpleConstraintManager::assume(clang::ento::GRState const*, clang::ento::NonLoc, bool)\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager6assumeEPKNS0_7GRStateENS0_3LocEb\", \"clang::ento::SimpleConstraintManager::assume(clang::ento::GRState const*, clang::ento::Loc, bool)\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager9assumeAuxEPKNS0_7GRStateENS0_3LocEb\", \"clang::ento::SimpleConstraintManager::assumeAux(clang::ento::GRState const*, clang::ento::Loc, bool)\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager9assumeAuxEPKNS0_7GRStateENS0_6NonLocEb\", \"clang::ento::SimpleConstraintManager::assumeAux(clang::ento::GRState const*, clang::ento::NonLoc, bool)\"},\n    {\"_ZN5clang4ento23SimpleConstraintManager12assumeSymRelEPKNS0_7GRStateEPKNS0_7SymExprENS_18BinaryOperatorKindERKN4llvm6APSIntE\", \"clang::ento::SimpleConstraintManager::assumeSymRel(clang::ento::GRState const*, clang::ento::SymExpr const*, clang::BinaryOperatorKind, llvm::APSInt const&)\"},\n    {\"_ZN5clang4ento23createSimpleSValBuilderERN4llvm16BumpPtrAllocatorERNS_10ASTContextERNS0_14GRStateManagerE\", \"clang::ento::createSimpleSValBuilder(llvm::BumpPtrAllocator&, clang::ASTContext&, clang::ento::GRStateManager&)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder10evalCastNLEN5clang4ento6NonLocENS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::evalCastNL(clang::ento::NonLoc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder9evalCastLEN5clang4ento3LocENS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::evalCastL(clang::ento::Loc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilderD1Ev\", \"(anonymous namespace)::SimpleSValBuilder::~SimpleSValBuilder()\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilderD0Ev\", \"(anonymous namespace)::SimpleSValBuilder::~SimpleSValBuilder()\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder9evalMinusEN5clang4ento6NonLocE\", \"(anonymous namespace)::SimpleSValBuilder::evalMinus(clang::ento::NonLoc)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder14evalComplementEN5clang4ento6NonLocE\", \"(anonymous namespace)::SimpleSValBuilder::evalComplement(clang::ento::NonLoc)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder11evalBinOpNNEPKN5clang4ento7GRStateENS1_18BinaryOperatorKindENS2_6NonLocES7_NS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::evalBinOpNN(clang::ento::GRState const*, clang::BinaryOperatorKind, clang::ento::NonLoc, clang::ento::NonLoc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder11evalBinOpLLEPKN5clang4ento7GRStateENS1_18BinaryOperatorKindENS2_3LocES7_NS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::evalBinOpLL(clang::ento::GRState const*, clang::BinaryOperatorKind, clang::ento::Loc, clang::ento::Loc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder11evalBinOpLNEPKN5clang4ento7GRStateENS1_18BinaryOperatorKindENS2_3LocENS2_6NonLocENS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::evalBinOpLN(clang::ento::GRState const*, clang::BinaryOperatorKind, clang::ento::Loc, clang::ento::NonLoc, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder13getKnownValueEPKN5clang4ento7GRStateENS2_4SValE\", \"(anonymous namespace)::SimpleSValBuilder::getKnownValue(clang::ento::GRState const*, clang::ento::SVal)\"},\n    {\"_ZN12_GLOBAL__N_117SimpleSValBuilder13MakeSymIntValEPKN5clang4ento7SymExprENS1_18BinaryOperatorKindERKN4llvm6APSIntENS1_8QualTypeE\", \"(anonymous namespace)::SimpleSValBuilder::MakeSymIntVal(clang::ento::SymExpr const*, clang::BinaryOperatorKind, llvm::APSInt const&, clang::QualType)\"},\n    {\"_ZN5clang4ento11SValBuilderC2ERN4llvm16BumpPtrAllocatorERNS_10ASTContextERNS0_14GRStateManagerE\", \"clang::ento::SValBuilder::SValBuilder(llvm::BumpPtrAllocator&, clang::ASTContext&, clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento11SValBuilderD1Ev\", \"clang::ento::SValBuilder::~SValBuilder()\"},\n    {\"_ZN5clang4ento11SValBuilderD0Ev\", \"clang::ento::SValBuilder::~SValBuilder()\"},\n    {\"_ZN5clang4ento16MemRegionManagerC2ERNS_10ASTContextERN4llvm16BumpPtrAllocatorE\", \"clang::ento::MemRegionManager::MemRegionManager(clang::ASTContext&, llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang4ento12StoreManagerC1ERNS0_14GRStateManagerE\", \"clang::ento::StoreManager::StoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento12StoreManagerC2ERNS0_14GRStateManagerE\", \"clang::ento::StoreManager::StoreManager(clang::ento::GRStateManager&)\"},\n    {\"_ZN5clang4ento12StoreManager15enterStackFrameEPKNS0_7GRStateEPKNS_17StackFrameContextE\", \"clang::ento::StoreManager::enterStackFrame(clang::ento::GRState const*, clang::StackFrameContext const*)\"},\n    {\"_ZN5clang4ento12StoreManager17MakeElementRegionEPKNS0_9MemRegionENS_8QualTypeEy\", \"clang::ento::StoreManager::MakeElementRegion(clang::ento::MemRegion const*, clang::QualType, unsigned long long)\"},\n    {\"_ZN5clang4ento12StoreManager20GetElementZeroRegionEPKNS0_9MemRegionENS_8QualTypeE\", \"clang::ento::StoreManager::GetElementZeroRegion(clang::ento::MemRegion const*, clang::QualType)\"},\n    {\"_ZN5clang4ento12StoreManager10CastRegionEPKNS0_9MemRegionENS_8QualTypeE\", \"clang::ento::StoreManager::CastRegion(clang::ento::MemRegion const*, clang::QualType)\"},\n    {\"_ZN5clang4ento12StoreManager16CastRetrievedValENS0_4SValEPKNS0_11TypedRegionENS_8QualTypeEb\", \"clang::ento::StoreManager::CastRetrievedVal(clang::ento::SVal, clang::ento::TypedRegion const*, clang::QualType, bool)\"},\n    {\"_ZN5clang4ento12StoreManager20getLValueFieldOrIvarEPKNS_4DeclENS0_4SValE\", \"clang::ento::StoreManager::getLValueFieldOrIvar(clang::Decl const*, clang::ento::SVal)\"},\n    {\"_ZN5clang4ento12StoreManager16getLValueElementENS_8QualTypeENS0_6NonLocENS0_4SValE\", \"clang::ento::StoreManager::getLValueElement(clang::QualType, clang::ento::NonLoc, clang::ento::SVal)\"},\n    {\"_ZNK5clang4ento7SymExpr4dumpEv\", \"clang::ento::SymExpr::dump() const\"},\n    {\"_ZNK5clang4ento10SymIntExpr12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymIntExpr::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento10SymSymExpr12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymSymExpr::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento14SymbolConjured12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolConjured::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento13SymbolDerived12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolDerived::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento12SymbolExtent12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolExtent::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento14SymbolMetadata12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolMetadata::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4ento17SymbolRegionValue12dumpToStreamERN4llvm11raw_ostreamE\", \"clang::ento::SymbolRegionValue::dumpToStream(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang4ento13SymbolManager20getRegionValueSymbolEPKNS0_11TypedRegionE\", \"clang::ento::SymbolManager::getRegionValueSymbol(clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento13SymbolManager17getConjuredSymbolEPKNS_4StmtENS_8QualTypeEjPKv\", \"clang::ento::SymbolManager::getConjuredSymbol(clang::Stmt const*, clang::QualType, unsigned int, void const*)\"},\n    {\"_ZN5clang4ento13SymbolManager16getDerivedSymbolEPKNS0_10SymbolDataEPKNS0_11TypedRegionE\", \"clang::ento::SymbolManager::getDerivedSymbol(clang::ento::SymbolData const*, clang::ento::TypedRegion const*)\"},\n    {\"_ZN5clang4ento13SymbolManager15getExtentSymbolEPKNS0_9SubRegionE\", \"clang::ento::SymbolManager::getExtentSymbol(clang::ento::SubRegion const*)\"},\n    {\"_ZN5clang4ento13SymbolManager17getMetadataSymbolEPKNS0_9MemRegionEPKNS_4StmtENS_8QualTypeEjPKv\", \"clang::ento::SymbolManager::getMetadataSymbol(clang::ento::MemRegion const*, clang::Stmt const*, clang::QualType, unsigned int, void const*)\"},\n    {\"_ZN5clang4ento13SymbolManager13getSymIntExprEPKNS0_7SymExprENS_18BinaryOperatorKindERKN4llvm6APSIntENS_8QualTypeE\", \"clang::ento::SymbolManager::getSymIntExpr(clang::ento::SymExpr const*, clang::BinaryOperatorKind, llvm::APSInt const&, clang::QualType)\"},\n    {\"_ZN5clang4ento13SymbolManager13getSymSymExprEPKNS0_7SymExprENS_18BinaryOperatorKindES4_NS_8QualTypeE\", \"clang::ento::SymbolManager::getSymSymExpr(clang::ento::SymExpr const*, clang::BinaryOperatorKind, clang::ento::SymExpr const*, clang::QualType)\"},\n    {\"_ZNK5clang4ento14SymbolConjured7getTypeERNS_10ASTContextE\", \"clang::ento::SymbolConjured::getType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento13SymbolDerived7getTypeERNS_10ASTContextE\", \"clang::ento::SymbolDerived::getType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento12SymbolExtent7getTypeERNS_10ASTContextE\", \"clang::ento::SymbolExtent::getType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento14SymbolMetadata7getTypeERNS_10ASTContextE\", \"clang::ento::SymbolMetadata::getType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4ento17SymbolRegionValue7getTypeERNS_10ASTContextE\", \"clang::ento::SymbolRegionValue::getType(clang::ASTContext&) const\"},\n    {\"_ZN5clang4ento13SymbolManagerD1Ev\", \"clang::ento::SymbolManager::~SymbolManager()\"},\n    {\"_ZN5clang4ento13SymbolManagerD2Ev\", \"clang::ento::SymbolManager::~SymbolManager()\"},\n    {\"_ZN5clang4ento13SymbolManager14canSymbolicateENS_8QualTypeE\", \"clang::ento::SymbolManager::canSymbolicate(clang::QualType)\"},\n    {\"_ZN5clang4ento12SymbolReaper8markLiveEPKNS0_10SymbolDataE\", \"clang::ento::SymbolReaper::markLive(clang::ento::SymbolData const*)\"},\n    {\"_ZN5clang4ento12SymbolReaper9markInUseEPKNS0_10SymbolDataE\", \"clang::ento::SymbolReaper::markInUse(clang::ento::SymbolData const*)\"},\n    {\"_ZN5clang4ento12SymbolReaper9maybeDeadEPKNS0_10SymbolDataE\", \"clang::ento::SymbolReaper::maybeDead(clang::ento::SymbolData const*)\"},\n    {\"_ZN5clang4ento12SymbolReaper6isLiveEPKNS0_10SymbolDataE\", \"clang::ento::SymbolReaper::isLive(clang::ento::SymbolData const*)\"},\n    {\"_Z12IsLiveRegionRN5clang4ento12SymbolReaperEPKNS0_9MemRegionE\", \"IsLiveRegion(clang::ento::SymbolReaper&, clang::ento::MemRegion const*)\"},\n    {\"_ZNK5clang4ento12SymbolReaper6isLiveEPKNS_4StmtE\", \"clang::ento::SymbolReaper::isLive(clang::Stmt const*) const\"},\n    {\"_ZNK5clang4ento12SymbolReaper6isLiveEPKNS0_9VarRegionE\", \"clang::ento::SymbolReaper::isLive(clang::ento::VarRegion const*) const\"},\n    {\"_ZN5clang4ento13SymbolVisitorD0Ev\", \"clang::ento::SymbolVisitor::~SymbolVisitor()\"},\n    {\"_ZN5clang4ento13SymbolVisitorD1Ev\", \"clang::ento::SymbolVisitor::~SymbolVisitor()\"},\n    {\"_ZN5clang4ento13SymbolVisitorD2Ev\", \"clang::ento::SymbolVisitor::~SymbolVisitor()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento7SymExprEED1Ev\", \"llvm::FoldingSet<clang::ento::SymExpr>::~FoldingSet()\"},\n    {\"_ZN5clang4ento17SymbolRegionValueD1Ev\", \"clang::ento::SymbolRegionValue::~SymbolRegionValue()\"},\n    {\"_ZN5clang4ento17SymbolRegionValueD0Ev\", \"clang::ento::SymbolRegionValue::~SymbolRegionValue()\"},\n    {\"_ZN5clang4ento17SymbolRegionValue7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolRegionValue::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento14SymbolConjuredD1Ev\", \"clang::ento::SymbolConjured::~SymbolConjured()\"},\n    {\"_ZN5clang4ento14SymbolConjuredD0Ev\", \"clang::ento::SymbolConjured::~SymbolConjured()\"},\n    {\"_ZN5clang4ento14SymbolConjured7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolConjured::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento13SymbolDerivedD1Ev\", \"clang::ento::SymbolDerived::~SymbolDerived()\"},\n    {\"_ZN5clang4ento13SymbolDerivedD0Ev\", \"clang::ento::SymbolDerived::~SymbolDerived()\"},\n    {\"_ZN5clang4ento13SymbolDerived7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolDerived::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento12SymbolExtentD1Ev\", \"clang::ento::SymbolExtent::~SymbolExtent()\"},\n    {\"_ZN5clang4ento12SymbolExtentD0Ev\", \"clang::ento::SymbolExtent::~SymbolExtent()\"},\n    {\"_ZN5clang4ento12SymbolExtent7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolExtent::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento14SymbolMetadataD1Ev\", \"clang::ento::SymbolMetadata::~SymbolMetadata()\"},\n    {\"_ZN5clang4ento14SymbolMetadataD0Ev\", \"clang::ento::SymbolMetadata::~SymbolMetadata()\"},\n    {\"_ZN5clang4ento14SymbolMetadata7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymbolMetadata::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento10SymIntExprD1Ev\", \"clang::ento::SymIntExpr::~SymIntExpr()\"},\n    {\"_ZN5clang4ento10SymIntExprD0Ev\", \"clang::ento::SymIntExpr::~SymIntExpr()\"},\n    {\"_ZNK5clang4ento10SymIntExpr7getTypeERNS_10ASTContextE\", \"clang::ento::SymIntExpr::getType(clang::ASTContext&) const\"},\n    {\"_ZN5clang4ento10SymIntExpr7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymIntExpr::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento10SymSymExprD1Ev\", \"clang::ento::SymSymExpr::~SymSymExpr()\"},\n    {\"_ZN5clang4ento10SymSymExprD0Ev\", \"clang::ento::SymSymExpr::~SymSymExpr()\"},\n    {\"_ZNK5clang4ento10SymSymExpr7getTypeERNS_10ASTContextE\", \"clang::ento::SymSymExpr::getType(clang::ASTContext&) const\"},\n    {\"_ZN5clang4ento10SymSymExpr7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ento::SymSymExpr::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang4ento7SymExprD1Ev\", \"clang::ento::SymExpr::~SymExpr()\"},\n    {\"_ZN5clang4ento7SymExprD0Ev\", \"clang::ento::SymExpr::~SymExpr()\"},\n    {\"_ZN5clang4ento10SymbolDataD1Ev\", \"clang::ento::SymbolData::~SymbolData()\"},\n    {\"_ZN5clang4ento10SymbolDataD0Ev\", \"clang::ento::SymbolData::~SymbolData()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang4ento7SymExprEED0Ev\", \"llvm::FoldingSet<clang::ento::SymExpr>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7SymExprEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::SymExpr>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7SymExprEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ento::SymExpr>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang4ento7SymExprEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ento::SymExpr>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang4ento30createTextPathDiagnosticClientERKSsRKNS_12PreprocessorE\", \"clang::ento::createTextPathDiagnosticClient(std::string const&, clang::Preprocessor const&)\"},\n    {\"_ZN12_GLOBAL__N_119TextPathDiagnosticsD1Ev\", \"(anonymous namespace)::TextPathDiagnostics::~TextPathDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_119TextPathDiagnosticsD0Ev\", \"(anonymous namespace)::TextPathDiagnostics::~TextPathDiagnostics()\"},\n    {\"_ZN12_GLOBAL__N_119TextPathDiagnostics16FlushDiagnosticsEPN4llvm15SmallVectorImplISsEE\", \"(anonymous namespace)::TextPathDiagnostics::FlushDiagnostics(llvm::SmallVectorImpl<std::string>*)\"},\n    {\"_ZNK12_GLOBAL__N_119TextPathDiagnostics7getNameEv\", \"(anonymous namespace)::TextPathDiagnostics::getName() const\"},\n    {\"_ZN12_GLOBAL__N_119TextPathDiagnostics20HandlePathDiagnosticEPKN5clang4ento14PathDiagnosticE\", \"(anonymous namespace)::TextPathDiagnostics::HandlePathDiagnostic(clang::ento::PathDiagnostic const*)\"},\n    {\"_ZNK12_GLOBAL__N_119TextPathDiagnostics19getGenerationSchemeEv\", \"(anonymous namespace)::TextPathDiagnostics::getGenerationScheme() const\"},\n    {\"_ZNK12_GLOBAL__N_119TextPathDiagnostics28supportsLogicalOpControlFlowEv\", \"(anonymous namespace)::TextPathDiagnostics::supportsLogicalOpControlFlow() const\"},\n    {\"_ZNK12_GLOBAL__N_119TextPathDiagnostics21supportsAllBlockEdgesEv\", \"(anonymous namespace)::TextPathDiagnostics::supportsAllBlockEdges() const\"},\n    {\"_ZNK12_GLOBAL__N_119TextPathDiagnostics21useVerboseDescriptionEv\", \"(anonymous namespace)::TextPathDiagnostics::useVerboseDescription() const\"},\n    {\"_ZN5clang4ento20PathDiagnosticClientD1Ev\", \"clang::ento::PathDiagnosticClient::~PathDiagnosticClient()\"},\n    {\"_ZN5clang4ento20PathDiagnosticClientD0Ev\", \"clang::ento::PathDiagnosticClient::~PathDiagnosticClient()\"},\n    {\"_ZNK5clang4ento20PathDiagnosticClient19getGenerationSchemeEv\", \"clang::ento::PathDiagnosticClient::getGenerationScheme() const\"},\n    {\"_ZNK5clang4ento20PathDiagnosticClient28supportsLogicalOpControlFlowEv\", \"clang::ento::PathDiagnosticClient::supportsLogicalOpControlFlow() const\"},\n    {\"_ZNK5clang4ento20PathDiagnosticClient21supportsAllBlockEdgesEv\", \"clang::ento::PathDiagnosticClient::supportsAllBlockEdges() const\"},\n    {\"_ZNK5clang4ento20PathDiagnosticClient21useVerboseDescriptionEv\", \"clang::ento::PathDiagnosticClient::useVerboseDescription() const\"},\n    {\"_ZN5clang22AnalysisContextManager5clearEv\", \"clang::AnalysisContextManager::clear()\"},\n    {\"_ZN5clang15AnalysisContextD1Ev\", \"clang::AnalysisContext::~AnalysisContext()\"},\n    {\"_ZN5clang15AnalysisContext7getBodyEv\", \"clang::AnalysisContext::getBody()\"},\n    {\"_ZNK5clang15AnalysisContext11getSelfDeclEv\", \"clang::AnalysisContext::getSelfDecl() const\"},\n    {\"_ZN5clang15AnalysisContext6getCFGEv\", \"clang::AnalysisContext::getCFG()\"},\n    {\"_ZN5clang15AnalysisContext17getUnoptimizedCFGEv\", \"clang::AnalysisContext::getUnoptimizedCFG()\"},\n    {\"_ZN5clang15AnalysisContext7dumpCFGEv\", \"clang::AnalysisContext::dumpCFG()\"},\n    {\"_ZN5clang15AnalysisContext12getParentMapEv\", \"clang::AnalysisContext::getParentMap()\"},\n    {\"_ZN5clang15AnalysisContext25getPseudoConstantAnalysisEv\", \"clang::AnalysisContext::getPseudoConstantAnalysis()\"},\n    {\"_ZN5clang15AnalysisContext16getLiveVariablesEv\", \"clang::AnalysisContext::getLiveVariables()\"},\n    {\"_ZN5clang15AnalysisContext23getRelaxedLiveVariablesEv\", \"clang::AnalysisContext::getRelaxedLiveVariables()\"},\n    {\"_ZN5clang22AnalysisContextManager10getContextEPKNS_4DeclEPNS_3idx15TranslationUnitE\", \"clang::AnalysisContextManager::getContext(clang::Decl const*, clang::idx::TranslationUnit*)\"},\n    {\"_ZN5clang15LocationContext13ProfileCommonERN4llvm16FoldingSetNodeIDENS0_11ContextKindEPNS_15AnalysisContextEPKS0_PKv\", \"clang::LocationContext::ProfileCommon(llvm::FoldingSetNodeID&, clang::LocationContext::ContextKind, clang::AnalysisContext*, clang::LocationContext const*, void const*)\"},\n    {\"_ZN5clang17StackFrameContext7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::StackFrameContext::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang12ScopeContext7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ScopeContext::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang22BlockInvocationContext7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::BlockInvocationContext::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang22LocationContextManager13getStackFrameEPNS_15AnalysisContextEPKNS_15LocationContextEPKNS_4StmtEPKNS_8CFGBlockEj\", \"clang::LocationContextManager::getStackFrame(clang::AnalysisContext*, clang::LocationContext const*, clang::Stmt const*, clang::CFGBlock const*, unsigned int)\"},\n    {\"_ZN5clang22LocationContextManager8getScopeEPNS_15AnalysisContextEPKNS_15LocationContextEPKNS_4StmtE\", \"clang::LocationContextManager::getScope(clang::AnalysisContext*, clang::LocationContext const*, clang::Stmt const*)\"},\n    {\"_ZNK5clang15LocationContext20getCurrentStackFrameEv\", \"clang::LocationContext::getCurrentStackFrame() const\"},\n    {\"_ZNK5clang15LocationContext27getStackFrameForDeclContextEPKNS_11DeclContextE\", \"clang::LocationContext::getStackFrameForDeclContext(clang::DeclContext const*) const\"},\n    {\"_ZNK5clang15LocationContext10isParentOfEPKS0_\", \"clang::LocationContext::isParentOf(clang::LocationContext const*) const\"},\n    {\"_ZN5clang15AnalysisContext22getReferencedBlockVarsEPKNS_9BlockDeclE\", \"clang::AnalysisContext::getReferencedBlockVars(clang::BlockDecl const*)\"},\n    {\"_ZN5clang15AnalysisContextD2Ev\", \"clang::AnalysisContext::~AnalysisContext()\"},\n    {\"_ZN5clang22AnalysisContextManagerD1Ev\", \"clang::AnalysisContextManager::~AnalysisContextManager()\"},\n    {\"_ZN5clang22AnalysisContextManagerD2Ev\", \"clang::AnalysisContextManager::~AnalysisContextManager()\"},\n    {\"_ZN5clang15LocationContextD0Ev\", \"clang::LocationContext::~LocationContext()\"},\n    {\"_ZN5clang15LocationContextD1Ev\", \"clang::LocationContext::~LocationContext()\"},\n    {\"_ZN5clang15LocationContextD2Ev\", \"clang::LocationContext::~LocationContext()\"},\n    {\"_ZN5clang22LocationContextManagerD1Ev\", \"clang::LocationContextManager::~LocationContextManager()\"},\n    {\"_ZN5clang22LocationContextManagerD2Ev\", \"clang::LocationContextManager::~LocationContextManager()\"},\n    {\"_ZN5clang22LocationContextManager5clearEv\", \"clang::LocationContextManager::clear()\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_125FindBlockDeclRefExprsValsEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::FindBlockDeclRefExprsVals, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_125FindBlockDeclRefExprsVals9VisitStmtEPN5clang4StmtE\", \"(anonymous namespace)::FindBlockDeclRefExprsVals::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang22LocationContextManager18getLocationContextINS_12ScopeContextENS_4StmtEEEPKT_PNS_15AnalysisContextEPKNS_15LocationContextEPKT0_\", \"clang::ScopeContext const* clang::LocationContextManager::getLocationContext<clang::ScopeContext, clang::Stmt>(clang::AnalysisContext*, clang::LocationContext const*, clang::Stmt const*)\"},\n    {\"_ZN5clang17StackFrameContextD1Ev\", \"clang::StackFrameContext::~StackFrameContext()\"},\n    {\"_ZN5clang17StackFrameContextD0Ev\", \"clang::StackFrameContext::~StackFrameContext()\"},\n    {\"_ZN5clang12ScopeContextD1Ev\", \"clang::ScopeContext::~ScopeContext()\"},\n    {\"_ZN5clang12ScopeContextD0Ev\", \"clang::ScopeContext::~ScopeContext()\"},\n    {\"_ZN5clang22BlockInvocationContextD1Ev\", \"clang::BlockInvocationContext::~BlockInvocationContext()\"},\n    {\"_ZN5clang22BlockInvocationContextD0Ev\", \"clang::BlockInvocationContext::~BlockInvocationContext()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEPvNS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::BlockDecl const*, void*, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<void*> >::InsertIntoBucket(clang::BlockDecl const* const&, void* const&, std::pair<clang::BlockDecl const*, void*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEPvNS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::BlockDecl const*, void*, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<void*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS1_15AnalysisContextENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Decl const*, clang::AnalysisContext*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<clang::AnalysisContext*> >::InsertIntoBucket(clang::Decl const* const&, clang::AnalysisContext* const&, std::pair<clang::Decl const*, clang::AnalysisContext*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS1_15AnalysisContextENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, clang::AnalysisContext*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<clang::AnalysisContext*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS1_15AnalysisContextENS_12DenseMapInfoIS4_EENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<clang::Decl const*, clang::AnalysisContext*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<clang::AnalysisContext*> >::shrink_and_clear()\"},\n    {\"_ZN5clang14DataflowValuesINS_24LiveVariables_ValueTypesENS_8dataflow21backward_analysis_tagEED2Ev\", \"clang::DataflowValues<clang::LiveVariables_ValueTypes, clang::dataflow::backward_analysis_tag>::~DataflowValues()\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes14AnalysisDataTyD1Ev\", \"clang::LiveVariables_ValueTypes::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEED2Ev\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::~DenseMap()\"},\n    {\"_ZN5clang24LiveVariables_ValueTypes14AnalysisDataTyD0Ev\", \"clang::LiveVariables_ValueTypes::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang23StmtDeclBitVector_Types14AnalysisDataTyD1Ev\", \"clang::StmtDeclBitVector_Types::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang23StmtDeclBitVector_Types14AnalysisDataTyD0Ev\", \"clang::StmtDeclBitVector_Types::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang19DeclBitVector_Types14AnalysisDataTyD1Ev\", \"clang::DeclBitVector_Types::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang19DeclBitVector_Types14AnalysisDataTyD0Ev\", \"clang::DeclBitVector_Types::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::VarDecl const*, unsigned int, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::VarDecl const* const&, unsigned int const&, std::pair<clang::VarDecl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, unsigned int, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang3CFG11createBlockEv\", \"clang::CFG::createBlock()\"},\n    {\"_ZN5clang3CFG8buildCFGEPKNS_4DeclEPNS_4StmtEPNS_10ASTContextENS0_12BuildOptionsE\", \"clang::CFG::buildCFG(clang::Decl const*, clang::Stmt*, clang::ASTContext*, clang::CFG::BuildOptions)\"},\n    {\"_ZN5clang3CFG13getBlkExprNumEPKNS_4StmtE\", \"clang::CFG::getBlkExprNum(clang::Stmt const*)\"},\n    {\"_Z18PopulateBlkExprMapRN5clang3CFGE\", \"PopulateBlkExprMap(clang::CFG&)\"},\n    {\"_ZN5clang3CFG14getNumBlkExprsEv\", \"clang::CFG::getNumBlkExprs()\"},\n    {\"_ZN5clang8CFGBlock10FilterEdgeERKNS0_13FilterOptionsEPKS0_S5_\", \"clang::CFGBlock::FilterEdge(clang::CFGBlock::FilterOptions const&, clang::CFGBlock const*, clang::CFGBlock const*)\"},\n    {\"_ZN5clang3CFGD1Ev\", \"clang::CFG::~CFG()\"},\n    {\"_ZN5clang3CFGD2Ev\", \"clang::CFG::~CFG()\"},\n    {\"_ZNK5clang3CFG4dumpERKNS_11LangOptionsE\", \"clang::CFG::dump(clang::LangOptions const&) const\"},\n    {\"_ZNK5clang3CFG5printERN4llvm11raw_ostreamERKNS_11LangOptionsE\", \"clang::CFG::print(llvm::raw_ostream&, clang::LangOptions const&) const\"},\n    {\"_ZN12_GLOBAL__N_117StmtPrinterHelperC1EPKN5clang3CFGERKNS1_11LangOptionsE\", \"(anonymous namespace)::StmtPrinterHelper::StmtPrinterHelper(clang::CFG const*, clang::LangOptions const&)\"},\n    {\"_Z11print_blockRN4llvm11raw_ostreamEPKN5clang3CFGERKNS2_8CFGBlockEPN12_GLOBAL__N_117StmtPrinterHelperEb\", \"print_block(llvm::raw_ostream&, clang::CFG const*, clang::CFGBlock const&, (anonymous namespace)::StmtPrinterHelper*, bool)\"},\n    {\"_ZN12_GLOBAL__N_117StmtPrinterHelperD1Ev\", \"(anonymous namespace)::StmtPrinterHelper::~StmtPrinterHelper()\"},\n    {\"_ZNK5clang8CFGBlock4dumpEPKNS_3CFGERKNS_11LangOptionsE\", \"clang::CFGBlock::dump(clang::CFG const*, clang::LangOptions const&) const\"},\n    {\"_ZNK5clang8CFGBlock5printERN4llvm11raw_ostreamEPKNS_3CFGERKNS_11LangOptionsE\", \"clang::CFGBlock::print(llvm::raw_ostream&, clang::CFG const*, clang::LangOptions const&) const\"},\n    {\"_ZNK5clang8CFGBlock15printTerminatorERN4llvm11raw_ostreamERKNS_11LangOptionsE\", \"clang::CFGBlock::printTerminator(llvm::raw_ostream&, clang::LangOptions const&) const\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_123CFGBlockTerminatorPrintEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::CFGBlockTerminatorPrint, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang8CFGBlock22getTerminatorConditionEv\", \"clang::CFGBlock::getTerminatorCondition()\"},\n    {\"_ZNK5clang8CFGBlock25hasBinaryBranchTerminatorEv\", \"clang::CFGBlock::hasBinaryBranchTerminator() const\"},\n    {\"_ZNK5clang3CFG7viewCFGERKNS_11LangOptionsE\", \"clang::CFG::viewCFG(clang::LangOptions const&) const\"},\n    {\"_ZN12_GLOBAL__N_123CFGBlockTerminatorPrint19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::CFGBlockTerminatorPrint::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_117StmtPrinterHelperD0Ev\", \"(anonymous namespace)::StmtPrinterHelper::~StmtPrinterHelper()\"},\n    {\"_ZN12_GLOBAL__N_117StmtPrinterHelper11handledStmtEPN5clang4StmtERN4llvm11raw_ostreamE\", \"(anonymous namespace)::StmtPrinterHelper::handledStmt(clang::Stmt*, llvm::raw_ostream&)\"},\n    {\"_Z22FindSubExprAssignmentsPN5clang4StmtERN4llvm11SmallPtrSetIPNS_4ExprELj50EEE\", \"FindSubExprAssignments(clang::Stmt*, llvm::SmallPtrSet<clang::Expr*, 50u>&)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder22VisitForTemporaryDtorsEPN5clang4StmtEb\", \"(anonymous namespace)::CFGBuilder::VisitForTemporaryDtors(clang::Stmt*, bool)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder5VisitEPN5clang4StmtENS_13AddStmtChoiceE\", \"(anonymous namespace)::CFGBuilder::Visit(clang::Stmt*, (anonymous namespace)::AddStmtChoice)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder17VisitCompoundStmtEPN5clang12CompoundStmtE\", \"(anonymous namespace)::CFGBuilder::VisitCompoundStmt(clang::CompoundStmt*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder17VisitCXXCatchStmtEPN5clang12CXXCatchStmtE\", \"(anonymous namespace)::CFGBuilder::VisitCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder23addLocalScopeForVarDeclEPN5clang7VarDeclEPNS_10LocalScopeE\", \"(anonymous namespace)::CFGBuilder::addLocalScopeForVarDecl(clang::VarDecl*, (anonymous namespace)::LocalScope*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder20addAutomaticObjDtorsENS_10LocalScope14const_iteratorES2_PN5clang4StmtE\", \"(anonymous namespace)::CFGBuilder::addAutomaticObjDtors((anonymous namespace)::LocalScope::const_iterator, (anonymous namespace)::LocalScope::const_iterator, clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder20addLocalScopeForStmtEPN5clang4StmtE\", \"(anonymous namespace)::CFGBuilder::addLocalScopeForStmt(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder16VisitDeclSubExprEPN5clang8DeclStmtE\", \"(anonymous namespace)::CFGBuilder::VisitDeclSubExpr(clang::DeclStmt*)\"},\n    {\"_ZN12_GLOBAL__N_110CFGBuilder13VisitChildrenEPN5clang4StmtE\", \"(anonymous namespace)::CFGBuilder::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN4llvm14format_object1IjED1Ev\", \"llvm::format_object1<unsigned int>::~format_object1()\"},\n    {\"_ZNK4llvm14format_object1IjE7snprintEPcj\", \"llvm::format_object1<unsigned int>::snprint(char*, unsigned int) const\"},\n    {\"_ZN4llvm14format_object1IjED0Ev\", \"llvm::format_object1<unsigned int>::~format_object1()\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclESt4pairIjjENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PS4_IS3_S5_E\", \"llvm::DenseMap<clang::Decl*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::InsertIntoBucket(clang::Decl* const&, std::pair<unsigned int, unsigned int> const&, std::pair<clang::Decl*, std::pair<unsigned int, unsigned int> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclESt4pairIjjENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Decl*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtESt4pairIjjENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PS4_IS3_S5_E\", \"llvm::DenseMap<clang::Stmt*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::InsertIntoBucket(clang::Stmt* const&, std::pair<unsigned int, unsigned int> const&, std::pair<clang::Stmt*, std::pair<unsigned int, unsigned int> >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtESt4pairIjjENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Stmt*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4StmtEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::Stmt const*, unsigned int, llvm::DenseMapInfo<clang::Stmt const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::Stmt const* const&, unsigned int const&, std::pair<clang::Stmt const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4StmtEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::Stmt const*, unsigned int, llvm::DenseMapInfo<clang::Stmt const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9OwningPtrIN5clang3CFGEED2Ev\", \"llvm::OwningPtr<clang::CFG>::~OwningPtr()\"},\n    {\"_ZN5clang8CFGBlock12addSuccessorEPS0_RNS_17BumpVectorContextE\", \"clang::CFGBlock::addSuccessor(clang::CFGBlock*, clang::BumpVectorContext&)\"},\n    {\"_ZN5clang10BumpVectorINS_10CFGElementEE6insertEPS1_mRKS1_RNS_17BumpVectorContextE\", \"clang::BumpVector<clang::CFGElement>::insert(clang::CFGElement*, unsigned long, clang::CFGElement const&, clang::BumpVectorContext&)\"},\n    {\"_ZN5clang10BumpVectorINS_10CFGElementEE9push_backERKS1_RNS_17BumpVectorContextE\", \"clang::BumpVector<clang::CFGElement>::push_back(clang::CFGElement const&, clang::BumpVectorContext&)\"},\n    {\"_ZN5clang8CFGBlockC2EjRNS_17BumpVectorContextE\", \"clang::CFGBlock::CFGBlock(unsigned int, clang::BumpVectorContext&)\"},\n    {\"_ZN5clang10BumpVectorINS_10CFGElementEE7reserveERNS_17BumpVectorContextEj\", \"clang::BumpVector<clang::CFGElement>::reserve(clang::BumpVectorContext&, unsigned int)\"},\n    {\"_ZN5clang10CFGStmtMapD1Ev\", \"clang::CFGStmtMap::~CFGStmtMap()\"},\n    {\"_ZN5clang10CFGStmtMapD2Ev\", \"clang::CFGStmtMap::~CFGStmtMap()\"},\n    {\"_ZN5clang10CFGStmtMap8getBlockEPNS_4StmtE\", \"clang::CFGStmtMap::getBlock(clang::Stmt*)\"},\n    {\"_ZN5clang10CFGStmtMap5BuildEPNS_3CFGEPNS_9ParentMapE\", \"clang::CFGStmtMap::Build(clang::CFG*, clang::ParentMap*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtEPNS1_8CFGBlockENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::Stmt*, clang::CFGBlock*, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<clang::CFGBlock*> >::InsertIntoBucket(clang::Stmt* const&, clang::CFGBlock* const&, std::pair<clang::Stmt*, clang::CFGBlock*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtEPNS1_8CFGBlockENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Stmt*, clang::CFGBlock*, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<clang::CFGBlock*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4ento5cocoa22deriveNamingConventionENS_8SelectorEb\", \"clang::ento::cocoa::deriveNamingConvention(clang::Selector, bool)\"},\n    {\"_Z9parseWordPKc\", \"parseWord(char const*)\"},\n    {\"_ZN5clang4ento5cocoa9isRefTypeENS_8QualTypeEN4llvm9StringRefES4_\", \"clang::ento::cocoa::isRefType(clang::QualType, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang4ento5cocoa13isCFObjectRefENS_8QualTypeE\", \"clang::ento::cocoa::isCFObjectRef(clang::QualType)\"},\n    {\"_ZN5clang4ento5cocoa16isCocoaObjectRefENS_8QualTypeE\", \"clang::ento::cocoa::isCocoaObjectRef(clang::QualType)\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandlerD0Ev\", \"clang::analyze_format_string::FormatStringHandler::~FormatStringHandler()\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandlerD1Ev\", \"clang::analyze_format_string::FormatStringHandler::~FormatStringHandler()\"},\n    {\"_ZN5clang21analyze_format_string19FormatStringHandlerD2Ev\", \"clang::analyze_format_string::FormatStringHandler::~FormatStringHandler()\"},\n    {\"_ZN5clang21analyze_format_string11ParseAmountERPKcS2_\", \"clang::analyze_format_string::ParseAmount(char const*&, char const*)\"},\n    {\"_ZN5clang21analyze_format_string22ParseNonPositionAmountERPKcS2_Rj\", \"clang::analyze_format_string::ParseNonPositionAmount(char const*&, char const*, unsigned int&)\"},\n    {\"_ZN5clang21analyze_format_string19ParsePositionAmountERNS0_19FormatStringHandlerEPKcRS4_S4_NS0_15PositionContextE\", \"clang::analyze_format_string::ParsePositionAmount(clang::analyze_format_string::FormatStringHandler&, char const*, char const*&, char const*, clang::analyze_format_string::PositionContext)\"},\n    {\"_ZN5clang21analyze_format_string15ParseFieldWidthERNS0_19FormatStringHandlerERNS0_15FormatSpecifierEPKcRS6_S6_Pj\", \"clang::analyze_format_string::ParseFieldWidth(clang::analyze_format_string::FormatStringHandler&, clang::analyze_format_string::FormatSpecifier&, char const*, char const*&, char const*, unsigned int*)\"},\n    {\"_ZN5clang21analyze_format_string16ParseArgPositionERNS0_19FormatStringHandlerERNS0_15FormatSpecifierEPKcRS6_S6_\", \"clang::analyze_format_string::ParseArgPosition(clang::analyze_format_string::FormatStringHandler&, clang::analyze_format_string::FormatSpecifier&, char const*, char const*&, char const*)\"},\n    {\"_ZN5clang21analyze_format_string19ParseLengthModifierERNS0_15FormatSpecifierERPKcS4_\", \"clang::analyze_format_string::ParseLengthModifier(clang::analyze_format_string::FormatSpecifier&, char const*&, char const*)\"},\n    {\"_ZNK5clang21analyze_format_string13ArgTypeResult11matchesTypeERNS_10ASTContextENS_8QualTypeE\", \"clang::analyze_format_string::ArgTypeResult::matchesType(clang::ASTContext&, clang::QualType) const\"},\n    {\"_ZNK5clang21analyze_format_string13ArgTypeResult21getRepresentativeTypeERNS_10ASTContextE\", \"clang::analyze_format_string::ArgTypeResult::getRepresentativeType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21analyze_format_string14OptionalAmount10getArgTypeERNS_10ASTContextE\", \"clang::analyze_format_string::OptionalAmount::getArgType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21analyze_format_string14LengthModifier8toStringEv\", \"clang::analyze_format_string::LengthModifier::toString() const\"},\n    {\"_ZNK5clang21analyze_format_string14OptionalAmount8toStringERN4llvm11raw_ostreamE\", \"clang::analyze_format_string::OptionalAmount::toString(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang21analyze_format_string15FormatSpecifier22hasValidLengthModifierEv\", \"clang::analyze_format_string::FormatSpecifier::hasValidLengthModifier() const\"},\n    {\"_ZN5clang13LiveVariablesC1ERNS_15AnalysisContextEb\", \"clang::LiveVariables::LiveVariables(clang::AnalysisContext&, bool)\"},\n    {\"_ZN5clang13LiveVariablesC2ERNS_15AnalysisContextEb\", \"clang::LiveVariables::LiveVariables(clang::AnalysisContext&, bool)\"},\n    {\"_ZN5clang13LiveVariables8runOnCFGERNS_3CFGE\", \"clang::LiveVariables::runOnCFG(clang::CFG&)\"},\n    {\"_ZN5clang13LiveVariables14runOnAllBlocksERKNS_3CFGEPNS_24LiveVariables_ValueTypes10ObserverTyEb\", \"clang::LiveVariables::runOnAllBlocks(clang::CFG const&, clang::LiveVariables_ValueTypes::ObserverTy*, bool)\"},\n    {\"_ZNK5clang13LiveVariables6isLiveEPKNS_8CFGBlockEPKNS_7VarDeclE\", \"clang::LiveVariables::isLive(clang::CFGBlock const*, clang::VarDecl const*) const\"},\n    {\"_ZNK5clang13LiveVariables6isLiveERKNS_23StmtDeclBitVector_Types5ValTyEPKNS_7VarDeclE\", \"clang::LiveVariables::isLive(clang::StmtDeclBitVector_Types::ValTy const&, clang::VarDecl const*) const\"},\n    {\"_ZNK5clang13LiveVariables6isLiveEPKNS_4StmtES3_\", \"clang::LiveVariables::isLive(clang::Stmt const*, clang::Stmt const*) const\"},\n    {\"_ZNK5clang13LiveVariables6isLiveEPKNS_4StmtEPKNS_7VarDeclE\", \"clang::LiveVariables::isLive(clang::Stmt const*, clang::VarDecl const*) const\"},\n    {\"_ZNK5clang13LiveVariables12dumpLivenessERKNS_23StmtDeclBitVector_Types5ValTyERKNS_13SourceManagerE\", \"clang::LiveVariables::dumpLiveness(clang::StmtDeclBitVector_Types::ValTy const&, clang::SourceManager const&) const\"},\n    {\"_ZNK5clang13LiveVariables17dumpBlockLivenessERKNS_13SourceManagerE\", \"clang::LiveVariables::dumpBlockLiveness(clang::SourceManager const&) const\"},\n    {\"_ZN5clang14DataflowSolverINS_13LiveVariablesEN12_GLOBAL__N_113TransferFuncsENS_23StmtDeclBitVector_Types5UnionESt8equal_toINS4_5ValTyEEE12ProcessBlockEPKNS_8CFGBlockEbNS_8dataflow21backward_analysis_tagE\", \"clang::DataflowSolver<clang::LiveVariables, (anonymous namespace)::TransferFuncs, clang::StmtDeclBitVector_Types::Union, std::equal_to<clang::StmtDeclBitVector_Types::ValTy> >::ProcessBlock(clang::CFGBlock const*, bool, clang::dataflow::backward_analysis_tag)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs5VisitEPN5clang4StmtE\", \"(anonymous namespace)::TransferFuncs::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_113TransferFuncsEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::TransferFuncs, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::TransferFuncs::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_113TransferFuncsEvE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::TransferFuncs, void>::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs11VisitAssignEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::TransferFuncs::VisitAssign(clang::BinaryOperator*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_113RegisterDeclsEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::RegisterDecls, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_113RegisterDeclsEvE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::RegisterDecls, void>::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN5clang21CFGRecStmtDeclVisitorIN12_GLOBAL__N_113RegisterDeclsEE9VisitDeclEPNS_4DeclE\", \"clang::CFGRecStmtDeclVisitor<(anonymous namespace)::RegisterDecls>::VisitDecl(clang::Decl*)\"},\n    {\"_ZN5clang14DataflowValuesINS_24LiveVariables_ValueTypesENS_8dataflow21backward_analysis_tagEEC2Ev\", \"clang::DataflowValues<clang::LiveVariables_ValueTypes, clang::dataflow::backward_analysis_tag>::DataflowValues()\"},\n    {\"_ZN5clang21analyze_format_string17ParsePrintfStringERNS0_19FormatStringHandlerEPKcS4_\", \"clang::analyze_format_string::ParsePrintfString(clang::analyze_format_string::FormatStringHandler&, char const*, char const*)\"},\n    {\"_ZNK5clang21analyze_format_string19ConversionSpecifier8toStringEv\", \"clang::analyze_format_string::ConversionSpecifier::toString() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier10getArgTypeERNS_10ASTContextE\", \"clang::analyze_printf::PrintfSpecifier::getArgType(clang::ASTContext&) const\"},\n    {\"_ZN5clang14analyze_printf15PrintfSpecifier7fixTypeENS_8QualTypeE\", \"clang::analyze_printf::PrintfSpecifier::fixType(clang::QualType)\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier8toStringERN4llvm11raw_ostreamE\", \"clang::analyze_printf::PrintfSpecifier::toString(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier18hasValidPlusPrefixEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidPlusPrefix() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier23hasValidAlternativeFormEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidAlternativeForm() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier20hasValidLeadingZerosEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidLeadingZeros() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier19hasValidSpacePrefixEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidSpacePrefix() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier21hasValidLeftJustifiedEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidLeftJustified() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier31hasValidThousandsGroupingPrefixEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidThousandsGroupingPrefix() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier17hasValidPrecisionEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidPrecision() const\"},\n    {\"_ZNK5clang14analyze_printf15PrintfSpecifier18hasValidFieldWidthEv\", \"clang::analyze_printf::PrintfSpecifier::hasValidFieldWidth() const\"},\n    {\"_ZN5clang22PseudoConstantAnalysisC1EPKNS_4StmtE\", \"clang::PseudoConstantAnalysis::PseudoConstantAnalysis(clang::Stmt const*)\"},\n    {\"_ZN5clang22PseudoConstantAnalysisC2EPKNS_4StmtE\", \"clang::PseudoConstantAnalysis::PseudoConstantAnalysis(clang::Stmt const*)\"},\n    {\"_ZN5clang22PseudoConstantAnalysisD1Ev\", \"clang::PseudoConstantAnalysis::~PseudoConstantAnalysis()\"},\n    {\"_ZN5clang22PseudoConstantAnalysisD2Ev\", \"clang::PseudoConstantAnalysis::~PseudoConstantAnalysis()\"},\n    {\"_ZN5clang22PseudoConstantAnalysis16isPseudoConstantEPKNS_7VarDeclE\", \"clang::PseudoConstantAnalysis::isPseudoConstant(clang::VarDecl const*)\"},\n    {\"_ZN5clang22PseudoConstantAnalysis11RunAnalysisEv\", \"clang::PseudoConstantAnalysis::RunAnalysis()\"},\n    {\"_ZN5clang22PseudoConstantAnalysis13wasReferencedEPKNS_7VarDeclE\", \"clang::PseudoConstantAnalysis::wasReferenced(clang::VarDecl const*)\"},\n    {\"_ZN5clang14reachable_code22ScanReachableFromBlockERKNS_8CFGBlockERN4llvm9BitVectorE\", \"clang::reachable_code::ScanReachableFromBlock(clang::CFGBlock const&, llvm::BitVector&)\"},\n    {\"_ZN5clang14reachable_code19FindUnreachableCodeERNS_15AnalysisContextERNS0_8CallbackE\", \"clang::reachable_code::FindUnreachableCode(clang::AnalysisContext&, clang::reachable_code::Callback&)\"},\n    {\"_Z17GetUnreachableLocRKN5clang8CFGBlockERNS_11SourceRangeES4_\", \"GetUnreachableLoc(clang::CFGBlock const&, clang::SourceRange&, clang::SourceRange&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_16ErrLocEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::ErrLoc>::push_back((anonymous namespace)::ErrLoc const&)\"},\n    {\"_Z7LineCmpPKvS0_\", \"LineCmp(void const*, void const*)\"},\n    {\"_ZN5clang21analyze_format_string16ParseScanfStringERNS0_19FormatStringHandlerEPKcS4_\", \"clang::analyze_format_string::ParseScanfString(clang::analyze_format_string::FormatStringHandler&, char const*, char const*)\"},\n    {\"_ZN5clang19UninitializedValues16InitializeValuesERKNS_3CFGE\", \"clang::UninitializedValues::InitializeValues(clang::CFG const&)\"},\n    {\"_ZN5clang30UninitializedValues_ValueTypes10ObserverTyD0Ev\", \"clang::UninitializedValues_ValueTypes::ObserverTy::~ObserverTy()\"},\n    {\"_ZN5clang30UninitializedValues_ValueTypes10ObserverTyD1Ev\", \"clang::UninitializedValues_ValueTypes::ObserverTy::~ObserverTy()\"},\n    {\"_ZN5clang30UninitializedValues_ValueTypes10ObserverTyD2Ev\", \"clang::UninitializedValues_ValueTypes::ObserverTy::~ObserverTy()\"},\n    {\"_ZN5clang24CheckUninitializedValuesERNS_3CFGERNS_10ASTContextERNS_10DiagnosticEb\", \"clang::CheckUninitializedValues(clang::CFG&, clang::ASTContext&, clang::Diagnostic&, bool)\"},\n    {\"_ZN12_GLOBAL__N_126UninitializedValuesCheckerD1Ev\", \"(anonymous namespace)::UninitializedValuesChecker::~UninitializedValuesChecker()\"},\n    {\"_ZN5clang14DataflowSolverINS_19UninitializedValuesEN12_GLOBAL__N_113TransferFuncsENS_23StmtDeclBitVector_Types5UnionESt8equal_toINS4_5ValTyEEE12ProcessBlockEPKNS_8CFGBlockEbNS_8dataflow20forward_analysis_tagE\", \"clang::DataflowSolver<clang::UninitializedValues, (anonymous namespace)::TransferFuncs, clang::StmtDeclBitVector_Types::Union, std::equal_to<clang::StmtDeclBitVector_Types::ValTy> >::ProcessBlock(clang::CFGBlock const*, bool, clang::dataflow::forward_analysis_tag)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs19BlockStmt_VisitExprEPN5clang4ExprE\", \"(anonymous namespace)::TransferFuncs::BlockStmt_VisitExpr(clang::Expr*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_113TransferFuncsEbE5VisitEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::TransferFuncs, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::TransferFuncs::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::TransferFuncs::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_113TransferFuncs9VisitStmtEPN5clang4StmtE\", \"(anonymous namespace)::TransferFuncs::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_113TransferFuncsEbE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::TransferFuncs, bool>::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_113RegisterDeclsEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::RegisterDecls, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_113RegisterDeclsEvE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::RegisterDecls, void>::VisitChildren(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_126UninitializedValuesCheckerD0Ev\", \"(anonymous namespace)::UninitializedValuesChecker::~UninitializedValuesChecker()\"},\n    {\"_ZN12_GLOBAL__N_126UninitializedValuesChecker18ObserveDeclRefExprERN5clang23StmtDeclBitVector_Types5ValTyERNS1_30UninitializedValues_ValueTypes14AnalysisDataTyEPNS1_11DeclRefExprEPNS1_7VarDeclE\", \"(anonymous namespace)::UninitializedValuesChecker::ObserveDeclRefExpr(clang::StmtDeclBitVector_Types::ValTy&, clang::UninitializedValues_ValueTypes::AnalysisDataTy&, clang::DeclRefExpr*, clang::VarDecl*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4StmtENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::Stmt const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::Stmt const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::FindAndConstruct(clang::Stmt const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4StmtENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::Stmt const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::Stmt const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::InsertIntoBucket(clang::Stmt const* const&, clang::StmtDeclBitVector_Types::ValTy const&, std::pair<clang::Stmt const*, clang::StmtDeclBitVector_Types::ValTy>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4StmtENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::Stmt const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::Stmt const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::grow(unsigned int)\"},\n    {\"_ZN5clang18DataflowWorkListTy7dequeueEv\", \"clang::DataflowWorkListTy::dequeue()\"},\n    {\"_ZN4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEE4findERKS2_\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::find(clang::ProgramPoint const&)\"},\n    {\"_ZN5clang18DataflowWorkListTy7enqueueEPKNS_8CFGBlockE\", \"clang::DataflowWorkListTy::enqueue(clang::CFGBlock const*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang8CFGBlockEhNS_12DenseMapInfoIS4_EENS5_IhEEE16InsertIntoBucketERKS4_RKhPSt4pairIS4_hE\", \"llvm::DenseMap<clang::CFGBlock const*, unsigned char, llvm::DenseMapInfo<clang::CFGBlock const*>, llvm::DenseMapInfo<unsigned char> >::InsertIntoBucket(clang::CFGBlock const* const&, unsigned char const&, std::pair<clang::CFGBlock const*, unsigned char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang8CFGBlockEhNS_12DenseMapInfoIS4_EENS5_IhEEE4growEj\", \"llvm::DenseMap<clang::CFGBlock const*, unsigned char, llvm::DenseMapInfo<clang::CFGBlock const*>, llvm::DenseMapInfo<unsigned char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::FindAndConstruct(clang::ProgramPoint const&)\"},\n    {\"_ZNK4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEE15LookupBucketForERKS2_RPSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::LookupBucketFor(clang::ProgramPoint const&, std::pair<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy>*&) const\"},\n    {\"_ZN4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::InsertIntoBucket(clang::ProgramPoint const&, clang::StmtDeclBitVector_Types::ValTy const&, std::pair<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang12ProgramPointENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<clang::ProgramPoint, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::ProgramPoint>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::grow(unsigned int)\"},\n    {\"_ZNK5clang12ProgramPoint12getHashValueEv\", \"clang::ProgramPoint::getHashValue() const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang8CFGBlockENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE6insertERKSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::CFGBlock const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::insert(std::pair<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy> const&)\"},\n    {\"_ZNSt4pairIPKN5clang8CFGBlockENS0_23StmtDeclBitVector_Types5ValTyEEC2ERKS3_RKS5_\", \"std::pair<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy>::pair(clang::CFGBlock const* const&, clang::StmtDeclBitVector_Types::ValTy const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang8CFGBlockENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::CFGBlock const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::InsertIntoBucket(clang::CFGBlock const* const&, clang::StmtDeclBitVector_Types::ValTy const&, std::pair<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang8CFGBlockENS1_23StmtDeclBitVector_Types5ValTyENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::CFGBlock const*, clang::StmtDeclBitVector_Types::ValTy, llvm::DenseMapInfo<clang::CFGBlock const*>, llvm::DenseMapInfo<clang::StmtDeclBitVector_Types::ValTy> >::grow(unsigned int)\"},\n    {\"_ZN5clang23StmtDeclBitVector_Types5ValTyoRERKS1_\", \"clang::StmtDeclBitVector_Types::ValTy::operator|=(clang::StmtDeclBitVector_Types::ValTy const&)\"},\n    {\"_ZN5clang19DeclBitVector_Types14AnalysisDataTy8RegisterEPKNS_9NamedDeclE\", \"clang::DeclBitVector_Types::AnalysisDataTy::Register(clang::NamedDecl const*)\"},\n    {\"_ZN5clang14DataflowValuesINS_30UninitializedValues_ValueTypesENS_8dataflow20forward_analysis_tagEED2Ev\", \"clang::DataflowValues<clang::UninitializedValues_ValueTypes, clang::dataflow::forward_analysis_tag>::~DataflowValues()\"},\n    {\"_ZN5clang30UninitializedValues_ValueTypes14AnalysisDataTyD1Ev\", \"clang::UninitializedValues_ValueTypes::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang30UninitializedValues_ValueTypes14AnalysisDataTyD0Ev\", \"clang::UninitializedValues_ValueTypes::AnalysisDataTy::~AnalysisDataTy()\"},\n    {\"_ZN5clang14DataflowValuesINS_30UninitializedValues_ValueTypesENS_8dataflow20forward_analysis_tagEEC2Ev\", \"clang::DataflowValues<clang::UninitializedValues_ValueTypes, clang::dataflow::forward_analysis_tag>::DataflowValues()\"},\n    {\"_ZN5clang33runUninitializedVariablesAnalysisERKNS_11DeclContextERKNS_3CFGERNS_15AnalysisContextERNS_22UninitVariablesHandlerE\", \"clang::runUninitializedVariablesAnalysis(clang::DeclContext const&, clang::CFG const&, clang::AnalysisContext&, clang::UninitVariablesHandler&)\"},\n    {\"_Z10runOnBlockPKN5clang8CFGBlockERKNS_3CFGERNS_15AnalysisContextERN12_GLOBAL__N_114CFGBlockValuesEPNS_22UninitVariablesHandlerEb\", \"runOnBlock(clang::CFGBlock const*, clang::CFG const&, clang::AnalysisContext&, (anonymous namespace)::CFGBlockValues&, clang::UninitVariablesHandler*, bool)\"},\n    {\"_ZN5clang22UninitVariablesHandlerD0Ev\", \"clang::UninitVariablesHandler::~UninitVariablesHandler()\"},\n    {\"_ZN5clang22UninitVariablesHandlerD1Ev\", \"clang::UninitVariablesHandler::~UninitVariablesHandler()\"},\n    {\"_ZN5clang22UninitVariablesHandlerD2Ev\", \"clang::UninitVariablesHandler::~UninitVariablesHandler()\"},\n    {\"_Z25getLogicalOperatorInChainPKN5clang8CFGBlockE\", \"getLogicalOperatorInChain(clang::CFGBlock const*)\"},\n    {\"_ZN12_GLOBAL__N_114CFGBlockValues12getBitVectorEPKN5clang8CFGBlockES4_\", \"(anonymous namespace)::CFGBlockValues::getBitVector(clang::CFGBlock const*, clang::CFGBlock const*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_117TransferFunctionsEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::TransferFunctions, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_117TransferFunctions19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::TransferFunctions::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_117TransferFunctions18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::TransferFunctions::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN5clang14CFGStmtVisitorIN12_GLOBAL__N_117TransferFunctionsEvE13VisitChildrenEPNS_4StmtE\", \"clang::CFGStmtVisitor<(anonymous namespace)::TransferFunctions, void>::VisitChildren(clang::Stmt*)\"},\n    {\"_Z12isTrackedVarPKN5clang7VarDeclEPKNS_11DeclContextE\", \"isTrackedVar(clang::VarDecl const*, clang::DeclContext const*)\"},\n    {\"_ZN12_GLOBAL__N_117TransferFunctions13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::TransferFunctions::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_ZNK4llvm9BitVectoreqERKS0_\", \"llvm::BitVector::operator==(llvm::BitVector const&) const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_10BlocksAttrEEEPT_v\", \"clang::BlocksAttr* clang::Decl::getAttr<clang::BlocksAttr>() const\"},\n    {\"_ZN5clang3idx12EntityGetter9getEntityENS0_6EntityENS_15DeclarationNameEjb\", \"clang::idx::EntityGetter::getEntity(clang::idx::Entity, clang::DeclarationName, unsigned int, bool)\"},\n    {\"_ZN5clang3idx12EntityGetter15getGlobalEntityEN4llvm9StringRefE\", \"clang::idx::EntityGetter::getGlobalEntity(llvm::StringRef)\"},\n    {\"_ZN5clang3idx12EntityGetter14VisitNamedDeclEPNS_9NamedDeclE\", \"clang::idx::EntityGetter::VisitNamedDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang3idx6EntityC1EPNS_4DeclE\", \"clang::idx::Entity::Entity(clang::Decl*)\"},\n    {\"_ZN5clang3idx12EntityGetter12VisitVarDeclEPNS_7VarDeclE\", \"clang::idx::EntityGetter::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN5clang3idx12EntityGetter17VisitFunctionDeclEPNS_12FunctionDeclE\", \"clang::idx::EntityGetter::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN5clang3idx12EntityGetter14VisitFieldDeclEPNS_9FieldDeclE\", \"clang::idx::EntityGetter::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang3idx12EntityGetter13VisitTypeDeclEPNS_8TypeDeclE\", \"clang::idx::EntityGetter::VisitTypeDecl(clang::TypeDecl*)\"},\n    {\"_ZN5clang3idx10EntityImpl7getDeclERNS_10ASTContextE\", \"clang::idx::EntityImpl::getDecl(clang::ASTContext&)\"},\n    {\"_ZNK5clang3idx6Entity7getDeclERNS_10ASTContextE\", \"clang::idx::Entity::getDecl(clang::ASTContext&) const\"},\n    {\"_ZN5clang3idx10EntityImpl3getEPNS_4DeclERNS0_7ProgramERNS0_11ProgramImplE\", \"clang::idx::EntityImpl::get(clang::Decl*, clang::idx::Program&, clang::idx::ProgramImpl&)\"},\n    {\"_ZN5clang3idx10EntityImpl3getEN4llvm9StringRefERNS0_7ProgramERNS0_11ProgramImplE\", \"clang::idx::EntityImpl::get(llvm::StringRef, clang::idx::Program&, clang::idx::ProgramImpl&)\"},\n    {\"_ZN5clang3idx10EntityImpl16getPrintableNameEv\", \"clang::idx::EntityImpl::getPrintableName()\"},\n    {\"_ZN5clang3idx6EntityC2EPNS_4DeclE\", \"clang::idx::Entity::Entity(clang::Decl*)\"},\n    {\"_ZNK5clang3idx6Entity16getPrintableNameEv\", \"clang::idx::Entity::getPrintableName() const\"},\n    {\"_ZN5clang3idx6Entity3getEPNS_4DeclERNS0_7ProgramE\", \"clang::idx::Entity::get(clang::Decl*, clang::idx::Program&)\"},\n    {\"_ZN5clang3idx6Entity3getEN4llvm9StringRefERNS0_7ProgramE\", \"clang::idx::Entity::get(llvm::StringRef, clang::idx::Program&)\"},\n    {\"_ZN4llvm12DenseMapInfoIN5clang3idx6EntityEE12getHashValueES3_\", \"llvm::DenseMapInfo<clang::idx::Entity>::getHashValue(clang::idx::Entity)\"},\n    {\"_ZN5clang11DeclVisitorINS_3idx12EntityGetterENS1_6EntityEE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<clang::idx::EntityGetter, clang::idx::Entity>::Visit(clang::Decl*)\"},\n    {\"_ZNK5clang3idx14GlobalSelector11getSelectorERNS_10ASTContextE\", \"clang::idx::GlobalSelector::getSelector(clang::ASTContext&) const\"},\n    {\"_ZNK5clang3idx14GlobalSelector16getPrintableNameEv\", \"clang::idx::GlobalSelector::getPrintableName() const\"},\n    {\"_ZN5clang3idx14GlobalSelector3getENS_8SelectorERNS0_7ProgramE\", \"clang::idx::GlobalSelector::get(clang::Selector, clang::idx::Program&)\"},\n    {\"_ZN4llvm12DenseMapInfoIN5clang3idx14GlobalSelectorEE12getHashValueES3_\", \"llvm::DenseMapInfo<clang::idx::GlobalSelector>::getHashValue(clang::idx::GlobalSelector)\"},\n    {\"_ZN5clang3idx13EntityHandlerD0Ev\", \"clang::idx::EntityHandler::~EntityHandler()\"},\n    {\"_ZN5clang3idx13EntityHandlerD1Ev\", \"clang::idx::EntityHandler::~EntityHandler()\"},\n    {\"_ZN5clang3idx13EntityHandlerD2Ev\", \"clang::idx::EntityHandler::~EntityHandler()\"},\n    {\"_ZN5clang3idx22TranslationUnitHandlerD0Ev\", \"clang::idx::TranslationUnitHandler::~TranslationUnitHandler()\"},\n    {\"_ZN5clang3idx22TranslationUnitHandlerD1Ev\", \"clang::idx::TranslationUnitHandler::~TranslationUnitHandler()\"},\n    {\"_ZN5clang3idx22TranslationUnitHandlerD2Ev\", \"clang::idx::TranslationUnitHandler::~TranslationUnitHandler()\"},\n    {\"_ZN5clang3idx17TULocationHandlerD0Ev\", \"clang::idx::TULocationHandler::~TULocationHandler()\"},\n    {\"_ZN5clang3idx17TULocationHandlerD1Ev\", \"clang::idx::TULocationHandler::~TULocationHandler()\"},\n    {\"_ZN5clang3idx17TULocationHandlerD2Ev\", \"clang::idx::TULocationHandler::~TULocationHandler()\"},\n    {\"_ZN5clang3idx13IndexProviderD0Ev\", \"clang::idx::IndexProvider::~IndexProvider()\"},\n    {\"_ZN5clang3idx13IndexProviderD1Ev\", \"clang::idx::IndexProvider::~IndexProvider()\"},\n    {\"_ZN5clang3idx13IndexProviderD2Ev\", \"clang::idx::IndexProvider::~IndexProvider()\"},\n    {\"_ZN5clang3idx7Indexer8IndexASTEPNS0_15TranslationUnitE\", \"clang::idx::Indexer::IndexAST(clang::idx::TranslationUnit*)\"},\n    {\"_ZN12_GLOBAL__N_113EntityIndexerD1Ev\", \"(anonymous namespace)::EntityIndexer::~EntityIndexer()\"},\n    {\"_ZN5clang3idx7Indexer22GetTranslationUnitsForENS0_6EntityERNS0_22TranslationUnitHandlerE\", \"clang::idx::Indexer::GetTranslationUnitsFor(clang::idx::Entity, clang::idx::TranslationUnitHandler&)\"},\n    {\"_ZN5clang3idx7Indexer22GetTranslationUnitsForENS0_14GlobalSelectorERNS0_22TranslationUnitHandlerE\", \"clang::idx::Indexer::GetTranslationUnitsFor(clang::idx::GlobalSelector, clang::idx::TranslationUnitHandler&)\"},\n    {\"_ZN5clang3idx7Indexer16getDefinitionForENS0_6EntityE\", \"clang::idx::Indexer::getDefinitionFor(clang::idx::Entity)\"},\n    {\"_ZN5clang11DeclVisitorIN12_GLOBAL__N_115SelectorIndexerEvE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<(anonymous namespace)::SelectorIndexer, void>::Visit(clang::Decl*)\"},\n    {\"_ZN5clang11DeclVisitorIN12_GLOBAL__N_115SelectorIndexerEvE14VisitNamedDeclEPNS_9NamedDeclE\", \"clang::DeclVisitor<(anonymous namespace)::SelectorIndexer, void>::VisitNamedDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_115SelectorIndexerEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::SelectorIndexer, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang3idx10ASTVisitorIN12_GLOBAL__N_115SelectorIndexerEE9VisitStmtEPNS_4StmtE\", \"clang::idx::ASTVisitor<(anonymous namespace)::SelectorIndexer>::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN5clang3idx10ASTVisitorIN12_GLOBAL__N_115SelectorIndexerEE19VisitDeclaratorDeclEPNS_14DeclaratorDeclE\", \"clang::idx::ASTVisitor<(anonymous namespace)::SelectorIndexer>::VisitDeclaratorDecl(clang::DeclaratorDecl*)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_115SelectorIndexerEvE5VisitENS_7TypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::SelectorIndexer, void>::Visit(clang::TypeLoc)\"},\n    {\"_ZN12_GLOBAL__N_113EntityIndexerD0Ev\", \"(anonymous namespace)::EntityIndexer::~EntityIndexer()\"},\n    {\"_ZN12_GLOBAL__N_113EntityIndexer6HandleEN5clang3idx6EntityE\", \"(anonymous namespace)::EntityIndexer::Handle(clang::idx::Entity)\"},\n    {\"_ZN5clang3idx7IndexerD1Ev\", \"clang::idx::Indexer::~Indexer()\"},\n    {\"_ZN5clang3idx7IndexerD0Ev\", \"clang::idx::Indexer::~Indexer()\"},\n    {\"_ZNSt3mapIN5clang3idx14GlobalSelectorEN4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEESt4lessIS2_ESaISt4pairIKS2_S7_EEEixERSB_\", \"std::map<clang::idx::GlobalSelector, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u>, std::less<clang::idx::GlobalSelector>, std::allocator<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::operator[](clang::idx::GlobalSelector const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx14GlobalSelectorESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<clang::idx::GlobalSelector, std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::GlobalSelector>, std::allocator<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx14GlobalSelectorESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<clang::idx::GlobalSelector, std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::GlobalSelector>, std::allocator<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_insert_unique(std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang10ASTContextEPNS1_3idx15TranslationUnitENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PSt4pairIS3_S6_E\", \"llvm::DenseMap<clang::ASTContext*, clang::idx::TranslationUnit*, llvm::DenseMapInfo<clang::ASTContext*>, llvm::DenseMapInfo<clang::idx::TranslationUnit*> >::InsertIntoBucket(clang::ASTContext* const&, clang::idx::TranslationUnit* const&, std::pair<clang::ASTContext*, clang::idx::TranslationUnit*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang10ASTContextEPNS1_3idx15TranslationUnitENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::ASTContext*, clang::idx::TranslationUnit*, llvm::DenseMapInfo<clang::ASTContext*>, llvm::DenseMapInfo<clang::idx::TranslationUnit*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_S3_IPNS0_12FunctionDeclEPNS1_15TranslationUnitEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> >, std::_Select1st<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > >*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx14GlobalSelectorESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<clang::idx::GlobalSelector, std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::GlobalSelector>, std::allocator<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::idx::GlobalSelector const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >*)\"},\n    {\"_ZNSt3mapIN5clang3idx6EntityEN4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEESt4lessIS2_ESaISt4pairIKS2_S7_EEEixERSB_\", \"std::map<clang::idx::Entity, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u>, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::operator[](clang::idx::Entity const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_S3_IPNS0_12FunctionDeclEPNS1_15TranslationUnitEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> >, std::_Select1st<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > >, std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_S3_IPNS0_12FunctionDeclEPNS1_15TranslationUnitEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> >, std::_Select1st<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > > >::_M_insert_unique(std::pair<clang::idx::Entity const, std::pair<clang::FunctionDecl*, clang::idx::TranslationUnit*> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang3idx6EntityESt4pairIKS2_N4llvm11SmallPtrSetIPNS1_15TranslationUnitELj4EEEESt10_Select1stISA_ESt4lessIS2_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<clang::idx::Entity, std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> >, std::_Select1st<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > >, std::less<clang::idx::Entity>, std::allocator<std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > > >::_M_insert_unique(std::pair<clang::idx::Entity const, llvm::SmallPtrSet<clang::idx::TranslationUnit*, 4u> > const&)\"},\n    {\"_ZN5clang3idx15TranslationUnitD0Ev\", \"clang::idx::TranslationUnit::~TranslationUnit()\"},\n    {\"_ZN5clang3idx15TranslationUnitD1Ev\", \"clang::idx::TranslationUnit::~TranslationUnit()\"},\n    {\"_ZN5clang3idx15TranslationUnitD2Ev\", \"clang::idx::TranslationUnit::~TranslationUnit()\"},\n    {\"_ZN5clang3idx7ProgramC1Ev\", \"clang::idx::Program::Program()\"},\n    {\"_ZN5clang3idx7ProgramC2Ev\", \"clang::idx::Program::Program()\"},\n    {\"_ZN5clang3idx7ProgramD1Ev\", \"clang::idx::Program::~Program()\"},\n    {\"_ZN5clang3idx7ProgramD2Ev\", \"clang::idx::Program::~Program()\"},\n    {\"_ZN5clang3idx7Program12FindEntitiesERNS_10ASTContextERNS0_13EntityHandlerE\", \"clang::idx::Program::FindEntities(clang::ASTContext&, clang::idx::EntityHandler&)\"},\n    {\"_Z16FindEntitiesInDCPN5clang11DeclContextERNS_3idx7ProgramERNS2_13EntityHandlerE\", \"FindEntitiesInDC(clang::DeclContext*, clang::idx::Program&, clang::idx::EntityHandler&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang3idx10EntityImplEED1Ev\", \"llvm::FoldingSet<clang::idx::EntityImpl>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang3idx10EntityImplEED0Ev\", \"llvm::FoldingSet<clang::idx::EntityImpl>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang3idx10EntityImplEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::idx::EntityImpl>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang3idx10EntityImplEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::idx::EntityImpl>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang3idx10EntityImplEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::idx::EntityImpl>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang3idx11ProgramImplC2Ev\", \"clang::idx::ProgramImpl::ProgramImpl()\"},\n    {\"_ZN5clang9DeltaTreeC1Ev\", \"clang::DeltaTree::DeltaTree()\"},\n    {\"_ZN5clang9DeltaTreeC2Ev\", \"clang::DeltaTree::DeltaTree()\"},\n    {\"_ZN5clang9DeltaTreeC1ERKS0_\", \"clang::DeltaTree::DeltaTree(clang::DeltaTree const&)\"},\n    {\"_ZN5clang9DeltaTreeC2ERKS0_\", \"clang::DeltaTree::DeltaTree(clang::DeltaTree const&)\"},\n    {\"_ZN5clang9DeltaTreeD1Ev\", \"clang::DeltaTree::~DeltaTree()\"},\n    {\"_ZN5clang9DeltaTreeD2Ev\", \"clang::DeltaTree::~DeltaTree()\"},\n    {\"_ZN12_GLOBAL__N_113DeltaTreeNode7DestroyEv\", \"(anonymous namespace)::DeltaTreeNode::Destroy()\"},\n    {\"_ZNK5clang9DeltaTree10getDeltaAtEj\", \"clang::DeltaTree::getDeltaAt(unsigned int) const\"},\n    {\"_ZN5clang9DeltaTree8AddDeltaEji\", \"clang::DeltaTree::AddDelta(unsigned int, int)\"},\n    {\"_ZN12_GLOBAL__N_113DeltaTreeNode11DoInsertionEjiPNS0_12InsertResultE\", \"(anonymous namespace)::DeltaTreeNode::DoInsertion(unsigned int, int, (anonymous namespace)::DeltaTreeNode::InsertResult*)\"},\n    {\"_ZN12_GLOBAL__N_113DeltaTreeNode7DoSplitERNS0_12InsertResultE\", \"(anonymous namespace)::DeltaTreeNode::DoSplit((anonymous namespace)::DeltaTreeNode::InsertResult&)\"},\n    {\"_ZN5clang13FixItRewriterC1ERNS_10DiagnosticERNS_13SourceManagerERKNS_11LangOptionsEPNS_12FixItOptionsE\", \"clang::FixItRewriter::FixItRewriter(clang::Diagnostic&, clang::SourceManager&, clang::LangOptions const&, clang::FixItOptions*)\"},\n    {\"_ZN5clang13FixItRewriterC2ERNS_10DiagnosticERNS_13SourceManagerERKNS_11LangOptionsEPNS_12FixItOptionsE\", \"clang::FixItRewriter::FixItRewriter(clang::Diagnostic&, clang::SourceManager&, clang::LangOptions const&, clang::FixItOptions*)\"},\n    {\"_ZN5clang13FixItRewriterD0Ev\", \"clang::FixItRewriter::~FixItRewriter()\"},\n    {\"_ZN5clang13FixItRewriterD1Ev\", \"clang::FixItRewriter::~FixItRewriter()\"},\n    {\"_ZN5clang13FixItRewriterD2Ev\", \"clang::FixItRewriter::~FixItRewriter()\"},\n    {\"_ZN5clang13FixItRewriter14WriteFixedFileENS_6FileIDERN4llvm11raw_ostreamE\", \"clang::FixItRewriter::WriteFixedFile(clang::FileID, llvm::raw_ostream&)\"},\n    {\"_ZN5clang13FixItRewriter15WriteFixedFilesEv\", \"clang::FixItRewriter::WriteFixedFiles()\"},\n    {\"_ZN5clang13FixItRewriter4DiagENS_14SourceLocationEj\", \"clang::FixItRewriter::Diag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZNK5clang13FixItRewriter25IncludeInDiagnosticCountsEv\", \"clang::FixItRewriter::IncludeInDiagnosticCounts() const\"},\n    {\"_ZN5clang13FixItRewriter16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::FixItRewriter::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN5clang12FixItOptionsD0Ev\", \"clang::FixItOptions::~FixItOptions()\"},\n    {\"_ZN5clang12FixItOptionsD1Ev\", \"clang::FixItOptions::~FixItOptions()\"},\n    {\"_ZN5clang12FixItOptionsD2Ev\", \"clang::FixItOptions::~FixItOptions()\"},\n    {\"_ZN5clang15HTMLPrintAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::HTMLPrintAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang11FixItActionC1Ev\", \"clang::FixItAction::FixItAction()\"},\n    {\"_ZN5clang11FixItActionC2Ev\", \"clang::FixItAction::FixItAction()\"},\n    {\"_ZN5clang11FixItActionD0Ev\", \"clang::FixItAction::~FixItAction()\"},\n    {\"_ZN5clang11FixItActionD1Ev\", \"clang::FixItAction::~FixItAction()\"},\n    {\"_ZN5clang11FixItActionD2Ev\", \"clang::FixItAction::~FixItAction()\"},\n    {\"_ZN5clang11FixItAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::FixItAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang11FixItAction21BeginSourceFileActionERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::FixItAction::BeginSourceFileAction(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang11FixItAction19EndSourceFileActionEv\", \"clang::FixItAction::EndSourceFileAction()\"},\n    {\"_ZN5clang17RewriteObjCAction17CreateASTConsumerERNS_16CompilerInstanceEN4llvm9StringRefE\", \"clang::RewriteObjCAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef)\"},\n    {\"_ZN5clang19RewriteMacrosAction13ExecuteActionEv\", \"clang::RewriteMacrosAction::ExecuteAction()\"},\n    {\"_ZN5clang17RewriteTestAction13ExecuteActionEv\", \"clang::RewriteTestAction::ExecuteAction()\"},\n    {\"_ZN12_GLOBAL__N_119FixItRewriteInPlaceD1Ev\", \"(anonymous namespace)::FixItRewriteInPlace::~FixItRewriteInPlace()\"},\n    {\"_ZN12_GLOBAL__N_119FixItRewriteInPlaceD0Ev\", \"(anonymous namespace)::FixItRewriteInPlace::~FixItRewriteInPlace()\"},\n    {\"_ZN12_GLOBAL__N_119FixItRewriteInPlace15RewriteFilenameERKSs\", \"(anonymous namespace)::FixItRewriteInPlace::RewriteFilename(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_125FixItActionSuffixInserterD1Ev\", \"(anonymous namespace)::FixItActionSuffixInserter::~FixItActionSuffixInserter()\"},\n    {\"_ZN12_GLOBAL__N_125FixItActionSuffixInserterD0Ev\", \"(anonymous namespace)::FixItActionSuffixInserter::~FixItActionSuffixInserter()\"},\n    {\"_ZN12_GLOBAL__N_125FixItActionSuffixInserter15RewriteFilenameERKSs\", \"(anonymous namespace)::FixItActionSuffixInserter::RewriteFilename(std::string const&)\"},\n    {\"_ZNK5clang11FixItAction17hasASTFileSupportEv\", \"clang::FixItAction::hasASTFileSupport() const\"},\n    {\"_ZN5clang15HTMLPrintActionD1Ev\", \"clang::HTMLPrintAction::~HTMLPrintAction()\"},\n    {\"_ZN5clang15HTMLPrintActionD0Ev\", \"clang::HTMLPrintAction::~HTMLPrintAction()\"},\n    {\"_ZN5clang17RewriteObjCActionD1Ev\", \"clang::RewriteObjCAction::~RewriteObjCAction()\"},\n    {\"_ZN5clang17RewriteObjCActionD0Ev\", \"clang::RewriteObjCAction::~RewriteObjCAction()\"},\n    {\"_ZN5clang19RewriteMacrosActionD1Ev\", \"clang::RewriteMacrosAction::~RewriteMacrosAction()\"},\n    {\"_ZN5clang19RewriteMacrosActionD0Ev\", \"clang::RewriteMacrosAction::~RewriteMacrosAction()\"},\n    {\"_ZN5clang17RewriteTestActionD1Ev\", \"clang::RewriteTestAction::~RewriteTestAction()\"},\n    {\"_ZN5clang17RewriteTestActionD0Ev\", \"clang::RewriteTestAction::~RewriteTestAction()\"},\n    {\"_ZN5clang17CreateHTMLPrinterEPN4llvm11raw_ostreamERNS_12PreprocessorEbb\", \"clang::CreateHTMLPrinter(llvm::raw_ostream*, clang::Preprocessor&, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_111HTMLPrinterD1Ev\", \"(anonymous namespace)::HTMLPrinter::~HTMLPrinter()\"},\n    {\"_ZN12_GLOBAL__N_111HTMLPrinterD0Ev\", \"(anonymous namespace)::HTMLPrinter::~HTMLPrinter()\"},\n    {\"_ZN12_GLOBAL__N_111HTMLPrinter10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::HTMLPrinter::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_111HTMLPrinter21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::HTMLPrinter::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN5clang4html14HighlightRangeERNS_8RewriterENS_14SourceLocationES3_PKcS5_\", \"clang::html::HighlightRange(clang::Rewriter&, clang::SourceLocation, clang::SourceLocation, char const*, char const*)\"},\n    {\"_ZN5clang4html14HighlightRangeERNS_13RewriteBufferEjjPKcS4_S4_\", \"clang::html::HighlightRange(clang::RewriteBuffer&, unsigned int, unsigned int, char const*, char const*, char const*)\"},\n    {\"_ZN5clang4html10EscapeTextERNS_8RewriterENS_6FileIDEbb\", \"clang::html::EscapeText(clang::Rewriter&, clang::FileID, bool, bool)\"},\n    {\"_ZN5clang4html10EscapeTextERKSsbb\", \"clang::html::EscapeText(std::string const&, bool, bool)\"},\n    {\"_ZN5clang4html14AddLineNumbersERNS_8RewriterENS_6FileIDE\", \"clang::html::AddLineNumbers(clang::Rewriter&, clang::FileID)\"},\n    {\"_ZN5clang4html33AddHeaderFooterInternalBuiltinCSSERNS_8RewriterENS_6FileIDEPKc\", \"clang::html::AddHeaderFooterInternalBuiltinCSS(clang::Rewriter&, clang::FileID, char const*)\"},\n    {\"_ZN5clang4html15SyntaxHighlightERNS_8RewriterENS_6FileIDERKNS_12PreprocessorE\", \"clang::html::SyntaxHighlight(clang::Rewriter&, clang::FileID, clang::Preprocessor const&)\"},\n    {\"_ZN5clang4html15HighlightMacrosERNS_8RewriterENS_6FileIDERKNS_12PreprocessorE\", \"clang::html::HighlightMacros(clang::Rewriter&, clang::FileID, clang::Preprocessor const&)\"},\n    {\"_ZN12_GLOBAL__N_118IgnoringDiagClientD1Ev\", \"(anonymous namespace)::IgnoringDiagClient::~IgnoringDiagClient()\"},\n    {\"_ZN12_GLOBAL__N_118IgnoringDiagClientD0Ev\", \"(anonymous namespace)::IgnoringDiagClient::~IgnoringDiagClient()\"},\n    {\"_ZN12_GLOBAL__N_118IgnoringDiagClient16HandleDiagnosticEN5clang10Diagnostic5LevelERKNS1_14DiagnosticInfoE\", \"(anonymous namespace)::IgnoringDiagClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN5clang20RewriteMacrosInInputERNS_12PreprocessorEPN4llvm11raw_ostreamE\", \"clang::RewriteMacrosInInput(clang::Preprocessor&, llvm::raw_ostream*)\"},\n    {\"_ZN5clang18CreateObjCRewriterERKSsPN4llvm11raw_ostreamERNS_10DiagnosticERKNS_11LangOptionsEb\", \"clang::CreateObjCRewriter(std::string const&, llvm::raw_ostream*, clang::Diagnostic&, clang::LangOptions const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjCD1Ev\", \"(anonymous namespace)::RewriteObjC::~RewriteObjC()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjCD0Ev\", \"(anonymous namespace)::RewriteObjC::~RewriteObjC()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC10InitializeERN5clang10ASTContextE\", \"(anonymous namespace)::RewriteObjC::Initialize(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC18HandleTopLevelDeclEN5clang12DeclGroupRefE\", \"(anonymous namespace)::RewriteObjC::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC21HandleTranslationUnitERN5clang10ASTContextE\", \"(anonymous namespace)::RewriteObjC::HandleTranslationUnit(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC27RewriteObjCProtocolMetaDataEPN5clang16ObjCProtocolDeclEN4llvm9StringRefES5_RSs\", \"(anonymous namespace)::RewriteObjC::RewriteObjCProtocolMetaData(clang::ObjCProtocolDecl*, llvm::StringRef, llvm::StringRef, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC28SynthesizeMetaDataIntoBufferERSs\", \"(anonymous namespace)::RewriteObjC::SynthesizeMetaDataIntoBuffer(std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC26RewriteObjCMethodsMetaDataIPPN5clang14ObjCMethodDeclEEEvT_S6_bN4llvm9StringRefES8_RSs\", \"void (anonymous namespace)::RewriteObjC::RewriteObjCMethodsMetaData<clang::ObjCMethodDecl**>(clang::ObjCMethodDecl**, clang::ObjCMethodDecl**, bool, llvm::StringRef, llvm::StringRef, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC26RewriteObjCMethodsMetaDataIN5clang11DeclContext22filtered_decl_iteratorINS2_14ObjCMethodDeclEXadL_ZNKS5_13isClassMethodEvEEEEEEvT_S7_bN4llvm9StringRefES9_RSs\", \"void (anonymous namespace)::RewriteObjC::RewriteObjCMethodsMetaData<clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isClassMethod() const)> >(clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isClassMethod() const)>, clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isClassMethod() const)>, bool, llvm::StringRef, llvm::StringRef, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC31RewriteObjCProtocolListMetaDataERKN5clang8ObjCListINS1_16ObjCProtocolDeclEEEN4llvm9StringRefES8_RSs\", \"(anonymous namespace)::RewriteObjC::RewriteObjCProtocolListMetaData(clang::ObjCList<clang::ObjCProtocolDecl> const&, llvm::StringRef, llvm::StringRef, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC28SynthesizeObjCInternalStructEPN5clang17ObjCInterfaceDeclERSs\", \"(anonymous namespace)::RewriteObjC::SynthesizeObjCInternalStruct(clang::ObjCInterfaceDecl*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC17QuoteDoublequotesERSsS1_\", \"(anonymous namespace)::RewriteObjC::QuoteDoublequotes(std::string&, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC31SynthesizeIvarOffsetComputationEPN5clang12ObjCIvarDeclERSs\", \"(anonymous namespace)::RewriteObjC::SynthesizeIvarOffsetComputation(clang::ObjCIvarDecl*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC25RewriteImplementationDeclEPN5clang4DeclE\", \"(anonymous namespace)::RewriteObjC::RewriteImplementationDecl(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC21RewriteObjCMethodDeclEPKN5clang17ObjCInterfaceDeclEPNS1_14ObjCMethodDeclERSs\", \"(anonymous namespace)::RewriteObjC::RewriteObjCMethodDecl(clang::ObjCInterfaceDecl const*, clang::ObjCMethodDecl*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC21RewriteTypeIntoStringEN5clang8QualTypeERSsRPKNS1_12FunctionTypeE\", \"(anonymous namespace)::RewriteObjC::RewriteTypeIntoString(clang::QualType, std::string&, clang::FunctionType const*&)\"},\n    {\"_Z19getIvarAccessStringPN5clang12ObjCIvarDeclE\", \"getIvarAccessString(clang::ObjCIvarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC24HandleTopLevelSingleDeclEPN5clang4DeclE\", \"(anonymous namespace)::RewriteObjC::HandleTopLevelSingleDecl(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC32RewriteBlocksInFunctionProtoTypeEN5clang8QualTypeEPNS1_9NamedDeclE\", \"(anonymous namespace)::RewriteObjC::RewriteBlocksInFunctionProtoType(clang::QualType, clang::NamedDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC22CollectPropertySettersEPN5clang4StmtE\", \"(anonymous namespace)::RewriteObjC::CollectPropertySetters(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC38RewriteFunctionBodyOrGlobalInitializerEPN5clang4StmtE\", \"(anonymous namespace)::RewriteObjC::RewriteFunctionBodyOrGlobalInitializer(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC34RewriteObjCQualifiedInterfaceTypesEPN5clang4DeclE\", \"(anonymous namespace)::RewriteObjC::RewriteObjCQualifiedInterfaceTypes(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23RewriteBlockPointerDeclEPN5clang9NamedDeclE\", \"(anonymous namespace)::RewriteObjC::RewriteBlockPointerDecl(clang::NamedDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC15RewriteCastExprEPN5clang14CStyleCastExprE\", \"(anonymous namespace)::RewriteObjC::RewriteCastExpr(clang::CStyleCastExpr*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC17RewriteRecordBodyEPN5clang10RecordDeclE\", \"(anonymous namespace)::RewriteObjC::RewriteRecordBody(clang::RecordDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23SynthesizeBlockLiteralsEN5clang14SourceLocationEN4llvm9StringRefE\", \"(anonymous namespace)::RewriteObjC::SynthesizeBlockLiterals(clang::SourceLocation, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC31RewriteBlockLiteralFunctionDeclEPN5clang12FunctionDeclE\", \"(anonymous namespace)::RewriteObjC::RewriteBlockLiteralFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23CollectBlockDeclRefInfoEPN5clang9BlockExprE\", \"(anonymous namespace)::RewriteObjC::CollectBlockDeclRefInfo(clang::BlockExpr*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC18RewriteByRefStringERSsRKSsPN5clang9ValueDeclEb\", \"(anonymous namespace)::RewriteObjC::RewriteByRefString(std::string&, std::string const&, clang::ValueDecl*, bool)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23RewriteBlockPointerTypeERSsN5clang8QualTypeE\", \"(anonymous namespace)::RewriteObjC::RewriteBlockPointerType(std::string&, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC20GetBlockDeclRefExprsEPN5clang4StmtE\", \"(anonymous namespace)::RewriteObjC::GetBlockDeclRefExprs(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC33PointerTypeTakesAnyBlockArgumentsEN5clang8QualTypeE\", \"(anonymous namespace)::RewriteObjC::PointerTypeTakesAnyBlockArguments(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23needToScanForQualifiersEN5clang8QualTypeE\", \"(anonymous namespace)::RewriteObjC::needToScanForQualifiers(clang::QualType)\"},\n    {\"_Z21BuildUniqueMethodNameRSsPN5clang14ObjCMethodDeclE\", \"BuildUniqueMethodName(std::string&, clang::ObjCMethodDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC28RewriteObjCNestedIvarRefExprEPN5clang4StmtERb\", \"(anonymous namespace)::RewriteObjC::RewriteObjCNestedIvarRefExpr(clang::Stmt*, bool&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC11ReplaceStmtEPN5clang4StmtES3_\", \"(anonymous namespace)::RewriteObjC::ReplaceStmt(clang::Stmt*, clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC25GetInnerBlockDeclRefExprsEPN5clang4StmtERN4llvm11SmallVectorIPNS1_16BlockDeclRefExprELj8EEERNS4_11SmallPtrSetIPKNS1_11DeclContextELj8EEE\", \"(anonymous namespace)::RewriteObjC::GetInnerBlockDeclRefExprs(clang::Stmt*, llvm::SmallVector<clang::BlockDeclRefExpr*, 8u>&, llvm::SmallPtrSet<clang::DeclContext const*, 8u>&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC23RewriteBlockDeclRefExprEPN5clang4ExprE\", \"(anonymous namespace)::RewriteObjC::RewriteBlockDeclRefExpr(clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC19SynthesizeBlockCallEPN5clang8CallExprEPKNS1_4ExprE\", \"(anonymous namespace)::RewriteObjC::SynthesizeBlockCall(clang::CallExpr*, clang::Expr const*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC15getProtocolTypeEv\", \"(anonymous namespace)::RewriteObjC::getProtocolType()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC14HasReturnStmtsEPN5clang4StmtERb\", \"(anonymous namespace)::RewriteObjC::HasReturnStmts(clang::Stmt*, bool&)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC22RewriteSyncReturnStmtsEPN5clang4StmtESs\", \"(anonymous namespace)::RewriteObjC::RewriteSyncReturnStmts(clang::Stmt*, std::string)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC24WarnAboutReturnGotoStmtsEPN5clang4StmtE\", \"(anonymous namespace)::RewriteObjC::WarnAboutReturnGotoStmts(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC21RewriteTryReturnStmtsEPN5clang4StmtE\", \"(anonymous namespace)::RewriteObjC::RewriteTryReturnStmts(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC16SynthMessageExprEPN5clang15ObjCMessageExprENS1_14SourceLocationES4_\", \"(anonymous namespace)::RewriteObjC::SynthMessageExpr(clang::ObjCMessageExpr*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC26SynthSelGetUidFunctionDeclEv\", \"(anonymous namespace)::RewriteObjC::SynthSelGetUidFunctionDecl()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC28SynthesizeCallToFunctionDeclEPN5clang12FunctionDeclEPPNS1_4ExprEjNS1_14SourceLocationES7_\", \"(anonymous namespace)::RewriteObjC::SynthesizeCallToFunctionDecl(clang::FunctionDecl*, clang::Expr**, unsigned int, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC18getSuperStructTypeEv\", \"(anonymous namespace)::RewriteObjC::getSuperStructType()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC32SynthSuperContructorFunctionDeclEv\", \"(anonymous namespace)::RewriteObjC::SynthSuperContructorFunctionDecl()\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC26SynthBlockInitFunctionDeclEN4llvm9StringRefE\", \"(anonymous namespace)::RewriteObjC::SynthBlockInitFunctionDecl(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_111RewriteObjC24RewriteMethodDeclarationEPN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::RewriteObjC::RewriteMethodDeclaration(clang::ObjCMethodDecl*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14ObjCMethodDeclESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::ObjCMethodDecl*, std::string, llvm::DenseMapInfo<clang::ObjCMethodDecl*>, llvm::DenseMapInfo<std::string> >::FindAndConstruct(clang::ObjCMethodDecl* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14ObjCMethodDeclESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16InsertIntoBucketERKS3_RKSsPSt4pairIS3_SsE\", \"llvm::DenseMap<clang::ObjCMethodDecl*, std::string, llvm::DenseMapInfo<clang::ObjCMethodDecl*>, llvm::DenseMapInfo<std::string> >::InsertIntoBucket(clang::ObjCMethodDecl* const&, std::string const&, std::pair<clang::ObjCMethodDecl*, std::string>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14ObjCMethodDeclESsNS_12DenseMapInfoIS3_EENS4_ISsEEE4growEj\", \"llvm::DenseMap<clang::ObjCMethodDecl*, std::string, llvm::DenseMapInfo<clang::ObjCMethodDecl*>, llvm::DenseMapInfo<std::string> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang14ObjCMethodDeclEE6appendINS1_11DeclContext22filtered_decl_iteratorIS2_XadL_ZNKS2_16isInstanceMethodEvEEEEEEvT_S9_\", \"void llvm::SmallVectorImpl<clang::ObjCMethodDecl*>::append<clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isInstanceMethod() const)> >(clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isInstanceMethod() const)>, clang::DeclContext::filtered_decl_iterator<clang::ObjCMethodDecl, &(clang::ObjCMethodDecl::isInstanceMethod() const)>)\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl9ivar_sizeEv\", \"clang::ObjCInterfaceDecl::ivar_size() const\"},\n    {\"_ZNSs12_S_constructIN5clang22RopePieceBTreeIteratorEEEPcT_S3_RKSaIcESt20forward_iterator_tag\", \"char* std::string::_S_construct<clang::RopePieceBTreeIterator>(clang::RopePieceBTreeIterator, clang::RopePieceBTreeIterator, std::allocator<char> const&, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9BlockExprESsNS_12DenseMapInfoIS3_EENS4_ISsEEE5clearEv\", \"llvm::DenseMap<clang::BlockExpr*, std::string, llvm::DenseMapInfo<clang::BlockExpr*>, llvm::DenseMapInfo<std::string> >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9BlockExprESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16shrink_and_clearEv\", \"llvm::DenseMap<clang::BlockExpr*, std::string, llvm::DenseMapInfo<clang::BlockExpr*>, llvm::DenseMapInfo<std::string> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9BlockExprESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::BlockExpr*, std::string, llvm::DenseMapInfo<clang::BlockExpr*>, llvm::DenseMapInfo<std::string> >::FindAndConstruct(clang::BlockExpr* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9BlockExprESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16InsertIntoBucketERKS3_RKSsPSt4pairIS3_SsE\", \"llvm::DenseMap<clang::BlockExpr*, std::string, llvm::DenseMapInfo<clang::BlockExpr*>, llvm::DenseMapInfo<std::string> >::InsertIntoBucket(clang::BlockExpr* const&, std::string const&, std::pair<clang::BlockExpr*, std::string>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9BlockExprESsNS_12DenseMapInfoIS3_EENS4_ISsEEE4growEj\", \"llvm::DenseMap<clang::BlockExpr*, std::string, llvm::DenseMapInfo<clang::BlockExpr*>, llvm::DenseMapInfo<std::string> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9ValueDeclEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<clang::ValueDecl*, unsigned int, llvm::DenseMapInfo<clang::ValueDecl*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::ValueDecl* const&, unsigned int const&, std::pair<clang::ValueDecl*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9ValueDeclEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<clang::ValueDecl*, unsigned int, llvm::DenseMapInfo<clang::ValueDecl*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang19ConditionalOperatorC2EPNS_4ExprENS_14SourceLocationES2_S3_S2_S2_NS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindE\", \"clang::ConditionalOperator::ConditionalOperator(clang::Expr*, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::Expr*, clang::Expr*, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind)\"},\n    {\"_ZN5clang13UnaryOperatorC2EPNS_4ExprENS_17UnaryOperatorKindENS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindENS_14SourceLocationE\", \"clang::UnaryOperator::UnaryOperator(clang::Expr*, clang::UnaryOperatorKind, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind, clang::SourceLocation)\"},\n    {\"_ZN4llvm8DenseMapIycNS_12DenseMapInfoIyEENS1_IcEEE6insertERKSt4pairIycE\", \"llvm::DenseMap<unsigned long long, char, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<char> >::insert(std::pair<unsigned long long, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIycNS_12DenseMapInfoIyEENS1_IcEEE16InsertIntoBucketERKyRKcPSt4pairIycE\", \"llvm::DenseMap<unsigned long long, char, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<char> >::InsertIntoBucket(unsigned long long const&, char const&, std::pair<unsigned long long, char>*)\"},\n    {\"_ZN4llvm8DenseMapIycNS_12DenseMapInfoIyEENS1_IcEEE4growEj\", \"llvm::DenseMap<unsigned long long, char, llvm::DenseMapInfo<unsigned long long>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN5clang14BinaryOperatorC2EPNS_4ExprES2_NS_18BinaryOperatorKindENS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindENS_14SourceLocationE\", \"clang::BinaryOperator::BinaryOperator(clang::Expr*, clang::Expr*, clang::BinaryOperatorKind, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind, clang::SourceLocation)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4ExprEPNS1_4StmtENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::Expr*, clang::Stmt*, llvm::DenseMapInfo<clang::Expr*>, llvm::DenseMapInfo<clang::Stmt*> >::InsertIntoBucket(clang::Expr* const&, clang::Stmt* const&, std::pair<clang::Expr*, clang::Stmt*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4ExprEPNS1_4StmtENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Expr*, clang::Stmt*, llvm::DenseMapInfo<clang::Expr*>, llvm::DenseMapInfo<clang::Stmt*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<clang::Stmt*, clang::Stmt*, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<clang::Stmt*> >::InsertIntoBucket(clang::Stmt* const&, clang::Stmt* const&, std::pair<clang::Stmt*, clang::Stmt*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4StmtES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<clang::Stmt*, clang::Stmt*, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<clang::Stmt*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4ExprEPNS1_14BinaryOperatorENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::Expr*, clang::BinaryOperator*, llvm::DenseMapInfo<clang::Expr*>, llvm::DenseMapInfo<clang::BinaryOperator*> >::InsertIntoBucket(clang::Expr* const&, clang::BinaryOperator* const&, std::pair<clang::Expr*, clang::BinaryOperator*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4ExprEPNS1_14BinaryOperatorENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::Expr*, clang::BinaryOperator*, llvm::DenseMapInfo<clang::Expr*>, llvm::DenseMapInfo<clang::BinaryOperator*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIN5clang6FileIDESt4pairIKS1_NS0_13RewriteBufferEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<clang::FileID, std::pair<clang::FileID const, clang::RewriteBuffer>, std::_Select1st<std::pair<clang::FileID const, clang::RewriteBuffer> >, std::less<clang::FileID>, std::allocator<std::pair<clang::FileID const, clang::RewriteBuffer> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::FileID const, clang::RewriteBuffer> >*)\"},\n    {\"_ZN5clang22RopePieceBTreeIteratorC1EPKv\", \"clang::RopePieceBTreeIterator::RopePieceBTreeIterator(void const*)\"},\n    {\"_ZN5clang22RopePieceBTreeIteratorC2EPKv\", \"clang::RopePieceBTreeIterator::RopePieceBTreeIterator(void const*)\"},\n    {\"_ZN5clang22RopePieceBTreeIterator15MoveToNextPieceEv\", \"clang::RopePieceBTreeIterator::MoveToNextPiece()\"},\n    {\"_ZN5clang14RopePieceBTreeC1Ev\", \"clang::RopePieceBTree::RopePieceBTree()\"},\n    {\"_ZN5clang14RopePieceBTreeC2Ev\", \"clang::RopePieceBTree::RopePieceBTree()\"},\n    {\"_ZN5clang14RopePieceBTreeC1ERKS0_\", \"clang::RopePieceBTree::RopePieceBTree(clang::RopePieceBTree const&)\"},\n    {\"_ZN5clang14RopePieceBTreeC2ERKS0_\", \"clang::RopePieceBTree::RopePieceBTree(clang::RopePieceBTree const&)\"},\n    {\"_ZN5clang14RopePieceBTreeD1Ev\", \"clang::RopePieceBTree::~RopePieceBTree()\"},\n    {\"_ZN5clang14RopePieceBTreeD2Ev\", \"clang::RopePieceBTree::~RopePieceBTree()\"},\n    {\"_ZN12_GLOBAL__N_118RopePieceBTreeNode7DestroyEv\", \"(anonymous namespace)::RopePieceBTreeNode::Destroy()\"},\n    {\"_ZNK5clang14RopePieceBTree4sizeEv\", \"clang::RopePieceBTree::size() const\"},\n    {\"_ZN5clang14RopePieceBTree5clearEv\", \"clang::RopePieceBTree::clear()\"},\n    {\"_ZN5clang14RopePieceBTree6insertEjRKNS_9RopePieceE\", \"clang::RopePieceBTree::insert(unsigned int, clang::RopePiece const&)\"},\n    {\"_ZN12_GLOBAL__N_118RopePieceBTreeNode5splitEj\", \"(anonymous namespace)::RopePieceBTreeNode::split(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118RopePieceBTreeNode6insertEjRKN5clang9RopePieceE\", \"(anonymous namespace)::RopePieceBTreeNode::insert(unsigned int, clang::RopePiece const&)\"},\n    {\"_ZN5clang14RopePieceBTree5eraseEjj\", \"clang::RopePieceBTree::erase(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_118RopePieceBTreeNode5eraseEjj\", \"(anonymous namespace)::RopePieceBTreeNode::erase(unsigned int, unsigned int)\"},\n    {\"_ZN5clang11RewriteRope14MakeRopeStringEPKcS2_\", \"clang::RewriteRope::MakeRopeString(char const*, char const*)\"},\n    {\"_ZN12_GLOBAL__N_118RopePieceBTreeLeaf6insertEjRKN5clang9RopePieceE\", \"(anonymous namespace)::RopePieceBTreeLeaf::insert(unsigned int, clang::RopePiece const&)\"},\n    {\"_ZN12_GLOBAL__N_122RopePieceBTreeInterior16HandleChildPieceEjPNS_18RopePieceBTreeNodeE\", \"(anonymous namespace)::RopePieceBTreeInterior::HandleChildPiece(unsigned int, (anonymous namespace)::RopePieceBTreeNode*)\"},\n    {\"_ZN5clang13DoRewriteTestERNS_12PreprocessorEPN4llvm11raw_ostreamE\", \"clang::DoRewriteTest(clang::Preprocessor&, llvm::raw_ostream*)\"},\n    {\"_ZNK5clang13RewriteBuffer5writeERN4llvm11raw_ostreamE\", \"clang::RewriteBuffer::write(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang13RewriteBuffer10RemoveTextEjj\", \"clang::RewriteBuffer::RemoveText(unsigned int, unsigned int)\"},\n    {\"_ZN5clang13RewriteBuffer10InsertTextEjN4llvm9StringRefEb\", \"clang::RewriteBuffer::InsertText(unsigned int, llvm::StringRef, bool)\"},\n    {\"_ZN5clang13RewriteBuffer11ReplaceTextEjjN4llvm9StringRefE\", \"clang::RewriteBuffer::ReplaceText(unsigned int, unsigned int, llvm::StringRef)\"},\n    {\"_ZNK5clang8Rewriter12getRangeSizeERKNS_15CharSourceRangeE\", \"clang::Rewriter::getRangeSize(clang::CharSourceRange const&) const\"},\n    {\"_ZNK5clang8Rewriter26getLocationOffsetAndFileIDENS_14SourceLocationERNS_6FileIDE\", \"clang::Rewriter::getLocationOffsetAndFileID(clang::SourceLocation, clang::FileID&) const\"},\n    {\"_ZNK5clang8Rewriter12getRangeSizeENS_11SourceRangeE\", \"clang::Rewriter::getRangeSize(clang::SourceRange) const\"},\n    {\"_ZNK5clang8Rewriter16getRewrittenTextENS_11SourceRangeE\", \"clang::Rewriter::getRewrittenText(clang::SourceRange) const\"},\n    {\"_ZN5clang8Rewriter13getEditBufferENS_6FileIDE\", \"clang::Rewriter::getEditBuffer(clang::FileID)\"},\n    {\"_ZN5clang8Rewriter10InsertTextENS_14SourceLocationEN4llvm9StringRefEb\", \"clang::Rewriter::InsertText(clang::SourceLocation, llvm::StringRef, bool)\"},\n    {\"_ZN5clang8Rewriter10RemoveTextENS_14SourceLocationEj\", \"clang::Rewriter::RemoveText(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang8Rewriter11ReplaceTextENS_14SourceLocationEjN4llvm9StringRefE\", \"clang::Rewriter::ReplaceText(clang::SourceLocation, unsigned int, llvm::StringRef)\"},\n    {\"_ZN5clang8Rewriter11ReplaceStmtEPNS_4StmtES2_\", \"clang::Rewriter::ReplaceStmt(clang::Stmt*, clang::Stmt*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang6FileIDESt4pairIKS1_NS0_13RewriteBufferEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::FileID, std::pair<clang::FileID const, clang::RewriteBuffer>, std::_Select1st<std::pair<clang::FileID const, clang::RewriteBuffer> >, std::less<clang::FileID>, std::allocator<std::pair<clang::FileID const, clang::RewriteBuffer> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::FileID const, clang::RewriteBuffer> >, std::pair<clang::FileID const, clang::RewriteBuffer> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang6FileIDESt4pairIKS1_NS0_13RewriteBufferEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<clang::FileID, std::pair<clang::FileID const, clang::RewriteBuffer>, std::_Select1st<std::pair<clang::FileID const, clang::RewriteBuffer> >, std::less<clang::FileID>, std::allocator<std::pair<clang::FileID const, clang::RewriteBuffer> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<clang::FileID const, clang::RewriteBuffer> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang6FileIDESt4pairIKS1_NS0_13RewriteBufferEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::FileID, std::pair<clang::FileID const, clang::RewriteBuffer>, std::_Select1st<std::pair<clang::FileID const, clang::RewriteBuffer> >, std::less<clang::FileID>, std::allocator<std::pair<clang::FileID const, clang::RewriteBuffer> > >::_M_insert_unique(std::pair<clang::FileID const, clang::RewriteBuffer> const&)\"},\n    {\"_ZN5clang13TokenRewriterC1ENS_6FileIDERNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::TokenRewriter::TokenRewriter(clang::FileID, clang::SourceManager&, clang::LangOptions const&)\"},\n    {\"_ZN5clang13TokenRewriterC2ENS_6FileIDERNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::TokenRewriter::TokenRewriter(clang::FileID, clang::SourceManager&, clang::LangOptions const&)\"},\n    {\"_ZN5clang13TokenRewriter8AddTokenERKNS_5TokenESt14_List_iteratorIS1_E\", \"clang::TokenRewriter::AddToken(clang::Token const&, std::_List_iterator<clang::Token>)\"},\n    {\"_ZN5clang13TokenRewriterD1Ev\", \"clang::TokenRewriter::~TokenRewriter()\"},\n    {\"_ZN5clang13TokenRewriterD2Ev\", \"clang::TokenRewriter::~TokenRewriter()\"},\n    {\"_ZN5clang13TokenRewriter13RemapIteratorESt20_List_const_iteratorINS_5TokenEE\", \"clang::TokenRewriter::RemapIterator(std::_List_const_iterator<clang::Token>)\"},\n    {\"_ZN5clang13TokenRewriter14AddTokenBeforeESt20_List_const_iteratorINS_5TokenEEPKc\", \"clang::TokenRewriter::AddTokenBefore(std::_List_const_iterator<clang::Token>, char const*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang14SourceLocationESt4pairIKS1_St14_List_iteratorINS0_5TokenEEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<clang::SourceLocation, std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> >, std::_Select1st<std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > >, std::less<clang::SourceLocation>, std::allocator<std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > > >::_M_insert_unique(std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang14SourceLocationESt4pairIKS1_St14_List_iteratorINS0_5TokenEEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<clang::SourceLocation, std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> >, std::_Select1st<std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > >, std::less<clang::SourceLocation>, std::allocator<std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > > >::_M_erase(std::_Rb_tree_node<std::pair<clang::SourceLocation const, std::_List_iterator<clang::Token> > >*)\"},\n    {\"_ZN5clang7APValueC1EPNS_4ExprE\", \"clang::APValue::APValue(clang::Expr*)\"},\n    {\"_ZN5clang7APValueC2EPNS_4ExprE\", \"clang::APValue::APValue(clang::Expr*)\"},\n    {\"_ZN5clang7APValue10MakeLValueEv\", \"clang::APValue::MakeLValue()\"},\n    {\"_ZN5clang7APValue9setLValueEPNS_4ExprERKNS_9CharUnitsE\", \"clang::APValue::setLValue(clang::Expr*, clang::CharUnits const&)\"},\n    {\"_ZN5clang7APValueaSERKS0_\", \"clang::APValue::operator=(clang::APValue const&)\"},\n    {\"_ZN5clang7APValue10MakeUninitEv\", \"clang::APValue::MakeUninit()\"},\n    {\"_ZNK5clang7APValue13getLValueBaseEv\", \"clang::APValue::getLValueBase() const\"},\n    {\"_ZNK5clang7APValue15getLValueOffsetEv\", \"clang::APValue::getLValueOffset() const\"},\n    {\"_ZNK5clang7APValue4dumpEv\", \"clang::APValue::dump() const\"},\n    {\"_ZNK5clang7APValue5printERN4llvm11raw_ostreamE\", \"clang::APValue::print(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang11ASTConsumer18HandleTopLevelDeclENS_12DeclGroupRefE\", \"clang::ASTConsumer::HandleTopLevelDecl(clang::DeclGroupRef)\"},\n    {\"_ZN5clang11ASTConsumer21HandleInterestingDeclENS_12DeclGroupRefE\", \"clang::ASTConsumer::HandleInterestingDecl(clang::DeclGroupRef)\"},\n    {\"_ZN5clang10ASTContext29CanonicalTemplateTemplateParm7ProfileERN4llvm16FoldingSetNodeIDEPNS_24TemplateTemplateParmDeclE\", \"clang::ASTContext::CanonicalTemplateTemplateParm::Profile(llvm::FoldingSetNodeID&, clang::TemplateTemplateParmDecl*)\"},\n    {\"_ZNK5clang10ASTContext36getCanonicalTemplateTemplateParmDeclEPNS_24TemplateTemplateParmDeclE\", \"clang::ASTContext::getCanonicalTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl*) const\"},\n    {\"_ZNK5clang10ASTContext24getTrivialTypeSourceInfoENS_8QualTypeENS_14SourceLocationE\", \"clang::ASTContext::getTrivialTypeSourceInfo(clang::QualType, clang::SourceLocation) const\"},\n    {\"_ZN5clang10ASTContext12createCXXABIERKNS_10TargetInfoE\", \"clang::ASTContext::createCXXABI(clang::TargetInfo const&)\"},\n    {\"_ZN5clang10ASTContextC1ERKNS_11LangOptionsERNS_13SourceManagerERKNS_10TargetInfoERNS_15IdentifierTableERNS_13SelectorTableERNS_7Builtin7ContextEj\", \"clang::ASTContext::ASTContext(clang::LangOptions const&, clang::SourceManager&, clang::TargetInfo const&, clang::IdentifierTable&, clang::SelectorTable&, clang::Builtin::Context&, unsigned int)\"},\n    {\"_ZN5clang10ASTContextC2ERKNS_11LangOptionsERNS_13SourceManagerERKNS_10TargetInfoERNS_15IdentifierTableERNS_13SelectorTableERNS_7Builtin7ContextEj\", \"clang::ASTContext::ASTContext(clang::LangOptions const&, clang::SourceManager&, clang::TargetInfo const&, clang::IdentifierTable&, clang::SelectorTable&, clang::Builtin::Context&, unsigned int)\"},\n    {\"_ZN5clang10ASTContext16InitBuiltinTypesEv\", \"clang::ASTContext::InitBuiltinTypes()\"},\n    {\"_ZN5clang10ASTContextD1Ev\", \"clang::ASTContext::~ASTContext()\"},\n    {\"_ZN5clang10ASTContextD2Ev\", \"clang::ASTContext::~ASTContext()\"},\n    {\"_ZN5clang10ASTContext15AddDeallocationEPFvPvES1_\", \"clang::ASTContext::AddDeallocation(void (*)(void*), void*)\"},\n    {\"_ZN5clang10ASTContext17setExternalSourceERN4llvm9OwningPtrINS_17ExternalASTSourceEEE\", \"clang::ASTContext::setExternalSource(llvm::OwningPtr<clang::ExternalASTSource>&)\"},\n    {\"_ZNK5clang10ASTContext10PrintStatsEv\", \"clang::ASTContext::PrintStats() const\"},\n    {\"_ZN5clang10ASTContext15InitBuiltinTypeERNS_7CanQualINS_4TypeEEENS_11BuiltinType4KindE\", \"clang::ASTContext::InitBuiltinType(clang::CanQual<clang::Type>&, clang::BuiltinType::Kind)\"},\n    {\"_ZNK5clang10ASTContext17getFromTargetTypeEj\", \"clang::ASTContext::getFromTargetType(unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext14getDiagnosticsEv\", \"clang::ASTContext::getDiagnostics() const\"},\n    {\"_ZN5clang10ASTContext12getDeclAttrsEPKNS_4DeclE\", \"clang::ASTContext::getDeclAttrs(clang::Decl const*)\"},\n    {\"_ZN5clang10ASTContext14eraseDeclAttrsEPKNS_4DeclE\", \"clang::ASTContext::eraseDeclAttrs(clang::Decl const*)\"},\n    {\"_ZN5clang10ASTContext35getInstantiatedFromStaticDataMemberEPKNS_7VarDeclE\", \"clang::ASTContext::getInstantiatedFromStaticDataMember(clang::VarDecl const*)\"},\n    {\"_ZN5clang10ASTContext35setInstantiatedFromStaticDataMemberEPNS_7VarDeclES2_NS_26TemplateSpecializationKindENS_14SourceLocationE\", \"clang::ASTContext::setInstantiatedFromStaticDataMember(clang::VarDecl*, clang::VarDecl*, clang::TemplateSpecializationKind, clang::SourceLocation)\"},\n    {\"_ZN5clang10ASTContext28getInstantiatedFromUsingDeclEPNS_9UsingDeclE\", \"clang::ASTContext::getInstantiatedFromUsingDecl(clang::UsingDecl*)\"},\n    {\"_ZN5clang10ASTContext28setInstantiatedFromUsingDeclEPNS_9UsingDeclEPNS_9NamedDeclE\", \"clang::ASTContext::setInstantiatedFromUsingDecl(clang::UsingDecl*, clang::NamedDecl*)\"},\n    {\"_ZN5clang10ASTContext34getInstantiatedFromUsingShadowDeclEPNS_15UsingShadowDeclE\", \"clang::ASTContext::getInstantiatedFromUsingShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang10ASTContext34setInstantiatedFromUsingShadowDeclEPNS_15UsingShadowDeclES2_\", \"clang::ASTContext::setInstantiatedFromUsingShadowDecl(clang::UsingShadowDecl*, clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang10ASTContext35getInstantiatedFromUnnamedFieldDeclEPNS_9FieldDeclE\", \"clang::ASTContext::getInstantiatedFromUnnamedFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN5clang10ASTContext35setInstantiatedFromUnnamedFieldDeclEPNS_9FieldDeclES2_\", \"clang::ASTContext::setInstantiatedFromUnnamedFieldDecl(clang::FieldDecl*, clang::FieldDecl*)\"},\n    {\"_ZNK5clang10ASTContext24overridden_methods_beginEPKNS_13CXXMethodDeclE\", \"clang::ASTContext::overridden_methods_begin(clang::CXXMethodDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext22overridden_methods_endEPKNS_13CXXMethodDeclE\", \"clang::ASTContext::overridden_methods_end(clang::CXXMethodDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext23overridden_methods_sizeEPKNS_13CXXMethodDeclE\", \"clang::ASTContext::overridden_methods_size(clang::CXXMethodDecl const*) const\"},\n    {\"_ZN5clang10ASTContext19addOverriddenMethodEPKNS_13CXXMethodDeclES3_\", \"clang::ASTContext::addOverriddenMethod(clang::CXXMethodDecl const*, clang::CXXMethodDecl const*)\"},\n    {\"_ZNK5clang10ASTContext21getFloatTypeSemanticsENS_8QualTypeE\", \"clang::ASTContext::getFloatTypeSemantics(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext12getDeclAlignEPKNS_4DeclEb\", \"clang::ASTContext::getDeclAlign(clang::Decl const*, bool) const\"},\n    {\"_ZNK5clang10ASTContext14getPointerTypeENS_8QualTypeE\", \"clang::ASTContext::getPointerType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext14getAsArrayTypeENS_8QualTypeE\", \"clang::ASTContext::getAsArrayType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext18getBaseElementTypeEPKNS_9ArrayTypeE\", \"clang::ASTContext::getBaseElementType(clang::ArrayType const*) const\"},\n    {\"_ZNK5clang10ASTContext21getPreferredTypeAlignEPKNS_4TypeE\", \"clang::ASTContext::getPreferredTypeAlign(clang::Type const*) const\"},\n    {\"_ZNK5clang10ASTContext19toCharUnitsFromBitsEx\", \"clang::ASTContext::toCharUnitsFromBits(long long) const\"},\n    {\"_ZN5clang10ASTContext18getTypeInfoInCharsEPKNS_4TypeE\", \"clang::ASTContext::getTypeInfoInChars(clang::Type const*)\"},\n    {\"_ZNK5clang10ASTContext11getTypeInfoEPKNS_4TypeE\", \"clang::ASTContext::getTypeInfo(clang::Type const*) const\"},\n    {\"_ZN5clang10ASTContext18getTypeInfoInCharsENS_8QualTypeE\", \"clang::ASTContext::getTypeInfoInChars(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext18getPointerDiffTypeEv\", \"clang::ASTContext::getPointerDiffType() const\"},\n    {\"_ZNK5clang10ASTContext25getASTObjCInterfaceLayoutEPKNS_17ObjCInterfaceDeclE\", \"clang::ASTContext::getASTObjCInterfaceLayout(clang::ObjCInterfaceDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext18getTypeSizeInCharsENS_8QualTypeE\", \"clang::ASTContext::getTypeSizeInChars(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext18getTypeSizeInCharsEPKNS_4TypeE\", \"clang::ASTContext::getTypeSizeInChars(clang::Type const*) const\"},\n    {\"_ZNK5clang10ASTContext19getTypeAlignInCharsENS_8QualTypeE\", \"clang::ASTContext::getTypeAlignInChars(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext19getTypeAlignInCharsEPKNS_4TypeE\", \"clang::ASTContext::getTypeAlignInChars(clang::Type const*) const\"},\n    {\"_ZNK5clang10ASTContext23ShallowCollectObjCIvarsEPKNS_17ObjCInterfaceDeclERN4llvm15SmallVectorImplIPNS_12ObjCIvarDeclEEE\", \"clang::ASTContext::ShallowCollectObjCIvars(clang::ObjCInterfaceDecl const*, llvm::SmallVectorImpl<clang::ObjCIvarDecl*>&) const\"},\n    {\"_ZNK5clang10ASTContext20DeepCollectObjCIvarsEPKNS_17ObjCInterfaceDeclEbRN4llvm15SmallVectorImplIPNS_12ObjCIvarDeclEEE\", \"clang::ASTContext::DeepCollectObjCIvars(clang::ObjCInterfaceDecl const*, bool, llvm::SmallVectorImpl<clang::ObjCIvarDecl*>&) const\"},\n    {\"_ZN5clang10ASTContext25CollectInheritedProtocolsEPKNS_4DeclERN4llvm11SmallPtrSetIPNS_16ObjCProtocolDeclELj8EEE\", \"clang::ASTContext::CollectInheritedProtocols(clang::Decl const*, llvm::SmallPtrSet<clang::ObjCProtocolDecl*, 8u>&)\"},\n    {\"_ZNK5clang10ASTContext18CountNonClassIvarsEPKNS_17ObjCInterfaceDeclE\", \"clang::ASTContext::CountNonClassIvars(clang::ObjCInterfaceDecl const*) const\"},\n    {\"_ZN5clang10ASTContext21getObjCImplementationEPNS_17ObjCInterfaceDeclE\", \"clang::ASTContext::getObjCImplementation(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang10ASTContext21getObjCImplementationEPNS_16ObjCCategoryDeclE\", \"clang::ASTContext::getObjCImplementation(clang::ObjCCategoryDecl*)\"},\n    {\"_ZN5clang10ASTContext21setObjCImplementationEPNS_17ObjCInterfaceDeclEPNS_22ObjCImplementationDeclE\", \"clang::ASTContext::setObjCImplementation(clang::ObjCInterfaceDecl*, clang::ObjCImplementationDecl*)\"},\n    {\"_ZN5clang10ASTContext21setObjCImplementationEPNS_16ObjCCategoryDeclEPNS_20ObjCCategoryImplDeclE\", \"clang::ASTContext::setObjCImplementation(clang::ObjCCategoryDecl*, clang::ObjCCategoryImplDecl*)\"},\n    {\"_ZN5clang10ASTContext20getBlockVarCopyInitsEPKNS_7VarDeclE\", \"clang::ASTContext::getBlockVarCopyInits(clang::VarDecl const*)\"},\n    {\"_ZN5clang10ASTContext20setBlockVarCopyInitsEPNS_7VarDeclEPNS_4ExprE\", \"clang::ASTContext::setBlockVarCopyInits(clang::VarDecl*, clang::Expr*)\"},\n    {\"_ZNK5clang10ASTContext20CreateTypeSourceInfoENS_8QualTypeEj\", \"clang::ASTContext::CreateTypeSourceInfo(clang::QualType, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext30getASTObjCImplementationLayoutEPKNS_22ObjCImplementationDeclE\", \"clang::ASTContext::getASTObjCImplementationLayout(clang::ObjCImplementationDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext14getExtQualTypeEPKNS_4TypeENS_10QualifiersE\", \"clang::ASTContext::getExtQualType(clang::Type const*, clang::Qualifiers) const\"},\n    {\"_ZNK5clang10ASTContext20getAddrSpaceQualTypeENS_8QualTypeEj\", \"clang::ASTContext::getAddrSpaceQualType(clang::QualType, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext17getObjCGCQualTypeENS_8QualTypeENS_10Qualifiers2GCE\", \"clang::ASTContext::getObjCGCQualType(clang::QualType, clang::Qualifiers::GC) const\"},\n    {\"_ZN5clang10ASTContext18adjustFunctionTypeEPKNS_12FunctionTypeENS1_7ExtInfoE\", \"clang::ASTContext::adjustFunctionType(clang::FunctionType const*, clang::FunctionType::ExtInfo)\"},\n    {\"_ZNK5clang10ASTContext22getFunctionNoProtoTypeENS_8QualTypeERKNS_12FunctionType7ExtInfoE\", \"clang::ASTContext::getFunctionNoProtoType(clang::QualType, clang::FunctionType::ExtInfo const&) const\"},\n    {\"_ZNK5clang10ASTContext15getFunctionTypeENS_8QualTypeEPKS1_jRKNS_17FunctionProtoType12ExtProtoInfoE\", \"clang::ASTContext::getFunctionType(clang::QualType, clang::QualType const*, unsigned int, clang::FunctionProtoType::ExtProtoInfo const&) const\"},\n    {\"_ZNK5clang10ASTContext14getComplexTypeENS_8QualTypeE\", \"clang::ASTContext::getComplexType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext19getBlockPointerTypeENS_8QualTypeE\", \"clang::ASTContext::getBlockPointerType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext22getLValueReferenceTypeENS_8QualTypeEb\", \"clang::ASTContext::getLValueReferenceType(clang::QualType, bool) const\"},\n    {\"_ZNK5clang10ASTContext22getRValueReferenceTypeENS_8QualTypeE\", \"clang::ASTContext::getRValueReferenceType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext20getMemberPointerTypeENS_8QualTypeEPKNS_4TypeE\", \"clang::ASTContext::getMemberPointerType(clang::QualType, clang::Type const*) const\"},\n    {\"_ZNK5clang10ASTContext20getConstantArrayTypeENS_8QualTypeERKN4llvm5APIntENS_9ArrayType17ArraySizeModifierEj\", \"clang::ASTContext::getConstantArrayType(clang::QualType, llvm::APInt const&, clang::ArrayType::ArraySizeModifier, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext27getVariableArrayDecayedTypeENS_8QualTypeE\", \"clang::ASTContext::getVariableArrayDecayedType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext26getDependentSizedArrayTypeENS_8QualTypeEPNS_4ExprENS_9ArrayType17ArraySizeModifierEjNS_11SourceRangeE\", \"clang::ASTContext::getDependentSizedArrayType(clang::QualType, clang::Expr*, clang::ArrayType::ArraySizeModifier, unsigned int, clang::SourceRange) const\"},\n    {\"_ZNK5clang10ASTContext20getVariableArrayTypeENS_8QualTypeEPNS_4ExprENS_9ArrayType17ArraySizeModifierEjNS_11SourceRangeE\", \"clang::ASTContext::getVariableArrayType(clang::QualType, clang::Expr*, clang::ArrayType::ArraySizeModifier, unsigned int, clang::SourceRange) const\"},\n    {\"_ZNK5clang10ASTContext22getIncompleteArrayTypeENS_8QualTypeENS_9ArrayType17ArraySizeModifierEj\", \"clang::ASTContext::getIncompleteArrayType(clang::QualType, clang::ArrayType::ArraySizeModifier, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext13getVectorTypeENS_8QualTypeEjNS_10VectorType10VectorKindE\", \"clang::ASTContext::getVectorType(clang::QualType, unsigned int, clang::VectorType::VectorKind) const\"},\n    {\"_ZNK5clang10ASTContext16getExtVectorTypeENS_8QualTypeEj\", \"clang::ASTContext::getExtVectorType(clang::QualType, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext30getDependentSizedExtVectorTypeENS_8QualTypeEPNS_4ExprENS_14SourceLocationE\", \"clang::ASTContext::getDependentSizedExtVectorType(clang::QualType, clang::Expr*, clang::SourceLocation) const\"},\n    {\"_ZNK5clang10ASTContext21getCanonicalParamTypeENS_8QualTypeE\", \"clang::ASTContext::getCanonicalParamType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext24getInjectedClassNameTypeEPNS_13CXXRecordDeclENS_8QualTypeE\", \"clang::ASTContext::getInjectedClassNameType(clang::CXXRecordDecl*, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext19getTypeDeclTypeSlowEPKNS_8TypeDeclE\", \"clang::ASTContext::getTypeDeclTypeSlow(clang::TypeDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext14getTypedefTypeEPKNS_11TypedefDeclENS_8QualTypeE\", \"clang::ASTContext::getTypedefType(clang::TypedefDecl const*, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext13getRecordTypeEPKNS_10RecordDeclE\", \"clang::ASTContext::getRecordType(clang::RecordDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext11getEnumTypeEPKNS_8EnumDeclE\", \"clang::ASTContext::getEnumType(clang::EnumDecl const*) const\"},\n    {\"_ZN5clang10ASTContext17getAttributedTypeENS_14AttributedType4KindENS_8QualTypeES3_\", \"clang::ASTContext::getAttributedType(clang::AttributedType::Kind, clang::QualType, clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext28getSubstTemplateTypeParmTypeEPKNS_20TemplateTypeParmTypeENS_8QualTypeE\", \"clang::ASTContext::getSubstTemplateTypeParmType(clang::TemplateTypeParmType const*, clang::QualType) const\"},\n    {\"_ZN5clang10ASTContext32getSubstTemplateTypeParmPackTypeEPKNS_20TemplateTypeParmTypeERKNS_16TemplateArgumentE\", \"clang::ASTContext::getSubstTemplateTypeParmPackType(clang::TemplateTypeParmType const*, clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang10ASTContext23getTemplateTypeParmTypeEjjbPNS_14IdentifierInfoE\", \"clang::ASTContext::getTemplateTypeParmType(unsigned int, unsigned int, bool, clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang10ASTContext33getTemplateSpecializationTypeInfoENS_12TemplateNameENS_14SourceLocationERKNS_24TemplateArgumentListInfoENS_8QualTypeE\", \"clang::ASTContext::getTemplateSpecializationTypeInfo(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo const&, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext29getTemplateSpecializationTypeENS_12TemplateNameERKNS_24TemplateArgumentListInfoENS_8QualTypeE\", \"clang::ASTContext::getTemplateSpecializationType(clang::TemplateName, clang::TemplateArgumentListInfo const&, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext29getTemplateSpecializationTypeENS_12TemplateNameEPKNS_16TemplateArgumentEjNS_8QualTypeE\", \"clang::ASTContext::getTemplateSpecializationType(clang::TemplateName, clang::TemplateArgument const*, unsigned int, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext38getCanonicalTemplateSpecializationTypeENS_12TemplateNameEPKNS_16TemplateArgumentEj\", \"clang::ASTContext::getCanonicalTemplateSpecializationType(clang::TemplateName, clang::TemplateArgument const*, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext24getCanonicalTemplateNameENS_12TemplateNameE\", \"clang::ASTContext::getCanonicalTemplateName(clang::TemplateName) const\"},\n    {\"_ZNK5clang10ASTContext28getCanonicalTemplateArgumentERKNS_16TemplateArgumentE\", \"clang::ASTContext::getCanonicalTemplateArgument(clang::TemplateArgument const&) const\"},\n    {\"_ZNK5clang10ASTContext17getElaboratedTypeENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierENS_8QualTypeE\", \"clang::ASTContext::getElaboratedType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext12getParenTypeENS_8QualTypeE\", \"clang::ASTContext::getParenType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext20getDependentNameTypeENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoENS_8QualTypeE\", \"clang::ASTContext::getDependentNameType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext31getCanonicalNestedNameSpecifierEPNS_19NestedNameSpecifierE\", \"clang::ASTContext::getCanonicalNestedNameSpecifier(clang::NestedNameSpecifier*) const\"},\n    {\"_ZNK5clang10ASTContext38getDependentTemplateSpecializationTypeENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoERKNS_24TemplateArgumentListInfoE\", \"clang::ASTContext::getDependentTemplateSpecializationType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, clang::TemplateArgumentListInfo const&) const\"},\n    {\"_ZNK5clang10ASTContext38getDependentTemplateSpecializationTypeENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoEjPKNS_16TemplateArgumentE\", \"clang::ASTContext::getDependentTemplateSpecializationType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, unsigned int, clang::TemplateArgument const*) const\"},\n    {\"_ZN5clang10ASTContext20getPackExpansionTypeENS_8QualTypeEN4llvm8OptionalIjEE\", \"clang::ASTContext::getPackExpansionType(clang::QualType, llvm::Optional<unsigned int>)\"},\n    {\"_ZNK5clang10ASTContext17getObjCObjectTypeENS_8QualTypeEPKPNS_16ObjCProtocolDeclEj\", \"clang::ASTContext::getObjCObjectType(clang::QualType, clang::ObjCProtocolDecl* const*, unsigned int) const\"},\n    {\"_ZNK5clang10ASTContext24getObjCObjectPointerTypeENS_8QualTypeE\", \"clang::ASTContext::getObjCObjectPointerType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext20getObjCInterfaceTypeEPKNS_17ObjCInterfaceDeclE\", \"clang::ASTContext::getObjCInterfaceType(clang::ObjCInterfaceDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext17getTypeOfExprTypeEPNS_4ExprE\", \"clang::ASTContext::getTypeOfExprType(clang::Expr*) const\"},\n    {\"_ZNK5clang10ASTContext13getTypeOfTypeENS_8QualTypeE\", \"clang::ASTContext::getTypeOfType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext15getDecltypeTypeEPNS_4ExprE\", \"clang::ASTContext::getDecltypeType(clang::Expr*) const\"},\n    {\"_ZNK5clang10ASTContext14getTagDeclTypeEPKNS_7TagDeclE\", \"clang::ASTContext::getTagDeclType(clang::TagDecl const*) const\"},\n    {\"_ZNK5clang10ASTContext11getSizeTypeEv\", \"clang::ASTContext::getSizeType() const\"},\n    {\"_ZNK5clang10ASTContext18getSignedWCharTypeEv\", \"clang::ASTContext::getSignedWCharType() const\"},\n    {\"_ZNK5clang10ASTContext20getUnsignedWCharTypeEv\", \"clang::ASTContext::getUnsignedWCharType() const\"},\n    {\"_ZNK5clang10ASTContext19getArrayDecayedTypeENS_8QualTypeE\", \"clang::ASTContext::getArrayDecayedType(clang::QualType) const\"},\n    {\"_ZN5clang10ASTContext23getUnqualifiedArrayTypeENS_8QualTypeERNS_10QualifiersE\", \"clang::ASTContext::getUnqualifiedArrayType(clang::QualType, clang::Qualifiers&)\"},\n    {\"_ZN5clang10ASTContext25UnwrapSimilarPointerTypesERNS_8QualTypeES2_\", \"clang::ASTContext::UnwrapSimilarPointerTypes(clang::QualType&, clang::QualType&)\"},\n    {\"_ZNK5clang10ASTContext18getNameForTemplateENS_12TemplateNameENS_14SourceLocationE\", \"clang::ASTContext::getNameForTemplate(clang::TemplateName, clang::SourceLocation) const\"},\n    {\"_ZNK5clang10ASTContext32getSubstTemplateTemplateParmPackEPNS_24TemplateTemplateParmDeclERKNS_16TemplateArgumentE\", \"clang::ASTContext::getSubstTemplateTemplateParmPack(clang::TemplateTemplateParmDecl*, clang::TemplateArgument const&) const\"},\n    {\"_ZN5clang10ASTContext19hasSameTemplateNameENS_12TemplateNameES1_\", \"clang::ASTContext::hasSameTemplateName(clang::TemplateName, clang::TemplateName)\"},\n    {\"_ZNK5clang10ASTContext24getDependentTemplateNameEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoE\", \"clang::ASTContext::getDependentTemplateName(clang::NestedNameSpecifier*, clang::IdentifierInfo const*) const\"},\n    {\"_ZNK5clang10ASTContext18getBaseElementTypeENS_8QualTypeE\", \"clang::ASTContext::getBaseElementType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext28getConstantArrayElementCountEPKNS_17ConstantArrayTypeE\", \"clang::ASTContext::getConstantArrayElementCount(clang::ConstantArrayType const*) const\"},\n    {\"_ZNK5clang10ASTContext33getFloatingTypeOfSizeWithinDomainENS_8QualTypeES1_\", \"clang::ASTContext::getFloatingTypeOfSizeWithinDomain(clang::QualType, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext20getFloatingTypeOrderENS_8QualTypeES1_\", \"clang::ASTContext::getFloatingTypeOrder(clang::QualType, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext14getIntegerRankEPKNS_4TypeE\", \"clang::ASTContext::getIntegerRank(clang::Type const*) const\"},\n    {\"_ZNK5clang10ASTContext11getIntWidthENS_8QualTypeE\", \"clang::ASTContext::getIntWidth(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext20isPromotableBitFieldEPNS_4ExprE\", \"clang::ASTContext::isPromotableBitField(clang::Expr*) const\"},\n    {\"_ZNK5clang10ASTContext22getPromotedIntegerTypeENS_8QualTypeE\", \"clang::ASTContext::getPromotedIntegerType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext19getIntegerTypeOrderENS_8QualTypeES1_\", \"clang::ASTContext::getIntegerTypeOrder(clang::QualType, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext23getCFConstantStringTypeEv\", \"clang::ASTContext::getCFConstantStringType() const\"},\n    {\"_ZN5clang10ASTContext23setCFConstantStringTypeENS_8QualTypeE\", \"clang::ASTContext::setCFConstantStringType(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext23getNSConstantStringTypeEv\", \"clang::ASTContext::getNSConstantStringType() const\"},\n    {\"_ZN5clang10ASTContext23setNSConstantStringTypeENS_8QualTypeE\", \"clang::ASTContext::setNSConstantStringType(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext31getObjCFastEnumerationStateTypeEv\", \"clang::ASTContext::getObjCFastEnumerationStateType() const\"},\n    {\"_ZNK5clang10ASTContext22getBlockDescriptorTypeEv\", \"clang::ASTContext::getBlockDescriptorType() const\"},\n    {\"_ZN5clang10ASTContext22setBlockDescriptorTypeENS_8QualTypeE\", \"clang::ASTContext::setBlockDescriptorType(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext30getBlockDescriptorExtendedTypeEv\", \"clang::ASTContext::getBlockDescriptorExtendedType() const\"},\n    {\"_ZN5clang10ASTContext30setBlockDescriptorExtendedTypeENS_8QualTypeE\", \"clang::ASTContext::setBlockDescriptorExtendedType(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext20BlockRequiresCopyingENS_8QualTypeE\", \"clang::ASTContext::BlockRequiresCopying(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext18isObjCNSObjectTypeENS_8QualTypeE\", \"clang::ASTContext::isObjCNSObjectType(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext14BuildByRefTypeEN4llvm9StringRefENS_8QualTypeE\", \"clang::ASTContext::BuildByRefType(llvm::StringRef, clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext16getBlockParmTypeEbRN4llvm15SmallVectorImplIPKNS_4ExprEEE\", \"clang::ASTContext::getBlockParmType(bool, llvm::SmallVectorImpl<clang::Expr const*>&) const\"},\n    {\"_ZN5clang10ASTContext31setObjCFastEnumerationStateTypeENS_8QualTypeE\", \"clang::ASTContext::setObjCFastEnumerationStateType(clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext23getObjCEncodingTypeSizeENS_8QualTypeE\", \"clang::ASTContext::getObjCEncodingTypeSize(clang::QualType) const\"},\n    {\"_ZNK5clang10ASTContext23getObjCEncodingForBlockEPKNS_9BlockExprE\", \"clang::ASTContext::getObjCEncodingForBlock(clang::BlockExpr const*) const\"},\n    {\"_ZNK5clang10ASTContext22getObjCEncodingForTypeENS_8QualTypeERSsPKNS_9FieldDeclE\", \"clang::ASTContext::getObjCEncodingForType(clang::QualType, std::string&, clang::FieldDecl const*) const\"},\n    {\"_Z17charUnitsToStringRKN5clang9CharUnitsE\", \"charUnitsToString(clang::CharUnits const&)\"},\n    {\"_ZN5clang10ASTContext30getObjCEncodingForFunctionDeclEPKNS_12FunctionDeclERSs\", \"clang::ASTContext::getObjCEncodingForFunctionDecl(clang::FunctionDecl const*, std::string&)\"},\n    {\"_ZNK5clang10ASTContext28getObjCEncodingForMethodDeclEPKNS_14ObjCMethodDeclERSs\", \"clang::ASTContext::getObjCEncodingForMethodDecl(clang::ObjCMethodDecl const*, std::string&) const\"},\n    {\"_ZNK5clang10ASTContext31getObjCEncodingForTypeQualifierENS_4Decl17ObjCDeclQualifierERSs\", \"clang::ASTContext::getObjCEncodingForTypeQualifier(clang::Decl::ObjCDeclQualifier, std::string&) const\"},\n    {\"_ZNK5clang10ASTContext30getObjCEncodingForPropertyDeclEPKNS_16ObjCPropertyDeclEPKNS_4DeclERSs\", \"clang::ASTContext::getObjCEncodingForPropertyDecl(clang::ObjCPropertyDecl const*, clang::Decl const*, std::string&) const\"},\n    {\"_ZNK5clang10ASTContext26getObjCEncodingForTypeImplENS_8QualTypeERSsbbPKNS_9FieldDeclEbb\", \"clang::ASTContext::getObjCEncodingForTypeImpl(clang::QualType, std::string&, bool, bool, clang::FieldDecl const*, bool, bool) const\"},\n    {\"_ZNK5clang10ASTContext29getLegacyIntegralTypeEncodingERNS_8QualTypeE\", \"clang::ASTContext::getLegacyIntegralTypeEncoding(clang::QualType&) const\"},\n    {\"_Z14EncodeBitFieldPKN5clang10ASTContextERSsNS_8QualTypeEPKNS_9FieldDeclE\", \"EncodeBitField(clang::ASTContext const*, std::string&, clang::QualType, clang::FieldDecl const*)\"},\n    {\"_Z28ObjCEncodingForPrimitiveKindPKN5clang10ASTContextENS_8QualTypeE\", \"ObjCEncodingForPrimitiveKind(clang::ASTContext const*, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext20setBuiltinVaListTypeENS_8QualTypeE\", \"clang::ASTContext::setBuiltinVaListType(clang::QualType)\"},\n    {\"_ZN5clang10ASTContext13setObjCIdTypeENS_8QualTypeE\", \"clang::ASTContext::setObjCIdType(clang::QualType)\"},\n    {\"_ZN5clang10ASTContext14setObjCSelTypeENS_8QualTypeE\", \"clang::ASTContext::setObjCSelType(clang::QualType)\"},\n    {\"_ZN5clang10ASTContext16setObjCProtoTypeENS_8QualTypeE\", \"clang::ASTContext::setObjCProtoType(clang::QualType)\"},\n    {\"_ZN5clang10ASTContext16setObjCClassTypeENS_8QualTypeE\", \"clang::ASTContext::setObjCClassType(clang::QualType)\"},\n    {\"_ZN5clang10ASTContext30setObjCConstantStringInterfaceEPNS_17ObjCInterfaceDeclE\", \"clang::ASTContext::setObjCConstantStringInterface(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZNK5clang10ASTContext25getOverloadedTemplateNameENS_21UnresolvedSetIteratorES1_\", \"clang::ASTContext::getOverloadedTemplateName(clang::UnresolvedSetIterator, clang::UnresolvedSetIterator) const\"},\n    {\"_ZNK5clang10ASTContext24getQualifiedTemplateNameEPNS_19NestedNameSpecifierEbPNS_12TemplateDeclE\", \"clang::ASTContext::getQualifiedTemplateName(clang::NestedNameSpecifier*, bool, clang::TemplateDecl*) const\"},\n    {\"_ZNK5clang10ASTContext24getDependentTemplateNameEPNS_19NestedNameSpecifierENS_22OverloadedOperatorKindE\", \"clang::ASTContext::getDependentTemplateName(clang::NestedNameSpecifier*, clang::OverloadedOperatorKind) const\"},\n    {\"_ZNK5clang10ASTContext17getObjCGCAttrKindENS_8QualTypeE\", \"clang::ASTContext::getObjCGCAttrKind(clang::QualType) const\"},\n    {\"_ZN5clang10ASTContext24areCompatibleVectorTypesENS_8QualTypeES1_\", \"clang::ASTContext::areCompatibleVectorTypes(clang::QualType, clang::QualType)\"},\n    {\"_ZNK5clang10ASTContext30ProtocolCompatibleWithProtocolEPNS_16ObjCProtocolDeclES2_\", \"clang::ASTContext::ProtocolCompatibleWithProtocol(clang::ObjCProtocolDecl*, clang::ObjCProtocolDecl*) const\"},\n    {\"_ZN5clang10ASTContext30QualifiedIdConformsQualifiedIdENS_8QualTypeES1_\", \"clang::ASTContext::QualifiedIdConformsQualifiedId(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext33ObjCQualifiedIdTypesAreCompatibleENS_8QualTypeES1_b\", \"clang::ASTContext::ObjCQualifiedIdTypesAreCompatible(clang::QualType, clang::QualType, bool)\"},\n    {\"_ZN5clang10ASTContext36ObjCQualifiedClassTypesAreCompatibleENS_8QualTypeES1_\", \"clang::ASTContext::ObjCQualifiedClassTypesAreCompatible(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext23canAssignObjCInterfacesEPKNS_21ObjCObjectPointerTypeES3_\", \"clang::ASTContext::canAssignObjCInterfaces(clang::ObjCObjectPointerType const*, clang::ObjCObjectPointerType const*)\"},\n    {\"_ZN5clang10ASTContext23canAssignObjCInterfacesEPKNS_14ObjCObjectTypeES3_\", \"clang::ASTContext::canAssignObjCInterfaces(clang::ObjCObjectType const*, clang::ObjCObjectType const*)\"},\n    {\"_ZN5clang10ASTContext37canAssignObjCInterfacesInBlockPointerEPKNS_21ObjCObjectPointerTypeES3_\", \"clang::ASTContext::canAssignObjCInterfacesInBlockPointer(clang::ObjCObjectPointerType const*, clang::ObjCObjectPointerType const*)\"},\n    {\"_ZN5clang10ASTContext23areCommonBaseCompatibleEPKNS_21ObjCObjectPointerTypeES3_\", \"clang::ASTContext::areCommonBaseCompatible(clang::ObjCObjectPointerType const*, clang::ObjCObjectPointerType const*)\"},\n    {\"_ZN5clang10ASTContext29areComparableObjCPointerTypesENS_8QualTypeES1_\", \"clang::ASTContext::areComparableObjCPointerTypes(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext21canBindObjCObjectTypeENS_8QualTypeES1_\", \"clang::ASTContext::canBindObjCObjectType(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext18typesAreCompatibleENS_8QualTypeES1_b\", \"clang::ASTContext::typesAreCompatible(clang::QualType, clang::QualType, bool)\"},\n    {\"_ZN5clang10ASTContext10mergeTypesENS_8QualTypeES1_bb\", \"clang::ASTContext::mergeTypes(clang::QualType, clang::QualType, bool, bool)\"},\n    {\"_ZN5clang10ASTContext30typesAreBlockPointerCompatibleENS_8QualTypeES1_\", \"clang::ASTContext::typesAreBlockPointerCompatible(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext25mergeTransparentUnionTypeENS_8QualTypeES1_bb\", \"clang::ASTContext::mergeTransparentUnionType(clang::QualType, clang::QualType, bool, bool)\"},\n    {\"_ZN5clang10ASTContext26mergeFunctionArgumentTypesENS_8QualTypeES1_bb\", \"clang::ASTContext::mergeFunctionArgumentTypes(clang::QualType, clang::QualType, bool, bool)\"},\n    {\"_ZN5clang10ASTContext18mergeFunctionTypesENS_8QualTypeES1_bb\", \"clang::ASTContext::mergeFunctionTypes(clang::QualType, clang::QualType, bool, bool)\"},\n    {\"_ZN5clang10ASTContext21mergeObjCGCQualifiersENS_8QualTypeES1_\", \"clang::ASTContext::mergeObjCGCQualifiers(clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang10ASTContext28getCorrespondingUnsignedTypeENS_8QualTypeE\", \"clang::ASTContext::getCorrespondingUnsignedType(clang::QualType)\"},\n    {\"_ZN5clang17ExternalASTSourceD0Ev\", \"clang::ExternalASTSource::~ExternalASTSource()\"},\n    {\"_ZN5clang17ExternalASTSourceD1Ev\", \"clang::ExternalASTSource::~ExternalASTSource()\"},\n    {\"_ZN5clang17ExternalASTSourceD2Ev\", \"clang::ExternalASTSource::~ExternalASTSource()\"},\n    {\"_ZN5clang17ExternalASTSource10PrintStatsEv\", \"clang::ExternalASTSource::PrintStats()\"},\n    {\"_ZN5clang19ASTMutationListenerD0Ev\", \"clang::ASTMutationListener::~ASTMutationListener()\"},\n    {\"_ZN5clang19ASTMutationListenerD1Ev\", \"clang::ASTMutationListener::~ASTMutationListener()\"},\n    {\"_ZN5clang19ASTMutationListenerD2Ev\", \"clang::ASTMutationListener::~ASTMutationListener()\"},\n    {\"_ZNK5clang10ASTContext14GetBuiltinTypeEjRNS0_19GetBuiltinTypeErrorEPj\", \"clang::ASTContext::GetBuiltinType(unsigned int, clang::ASTContext::GetBuiltinTypeError&, unsigned int*) const\"},\n    {\"_Z17DecodeTypeFromStrRPKcRKN5clang10ASTContextERNS3_19GetBuiltinTypeErrorERbb\", \"DecodeTypeFromStr(char const*&, clang::ASTContext const&, clang::ASTContext::GetBuiltinTypeError&, bool&, bool)\"},\n    {\"_ZN5clang10ASTContext24GetGVALinkageForFunctionEPKNS_12FunctionDeclE\", \"clang::ASTContext::GetGVALinkageForFunction(clang::FunctionDecl const*)\"},\n    {\"_ZN5clang10ASTContext24GetGVALinkageForVariableEPKNS_7VarDeclE\", \"clang::ASTContext::GetGVALinkageForVariable(clang::VarDecl const*)\"},\n    {\"_ZN5clang10ASTContext17DeclMustBeEmittedEPKNS_4DeclE\", \"clang::ASTContext::DeclMustBeEmitted(clang::Decl const*)\"},\n    {\"_ZN5clang10ASTContext24getDefaultMethodCallConvEv\", \"clang::ASTContext::getDefaultMethodCallConv()\"},\n    {\"_ZNK5clang10ASTContext13isNearlyEmptyEPKNS_13CXXRecordDeclE\", \"clang::ASTContext::isNearlyEmpty(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN5clang10ASTContext19createMangleContextEv\", \"clang::ASTContext::createMangleContext()\"},\n    {\"_ZN5clang6CXXABID0Ev\", \"clang::CXXABI::~CXXABI()\"},\n    {\"_ZN5clang6CXXABID1Ev\", \"clang::CXXABI::~CXXABI()\"},\n    {\"_ZN5clang6CXXABID2Ev\", \"clang::CXXABI::~CXXABI()\"},\n    {\"_Z16CmpProtocolNamesPKN5clang16ObjCProtocolDeclES2_\", \"CmpProtocolNames(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEED1Ev\", \"llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19NestedNameSpecifierEED1Ev\", \"llvm::FoldingSet<clang::NestedNameSpecifier>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEED1Ev\", \"llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21DependentTemplateNameEED1Ev\", \"llvm::FoldingSet<clang::DependentTemplateName>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21QualifiedTemplateNameEED1Ev\", \"llvm::FoldingSet<clang::QualifiedTemplateName>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14AttributedTypeEED1Ev\", \"llvm::FoldingSet<clang::AttributedType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEED1Ev\", \"llvm::FoldingSet<clang::ObjCObjectPointerType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEED1Ev\", \"llvm::FoldingSet<clang::ObjCObjectTypeImpl>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17PackExpansionTypeEED1Ev\", \"llvm::FoldingSet<clang::PackExpansionType>::~FoldingSet()\"},\n    {\"_ZN4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEED1Ev\", \"llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>::~ContextualFoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17DependentNameTypeEED1Ev\", \"llvm::FoldingSet<clang::DependentNameType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14ElaboratedTypeEED1Ev\", \"llvm::FoldingSet<clang::ElaboratedType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang9ParenTypeEED1Ev\", \"llvm::FoldingSet<clang::ParenType>::~FoldingSet()\"},\n    {\"_ZN4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEED1Ev\", \"llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>::~ContextualFoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEED1Ev\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEED1Ev\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEED1Ev\", \"llvm::FoldingSet<clang::TemplateTypeParmType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21DependentDecltypeTypeEED1Ev\", \"llvm::FoldingSet<clang::DependentDecltypeType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEED1Ev\", \"llvm::FoldingSet<clang::DependentTypeOfExprType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17FunctionProtoTypeEED1Ev\", \"llvm::FoldingSet<clang::FunctionProtoType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEED1Ev\", \"llvm::FoldingSet<clang::FunctionNoProtoType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang10VectorTypeEED1Ev\", \"llvm::FoldingSet<clang::VectorType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEED1Ev\", \"llvm::FoldingSet<clang::DependentSizedExtVectorType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEED1Ev\", \"llvm::FoldingSet<clang::DependentSizedArrayType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19IncompleteArrayTypeEED1Ev\", \"llvm::FoldingSet<clang::IncompleteArrayType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17ConstantArrayTypeEED1Ev\", \"llvm::FoldingSet<clang::ConstantArrayType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17MemberPointerTypeEED1Ev\", \"llvm::FoldingSet<clang::MemberPointerType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19RValueReferenceTypeEED1Ev\", \"llvm::FoldingSet<clang::RValueReferenceType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19LValueReferenceTypeEED1Ev\", \"llvm::FoldingSet<clang::LValueReferenceType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang16BlockPointerTypeEED1Ev\", \"llvm::FoldingSet<clang::BlockPointerType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang11PointerTypeEED1Ev\", \"llvm::FoldingSet<clang::PointerType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang11ComplexTypeEED1Ev\", \"llvm::FoldingSet<clang::ComplexType>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang8ExtQualsEED1Ev\", \"llvm::FoldingSet<clang::ExtQuals>::~FoldingSet()\"},\n    {\"_ZN5clang20UsuallyTinyPtrVectorIKNS_13CXXMethodDeclEE9push_backEPS2_\", \"clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const>::push_back(clang::CXXMethodDecl const*)\"},\n    {\"_ZNK5clang4Decl15getMaxAlignmentEv\", \"clang::Decl::getMaxAlignment() const\"},\n    {\"_ZNK5clang16ObjCCategoryDecl9ivar_sizeEv\", \"clang::ObjCCategoryDecl::ivar_size() const\"},\n    {\"_ZNK5clang22ObjCImplementationDecl9ivar_sizeEv\", \"clang::ObjCImplementationDecl::ivar_size() const\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang16TemplateArgumentEE9push_backERKS2_\", \"llvm::SmallVectorImpl<clang::TemplateArgument>::push_back(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang16TemplateArgumentaSERKS0_\", \"clang::TemplateArgument::operator=(clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_16ObjCNSObjectAttrEEEPT_v\", \"clang::ObjCNSObjectAttr* clang::Decl::getAttr<clang::ObjCNSObjectAttr>() const\"},\n    {\"_ZNK5clang4Type17isObjCBuiltinTypeEv\", \"clang::Type::isObjCBuiltinType() const\"},\n    {\"_ZN5clang17ExternalASTSource12CompleteTypeEPNS_7TagDeclE\", \"clang::ExternalASTSource::CompleteType(clang::TagDecl*)\"},\n    {\"_ZN5clang17ExternalASTSource12CompleteTypeEPNS_17ObjCInterfaceDeclE\", \"clang::ExternalASTSource::CompleteType(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang17ExternalASTSource20StartedDeserializingEv\", \"clang::ExternalASTSource::StartedDeserializing()\"},\n    {\"_ZN5clang17ExternalASTSource21FinishedDeserializingEv\", \"clang::ExternalASTSource::FinishedDeserializing()\"},\n    {\"_ZN5clang17ExternalASTSource20StartTranslationUnitEPNS_11ASTConsumerE\", \"clang::ExternalASTSource::StartTranslationUnit(clang::ASTConsumer*)\"},\n    {\"_ZN5clang19ASTMutationListener22CompletedTagDefinitionEPKNS_7TagDeclE\", \"clang::ASTMutationListener::CompletedTagDefinition(clang::TagDecl const*)\"},\n    {\"_ZN5clang19ASTMutationListener16AddedVisibleDeclEPKNS_11DeclContextEPKNS_4DeclE\", \"clang::ASTMutationListener::AddedVisibleDecl(clang::DeclContext const*, clang::Decl const*)\"},\n    {\"_ZN5clang19ASTMutationListener22AddedCXXImplicitMemberEPKNS_13CXXRecordDeclEPKNS_4DeclE\", \"clang::ASTMutationListener::AddedCXXImplicitMember(clang::CXXRecordDecl const*, clang::Decl const*)\"},\n    {\"_ZN5clang19ASTMutationListener30AddedCXXTemplateSpecializationEPKNS_17ClassTemplateDeclEPKNS_31ClassTemplateSpecializationDeclE\", \"clang::ASTMutationListener::AddedCXXTemplateSpecialization(clang::ClassTemplateDecl const*, clang::ClassTemplateSpecializationDecl const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang16TemplateArgumentELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::TemplateArgument, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang16TemplateArgumentELb0EE18uninitialized_copyIPS2_S5_EEvT_S6_T0_\", \"void llvm::SmallVectorTemplateBase<clang::TemplateArgument, false>::uninitialized_copy<clang::TemplateArgument*, clang::TemplateArgument*>(clang::TemplateArgument*, clang::TemplateArgument*, clang::TemplateArgument*)\"},\n    {\"_ZNSt6vectorIPN5clang17VariableArrayTypeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::VariableArrayType*, std::allocator<clang::VariableArrayType*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::VariableArrayType**, std::vector<clang::VariableArrayType*, std::allocator<clang::VariableArrayType*> > >, clang::VariableArrayType* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS1_4ExprENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::VarDecl const*, clang::Expr*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::Expr*> >::InsertIntoBucket(clang::VarDecl const* const&, clang::Expr* const&, std::pair<clang::VarDecl const*, clang::Expr*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS1_4ExprENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, clang::Expr*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::Expr*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang17ObjCContainerDeclEPNS1_12ObjCImplDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::ObjCContainerDecl*, clang::ObjCImplDecl*, llvm::DenseMapInfo<clang::ObjCContainerDecl*>, llvm::DenseMapInfo<clang::ObjCImplDecl*> >::InsertIntoBucket(clang::ObjCContainerDecl* const&, clang::ObjCImplDecl* const&, std::pair<clang::ObjCContainerDecl*, clang::ObjCImplDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang17ObjCContainerDeclEPNS1_12ObjCImplDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::ObjCContainerDecl*, clang::ObjCImplDecl*, llvm::DenseMapInfo<clang::ObjCContainerDecl*>, llvm::DenseMapInfo<clang::ObjCImplDecl*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPKN5clang13CXXMethodDeclESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::CXXMethodDecl const*, std::allocator<clang::CXXMethodDecl const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CXXMethodDecl const**, std::vector<clang::CXXMethodDecl const*, std::allocator<clang::CXXMethodDecl const*> > >, clang::CXXMethodDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_20UsuallyTinyPtrVectorIS3_EENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const> > >::InsertIntoBucket(clang::CXXMethodDecl const* const&, clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const> const&, std::pair<clang::CXXMethodDecl const*, clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_20UsuallyTinyPtrVectorIS3_EENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const>, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::UsuallyTinyPtrVector<clang::CXXMethodDecl const> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9FieldDeclES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<clang::FieldDecl*, clang::FieldDecl*, llvm::DenseMapInfo<clang::FieldDecl*>, llvm::DenseMapInfo<clang::FieldDecl*> >::InsertIntoBucket(clang::FieldDecl* const&, clang::FieldDecl* const&, std::pair<clang::FieldDecl*, clang::FieldDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9FieldDeclES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<clang::FieldDecl*, clang::FieldDecl*, llvm::DenseMapInfo<clang::FieldDecl*>, llvm::DenseMapInfo<clang::FieldDecl*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang15UsingShadowDeclES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<clang::UsingShadowDecl*, clang::UsingShadowDecl*, llvm::DenseMapInfo<clang::UsingShadowDecl*>, llvm::DenseMapInfo<clang::UsingShadowDecl*> >::InsertIntoBucket(clang::UsingShadowDecl* const&, clang::UsingShadowDecl* const&, std::pair<clang::UsingShadowDecl*, clang::UsingShadowDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang15UsingShadowDeclES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<clang::UsingShadowDecl*, clang::UsingShadowDecl*, llvm::DenseMapInfo<clang::UsingShadowDecl*>, llvm::DenseMapInfo<clang::UsingShadowDecl*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9UsingDeclEPNS1_9NamedDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::UsingDecl*, clang::NamedDecl*, llvm::DenseMapInfo<clang::UsingDecl*>, llvm::DenseMapInfo<clang::NamedDecl*> >::InsertIntoBucket(clang::UsingDecl* const&, clang::NamedDecl* const&, std::pair<clang::UsingDecl*, clang::NamedDecl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang9UsingDeclEPNS1_9NamedDeclENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::UsingDecl*, clang::NamedDecl*, llvm::DenseMapInfo<clang::UsingDecl*>, llvm::DenseMapInfo<clang::NamedDecl*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS1_24MemberSpecializationInfoENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::VarDecl const*, clang::MemberSpecializationInfo*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::MemberSpecializationInfo*> >::InsertIntoBucket(clang::VarDecl const* const&, clang::MemberSpecializationInfo* const&, std::pair<clang::VarDecl const*, clang::MemberSpecializationInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7VarDeclEPNS1_24MemberSpecializationInfoENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::VarDecl const*, clang::MemberSpecializationInfo*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::DenseMapInfo<clang::MemberSpecializationInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS_11SmallVectorIPNS1_4AttrELj2EEENS_12DenseMapInfoIS4_EENSA_IS9_EEE16InsertIntoBucketERKS4_RKS9_PSt4pairIS4_S9_E\", \"llvm::DenseMap<clang::Decl const*, llvm::SmallVector<clang::Attr*, 2u>*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::Attr*, 2u>*> >::InsertIntoBucket(clang::Decl const* const&, llvm::SmallVector<clang::Attr*, 2u>* const&, std::pair<clang::Decl const*, llvm::SmallVector<clang::Attr*, 2u>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4DeclEPNS_11SmallVectorIPNS1_4AttrELj2EEENS_12DenseMapInfoIS4_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<clang::Decl const*, llvm::SmallVector<clang::Attr*, 2u>*, llvm::DenseMapInfo<clang::Decl const*>, llvm::DenseMapInfo<llvm::SmallVector<clang::Attr*, 2u>*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN5clang4TypeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::Type*, std::allocator<clang::Type*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Type**, std::vector<clang::Type*, std::allocator<clang::Type*> > >, clang::Type* const&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEED0Ev\", \"llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS8_\", \"llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19NestedNameSpecifierEED0Ev\", \"llvm::FoldingSet<clang::NestedNameSpecifier>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19NestedNameSpecifierEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::NestedNameSpecifier>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19NestedNameSpecifierEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::NestedNameSpecifier>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19NestedNameSpecifierEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::NestedNameSpecifier>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEED0Ev\", \"llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21DependentTemplateNameEED0Ev\", \"llvm::FoldingSet<clang::DependentTemplateName>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentTemplateNameEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentTemplateName>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentTemplateNameEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentTemplateName>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentTemplateNameEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentTemplateName>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang21DependentTemplateName7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::DependentTemplateName::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21QualifiedTemplateNameEED0Ev\", \"llvm::FoldingSet<clang::QualifiedTemplateName>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21QualifiedTemplateNameEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::QualifiedTemplateName>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21QualifiedTemplateNameEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::QualifiedTemplateName>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21QualifiedTemplateNameEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::QualifiedTemplateName>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14AttributedTypeEED0Ev\", \"llvm::FoldingSet<clang::AttributedType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14AttributedTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::AttributedType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14AttributedTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::AttributedType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14AttributedTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::AttributedType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEED0Ev\", \"llvm::FoldingSet<clang::ObjCObjectPointerType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ObjCObjectPointerType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ObjCObjectPointerType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ObjCObjectPointerType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEED0Ev\", \"llvm::FoldingSet<clang::ObjCObjectTypeImpl>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ObjCObjectTypeImpl>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ObjCObjectTypeImpl>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ObjCObjectTypeImpl>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17PackExpansionTypeEED0Ev\", \"llvm::FoldingSet<clang::PackExpansionType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17PackExpansionTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::PackExpansionType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17PackExpansionTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::PackExpansionType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17PackExpansionTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::PackExpansionType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17DependentNameTypeEED0Ev\", \"llvm::FoldingSet<clang::DependentNameType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17DependentNameTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentNameType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17DependentNameTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentNameType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17DependentNameTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentNameType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14ElaboratedTypeEED0Ev\", \"llvm::FoldingSet<clang::ElaboratedType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14ElaboratedTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ElaboratedType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14ElaboratedTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ElaboratedType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14ElaboratedTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ElaboratedType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang9ParenTypeEED0Ev\", \"llvm::FoldingSet<clang::ParenType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang9ParenTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ParenType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang9ParenTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ParenType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang9ParenTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ParenType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEED0Ev\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEED0Ev\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::SubstTemplateTypeParmType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEED0Ev\", \"llvm::FoldingSet<clang::TemplateTypeParmType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::TemplateTypeParmType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::TemplateTypeParmType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::TemplateTypeParmType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang21DependentDecltypeTypeEED0Ev\", \"llvm::FoldingSet<clang::DependentDecltypeType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentDecltypeTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentDecltypeType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentDecltypeTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentDecltypeType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang21DependentDecltypeTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentDecltypeType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEED0Ev\", \"llvm::FoldingSet<clang::DependentTypeOfExprType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentTypeOfExprType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentTypeOfExprType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentTypeOfExprType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17FunctionProtoTypeEED0Ev\", \"llvm::FoldingSet<clang::FunctionProtoType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17FunctionProtoTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionProtoType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17FunctionProtoTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::FunctionProtoType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17FunctionProtoTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionProtoType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEED0Ev\", \"llvm::FoldingSet<clang::FunctionNoProtoType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionNoProtoType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::FunctionNoProtoType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionNoProtoType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang10VectorTypeEED0Ev\", \"llvm::FoldingSet<clang::VectorType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10VectorTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::VectorType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10VectorTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::VectorType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang10VectorTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::VectorType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEED0Ev\", \"llvm::FoldingSet<clang::DependentSizedExtVectorType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentSizedExtVectorType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentSizedExtVectorType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentSizedExtVectorType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEED0Ev\", \"llvm::FoldingSet<clang::DependentSizedArrayType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentSizedArrayType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::DependentSizedArrayType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::DependentSizedArrayType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19IncompleteArrayTypeEED0Ev\", \"llvm::FoldingSet<clang::IncompleteArrayType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19IncompleteArrayTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::IncompleteArrayType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19IncompleteArrayTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::IncompleteArrayType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19IncompleteArrayTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::IncompleteArrayType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17ConstantArrayTypeEED0Ev\", \"llvm::FoldingSet<clang::ConstantArrayType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17ConstantArrayTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ConstantArrayType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17ConstantArrayTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ConstantArrayType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17ConstantArrayTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ConstantArrayType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang17MemberPointerTypeEED0Ev\", \"llvm::FoldingSet<clang::MemberPointerType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17MemberPointerTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::MemberPointerType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17MemberPointerTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::MemberPointerType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang17MemberPointerTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::MemberPointerType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19RValueReferenceTypeEED0Ev\", \"llvm::FoldingSet<clang::RValueReferenceType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19RValueReferenceTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::RValueReferenceType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19RValueReferenceTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::RValueReferenceType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19RValueReferenceTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::RValueReferenceType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang19LValueReferenceTypeEED0Ev\", \"llvm::FoldingSet<clang::LValueReferenceType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19LValueReferenceTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::LValueReferenceType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19LValueReferenceTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::LValueReferenceType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang19LValueReferenceTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::LValueReferenceType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang16BlockPointerTypeEED0Ev\", \"llvm::FoldingSet<clang::BlockPointerType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang16BlockPointerTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::BlockPointerType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang16BlockPointerTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::BlockPointerType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang16BlockPointerTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::BlockPointerType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang11PointerTypeEED0Ev\", \"llvm::FoldingSet<clang::PointerType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11PointerTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::PointerType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11PointerTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::PointerType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11PointerTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::PointerType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang11ComplexTypeEED0Ev\", \"llvm::FoldingSet<clang::ComplexType>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11ComplexTypeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ComplexType>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11ComplexTypeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ComplexType>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang11ComplexTypeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ComplexType>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang8ExtQualsEED0Ev\", \"llvm::FoldingSet<clang::ExtQuals>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang8ExtQualsEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ExtQuals>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang8ExtQualsEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ExtQuals>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang8ExtQualsEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ExtQuals>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEED0Ev\", \"llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>::~ContextualFoldingSet()\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS9_\", \"llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEED0Ev\", \"llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>::~ContextualFoldingSet()\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS9_\", \"llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang18getFunctionExtInfoERKNS_4TypeE\", \"clang::getFunctionExtInfo(clang::Type const&)\"},\n    {\"_ZSt16__introsort_loopIPPN5clang16ObjCProtocolDeclElPFbPKS1_S5_EEvT_S8_T0_T1_\", \"void std::__introsort_loop<clang::ObjCProtocolDecl**, long, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)>(clang::ObjCProtocolDecl**, clang::ObjCProtocolDecl**, long, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*))\"},\n    {\"_ZSt22__final_insertion_sortIPPN5clang16ObjCProtocolDeclEPFbPKS1_S5_EEvT_S8_T0_\", \"void std::__final_insertion_sort<clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)>(clang::ObjCProtocolDecl**, clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*))\"},\n    {\"_ZSt16__insertion_sortIPPN5clang16ObjCProtocolDeclEPFbPKS1_S5_EEvT_S8_T0_\", \"void std::__insertion_sort<clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)>(clang::ObjCProtocolDecl**, clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*))\"},\n    {\"_ZSt13__heap_selectIPPN5clang16ObjCProtocolDeclEPFbPKS1_S5_EEvT_S8_S8_T0_\", \"void std::__heap_select<clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)>(clang::ObjCProtocolDecl**, clang::ObjCProtocolDecl**, clang::ObjCProtocolDecl**, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*))\"},\n    {\"_ZSt13__adjust_heapIPPN5clang16ObjCProtocolDeclElS2_PFbPKS1_S5_EEvT_T0_S9_T1_T2_\", \"void std::__adjust_heap<clang::ObjCProtocolDecl**, long, clang::ObjCProtocolDecl*, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*)>(clang::ObjCProtocolDecl**, long, long, clang::ObjCProtocolDecl*, bool (*)(clang::ObjCProtocolDecl const*, clang::ObjCProtocolDecl const*))\"},\n    {\"_ZN5clang31FormatASTNodeDiagnosticArgumentENS_10Diagnostic12ArgumentKindElPKcjS3_jPKSt4pairIS1_lEjRN4llvm15SmallVectorImplIcEEPv\", \"clang::FormatASTNodeDiagnosticArgument(clang::Diagnostic::ArgumentKind, long, char const*, unsigned int, char const*, unsigned int, std::pair<clang::Diagnostic::ArgumentKind, long> const*, unsigned int, llvm::SmallVectorImpl<char>&, void*)\"},\n    {\"_Z29ConvertTypeToDiagnosticStringRN5clang10ASTContextENS_8QualTypeEPKSt4pairINS_10Diagnostic12ArgumentKindElEj\", \"ConvertTypeToDiagnosticString(clang::ASTContext&, clang::QualType, std::pair<clang::Diagnostic::ArgumentKind, long> const*, unsigned int)\"},\n    {\"_Z7DesugarRN5clang10ASTContextENS_8QualTypeERb\", \"Desugar(clang::ASTContext&, clang::QualType, bool&)\"},\n    {\"_Z14ImportCastPathPN5clang8CastExprERN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"ImportCastPath(clang::CastExpr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u>&)\"},\n    {\"_ZN5clang11ASTImporterC1ERNS_10ASTContextERNS_11FileManagerES2_S4_b\", \"clang::ASTImporter::ASTImporter(clang::ASTContext&, clang::FileManager&, clang::ASTContext&, clang::FileManager&, bool)\"},\n    {\"_ZN5clang11ASTImporterC2ERNS_10ASTContextERNS_11FileManagerES2_S4_b\", \"clang::ASTImporter::ASTImporter(clang::ASTContext&, clang::FileManager&, clang::ASTContext&, clang::FileManager&, bool)\"},\n    {\"_ZN5clang11ASTImporterD0Ev\", \"clang::ASTImporter::~ASTImporter()\"},\n    {\"_ZN5clang11ASTImporterD1Ev\", \"clang::ASTImporter::~ASTImporter()\"},\n    {\"_ZN5clang11ASTImporterD2Ev\", \"clang::ASTImporter::~ASTImporter()\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_8QualTypeE\", \"clang::ASTImporter::Import(clang::QualType)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPNS_14TypeSourceInfoE\", \"clang::ASTImporter::Import(clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPNS_4DeclE\", \"clang::ASTImporter::Import(clang::Decl*)\"},\n    {\"_ZN5clang11ASTImporter13ImportContextEPNS_11DeclContextE\", \"clang::ASTImporter::ImportContext(clang::DeclContext*)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPNS_4ExprE\", \"clang::ASTImporter::Import(clang::Expr*)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPNS_4StmtE\", \"clang::ASTImporter::Import(clang::Stmt*)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPNS_19NestedNameSpecifierE\", \"clang::ASTImporter::Import(clang::NestedNameSpecifier*)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_12TemplateNameE\", \"clang::ASTImporter::Import(clang::TemplateName)\"},\n    {\"_ZN5clang11ASTImporter6ImportEPKNS_14IdentifierInfoE\", \"clang::ASTImporter::Import(clang::IdentifierInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter22ImportTemplateArgumentERKN5clang16TemplateArgumentE\", \"(anonymous namespace)::ASTNodeImporter::ImportTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_14SourceLocationE\", \"clang::ASTImporter::Import(clang::SourceLocation)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_6FileIDE\", \"clang::ASTImporter::Import(clang::FileID)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_11SourceRangeE\", \"clang::ASTImporter::Import(clang::SourceRange)\"},\n    {\"_ZN5clang11ASTImporter16ImportDefinitionEPNS_4DeclE\", \"clang::ASTImporter::ImportDefinition(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter17ImportDeclContextEPN5clang11DeclContextEb\", \"(anonymous namespace)::ASTNodeImporter::ImportDeclContext(clang::DeclContext*, bool)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_15DeclarationNameE\", \"clang::ASTImporter::Import(clang::DeclarationName)\"},\n    {\"_ZN5clang11ASTImporter6ImportENS_8SelectorE\", \"clang::ASTImporter::Import(clang::Selector)\"},\n    {\"_ZN5clang11ASTImporter18HandleNameConflictENS_15DeclarationNameEPNS_11DeclContextEjPPNS_9NamedDeclEj\", \"clang::ASTImporter::HandleNameConflict(clang::DeclarationName, clang::DeclContext*, unsigned int, clang::NamedDecl**, unsigned int)\"},\n    {\"_ZN5clang11ASTImporter6ToDiagENS_14SourceLocationEj\", \"clang::ASTImporter::ToDiag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang11ASTImporter8FromDiagENS_14SourceLocationEj\", \"clang::ASTImporter::FromDiag(clang::SourceLocation, unsigned int)\"},\n    {\"_ZN5clang11ASTImporter8ImportedEPNS_4DeclES2_\", \"clang::ASTImporter::Imported(clang::Decl*, clang::Decl*)\"},\n    {\"_ZN5clang11ASTImporter24IsStructurallyEquivalentENS_8QualTypeES1_\", \"clang::ASTImporter::IsStructurallyEquivalent(clang::QualType, clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::ASTNodeImporter::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter27VisitCompoundAssignOperatorEPN5clang22CompoundAssignOperatorE\", \"(anonymous namespace)::ASTNodeImporter::VisitCompoundAssignOperator(clang::CompoundAssignOperator*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::ASTNodeImporter::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter9VisitStmtEPN5clang4StmtE\", \"(anonymous namespace)::ASTNodeImporter::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter9VisitExprEPN5clang4ExprE\", \"(anonymous namespace)::ASTNodeImporter::VisitExpr(clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter18VisitNamespaceDeclEPN5clang13NamespaceDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitNamespaceDecl(clang::NamespaceDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter21VisitObjCCategoryDeclEPN5clang16ObjCCategoryDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCCategoryDecl(clang::ObjCCategoryDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter25VisitObjCCategoryImplDeclEPN5clang20ObjCCategoryImplDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCCategoryImplDecl(clang::ObjCCategoryImplDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter27VisitObjCImplementationDeclEPN5clang22ObjCImplementationDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCImplementationDecl(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter22VisitObjCInterfaceDeclEPN5clang17ObjCInterfaceDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCInterfaceDecl(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter21VisitObjCProtocolDeclEPN5clang16ObjCProtocolDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCProtocolDecl(clang::ObjCProtocolDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter19VisitObjCMethodDeclEPN5clang14ObjCMethodDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCMethodDecl(clang::ObjCMethodDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter21VisitObjCPropertyDeclEPN5clang16ObjCPropertyDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCPropertyDecl(clang::ObjCPropertyDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter22VisitClassTemplateDeclEPN5clang17ClassTemplateDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitClassTemplateDecl(clang::ClassTemplateDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter29VisitTemplateTemplateParmDeclEPN5clang24TemplateTemplateParmDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter13VisitEnumDeclEPN5clang8EnumDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitEnumDecl(clang::EnumDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter15VisitRecordDeclEPN5clang10RecordDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitRecordDecl(clang::RecordDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter36VisitClassTemplateSpecializationDeclEPN5clang31ClassTemplateSpecializationDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter16VisitTypedefDeclEPN5clang11TypedefDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitTypedefDecl(clang::TypedefDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter14VisitFieldDeclEPN5clang9FieldDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter17VisitObjCIvarDeclEPN5clang12ObjCIvarDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCIvarDecl(clang::ObjCIvarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter17VisitFunctionDeclEPN5clang12FunctionDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter28VisitNonTypeTemplateParmDeclEPN5clang23NonTypeTemplateParmDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter12VisitVarDeclEPN5clang7VarDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter22VisitImplicitParamDeclEPN5clang17ImplicitParamDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitImplicitParamDecl(clang::ImplicitParamDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter16VisitParmVarDeclEPN5clang11ParmVarDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitParmVarDecl(clang::ParmVarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter21VisitEnumConstantDeclEPN5clang16EnumConstantDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitEnumConstantDecl(clang::EnumConstantDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter22VisitIndirectFieldDeclEPN5clang17IndirectFieldDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitIndirectFieldDecl(clang::IndirectFieldDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter18VisitObjCClassDeclEPN5clang13ObjCClassDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCClassDecl(clang::ObjCClassDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter28VisitObjCForwardProtocolDeclEPN5clang23ObjCForwardProtocolDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCForwardProtocolDecl(clang::ObjCForwardProtocolDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter25VisitObjCPropertyImplDeclEPN5clang20ObjCPropertyImplDeclE\", \"(anonymous namespace)::ASTNodeImporter::VisitObjCPropertyImplDecl(clang::ObjCPropertyImplDecl*)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter15ImportDeclPartsEPN5clang9NamedDeclERPNS1_11DeclContextES6_RNS1_15DeclarationNameERNS1_14SourceLocationE\", \"(anonymous namespace)::ASTNodeImporter::ImportDeclParts(clang::NamedDecl*, clang::DeclContext*&, clang::DeclContext*&, clang::DeclarationName&, clang::SourceLocation&)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter16ImportDefinitionEPN5clang10RecordDeclES3_\", \"(anonymous namespace)::ASTNodeImporter::ImportDefinition(clang::RecordDecl*, clang::RecordDecl*)\"},\n    {\"_Z24IsStructurallyEquivalentRN12_GLOBAL__N_128StructuralEquivalenceContextEPN5clang4DeclES4_\", \"IsStructurallyEquivalent((anonymous namespace)::StructuralEquivalenceContext&, clang::Decl*, clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_128StructuralEquivalenceContext6FinishEv\", \"(anonymous namespace)::StructuralEquivalenceContext::Finish()\"},\n    {\"_Z24IsStructurallyEquivalentRN12_GLOBAL__N_128StructuralEquivalenceContextEN5clang8QualTypeES3_\", \"IsStructurallyEquivalent((anonymous namespace)::StructuralEquivalenceContext&, clang::QualType, clang::QualType)\"},\n    {\"_Z24IsStructurallyEquivalentRN12_GLOBAL__N_128StructuralEquivalenceContextEPN5clang21TemplateParameterListES4_\", \"IsStructurallyEquivalent((anonymous namespace)::StructuralEquivalenceContext&, clang::TemplateParameterList*, clang::TemplateParameterList*)\"},\n    {\"_Z24IsStructurallyEquivalentRN12_GLOBAL__N_128StructuralEquivalenceContextERKN5clang16TemplateArgumentES5_\", \"IsStructurallyEquivalent((anonymous namespace)::StructuralEquivalenceContext&, clang::TemplateArgument const&, clang::TemplateArgument const&)\"},\n    {\"_Z11IsSameValueRKN4llvm6APSIntES2_\", \"IsSameValue(llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_115ASTNodeImporter27ImportTemplateParameterListEPN5clang21TemplateParameterListE\", \"(anonymous namespace)::ASTNodeImporter::ImportTemplateParameterList(clang::TemplateParameterList*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang6FileIDES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<clang::FileID, clang::FileID, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<clang::FileID> >::InsertIntoBucket(clang::FileID const&, clang::FileID const&, std::pair<clang::FileID, clang::FileID>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang6FileIDES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<clang::FileID, clang::FileID, llvm::DenseMapInfo<clang::FileID>, llvm::DenseMapInfo<clang::FileID> >::grow(unsigned int)\"},\n    {\"_ZN5clang14BinaryOperatorC2EPNS_4ExprES2_NS_18BinaryOperatorKindENS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindENS_14SourceLocationEb\", \"clang::BinaryOperator::BinaryOperator(clang::Expr*, clang::Expr*, clang::BinaryOperatorKind, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind, clang::SourceLocation, bool)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPN5clang4DeclES4_EcNS_12DenseMapInfoIS5_EENS6_IcEEE6insertERKS1_IS5_cE\", \"llvm::DenseMap<std::pair<clang::Decl*, clang::Decl*>, char, llvm::DenseMapInfo<std::pair<clang::Decl*, clang::Decl*> >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<clang::Decl*, clang::Decl*>, char> const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPN5clang4DeclES4_EcNS_12DenseMapInfoIS5_EENS6_IcEEE15LookupBucketForERKS5_RPS1_IS5_cE\", \"llvm::DenseMap<std::pair<clang::Decl*, clang::Decl*>, char, llvm::DenseMapInfo<std::pair<clang::Decl*, clang::Decl*> >, llvm::DenseMapInfo<char> >::LookupBucketFor(std::pair<clang::Decl*, clang::Decl*> const&, std::pair<std::pair<clang::Decl*, clang::Decl*>, char>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPN5clang4DeclES4_EcNS_12DenseMapInfoIS5_EENS6_IcEEE16InsertIntoBucketERKS5_RKcPS1_IS5_cE\", \"llvm::DenseMap<std::pair<clang::Decl*, clang::Decl*>, char, llvm::DenseMapInfo<std::pair<clang::Decl*, clang::Decl*> >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<clang::Decl*, clang::Decl*> const&, char const&, std::pair<std::pair<clang::Decl*, clang::Decl*>, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPN5clang4DeclES4_EcNS_12DenseMapInfoIS5_EENS6_IcEEE4growEj\", \"llvm::DenseMap<std::pair<clang::Decl*, clang::Decl*>, char, llvm::DenseMapInfo<std::pair<clang::Decl*, clang::Decl*> >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeIPN5clang4DeclESaIS2_EE9push_backERKS2_\", \"std::deque<clang::Decl*, std::allocator<clang::Decl*> >::push_back(clang::Decl* const&)\"},\n    {\"_ZNSt5dequeIPN5clang4DeclESaIS2_EE17_M_reallocate_mapEmb\", \"std::deque<clang::Decl*, std::allocator<clang::Decl*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeES4_NS_12DenseMapInfoIS4_EES6_E16InsertIntoBucketERKS4_S9_PSt4pairIS4_S4_E\", \"llvm::DenseMap<clang::Type const*, clang::Type const*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<clang::Type const*> >::InsertIntoBucket(clang::Type const* const&, clang::Type const* const&, std::pair<clang::Type const*, clang::Type const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang4TypeES4_NS_12DenseMapInfoIS4_EES6_E4growEj\", \"llvm::DenseMap<clang::Type const*, clang::Type const*, llvm::DenseMapInfo<clang::Type const*>, llvm::DenseMapInfo<clang::Type const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<clang::Decl*, clang::Decl*, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<clang::Decl*> >::InsertIntoBucket(clang::Decl* const&, clang::Decl* const&, std::pair<clang::Decl*, clang::Decl*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang4DeclES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<clang::Decl*, clang::Decl*, llvm::DenseMapInfo<clang::Decl*>, llvm::DenseMapInfo<clang::Decl*> >::grow(unsigned int)\"},\n    {\"_ZN5clang4AttrD0Ev\", \"clang::Attr::~Attr()\"},\n    {\"_ZN5clang4AttrD1Ev\", \"clang::Attr::~Attr()\"},\n    {\"_ZN5clang4AttrD2Ev\", \"clang::Attr::~Attr()\"},\n    {\"_ZNK5clang9AliasAttr5cloneERNS_10ASTContextE\", \"clang::AliasAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang15AlignMac68kAttr5cloneERNS_10ASTContextE\", \"clang::AlignMac68kAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11AlignedAttr20isAlignmentDependentEv\", \"clang::AlignedAttr::isAlignmentDependent() const\"},\n    {\"_ZNK5clang11AlignedAttr12getAlignmentERNS_10ASTContextE\", \"clang::AlignedAttr::getAlignment(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11AlignedAttr5cloneERNS_10ASTContextE\", \"clang::AlignedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang16AlwaysInlineAttr5cloneERNS_10ASTContextE\", \"clang::AlwaysInlineAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang20AnalyzerNoReturnAttr5cloneERNS_10ASTContextE\", \"clang::AnalyzerNoReturnAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12AnnotateAttr5cloneERNS_10ASTContextE\", \"clang::AnnotateAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12AsmLabelAttr5cloneERNS_10ASTContextE\", \"clang::AsmLabelAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10BlocksAttr5cloneERNS_10ASTContextE\", \"clang::BlocksAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang9CDeclAttr5cloneERNS_10ASTContextE\", \"clang::CDeclAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14CFConsumedAttr5cloneERNS_10ASTContextE\", \"clang::CFConsumedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang24CFReturnsNotRetainedAttr5cloneERNS_10ASTContextE\", \"clang::CFReturnsNotRetainedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21CFReturnsRetainedAttr5cloneERNS_10ASTContextE\", \"clang::CFReturnsRetainedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang16CUDAConstantAttr5cloneERNS_10ASTContextE\", \"clang::CUDAConstantAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14CUDADeviceAttr5cloneERNS_10ASTContextE\", \"clang::CUDADeviceAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14CUDAGlobalAttr5cloneERNS_10ASTContextE\", \"clang::CUDAGlobalAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12CUDAHostAttr5cloneERNS_10ASTContextE\", \"clang::CUDAHostAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang20CUDALaunchBoundsAttr5cloneERNS_10ASTContextE\", \"clang::CUDALaunchBoundsAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14CUDASharedAttr5cloneERNS_10ASTContextE\", \"clang::CUDASharedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21CarriesDependencyAttr5cloneERNS_10ASTContextE\", \"clang::CarriesDependencyAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11CleanupAttr5cloneERNS_10ASTContextE\", \"clang::CleanupAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10CommonAttr5cloneERNS_10ASTContextE\", \"clang::CommonAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang9ConstAttr5cloneERNS_10ASTContextE\", \"clang::ConstAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang15ConstructorAttr5cloneERNS_10ASTContextE\", \"clang::ConstructorAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13DLLExportAttr5cloneERNS_10ASTContextE\", \"clang::DLLExportAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13DLLImportAttr5cloneERNS_10ASTContextE\", \"clang::DLLImportAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14DeprecatedAttr5cloneERNS_10ASTContextE\", \"clang::DeprecatedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14DestructorAttr5cloneERNS_10ASTContextE\", \"clang::DestructorAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12ExplicitAttr5cloneERNS_10ASTContextE\", \"clang::ExplicitAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12FastCallAttr5cloneERNS_10ASTContextE\", \"clang::FastCallAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang9FinalAttr5cloneERNS_10ASTContextE\", \"clang::FinalAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10FormatAttr5cloneERNS_10ASTContextE\", \"clang::FormatAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13FormatArgAttr5cloneERNS_10ASTContextE\", \"clang::FormatArgAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13GNUInlineAttr5cloneERNS_10ASTContextE\", \"clang::GNUInlineAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12IBActionAttr5cloneERNS_10ASTContextE\", \"clang::IBActionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12IBOutletAttr5cloneERNS_10ASTContextE\", \"clang::IBOutletAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang22IBOutletCollectionAttr5cloneERNS_10ASTContextE\", \"clang::IBOutletCollectionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang16InitPriorityAttr5cloneERNS_10ASTContextE\", \"clang::InitPriorityAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang26MBlazeInterruptHandlerAttr5cloneERNS_10ASTContextE\", \"clang::MBlazeInterruptHandlerAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang23MBlazeSaveVolatilesAttr5cloneERNS_10ASTContextE\", \"clang::MBlazeSaveVolatilesAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang19MSP430InterruptAttr5cloneERNS_10ASTContextE\", \"clang::MSP430InterruptAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10MallocAttr5cloneERNS_10ASTContextE\", \"clang::MallocAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21MaxFieldAlignmentAttr5cloneERNS_10ASTContextE\", \"clang::MaxFieldAlignmentAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12MayAliasAttr5cloneERNS_10ASTContextE\", \"clang::MayAliasAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14NSConsumedAttr5cloneERNS_10ASTContextE\", \"clang::NSConsumedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang18NSConsumesSelfAttr5cloneERNS_10ASTContextE\", \"clang::NSConsumesSelfAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang25NSReturnsAutoreleasedAttr5cloneERNS_10ASTContextE\", \"clang::NSReturnsAutoreleasedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang24NSReturnsNotRetainedAttr5cloneERNS_10ASTContextE\", \"clang::NSReturnsNotRetainedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21NSReturnsRetainedAttr5cloneERNS_10ASTContextE\", \"clang::NSReturnsRetainedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang9NakedAttr5cloneERNS_10ASTContextE\", \"clang::NakedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12NoCommonAttr5cloneERNS_10ASTContextE\", \"clang::NoCommonAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11NoDebugAttr5cloneERNS_10ASTContextE\", \"clang::NoDebugAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12NoInlineAttr5cloneERNS_10ASTContextE\", \"clang::NoInlineAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang24NoInstrumentFunctionAttr5cloneERNS_10ASTContextE\", \"clang::NoInstrumentFunctionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12NoReturnAttr5cloneERNS_10ASTContextE\", \"clang::NoReturnAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11NoThrowAttr5cloneERNS_10ASTContextE\", \"clang::NoThrowAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11NonNullAttr5cloneERNS_10ASTContextE\", \"clang::NonNullAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang17ObjCExceptionAttr5cloneERNS_10ASTContextE\", \"clang::ObjCExceptionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang16ObjCNSObjectAttr5cloneERNS_10ASTContextE\", \"clang::ObjCNSObjectAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang16OverloadableAttr5cloneERNS_10ASTContextE\", \"clang::OverloadableAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12OverrideAttr5cloneERNS_10ASTContextE\", \"clang::OverrideAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13OwnershipAttr5cloneERNS_10ASTContextE\", \"clang::OwnershipAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10PackedAttr5cloneERNS_10ASTContextE\", \"clang::PackedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10PascalAttr5cloneERNS_10ASTContextE\", \"clang::PascalAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang8PureAttr5cloneERNS_10ASTContextE\", \"clang::PureAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11RegparmAttr5cloneERNS_10ASTContextE\", \"clang::RegparmAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang21ReqdWorkGroupSizeAttr5cloneERNS_10ASTContextE\", \"clang::ReqdWorkGroupSizeAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11SectionAttr5cloneERNS_10ASTContextE\", \"clang::SectionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12SentinelAttr5cloneERNS_10ASTContextE\", \"clang::SentinelAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11StdCallAttr5cloneERNS_10ASTContextE\", \"clang::StdCallAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang12ThisCallAttr5cloneERNS_10ASTContextE\", \"clang::ThisCallAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang20TransparentUnionAttr5cloneERNS_10ASTContextE\", \"clang::TransparentUnionAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang15UnavailableAttr5cloneERNS_10ASTContextE\", \"clang::UnavailableAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang10UnusedAttr5cloneERNS_10ASTContextE\", \"clang::UnusedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang8UsedAttr5cloneERNS_10ASTContextE\", \"clang::UsedAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang8UuidAttr5cloneERNS_10ASTContextE\", \"clang::UuidAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13VecReturnAttr5cloneERNS_10ASTContextE\", \"clang::VecReturnAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14VisibilityAttr5cloneERNS_10ASTContextE\", \"clang::VisibilityAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang20WarnUnusedResultAttr5cloneERNS_10ASTContextE\", \"clang::WarnUnusedResultAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang8WeakAttr5cloneERNS_10ASTContextE\", \"clang::WeakAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang14WeakImportAttr5cloneERNS_10ASTContextE\", \"clang::WeakImportAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang11WeakRefAttr5cloneERNS_10ASTContextE\", \"clang::WeakRefAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZNK5clang27X86ForceAlignArgPointerAttr5cloneERNS_10ASTContextE\", \"clang::X86ForceAlignArgPointerAttr::clone(clang::ASTContext&) const\"},\n    {\"_ZN5clang9AliasAttrD1Ev\", \"clang::AliasAttr::~AliasAttr()\"},\n    {\"_ZN5clang9AliasAttrD0Ev\", \"clang::AliasAttr::~AliasAttr()\"},\n    {\"_ZN5clang15AlignMac68kAttrD1Ev\", \"clang::AlignMac68kAttr::~AlignMac68kAttr()\"},\n    {\"_ZN5clang15AlignMac68kAttrD0Ev\", \"clang::AlignMac68kAttr::~AlignMac68kAttr()\"},\n    {\"_ZN5clang11AlignedAttrD1Ev\", \"clang::AlignedAttr::~AlignedAttr()\"},\n    {\"_ZN5clang11AlignedAttrD0Ev\", \"clang::AlignedAttr::~AlignedAttr()\"},\n    {\"_ZN5clang16AlwaysInlineAttrD1Ev\", \"clang::AlwaysInlineAttr::~AlwaysInlineAttr()\"},\n    {\"_ZN5clang16AlwaysInlineAttrD0Ev\", \"clang::AlwaysInlineAttr::~AlwaysInlineAttr()\"},\n    {\"_ZN5clang20AnalyzerNoReturnAttrD1Ev\", \"clang::AnalyzerNoReturnAttr::~AnalyzerNoReturnAttr()\"},\n    {\"_ZN5clang20AnalyzerNoReturnAttrD0Ev\", \"clang::AnalyzerNoReturnAttr::~AnalyzerNoReturnAttr()\"},\n    {\"_ZN5clang12AnnotateAttrD1Ev\", \"clang::AnnotateAttr::~AnnotateAttr()\"},\n    {\"_ZN5clang12AnnotateAttrD0Ev\", \"clang::AnnotateAttr::~AnnotateAttr()\"},\n    {\"_ZN5clang12AsmLabelAttrD1Ev\", \"clang::AsmLabelAttr::~AsmLabelAttr()\"},\n    {\"_ZN5clang12AsmLabelAttrD0Ev\", \"clang::AsmLabelAttr::~AsmLabelAttr()\"},\n    {\"_ZN5clang10BlocksAttrD1Ev\", \"clang::BlocksAttr::~BlocksAttr()\"},\n    {\"_ZN5clang10BlocksAttrD0Ev\", \"clang::BlocksAttr::~BlocksAttr()\"},\n    {\"_ZN5clang9CDeclAttrD1Ev\", \"clang::CDeclAttr::~CDeclAttr()\"},\n    {\"_ZN5clang9CDeclAttrD0Ev\", \"clang::CDeclAttr::~CDeclAttr()\"},\n    {\"_ZN5clang14CFConsumedAttrD1Ev\", \"clang::CFConsumedAttr::~CFConsumedAttr()\"},\n    {\"_ZN5clang14CFConsumedAttrD0Ev\", \"clang::CFConsumedAttr::~CFConsumedAttr()\"},\n    {\"_ZN5clang24CFReturnsNotRetainedAttrD1Ev\", \"clang::CFReturnsNotRetainedAttr::~CFReturnsNotRetainedAttr()\"},\n    {\"_ZN5clang24CFReturnsNotRetainedAttrD0Ev\", \"clang::CFReturnsNotRetainedAttr::~CFReturnsNotRetainedAttr()\"},\n    {\"_ZN5clang21CFReturnsRetainedAttrD1Ev\", \"clang::CFReturnsRetainedAttr::~CFReturnsRetainedAttr()\"},\n    {\"_ZN5clang21CFReturnsRetainedAttrD0Ev\", \"clang::CFReturnsRetainedAttr::~CFReturnsRetainedAttr()\"},\n    {\"_ZN5clang16CUDAConstantAttrD1Ev\", \"clang::CUDAConstantAttr::~CUDAConstantAttr()\"},\n    {\"_ZN5clang16CUDAConstantAttrD0Ev\", \"clang::CUDAConstantAttr::~CUDAConstantAttr()\"},\n    {\"_ZN5clang14CUDADeviceAttrD1Ev\", \"clang::CUDADeviceAttr::~CUDADeviceAttr()\"},\n    {\"_ZN5clang14CUDADeviceAttrD0Ev\", \"clang::CUDADeviceAttr::~CUDADeviceAttr()\"},\n    {\"_ZN5clang14CUDAGlobalAttrD1Ev\", \"clang::CUDAGlobalAttr::~CUDAGlobalAttr()\"},\n    {\"_ZN5clang14CUDAGlobalAttrD0Ev\", \"clang::CUDAGlobalAttr::~CUDAGlobalAttr()\"},\n    {\"_ZN5clang12CUDAHostAttrD1Ev\", \"clang::CUDAHostAttr::~CUDAHostAttr()\"},\n    {\"_ZN5clang12CUDAHostAttrD0Ev\", \"clang::CUDAHostAttr::~CUDAHostAttr()\"},\n    {\"_ZN5clang20CUDALaunchBoundsAttrD1Ev\", \"clang::CUDALaunchBoundsAttr::~CUDALaunchBoundsAttr()\"},\n    {\"_ZN5clang20CUDALaunchBoundsAttrD0Ev\", \"clang::CUDALaunchBoundsAttr::~CUDALaunchBoundsAttr()\"},\n    {\"_ZN5clang14CUDASharedAttrD1Ev\", \"clang::CUDASharedAttr::~CUDASharedAttr()\"},\n    {\"_ZN5clang14CUDASharedAttrD0Ev\", \"clang::CUDASharedAttr::~CUDASharedAttr()\"},\n    {\"_ZN5clang21CarriesDependencyAttrD1Ev\", \"clang::CarriesDependencyAttr::~CarriesDependencyAttr()\"},\n    {\"_ZN5clang21CarriesDependencyAttrD0Ev\", \"clang::CarriesDependencyAttr::~CarriesDependencyAttr()\"},\n    {\"_ZN5clang11CleanupAttrD1Ev\", \"clang::CleanupAttr::~CleanupAttr()\"},\n    {\"_ZN5clang11CleanupAttrD0Ev\", \"clang::CleanupAttr::~CleanupAttr()\"},\n    {\"_ZN5clang10CommonAttrD1Ev\", \"clang::CommonAttr::~CommonAttr()\"},\n    {\"_ZN5clang10CommonAttrD0Ev\", \"clang::CommonAttr::~CommonAttr()\"},\n    {\"_ZN5clang9ConstAttrD1Ev\", \"clang::ConstAttr::~ConstAttr()\"},\n    {\"_ZN5clang9ConstAttrD0Ev\", \"clang::ConstAttr::~ConstAttr()\"},\n    {\"_ZN5clang15ConstructorAttrD1Ev\", \"clang::ConstructorAttr::~ConstructorAttr()\"},\n    {\"_ZN5clang15ConstructorAttrD0Ev\", \"clang::ConstructorAttr::~ConstructorAttr()\"},\n    {\"_ZN5clang13DLLExportAttrD1Ev\", \"clang::DLLExportAttr::~DLLExportAttr()\"},\n    {\"_ZN5clang13DLLExportAttrD0Ev\", \"clang::DLLExportAttr::~DLLExportAttr()\"},\n    {\"_ZN5clang13DLLImportAttrD1Ev\", \"clang::DLLImportAttr::~DLLImportAttr()\"},\n    {\"_ZN5clang13DLLImportAttrD0Ev\", \"clang::DLLImportAttr::~DLLImportAttr()\"},\n    {\"_ZN5clang14DeprecatedAttrD1Ev\", \"clang::DeprecatedAttr::~DeprecatedAttr()\"},\n    {\"_ZN5clang14DeprecatedAttrD0Ev\", \"clang::DeprecatedAttr::~DeprecatedAttr()\"},\n    {\"_ZN5clang14DestructorAttrD1Ev\", \"clang::DestructorAttr::~DestructorAttr()\"},\n    {\"_ZN5clang14DestructorAttrD0Ev\", \"clang::DestructorAttr::~DestructorAttr()\"},\n    {\"_ZN5clang12ExplicitAttrD1Ev\", \"clang::ExplicitAttr::~ExplicitAttr()\"},\n    {\"_ZN5clang12ExplicitAttrD0Ev\", \"clang::ExplicitAttr::~ExplicitAttr()\"},\n    {\"_ZN5clang12FastCallAttrD1Ev\", \"clang::FastCallAttr::~FastCallAttr()\"},\n    {\"_ZN5clang12FastCallAttrD0Ev\", \"clang::FastCallAttr::~FastCallAttr()\"},\n    {\"_ZN5clang9FinalAttrD1Ev\", \"clang::FinalAttr::~FinalAttr()\"},\n    {\"_ZN5clang9FinalAttrD0Ev\", \"clang::FinalAttr::~FinalAttr()\"},\n    {\"_ZN5clang10FormatAttrD1Ev\", \"clang::FormatAttr::~FormatAttr()\"},\n    {\"_ZN5clang10FormatAttrD0Ev\", \"clang::FormatAttr::~FormatAttr()\"},\n    {\"_ZN5clang13FormatArgAttrD1Ev\", \"clang::FormatArgAttr::~FormatArgAttr()\"},\n    {\"_ZN5clang13FormatArgAttrD0Ev\", \"clang::FormatArgAttr::~FormatArgAttr()\"},\n    {\"_ZN5clang13GNUInlineAttrD1Ev\", \"clang::GNUInlineAttr::~GNUInlineAttr()\"},\n    {\"_ZN5clang13GNUInlineAttrD0Ev\", \"clang::GNUInlineAttr::~GNUInlineAttr()\"},\n    {\"_ZN5clang12IBActionAttrD1Ev\", \"clang::IBActionAttr::~IBActionAttr()\"},\n    {\"_ZN5clang12IBActionAttrD0Ev\", \"clang::IBActionAttr::~IBActionAttr()\"},\n    {\"_ZN5clang12IBOutletAttrD1Ev\", \"clang::IBOutletAttr::~IBOutletAttr()\"},\n    {\"_ZN5clang12IBOutletAttrD0Ev\", \"clang::IBOutletAttr::~IBOutletAttr()\"},\n    {\"_ZN5clang22IBOutletCollectionAttrD1Ev\", \"clang::IBOutletCollectionAttr::~IBOutletCollectionAttr()\"},\n    {\"_ZN5clang22IBOutletCollectionAttrD0Ev\", \"clang::IBOutletCollectionAttr::~IBOutletCollectionAttr()\"},\n    {\"_ZN5clang16InitPriorityAttrD1Ev\", \"clang::InitPriorityAttr::~InitPriorityAttr()\"},\n    {\"_ZN5clang16InitPriorityAttrD0Ev\", \"clang::InitPriorityAttr::~InitPriorityAttr()\"},\n    {\"_ZN5clang26MBlazeInterruptHandlerAttrD1Ev\", \"clang::MBlazeInterruptHandlerAttr::~MBlazeInterruptHandlerAttr()\"},\n    {\"_ZN5clang26MBlazeInterruptHandlerAttrD0Ev\", \"clang::MBlazeInterruptHandlerAttr::~MBlazeInterruptHandlerAttr()\"},\n    {\"_ZN5clang23MBlazeSaveVolatilesAttrD1Ev\", \"clang::MBlazeSaveVolatilesAttr::~MBlazeSaveVolatilesAttr()\"},\n    {\"_ZN5clang23MBlazeSaveVolatilesAttrD0Ev\", \"clang::MBlazeSaveVolatilesAttr::~MBlazeSaveVolatilesAttr()\"},\n    {\"_ZN5clang19MSP430InterruptAttrD1Ev\", \"clang::MSP430InterruptAttr::~MSP430InterruptAttr()\"},\n    {\"_ZN5clang19MSP430InterruptAttrD0Ev\", \"clang::MSP430InterruptAttr::~MSP430InterruptAttr()\"},\n    {\"_ZN5clang10MallocAttrD1Ev\", \"clang::MallocAttr::~MallocAttr()\"},\n    {\"_ZN5clang10MallocAttrD0Ev\", \"clang::MallocAttr::~MallocAttr()\"},\n    {\"_ZN5clang21MaxFieldAlignmentAttrD1Ev\", \"clang::MaxFieldAlignmentAttr::~MaxFieldAlignmentAttr()\"},\n    {\"_ZN5clang21MaxFieldAlignmentAttrD0Ev\", \"clang::MaxFieldAlignmentAttr::~MaxFieldAlignmentAttr()\"},\n    {\"_ZN5clang12MayAliasAttrD1Ev\", \"clang::MayAliasAttr::~MayAliasAttr()\"},\n    {\"_ZN5clang12MayAliasAttrD0Ev\", \"clang::MayAliasAttr::~MayAliasAttr()\"},\n    {\"_ZN5clang14NSConsumedAttrD1Ev\", \"clang::NSConsumedAttr::~NSConsumedAttr()\"},\n    {\"_ZN5clang14NSConsumedAttrD0Ev\", \"clang::NSConsumedAttr::~NSConsumedAttr()\"},\n    {\"_ZN5clang18NSConsumesSelfAttrD1Ev\", \"clang::NSConsumesSelfAttr::~NSConsumesSelfAttr()\"},\n    {\"_ZN5clang18NSConsumesSelfAttrD0Ev\", \"clang::NSConsumesSelfAttr::~NSConsumesSelfAttr()\"},\n    {\"_ZN5clang25NSReturnsAutoreleasedAttrD1Ev\", \"clang::NSReturnsAutoreleasedAttr::~NSReturnsAutoreleasedAttr()\"},\n    {\"_ZN5clang25NSReturnsAutoreleasedAttrD0Ev\", \"clang::NSReturnsAutoreleasedAttr::~NSReturnsAutoreleasedAttr()\"},\n    {\"_ZN5clang24NSReturnsNotRetainedAttrD1Ev\", \"clang::NSReturnsNotRetainedAttr::~NSReturnsNotRetainedAttr()\"},\n    {\"_ZN5clang24NSReturnsNotRetainedAttrD0Ev\", \"clang::NSReturnsNotRetainedAttr::~NSReturnsNotRetainedAttr()\"},\n    {\"_ZN5clang21NSReturnsRetainedAttrD1Ev\", \"clang::NSReturnsRetainedAttr::~NSReturnsRetainedAttr()\"},\n    {\"_ZN5clang21NSReturnsRetainedAttrD0Ev\", \"clang::NSReturnsRetainedAttr::~NSReturnsRetainedAttr()\"},\n    {\"_ZN5clang9NakedAttrD1Ev\", \"clang::NakedAttr::~NakedAttr()\"},\n    {\"_ZN5clang9NakedAttrD0Ev\", \"clang::NakedAttr::~NakedAttr()\"},\n    {\"_ZN5clang12NoCommonAttrD1Ev\", \"clang::NoCommonAttr::~NoCommonAttr()\"},\n    {\"_ZN5clang12NoCommonAttrD0Ev\", \"clang::NoCommonAttr::~NoCommonAttr()\"},\n    {\"_ZN5clang11NoDebugAttrD1Ev\", \"clang::NoDebugAttr::~NoDebugAttr()\"},\n    {\"_ZN5clang11NoDebugAttrD0Ev\", \"clang::NoDebugAttr::~NoDebugAttr()\"},\n    {\"_ZN5clang12NoInlineAttrD1Ev\", \"clang::NoInlineAttr::~NoInlineAttr()\"},\n    {\"_ZN5clang12NoInlineAttrD0Ev\", \"clang::NoInlineAttr::~NoInlineAttr()\"},\n    {\"_ZN5clang24NoInstrumentFunctionAttrD1Ev\", \"clang::NoInstrumentFunctionAttr::~NoInstrumentFunctionAttr()\"},\n    {\"_ZN5clang24NoInstrumentFunctionAttrD0Ev\", \"clang::NoInstrumentFunctionAttr::~NoInstrumentFunctionAttr()\"},\n    {\"_ZN5clang12NoReturnAttrD1Ev\", \"clang::NoReturnAttr::~NoReturnAttr()\"},\n    {\"_ZN5clang12NoReturnAttrD0Ev\", \"clang::NoReturnAttr::~NoReturnAttr()\"},\n    {\"_ZN5clang11NoThrowAttrD1Ev\", \"clang::NoThrowAttr::~NoThrowAttr()\"},\n    {\"_ZN5clang11NoThrowAttrD0Ev\", \"clang::NoThrowAttr::~NoThrowAttr()\"},\n    {\"_ZN5clang11NonNullAttrD1Ev\", \"clang::NonNullAttr::~NonNullAttr()\"},\n    {\"_ZN5clang11NonNullAttrD0Ev\", \"clang::NonNullAttr::~NonNullAttr()\"},\n    {\"_ZN5clang17ObjCExceptionAttrD1Ev\", \"clang::ObjCExceptionAttr::~ObjCExceptionAttr()\"},\n    {\"_ZN5clang17ObjCExceptionAttrD0Ev\", \"clang::ObjCExceptionAttr::~ObjCExceptionAttr()\"},\n    {\"_ZN5clang16ObjCNSObjectAttrD1Ev\", \"clang::ObjCNSObjectAttr::~ObjCNSObjectAttr()\"},\n    {\"_ZN5clang16ObjCNSObjectAttrD0Ev\", \"clang::ObjCNSObjectAttr::~ObjCNSObjectAttr()\"},\n    {\"_ZN5clang16OverloadableAttrD1Ev\", \"clang::OverloadableAttr::~OverloadableAttr()\"},\n    {\"_ZN5clang16OverloadableAttrD0Ev\", \"clang::OverloadableAttr::~OverloadableAttr()\"},\n    {\"_ZN5clang12OverrideAttrD1Ev\", \"clang::OverrideAttr::~OverrideAttr()\"},\n    {\"_ZN5clang12OverrideAttrD0Ev\", \"clang::OverrideAttr::~OverrideAttr()\"},\n    {\"_ZN5clang13OwnershipAttrD1Ev\", \"clang::OwnershipAttr::~OwnershipAttr()\"},\n    {\"_ZN5clang13OwnershipAttrD0Ev\", \"clang::OwnershipAttr::~OwnershipAttr()\"},\n    {\"_ZN5clang10PackedAttrD1Ev\", \"clang::PackedAttr::~PackedAttr()\"},\n    {\"_ZN5clang10PackedAttrD0Ev\", \"clang::PackedAttr::~PackedAttr()\"},\n    {\"_ZN5clang10PascalAttrD1Ev\", \"clang::PascalAttr::~PascalAttr()\"},\n    {\"_ZN5clang10PascalAttrD0Ev\", \"clang::PascalAttr::~PascalAttr()\"},\n    {\"_ZN5clang8PureAttrD1Ev\", \"clang::PureAttr::~PureAttr()\"},\n    {\"_ZN5clang8PureAttrD0Ev\", \"clang::PureAttr::~PureAttr()\"},\n    {\"_ZN5clang11RegparmAttrD1Ev\", \"clang::RegparmAttr::~RegparmAttr()\"},\n    {\"_ZN5clang11RegparmAttrD0Ev\", \"clang::RegparmAttr::~RegparmAttr()\"},\n    {\"_ZN5clang21ReqdWorkGroupSizeAttrD1Ev\", \"clang::ReqdWorkGroupSizeAttr::~ReqdWorkGroupSizeAttr()\"},\n    {\"_ZN5clang21ReqdWorkGroupSizeAttrD0Ev\", \"clang::ReqdWorkGroupSizeAttr::~ReqdWorkGroupSizeAttr()\"},\n    {\"_ZN5clang11SectionAttrD1Ev\", \"clang::SectionAttr::~SectionAttr()\"},\n    {\"_ZN5clang11SectionAttrD0Ev\", \"clang::SectionAttr::~SectionAttr()\"},\n    {\"_ZN5clang12SentinelAttrD1Ev\", \"clang::SentinelAttr::~SentinelAttr()\"},\n    {\"_ZN5clang12SentinelAttrD0Ev\", \"clang::SentinelAttr::~SentinelAttr()\"},\n    {\"_ZN5clang11StdCallAttrD1Ev\", \"clang::StdCallAttr::~StdCallAttr()\"},\n    {\"_ZN5clang11StdCallAttrD0Ev\", \"clang::StdCallAttr::~StdCallAttr()\"},\n    {\"_ZN5clang12ThisCallAttrD1Ev\", \"clang::ThisCallAttr::~ThisCallAttr()\"},\n    {\"_ZN5clang12ThisCallAttrD0Ev\", \"clang::ThisCallAttr::~ThisCallAttr()\"},\n    {\"_ZN5clang20TransparentUnionAttrD1Ev\", \"clang::TransparentUnionAttr::~TransparentUnionAttr()\"},\n    {\"_ZN5clang20TransparentUnionAttrD0Ev\", \"clang::TransparentUnionAttr::~TransparentUnionAttr()\"},\n    {\"_ZN5clang15UnavailableAttrD1Ev\", \"clang::UnavailableAttr::~UnavailableAttr()\"},\n    {\"_ZN5clang15UnavailableAttrD0Ev\", \"clang::UnavailableAttr::~UnavailableAttr()\"},\n    {\"_ZN5clang10UnusedAttrD1Ev\", \"clang::UnusedAttr::~UnusedAttr()\"},\n    {\"_ZN5clang10UnusedAttrD0Ev\", \"clang::UnusedAttr::~UnusedAttr()\"},\n    {\"_ZN5clang8UsedAttrD1Ev\", \"clang::UsedAttr::~UsedAttr()\"},\n    {\"_ZN5clang8UsedAttrD0Ev\", \"clang::UsedAttr::~UsedAttr()\"},\n    {\"_ZN5clang8UuidAttrD1Ev\", \"clang::UuidAttr::~UuidAttr()\"},\n    {\"_ZN5clang8UuidAttrD0Ev\", \"clang::UuidAttr::~UuidAttr()\"},\n    {\"_ZN5clang13VecReturnAttrD1Ev\", \"clang::VecReturnAttr::~VecReturnAttr()\"},\n    {\"_ZN5clang13VecReturnAttrD0Ev\", \"clang::VecReturnAttr::~VecReturnAttr()\"},\n    {\"_ZN5clang14VisibilityAttrD1Ev\", \"clang::VisibilityAttr::~VisibilityAttr()\"},\n    {\"_ZN5clang14VisibilityAttrD0Ev\", \"clang::VisibilityAttr::~VisibilityAttr()\"},\n    {\"_ZN5clang20WarnUnusedResultAttrD1Ev\", \"clang::WarnUnusedResultAttr::~WarnUnusedResultAttr()\"},\n    {\"_ZN5clang20WarnUnusedResultAttrD0Ev\", \"clang::WarnUnusedResultAttr::~WarnUnusedResultAttr()\"},\n    {\"_ZN5clang8WeakAttrD1Ev\", \"clang::WeakAttr::~WeakAttr()\"},\n    {\"_ZN5clang8WeakAttrD0Ev\", \"clang::WeakAttr::~WeakAttr()\"},\n    {\"_ZN5clang14WeakImportAttrD1Ev\", \"clang::WeakImportAttr::~WeakImportAttr()\"},\n    {\"_ZN5clang14WeakImportAttrD0Ev\", \"clang::WeakImportAttr::~WeakImportAttr()\"},\n    {\"_ZN5clang11WeakRefAttrD1Ev\", \"clang::WeakRefAttr::~WeakRefAttr()\"},\n    {\"_ZN5clang11WeakRefAttrD0Ev\", \"clang::WeakRefAttr::~WeakRefAttr()\"},\n    {\"_ZN5clang27X86ForceAlignArgPointerAttrD1Ev\", \"clang::X86ForceAlignArgPointerAttr::~X86ForceAlignArgPointerAttr()\"},\n    {\"_ZN5clang27X86ForceAlignArgPointerAttrD0Ev\", \"clang::X86ForceAlignArgPointerAttr::~X86ForceAlignArgPointerAttr()\"},\n    {\"_ZN5clang12CXXBasePaths17ComputeDeclsFoundEv\", \"clang::CXXBasePaths::ComputeDeclsFound()\"},\n    {\"_ZN5clang12CXXBasePaths17found_decls_beginEv\", \"clang::CXXBasePaths::found_decls_begin()\"},\n    {\"_ZN5clang12CXXBasePaths15found_decls_endEv\", \"clang::CXXBasePaths::found_decls_end()\"},\n    {\"_ZN5clang12CXXBasePaths11isAmbiguousENS_7CanQualINS_4TypeEEE\", \"clang::CXXBasePaths::isAmbiguous(clang::CanQual<clang::Type>)\"},\n    {\"_ZN5clang12CXXBasePaths5clearEv\", \"clang::CXXBasePaths::clear()\"},\n    {\"_ZN5clang12CXXBasePaths4swapERS0_\", \"clang::CXXBasePaths::swap(clang::CXXBasePaths&)\"},\n    {\"_ZNK5clang13CXXRecordDecl13isDerivedFromEPKS0_\", \"clang::CXXRecordDecl::isDerivedFrom(clang::CXXRecordDecl const*) const\"},\n    {\"_ZNK5clang13CXXRecordDecl13isDerivedFromEPKS0_RNS_12CXXBasePathsE\", \"clang::CXXRecordDecl::isDerivedFrom(clang::CXXRecordDecl const*, clang::CXXBasePaths&) const\"},\n    {\"_ZNK5clang13CXXRecordDecl13lookupInBasesEPFbPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPvES6_RNS_12CXXBasePathsE\", \"clang::CXXRecordDecl::lookupInBases(bool (*)(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*), void*, clang::CXXBasePaths&) const\"},\n    {\"_ZN5clang13CXXRecordDecl13FindBaseClassEPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"clang::CXXRecordDecl::FindBaseClass(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZNK5clang13CXXRecordDecl22isVirtuallyDerivedFromEPS0_\", \"clang::CXXRecordDecl::isVirtuallyDerivedFrom(clang::CXXRecordDecl*) const\"},\n    {\"_ZN5clang13CXXRecordDecl20FindVirtualBaseClassEPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"clang::CXXRecordDecl::FindVirtualBaseClass(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZNK5clang13CXXRecordDecl24isProvablyNotDerivedFromEPKS0_\", \"clang::CXXRecordDecl::isProvablyNotDerivedFrom(clang::CXXRecordDecl const*) const\"},\n    {\"_ZNK5clang13CXXRecordDecl11forallBasesEPFbPKS0_PvES3_b\", \"clang::CXXRecordDecl::forallBases(bool (*)(clang::CXXRecordDecl const*, void*), void*, bool) const\"},\n    {\"_Z9BaseIsNotPKN5clang13CXXRecordDeclEPv\", \"BaseIsNot(clang::CXXRecordDecl const*, void*)\"},\n    {\"_ZN5clang12CXXBasePaths13lookupInBasesERNS_10ASTContextEPKNS_13CXXRecordDeclEPFbPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPvESB_\", \"clang::CXXBasePaths::lookupInBases(clang::ASTContext&, clang::CXXRecordDecl const*, bool (*)(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*), void*)\"},\n    {\"_ZN5clang13CXXRecordDecl13FindTagMemberEPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"clang::CXXRecordDecl::FindTagMember(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang13CXXRecordDecl18FindOrdinaryMemberEPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"clang::CXXRecordDecl::FindOrdinaryMember(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang13CXXRecordDecl29FindNestedNameSpecifierMemberEPKNS_16CXXBaseSpecifierERNS_11CXXBasePathEPv\", \"clang::CXXRecordDecl::FindNestedNameSpecifierMember(clang::CXXBaseSpecifier const*, clang::CXXBasePath&, void*)\"},\n    {\"_ZN5clang17OverridingMethods3addEjNS_19UniqueVirtualMethodE\", \"clang::OverridingMethods::add(unsigned int, clang::UniqueVirtualMethod)\"},\n    {\"_ZN5clang17OverridingMethods3addERKS0_\", \"clang::OverridingMethods::add(clang::OverridingMethods const&)\"},\n    {\"_ZN5clang17OverridingMethods10replaceAllENS_19UniqueVirtualMethodE\", \"clang::OverridingMethods::replaceAll(clang::UniqueVirtualMethod)\"},\n    {\"_ZNK5clang13CXXRecordDecl18getFinalOverridersERNS_20CXXFinalOverriderMapE\", \"clang::CXXRecordDecl::getFinalOverriders(clang::CXXFinalOverriderMap&) const\"},\n    {\"_ZN12_GLOBAL__N_123FinalOverriderCollector7CollectEPKN5clang13CXXRecordDeclEbS4_RNS1_20CXXFinalOverriderMapE\", \"(anonymous namespace)::FinalOverriderCollector::Collect(clang::CXXRecordDecl const*, bool, clang::CXXRecordDecl const*, clang::CXXFinalOverriderMap&)\"},\n    {\"_ZNK5clang13CXXRecordDecl23getIndirectPrimaryBasesERNS_25CXXIndirectPrimaryBaseSetE\", \"clang::CXXRecordDecl::getIndirectPrimaryBases(clang::CXXIndirectPrimaryBaseSet&) const\"},\n    {\"_Z23AddIndirectPrimaryBasesPKN5clang13CXXRecordDeclERNS_10ASTContextERNS_25CXXIndirectPrimaryBaseSetE\", \"AddIndirectPrimaryBases(clang::CXXRecordDecl const*, clang::ASTContext&, clang::CXXIndirectPrimaryBaseSet&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang19UniqueVirtualMethodELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::UniqueVirtualMethod, false>::grow(unsigned long)\"},\n    {\"_ZSt6__findIPN5clang19UniqueVirtualMethodES1_ET_S3_S3_RKT0_St26random_access_iterator_tag\", \"clang::UniqueVirtualMethod* std::__find<clang::UniqueVirtualMethod*, clang::UniqueVirtualMethod>(clang::UniqueVirtualMethod*, clang::UniqueVirtualMethod*, clang::UniqueVirtualMethod const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIN5clang19UniqueVirtualMethodELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<clang::UniqueVirtualMethod, 4u> > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIN5clang19UniqueVirtualMethodELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PSt4pairIjS4_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<clang::UniqueVirtualMethod, 4u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallVector<clang::UniqueVirtualMethod, 4u> const&, std::pair<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIN5clang19UniqueVirtualMethodELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<clang::UniqueVirtualMethod, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang19UniqueVirtualMethodEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::UniqueVirtualMethod>::operator=(llvm::SmallVectorImpl<clang::UniqueVirtualMethod> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang18CXXBasePathElementEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::CXXBasePathElement>::operator=(llvm::SmallVectorImpl<clang::CXXBasePathElement> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang18CXXBasePathElementELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::CXXBasePathElement, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_S2_IbjEESt10_Select1stIS5_ENS0_16QualTypeOrderingESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, std::pair<bool, unsigned int> >, std::_Select1st<std::pair<clang::QualType const, std::pair<bool, unsigned int> > >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, std::pair<bool, unsigned int> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::QualType const, std::pair<bool, unsigned int> > >, std::pair<clang::QualType const, std::pair<bool, unsigned int> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_S2_IbjEESt10_Select1stIS5_ENS0_16QualTypeOrderingESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, std::pair<bool, unsigned int> >, std::_Select1st<std::pair<clang::QualType const, std::pair<bool, unsigned int> > >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, std::pair<bool, unsigned int> > > >::_M_insert_unique(std::pair<clang::QualType const, std::pair<bool, unsigned int> > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang9NamedDeclES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<clang::NamedDecl*, clang::NamedDecl*, std::_Identity<clang::NamedDecl*>, std::less<clang::NamedDecl*>, std::allocator<clang::NamedDecl*> >::_M_insert_unique(clang::NamedDecl* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_17OverridingMethodsENS_12DenseMapInfoIS4_EENS6_IS5_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::OverridingMethods, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::OverridingMethods> >::FindAndConstruct(clang::CXXMethodDecl const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_17OverridingMethodsENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::OverridingMethods, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::OverridingMethods> >::InsertIntoBucket(clang::CXXMethodDecl const* const&, clang::OverridingMethods const&, std::pair<clang::CXXMethodDecl const*, clang::OverridingMethods>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_17OverridingMethodsENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::OverridingMethods, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::OverridingMethods> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIN5clang19UniqueVirtualMethodELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE8CopyFromERKS8_\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<clang::UniqueVirtualMethod, 4u> > >::CopyFrom(llvm::DenseMap<unsigned int, llvm::SmallVector<clang::UniqueVirtualMethod, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<clang::UniqueVirtualMethod, 4u> > > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPNS1_20CXXFinalOverriderMapENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CXXFinalOverriderMap*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CXXFinalOverriderMap*> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, clang::CXXFinalOverriderMap* const&, std::pair<clang::CXXRecordDecl const*, clang::CXXFinalOverriderMap*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPNS1_20CXXFinalOverriderMapENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CXXFinalOverriderMap*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CXXFinalOverriderMap*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::CXXRecordDecl const*, unsigned int, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, unsigned int const&, std::pair<clang::CXXRecordDecl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, unsigned int, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIPN5clang9NamedDeclES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<clang::NamedDecl*, clang::NamedDecl*, std::_Identity<clang::NamedDecl*>, std::less<clang::NamedDecl*>, std::allocator<clang::NamedDecl*> >::_M_erase(std::_Rb_tree_node<clang::NamedDecl*>*)\"},\n    {\"_ZN5clang9NamedDecl17ClearLinkageCacheEv\", \"clang::NamedDecl::ClearLinkageCache()\"},\n    {\"_ZNK5clang9NamedDecl10getLinkageEv\", \"clang::NamedDecl::getLinkage() const\"},\n    {\"_Z12getLVForDeclPKN5clang9NamedDeclEN12_GLOBAL__N_17LVFlagsE\", \"getLVForDecl(clang::NamedDecl const*, (anonymous namespace)::LVFlags)\"},\n    {\"_ZNK5clang9NamedDecl23getLinkageAndVisibilityEv\", \"clang::NamedDecl::getLinkageAndVisibility() const\"},\n    {\"_ZNK5clang9NamedDecl24getQualifiedNameAsStringEv\", \"clang::NamedDecl::getQualifiedNameAsString() const\"},\n    {\"_ZNK5clang9NamedDecl24getQualifiedNameAsStringERKNS_14PrintingPolicyE\", \"clang::NamedDecl::getQualifiedNameAsString(clang::PrintingPolicy const&) const\"},\n    {\"_ZNK5clang12FunctionDecl12getNumParamsEv\", \"clang::FunctionDecl::getNumParams() const\"},\n    {\"_ZNK5clang9NamedDecl19declarationReplacesEPS0_\", \"clang::NamedDecl::declarationReplaces(clang::NamedDecl*) const\"},\n    {\"_ZNK5clang9NamedDecl10hasLinkageEv\", \"clang::NamedDecl::hasLinkage() const\"},\n    {\"_ZN5clang9NamedDecl17getUnderlyingDeclEv\", \"clang::NamedDecl::getUnderlyingDecl()\"},\n    {\"_ZNK5clang9NamedDecl19isCXXInstanceMemberEv\", \"clang::NamedDecl::isCXXInstanceMember() const\"},\n    {\"_ZNK5clang14DeclaratorDecl19getTypeSpecStartLocEv\", \"clang::DeclaratorDecl::getTypeSpecStartLoc() const\"},\n    {\"_ZN5clang14DeclaratorDecl16setQualifierInfoEPNS_19NestedNameSpecifierENS_11SourceRangeE\", \"clang::DeclaratorDecl::setQualifierInfo(clang::NestedNameSpecifier*, clang::SourceRange)\"},\n    {\"_ZNK5clang14DeclaratorDecl16getOuterLocStartEv\", \"clang::DeclaratorDecl::getOuterLocStart() const\"},\n    {\"_ZN5clang13QualifierInfo29setTemplateParameterListsInfoERNS_10ASTContextEjPPNS_21TemplateParameterListE\", \"clang::QualifierInfo::setTemplateParameterListsInfo(clang::ASTContext&, unsigned int, clang::TemplateParameterList**)\"},\n    {\"_ZN5clang7VarDecl30getStorageClassSpecifierStringENS_12StorageClassE\", \"clang::VarDecl::getStorageClassSpecifierString(clang::StorageClass)\"},\n    {\"_ZN5clang7VarDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoENS_12StorageClassESB_\", \"clang::VarDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::StorageClass, clang::StorageClass)\"},\n    {\"_ZN5clang7VarDecl15setStorageClassENS_12StorageClassE\", \"clang::VarDecl::setStorageClass(clang::StorageClass)\"},\n    {\"_ZNK5clang7VarDecl16getInnerLocStartEv\", \"clang::VarDecl::getInnerLocStart() const\"},\n    {\"_ZNK5clang7VarDecl14getSourceRangeEv\", \"clang::VarDecl::getSourceRange() const\"},\n    {\"_ZNK5clang7VarDecl9isExternCEv\", \"clang::VarDecl::isExternC() const\"},\n    {\"_ZN5clang7VarDecl16getCanonicalDeclEv\", \"clang::VarDecl::getCanonicalDecl()\"},\n    {\"_ZNK5clang7VarDecl28isThisDeclarationADefinitionEv\", \"clang::VarDecl::isThisDeclarationADefinition() const\"},\n    {\"_ZNK5clang7VarDecl29getTemplateSpecializationKindEv\", \"clang::VarDecl::getTemplateSpecializationKind() const\"},\n    {\"_ZN5clang7VarDecl19getActingDefinitionEv\", \"clang::VarDecl::getActingDefinition()\"},\n    {\"_ZNK5clang7VarDecl24isTentativeDefinitionNowEv\", \"clang::VarDecl::isTentativeDefinitionNow() const\"},\n    {\"_ZN5clang7VarDecl13getDefinitionEv\", \"clang::VarDecl::getDefinition()\"},\n    {\"_ZNK5clang7VarDecl13hasDefinitionEv\", \"clang::VarDecl::hasDefinition() const\"},\n    {\"_ZNK5clang7VarDecl17getAnyInitializerERPKS0_\", \"clang::VarDecl::getAnyInitializer(clang::VarDecl const*&) const\"},\n    {\"_ZNK5clang7VarDecl11isOutOfLineEv\", \"clang::VarDecl::isOutOfLine() const\"},\n    {\"_ZNK5clang7VarDecl35getInstantiatedFromStaticDataMemberEv\", \"clang::VarDecl::getInstantiatedFromStaticDataMember() const\"},\n    {\"_ZN5clang7VarDecl22getOutOfLineDefinitionEv\", \"clang::VarDecl::getOutOfLineDefinition()\"},\n    {\"_ZN5clang7VarDecl7setInitEPNS_4ExprE\", \"clang::VarDecl::setInit(clang::Expr*)\"},\n    {\"_ZNK5clang7VarDecl27getMemberSpecializationInfoEv\", \"clang::VarDecl::getMemberSpecializationInfo() const\"},\n    {\"_ZN5clang7VarDecl29setTemplateSpecializationKindENS_26TemplateSpecializationKindENS_14SourceLocationE\", \"clang::VarDecl::setTemplateSpecializationKind(clang::TemplateSpecializationKind, clang::SourceLocation)\"},\n    {\"_ZN5clang11ParmVarDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoENS_12StorageClassESB_PNS_4ExprE\", \"clang::ParmVarDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::StorageClass, clang::StorageClass, clang::Expr*)\"},\n    {\"_ZN5clang11ParmVarDecl13getDefaultArgEv\", \"clang::ParmVarDecl::getDefaultArg()\"},\n    {\"_ZNK5clang11ParmVarDecl27getNumDefaultArgTemporariesEv\", \"clang::ParmVarDecl::getNumDefaultArgTemporaries() const\"},\n    {\"_ZN5clang11ParmVarDecl22getDefaultArgTemporaryEj\", \"clang::ParmVarDecl::getDefaultArgTemporary(unsigned int)\"},\n    {\"_ZNK5clang11ParmVarDecl18getDefaultArgRangeEv\", \"clang::ParmVarDecl::getDefaultArgRange() const\"},\n    {\"_ZNK5clang11ParmVarDecl15isParameterPackEv\", \"clang::ParmVarDecl::isParameterPack() const\"},\n    {\"_ZNK5clang12FunctionDecl20getNameForDiagnosticERSsRKNS_14PrintingPolicyEb\", \"clang::FunctionDecl::getNameForDiagnostic(std::string&, clang::PrintingPolicy const&, bool) const\"},\n    {\"_ZNK5clang12FunctionDecl29getTemplateSpecializationArgsEv\", \"clang::FunctionDecl::getTemplateSpecializationArgs() const\"},\n    {\"_ZNK5clang12FunctionDecl10isVariadicEv\", \"clang::FunctionDecl::isVariadic() const\"},\n    {\"_ZNK5clang12FunctionDecl7hasBodyERPKS0_\", \"clang::FunctionDecl::hasBody(clang::FunctionDecl const*&) const\"},\n    {\"_ZNK5clang12FunctionDecl7getBodyERPKS0_\", \"clang::FunctionDecl::getBody(clang::FunctionDecl const*&) const\"},\n    {\"_ZN5clang12FunctionDecl7setBodyEPNS_4StmtE\", \"clang::FunctionDecl::setBody(clang::Stmt*)\"},\n    {\"_ZN5clang12FunctionDecl7setPureEb\", \"clang::FunctionDecl::setPure(bool)\"},\n    {\"_ZNK5clang12FunctionDecl6isMainEv\", \"clang::FunctionDecl::isMain() const\"},\n    {\"_ZNK5clang12FunctionDecl9isExternCEv\", \"clang::FunctionDecl::isExternC() const\"},\n    {\"_ZNK5clang12FunctionDecl8isGlobalEv\", \"clang::FunctionDecl::isGlobal() const\"},\n    {\"_ZN5clang12FunctionDecl22setPreviousDeclarationEPS0_\", \"clang::FunctionDecl::setPreviousDeclaration(clang::FunctionDecl*)\"},\n    {\"_ZNK5clang12FunctionDecl16getCanonicalDeclEv\", \"clang::FunctionDecl::getCanonicalDecl() const\"},\n    {\"_ZN5clang12FunctionDecl16getCanonicalDeclEv\", \"clang::FunctionDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang12FunctionDecl15setStorageClassENS_12StorageClassE\", \"clang::FunctionDecl::setStorageClass(clang::StorageClass)\"},\n    {\"_ZNK5clang12FunctionDecl12getBuiltinIDEv\", \"clang::FunctionDecl::getBuiltinID() const\"},\n    {\"_ZN5clang12FunctionDecl9setParamsERNS_10ASTContextEPPNS_11ParmVarDeclEj\", \"clang::FunctionDecl::setParams(clang::ASTContext&, clang::ParmVarDecl**, unsigned int)\"},\n    {\"_ZNK5clang12FunctionDecl23getMinRequiredArgumentsEv\", \"clang::FunctionDecl::getMinRequiredArguments() const\"},\n    {\"_ZNK5clang12FunctionDecl9isInlinedEv\", \"clang::FunctionDecl::isInlined() const\"},\n    {\"_ZNK5clang12FunctionDecl29getTemplateSpecializationKindEv\", \"clang::FunctionDecl::getTemplateSpecializationKind() const\"},\n    {\"_ZNK5clang12FunctionDecl31getTemplateInstantiationPatternEv\", \"clang::FunctionDecl::getTemplateInstantiationPattern() const\"},\n    {\"_ZNK5clang12FunctionDecl35isInlineDefinitionExternallyVisibleEv\", \"clang::FunctionDecl::isInlineDefinitionExternallyVisible() const\"},\n    {\"_ZNK5clang12FunctionDecl21getOverloadedOperatorEv\", \"clang::FunctionDecl::getOverloadedOperator() const\"},\n    {\"_ZNK5clang12FunctionDecl20getLiteralIdentifierEv\", \"clang::FunctionDecl::getLiteralIdentifier() const\"},\n    {\"_ZNK5clang12FunctionDecl16getTemplatedKindEv\", \"clang::FunctionDecl::getTemplatedKind() const\"},\n    {\"_ZNK5clang12FunctionDecl33getInstantiatedFromMemberFunctionEv\", \"clang::FunctionDecl::getInstantiatedFromMemberFunction() const\"},\n    {\"_ZNK5clang12FunctionDecl27getMemberSpecializationInfoEv\", \"clang::FunctionDecl::getMemberSpecializationInfo() const\"},\n    {\"_ZN5clang12FunctionDecl32setInstantiationOfMemberFunctionERNS_10ASTContextEPS0_NS_26TemplateSpecializationKindE\", \"clang::FunctionDecl::setInstantiationOfMemberFunction(clang::ASTContext&, clang::FunctionDecl*, clang::TemplateSpecializationKind)\"},\n    {\"_ZNK5clang12FunctionDecl24isImplicitlyInstantiableEv\", \"clang::FunctionDecl::isImplicitlyInstantiable() const\"},\n    {\"_ZNK5clang12FunctionDecl18getPrimaryTemplateEv\", \"clang::FunctionDecl::getPrimaryTemplate() const\"},\n    {\"_ZNK5clang12FunctionDecl38getTemplateSpecializationArgsAsWrittenEv\", \"clang::FunctionDecl::getTemplateSpecializationArgsAsWritten() const\"},\n    {\"_ZN5clang12FunctionDecl33setFunctionTemplateSpecializationERNS_10ASTContextEPNS_20FunctionTemplateDeclEPKNS_20TemplateArgumentListEPvNS_26TemplateSpecializationKindEPKNS_24TemplateArgumentListInfoENS_14SourceLocationE\", \"clang::FunctionDecl::setFunctionTemplateSpecialization(clang::ASTContext&, clang::FunctionTemplateDecl*, clang::TemplateArgumentList const*, void*, clang::TemplateSpecializationKind, clang::TemplateArgumentListInfo const*, clang::SourceLocation)\"},\n    {\"_ZN5clang12FunctionDecl34setDependentTemplateSpecializationERNS_10ASTContextERKNS_17UnresolvedSetImplERKNS_24TemplateArgumentListInfoE\", \"clang::FunctionDecl::setDependentTemplateSpecialization(clang::ASTContext&, clang::UnresolvedSetImpl const&, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang43DependentFunctionTemplateSpecializationInfoC1ERKNS_17UnresolvedSetImplERKNS_24TemplateArgumentListInfoE\", \"clang::DependentFunctionTemplateSpecializationInfo::DependentFunctionTemplateSpecializationInfo(clang::UnresolvedSetImpl const&, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang43DependentFunctionTemplateSpecializationInfoC2ERKNS_17UnresolvedSetImplERKNS_24TemplateArgumentListInfoE\", \"clang::DependentFunctionTemplateSpecializationInfo::DependentFunctionTemplateSpecializationInfo(clang::UnresolvedSetImpl const&, clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang12FunctionDecl29setTemplateSpecializationKindENS_26TemplateSpecializationKindENS_14SourceLocationE\", \"clang::FunctionDecl::setTemplateSpecializationKind(clang::TemplateSpecializationKind, clang::SourceLocation)\"},\n    {\"_ZNK5clang12FunctionDecl23getPointOfInstantiationEv\", \"clang::FunctionDecl::getPointOfInstantiation() const\"},\n    {\"_ZNK5clang12FunctionDecl11isOutOfLineEv\", \"clang::FunctionDecl::isOutOfLine() const\"},\n    {\"_ZN5clang9FieldDecl6CreateERKNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoEPNS_4ExprEb\", \"clang::FieldDecl::Create(clang::ASTContext const&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::Expr*, bool)\"},\n    {\"_ZNK5clang9FieldDecl24isAnonymousStructOrUnionEv\", \"clang::FieldDecl::isAnonymousStructOrUnion() const\"},\n    {\"_ZNK5clang9FieldDecl13getFieldIndexEv\", \"clang::FieldDecl::getFieldIndex() const\"},\n    {\"_ZNK5clang10RecordDecl11field_beginEv\", \"clang::RecordDecl::field_begin() const\"},\n    {\"_ZNK5clang7TagDecl16getOuterLocStartEv\", \"clang::TagDecl::getOuterLocStart() const\"},\n    {\"_ZNK5clang7TagDecl14getSourceRangeEv\", \"clang::TagDecl::getSourceRange() const\"},\n    {\"_ZN5clang7TagDecl16getCanonicalDeclEv\", \"clang::TagDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang7TagDecl21setTypedefForAnonDeclEPNS_11TypedefDeclE\", \"clang::TagDecl::setTypedefForAnonDecl(clang::TypedefDecl*)\"},\n    {\"_ZN5clang7TagDecl15startDefinitionEv\", \"clang::TagDecl::startDefinition()\"},\n    {\"_ZN5clang7TagDecl18completeDefinitionEv\", \"clang::TagDecl::completeDefinition()\"},\n    {\"_ZNK5clang7TagDecl13getDefinitionEv\", \"clang::TagDecl::getDefinition() const\"},\n    {\"_ZN5clang7TagDecl16setQualifierInfoEPNS_19NestedNameSpecifierENS_11SourceRangeE\", \"clang::TagDecl::setQualifierInfo(clang::NestedNameSpecifier*, clang::SourceRange)\"},\n    {\"_ZN5clang8EnumDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES5_PS0_bbb\", \"clang::EnumDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::EnumDecl*, bool, bool, bool)\"},\n    {\"_ZN5clang8EnumDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::EnumDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang8EnumDecl18completeDefinitionENS_8QualTypeES1_jj\", \"clang::EnumDecl::completeDefinition(clang::QualType, clang::QualType, unsigned int, unsigned int)\"},\n    {\"_ZN5clang10RecordDeclC1ENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPS0_S6_\", \"clang::RecordDecl::RecordDecl(clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::RecordDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang10RecordDeclC2ENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPS0_S6_\", \"clang::RecordDecl::RecordDecl(clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::RecordDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang10RecordDecl6CreateERKNS_10ASTContextENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES7_PS0_\", \"clang::RecordDecl::Create(clang::ASTContext const&, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::RecordDecl*)\"},\n    {\"_ZN5clang10RecordDecl6CreateERKNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::RecordDecl::Create(clang::ASTContext const&, clang::Decl::EmptyShell)\"},\n    {\"_ZNK5clang10RecordDecl19isInjectedClassNameEv\", \"clang::RecordDecl::isInjectedClassName() const\"},\n    {\"_ZNK5clang10RecordDecl29LoadFieldsFromExternalStorageEv\", \"clang::RecordDecl::LoadFieldsFromExternalStorage() const\"},\n    {\"_ZN5clang10RecordDecl18completeDefinitionEv\", \"clang::RecordDecl::completeDefinition()\"},\n    {\"_ZN5clang9BlockDecl9setParamsEPPNS_11ParmVarDeclEj\", \"clang::BlockDecl::setParams(clang::ParmVarDecl**, unsigned int)\"},\n    {\"_ZN5clang9BlockDecl11setCapturesERNS_10ASTContextEPKNS0_7CaptureES5_b\", \"clang::BlockDecl::setCaptures(clang::ASTContext&, clang::BlockDecl::Capture const*, clang::BlockDecl::Capture const*, bool)\"},\n    {\"_ZNK5clang9BlockDecl14getSourceRangeEv\", \"clang::BlockDecl::getSourceRange() const\"},\n    {\"_ZN5clang19TranslationUnitDecl6CreateERNS_10ASTContextE\", \"clang::TranslationUnitDecl::Create(clang::ASTContext&)\"},\n    {\"_ZN5clang13NamespaceDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoE\", \"clang::NamespaceDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang13NamespaceDecl16getNextNamespaceEv\", \"clang::NamespaceDecl::getNextNamespace()\"},\n    {\"_ZN5clang17ImplicitParamDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeE\", \"clang::ImplicitParamDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType)\"},\n    {\"_ZN5clang12FunctionDecl6CreateERNS_10ASTContextEPNS_11DeclContextERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoENS_12StorageClassESB_bb\", \"clang::FunctionDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, clang::StorageClass, clang::StorageClass, bool, bool)\"},\n    {\"_ZN5clang9BlockDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationE\", \"clang::BlockDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation)\"},\n    {\"_ZN5clang16EnumConstantDecl6CreateERNS_10ASTContextEPNS_8EnumDeclENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_4ExprERKN4llvm6APSIntE\", \"clang::EnumConstantDecl::Create(clang::ASTContext&, clang::EnumDecl*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::Expr*, llvm::APSInt const&)\"},\n    {\"_ZN5clang17IndirectFieldDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPPNS_9NamedDeclEj\", \"clang::IndirectFieldDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::NamedDecl**, unsigned int)\"},\n    {\"_ZNK5clang16EnumConstantDecl14getSourceRangeEv\", \"clang::EnumConstantDecl::getSourceRange() const\"},\n    {\"_ZN5clang11TypedefDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPNS_14TypeSourceInfoE\", \"clang::TypedefDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang16FileScopeAsmDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_13StringLiteralE\", \"clang::FileScopeAsmDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::StringLiteral*)\"},\n    {\"_Z21GetExplicitVisibilityPKN5clang4DeclE\", \"GetExplicitVisibility(clang::Decl const*)\"},\n    {\"_Z29getLVForTemplateParameterListPKN5clang21TemplateParameterListE\", \"getLVForTemplateParameterList(clang::TemplateParameterList const*)\"},\n    {\"_Z28getLVForTemplateArgumentListPKN5clang16TemplateArgumentEjRN12_GLOBAL__N_17LVFlagsE\", \"getLVForTemplateArgumentList(clang::TemplateArgument const*, unsigned int, (anonymous namespace)::LVFlags&)\"},\n    {\"_ZNK5clang4Decl11isOutOfLineEv\", \"clang::Decl::isOutOfLine() const\"},\n    {\"_ZNK5clang9NamedDecl20getNameForDiagnosticERSsRKNS_14PrintingPolicyEb\", \"clang::NamedDecl::getNameForDiagnostic(std::string&, clang::PrintingPolicy const&, bool) const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_16OverloadableAttrEEEPT_v\", \"clang::OverloadableAttr* clang::Decl::getAttr<clang::OverloadableAttr>() const\"},\n    {\"_ZN5clang12RedeclarableINS_12FunctionDeclEE22setPreviousDeclarationEPS1_\", \"clang::Redeclarable<clang::FunctionDecl>::setPreviousDeclaration(clang::FunctionDecl*)\"},\n    {\"_ZN5clang7TagDeclC2ENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPS0_S6_\", \"clang::TagDecl::TagDecl(clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::TagDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang7VarDeclD1Ev\", \"clang::VarDecl::~VarDecl()\"},\n    {\"_ZN5clang7VarDeclD0Ev\", \"clang::VarDecl::~VarDecl()\"},\n    {\"_ZN5clang7VarDecl20getNextRedeclarationEv\", \"clang::VarDecl::getNextRedeclaration()\"},\n    {\"_ZNK5clang4Decl7getBodyEv\", \"clang::Decl::getBody() const\"},\n    {\"_ZNK5clang4Decl7hasBodyEv\", \"clang::Decl::hasBody() const\"},\n    {\"_ZN5clang12FunctionDeclD1Ev\", \"clang::FunctionDecl::~FunctionDecl()\"},\n    {\"_ZN5clang12FunctionDeclD0Ev\", \"clang::FunctionDecl::~FunctionDecl()\"},\n    {\"_ZNK5clang12FunctionDecl14getSourceRangeEv\", \"clang::FunctionDecl::getSourceRange() const\"},\n    {\"_ZN5clang12FunctionDecl20getNextRedeclarationEv\", \"clang::FunctionDecl::getNextRedeclaration()\"},\n    {\"_ZNK5clang12FunctionDecl7getBodyEv\", \"clang::FunctionDecl::getBody() const\"},\n    {\"_ZNK5clang12FunctionDecl7hasBodyEv\", \"clang::FunctionDecl::hasBody() const\"},\n    {\"_ZNK5clang14DeclaratorDecl16getInnerLocStartEv\", \"clang::DeclaratorDecl::getInnerLocStart() const\"},\n    {\"_ZN5clang16EnumConstantDeclD1Ev\", \"clang::EnumConstantDecl::~EnumConstantDecl()\"},\n    {\"_ZN5clang16EnumConstantDeclD0Ev\", \"clang::EnumConstantDecl::~EnumConstantDecl()\"},\n    {\"_ZN5clang4Decl16getCanonicalDeclEv\", \"clang::Decl::getCanonicalDecl()\"},\n    {\"_ZN5clang4Decl20getNextRedeclarationEv\", \"clang::Decl::getNextRedeclaration()\"},\n    {\"_ZN5clang7TagDeclD1Ev\", \"clang::TagDecl::~TagDecl()\"},\n    {\"_ZN5clang7TagDeclD0Ev\", \"clang::TagDecl::~TagDecl()\"},\n    {\"_ZN5clang7TagDecl20getNextRedeclarationEv\", \"clang::TagDecl::getNextRedeclaration()\"},\n    {\"_ZNK5clang7TagDecl16getInnerLocStartEv\", \"clang::TagDecl::getInnerLocStart() const\"},\n    {\"_ZN5clang9BlockDeclD1Ev\", \"clang::BlockDecl::~BlockDecl()\"},\n    {\"_ZN5clang9BlockDeclD0Ev\", \"clang::BlockDecl::~BlockDecl()\"},\n    {\"_ZNK5clang9BlockDecl7getBodyEv\", \"clang::BlockDecl::getBody() const\"},\n    {\"_ZN5clang10RecordDeclD1Ev\", \"clang::RecordDecl::~RecordDecl()\"},\n    {\"_ZN5clang10RecordDeclD0Ev\", \"clang::RecordDecl::~RecordDecl()\"},\n    {\"_ZN5clang9FieldDecl11classofKindENS_4Decl4KindE\", \"clang::FieldDecl::classofKind(clang::Decl::Kind)\"},\n    {\"_ZN5clang8TypeDeclD1Ev\", \"clang::TypeDecl::~TypeDecl()\"},\n    {\"_ZN5clang8TypeDeclD0Ev\", \"clang::TypeDecl::~TypeDecl()\"},\n    {\"_ZNK5clang4Decl14getSourceRangeEv\", \"clang::Decl::getSourceRange() const\"},\n    {\"_ZN5clang9NamedDeclD1Ev\", \"clang::NamedDecl::~NamedDecl()\"},\n    {\"_ZN5clang9NamedDeclD0Ev\", \"clang::NamedDecl::~NamedDecl()\"},\n    {\"_ZN5clang9ValueDeclD1Ev\", \"clang::ValueDecl::~ValueDecl()\"},\n    {\"_ZN5clang9ValueDeclD0Ev\", \"clang::ValueDecl::~ValueDecl()\"},\n    {\"_ZN5clang14DeclaratorDeclD1Ev\", \"clang::DeclaratorDecl::~DeclaratorDecl()\"},\n    {\"_ZN5clang14DeclaratorDeclD0Ev\", \"clang::DeclaratorDecl::~DeclaratorDecl()\"},\n    {\"_ZNK5clang14DeclaratorDecl14getSourceRangeEv\", \"clang::DeclaratorDecl::getSourceRange() const\"},\n    {\"_ZN5clang16FileScopeAsmDeclD1Ev\", \"clang::FileScopeAsmDecl::~FileScopeAsmDecl()\"},\n    {\"_ZN5clang16FileScopeAsmDeclD0Ev\", \"clang::FileScopeAsmDecl::~FileScopeAsmDecl()\"},\n    {\"_ZN5clang11TypedefDeclD1Ev\", \"clang::TypedefDecl::~TypedefDecl()\"},\n    {\"_ZN5clang11TypedefDeclD0Ev\", \"clang::TypedefDecl::~TypedefDecl()\"},\n    {\"_ZN5clang11TypedefDecl16getCanonicalDeclEv\", \"clang::TypedefDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang11TypedefDecl20getNextRedeclarationEv\", \"clang::TypedefDecl::getNextRedeclaration()\"},\n    {\"_ZN5clang17IndirectFieldDeclD1Ev\", \"clang::IndirectFieldDecl::~IndirectFieldDecl()\"},\n    {\"_ZN5clang17IndirectFieldDeclD0Ev\", \"clang::IndirectFieldDecl::~IndirectFieldDecl()\"},\n    {\"_ZN5clang16EnumConstantDeclC2EPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_4ExprERKN4llvm6APSIntE\", \"clang::EnumConstantDecl::EnumConstantDecl(clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::Expr*, llvm::APSInt const&)\"},\n    {\"_ZN5clang9BlockDeclC2EPNS_11DeclContextENS_14SourceLocationE\", \"clang::BlockDecl::BlockDecl(clang::DeclContext*, clang::SourceLocation)\"},\n    {\"_ZN5clang12FunctionDeclC2ENS_4Decl4KindEPNS_11DeclContextERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoENS_12StorageClassESB_b\", \"clang::FunctionDecl::FunctionDecl(clang::Decl::Kind, clang::DeclContext*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, clang::StorageClass, clang::StorageClass, bool)\"},\n    {\"_ZN5clang7VarDeclC2ENS_4Decl4KindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoENS_12StorageClassESB_\", \"clang::VarDecl::VarDecl(clang::Decl::Kind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::StorageClass, clang::StorageClass)\"},\n    {\"_ZN5clang17ImplicitParamDeclD1Ev\", \"clang::ImplicitParamDecl::~ImplicitParamDecl()\"},\n    {\"_ZN5clang17ImplicitParamDeclD0Ev\", \"clang::ImplicitParamDecl::~ImplicitParamDecl()\"},\n    {\"_ZN5clang13NamespaceDeclC2EPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoE\", \"clang::NamespaceDecl::NamespaceDecl(clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang13NamespaceDeclD1Ev\", \"clang::NamespaceDecl::~NamespaceDecl()\"},\n    {\"_ZN5clang13NamespaceDeclD0Ev\", \"clang::NamespaceDecl::~NamespaceDecl()\"},\n    {\"_ZNK5clang13NamespaceDecl14getSourceRangeEv\", \"clang::NamespaceDecl::getSourceRange() const\"},\n    {\"_ZN5clang13NamespaceDecl16getCanonicalDeclEv\", \"clang::NamespaceDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang19TranslationUnitDeclC2ERNS_10ASTContextE\", \"clang::TranslationUnitDecl::TranslationUnitDecl(clang::ASTContext&)\"},\n    {\"_ZN5clang19TranslationUnitDeclD1Ev\", \"clang::TranslationUnitDecl::~TranslationUnitDecl()\"},\n    {\"_ZN5clang19TranslationUnitDeclD0Ev\", \"clang::TranslationUnitDecl::~TranslationUnitDecl()\"},\n    {\"_ZN5clang12RedeclarableINS_7TagDeclEE22setPreviousDeclarationEPS1_\", \"clang::Redeclarable<clang::TagDecl>::setPreviousDeclaration(clang::TagDecl*)\"},\n    {\"_ZN5clang8EnumDeclD1Ev\", \"clang::EnumDecl::~EnumDecl()\"},\n    {\"_ZN5clang8EnumDeclD0Ev\", \"clang::EnumDecl::~EnumDecl()\"},\n    {\"_ZN5clang8EnumDecl16getCanonicalDeclEv\", \"clang::EnumDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang9FieldDeclC2ENS_4Decl4KindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoEPNS_4ExprEb\", \"clang::FieldDecl::FieldDecl(clang::Decl::Kind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::Expr*, bool)\"},\n    {\"_ZN5clang9FieldDeclD1Ev\", \"clang::FieldDecl::~FieldDecl()\"},\n    {\"_ZN5clang9FieldDeclD0Ev\", \"clang::FieldDecl::~FieldDecl()\"},\n    {\"_ZN5clang11ParmVarDeclD1Ev\", \"clang::ParmVarDecl::~ParmVarDecl()\"},\n    {\"_ZN5clang11ParmVarDeclD0Ev\", \"clang::ParmVarDecl::~ParmVarDecl()\"},\n    {\"_ZNK5clang4Decl7getAttrINS_14VisibilityAttrEEEPT_v\", \"clang::VisibilityAttr* clang::Decl::getAttr<clang::VisibilityAttr>() const\"},\n    {\"_ZNK5clang4Decl15getDeclKindNameEv\", \"clang::Decl::getDeclKindName() const\"},\n    {\"_ZN5clang4Decl14setInvalidDeclEb\", \"clang::Decl::setInvalidDecl(bool)\"},\n    {\"_ZNK5clang11DeclContext15getDeclKindNameEv\", \"clang::DeclContext::getDeclKindName() const\"},\n    {\"_ZN5clang4Decl15CollectingStatsEb\", \"clang::Decl::CollectingStats(bool)\"},\n    {\"_ZN5clang4Decl10PrintStatsEv\", \"clang::Decl::PrintStats()\"},\n    {\"_ZN5clang4Decl3addENS0_4KindE\", \"clang::Decl::add(clang::Decl::Kind)\"},\n    {\"_ZNK5clang4Decl23isTemplateParameterPackEv\", \"clang::Decl::isTemplateParameterPack() const\"},\n    {\"_ZNK5clang4Decl15isParameterPackEv\", \"clang::Decl::isParameterPack() const\"},\n    {\"_ZNK5clang4Decl28isFunctionOrFunctionTemplateEv\", \"clang::Decl::isFunctionOrFunctionTemplate() const\"},\n    {\"_ZNK5clang4Decl32isDefinedOutsideFunctionOrMethodEv\", \"clang::Decl::isDefinedOutsideFunctionOrMethod() const\"},\n    {\"_ZNK5clang20PrettyStackTraceDecl5printERN4llvm11raw_ostreamE\", \"clang::PrettyStackTraceDecl::print(llvm::raw_ostream&) const\"},\n    {\"_ZN5clang4DeclD0Ev\", \"clang::Decl::~Decl()\"},\n    {\"_ZN5clang4DeclD1Ev\", \"clang::Decl::~Decl()\"},\n    {\"_ZN5clang4DeclD2Ev\", \"clang::Decl::~Decl()\"},\n    {\"_ZN5clang4Decl14setDeclContextEPNS_11DeclContextE\", \"clang::Decl::setDeclContext(clang::DeclContext*)\"},\n    {\"_ZN5clang4Decl21setLexicalDeclContextEPNS_11DeclContextE\", \"clang::Decl::setLexicalDeclContext(clang::DeclContext*)\"},\n    {\"_ZNK5clang4Decl13getASTContextEv\", \"clang::Decl::getASTContext() const\"},\n    {\"_ZNK5clang4Decl22isInAnonymousNamespaceEv\", \"clang::Decl::isInAnonymousNamespace() const\"},\n    {\"_ZN5clang4Decl22getTranslationUnitDeclEv\", \"clang::Decl::getTranslationUnitDecl()\"},\n    {\"_ZNK5clang4Decl22getASTMutationListenerEv\", \"clang::Decl::getASTMutationListener() const\"},\n    {\"_ZNK5clang4Decl6isUsedEb\", \"clang::Decl::isUsed(bool) const\"},\n    {\"_ZN5clang4Decl29getIdentifierNamespaceForKindENS0_4KindE\", \"clang::Decl::getIdentifierNamespaceForKind(clang::Decl::Kind)\"},\n    {\"_ZN5clang4Decl8setAttrsERKN4llvm11SmallVectorIPNS_4AttrELj2EEE\", \"clang::Decl::setAttrs(llvm::SmallVector<clang::Attr*, 2u> const&)\"},\n    {\"_ZN5clang4Decl9dropAttrsEv\", \"clang::Decl::dropAttrs()\"},\n    {\"_ZNK5clang4Decl8getAttrsEv\", \"clang::Decl::getAttrs() const\"},\n    {\"_ZN5clang4Decl9swapAttrsEPS0_\", \"clang::Decl::swapAttrs(clang::Decl*)\"},\n    {\"_ZN5clang4Decl19castFromDeclContextEPKNS_11DeclContextE\", \"clang::Decl::castFromDeclContext(clang::DeclContext const*)\"},\n    {\"_ZN5clang4Decl17castToDeclContextEPKS0_\", \"clang::Decl::castToDeclContext(clang::Decl const*)\"},\n    {\"_ZNK5clang4Decl13getBodyRBraceEv\", \"clang::Decl::getBodyRBrace() const\"},\n    {\"_ZNK5clang4Decl22CheckAccessDeclContextEv\", \"clang::Decl::CheckAccessDeclContext() const\"},\n    {\"_ZN5clang11DeclContext7classofEPKNS_4DeclE\", \"clang::DeclContext::classof(clang::Decl const*)\"},\n    {\"_ZN5clang11DeclContextD1Ev\", \"clang::DeclContext::~DeclContext()\"},\n    {\"_ZN5clang11DeclContextD2Ev\", \"clang::DeclContext::~DeclContext()\"},\n    {\"_ZN5clang11DeclContext15getLookupParentEv\", \"clang::DeclContext::getLookupParent()\"},\n    {\"_ZN5clang11DeclContext16getRedeclContextEv\", \"clang::DeclContext::getRedeclContext()\"},\n    {\"_ZNK5clang11DeclContext17isInlineNamespaceEv\", \"clang::DeclContext::isInlineNamespace() const\"},\n    {\"_ZNK5clang11DeclContext18isDependentContextEv\", \"clang::DeclContext::isDependentContext() const\"},\n    {\"_ZNK5clang11DeclContext20isTransparentContextEv\", \"clang::DeclContext::isTransparentContext() const\"},\n    {\"_ZNK5clang11DeclContext16isExternCContextEv\", \"clang::DeclContext::isExternCContext() const\"},\n    {\"_ZNK5clang11DeclContext8EnclosesEPKS0_\", \"clang::DeclContext::Encloses(clang::DeclContext const*) const\"},\n    {\"_ZN5clang11DeclContext17getPrimaryContextEv\", \"clang::DeclContext::getPrimaryContext()\"},\n    {\"_ZN5clang11DeclContext14getNextContextEv\", \"clang::DeclContext::getNextContext()\"},\n    {\"_ZN5clang11DeclContext14BuildDeclChainERKN4llvm15SmallVectorImplIPNS_4DeclEEE\", \"clang::DeclContext::BuildDeclChain(llvm::SmallVectorImpl<clang::Decl*> const&)\"},\n    {\"_ZNK5clang11DeclContext35LoadLexicalDeclsFromExternalStorageEv\", \"clang::DeclContext::LoadLexicalDeclsFromExternalStorage() const\"},\n    {\"_ZN5clang17ExternalASTSource32SetNoExternalVisibleDeclsForNameEPKNS_11DeclContextENS_15DeclarationNameE\", \"clang::ExternalASTSource::SetNoExternalVisibleDeclsForName(clang::DeclContext const*, clang::DeclarationName)\"},\n    {\"_ZNK5clang11DeclContext20CreateStoredDeclsMapERNS_10ASTContextE\", \"clang::DeclContext::CreateStoredDeclsMap(clang::ASTContext&) const\"},\n    {\"_ZN5clang17ExternalASTSource30SetExternalVisibleDeclsForNameEPKNS_11DeclContextENS_15DeclarationNameERN4llvm15SmallVectorImplIPNS_9NamedDeclEEE\", \"clang::ExternalASTSource::SetExternalVisibleDeclsForName(clang::DeclContext const*, clang::DeclarationName, llvm::SmallVectorImpl<clang::NamedDecl*>&)\"},\n    {\"_ZN5clang17ExternalASTSource30MaterializeVisibleDeclsForNameEPKNS_11DeclContextENS_15DeclarationNameERN4llvm15SmallVectorImplIPNS_9NamedDeclEEE\", \"clang::ExternalASTSource::MaterializeVisibleDeclsForName(clang::DeclContext const*, clang::DeclarationName, llvm::SmallVectorImpl<clang::NamedDecl*>&)\"},\n    {\"_ZNK5clang11DeclContext18noload_decls_beginEv\", \"clang::DeclContext::noload_decls_begin() const\"},\n    {\"_ZNK5clang11DeclContext16noload_decls_endEv\", \"clang::DeclContext::noload_decls_end() const\"},\n    {\"_ZNK5clang11DeclContext11decls_beginEv\", \"clang::DeclContext::decls_begin() const\"},\n    {\"_ZNK5clang11DeclContext9decls_endEv\", \"clang::DeclContext::decls_end() const\"},\n    {\"_ZNK5clang11DeclContext11decls_emptyEv\", \"clang::DeclContext::decls_empty() const\"},\n    {\"_ZN5clang11DeclContext10removeDeclEPNS_4DeclE\", \"clang::DeclContext::removeDecl(clang::Decl*)\"},\n    {\"_ZN5clang11DeclContext13addHiddenDeclEPNS_4DeclE\", \"clang::DeclContext::addHiddenDecl(clang::Decl*)\"},\n    {\"_ZN5clang11DeclContext7addDeclEPNS_4DeclE\", \"clang::DeclContext::addDecl(clang::Decl*)\"},\n    {\"_ZN5clang11DeclContext24makeDeclVisibleInContextEPNS_9NamedDeclEb\", \"clang::DeclContext::makeDeclVisibleInContext(clang::NamedDecl*, bool)\"},\n    {\"_ZN5clang11DeclContext11buildLookupEPS0_\", \"clang::DeclContext::buildLookup(clang::DeclContext*)\"},\n    {\"_ZN5clang11DeclContext28makeDeclVisibleInContextImplEPNS_9NamedDeclE\", \"clang::DeclContext::makeDeclVisibleInContextImpl(clang::NamedDecl*)\"},\n    {\"_ZN5clang11DeclContext6lookupENS_15DeclarationNameE\", \"clang::DeclContext::lookup(clang::DeclarationName)\"},\n    {\"_ZNK5clang11DeclContext6lookupENS_15DeclarationNameE\", \"clang::DeclContext::lookup(clang::DeclarationName) const\"},\n    {\"_ZN5clang11DeclContext28getEnclosingNamespaceContextEv\", \"clang::DeclContext::getEnclosingNamespaceContext()\"},\n    {\"_ZNK5clang11DeclContext25InEnclosingNamespaceSetOfEPKS0_\", \"clang::DeclContext::InEnclosingNamespaceSetOf(clang::DeclContext const*) const\"},\n    {\"_ZN5clang11DeclContext42MaterializeVisibleDeclsFromExternalStorageEv\", \"clang::DeclContext::MaterializeVisibleDeclsFromExternalStorage()\"},\n    {\"_ZNK5clang11DeclContext18getUsingDirectivesEv\", \"clang::DeclContext::getUsingDirectives() const\"},\n    {\"_ZN5clang10ASTContext22ReleaseDeclContextMapsEv\", \"clang::ASTContext::ReleaseDeclContextMaps()\"},\n    {\"_ZN5clang14StoredDeclsMap10DestroyAllEPS0_b\", \"clang::StoredDeclsMap::DestroyAll(clang::StoredDeclsMap*, bool)\"},\n    {\"_ZN5clang19DependentDiagnostic6CreateERNS_10ASTContextEPNS_11DeclContextERKNS_17PartialDiagnosticE\", \"clang::DependentDiagnostic::Create(clang::ASTContext&, clang::DeclContext*, clang::PartialDiagnostic const&)\"},\n    {\"_ZNK5clang4Decl7hasAttrINS_8UsedAttrEEEbv\", \"bool clang::Decl::hasAttr<clang::UsedAttr>() const\"},\n    {\"_ZN5clang15StoredDeclsList17AddSubsequentDeclEPNS_9NamedDeclE\", \"clang::StoredDeclsList::AddSubsequentDecl(clang::NamedDecl*)\"},\n    {\"_ZN5clang15StoredDeclsList6removeEPNS_9NamedDeclE\", \"clang::StoredDeclsList::remove(clang::NamedDecl*)\"},\n    {\"_ZN5clang15StoredDeclsList19HandleRedeclarationEPNS_9NamedDeclE\", \"clang::StoredDeclsList::HandleRedeclaration(clang::NamedDecl*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameENS1_15StoredDeclsListENS_12DenseMapInfoIS2_EENS4_IS3_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<clang::DeclarationName, clang::StoredDeclsList, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::StoredDeclsList> >::FindAndConstruct(clang::DeclarationName const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameENS1_15StoredDeclsListENS_12DenseMapInfoIS2_EENS4_IS3_EEE16InsertIntoBucketERKS2_RKS3_PSt4pairIS2_S3_E\", \"llvm::DenseMap<clang::DeclarationName, clang::StoredDeclsList, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::StoredDeclsList> >::InsertIntoBucket(clang::DeclarationName const&, clang::StoredDeclsList const&, std::pair<clang::DeclarationName, clang::StoredDeclsList>*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameENS1_15StoredDeclsListENS_12DenseMapInfoIS2_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<clang::DeclarationName, clang::StoredDeclsList, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::StoredDeclsList> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang9NamedDeclEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::NamedDecl*>::operator=(llvm::SmallVectorImpl<clang::NamedDecl*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang4AttrEE4swapERS4_\", \"llvm::SmallVectorImpl<clang::Attr*>::swap(llvm::SmallVectorImpl<clang::Attr*>&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang4AttrEEaSERKS4_\", \"llvm::SmallVectorImpl<clang::Attr*>::operator=(llvm::SmallVectorImpl<clang::Attr*> const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang15DeclarationNameENS1_15StoredDeclsListENS_12DenseMapInfoIS2_EENS4_IS3_EEED2Ev\", \"llvm::DenseMap<clang::DeclarationName, clang::StoredDeclsList, llvm::DenseMapInfo<clang::DeclarationName>, llvm::DenseMapInfo<clang::StoredDeclsList> >::~DenseMap()\"},\n    {\"_ZSt6__findIPPN5clang9NamedDeclES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"clang::NamedDecl** std::__find<clang::NamedDecl**, clang::NamedDecl*>(clang::NamedDecl**, clang::NamedDecl**, clang::NamedDecl* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang9NamedDeclEE6insertEPS3_RKS3_\", \"llvm::SmallVectorImpl<clang::NamedDecl*>::insert(clang::NamedDecl**, clang::NamedDecl* const&)\"},\n    {\"_ZN5clang13CXXRecordDecl14DefinitionDataC1EPS0_\", \"clang::CXXRecordDecl::DefinitionData::DefinitionData(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang13CXXRecordDecl14DefinitionDataC2EPS0_\", \"clang::CXXRecordDecl::DefinitionData::DefinitionData(clang::CXXRecordDecl*)\"},\n    {\"_ZN5clang13CXXRecordDeclC1ENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPS0_S6_\", \"clang::CXXRecordDecl::CXXRecordDecl(clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::CXXRecordDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang13CXXRecordDeclC2ENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPS0_S6_\", \"clang::CXXRecordDecl::CXXRecordDecl(clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::CXXRecordDecl*, clang::SourceLocation)\"},\n    {\"_ZN5clang13CXXRecordDecl6CreateERKNS_10ASTContextENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES7_PS0_b\", \"clang::CXXRecordDecl::Create(clang::ASTContext const&, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::CXXRecordDecl*, bool)\"},\n    {\"_ZN5clang13CXXRecordDecl6CreateERKNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::CXXRecordDecl::Create(clang::ASTContext const&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang13CXXRecordDecl8setBasesEPKPKNS_16CXXBaseSpecifierEj\", \"clang::CXXRecordDecl::setBases(clang::CXXBaseSpecifier const* const*, unsigned int)\"},\n    {\"_ZNK5clang13CXXRecordDecl20hasAnyDependentBasesEv\", \"clang::CXXRecordDecl::hasAnyDependentBases() const\"},\n    {\"_Z7SawBasePKN5clang13CXXRecordDeclEPv\", \"SawBase(clang::CXXRecordDecl const*, void*)\"},\n    {\"_ZNK5clang13CXXRecordDecl23hasConstCopyConstructorERKNS_10ASTContextE\", \"clang::CXXRecordDecl::hasConstCopyConstructor(clang::ASTContext const&) const\"},\n    {\"_ZNK5clang13CXXRecordDecl18getCopyConstructorERKNS_10ASTContextEj\", \"clang::CXXRecordDecl::getCopyConstructor(clang::ASTContext const&, unsigned int) const\"},\n    {\"_ZNK5clang18CXXConstructorDecl17isCopyConstructorERj\", \"clang::CXXConstructorDecl::isCopyConstructor(unsigned int&) const\"},\n    {\"_Z30GetBestOverloadCandidateSimpleRKN4llvm15SmallVectorImplISt4pairIPN5clang13CXXMethodDeclENS2_10QualifiersEEEE\", \"GetBestOverloadCandidateSimple(llvm::SmallVectorImpl<std::pair<clang::CXXMethodDecl*, clang::Qualifiers> > const&)\"},\n    {\"_ZNK5clang13CXXRecordDecl25getCopyAssignmentOperatorEb\", \"clang::CXXRecordDecl::getCopyAssignmentOperator(bool) const\"},\n    {\"_ZN5clang13CXXRecordDecl25markedVirtualFunctionPureEv\", \"clang::CXXRecordDecl::markedVirtualFunctionPure()\"},\n    {\"_ZN5clang13CXXRecordDecl11addedMemberEPNS_4DeclE\", \"clang::CXXRecordDecl::addedMember(clang::Decl*)\"},\n    {\"_ZNK5clang18CXXConstructorDecl20isDefaultConstructorEv\", \"clang::CXXConstructorDecl::isDefaultConstructor() const\"},\n    {\"_ZN5clang13CXXRecordDecl29getVisibleConversionFunctionsEv\", \"clang::CXXRecordDecl::getVisibleConversionFunctions()\"},\n    {\"_ZN5clang13CXXRecordDecl16removeConversionEPKNS_9NamedDeclE\", \"clang::CXXRecordDecl::removeConversion(clang::NamedDecl const*)\"},\n    {\"_ZNK5clang13CXXRecordDecl30getInstantiatedFromMemberClassEv\", \"clang::CXXRecordDecl::getInstantiatedFromMemberClass() const\"},\n    {\"_ZNK5clang13CXXRecordDecl27getMemberSpecializationInfoEv\", \"clang::CXXRecordDecl::getMemberSpecializationInfo() const\"},\n    {\"_ZN5clang13CXXRecordDecl29setInstantiationOfMemberClassEPS0_NS_26TemplateSpecializationKindE\", \"clang::CXXRecordDecl::setInstantiationOfMemberClass(clang::CXXRecordDecl*, clang::TemplateSpecializationKind)\"},\n    {\"_ZNK5clang13CXXRecordDecl29getTemplateSpecializationKindEv\", \"clang::CXXRecordDecl::getTemplateSpecializationKind() const\"},\n    {\"_ZN5clang13CXXRecordDecl29setTemplateSpecializationKindENS_26TemplateSpecializationKindE\", \"clang::CXXRecordDecl::setTemplateSpecializationKind(clang::TemplateSpecializationKind)\"},\n    {\"_ZNK5clang13CXXRecordDecl13getDestructorEv\", \"clang::CXXRecordDecl::getDestructor() const\"},\n    {\"_ZN5clang13CXXRecordDecl18completeDefinitionEv\", \"clang::CXXRecordDecl::completeDefinition()\"},\n    {\"_ZN5clang13CXXRecordDecl18completeDefinitionEPNS_20CXXFinalOverriderMapE\", \"clang::CXXRecordDecl::completeDefinition(clang::CXXFinalOverriderMap*)\"},\n    {\"_ZNK5clang13CXXRecordDecl13mayBeAbstractEv\", \"clang::CXXRecordDecl::mayBeAbstract() const\"},\n    {\"_ZN5clang13CXXMethodDecl6CreateERNS_10ASTContextEPNS_13CXXRecordDeclERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoEbNS_12StorageClassEb\", \"clang::CXXMethodDecl::Create(clang::ASTContext&, clang::CXXRecordDecl*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, bool, clang::StorageClass, bool)\"},\n    {\"_ZNK5clang13CXXMethodDecl27isUsualDeallocationFunctionEv\", \"clang::CXXMethodDecl::isUsualDeallocationFunction() const\"},\n    {\"_ZNK5clang13CXXMethodDecl24isCopyAssignmentOperatorEv\", \"clang::CXXMethodDecl::isCopyAssignmentOperator() const\"},\n    {\"_ZN5clang13CXXMethodDecl19addOverriddenMethodEPKS0_\", \"clang::CXXMethodDecl::addOverriddenMethod(clang::CXXMethodDecl const*)\"},\n    {\"_ZNK5clang13CXXMethodDecl24begin_overridden_methodsEv\", \"clang::CXXMethodDecl::begin_overridden_methods() const\"},\n    {\"_ZNK5clang13CXXMethodDecl22end_overridden_methodsEv\", \"clang::CXXMethodDecl::end_overridden_methods() const\"},\n    {\"_ZNK5clang13CXXMethodDecl23size_overridden_methodsEv\", \"clang::CXXMethodDecl::size_overridden_methods() const\"},\n    {\"_ZNK5clang13CXXMethodDecl11getThisTypeERNS_10ASTContextE\", \"clang::CXXMethodDecl::getThisType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang13CXXMethodDecl13hasInlineBodyEv\", \"clang::CXXMethodDecl::hasInlineBody() const\"},\n    {\"_ZN5clang18CXXCtorInitializerC1ERNS_10ASTContextEPNS_14TypeSourceInfoEbNS_14SourceLocationEPNS_4ExprES5_S5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::TypeSourceInfo*, bool, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC2ERNS_10ASTContextEPNS_14TypeSourceInfoEbNS_14SourceLocationEPNS_4ExprES5_S5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::TypeSourceInfo*, bool, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC1ERNS_10ASTContextEPNS_9FieldDeclENS_14SourceLocationES5_PNS_4ExprES5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::FieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC2ERNS_10ASTContextEPNS_9FieldDeclENS_14SourceLocationES5_PNS_4ExprES5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::FieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC1ERNS_10ASTContextEPNS_17IndirectFieldDeclENS_14SourceLocationES5_PNS_4ExprES5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::IndirectFieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC2ERNS_10ASTContextEPNS_17IndirectFieldDeclENS_14SourceLocationES5_PNS_4ExprES5_\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::IndirectFieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXCtorInitializerC1ERNS_10ASTContextEPNS_9FieldDeclENS_14SourceLocationES5_PNS_4ExprES5_PPNS_7VarDeclEj\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::FieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::VarDecl**, unsigned int)\"},\n    {\"_ZN5clang18CXXCtorInitializerC2ERNS_10ASTContextEPNS_9FieldDeclENS_14SourceLocationES5_PNS_4ExprES5_PPNS_7VarDeclEj\", \"clang::CXXCtorInitializer::CXXCtorInitializer(clang::ASTContext&, clang::FieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::VarDecl**, unsigned int)\"},\n    {\"_ZN5clang18CXXCtorInitializer6CreateERNS_10ASTContextEPNS_9FieldDeclENS_14SourceLocationES5_PNS_4ExprES5_PPNS_7VarDeclEj\", \"clang::CXXCtorInitializer::Create(clang::ASTContext&, clang::FieldDecl*, clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::SourceLocation, clang::VarDecl**, unsigned int)\"},\n    {\"_ZNK5clang18CXXCtorInitializer15getBaseClassLocEv\", \"clang::CXXCtorInitializer::getBaseClassLoc() const\"},\n    {\"_ZNK5clang18CXXCtorInitializer12getBaseClassEv\", \"clang::CXXCtorInitializer::getBaseClass() const\"},\n    {\"_ZNK5clang18CXXCtorInitializer17getSourceLocationEv\", \"clang::CXXCtorInitializer::getSourceLocation() const\"},\n    {\"_ZNK5clang18CXXCtorInitializer14getSourceRangeEv\", \"clang::CXXCtorInitializer::getSourceRange() const\"},\n    {\"_ZN5clang18CXXConstructorDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::CXXConstructorDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang18CXXConstructorDecl6CreateERNS_10ASTContextEPNS_13CXXRecordDeclERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoEbbb\", \"clang::CXXConstructorDecl::Create(clang::ASTContext&, clang::CXXRecordDecl*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, bool, bool, bool)\"},\n    {\"_ZNK5clang18CXXConstructorDecl23isCopyOrMoveConstructorERj\", \"clang::CXXConstructorDecl::isCopyOrMoveConstructor(unsigned int&) const\"},\n    {\"_ZNK5clang18CXXConstructorDecl17isMoveConstructorERj\", \"clang::CXXConstructorDecl::isMoveConstructor(unsigned int&) const\"},\n    {\"_ZNK5clang18CXXConstructorDecl23isConvertingConstructorEb\", \"clang::CXXConstructorDecl::isConvertingConstructor(bool) const\"},\n    {\"_ZNK5clang18CXXConstructorDecl29isSpecializationCopyingObjectEv\", \"clang::CXXConstructorDecl::isSpecializationCopyingObject() const\"},\n    {\"_ZNK5clang18CXXConstructorDecl23getInheritedConstructorEv\", \"clang::CXXConstructorDecl::getInheritedConstructor() const\"},\n    {\"_ZN5clang18CXXConstructorDecl23setInheritedConstructorEPKS0_\", \"clang::CXXConstructorDecl::setInheritedConstructor(clang::CXXConstructorDecl const*)\"},\n    {\"_ZN5clang17CXXDestructorDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::CXXDestructorDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang17CXXDestructorDecl6CreateERNS_10ASTContextEPNS_13CXXRecordDeclERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoEbb\", \"clang::CXXDestructorDecl::Create(clang::ASTContext&, clang::CXXRecordDecl*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, bool, bool)\"},\n    {\"_ZN5clang17CXXConversionDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::CXXConversionDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang17CXXConversionDecl6CreateERNS_10ASTContextEPNS_13CXXRecordDeclERKNS_19DeclarationNameInfoENS_8QualTypeEPNS_14TypeSourceInfoEbb\", \"clang::CXXConversionDecl::Create(clang::ASTContext&, clang::CXXRecordDecl*, clang::DeclarationNameInfo const&, clang::QualType, clang::TypeSourceInfo*, bool, bool)\"},\n    {\"_ZN5clang15LinkageSpecDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationENS0_11LanguageIDsEb\", \"clang::LinkageSpecDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::LinkageSpecDecl::LanguageIDs, bool)\"},\n    {\"_ZN5clang18UsingDirectiveDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationES5_NS_11SourceRangeEPNS_19NestedNameSpecifierES5_PNS_9NamedDeclES4_\", \"clang::UsingDirectiveDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation, clang::SourceRange, clang::NestedNameSpecifier*, clang::SourceLocation, clang::NamedDecl*, clang::DeclContext*)\"},\n    {\"_ZN5clang18UsingDirectiveDecl21getNominatedNamespaceEv\", \"clang::UsingDirectiveDecl::getNominatedNamespace()\"},\n    {\"_ZN5clang18NamespaceAliasDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationES5_PNS_14IdentifierInfoENS_11SourceRangeEPNS_19NestedNameSpecifierES5_PNS_9NamedDeclE\", \"clang::NamespaceAliasDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceRange, clang::NestedNameSpecifier*, clang::SourceLocation, clang::NamedDecl*)\"},\n    {\"_ZNK5clang15UsingShadowDecl12getUsingDeclEv\", \"clang::UsingShadowDecl::getUsingDecl() const\"},\n    {\"_ZN5clang9UsingDecl13addShadowDeclEPNS_15UsingShadowDeclE\", \"clang::UsingDecl::addShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang9UsingDecl16removeShadowDeclEPNS_15UsingShadowDeclE\", \"clang::UsingDecl::removeShadowDecl(clang::UsingShadowDecl*)\"},\n    {\"_ZN5clang9UsingDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_11SourceRangeENS_14SourceLocationEPNS_19NestedNameSpecifierERKNS_19DeclarationNameInfoEb\", \"clang::UsingDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceRange, clang::SourceLocation, clang::NestedNameSpecifier*, clang::DeclarationNameInfo const&, bool)\"},\n    {\"_ZN5clang24UnresolvedUsingValueDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationENS_11SourceRangeEPNS_19NestedNameSpecifierERKNS_19DeclarationNameInfoE\", \"clang::UnresolvedUsingValueDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceRange, clang::NestedNameSpecifier*, clang::DeclarationNameInfo const&)\"},\n    {\"_ZN5clang27UnresolvedUsingTypenameDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationES5_NS_11SourceRangeEPNS_19NestedNameSpecifierES5_NS_15DeclarationNameE\", \"clang::UnresolvedUsingTypenameDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation, clang::SourceRange, clang::NestedNameSpecifier*, clang::SourceLocation, clang::DeclarationName)\"},\n    {\"_ZN5clang16StaticAssertDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_4ExprEPNS_13StringLiteralE\", \"clang::StaticAssertDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::Expr*, clang::StringLiteral*)\"},\n    {\"_ZN5clanglsERKNS_17DiagnosticBuilderENS_15AccessSpecifierE\", \"clang::operator<<(clang::DiagnosticBuilder const&, clang::AccessSpecifier)\"},\n    {\"_Z17GetConversionTypeRN5clang10ASTContextEPNS_9NamedDeclE\", \"GetConversionType(clang::ASTContext&, clang::NamedDecl*)\"},\n    {\"_Z25CollectVisibleConversionsRN5clang10ASTContextEPNS_13CXXRecordDeclEbNS_15AccessSpecifierERKN4llvm11SmallPtrSetINS_7CanQualINS_4TypeEEELj8EEERNS_17UnresolvedSetImplESE_RNS6_IPNS_9NamedDeclELj8EEE\", \"CollectVisibleConversions(clang::ASTContext&, clang::CXXRecordDecl*, bool, clang::AccessSpecifier, llvm::SmallPtrSet<clang::CanQual<clang::Type>, 8u> const&, clang::UnresolvedSetImpl&, clang::UnresolvedSetImpl&, llvm::SmallPtrSet<clang::NamedDecl*, 8u>&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPN5clang13CXXMethodDeclENS2_10QualifiersEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<clang::CXXMethodDecl*, clang::Qualifiers>, false>::grow(unsigned long)\"},\n    {\"_ZN5clang16StaticAssertDeclD1Ev\", \"clang::StaticAssertDecl::~StaticAssertDecl()\"},\n    {\"_ZN5clang16StaticAssertDeclD0Ev\", \"clang::StaticAssertDecl::~StaticAssertDecl()\"},\n    {\"_ZN5clang27UnresolvedUsingTypenameDeclD1Ev\", \"clang::UnresolvedUsingTypenameDecl::~UnresolvedUsingTypenameDecl()\"},\n    {\"_ZN5clang27UnresolvedUsingTypenameDeclD0Ev\", \"clang::UnresolvedUsingTypenameDecl::~UnresolvedUsingTypenameDecl()\"},\n    {\"_ZNK5clang27UnresolvedUsingTypenameDecl14getSourceRangeEv\", \"clang::UnresolvedUsingTypenameDecl::getSourceRange() const\"},\n    {\"_ZN5clang24UnresolvedUsingValueDeclD1Ev\", \"clang::UnresolvedUsingValueDecl::~UnresolvedUsingValueDecl()\"},\n    {\"_ZN5clang24UnresolvedUsingValueDeclD0Ev\", \"clang::UnresolvedUsingValueDecl::~UnresolvedUsingValueDecl()\"},\n    {\"_ZNK5clang24UnresolvedUsingValueDecl14getSourceRangeEv\", \"clang::UnresolvedUsingValueDecl::getSourceRange() const\"},\n    {\"_ZN5clang9UsingDeclD1Ev\", \"clang::UsingDecl::~UsingDecl()\"},\n    {\"_ZN5clang9UsingDeclD0Ev\", \"clang::UsingDecl::~UsingDecl()\"},\n    {\"_ZNK5clang9UsingDecl14getSourceRangeEv\", \"clang::UsingDecl::getSourceRange() const\"},\n    {\"_ZN5clang18NamespaceAliasDeclD1Ev\", \"clang::NamespaceAliasDecl::~NamespaceAliasDecl()\"},\n    {\"_ZN5clang18NamespaceAliasDeclD0Ev\", \"clang::NamespaceAliasDecl::~NamespaceAliasDecl()\"},\n    {\"_ZNK5clang18NamespaceAliasDecl14getSourceRangeEv\", \"clang::NamespaceAliasDecl::getSourceRange() const\"},\n    {\"_ZN5clang18UsingDirectiveDeclD1Ev\", \"clang::UsingDirectiveDecl::~UsingDirectiveDecl()\"},\n    {\"_ZN5clang18UsingDirectiveDeclD0Ev\", \"clang::UsingDirectiveDecl::~UsingDirectiveDecl()\"},\n    {\"_ZNK5clang18UsingDirectiveDecl14getSourceRangeEv\", \"clang::UsingDirectiveDecl::getSourceRange() const\"},\n    {\"_ZN5clang15LinkageSpecDeclC2EPNS_11DeclContextENS_14SourceLocationENS0_11LanguageIDsEb\", \"clang::LinkageSpecDecl::LinkageSpecDecl(clang::DeclContext*, clang::SourceLocation, clang::LinkageSpecDecl::LanguageIDs, bool)\"},\n    {\"_ZN5clang15LinkageSpecDeclD1Ev\", \"clang::LinkageSpecDecl::~LinkageSpecDecl()\"},\n    {\"_ZN5clang15LinkageSpecDeclD0Ev\", \"clang::LinkageSpecDecl::~LinkageSpecDecl()\"},\n    {\"_ZN5clang17CXXConversionDeclD1Ev\", \"clang::CXXConversionDecl::~CXXConversionDecl()\"},\n    {\"_ZN5clang17CXXConversionDeclD0Ev\", \"clang::CXXConversionDecl::~CXXConversionDecl()\"},\n    {\"_ZN5clang13CXXMethodDecl16getCanonicalDeclEv\", \"clang::CXXMethodDecl::getCanonicalDecl()\"},\n    {\"_ZNK5clang13CXXMethodDecl16getCanonicalDeclEv\", \"clang::CXXMethodDecl::getCanonicalDecl() const\"},\n    {\"_ZN5clang13CXXMethodDeclD1Ev\", \"clang::CXXMethodDecl::~CXXMethodDecl()\"},\n    {\"_ZN5clang13CXXMethodDeclD0Ev\", \"clang::CXXMethodDecl::~CXXMethodDecl()\"},\n    {\"_ZN5clang17CXXDestructorDeclD1Ev\", \"clang::CXXDestructorDecl::~CXXDestructorDecl()\"},\n    {\"_ZN5clang17CXXDestructorDeclD0Ev\", \"clang::CXXDestructorDecl::~CXXDestructorDecl()\"},\n    {\"_ZN5clang18CXXConstructorDeclD1Ev\", \"clang::CXXConstructorDecl::~CXXConstructorDecl()\"},\n    {\"_ZN5clang18CXXConstructorDeclD0Ev\", \"clang::CXXConstructorDecl::~CXXConstructorDecl()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXMethodDeclENS1_17OverridingMethodsENS_12DenseMapInfoIS4_EENS6_IS5_EEED2Ev\", \"llvm::DenseMap<clang::CXXMethodDecl const*, clang::OverridingMethods, llvm::DenseMapInfo<clang::CXXMethodDecl const*>, llvm::DenseMapInfo<clang::OverridingMethods> >::~DenseMap()\"},\n    {\"_ZN5clang10FriendDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEN4llvm12PointerUnionIPNS_9NamedDeclEPNS_14TypeSourceInfoEEES5_\", \"clang::FriendDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, llvm::PointerUnion<clang::NamedDecl*, clang::TypeSourceInfo*>, clang::SourceLocation)\"},\n    {\"_ZN5clang10FriendDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::FriendDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang10FriendDeclD1Ev\", \"clang::FriendDecl::~FriendDecl()\"},\n    {\"_ZN5clang10FriendDeclD0Ev\", \"clang::FriendDecl::~FriendDecl()\"},\n    {\"_ZN5clang9DeclGroup6CreateERNS_10ASTContextEPPNS_4DeclEj\", \"clang::DeclGroup::Create(clang::ASTContext&, clang::Decl**, unsigned int)\"},\n    {\"_ZN5clang9DeclGroupC1EjPPNS_4DeclE\", \"clang::DeclGroup::DeclGroup(unsigned int, clang::Decl**)\"},\n    {\"_ZN5clang9DeclGroupC2EjPPNS_4DeclE\", \"clang::DeclGroup::DeclGroup(unsigned int, clang::Decl**)\"},\n    {\"_ZN5clang12ObjCListBase3setEPKPvjRNS_10ASTContextE\", \"clang::ObjCListBase::set(void* const*, unsigned int, clang::ASTContext&)\"},\n    {\"_ZN5clang16ObjCProtocolList3setEPKPNS_16ObjCProtocolDeclEjPKNS_14SourceLocationERNS_10ASTContextE\", \"clang::ObjCProtocolList::set(clang::ObjCProtocolDecl* const*, unsigned int, clang::SourceLocation const*, clang::ASTContext&)\"},\n    {\"_ZNK5clang17ObjCContainerDecl11getIvarDeclEPNS_14IdentifierInfoE\", \"clang::ObjCContainerDecl::getIvarDecl(clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang17ObjCContainerDecl9getMethodENS_8SelectorEb\", \"clang::ObjCContainerDecl::getMethod(clang::Selector, bool) const\"},\n    {\"_ZN5clang16ObjCPropertyDecl16findPropertyDeclEPKNS_11DeclContextEPNS_14IdentifierInfoE\", \"clang::ObjCPropertyDecl::findPropertyDecl(clang::DeclContext const*, clang::IdentifierInfo*)\"},\n    {\"_ZNK5clang17ObjCContainerDecl23FindPropertyDeclarationEPNS_14IdentifierInfoE\", \"clang::ObjCContainerDecl::FindPropertyDeclaration(clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl33FindPropertyVisibleInPrimaryClassEPNS_14IdentifierInfoE\", \"clang::ObjCInterfaceDecl::FindPropertyVisibleInPrimaryClass(clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl22LoadExternalDefinitionEv\", \"clang::ObjCInterfaceDecl::LoadExternalDefinition() const\"},\n    {\"_ZN5clang17ObjCInterfaceDecl31mergeClassExtensionProtocolListEPKPNS_16ObjCProtocolDeclEjRNS_10ASTContextE\", \"clang::ObjCInterfaceDecl::mergeClassExtensionProtocolList(clang::ObjCProtocolDecl* const*, unsigned int, clang::ASTContext&)\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl22getFirstClassExtensionEv\", \"clang::ObjCInterfaceDecl::getFirstClassExtension() const\"},\n    {\"_ZNK5clang16ObjCCategoryDecl21getNextClassExtensionEv\", \"clang::ObjCCategoryDecl::getNextClassExtension() const\"},\n    {\"_ZN5clang17ObjCInterfaceDecl22lookupInstanceVariableEPNS_14IdentifierInfoERPS0_\", \"clang::ObjCInterfaceDecl::lookupInstanceVariable(clang::IdentifierInfo*, clang::ObjCInterfaceDecl*&)\"},\n    {\"_ZN5clang17ObjCInterfaceDecl20lookupInheritedClassEPKNS_14IdentifierInfoE\", \"clang::ObjCInterfaceDecl::lookupInheritedClass(clang::IdentifierInfo const*)\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl12lookupMethodENS_8SelectorEb\", \"clang::ObjCInterfaceDecl::lookupMethod(clang::Selector, bool) const\"},\n    {\"_ZNK5clang16ObjCProtocolDecl12lookupMethodENS_8SelectorEb\", \"clang::ObjCProtocolDecl::lookupMethod(clang::Selector, bool) const\"},\n    {\"_ZN5clang17ObjCInterfaceDecl19lookupPrivateMethodERKNS_8SelectorEb\", \"clang::ObjCInterfaceDecl::lookupPrivateMethod(clang::Selector const&, bool)\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl17getImplementationEv\", \"clang::ObjCInterfaceDecl::getImplementation() const\"},\n    {\"_ZN5clang14ObjCMethodDecl6CreateERNS_10ASTContextENS_14SourceLocationES3_NS_8SelectorENS_8QualTypeEPNS_14TypeSourceInfoEPNS_11DeclContextEbbbbNS0_21ImplementationControlEj\", \"clang::ObjCMethodDecl::Create(clang::ASTContext&, clang::SourceLocation, clang::SourceLocation, clang::Selector, clang::QualType, clang::TypeSourceInfo*, clang::DeclContext*, bool, bool, bool, bool, clang::ObjCMethodDecl::ImplementationControl, unsigned int)\"},\n    {\"_ZN5clang14ObjCMethodDecl20getNextRedeclarationEv\", \"clang::ObjCMethodDecl::getNextRedeclaration()\"},\n    {\"_ZNK5clang20ObjCCategoryImplDecl15getCategoryDeclEv\", \"clang::ObjCCategoryImplDecl::getCategoryDecl() const\"},\n    {\"_ZN5clang14ObjCMethodDecl16getCanonicalDeclEv\", \"clang::ObjCMethodDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang14ObjCMethodDecl20createImplicitParamsERNS_10ASTContextEPKNS_17ObjCInterfaceDeclE\", \"clang::ObjCMethodDecl::createImplicitParams(clang::ASTContext&, clang::ObjCInterfaceDecl const*)\"},\n    {\"_ZN5clang14ObjCMethodDecl17getClassInterfaceEv\", \"clang::ObjCMethodDecl::getClassInterface()\"},\n    {\"_ZN5clang17ObjCInterfaceDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES5_bb\", \"clang::ObjCInterfaceDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang17ObjCInterfaceDeclC1EPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES3_bb\", \"clang::ObjCInterfaceDecl::ObjCInterfaceDecl(clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang17ObjCInterfaceDeclC2EPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES3_bb\", \"clang::ObjCInterfaceDecl::ObjCInterfaceDecl(clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang17ObjCInterfaceDecl22setExternallyCompletedEv\", \"clang::ObjCInterfaceDecl::setExternallyCompleted()\"},\n    {\"_ZN5clang17ObjCInterfaceDecl17setImplementationEPNS_22ObjCImplementationDeclE\", \"clang::ObjCInterfaceDecl::setImplementation(clang::ObjCImplementationDecl*)\"},\n    {\"_ZN5clang17ObjCInterfaceDecl23all_declared_ivar_beginEv\", \"clang::ObjCInterfaceDecl::all_declared_ivar_begin()\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl23FindCategoryDeclarationEPNS_14IdentifierInfoE\", \"clang::ObjCInterfaceDecl::FindCategoryDeclaration(clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl25getCategoryInstanceMethodENS_8SelectorE\", \"clang::ObjCInterfaceDecl::getCategoryInstanceMethod(clang::Selector) const\"},\n    {\"_ZNK5clang16ObjCCategoryDecl17getImplementationEv\", \"clang::ObjCCategoryDecl::getImplementation() const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl22getCategoryClassMethodENS_8SelectorE\", \"clang::ObjCInterfaceDecl::getCategoryClassMethod(clang::Selector) const\"},\n    {\"_ZN5clang17ObjCInterfaceDecl23ClassImplementsProtocolEPNS_16ObjCProtocolDeclEbb\", \"clang::ObjCInterfaceDecl::ClassImplementsProtocol(clang::ObjCProtocolDecl*, bool, bool)\"},\n    {\"_ZN5clang12ObjCIvarDecl6CreateERNS_10ASTContextEPNS_17ObjCContainerDeclENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoENS0_13AccessControlEPNS_4ExprEb\", \"clang::ObjCIvarDecl::Create(clang::ASTContext&, clang::ObjCContainerDecl*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::ObjCIvarDecl::AccessControl, clang::Expr*, bool)\"},\n    {\"_ZNK5clang12ObjCIvarDecl22getContainingInterfaceEv\", \"clang::ObjCIvarDecl::getContainingInterface() const\"},\n    {\"_ZN5clang19ObjCAtDefsFieldDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_4ExprE\", \"clang::ObjCAtDefsFieldDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::Expr*)\"},\n    {\"_ZN5clang16ObjCProtocolDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoE\", \"clang::ObjCProtocolDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang16ObjCProtocolDecl19lookupProtocolNamedEPNS_14IdentifierInfoE\", \"clang::ObjCProtocolDecl::lookupProtocolNamed(clang::IdentifierInfo*)\"},\n    {\"_ZN5clang13ObjCClassDeclC1EPNS_11DeclContextENS_14SourceLocationEPKPNS_17ObjCInterfaceDeclEPKS3_jRNS_10ASTContextE\", \"clang::ObjCClassDecl::ObjCClassDecl(clang::DeclContext*, clang::SourceLocation, clang::ObjCInterfaceDecl* const*, clang::SourceLocation const*, unsigned int, clang::ASTContext&)\"},\n    {\"_ZN5clang13ObjCClassDeclC2EPNS_11DeclContextENS_14SourceLocationEPKPNS_17ObjCInterfaceDeclEPKS3_jRNS_10ASTContextE\", \"clang::ObjCClassDecl::ObjCClassDecl(clang::DeclContext*, clang::SourceLocation, clang::ObjCInterfaceDecl* const*, clang::SourceLocation const*, unsigned int, clang::ASTContext&)\"},\n    {\"_ZN5clang13ObjCClassDecl12setClassListERNS_10ASTContextEPKPNS_17ObjCInterfaceDeclEPKNS_14SourceLocationEj\", \"clang::ObjCClassDecl::setClassList(clang::ASTContext&, clang::ObjCInterfaceDecl* const*, clang::SourceLocation const*, unsigned int)\"},\n    {\"_ZN5clang13ObjCClassDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPKPNS_17ObjCInterfaceDeclEPKS5_j\", \"clang::ObjCClassDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::ObjCInterfaceDecl* const*, clang::SourceLocation const*, unsigned int)\"},\n    {\"_ZNK5clang13ObjCClassDecl14getSourceRangeEv\", \"clang::ObjCClassDecl::getSourceRange() const\"},\n    {\"_ZN5clang23ObjCForwardProtocolDeclC1EPNS_11DeclContextENS_14SourceLocationEPKPNS_16ObjCProtocolDeclEjPKS3_RNS_10ASTContextE\", \"clang::ObjCForwardProtocolDecl::ObjCForwardProtocolDecl(clang::DeclContext*, clang::SourceLocation, clang::ObjCProtocolDecl* const*, unsigned int, clang::SourceLocation const*, clang::ASTContext&)\"},\n    {\"_ZN5clang23ObjCForwardProtocolDeclC2EPNS_11DeclContextENS_14SourceLocationEPKPNS_16ObjCProtocolDeclEjPKS3_RNS_10ASTContextE\", \"clang::ObjCForwardProtocolDecl::ObjCForwardProtocolDecl(clang::DeclContext*, clang::SourceLocation, clang::ObjCProtocolDecl* const*, unsigned int, clang::SourceLocation const*, clang::ASTContext&)\"},\n    {\"_ZN5clang23ObjCForwardProtocolDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPKPNS_16ObjCProtocolDeclEjPKS5_\", \"clang::ObjCForwardProtocolDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::ObjCProtocolDecl* const*, unsigned int, clang::SourceLocation const*)\"},\n    {\"_ZN5clang16ObjCCategoryDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationES5_S5_PNS_14IdentifierInfoE\", \"clang::ObjCCategoryDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang16ObjCCategoryDecl17setImplementationEPNS_20ObjCCategoryImplDeclE\", \"clang::ObjCCategoryDecl::setImplementation(clang::ObjCCategoryImplDecl*)\"},\n    {\"_ZN5clang20ObjCCategoryImplDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPNS_17ObjCInterfaceDeclE\", \"clang::ObjCCategoryImplDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang12ObjCImplDecl25addPropertyImplementationEPNS_20ObjCPropertyImplDeclE\", \"clang::ObjCImplDecl::addPropertyImplementation(clang::ObjCPropertyImplDecl*)\"},\n    {\"_ZN5clang12ObjCImplDecl17setClassInterfaceEPNS_17ObjCInterfaceDeclE\", \"clang::ObjCImplDecl::setClassInterface(clang::ObjCInterfaceDecl*)\"},\n    {\"_ZNK5clang12ObjCImplDecl24FindPropertyImplIvarDeclEPNS_14IdentifierInfoE\", \"clang::ObjCImplDecl::FindPropertyImplIvarDecl(clang::IdentifierInfo*) const\"},\n    {\"_ZNK5clang12ObjCImplDecl20FindPropertyImplDeclEPNS_14IdentifierInfoE\", \"clang::ObjCImplDecl::FindPropertyImplDecl(clang::IdentifierInfo*) const\"},\n    {\"_ZN5clanglsERN4llvm11raw_ostreamEPKNS_20ObjCCategoryImplDeclE\", \"clang::operator<<(llvm::raw_ostream&, clang::ObjCCategoryImplDecl const*)\"},\n    {\"_ZN5clang22ObjCImplementationDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_17ObjCInterfaceDeclES7_\", \"clang::ObjCImplementationDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::ObjCInterfaceDecl*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clanglsERN4llvm11raw_ostreamEPKNS_22ObjCImplementationDeclE\", \"clang::operator<<(llvm::raw_ostream&, clang::ObjCImplementationDecl const*)\"},\n    {\"_ZN5clang23ObjCCompatibleAliasDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEPNS_17ObjCInterfaceDeclE\", \"clang::ObjCCompatibleAliasDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::ObjCInterfaceDecl*)\"},\n    {\"_ZN5clang16ObjCPropertyDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoES5_PNS_14TypeSourceInfoENS0_15PropertyControlE\", \"clang::ObjCPropertyDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, clang::SourceLocation, clang::TypeSourceInfo*, clang::ObjCPropertyDecl::PropertyControl)\"},\n    {\"_ZN5clang20ObjCPropertyImplDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationES5_PNS_16ObjCPropertyDeclENS0_4KindEPNS_12ObjCIvarDeclES5_\", \"clang::ObjCPropertyImplDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::SourceLocation, clang::ObjCPropertyDecl*, clang::ObjCPropertyImplDecl::Kind, clang::ObjCIvarDecl*, clang::SourceLocation)\"},\n    {\"_ZNK5clang20ObjCPropertyImplDecl14getSourceRangeEv\", \"clang::ObjCPropertyImplDecl::getSourceRange() const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl29all_referenced_protocol_beginEv\", \"clang::ObjCInterfaceDecl::all_referenced_protocol_begin() const\"},\n    {\"_ZNK5clang17ObjCInterfaceDecl27all_referenced_protocol_endEv\", \"clang::ObjCInterfaceDecl::all_referenced_protocol_end() const\"},\n    {\"_ZN5clang17ObjCContainerDeclC2ENS_4Decl4KindEPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoE\", \"clang::ObjCContainerDecl::ObjCContainerDecl(clang::Decl::Kind, clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang14ObjCMethodDeclD1Ev\", \"clang::ObjCMethodDecl::~ObjCMethodDecl()\"},\n    {\"_ZN5clang14ObjCMethodDeclD0Ev\", \"clang::ObjCMethodDecl::~ObjCMethodDecl()\"},\n    {\"_ZNK5clang14ObjCMethodDecl14getSourceRangeEv\", \"clang::ObjCMethodDecl::getSourceRange() const\"},\n    {\"_ZNK5clang14ObjCMethodDecl7getBodyEv\", \"clang::ObjCMethodDecl::getBody() const\"},\n    {\"_ZN5clang20ObjCPropertyImplDeclD1Ev\", \"clang::ObjCPropertyImplDecl::~ObjCPropertyImplDecl()\"},\n    {\"_ZN5clang20ObjCPropertyImplDeclD0Ev\", \"clang::ObjCPropertyImplDecl::~ObjCPropertyImplDecl()\"},\n    {\"_ZN5clang13ObjCClassDeclD1Ev\", \"clang::ObjCClassDecl::~ObjCClassDecl()\"},\n    {\"_ZN5clang13ObjCClassDeclD0Ev\", \"clang::ObjCClassDecl::~ObjCClassDecl()\"},\n    {\"_ZN5clang23ObjCForwardProtocolDeclD1Ev\", \"clang::ObjCForwardProtocolDecl::~ObjCForwardProtocolDecl()\"},\n    {\"_ZN5clang23ObjCForwardProtocolDeclD0Ev\", \"clang::ObjCForwardProtocolDecl::~ObjCForwardProtocolDecl()\"},\n    {\"_ZN5clang17ObjCInterfaceDeclD1Ev\", \"clang::ObjCInterfaceDecl::~ObjCInterfaceDecl()\"},\n    {\"_ZN5clang17ObjCInterfaceDeclD0Ev\", \"clang::ObjCInterfaceDecl::~ObjCInterfaceDecl()\"},\n    {\"_ZNK5clang17ObjCContainerDecl14getSourceRangeEv\", \"clang::ObjCContainerDecl::getSourceRange() const\"},\n    {\"_ZN5clang17ObjCContainerDeclD1Ev\", \"clang::ObjCContainerDecl::~ObjCContainerDecl()\"},\n    {\"_ZN5clang17ObjCContainerDeclD0Ev\", \"clang::ObjCContainerDecl::~ObjCContainerDecl()\"},\n    {\"_ZN5clang16ObjCPropertyDeclD1Ev\", \"clang::ObjCPropertyDecl::~ObjCPropertyDecl()\"},\n    {\"_ZN5clang16ObjCPropertyDeclD0Ev\", \"clang::ObjCPropertyDecl::~ObjCPropertyDecl()\"},\n    {\"_ZNK5clang16ObjCPropertyDecl14getSourceRangeEv\", \"clang::ObjCPropertyDecl::getSourceRange() const\"},\n    {\"_ZN5clang23ObjCCompatibleAliasDeclD1Ev\", \"clang::ObjCCompatibleAliasDecl::~ObjCCompatibleAliasDecl()\"},\n    {\"_ZN5clang23ObjCCompatibleAliasDeclD0Ev\", \"clang::ObjCCompatibleAliasDecl::~ObjCCompatibleAliasDecl()\"},\n    {\"_ZN5clang22ObjCImplementationDeclD1Ev\", \"clang::ObjCImplementationDecl::~ObjCImplementationDecl()\"},\n    {\"_ZN5clang22ObjCImplementationDeclD0Ev\", \"clang::ObjCImplementationDecl::~ObjCImplementationDecl()\"},\n    {\"_ZN5clang12ObjCImplDeclD1Ev\", \"clang::ObjCImplDecl::~ObjCImplDecl()\"},\n    {\"_ZN5clang12ObjCImplDeclD0Ev\", \"clang::ObjCImplDecl::~ObjCImplDecl()\"},\n    {\"_ZN5clang20ObjCCategoryImplDeclD1Ev\", \"clang::ObjCCategoryImplDecl::~ObjCCategoryImplDecl()\"},\n    {\"_ZN5clang20ObjCCategoryImplDeclD0Ev\", \"clang::ObjCCategoryImplDecl::~ObjCCategoryImplDecl()\"},\n    {\"_ZN5clang16ObjCCategoryDeclD1Ev\", \"clang::ObjCCategoryDecl::~ObjCCategoryDecl()\"},\n    {\"_ZN5clang16ObjCCategoryDeclD0Ev\", \"clang::ObjCCategoryDecl::~ObjCCategoryDecl()\"},\n    {\"_ZNK5clang16ObjCCategoryDecl14getSourceRangeEv\", \"clang::ObjCCategoryDecl::getSourceRange() const\"},\n    {\"_ZN5clang16ObjCProtocolDeclD1Ev\", \"clang::ObjCProtocolDecl::~ObjCProtocolDecl()\"},\n    {\"_ZN5clang16ObjCProtocolDeclD0Ev\", \"clang::ObjCProtocolDecl::~ObjCProtocolDecl()\"},\n    {\"_ZN5clang19ObjCAtDefsFieldDeclD1Ev\", \"clang::ObjCAtDefsFieldDecl::~ObjCAtDefsFieldDecl()\"},\n    {\"_ZN5clang19ObjCAtDefsFieldDeclD0Ev\", \"clang::ObjCAtDefsFieldDecl::~ObjCAtDefsFieldDecl()\"},\n    {\"_ZN5clang12ObjCIvarDeclC2EPNS_17ObjCContainerDeclENS_14SourceLocationEPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoENS0_13AccessControlEPNS_4ExprEb\", \"clang::ObjCIvarDecl::ObjCIvarDecl(clang::ObjCContainerDecl*, clang::SourceLocation, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::ObjCIvarDecl::AccessControl, clang::Expr*, bool)\"},\n    {\"_ZN5clang12ObjCIvarDeclD1Ev\", \"clang::ObjCIvarDecl::~ObjCIvarDecl()\"},\n    {\"_ZN5clang12ObjCIvarDeclD0Ev\", \"clang::ObjCIvarDecl::~ObjCIvarDecl()\"},\n    {\"_ZN5clang14ObjCMethodDeclC2ENS_14SourceLocationES1_NS_8SelectorENS_8QualTypeEPNS_14TypeSourceInfoEPNS_11DeclContextEbbbbNS0_21ImplementationControlEj\", \"clang::ObjCMethodDecl::ObjCMethodDecl(clang::SourceLocation, clang::SourceLocation, clang::Selector, clang::QualType, clang::TypeSourceInfo*, clang::DeclContext*, bool, bool, bool, bool, clang::ObjCMethodDecl::ImplementationControl, unsigned int)\"},\n    {\"_ZNK5clang4Decl5printERN4llvm11raw_ostreamEj\", \"clang::Decl::print(llvm::raw_ostream&, unsigned int) const\"},\n    {\"_ZNK5clang4Decl5printERN4llvm11raw_ostreamERKNS_14PrintingPolicyEj\", \"clang::Decl::print(llvm::raw_ostream&, clang::PrintingPolicy const&, unsigned int) const\"},\n    {\"_ZN5clang11DeclVisitorIN12_GLOBAL__N_111DeclPrinterEvE5VisitEPNS_4DeclE\", \"clang::DeclVisitor<(anonymous namespace)::DeclPrinter, void>::Visit(clang::Decl*)\"},\n    {\"_ZN5clang4Decl10printGroupEPPS0_jRN4llvm11raw_ostreamERKNS_14PrintingPolicyEj\", \"clang::Decl::printGroup(clang::Decl**, unsigned int, llvm::raw_ostream&, clang::PrintingPolicy const&, unsigned int)\"},\n    {\"_ZNK5clang11DeclContext15dumpDeclContextEv\", \"clang::DeclContext::dumpDeclContext() const\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter16VisitDeclContextEPN5clang11DeclContextEb\", \"(anonymous namespace)::DeclPrinter::VisitDeclContext(clang::DeclContext*, bool)\"},\n    {\"_ZNK5clang4Decl4dumpEv\", \"clang::Decl::dump() const\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter18VisitCXXRecordDeclEPN5clang13CXXRecordDeclE\", \"(anonymous namespace)::DeclPrinter::VisitCXXRecordDecl(clang::CXXRecordDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter14VisitFieldDeclEPN5clang9FieldDeclE\", \"(anonymous namespace)::DeclPrinter::VisitFieldDecl(clang::FieldDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter17VisitFunctionDeclEPN5clang12FunctionDeclE\", \"(anonymous namespace)::DeclPrinter::VisitFunctionDecl(clang::FunctionDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter12VisitVarDeclEPN5clang7VarDeclE\", \"(anonymous namespace)::DeclPrinter::VisitVarDecl(clang::VarDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter17VisitTemplateDeclEPN5clang12TemplateDeclE\", \"(anonymous namespace)::DeclPrinter::VisitTemplateDecl(clang::TemplateDecl*)\"},\n    {\"_ZN12_GLOBAL__N_111DeclPrinter16ProcessDeclGroupERN4llvm15SmallVectorImplIPN5clang4DeclEEE\", \"(anonymous namespace)::DeclPrinter::ProcessDeclGroup(llvm::SmallVectorImpl<clang::Decl*>&)\"},\n    {\"_ZN5clang21TemplateParameterListC1ENS_14SourceLocationES1_PPNS_9NamedDeclEjS1_\", \"clang::TemplateParameterList::TemplateParameterList(clang::SourceLocation, clang::SourceLocation, clang::NamedDecl**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang21TemplateParameterListC2ENS_14SourceLocationES1_PPNS_9NamedDeclEjS1_\", \"clang::TemplateParameterList::TemplateParameterList(clang::SourceLocation, clang::SourceLocation, clang::NamedDecl**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang21TemplateParameterList6CreateERKNS_10ASTContextENS_14SourceLocationES4_PPNS_9NamedDeclEjS4_\", \"clang::TemplateParameterList::Create(clang::ASTContext const&, clang::SourceLocation, clang::SourceLocation, clang::NamedDecl**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZNK5clang21TemplateParameterList23getMinRequiredArgumentsEv\", \"clang::TemplateParameterList::getMinRequiredArguments() const\"},\n    {\"_ZNK5clang21TemplateParameterList8getDepthEv\", \"clang::TemplateParameterList::getDepth() const\"},\n    {\"_ZNK5clang20TemplateTypeParmDecl8getDepthEv\", \"clang::TemplateTypeParmDecl::getDepth() const\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl12getCommonPtrEv\", \"clang::RedeclarableTemplateDecl::getCommonPtr()\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl20getCanonicalDeclImplEv\", \"clang::RedeclarableTemplateDecl::getCanonicalDeclImpl()\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl26setPreviousDeclarationImplEPS0_\", \"clang::RedeclarableTemplateDecl::setPreviousDeclarationImpl(clang::RedeclarableTemplateDecl*)\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl20getNextRedeclarationEv\", \"clang::RedeclarableTemplateDecl::getNextRedeclaration()\"},\n    {\"_ZN5clang20FunctionTemplateDecl16DeallocateCommonEPv\", \"clang::FunctionTemplateDecl::DeallocateCommon(void*)\"},\n    {\"_ZN5clang20FunctionTemplateDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationENS_15DeclarationNameEPNS_21TemplateParameterListEPNS_9NamedDeclE\", \"clang::FunctionTemplateDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::DeclarationName, clang::TemplateParameterList*, clang::NamedDecl*)\"},\n    {\"_ZN5clang20FunctionTemplateDecl9newCommonERNS_10ASTContextE\", \"clang::FunctionTemplateDecl::newCommon(clang::ASTContext&)\"},\n    {\"_ZN5clang20FunctionTemplateDecl18findSpecializationEPKNS_16TemplateArgumentEjRPv\", \"clang::FunctionTemplateDecl::findSpecialization(clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN5clang17ClassTemplateDecl16DeallocateCommonEPv\", \"clang::ClassTemplateDecl::DeallocateCommon(void*)\"},\n    {\"_ZN5clang17ClassTemplateDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationENS_15DeclarationNameEPNS_21TemplateParameterListEPNS_9NamedDeclEPS0_\", \"clang::ClassTemplateDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, clang::DeclarationName, clang::TemplateParameterList*, clang::NamedDecl*, clang::ClassTemplateDecl*)\"},\n    {\"_ZN5clang17ClassTemplateDecl23LoadLazySpecializationsEv\", \"clang::ClassTemplateDecl::LoadLazySpecializations()\"},\n    {\"_ZN5clang17ClassTemplateDecl18getSpecializationsEv\", \"clang::ClassTemplateDecl::getSpecializations()\"},\n    {\"_ZN5clang17ClassTemplateDecl25getPartialSpecializationsEv\", \"clang::ClassTemplateDecl::getPartialSpecializations()\"},\n    {\"_ZN5clang17ClassTemplateDecl9newCommonERNS_10ASTContextE\", \"clang::ClassTemplateDecl::newCommon(clang::ASTContext&)\"},\n    {\"_ZN5clang17ClassTemplateDecl18findSpecializationEPKNS_16TemplateArgumentEjRPv\", \"clang::ClassTemplateDecl::findSpecialization(clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN5clang17ClassTemplateDecl17AddSpecializationEPNS_31ClassTemplateSpecializationDeclEPv\", \"clang::ClassTemplateDecl::AddSpecialization(clang::ClassTemplateSpecializationDecl*, void*)\"},\n    {\"_ZN5clang17ClassTemplateDecl25findPartialSpecializationEPKNS_16TemplateArgumentEjRPv\", \"clang::ClassTemplateDecl::findPartialSpecialization(clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN5clang17ClassTemplateDecl24AddPartialSpecializationEPNS_38ClassTemplatePartialSpecializationDeclEPv\", \"clang::ClassTemplateDecl::AddPartialSpecialization(clang::ClassTemplatePartialSpecializationDecl*, void*)\"},\n    {\"_ZN5clang17ClassTemplateDecl25getPartialSpecializationsERN4llvm15SmallVectorImplIPNS_38ClassTemplatePartialSpecializationDeclEEE\", \"clang::ClassTemplateDecl::getPartialSpecializations(llvm::SmallVectorImpl<clang::ClassTemplatePartialSpecializationDecl*>&)\"},\n    {\"_ZN5clang17ClassTemplateDecl25findPartialSpecializationENS_8QualTypeE\", \"clang::ClassTemplateDecl::findPartialSpecialization(clang::QualType)\"},\n    {\"_ZN5clang17ClassTemplateDecl37findPartialSpecInstantiatedFromMemberEPNS_38ClassTemplatePartialSpecializationDeclE\", \"clang::ClassTemplateDecl::findPartialSpecInstantiatedFromMember(clang::ClassTemplatePartialSpecializationDecl*)\"},\n    {\"_ZN5clang17ClassTemplateDecl34getInjectedClassNameSpecializationEv\", \"clang::ClassTemplateDecl::getInjectedClassNameSpecialization()\"},\n    {\"_ZN5clang20TemplateTypeParmDecl6CreateERKNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEjjPNS_14IdentifierInfoEbb\", \"clang::TemplateTypeParmDecl::Create(clang::ASTContext const&, clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, clang::IdentifierInfo*, bool, bool)\"},\n    {\"_ZN5clang20TemplateTypeParmDecl6CreateERKNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::TemplateTypeParmDecl::Create(clang::ASTContext const&, clang::Decl::EmptyShell)\"},\n    {\"_ZNK5clang20TemplateTypeParmDecl21getDefaultArgumentLocEv\", \"clang::TemplateTypeParmDecl::getDefaultArgumentLoc() const\"},\n    {\"_ZNK5clang20TemplateTypeParmDecl8getIndexEv\", \"clang::TemplateTypeParmDecl::getIndex() const\"},\n    {\"_ZN5clang23NonTypeTemplateParmDeclC1EPNS_11DeclContextENS_14SourceLocationEjjPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoEPKS6_jPS8_\", \"clang::NonTypeTemplateParmDecl::NonTypeTemplateParmDecl(clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::QualType const*, unsigned int, clang::TypeSourceInfo**)\"},\n    {\"_ZN5clang23NonTypeTemplateParmDeclC2EPNS_11DeclContextENS_14SourceLocationEjjPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoEPKS6_jPS8_\", \"clang::NonTypeTemplateParmDecl::NonTypeTemplateParmDecl(clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::QualType const*, unsigned int, clang::TypeSourceInfo**)\"},\n    {\"_ZN5clang23NonTypeTemplateParmDecl6CreateERKNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEjjPNS_14IdentifierInfoENS_8QualTypeEbPNS_14TypeSourceInfoE\", \"clang::NonTypeTemplateParmDecl::Create(clang::ASTContext const&, clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, clang::IdentifierInfo*, clang::QualType, bool, clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang23NonTypeTemplateParmDecl6CreateERKNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEjjPNS_14IdentifierInfoENS_8QualTypeEPNS_14TypeSourceInfoEPKS9_jPSB_\", \"clang::NonTypeTemplateParmDecl::Create(clang::ASTContext const&, clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, clang::IdentifierInfo*, clang::QualType, clang::TypeSourceInfo*, clang::QualType const*, unsigned int, clang::TypeSourceInfo**)\"},\n    {\"_ZNK5clang23NonTypeTemplateParmDecl16getInnerLocStartEv\", \"clang::NonTypeTemplateParmDecl::getInnerLocStart() const\"},\n    {\"_ZNK5clang23NonTypeTemplateParmDecl14getSourceRangeEv\", \"clang::NonTypeTemplateParmDecl::getSourceRange() const\"},\n    {\"_ZNK5clang23NonTypeTemplateParmDecl21getDefaultArgumentLocEv\", \"clang::NonTypeTemplateParmDecl::getDefaultArgumentLoc() const\"},\n    {\"_ZN5clang24TemplateTemplateParmDecl6CreateERKNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEjjbPNS_14IdentifierInfoEPNS_21TemplateParameterListE\", \"clang::TemplateTemplateParmDecl::Create(clang::ASTContext const&, clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, bool, clang::IdentifierInfo*, clang::TemplateParameterList*)\"},\n    {\"_ZN5clang20TemplateArgumentList10CreateCopyERNS_10ASTContextEPKNS_16TemplateArgumentEj\", \"clang::TemplateArgumentList::CreateCopy(clang::ASTContext&, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclC1ERNS_10ASTContextENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_17ClassTemplateDeclEPKNS_16TemplateArgumentEjPS0_\", \"clang::ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(clang::ASTContext&, clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::ClassTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclC2ERNS_10ASTContextENS_4Decl4KindENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_17ClassTemplateDeclEPKNS_16TemplateArgumentEjPS0_\", \"clang::ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(clang::ASTContext&, clang::Decl::Kind, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::ClassTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclC1ENS_4Decl4KindE\", \"clang::ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(clang::Decl::Kind)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclC2ENS_4Decl4KindE\", \"clang::ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(clang::Decl::Kind)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDecl6CreateERNS_10ASTContextENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_17ClassTemplateDeclEPKNS_16TemplateArgumentEjPS0_\", \"clang::ClassTemplateSpecializationDecl::Create(clang::ASTContext&, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::ClassTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::ClassTemplateSpecializationDecl*)\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::ClassTemplateSpecializationDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZNK5clang31ClassTemplateSpecializationDecl20getNameForDiagnosticERSsRKNS_14PrintingPolicyEb\", \"clang::ClassTemplateSpecializationDecl::getNameForDiagnostic(std::string&, clang::PrintingPolicy const&, bool) const\"},\n    {\"_ZNK5clang31ClassTemplateSpecializationDecl22getSpecializedTemplateEv\", \"clang::ClassTemplateSpecializationDecl::getSpecializedTemplate() const\"},\n    {\"_ZN5clang38ClassTemplatePartialSpecializationDecl6CreateERNS_10ASTContextENS_11TagTypeKindEPNS_11DeclContextENS_14SourceLocationEPNS_21TemplateParameterListEPNS_17ClassTemplateDeclEPKNS_16TemplateArgumentEjRKNS_24TemplateArgumentListInfoENS_8QualTypeEPS0_j\", \"clang::ClassTemplatePartialSpecializationDecl::Create(clang::ASTContext&, clang::TagTypeKind, clang::DeclContext*, clang::SourceLocation, clang::TemplateParameterList*, clang::ClassTemplateDecl*, clang::TemplateArgument const*, unsigned int, clang::TemplateArgumentListInfo const&, clang::QualType, clang::ClassTemplatePartialSpecializationDecl*, unsigned int)\"},\n    {\"_ZN5clang38ClassTemplatePartialSpecializationDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::ClassTemplatePartialSpecializationDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang18FriendTemplateDecl6CreateERNS_10ASTContextEPNS_11DeclContextENS_14SourceLocationEjPPNS_21TemplateParameterListEN4llvm12PointerUnionIPNS_9NamedDeclEPNS_14TypeSourceInfoEEES5_\", \"clang::FriendTemplateDecl::Create(clang::ASTContext&, clang::DeclContext*, clang::SourceLocation, unsigned int, clang::TemplateParameterList**, llvm::PointerUnion<clang::NamedDecl*, clang::TypeSourceInfo*>, clang::SourceLocation)\"},\n    {\"_ZN5clang18FriendTemplateDecl6CreateERNS_10ASTContextENS_4Decl10EmptyShellE\", \"clang::FriendTemplateDecl::Create(clang::ASTContext&, clang::Decl::EmptyShell)\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl22findSpecializationImplINS_34FunctionTemplateSpecializationInfoEEEPNS0_15SpecEntryTraitsIT_E8DeclTypeERN4llvm10FoldingSetIS4_EEPKNS_16TemplateArgumentEjRPv\", \"clang::RedeclarableTemplateDecl::SpecEntryTraits<clang::FunctionTemplateSpecializationInfo>::DeclType* clang::RedeclarableTemplateDecl::findSpecializationImpl<clang::FunctionTemplateSpecializationInfo>(llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>&, clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl22findSpecializationImplINS_31ClassTemplateSpecializationDeclEEEPNS0_15SpecEntryTraitsIT_E8DeclTypeERN4llvm10FoldingSetIS4_EEPKNS_16TemplateArgumentEjRPv\", \"clang::RedeclarableTemplateDecl::SpecEntryTraits<clang::ClassTemplateSpecializationDecl>::DeclType* clang::RedeclarableTemplateDecl::findSpecializationImpl<clang::ClassTemplateSpecializationDecl>(llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>&, clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl22findSpecializationImplINS_38ClassTemplatePartialSpecializationDeclEEEPNS0_15SpecEntryTraitsIT_E8DeclTypeERN4llvm10FoldingSetIS4_EEPKNS_16TemplateArgumentEjRPv\", \"clang::RedeclarableTemplateDecl::SpecEntryTraits<clang::ClassTemplatePartialSpecializationDecl>::DeclType* clang::RedeclarableTemplateDecl::findSpecializationImpl<clang::ClassTemplatePartialSpecializationDecl>(llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>&, clang::TemplateArgument const*, unsigned int, void*&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPN5clang38ClassTemplatePartialSpecializationDeclEE6resizeEj\", \"llvm::SmallVectorImpl<clang::ClassTemplatePartialSpecializationDecl*>::resize(unsigned int)\"},\n    {\"_ZN5clang24RedeclarableTemplateDeclD1Ev\", \"clang::RedeclarableTemplateDecl::~RedeclarableTemplateDecl()\"},\n    {\"_ZN5clang24RedeclarableTemplateDeclD0Ev\", \"clang::RedeclarableTemplateDecl::~RedeclarableTemplateDecl()\"},\n    {\"_ZNK5clang12TemplateDecl14getSourceRangeEv\", \"clang::TemplateDecl::getSourceRange() const\"},\n    {\"_ZN5clang24RedeclarableTemplateDecl16getCanonicalDeclEv\", \"clang::RedeclarableTemplateDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang20FunctionTemplateDeclD1Ev\", \"clang::FunctionTemplateDecl::~FunctionTemplateDecl()\"},\n    {\"_ZN5clang20FunctionTemplateDeclD0Ev\", \"clang::FunctionTemplateDecl::~FunctionTemplateDecl()\"},\n    {\"_ZN5clang20FunctionTemplateDecl16getCanonicalDeclEv\", \"clang::FunctionTemplateDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang23NonTypeTemplateParmDeclD1Ev\", \"clang::NonTypeTemplateParmDecl::~NonTypeTemplateParmDecl()\"},\n    {\"_ZN5clang23NonTypeTemplateParmDeclD0Ev\", \"clang::NonTypeTemplateParmDecl::~NonTypeTemplateParmDecl()\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclD1Ev\", \"clang::ClassTemplateSpecializationDecl::~ClassTemplateSpecializationDecl()\"},\n    {\"_ZN5clang31ClassTemplateSpecializationDeclD0Ev\", \"clang::ClassTemplateSpecializationDecl::~ClassTemplateSpecializationDecl()\"},\n    {\"_ZN5clang13CXXRecordDecl16getCanonicalDeclEv\", \"clang::CXXRecordDecl::getCanonicalDecl()\"},\n    {\"_ZNK5clang31ClassTemplateSpecializationDecl16getInnerLocStartEv\", \"clang::ClassTemplateSpecializationDecl::getInnerLocStart() const\"},\n    {\"_ZNK5clang13CXXRecordDecl16getCanonicalDeclEv\", \"clang::CXXRecordDecl::getCanonicalDecl() const\"},\n    {\"_ZN5clang17ClassTemplateDeclD1Ev\", \"clang::ClassTemplateDecl::~ClassTemplateDecl()\"},\n    {\"_ZN5clang17ClassTemplateDeclD0Ev\", \"clang::ClassTemplateDecl::~ClassTemplateDecl()\"},\n    {\"_ZN5clang17ClassTemplateDecl16getCanonicalDeclEv\", \"clang::ClassTemplateDecl::getCanonicalDecl()\"},\n    {\"_ZN5clang12TemplateDeclD1Ev\", \"clang::TemplateDecl::~TemplateDecl()\"},\n    {\"_ZN5clang12TemplateDeclD0Ev\", \"clang::TemplateDecl::~TemplateDecl()\"},\n    {\"_ZN5clang13CXXRecordDeclD1Ev\", \"clang::CXXRecordDecl::~CXXRecordDecl()\"},\n    {\"_ZN5clang13CXXRecordDeclD0Ev\", \"clang::CXXRecordDecl::~CXXRecordDecl()\"},\n    {\"_ZN5clang18FriendTemplateDeclD1Ev\", \"clang::FriendTemplateDecl::~FriendTemplateDecl()\"},\n    {\"_ZN5clang18FriendTemplateDeclD0Ev\", \"clang::FriendTemplateDecl::~FriendTemplateDecl()\"},\n    {\"_ZN5clang38ClassTemplatePartialSpecializationDeclD1Ev\", \"clang::ClassTemplatePartialSpecializationDecl::~ClassTemplatePartialSpecializationDecl()\"},\n    {\"_ZN5clang38ClassTemplatePartialSpecializationDeclD0Ev\", \"clang::ClassTemplatePartialSpecializationDecl::~ClassTemplatePartialSpecializationDecl()\"},\n    {\"_ZN5clang24TemplateTemplateParmDeclC2EPNS_11DeclContextENS_14SourceLocationEjjbPNS_14IdentifierInfoEPNS_21TemplateParameterListE\", \"clang::TemplateTemplateParmDecl::TemplateTemplateParmDecl(clang::DeclContext*, clang::SourceLocation, unsigned int, unsigned int, bool, clang::IdentifierInfo*, clang::TemplateParameterList*)\"},\n    {\"_ZN5clang24TemplateTemplateParmDeclD1Ev\", \"clang::TemplateTemplateParmDecl::~TemplateTemplateParmDecl()\"},\n    {\"_ZN5clang24TemplateTemplateParmDeclD0Ev\", \"clang::TemplateTemplateParmDecl::~TemplateTemplateParmDecl()\"},\n    {\"_ZNK5clang24TemplateTemplateParmDecl14getSourceRangeEv\", \"clang::TemplateTemplateParmDecl::getSourceRange() const\"},\n    {\"_ZN5clang20TemplateTypeParmDeclC2EPNS_11DeclContextENS_14SourceLocationEPNS_14IdentifierInfoEbNS_8QualTypeEb\", \"clang::TemplateTypeParmDecl::TemplateTypeParmDecl(clang::DeclContext*, clang::SourceLocation, clang::IdentifierInfo*, bool, clang::QualType, bool)\"},\n    {\"_ZN5clang20TemplateTypeParmDeclD1Ev\", \"clang::TemplateTypeParmDecl::~TemplateTypeParmDecl()\"},\n    {\"_ZN5clang20TemplateTypeParmDeclD0Ev\", \"clang::TemplateTypeParmDecl::~TemplateTypeParmDecl()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEED1Ev\", \"llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEED0Ev\", \"llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEED1Ev\", \"llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEED0Ev\", \"llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEED1Ev\", \"llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEED0Ev\", \"llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN5clang15DeclarationName7compareES0_S0_\", \"clang::DeclarationName::compare(clang::DeclarationName, clang::DeclarationName)\"},\n    {\"_ZNK5clang15DeclarationName11getNameKindEv\", \"clang::DeclarationName::getNameKind() const\"},\n    {\"_ZNK5clang15DeclarationName15getObjCSelectorEv\", \"clang::DeclarationName::getObjCSelector() const\"},\n    {\"_ZNK5clang15DeclarationName14getCXXNameTypeEv\", \"clang::DeclarationName::getCXXNameType() const\"},\n    {\"_ZNK5clang15DeclarationName24getCXXOverloadedOperatorEv\", \"clang::DeclarationName::getCXXOverloadedOperator() const\"},\n    {\"_ZNK5clang15DeclarationName23getCXXLiteralIdentifierEv\", \"clang::DeclarationName::getCXXLiteralIdentifier() const\"},\n    {\"_ZN5clang15DeclarationNameC1ENS_8SelectorE\", \"clang::DeclarationName::DeclarationName(clang::Selector)\"},\n    {\"_ZN5clang15DeclarationNameC2ENS_8SelectorE\", \"clang::DeclarationName::DeclarationName(clang::Selector)\"},\n    {\"_ZNK5clang15DeclarationName15isDependentNameEv\", \"clang::DeclarationName::isDependentName() const\"},\n    {\"_ZNK5clang15DeclarationName11getAsStringEv\", \"clang::DeclarationName::getAsString() const\"},\n    {\"_ZNK5clang15DeclarationName9printNameERN4llvm11raw_ostreamE\", \"clang::DeclarationName::printName(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang15DeclarationName20getFETokenInfoAsVoidEv\", \"clang::DeclarationName::getFETokenInfoAsVoid() const\"},\n    {\"_ZN5clang15DeclarationName14setFETokenInfoEPv\", \"clang::DeclarationName::setFETokenInfo(void*)\"},\n    {\"_ZN5clang15DeclarationName21getUsingDirectiveNameEv\", \"clang::DeclarationName::getUsingDirectiveName()\"},\n    {\"_ZNK5clang15DeclarationName4dumpEv\", \"clang::DeclarationName::dump() const\"},\n    {\"_ZN5clang20DeclarationNameTableC1ERKNS_10ASTContextE\", \"clang::DeclarationNameTable::DeclarationNameTable(clang::ASTContext const&)\"},\n    {\"_ZN5clang20DeclarationNameTableC2ERKNS_10ASTContextE\", \"clang::DeclarationNameTable::DeclarationNameTable(clang::ASTContext const&)\"},\n    {\"_ZN5clang20DeclarationNameTableD1Ev\", \"clang::DeclarationNameTable::~DeclarationNameTable()\"},\n    {\"_ZN5clang20DeclarationNameTableD2Ev\", \"clang::DeclarationNameTable::~DeclarationNameTable()\"},\n    {\"_ZN5clang20DeclarationNameTable17getCXXSpecialNameENS_15DeclarationName8NameKindENS_7CanQualINS_4TypeEEE\", \"clang::DeclarationNameTable::getCXXSpecialName(clang::DeclarationName::NameKind, clang::CanQual<clang::Type>)\"},\n    {\"_ZN5clang20DeclarationNameTable18getCXXOperatorNameENS_22OverloadedOperatorKindE\", \"clang::DeclarationNameTable::getCXXOperatorName(clang::OverloadedOperatorKind)\"},\n    {\"_ZN5clang20DeclarationNameTable25getCXXLiteralOperatorNameEPNS_14IdentifierInfoE\", \"clang::DeclarationNameTable::getCXXLiteralOperatorName(clang::IdentifierInfo*)\"},\n    {\"_ZN4llvm12DenseMapInfoIN5clang15DeclarationNameEE12getHashValueES2_\", \"llvm::DenseMapInfo<clang::DeclarationName>::getHashValue(clang::DeclarationName)\"},\n    {\"_ZN5clang18DeclarationNameLocC1ENS_15DeclarationNameE\", \"clang::DeclarationNameLoc::DeclarationNameLoc(clang::DeclarationName)\"},\n    {\"_ZN5clang18DeclarationNameLocC2ENS_15DeclarationNameE\", \"clang::DeclarationNameLoc::DeclarationNameLoc(clang::DeclarationName)\"},\n    {\"_ZNK5clang19DeclarationNameInfo31containsUnexpandedParameterPackEv\", \"clang::DeclarationNameInfo::containsUnexpandedParameterPack() const\"},\n    {\"_ZNK5clang19DeclarationNameInfo11getAsStringEv\", \"clang::DeclarationNameInfo::getAsString() const\"},\n    {\"_ZNK5clang19DeclarationNameInfo9printNameERN4llvm11raw_ostreamE\", \"clang::DeclarationNameInfo::printName(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang19DeclarationNameInfo9getEndLocEv\", \"clang::DeclarationNameInfo::getEndLoc() const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEED1Ev\", \"llvm::FoldingSet<clang::CXXLiteralOperatorIdName>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEED0Ev\", \"llvm::FoldingSet<clang::CXXLiteralOperatorIdName>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CXXLiteralOperatorIdName>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::CXXLiteralOperatorIdName>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CXXLiteralOperatorIdName>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14CXXSpecialNameEED1Ev\", \"llvm::FoldingSet<clang::CXXSpecialName>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang14CXXSpecialNameEED0Ev\", \"llvm::FoldingSet<clang::CXXSpecialName>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14CXXSpecialNameEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CXXSpecialName>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14CXXSpecialNameEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::CXXSpecialName>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang14CXXSpecialNameEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::CXXSpecialName>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang4Decl7dumpXMLEv\", \"clang::Decl::dumpXML() const\"},\n    {\"_ZNK5clang4Decl7dumpXMLERN4llvm11raw_ostreamE\", \"clang::Decl::dumpXML(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang4Expr25isKnownToHaveBooleanValueEv\", \"clang::Expr::isKnownToHaveBooleanValue() const\"},\n    {\"_ZNK5clang4Expr10getExprLocEv\", \"clang::Expr::getExprLoc() const\"},\n    {\"_ZN5clang28ExplicitTemplateArgumentList14initializeFromERKNS_24TemplateArgumentListInfoE\", \"clang::ExplicitTemplateArgumentList::initializeFrom(clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang28ExplicitTemplateArgumentList14initializeFromERKNS_24TemplateArgumentListInfoERbS4_\", \"clang::ExplicitTemplateArgumentList::initializeFrom(clang::TemplateArgumentListInfo const&, bool&, bool&)\"},\n    {\"_ZNK5clang28ExplicitTemplateArgumentList8copyIntoERNS_24TemplateArgumentListInfoE\", \"clang::ExplicitTemplateArgumentList::copyInto(clang::TemplateArgumentListInfo&) const\"},\n    {\"_ZN5clang28ExplicitTemplateArgumentList7sizeForEj\", \"clang::ExplicitTemplateArgumentList::sizeFor(unsigned int)\"},\n    {\"_ZN5clang28ExplicitTemplateArgumentList7sizeForERKNS_24TemplateArgumentListInfoE\", \"clang::ExplicitTemplateArgumentList::sizeFor(clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang11DeclRefExpr17computeDependenceEv\", \"clang::DeclRefExpr::computeDependence()\"},\n    {\"_Z24computeDeclRefDependencePN5clang9NamedDeclENS_8QualTypeERbS3_\", \"computeDeclRefDependence(clang::NamedDecl*, clang::QualType, bool&, bool&)\"},\n    {\"_ZN5clang11DeclRefExprC1EPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclENS_14SourceLocationEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_13ExprValueKindE\", \"clang::DeclRefExpr::DeclRefExpr(clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*, clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang11DeclRefExprC2EPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclENS_14SourceLocationEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_13ExprValueKindE\", \"clang::DeclRefExpr::DeclRefExpr(clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*, clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang11DeclRefExprC1EPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_13ExprValueKindE\", \"clang::DeclRefExpr::DeclRefExpr(clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang11DeclRefExprC2EPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_13ExprValueKindE\", \"clang::DeclRefExpr::DeclRefExpr(clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::QualType, clang::ExprValueKind)\"},\n    {\"_ZN5clang11DeclRefExpr6CreateERNS_10ASTContextEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclENS_14SourceLocationENS_8QualTypeENS_13ExprValueKindEPKNS_24TemplateArgumentListInfoE\", \"clang::DeclRefExpr::Create(clang::ASTContext&, clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::SourceLocation, clang::QualType, clang::ExprValueKind, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang11DeclRefExpr6CreateERNS_10ASTContextEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclERKNS_19DeclarationNameInfoENS_8QualTypeENS_13ExprValueKindEPKNS_24TemplateArgumentListInfoE\", \"clang::DeclRefExpr::Create(clang::ASTContext&, clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::DeclarationNameInfo const&, clang::QualType, clang::ExprValueKind, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang11DeclRefExpr11CreateEmptyERNS_10ASTContextEbbj\", \"clang::DeclRefExpr::CreateEmpty(clang::ASTContext&, bool, bool, unsigned int)\"},\n    {\"_ZNK5clang11DeclRefExpr14getSourceRangeEv\", \"clang::DeclRefExpr::getSourceRange() const\"},\n    {\"_ZN5clang14PredefinedExpr11ComputeNameENS0_9IdentTypeEPKNS_4DeclE\", \"clang::PredefinedExpr::ComputeName(clang::PredefinedExpr::IdentType, clang::Decl const*)\"},\n    {\"_ZN5clang16APNumericStorage11setIntValueERNS_10ASTContextERKN4llvm5APIntE\", \"clang::APNumericStorage::setIntValue(clang::ASTContext&, llvm::APInt const&)\"},\n    {\"_ZN5clang14IntegerLiteral6CreateERNS_10ASTContextERKN4llvm5APIntENS_8QualTypeENS_14SourceLocationE\", \"clang::IntegerLiteral::Create(clang::ASTContext&, llvm::APInt const&, clang::QualType, clang::SourceLocation)\"},\n    {\"_ZN5clang14IntegerLiteral6CreateERNS_10ASTContextENS_4Stmt10EmptyShellE\", \"clang::IntegerLiteral::Create(clang::ASTContext&, clang::Stmt::EmptyShell)\"},\n    {\"_ZN5clang15FloatingLiteral6CreateERNS_10ASTContextERKN4llvm7APFloatEbNS_8QualTypeENS_14SourceLocationE\", \"clang::FloatingLiteral::Create(clang::ASTContext&, llvm::APFloat const&, bool, clang::QualType, clang::SourceLocation)\"},\n    {\"_ZN5clang15FloatingLiteral6CreateERNS_10ASTContextENS_4Stmt10EmptyShellE\", \"clang::FloatingLiteral::Create(clang::ASTContext&, clang::Stmt::EmptyShell)\"},\n    {\"_ZNK5clang15FloatingLiteral27getValueAsApproximateDoubleEv\", \"clang::FloatingLiteral::getValueAsApproximateDouble() const\"},\n    {\"_ZN5clang13StringLiteral6CreateERNS_10ASTContextEPKcjbNS_8QualTypeEPKNS_14SourceLocationEj\", \"clang::StringLiteral::Create(clang::ASTContext&, char const*, unsigned int, bool, clang::QualType, clang::SourceLocation const*, unsigned int)\"},\n    {\"_ZN5clang13StringLiteral11CreateEmptyERNS_10ASTContextEj\", \"clang::StringLiteral::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang13StringLiteral9setStringERNS_10ASTContextEN4llvm9StringRefE\", \"clang::StringLiteral::setString(clang::ASTContext&, llvm::StringRef)\"},\n    {\"_ZNK5clang13StringLiteral17getLocationOfByteEjRKNS_13SourceManagerERKNS_11LangOptionsERKNS_10TargetInfoE\", \"clang::StringLiteral::getLocationOfByte(unsigned int, clang::SourceManager const&, clang::LangOptions const&, clang::TargetInfo const&) const\"},\n    {\"_ZN5clang13UnaryOperator12getOpcodeStrENS_17UnaryOperatorKindE\", \"clang::UnaryOperator::getOpcodeStr(clang::UnaryOperatorKind)\"},\n    {\"_ZN5clang13UnaryOperator19getOverloadedOpcodeENS_22OverloadedOperatorKindEb\", \"clang::UnaryOperator::getOverloadedOpcode(clang::OverloadedOperatorKind, bool)\"},\n    {\"_ZN5clang13UnaryOperator21getOverloadedOperatorENS_17UnaryOperatorKindE\", \"clang::UnaryOperator::getOverloadedOperator(clang::UnaryOperatorKind)\"},\n    {\"_ZN5clang8CallExprC1ERNS_10ASTContextENS_4Stmt9StmtClassEPNS_4ExprEjPS6_jNS_8QualTypeENS_13ExprValueKindENS_14SourceLocationE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::Expr*, unsigned int, clang::Expr**, unsigned int, clang::QualType, clang::ExprValueKind, clang::SourceLocation)\"},\n    {\"_ZN5clang8CallExprC2ERNS_10ASTContextENS_4Stmt9StmtClassEPNS_4ExprEjPS6_jNS_8QualTypeENS_13ExprValueKindENS_14SourceLocationE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::Expr*, unsigned int, clang::Expr**, unsigned int, clang::QualType, clang::ExprValueKind, clang::SourceLocation)\"},\n    {\"_ZN5clang8CallExprC1ERNS_10ASTContextEPNS_4ExprEPS4_jNS_8QualTypeENS_13ExprValueKindENS_14SourceLocationE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Expr*, clang::Expr**, unsigned int, clang::QualType, clang::ExprValueKind, clang::SourceLocation)\"},\n    {\"_ZN5clang8CallExprC2ERNS_10ASTContextEPNS_4ExprEPS4_jNS_8QualTypeENS_13ExprValueKindENS_14SourceLocationE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Expr*, clang::Expr**, unsigned int, clang::QualType, clang::ExprValueKind, clang::SourceLocation)\"},\n    {\"_ZN5clang8CallExprC1ERNS_10ASTContextENS_4Stmt9StmtClassENS3_10EmptyShellE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::Stmt::EmptyShell)\"},\n    {\"_ZN5clang8CallExprC2ERNS_10ASTContextENS_4Stmt9StmtClassENS3_10EmptyShellE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::Stmt::EmptyShell)\"},\n    {\"_ZN5clang8CallExprC1ERNS_10ASTContextENS_4Stmt9StmtClassEjNS3_10EmptyShellE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, unsigned int, clang::Stmt::EmptyShell)\"},\n    {\"_ZN5clang8CallExprC2ERNS_10ASTContextENS_4Stmt9StmtClassEjNS3_10EmptyShellE\", \"clang::CallExpr::CallExpr(clang::ASTContext&, clang::Stmt::StmtClass, unsigned int, clang::Stmt::EmptyShell)\"},\n    {\"_ZN5clang8CallExpr13getCalleeDeclEv\", \"clang::CallExpr::getCalleeDecl()\"},\n    {\"_ZN5clang4Expr16IgnoreParenCastsEv\", \"clang::Expr::IgnoreParenCasts()\"},\n    {\"_ZN5clang8CallExpr15getDirectCalleeEv\", \"clang::CallExpr::getDirectCallee()\"},\n    {\"_ZN5clang8CallExpr10setNumArgsERNS_10ASTContextEj\", \"clang::CallExpr::setNumArgs(clang::ASTContext&, unsigned int)\"},\n    {\"_ZNK5clang8CallExpr13isBuiltinCallERKNS_10ASTContextE\", \"clang::CallExpr::isBuiltinCall(clang::ASTContext const&) const\"},\n    {\"_ZNK5clang8CallExpr17getCallReturnTypeEv\", \"clang::CallExpr::getCallReturnType() const\"},\n    {\"_ZN5clang12OffsetOfExpr6CreateERNS_10ASTContextENS_8QualTypeENS_14SourceLocationEPNS_14TypeSourceInfoEPNS0_12OffsetOfNodeEjPPNS_4ExprEjS4_\", \"clang::OffsetOfExpr::Create(clang::ASTContext&, clang::QualType, clang::SourceLocation, clang::TypeSourceInfo*, clang::OffsetOfExpr::OffsetOfNode*, unsigned int, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang12OffsetOfExprC1ERNS_10ASTContextENS_8QualTypeENS_14SourceLocationEPNS_14TypeSourceInfoEPNS0_12OffsetOfNodeEjPPNS_4ExprEjS4_\", \"clang::OffsetOfExpr::OffsetOfExpr(clang::ASTContext&, clang::QualType, clang::SourceLocation, clang::TypeSourceInfo*, clang::OffsetOfExpr::OffsetOfNode*, unsigned int, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang12OffsetOfExpr11CreateEmptyERNS_10ASTContextEjj\", \"clang::OffsetOfExpr::CreateEmpty(clang::ASTContext&, unsigned int, unsigned int)\"},\n    {\"_ZN5clang12OffsetOfExprC2ERNS_10ASTContextENS_8QualTypeENS_14SourceLocationEPNS_14TypeSourceInfoEPNS0_12OffsetOfNodeEjPPNS_4ExprEjS4_\", \"clang::OffsetOfExpr::OffsetOfExpr(clang::ASTContext&, clang::QualType, clang::SourceLocation, clang::TypeSourceInfo*, clang::OffsetOfExpr::OffsetOfNode*, unsigned int, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZNK5clang12OffsetOfExpr12OffsetOfNode12getFieldNameEv\", \"clang::OffsetOfExpr::OffsetOfNode::getFieldName() const\"},\n    {\"_ZN5clang10MemberExpr6CreateERNS_10ASTContextEPNS_4ExprEbPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9ValueDeclENS_14DeclAccessPairENS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_8QualTypeENS_13ExprValueKindENS_14ExprObjectKindE\", \"clang::MemberExpr::Create(clang::ASTContext&, clang::Expr*, bool, clang::NestedNameSpecifier*, clang::SourceRange, clang::ValueDecl*, clang::DeclAccessPair, clang::DeclarationNameInfo, clang::TemplateArgumentListInfo const*, clang::QualType, clang::ExprValueKind, clang::ExprObjectKind)\"},\n    {\"_ZNK5clang8CastExpr15getCastKindNameEv\", \"clang::CastExpr::getCastKindName() const\"},\n    {\"_ZN5clang8CastExpr19getSubExprAsWrittenEv\", \"clang::CastExpr::getSubExprAsWritten()\"},\n    {\"_ZN5clang8CastExpr11path_bufferEv\", \"clang::CastExpr::path_buffer()\"},\n    {\"_ZN5clang8CastExpr11setCastPathERKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEE\", \"clang::CastExpr::setCastPath(llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const&)\"},\n    {\"_ZN5clang16ImplicitCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEENS_13ExprValueKindE\", \"clang::ImplicitCastExpr::Create(clang::ASTContext&, clang::QualType, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::ExprValueKind)\"},\n    {\"_ZN5clang16ImplicitCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::ImplicitCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang14CStyleCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEPNS_14TypeSourceInfoENS_14SourceLocationESH_\", \"clang::CStyleCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang14CStyleCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CStyleCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang14BinaryOperator12getOpcodeStrENS_18BinaryOperatorKindE\", \"clang::BinaryOperator::getOpcodeStr(clang::BinaryOperatorKind)\"},\n    {\"_ZN5clang14BinaryOperator19getOverloadedOpcodeENS_22OverloadedOperatorKindE\", \"clang::BinaryOperator::getOverloadedOpcode(clang::OverloadedOperatorKind)\"},\n    {\"_ZN5clang14BinaryOperator21getOverloadedOperatorENS_18BinaryOperatorKindE\", \"clang::BinaryOperator::getOverloadedOperator(clang::BinaryOperatorKind)\"},\n    {\"_ZN5clang12InitListExprC1ERNS_10ASTContextENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::InitListExpr::InitListExpr(clang::ASTContext&, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang12InitListExprC2ERNS_10ASTContextENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::InitListExpr::InitListExpr(clang::ASTContext&, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang12InitListExpr12reserveInitsERNS_10ASTContextEj\", \"clang::InitListExpr::reserveInits(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang12InitListExpr11resizeInitsERNS_10ASTContextEj\", \"clang::InitListExpr::resizeInits(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang12InitListExpr10updateInitERNS_10ASTContextEjPNS_4ExprE\", \"clang::InitListExpr::updateInit(clang::ASTContext&, unsigned int, clang::Expr*)\"},\n    {\"_ZNK5clang12InitListExpr14getSourceRangeEv\", \"clang::InitListExpr::getSourceRange() const\"},\n    {\"_ZNK5clang9BlockExpr15getFunctionTypeEv\", \"clang::BlockExpr::getFunctionType() const\"},\n    {\"_ZNK5clang9BlockExpr16getCaretLocationEv\", \"clang::BlockExpr::getCaretLocation() const\"},\n    {\"_ZNK5clang9BlockExpr7getBodyEv\", \"clang::BlockExpr::getBody() const\"},\n    {\"_ZN5clang9BlockExpr7getBodyEv\", \"clang::BlockExpr::getBody()\"},\n    {\"_ZNK5clang4Expr22isUnusedResultAWarningERNS_14SourceLocationERNS_11SourceRangeES4_RNS_10ASTContextE\", \"clang::Expr::isUnusedResultAWarning(clang::SourceLocation&, clang::SourceRange&, clang::SourceRange&, clang::ASTContext&) const\"},\n    {\"_ZN5clang4Expr12IgnoreParensEv\", \"clang::Expr::IgnoreParens()\"},\n    {\"_ZNK5clang4Expr17isOBJCGCCandidateERNS_10ASTContextE\", \"clang::Expr::isOBJCGCCandidate(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4Expr21isBoundMemberFunctionERNS_10ASTContextE\", \"clang::Expr::isBoundMemberFunction(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4Expr8CanThrowERNS_10ASTContextE\", \"clang::Expr::CanThrow(clang::ASTContext&) const\"},\n    {\"_Z16CanSubExprsThrowRN5clang10ASTContextEPKNS_4ExprE\", \"CanSubExprsThrow(clang::ASTContext&, clang::Expr const*)\"},\n    {\"_Z14CanCalleeThrowPKN5clang4DeclEb\", \"CanCalleeThrow(clang::Decl const*, bool)\"},\n    {\"_ZN5clang4Expr22IgnoreParenLValueCastsEv\", \"clang::Expr::IgnoreParenLValueCasts()\"},\n    {\"_ZN5clang4Expr19IgnoreParenImpCastsEv\", \"clang::Expr::IgnoreParenImpCasts()\"},\n    {\"_ZN5clang4Expr20IgnoreParenNoopCastsERNS_10ASTContextE\", \"clang::Expr::IgnoreParenNoopCasts(clang::ASTContext&)\"},\n    {\"_ZNK5clang4Expr17isDefaultArgumentEv\", \"clang::Expr::isDefaultArgument() const\"},\n    {\"_ZNK5clang4Expr17isTemporaryObjectERNS_10ASTContextEPKNS_13CXXRecordDeclE\", \"clang::Expr::isTemporaryObject(clang::ASTContext&, clang::CXXRecordDecl const*) const\"},\n    {\"_ZN5clang4Expr28hasAnyTypeDependentArgumentsEPPS0_j\", \"clang::Expr::hasAnyTypeDependentArguments(clang::Expr**, unsigned int)\"},\n    {\"_ZN5clang4Expr29hasAnyValueDependentArgumentsEPPS0_j\", \"clang::Expr::hasAnyValueDependentArguments(clang::Expr**, unsigned int)\"},\n    {\"_ZNK5clang4Expr21isConstantInitializerERNS_10ASTContextEb\", \"clang::Expr::isConstantInitializer(clang::ASTContext&, bool) const\"},\n    {\"_ZNK5clang4Expr21isNullPointerConstantERNS_10ASTContextENS0_34NullPointerConstantValueDependenceE\", \"clang::Expr::isNullPointerConstant(clang::ASTContext&, clang::Expr::NullPointerConstantValueDependence) const\"},\n    {\"_ZNK5clang4Expr15getObjCPropertyEv\", \"clang::Expr::getObjCProperty() const\"},\n    {\"_ZN5clang4Expr11getBitFieldEv\", \"clang::Expr::getBitField()\"},\n    {\"_ZNK5clang4Expr21refersToVectorElementEv\", \"clang::Expr::refersToVectorElement() const\"},\n    {\"_ZNK5clang20ExtVectorElementExpr7isArrowEv\", \"clang::ExtVectorElementExpr::isArrow() const\"},\n    {\"_ZNK5clang20ExtVectorElementExpr14getNumElementsEv\", \"clang::ExtVectorElementExpr::getNumElements() const\"},\n    {\"_ZNK5clang20ExtVectorElementExpr25containsDuplicateElementsEv\", \"clang::ExtVectorElementExpr::containsDuplicateElements() const\"},\n    {\"_ZNK5clang20ExtVectorElementExpr23getEncodedElementAccessERN4llvm15SmallVectorImplIjEE\", \"clang::ExtVectorElementExpr::getEncodedElementAccess(llvm::SmallVectorImpl<unsigned int>&) const\"},\n    {\"_ZN5clang15ObjCMessageExprC1ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationES3_bS1_NS_8SelectorES3_PNS_14ObjCMethodDeclEPPNS_4ExprEjS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::SourceLocation, bool, clang::QualType, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExprC2ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationES3_bS1_NS_8SelectorES3_PNS_14ObjCMethodDeclEPPNS_4ExprEjS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::SourceLocation, bool, clang::QualType, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExprC1ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_14TypeSourceInfoENS_8SelectorES3_PNS_14ObjCMethodDeclEPPNS_4ExprEjS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::TypeSourceInfo*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExprC2ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_14TypeSourceInfoENS_8SelectorES3_PNS_14ObjCMethodDeclEPPNS_4ExprEjS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::TypeSourceInfo*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExprC1ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_4ExprENS_8SelectorES3_PNS_14ObjCMethodDeclEPS5_jS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::Expr*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExprC2ENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_4ExprENS_8SelectorES3_PNS_14ObjCMethodDeclEPS5_jS3_\", \"clang::ObjCMessageExpr::ObjCMessageExpr(clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::Expr*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationES5_bS3_NS_8SelectorES5_PNS_14ObjCMethodDeclEPPNS_4ExprEjS5_\", \"clang::ObjCMessageExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::SourceLocation, bool, clang::QualType, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_14TypeSourceInfoENS_8SelectorES5_PNS_14ObjCMethodDeclEPPNS_4ExprEjS5_\", \"clang::ObjCMessageExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::TypeSourceInfo*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEPNS_4ExprENS_8SelectorES5_PNS_14ObjCMethodDeclEPS7_jS5_\", \"clang::ObjCMessageExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::SourceLocation, clang::Expr*, clang::Selector, clang::SourceLocation, clang::ObjCMethodDecl*, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang15ObjCMessageExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::ObjCMessageExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZNK5clang15ObjCMessageExpr16getReceiverRangeEv\", \"clang::ObjCMessageExpr::getReceiverRange() const\"},\n    {\"_ZNK5clang15ObjCMessageExpr11getSelectorEv\", \"clang::ObjCMessageExpr::getSelector() const\"},\n    {\"_ZNK5clang15ObjCMessageExpr20getReceiverInterfaceEv\", \"clang::ObjCMessageExpr::getReceiverInterface() const\"},\n    {\"_ZNK5clang10ChooseExpr15isConditionTrueERKNS_10ASTContextE\", \"clang::ChooseExpr::isConditionTrue(clang::ASTContext const&) const\"},\n    {\"_ZN5clang17ShuffleVectorExprC1ERNS_10ASTContextEPPNS_4ExprEjNS_8QualTypeENS_14SourceLocationES7_\", \"clang::ShuffleVectorExpr::ShuffleVectorExpr(clang::ASTContext&, clang::Expr**, unsigned int, clang::QualType, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang17ShuffleVectorExprC2ERNS_10ASTContextEPPNS_4ExprEjNS_8QualTypeENS_14SourceLocationES7_\", \"clang::ShuffleVectorExpr::ShuffleVectorExpr(clang::ASTContext&, clang::Expr**, unsigned int, clang::QualType, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang17ShuffleVectorExpr8setExprsERNS_10ASTContextEPPNS_4ExprEj\", \"clang::ShuffleVectorExpr::setExprs(clang::ASTContext&, clang::Expr**, unsigned int)\"},\n    {\"_ZN5clang18DesignatedInitExpr10Designator12getFieldNameEv\", \"clang::DesignatedInitExpr::Designator::getFieldName()\"},\n    {\"_ZN5clang18DesignatedInitExprC1ERNS_10ASTContextENS_8QualTypeEjPKNS0_10DesignatorENS_14SourceLocationEbPPNS_4ExprEjS9_\", \"clang::DesignatedInitExpr::DesignatedInitExpr(clang::ASTContext&, clang::QualType, unsigned int, clang::DesignatedInitExpr::Designator const*, clang::SourceLocation, bool, clang::Expr**, unsigned int, clang::Expr*)\"},\n    {\"_ZN5clang18DesignatedInitExprC2ERNS_10ASTContextENS_8QualTypeEjPKNS0_10DesignatorENS_14SourceLocationEbPPNS_4ExprEjS9_\", \"clang::DesignatedInitExpr::DesignatedInitExpr(clang::ASTContext&, clang::QualType, unsigned int, clang::DesignatedInitExpr::Designator const*, clang::SourceLocation, bool, clang::Expr**, unsigned int, clang::Expr*)\"},\n    {\"_ZN5clang18DesignatedInitExpr6CreateERNS_10ASTContextEPNS0_10DesignatorEjPPNS_4ExprEjNS_14SourceLocationEbS6_\", \"clang::DesignatedInitExpr::Create(clang::ASTContext&, clang::DesignatedInitExpr::Designator*, unsigned int, clang::Expr**, unsigned int, clang::SourceLocation, bool, clang::Expr*)\"},\n    {\"_ZN5clang18DesignatedInitExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::DesignatedInitExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang18DesignatedInitExpr14setDesignatorsERNS_10ASTContextEPKNS0_10DesignatorEj\", \"clang::DesignatedInitExpr::setDesignators(clang::ASTContext&, clang::DesignatedInitExpr::Designator const*, unsigned int)\"},\n    {\"_ZNK5clang18DesignatedInitExpr14getSourceRangeEv\", \"clang::DesignatedInitExpr::getSourceRange() const\"},\n    {\"_ZN5clang18DesignatedInitExpr13getArrayIndexERKNS0_10DesignatorE\", \"clang::DesignatedInitExpr::getArrayIndex(clang::DesignatedInitExpr::Designator const&)\"},\n    {\"_ZN5clang18DesignatedInitExpr18getArrayRangeStartERKNS0_10DesignatorE\", \"clang::DesignatedInitExpr::getArrayRangeStart(clang::DesignatedInitExpr::Designator const&)\"},\n    {\"_ZN5clang18DesignatedInitExpr16getArrayRangeEndERKNS0_10DesignatorE\", \"clang::DesignatedInitExpr::getArrayRangeEnd(clang::DesignatedInitExpr::Designator const&)\"},\n    {\"_ZN5clang18DesignatedInitExpr16ExpandDesignatorERNS_10ASTContextEjPKNS0_10DesignatorES5_\", \"clang::DesignatedInitExpr::ExpandDesignator(clang::ASTContext&, unsigned int, clang::DesignatedInitExpr::Designator const*, clang::DesignatedInitExpr::Designator const*)\"},\n    {\"_ZN5clang13ParenListExprC1ERNS_10ASTContextENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::ParenListExpr::ParenListExpr(clang::ASTContext&, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang13ParenListExprC2ERNS_10ASTContextENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::ParenListExpr::ParenListExpr(clang::ASTContext&, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang12ExprIteratorixEm\", \"clang::ExprIterator::operator[](unsigned long)\"},\n    {\"_ZNK5clang12ExprIteratordeEv\", \"clang::ExprIterator::operator*() const\"},\n    {\"_ZNK5clang12ExprIteratorptEv\", \"clang::ExprIterator::operator->() const\"},\n    {\"_ZNK5clang17ConstExprIteratorixEm\", \"clang::ConstExprIterator::operator[](unsigned long) const\"},\n    {\"_ZNK5clang17ConstExprIteratordeEv\", \"clang::ConstExprIterator::operator*() const\"},\n    {\"_ZNK5clang17ConstExprIteratorptEv\", \"clang::ConstExprIterator::operator->() const\"},\n    {\"_ZN5clang17SizeOfAlignOfExpr8childrenEv\", \"clang::SizeOfAlignOfExpr::children()\"},\n    {\"_ZN5clang15ObjCMessageExpr8childrenEv\", \"clang::ObjCMessageExpr::children()\"},\n    {\"_ZN5clang16BlockDeclRefExprC1EPNS_7VarDeclENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEbb\", \"clang::BlockDeclRefExpr::BlockDeclRefExpr(clang::VarDecl*, clang::QualType, clang::ExprValueKind, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang16BlockDeclRefExprC2EPNS_7VarDeclENS_8QualTypeENS_13ExprValueKindENS_14SourceLocationEbb\", \"clang::BlockDeclRefExpr::BlockDeclRefExpr(clang::VarDecl*, clang::QualType, clang::ExprValueKind, clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6insertIPPNS_4ExprEEEPS2_RNS_10ASTContextES8_T_SB_\", \"clang::Stmt** clang::ASTVector<clang::Stmt*>::insert<clang::Expr**>(clang::ASTContext&, clang::Stmt**, clang::Expr**, clang::Expr**)\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6resizeERNS_10ASTContextEjRKS2_\", \"clang::ASTVector<clang::Stmt*>::resize(clang::ASTContext&, unsigned int, clang::Stmt* const&)\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6insertERNS_10ASTContextEPS2_mRKS2_\", \"clang::ASTVector<clang::Stmt*>::insert(clang::ASTContext&, clang::Stmt**, unsigned long, clang::Stmt* const&)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_20WarnUnusedResultAttrEEEPT_v\", \"clang::WarnUnusedResultAttr* clang::Decl::getAttr<clang::WarnUnusedResultAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_8PureAttrEEEPT_v\", \"clang::PureAttr* clang::Decl::getAttr<clang::PureAttr>() const\"},\n    {\"_ZNK5clang4Decl7getAttrINS_9ConstAttrEEEPT_v\", \"clang::ConstAttr* clang::Decl::getAttr<clang::ConstAttr>() const\"},\n    {\"_ZNK5clang7VarDecl16hasGlobalStorageEv\", \"clang::VarDecl::hasGlobalStorage() const\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6appendERNS_10ASTContextEmRKS2_\", \"clang::ASTVector<clang::Stmt*>::append(clang::ASTContext&, unsigned long, clang::Stmt* const&)\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6appendIPS2_EEvRNS_10ASTContextET_S8_\", \"void clang::ASTVector<clang::Stmt*>::append<clang::Stmt**>(clang::ASTContext&, clang::Stmt**, clang::Stmt**)\"},\n    {\"_ZN5clang9ASTVectorIPNS_4StmtEE6appendIPPNS_4ExprEEEvRNS_10ASTContextET_SA_\", \"void clang::ASTVector<clang::Stmt*>::append<clang::Expr**>(clang::ASTContext&, clang::Expr**, clang::Expr**)\"},\n    {\"_ZNK5clang16APNumericStorage11getIntValueEv\", \"clang::APNumericStorage::getIntValue() const\"},\n    {\"_ZN5clang8CastExprC2ENS_4Stmt9StmtClassENS_8QualTypeENS_13ExprValueKindENS_8CastKindEPNS_4ExprEj\", \"clang::CastExpr::CastExpr(clang::Stmt::StmtClass, clang::QualType, clang::ExprValueKind, clang::CastKind, clang::Expr*, unsigned int)\"},\n    {\"_ZN5clang14APFloatStorage8setValueERNS_10ASTContextERKN4llvm7APFloatE\", \"clang::APFloatStorage::setValue(clang::ASTContext&, llvm::APFloat const&)\"},\n    {\"_ZN5clang14IntegerLiteralC2ERNS_10ASTContextERKN4llvm5APIntENS_8QualTypeENS_14SourceLocationE\", \"clang::IntegerLiteral::IntegerLiteral(clang::ASTContext&, llvm::APInt const&, clang::QualType, clang::SourceLocation)\"},\n    {\"_ZNK5clang13CXXTypeidExpr14getTypeOperandEv\", \"clang::CXXTypeidExpr::getTypeOperand() const\"},\n    {\"_ZNK5clang13CXXUuidofExpr14getTypeOperandEv\", \"clang::CXXUuidofExpr::getTypeOperand() const\"},\n    {\"_ZNK5clang22CXXScalarValueInitExpr14getSourceRangeEv\", \"clang::CXXScalarValueInitExpr::getSourceRange() const\"},\n    {\"_ZN5clang10CXXNewExprC1ERNS_10ASTContextEbPNS_12FunctionDeclEPPNS_4ExprEjNS_11SourceRangeES6_PNS_18CXXConstructorDeclEbS7_jS4_bNS_8QualTypeEPNS_14TypeSourceInfoENS_14SourceLocationESE_SE_SE_\", \"clang::CXXNewExpr::CXXNewExpr(clang::ASTContext&, bool, clang::FunctionDecl*, clang::Expr**, unsigned int, clang::SourceRange, clang::Expr*, clang::CXXConstructorDecl*, bool, clang::Expr**, unsigned int, clang::FunctionDecl*, bool, clang::QualType, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang10CXXNewExprC2ERNS_10ASTContextEbPNS_12FunctionDeclEPPNS_4ExprEjNS_11SourceRangeES6_PNS_18CXXConstructorDeclEbS7_jS4_bNS_8QualTypeEPNS_14TypeSourceInfoENS_14SourceLocationESE_SE_SE_\", \"clang::CXXNewExpr::CXXNewExpr(clang::ASTContext&, bool, clang::FunctionDecl*, clang::Expr**, unsigned int, clang::SourceRange, clang::Expr*, clang::CXXConstructorDecl*, bool, clang::Expr**, unsigned int, clang::FunctionDecl*, bool, clang::QualType, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang10CXXNewExpr17AllocateArgsArrayERNS_10ASTContextEbjj\", \"clang::CXXNewExpr::AllocateArgsArray(clang::ASTContext&, bool, unsigned int, unsigned int)\"},\n    {\"_ZNK5clang13CXXDeleteExpr16getDestroyedTypeEv\", \"clang::CXXDeleteExpr::getDestroyedType() const\"},\n    {\"_ZN5clang27PseudoDestructorTypeStorageC1EPNS_14TypeSourceInfoE\", \"clang::PseudoDestructorTypeStorage::PseudoDestructorTypeStorage(clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang27PseudoDestructorTypeStorageC2EPNS_14TypeSourceInfoE\", \"clang::PseudoDestructorTypeStorage::PseudoDestructorTypeStorage(clang::TypeSourceInfo*)\"},\n    {\"_ZN5clang23CXXPseudoDestructorExprC1ERNS_10ASTContextEPNS_4ExprEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_14TypeSourceInfoES5_S5_NS_27PseudoDestructorTypeStorageE\", \"clang::CXXPseudoDestructorExpr::CXXPseudoDestructorExpr(clang::ASTContext&, clang::Expr*, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation, clang::PseudoDestructorTypeStorage)\"},\n    {\"_ZN5clang23CXXPseudoDestructorExprC2ERNS_10ASTContextEPNS_4ExprEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_14TypeSourceInfoES5_S5_NS_27PseudoDestructorTypeStorageE\", \"clang::CXXPseudoDestructorExpr::CXXPseudoDestructorExpr(clang::ASTContext&, clang::Expr*, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation, clang::PseudoDestructorTypeStorage)\"},\n    {\"_ZNK5clang23CXXPseudoDestructorExpr16getDestroyedTypeEv\", \"clang::CXXPseudoDestructorExpr::getDestroyedType() const\"},\n    {\"_ZNK5clang23CXXPseudoDestructorExpr14getSourceRangeEv\", \"clang::CXXPseudoDestructorExpr::getSourceRange() const\"},\n    {\"_ZN5clang20UnresolvedLookupExpr6CreateERNS_10ASTContextEPNS_13CXXRecordDeclEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEbRKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESE_\", \"clang::UnresolvedLookupExpr::Create(clang::ASTContext&, clang::CXXRecordDecl*, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, bool, clang::TemplateArgumentListInfo const&, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator)\"},\n    {\"_ZN5clang20UnresolvedLookupExpr11CreateEmptyERNS_10ASTContextEbj\", \"clang::UnresolvedLookupExpr::CreateEmpty(clang::ASTContext&, bool, unsigned int)\"},\n    {\"_ZN5clang12OverloadExprC1ENS_4Stmt9StmtClassERNS_10ASTContextEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESE_bb\", \"clang::OverloadExpr::OverloadExpr(clang::Stmt::StmtClass, clang::ASTContext&, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator, bool, bool)\"},\n    {\"_ZN5clang12OverloadExprC2ENS_4Stmt9StmtClassERNS_10ASTContextEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESE_bb\", \"clang::OverloadExpr::OverloadExpr(clang::Stmt::StmtClass, clang::ASTContext&, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator, bool, bool)\"},\n    {\"_ZN5clang12OverloadExpr17initializeResultsERNS_10ASTContextENS_21UnresolvedSetIteratorES3_\", \"clang::OverloadExpr::initializeResults(clang::ASTContext&, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator)\"},\n    {\"_ZNK5clang12OverloadExpr14getNamingClassEv\", \"clang::OverloadExpr::getNamingClass() const\"},\n    {\"_ZNK5clang20UnresolvedMemberExpr14getNamingClassEv\", \"clang::UnresolvedMemberExpr::getNamingClass() const\"},\n    {\"_ZN5clang25DependentScopeDeclRefExprC1ENS_8QualTypeEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::DependentScopeDeclRefExpr::DependentScopeDeclRefExpr(clang::QualType, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang25DependentScopeDeclRefExprC2ENS_8QualTypeEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::DependentScopeDeclRefExpr::DependentScopeDeclRefExpr(clang::QualType, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang25DependentScopeDeclRefExpr6CreateERNS_10ASTContextEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::DependentScopeDeclRefExpr::Create(clang::ASTContext&, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang25DependentScopeDeclRefExpr11CreateEmptyERNS_10ASTContextEbj\", \"clang::DependentScopeDeclRefExpr::CreateEmpty(clang::ASTContext&, bool, unsigned int)\"},\n    {\"_ZNK5clang16CXXConstructExpr14getSourceRangeEv\", \"clang::CXXConstructExpr::getSourceRange() const\"},\n    {\"_ZNK5clang19CXXOperatorCallExpr14getSourceRangeEv\", \"clang::CXXOperatorCallExpr::getSourceRange() const\"},\n    {\"_ZN5clang17CXXMemberCallExpr25getImplicitObjectArgumentEv\", \"clang::CXXMemberCallExpr::getImplicitObjectArgument()\"},\n    {\"_ZN5clang17CXXMemberCallExpr13getRecordDeclEv\", \"clang::CXXMemberCallExpr::getRecordDecl()\"},\n    {\"_ZNK5clang17CXXMemberCallExpr14getSourceRangeEv\", \"clang::CXXMemberCallExpr::getSourceRange() const\"},\n    {\"_ZNK5clang16CXXNamedCastExpr11getCastNameEv\", \"clang::CXXNamedCastExpr::getCastName() const\"},\n    {\"_ZN5clang17CXXStaticCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEPNS_14TypeSourceInfoENS_14SourceLocationESH_\", \"clang::CXXStaticCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang17CXXStaticCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CXXStaticCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang18CXXDynamicCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEPNS_14TypeSourceInfoENS_14SourceLocationESH_\", \"clang::CXXDynamicCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang18CXXDynamicCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CXXDynamicCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang22CXXReinterpretCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEEPNS_14TypeSourceInfoENS_14SourceLocationESH_\", \"clang::CXXReinterpretCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang22CXXReinterpretCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CXXReinterpretCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang16CXXConstCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindEPNS_4ExprEPNS_14TypeSourceInfoENS_14SourceLocationES9_\", \"clang::CXXConstCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::Expr*, clang::TypeSourceInfo*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang16CXXConstCastExpr11CreateEmptyERNS_10ASTContextE\", \"clang::CXXConstCastExpr::CreateEmpty(clang::ASTContext&)\"},\n    {\"_ZN5clang21CXXFunctionalCastExpr6CreateERNS_10ASTContextENS_8QualTypeENS_13ExprValueKindEPNS_14TypeSourceInfoENS_14SourceLocationENS_8CastKindEPNS_4ExprEPKN4llvm11SmallVectorIPNS_16CXXBaseSpecifierELj4EEES7_\", \"clang::CXXFunctionalCastExpr::Create(clang::ASTContext&, clang::QualType, clang::ExprValueKind, clang::TypeSourceInfo*, clang::SourceLocation, clang::CastKind, clang::Expr*, llvm::SmallVector<clang::CXXBaseSpecifier*, 4u> const*, clang::SourceLocation)\"},\n    {\"_ZN5clang21CXXFunctionalCastExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CXXFunctionalCastExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang17CXXDefaultArgExpr6CreateERNS_10ASTContextENS_14SourceLocationEPNS_11ParmVarDeclEPNS_4ExprE\", \"clang::CXXDefaultArgExpr::Create(clang::ASTContext&, clang::SourceLocation, clang::ParmVarDecl*, clang::Expr*)\"},\n    {\"_ZN5clang12CXXTemporary6CreateERNS_10ASTContextEPKNS_17CXXDestructorDeclE\", \"clang::CXXTemporary::Create(clang::ASTContext&, clang::CXXDestructorDecl const*)\"},\n    {\"_ZN5clang20CXXBindTemporaryExpr6CreateERNS_10ASTContextEPNS_12CXXTemporaryEPNS_4ExprE\", \"clang::CXXBindTemporaryExpr::Create(clang::ASTContext&, clang::CXXTemporary*, clang::Expr*)\"},\n    {\"_ZN5clang22CXXTemporaryObjectExprC1ERNS_10ASTContextEPNS_18CXXConstructorDeclEPNS_14TypeSourceInfoEPPNS_4ExprEjNS_11SourceRangeEb\", \"clang::CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(clang::ASTContext&, clang::CXXConstructorDecl*, clang::TypeSourceInfo*, clang::Expr**, unsigned int, clang::SourceRange, bool)\"},\n    {\"_ZN5clang22CXXTemporaryObjectExprC2ERNS_10ASTContextEPNS_18CXXConstructorDeclEPNS_14TypeSourceInfoEPPNS_4ExprEjNS_11SourceRangeEb\", \"clang::CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(clang::ASTContext&, clang::CXXConstructorDecl*, clang::TypeSourceInfo*, clang::Expr**, unsigned int, clang::SourceRange, bool)\"},\n    {\"_ZN5clang16CXXConstructExprC2ERNS_10ASTContextENS_4Stmt9StmtClassENS_8QualTypeENS_14SourceLocationEPNS_18CXXConstructorDeclEbPPNS_4ExprEjbNS0_16ConstructionKindENS_11SourceRangeE\", \"clang::CXXConstructExpr::CXXConstructExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::QualType, clang::SourceLocation, clang::CXXConstructorDecl*, bool, clang::Expr**, unsigned int, bool, clang::CXXConstructExpr::ConstructionKind, clang::SourceRange)\"},\n    {\"_ZNK5clang22CXXTemporaryObjectExpr14getSourceRangeEv\", \"clang::CXXTemporaryObjectExpr::getSourceRange() const\"},\n    {\"_ZN5clang16CXXConstructExpr6CreateERNS_10ASTContextENS_8QualTypeENS_14SourceLocationEPNS_18CXXConstructorDeclEbPPNS_4ExprEjbNS0_16ConstructionKindENS_11SourceRangeE\", \"clang::CXXConstructExpr::Create(clang::ASTContext&, clang::QualType, clang::SourceLocation, clang::CXXConstructorDecl*, bool, clang::Expr**, unsigned int, bool, clang::CXXConstructExpr::ConstructionKind, clang::SourceRange)\"},\n    {\"_ZN5clang16CXXConstructExprC1ERNS_10ASTContextENS_4Stmt9StmtClassENS_8QualTypeENS_14SourceLocationEPNS_18CXXConstructorDeclEbPPNS_4ExprEjbNS0_16ConstructionKindENS_11SourceRangeE\", \"clang::CXXConstructExpr::CXXConstructExpr(clang::ASTContext&, clang::Stmt::StmtClass, clang::QualType, clang::SourceLocation, clang::CXXConstructorDecl*, bool, clang::Expr**, unsigned int, bool, clang::CXXConstructExpr::ConstructionKind, clang::SourceRange)\"},\n    {\"_ZN5clang16ExprWithCleanupsC1ERNS_10ASTContextEPNS_4ExprEPPNS_12CXXTemporaryEj\", \"clang::ExprWithCleanups::ExprWithCleanups(clang::ASTContext&, clang::Expr*, clang::CXXTemporary**, unsigned int)\"},\n    {\"_ZN5clang16ExprWithCleanupsC2ERNS_10ASTContextEPNS_4ExprEPPNS_12CXXTemporaryEj\", \"clang::ExprWithCleanups::ExprWithCleanups(clang::ASTContext&, clang::Expr*, clang::CXXTemporary**, unsigned int)\"},\n    {\"_ZN5clang16ExprWithCleanups17setNumTemporariesERNS_10ASTContextEj\", \"clang::ExprWithCleanups::setNumTemporaries(clang::ASTContext&, unsigned int)\"},\n    {\"_ZN5clang16ExprWithCleanups6CreateERNS_10ASTContextEPNS_4ExprEPPNS_12CXXTemporaryEj\", \"clang::ExprWithCleanups::Create(clang::ASTContext&, clang::Expr*, clang::CXXTemporary**, unsigned int)\"},\n    {\"_ZN5clang26CXXUnresolvedConstructExprC1EPNS_14TypeSourceInfoENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::CXXUnresolvedConstructExpr::CXXUnresolvedConstructExpr(clang::TypeSourceInfo*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang26CXXUnresolvedConstructExprC2EPNS_14TypeSourceInfoENS_14SourceLocationEPPNS_4ExprEjS3_\", \"clang::CXXUnresolvedConstructExpr::CXXUnresolvedConstructExpr(clang::TypeSourceInfo*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang26CXXUnresolvedConstructExpr6CreateERNS_10ASTContextEPNS_14TypeSourceInfoENS_14SourceLocationEPPNS_4ExprEjS5_\", \"clang::CXXUnresolvedConstructExpr::Create(clang::ASTContext&, clang::TypeSourceInfo*, clang::SourceLocation, clang::Expr**, unsigned int, clang::SourceLocation)\"},\n    {\"_ZN5clang26CXXUnresolvedConstructExpr11CreateEmptyERNS_10ASTContextEj\", \"clang::CXXUnresolvedConstructExpr::CreateEmpty(clang::ASTContext&, unsigned int)\"},\n    {\"_ZNK5clang26CXXUnresolvedConstructExpr14getSourceRangeEv\", \"clang::CXXUnresolvedConstructExpr::getSourceRange() const\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExprC1ERNS_10ASTContextEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9NamedDeclENS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::CXXDependentScopeMemberExpr::CXXDependentScopeMemberExpr(clang::ASTContext&, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::NamedDecl*, clang::DeclarationNameInfo, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExprC2ERNS_10ASTContextEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9NamedDeclENS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::CXXDependentScopeMemberExpr::CXXDependentScopeMemberExpr(clang::ASTContext&, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::NamedDecl*, clang::DeclarationNameInfo, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExprC1ERNS_10ASTContextEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9NamedDeclENS_19DeclarationNameInfoE\", \"clang::CXXDependentScopeMemberExpr::CXXDependentScopeMemberExpr(clang::ASTContext&, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::NamedDecl*, clang::DeclarationNameInfo)\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExprC2ERNS_10ASTContextEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9NamedDeclENS_19DeclarationNameInfoE\", \"clang::CXXDependentScopeMemberExpr::CXXDependentScopeMemberExpr(clang::ASTContext&, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::NamedDecl*, clang::DeclarationNameInfo)\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExpr6CreateERNS_10ASTContextEPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeEPNS_9NamedDeclENS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoE\", \"clang::CXXDependentScopeMemberExpr::Create(clang::ASTContext&, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::NamedDecl*, clang::DeclarationNameInfo, clang::TemplateArgumentListInfo const*)\"},\n    {\"_ZN5clang27CXXDependentScopeMemberExpr11CreateEmptyERNS_10ASTContextEbj\", \"clang::CXXDependentScopeMemberExpr::CreateEmpty(clang::ASTContext&, bool, unsigned int)\"},\n    {\"_ZN5clang20UnresolvedMemberExprC1ERNS_10ASTContextEbPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESG_\", \"clang::UnresolvedMemberExpr::UnresolvedMemberExpr(clang::ASTContext&, bool, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator)\"},\n    {\"_ZN5clang20UnresolvedMemberExprC2ERNS_10ASTContextEbPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESG_\", \"clang::UnresolvedMemberExpr::UnresolvedMemberExpr(clang::ASTContext&, bool, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator)\"},\n    {\"_ZN5clang20UnresolvedMemberExpr6CreateERNS_10ASTContextEbPNS_4ExprENS_8QualTypeEbNS_14SourceLocationEPNS_19NestedNameSpecifierENS_11SourceRangeERKNS_19DeclarationNameInfoEPKNS_24TemplateArgumentListInfoENS_21UnresolvedSetIteratorESG_\", \"clang::UnresolvedMemberExpr::Create(clang::ASTContext&, bool, clang::Expr*, clang::QualType, bool, clang::SourceLocation, clang::NestedNameSpecifier*, clang::SourceRange, clang::DeclarationNameInfo const&, clang::TemplateArgumentListInfo const*, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator)\"},\n    {\"_ZN5clang20UnresolvedMemberExpr11CreateEmptyERNS_10ASTContextEbj\", \"clang::UnresolvedMemberExpr::CreateEmpty(clang::ASTContext&, bool, unsigned int)\"},\n    {\"_ZN5clang32SubstNonTypeTemplateParmPackExprC1ENS_8QualTypeEPNS_23NonTypeTemplateParmDeclENS_14SourceLocationERKNS_16TemplateArgumentE\", \"clang::SubstNonTypeTemplateParmPackExpr::SubstNonTypeTemplateParmPackExpr(clang::QualType, clang::NonTypeTemplateParmDecl*, clang::SourceLocation, clang::TemplateArgument const&)\"},\n    {\"_ZN5clang32SubstNonTypeTemplateParmPackExprC2ENS_8QualTypeEPNS_23NonTypeTemplateParmDeclENS_14SourceLocationERKNS_16TemplateArgumentE\", \"clang::SubstNonTypeTemplateParmPackExpr::SubstNonTypeTemplateParmPackExpr(clang::QualType, clang::NonTypeTemplateParmDecl*, clang::SourceLocation, clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang32SubstNonTypeTemplateParmPackExpr15getArgumentPackEv\", \"clang::SubstNonTypeTemplateParmPackExpr::getArgumentPack() const\"},\n    {\"_ZNK5clang4Expr12ClassifyImplERNS_10ASTContextEPNS_14SourceLocationE\", \"clang::Expr::ClassifyImpl(clang::ASTContext&, clang::SourceLocation*) const\"},\n    {\"_Z16ClassifyInternalRN5clang10ASTContextEPKNS_4ExprE\", \"ClassifyInternal(clang::ASTContext&, clang::Expr const*)\"},\n    {\"_ZNK5clang4Expr14ClassifyLValueERNS_10ASTContextE\", \"clang::Expr::ClassifyLValue(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4Expr18isModifiableLvalueERNS_10ASTContextEPNS_14SourceLocationE\", \"clang::Expr::isModifiableLvalue(clang::ASTContext&, clang::SourceLocation*) const\"},\n    {\"_Z15ClassifyUnnamedRN5clang10ASTContextENS_8QualTypeE\", \"ClassifyUnnamed(clang::ASTContext&, clang::QualType)\"},\n    {\"_ZNK5clang4Expr8EvaluateERNS0_10EvalResultERKNS_10ASTContextE\", \"clang::Expr::Evaluate(clang::Expr::EvalResult&, clang::ASTContext const&) const\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_116IntExprEvaluatorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZNK5clang4Expr26EvaluateAsBooleanConditionERbRKNS_10ASTContextE\", \"clang::Expr::EvaluateAsBooleanCondition(bool&, clang::ASTContext const&) const\"},\n    {\"_Z22HandleConversionToBoolPKN5clang4ExprERbR8EvalInfo\", \"HandleConversionToBool(clang::Expr const*, bool&, EvalInfo&)\"},\n    {\"_ZNK5clang4Expr16EvaluateAsLValueERNS0_10EvalResultERKNS_10ASTContextE\", \"clang::Expr::EvaluateAsLValue(clang::Expr::EvalResult&, clang::ASTContext const&) const\"},\n    {\"_ZNK5clang4Expr19EvaluateAsAnyLValueERNS0_10EvalResultERKNS_10ASTContextE\", \"clang::Expr::EvaluateAsAnyLValue(clang::Expr::EvalResult&, clang::ASTContext const&) const\"},\n    {\"_ZNK5clang4Expr13isEvaluatableERKNS_10ASTContextE\", \"clang::Expr::isEvaluatable(clang::ASTContext const&) const\"},\n    {\"_ZNK5clang4Expr14HasSideEffectsERKNS_10ASTContextE\", \"clang::Expr::HasSideEffects(clang::ASTContext const&) const\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_113HasSideEffectEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::HasSideEffect, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZNK5clang4Expr13EvaluateAsIntERKNS_10ASTContextE\", \"clang::Expr::EvaluateAsInt(clang::ASTContext const&) const\"},\n    {\"_ZNK5clang4Expr10EvalResult14isGlobalLValueEv\", \"clang::Expr::EvalResult::isGlobalLValue() const\"},\n    {\"_ZNK5clang4Expr21isIntegerConstantExprERN4llvm6APSIntERNS_10ASTContextEPNS_14SourceLocationEb\", \"clang::Expr::isIntegerConstantExpr(llvm::APSInt&, clang::ASTContext&, clang::SourceLocation*, bool) const\"},\n    {\"_Z8CheckICEPKN5clang4ExprERNS_10ASTContextE\", \"CheckICE(clang::Expr const*, clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator19VisitBinaryOperatorEPKN5clang14BinaryOperatorE\", \"(anonymous namespace)::IntExprEvaluator::VisitBinaryOperator(clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator13VisitCallExprEPN5clang8CallExprE\", \"(anonymous namespace)::IntExprEvaluator::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator18VisitUnaryOperatorEPKN5clang13UnaryOperatorE\", \"(anonymous namespace)::IntExprEvaluator::VisitUnaryOperator(clang::UnaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator7SuccessEyPKN5clang4ExprE\", \"(anonymous namespace)::IntExprEvaluator::Success(unsigned long long, clang::Expr const*)\"},\n    {\"_Z15EvaluateIntegerPKN5clang4ExprERN4llvm6APSIntER8EvalInfo\", \"EvaluateInteger(clang::Expr const*, llvm::APSInt&, EvalInfo&)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator19CheckReferencedDeclEPKN5clang4ExprEPKNS1_4DeclE\", \"(anonymous namespace)::IntExprEvaluator::CheckReferencedDecl(clang::Expr const*, clang::Decl const*)\"},\n    {\"_ZN12_GLOBAL__N_116IntExprEvaluator13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::IntExprEvaluator::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_Z18HandleIntToIntCastN5clang8QualTypeES0_RN4llvm6APSIntERKNS_10ASTContextE\", \"HandleIntToIntCast(clang::QualType, clang::QualType, llvm::APSInt&, clang::ASTContext const&)\"},\n    {\"_Z20HandleFloatToIntCastN5clang8QualTypeES0_RN4llvm7APFloatERKNS_10ASTContextE\", \"HandleFloatToIntCast(clang::QualType, clang::QualType, llvm::APFloat&, clang::ASTContext const&)\"},\n    {\"_Z22EvalPointerValueAsBoolRN12_GLOBAL__N_16LValueERb\", \"EvalPointerValueAsBool((anonymous namespace)::LValue&, bool&)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_119LValueExprEvaluatorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::LValueExprEvaluator, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_120ComplexExprEvaluatorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::ComplexExprEvaluator, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_120ComplexExprEvaluator19VisitBinaryOperatorEPKN5clang14BinaryOperatorE\", \"(anonymous namespace)::ComplexExprEvaluator::VisitBinaryOperator(clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_120ComplexExprEvaluator18VisitUnaryOperatorEPKN5clang13UnaryOperatorE\", \"(anonymous namespace)::ComplexExprEvaluator::VisitUnaryOperator(clang::UnaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_120ComplexExprEvaluator13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::ComplexExprEvaluator::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_118FloatExprEvaluatorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::FloatExprEvaluator, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_118FloatExprEvaluator19VisitBinaryOperatorEPKN5clang14BinaryOperatorE\", \"(anonymous namespace)::FloatExprEvaluator::VisitBinaryOperator(clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_118FloatExprEvaluator13VisitCallExprEPKN5clang8CallExprE\", \"(anonymous namespace)::FloatExprEvaluator::VisitCallExpr(clang::CallExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_118FloatExprEvaluator13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::FloatExprEvaluator::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_Z21TryEvaluateBuiltinNaNRKN5clang10ASTContextENS_8QualTypeEPKNS_4ExprEbRN4llvm7APFloatE\", \"TryEvaluateBuiltinNaN(clang::ASTContext const&, clang::QualType, clang::Expr const*, bool, llvm::APFloat&)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_120PointerExprEvaluatorEbE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::PointerExprEvaluator, bool>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_120PointerExprEvaluator19VisitBinaryOperatorEPKN5clang14BinaryOperatorE\", \"(anonymous namespace)::PointerExprEvaluator::VisitBinaryOperator(clang::BinaryOperator const*)\"},\n    {\"_ZN12_GLOBAL__N_120PointerExprEvaluator13VisitCastExprEPN5clang8CastExprE\", \"(anonymous namespace)::PointerExprEvaluator::VisitCastExpr(clang::CastExpr*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_119VectorExprEvaluatorENS_7APValueEE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::VectorExprEvaluator, clang::APValue>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_119VectorExprEvaluator13GetZeroVectorEN5clang8QualTypeE\", \"(anonymous namespace)::VectorExprEvaluator::GetZeroVector(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_119VectorExprEvaluator13VisitCastExprEPKN5clang8CastExprE\", \"(anonymous namespace)::VectorExprEvaluator::VisitCastExpr(clang::CastExpr const*)\"},\n    {\"_ZNK5clang10ASTContext12MakeIntValueEyNS_8QualTypeE\", \"clang::ASTContext::MakeIntValue(unsigned long long, clang::QualType) const\"},\n    {\"_ZN5clang7APValueC2ERKN4llvm6APSIntE\", \"clang::APValue::APValue(llvm::APSInt const&)\"},\n    {\"_ZNK4llvm5APIntcoEv\", \"llvm::APInt::operator~() const\"},\n    {\"_ZNK5clang7VarDecl17setEvaluatedValueERKNS_7APValueE\", \"clang::VarDecl::setEvaluatedValue(clang::APValue const&) const\"},\n    {\"_ZNK4llvm6APSIntanERKS0_\", \"llvm::APSInt::operator&(llvm::APSInt const&) const\"},\n    {\"_ZNK4llvm6APSInteoERKS0_\", \"llvm::APSInt::operator^(llvm::APSInt const&) const\"},\n    {\"_ZNK4llvm6APSIntorERKS0_\", \"llvm::APSInt::operator|(llvm::APSInt const&) const\"},\n    {\"_ZNK4llvm6APSIntdvERKS0_\", \"llvm::APSInt::operator/(llvm::APSInt const&) const\"},\n    {\"_ZNK4llvm6APSIntrmERKS0_\", \"llvm::APSInt::operator%(llvm::APSInt const&) const\"},\n    {\"_ZNK4llvm6APSIntlsEj\", \"llvm::APSInt::operator<<(unsigned int) const\"},\n    {\"_ZNK4llvm6APSIntrsEj\", \"llvm::APSInt::operator>>(unsigned int) const\"},\n    {\"_ZN5clang7APValue13setComplexIntERKN4llvm6APSIntES4_\", \"clang::APValue::setComplexInt(llvm::APSInt const&, llvm::APSInt const&)\"},\n    {\"_ZN5clang7APValue9setVectorEPKS0_j\", \"clang::APValue::setVector(clang::APValue const*, unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7APValueELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::APValue, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm11SmallVectorIN5clang7APValueELj4EEC2EjRKS2_\", \"llvm::SmallVector<clang::APValue, 4u>::SmallVector(unsigned int, clang::APValue const&)\"},\n    {\"_ZN4llvm6APSIntrSEj\", \"llvm::APSInt::operator>>=(unsigned int)\"},\n    {\"_ZN5clang26InheritanceHierarchyWriter9WriteNodeENS_8QualTypeEb\", \"clang::InheritanceHierarchyWriter::WriteNode(clang::QualType, bool)\"},\n    {\"_ZN5clang26InheritanceHierarchyWriter18WriteNodeReferenceENS_8QualTypeEb\", \"clang::InheritanceHierarchyWriter::WriteNodeReference(clang::QualType, bool)\"},\n    {\"_ZNK5clang13CXXRecordDecl15viewInheritanceERNS_10ASTContextE\", \"clang::CXXRecordDecl::viewInheritance(clang::ASTContext&) const\"},\n    {\"_ZN5clang26InheritanceHierarchyWriter10WriteGraphENS_8QualTypeE\", \"clang::InheritanceHierarchyWriter::WriteGraph(clang::QualType)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_iESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS4_ERKS4_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, int>, std::_Select1st<std::pair<clang::QualType const, int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<clang::QualType const, int> >, std::pair<clang::QualType const, int> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_iESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE16_M_insert_uniqueERKS4_\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, int>, std::_Select1st<std::pair<clang::QualType const, int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, int> > >::_M_insert_unique(std::pair<clang::QualType const, int> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeES1_St9_IdentityIS1_ENS0_16QualTypeOrderingESaIS1_EE16_M_insert_uniqueERKS1_\", \"std::_Rb_tree<clang::QualType, clang::QualType, std::_Identity<clang::QualType>, clang::QualTypeOrdering, std::allocator<clang::QualType> >::_M_insert_unique(clang::QualType const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeESt4pairIKS1_iESt10_Select1stIS4_ENS0_16QualTypeOrderingESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<clang::QualType, std::pair<clang::QualType const, int>, std::_Select1st<std::pair<clang::QualType const, int> >, clang::QualTypeOrdering, std::allocator<std::pair<clang::QualType const, int> > >::_M_erase(std::_Rb_tree_node<std::pair<clang::QualType const, int> >*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang8QualTypeES1_St9_IdentityIS1_ENS0_16QualTypeOrderingESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E\", \"std::_Rb_tree<clang::QualType, clang::QualType, std::_Identity<clang::QualType>, clang::QualTypeOrdering, std::allocator<clang::QualType> >::_M_erase(std::_Rb_tree_node<clang::QualType>*)\"},\n    {\"_ZN5clang19CreateItaniumCXXABIERNS_10ASTContextE\", \"clang::CreateItaniumCXXABI(clang::ASTContext&)\"},\n    {\"_ZN5clang15CreateARMCXXABIERNS_10ASTContextE\", \"clang::CreateARMCXXABI(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABID1Ev\", \"(anonymous namespace)::ARMCXXABI::~ARMCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_19ARMCXXABID0Ev\", \"(anonymous namespace)::ARMCXXABI::~ARMCXXABI()\"},\n    {\"_ZNK12_GLOBAL__N_113ItaniumCXXABI20getMemberPointerSizeEPKN5clang17MemberPointerTypeE\", \"(anonymous namespace)::ItaniumCXXABI::getMemberPointerSize(clang::MemberPointerType const*) const\"},\n    {\"_ZNK12_GLOBAL__N_113ItaniumCXXABI24getDefaultMethodCallConvEv\", \"(anonymous namespace)::ItaniumCXXABI::getDefaultMethodCallConv() const\"},\n    {\"_ZNK12_GLOBAL__N_113ItaniumCXXABI13isNearlyEmptyEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::ItaniumCXXABI::isNearlyEmpty(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABID1Ev\", \"(anonymous namespace)::ItaniumCXXABI::~ItaniumCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_113ItaniumCXXABID0Ev\", \"(anonymous namespace)::ItaniumCXXABI::~ItaniumCXXABI()\"},\n    {\"_ZN5clang26createItaniumMangleContextERNS_10ASTContextERNS_10DiagnosticE\", \"clang::createItaniumMangleContext(clang::ASTContext&, clang::Diagnostic&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContextD1Ev\", \"(anonymous namespace)::ItaniumMangleContext::~ItaniumMangleContext()\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContextD0Ev\", \"(anonymous namespace)::ItaniumMangleContext::~ItaniumMangleContext()\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext16startNewFunctionEv\", \"(anonymous namespace)::ItaniumMangleContext::startNewFunction()\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext20shouldMangleDeclNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::ItaniumMangleContext::shouldMangleDeclName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext10mangleNameEPKN5clang9NamedDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleName(clang::NamedDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext11mangleThunkEPKN5clang13CXXMethodDeclERKNS1_9ThunkInfoERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleThunk(clang::CXXMethodDecl const*, clang::ThunkInfo const&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext18mangleCXXDtorThunkEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERKNS1_14ThisAdjustmentERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXDtorThunk(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::ThisAdjustment const&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext24mangleReferenceTemporaryEPKN5clang7VarDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleReferenceTemporary(clang::VarDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext15mangleCXXVTableEPKN5clang13CXXRecordDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXVTable(clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext12mangleCXXVTTEPKN5clang13CXXRecordDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXVTT(clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext19mangleCXXCtorVTableEPKN5clang13CXXRecordDeclExS4_RN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXCtorVTable(clang::CXXRecordDecl const*, long long, clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext13mangleCXXRTTIEN5clang8QualTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXRTTI(clang::QualType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext17mangleCXXRTTINameEN5clang8QualTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXRTTIName(clang::QualType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext13mangleCXXCtorEPKN5clang18CXXConstructorDeclENS1_11CXXCtorTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXCtor(clang::CXXConstructorDecl const*, clang::CXXCtorType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext13mangleCXXDtorEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleCXXDtor(clang::CXXDestructorDecl const*, clang::CXXDtorType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_120ItaniumMangleContext26mangleItaniumGuardVariableEPKN5clang7VarDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::ItaniumMangleContext::mangleItaniumGuardVariable(clang::VarDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler10mangleNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_117GetLocalClassDeclEPKN5clang9NamedDeclE\", \"(anonymous namespace)::GetLocalClassDecl(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler15mangleLocalNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleLocalName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler26mangleUnscopedTemplateNameEPKN5clang12TemplateDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleUnscopedTemplateName(clang::TemplateDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler16mangleNestedNameEPKN5clang9NamedDeclEPKNS1_11DeclContextEb\", \"(anonymous namespace)::CXXNameMangler::mangleNestedName(clang::NamedDecl const*, clang::DeclContext const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler16mangleQualifiersEN5clang10QualifiersE\", \"(anonymous namespace)::CXXNameMangler::mangleQualifiers(clang::Qualifiers)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler20mangleTemplatePrefixEPKN5clang12TemplateDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleTemplatePrefix(clang::TemplateDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler12manglePrefixEPKN5clang11DeclContextEb\", \"(anonymous namespace)::CXXNameMangler::manglePrefix(clang::DeclContext const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler21mangleUnqualifiedNameEPKN5clang9NamedDeclENS1_15DeclarationNameEj\", \"(anonymous namespace)::CXXNameMangler::mangleUnqualifiedName(clang::NamedDecl const*, clang::DeclarationName, unsigned int)\"},\n    {\"_Z24FindFirstNamedDataMemberPKN5clang10RecordDeclE\", \"FindFirstNamedDataMember(clang::RecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler10mangleTypeEN5clang8QualTypeE\", \"(anonymous namespace)::CXXNameMangler::mangleType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler18mangleOperatorNameEN5clang22OverloadedOperatorKindEj\", \"(anonymous namespace)::CXXNameMangler::mangleOperatorName(clang::OverloadedOperatorKind, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler18mangleSubstitutionEN5clang8QualTypeE\", \"(anonymous namespace)::CXXNameMangler::mangleSubstitution(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler10mangleTypeEPKN5clang10VectorTypeE\", \"(anonymous namespace)::CXXNameMangler::mangleType(clang::VectorType const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler15addSubstitutionEN5clang8QualTypeE\", \"(anonymous namespace)::CXXNameMangler::addSubstitution(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler15addSubstitutionEPKN5clang9NamedDeclE\", \"(anonymous namespace)::CXXNameMangler::addSubstitution(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler20mangleTemplatePrefixEN5clang12TemplateNameE\", \"(anonymous namespace)::CXXNameMangler::mangleTemplatePrefix(clang::TemplateName)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler18mangleTemplateArgsEN5clang12TemplateNameEPKNS1_16TemplateArgumentEj\", \"(anonymous namespace)::CXXNameMangler::mangleTemplateArgs(clang::TemplateName, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler17mangleTemplateArgEPKN5clang9NamedDeclERKNS1_16TemplateArgumentE\", \"(anonymous namespace)::CXXNameMangler::mangleTemplateArg(clang::NamedDecl const*, clang::TemplateArgument const&)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler10mangleTypeEN5clang12TemplateNameE\", \"(anonymous namespace)::CXXNameMangler::mangleType(clang::TemplateName)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler16mangleExpressionEPKN5clang4ExprEj\", \"(anonymous namespace)::CXXNameMangler::mangleExpression(clang::Expr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler20mangleIntegerLiteralEN5clang8QualTypeERKN4llvm6APSIntE\", \"(anonymous namespace)::CXXNameMangler::mangleIntegerLiteral(clang::QualType, llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler6mangleEPKN5clang9NamedDeclEN4llvm9StringRefE\", \"(anonymous namespace)::CXXNameMangler::mangle(clang::NamedDecl const*, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler22mangleFunctionEncodingEPKN5clang12FunctionDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleFunctionEncoding(clang::FunctionDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler22mangleBareFunctionTypeEPKN5clang12FunctionTypeEb\", \"(anonymous namespace)::CXXNameMangler::mangleBareFunctionType(clang::FunctionType const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler12mangleNumberERKN4llvm6APSIntE\", \"(anonymous namespace)::CXXNameMangler::mangleNumber(llvm::APSInt const&)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler11mangleFloatERKN4llvm7APFloatE\", \"(anonymous namespace)::CXXNameMangler::mangleFloat(llvm::APFloat const&)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler21mangleUnresolvedScopeEPN5clang19NestedNameSpecifierE\", \"(anonymous namespace)::CXXNameMangler::mangleUnresolvedScope(clang::NestedNameSpecifier*)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler18mangleSubstitutionEN5clang12TemplateNameE\", \"(anonymous namespace)::CXXNameMangler::mangleSubstitution(clang::TemplateName)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler15addSubstitutionEN5clang12TemplateNameE\", \"(anonymous namespace)::CXXNameMangler::addSubstitution(clang::TemplateName)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler18mangleSubstitutionEm\", \"(anonymous namespace)::CXXNameMangler::mangleSubstitution(unsigned long)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler26mangleStandardSubstitutionEPKN5clang9NamedDeclE\", \"(anonymous namespace)::CXXNameMangler::mangleStandardSubstitution(clang::NamedDecl const*)\"},\n    {\"_Z5isStdPKN5clang13NamespaceDeclE\", \"isStd(clang::NamespaceDecl const*)\"},\n    {\"_Z20isCharSpecializationN5clang8QualTypeEPKc\", \"isCharSpecialization(clang::QualType, char const*)\"},\n    {\"_Z26isStreamCharSpecializationILm14EEbPKN5clang31ClassTemplateSpecializationDeclERAT__Kc\", \"bool isStreamCharSpecialization<14ul>(clang::ClassTemplateSpecializationDecl const*, char const (&) [14ul])\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler10mangleNameEPKN5clang12TemplateDeclEPKNS1_16TemplateArgumentEj\", \"(anonymous namespace)::CXXNameMangler::mangleName(clang::TemplateDecl const*, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114CXXNameMangler16mangleCallOffsetExx\", \"(anonymous namespace)::CXXNameMangler::mangleCallOffset(long long, long long)\"},\n    {\"_ZN4llvm8DenseMapImjNS_12DenseMapInfoImEENS1_IjEEE16InsertIntoBucketERKmRKjPSt4pairImjE\", \"llvm::DenseMap<unsigned long, unsigned int, llvm::DenseMapInfo<unsigned long>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(unsigned long const&, unsigned int const&, std::pair<unsigned long, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapImjNS_12DenseMapInfoImEENS1_IjEEE4growEj\", \"llvm::DenseMap<unsigned long, unsigned int, llvm::DenseMapInfo<unsigned long>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_12AsmLabelAttrEEEPT_v\", \"clang::AsmLabelAttr* clang::Decl::getAttr<clang::AsmLabelAttr>() const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7TagDeclEyNS_12DenseMapInfoIS4_EENS5_IyEEE6insertERKSt4pairIS4_yE\", \"llvm::DenseMap<clang::TagDecl const*, unsigned long long, llvm::DenseMapInfo<clang::TagDecl const*>, llvm::DenseMapInfo<unsigned long long> >::insert(std::pair<clang::TagDecl const*, unsigned long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7TagDeclEyNS_12DenseMapInfoIS4_EENS5_IyEEE16InsertIntoBucketERKS4_RKyPSt4pairIS4_yE\", \"llvm::DenseMap<clang::TagDecl const*, unsigned long long, llvm::DenseMapInfo<clang::TagDecl const*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(clang::TagDecl const* const&, unsigned long long const&, std::pair<clang::TagDecl const*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang7TagDeclEyNS_12DenseMapInfoIS4_EENS5_IyEEE4growEj\", \"llvm::DenseMap<clang::TagDecl const*, unsigned long long, llvm::DenseMapInfo<clang::TagDecl const*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9NamedDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::NamedDecl const*, unsigned int, llvm::DenseMapInfo<clang::NamedDecl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::NamedDecl const* const&, unsigned int const&, std::pair<clang::NamedDecl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9NamedDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::NamedDecl const*, unsigned int, llvm::DenseMapInfo<clang::NamedDecl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang13MangleContext16startNewFunctionEv\", \"clang::MangleContext::startNewFunction()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<clang::BlockDecl const*, unsigned int, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN5clang13MangleContextD1Ev\", \"clang::MangleContext::~MangleContext()\"},\n    {\"_ZN5clang13MangleContextD0Ev\", \"clang::MangleContext::~MangleContext()\"},\n    {\"_ZN5clang13MangleContext26mangleItaniumGuardVariableEPKNS_7VarDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleItaniumGuardVariable(clang::VarDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext17mangleGlobalBlockEPKNS_9BlockDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleGlobalBlock(clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext15mangleCtorBlockEPKNS_18CXXConstructorDeclENS_11CXXCtorTypeEPKNS_9BlockDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleCtorBlock(clang::CXXConstructorDecl const*, clang::CXXCtorType, clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_119mangleFunctionBlockERN5clang13MangleContextEN4llvm9StringRefEPKNS0_9BlockDeclERNS3_15SmallVectorImplIcEE\", \"(anonymous namespace)::mangleFunctionBlock(clang::MangleContext&, llvm::StringRef, clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext15mangleDtorBlockEPKNS_17CXXDestructorDeclENS_11CXXDtorTypeEPKNS_9BlockDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleDtorBlock(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext11mangleBlockEPKNS_11DeclContextEPKNS_9BlockDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleBlock(clang::DeclContext const*, clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext20mangleObjCMethodNameEPKNS_14ObjCMethodDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleObjCMethodName(clang::ObjCMethodDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang13MangleContext11mangleBlockEPKNS_9BlockDeclERN4llvm15SmallVectorImplIcEE\", \"clang::MangleContext::mangleBlock(clang::BlockDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE6insertERKSt4pairIS4_jE\", \"llvm::DenseMap<clang::BlockDecl const*, unsigned int, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<clang::BlockDecl const*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<clang::BlockDecl const*, unsigned int, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(clang::BlockDecl const* const&, unsigned int const&, std::pair<clang::BlockDecl const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9BlockDeclEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<clang::BlockDecl const*, unsigned int, llvm::DenseMapInfo<clang::BlockDecl const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN5clang21CreateMicrosoftCXXABIERNS_10ASTContextE\", \"clang::CreateMicrosoftCXXABI(clang::ASTContext&)\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABID1Ev\", \"(anonymous namespace)::MicrosoftCXXABI::~MicrosoftCXXABI()\"},\n    {\"_ZN12_GLOBAL__N_115MicrosoftCXXABID0Ev\", \"(anonymous namespace)::MicrosoftCXXABI::~MicrosoftCXXABI()\"},\n    {\"_ZNK12_GLOBAL__N_115MicrosoftCXXABI20getMemberPointerSizeEPKN5clang17MemberPointerTypeE\", \"(anonymous namespace)::MicrosoftCXXABI::getMemberPointerSize(clang::MemberPointerType const*) const\"},\n    {\"_ZNK12_GLOBAL__N_115MicrosoftCXXABI24getDefaultMethodCallConvEv\", \"(anonymous namespace)::MicrosoftCXXABI::getDefaultMethodCallConv() const\"},\n    {\"_ZNK12_GLOBAL__N_115MicrosoftCXXABI13isNearlyEmptyEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::MicrosoftCXXABI::isNearlyEmpty(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN5clang28createMicrosoftMangleContextERNS_10ASTContextERNS_10DiagnosticE\", \"clang::createMicrosoftMangleContext(clang::ASTContext&, clang::Diagnostic&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContextD1Ev\", \"(anonymous namespace)::MicrosoftMangleContext::~MicrosoftMangleContext()\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContextD0Ev\", \"(anonymous namespace)::MicrosoftMangleContext::~MicrosoftMangleContext()\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext20shouldMangleDeclNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::MicrosoftMangleContext::shouldMangleDeclName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext10mangleNameEPKN5clang9NamedDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleName(clang::NamedDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext11mangleThunkEPKN5clang13CXXMethodDeclERKNS1_9ThunkInfoERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleThunk(clang::CXXMethodDecl const*, clang::ThunkInfo const&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext18mangleCXXDtorThunkEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERKNS1_14ThisAdjustmentERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXDtorThunk(clang::CXXDestructorDecl const*, clang::CXXDtorType, clang::ThisAdjustment const&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext24mangleReferenceTemporaryEPKN5clang7VarDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleReferenceTemporary(clang::VarDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext15mangleCXXVTableEPKN5clang13CXXRecordDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXVTable(clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext12mangleCXXVTTEPKN5clang13CXXRecordDeclERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXVTT(clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext19mangleCXXCtorVTableEPKN5clang13CXXRecordDeclExS4_RN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXCtorVTable(clang::CXXRecordDecl const*, long long, clang::CXXRecordDecl const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext13mangleCXXRTTIEN5clang8QualTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXRTTI(clang::QualType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext17mangleCXXRTTINameEN5clang8QualTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXRTTIName(clang::QualType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext13mangleCXXCtorEPKN5clang18CXXConstructorDeclENS1_11CXXCtorTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXCtor(clang::CXXConstructorDecl const*, clang::CXXCtorType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_122MicrosoftMangleContext13mangleCXXDtorEPKN5clang17CXXDestructorDeclENS1_11CXXDtorTypeERN4llvm15SmallVectorImplIcEE\", \"(anonymous namespace)::MicrosoftMangleContext::mangleCXXDtor(clang::CXXDestructorDecl const*, clang::CXXDtorType, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler10mangleNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler10mangleTypeEN5clang8QualTypeE\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler16mangleQualifiersEN5clang10QualifiersEb\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleQualifiers(clang::Qualifiers, bool)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler21mangleExtraDimensionsEN5clang8QualTypeE\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleExtraDimensions(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler12mangleNumberEx\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleNumber(long long)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler10mangleTypeEPKN5clang7TagTypeE\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleType(clang::TagType const*)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler10mangleTypeEPKN5clang12FunctionTypeEPKNS1_12FunctionDeclEbb\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleType(clang::FunctionType const*, clang::FunctionDecl const*, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler21mangleUnqualifiedNameEPKN5clang9NamedDeclE\", \"(anonymous namespace)::MicrosoftCXXNameMangler::mangleUnqualifiedName(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_123MicrosoftCXXNameMangler13manglePostfixEPKN5clang11DeclContextEb\", \"(anonymous namespace)::MicrosoftCXXNameMangler::manglePostfix(clang::DeclContext const*, bool)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_5APIntELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::APInt, false>::grow(unsigned long)\"},\n    {\"_ZN5clang19NestedNameSpecifier12FindOrInsertERKNS_10ASTContextERKS0_\", \"clang::NestedNameSpecifier::FindOrInsert(clang::ASTContext const&, clang::NestedNameSpecifier const&)\"},\n    {\"_ZN5clang19NestedNameSpecifier6CreateERKNS_10ASTContextEPS0_PNS_14IdentifierInfoE\", \"clang::NestedNameSpecifier::Create(clang::ASTContext const&, clang::NestedNameSpecifier*, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang19NestedNameSpecifier6CreateERKNS_10ASTContextEPS0_PNS_13NamespaceDeclE\", \"clang::NestedNameSpecifier::Create(clang::ASTContext const&, clang::NestedNameSpecifier*, clang::NamespaceDecl*)\"},\n    {\"_ZN5clang19NestedNameSpecifier6CreateERKNS_10ASTContextEPS0_bPKNS_4TypeE\", \"clang::NestedNameSpecifier::Create(clang::ASTContext const&, clang::NestedNameSpecifier*, bool, clang::Type const*)\"},\n    {\"_ZN5clang19NestedNameSpecifier6CreateERKNS_10ASTContextEPNS_14IdentifierInfoE\", \"clang::NestedNameSpecifier::Create(clang::ASTContext const&, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang19NestedNameSpecifier15GlobalSpecifierERKNS_10ASTContextE\", \"clang::NestedNameSpecifier::GlobalSpecifier(clang::ASTContext const&)\"},\n    {\"_ZNK5clang19NestedNameSpecifier11isDependentEv\", \"clang::NestedNameSpecifier::isDependent() const\"},\n    {\"_ZNK5clang19NestedNameSpecifier31containsUnexpandedParameterPackEv\", \"clang::NestedNameSpecifier::containsUnexpandedParameterPack() const\"},\n    {\"_ZNK5clang19NestedNameSpecifier5printERN4llvm11raw_ostreamERKNS_14PrintingPolicyE\", \"clang::NestedNameSpecifier::print(llvm::raw_ostream&, clang::PrintingPolicy const&) const\"},\n    {\"_ZN5clang19NestedNameSpecifier4dumpERKNS_11LangOptionsE\", \"clang::NestedNameSpecifier::dump(clang::LangOptions const&)\"},\n    {\"_ZN5clang9ParentMapC1EPNS_4StmtE\", \"clang::ParentMap::ParentMap(clang::Stmt*)\"},\n    {\"_ZN5clang9ParentMapC2EPNS_4StmtE\", \"clang::ParentMap::ParentMap(clang::Stmt*)\"},\n    {\"_Z14BuildParentMapRN4llvm8DenseMapIPN5clang4StmtES3_NS_12DenseMapInfoIS3_EES5_EES3_\", \"BuildParentMap(llvm::DenseMap<clang::Stmt*, clang::Stmt*, llvm::DenseMapInfo<clang::Stmt*>, llvm::DenseMapInfo<clang::Stmt*> >&, clang::Stmt*)\"},\n    {\"_ZN5clang9ParentMapD1Ev\", \"clang::ParentMap::~ParentMap()\"},\n    {\"_ZN5clang9ParentMapD2Ev\", \"clang::ParentMap::~ParentMap()\"},\n    {\"_ZN5clang9ParentMap7addStmtEPNS_4StmtE\", \"clang::ParentMap::addStmt(clang::Stmt*)\"},\n    {\"_ZNK5clang9ParentMap9getParentEPNS_4StmtE\", \"clang::ParentMap::getParent(clang::Stmt*) const\"},\n    {\"_ZNK5clang9ParentMap21getParentIgnoreParensEPNS_4StmtE\", \"clang::ParentMap::getParentIgnoreParens(clang::Stmt*) const\"},\n    {\"_ZNK5clang9ParentMap14isConsumedExprEPNS_4ExprE\", \"clang::ParentMap::isConsumedExpr(clang::Expr*) const\"},\n    {\"_ZN5clang15ASTRecordLayout7DestroyERNS_10ASTContextE\", \"clang::ASTRecordLayout::Destroy(clang::ASTContext&)\"},\n    {\"_ZN5clang15ASTRecordLayoutC1ERKNS_10ASTContextENS_9CharUnitsEjjPKyj\", \"clang::ASTRecordLayout::ASTRecordLayout(clang::ASTContext const&, clang::CharUnits, unsigned int, unsigned int, unsigned long long const*, unsigned int)\"},\n    {\"_ZN5clang15ASTRecordLayoutC2ERKNS_10ASTContextENS_9CharUnitsEjjPKyj\", \"clang::ASTRecordLayout::ASTRecordLayout(clang::ASTContext const&, clang::CharUnits, unsigned int, unsigned int, unsigned long long const*, unsigned int)\"},\n    {\"_ZN5clang15ASTRecordLayoutC1ERKNS_10ASTContextENS_9CharUnitsEjyPKyjS4_S4_S4_PKNS_13CXXRecordDeclEbRKN4llvm8DenseMapIS9_S4_NSA_12DenseMapInfoIS9_EENSC_IS4_EEEESH_\", \"clang::ASTRecordLayout::ASTRecordLayout(clang::ASTContext const&, clang::CharUnits, unsigned int, unsigned long long, unsigned long long const*, unsigned int, clang::CharUnits, clang::CharUnits, clang::CharUnits, clang::CXXRecordDecl const*, bool, llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> > const&, llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> > const&)\"},\n    {\"_ZN5clang15ASTRecordLayoutC2ERKNS_10ASTContextENS_9CharUnitsEjyPKyjS4_S4_S4_PKNS_13CXXRecordDeclEbRKN4llvm8DenseMapIS9_S4_NSA_12DenseMapInfoIS9_EENSC_IS4_EEEESH_\", \"clang::ASTRecordLayout::ASTRecordLayout(clang::ASTContext const&, clang::CharUnits, unsigned int, unsigned long long, unsigned long long const*, unsigned int, clang::CharUnits, clang::CharUnits, clang::CharUnits, clang::CXXRecordDecl const*, bool, llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> > const&, llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS1_9CharUnitsENS_12DenseMapInfoIS4_EENS6_IS5_EEE8CopyFromERKS9_\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> >::CopyFrom(llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> > const&)\"},\n    {\"_ZNK5clang10ASTContext18getASTRecordLayoutEPKNS_10RecordDeclE\", \"clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) const\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilderD1Ev\", \"(anonymous namespace)::RecordLayoutBuilder::~RecordLayoutBuilder()\"},\n    {\"_ZNK5clang10ASTContext16DumpRecordLayoutEPKNS_10RecordDeclERN4llvm11raw_ostreamE\", \"clang::ASTContext::DumpRecordLayout(clang::RecordDecl const*, llvm::raw_ostream&) const\"},\n    {\"_ZN5clang10ASTContext14getKeyFunctionEPKNS_13CXXRecordDeclE\", \"clang::ASTContext::getKeyFunction(clang::CXXRecordDecl const*)\"},\n    {\"_ZNK5clang10ASTContext13getObjCLayoutEPKNS_17ObjCInterfaceDeclEPKNS_22ObjCImplementationDeclE\", \"clang::ASTContext::getObjCLayout(clang::ObjCInterfaceDecl const*, clang::ObjCImplementationDecl const*) const\"},\n    {\"_Z19DumpCXXRecordLayoutRN4llvm11raw_ostreamEPKN5clang13CXXRecordDeclERKNS2_10ASTContextENS2_9CharUnitsEjPKcb\", \"DumpCXXRecordLayout(llvm::raw_ostream&, clang::CXXRecordDecl const*, clang::ASTContext const&, clang::CharUnits, unsigned int, char const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder16InitializeLayoutEPKN5clang4DeclE\", \"(anonymous namespace)::RecordLayoutBuilder::InitializeLayout(clang::Decl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder11LayoutFieldEPKN5clang9FieldDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::LayoutField(clang::FieldDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder12FinishLayoutEPKN5clang9NamedDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::FinishLayout(clang::NamedDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder17CheckFieldPaddingEyyyjbPKN5clang9FieldDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::CheckFieldPadding(unsigned long long, unsigned long long, unsigned long long, unsigned int, bool, clang::FieldDecl const*)\"},\n    {\"_ZNK12_GLOBAL__N_117EmptySubobjectMap30CanPlaceFieldSubobjectAtOffsetEPKN5clang9FieldDeclENS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::CanPlaceFieldSubobjectAtOffset(clang::FieldDecl const*, clang::CharUnits) const\"},\n    {\"_ZN12_GLOBAL__N_117EmptySubobjectMap26UpdateEmptyFieldSubobjectsEPKN5clang9FieldDeclENS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::UpdateEmptyFieldSubobjects(clang::FieldDecl const*, clang::CharUnits)\"},\n    {\"_ZN12_GLOBAL__N_117EmptySubobjectMap26UpdateEmptyFieldSubobjectsEPKN5clang13CXXRecordDeclES4_NS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::UpdateEmptyFieldSubobjects(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*, clang::CharUnits)\"},\n    {\"_ZN12_GLOBAL__N_117EmptySubobjectMap20AddSubobjectAtOffsetEPKN5clang13CXXRecordDeclENS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::AddSubobjectAtOffset(clang::CXXRecordDecl const*, clang::CharUnits)\"},\n    {\"_ZNK12_GLOBAL__N_117EmptySubobjectMap30CanPlaceFieldSubobjectAtOffsetEPKN5clang13CXXRecordDeclES4_NS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::CanPlaceFieldSubobjectAtOffset(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*, clang::CharUnits) const\"},\n    {\"_ZNK12_GLOBAL__N_117EmptySubobjectMap25CanPlaceSubobjectAtOffsetEPKN5clang13CXXRecordDeclENS1_9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::CanPlaceSubobjectAtOffset(clang::CXXRecordDecl const*, clang::CharUnits) const\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilderD2Ev\", \"(anonymous namespace)::RecordLayoutBuilder::~RecordLayoutBuilder()\"},\n    {\"_ZNK12_GLOBAL__N_119RecordLayoutBuilder22GetVirtualPointersSizeEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::GetVirtualPointersSize(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilderD0Ev\", \"(anonymous namespace)::RecordLayoutBuilder::~RecordLayoutBuilder()\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder18LayoutVirtualBasesEPKN5clang13CXXRecordDeclES4_\", \"(anonymous namespace)::RecordLayoutBuilder::LayoutVirtualBases(clang::CXXRecordDecl const*, clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder10LayoutBaseEPKNS_17BaseSubobjectInfoE\", \"(anonymous namespace)::RecordLayoutBuilder::LayoutBase((anonymous namespace)::BaseSubobjectInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder28AddPrimaryVirtualBaseOffsetsEPKNS_17BaseSubobjectInfoEN5clang9CharUnitsE\", \"(anonymous namespace)::RecordLayoutBuilder::AddPrimaryVirtualBaseOffsets((anonymous namespace)::BaseSubobjectInfo const*, clang::CharUnits)\"},\n    {\"_ZN12_GLOBAL__N_117EmptySubobjectMap29CanPlaceBaseSubobjectAtOffsetEPKNS_17BaseSubobjectInfoEN5clang9CharUnitsE\", \"(anonymous namespace)::EmptySubobjectMap::CanPlaceBaseSubobjectAtOffset((anonymous namespace)::BaseSubobjectInfo const*, clang::CharUnits)\"},\n    {\"_ZN12_GLOBAL__N_117EmptySubobjectMap25UpdateEmptyBaseSubobjectsEPKNS_17BaseSubobjectInfoEN5clang9CharUnitsEb\", \"(anonymous namespace)::EmptySubobjectMap::UpdateEmptyBaseSubobjects((anonymous namespace)::BaseSubobjectInfo const*, clang::CharUnits, bool)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder24ComputeBaseSubobjectInfoEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::ComputeBaseSubobjectInfo(clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder24ComputeBaseSubobjectInfoEPKN5clang13CXXRecordDeclEbPNS_17BaseSubobjectInfoE\", \"(anonymous namespace)::RecordLayoutBuilder::ComputeBaseSubobjectInfo(clang::CXXRecordDecl const*, bool, (anonymous namespace)::BaseSubobjectInfo*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPN12_GLOBAL__N_117BaseSubobjectInfoENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, (anonymous namespace)::BaseSubobjectInfo*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<(anonymous namespace)::BaseSubobjectInfo*> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, (anonymous namespace)::BaseSubobjectInfo* const&, std::pair<clang::CXXRecordDecl const*, (anonymous namespace)::BaseSubobjectInfo*>*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilder18SelectPrimaryVBaseEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::RecordLayoutBuilder::SelectPrimaryVBase(clang::CXXRecordDecl const*)\"},\n    {\"_ZN12_GLOBAL__N_119RecordLayoutBuilderC2ERKN5clang10ASTContextEPNS_17EmptySubobjectMapE\", \"(anonymous namespace)::RecordLayoutBuilder::RecordLayoutBuilder(clang::ASTContext const&, (anonymous namespace)::EmptySubobjectMap*)\"},\n    {\"_ZNK12_GLOBAL__N_121MSRecordLayoutBuilder22GetVirtualPointersSizeEPKN5clang13CXXRecordDeclE\", \"(anonymous namespace)::MSRecordLayoutBuilder::GetVirtualPointersSize(clang::CXXRecordDecl const*) const\"},\n    {\"_ZN12_GLOBAL__N_121MSRecordLayoutBuilderD1Ev\", \"(anonymous namespace)::MSRecordLayoutBuilder::~MSRecordLayoutBuilder()\"},\n    {\"_ZN12_GLOBAL__N_121MSRecordLayoutBuilderD0Ev\", \"(anonymous namespace)::MSRecordLayoutBuilder::~MSRecordLayoutBuilder()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPKNS1_13CXXMethodDeclENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CXXMethodDecl const*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CXXMethodDecl const*> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, clang::CXXMethodDecl const* const&, std::pair<clang::CXXRecordDecl const*, clang::CXXMethodDecl const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclEPKNS1_13CXXMethodDeclENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CXXMethodDecl const*, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CXXMethodDecl const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang10RecordDeclEPKNS1_15ASTRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::RecordDecl const*, clang::ASTRecordLayout const*, llvm::DenseMapInfo<clang::RecordDecl const*>, llvm::DenseMapInfo<clang::ASTRecordLayout const*> >::InsertIntoBucket(clang::RecordDecl const* const&, clang::ASTRecordLayout const* const&, std::pair<clang::RecordDecl const*, clang::ASTRecordLayout const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang10RecordDeclEPKNS1_15ASTRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::RecordDecl const*, clang::ASTRecordLayout const*, llvm::DenseMapInfo<clang::RecordDecl const*>, llvm::DenseMapInfo<clang::ASTRecordLayout const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17ObjCContainerDeclEPKNS1_15ASTRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::ObjCContainerDecl const*, clang::ASTRecordLayout const*, llvm::DenseMapInfo<clang::ObjCContainerDecl const*>, llvm::DenseMapInfo<clang::ASTRecordLayout const*> >::InsertIntoBucket(clang::ObjCContainerDecl const* const&, clang::ASTRecordLayout const* const&, std::pair<clang::ObjCContainerDecl const*, clang::ASTRecordLayout const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang17ObjCContainerDeclEPKNS1_15ASTRecordLayoutENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::ObjCContainerDecl const*, clang::ASTRecordLayout const*, llvm::DenseMapInfo<clang::ObjCContainerDecl const*>, llvm::DenseMapInfo<clang::ASTRecordLayout const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS1_9CharUnitsENS_12DenseMapInfoIS4_EENS6_IS5_EEE16InsertIntoBucketERKS4_RKS5_PSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> >::InsertIntoBucket(clang::CXXRecordDecl const* const&, clang::CharUnits const&, std::pair<clang::CXXRecordDecl const*, clang::CharUnits>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS1_9CharUnitsENS_12DenseMapInfoIS4_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> >::grow(unsigned int)\"},\n    {\"_ZSt6__findIPPKN5clang13CXXRecordDeclES3_ET_S5_S5_RKT0_St26random_access_iterator_tag\", \"clang::CXXRecordDecl const** std::__find<clang::CXXRecordDecl const**, clang::CXXRecordDecl const*>(clang::CXXRecordDecl const**, clang::CXXRecordDecl const**, clang::CXXRecordDecl const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIN5clang9CharUnitsENS_11SmallVectorIPKNS1_13CXXRecordDeclELj1EEENS_12DenseMapInfoIS2_EENS8_IS7_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<clang::CharUnits, llvm::SmallVector<clang::CXXRecordDecl const*, 1u>, llvm::DenseMapInfo<clang::CharUnits>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl const*, 1u> > >::FindAndConstruct(clang::CharUnits const&)\"},\n    {\"_ZN4llvm8DenseMapIN5clang9CharUnitsENS_11SmallVectorIPKNS1_13CXXRecordDeclELj1EEENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<clang::CharUnits, llvm::SmallVector<clang::CXXRecordDecl const*, 1u>, llvm::DenseMapInfo<clang::CharUnits>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl const*, 1u> > >::InsertIntoBucket(clang::CharUnits const&, llvm::SmallVector<clang::CXXRecordDecl const*, 1u> const&, std::pair<clang::CharUnits, llvm::SmallVector<clang::CXXRecordDecl const*, 1u> >*)\"},\n    {\"_ZN4llvm8DenseMapIN5clang9CharUnitsENS_11SmallVectorIPKNS1_13CXXRecordDeclELj1EEENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::CharUnits, llvm::SmallVector<clang::CXXRecordDecl const*, 1u>, llvm::DenseMapInfo<clang::CharUnits>, llvm::DenseMapInfo<llvm::SmallVector<clang::CXXRecordDecl const*, 1u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKN5clang13CXXRecordDeclEEaSERKS5_\", \"llvm::SmallVectorImpl<clang::CXXRecordDecl const*>::operator=(llvm::SmallVectorImpl<clang::CXXRecordDecl const*> const&)\"},\n    {\"_ZSt6__findIPKPKN5clang13CXXRecordDeclES3_ET_S6_S6_RKT0_St26random_access_iterator_tag\", \"clang::CXXRecordDecl const* const* std::__find<clang::CXXRecordDecl const* const*, clang::CXXRecordDecl const*>(clang::CXXRecordDecl const* const*, clang::CXXRecordDecl const* const*, clang::CXXRecordDecl const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNK5clang4Decl7getAttrINS_21MaxFieldAlignmentAttrEEEPT_v\", \"clang::MaxFieldAlignmentAttr* clang::Decl::getAttr<clang::MaxFieldAlignmentAttr>() const\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang13CXXRecordDeclENS1_9CharUnitsENS_12DenseMapInfoIS4_EENS6_IS5_EEE6insertERKSt4pairIS4_S5_E\", \"llvm::DenseMap<clang::CXXRecordDecl const*, clang::CharUnits, llvm::DenseMapInfo<clang::CXXRecordDecl const*>, llvm::DenseMapInfo<clang::CharUnits> >::insert(std::pair<clang::CXXRecordDecl const*, clang::CharUnits> const&)\"},\n    {\"_ZNK5clang4Stmt16getStmtClassNameEv\", \"clang::Stmt::getStmtClassName() const\"},\n    {\"_Z21getStmtInfoTableEntryN5clang4Stmt9StmtClassE\", \"getStmtInfoTableEntry(clang::Stmt::StmtClass)\"},\n    {\"_ZN5clang4Stmt10PrintStatsEv\", \"clang::Stmt::PrintStats()\"},\n    {\"_ZN5clang4Stmt12addStmtClassENS0_9StmtClassE\", \"clang::Stmt::addStmtClass(clang::Stmt::StmtClass)\"},\n    {\"_ZN5clang4Stmt15CollectingStatsEb\", \"clang::Stmt::CollectingStats(bool)\"},\n    {\"_ZN5clang4Stmt8childrenEv\", \"clang::Stmt::children()\"},\n    {\"_ZNK5clang4Stmt14getSourceRangeEv\", \"clang::Stmt::getSourceRange() const\"},\n    {\"_ZNK5clang13ObjCAtTryStmt14getSourceRangeEv\", \"clang::ObjCAtTryStmt::getSourceRange() const\"},\n    {\"_ZNK5clang10ReturnStmt14getSourceRangeEv\", \"clang::ReturnStmt::getSourceRange() const\"},\n    {\"_ZN5clang12CompoundStmt8setStmtsERNS_10ASTContextEPPNS_4StmtEj\", \"clang::CompoundStmt::setStmts(clang::ASTContext&, clang::Stmt**, unsigned int)\"},\n    {\"_ZNK5clang9LabelStmt7getNameEv\", \"clang::LabelStmt::getName() const\"},\n    {\"_ZNK5clang4Stmt22hasImplicitControlFlowEv\", \"clang::Stmt::hasImplicitControlFlow() const\"},\n    {\"_ZN5clang7AsmStmt13getOutputExprEj\", \"clang::AsmStmt::getOutputExpr(unsigned int)\"},\n    {\"_ZNK5clang7AsmStmt19getOutputConstraintEj\", \"clang::AsmStmt::getOutputConstraint(unsigned int) const\"},\n    {\"_ZNK5clang7AsmStmt18getNumPlusOperandsEv\", \"clang::AsmStmt::getNumPlusOperands() const\"},\n    {\"_ZN5clang7AsmStmt12getInputExprEj\", \"clang::AsmStmt::getInputExpr(unsigned int)\"},\n    {\"_ZNK5clang7AsmStmt18getInputConstraintEj\", \"clang::AsmStmt::getInputConstraint(unsigned int) const\"},\n    {\"_ZN5clang7AsmStmt30setOutputsAndInputsAndClobbersERNS_10ASTContextEPPNS_14IdentifierInfoEPPNS_13StringLiteralEPPNS_4StmtEjjS8_j\", \"clang::AsmStmt::setOutputsAndInputsAndClobbers(clang::ASTContext&, clang::IdentifierInfo**, clang::StringLiteral**, clang::Stmt**, unsigned int, unsigned int, clang::StringLiteral**, unsigned int)\"},\n    {\"_ZNK5clang7AsmStmt15getNamedOperandEN4llvm9StringRefE\", \"clang::AsmStmt::getNamedOperand(llvm::StringRef) const\"},\n    {\"_ZNK5clang7AsmStmt16AnalyzeAsmStringERN4llvm15SmallVectorImplINS0_14AsmStringPieceEEERNS_10ASTContextERj\", \"clang::AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<clang::AsmStmt::AsmStringPiece>&, clang::ASTContext&, unsigned int&) const\"},\n    {\"_ZNK5clang12CXXCatchStmt13getCaughtTypeEv\", \"clang::CXXCatchStmt::getCaughtType() const\"},\n    {\"_ZN5clang7AsmStmtC1ERNS_10ASTContextENS_14SourceLocationEbbbjjPPNS_14IdentifierInfoEPPNS_13StringLiteralEPPNS_4ExprES8_jS9_S3_\", \"clang::AsmStmt::AsmStmt(clang::ASTContext&, clang::SourceLocation, bool, bool, bool, unsigned int, unsigned int, clang::IdentifierInfo**, clang::StringLiteral**, clang::Expr**, clang::StringLiteral*, unsigned int, clang::StringLiteral**, clang::SourceLocation)\"},\n    {\"_ZN5clang7AsmStmtC2ERNS_10ASTContextENS_14SourceLocationEbbbjjPPNS_14IdentifierInfoEPPNS_13StringLiteralEPPNS_4ExprES8_jS9_S3_\", \"clang::AsmStmt::AsmStmt(clang::ASTContext&, clang::SourceLocation, bool, bool, bool, unsigned int, unsigned int, clang::IdentifierInfo**, clang::StringLiteral**, clang::Expr**, clang::StringLiteral*, unsigned int, clang::StringLiteral**, clang::SourceLocation)\"},\n    {\"_ZN5clang21ObjCForCollectionStmtC1EPNS_4StmtEPNS_4ExprES2_NS_14SourceLocationES5_\", \"clang::ObjCForCollectionStmt::ObjCForCollectionStmt(clang::Stmt*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang21ObjCForCollectionStmtC2EPNS_4StmtEPNS_4ExprES2_NS_14SourceLocationES5_\", \"clang::ObjCForCollectionStmt::ObjCForCollectionStmt(clang::Stmt*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang13ObjCAtTryStmtC1ENS_14SourceLocationEPNS_4StmtEPS3_jS3_\", \"clang::ObjCAtTryStmt::ObjCAtTryStmt(clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int, clang::Stmt*)\"},\n    {\"_ZN5clang13ObjCAtTryStmtC2ENS_14SourceLocationEPNS_4StmtEPS3_jS3_\", \"clang::ObjCAtTryStmt::ObjCAtTryStmt(clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int, clang::Stmt*)\"},\n    {\"_ZN5clang13ObjCAtTryStmt6CreateERNS_10ASTContextENS_14SourceLocationEPNS_4StmtEPS5_jS5_\", \"clang::ObjCAtTryStmt::Create(clang::ASTContext&, clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int, clang::Stmt*)\"},\n    {\"_ZN5clang13ObjCAtTryStmt11CreateEmptyERNS_10ASTContextEjb\", \"clang::ObjCAtTryStmt::CreateEmpty(clang::ASTContext&, unsigned int, bool)\"},\n    {\"_ZN5clang10CXXTryStmt6CreateERNS_10ASTContextENS_14SourceLocationEPNS_4StmtEPS5_j\", \"clang::CXXTryStmt::Create(clang::ASTContext&, clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int)\"},\n    {\"_ZN5clang10CXXTryStmtC1ENS_14SourceLocationEPNS_4StmtEPS3_j\", \"clang::CXXTryStmt::CXXTryStmt(clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int)\"},\n    {\"_ZN5clang10CXXTryStmt6CreateERNS_10ASTContextENS_4Stmt10EmptyShellEj\", \"clang::CXXTryStmt::Create(clang::ASTContext&, clang::Stmt::EmptyShell, unsigned int)\"},\n    {\"_ZN5clang10CXXTryStmtC2ENS_14SourceLocationEPNS_4StmtEPS3_j\", \"clang::CXXTryStmt::CXXTryStmt(clang::SourceLocation, clang::Stmt*, clang::Stmt**, unsigned int)\"},\n    {\"_ZN5clang6IfStmtC1ERNS_10ASTContextENS_14SourceLocationEPNS_7VarDeclEPNS_4ExprEPNS_4StmtES3_S9_\", \"clang::IfStmt::IfStmt(clang::ASTContext&, clang::SourceLocation, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang6IfStmtC2ERNS_10ASTContextENS_14SourceLocationEPNS_7VarDeclEPNS_4ExprEPNS_4StmtES3_S9_\", \"clang::IfStmt::IfStmt(clang::ASTContext&, clang::SourceLocation, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Stmt*)\"},\n    {\"_ZN5clang6IfStmt20setConditionVariableERNS_10ASTContextEPNS_7VarDeclE\", \"clang::IfStmt::setConditionVariable(clang::ASTContext&, clang::VarDecl*)\"},\n    {\"_ZNK5clang6IfStmt20getConditionVariableEv\", \"clang::IfStmt::getConditionVariable() const\"},\n    {\"_ZN5clang7ForStmtC1ERNS_10ASTContextEPNS_4StmtEPNS_4ExprEPNS_7VarDeclES6_S4_NS_14SourceLocationES9_S9_\", \"clang::ForStmt::ForStmt(clang::ASTContext&, clang::Stmt*, clang::Expr*, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang7ForStmtC2ERNS_10ASTContextEPNS_4StmtEPNS_4ExprEPNS_7VarDeclES6_S4_NS_14SourceLocationES9_S9_\", \"clang::ForStmt::ForStmt(clang::ASTContext&, clang::Stmt*, clang::Expr*, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang7ForStmt20setConditionVariableERNS_10ASTContextEPNS_7VarDeclE\", \"clang::ForStmt::setConditionVariable(clang::ASTContext&, clang::VarDecl*)\"},\n    {\"_ZNK5clang7ForStmt20getConditionVariableEv\", \"clang::ForStmt::getConditionVariable() const\"},\n    {\"_ZN5clang10SwitchStmtC1ERNS_10ASTContextEPNS_7VarDeclEPNS_4ExprE\", \"clang::SwitchStmt::SwitchStmt(clang::ASTContext&, clang::VarDecl*, clang::Expr*)\"},\n    {\"_ZN5clang10SwitchStmtC2ERNS_10ASTContextEPNS_7VarDeclEPNS_4ExprE\", \"clang::SwitchStmt::SwitchStmt(clang::ASTContext&, clang::VarDecl*, clang::Expr*)\"},\n    {\"_ZN5clang10SwitchStmt20setConditionVariableERNS_10ASTContextEPNS_7VarDeclE\", \"clang::SwitchStmt::setConditionVariable(clang::ASTContext&, clang::VarDecl*)\"},\n    {\"_ZNK5clang10SwitchStmt20getConditionVariableEv\", \"clang::SwitchStmt::getConditionVariable() const\"},\n    {\"_ZN5clang10SwitchCase10getSubStmtEv\", \"clang::SwitchCase::getSubStmt()\"},\n    {\"_ZN5clang9WhileStmtC1ERNS_10ASTContextEPNS_7VarDeclEPNS_4ExprEPNS_4StmtENS_14SourceLocationE\", \"clang::WhileStmt::WhileStmt(clang::ASTContext&, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation)\"},\n    {\"_ZN5clang9WhileStmtC2ERNS_10ASTContextEPNS_7VarDeclEPNS_4ExprEPNS_4StmtENS_14SourceLocationE\", \"clang::WhileStmt::WhileStmt(clang::ASTContext&, clang::VarDecl*, clang::Expr*, clang::Stmt*, clang::SourceLocation)\"},\n    {\"_ZN5clang9WhileStmt20setConditionVariableERNS_10ASTContextEPNS_7VarDeclE\", \"clang::WhileStmt::setConditionVariable(clang::ASTContext&, clang::VarDecl*)\"},\n    {\"_ZNK5clang9WhileStmt20getConditionVariableEv\", \"clang::WhileStmt::getConditionVariable() const\"},\n    {\"_ZN5clang16IndirectGotoStmt17getConstantTargetEv\", \"clang::IndirectGotoStmt::getConstantTarget()\"},\n    {\"_ZNK5clang10ReturnStmt11getRetValueEv\", \"clang::ReturnStmt::getRetValue() const\"},\n    {\"_ZN5clang10ReturnStmt11getRetValueEv\", \"clang::ReturnStmt::getRetValue()\"},\n    {\"_ZN5clang8DeclStmt8childrenEv\", \"clang::DeclStmt::children()\"},\n    {\"_ZNK5clang27CXXDependentScopeMemberExpr14getSourceRangeEv\", \"clang::CXXDependentScopeMemberExpr::getSourceRange() const\"},\n    {\"_ZNK5clang10MemberExpr14getSourceRangeEv\", \"clang::MemberExpr::getSourceRange() const\"},\n    {\"_ZNK5clang20UnresolvedMemberExpr14getSourceRangeEv\", \"clang::UnresolvedMemberExpr::getSourceRange() const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang7AsmStmt14AsmStringPieceELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::AsmStmt::AsmStringPiece, false>::grow(unsigned long)\"},\n    {\"_ZNK5clang4Stmt4dumpERNS_13SourceManagerE\", \"clang::Stmt::dump(clang::SourceManager&) const\"},\n    {\"_ZNK5clang4Stmt4dumpERN4llvm11raw_ostreamERNS_13SourceManagerE\", \"clang::Stmt::dump(llvm::raw_ostream&, clang::SourceManager&) const\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper11DumpSubTreeEPN5clang4StmtE\", \"(anonymous namespace)::StmtDumper::DumpSubTree(clang::Stmt*)\"},\n    {\"_ZNK5clang4Stmt4dumpEv\", \"clang::Stmt::dump() const\"},\n    {\"_ZNK5clang4Stmt7dumpAllERNS_13SourceManagerE\", \"clang::Stmt::dumpAll(clang::SourceManager&) const\"},\n    {\"_ZNK5clang4Stmt7dumpAllEv\", \"clang::Stmt::dumpAll() const\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper13VisitDeclStmtEPN5clang8DeclStmtE\", \"(anonymous namespace)::StmtDumper::VisitDeclStmt(clang::DeclStmt*)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_110StmtDumperEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::StmtDumper, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper19VisitBinaryOperatorEPN5clang14BinaryOperatorE\", \"(anonymous namespace)::StmtDumper::VisitBinaryOperator(clang::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper27VisitCompoundAssignOperatorEPN5clang22CompoundAssignOperatorE\", \"(anonymous namespace)::StmtDumper::VisitCompoundAssignOperator(clang::CompoundAssignOperator*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper21VisitCXXConstructExprEPN5clang16CXXConstructExprE\", \"(anonymous namespace)::StmtDumper::VisitCXXConstructExpr(clang::CXXConstructExpr*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::StmtDumper::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper8DumpStmtEPKN5clang4StmtE\", \"(anonymous namespace)::StmtDumper::DumpStmt(clang::Stmt const*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper12DumpLocationEN5clang14SourceLocationE\", \"(anonymous namespace)::StmtDumper::DumpLocation(clang::SourceLocation)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper14DumpDeclaratorEPN5clang4DeclE\", \"(anonymous namespace)::StmtDumper::DumpDeclarator(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper8DumpExprEPKN5clang4ExprE\", \"(anonymous namespace)::StmtDumper::DumpExpr(clang::Expr const*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper8DumpTypeEN5clang8QualTypeE\", \"(anonymous namespace)::StmtDumper::DumpType(clang::QualType)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper11DumpDeclRefEPN5clang4DeclE\", \"(anonymous namespace)::StmtDumper::DumpDeclRef(clang::Decl*)\"},\n    {\"_Z12DumpBasePathRN4llvm11raw_ostreamEPN5clang8CastExprE\", \"DumpBasePath(llvm::raw_ostream&, clang::CastExpr*)\"},\n    {\"_ZN12_GLOBAL__N_110StmtDumper21VisitCXXNamedCastExprEPN5clang16CXXNamedCastExprE\", \"(anonymous namespace)::StmtDumper::VisitCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN5clang16StmtIteratorBase6NextVAEv\", \"clang::StmtIteratorBase::NextVA()\"},\n    {\"_ZN5clang16StmtIteratorBase8NextDeclEb\", \"clang::StmtIteratorBase::NextDecl(bool)\"},\n    {\"_ZN5clang16StmtIteratorBase10HandleDeclEPNS_4DeclE\", \"clang::StmtIteratorBase::HandleDecl(clang::Decl*)\"},\n    {\"_ZN5clang16StmtIteratorBaseC1EPNS_4DeclEPPNS_4StmtE\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::Decl*, clang::Stmt**)\"},\n    {\"_ZN5clang16StmtIteratorBaseC2EPNS_4DeclEPPNS_4StmtE\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::Decl*, clang::Stmt**)\"},\n    {\"_ZN5clang16StmtIteratorBaseC1EPPNS_4DeclES3_\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::Decl**, clang::Decl**)\"},\n    {\"_ZN5clang16StmtIteratorBaseC2EPPNS_4DeclES3_\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::Decl**, clang::Decl**)\"},\n    {\"_ZN5clang16StmtIteratorBaseC1EPKNS_17VariableArrayTypeE\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::VariableArrayType const*)\"},\n    {\"_ZN5clang16StmtIteratorBaseC2EPKNS_17VariableArrayTypeE\", \"clang::StmtIteratorBase::StmtIteratorBase(clang::VariableArrayType const*)\"},\n    {\"_ZNK5clang16StmtIteratorBase11GetDeclExprEv\", \"clang::StmtIteratorBase::GetDeclExpr() const\"},\n    {\"_ZNK5clang4Stmt10dumpPrettyERNS_10ASTContextE\", \"clang::Stmt::dumpPretty(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4Stmt11printPrettyERN4llvm11raw_ostreamERNS_10ASTContextEPNS_13PrinterHelperERKNS_14PrintingPolicyEj\", \"clang::Stmt::printPretty(llvm::raw_ostream&, clang::ASTContext&, clang::PrinterHelper*, clang::PrintingPolicy const&, unsigned int) const\"},\n    {\"_ZN5clang13PrinterHelperD0Ev\", \"clang::PrinterHelper::~PrinterHelper()\"},\n    {\"_ZN5clang13PrinterHelperD1Ev\", \"clang::PrinterHelper::~PrinterHelper()\"},\n    {\"_ZN5clang13PrinterHelperD2Ev\", \"clang::PrinterHelper::~PrinterHelper()\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_111StmtPrinterEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::StmtPrinter, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter13VisitCallExprEPN5clang8CallExprE\", \"(anonymous namespace)::StmtPrinter::VisitCallExpr(clang::CallExpr*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter18VisitStringLiteralEPN5clang13StringLiteralE\", \"(anonymous namespace)::StmtPrinter::VisitStringLiteral(clang::StringLiteral*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter18VisitUnaryOperatorEPN5clang13UnaryOperatorE\", \"(anonymous namespace)::StmtPrinter::VisitUnaryOperator(clang::UnaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter9PrintExprEPN5clang4ExprE\", \"(anonymous namespace)::StmtPrinter::PrintExpr(clang::Expr*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter9PrintStmtEPN5clang4StmtEi\", \"(anonymous namespace)::StmtPrinter::PrintStmt(clang::Stmt*, int)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter20PrintRawCompoundStmtEPN5clang12CompoundStmtE\", \"(anonymous namespace)::StmtPrinter::PrintRawCompoundStmt(clang::CompoundStmt*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter16PrintRawDeclStmtEPN5clang8DeclStmtE\", \"(anonymous namespace)::StmtPrinter::PrintRawDeclStmt(clang::DeclStmt*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter14PrintRawIfStmtEPN5clang6IfStmtE\", \"(anonymous namespace)::StmtPrinter::PrintRawIfStmt(clang::IfStmt*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter21VisitCXXNamedCastExprEPN5clang16CXXNamedCastExprE\", \"(anonymous namespace)::StmtPrinter::VisitCXXNamedCastExpr(clang::CXXNamedCastExpr*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter13PrintCallArgsEPN5clang8CallExprE\", \"(anonymous namespace)::StmtPrinter::PrintCallArgs(clang::CallExpr*)\"},\n    {\"_ZN12_GLOBAL__N_111StmtPrinter20PrintRawCXXCatchStmtEPN5clang12CXXCatchStmtE\", \"(anonymous namespace)::StmtPrinter::PrintRawCXXCatchStmt(clang::CXXCatchStmt*)\"},\n    {\"_ZN5clang4Stmt7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextEb\", \"clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool)\"},\n    {\"_ZN5clang11StmtVisitorIN12_GLOBAL__N_112StmtProfilerEvE5VisitEPNS_4StmtE\", \"clang::StmtVisitor<(anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_112StmtProfiler17VisitInitListExprEPN5clang12InitListExprE\", \"(anonymous namespace)::StmtProfiler::VisitInitListExpr(clang::InitListExpr*)\"},\n    {\"_ZN12_GLOBAL__N_112StmtProfiler9VisitStmtEPN5clang4StmtE\", \"(anonymous namespace)::StmtProfiler::VisitStmt(clang::Stmt*)\"},\n    {\"_ZN12_GLOBAL__N_112StmtProfiler9VisitDeclEPN5clang4DeclE\", \"(anonymous namespace)::StmtProfiler::VisitDecl(clang::Decl*)\"},\n    {\"_ZN12_GLOBAL__N_112StmtProfiler21VisitTemplateArgumentERKN5clang16TemplateArgumentE\", \"(anonymous namespace)::StmtProfiler::VisitTemplateArgument(clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang4Stmt7viewASTEv\", \"clang::Stmt::viewAST() const\"},\n    {\"_ZN5clang16TemplateArgument14CreatePackCopyERNS_10ASTContextEPKS0_j\", \"clang::TemplateArgument::CreatePackCopy(clang::ASTContext&, clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZNK5clang16TemplateArgument11isDependentEv\", \"clang::TemplateArgument::isDependent() const\"},\n    {\"_ZNK5clang16TemplateArgument15isPackExpansionEv\", \"clang::TemplateArgument::isPackExpansion() const\"},\n    {\"_ZNK5clang16TemplateArgument31containsUnexpandedParameterPackEv\", \"clang::TemplateArgument::containsUnexpandedParameterPack() const\"},\n    {\"_ZNK5clang16TemplateArgument24getNumTemplateExpansionsEv\", \"clang::TemplateArgument::getNumTemplateExpansions() const\"},\n    {\"_ZNK5clang16TemplateArgument7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextE\", \"clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const\"},\n    {\"_ZNK5clang16TemplateArgument18structurallyEqualsERKS0_\", \"clang::TemplateArgument::structurallyEquals(clang::TemplateArgument const&) const\"},\n    {\"_ZNK5clang16TemplateArgument23getPackExpansionPatternEv\", \"clang::TemplateArgument::getPackExpansionPattern() const\"},\n    {\"_ZNK5clang16TemplateArgument5printERKNS_14PrintingPolicyERN4llvm11raw_ostreamE\", \"clang::TemplateArgument::print(clang::PrintingPolicy const&, llvm::raw_ostream&) const\"},\n    {\"_ZN5clang23TemplateArgumentLocInfoC1Ev\", \"clang::TemplateArgumentLocInfo::TemplateArgumentLocInfo()\"},\n    {\"_ZN5clang23TemplateArgumentLocInfoC2Ev\", \"clang::TemplateArgumentLocInfo::TemplateArgumentLocInfo()\"},\n    {\"_ZNK5clang19TemplateArgumentLoc14getSourceRangeEv\", \"clang::TemplateArgumentLoc::getSourceRange() const\"},\n    {\"_ZNK5clang19TemplateArgumentLoc23getPackExpansionPatternERNS_14SourceLocationERN4llvm8OptionalIjEERNS_10ASTContextE\", \"clang::TemplateArgumentLoc::getPackExpansionPattern(clang::SourceLocation&, llvm::Optional<unsigned int>&, clang::ASTContext&) const\"},\n    {\"_ZN5clanglsERKNS_17DiagnosticBuilderERKNS_16TemplateArgumentE\", \"clang::operator<<(clang::DiagnosticBuilder const&, clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang36SubstTemplateTemplateParmPackStorage15getArgumentPackEv\", \"clang::SubstTemplateTemplateParmPackStorage::getArgumentPack() const\"},\n    {\"_ZN5clang36SubstTemplateTemplateParmPackStorage7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::SubstTemplateTemplateParmPackStorage::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang36SubstTemplateTemplateParmPackStorage7ProfileERN4llvm16FoldingSetNodeIDERNS_10ASTContextEPNS_24TemplateTemplateParmDeclERKNS_16TemplateArgumentE\", \"clang::SubstTemplateTemplateParmPackStorage::Profile(llvm::FoldingSetNodeID&, clang::ASTContext&, clang::TemplateTemplateParmDecl*, clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang12TemplateName7getKindEv\", \"clang::TemplateName::getKind() const\"},\n    {\"_ZNK5clang12TemplateName17getAsTemplateDeclEv\", \"clang::TemplateName::getAsTemplateDecl() const\"},\n    {\"_ZNK5clang12TemplateName11isDependentEv\", \"clang::TemplateName::isDependent() const\"},\n    {\"_ZNK5clang12TemplateName31containsUnexpandedParameterPackEv\", \"clang::TemplateName::containsUnexpandedParameterPack() const\"},\n    {\"_ZNK5clang12TemplateName5printERN4llvm11raw_ostreamERKNS_14PrintingPolicyEb\", \"clang::TemplateName::print(llvm::raw_ostream&, clang::PrintingPolicy const&, bool) const\"},\n    {\"_ZN5clanglsERKNS_17DiagnosticBuilderENS_12TemplateNameE\", \"clang::operator<<(clang::DiagnosticBuilder const&, clang::TemplateName)\"},\n    {\"_ZNK5clang12TemplateName4dumpEv\", \"clang::TemplateName::dump() const\"},\n    {\"_ZN5clang8QualType10isConstantES0_RNS_10ASTContextE\", \"clang::QualType::isConstant(clang::QualType, clang::ASTContext&)\"},\n    {\"_ZN5clang17ConstantArrayType20getNumAddressingBitsERNS_10ASTContextENS_8QualTypeERKN4llvm5APIntE\", \"clang::ConstantArrayType::getNumAddressingBits(clang::ASTContext&, clang::QualType, llvm::APInt const&)\"},\n    {\"_ZN5clang17ConstantArrayType14getMaxSizeBitsERNS_10ASTContextE\", \"clang::ConstantArrayType::getMaxSizeBits(clang::ASTContext&)\"},\n    {\"_ZN5clang23DependentSizedArrayTypeC1ERKNS_10ASTContextENS_8QualTypeES4_PNS_4ExprENS_9ArrayType17ArraySizeModifierEjNS_11SourceRangeE\", \"clang::DependentSizedArrayType::DependentSizedArrayType(clang::ASTContext const&, clang::QualType, clang::QualType, clang::Expr*, clang::ArrayType::ArraySizeModifier, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang23DependentSizedArrayTypeC2ERKNS_10ASTContextENS_8QualTypeES4_PNS_4ExprENS_9ArrayType17ArraySizeModifierEjNS_11SourceRangeE\", \"clang::DependentSizedArrayType::DependentSizedArrayType(clang::ASTContext const&, clang::QualType, clang::QualType, clang::Expr*, clang::ArrayType::ArraySizeModifier, unsigned int, clang::SourceRange)\"},\n    {\"_ZN5clang23DependentSizedArrayType7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextENS_8QualTypeENS_9ArrayType17ArraySizeModifierEjPNS_4ExprE\", \"clang::DependentSizedArrayType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, clang::QualType, clang::ArrayType::ArraySizeModifier, unsigned int, clang::Expr*)\"},\n    {\"_ZN5clang27DependentSizedExtVectorTypeC1ERKNS_10ASTContextENS_8QualTypeES4_PNS_4ExprENS_14SourceLocationE\", \"clang::DependentSizedExtVectorType::DependentSizedExtVectorType(clang::ASTContext const&, clang::QualType, clang::QualType, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang27DependentSizedExtVectorTypeC2ERKNS_10ASTContextENS_8QualTypeES4_PNS_4ExprENS_14SourceLocationE\", \"clang::DependentSizedExtVectorType::DependentSizedExtVectorType(clang::ASTContext const&, clang::QualType, clang::QualType, clang::Expr*, clang::SourceLocation)\"},\n    {\"_ZN5clang27DependentSizedExtVectorType7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextENS_8QualTypeEPNS_4ExprE\", \"clang::DependentSizedExtVectorType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, clang::QualType, clang::Expr*)\"},\n    {\"_ZN5clang10VectorTypeC1ENS_8QualTypeEjS1_NS0_10VectorKindE\", \"clang::VectorType::VectorType(clang::QualType, unsigned int, clang::QualType, clang::VectorType::VectorKind)\"},\n    {\"_ZN5clang10VectorTypeC2ENS_8QualTypeEjS1_NS0_10VectorKindE\", \"clang::VectorType::VectorType(clang::QualType, unsigned int, clang::QualType, clang::VectorType::VectorKind)\"},\n    {\"_ZN5clang10VectorTypeC1ENS_4Type9TypeClassENS_8QualTypeEjS3_NS0_10VectorKindE\", \"clang::VectorType::VectorType(clang::Type::TypeClass, clang::QualType, unsigned int, clang::QualType, clang::VectorType::VectorKind)\"},\n    {\"_ZN5clang10VectorTypeC2ENS_4Type9TypeClassENS_8QualTypeEjS3_NS0_10VectorKindE\", \"clang::VectorType::VectorType(clang::Type::TypeClass, clang::QualType, unsigned int, clang::QualType, clang::VectorType::VectorKind)\"},\n    {\"_ZNK5clang4Type29getArrayElementTypeNoTypeQualEv\", \"clang::Type::getArrayElementTypeNoTypeQual() const\"},\n    {\"_ZNK5clang4Type27getUnqualifiedDesugaredTypeEv\", \"clang::Type::getUnqualifiedDesugaredType() const\"},\n    {\"_ZN5clang8QualType16getDesugaredTypeES0_RKNS_10ASTContextE\", \"clang::QualType::getDesugaredType(clang::QualType, clang::ASTContext const&)\"},\n    {\"_ZN5clang8QualType21getSplitDesugaredTypeES0_\", \"clang::QualType::getSplitDesugaredType(clang::QualType)\"},\n    {\"_ZNK5clang11TypedefType7desugarEv\", \"clang::TypedefType::desugar() const\"},\n    {\"_ZNK5clang14TypeOfExprType7desugarEv\", \"clang::TypeOfExprType::desugar() const\"},\n    {\"_ZN5clang8QualType27getSplitUnqualifiedTypeImplES0_\", \"clang::QualType::getSplitUnqualifiedTypeImpl(clang::QualType)\"},\n    {\"_ZN5clang8QualType12IgnoreParensES0_\", \"clang::QualType::IgnoreParens(clang::QualType)\"},\n    {\"_ZNK5clang4Type10isVoidTypeEv\", \"clang::Type::isVoidType() const\"},\n    {\"_ZNK5clang4Type13isDerivedTypeEv\", \"clang::Type::isDerivedType() const\"},\n    {\"_ZNK5clang4Type11isClassTypeEv\", \"clang::Type::isClassType() const\"},\n    {\"_ZNK5clang4Type15isStructureTypeEv\", \"clang::Type::isStructureType() const\"},\n    {\"_ZNK5clang4Type22isStructureOrClassTypeEv\", \"clang::Type::isStructureOrClassType() const\"},\n    {\"_ZNK5clang4Type17isVoidPointerTypeEv\", \"clang::Type::isVoidPointerType() const\"},\n    {\"_ZNK5clang4Type11isUnionTypeEv\", \"clang::Type::isUnionType() const\"},\n    {\"_ZNK5clang4Type13isComplexTypeEv\", \"clang::Type::isComplexType() const\"},\n    {\"_ZNK5clang4Type14isFloatingTypeEv\", \"clang::Type::isFloatingType() const\"},\n    {\"_ZNK5clang4Type20isComplexIntegerTypeEv\", \"clang::Type::isComplexIntegerType() const\"},\n    {\"_ZNK5clang4Type23getAsComplexIntegerTypeEv\", \"clang::Type::getAsComplexIntegerType() const\"},\n    {\"_ZNK5clang4Type13isIntegerTypeEv\", \"clang::Type::isIntegerType() const\"},\n    {\"_ZNK5clang4Type14getPointeeTypeEv\", \"clang::Type::getPointeeType() const\"},\n    {\"_ZNK5clang4Type18getAsStructureTypeEv\", \"clang::Type::getAsStructureType() const\"},\n    {\"_ZNK5clang4Type14getAsUnionTypeEv\", \"clang::Type::getAsUnionType() const\"},\n    {\"_ZN5clang14ObjCObjectTypeC1ENS_8QualTypeES1_PKPNS_16ObjCProtocolDeclEj\", \"clang::ObjCObjectType::ObjCObjectType(clang::QualType, clang::QualType, clang::ObjCProtocolDecl* const*, unsigned int)\"},\n    {\"_ZN5clang14ObjCObjectTypeC2ENS_8QualTypeES1_PKPNS_16ObjCProtocolDeclEj\", \"clang::ObjCObjectType::ObjCObjectType(clang::QualType, clang::QualType, clang::ObjCProtocolDecl* const*, unsigned int)\"},\n    {\"_ZNK5clang4Type31getAsObjCQualifiedInterfaceTypeEv\", \"clang::Type::getAsObjCQualifiedInterfaceType() const\"},\n    {\"_ZNK5clang4Type28isObjCQualifiedInterfaceTypeEv\", \"clang::Type::isObjCQualifiedInterfaceType() const\"},\n    {\"_ZNK5clang4Type24getAsObjCQualifiedIdTypeEv\", \"clang::Type::getAsObjCQualifiedIdType() const\"},\n    {\"_ZNK5clang4Type29getAsObjCInterfacePointerTypeEv\", \"clang::Type::getAsObjCInterfacePointerType() const\"},\n    {\"_ZNK5clang4Type30getCXXRecordDeclForPointerTypeEv\", \"clang::Type::getCXXRecordDeclForPointerType() const\"},\n    {\"_ZNK5clang4Type18getAsCXXRecordDeclEv\", \"clang::Type::getAsCXXRecordDecl() const\"},\n    {\"_ZNK5clang21InjectedClassNameType7getDeclEv\", \"clang::InjectedClassNameType::getDecl() const\"},\n    {\"_ZNK5clang4Type24hasIntegerRepresentationEv\", \"clang::Type::hasIntegerRepresentation() const\"},\n    {\"_ZNK5clang4Type14isIntegralTypeERNS_10ASTContextE\", \"clang::Type::isIntegralType(clang::ASTContext&) const\"},\n    {\"_ZNK5clang4Type27isIntegralOrEnumerationTypeEv\", \"clang::Type::isIntegralOrEnumerationType() const\"},\n    {\"_ZNK5clang4Type35isIntegralOrUnscopedEnumerationTypeEv\", \"clang::Type::isIntegralOrUnscopedEnumerationType() const\"},\n    {\"_ZNK5clang4Type13isBooleanTypeEv\", \"clang::Type::isBooleanType() const\"},\n    {\"_ZNK5clang4Type10isCharTypeEv\", \"clang::Type::isCharType() const\"},\n    {\"_ZNK5clang4Type14isWideCharTypeEv\", \"clang::Type::isWideCharType() const\"},\n    {\"_ZNK5clang4Type18isAnyCharacterTypeEv\", \"clang::Type::isAnyCharacterType() const\"},\n    {\"_ZNK5clang4Type19isSignedIntegerTypeEv\", \"clang::Type::isSignedIntegerType() const\"},\n    {\"_ZNK5clang4Type30hasSignedIntegerRepresentationEv\", \"clang::Type::hasSignedIntegerRepresentation() const\"},\n    {\"_ZNK5clang4Type21isUnsignedIntegerTypeEv\", \"clang::Type::isUnsignedIntegerType() const\"},\n    {\"_ZNK5clang4Type32hasUnsignedIntegerRepresentationEv\", \"clang::Type::hasUnsignedIntegerRepresentation() const\"},\n    {\"_ZNK5clang4Type25hasFloatingRepresentationEv\", \"clang::Type::hasFloatingRepresentation() const\"},\n    {\"_ZNK5clang4Type18isRealFloatingTypeEv\", \"clang::Type::isRealFloatingType() const\"},\n    {\"_ZNK5clang4Type10isRealTypeEv\", \"clang::Type::isRealType() const\"},\n    {\"_ZNK5clang4Type16isArithmeticTypeEv\", \"clang::Type::isArithmeticType() const\"},\n    {\"_ZNK5clang4Type12isScalarTypeEv\", \"clang::Type::isScalarType() const\"},\n    {\"_ZNK5clang4Type17getScalarTypeKindEv\", \"clang::Type::getScalarTypeKind() const\"},\n    {\"_ZNK5clang4Type15isAggregateTypeEv\", \"clang::Type::isAggregateType() const\"},\n    {\"_ZNK5clang4Type18isConstantSizeTypeEv\", \"clang::Type::isConstantSizeType() const\"},\n    {\"_ZNK5clang4Type16isIncompleteTypeEv\", \"clang::Type::isIncompleteType() const\"},\n    {\"_ZNK5clang7TagType7getDeclEv\", \"clang::TagType::getDecl() const\"},\n    {\"_ZNK5clang4Type9isPODTypeEv\", \"clang::Type::isPODType() const\"},\n    {\"_ZNK5clang4Type13isLiteralTypeEv\", \"clang::Type::isLiteralType() const\"},\n    {\"_ZNK5clang4Type23isPromotableIntegerTypeEv\", \"clang::Type::isPromotableIntegerType() const\"},\n    {\"_ZNK5clang4Type13isNullPtrTypeEv\", \"clang::Type::isNullPtrType() const\"},\n    {\"_ZNK5clang4Type15isSpecifierTypeEv\", \"clang::Type::isSpecifierType() const\"},\n    {\"_ZN5clang15TypeWithKeyword21getKeywordForTypeSpecEj\", \"clang::TypeWithKeyword::getKeywordForTypeSpec(unsigned int)\"},\n    {\"_ZN5clang15TypeWithKeyword25getTagTypeKindForTypeSpecEj\", \"clang::TypeWithKeyword::getTagTypeKindForTypeSpec(unsigned int)\"},\n    {\"_ZN5clang15TypeWithKeyword24getKeywordForTagTypeKindENS_11TagTypeKindE\", \"clang::TypeWithKeyword::getKeywordForTagTypeKind(clang::TagTypeKind)\"},\n    {\"_ZN5clang15TypeWithKeyword24getTagTypeKindForKeywordENS_21ElaboratedTypeKeywordE\", \"clang::TypeWithKeyword::getTagTypeKindForKeyword(clang::ElaboratedTypeKeyword)\"},\n    {\"_ZN5clang15TypeWithKeyword20KeywordIsTagTypeKindENS_21ElaboratedTypeKeywordE\", \"clang::TypeWithKeyword::KeywordIsTagTypeKind(clang::ElaboratedTypeKeyword)\"},\n    {\"_ZN5clang15TypeWithKeyword14getKeywordNameENS_21ElaboratedTypeKeywordE\", \"clang::TypeWithKeyword::getKeywordName(clang::ElaboratedTypeKeyword)\"},\n    {\"_ZN5clang35DependentTemplateSpecializationTypeC1ENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoEjPKNS_16TemplateArgumentENS_8QualTypeE\", \"clang::DependentTemplateSpecializationType::DependentTemplateSpecializationType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, unsigned int, clang::TemplateArgument const*, clang::QualType)\"},\n    {\"_ZN5clang35DependentTemplateSpecializationTypeC2ENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoEjPKNS_16TemplateArgumentENS_8QualTypeE\", \"clang::DependentTemplateSpecializationType::DependentTemplateSpecializationType(clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, unsigned int, clang::TemplateArgument const*, clang::QualType)\"},\n    {\"_ZN5clang35DependentTemplateSpecializationType7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextENS_21ElaboratedTypeKeywordEPNS_19NestedNameSpecifierEPKNS_14IdentifierInfoEjPKNS_16TemplateArgumentE\", \"clang::DependentTemplateSpecializationType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, clang::ElaboratedTypeKeyword, clang::NestedNameSpecifier*, clang::IdentifierInfo const*, unsigned int, clang::TemplateArgument const*)\"},\n    {\"_ZNK5clang4Type25isElaboratedTypeSpecifierEv\", \"clang::Type::isElaboratedTypeSpecifier() const\"},\n    {\"_ZNK5clang4Type16getTypeClassNameEv\", \"clang::Type::getTypeClassName() const\"},\n    {\"_ZNK5clang11BuiltinType7getNameERKNS_11LangOptionsE\", \"clang::BuiltinType::getName(clang::LangOptions const&) const\"},\n    {\"_ZNK5clang8QualType20getNonLValueExprTypeERNS_10ASTContextE\", \"clang::QualType::getNonLValueExprType(clang::ASTContext&) const\"},\n    {\"_ZN5clang12FunctionType18getNameForCallConvENS_11CallingConvE\", \"clang::FunctionType::getNameForCallConv(clang::CallingConv)\"},\n    {\"_ZN5clang17FunctionProtoTypeC1ENS_8QualTypeEPKS1_jS1_RKNS0_12ExtProtoInfoE\", \"clang::FunctionProtoType::FunctionProtoType(clang::QualType, clang::QualType const*, unsigned int, clang::QualType, clang::FunctionProtoType::ExtProtoInfo const&)\"},\n    {\"_ZN5clang17FunctionProtoTypeC2ENS_8QualTypeEPKS1_jS1_RKNS0_12ExtProtoInfoE\", \"clang::FunctionProtoType::FunctionProtoType(clang::QualType, clang::QualType const*, unsigned int, clang::QualType, clang::FunctionProtoType::ExtProtoInfo const&)\"},\n    {\"_ZNK5clang17FunctionProtoType18isTemplateVariadicEv\", \"clang::FunctionProtoType::isTemplateVariadic() const\"},\n    {\"_ZN5clang17FunctionProtoType7ProfileERN4llvm16FoldingSetNodeIDENS_8QualTypeEPKS4_jRKNS0_12ExtProtoInfoE\", \"clang::FunctionProtoType::Profile(llvm::FoldingSetNodeID&, clang::QualType, clang::QualType const*, unsigned int, clang::FunctionProtoType::ExtProtoInfo const&)\"},\n    {\"_ZN5clang17FunctionProtoType7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::FunctionProtoType::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang14TypeOfExprTypeC1EPNS_4ExprENS_8QualTypeE\", \"clang::TypeOfExprType::TypeOfExprType(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang14TypeOfExprTypeC2EPNS_4ExprENS_8QualTypeE\", \"clang::TypeOfExprType::TypeOfExprType(clang::Expr*, clang::QualType)\"},\n    {\"_ZN5clang23DependentTypeOfExprType7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextEPNS_4ExprE\", \"clang::DependentTypeOfExprType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, clang::Expr*)\"},\n    {\"_ZN5clang12DecltypeTypeC1EPNS_4ExprENS_8QualTypeES3_\", \"clang::DecltypeType::DecltypeType(clang::Expr*, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang12DecltypeTypeC2EPNS_4ExprENS_8QualTypeES3_\", \"clang::DecltypeType::DecltypeType(clang::Expr*, clang::QualType, clang::QualType)\"},\n    {\"_ZN5clang21DependentDecltypeTypeC1ERKNS_10ASTContextEPNS_4ExprE\", \"clang::DependentDecltypeType::DependentDecltypeType(clang::ASTContext const&, clang::Expr*)\"},\n    {\"_ZN5clang21DependentDecltypeTypeC2ERKNS_10ASTContextEPNS_4ExprE\", \"clang::DependentDecltypeType::DependentDecltypeType(clang::ASTContext const&, clang::Expr*)\"},\n    {\"_ZN5clang21DependentDecltypeType7ProfileERN4llvm16FoldingSetNodeIDERKNS_10ASTContextEPNS_4ExprE\", \"clang::DependentDecltypeType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, clang::Expr*)\"},\n    {\"_ZN5clang7TagTypeC1ENS_4Type9TypeClassEPKNS_7TagDeclENS_8QualTypeE\", \"clang::TagType::TagType(clang::Type::TypeClass, clang::TagDecl const*, clang::QualType)\"},\n    {\"_ZN5clang7TagTypeC2ENS_4Type9TypeClassEPKNS_7TagDeclENS_8QualTypeE\", \"clang::TagType::TagType(clang::Type::TypeClass, clang::TagDecl const*, clang::QualType)\"},\n    {\"_ZNK5clang7TagType14isBeingDefinedEv\", \"clang::TagType::isBeingDefined() const\"},\n    {\"_ZN5clang10RecordType7classofEPKNS_7TagTypeE\", \"clang::RecordType::classof(clang::TagType const*)\"},\n    {\"_ZN5clang8EnumType7classofEPKNS_7TagTypeE\", \"clang::EnumType::classof(clang::TagType const*)\"},\n    {\"_ZN5clang29SubstTemplateTypeParmPackTypeC1EPKNS_20TemplateTypeParmTypeENS_8QualTypeERKNS_16TemplateArgumentE\", \"clang::SubstTemplateTypeParmPackType::SubstTemplateTypeParmPackType(clang::TemplateTypeParmType const*, clang::QualType, clang::TemplateArgument const&)\"},\n    {\"_ZN5clang29SubstTemplateTypeParmPackTypeC2EPKNS_20TemplateTypeParmTypeENS_8QualTypeERKNS_16TemplateArgumentE\", \"clang::SubstTemplateTypeParmPackType::SubstTemplateTypeParmPackType(clang::TemplateTypeParmType const*, clang::QualType, clang::TemplateArgument const&)\"},\n    {\"_ZNK5clang29SubstTemplateTypeParmPackType15getArgumentPackEv\", \"clang::SubstTemplateTypeParmPackType::getArgumentPack() const\"},\n    {\"_ZN5clang29SubstTemplateTypeParmPackType7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::SubstTemplateTypeParmPackType::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN5clang29SubstTemplateTypeParmPackType7ProfileERN4llvm16FoldingSetNodeIDEPKNS_20TemplateTypeParmTypeERKNS_16TemplateArgumentE\", \"clang::SubstTemplateTypeParmPackType::Profile(llvm::FoldingSetNodeID&, clang::TemplateTypeParmType const*, clang::TemplateArgument const&)\"},\n    {\"_ZN5clang26TemplateSpecializationType29anyDependentTemplateArgumentsERKNS_24TemplateArgumentListInfoE\", \"clang::TemplateSpecializationType::anyDependentTemplateArguments(clang::TemplateArgumentListInfo const&)\"},\n    {\"_ZN5clang26TemplateSpecializationType29anyDependentTemplateArgumentsEPKNS_19TemplateArgumentLocEj\", \"clang::TemplateSpecializationType::anyDependentTemplateArguments(clang::TemplateArgumentLoc const*, unsigned int)\"},\n    {\"_ZN5clang26TemplateSpecializationType29anyDependentTemplateArgumentsEPKNS_16TemplateArgumentEj\", \"clang::TemplateSpecializationType::anyDependentTemplateArguments(clang::TemplateArgument const*, unsigned int)\"},\n    {\"_ZN5clang26TemplateSpecializationTypeC1ENS_12TemplateNameEPKNS_16TemplateArgumentEjNS_8QualTypeE\", \"clang::TemplateSpecializationType::TemplateSpecializationType(clang::TemplateName, clang::TemplateArgument const*, unsigned int, clang::QualType)\"},\n    {\"_ZN5clang26TemplateSpecializationTypeC2ENS_12TemplateNameEPKNS_16TemplateArgumentEjNS_8QualTypeE\", \"clang::TemplateSpecializationType::TemplateSpecializationType(clang::TemplateName, clang::TemplateArgument const*, unsigned int, clang::QualType)\"},\n    {\"_ZN5clang26TemplateSpecializationType7ProfileERN4llvm16FoldingSetNodeIDENS_12TemplateNameEPKNS_16TemplateArgumentEjRKNS_10ASTContextE\", \"clang::TemplateSpecializationType::Profile(llvm::FoldingSetNodeID&, clang::TemplateName, clang::TemplateArgument const*, unsigned int, clang::ASTContext const&)\"},\n    {\"_ZNK5clang18QualifierCollector5applyERKNS_10ASTContextENS_8QualTypeE\", \"clang::QualifierCollector::apply(clang::ASTContext const&, clang::QualType) const\"},\n    {\"_ZNK5clang18QualifierCollector5applyERKNS_10ASTContextEPKNS_4TypeE\", \"clang::QualifierCollector::apply(clang::ASTContext const&, clang::Type const*) const\"},\n    {\"_ZN5clang18ObjCObjectTypeImpl7ProfileERN4llvm16FoldingSetNodeIDENS_8QualTypeEPKPNS_16ObjCProtocolDeclEj\", \"clang::ObjCObjectTypeImpl::Profile(llvm::FoldingSetNodeID&, clang::QualType, clang::ObjCProtocolDecl* const*, unsigned int)\"},\n    {\"_ZN5clang18ObjCObjectTypeImpl7ProfileERN4llvm16FoldingSetNodeIDE\", \"clang::ObjCObjectTypeImpl::Profile(llvm::FoldingSetNodeID&)\"},\n    {\"_ZNK5clang4Type10getLinkageEv\", \"clang::Type::getLinkage() const\"},\n    {\"_ZN5clang17TypePropertyCacheIN12_GLOBAL__N_17PrivateEE6ensureEPKNS_4TypeE\", \"clang::TypePropertyCache<(anonymous namespace)::Private>::ensure(clang::Type const*)\"},\n    {\"_ZNK5clang4Type13getVisibilityEv\", \"clang::Type::getVisibility() const\"},\n    {\"_ZNK5clang4Type21hasUnnamedOrLocalTypeEv\", \"clang::Type::hasUnnamedOrLocalType() const\"},\n    {\"_ZNK5clang4Type23getLinkageAndVisibilityEv\", \"clang::Type::getLinkageAndVisibility() const\"},\n    {\"_ZN5clang4Type17ClearLinkageCacheEv\", \"clang::Type::ClearLinkageCache()\"},\n    {\"_ZNK5clang4Type15hasSizedVLATypeEv\", \"clang::Type::hasSizedVLAType() const\"},\n    {\"_ZNK4llvm6APSInt6extendEj\", \"llvm::APSInt::extend(unsigned int) const\"},\n    {\"_ZN5clang7TypeLoc23getLocalSourceRangeImplES0_\", \"clang::TypeLoc::getLocalSourceRangeImpl(clang::TypeLoc)\"},\n    {\"_ZN5clang7TypeLoc22getFullDataSizeForTypeENS_8QualTypeE\", \"clang::TypeLoc::getFullDataSizeForType(clang::QualType)\"},\n    {\"_ZN5clang14TypeLocVisitorIN12_GLOBAL__N_19TypeSizerEjE5VisitENS_7TypeLocE\", \"clang::TypeLocVisitor<(anonymous namespace)::TypeSizer, unsigned int>::Visit(clang::TypeLoc)\"},\n    {\"_ZN5clang7TypeLoc18getNextTypeLocImplES0_\", \"clang::TypeLoc::getNextTypeLocImpl(clang::TypeLoc)\"},\n    {\"_ZN5clang7TypeLoc14initializeImplERNS_10ASTContextES0_NS_14SourceLocationE\", \"clang::TypeLoc::initializeImpl(clang::ASTContext&, clang::TypeLoc, clang::SourceLocation)\"},\n    {\"_ZNK5clang7TypeLoc11getBeginLocEv\", \"clang::TypeLoc::getBeginLoc() const\"},\n    {\"_ZNK5clang7TypeLoc9getEndLocEv\", \"clang::TypeLoc::getEndLoc() const\"},\n    {\"_ZN5clang15TypeSpecTypeLoc7classofEPKNS_7TypeLocE\", \"clang::TypeSpecTypeLoc::classof(clang::TypeLoc const*)\"},\n    {\"_ZNK5clang17TypeOfExprTypeLoc19getLocalSourceRangeEv\", \"clang::TypeOfExprTypeLoc::getLocalSourceRange() const\"},\n    {\"_ZNK5clang14BuiltinTypeLoc18getWrittenTypeSpecEv\", \"clang::BuiltinTypeLoc::getWrittenTypeSpec() const\"},\n    {\"_ZN5clang7TypeLoc16IgnoreParensImplES0_\", \"clang::TypeLoc::IgnoreParensImpl(clang::TypeLoc)\"},\n    {\"_ZN5clang29TemplateSpecializationTypeLoc17initializeArgLocsERNS_10ASTContextEjPKNS_16TemplateArgumentEPNS_23TemplateArgumentLocInfoENS_14SourceLocationE\", \"clang::TemplateSpecializationTypeLoc::initializeArgLocs(clang::ASTContext&, unsigned int, clang::TemplateArgument const*, clang::TemplateArgumentLocInfo*, clang::SourceLocation)\"},\n    {\"_ZN5clang29TemplateSpecializationTypeLoc15initializeLocalERNS_10ASTContextENS_14SourceLocationE\", \"clang::TemplateSpecializationTypeLoc::initializeLocal(clang::ASTContext&, clang::SourceLocation)\"},\n    {\"_ZN5clang38DependentTemplateSpecializationTypeLoc15initializeLocalERNS_10ASTContextENS_14SourceLocationE\", \"clang::DependentTemplateSpecializationTypeLoc::initializeLocal(clang::ASTContext&, clang::SourceLocation)\"},\n    {\"_ZN5clang26TemplateSpecializationType25PrintTemplateArgumentListERKNS_24TemplateArgumentListInfoERKNS_14PrintingPolicyE\", \"clang::TemplateSpecializationType::PrintTemplateArgumentList(clang::TemplateArgumentListInfo const&, clang::PrintingPolicy const&)\"},\n    {\"_ZN5clang26TemplateSpecializationType25PrintTemplateArgumentListEPKNS_19TemplateArgumentLocEjRKNS_14PrintingPolicyE\", \"clang::TemplateSpecializationType::PrintTemplateArgumentList(clang::TemplateArgumentLoc const*, unsigned int, clang::PrintingPolicy const&)\"},\n    {\"_ZN5clang26TemplateSpecializationType25PrintTemplateArgumentListEPKNS_16TemplateArgumentEjRKNS_14PrintingPolicyEb\", \"clang::TemplateSpecializationType::PrintTemplateArgumentList(clang::TemplateArgument const*, unsigned int, clang::PrintingPolicy const&, bool)\"},\n    {\"_ZNK5clang8QualType4dumpEPKc\", \"clang::QualType::dump(char const*) const\"},\n    {\"_ZNK5clang8QualType4dumpEv\", \"clang::QualType::dump() const\"},\n    {\"_ZNK5clang4Type4dumpEv\", \"clang::Type::dump() const\"},\n    {\"_ZNK5clang10Qualifiers11getAsStringEv\", \"clang::Qualifiers::getAsString() const\"},\n    {\"_ZNK5clang10Qualifiers19getAsStringInternalERSsRKNS_14PrintingPolicyE\", \"clang::Qualifiers::getAsStringInternal(std::string&, clang::PrintingPolicy const&) const\"},\n    {\"_Z18AppendTypeQualListRSsj\", \"AppendTypeQualList(std::string&, unsigned int)\"},\n    {\"_ZN5clang8QualType11getAsStringEPKNS_4TypeENS_10QualifiersE\", \"clang::QualType::getAsString(clang::Type const*, clang::Qualifiers)\"},\n    {\"_ZN5clang8QualType19getAsStringInternalEPKNS_4TypeENS_10QualifiersERSsRKNS_14PrintingPolicyE\", \"clang::QualType::getAsStringInternal(clang::Type const*, clang::Qualifiers, std::string&, clang::PrintingPolicy const&)\"},\n    {\"_ZN12_GLOBAL__N_111TypePrinter5printEPKN5clang4TypeENS1_10QualifiersERSs\", \"(anonymous namespace)::TypePrinter::print(clang::Type const*, clang::Qualifiers, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111TypePrinter21printTemplateTypeParmEPKN5clang20TemplateTypeParmTypeERSs\", \"(anonymous namespace)::TypePrinter::printTemplateTypeParm(clang::TemplateTypeParmType const*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111TypePrinter27printTemplateSpecializationEPKN5clang26TemplateSpecializationTypeERSs\", \"(anonymous namespace)::TypePrinter::printTemplateSpecialization(clang::TemplateSpecializationType const*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111TypePrinter8printTagEPN5clang7TagDeclERSs\", \"(anonymous namespace)::TypePrinter::printTag(clang::TagDecl*, std::string&)\"},\n    {\"_ZN12_GLOBAL__N_111TypePrinter11AppendScopeEPN5clang11DeclContextERSs\", \"(anonymous namespace)::TypePrinter::AppendScope(clang::DeclContext*, std::string&)\"},\n    {\"_Z13printTypeSpecPKN5clang9NamedDeclERSs\", \"printTypeSpec(clang::NamedDecl const*, std::string&)\"},\n    {\"_ZN5clang9HeaderMap6CreateEPKNS_9FileEntryERNS_11FileManagerE\", \"clang::HeaderMap::Create(clang::FileEntry const*, clang::FileManager&)\"},\n    {\"_ZN5clang9HeaderMapD1Ev\", \"clang::HeaderMap::~HeaderMap()\"},\n    {\"_ZN5clang9HeaderMapD2Ev\", \"clang::HeaderMap::~HeaderMap()\"},\n    {\"_ZNK5clang9HeaderMap11getFileNameEv\", \"clang::HeaderMap::getFileName() const\"},\n    {\"_ZNK5clang9HeaderMap21getEndianAdjustedWordEj\", \"clang::HeaderMap::getEndianAdjustedWord(unsigned int) const\"},\n    {\"_ZNK5clang9HeaderMap9getHeaderEv\", \"clang::HeaderMap::getHeader() const\"},\n    {\"_ZNK5clang9HeaderMap9getBucketEj\", \"clang::HeaderMap::getBucket(unsigned int) const\"},\n    {\"_ZNK5clang9HeaderMap9getStringEj\", \"clang::HeaderMap::getString(unsigned int) const\"},\n    {\"_ZNK5clang9HeaderMap4dumpEv\", \"clang::HeaderMap::dump() const\"},\n    {\"_ZNK5clang9HeaderMap10LookupFileEN4llvm9StringRefERNS_11FileManagerE\", \"clang::HeaderMap::LookupFile(llvm::StringRef, clang::FileManager&) const\"},\n    {\"_ZN5clang14HeaderFileInfo19getControllingMacroEPNS_24ExternalIdentifierLookupE\", \"clang::HeaderFileInfo::getControllingMacro(clang::ExternalIdentifierLookup*)\"},\n    {\"_ZN5clang12HeaderSearchC1ERNS_11FileManagerE\", \"clang::HeaderSearch::HeaderSearch(clang::FileManager&)\"},\n    {\"_ZN5clang12HeaderSearchC2ERNS_11FileManagerE\", \"clang::HeaderSearch::HeaderSearch(clang::FileManager&)\"},\n    {\"_ZN5clang12HeaderSearchD1Ev\", \"clang::HeaderSearch::~HeaderSearch()\"},\n    {\"_ZN5clang12HeaderSearchD2Ev\", \"clang::HeaderSearch::~HeaderSearch()\"},\n    {\"_ZN5clang12HeaderSearch10PrintStatsEv\", \"clang::HeaderSearch::PrintStats()\"},\n    {\"_ZN5clang12HeaderSearch15CreateHeaderMapEPKNS_9FileEntryE\", \"clang::HeaderSearch::CreateHeaderMap(clang::FileEntry const*)\"},\n    {\"_ZNK5clang15DirectoryLookup7getNameEv\", \"clang::DirectoryLookup::getName() const\"},\n    {\"_ZNK5clang15DirectoryLookup10LookupFileEN4llvm9StringRefERNS_12HeaderSearchE\", \"clang::DirectoryLookup::LookupFile(llvm::StringRef, clang::HeaderSearch&) const\"},\n    {\"_ZNK5clang15DirectoryLookup17DoFrameworkLookupEN4llvm9StringRefERNS_12HeaderSearchE\", \"clang::DirectoryLookup::DoFrameworkLookup(llvm::StringRef, clang::HeaderSearch&) const\"},\n    {\"_ZN5clang12HeaderSearch10LookupFileEN4llvm9StringRefEbPKNS_15DirectoryLookupERS5_PKNS_9FileEntryE\", \"clang::HeaderSearch::LookupFile(llvm::StringRef, bool, clang::DirectoryLookup const*, clang::DirectoryLookup const*&, clang::FileEntry const*)\"},\n    {\"_ZN5clang12HeaderSearch11getFileInfoEPKNS_9FileEntryE\", \"clang::HeaderSearch::getFileInfo(clang::FileEntry const*)\"},\n    {\"_ZN5clang12HeaderSearch24LookupSubframeworkHeaderEN4llvm9StringRefEPKNS_9FileEntryE\", \"clang::HeaderSearch::LookupSubframeworkHeader(llvm::StringRef, clang::FileEntry const*)\"},\n    {\"_ZN5clang12HeaderSearch23setHeaderFileInfoForUIDENS_14HeaderFileInfoEj\", \"clang::HeaderSearch::setHeaderFileInfoForUID(clang::HeaderFileInfo, unsigned int)\"},\n    {\"_ZN5clang12HeaderSearch22ShouldEnterIncludeFileEPKNS_9FileEntryEb\", \"clang::HeaderSearch::ShouldEnterIncludeFile(clang::FileEntry const*, bool)\"},\n    {\"_ZNSt6vectorIN5clang14HeaderFileInfoESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<clang::HeaderFileInfo, std::allocator<clang::HeaderFileInfo> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::HeaderFileInfo*, std::vector<clang::HeaderFileInfo, std::allocator<clang::HeaderFileInfo> > >, unsigned long, clang::HeaderFileInfo const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIcEaSERKS1_\", \"llvm::SmallVectorImpl<char>::operator=(llvm::SmallVectorImpl<char> const&)\"},\n    {\"_ZN4llvm9StringMapISt4pairIjjENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<std::pair<unsigned int, unsigned int> >& llvm::StringMap<std::pair<unsigned int, unsigned int>, llvm::MallocAllocator>::GetOrCreateValue<std::pair<unsigned int, unsigned int> >(llvm::StringRef, std::pair<unsigned int, unsigned int>)\"},\n    {\"_ZNSt6vectorISt4pairIPKN5clang9FileEntryEPKNS1_9HeaderMapEESaIS8_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS8_SA_EERKS8_\", \"std::vector<std::pair<clang::FileEntry const*, clang::HeaderMap const*>, std::allocator<std::pair<clang::FileEntry const*, clang::HeaderMap const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::FileEntry const*, clang::HeaderMap const*>*, std::vector<std::pair<clang::FileEntry const*, clang::HeaderMap const*>, std::allocator<std::pair<clang::FileEntry const*, clang::HeaderMap const*> > > >, std::pair<clang::FileEntry const*, clang::HeaderMap const*> const&)\"},\n    {\"_ZN4llvm9StringMapIPKN5clang14DirectoryEntryENS_15MallocAllocatorEE16GetOrCreateValueIS4_EERNS_14StringMapEntryIS4_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::DirectoryEntry const*>& llvm::StringMap<clang::DirectoryEntry const*, llvm::MallocAllocator>::GetOrCreateValue<clang::DirectoryEntry const*>(llvm::StringRef, clang::DirectoryEntry const*)\"},\n    {\"_ZNK5clang5Token15isObjCAtKeywordENS_3tok15ObjCKeywordKindE\", \"clang::Token::isObjCAtKeyword(clang::tok::ObjCKeywordKind) const\"},\n    {\"_ZNK5clang5Token16getObjCKeywordIDEv\", \"clang::Token::getObjCKeywordID() const\"},\n    {\"_ZN5clang5Lexer9InitLexerEPKcS2_S2_\", \"clang::Lexer::InitLexer(char const*, char const*, char const*)\"},\n    {\"_ZN5clang5LexerC1ENS_6FileIDEPKN4llvm12MemoryBufferERNS_12PreprocessorE\", \"clang::Lexer::Lexer(clang::FileID, llvm::MemoryBuffer const*, clang::Preprocessor&)\"},\n    {\"_ZN5clang5LexerC2ENS_6FileIDEPKN4llvm12MemoryBufferERNS_12PreprocessorE\", \"clang::Lexer::Lexer(clang::FileID, llvm::MemoryBuffer const*, clang::Preprocessor&)\"},\n    {\"_ZN5clang5LexerC1ENS_14SourceLocationERKNS_11LangOptionsEPKcS6_S6_\", \"clang::Lexer::Lexer(clang::SourceLocation, clang::LangOptions const&, char const*, char const*, char const*)\"},\n    {\"_ZN5clang5LexerC2ENS_14SourceLocationERKNS_11LangOptionsEPKcS6_S6_\", \"clang::Lexer::Lexer(clang::SourceLocation, clang::LangOptions const&, char const*, char const*, char const*)\"},\n    {\"_ZN5clang5LexerC1ENS_6FileIDEPKN4llvm12MemoryBufferERKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::Lexer(clang::FileID, llvm::MemoryBuffer const*, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5LexerC2ENS_6FileIDEPKN4llvm12MemoryBufferERKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::Lexer(clang::FileID, llvm::MemoryBuffer const*, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5Lexer18Create_PragmaLexerENS_14SourceLocationES1_S1_jRNS_12PreprocessorE\", \"clang::Lexer::Create_PragmaLexer(clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, unsigned int, clang::Preprocessor&)\"},\n    {\"_ZN5clang5Lexer9StringifyERKSsb\", \"clang::Lexer::Stringify(std::string const&, bool)\"},\n    {\"_ZN5clang5Lexer9StringifyERN4llvm15SmallVectorImplIcEE\", \"clang::Lexer::Stringify(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang5Lexer11getSpellingERKNS_5TokenERKNS_13SourceManagerERKNS_11LangOptionsEPb\", \"clang::Lexer::getSpelling(clang::Token const&, clang::SourceManager const&, clang::LangOptions const&, bool*)\"},\n    {\"_ZN5clang5Lexer11getSpellingERKNS_5TokenERPKcRKNS_13SourceManagerERKNS_11LangOptionsEPb\", \"clang::Lexer::getSpelling(clang::Token const&, char const*&, clang::SourceManager const&, clang::LangOptions const&, bool*)\"},\n    {\"_ZN5clang5Lexer18MeasureTokenLengthENS_14SourceLocationERKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::MeasureTokenLength(clang::SourceLocation, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5Lexer19GetBeginningOfTokenENS_14SourceLocationERKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::GetBeginningOfToken(clang::SourceLocation, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5Lexer15ComputePreambleEPKN4llvm12MemoryBufferEj\", \"clang::Lexer::ComputePreamble(llvm::MemoryBuffer const*, unsigned int)\"},\n    {\"_ZN5clang5Lexer23AdvanceToTokenCharacterENS_14SourceLocationEjRKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::AdvanceToTokenCharacter(clang::SourceLocation, unsigned int, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5Lexer19SkipEscapedNewLinesEPKc\", \"clang::Lexer::SkipEscapedNewLines(char const*)\"},\n    {\"_ZN5clang5Lexer19getLocForEndOfTokenENS_14SourceLocationEjRKNS_13SourceManagerERKNS_11LangOptionsE\", \"clang::Lexer::getLocForEndOfToken(clang::SourceLocation, unsigned int, clang::SourceManager const&, clang::LangOptions const&)\"},\n    {\"_ZNK5clang5Lexer17getSourceLocationEPKcj\", \"clang::Lexer::getSourceLocation(char const*, unsigned int) const\"},\n    {\"_Z17GetMappedTokenLocRN5clang12PreprocessorENS_14SourceLocationEjj\", \"GetMappedTokenLoc(clang::Preprocessor&, clang::SourceLocation, unsigned int, unsigned int)\"},\n    {\"_ZNK5clang5Lexer4DiagEPKcj\", \"clang::Lexer::Diag(char const*, unsigned int) const\"},\n    {\"_ZN5clang5Lexer21getEscapedNewLineSizeEPKc\", \"clang::Lexer::getEscapedNewLineSize(char const*)\"},\n    {\"_ZN5clang5Lexer18getCharAndSizeSlowEPKcRjPNS_5TokenE\", \"clang::Lexer::getCharAndSizeSlow(char const*, unsigned int&, clang::Token*)\"},\n    {\"_ZN5clang5Lexer24getCharAndSizeSlowNoWarnEPKcRjRKNS_11LangOptionsE\", \"clang::Lexer::getCharAndSizeSlowNoWarn(char const*, unsigned int&, clang::LangOptions const&)\"},\n    {\"_ZN5clang5Lexer9SkipBytesEjb\", \"clang::Lexer::SkipBytes(unsigned int, bool)\"},\n    {\"_ZN5clang5Lexer13LexIdentifierERNS_5TokenEPKc\", \"clang::Lexer::LexIdentifier(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer18LexNumericConstantERNS_5TokenEPKc\", \"clang::Lexer::LexNumericConstant(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer16LexStringLiteralERNS_5TokenEPKcb\", \"clang::Lexer::LexStringLiteral(clang::Token&, char const*, bool)\"},\n    {\"_ZN5clang5Lexer22LexAngledStringLiteralERNS_5TokenEPKc\", \"clang::Lexer::LexAngledStringLiteral(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer15LexCharConstantERNS_5TokenEPKc\", \"clang::Lexer::LexCharConstant(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer14SkipWhitespaceERNS_5TokenEPKc\", \"clang::Lexer::SkipWhitespace(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer15SkipBCPLCommentERNS_5TokenEPKc\", \"clang::Lexer::SkipBCPLComment(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer15SaveBCPLCommentERNS_5TokenEPKc\", \"clang::Lexer::SaveBCPLComment(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer16SkipBlockCommentERNS_5TokenEPKc\", \"clang::Lexer::SkipBlockComment(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer15ReadToEndOfLineEv\", \"clang::Lexer::ReadToEndOfLine()\"},\n    {\"_ZN5clang5Lexer12LexEndOfFileERNS_5TokenEPKc\", \"clang::Lexer::LexEndOfFile(clang::Token&, char const*)\"},\n    {\"_ZN5clang5Lexer19isNextPPTokenLParenEv\", \"clang::Lexer::isNextPPTokenLParen()\"},\n    {\"_ZN5clang5Lexer16LexTokenInternalERNS_5TokenE\", \"clang::Lexer::LexTokenInternal(clang::Token&)\"},\n    {\"_ZN5clang5Lexer23IsStartOfConflictMarkerEPKc\", \"clang::Lexer::IsStartOfConflictMarker(char const*)\"},\n    {\"_ZN5clang5Lexer25HandleEndOfConflictMarkerEPKc\", \"clang::Lexer::HandleEndOfConflictMarker(char const*)\"},\n    {\"_ZN5clang20NumericLiteralParserC1EPKcS2_NS_14SourceLocationERNS_12PreprocessorE\", \"clang::NumericLiteralParser::NumericLiteralParser(char const*, char const*, clang::SourceLocation, clang::Preprocessor&)\"},\n    {\"_ZN5clang20NumericLiteralParserC2EPKcS2_NS_14SourceLocationERNS_12PreprocessorE\", \"clang::NumericLiteralParser::NumericLiteralParser(char const*, char const*, clang::SourceLocation, clang::Preprocessor&)\"},\n    {\"_ZN5clang20NumericLiteralParser27ParseNumberStartingWithZeroENS_14SourceLocationE\", \"clang::NumericLiteralParser::ParseNumberStartingWithZero(clang::SourceLocation)\"},\n    {\"_ZN5clang20NumericLiteralParser15GetIntegerValueERN4llvm5APIntE\", \"clang::NumericLiteralParser::GetIntegerValue(llvm::APInt&)\"},\n    {\"_ZN5clang20NumericLiteralParser13GetFloatValueERN4llvm7APFloatE\", \"clang::NumericLiteralParser::GetFloatValue(llvm::APFloat&)\"},\n    {\"_ZN5clang17CharLiteralParserC1EPKcS2_NS_14SourceLocationERNS_12PreprocessorE\", \"clang::CharLiteralParser::CharLiteralParser(char const*, char const*, clang::SourceLocation, clang::Preprocessor&)\"},\n    {\"_ZN5clang17CharLiteralParserC2EPKcS2_NS_14SourceLocationERNS_12PreprocessorE\", \"clang::CharLiteralParser::CharLiteralParser(char const*, char const*, clang::SourceLocation, clang::Preprocessor&)\"},\n    {\"_Z16ProcessUCNEscapeRPKcS0_RjRtN5clang13FullSourceLocEPNS4_10DiagnosticERKNS4_11LangOptionsE\", \"ProcessUCNEscape(char const*&, char const*, unsigned int&, unsigned short&, clang::FullSourceLoc, clang::Diagnostic*, clang::LangOptions const&)\"},\n    {\"_Z17ProcessCharEscapeRPKcS0_RbN5clang13FullSourceLocEbPNS3_10DiagnosticERKNS3_10TargetInfoE\", \"ProcessCharEscape(char const*&, char const*, bool&, clang::FullSourceLoc, bool, clang::Diagnostic*, clang::TargetInfo const&)\"},\n    {\"_ZN5clang19StringLiteralParserC1EPKNS_5TokenEjRNS_12PreprocessorEb\", \"clang::StringLiteralParser::StringLiteralParser(clang::Token const*, unsigned int, clang::Preprocessor&, bool)\"},\n    {\"_ZN5clang19StringLiteralParserC2EPKNS_5TokenEjRNS_12PreprocessorEb\", \"clang::StringLiteralParser::StringLiteralParser(clang::Token const*, unsigned int, clang::Preprocessor&, bool)\"},\n    {\"_ZN5clang19StringLiteralParser4initEPKNS_5TokenEj\", \"clang::StringLiteralParser::init(clang::Token const*, unsigned int)\"},\n    {\"_ZNK5clang19StringLiteralParser21getOffsetOfStringByteERKNS_5TokenEj\", \"clang::StringLiteralParser::getOffsetOfStringByte(clang::Token const&, unsigned int) const\"},\n    {\"_ZN5clang9MacroArgs6createEPKNS_9MacroInfoEPKNS_5TokenEjbRNS_12PreprocessorE\", \"clang::MacroArgs::create(clang::MacroInfo const*, clang::Token const*, unsigned int, bool, clang::Preprocessor&)\"},\n    {\"_ZNK5clang9MacroArgs16getUnexpArgumentEj\", \"clang::MacroArgs::getUnexpArgument(unsigned int) const\"},\n    {\"_ZN5clang9MacroArgs7destroyERNS_12PreprocessorE\", \"clang::MacroArgs::destroy(clang::Preprocessor&)\"},\n    {\"_ZN5clang9MacroArgs10deallocateEv\", \"clang::MacroArgs::deallocate()\"},\n    {\"_ZN5clang9MacroArgs12getArgLengthEPKNS_5TokenE\", \"clang::MacroArgs::getArgLength(clang::Token const*)\"},\n    {\"_ZNK5clang9MacroArgs20ArgNeedsPreexpansionEPKNS_5TokenERNS_12PreprocessorE\", \"clang::MacroArgs::ArgNeedsPreexpansion(clang::Token const*, clang::Preprocessor&) const\"},\n    {\"_ZN5clang9MacroArgs17getPreExpArgumentEjPKNS_9MacroInfoERNS_12PreprocessorE\", \"clang::MacroArgs::getPreExpArgument(unsigned int, clang::MacroInfo const*, clang::Preprocessor&)\"},\n    {\"_ZN5clang9MacroArgs17StringifyArgumentEPKNS_5TokenERNS_12PreprocessorEb\", \"clang::MacroArgs::StringifyArgument(clang::Token const*, clang::Preprocessor&, bool)\"},\n    {\"_ZN5clang9MacroArgs22getStringifiedArgumentEjRNS_12PreprocessorE\", \"clang::MacroArgs::getStringifiedArgument(unsigned int, clang::Preprocessor&)\"},\n    {\"_ZNSt6vectorIN5clang5TokenESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<clang::Token, std::allocator<clang::Token> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::Token*, std::vector<clang::Token, std::allocator<clang::Token> > >, unsigned long, clang::Token const&)\"},\n    {\"_ZNSt6vectorIN5clang5TokenESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::Token, std::allocator<clang::Token> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Token*, std::vector<clang::Token, std::allocator<clang::Token> > >, clang::Token const&)\"},\n    {\"_ZNSt6vectorIS_IN5clang5TokenESaIS1_EESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEmRKS3_\", \"std::vector<std::vector<clang::Token, std::allocator<clang::Token> >, std::allocator<std::vector<clang::Token, std::allocator<clang::Token> > > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::vector<clang::Token, std::allocator<clang::Token> >*, std::vector<std::vector<clang::Token, std::allocator<clang::Token> >, std::allocator<std::vector<clang::Token, std::allocator<clang::Token> > > > >, unsigned long, std::vector<clang::Token, std::allocator<clang::Token> > const&)\"},\n    {\"_ZNSt6vectorIN5clang5TokenESaIS1_EEaSERKS3_\", \"std::vector<clang::Token, std::allocator<clang::Token> >::operator=(std::vector<clang::Token, std::allocator<clang::Token> > const&)\"},\n    {\"_ZNSt6vectorIN5clang5TokenESaIS1_EEC2ERKS3_\", \"std::vector<clang::Token, std::allocator<clang::Token> >::vector(std::vector<clang::Token, std::allocator<clang::Token> > const&)\"},\n    {\"_ZN5clang9MacroInfoC1ENS_14SourceLocationE\", \"clang::MacroInfo::MacroInfo(clang::SourceLocation)\"},\n    {\"_ZN5clang9MacroInfoC2ENS_14SourceLocationE\", \"clang::MacroInfo::MacroInfo(clang::SourceLocation)\"},\n    {\"_ZN5clang9MacroInfoC1ERKS0_RN4llvm16BumpPtrAllocatorE\", \"clang::MacroInfo::MacroInfo(clang::MacroInfo const&, llvm::BumpPtrAllocator&)\"},\n    {\"_ZN5clang9MacroInfoC2ERKS0_RN4llvm16BumpPtrAllocatorE\", \"clang::MacroInfo::MacroInfo(clang::MacroInfo const&, llvm::BumpPtrAllocator&)\"},\n    {\"_ZNK5clang9MacroInfo13isIdenticalToERKS0_RNS_12PreprocessorE\", \"clang::MacroInfo::isIdenticalTo(clang::MacroInfo const&, clang::Preprocessor&) const\"},\n    {\"_ZN4llvm15SmallVectorImplIN5clang5TokenEEaSERKS3_\", \"llvm::SmallVectorImpl<clang::Token>::operator=(llvm::SmallVectorImpl<clang::Token> const&)\"},\n    {\"_ZN5clang12Preprocessor24EnableBacktrackAtThisPosEv\", \"clang::Preprocessor::EnableBacktrackAtThisPos()\"},\n    {\"_ZN5clang12Preprocessor19EnterCachingLexModeEv\", \"clang::Preprocessor::EnterCachingLexMode()\"},\n    {\"_ZN5clang12Preprocessor23CommitBacktrackedTokensEv\", \"clang::Preprocessor::CommitBacktrackedTokens()\"},\n    {\"_ZN5clang12Preprocessor9BacktrackEv\", \"clang::Preprocessor::Backtrack()\"},\n    {\"_ZN5clang12Preprocessor10CachingLexERNS_5TokenE\", \"clang::Preprocessor::CachingLex(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor9PeekAheadEj\", \"clang::Preprocessor::PeekAhead(unsigned int)\"},\n    {\"_ZN5clang12Preprocessor28AnnotatePreviousCachedTokensERKNS_5TokenE\", \"clang::Preprocessor::AnnotatePreviousCachedTokens(clang::Token const&)\"},\n    {\"_ZNSt6vectorImSaImEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPmS1_EERKm\", \"std::vector<unsigned long, std::allocator<unsigned long> >::_M_insert_aux(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long const&)\"},\n    {\"_ZN5clang12Preprocessor17AllocateMacroInfoEv\", \"clang::Preprocessor::AllocateMacroInfo()\"},\n    {\"_ZN5clang12Preprocessor17AllocateMacroInfoENS_14SourceLocationE\", \"clang::Preprocessor::AllocateMacroInfo(clang::SourceLocation)\"},\n    {\"_ZN5clang12Preprocessor14CloneMacroInfoERKNS_9MacroInfoE\", \"clang::Preprocessor::CloneMacroInfo(clang::MacroInfo const&)\"},\n    {\"_ZN5clang12Preprocessor16ReleaseMacroInfoEPNS_9MacroInfoE\", \"clang::Preprocessor::ReleaseMacroInfo(clang::MacroInfo*)\"},\n    {\"_ZN5clang12Preprocessor26DiscardUntilEndOfDirectiveEv\", \"clang::Preprocessor::DiscardUntilEndOfDirective()\"},\n    {\"_ZN5clang12Preprocessor13ReadMacroNameERNS_5TokenEc\", \"clang::Preprocessor::ReadMacroName(clang::Token&, char)\"},\n    {\"_ZN5clang12Preprocessor19CheckEndOfDirectiveEPKcb\", \"clang::Preprocessor::CheckEndOfDirective(char const*, bool)\"},\n    {\"_ZN5clang12Preprocessor28SkipExcludedConditionalBlockENS_14SourceLocationEbb\", \"clang::Preprocessor::SkipExcludedConditionalBlock(clang::SourceLocation, bool, bool)\"},\n    {\"_ZN5clang12Preprocessor31PTHSkipExcludedConditionalBlockEv\", \"clang::Preprocessor::PTHSkipExcludedConditionalBlock()\"},\n    {\"_ZN5clang12Preprocessor10LookupFileEN4llvm9StringRefEbPKNS_15DirectoryLookupERS5_\", \"clang::Preprocessor::LookupFile(llvm::StringRef, bool, clang::DirectoryLookup const*, clang::DirectoryLookup const*&)\"},\n    {\"_ZN5clang12Preprocessor15HandleDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor20HandleDigitDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleDigitDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor17HandleIfDirectiveERNS_5TokenEb\", \"clang::Preprocessor::HandleIfDirective(clang::Token&, bool)\"},\n    {\"_ZN5clang12Preprocessor20HandleIfdefDirectiveERNS_5TokenEbb\", \"clang::Preprocessor::HandleIfdefDirective(clang::Token&, bool, bool)\"},\n    {\"_ZN5clang12Preprocessor19HandleElifDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleElifDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor19HandleElseDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleElseDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor20HandleEndifDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleEndifDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor22HandleIncludeDirectiveENS_14SourceLocationERNS_5TokenEPKNS_15DirectoryLookupEb\", \"clang::Preprocessor::HandleIncludeDirective(clang::SourceLocation, clang::Token&, clang::DirectoryLookup const*, bool)\"},\n    {\"_ZN5clang12Preprocessor28HandleIncludeMacrosDirectiveENS_14SourceLocationERNS_5TokenE\", \"clang::Preprocessor::HandleIncludeMacrosDirective(clang::SourceLocation, clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor21HandleDefineDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleDefineDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor20HandleUndefDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleUndefDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor19HandleLineDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleLineDirective(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor29HandleUserDiagnosticDirectiveERNS_5TokenEb\", \"clang::Preprocessor::HandleUserDiagnosticDirective(clang::Token&, bool)\"},\n    {\"_ZN5clang12Preprocessor21HandleImportDirectiveENS_14SourceLocationERNS_5TokenE\", \"clang::Preprocessor::HandleImportDirective(clang::SourceLocation, clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor26HandleIncludeNextDirectiveENS_14SourceLocationERNS_5TokenE\", \"clang::Preprocessor::HandleIncludeNextDirective(clang::SourceLocation, clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor24HandleIdentSCCSDirectiveERNS_5TokenE\", \"clang::Preprocessor::HandleIdentSCCSDirective(clang::Token&)\"},\n    {\"_Z12GetLineValueRN5clang5TokenERjjRNS_12PreprocessorE\", \"GetLineValue(clang::Token&, unsigned int&, unsigned int, clang::Preprocessor&)\"},\n    {\"_ZN5clang12Preprocessor26GetIncludeFilenameSpellingENS_14SourceLocationERN4llvm9StringRefE\", \"clang::Preprocessor::GetIncludeFilenameSpelling(clang::SourceLocation, llvm::StringRef&)\"},\n    {\"_ZN5clang12Preprocessor22ConcatenateIncludeNameERN4llvm11SmallStringILj128EEERNS_14SourceLocationE\", \"clang::Preprocessor::ConcatenateIncludeName(llvm::SmallString<128u>&, clang::SourceLocation&)\"},\n    {\"_ZN5clang12Preprocessor26ReadMacroDefinitionArgListEPNS_9MacroInfoE\", \"clang::Preprocessor::ReadMacroDefinitionArgList(clang::MacroInfo*)\"},\n    {\"_ZSt6__findIPPN5clang14IdentifierInfoES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"clang::IdentifierInfo** std::__find<clang::IdentifierInfo**, clang::IdentifierInfo*>(clang::IdentifierInfo**, clang::IdentifierInfo**, clang::IdentifierInfo* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN5clang17PPConditionalInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<clang::PPConditionalInfo, false>::grow(unsigned long)\"},\n    {\"_ZN5clang12Preprocessor27EvaluateDirectiveExpressionERPNS_14IdentifierInfoE\", \"clang::Preprocessor::EvaluateDirectiveExpression(clang::IdentifierInfo*&)\"},\n    {\"_Z13EvaluateValueRN12_GLOBAL__N_17PPValueERN5clang5TokenER14DefinedTrackerbRNS2_12PreprocessorE\", \"EvaluateValue((anonymous namespace)::PPValue&, clang::Token&, DefinedTracker&, bool, clang::Preprocessor&)\"},\n    {\"_Z24EvaluateDirectiveSubExprRN12_GLOBAL__N_17PPValueEjRN5clang5TokenEbRNS2_12PreprocessorE\", \"EvaluateDirectiveSubExpr((anonymous namespace)::PPValue&, unsigned int, clang::Token&, bool, clang::Preprocessor&)\"},\n    {\"_ZN5clang11PPCallbacksD0Ev\", \"clang::PPCallbacks::~PPCallbacks()\"},\n    {\"_ZN5clang11PPCallbacksD1Ev\", \"clang::PPCallbacks::~PPCallbacks()\"},\n    {\"_ZN5clang11PPCallbacksD2Ev\", \"clang::PPCallbacks::~PPCallbacks()\"},\n    {\"_ZNK5clang12Preprocessor15isInPrimaryFileEv\", \"clang::Preprocessor::isInPrimaryFile() const\"},\n    {\"_ZNK5clang12Preprocessor19getCurrentFileLexerEv\", \"clang::Preprocessor::getCurrentFileLexer() const\"},\n    {\"_ZN5clang12Preprocessor15EnterSourceFileENS_6FileIDEPKNS_15DirectoryLookupENS_14SourceLocationE\", \"clang::Preprocessor::EnterSourceFile(clang::FileID, clang::DirectoryLookup const*, clang::SourceLocation)\"},\n    {\"_ZN5clang12Preprocessor22EnterSourceFileWithPTHEPNS_8PTHLexerEPKNS_15DirectoryLookupE\", \"clang::Preprocessor::EnterSourceFileWithPTH(clang::PTHLexer*, clang::DirectoryLookup const*)\"},\n    {\"_ZN5clang12Preprocessor24EnterSourceFileWithLexerEPNS_5LexerEPKNS_15DirectoryLookupE\", \"clang::Preprocessor::EnterSourceFileWithLexer(clang::Lexer*, clang::DirectoryLookup const*)\"},\n    {\"_ZN5clang12Preprocessor10EnterMacroERNS_5TokenENS_14SourceLocationEPNS_9MacroArgsE\", \"clang::Preprocessor::EnterMacro(clang::Token&, clang::SourceLocation, clang::MacroArgs*)\"},\n    {\"_ZN5clang12Preprocessor16EnterTokenStreamEPKNS_5TokenEjbb\", \"clang::Preprocessor::EnterTokenStream(clang::Token const*, unsigned int, bool, bool)\"},\n    {\"_ZN5clang12Preprocessor15HandleEndOfFileERNS_5TokenEb\", \"clang::Preprocessor::HandleEndOfFile(clang::Token&, bool)\"},\n    {\"_ZN5clang12Preprocessor21RemoveTopOfLexerStackEv\", \"clang::Preprocessor::RemoveTopOfLexerStack()\"},\n    {\"_ZN5clang12Preprocessor21HandleEndOfTokenLexerERNS_5TokenE\", \"clang::Preprocessor::HandleEndOfTokenLexer(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor27HandleMicrosoftCommentPasteERNS_5TokenE\", \"clang::Preprocessor::HandleMicrosoftCommentPaste(clang::Token&)\"},\n    {\"_ZNK5clang13SourceManager9getBufferENS_6FileIDENS_14SourceLocationEPb\", \"clang::SourceManager::getBuffer(clang::FileID, clang::SourceLocation, bool*) const\"},\n    {\"_ZN5clang12Preprocessor20PopIncludeMacroStackEv\", \"clang::Preprocessor::PopIncludeMacroStack()\"},\n    {\"_ZNSt6vectorIN5clang12Preprocessor16IncludeStackInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::Preprocessor::IncludeStackInfo, std::allocator<clang::Preprocessor::IncludeStackInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Preprocessor::IncludeStackInfo*, std::vector<clang::Preprocessor::IncludeStackInfo, std::allocator<clang::Preprocessor::IncludeStackInfo> > >, clang::Preprocessor::IncludeStackInfo const&)\"},\n    {\"_ZNK5clang12Preprocessor15getInfoForMacroEPNS_14IdentifierInfoE\", \"clang::Preprocessor::getInfoForMacro(clang::IdentifierInfo*) const\"},\n    {\"_ZN5clang12Preprocessor12setMacroInfoEPNS_14IdentifierInfoEPNS_9MacroInfoE\", \"clang::Preprocessor::setMacroInfo(clang::IdentifierInfo*, clang::MacroInfo*)\"},\n    {\"_ZN5clang12Preprocessor21RegisterBuiltinMacrosEv\", \"clang::Preprocessor::RegisterBuiltinMacros()\"},\n    {\"_ZN5clang12Preprocessor19isNextPPTokenLParenEv\", \"clang::Preprocessor::isNextPPTokenLParen()\"},\n    {\"_ZN5clang12Preprocessor29HandleMacroExpandedIdentifierERNS_5TokenEPNS_9MacroInfoE\", \"clang::Preprocessor::HandleMacroExpandedIdentifier(clang::Token&, clang::MacroInfo*)\"},\n    {\"_ZN5clang12Preprocessor18ExpandBuiltinMacroERNS_5TokenE\", \"clang::Preprocessor::ExpandBuiltinMacro(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor25ReadFunctionLikeMacroArgsERNS_5TokenEPNS_9MacroInfoERNS_14SourceLocationE\", \"clang::Preprocessor::ReadFunctionLikeMacroArgs(clang::Token&, clang::MacroInfo*, clang::SourceLocation&)\"},\n    {\"_ZN5clang12Preprocessor15markMacroAsUsedEPNS_9MacroInfoE\", \"clang::Preprocessor::markMacroAsUsed(clang::MacroInfo*)\"},\n    {\"_Z16ComputeDATE_TIMERN5clang14SourceLocationES1_RNS_12PreprocessorE\", \"ComputeDATE_TIME(clang::SourceLocation&, clang::SourceLocation&, clang::Preprocessor&)\"},\n    {\"_Z24EvaluateHasIncludeCommonRN5clang5TokenEPNS_14IdentifierInfoERNS_12PreprocessorEPKNS_15DirectoryLookupE\", \"EvaluateHasIncludeCommon(clang::Token&, clang::IdentifierInfo*, clang::Preprocessor&, clang::DirectoryLookup const*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_9MacroInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::MacroInfo*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::MacroInfo*> >::InsertIntoBucket(clang::IdentifierInfo* const&, clang::MacroInfo* const&, std::pair<clang::IdentifierInfo*, clang::MacroInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoEPNS1_9MacroInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, clang::MacroInfo*, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<clang::MacroInfo*> >::grow(unsigned int)\"},\n    {\"_ZN5clang8PTHLexerC1ERNS_12PreprocessorENS_6FileIDEPKhS5_RNS_10PTHManagerE\", \"clang::PTHLexer::PTHLexer(clang::Preprocessor&, clang::FileID, unsigned char const*, unsigned char const*, clang::PTHManager&)\"},\n    {\"_ZN5clang8PTHLexerC2ERNS_12PreprocessorENS_6FileIDEPKhS5_RNS_10PTHManagerE\", \"clang::PTHLexer::PTHLexer(clang::Preprocessor&, clang::FileID, unsigned char const*, unsigned char const*, clang::PTHManager&)\"},\n    {\"_ZN5clang8PTHLexer3LexERNS_5TokenE\", \"clang::PTHLexer::Lex(clang::Token&)\"},\n    {\"_ZN5clang8PTHLexer12LexEndOfFileERNS_5TokenE\", \"clang::PTHLexer::LexEndOfFile(clang::Token&)\"},\n    {\"_ZN5clang8PTHLexer6getEOFERNS_5TokenE\", \"clang::PTHLexer::getEOF(clang::Token&)\"},\n    {\"_ZN5clang8PTHLexer18DiscardToEndOfLineEv\", \"clang::PTHLexer::DiscardToEndOfLine()\"},\n    {\"_ZN5clang8PTHLexer9SkipBlockEv\", \"clang::PTHLexer::SkipBlock()\"},\n    {\"_ZN5clang8PTHLexer17getSourceLocationEv\", \"clang::PTHLexer::getSourceLocation()\"},\n    {\"_ZN5clang10PTHManagerC1EPKN4llvm12MemoryBufferEPvPKhPPNS_14IdentifierInfoES5_jS7_PKc\", \"clang::PTHManager::PTHManager(llvm::MemoryBuffer const*, void*, unsigned char const*, clang::IdentifierInfo**, void*, unsigned int, unsigned char const*, char const*)\"},\n    {\"_ZN5clang10PTHManagerC2EPKN4llvm12MemoryBufferEPvPKhPPNS_14IdentifierInfoES5_jS7_PKc\", \"clang::PTHManager::PTHManager(llvm::MemoryBuffer const*, void*, unsigned char const*, clang::IdentifierInfo**, void*, unsigned int, unsigned char const*, char const*)\"},\n    {\"_ZN5clang10PTHManagerD0Ev\", \"clang::PTHManager::~PTHManager()\"},\n    {\"_ZN5clang10PTHManagerD1Ev\", \"clang::PTHManager::~PTHManager()\"},\n    {\"_ZN5clang10PTHManagerD2Ev\", \"clang::PTHManager::~PTHManager()\"},\n    {\"_ZN5clang10PTHManager6CreateERKSsRNS_10DiagnosticE\", \"clang::PTHManager::Create(std::string const&, clang::Diagnostic&)\"},\n    {\"_ZN5clang10PTHManager26LazilyCreateIdentifierInfoEj\", \"clang::PTHManager::LazilyCreateIdentifierInfo(unsigned int)\"},\n    {\"_ZN5clang10PTHManager3getEN4llvm9StringRefE\", \"clang::PTHManager::get(llvm::StringRef)\"},\n    {\"_ZN5clang10PTHManager11CreateLexerENS_6FileIDE\", \"clang::PTHManager::CreateLexer(clang::FileID)\"},\n    {\"_ZN5clang10PTHManager15createStatCacheEv\", \"clang::PTHManager::createStatCache()\"},\n    {\"_ZN12_GLOBAL__N_112PTHStatCacheD1Ev\", \"(anonymous namespace)::PTHStatCache::~PTHStatCache()\"},\n    {\"_ZN12_GLOBAL__N_112PTHStatCacheD0Ev\", \"(anonymous namespace)::PTHStatCache::~PTHStatCache()\"},\n    {\"_ZN12_GLOBAL__N_112PTHStatCache7getStatEPKcR4statPi\", \"(anonymous namespace)::PTHStatCache::getStat(char const*, stat&, int*)\"},\n    {\"_ZN5clang8PTHLexerD1Ev\", \"clang::PTHLexer::~PTHLexer()\"},\n    {\"_ZN5clang8PTHLexerD0Ev\", \"clang::PTHLexer::~PTHLexer()\"},\n    {\"_ZN5clang8PTHLexer11IndirectLexERNS_5TokenE\", \"clang::PTHLexer::IndirectLex(clang::Token&)\"},\n    {\"_ZN5clang13PragmaHandlerD0Ev\", \"clang::PragmaHandler::~PragmaHandler()\"},\n    {\"_ZN5clang13PragmaHandlerD1Ev\", \"clang::PragmaHandler::~PragmaHandler()\"},\n    {\"_ZN5clang13PragmaHandlerD2Ev\", \"clang::PragmaHandler::~PragmaHandler()\"},\n    {\"_ZN5clang18EmptyPragmaHandlerC1Ev\", \"clang::EmptyPragmaHandler::EmptyPragmaHandler()\"},\n    {\"_ZN5clang18EmptyPragmaHandlerC2Ev\", \"clang::EmptyPragmaHandler::EmptyPragmaHandler()\"},\n    {\"_ZN5clang18EmptyPragmaHandler12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::EmptyPragmaHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang15PragmaNamespaceD0Ev\", \"clang::PragmaNamespace::~PragmaNamespace()\"},\n    {\"_ZN5clang15PragmaNamespaceD1Ev\", \"clang::PragmaNamespace::~PragmaNamespace()\"},\n    {\"_ZN5clang15PragmaNamespaceD2Ev\", \"clang::PragmaNamespace::~PragmaNamespace()\"},\n    {\"_ZNK5clang15PragmaNamespace11FindHandlerEN4llvm9StringRefEb\", \"clang::PragmaNamespace::FindHandler(llvm::StringRef, bool) const\"},\n    {\"_ZN5clang15PragmaNamespace9AddPragmaEPNS_13PragmaHandlerE\", \"clang::PragmaNamespace::AddPragma(clang::PragmaHandler*)\"},\n    {\"_ZN5clang15PragmaNamespace19RemovePragmaHandlerEPNS_13PragmaHandlerE\", \"clang::PragmaNamespace::RemovePragmaHandler(clang::PragmaHandler*)\"},\n    {\"_ZN5clang15PragmaNamespace12HandlePragmaERNS_12PreprocessorENS_20PragmaIntroducerKindERNS_5TokenE\", \"clang::PragmaNamespace::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor21HandlePragmaDirectiveEj\", \"clang::Preprocessor::HandlePragmaDirective(unsigned int)\"},\n    {\"_ZN5clang12Preprocessor13Handle_PragmaERNS_5TokenE\", \"clang::Preprocessor::Handle_Pragma(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor13Handle_PragmaEjRKSsNS_14SourceLocationES3_\", \"clang::Preprocessor::Handle_Pragma(unsigned int, std::string const&, clang::SourceLocation, clang::SourceLocation)\"},\n    {\"_ZN5clang12Preprocessor23HandleMicrosoft__pragmaERNS_5TokenE\", \"clang::Preprocessor::HandleMicrosoft__pragma(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor16HandlePragmaOnceERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaOnce(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor16HandlePragmaMarkEv\", \"clang::Preprocessor::HandlePragmaMark()\"},\n    {\"_ZN5clang12Preprocessor18HandlePragmaPoisonERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaPoison(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor24HandlePragmaSystemHeaderERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaSystemHeader(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor22HandlePragmaDependencyERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaDependency(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor19HandlePragmaCommentERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaComment(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor19HandlePragmaMessageERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaMessage(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor25ParsePragmaPushOrPopMacroERNS_5TokenE\", \"clang::Preprocessor::ParsePragmaPushOrPopMacro(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor21HandlePragmaPushMacroERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaPushMacro(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor20HandlePragmaPopMacroERNS_5TokenE\", \"clang::Preprocessor::HandlePragmaPopMacro(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor16AddPragmaHandlerEN4llvm9StringRefEPNS_13PragmaHandlerE\", \"clang::Preprocessor::AddPragmaHandler(llvm::StringRef, clang::PragmaHandler*)\"},\n    {\"_ZN5clang12Preprocessor19RemovePragmaHandlerEN4llvm9StringRefEPNS_13PragmaHandlerE\", \"clang::Preprocessor::RemovePragmaHandler(llvm::StringRef, clang::PragmaHandler*)\"},\n    {\"_ZN5clang12Preprocessor22RegisterBuiltinPragmasEv\", \"clang::Preprocessor::RegisterBuiltinPragmas()\"},\n    {\"_ZN12_GLOBAL__N_120PragmaCommentHandlerD1Ev\", \"(anonymous namespace)::PragmaCommentHandler::~PragmaCommentHandler()\"},\n    {\"_ZN12_GLOBAL__N_120PragmaCommentHandlerD0Ev\", \"(anonymous namespace)::PragmaCommentHandler::~PragmaCommentHandler()\"},\n    {\"_ZN12_GLOBAL__N_120PragmaCommentHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaCommentHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSTDC_UnknownHandlerD1Ev\", \"(anonymous namespace)::PragmaSTDC_UnknownHandler::~PragmaSTDC_UnknownHandler()\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSTDC_UnknownHandlerD0Ev\", \"(anonymous namespace)::PragmaSTDC_UnknownHandler::~PragmaSTDC_UnknownHandler()\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSTDC_UnknownHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaSTDC_UnknownHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_134PragmaSTDC_CX_LIMITED_RANGEHandlerD1Ev\", \"(anonymous namespace)::PragmaSTDC_CX_LIMITED_RANGEHandler::~PragmaSTDC_CX_LIMITED_RANGEHandler()\"},\n    {\"_ZN12_GLOBAL__N_134PragmaSTDC_CX_LIMITED_RANGEHandlerD0Ev\", \"(anonymous namespace)::PragmaSTDC_CX_LIMITED_RANGEHandler::~PragmaSTDC_CX_LIMITED_RANGEHandler()\"},\n    {\"_ZN12_GLOBAL__N_134PragmaSTDC_CX_LIMITED_RANGEHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaSTDC_CX_LIMITED_RANGEHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_114LexOnOffSwitchERN5clang12PreprocessorE\", \"(anonymous namespace)::LexOnOffSwitch(clang::Preprocessor&)\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FENV_ACCESSHandlerD1Ev\", \"(anonymous namespace)::PragmaSTDC_FENV_ACCESSHandler::~PragmaSTDC_FENV_ACCESSHandler()\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FENV_ACCESSHandlerD0Ev\", \"(anonymous namespace)::PragmaSTDC_FENV_ACCESSHandler::~PragmaSTDC_FENV_ACCESSHandler()\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FENV_ACCESSHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaSTDC_FENV_ACCESSHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FP_CONTRACTHandlerD1Ev\", \"(anonymous namespace)::PragmaSTDC_FP_CONTRACTHandler::~PragmaSTDC_FP_CONTRACTHandler()\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FP_CONTRACTHandlerD0Ev\", \"(anonymous namespace)::PragmaSTDC_FP_CONTRACTHandler::~PragmaSTDC_FP_CONTRACTHandler()\"},\n    {\"_ZN12_GLOBAL__N_129PragmaSTDC_FP_CONTRACTHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaSTDC_FP_CONTRACTHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_118PragmaDebugHandlerD1Ev\", \"(anonymous namespace)::PragmaDebugHandler::~PragmaDebugHandler()\"},\n    {\"_ZN12_GLOBAL__N_118PragmaDebugHandlerD0Ev\", \"(anonymous namespace)::PragmaDebugHandler::~PragmaDebugHandler()\"},\n    {\"_ZN12_GLOBAL__N_118PragmaDebugHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaDebugHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDiagnosticHandlerD1Ev\", \"(anonymous namespace)::PragmaDiagnosticHandler::~PragmaDiagnosticHandler()\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDiagnosticHandlerD0Ev\", \"(anonymous namespace)::PragmaDiagnosticHandler::~PragmaDiagnosticHandler()\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDiagnosticHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaDiagnosticHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDependencyHandlerD1Ev\", \"(anonymous namespace)::PragmaDependencyHandler::~PragmaDependencyHandler()\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDependencyHandlerD0Ev\", \"(anonymous namespace)::PragmaDependencyHandler::~PragmaDependencyHandler()\"},\n    {\"_ZN12_GLOBAL__N_123PragmaDependencyHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaDependencyHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSystemHeaderHandlerD1Ev\", \"(anonymous namespace)::PragmaSystemHeaderHandler::~PragmaSystemHeaderHandler()\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSystemHeaderHandlerD0Ev\", \"(anonymous namespace)::PragmaSystemHeaderHandler::~PragmaSystemHeaderHandler()\"},\n    {\"_ZN12_GLOBAL__N_125PragmaSystemHeaderHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaSystemHeaderHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_119PragmaPoisonHandlerD1Ev\", \"(anonymous namespace)::PragmaPoisonHandler::~PragmaPoisonHandler()\"},\n    {\"_ZN12_GLOBAL__N_119PragmaPoisonHandlerD0Ev\", \"(anonymous namespace)::PragmaPoisonHandler::~PragmaPoisonHandler()\"},\n    {\"_ZN12_GLOBAL__N_119PragmaPoisonHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaPoisonHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_120PragmaMessageHandlerD1Ev\", \"(anonymous namespace)::PragmaMessageHandler::~PragmaMessageHandler()\"},\n    {\"_ZN12_GLOBAL__N_120PragmaMessageHandlerD0Ev\", \"(anonymous namespace)::PragmaMessageHandler::~PragmaMessageHandler()\"},\n    {\"_ZN12_GLOBAL__N_120PragmaMessageHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaMessageHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_121PragmaPopMacroHandlerD1Ev\", \"(anonymous namespace)::PragmaPopMacroHandler::~PragmaPopMacroHandler()\"},\n    {\"_ZN12_GLOBAL__N_121PragmaPopMacroHandlerD0Ev\", \"(anonymous namespace)::PragmaPopMacroHandler::~PragmaPopMacroHandler()\"},\n    {\"_ZN12_GLOBAL__N_121PragmaPopMacroHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaPopMacroHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_122PragmaPushMacroHandlerD1Ev\", \"(anonymous namespace)::PragmaPushMacroHandler::~PragmaPushMacroHandler()\"},\n    {\"_ZN12_GLOBAL__N_122PragmaPushMacroHandlerD0Ev\", \"(anonymous namespace)::PragmaPushMacroHandler::~PragmaPushMacroHandler()\"},\n    {\"_ZN12_GLOBAL__N_122PragmaPushMacroHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaPushMacroHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_117PragmaMarkHandlerD1Ev\", \"(anonymous namespace)::PragmaMarkHandler::~PragmaMarkHandler()\"},\n    {\"_ZN12_GLOBAL__N_117PragmaMarkHandlerD0Ev\", \"(anonymous namespace)::PragmaMarkHandler::~PragmaMarkHandler()\"},\n    {\"_ZN12_GLOBAL__N_117PragmaMarkHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaMarkHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN12_GLOBAL__N_117PragmaOnceHandlerD1Ev\", \"(anonymous namespace)::PragmaOnceHandler::~PragmaOnceHandler()\"},\n    {\"_ZN12_GLOBAL__N_117PragmaOnceHandlerD0Ev\", \"(anonymous namespace)::PragmaOnceHandler::~PragmaOnceHandler()\"},\n    {\"_ZN12_GLOBAL__N_117PragmaOnceHandler12HandlePragmaERN5clang12PreprocessorENS1_20PragmaIntroducerKindERNS1_5TokenE\", \"(anonymous namespace)::PragmaOnceHandler::HandlePragma(clang::Preprocessor&, clang::PragmaIntroducerKind, clang::Token&)\"},\n    {\"_ZN5clang18EmptyPragmaHandlerD1Ev\", \"clang::EmptyPragmaHandler::~EmptyPragmaHandler()\"},\n    {\"_ZN5clang18EmptyPragmaHandlerD0Ev\", \"clang::EmptyPragmaHandler::~EmptyPragmaHandler()\"},\n    {\"_ZNSt6vectorIPN5clang9MacroInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::MacroInfo**, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > >, clang::MacroInfo* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoESt6vectorIPNS1_9MacroInfoESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<clang::IdentifierInfo*, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> >, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > > >::FindAndConstruct(clang::IdentifierInfo* const&)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoESt6vectorIPNS1_9MacroInfoESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16InsertIntoBucketERKS3_RKS8_PSt4pairIS3_S8_E\", \"llvm::DenseMap<clang::IdentifierInfo*, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> >, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > > >::InsertIntoBucket(clang::IdentifierInfo* const&, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > const&, std::pair<clang::IdentifierInfo*, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPN5clang14IdentifierInfoESt6vectorIPNS1_9MacroInfoESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<clang::IdentifierInfo*, std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> >, llvm::DenseMapInfo<clang::IdentifierInfo*>, llvm::DenseMapInfo<std::vector<clang::MacroInfo*, std::allocator<clang::MacroInfo*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm9StringMapIPN5clang13PragmaHandlerENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::PragmaHandler*>& llvm::StringMap<clang::PragmaHandler*, llvm::MallocAllocator>::GetOrCreateValue<clang::PragmaHandler*>(llvm::StringRef, clang::PragmaHandler*)\"},\n    {\"_ZN5clang33ExternalPreprocessingRecordSourceD0Ev\", \"clang::ExternalPreprocessingRecordSource::~ExternalPreprocessingRecordSource()\"},\n    {\"_ZN5clang33ExternalPreprocessingRecordSourceD1Ev\", \"clang::ExternalPreprocessingRecordSource::~ExternalPreprocessingRecordSource()\"},\n    {\"_ZN5clang33ExternalPreprocessingRecordSourceD2Ev\", \"clang::ExternalPreprocessingRecordSource::~ExternalPreprocessingRecordSource()\"},\n    {\"_ZN5clang18InclusionDirectiveC1ERNS_19PreprocessingRecordENS0_13InclusionKindEN4llvm9StringRefEbPKNS_9FileEntryENS_11SourceRangeE\", \"clang::InclusionDirective::InclusionDirective(clang::PreprocessingRecord&, clang::InclusionDirective::InclusionKind, llvm::StringRef, bool, clang::FileEntry const*, clang::SourceRange)\"},\n    {\"_ZN5clang18InclusionDirectiveC2ERNS_19PreprocessingRecordENS0_13InclusionKindEN4llvm9StringRefEbPKNS_9FileEntryENS_11SourceRangeE\", \"clang::InclusionDirective::InclusionDirective(clang::PreprocessingRecord&, clang::InclusionDirective::InclusionKind, llvm::StringRef, bool, clang::FileEntry const*, clang::SourceRange)\"},\n    {\"_ZNK5clang19PreprocessingRecord29MaybeLoadPreallocatedEntitiesEv\", \"clang::PreprocessingRecord::MaybeLoadPreallocatedEntities() const\"},\n    {\"_ZN5clang19PreprocessingRecordC1Ev\", \"clang::PreprocessingRecord::PreprocessingRecord()\"},\n    {\"_ZN5clang19PreprocessingRecordC2Ev\", \"clang::PreprocessingRecord::PreprocessingRecord()\"},\n    {\"_ZN5clang19PreprocessingRecord5beginEb\", \"clang::PreprocessingRecord::begin(bool)\"},\n    {\"_ZN5clang19PreprocessingRecord3endEb\", \"clang::PreprocessingRecord::end(bool)\"},\n    {\"_ZNK5clang19PreprocessingRecord5beginEb\", \"clang::PreprocessingRecord::begin(bool) const\"},\n    {\"_ZNK5clang19PreprocessingRecord3endEb\", \"clang::PreprocessingRecord::end(bool) const\"},\n    {\"_ZN5clang19PreprocessingRecord21addPreprocessedEntityEPNS_18PreprocessedEntityE\", \"clang::PreprocessingRecord::addPreprocessedEntity(clang::PreprocessedEntity*)\"},\n    {\"_ZN5clang19PreprocessingRecord17SetExternalSourceERNS_33ExternalPreprocessingRecordSourceEj\", \"clang::PreprocessingRecord::SetExternalSource(clang::ExternalPreprocessingRecordSource&, unsigned int)\"},\n    {\"_ZN5clang19PreprocessingRecord21SetPreallocatedEntityEjPNS_18PreprocessedEntityE\", \"clang::PreprocessingRecord::SetPreallocatedEntity(unsigned int, clang::PreprocessedEntity*)\"},\n    {\"_ZN5clang19PreprocessingRecord23RegisterMacroDefinitionEPNS_9MacroInfoEPNS_15MacroDefinitionE\", \"clang::PreprocessingRecord::RegisterMacroDefinition(clang::MacroInfo*, clang::MacroDefinition*)\"},\n    {\"_ZN5clang19PreprocessingRecord19findMacroDefinitionEPKNS_9MacroInfoE\", \"clang::PreprocessingRecord::findMacroDefinition(clang::MacroInfo const*)\"},\n    {\"_ZN5clang19PreprocessingRecord12MacroExpandsERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PreprocessingRecord::MacroExpands(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang19PreprocessingRecord12MacroDefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PreprocessingRecord::MacroDefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang19PreprocessingRecord14MacroUndefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PreprocessingRecord::MacroUndefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang19PreprocessingRecord18InclusionDirectiveENS_14SourceLocationERKNS_5TokenEN4llvm9StringRefEbPKNS_9FileEntryES1_\", \"clang::PreprocessingRecord::InclusionDirective(clang::SourceLocation, clang::Token const&, llvm::StringRef, bool, clang::FileEntry const*, clang::SourceLocation)\"},\n    {\"_ZN5clang19PreprocessingRecordD1Ev\", \"clang::PreprocessingRecord::~PreprocessingRecord()\"},\n    {\"_ZN5clang19PreprocessingRecordD0Ev\", \"clang::PreprocessingRecord::~PreprocessingRecord()\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9MacroInfoEPNS1_15MacroDefinitionENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PSt4pairIS4_S6_E\", \"llvm::DenseMap<clang::MacroInfo const*, clang::MacroDefinition*, llvm::DenseMapInfo<clang::MacroInfo const*>, llvm::DenseMapInfo<clang::MacroDefinition*> >::InsertIntoBucket(clang::MacroInfo const* const&, clang::MacroDefinition* const&, std::pair<clang::MacroInfo const*, clang::MacroDefinition*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9MacroInfoEPNS1_15MacroDefinitionENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<clang::MacroInfo const*, clang::MacroDefinition*, llvm::DenseMapInfo<clang::MacroInfo const*>, llvm::DenseMapInfo<clang::MacroDefinition*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN5clang18PreprocessedEntityESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::PreprocessedEntity**, std::vector<clang::PreprocessedEntity*, std::allocator<clang::PreprocessedEntity*> > >, unsigned long, clang::PreprocessedEntity* const&)\"},\n    {\"_ZN5clang26ExternalPreprocessorSourceD0Ev\", \"clang::ExternalPreprocessorSource::~ExternalPreprocessorSource()\"},\n    {\"_ZN5clang26ExternalPreprocessorSourceD1Ev\", \"clang::ExternalPreprocessorSource::~ExternalPreprocessorSource()\"},\n    {\"_ZN5clang26ExternalPreprocessorSourceD2Ev\", \"clang::ExternalPreprocessorSource::~ExternalPreprocessorSource()\"},\n    {\"_ZN5clang12PreprocessorC1ERNS_10DiagnosticERKNS_11LangOptionsERKNS_10TargetInfoERNS_13SourceManagerERNS_12HeaderSearchEPNS_20IdentifierInfoLookupEb\", \"clang::Preprocessor::Preprocessor(clang::Diagnostic&, clang::LangOptions const&, clang::TargetInfo const&, clang::SourceManager&, clang::HeaderSearch&, clang::IdentifierInfoLookup*, bool)\"},\n    {\"_ZN5clang12PreprocessorC2ERNS_10DiagnosticERKNS_11LangOptionsERKNS_10TargetInfoERNS_13SourceManagerERNS_12HeaderSearchEPNS_20IdentifierInfoLookupEb\", \"clang::Preprocessor::Preprocessor(clang::Diagnostic&, clang::LangOptions const&, clang::TargetInfo const&, clang::SourceManager&, clang::HeaderSearch&, clang::IdentifierInfoLookup*, bool)\"},\n    {\"_ZN5clang12PreprocessorD1Ev\", \"clang::Preprocessor::~Preprocessor()\"},\n    {\"_ZN5clang12PreprocessorD2Ev\", \"clang::Preprocessor::~Preprocessor()\"},\n    {\"_ZN5clang12Preprocessor13setPTHManagerEPNS_10PTHManagerE\", \"clang::Preprocessor::setPTHManager(clang::PTHManager*)\"},\n    {\"_ZNK5clang12Preprocessor9DumpTokenERKNS_5TokenEb\", \"clang::Preprocessor::DumpToken(clang::Token const&, bool) const\"},\n    {\"_ZNK5clang12Preprocessor12DumpLocationENS_14SourceLocationE\", \"clang::Preprocessor::DumpLocation(clang::SourceLocation) const\"},\n    {\"_ZNK5clang12Preprocessor9DumpMacroERKNS_9MacroInfoE\", \"clang::Preprocessor::DumpMacro(clang::MacroInfo const&) const\"},\n    {\"_ZN5clang12Preprocessor10PrintStatsEv\", \"clang::Preprocessor::PrintStats()\"},\n    {\"_ZNK5clang12Preprocessor11macro_beginEb\", \"clang::Preprocessor::macro_begin(bool) const\"},\n    {\"_ZNK5clang12Preprocessor9macro_endEb\", \"clang::Preprocessor::macro_end(bool) const\"},\n    {\"_ZN5clang12Preprocessor22SetCodeCompletionPointEPKNS_9FileEntryEjj\", \"clang::Preprocessor::SetCodeCompletionPoint(clang::FileEntry const*, unsigned int, unsigned int)\"},\n    {\"_ZNK5clang12Preprocessor20isCodeCompletionFileENS_14SourceLocationE\", \"clang::Preprocessor::isCodeCompletionFile(clang::SourceLocation) const\"},\n    {\"_ZN5clang12Preprocessor27CodeCompleteNaturalLanguageEv\", \"clang::Preprocessor::CodeCompleteNaturalLanguage()\"},\n    {\"_ZNK5clang12Preprocessor11getSpellingERKNS_5TokenERN4llvm15SmallVectorImplIcEEPb\", \"clang::Preprocessor::getSpelling(clang::Token const&, llvm::SmallVectorImpl<char>&, bool*) const\"},\n    {\"_ZN5clang12Preprocessor12CreateStringEPKcjRNS_5TokenENS_14SourceLocationE\", \"clang::Preprocessor::CreateString(char const*, unsigned int, clang::Token&, clang::SourceLocation)\"},\n    {\"_ZN5clang12Preprocessor19EnterMainSourceFileEv\", \"clang::Preprocessor::EnterMainSourceFile()\"},\n    {\"_ZN5clang12Preprocessor13EndSourceFileEv\", \"clang::Preprocessor::EndSourceFile()\"},\n    {\"_ZNK5clang12Preprocessor20LookUpIdentifierInfoERNS_5TokenE\", \"clang::Preprocessor::LookUpIdentifierInfo(clang::Token&) const\"},\n    {\"_ZN5clang12Preprocessor16HandleIdentifierERNS_5TokenE\", \"clang::Preprocessor::HandleIdentifier(clang::Token&)\"},\n    {\"_ZN5clang12Preprocessor17AddCommentHandlerEPNS_14CommentHandlerE\", \"clang::Preprocessor::AddCommentHandler(clang::CommentHandler*)\"},\n    {\"_ZN5clang12Preprocessor20RemoveCommentHandlerEPNS_14CommentHandlerE\", \"clang::Preprocessor::RemoveCommentHandler(clang::CommentHandler*)\"},\n    {\"_ZN5clang12Preprocessor13HandleCommentERNS_5TokenENS_11SourceRangeE\", \"clang::Preprocessor::HandleComment(clang::Token&, clang::SourceRange)\"},\n    {\"_ZN5clang14CommentHandlerD0Ev\", \"clang::CommentHandler::~CommentHandler()\"},\n    {\"_ZN5clang14CommentHandlerD1Ev\", \"clang::CommentHandler::~CommentHandler()\"},\n    {\"_ZN5clang14CommentHandlerD2Ev\", \"clang::CommentHandler::~CommentHandler()\"},\n    {\"_ZN5clang21CodeCompletionHandlerD0Ev\", \"clang::CodeCompletionHandler::~CodeCompletionHandler()\"},\n    {\"_ZN5clang21CodeCompletionHandlerD1Ev\", \"clang::CodeCompletionHandler::~CodeCompletionHandler()\"},\n    {\"_ZN5clang21CodeCompletionHandlerD2Ev\", \"clang::CodeCompletionHandler::~CodeCompletionHandler()\"},\n    {\"_ZN5clang12Preprocessor25createPreprocessingRecordEv\", \"clang::Preprocessor::createPreprocessingRecord()\"},\n    {\"_ZN5clang21CodeCompletionHandler21CodeCompleteDirectiveEb\", \"clang::CodeCompletionHandler::CodeCompleteDirective(bool)\"},\n    {\"_ZN5clang21CodeCompletionHandler34CodeCompleteInConditionalExclusionEv\", \"clang::CodeCompletionHandler::CodeCompleteInConditionalExclusion()\"},\n    {\"_ZN5clang21CodeCompletionHandler21CodeCompleteMacroNameEb\", \"clang::CodeCompletionHandler::CodeCompleteMacroName(bool)\"},\n    {\"_ZN5clang21CodeCompletionHandler34CodeCompletePreprocessorExpressionEv\", \"clang::CodeCompletionHandler::CodeCompletePreprocessorExpression()\"},\n    {\"_ZN5clang21CodeCompletionHandler25CodeCompleteMacroArgumentEPNS_14IdentifierInfoEPNS_9MacroInfoEj\", \"clang::CodeCompletionHandler::CodeCompleteMacroArgument(clang::IdentifierInfo*, clang::MacroInfo*, unsigned int)\"},\n    {\"_ZN5clang21CodeCompletionHandler27CodeCompleteNaturalLanguageEv\", \"clang::CodeCompletionHandler::CodeCompleteNaturalLanguage()\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN5clang14CommentHandlerESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<clang::CommentHandler**, std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> > > std::__find<__gnu_cxx::__normal_iterator<clang::CommentHandler**, std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> > >, clang::CommentHandler*>(__gnu_cxx::__normal_iterator<clang::CommentHandler**, std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> > >, __gnu_cxx::__normal_iterator<clang::CommentHandler**, std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> > >, clang::CommentHandler* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN5clang14CommentHandlerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CommentHandler**, std::vector<clang::CommentHandler*, std::allocator<clang::CommentHandler*> > >, clang::CommentHandler* const&)\"},\n    {\"_ZN5clang18PPChainedCallbacksD1Ev\", \"clang::PPChainedCallbacks::~PPChainedCallbacks()\"},\n    {\"_ZN5clang18PPChainedCallbacksD0Ev\", \"clang::PPChainedCallbacks::~PPChainedCallbacks()\"},\n    {\"_ZN5clang18PPChainedCallbacks11FileChangedENS_14SourceLocationENS_11PPCallbacks16FileChangeReasonENS_6SrcMgr18CharacteristicKindE\", \"clang::PPChainedCallbacks::FileChanged(clang::SourceLocation, clang::PPCallbacks::FileChangeReason, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang18PPChainedCallbacks11FileSkippedERKNS_9FileEntryERKNS_5TokenENS_6SrcMgr18CharacteristicKindE\", \"clang::PPChainedCallbacks::FileSkipped(clang::FileEntry const&, clang::Token const&, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang11PPCallbacks18InclusionDirectiveENS_14SourceLocationERKNS_5TokenEN4llvm9StringRefEbPKNS_9FileEntryES1_\", \"clang::PPCallbacks::InclusionDirective(clang::SourceLocation, clang::Token const&, llvm::StringRef, bool, clang::FileEntry const*, clang::SourceLocation)\"},\n    {\"_ZN5clang18PPChainedCallbacks13EndOfMainFileEv\", \"clang::PPChainedCallbacks::EndOfMainFile()\"},\n    {\"_ZN5clang18PPChainedCallbacks5IdentENS_14SourceLocationERKSs\", \"clang::PPChainedCallbacks::Ident(clang::SourceLocation, std::string const&)\"},\n    {\"_ZN5clang18PPChainedCallbacks13PragmaCommentENS_14SourceLocationEPKNS_14IdentifierInfoERKSs\", \"clang::PPChainedCallbacks::PragmaComment(clang::SourceLocation, clang::IdentifierInfo const*, std::string const&)\"},\n    {\"_ZN5clang18PPChainedCallbacks13PragmaMessageENS_14SourceLocationEN4llvm9StringRefE\", \"clang::PPChainedCallbacks::PragmaMessage(clang::SourceLocation, llvm::StringRef)\"},\n    {\"_ZN5clang18PPChainedCallbacks12MacroExpandsERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPChainedCallbacks::MacroExpands(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang18PPChainedCallbacks12MacroDefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPChainedCallbacks::MacroDefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang18PPChainedCallbacks14MacroUndefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPChainedCallbacks::MacroUndefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang18PPChainedCallbacks2IfENS_11SourceRangeE\", \"clang::PPChainedCallbacks::If(clang::SourceRange)\"},\n    {\"_ZN5clang18PPChainedCallbacks4ElifENS_11SourceRangeE\", \"clang::PPChainedCallbacks::Elif(clang::SourceRange)\"},\n    {\"_ZN5clang18PPChainedCallbacks5IfdefERKNS_5TokenE\", \"clang::PPChainedCallbacks::Ifdef(clang::Token const&)\"},\n    {\"_ZN5clang18PPChainedCallbacks6IfndefERKNS_5TokenE\", \"clang::PPChainedCallbacks::Ifndef(clang::Token const&)\"},\n    {\"_ZN5clang18PPChainedCallbacks4ElseEv\", \"clang::PPChainedCallbacks::Else()\"},\n    {\"_ZN5clang18PPChainedCallbacks5EndifEv\", \"clang::PPChainedCallbacks::Endif()\"},\n    {\"_ZN5clang11PPCallbacks11FileChangedENS_14SourceLocationENS0_16FileChangeReasonENS_6SrcMgr18CharacteristicKindE\", \"clang::PPCallbacks::FileChanged(clang::SourceLocation, clang::PPCallbacks::FileChangeReason, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang11PPCallbacks11FileSkippedERKNS_9FileEntryERKNS_5TokenENS_6SrcMgr18CharacteristicKindE\", \"clang::PPCallbacks::FileSkipped(clang::FileEntry const&, clang::Token const&, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang11PPCallbacks13EndOfMainFileEv\", \"clang::PPCallbacks::EndOfMainFile()\"},\n    {\"_ZN5clang11PPCallbacks5IdentENS_14SourceLocationERKSs\", \"clang::PPCallbacks::Ident(clang::SourceLocation, std::string const&)\"},\n    {\"_ZN5clang11PPCallbacks13PragmaCommentENS_14SourceLocationEPKNS_14IdentifierInfoERKSs\", \"clang::PPCallbacks::PragmaComment(clang::SourceLocation, clang::IdentifierInfo const*, std::string const&)\"},\n    {\"_ZN5clang11PPCallbacks13PragmaMessageENS_14SourceLocationEN4llvm9StringRefE\", \"clang::PPCallbacks::PragmaMessage(clang::SourceLocation, llvm::StringRef)\"},\n    {\"_ZN5clang11PPCallbacks12MacroExpandsERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPCallbacks::MacroExpands(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang11PPCallbacks12MacroDefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPCallbacks::MacroDefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang11PPCallbacks14MacroUndefinedERKNS_5TokenEPKNS_9MacroInfoE\", \"clang::PPCallbacks::MacroUndefined(clang::Token const&, clang::MacroInfo const*)\"},\n    {\"_ZN5clang11PPCallbacks2IfENS_11SourceRangeE\", \"clang::PPCallbacks::If(clang::SourceRange)\"},\n    {\"_ZN5clang11PPCallbacks4ElifENS_11SourceRangeE\", \"clang::PPCallbacks::Elif(clang::SourceRange)\"},\n    {\"_ZN5clang11PPCallbacks5IfdefERKNS_5TokenE\", \"clang::PPCallbacks::Ifdef(clang::Token const&)\"},\n    {\"_ZN5clang11PPCallbacks6IfndefERKNS_5TokenE\", \"clang::PPCallbacks::Ifndef(clang::Token const&)\"},\n    {\"_ZN5clang11PPCallbacks4ElseEv\", \"clang::PPCallbacks::Else()\"},\n    {\"_ZN5clang11PPCallbacks5EndifEv\", \"clang::PPCallbacks::Endif()\"},\n    {\"_ZN5clang15PragmaNamespace14getIfNamespaceEv\", \"clang::PragmaNamespace::getIfNamespace()\"},\n    {\"_ZN5clang13PragmaHandler14getIfNamespaceEv\", \"clang::PragmaHandler::getIfNamespace()\"},\n    {\"_ZN5clang15IdentifierTable3getEN4llvm9StringRefE\", \"clang::IdentifierTable::get(llvm::StringRef)\"},\n    {\"_ZN4llvm9StringMapIPN5clang14IdentifierInfoENS_16BumpPtrAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::IdentifierInfo*>& llvm::StringMap<clang::IdentifierInfo*, llvm::BumpPtrAllocator>::GetOrCreateValue<clang::IdentifierInfo*>(llvm::StringRef, clang::IdentifierInfo*)\"},\n    {\"_ZN5clang11LangOptionsC2ERKS0_\", \"clang::LangOptions::LangOptions(clang::LangOptions const&)\"},\n    {\"_ZN5clang17PreprocessorLexer18LexIncludeFilenameERNS_5TokenE\", \"clang::PreprocessorLexer::LexIncludeFilename(clang::Token&)\"},\n    {\"_ZNK5clang17PreprocessorLexer12getFileEntryEv\", \"clang::PreprocessorLexer::getFileEntry() const\"},\n    {\"_ZN5clang13ScratchBufferC1ERNS_13SourceManagerE\", \"clang::ScratchBuffer::ScratchBuffer(clang::SourceManager&)\"},\n    {\"_ZN5clang13ScratchBufferC2ERNS_13SourceManagerE\", \"clang::ScratchBuffer::ScratchBuffer(clang::SourceManager&)\"},\n    {\"_ZN5clang13ScratchBuffer8getTokenEPKcjRS2_\", \"clang::ScratchBuffer::getToken(char const*, unsigned int, char const*&)\"},\n    {\"_ZN5clang13ScratchBuffer18AllocScratchBufferEj\", \"clang::ScratchBuffer::AllocScratchBuffer(unsigned int)\"},\n    {\"_ZNK5clang18TokenConcatenation11StartsWithLERKNS_5TokenE\", \"clang::TokenConcatenation::StartsWithL(clang::Token const&) const\"},\n    {\"_ZNK5clang18TokenConcatenation13IsIdentifierLERKNS_5TokenE\", \"clang::TokenConcatenation::IsIdentifierL(clang::Token const&) const\"},\n    {\"_ZN5clang18TokenConcatenationC1ERNS_12PreprocessorE\", \"clang::TokenConcatenation::TokenConcatenation(clang::Preprocessor&)\"},\n    {\"_ZN5clang18TokenConcatenationC2ERNS_12PreprocessorE\", \"clang::TokenConcatenation::TokenConcatenation(clang::Preprocessor&)\"},\n    {\"_ZNK5clang18TokenConcatenation11AvoidConcatERKNS_5TokenES3_S3_\", \"clang::TokenConcatenation::AvoidConcat(clang::Token const&, clang::Token const&, clang::Token const&) const\"},\n    {\"_Z12GetFirstCharRN5clang12PreprocessorERKNS_5TokenE\", \"GetFirstChar(clang::Preprocessor&, clang::Token const&)\"},\n    {\"_ZN5clang10TokenLexer4InitERNS_5TokenENS_14SourceLocationEPNS_9MacroArgsE\", \"clang::TokenLexer::Init(clang::Token&, clang::SourceLocation, clang::MacroArgs*)\"},\n    {\"_ZN5clang10TokenLexer7destroyEv\", \"clang::TokenLexer::destroy()\"},\n    {\"_ZN5clang10TokenLexer23ExpandFunctionArgumentsEv\", \"clang::TokenLexer::ExpandFunctionArguments()\"},\n    {\"_ZN5clang10TokenLexer4InitEPKNS_5TokenEjbb\", \"clang::TokenLexer::Init(clang::Token const*, unsigned int, bool, bool)\"},\n    {\"_ZN5clang10TokenLexer3LexERNS_5TokenE\", \"clang::TokenLexer::Lex(clang::Token&)\"},\n    {\"_ZN5clang10TokenLexer11PasteTokensERNS_5TokenE\", \"clang::TokenLexer::PasteTokens(clang::Token&)\"},\n    {\"_ZN5clang10TokenLexer27HandleMicrosoftCommentPasteERNS_5TokenE\", \"clang::TokenLexer::HandleMicrosoftCommentPaste(clang::Token&)\"},\n    {\"_ZNK5clang10TokenLexer17isNextTokenLParenEv\", \"clang::TokenLexer::isNextTokenLParen() const\"},\n    {\"_ZNK5clang7Builtin7Context9GetRecordEj\", \"clang::Builtin::Context::GetRecord(unsigned int) const\"},\n    {\"_ZN5clang7Builtin7ContextC1ERKNS_10TargetInfoE\", \"clang::Builtin::Context::Context(clang::TargetInfo const&)\"},\n    {\"_ZN5clang7Builtin7ContextC2ERKNS_10TargetInfoE\", \"clang::Builtin::Context::Context(clang::TargetInfo const&)\"},\n    {\"_ZN5clang7Builtin7Context18InitializeBuiltinsERNS_15IdentifierTableERKNS_11LangOptionsE\", \"clang::Builtin::Context::InitializeBuiltins(clang::IdentifierTable&, clang::LangOptions const&)\"},\n    {\"_ZN5clang7Builtin7Context15GetBuiltinNamesERN4llvm15SmallVectorImplIPKcEEb\", \"clang::Builtin::Context::GetBuiltinNames(llvm::SmallVectorImpl<char const*>&, bool)\"},\n    {\"_ZN5clang7Builtin7Context13ForgetBuiltinEjRNS_15IdentifierTableE\", \"clang::Builtin::Context::ForgetBuiltin(unsigned int, clang::IdentifierTable&)\"},\n    {\"_ZN5clang7Builtin7Context12isPrintfLikeEjRjRb\", \"clang::Builtin::Context::isPrintfLike(unsigned int, unsigned int&, bool&)\"},\n    {\"_ZN5clang7Builtin7Context11isScanfLikeEjRjRb\", \"clang::Builtin::Context::isScanfLike(unsigned int, unsigned int&, bool&)\"},\n    {\"_ZN5clang10DiagnosticC1ERKN4llvm18IntrusiveRefCntPtrINS_13DiagnosticIDsEEEPNS_16DiagnosticClientEb\", \"clang::Diagnostic::Diagnostic(llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> const&, clang::DiagnosticClient*, bool)\"},\n    {\"_ZN5clang10DiagnosticC2ERKN4llvm18IntrusiveRefCntPtrINS_13DiagnosticIDsEEEPNS_16DiagnosticClientEb\", \"clang::Diagnostic::Diagnostic(llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> const&, clang::DiagnosticClient*, bool)\"},\n    {\"_Z18DummyArgToStringFnN5clang10Diagnostic12ArgumentKindElPKcjS3_jPKSt4pairIS1_lEjRN4llvm15SmallVectorImplIcEEPv\", \"DummyArgToStringFn(clang::Diagnostic::ArgumentKind, long, char const*, unsigned int, char const*, unsigned int, std::pair<clang::Diagnostic::ArgumentKind, long> const*, unsigned int, llvm::SmallVectorImpl<char>&, void*)\"},\n    {\"_ZN5clang10Diagnostic5ResetEv\", \"clang::Diagnostic::Reset()\"},\n    {\"_ZN5clang10DiagnosticD1Ev\", \"clang::Diagnostic::~Diagnostic()\"},\n    {\"_ZN5clang10DiagnosticD2Ev\", \"clang::Diagnostic::~Diagnostic()\"},\n    {\"_ZN5clang10Diagnostic9setClientEPNS_16DiagnosticClientEb\", \"clang::Diagnostic::setClient(clang::DiagnosticClient*, bool)\"},\n    {\"_ZN5clang10Diagnostic12pushMappingsENS_14SourceLocationE\", \"clang::Diagnostic::pushMappings(clang::SourceLocation)\"},\n    {\"_ZN5clang10Diagnostic11popMappingsENS_14SourceLocationE\", \"clang::Diagnostic::popMappings(clang::SourceLocation)\"},\n    {\"_ZN5clang10Diagnostic20SetDelayedDiagnosticEjN4llvm9StringRefES2_\", \"clang::Diagnostic::SetDelayedDiagnostic(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN5clang10Diagnostic13ReportDelayedEv\", \"clang::Diagnostic::ReportDelayed()\"},\n    {\"_ZNK5clang10Diagnostic23GetDiagStatePointForLocENS_14SourceLocationE\", \"clang::Diagnostic::GetDiagStatePointForLoc(clang::SourceLocation) const\"},\n    {\"_ZN5clang10Diagnostic20setDiagnosticMappingEjNS_4diag7MappingENS_14SourceLocationE\", \"clang::Diagnostic::setDiagnosticMapping(unsigned int, clang::diag::Mapping, clang::SourceLocation)\"},\n    {\"_ZN5clang17DiagnosticBuilder11FlushCountsEv\", \"clang::DiagnosticBuilder::FlushCounts()\"},\n    {\"_ZN5clang17DiagnosticBuilder4EmitEv\", \"clang::DiagnosticBuilder::Emit()\"},\n    {\"_ZN5clang16DiagnosticClientD0Ev\", \"clang::DiagnosticClient::~DiagnosticClient()\"},\n    {\"_ZN5clang16DiagnosticClientD1Ev\", \"clang::DiagnosticClient::~DiagnosticClient()\"},\n    {\"_ZN5clang16DiagnosticClientD2Ev\", \"clang::DiagnosticClient::~DiagnosticClient()\"},\n    {\"_ZN5clang16DiagnosticClient16HandleDiagnosticENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::DiagnosticClient::HandleDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZNK5clang14DiagnosticInfo16FormatDiagnosticERN4llvm15SmallVectorImplIcEE\", \"clang::DiagnosticInfo::FormatDiagnostic(llvm::SmallVectorImpl<char>&) const\"},\n    {\"_ZNK5clang14DiagnosticInfo16FormatDiagnosticEPKcS2_RN4llvm15SmallVectorImplIcEE\", \"clang::DiagnosticInfo::FormatDiagnostic(char const*, char const*, llvm::SmallVectorImpl<char>&) const\"},\n    {\"_Z10ScanFormatPKcS0_c\", \"ScanFormat(char const*, char const*, char)\"},\n    {\"_Z20HandlePluralModifierRKN5clang14DiagnosticInfoEjPKcjRN4llvm15SmallVectorImplIcEE\", \"HandlePluralModifier(clang::DiagnosticInfo const&, unsigned int, char const*, unsigned int, llvm::SmallVectorImpl<char>&)\"},\n    {\"_Z21HandleOrdinalModifierjRN4llvm15SmallVectorImplIcEE\", \"HandleOrdinalModifier(unsigned int, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN5clang16StoredDiagnosticC1Ev\", \"clang::StoredDiagnostic::StoredDiagnostic()\"},\n    {\"_ZN5clang16StoredDiagnosticC2Ev\", \"clang::StoredDiagnostic::StoredDiagnostic()\"},\n    {\"_ZN5clang16StoredDiagnosticC1ENS_10Diagnostic5LevelEjN4llvm9StringRefE\", \"clang::StoredDiagnostic::StoredDiagnostic(clang::Diagnostic::Level, unsigned int, llvm::StringRef)\"},\n    {\"_ZN5clang16StoredDiagnosticC2ENS_10Diagnostic5LevelEjN4llvm9StringRefE\", \"clang::StoredDiagnostic::StoredDiagnostic(clang::Diagnostic::Level, unsigned int, llvm::StringRef)\"},\n    {\"_ZN5clang16StoredDiagnosticC1ENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::StoredDiagnostic::StoredDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN5clang16StoredDiagnosticC2ENS_10Diagnostic5LevelERKNS_14DiagnosticInfoE\", \"clang::StoredDiagnostic::StoredDiagnostic(clang::Diagnostic::Level, clang::DiagnosticInfo const&)\"},\n    {\"_ZN5clang16StoredDiagnosticD1Ev\", \"clang::StoredDiagnostic::~StoredDiagnostic()\"},\n    {\"_ZN5clang16StoredDiagnosticD2Ev\", \"clang::StoredDiagnostic::~StoredDiagnostic()\"},\n    {\"_ZNK5clang16DiagnosticClient25IncludeInDiagnosticCountsEv\", \"clang::DiagnosticClient::IncludeInDiagnosticCounts() const\"},\n    {\"_ZN5clang17PartialDiagnostic16StorageAllocatorC1Ev\", \"clang::PartialDiagnostic::StorageAllocator::StorageAllocator()\"},\n    {\"_ZN5clang17PartialDiagnostic16StorageAllocatorC2Ev\", \"clang::PartialDiagnostic::StorageAllocator::StorageAllocator()\"},\n    {\"_ZN5clang17PartialDiagnostic16StorageAllocatorD1Ev\", \"clang::PartialDiagnostic::StorageAllocator::~StorageAllocator()\"},\n    {\"_ZN5clang17PartialDiagnostic16StorageAllocatorD2Ev\", \"clang::PartialDiagnostic::StorageAllocator::~StorageAllocator()\"},\n    {\"_ZNSt6vectorIN5clang15CharSourceRangeESaIS1_EE7reserveEm\", \"std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorIN5clang9FixItHintESaIS1_EE7reserveEm\", \"std::vector<clang::FixItHint, std::allocator<clang::FixItHint> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorIN5clang9FixItHintESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::FixItHint, std::allocator<clang::FixItHint> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::FixItHint*, std::vector<clang::FixItHint, std::allocator<clang::FixItHint> > >, clang::FixItHint const&)\"},\n    {\"_ZNSt6vectorIN5clang15CharSourceRangeESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::CharSourceRange*, std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange> > >, clang::CharSourceRange const&)\"},\n    {\"_ZNSt6vectorIN5clang10Diagnostic14DiagStatePointESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::Diagnostic::DiagStatePoint, std::allocator<clang::Diagnostic::DiagStatePoint> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Diagnostic::DiagStatePoint*, std::vector<clang::Diagnostic::DiagStatePoint, std::allocator<clang::Diagnostic::DiagStatePoint> > >, clang::Diagnostic::DiagStatePoint const&)\"},\n    {\"_ZNSt6vectorIPN5clang10Diagnostic9DiagStateESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::Diagnostic::DiagState*, std::allocator<clang::Diagnostic::DiagState*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::Diagnostic::DiagState**, std::vector<clang::Diagnostic::DiagState*, std::allocator<clang::Diagnostic::DiagState*> > >, clang::Diagnostic::DiagState* const&)\"},\n    {\"_ZN4llvm8DenseMapIjjNS_12DenseMapInfoIjEES2_E8CopyFromERKS3_\", \"llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >::CopyFrom(llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> > const&)\"},\n    {\"_ZN5clang17PartialDiagnostic7StorageD2Ev\", \"clang::PartialDiagnostic::Storage::~Storage()\"},\n    {\"_ZN5clang13DiagnosticIDs23getWarningOptionForDiagEj\", \"clang::DiagnosticIDs::getWarningOptionForDiag(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDs24getCategoryNumberForDiagEj\", \"clang::DiagnosticIDs::getCategoryNumberForDiag(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDs21getCategoryNameFromIDEj\", \"clang::DiagnosticIDs::getCategoryNameFromID(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDs27getDiagnosticSFINAEResponseEj\", \"clang::DiagnosticIDs::getDiagnosticSFINAEResponse(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDsC1Ev\", \"clang::DiagnosticIDs::DiagnosticIDs()\"},\n    {\"_ZN5clang13DiagnosticIDsC2Ev\", \"clang::DiagnosticIDs::DiagnosticIDs()\"},\n    {\"_ZN5clang13DiagnosticIDsD1Ev\", \"clang::DiagnosticIDs::~DiagnosticIDs()\"},\n    {\"_ZN5clang13DiagnosticIDsD2Ev\", \"clang::DiagnosticIDs::~DiagnosticIDs()\"},\n    {\"_ZN5clang13DiagnosticIDs15getCustomDiagIDENS0_5LevelEN4llvm9StringRefE\", \"clang::DiagnosticIDs::getCustomDiagID(clang::DiagnosticIDs::Level, llvm::StringRef)\"},\n    {\"_ZN5clang13DiagnosticIDs27isBuiltinWarningOrExtensionEj\", \"clang::DiagnosticIDs::isBuiltinWarningOrExtension(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDs13isBuiltinNoteEj\", \"clang::DiagnosticIDs::isBuiltinNote(unsigned int)\"},\n    {\"_ZN5clang13DiagnosticIDs22isBuiltinExtensionDiagEjRb\", \"clang::DiagnosticIDs::isBuiltinExtensionDiag(unsigned int, bool&)\"},\n    {\"_ZNK5clang13DiagnosticIDs14getDescriptionEj\", \"clang::DiagnosticIDs::getDescription(unsigned int) const\"},\n    {\"_ZNK5clang13DiagnosticIDs18getDiagnosticLevelEjNS_14SourceLocationERKNS_10DiagnosticE\", \"clang::DiagnosticIDs::getDiagnosticLevel(unsigned int, clang::SourceLocation, clang::Diagnostic const&) const\"},\n    {\"_ZNK5clang13DiagnosticIDs18getDiagnosticLevelEjjNS_14SourceLocationERKNS_10DiagnosticE\", \"clang::DiagnosticIDs::getDiagnosticLevel(unsigned int, unsigned int, clang::SourceLocation, clang::Diagnostic const&) const\"},\n    {\"_ZNK5clang13DiagnosticIDs25setDiagnosticGroupMappingEPKcNS_4diag7MappingENS_14SourceLocationERNS_10DiagnosticE\", \"clang::DiagnosticIDs::setDiagnosticGroupMapping(char const*, clang::diag::Mapping, clang::SourceLocation, clang::Diagnostic&) const\"},\n    {\"_Z15MapGroupMembersPK13WarningOptionN5clang4diag7MappingENS2_14SourceLocationERNS2_10DiagnosticE\", \"MapGroupMembers(WarningOption const*, clang::diag::Mapping, clang::SourceLocation, clang::Diagnostic&)\"},\n    {\"_ZNK5clang13DiagnosticIDs11ProcessDiagERNS_10DiagnosticE\", \"clang::DiagnosticIDs::ProcessDiag(clang::Diagnostic&) const\"},\n    {\"_ZN5clang4diag14CustomDiagInfo17getOrCreateDiagIDENS_13DiagnosticIDs5LevelEN4llvm9StringRefERS2_\", \"clang::diag::CustomDiagInfo::getOrCreateDiagID(clang::DiagnosticIDs::Level, llvm::StringRef, clang::DiagnosticIDs&)\"},\n    {\"_ZN4llvm8DenseMapIjjNS_12DenseMapInfoIjEES2_E16InsertIntoBucketERKjS5_PSt4pairIjjE\", \"llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(unsigned int const&, unsigned int const&, std::pair<unsigned int, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIjjNS_12DenseMapInfoIjEES2_E4growEj\", \"llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIN5clang13DiagnosticIDs5LevelESsESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<clang::DiagnosticIDs::Level, std::string>, std::allocator<std::pair<clang::DiagnosticIDs::Level, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<clang::DiagnosticIDs::Level, std::string>*, std::vector<std::pair<clang::DiagnosticIDs::Level, std::string>, std::allocator<std::pair<clang::DiagnosticIDs::Level, std::string> > > >, std::pair<clang::DiagnosticIDs::Level, std::string> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIN5clang13DiagnosticIDs5LevelESsES0_IKS4_jESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::pair<clang::DiagnosticIDs::Level, std::string>, std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int>, std::_Select1st<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> >, std::less<std::pair<clang::DiagnosticIDs::Level, std::string> >, std::allocator<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> > >::_M_insert_unique(std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIN5clang13DiagnosticIDs5LevelESsES0_IKS4_jESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::pair<clang::DiagnosticIDs::Level, std::string>, std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int>, std::_Select1st<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> >, std::less<std::pair<clang::DiagnosticIDs::Level, std::string> >, std::allocator<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIN5clang13DiagnosticIDs5LevelESsES0_IKS4_jESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::pair<clang::DiagnosticIDs::Level, std::string>, std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int>, std::_Select1st<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> >, std::less<std::pair<clang::DiagnosticIDs::Level, std::string> >, std::allocator<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<clang::DiagnosticIDs::Level, std::string> const, unsigned int> >*)\"},\n    {\"_ZN5clang9FileEntryD1Ev\", \"clang::FileEntry::~FileEntry()\"},\n    {\"_ZN5clang9FileEntryD2Ev\", \"clang::FileEntry::~FileEntry()\"},\n    {\"_ZN5clang11FileManagerC1ERKNS_17FileSystemOptionsE\", \"clang::FileManager::FileManager(clang::FileSystemOptions const&)\"},\n    {\"_ZN5clang11FileManagerC2ERKNS_17FileSystemOptionsE\", \"clang::FileManager::FileManager(clang::FileSystemOptions const&)\"},\n    {\"_ZN5clang11FileManagerD1Ev\", \"clang::FileManager::~FileManager()\"},\n    {\"_ZN5clang11FileManagerD2Ev\", \"clang::FileManager::~FileManager()\"},\n    {\"_ZN5clang11FileManager12addStatCacheEPNS_19FileSystemStatCacheEb\", \"clang::FileManager::addStatCache(clang::FileSystemStatCache*, bool)\"},\n    {\"_ZN5clang11FileManager15removeStatCacheEPNS_19FileSystemStatCacheE\", \"clang::FileManager::removeStatCache(clang::FileSystemStatCache*)\"},\n    {\"_ZN5clang11FileManager12getDirectoryEN4llvm9StringRefE\", \"clang::FileManager::getDirectory(llvm::StringRef)\"},\n    {\"_ZN5clang11FileManager12getStatValueEPKcR4statPi\", \"clang::FileManager::getStatValue(char const*, stat&, int*)\"},\n    {\"_ZN5clang11FileManager7getFileEN4llvm9StringRefE\", \"clang::FileManager::getFile(llvm::StringRef)\"},\n    {\"_ZN5clang11FileManager14getVirtualFileEN4llvm9StringRefExl\", \"clang::FileManager::getVirtualFile(llvm::StringRef, long long, long)\"},\n    {\"_ZN5clang11FileManager17FixupRelativePathERN4llvm3sys4PathERKNS_17FileSystemOptionsE\", \"clang::FileManager::FixupRelativePath(llvm::sys::Path&, clang::FileSystemOptions const&)\"},\n    {\"_ZN5clang11FileManager16getBufferForFileEPKNS_9FileEntryEPSs\", \"clang::FileManager::getBufferForFile(clang::FileEntry const*, std::string*)\"},\n    {\"_ZN5clang11FileManager16getBufferForFileEN4llvm9StringRefEPSs\", \"clang::FileManager::getBufferForFile(llvm::StringRef, std::string*)\"},\n    {\"_ZNK5clang11FileManager10PrintStatsEv\", \"clang::FileManager::PrintStats() const\"},\n    {\"_ZN4llvm9StringMapIPN5clang9FileEntryENS_16BumpPtrAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::FileEntry*>& llvm::StringMap<clang::FileEntry*, llvm::BumpPtrAllocator>::GetOrCreateValue<clang::FileEntry*>(llvm::StringRef, clang::FileEntry*)\"},\n    {\"_ZN4llvm9StringMapIPN5clang14DirectoryEntryENS_16BumpPtrAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<clang::DirectoryEntry*>& llvm::StringMap<clang::DirectoryEntry*, llvm::BumpPtrAllocator>::GetOrCreateValue<clang::DirectoryEntry*>(llvm::StringRef, clang::DirectoryEntry*)\"},\n    {\"_ZNSt8_Rb_treeIN5clang9FileEntryES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1_\", \"std::_Rb_tree<clang::FileEntry, clang::FileEntry, std::_Identity<clang::FileEntry>, std::less<clang::FileEntry>, std::allocator<clang::FileEntry> >::_M_insert_unique(clang::FileEntry const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIiyES0_IKS1_N5clang14DirectoryEntryEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<std::pair<int, unsigned long long>, std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry>, std::_Select1st<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> >, std::less<std::pair<int, unsigned long long> >, std::allocator<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> >, std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIiyES0_IKS1_N5clang14DirectoryEntryEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<std::pair<int, unsigned long long>, std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry>, std::_Select1st<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> >, std::less<std::pair<int, unsigned long long> >, std::allocator<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> > >::_M_insert_unique(std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> const&)\"},\n    {\"_ZNSt8_Rb_treeIN5clang9FileEntryES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E\", \"std::_Rb_tree<clang::FileEntry, clang::FileEntry, std::_Identity<clang::FileEntry>, std::less<clang::FileEntry>, std::allocator<clang::FileEntry> >::_M_erase(std::_Rb_tree_node<clang::FileEntry>*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIiyES0_IKS1_N5clang14DirectoryEntryEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<std::pair<int, unsigned long long>, std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry>, std::_Select1st<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> >, std::less<std::pair<int, unsigned long long> >, std::allocator<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<int, unsigned long long> const, clang::DirectoryEntry> >*)\"},\n    {\"_ZN5clang19FileSystemStatCache3getEPKcR4statPiPS0_\", \"clang::FileSystemStatCache::get(char const*, stat&, int*, clang::FileSystemStatCache*)\"},\n    {\"_ZN5clang17MemorizeStatCalls7getStatEPKcR4statPi\", \"clang::MemorizeStatCalls::getStat(char const*, stat&, int*)\"},\n    {\"_ZN5clang17MemorizeStatCallsD1Ev\", \"clang::MemorizeStatCalls::~MemorizeStatCalls()\"},\n    {\"_ZN5clang17MemorizeStatCallsD0Ev\", \"clang::MemorizeStatCalls::~MemorizeStatCalls()\"},\n    {\"_ZN4llvm9StringMapI4statNS_16BumpPtrAllocatorEE16GetOrCreateValueIS1_EERNS_14StringMapEntryIS1_EENS_9StringRefET_\", \"llvm::StringMapEntry<stat>& llvm::StringMap<stat, llvm::BumpPtrAllocator>::GetOrCreateValue<stat>(llvm::StringRef, stat)\"},\n    {\"_ZN5clang14IdentifierInfoC1Ev\", \"clang::IdentifierInfo::IdentifierInfo()\"},\n    {\"_ZN5clang14IdentifierInfoC2Ev\", \"clang::IdentifierInfo::IdentifierInfo()\"},\n    {\"_ZN5clang18IdentifierIteratorD0Ev\", \"clang::IdentifierIterator::~IdentifierIterator()\"},\n    {\"_ZN5clang18IdentifierIteratorD1Ev\", \"clang::IdentifierIterator::~IdentifierIterator()\"},\n    {\"_ZN5clang18IdentifierIteratorD2Ev\", \"clang::IdentifierIterator::~IdentifierIterator()\"},\n    {\"_ZN5clang20IdentifierInfoLookupD0Ev\", \"clang::IdentifierInfoLookup::~IdentifierInfoLookup()\"},\n    {\"_ZN5clang20IdentifierInfoLookupD1Ev\", \"clang::IdentifierInfoLookup::~IdentifierInfoLookup()\"},\n    {\"_ZN5clang20IdentifierInfoLookupD2Ev\", \"clang::IdentifierInfoLookup::~IdentifierInfoLookup()\"},\n    {\"_ZNK5clang20IdentifierInfoLookup14getIdentifiersEv\", \"clang::IdentifierInfoLookup::getIdentifiers() const\"},\n    {\"_ZN5clang24ExternalIdentifierLookupD0Ev\", \"clang::ExternalIdentifierLookup::~ExternalIdentifierLookup()\"},\n    {\"_ZN5clang24ExternalIdentifierLookupD1Ev\", \"clang::ExternalIdentifierLookup::~ExternalIdentifierLookup()\"},\n    {\"_ZN5clang24ExternalIdentifierLookupD2Ev\", \"clang::ExternalIdentifierLookup::~ExternalIdentifierLookup()\"},\n    {\"_ZN5clang15IdentifierTableC1ERKNS_11LangOptionsEPNS_20IdentifierInfoLookupE\", \"clang::IdentifierTable::IdentifierTable(clang::LangOptions const&, clang::IdentifierInfoLookup*)\"},\n    {\"_ZN5clang15IdentifierTableC2ERKNS_11LangOptionsEPNS_20IdentifierInfoLookupE\", \"clang::IdentifierTable::IdentifierTable(clang::LangOptions const&, clang::IdentifierInfoLookup*)\"},\n    {\"_ZN5clang15IdentifierTable11AddKeywordsERKNS_11LangOptionsE\", \"clang::IdentifierTable::AddKeywords(clang::LangOptions const&)\"},\n    {\"_ZNK5clang14IdentifierInfo14getPPKeywordIDEv\", \"clang::IdentifierInfo::getPPKeywordID() const\"},\n    {\"_ZNK5clang15IdentifierTable10PrintStatsEv\", \"clang::IdentifierTable::PrintStats() const\"},\n    {\"_ZN4llvm12DenseMapInfoIN5clang8SelectorEE12getHashValueES2_\", \"llvm::DenseMapInfo<clang::Selector>::getHashValue(clang::Selector)\"},\n    {\"_ZNK5clang8Selector10getNumArgsEv\", \"clang::Selector::getNumArgs() const\"},\n    {\"_ZNK5clang8Selector24getIdentifierInfoForSlotEj\", \"clang::Selector::getIdentifierInfoForSlot(unsigned int) const\"},\n    {\"_ZNK5clang20MultiKeywordSelector7getNameEv\", \"clang::MultiKeywordSelector::getName() const\"},\n    {\"_ZNK5clang8Selector11getAsStringEv\", \"clang::Selector::getAsString() const\"},\n    {\"_ZN5clang13SelectorTable11getSelectorEjPPNS_14IdentifierInfoE\", \"clang::SelectorTable::getSelector(unsigned int, clang::IdentifierInfo**)\"},\n    {\"_ZN5clang13SelectorTableC1Ev\", \"clang::SelectorTable::SelectorTable()\"},\n    {\"_ZN5clang13SelectorTableC2Ev\", \"clang::SelectorTable::SelectorTable()\"},\n    {\"_ZN5clang13SelectorTableD1Ev\", \"clang::SelectorTable::~SelectorTable()\"},\n    {\"_ZN5clang13SelectorTableD2Ev\", \"clang::SelectorTable::~SelectorTable()\"},\n    {\"_ZN5clang19getOperatorSpellingENS_22OverloadedOperatorKindE\", \"clang::getOperatorSpelling(clang::OverloadedOperatorKind)\"},\n    {\"_ZN12_GLOBAL__N_119EmptyLookupIteratorD1Ev\", \"(anonymous namespace)::EmptyLookupIterator::~EmptyLookupIterator()\"},\n    {\"_ZN12_GLOBAL__N_119EmptyLookupIteratorD0Ev\", \"(anonymous namespace)::EmptyLookupIterator::~EmptyLookupIterator()\"},\n    {\"_ZN12_GLOBAL__N_119EmptyLookupIterator4NextEv\", \"(anonymous namespace)::EmptyLookupIterator::Next()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang20MultiKeywordSelectorEED1Ev\", \"llvm::FoldingSet<clang::MultiKeywordSelector>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetIN5clang20MultiKeywordSelectorEED0Ev\", \"llvm::FoldingSet<clang::MultiKeywordSelector>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20MultiKeywordSelectorEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::MultiKeywordSelector>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20MultiKeywordSelectorEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS7_\", \"llvm::FoldingSet<clang::MultiKeywordSelector>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetIN5clang20MultiKeywordSelectorEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<clang::MultiKeywordSelector>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK5clang19PrettyStackTraceLoc5printERN4llvm11raw_ostreamE\", \"clang::PrettyStackTraceLoc::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK5clang14SourceLocation5printERN4llvm11raw_ostreamERKNS_13SourceManagerE\", \"clang::SourceLocation::print(llvm::raw_ostream&, clang::SourceManager const&) const\"},\n    {\"_ZNK5clang14SourceLocation4dumpERKNS_13SourceManagerE\", \"clang::SourceLocation::dump(clang::SourceManager const&) const\"},\n    {\"_ZNK5clang13FullSourceLoc9getFileIDEv\", \"clang::FullSourceLoc::getFileID() const\"},\n    {\"_ZNK5clang13FullSourceLoc19getInstantiationLocEv\", \"clang::FullSourceLoc::getInstantiationLoc() const\"},\n    {\"_ZNK5clang13FullSourceLoc14getSpellingLocEv\", \"clang::FullSourceLoc::getSpellingLoc() const\"},\n    {\"_ZNK5clang13FullSourceLoc26getInstantiationLineNumberEPb\", \"clang::FullSourceLoc::getInstantiationLineNumber(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc28getInstantiationColumnNumberEPb\", \"clang::FullSourceLoc::getInstantiationColumnNumber(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc21getSpellingLineNumberEPb\", \"clang::FullSourceLoc::getSpellingLineNumber(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc23getSpellingColumnNumberEPb\", \"clang::FullSourceLoc::getSpellingColumnNumber(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc16isInSystemHeaderEv\", \"clang::FullSourceLoc::isInSystemHeader() const\"},\n    {\"_ZNK5clang13FullSourceLoc29isBeforeInTranslationUnitThanENS_14SourceLocationE\", \"clang::FullSourceLoc::isBeforeInTranslationUnitThan(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13FullSourceLoc16getCharacterDataEPb\", \"clang::FullSourceLoc::getCharacterData(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc9getBufferEPb\", \"clang::FullSourceLoc::getBuffer(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc13getBufferDataEPb\", \"clang::FullSourceLoc::getBufferData(bool*) const\"},\n    {\"_ZNK5clang13FullSourceLoc16getDecomposedLocEv\", \"clang::FullSourceLoc::getDecomposedLoc() const\"},\n    {\"_ZN5clang19PrettyStackTraceLocD1Ev\", \"clang::PrettyStackTraceLoc::~PrettyStackTraceLoc()\"},\n    {\"_ZN5clang19PrettyStackTraceLocD0Ev\", \"clang::PrettyStackTraceLoc::~PrettyStackTraceLoc()\"},\n    {\"_ZN5clang6SrcMgr12ContentCacheD1Ev\", \"clang::SrcMgr::ContentCache::~ContentCache()\"},\n    {\"_ZN5clang6SrcMgr12ContentCacheD2Ev\", \"clang::SrcMgr::ContentCache::~ContentCache()\"},\n    {\"_ZNK5clang6SrcMgr12ContentCache18getSizeBytesMappedEv\", \"clang::SrcMgr::ContentCache::getSizeBytesMapped() const\"},\n    {\"_ZNK5clang6SrcMgr12ContentCache7getSizeEv\", \"clang::SrcMgr::ContentCache::getSize() const\"},\n    {\"_ZN5clang6SrcMgr12ContentCache13replaceBufferEPKN4llvm12MemoryBufferEb\", \"clang::SrcMgr::ContentCache::replaceBuffer(llvm::MemoryBuffer const*, bool)\"},\n    {\"_ZNK5clang6SrcMgr12ContentCache9getBufferERNS_10DiagnosticERKNS_13SourceManagerENS_14SourceLocationEPb\", \"clang::SrcMgr::ContentCache::getBuffer(clang::Diagnostic&, clang::SourceManager const&, clang::SourceLocation, bool*) const\"},\n    {\"_ZN5clang13LineTableInfo22getLineTableFilenameIDEPKcj\", \"clang::LineTableInfo::getLineTableFilenameID(char const*, unsigned int)\"},\n    {\"_ZN5clang13LineTableInfo11AddLineNoteEjjji\", \"clang::LineTableInfo::AddLineNote(unsigned int, unsigned int, unsigned int, int)\"},\n    {\"_ZN5clang13LineTableInfo11AddLineNoteEjjjijNS_6SrcMgr18CharacteristicKindE\", \"clang::LineTableInfo::AddLineNote(unsigned int, unsigned int, unsigned int, int, unsigned int, clang::SrcMgr::CharacteristicKind)\"},\n    {\"_ZN5clang13LineTableInfo20FindNearestLineEntryEjj\", \"clang::LineTableInfo::FindNearestLineEntry(unsigned int, unsigned int)\"},\n    {\"_ZN5clang13LineTableInfo8AddEntryEjRKSt6vectorINS_9LineEntryESaIS2_EE\", \"clang::LineTableInfo::AddEntry(unsigned int, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > const&)\"},\n    {\"_ZN5clang13SourceManager22getLineTableFilenameIDEPKcj\", \"clang::SourceManager::getLineTableFilenameID(char const*, unsigned int)\"},\n    {\"_ZN5clang13SourceManager11AddLineNoteENS_14SourceLocationEji\", \"clang::SourceManager::AddLineNote(clang::SourceLocation, unsigned int, int)\"},\n    {\"_ZN5clang13SourceManager11AddLineNoteENS_14SourceLocationEjibbbb\", \"clang::SourceManager::AddLineNote(clang::SourceLocation, unsigned int, int, bool, bool, bool, bool)\"},\n    {\"_ZN5clang13SourceManager12getLineTableEv\", \"clang::SourceManager::getLineTable()\"},\n    {\"_ZN5clang13SourceManagerC1ERNS_10DiagnosticERNS_11FileManagerE\", \"clang::SourceManager::SourceManager(clang::Diagnostic&, clang::FileManager&)\"},\n    {\"_ZN5clang13SourceManagerC2ERNS_10DiagnosticERNS_11FileManagerE\", \"clang::SourceManager::SourceManager(clang::Diagnostic&, clang::FileManager&)\"},\n    {\"_ZN5clang13SourceManager13clearIDTablesEv\", \"clang::SourceManager::clearIDTables()\"},\n    {\"_ZN5clang13SourceManagerD1Ev\", \"clang::SourceManager::~SourceManager()\"},\n    {\"_ZN5clang13SourceManagerD2Ev\", \"clang::SourceManager::~SourceManager()\"},\n    {\"_ZN5clang13SourceManager22createInstantiationLocENS_14SourceLocationES1_S1_jjj\", \"clang::SourceManager::createInstantiationLoc(clang::SourceLocation, clang::SourceLocation, clang::SourceLocation, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN5clang13SourceManager23getOrCreateContentCacheEPKNS_9FileEntryE\", \"clang::SourceManager::getOrCreateContentCache(clang::FileEntry const*)\"},\n    {\"_ZN5clang13SourceManager27createMemBufferContentCacheEPKN4llvm12MemoryBufferE\", \"clang::SourceManager::createMemBufferContentCache(llvm::MemoryBuffer const*)\"},\n    {\"_ZN5clang13SourceManager22PreallocateSLocEntriesEPNS_23ExternalSLocEntrySourceEjj\", \"clang::SourceManager::PreallocateSLocEntries(clang::ExternalSLocEntrySource*, unsigned int, unsigned int)\"},\n    {\"_ZN5clang13SourceManager28ClearPreallocatedSLocEntriesEv\", \"clang::SourceManager::ClearPreallocatedSLocEntries()\"},\n    {\"_ZN5clang13SourceManager12createFileIDEPKNS_6SrcMgr12ContentCacheENS_14SourceLocationENS1_18CharacteristicKindEjj\", \"clang::SourceManager::createFileID(clang::SrcMgr::ContentCache const*, clang::SourceLocation, clang::SrcMgr::CharacteristicKind, unsigned int, unsigned int)\"},\n    {\"_ZN5clang13SourceManager22getMemoryBufferForFileEPKNS_9FileEntryEPb\", \"clang::SourceManager::getMemoryBufferForFile(clang::FileEntry const*, bool*)\"},\n    {\"_ZN5clang13SourceManager20overrideFileContentsEPKNS_9FileEntryEPKN4llvm12MemoryBufferEb\", \"clang::SourceManager::overrideFileContents(clang::FileEntry const*, llvm::MemoryBuffer const*, bool)\"},\n    {\"_ZNK5clang13SourceManager13getBufferDataENS_6FileIDEPb\", \"clang::SourceManager::getBufferData(clang::FileID, bool*) const\"},\n    {\"_ZNK5clang13SourceManager13getFileIDSlowEj\", \"clang::SourceManager::getFileIDSlow(unsigned int) const\"},\n    {\"_ZNK5clang13SourceManager27getInstantiationLocSlowCaseENS_14SourceLocationE\", \"clang::SourceManager::getInstantiationLocSlowCase(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager22getSpellingLocSlowCaseENS_14SourceLocationE\", \"clang::SourceManager::getSpellingLocSlowCase(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager37getDecomposedInstantiationLocSlowCaseEPKNS_6SrcMgr9SLocEntryEj\", \"clang::SourceManager::getDecomposedInstantiationLocSlowCase(clang::SrcMgr::SLocEntry const*, unsigned int) const\"},\n    {\"_ZNK5clang13SourceManager32getDecomposedSpellingLocSlowCaseEPKNS_6SrcMgr9SLocEntryEj\", \"clang::SourceManager::getDecomposedSpellingLocSlowCase(clang::SrcMgr::SLocEntry const*, unsigned int) const\"},\n    {\"_ZNK5clang13SourceManager23getImmediateSpellingLocENS_14SourceLocationE\", \"clang::SourceManager::getImmediateSpellingLoc(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager30getImmediateInstantiationRangeENS_14SourceLocationE\", \"clang::SourceManager::getImmediateInstantiationRange(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager21getInstantiationRangeENS_14SourceLocationE\", \"clang::SourceManager::getInstantiationRange(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager16getCharacterDataENS_14SourceLocationEPb\", \"clang::SourceManager::getCharacterData(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager15getColumnNumberENS_6FileIDEjPb\", \"clang::SourceManager::getColumnNumber(clang::FileID, unsigned int, bool*) const\"},\n    {\"_ZNK5clang13SourceManager23getSpellingColumnNumberENS_14SourceLocationEPb\", \"clang::SourceManager::getSpellingColumnNumber(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager28getInstantiationColumnNumberENS_14SourceLocationEPb\", \"clang::SourceManager::getInstantiationColumnNumber(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager13getLineNumberENS_6FileIDEjPb\", \"clang::SourceManager::getLineNumber(clang::FileID, unsigned int, bool*) const\"},\n    {\"_Z18ComputeLineNumbersRN5clang10DiagnosticEPNS_6SrcMgr12ContentCacheERN4llvm16BumpPtrAllocatorERKNS_13SourceManagerERb\", \"ComputeLineNumbers(clang::Diagnostic&, clang::SrcMgr::ContentCache*, llvm::BumpPtrAllocator&, clang::SourceManager const&, bool&)\"},\n    {\"_ZNK5clang13SourceManager26getInstantiationLineNumberENS_14SourceLocationEPb\", \"clang::SourceManager::getInstantiationLineNumber(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager21getSpellingLineNumberENS_14SourceLocationEPb\", \"clang::SourceManager::getSpellingLineNumber(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager21getFileCharacteristicENS_14SourceLocationE\", \"clang::SourceManager::getFileCharacteristic(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager13getBufferNameENS_14SourceLocationEPb\", \"clang::SourceManager::getBufferName(clang::SourceLocation, bool*) const\"},\n    {\"_ZNK5clang13SourceManager14getPresumedLocENS_14SourceLocationE\", \"clang::SourceManager::getPresumedLoc(clang::SourceLocation) const\"},\n    {\"_ZN5clang13SourceManager11getLocationEPKNS_9FileEntryEjj\", \"clang::SourceManager::getLocation(clang::FileEntry const*, unsigned int, unsigned int)\"},\n    {\"_ZNK5clang13SourceManager25isBeforeInTranslationUnitENS_14SourceLocationES1_\", \"clang::SourceManager::isBeforeInTranslationUnit(clang::SourceLocation, clang::SourceLocation) const\"},\n    {\"_Z22MoveUpIncludeHierarchyRSt4pairIN5clang6FileIDEjERKNS0_13SourceManagerE\", \"MoveUpIncludeHierarchy(std::pair<clang::FileID, unsigned int>&, clang::SourceManager const&)\"},\n    {\"_ZNK5clang13SourceManager10PrintStatsEv\", \"clang::SourceManager::PrintStats() const\"},\n    {\"_ZN5clang23ExternalSLocEntrySourceD0Ev\", \"clang::ExternalSLocEntrySource::~ExternalSLocEntrySource()\"},\n    {\"_ZN5clang23ExternalSLocEntrySourceD1Ev\", \"clang::ExternalSLocEntrySource::~ExternalSLocEntrySource()\"},\n    {\"_ZN5clang23ExternalSLocEntrySourceD2Ev\", \"clang::ExternalSLocEntrySource::~ExternalSLocEntrySource()\"},\n    {\"_ZNSt6vectorIN5clang9LineEntryESaIS1_EEaSERKS3_\", \"std::vector<clang::LineEntry, std::allocator<clang::LineEntry> >::operator=(std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > const&)\"},\n    {\"_ZNSt6vectorIbSaIbEE6resizeEmb\", \"std::vector<bool, std::allocator<bool> >::resize(unsigned long, bool)\"},\n    {\"_ZNK5clang13SourceManager24getDecomposedSpellingLocENS_14SourceLocationE\", \"clang::SourceManager::getDecomposedSpellingLoc(clang::SourceLocation) const\"},\n    {\"_ZNK5clang13SourceManager9getBufferENS_6FileIDEPb\", \"clang::SourceManager::getBuffer(clang::FileID, bool*) const\"},\n    {\"_ZNSt6vectorIN5clang6SrcMgr9SLocEntryESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<clang::SrcMgr::SLocEntry, std::allocator<clang::SrcMgr::SLocEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::SrcMgr::SLocEntry*, std::vector<clang::SrcMgr::SLocEntry, std::allocator<clang::SrcMgr::SLocEntry> > >, clang::SrcMgr::SLocEntry const&)\"},\n    {\"_ZNSt6vectorIN5clang6SrcMgr9SLocEntryESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<clang::SrcMgr::SLocEntry, std::allocator<clang::SrcMgr::SLocEntry> >::_M_fill_insert(__gnu_cxx::__normal_iterator<clang::SrcMgr::SLocEntry*, std::vector<clang::SrcMgr::SLocEntry, std::allocator<clang::SrcMgr::SLocEntry> > >, unsigned long, clang::SrcMgr::SLocEntry const&)\"},\n    {\"_ZNSt6vectorIbSaIbEE14_M_fill_insertESt13_Bit_iteratormb\", \"std::vector<bool, std::allocator<bool> >::_M_fill_insert(std::_Bit_iterator, unsigned long, bool)\"},\n    {\"_ZSt4fillSt13_Bit_iteratorS_RKb\", \"std::fill(std::_Bit_iterator, std::_Bit_iterator, bool const&)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyISt13_Bit_iteratorS3_EET0_T_S5_S4_\", \"std::_Bit_iterator std::__copy<false, std::random_access_iterator_tag>::copy<std::_Bit_iterator, std::_Bit_iterator>(std::_Bit_iterator, std::_Bit_iterator, std::_Bit_iterator)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyISt19_Bit_const_iteratorSt13_Bit_iteratorEET0_T_S6_S5_\", \"std::_Bit_iterator std::__copy<false, std::random_access_iterator_tag>::copy<std::_Bit_const_iterator, std::_Bit_iterator>(std::_Bit_const_iterator, std::_Bit_const_iterator, std::_Bit_iterator)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bISt13_Bit_iteratorS3_EET0_T_S5_S4_\", \"std::_Bit_iterator std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::_Bit_iterator, std::_Bit_iterator>(std::_Bit_iterator, std::_Bit_iterator, std::_Bit_iterator)\"},\n    {\"_ZNSt6vectorIPN5clang6SrcMgr12ContentCacheESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<clang::SrcMgr::ContentCache*, std::allocator<clang::SrcMgr::ContentCache*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::SrcMgr::ContentCache**, std::vector<clang::SrcMgr::ContentCache*, std::allocator<clang::SrcMgr::ContentCache*> > >, clang::SrcMgr::ContentCache* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FileEntryEPNS1_6SrcMgr12ContentCacheENS_12DenseMapInfoIS4_EENS8_IS7_EEE16InsertIntoBucketERKS4_RKS7_PSt4pairIS4_S7_E\", \"llvm::DenseMap<clang::FileEntry const*, clang::SrcMgr::ContentCache*, llvm::DenseMapInfo<clang::FileEntry const*>, llvm::DenseMapInfo<clang::SrcMgr::ContentCache*> >::InsertIntoBucket(clang::FileEntry const* const&, clang::SrcMgr::ContentCache* const&, std::pair<clang::FileEntry const*, clang::SrcMgr::ContentCache*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKN5clang9FileEntryEPNS1_6SrcMgr12ContentCacheENS_12DenseMapInfoIS4_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<clang::FileEntry const*, clang::SrcMgr::ContentCache*, llvm::DenseMapInfo<clang::FileEntry const*>, llvm::DenseMapInfo<clang::SrcMgr::ContentCache*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN5clang9LineEntryESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<clang::LineEntry, std::allocator<clang::LineEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::LineEntry*, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > >, clang::LineEntry const&)\"},\n    {\"_ZNSt6vectorIN5clang9LineEntryESaIS1_EEC2ERKS3_\", \"std::vector<clang::LineEntry, std::allocator<clang::LineEntry> >::vector(std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjSt6vectorIN5clang9LineEntryESaIS4_EEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > >, std::_Select1st<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > >, std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjSt6vectorIN5clang9LineEntryESaIS4_EEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > >, std::_Select1st<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > > >::_M_insert_unique(std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm14StringMapEntryIjEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::StringMapEntry<unsigned int>*, std::allocator<llvm::StringMapEntry<unsigned int>*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::StringMapEntry<unsigned int>**, std::vector<llvm::StringMapEntry<unsigned int>*, std::allocator<llvm::StringMapEntry<unsigned int>*> > >, llvm::StringMapEntry<unsigned int>* const&)\"},\n    {\"_ZN4llvm9StringMapIjNS_16BumpPtrAllocatorEE16GetOrCreateValueIjEERNS_14StringMapEntryIjEENS_9StringRefET_\", \"llvm::StringMapEntry<unsigned int>& llvm::StringMap<unsigned int, llvm::BumpPtrAllocator>::GetOrCreateValue<unsigned int>(llvm::StringRef, unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjSt6vectorIN5clang9LineEntryESaIS4_EEESt10_Select1stIS7_ESt4lessIjESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > >, std::_Select1st<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::vector<clang::LineEntry, std::allocator<clang::LineEntry> > > >*)\"},\n    {\"_ZN5clang13LineTableInfoD2Ev\", \"clang::LineTableInfo::~LineTableInfo()\"},\n    {\"_ZN5clang10TargetInfoC1ERKSs\", \"clang::TargetInfo::TargetInfo(std::string const&)\"},\n    {\"_ZN5clang10TargetInfoC2ERKSs\", \"clang::TargetInfo::TargetInfo(std::string const&)\"},\n    {\"_ZN5clang10TargetInfoD0Ev\", \"clang::TargetInfo::~TargetInfo()\"},\n    {\"_ZN5clang10TargetInfoD1Ev\", \"clang::TargetInfo::~TargetInfo()\"},\n    {\"_ZN5clang10TargetInfoD2Ev\", \"clang::TargetInfo::~TargetInfo()\"},\n    {\"_ZN5clang10TargetInfo11getTypeNameENS0_7IntTypeE\", \"clang::TargetInfo::getTypeName(clang::TargetInfo::IntType)\"},\n    {\"_ZN5clang10TargetInfo21getTypeConstantSuffixENS0_7IntTypeE\", \"clang::TargetInfo::getTypeConstantSuffix(clang::TargetInfo::IntType)\"},\n    {\"_ZNK5clang10TargetInfo12getTypeWidthENS0_7IntTypeE\", \"clang::TargetInfo::getTypeWidth(clang::TargetInfo::IntType) const\"},\n    {\"_ZNK5clang10TargetInfo12getTypeAlignENS0_7IntTypeE\", \"clang::TargetInfo::getTypeAlign(clang::TargetInfo::IntType) const\"},\n    {\"_ZN5clang10TargetInfo12isTypeSignedENS0_7IntTypeE\", \"clang::TargetInfo::isTypeSigned(clang::TargetInfo::IntType)\"},\n    {\"_ZN5clang10TargetInfo20setForcedLangOptionsERNS_11LangOptionsE\", \"clang::TargetInfo::setForcedLangOptions(clang::LangOptions&)\"},\n    {\"_ZNK5clang10TargetInfo22isValidGCCRegisterNameEN4llvm9StringRefE\", \"clang::TargetInfo::isValidGCCRegisterName(llvm::StringRef) const\"},\n    {\"_ZNK5clang10TargetInfo28getNormalizedGCCRegisterNameEN4llvm9StringRefE\", \"clang::TargetInfo::getNormalizedGCCRegisterName(llvm::StringRef) const\"},\n    {\"_ZNK5clang10TargetInfo24validateOutputConstraintERNS0_14ConstraintInfoE\", \"clang::TargetInfo::validateOutputConstraint(clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZNK5clang10TargetInfo19resolveSymbolicNameERPKcPNS0_14ConstraintInfoEjRj\", \"clang::TargetInfo::resolveSymbolicName(char const*&, clang::TargetInfo::ConstraintInfo*, unsigned int, unsigned int&) const\"},\n    {\"_ZNK5clang10TargetInfo23validateInputConstraintEPNS0_14ConstraintInfoEjRS1_\", \"clang::TargetInfo::validateInputConstraint(clang::TargetInfo::ConstraintInfo*, unsigned int, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN5clang10TargetInfo16CreateTargetInfoERNS_10DiagnosticERNS_13TargetOptionsE\", \"clang::TargetInfo::CreateTargetInfo(clang::Diagnostic&, clang::TargetOptions&)\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_64TargetInfoC1ERKSs\", \"(anonymous namespace)::DarwinX86_64TargetInfo::DarwinX86_64TargetInfo(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_116X86_64TargetInfoD1Ev\", \"(anonymous namespace)::X86_64TargetInfo::~X86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116X86_64TargetInfoD0Ev\", \"(anonymous namespace)::X86_64TargetInfo::~X86_64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::X86TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::X86TargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116X86_64TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::X86_64TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo17convertConstraintEc\", \"(anonymous namespace)::X86TargetInfo::convertConstraint(char) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo11getClobbersEv\", \"(anonymous namespace)::X86TargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo18getDefaultFeaturesERKSsRN4llvm9StringMapIbNS3_15MallocAllocatorEEE\", \"(anonymous namespace)::X86TargetInfo::getDefaultFeatures(std::string const&, llvm::StringMap<bool, llvm::MallocAllocator>&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo17setFeatureEnabledERN4llvm9StringMapIbNS1_15MallocAllocatorEEERKSsb\", \"(anonymous namespace)::X86TargetInfo::setFeatureEnabled(llvm::StringMap<bool, llvm::MallocAllocator>&, std::string const&, bool) const\"},\n    {\"_ZN12_GLOBAL__N_113X86TargetInfo20HandleTargetFeaturesERSt6vectorISsSaISsEE\", \"(anonymous namespace)::X86TargetInfo::HandleTargetFeatures(std::vector<std::string, std::allocator<std::string> >&)\"},\n    {\"_ZNK12_GLOBAL__N_116X86_64TargetInfo23getEHDataRegisterNumberEj\", \"(anonymous namespace)::X86_64TargetInfo::getEHDataRegisterNumber(unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo19adjustInlineAsmTypeERSsPKN4llvm4TypeERNS2_11LLVMContextE\", \"(anonymous namespace)::X86TargetInfo::adjustInlineAsmType(std::string&, llvm::Type const*, llvm::LLVMContext&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::X86TargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::X86TargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86TargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::X86TargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_Z9DefineStdRN5clang12MacroBuilderEN4llvm9StringRefERKNS_11LangOptionsE\", \"DefineStd(clang::MacroBuilder&, llvm::StringRef, clang::LangOptions const&)\"},\n    {\"_ZN12_GLOBAL__N_113X86TargetInfoD1Ev\", \"(anonymous namespace)::X86TargetInfo::~X86TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113X86TargetInfoD0Ev\", \"(anonymous namespace)::X86TargetInfo::~X86TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_135VisualStudioWindowsX86_64TargetInfoD1Ev\", \"(anonymous namespace)::VisualStudioWindowsX86_64TargetInfo::~VisualStudioWindowsX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_135VisualStudioWindowsX86_64TargetInfoD0Ev\", \"(anonymous namespace)::VisualStudioWindowsX86_64TargetInfo::~VisualStudioWindowsX86_64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_135VisualStudioWindowsX86_64TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::VisualStudioWindowsX86_64TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_123WindowsX86_64TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::WindowsX86_64TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_117WindowsTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_123WindowsX86_64TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::WindowsX86_64TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_16X86_64TargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_123WindowsX86_64TargetInfoD1Ev\", \"(anonymous namespace)::WindowsX86_64TargetInfo::~WindowsX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_123WindowsX86_64TargetInfoD0Ev\", \"(anonymous namespace)::WindowsX86_64TargetInfo::~WindowsX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117WindowsTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~WindowsTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117WindowsTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~WindowsTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121MinGWX86_64TargetInfoD1Ev\", \"(anonymous namespace)::MinGWX86_64TargetInfo::~MinGWX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121MinGWX86_64TargetInfoD0Ev\", \"(anonymous namespace)::MinGWX86_64TargetInfo::~MinGWX86_64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_121MinGWX86_64TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MinGWX86_64TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117SolarisTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_123OpenBSDX86_64TargetInfoD1Ev\", \"(anonymous namespace)::OpenBSDX86_64TargetInfo::~OpenBSDX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_123OpenBSDX86_64TargetInfoD0Ev\", \"(anonymous namespace)::OpenBSDX86_64TargetInfo::~OpenBSDX86_64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~OpenBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~OpenBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~NetBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~NetBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~DragonFlyBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~DragonFlyBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115LinuxTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_64TargetInfoD1Ev\", \"(anonymous namespace)::DarwinX86_64TargetInfo::~DarwinX86_64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_64TargetInfoD0Ev\", \"(anonymous namespace)::DarwinX86_64TargetInfo::~DarwinX86_64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEE23isValidSectionSpecifierEN4llvm9StringRefE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEE29getStaticInitSectionSpecifierEv\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_Z16getDarwinDefinesRN5clang12MacroBuilderERKNS_11LangOptionsERKN4llvm6TripleE\", \"getDarwinDefines(clang::MacroBuilder&, clang::LangOptions const&, llvm::Triple const&)\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_64TargetInfoEED1Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_64TargetInfoEED0Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_64TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116X86_32TargetInfoD1Ev\", \"(anonymous namespace)::X86_32TargetInfo::~X86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116X86_32TargetInfoD0Ev\", \"(anonymous namespace)::X86_32TargetInfo::~X86_32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116X86_32TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::X86_32TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_116X86_32TargetInfo23getEHDataRegisterNumberEj\", \"(anonymous namespace)::X86_32TargetInfo::getEHDataRegisterNumber(unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_121HaikuX86_32TargetInfoD1Ev\", \"(anonymous namespace)::HaikuX86_32TargetInfo::~HaikuX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121HaikuX86_32TargetInfoD0Ev\", \"(anonymous namespace)::HaikuX86_32TargetInfo::~HaikuX86_32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_121HaikuX86_32TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::HaikuX86_32TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_135VisualStudioWindowsX86_32TargetInfoD1Ev\", \"(anonymous namespace)::VisualStudioWindowsX86_32TargetInfo::~VisualStudioWindowsX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_135VisualStudioWindowsX86_32TargetInfoD0Ev\", \"(anonymous namespace)::VisualStudioWindowsX86_32TargetInfo::~VisualStudioWindowsX86_32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_135VisualStudioWindowsX86_32TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::VisualStudioWindowsX86_32TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117WindowsTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_123WindowsX86_32TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::WindowsX86_32TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_16X86_32TargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_123WindowsX86_32TargetInfoD1Ev\", \"(anonymous namespace)::WindowsX86_32TargetInfo::~WindowsX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_123WindowsX86_32TargetInfoD0Ev\", \"(anonymous namespace)::WindowsX86_32TargetInfo::~WindowsX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117WindowsTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~WindowsTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117WindowsTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::WindowsTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~WindowsTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121MinGWX86_32TargetInfoD1Ev\", \"(anonymous namespace)::MinGWX86_32TargetInfo::~MinGWX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121MinGWX86_32TargetInfoD0Ev\", \"(anonymous namespace)::MinGWX86_32TargetInfo::~MinGWX86_32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_121MinGWX86_32TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MinGWX86_32TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_122CygwinX86_32TargetInfoD1Ev\", \"(anonymous namespace)::CygwinX86_32TargetInfo::~CygwinX86_32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_122CygwinX86_32TargetInfoD0Ev\", \"(anonymous namespace)::CygwinX86_32TargetInfo::~CygwinX86_32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_122CygwinX86_32TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::CygwinX86_32TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117SolarisTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115MinixTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::MinixTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~MinixTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115MinixTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::MinixTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~MinixTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115MinixTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::MinixTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_121OpenBSDI386TargetInfoD1Ev\", \"(anonymous namespace)::OpenBSDI386TargetInfo::~OpenBSDI386TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121OpenBSDI386TargetInfoD0Ev\", \"(anonymous namespace)::OpenBSDI386TargetInfo::~OpenBSDI386TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~OpenBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117OpenBSDTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::OpenBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~OpenBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~NetBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~NetBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~DragonFlyBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~DragonFlyBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115LinuxTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_120DarwinI386TargetInfoD1Ev\", \"(anonymous namespace)::DarwinI386TargetInfo::~DarwinI386TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_120DarwinI386TargetInfoD0Ev\", \"(anonymous namespace)::DarwinI386TargetInfo::~DarwinI386TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEE23isValidSectionSpecifierEN4llvm9StringRefE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEE29getStaticInitSectionSpecifierEv\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_32TargetInfoEED1Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_32TargetInfoEED0Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_32TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_113TCETargetInfoD1Ev\", \"(anonymous namespace)::TCETargetInfo::~TCETargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113TCETargetInfoD0Ev\", \"(anonymous namespace)::TCETargetInfo::~TCETargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::TCETargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::TCETargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::TCETargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo11getClobbersEv\", \"(anonymous namespace)::TCETargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::TCETargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::TCETargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113TCETargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::TCETargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_117SystemZTargetInfoD1Ev\", \"(anonymous namespace)::SystemZTargetInfo::~SystemZTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SystemZTargetInfoD0Ev\", \"(anonymous namespace)::SystemZTargetInfo::~SystemZTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::SystemZTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::SystemZTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::SystemZTargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo11getClobbersEv\", \"(anonymous namespace)::SystemZTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::SystemZTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::SystemZTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SystemZTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::SystemZTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_116PS3SPUTargetInfoINS_15PPC64TargetInfoEED1Ev\", \"(anonymous namespace)::PS3SPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~PS3SPUTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116PS3SPUTargetInfoINS_15PPC64TargetInfoEED0Ev\", \"(anonymous namespace)::PS3SPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~PS3SPUTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_15PPC64TargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::PPCTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_115PPC64TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::PPC64TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo11getClobbersEv\", \"(anonymous namespace)::PPCTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::PPCTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::PPCTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::PPCTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_116PS3SPUTargetInfoINS_15PPC64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::PS3SPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_113PPCTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::PPCTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_15PPC64TargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_15PPC64TargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115PPC64TargetInfoD1Ev\", \"(anonymous namespace)::PPC64TargetInfo::~PPC64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115PPC64TargetInfoD0Ev\", \"(anonymous namespace)::PPC64TargetInfo::~PPC64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PPCTargetInfoD1Ev\", \"(anonymous namespace)::PPCTargetInfo::~PPCTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PPCTargetInfoD0Ev\", \"(anonymous namespace)::PPCTargetInfo::~PPCTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SparcV8TargetInfoD1Ev\", \"(anonymous namespace)::SparcV8TargetInfo::~SparcV8TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SparcV8TargetInfoD0Ev\", \"(anonymous namespace)::SparcV8TargetInfo::~SparcV8TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::SparcV8TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::SparcV8TargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::SparcV8TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo11getClobbersEv\", \"(anonymous namespace)::SparcV8TargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo17setFeatureEnabledERN4llvm9StringMapIbNS1_15MallocAllocatorEEERKSsb\", \"(anonymous namespace)::SparcV8TargetInfo::setFeatureEnabled(llvm::StringMap<bool, llvm::MallocAllocator>&, std::string const&, bool) const\"},\n    {\"_ZN12_GLOBAL__N_117SparcV8TargetInfo20HandleTargetFeaturesERSt6vectorISsSaISsEE\", \"(anonymous namespace)::SparcV8TargetInfo::HandleTargetFeatures(std::vector<std::string, std::allocator<std::string> >&)\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::SparcV8TargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::SparcV8TargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SparcV8TargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::SparcV8TargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_124SolarisSparcV8TargetInfoD1Ev\", \"(anonymous namespace)::SolarisSparcV8TargetInfo::~SolarisSparcV8TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_124SolarisSparcV8TargetInfoD0Ev\", \"(anonymous namespace)::SolarisSparcV8TargetInfo::~SolarisSparcV8TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_17SparcV8TargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117SolarisTargetInfoINS_17SparcV8TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_17SparcV8TargetInfoEED1Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117SolarisTargetInfoINS_17SparcV8TargetInfoEED0Ev\", \"(anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~SolarisTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_17SparcV8TargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_17SparcV8TargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_125AuroraUXSparcV8TargetInfoD1Ev\", \"(anonymous namespace)::AuroraUXSparcV8TargetInfo::~AuroraUXSparcV8TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_125AuroraUXSparcV8TargetInfoD0Ev\", \"(anonymous namespace)::AuroraUXSparcV8TargetInfo::~AuroraUXSparcV8TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_118AuroraUXTargetInfoINS_17SparcV8TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_17SparcV8TargetInfoEED1Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118AuroraUXTargetInfoINS_17SparcV8TargetInfoEED0Ev\", \"(anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::SparcV8TargetInfo>::~AuroraUXTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116MBlazeTargetInfoD1Ev\", \"(anonymous namespace)::MBlazeTargetInfo::~MBlazeTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116MBlazeTargetInfoD0Ev\", \"(anonymous namespace)::MBlazeTargetInfo::~MBlazeTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MBlazeTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::MBlazeTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::MBlazeTargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo11getClobbersEv\", \"(anonymous namespace)::MBlazeTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::MBlazeTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::MBlazeTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::MBlazeTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MBlazeTargetInfo15getTargetPrefixEv\", \"(anonymous namespace)::MBlazeTargetInfo::getTargetPrefix() const\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC64TargetInfoEED1Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC64TargetInfoEED0Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116PS3PPUTargetInfoINS_15PPC64TargetInfoEED1Ev\", \"(anonymous namespace)::PS3PPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~PS3PPUTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116PS3PPUTargetInfoINS_15PPC64TargetInfoEED0Ev\", \"(anonymous namespace)::PS3PPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~PS3PPUTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116PS3PPUTargetInfoINS_15PPC64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::PS3PPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_121DarwinPPC64TargetInfoD1Ev\", \"(anonymous namespace)::DarwinPPC64TargetInfo::~DarwinPPC64TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121DarwinPPC64TargetInfoD0Ev\", \"(anonymous namespace)::DarwinPPC64TargetInfo::~DarwinPPC64TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEE23isValidSectionSpecifierEN4llvm9StringRefE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEE29getStaticInitSectionSpecifierEv\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEED1Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEED0Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115PPC32TargetInfoD1Ev\", \"(anonymous namespace)::PPC32TargetInfo::~PPC32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115PPC32TargetInfoD0Ev\", \"(anonymous namespace)::PPC32TargetInfo::~PPC32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115PPC32TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::PPC32TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC32TargetInfoEED1Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC32TargetInfoEED0Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_15PPC32TargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC32TargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_15PPC32TargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_15PPC32TargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121DarwinPPC32TargetInfoD1Ev\", \"(anonymous namespace)::DarwinPPC32TargetInfo::~DarwinPPC32TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_121DarwinPPC32TargetInfoD0Ev\", \"(anonymous namespace)::DarwinPPC32TargetInfo::~DarwinPPC32TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_121DarwinPPC32TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::DarwinPPC32TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEE23isValidSectionSpecifierEN4llvm9StringRefE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEE29getStaticInitSectionSpecifierEv\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEED1Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEED0Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116MipselTargetInfoD1Ev\", \"(anonymous namespace)::MipselTargetInfo::~MipselTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116MipselTargetInfoD0Ev\", \"(anonymous namespace)::MipselTargetInfo::~MipselTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116MipselTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MipselTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::MipsTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::MipsTargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo11getClobbersEv\", \"(anonymous namespace)::MipsTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo18getDefaultFeaturesERKSsRN4llvm9StringMapIbNS3_15MallocAllocatorEEE\", \"(anonymous namespace)::MipsTargetInfo::getDefaultFeatures(std::string const&, llvm::StringMap<bool, llvm::MallocAllocator>&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo6getABIEv\", \"(anonymous namespace)::MipsTargetInfo::getABI() const\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfo6setCPUERKSs\", \"(anonymous namespace)::MipsTargetInfo::setCPU(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfo6setABIERKSs\", \"(anonymous namespace)::MipsTargetInfo::setABI(std::string const&)\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::MipsTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::MipsTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::MipsTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo14getArchDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MipsTargetInfo::getArchDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfoD1Ev\", \"(anonymous namespace)::MipsTargetInfo::~MipsTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfoD0Ev\", \"(anonymous namespace)::MipsTargetInfo::~MipsTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_114MipsTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MipsTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16MipselTargetInfoEED1Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipselTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_16MipselTargetInfoEED0Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipselTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_16MipselTargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipselTargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_115LinuxTargetInfoINS_16MipselTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipselTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16MipselTargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipselTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_16MipselTargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipselTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PSPTargetInfoINS_16MipselTargetInfoEED1Ev\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipselTargetInfo>::~PSPTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PSPTargetInfoINS_16MipselTargetInfoEED0Ev\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipselTargetInfo>::~PSPTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113PSPTargetInfoINS_16MipselTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipselTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_14MipsTargetInfoEED1Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipsTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_14MipsTargetInfoEED0Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipsTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_14MipsTargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipsTargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_115LinuxTargetInfoINS_14MipsTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipsTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_14MipsTargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipsTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_14MipsTargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::MipsTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PSPTargetInfoINS_14MipsTargetInfoEED1Ev\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipsTargetInfo>::~PSPTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113PSPTargetInfoINS_14MipsTargetInfoEED0Ev\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipsTargetInfo>::~PSPTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113PSPTargetInfoINS_14MipsTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipsTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116MSP430TargetInfoD1Ev\", \"(anonymous namespace)::MSP430TargetInfo::~MSP430TargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116MSP430TargetInfoD0Ev\", \"(anonymous namespace)::MSP430TargetInfo::~MSP430TargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::MSP430TargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::MSP430TargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::MSP430TargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo11getClobbersEv\", \"(anonymous namespace)::MSP430TargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::MSP430TargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::MSP430TargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_116MSP430TargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::MSP430TargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_118BlackfinTargetInfoD1Ev\", \"(anonymous namespace)::BlackfinTargetInfo::~BlackfinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_118BlackfinTargetInfoD0Ev\", \"(anonymous namespace)::BlackfinTargetInfo::~BlackfinTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::BlackfinTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::BlackfinTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::BlackfinTargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo11getClobbersEv\", \"(anonymous namespace)::BlackfinTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::BlackfinTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::BlackfinTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_118BlackfinTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::BlackfinTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfoC2ERKSs\", \"(anonymous namespace)::ARMTargetInfo::ARMTargetInfo(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfoD1Ev\", \"(anonymous namespace)::ARMTargetInfo::~ARMTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfoD0Ev\", \"(anonymous namespace)::ARMTargetInfo::~ARMTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo16getTargetDefinesERKN5clang11LangOptionsERNS1_12MacroBuilderE\", \"(anonymous namespace)::ARMTargetInfo::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo17getTargetBuiltinsERPKN5clang7Builtin4InfoERj\", \"(anonymous namespace)::ARMTargetInfo::getTargetBuiltins(clang::Builtin::Info const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo20getVAListDeclarationEv\", \"(anonymous namespace)::ARMTargetInfo::getVAListDeclaration() const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo11getClobbersEv\", \"(anonymous namespace)::ARMTargetInfo::getClobbers() const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo18getDefaultFeaturesERKSsRN4llvm9StringMapIbNS3_15MallocAllocatorEEE\", \"(anonymous namespace)::ARMTargetInfo::getDefaultFeatures(std::string const&, llvm::StringMap<bool, llvm::MallocAllocator>&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo6getABIEv\", \"(anonymous namespace)::ARMTargetInfo::getABI() const\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo6setCPUERKSs\", \"(anonymous namespace)::ARMTargetInfo::setCPU(std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo6setABIERKSs\", \"(anonymous namespace)::ARMTargetInfo::setABI(std::string const&)\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo17setFeatureEnabledERN4llvm9StringMapIbNS1_15MallocAllocatorEEERKSsb\", \"(anonymous namespace)::ARMTargetInfo::setFeatureEnabled(llvm::StringMap<bool, llvm::MallocAllocator>&, std::string const&, bool) const\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo20HandleTargetFeaturesERSt6vectorISsSaISsEE\", \"(anonymous namespace)::ARMTargetInfo::HandleTargetFeatures(std::vector<std::string, std::allocator<std::string> >&)\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo14getGCCRegNamesERPKPKcRj\", \"(anonymous namespace)::ARMTargetInfo::getGCCRegNames(char const* const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo16getGCCRegAliasesERPKN5clang10TargetInfo11GCCRegAliasERj\", \"(anonymous namespace)::ARMTargetInfo::getGCCRegAliases(clang::TargetInfo::GCCRegAlias const*&, unsigned int&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMTargetInfo21validateAsmConstraintERPKcRN5clang10TargetInfo14ConstraintInfoE\", \"(anonymous namespace)::ARMTargetInfo::validateAsmConstraint(char const*&, clang::TargetInfo::ConstraintInfo&) const\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo18getCPUDefineSuffixEN4llvm9StringRefE\", \"(anonymous namespace)::ARMTargetInfo::getCPUDefineSuffix(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_13ARMTargetInfoEED1Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::ARMTargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_117FreeBSDTargetInfoINS_13ARMTargetInfoEED0Ev\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::ARMTargetInfo>::~FreeBSDTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_112OSTargetInfoINS_13ARMTargetInfoEE16getTargetDefinesERKN5clang11LangOptionsERNS3_12MacroBuilderE\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::ARMTargetInfo>::getTargetDefines(clang::LangOptions const&, clang::MacroBuilder&) const\"},\n    {\"_ZNK12_GLOBAL__N_117FreeBSDTargetInfoINS_13ARMTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::ARMTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_13ARMTargetInfoEED1Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::ARMTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_112OSTargetInfoINS_13ARMTargetInfoEED0Ev\", \"(anonymous namespace)::OSTargetInfo<(anonymous namespace)::ARMTargetInfo>::~OSTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_119DarwinARMTargetInfoD1Ev\", \"(anonymous namespace)::DarwinARMTargetInfo::~DarwinARMTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_119DarwinARMTargetInfoD0Ev\", \"(anonymous namespace)::DarwinARMTargetInfo::~DarwinARMTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEE23isValidSectionSpecifierEN4llvm9StringRefE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEE29getStaticInitSectionSpecifierEv\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK12_GLOBAL__N_119DarwinARMTargetInfo12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS1_12MacroBuilderE\", \"(anonymous namespace)::DarwinARMTargetInfo::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEED1Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEED0Ev\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>::~DarwinTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_13ARMTargetInfoEED1Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::ARMTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZN12_GLOBAL__N_115LinuxTargetInfoINS_13ARMTargetInfoEED0Ev\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::ARMTargetInfo>::~LinuxTargetInfo()\"},\n    {\"_ZNK12_GLOBAL__N_115LinuxTargetInfoINS_13ARMTargetInfoEE12getOSDefinesERKN5clang11LangOptionsERKN4llvm6TripleERNS3_12MacroBuilderE\", \"(anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::ARMTargetInfo>::getOSDefines(clang::LangOptions const&, llvm::Triple const&, clang::MacroBuilder&) const\"},\n    {\"_ZN5clang10TargetInfo9setCXXABIERKSs\", \"clang::TargetInfo::setCXXABI(std::string const&)\"},\n    {\"_ZNK5clang10TargetInfo31useGlobalsForAutomaticVariablesEv\", \"clang::TargetInfo::useGlobalsForAutomaticVariables() const\"},\n    {\"_ZNK5clang10TargetInfo18getCFStringSectionEv\", \"clang::TargetInfo::getCFStringSection() const\"},\n    {\"_ZNK5clang10TargetInfo18getNSStringSectionEv\", \"clang::TargetInfo::getNSStringSection() const\"},\n    {\"_ZNK5clang10TargetInfo31getNSStringNonFragileABISectionEv\", \"clang::TargetInfo::getNSStringNonFragileABISection() const\"},\n    {\"_ZNK5clang10TargetInfo23isValidSectionSpecifierEN4llvm9StringRefE\", \"clang::TargetInfo::isValidSectionSpecifier(llvm::StringRef) const\"},\n    {\"_ZNK5clang10TargetInfo6getABIEv\", \"clang::TargetInfo::getABI() const\"},\n    {\"_ZNK5clang10TargetInfo9getCXXABIEv\", \"clang::TargetInfo::getCXXABI() const\"},\n    {\"_ZN5clang10TargetInfo6setCPUERKSs\", \"clang::TargetInfo::setCPU(std::string const&)\"},\n    {\"_ZN5clang10TargetInfo6setABIERKSs\", \"clang::TargetInfo::setABI(std::string const&)\"},\n    {\"_ZN5clang10TargetInfo9setCXXABIENS_12TargetCXXABIE\", \"clang::TargetInfo::setCXXABI(clang::TargetCXXABI)\"},\n    {\"_ZNK5clang10TargetInfo29getStaticInitSectionSpecifierEv\", \"clang::TargetInfo::getStaticInitSectionSpecifier() const\"},\n    {\"_ZNK5clang10TargetInfo16getPointerWidthVEj\", \"clang::TargetInfo::getPointerWidthV(unsigned int) const\"},\n    {\"_ZNK5clang10TargetInfo16getPointerAlignVEj\", \"clang::TargetInfo::getPointerAlignV(unsigned int) const\"},\n    {\"_ZNK5clang10TargetInfo15getPtrDiffTypeVEj\", \"clang::TargetInfo::getPtrDiffTypeV(unsigned int) const\"},\n    {\"_ZN5clang12MacroBuilder11defineMacroERKN4llvm5TwineES4_\", \"clang::MacroBuilder::defineMacro(llvm::Twine const&, llvm::Twine const&)\"},\n    {\"_ZNK5clang10TargetInfo23getEHDataRegisterNumberEj\", \"clang::TargetInfo::getEHDataRegisterNumber(unsigned int) const\"},\n    {\"_ZNK5clang10TargetInfo17convertConstraintEc\", \"clang::TargetInfo::convertConstraint(char) const\"},\n    {\"_ZNK5clang10TargetInfo18getDefaultFeaturesERKSsRN4llvm9StringMapIbNS3_15MallocAllocatorEEE\", \"clang::TargetInfo::getDefaultFeatures(std::string const&, llvm::StringMap<bool, llvm::MallocAllocator>&) const\"},\n    {\"_ZNK5clang10TargetInfo17setFeatureEnabledERN4llvm9StringMapIbNS1_15MallocAllocatorEEERKSsb\", \"clang::TargetInfo::setFeatureEnabled(llvm::StringMap<bool, llvm::MallocAllocator>&, std::string const&, bool) const\"},\n    {\"_ZN5clang10TargetInfo20HandleTargetFeaturesERSt6vectorISsSaISsEE\", \"clang::TargetInfo::HandleTargetFeatures(std::vector<std::string, std::allocator<std::string> >&)\"},\n    {\"_ZNK5clang10TargetInfo19adjustInlineAsmTypeERSsPKN4llvm4TypeERNS2_11LLVMContextE\", \"clang::TargetInfo::adjustInlineAsmType(std::string&, llvm::Type const*, llvm::LLVMContext&) const\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEEA16_cET_S8_S8_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > > std::__find<__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, char [16]>(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, __gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, char const (&) [16], std::random_access_iterator_tag)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPSsSt6vectorISsSaISsEEEEA12_cET_S8_S8_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > > std::__find<__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, char [12]>(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, __gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator<std::string> > >, char const (&) [12], std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj10ELj13ELj14ELj14EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RAT2__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<10u, 13u, 14u, 14u>(char const (&) [10u], char const (&) [13u], char const (&) [14u], char const (&) [14u], char const* const&)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj9ELj11ELj8ELj8ELj5EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RAT2__S1_RAT3__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<9u, 11u, 8u, 8u, 5u>(char const (&) [9u], char const (&) [11u], char const (&) [8u], char const (&) [8u], char const (&) [5u], char const* const&)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj9ELj7ELj8ELj8ELj8EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RAT2__S1_RAT3__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<9u, 7u, 8u, 8u, 8u>(char const (&) [9u], char const (&) [7u], char const (&) [8u], char const (&) [8u], char const (&) [8u], char const* const&)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj6ELj10ELj10ELj10EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RAT2__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<6u, 10u, 10u, 10u>(char const (&) [6u], char const (&) [10u], char const (&) [10u], char const (&) [10u], char const* const&)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj7ELj9ELj9EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<7u, 9u, 9u>(char const (&) [7u], char const (&) [9u], char const (&) [9u], char const* const&)\"},\n    {\"_ZN4llvm12StringSwitchIPKcS2_E5CasesILj12ELj12ELj7EEERS3_RAT__S1_RAT0__S1_RAT1__S1_RKS2_\", \"llvm::StringSwitch<char const*, char const*>& llvm::StringSwitch<char const*, char const*>::Cases<12u, 12u, 7u>(char const (&) [12u], char const (&) [12u], char const (&) [7u], char const* const&)\"},\n    {\"_ZN5clang3tok12getTokenNameENS0_9TokenKindE\", \"clang::tok::getTokenName(clang::tok::TokenKind)\"},\n    {\"_ZN5clang3tok22getTokenSimpleSpellingENS0_9TokenKindE\", \"clang::tok::getTokenSimpleSpelling(clang::tok::TokenKind)\"},\n    {\"_ZN5clang22getClangRepositoryPathEv\", \"clang::getClangRepositoryPath()\"},\n    {\"_ZN5clang16getClangRevisionEv\", \"clang::getClangRevision()\"},\n    {\"_ZN5clang29getClangFullRepositoryVersionEv\", \"clang::getClangFullRepositoryVersion()\"},\n    {\"_ZN5clang19getClangFullVersionEv\", \"clang::getClangFullVersion()\"},\n    {\"_ZN4llvm26initializeArgPromotionPassERNS_12PassRegistryE\", \"llvm::initializeArgPromotionPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm27createArgumentPromotionPassEj\", \"llvm::createArgumentPromotionPass(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_112ArgPromotionD1Ev\", \"(anonymous namespace)::ArgPromotion::~ArgPromotion()\"},\n    {\"_ZN12_GLOBAL__N_112ArgPromotionD0Ev\", \"(anonymous namespace)::ArgPromotion::~ArgPromotion()\"},\n    {\"_ZNK12_GLOBAL__N_112ArgPromotion16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::ArgPromotion::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_112ArgPromotion8runOnSCCERN4llvm12CallGraphSCCE\", \"(anonymous namespace)::ArgPromotion::runOnSCC(llvm::CallGraphSCC&)\"},\n    {\"_ZNK12_GLOBAL__N_112ArgPromotion23isSafeToPromoteArgumentEPN4llvm8ArgumentEb\", \"(anonymous namespace)::ArgPromotion::isSafeToPromoteArgument(llvm::Argument*, bool) const\"},\n    {\"_ZN12_GLOBAL__N_112ArgPromotion11DoPromotionEPN4llvm8FunctionERNS1_11SmallPtrSetIPNS1_8ArgumentELj8EEES8_\", \"(anonymous namespace)::ArgPromotion::DoPromotion(llvm::Function*, llvm::SmallPtrSet<llvm::Argument*, 8u>&, llvm::SmallPtrSet<llvm::Argument*, 8u>&)\"},\n    {\"_Z15MarkIndicesSafeRKSt6vectorIySaIyEERSt3setIS1_St4lessIS1_ESaIS1_EE\", \"MarkIndicesSafe(std::vector<unsigned long long, std::allocator<unsigned long long> > const&, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112ArgPromotionEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::ArgPromotion>()\"},\n    {\"_ZNK4llvm16CallGraphSCCPass27getPotentialPassManagerTypeEv\", \"llvm::CallGraphSCCPass::getPotentialPassManagerType() const\"},\n    {\"_ZN4llvm16CallGraphSCCPass16doInitializationERNS_9CallGraphE\", \"llvm::CallGraphSCCPass::doInitialization(llvm::CallGraph&)\"},\n    {\"_ZN4llvm16CallGraphSCCPass14doFinalizationERNS_9CallGraphE\", \"llvm::CallGraphSCCPass::doFinalization(llvm::CallGraph&)\"},\n    {\"_ZNSt3mapIPN4llvm8ArgumentESt3setISt6vectorIySaIyEESt4lessIS6_ESaIS6_EES7_IS2_ESaISt4pairIKS2_SA_EEEixERSD_\", \"std::map<llvm::Argument*, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > > >::operator[](llvm::Argument* const&)\"},\n    {\"_ZNSt3mapISt6vectorIySaIyEEPN4llvm8LoadInstESt4lessIS2_ESaISt4pairIKS2_S5_EEEixERS9_\", \"std::map<std::vector<unsigned long long, std::allocator<unsigned long long> >, llvm::LoadInst*, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> > >::operator[](std::vector<unsigned long long, std::allocator<unsigned long long> > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm8ArgumentESt4pairIKS2_St3setISt6vectorIySaIyEESt4lessIS8_ESaIS8_EEESt10_Select1stISD_ES9_IS2_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E\", \"std::_Rb_tree<llvm::Argument*, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > >, std::_Select1st<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::_M_erase(std::_Rb_tree_node<std::vector<unsigned long long, std::allocator<unsigned long long> > >*)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEESt4pairIKS2_PN4llvm8LoadInstEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*>, std::_Select1st<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >*)\"},\n    {\"_ZN4llvm17GetElementPtrInstC2IN9__gnu_cxx17__normal_iteratorIPPNS_5ValueESt6vectorIS5_SaIS5_EEEEEES5_T_SB_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::GetElementPtrInst::GetElementPtrInst<__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >(llvm::Value*, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEESt4pairIKS2_PN4llvm8LoadInstEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*>, std::_Select1st<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >, std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEESt4pairIKS2_PN4llvm8LoadInstEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*>, std::_Select1st<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> > >::_M_insert_unique(std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEESt4pairIKS2_PN4llvm8LoadInstEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE14_M_create_nodeERKS8_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*>, std::_Select1st<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> > >::_M_create_node(std::pair<std::vector<unsigned long long, std::allocator<unsigned long long> > const, llvm::LoadInst*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::_M_insert_unique(std::vector<unsigned long long, std::allocator<unsigned long long> > const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE14_M_create_nodeERKS2_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::_M_create_node(std::vector<unsigned long long, std::allocator<unsigned long long> > const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE7_M_copyEPKSt13_Rb_tree_nodeIS2_EPSA_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::_M_copy(std::_Rb_tree_node<std::vector<unsigned long long, std::allocator<unsigned long long> > > const*, std::_Rb_tree_node<std::vector<unsigned long long, std::allocator<unsigned long long> > >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm8ArgumentESt4pairIKS2_St3setISt6vectorIySaIyEESt4lessIS8_ESaIS8_EEESt10_Select1stISD_ES9_IS2_ESaISD_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISD_ERKSD_\", \"std::_Rb_tree<llvm::Argument*, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > >, std::_Select1st<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm8ArgumentESt4pairIKS2_St3setISt6vectorIySaIyEESt4lessIS8_ESaIS8_EEESt10_Select1stISD_ES9_IS2_ESaISD_EE9_M_insertEPSt18_Rb_tree_node_baseSK_RKSD_\", \"std::_Rb_tree<llvm::Argument*, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > >, std::_Select1st<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm8ArgumentESt4pairIKS2_St3setISt6vectorIySaIyEESt4lessIS8_ESaIS8_EEESt10_Select1stISD_ES9_IS2_ESaISD_EE16_M_insert_uniqueERKSD_\", \"std::_Rb_tree<llvm::Argument*, std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > >, std::_Select1st<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > >, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > > >::_M_insert_unique(std::pair<llvm::Argument* const, std::set<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > > > const&)\"},\n    {\"_ZN4llvm11df_iteratorINS_7InverseIPNS_10BasicBlockEEENS_11SmallPtrSetIS3_Lj16EEELb1ENS_11GraphTraitsIS4_EEE6toNextEv\", \"llvm::df_iterator<llvm::Inverse<llvm::BasicBlock*>, llvm::SmallPtrSet<llvm::BasicBlock*, 16u>, true, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> > >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_10BasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEENS1_12PredIteratorIS3_NS1_18value_use_iteratorINS1_4UserEEEEEESaISD_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSD_SF_EERKSD_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >*, std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > > > > >, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_10BasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEENS1_12PredIteratorIS3_NS1_18value_use_iteratorINS1_4UserEEEEEESaISD_EEC2ERKSF_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > > > >::vector(std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > > > > const&)\"},\n    {\"_ZN4llvm11df_iteratorINS_7InverseIPNS_10BasicBlockEEENS_11SmallPtrSetIS3_Lj16EEELb1ENS_11GraphTraitsIS4_EEEC2ES3_RS6_\", \"llvm::df_iterator<llvm::Inverse<llvm::BasicBlock*>, llvm::SmallPtrSet<llvm::BasicBlock*, 16u>, true, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> > >::df_iterator(llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 16u>&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE4findERKS2_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::find(std::vector<unsigned long long, std::allocator<unsigned long long> > const&)\"},\n    {\"_ZNSt8_Rb_treeISt6vectorIySaIyEES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueESt23_Rb_tree_const_iteratorIS2_ERKS2_\", \"std::_Rb_tree<std::vector<unsigned long long, std::allocator<unsigned long long> >, std::vector<unsigned long long, std::allocator<unsigned long long> >, std::_Identity<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::less<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::allocator<std::vector<unsigned long long, std::allocator<unsigned long long> > > >::_M_insert_unique(std::_Rb_tree_const_iterator<std::vector<unsigned long long, std::allocator<unsigned long long> > >, std::vector<unsigned long long, std::allocator<unsigned long long> > const&)\"},\n    {\"_ZN4llvm16CallGraphSCCPassD1Ev\", \"llvm::CallGraphSCCPass::~CallGraphSCCPass()\"},\n    {\"_ZN4llvm16CallGraphSCCPassD0Ev\", \"llvm::CallGraphSCCPass::~CallGraphSCCPass()\"},\n    {\"_ZN4llvm27initializeConstantMergePassERNS_12PassRegistryE\", \"llvm::initializeConstantMergePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createConstantMergePassEv\", \"llvm::createConstantMergePass()\"},\n    {\"_ZN12_GLOBAL__N_113ConstantMergeD1Ev\", \"(anonymous namespace)::ConstantMerge::~ConstantMerge()\"},\n    {\"_ZN12_GLOBAL__N_113ConstantMergeD0Ev\", \"(anonymous namespace)::ConstantMerge::~ConstantMerge()\"},\n    {\"_ZN12_GLOBAL__N_113ConstantMerge11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::ConstantMerge::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113ConstantMergeEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::ConstantMerge>()\"},\n    {\"_ZN4llvm8DenseMapIPNS_8ConstantEPNS_14GlobalVariableENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Constant*, llvm::GlobalVariable*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_8ConstantEPNS_14GlobalVariableENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Constant*, llvm::GlobalVariable*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::InsertIntoBucket(llvm::Constant* const&, llvm::GlobalVariable* const&, std::pair<llvm::Constant*, llvm::GlobalVariable*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8ConstantEPNS_14GlobalVariableENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Constant*, llvm::GlobalVariable*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::GlobalVariable*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm17initializeDAEPassERNS_12PassRegistryE\", \"llvm::initializeDAEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm17initializeDAHPassERNS_12PassRegistryE\", \"llvm::initializeDAHPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm28createDeadArgEliminationPassEv\", \"llvm::createDeadArgEliminationPass()\"},\n    {\"_ZN4llvm24createDeadArgHackingPassEv\", \"llvm::createDeadArgHackingPass()\"},\n    {\"_ZN12_GLOBAL__N_13DAHD1Ev\", \"(anonymous namespace)::DAH::~DAH()\"},\n    {\"_ZN12_GLOBAL__N_13DAHD0Ev\", \"(anonymous namespace)::DAH::~DAH()\"},\n    {\"_ZN12_GLOBAL__N_13DAE11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::DAE::runOnModule(llvm::Module&)\"},\n    {\"_ZNK12_GLOBAL__N_13DAH19ShouldHackArgumentsEv\", \"(anonymous namespace)::DAH::ShouldHackArguments() const\"},\n    {\"_ZNSt3setIN12_GLOBAL__N_13DAE8RetOrArgESt4lessIS2_ESaIS2_EE5eraseERKS2_\", \"std::set<(anonymous namespace)::DAE::RetOrArg, std::less<(anonymous namespace)::DAE::RetOrArg>, std::allocator<(anonymous namespace)::DAE::RetOrArg> >::erase((anonymous namespace)::DAE::RetOrArg const&)\"},\n    {\"_ZNSt8_Rb_treeIN12_GLOBAL__N_13DAE8RetOrArgES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<(anonymous namespace)::DAE::RetOrArg, (anonymous namespace)::DAE::RetOrArg, std::_Identity<(anonymous namespace)::DAE::RetOrArg>, std::less<(anonymous namespace)::DAE::RetOrArg>, std::allocator<(anonymous namespace)::DAE::RetOrArg> >::_M_erase(std::_Rb_tree_node<(anonymous namespace)::DAE::RetOrArg>*)\"},\n    {\"_ZN12_GLOBAL__N_13DAE8MarkLiveERKN4llvm8FunctionE\", \"(anonymous namespace)::DAE::MarkLive(llvm::Function const&)\"},\n    {\"_ZN12_GLOBAL__N_13DAE9MarkValueERKNS0_8RetOrArgENS0_8LivenessERKN4llvm11SmallVectorIS1_Lj5EEE\", \"(anonymous namespace)::DAE::MarkValue((anonymous namespace)::DAE::RetOrArg const&, (anonymous namespace)::DAE::Liveness, llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u> const&)\"},\n    {\"_ZN12_GLOBAL__N_13DAE8MarkLiveERKNS0_8RetOrArgE\", \"(anonymous namespace)::DAE::MarkLive((anonymous namespace)::DAE::RetOrArg const&)\"},\n    {\"_ZN12_GLOBAL__N_13DAE17PropagateLivenessERKNS0_8RetOrArgE\", \"(anonymous namespace)::DAE::PropagateLiveness((anonymous namespace)::DAE::RetOrArg const&)\"},\n    {\"_ZNSt8_Rb_treeIN12_GLOBAL__N_13DAE8RetOrArgESt4pairIKS2_S2_ESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<(anonymous namespace)::DAE::RetOrArg, std::pair<(anonymous namespace)::DAE::RetOrArg const, (anonymous namespace)::DAE::RetOrArg>, std::_Select1st<std::pair<(anonymous namespace)::DAE::RetOrArg const, (anonymous namespace)::DAE::RetOrArg> >, std::less<(anonymous namespace)::DAE::RetOrArg>, std::allocator<std::pair<(anonymous namespace)::DAE::RetOrArg const, (anonymous namespace)::DAE::RetOrArg> > >::_M_erase(std::_Rb_tree_node<std::pair<(anonymous namespace)::DAE::RetOrArg const, (anonymous namespace)::DAE::RetOrArg> >*)\"},\n    {\"_ZN12_GLOBAL__N_13DAE9SurveyUseEN4llvm18value_use_iteratorIKNS1_4UserEEERNS1_11SmallVectorINS0_8RetOrArgELj5EEEj\", \"(anonymous namespace)::DAE::SurveyUse(llvm::value_use_iterator<llvm::User const>, llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u>&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_13DAE13MarkIfNotLiveENS0_8RetOrArgERN4llvm11SmallVectorIS1_Lj5EEE\", \"(anonymous namespace)::DAE::MarkIfNotLive((anonymous namespace)::DAE::RetOrArg, llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u>&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_13DAE8RetOrArgELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::DAE::RetOrArg, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm11SmallVectorIN12_GLOBAL__N_13DAE8RetOrArgELj5EEC1ERKS4_\", \"llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u>::SmallVector(llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIN12_GLOBAL__N_13DAE8RetOrArgELj5EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<(anonymous namespace)::DAE::RetOrArg, 5u>, false>::grow(unsigned long)\"},\n    {\"_ZN12_GLOBAL__N_13DAED1Ev\", \"(anonymous namespace)::DAE::~DAE()\"},\n    {\"_ZN12_GLOBAL__N_13DAED0Ev\", \"(anonymous namespace)::DAE::~DAE()\"},\n    {\"_ZNK12_GLOBAL__N_13DAE19ShouldHackArgumentsEv\", \"(anonymous namespace)::DAE::ShouldHackArguments() const\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_13DAHEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::DAH>()\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_13DAEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::DAE>()\"},\n    {\"_ZN4llvm8CallInstC2IN9__gnu_cxx17__normal_iteratorIPPNS_5ValueESt6vectorIS5_SaIS5_EEEEEES5_T_SB_RKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst<__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >(llvm::Value*, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10InvokeInstC2IN9__gnu_cxx17__normal_iteratorIPPNS_5ValueESt6vectorIS5_SaIS5_EEEEEES5_PNS_10BasicBlockESC_T_SD_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::InvokeInst::InvokeInst<__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, __gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm11SmallVectorIiLj5EEC2EjRKi\", \"llvm::SmallVector<int, 5u>::SmallVector(unsigned int, int const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE16_M_insert_uniqueERKS3_\", \"std::_Rb_tree<llvm::Function const*, llvm::Function const*, std::_Identity<llvm::Function const*>, std::less<llvm::Function const*>, std::allocator<llvm::Function const*> >::_M_insert_unique(llvm::Function const* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm5ValueESaIS2_EE13_M_assign_auxIPNS0_3UseEEEvT_S8_St20forward_iterator_tag\", \"void std::vector<llvm::Value*, std::allocator<llvm::Value*> >::_M_assign_aux<llvm::Use*>(llvm::Use*, llvm::Use*, std::forward_iterator_tag)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E\", \"std::_Rb_tree<llvm::Function const*, llvm::Function const*, std::_Identity<llvm::Function const*>, std::less<llvm::Function const*>, std::allocator<llvm::Function const*> >::_M_erase(std::_Rb_tree_node<llvm::Function const*>*)\"},\n    {\"_ZN4llvm17initializeDTEPassERNS_12PassRegistryE\", \"llvm::initializeDTEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm29createDeadTypeEliminationPassEv\", \"llvm::createDeadTypeEliminationPass()\"},\n    {\"_ZN12_GLOBAL__N_13DTED1Ev\", \"(anonymous namespace)::DTE::~DTE()\"},\n    {\"_ZN12_GLOBAL__N_13DTED0Ev\", \"(anonymous namespace)::DTE::~DTE()\"},\n    {\"_ZNK12_GLOBAL__N_13DTE16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::DTE::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_13DTE11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::DTE::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_13DTEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::DTE>()\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E\", \"std::_Rb_tree<llvm::Type const*, llvm::Type const*, std::_Identity<llvm::Type const*>, std::less<llvm::Type const*>, std::allocator<llvm::Type const*> >::_M_erase(std::_Rb_tree_node<llvm::Type const*>*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE5eraseESt17_Rb_tree_iteratorIS3_ESB_\", \"std::_Rb_tree<llvm::Type const*, llvm::Type const*, std::_Identity<llvm::Type const*>, std::less<llvm::Type const*>, std::allocator<llvm::Type const*> >::erase(std::_Rb_tree_iterator<llvm::Type const*>, std::_Rb_tree_iterator<llvm::Type const*>)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE7_M_copyEPKSt13_Rb_tree_nodeIS3_EPSB_\", \"std::_Rb_tree<llvm::Type const*, llvm::Type const*, std::_Identity<llvm::Type const*>, std::less<llvm::Type const*>, std::allocator<llvm::Type const*> >::_M_copy(std::_Rb_tree_node<llvm::Type const*> const*, std::_Rb_tree_node<llvm::Type const*>*)\"},\n    {\"_ZN4llvm27initializeFunctionAttrsPassERNS_12PassRegistryE\", \"llvm::initializeFunctionAttrsPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createFunctionAttrsPassEv\", \"llvm::createFunctionAttrsPass()\"},\n    {\"_ZN12_GLOBAL__N_113FunctionAttrsD1Ev\", \"(anonymous namespace)::FunctionAttrs::~FunctionAttrs()\"},\n    {\"_ZN12_GLOBAL__N_113FunctionAttrsD0Ev\", \"(anonymous namespace)::FunctionAttrs::~FunctionAttrs()\"},\n    {\"_ZNK12_GLOBAL__N_113FunctionAttrs16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::FunctionAttrs::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_113FunctionAttrs8runOnSCCERN4llvm12CallGraphSCCE\", \"(anonymous namespace)::FunctionAttrs::runOnSCC(llvm::CallGraphSCC&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113FunctionAttrsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::FunctionAttrs>()\"},\n    {\"_ZN4llvm12UniqueVectorIPNS_5ValueEE6insertERKS2_\", \"llvm::UniqueVector<llvm::Value*>::insert(llvm::Value* const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm5ValueESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::Value*, std::pair<llvm::Value* const, unsigned int>, std::_Select1st<std::pair<llvm::Value* const, unsigned int> >, std::less<llvm::Value*>, std::allocator<std::pair<llvm::Value* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Value* const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm5ValueESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<llvm::Value*, std::pair<llvm::Value* const, unsigned int>, std::_Select1st<std::pair<llvm::Value* const, unsigned int> >, std::less<llvm::Value*>, std::allocator<std::pair<llvm::Value* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Value* const, unsigned int> >, std::pair<llvm::Value* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm5ValueESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::Value*, std::pair<llvm::Value* const, unsigned int>, std::_Select1st<std::pair<llvm::Value* const, unsigned int> >, std::less<llvm::Value*>, std::allocator<std::pair<llvm::Value* const, unsigned int> > >::_M_insert_unique(std::pair<llvm::Value* const, unsigned int> const&)\"},\n    {\"_ZN4llvm23initializeGlobalDCEPassERNS_12PassRegistryE\", \"llvm::initializeGlobalDCEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm19createGlobalDCEPassEv\", \"llvm::createGlobalDCEPass()\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCED1Ev\", \"(anonymous namespace)::GlobalDCE::~GlobalDCE()\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCED0Ev\", \"(anonymous namespace)::GlobalDCE::~GlobalDCE()\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCE11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::GlobalDCE::runOnModule(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCE14GlobalIsNeededEPN4llvm11GlobalValueE\", \"(anonymous namespace)::GlobalDCE::GlobalIsNeeded(llvm::GlobalValue*)\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCE23MarkUsedGlobalsAsNeededEPN4llvm8ConstantE\", \"(anonymous namespace)::GlobalDCE::MarkUsedGlobalsAsNeeded(llvm::Constant*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_19GlobalDCEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::GlobalDCE>()\"},\n    {\"_ZNSt6vectorIPN4llvm11GlobalAliasESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::GlobalAlias*, std::allocator<llvm::GlobalAlias*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GlobalAlias**, std::vector<llvm::GlobalAlias*, std::allocator<llvm::GlobalAlias*> > >, llvm::GlobalAlias* const&)\"},\n    {\"_ZN4llvm23initializeGlobalOptPassERNS_12PassRegistryE\", \"llvm::initializeGlobalOptPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm25createGlobalOptimizerPassEv\", \"llvm::createGlobalOptimizerPass()\"},\n    {\"_ZN12_GLOBAL__N_19GlobalOptD1Ev\", \"(anonymous namespace)::GlobalOpt::~GlobalOpt()\"},\n    {\"_ZN12_GLOBAL__N_19GlobalOptD0Ev\", \"(anonymous namespace)::GlobalOpt::~GlobalOpt()\"},\n    {\"_ZNK12_GLOBAL__N_19GlobalOpt16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::GlobalOpt::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_19GlobalOpt11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::GlobalOpt::runOnModule(llvm::Module&)\"},\n    {\"_Z13AnalyzeGlobalPKN4llvm5ValueERN12_GLOBAL__N_112GlobalStatusERNS_11SmallPtrSetIPKNS_7PHINodeELj16EEE\", \"AnalyzeGlobal(llvm::Value const*, (anonymous namespace)::GlobalStatus&, llvm::SmallPtrSet<llvm::PHINode const*, 16u>&)\"},\n    {\"_ZN12_GLOBAL__N_19GlobalOpt21ProcessInternalGlobalEPN4llvm14GlobalVariableERNS1_14ilist_iteratorIS2_EERKNS1_11SmallPtrSetIPKNS1_7PHINodeELj16EEERKNS_12GlobalStatusE\", \"(anonymous namespace)::GlobalOpt::ProcessInternalGlobal(llvm::GlobalVariable*, llvm::ilist_iterator<llvm::GlobalVariable>&, llvm::SmallPtrSet<llvm::PHINode const*, 16u> const&, (anonymous namespace)::GlobalStatus const&)\"},\n    {\"_Z26CleanupConstantGlobalUsersPN4llvm5ValueEPNS_8ConstantE\", \"CleanupConstantGlobalUsers(llvm::Value*, llvm::Constant*)\"},\n    {\"_Z41ValueIsOnlyUsedLocallyOrStoredToOneGlobalPKN4llvm11InstructionEPKNS_14GlobalVariableERNS_11SmallPtrSetIPKNS_7PHINodeELj8EEE\", \"ValueIsOnlyUsedLocallyOrStoredToOneGlobal(llvm::Instruction const*, llvm::GlobalVariable const*, llvm::SmallPtrSet<llvm::PHINode const*, 8u>&)\"},\n    {\"_Z29ReplaceUsesOfMallocWithGlobalPN4llvm11InstructionEPNS_14GlobalVariableE\", \"ReplaceUsesOfMallocWithGlobal(llvm::Instruction*, llvm::GlobalVariable*)\"},\n    {\"_Z16GetHeapSROAValuePN4llvm5ValueEjRNS_8DenseMapIS1_St6vectorIS1_SaIS1_EENS_12DenseMapInfoIS1_EENS6_IS5_EEEERS3_ISt4pairIPNS_7PHINodeEjESaISE_EE\", \"GetHeapSROAValue(llvm::Value*, unsigned int, llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >&, std::vector<std::pair<llvm::PHINode*, unsigned int>, std::allocator<std::pair<llvm::PHINode*, unsigned int> > >&)\"},\n    {\"_Z23RewriteHeapSROALoadUserPN4llvm11InstructionERNS_8DenseMapIPNS_5ValueESt6vectorIS4_SaIS4_EENS_12DenseMapInfoIS4_EENS8_IS7_EEEERS5_ISt4pairIPNS_7PHINodeEjESaISG_EE\", \"RewriteHeapSROALoadUser(llvm::Instruction*, llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >&, std::vector<std::pair<llvm::PHINode*, unsigned int>, std::allocator<std::pair<llvm::PHINode*, unsigned int> > >&)\"},\n    {\"_Z30LoadUsesSimpleEnoughForHeapSRAPKN4llvm5ValueERNS_11SmallPtrSetIPKNS_7PHINodeELj32EEES8_\", \"LoadUsesSimpleEnoughForHeapSRA(llvm::Value const*, llvm::SmallPtrSet<llvm::PHINode const*, 32u>&, llvm::SmallPtrSet<llvm::PHINode const*, 32u>&)\"},\n    {\"_Z19ConstantPropUsersOfPN4llvm5ValueE\", \"ConstantPropUsersOf(llvm::Value*)\"},\n    {\"_Z28AllUsesOfValueWillTrapIfNullPKN4llvm5ValueERNS_11SmallPtrSetIPKNS_7PHINodeELj8EEE\", \"AllUsesOfValueWillTrapIfNull(llvm::Value const*, llvm::SmallPtrSet<llvm::PHINode const*, 8u>&)\"},\n    {\"_Z31OptimizeAwayTrappingUsesOfValuePN4llvm5ValueEPNS_8ConstantE\", \"OptimizeAwayTrappingUsesOfValue(llvm::Value*, llvm::Constant*)\"},\n    {\"_Z27getAggregateConstantElementPN4llvm8ConstantES1_\", \"getAggregateConstantElement(llvm::Constant*, llvm::Constant*)\"},\n    {\"_Z20isSafeSROAElementUsePN4llvm5ValueE\", \"isSafeSROAElementUse(llvm::Value*)\"},\n    {\"_Z21SafeToDestroyConstantPKN4llvm8ConstantE\", \"SafeToDestroyConstant(llvm::Constant const*)\"},\n    {\"_Z16EvaluateFunctionPN4llvm8FunctionERPNS_8ConstantERKNS_15SmallVectorImplIS3_EERSt6vectorIS1_SaIS1_EERNS_8DenseMapIS3_S3_NS_12DenseMapInfoIS3_EESF_EERS9_IPNS_14GlobalVariableESaISJ_EERNS_11SmallPtrSetIS3_Lj8EEEPKNS_10DataLayoutE\", \"EvaluateFunction(llvm::Function*, llvm::Constant*&, llvm::SmallVectorImpl<llvm::Constant*> const&, std::vector<llvm::Function*, std::allocator<llvm::Function*> >&, llvm::DenseMap<llvm::Constant*, llvm::Constant*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::Constant*> >&, std::vector<llvm::GlobalVariable*, std::allocator<llvm::GlobalVariable*> >&, llvm::SmallPtrSet<llvm::Constant*, 8u>&, llvm::DataLayout const*)\"},\n    {\"_Z17EvaluateStoreIntoPN4llvm8ConstantES1_PNS_12ConstantExprEj\", \"EvaluateStoreInto(llvm::Constant*, llvm::Constant*, llvm::ConstantExpr*, unsigned int)\"},\n    {\"_Z33isSimpleEnoughValueToCommitHelperPN4llvm8ConstantERNS_11SmallPtrSetIS1_Lj8EEE\", \"isSimpleEnoughValueToCommitHelper(llvm::Constant*, llvm::SmallPtrSet<llvm::Constant*, 8u>&)\"},\n    {\"_Z9StripNestRKN4llvm11AttrListPtrE\", \"StripNest(llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_19GlobalOptEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::GlobalOpt>()\"},\n    {\"_ZNSt6vectorIPN4llvm5ValueESaIS2_EEaSERKS4_\", \"std::vector<llvm::Value*, std::allocator<llvm::Value*> >::operator=(std::vector<llvm::Value*, std::allocator<llvm::Value*> > const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm7PHINodeEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::PHINode*, unsigned int>, std::allocator<std::pair<llvm::PHINode*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PHINode*, unsigned int>*, std::vector<std::pair<llvm::PHINode*, unsigned int>, std::allocator<std::pair<llvm::PHINode*, unsigned int> > > >, std::pair<llvm::PHINode*, unsigned int> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm5ValueESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::Value*, std::allocator<llvm::Value*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, unsigned long, llvm::Value* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueESt6vectorIS2_SaIS2_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE6insertERKSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >::insert(std::pair<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> > > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueESt6vectorIS2_SaIS2_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >::InsertIntoBucket(llvm::Value* const&, std::vector<llvm::Value*, std::allocator<llvm::Value*> > const&, std::pair<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueESt6vectorIS2_SaIS2_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueESt6vectorIS2_SaIS2_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<std::vector<llvm::Value*, std::allocator<llvm::Value*> > > >::FindAndConstruct(llvm::Value* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm5ValueESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Value*, std::allocator<llvm::Value*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Value**, std::vector<llvm::Value*, std::allocator<llvm::Value*> > >, llvm::Value* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm14GlobalVariableESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::GlobalVariable*, std::allocator<llvm::GlobalVariable*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GlobalVariable**, std::vector<llvm::GlobalVariable*, std::allocator<llvm::GlobalVariable*> > >, llvm::GlobalVariable* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm8ConstantESaIS2_EE14_M_fill_assignEmRKS2_\", \"std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >::_M_fill_assign(unsigned long, llvm::Constant* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8ConstantES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::Constant*, llvm::Constant*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::Constant*> >::InsertIntoBucket(llvm::Constant* const&, llvm::Constant* const&, std::pair<llvm::Constant*, llvm::Constant*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8ConstantES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::Constant*, llvm::Constant*, llvm::DenseMapInfo<llvm::Constant*>, llvm::DenseMapInfo<llvm::Constant*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_8ConstantENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Value*, llvm::Constant*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Constant*> >::InsertIntoBucket(llvm::Value* const&, llvm::Constant* const&, std::pair<llvm::Value*, llvm::Constant*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_8ConstantENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, llvm::Constant*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Constant*> >::grow(unsigned int)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm8FunctionESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > >, llvm::Function*>(__gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > >, __gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > >, llvm::Function* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm8FunctionESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::Function*, std::allocator<llvm::Function*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > >, unsigned long, llvm::Function* const&)\"},\n    {\"_ZN4llvm27initializeAlwaysInlinerPassERNS_12PassRegistryE\", \"llvm::initializeAlwaysInlinerPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createAlwaysInlinerPassEv\", \"llvm::createAlwaysInlinerPass()\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInlinerD1Ev\", \"(anonymous namespace)::AlwaysInliner::~AlwaysInliner()\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInlinerD0Ev\", \"(anonymous namespace)::AlwaysInliner::~AlwaysInliner()\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner13releaseMemoryEv\", \"(anonymous namespace)::AlwaysInliner::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner16doInitializationERN4llvm9CallGraphE\", \"(anonymous namespace)::AlwaysInliner::doInitialization(llvm::CallGraph&)\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner14doFinalizationERN4llvm9CallGraphE\", \"(anonymous namespace)::AlwaysInliner::doFinalization(llvm::CallGraph&)\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner13getInlineCostEN4llvm8CallSiteE\", \"(anonymous namespace)::AlwaysInliner::getInlineCost(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner20getInlineFudgeFactorEN4llvm8CallSiteE\", \"(anonymous namespace)::AlwaysInliner::getInlineFudgeFactor(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner19resetCachedCostInfoEPN4llvm8FunctionE\", \"(anonymous namespace)::AlwaysInliner::resetCachedCostInfo(llvm::Function*)\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner18growCachedCostInfoEPN4llvm8FunctionES3_\", \"(anonymous namespace)::AlwaysInliner::growCachedCostInfo(llvm::Function*, llvm::Function*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113AlwaysInlinerEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::AlwaysInliner>()\"},\n    {\"_ZN4llvm18InlineCostAnalyzer19resetCachedCostInfoEPNS_8FunctionE\", \"llvm::InlineCostAnalyzer::resetCachedCostInfo(llvm::Function*)\"},\n    {\"_ZNSt6vectorIN4llvm18InlineCostAnalyzer7ArgInfoESaIS2_EEaSERKS4_\", \"std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> >::operator=(std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEjNS_12DenseMapInfoIS3_EENS4_IjEEE8CopyFromERKS7_\", \"llvm::DenseMap<llvm::BasicBlock const*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<unsigned int> >::CopyFrom(llvm::DenseMap<llvm::BasicBlock const*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<unsigned int> > const&)\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEED1Ev\", \"llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::~ValueMapCallbackVH()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEED0Ev\", \"llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::~ValueMapCallbackVH()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE7deletedEv\", \"llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::deleted()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE19allUsesReplacedWithEPNS_5ValueE\", \"llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4findERKSB_\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::find(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5eraseENS_16DenseMapIteratorISB_S6_SC_SA_Lb0EEE\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::erase(llvm::DenseMapIterator<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo>, false>)\"},\n    {\"_ZN4llvm8ValueMapIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::ValueMap<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::insert(std::pair<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E6insertERKSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::insert(std::pair<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo> const&)\"},\n    {\"_ZNSt4pairIN4llvm18ValueMapCallbackVHIPKNS0_8FunctionENS0_18InlineCostAnalyzer12FunctionInfoENS0_14ValueMapConfigIS4_EENS0_12DenseMapInfoIS6_EEEES6_EC2ERKSB_RKS6_\", \"std::pair<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo>::pair(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&, llvm::InlineCostAnalyzer::FunctionInfo const&)\"},\n    {\"_ZNK4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E15LookupBucketForERKSB_RPSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::LookupBucketFor(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&, std::pair<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo>*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E16InsertIntoBucketERKSB_RKS6_PSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::InsertIntoBucket(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&, llvm::InlineCostAnalyzer::FunctionInfo const&, std::pair<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo>*)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4growEj\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm18InlineCostAnalyzer7ArgInfoESaIS2_EEC2ERKS4_\", \"std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> >::vector(std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5eraseERKSB_\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::erase(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E16FindAndConstructERKSB_\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::FindAndConstruct(llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > const&)\"},\n    {\"_ZN4llvm7InlinerD1Ev\", \"llvm::Inliner::~Inliner()\"},\n    {\"_ZN4llvm7InlinerD0Ev\", \"llvm::Inliner::~Inliner()\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_ED2Ev\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::~DenseMap()\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4initEj\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::init(unsigned int)\"},\n    {\"_ZN4llvm27initializeSimpleInlinerPassERNS_12PassRegistryE\", \"llvm::initializeSimpleInlinerPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm26createFunctionInliningPassEv\", \"llvm::createFunctionInliningPass()\"},\n    {\"_ZN4llvm26createFunctionInliningPassEi\", \"llvm::createFunctionInliningPass(int)\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInlinerD1Ev\", \"(anonymous namespace)::SimpleInliner::~SimpleInliner()\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInlinerD0Ev\", \"(anonymous namespace)::SimpleInliner::~SimpleInliner()\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner13releaseMemoryEv\", \"(anonymous namespace)::SimpleInliner::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner16doInitializationERN4llvm9CallGraphE\", \"(anonymous namespace)::SimpleInliner::doInitialization(llvm::CallGraph&)\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner13getInlineCostEN4llvm8CallSiteE\", \"(anonymous namespace)::SimpleInliner::getInlineCost(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner20getInlineFudgeFactorEN4llvm8CallSiteE\", \"(anonymous namespace)::SimpleInliner::getInlineFudgeFactor(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner19resetCachedCostInfoEPN4llvm8FunctionE\", \"(anonymous namespace)::SimpleInliner::resetCachedCostInfo(llvm::Function*)\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner18growCachedCostInfoEPN4llvm8FunctionES3_\", \"(anonymous namespace)::SimpleInliner::growCachedCostInfo(llvm::Function*, llvm::Function*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113SimpleInlinerEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::SimpleInliner>()\"},\n    {\"_ZN4llvm7InlinerC1ERc\", \"llvm::Inliner::Inliner(char&)\"},\n    {\"_ZN4llvm7InlinerC2ERc\", \"llvm::Inliner::Inliner(char&)\"},\n    {\"_ZN4llvm7InlinerC1ERci\", \"llvm::Inliner::Inliner(char&, int)\"},\n    {\"_ZN4llvm7InlinerC2ERci\", \"llvm::Inliner::Inliner(char&, int)\"},\n    {\"_ZNK4llvm7Inliner16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::Inliner::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm7Inliner18getInlineThresholdENS_8CallSiteE\", \"llvm::Inliner::getInlineThreshold(llvm::CallSite) const\"},\n    {\"_ZN4llvm7Inliner12shouldInlineENS_8CallSiteE\", \"llvm::Inliner::shouldInline(llvm::CallSite)\"},\n    {\"_ZN4llvm7Inliner8runOnSCCERNS_12CallGraphSCCE\", \"llvm::Inliner::runOnSCC(llvm::CallGraphSCC&)\"},\n    {\"_ZN4llvm7Inliner14doFinalizationERNS_9CallGraphE\", \"llvm::Inliner::doFinalization(llvm::CallGraph&)\"},\n    {\"_ZN4llvm7Inliner19removeDeadFunctionsERNS_9CallGraphEPNS_11SmallPtrSetIPKNS_8FunctionELj16EEE\", \"llvm::Inliner::removeDeadFunctions(llvm::CallGraph&, llvm::SmallPtrSet<llvm::Function const*, 16u>*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairINS_8CallSiteEiELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::CallSite, int>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9ArrayTypeESt6vectorIPNS_10AllocaInstESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::ArrayType const*, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> >, llvm::DenseMapInfo<llvm::ArrayType const*>, llvm::DenseMapInfo<std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > > >::FindAndConstruct(llvm::ArrayType const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9ArrayTypeESt6vectorIPNS_10AllocaInstESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16InsertIntoBucketERKS3_RKS8_PSt4pairIS3_S8_E\", \"llvm::DenseMap<llvm::ArrayType const*, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> >, llvm::DenseMapInfo<llvm::ArrayType const*>, llvm::DenseMapInfo<std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > > >::InsertIntoBucket(llvm::ArrayType const* const&, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > const&, std::pair<llvm::ArrayType const*, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9ArrayTypeESt6vectorIPNS_10AllocaInstESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<llvm::ArrayType const*, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> >, llvm::DenseMapInfo<llvm::ArrayType const*>, llvm::DenseMapInfo<std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm21initializePruneEHPassERNS_12PassRegistryE\", \"llvm::initializePruneEHPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm17createPruneEHPassEv\", \"llvm::createPruneEHPass()\"},\n    {\"_ZN12_GLOBAL__N_17PruneEHD1Ev\", \"(anonymous namespace)::PruneEH::~PruneEH()\"},\n    {\"_ZN12_GLOBAL__N_17PruneEHD0Ev\", \"(anonymous namespace)::PruneEH::~PruneEH()\"},\n    {\"_ZN12_GLOBAL__N_17PruneEH8runOnSCCERN4llvm12CallGraphSCCE\", \"(anonymous namespace)::PruneEH::runOnSCC(llvm::CallGraphSCC&)\"},\n    {\"_ZN12_GLOBAL__N_17PruneEH16SimplifyFunctionEPN4llvm8FunctionE\", \"(anonymous namespace)::PruneEH::SimplifyFunction(llvm::Function*)\"},\n    {\"_ZN12_GLOBAL__N_17PruneEH16DeleteBasicBlockEPN4llvm10BasicBlockE\", \"(anonymous namespace)::PruneEH::DeleteBasicBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_17PruneEHEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PruneEH>()\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE22_M_initialize_dispatchINS0_12SuccIteratorIPNS0_14TerminatorInstES1_EEEEvT_SA_St12__false_type\", \"void std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_initialize_dispatch<llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >(llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock>, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock>, std::__false_type)\"},\n    {\"_ZN4llvm37initializeStripDeadPrototypesPassPassERNS_12PassRegistryE\", \"llvm::initializeStripDeadPrototypesPassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm29createStripDeadPrototypesPassEv\", \"llvm::createStripDeadPrototypesPass()\"},\n    {\"_ZN12_GLOBAL__N_123StripDeadPrototypesPassD1Ev\", \"(anonymous namespace)::StripDeadPrototypesPass::~StripDeadPrototypesPass()\"},\n    {\"_ZN12_GLOBAL__N_123StripDeadPrototypesPassD0Ev\", \"(anonymous namespace)::StripDeadPrototypesPass::~StripDeadPrototypesPass()\"},\n    {\"_ZN12_GLOBAL__N_123StripDeadPrototypesPass11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::StripDeadPrototypesPass::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_123StripDeadPrototypesPassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::StripDeadPrototypesPass>()\"},\n    {\"_ZN4llvm18WriteBitcodeToFileEPKNS_6ModuleERNS_11raw_ostreamE\", \"llvm::WriteBitcodeToFile(llvm::Module const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm20WriteBitcodeToStreamEPKNS_6ModuleERNS_15BitstreamWriterE\", \"llvm::WriteBitcodeToStream(llvm::Module const*, llvm::BitstreamWriter&)\"},\n    {\"_Z11WriteModulePKN4llvm6ModuleERNS_15BitstreamWriterE\", \"WriteModule(llvm::Module const*, llvm::BitstreamWriter&)\"},\n    {\"_Z13WriteFunctionRKN4llvm8FunctionERNS_15ValueEnumeratorERNS_15BitstreamWriterE\", \"WriteFunction(llvm::Function const&, llvm::ValueEnumerator&, llvm::BitstreamWriter&)\"},\n    {\"_Z21WriteValueSymbolTableRKN4llvm16ValueSymbolTableERKNS_15ValueEnumeratorERNS_15BitstreamWriterE\", \"WriteValueSymbolTable(llvm::ValueSymbolTable const&, llvm::ValueEnumerator const&, llvm::BitstreamWriter&)\"},\n    {\"_Z14WriteConstantsjjRKN4llvm15ValueEnumeratorERNS_15BitstreamWriterEb\", \"WriteConstants(unsigned int, unsigned int, llvm::ValueEnumerator const&, llvm::BitstreamWriter&, bool)\"},\n    {\"_Z20GetOptimizationFlagsPKN4llvm5ValueE\", \"GetOptimizationFlags(llvm::Value const*)\"},\n    {\"_Z11WriteMDNodePKN4llvm6MDNodeERKNS_15ValueEnumeratorERNS_15BitstreamWriterERNS_11SmallVectorIyLj64EEE\", \"WriteMDNode(llvm::MDNode const*, llvm::ValueEnumerator const&, llvm::BitstreamWriter&, llvm::SmallVector<unsigned long long, 64u>&)\"},\n    {\"_Z17WriteStringRecordjRKSsjRN4llvm15BitstreamWriterE\", \"WriteStringRecord(unsigned int, std::string const&, unsigned int, llvm::BitstreamWriter&)\"},\n    {\"_ZN4llvm15ValueEnumeratorD2Ev\", \"llvm::ValueEnumerator::~ValueEnumerator()\"},\n    {\"_ZN4llvm15BitstreamWriter10EmitRecordIjEEvjRNS_15SmallVectorImplIT_EEj\", \"void llvm::BitstreamWriter::EmitRecord<unsigned int>(unsigned int, llvm::SmallVectorImpl<unsigned int>&, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIjE6insertEPjRKj\", \"llvm::SmallVectorImpl<unsigned int>::insert(unsigned int*, unsigned int const&)\"},\n    {\"_ZN4llvm15BitstreamWriter24EmitRecordWithAbbrevImplIjEEvjRNS_15SmallVectorImplIT_EENS_9StringRefE\", \"void llvm::BitstreamWriter::EmitRecordWithAbbrevImpl<unsigned int>(unsigned int, llvm::SmallVectorImpl<unsigned int>&, llvm::StringRef)\"},\n    {\"_ZN4llvm15BitstreamWriter20EmitAbbreviatedFieldIjEEvRKNS_15BitCodeAbbrevOpET_\", \"void llvm::BitstreamWriter::EmitAbbreviatedField<unsigned int>(llvm::BitCodeAbbrevOp const&, unsigned int)\"},\n    {\"_ZN4llvm15BitstreamWriter19EmitBlockInfoAbbrevEjPNS_13BitCodeAbbrevE\", \"llvm::BitstreamWriter::EmitBlockInfoAbbrev(unsigned int, llvm::BitCodeAbbrev*)\"},\n    {\"_ZN4llvm15BitstreamWriter15SwitchToBlockIDEj\", \"llvm::BitstreamWriter::SwitchToBlockID(unsigned int)\"},\n    {\"_ZN4llvm15BitstreamWriter20getOrCreateBlockInfoEj\", \"llvm::BitstreamWriter::getOrCreateBlockInfo(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm15BitstreamWriter9BlockInfoESaIS2_EE9push_backERKS2_\", \"std::vector<llvm::BitstreamWriter::BlockInfo, std::allocator<llvm::BitstreamWriter::BlockInfo> >::push_back(llvm::BitstreamWriter::BlockInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm15BitstreamWriter9BlockInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BitstreamWriter::BlockInfo, std::allocator<llvm::BitstreamWriter::BlockInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BitstreamWriter::BlockInfo*, std::vector<llvm::BitstreamWriter::BlockInfo, std::allocator<llvm::BitstreamWriter::BlockInfo> > >, llvm::BitstreamWriter::BlockInfo const&)\"},\n    {\"_ZN4llvm23createBitcodeWriterPassERNS_11raw_ostreamE\", \"llvm::createBitcodeWriterPass(llvm::raw_ostream&)\"},\n    {\"_ZN12_GLOBAL__N_116WriteBitcodePassD1Ev\", \"(anonymous namespace)::WriteBitcodePass::~WriteBitcodePass()\"},\n    {\"_ZN12_GLOBAL__N_116WriteBitcodePassD0Ev\", \"(anonymous namespace)::WriteBitcodePass::~WriteBitcodePass()\"},\n    {\"_ZNK12_GLOBAL__N_116WriteBitcodePass11getPassNameEv\", \"(anonymous namespace)::WriteBitcodePass::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_116WriteBitcodePass11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::WriteBitcodePass::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm15ValueEnumeratorC1EPKNS_6ModuleE\", \"llvm::ValueEnumerator::ValueEnumerator(llvm::Module const*)\"},\n    {\"_ZN4llvm15ValueEnumeratorC2EPKNS_6ModuleE\", \"llvm::ValueEnumerator::ValueEnumerator(llvm::Module const*)\"},\n    {\"_ZN4llvm15ValueEnumerator14EnumerateValueEPKNS_5ValueE\", \"llvm::ValueEnumerator::EnumerateValue(llvm::Value const*)\"},\n    {\"_ZN4llvm15ValueEnumerator19EnumerateAttributesERKNS_11AttrListPtrE\", \"llvm::ValueEnumerator::EnumerateAttributes(llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm15ValueEnumerator24EnumerateTypeSymbolTableERKNS_15TypeSymbolTableE\", \"llvm::ValueEnumerator::EnumerateTypeSymbolTable(llvm::TypeSymbolTable const&)\"},\n    {\"_ZN4llvm15ValueEnumerator25EnumerateValueSymbolTableERKNS_16ValueSymbolTableE\", \"llvm::ValueEnumerator::EnumerateValueSymbolTable(llvm::ValueSymbolTable const&)\"},\n    {\"_ZN4llvm15ValueEnumerator22EnumerateNamedMetadataEPKNS_6ModuleE\", \"llvm::ValueEnumerator::EnumerateNamedMetadata(llvm::Module const*)\"},\n    {\"_ZN4llvm15ValueEnumerator13EnumerateTypeEPKNS_4TypeE\", \"llvm::ValueEnumerator::EnumerateType(llvm::Type const*)\"},\n    {\"_ZN4llvm15ValueEnumerator20EnumerateOperandTypeEPKNS_5ValueE\", \"llvm::ValueEnumerator::EnumerateOperandType(llvm::Value const*)\"},\n    {\"_ZN4llvm15ValueEnumerator17EnumerateMetadataEPKNS_5ValueE\", \"llvm::ValueEnumerator::EnumerateMetadata(llvm::Value const*)\"},\n    {\"_ZN4llvm15ValueEnumerator17OptimizeConstantsEjj\", \"llvm::ValueEnumerator::OptimizeConstants(unsigned int, unsigned int)\"},\n    {\"_Z18CompareByFrequencyRKSt4pairIPKN4llvm4TypeEjES6_\", \"CompareByFrequency(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)\"},\n    {\"_ZNK4llvm15ValueEnumerator16getInstructionIDEPKNS_11InstructionE\", \"llvm::ValueEnumerator::getInstructionID(llvm::Instruction const*) const\"},\n    {\"_ZN4llvm15ValueEnumerator16setInstructionIDEPKNS_11InstructionE\", \"llvm::ValueEnumerator::setInstructionID(llvm::Instruction const*)\"},\n    {\"_ZNK4llvm15ValueEnumerator10getValueIDEPKNS_5ValueE\", \"llvm::ValueEnumerator::getValueID(llvm::Value const*) const\"},\n    {\"_ZN4llvm15ValueEnumerator20EnumerateNamedMDNodeEPKNS_11NamedMDNodeE\", \"llvm::ValueEnumerator::EnumerateNamedMDNode(llvm::NamedMDNode const*)\"},\n    {\"_ZN4llvm15ValueEnumerator23EnumerateMDNodeOperandsEPKNS_6MDNodeE\", \"llvm::ValueEnumerator::EnumerateMDNodeOperands(llvm::MDNode const*)\"},\n    {\"_ZN4llvm15ValueEnumerator30EnumerateFunctionLocalMetadataEPKNS_6MDNodeE\", \"llvm::ValueEnumerator::EnumerateFunctionLocalMetadata(llvm::MDNode const*)\"},\n    {\"_ZN4llvm15ValueEnumerator19incorporateFunctionERKNS_8FunctionE\", \"llvm::ValueEnumerator::incorporateFunction(llvm::Function const&)\"},\n    {\"_ZN4llvm15ValueEnumerator13purgeFunctionEv\", \"llvm::ValueEnumerator::purgeFunction()\"},\n    {\"_ZNK4llvm15ValueEnumerator21getGlobalBasicBlockIDEPKNS_10BasicBlockE\", \"llvm::ValueEnumerator::getGlobalBasicBlockID(llvm::BasicBlock const*) const\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEEN12_GLOBAL__N_116CstSortPredicateEEvT_SF_T0_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEES8_lN12_GLOBAL__N_116CstSortPredicateEEvT_SF_T0_T1_T2_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, long, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, long, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEES8_N12_GLOBAL__N_116CstSortPredicateEEvT_SF_T0_T1_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEElS8_N12_GLOBAL__N_116CstSortPredicateEEvT_SF_SF_T0_SG_T1_SG_T2_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, long, std::pair<llvm::Value const*, unsigned int>*, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, long, long, std::pair<llvm::Value const*, unsigned int>*, long, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZN12_GLOBAL__N_116CstSortPredicateclERKSt4pairIPKN4llvm5ValueEjES8_\", \"(anonymous namespace)::CstSortPredicate::operator()(std::pair<llvm::Value const*, unsigned int> const&, std::pair<llvm::Value const*, unsigned int> const&)\"},\n    {\"_ZSt5mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEESC_S8_N12_GLOBAL__N_116CstSortPredicateEET1_T_SG_T0_SH_SF_T2_\", \"std::pair<llvm::Value const*, unsigned int>* std::merge<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEEN12_GLOBAL__N_116CstSortPredicateEEvT_SF_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEElN12_GLOBAL__N_116CstSortPredicateEEvT_SF_SF_T0_SG_T1_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, long, (anonymous namespace)::CstSortPredicate>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, long, long, (anonymous namespace)::CstSortPredicate)\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm5ValueEjESaIS5_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS5_S7_EEmRKS5_\", \"std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, unsigned long, std::pair<llvm::Value const*, unsigned int> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm4TypeEjESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm5ValueEjESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int> const&)\"},\n    {\"_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEES8_lET_SD_SD_SD_T1_SE_T0_SE_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > > std::__rotate_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::pair<llvm::Value const*, unsigned int>*, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, long, long, std::pair<llvm::Value const*, unsigned int>*, long)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm5ValueEjESt6vectorIS7_SaIS7_EEEEEvT_SD_SD_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Value const*, unsigned int>*, std::vector<std::pair<llvm::Value const*, unsigned int>, std::allocator<std::pair<llvm::Value const*, unsigned int> > > >, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::Type const*, unsigned int, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Type const* const&, unsigned int const&, std::pair<llvm::Type const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::Type const*, unsigned int, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEEPFbRKS7_SE_EEvT_SH_T0_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEES8_lPFbRKS7_SE_EEvT_SH_T0_T1_T2_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEES8_PFbRKS7_SE_EEvT_SH_T0_T1_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEElS8_PFbRKS7_SE_EEvT_SH_SH_T0_SI_T1_SI_T2_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, std::pair<llvm::Type const*, unsigned int>*, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, long, std::pair<llvm::Type const*, unsigned int>*, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt16__merge_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEES8_SC_PFbRKS7_SE_EET1_T_SI_T0_SJ_SH_T2_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > > std::__merge_backward<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, std::pair<llvm::Type const*, unsigned int>*, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEES8_lET_SD_SD_SD_T1_SE_T0_SE_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > > std::__rotate_adaptive<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, long, std::pair<llvm::Type const*, unsigned int>*, long)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEEEvT_SD_SD_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::random_access_iterator_tag)\"},\n    {\"_ZSt17__merge_sort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEES8_lPFbRKS7_SE_EEvT_SH_T0_T1_T2_\", \"void std::__merge_sort_loop<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, std::pair<llvm::Type const*, unsigned int>*, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt17__merge_sort_loopIPSt4pairIPKN4llvm4TypeEjEN9__gnu_cxx17__normal_iteratorIS6_St6vectorIS5_SaIS5_EEEElPFbRKS5_SE_EEvT_SH_T0_T1_T2_\", \"void std::__merge_sort_loop<std::pair<llvm::Type const*, unsigned int>*, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(std::pair<llvm::Type const*, unsigned int>*, std::pair<llvm::Type const*, unsigned int>*, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEEPFbRKS7_SE_EEvT_SH_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIPKN4llvm4TypeEjESt6vectorIS7_SaIS7_EEEElPFbRKS7_SE_EEvT_SH_SH_T0_SI_T1_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&)>(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, unsigned int>*, std::vector<std::pair<llvm::Type const*, unsigned int>, std::allocator<std::pair<llvm::Type const*, unsigned int> > > >, long, long, bool (*)(std::pair<llvm::Type const*, unsigned int> const&, std::pair<llvm::Type const*, unsigned int> const&))\"},\n    {\"_ZN4llvm13BitcodeReader9FreeStateEv\", \"llvm::BitcodeReader::FreeState()\"},\n    {\"_ZN4llvm22BitcodeReaderValueList11AssignValueEPNS_5ValueEj\", \"llvm::BitcodeReaderValueList::AssignValue(llvm::Value*, unsigned int)\"},\n    {\"_ZN4llvm22BitcodeReaderValueList17getConstantFwdRefEjPKNS_4TypeE\", \"llvm::BitcodeReaderValueList::getConstantFwdRef(unsigned int, llvm::Type const*)\"},\n    {\"_ZN4llvm22BitcodeReaderValueList14getValueFwdRefEjPKNS_4TypeE\", \"llvm::BitcodeReaderValueList::getValueFwdRef(unsigned int, llvm::Type const*)\"},\n    {\"_ZN4llvm22BitcodeReaderValueList26ResolveConstantForwardRefsEv\", \"llvm::BitcodeReaderValueList::ResolveConstantForwardRefs()\"},\n    {\"_ZN4llvm24BitcodeReaderMDValueList11AssignValueEPNS_5ValueEj\", \"llvm::BitcodeReaderMDValueList::AssignValue(llvm::Value*, unsigned int)\"},\n    {\"_ZN4llvm24BitcodeReaderMDValueList14getValueFwdRefEj\", \"llvm::BitcodeReaderMDValueList::getValueFwdRef(unsigned int)\"},\n    {\"_ZN4llvm13BitcodeReader11getTypeByIDEjb\", \"llvm::BitcodeReader::getTypeByID(unsigned int, bool)\"},\n    {\"_ZN4llvm13BitcodeReader19ParseAttributeBlockEv\", \"llvm::BitcodeReader::ParseAttributeBlock()\"},\n    {\"_ZN4llvm13BitcodeReader14ParseTypeTableEv\", \"llvm::BitcodeReader::ParseTypeTable()\"},\n    {\"_ZN4llvm13BitcodeReader20ParseTypeSymbolTableEv\", \"llvm::BitcodeReader::ParseTypeSymbolTable()\"},\n    {\"_ZN4llvm13BitcodeReader21ParseValueSymbolTableEv\", \"llvm::BitcodeReader::ParseValueSymbolTable()\"},\n    {\"_ZN4llvm13BitcodeReader13ParseMetadataEv\", \"llvm::BitcodeReader::ParseMetadata()\"},\n    {\"_ZN4llvm13BitcodeReader26ResolveGlobalAndAliasInitsEv\", \"llvm::BitcodeReader::ResolveGlobalAndAliasInits()\"},\n    {\"_ZN4llvm13BitcodeReader14ParseConstantsEv\", \"llvm::BitcodeReader::ParseConstants()\"},\n    {\"_Z22GetDecodedBinaryOpcodejPKN4llvm4TypeE\", \"GetDecodedBinaryOpcode(unsigned int, llvm::Type const*)\"},\n    {\"_ZN4llvm13BitcodeReader27RememberAndSkipFunctionBodyEv\", \"llvm::BitcodeReader::RememberAndSkipFunctionBody()\"},\n    {\"_ZN4llvm13BitcodeReader11ParseModuleEv\", \"llvm::BitcodeReader::ParseModule()\"},\n    {\"_ZN4llvm13BitcodeReader16ParseBitcodeIntoEPNS_6ModuleE\", \"llvm::BitcodeReader::ParseBitcodeInto(llvm::Module*)\"},\n    {\"_ZN4llvm13BitcodeReader17ParseModuleTripleERSs\", \"llvm::BitcodeReader::ParseModuleTriple(std::string&)\"},\n    {\"_ZN4llvm13BitcodeReader11ParseTripleERSs\", \"llvm::BitcodeReader::ParseTriple(std::string&)\"},\n    {\"_ZN4llvm13BitcodeReader23ParseMetadataAttachmentEv\", \"llvm::BitcodeReader::ParseMetadataAttachment()\"},\n    {\"_ZN4llvm13BitcodeReader17ParseFunctionBodyEPNS_8FunctionE\", \"llvm::BitcodeReader::ParseFunctionBody(llvm::Function*)\"},\n    {\"_ZNK4llvm13BitcodeReader16isMaterializableEPKNS_11GlobalValueE\", \"llvm::BitcodeReader::isMaterializable(llvm::GlobalValue const*) const\"},\n    {\"_ZN4llvm13BitcodeReader11MaterializeEPNS_11GlobalValueEPSs\", \"llvm::BitcodeReader::Materialize(llvm::GlobalValue*, std::string*)\"},\n    {\"_ZNK4llvm13BitcodeReader18isDematerializableEPKNS_11GlobalValueE\", \"llvm::BitcodeReader::isDematerializable(llvm::GlobalValue const*) const\"},\n    {\"_ZN4llvm13BitcodeReader13DematerializeEPNS_11GlobalValueE\", \"llvm::BitcodeReader::Dematerialize(llvm::GlobalValue*)\"},\n    {\"_ZN4llvm13BitcodeReader17MaterializeModuleEPNS_6ModuleEPSs\", \"llvm::BitcodeReader::MaterializeModule(llvm::Module*, std::string*)\"},\n    {\"_ZN4llvm20getLazyBitcodeModuleEPNS_12MemoryBufferERNS_11LLVMContextEPSs\", \"llvm::getLazyBitcodeModule(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*)\"},\n    {\"_ZN4llvm16ParseBitcodeFileEPNS_12MemoryBufferERNS_11LLVMContextEPSs\", \"llvm::ParseBitcodeFile(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*)\"},\n    {\"_ZN4llvm22getBitcodeTargetTripleEPNS_12MemoryBufferERNS_11LLVMContextEPSs\", \"llvm::getBitcodeTargetTriple(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*)\"},\n    {\"_ZN4llvm12_GLOBAL__N_119ConstantPlaceHolderD1Ev\", \"llvm::(anonymous namespace)::ConstantPlaceHolder::~ConstantPlaceHolder()\"},\n    {\"_ZN4llvm12_GLOBAL__N_119ConstantPlaceHolderD0Ev\", \"llvm::(anonymous namespace)::ConstantPlaceHolder::~ConstantPlaceHolder()\"},\n    {\"_ZN4llvm22BitcodeReaderValueList9push_backEPNS_5ValueE\", \"llvm::BitcodeReaderValueList::push_back(llvm::Value*)\"},\n    {\"_ZN4llvm22BitcodeReaderValueList6resizeEj\", \"llvm::BitcodeReaderValueList::resize(unsigned int)\"},\n    {\"_ZN4llvm24BitcodeReaderMDValueList9push_backEPNS_5ValueE\", \"llvm::BitcodeReaderMDValueList::push_back(llvm::Value*)\"},\n    {\"_ZN4llvm24BitcodeReaderMDValueList6resizeEj\", \"llvm::BitcodeReaderMDValueList::resize(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm12PATypeHolderESaIS1_EE7reserveEm\", \"std::vector<llvm::PATypeHolder, std::allocator<llvm::PATypeHolder> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm15SmallVectorImplIyE6resizeEj\", \"llvm::SmallVectorImpl<unsigned long long>::resize(unsigned int)\"},\n    {\"_ZN4llvm22BitcodeReaderValueList8shrinkToEj\", \"llvm::BitcodeReaderValueList::shrinkTo(unsigned int)\"},\n    {\"_ZN4llvm13BitcodeReader16getValueTypePairERNS_11SmallVectorIyLj64EEERjjRPNS_5ValueE\", \"llvm::BitcodeReader::getValueTypePair(llvm::SmallVector<unsigned long long, 64u>&, unsigned int&, unsigned int, llvm::Value*&)\"},\n    {\"_ZN4llvm24BitcodeReaderMDValueList8shrinkToEj\", \"llvm::BitcodeReaderMDValueList::shrinkTo(unsigned int)\"},\n    {\"_ZN4llvm13BitcodeReaderD1Ev\", \"llvm::BitcodeReader::~BitcodeReader()\"},\n    {\"_ZN4llvm13BitcodeReaderD0Ev\", \"llvm::BitcodeReader::~BitcodeReader()\"},\n    {\"_ZN4llvm10InvokeInstC2IPPNS_5ValueEEES3_PNS_10BasicBlockES6_T_S7_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::InvokeInst::InvokeInst<llvm::Value**>(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value**, llvm::Value**, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15InsertValueInstC2IPjEEPNS_5ValueES4_T_S5_RKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertValueInst::InsertValueInst<unsigned int*>(llvm::Value*, llvm::Value*, unsigned int*, unsigned int*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, unsigned long, llvm::BasicBlock* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm8FunctionESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Function*, std::allocator<llvm::Function*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Function**, std::vector<llvm::Function*, std::allocator<llvm::Function*> > >, llvm::Function* const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm8FunctionES3_ESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::Function*, llvm::Function*>, std::allocator<std::pair<llvm::Function*, llvm::Function*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Function*, llvm::Function*>*, std::vector<std::pair<llvm::Function*, llvm::Function*>, std::allocator<std::pair<llvm::Function*, llvm::Function*> > > >, std::pair<llvm::Function*, llvm::Function*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionEyNS_12DenseMapInfoIS2_EENS3_IyEEE16InsertIntoBucketERKS2_RKyPSt4pairIS2_yE\", \"llvm::DenseMap<llvm::Function*, unsigned long long, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(llvm::Function* const&, unsigned long long const&, std::pair<llvm::Function*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionEyNS_12DenseMapInfoIS2_EENS3_IyEEE4growEj\", \"llvm::DenseMap<llvm::Function*, unsigned long long, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIjPN4llvm14GlobalVariableEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::GlobalVariable*>*, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > >, std::pair<unsigned int, llvm::GlobalVariable*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionESt6vectorISt4pairIjPNS_14GlobalVariableEESaIS7_EENS_12DenseMapInfoIS2_EENSA_IS9_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Function*, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > >, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > > >::FindAndConstruct(llvm::Function* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionESt6vectorISt4pairIjPNS_14GlobalVariableEESaIS7_EENS_12DenseMapInfoIS2_EENSA_IS9_EEE16InsertIntoBucketERKS2_RKS9_PS4_IS2_S9_E\", \"llvm::DenseMap<llvm::Function*, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > >, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > > >::InsertIntoBucket(llvm::Function* const&, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > const&, std::pair<llvm::Function*, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionESt6vectorISt4pairIjPNS_14GlobalVariableEESaIS7_EENS_12DenseMapInfoIS2_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<llvm::Function*, std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > >, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIjPN4llvm14GlobalVariableEESaIS4_EEC2ERKS6_\", \"std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > >::vector(std::vector<std::pair<unsigned int, llvm::GlobalVariable*>, std::allocator<std::pair<unsigned int, llvm::GlobalVariable*> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm11GlobalAliasEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::GlobalAlias*, unsigned int>, std::allocator<std::pair<llvm::GlobalAlias*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::GlobalAlias*, unsigned int>*, std::vector<std::pair<llvm::GlobalAlias*, unsigned int>, std::allocator<std::pair<llvm::GlobalAlias*, unsigned int> > > >, std::pair<llvm::GlobalAlias*, unsigned int> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm14GlobalVariableEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::GlobalVariable*, unsigned int>, std::allocator<std::pair<llvm::GlobalVariable*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::GlobalVariable*, unsigned int>*, std::vector<std::pair<llvm::GlobalVariable*, unsigned int>, std::allocator<std::pair<llvm::GlobalVariable*, unsigned int> > > >, std::pair<llvm::GlobalVariable*, unsigned int> const&)\"},\n    {\"_ZNSt6vectorIN4llvm11AttrListPtrESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::AttrListPtr, std::allocator<llvm::AttrListPtr> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AttrListPtr*, std::vector<llvm::AttrListPtr, std::allocator<llvm::AttrListPtr> > >, llvm::AttrListPtr const&)\"},\n    {\"_ZNSt6vectorIN4llvm12PATypeHolderESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::PATypeHolder, std::allocator<llvm::PATypeHolder> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::PATypeHolder*, std::vector<llvm::PATypeHolder, std::allocator<llvm::PATypeHolder> > >, llvm::PATypeHolder const&)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIPN4llvm8ConstantEjESt6vectorIS6_SaIS6_EEEElEvT_SC_T0_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, long)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPN4llvm8ConstantEjESt6vectorIS6_SaIS6_EEEEEvT_SC_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIPN4llvm8ConstantEjESt6vectorIS6_SaIS6_EEEEEvT_SC_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPSt4pairIPN4llvm8ConstantEjESt6vectorIS6_SaIS6_EEEEEvT_SC_SC_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIPN4llvm8ConstantEjESt6vectorIS6_SaIS6_EEEElS6_EvT_T0_SD_T1_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, long, std::pair<llvm::Constant*, unsigned int> >(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, long, long, std::pair<llvm::Constant*, unsigned int>)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm8ConstantEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Constant*, unsigned int>*, std::vector<std::pair<llvm::Constant*, unsigned int>, std::allocator<std::pair<llvm::Constant*, unsigned int> > > >, std::pair<llvm::Constant*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIjjNS_12DenseMapInfoIjEES2_E16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_8FunctionEyNS_12DenseMapInfoIS2_EENS3_IyEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Function*, unsigned long long, llvm::DenseMapInfo<llvm::Function*>, llvm::DenseMapInfo<unsigned long long> >::shrink_and_clear()\"},\n    {\"_ZN4llvm13BitcodeReaderD2Ev\", \"llvm::BitcodeReader::~BitcodeReader()\"},\n    {\"_ZN4llvm13BitcodeReaderC2EPNS_12MemoryBufferERNS_11LLVMContextE\", \"llvm::BitcodeReader::BitcodeReader(llvm::MemoryBuffer*, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm14GVMaterializer13DematerializeEPNS_11GlobalValueE\", \"llvm::GVMaterializer::Dematerialize(llvm::GlobalValue*)\"},\n    {\"_ZNSt6vectorIN4llvm6WeakVHESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<llvm::WeakVH, std::allocator<llvm::WeakVH> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::WeakVH*, std::vector<llvm::WeakVH, std::allocator<llvm::WeakVH> > >, unsigned long, llvm::WeakVH const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm6WeakVHES5_EET0_T_S7_S6_\", \"llvm::WeakVH* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::WeakVH*, llvm::WeakVH*>(llvm::WeakVH*, llvm::WeakVH*, llvm::WeakVH*)\"},\n    {\"_ZNSt6vectorIN4llvm6WeakVHESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::WeakVH, std::allocator<llvm::WeakVH> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::WeakVH*, std::vector<llvm::WeakVH, std::allocator<llvm::WeakVH> > >, llvm::WeakVH const&)\"},\n    {\"_ZNK4llvm7LLLexer5ErrorENS_5SMLocERKNS_5TwineE\", \"llvm::LLLexer::Error(llvm::SMLoc, llvm::Twine const&) const\"},\n    {\"_ZN4llvm7LLLexer6atoullEPKcS2_\", \"llvm::LLLexer::atoull(char const*, char const*)\"},\n    {\"_ZN4llvm7LLLexer11HexIntToValEPKcS2_\", \"llvm::LLLexer::HexIntToVal(char const*, char const*)\"},\n    {\"_ZN4llvm7LLLexer12HexToIntPairEPKcS2_Py\", \"llvm::LLLexer::HexToIntPair(char const*, char const*, unsigned long long*)\"},\n    {\"_ZN4llvm7LLLexer16FP80HexToIntPairEPKcS2_Py\", \"llvm::LLLexer::FP80HexToIntPair(char const*, char const*, unsigned long long*)\"},\n    {\"_ZN4llvm7LLLexerC1EPNS_12MemoryBufferERNS_9SourceMgrERNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::LLLexer::LLLexer(llvm::MemoryBuffer*, llvm::SourceMgr&, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm7LLLexerC2EPNS_12MemoryBufferERNS_9SourceMgrERNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::LLLexer::LLLexer(llvm::MemoryBuffer*, llvm::SourceMgr&, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZNK4llvm7LLLexer11getFilenameEv\", \"llvm::LLLexer::getFilename() const\"},\n    {\"_ZN4llvm7LLLexer11getNextCharEv\", \"llvm::LLLexer::getNextChar()\"},\n    {\"_ZN4llvm7LLLexer8LexTokenEv\", \"llvm::LLLexer::LexToken()\"},\n    {\"_ZN4llvm7LLLexer13LexIdentifierEv\", \"llvm::LLLexer::LexIdentifier()\"},\n    {\"_ZN4llvm7LLLexer11LexPositiveEv\", \"llvm::LLLexer::LexPositive()\"},\n    {\"_ZN4llvm7LLLexer5LexAtEv\", \"llvm::LLLexer::LexAt()\"},\n    {\"_ZN4llvm7LLLexer10LexPercentEv\", \"llvm::LLLexer::LexPercent()\"},\n    {\"_ZN4llvm7LLLexer8LexQuoteEv\", \"llvm::LLLexer::LexQuote()\"},\n    {\"_ZN4llvm7LLLexer15SkipLineCommentEv\", \"llvm::LLLexer::SkipLineComment()\"},\n    {\"_ZN4llvm7LLLexer10LexExclaimEv\", \"llvm::LLLexer::LexExclaim()\"},\n    {\"_ZN4llvm7LLLexer18LexDigitOrNegativeEv\", \"llvm::LLLexer::LexDigitOrNegative()\"},\n    {\"_Z13UnEscapeLexedRSs\", \"UnEscapeLexed(std::string&)\"},\n    {\"_ZN4llvm7LLLexer5Lex0xEv\", \"llvm::LLLexer::Lex0x()\"},\n    {\"_ZN4llvm8LLParser3RunEv\", \"llvm::LLParser::Run()\"},\n    {\"_ZN4llvm8LLParser21ParseTopLevelEntitiesEv\", \"llvm::LLParser::ParseTopLevelEntities()\"},\n    {\"_ZN4llvm8LLParser19ValidateEndOfModuleEv\", \"llvm::LLParser::ValidateEndOfModule()\"},\n    {\"_ZN4llvm8LLParser31ResolveForwardRefBlockAddressesEPNS_8FunctionERSt6vectorISt4pairINS_5ValIDEPNS_11GlobalValueEESaIS8_EEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ResolveForwardRefBlockAddresses(llvm::Function*, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > >&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState5GetBBERKSsNS_5SMLocE\", \"llvm::LLParser::PerFunctionState::GetBB(std::string const&, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState5GetBBEjNS_5SMLocE\", \"llvm::LLParser::PerFunctionState::GetBB(unsigned int, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser12ParseDeclareEv\", \"llvm::LLParser::ParseDeclare()\"},\n    {\"_ZN4llvm8LLParser11ParseDefineEv\", \"llvm::LLParser::ParseDefine()\"},\n    {\"_ZN4llvm8LLParser14ParseModuleAsmEv\", \"llvm::LLParser::ParseModuleAsm()\"},\n    {\"_ZN4llvm8LLParser21ParseTargetDefinitionEv\", \"llvm::LLParser::ParseTargetDefinition()\"},\n    {\"_ZN4llvm8LLParser12ParseDepLibsEv\", \"llvm::LLParser::ParseDepLibs()\"},\n    {\"_ZN4llvm8LLParser16ParseUnnamedTypeEv\", \"llvm::LLParser::ParseUnnamedType()\"},\n    {\"_ZN4llvm8LLParser14ParseNamedTypeEv\", \"llvm::LLParser::ParseNamedType()\"},\n    {\"_ZN4llvm8LLParser18ParseUnnamedGlobalEv\", \"llvm::LLParser::ParseUnnamedGlobal()\"},\n    {\"_ZN4llvm8LLParser16ParseNamedGlobalEv\", \"llvm::LLParser::ParseNamedGlobal()\"},\n    {\"_ZN4llvm8LLParser23ParseStandaloneMetadataEv\", \"llvm::LLParser::ParseStandaloneMetadata()\"},\n    {\"_ZN4llvm8LLParser18ParseNamedMetadataEv\", \"llvm::LLParser::ParseNamedMetadata()\"},\n    {\"_ZN4llvm8LLParser23ParseOptionalVisibilityERj\", \"llvm::LLParser::ParseOptionalVisibility(unsigned int&)\"},\n    {\"_ZN4llvm8LLParser11ParseGlobalERKSsNS_5SMLocEjbj\", \"llvm::LLParser::ParseGlobal(std::string const&, llvm::SMLoc, unsigned int, bool, unsigned int)\"},\n    {\"_ZN4llvm8LLParser10ParseTokenENS_5lltok4KindEPKc\", \"llvm::LLParser::ParseToken(llvm::lltok::Kind, char const*)\"},\n    {\"_ZN4llvm8LLParser19ParseStringConstantERSs\", \"llvm::LLParser::ParseStringConstant(std::string&)\"},\n    {\"_ZN4llvm8LLParser9ParseTypeERNS_12PATypeHolderEb\", \"llvm::LLParser::ParseType(llvm::PATypeHolder&, bool)\"},\n    {\"_ZN4llvm8LLParser19ParseFunctionHeaderERPNS_8FunctionEb\", \"llvm::LLParser::ParseFunctionHeader(llvm::Function*&, bool)\"},\n    {\"_ZN4llvm8LLParser17ParseFunctionBodyERNS_8FunctionE\", \"llvm::LLParser::ParseFunctionBody(llvm::Function&)\"},\n    {\"_ZN4llvm8LLParser15ParseGlobalTypeERb\", \"llvm::LLParser::ParseGlobalType(bool&)\"},\n    {\"_ZN4llvm8LLParser20ParseOptionalLinkageERjRb\", \"llvm::LLParser::ParseOptionalLinkage(unsigned int&, bool&)\"},\n    {\"_ZN4llvm8LLParser10ParseAliasERKSsNS_5SMLocEj\", \"llvm::LLParser::ParseAlias(std::string const&, llvm::SMLoc, unsigned int)\"},\n    {\"_ZN4llvm8LLParser13ParseMDStringERPNS_8MDStringE\", \"llvm::LLParser::ParseMDString(llvm::MDString*&)\"},\n    {\"_ZN4llvm8LLParser13ParseMDNodeIDERPNS_6MDNodeERj\", \"llvm::LLParser::ParseMDNodeID(llvm::MDNode*&, unsigned int&)\"},\n    {\"_ZN4llvm8LLParser11ParseUInt32ERj\", \"llvm::LLParser::ParseUInt32(unsigned int&)\"},\n    {\"_ZN4llvm8LLParser13ParseMDNodeIDERPNS_6MDNodeE\", \"llvm::LLParser::ParseMDNodeID(llvm::MDNode*&)\"},\n    {\"_ZN4llvm8LLParser17ParseMDNodeVectorERNS_15SmallVectorImplIPNS_5ValueEEEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseMDNodeVector(llvm::SmallVectorImpl<llvm::Value*>&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser23ParseGlobalTypeAndValueERPNS_8ConstantE\", \"llvm::LLParser::ParseGlobalTypeAndValue(llvm::Constant*&)\"},\n    {\"_ZN4llvm8LLParser10ParseValIDERNS_5ValIDEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseValID(llvm::ValID&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser22ParseOptionalAddrSpaceERj\", \"llvm::LLParser::ParseOptionalAddrSpace(unsigned int&)\"},\n    {\"_ZN4llvm8LLParser16ParseGlobalValueEPKNS_4TypeERPNS_8ConstantE\", \"llvm::LLParser::ParseGlobalValue(llvm::Type const*, llvm::Constant*&)\"},\n    {\"_ZN4llvm8LLParser22ParseOptionalAlignmentERj\", \"llvm::LLParser::ParseOptionalAlignment(unsigned int&)\"},\n    {\"_ZN4llvm8LLParser12GetGlobalValERKSsPKNS_4TypeENS_5SMLocE\", \"llvm::LLParser::GetGlobalVal(std::string const&, llvm::Type const*, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser12GetGlobalValEjPKNS_4TypeENS_5SMLocE\", \"llvm::LLParser::GetGlobalVal(unsigned int, llvm::Type const*, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser18ParseOptionalAttrsERjj\", \"llvm::LLParser::ParseOptionalAttrs(unsigned int&, unsigned int)\"},\n    {\"_ZN4llvm8LLParser27ParseOptionalStackAlignmentERj\", \"llvm::LLParser::ParseOptionalStackAlignment(unsigned int&)\"},\n    {\"_ZN4llvm8LLParser24ParseOptionalCallingConvERNS_11CallingConv2IDE\", \"llvm::LLParser::ParseOptionalCallingConv(llvm::CallingConv::ID&)\"},\n    {\"_ZN4llvm8LLParser24ParseInstructionMetadataEPNS_11InstructionEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseInstructionMetadata(llvm::Instruction*, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser22ParseMetadataListValueERNS_5ValIDEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseMetadataListValue(llvm::ValID&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser23ParseOptionalCommaAlignERjRb\", \"llvm::LLParser::ParseOptionalCommaAlign(unsigned int&, bool&)\"},\n    {\"_ZN4llvm8LLParser14ParseIndexListERNS_15SmallVectorImplIjEERb\", \"llvm::LLParser::ParseIndexList(llvm::SmallVectorImpl<unsigned int>&, bool&)\"},\n    {\"_ZN4llvm8LLParser12ParseTypeRecERNS_12PATypeHolderE\", \"llvm::LLParser::ParseTypeRec(llvm::PATypeHolder&)\"},\n    {\"_ZN4llvm8LLParser12HandleUpRefsEPKNS_4TypeE\", \"llvm::LLParser::HandleUpRefs(llvm::Type const*)\"},\n    {\"_ZN4llvm8LLParser15ParseStructTypeERNS_12PATypeHolderEb\", \"llvm::LLParser::ParseStructType(llvm::PATypeHolder&, bool)\"},\n    {\"_ZN4llvm8LLParser20ParseArrayVectorTypeERNS_12PATypeHolderEb\", \"llvm::LLParser::ParseArrayVectorType(llvm::PATypeHolder&, bool)\"},\n    {\"_ZN4llvm8LLParser17ParseFunctionTypeERNS_12PATypeHolderE\", \"llvm::LLParser::ParseFunctionType(llvm::PATypeHolder&)\"},\n    {\"_ZN4llvm8LLParser18ParseParameterListERNS_15SmallVectorImplINS0_9ParamInfoEEERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseParameterList(llvm::SmallVectorImpl<llvm::LLParser::ParamInfo>&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser10ParseValueEPKNS_4TypeERPNS_5ValueERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseValue(llvm::Type const*, llvm::Value*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser17ParseArgumentListERSt6vectorINS0_7ArgInfoESaIS2_EERbb\", \"llvm::LLParser::ParseArgumentList(std::vector<llvm::LLParser::ArgInfo, std::allocator<llvm::LLParser::ArgInfo> >&, bool&, bool)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionStateC1ERS0_RNS_8FunctionEi\", \"llvm::LLParser::PerFunctionState::PerFunctionState(llvm::LLParser&, llvm::Function&, int)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionStateC2ERS0_RNS_8FunctionEi\", \"llvm::LLParser::PerFunctionState::PerFunctionState(llvm::LLParser&, llvm::Function&, int)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionStateD1Ev\", \"llvm::LLParser::PerFunctionState::~PerFunctionState()\"},\n    {\"_ZN4llvm8LLParser16PerFunctionStateD2Ev\", \"llvm::LLParser::PerFunctionState::~PerFunctionState()\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState14FinishFunctionEv\", \"llvm::LLParser::PerFunctionState::FinishFunction()\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState6GetValERKSsPKNS_4TypeENS_5SMLocE\", \"llvm::LLParser::PerFunctionState::GetVal(std::string const&, llvm::Type const*, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState6GetValEjPKNS_4TypeENS_5SMLocE\", \"llvm::LLParser::PerFunctionState::GetVal(unsigned int, llvm::Type const*, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState11SetInstNameEiRKSsNS_5SMLocEPNS_11InstructionE\", \"llvm::LLParser::PerFunctionState::SetInstName(int, std::string const&, llvm::SMLoc, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LLParser16PerFunctionState8DefineBBERKSsNS_5SMLocE\", \"llvm::LLParser::PerFunctionState::DefineBB(std::string const&, llvm::SMLoc)\"},\n    {\"_ZN4llvm8LLParser18ParseMetadataValueERNS_5ValIDEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseMetadataValue(llvm::ValID&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser22ParseGlobalValueVectorERNS_15SmallVectorImplIPNS_8ConstantEEE\", \"llvm::LLParser::ParseGlobalValueVector(llvm::SmallVectorImpl<llvm::Constant*>&)\"},\n    {\"_ZN4llvm8LLParser17ParseCmpPredicateERjj\", \"llvm::LLParser::ParseCmpPredicate(unsigned int&, unsigned int)\"},\n    {\"_ZN4llvm8LLParser19ConvertValIDToValueEPKNS_4TypeERNS_5ValIDERPNS_5ValueEPNS0_16PerFunctionStateE\", \"llvm::LLParser::ConvertValIDToValue(llvm::Type const*, llvm::ValID&, llvm::Value*&, llvm::LLParser::PerFunctionState*)\"},\n    {\"_ZN4llvm8LLParser17ParseTypeAndValueERPNS_5ValueERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseTypeAndValue(llvm::Value*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser22ParseTypeAndBasicBlockERPNS_10BasicBlockERNS_5SMLocERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseTypeAndBasicBlock(llvm::BasicBlock*&, llvm::SMLoc&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser15ParseBasicBlockERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseBasicBlock(llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser16ParseInstructionERPNS_11InstructionEPNS_10BasicBlockERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseInstruction(llvm::Instruction*&, llvm::BasicBlock*, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser8ParseRetERPNS_11InstructionEPNS_10BasicBlockERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseRet(llvm::Instruction*&, llvm::BasicBlock*, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser7ParseBrERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseBr(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser11ParseSwitchERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseSwitch(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser15ParseIndirectBrERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseIndirectBr(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser11ParseInvokeERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseInvoke(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser15ParseArithmeticERPNS_11InstructionERNS0_16PerFunctionStateEjj\", \"llvm::LLParser::ParseArithmetic(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8LLParser12ParseLogicalERPNS_11InstructionERNS0_16PerFunctionStateEj\", \"llvm::LLParser::ParseLogical(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, unsigned int)\"},\n    {\"_ZN4llvm8LLParser12ParseCompareERPNS_11InstructionERNS0_16PerFunctionStateEj\", \"llvm::LLParser::ParseCompare(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, unsigned int)\"},\n    {\"_ZN4llvm8LLParser9ParseCastERPNS_11InstructionERNS0_16PerFunctionStateEj\", \"llvm::LLParser::ParseCast(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, unsigned int)\"},\n    {\"_ZN4llvm8LLParser11ParseSelectERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseSelect(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser11ParseVA_ArgERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseVA_Arg(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser19ParseExtractElementERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseExtractElement(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser18ParseInsertElementERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseInsertElement(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser18ParseShuffleVectorERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseShuffleVector(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser8ParsePHIERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParsePHI(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser9ParseCallERPNS_11InstructionERNS0_16PerFunctionStateEb\", \"llvm::LLParser::ParseCall(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, bool)\"},\n    {\"_ZN4llvm8LLParser10ParseAllocERPNS_11InstructionERNS0_16PerFunctionStateEPNS_10BasicBlockEb\", \"llvm::LLParser::ParseAlloc(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, llvm::BasicBlock*, bool)\"},\n    {\"_ZN4llvm8LLParser9ParseFreeERPNS_11InstructionERNS0_16PerFunctionStateEPNS_10BasicBlockE\", \"llvm::LLParser::ParseFree(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LLParser9ParseLoadERPNS_11InstructionERNS0_16PerFunctionStateEb\", \"llvm::LLParser::ParseLoad(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, bool)\"},\n    {\"_ZN4llvm8LLParser10ParseStoreERPNS_11InstructionERNS0_16PerFunctionStateEb\", \"llvm::LLParser::ParseStore(llvm::Instruction*&, llvm::LLParser::PerFunctionState&, bool)\"},\n    {\"_ZN4llvm8LLParser14ParseGetResultERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseGetResult(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser18ParseGetElementPtrERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseGetElementPtr(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser17ParseExtractValueERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseExtractValue(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8LLParser16ParseInsertValueERPNS_11InstructionERNS0_16PerFunctionStateE\", \"llvm::LLParser::ParseInsertValue(llvm::Instruction*&, llvm::LLParser::PerFunctionState&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt6vectorINS_8LLParser5MDRefESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE5clearEv\", \"llvm::DenseMap<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > > >::clear()\"},\n    {\"_ZNSt3mapIjSt4pairIN4llvm10TrackingVHINS1_6MDNodeEEENS1_5SMLocEESt4lessIjESaIS0_IKjS6_EEEixERS9_\", \"std::map<unsigned int, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > > >::operator[](unsigned int const&)\"},\n    {\"_ZNSt3mapISsSt4pairIPN4llvm11GlobalValueENS1_5SMLocEESt4lessISsESaIS0_IKSsS5_EEEixERS8_\", \"std::map<std::string, std::pair<llvm::GlobalValue*, llvm::SMLoc>, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::operator[](std::string const&)\"},\n    {\"_ZNSt3mapISsSt4pairIPN4llvm5ValueENS1_5SMLocEESt4lessISsESaIS0_IKSsS5_EEEixERS8_\", \"std::map<std::string, std::pair<llvm::Value*, llvm::SMLoc>, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::operator[](std::string const&)\"},\n    {\"_ZNSt3mapIN4llvm5ValIDESt6vectorISt4pairIS1_PNS0_11GlobalValueEESaIS6_EESt4lessIS1_ESaIS3_IKS1_S8_EEEixERSB_\", \"std::map<llvm::ValID, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::operator[](llvm::ValID const&)\"},\n    {\"_ZNSt4pairIN4llvm5ValIDEPNS0_11GlobalValueEEC2IS1_PNS0_14GlobalVariableEEERKS_IT_T0_E\", \"std::pair<llvm::ValID, llvm::GlobalValue*>::pair<llvm::ValID, llvm::GlobalVariable*>(std::pair<llvm::ValID, llvm::GlobalVariable*> const&)\"},\n    {\"_ZNSt4pairIN4llvm5ValIDEPNS0_14GlobalVariableEEC2ERKS1_RKS3_\", \"std::pair<llvm::ValID, llvm::GlobalVariable*>::pair(llvm::ValID const&, llvm::GlobalVariable* const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIN4llvm5ValIDEPNS2_11GlobalValueEEE9constructEPS6_RKS6_\", \"__gnu_cxx::new_allocator<std::pair<llvm::ValID, llvm::GlobalValue*> >::construct(std::pair<llvm::ValID, llvm::GlobalValue*>*, std::pair<llvm::ValID, llvm::GlobalValue*> const&)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm5ValIDEPNS1_11GlobalValueEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::ValID, llvm::GlobalValue*>*, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::pair<llvm::ValID, llvm::GlobalValue*> const&)\"},\n    {\"_ZNSt4pairIN4llvm5ValIDEPNS0_11GlobalValueEEaSERKS4_\", \"std::pair<llvm::ValID, llvm::GlobalValue*>::operator=(std::pair<llvm::ValID, llvm::GlobalValue*> const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPSt4pairIN4llvm5ValIDEPNS1_11GlobalValueEES6_ET0_T_S8_S7_St12__false_type\", \"std::pair<llvm::ValID, llvm::GlobalValue*>* std::__uninitialized_copy_aux<std::pair<llvm::ValID, llvm::GlobalValue*>*, std::pair<llvm::ValID, llvm::GlobalValue*>*>(std::pair<llvm::ValID, llvm::GlobalValue*>*, std::pair<llvm::ValID, llvm::GlobalValue*>*, std::pair<llvm::ValID, llvm::GlobalValue*>*, std::__false_type)\"},\n    {\"_ZNSt4pairIKN4llvm5ValIDESt6vectorIS_IS1_PNS0_11GlobalValueEESaIS6_EEEC2ERS2_RKS8_\", \"std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >::pair(llvm::ValID const&, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIN9__gnu_cxx17__normal_iteratorIPKSt4pairIN4llvm5ValIDEPNS3_11GlobalValueEESt6vectorIS7_SaIS7_EEEEPS7_ET0_T_SG_SF_St12__false_type\", \"std::pair<llvm::ValID, llvm::GlobalValue*>* std::__uninitialized_copy_aux<__gnu_cxx::__normal_iterator<std::pair<llvm::ValID, llvm::GlobalValue*> const*, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::pair<llvm::ValID, llvm::GlobalValue*>*>(__gnu_cxx::__normal_iterator<std::pair<llvm::ValID, llvm::GlobalValue*> const*, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::ValID, llvm::GlobalValue*> const*, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::pair<llvm::ValID, llvm::GlobalValue*>*, std::__false_type)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5ValIDESt4pairIKS1_St6vectorIS2_IS1_PNS0_11GlobalValueEESaIS7_EEESt10_Select1stISA_ESt4lessIS1_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<llvm::ValID, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::_Select1st<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5ValIDESt4pairIKS1_St6vectorIS2_IS1_PNS0_11GlobalValueEESaIS7_EEESt10_Select1stISA_ESt4lessIS1_ESaISA_EE9_M_insertEPSt18_Rb_tree_node_baseSI_RKSA_\", \"std::_Rb_tree<llvm::ValID, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::_Select1st<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5ValIDESt4pairIKS1_St6vectorIS2_IS1_PNS0_11GlobalValueEESaIS7_EEESt10_Select1stISA_ESt4lessIS1_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<llvm::ValID, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::_Select1st<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::_M_insert_unique(std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > const&)\"},\n    {\"_ZNSt4pairIKN4llvm5ValIDESt6vectorIS_IS1_PNS0_11GlobalValueEESaIS6_EEEC2ERKS9_\", \"std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >::pair(std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE11equal_rangeERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::equal_range(std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > > >::erase(std::_Rb_tree_iterator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::_Rb_tree_iterator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_insert_unique(std::pair<unsigned int const, std::pair<llvm::Value*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE9_M_insertEPSt18_Rb_tree_node_baseSF_RKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::_M_insert_unique(std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm5ValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE4findERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::Value*, llvm::SMLoc> > > >::find(std::string const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5ValIDESt4pairIKS1_St6vectorIS2_IS1_PNS0_11GlobalValueEESaIS7_EEESt10_Select1stISA_ESt4lessIS1_ESaISA_EE4findERS3_\", \"std::_Rb_tree<llvm::ValID, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::_Select1st<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::find(llvm::ValID const&)\"},\n    {\"_ZNSt6vectorIN4llvm8LLParser7ArgInfoESaIS2_EED2Ev\", \"std::vector<llvm::LLParser::ArgInfo, std::allocator<llvm::LLParser::ArgInfo> >::~vector()\"},\n    {\"_ZNSt6vectorIN4llvm8LLParser7ArgInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::LLParser::ArgInfo, std::allocator<llvm::LLParser::ArgInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LLParser::ArgInfo*, std::vector<llvm::LLParser::ArgInfo, std::allocator<llvm::LLParser::ArgInfo> > >, llvm::LLParser::ArgInfo const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_8LLParser9ParamInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::LLParser::ParamInfo, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIN4llvm8LLParser11UpRefRecordESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::LLParser::UpRefRecord, std::allocator<llvm::LLParser::UpRefRecord> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LLParser::UpRefRecord*, std::vector<llvm::LLParser::UpRefRecord, std::allocator<llvm::LLParser::UpRefRecord> > >, llvm::LLParser::UpRefRecord const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessIjESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_insert_unique(std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessISsESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_insert_unique(std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessISsESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > const&)\"},\n    {\"_ZSt6__findIPN4llvm12PATypeHandleEPKNS0_4TypeEET_S6_S6_RKT0_St26random_access_iterator_tag\", \"llvm::PATypeHandle* std::__find<llvm::PATypeHandle*, llvm::Type const*>(llvm::PATypeHandle*, llvm::PATypeHandle*, llvm::Type const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIN4llvm8LLParser5MDRefESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LLParser::MDRef*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > >, llvm::LLParser::MDRef const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt6vectorINS_8LLParser5MDRefESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > > >::FindAndConstruct(llvm::Instruction* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt6vectorINS_8LLParser5MDRefESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > > >::InsertIntoBucket(llvm::Instruction* const&, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > const&, std::pair<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt6vectorINS_8LLParser5MDRefESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm8LLParser5MDRefESaIS2_EEC2ERKS4_\", \"std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >::vector(std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_insert_unique(std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE9_M_insertEPSt18_Rb_tree_node_baseSF_RKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_insert_unique(std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm11GlobalValueESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::GlobalValue*, std::allocator<llvm::GlobalValue*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GlobalValue**, std::vector<llvm::GlobalValue*, std::allocator<llvm::GlobalValue*> > >, llvm::GlobalValue* const&)\"},\n    {\"_ZN4llvm6iplistINS_14GlobalVariableENS_12ilist_traitsIS1_EEE8transferENS_14ilist_iteratorIS1_EERS4_S6_S6_\", \"llvm::iplist<llvm::GlobalVariable, llvm::ilist_traits<llvm::GlobalVariable> >::transfer(llvm::ilist_iterator<llvm::GlobalVariable>, llvm::iplist<llvm::GlobalVariable, llvm::ilist_traits<llvm::GlobalVariable> >&, llvm::ilist_iterator<llvm::GlobalVariable>, llvm::ilist_iterator<llvm::GlobalVariable>)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE11equal_rangeERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::equal_range(std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::erase(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::_Rb_tree_iterator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE4findERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::find(std::string const&)\"},\n    {\"_ZNSt6vectorIN4llvm10TrackingVHINS0_6MDNodeEEESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEmRKS3_\", \"std::vector<llvm::TrackingVH<llvm::MDNode>, std::allocator<llvm::TrackingVH<llvm::MDNode> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::TrackingVH<llvm::MDNode>*, std::vector<llvm::TrackingVH<llvm::MDNode>, std::allocator<llvm::TrackingVH<llvm::MDNode> > > >, unsigned long, llvm::TrackingVH<llvm::MDNode> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm10TrackingVHINS2_6MDNodeEEENS2_5SMLocEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm10TrackingVHINS2_6MDNodeEEENS2_5SMLocEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm10TrackingVHINS2_6MDNodeEEENS2_5SMLocEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > > >::_M_insert_unique(std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessISsESaIS6_EE4findERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::find(std::string const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt6vectorINS_8LLParser5MDRefESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> >, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::vector<llvm::LLParser::MDRef, std::allocator<llvm::LLParser::MDRef> > > >::shrink_and_clear()\"},\n    {\"_ZN4llvm13ParseAssemblyEPNS_12MemoryBufferEPNS_6ModuleERNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::ParseAssembly(llvm::MemoryBuffer*, llvm::Module*, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm17ParseAssemblyFileERKSsRNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::ParseAssemblyFile(std::string const&, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm19ParseAssemblyStringEPKcPNS_6ModuleERNS_12SMDiagnosticERNS_11LLVMContextE\", \"llvm::ParseAssemblyString(char const*, llvm::Module*, llvm::SMDiagnostic&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm8LLParserD2Ev\", \"llvm::LLParser::~LLParser()\"},\n    {\"_ZN4llvm7LLLexerD2Ev\", \"llvm::LLLexer::~LLLexer()\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessISsESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessISsESaIS6_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_destroy_node(std::_Rb_tree_node<std::pair<std::string const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm12PATypeHolderENS2_5SMLocEEESt10_Select1stIS6_ESt4lessIjESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::pair<llvm::PATypeHolder, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IN4llvm10TrackingVHINS2_6MDNodeEEENS2_5SMLocEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::pair<llvm::TrackingVH<llvm::MDNode>, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessISsESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPN4llvm11GlobalValueENS2_5SMLocEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::pair<llvm::GlobalValue*, llvm::SMLoc> > >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5ValIDESt4pairIKS1_St6vectorIS2_IS1_PNS0_11GlobalValueEESaIS7_EEESt10_Select1stISA_ESt4lessIS1_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<llvm::ValID, std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >, std::_Select1st<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >, std::less<llvm::ValID>, std::allocator<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > > >*)\"},\n    {\"_ZNSt4pairIKN4llvm5ValIDESt6vectorIS_IS1_PNS0_11GlobalValueEESaIS6_EEED2Ev\", \"std::pair<llvm::ValID const, std::vector<std::pair<llvm::ValID, llvm::GlobalValue*>, std::allocator<std::pair<llvm::ValID, llvm::GlobalValue*> > > >::~pair()\"},\n    {\"_ZSt13__destroy_auxIPSt4pairIN4llvm5ValIDEPNS1_11GlobalValueEEEvT_S7_St12__false_type\", \"void std::__destroy_aux<std::pair<llvm::ValID, llvm::GlobalValue*>*>(std::pair<llvm::ValID, llvm::GlobalValue*>*, std::pair<llvm::ValID, llvm::GlobalValue*>*, std::__false_type)\"},\n    {\"_ZN4llvm8LLParserC2EPNS_12MemoryBufferERNS_9SourceMgrERNS_12SMDiagnosticEPNS_6ModuleE\", \"llvm::LLParser::LLParser(llvm::MemoryBuffer*, llvm::SourceMgr&, llvm::SMDiagnostic&, llvm::Module*)\"},\n    {\"_ZN4llvm16RegisterAsmLexerIN12_GLOBAL__N_111X86AsmLexerEE9AllocatorERKNS_6TargetERKNS_9MCAsmInfoE\", \"llvm::RegisterAsmLexer<(anonymous namespace)::X86AsmLexer>::Allocator(llvm::Target const&, llvm::MCAsmInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_111X86AsmLexer8LexTokenEv\", \"(anonymous namespace)::X86AsmLexer::LexToken()\"},\n    {\"_ZN12_GLOBAL__N_111X86AsmLexerD1Ev\", \"(anonymous namespace)::X86AsmLexer::~X86AsmLexer()\"},\n    {\"_ZN12_GLOBAL__N_111X86AsmLexerD0Ev\", \"(anonymous namespace)::X86AsmLexer::~X86AsmLexer()\"},\n    {\"_Z17MatchRegisterNameN4llvm9StringRefE\", \"MatchRegisterName(llvm::StringRef)\"},\n    {\"_ZN4llvm17RegisterAsmParserIN12_GLOBAL__N_118X86_64ATTAsmParserEE9AllocatorERKNS_6TargetERNS_11MCAsmParserERNS_13TargetMachineE\", \"llvm::RegisterAsmParser<(anonymous namespace)::X86_64ATTAsmParser>::Allocator(llvm::Target const&, llvm::MCAsmParser&, llvm::TargetMachine&)\"},\n    {\"_ZN12_GLOBAL__N_118X86_64ATTAsmParserD1Ev\", \"(anonymous namespace)::X86_64ATTAsmParser::~X86_64ATTAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_118X86_64ATTAsmParserD0Ev\", \"(anonymous namespace)::X86_64ATTAsmParser::~X86_64ATTAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser13ParseRegisterERjRN4llvm5SMLocES4_\", \"(anonymous namespace)::X86ATTAsmParser::ParseRegister(unsigned int&, llvm::SMLoc&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser16ParseInstructionEN4llvm9StringRefENS1_5SMLocERNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEE\", \"(anonymous namespace)::X86ATTAsmParser::ParseInstruction(llvm::StringRef, llvm::SMLoc, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser14ParseDirectiveEN4llvm8AsmTokenE\", \"(anonymous namespace)::X86ATTAsmParser::ParseDirective(llvm::AsmToken)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser23MatchAndEmitInstructionEN4llvm5SMLocERNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEERNS1_10MCStreamerE\", \"(anonymous namespace)::X86ATTAsmParser::MatchAndEmitInstruction(llvm::SMLoc, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&, llvm::MCStreamer&)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser20MatchInstructionImplERKN4llvm15SmallVectorImplIPNS1_18MCParsedAsmOperandEEERNS1_6MCInstERj\", \"(anonymous namespace)::X86ATTAsmParser::MatchInstructionImpl(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*> const&, llvm::MCInst&, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser15ConvertToMCInstEjRN4llvm6MCInstEjRKNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEE\", \"(anonymous namespace)::X86ATTAsmParser::ConvertToMCInst(unsigned int, llvm::MCInst&, unsigned int, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*> const&)\"},\n    {\"_ZNK12_GLOBAL__N_110X86Operand14addMemOperandsERN4llvm6MCInstEj\", \"(anonymous namespace)::X86Operand::addMemOperands(llvm::MCInst&, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_110X86Operand7addExprERN4llvm6MCInstEPKNS1_6MCExprE\", \"(anonymous namespace)::X86Operand::addExpr(llvm::MCInst&, llvm::MCExpr const*) const\"},\n    {\"_ZN12_GLOBAL__N_110X86OperandD1Ev\", \"(anonymous namespace)::X86Operand::~X86Operand()\"},\n    {\"_ZN12_GLOBAL__N_110X86OperandD0Ev\", \"(anonymous namespace)::X86Operand::~X86Operand()\"},\n    {\"_ZNK12_GLOBAL__N_110X86Operand11getStartLocEv\", \"(anonymous namespace)::X86Operand::getStartLoc() const\"},\n    {\"_ZNK12_GLOBAL__N_110X86Operand9getEndLocEv\", \"(anonymous namespace)::X86Operand::getEndLoc() const\"},\n    {\"_ZNK12_GLOBAL__N_110X86Operand4dumpERN4llvm11raw_ostreamE\", \"(anonymous namespace)::X86Operand::dump(llvm::raw_ostream&) const\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser12ParseOperandEv\", \"(anonymous namespace)::X86ATTAsmParser::ParseOperand()\"},\n    {\"_Z17MatchRegisterNameN4llvm9StringRefE\", \"MatchRegisterName(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParser15ParseMemOperandEjN4llvm5SMLocE\", \"(anonymous namespace)::X86ATTAsmParser::ParseMemOperand(unsigned int, llvm::SMLoc)\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParserD1Ev\", \"(anonymous namespace)::X86ATTAsmParser::~X86ATTAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_115X86ATTAsmParserD0Ev\", \"(anonymous namespace)::X86ATTAsmParser::~X86ATTAsmParser()\"},\n    {\"_ZN4llvm17RegisterAsmParserIN12_GLOBAL__N_118X86_32ATTAsmParserEE9AllocatorERKNS_6TargetERNS_11MCAsmParserERNS_13TargetMachineE\", \"llvm::RegisterAsmParser<(anonymous namespace)::X86_32ATTAsmParser>::Allocator(llvm::Target const&, llvm::MCAsmParser&, llvm::TargetMachine&)\"},\n    {\"_ZN12_GLOBAL__N_118X86_32ATTAsmParserD1Ev\", \"(anonymous namespace)::X86_32ATTAsmParser::~X86_32ATTAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_118X86_32ATTAsmParserD0Ev\", \"(anonymous namespace)::X86_32ATTAsmParser::~X86_32ATTAsmParser()\"},\n    {\"_ZN4llvm22createSSEDomainFixPassEv\", \"llvm::createSSEDomainFixPass()\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPassD1Ev\", \"(anonymous namespace)::SSEDomainFixPass::~SSEDomainFixPass()\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPassD0Ev\", \"(anonymous namespace)::SSEDomainFixPass::~SSEDomainFixPass()\"},\n    {\"_ZNK12_GLOBAL__N_116SSEDomainFixPass11getPassNameEv\", \"(anonymous namespace)::SSEDomainFixPass::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_116SSEDomainFixPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::SSEDomainFixPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::SSEDomainFixPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass14visitHardInstrEPN4llvm12MachineInstrEj\", \"(anonymous namespace)::SSEDomainFixPass::visitHardInstr(llvm::MachineInstr*, unsigned int)\"},\n    {\"_ZN4llvm24SpecificBumpPtrAllocatorIN12_GLOBAL__N_111DomainValueEE10DestroyAllEv\", \"llvm::SpecificBumpPtrAllocator<(anonymous namespace)::DomainValue>::DestroyAll()\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass8CollapseEPNS_11DomainValueEj\", \"(anonymous namespace)::SSEDomainFixPass::Collapse((anonymous namespace)::DomainValue*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass10SetLiveRegEiPNS_11DomainValueE\", \"(anonymous namespace)::SSEDomainFixPass::SetLiveReg(int, (anonymous namespace)::DomainValue*)\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass5ForceEij\", \"(anonymous namespace)::SSEDomainFixPass::Force(int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass5MergeEPNS_11DomainValueES2_\", \"(anonymous namespace)::SSEDomainFixPass::Merge((anonymous namespace)::DomainValue*, (anonymous namespace)::DomainValue*)\"},\n    {\"_ZN4llvm12df_ext_beginIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj16EEEEENS_15df_ext_iteratorIT_T0_EERKS6_RS7_\", \"llvm::df_ext_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u> > llvm::df_ext_begin<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u> >(llvm::MachineBasicBlock* const&, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u>&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj16EEELb1ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u>, true, llvm::GraphTraits<llvm::MachineBasicBlock*> >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_17MachineBasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEEN9__gnu_cxx17__normal_iteratorIPS4_S_IS4_SaIS4_EEEEESaISE_EE13_M_insert_auxENS9_IPSE_SG_EERKSE_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >*, std::vector<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > > > > >, std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_17MachineBasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEEN9__gnu_cxx17__normal_iteratorIPS4_S_IS4_SaIS4_EEEEESaISE_EEC2ERKSG_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > > > >::vector(std::vector<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::MachineBasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::MachineBasicBlock*> >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > > > > const&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj16EEELb1ENS_11GraphTraitsIS2_EEEC2ES2_RS4_\", \"llvm::df_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u>, true, llvm::GraphTraits<llvm::MachineBasicBlock*> >::df_iterator(llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 16u>&)\"},\n    {\"_ZN4llvm22createX86_32AsmBackendERKNS_6TargetERKSs\", \"llvm::createX86_32AsmBackend(llvm::Target const&, std::string const&)\"},\n    {\"_ZN4llvm22createX86_64AsmBackendERKNS_6TargetERKSs\", \"llvm::createX86_64AsmBackend(llvm::Target const&, std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_119ELFX86_64AsmBackendD1Ev\", \"(anonymous namespace)::ELFX86_64AsmBackend::~ELFX86_64AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119ELFX86_64AsmBackendD0Ev\", \"(anonymous namespace)::ELFX86_64AsmBackend::~ELFX86_64AsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_119ELFX86_64AsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::ELFX86_64AsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ELFX86AsmBackend25doesSectionRequireSymbolsERKN4llvm9MCSectionE\", \"(anonymous namespace)::ELFX86AsmBackend::doesSectionRequireSymbols(llvm::MCSection const&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend16getNumFixupKindsEv\", \"(anonymous namespace)::X86AsmBackend::getNumFixupKinds() const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend16getFixupKindInfoEN4llvm11MCFixupKindE\", \"(anonymous namespace)::X86AsmBackend::getFixupKindInfo(llvm::MCFixupKind) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend10ApplyFixupERKN4llvm7MCFixupEPcjy\", \"(anonymous namespace)::X86AsmBackend::ApplyFixup(llvm::MCFixup const&, char*, unsigned int, unsigned long long) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend17MayNeedRelaxationERKN4llvm6MCInstE\", \"(anonymous namespace)::X86AsmBackend::MayNeedRelaxation(llvm::MCInst const&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend16RelaxInstructionERKN4llvm6MCInstERS2_\", \"(anonymous namespace)::X86AsmBackend::RelaxInstruction(llvm::MCInst const&, llvm::MCInst&) const\"},\n    {\"_ZNK12_GLOBAL__N_113X86AsmBackend12WriteNopDataEyPN4llvm14MCObjectWriterE\", \"(anonymous namespace)::X86AsmBackend::WriteNopData(unsigned long long, llvm::MCObjectWriter*) const\"},\n    {\"_ZN12_GLOBAL__N_118X86ELFObjectWriterD1Ev\", \"(anonymous namespace)::X86ELFObjectWriter::~X86ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_118X86ELFObjectWriterD0Ev\", \"(anonymous namespace)::X86ELFObjectWriter::~X86ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_116ELFX86AsmBackendD1Ev\", \"(anonymous namespace)::ELFX86AsmBackend::~ELFX86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_116ELFX86AsmBackendD0Ev\", \"(anonymous namespace)::ELFX86AsmBackend::~ELFX86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_113X86AsmBackendD1Ev\", \"(anonymous namespace)::X86AsmBackend::~X86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_113X86AsmBackendD0Ev\", \"(anonymous namespace)::X86AsmBackend::~X86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_64AsmBackendD1Ev\", \"(anonymous namespace)::DarwinX86_64AsmBackend::~DarwinX86_64AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_64AsmBackendD0Ev\", \"(anonymous namespace)::DarwinX86_64AsmBackend::~DarwinX86_64AsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_122DarwinX86_64AsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::DarwinX86_64AsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZNK12_GLOBAL__N_122DarwinX86_64AsmBackend25doesSectionRequireSymbolsERKN4llvm9MCSectionE\", \"(anonymous namespace)::DarwinX86_64AsmBackend::doesSectionRequireSymbols(llvm::MCSection const&) const\"},\n    {\"_ZNK12_GLOBAL__N_122DarwinX86_64AsmBackend19isSectionAtomizableERKN4llvm9MCSectionE\", \"(anonymous namespace)::DarwinX86_64AsmBackend::isSectionAtomizable(llvm::MCSection const&) const\"},\n    {\"_ZN12_GLOBAL__N_119DarwinX86AsmBackendD1Ev\", \"(anonymous namespace)::DarwinX86AsmBackend::~DarwinX86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119DarwinX86AsmBackendD0Ev\", \"(anonymous namespace)::DarwinX86AsmBackend::~DarwinX86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119ELFX86_32AsmBackendD1Ev\", \"(anonymous namespace)::ELFX86_32AsmBackend::~ELFX86_32AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119ELFX86_32AsmBackendD0Ev\", \"(anonymous namespace)::ELFX86_32AsmBackend::~ELFX86_32AsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_119ELFX86_32AsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::ELFX86_32AsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZN12_GLOBAL__N_120WindowsX86AsmBackendD1Ev\", \"(anonymous namespace)::WindowsX86AsmBackend::~WindowsX86AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_120WindowsX86AsmBackendD0Ev\", \"(anonymous namespace)::WindowsX86AsmBackend::~WindowsX86AsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_120WindowsX86AsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::WindowsX86AsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_32AsmBackendD1Ev\", \"(anonymous namespace)::DarwinX86_32AsmBackend::~DarwinX86_32AsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_122DarwinX86_32AsmBackendD0Ev\", \"(anonymous namespace)::DarwinX86_32AsmBackend::~DarwinX86_32AsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_122DarwinX86_32AsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::DarwinX86_32AsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm16TargetAsmBackend19isSectionAtomizableERKNS_9MCSectionE\", \"llvm::TargetAsmBackend::isSectionAtomizable(llvm::MCSection const&) const\"},\n    {\"_ZN4llvm16TargetAsmBackend19HandleAssemblerFlagENS_15MCAssemblerFlagE\", \"llvm::TargetAsmBackend::HandleAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9MCOperandEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::MCOperand>::operator=(llvm::SmallVectorImpl<llvm::MCOperand> const&)\"},\n    {\"_ZNK4llvm16TargetAsmBackend25doesSectionRequireSymbolsERKNS_9MCSectionE\", \"llvm::TargetAsmBackend::doesSectionRequireSymbols(llvm::MCSection const&) const\"},\n    {\"_ZN4llvm13X86AsmPrinter20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm13X86AsmPrinter18printSymbolOperandERKNS_14MachineOperandERNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::printSymbolOperand(llvm::MachineOperand const&, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter15print_pcrel_immEPKNS_12MachineInstrEjRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::print_pcrel_imm(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter12printOperandEPKNS_12MachineInstrEjRNS_11raw_ostreamEPKc\", \"llvm::X86AsmPrinter::printOperand(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&, char const*)\"},\n    {\"_ZN4llvm13X86AsmPrinter10printSSECCEPKNS_12MachineInstrEjRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::printSSECC(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter20printLeaMemReferenceEPKNS_12MachineInstrEjRNS_11raw_ostreamEPKc\", \"llvm::X86AsmPrinter::printLeaMemReference(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&, char const*)\"},\n    {\"_ZN4llvm13X86AsmPrinter17printMemReferenceEPKNS_12MachineInstrEjRNS_11raw_ostreamEPKc\", \"llvm::X86AsmPrinter::printMemReference(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&, char const*)\"},\n    {\"_ZN4llvm13X86AsmPrinter13printPICLabelEPKNS_12MachineInstrEjRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::printPICLabel(llvm::MachineInstr const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter17printAsmMRegisterERKNS_14MachineOperandEcRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::printAsmMRegister(llvm::MachineOperand const&, char, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter15PrintAsmOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter21PrintAsmMemoryOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::PrintAsmMemoryOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13X86AsmPrinter18EmitStartOfAsmFileERNS_6ModuleE\", \"llvm::X86AsmPrinter::EmitStartOfAsmFile(llvm::Module&)\"},\n    {\"_ZN4llvm13X86AsmPrinter16EmitEndOfAsmFileERNS_6ModuleE\", \"llvm::X86AsmPrinter::EmitEndOfAsmFile(llvm::Module&)\"},\n    {\"_ZNK4llvm13X86AsmPrinter21getDebugValueLocationEPKNS_12MachineInstrE\", \"llvm::X86AsmPrinter::getDebugValueLocation(llvm::MachineInstr const*) const\"},\n    {\"_ZN4llvm13X86AsmPrinter22PrintDebugValueCommentEPKNS_12MachineInstrERNS_11raw_ostreamE\", \"llvm::X86AsmPrinter::PrintDebugValueComment(llvm::MachineInstr const*, llvm::raw_ostream&)\"},\n    {\"_Z22createX86MCInstPrinterRKN4llvm6TargetEjRKNS_9MCAsmInfoE\", \"createX86MCInstPrinter(llvm::Target const&, unsigned int, llvm::MCAsmInfo const&)\"},\n    {\"_ZNK4llvm12X86Subtarget12isTargetCOFFEv\", \"llvm::X86Subtarget::isTargetCOFF() const\"},\n    {\"_ZNK4llvm12X86Subtarget11isTargetELFEv\", \"llvm::X86Subtarget::isTargetELF() const\"},\n    {\"_ZN4llvm7DIScopeD1Ev\", \"llvm::DIScope::~DIScope()\"},\n    {\"_ZN4llvm12DISubprogramD1Ev\", \"llvm::DISubprogram::~DISubprogram()\"},\n    {\"_ZN4llvm13X86AsmPrinterD1Ev\", \"llvm::X86AsmPrinter::~X86AsmPrinter()\"},\n    {\"_ZN4llvm13X86AsmPrinterD0Ev\", \"llvm::X86AsmPrinter::~X86AsmPrinter()\"},\n    {\"_ZNK4llvm13X86AsmPrinter11getPassNameEv\", \"llvm::X86AsmPrinter::getPassName() const\"},\n    {\"_ZN4llvm10AsmPrinter14getISAEncodingEv\", \"llvm::AsmPrinter::getISAEncoding()\"},\n    {\"_ZN4llvm18RegisterAsmPrinterINS_13X86AsmPrinterEE9AllocatorERNS_13TargetMachineERNS_10MCStreamerE\", \"llvm::RegisterAsmPrinter<llvm::X86AsmPrinter>::Allocator(llvm::TargetMachine&, llvm::MCStreamer&)\"},\n    {\"_ZNSt6vectorIPKN4llvm8MCSymbolESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::MCSymbol const*, std::allocator<llvm::MCSymbol const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCSymbol const**, std::vector<llvm::MCSymbol const*, std::allocator<llvm::MCSymbol const*> > >, llvm::MCSymbol const* const&)\"},\n    {\"_ZN4llvm12DISubprogramD0Ev\", \"llvm::DISubprogram::~DISubprogram()\"},\n    {\"_ZN4llvm7DIScopeD0Ev\", \"llvm::DIScope::~DIScope()\"},\n    {\"_ZN4llvm24X86COFFMachineModuleInfoD0Ev\", \"llvm::X86COFFMachineModuleInfo::~X86COFFMachineModuleInfo()\"},\n    {\"_ZN4llvm24X86COFFMachineModuleInfoD1Ev\", \"llvm::X86COFFMachineModuleInfo::~X86COFFMachineModuleInfo()\"},\n    {\"_ZN4llvm24X86COFFMachineModuleInfoD2Ev\", \"llvm::X86COFFMachineModuleInfo::~X86COFFMachineModuleInfo()\"},\n    {\"_ZN4llvm27createX86JITCodeEmitterPassERNS_16X86TargetMachineERNS_14JITCodeEmitterE\", \"llvm::createX86JITCodeEmitterPass(llvm::X86TargetMachine&, llvm::JITCodeEmitter&)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEED1Ev\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::~Emitter()\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEED0Ev\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::~Emitter()\"},\n    {\"_ZNK12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE11getPassNameEv\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE16getAnalysisUsageERNS1_13AnalysisUsageE\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE20runOnMachineFunctionERNS1_15MachineFunctionE\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE15emitInstructionERNS1_12MachineInstrEPKNS1_15TargetInstrDescE\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitInstruction(llvm::MachineInstr&, llvm::TargetInstrDesc const*)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE17emitGlobalAddressEPKNS1_11GlobalValueEjllb\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitGlobalAddress(llvm::GlobalValue const*, unsigned int, long, long, bool)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE25emitExternalSymbolAddressEPKcj\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitExternalSymbolAddress(char const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE20emitJumpTableAddressEjjl\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitJumpTableAddress(unsigned int, unsigned int, long)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE20emitConstPoolAddressEjjll\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitConstPoolAddress(unsigned int, unsigned int, long, long)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE16emitMemModRMByteERKNS1_12MachineInstrEjjl\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitMemModRMByte(llvm::MachineInstr const&, unsigned int, unsigned int, long)\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE21emitDisplacementFieldEPKNS1_14MachineOperandEilb\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitDisplacementField(llvm::MachineOperand const*, int, long, bool)\"},\n    {\"_ZN4llvm16X86ELFWriterInfoC1Ebb\", \"llvm::X86ELFWriterInfo::X86ELFWriterInfo(bool, bool)\"},\n    {\"_ZN4llvm16X86ELFWriterInfoC2Ebb\", \"llvm::X86ELFWriterInfo::X86ELFWriterInfo(bool, bool)\"},\n    {\"_ZN4llvm16X86ELFWriterInfoD0Ev\", \"llvm::X86ELFWriterInfo::~X86ELFWriterInfo()\"},\n    {\"_ZN4llvm16X86ELFWriterInfoD1Ev\", \"llvm::X86ELFWriterInfo::~X86ELFWriterInfo()\"},\n    {\"_ZN4llvm16X86ELFWriterInfoD2Ev\", \"llvm::X86ELFWriterInfo::~X86ELFWriterInfo()\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo17getRelocationTypeEj\", \"llvm::X86ELFWriterInfo::getRelocationType(unsigned int) const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo24getDefaultAddendForRelTyEjl\", \"llvm::X86ELFWriterInfo::getDefaultAddendForRelTy(unsigned int, long) const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo19getRelocationTySizeEj\", \"llvm::X86ELFWriterInfo::getRelocationTySize(unsigned int) const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo15isPCRelativeRelEj\", \"llvm::X86ELFWriterInfo::isPCRelativeRel(unsigned int) const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo28getAbsoluteLabelMachineRelTyEv\", \"llvm::X86ELFWriterInfo::getAbsoluteLabelMachineRelTy() const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo17computeRelocationEjjj\", \"llvm::X86ELFWriterInfo::computeRelocation(unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16X86ELFWriterInfo19hasRelocationAddendEv\", \"llvm::X86ELFWriterInfo::hasRelocationAddend() const\"},\n    {\"_ZN4llvm3X8614createFastISelERNS_20FunctionLoweringInfoE\", \"llvm::X86::createFastISel(llvm::FunctionLoweringInfo&)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel13TryToFoldLoadEPN4llvm12MachineInstrEjPKNS1_8LoadInstE\", \"(anonymous namespace)::X86FastISel::TryToFoldLoad(llvm::MachineInstr*, unsigned int, llvm::LoadInst const*)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISelD1Ev\", \"(anonymous namespace)::X86FastISel::~X86FastISel()\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISelD0Ev\", \"(anonymous namespace)::X86FastISel::~X86FastISel()\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel23TargetSelectInstructionEPKN4llvm11InstructionE\", \"(anonymous namespace)::X86FastISel::TargetSelectInstruction(llvm::Instruction const*)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel10FastEmit_rEN4llvm3MVTES2_jjb\", \"(anonymous namespace)::X86FastISel::FastEmit_r(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel11FastEmit_rrEN4llvm3MVTES2_jjbjb\", \"(anonymous namespace)::X86FastISel::FastEmit_rr(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel11FastEmit_riEN4llvm3MVTES2_jjby\", \"(anonymous namespace)::X86FastISel::FastEmit_ri(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel10FastEmit_iEN4llvm3MVTES2_jy\", \"(anonymous namespace)::X86FastISel::FastEmit_i(llvm::MVT, llvm::MVT, unsigned int, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel25TargetMaterializeConstantEPKN4llvm8ConstantE\", \"(anonymous namespace)::X86FastISel::TargetMaterializeConstant(llvm::Constant const*)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel23TargetMaterializeAllocaEPKN4llvm10AllocaInstE\", \"(anonymous namespace)::X86FastISel::TargetMaterializeAlloca(llvm::AllocaInst const*)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel16X86SelectAddressEPKN4llvm5ValueERNS1_14X86AddressModeE\", \"(anonymous namespace)::X86FastISel::X86SelectAddress(llvm::Value const*, llvm::X86AddressMode&)\"},\n    {\"_ZN4llvm14addFullAddressERKNS_19MachineInstrBuilderERKNS_14X86AddressModeE\", \"llvm::addFullAddress(llvm::MachineInstrBuilder const&, llvm::X86AddressMode const&)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel13X86SelectZExtEPKN4llvm11InstructionE\", \"(anonymous namespace)::X86FastISel::X86SelectZExt(llvm::Instruction const*)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel14X86SelectTruncEPKN4llvm11InstructionE\", \"(anonymous namespace)::X86FastISel::X86SelectTrunc(llvm::Instruction const*)\"},\n    {\"_Z6CC_X86jN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_X86(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel16X86FastEmitStoreEN4llvm3EVTEPKNS1_5ValueERKNS1_14X86AddressModeE\", \"(anonymous namespace)::X86FastISel::X86FastEmitStore(llvm::EVT, llvm::Value const*, llvm::X86AddressMode const&)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel16X86FastEmitStoreEN4llvm3EVTEjRKNS1_14X86AddressModeE\", \"(anonymous namespace)::X86FastISel::X86FastEmitStore(llvm::EVT, unsigned int, llvm::X86AddressMode const&)\"},\n    {\"_Z9RetCC_X86jN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm17addFrameReferenceERKNS_19MachineInstrBuilderEii\", \"llvm::addFrameReference(llvm::MachineInstrBuilder const&, int, int)\"},\n    {\"_Z15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN12_GLOBAL__N_111X86FastISel18X86FastEmitCompareEPKN4llvm5ValueES4_NS1_3EVTE\", \"(anonymous namespace)::X86FastISel::X86FastEmitCompare(llvm::Value const*, llvm::Value const*, llvm::EVT)\"},\n    {\"_ZN4llvm14X86AddressMode14getFullAddressERNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::X86AddressMode::getFullAddress(llvm::SmallVectorImpl<llvm::MachineOperand>&)\"},\n    {\"_ZN4llvm36createX86FloatingPointStackifierPassEv\", \"llvm::createX86FloatingPointStackifierPass()\"},\n    {\"_ZN12_GLOBAL__N_13FPSD1Ev\", \"(anonymous namespace)::FPS::~FPS()\"},\n    {\"_ZN12_GLOBAL__N_13FPSD0Ev\", \"(anonymous namespace)::FPS::~FPS()\"},\n    {\"_ZNK12_GLOBAL__N_13FPS11getPassNameEv\", \"(anonymous namespace)::FPS::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_13FPS16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::FPS::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_13FPS20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::FPS::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_13FPS17processBasicBlockERN4llvm15MachineFunctionERNS1_17MachineBasicBlockE\", \"(anonymous namespace)::FPS::processBasicBlock(llvm::MachineFunction&, llvm::MachineBasicBlock&)\"},\n    {\"_ZN12_GLOBAL__N_13FPS14adjustLiveRegsEjN4llvm14ilist_iteratorINS1_12MachineInstrEEE\", \"(anonymous namespace)::FPS::adjustLiveRegs(unsigned int, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN12_GLOBAL__N_13FPS9moveToTopEjN4llvm14ilist_iteratorINS1_12MachineInstrEEE\", \"(anonymous namespace)::FPS::moveToTop(unsigned int, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN12_GLOBAL__N_13FPS13popStackAfterERN4llvm14ilist_iteratorINS1_12MachineInstrEEE\", \"(anonymous namespace)::FPS::popStackAfter(llvm::ilist_iterator<llvm::MachineInstr>&)\"},\n    {\"_ZN12_GLOBAL__N_13FPS19freeStackSlotBeforeEN4llvm14ilist_iteratorINS1_12MachineInstrEEEj\", \"(anonymous namespace)::FPS::freeStackSlotBefore(llvm::ilist_iterator<llvm::MachineInstr>, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_13FPS14duplicateToTopEjjPN4llvm12MachineInstrE\", \"(anonymous namespace)::FPS::duplicateToTop(unsigned int, unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm12df_ext_beginIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj8EEEEENS_15df_ext_iteratorIT_T0_EERKS6_RS7_\", \"llvm::df_ext_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u> > llvm::df_ext_begin<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u> >(llvm::MachineBasicBlock* const&, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj8EEELb1ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>, true, llvm::GraphTraits<llvm::MachineBasicBlock*> >::toNext()\"},\n    {\"_ZN4llvm11df_iteratorIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj8EEELb1ENS_11GraphTraitsIS2_EEEC2ES2_RS4_\", \"llvm::df_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>, true, llvm::GraphTraits<llvm::MachineBasicBlock*> >::df_iterator(llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>&)\"},\n    {\"_ZNK4llvm16X86FrameLowering20hasReservedCallFrameERKNS_15MachineFunctionE\", \"llvm::X86FrameLowering::hasReservedCallFrame(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16X86FrameLowering5hasFPERKNS_15MachineFunctionE\", \"llvm::X86FrameLowering::hasFP(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16X86FrameLowering25emitCalleeSavedFrameMovesERNS_15MachineFunctionEPNS_8MCSymbolEj\", \"llvm::X86FrameLowering::emitCalleeSavedFrameMoves(llvm::MachineFunction&, llvm::MCSymbol*, unsigned int) const\"},\n    {\"_ZNK4llvm16X86FrameLowering12emitPrologueERNS_15MachineFunctionE\", \"llvm::X86FrameLowering::emitPrologue(llvm::MachineFunction&) const\"},\n    {\"_Z14mergeSPUpdatesRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEjb\", \"mergeSPUpdates(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, bool)\"},\n    {\"_Z12emitSPUpdateRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEjxbRKNS_15TargetInstrInfoERKNS_18TargetRegisterInfoE\", \"emitSPUpdate(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, long long, bool, llvm::TargetInstrInfo const&, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZNK4llvm16X86FrameLowering12emitEpilogueERNS_15MachineFunctionERNS_17MachineBasicBlockE\", \"llvm::X86FrameLowering::emitEpilogue(llvm::MachineFunction&, llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm16X86FrameLowering20getInitialFrameStateERSt6vectorINS_11MachineMoveESaIS2_EE\", \"llvm::X86FrameLowering::getInitialFrameState(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> >&) const\"},\n    {\"_ZNK4llvm16X86FrameLowering19getFrameIndexOffsetERKNS_15MachineFunctionEi\", \"llvm::X86FrameLowering::getFrameIndexOffset(llvm::MachineFunction const&, int) const\"},\n    {\"_ZNK4llvm16X86FrameLowering25spillCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::X86FrameLowering::spillCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16X86FrameLowering27restoreCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::X86FrameLowering::restoreCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16X86FrameLowering36processFunctionBeforeCalleeSavedScanERNS_15MachineFunctionEPNS_12RegScavengerE\", \"llvm::X86FrameLowering::processFunctionBeforeCalleeSavedScan(llvm::MachineFunction&, llvm::RegScavenger*) const\"},\n    {\"_ZNK4llvm12X86Subtarget13isTargetWin32Ev\", \"llvm::X86Subtarget::isTargetWin32() const\"},\n    {\"_ZNSt6vectorIN4llvm11MachineMoveESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineMove*, std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> > >, llvm::MachineMove const&)\"},\n    {\"_ZN4llvm8SmallSetIjLj8EE6insertERKj\", \"llvm::SmallSet<unsigned int, 8u>::insert(unsigned int const&)\"},\n    {\"_ZN4llvm16createX86ISelDagERNS_16X86TargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::createX86ISelDag(llvm::X86TargetMachine&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISelD1Ev\", \"(anonymous namespace)::X86DAGToDAGISel::~X86DAGToDAGISel()\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISelD0Ev\", \"(anonymous namespace)::X86DAGToDAGISel::~X86DAGToDAGISel()\"},\n    {\"_ZNK12_GLOBAL__N_115X86DAGToDAGISel11getPassNameEv\", \"(anonymous namespace)::X86DAGToDAGISel::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel21EmitFunctionEntryCodeEv\", \"(anonymous namespace)::X86DAGToDAGISel::EmitFunctionEntryCode()\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel17PreprocessISelDAGEv\", \"(anonymous namespace)::X86DAGToDAGISel::PreprocessISelDAG()\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel6SelectEPN4llvm6SDNodeE\", \"(anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel28SelectInlineAsmMemoryOperandERKN4llvm7SDValueEcRSt6vectorIS2_SaIS2_EE\", \"(anonymous namespace)::X86DAGToDAGISel::SelectInlineAsmMemoryOperand(llvm::SDValue const&, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&)\"},\n    {\"_ZNK12_GLOBAL__N_115X86DAGToDAGISel18IsProfitableToFoldEN4llvm7SDValueEPNS1_6SDNodeES4_\", \"(anonymous namespace)::X86DAGToDAGISel::IsProfitableToFold(llvm::SDValue, llvm::SDNode*, llvm::SDNode*) const\"},\n    {\"_ZNK12_GLOBAL__N_115X86DAGToDAGISel21CheckPatternPredicateEj\", \"(anonymous namespace)::X86DAGToDAGISel::CheckPatternPredicate(unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_115X86DAGToDAGISel18CheckNodePredicateEPN4llvm6SDNodeEj\", \"(anonymous namespace)::X86DAGToDAGISel::CheckNodePredicate(llvm::SDNode*, unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel19CheckComplexPatternEPN4llvm6SDNodeES3_NS1_7SDValueEjRNS1_15SmallVectorImplISt4pairIS4_S3_EEE\", \"(anonymous namespace)::X86DAGToDAGISel::CheckComplexPattern(llvm::SDNode*, llvm::SDNode*, llvm::SDValue, unsigned int, llvm::SmallVectorImpl<std::pair<llvm::SDValue, llvm::SDNode*> >&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel14RunSDNodeXFormEN4llvm7SDValueEj\", \"(anonymous namespace)::X86DAGToDAGISel::RunSDNodeXForm(llvm::SDValue, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel10SelectAddrEPN4llvm6SDNodeENS1_7SDValueERS4_S5_S5_S5_S5_\", \"(anonymous namespace)::X86DAGToDAGISel::SelectAddr(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel19SelectScalarSSELoadEPN4llvm6SDNodeENS1_7SDValueERS4_S5_S5_S5_S5_S5_\", \"(anonymous namespace)::X86DAGToDAGISel::SelectScalarSSELoad(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel13SelectLEAAddrEN4llvm7SDValueERS2_S3_S3_S3_S3_\", \"(anonymous namespace)::X86DAGToDAGISel::SelectLEAAddr(llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel17SelectTLSADDRAddrEN4llvm7SDValueERS2_S3_S3_S3_S3_\", \"(anonymous namespace)::X86DAGToDAGISel::SelectTLSADDRAddr(llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel18getAddressOperandsERNS_18X86ISelAddressModeERN4llvm7SDValueES5_S5_S5_S5_\", \"(anonymous namespace)::X86DAGToDAGISel::getAddressOperands((anonymous namespace)::X86ISelAddressMode&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel12MatchAddressEN4llvm7SDValueERNS_18X86ISelAddressModeE\", \"(anonymous namespace)::X86DAGToDAGISel::MatchAddress(llvm::SDValue, (anonymous namespace)::X86ISelAddressMode&)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel23MatchAddressRecursivelyEN4llvm7SDValueERNS_18X86ISelAddressModeEj\", \"(anonymous namespace)::X86DAGToDAGISel::MatchAddressRecursively(llvm::SDValue, (anonymous namespace)::X86ISelAddressMode&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel14SelectAtomic64EPN4llvm6SDNodeEj\", \"(anonymous namespace)::X86DAGToDAGISel::SelectAtomic64(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115X86DAGToDAGISel11TryFoldLoadEPN4llvm6SDNodeENS1_7SDValueERS4_S5_S5_S5_S5_\", \"(anonymous namespace)::X86DAGToDAGISel::TryFoldLoad(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm17X86TargetLoweringC1ERNS_16X86TargetMachineE\", \"llvm::X86TargetLowering::X86TargetLowering(llvm::X86TargetMachine&)\"},\n    {\"_ZN4llvm17X86TargetLoweringC2ERNS_16X86TargetMachineE\", \"llvm::X86TargetLowering::X86TargetLowering(llvm::X86TargetMachine&)\"},\n    {\"_ZNK4llvm17X86TargetLowering18getSetCCResultTypeENS_3EVTE\", \"llvm::X86TargetLowering::getSetCCResultType(llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21getByValTypeAlignmentEPKNS_4TypeE\", \"llvm::X86TargetLowering::getByValTypeAlignment(llvm::Type const*) const\"},\n    {\"_Z16getMaxByValAlignPKN4llvm4TypeERj\", \"getMaxByValAlign(llvm::Type const*, unsigned int&)\"},\n    {\"_ZNK4llvm17X86TargetLowering19getOptimalMemOpTypeEyjjbbRNS_15MachineFunctionE\", \"llvm::X86TargetLowering::getOptimalMemOpType(unsigned long long, unsigned int, unsigned int, bool, bool, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering20getJumpTableEncodingEv\", \"llvm::X86TargetLowering::getJumpTableEncoding() const\"},\n    {\"_ZNK4llvm17X86TargetLowering25LowerCustomJumpTableEntryEPKNS_20MachineJumpTableInfoEPKNS_17MachineBasicBlockEjRNS_9MCContextE\", \"llvm::X86TargetLowering::LowerCustomJumpTableEntry(llvm::MachineJumpTableInfo const*, llvm::MachineBasicBlock const*, unsigned int, llvm::MCContext&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering24getPICJumpTableRelocBaseENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::getPICJumpTableRelocBase(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering28getPICJumpTableRelocBaseExprEPKNS_15MachineFunctionEjRNS_9MCContextE\", \"llvm::X86TargetLowering::getPICJumpTableRelocBaseExpr(llvm::MachineFunction const*, unsigned int, llvm::MCContext&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering20getFunctionAlignmentEPKNS_8FunctionE\", \"llvm::X86TargetLowering::getFunctionAlignment(llvm::Function const*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23findRepresentativeClassENS_3EVTE\", \"llvm::X86TargetLowering::findRepresentativeClass(llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering19getRegPressureLimitEPKNS_19TargetRegisterClassERNS_15MachineFunctionE\", \"llvm::X86TargetLowering::getRegPressureLimit(llvm::TargetRegisterClass const*, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22getStackCookieLocationERjS1_\", \"llvm::X86TargetLowering::getStackCookieLocation(unsigned int&, unsigned int&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14CanLowerReturnENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERNS_11LLVMContextE\", \"llvm::X86TargetLowering::CanLowerReturn(llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::LLVMContext&) const\"},\n    {\"_Z9RetCC_X86jN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZNK4llvm17X86TargetLowering11LowerReturnENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS4_IS1_EENS_8DebugLocERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerReturn(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::DebugLoc, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering18isUsedByReturnOnlyEPNS_6SDNodeE\", \"llvm::X86TargetLowering::isUsedByReturnOnly(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerCallResultENS_7SDValueES1_NS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EE\", \"llvm::X86TargetLowering::LowerCallResult(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering16LowerMemArgumentENS_7SDValueENS_11CallingConv2IDERKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERKNS_11CCValAssignEPNS_16MachineFrameInfoEj\", \"llvm::X86TargetLowering::LowerMemArgument(llvm::SDValue, llvm::CallingConv::ID, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::CCValAssign const&, llvm::MachineFrameInfo*, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EE\", \"llvm::X86TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_Z6CC_X86jN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_X86(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZNK4llvm17X86TargetLowering27GetAlignedArgumentStackSizeEjRNS_12SelectionDAGE\", \"llvm::X86TargetLowering::GetAlignedArgumentStackSize(unsigned int, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering16LowerMemOpCallToENS_7SDValueES1_S1_NS_8DebugLocERNS_12SelectionDAGERKNS_11CCValAssignENS_3ISD10ArgFlagsTyE\", \"llvm::X86TargetLowering::LowerMemOpCallTo(llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::DebugLoc, llvm::SelectionDAG&, llvm::CCValAssign const&, llvm::ISD::ArgFlagsTy) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23EmitTailCallLoadRetAddrERNS_12SelectionDAGERNS_7SDValueES3_bbiNS_8DebugLocE\", \"llvm::X86TargetLowering::EmitTailCallLoadRetAddr(llvm::SelectionDAG&, llvm::SDValue&, llvm::SDValue, bool, bool, int, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm17X86TargetLowering26getReturnAddressFrameIndexERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::getReturnAddressFrameIndex(llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerCallENS_7SDValueES1_NS_11CallingConv2IDEbRbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS5_IS1_EERKNS5_INS6_8InputArgEEENS_8DebugLocERNS_12SelectionDAGERSB_\", \"llvm::X86TargetLowering::LowerCall(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, bool&, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering33IsEligibleForTailCallOptimizationENS_7SDValueENS_11CallingConv2IDEbbbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS4_IS1_EERKNS4_INS5_8InputArgEEERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::IsEligibleForTailCallOptimization(llvm::SDValue, llvm::CallingConv::ID, bool, bool, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::SelectionDAG&) const\"},\n    {\"_Z7getMOVLRN4llvm12SelectionDAGENS_8DebugLocENS_3EVTENS_7SDValueES4_\", \"getMOVL(llvm::SelectionDAG&, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZNK4llvm17X86TargetLowering18LowerGlobalAddressENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerGlobalAddress(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering19LowerExternalSymbolENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerExternalSymbol(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14createFastISelERNS_20FunctionLoweringInfoE\", \"llvm::X86TargetLowering::createFastISel(llvm::FunctionLoweringInfo&) const\"},\n    {\"_ZN4llvm3X8628isOffsetSuitableForCodeModelExNS_9CodeModel5ModelEb\", \"llvm::X86::isOffsetSuitableForCodeModel(long long, llvm::CodeModel::Model, bool)\"},\n    {\"_ZNK4llvm17X86TargetLowering12isFPImmLegalERKNS_7APFloatENS_3EVTE\", \"llvm::X86TargetLowering::isFPImmLegal(llvm::APFloat const&, llvm::EVT) const\"},\n    {\"_ZN4llvm3X8612isPSHUFDMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isPSHUFDMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isPSHUFHWMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isPSHUFHWMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isPSHUFLWMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isPSHUFLWMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isPALIGNRMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isPALIGNRMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_Z13isPALIGNRMaskRKN4llvm15SmallVectorImplIiEENS_3EVTEb\", \"isPALIGNRMask(llvm::SmallVectorImpl<int> const&, llvm::EVT, bool)\"},\n    {\"_ZN4llvm3X8611isSHUFPMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isSHUFPMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isMOVHLPSMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVHLPSMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8622isMOVHLPS_v_undef_MaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVHLPS_v_undef_Mask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8611isMOVLPMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVLPMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isMOVLHPSMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVLHPSMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8612isUNPCKLMaskEPNS_19ShuffleVectorSDNodeEb\", \"llvm::X86::isUNPCKLMask(llvm::ShuffleVectorSDNode*, bool)\"},\n    {\"_ZN4llvm3X8612isUNPCKHMaskEPNS_19ShuffleVectorSDNodeEb\", \"llvm::X86::isUNPCKHMask(llvm::ShuffleVectorSDNode*, bool)\"},\n    {\"_ZN4llvm3X8621isUNPCKL_v_undef_MaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isUNPCKL_v_undef_Mask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8621isUNPCKH_v_undef_MaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isUNPCKH_v_undef_Mask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8610isMOVLMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVLMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_Z10isMOVLMaskRKN4llvm15SmallVectorImplIiEENS_3EVTE\", \"isMOVLMask(llvm::SmallVectorImpl<int> const&, llvm::EVT)\"},\n    {\"_ZN4llvm3X8614isMOVSHDUPMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVSHDUPMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8614isMOVSLDUPMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVSLDUPMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8613isMOVDDUPMaskEPNS_19ShuffleVectorSDNodeE\", \"llvm::X86::isMOVDDUPMask(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm3X8619isVEXTRACTF128IndexEPNS_6SDNodeE\", \"llvm::X86::isVEXTRACTF128Index(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8618isVINSERTF128IndexEPNS_6SDNodeE\", \"llvm::X86::isVINSERTF128Index(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8623getShuffleSHUFImmediateEPNS_6SDNodeE\", \"llvm::X86::getShuffleSHUFImmediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8626getShufflePSHUFHWImmediateEPNS_6SDNodeE\", \"llvm::X86::getShufflePSHUFHWImmediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8626getShufflePSHUFLWImmediateEPNS_6SDNodeE\", \"llvm::X86::getShufflePSHUFLWImmediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8626getShufflePALIGNRImmediateEPNS_6SDNodeE\", \"llvm::X86::getShufflePALIGNRImmediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8631getExtractVEXTRACTF128ImmediateEPNS_6SDNodeE\", \"llvm::X86::getExtractVEXTRACTF128Immediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8629getInsertVINSERTF128ImmediateEPNS_6SDNodeE\", \"llvm::X86::getInsertVINSERTF128Immediate(llvm::SDNode*)\"},\n    {\"_ZN4llvm3X8610isZeroNodeENS_7SDValueE\", \"llvm::X86::isZeroNode(llvm::SDValue)\"},\n    {\"_Z19getShuffleScalarEltPN4llvm6SDNodeEiRNS_12SelectionDAGEj\", \"getShuffleScalarElt(llvm::SDNode*, int, llvm::SelectionDAG&, unsigned int)\"},\n    {\"_ZNK4llvm17X86TargetLowering22LowerAsSplatVectorLoadENS_7SDValueENS_3EVTENS_8DebugLocERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerAsSplatVectorLoad(llvm::SDValue, llvm::EVT, llvm::DebugLoc, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17LowerBUILD_VECTORENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerBUILD_VECTOR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z13getZeroVectorN4llvm3EVTEbRNS_12SelectionDAGENS_8DebugLocE\", \"getZeroVector(llvm::EVT, bool, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_Z27getShuffleVectorZeroOrUndefN4llvm7SDValueEjbbRNS_12SelectionDAGE\", \"getShuffleVectorZeroOrUndef(llvm::SDValue, unsigned int, bool, bool, llvm::SelectionDAG&)\"},\n    {\"_Z10getUnpacklRN4llvm12SelectionDAGENS_8DebugLocENS_3EVTENS_7SDValueES4_\", \"getUnpackl(llvm::SelectionDAG&, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_Z24EltsFromConsecutiveLoadsN4llvm3EVTERNS_15SmallVectorImplINS_7SDValueEEERNS_8DebugLocERNS_12SelectionDAGE\", \"EltsFromConsecutiveLoads(llvm::EVT, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::DebugLoc&, llvm::SelectionDAG&)\"},\n    {\"_ZNK4llvm17X86TargetLowering19LowerCONCAT_VECTORSENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerCONCAT_VECTORS(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering24LowerVECTOR_SHUFFLEv8i16ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVECTOR_SHUFFLEv8i16(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering19LowerVECTOR_SHUFFLEENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVECTOR_SHUFFLE(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z12getVZextMovLN4llvm3EVTES0_NS_7SDValueERNS_12SelectionDAGEPKNS_12X86SubtargetENS_8DebugLocE\", \"getVZextMovL(llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SelectionDAG&, llvm::X86Subtarget const*, llvm::DebugLoc)\"},\n    {\"_Z20CommuteVectorShufflePN4llvm19ShuffleVectorSDNodeERNS_12SelectionDAGE\", \"CommuteVectorShuffle(llvm::ShuffleVectorSDNode*, llvm::SelectionDAG&)\"},\n    {\"_ZNK4llvm17X86TargetLowering28LowerEXTRACT_VECTOR_ELT_SSE4ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerEXTRACT_VECTOR_ELT_SSE4(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23LowerEXTRACT_VECTOR_ELTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerEXTRACT_VECTOR_ELT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering27LowerINSERT_VECTOR_ELT_SSE4ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerINSERT_VECTOR_ELT_SSE4(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22LowerINSERT_VECTOR_ELTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerINSERT_VECTOR_ELT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z19Extract128BitVectorN4llvm7SDValueES0_RNS_12SelectionDAGENS_8DebugLocE\", \"Extract128BitVector(llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_Z18Insert128BitVectorN4llvm7SDValueES0_S0_RNS_12SelectionDAGENS_8DebugLocE\", \"Insert128BitVector(llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_ZNK4llvm17X86TargetLowering21LowerSCALAR_TO_VECTORENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerSCALAR_TO_VECTOR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22LowerEXTRACT_SUBVECTORENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerEXTRACT_SUBVECTOR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21LowerINSERT_SUBVECTORENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerINSERT_SUBVECTOR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17LowerConstantPoolENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerConstantPool(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerJumpTableENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerJumpTable(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17LowerBlockAddressENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerBlockAddress(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering18LowerGlobalAddressEPKNS_11GlobalValueENS_8DebugLocExRNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerGlobalAddress(llvm::GlobalValue const*, llvm::DebugLoc, long long, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21LowerGlobalTLSAddressENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerGlobalTLSAddress(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10LowerShiftENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerShift(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerSINT_TO_FPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerSINT_TO_FP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9BuildFILDENS_7SDValueENS_3EVTES1_S1_RNS_12SelectionDAGE\", \"llvm::X86TargetLowering::BuildFILD(llvm::SDValue, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering19LowerUINT_TO_FP_i64ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerUINT_TO_FP_i64(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering19LowerUINT_TO_FP_i32ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerUINT_TO_FP_i32(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerUINT_TO_FPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerUINT_TO_FP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15FP_TO_INTHelperENS_7SDValueERNS_12SelectionDAGEb\", \"llvm::X86TargetLowering::FP_TO_INTHelper(llvm::SDValue, llvm::SelectionDAG&, bool) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerFP_TO_SINTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFP_TO_SINT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerFP_TO_UINTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFP_TO_UINT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerFABSENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFABS(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerFNEGENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFNEG(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerFCOPYSIGNENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFCOPYSIGN(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering8EmitTestENS_7SDValueEjRNS_12SelectionDAGE\", \"llvm::X86TargetLowering::EmitTest(llvm::SDValue, unsigned int, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering7EmitCmpENS_7SDValueES1_jRNS_12SelectionDAGE\", \"llvm::X86TargetLowering::EmitCmp(llvm::SDValue, llvm::SDValue, unsigned int, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerToBTENS_7SDValueENS_3ISD8CondCodeENS_8DebugLocERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerToBT(llvm::SDValue, llvm::ISD::CondCode, llvm::DebugLoc, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10LowerSETCCENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerSETCC(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z14TranslateX86CCN4llvm3ISD8CondCodeEbRNS_7SDValueES3_RNS_12SelectionDAGE\", \"TranslateX86CC(llvm::ISD::CondCode, bool, llvm::SDValue&, llvm::SDValue&, llvm::SelectionDAG&)\"},\n    {\"_ZNK4llvm17X86TargetLowering11LowerVSETCCENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVSETCC(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering11LowerSELECTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerSELECT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering11LowerBRCONDENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerBRCOND(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23LowerDYNAMIC_STACKALLOCENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerDYNAMIC_STACKALLOC(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering12LowerVASTARTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVASTART(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10LowerVAARGENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVAARG(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering11LowerVACOPYENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerVACOPY(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23LowerINTRINSIC_WO_CHAINENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerINTRINSIC_WO_CHAIN(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerRETURNADDRENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerRETURNADDR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerFRAMEADDRENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFRAMEADDR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering25LowerFRAME_TO_ARGS_OFFSETENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFRAME_TO_ARGS_OFFSET(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerEH_RETURNENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerEH_RETURN(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerTRAMPOLINEENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerTRAMPOLINE(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering16LowerFLT_ROUNDS_ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerFLT_ROUNDS_(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerCTLZENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerCTLZ(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9LowerCTTZENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerCTTZ(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerMUL_V2I64ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerMUL_V2I64(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering8LowerSHLENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerSHL(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10LowerXALUOENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerXALUO(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15LowerMEMBARRIERENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerMEMBARRIER(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering13LowerCMP_SWAPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerCMP_SWAP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21LowerREADCYCLECOUNTERENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerREADCYCLECOUNTER(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering12LowerBITCASTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerBITCAST(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering13LowerLOAD_SUBENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerLOAD_SUB(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14LowerOperationENS_7SDValueERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering23ReplaceATOMIC_BINARY_64EPNS_6SDNodeERNS_15SmallVectorImplINS_7SDValueEEERNS_12SelectionDAGEj\", \"llvm::X86TargetLowering::ReplaceATOMIC_BINARY_64(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering18ReplaceNodeResultsEPNS_6SDNodeERNS_15SmallVectorImplINS_7SDValueEEERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::ReplaceNodeResults(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17getTargetNodeNameEj\", \"llvm::X86TargetLowering::getTargetNodeName(unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21isLegalAddressingModeERKNS_14TargetLowering8AddrModeEPKNS_4TypeE\", \"llvm::X86TargetLowering::isLegalAddressingMode(llvm::TargetLowering::AddrMode const&, llvm::Type const*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14isTruncateFreeEPKNS_4TypeES3_\", \"llvm::X86TargetLowering::isTruncateFree(llvm::Type const*, llvm::Type const*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14isTruncateFreeENS_3EVTES1_\", \"llvm::X86TargetLowering::isTruncateFree(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10isZExtFreeEPKNS_4TypeES3_\", \"llvm::X86TargetLowering::isZExtFree(llvm::Type const*, llvm::Type const*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering10isZExtFreeENS_3EVTES1_\", \"llvm::X86TargetLowering::isZExtFree(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering21isNarrowingProfitableENS_3EVTES1_\", \"llvm::X86TargetLowering::isNarrowingProfitable(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering18isShuffleMaskLegalERKNS_15SmallVectorImplIiEENS_3EVTE\", \"llvm::X86TargetLowering::isShuffleMaskLegal(llvm::SmallVectorImpl<int> const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22isVectorClearMaskLegalERKNS_15SmallVectorImplIiEENS_3EVTE\", \"llvm::X86TargetLowering::isVectorClearMaskLegal(llvm::SmallVectorImpl<int> const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering35EmitAtomicBitwiseWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockEjjjjjjPNS_19TargetRegisterClassEb\", \"llvm::X86TargetLowering::EmitAtomicBitwiseWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, llvm::TargetRegisterClass*, bool) const\"},\n    {\"_ZNK4llvm17X86TargetLowering35EmitAtomicBit6432WithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockEjjjjb\", \"llvm::X86TargetLowering::EmitAtomicBit6432WithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int, unsigned int, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm17X86TargetLowering34EmitAtomicMinMaxWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockEj\", \"llvm::X86TargetLowering::EmitAtomicMinMaxWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering8EmitPCMPEPNS_12MachineInstrEPNS_17MachineBasicBlockEjb\", \"llvm::X86TargetLowering::EmitPCMP(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int, bool) const\"},\n    {\"_ZNK4llvm17X86TargetLowering11EmitMonitorEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitMonitor(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering9EmitMwaitEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitMwait(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering29EmitVAARG64WithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitVAARG64WithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering40EmitVAStartSaveXMMRegsWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitVAStartSaveXMMRegsWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17EmitLoweredSelectEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitLoweredSelect(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering20EmitLoweredWinAllocaEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitLoweredWinAlloca(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering18EmitLoweredTLSCallEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitLoweredTLSCall(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering27EmitInstrWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::X86TargetLowering::EmitInstrWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm17addFrameReferenceERKNS_19MachineInstrBuilderEii\", \"llvm::addFrameReference(llvm::MachineInstrBuilder const&, int, int)\"},\n    {\"_ZNK4llvm17X86TargetLowering30computeMaskedBitsForTargetNodeENS_7SDValueERKNS_5APIntERS2_S5_RKNS_12SelectionDAGEj\", \"llvm::X86TargetLowering::computeMaskedBitsForTargetNode(llvm::SDValue, llvm::APInt const&, llvm::APInt&, llvm::APInt&, llvm::SelectionDAG const&, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering31ComputeNumSignBitsForTargetNodeENS_7SDValueEj\", \"llvm::X86TargetLowering::ComputeNumSignBitsForTargetNode(llvm::SDValue, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering14isGAPlusOffsetEPNS_6SDNodeERPKNS_11GlobalValueERx\", \"llvm::X86TargetLowering::isGAPlusOffset(llvm::SDNode*, llvm::GlobalValue const*&, long long&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17PerformDAGCombineEPNS_6SDNodeERNS_14TargetLowering15DAGCombinerInfoE\", \"llvm::X86TargetLowering::PerformDAGCombine(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering20isTypeDesirableForOpEjNS_3EVTE\", \"llvm::X86TargetLowering::isTypeDesirableForOp(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22IsDesirableToPromoteOpENS_7SDValueERNS_3EVTE\", \"llvm::X86TargetLowering::IsDesirableToPromoteOp(llvm::SDValue, llvm::EVT&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering15ExpandInlineAsmEPNS_8CallInstE\", \"llvm::X86TargetLowering::ExpandInlineAsm(llvm::CallInst*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering17getConstraintTypeERKSs\", \"llvm::X86TargetLowering::getConstraintType(std::string const&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering30getSingleConstraintMatchWeightERNS_14TargetLowering14AsmOperandInfoEPKc\", \"llvm::X86TargetLowering::getSingleConstraintMatchWeight(llvm::TargetLowering::AsmOperandInfo&, char const*) const\"},\n    {\"_ZNK4llvm17X86TargetLowering16LowerXConstraintENS_3EVTE\", \"llvm::X86TargetLowering::LowerXConstraint(llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering28LowerAsmOperandForConstraintENS_7SDValueEcRSt6vectorIS1_SaIS1_EERNS_12SelectionDAGE\", \"llvm::X86TargetLowering::LowerAsmOperandForConstraint(llvm::SDValue, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17X86TargetLowering33getRegClassForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::X86TargetLowering::getRegClassForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering28getRegForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::X86TargetLowering::getRegForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_Z10GetTLSADDRRN4llvm12SelectionDAGENS_7SDValueEPNS_19GlobalAddressSDNodeEPS2_NS_3EVTEjh\", \"GetTLSADDR(llvm::SelectionDAG&, llvm::SDValue, llvm::GlobalAddressSDNode*, llvm::SDValue*, llvm::EVT, unsigned int, unsigned char)\"},\n    {\"_Z17MayFoldVectorLoadN4llvm7SDValueE\", \"MayFoldVectorLoad(llvm::SDValue)\"},\n    {\"_Z24RewriteAsNarrowerShufflePN4llvm19ShuffleVectorSDNodeERNS_12SelectionDAGENS_8DebugLocE\", \"RewriteAsNarrowerShuffle(llvm::ShuffleVectorSDNode*, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_Z16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_7SDValueEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::SDValue>::resize(unsigned int)\"},\n    {\"_ZN4llvm8SmallSetINS_7SDValueELj8EE6insertERKS1_\", \"llvm::SmallSet<llvm::SDValue, 8u>::insert(llvm::SDValue const&)\"},\n    {\"_ZN4llvm5APInt10getBitsSetEjjj\", \"llvm::APInt::getBitsSet(unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm3EVT6bitsLTES0_\", \"llvm::EVT::bitsLT(llvm::EVT) const\"},\n    {\"_ZNK4llvm19MachineInstrBuilder7addDispERKNS_14MachineOperandEx\", \"llvm::MachineInstrBuilder::addDisp(llvm::MachineOperand const&, long long) const\"},\n    {\"_ZN4llvm5APInt14getHighBitsSetEjj\", \"llvm::APInt::getHighBitsSet(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm11SmallVectorIjLj4EEC2EjRKj\", \"llvm::SmallVector<unsigned int, 4u>::SmallVector(unsigned int, unsigned int const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm7SDValueES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1_\", \"std::_Rb_tree<llvm::SDValue, llvm::SDValue, std::_Identity<llvm::SDValue>, std::less<llvm::SDValue>, std::allocator<llvm::SDValue> >::_M_insert_unique(llvm::SDValue const&)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm14ConstraintInfoESaIS2_EED2Ev\", \"std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >::~vector()\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm17SubConstraintInfoESaIS2_EED2Ev\", \"std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> >::~vector()\"},\n    {\"_ZN4llvm5APInt13getLowBitsSetEjj\", \"llvm::APInt::getLowBitsSet(unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm5APIntplEy\", \"llvm::APInt::operator+(unsigned long long) const\"},\n    {\"_ZN4llvm5APInt17getSignedMinValueEj\", \"llvm::APInt::getSignedMinValue(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIiiEE6resizeEj\", \"llvm::SmallVectorImpl<std::pair<int, int> >::resize(unsigned int)\"},\n    {\"_ZN4llvm11SmallVectorIiLj8EEC2EjRKi\", \"llvm::SmallVector<int, 8u>::SmallVector(unsigned int, int const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm7SDValueES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E\", \"std::_Rb_tree<llvm::SDValue, llvm::SDValue, std::_Identity<llvm::SDValue>, std::less<llvm::SDValue>, std::allocator<llvm::SDValue> >::_M_erase(std::_Rb_tree_node<llvm::SDValue>*)\"},\n    {\"_ZNSt6vectorIN4llvm7APFloatESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::APFloat, std::allocator<llvm::APFloat> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::APFloat*, std::vector<llvm::APFloat, std::allocator<llvm::APFloat> > >, llvm::APFloat const&)\"},\n    {\"_ZN4llvm28TargetLoweringObjectFileCOFFD1Ev\", \"llvm::TargetLoweringObjectFileCOFF::~TargetLoweringObjectFileCOFF()\"},\n    {\"_ZN4llvm28TargetLoweringObjectFileCOFFD0Ev\", \"llvm::TargetLoweringObjectFileCOFF::~TargetLoweringObjectFileCOFF()\"},\n    {\"_ZNK4llvm28TargetLoweringObjectFileCOFF17getDrectveSectionEv\", \"llvm::TargetLoweringObjectFileCOFF::getDrectveSection() const\"},\n    {\"_ZN4llvm12X86InstrInfoC1ERNS_16X86TargetMachineE\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)\"},\n    {\"_ZN4llvm12X86InstrInfoC2ERNS_16X86TargetMachineE\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)\"},\n    {\"_ZNK4llvm12X86InstrInfo21isCoalescableExtInstrERKNS_12MachineInstrERjS4_S4_\", \"llvm::X86InstrInfo::isCoalescableExtInstr(llvm::MachineInstr const&, unsigned int&, unsigned int&, unsigned int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo14isFrameOperandEPKNS_12MachineInstrEjRi\", \"llvm::X86InstrInfo::isFrameOperand(llvm::MachineInstr const*, unsigned int, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo19isLoadFromStackSlotEPKNS_12MachineInstrERi\", \"llvm::X86InstrInfo::isLoadFromStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo25isLoadFromStackSlotPostFEEPKNS_12MachineInstrERi\", \"llvm::X86InstrInfo::isLoadFromStackSlotPostFE(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo20hasLoadFromStackSlotEPKNS_12MachineInstrERPKNS_17MachineMemOperandERi\", \"llvm::X86InstrInfo::hasLoadFromStackSlot(llvm::MachineInstr const*, llvm::MachineMemOperand const*&, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo18isStoreToStackSlotEPKNS_12MachineInstrERi\", \"llvm::X86InstrInfo::isStoreToStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo24isStoreToStackSlotPostFEEPKNS_12MachineInstrERi\", \"llvm::X86InstrInfo::isStoreToStackSlotPostFE(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo19hasStoreToStackSlotEPKNS_12MachineInstrERPKNS_17MachineMemOperandERi\", \"llvm::X86InstrInfo::hasStoreToStackSlot(llvm::MachineInstr const*, llvm::MachineMemOperand const*&, int&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo33isReallyTriviallyReMaterializableEPKNS_12MachineInstrEPNS_13AliasAnalysisE\", \"llvm::X86InstrInfo::isReallyTriviallyReMaterializable(llvm::MachineInstr const*, llvm::AliasAnalysis*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo13reMaterializeERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjjPKS4_RKNS_18TargetRegisterInfoE\", \"llvm::X86InstrInfo::reMaterialize(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, unsigned int, llvm::MachineInstr const*, llvm::TargetRegisterInfo const&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo28convertToThreeAddressWithLEAEjRNS_14ilist_iteratorINS_17MachineBasicBlockEEERNS1_INS_12MachineInstrEEEPNS_13LiveVariablesE\", \"llvm::X86InstrInfo::convertToThreeAddressWithLEA(unsigned int, llvm::ilist_iterator<llvm::MachineBasicBlock>&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::LiveVariables*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo21convertToThreeAddressERNS_14ilist_iteratorINS_17MachineBasicBlockEEERNS1_INS_12MachineInstrEEEPNS_13LiveVariablesE\", \"llvm::X86InstrInfo::convertToThreeAddress(llvm::ilist_iterator<llvm::MachineBasicBlock>&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::LiveVariables*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo18commuteInstructionEPNS_12MachineInstrEb\", \"llvm::X86InstrInfo::commuteInstruction(llvm::MachineInstr*, bool) const\"},\n    {\"_ZN4llvm3X8621GetCondBranchFromCondENS0_8CondCodeE\", \"llvm::X86::GetCondBranchFromCond(llvm::X86::CondCode)\"},\n    {\"_ZN4llvm3X8626GetOppositeBranchConditionENS0_8CondCodeE\", \"llvm::X86::GetOppositeBranchCondition(llvm::X86::CondCode)\"},\n    {\"_ZNK4llvm12X86InstrInfo24isUnpredicatedTerminatorEPKNS_12MachineInstrE\", \"llvm::X86InstrInfo::isUnpredicatedTerminator(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo13AnalyzeBranchERNS_17MachineBasicBlockERPS1_S4_RNS_15SmallVectorImplINS_14MachineOperandEEEb\", \"llvm::X86InstrInfo::AnalyzeBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*&, llvm::MachineBasicBlock*&, llvm::SmallVectorImpl<llvm::MachineOperand>&, bool) const\"},\n    {\"_ZNK4llvm12X86InstrInfo12RemoveBranchERNS_17MachineBasicBlockE\", \"llvm::X86InstrInfo::RemoveBranch(llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo12InsertBranchERNS_17MachineBasicBlockEPS1_S3_RKNS_15SmallVectorImplINS_14MachineOperandEEENS_8DebugLocE\", \"llvm::X86InstrInfo::InsertBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm12X86InstrInfo11copyPhysRegERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjb\", \"llvm::X86InstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm12X86InstrInfo19storeRegToStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjbiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::X86InstrInfo::storeRegToStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, bool, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm17addFrameReferenceERKNS_19MachineInstrBuilderEii\", \"llvm::addFrameReference(llvm::MachineInstrBuilder const&, int, int)\"},\n    {\"_ZNK4llvm12X86InstrInfo14storeRegToAddrERNS_15MachineFunctionEjbRNS_15SmallVectorImplINS_14MachineOperandEEEPKNS_19TargetRegisterClassEPPNS_17MachineMemOperandESC_RNS3_IPNS_12MachineInstrEEE\", \"llvm::X86InstrInfo::storeRegToAddr(llvm::MachineFunction&, unsigned int, bool, llvm::SmallVectorImpl<llvm::MachineOperand>&, llvm::TargetRegisterClass const*, llvm::MachineMemOperand**, llvm::MachineMemOperand**, llvm::SmallVectorImpl<llvm::MachineInstr*>&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo20loadRegFromStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::X86InstrInfo::loadRegFromStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo15loadRegFromAddrERNS_15MachineFunctionEjRNS_15SmallVectorImplINS_14MachineOperandEEEPKNS_19TargetRegisterClassEPPNS_17MachineMemOperandESC_RNS3_IPNS_12MachineInstrEEE\", \"llvm::X86InstrInfo::loadRegFromAddr(llvm::MachineFunction&, unsigned int, llvm::SmallVectorImpl<llvm::MachineOperand>&, llvm::TargetRegisterClass const*, llvm::MachineMemOperand**, llvm::MachineMemOperand**, llvm::SmallVectorImpl<llvm::MachineInstr*>&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo24emitFrameIndexDebugValueERNS_15MachineFunctionEiyPKNS_6MDNodeENS_8DebugLocE\", \"llvm::X86InstrInfo::emitFrameIndexDebugValue(llvm::MachineFunction&, int, unsigned long long, llvm::MDNode const*, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm12X86InstrInfo21foldMemoryOperandImplERNS_15MachineFunctionEPNS_12MachineInstrEjRKNS_15SmallVectorImplINS_14MachineOperandEEEjj\", \"llvm::X86InstrInfo::foldMemoryOperandImpl(llvm::MachineFunction&, llvm::MachineInstr*, unsigned int, llvm::SmallVectorImpl<llvm::MachineOperand> const&, unsigned int, unsigned int) const\"},\n    {\"_Z10MakeM0InstRKN4llvm15TargetInstrInfoEjRKNS_15SmallVectorImplINS_14MachineOperandEEEPNS_12MachineInstrE\", \"MakeM0Inst(llvm::TargetInstrInfo const&, unsigned int, llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::MachineInstr*)\"},\n    {\"_ZNK4llvm12X86InstrInfo21foldMemoryOperandImplERNS_15MachineFunctionEPNS_12MachineInstrERKNS_15SmallVectorImplIjEEi\", \"llvm::X86InstrInfo::foldMemoryOperandImpl(llvm::MachineFunction&, llvm::MachineInstr*, llvm::SmallVectorImpl<unsigned int> const&, int) const\"},\n    {\"_ZNK4llvm12X86InstrInfo21foldMemoryOperandImplERNS_15MachineFunctionEPNS_12MachineInstrERKNS_15SmallVectorImplIjEES4_\", \"llvm::X86InstrInfo::foldMemoryOperandImpl(llvm::MachineFunction&, llvm::MachineInstr*, llvm::SmallVectorImpl<unsigned int> const&, llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo20canFoldMemoryOperandEPKNS_12MachineInstrERKNS_15SmallVectorImplIjEE\", \"llvm::X86InstrInfo::canFoldMemoryOperand(llvm::MachineInstr const*, llvm::SmallVectorImpl<unsigned int> const&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo19unfoldMemoryOperandERNS_15MachineFunctionEPNS_12MachineInstrEjbbRNS_15SmallVectorImplIS4_EE\", \"llvm::X86InstrInfo::unfoldMemoryOperand(llvm::MachineFunction&, llvm::MachineInstr*, unsigned int, bool, bool, llvm::SmallVectorImpl<llvm::MachineInstr*>&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo19unfoldMemoryOperandERNS_12SelectionDAGEPNS_6SDNodeERNS_15SmallVectorImplIS4_EE\", \"llvm::X86InstrInfo::unfoldMemoryOperand(llvm::SelectionDAG&, llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDNode*>&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo26getOpcodeAfterMemoryUnfoldEjbbPj\", \"llvm::X86InstrInfo::getOpcodeAfterMemoryUnfold(unsigned int, bool, bool, unsigned int*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo23areLoadsFromSameBasePtrEPNS_6SDNodeES2_RxS3_\", \"llvm::X86InstrInfo::areLoadsFromSameBasePtr(llvm::SDNode*, llvm::SDNode*, long long&, long long&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo23shouldScheduleLoadsNearEPNS_6SDNodeES2_xxj\", \"llvm::X86InstrInfo::shouldScheduleLoadsNear(llvm::SDNode*, llvm::SDNode*, long long, long long, unsigned int) const\"},\n    {\"_ZNK4llvm12X86InstrInfo22ReverseBranchConditionERNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::X86InstrInfo::ReverseBranchCondition(llvm::SmallVectorImpl<llvm::MachineOperand>&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo24isSafeToMoveRegClassDefsEPKNS_19TargetRegisterClassE\", \"llvm::X86InstrInfo::isSafeToMoveRegClassDefs(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZN4llvm12X86InstrInfo19isX86_64ExtendedRegEj\", \"llvm::X86InstrInfo::isX86_64ExtendedReg(unsigned int)\"},\n    {\"_ZNK4llvm12X86InstrInfo16getGlobalBaseRegEPNS_15MachineFunctionE\", \"llvm::X86InstrInfo::getGlobalBaseReg(llvm::MachineFunction*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo12GetSSEDomainEPKNS_12MachineInstrE\", \"llvm::X86InstrInfo::GetSSEDomain(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm12X86InstrInfo12SetSSEDomainEPNS_12MachineInstrEj\", \"llvm::X86InstrInfo::SetSSEDomain(llvm::MachineInstr*, unsigned int) const\"},\n    {\"_ZNK4llvm12X86InstrInfo21getNoopForMachoTargetERNS_6MCInstE\", \"llvm::X86InstrInfo::getNoopForMachoTarget(llvm::MCInst&) const\"},\n    {\"_ZNK4llvm12X86InstrInfo21hasHighOperandLatencyEPKNS_18InstrItineraryDataEPKNS_19MachineRegisterInfoEPKNS_12MachineInstrEjS9_j\", \"llvm::X86InstrInfo::hasHighOperandLatency(llvm::InstrItineraryData const*, llvm::MachineRegisterInfo const*, llvm::MachineInstr const*, unsigned int, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZN4llvm23createGlobalBaseRegPassEv\", \"llvm::createGlobalBaseRegPass()\"},\n    {\"_ZN12_GLOBAL__N_14CGBRD1Ev\", \"(anonymous namespace)::CGBR::~CGBR()\"},\n    {\"_ZN12_GLOBAL__N_14CGBRD0Ev\", \"(anonymous namespace)::CGBR::~CGBR()\"},\n    {\"_ZNK12_GLOBAL__N_14CGBR11getPassNameEv\", \"(anonymous namespace)::CGBR::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_14CGBR16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::CGBR::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14CGBR20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::CGBR::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_Z21getLoadStoreRegOpcodejPKN4llvm19TargetRegisterClassEbRKNS_13TargetMachineEb\", \"getLoadStoreRegOpcode(unsigned int, llvm::TargetRegisterClass const*, bool, llvm::TargetMachine const&, bool)\"},\n    {\"_ZN4llvm22X86MachineFunctionInfoD1Ev\", \"llvm::X86MachineFunctionInfo::~X86MachineFunctionInfo()\"},\n    {\"_ZN4llvm22X86MachineFunctionInfoD0Ev\", \"llvm::X86MachineFunctionInfo::~X86MachineFunctionInfo()\"},\n    {\"_ZNSt6vectorIN4llvm3EVTESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::EVT, std::allocator<llvm::EVT> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::EVT*, std::vector<llvm::EVT, std::allocator<llvm::EVT> > >, llvm::EVT const&)\"},\n    {\"_ZNSt6vectorIN4llvm7SDValueESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SDValue*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > >, llvm::SDValue const&)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIjjENS_12DenseMapInfoIjEENS3_IS2_EEE16InsertIntoBucketERKjRKS2_PS1_IjS2_E\", \"llvm::DenseMap<unsigned int, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::InsertIntoBucket(unsigned int const&, std::pair<unsigned int, unsigned int> const&, std::pair<unsigned int, std::pair<unsigned int, unsigned int> >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIjjENS_12DenseMapInfoIjEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, llvm::MachineInstr* const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_14MachineOperandELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::MachineOperand, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm19MachineFunctionPassD1Ev\", \"llvm::MachineFunctionPass::~MachineFunctionPass()\"},\n    {\"_ZN4llvm19MachineFunctionPassD0Ev\", \"llvm::MachineFunctionPass::~MachineFunctionPass()\"},\n    {\"_ZN4llvm12FunctionPassD1Ev\", \"llvm::FunctionPass::~FunctionPass()\"},\n    {\"_ZN4llvm12FunctionPassD0Ev\", \"llvm::FunctionPass::~FunctionPass()\"},\n    {\"_ZN4llvm10X86JITInfo29replaceMachineCodeForFunctionEPvS1_\", \"llvm::X86JITInfo::replaceMachineCodeForFunction(void*, void*)\"},\n    {\"_ZN4llvm10X86JITInfo23getLazyResolverFunctionEPFPvS1_E\", \"llvm::X86JITInfo::getLazyResolverFunction(void* (*)(void*))\"},\n    {\"_ZN4llvm10X86JITInfoC1ERNS_16X86TargetMachineE\", \"llvm::X86JITInfo::X86JITInfo(llvm::X86TargetMachine&)\"},\n    {\"_ZN4llvm10X86JITInfoC2ERNS_16X86TargetMachineE\", \"llvm::X86JITInfo::X86JITInfo(llvm::X86TargetMachine&)\"},\n    {\"_ZN4llvm10X86JITInfo26emitGlobalValueIndirectSymEPKNS_11GlobalValueEPvRNS_14JITCodeEmitterE\", \"llvm::X86JITInfo::emitGlobalValueIndirectSym(llvm::GlobalValue const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm10X86JITInfo13getStubLayoutEv\", \"llvm::X86JITInfo::getStubLayout()\"},\n    {\"_ZN4llvm10X86JITInfo16emitFunctionStubEPKNS_8FunctionEPvRNS_14JITCodeEmitterE\", \"llvm::X86JITInfo::emitFunctionStub(llvm::Function const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm10X86JITInfo20getPICJumpTableEntryEmm\", \"llvm::X86JITInfo::getPICJumpTableEntry(unsigned long, unsigned long)\"},\n    {\"_ZN4llvm10X86JITInfo8relocateEPvPNS_17MachineRelocationEjPh\", \"llvm::X86JITInfo::relocate(void*, llvm::MachineRelocation*, unsigned int, unsigned char*)\"},\n    {\"_ZN4llvm10X86JITInfo25allocateThreadLocalMemoryEm\", \"llvm::X86JITInfo::allocateThreadLocalMemory(unsigned long)\"},\n    {\"_ZN4llvm18X86MCAsmInfoDarwinC1ERKNS_6TripleE\", \"llvm::X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(llvm::Triple const&)\"},\n    {\"_ZN4llvm18X86MCAsmInfoDarwinC2ERKNS_6TripleE\", \"llvm::X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(llvm::Triple const&)\"},\n    {\"_ZN4llvm15X86ELFMCAsmInfoC1ERKNS_6TripleE\", \"llvm::X86ELFMCAsmInfo::X86ELFMCAsmInfo(llvm::Triple const&)\"},\n    {\"_ZN4llvm15X86ELFMCAsmInfoC2ERKNS_6TripleE\", \"llvm::X86ELFMCAsmInfo::X86ELFMCAsmInfo(llvm::Triple const&)\"},\n    {\"_ZNK4llvm15X86ELFMCAsmInfo28getNonexecutableStackSectionERNS_9MCContextE\", \"llvm::X86ELFMCAsmInfo::getNonexecutableStackSection(llvm::MCContext&) const\"},\n    {\"_ZN4llvm16X86MCAsmInfoCOFFC1ERKNS_6TripleE\", \"llvm::X86MCAsmInfoCOFF::X86MCAsmInfoCOFF(llvm::Triple const&)\"},\n    {\"_ZN4llvm16X86MCAsmInfoCOFFC2ERKNS_6TripleE\", \"llvm::X86MCAsmInfoCOFF::X86MCAsmInfoCOFF(llvm::Triple const&)\"},\n    {\"_ZN4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEED1Ev\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::~opt()\"},\n    {\"_ZNK4llvm9MCAsmInfo18getDataASDirectiveEjj\", \"llvm::MCAsmInfo::getDataASDirective(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm15X86ELFMCAsmInfoD1Ev\", \"llvm::X86ELFMCAsmInfo::~X86ELFMCAsmInfo()\"},\n    {\"_ZN4llvm15X86ELFMCAsmInfoD0Ev\", \"llvm::X86ELFMCAsmInfo::~X86ELFMCAsmInfo()\"},\n    {\"_ZN4llvm16X86MCAsmInfoCOFFD1Ev\", \"llvm::X86MCAsmInfoCOFF::~X86MCAsmInfoCOFF()\"},\n    {\"_ZN4llvm16X86MCAsmInfoCOFFD0Ev\", \"llvm::X86MCAsmInfoCOFF::~X86MCAsmInfoCOFF()\"},\n    {\"_ZNK4llvm9MCAsmInfo28getNonexecutableStackSectionERNS_9MCContextE\", \"llvm::MCAsmInfo::getNonexecutableStackSection(llvm::MCContext&) const\"},\n    {\"_ZN4llvm18X86MCAsmInfoDarwinD1Ev\", \"llvm::X86MCAsmInfoDarwin::~X86MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm18X86MCAsmInfoDarwinD0Ev\", \"llvm::X86MCAsmInfoDarwin::~X86MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm15MCAsmInfoDarwinD1Ev\", \"llvm::MCAsmInfoDarwin::~MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm15MCAsmInfoDarwinD0Ev\", \"llvm::MCAsmInfoDarwin::~MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm13MCAsmInfoCOFFD1Ev\", \"llvm::MCAsmInfoCOFF::~MCAsmInfoCOFF()\"},\n    {\"_ZN4llvm13MCAsmInfoCOFFD0Ev\", \"llvm::MCAsmInfoCOFF::~MCAsmInfoCOFF()\"},\n    {\"_ZN4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEE16handleOccurrenceEjNS_9StringRefES6_\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEE14getOptionWidthEv\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEE15printOptionInfoEm\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEED0Ev\", \"llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserI17AsmWriterFlavorTyE5parseERNS0_6OptionENS_9StringRefES6_RS2_\", \"llvm::cl::parser<AsmWriterFlavorTy>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, AsmWriterFlavorTy&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optI17AsmWriterFlavorTyLb0ENS0_6parserIS5_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> > >(llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserI17AsmWriterFlavorTyE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<AsmWriterFlavorTy>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserI17AsmWriterFlavorTyED1Ev\", \"llvm::cl::parser<AsmWriterFlavorTy>::~parser()\"},\n    {\"_ZN4llvm2cl6parserI17AsmWriterFlavorTyED0Ev\", \"llvm::cl::parser<AsmWriterFlavorTy>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserI17AsmWriterFlavorTyE13getNumOptionsEv\", \"llvm::cl::parser<AsmWriterFlavorTy>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserI17AsmWriterFlavorTyE9getOptionEj\", \"llvm::cl::parser<AsmWriterFlavorTy>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserI17AsmWriterFlavorTyE14getDescriptionEj\", \"llvm::cl::parser<AsmWriterFlavorTy>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm25createX86_32MCCodeEmitterERKNS_6TargetERNS_13TargetMachineERNS_9MCContextE\", \"llvm::createX86_32MCCodeEmitter(llvm::Target const&, llvm::TargetMachine&, llvm::MCContext&)\"},\n    {\"_ZN4llvm25createX86_64MCCodeEmitterERKNS_6TargetERNS_13TargetMachineERNS_9MCContextE\", \"llvm::createX86_64MCCodeEmitter(llvm::Target const&, llvm::TargetMachine&, llvm::MCContext&)\"},\n    {\"_ZN12_GLOBAL__N_116X86MCCodeEmitterD1Ev\", \"(anonymous namespace)::X86MCCodeEmitter::~X86MCCodeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_116X86MCCodeEmitterD0Ev\", \"(anonymous namespace)::X86MCCodeEmitter::~X86MCCodeEmitter()\"},\n    {\"_ZNK12_GLOBAL__N_116X86MCCodeEmitter17EncodeInstructionERKN4llvm6MCInstERNS1_11raw_ostreamERNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::X86MCCodeEmitter::EncodeInstruction(llvm::MCInst const&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116X86MCCodeEmitter13EmitImmediateERKN4llvm9MCOperandEjNS1_11MCFixupKindERjRNS1_11raw_ostreamERNS1_15SmallVectorImplINS1_7MCFixupEEEi\", \"(anonymous namespace)::X86MCCodeEmitter::EmitImmediate(llvm::MCOperand const&, unsigned int, llvm::MCFixupKind, unsigned int&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&, int) const\"},\n    {\"_ZNK12_GLOBAL__N_116X86MCCodeEmitter16EmitMemModRMByteERKN4llvm6MCInstEjjyRjRNS1_11raw_ostreamERNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::X86MCCodeEmitter::EmitMemModRMByte(llvm::MCInst const&, unsigned int, unsigned int, unsigned long long, unsigned int&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116X86MCCodeEmitter25EmitSegmentOverridePrefixEyRjiRKN4llvm6MCInstERNS2_11raw_ostreamE\", \"(anonymous namespace)::X86MCCodeEmitter::EmitSegmentOverridePrefix(unsigned long long, unsigned int&, int, llvm::MCInst const&, llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm14X86MCInstLowerC1EPNS_7ManglerERKNS_15MachineFunctionERNS_13X86AsmPrinterE\", \"llvm::X86MCInstLower::X86MCInstLower(llvm::Mangler*, llvm::MachineFunction const&, llvm::X86AsmPrinter&)\"},\n    {\"_ZN4llvm14X86MCInstLowerC2EPNS_7ManglerERKNS_15MachineFunctionERNS_13X86AsmPrinterE\", \"llvm::X86MCInstLower::X86MCInstLower(llvm::Mangler*, llvm::MachineFunction const&, llvm::X86AsmPrinter&)\"},\n    {\"_ZNK4llvm14X86MCInstLower11getMachOMMIEv\", \"llvm::X86MCInstLower::getMachOMMI() const\"},\n    {\"_ZNK4llvm14X86MCInstLower20GetSymbolFromOperandERKNS_14MachineOperandE\", \"llvm::X86MCInstLower::GetSymbolFromOperand(llvm::MachineOperand const&) const\"},\n    {\"_ZNK4llvm14X86MCInstLower18LowerSymbolOperandERKNS_14MachineOperandEPNS_8MCSymbolE\", \"llvm::X86MCInstLower::LowerSymbolOperand(llvm::MachineOperand const&, llvm::MCSymbol*) const\"},\n    {\"_ZNK4llvm14X86MCInstLower5LowerEPKNS_12MachineInstrERNS_6MCInstE\", \"llvm::X86MCInstLower::Lower(llvm::MachineInstr const*, llvm::MCInst&) const\"},\n    {\"_Z21SimplifyShortMoveFormRN4llvm13X86AsmPrinterERNS_6MCInstEj\", \"SimplifyShortMoveForm(llvm::X86AsmPrinter&, llvm::MCInst&, unsigned int)\"},\n    {\"_Z20SimplifyShortImmFormRN4llvm6MCInstEj\", \"SimplifyShortImmForm(llvm::MCInst&, unsigned int)\"},\n    {\"_ZN4llvm13X86AsmPrinter15EmitInstructionEPKNS_12MachineInstrE\", \"llvm::X86AsmPrinter::EmitInstruction(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIcE6insertIPKcEEPcS5_T_S6_\", \"char* llvm::SmallVectorImpl<char>::insert<char const*>(char*, char const*, char const*)\"},\n    {\"_ZN4llvm25createX86MachObjectWriterERNS_11raw_ostreamEbjj\", \"llvm::createX86MachObjectWriter(llvm::raw_ostream&, bool, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_119X86MachObjectWriterD1Ev\", \"(anonymous namespace)::X86MachObjectWriter::~X86MachObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_119X86MachObjectWriterD0Ev\", \"(anonymous namespace)::X86MachObjectWriter::~X86MachObjectWriter()\"},\n    {\"_ZN4llvm15X86RegisterInfoC1ERNS_16X86TargetMachineERKNS_15TargetInstrInfoE\", \"llvm::X86RegisterInfo::X86RegisterInfo(llvm::X86TargetMachine&, llvm::TargetInstrInfo const&)\"},\n    {\"_ZN4llvm15X86RegisterInfoC2ERNS_16X86TargetMachineERKNS_15TargetInstrInfoE\", \"llvm::X86RegisterInfo::X86RegisterInfo(llvm::X86TargetMachine&, llvm::TargetInstrInfo const&)\"},\n    {\"_ZN4llvm18X86GenRegisterInfoC2Eii\", \"llvm::X86GenRegisterInfo::X86GenRegisterInfo(int, int)\"},\n    {\"_ZNK4llvm15X86RegisterInfo14getDwarfRegNumEjb\", \"llvm::X86RegisterInfo::getDwarfRegNum(unsigned int, bool) const\"},\n    {\"_ZNK4llvm18X86GenRegisterInfo18getDwarfRegNumFullEjj\", \"llvm::X86GenRegisterInfo::getDwarfRegNumFull(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm15X86RegisterInfo12getX86RegNumEj\", \"llvm::X86RegisterInfo::getX86RegNum(unsigned int)\"},\n    {\"_ZNK4llvm15X86RegisterInfo24getMatchingSuperRegClassEPKNS_19TargetRegisterClassES3_j\", \"llvm::X86RegisterInfo::getMatchingSuperRegClass(llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*, unsigned int) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo18getPointerRegClassEj\", \"llvm::X86RegisterInfo::getPointerRegClass(unsigned int) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo20getCrossCopyRegClassEPKNS_19TargetRegisterClassE\", \"llvm::X86RegisterInfo::getCrossCopyRegClass(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionE\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo15getReservedRegsERKNS_15MachineFunctionE\", \"llvm::X86RegisterInfo::getReservedRegs(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo15canRealignStackERKNS_15MachineFunctionE\", \"llvm::X86RegisterInfo::canRealignStack(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo21needsStackRealignmentERKNS_15MachineFunctionE\", \"llvm::X86RegisterInfo::needsStackRealignment(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo20hasReservedSpillSlotERKNS_15MachineFunctionEjRi\", \"llvm::X86RegisterInfo::hasReservedSpillSlot(llvm::MachineFunction const&, unsigned int, int&) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo29eliminateCallFramePseudoInstrERNS_15MachineFunctionERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::X86RegisterInfo::eliminateCallFramePseudoInstr(llvm::MachineFunction&, llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo19eliminateFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEiPNS_12RegScavengerE\", \"llvm::X86RegisterInfo::eliminateFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, int, llvm::RegScavenger*) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo13getRARegisterEv\", \"llvm::X86RegisterInfo::getRARegister() const\"},\n    {\"_ZNK4llvm15X86RegisterInfo16getFrameRegisterERKNS_15MachineFunctionE\", \"llvm::X86RegisterInfo::getFrameRegister(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm15X86RegisterInfo22getEHExceptionRegisterEv\", \"llvm::X86RegisterInfo::getEHExceptionRegister() const\"},\n    {\"_ZNK4llvm15X86RegisterInfo20getEHHandlerRegisterEv\", \"llvm::X86RegisterInfo::getEHHandlerRegister() const\"},\n    {\"_ZN4llvm22getX86SubSuperRegisterEjNS_3EVTEb\", \"llvm::getX86SubSuperRegister(unsigned int, llvm::EVT, bool)\"},\n    {\"_ZN4llvm3X868CCRClassC1Ev\", \"llvm::X86::CCRClass::CCRClass()\"},\n    {\"_ZN4llvm3X8616CONTROL_REGClassC1Ev\", \"llvm::X86::CONTROL_REGClass::CONTROL_REGClass()\"},\n    {\"_ZN4llvm3X8614DEBUG_REGClassC1Ev\", \"llvm::X86::DEBUG_REGClass::DEBUG_REGClass()\"},\n    {\"_ZN4llvm3X869FR32ClassC1Ev\", \"llvm::X86::FR32Class::FR32Class()\"},\n    {\"_ZN4llvm3X869FR64ClassC1Ev\", \"llvm::X86::FR64Class::FR64Class()\"},\n    {\"_ZN4llvm3X869GR16ClassC1Ev\", \"llvm::X86::GR16Class::GR16Class()\"},\n    {\"_ZN4llvm3X8614GR16_ABCDClassC1Ev\", \"llvm::X86::GR16_ABCDClass::GR16_ABCDClass()\"},\n    {\"_ZN4llvm3X8615GR16_NOREXClassC1Ev\", \"llvm::X86::GR16_NOREXClass::GR16_NOREXClass()\"},\n    {\"_ZN4llvm3X869GR32ClassC1Ev\", \"llvm::X86::GR32Class::GR32Class()\"},\n    {\"_ZN4llvm3X8614GR32_ABCDClassC1Ev\", \"llvm::X86::GR32_ABCDClass::GR32_ABCDClass()\"},\n    {\"_ZN4llvm3X8612GR32_ADClassC1Ev\", \"llvm::X86::GR32_ADClass::GR32_ADClass()\"},\n    {\"_ZN4llvm3X8615GR32_NOREXClassC1Ev\", \"llvm::X86::GR32_NOREXClass::GR32_NOREXClass()\"},\n    {\"_ZN4llvm3X8614GR32_NOSPClassC1Ev\", \"llvm::X86::GR32_NOSPClass::GR32_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR32_TCClassC1Ev\", \"llvm::X86::GR32_TCClass::GR32_TCClass()\"},\n    {\"_ZN4llvm3X869GR64ClassC1Ev\", \"llvm::X86::GR64Class::GR64Class()\"},\n    {\"_ZN4llvm3X8614GR64_ABCDClassC1Ev\", \"llvm::X86::GR64_ABCDClass::GR64_ABCDClass()\"},\n    {\"_ZN4llvm3X8615GR64_NOREXClassC1Ev\", \"llvm::X86::GR64_NOREXClass::GR64_NOREXClass()\"},\n    {\"_ZN4llvm3X8620GR64_NOREX_NOSPClassC1Ev\", \"llvm::X86::GR64_NOREX_NOSPClass::GR64_NOREX_NOSPClass()\"},\n    {\"_ZN4llvm3X8614GR64_NOSPClassC1Ev\", \"llvm::X86::GR64_NOSPClass::GR64_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR64_TCClassC1Ev\", \"llvm::X86::GR64_TCClass::GR64_TCClass()\"},\n    {\"_ZN4llvm3X8615GR64_TCW64ClassC1Ev\", \"llvm::X86::GR64_TCW64Class::GR64_TCW64Class()\"},\n    {\"_ZN4llvm3X868GR8ClassC1Ev\", \"llvm::X86::GR8Class::GR8Class()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_HClassC1Ev\", \"llvm::X86::GR8_ABCD_HClass::GR8_ABCD_HClass()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_LClassC1Ev\", \"llvm::X86::GR8_ABCD_LClass::GR8_ABCD_LClass()\"},\n    {\"_ZN4llvm3X8614GR8_NOREXClassC1Ev\", \"llvm::X86::GR8_NOREXClass::GR8_NOREXClass()\"},\n    {\"_ZN4llvm3X8610RFP32ClassC1Ev\", \"llvm::X86::RFP32Class::RFP32Class()\"},\n    {\"_ZN4llvm3X8610RFP64ClassC1Ev\", \"llvm::X86::RFP64Class::RFP64Class()\"},\n    {\"_ZN4llvm3X8610RFP80ClassC1Ev\", \"llvm::X86::RFP80Class::RFP80Class()\"},\n    {\"_ZN4llvm3X868RSTClassC1Ev\", \"llvm::X86::RSTClass::RSTClass()\"},\n    {\"_ZN4llvm3X8616SEGMENT_REGClassC1Ev\", \"llvm::X86::SEGMENT_REGClass::SEGMENT_REGClass()\"},\n    {\"_ZN4llvm3X8610VR128ClassC1Ev\", \"llvm::X86::VR128Class::VR128Class()\"},\n    {\"_ZN4llvm3X8610VR256ClassC1Ev\", \"llvm::X86::VR256Class::VR256Class()\"},\n    {\"_ZN4llvm3X869VR64ClassC1Ev\", \"llvm::X86::VR64Class::VR64Class()\"},\n    {\"_ZNK4llvm3X868CCRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::CCRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X868CCRClassC2Ev\", \"llvm::X86::CCRClass::CCRClass()\"},\n    {\"_ZN4llvm3X8616CONTROL_REGClassC2Ev\", \"llvm::X86::CONTROL_REGClass::CONTROL_REGClass()\"},\n    {\"_ZN4llvm3X8614DEBUG_REGClassC2Ev\", \"llvm::X86::DEBUG_REGClass::DEBUG_REGClass()\"},\n    {\"_ZNK4llvm3X869FR32Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::FR32Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X869FR32ClassC2Ev\", \"llvm::X86::FR32Class::FR32Class()\"},\n    {\"_ZNK4llvm3X869FR64Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::FR64Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X869FR64ClassC2Ev\", \"llvm::X86::FR64Class::FR64Class()\"},\n    {\"_ZNK4llvm3X869GR16Class22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::X86::GR16Class::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3X869GR16Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR16Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X869GR16ClassC2Ev\", \"llvm::X86::GR16Class::GR16Class()\"},\n    {\"_ZN4llvm3X8614GR16_ABCDClassC2Ev\", \"llvm::X86::GR16_ABCDClass::GR16_ABCDClass()\"},\n    {\"_ZNK4llvm3X8615GR16_NOREXClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR16_NOREXClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8615GR16_NOREXClassC2Ev\", \"llvm::X86::GR16_NOREXClass::GR16_NOREXClass()\"},\n    {\"_ZNK4llvm3X869GR32Class22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::X86::GR32Class::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3X869GR32Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR32Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X869GR32ClassC2Ev\", \"llvm::X86::GR32Class::GR32Class()\"},\n    {\"_ZN4llvm3X8614GR32_ABCDClassC2Ev\", \"llvm::X86::GR32_ABCDClass::GR32_ABCDClass()\"},\n    {\"_ZN4llvm3X8612GR32_ADClassC2Ev\", \"llvm::X86::GR32_ADClass::GR32_ADClass()\"},\n    {\"_ZNK4llvm3X8615GR32_NOREXClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR32_NOREXClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8615GR32_NOREXClassC2Ev\", \"llvm::X86::GR32_NOREXClass::GR32_NOREXClass()\"},\n    {\"_ZNK4llvm3X8614GR32_NOSPClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::X86::GR32_NOSPClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3X8614GR32_NOSPClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR32_NOSPClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8614GR32_NOSPClassC2Ev\", \"llvm::X86::GR32_NOSPClass::GR32_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR32_TCClassC2Ev\", \"llvm::X86::GR32_TCClass::GR32_TCClass()\"},\n    {\"_ZNK4llvm3X869GR64Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR64Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X869GR64ClassC2Ev\", \"llvm::X86::GR64Class::GR64Class()\"},\n    {\"_ZN4llvm3X8614GR64_ABCDClassC2Ev\", \"llvm::X86::GR64_ABCDClass::GR64_ABCDClass()\"},\n    {\"_ZNK4llvm3X8615GR64_NOREXClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR64_NOREXClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8615GR64_NOREXClassC2Ev\", \"llvm::X86::GR64_NOREXClass::GR64_NOREXClass()\"},\n    {\"_ZNK4llvm3X8620GR64_NOREX_NOSPClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR64_NOREX_NOSPClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8620GR64_NOREX_NOSPClassC2Ev\", \"llvm::X86::GR64_NOREX_NOSPClass::GR64_NOREX_NOSPClass()\"},\n    {\"_ZNK4llvm3X8614GR64_NOSPClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR64_NOSPClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8614GR64_NOSPClassC2Ev\", \"llvm::X86::GR64_NOSPClass::GR64_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR64_TCClassC2Ev\", \"llvm::X86::GR64_TCClass::GR64_TCClass()\"},\n    {\"_ZN4llvm3X8615GR64_TCW64ClassC2Ev\", \"llvm::X86::GR64_TCW64Class::GR64_TCW64Class()\"},\n    {\"_ZNK4llvm3X868GR8Class22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::X86::GR8Class::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3X868GR8Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR8Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X868GR8ClassC2Ev\", \"llvm::X86::GR8Class::GR8Class()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_HClassC2Ev\", \"llvm::X86::GR8_ABCD_HClass::GR8_ABCD_HClass()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_LClassC2Ev\", \"llvm::X86::GR8_ABCD_LClass::GR8_ABCD_LClass()\"},\n    {\"_ZNK4llvm3X8614GR8_NOREXClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::X86::GR8_NOREXClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3X8614GR8_NOREXClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::GR8_NOREXClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8614GR8_NOREXClassC2Ev\", \"llvm::X86::GR8_NOREXClass::GR8_NOREXClass()\"},\n    {\"_ZN4llvm3X8610RFP32ClassC2Ev\", \"llvm::X86::RFP32Class::RFP32Class()\"},\n    {\"_ZN4llvm3X8610RFP64ClassC2Ev\", \"llvm::X86::RFP64Class::RFP64Class()\"},\n    {\"_ZN4llvm3X8610RFP80ClassC2Ev\", \"llvm::X86::RFP80Class::RFP80Class()\"},\n    {\"_ZNK4llvm3X868RSTClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::RSTClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X868RSTClassC2Ev\", \"llvm::X86::RSTClass::RSTClass()\"},\n    {\"_ZN4llvm3X8616SEGMENT_REGClassC2Ev\", \"llvm::X86::SEGMENT_REGClass::SEGMENT_REGClass()\"},\n    {\"_ZNK4llvm3X8610VR128Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::VR128Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8610VR128ClassC2Ev\", \"llvm::X86::VR128Class::VR128Class()\"},\n    {\"_ZNK4llvm3X8610VR256Class20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::X86::VR256Class::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3X8610VR256ClassC2Ev\", \"llvm::X86::VR256Class::VR256Class()\"},\n    {\"_ZN4llvm3X869VR64ClassC2Ev\", \"llvm::X86::VR64Class::VR64Class()\"},\n    {\"_ZNK4llvm18X86GenRegisterInfo9getSubRegEjj\", \"llvm::X86GenRegisterInfo::getSubReg(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm18X86GenRegisterInfo14getSubRegIndexEjj\", \"llvm::X86GenRegisterInfo::getSubRegIndex(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm18X86GenRegisterInfo20composeSubRegIndicesEjj\", \"llvm::X86GenRegisterInfo::composeSubRegIndices(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm18X86GenRegisterInfoC1Eii\", \"llvm::X86GenRegisterInfo::X86GenRegisterInfo(int, int)\"},\n    {\"_ZN4llvm39createX86MaxStackAlignmentHeuristicPassEv\", \"llvm::createX86MaxStackAlignmentHeuristicPass()\"},\n    {\"_ZN12_GLOBAL__N_14MSAHD1Ev\", \"(anonymous namespace)::MSAH::~MSAH()\"},\n    {\"_ZN12_GLOBAL__N_14MSAHD0Ev\", \"(anonymous namespace)::MSAH::~MSAH()\"},\n    {\"_ZNK12_GLOBAL__N_14MSAH11getPassNameEv\", \"(anonymous namespace)::MSAH::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_14MSAH16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MSAH::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14MSAH20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MSAH::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3X868CCRClassD1Ev\", \"llvm::X86::CCRClass::~CCRClass()\"},\n    {\"_ZN4llvm3X8616CONTROL_REGClassD1Ev\", \"llvm::X86::CONTROL_REGClass::~CONTROL_REGClass()\"},\n    {\"_ZN4llvm3X8614DEBUG_REGClassD1Ev\", \"llvm::X86::DEBUG_REGClass::~DEBUG_REGClass()\"},\n    {\"_ZN4llvm3X869FR32ClassD1Ev\", \"llvm::X86::FR32Class::~FR32Class()\"},\n    {\"_ZN4llvm3X869FR64ClassD1Ev\", \"llvm::X86::FR64Class::~FR64Class()\"},\n    {\"_ZN4llvm3X869GR16ClassD1Ev\", \"llvm::X86::GR16Class::~GR16Class()\"},\n    {\"_ZN4llvm3X8614GR16_ABCDClassD1Ev\", \"llvm::X86::GR16_ABCDClass::~GR16_ABCDClass()\"},\n    {\"_ZN4llvm3X8615GR16_NOREXClassD1Ev\", \"llvm::X86::GR16_NOREXClass::~GR16_NOREXClass()\"},\n    {\"_ZN4llvm3X869GR32ClassD1Ev\", \"llvm::X86::GR32Class::~GR32Class()\"},\n    {\"_ZN4llvm3X8614GR32_ABCDClassD1Ev\", \"llvm::X86::GR32_ABCDClass::~GR32_ABCDClass()\"},\n    {\"_ZN4llvm3X8612GR32_ADClassD1Ev\", \"llvm::X86::GR32_ADClass::~GR32_ADClass()\"},\n    {\"_ZN4llvm3X8615GR32_NOREXClassD1Ev\", \"llvm::X86::GR32_NOREXClass::~GR32_NOREXClass()\"},\n    {\"_ZN4llvm3X8614GR32_NOSPClassD1Ev\", \"llvm::X86::GR32_NOSPClass::~GR32_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR32_TCClassD1Ev\", \"llvm::X86::GR32_TCClass::~GR32_TCClass()\"},\n    {\"_ZN4llvm3X869GR64ClassD1Ev\", \"llvm::X86::GR64Class::~GR64Class()\"},\n    {\"_ZN4llvm3X8614GR64_ABCDClassD1Ev\", \"llvm::X86::GR64_ABCDClass::~GR64_ABCDClass()\"},\n    {\"_ZN4llvm3X8615GR64_NOREXClassD1Ev\", \"llvm::X86::GR64_NOREXClass::~GR64_NOREXClass()\"},\n    {\"_ZN4llvm3X8620GR64_NOREX_NOSPClassD1Ev\", \"llvm::X86::GR64_NOREX_NOSPClass::~GR64_NOREX_NOSPClass()\"},\n    {\"_ZN4llvm3X8614GR64_NOSPClassD1Ev\", \"llvm::X86::GR64_NOSPClass::~GR64_NOSPClass()\"},\n    {\"_ZN4llvm3X8612GR64_TCClassD1Ev\", \"llvm::X86::GR64_TCClass::~GR64_TCClass()\"},\n    {\"_ZN4llvm3X8615GR64_TCW64ClassD1Ev\", \"llvm::X86::GR64_TCW64Class::~GR64_TCW64Class()\"},\n    {\"_ZN4llvm3X868GR8ClassD1Ev\", \"llvm::X86::GR8Class::~GR8Class()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_HClassD1Ev\", \"llvm::X86::GR8_ABCD_HClass::~GR8_ABCD_HClass()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_LClassD1Ev\", \"llvm::X86::GR8_ABCD_LClass::~GR8_ABCD_LClass()\"},\n    {\"_ZN4llvm3X8614GR8_NOREXClassD1Ev\", \"llvm::X86::GR8_NOREXClass::~GR8_NOREXClass()\"},\n    {\"_ZN4llvm3X8610RFP32ClassD1Ev\", \"llvm::X86::RFP32Class::~RFP32Class()\"},\n    {\"_ZN4llvm3X8610RFP64ClassD1Ev\", \"llvm::X86::RFP64Class::~RFP64Class()\"},\n    {\"_ZN4llvm3X8610RFP80ClassD1Ev\", \"llvm::X86::RFP80Class::~RFP80Class()\"},\n    {\"_ZN4llvm3X868RSTClassD1Ev\", \"llvm::X86::RSTClass::~RSTClass()\"},\n    {\"_ZN4llvm3X8616SEGMENT_REGClassD1Ev\", \"llvm::X86::SEGMENT_REGClass::~SEGMENT_REGClass()\"},\n    {\"_ZN4llvm3X8610VR128ClassD1Ev\", \"llvm::X86::VR128Class::~VR128Class()\"},\n    {\"_ZN4llvm3X8610VR256ClassD1Ev\", \"llvm::X86::VR256Class::~VR256Class()\"},\n    {\"_ZN4llvm3X869VR64ClassD1Ev\", \"llvm::X86::VR64Class::~VR64Class()\"},\n    {\"_ZN4llvm3X868CCRClassD0Ev\", \"llvm::X86::CCRClass::~CCRClass()\"},\n    {\"_ZN4llvm3X869FR32ClassD0Ev\", \"llvm::X86::FR32Class::~FR32Class()\"},\n    {\"_ZN4llvm3X869FR64ClassD0Ev\", \"llvm::X86::FR64Class::~FR64Class()\"},\n    {\"_ZN4llvm3X869GR16ClassD0Ev\", \"llvm::X86::GR16Class::~GR16Class()\"},\n    {\"_ZN4llvm3X8615GR16_NOREXClassD0Ev\", \"llvm::X86::GR16_NOREXClass::~GR16_NOREXClass()\"},\n    {\"_ZN4llvm3X869GR32ClassD0Ev\", \"llvm::X86::GR32Class::~GR32Class()\"},\n    {\"_ZN4llvm3X8615GR32_NOREXClassD0Ev\", \"llvm::X86::GR32_NOREXClass::~GR32_NOREXClass()\"},\n    {\"_ZN4llvm3X8614GR32_NOSPClassD0Ev\", \"llvm::X86::GR32_NOSPClass::~GR32_NOSPClass()\"},\n    {\"_ZN4llvm3X869GR64ClassD0Ev\", \"llvm::X86::GR64Class::~GR64Class()\"},\n    {\"_ZN4llvm3X8615GR64_NOREXClassD0Ev\", \"llvm::X86::GR64_NOREXClass::~GR64_NOREXClass()\"},\n    {\"_ZN4llvm3X8620GR64_NOREX_NOSPClassD0Ev\", \"llvm::X86::GR64_NOREX_NOSPClass::~GR64_NOREX_NOSPClass()\"},\n    {\"_ZN4llvm3X8614GR64_NOSPClassD0Ev\", \"llvm::X86::GR64_NOSPClass::~GR64_NOSPClass()\"},\n    {\"_ZN4llvm3X868GR8ClassD0Ev\", \"llvm::X86::GR8Class::~GR8Class()\"},\n    {\"_ZN4llvm3X8614GR8_NOREXClassD0Ev\", \"llvm::X86::GR8_NOREXClass::~GR8_NOREXClass()\"},\n    {\"_ZN4llvm3X868RSTClassD0Ev\", \"llvm::X86::RSTClass::~RSTClass()\"},\n    {\"_ZN4llvm3X8610VR128ClassD0Ev\", \"llvm::X86::VR128Class::~VR128Class()\"},\n    {\"_ZN4llvm3X8610VR256ClassD0Ev\", \"llvm::X86::VR256Class::~VR256Class()\"},\n    {\"_ZN4llvm3X869VR64ClassD0Ev\", \"llvm::X86::VR64Class::~VR64Class()\"},\n    {\"_ZN4llvm3X8616SEGMENT_REGClassD0Ev\", \"llvm::X86::SEGMENT_REGClass::~SEGMENT_REGClass()\"},\n    {\"_ZN4llvm3X8610RFP80ClassD0Ev\", \"llvm::X86::RFP80Class::~RFP80Class()\"},\n    {\"_ZN4llvm3X8610RFP64ClassD0Ev\", \"llvm::X86::RFP64Class::~RFP64Class()\"},\n    {\"_ZN4llvm3X8610RFP32ClassD0Ev\", \"llvm::X86::RFP32Class::~RFP32Class()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_LClassD0Ev\", \"llvm::X86::GR8_ABCD_LClass::~GR8_ABCD_LClass()\"},\n    {\"_ZN4llvm3X8615GR8_ABCD_HClassD0Ev\", \"llvm::X86::GR8_ABCD_HClass::~GR8_ABCD_HClass()\"},\n    {\"_ZN4llvm3X8615GR64_TCW64ClassD0Ev\", \"llvm::X86::GR64_TCW64Class::~GR64_TCW64Class()\"},\n    {\"_ZN4llvm3X8612GR64_TCClassD0Ev\", \"llvm::X86::GR64_TCClass::~GR64_TCClass()\"},\n    {\"_ZN4llvm3X8614GR64_ABCDClassD0Ev\", \"llvm::X86::GR64_ABCDClass::~GR64_ABCDClass()\"},\n    {\"_ZN4llvm3X8612GR32_TCClassD0Ev\", \"llvm::X86::GR32_TCClass::~GR32_TCClass()\"},\n    {\"_ZN4llvm3X8612GR32_ADClassD0Ev\", \"llvm::X86::GR32_ADClass::~GR32_ADClass()\"},\n    {\"_ZN4llvm3X8614GR32_ABCDClassD0Ev\", \"llvm::X86::GR32_ABCDClass::~GR32_ABCDClass()\"},\n    {\"_ZN4llvm3X8614GR16_ABCDClassD0Ev\", \"llvm::X86::GR16_ABCDClass::~GR16_ABCDClass()\"},\n    {\"_ZN4llvm3X8614DEBUG_REGClassD0Ev\", \"llvm::X86::DEBUG_REGClass::~DEBUG_REGClass()\"},\n    {\"_ZN4llvm3X8616CONTROL_REGClassD0Ev\", \"llvm::X86::CONTROL_REGClass::~CONTROL_REGClass()\"},\n    {\"_ZN4llvm19X86SelectionDAGInfoC1ERKNS_16X86TargetMachineE\", \"llvm::X86SelectionDAGInfo::X86SelectionDAGInfo(llvm::X86TargetMachine const&)\"},\n    {\"_ZN4llvm19X86SelectionDAGInfoC2ERKNS_16X86TargetMachineE\", \"llvm::X86SelectionDAGInfo::X86SelectionDAGInfo(llvm::X86TargetMachine const&)\"},\n    {\"_ZN4llvm19X86SelectionDAGInfoD0Ev\", \"llvm::X86SelectionDAGInfo::~X86SelectionDAGInfo()\"},\n    {\"_ZN4llvm19X86SelectionDAGInfoD1Ev\", \"llvm::X86SelectionDAGInfo::~X86SelectionDAGInfo()\"},\n    {\"_ZN4llvm19X86SelectionDAGInfoD2Ev\", \"llvm::X86SelectionDAGInfo::~X86SelectionDAGInfo()\"},\n    {\"_ZNK4llvm19X86SelectionDAGInfo23EmitTargetCodeForMemsetERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbNS_18MachinePointerInfoE\", \"llvm::X86SelectionDAGInfo::EmitTargetCodeForMemset(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, llvm::MachinePointerInfo) const\"},\n    {\"_ZNK4llvm19X86SelectionDAGInfo23EmitTargetCodeForMemcpyERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbbNS_18MachinePointerInfoES5_\", \"llvm::X86SelectionDAGInfo::EmitTargetCodeForMemcpy(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo) const\"},\n    {\"_ZNK4llvm3EVT6bitsGTES0_\", \"llvm::EVT::bitsGT(llvm::EVT) const\"},\n    {\"_ZN4llvm12X86Subtarget22ParseSubtargetFeaturesERKSsS2_\", \"llvm::X86Subtarget::ParseSubtargetFeatures(std::string const&, std::string const&)\"},\n    {\"_ZNK4llvm12X86Subtarget29ClassifyBlockAddressReferenceEv\", \"llvm::X86Subtarget::ClassifyBlockAddressReference() const\"},\n    {\"_ZNK4llvm12X86Subtarget23ClassifyGlobalReferenceEPKNS_11GlobalValueERKNS_13TargetMachineE\", \"llvm::X86Subtarget::ClassifyGlobalReference(llvm::GlobalValue const*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm12X86Subtarget13getBZeroEntryEv\", \"llvm::X86Subtarget::getBZeroEntry() const\"},\n    {\"_ZNK4llvm12X86Subtarget26IsLegalToCallImmediateAddrERKNS_13TargetMachineE\", \"llvm::X86Subtarget::IsLegalToCallImmediateAddr(llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm12X86Subtarget24getSpecialAddressLatencyEv\", \"llvm::X86Subtarget::getSpecialAddressLatency() const\"},\n    {\"_ZN4llvm12X86Subtarget27AutoDetectSubtargetFeaturesEv\", \"llvm::X86Subtarget::AutoDetectSubtargetFeatures()\"},\n    {\"_ZN4llvm12X86SubtargetC1ERKSsS2_b\", \"llvm::X86Subtarget::X86Subtarget(std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm12X86SubtargetC2ERKSsS2_b\", \"llvm::X86Subtarget::X86Subtarget(std::string const&, std::string const&, bool)\"},\n    {\"_ZNK4llvm12X86Subtarget11IsCalleePopEbNS_11CallingConv2IDE\", \"llvm::X86Subtarget::IsCalleePop(bool, llvm::CallingConv::ID) const\"},\n    {\"_Z15createMCAsmInfoRKN4llvm6TargetENS_9StringRefE\", \"createMCAsmInfo(llvm::Target const&, llvm::StringRef)\"},\n    {\"_Z16createMCStreamerRKN4llvm6TargetERKSsRNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterEbb\", \"createMCStreamer(llvm::Target const&, std::string const&, llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*, bool, bool)\"},\n    {\"_ZN4llvm19X86_32TargetMachineC1ERKNS_6TargetERKSsS5_\", \"llvm::X86_32TargetMachine::X86_32TargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm19X86_32TargetMachineC2ERKNS_6TargetERKSsS5_\", \"llvm::X86_32TargetMachine::X86_32TargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm16X86TargetMachineC2ERKNS_6TargetERKSsS5_b\", \"llvm::X86TargetMachine::X86TargetMachine(llvm::Target const&, std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm19X86_64TargetMachineC1ERKNS_6TargetERKSsS5_\", \"llvm::X86_64TargetMachine::X86_64TargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm19X86_64TargetMachineC2ERKNS_6TargetERKSsS5_\", \"llvm::X86_64TargetMachine::X86_64TargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm16X86TargetMachineC1ERKNS_6TargetERKSsS5_b\", \"llvm::X86TargetMachine::X86TargetMachine(llvm::Target const&, std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm16X86TargetMachine15addInstSelectorERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::X86TargetMachine::addInstSelector(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16X86TargetMachine14addPreRegAllocERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::X86TargetMachine::addPreRegAlloc(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16X86TargetMachine15addPostRegAllocERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::X86TargetMachine::addPostRegAlloc(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16X86TargetMachine14addPreEmitPassERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::X86TargetMachine::addPreEmitPass(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16X86TargetMachine14addCodeEmitterERNS_15PassManagerBaseENS_10CodeGenOpt5LevelERNS_14JITCodeEmitterE\", \"llvm::X86TargetMachine::addCodeEmitter(llvm::PassManagerBase&, llvm::CodeGenOpt::Level, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm16X86TargetMachine21setCodeModelForStaticEv\", \"llvm::X86TargetMachine::setCodeModelForStatic()\"},\n    {\"_ZN4llvm16X86TargetMachine18setCodeModelForJITEv\", \"llvm::X86TargetMachine::setCodeModelForJIT()\"},\n    {\"_ZNK4llvm12X86Subtarget13isTargetWin64Ev\", \"llvm::X86Subtarget::isTargetWin64() const\"},\n    {\"_ZNK4llvm16X86TargetMachine16getSubtargetImplEv\", \"llvm::X86TargetMachine::getSubtargetImpl() const\"},\n    {\"_ZN4llvm16X86TargetMachineD1Ev\", \"llvm::X86TargetMachine::~X86TargetMachine()\"},\n    {\"_ZN4llvm16X86TargetMachineD0Ev\", \"llvm::X86TargetMachine::~X86TargetMachine()\"},\n    {\"_ZNK4llvm16X86TargetMachine12getInstrInfoEv\", \"llvm::X86TargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm16X86TargetMachine16getFrameLoweringEv\", \"llvm::X86TargetMachine::getFrameLowering() const\"},\n    {\"_ZNK4llvm16X86TargetMachine17getTargetLoweringEv\", \"llvm::X86TargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm16X86TargetMachine19getSelectionDAGInfoEv\", \"llvm::X86TargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm16X86TargetMachine15getRegisterInfoEv\", \"llvm::X86TargetMachine::getRegisterInfo() const\"},\n    {\"_ZN4llvm16X86TargetMachine10getJITInfoEv\", \"llvm::X86TargetMachine::getJITInfo()\"},\n    {\"_ZNK4llvm16X86TargetMachine16getELFWriterInfoEv\", \"llvm::X86TargetMachine::getELFWriterInfo() const\"},\n    {\"_ZN4llvm19X86_64TargetMachineD1Ev\", \"llvm::X86_64TargetMachine::~X86_64TargetMachine()\"},\n    {\"_ZN4llvm19X86_64TargetMachineD0Ev\", \"llvm::X86_64TargetMachine::~X86_64TargetMachine()\"},\n    {\"_ZNK4llvm19X86_64TargetMachine12getInstrInfoEv\", \"llvm::X86_64TargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm19X86_64TargetMachine17getTargetLoweringEv\", \"llvm::X86_64TargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm19X86_64TargetMachine19getSelectionDAGInfoEv\", \"llvm::X86_64TargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm19X86_64TargetMachine13getDataLayoutEv\", \"llvm::X86_64TargetMachine::getDataLayout() const\"},\n    {\"_ZN4llvm19X86_64TargetMachine10getJITInfoEv\", \"llvm::X86_64TargetMachine::getJITInfo()\"},\n    {\"_ZN4llvm19X86_32TargetMachineD1Ev\", \"llvm::X86_32TargetMachine::~X86_32TargetMachine()\"},\n    {\"_ZN4llvm19X86_32TargetMachineD0Ev\", \"llvm::X86_32TargetMachine::~X86_32TargetMachine()\"},\n    {\"_ZNK4llvm19X86_32TargetMachine12getInstrInfoEv\", \"llvm::X86_32TargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm19X86_32TargetMachine17getTargetLoweringEv\", \"llvm::X86_32TargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm19X86_32TargetMachine19getSelectionDAGInfoEv\", \"llvm::X86_32TargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm19X86_32TargetMachine13getDataLayoutEv\", \"llvm::X86_32TargetMachine::getDataLayout() const\"},\n    {\"_ZN4llvm19X86_32TargetMachine10getJITInfoEv\", \"llvm::X86_32TargetMachine::getJITInfo()\"},\n    {\"_ZN4llvm19X86_32TargetMachineD2Ev\", \"llvm::X86_32TargetMachine::~X86_32TargetMachine()\"},\n    {\"_ZN4llvm10X86JITInfoD1Ev\", \"llvm::X86JITInfo::~X86JITInfo()\"},\n    {\"_ZN4llvm17X86TargetLoweringD1Ev\", \"llvm::X86TargetLowering::~X86TargetLowering()\"},\n    {\"_ZN4llvm12X86InstrInfoD1Ev\", \"llvm::X86InstrInfo::~X86InstrInfo()\"},\n    {\"_ZN4llvm16X86TargetMachineD2Ev\", \"llvm::X86TargetMachine::~X86TargetMachine()\"},\n    {\"_ZN4llvm16X86FrameLoweringD1Ev\", \"llvm::X86FrameLowering::~X86FrameLowering()\"},\n    {\"_ZN4llvm12X86SubtargetD1Ev\", \"llvm::X86Subtarget::~X86Subtarget()\"},\n    {\"_ZN4llvm12X86SubtargetD0Ev\", \"llvm::X86Subtarget::~X86Subtarget()\"},\n    {\"_ZN4llvm16X86FrameLoweringD0Ev\", \"llvm::X86FrameLowering::~X86FrameLowering()\"},\n    {\"_ZN4llvm15X86RegisterInfoD1Ev\", \"llvm::X86RegisterInfo::~X86RegisterInfo()\"},\n    {\"_ZN4llvm12X86InstrInfoD0Ev\", \"llvm::X86InstrInfo::~X86InstrInfo()\"},\n    {\"_ZNK4llvm12X86InstrInfo15getRegisterInfoEv\", \"llvm::X86InstrInfo::getRegisterInfo() const\"},\n    {\"_ZN4llvm15X86RegisterInfoD0Ev\", \"llvm::X86RegisterInfo::~X86RegisterInfo()\"},\n    {\"_ZN4llvm18X86GenRegisterInfoD1Ev\", \"llvm::X86GenRegisterInfo::~X86GenRegisterInfo()\"},\n    {\"_ZN4llvm18X86GenRegisterInfoD0Ev\", \"llvm::X86GenRegisterInfo::~X86GenRegisterInfo()\"},\n    {\"_ZNK4llvm18X86GenRegisterInfo21needsStackRealignmentERKNS_15MachineFunctionE\", \"llvm::X86GenRegisterInfo::needsStackRealignment(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm17X86TargetLoweringD0Ev\", \"llvm::X86TargetLowering::~X86TargetLowering()\"},\n    {\"_ZNK4llvm14TargetLowering23getSchedulingPreferenceEPNS_6SDNodeE\", \"llvm::TargetLowering::getSchedulingPreference(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm14TargetLowering14getRegClassForENS_3EVTE\", \"llvm::TargetLowering::getRegClassFor(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering18getTgtMemIntrinsicERNS0_13IntrinsicInfoERKNS_8CallInstEj\", \"llvm::TargetLowering::getTgtMemIntrinsic(llvm::TargetLowering::IntrinsicInfo&, llvm::CallInst const&, unsigned int) const\"},\n    {\"_ZNK4llvm17X86TargetLowering22ShouldShrinkFPConstantENS_3EVTE\", \"llvm::X86TargetLowering::ShouldShrinkFPConstant(llvm::EVT) const\"},\n    {\"_ZNK4llvm17X86TargetLowering29allowsUnalignedMemoryAccessesENS_3EVTE\", \"llvm::X86TargetLowering::allowsUnalignedMemoryAccesses(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering25getPreIndexedAddressPartsEPNS_6SDNodeERNS_7SDValueES4_RNS_3ISD14MemIndexedModeERNS_12SelectionDAGE\", \"llvm::TargetLowering::getPreIndexedAddressParts(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&, llvm::ISD::MemIndexedMode&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering26getPostIndexedAddressPartsEPNS_6SDNodeES2_RNS_7SDValueES4_RNS_3ISD14MemIndexedModeERNS_12SelectionDAGE\", \"llvm::TargetLowering::getPostIndexedAddressParts(llvm::SDNode*, llvm::SDNode*, llvm::SDValue&, llvm::SDValue&, llvm::ISD::MemIndexedMode&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering22getMaximalGlobalOffsetEv\", \"llvm::TargetLowering::getMaximalGlobalOffset() const\"},\n    {\"_ZNK4llvm14TargetLowering33isDesirableToTransformToIntegerOpEjNS_3EVTE\", \"llvm::TargetLowering::isDesirableToTransformToIntegerOp(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering20isLegalICmpImmediateEx\", \"llvm::TargetLowering::isLegalICmpImmediate(long long) const\"},\n    {\"_ZN4llvm10X86JITInfoD0Ev\", \"llvm::X86JITInfo::~X86JITInfo()\"},\n    {\"_ZN4llvm19X86_64TargetMachineD2Ev\", \"llvm::X86_64TargetMachine::~X86_64TargetMachine()\"},\n    {\"_ZN4llvm21RegisterTargetMachineINS_19X86_64TargetMachineEE9AllocatorERKNS_6TargetERKSsS7_\", \"llvm::RegisterTargetMachine<llvm::X86_64TargetMachine>::Allocator(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm21RegisterTargetMachineINS_19X86_32TargetMachineEE9AllocatorERKNS_6TargetERKSsS7_\", \"llvm::RegisterTargetMachine<llvm::X86_32TargetMachine>::Allocator(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZNK4llvm27X8664_MachoTargetObjectFile30getExprForDwarfGlobalReferenceEPKNS_11GlobalValueEPNS_7ManglerEPNS_17MachineModuleInfoEjRNS_10MCStreamerE\", \"llvm::X8664_MachoTargetObjectFile::getExprForDwarfGlobalReference(llvm::GlobalValue const*, llvm::Mangler*, llvm::MachineModuleInfo*, unsigned int, llvm::MCStreamer&) const\"},\n    {\"_ZNK4llvm25X8632_ELFTargetObjectFile22getPersonalityEncodingEv\", \"llvm::X8632_ELFTargetObjectFile::getPersonalityEncoding() const\"},\n    {\"_ZNK4llvm25X8632_ELFTargetObjectFile15getLSDAEncodingEv\", \"llvm::X8632_ELFTargetObjectFile::getLSDAEncoding() const\"},\n    {\"_ZNK4llvm25X8632_ELFTargetObjectFile14getFDEEncodingEv\", \"llvm::X8632_ELFTargetObjectFile::getFDEEncoding() const\"},\n    {\"_ZNK4llvm25X8632_ELFTargetObjectFile16getTTypeEncodingEv\", \"llvm::X8632_ELFTargetObjectFile::getTTypeEncoding() const\"},\n    {\"_ZNK4llvm25X8664_ELFTargetObjectFile22getPersonalityEncodingEv\", \"llvm::X8664_ELFTargetObjectFile::getPersonalityEncoding() const\"},\n    {\"_ZNK4llvm25X8664_ELFTargetObjectFile15getLSDAEncodingEv\", \"llvm::X8664_ELFTargetObjectFile::getLSDAEncoding() const\"},\n    {\"_ZNK4llvm25X8664_ELFTargetObjectFile14getFDEEncodingEv\", \"llvm::X8664_ELFTargetObjectFile::getFDEEncoding() const\"},\n    {\"_ZNK4llvm25X8664_ELFTargetObjectFile16getTTypeEncodingEv\", \"llvm::X8664_ELFTargetObjectFile::getTTypeEncoding() const\"},\n    {\"_ZN4llvm25X8632_ELFTargetObjectFileD1Ev\", \"llvm::X8632_ELFTargetObjectFile::~X8632_ELFTargetObjectFile()\"},\n    {\"_ZN4llvm25X8632_ELFTargetObjectFileD0Ev\", \"llvm::X8632_ELFTargetObjectFile::~X8632_ELFTargetObjectFile()\"},\n    {\"_ZN4llvm25X8664_ELFTargetObjectFileD1Ev\", \"llvm::X8664_ELFTargetObjectFile::~X8664_ELFTargetObjectFile()\"},\n    {\"_ZN4llvm25X8664_ELFTargetObjectFileD0Ev\", \"llvm::X8664_ELFTargetObjectFile::~X8664_ELFTargetObjectFile()\"},\n    {\"_ZN4llvm27X8664_MachoTargetObjectFileD1Ev\", \"llvm::X8664_MachoTargetObjectFile::~X8664_MachoTargetObjectFile()\"},\n    {\"_ZN4llvm27X8664_MachoTargetObjectFileD0Ev\", \"llvm::X8664_MachoTargetObjectFile::~X8664_MachoTargetObjectFile()\"},\n    {\"_ZN4llvm17X86ATTInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter12printOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::printOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter15print_pcrel_immEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::print_pcrel_imm(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter10printSSECCEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::printSSECC(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter15getRegisterNameEj\", \"llvm::X86ATTInstPrinter::getRegisterName(unsigned int)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter18getInstructionNameEj\", \"llvm::X86ATTInstPrinter::getInstructionName(unsigned int)\"},\n    {\"_ZN4llvm17X86ATTInstPrinter9printInstEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::printInst(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm17X86ATTInstPrinter13getOpcodeNameEj\", \"llvm::X86ATTInstPrinter::getOpcodeName(unsigned int) const\"},\n    {\"_ZN4llvm17X86ATTInstPrinter17printMemReferenceEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86ATTInstPrinter::printMemReference(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm17X86ATTInstPrinterD1Ev\", \"llvm::X86ATTInstPrinter::~X86ATTInstPrinter()\"},\n    {\"_ZN4llvm17X86ATTInstPrinterD0Ev\", \"llvm::X86ATTInstPrinter::~X86ATTInstPrinter()\"},\n    {\"_ZN4llvm22EmitAnyX86InstCommentsEPKNS_6MCInstERNS_11raw_ostreamEPFPKcjE\", \"llvm::EmitAnyX86InstComments(llvm::MCInst const*, llvm::raw_ostream&, char const* (*)(unsigned int))\"},\n    {\"_Z16DecodeSHUFPSMaskjjRN4llvm15SmallVectorImplIjEE\", \"DecodeSHUFPSMask(unsigned int, unsigned int, llvm::SmallVectorImpl<unsigned int>&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter12printOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::printOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter15print_pcrel_immEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::print_pcrel_imm(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter10printSSECCEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::printSSECC(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter15getRegisterNameEj\", \"llvm::X86IntelInstPrinter::getRegisterName(unsigned int)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter18getInstructionNameEj\", \"llvm::X86IntelInstPrinter::getInstructionName(unsigned int)\"},\n    {\"_ZN4llvm19X86IntelInstPrinter9printInstEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::printInst(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm19X86IntelInstPrinter13getOpcodeNameEj\", \"llvm::X86IntelInstPrinter::getOpcodeName(unsigned int) const\"},\n    {\"_ZN4llvm19X86IntelInstPrinter17printMemReferenceEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::X86IntelInstPrinter::printMemReference(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19X86IntelInstPrinterD1Ev\", \"llvm::X86IntelInstPrinter::~X86IntelInstPrinter()\"},\n    {\"_ZN4llvm19X86IntelInstPrinterD0Ev\", \"llvm::X86IntelInstPrinter::~X86IntelInstPrinter()\"},\n    {\"_ZN4llvm14RegisterTargetILNS_6Triple8ArchTypeE16ELb1EE21getTripleMatchQualityERKSs\", \"llvm::RegisterTarget<(llvm::Triple::ArchType)16, true>::getTripleMatchQuality(std::string const&)\"},\n    {\"_ZN4llvm14RegisterTargetILNS_6Triple8ArchTypeE15ELb1EE21getTripleMatchQualityERKSs\", \"llvm::RegisterTarget<(llvm::Triple::ArchType)15, true>::getTripleMatchQuality(std::string const&)\"},\n    {\"_ZN4llvm16RegisterAsmLexerIN12_GLOBAL__N_113ThumbAsmLexerEE9AllocatorERKNS_6TargetERKNS_9MCAsmInfoE\", \"llvm::RegisterAsmLexer<(anonymous namespace)::ThumbAsmLexer>::Allocator(llvm::Target const&, llvm::MCAsmInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMBaseAsmLexer15InitRegisterMapEPKN4llvm18TargetRegisterInfoE\", \"(anonymous namespace)::ARMBaseAsmLexer::InitRegisterMap(llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMBaseAsmLexer8LexTokenEv\", \"(anonymous namespace)::ARMBaseAsmLexer::LexToken()\"},\n    {\"_ZN12_GLOBAL__N_113ThumbAsmLexerD1Ev\", \"(anonymous namespace)::ThumbAsmLexer::~ThumbAsmLexer()\"},\n    {\"_ZN12_GLOBAL__N_113ThumbAsmLexerD0Ev\", \"(anonymous namespace)::ThumbAsmLexer::~ThumbAsmLexer()\"},\n    {\"_ZN12_GLOBAL__N_115ARMBaseAsmLexerD1Ev\", \"(anonymous namespace)::ARMBaseAsmLexer::~ARMBaseAsmLexer()\"},\n    {\"_ZN12_GLOBAL__N_115ARMBaseAsmLexerD0Ev\", \"(anonymous namespace)::ARMBaseAsmLexer::~ARMBaseAsmLexer()\"},\n    {\"_ZN4llvm16RegisterAsmLexerIN12_GLOBAL__N_111ARMAsmLexerEE9AllocatorERKNS_6TargetERKNS_9MCAsmInfoE\", \"llvm::RegisterAsmLexer<(anonymous namespace)::ARMAsmLexer>::Allocator(llvm::Target const&, llvm::MCAsmInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMAsmLexerD1Ev\", \"(anonymous namespace)::ARMAsmLexer::~ARMAsmLexer()\"},\n    {\"_ZN12_GLOBAL__N_111ARMAsmLexerD0Ev\", \"(anonymous namespace)::ARMAsmLexer::~ARMAsmLexer()\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsjESt10_Select1stIS2_ESt4lessISsESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, unsigned int>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsjESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, unsigned int>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::find(std::string const&)\"},\n    {\"_ZNSt3mapISsjSt4lessISsESaISt4pairIKSsjEEEixERS3_\", \"std::map<std::string, unsigned int, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::operator[](std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsjESt10_Select1stIS2_ESt4lessISsESaIS2_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS2_ERKS2_\", \"std::_Rb_tree<std::string, std::pair<std::string const, unsigned int>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, unsigned int> >, std::pair<std::string const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsjESt10_Select1stIS2_ESt4lessISsESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_\", \"std::_Rb_tree<std::string, std::pair<std::string const, unsigned int>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsjESt10_Select1stIS2_ESt4lessISsESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<std::string, std::pair<std::string const, unsigned int>, std::_Select1st<std::pair<std::string const, unsigned int> >, std::less<std::string>, std::allocator<std::pair<std::string const, unsigned int> > >::_M_insert_unique(std::pair<std::string const, unsigned int> const&)\"},\n    {\"_ZN4llvm17RegisterAsmParserIN12_GLOBAL__N_112ARMAsmParserEE9AllocatorERKNS_6TargetERNS_11MCAsmParserERNS_13TargetMachineE\", \"llvm::RegisterAsmParser<(anonymous namespace)::ARMAsmParser>::Allocator(llvm::Target const&, llvm::MCAsmParser&, llvm::TargetMachine&)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParserD1Ev\", \"(anonymous namespace)::ARMAsmParser::~ARMAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParserD0Ev\", \"(anonymous namespace)::ARMAsmParser::~ARMAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser13ParseRegisterERjRN4llvm5SMLocES4_\", \"(anonymous namespace)::ARMAsmParser::ParseRegister(unsigned int&, llvm::SMLoc&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser16ParseInstructionEN4llvm9StringRefENS1_5SMLocERNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEE\", \"(anonymous namespace)::ARMAsmParser::ParseInstruction(llvm::StringRef, llvm::SMLoc, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser14ParseDirectiveEN4llvm8AsmTokenE\", \"(anonymous namespace)::ARMAsmParser::ParseDirective(llvm::AsmToken)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser23MatchAndEmitInstructionEN4llvm5SMLocERNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEERNS1_10MCStreamerE\", \"(anonymous namespace)::ARMAsmParser::MatchAndEmitInstruction(llvm::SMLoc, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&, llvm::MCStreamer&)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser20MatchInstructionImplERKN4llvm15SmallVectorImplIPNS1_18MCParsedAsmOperandEEERNS1_6MCInstERj\", \"(anonymous namespace)::ARMAsmParser::MatchInstructionImpl(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*> const&, llvm::MCInst&, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_110ARMOperandD1Ev\", \"(anonymous namespace)::ARMOperand::~ARMOperand()\"},\n    {\"_ZN12_GLOBAL__N_110ARMOperandD0Ev\", \"(anonymous namespace)::ARMOperand::~ARMOperand()\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand11getStartLocEv\", \"(anonymous namespace)::ARMOperand::getStartLoc() const\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand9getEndLocEv\", \"(anonymous namespace)::ARMOperand::getEndLoc() const\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand4dumpERN4llvm11raw_ostreamE\", \"(anonymous namespace)::ARMOperand::dump(llvm::raw_ostream&) const\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser15ConvertToMCInstEjRN4llvm6MCInstEjRKNS1_15SmallVectorImplIPNS1_18MCParsedAsmOperandEEE\", \"(anonymous namespace)::ARMAsmParser::ConvertToMCInst(unsigned int, llvm::MCInst&, unsigned int, llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*> const&)\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand19addCondCodeOperandsERN4llvm6MCInstEj\", \"(anonymous namespace)::ARMOperand::addCondCodeOperands(llvm::MCInst&, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand14addImmOperandsERN4llvm6MCInstEj\", \"(anonymous namespace)::ARMOperand::addImmOperands(llvm::MCInst&, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_110ARMOperand19addMemMode5OperandsERN4llvm6MCInstEj\", \"(anonymous namespace)::ARMOperand::addMemMode5Operands(llvm::MCInst&, unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser12ParseOperandERN4llvm15SmallVectorImplIPNS1_18MCParsedAsmOperandEEENS1_9StringRefE\", \"(anonymous namespace)::ARMAsmParser::ParseOperand(llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>&, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser16TryParseRegisterEv\", \"(anonymous namespace)::ARMAsmParser::TryParseRegister()\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIjEEiPKvS2_\", \"int llvm::array_pod_sort_comparator<unsigned int>(void const*, void const*)\"},\n    {\"_ZN12_GLOBAL__N_112ARMAsmParser20ParseMemoryOffsetRegERbS1_R9ShiftTypeRPKN4llvm6MCExprES8_S1_RiRNS4_5SMLocE\", \"(anonymous namespace)::ARMAsmParser::ParseMemoryOffsetReg(bool&, bool&, ShiftType&, llvm::MCExpr const*&, llvm::MCExpr const*&, bool&, int&, llvm::SMLoc&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_18MCParsedAsmOperandEE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<llvm::MCParsedAsmOperand*>::insert(llvm::MCParsedAsmOperand**, llvm::MCParsedAsmOperand* const&)\"},\n    {\"_ZN4llvm18MCParsedAsmOperandD1Ev\", \"llvm::MCParsedAsmOperand::~MCParsedAsmOperand()\"},\n    {\"_ZN4llvm18MCParsedAsmOperandD0Ev\", \"llvm::MCParsedAsmOperand::~MCParsedAsmOperand()\"},\n    {\"_ZN4llvm8DenseMapIjbNS_12DenseMapInfoIjEENS1_IbEEE16InsertIntoBucketERKjRKbPSt4pairIjbE\", \"llvm::DenseMap<unsigned int, bool, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<bool> >::InsertIntoBucket(unsigned int const&, bool const&, std::pair<unsigned int, bool>*)\"},\n    {\"_ZN4llvm8DenseMapIjbNS_12DenseMapInfoIjEENS1_IbEEE4growEj\", \"llvm::DenseMap<unsigned int, bool, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<bool> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIjNS_5SMLocEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<unsigned int, llvm::SMLoc>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm19createARMAsmBackendERKNS_6TargetERKSs\", \"llvm::createARMAsmBackend(llvm::Target const&, std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_116ELFARMAsmBackendD1Ev\", \"(anonymous namespace)::ELFARMAsmBackend::~ELFARMAsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_116ELFARMAsmBackendD0Ev\", \"(anonymous namespace)::ELFARMAsmBackend::~ELFARMAsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_116ELFARMAsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::ELFARMAsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMAsmBackend16getNumFixupKindsEv\", \"(anonymous namespace)::ARMAsmBackend::getNumFixupKinds() const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMAsmBackend16getFixupKindInfoEN4llvm11MCFixupKindE\", \"(anonymous namespace)::ARMAsmBackend::getFixupKindInfo(llvm::MCFixupKind) const\"},\n    {\"_ZNK12_GLOBAL__N_116ELFARMAsmBackend10ApplyFixupERKN4llvm7MCFixupEPcjy\", \"(anonymous namespace)::ELFARMAsmBackend::ApplyFixup(llvm::MCFixup const&, char*, unsigned int, unsigned long long) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMAsmBackend17MayNeedRelaxationERKN4llvm6MCInstE\", \"(anonymous namespace)::ARMAsmBackend::MayNeedRelaxation(llvm::MCInst const&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMAsmBackend16RelaxInstructionERKN4llvm6MCInstERS2_\", \"(anonymous namespace)::ARMAsmBackend::RelaxInstruction(llvm::MCInst const&, llvm::MCInst&) const\"},\n    {\"_ZNK12_GLOBAL__N_113ARMAsmBackend12WriteNopDataEyPN4llvm14MCObjectWriterE\", \"(anonymous namespace)::ARMAsmBackend::WriteNopData(unsigned long long, llvm::MCObjectWriter*) const\"},\n    {\"_ZN12_GLOBAL__N_113ARMAsmBackend19HandleAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::ARMAsmBackend::HandleAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_Z16adjustFixupValuejy\", \"adjustFixupValue(unsigned int, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriterD1Ev\", \"(anonymous namespace)::ARMELFObjectWriter::~ARMELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriterD0Ev\", \"(anonymous namespace)::ARMELFObjectWriter::~ARMELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_113ARMAsmBackendD1Ev\", \"(anonymous namespace)::ARMAsmBackend::~ARMAsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_113ARMAsmBackendD0Ev\", \"(anonymous namespace)::ARMAsmBackend::~ARMAsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119DarwinARMAsmBackendD1Ev\", \"(anonymous namespace)::DarwinARMAsmBackend::~DarwinARMAsmBackend()\"},\n    {\"_ZN12_GLOBAL__N_119DarwinARMAsmBackendD0Ev\", \"(anonymous namespace)::DarwinARMAsmBackend::~DarwinARMAsmBackend()\"},\n    {\"_ZNK12_GLOBAL__N_119DarwinARMAsmBackend18createObjectWriterERN4llvm11raw_ostreamE\", \"(anonymous namespace)::DarwinARMAsmBackend::createObjectWriter(llvm::raw_ostream&) const\"},\n    {\"_ZNK12_GLOBAL__N_119DarwinARMAsmBackend25doesSectionRequireSymbolsERKN4llvm9MCSectionE\", \"(anonymous namespace)::DarwinARMAsmBackend::doesSectionRequireSymbols(llvm::MCSection const&) const\"},\n    {\"_ZNK12_GLOBAL__N_119DarwinARMAsmBackend10ApplyFixupERKN4llvm7MCFixupEPcjy\", \"(anonymous namespace)::DarwinARMAsmBackend::ApplyFixup(llvm::MCFixup const&, char*, unsigned int, unsigned long long) const\"},\n    {\"_ZN12_GLOBAL__N_119ARMMachObjectWriterD1Ev\", \"(anonymous namespace)::ARMMachObjectWriter::~ARMMachObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_119ARMMachObjectWriterD0Ev\", \"(anonymous namespace)::ARMMachObjectWriter::~ARMMachObjectWriter()\"},\n    {\"_ZN4llvm14MCObjectWriter7Write16Et\", \"llvm::MCObjectWriter::Write16(unsigned short)\"},\n    {\"_ZN4llvm14MCObjectWriter9WriteLE32Ej\", \"llvm::MCObjectWriter::WriteLE32(unsigned int)\"},\n    {\"_ZN4llvm14MCObjectWriter9WriteBE32Ej\", \"llvm::MCObjectWriter::WriteBE32(unsigned int)\"},\n    {\"_ZNK4llvm13ARMAsmPrinter21getDebugValueLocationEPKNS_12MachineInstrE\", \"llvm::ARMAsmPrinter::getDebugValueLocation(llvm::MachineInstr const*) const\"},\n    {\"_ZN4llvm13ARMAsmPrinter22EmitFunctionEntryLabelEv\", \"llvm::ARMAsmPrinter::EmitFunctionEntryLabel()\"},\n    {\"_ZN4llvm13ARMAsmPrinter20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::ARMAsmPrinter::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter12printOperandEPKNS_12MachineInstrEiRNS_11raw_ostreamEPKc\", \"llvm::ARMAsmPrinter::printOperand(llvm::MachineInstr const*, int, llvm::raw_ostream&, char const*)\"},\n    {\"_ZNK4llvm13ARMAsmPrinter27GetARMSetPICJumpTableLabel2EjjPKNS_17MachineBasicBlockE\", \"llvm::ARMAsmPrinter::GetARMSetPICJumpTableLabel2(unsigned int, unsigned int, llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm13ARMAsmPrinter27GetARMJTIPICJumpTableLabel2Ejj\", \"llvm::ARMAsmPrinter::GetARMJTIPICJumpTableLabel2(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm13ARMAsmPrinter17GetARMSJLJEHLabelEv\", \"llvm::ARMAsmPrinter::GetARMSJLJEHLabel() const\"},\n    {\"_ZN4llvm13ARMAsmPrinter15PrintAsmOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::ARMAsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter21PrintAsmMemoryOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::ARMAsmPrinter::PrintAsmMemoryOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter18EmitStartOfAsmFileERNS_6ModuleE\", \"llvm::ARMAsmPrinter::EmitStartOfAsmFile(llvm::Module&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter14emitAttributesEv\", \"llvm::ARMAsmPrinter::emitAttributes()\"},\n    {\"_ZN4llvm13ARMAsmPrinter16EmitEndOfAsmFileERNS_6ModuleE\", \"llvm::ARMAsmPrinter::EmitEndOfAsmFile(llvm::Module&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter23emitARMAttributeSectionEv\", \"llvm::ARMAsmPrinter::emitARMAttributeSection()\"},\n    {\"_ZN4llvm13ARMAsmPrinter14GetARMGVSymbolEPKNS_11GlobalValueE\", \"llvm::ARMAsmPrinter::GetARMGVSymbol(llvm::GlobalValue const*)\"},\n    {\"_ZN4llvm13ARMAsmPrinter28EmitMachineConstantPoolValueEPNS_24MachineConstantPoolValueE\", \"llvm::ARMAsmPrinter::EmitMachineConstantPoolValue(llvm::MachineConstantPoolValue*)\"},\n    {\"_Z11getPICLabelPKcjjRN4llvm9MCContextE\", \"getPICLabel(char const*, unsigned int, unsigned int, llvm::MCContext&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter13EmitJumpTableEPKNS_12MachineInstrE\", \"llvm::ARMAsmPrinter::EmitJumpTable(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm13ARMAsmPrinter14EmitJump2TableEPKNS_12MachineInstrE\", \"llvm::ARMAsmPrinter::EmitJump2Table(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm13ARMAsmPrinter22PrintDebugValueCommentEPKNS_12MachineInstrERNS_11raw_ostreamE\", \"llvm::ARMAsmPrinter::PrintDebugValueComment(llvm::MachineInstr const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm13ARMAsmPrinter22EmitPatchedInstructionEPKNS_12MachineInstrEj\", \"llvm::ARMAsmPrinter::EmitPatchedInstruction(llvm::MachineInstr const*, unsigned int)\"},\n    {\"_ZN4llvm13ARMAsmPrinter15EmitInstructionEPKNS_12MachineInstrE\", \"llvm::ARMAsmPrinter::EmitInstruction(llvm::MachineInstr const*)\"},\n    {\"_Z19populateADROperandsRN4llvm6MCInstEjPKNS_8MCSymbolEjjRNS_9MCContextE\", \"populateADROperands(llvm::MCInst&, unsigned int, llvm::MCSymbol const*, unsigned int, unsigned int, llvm::MCContext&)\"},\n    {\"_Z22createARMMCInstPrinterRKN4llvm6TargetEjRKNS_9MCAsmInfoE\", \"createARMMCInstPrinter(llvm::Target const&, unsigned int, llvm::MCAsmInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitter17MaybeSwitchVendorEN4llvm9StringRefE\", \"(anonymous namespace)::ObjectAttributeEmitter::MaybeSwitchVendor(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitter13EmitAttributeEjj\", \"(anonymous namespace)::ObjectAttributeEmitter::EmitAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitter17EmitTextAttributeEjN4llvm9StringRefE\", \"(anonymous namespace)::ObjectAttributeEmitter::EmitTextAttribute(unsigned int, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitter6FinishEv\", \"(anonymous namespace)::ObjectAttributeEmitter::Finish()\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitterD1Ev\", \"(anonymous namespace)::ObjectAttributeEmitter::~ObjectAttributeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_122ObjectAttributeEmitterD0Ev\", \"(anonymous namespace)::ObjectAttributeEmitter::~ObjectAttributeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_116AttributeEmitterD1Ev\", \"(anonymous namespace)::AttributeEmitter::~AttributeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_116AttributeEmitterD0Ev\", \"(anonymous namespace)::AttributeEmitter::~AttributeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitter17MaybeSwitchVendorEN4llvm9StringRefE\", \"(anonymous namespace)::AsmAttributeEmitter::MaybeSwitchVendor(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitter13EmitAttributeEjj\", \"(anonymous namespace)::AsmAttributeEmitter::EmitAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitter17EmitTextAttributeEjN4llvm9StringRefE\", \"(anonymous namespace)::AsmAttributeEmitter::EmitTextAttribute(unsigned int, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitter6FinishEv\", \"(anonymous namespace)::AsmAttributeEmitter::Finish()\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitterD1Ev\", \"(anonymous namespace)::AsmAttributeEmitter::~AsmAttributeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_119AsmAttributeEmitterD0Ev\", \"(anonymous namespace)::AsmAttributeEmitter::~AsmAttributeEmitter()\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm8MCSymbolENS1_14PointerIntPairIS3_Lj1EbNS1_21PointerLikeTypeTraitsIS3_EEEEESaIS8_EEaSERKSA_\", \"std::vector<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, std::allocator<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > > >::operator=(std::vector<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, std::allocator<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > > > const&)\"},\n    {\"_ZN4llvm13ARMAsmPrinterD1Ev\", \"llvm::ARMAsmPrinter::~ARMAsmPrinter()\"},\n    {\"_ZN4llvm13ARMAsmPrinterD0Ev\", \"llvm::ARMAsmPrinter::~ARMAsmPrinter()\"},\n    {\"_ZNK4llvm13ARMAsmPrinter11getPassNameEv\", \"llvm::ARMAsmPrinter::getPassName() const\"},\n    {\"_ZNK4llvm4Pass9getPassIDEv\", \"llvm::Pass::getPassID() const\"},\n    {\"_ZN4llvm13ARMAsmPrinter16EmitConstantPoolEv\", \"llvm::ARMAsmPrinter::EmitConstantPool()\"},\n    {\"_ZN4llvm10AsmPrinter21EmitFunctionBodyStartEv\", \"llvm::AsmPrinter::EmitFunctionBodyStart()\"},\n    {\"_ZN4llvm10AsmPrinter19EmitFunctionBodyEndEv\", \"llvm::AsmPrinter::EmitFunctionBodyEnd()\"},\n    {\"_ZN4llvm13ARMAsmPrinter14getISAEncodingEv\", \"llvm::ARMAsmPrinter::getISAEncoding()\"},\n    {\"_ZN4llvm18RegisterAsmPrinterINS_13ARMAsmPrinterEE9AllocatorERNS_13TargetMachineERNS_10MCStreamerE\", \"llvm::RegisterAsmPrinter<llvm::ARMAsmPrinter>::Allocator(llvm::TargetMachine&, llvm::MCStreamer&)\"},\n    {\"_ZN4llvm22MachineModuleInfoMachOC2ERKNS_17MachineModuleInfoE\", \"llvm::MachineModuleInfoMachO::MachineModuleInfoMachO(llvm::MachineModuleInfo const&)\"},\n    {\"_ZN4llvm15ARMFunctionInfoC2ERNS_15MachineFunctionE\", \"llvm::ARMFunctionInfo::ARMFunctionInfo(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm15ARMFunctionInfoD1Ev\", \"llvm::ARMFunctionInfo::~ARMFunctionInfo()\"},\n    {\"_ZN4llvm15ARMFunctionInfoD0Ev\", \"llvm::ARMFunctionInfo::~ARMFunctionInfo()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_9MCOperandELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::MCOperand, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolENS_14PointerIntPairIS2_Lj1EbNS_21PointerLikeTypeTraitsIS2_EEEENS_12DenseMapInfoIS2_EENS7_IS6_EEE16InsertIntoBucketERKS2_RKS6_PSt4pairIS2_S6_E\", \"llvm::DenseMap<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > >::InsertIntoBucket(llvm::MCSymbol* const&, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > const&, std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolENS_14PointerIntPairIS2_Lj1EbNS_21PointerLikeTypeTraitsIS2_EEEENS_12DenseMapInfoIS2_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm16ARMBaseInstrInfoC1ERKNS_12ARMSubtargetE\", \"llvm::ARMBaseInstrInfo::ARMBaseInstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm16ARMBaseInstrInfoC2ERKNS_12ARMSubtargetE\", \"llvm::ARMBaseInstrInfo::ARMBaseInstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo28CreateTargetHazardRecognizerEPKNS_13TargetMachineEPKNS_11ScheduleDAGE\", \"llvm::ARMBaseInstrInfo::CreateTargetHazardRecognizer(llvm::TargetMachine const*, llvm::ScheduleDAG const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo34CreateTargetPostRAHazardRecognizerEPKNS_18InstrItineraryDataEPKNS_11ScheduleDAGE\", \"llvm::ARMBaseInstrInfo::CreateTargetPostRAHazardRecognizer(llvm::InstrItineraryData const*, llvm::ScheduleDAG const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo21convertToThreeAddressERNS_14ilist_iteratorINS_17MachineBasicBlockEEERNS1_INS_12MachineInstrEEEPNS_13LiveVariablesE\", \"llvm::ARMBaseInstrInfo::convertToThreeAddress(llvm::ilist_iterator<llvm::MachineBasicBlock>&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::LiveVariables*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo13AnalyzeBranchERNS_17MachineBasicBlockERPS1_S4_RNS_15SmallVectorImplINS_14MachineOperandEEEb\", \"llvm::ARMBaseInstrInfo::AnalyzeBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*&, llvm::MachineBasicBlock*&, llvm::SmallVectorImpl<llvm::MachineOperand>&, bool) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo12RemoveBranchERNS_17MachineBasicBlockE\", \"llvm::ARMBaseInstrInfo::RemoveBranch(llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo12InsertBranchERNS_17MachineBasicBlockEPS1_S3_RKNS_15SmallVectorImplINS_14MachineOperandEEENS_8DebugLocE\", \"llvm::ARMBaseInstrInfo::InsertBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo22ReverseBranchConditionERNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::ARMBaseInstrInfo::ReverseBranchCondition(llvm::SmallVectorImpl<llvm::MachineOperand>&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo20PredicateInstructionEPNS_12MachineInstrERKNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::ARMBaseInstrInfo::PredicateInstruction(llvm::MachineInstr*, llvm::SmallVectorImpl<llvm::MachineOperand> const&) const\"},\n    {\"_ZN4llvm27getMatchingCondBranchOpcodeEi\", \"llvm::getMatchingCondBranchOpcode(int)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo17SubsumesPredicateERKNS_15SmallVectorImplINS_14MachineOperandEEES5_\", \"llvm::ARMBaseInstrInfo::SubsumesPredicate(llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::SmallVectorImpl<llvm::MachineOperand> const&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo16DefinesPredicateEPNS_12MachineInstrERSt6vectorINS_14MachineOperandESaIS4_EE\", \"llvm::ARMBaseInstrInfo::DefinesPredicate(llvm::MachineInstr*, std::vector<llvm::MachineOperand, std::allocator<llvm::MachineOperand> >&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo12isPredicableEPNS_12MachineInstrE\", \"llvm::ARMBaseInstrInfo::isPredicable(llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo18GetInstSizeInBytesEPKNS_12MachineInstrE\", \"llvm::ARMBaseInstrInfo::GetInstSizeInBytes(llvm::MachineInstr const*) const\"},\n    {\"_Z15getNumJTEntriesRKSt6vectorIN4llvm21MachineJumpTableEntryESaIS1_EEj\", \"getNumJTEntries(std::vector<llvm::MachineJumpTableEntry, std::allocator<llvm::MachineJumpTableEntry> > const&, unsigned int)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo11copyPhysRegERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjb\", \"llvm::ARMBaseInstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo19storeRegToStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjbiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::ARMBaseInstrInfo::storeRegToStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, bool, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo18isStoreToStackSlotEPKNS_12MachineInstrERi\", \"llvm::ARMBaseInstrInfo::isStoreToStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo20loadRegFromStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::ARMBaseInstrInfo::loadRegFromStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo19isLoadFromStackSlotEPKNS_12MachineInstrERi\", \"llvm::ARMBaseInstrInfo::isLoadFromStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo24emitFrameIndexDebugValueERNS_15MachineFunctionEiyPKNS_6MDNodeENS_8DebugLocE\", \"llvm::ARMBaseInstrInfo::emitFrameIndexDebugValue(llvm::MachineFunction&, int, unsigned long long, llvm::MDNode const*, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo13reMaterializeERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjjPKS4_RKNS_18TargetRegisterInfoE\", \"llvm::ARMBaseInstrInfo::reMaterialize(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, unsigned int, llvm::MachineInstr const*, llvm::TargetRegisterInfo const&) const\"},\n    {\"_Z12duplicateCPVRN4llvm15MachineFunctionERj\", \"duplicateCPV(llvm::MachineFunction&, unsigned int&)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo9duplicateEPNS_12MachineInstrERNS_15MachineFunctionE\", \"llvm::ARMBaseInstrInfo::duplicate(llvm::MachineInstr*, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo16produceSameValueEPKNS_12MachineInstrES3_PKNS_19MachineRegisterInfoE\", \"llvm::ARMBaseInstrInfo::produceSameValue(llvm::MachineInstr const*, llvm::MachineInstr const*, llvm::MachineRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo23areLoadsFromSameBasePtrEPNS_6SDNodeES2_RxS3_\", \"llvm::ARMBaseInstrInfo::areLoadsFromSameBasePtr(llvm::SDNode*, llvm::SDNode*, long long&, long long&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo23shouldScheduleLoadsNearEPNS_6SDNodeES2_xxj\", \"llvm::ARMBaseInstrInfo::shouldScheduleLoadsNear(llvm::SDNode*, llvm::SDNode*, long long, long long, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo20isSchedulingBoundaryEPKNS_12MachineInstrEPKNS_17MachineBasicBlockERKNS_15MachineFunctionE\", \"llvm::ARMBaseInstrInfo::isSchedulingBoundary(llvm::MachineInstr const*, llvm::MachineBasicBlock const*, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo19isProfitableToIfCvtERNS_17MachineBasicBlockEjjff\", \"llvm::ARMBaseInstrInfo::isProfitableToIfCvt(llvm::MachineBasicBlock&, unsigned int, unsigned int, float, float) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo19isProfitableToIfCvtERNS_17MachineBasicBlockEjjS2_jjff\", \"llvm::ARMBaseInstrInfo::isProfitableToIfCvt(llvm::MachineBasicBlock&, unsigned int, unsigned int, llvm::MachineBasicBlock&, unsigned int, unsigned int, float, float) const\"},\n    {\"_ZN4llvm17getInstrPredicateEPKNS_12MachineInstrERj\", \"llvm::getInstrPredicate(llvm::MachineInstr const*, unsigned int&)\"},\n    {\"_ZN4llvm23emitARMRegPlusImmediateERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjiNS_5ARMCC9CondCodesEjRKNS_16ARMBaseInstrInfoE\", \"llvm::emitARMRegPlusImmediate(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::DebugLoc, unsigned int, unsigned int, int, llvm::ARMCC::CondCodes, unsigned int, llvm::ARMBaseInstrInfo const&)\"},\n    {\"_ZN4llvm20rewriteARMFrameIndexERNS_12MachineInstrEjjRiRKNS_16ARMBaseInstrInfoE\", \"llvm::rewriteARMFrameIndex(llvm::MachineInstr&, unsigned int, unsigned int, int&, llvm::ARMBaseInstrInfo const&)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo14AnalyzeCompareEPKNS_12MachineInstrERjRiS5_\", \"llvm::ARMBaseInstrInfo::AnalyzeCompare(llvm::MachineInstr const*, unsigned int&, int&, int&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo20OptimizeCompareInstrEPNS_12MachineInstrEjiiPKNS_19MachineRegisterInfoE\", \"llvm::ARMBaseInstrInfo::OptimizeCompareInstr(llvm::MachineInstr*, unsigned int, int, int, llvm::MachineRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo13FoldImmediateEPNS_12MachineInstrES2_jPNS_19MachineRegisterInfoE\", \"llvm::ARMBaseInstrInfo::FoldImmediate(llvm::MachineInstr*, llvm::MachineInstr*, unsigned int, llvm::MachineRegisterInfo*) const\"},\n    {\"_ZN4llvm6ARM_AM22getT2SOImmTwoPartFirstEj\", \"llvm::ARM_AM::getT2SOImmTwoPartFirst(unsigned int)\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo14getNumMicroOpsEPKNS_18InstrItineraryDataEPKNS_12MachineInstrE\", \"llvm::ARMBaseInstrInfo::getNumMicroOps(llvm::InstrItineraryData const*, llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo15getVLDMDefCycleEPKNS_18InstrItineraryDataERKNS_15TargetInstrDescEjjj\", \"llvm::ARMBaseInstrInfo::getVLDMDefCycle(llvm::InstrItineraryData const*, llvm::TargetInstrDesc const&, unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo14getLDMDefCycleEPKNS_18InstrItineraryDataERKNS_15TargetInstrDescEjjj\", \"llvm::ARMBaseInstrInfo::getLDMDefCycle(llvm::InstrItineraryData const*, llvm::TargetInstrDesc const&, unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo15getVSTMUseCycleEPKNS_18InstrItineraryDataERKNS_15TargetInstrDescEjjj\", \"llvm::ARMBaseInstrInfo::getVSTMUseCycle(llvm::InstrItineraryData const*, llvm::TargetInstrDesc const&, unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo14getSTMUseCycleEPKNS_18InstrItineraryDataERKNS_15TargetInstrDescEjjj\", \"llvm::ARMBaseInstrInfo::getSTMUseCycle(llvm::InstrItineraryData const*, llvm::TargetInstrDesc const&, unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo17getOperandLatencyEPKNS_18InstrItineraryDataERKNS_15TargetInstrDescEjjS6_jj\", \"llvm::ARMBaseInstrInfo::getOperandLatency(llvm::InstrItineraryData const*, llvm::TargetInstrDesc const&, unsigned int, unsigned int, llvm::TargetInstrDesc const&, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo17getOperandLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEjS6_j\", \"llvm::ARMBaseInstrInfo::getOperandLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo17getOperandLatencyEPKNS_18InstrItineraryDataEPNS_6SDNodeEjS5_j\", \"llvm::ARMBaseInstrInfo::getOperandLatency(llvm::InstrItineraryData const*, llvm::SDNode*, unsigned int, llvm::SDNode*, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo15getInstrLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEPj\", \"llvm::ARMBaseInstrInfo::getInstrLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo15getInstrLatencyEPKNS_18InstrItineraryDataEPNS_6SDNodeE\", \"llvm::ARMBaseInstrInfo::getInstrLatency(llvm::InstrItineraryData const*, llvm::SDNode*) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo21hasHighOperandLatencyEPKNS_18InstrItineraryDataEPKNS_19MachineRegisterInfoEPKNS_12MachineInstrEjS9_j\", \"llvm::ARMBaseInstrInfo::hasHighOperandLatency(llvm::InstrItineraryData const*, llvm::MachineRegisterInfo const*, llvm::MachineInstr const*, unsigned int, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo16hasLowDefLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEj\", \"llvm::ARMBaseInstrInfo::hasLowDefLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo18isFpMLxInstructionEjRjS1_RbS2_\", \"llvm::ARMBaseInstrInfo::isFpMLxInstruction(unsigned int, unsigned int&, unsigned int&, bool&, bool&) const\"},\n    {\"_ZN4llvm8DenseMapIjjNS_12DenseMapInfoIjEES2_E6insertERKSt4pairIjjE\", \"llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<unsigned int, unsigned int> const&)\"},\n    {\"_ZN4llvm8SmallSetIjLj16EE6insertERKj\", \"llvm::SmallSet<unsigned int, 16u>::insert(unsigned int const&)\"},\n    {\"_ZN4llvm13LiveVariables7VarInfo10removeKillEPNS_12MachineInstrE\", \"llvm::LiveVariables::VarInfo::removeKill(llvm::MachineInstr*)\"},\n    {\"_ZNSt6vectorIN4llvm14MachineOperandESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MachineOperand, std::allocator<llvm::MachineOperand> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineOperand*, std::vector<llvm::MachineOperand, std::allocator<llvm::MachineOperand> > >, llvm::MachineOperand const&)\"},\n    {\"_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE16_M_insert_uniqueERKj\", \"std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::_M_insert_unique(unsigned int const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm12MachineInstrESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, llvm::MachineInstr*>(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, __gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, llvm::MachineInstr* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer8EmitNoopEv\", \"llvm::ScheduleHazardRecognizer::EmitNoop()\"},\n    {\"_ZN4llvm19ARMBaseRegisterInfoC1ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::ARMBaseRegisterInfo::ARMBaseRegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm19ARMBaseRegisterInfoC2ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::ARMBaseRegisterInfo::ARMBaseRegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm18ARMGenRegisterInfoC2Eii\", \"llvm::ARMGenRegisterInfo::ARMGenRegisterInfo(int, int)\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo15getReservedRegsERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getReservedRegs(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo14hasBasePointerERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::hasBasePointer(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo13isReservedRegERKNS_15MachineFunctionEj\", \"llvm::ARMBaseRegisterInfo::isReservedReg(llvm::MachineFunction const&, unsigned int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo24getMatchingSuperRegClassEPKNS_19TargetRegisterClassES3_j\", \"llvm::ARMBaseRegisterInfo::getMatchingSuperRegClass(llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*, unsigned int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo23canCombineSubRegIndicesEPKNS_19TargetRegisterClassERNS_15SmallVectorImplIjEERj\", \"llvm::ARMBaseRegisterInfo::canCombineSubRegIndices(llvm::TargetRegisterClass const*, llvm::SmallVectorImpl<unsigned int>&, unsigned int&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18getPointerRegClassEj\", \"llvm::ARMBaseRegisterInfo::getPointerRegClass(unsigned int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo19getRegisterPairEvenEjRKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getRegisterPairEven(unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18getRegisterPairOddEjRKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getRegisterPairOdd(unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo19ResolveRegAllocHintEjjRKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::ResolveRegAllocHint(unsigned int, unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18UpdateRegAllocHintEjjRNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::UpdateRegAllocHint(unsigned int, unsigned int, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo15canRealignStackERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::canRealignStack(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo21needsStackRealignmentERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::needsStackRealignment(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo20cannotEliminateFrameERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::cannotEliminateFrame(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo13getRARegisterEv\", \"llvm::ARMBaseRegisterInfo::getRARegister() const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo16getFrameRegisterERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::getFrameRegister(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo22getEHExceptionRegisterEv\", \"llvm::ARMBaseRegisterInfo::getEHExceptionRegister() const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo20getEHHandlerRegisterEv\", \"llvm::ARMBaseRegisterInfo::getEHHandlerRegister() const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo14getDwarfRegNumEjb\", \"llvm::ARMBaseRegisterInfo::getDwarfRegNum(unsigned int, bool) const\"},\n    {\"_ZNK4llvm18ARMGenRegisterInfo18getDwarfRegNumFullEjj\", \"llvm::ARMGenRegisterInfo::getDwarfRegNumFull(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo17emitLoadConstPoolERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjiNS_5ARMCC9CondCodesEj\", \"llvm::ARMBaseRegisterInfo::emitLoadConstPool(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::DebugLoc, unsigned int, unsigned int, int, llvm::ARMCC::CondCodes, unsigned int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo26requiresRegisterScavengingERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::requiresRegisterScavenging(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo28requiresFrameIndexScavengingERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::requiresFrameIndexScavenging(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo28requiresVirtualBaseRegistersERKNS_15MachineFunctionE\", \"llvm::ARMBaseRegisterInfo::requiresVirtualBaseRegisters(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo29eliminateCallFramePseudoInstrERNS_15MachineFunctionERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::ARMBaseRegisterInfo::eliminateCallFramePseudoInstr(llvm::MachineFunction&, llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo24getFrameIndexInstrOffsetEPKNS_12MachineInstrEi\", \"llvm::ARMBaseRegisterInfo::getFrameIndexInstrOffset(llvm::MachineInstr const*, int) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo17needsFrameBaseRegEPNS_12MachineInstrEx\", \"llvm::ARMBaseRegisterInfo::needsFrameBaseReg(llvm::MachineInstr*, long long) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo28materializeFrameBaseRegisterEPNS_17MachineBasicBlockEjix\", \"llvm::ARMBaseRegisterInfo::materializeFrameBaseRegister(llvm::MachineBasicBlock*, unsigned int, int, long long) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo17resolveFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEjx\", \"llvm::ARMBaseRegisterInfo::resolveFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, long long) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo18isFrameOffsetLegalEPKNS_12MachineInstrEx\", \"llvm::ARMBaseRegisterInfo::isFrameOffsetLegal(llvm::MachineInstr const*, long long) const\"},\n    {\"_ZNK4llvm19ARMBaseRegisterInfo19eliminateFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEiPNS_12RegScavengerE\", \"llvm::ARMBaseRegisterInfo::eliminateFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, int, llvm::RegScavenger*) const\"},\n    {\"_ZN4llvm3ARM8CCRClassC1Ev\", \"llvm::ARM::CCRClass::CCRClass()\"},\n    {\"_ZN4llvm3ARM8DPRClassC1Ev\", \"llvm::ARM::DPRClass::DPRClass()\"},\n    {\"_ZN4llvm3ARM10DPR_8ClassC1Ev\", \"llvm::ARM::DPR_8Class::DPR_8Class()\"},\n    {\"_ZN4llvm3ARM13DPR_VFP2ClassC1Ev\", \"llvm::ARM::DPR_VFP2Class::DPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM8GPRClassC1Ev\", \"llvm::ARM::GPRClass::GPRClass()\"},\n    {\"_ZN4llvm3ARM8QPRClassC1Ev\", \"llvm::ARM::QPRClass::QPRClass()\"},\n    {\"_ZN4llvm3ARM10QPR_8ClassC1Ev\", \"llvm::ARM::QPR_8Class::QPR_8Class()\"},\n    {\"_ZN4llvm3ARM13QPR_VFP2ClassC1Ev\", \"llvm::ARM::QPR_VFP2Class::QPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM9QQPRClassC1Ev\", \"llvm::ARM::QQPRClass::QQPRClass()\"},\n    {\"_ZN4llvm3ARM14QQPR_VFP2ClassC1Ev\", \"llvm::ARM::QQPR_VFP2Class::QQPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM11QQQQPRClassC1Ev\", \"llvm::ARM::QQQQPRClass::QQQQPRClass()\"},\n    {\"_ZN4llvm3ARM8SPRClassC1Ev\", \"llvm::ARM::SPRClass::SPRClass()\"},\n    {\"_ZN4llvm3ARM10SPR_8ClassC1Ev\", \"llvm::ARM::SPR_8Class::SPR_8Class()\"},\n    {\"_ZN4llvm3ARM9rGPRClassC1Ev\", \"llvm::ARM::rGPRClass::rGPRClass()\"},\n    {\"_ZN4llvm3ARM9tGPRClassC1Ev\", \"llvm::ARM::tGPRClass::tGPRClass()\"},\n    {\"_ZN4llvm3ARM10tcGPRClassC1Ev\", \"llvm::ARM::tcGPRClass::tcGPRClass()\"},\n    {\"_ZN4llvm3ARM8CCRClassC2Ev\", \"llvm::ARM::CCRClass::CCRClass()\"},\n    {\"_ZNK4llvm3ARM8DPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::DPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM8DPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::DPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM8DPRClassC2Ev\", \"llvm::ARM::DPRClass::DPRClass()\"},\n    {\"_ZN4llvm3ARM10DPR_8ClassC2Ev\", \"llvm::ARM::DPR_8Class::DPR_8Class()\"},\n    {\"_ZN4llvm3ARM13DPR_VFP2ClassC2Ev\", \"llvm::ARM::DPR_VFP2Class::DPR_VFP2Class()\"},\n    {\"_ZNK4llvm3ARM8GPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::GPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM8GPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::GPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM8GPRClassC2Ev\", \"llvm::ARM::GPRClass::GPRClass()\"},\n    {\"_ZNK4llvm3ARM8QPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::QPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM8QPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::QPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM8QPRClassC2Ev\", \"llvm::ARM::QPRClass::QPRClass()\"},\n    {\"_ZN4llvm3ARM10QPR_8ClassC2Ev\", \"llvm::ARM::QPR_8Class::QPR_8Class()\"},\n    {\"_ZN4llvm3ARM13QPR_VFP2ClassC2Ev\", \"llvm::ARM::QPR_VFP2Class::QPR_VFP2Class()\"},\n    {\"_ZNK4llvm3ARM9QQPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::QQPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM9QQPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::QQPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM9QQPRClassC2Ev\", \"llvm::ARM::QQPRClass::QQPRClass()\"},\n    {\"_ZN4llvm3ARM14QQPR_VFP2ClassC2Ev\", \"llvm::ARM::QQPR_VFP2Class::QQPR_VFP2Class()\"},\n    {\"_ZNK4llvm3ARM11QQQQPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::QQQQPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM11QQQQPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::QQQQPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM11QQQQPRClassC2Ev\", \"llvm::ARM::QQQQPRClass::QQQQPRClass()\"},\n    {\"_ZN4llvm3ARM8SPRClassC2Ev\", \"llvm::ARM::SPRClass::SPRClass()\"},\n    {\"_ZN4llvm3ARM10SPR_8ClassC2Ev\", \"llvm::ARM::SPR_8Class::SPR_8Class()\"},\n    {\"_ZNK4llvm3ARM9rGPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::rGPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM9rGPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::rGPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM9rGPRClassC2Ev\", \"llvm::ARM::rGPRClass::rGPRClass()\"},\n    {\"_ZN4llvm3ARM9tGPRClassC2Ev\", \"llvm::ARM::tGPRClass::tGPRClass()\"},\n    {\"_ZNK4llvm3ARM10tcGPRClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::ARM::tcGPRClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm3ARM10tcGPRClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::ARM::tcGPRClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM10tcGPRClassC2Ev\", \"llvm::ARM::tcGPRClass::tcGPRClass()\"},\n    {\"_ZNK4llvm18ARMGenRegisterInfo9getSubRegEjj\", \"llvm::ARMGenRegisterInfo::getSubReg(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm18ARMGenRegisterInfo14getSubRegIndexEjj\", \"llvm::ARMGenRegisterInfo::getSubRegIndex(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm18ARMGenRegisterInfo20composeSubRegIndicesEjj\", \"llvm::ARMGenRegisterInfo::composeSubRegIndices(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm18ARMGenRegisterInfoC1Eii\", \"llvm::ARMGenRegisterInfo::ARMGenRegisterInfo(int, int)\"},\n    {\"_ZN4llvm3ARM8CCRClassD1Ev\", \"llvm::ARM::CCRClass::~CCRClass()\"},\n    {\"_ZN4llvm3ARM8DPRClassD1Ev\", \"llvm::ARM::DPRClass::~DPRClass()\"},\n    {\"_ZN4llvm3ARM10DPR_8ClassD1Ev\", \"llvm::ARM::DPR_8Class::~DPR_8Class()\"},\n    {\"_ZN4llvm3ARM13DPR_VFP2ClassD1Ev\", \"llvm::ARM::DPR_VFP2Class::~DPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM8GPRClassD1Ev\", \"llvm::ARM::GPRClass::~GPRClass()\"},\n    {\"_ZN4llvm3ARM8QPRClassD1Ev\", \"llvm::ARM::QPRClass::~QPRClass()\"},\n    {\"_ZN4llvm3ARM10QPR_8ClassD1Ev\", \"llvm::ARM::QPR_8Class::~QPR_8Class()\"},\n    {\"_ZN4llvm3ARM13QPR_VFP2ClassD1Ev\", \"llvm::ARM::QPR_VFP2Class::~QPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM9QQPRClassD1Ev\", \"llvm::ARM::QQPRClass::~QQPRClass()\"},\n    {\"_ZN4llvm3ARM14QQPR_VFP2ClassD1Ev\", \"llvm::ARM::QQPR_VFP2Class::~QQPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM11QQQQPRClassD1Ev\", \"llvm::ARM::QQQQPRClass::~QQQQPRClass()\"},\n    {\"_ZN4llvm3ARM8SPRClassD1Ev\", \"llvm::ARM::SPRClass::~SPRClass()\"},\n    {\"_ZN4llvm3ARM10SPR_8ClassD1Ev\", \"llvm::ARM::SPR_8Class::~SPR_8Class()\"},\n    {\"_ZN4llvm3ARM9rGPRClassD1Ev\", \"llvm::ARM::rGPRClass::~rGPRClass()\"},\n    {\"_ZN4llvm3ARM9tGPRClassD1Ev\", \"llvm::ARM::tGPRClass::~tGPRClass()\"},\n    {\"_ZN4llvm3ARM10tcGPRClassD1Ev\", \"llvm::ARM::tcGPRClass::~tcGPRClass()\"},\n    {\"_ZN4llvm19TargetRegisterClassC2EjPKcPKNS_3EVTEPKPKS0_S9_S9_S9_jjiPKjSB_\", \"llvm::TargetRegisterClass::TargetRegisterClass(unsigned int, char const*, llvm::EVT const*, llvm::TargetRegisterClass const* const*, llvm::TargetRegisterClass const* const*, llvm::TargetRegisterClass const* const*, llvm::TargetRegisterClass const* const*, unsigned int, unsigned int, int, unsigned int const*, unsigned int const*)\"},\n    {\"_ZN4llvm3ARM8DPRClassD0Ev\", \"llvm::ARM::DPRClass::~DPRClass()\"},\n    {\"_ZN4llvm3ARM8GPRClassD0Ev\", \"llvm::ARM::GPRClass::~GPRClass()\"},\n    {\"_ZN4llvm3ARM8QPRClassD0Ev\", \"llvm::ARM::QPRClass::~QPRClass()\"},\n    {\"_ZN4llvm3ARM9QQPRClassD0Ev\", \"llvm::ARM::QQPRClass::~QQPRClass()\"},\n    {\"_ZN4llvm3ARM11QQQQPRClassD0Ev\", \"llvm::ARM::QQQQPRClass::~QQQQPRClass()\"},\n    {\"_ZN4llvm3ARM9rGPRClassD0Ev\", \"llvm::ARM::rGPRClass::~rGPRClass()\"},\n    {\"_ZN4llvm3ARM10tcGPRClassD0Ev\", \"llvm::ARM::tcGPRClass::~tcGPRClass()\"},\n    {\"_ZN4llvm3ARM9tGPRClassD0Ev\", \"llvm::ARM::tGPRClass::~tGPRClass()\"},\n    {\"_ZNK4llvm19TargetRegisterClass22allocation_order_beginERKNS_15MachineFunctionE\", \"llvm::TargetRegisterClass::allocation_order_begin(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19TargetRegisterClass20allocation_order_endERKNS_15MachineFunctionE\", \"llvm::TargetRegisterClass::allocation_order_end(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm3ARM10SPR_8ClassD0Ev\", \"llvm::ARM::SPR_8Class::~SPR_8Class()\"},\n    {\"_ZN4llvm3ARM8SPRClassD0Ev\", \"llvm::ARM::SPRClass::~SPRClass()\"},\n    {\"_ZN4llvm3ARM14QQPR_VFP2ClassD0Ev\", \"llvm::ARM::QQPR_VFP2Class::~QQPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM13QPR_VFP2ClassD0Ev\", \"llvm::ARM::QPR_VFP2Class::~QPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM10QPR_8ClassD0Ev\", \"llvm::ARM::QPR_8Class::~QPR_8Class()\"},\n    {\"_ZN4llvm3ARM13DPR_VFP2ClassD0Ev\", \"llvm::ARM::DPR_VFP2Class::~DPR_VFP2Class()\"},\n    {\"_ZN4llvm3ARM10DPR_8ClassD0Ev\", \"llvm::ARM::DPR_8Class::~DPR_8Class()\"},\n    {\"_ZN4llvm3ARM8CCRClassD0Ev\", \"llvm::ARM::CCRClass::~CCRClass()\"},\n    {\"_ZN4llvm19TargetRegisterClassD1Ev\", \"llvm::TargetRegisterClass::~TargetRegisterClass()\"},\n    {\"_ZN4llvm19TargetRegisterClassD0Ev\", \"llvm::TargetRegisterClass::~TargetRegisterClass()\"},\n    {\"_ZN4llvm27createARMJITCodeEmitterPassERNS_20ARMBaseTargetMachineERNS_14JITCodeEmitterE\", \"llvm::createARMJITCodeEmitterPass(llvm::ARMBaseTargetMachine&, llvm::JITCodeEmitter&)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitterD1Ev\", \"(anonymous namespace)::ARMCodeEmitter::~ARMCodeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitterD0Ev\", \"(anonymous namespace)::ARMCodeEmitter::~ARMCodeEmitter()\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter11getPassNameEv\", \"(anonymous namespace)::ARMCodeEmitter::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::ARMCodeEmitter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ARMCodeEmitter::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter15emitInstructionERKN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMCodeEmitter::emitInstruction(llvm::MachineInstr const&)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter25emitLEApcrelJTInstructionERKN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMCodeEmitter::emitLEApcrelJTInstruction(llvm::MachineInstr const&)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter29emitDataProcessingInstructionERKN4llvm12MachineInstrEjj\", \"(anonymous namespace)::ARMCodeEmitter::emitDataProcessingInstruction(llvm::MachineInstr const&, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter24emitLoadStoreInstructionERKN4llvm12MachineInstrEjj\", \"(anonymous namespace)::ARMCodeEmitter::emitLoadStoreInstruction(llvm::MachineInstr const&, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter28emitMiscLoadStoreInstructionERKN4llvm12MachineInstrEj\", \"(anonymous namespace)::ARMCodeEmitter::emitMiscLoadStoreInstruction(llvm::MachineInstr const&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter25emitMiscBranchInstructionERKN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMCodeEmitter::emitMiscBranchInstruction(llvm::MachineInstr const&)\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter21getBinaryCodeForInstrERKN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMCodeEmitter::getBinaryCodeForInstr(llvm::MachineInstr const&) const\"},\n    {\"_Z12encodeNEONRdRKN4llvm12MachineInstrEj\", \"encodeNEONRd(llvm::MachineInstr const&, unsigned int)\"},\n    {\"_Z12encodeNEONRnRKN4llvm12MachineInstrEj\", \"encodeNEONRn(llvm::MachineInstr const&, unsigned int)\"},\n    {\"_Z12encodeNEONRmRKN4llvm12MachineInstrEj\", \"encodeNEONRm(llvm::MachineInstr const&, unsigned int)\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter17getMachineOpValueERKN4llvm12MachineInstrERKNS1_14MachineOperandE\", \"(anonymous namespace)::ARMCodeEmitter::getMachineOpValue(llvm::MachineInstr const&, llvm::MachineOperand const&) const\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter23getAddrModeImm12OpValueERKN4llvm12MachineInstrEj\", \"(anonymous namespace)::ARMCodeEmitter::getAddrModeImm12OpValue(llvm::MachineInstr const&, unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_114ARMCodeEmitter19getAddrMode5OpValueERKN4llvm12MachineInstrEj\", \"(anonymous namespace)::ARMCodeEmitter::getAddrMode5OpValue(llvm::MachineInstr const&, unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter19emitInlineJumpTableEj\", \"(anonymous namespace)::ARMCodeEmitter::emitInlineJumpTable(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter14getMovi32ValueERKN4llvm12MachineInstrERKNS1_14MachineOperandEj\", \"(anonymous namespace)::ARMCodeEmitter::getMovi32Value(llvm::MachineInstr const&, llvm::MachineOperand const&, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjlNS_12DenseMapInfoIjEENS1_IlEEE6insertERKSt4pairIjlE\", \"llvm::DenseMap<unsigned int, long, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<long> >::insert(std::pair<unsigned int, long> const&)\"},\n    {\"_ZN4llvm8DenseMapIjlNS_12DenseMapInfoIjEENS1_IlEEE16InsertIntoBucketERKjRKlPSt4pairIjlE\", \"llvm::DenseMap<unsigned int, long, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<long> >::InsertIntoBucket(unsigned int const&, long const&, std::pair<unsigned int, long>*)\"},\n    {\"_ZN4llvm8DenseMapIjlNS_12DenseMapInfoIjEENS1_IlEEE4growEj\", \"llvm::DenseMap<unsigned int, long, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIlE6resizeEj\", \"llvm::SmallVectorImpl<long>::resize(unsigned int)\"},\n    {\"_ZN4llvm27createARMConstantIslandPassEv\", \"llvm::createARMConstantIslandPass()\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslandsD1Ev\", \"(anonymous namespace)::ARMConstantIslands::~ARMConstantIslands()\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslandsD0Ev\", \"(anonymous namespace)::ARMConstantIslands::~ARMConstantIslands()\"},\n    {\"_ZNK12_GLOBAL__N_118ARMConstantIslands11getPassNameEv\", \"(anonymous namespace)::ARMConstantIslands::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ARMConstantIslands::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands12CPEIsInRangeEPN4llvm12MachineInstrEjS3_jbb\", \"(anonymous namespace)::ARMConstantIslands::CPEIsInRange(llvm::MachineInstr*, unsigned int, llvm::MachineInstr*, unsigned int, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands20AdjustBBOffsetsAfterEPN4llvm17MachineBasicBlockEi\", \"(anonymous namespace)::ARMConstantIslands::AdjustBBOffsetsAfter(llvm::MachineBasicBlock*, int)\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands21SplitBlockBeforeInstrEPN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMConstantIslands::SplitBlockBeforeInstr(llvm::MachineInstr*)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_118ARMConstantIslands9ImmBranchESaIS2_EE9push_backERKS2_\", \"std::vector<(anonymous namespace)::ARMConstantIslands::ImmBranch, std::allocator<(anonymous namespace)::ARMConstantIslands::ImmBranch> >::push_back((anonymous namespace)::ARMConstantIslands::ImmBranch const&)\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands17DecrementOldEntryEjPN4llvm12MachineInstrE\", \"(anonymous namespace)::ARMConstantIslands::DecrementOldEntry(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_118ARMConstantIslands7CPEntryESaIS2_EE9push_backERKS2_\", \"std::vector<(anonymous namespace)::ARMConstantIslands::CPEntry, std::allocator<(anonymous namespace)::ARMConstantIslands::CPEntry> >::push_back((anonymous namespace)::ARMConstantIslands::CPEntry const&)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_118ARMConstantIslands7CPEntryESaIS2_EEC1ERKS4_\", \"std::vector<(anonymous namespace)::ARMConstantIslands::CPEntry, std::allocator<(anonymous namespace)::ARMConstantIslands::CPEntry> >::vector(std::vector<(anonymous namespace)::ARMConstantIslands::CPEntry, std::allocator<(anonymous namespace)::ARMConstantIslands::CPEntry> > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm17MachineBasicBlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, llvm::MachineBasicBlock* const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, llvm::MachineBasicBlock*>(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, llvm::MachineBasicBlock* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC1EPKNS_8ConstantEjNS_5ARMCP9ARMCPKindEhNS4_13ARMCPModifierEb\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::Constant const*, unsigned int, llvm::ARMCP::ARMCPKind, unsigned char, llvm::ARMCP::ARMCPModifier, bool)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC2EPKNS_8ConstantEjNS_5ARMCP9ARMCPKindEhNS4_13ARMCPModifierEb\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::Constant const*, unsigned int, llvm::ARMCP::ARMCPKind, unsigned char, llvm::ARMCP::ARMCPModifier, bool)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC1ERNS_11LLVMContextEPKcjhNS_5ARMCP13ARMCPModifierEb\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::LLVMContext&, char const*, unsigned int, unsigned char, llvm::ARMCP::ARMCPModifier, bool)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC2ERNS_11LLVMContextEPKcjhNS_5ARMCP13ARMCPModifierEb\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::LLVMContext&, char const*, unsigned int, unsigned char, llvm::ARMCP::ARMCPModifier, bool)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC1EPKNS_11GlobalValueENS_5ARMCP13ARMCPModifierE\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::GlobalValue const*, llvm::ARMCP::ARMCPModifier)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueC2EPKNS_11GlobalValueENS_5ARMCP13ARMCPModifierE\", \"llvm::ARMConstantPoolValue::ARMConstantPoolValue(llvm::GlobalValue const*, llvm::ARMCP::ARMCPModifier)\"},\n    {\"_ZNK4llvm20ARMConstantPoolValue5getGVEv\", \"llvm::ARMConstantPoolValue::getGV() const\"},\n    {\"_ZNK4llvm20ARMConstantPoolValue15getBlockAddressEv\", \"llvm::ARMConstantPoolValue::getBlockAddress() const\"},\n    {\"_ZN4llvm20ARMConstantPoolValue25getExistingMachineCPValueEPNS_19MachineConstantPoolEj\", \"llvm::ARMConstantPoolValue::getExistingMachineCPValue(llvm::MachineConstantPool*, unsigned int)\"},\n    {\"_ZN4llvm20ARMConstantPoolValueD0Ev\", \"llvm::ARMConstantPoolValue::~ARMConstantPoolValue()\"},\n    {\"_ZN4llvm20ARMConstantPoolValueD1Ev\", \"llvm::ARMConstantPoolValue::~ARMConstantPoolValue()\"},\n    {\"_ZN4llvm20ARMConstantPoolValueD2Ev\", \"llvm::ARMConstantPoolValue::~ARMConstantPoolValue()\"},\n    {\"_ZN4llvm20ARMConstantPoolValue20AddSelectionDAGCSEIdERNS_16FoldingSetNodeIDE\", \"llvm::ARMConstantPoolValue::AddSelectionDAGCSEId(llvm::FoldingSetNodeID&)\"},\n    {\"_ZN4llvm20ARMConstantPoolValue12hasSameValueEPS0_\", \"llvm::ARMConstantPoolValue::hasSameValue(llvm::ARMConstantPoolValue*)\"},\n    {\"_ZNK4llvm20ARMConstantPoolValue4dumpEv\", \"llvm::ARMConstantPoolValue::dump() const\"},\n    {\"_ZNK4llvm20ARMConstantPoolValue5printERNS_11raw_ostreamE\", \"llvm::ARMConstantPoolValue::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm20ARMConstantPoolValue17getRelocationInfoEv\", \"llvm::ARMConstantPoolValue::getRelocationInfo() const\"},\n    {\"_ZNSt6vectorIN4llvm24MachineConstantPoolEntryESaIS1_EEC2ERKS3_\", \"std::vector<llvm::MachineConstantPoolEntry, std::allocator<llvm::MachineConstantPoolEntry> >::vector(std::vector<llvm::MachineConstantPoolEntry, std::allocator<llvm::MachineConstantPoolEntry> > const&)\"},\n    {\"_ZN4llvm24MachineConstantPoolValueD1Ev\", \"llvm::MachineConstantPoolValue::~MachineConstantPoolValue()\"},\n    {\"_ZN4llvm24MachineConstantPoolValueD0Ev\", \"llvm::MachineConstantPoolValue::~MachineConstantPoolValue()\"},\n    {\"_ZN4llvm16ARMELFWriterInfoC1ERNS_13TargetMachineE\", \"llvm::ARMELFWriterInfo::ARMELFWriterInfo(llvm::TargetMachine&)\"},\n    {\"_ZN4llvm16ARMELFWriterInfoC2ERNS_13TargetMachineE\", \"llvm::ARMELFWriterInfo::ARMELFWriterInfo(llvm::TargetMachine&)\"},\n    {\"_ZN4llvm16ARMELFWriterInfoD0Ev\", \"llvm::ARMELFWriterInfo::~ARMELFWriterInfo()\"},\n    {\"_ZN4llvm16ARMELFWriterInfoD1Ev\", \"llvm::ARMELFWriterInfo::~ARMELFWriterInfo()\"},\n    {\"_ZN4llvm16ARMELFWriterInfoD2Ev\", \"llvm::ARMELFWriterInfo::~ARMELFWriterInfo()\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo17getRelocationTypeEj\", \"llvm::ARMELFWriterInfo::getRelocationType(unsigned int) const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo24getDefaultAddendForRelTyEjl\", \"llvm::ARMELFWriterInfo::getDefaultAddendForRelTy(unsigned int, long) const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo19getRelocationTySizeEj\", \"llvm::ARMELFWriterInfo::getRelocationTySize(unsigned int) const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo15isPCRelativeRelEj\", \"llvm::ARMELFWriterInfo::isPCRelativeRel(unsigned int) const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo28getAbsoluteLabelMachineRelTyEv\", \"llvm::ARMELFWriterInfo::getAbsoluteLabelMachineRelTy() const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo17computeRelocationEjjj\", \"llvm::ARMELFWriterInfo::computeRelocation(unsigned int, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm16ARMELFWriterInfo19hasRelocationAddendEv\", \"llvm::ARMELFWriterInfo::hasRelocationAddend() const\"},\n    {\"_ZN4llvm25createARMExpandPseudoPassEv\", \"llvm::createARMExpandPseudoPass()\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudoD1Ev\", \"(anonymous namespace)::ARMExpandPseudo::~ARMExpandPseudo()\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudoD0Ev\", \"(anonymous namespace)::ARMExpandPseudo::~ARMExpandPseudo()\"},\n    {\"_ZNK12_GLOBAL__N_115ARMExpandPseudo11getPassNameEv\", \"(anonymous namespace)::ARMExpandPseudo::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudo20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ARMExpandPseudo::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudo8ExpandMIERN4llvm17MachineBasicBlockENS1_14ilist_iteratorINS1_12MachineInstrEEE\", \"(anonymous namespace)::ARMExpandPseudo::ExpandMI(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudo10ExpandVTBLERN4llvm14ilist_iteratorINS1_12MachineInstrEEEjbj\", \"(anonymous namespace)::ARMExpandPseudo::ExpandVTBL(llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, bool, unsigned int)\"},\n    {\"_Z11GetDSubRegsjN12_GLOBAL__N_114NEONRegSpacingEPKN4llvm18TargetRegisterInfoERjS5_S5_S5_\", \"GetDSubRegs(unsigned int, (anonymous namespace)::NEONRegSpacing, llvm::TargetRegisterInfo const*, unsigned int&, unsigned int&, unsigned int&, unsigned int&)\"},\n    {\"_ZN4llvm3ARM14createFastISelERNS_20FunctionLoweringInfoE\", \"llvm::ARM::createFastISel(llvm::FunctionLoweringInfo&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISelD1Ev\", \"(anonymous namespace)::ARMFastISel::~ARMFastISel()\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISelD0Ev\", \"(anonymous namespace)::ARMFastISel::~ARMFastISel()\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel23TargetSelectInstructionEPKN4llvm11InstructionE\", \"(anonymous namespace)::ARMFastISel::TargetSelectInstruction(llvm::Instruction const*)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel10FastEmit_rEN4llvm3MVTES2_jjb\", \"(anonymous namespace)::ARMFastISel::FastEmit_r(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel11FastEmit_rrEN4llvm3MVTES2_jjbjb\", \"(anonymous namespace)::ARMFastISel::FastEmit_rr(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel11FastEmit_riEN4llvm3MVTES2_jjby\", \"(anonymous namespace)::ARMFastISel::FastEmit_ri(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel10FastEmit_iEN4llvm3MVTES2_jy\", \"(anonymous namespace)::ARMFastISel::FastEmit_i(llvm::MVT, llvm::MVT, unsigned int, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel25TargetMaterializeConstantEPKN4llvm8ConstantE\", \"(anonymous namespace)::ARMFastISel::TargetMaterializeConstant(llvm::Constant const*)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel23TargetMaterializeAllocaEPKN4llvm10AllocaInstE\", \"(anonymous namespace)::ARMFastISel::TargetMaterializeAlloca(llvm::AllocaInst const*)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel13FastEmitInst_EjPKN4llvm19TargetRegisterClassE\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_(unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel14FastEmitInst_rEjPKN4llvm19TargetRegisterClassEjb\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_r(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel15FastEmitInst_rrEjPKN4llvm19TargetRegisterClassEjbjb\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_rr(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel15FastEmitInst_riEjPKN4llvm19TargetRegisterClassEjby\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_ri(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel15FastEmitInst_rfEjPKN4llvm19TargetRegisterClassEjbPKNS1_10ConstantFPE\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_rf(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, llvm::ConstantFP const*)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel14FastEmitInst_iEjPKN4llvm19TargetRegisterClassEy\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_i(unsigned int, llvm::TargetRegisterClass const*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel16FastEmitInst_rriEjPKN4llvm19TargetRegisterClassEjbjby\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_rri(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel26FastEmitInst_extractsubregEN4llvm3MVTEjbj\", \"(anonymous namespace)::ARMFastISel::FastEmitInst_extractsubreg(llvm::MVT, unsigned int, bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel15AddOptionalDefsERKN4llvm19MachineInstrBuilderE\", \"(anonymous namespace)::ARMFastISel::AddOptionalDefs(llvm::MachineInstrBuilder const&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel16ARMMaterializeGVEPKN4llvm11GlobalValueENS1_3EVTE\", \"(anonymous namespace)::ARMFastISel::ARMMaterializeGV(llvm::GlobalValue const*, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel14SelectBinaryOpEPKN4llvm11InstructionEj\", \"(anonymous namespace)::ARMFastISel::SelectBinaryOp(llvm::Instruction const*, unsigned int)\"},\n    {\"_Z19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z15RetCC_ARM_AAPCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z12CC_ARM_AAPCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z11CC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm13f64AssignAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEb\", \"llvm::f64AssignAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)\"},\n    {\"_ZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateE\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)\"},\n    {\"_Z19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEb\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)\"},\n    {\"_Z22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel15ProcessCallArgsERN4llvm15SmallVectorImplIPNS1_5ValueEEERNS2_IjEERNS2_INS1_3MVTEEERNS2_INS1_3ISD10ArgFlagsTyEEES8_NS1_11CallingConv2IDERj\", \"(anonymous namespace)::ARMFastISel::ProcessCallArgs(llvm::SmallVectorImpl<llvm::Value*>&, llvm::SmallVectorImpl<unsigned int>&, llvm::SmallVectorImpl<llvm::MVT>&, llvm::SmallVectorImpl<llvm::ISD::ArgFlagsTy>&, llvm::SmallVectorImpl<unsigned int>&, llvm::CallingConv::ID, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel10FinishCallEN4llvm3MVTERNS1_15SmallVectorImplIjEEPKNS1_11InstructionENS1_11CallingConv2IDERj\", \"(anonymous namespace)::ARMFastISel::FinishCall(llvm::MVT, llvm::SmallVectorImpl<unsigned int>&, llvm::Instruction const*, llvm::CallingConv::ID, unsigned int&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel12ARMEmitStoreEN4llvm3EVTEjRNS_7AddressE\", \"(anonymous namespace)::ARMFastISel::ARMEmitStore(llvm::EVT, unsigned int, (anonymous namespace)::Address&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel18ARMSimplifyAddressERNS_7AddressEN4llvm3EVTE\", \"(anonymous namespace)::ARMFastISel::ARMSimplifyAddress((anonymous namespace)::Address&, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel20AddLoadStoreOperandsEN4llvm3EVTERNS_7AddressERKNS1_19MachineInstrBuilderE\", \"(anonymous namespace)::ARMFastISel::AddLoadStoreOperands(llvm::EVT, (anonymous namespace)::Address&, llvm::MachineInstrBuilder const&)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel14ARMEmitLibcallEPKN4llvm11InstructionENS1_5RTLIB7LibcallE\", \"(anonymous namespace)::ARMFastISel::ARMEmitLibcall(llvm::Instruction const*, llvm::RTLIB::Libcall)\"},\n    {\"_ZN12_GLOBAL__N_111ARMFastISel17ARMComputeAddressEPKN4llvm5ValueERNS_7AddressE\", \"(anonymous namespace)::ARMFastISel::ARMComputeAddress(llvm::Value const*, (anonymous namespace)::Address&)\"},\n    {\"_ZN4llvm8FastISel13TryToFoldLoadEPNS_12MachineInstrEjPKNS_8LoadInstE\", \"llvm::FastISel::TryToFoldLoad(llvm::MachineInstr*, unsigned int, llvm::LoadInst const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_3ISD10ArgFlagsTyELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::ISD::ArgFlagsTy, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_3MVTELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::MVT, false>::grow(unsigned long)\"},\n    {\"_ZNK4llvm16ARMFrameLowering5hasFPERKNS_15MachineFunctionE\", \"llvm::ARMFrameLowering::hasFP(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering20hasReservedCallFrameERKNS_15MachineFunctionE\", \"llvm::ARMFrameLowering::hasReservedCallFrame(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering27canSimplifyCallFramePseudosERKNS_15MachineFunctionE\", \"llvm::ARMFrameLowering::canSimplifyCallFramePseudos(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering12emitPrologueERNS_15MachineFunctionE\", \"llvm::ARMFrameLowering::emitPrologue(llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering12emitEpilogueERNS_15MachineFunctionERNS_17MachineBasicBlockE\", \"llvm::ARMFrameLowering::emitEpilogue(llvm::MachineFunction&, llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering22getFrameIndexReferenceERKNS_15MachineFunctionEiRj\", \"llvm::ARMFrameLowering::getFrameIndexReference(llvm::MachineFunction const&, int, unsigned int&) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering26ResolveFrameIndexReferenceERKNS_15MachineFunctionEiRji\", \"llvm::ARMFrameLowering::ResolveFrameIndexReference(llvm::MachineFunction const&, int, unsigned int&, int) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering19getFrameIndexOffsetERKNS_15MachineFunctionEi\", \"llvm::ARMFrameLowering::getFrameIndexOffset(llvm::MachineFunction const&, int) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering12emitPushInstERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEjjbPFbjbE\", \"llvm::ARMFrameLowering::emitPushInst(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, unsigned int, unsigned int, bool, bool (*)(unsigned int, bool)) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering11emitPopInstERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEjjbbPFbjbE\", \"llvm::ARMFrameLowering::emitPopInst(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, unsigned int, unsigned int, bool, bool, bool (*)(unsigned int, bool)) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering25spillCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::ARMFrameLowering::spillCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm18isARMArea1RegisterEjb\", \"llvm::isARMArea1Register(unsigned int, bool)\"},\n    {\"_ZN4llvm18isARMArea2RegisterEjb\", \"llvm::isARMArea2Register(unsigned int, bool)\"},\n    {\"_ZN4llvm18isARMArea3RegisterEjb\", \"llvm::isARMArea3Register(unsigned int, bool)\"},\n    {\"_ZNK4llvm16ARMFrameLowering27restoreCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::ARMFrameLowering::restoreCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm16ARMFrameLowering36processFunctionBeforeCalleeSavedScanERNS_15MachineFunctionEPNS_12RegScavengerE\", \"llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan(llvm::MachineFunction&, llvm::RegScavenger*) const\"},\n    {\"_ZSt6__findIPjjET_S1_S1_RKT0_St26random_access_iterator_tag\", \"unsigned int* std::__find<unsigned int*, unsigned int>(unsigned int*, unsigned int*, unsigned int const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIN4llvm16MachineFrameInfo11StackObjectESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::MachineFrameInfo::StackObject, std::allocator<llvm::MachineFrameInfo::StackObject> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineFrameInfo::StackObject*, std::vector<llvm::MachineFrameInfo::StackObject, std::allocator<llvm::MachineFrameInfo::StackObject> > >, llvm::MachineFrameInfo::StackObject const&)\"},\n    {\"_ZN4llvm24createARMGlobalMergePassEPKNS_14TargetLoweringE\", \"llvm::createARMGlobalMergePass(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_114ARMGlobalMergeD1Ev\", \"(anonymous namespace)::ARMGlobalMerge::~ARMGlobalMerge()\"},\n    {\"_ZN12_GLOBAL__N_114ARMGlobalMergeD0Ev\", \"(anonymous namespace)::ARMGlobalMerge::~ARMGlobalMerge()\"},\n    {\"_ZNK12_GLOBAL__N_114ARMGlobalMerge11getPassNameEv\", \"(anonymous namespace)::ARMGlobalMerge::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_114ARMGlobalMerge16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::ARMGlobalMerge::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114ARMGlobalMerge16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::ARMGlobalMerge::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_114ARMGlobalMerge13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::ARMGlobalMerge::runOnFunction(llvm::Function&)\"},\n    {\"_ZNK12_GLOBAL__N_114ARMGlobalMerge7doMergeERN4llvm15SmallVectorImplIPNS1_14GlobalVariableEEERNS1_6ModuleEb\", \"(anonymous namespace)::ARMGlobalMerge::doMerge(llvm::SmallVectorImpl<llvm::GlobalVariable*>&, llvm::Module&, bool) const\"},\n    {\"_ZSt21__inplace_stable_sortIPPN4llvm14GlobalVariableEN12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_T0_\", \"void std::__inplace_stable_sort<llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPPN4llvm14GlobalVariableES3_lN12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_T0_T1_T2_\", \"void std::__stable_sort_adaptive<llvm::GlobalVariable**, llvm::GlobalVariable**, long, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, llvm::GlobalVariable**, long, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPPN4llvm14GlobalVariableES3_N12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_T0_T1_\", \"void std::__merge_sort_with_buffer<llvm::GlobalVariable**, llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt16__merge_adaptiveIPPN4llvm14GlobalVariableElS3_N12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_S7_T0_S8_T1_S8_T2_\", \"void std::__merge_adaptive<llvm::GlobalVariable**, long, llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, llvm::GlobalVariable**, long, long, llvm::GlobalVariable**, long, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt16__insertion_sortIPPN4llvm14GlobalVariableEN12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_T0_\", \"void std::__insertion_sort<llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt22__merge_without_bufferIPPN4llvm14GlobalVariableElN12_GLOBAL__N_114ARMGlobalMerge9GlobalCmpEEvT_S7_S7_T0_S8_T1_\", \"void std::__merge_without_buffer<llvm::GlobalVariable**, long, (anonymous namespace)::ARMGlobalMerge::GlobalCmp>(llvm::GlobalVariable**, llvm::GlobalVariable**, llvm::GlobalVariable**, long, long, (anonymous namespace)::ARMGlobalMerge::GlobalCmp)\"},\n    {\"_ZSt8__rotateIPPN4llvm14GlobalVariableEEvT_S4_S4_St26random_access_iterator_tag\", \"void std::__rotate<llvm::GlobalVariable**>(llvm::GlobalVariable**, llvm::GlobalVariable**, llvm::GlobalVariable**, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm19ARMHazardRecognizer13getHazardTypeEPNS_5SUnitEi\", \"llvm::ARMHazardRecognizer::getHazardType(llvm::SUnit*, int)\"},\n    {\"_ZN4llvm19ARMHazardRecognizer5ResetEv\", \"llvm::ARMHazardRecognizer::Reset()\"},\n    {\"_ZN4llvm19ARMHazardRecognizer15EmitInstructionEPNS_5SUnitE\", \"llvm::ARMHazardRecognizer::EmitInstruction(llvm::SUnit*)\"},\n    {\"_ZN4llvm19ARMHazardRecognizer12AdvanceCycleEv\", \"llvm::ARMHazardRecognizer::AdvanceCycle()\"},\n    {\"_ZN4llvm19ARMHazardRecognizer11RecedeCycleEv\", \"llvm::ARMHazardRecognizer::RecedeCycle()\"},\n    {\"_ZN4llvm19ARMHazardRecognizerD1Ev\", \"llvm::ARMHazardRecognizer::~ARMHazardRecognizer()\"},\n    {\"_ZN4llvm19ARMHazardRecognizerD0Ev\", \"llvm::ARMHazardRecognizer::~ARMHazardRecognizer()\"},\n    {\"_ZN4llvm16createARMISelDagERNS_20ARMBaseTargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::createARMISelDag(llvm::ARMBaseTargetMachine&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISelD1Ev\", \"(anonymous namespace)::ARMDAGToDAGISel::~ARMDAGToDAGISel()\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISelD0Ev\", \"(anonymous namespace)::ARMDAGToDAGISel::~ARMDAGToDAGISel()\"},\n    {\"_ZNK12_GLOBAL__N_115ARMDAGToDAGISel11getPassNameEv\", \"(anonymous namespace)::ARMDAGToDAGISel::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeE\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel28SelectInlineAsmMemoryOperandERKN4llvm7SDValueEcRSt6vectorIS2_SaIS2_EE\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectInlineAsmMemoryOperand(llvm::SDValue const&, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&)\"},\n    {\"_ZNK12_GLOBAL__N_115ARMDAGToDAGISel21CheckPatternPredicateEj\", \"(anonymous namespace)::ARMDAGToDAGISel::CheckPatternPredicate(unsigned int) const\"},\n    {\"_ZNK12_GLOBAL__N_115ARMDAGToDAGISel18CheckNodePredicateEPN4llvm6SDNodeEj\", \"(anonymous namespace)::ARMDAGToDAGISel::CheckNodePredicate(llvm::SDNode*, unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel19CheckComplexPatternEPN4llvm6SDNodeES3_NS1_7SDValueEjRNS1_15SmallVectorImplISt4pairIS4_S3_EEE\", \"(anonymous namespace)::ARMDAGToDAGISel::CheckComplexPattern(llvm::SDNode*, llvm::SDNode*, llvm::SDValue, unsigned int, llvm::SmallVectorImpl<std::pair<llvm::SDValue, llvm::SDNode*> >&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel14RunSDNodeXFormEN4llvm7SDValueEj\", \"(anonymous namespace)::ARMDAGToDAGISel::RunSDNodeXForm(llvm::SDValue, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel23SelectShifterOperandRegEN4llvm7SDValueERS2_S3_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectShifterOperandReg(llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel20SelectT2AddrModeImm8EN4llvm7SDValueERS2_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectT2AddrModeImm8(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel21SelectThumbAddrModeSPEN4llvm7SDValueERS2_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectThumbAddrModeSP(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel15SelectAddrMode6EPN4llvm6SDNodeENS1_7SDValueERS4_S5_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectAddrMode6(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel21SelectAddrMode2OffsetEPN4llvm6SDNodeENS1_7SDValueERS4_S5_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectAddrMode2Offset(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel21SelectAddrMode3OffsetEPN4llvm6SDNodeENS1_7SDValueERS4_S5_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectAddrMode3Offset(llvm::SDNode*, llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel26SelectT2AddrModeImm8OffsetEPN4llvm6SDNodeENS1_7SDValueERS4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectT2AddrModeImm8Offset(llvm::SDNode*, llvm::SDValue, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel24SelectThumbAddrModeImm5SEN4llvm7SDValueEjRS2_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectThumbAddrModeImm5S(llvm::SDValue, unsigned int, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel21SelectThumbAddrModeRIEN4llvm7SDValueERS2_S3_j\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectThumbAddrModeRI(llvm::SDValue, llvm::SDValue&, llvm::SDValue&, unsigned int)\"},\n    {\"_ZN4llvm6ARM_AM16decodeNEONModImmEjRj\", \"llvm::ARM_AM::decodeNEONModImm(unsigned int, unsigned int&)\"},\n    {\"_ZNK12_GLOBAL__N_115ARMDAGToDAGISel18hasNoVMLxHazardUseEPN4llvm6SDNodeE\", \"(anonymous namespace)::ARMDAGToDAGISel::hasNoVMLxHazardUse(llvm::SDNode*) const\"},\n    {\"_ZN4llvm6ARM_AM17isSOImmTwoPartValEj\", \"llvm::ARM_AM::isSOImmTwoPartVal(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel27SelectV6T2BitfieldExtractOpEPN4llvm6SDNodeEb\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectV6T2BitfieldExtractOp(llvm::SDNode*, bool)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel12SelectVLDDupEPN4llvm6SDNodeEbjPj\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectVLDDup(llvm::SDNode*, bool, unsigned int, unsigned int*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel9SelectVLDEPN4llvm6SDNodeEbjPjS4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectVLD(llvm::SDNode*, bool, unsigned int, unsigned int*, unsigned int*, unsigned int*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel15SelectVLDSTLaneEPN4llvm6SDNodeEbbjPjS4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectVLDSTLane(llvm::SDNode*, bool, bool, unsigned int, unsigned int*, unsigned int*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel9SelectVSTEPN4llvm6SDNodeEbjPjS4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectVST(llvm::SDNode*, bool, unsigned int, unsigned int*, unsigned int*, unsigned int*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel10SelectVTBLEPN4llvm6SDNodeEbjj\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectVTBL(llvm::SDNode*, bool, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel9QuadDRegsEN4llvm3EVTENS1_7SDValueES3_S3_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::QuadDRegs(llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel9QuadQRegsEN4llvm3EVTENS1_7SDValueES3_S3_S3_\", \"(anonymous namespace)::ARMDAGToDAGISel::QuadQRegs(llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel19SelectT2CMOVShiftOpEPN4llvm6SDNodeENS1_7SDValueES4_NS1_5ARMCC9CondCodesES4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectT2CMOVShiftOp(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::ARMCC::CondCodes, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel20SelectARMCMOVShiftOpEPN4llvm6SDNodeENS1_7SDValueES4_NS1_5ARMCC9CondCodesES4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectARMCMOVShiftOp(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::ARMCC::CondCodes, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel17SelectT2CMOVImmOpEPN4llvm6SDNodeENS1_7SDValueES4_NS1_5ARMCC9CondCodesES4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectT2CMOVImmOp(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::ARMCC::CondCodes, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_115ARMDAGToDAGISel18SelectARMCMOVImmOpEPN4llvm6SDNodeENS1_7SDValueES4_NS1_5ARMCC9CondCodesES4_S4_\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectARMCMOVImmOp(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::ARMCC::CondCodes, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16SelectionDAGISel21EmitFunctionEntryCodeEv\", \"llvm::SelectionDAGISel::EmitFunctionEntryCode()\"},\n    {\"_ZN4llvm16SelectionDAGISel17PreprocessISelDAGEv\", \"llvm::SelectionDAGISel::PreprocessISelDAG()\"},\n    {\"_ZN4llvm16SelectionDAGISel18PostprocessISelDAGEv\", \"llvm::SelectionDAGISel::PostprocessISelDAG()\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairINS_7SDValueEPNS_6SDNodeEEE6resizeEj\", \"llvm::SmallVectorImpl<std::pair<llvm::SDValue, llvm::SDNode*> >::resize(unsigned int)\"},\n    {\"_ZN4llvm16SelectionDAGISel11ISelUpdaterD1Ev\", \"llvm::SelectionDAGISel::ISelUpdater::~ISelUpdater()\"},\n    {\"_ZN4llvm16SelectionDAGISel11ISelUpdaterD0Ev\", \"llvm::SelectionDAGISel::ISelUpdater::~ISelUpdater()\"},\n    {\"_ZN4llvm16SelectionDAGISel11ISelUpdater11NodeDeletedEPNS_6SDNodeES3_\", \"llvm::SelectionDAGISel::ISelUpdater::NodeDeleted(llvm::SDNode*, llvm::SDNode*)\"},\n    {\"_ZN4llvm16SelectionDAGISel11ISelUpdater11NodeUpdatedEPNS_6SDNodeE\", \"llvm::SelectionDAGISel::ISelUpdater::NodeUpdated(llvm::SDNode*)\"},\n    {\"_ZN4llvm17ARMTargetLowering14addTypeForNEONENS_3EVTES1_S1_\", \"llvm::ARMTargetLowering::addTypeForNEON(llvm::EVT, llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm17ARMTargetLowering16addDRTypeForNEONENS_3EVTE\", \"llvm::ARMTargetLowering::addDRTypeForNEON(llvm::EVT)\"},\n    {\"_ZN4llvm17ARMTargetLowering16addQRTypeForNEONENS_3EVTE\", \"llvm::ARMTargetLowering::addQRTypeForNEON(llvm::EVT)\"},\n    {\"_ZN4llvm17ARMTargetLoweringC1ERNS_13TargetMachineE\", \"llvm::ARMTargetLowering::ARMTargetLowering(llvm::TargetMachine&)\"},\n    {\"_ZN4llvm17ARMTargetLoweringC2ERNS_13TargetMachineE\", \"llvm::ARMTargetLowering::ARMTargetLowering(llvm::TargetMachine&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering23findRepresentativeClassENS_3EVTE\", \"llvm::ARMTargetLowering::findRepresentativeClass(llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17getTargetNodeNameEj\", \"llvm::ARMTargetLowering::getTargetNodeName(unsigned int) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering14getRegClassForENS_3EVTE\", \"llvm::ARMTargetLowering::getRegClassFor(llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering14createFastISelERNS_20FunctionLoweringInfoE\", \"llvm::ARMTargetLowering::createFastISel(llvm::FunctionLoweringInfo&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20getFunctionAlignmentEPKNS_8FunctionE\", \"llvm::ARMTargetLowering::getFunctionAlignment(llvm::Function const*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering22getMaximalGlobalOffsetEv\", \"llvm::ARMTargetLowering::getMaximalGlobalOffset() const\"},\n    {\"_ZNK4llvm17ARMTargetLowering23getSchedulingPreferenceEPNS_6SDNodeE\", \"llvm::ARMTargetLowering::getSchedulingPreference(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering19getRegPressureLimitEPKNS_19TargetRegisterClassERNS_15MachineFunctionE\", \"llvm::ARMTargetLowering::getRegPressureLimit(llvm::TargetRegisterClass const*, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17CCAssignFnForNodeENS_11CallingConv2IDEbb\", \"llvm::ARMTargetLowering::CCAssignFnForNode(llvm::CallingConv::ID, bool, bool) const\"},\n    {\"_Z18RetFastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetFastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z15FastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"FastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z11CC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z15RetCC_ARM_AAPCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_Z12CC_ARM_AAPCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering15LowerCallResultENS_7SDValueES1_NS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EE\", \"llvm::ARMTargetLowering::LowerCallResult(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering16LowerMemOpCallToENS_7SDValueES1_S1_NS_8DebugLocERNS_12SelectionDAGERKNS_11CCValAssignENS_3ISD10ArgFlagsTyE\", \"llvm::ARMTargetLowering::LowerMemOpCallTo(llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::DebugLoc, llvm::SelectionDAG&, llvm::CCValAssign const&, llvm::ISD::ArgFlagsTy) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering16PassF64ArgInRegsENS_8DebugLocERNS_12SelectionDAGENS_7SDValueERS4_RNS_11SmallVectorISt4pairIjS4_ELj8EEERNS_11CCValAssignESC_S5_RNS6_IS4_Lj8EEENS_3ISD10ArgFlagsTyE\", \"llvm::ARMTargetLowering::PassF64ArgInRegs(llvm::DebugLoc, llvm::SelectionDAG&, llvm::SDValue, llvm::SDValue&, llvm::SmallVector<std::pair<unsigned int, llvm::SDValue>, 8u>&, llvm::CCValAssign&, llvm::CCValAssign&, llvm::SDValue&, llvm::SmallVector<llvm::SDValue, 8u>&, llvm::ISD::ArgFlagsTy) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering9LowerCallENS_7SDValueES1_NS_11CallingConv2IDEbRbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS5_IS1_EERKNS5_INS6_8InputArgEEENS_8DebugLocERNS_12SelectionDAGERSB_\", \"llvm::ARMTargetLowering::LowerCall(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, bool&, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering33IsEligibleForTailCallOptimizationENS_7SDValueENS_11CallingConv2IDEbbbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS4_IS1_EERKNS4_INS5_8InputArgEEERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::IsEligibleForTailCallOptimization(llvm::SDValue, llvm::CallingConv::ID, bool, bool, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering11LowerReturnENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS4_IS1_EENS_8DebugLocERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerReturn(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::DebugLoc, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering18isUsedByReturnOnlyEPNS_6SDNodeE\", \"llvm::ARMTargetLowering::isUsedByReturnOnly(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20getJumpTableEncodingEv\", \"llvm::ARMTargetLowering::getJumpTableEncoding() const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17LowerBlockAddressENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerBlockAddress(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering29LowerToTLSGeneralDynamicModelEPNS_19GlobalAddressSDNodeERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerToTLSGeneralDynamicModel(llvm::GlobalAddressSDNode*, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20LowerToTLSExecModelsEPNS_19GlobalAddressSDNodeERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerToTLSExecModels(llvm::GlobalAddressSDNode*, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering21LowerGlobalTLSAddressENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerGlobalTLSAddress(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering21LowerGlobalAddressELFENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerGlobalAddressELF(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering24LowerGlobalAddressDarwinENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerGlobalAddressDarwin(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering24LowerGLOBAL_OFFSET_TABLEENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerGLOBAL_OFFSET_TABLE(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering26LowerEH_SJLJ_DISPATCHSETUPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerEH_SJLJ_DISPATCHSETUP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering19LowerEH_SJLJ_SETJMPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerEH_SJLJ_SETJMP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20LowerEH_SJLJ_LONGJMPENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerEH_SJLJ_LONGJMP(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering23LowerINTRINSIC_WO_CHAINENS_7SDValueERNS_12SelectionDAGEPKNS_12ARMSubtargetE\", \"llvm::ARMTargetLowering::LowerINTRINSIC_WO_CHAIN(llvm::SDValue, llvm::SelectionDAG&, llvm::ARMSubtarget const*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20GetF64FormalArgumentERNS_11CCValAssignES2_RNS_7SDValueERNS_12SelectionDAGENS_8DebugLocE\", \"llvm::ARMTargetLowering::GetF64FormalArgument(llvm::CCValAssign&, llvm::CCValAssign&, llvm::SDValue&, llvm::SelectionDAG&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EE\", \"llvm::ARMTargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering9getARMCmpENS_7SDValueES1_NS_3ISD8CondCodeERS1_RNS_12SelectionDAGENS_8DebugLocE\", \"llvm::ARMTargetLowering::getARMCmp(llvm::SDValue, llvm::SDValue, llvm::ISD::CondCode, llvm::SDValue&, llvm::SelectionDAG&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering9getVFPCmpENS_7SDValueES1_RNS_12SelectionDAGENS_8DebugLocE\", \"llvm::ARMTargetLowering::getVFPCmp(llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering11LowerSELECTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerSELECT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering14LowerSELECT_CCENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerSELECT_CC(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17OptimizeVFPBrcondENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::OptimizeVFPBrcond(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z14canChangeToIntN4llvm7SDValueERbPKNS_12ARMSubtargetE\", \"canChangeToInt(llvm::SDValue, bool&, llvm::ARMSubtarget const*)\"},\n    {\"_Z15bitcastf32Toi32N4llvm7SDValueERNS_12SelectionDAGE\", \"bitcastf32Toi32(llvm::SDValue, llvm::SelectionDAG&)\"},\n    {\"_Z14expandf64Toi32N4llvm7SDValueERNS_12SelectionDAGERS0_S3_\", \"expandf64Toi32(llvm::SDValue, llvm::SelectionDAG&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering10LowerBR_CCENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerBR_CC(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering10LowerBR_JTENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerBR_JT(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering14LowerFCOPYSIGNENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerFCOPYSIGN(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering15LowerRETURNADDRENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerRETURNADDR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering14LowerFRAMEADDRENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerFRAMEADDR(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20LowerShiftRightPartsENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerShiftRightParts(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering19LowerShiftLeftPartsENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerShiftLeftParts(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering16LowerFLT_ROUNDS_ENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerFLT_ROUNDS_(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17LowerBUILD_VECTORENS_7SDValueERNS_12SelectionDAGEPKNS_12ARMSubtargetE\", \"llvm::ARMTargetLowering::LowerBUILD_VECTOR(llvm::SDValue, llvm::SelectionDAG&, llvm::ARMSubtarget const*) const\"},\n    {\"_Z17isNEONModifiedImmyyjRN4llvm12SelectionDAGERNS_3EVTEbNS_14NEONModImmTypeE\", \"isNEONModifiedImm(unsigned long long, unsigned long long, unsigned int, llvm::SelectionDAG&, llvm::EVT&, bool, llvm::NEONModImmType)\"},\n    {\"_ZNK4llvm17ARMTargetLowering18ReconstructShuffleENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::ReconstructShuffle(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering18isShuffleMaskLegalERKNS_15SmallVectorImplIiEENS_3EVTE\", \"llvm::ARMTargetLowering::isShuffleMaskLegal(llvm::SmallVectorImpl<int> const&, llvm::EVT) const\"},\n    {\"_Z10isVREVMaskRKN4llvm15SmallVectorImplIiEENS_3EVTEj\", \"isVREVMask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int)\"},\n    {\"_Z10isVTRNMaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVTRNMask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_Z10isVUZPMaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVUZPMask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_Z10isVZIPMaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVZIPMask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_Z19isVTRN_v_undef_MaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVTRN_v_undef_Mask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_Z19isVUZP_v_undef_MaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVUZP_v_undef_Mask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_Z19isVZIP_v_undef_MaskRKN4llvm15SmallVectorImplIiEENS_3EVTERj\", \"isVZIP_v_undef_Mask(llvm::SmallVectorImpl<int> const&, llvm::EVT, unsigned int&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering14LowerOperationENS_7SDValueERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_Z13ExpandBITCASTPN4llvm6SDNodeERNS_12SelectionDAGE\", \"ExpandBITCAST(llvm::SDNode*, llvm::SelectionDAG&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering18ReplaceNodeResultsEPNS_6SDNodeERNS_15SmallVectorImplINS_7SDValueEEERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::ReplaceNodeResults(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17EmitAtomicCmpSwapEPNS_12MachineInstrEPNS_17MachineBasicBlockEj\", \"llvm::ARMTargetLowering::EmitAtomicCmpSwap(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering16EmitAtomicBinaryEPNS_12MachineInstrEPNS_17MachineBasicBlockEjj\", \"llvm::ARMTargetLowering::EmitAtomicBinary(llvm::MachineInstr*, llvm::MachineBasicBlock*, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering27EmitInstrWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::ARMTargetLowering::EmitInstrWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17PerformDAGCombineEPNS_6SDNodeERNS_14TargetLowering15DAGCombinerInfoE\", \"llvm::ARMTargetLowering::PerformDAGCombine(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&) const\"},\n    {\"_Z21PerformVMOVDRRCombinePN4llvm6SDNodeERNS_12SelectionDAGE\", \"PerformVMOVDRRCombine(llvm::SDNode*, llvm::SelectionDAG&)\"},\n    {\"_Z17CombineBaseUpdatePN4llvm6SDNodeERNS_14TargetLowering15DAGCombinerInfoE\", \"CombineBaseUpdate(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering33isDesirableToTransformToIntegerOpEjNS_3EVTE\", \"llvm::ARMTargetLowering::isDesirableToTransformToIntegerOp(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering29allowsUnalignedMemoryAccessesENS_3EVTE\", \"llvm::ARMTargetLowering::allowsUnalignedMemoryAccesses(llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering29isLegalT2ScaledAddressingModeERKNS_14TargetLowering8AddrModeENS_3EVTE\", \"llvm::ARMTargetLowering::isLegalT2ScaledAddressingMode(llvm::TargetLowering::AddrMode const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering21isLegalAddressingModeERKNS_14TargetLowering8AddrModeEPKNS_4TypeE\", \"llvm::ARMTargetLowering::isLegalAddressingMode(llvm::TargetLowering::AddrMode const&, llvm::Type const*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20isLegalICmpImmediateEx\", \"llvm::ARMTargetLowering::isLegalICmpImmediate(long long) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering25getPreIndexedAddressPartsEPNS_6SDNodeERNS_7SDValueES4_RNS_3ISD14MemIndexedModeERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::getPreIndexedAddressParts(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&, llvm::ISD::MemIndexedMode&, llvm::SelectionDAG&) const\"},\n    {\"_Z24getT2IndexedAddressPartsPN4llvm6SDNodeENS_3EVTEbRNS_7SDValueES4_RbRNS_12SelectionDAGE\", \"getT2IndexedAddressParts(llvm::SDNode*, llvm::EVT, bool, llvm::SDValue&, llvm::SDValue&, bool&, llvm::SelectionDAG&)\"},\n    {\"_Z25getARMIndexedAddressPartsPN4llvm6SDNodeENS_3EVTEbRNS_7SDValueES4_RbRNS_12SelectionDAGE\", \"getARMIndexedAddressParts(llvm::SDNode*, llvm::EVT, bool, llvm::SDValue&, llvm::SDValue&, bool&, llvm::SelectionDAG&)\"},\n    {\"_ZNK4llvm17ARMTargetLowering26getPostIndexedAddressPartsEPNS_6SDNodeES2_RNS_7SDValueES4_RNS_3ISD14MemIndexedModeERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::getPostIndexedAddressParts(llvm::SDNode*, llvm::SDNode*, llvm::SDValue&, llvm::SDValue&, llvm::ISD::MemIndexedMode&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering30computeMaskedBitsForTargetNodeENS_7SDValueERKNS_5APIntERS2_S5_RKNS_12SelectionDAGEj\", \"llvm::ARMTargetLowering::computeMaskedBitsForTargetNode(llvm::SDValue, llvm::APInt const&, llvm::APInt&, llvm::APInt&, llvm::SelectionDAG const&, unsigned int) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering15ExpandInlineAsmEPNS_8CallInstE\", \"llvm::ARMTargetLowering::ExpandInlineAsm(llvm::CallInst*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering17getConstraintTypeERKSs\", \"llvm::ARMTargetLowering::getConstraintType(std::string const&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering30getSingleConstraintMatchWeightERNS_14TargetLowering14AsmOperandInfoEPKc\", \"llvm::ARMTargetLowering::getSingleConstraintMatchWeight(llvm::TargetLowering::AsmOperandInfo&, char const*) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering28getRegForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::ARMTargetLowering::getRegForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering33getRegClassForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::ARMTargetLowering::getRegClassForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering28LowerAsmOperandForConstraintENS_7SDValueEcRSt6vectorIS1_SaIS1_EERNS_12SelectionDAGE\", \"llvm::ARMTargetLowering::LowerAsmOperandForConstraint(llvm::SDValue, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering20isOffsetFoldingLegalEPKNS_19GlobalAddressSDNodeE\", \"llvm::ARMTargetLowering::isOffsetFoldingLegal(llvm::GlobalAddressSDNode const*) const\"},\n    {\"_ZN4llvm3ARM12getVFPf32ImmERKNS_7APFloatE\", \"llvm::ARM::getVFPf32Imm(llvm::APFloat const&)\"},\n    {\"_ZN4llvm3ARM12getVFPf64ImmERKNS_7APFloatE\", \"llvm::ARM::getVFPf64Imm(llvm::APFloat const&)\"},\n    {\"_ZN4llvm3ARM22isBitFieldInvertedMaskEj\", \"llvm::ARM::isBitFieldInvertedMask(unsigned int)\"},\n    {\"_ZNK4llvm17ARMTargetLowering12isFPImmLegalERKNS_7APFloatENS_3EVTE\", \"llvm::ARMTargetLowering::isFPImmLegal(llvm::APFloat const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm17ARMTargetLowering18getTgtMemIntrinsicERNS_14TargetLowering13IntrinsicInfoERKNS_8CallInstEj\", \"llvm::ARMTargetLowering::getTgtMemIntrinsic(llvm::TargetLowering::IntrinsicInfo&, llvm::CallInst const&, unsigned int) const\"},\n    {\"_Z12getVShiftImmN4llvm7SDValueEjRx\", \"getVShiftImm(llvm::SDValue, unsigned int, long long&)\"},\n    {\"_Z19combineSelectAndUsePN4llvm6SDNodeENS_7SDValueES2_RNS_14TargetLowering15DAGCombinerInfoE\", \"combineSelectAndUse(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::TargetLowering::DAGCombinerInfo&)\"},\n    {\"_Z13SkipExtensionPN4llvm6SDNodeERNS_12SelectionDAGE\", \"SkipExtension(llvm::SDNode*, llvm::SelectionDAG&)\"},\n    {\"_Z22isExtendedBUILD_VECTORPN4llvm6SDNodeERNS_12SelectionDAGEb\", \"isExtendedBUILD_VECTOR(llvm::SDNode*, llvm::SelectionDAG&, bool)\"},\n    {\"_Z22GeneratePerfectShufflejN4llvm7SDValueES0_RNS_12SelectionDAGENS_8DebugLocE\", \"GeneratePerfectShuffle(unsigned int, llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_Z19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEb\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)\"},\n    {\"_Z22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateE\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)\"},\n    {\"_ZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateE\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)\"},\n    {\"_ZN4llvm13f64AssignAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEb\", \"llvm::f64AssignAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)\"},\n    {\"_ZN4llvm12SelectionDAG14getCALLSEQ_ENDENS_7SDValueES1_S1_S1_\", \"llvm::SelectionDAG::getCALLSEQ_END(llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm11make_vectorIjEESt6vectorIT_SaIS2_EES2_z\", \"std::vector<unsigned int, std::allocator<unsigned int> > llvm::make_vector<unsigned int>(unsigned int, ...)\"},\n    {\"_ZNSt6vectorIN4llvm14TargetLowering12ArgListEntryESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::TargetLowering::ArgListEntry, std::allocator<llvm::TargetLowering::ArgListEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::TargetLowering::ArgListEntry*, std::vector<llvm::TargetLowering::ArgListEntry, std::allocator<llvm::TargetLowering::ArgListEntry> > >, llvm::TargetLowering::ArgListEntry const&)\"},\n    {\"_ZN4llvm5APInt11flipAllBitsEv\", \"llvm::APInt::flipAllBits()\"},\n    {\"_ZNK4llvm19ShuffleVectorSDNode7getMaskERNS_15SmallVectorImplIiEE\", \"llvm::ShuffleVectorSDNode::getMask(llvm::SmallVectorImpl<int>&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11CCValAssignELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::CCValAssign, false>::grow(unsigned long)\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile26shouldEmitUsedDirectiveForEPKNS_11GlobalValueEPNS_7ManglerE\", \"llvm::TargetLoweringObjectFile::shouldEmitUsedDirectiveFor(llvm::GlobalValue const*, llvm::Mangler*) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile29getSpecialCasedSectionGlobalsEPKNS_11GlobalValueEPNS_7ManglerENS_11SectionKindE\", \"llvm::TargetLoweringObjectFile::getSpecialCasedSectionGlobals(llvm::GlobalValue const*, llvm::Mangler*, llvm::SectionKind) const\"},\n    {\"_ZNK4llvm22ARMElfTargetObjectFile20getAttributesSectionEv\", \"llvm::ARMElfTargetObjectFile::getAttributesSection() const\"},\n    {\"_ZN4llvm27TargetLoweringObjectFileELFD1Ev\", \"llvm::TargetLoweringObjectFileELF::~TargetLoweringObjectFileELF()\"},\n    {\"_ZN4llvm27TargetLoweringObjectFileELFD0Ev\", \"llvm::TargetLoweringObjectFileELF::~TargetLoweringObjectFileELF()\"},\n    {\"_ZN4llvm29TargetLoweringObjectFileMachOD1Ev\", \"llvm::TargetLoweringObjectFileMachO::~TargetLoweringObjectFileMachO()\"},\n    {\"_ZN4llvm29TargetLoweringObjectFileMachOD0Ev\", \"llvm::TargetLoweringObjectFileMachO::~TargetLoweringObjectFileMachO()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm3EVTEPNS1_19TargetRegisterClassEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::EVT, llvm::TargetRegisterClass*>, std::allocator<std::pair<llvm::EVT, llvm::TargetRegisterClass*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::EVT, llvm::TargetRegisterClass*>*, std::vector<std::pair<llvm::EVT, llvm::TargetRegisterClass*>, std::allocator<std::pair<llvm::EVT, llvm::TargetRegisterClass*> > > >, std::pair<llvm::EVT, llvm::TargetRegisterClass*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIjN4llvm3MVT15SimpleValueTypeEES0_IKS4_S3_ESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<std::pair<unsigned int, llvm::MVT::SimpleValueType>, std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType>, std::_Select1st<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> >, std::less<std::pair<unsigned int, llvm::MVT::SimpleValueType> >, std::allocator<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> >, std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIjN4llvm3MVT15SimpleValueTypeEES0_IKS4_S3_ESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::pair<unsigned int, llvm::MVT::SimpleValueType>, std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType>, std::_Select1st<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> >, std::less<std::pair<unsigned int, llvm::MVT::SimpleValueType> >, std::allocator<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> > >::_M_insert_unique(std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> const&)\"},\n    {\"_ZN4llvm12ARMInstrInfoC1ERKNS_12ARMSubtargetE\", \"llvm::ARMInstrInfo::ARMInstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm12ARMInstrInfoC2ERKNS_12ARMSubtargetE\", \"llvm::ARMInstrInfo::ARMInstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm12ARMInstrInfo18getUnindexedOpcodeEj\", \"llvm::ARMInstrInfo::getUnindexedOpcode(unsigned int) const\"},\n    {\"_ZN4llvm10ARMJITInfo29replaceMachineCodeForFunctionEPvS1_\", \"llvm::ARMJITInfo::replaceMachineCodeForFunction(void*, void*)\"},\n    {\"_ZN4llvm10ARMJITInfo23getLazyResolverFunctionEPFPvS1_E\", \"llvm::ARMJITInfo::getLazyResolverFunction(void* (*)(void*))\"},\n    {\"_ZN4llvm10ARMJITInfo26emitGlobalValueIndirectSymEPKNS_11GlobalValueEPvRNS_14JITCodeEmitterE\", \"llvm::ARMJITInfo::emitGlobalValueIndirectSym(llvm::GlobalValue const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm10ARMJITInfo13getStubLayoutEv\", \"llvm::ARMJITInfo::getStubLayout()\"},\n    {\"_ZN4llvm10ARMJITInfo16emitFunctionStubEPKNS_8FunctionEPvRNS_14JITCodeEmitterE\", \"llvm::ARMJITInfo::emitFunctionStub(llvm::Function const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZNK4llvm10ARMJITInfo20resolveRelocDestAddrEPNS_17MachineRelocationE\", \"llvm::ARMJITInfo::resolveRelocDestAddr(llvm::MachineRelocation*) const\"},\n    {\"_ZN4llvm10ARMJITInfo8relocateEPvPNS_17MachineRelocationEjPh\", \"llvm::ARMJITInfo::relocate(void*, llvm::MachineRelocation*, unsigned int, unsigned char*)\"},\n    {\"_ZN4llvm8DenseMapIPvlNS_12DenseMapInfoIS1_EENS2_IlEEE6insertERKSt4pairIS1_lE\", \"llvm::DenseMap<void*, long, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<long> >::insert(std::pair<void*, long> const&)\"},\n    {\"_ZN4llvm8DenseMapIPvlNS_12DenseMapInfoIS1_EENS2_IlEEE16InsertIntoBucketERKS1_RKlPSt4pairIS1_lE\", \"llvm::DenseMap<void*, long, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<long> >::InsertIntoBucket(void* const&, long const&, std::pair<void*, long>*)\"},\n    {\"_ZN4llvm8DenseMapIPvlNS_12DenseMapInfoIS1_EENS2_IlEEE4growEj\", \"llvm::DenseMap<void*, long, llvm::DenseMapInfo<void*>, llvm::DenseMapInfo<long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm6ARM_AM27getLoadStoreMultipleSubModeEi\", \"llvm::ARM_AM::getLoadStoreMultipleSubMode(int)\"},\n    {\"_ZN4llvm34createARMLoadStoreOptimizationPassEb\", \"llvm::createARMLoadStoreOptimizationPass(bool)\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOptD1Ev\", \"(anonymous namespace)::ARMLoadStoreOpt::~ARMLoadStoreOpt()\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOptD0Ev\", \"(anonymous namespace)::ARMLoadStoreOpt::~ARMLoadStoreOpt()\"},\n    {\"_ZNK12_GLOBAL__N_115ARMLoadStoreOpt11getPassNameEv\", \"(anonymous namespace)::ARMLoadStoreOpt::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOpt20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ARMLoadStoreOpt::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_Z10isMemoryOpPKN4llvm12MachineInstrE\", \"isMemoryOp(llvm::MachineInstr const*)\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOpt12MergeLDR_STRERN4llvm17MachineBasicBlockEjjijNS1_5ARMCC9CondCodesEjjRNS1_11SmallVectorINS0_15MemOpQueueEntryELj8EEERNS6_INS1_14ilist_iteratorINS1_12MachineInstrEEELj4EEE\", \"(anonymous namespace)::ARMLoadStoreOpt::MergeLDR_STR(llvm::MachineBasicBlock&, unsigned int, unsigned int, int, unsigned int, llvm::ARMCC::CondCodes, unsigned int, unsigned int, llvm::SmallVector<(anonymous namespace)::ARMLoadStoreOpt::MemOpQueueEntry, 8u>&, llvm::SmallVector<llvm::ilist_iterator<llvm::MachineInstr>, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOpt24MergeBaseUpdateLoadStoreERN4llvm17MachineBasicBlockENS1_14ilist_iteratorINS1_12MachineInstrEEEPKNS1_15TargetInstrInfoERbRS6_\", \"(anonymous namespace)::ARMLoadStoreOpt::MergeBaseUpdateLoadStore(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::TargetInstrInfo const*, bool&, llvm::ilist_iterator<llvm::MachineInstr>&)\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOpt14MergeOpsUpdateERN4llvm17MachineBasicBlockERNS1_11SmallVectorINS0_15MemOpQueueEntryELj8EEEjjjijbiNS1_5ARMCC9CondCodesEjjNS1_8DebugLocERNS4_INS1_14ilist_iteratorINS1_12MachineInstrEEELj4EEE\", \"(anonymous namespace)::ARMLoadStoreOpt::MergeOpsUpdate(llvm::MachineBasicBlock&, llvm::SmallVector<(anonymous namespace)::ARMLoadStoreOpt::MemOpQueueEntry, 8u>&, unsigned int, unsigned int, unsigned int, int, unsigned int, bool, int, llvm::ARMCC::CondCodes, unsigned int, unsigned int, llvm::DebugLoc, llvm::SmallVector<llvm::ilist_iterator<llvm::MachineInstr>, 4u>&)\"},\n    {\"_Z13InsertLDR_STRRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEibNS_8DebugLocEjjbbjbbbbNS_5ARMCC9CondCodesEjPKNS_15TargetInstrInfoEb\", \"InsertLDR_STR(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, int, bool, llvm::DebugLoc, unsigned int, unsigned int, bool, bool, unsigned int, bool, bool, bool, bool, llvm::ARMCC::CondCodes, unsigned int, llvm::TargetInstrInfo const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_123ARMPreAllocLoadStoreOptD1Ev\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::~ARMPreAllocLoadStoreOpt()\"},\n    {\"_ZN12_GLOBAL__N_123ARMPreAllocLoadStoreOptD0Ev\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::~ARMPreAllocLoadStoreOpt()\"},\n    {\"_ZNK12_GLOBAL__N_123ARMPreAllocLoadStoreOpt11getPassNameEv\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_123ARMPreAllocLoadStoreOpt20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_123ARMPreAllocLoadStoreOpt13RescheduleOpsEPN4llvm17MachineBasicBlockERNS1_11SmallVectorIPNS1_12MachineInstrELj4EEEjbRNS1_8DenseMapIS6_jNS1_12DenseMapInfoIS6_EENSA_IjEEEE\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::RescheduleOps(llvm::MachineBasicBlock*, llvm::SmallVector<llvm::MachineInstr*, 4u>&, unsigned int, bool, llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZSt16__introsort_loopIPPN4llvm12MachineInstrElN12_GLOBAL__N_113OffsetCompareEEvT_S6_T0_T1_\", \"void std::__introsort_loop<llvm::MachineInstr**, long, (anonymous namespace)::OffsetCompare>(llvm::MachineInstr**, llvm::MachineInstr**, long, (anonymous namespace)::OffsetCompare)\"},\n    {\"_ZNK12_GLOBAL__N_113OffsetCompareclEPKN4llvm12MachineInstrES4_\", \"(anonymous namespace)::OffsetCompare::operator()(llvm::MachineInstr const*, llvm::MachineInstr const*) const\"},\n    {\"_ZSt13__adjust_heapIPPN4llvm12MachineInstrElS2_N12_GLOBAL__N_113OffsetCompareEEvT_T0_S7_T1_T2_\", \"void std::__adjust_heap<llvm::MachineInstr**, long, llvm::MachineInstr*, (anonymous namespace)::OffsetCompare>(llvm::MachineInstr**, long, long, llvm::MachineInstr*, (anonymous namespace)::OffsetCompare)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_14ilist_iteratorINS_12MachineInstrEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::ilist_iterator<llvm::MachineInstr>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_12MachineInstrEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::MachineInstr*>::operator=(llvm::SmallVectorImpl<llvm::MachineInstr*> const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PSt4pairIjS4_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallVector<llvm::MachineInstr*, 4u> const&, std::pair<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MachineInstr* const&, unsigned int const&, std::pair<llvm::MachineInstr*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm18ARMMCAsmInfoDarwinC1Ev\", \"llvm::ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin()\"},\n    {\"_ZN4llvm18ARMMCAsmInfoDarwinC2Ev\", \"llvm::ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin()\"},\n    {\"_ZN4llvm15ARMELFMCAsmInfoC1Ev\", \"llvm::ARMELFMCAsmInfo::ARMELFMCAsmInfo()\"},\n    {\"_ZN4llvm15ARMELFMCAsmInfoC2Ev\", \"llvm::ARMELFMCAsmInfo::ARMELFMCAsmInfo()\"},\n    {\"_ZN4llvm15ARMELFMCAsmInfoD1Ev\", \"llvm::ARMELFMCAsmInfo::~ARMELFMCAsmInfo()\"},\n    {\"_ZN4llvm15ARMELFMCAsmInfoD0Ev\", \"llvm::ARMELFMCAsmInfo::~ARMELFMCAsmInfo()\"},\n    {\"_ZN4llvm18ARMMCAsmInfoDarwinD1Ev\", \"llvm::ARMMCAsmInfoDarwin::~ARMMCAsmInfoDarwin()\"},\n    {\"_ZN4llvm18ARMMCAsmInfoDarwinD0Ev\", \"llvm::ARMMCAsmInfoDarwin::~ARMMCAsmInfoDarwin()\"},\n    {\"_ZN4llvm22createARMMCCodeEmitterERKNS_6TargetERNS_13TargetMachineERNS_9MCContextE\", \"llvm::createARMMCCodeEmitter(llvm::Target const&, llvm::TargetMachine&, llvm::MCContext&)\"},\n    {\"_ZN12_GLOBAL__N_116ARMMCCodeEmitterD1Ev\", \"(anonymous namespace)::ARMMCCodeEmitter::~ARMMCCodeEmitter()\"},\n    {\"_ZN12_GLOBAL__N_116ARMMCCodeEmitterD0Ev\", \"(anonymous namespace)::ARMMCCodeEmitter::~ARMMCCodeEmitter()\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter17EncodeInstructionERKN4llvm6MCInstERNS1_11raw_ostreamERNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::EncodeInstruction(llvm::MCInst const&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter21getBinaryCodeForInstrERKN4llvm6MCInstERNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getBinaryCodeForInstr(llvm::MCInst const&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter17getMachineOpValueERKN4llvm6MCInstERKNS1_9MCOperandERNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getMachineOpValue(llvm::MCInst const&, llvm::MCOperand const&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter15getSORegOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getSORegOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter17getT2SORegOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getT2SORegOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter17getT2SOImmOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getT2SOImmOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter19getHiLo16ImmOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getHiLo16ImmOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter22getRegisterListOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getRegisterListOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter23getAddrModeImm12OpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getAddrModeImm12OpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter25getT2AddrModeSORegOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getT2AddrModeSORegOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter25getARMBranchTargetOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getARMBranchTargetOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter19getAddrMode5OpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getAddrMode5OpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter19getLdStSORegOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getLdStSORegOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter19getAddrMode3OpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getAddrMode3OpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter25getAddrMode2OffsetOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getAddrMode2OffsetOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter25getAddrMode3OffsetOpValueERKN4llvm6MCInstEjRNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::getAddrMode3OffsetOpValue(llvm::MCInst const&, unsigned int, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZNK12_GLOBAL__N_116ARMMCCodeEmitter22EncodeAddrModeOpValuesERKN4llvm6MCInstEjRjS5_RNS1_15SmallVectorImplINS1_7MCFixupEEE\", \"(anonymous namespace)::ARMMCCodeEmitter::EncodeAddrModeOpValues(llvm::MCInst const&, unsigned int, unsigned int&, unsigned int&, llvm::SmallVectorImpl<llvm::MCFixup>&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_7MCFixupELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::MCFixup, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm9ARMMCExpr6CreateENS0_11VariantKindEPKNS_6MCExprERNS_9MCContextE\", \"llvm::ARMMCExpr::Create(llvm::ARMMCExpr::VariantKind, llvm::MCExpr const*, llvm::MCContext&)\"},\n    {\"_ZNK4llvm9ARMMCExpr9PrintImplERNS_11raw_ostreamE\", \"llvm::ARMMCExpr::PrintImpl(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm9ARMMCExpr25EvaluateAsRelocatableImplERNS_7MCValueEPKNS_11MCAsmLayoutE\", \"llvm::ARMMCExpr::EvaluateAsRelocatableImpl(llvm::MCValue&, llvm::MCAsmLayout const*) const\"},\n    {\"_ZNK4llvm9ARMMCExpr15AddValueSymbolsEPNS_11MCAssemblerE\", \"llvm::ARMMCExpr::AddValueSymbols(llvm::MCAssembler*) const\"},\n    {\"_Z16AddValueSymbols_PKN4llvm6MCExprEPNS_11MCAssemblerE\", \"AddValueSymbols_(llvm::MCExpr const*, llvm::MCAssembler*)\"},\n    {\"_ZN4llvm9ARMMCExprD1Ev\", \"llvm::ARMMCExpr::~ARMMCExpr()\"},\n    {\"_ZN4llvm9ARMMCExprD0Ev\", \"llvm::ARMMCExpr::~ARMMCExpr()\"},\n    {\"_ZN4llvm28LowerARMMachineInstrToMCInstEPKNS_12MachineInstrERNS_6MCInstERNS_13ARMAsmPrinterE\", \"llvm::LowerARMMachineInstrToMCInst(llvm::MachineInstr const*, llvm::MCInst&, llvm::ARMAsmPrinter&)\"},\n    {\"_Z12GetSymbolRefRKN4llvm14MachineOperandEPKNS_8MCSymbolERNS_13ARMAsmPrinterE\", \"GetSymbolRef(llvm::MachineOperand const&, llvm::MCSymbol const*, llvm::ARMAsmPrinter&)\"},\n    {\"_ZN4llvm15ARMRegisterInfoC1ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::ARMRegisterInfo::ARMRegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm15ARMRegisterInfoC2ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::ARMRegisterInfo::ARMRegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm19ARMSelectionDAGInfoC1ERKNS_13TargetMachineE\", \"llvm::ARMSelectionDAGInfo::ARMSelectionDAGInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm19ARMSelectionDAGInfoC2ERKNS_13TargetMachineE\", \"llvm::ARMSelectionDAGInfo::ARMSelectionDAGInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm19ARMSelectionDAGInfoD0Ev\", \"llvm::ARMSelectionDAGInfo::~ARMSelectionDAGInfo()\"},\n    {\"_ZN4llvm19ARMSelectionDAGInfoD1Ev\", \"llvm::ARMSelectionDAGInfo::~ARMSelectionDAGInfo()\"},\n    {\"_ZN4llvm19ARMSelectionDAGInfoD2Ev\", \"llvm::ARMSelectionDAGInfo::~ARMSelectionDAGInfo()\"},\n    {\"_ZNK4llvm19ARMSelectionDAGInfo23EmitTargetCodeForMemcpyERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbbNS_18MachinePointerInfoES5_\", \"llvm::ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo) const\"},\n    {\"_ZNK4llvm22TargetSelectionDAGInfo24EmitTargetCodeForMemmoveERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbNS_18MachinePointerInfoES5_\", \"llvm::TargetSelectionDAGInfo::EmitTargetCodeForMemmove(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo) const\"},\n    {\"_ZNK4llvm22TargetSelectionDAGInfo23EmitTargetCodeForMemsetERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbNS_18MachinePointerInfoE\", \"llvm::TargetSelectionDAGInfo::EmitTargetCodeForMemset(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, llvm::MachinePointerInfo) const\"},\n    {\"_ZN4llvm12ARMSubtarget22ParseSubtargetFeaturesERKSsS2_\", \"llvm::ARMSubtarget::ParseSubtargetFeatures(std::string const&, std::string const&)\"},\n    {\"_ZN4llvm12ARMSubtargetC1ERKSsS2_b\", \"llvm::ARMSubtarget::ARMSubtarget(std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm12ARMSubtargetC2ERKSsS2_b\", \"llvm::ARMSubtarget::ARMSubtarget(std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm12ARMSubtarget17computeIssueWidthEv\", \"llvm::ARMSubtarget::computeIssueWidth()\"},\n    {\"_ZNK4llvm12ARMSubtarget18GVIsIndirectSymbolEPKNS_11GlobalValueENS_5Reloc5ModelE\", \"llvm::ARMSubtarget::GVIsIndirectSymbol(llvm::GlobalValue const*, llvm::Reloc::Model) const\"},\n    {\"_ZNK4llvm12ARMSubtarget23getMispredictionPenaltyEv\", \"llvm::ARMSubtarget::getMispredictionPenalty() const\"},\n    {\"_ZNK4llvm12ARMSubtarget21enablePostRASchedulerENS_10CodeGenOpt5LevelERNS_15TargetSubtarget16AntiDepBreakModeERNS_15SmallVectorImplIPNS_19TargetRegisterClassEEE\", \"llvm::ARMSubtarget::enablePostRAScheduler(llvm::CodeGenOpt::Level, llvm::TargetSubtarget::AntiDepBreakMode&, llvm::SmallVectorImpl<llvm::TargetRegisterClass*>&) const\"},\n    {\"_Z15createMCAsmInfoRKN4llvm6TargetENS_9StringRefE\", \"createMCAsmInfo(llvm::Target const&, llvm::StringRef)\"},\n    {\"_Z16createMCStreamerRKN4llvm6TargetERKSsRNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterEbb\", \"createMCStreamer(llvm::Target const&, std::string const&, llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*, bool, bool)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachineC1ERKNS_6TargetERKSsS5_b\", \"llvm::ARMBaseTargetMachine::ARMBaseTargetMachine(llvm::Target const&, std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachineC2ERKNS_6TargetERKSsS5_b\", \"llvm::ARMBaseTargetMachine::ARMBaseTargetMachine(llvm::Target const&, std::string const&, std::string const&, bool)\"},\n    {\"_ZN4llvm16ARMTargetMachineC1ERKNS_6TargetERKSsS5_\", \"llvm::ARMTargetMachine::ARMTargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm16ARMTargetMachineC2ERKNS_6TargetERKSsS5_\", \"llvm::ARMTargetMachine::ARMTargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm18ThumbTargetMachineC1ERKNS_6TargetERKSsS5_\", \"llvm::ThumbTargetMachine::ThumbTargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm18ThumbTargetMachineC2ERKNS_6TargetERKSsS5_\", \"llvm::ThumbTargetMachine::ThumbTargetMachine(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine10addPreISelERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::ARMBaseTargetMachine::addPreISel(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine15addInstSelectorERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::ARMBaseTargetMachine::addInstSelector(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine14addPreRegAllocERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::ARMBaseTargetMachine::addPreRegAlloc(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine12addPreSched2ERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::ARMBaseTargetMachine::addPreSched2(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine14addPreEmitPassERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::ARMBaseTargetMachine::addPreEmitPass(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine14addCodeEmitterERNS_15PassManagerBaseENS_10CodeGenOpt5LevelERNS_14JITCodeEmitterE\", \"llvm::ARMBaseTargetMachine::addCodeEmitter(llvm::PassManagerBase&, llvm::CodeGenOpt::Level, llvm::JITCodeEmitter&)\"},\n    {\"_ZNK4llvm20ARMBaseTargetMachine16getSubtargetImplEv\", \"llvm::ARMBaseTargetMachine::getSubtargetImpl() const\"},\n    {\"_ZN4llvm20ARMBaseTargetMachineD1Ev\", \"llvm::ARMBaseTargetMachine::~ARMBaseTargetMachine()\"},\n    {\"_ZN4llvm20ARMBaseTargetMachineD0Ev\", \"llvm::ARMBaseTargetMachine::~ARMBaseTargetMachine()\"},\n    {\"_ZNK4llvm13TargetMachine12getInstrInfoEv\", \"llvm::TargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm13TargetMachine16getFrameLoweringEv\", \"llvm::TargetMachine::getFrameLowering() const\"},\n    {\"_ZNK4llvm13TargetMachine17getTargetLoweringEv\", \"llvm::TargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm13TargetMachine19getSelectionDAGInfoEv\", \"llvm::TargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm13TargetMachine13getDataLayoutEv\", \"llvm::TargetMachine::getDataLayout() const\"},\n    {\"_ZNK4llvm13TargetMachine15getRegisterInfoEv\", \"llvm::TargetMachine::getRegisterInfo() const\"},\n    {\"_ZNK4llvm13TargetMachine16getIntrinsicInfoEv\", \"llvm::TargetMachine::getIntrinsicInfo() const\"},\n    {\"_ZN4llvm20ARMBaseTargetMachine10getJITInfoEv\", \"llvm::ARMBaseTargetMachine::getJITInfo()\"},\n    {\"_ZNK4llvm20ARMBaseTargetMachine21getInstrItineraryDataEv\", \"llvm::ARMBaseTargetMachine::getInstrItineraryData() const\"},\n    {\"_ZNK4llvm13TargetMachine16getELFWriterInfoEv\", \"llvm::TargetMachine::getELFWriterInfo() const\"},\n    {\"_ZNK4llvm17LLVMTargetMachine25getEnableTailMergeDefaultEv\", \"llvm::LLVMTargetMachine::getEnableTailMergeDefault() const\"},\n    {\"_ZN4llvm17LLVMTargetMachine15addPostRegAllocERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addPostRegAlloc(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm18ThumbTargetMachineD1Ev\", \"llvm::ThumbTargetMachine::~ThumbTargetMachine()\"},\n    {\"_ZN4llvm18ThumbTargetMachineD0Ev\", \"llvm::ThumbTargetMachine::~ThumbTargetMachine()\"},\n    {\"_ZNK4llvm18ThumbTargetMachine12getInstrInfoEv\", \"llvm::ThumbTargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine16getFrameLoweringEv\", \"llvm::ThumbTargetMachine::getFrameLowering() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine17getTargetLoweringEv\", \"llvm::ThumbTargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine19getSelectionDAGInfoEv\", \"llvm::ThumbTargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine13getDataLayoutEv\", \"llvm::ThumbTargetMachine::getDataLayout() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine15getRegisterInfoEv\", \"llvm::ThumbTargetMachine::getRegisterInfo() const\"},\n    {\"_ZNK4llvm18ThumbTargetMachine16getELFWriterInfoEv\", \"llvm::ThumbTargetMachine::getELFWriterInfo() const\"},\n    {\"_ZN4llvm16ARMTargetMachineD1Ev\", \"llvm::ARMTargetMachine::~ARMTargetMachine()\"},\n    {\"_ZN4llvm16ARMTargetMachineD0Ev\", \"llvm::ARMTargetMachine::~ARMTargetMachine()\"},\n    {\"_ZNK4llvm16ARMTargetMachine12getInstrInfoEv\", \"llvm::ARMTargetMachine::getInstrInfo() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine16getFrameLoweringEv\", \"llvm::ARMTargetMachine::getFrameLowering() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine17getTargetLoweringEv\", \"llvm::ARMTargetMachine::getTargetLowering() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine19getSelectionDAGInfoEv\", \"llvm::ARMTargetMachine::getSelectionDAGInfo() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine13getDataLayoutEv\", \"llvm::ARMTargetMachine::getDataLayout() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine15getRegisterInfoEv\", \"llvm::ARMTargetMachine::getRegisterInfo() const\"},\n    {\"_ZNK4llvm16ARMTargetMachine16getELFWriterInfoEv\", \"llvm::ARMTargetMachine::getELFWriterInfo() const\"},\n    {\"_ZN4llvm16ARMTargetMachineD2Ev\", \"llvm::ARMTargetMachine::~ARMTargetMachine()\"},\n    {\"_ZN4llvm16ARMFrameLoweringD1Ev\", \"llvm::ARMFrameLowering::~ARMFrameLowering()\"},\n    {\"_ZN4llvm17ARMTargetLoweringD1Ev\", \"llvm::ARMTargetLowering::~ARMTargetLowering()\"},\n    {\"_ZN4llvm12ARMInstrInfoD1Ev\", \"llvm::ARMInstrInfo::~ARMInstrInfo()\"},\n    {\"_ZN4llvm20ARMBaseTargetMachineD2Ev\", \"llvm::ARMBaseTargetMachine::~ARMBaseTargetMachine()\"},\n    {\"_ZN4llvm10ARMJITInfoD1Ev\", \"llvm::ARMJITInfo::~ARMJITInfo()\"},\n    {\"_ZN4llvm12ARMSubtargetD1Ev\", \"llvm::ARMSubtarget::~ARMSubtarget()\"},\n    {\"_ZNK4llvm13TargetMachine16getSubtargetImplEv\", \"llvm::TargetMachine::getSubtargetImpl() const\"},\n    {\"_ZN4llvm17LLVMTargetMachineD1Ev\", \"llvm::LLVMTargetMachine::~LLVMTargetMachine()\"},\n    {\"_ZN4llvm17LLVMTargetMachineD0Ev\", \"llvm::LLVMTargetMachine::~LLVMTargetMachine()\"},\n    {\"_ZN4llvm13TargetMachine10getJITInfoEv\", \"llvm::TargetMachine::getJITInfo()\"},\n    {\"_ZNK4llvm13TargetMachine21getInstrItineraryDataEv\", \"llvm::TargetMachine::getInstrItineraryData() const\"},\n    {\"_ZN4llvm17LLVMTargetMachine10addPreISelERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addPreISel(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm17LLVMTargetMachine15addInstSelectorERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addInstSelector(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm17LLVMTargetMachine14addPreRegAllocERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addPreRegAlloc(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm17LLVMTargetMachine12addPreSched2ERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addPreSched2(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm17LLVMTargetMachine14addPreEmitPassERNS_15PassManagerBaseENS_10CodeGenOpt5LevelE\", \"llvm::LLVMTargetMachine::addPreEmitPass(llvm::PassManagerBase&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm17LLVMTargetMachine14addCodeEmitterERNS_15PassManagerBaseENS_10CodeGenOpt5LevelERNS_14JITCodeEmitterE\", \"llvm::LLVMTargetMachine::addCodeEmitter(llvm::PassManagerBase&, llvm::CodeGenOpt::Level, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm12ARMSubtargetD0Ev\", \"llvm::ARMSubtarget::~ARMSubtarget()\"},\n    {\"_ZNK4llvm15TargetSubtarget24getSpecialAddressLatencyEv\", \"llvm::TargetSubtarget::getSpecialAddressLatency() const\"},\n    {\"_ZNK4llvm15TargetSubtarget21adjustSchedDependencyEPNS_5SUnitES2_RNS_4SDepE\", \"llvm::TargetSubtarget::adjustSchedDependency(llvm::SUnit*, llvm::SUnit*, llvm::SDep&) const\"},\n    {\"_ZN4llvm10ARMJITInfoD0Ev\", \"llvm::ARMJITInfo::~ARMJITInfo()\"},\n    {\"_ZN4llvm13TargetJITInfo20getPICJumpTableEntryEmm\", \"llvm::TargetJITInfo::getPICJumpTableEntry(unsigned long, unsigned long)\"},\n    {\"_ZN4llvm13TargetJITInfo25allocateThreadLocalMemoryEm\", \"llvm::TargetJITInfo::allocateThreadLocalMemory(unsigned long)\"},\n    {\"_ZNK4llvm10ARMJITInfo21hasCustomConstantPoolEv\", \"llvm::ARMJITInfo::hasCustomConstantPool() const\"},\n    {\"_ZNK4llvm10ARMJITInfo19hasCustomJumpTablesEv\", \"llvm::ARMJITInfo::hasCustomJumpTables() const\"},\n    {\"_ZNK4llvm10ARMJITInfo24allocateSeparateGVMemoryEv\", \"llvm::ARMJITInfo::allocateSeparateGVMemory() const\"},\n    {\"_ZN4llvm13TargetJITInfoD1Ev\", \"llvm::TargetJITInfo::~TargetJITInfo()\"},\n    {\"_ZN4llvm13TargetJITInfoD0Ev\", \"llvm::TargetJITInfo::~TargetJITInfo()\"},\n    {\"_ZN4llvm13TargetJITInfo26emitGlobalValueIndirectSymEPKNS_11GlobalValueEPvRNS_14JITCodeEmitterE\", \"llvm::TargetJITInfo::emitGlobalValueIndirectSym(llvm::GlobalValue const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm13TargetJITInfo13getStubLayoutEv\", \"llvm::TargetJITInfo::getStubLayout()\"},\n    {\"_ZN4llvm13TargetJITInfo16emitFunctionStubEPKNS_8FunctionEPvRNS_14JITCodeEmitterE\", \"llvm::TargetJITInfo::emitFunctionStub(llvm::Function const*, void*, llvm::JITCodeEmitter&)\"},\n    {\"_ZN4llvm13TargetJITInfo23getLazyResolverFunctionEPFPvS1_E\", \"llvm::TargetJITInfo::getLazyResolverFunction(void* (*)(void*))\"},\n    {\"_ZN4llvm13TargetJITInfo8relocateEPvPNS_17MachineRelocationEjPh\", \"llvm::TargetJITInfo::relocate(void*, llvm::MachineRelocation*, unsigned int, unsigned char*)\"},\n    {\"_ZNK4llvm13TargetJITInfo21hasCustomConstantPoolEv\", \"llvm::TargetJITInfo::hasCustomConstantPool() const\"},\n    {\"_ZNK4llvm13TargetJITInfo19hasCustomJumpTablesEv\", \"llvm::TargetJITInfo::hasCustomJumpTables() const\"},\n    {\"_ZNK4llvm13TargetJITInfo24allocateSeparateGVMemoryEv\", \"llvm::TargetJITInfo::allocateSeparateGVMemory() const\"},\n    {\"_ZN4llvm15ARMRegisterInfoD1Ev\", \"llvm::ARMRegisterInfo::~ARMRegisterInfo()\"},\n    {\"_ZN4llvm12ARMInstrInfoD0Ev\", \"llvm::ARMInstrInfo::~ARMInstrInfo()\"},\n    {\"_ZNK4llvm15TargetInstrInfo33isReallyTriviallyReMaterializableEPKNS_12MachineInstrEPNS_13AliasAnalysisE\", \"llvm::TargetInstrInfo::isReallyTriviallyReMaterializable(llvm::MachineInstr const*, llvm::AliasAnalysis*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21isCoalescableExtInstrERKNS_12MachineInstrERjS4_S4_\", \"llvm::TargetInstrInfo::isCoalescableExtInstr(llvm::MachineInstr const&, unsigned int&, unsigned int&, unsigned int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo25isLoadFromStackSlotPostFEEPKNS_12MachineInstrERi\", \"llvm::TargetInstrInfo::isLoadFromStackSlotPostFE(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo20hasLoadFromStackSlotEPKNS_12MachineInstrERPKNS_17MachineMemOperandERi\", \"llvm::TargetInstrInfo::hasLoadFromStackSlot(llvm::MachineInstr const*, llvm::MachineMemOperand const*&, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo24isStoreToStackSlotPostFEEPKNS_12MachineInstrERi\", \"llvm::TargetInstrInfo::isStoreToStackSlotPostFE(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19hasStoreToStackSlotEPKNS_12MachineInstrERPKNS_17MachineMemOperandERi\", \"llvm::TargetInstrInfo::hasStoreToStackSlot(llvm::MachineInstr const*, llvm::MachineMemOperand const*&, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21scheduleTwoAddrSourceEPNS_12MachineInstrES2_RKNS_18TargetRegisterInfoE\", \"llvm::TargetInstrInfo::scheduleTwoAddrSource(llvm::MachineInstr*, llvm::MachineInstr*, llvm::TargetRegisterInfo const&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19isLegalToSplitMBBAtERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::TargetInstrInfo::isLegalToSplitMBBAt(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo25isProfitableToDupForIfCvtERNS_17MachineBasicBlockEjff\", \"llvm::ARMBaseInstrInfo::isProfitableToDupForIfCvt(llvm::MachineBasicBlock&, unsigned int, float, float) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21foldMemoryOperandImplERNS_15MachineFunctionEPNS_12MachineInstrERKNS_15SmallVectorImplIjEEi\", \"llvm::TargetInstrInfo::foldMemoryOperandImpl(llvm::MachineFunction&, llvm::MachineInstr*, llvm::SmallVectorImpl<unsigned int> const&, int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21foldMemoryOperandImplERNS_15MachineFunctionEPNS_12MachineInstrERKNS_15SmallVectorImplIjEES4_\", \"llvm::TargetInstrInfo::foldMemoryOperandImpl(llvm::MachineFunction&, llvm::MachineInstr*, llvm::SmallVectorImpl<unsigned int> const&, llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19unfoldMemoryOperandERNS_15MachineFunctionEPNS_12MachineInstrEjbbRNS_15SmallVectorImplIS4_EE\", \"llvm::TargetInstrInfo::unfoldMemoryOperand(llvm::MachineFunction&, llvm::MachineInstr*, unsigned int, bool, bool, llvm::SmallVectorImpl<llvm::MachineInstr*>&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19unfoldMemoryOperandERNS_12SelectionDAGEPNS_6SDNodeERNS_15SmallVectorImplIS4_EE\", \"llvm::TargetInstrInfo::unfoldMemoryOperand(llvm::SelectionDAG&, llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDNode*>&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo26getOpcodeAfterMemoryUnfoldEjbbPj\", \"llvm::TargetInstrInfo::getOpcodeAfterMemoryUnfold(unsigned int, bool, bool, unsigned int*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21getNoopForMachoTargetERNS_6MCInstE\", \"llvm::TargetInstrInfo::getNoopForMachoTarget(llvm::MCInst&) const\"},\n    {\"_ZNK4llvm16ARMBaseInstrInfo12isPredicatedEPKNS_12MachineInstrE\", \"llvm::ARMBaseInstrInfo::isPredicated(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo24isSafeToMoveRegClassDefsEPKNS_19TargetRegisterClassE\", \"llvm::TargetInstrInfo::isSafeToMoveRegClassDefs(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZNK4llvm12ARMInstrInfo15getRegisterInfoEv\", \"llvm::ARMInstrInfo::getRegisterInfo() const\"},\n    {\"_ZN4llvm16ARMBaseInstrInfoD1Ev\", \"llvm::ARMBaseInstrInfo::~ARMBaseInstrInfo()\"},\n    {\"_ZN4llvm16ARMBaseInstrInfoD0Ev\", \"llvm::ARMBaseInstrInfo::~ARMBaseInstrInfo()\"},\n    {\"_ZN4llvm19TargetInstrInfoImplD1Ev\", \"llvm::TargetInstrInfoImpl::~TargetInstrInfoImpl()\"},\n    {\"_ZN4llvm19TargetInstrInfoImplD0Ev\", \"llvm::TargetInstrInfoImpl::~TargetInstrInfoImpl()\"},\n    {\"_ZNK4llvm15TargetInstrInfo19isLoadFromStackSlotEPKNS_12MachineInstrERi\", \"llvm::TargetInstrInfo::isLoadFromStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo18isStoreToStackSlotEPKNS_12MachineInstrERi\", \"llvm::TargetInstrInfo::isStoreToStackSlot(llvm::MachineInstr const*, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21convertToThreeAddressERNS_14ilist_iteratorINS_17MachineBasicBlockEEERNS1_INS_12MachineInstrEEEPNS_13LiveVariablesE\", \"llvm::TargetInstrInfo::convertToThreeAddress(llvm::ilist_iterator<llvm::MachineBasicBlock>&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::LiveVariables*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo13AnalyzeBranchERNS_17MachineBasicBlockERPS1_S4_RNS_15SmallVectorImplINS_14MachineOperandEEEb\", \"llvm::TargetInstrInfo::AnalyzeBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*&, llvm::MachineBasicBlock*&, llvm::SmallVectorImpl<llvm::MachineOperand>&, bool) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo12RemoveBranchERNS_17MachineBasicBlockE\", \"llvm::TargetInstrInfo::RemoveBranch(llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo12InsertBranchERNS_17MachineBasicBlockEPS1_S3_RKNS_15SmallVectorImplINS_14MachineOperandEEENS_8DebugLocE\", \"llvm::TargetInstrInfo::InsertBranch(llvm::MachineBasicBlock&, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19isProfitableToIfCvtERNS_17MachineBasicBlockEjjff\", \"llvm::TargetInstrInfo::isProfitableToIfCvt(llvm::MachineBasicBlock&, unsigned int, unsigned int, float, float) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19isProfitableToIfCvtERNS_17MachineBasicBlockEjjS2_jjff\", \"llvm::TargetInstrInfo::isProfitableToIfCvt(llvm::MachineBasicBlock&, unsigned int, unsigned int, llvm::MachineBasicBlock&, unsigned int, unsigned int, float, float) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo25isProfitableToDupForIfCvtERNS_17MachineBasicBlockEjff\", \"llvm::TargetInstrInfo::isProfitableToDupForIfCvt(llvm::MachineBasicBlock&, unsigned int, float, float) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo11copyPhysRegERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjb\", \"llvm::TargetInstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo19storeRegToStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjbiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::TargetInstrInfo::storeRegToStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, bool, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo20loadRegFromStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::TargetInstrInfo::loadRegFromStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo24emitFrameIndexDebugValueERNS_15MachineFunctionEiyPKNS_6MDNodeENS_8DebugLocE\", \"llvm::TargetInstrInfo::emitFrameIndexDebugValue(llvm::MachineFunction&, int, unsigned long long, llvm::MDNode const*, llvm::DebugLoc) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo23areLoadsFromSameBasePtrEPNS_6SDNodeES2_RxS3_\", \"llvm::TargetInstrInfo::areLoadsFromSameBasePtr(llvm::SDNode*, llvm::SDNode*, long long&, long long&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo23shouldScheduleLoadsNearEPNS_6SDNodeES2_xxj\", \"llvm::TargetInstrInfo::shouldScheduleLoadsNear(llvm::SDNode*, llvm::SDNode*, long long, long long, unsigned int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo22ReverseBranchConditionERNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::TargetInstrInfo::ReverseBranchCondition(llvm::SmallVectorImpl<llvm::MachineOperand>&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo12isPredicatedEPKNS_12MachineInstrE\", \"llvm::TargetInstrInfo::isPredicated(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo17SubsumesPredicateERKNS_15SmallVectorImplINS_14MachineOperandEEES5_\", \"llvm::TargetInstrInfo::SubsumesPredicate(llvm::SmallVectorImpl<llvm::MachineOperand> const&, llvm::SmallVectorImpl<llvm::MachineOperand> const&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo16DefinesPredicateEPNS_12MachineInstrERSt6vectorINS_14MachineOperandESaIS4_EE\", \"llvm::TargetInstrInfo::DefinesPredicate(llvm::MachineInstr*, std::vector<llvm::MachineOperand, std::allocator<llvm::MachineOperand> >&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo12isPredicableEPNS_12MachineInstrE\", \"llvm::TargetInstrInfo::isPredicable(llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo14AnalyzeCompareEPKNS_12MachineInstrERjRiS5_\", \"llvm::TargetInstrInfo::AnalyzeCompare(llvm::MachineInstr const*, unsigned int&, int&, int&) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo20OptimizeCompareInstrEPNS_12MachineInstrEjiiPKNS_19MachineRegisterInfoE\", \"llvm::TargetInstrInfo::OptimizeCompareInstr(llvm::MachineInstr*, unsigned int, int, int, llvm::MachineRegisterInfo const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo13FoldImmediateEPNS_12MachineInstrES2_jPNS_19MachineRegisterInfoE\", \"llvm::TargetInstrInfo::FoldImmediate(llvm::MachineInstr*, llvm::MachineInstr*, unsigned int, llvm::MachineRegisterInfo*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo21hasHighOperandLatencyEPKNS_18InstrItineraryDataEPKNS_19MachineRegisterInfoEPKNS_12MachineInstrEjS9_j\", \"llvm::TargetInstrInfo::hasHighOperandLatency(llvm::InstrItineraryData const*, llvm::MachineRegisterInfo const*, llvm::MachineInstr const*, unsigned int, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE8_M_eraseEPSt13_Rb_tree_nodeIjE\", \"std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::_M_erase(std::_Rb_tree_node<unsigned int>*)\"},\n    {\"_ZN4llvm15ARMRegisterInfoD0Ev\", \"llvm::ARMRegisterInfo::~ARMRegisterInfo()\"},\n    {\"_ZNK4llvm18TargetRegisterInfo20getCrossCopyRegClassEPKNS_19TargetRegisterClassE\", \"llvm::TargetRegisterInfo::getCrossCopyRegClass(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo20hasReservedSpillSlotERKNS_15MachineFunctionEjRi\", \"llvm::TargetRegisterInfo::hasReservedSpillSlot(llvm::MachineFunction const&, unsigned int, int&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo21saveScavengerRegisterERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERS5_PKNS_19TargetRegisterClassEj\", \"llvm::TargetRegisterInfo::saveScavengerRegister(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::TargetRegisterClass const*, unsigned int) const\"},\n    {\"_ZN4llvm19ARMBaseRegisterInfoD1Ev\", \"llvm::ARMBaseRegisterInfo::~ARMBaseRegisterInfo()\"},\n    {\"_ZN4llvm19ARMBaseRegisterInfoD0Ev\", \"llvm::ARMBaseRegisterInfo::~ARMBaseRegisterInfo()\"},\n    {\"_ZN4llvm18ARMGenRegisterInfoD1Ev\", \"llvm::ARMGenRegisterInfo::~ARMGenRegisterInfo()\"},\n    {\"_ZN4llvm18ARMGenRegisterInfoD0Ev\", \"llvm::ARMGenRegisterInfo::~ARMGenRegisterInfo()\"},\n    {\"_ZNK4llvm18TargetRegisterInfo23canCombineSubRegIndicesEPKNS_19TargetRegisterClassERNS_15SmallVectorImplIjEERj\", \"llvm::TargetRegisterInfo::canCombineSubRegIndices(llvm::TargetRegisterClass const*, llvm::SmallVectorImpl<unsigned int>&, unsigned int&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo24getMatchingSuperRegClassEPKNS_19TargetRegisterClassES3_j\", \"llvm::TargetRegisterInfo::getMatchingSuperRegClass(llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*, unsigned int) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo18getPointerRegClassEj\", \"llvm::TargetRegisterInfo::getPointerRegClass(unsigned int) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo19ResolveRegAllocHintEjjRKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::ResolveRegAllocHint(unsigned int, unsigned int, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo18UpdateRegAllocHintEjjRNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::UpdateRegAllocHint(unsigned int, unsigned int, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo26requiresRegisterScavengingERKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::requiresRegisterScavenging(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo28requiresFrameIndexScavengingERKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::requiresFrameIndexScavenging(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo28requiresVirtualBaseRegistersERKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::requiresVirtualBaseRegisters(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18ARMGenRegisterInfo21needsStackRealignmentERKNS_15MachineFunctionE\", \"llvm::ARMGenRegisterInfo::needsStackRealignment(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo24getFrameIndexInstrOffsetEPKNS_12MachineInstrEi\", \"llvm::TargetRegisterInfo::getFrameIndexInstrOffset(llvm::MachineInstr const*, int) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo17needsFrameBaseRegEPNS_12MachineInstrEx\", \"llvm::TargetRegisterInfo::needsFrameBaseReg(llvm::MachineInstr*, long long) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo28materializeFrameBaseRegisterEPNS_17MachineBasicBlockEjix\", \"llvm::TargetRegisterInfo::materializeFrameBaseRegister(llvm::MachineBasicBlock*, unsigned int, int, long long) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo17resolveFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEjx\", \"llvm::TargetRegisterInfo::resolveFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, long long) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo18isFrameOffsetLegalEPKNS_12MachineInstrEx\", \"llvm::TargetRegisterInfo::isFrameOffsetLegal(llvm::MachineInstr const*, long long) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo29eliminateCallFramePseudoInstrERNS_15MachineFunctionERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::TargetRegisterInfo::eliminateCallFramePseudoInstr(llvm::MachineFunction&, llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZN4llvm17ARMTargetLoweringD0Ev\", \"llvm::ARMTargetLowering::~ARMTargetLowering()\"},\n    {\"_ZNK4llvm14TargetLowering17getRepRegClassForENS_3EVTE\", \"llvm::TargetLowering::getRepRegClassFor(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering21getRepRegClassCostForENS_3EVTE\", \"llvm::TargetLowering::getRepRegClassCostFor(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering22isVectorClearMaskLegalERKNS_15SmallVectorImplIiEENS_3EVTE\", \"llvm::TargetLowering::isVectorClearMaskLegal(llvm::SmallVectorImpl<int> const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering22ShouldShrinkFPConstantENS_3EVTE\", \"llvm::TargetLowering::ShouldShrinkFPConstant(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering19getOptimalMemOpTypeEyjjbbRNS_15MachineFunctionE\", \"llvm::TargetLowering::getOptimalMemOpType(unsigned long long, unsigned int, unsigned int, bool, bool, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm14TargetLowering25LowerCustomJumpTableEntryEPKNS_20MachineJumpTableInfoEPKNS_17MachineBasicBlockEjRNS_9MCContextE\", \"llvm::TargetLowering::LowerCustomJumpTableEntry(llvm::MachineJumpTableInfo const*, llvm::MachineBasicBlock const*, unsigned int, llvm::MCContext&) const\"},\n    {\"_ZNK4llvm14TargetLowering22getStackCookieLocationERjS1_\", \"llvm::TargetLowering::getStackCookieLocation(unsigned int&, unsigned int&) const\"},\n    {\"_ZNK4llvm14TargetLowering20isTypeDesirableForOpEjNS_3EVTE\", \"llvm::TargetLowering::isTypeDesirableForOp(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering22IsDesirableToPromoteOpENS_7SDValueERNS_3EVTE\", \"llvm::TargetLowering::IsDesirableToPromoteOp(llvm::SDValue, llvm::EVT&) const\"},\n    {\"_ZNK4llvm14TargetLowering14CanLowerReturnENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERNS_11LLVMContextE\", \"llvm::TargetLowering::CanLowerReturn(llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::LLVMContext&) const\"},\n    {\"_ZNK4llvm14TargetLowering14isTruncateFreeEPKNS_4TypeES3_\", \"llvm::TargetLowering::isTruncateFree(llvm::Type const*, llvm::Type const*) const\"},\n    {\"_ZNK4llvm14TargetLowering14isTruncateFreeENS_3EVTES1_\", \"llvm::TargetLowering::isTruncateFree(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering10isZExtFreeEPKNS_4TypeES3_\", \"llvm::TargetLowering::isZExtFree(llvm::Type const*, llvm::Type const*) const\"},\n    {\"_ZNK4llvm14TargetLowering10isZExtFreeENS_3EVTES1_\", \"llvm::TargetLowering::isZExtFree(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering21isNarrowingProfitableENS_3EVTES1_\", \"llvm::TargetLowering::isNarrowingProfitable(llvm::EVT, llvm::EVT) const\"},\n    {\"_ZN4llvm16ARMFrameLoweringD0Ev\", \"llvm::ARMFrameLowering::~ARMFrameLowering()\"},\n    {\"_ZNK4llvm19TargetFrameLowering24getCalleeSavedSpillSlotsERj\", \"llvm::TargetFrameLowering::getCalleeSavedSpillSlots(unsigned int&) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering31targetHandlesStackFrameRoundingEv\", \"llvm::TargetFrameLowering::targetHandlesStackFrameRounding() const\"},\n    {\"_ZNK4llvm19TargetFrameLowering35processFunctionBeforeFrameFinalizedERNS_15MachineFunctionE\", \"llvm::TargetFrameLowering::processFunctionBeforeFrameFinalized(llvm::MachineFunction&) const\"},\n    {\"_ZN4llvm21RegisterTargetMachineINS_18ThumbTargetMachineEE9AllocatorERKNS_6TargetERKSsS7_\", \"llvm::RegisterTargetMachine<llvm::ThumbTargetMachine>::Allocator(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZN4llvm21RegisterTargetMachineINS_16ARMTargetMachineEE9AllocatorERKNS_6TargetERKSsS7_\", \"llvm::RegisterTargetMachine<llvm::ARMTargetMachine>::Allocator(llvm::Target const&, std::string const&, std::string const&)\"},\n    {\"_ZNK4llvm19TargetFrameLowering25spillCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::TargetFrameLowering::spillCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering27restoreCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::TargetFrameLowering::restoreCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering20hasReservedCallFrameERKNS_15MachineFunctionE\", \"llvm::TargetFrameLowering::hasReservedCallFrame(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering27canSimplifyCallFramePseudosERKNS_15MachineFunctionE\", \"llvm::TargetFrameLowering::canSimplifyCallFramePseudos(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering36processFunctionBeforeCalleeSavedScanERNS_15MachineFunctionEPNS_12RegScavengerE\", \"llvm::TargetFrameLowering::processFunctionBeforeCalleeSavedScan(llvm::MachineFunction&, llvm::RegScavenger*) const\"},\n    {\"_ZN4llvm13ImmutablePass18getAsImmutablePassEv\", \"llvm::ImmutablePass::getAsImmutablePass()\"},\n    {\"_ZN4llvm13ImmutablePass11runOnModuleERNS_6ModuleE\", \"llvm::ImmutablePass::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm10ARMJITInfoC2Ev\", \"llvm::ARMJITInfo::ARMJITInfo()\"},\n    {\"_ZN4llvm22ARMElfTargetObjectFile10InitializeERNS_9MCContextERKNS_13TargetMachineE\", \"llvm::ARMElfTargetObjectFile::Initialize(llvm::MCContext&, llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm22ARMElfTargetObjectFileD1Ev\", \"llvm::ARMElfTargetObjectFile::~ARMElfTargetObjectFile()\"},\n    {\"_ZN4llvm22ARMElfTargetObjectFileD0Ev\", \"llvm::ARMElfTargetObjectFile::~ARMElfTargetObjectFile()\"},\n    {\"_ZN4llvm22createMLxExpansionPassEv\", \"llvm::createMLxExpansionPass()\"},\n    {\"_ZN12_GLOBAL__N_112MLxExpansionD1Ev\", \"(anonymous namespace)::MLxExpansion::~MLxExpansion()\"},\n    {\"_ZN12_GLOBAL__N_112MLxExpansionD0Ev\", \"(anonymous namespace)::MLxExpansion::~MLxExpansion()\"},\n    {\"_ZNK12_GLOBAL__N_112MLxExpansion11getPassNameEv\", \"(anonymous namespace)::MLxExpansion::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_112MLxExpansion20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MLxExpansion::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm21createNEONMoveFixPassEv\", \"llvm::createNEONMoveFixPass()\"},\n    {\"_ZN12_GLOBAL__N_115NEONMoveFixPassD1Ev\", \"(anonymous namespace)::NEONMoveFixPass::~NEONMoveFixPass()\"},\n    {\"_ZN12_GLOBAL__N_115NEONMoveFixPassD0Ev\", \"(anonymous namespace)::NEONMoveFixPass::~NEONMoveFixPass()\"},\n    {\"_ZNK12_GLOBAL__N_115NEONMoveFixPass11getPassNameEv\", \"(anonymous namespace)::NEONMoveFixPass::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_115NEONMoveFixPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::NEONMoveFixPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_12MachineInstrENS_12DenseMapInfoIjEENS4_IS3_EEE16InsertIntoBucketERKjRKS3_PSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::InsertIntoBucket(unsigned int const&, llvm::MachineInstr const* const&, std::pair<unsigned int, llvm::MachineInstr const*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_12MachineInstrENS_12DenseMapInfoIjEENS4_IS3_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm19Thumb1FrameLowering20hasReservedCallFrameERKNS_15MachineFunctionE\", \"llvm::Thumb1FrameLowering::hasReservedCallFrame(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19Thumb1FrameLowering12emitPrologueERNS_15MachineFunctionE\", \"llvm::Thumb1FrameLowering::emitPrologue(llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm19Thumb1FrameLowering12emitEpilogueERNS_15MachineFunctionERNS_17MachineBasicBlockE\", \"llvm::Thumb1FrameLowering::emitEpilogue(llvm::MachineFunction&, llvm::MachineBasicBlock&) const\"},\n    {\"_ZNK4llvm19Thumb1FrameLowering25spillCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb1FrameLowering::spillCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm19Thumb1FrameLowering27restoreCalleeSavedRegistersERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERKSt6vectorINS_15CalleeSavedInfoESaIS7_EEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb1FrameLowering::restoreCalleeSavedRegisters(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm19Thumb1FrameLoweringD1Ev\", \"llvm::Thumb1FrameLowering::~Thumb1FrameLowering()\"},\n    {\"_ZN4llvm19Thumb1FrameLoweringD0Ev\", \"llvm::Thumb1FrameLowering::~Thumb1FrameLowering()\"},\n    {\"_ZNSt6vectorIjSaIjEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPjS1_EERKj\", \"std::vector<unsigned int, std::allocator<unsigned int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int const&)\"},\n    {\"_ZN4llvm9BitVector6resizeEjb\", \"llvm::BitVector::resize(unsigned int, bool)\"},\n    {\"_ZN4llvm15Thumb1InstrInfoC1ERKNS_12ARMSubtargetE\", \"llvm::Thumb1InstrInfo::Thumb1InstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm15Thumb1InstrInfoC2ERKNS_12ARMSubtargetE\", \"llvm::Thumb1InstrInfo::Thumb1InstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm15Thumb1InstrInfo18getUnindexedOpcodeEj\", \"llvm::Thumb1InstrInfo::getUnindexedOpcode(unsigned int) const\"},\n    {\"_ZNK4llvm15Thumb1InstrInfo11copyPhysRegERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjb\", \"llvm::Thumb1InstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm15Thumb1InstrInfo19storeRegToStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjbiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb1InstrInfo::storeRegToStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, bool, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm15Thumb1InstrInfo20loadRegFromStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb1InstrInfo::loadRegFromStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm15Thumb1InstrInfoD1Ev\", \"llvm::Thumb1InstrInfo::~Thumb1InstrInfo()\"},\n    {\"_ZN4llvm15Thumb1InstrInfoD0Ev\", \"llvm::Thumb1InstrInfo::~Thumb1InstrInfo()\"},\n    {\"_ZNK4llvm15Thumb1InstrInfo15getRegisterInfoEv\", \"llvm::Thumb1InstrInfo::getRegisterInfo() const\"},\n    {\"_ZN4llvm18Thumb1RegisterInfoD1Ev\", \"llvm::Thumb1RegisterInfo::~Thumb1RegisterInfo()\"},\n    {\"_ZN4llvm18Thumb1RegisterInfoD0Ev\", \"llvm::Thumb1RegisterInfo::~Thumb1RegisterInfo()\"},\n    {\"_ZN4llvm18Thumb1RegisterInfoC1ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::Thumb1RegisterInfo::Thumb1RegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm18Thumb1RegisterInfoC2ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::Thumb1RegisterInfo::Thumb1RegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo17emitLoadConstPoolERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjiNS_5ARMCC9CondCodesEj\", \"llvm::Thumb1RegisterInfo::emitLoadConstPool(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::DebugLoc, unsigned int, unsigned int, int, llvm::ARMCC::CondCodes, unsigned int) const\"},\n    {\"_ZN4llvm25emitThumbRegPlusImmediateERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEjjiRKNS_15TargetInstrInfoERKNS_19ARMBaseRegisterInfoENS_8DebugLocE\", \"llvm::emitThumbRegPlusImmediate(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, unsigned int, int, llvm::TargetInstrInfo const&, llvm::ARMBaseRegisterInfo const&, llvm::DebugLoc)\"},\n    {\"_Z24emitThumbRegPlusImmInRegRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEjjibRKNS_15TargetInstrInfoERKNS_19ARMBaseRegisterInfoENS_8DebugLocE\", \"emitThumbRegPlusImmInReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, unsigned int, int, bool, llvm::TargetInstrInfo const&, llvm::ARMBaseRegisterInfo const&, llvm::DebugLoc)\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo29eliminateCallFramePseudoInstrERNS_15MachineFunctionERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::Thumb1RegisterInfo::eliminateCallFramePseudoInstr(llvm::MachineFunction&, llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo17rewriteFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEjjRiRKNS_16ARMBaseInstrInfoE\", \"llvm::Thumb1RegisterInfo::rewriteFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, unsigned int, int&, llvm::ARMBaseInstrInfo const&) const\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo17resolveFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEjx\", \"llvm::Thumb1RegisterInfo::resolveFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, long long) const\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo21saveScavengerRegisterERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEERS5_PKNS_19TargetRegisterClassEj\", \"llvm::Thumb1RegisterInfo::saveScavengerRegister(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::TargetRegisterClass const*, unsigned int) const\"},\n    {\"_ZNK4llvm18Thumb1RegisterInfo19eliminateFrameIndexENS_14ilist_iteratorINS_12MachineInstrEEEiPNS_12RegScavengerE\", \"llvm::Thumb1RegisterInfo::eliminateFrameIndex(llvm::ilist_iterator<llvm::MachineInstr>, int, llvm::RegScavenger*) const\"},\n    {\"_ZN4llvm23createThumb2ITBlockPassEv\", \"llvm::createThumb2ITBlockPass()\"},\n    {\"_ZN12_GLOBAL__N_117Thumb2ITBlockPassD1Ev\", \"(anonymous namespace)::Thumb2ITBlockPass::~Thumb2ITBlockPass()\"},\n    {\"_ZN12_GLOBAL__N_117Thumb2ITBlockPassD0Ev\", \"(anonymous namespace)::Thumb2ITBlockPass::~Thumb2ITBlockPass()\"},\n    {\"_ZNK12_GLOBAL__N_117Thumb2ITBlockPass11getPassNameEv\", \"(anonymous namespace)::Thumb2ITBlockPass::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_117Thumb2ITBlockPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::Thumb2ITBlockPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_Z12TrackDefUsesPN4llvm12MachineInstrERNS_8SmallSetIjLj4EEES4_PKNS_18TargetRegisterInfoE\", \"TrackDefUses(llvm::MachineInstr*, llvm::SmallSet<unsigned int, 4u>&, llvm::SmallSet<unsigned int, 4u>&, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN4llvm8SmallSetIjLj4EE6insertERKj\", \"llvm::SmallSet<unsigned int, 4u>::insert(unsigned int const&)\"},\n    {\"_ZN4llvm15Thumb2InstrInfoC1ERKNS_12ARMSubtargetE\", \"llvm::Thumb2InstrInfo::Thumb2InstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm15Thumb2InstrInfoC2ERKNS_12ARMSubtargetE\", \"llvm::Thumb2InstrInfo::Thumb2InstrInfo(llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo18getUnindexedOpcodeEj\", \"llvm::Thumb2InstrInfo::getUnindexedOpcode(unsigned int) const\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo23ReplaceTailWithBranchToENS_14ilist_iteratorINS_12MachineInstrEEEPNS_17MachineBasicBlockE\", \"llvm::Thumb2InstrInfo::ReplaceTailWithBranchTo(llvm::ilist_iterator<llvm::MachineInstr>, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo19isLegalToSplitMBBAtERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::Thumb2InstrInfo::isLegalToSplitMBBAt(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZN4llvm19getITInstrPredicateEPKNS_12MachineInstrERj\", \"llvm::getITInstrPredicate(llvm::MachineInstr const*, unsigned int&)\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo11copyPhysRegERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjb\", \"llvm::Thumb2InstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc, unsigned int, unsigned int, bool) const\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo19storeRegToStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjbiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb2InstrInfo::storeRegToStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, bool, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo20loadRegFromStackSlotERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjiPKNS_19TargetRegisterClassEPKNS_18TargetRegisterInfoE\", \"llvm::Thumb2InstrInfo::loadRegFromStackSlot(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, int, llvm::TargetRegisterClass const*, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm22emitT2RegPlusImmediateERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjiNS_5ARMCC9CondCodesEjRKNS_16ARMBaseInstrInfoE\", \"llvm::emitT2RegPlusImmediate(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::DebugLoc, unsigned int, unsigned int, int, llvm::ARMCC::CondCodes, unsigned int, llvm::ARMBaseInstrInfo const&)\"},\n    {\"_ZN4llvm19rewriteT2FrameIndexERNS_12MachineInstrEjjRiRKNS_16ARMBaseInstrInfoE\", \"llvm::rewriteT2FrameIndex(llvm::MachineInstr&, unsigned int, unsigned int, int&, llvm::ARMBaseInstrInfo const&)\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo21scheduleTwoAddrSourceEPNS_12MachineInstrES2_RKNS_18TargetRegisterInfoE\", \"llvm::Thumb2InstrInfo::scheduleTwoAddrSource(llvm::MachineInstr*, llvm::MachineInstr*, llvm::TargetRegisterInfo const&) const\"},\n    {\"_ZN4llvm15Thumb2InstrInfoD1Ev\", \"llvm::Thumb2InstrInfo::~Thumb2InstrInfo()\"},\n    {\"_ZN4llvm15Thumb2InstrInfoD0Ev\", \"llvm::Thumb2InstrInfo::~Thumb2InstrInfo()\"},\n    {\"_ZNK4llvm15Thumb2InstrInfo15getRegisterInfoEv\", \"llvm::Thumb2InstrInfo::getRegisterInfo() const\"},\n    {\"_ZN4llvm18Thumb2RegisterInfoD1Ev\", \"llvm::Thumb2RegisterInfo::~Thumb2RegisterInfo()\"},\n    {\"_ZN4llvm18Thumb2RegisterInfoD0Ev\", \"llvm::Thumb2RegisterInfo::~Thumb2RegisterInfo()\"},\n    {\"_ZN4llvm18Thumb2RegisterInfoC1ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::Thumb2RegisterInfo::Thumb2RegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZN4llvm18Thumb2RegisterInfoC2ERKNS_16ARMBaseInstrInfoERKNS_12ARMSubtargetE\", \"llvm::Thumb2RegisterInfo::Thumb2RegisterInfo(llvm::ARMBaseInstrInfo const&, llvm::ARMSubtarget const&)\"},\n    {\"_ZNK4llvm18Thumb2RegisterInfo17emitLoadConstPoolERNS_17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEENS_8DebugLocEjjiNS_5ARMCC9CondCodesEj\", \"llvm::Thumb2RegisterInfo::emitLoadConstPool(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::DebugLoc, unsigned int, unsigned int, int, llvm::ARMCC::CondCodes, unsigned int) const\"},\n    {\"_ZN4llvm29createThumb2SizeReductionPassEv\", \"llvm::createThumb2SizeReductionPass()\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduceD1Ev\", \"(anonymous namespace)::Thumb2SizeReduce::~Thumb2SizeReduce()\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduceD0Ev\", \"(anonymous namespace)::Thumb2SizeReduce::~Thumb2SizeReduce()\"},\n    {\"_ZNK12_GLOBAL__N_116Thumb2SizeReduce11getPassNameEv\", \"(anonymous namespace)::Thumb2SizeReduce::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduce20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::Thumb2SizeReduce::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduce13ReduceTo2AddrERN4llvm17MachineBasicBlockEPNS1_12MachineInstrERKNS_11ReduceEntryEb\", \"(anonymous namespace)::Thumb2SizeReduce::ReduceTo2Addr(llvm::MachineBasicBlock&, llvm::MachineInstr*, (anonymous namespace)::ReduceEntry const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduce14ReduceToNarrowERN4llvm17MachineBasicBlockEPNS1_12MachineInstrERKNS_11ReduceEntryEb\", \"(anonymous namespace)::Thumb2SizeReduce::ReduceToNarrow(llvm::MachineBasicBlock&, llvm::MachineInstr*, (anonymous namespace)::ReduceEntry const&, bool)\"},\n    {\"_ZN4llvm14TargetLowering15DAGCombinerInfo13AddToWorklistEPNS_6SDNodeE\", \"llvm::TargetLowering::DAGCombinerInfo::AddToWorklist(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner13AddToWorkListEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::AddToWorkList(llvm::SDNode*)\"},\n    {\"_ZN4llvm14TargetLowering15DAGCombinerInfo9CombineToEPNS_6SDNodeERKSt6vectorINS_7SDValueESaIS5_EEb\", \"llvm::TargetLowering::DAGCombinerInfo::CombineTo(llvm::SDNode*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner9CombineToEPN4llvm6SDNodeEPKNS1_7SDValueEjb\", \"(anonymous namespace)::DAGCombiner::CombineTo(llvm::SDNode*, llvm::SDValue const*, unsigned int, bool)\"},\n    {\"_ZN4llvm14TargetLowering15DAGCombinerInfo9CombineToEPNS_6SDNodeENS_7SDValueEb\", \"llvm::TargetLowering::DAGCombinerInfo::CombineTo(llvm::SDNode*, llvm::SDValue, bool)\"},\n    {\"_ZN4llvm14TargetLowering15DAGCombinerInfo9CombineToEPNS_6SDNodeENS_7SDValueES4_b\", \"llvm::TargetLowering::DAGCombinerInfo::CombineTo(llvm::SDNode*, llvm::SDValue, llvm::SDValue, bool)\"},\n    {\"_ZN4llvm14TargetLowering15DAGCombinerInfo23CommitTargetLoweringOptERKNS0_17TargetLoweringOptE\", \"llvm::TargetLowering::DAGCombinerInfo::CommitTargetLoweringOpt(llvm::TargetLowering::TargetLoweringOpt const&)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner23CommitTargetLoweringOptERKN4llvm14TargetLowering17TargetLoweringOptE\", \"(anonymous namespace)::DAGCombiner::CommitTargetLoweringOpt(llvm::TargetLowering::TargetLoweringOpt const&)\"},\n    {\"_ZN4llvm12SelectionDAG7CombineENS_12CombineLevelERNS_13AliasAnalysisENS_10CodeGenOpt5LevelE\", \"llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AliasAnalysis&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner7combineEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::combine(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_115WorkListRemoverD1Ev\", \"(anonymous namespace)::WorkListRemover::~WorkListRemover()\"},\n    {\"_ZN12_GLOBAL__N_115WorkListRemoverD0Ev\", \"(anonymous namespace)::WorkListRemover::~WorkListRemover()\"},\n    {\"_ZN12_GLOBAL__N_115WorkListRemover11NodeDeletedEPN4llvm6SDNodeES3_\", \"(anonymous namespace)::WorkListRemover::NodeDeleted(llvm::SDNode*, llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_115WorkListRemover11NodeUpdatedEPN4llvm6SDNodeE\", \"(anonymous namespace)::WorkListRemover::NodeUpdated(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner5visitEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::visit(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner18SExtPromoteOperandEN4llvm7SDValueENS1_3EVTE\", \"(anonymous namespace)::DAGCombiner::SExtPromoteOperand(llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner18ZExtPromoteOperandEN4llvm7SDValueENS1_3EVTE\", \"(anonymous namespace)::DAGCombiner::ZExtPromoteOperand(llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner14PromoteOperandEN4llvm7SDValueENS1_3EVTERb\", \"(anonymous namespace)::DAGCombiner::PromoteOperand(llvm::SDValue, llvm::EVT, bool&)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner27ReplaceLoadWithPromotedLoadEPN4llvm6SDNodeES3_\", \"(anonymous namespace)::DAGCombiner::ReplaceLoadWithPromotedLoad(llvm::SDNode*, llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner8visitXOREPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::visitXOR(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner15FindBetterChainEPN4llvm6SDNodeENS1_7SDValueE\", \"(anonymous namespace)::DAGCombiner::FindBetterChain(llvm::SDNode*, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner28CombineToPreIndexedLoadStoreEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::CombineToPreIndexedLoadStore(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner29CombineToPostIndexedLoadStoreEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::CombineToPostIndexedLoadStore(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner15GetDemandedBitsEN4llvm7SDValueERKNS1_5APIntE\", \"(anonymous namespace)::DAGCombiner::GetDemandedBits(llvm::SDValue, llvm::APInt const&)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner20SimplifyDemandedBitsEN4llvm7SDValueERKNS1_5APIntE\", \"(anonymous namespace)::DAGCombiner::SimplifyDemandedBits(llvm::SDValue, llvm::APInt const&)\"},\n    {\"_Z18CheckForMaskedLoadN4llvm7SDValueES0_S0_\", \"CheckForMaskedLoad(llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_Z31ShrinkLoadReplaceStoreWithStoreRKSt4pairIjjEN4llvm7SDValueEPNS3_11StoreSDNodeEPN12_GLOBAL__N_111DAGCombinerE\", \"ShrinkLoadReplaceStoreWithStore(std::pair<unsigned int, unsigned int> const&, llvm::SDValue, llvm::StoreSDNode*, (anonymous namespace)::DAGCombiner*)\"},\n    {\"_ZNK12_GLOBAL__N_111DAGCombiner13FindAliasInfoEPN4llvm6SDNodeERNS1_7SDValueERxRPKNS1_5ValueERiRjRPKNS1_6MDNodeE\", \"(anonymous namespace)::DAGCombiner::FindAliasInfo(llvm::SDNode*, llvm::SDValue&, long long&, llvm::Value const*&, int&, unsigned int&, llvm::MDNode const*&) const\"},\n    {\"_Z18isNegatibleForFreeN4llvm7SDValueEbj\", \"isNegatibleForFree(llvm::SDValue, bool, unsigned int)\"},\n    {\"_Z20GetNegatedExpressionN4llvm7SDValueERNS_12SelectionDAGEbj\", \"GetNegatedExpression(llvm::SDValue, llvm::SelectionDAG&, bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner14SimplifyVBinOpEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::SimplifyVBinOp(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner23CombineConsecutiveLoadsEPN4llvm6SDNodeENS1_3EVTE\", \"(anonymous namespace)::DAGCombiner::CombineConsecutiveLoads(llvm::SDNode*, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner33ConstantFoldBITCASTofBUILD_VECTOREPN4llvm6SDNodeENS1_3EVTE\", \"(anonymous namespace)::DAGCombiner::ConstantFoldBITCASTofBUILD_VECTOR(llvm::SDNode*, llvm::EVT)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner15ReduceLoadWidthEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::ReduceLoadWidth(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner20SimplifyDemandedBitsEN4llvm7SDValueE\", \"(anonymous namespace)::DAGCombiner::SimplifyDemandedBits(llvm::SDValue)\"},\n    {\"_Z23ExtendUsesToFormExtLoadPN4llvm6SDNodeENS_7SDValueEjRNS_11SmallVectorIS1_Lj4EEERKNS_14TargetLoweringE\", \"ExtendUsesToFormExtLoad(llvm::SDNode*, llvm::SDValue, unsigned int, llvm::SmallVector<llvm::SDNode*, 4u>&, llvm::TargetLowering const&)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner16SimplifySelectCCEN4llvm8DebugLocENS1_7SDValueES3_S3_S3_NS1_3ISD8CondCodeEb\", \"(anonymous namespace)::DAGCombiner::SimplifySelectCC(llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::ISD::CondCode, bool)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner17SimplifySelectOpsEPN4llvm6SDNodeENS1_7SDValueES4_\", \"(anonymous namespace)::DAGCombiner::SimplifySelectOps(llvm::SDNode*, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner20visitShiftByConstantEPN4llvm6SDNodeEj\", \"(anonymous namespace)::DAGCombiner::visitShiftByConstant(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner14ReassociateOpsEjN4llvm8DebugLocENS1_7SDValueES3_\", \"(anonymous namespace)::DAGCombiner::ReassociateOps(unsigned int, llvm::DebugLoc, llvm::SDValue, llvm::SDValue)\"},\n    {\"_Z17isSetCCEquivalentN4llvm7SDValueERS0_S1_S1_\", \"isSetCCEquivalent(llvm::SDValue, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner32SimplifyBinOpWithSameOpcodeHandsEPN4llvm6SDNodeE\", \"(anonymous namespace)::DAGCombiner::SimplifyBinOpWithSameOpcodeHands(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_111DAGCombiner26SimplifyNodeWithTwoResultsEPN4llvm6SDNodeEjj\", \"(anonymous namespace)::DAGCombiner::SimplifyNodeWithTwoResults(llvm::SDNode*, unsigned int, unsigned int)\"},\n    {\"_Z21combineShlAddConstantN4llvm8DebugLocENS_7SDValueES1_RNS_12SelectionDAGE\", \"combineShlAddConstant(llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SelectionDAG&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm6SDNodeESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > >, llvm::SDNode*>(__gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > >, __gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > >, llvm::SDNode* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNK4llvm3EVT6bitsGEES0_\", \"llvm::EVT::bitsGE(llvm::EVT) const\"},\n    {\"_ZSt6__findIPPN4llvm6SDNodeES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"llvm::SDNode** std::__find<llvm::SDNode**, llvm::SDNode*>(llvm::SDNode**, llvm::SDNode**, llvm::SDNode* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8FastISel13startNewBlockEv\", \"llvm::FastISel::startNewBlock()\"},\n    {\"_ZNK4llvm8FastISel14hasTrivialKillEPKNS_5ValueE\", \"llvm::FastISel::hasTrivialKill(llvm::Value const*) const\"},\n    {\"_ZN4llvm8FastISel14getRegForValueEPKNS_5ValueE\", \"llvm::FastISel::getRegForValue(llvm::Value const*)\"},\n    {\"_ZN4llvm8FastISel19enterLocalValueAreaEv\", \"llvm::FastISel::enterLocalValueArea()\"},\n    {\"_ZN4llvm8FastISel22materializeRegForValueEPKNS_5ValueENS_3MVTE\", \"llvm::FastISel::materializeRegForValue(llvm::Value const*, llvm::MVT)\"},\n    {\"_ZN4llvm8FastISel19leaveLocalValueAreaENS0_9SavePointE\", \"llvm::FastISel::leaveLocalValueArea(llvm::FastISel::SavePoint)\"},\n    {\"_ZN4llvm8FastISel14SelectOperatorEPKNS_4UserEj\", \"llvm::FastISel::SelectOperator(llvm::User const*, unsigned int)\"},\n    {\"_ZN4llvm8FastISel17lookUpRegForValueEPKNS_5ValueE\", \"llvm::FastISel::lookUpRegForValue(llvm::Value const*)\"},\n    {\"_ZN4llvm8FastISel15createResultRegEPKNS_19TargetRegisterClassE\", \"llvm::FastISel::createResultReg(llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm8FastISel14UpdateValueMapEPKNS_5ValueEj\", \"llvm::FastISel::UpdateValueMap(llvm::Value const*, unsigned int)\"},\n    {\"_ZN4llvm8FastISel17getRegForGEPIndexEPKNS_5ValueE\", \"llvm::FastISel::getRegForGEPIndex(llvm::Value const*)\"},\n    {\"_ZN4llvm8FastISel17recomputeInsertPtEv\", \"llvm::FastISel::recomputeInsertPt()\"},\n    {\"_ZN4llvm8FastISel14SelectBinaryOpEPKNS_4UserEj\", \"llvm::FastISel::SelectBinaryOp(llvm::User const*, unsigned int)\"},\n    {\"_ZN4llvm8FastISel19SelectGetElementPtrEPKNS_4UserE\", \"llvm::FastISel::SelectGetElementPtr(llvm::User const*)\"},\n    {\"_ZN4llvm8FastISel12FastEmit_ri_ENS_3MVTEjjbyS1_\", \"llvm::FastISel::FastEmit_ri_(llvm::MVT, unsigned int, unsigned int, bool, unsigned long long, llvm::MVT)\"},\n    {\"_ZN4llvm8FastISel10SelectCallEPKNS_4UserE\", \"llvm::FastISel::SelectCall(llvm::User const*)\"},\n    {\"_ZN4llvm8FastISel10SelectCastEPKNS_4UserEj\", \"llvm::FastISel::SelectCast(llvm::User const*, unsigned int)\"},\n    {\"_ZN4llvm8FastISel18FastEmitZExtFromI1ENS_3MVTEjb\", \"llvm::FastISel::FastEmitZExtFromI1(llvm::MVT, unsigned int, bool)\"},\n    {\"_ZN4llvm8FastISel13SelectBitCastEPKNS_4UserE\", \"llvm::FastISel::SelectBitCast(llvm::User const*)\"},\n    {\"_ZN4llvm8FastISel17SelectInstructionEPKNS_11InstructionE\", \"llvm::FastISel::SelectInstruction(llvm::Instruction const*)\"},\n    {\"_ZN4llvm8FastISel31HandlePHINodesInSuccessorBlocksEPKNS_10BasicBlockE\", \"llvm::FastISel::HandlePHINodesInSuccessorBlocks(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm8FastISel14FastEmitBranchEPNS_17MachineBasicBlockENS_8DebugLocE\", \"llvm::FastISel::FastEmitBranch(llvm::MachineBasicBlock*, llvm::DebugLoc)\"},\n    {\"_ZN4llvm8FastISel10SelectFNegEPKNS_4UserE\", \"llvm::FastISel::SelectFNeg(llvm::User const*)\"},\n    {\"_ZN4llvm8FastISelC1ERNS_20FunctionLoweringInfoE\", \"llvm::FastISel::FastISel(llvm::FunctionLoweringInfo&)\"},\n    {\"_ZN4llvm8FastISelC2ERNS_20FunctionLoweringInfoE\", \"llvm::FastISel::FastISel(llvm::FunctionLoweringInfo&)\"},\n    {\"_ZN4llvm8FastISelD0Ev\", \"llvm::FastISel::~FastISel()\"},\n    {\"_ZN4llvm8FastISelD1Ev\", \"llvm::FastISel::~FastISel()\"},\n    {\"_ZN4llvm8FastISelD2Ev\", \"llvm::FastISel::~FastISel()\"},\n    {\"_ZN4llvm8FastISel9FastEmit_ENS_3MVTES1_j\", \"llvm::FastISel::FastEmit_(llvm::MVT, llvm::MVT, unsigned int)\"},\n    {\"_ZN4llvm8FastISel10FastEmit_rENS_3MVTES1_jjb\", \"llvm::FastISel::FastEmit_r(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool)\"},\n    {\"_ZN4llvm8FastISel11FastEmit_rrENS_3MVTES1_jjbjb\", \"llvm::FastISel::FastEmit_rr(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned int, bool)\"},\n    {\"_ZN4llvm8FastISel10FastEmit_iENS_3MVTES1_jy\", \"llvm::FastISel::FastEmit_i(llvm::MVT, llvm::MVT, unsigned int, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel10FastEmit_fENS_3MVTES1_jPKNS_10ConstantFPE\", \"llvm::FastISel::FastEmit_f(llvm::MVT, llvm::MVT, unsigned int, llvm::ConstantFP const*)\"},\n    {\"_ZN4llvm8FastISel11FastEmit_riENS_3MVTES1_jjby\", \"llvm::FastISel::FastEmit_ri(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel11FastEmit_rfENS_3MVTES1_jjbPKNS_10ConstantFPE\", \"llvm::FastISel::FastEmit_rf(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, llvm::ConstantFP const*)\"},\n    {\"_ZN4llvm8FastISel12FastEmit_rriENS_3MVTES1_jjbjby\", \"llvm::FastISel::FastEmit_rri(llvm::MVT, llvm::MVT, unsigned int, unsigned int, bool, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel12FastEmit_rf_ENS_3MVTEjjbPKNS_10ConstantFPES1_\", \"llvm::FastISel::FastEmit_rf_(llvm::MVT, unsigned int, unsigned int, bool, llvm::ConstantFP const*, llvm::MVT)\"},\n    {\"_ZN4llvm8FastISel13FastEmitInst_EjPKNS_19TargetRegisterClassE\", \"llvm::FastISel::FastEmitInst_(unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm8FastISel14FastEmitInst_rEjPKNS_19TargetRegisterClassEjb\", \"llvm::FastISel::FastEmitInst_r(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool)\"},\n    {\"_ZN4llvm8FastISel15FastEmitInst_rrEjPKNS_19TargetRegisterClassEjbjb\", \"llvm::FastISel::FastEmitInst_rr(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned int, bool)\"},\n    {\"_ZN4llvm8FastISel15FastEmitInst_riEjPKNS_19TargetRegisterClassEjby\", \"llvm::FastISel::FastEmitInst_ri(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel15FastEmitInst_rfEjPKNS_19TargetRegisterClassEjbPKNS_10ConstantFPE\", \"llvm::FastISel::FastEmitInst_rf(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, llvm::ConstantFP const*)\"},\n    {\"_ZN4llvm8FastISel16FastEmitInst_rriEjPKNS_19TargetRegisterClassEjbjby\", \"llvm::FastISel::FastEmitInst_rri(unsigned int, llvm::TargetRegisterClass const*, unsigned int, bool, unsigned int, bool, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel14FastEmitInst_iEjPKNS_19TargetRegisterClassEy\", \"llvm::FastISel::FastEmitInst_i(unsigned int, llvm::TargetRegisterClass const*, unsigned long long)\"},\n    {\"_ZN4llvm8FastISel26FastEmitInst_extractsubregENS_3MVTEjbj\", \"llvm::FastISel::FastEmitInst_extractsubreg(llvm::MVT, unsigned int, bool, unsigned int)\"},\n    {\"_ZN4llvm8FastISel25TargetMaterializeConstantEPKNS_8ConstantE\", \"llvm::FastISel::TargetMaterializeConstant(llvm::Constant const*)\"},\n    {\"_ZN4llvm8FastISel23TargetMaterializeAllocaEPKNS_10AllocaInstE\", \"llvm::FastISel::TargetMaterializeAlloca(llvm::AllocaInst const*)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm12MachineInstrEjESaIS4_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS4_S6_EEmRKS4_\", \"std::vector<std::pair<llvm::MachineInstr*, unsigned int>, std::allocator<std::pair<llvm::MachineInstr*, unsigned int> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::pair<llvm::MachineInstr*, unsigned int>*, std::vector<std::pair<llvm::MachineInstr*, unsigned int>, std::allocator<std::pair<llvm::MachineInstr*, unsigned int> > > >, unsigned long, std::pair<llvm::MachineInstr*, unsigned int> const&)\"},\n    {\"_ZN4llvm20FunctionLoweringInfoC1ERKNS_14TargetLoweringE\", \"llvm::FunctionLoweringInfo::FunctionLoweringInfo(llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm20FunctionLoweringInfoC2ERKNS_14TargetLoweringE\", \"llvm::FunctionLoweringInfo::FunctionLoweringInfo(llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo3setERKNS_8FunctionERNS_15MachineFunctionE\", \"llvm::FunctionLoweringInfo::set(llvm::Function const&, llvm::MachineFunction&)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo5clearEv\", \"llvm::FunctionLoweringInfo::clear()\"},\n    {\"_ZN4llvm20FunctionLoweringInfo9CreateRegENS_3EVTE\", \"llvm::FunctionLoweringInfo::CreateReg(llvm::EVT)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo10CreateRegsEPKNS_4TypeE\", \"llvm::FunctionLoweringInfo::CreateRegs(llvm::Type const*)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo26setByValArgumentFrameIndexEPKNS_8ArgumentEi\", \"llvm::FunctionLoweringInfo::setByValArgumentFrameIndex(llvm::Argument const*, int)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo26getByValArgumentFrameIndexEPKNS_8ArgumentE\", \"llvm::FunctionLoweringInfo::getByValArgumentFrameIndex(llvm::Argument const*)\"},\n    {\"_ZN4llvm12AddCatchInfoERKNS_8CallInstEPNS_17MachineModuleInfoEPNS_17MachineBasicBlockE\", \"llvm::AddCatchInfo(llvm::CallInst const&, llvm::MachineModuleInfo*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm13CopyCatchInfoEPKNS_10BasicBlockES2_PNS_17MachineModuleInfoERNS_20FunctionLoweringInfoE\", \"llvm::CopyCatchInfo(llvm::BasicBlock const*, llvm::BasicBlock const*, llvm::MachineModuleInfo*, llvm::FunctionLoweringInfo&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ArgumentEiNS_12DenseMapInfoIS3_EENS4_IiEEE16InsertIntoBucketERKS3_RKiPSt4pairIS3_iE\", \"llvm::DenseMap<llvm::Argument const*, int, llvm::DenseMapInfo<llvm::Argument const*>, llvm::DenseMapInfo<int> >::InsertIntoBucket(llvm::Argument const* const&, int const&, std::pair<llvm::Argument const*, int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ArgumentEiNS_12DenseMapInfoIS3_EENS4_IiEEE4growEj\", \"llvm::DenseMap<llvm::Argument const*, int, llvm::DenseMapInfo<llvm::Argument const*>, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ArgumentEiNS_12DenseMapInfoIS3_EENS4_IiEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Argument const*, int, llvm::DenseMapInfo<llvm::Argument const*>, llvm::DenseMapInfo<int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10AllocaInstEiNS_12DenseMapInfoIS3_EENS4_IiEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::AllocaInst const*, int, llvm::DenseMapInfo<llvm::AllocaInst const*>, llvm::DenseMapInfo<int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEPNS_17MachineBasicBlockENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock const*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm12InstrEmitter12CountResultsEPNS_6SDNodeE\", \"llvm::InstrEmitter::CountResults(llvm::SDNode*)\"},\n    {\"_ZN4llvm12InstrEmitter13CountOperandsEPNS_6SDNodeE\", \"llvm::InstrEmitter::CountOperands(llvm::SDNode*)\"},\n    {\"_ZN4llvm12InstrEmitter15EmitCopyFromRegEPNS_6SDNodeEjbbjRNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEE\", \"llvm::InstrEmitter::EmitCopyFromReg(llvm::SDNode*, unsigned int, bool, bool, unsigned int, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZNK4llvm12InstrEmitter24getDstOfOnlyCopyToRegUseEPNS_6SDNodeEj\", \"llvm::InstrEmitter::getDstOfOnlyCopyToRegUse(llvm::SDNode*, unsigned int) const\"},\n    {\"_ZN4llvm12InstrEmitter22CreateVirtualRegistersEPNS_6SDNodeEPNS_12MachineInstrERKNS_15TargetInstrDescEbbRNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS9_EENSA_IjEEEE\", \"llvm::InstrEmitter::CreateVirtualRegisters(llvm::SDNode*, llvm::MachineInstr*, llvm::TargetInstrDesc const&, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitter5getVRENS_7SDValueERNS_8DenseMapIS1_jNS_12DenseMapInfoIS1_EENS3_IjEEEE\", \"llvm::InstrEmitter::getVR(llvm::SDValue, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitter18AddRegisterOperandEPNS_12MachineInstrENS_7SDValueEjPKNS_15TargetInstrDescERNS_8DenseMapIS3_jNS_12DenseMapInfoIS3_EENS8_IjEEEEbbb\", \"llvm::InstrEmitter::AddRegisterOperand(llvm::MachineInstr*, llvm::SDValue, unsigned int, llvm::TargetInstrDesc const*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, bool, bool, bool)\"},\n    {\"_ZN4llvm12InstrEmitter10AddOperandEPNS_12MachineInstrENS_7SDValueEjPKNS_15TargetInstrDescERNS_8DenseMapIS3_jNS_12DenseMapInfoIS3_EENS8_IjEEEEbbb\", \"llvm::InstrEmitter::AddOperand(llvm::MachineInstr*, llvm::SDValue, unsigned int, llvm::TargetInstrDesc const*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, bool, bool, bool)\"},\n    {\"_ZN4llvm12InstrEmitter14EmitSubregNodeEPNS_6SDNodeERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEEbb\", \"llvm::InstrEmitter::EmitSubregNode(llvm::SDNode*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, bool, bool)\"},\n    {\"_ZN4llvm12InstrEmitter22EmitCopyToRegClassNodeEPNS_6SDNodeERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEE\", \"llvm::InstrEmitter::EmitCopyToRegClassNode(llvm::SDNode*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitter15EmitRegSequenceEPNS_6SDNodeERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEEbb\", \"llvm::InstrEmitter::EmitRegSequence(llvm::SDNode*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, bool, bool)\"},\n    {\"_ZN4llvm12InstrEmitter12EmitDbgValueEPNS_10SDDbgValueERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEE\", \"llvm::InstrEmitter::EmitDbgValue(llvm::SDDbgValue*, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitter15EmitMachineNodeEPNS_6SDNodeEbbRNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEE\", \"llvm::InstrEmitter::EmitMachineNode(llvm::SDNode*, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitter15EmitSpecialNodeEPNS_6SDNodeEbbRNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS4_EENS5_IjEEEE\", \"llvm::InstrEmitter::EmitSpecialNode(llvm::SDNode*, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm12InstrEmitterC1EPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::InstrEmitter::InstrEmitter(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm12InstrEmitterC2EPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::InstrEmitter::InstrEmitter(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS1_EENS2_IjEEE6insertERKSt4pairIS1_jE\", \"llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<llvm::SDValue, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS1_EENS2_IjEEE4findERKS1_\", \"llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >::find(llvm::SDValue const&)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS1_EENS2_IjEEE16InsertIntoBucketERKS1_RKjPSt4pairIS1_jE\", \"llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::SDValue const&, unsigned int const&, std::pair<llvm::SDValue, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS1_EENS2_IjEEE4growEj\", \"llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG8LegalizeENS_10CodeGenOpt5LevelE\", \"llvm::SelectionDAG::Legalize(llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize10LegalizeOpEN4llvm7SDValueE\", \"(anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize10ExpandNodeEPN4llvm6SDNodeERNS1_15SmallVectorImplINS1_7SDValueEEE\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandNode(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&)\"},\n    {\"_Z24FindCallEndFromCallStartPN4llvm6SDNodeEi\", \"FindCallEndFromCallStart(llvm::SDNode*, int)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize28LegalizeAllNodesNotLeadingToEPN4llvm6SDNodeES3_RNS1_11SmallPtrSetIS3_Lj32EEE\", \"(anonymous namespace)::SelectionDAGLegalize::LegalizeAllNodesNotLeadingTo(llvm::SDNode*, llvm::SDNode*, llvm::SmallPtrSet<llvm::SDNode*, 32u>&)\"},\n    {\"_Z19ExpandUnalignedLoadPN4llvm10LoadSDNodeERNS_12SelectionDAGERKNS_14TargetLoweringE\", \"ExpandUnalignedLoad(llvm::LoadSDNode*, llvm::SelectionDAG&, llvm::TargetLowering const&)\"},\n    {\"_Z20ExpandUnalignedStorePN4llvm11StoreSDNodeERNS_12SelectionDAGERKNS_14TargetLoweringE\", \"ExpandUnalignedStore(llvm::StoreSDNode*, llvm::SelectionDAG&, llvm::TargetLowering const&)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize29ExpandVectorBuildThroughStackEPN4llvm6SDNodeE\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandVectorBuildThroughStack(llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize16EmitStackConvertEN4llvm7SDValueENS1_3EVTES3_NS1_8DebugLocE\", \"(anonymous namespace)::SelectionDAGLegalize::EmitStackConvert(llvm::SDValue, llvm::EVT, llvm::EVT, llvm::DebugLoc)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize35ExpandExtractFromVectorThroughStackEN4llvm7SDValueE\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(llvm::SDValue)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize13ExpandLibCallEN4llvm5RTLIB7LibcallEPNS1_6SDNodeEb\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandLibCall(llvm::RTLIB::Libcall, llvm::SDNode*, bool)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize21LegalizeSetCCCondCodeEN4llvm3EVTERNS1_7SDValueES4_S4_NS1_8DebugLocE\", \"(anonymous namespace)::SelectionDAGLegalize::LegalizeSetCCCondCode(llvm::EVT, llvm::SDValue&, llvm::SDValue&, llvm::SDValue&, llvm::DebugLoc)\"},\n    {\"_ZN12_GLOBAL__N_120SelectionDAGLegalize18ExpandChainLibCallEN4llvm5RTLIB7LibcallEPNS1_6SDNodeEb\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandChainLibCall(llvm::RTLIB::Libcall, llvm::SDNode*, bool)\"},\n    {\"_Z9SplatBytejh\", \"SplatByte(unsigned int, unsigned char)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::shrink_and_clear()\"},\n    {\"_ZNK4llvm14TargetLowering18getTypeToPromoteToEjNS_3EVTE\", \"llvm::TargetLowering::getTypeToPromoteTo(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm3EVT21getHalfSizedIntegerVTERNS_11LLVMContextE\", \"llvm::EVT::getHalfSizedIntegerVT(llvm::LLVMContext&) const\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E6insertERKSt4pairIS1_S1_E\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::insert(std::pair<llvm::SDValue, llvm::SDValue> const&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17SoftenFloatResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::SoftenFloatResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22SoftenFloatRes_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25SoftenFloatRes_BUILD_PAIREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_BUILD_PAIR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25SoftenFloatRes_ConstantFPEPNS_16ConstantFPSDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_ConstantFP(llvm::ConstantFPSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer33SoftenFloatRes_EXTRACT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_EXTRACT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FABSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FABS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FADDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FADD(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FCEILEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FCEIL(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SoftenFloatRes_FCOPYSIGNEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FCOPYSIGN(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FCOSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FCOS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FDIVEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FDIV(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FEXPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FEXP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FEXP2EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FEXP2(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SoftenFloatRes_FFLOOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FFLOOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FLOGEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FLOG(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FLOG2EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FLOG2(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SoftenFloatRes_FLOG10EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FLOG10(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FMULEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FMUL(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25SoftenFloatRes_FNEARBYINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FNEARBYINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FNEGEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FNEG(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SoftenFloatRes_FP_EXTENDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23SoftenFloatRes_FP_ROUNDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer27SoftenFloatRes_FP16_TO_FP32EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FP16_TO_FP32(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FPOWEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FPOW(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FPOWIEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FPOWI(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FREMEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FREM(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FRINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FRINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FSINEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FSIN(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_FSQRTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FSQRT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_FSUBEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FSUB(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SoftenFloatRes_FTRUNCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_FTRUNC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatRes_LOADEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_LOAD(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SoftenFloatRes_SELECTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_SELECT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SoftenFloatRes_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25SoftenFloatRes_XINT_TO_FPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_XINT_TO_FP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_UNDEFEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_UNDEF(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20SoftenFloatRes_VAARGEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatRes_VAARG(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SoftenFloatOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::SoftenFloatOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SoftenFloatOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatOp_BR_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_BR_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22SoftenFloatOp_FP_ROUNDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_FP_ROUND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SoftenFloatOp_FP_TO_SINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_FP_TO_SINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SoftenFloatOp_FP_TO_UINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_FP_TO_UINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26SoftenFloatOp_FP32_TO_FP16EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_FP32_TO_FP16(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23SoftenFloatOp_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatOp_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenFloatOp_STOREEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::SoftenFloatOp_STORE(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SoftenSetCCOperandsERNS_7SDValueES2_RNS_3ISD8CondCodeENS_8DebugLocE\", \"llvm::DAGTypeLegalizer::SoftenSetCCOperands(llvm::SDValue&, llvm::SDValue&, llvm::ISD::CondCode&, llvm::DebugLoc)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandFloatResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandFloatResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ExpandFloatRes_ConstantFPEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_ConstantFP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FABSEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FABS(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FADDEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FADD(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FCEILEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FCEIL(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandFloatRes_FCOPYSIGNEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FCOPYSIGN(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FCOSEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FCOS(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FDIVEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FDIV(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FEXPEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FEXP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FEXP2EPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FEXP2(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandFloatRes_FFLOOREPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FFLOOR(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FLOGEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FLOG(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FLOG2EPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FLOG2(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandFloatRes_FLOG10EPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FLOG10(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FMULEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FMUL(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ExpandFloatRes_FNEARBYINTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FNEARBYINT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FNEGEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FNEG(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandFloatRes_FP_EXTENDEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FP_EXTEND(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FPOWEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FPOW(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FPOWIEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FPOWI(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FRINTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FRINT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FSINEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FSIN(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandFloatRes_FSQRTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FSQRT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_FSUBEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FSUB(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandFloatRes_FTRUNCEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_FTRUNC(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatRes_LOADEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_LOAD(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ExpandFloatRes_XINT_TO_FPEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18ExpandFloatOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandFloatOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatOp_BR_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_BR_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ExpandFloatOp_FP_ROUNDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_FP_ROUND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandFloatOp_FP_TO_SINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_FP_TO_SINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandFloatOp_FP_TO_UINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandFloatOp_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatOp_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandFloatOp_STOREEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_STORE(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24FloatExpandSetCCOperandsERNS_7SDValueES2_RNS_3ISD8CondCodeENS_8DebugLocE\", \"llvm::DAGTypeLegalizer::FloatExpandSetCCOperands(llvm::SDValue&, llvm::SDValue&, llvm::ISD::CondCode&, llvm::DebugLoc)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20PromoteIntegerResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntegerResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntRes_AssertSextEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_AssertSext(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntRes_AssertZextEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_AssertZext(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21PromoteIntRes_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_BSWAPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_BSWAP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntRes_BUILD_PAIREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_BUILD_PAIR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntRes_ConstantEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_Constant(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28PromoteIntRes_CONVERT_RNDSATEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_CONVERT_RNDSAT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntRes_CTLZEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_CTLZ(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_CTPOPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_CTPOP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntRes_CTTZEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_CTTZ(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer32PromoteIntRes_EXTRACT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_EXTRACT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntRes_LOADEPNS_10LoadSDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_LOAD(llvm::LoadSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20PromoteIntRes_SELECTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SELECT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntRes_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17PromoteIntRes_SHLEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SHL(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer31PromoteIntRes_SIGN_EXTEND_INREGEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SIGN_EXTEND_INREG(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17PromoteIntRes_SRAEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SRA(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17PromoteIntRes_SRLEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SRL(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntRes_TRUNCATEEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_TRUNCATE(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_UNDEFEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_UNDEF(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_VAARGEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_VAARG(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntRes_INT_EXTENDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_INT_EXTEND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntRes_FP_TO_XINTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_FP_TO_XINT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26PromoteIntRes_FP32_TO_FP16EPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_FP32_TO_FP16(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28PromoteIntRes_SimpleIntBinOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SimpleIntBinOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntRes_SDIVEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SDIV(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntRes_UDIVEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_UDIV(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntRes_SADDSUBOEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntRes_SADDSUBO(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntRes_UADDSUBOEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntRes_UADDSUBO(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntRes_XMULOEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntRes_XMULO(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21PromoteIntRes_Atomic1EPNS_12AtomicSDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_Atomic1(llvm::AtomicSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21PromoteIntRes_Atomic2EPNS_12AtomicSDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_Atomic2(llvm::AtomicSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntRes_OverflowEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntRes_Overflow(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21PromoteIntegerOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntegerOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntOp_ANY_EXTENDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_ANY_EXTEND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20PromoteIntOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntOp_BR_CCEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_BR_CC(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntOp_BRCONDEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_BRCOND(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntOp_BUILD_PAIREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_BUILD_PAIR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25PromoteIntOp_BUILD_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_BUILD_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer27PromoteIntOp_CONVERT_RNDSATEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_CONVERT_RNDSAT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer30PromoteIntOp_INSERT_VECTOR_ELTEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_INSERT_VECTOR_ELT(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntOp_MEMBARRIEREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_MEMBARRIER(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29PromoteIntOp_SCALAR_TO_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SCALAR_TO_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19PromoteIntOp_SELECTEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SELECT(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PromoteIntOp_SELECT_CCEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SELECT_CC(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntOp_SETCCEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SETCC(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntOp_SIGN_EXTENDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SIGN_EXTEND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntOp_SINT_TO_FPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_SINT_TO_FP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntOp_STOREEPNS_11StoreSDNodeEj\", \"llvm::DAGTypeLegalizer::PromoteIntOp_STORE(llvm::StoreSDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21PromoteIntOp_TRUNCATEEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_TRUNCATE(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23PromoteIntOp_UINT_TO_FPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_UINT_TO_FP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24PromoteIntOp_ZERO_EXTENDEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_ZERO_EXTEND(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18PromoteIntOp_ShiftEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::PromoteIntOp_Shift(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20PromoteSetCCOperandsERNS_7SDValueES2_NS_3ISD8CondCodeE\", \"llvm::DAGTypeLegalizer::PromoteSetCCOperands(llvm::SDValue&, llvm::SDValue&, llvm::ISD::CondCode)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandIntegerResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandIntegerResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandIntRes_ANY_EXTENDEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_ANY_EXTEND(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandIntRes_AssertSextEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_AssertSext(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandIntRes_AssertZextEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_AssertZext(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18ExpandIntRes_BSWAPEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_BSWAP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandIntRes_ConstantEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_Constant(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_CTLZEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_CTLZ(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18ExpandIntRes_CTPOPEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_CTPOP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_CTTZEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_CTTZ(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandIntRes_FP_TO_SINTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_FP_TO_SINT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ExpandIntRes_FP_TO_UINTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_FP_TO_UINT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_LOADEPNS_10LoadSDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_LOAD(llvm::LoadSDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16ExpandIntRes_MULEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_MUL(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_SDIVEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_SDIV(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandIntRes_SIGN_EXTENDEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_SIGN_EXTEND(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer30ExpandIntRes_SIGN_EXTEND_INREGEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_SIGN_EXTEND_INREG(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_SREMEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_SREM(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandIntRes_TRUNCATEEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_TRUNCATE(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_UDIVEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_UDIV(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntRes_UREMEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_UREM(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandIntRes_ZERO_EXTENDEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_ZERO_EXTEND(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer12ExpandAtomicEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandAtomic(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandIntRes_LogicalEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_Logical(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19ExpandIntRes_ADDSUBEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_ADDSUB(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandIntRes_ADDSUBCEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_ADDSUBC(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandIntRes_ADDSUBEEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_ADDSUBE(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18ExpandIntRes_ShiftEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_Shift(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandIntRes_SADDSUBOEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_SADDSUBO(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandIntRes_UADDSUBOEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_UADDSUBO(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ExpandIntRes_UMULSMULOEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandIntRes_UMULSMULO(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandShiftByConstantEPNS_6SDNodeEjRNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandShiftByConstant(llvm::SDNode*, unsigned int, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29ExpandShiftWithKnownAmountBitEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandShiftWithKnownAmountBit(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer31ExpandShiftWithUnknownAmountBitEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandShiftWithUnknownAmountBit(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandIntegerOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandIntegerOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntOp_BR_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_BR_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandIntOp_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntOp_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ExpandIntOp_SINT_TO_FPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_SINT_TO_FP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntOp_STOREEPNS_11StoreSDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandIntOp_STORE(llvm::StoreSDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandIntOp_TRUNCATEEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_TRUNCATE(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ExpandIntOp_UINT_TO_FPEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_UINT_TO_FP(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandIntOp_ShiftEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_Shift(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ExpandIntOp_RETURNADDREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandIntOp_RETURNADDR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26IntegerExpandSetCCOperandsERNS_7SDValueES2_RNS_3ISD8CondCodeENS_8DebugLocE\", \"llvm::DAGTypeLegalizer::IntegerExpandSetCCOperands(llvm::SDValue&, llvm::SDValue&, llvm::ISD::CondCode&, llvm::DebugLoc)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22PerformExpensiveChecksEv\", \"llvm::DAGTypeLegalizer::PerformExpensiveChecks()\"},\n    {\"_ZN4llvm16DAGTypeLegalizer3runEv\", \"llvm::DAGTypeLegalizer::run()\"},\n    {\"_ZN4llvm16DAGTypeLegalizer14AnalyzeNewNodeEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::AnalyzeNewNode(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16ReplaceValueWithENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::ReplaceValueWith(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer11ExpungeNodeEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpungeNode(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15AnalyzeNewValueERNS_7SDValueE\", \"llvm::DAGTypeLegalizer::AnalyzeNewValue(llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer10RemapValueERNS_7SDValueE\", \"llvm::DAGTypeLegalizer::RemapValue(llvm::SDValue&)\"},\n    {\"_ZN12_GLOBAL__N_118NodeUpdateListenerD1Ev\", \"(anonymous namespace)::NodeUpdateListener::~NodeUpdateListener()\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SetPromotedIntegerENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::SetPromotedInteger(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16SetSoftenedFloatENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::SetSoftenedFloat(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SetScalarizedVectorENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::SetScalarizedVector(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18GetExpandedIntegerENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetExpandedInteger(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SetExpandedIntegerENS_7SDValueES1_S1_\", \"llvm::DAGTypeLegalizer::SetExpandedInteger(llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16GetExpandedFloatENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetExpandedFloat(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16SetExpandedFloatENS_7SDValueES1_S1_\", \"llvm::DAGTypeLegalizer::SetExpandedFloat(llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer14GetSplitVectorENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetSplitVector(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer14SetSplitVectorENS_7SDValueES1_S1_\", \"llvm::DAGTypeLegalizer::SetSplitVector(llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16SetWidenedVectorENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::SetWidenedVector(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19BitConvertToIntegerENS_7SDValueE\", \"llvm::DAGTypeLegalizer::BitConvertToInteger(llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer31BitConvertVectorToIntegerVectorENS_7SDValueE\", \"llvm::DAGTypeLegalizer::BitConvertVectorToIntegerVector(llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20CreateStackStoreLoadENS_7SDValueENS_3EVTE\", \"llvm::DAGTypeLegalizer::CreateStackStoreLoad(llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15CustomLowerNodeEPNS_6SDNodeENS_3EVTEb\", \"llvm::DAGTypeLegalizer::CustomLowerNode(llvm::SDNode*, llvm::EVT, bool)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20CustomWidenLowerNodeEPNS_6SDNodeENS_3EVTE\", \"llvm::DAGTypeLegalizer::CustomWidenLowerNode(llvm::SDNode*, llvm::EVT)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15GetSplitDestVTsENS_3EVTERS1_S2_\", \"llvm::DAGTypeLegalizer::GetSplitDestVTs(llvm::EVT, llvm::EVT&, llvm::EVT&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15GetPairElementsENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetPairElements(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23GetVectorElementPointerENS_7SDValueENS_3EVTES1_\", \"llvm::DAGTypeLegalizer::GetVectorElementPointer(llvm::SDValue, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer12JoinIntegersENS_7SDValueES1_\", \"llvm::DAGTypeLegalizer::JoinIntegers(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer10LibCallifyENS_5RTLIB7LibcallEPNS_6SDNodeEb\", \"llvm::DAGTypeLegalizer::LibCallify(llvm::RTLIB::Libcall, llvm::SDNode*, bool)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer11MakeLibCallENS_5RTLIB7LibcallENS_3EVTEPKNS_7SDValueEjbNS_8DebugLocE\", \"llvm::DAGTypeLegalizer::MakeLibCall(llvm::RTLIB::Libcall, llvm::EVT, llvm::SDValue const*, unsigned int, bool, llvm::DebugLoc)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18ExpandChainLibCallENS_5RTLIB7LibcallEPNS_6SDNodeEb\", \"llvm::DAGTypeLegalizer::ExpandChainLibCall(llvm::RTLIB::Libcall, llvm::SDNode*, bool)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20PromoteTargetBooleanENS_7SDValueENS_3EVTE\", \"llvm::DAGTypeLegalizer::PromoteTargetBoolean(llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer12SplitIntegerENS_7SDValueENS_3EVTES2_RS1_S3_\", \"llvm::DAGTypeLegalizer::SplitInteger(llvm::SDValue, llvm::EVT, llvm::EVT, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer12SplitIntegerENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::SplitInteger(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm12SelectionDAG13LegalizeTypesEv\", \"llvm::SelectionDAG::LegalizeTypes()\"},\n    {\"_ZN12_GLOBAL__N_118NodeUpdateListenerD0Ev\", \"(anonymous namespace)::NodeUpdateListener::~NodeUpdateListener()\"},\n    {\"_ZN12_GLOBAL__N_118NodeUpdateListener11NodeDeletedEPN4llvm6SDNodeES3_\", \"(anonymous namespace)::NodeUpdateListener::NodeDeleted(llvm::SDNode*, llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_118NodeUpdateListener11NodeUpdatedEPN4llvm6SDNodeE\", \"(anonymous namespace)::NodeUpdateListener::NodeUpdated(llvm::SDNode*)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E4findERKS1_\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::find(llvm::SDValue const&)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueESt4pairIS1_S1_ENS_12DenseMapInfoIS1_EENS4_IS3_EEE4findERKS1_\", \"llvm::DenseMap<llvm::SDValue, std::pair<llvm::SDValue, llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<std::pair<llvm::SDValue, llvm::SDValue> > >::find(llvm::SDValue const&)\"},\n    {\"_ZNK4llvm16DAGTypeLegalizer13getTypeActionENS_3EVTE\", \"llvm::DAGTypeLegalizer::getTypeAction(llvm::EVT) const\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueESt4pairIS1_S1_ENS_12DenseMapInfoIS1_EENS4_IS3_EEE16FindAndConstructERKS1_\", \"llvm::DenseMap<llvm::SDValue, std::pair<llvm::SDValue, llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<std::pair<llvm::SDValue, llvm::SDValue> > >::FindAndConstruct(llvm::SDValue const&)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueESt4pairIS1_S1_ENS_12DenseMapInfoIS1_EENS4_IS3_EEE16InsertIntoBucketERKS1_RKS3_PS2_IS1_S3_E\", \"llvm::DenseMap<llvm::SDValue, std::pair<llvm::SDValue, llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<std::pair<llvm::SDValue, llvm::SDValue> > >::InsertIntoBucket(llvm::SDValue const&, std::pair<llvm::SDValue, llvm::SDValue> const&, std::pair<llvm::SDValue, std::pair<llvm::SDValue, llvm::SDValue> >*)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueESt4pairIS1_S1_ENS_12DenseMapInfoIS1_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<llvm::SDValue, std::pair<llvm::SDValue, llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<std::pair<llvm::SDValue, llvm::SDValue> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E16FindAndConstructERKS1_\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::FindAndConstruct(llvm::SDValue const&)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E16InsertIntoBucketERKS1_S6_PSt4pairIS1_S1_E\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::InsertIntoBucket(llvm::SDValue const&, llvm::SDValue const&, std::pair<llvm::SDValue, llvm::SDValue>*)\"},\n    {\"_ZN4llvm8DenseMapINS_7SDValueES1_NS_12DenseMapInfoIS1_EES3_E4growEj\", \"llvm::DenseMap<llvm::SDValue, llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<llvm::SDValue> >::grow(unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizerD2Ev\", \"llvm::DAGTypeLegalizer::~DAGTypeLegalizer()\"},\n    {\"_ZN4llvm16DAGTypeLegalizerC2ERNS_12SelectionDAGE\", \"llvm::DAGTypeLegalizer::DAGTypeLegalizer(llvm::SelectionDAG&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17ExpandRes_BITCASTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_BITCAST(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandRes_BUILD_PAIREPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_BUILD_PAIR(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ExpandRes_EXTRACT_ELEMENTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_EXTRACT_ELEMENT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28ExpandRes_EXTRACT_VECTOR_ELTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_EXTRACT_VECTOR_ELT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandRes_NormalLoadEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_NormalLoad(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15ExpandRes_VAARGEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::ExpandRes_VAARG(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16ExpandOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ExpandOp_BUILD_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandOp_BUILD_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24ExpandOp_EXTRACT_ELEMENTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandOp_EXTRACT_ELEMENT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26ExpandOp_INSERT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandOp_INSERT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ExpandOp_SCALAR_TO_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ExpandOp_SCALAR_TO_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ExpandOp_NormalStoreEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ExpandOp_NormalStore(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21SplitRes_MERGE_VALUESEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitRes_MERGE_VALUES(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer15SplitRes_SELECTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitRes_SELECT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SplitRes_SELECT_CCEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitRes_SELECT_CC(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer14SplitRes_UNDEFEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitRes_UNDEF(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZNSt6vectorIN4llvm7SDValueESaIS1_EE7reserveEm\", \"std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer10GetSplitOpENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetSplitOp(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm12SelectionDAG15LegalizeVectorsEv\", \"llvm::SelectionDAG::LegalizeVectors()\"},\n    {\"_ZN12_GLOBAL__N_115VectorLegalizer10LegalizeOpEN4llvm7SDValueE\", \"(anonymous namespace)::VectorLegalizer::LegalizeOp(llvm::SDValue)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ScalarizeVectorResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ScalarizeVectorResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ScalarizeVecRes_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer30ScalarizeVecRes_CONVERT_RNDSATEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_CONVERT_RNDSAT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer33ScalarizeVecRes_EXTRACT_SUBVECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_EXTRACT_SUBVECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ScalarizeVecRes_InregOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_InregOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ScalarizeVecRes_FPOWIEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_FPOWI(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer33ScalarizeVecRes_INSERT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_INSERT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ScalarizeVecRes_LOADEPNS_10LoadSDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_LOAD(llvm::LoadSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer32ScalarizeVecRes_SCALAR_TO_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_SCALAR_TO_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ScalarizeVecRes_SELECTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_SELECT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25ScalarizeVecRes_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ScalarizeVecRes_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ScalarizeVecRes_UNDEFEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_UNDEF(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer30ScalarizeVecRes_VECTOR_SHUFFLEEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_VECTOR_SHUFFLE(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ScalarizeVecRes_VSETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_VSETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer23ScalarizeVecRes_UnaryOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_UnaryOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21ScalarizeVecRes_BinOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecRes_BinOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ScalarizeVectorOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::ScalarizeVectorOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22ScalarizeVecOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29ScalarizeVecOp_CONCAT_VECTORSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecOp_CONCAT_VECTORS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer33ScalarizeVecOp_EXTRACT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::ScalarizeVecOp_EXTRACT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20ScalarizeVecOp_STOREEPNS_11StoreSDNodeEj\", \"llvm::DAGTypeLegalizer::ScalarizeVecOp_STORE(llvm::StoreSDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17SplitVectorResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::SplitVectorResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SplitVecRes_BITCASTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_BITCAST(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24SplitVecRes_BUILD_VECTOREPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_BUILD_VECTOR(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26SplitVecRes_CONCAT_VECTORSEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_CONCAT_VECTORS(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26SplitVecRes_CONVERT_RNDSATEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_CONVERT_RNDSAT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29SplitVecRes_EXTRACT_SUBVECTOREPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_EXTRACT_SUBVECTOR(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SplitVecRes_InregOpEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_InregOp(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17SplitVecRes_FPOWIEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_FPOWI(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29SplitVecRes_INSERT_VECTOR_ELTEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28SplitVecRes_SCALAR_TO_VECTOREPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_SCALAR_TO_VECTOR(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16SplitVecRes_LOADEPNS_10LoadSDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_LOAD(llvm::LoadSDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17SplitVecRes_SETCCEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_SETCC(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26SplitVecRes_VECTOR_SHUFFLEEPNS_19ShuffleVectorSDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_VECTOR_SHUFFLE(llvm::ShuffleVectorSDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19SplitVecRes_UnaryOpEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_UnaryOp(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17SplitVecRes_BinOpEPNS_6SDNodeERNS_7SDValueES4_\", \"llvm::DAGTypeLegalizer::SplitVecRes_BinOp(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SplitVectorOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::SplitVectorOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SplitVecOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SplitVecOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28SplitVecOp_EXTRACT_SUBVECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SplitVecOp_EXTRACT_SUBVECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29SplitVecOp_EXTRACT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25SplitVecOp_CONCAT_VECTORSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SplitVecOp_CONCAT_VECTORS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16SplitVecOp_STOREEPNS_11StoreSDNodeEj\", \"llvm::DAGTypeLegalizer::SplitVecOp_STORE(llvm::StoreSDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18SplitVecOp_UnaryOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::SplitVecOp_UnaryOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17WidenVectorResultEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::WidenVectorResult(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19WidenVecRes_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer24WidenVecRes_BUILD_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_BUILD_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26WidenVecRes_CONCAT_VECTORSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26WidenVecRes_CONVERT_RNDSATEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_CONVERT_RNDSAT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29WidenVecRes_EXTRACT_SUBVECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19WidenVecRes_InregOpEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_InregOp(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29WidenVecRes_INSERT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_INSERT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16WidenVecRes_LOADEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_LOAD(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28WidenVecRes_SCALAR_TO_VECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_SCALAR_TO_VECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVecRes_SELECTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_SELECT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer21WidenVecRes_SELECT_CCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_SELECT_CC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17WidenVecRes_SETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_SETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17WidenVecRes_UNDEFEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_UNDEF(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer26WidenVecRes_VECTOR_SHUFFLEEPNS_19ShuffleVectorSDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_VECTOR_SHUFFLE(llvm::ShuffleVectorSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVecRes_VSETCCEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_VSETCC(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVecRes_BinaryEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_Binary(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16WidenVecRes_POWIEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_POWI(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17WidenVecRes_ShiftEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_Shift(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19WidenVecRes_ConvertEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_Convert(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer17WidenVecRes_UnaryEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecRes_Unary(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer12ModifyToTypeENS_7SDValueENS_3EVTE\", \"llvm::DAGTypeLegalizer::ModifyToType(llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer22GenWidenVectorExtLoadsERNS_11SmallVectorINS_7SDValueELj16EEEPNS_10LoadSDNodeENS_3ISD11LoadExtTypeE\", \"llvm::DAGTypeLegalizer::GenWidenVectorExtLoads(llvm::SmallVector<llvm::SDValue, 16u>&, llvm::LoadSDNode*, llvm::ISD::LoadExtType)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer19GenWidenVectorLoadsERNS_11SmallVectorINS_7SDValueELj16EEEPNS_10LoadSDNodeE\", \"llvm::DAGTypeLegalizer::GenWidenVectorLoads(llvm::SmallVector<llvm::SDValue, 16u>&, llvm::LoadSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVectorOperandEPNS_6SDNodeEj\", \"llvm::DAGTypeLegalizer::WidenVectorOperand(llvm::SDNode*, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVecOp_BITCASTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_BITCAST(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25WidenVecOp_CONCAT_VECTORSEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_CONCAT_VECTORS(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer28WidenVecOp_EXTRACT_SUBVECTOREPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_EXTRACT_SUBVECTOR(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer29WidenVecOp_EXTRACT_VECTOR_ELTEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_EXTRACT_VECTOR_ELT(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer16WidenVecOp_STOREEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_STORE(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer18WidenVecOp_ConvertEPNS_6SDNodeE\", \"llvm::DAGTypeLegalizer::WidenVecOp_Convert(llvm::SDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer25GenWidenVectorTruncStoresERNS_11SmallVectorINS_7SDValueELj16EEEPNS_11StoreSDNodeE\", \"llvm::DAGTypeLegalizer::GenWidenVectorTruncStores(llvm::SmallVector<llvm::SDValue, 16u>&, llvm::StoreSDNode*)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer20GenWidenVectorStoresERNS_11SmallVectorINS_7SDValueELj16EEEPNS_11StoreSDNodeE\", \"llvm::DAGTypeLegalizer::GenWidenVectorStores(llvm::SmallVector<llvm::SDValue, 16u>&, llvm::StoreSDNode*)\"},\n    {\"_Z11FindMemTypeRN4llvm12SelectionDAGERKNS_14TargetLoweringEjNS_3EVTEjj\", \"FindMemType(llvm::SelectionDAG&, llvm::TargetLowering const&, unsigned int, llvm::EVT, unsigned int, unsigned int)\"},\n    {\"_Z21BuildVectorFromScalarRN4llvm12SelectionDAGENS_3EVTERNS_11SmallVectorINS_7SDValueELj16EEEjj\", \"BuildVectorFromScalar(llvm::SelectionDAG&, llvm::EVT, llvm::SmallVector<llvm::SDValue, 16u>&, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm16DAGTypeLegalizer13GetExpandedOpENS_7SDValueERS1_S2_\", \"llvm::DAGTypeLegalizer::GetExpandedOp(llvm::SDValue, llvm::SDValue&, llvm::SDValue&)\"},\n    {\"_ZNK4llvm3EVT6bitsEqES0_\", \"llvm::EVT::bitsEq(llvm::EVT) const\"},\n    {\"_ZN4llvm24createTDListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createTDListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_115ScheduleDAGListD1Ev\", \"(anonymous namespace)::ScheduleDAGList::~ScheduleDAGList()\"},\n    {\"_ZN12_GLOBAL__N_115ScheduleDAGListD0Ev\", \"(anonymous namespace)::ScheduleDAGList::~ScheduleDAGList()\"},\n    {\"_ZN12_GLOBAL__N_115ScheduleDAGList8ScheduleEv\", \"(anonymous namespace)::ScheduleDAGList::Schedule()\"},\n    {\"_ZN12_GLOBAL__N_115ScheduleDAGList17ReleaseSuccessorsEPN4llvm5SUnitE\", \"(anonymous namespace)::ScheduleDAGList::ReleaseSuccessors(llvm::SUnit*)\"},\n    {\"_ZN4llvm26createBURRListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createBURRListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm26createTDRRListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createTDRRListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm28createSourceListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createSourceListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm28createHybridListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createHybridListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm25createILPListDAGSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createILPListDAGScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRListC1ERN4llvm15MachineFunctionEbPNS1_23SchedulingPriorityQueueENS1_10CodeGenOpt5LevelE\", \"(anonymous namespace)::ScheduleDAGRRList::ScheduleDAGRRList(llvm::MachineFunction&, bool, llvm::SchedulingPriorityQueue*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBaseC2ERN4llvm15MachineFunctionEbbPKNS1_15TargetInstrInfoEPKNS1_18TargetRegisterInfoEPKNS1_14TargetLoweringE\", \"(anonymous namespace)::RegReductionPQBase::RegReductionPQBase(llvm::MachineFunction&, bool, bool, llvm::TargetInstrInfo const*, llvm::TargetRegisterInfo const*, llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEED1Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEED0Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEE10isBottomUpEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::isBottomUp() const\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase9initNodesERSt6vectorIN4llvm5SUnitESaIS3_EE\", \"(anonymous namespace)::RegReductionPQBase::initNodes(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >&)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase7addNodeEPKN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::addNode(llvm::SUnit const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase10updateNodeEPKN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::updateNode(llvm::SUnit const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase12releaseStateEv\", \"(anonymous namespace)::RegReductionPQBase::releaseState()\"},\n    {\"_ZNK12_GLOBAL__N_118RegReductionPQBase5emptyEv\", \"(anonymous namespace)::RegReductionPQBase::empty() const\"},\n    {\"_ZNK12_GLOBAL__N_118RegReductionPQBase17tracksRegPressureEv\", \"(anonymous namespace)::RegReductionPQBase::tracksRegPressure() const\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEE7isReadyEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::isReady(llvm::SUnit*) const\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase4pushEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::push(llvm::SUnit*)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEE3popEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::pop()\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase6removeEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::remove(llvm::SUnit*)\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEE4dumpEPN4llvm11ScheduleDAGE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase13ScheduledNodeEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::ScheduledNode(llvm::SUnit*)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBase15UnscheduledNodeEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::UnscheduledNode(llvm::SUnit*)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEE12popFromQueueERSt6vectorIPN4llvm5SUnitESaIS6_EERS1_\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>::popFromQueue(std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >&, (anonymous namespace)::ilp_ls_rr_sort&)\"},\n    {\"_Z8BURRSortPN4llvm5SUnitES1_PN12_GLOBAL__N_118RegReductionPQBaseE\", \"BURRSort(llvm::SUnit*, llvm::SUnit*, (anonymous namespace)::RegReductionPQBase*)\"},\n    {\"_ZNK12_GLOBAL__N_118RegReductionPQBase15HighRegPressureEPKN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPQBase::HighRegPressure(llvm::SUnit const*) const\"},\n    {\"_Z11closestSuccPKN4llvm5SUnitE\", \"closestSucc(llvm::SUnit const*)\"},\n    {\"_Z16BUCompareLatencyPN4llvm5SUnitES1_bPN12_GLOBAL__N_118RegReductionPQBaseE\", \"BUCompareLatency(llvm::SUnit*, llvm::SUnit*, bool, (anonymous namespace)::RegReductionPQBase*)\"},\n    {\"_Z25CalcNodeSethiUllmanNumberPKN4llvm5SUnitERSt6vectorIjSaIjEE\", \"CalcNodeSethiUllmanNumber(llvm::SUnit const*, std::vector<unsigned int, std::allocator<unsigned int> >&)\"},\n    {\"_Z21canClobberPhysRegDefsPKN4llvm5SUnitES2_PKNS_15TargetInstrInfoEPKNS_18TargetRegisterInfoE\", \"canClobberPhysRegDefs(llvm::SUnit const*, llvm::SUnit const*, llvm::TargetInstrInfo const*, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBaseD1Ev\", \"(anonymous namespace)::RegReductionPQBase::~RegReductionPQBase()\"},\n    {\"_ZN12_GLOBAL__N_118RegReductionPQBaseD0Ev\", \"(anonymous namespace)::RegReductionPQBase::~RegReductionPQBase()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEED1Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEED0Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEE10isBottomUpEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::isBottomUp() const\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEE7isReadyEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::isReady(llvm::SUnit*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEE3popEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::pop()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEE4dumpEPN4llvm11ScheduleDAGE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEE12popFromQueueERSt6vectorIPN4llvm5SUnitESaIS6_EERS1_\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>::popFromQueue(std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >&, (anonymous namespace)::hybrid_ls_rr_sort&)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEED1Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEED0Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEE10isBottomUpEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::isBottomUp() const\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEE7isReadyEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::isReady(llvm::SUnit*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEE3popEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::pop()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEE4dumpEPN4llvm11ScheduleDAGE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEE12popFromQueueERSt6vectorIPN4llvm5SUnitESaIS6_EERS1_\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>::popFromQueue(std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >&, (anonymous namespace)::src_ls_rr_sort&)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEED1Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEED0Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEE10isBottomUpEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::isBottomUp() const\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEE7isReadyEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::isReady(llvm::SUnit*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEE3popEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::pop()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEE4dumpEPN4llvm11ScheduleDAGE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEE12popFromQueueERSt6vectorIPN4llvm5SUnitESaIS6_EERS1_\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>::popFromQueue(std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >&, (anonymous namespace)::td_ls_rr_sort&)\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEED1Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEED0Ev\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::~RegReductionPriorityQueue()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEE10isBottomUpEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::isBottomUp() const\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEE7isReadyEPN4llvm5SUnitE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::isReady(llvm::SUnit*) const\"},\n    {\"_ZN12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEE3popEv\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::pop()\"},\n    {\"_ZNK12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEE4dumpEPN4llvm11ScheduleDAGE\", \"(anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRListD1Ev\", \"(anonymous namespace)::ScheduleDAGRRList::~ScheduleDAGRRList()\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRListD0Ev\", \"(anonymous namespace)::ScheduleDAGRRList::~ScheduleDAGRRList()\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList8ScheduleEv\", \"(anonymous namespace)::ScheduleDAGRRList::Schedule()\"},\n    {\"_ZNK12_GLOBAL__N_117ScheduleDAGRRList18ForceUnitLatenciesEv\", \"(anonymous namespace)::ScheduleDAGRRList::ForceUnitLatencies() const\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList20ListScheduleBottomUpEv\", \"(anonymous namespace)::ScheduleDAGRRList::ListScheduleBottomUp()\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList19ReleasePredecessorsEPN4llvm5SUnitE\", \"(anonymous namespace)::ScheduleDAGRRList::ReleasePredecessors(llvm::SUnit*)\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList14AdvanceToCycleEj\", \"(anonymous namespace)::ScheduleDAGRRList::AdvanceToCycle(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList14ReleasePendingEv\", \"(anonymous namespace)::ScheduleDAGRRList::ReleasePending()\"},\n    {\"_ZN12_GLOBAL__N_117ScheduleDAGRRList8EmitNodeEPN4llvm5SUnitE\", \"(anonymous namespace)::ScheduleDAGRRList::EmitNode(llvm::SUnit*)\"},\n    {\"_Z18CheckForLiveRegDefPN4llvm5SUnitEjRSt6vectorIS1_SaIS1_EERNS_8SmallSetIjLj4EEERNS_11SmallVectorIjLj4EEEPKNS_18TargetRegisterInfoE\", \"CheckForLiveRegDef(llvm::SUnit*, unsigned int, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >&, llvm::SmallSet<unsigned int, 4u>&, llvm::SmallVector<unsigned int, 4u>&, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm5SUnitESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, llvm::SUnit*>(__gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, __gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, llvm::SUnit* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIjSaIjEE14_M_fill_assignEmRKj\", \"std::vector<unsigned int, std::allocator<unsigned int> >::_M_fill_assign(unsigned long, unsigned int const&)\"},\n    {\"_ZNK4llvm18ScheduleDAGSDNodes21ComputeOperandLatencyEPNS_5SUnitES2_RNS_4SDepE\", \"llvm::ScheduleDAGSDNodes::ComputeOperandLatency(llvm::SUnit*, llvm::SUnit*, llvm::SDep&) const\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitENS_11SmallVectorIjLj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u>, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned int, 4u> > >::insert(std::pair<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitENS_11SmallVectorIjLj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u>, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned int, 4u> > >::FindAndConstruct(llvm::SUnit* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitENS_11SmallVectorIjLj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u>, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned int, 4u> > >::InsertIntoBucket(llvm::SUnit* const&, llvm::SmallVector<unsigned int, 4u> const&, std::pair<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitENS_11SmallVectorIjLj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::SUnit*, llvm::SmallVector<unsigned int, 4u>, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<llvm::SmallVector<unsigned int, 4u> > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm5SUnitESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, unsigned long, llvm::SUnit* const&)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodesD1Ev\", \"llvm::ScheduleDAGSDNodes::~ScheduleDAGSDNodes()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodesD0Ev\", \"llvm::ScheduleDAGSDNodes::~ScheduleDAGSDNodes()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodesC1ERNS_15MachineFunctionE\", \"llvm::ScheduleDAGSDNodes::ScheduleDAGSDNodes(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodesC2ERNS_15MachineFunctionE\", \"llvm::ScheduleDAGSDNodes::ScheduleDAGSDNodes(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes3RunEPNS_12SelectionDAGEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::ScheduleDAGSDNodes::Run(llvm::SelectionDAG*, llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes8NewSUnitEPNS_6SDNodeE\", \"llvm::ScheduleDAGSDNodes::NewSUnit(llvm::SDNode*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes5CloneEPNS_5SUnitE\", \"llvm::ScheduleDAGSDNodes::Clone(llvm::SUnit*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes23ClusterNeighboringLoadsEPNS_6SDNodeE\", \"llvm::ScheduleDAGSDNodes::ClusterNeighboringLoads(llvm::SDNode*)\"},\n    {\"_Z7AddGluePN4llvm6SDNodeENS_7SDValueEbPNS_12SelectionDAGE\", \"AddGlue(llvm::SDNode*, llvm::SDValue, bool, llvm::SelectionDAG*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes12ClusterNodesEv\", \"llvm::ScheduleDAGSDNodes::ClusterNodes()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes15BuildSchedUnitsEv\", \"llvm::ScheduleDAGSDNodes::BuildSchedUnits()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes18InitNumRegDefsLeftEPNS_5SUnitE\", \"llvm::ScheduleDAGSDNodes::InitNumRegDefsLeft(llvm::SUnit*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes13AddSchedEdgesEv\", \"llvm::ScheduleDAGSDNodes::AddSchedEdges()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes15BuildSchedGraphEPNS_13AliasAnalysisE\", \"llvm::ScheduleDAGSDNodes::BuildSchedGraph(llvm::AliasAnalysis*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes10RegDefIter15InitNodeNumDefsEv\", \"llvm::ScheduleDAGSDNodes::RegDefIter::InitNodeNumDefs()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes10RegDefIterC1EPKNS_5SUnitEPKS0_\", \"llvm::ScheduleDAGSDNodes::RegDefIter::RegDefIter(llvm::SUnit const*, llvm::ScheduleDAGSDNodes const*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes10RegDefIterC2EPKNS_5SUnitEPKS0_\", \"llvm::ScheduleDAGSDNodes::RegDefIter::RegDefIter(llvm::SUnit const*, llvm::ScheduleDAGSDNodes const*)\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes10RegDefIter7AdvanceEv\", \"llvm::ScheduleDAGSDNodes::RegDefIter::Advance()\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes14ComputeLatencyEPNS_5SUnitE\", \"llvm::ScheduleDAGSDNodes::ComputeLatency(llvm::SUnit*)\"},\n    {\"_ZNK4llvm18ScheduleDAGSDNodes21ComputeOperandLatencyEPNS_6SDNodeES2_jRNS_4SDepE\", \"llvm::ScheduleDAGSDNodes::ComputeOperandLatency(llvm::SDNode*, llvm::SDNode*, unsigned int, llvm::SDep&) const\"},\n    {\"_ZNK4llvm18ScheduleDAGSDNodes8dumpNodeEPKNS_5SUnitE\", \"llvm::ScheduleDAGSDNodes::dumpNode(llvm::SUnit const*) const\"},\n    {\"_ZN4llvm18ScheduleDAGSDNodes12EmitScheduleEv\", \"llvm::ScheduleDAGSDNodes::EmitSchedule()\"},\n    {\"_Z17ProcessSourceNodePN4llvm6SDNodeEPNS_12SelectionDAGERNS_12InstrEmitterERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoIS7_EENS8_IjEEEERNS_11SmallVectorISt4pairIjPNS_12MachineInstrEELj32EEERNS_8SmallSetIjLj8EEE\", \"ProcessSourceNode(llvm::SDNode*, llvm::SelectionDAG*, llvm::InstrEmitter&, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, llvm::SmallVector<std::pair<unsigned int, llvm::MachineInstr*>, 32u>&, llvm::SmallSet<unsigned int, 8u>&)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIjPN4llvm12MachineInstrEElN12_GLOBAL__N_111OrderSorterEEvT_S8_T0_T1_\", \"void std::__introsort_loop<std::pair<unsigned int, llvm::MachineInstr*>*, long, (anonymous namespace)::OrderSorter>(std::pair<unsigned int, llvm::MachineInstr*>*, std::pair<unsigned int, llvm::MachineInstr*>*, long, (anonymous namespace)::OrderSorter)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIjPN4llvm12MachineInstrEEN12_GLOBAL__N_111OrderSorterEEvT_S8_T0_\", \"void std::__insertion_sort<std::pair<unsigned int, llvm::MachineInstr*>*, (anonymous namespace)::OrderSorter>(std::pair<unsigned int, llvm::MachineInstr*>*, std::pair<unsigned int, llvm::MachineInstr*>*, (anonymous namespace)::OrderSorter)\"},\n    {\"_Z18ProcessSDDbgValuesPN4llvm6SDNodeEPNS_12SelectionDAGERNS_12InstrEmitterERNS_11SmallVectorISt4pairIjPNS_12MachineInstrEELj32EEERNS_8DenseMapINS_7SDValueEjNS_12DenseMapInfoISE_EENSF_IjEEEEj\", \"ProcessSDDbgValues(llvm::SDNode*, llvm::SelectionDAG*, llvm::InstrEmitter&, llvm::SmallVector<std::pair<unsigned int, llvm::MachineInstr*>, 32u>&, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::DenseMapInfo<unsigned int> >&, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIxPNS_6SDNodeENS_12DenseMapInfoIxEENS3_IS2_EEE6insertERKSt4pairIxS2_E\", \"llvm::DenseMap<long long, llvm::SDNode*, llvm::DenseMapInfo<long long>, llvm::DenseMapInfo<llvm::SDNode*> >::insert(std::pair<long long, llvm::SDNode*> const&)\"},\n    {\"_ZN4llvm8DenseMapIxPNS_6SDNodeENS_12DenseMapInfoIxEENS3_IS2_EEE16InsertIntoBucketERKxRKS2_PSt4pairIxS2_E\", \"llvm::DenseMap<long long, llvm::SDNode*, llvm::DenseMapInfo<long long>, llvm::DenseMapInfo<llvm::SDNode*> >::InsertIntoBucket(long long const&, llvm::SDNode* const&, std::pair<long long, llvm::SDNode*>*)\"},\n    {\"_ZN4llvm8DenseMapIxPNS_6SDNodeENS_12DenseMapInfoIxEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<long long, llvm::SDNode*, llvm::DenseMapInfo<long long>, llvm::DenseMapInfo<llvm::SDNode*> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIPxlEvT_S1_T0_\", \"void std::__introsort_loop<long long*, long>(long long*, long long*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPxEvT_S1_\", \"void std::__final_insertion_sort<long long*>(long long*, long long*)\"},\n    {\"_ZSt13__heap_selectIPxEvT_S1_S1_\", \"void std::__heap_select<long long*>(long long*, long long*, long long*)\"},\n    {\"_ZSt9sort_heapIPxEvT_S1_\", \"void std::sort_heap<long long*>(long long*, long long*)\"},\n    {\"_ZSt9make_heapIPxEvT_S1_\", \"void std::make_heap<long long*>(long long*, long long*)\"},\n    {\"_ZN4llvm12SelectionDAG17DAGUpdateListenerD0Ev\", \"llvm::SelectionDAG::DAGUpdateListener::~DAGUpdateListener()\"},\n    {\"_ZN4llvm12SelectionDAG17DAGUpdateListenerD1Ev\", \"llvm::SelectionDAG::DAGUpdateListener::~DAGUpdateListener()\"},\n    {\"_ZN4llvm12SelectionDAG17DAGUpdateListenerD2Ev\", \"llvm::SelectionDAG::DAGUpdateListener::~DAGUpdateListener()\"},\n    {\"_ZNK4llvm16ConstantFPSDNode14isExactlyValueERKNS_7APFloatE\", \"llvm::ConstantFPSDNode::isExactlyValue(llvm::APFloat const&) const\"},\n    {\"_ZN4llvm16ConstantFPSDNode19isValueValidForTypeENS_3EVTERKNS_7APFloatE\", \"llvm::ConstantFPSDNode::isValueValidForType(llvm::EVT, llvm::APFloat const&)\"},\n    {\"_ZN4llvm3ISD20isBuildVectorAllOnesEPKNS_6SDNodeE\", \"llvm::ISD::isBuildVectorAllOnes(llvm::SDNode const*)\"},\n    {\"_ZN4llvm3ISD21isBuildVectorAllZerosEPKNS_6SDNodeE\", \"llvm::ISD::isBuildVectorAllZeros(llvm::SDNode const*)\"},\n    {\"_ZN4llvm3ISD16isScalarToVectorEPKNS_6SDNodeE\", \"llvm::ISD::isScalarToVector(llvm::SDNode const*)\"},\n    {\"_ZN4llvm3ISD23getSetCCSwappedOperandsENS0_8CondCodeE\", \"llvm::ISD::getSetCCSwappedOperands(llvm::ISD::CondCode)\"},\n    {\"_ZN4llvm3ISD15getSetCCInverseENS0_8CondCodeEb\", \"llvm::ISD::getSetCCInverse(llvm::ISD::CondCode, bool)\"},\n    {\"_ZN4llvm3ISD19getSetCCOrOperationENS0_8CondCodeES1_b\", \"llvm::ISD::getSetCCOrOperation(llvm::ISD::CondCode, llvm::ISD::CondCode, bool)\"},\n    {\"_ZN4llvm3ISD20getSetCCAndOperationENS0_8CondCodeES1_b\", \"llvm::ISD::getSetCCAndOperation(llvm::ISD::CondCode, llvm::ISD::CondCode, bool)\"},\n    {\"_ZN4llvm12SelectionDAG15RemoveDeadNodesEv\", \"llvm::SelectionDAG::RemoveDeadNodes()\"},\n    {\"_ZN4llvm12SelectionDAG15RemoveDeadNodesERNS_15SmallVectorImplIPNS_6SDNodeEEEPNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::RemoveDeadNodes(llvm::SmallVectorImpl<llvm::SDNode*>&, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12HandleSDNodeD1Ev\", \"llvm::HandleSDNode::~HandleSDNode()\"},\n    {\"_ZN4llvm12SelectionDAG21RemoveNodeFromCSEMapsEPNS_6SDNodeE\", \"llvm::SelectionDAG::RemoveNodeFromCSEMaps(llvm::SDNode*)\"},\n    {\"_ZN4llvm12SelectionDAG14DeallocateNodeEPNS_6SDNodeE\", \"llvm::SelectionDAG::DeallocateNode(llvm::SDNode*)\"},\n    {\"_ZN4llvm12SelectionDAG14RemoveDeadNodeEPNS_6SDNodeEPNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::RemoveDeadNode(llvm::SDNode*, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG10DeleteNodeEPNS_6SDNodeE\", \"llvm::SelectionDAG::DeleteNode(llvm::SDNode*)\"},\n    {\"_ZN4llvm12SelectionDAG22DeleteNodeNotInCSEMapsEPNS_6SDNodeE\", \"llvm::SelectionDAG::DeleteNodeNotInCSEMaps(llvm::SDNode*)\"},\n    {\"_ZN4llvm6SDNode12DropOperandsEv\", \"llvm::SDNode::DropOperands()\"},\n    {\"_ZN4llvm12SelectionDAG24AddModifiedNodeToCSEMapsEPNS_6SDNodeEPNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::AddModifiedNodeToCSEMaps(llvm::SDNode*, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG18ReplaceAllUsesWithEPNS_6SDNodeES2_PNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDNode*, llvm::SDNode*, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG20FindModifiedNodeSlotEPNS_6SDNodeENS_7SDValueERPv\", \"llvm::SelectionDAG::FindModifiedNodeSlot(llvm::SDNode*, llvm::SDValue, void*&)\"},\n    {\"_Z15AddNodeIDCustomRN4llvm16FoldingSetNodeIDEPKNS_6SDNodeE\", \"AddNodeIDCustom(llvm::FoldingSetNodeID&, llvm::SDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG20FindModifiedNodeSlotEPNS_6SDNodeENS_7SDValueES3_RPv\", \"llvm::SelectionDAG::FindModifiedNodeSlot(llvm::SDNode*, llvm::SDValue, llvm::SDValue, void*&)\"},\n    {\"_ZN4llvm12SelectionDAG20FindModifiedNodeSlotEPNS_6SDNodeEPKNS_7SDValueEjRPv\", \"llvm::SelectionDAG::FindModifiedNodeSlot(llvm::SDNode*, llvm::SDValue const*, unsigned int, void*&)\"},\n    {\"_ZNK4llvm12SelectionDAG15getEVTAlignmentENS_3EVTE\", \"llvm::SelectionDAG::getEVTAlignment(llvm::EVT) const\"},\n    {\"_ZN4llvm12SelectionDAGC1ERKNS_13TargetMachineE\", \"llvm::SelectionDAG::SelectionDAG(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm12SelectionDAGC2ERKNS_13TargetMachineE\", \"llvm::SelectionDAG::SelectionDAG(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm12SelectionDAG9getVTListENS_3EVTE\", \"llvm::SelectionDAG::getVTList(llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG4initERNS_15MachineFunctionE\", \"llvm::SelectionDAG::init(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm12SelectionDAGD1Ev\", \"llvm::SelectionDAG::~SelectionDAG()\"},\n    {\"_ZN4llvm12SelectionDAGD2Ev\", \"llvm::SelectionDAG::~SelectionDAG()\"},\n    {\"_ZN4llvm12SelectionDAG14allnodes_clearEv\", \"llvm::SelectionDAG::allnodes_clear()\"},\n    {\"_ZN4llvm12SelectionDAG5clearEv\", \"llvm::SelectionDAG::clear()\"},\n    {\"_ZN4llvm12SelectionDAG14getSExtOrTruncENS_7SDValueENS_8DebugLocENS_3EVTE\", \"llvm::SelectionDAG::getSExtOrTrunc(llvm::SDValue, llvm::DebugLoc, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTENS_7SDValueE\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getZExtOrTruncENS_7SDValueENS_8DebugLocENS_3EVTE\", \"llvm::SelectionDAG::getZExtOrTrunc(llvm::SDValue, llvm::DebugLoc, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG18getZeroExtendInRegENS_7SDValueENS_8DebugLocENS_3EVTE\", \"llvm::SelectionDAG::getZeroExtendInReg(llvm::SDValue, llvm::DebugLoc, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG11getConstantERKNS_5APIntENS_3EVTEb\", \"llvm::SelectionDAG::getConstant(llvm::APInt const&, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG6getNOTENS_8DebugLocENS_7SDValueENS_3EVTE\", \"llvm::SelectionDAG::getNOT(llvm::DebugLoc, llvm::SDValue, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG11getConstantEyNS_3EVTEb\", \"llvm::SelectionDAG::getConstant(unsigned long long, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG11getConstantERKNS_11ConstantIntENS_3EVTEb\", \"llvm::SelectionDAG::getConstant(llvm::ConstantInt const&, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG17getIntPtrConstantEyb\", \"llvm::SelectionDAG::getIntPtrConstant(unsigned long long, bool)\"},\n    {\"_ZN4llvm12SelectionDAG13getConstantFPERKNS_7APFloatENS_3EVTEb\", \"llvm::SelectionDAG::getConstantFP(llvm::APFloat const&, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG13getConstantFPERKNS_10ConstantFPENS_3EVTEb\", \"llvm::SelectionDAG::getConstantFP(llvm::ConstantFP const&, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG13getConstantFPEdNS_3EVTEb\", \"llvm::SelectionDAG::getConstantFP(double, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG16getGlobalAddressEPKNS_11GlobalValueENS_8DebugLocENS_3EVTExbh\", \"llvm::SelectionDAG::getGlobalAddress(llvm::GlobalValue const*, llvm::DebugLoc, llvm::EVT, long long, bool, unsigned char)\"},\n    {\"_ZN4llvm19GlobalAddressSDNodeC1EjNS_8DebugLocEPKNS_11GlobalValueENS_3EVTExh\", \"llvm::GlobalAddressSDNode::GlobalAddressSDNode(unsigned int, llvm::DebugLoc, llvm::GlobalValue const*, llvm::EVT, long long, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG13getFrameIndexEiNS_3EVTEb\", \"llvm::SelectionDAG::getFrameIndex(int, llvm::EVT, bool)\"},\n    {\"_ZN4llvm12SelectionDAG12getJumpTableEiNS_3EVTEbh\", \"llvm::SelectionDAG::getJumpTable(int, llvm::EVT, bool, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG15getConstantPoolEPKNS_8ConstantENS_3EVTEjibh\", \"llvm::SelectionDAG::getConstantPool(llvm::Constant const*, llvm::EVT, unsigned int, int, bool, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG15getConstantPoolEPNS_24MachineConstantPoolValueENS_3EVTEjibh\", \"llvm::SelectionDAG::getConstantPool(llvm::MachineConstantPoolValue*, llvm::EVT, unsigned int, int, bool, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG13getBasicBlockEPNS_17MachineBasicBlockE\", \"llvm::SelectionDAG::getBasicBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12SelectionDAG12getValueTypeENS_3EVTE\", \"llvm::SelectionDAG::getValueType(llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG17getExternalSymbolEPKcNS_3EVTE\", \"llvm::SelectionDAG::getExternalSymbol(char const*, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG23getTargetExternalSymbolEPKcNS_3EVTEh\", \"llvm::SelectionDAG::getTargetExternalSymbol(char const*, llvm::EVT, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG11getCondCodeENS_3ISD8CondCodeE\", \"llvm::SelectionDAG::getCondCode(llvm::ISD::CondCode)\"},\n    {\"_ZN4llvm12SelectionDAG16getVectorShuffleENS_3EVTENS_8DebugLocENS_7SDValueES3_PKi\", \"llvm::SelectionDAG::getVectorShuffle(llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, int const*)\"},\n    {\"_ZN4llvm12SelectionDAG16getConvertRndSatENS_3EVTENS_8DebugLocENS_7SDValueES3_S3_S3_S3_NS_3ISD7CvtCodeE\", \"llvm::SelectionDAG::getConvertRndSat(llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::ISD::CvtCode)\"},\n    {\"_ZN4llvm12SelectionDAG11getRegisterEjNS_3EVTE\", \"llvm::SelectionDAG::getRegister(unsigned int, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG10getEHLabelENS_8DebugLocENS_7SDValueEPNS_8MCSymbolE\", \"llvm::SelectionDAG::getEHLabel(llvm::DebugLoc, llvm::SDValue, llvm::MCSymbol*)\"},\n    {\"_ZN4llvm12SelectionDAG15getBlockAddressEPKNS_12BlockAddressENS_3EVTEbh\", \"llvm::SelectionDAG::getBlockAddress(llvm::BlockAddress const*, llvm::EVT, bool, unsigned char)\"},\n    {\"_ZN4llvm12SelectionDAG11getSrcValueEPKNS_5ValueE\", \"llvm::SelectionDAG::getSrcValue(llvm::Value const*)\"},\n    {\"_ZN4llvm12SelectionDAG9getMDNodeEPKNS_6MDNodeE\", \"llvm::SelectionDAG::getMDNode(llvm::MDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG21getShiftAmountOperandENS_7SDValueE\", \"llvm::SelectionDAG::getShiftAmountOperand(llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG20CreateStackTemporaryENS_3EVTEj\", \"llvm::SelectionDAG::CreateStackTemporary(llvm::EVT, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG20CreateStackTemporaryENS_3EVTES1_\", \"llvm::SelectionDAG::CreateStackTemporary(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG9FoldSetCCENS_3EVTENS_7SDValueES2_NS_3ISD8CondCodeENS_8DebugLocE\", \"llvm::SelectionDAG::FoldSetCC(llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::ISD::CondCode, llvm::DebugLoc)\"},\n    {\"_ZNK4llvm12SelectionDAG13SignBitIsZeroENS_7SDValueEj\", \"llvm::SelectionDAG::SignBitIsZero(llvm::SDValue, unsigned int) const\"},\n    {\"_ZNK4llvm12SelectionDAG17MaskedValueIsZeroENS_7SDValueERKNS_5APIntEj\", \"llvm::SelectionDAG::MaskedValueIsZero(llvm::SDValue, llvm::APInt const&, unsigned int) const\"},\n    {\"_ZNK4llvm12SelectionDAG17ComputeMaskedBitsENS_7SDValueERKNS_5APIntERS2_S5_j\", \"llvm::SelectionDAG::ComputeMaskedBits(llvm::SDValue, llvm::APInt const&, llvm::APInt&, llvm::APInt&, unsigned int) const\"},\n    {\"_ZNK4llvm12SelectionDAG18ComputeNumSignBitsENS_7SDValueEj\", \"llvm::SelectionDAG::ComputeNumSignBits(llvm::SDValue, unsigned int) const\"},\n    {\"_ZNK4llvm12SelectionDAG15isKnownNeverNaNENS_7SDValueE\", \"llvm::SelectionDAG::isKnownNeverNaN(llvm::SDValue) const\"},\n    {\"_ZNK4llvm12SelectionDAG16isKnownNeverZeroENS_7SDValueE\", \"llvm::SelectionDAG::isKnownNeverZero(llvm::SDValue) const\"},\n    {\"_ZNK4llvm12SelectionDAG9isEqualToENS_7SDValueES1_\", \"llvm::SelectionDAG::isEqualTo(llvm::SDValue, llvm::SDValue) const\"},\n    {\"_ZNK4llvm12SelectionDAG23isVerifiedDebugInfoDescENS_7SDValueE\", \"llvm::SelectionDAG::isVerifiedDebugInfoDesc(llvm::SDValue) const\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTE\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG22FoldConstantArithmeticEjNS_3EVTEPNS_14ConstantSDNodeES3_\", \"llvm::SelectionDAG::FoldConstantArithmetic(unsigned int, llvm::EVT, llvm::ConstantSDNode*, llvm::ConstantSDNode*)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_S3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG27getStackArgumentTokenFactorENS_7SDValueE\", \"llvm::SelectionDAG::getStackArgumentTokenFactor(llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG9getMemcpyENS_7SDValueENS_8DebugLocES1_S1_S1_jbbNS_18MachinePointerInfoES3_\", \"llvm::SelectionDAG::getMemcpy(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo)\"},\n    {\"_Z23getMemcpyLoadsAndStoresRN4llvm12SelectionDAGENS_8DebugLocENS_7SDValueES3_S3_yjbbNS_18MachinePointerInfoES4_\", \"getMemcpyLoadsAndStores(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned long long, unsigned int, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo)\"},\n    {\"_ZN4llvm12SelectionDAG10getMemmoveENS_7SDValueENS_8DebugLocES1_S1_S1_jbNS_18MachinePointerInfoES3_\", \"llvm::SelectionDAG::getMemmove(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo)\"},\n    {\"_ZN4llvm12SelectionDAG9getMemsetENS_7SDValueENS_8DebugLocES1_S1_S1_jbNS_18MachinePointerInfoE\", \"llvm::SelectionDAG::getMemset(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, llvm::MachinePointerInfo)\"},\n    {\"_ZN4llvm12SelectionDAG9getAtomicEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_S3_NS_18MachinePointerInfoEj\", \"llvm::SelectionDAG::getAtomic(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG9getAtomicEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_S3_PNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getAtomic(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG9getVTListENS_3EVTES1_\", \"llvm::SelectionDAG::getVTList(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG9getAtomicEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_PKNS_5ValueEj\", \"llvm::SelectionDAG::getAtomic(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::Value const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG9getAtomicEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_PNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getAtomic(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG14getMergeValuesEPKNS_7SDValueEjNS_8DebugLocE\", \"llvm::SelectionDAG::getMergeValues(llvm::SDValue const*, unsigned int, llvm::DebugLoc)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG9getVTListEPKNS_3EVTEj\", \"llvm::SelectionDAG::getVTList(llvm::EVT const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG19getMemIntrinsicNodeEjNS_8DebugLocEPKNS_3EVTEjPKNS_7SDValueEjS2_NS_18MachinePointerInfoEjbbb\", \"llvm::SelectionDAG::getMemIntrinsicNode(unsigned int, llvm::DebugLoc, llvm::EVT const*, unsigned int, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::MachinePointerInfo, unsigned int, bool, bool, bool)\"},\n    {\"_ZN4llvm12SelectionDAG19getMemIntrinsicNodeEjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEjNS_3EVTENS_18MachinePointerInfoEjbbb\", \"llvm::SelectionDAG::getMemIntrinsicNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::MachinePointerInfo, unsigned int, bool, bool, bool)\"},\n    {\"_ZN4llvm12SelectionDAG19getMemIntrinsicNodeEjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEjNS_3EVTEPNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getMemIntrinsicNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG7getLoadENS_3ISD14MemIndexedModeENS1_11LoadExtTypeENS_3EVTENS_8DebugLocENS_7SDValueES6_S6_NS_18MachinePointerInfoES4_bbjPKNS_6MDNodeE\", \"llvm::SelectionDAG::getLoad(llvm::ISD::MemIndexedMode, llvm::ISD::LoadExtType, llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, llvm::EVT, bool, bool, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG7getLoadENS_3ISD14MemIndexedModeENS1_11LoadExtTypeENS_3EVTENS_8DebugLocENS_7SDValueES6_S6_S4_PNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getLoad(llvm::ISD::MemIndexedMode, llvm::ISD::LoadExtType, llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG9getVTListENS_3EVTES1_S1_\", \"llvm::SelectionDAG::getVTList(llvm::EVT, llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG7getLoadENS_3EVTENS_8DebugLocENS_7SDValueES3_NS_18MachinePointerInfoEbbjPKNS_6MDNodeE\", \"llvm::SelectionDAG::getLoad(llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, bool, bool, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG10getExtLoadENS_3ISD11LoadExtTypeENS_3EVTENS_8DebugLocENS_7SDValueES5_NS_18MachinePointerInfoES3_bbjPKNS_6MDNodeE\", \"llvm::SelectionDAG::getExtLoad(llvm::ISD::LoadExtType, llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, llvm::EVT, bool, bool, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG14getIndexedLoadENS_7SDValueENS_8DebugLocES1_S1_NS_3ISD14MemIndexedModeE\", \"llvm::SelectionDAG::getIndexedLoad(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::ISD::MemIndexedMode)\"},\n    {\"_ZN4llvm12SelectionDAG8getStoreENS_7SDValueENS_8DebugLocES1_S1_NS_18MachinePointerInfoEbbjPKNS_6MDNodeE\", \"llvm::SelectionDAG::getStore(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, bool, bool, unsigned int, llvm::MDNode const*)\"},\n    {\"_Z16InferPointerInfoN4llvm7SDValueEx\", \"InferPointerInfo(llvm::SDValue, long long)\"},\n    {\"_ZN4llvm12SelectionDAG8getStoreENS_7SDValueENS_8DebugLocES1_S1_PNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getStore(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG13getTruncStoreENS_7SDValueENS_8DebugLocES1_S1_NS_18MachinePointerInfoENS_3EVTEbbjPKNS_6MDNodeE\", \"llvm::SelectionDAG::getTruncStore(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, llvm::EVT, bool, bool, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG13getTruncStoreENS_7SDValueENS_8DebugLocES1_S1_NS_3EVTEPNS_17MachineMemOperandE\", \"llvm::SelectionDAG::getTruncStore(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12SelectionDAG15getIndexedStoreENS_7SDValueENS_8DebugLocES1_S1_NS_3ISD14MemIndexedModeE\", \"llvm::SelectionDAG::getIndexedStore(llvm::SDValue, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::ISD::MemIndexedMode)\"},\n    {\"_ZN4llvm12SelectionDAG8getVAArgENS_3EVTENS_8DebugLocENS_7SDValueES3_S3_j\", \"llvm::SelectionDAG::getVAArg(llvm::EVT, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_3EVTEPKNS_5SDUseEj\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDUse const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocERKSt6vectorINS_3EVTESaIS3_EEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, std::vector<llvm::EVT, std::allocator<llvm::EVT> > const&, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocEPKNS_3EVTEjPKNS_7SDValueEj\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::EVT const*, unsigned int, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListE\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListENS_7SDValueE\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListENS_7SDValueES3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListENS_7SDValueES3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListENS_7SDValueES3_S3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG7getNodeEjNS_8DebugLocENS_8SDVTListENS_7SDValueES3_S3_S3_S3_\", \"llvm::SelectionDAG::getNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm6SDNode16getValueTypeListENS_3EVTE\", \"llvm::SDNode::getValueTypeList(llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG9getVTListENS_3EVTES1_S1_S1_\", \"llvm::SelectionDAG::getVTList(llvm::EVT, llvm::EVT, llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeENS_7SDValueE\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeENS_7SDValueES3_\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeENS_7SDValueES3_S3_\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeEPKNS_7SDValueEj\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeENS_7SDValueES3_S3_S3_\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG18UpdateNodeOperandsEPNS_6SDNodeENS_7SDValueES3_S3_S3_S3_\", \"llvm::SelectionDAG::UpdateNodeOperands(llvm::SDNode*, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTE\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTENS_7SDValueE\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTENS_7SDValueES4_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTENS_7SDValueES4_S4_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTEPKNS_7SDValueEj\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_PKNS_7SDValueEj\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_S3_PKNS_7SDValueEj\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_S3_S3_PKNS_7SDValueEj\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_NS_7SDValueE\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_NS_7SDValueES4_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_NS_7SDValueES4_S4_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG12SelectNodeToEPNS_6SDNodeEjNS_3EVTES3_S3_NS_7SDValueES4_S4_\", \"llvm::SelectionDAG::SelectNodeTo(llvm::SDNode*, unsigned int, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG11MorphNodeToEPNS_6SDNodeEjNS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SelectionDAG::MorphNodeTo(llvm::SDNode*, unsigned int, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTE\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTENS_7SDValueE\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTENS_7SDValueES3_S3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_NS_7SDValueE\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_NS_7SDValueES3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_NS_7SDValueES3_S3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_PKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_S2_NS_7SDValueES3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_S2_NS_7SDValueES3_S3_\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_S2_PKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocENS_3EVTES2_S2_S2_PKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, llvm::EVT, llvm::EVT, llvm::EVT, llvm::EVT, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG14getMachineNodeEjNS_8DebugLocERKSt6vectorINS_3EVTESaIS3_EEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getMachineNode(unsigned int, llvm::DebugLoc, std::vector<llvm::EVT, std::allocator<llvm::EVT> > const&, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG22getTargetExtractSubregEiNS_8DebugLocENS_3EVTENS_7SDValueE\", \"llvm::SelectionDAG::getTargetExtractSubreg(int, llvm::DebugLoc, llvm::EVT, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG21getTargetInsertSubregEiNS_8DebugLocENS_3EVTENS_7SDValueES3_\", \"llvm::SelectionDAG::getTargetInsertSubreg(int, llvm::DebugLoc, llvm::EVT, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12SelectionDAG15getNodeIfExistsEjNS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SelectionDAG::getNodeIfExists(unsigned int, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG11getDbgValueEPNS_6MDNodeEPNS_6SDNodeEjyNS_8DebugLocEj\", \"llvm::SelectionDAG::getDbgValue(llvm::MDNode*, llvm::SDNode*, unsigned int, unsigned long long, llvm::DebugLoc, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG11getDbgValueEPNS_6MDNodeEPKNS_5ValueEyNS_8DebugLocEj\", \"llvm::SelectionDAG::getDbgValue(llvm::MDNode*, llvm::Value const*, unsigned long long, llvm::DebugLoc, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG11getDbgValueEPNS_6MDNodeEjyNS_8DebugLocEj\", \"llvm::SelectionDAG::getDbgValue(llvm::MDNode*, unsigned int, unsigned long long, llvm::DebugLoc, unsigned int)\"},\n    {\"_ZN4llvm12SelectionDAG18ReplaceAllUsesWithENS_7SDValueES1_PNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDValue, llvm::SDValue, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN12_GLOBAL__N_118RAUWUpdateListenerD1Ev\", \"(anonymous namespace)::RAUWUpdateListener::~RAUWUpdateListener()\"},\n    {\"_ZN4llvm12SelectionDAG18ReplaceAllUsesWithEPNS_6SDNodeEPKNS_7SDValueEPNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDNode*, llvm::SDValue const*, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG25ReplaceAllUsesOfValueWithENS_7SDValueES1_PNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::ReplaceAllUsesOfValueWith(llvm::SDValue, llvm::SDValue, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG26ReplaceAllUsesOfValuesWithEPKNS_7SDValueES3_jPNS0_17DAGUpdateListenerE\", \"llvm::SelectionDAG::ReplaceAllUsesOfValuesWith(llvm::SDValue const*, llvm::SDValue const*, unsigned int, llvm::SelectionDAG::DAGUpdateListener*)\"},\n    {\"_ZN4llvm12SelectionDAG22AssignTopologicalOrderEv\", \"llvm::SelectionDAG::AssignTopologicalOrder()\"},\n    {\"_ZN4llvm14checkForCyclesEPKNS_6SDNodeE\", \"llvm::checkForCycles(llvm::SDNode const*)\"},\n    {\"_ZN4llvm12SelectionDAG14AssignOrderingEPKNS_6SDNodeEj\", \"llvm::SelectionDAG::AssignOrdering(llvm::SDNode const*, unsigned int)\"},\n    {\"_ZNK4llvm12SelectionDAG11GetOrderingEPKNS_6SDNodeE\", \"llvm::SelectionDAG::GetOrdering(llvm::SDNode const*) const\"},\n    {\"_ZN4llvm12SelectionDAG11AddDbgValueEPNS_10SDDbgValueEPNS_6SDNodeEb\", \"llvm::SelectionDAG::AddDbgValue(llvm::SDDbgValue*, llvm::SDNode*, bool)\"},\n    {\"_ZN4llvm12SelectionDAG17TransferDbgValuesENS_7SDValueES1_\", \"llvm::SelectionDAG::TransferDbgValues(llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm12HandleSDNodeD2Ev\", \"llvm::HandleSDNode::~HandleSDNode()\"},\n    {\"_ZN4llvm19GlobalAddressSDNodeC2EjNS_8DebugLocEPKNS_11GlobalValueENS_3EVTExh\", \"llvm::GlobalAddressSDNode::GlobalAddressSDNode(unsigned int, llvm::DebugLoc, llvm::GlobalValue const*, llvm::EVT, long long, unsigned char)\"},\n    {\"_ZN4llvm9MemSDNodeC1EjNS_8DebugLocENS_8SDVTListENS_3EVTEPNS_17MachineMemOperandE\", \"llvm::MemSDNode::MemSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm9MemSDNodeC2EjNS_8DebugLocENS_8SDVTListENS_3EVTEPNS_17MachineMemOperandE\", \"llvm::MemSDNode::MemSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm9MemSDNodeC1EjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEjNS_3EVTEPNS_17MachineMemOperandE\", \"llvm::MemSDNode::MemSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm9MemSDNodeC2EjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEjNS_3EVTEPNS_17MachineMemOperandE\", \"llvm::MemSDNode::MemSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZNK4llvm6SDNode7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::SDNode::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm6SDNode15hasNUsesOfValueEjj\", \"llvm::SDNode::hasNUsesOfValue(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm6SDNode16hasAnyUseOfValueEj\", \"llvm::SDNode::hasAnyUseOfValue(unsigned int) const\"},\n    {\"_ZNK4llvm6SDNode12isOnlyUserOfEPS0_\", \"llvm::SDNode::isOnlyUserOf(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm7SDValue11isOperandOfEPNS_6SDNodeE\", \"llvm::SDValue::isOperandOf(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm6SDNode11isOperandOfEPS0_\", \"llvm::SDNode::isOperandOf(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm7SDValue30reachesChainWithoutSideEffectsES0_j\", \"llvm::SDValue::reachesChainWithoutSideEffects(llvm::SDValue, unsigned int) const\"},\n    {\"_ZNK4llvm6SDNode15isPredecessorOfEPS0_\", \"llvm::SDNode::isPredecessorOf(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm6SDNode21getConstantOperandValEj\", \"llvm::SDNode::getConstantOperandVal(unsigned int) const\"},\n    {\"_ZNK4llvm6SDNode16getOperationNameEPKNS_12SelectionDAGE\", \"llvm::SDNode::getOperationName(llvm::SelectionDAG const*) const\"},\n    {\"_ZN4llvm6SDNode18getIndexedModeNameENS_3ISD14MemIndexedModeE\", \"llvm::SDNode::getIndexedModeName(llvm::ISD::MemIndexedMode)\"},\n    {\"_ZN4llvm3ISD10ArgFlagsTy17getArgFlagsStringEv\", \"llvm::ISD::ArgFlagsTy::getArgFlagsString()\"},\n    {\"_ZNK4llvm6SDNode4dumpEv\", \"llvm::SDNode::dump() const\"},\n    {\"_ZNK4llvm6SDNode4dumpEPKNS_12SelectionDAGE\", \"llvm::SDNode::dump(llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode5printERNS_11raw_ostreamEPKNS_12SelectionDAGE\", \"llvm::SDNode::print(llvm::raw_ostream&, llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode11print_typesERNS_11raw_ostreamEPKNS_12SelectionDAGE\", \"llvm::SDNode::print_types(llvm::raw_ostream&, llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode13print_detailsERNS_11raw_ostreamEPKNS_12SelectionDAGE\", \"llvm::SDNode::print_details(llvm::raw_ostream&, llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode15printrWithDepthERNS_11raw_ostreamEPKNS_12SelectionDAGEj\", \"llvm::SDNode::printrWithDepth(llvm::raw_ostream&, llvm::SelectionDAG const*, unsigned int) const\"},\n    {\"_Z21printrWithDepthHelperRN4llvm11raw_ostreamEPKNS_6SDNodeEPKNS_12SelectionDAGEjj\", \"printrWithDepthHelper(llvm::raw_ostream&, llvm::SDNode const*, llvm::SelectionDAG const*, unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm6SDNode10printrFullERNS_11raw_ostreamEPKNS_12SelectionDAGE\", \"llvm::SDNode::printrFull(llvm::raw_ostream&, llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode14dumprWithDepthEPKNS_12SelectionDAGEj\", \"llvm::SDNode::dumprWithDepth(llvm::SelectionDAG const*, unsigned int) const\"},\n    {\"_ZNK4llvm6SDNode9dumprFullEPKNS_12SelectionDAGE\", \"llvm::SDNode::dumprFull(llvm::SelectionDAG const*) const\"},\n    {\"_ZN4llvm12SelectionDAG14UnrollVectorOpEPNS_6SDNodeEj\", \"llvm::SelectionDAG::UnrollVectorOp(llvm::SDNode*, unsigned int)\"},\n    {\"_ZNK4llvm12SelectionDAG17isConsecutiveLoadEPNS_10LoadSDNodeES2_ji\", \"llvm::SelectionDAG::isConsecutiveLoad(llvm::LoadSDNode*, llvm::LoadSDNode*, unsigned int, int) const\"},\n    {\"_ZNK4llvm12SelectionDAG17InferPtrAlignmentENS_7SDValueE\", \"llvm::SelectionDAG::InferPtrAlignment(llvm::SDValue) const\"},\n    {\"_ZNK4llvm12SelectionDAG4dumpEv\", \"llvm::SelectionDAG::dump() const\"},\n    {\"_Z9DumpNodesPKN4llvm6SDNodeEjPKNS_12SelectionDAGE\", \"DumpNodes(llvm::SDNode const*, unsigned int, llvm::SelectionDAG const*)\"},\n    {\"_ZNK4llvm6SDNode6printrERNS_11raw_ostreamEPKNS_12SelectionDAGE\", \"llvm::SDNode::printr(llvm::raw_ostream&, llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm6SDNode5dumprEv\", \"llvm::SDNode::dumpr() const\"},\n    {\"_Z10DumpNodesrRN4llvm11raw_ostreamEPKNS_6SDNodeEjPKNS_12SelectionDAGERNS_11SmallPtrSetIS4_Lj128EEE\", \"DumpNodesr(llvm::raw_ostream&, llvm::SDNode const*, unsigned int, llvm::SelectionDAG const*, llvm::SmallPtrSet<llvm::SDNode const*, 128u>&)\"},\n    {\"_ZNK4llvm6SDNode5dumprEPKNS_12SelectionDAGE\", \"llvm::SDNode::dumpr(llvm::SelectionDAG const*) const\"},\n    {\"_ZNK4llvm19GlobalAddressSDNode15getAddressSpaceEv\", \"llvm::GlobalAddressSDNode::getAddressSpace() const\"},\n    {\"_ZNK4llvm18ConstantPoolSDNode7getTypeEv\", \"llvm::ConstantPoolSDNode::getType() const\"},\n    {\"_ZN4llvm17BuildVectorSDNode15isConstantSplatERNS_5APIntES2_RjRbjb\", \"llvm::BuildVectorSDNode::isConstantSplat(llvm::APInt&, llvm::APInt&, unsigned int&, bool&, unsigned int, bool)\"},\n    {\"_ZN4llvm19ShuffleVectorSDNode11isSplatMaskEPKiNS_3EVTE\", \"llvm::ShuffleVectorSDNode::isSplatMask(int const*, llvm::EVT)\"},\n    {\"_ZN4llvm14checkForCyclesEPKNS_12SelectionDAGE\", \"llvm::checkForCycles(llvm::SelectionDAG const*)\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_18EVTArrayEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::EVTArray>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_18EVTArrayEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::EVTArray>::call(void*)\"},\n    {\"_ZSt16__introsort_loopIPN12_GLOBAL__N_17UseMemoElEvT_S3_T0_\", \"void std::__introsort_loop<(anonymous namespace)::UseMemo*, long>((anonymous namespace)::UseMemo*, (anonymous namespace)::UseMemo*, long)\"},\n    {\"_ZSt16__insertion_sortIPN12_GLOBAL__N_17UseMemoEEvT_S3_\", \"void std::__insertion_sort<(anonymous namespace)::UseMemo*>((anonymous namespace)::UseMemo*, (anonymous namespace)::UseMemo*)\"},\n    {\"_ZN12_GLOBAL__N_118RAUWUpdateListenerD0Ev\", \"(anonymous namespace)::RAUWUpdateListener::~RAUWUpdateListener()\"},\n    {\"_ZN12_GLOBAL__N_118RAUWUpdateListener11NodeDeletedEPN4llvm6SDNodeES3_\", \"(anonymous namespace)::RAUWUpdateListener::NodeDeleted(llvm::SDNode*, llvm::SDNode*)\"},\n    {\"_ZN12_GLOBAL__N_118RAUWUpdateListener11NodeUpdatedEPN4llvm6SDNodeE\", \"(anonymous namespace)::RAUWUpdateListener::NodeUpdated(llvm::SDNode*)\"},\n    {\"_Z24FindOptimalMemOpLoweringRSt6vectorIN4llvm3EVTESaIS1_EEjyjjbbRNS0_12SelectionDAGERKNS0_14TargetLoweringE\", \"FindOptimalMemOpLowering(std::vector<llvm::EVT, std::allocator<llvm::EVT> >&, unsigned int, unsigned long long, unsigned int, unsigned int, bool, bool, llvm::SelectionDAG&, llvm::TargetLowering const&)\"},\n    {\"_Z14getMemsetValueN4llvm7SDValueENS_3EVTERNS_12SelectionDAGENS_8DebugLocE\", \"getMemsetValue(llvm::SDValue, llvm::EVT, llvm::SelectionDAG&, llvm::DebugLoc)\"},\n    {\"_Z9SplatBytejh\", \"SplatByte(unsigned int, unsigned char)\"},\n    {\"_ZN4llvm10FoldingSetINS_6SDNodeEED1Ev\", \"llvm::FoldingSet<llvm::SDNode>::~FoldingSet()\"},\n    {\"_ZNSt3mapISt4pairISshEPN4llvm6SDNodeESt4lessIS1_ESaIS0_IKS1_S4_EEEixERS7_\", \"std::map<std::pair<std::string, unsigned char>, llvm::SDNode*, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::operator[](std::pair<std::string, unsigned char> const&)\"},\n    {\"_ZNK4llvm5APInt4sremERKS0_\", \"llvm::APInt::srem(llvm::APInt const&) const\"},\n    {\"_ZN4llvm9SDDbgInfo3addEPNS_10SDDbgValueEPKNS_6SDNodeEb\", \"llvm::SDDbgInfo::add(llvm::SDDbgValue*, llvm::SDNode const*, bool)\"},\n    {\"_ZN4llvm6SDNodeC2EjNS_8DebugLocENS_8SDVTListEPKNS_7SDValueEj\", \"llvm::SDNode::SDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue const*, unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm3EVTESaIS1_EE7reserveEm\", \"std::vector<llvm::EVT, std::allocator<llvm::EVT> >::reserve(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTES1_St9_IdentityIS1_ENS1_14compareRawBitsESaIS1_EE16_M_insert_uniqueERKS1_\", \"std::_Rb_tree<llvm::EVT, llvm::EVT, std::_Identity<llvm::EVT>, llvm::EVT::compareRawBits, std::allocator<llvm::EVT> >::_M_insert_unique(llvm::EVT const&)\"},\n    {\"_ZN4llvm14object_creatorISt3setINS_3EVTENS2_14compareRawBitsESaIS2_EEEEPvv\", \"void* llvm::object_creator<std::set<llvm::EVT, llvm::EVT::compareRawBits, std::allocator<llvm::EVT> > >()\"},\n    {\"_ZN4llvm14object_deleterISt3setINS_3EVTENS2_14compareRawBitsESaIS2_EEE4callEPv\", \"llvm::object_deleter<std::set<llvm::EVT, llvm::EVT::compareRawBits, std::allocator<llvm::EVT> > >::call(void*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTES1_St9_IdentityIS1_ENS1_14compareRawBitsESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E\", \"std::_Rb_tree<llvm::EVT, llvm::EVT, std::_Identity<llvm::EVT>, llvm::EVT::compareRawBits, std::allocator<llvm::EVT> >::_M_erase(std::_Rb_tree_node<llvm::EVT>*)\"},\n    {\"_ZNSt6vectorIN4llvm8SDVTListESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::SDVTList, std::allocator<llvm::SDVTList> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SDVTList*, std::vector<llvm::SDVTList, std::allocator<llvm::SDVTList> > >, llvm::SDVTList const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_3EVTELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::EVT, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIPN4llvm14CondCodeSDNodeESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::CondCodeSDNode*, std::allocator<llvm::CondCodeSDNode*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::CondCodeSDNode**, std::vector<llvm::CondCodeSDNode*, std::allocator<llvm::CondCodeSDNode*> > >, unsigned long, llvm::CondCodeSDNode* const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::_M_insert_unique(std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE11lower_boundERS2_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::lower_bound(std::pair<std::string, unsigned char> const&)\"},\n    {\"_ZN4llvm9StringMapIPNS_6SDNodeENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::SDNode*>& llvm::StringMap<llvm::SDNode*, llvm::MallocAllocator>::GetOrCreateValue<llvm::SDNode*>(llvm::StringRef, llvm::SDNode*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTESt4pairIKS1_PNS0_6SDNodeEESt10_Select1stIS6_ENS1_14compareRawBitsESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::EVT, std::pair<llvm::EVT const, llvm::SDNode*>, std::_Select1st<std::pair<llvm::EVT const, llvm::SDNode*> >, llvm::EVT::compareRawBits, std::allocator<std::pair<llvm::EVT const, llvm::SDNode*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::EVT const, llvm::SDNode*> >, std::pair<llvm::EVT const, llvm::SDNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTESt4pairIKS1_PNS0_6SDNodeEESt10_Select1stIS6_ENS1_14compareRawBitsESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::EVT, std::pair<llvm::EVT const, llvm::SDNode*>, std::_Select1st<std::pair<llvm::EVT const, llvm::SDNode*> >, llvm::EVT::compareRawBits, std::allocator<std::pair<llvm::EVT const, llvm::SDNode*> > >::_M_insert_unique(std::pair<llvm::EVT const, llvm::SDNode*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm6SDNodeESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > >, unsigned long, llvm::SDNode* const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTESt4pairIKS1_PNS0_6SDNodeEESt10_Select1stIS6_ENS1_14compareRawBitsESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::EVT, std::pair<llvm::EVT const, llvm::SDNode*>, std::_Select1st<std::pair<llvm::EVT const, llvm::SDNode*> >, llvm::EVT::compareRawBits, std::allocator<std::pair<llvm::EVT const, llvm::SDNode*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::EVT const, llvm::SDNode*> >*)\"},\n    {\"_ZN4llvm10FoldingSetINS_6SDNodeEED0Ev\", \"llvm::FoldingSet<llvm::SDNode>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_6SDNodeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::SDNode>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_6SDNodeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS6_\", \"llvm::FoldingSet<llvm::SDNode>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_6SDNodeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::SDNode>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3EVTESt4pairIKS1_PNS0_6SDNodeEESt10_Select1stIS6_ENS1_14compareRawBitsESaIS6_EE5eraseESt17_Rb_tree_iteratorIS6_ESD_\", \"std::_Rb_tree<llvm::EVT, std::pair<llvm::EVT const, llvm::SDNode*>, std::_Select1st<std::pair<llvm::EVT const, llvm::SDNode*> >, llvm::EVT::compareRawBits, std::allocator<std::pair<llvm::EVT const, llvm::SDNode*> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::EVT const, llvm::SDNode*> >, std::_Rb_tree_iterator<std::pair<llvm::EVT const, llvm::SDNode*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE5eraseESt17_Rb_tree_iteratorIS6_ESE_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::_Rb_tree_iterator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairISshES0_IKS1_PN4llvm6SDNodeEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE11upper_boundERS2_\", \"std::_Rb_tree<std::pair<std::string, unsigned char>, std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*>, std::_Select1st<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> >, std::less<std::pair<std::string, unsigned char> >, std::allocator<std::pair<std::pair<std::string, unsigned char> const, llvm::SDNode*> > >::upper_bound(std::pair<std::string, unsigned char> const&)\"},\n    {\"_ZN4llvm11SmallVectorIPNS_6SDNodeELj16EEC2EjRKS2_\", \"llvm::SmallVector<llvm::SDNode*, 16u>::SmallVector(unsigned int, llvm::SDNode* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeENS_11SmallVectorIPNS_10SDDbgValueELj2EEENS_12DenseMapInfoIS3_EENS8_IS7_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u>, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<llvm::SDDbgValue*, 2u> > >::FindAndConstruct(llvm::SDNode const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeENS_11SmallVectorIPNS_10SDDbgValueELj2EEENS_12DenseMapInfoIS3_EENS8_IS7_EEE16InsertIntoBucketERKS3_RKS7_PSt4pairIS3_S7_E\", \"llvm::DenseMap<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u>, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<llvm::SDDbgValue*, 2u> > >::InsertIntoBucket(llvm::SDNode const* const&, llvm::SmallVector<llvm::SDDbgValue*, 2u> const&, std::pair<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeENS_11SmallVectorIPNS_10SDDbgValueELj2EEENS_12DenseMapInfoIS3_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u>, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<llvm::SDDbgValue*, 2u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_10SDDbgValueEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::SDDbgValue*>::operator=(llvm::SmallVectorImpl<llvm::SDDbgValue*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::SDNode const*, unsigned int, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::SDNode const* const&, unsigned int const&, std::pair<llvm::SDNode const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::SDNode const*, unsigned int, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12LSBaseSDNodeC2ENS_3ISD8NodeTypeENS_8DebugLocEPNS_7SDValueEjNS_8SDVTListENS1_14MemIndexedModeENS_3EVTEPNS_17MachineMemOperandE\", \"llvm::LSBaseSDNode::LSBaseSDNode(llvm::ISD::NodeType, llvm::DebugLoc, llvm::SDValue*, unsigned int, llvm::SDVTList, llvm::ISD::MemIndexedMode, llvm::EVT, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12AtomicSDNodeC2EjNS_8DebugLocENS_8SDVTListENS_3EVTENS_7SDValueES4_S4_PNS_17MachineMemOperandE\", \"llvm::AtomicSDNode::AtomicSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm12AtomicSDNodeC2EjNS_8DebugLocENS_8SDVTListENS_3EVTENS_7SDValueES4_S4_S4_PNS_17MachineMemOperandE\", \"llvm::AtomicSDNode::AtomicSDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*)\"},\n    {\"_ZN4llvm13TernarySDNodeC2EjNS_8DebugLocENS_8SDVTListENS_7SDValueES3_S3_\", \"llvm::TernarySDNode::TernarySDNode(unsigned int, llvm::DebugLoc, llvm::SDVTList, llvm::SDValue, llvm::SDValue, llvm::SDValue)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeENS_11SmallVectorIPNS_10SDDbgValueELj2EEENS_12DenseMapInfoIS3_EENS8_IS7_EEE5clearEv\", \"llvm::DenseMap<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u>, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<llvm::SDDbgValue*, 2u> > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeENS_11SmallVectorIPNS_10SDDbgValueELj2EEENS_12DenseMapInfoIS3_EENS8_IS7_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SDNode const*, llvm::SmallVector<llvm::SDDbgValue*, 2u>, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<llvm::SDDbgValue*, 2u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6SDNodeEjNS_12DenseMapInfoIS3_EENS4_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SDNode const*, unsigned int, llvm::DenseMapInfo<llvm::SDNode const*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm19SelectionDAGBuilder4initEPNS_14GCFunctionInfoERNS_13AliasAnalysisE\", \"llvm::SelectionDAGBuilder::init(llvm::GCFunctionInfo*, llvm::AliasAnalysis&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder5clearEv\", \"llvm::SelectionDAGBuilder::clear()\"},\n    {\"_ZN4llvm19SelectionDAGBuilder7getRootEv\", \"llvm::SelectionDAGBuilder::getRoot()\"},\n    {\"_ZN4llvm19SelectionDAGBuilder14getControlRootEv\", \"llvm::SelectionDAGBuilder::getControlRoot()\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20AssignOrderingToNodeEPKNS_6SDNodeE\", \"llvm::SelectionDAGBuilder::AssignOrderingToNode(llvm::SDNode const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder5visitERKNS_11InstructionE\", \"llvm::SelectionDAGBuilder::visit(llvm::Instruction const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder31HandlePHINodesInSuccessorBlocksEPKNS_10BasicBlockE\", \"llvm::SelectionDAGBuilder::HandlePHINodesInSuccessorBlocks(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder5visitEjRKNS_4UserE\", \"llvm::SelectionDAGBuilder::visit(unsigned int, llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder24CopyToExportRegsIfNeededEPKNS_5ValueE\", \"llvm::SelectionDAGBuilder::CopyToExportRegsIfNeeded(llvm::Value const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8visitPHIERKNS_7PHINodeE\", \"llvm::SelectionDAGBuilder::visitPHI(llvm::PHINode const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8visitRetERKNS_10ReturnInstE\", \"llvm::SelectionDAGBuilder::visitRet(llvm::ReturnInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder7visitBrERKNS_10BranchInstE\", \"llvm::SelectionDAGBuilder::visitBr(llvm::BranchInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitSwitchERKNS_10SwitchInstE\", \"llvm::SelectionDAGBuilder::visitSwitch(llvm::SwitchInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder15visitIndirectBrERKNS_14IndirectBrInstE\", \"llvm::SelectionDAGBuilder::visitIndirectBr(llvm::IndirectBrInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitInvokeERKNS_10InvokeInstE\", \"llvm::SelectionDAGBuilder::visitInvoke(llvm::InvokeInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitUnwindERKNS_10UnwindInstE\", \"llvm::SelectionDAGBuilder::visitUnwind(llvm::UnwindInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitFSubERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFSub(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitAllocaERKNS_10AllocaInstE\", \"llvm::SelectionDAGBuilder::visitAlloca(llvm::AllocaInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitLoadERKNS_8LoadInstE\", \"llvm::SelectionDAGBuilder::visitLoad(llvm::LoadInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitStoreERKNS_9StoreInstE\", \"llvm::SelectionDAGBuilder::visitStore(llvm::StoreInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18visitGetElementPtrERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitGetElementPtr(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitTruncERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitTrunc(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitZExtERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitZExt(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitSExtERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitSExt(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitFPToUIERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFPToUI(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitFPToSIERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFPToSI(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitUIToFPERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitUIToFP(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitSIToFPERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitSIToFP(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12visitFPTruncERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFPTrunc(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitFPExtERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFPExt(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder13visitPtrToIntERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitPtrToInt(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder13visitIntToPtrERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitIntToPtr(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12visitBitCastERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitBitCast(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitICmpERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitICmp(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitFCmpERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitFCmp(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitCallERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitSelectERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitSelect(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitVAArgERKNS_9VAArgInstE\", \"llvm::SelectionDAGBuilder::visitVAArg(llvm::VAArgInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder19visitExtractElementERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitExtractElement(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18visitInsertElementERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitInsertElement(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18visitShuffleVectorERKNS_4UserE\", \"llvm::SelectionDAGBuilder::visitShuffleVector(llvm::User const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder17visitExtractValueERKNS_16ExtractValueInstE\", \"llvm::SelectionDAGBuilder::visitExtractValue(llvm::ExtractValueInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder16visitInsertValueERKNS_15InsertValueInstE\", \"llvm::SelectionDAGBuilder::visitInsertValue(llvm::InsertValueInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8getValueEPKNS_5ValueE\", \"llvm::SelectionDAGBuilder::getValue(llvm::Value const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder24resolveDanglingDebugInfoEPKNS_5ValueENS_7SDValueE\", \"llvm::SelectionDAGBuilder::resolveDanglingDebugInfo(llvm::Value const*, llvm::SDValue)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder24EmitFuncArgumentDbgValueEPKNS_5ValueEPNS_6MDNodeExRKNS_7SDValueE\", \"llvm::SelectionDAGBuilder::EmitFuncArgumentDbgValue(llvm::Value const*, llvm::MDNode*, long long, llvm::SDValue const&)\"},\n    {\"_ZN12_GLOBAL__N_112RegsForValueC1ERN4llvm11LLVMContextERKNS1_14TargetLoweringEjPKNS1_4TypeE\", \"(anonymous namespace)::RegsForValue::RegsForValue(llvm::LLVMContext&, llvm::TargetLowering const&, unsigned int, llvm::Type const*)\"},\n    {\"_ZNK12_GLOBAL__N_112RegsForValue15getCopyFromRegsERN4llvm12SelectionDAGERNS1_20FunctionLoweringInfoENS1_8DebugLocERNS1_7SDValueEPS7_\", \"(anonymous namespace)::RegsForValue::getCopyFromRegs(llvm::SelectionDAG&, llvm::FunctionLoweringInfo&, llvm::DebugLoc, llvm::SDValue&, llvm::SDValue*) const\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12getValueImplEPKNS_5ValueE\", \"llvm::SelectionDAGBuilder::getValueImpl(llvm::Value const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder19getNonRegisterValueEPKNS_5ValueE\", \"llvm::SelectionDAGBuilder::getNonRegisterValue(llvm::Value const*)\"},\n    {\"_Z14getCopyToPartsRN4llvm12SelectionDAGENS_8DebugLocENS_7SDValueEPS3_jNS_3EVTENS_3ISD8NodeTypeE\", \"getCopyToParts(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue*, unsigned int, llvm::EVT, llvm::ISD::NodeType)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder26CopyValueToVirtualRegisterEPKNS_5ValueEj\", \"llvm::SelectionDAGBuilder::CopyValueToVirtualRegister(llvm::Value const*, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder22ExportFromCurrentBlockEPKNS_5ValueE\", \"llvm::SelectionDAGBuilder::ExportFromCurrentBlock(llvm::Value const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder28isExportableFromCurrentBlockEPKNS_5ValueEPKNS_10BasicBlockE\", \"llvm::SelectionDAGBuilder::isExportableFromCurrentBlock(llvm::Value const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder28EmitBranchForMergedConditionEPKNS_5ValueEPNS_17MachineBasicBlockES5_S5_S5_\", \"llvm::SelectionDAGBuilder::EmitBranchForMergedCondition(llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20FindMergedConditionsEPKNS_5ValueEPNS_17MachineBasicBlockES5_S5_S5_j\", \"llvm::SelectionDAGBuilder::FindMergedConditions(llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20ShouldEmitAsBranchesERKSt6vectorINS0_9CaseBlockESaIS2_EE\", \"llvm::SelectionDAGBuilder::ShouldEmitAsBranches(std::vector<llvm::SelectionDAGBuilder::CaseBlock, std::allocator<llvm::SelectionDAGBuilder::CaseBlock> > const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder15visitSwitchCaseERNS0_9CaseBlockEPNS_17MachineBasicBlockE\", \"llvm::SelectionDAGBuilder::visitSwitchCase(llvm::SelectionDAGBuilder::CaseBlock&, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder14visitJumpTableERNS0_9JumpTableE\", \"llvm::SelectionDAGBuilder::visitJumpTable(llvm::SelectionDAGBuilder::JumpTable&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20visitJumpTableHeaderERNS0_9JumpTableERNS0_15JumpTableHeaderEPNS_17MachineBasicBlockE\", \"llvm::SelectionDAGBuilder::visitJumpTableHeader(llvm::SelectionDAGBuilder::JumpTable&, llvm::SelectionDAGBuilder::JumpTableHeader&, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18visitBitTestHeaderERNS0_12BitTestBlockEPNS_17MachineBasicBlockE\", \"llvm::SelectionDAGBuilder::visitBitTestHeader(llvm::SelectionDAGBuilder::BitTestBlock&, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder16visitBitTestCaseERNS0_12BitTestBlockEPNS_17MachineBasicBlockEjRNS0_11BitTestCaseES4_\", \"llvm::SelectionDAGBuilder::visitBitTestCase(llvm::SelectionDAGBuilder::BitTestBlock&, llvm::MachineBasicBlock*, unsigned int, llvm::SelectionDAGBuilder::BitTestCase&, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder14visitInlineAsmENS_17ImmutableCallSiteE\", \"llvm::SelectionDAGBuilder::visitInlineAsm(llvm::ImmutableCallSite)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11LowerCallToENS_17ImmutableCallSiteENS_7SDValueEbPNS_17MachineBasicBlockE\", \"llvm::SelectionDAGBuilder::LowerCallTo(llvm::ImmutableCallSite, llvm::SDValue, bool, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder22handleSmallSwitchRangeERNS0_7CaseRecERSt6vectorIS1_SaIS1_EEPKNS_5ValueEPNS_17MachineBasicBlockESB_\", \"llvm::SelectionDAGBuilder::handleSmallSwitchRange(llvm::SelectionDAGBuilder::CaseRec&, std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> >&, llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18handleJTSwitchCaseERNS0_7CaseRecERSt6vectorIS1_SaIS1_EEPKNS_5ValueEPNS_17MachineBasicBlockESB_\", \"llvm::SelectionDAGBuilder::handleJTSwitchCase(llvm::SelectionDAGBuilder::CaseRec&, std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> >&, llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_Z12ComputeRangeRKN4llvm5APIntES2_\", \"ComputeRange(llvm::APInt const&, llvm::APInt const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder23handleBTSplitSwitchCaseERNS0_7CaseRecERSt6vectorIS1_SaIS1_EEPKNS_5ValueEPNS_17MachineBasicBlockESB_\", \"llvm::SelectionDAGBuilder::handleBTSplitSwitchCase(llvm::SelectionDAGBuilder::CaseRec&, std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> >&, llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder24handleBitTestsSwitchCaseERNS0_7CaseRecERSt6vectorIS1_SaIS1_EEPKNS_5ValueEPNS_17MachineBasicBlockESB_\", \"llvm::SelectionDAGBuilder::handleBitTestsSwitchCase(llvm::SelectionDAGBuilder::CaseRec&, std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> >&, llvm::Value const*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10ClusterifyERSt6vectorINS0_4CaseESaIS2_EERKNS_10SwitchInstE\", \"llvm::SelectionDAGBuilder::Clusterify(std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> >&, llvm::SwitchInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder16UpdateSplitBlockEPNS_17MachineBasicBlockES2_\", \"llvm::SelectionDAGBuilder::UpdateSplitBlock(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitBinaryERKNS_4UserEj\", \"llvm::SelectionDAGBuilder::visitBinary(llvm::User const&, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitShiftERKNS_4UserEj\", \"llvm::SelectionDAGBuilder::visitShift(llvm::User const&, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20visitTargetIntrinsicERKNS_8CallInstEj\", \"llvm::SelectionDAGBuilder::visitTargetIntrinsic(llvm::CallInst const&, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder21implVisitBinaryAtomicERKNS_8CallInstENS_3ISD8NodeTypeE\", \"llvm::SelectionDAGBuilder::implVisitBinaryAtomic(llvm::CallInst const&, llvm::ISD::NodeType)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20implVisitAluOverflowERKNS_8CallInstENS_3ISD8NodeTypeE\", \"llvm::SelectionDAGBuilder::implVisitAluOverflow(llvm::CallInst const&, llvm::ISD::NodeType)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8visitExpERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitExp(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8visitLogERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitLog(llvm::CallInst const&)\"},\n    {\"_Z11GetExponentRN4llvm12SelectionDAGENS_7SDValueERKNS_14TargetLoweringENS_8DebugLocE\", \"GetExponent(llvm::SelectionDAG&, llvm::SDValue, llvm::TargetLowering const&, llvm::DebugLoc)\"},\n    {\"_Z14GetSignificandRN4llvm12SelectionDAGENS_7SDValueENS_8DebugLocE\", \"GetSignificand(llvm::SelectionDAG&, llvm::SDValue, llvm::DebugLoc)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitLog2ERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitLog2(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitLog10ERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitLog10(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder9visitExp2ERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitExp2(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder8visitPowERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitPow(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder18visitIntrinsicCallERKNS_8CallInstEj\", \"llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12visitVAStartERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitVAStart(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder10visitVAEndERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitVAEnd(llvm::CallInst const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder11visitVACopyERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitVACopy(llvm::CallInst const&)\"},\n    {\"_ZNK4llvm14TargetLowering11LowerCallToENS_7SDValueEPKNS_4TypeEbbbbjNS_11CallingConv2IDEbbS1_RSt6vectorINS0_12ArgListEntryESaIS8_EERNS_12SelectionDAGENS_8DebugLocE\", \"llvm::TargetLowering::LowerCallTo(llvm::SDValue, llvm::Type const*, bool, bool, bool, bool, unsigned int, llvm::CallingConv::ID, bool, bool, llvm::SDValue, std::vector<llvm::TargetLowering::ArgListEntry, std::allocator<llvm::TargetLowering::ArgListEntry> >&, llvm::SelectionDAG&, llvm::DebugLoc) const\"},\n    {\"_Z16getCopyFromPartsRN4llvm12SelectionDAGENS_8DebugLocEPKNS_7SDValueEjNS_3EVTES6_NS_3ISD8NodeTypeE\", \"getCopyFromParts(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue const*, unsigned int, llvm::EVT, llvm::EVT, llvm::ISD::NodeType)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder15visitMemCmpCallERKNS_8CallInstE\", \"llvm::SelectionDAGBuilder::visitMemCmpCall(llvm::CallInst const&)\"},\n    {\"_Z13getMemCmpLoadPKN4llvm5ValueENS_3MVTEPKNS_4TypeERNS_19SelectionDAGBuilderE\", \"getMemCmpLoad(llvm::Value const*, llvm::MVT, llvm::Type const*, llvm::SelectionDAGBuilder&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder20GetRegistersForValueERNS_20SDISelAsmOperandInfoERSt3setIjSt4lessIjESaIjEES8_\", \"llvm::SelectionDAGBuilder::GetRegistersForValue(llvm::SDISelAsmOperandInfo&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&)\"},\n    {\"_ZN12_GLOBAL__N_112RegsForValueC1ERKN4llvm11SmallVectorIjLj4EEENS1_3EVTES6_\", \"(anonymous namespace)::RegsForValue::RegsForValue(llvm::SmallVector<unsigned int, 4u> const&, llvm::EVT, llvm::EVT)\"},\n    {\"_ZNK12_GLOBAL__N_112RegsForValue20AddInlineAsmOperandsEjbjRN4llvm12SelectionDAGERSt6vectorINS1_7SDValueESaIS5_EE\", \"(anonymous namespace)::RegsForValue::AddInlineAsmOperands(unsigned int, bool, unsigned int, llvm::SelectionDAG&, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&) const\"},\n    {\"_ZNK12_GLOBAL__N_112RegsForValue13getCopyToRegsEN4llvm7SDValueERNS1_12SelectionDAGENS1_8DebugLocERS2_PS2_\", \"(anonymous namespace)::RegsForValue::getCopyToRegs(llvm::SDValue, llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue&, llvm::SDValue*) const\"},\n    {\"_ZNK4llvm14TargetLowering21LowerOperationWrapperEPNS_6SDNodeERNS_15SmallVectorImplINS_7SDValueEEERNS_12SelectionDAGE\", \"llvm::TargetLowering::LowerOperationWrapper(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering14LowerOperationENS_7SDValueERNS_12SelectionDAGE\", \"llvm::TargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZN4llvm16SelectionDAGISel14LowerArgumentsEPKNS_10BasicBlockE\", \"llvm::SelectionDAGISel::LowerArguments(llvm::BasicBlock const*)\"},\n    {\"_ZSt22__uninitialized_copy_aIPSt4pairIN12_GLOBAL__N_112RegsForValueEPN4llvm5ValueEES7_S6_ET0_T_S9_S8_SaIT1_E\", \"std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>* std::__uninitialized_copy_a<std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>*, std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>*, std::pair<(anonymous namespace)::RegsForValue, llvm::Value*> >(std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>*, std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>*, std::pair<(anonymous namespace)::RegsForValue, llvm::Value*>*, std::allocator<std::pair<(anonymous namespace)::RegsForValue, llvm::Value*> >)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIPNS_10BasicBlockEEEiPKvS4_\", \"int llvm::array_pod_sort_comparator<llvm::BasicBlock*>(void const*, void const*)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12visitUserOp1ERKNS_11InstructionE\", \"llvm::SelectionDAGBuilder::visitUserOp1(llvm::Instruction const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12visitUserOp2ERKNS_11InstructionE\", \"llvm::SelectionDAGBuilder::visitUserOp2(llvm::Instruction const&)\"},\n    {\"_ZN4llvm20FunctionLoweringInfo21InitializeRegForValueEPKNS_5ValueE\", \"llvm::FunctionLoweringInfo::InitializeRegForValue(llvm::Value const*)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm19SelectionDAGBuilder15JumpTableHeaderENS2_9JumpTableEESaIS5_EE9push_backERKS5_\", \"std::vector<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>, std::allocator<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> > >::push_back(std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> const&)\"},\n    {\"_ZNK4llvm5APInt3ugeEy\", \"llvm::APInt::uge(unsigned long long) const\"},\n    {\"_ZNK4llvm5APInt3sltEy\", \"llvm::APInt::slt(unsigned long long) const\"},\n    {\"_ZN4llvm17MachineModuleInfo18setVariableDbgInfoEPNS_6MDNodeEjNS_8DebugLocE\", \"llvm::MachineModuleInfo::setVariableDbgInfo(llvm::MDNode*, unsigned int, llvm::DebugLoc)\"},\n    {\"_ZNSt6vectorIN4llvm14TargetLowering12ArgListEntryESaIS2_EE7reserveEm\", \"std::vector<llvm::TargetLowering::ArgListEntry, std::allocator<llvm::TargetLowering::ArgListEntry> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm8po_beginIPKNS_4TypeEEENS_11po_iteratorIT_NS_11SmallPtrSetIPNS_11GraphTraitsIS5_E8NodeTypeELj8EEELb0ES8_EES5_\", \"llvm::po_iterator<llvm::Type const*, llvm::SmallPtrSet<llvm::GraphTraits<llvm::Type const*>::NodeType*, 8u>, false, llvm::GraphTraits<llvm::Type const*> > llvm::po_begin<llvm::Type const*>(llvm::Type const*)\"},\n    {\"_ZNK4llvm20SDISelAsmOperandInfo17MarkAllocatedRegsEbbRSt3setIjSt4lessIjESaIjEES6_RKNS_18TargetRegisterInfoE\", \"llvm::SDISelAsmOperandInfo::MarkAllocatedRegs(bool, bool, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&, llvm::TargetRegisterInfo const&) const\"},\n    {\"_ZNK4llvm20SDISelAsmOperandInfo20getCallOperandValEVTERNS_11LLVMContextERKNS_14TargetLoweringEPKNS_10DataLayoutE\", \"llvm::SDISelAsmOperandInfo::getCallOperandValEVT(llvm::LLVMContext&, llvm::TargetLowering const&, llvm::DataLayout const*) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ConstantEjNS_12DenseMapInfoIS3_EENS4_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Constant const*, unsigned int, llvm::DenseMapInfo<llvm::Constant const*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm12MachineInstrEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::MachineInstr*, unsigned int>, std::allocator<std::pair<llvm::MachineInstr*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::MachineInstr*, unsigned int>*, std::vector<std::pair<llvm::MachineInstr*, unsigned int>, std::allocator<std::pair<llvm::MachineInstr*, unsigned int> > > >, std::pair<llvm::MachineInstr*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ConstantEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::Constant const*, unsigned int, llvm::DenseMapInfo<llvm::Constant const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Constant const* const&, unsigned int const&, std::pair<llvm::Constant const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8ConstantEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::Constant const*, unsigned int, llvm::DenseMapInfo<llvm::Constant const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_3ISD8InputArgELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::ISD::InputArg, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm7SDValueEPKNS1_5ValueEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<llvm::SDValue, llvm::Value const*>, std::allocator<std::pair<llvm::SDValue, llvm::Value const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::SDValue, llvm::Value const*>*, std::vector<std::pair<llvm::SDValue, llvm::Value const*>, std::allocator<std::pair<llvm::SDValue, llvm::Value const*> > > >, std::pair<llvm::SDValue, llvm::Value const*> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_20SDISelAsmOperandInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SDISelAsmOperandInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm20SDISelAsmOperandInfoC2ERKS0_\", \"llvm::SDISelAsmOperandInfo::SDISelAsmOperandInfo(llvm::SDISelAsmOperandInfo const&)\"},\n    {\"_ZN4llvm11po_iteratorIPKNS_4TypeENS_11SmallPtrSetIS3_Lj8EEELb0ENS_11GraphTraitsIS3_EEE13traverseChildEv\", \"llvm::po_iterator<llvm::Type const*, llvm::SmallPtrSet<llvm::Type const*, 8u>, false, llvm::GraphTraits<llvm::Type const*> >::traverseChild()\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm4TypeEPNS1_12PATypeHandleEESaIS7_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<std::pair<llvm::Type const*, llvm::PATypeHandle*>, std::allocator<std::pair<llvm::Type const*, llvm::PATypeHandle*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Type const*, llvm::PATypeHandle*>*, std::vector<std::pair<llvm::Type const*, llvm::PATypeHandle*>, std::allocator<std::pair<llvm::Type const*, llvm::PATypeHandle*> > > >, std::pair<llvm::Type const*, llvm::PATypeHandle*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10AllocaInstEiNS_12DenseMapInfoIS3_EENS4_IiEEE16InsertIntoBucketERKS3_RKiPSt4pairIS3_iE\", \"llvm::DenseMap<llvm::AllocaInst const*, int, llvm::DenseMapInfo<llvm::AllocaInst const*>, llvm::DenseMapInfo<int> >::InsertIntoBucket(llvm::AllocaInst const* const&, int const&, std::pair<llvm::AllocaInst const*, int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10AllocaInstEiNS_12DenseMapInfoIS3_EENS4_IiEEE4growEj\", \"llvm::DenseMap<llvm::AllocaInst const*, int, llvm::DenseMapInfo<llvm::AllocaInst const*>, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEElNS3_7CaseCmpEEvT_SB_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, long, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, long, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEENS3_7CaseCmpEEvT_SB_T0_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEENS3_7CaseCmpEEvT_SB_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEES4_NS3_7CaseCmpEET_SB_SB_T0_T1_\", \"__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > > std::__unguarded_partition<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::Case, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::Case, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEENS3_7CaseCmpEEvT_SB_SB_T0_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder4CaseESt6vectorIS4_SaIS4_EEEElS4_NS3_7CaseCmpEEvT_T0_SC_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, long, llvm::SelectionDAGBuilder::Case, llvm::SelectionDAGBuilder::CaseCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, long, long, llvm::SelectionDAGBuilder::Case, llvm::SelectionDAGBuilder::CaseCmp)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder4CaseESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::Case*, std::vector<llvm::SelectionDAGBuilder::Case, std::allocator<llvm::SelectionDAGBuilder::Case> > >, llvm::SelectionDAGBuilder::Case const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorIN4llvm19SelectionDAGBuilder12BitTestBlockEE9constructEPS3_RKS3_\", \"__gnu_cxx::new_allocator<llvm::SelectionDAGBuilder::BitTestBlock>::construct(llvm::SelectionDAGBuilder::BitTestBlock*, llvm::SelectionDAGBuilder::BitTestBlock const&)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder12BitTestBlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SelectionDAGBuilder::BitTestBlock, std::allocator<llvm::SelectionDAGBuilder::BitTestBlock> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::BitTestBlock*, std::vector<llvm::SelectionDAGBuilder::BitTestBlock, std::allocator<llvm::SelectionDAGBuilder::BitTestBlock> > >, llvm::SelectionDAGBuilder::BitTestBlock const&)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12BitTestBlockaSERKS1_\", \"llvm::SelectionDAGBuilder::BitTestBlock::operator=(llvm::SelectionDAGBuilder::BitTestBlock const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN4llvm19SelectionDAGBuilder12BitTestBlockES3_ET0_T_S5_S4_St12__false_type\", \"llvm::SelectionDAGBuilder::BitTestBlock* std::__uninitialized_copy_aux<llvm::SelectionDAGBuilder::BitTestBlock*, llvm::SelectionDAGBuilder::BitTestBlock*>(llvm::SelectionDAGBuilder::BitTestBlock*, llvm::SelectionDAGBuilder::BitTestBlock*, llvm::SelectionDAGBuilder::BitTestBlock*, std::__false_type)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_19SelectionDAGBuilder11BitTestCaseEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::SelectionDAGBuilder::BitTestCase>::operator=(llvm::SmallVectorImpl<llvm::SelectionDAGBuilder::BitTestCase> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_19SelectionDAGBuilder11BitTestCaseELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SelectionDAGBuilder::BitTestCase, false>::grow(unsigned long)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder8CaseBitsESt6vectorIS4_SaIS4_EEEElNS3_11CaseBitsCmpEEvT_SB_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, long, llvm::SelectionDAGBuilder::CaseBitsCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, long, llvm::SelectionDAGBuilder::CaseBitsCmp)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder8CaseBitsESt6vectorIS4_SaIS4_EEEENS3_11CaseBitsCmpEEvT_SB_T0_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder8CaseBitsESt6vectorIS4_SaIS4_EEEENS3_11CaseBitsCmpEEvT_SB_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder8CaseBitsESt6vectorIS4_SaIS4_EEEENS3_11CaseBitsCmpEEvT_SB_SB_T0_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp)\"},\n    {\"_ZSt9sort_heapIN9__gnu_cxx17__normal_iteratorIPN4llvm19SelectionDAGBuilder8CaseBitsESt6vectorIS4_SaIS4_EEEENS3_11CaseBitsCmpEEvT_SB_T0_\", \"void std::sort_heap<__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp>(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, __gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBitsCmp)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder8CaseBitsESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBits*, std::vector<llvm::SelectionDAGBuilder::CaseBits, std::allocator<llvm::SelectionDAGBuilder::CaseBits> > >, llvm::SelectionDAGBuilder::CaseBits const&)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder7CaseRecESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseRec*, std::vector<llvm::SelectionDAGBuilder::CaseRec, std::allocator<llvm::SelectionDAGBuilder::CaseRec> > >, llvm::SelectionDAGBuilder::CaseRec const&)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm19SelectionDAGBuilder15JumpTableHeaderENS2_9JumpTableEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>, std::allocator<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::vector<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>, std::allocator<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> > > >, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPSt4pairIN4llvm19SelectionDAGBuilder15JumpTableHeaderENS2_9JumpTableEES6_ET0_T_S8_S7_St12__false_type\", \"std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>* std::__uninitialized_copy_aux<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*>(std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::__false_type)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm19SelectionDAGBuilder15JumpTableHeaderENS5_9JumpTableEES9_EET0_T_SB_SA_\", \"std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*>(std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*, std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>*)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder9CaseBlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SelectionDAGBuilder::CaseBlock, std::allocator<llvm::SelectionDAGBuilder::CaseBlock> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SelectionDAGBuilder::CaseBlock*, std::vector<llvm::SelectionDAGBuilder::CaseBlock, std::allocator<llvm::SelectionDAGBuilder::CaseBlock> > >, llvm::SelectionDAGBuilder::CaseBlock const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_19SelectionDAGBuilder17DanglingDebugInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::Value const*, llvm::SelectionDAGBuilder::DanglingDebugInfo, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SelectionDAGBuilder::DanglingDebugInfo> >::InsertIntoBucket(llvm::Value const* const&, llvm::SelectionDAGBuilder::DanglingDebugInfo const&, std::pair<llvm::Value const*, llvm::SelectionDAGBuilder::DanglingDebugInfo>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_19SelectionDAGBuilder17DanglingDebugInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::Value const*, llvm::SelectionDAGBuilder::DanglingDebugInfo, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SelectionDAGBuilder::DanglingDebugInfo> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_19SelectionDAGBuilder17DanglingDebugInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value const*, llvm::SelectionDAGBuilder::DanglingDebugInfo, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SelectionDAGBuilder::DanglingDebugInfo> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_7SDValueENS_12DenseMapInfoIS3_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value const*, llvm::SDValue, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SDValue> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_7SDValueENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::Value const*, llvm::SDValue, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SDValue> >::InsertIntoBucket(llvm::Value const* const&, llvm::SDValue const&, std::pair<llvm::Value const*, llvm::SDValue>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueENS_7SDValueENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Value const*, llvm::SDValue, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<llvm::SDValue> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_3EVTEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::EVT>::operator=(llvm::SmallVectorImpl<llvm::EVT> const&)\"},\n    {\"_ZN4llvm20SDISelAsmOperandInfoD2Ev\", \"llvm::SDISelAsmOperandInfo::~SDISelAsmOperandInfo()\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MCSymbol*, unsigned int, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MCSymbol* const&, unsigned int const&, std::pair<llvm::MCSymbol*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol*, unsigned int, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm6GCRootESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::GCRoot, std::allocator<llvm::GCRoot> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GCRoot*, std::vector<llvm::GCRoot, std::allocator<llvm::GCRoot> > >, llvm::GCRoot const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairINS_10TrackingVHINS_6MDNodeEEES1_IjNS_8DebugLocEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::TrackingVH<llvm::MDNode>, std::pair<unsigned int, llvm::DebugLoc> >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm19SelectionDAGBuilder12BitTestBlockC2ENS_5APIntES2_PKNS_5ValueEjNS_3EVTEbPNS_17MachineBasicBlockES8_RKNS_11SmallVectorINS0_11BitTestCaseELj3EEE\", \"llvm::SelectionDAGBuilder::BitTestBlock::BitTestBlock(llvm::APInt, llvm::APInt, llvm::Value const*, unsigned int, llvm::EVT, bool, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::SmallVector<llvm::SelectionDAGBuilder::BitTestCase, 3u> const&)\"},\n    {\"_ZN4llvm22createDefaultSchedulerEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelE\", \"llvm::createDefaultScheduler(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)\"},\n    {\"_ZNK4llvm14TargetLowering27EmitInstrWithCustomInserterEPNS_12MachineInstrEPNS_17MachineBasicBlockE\", \"llvm::TargetLowering::EmitInstrWithCustomInserter(llvm::MachineInstr*, llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm16SelectionDAGISelC1ERKNS_13TargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::SelectionDAGISel::SelectionDAGISel(llvm::TargetMachine const&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16SelectionDAGISelC2ERKNS_13TargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::SelectionDAGISel::SelectionDAGISel(llvm::TargetMachine const&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16SelectionDAGISelD0Ev\", \"llvm::SelectionDAGISel::~SelectionDAGISel()\"},\n    {\"_ZN4llvm16SelectionDAGISelD1Ev\", \"llvm::SelectionDAGISel::~SelectionDAGISel()\"},\n    {\"_ZN4llvm16SelectionDAGISelD2Ev\", \"llvm::SelectionDAGISel::~SelectionDAGISel()\"},\n    {\"_ZNK4llvm16SelectionDAGISel16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::SelectionDAGISel::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm16SelectionDAGISel20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm16SelectionDAGISel20SelectAllBasicBlocksERKNS_8FunctionE\", \"llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)\"},\n    {\"_ZN4llvm16SelectionDAGISel16SelectBasicBlockENS_14ilist_iteratorIKNS_11InstructionEEES4_Rb\", \"llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction const>, llvm::ilist_iterator<llvm::Instruction const>, bool&)\"},\n    {\"_ZN4llvm16SelectionDAGISel17CodeGenAndEmitDAGEv\", \"llvm::SelectionDAGISel::CodeGenAndEmitDAG()\"},\n    {\"_ZN4llvm16SelectionDAGISel22ComputeLiveOutVRegInfoEv\", \"llvm::SelectionDAGISel::ComputeLiveOutVRegInfo()\"},\n    {\"_ZN4llvm16SelectionDAGISel22DoInstructionSelectionEv\", \"llvm::SelectionDAGISel::DoInstructionSelection()\"},\n    {\"_ZN4llvm16SelectionDAGISel15CreateSchedulerEv\", \"llvm::SelectionDAGISel::CreateScheduler()\"},\n    {\"_ZN4llvm16SelectionDAGISel19PrepareEHLandingPadEv\", \"llvm::SelectionDAGISel::PrepareEHLandingPad()\"},\n    {\"_ZN4llvm16SelectionDAGISel21TryToFoldFastISelLoadEPKNS_8LoadInstEPNS_8FastISelE\", \"llvm::SelectionDAGISel::TryToFoldFastISelLoad(llvm::LoadInst const*, llvm::FastISel*)\"},\n    {\"_ZN4llvm16SelectionDAGISel16FinishBasicBlockEv\", \"llvm::SelectionDAGISel::FinishBasicBlock()\"},\n    {\"_ZNK4llvm16SelectionDAGISel12CheckAndMaskENS_7SDValueEPNS_14ConstantSDNodeEx\", \"llvm::SelectionDAGISel::CheckAndMask(llvm::SDValue, llvm::ConstantSDNode*, long long) const\"},\n    {\"_ZNK4llvm16SelectionDAGISel11CheckOrMaskENS_7SDValueEPNS_14ConstantSDNodeEx\", \"llvm::SelectionDAGISel::CheckOrMask(llvm::SDValue, llvm::ConstantSDNode*, long long) const\"},\n    {\"_ZN4llvm16SelectionDAGISel29SelectInlineAsmMemoryOperandsERSt6vectorINS_7SDValueESaIS2_EE\", \"llvm::SelectionDAGISel::SelectInlineAsmMemoryOperands(std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&)\"},\n    {\"_ZNK4llvm16SelectionDAGISel18IsProfitableToFoldENS_7SDValueEPNS_6SDNodeES3_\", \"llvm::SelectionDAGISel::IsProfitableToFold(llvm::SDValue, llvm::SDNode*, llvm::SDNode*) const\"},\n    {\"_ZN4llvm16SelectionDAGISel13IsLegalToFoldENS_7SDValueEPNS_6SDNodeES3_NS_10CodeGenOpt5LevelEb\", \"llvm::SelectionDAGISel::IsLegalToFold(llvm::SDValue, llvm::SDNode*, llvm::SDNode*, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_Z13findNonImmUsePN4llvm6SDNodeES1_S1_S1_RNS_11SmallPtrSetIS1_Lj16EEEb\", \"findNonImmUse(llvm::SDNode*, llvm::SDNode*, llvm::SDNode*, llvm::SDNode*, llvm::SmallPtrSet<llvm::SDNode*, 16u>&, bool)\"},\n    {\"_ZN4llvm16SelectionDAGISel16Select_INLINEASMEPNS_6SDNodeE\", \"llvm::SelectionDAGISel::Select_INLINEASM(llvm::SDNode*)\"},\n    {\"_ZN4llvm16SelectionDAGISel12Select_UNDEFEPNS_6SDNodeE\", \"llvm::SelectionDAGISel::Select_UNDEF(llvm::SDNode*)\"},\n    {\"_ZN4llvm16SelectionDAGISel19UpdateChainsAndGlueEPNS_6SDNodeENS_7SDValueERKNS_15SmallVectorImplIS2_EES3_S7_b\", \"llvm::SelectionDAGISel::UpdateChainsAndGlue(llvm::SDNode*, llvm::SDValue, llvm::SmallVectorImpl<llvm::SDNode*> const&, llvm::SDValue, llvm::SmallVectorImpl<llvm::SDNode*> const&, bool)\"},\n    {\"_ZN4llvm16SelectionDAGISel9MorphNodeEPNS_6SDNodeEjNS_8SDVTListEPKNS_7SDValueEjj\", \"llvm::SelectionDAGISel::MorphNode(llvm::SDNode*, unsigned int, llvm::SDVTList, llvm::SDValue const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm16SelectionDAGISel16SelectCodeCommonEPNS_6SDNodeEPKhj\", \"llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int)\"},\n    {\"_Z22HandleMergeInputChainsRN4llvm15SmallVectorImplIPNS_6SDNodeEEEPNS_12SelectionDAGE\", \"HandleMergeInputChains(llvm::SmallVectorImpl<llvm::SDNode*>&, llvm::SelectionDAG*)\"},\n    {\"_ZN4llvm16SelectionDAGISel15CannotYetSelectEPNS_6SDNodeE\", \"llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*)\"},\n    {\"_Z14WalkChainUsersPN4llvm6SDNodeERNS_15SmallVectorImplIS1_EES4_\", \"WalkChainUsers(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDNode*>&, llvm::SmallVectorImpl<llvm::SDNode*>&)\"},\n    {\"_ZN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEED1Ev\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::~opt()\"},\n    {\"_ZN4llvm17RegisterSchedulerD1Ev\", \"llvm::RegisterScheduler::~RegisterScheduler()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_17MachineMemOperandEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::MachineMemOperand*>::resize(unsigned int)\"},\n    {\"_ZN4llvm16SelectionDAGISel28SelectInlineAsmMemoryOperandERKNS_7SDValueEcRSt6vectorIS1_SaIS1_EE\", \"llvm::SelectionDAGISel::SelectInlineAsmMemoryOperand(llvm::SDValue const&, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&)\"},\n    {\"_ZNK4llvm16SelectionDAGISel21CheckPatternPredicateEj\", \"llvm::SelectionDAGISel::CheckPatternPredicate(unsigned int) const\"},\n    {\"_ZNK4llvm16SelectionDAGISel18CheckNodePredicateEPNS_6SDNodeEj\", \"llvm::SelectionDAGISel::CheckNodePredicate(llvm::SDNode*, unsigned int) const\"},\n    {\"_ZN4llvm16SelectionDAGISel19CheckComplexPatternEPNS_6SDNodeES2_NS_7SDValueEjRNS_15SmallVectorImplISt4pairIS3_S2_EEE\", \"llvm::SelectionDAGISel::CheckComplexPattern(llvm::SDNode*, llvm::SDNode*, llvm::SDValue, unsigned int, llvm::SmallVectorImpl<std::pair<llvm::SDValue, llvm::SDNode*> >&)\"},\n    {\"_ZN4llvm16SelectionDAGISel14RunSDNodeXFormENS_7SDValueEj\", \"llvm::SelectionDAGISel::RunSDNodeXForm(llvm::SDValue, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_7SDValueEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::SDValue>::operator=(llvm::SmallVectorImpl<llvm::SDValue> const&)\"},\n    {\"_ZNSt6vectorIjSaIjEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPjS1_EEmRKj\", \"std::vector<unsigned int, std::allocator<unsigned int> >::_M_fill_insert(__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned long, unsigned int const&)\"},\n    {\"_ZNSt6vectorIN4llvm7SDValueESaIS1_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS1_S3_EEEEvS8_T_S9_St20forward_iterator_tag\", \"void std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::SDValue*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > > >(__gnu_cxx::__normal_iterator<llvm::SDValue*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > >, __gnu_cxx::__normal_iterator<llvm::SDValue*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > >, __gnu_cxx::__normal_iterator<llvm::SDValue*, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> > >, std::forward_iterator_tag)\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder12BitTestBlockESaIS2_EE15_M_erase_at_endEPS2_\", \"std::vector<llvm::SelectionDAGBuilder::BitTestBlock, std::allocator<llvm::SelectionDAGBuilder::BitTestBlock> >::_M_erase_at_end(llvm::SelectionDAGBuilder::BitTestBlock*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEPNS_17MachineBasicBlockENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::BasicBlock const*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::InsertIntoBucket(llvm::BasicBlock const* const&, llvm::MachineBasicBlock* const&, std::pair<llvm::BasicBlock const*, llvm::MachineBasicBlock*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEPNS_17MachineBasicBlockENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock const*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm10IndexedMapINS_20FunctionLoweringInfo11LiveOutInfoENS_20VirtReg2IndexFunctorEE6resizeEm\", \"llvm::IndexedMap<llvm::FunctionLoweringInfo::LiveOutInfo, llvm::VirtReg2IndexFunctor>::resize(unsigned long)\"},\n    {\"_ZNSt6vectorIN4llvm20FunctionLoweringInfo11LiveOutInfoESaIS2_EE6resizeEmS2_\", \"std::vector<llvm::FunctionLoweringInfo::LiveOutInfo, std::allocator<llvm::FunctionLoweringInfo::LiveOutInfo> >::resize(unsigned long, llvm::FunctionLoweringInfo::LiveOutInfo)\"},\n    {\"_ZNSt6vectorIN4llvm20FunctionLoweringInfo11LiveOutInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::FunctionLoweringInfo::LiveOutInfo, std::allocator<llvm::FunctionLoweringInfo::LiveOutInfo> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::FunctionLoweringInfo::LiveOutInfo*, std::vector<llvm::FunctionLoweringInfo::LiveOutInfo, std::allocator<llvm::FunctionLoweringInfo::LiveOutInfo> > >, unsigned long, llvm::FunctionLoweringInfo::LiveOutInfo const&)\"},\n    {\"_ZSt26__uninitialized_fill_n_auxIPN4llvm20FunctionLoweringInfo11LiveOutInfoEmS2_EvT_T0_RKT1_St12__false_type\", \"void std::__uninitialized_fill_n_aux<llvm::FunctionLoweringInfo::LiveOutInfo*, unsigned long, llvm::FunctionLoweringInfo::LiveOutInfo>(llvm::FunctionLoweringInfo::LiveOutInfo*, unsigned long, llvm::FunctionLoweringInfo::LiveOutInfo const&, std::__false_type)\"},\n    {\"_ZNSt6__fillILb0EE4fillIPN4llvm20FunctionLoweringInfo11LiveOutInfoES4_EEvT_S6_RKT0_\", \"void std::__fill<false>::fill<llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo>(llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm20FunctionLoweringInfo11LiveOutInfoES6_EET0_T_S8_S7_\", \"llvm::FunctionLoweringInfo::LiveOutInfo* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo*>(llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo*, llvm::FunctionLoweringInfo::LiveOutInfo*)\"},\n    {\"_ZN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE4doneEv\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::done()\"},\n    {\"_ZN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE16handleOccurrenceEjNS_9StringRefESE_\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEED0Ev\", \"llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEE5parseERNS0_6OptionENS_9StringRefESD_RS9_\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::ScheduleDAGSDNodes* (*&)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level))\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm18RegisterPassParserINS_17RegisterSchedulerEED1Ev\", \"llvm::RegisterPassParser<llvm::RegisterScheduler>::~RegisterPassParser()\"},\n    {\"_ZN4llvm18RegisterPassParserINS_17RegisterSchedulerEED0Ev\", \"llvm::RegisterPassParser<llvm::RegisterScheduler>::~RegisterPassParser()\"},\n    {\"_ZN4llvm18RegisterPassParserINS_17RegisterSchedulerEE9NotifyAddEPKcPFPvvES4_\", \"llvm::RegisterPassParser<llvm::RegisterScheduler>::NotifyAdd(char const*, void* (*)(), char const*)\"},\n    {\"_ZN4llvm18RegisterPassParserINS_17RegisterSchedulerEE12NotifyRemoveEPKc\", \"llvm::RegisterPassParser<llvm::RegisterScheduler>::NotifyRemove(char const*)\"},\n    {\"_ZThn16_N4llvm18RegisterPassParserINS_17RegisterSchedulerEED1Ev\", \"non-virtual thunk to llvm::RegisterPassParser<llvm::RegisterScheduler>::~RegisterPassParser()\"},\n    {\"_ZThn16_N4llvm18RegisterPassParserINS_17RegisterSchedulerEED0Ev\", \"non-virtual thunk to llvm::RegisterPassParser<llvm::RegisterScheduler>::~RegisterPassParser()\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEE9getOptionEj\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEE14getDescriptionEj\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm27MachinePassRegistryListenerD1Ev\", \"llvm::MachinePassRegistryListener::~MachinePassRegistryListener()\"},\n    {\"_ZN4llvm27MachinePassRegistryListenerD0Ev\", \"llvm::MachinePassRegistryListener::~MachinePassRegistryListener()\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEED1Ev\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEED0Ev\", \"llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>::~parser()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::Value const*, unsigned int, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Value const* const&, unsigned int const&, std::pair<llvm::Value const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::Value const*, unsigned int, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm20FunctionLoweringInfoD2Ev\", \"llvm::FunctionLoweringInfo::~FunctionLoweringInfo()\"},\n    {\"_ZNSt6vectorIN4llvm20FunctionLoweringInfo11LiveOutInfoESaIS2_EED2Ev\", \"std::vector<llvm::FunctionLoweringInfo::LiveOutInfo, std::allocator<llvm::FunctionLoweringInfo::LiveOutInfo> >::~vector()\"},\n    {\"_ZN4llvm19SelectionDAGBuilderD2Ev\", \"llvm::SelectionDAGBuilder::~SelectionDAGBuilder()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm19SelectionDAGBuilder15JumpTableHeaderENS2_9JumpTableEESaIS5_EED2Ev\", \"std::vector<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable>, std::allocator<std::pair<llvm::SelectionDAGBuilder::JumpTableHeader, llvm::SelectionDAGBuilder::JumpTable> > >::~vector()\"},\n    {\"_ZNSt6vectorIN4llvm19SelectionDAGBuilder12BitTestBlockESaIS2_EED2Ev\", \"std::vector<llvm::SelectionDAGBuilder::BitTestBlock, std::allocator<llvm::SelectionDAGBuilder::BitTestBlock> >::~vector()\"},\n    {\"_ZN4llvm19SelectionDAGBuilderC2ERNS_12SelectionDAGERNS_20FunctionLoweringInfoENS_10CodeGenOpt5LevelE\", \"llvm::SelectionDAGBuilder::SelectionDAGBuilder(llvm::SelectionDAG&, llvm::FunctionLoweringInfo&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm14DOTGraphTraitsIPNS_12SelectionDAGEE12getNodeLabelEPKNS_6SDNodeEPKS1_\", \"llvm::DOTGraphTraits<llvm::SelectionDAG*>::getNodeLabel(llvm::SDNode const*, llvm::SelectionDAG const*)\"},\n    {\"_ZN4llvm12SelectionDAG9viewGraphERKSs\", \"llvm::SelectionDAG::viewGraph(std::string const&)\"},\n    {\"_ZN4llvm12SelectionDAG9viewGraphEv\", \"llvm::SelectionDAG::viewGraph()\"},\n    {\"_ZN4llvm12SelectionDAG15clearGraphAttrsEv\", \"llvm::SelectionDAG::clearGraphAttrs()\"},\n    {\"_ZN4llvm12SelectionDAG13setGraphAttrsEPKNS_6SDNodeEPKc\", \"llvm::SelectionDAG::setGraphAttrs(llvm::SDNode const*, char const*)\"},\n    {\"_ZNK4llvm12SelectionDAG13getGraphAttrsEPKNS_6SDNodeE\", \"llvm::SelectionDAG::getGraphAttrs(llvm::SDNode const*) const\"},\n    {\"_ZN4llvm12SelectionDAG13setGraphColorEPKNS_6SDNodeEPKc\", \"llvm::SelectionDAG::setGraphColor(llvm::SDNode const*, char const*)\"},\n    {\"_ZN4llvm12SelectionDAG22setSubgraphColorHelperEPNS_6SDNodeEPKcRNS_8DenseSetIS2_NS_12DenseMapInfoIS2_EEEEiRb\", \"llvm::SelectionDAG::setSubgraphColorHelper(llvm::SDNode*, char const*, llvm::DenseSet<llvm::SDNode*, llvm::DenseMapInfo<llvm::SDNode*> >&, int, bool&)\"},\n    {\"_ZN4llvm12SelectionDAG16setSubgraphColorEPNS_6SDNodeEPKc\", \"llvm::SelectionDAG::setSubgraphColor(llvm::SDNode*, char const*)\"},\n    {\"_ZNK4llvm18ScheduleDAGSDNodes17getGraphNodeLabelEPKNS_5SUnitE\", \"llvm::ScheduleDAGSDNodes::getGraphNodeLabel(llvm::SUnit const*) const\"},\n    {\"_ZNK4llvm18ScheduleDAGSDNodes22getCustomGraphFeaturesERNS_11GraphWriterIPNS_11ScheduleDAGEEE\", \"llvm::ScheduleDAGSDNodes::getCustomGraphFeatures(llvm::GraphWriter<llvm::ScheduleDAG*>&) const\"},\n    {\"_ZN4llvm11GraphWriterIPNS_11ScheduleDAGEE14emitSimpleNodeEPKvRKSsS7_jPKSt6vectorISsSaISsEE\", \"llvm::GraphWriter<llvm::ScheduleDAG*>::emitSimpleNode(void const*, std::string const&, std::string const&, unsigned int, std::vector<std::string, std::allocator<std::string> > const*)\"},\n    {\"_ZN4llvm11GraphWriterIPNS_11ScheduleDAGEE8emitEdgeEPKviS5_iRKSs\", \"llvm::GraphWriter<llvm::ScheduleDAG*>::emitEdge(void const*, int, void const*, int, std::string const&)\"},\n    {\"_ZN4llvm11getTLSModelEPKNS_11GlobalValueENS_5Reloc5ModelE\", \"llvm::getTLSModel(llvm::GlobalValue const*, llvm::Reloc::Model)\"},\n    {\"_ZN4llvm5RTLIB8getFPEXTENS_3EVTES1_\", \"llvm::RTLIB::getFPEXT(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm5RTLIB10getFPROUNDENS_3EVTES1_\", \"llvm::RTLIB::getFPROUND(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm5RTLIB11getFPTOSINTENS_3EVTES1_\", \"llvm::RTLIB::getFPTOSINT(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm5RTLIB11getFPTOUINTENS_3EVTES1_\", \"llvm::RTLIB::getFPTOUINT(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm5RTLIB11getSINTTOFPENS_3EVTES1_\", \"llvm::RTLIB::getSINTTOFP(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm5RTLIB11getUINTTOFPENS_3EVTES1_\", \"llvm::RTLIB::getUINTTOFP(llvm::EVT, llvm::EVT)\"},\n    {\"_ZN4llvm14TargetLoweringC1ERKNS_13TargetMachineEPKNS_24TargetLoweringObjectFileE\", \"llvm::TargetLowering::TargetLowering(llvm::TargetMachine const&, llvm::TargetLoweringObjectFile const*)\"},\n    {\"_ZN4llvm14TargetLoweringC2ERKNS_13TargetMachineEPKNS_24TargetLoweringObjectFileE\", \"llvm::TargetLowering::TargetLowering(llvm::TargetMachine const&, llvm::TargetLoweringObjectFile const*)\"},\n    {\"_ZN4llvm14TargetLoweringD0Ev\", \"llvm::TargetLowering::~TargetLowering()\"},\n    {\"_ZN4llvm14TargetLoweringD1Ev\", \"llvm::TargetLowering::~TargetLowering()\"},\n    {\"_ZN4llvm14TargetLoweringD2Ev\", \"llvm::TargetLowering::~TargetLowering()\"},\n    {\"_ZNK4llvm14TargetLowering9canOpTrapEjNS_3EVTE\", \"llvm::TargetLowering::canOpTrap(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering9isLegalRCEPKNS_19TargetRegisterClassE\", \"llvm::TargetLowering::isLegalRC(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZNK4llvm14TargetLowering26hasLegalSuperRegRegClassesEPKNS_19TargetRegisterClassE\", \"llvm::TargetLowering::hasLegalSuperRegRegClasses(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZNK4llvm14TargetLowering23findRepresentativeClassENS_3EVTE\", \"llvm::TargetLowering::findRepresentativeClass(llvm::EVT) const\"},\n    {\"_ZN4llvm14TargetLowering25computeRegisterPropertiesEv\", \"llvm::TargetLowering::computeRegisterProperties()\"},\n    {\"_ZNK4llvm14TargetLowering17getTargetNodeNameEj\", \"llvm::TargetLowering::getTargetNodeName(unsigned int) const\"},\n    {\"_ZNK4llvm14TargetLowering18getSetCCResultTypeENS_3EVTE\", \"llvm::TargetLowering::getSetCCResultType(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering23getCmpLibcallReturnTypeEv\", \"llvm::TargetLowering::getCmpLibcallReturnType() const\"},\n    {\"_ZNK4llvm14TargetLowering22getVectorTypeBreakdownERNS_11LLVMContextENS_3EVTERS3_RjS4_\", \"llvm::TargetLowering::getVectorTypeBreakdown(llvm::LLVMContext&, llvm::EVT, llvm::EVT&, unsigned int&, llvm::EVT&) const\"},\n    {\"_ZN4llvm13GetReturnInfoEPKNS_4TypeEjRNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS_14TargetLoweringEPNS3_IyEE\", \"llvm::GetReturnInfo(llvm::Type const*, unsigned int, llvm::SmallVectorImpl<llvm::ISD::OutputArg>&, llvm::TargetLowering const&, llvm::SmallVectorImpl<unsigned long long>*)\"},\n    {\"_ZNK4llvm14TargetLowering21getByValTypeAlignmentEPKNS_4TypeE\", \"llvm::TargetLowering::getByValTypeAlignment(llvm::Type const*) const\"},\n    {\"_ZNK4llvm14TargetLowering20getJumpTableEncodingEv\", \"llvm::TargetLowering::getJumpTableEncoding() const\"},\n    {\"_ZNK4llvm14TargetLowering24getPICJumpTableRelocBaseENS_7SDValueERNS_12SelectionDAGE\", \"llvm::TargetLowering::getPICJumpTableRelocBase(llvm::SDValue, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering28getPICJumpTableRelocBaseExprEPKNS_15MachineFunctionEjRNS_9MCContextE\", \"llvm::TargetLowering::getPICJumpTableRelocBaseExpr(llvm::MachineFunction const*, unsigned int, llvm::MCContext&) const\"},\n    {\"_ZNK4llvm14TargetLowering20isOffsetFoldingLegalEPKNS_19GlobalAddressSDNodeE\", \"llvm::TargetLowering::isOffsetFoldingLegal(llvm::GlobalAddressSDNode const*) const\"},\n    {\"_ZN4llvm14TargetLowering17TargetLoweringOpt22ShrinkDemandedConstantENS_7SDValueERKNS_5APIntE\", \"llvm::TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(llvm::SDValue, llvm::APInt const&)\"},\n    {\"_ZN4llvm14TargetLowering17TargetLoweringOpt16ShrinkDemandedOpENS_7SDValueEjRKNS_5APIntENS_8DebugLocE\", \"llvm::TargetLowering::TargetLoweringOpt::ShrinkDemandedOp(llvm::SDValue, unsigned int, llvm::APInt const&, llvm::DebugLoc)\"},\n    {\"_ZNK4llvm14TargetLowering20SimplifyDemandedBitsENS_7SDValueERKNS_5APIntERS2_S5_RNS0_17TargetLoweringOptEj\", \"llvm::TargetLowering::SimplifyDemandedBits(llvm::SDValue, llvm::APInt const&, llvm::APInt&, llvm::APInt&, llvm::TargetLowering::TargetLoweringOpt&, unsigned int) const\"},\n    {\"_ZNK4llvm14TargetLowering30computeMaskedBitsForTargetNodeENS_7SDValueERKNS_5APIntERS2_S5_RKNS_12SelectionDAGEj\", \"llvm::TargetLowering::computeMaskedBitsForTargetNode(llvm::SDValue, llvm::APInt const&, llvm::APInt&, llvm::APInt&, llvm::SelectionDAG const&, unsigned int) const\"},\n    {\"_ZNK4llvm14TargetLowering31ComputeNumSignBitsForTargetNodeENS_7SDValueEj\", \"llvm::TargetLowering::ComputeNumSignBitsForTargetNode(llvm::SDValue, unsigned int) const\"},\n    {\"_ZNK4llvm14TargetLowering13SimplifySetCCENS_3EVTENS_7SDValueES2_NS_3ISD8CondCodeEbRNS0_15DAGCombinerInfoENS_8DebugLocE\", \"llvm::TargetLowering::SimplifySetCC(llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::ISD::CondCode, bool, llvm::TargetLowering::DAGCombinerInfo&, llvm::DebugLoc) const\"},\n    {\"_Z24ValueHasExactlyOneBitSetN4llvm7SDValueERKNS_12SelectionDAGE\", \"ValueHasExactlyOneBitSet(llvm::SDValue, llvm::SelectionDAG const&)\"},\n    {\"_ZNK4llvm14TargetLowering14isGAPlusOffsetEPNS_6SDNodeERPKNS_11GlobalValueERx\", \"llvm::TargetLowering::isGAPlusOffset(llvm::SDNode*, llvm::GlobalValue const*&, long long&) const\"},\n    {\"_ZNK4llvm14TargetLowering17PerformDAGCombineEPNS_6SDNodeERNS0_15DAGCombinerInfoE\", \"llvm::TargetLowering::PerformDAGCombine(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&) const\"},\n    {\"_ZNK4llvm14TargetLowering17getConstraintTypeERKSs\", \"llvm::TargetLowering::getConstraintType(std::string const&) const\"},\n    {\"_ZNK4llvm14TargetLowering16LowerXConstraintENS_3EVTE\", \"llvm::TargetLowering::LowerXConstraint(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering28LowerAsmOperandForConstraintENS_7SDValueEcRSt6vectorIS1_SaIS1_EERNS_12SelectionDAGE\", \"llvm::TargetLowering::LowerAsmOperandForConstraint(llvm::SDValue, char, std::vector<llvm::SDValue, std::allocator<llvm::SDValue> >&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering33getRegClassForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::TargetLowering::getRegClassForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering28getRegForInlineAsmConstraintERKSsNS_3EVTE\", \"llvm::TargetLowering::getRegForInlineAsmConstraint(std::string const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering14AsmOperandInfo25isMatchingInputConstraintEv\", \"llvm::TargetLowering::AsmOperandInfo::isMatchingInputConstraint() const\"},\n    {\"_ZNK4llvm14TargetLowering14AsmOperandInfo17getMatchedOperandEv\", \"llvm::TargetLowering::AsmOperandInfo::getMatchedOperand() const\"},\n    {\"_ZNK4llvm14TargetLowering16ParseConstraintsENS_17ImmutableCallSiteE\", \"llvm::TargetLowering::ParseConstraints(llvm::ImmutableCallSite) const\"},\n    {\"_ZNK4llvm14TargetLowering32getMultipleConstraintMatchWeightERNS0_14AsmOperandInfoEi\", \"llvm::TargetLowering::getMultipleConstraintMatchWeight(llvm::TargetLowering::AsmOperandInfo&, int) const\"},\n    {\"_ZNK4llvm14TargetLowering30getSingleConstraintMatchWeightERNS0_14AsmOperandInfoEPKc\", \"llvm::TargetLowering::getSingleConstraintMatchWeight(llvm::TargetLowering::AsmOperandInfo&, char const*) const\"},\n    {\"_ZNK4llvm14TargetLowering22ComputeConstraintToUseERNS0_14AsmOperandInfoENS_7SDValueEPNS_12SelectionDAGE\", \"llvm::TargetLowering::ComputeConstraintToUse(llvm::TargetLowering::AsmOperandInfo&, llvm::SDValue, llvm::SelectionDAG*) const\"},\n    {\"_ZNK4llvm14TargetLowering21isLegalAddressingModeERKNS0_8AddrModeEPKNS_4TypeE\", \"llvm::TargetLowering::isLegalAddressingMode(llvm::TargetLowering::AddrMode const&, llvm::Type const*) const\"},\n    {\"_ZNK4llvm14TargetLowering9BuildSDIVEPNS_6SDNodeERNS_12SelectionDAGEPSt6vectorIS2_SaIS2_EE\", \"llvm::TargetLowering::BuildSDIV(llvm::SDNode*, llvm::SelectionDAG&, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> >*) const\"},\n    {\"_ZNK4llvm14TargetLowering9BuildUDIVEPNS_6SDNodeERNS_12SelectionDAGEPSt6vectorIS2_SaIS2_EE\", \"llvm::TargetLowering::BuildUDIV(llvm::SDNode*, llvm::SelectionDAG&, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> >*) const\"},\n    {\"_ZNK4llvm14TargetLowering20getTypeToTransformToERNS_11LLVMContextENS_3EVTE\", \"llvm::TargetLowering::getTypeToTransformTo(llvm::LLVMContext&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering15getRegisterTypeERNS_11LLVMContextENS_3EVTE\", \"llvm::TargetLowering::getRegisterType(llvm::LLVMContext&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering15getNumRegistersERNS_11LLVMContextENS_3EVTE\", \"llvm::TargetLowering::getNumRegisters(llvm::LLVMContext&, llvm::EVT) const\"},\n    {\"_ZNK4llvm5APInt10intersectsERKS0_\", \"llvm::APInt::intersects(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt6isIntNEj\", \"llvm::APInt::isIntN(unsigned int) const\"},\n    {\"_ZNK4llvm3EVT6bitsLEES0_\", \"llvm::EVT::bitsLE(llvm::EVT) const\"},\n    {\"_ZN4llvm5APInt17getSignedMaxValueEj\", \"llvm::APInt::getSignedMaxValue(unsigned int)\"},\n    {\"_ZNK4llvm5APIntmiEy\", \"llvm::APInt::operator-(unsigned long long) const\"},\n    {\"_ZNK4llvm14TargetLowering19getRegPressureLimitEPKNS_19TargetRegisterClassERNS_15MachineFunctionE\", \"llvm::TargetLowering::getRegPressureLimit(llvm::TargetRegisterClass const*, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm14TargetLowering12isFPImmLegalERKNS_7APFloatENS_3EVTE\", \"llvm::TargetLowering::isFPImmLegal(llvm::APFloat const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering18isShuffleMaskLegalERKNS_15SmallVectorImplIiEENS_3EVTE\", \"llvm::TargetLowering::isShuffleMaskLegal(llvm::SmallVectorImpl<int> const&, llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering29allowsUnalignedMemoryAccessesENS_3EVTE\", \"llvm::TargetLowering::allowsUnalignedMemoryAccesses(llvm::EVT) const\"},\n    {\"_ZNK4llvm14TargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EE\", \"llvm::TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm14TargetLowering9LowerCallENS_7SDValueES1_NS_11CallingConv2IDEbRbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS5_IS1_EERKNS5_INS6_8InputArgEEENS_8DebugLocERNS_12SelectionDAGERSB_\", \"llvm::TargetLowering::LowerCall(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, bool&, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const\"},\n    {\"_ZNK4llvm14TargetLowering11LowerReturnENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS4_IS1_EENS_8DebugLocERNS_12SelectionDAGE\", \"llvm::TargetLowering::LowerReturn(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::DebugLoc, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering18isUsedByReturnOnlyEPNS_6SDNodeE\", \"llvm::TargetLowering::isUsedByReturnOnly(llvm::SDNode*) const\"},\n    {\"_ZNK4llvm14TargetLowering18ReplaceNodeResultsEPNS_6SDNodeERNS_15SmallVectorImplINS_7SDValueEEERNS_12SelectionDAGE\", \"llvm::TargetLowering::ReplaceNodeResults(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&) const\"},\n    {\"_ZNK4llvm14TargetLowering14createFastISelERNS_20FunctionLoweringInfoE\", \"llvm::TargetLowering::createFastISel(llvm::FunctionLoweringInfo&) const\"},\n    {\"_ZNK4llvm14TargetLowering15ExpandInlineAsmEPNS_8CallInstE\", \"llvm::TargetLowering::ExpandInlineAsm(llvm::CallInst*) const\"},\n    {\"_ZNSt6vectorIPN4llvm6SDNodeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SDNode**, std::vector<llvm::SDNode*, std::allocator<llvm::SDNode*> > >, llvm::SDNode* const&)\"},\n    {\"_ZNSt6vectorIN4llvm14TargetLowering14AsmOperandInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::TargetLowering::AsmOperandInfo, std::allocator<llvm::TargetLowering::AsmOperandInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::TargetLowering::AsmOperandInfo*, std::vector<llvm::TargetLowering::AsmOperandInfo, std::allocator<llvm::TargetLowering::AsmOperandInfo> > >, llvm::TargetLowering::AsmOperandInfo const&)\"},\n    {\"_ZSt13__destroy_auxIPN4llvm14TargetLowering14AsmOperandInfoEEvT_S4_St12__false_type\", \"void std::__destroy_aux<llvm::TargetLowering::AsmOperandInfo*>(llvm::TargetLowering::AsmOperandInfo*, llvm::TargetLowering::AsmOperandInfo*, std::__false_type)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm17SubConstraintInfoESaIS2_EEaSERKS4_\", \"std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> >::operator=(std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> > const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm14TargetLowering14AsmOperandInfoES6_EET0_T_S8_S7_\", \"llvm::TargetLowering::AsmOperandInfo* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::TargetLowering::AsmOperandInfo*, llvm::TargetLowering::AsmOperandInfo*>(llvm::TargetLowering::AsmOperandInfo*, llvm::TargetLowering::AsmOperandInfo*, llvm::TargetLowering::AsmOperandInfo*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_3ISD9OutputArgELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::ISD::OutputArg, false>::grow(unsigned long)\"},\n    {\"_ZNK4llvm3EVT17getPow2VectorTypeERNS_11LLVMContextE\", \"llvm::EVT::getPow2VectorType(llvm::LLVMContext&) const\"},\n    {\"_ZNK4llvm14TargetLowering19ValueTypeActionImpl21getExtendedTypeActionENS_3EVTE\", \"llvm::TargetLowering::ValueTypeActionImpl::getExtendedTypeAction(llvm::EVT) const\"},\n    {\"_ZNSt8_Rb_treeISt4pairIjN4llvm3MVT15SimpleValueTypeEES0_IKS4_S3_ESt10_Select1stIS6_ESt4lessIS4_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::pair<unsigned int, llvm::MVT::SimpleValueType>, std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType>, std::_Select1st<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> >, std::less<std::pair<unsigned int, llvm::MVT::SimpleValueType> >, std::allocator<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<unsigned int, llvm::MVT::SimpleValueType> const, llvm::MVT::SimpleValueType> >*)\"},\n    {\"_ZN4llvm22TargetSelectionDAGInfoC1ERKNS_13TargetMachineE\", \"llvm::TargetSelectionDAGInfo::TargetSelectionDAGInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm22TargetSelectionDAGInfoC2ERKNS_13TargetMachineE\", \"llvm::TargetSelectionDAGInfo::TargetSelectionDAGInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm22TargetSelectionDAGInfoD0Ev\", \"llvm::TargetSelectionDAGInfo::~TargetSelectionDAGInfo()\"},\n    {\"_ZN4llvm22TargetSelectionDAGInfoD1Ev\", \"llvm::TargetSelectionDAGInfo::~TargetSelectionDAGInfo()\"},\n    {\"_ZN4llvm22TargetSelectionDAGInfoD2Ev\", \"llvm::TargetSelectionDAGInfo::~TargetSelectionDAGInfo()\"},\n    {\"_ZNK4llvm22TargetSelectionDAGInfo23EmitTargetCodeForMemcpyERNS_12SelectionDAGENS_8DebugLocENS_7SDValueES4_S4_S4_jbbNS_18MachinePointerInfoES5_\", \"llvm::TargetSelectionDAGInfo::EmitTargetCodeForMemcpy(llvm::SelectionDAG&, llvm::DebugLoc, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, unsigned int, bool, bool, llvm::MachinePointerInfo, llvm::MachinePointerInfo) const\"},\n    {\"_ZN4llvm10AsmPrinterC1ERNS_13TargetMachineERNS_10MCStreamerE\", \"llvm::AsmPrinter::AsmPrinter(llvm::TargetMachine&, llvm::MCStreamer&)\"},\n    {\"_ZN4llvm10AsmPrinterC2ERNS_13TargetMachineERNS_10MCStreamerE\", \"llvm::AsmPrinter::AsmPrinter(llvm::TargetMachine&, llvm::MCStreamer&)\"},\n    {\"_ZN4llvm10AsmPrinterD0Ev\", \"llvm::AsmPrinter::~AsmPrinter()\"},\n    {\"_ZN4llvm10AsmPrinterD1Ev\", \"llvm::AsmPrinter::~AsmPrinter()\"},\n    {\"_ZN4llvm10AsmPrinterD2Ev\", \"llvm::AsmPrinter::~AsmPrinter()\"},\n    {\"_ZNK4llvm10AsmPrinter17getFunctionNumberEv\", \"llvm::AsmPrinter::getFunctionNumber() const\"},\n    {\"_ZNK4llvm10AsmPrinter18getObjFileLoweringEv\", \"llvm::AsmPrinter::getObjFileLowering() const\"},\n    {\"_ZNK4llvm10AsmPrinter13getDataLayoutEv\", \"llvm::AsmPrinter::getDataLayout() const\"},\n    {\"_ZNK4llvm10AsmPrinter17getCurrentSectionEv\", \"llvm::AsmPrinter::getCurrentSection() const\"},\n    {\"_ZNK4llvm10AsmPrinter16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::AsmPrinter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm10AsmPrinter16doInitializationERNS_6ModuleE\", \"llvm::AsmPrinter::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm10AsmPrinter20GetOrCreateGCPrinterEPNS_10GCStrategyE\", \"llvm::AsmPrinter::GetOrCreateGCPrinter(llvm::GCStrategy*)\"},\n    {\"_ZNK4llvm10AsmPrinter11EmitLinkageEjPNS_8MCSymbolE\", \"llvm::AsmPrinter::EmitLinkage(unsigned int, llvm::MCSymbol*) const\"},\n    {\"_ZN4llvm10AsmPrinter18EmitGlobalVariableEPKNS_14GlobalVariableE\", \"llvm::AsmPrinter::EmitGlobalVariable(llvm::GlobalVariable const*)\"},\n    {\"_ZN4llvm10AsmPrinter21EmitSpecialLLVMGlobalEPKNS_14GlobalVariableE\", \"llvm::AsmPrinter::EmitSpecialLLVMGlobal(llvm::GlobalVariable const*)\"},\n    {\"_ZNK4llvm10AsmPrinter14EmitVisibilityEPNS_8MCSymbolEj\", \"llvm::AsmPrinter::EmitVisibility(llvm::MCSymbol*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter13EmitAlignmentEjPKNS_11GlobalValueE\", \"llvm::AsmPrinter::EmitAlignment(unsigned int, llvm::GlobalValue const*) const\"},\n    {\"_ZN4llvm10AsmPrinter18EmitGlobalConstantEPKNS_8ConstantEj\", \"llvm::AsmPrinter::EmitGlobalConstant(llvm::Constant const*, unsigned int)\"},\n    {\"_ZNK4llvm10AsmPrinter23GetExternalSymbolSymbolENS_9StringRefE\", \"llvm::AsmPrinter::GetExternalSymbolSymbol(llvm::StringRef) const\"},\n    {\"_ZN4llvm10AsmPrinter18EmitFunctionHeaderEv\", \"llvm::AsmPrinter::EmitFunctionHeader()\"},\n    {\"_ZN4llvm10AsmPrinter22EmitFunctionEntryLabelEv\", \"llvm::AsmPrinter::EmitFunctionEntryLabel()\"},\n    {\"_ZN4llvm10AsmPrinter16EmitFunctionBodyEv\", \"llvm::AsmPrinter::EmitFunctionBody()\"},\n    {\"_ZNK4llvm10AsmPrinter19EmitBasicBlockStartEPKNS_17MachineBasicBlockE\", \"llvm::AsmPrinter::EmitBasicBlockStart(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZN4llvm10AsmPrinter17EmitJumpTableInfoEv\", \"llvm::AsmPrinter::EmitJumpTableInfo()\"},\n    {\"_ZNK4llvm10AsmPrinter21getDebugValueLocationEPKNS_12MachineInstrE\", \"llvm::AsmPrinter::getDebugValueLocation(llvm::MachineInstr const*) const\"},\n    {\"_ZN4llvm10AsmPrinter14doFinalizationERNS_6ModuleE\", \"llvm::AsmPrinter::doFinalization(llvm::Module&)\"},\n    {\"_ZN4llvm10AsmPrinter20SetupMachineFunctionERNS_15MachineFunctionE\", \"llvm::AsmPrinter::SetupMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm10AsmPrinter16EmitConstantPoolEv\", \"llvm::AsmPrinter::EmitConstantPool()\"},\n    {\"_ZNK4llvm10AsmPrinter12GetCPISymbolEj\", \"llvm::AsmPrinter::GetCPISymbol(unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter14GetJTSetSymbolEjj\", \"llvm::AsmPrinter::GetJTSetSymbol(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter12GetJTISymbolEjb\", \"llvm::AsmPrinter::GetJTISymbol(unsigned int, bool) const\"},\n    {\"_ZNK4llvm10AsmPrinter18EmitJumpTableEntryEPKNS_20MachineJumpTableInfoEPKNS_17MachineBasicBlockEj\", \"llvm::AsmPrinter::EmitJumpTableEntry(llvm::MachineJumpTableInfo const*, llvm::MachineBasicBlock const*, unsigned int) const\"},\n    {\"_ZN4llvm10AsmPrinter16EmitLLVMUsedListEPNS_8ConstantE\", \"llvm::AsmPrinter::EmitLLVMUsedList(llvm::Constant*)\"},\n    {\"_ZN4llvm10AsmPrinter18EmitXXStructorListEPNS_8ConstantE\", \"llvm::AsmPrinter::EmitXXStructorList(llvm::Constant*)\"},\n    {\"_ZNK4llvm10AsmPrinter8EmitInt8Ei\", \"llvm::AsmPrinter::EmitInt8(int) const\"},\n    {\"_ZNK4llvm10AsmPrinter9EmitInt16Ei\", \"llvm::AsmPrinter::EmitInt16(int) const\"},\n    {\"_ZNK4llvm10AsmPrinter9EmitInt32Ei\", \"llvm::AsmPrinter::EmitInt32(int) const\"},\n    {\"_ZNK4llvm10AsmPrinter19EmitLabelDifferenceEPKNS_8MCSymbolES3_j\", \"llvm::AsmPrinter::EmitLabelDifference(llvm::MCSymbol const*, llvm::MCSymbol const*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter13GetTempSymbolENS_9StringRefEj\", \"llvm::AsmPrinter::GetTempSymbol(llvm::StringRef, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter25EmitLabelOffsetDifferenceEPKNS_8MCSymbolEyS3_j\", \"llvm::AsmPrinter::EmitLabelOffsetDifference(llvm::MCSymbol const*, unsigned long long, llvm::MCSymbol const*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter19EmitLabelPlusOffsetEPKNS_8MCSymbolEyj\", \"llvm::AsmPrinter::EmitLabelPlusOffset(llvm::MCSymbol const*, unsigned long long, unsigned int) const\"},\n    {\"_Z22EmitGlobalConstantImplPKN4llvm8ConstantEjRNS_10AsmPrinterE\", \"EmitGlobalConstantImpl(llvm::Constant const*, unsigned int, llvm::AsmPrinter&)\"},\n    {\"_ZN4llvm10AsmPrinter28EmitMachineConstantPoolValueEPNS_24MachineConstantPoolValueE\", \"llvm::AsmPrinter::EmitMachineConstantPoolValue(llvm::MachineConstantPoolValue*)\"},\n    {\"_ZNK4llvm10AsmPrinter11printOffsetExRNS_11raw_ostreamE\", \"llvm::AsmPrinter::printOffset(long long, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm10AsmPrinter13GetTempSymbolENS_9StringRefE\", \"llvm::AsmPrinter::GetTempSymbol(llvm::StringRef) const\"},\n    {\"_ZNK4llvm10AsmPrinter21GetBlockAddressSymbolEPKNS_12BlockAddressE\", \"llvm::AsmPrinter::GetBlockAddressSymbol(llvm::BlockAddress const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter21GetBlockAddressSymbolEPKNS_10BasicBlockE\", \"llvm::AsmPrinter::GetBlockAddressSymbol(llvm::BasicBlock const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter28GetSymbolWithGlobalValueBaseEPKNS_11GlobalValueENS_9StringRefEb\", \"llvm::AsmPrinter::GetSymbolWithGlobalValueBase(llvm::GlobalValue const*, llvm::StringRef, bool) const\"},\n    {\"_Z26EmitBasicBlockLoopCommentsRKN4llvm17MachineBasicBlockEPKNS_15MachineLoopInfoERKNS_10AsmPrinterE\", \"EmitBasicBlockLoopComments(llvm::MachineBasicBlock const&, llvm::MachineLoopInfo const*, llvm::AsmPrinter const&)\"},\n    {\"_ZNK4llvm10AsmPrinter33isBlockOnlyReachableByFallthroughEPKNS_17MachineBasicBlockE\", \"llvm::AsmPrinter::isBlockOnlyReachableByFallthrough(llvm::MachineBasicBlock const*) const\"},\n    {\"_Z22PrintParentLoopCommentRN4llvm11raw_ostreamEPKNS_11MachineLoopEj\", \"PrintParentLoopComment(llvm::raw_ostream&, llvm::MachineLoop const*, unsigned int)\"},\n    {\"_Z21PrintChildLoopCommentRN4llvm11raw_ostreamEPKNS_11MachineLoopEj\", \"PrintChildLoopComment(llvm::raw_ostream&, llvm::MachineLoop const*, unsigned int)\"},\n    {\"_Z13LowerConstantPKN4llvm8ConstantERNS_10AsmPrinterE\", \"LowerConstant(llvm::Constant const*, llvm::AsmPrinter&)\"},\n    {\"_Z12EmitDebugLocN4llvm8DebugLocEPKNS_15MachineFunctionERNS_11raw_ostreamE\", \"EmitDebugLoc(llvm::DebugLoc, llvm::MachineFunction const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10GCStrategyEPNS_17GCMetadataPrinterENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::GCStrategy*, llvm::GCMetadataPrinter*, llvm::DenseMapInfo<llvm::GCStrategy*>, llvm::DenseMapInfo<llvm::GCMetadataPrinter*> >::insert(std::pair<llvm::GCStrategy*, llvm::GCMetadataPrinter*> const&)\"},\n    {\"_ZN4llvm10AsmPrinter20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::AsmPrinter::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm10AsmPrinter18EmitStartOfAsmFileERNS_6ModuleE\", \"llvm::AsmPrinter::EmitStartOfAsmFile(llvm::Module&)\"},\n    {\"_ZN4llvm10AsmPrinter16EmitEndOfAsmFileERNS_6ModuleE\", \"llvm::AsmPrinter::EmitEndOfAsmFile(llvm::Module&)\"},\n    {\"_ZN4llvm10AsmPrinter15EmitInstructionEPKNS_12MachineInstrE\", \"llvm::AsmPrinter::EmitInstruction(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10GCStrategyEPNS_17GCMetadataPrinterENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::GCStrategy*, llvm::GCMetadataPrinter*, llvm::DenseMapInfo<llvm::GCStrategy*>, llvm::DenseMapInfo<llvm::GCMetadataPrinter*> >::InsertIntoBucket(llvm::GCStrategy* const&, llvm::GCMetadataPrinter* const&, std::pair<llvm::GCStrategy*, llvm::GCMetadataPrinter*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10GCStrategyEPNS_17GCMetadataPrinterENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::GCStrategy*, llvm::GCMetadataPrinter*, llvm::DenseMapInfo<llvm::GCStrategy*>, llvm::DenseMapInfo<llvm::GCMetadataPrinter*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIjEaSERKS1_\", \"llvm::SmallVectorImpl<unsigned int>::operator=(llvm::SmallVectorImpl<unsigned int> const&)\"},\n    {\"_ZN4llvm14format_object1IyED1Ev\", \"llvm::format_object1<unsigned long long>::~format_object1()\"},\n    {\"_ZNK4llvm14format_object1IyE7snprintEPcj\", \"llvm::format_object1<unsigned long long>::snprint(char*, unsigned int) const\"},\n    {\"_ZN4llvm14format_object1IyED0Ev\", \"llvm::format_object1<unsigned long long>::~format_object1()\"},\n    {\"_ZNK4llvm10AsmPrinter11EmitSLEB128EiPKc\", \"llvm::AsmPrinter::EmitSLEB128(int, char const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter11EmitULEB128EjPKcj\", \"llvm::AsmPrinter::EmitULEB128(unsigned int, char const*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter11EmitCFAByteEj\", \"llvm::AsmPrinter::EmitCFAByte(unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter16EmitEncodingByteEjPKc\", \"llvm::AsmPrinter::EmitEncodingByte(unsigned int, char const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter21GetSizeOfEncodedValueEj\", \"llvm::AsmPrinter::GetSizeOfEncodedValue(unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter13EmitReferenceEPKNS_8MCSymbolEj\", \"llvm::AsmPrinter::EmitReference(llvm::MCSymbol const*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter13EmitReferenceEPKNS_11GlobalValueEj\", \"llvm::AsmPrinter::EmitReference(llvm::GlobalValue const*, unsigned int) const\"},\n    {\"_ZNK4llvm10AsmPrinter17EmitSectionOffsetEPKNS_8MCSymbolES3_\", \"llvm::AsmPrinter::EmitSectionOffset(llvm::MCSymbol const*, llvm::MCSymbol const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter14EmitFrameMovesERKSt6vectorINS_11MachineMoveESaIS2_EEPNS_8MCSymbolEb\", \"llvm::AsmPrinter::EmitFrameMoves(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> > const&, llvm::MCSymbol*, bool) const\"},\n    {\"_ZNK4llvm10AsmPrinter17EmitCFIFrameMovesERKSt6vectorINS_11MachineMoveESaIS2_EE\", \"llvm::AsmPrinter::EmitCFIFrameMoves(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> > const&) const\"},\n    {\"_ZNK4llvm10AsmPrinter13EmitInlineAsmENS_9StringRefEPKNS_6MDNodeE\", \"llvm::AsmPrinter::EmitInlineAsm(llvm::StringRef, llvm::MDNode const*) const\"},\n    {\"_Z17SrcMgrDiagHandlerRKN4llvm12SMDiagnosticEPv\", \"SrcMgrDiagHandler(llvm::SMDiagnostic const&, void*)\"},\n    {\"_ZNK4llvm10AsmPrinter13EmitInlineAsmEPKNS_12MachineInstrE\", \"llvm::AsmPrinter::EmitInlineAsm(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm10AsmPrinter12PrintSpecialEPKNS_12MachineInstrERNS_11raw_ostreamEPKc\", \"llvm::AsmPrinter::PrintSpecial(llvm::MachineInstr const*, llvm::raw_ostream&, char const*) const\"},\n    {\"_ZN4llvm10AsmPrinter15PrintAsmOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::AsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm10AsmPrinter21PrintAsmMemoryOperandEPKNS_12MachineInstrEjjPKcRNS_11raw_ostreamE\", \"llvm::AsmPrinter::PrintAsmMemoryOperand(llvm::MachineInstr const*, unsigned int, unsigned int, char const*, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm13DIEAbbrevData7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::DIEAbbrevData::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm9DIEAbbrev7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::DIEAbbrev::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm9DIEAbbrev4EmitEPNS_10AsmPrinterE\", \"llvm::DIEAbbrev::Emit(llvm::AsmPrinter*) const\"},\n    {\"_ZN4llvm3DIED0Ev\", \"llvm::DIE::~DIE()\"},\n    {\"_ZN4llvm3DIED1Ev\", \"llvm::DIE::~DIE()\"},\n    {\"_ZN4llvm3DIED2Ev\", \"llvm::DIE::~DIE()\"},\n    {\"_ZN4llvm3DIE16addSiblingOffsetERNS_16BumpPtrAllocatorE\", \"llvm::DIE::addSiblingOffset(llvm::BumpPtrAllocator&)\"},\n    {\"_ZNK4llvm10DIEInteger9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIEInteger::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm10DIEInteger6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIEInteger::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm9DIEString9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIEString::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIELabel9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIELabel::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIELabel6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIELabel::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIEDelta9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIEDelta::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIEDelta6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIEDelta::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIEEntry9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIEEntry::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZN4llvm8DIEBlock11ComputeSizeEPNS_10AsmPrinterE\", \"llvm::DIEBlock::ComputeSize(llvm::AsmPrinter*)\"},\n    {\"_ZNK4llvm8DIEBlock9EmitValueEPNS_10AsmPrinterEj\", \"llvm::DIEBlock::EmitValue(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNK4llvm8DIEBlock6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIEBlock::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_8DIEValueEE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<llvm::DIEValue*>::insert(llvm::DIEValue**, llvm::DIEValue* const&)\"},\n    {\"_ZN4llvm10DIEIntegerD1Ev\", \"llvm::DIEInteger::~DIEInteger()\"},\n    {\"_ZN4llvm10DIEIntegerD0Ev\", \"llvm::DIEInteger::~DIEInteger()\"},\n    {\"_ZN4llvm9DIEStringD1Ev\", \"llvm::DIEString::~DIEString()\"},\n    {\"_ZN4llvm9DIEStringD0Ev\", \"llvm::DIEString::~DIEString()\"},\n    {\"_ZN4llvm8DIELabelD1Ev\", \"llvm::DIELabel::~DIELabel()\"},\n    {\"_ZN4llvm8DIELabelD0Ev\", \"llvm::DIELabel::~DIELabel()\"},\n    {\"_ZN4llvm8DIEDeltaD1Ev\", \"llvm::DIEDelta::~DIEDelta()\"},\n    {\"_ZN4llvm8DIEDeltaD0Ev\", \"llvm::DIEDelta::~DIEDelta()\"},\n    {\"_ZN4llvm8DIEEntryD1Ev\", \"llvm::DIEEntry::~DIEEntry()\"},\n    {\"_ZN4llvm8DIEEntryD0Ev\", \"llvm::DIEEntry::~DIEEntry()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_13DIEAbbrevDataEE6insertEPS1_RKS1_\", \"llvm::SmallVectorImpl<llvm::DIEAbbrevData>::insert(llvm::DIEAbbrevData*, llvm::DIEAbbrevData const&)\"},\n    {\"_ZN4llvm17DwarfCFIExceptionC1EPNS_10AsmPrinterE\", \"llvm::DwarfCFIException::DwarfCFIException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm17DwarfCFIExceptionC2EPNS_10AsmPrinterE\", \"llvm::DwarfCFIException::DwarfCFIException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm17DwarfCFIExceptionD0Ev\", \"llvm::DwarfCFIException::~DwarfCFIException()\"},\n    {\"_ZN4llvm17DwarfCFIExceptionD1Ev\", \"llvm::DwarfCFIException::~DwarfCFIException()\"},\n    {\"_ZN4llvm17DwarfCFIExceptionD2Ev\", \"llvm::DwarfCFIException::~DwarfCFIException()\"},\n    {\"_ZN4llvm17DwarfCFIException9EndModuleEv\", \"llvm::DwarfCFIException::EndModule()\"},\n    {\"_ZN4llvm17DwarfCFIException13BeginFunctionEPKNS_15MachineFunctionE\", \"llvm::DwarfCFIException::BeginFunction(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm17DwarfCFIException11EndFunctionEv\", \"llvm::DwarfCFIException::EndFunction()\"},\n    {\"_ZN4llvm8DbgScopeD0Ev\", \"llvm::DbgScope::~DbgScope()\"},\n    {\"_ZN4llvm8DbgScopeD1Ev\", \"llvm::DbgScope::~DbgScope()\"},\n    {\"_ZN4llvm8DbgScopeD2Ev\", \"llvm::DbgScope::~DbgScope()\"},\n    {\"_ZN4llvm10DwarfDebugC1EPNS_10AsmPrinterEPNS_6ModuleE\", \"llvm::DwarfDebug::DwarfDebug(llvm::AsmPrinter*, llvm::Module*)\"},\n    {\"_ZN4llvm10DwarfDebugC2EPNS_10AsmPrinterEPNS_6ModuleE\", \"llvm::DwarfDebug::DwarfDebug(llvm::AsmPrinter*, llvm::Module*)\"},\n    {\"_ZN4llvm10DwarfDebug11beginModuleEPNS_6ModuleE\", \"llvm::DwarfDebug::beginModule(llvm::Module*)\"},\n    {\"_ZN4llvm10DwarfDebugD1Ev\", \"llvm::DwarfDebug::~DwarfDebug()\"},\n    {\"_ZN4llvm10DwarfDebugD2Ev\", \"llvm::DwarfDebug::~DwarfDebug()\"},\n    {\"_ZN4llvm10DwarfDebug18getStringPoolEntryENS_9StringRefE\", \"llvm::DwarfDebug::getStringPoolEntry(llvm::StringRef)\"},\n    {\"_ZN4llvm10DwarfDebug18assignAbbrevNumberERNS_9DIEAbbrevE\", \"llvm::DwarfDebug::assignAbbrevNumber(llvm::DIEAbbrev&)\"},\n    {\"_ZN4llvm10DwarfDebug14createDIEEntryEPNS_3DIEE\", \"llvm::DwarfDebug::createDIEEntry(llvm::DIE*)\"},\n    {\"_ZN4llvm10DwarfDebug7addUIntEPNS_3DIEEjjy\", \"llvm::DwarfDebug::addUInt(llvm::DIE*, unsigned int, unsigned int, unsigned long long)\"},\n    {\"_ZN4llvm10DwarfDebug7addSIntEPNS_3DIEEjjx\", \"llvm::DwarfDebug::addSInt(llvm::DIE*, unsigned int, unsigned int, long long)\"},\n    {\"_ZN4llvm10DwarfDebug9addStringEPNS_3DIEEjjNS_9StringRefE\", \"llvm::DwarfDebug::addString(llvm::DIE*, unsigned int, unsigned int, llvm::StringRef)\"},\n    {\"_ZN4llvm10DwarfDebug8addLabelEPNS_3DIEEjjPKNS_8MCSymbolE\", \"llvm::DwarfDebug::addLabel(llvm::DIE*, unsigned int, unsigned int, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm10DwarfDebug8addDeltaEPNS_3DIEEjjPKNS_8MCSymbolES5_\", \"llvm::DwarfDebug::addDelta(llvm::DIE*, unsigned int, unsigned int, llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm10DwarfDebug11addDIEEntryEPNS_3DIEEjjS2_\", \"llvm::DwarfDebug::addDIEEntry(llvm::DIE*, unsigned int, unsigned int, llvm::DIE*)\"},\n    {\"_ZN4llvm10DwarfDebug8addBlockEPNS_3DIEEjjPNS_8DIEBlockE\", \"llvm::DwarfDebug::addBlock(llvm::DIE*, unsigned int, unsigned int, llvm::DIEBlock*)\"},\n    {\"_ZN4llvm10DwarfDebug13addSourceLineEPNS_3DIEENS_10DIVariableE\", \"llvm::DwarfDebug::addSourceLine(llvm::DIE*, llvm::DIVariable)\"},\n    {\"_ZN4llvm10DwarfDebug19GetOrCreateSourceIDENS_9StringRefE\", \"llvm::DwarfDebug::GetOrCreateSourceID(llvm::StringRef)\"},\n    {\"_ZN4llvm10DwarfDebug13addSourceLineEPNS_3DIEENS_16DIGlobalVariableE\", \"llvm::DwarfDebug::addSourceLine(llvm::DIE*, llvm::DIGlobalVariable)\"},\n    {\"_ZN4llvm10DwarfDebug13addSourceLineEPNS_3DIEENS_12DISubprogramE\", \"llvm::DwarfDebug::addSourceLine(llvm::DIE*, llvm::DISubprogram)\"},\n    {\"_ZN4llvm10DwarfDebug13addSourceLineEPNS_3DIEENS_6DITypeE\", \"llvm::DwarfDebug::addSourceLine(llvm::DIE*, llvm::DIType)\"},\n    {\"_ZN4llvm10DwarfDebug13addSourceLineEPNS_3DIEENS_11DINameSpaceE\", \"llvm::DwarfDebug::addSourceLine(llvm::DIE*, llvm::DINameSpace)\"},\n    {\"_ZN4llvm10DwarfDebug18addVariableAddressERPNS_11DbgVariableEPNS_3DIEEx\", \"llvm::DwarfDebug::addVariableAddress(llvm::DbgVariable*&, llvm::DIE*, long long)\"},\n    {\"_ZN4llvm10DwarfDebug17addComplexAddressERPNS_11DbgVariableEPNS_3DIEEjRKNS_15MachineLocationE\", \"llvm::DwarfDebug::addComplexAddress(llvm::DbgVariable*&, llvm::DIE*, unsigned int, llvm::MachineLocation const&)\"},\n    {\"_ZN4llvm10DwarfDebug20addBlockByrefAddressERPNS_11DbgVariableEPNS_3DIEEjRKNS_15MachineLocationE\", \"llvm::DwarfDebug::addBlockByrefAddress(llvm::DbgVariable*&, llvm::DIE*, unsigned int, llvm::MachineLocation const&)\"},\n    {\"_ZN4llvm10DwarfDebug10addAddressEPNS_3DIEEjRKNS_15MachineLocationE\", \"llvm::DwarfDebug::addAddress(llvm::DIE*, unsigned int, llvm::MachineLocation const&)\"},\n    {\"_ZN4llvm10DwarfDebug18addRegisterAddressEPNS_3DIEERKNS_14MachineOperandE\", \"llvm::DwarfDebug::addRegisterAddress(llvm::DIE*, llvm::MachineOperand const&)\"},\n    {\"_ZN4llvm10DwarfDebug16addConstantValueEPNS_3DIEERKNS_14MachineOperandE\", \"llvm::DwarfDebug::addConstantValue(llvm::DIE*, llvm::MachineOperand const&)\"},\n    {\"_ZN4llvm10DwarfDebug18addConstantFPValueEPNS_3DIEERKNS_14MachineOperandE\", \"llvm::DwarfDebug::addConstantFPValue(llvm::DIE*, llvm::MachineOperand const&)\"},\n    {\"_ZN4llvm10DwarfDebug16addConstantValueEPNS_3DIEEPNS_11ConstantIntEb\", \"llvm::DwarfDebug::addConstantValue(llvm::DIE*, llvm::ConstantInt*, bool)\"},\n    {\"_ZN4llvm10DwarfDebug17addToContextOwnerEPNS_3DIEENS_12DIDescriptorE\", \"llvm::DwarfDebug::addToContextOwner(llvm::DIE*, llvm::DIDescriptor)\"},\n    {\"_ZN4llvm10DwarfDebug18getOrCreateTypeDIEENS_6DITypeE\", \"llvm::DwarfDebug::getOrCreateTypeDIE(llvm::DIType)\"},\n    {\"_ZN4llvm10DwarfDebug20getOrCreateNameSpaceENS_11DINameSpaceE\", \"llvm::DwarfDebug::getOrCreateNameSpace(llvm::DINameSpace)\"},\n    {\"_ZN4llvm10DwarfDebug19createSubprogramDIEENS_12DISubprogramE\", \"llvm::DwarfDebug::createSubprogramDIE(llvm::DISubprogram)\"},\n    {\"_ZNK4llvm10DwarfDebug14getCompileUnitEPKNS_6MDNodeE\", \"llvm::DwarfDebug::getCompileUnit(llvm::MDNode const*) const\"},\n    {\"_ZN4llvm10DwarfDebug16constructTypeDIEERNS_3DIEENS_11DIBasicTypeE\", \"llvm::DwarfDebug::constructTypeDIE(llvm::DIE&, llvm::DIBasicType)\"},\n    {\"_ZN4llvm10DwarfDebug16constructTypeDIEERNS_3DIEENS_15DICompositeTypeE\", \"llvm::DwarfDebug::constructTypeDIE(llvm::DIE&, llvm::DICompositeType)\"},\n    {\"_ZN4llvm10DwarfDebug16constructTypeDIEERNS_3DIEENS_13DIDerivedTypeE\", \"llvm::DwarfDebug::constructTypeDIE(llvm::DIE&, llvm::DIDerivedType)\"},\n    {\"_ZN4llvm10DwarfDebug7addTypeEPNS_3DIEENS_6DITypeE\", \"llvm::DwarfDebug::addType(llvm::DIE*, llvm::DIType)\"},\n    {\"_ZN4llvm10DwarfDebug21constructArrayTypeDIEERNS_3DIEEPNS_15DICompositeTypeE\", \"llvm::DwarfDebug::constructArrayTypeDIE(llvm::DIE&, llvm::DICompositeType*)\"},\n    {\"_ZN4llvm10DwarfDebug20constructEnumTypeDIEENS_12DIEnumeratorE\", \"llvm::DwarfDebug::constructEnumTypeDIE(llvm::DIEnumerator)\"},\n    {\"_ZN4llvm10DwarfDebug15createMemberDIEENS_13DIDerivedTypeE\", \"llvm::DwarfDebug::createMemberDIE(llvm::DIDerivedType)\"},\n    {\"_ZN4llvm10DwarfDebug35getOrCreateTemplateTypeParameterDIEENS_23DITemplateTypeParameterE\", \"llvm::DwarfDebug::getOrCreateTemplateTypeParameterDIE(llvm::DITemplateTypeParameter)\"},\n    {\"_ZN4llvm10DwarfDebug36getOrCreateTemplateValueParameterDIEENS_24DITemplateValueParameterE\", \"llvm::DwarfDebug::getOrCreateTemplateValueParameterDIE(llvm::DITemplateValueParameter)\"},\n    {\"_ZN4llvm10DwarfDebug20constructSubrangeDIEERNS_3DIEENS_10DISubrangeEPS1_\", \"llvm::DwarfDebug::constructSubrangeDIE(llvm::DIE&, llvm::DISubrange, llvm::DIE*)\"},\n    {\"_ZN4llvm10DwarfDebug24getOrCreateAbstractScopeEPKNS_6MDNodeE\", \"llvm::DwarfDebug::getOrCreateAbstractScope(llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug24updateSubprogramScopeDIEEPKNS_6MDNodeE\", \"llvm::DwarfDebug::updateSubprogramScopeDIE(llvm::MDNode const*)\"},\n    {\"_Z19isSubprogramContextPKN4llvm6MDNodeE\", \"isSubprogramContext(llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug24constructLexicalScopeDIEEPNS_8DbgScopeE\", \"llvm::DwarfDebug::constructLexicalScopeDIE(llvm::DbgScope*)\"},\n    {\"_ZN4llvm10DwarfDebug18getLabelBeforeInsnEPKNS_12MachineInstrE\", \"llvm::DwarfDebug::getLabelBeforeInsn(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm10DwarfDebug17getLabelAfterInsnEPKNS_12MachineInstrE\", \"llvm::DwarfDebug::getLabelAfterInsn(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm10DwarfDebug24constructInlinedScopeDIEEPNS_8DbgScopeE\", \"llvm::DwarfDebug::constructInlinedScopeDIE(llvm::DbgScope*)\"},\n    {\"_ZN4llvm10DwarfDebug20constructVariableDIEEPNS_11DbgVariableEPNS_8DbgScopeE\", \"llvm::DwarfDebug::constructVariableDIE(llvm::DbgVariable*, llvm::DbgScope*)\"},\n    {\"_ZN4llvm10DwarfDebug22findVariableFrameIndexEPKNS_11DbgVariableEPi\", \"llvm::DwarfDebug::findVariableFrameIndex(llvm::DbgVariable const*, int*)\"},\n    {\"_ZN4llvm10DwarfDebug11addPubTypesENS_12DISubprogramE\", \"llvm::DwarfDebug::addPubTypes(llvm::DISubprogram)\"},\n    {\"_ZN4llvm10DwarfDebug17constructScopeDIEEPNS_8DbgScopeE\", \"llvm::DwarfDebug::constructScopeDIE(llvm::DbgScope*)\"},\n    {\"_ZN4llvm10DwarfDebug20constructCompileUnitEPKNS_6MDNodeE\", \"llvm::DwarfDebug::constructCompileUnit(llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug26constructGlobalVariableDIEEPKNS_6MDNodeE\", \"llvm::DwarfDebug::constructGlobalVariableDIE(llvm::MDNode const*)\"},\n    {\"_Z16isUnsignedDITypeN4llvm6DITypeE\", \"isUnsignedDIType(llvm::DIType)\"},\n    {\"_ZN4llvm10DwarfDebug22constructSubprogramDIEEPKNS_6MDNodeE\", \"llvm::DwarfDebug::constructSubprogramDIE(llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug17EmitSectionLabelsEv\", \"llvm::DwarfDebug::EmitSectionLabels()\"},\n    {\"_ZN4llvm10DwarfDebug9endModuleEv\", \"llvm::DwarfDebug::endModule()\"},\n    {\"_ZN4llvm10DwarfDebug20emitCommonDebugFrameEv\", \"llvm::DwarfDebug::emitCommonDebugFrame()\"},\n    {\"_ZN4llvm10DwarfDebug22emitFunctionDebugFrameERKNS0_22FunctionDebugFrameInfoE\", \"llvm::DwarfDebug::emitFunctionDebugFrame(llvm::DwarfDebug::FunctionDebugFrameInfo const&)\"},\n    {\"_ZN4llvm10DwarfDebug21computeSizeAndOffsetsEv\", \"llvm::DwarfDebug::computeSizeAndOffsets()\"},\n    {\"_ZN4llvm10DwarfDebug13emitDebugInfoEv\", \"llvm::DwarfDebug::emitDebugInfo()\"},\n    {\"_ZNK4llvm10DwarfDebug17emitAbbreviationsEv\", \"llvm::DwarfDebug::emitAbbreviations() const\"},\n    {\"_ZN4llvm10DwarfDebug17emitDebugPubNamesEv\", \"llvm::DwarfDebug::emitDebugPubNames()\"},\n    {\"_ZN4llvm10DwarfDebug17emitDebugPubTypesEv\", \"llvm::DwarfDebug::emitDebugPubTypes()\"},\n    {\"_ZN4llvm10DwarfDebug12emitDebugLocEv\", \"llvm::DwarfDebug::emitDebugLoc()\"},\n    {\"_ZN4llvm10DwarfDebug16EmitDebugARangesEv\", \"llvm::DwarfDebug::EmitDebugARanges()\"},\n    {\"_ZN4llvm10DwarfDebug15emitDebugRangesEv\", \"llvm::DwarfDebug::emitDebugRanges()\"},\n    {\"_ZN4llvm10DwarfDebug16emitDebugMacInfoEv\", \"llvm::DwarfDebug::emitDebugMacInfo()\"},\n    {\"_ZN4llvm10DwarfDebug19emitDebugInlineInfoEv\", \"llvm::DwarfDebug::emitDebugInlineInfo()\"},\n    {\"_ZN4llvm10DwarfDebug12emitDebugStrEv\", \"llvm::DwarfDebug::emitDebugStr()\"},\n    {\"_ZN4llvm10DwarfDebug20findAbstractVariableERNS_10DIVariableENS_8DebugLocE\", \"llvm::DwarfDebug::findAbstractVariable(llvm::DIVariable&, llvm::DebugLoc)\"},\n    {\"_ZN4llvm10DwarfDebug31collectVariableInfoFromMMITableEPKNS_15MachineFunctionERNS_11SmallPtrSetIPKNS_6MDNodeELj16EEE\", \"llvm::DwarfDebug::collectVariableInfoFromMMITable(llvm::MachineFunction const*, llvm::SmallPtrSet<llvm::MDNode const*, 16u>&)\"},\n    {\"_ZN4llvm10DwarfDebug24recordVariableFrameIndexEPKNS_11DbgVariableEi\", \"llvm::DwarfDebug::recordVariableFrameIndex(llvm::DbgVariable const*, int)\"},\n    {\"_ZN4llvm10DwarfDebug19collectVariableInfoEPKNS_15MachineFunctionERNS_11SmallPtrSetIPKNS_6MDNodeELj16EEE\", \"llvm::DwarfDebug::collectVariableInfo(llvm::MachineFunction const*, llvm::SmallPtrSet<llvm::MDNode const*, 16u>&)\"},\n    {\"_ZN4llvm10DwarfDebug12findDbgScopeEPKNS_12MachineInstrE\", \"llvm::DwarfDebug::findDbgScope(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm10DwarfDebug16beginInstructionEPKNS_12MachineInstrE\", \"llvm::DwarfDebug::beginInstruction(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm10DwarfDebug16recordSourceLineEjjPKNS_6MDNodeE\", \"llvm::DwarfDebug::recordSourceLine(unsigned int, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug14endInstructionEPKNS_12MachineInstrE\", \"llvm::DwarfDebug::endInstruction(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm10DwarfDebug19getOrCreateDbgScopeEPKNS_6MDNodeES3_\", \"llvm::DwarfDebug::getOrCreateDbgScope(llvm::MDNode const*, llvm::MDNode const*)\"},\n    {\"_ZN4llvm10DwarfDebug23extractScopeInformationEv\", \"llvm::DwarfDebug::extractScopeInformation()\"},\n    {\"_ZN4llvm10DwarfDebug20identifyScopeMarkersEv\", \"llvm::DwarfDebug::identifyScopeMarkers()\"},\n    {\"_ZN4llvm10DwarfDebug13beginFunctionEPKNS_15MachineFunctionE\", \"llvm::DwarfDebug::beginFunction(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm10DwarfDebug11endFunctionEPKNS_15MachineFunctionE\", \"llvm::DwarfDebug::endFunction(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm10DwarfDebug20computeSizeAndOffsetEPNS_3DIEEjb\", \"llvm::DwarfDebug::computeSizeAndOffset(llvm::DIE*, unsigned int, bool)\"},\n    {\"_ZN4llvm10DwarfDebug7emitDIEEPNS_3DIEE\", \"llvm::DwarfDebug::emitDIE(llvm::DIE*)\"},\n    {\"_ZN4llvm10DwarfDebug19emitEndOfLineMatrixEj\", \"llvm::DwarfDebug::emitEndOfLineMatrix(unsigned int)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIjPNS_14StringMapEntryIS1_IPNS_8MCSymbolEjEEEEEEiPKvSA_\", \"int llvm::array_pod_sort_comparator<std::pair<unsigned int, llvm::StringMapEntry<std::pair<llvm::MCSymbol*, unsigned int> >*> >(void const*, void const*)\"},\n    {\"_ZN4llvm10FoldingSetINS_9DIEAbbrevEED1Ev\", \"llvm::FoldingSet<llvm::DIEAbbrev>::~FoldingSet()\"},\n    {\"_ZNK4llvm11DbgVariable7getTypeEv\", \"llvm::DbgVariable::getType() const\"},\n    {\"_ZN4llvm8DenseMapIPNS_3DIEEPKNS_6MDNodeENS_12DenseMapInfoIS2_EENS6_IS5_EEE6insertERKSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::DIE*, llvm::MDNode const*, llvm::DenseMapInfo<llvm::DIE*>, llvm::DenseMapInfo<llvm::MDNode const*> >::insert(std::pair<llvm::DIE*, llvm::MDNode const*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_3DIEENS_12DenseMapInfoIS3_EENS6_IS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIE*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIE*> >::insert(std::pair<llvm::MDNode const*, llvm::DIE*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11CompileUnitENS_12DenseMapInfoIS3_EENS6_IS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::CompileUnit*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::CompileUnit*> >::insert(std::pair<llvm::MDNode const*, llvm::CompileUnit*> const&)\"},\n    {\"_ZN4llvm12UniqueVectorIPKNS_9MCSectionEE6insertERKS3_\", \"llvm::UniqueVector<llvm::MCSection const*>::insert(llvm::MCSection const* const&)\"},\n    {\"_ZN4llvm22DeleteContainerSecondsINS_8DenseMapIPKNS_6MDNodeEPNS_8DbgScopeENS_12DenseMapInfoIS4_EENS7_IS6_EEEEEEvRT_\", \"void llvm::DeleteContainerSeconds<llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> > >(llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> >&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::insert(std::pair<llvm::MDNode const*, llvm::DbgScope*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEiNS_12DenseMapInfoIS3_EENS4_IiEEE16InsertIntoBucketERKS3_RKiPSt4pairIS3_iE\", \"llvm::DenseMap<llvm::DbgVariable const*, int, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<int> >::InsertIntoBucket(llvm::DbgVariable const* const&, int const&, std::pair<llvm::DbgVariable const*, int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEiNS_12DenseMapInfoIS3_EENS4_IiEEE4growEj\", \"llvm::DenseMap<llvm::DbgVariable const*, int, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrEPNS_8MCSymbolENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::MCSymbol*, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::MCSymbol*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11DbgVariableENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgVariable*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgVariable*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEPKNS_12MachineInstrENS_12DenseMapInfoIS3_EENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::MachineInstr const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableES3_NS_12DenseMapInfoIS3_EES5_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::DbgVariable const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::DbgVariable const*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEiNS_12DenseMapInfoIS3_EENS4_IiEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::DbgVariable const*, int, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<int> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorIN4llvm10DwarfDebug22FunctionDebugFrameInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::DwarfDebug::FunctionDebugFrameInfo, std::allocator<llvm::DwarfDebug::FunctionDebugFrameInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DwarfDebug::FunctionDebugFrameInfo*, std::vector<llvm::DwarfDebug::FunctionDebugFrameInfo, std::allocator<llvm::DwarfDebug::FunctionDebugFrameInfo> > >, llvm::DwarfDebug::FunctionDebugFrameInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm11MachineMoveESaIS1_EEaSERKS3_\", \"std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> >::operator=(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::InsertIntoBucket(llvm::MachineInstr const* const&, llvm::DbgScope* const&, std::pair<llvm::MachineInstr const*, llvm::DbgScope*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::InsertIntoBucket(llvm::MDNode const* const&, llvm::DbgScope* const&, std::pair<llvm::MDNode const*, llvm::DbgScope*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DbgScopeENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgScope*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgScope*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrEPNS_8MCSymbolENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::MCSymbol*, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::MCSymbol*> >::InsertIntoBucket(llvm::MachineInstr const* const&, llvm::MCSymbol* const&, std::pair<llvm::MachineInstr const*, llvm::MCSymbol*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrEPNS_8MCSymbolENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::MCSymbol*, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::MCSymbol*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_16DotDebugLocEntryELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::DotDebugLocEntry, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEPKNS_12MachineInstrENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PSt4pairIS3_S6_E\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::MachineInstr const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::InsertIntoBucket(llvm::DbgVariable const* const&, llvm::MachineInstr const* const&, std::pair<llvm::DbgVariable const*, llvm::MachineInstr const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableEPKNS_12MachineInstrENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::MachineInstr const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::DbgVariable const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::DbgVariable const*> >::InsertIntoBucket(llvm::DbgVariable const* const&, llvm::DbgVariable const* const&, std::pair<llvm::DbgVariable const*, llvm::DbgVariable const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11DbgVariableES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<llvm::DbgVariable const*, llvm::DbgVariable const*, llvm::DenseMapInfo<llvm::DbgVariable const*>, llvm::DenseMapInfo<llvm::DbgVariable const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11DbgVariableENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgVariable*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgVariable*> >::InsertIntoBucket(llvm::MDNode const* const&, llvm::DbgVariable* const&, std::pair<llvm::MDNode const*, llvm::DbgVariable*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11DbgVariableENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DbgVariable*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DbgVariable*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm9MCSectionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::MCSection const*, std::pair<llvm::MCSection const* const, unsigned int>, std::_Select1st<std::pair<llvm::MCSection const* const, unsigned int> >, std::less<llvm::MCSection const*>, std::allocator<std::pair<llvm::MCSection const* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MCSection const* const, unsigned int> >, std::pair<llvm::MCSection const* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm9MCSectionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::MCSection const*, std::pair<llvm::MCSection const* const, unsigned int>, std::_Select1st<std::pair<llvm::MCSection const* const, unsigned int> >, std::less<llvm::MCSection const*>, std::allocator<std::pair<llvm::MCSection const* const, unsigned int> > >::_M_insert_unique(std::pair<llvm::MCSection const* const, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11CompileUnitENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::CompileUnit*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::CompileUnit*> >::InsertIntoBucket(llvm::MDNode const* const&, llvm::CompileUnit* const&, std::pair<llvm::MDNode const*, llvm::CompileUnit*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_11CompileUnitENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::CompileUnit*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::CompileUnit*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeENS_11SmallVectorISt4pairIPKNS_8MCSymbolEPNS_3DIEEELj4EEENS_12DenseMapInfoIS3_EENSD_ISC_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::MDNode const*, llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u>, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u> > >::FindAndConstruct(llvm::MDNode const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeENS_11SmallVectorISt4pairIPKNS_8MCSymbolEPNS_3DIEEELj4EEENS_12DenseMapInfoIS3_EENSD_ISC_EEE16InsertIntoBucketERKS3_RKSC_PS5_IS3_SC_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u>, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u> > >::InsertIntoBucket(llvm::MDNode const* const&, llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u> const&, std::pair<llvm::MDNode const*, llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeENS_11SmallVectorISt4pairIPKNS_8MCSymbolEPNS_3DIEEELj4EEENS_12DenseMapInfoIS3_EENSD_ISC_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u>, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<llvm::MCSymbol const*, llvm::DIE*>, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPKNS_8MCSymbolEPNS_3DIEEEEaSERKS8_\", \"llvm::SmallVectorImpl<std::pair<llvm::MCSymbol const*, llvm::DIE*> >::operator=(llvm::SmallVectorImpl<std::pair<llvm::MCSymbol const*, llvm::DIE*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_3DIEEPKNS_6MDNodeENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::DIE*, llvm::MDNode const*, llvm::DenseMapInfo<llvm::DIE*>, llvm::DenseMapInfo<llvm::MDNode const*> >::InsertIntoBucket(llvm::DIE* const&, llvm::MDNode const* const&, std::pair<llvm::DIE*, llvm::MDNode const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_3DIEEPKNS_6MDNodeENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::DIE*, llvm::MDNode const*, llvm::DenseMapInfo<llvm::DIE*>, llvm::DenseMapInfo<llvm::MDNode const*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm8DIEBlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::DIEBlock*, std::allocator<llvm::DIEBlock*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DIEBlock**, std::vector<llvm::DIEBlock*, std::allocator<llvm::DIEBlock*> > >, llvm::DIEBlock* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm9DIEAbbrevESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::DIEAbbrev*, std::allocator<llvm::DIEAbbrev*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DIEAbbrev**, std::vector<llvm::DIEAbbrev*, std::allocator<llvm::DIEAbbrev*> > >, llvm::DIEAbbrev* const&)\"},\n    {\"_ZN4llvm9StringMapISt4pairIPNS_8MCSymbolEjENS_15MallocAllocatorEE16GetOrCreateValueIS4_EERNS_14StringMapEntryIS4_EENS_9StringRefET_\", \"llvm::StringMapEntry<std::pair<llvm::MCSymbol*, unsigned int> >& llvm::StringMap<std::pair<llvm::MCSymbol*, unsigned int>, llvm::MallocAllocator>::GetOrCreateValue<std::pair<llvm::MCSymbol*, unsigned int> >(llvm::StringRef, std::pair<llvm::MCSymbol*, unsigned int>)\"},\n    {\"_ZN4llvm10FoldingSetINS_9DIEAbbrevEED0Ev\", \"llvm::FoldingSet<llvm::DIEAbbrev>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_9DIEAbbrevEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::DIEAbbrev>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_9DIEAbbrevEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS6_\", \"llvm::FoldingSet<llvm::DIEAbbrev>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_9DIEAbbrevEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::DIEAbbrev>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_3DIEENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIE*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIE*> >::InsertIntoBucket(llvm::MDNode const* const&, llvm::DIE* const&, std::pair<llvm::MDNode const*, llvm::DIE*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_3DIEENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIE*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIE*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm11CompileUnitD2Ev\", \"llvm::CompileUnit::~CompileUnit()\"},\n    {\"_ZN4llvm9StringMapIPNS_3DIEENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::DIE*>& llvm::StringMap<llvm::DIE*, llvm::MallocAllocator>::GetOrCreateValue<llvm::DIE*>(llvm::StringRef, llvm::DIE*)\"},\n    {\"_ZN4llvm11CompileUnitC2EjPNS_3DIEE\", \"llvm::CompileUnit::CompileUnit(unsigned int, llvm::DIE*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DIEEntryENS_12DenseMapInfoIS3_EENS6_IS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIEEntry*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIEEntry*> >::insert(std::pair<llvm::MDNode const*, llvm::DIEEntry*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DIEEntryENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIEEntry*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIEEntry*> >::InsertIntoBucket(llvm::MDNode const* const&, llvm::DIEEntry* const&, std::pair<llvm::MDNode const*, llvm::DIEEntry*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEPNS_8DIEEntryENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, llvm::DIEEntry*, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<llvm::DIEEntry*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9DIEAbbrevD1Ev\", \"llvm::DIEAbbrev::~DIEAbbrev()\"},\n    {\"_ZN4llvm9DIEAbbrevD0Ev\", \"llvm::DIEAbbrev::~DIEAbbrev()\"},\n    {\"_ZNSt6vectorIPN4llvm3DIEESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::DIE*, std::allocator<llvm::DIE*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DIE**, std::vector<llvm::DIE*, std::allocator<llvm::DIE*> > >, llvm::DIE* const&)\"},\n    {\"_ZN4llvm8DIEBlockD1Ev\", \"llvm::DIEBlock::~DIEBlock()\"},\n    {\"_ZN4llvm8DIEBlockD0Ev\", \"llvm::DIEBlock::~DIEBlock()\"},\n    {\"_ZThn16_N4llvm8DIEBlockD1Ev\", \"non-virtual thunk to llvm::DIEBlock::~DIEBlock()\"},\n    {\"_ZThn16_N4llvm8DIEBlockD0Ev\", \"non-virtual thunk to llvm::DIEBlock::~DIEBlock()\"},\n    {\"_ZN4llvm8DIEValueD1Ev\", \"llvm::DIEValue::~DIEValue()\"},\n    {\"_ZN4llvm8DIEValueD0Ev\", \"llvm::DIEValue::~DIEValue()\"},\n    {\"_ZNK4llvm9DIEString6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIEString::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_13DIEAbbrevDataELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::DIEAbbrevData, false>::grow(unsigned long)\"},\n    {\"_ZNK4llvm8DIEEntry6SizeOfEPNS_10AsmPrinterEj\", \"llvm::DIEEntry::SizeOf(llvm::AsmPrinter*, unsigned int) const\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm9MCSectionESt4pairIKS3_jESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::MCSection const*, std::pair<llvm::MCSection const* const, unsigned int>, std::_Select1st<std::pair<llvm::MCSection const* const, unsigned int> >, std::less<llvm::MCSection const*>, std::allocator<std::pair<llvm::MCSection const* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MCSection const* const, unsigned int> >*)\"},\n    {\"_ZN4llvm14DwarfExceptionC1EPNS_10AsmPrinterE\", \"llvm::DwarfException::DwarfException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm14DwarfExceptionC2EPNS_10AsmPrinterE\", \"llvm::DwarfException::DwarfException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm14DwarfExceptionD0Ev\", \"llvm::DwarfException::~DwarfException()\"},\n    {\"_ZN4llvm14DwarfExceptionD1Ev\", \"llvm::DwarfException::~DwarfException()\"},\n    {\"_ZN4llvm14DwarfExceptionD2Ev\", \"llvm::DwarfException::~DwarfException()\"},\n    {\"_ZN4llvm14DwarfException13SharedTypeIdsEPKNS_14LandingPadInfoES3_\", \"llvm::DwarfException::SharedTypeIds(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)\"},\n    {\"_ZN4llvm14DwarfException5PadLTEPKNS_14LandingPadInfoES3_\", \"llvm::DwarfException::PadLT(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)\"},\n    {\"_ZN4llvm14DwarfException19ComputeActionsTableERKNS_15SmallVectorImplIPKNS_14LandingPadInfoEEERNS1_INS0_11ActionEntryEEERNS1_IjEE\", \"llvm::DwarfException::ComputeActionsTable(llvm::SmallVectorImpl<llvm::LandingPadInfo const*> const&, llvm::SmallVectorImpl<llvm::DwarfException::ActionEntry>&, llvm::SmallVectorImpl<unsigned int>&)\"},\n    {\"_ZN4llvm14DwarfException22CallToNoUnwindFunctionEPKNS_12MachineInstrE\", \"llvm::DwarfException::CallToNoUnwindFunction(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm14DwarfException20ComputeCallSiteTableERNS_15SmallVectorImplINS0_13CallSiteEntryEEERKNS_8DenseMapIPNS_8MCSymbolENS0_8PadRangeENS_12DenseMapInfoIS7_EENS9_IS8_EEEERKNS1_IPKNS_14LandingPadInfoEEERKNS1_IjEE\", \"llvm::DwarfException::ComputeCallSiteTable(llvm::SmallVectorImpl<llvm::DwarfException::CallSiteEntry>&, llvm::DenseMap<llvm::MCSymbol*, llvm::DwarfException::PadRange, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::DwarfException::PadRange> > const&, llvm::SmallVectorImpl<llvm::LandingPadInfo const*> const&, llvm::SmallVectorImpl<unsigned int> const&)\"},\n    {\"_ZN4llvm14DwarfException18EmitExceptionTableEv\", \"llvm::DwarfException::EmitExceptionTable()\"},\n    {\"_ZN4llvm14DwarfException9EndModuleEv\", \"llvm::DwarfException::EndModule()\"},\n    {\"_ZN4llvm14DwarfException13BeginFunctionEPKNS_15MachineFunctionE\", \"llvm::DwarfException::BeginFunction(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm14DwarfException11EndFunctionEv\", \"llvm::DwarfException::EndFunction()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_14DwarfException13CallSiteEntryEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::DwarfException::CallSiteEntry>::resize(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolENS_14DwarfException8PadRangeENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MCSymbol*, llvm::DwarfException::PadRange, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::DwarfException::PadRange> >::InsertIntoBucket(llvm::MCSymbol* const&, llvm::DwarfException::PadRange const&, std::pair<llvm::MCSymbol*, llvm::DwarfException::PadRange>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolENS_14DwarfException8PadRangeENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol*, llvm::DwarfException::PadRange, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::DwarfException::PadRange> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIPPKN4llvm14LandingPadInfoElPFbS3_S3_EEvT_S7_T0_T1_\", \"void std::__introsort_loop<llvm::LandingPadInfo const**, long, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)>(llvm::LandingPadInfo const**, llvm::LandingPadInfo const**, long, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*))\"},\n    {\"_ZSt22__final_insertion_sortIPPKN4llvm14LandingPadInfoEPFbS3_S3_EEvT_S7_T0_\", \"void std::__final_insertion_sort<llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)>(llvm::LandingPadInfo const**, llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*))\"},\n    {\"_ZSt16__insertion_sortIPPKN4llvm14LandingPadInfoEPFbS3_S3_EEvT_S7_T0_\", \"void std::__insertion_sort<llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)>(llvm::LandingPadInfo const**, llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*))\"},\n    {\"_ZSt13__heap_selectIPPKN4llvm14LandingPadInfoEPFbS3_S3_EEvT_S7_S7_T0_\", \"void std::__heap_select<llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)>(llvm::LandingPadInfo const**, llvm::LandingPadInfo const**, llvm::LandingPadInfo const**, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*))\"},\n    {\"_ZSt13__adjust_heapIPPKN4llvm14LandingPadInfoElS3_PFbS3_S3_EEvT_T0_S8_T1_T2_\", \"void std::__adjust_heap<llvm::LandingPadInfo const**, long, llvm::LandingPadInfo const*, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*)>(llvm::LandingPadInfo const**, long, long, llvm::LandingPadInfo const*, bool (*)(llvm::LandingPadInfo const*, llvm::LandingPadInfo const*))\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_14DwarfException13CallSiteEntryELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::DwarfException::CallSiteEntry, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_14DwarfException11ActionEntryELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::DwarfException::ActionEntry, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm19DwarfTableExceptionC1EPNS_10AsmPrinterE\", \"llvm::DwarfTableException::DwarfTableException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm19DwarfTableExceptionC2EPNS_10AsmPrinterE\", \"llvm::DwarfTableException::DwarfTableException(llvm::AsmPrinter*)\"},\n    {\"_ZN4llvm19DwarfTableExceptionD0Ev\", \"llvm::DwarfTableException::~DwarfTableException()\"},\n    {\"_ZN4llvm19DwarfTableExceptionD1Ev\", \"llvm::DwarfTableException::~DwarfTableException()\"},\n    {\"_ZN4llvm19DwarfTableExceptionD2Ev\", \"llvm::DwarfTableException::~DwarfTableException()\"},\n    {\"_ZN4llvm19DwarfTableException7EmitCIEEPKNS_8FunctionEj\", \"llvm::DwarfTableException::EmitCIE(llvm::Function const*, unsigned int)\"},\n    {\"_ZN4llvm19DwarfTableException7EmitFDEERKNS0_19FunctionEHFrameInfoE\", \"llvm::DwarfTableException::EmitFDE(llvm::DwarfTableException::FunctionEHFrameInfo const&)\"},\n    {\"_ZN4llvm19DwarfTableException9EndModuleEv\", \"llvm::DwarfTableException::EndModule()\"},\n    {\"_ZN4llvm19DwarfTableException13BeginFunctionEPKNS_15MachineFunctionE\", \"llvm::DwarfTableException::BeginFunction(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm19DwarfTableException11EndFunctionEv\", \"llvm::DwarfTableException::EndFunction()\"},\n    {\"_ZNSt6vectorIN4llvm19DwarfTableException19FunctionEHFrameInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::DwarfTableException::FunctionEHFrameInfo, std::allocator<llvm::DwarfTableException::FunctionEHFrameInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DwarfTableException::FunctionEHFrameInfo*, std::vector<llvm::DwarfTableException::FunctionEHFrameInfo, std::allocator<llvm::DwarfTableException::FunctionEHFrameInfo> > >, llvm::DwarfTableException::FunctionEHFrameInfo const&)\"},\n    {\"_ZN4llvm8AsmLexerC1ERKNS_9MCAsmInfoE\", \"llvm::AsmLexer::AsmLexer(llvm::MCAsmInfo const&)\"},\n    {\"_ZN4llvm8AsmLexerC2ERKNS_9MCAsmInfoE\", \"llvm::AsmLexer::AsmLexer(llvm::MCAsmInfo const&)\"},\n    {\"_ZN4llvm8AsmLexerD0Ev\", \"llvm::AsmLexer::~AsmLexer()\"},\n    {\"_ZN4llvm8AsmLexerD1Ev\", \"llvm::AsmLexer::~AsmLexer()\"},\n    {\"_ZN4llvm8AsmLexerD2Ev\", \"llvm::AsmLexer::~AsmLexer()\"},\n    {\"_ZN4llvm8AsmLexer9setBufferEPKNS_12MemoryBufferEPKc\", \"llvm::AsmLexer::setBuffer(llvm::MemoryBuffer const*, char const*)\"},\n    {\"_ZN4llvm8AsmLexer11ReturnErrorEPKcRKSs\", \"llvm::AsmLexer::ReturnError(char const*, std::string const&)\"},\n    {\"_ZN4llvm8AsmLexer11getNextCharEv\", \"llvm::AsmLexer::getNextChar()\"},\n    {\"_ZN4llvm8AsmLexer15LexFloatLiteralEv\", \"llvm::AsmLexer::LexFloatLiteral()\"},\n    {\"_ZN4llvm8AsmLexer13LexIdentifierEv\", \"llvm::AsmLexer::LexIdentifier()\"},\n    {\"_ZN4llvm8AsmLexer8LexSlashEv\", \"llvm::AsmLexer::LexSlash()\"},\n    {\"_ZN4llvm8AsmLexer14LexLineCommentEv\", \"llvm::AsmLexer::LexLineComment()\"},\n    {\"_ZN4llvm8AsmLexer8LexDigitEv\", \"llvm::AsmLexer::LexDigit()\"},\n    {\"_ZN4llvm8AsmLexer14LexSingleQuoteEv\", \"llvm::AsmLexer::LexSingleQuote()\"},\n    {\"_ZN4llvm8AsmLexer8LexQuoteEv\", \"llvm::AsmLexer::LexQuote()\"},\n    {\"_ZN4llvm8AsmLexer22LexUntilEndOfStatementEv\", \"llvm::AsmLexer::LexUntilEndOfStatement()\"},\n    {\"_ZN4llvm8AsmLexer18isAtStartOfCommentEc\", \"llvm::AsmLexer::isAtStartOfComment(char)\"},\n    {\"_ZN4llvm8AsmLexer8LexTokenEv\", \"llvm::AsmLexer::LexToken()\"},\n    {\"_ZN4llvm17createMCAsmParserERKNS_6TargetERNS_9SourceMgrERNS_9MCContextERNS_10MCStreamerERKNS_9MCAsmInfoE\", \"llvm::createMCAsmParser(llvm::Target const&, llvm::SourceMgr&, llvm::MCContext&, llvm::MCStreamer&, llvm::MCAsmInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParserD1Ev\", \"(anonymous namespace)::AsmParser::~AsmParser()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParserD0Ev\", \"(anonymous namespace)::AsmParser::~AsmParser()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19AddDirectiveHandlerEPN4llvm20MCAsmParserExtensionENS1_9StringRefEPFbS3_S4_NS1_5SMLocEE\", \"(anonymous namespace)::AsmParser::AddDirectiveHandler(llvm::MCAsmParserExtension*, llvm::StringRef, bool (*)(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc))\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser16getSourceManagerEv\", \"(anonymous namespace)::AsmParser::getSourceManager()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser8getLexerEv\", \"(anonymous namespace)::AsmParser::getLexer()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser10getContextEv\", \"(anonymous namespace)::AsmParser::getContext()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser11getStreamerEv\", \"(anonymous namespace)::AsmParser::getStreamer()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser3RunEbb\", \"(anonymous namespace)::AsmParser::Run(bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser7WarningEN4llvm5SMLocERKNS1_5TwineE\", \"(anonymous namespace)::AsmParser::Warning(llvm::SMLoc, llvm::Twine const&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser5ErrorEN4llvm5SMLocERKNS1_5TwineE\", \"(anonymous namespace)::AsmParser::Error(llvm::SMLoc, llvm::Twine const&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser3LexEv\", \"(anonymous namespace)::AsmParser::Lex()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser15ParseIdentifierERN4llvm9StringRefE\", \"(anonymous namespace)::AsmParser::ParseIdentifier(llvm::StringRef&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser27ParseStringToEndOfStatementEv\", \"(anonymous namespace)::AsmParser::ParseStringToEndOfStatement()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19EatToEndOfStatementEv\", \"(anonymous namespace)::AsmParser::EatToEndOfStatement()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser15ParseExpressionERPKN4llvm6MCExprERNS1_5SMLocE\", \"(anonymous namespace)::AsmParser::ParseExpression(llvm::MCExpr const*&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser20ParseParenExpressionERPKN4llvm6MCExprERNS1_5SMLocE\", \"(anonymous namespace)::AsmParser::ParseParenExpression(llvm::MCExpr const*&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser23ParseAbsoluteExpressionERx\", \"(anonymous namespace)::AsmParser::ParseAbsoluteExpression(long long&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser14ParseParenExprERPKN4llvm6MCExprERNS1_5SMLocE\", \"(anonymous namespace)::AsmParser::ParseParenExpr(llvm::MCExpr const*&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser13ParseBinOpRHSEjRPKN4llvm6MCExprERNS1_5SMLocE\", \"(anonymous namespace)::AsmParser::ParseBinOpRHS(unsigned int, llvm::MCExpr const*&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser16ParsePrimaryExprERPKN4llvm6MCExprERNS1_5SMLocE\", \"(anonymous namespace)::AsmParser::ParsePrimaryExpr(llvm::MCExpr const*&, llvm::SMLoc&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19ApplyModifierToExprEPKN4llvm6MCExprENS1_15MCSymbolRefExpr11VariantKindE\", \"(anonymous namespace)::AsmParser::ApplyModifierToExpr(llvm::MCExpr const*, llvm::MCSymbolRefExpr::VariantKind)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser14ParseStatementEv\", \"(anonymous namespace)::AsmParser::ParseStatement()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19ParseDirectiveIfdefEN4llvm5SMLocEb\", \"(anonymous namespace)::AsmParser::ParseDirectiveIfdef(llvm::SMLoc, bool)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser20CheckForValidSectionEv\", \"(anonymous namespace)::AsmParser::CheckForValidSection()\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser15ParseAssignmentEN4llvm9StringRefEb\", \"(anonymous namespace)::AsmParser::ParseAssignment(llvm::StringRef, bool)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser17ParseDirectiveSetEN4llvm9StringRefEb\", \"(anonymous namespace)::AsmParser::ParseDirectiveSet(llvm::StringRef, bool)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19ParseDirectiveAsciiEN4llvm9StringRefEb\", \"(anonymous namespace)::AsmParser::ParseDirectiveAscii(llvm::StringRef, bool)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19ParseDirectiveValueEj\", \"(anonymous namespace)::AsmParser::ParseDirectiveValue(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser23ParseDirectiveRealValueERKN4llvm12fltSemanticsE\", \"(anonymous namespace)::AsmParser::ParseDirectiveRealValue(llvm::fltSemantics const&)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser19ParseDirectiveAlignEbj\", \"(anonymous namespace)::AsmParser::ParseDirectiveAlign(bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser29ParseDirectiveSymbolAttributeEN4llvm12MCSymbolAttrE\", \"(anonymous namespace)::AsmParser::ParseDirectiveSymbolAttribute(llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_19AsmParser18ParseDirectiveCommEb\", \"(anonymous namespace)::AsmParser::ParseDirectiveComm(bool)\"},\n    {\"_Z8MarkUsedPKN4llvm6MCExprE\", \"MarkUsed(llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_116GenericAsmParserD1Ev\", \"(anonymous namespace)::GenericAsmParser::~GenericAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_116GenericAsmParserD0Ev\", \"(anonymous namespace)::GenericAsmParser::~GenericAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_116GenericAsmParser10InitializeERN4llvm11MCAsmParserE\", \"(anonymous namespace)::GenericAsmParser::Initialize(llvm::MCAsmParser&)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_20ParseDirectiveLEB128ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveLEB128(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_22ParseDirectiveEndMacroENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveEndMacro(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_19ParseDirectiveMacroENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveMacro(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_25ParseDirectiveMacrosOnOffENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveMacrosOnOff(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_29ParseDirectiveCFIRestoreStateENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIRestoreState(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_30ParseDirectiveCFIRememberStateENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIRememberState(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_34ParseDirectiveCFIPersonalityOrLsdaENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIPersonalityOrLsda(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_23ParseDirectiveCFIOffsetENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIOffset(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN12_GLOBAL__N_116GenericAsmParser29ParseRegisterOrRegisterNumberERxN4llvm5SMLocE\", \"(anonymous namespace)::GenericAsmParser::ParseRegisterOrRegisterNumber(long long&, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_31ParseDirectiveCFIDefCfaRegisterENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIDefCfaRegister(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_29ParseDirectiveCFIDefCfaOffsetENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIDefCfaOffset(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_23ParseDirectiveCFIDefCfaENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIDefCfa(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_24ParseDirectiveCFIEndProcENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIEndProc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_26ParseDirectiveCFIStartProcENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveCFIStartProc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_19ParseDirectiveStabsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveStabs(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_17ParseDirectiveLocENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveLoc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_18ParseDirectiveLineENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveLine(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_116GenericAsmParserEXadL_ZNS3_18ParseDirectiveFileENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::GenericAsmParser, &((anonymous namespace)::GenericAsmParser::ParseDirectiveFile(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZNSt6vectorIN4llvm8AsmTokenESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AsmToken*, std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > >, llvm::AsmToken const&)\"},\n    {\"_ZNSt6vectorIS_IN4llvm8AsmTokenESaIS1_EESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >, std::allocator<std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >*, std::vector<std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >, std::allocator<std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > > > >, std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm8AsmTokenESaIS1_EEaSERKS3_\", \"std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >::operator=(std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm8AsmTokenESaIS1_EEC2ERKS3_\", \"std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> >::vector(std::vector<llvm::AsmToken, std::allocator<llvm::AsmToken> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm7AsmCondESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::AsmCond, std::allocator<llvm::AsmCond> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AsmCond*, std::vector<llvm::AsmCond, std::allocator<llvm::AsmCond> > >, llvm::AsmCond const&)\"},\n    {\"_ZN4llvm9StringMapISt4pairIPNS_20MCAsmParserExtensionEPFbS3_NS_9StringRefENS_5SMLocEEENS_15MallocAllocatorEE16GetOrCreateValueIS8_EERNS_14StringMapEntryIS8_EES4_T_\", \"llvm::StringMapEntry<std::pair<llvm::MCAsmParserExtension*, bool (*)(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)> >& llvm::StringMap<std::pair<llvm::MCAsmParserExtension*, bool (*)(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)>, llvm::MallocAllocator>::GetOrCreateValue<std::pair<llvm::MCAsmParserExtension*, bool (*)(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)> >(llvm::StringRef, std::pair<llvm::MCAsmParserExtension*, bool (*)(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)>)\"},\n    {\"_ZN4llvm19createCOFFAsmParserEv\", \"llvm::createCOFFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_113COFFAsmParserD1Ev\", \"(anonymous namespace)::COFFAsmParser::~COFFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_113COFFAsmParserD0Ev\", \"(anonymous namespace)::COFFAsmParser::~COFFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_113COFFAsmParser10InitializeERN4llvm11MCAsmParserE\", \"(anonymous namespace)::COFFAsmParser::Initialize(llvm::MCAsmParser&)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_19ParseDirectiveEndefENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseDirectiveEndef(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_18ParseDirectiveTypeENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseDirectiveType(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_17ParseDirectiveSclENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseDirectiveScl(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_17ParseDirectiveDefENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseDirectiveDef(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_24ParseSectionDirectiveBSSENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseSectionDirectiveBSS(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN12_GLOBAL__N_113COFFAsmParser18ParseSectionSwitchEN4llvm9StringRefEjNS1_11SectionKindE\", \"(anonymous namespace)::COFFAsmParser::ParseSectionSwitch(llvm::StringRef, unsigned int, llvm::SectionKind)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_25ParseSectionDirectiveDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseSectionDirectiveData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_113COFFAsmParserEXadL_ZNS3_25ParseSectionDirectiveTextENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::COFFAsmParser, &((anonymous namespace)::COFFAsmParser::ParseSectionDirectiveText(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm21createDarwinAsmParserEv\", \"llvm::createDarwinAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_115DarwinAsmParserD1Ev\", \"(anonymous namespace)::DarwinAsmParser::~DarwinAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_115DarwinAsmParserD0Ev\", \"(anonymous namespace)::DarwinAsmParser::~DarwinAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_115DarwinAsmParser10InitializeERN4llvm11MCAsmParserE\", \"(anonymous namespace)::DarwinAsmParser::Initialize(llvm::MCAsmParser&)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_24ParseSectionDirectiveTLVENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveTLV(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN12_GLOBAL__N_115DarwinAsmParser18ParseSectionSwitchEPKcS2_jjj\", \"(anonymous namespace)::DarwinAsmParser::ParseSectionSwitch(char const*, char const*, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_35ParseSectionDirectiveThreadInitFuncENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveThreadInitFunc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_25ParseSectionDirectiveTextENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveText(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_26ParseSectionDirectiveTDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveTData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_31ParseSectionDirectiveSymbolStubENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveSymbolStub(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_31ParseSectionDirectiveStaticDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveStaticData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveStaticConstENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveStaticConst(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_34ParseSectionDirectivePICSymbolStubENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectivePICSymbolStub(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveObjCSymbolsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCSymbols(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_37ParseSectionDirectiveObjCStringObjectENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCStringObject(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_37ParseSectionDirectiveObjCSelectorStrsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCSelectorStrs(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_33ParseSectionDirectiveObjCProtocolENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCProtocol(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_35ParseSectionDirectiveObjCModuleInfoENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCModuleInfo(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_37ParseSectionDirectiveObjCMethVarTypesENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCMethVarTypes(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_37ParseSectionDirectiveObjCMethVarNamesENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCMethVarNames(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_34ParseSectionDirectiveObjCMetaClassENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCMetaClass(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_36ParseSectionDirectiveObjCMessageRefsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCMessageRefs(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_37ParseSectionDirectiveObjCInstanceVarsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCInstanceVars(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_33ParseSectionDirectiveObjCInstMethENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCInstMeth(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveObjCClsRefsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCClsRefs(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveObjCClsMethENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCClsMeth(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_34ParseSectionDirectiveObjCClassVarsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCClassVars(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_35ParseSectionDirectiveObjCClassNamesENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCClassNames(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_30ParseSectionDirectiveObjCClassENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCClass(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_33ParseSectionDirectiveObjCCategoryENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCCategory(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_36ParseSectionDirectiveObjCCatInstMethENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCCatInstMeth(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_35ParseSectionDirectiveObjCCatClsMethENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveObjCCatClsMeth(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_42ParseSectionDirectiveNonLazySymbolPointersENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveNonLazySymbolPointers(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveModTermFuncENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveModTermFunc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveModInitFuncENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveModInitFunc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_29ParseSectionDirectiveLiteral8ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveLiteral8(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_29ParseSectionDirectiveLiteral4ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveLiteral4(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_30ParseSectionDirectiveLiteral16ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveLiteral16(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_39ParseSectionDirectiveLazySymbolPointersENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveLazySymbolPointers(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveFVMLibInit1ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveFVMLibInit1(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveFVMLibInit0ENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveFVMLibInit0(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_25ParseSectionDirectiveDyldENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveDyld(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_31ParseSectionDirectiveDestructorENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveDestructor(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_25ParseSectionDirectiveDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_28ParseSectionDirectiveCStringENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveCString(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_32ParseSectionDirectiveConstructorENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveConstructor(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_30ParseSectionDirectiveConstDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveConstData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_26ParseSectionDirectiveConstENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseSectionDirectiveConst(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_22ParseDirectiveZerofillENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveZerofill(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_18ParseDirectiveTBSSENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveTBSS(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_28ParseDirectiveSecureLogResetENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveSecureLogReset(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_29ParseDirectiveSecureLogUniqueENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveSecureLogUnique(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_21ParseDirectiveSectionENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveSection(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_24ParseDirectiveDumpOrLoadENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveDumpOrLoad(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_35ParseDirectiveSubsectionsViaSymbolsENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveSubsectionsViaSymbols(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_18ParseDirectiveLsymENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveLsym(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_115DarwinAsmParserEXadL_ZNS3_18ParseDirectiveDescENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::DarwinAsmParser, &((anonymous namespace)::DarwinAsmParser::ParseDirectiveDesc(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm18createELFAsmParserEv\", \"llvm::createELFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_112ELFAsmParserD1Ev\", \"(anonymous namespace)::ELFAsmParser::~ELFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_112ELFAsmParserD0Ev\", \"(anonymous namespace)::ELFAsmParser::~ELFAsmParser()\"},\n    {\"_ZN12_GLOBAL__N_112ELFAsmParser10InitializeERN4llvm11MCAsmParserE\", \"(anonymous namespace)::ELFAsmParser::Initialize(llvm::MCAsmParser&)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_21ParseDirectiveWeakrefENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveWeakref(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_20ParseDirectiveSymverENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveSymver(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_19ParseDirectiveIdentENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveIdent(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_18ParseDirectiveTypeENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveType(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_22ParseDirectivePreviousENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectivePrevious(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_18ParseDirectiveSizeENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveSize(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_21ParseDirectiveSectionENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseDirectiveSection(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_28ParseSectionDirectiveEhFrameENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveEhFrame(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN12_GLOBAL__N_112ELFAsmParser18ParseSectionSwitchEN4llvm9StringRefEjjNS1_11SectionKindE\", \"(anonymous namespace)::ELFAsmParser::ParseSectionSwitch(llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_35ParseSectionDirectiveDataRelRoLocalENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveDataRelRoLocal(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_30ParseSectionDirectiveDataRelRoENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveDataRelRo(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_28ParseSectionDirectiveDataRelENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveDataRel(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_25ParseSectionDirectiveTBSSENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveTBSS(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_26ParseSectionDirectiveTDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveTData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_27ParseSectionDirectiveRoDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveRoData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_24ParseSectionDirectiveBSSENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveBSS(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_25ParseSectionDirectiveTextENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveText(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm20MCAsmParserExtension15HandleDirectiveIN12_GLOBAL__N_112ELFAsmParserEXadL_ZNS3_25ParseSectionDirectiveDataENS_9StringRefENS_5SMLocEEEEEbPS0_S4_S5_\", \"bool llvm::MCAsmParserExtension::HandleDirective<(anonymous namespace)::ELFAsmParser, &((anonymous namespace)::ELFAsmParser::ParseSectionDirectiveData(llvm::StringRef, llvm::SMLoc))>(llvm::MCAsmParserExtension*, llvm::StringRef, llvm::SMLoc)\"},\n    {\"_ZN4llvm10MCAsmLexerC1Ev\", \"llvm::MCAsmLexer::MCAsmLexer()\"},\n    {\"_ZN4llvm10MCAsmLexerC2Ev\", \"llvm::MCAsmLexer::MCAsmLexer()\"},\n    {\"_ZN4llvm10MCAsmLexerD0Ev\", \"llvm::MCAsmLexer::~MCAsmLexer()\"},\n    {\"_ZN4llvm10MCAsmLexerD1Ev\", \"llvm::MCAsmLexer::~MCAsmLexer()\"},\n    {\"_ZN4llvm10MCAsmLexerD2Ev\", \"llvm::MCAsmLexer::~MCAsmLexer()\"},\n    {\"_ZNK4llvm10MCAsmLexer6getLocEv\", \"llvm::MCAsmLexer::getLoc() const\"},\n    {\"_ZNK4llvm8AsmToken6getLocEv\", \"llvm::AsmToken::getLoc() const\"},\n    {\"_ZN4llvm11MCAsmParserC1Ev\", \"llvm::MCAsmParser::MCAsmParser()\"},\n    {\"_ZN4llvm11MCAsmParserC2Ev\", \"llvm::MCAsmParser::MCAsmParser()\"},\n    {\"_ZN4llvm11MCAsmParserD0Ev\", \"llvm::MCAsmParser::~MCAsmParser()\"},\n    {\"_ZN4llvm11MCAsmParserD1Ev\", \"llvm::MCAsmParser::~MCAsmParser()\"},\n    {\"_ZN4llvm11MCAsmParserD2Ev\", \"llvm::MCAsmParser::~MCAsmParser()\"},\n    {\"_ZN4llvm11MCAsmParser15setTargetParserERNS_15TargetAsmParserE\", \"llvm::MCAsmParser::setTargetParser(llvm::TargetAsmParser&)\"},\n    {\"_ZN4llvm11MCAsmParser6getTokEv\", \"llvm::MCAsmParser::getTok()\"},\n    {\"_ZN4llvm11MCAsmParser8TokErrorERKNS_5TwineE\", \"llvm::MCAsmParser::TokError(llvm::Twine const&)\"},\n    {\"_ZN4llvm11MCAsmParser15ParseExpressionERPKNS_6MCExprE\", \"llvm::MCAsmParser::ParseExpression(llvm::MCExpr const*&)\"},\n    {\"_ZN4llvm20MCAsmParserExtensionC1Ev\", \"llvm::MCAsmParserExtension::MCAsmParserExtension()\"},\n    {\"_ZN4llvm20MCAsmParserExtensionC2Ev\", \"llvm::MCAsmParserExtension::MCAsmParserExtension()\"},\n    {\"_ZN4llvm20MCAsmParserExtensionD0Ev\", \"llvm::MCAsmParserExtension::~MCAsmParserExtension()\"},\n    {\"_ZN4llvm20MCAsmParserExtensionD1Ev\", \"llvm::MCAsmParserExtension::~MCAsmParserExtension()\"},\n    {\"_ZN4llvm20MCAsmParserExtensionD2Ev\", \"llvm::MCAsmParserExtension::~MCAsmParserExtension()\"},\n    {\"_ZN4llvm20MCAsmParserExtension10InitializeERNS_11MCAsmParserE\", \"llvm::MCAsmParserExtension::Initialize(llvm::MCAsmParser&)\"},\n    {\"_ZN4llvm15TargetAsmParserC1ERKNS_6TargetE\", \"llvm::TargetAsmParser::TargetAsmParser(llvm::Target const&)\"},\n    {\"_ZN4llvm15TargetAsmParserC2ERKNS_6TargetE\", \"llvm::TargetAsmParser::TargetAsmParser(llvm::Target const&)\"},\n    {\"_ZN4llvm15TargetAsmParserD0Ev\", \"llvm::TargetAsmParser::~TargetAsmParser()\"},\n    {\"_ZN4llvm15TargetAsmParserD1Ev\", \"llvm::TargetAsmParser::~TargetAsmParser()\"},\n    {\"_ZN4llvm15TargetAsmParserD2Ev\", \"llvm::TargetAsmParser::~TargetAsmParser()\"},\n    {\"_ZN4llvm22AggressiveAntiDepStateC1EjPNS_17MachineBasicBlockE\", \"llvm::AggressiveAntiDepState::AggressiveAntiDepState(unsigned int, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm22AggressiveAntiDepStateC2EjPNS_17MachineBasicBlockE\", \"llvm::AggressiveAntiDepState::AggressiveAntiDepState(unsigned int, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm22AggressiveAntiDepState8GetGroupEj\", \"llvm::AggressiveAntiDepState::GetGroup(unsigned int)\"},\n    {\"_ZN4llvm22AggressiveAntiDepState12GetGroupRegsEjRSt6vectorIjSaIjEEPSt8multimapIjNS0_17RegisterReferenceESt4lessIjESaISt4pairIKjS6_EEE\", \"llvm::AggressiveAntiDepState::GetGroupRegs(unsigned int, std::vector<unsigned int, std::allocator<unsigned int> >&, std::multimap<unsigned int, llvm::AggressiveAntiDepState::RegisterReference, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> > >*)\"},\n    {\"_ZN4llvm22AggressiveAntiDepState11UnionGroupsEjj\", \"llvm::AggressiveAntiDepState::UnionGroups(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm22AggressiveAntiDepState10LeaveGroupEj\", \"llvm::AggressiveAntiDepState::LeaveGroup(unsigned int)\"},\n    {\"_ZN4llvm22AggressiveAntiDepState6IsLiveEj\", \"llvm::AggressiveAntiDepState::IsLive(unsigned int)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreakerC1ERNS_15MachineFunctionERNS_15SmallVectorImplIPNS_19TargetRegisterClassEEE\", \"llvm::AggressiveAntiDepBreaker::AggressiveAntiDepBreaker(llvm::MachineFunction&, llvm::SmallVectorImpl<llvm::TargetRegisterClass*>&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreakerC2ERNS_15MachineFunctionERNS_15SmallVectorImplIPNS_19TargetRegisterClassEEE\", \"llvm::AggressiveAntiDepBreaker::AggressiveAntiDepBreaker(llvm::MachineFunction&, llvm::SmallVectorImpl<llvm::TargetRegisterClass*>&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreakerD0Ev\", \"llvm::AggressiveAntiDepBreaker::~AggressiveAntiDepBreaker()\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreakerD1Ev\", \"llvm::AggressiveAntiDepBreaker::~AggressiveAntiDepBreaker()\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreakerD2Ev\", \"llvm::AggressiveAntiDepBreaker::~AggressiveAntiDepBreaker()\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker10StartBlockEPNS_17MachineBasicBlockE\", \"llvm::AggressiveAntiDepBreaker::StartBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker11FinishBlockEv\", \"llvm::AggressiveAntiDepBreaker::FinishBlock()\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker7ObserveEPNS_12MachineInstrEjj\", \"llvm::AggressiveAntiDepBreaker::Observe(llvm::MachineInstr*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker15GetPassthruRegsEPNS_12MachineInstrERSt3setIjSt4lessIjESaIjEE\", \"llvm::AggressiveAntiDepBreaker::GetPassthruRegs(llvm::MachineInstr*, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker18PrescanInstructionEPNS_12MachineInstrEjRSt3setIjSt4lessIjESaIjEE\", \"llvm::AggressiveAntiDepBreaker::PrescanInstruction(llvm::MachineInstr*, unsigned int, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker15ScanInstructionEPNS_12MachineInstrEj\", \"llvm::AggressiveAntiDepBreaker::ScanInstruction(llvm::MachineInstr*, unsigned int)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker16IsImplicitDefUseEPNS_12MachineInstrERNS_14MachineOperandE\", \"llvm::AggressiveAntiDepBreaker::IsImplicitDefUse(llvm::MachineInstr*, llvm::MachineOperand&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker13HandleLastUseEjjPKcS2_S2_\", \"llvm::AggressiveAntiDepBreaker::HandleLastUse(unsigned int, unsigned int, char const*, char const*, char const*)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker18GetRenameRegistersEj\", \"llvm::AggressiveAntiDepBreaker::GetRenameRegisters(unsigned int)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker25FindSuitableFreeRegistersEjRSt3mapIPKNS_19TargetRegisterClassEPKjSt4lessIS4_ESaISt4pairIKS4_S6_EEERS1_IjjS7_IjESaIS9_IS5_jEEE\", \"llvm::AggressiveAntiDepBreaker::FindSuitableFreeRegisters(unsigned int, std::map<llvm::TargetRegisterClass const*, unsigned int const*, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> > >&, std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >&)\"},\n    {\"_ZN4llvm24AggressiveAntiDepBreaker21BreakAntiDependenciesERKSt6vectorINS_5SUnitESaIS2_EENS_14ilist_iteratorINS_12MachineInstrEEES9_j\", \"llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> > const&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_PKNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, llvm::SUnit const*>, std::_Select1st<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> >, std::pair<llvm::MachineInstr* const, llvm::SUnit const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_PKNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, llvm::SUnit const*>, std::_Select1st<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> > >::_M_insert_unique(std::pair<llvm::MachineInstr* const, llvm::SUnit const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_PKjESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE5eraseESt17_Rb_tree_iteratorIS8_ESG_\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, unsigned int const*>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::_Rb_tree_iterator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_PKjESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, unsigned int const*>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, unsigned int>, std::_Select1st<std::pair<unsigned int const, unsigned int> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >::_M_insert_unique(std::pair<unsigned int const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm9BitVectorEESt10_Select1stIS4_ESt4lessIjESaIS4_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS4_ERKS4_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::BitVector>, std::_Select1st<std::pair<unsigned int const, llvm::BitVector> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::BitVector> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<unsigned int const, llvm::BitVector> >, std::pair<unsigned int const, llvm::BitVector> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm9BitVectorEESt10_Select1stIS4_ESt4lessIjESaIS4_EE9_M_insertEPSt18_Rb_tree_node_baseSC_RKS4_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::BitVector>, std::_Select1st<std::pair<unsigned int const, llvm::BitVector> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::BitVector> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<unsigned int const, llvm::BitVector> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm9BitVectorEESt10_Select1stIS4_ESt4lessIjESaIS4_EE16_M_insert_uniqueERKS4_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::BitVector>, std::_Select1st<std::pair<unsigned int const, llvm::BitVector> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::BitVector> > >::_M_insert_unique(std::pair<unsigned int const, llvm::BitVector> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, unsigned int>, std::_Select1st<std::pair<unsigned int const, unsigned int> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_PKjESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, unsigned int const*>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_PKjESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, unsigned int const*>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> > >::_M_insert_unique(std::pair<llvm::TargetRegisterClass const* const, unsigned int const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm22AggressiveAntiDepState17RegisterReferenceEESt10_Select1stIS5_ESt4lessIjESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference>, std::_Select1st<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> > >::erase(std::_Rb_tree_iterator<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> >, std::_Rb_tree_iterator<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> >)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm22AggressiveAntiDepState17RegisterReferenceEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference>, std::_Select1st<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, llvm::AggressiveAntiDepState::RegisterReference> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_PKNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, llvm::SUnit const*>, std::_Select1st<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineInstr* const, llvm::SUnit const*> >*)\"},\n    {\"_ZNSt6vectorIPKN4llvm4SDepESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::SDep const*, std::allocator<llvm::SDep const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SDep const**, std::vector<llvm::SDep const*, std::allocator<llvm::SDep const*> > >, llvm::SDep const* const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm9BitVectorEESt10_Select1stIS4_ESt4lessIjESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::BitVector>, std::_Select1st<std::pair<unsigned int const, llvm::BitVector> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::BitVector> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, llvm::BitVector> >*)\"},\n    {\"_ZN4llvm18ComputeLinearIndexEPKNS_4TypeEPKjS4_j\", \"llvm::ComputeLinearIndex(llvm::Type const*, unsigned int const*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm15ComputeValueVTsERKNS_14TargetLoweringEPKNS_4TypeERNS_15SmallVectorImplINS_3EVTEEEPNS6_IyEEy\", \"llvm::ComputeValueVTs(llvm::TargetLowering const&, llvm::Type const*, llvm::SmallVectorImpl<llvm::EVT>&, llvm::SmallVectorImpl<unsigned long long>*, unsigned long long)\"},\n    {\"_ZN4llvm15ExtractTypeInfoEPNS_5ValueE\", \"llvm::ExtractTypeInfo(llvm::Value*)\"},\n    {\"_ZN4llvm25hasInlineAsmMemConstraintERSt6vectorINS_9InlineAsm14ConstraintInfoESaIS2_EERKNS_14TargetLoweringE\", \"llvm::hasInlineAsmMemConstraint(std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >&, llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm15getFCmpCondCodeENS_7CmpInst9PredicateE\", \"llvm::getFCmpCondCode(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm15getICmpCondCodeENS_7CmpInst9PredicateE\", \"llvm::getICmpCondCode(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm20isInTailCallPositionENS_17ImmutableCallSiteEjRKNS_14TargetLoweringE\", \"llvm::isInTailCallPosition(llvm::ImmutableCallSite, unsigned int, llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm20isInTailCallPositionERNS_12SelectionDAGEPNS_6SDNodeERKNS_14TargetLoweringE\", \"llvm::isInTailCallPosition(llvm::SelectionDAG&, llvm::SDNode*, llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm23createBranchFoldingPassEb\", \"llvm::createBranchFoldingPass(bool)\"},\n    {\"_ZN4llvm12BranchFolderC1Eb\", \"llvm::BranchFolder::BranchFolder(bool)\"},\n    {\"_ZN4llvm12BranchFolderC2Eb\", \"llvm::BranchFolder::BranchFolder(bool)\"},\n    {\"_ZN4llvm12BranchFolder15RemoveDeadBlockEPNS_17MachineBasicBlockE\", \"llvm::BranchFolder::RemoveDeadBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12BranchFolder20OptimizeImpDefsBlockEPNS_17MachineBasicBlockE\", \"llvm::BranchFolder::OptimizeImpDefsBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12BranchFolder16OptimizeFunctionERNS_15MachineFunctionEPKNS_15TargetInstrInfoEPKNS_18TargetRegisterInfoEPNS_17MachineModuleInfoE\", \"llvm::BranchFolder::OptimizeFunction(llvm::MachineFunction&, llvm::TargetInstrInfo const*, llvm::TargetRegisterInfo const*, llvm::MachineModuleInfo*)\"},\n    {\"_ZN4llvm12BranchFolder15TailMergeBlocksERNS_15MachineFunctionE\", \"llvm::BranchFolder::TailMergeBlocks(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm12BranchFolder16OptimizeBranchesERNS_15MachineFunctionE\", \"llvm::BranchFolder::OptimizeBranches(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm12BranchFolder23ReplaceTailWithBranchToENS_14ilist_iteratorINS_12MachineInstrEEEPNS_17MachineBasicBlockE\", \"llvm::BranchFolder::ReplaceTailWithBranchTo(llvm::ilist_iterator<llvm::MachineInstr>, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12BranchFolder10SplitMBBAtERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::BranchFolder::SplitMBBAt(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZNK4llvm12BranchFolder18MergePotentialsEltltERKS1_\", \"llvm::BranchFolder::MergePotentialsElt::operator<(llvm::BranchFolder::MergePotentialsElt const&) const\"},\n    {\"_ZN4llvm12BranchFolder16ComputeSameTailsEjjPNS_17MachineBasicBlockES2_\", \"llvm::BranchFolder::ComputeSameTails(unsigned int, unsigned int, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12BranchFolder20RemoveBlocksWithHashEjPNS_17MachineBasicBlockES2_\", \"llvm::BranchFolder::RemoveBlocksWithHash(unsigned int, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_Z7FixTailPN4llvm17MachineBasicBlockES1_PKNS_15TargetInstrInfoE\", \"FixTail(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::TargetInstrInfo const*)\"},\n    {\"_ZN4llvm12BranchFolder25CreateCommonTailOnlyBlockERPNS_17MachineBasicBlockEjRj\", \"llvm::BranchFolder::CreateCommonTailOnlyBlock(llvm::MachineBasicBlock*&, unsigned int, unsigned int&)\"},\n    {\"_ZN4llvm12BranchFolder18TryTailMergeBlocksEPNS_17MachineBasicBlockES2_\", \"llvm::BranchFolder::TryTailMergeBlocks(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_Z12HashEndOfMBBPKN4llvm17MachineBasicBlockE\", \"HashEndOfMBB(llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm12BranchFolder13OptimizeBlockEPNS_17MachineBasicBlockE\", \"llvm::BranchFolder::OptimizeBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_116BranchFolderPassD1Ev\", \"(anonymous namespace)::BranchFolderPass::~BranchFolderPass()\"},\n    {\"_ZN12_GLOBAL__N_116BranchFolderPassD0Ev\", \"(anonymous namespace)::BranchFolderPass::~BranchFolderPass()\"},\n    {\"_ZNK12_GLOBAL__N_116BranchFolderPass11getPassNameEv\", \"(anonymous namespace)::BranchFolderPass::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_116BranchFolderPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::BranchFolderPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNSt6vectorIN4llvm12BranchFolder18MergePotentialsEltESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt const&)\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >)\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEES5_lEvT_SA_T0_T1_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*, long>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*, long)\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEES5_EvT_SA_T0_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*)\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEElS5_EvT_SA_SA_T0_SB_T1_SB_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, long, llvm::BranchFolder::MergePotentialsElt*>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, long, long, llvm::BranchFolder::MergePotentialsElt*, long)\"},\n    {\"_ZSt5mergeIPN4llvm12BranchFolder18MergePotentialsEltEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEES9_ET1_T_SB_T0_SC_SA_\", \"__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > std::merge<llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >)\"},\n    {\"_ZSt16__merge_backwardIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEES5_S9_ET1_T_SB_T0_SC_SA_\", \"__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > std::__merge_backward<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >)\"},\n    {\"_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEES5_lET_SA_SA_SA_T1_SB_T0_SB_\", \"__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > std::__rotate_adaptive<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*, long>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, long, long, llvm::BranchFolder::MergePotentialsElt*, long)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEEEvT_SA_SA_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, std::random_access_iterator_tag)\"},\n    {\"_ZSt5mergeIPN4llvm12BranchFolder18MergePotentialsEltES3_N9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET1_T_SB_T0_SC_SA_\", \"__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > std::merge<llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, llvm::BranchFolder::MergePotentialsElt*, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >)\"},\n    {\"_ZSt5mergeIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEES9_S5_ET1_T_SB_T0_SC_SA_\", \"llvm::BranchFolder::MergePotentialsElt* std::merge<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, llvm::BranchFolder::MergePotentialsElt*)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > > >(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >)\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPN4llvm12BranchFolder18MergePotentialsEltESt6vectorIS4_SaIS4_EEEElEvT_SA_SA_T0_SB_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, long>(__gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, __gnu_cxx::__normal_iterator<llvm::BranchFolder::MergePotentialsElt*, std::vector<llvm::BranchFolder::MergePotentialsElt, std::allocator<llvm::BranchFolder::MergePotentialsElt> > >, long, long)\"},\n    {\"_ZNSt6vectorIN4llvm12BranchFolder11SameTailEltESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BranchFolder::SameTailElt, std::allocator<llvm::BranchFolder::SameTailElt> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BranchFolder::SameTailElt*, std::vector<llvm::BranchFolder::SameTailElt, std::allocator<llvm::BranchFolder::SameTailElt> > >, llvm::BranchFolder::SameTailElt const&)\"},\n    {\"_ZN4llvm35initializeCalculateSpillWeightsPassERNS_12PassRegistryE\", \"llvm::initializeCalculateSpillWeightsPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm21CalculateSpillWeights16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::CalculateSpillWeights::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm21CalculateSpillWeights20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::CalculateSpillWeights::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm14VirtRegAuxInfo22CalculateWeightAndHintERNS_12LiveIntervalE\", \"llvm::VirtRegAuxInfo::CalculateWeightAndHint(llvm::LiveInterval&)\"},\n    {\"_ZN4llvm14VirtRegAuxInfo17CalculateRegClassEj\", \"llvm::VirtRegAuxInfo::CalculateRegClass(unsigned int)\"},\n    {\"_ZN4llvm21CalculateSpillWeightsD1Ev\", \"llvm::CalculateSpillWeights::~CalculateSpillWeights()\"},\n    {\"_ZN4llvm21CalculateSpillWeightsD0Ev\", \"llvm::CalculateSpillWeights::~CalculateSpillWeights()\"},\n    {\"_ZN4llvm8DenseMapIjfNS_12DenseMapInfoIjEENS1_IfEEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, float, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<float> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIjfNS_12DenseMapInfoIjEENS1_IfEEE16InsertIntoBucketERKjRKfPSt4pairIjfE\", \"llvm::DenseMap<unsigned int, float, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<float> >::InsertIntoBucket(unsigned int const&, float const&, std::pair<unsigned int, float>*)\"},\n    {\"_ZN4llvm8DenseMapIjfNS_12DenseMapInfoIjEENS1_IfEEE4growEj\", \"llvm::DenseMap<unsigned int, float, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<float> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_21CalculateSpillWeightsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::CalculateSpillWeights>()\"},\n    {\"_ZN4llvm7CCStateC1ENS_11CallingConv2IDEbRKNS_13TargetMachineERNS_11SmallVectorINS_11CCValAssignELj16EEERNS_11LLVMContextE\", \"llvm::CCState::CCState(llvm::CallingConv::ID, bool, llvm::TargetMachine const&, llvm::SmallVector<llvm::CCValAssign, 16u>&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm7CCStateC2ENS_11CallingConv2IDEbRKNS_13TargetMachineERNS_11SmallVectorINS_11CCValAssignELj16EEERNS_11LLVMContextE\", \"llvm::CCState::CCState(llvm::CallingConv::ID, bool, llvm::TargetMachine const&, llvm::SmallVector<llvm::CCValAssign, 16u>&, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm7CCState11HandleByValEjNS_3MVTES1_NS_11CCValAssign7LocInfoEiiNS_3ISD10ArgFlagsTyE\", \"llvm::CCState::HandleByVal(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, int, int, llvm::ISD::ArgFlagsTy)\"},\n    {\"_ZN4llvm7CCState13MarkAllocatedEj\", \"llvm::CCState::MarkAllocated(unsigned int)\"},\n    {\"_ZN4llvm7CCState22AnalyzeFormalArgumentsERKNS_15SmallVectorImplINS_3ISD8InputArgEEEPFbjNS_3MVTES7_NS_11CCValAssign7LocInfoENS2_10ArgFlagsTyERS0_E\", \"llvm::CCState::AnalyzeFormalArguments(llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState11CheckReturnERKNS_15SmallVectorImplINS_3ISD9OutputArgEEEPFbjNS_3MVTES7_NS_11CCValAssign7LocInfoENS2_10ArgFlagsTyERS0_E\", \"llvm::CCState::CheckReturn(llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState13AnalyzeReturnERKNS_15SmallVectorImplINS_3ISD9OutputArgEEEPFbjNS_3MVTES7_NS_11CCValAssign7LocInfoENS2_10ArgFlagsTyERS0_E\", \"llvm::CCState::AnalyzeReturn(llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState19AnalyzeCallOperandsERKNS_15SmallVectorImplINS_3ISD9OutputArgEEEPFbjNS_3MVTES7_NS_11CCValAssign7LocInfoENS2_10ArgFlagsTyERS0_E\", \"llvm::CCState::AnalyzeCallOperands(llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState19AnalyzeCallOperandsERNS_15SmallVectorImplINS_3MVTEEERNS1_INS_3ISD10ArgFlagsTyEEEPFbjS2_S2_NS_11CCValAssign7LocInfoES6_RS0_E\", \"llvm::CCState::AnalyzeCallOperands(llvm::SmallVectorImpl<llvm::MVT>&, llvm::SmallVectorImpl<llvm::ISD::ArgFlagsTy>&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState17AnalyzeCallResultERKNS_15SmallVectorImplINS_3ISD8InputArgEEEPFbjNS_3MVTES7_NS_11CCValAssign7LocInfoENS2_10ArgFlagsTyERS0_E\", \"llvm::CCState::AnalyzeCallResult(llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm7CCState17AnalyzeCallResultENS_3MVTEPFbjS1_S1_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERS0_E\", \"llvm::CCState::AnalyzeCallResult(llvm::MVT, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&))\"},\n    {\"_ZN4llvm26createCodePlacementOptPassEv\", \"llvm::createCodePlacementOptPass()\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOptD1Ev\", \"(anonymous namespace)::CodePlacementOpt::~CodePlacementOpt()\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOptD0Ev\", \"(anonymous namespace)::CodePlacementOpt::~CodePlacementOpt()\"},\n    {\"_ZNK12_GLOBAL__N_116CodePlacementOpt11getPassNameEv\", \"(anonymous namespace)::CodePlacementOpt::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_116CodePlacementOpt16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::CodePlacementOpt::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOpt20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::CodePlacementOpt::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOpt9AlignLoopERN4llvm15MachineFunctionEPNS1_11MachineLoopEj\", \"(anonymous namespace)::CodePlacementOpt::AlignLoop(llvm::MachineFunction&, llvm::MachineLoop*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOpt32OptimizeIntraLoopEdgesInLoopNestERN4llvm15MachineFunctionEPNS1_11MachineLoopE\", \"(anonymous namespace)::CodePlacementOpt::OptimizeIntraLoopEdgesInLoopNest(llvm::MachineFunction&, llvm::MachineLoop*)\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOpt23HasAnalyzableTerminatorEPN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::CodePlacementOpt::HasAnalyzableTerminator(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreakerC1ERNS_15MachineFunctionE\", \"llvm::CriticalAntiDepBreaker::CriticalAntiDepBreaker(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreakerC2ERNS_15MachineFunctionE\", \"llvm::CriticalAntiDepBreaker::CriticalAntiDepBreaker(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreakerD0Ev\", \"llvm::CriticalAntiDepBreaker::~CriticalAntiDepBreaker()\"},\n    {\"_ZN4llvm22CriticalAntiDepBreakerD1Ev\", \"llvm::CriticalAntiDepBreaker::~CriticalAntiDepBreaker()\"},\n    {\"_ZN4llvm22CriticalAntiDepBreakerD2Ev\", \"llvm::CriticalAntiDepBreaker::~CriticalAntiDepBreaker()\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker10StartBlockEPNS_17MachineBasicBlockE\", \"llvm::CriticalAntiDepBreaker::StartBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker11FinishBlockEv\", \"llvm::CriticalAntiDepBreaker::FinishBlock()\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker7ObserveEPNS_12MachineInstrEjj\", \"llvm::CriticalAntiDepBreaker::Observe(llvm::MachineInstr*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker18PrescanInstructionEPNS_12MachineInstrE\", \"llvm::CriticalAntiDepBreaker::PrescanInstruction(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker15ScanInstructionEPNS_12MachineInstrEj\", \"llvm::CriticalAntiDepBreaker::ScanInstruction(llvm::MachineInstr*, unsigned int)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker23isNewRegClobberedByRefsESt23_Rb_tree_const_iteratorISt4pairIKjPNS_14MachineOperandEEES7_j\", \"llvm::CriticalAntiDepBreaker::isNewRegClobberedByRefs(std::_Rb_tree_const_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >, std::_Rb_tree_const_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >, unsigned int)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker24findSuitableFreeRegisterESt23_Rb_tree_const_iteratorISt4pairIKjPNS_14MachineOperandEEES7_jjPKNS_19TargetRegisterClassE\", \"llvm::CriticalAntiDepBreaker::findSuitableFreeRegister(std::_Rb_tree_const_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >, std::_Rb_tree_const_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >, unsigned int, unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm22CriticalAntiDepBreaker21BreakAntiDependenciesERKSt6vectorINS_5SUnitESaIS2_EENS_14ilist_iteratorINS_12MachineInstrEEES9_j\", \"llvm::CriticalAntiDepBreaker::BreakAntiDependencies(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> > const&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPKNS_5SUnitENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::SUnit const*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::SUnit const*> >::InsertIntoBucket(llvm::MachineInstr* const&, llvm::SUnit const* const&, std::pair<llvm::MachineInstr*, llvm::SUnit const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPKNS_5SUnitENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::SUnit const*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::SUnit const*> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN4llvm14MachineOperandEESt10_Select1stIS5_ESt4lessIjESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::MachineOperand*>, std::_Select1st<std::pair<unsigned int const, llvm::MachineOperand*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::MachineOperand*> > >::erase(std::_Rb_tree_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >, std::_Rb_tree_iterator<std::pair<unsigned int const, llvm::MachineOperand*> >)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjPN4llvm14MachineOperandEESt10_Select1stIS5_ESt4lessIjESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::MachineOperand*>, std::_Select1st<std::pair<unsigned int const, llvm::MachineOperand*> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::MachineOperand*> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, llvm::MachineOperand*> >*)\"},\n    {\"_ZN4llvm40initializeDeadMachineInstructionElimPassERNS_12PassRegistryE\", \"llvm::initializeDeadMachineInstructionElimPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm36createDeadMachineInstructionElimPassEv\", \"llvm::createDeadMachineInstructionElimPass()\"},\n    {\"_ZN12_GLOBAL__N_126DeadMachineInstructionElimD1Ev\", \"(anonymous namespace)::DeadMachineInstructionElim::~DeadMachineInstructionElim()\"},\n    {\"_ZN12_GLOBAL__N_126DeadMachineInstructionElimD0Ev\", \"(anonymous namespace)::DeadMachineInstructionElim::~DeadMachineInstructionElim()\"},\n    {\"_ZN12_GLOBAL__N_126DeadMachineInstructionElim20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::DeadMachineInstructionElim::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_126DeadMachineInstructionElimEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::DeadMachineInstructionElim>()\"},\n    {\"_ZN4llvm17createDwarfEHPassEPKNS_13TargetMachineE\", \"llvm::createDwarfEHPass(llvm::TargetMachine const*)\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepareD1Ev\", \"(anonymous namespace)::DwarfEHPrepare::~DwarfEHPrepare()\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepareD0Ev\", \"(anonymous namespace)::DwarfEHPrepare::~DwarfEHPrepare()\"},\n    {\"_ZNK12_GLOBAL__N_114DwarfEHPrepare11getPassNameEv\", \"(anonymous namespace)::DwarfEHPrepare::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_114DwarfEHPrepare16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::DwarfEHPrepare::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepare13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::DwarfEHPrepare::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepare16CleanupSelectorsERN4llvm11SmallPtrSetIPNS1_13IntrinsicInstELj32EEE\", \"(anonymous namespace)::DwarfEHPrepare::CleanupSelectors(llvm::SmallPtrSet<llvm::IntrinsicInst*, 32u>&)\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepare19FindSelectorAndURoREPN4llvm11InstructionERbRNS1_11SmallPtrSetIPNS1_13IntrinsicInstELj8EEE\", \"(anonymous namespace)::DwarfEHPrepare::FindSelectorAndURoR(llvm::Instruction*, bool&, llvm::SmallPtrSet<llvm::IntrinsicInst*, 8u>&)\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepare24CreateExceptionValueCallEPN4llvm10BasicBlockE\", \"(anonymous namespace)::DwarfEHPrepare::CreateExceptionValueCall(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE5SplitINS_7InverseIPS1_EENS_11GraphTraitsIS6_EEEEvRNS0_INT0_8NodeTypeEEEPSA_\", \"void llvm::DominatorTreeBase<llvm::BasicBlock>::Split<llvm::Inverse<llvm::BasicBlock*>, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE5SplitIPS1_NS_11GraphTraitsIS4_EEEEvRNS0_INT0_8NodeTypeEEEPS8_\", \"void llvm::DominatorTreeBase<llvm::BasicBlock>::Split<llvm::BasicBlock*, llvm::GraphTraits<llvm::BasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::BasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::BasicBlock*>::NodeType*)\"},\n    {\"_ZNSt6vectorIPN4llvm15DomTreeNodeBaseINS0_10BasicBlockEEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::BasicBlock>* const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm15DomTreeNodeBaseINS2_10BasicBlockEEESt6vectorIS6_SaIS6_EEEES6_ET_SC_SC_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::BasicBlock>*>(__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::BasicBlock>* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::DomTreeNodeBase<llvm::BasicBlock>* const&, std::pair<llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock* const&)\"},\n    {\"_ZN4llvm25initializeEdgeBundlesPassERNS_12PassRegistryE\", \"llvm::initializeEdgeBundlesPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm11EdgeBundles16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::EdgeBundles::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm11EdgeBundles20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::EdgeBundles::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNK4llvm11EdgeBundles4viewEv\", \"llvm::EdgeBundles::view() const\"},\n    {\"_ZN4llvm10WriteGraphERNS_11raw_ostreamERKNS_11EdgeBundlesEbRKSs\", \"llvm::WriteGraph(llvm::raw_ostream&, llvm::EdgeBundles const&, bool, std::string const&)\"},\n    {\"_ZN4llvm11EdgeBundlesD1Ev\", \"llvm::EdgeBundles::~EdgeBundles()\"},\n    {\"_ZN4llvm11EdgeBundlesD0Ev\", \"llvm::EdgeBundles::~EdgeBundles()\"},\n    {\"_ZN4llvm10WriteGraphINS_11EdgeBundlesEEENS_3sys4PathERKT_RKSsbS8_\", \"llvm::sys::Path llvm::WriteGraph<llvm::EdgeBundles>(llvm::EdgeBundles const&, std::string const&, bool, std::string const&)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_11EdgeBundlesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::EdgeBundles>()\"},\n    {\"_ZN4llvm31initializeExpandISelPseudosPassERNS_12PassRegistryE\", \"llvm::initializeExpandISelPseudosPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm27createExpandISelPseudosPassEv\", \"llvm::createExpandISelPseudosPass()\"},\n    {\"_ZN12_GLOBAL__N_117ExpandISelPseudosD1Ev\", \"(anonymous namespace)::ExpandISelPseudos::~ExpandISelPseudos()\"},\n    {\"_ZN12_GLOBAL__N_117ExpandISelPseudosD0Ev\", \"(anonymous namespace)::ExpandISelPseudos::~ExpandISelPseudos()\"},\n    {\"_ZNK12_GLOBAL__N_117ExpandISelPseudos11getPassNameEv\", \"(anonymous namespace)::ExpandISelPseudos::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_117ExpandISelPseudos16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::ExpandISelPseudos::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_117ExpandISelPseudos20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::ExpandISelPseudos::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_117ExpandISelPseudosEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::ExpandISelPseudos>()\"},\n    {\"_ZN4llvm26initializeGCModuleInfoPassERNS_12PassRegistryE\", \"llvm::initializeGCModuleInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm14GCFunctionInfoC1ERKNS_8FunctionERNS_10GCStrategyE\", \"llvm::GCFunctionInfo::GCFunctionInfo(llvm::Function const&, llvm::GCStrategy&)\"},\n    {\"_ZN4llvm14GCFunctionInfoC2ERKNS_8FunctionERNS_10GCStrategyE\", \"llvm::GCFunctionInfo::GCFunctionInfo(llvm::Function const&, llvm::GCStrategy&)\"},\n    {\"_ZN4llvm14GCFunctionInfoD1Ev\", \"llvm::GCFunctionInfo::~GCFunctionInfo()\"},\n    {\"_ZN4llvm14GCFunctionInfoD2Ev\", \"llvm::GCFunctionInfo::~GCFunctionInfo()\"},\n    {\"_ZN4llvm12GCModuleInfoC1Ev\", \"llvm::GCModuleInfo::GCModuleInfo()\"},\n    {\"_ZN4llvm12GCModuleInfoC2Ev\", \"llvm::GCModuleInfo::GCModuleInfo()\"},\n    {\"_ZN4llvm12GCModuleInfoD0Ev\", \"llvm::GCModuleInfo::~GCModuleInfo()\"},\n    {\"_ZN4llvm12GCModuleInfoD1Ev\", \"llvm::GCModuleInfo::~GCModuleInfo()\"},\n    {\"_ZN4llvm12GCModuleInfoD2Ev\", \"llvm::GCModuleInfo::~GCModuleInfo()\"},\n    {\"_ZN4llvm12GCModuleInfo5clearEv\", \"llvm::GCModuleInfo::clear()\"},\n    {\"_ZN4llvm12GCModuleInfo19getOrCreateStrategyEPKNS_6ModuleERKSs\", \"llvm::GCModuleInfo::getOrCreateStrategy(llvm::Module const*, std::string const&)\"},\n    {\"_ZN4llvm12GCModuleInfo15getFunctionInfoERKNS_8FunctionE\", \"llvm::GCModuleInfo::getFunctionInfo(llvm::Function const&)\"},\n    {\"_ZN4llvm19createGCInfoPrinterERNS_11raw_ostreamE\", \"llvm::createGCInfoPrinter(llvm::raw_ostream&)\"},\n    {\"_ZN4llvm19createGCInfoDeleterEv\", \"llvm::createGCInfoDeleter()\"},\n    {\"_ZN12_GLOBAL__N_17DeleterD1Ev\", \"(anonymous namespace)::Deleter::~Deleter()\"},\n    {\"_ZN12_GLOBAL__N_17DeleterD0Ev\", \"(anonymous namespace)::Deleter::~Deleter()\"},\n    {\"_ZNK12_GLOBAL__N_17Deleter11getPassNameEv\", \"(anonymous namespace)::Deleter::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_17Deleter16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::Deleter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_17Deleter13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::Deleter::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_17Deleter14doFinalizationERN4llvm6ModuleE\", \"(anonymous namespace)::Deleter::doFinalization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_17PrinterD1Ev\", \"(anonymous namespace)::Printer::~Printer()\"},\n    {\"_ZN12_GLOBAL__N_17PrinterD0Ev\", \"(anonymous namespace)::Printer::~Printer()\"},\n    {\"_ZNK12_GLOBAL__N_17Printer11getPassNameEv\", \"(anonymous namespace)::Printer::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_17Printer16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::Printer::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_17Printer13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::Printer::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionEPNS_14GCFunctionInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Function const*, llvm::GCFunctionInfo*, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::GCFunctionInfo*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionEPNS_14GCFunctionInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::Function const*, llvm::GCFunctionInfo*, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::GCFunctionInfo*> >::InsertIntoBucket(llvm::Function const* const&, llvm::GCFunctionInfo* const&, std::pair<llvm::Function const*, llvm::GCFunctionInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionEPNS_14GCFunctionInfoENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::Function const*, llvm::GCFunctionInfo*, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::GCFunctionInfo*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm10GCStrategyESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::GCStrategy*, std::allocator<llvm::GCStrategy*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GCStrategy**, std::vector<llvm::GCStrategy*, std::allocator<llvm::GCStrategy*> > >, llvm::GCStrategy* const&)\"},\n    {\"_ZN4llvm9StringMapIPNS_10GCStrategyENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::GCStrategy*>& llvm::StringMap<llvm::GCStrategy*, llvm::MallocAllocator>::GetOrCreateValue<llvm::GCStrategy*>(llvm::StringRef, llvm::GCStrategy*)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_12GCModuleInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::GCModuleInfo>()\"},\n    {\"_ZN4llvm10GCStrategyC1Ev\", \"llvm::GCStrategy::GCStrategy()\"},\n    {\"_ZN4llvm10GCStrategyC2Ev\", \"llvm::GCStrategy::GCStrategy()\"},\n    {\"_ZN4llvm10GCStrategyD0Ev\", \"llvm::GCStrategy::~GCStrategy()\"},\n    {\"_ZN4llvm10GCStrategyD1Ev\", \"llvm::GCStrategy::~GCStrategy()\"},\n    {\"_ZN4llvm10GCStrategyD2Ev\", \"llvm::GCStrategy::~GCStrategy()\"},\n    {\"_ZN4llvm10GCStrategy24initializeCustomLoweringERNS_6ModuleE\", \"llvm::GCStrategy::initializeCustomLowering(llvm::Module&)\"},\n    {\"_ZN4llvm10GCStrategy21performCustomLoweringERNS_8FunctionE\", \"llvm::GCStrategy::performCustomLowering(llvm::Function&)\"},\n    {\"_ZN4llvm10GCStrategy18insertFunctionInfoERKNS_8FunctionE\", \"llvm::GCStrategy::insertFunctionInfo(llvm::Function const&)\"},\n    {\"_ZN4llvm29initializeLowerIntrinsicsPassERNS_12PassRegistryE\", \"llvm::initializeLowerIntrinsicsPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm20createGCLoweringPassEv\", \"llvm::createGCLoweringPass()\"},\n    {\"_ZN4llvm31createGCMachineCodeAnalysisPassEv\", \"llvm::createGCMachineCodeAnalysisPass()\"},\n    {\"_ZN12_GLOBAL__N_119MachineCodeAnalysisD1Ev\", \"(anonymous namespace)::MachineCodeAnalysis::~MachineCodeAnalysis()\"},\n    {\"_ZN12_GLOBAL__N_119MachineCodeAnalysisD0Ev\", \"(anonymous namespace)::MachineCodeAnalysis::~MachineCodeAnalysis()\"},\n    {\"_ZNK12_GLOBAL__N_119MachineCodeAnalysis11getPassNameEv\", \"(anonymous namespace)::MachineCodeAnalysis::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_119MachineCodeAnalysis16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineCodeAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_119MachineCodeAnalysis20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineCodeAnalysis::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNK12_GLOBAL__N_119MachineCodeAnalysis11InsertLabelERN4llvm17MachineBasicBlockENS1_14ilist_iteratorINS1_12MachineInstrEEENS1_8DebugLocE\", \"(anonymous namespace)::MachineCodeAnalysis::InsertLabel(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::DebugLoc) const\"},\n    {\"_ZN12_GLOBAL__N_115LowerIntrinsicsD1Ev\", \"(anonymous namespace)::LowerIntrinsics::~LowerIntrinsics()\"},\n    {\"_ZN12_GLOBAL__N_115LowerIntrinsicsD0Ev\", \"(anonymous namespace)::LowerIntrinsics::~LowerIntrinsics()\"},\n    {\"_ZNK12_GLOBAL__N_115LowerIntrinsics11getPassNameEv\", \"(anonymous namespace)::LowerIntrinsics::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_115LowerIntrinsics16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LowerIntrinsics::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_115LowerIntrinsics16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::LowerIntrinsics::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_115LowerIntrinsics13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::LowerIntrinsics::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_115LowerIntrinsicsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LowerIntrinsics>()\"},\n    {\"_ZNSt6vectorIPN4llvm14GCFunctionInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::GCFunctionInfo*, std::allocator<llvm::GCFunctionInfo*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GCFunctionInfo**, std::vector<llvm::GCFunctionInfo*, std::allocator<llvm::GCFunctionInfo*> > >, llvm::GCFunctionInfo* const&)\"},\n    {\"_ZNSt6vectorIN4llvm7GCPointESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::GCPoint, std::allocator<llvm::GCPoint> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GCPoint*, std::vector<llvm::GCPoint, std::allocator<llvm::GCPoint> > >, llvm::GCPoint const&)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE11recalculateINS_8FunctionEEEvRT_\", \"void llvm::DominatorTreeBase<llvm::BasicBlock>::recalculate<llvm::Function>(llvm::Function&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::BasicBlock* const&, std::pair<llvm::BasicBlock*, llvm::BasicBlock*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockES2_NS_12DenseMapInfoIS2_EES4_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm25initializeIfConverterPassERNS_12PassRegistryE\", \"llvm::initializeIfConverterPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createIfConverterPassEv\", \"llvm::createIfConverterPass()\"},\n    {\"_ZN12_GLOBAL__N_111IfConverterD1Ev\", \"(anonymous namespace)::IfConverter::~IfConverter()\"},\n    {\"_ZN12_GLOBAL__N_111IfConverterD0Ev\", \"(anonymous namespace)::IfConverter::~IfConverter()\"},\n    {\"_ZNK12_GLOBAL__N_111IfConverter11getPassNameEv\", \"(anonymous namespace)::IfConverter::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_111IfConverter16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::IfConverter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::IfConverter::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter14PredicateBlockERNS0_6BBInfoEN4llvm14ilist_iteratorINS3_12MachineInstrEEERNS3_15SmallVectorImplINS3_14MachineOperandEEERNS3_8SmallSetIjLj4EEE\", \"(anonymous namespace)::IfConverter::PredicateBlock((anonymous namespace)::IfConverter::BBInfo&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SmallVectorImpl<llvm::MachineOperand>&, llvm::SmallSet<unsigned int, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter11MergeBlocksERNS0_6BBInfoES2_b\", \"(anonymous namespace)::IfConverter::MergeBlocks((anonymous namespace)::IfConverter::BBInfo&, (anonymous namespace)::IfConverter::BBInfo&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter6BBInfoC1ERKS1_\", \"(anonymous namespace)::IfConverter::BBInfo::BBInfo((anonymous namespace)::IfConverter::BBInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter16RemoveExtraEdgesERNS0_6BBInfoE\", \"(anonymous namespace)::IfConverter::RemoveExtraEdges((anonymous namespace)::IfConverter::BBInfo&)\"},\n    {\"_Z16UpdatePredRedefsPN4llvm12MachineInstrERNS_8SmallSetIjLj4EEEPKNS_18TargetRegisterInfoEb\", \"UpdatePredRedefs(llvm::MachineInstr*, llvm::SmallSet<unsigned int, 4u>&, llvm::TargetRegisterInfo const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter21CopyAndPredicateBlockERNS0_6BBInfoES2_RN4llvm15SmallVectorImplINS3_14MachineOperandEEERNS3_8SmallSetIjLj4EEEb\", \"(anonymous namespace)::IfConverter::CopyAndPredicateBlock((anonymous namespace)::IfConverter::BBInfo&, (anonymous namespace)::IfConverter::BBInfo&, llvm::SmallVectorImpl<llvm::MachineOperand>&, llvm::SmallSet<unsigned int, 4u>&, bool)\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter12AnalyzeBlockEPN4llvm17MachineBasicBlockERSt6vectorIPNS0_10IfcvtTokenESaIS6_EE\", \"(anonymous namespace)::IfConverter::AnalyzeBlock(llvm::MachineBasicBlock*, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> >&)\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEEPFbS5_S5_EEvT_SD_T0_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEES6_lPFbS5_S5_EEvT_SD_T0_T1_T2_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, long, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, long, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEES6_PFbS5_S5_EEvT_SD_T0_T1_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEElS6_PFbS5_S5_EEvT_SD_SD_T0_SE_T1_SE_T2_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, long, (anonymous namespace)::IfConverter::IfcvtToken**, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, long, long, (anonymous namespace)::IfConverter::IfcvtToken**, long, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt11lower_boundIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEES5_PFbS5_S5_EET_SD_SD_RKT0_T1_\", \"__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > > std::lower_bound<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken*, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken* const&, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt11upper_boundIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEES5_PFbS5_S5_EET_SD_SD_RKT0_T1_\", \"__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > > std::upper_bound<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken*, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken* const&, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt6rotateIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEEEvT_SB_SB_\", \"void std::rotate<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > > >(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >)\"},\n    {\"_ZSt5mergeIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenES4_N9__gnu_cxx17__normal_iteratorIS4_St6vectorIS3_SaIS3_EEEEPFbS3_S3_EET1_T_SE_T0_SF_SD_T2_\", \"__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > > std::merge<(anonymous namespace)::IfConverter::IfcvtToken**, (anonymous namespace)::IfConverter::IfcvtToken**, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>((anonymous namespace)::IfConverter::IfcvtToken**, (anonymous namespace)::IfConverter::IfcvtToken**, (anonymous namespace)::IfConverter::IfcvtToken**, (anonymous namespace)::IfConverter::IfcvtToken**, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt5mergeIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEESA_S6_PFbS5_S5_EET1_T_SE_T0_SF_SD_T2_\", \"(anonymous namespace)::IfConverter::IfcvtToken** std::merge<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, (anonymous namespace)::IfConverter::IfcvtToken**, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEEPFbS5_S5_EEvT_SD_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPPN12_GLOBAL__N_111IfConverter10IfcvtTokenESt6vectorIS5_SaIS5_EEEElPFbS5_S5_EEvT_SD_SD_T0_SE_T1_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, long, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*)>(__gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::IfConverter::IfcvtToken**, std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> > >, long, long, bool (*)((anonymous namespace)::IfConverter::IfcvtToken*, (anonymous namespace)::IfConverter::IfcvtToken*))\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter19FeasibilityAnalysisERNS0_6BBInfoERN4llvm15SmallVectorImplINS3_14MachineOperandEEEbb\", \"(anonymous namespace)::IfConverter::FeasibilityAnalysis((anonymous namespace)::IfConverter::BBInfo&, llvm::SmallVectorImpl<llvm::MachineOperand>&, bool, bool)\"},\n    {\"_ZNSt6vectorIPN12_GLOBAL__N_111IfConverter10IfcvtTokenESaIS3_EE9push_backERKS3_\", \"std::vector<(anonymous namespace)::IfConverter::IfcvtToken*, std::allocator<(anonymous namespace)::IfConverter::IfcvtToken*> >::push_back((anonymous namespace)::IfConverter::IfcvtToken* const&)\"},\n    {\"_ZNK12_GLOBAL__N_111IfConverter13ValidTriangleERNS0_6BBInfoES2_bRjff\", \"(anonymous namespace)::IfConverter::ValidTriangle((anonymous namespace)::IfConverter::BBInfo&, (anonymous namespace)::IfConverter::BBInfo&, bool, unsigned int&, float, float) const\"},\n    {\"_ZSt4fillIPN12_GLOBAL__N_111IfConverter6BBInfoES2_EvT_S4_RKT0_\", \"void std::fill<(anonymous namespace)::IfConverter::BBInfo*, (anonymous namespace)::IfConverter::BBInfo>((anonymous namespace)::IfConverter::BBInfo*, (anonymous namespace)::IfConverter::BBInfo*, (anonymous namespace)::IfConverter::BBInfo const&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111IfConverterEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::IfConverter>()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_14MachineOperandEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::MachineOperand>::operator=(llvm::SmallVectorImpl<llvm::MachineOperand> const&)\"},\n    {\"_ZN4llvm8SmallSetIjLj4EE5eraseERKj\", \"llvm::SmallSet<unsigned int, 4u>::erase(unsigned int const&)\"},\n    {\"_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE5eraseESt17_Rb_tree_iteratorIjES7_\", \"std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::erase(std::_Rb_tree_iterator<unsigned int>, std::_Rb_tree_iterator<unsigned int>)\"},\n    {\"_ZN4llvm13idf_ext_beginIPNS_17MachineBasicBlockESt3setIS2_St4lessIS2_ESaIS2_EEEENS_16idf_ext_iteratorIT_T0_EERKS9_RSA_\", \"llvm::idf_ext_iterator<llvm::MachineBasicBlock*, std::set<llvm::MachineBasicBlock*, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> > > llvm::idf_ext_begin<llvm::MachineBasicBlock*, std::set<llvm::MachineBasicBlock*, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> > >(llvm::MachineBasicBlock* const&, std::set<llvm::MachineBasicBlock*, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> >&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm17MachineBasicBlockES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, std::_Identity<llvm::MachineBasicBlock*>, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> >::_M_erase(std::_Rb_tree_node<llvm::MachineBasicBlock*>*)\"},\n    {\"_ZN4llvm11df_iteratorINS_7InverseIPNS_17MachineBasicBlockEEESt3setIS3_St4lessIS3_ESaIS3_EELb1ENS_11GraphTraitsIS4_EEE6toNextEv\", \"llvm::df_iterator<llvm::Inverse<llvm::MachineBasicBlock*>, std::set<llvm::MachineBasicBlock*, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> >, true, llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> > >::toNext()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm17MachineBasicBlockES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, std::_Identity<llvm::MachineBasicBlock*>, std::less<llvm::MachineBasicBlock*>, std::allocator<llvm::MachineBasicBlock*> >::_M_insert_unique(llvm::MachineBasicBlock* const&)\"},\n    {\"_ZN4llvm19createInlineSpillerERNS_19MachineFunctionPassERNS_15MachineFunctionERNS_10VirtRegMapE\", \"llvm::createInlineSpiller(llvm::MachineFunctionPass&, llvm::MachineFunction&, llvm::VirtRegMap&)\"},\n    {\"_ZN12_GLOBAL__N_113InlineSpillerD1Ev\", \"(anonymous namespace)::InlineSpiller::~InlineSpiller()\"},\n    {\"_ZN12_GLOBAL__N_113InlineSpillerD0Ev\", \"(anonymous namespace)::InlineSpiller::~InlineSpiller()\"},\n    {\"_ZN12_GLOBAL__N_113InlineSpiller5spillEPN4llvm12LiveIntervalERNS1_15SmallVectorImplIS3_EERKS5_\", \"(anonymous namespace)::InlineSpiller::spill(llvm::LiveInterval*, llvm::SmallVectorImpl<llvm::LiveInterval*>&, llvm::SmallVectorImpl<llvm::LiveInterval*> const&)\"},\n    {\"_ZN12_GLOBAL__N_113InlineSpiller17foldMemoryOperandEN4llvm14ilist_iteratorINS1_12MachineInstrEEERKNS1_15SmallVectorImplIjEEPS3_\", \"(anonymous namespace)::InlineSpiller::foldMemoryOperand(llvm::ilist_iterator<llvm::MachineInstr>, llvm::SmallVectorImpl<unsigned int> const&, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm17IntrinsicLowering13AddPrototypesERNS_6ModuleE\", \"llvm::IntrinsicLowering::AddPrototypes(llvm::Module&)\"},\n    {\"_Z20EnsureFunctionExistsIN4llvm14ilist_iteratorINS0_8ArgumentEEEEvRNS0_6ModuleEPKcT_S8_PKNS0_4TypeE\", \"void EnsureFunctionExists<llvm::ilist_iterator<llvm::Argument> >(llvm::Module&, char const*, llvm::ilist_iterator<llvm::Argument>, llvm::ilist_iterator<llvm::Argument>, llvm::Type const*)\"},\n    {\"_Z23EnsureFPIntrinsicsExistRN4llvm6ModuleEPNS_8FunctionEPKcS5_S5_\", \"EnsureFPIntrinsicsExist(llvm::Module&, llvm::Function*, char const*, char const*, char const*)\"},\n    {\"_ZN4llvm17IntrinsicLowering18LowerIntrinsicCallEPNS_8CallInstE\", \"llvm::IntrinsicLowering::LowerIntrinsicCall(llvm::CallInst*)\"},\n    {\"_Z15ReplaceCallWithIPN4llvm3UseEEPNS0_8CallInstEPKcS4_T_S7_PKNS0_4TypeE\", \"llvm::CallInst* ReplaceCallWith<llvm::Use*>(char const*, llvm::CallInst*, llvm::Use*, llvm::Use*, llvm::Type const*)\"},\n    {\"_Z10LowerCTPOPRN4llvm11LLVMContextEPNS_5ValueEPNS_11InstructionE\", \"LowerCTPOP(llvm::LLVMContext&, llvm::Value*, llvm::Instruction*)\"},\n    {\"_Z15ReplaceCallWithIPPN4llvm5ValueEEPNS0_8CallInstEPKcS5_T_S8_PKNS0_4TypeE\", \"llvm::CallInst* ReplaceCallWith<llvm::Value**>(char const*, llvm::CallInst*, llvm::Value**, llvm::Value**, llvm::Type const*)\"},\n    {\"_Z26ReplaceFPIntrinsicWithCallPN4llvm8CallInstEPKcS3_S3_\", \"ReplaceFPIntrinsicWithCall(llvm::CallInst*, char const*, char const*, char const*)\"},\n    {\"_ZN4llvm17IntrinsicLowering15LowerToByteSwapEPNS_8CallInstE\", \"llvm::IntrinsicLowering::LowerToByteSwap(llvm::CallInst*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateNotEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateNot(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateSubEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateAndEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateAnd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE13CreateIntCastEPNS_5ValueEPKNS_4TypeEbRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateIntCast(llvm::Value*, llvm::Type const*, bool, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateCallIPPNS_5ValueEEEPNS_8CallInstES7_T_SB_RKNS_5TwineE\", \"llvm::CallInst* llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateAddEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm17LLVMTargetMachineC1ERKNS_6TargetERKSs\", \"llvm::LLVMTargetMachine::LLVMTargetMachine(llvm::Target const&, std::string const&)\"},\n    {\"_ZN4llvm17LLVMTargetMachineC2ERKNS_6TargetERKSs\", \"llvm::LLVMTargetMachine::LLVMTargetMachine(llvm::Target const&, std::string const&)\"},\n    {\"_ZN4llvm17LLVMTargetMachine18setCodeModelForJITEv\", \"llvm::LLVMTargetMachine::setCodeModelForJIT()\"},\n    {\"_ZN4llvm17LLVMTargetMachine21setCodeModelForStaticEv\", \"llvm::LLVMTargetMachine::setCodeModelForStatic()\"},\n    {\"_ZN4llvm17LLVMTargetMachine19addPassesToEmitFileERNS_15PassManagerBaseERNS_21formatted_raw_ostreamENS_13TargetMachine15CodeGenFileTypeENS_10CodeGenOpt5LevelEb\", \"llvm::LLVMTargetMachine::addPassesToEmitFile(llvm::PassManagerBase&, llvm::formatted_raw_ostream&, llvm::TargetMachine::CodeGenFileType, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_ZN4llvm17LLVMTargetMachine22addCommonCodeGenPassesERNS_15PassManagerBaseENS_10CodeGenOpt5LevelEbRPNS_9MCContextE\", \"llvm::LLVMTargetMachine::addCommonCodeGenPasses(llvm::PassManagerBase&, llvm::CodeGenOpt::Level, bool, llvm::MCContext*&)\"},\n    {\"_ZN4llvm17LLVMTargetMachine26addPassesToEmitMachineCodeERNS_15PassManagerBaseERNS_14JITCodeEmitterENS_10CodeGenOpt5LevelEb\", \"llvm::LLVMTargetMachine::addPassesToEmitMachineCode(llvm::PassManagerBase&, llvm::JITCodeEmitter&, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_ZN4llvm17LLVMTargetMachine17addPassesToEmitMCERNS_15PassManagerBaseERPNS_9MCContextENS_10CodeGenOpt5LevelEb\", \"llvm::LLVMTargetMachine::addPassesToEmitMC(llvm::PassManagerBase&, llvm::MCContext*&, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_Z14printAndVerifyRN4llvm15PassManagerBaseEPKc\", \"printAndVerify(llvm::PassManagerBase&, char const*)\"},\n    {\"_Z13printNoVerifyRN4llvm15PassManagerBaseEPKc\", \"printNoVerify(llvm::PassManagerBase&, char const*)\"},\n    {\"_ZN4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEED1Ev\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::~opt()\"},\n    {\"_ZN4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEE16handleOccurrenceEjNS_9StringRefES6_\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEED0Ev\", \"llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >::~opt()\"},\n    {\"_ZNK4llvm12latency_sortclEPKNS_5SUnitES3_\", \"llvm::latency_sort::operator()(llvm::SUnit const*, llvm::SUnit const*) const\"},\n    {\"_ZN4llvm20LatencyPriorityQueue24getSingleUnscheduledPredEPNS_5SUnitE\", \"llvm::LatencyPriorityQueue::getSingleUnscheduledPred(llvm::SUnit*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue4pushEPNS_5SUnitE\", \"llvm::LatencyPriorityQueue::push(llvm::SUnit*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue13ScheduledNodeEPNS_5SUnitE\", \"llvm::LatencyPriorityQueue::ScheduledNode(llvm::SUnit*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue32AdjustPriorityOfUnscheduledPredsEPNS_5SUnitE\", \"llvm::LatencyPriorityQueue::AdjustPriorityOfUnscheduledPreds(llvm::SUnit*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue3popEv\", \"llvm::LatencyPriorityQueue::pop()\"},\n    {\"_ZN4llvm20LatencyPriorityQueue6removeEPNS_5SUnitE\", \"llvm::LatencyPriorityQueue::remove(llvm::SUnit*)\"},\n    {\"_ZNK4llvm20LatencyPriorityQueue4dumpEPNS_11ScheduleDAGE\", \"llvm::LatencyPriorityQueue::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN4llvm32initializeLiveDebugVariablesPassERNS_12PassRegistryE\", \"llvm::initializeLiveDebugVariablesPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm18LiveDebugVariables16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LiveDebugVariables::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm18LiveDebugVariablesC1Ev\", \"llvm::LiveDebugVariables::LiveDebugVariables()\"},\n    {\"_ZN4llvm18LiveDebugVariablesC2Ev\", \"llvm::LiveDebugVariables::LiveDebugVariables()\"},\n    {\"_ZN4llvm18LiveDebugVariables20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::LiveDebugVariables::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm18LiveDebugVariables13releaseMemoryEv\", \"llvm::LiveDebugVariables::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_17LDVImpl5clearEv\", \"(anonymous namespace)::LDVImpl::clear()\"},\n    {\"_ZN4llvm18LiveDebugVariablesD0Ev\", \"llvm::LiveDebugVariables::~LiveDebugVariables()\"},\n    {\"_ZN4llvm18LiveDebugVariablesD1Ev\", \"llvm::LiveDebugVariables::~LiveDebugVariables()\"},\n    {\"_ZN4llvm18LiveDebugVariablesD2Ev\", \"llvm::LiveDebugVariables::~LiveDebugVariables()\"},\n    {\"_ZN4llvm18LiveDebugVariables14renameRegisterEjjj\", \"llvm::LiveDebugVariables::renameRegister(unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm18LiveDebugVariables15emitDebugValuesEPNS_10VirtRegMapE\", \"llvm::LiveDebugVariables::emitDebugValues(llvm::VirtRegMap*)\"},\n    {\"_ZN12_GLOBAL__N_19UserValue16insertDebugValueEPN4llvm17MachineBasicBlockENS1_9SlotIndexEjRNS1_13LiveIntervalsERKNS1_15TargetInstrInfoE\", \"(anonymous namespace)::UserValue::insertDebugValue(llvm::MachineBasicBlock*, llvm::SlotIndex, unsigned int, llvm::LiveIntervals&, llvm::TargetInstrInfo const&)\"},\n    {\"_Z18findInsertLocationPN4llvm17MachineBasicBlockENS_9SlotIndexERNS_13LiveIntervalsE\", \"findInsertLocation(llvm::MachineBasicBlock*, llvm::SlotIndex, llvm::LiveIntervals&)\"},\n    {\"_ZN12_GLOBAL__N_19UserValue16coalesceLocationEj\", \"(anonymous namespace)::UserValue::coalesceLocation(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_17LDVImpl10mapVirtRegEjPNS_9UserValueE\", \"(anonymous namespace)::LDVImpl::mapVirtReg(unsigned int, (anonymous namespace)::UserValue*)\"},\n    {\"_ZN12_GLOBAL__N_19UserValue9extendDefEN4llvm9SlotIndexEjPNS1_12LiveIntervalEPKNS1_6VNInfoERNS1_13LiveIntervalsERNS1_20MachineDominatorTreeE\", \"(anonymous namespace)::UserValue::extendDef(llvm::SlotIndex, unsigned int, llvm::LiveInterval*, llvm::VNInfo const*, llvm::LiveIntervals&, llvm::MachineDominatorTree&)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE14const_iterator7setRootEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::const_iterator::setRoot(unsigned int)\"},\n    {\"_ZN4llvm15IntervalMapImpl4Path8fillLeftEj\", \"llvm::IntervalMapImpl::Path::fillLeft(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15IntervalMapImpl4Path5EntryELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::IntervalMapImpl::Path::Entry, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_15IntervalMapImpl4Path5EntryEEaSERKS4_\", \"llvm::SmallVectorImpl<llvm::IntervalMapImpl::Path::Entry>::operator=(llvm::SmallVectorImpl<llvm::IntervalMapImpl::Path::Entry> const&)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator8setValueEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::setValue(unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator16canCoalesceRightES1_j\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::canCoalesceRight(llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator15canCoalesceLeftES1_j\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::canCoalesceLeft(llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator9treeEraseEb\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::treeErase(bool)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator9eraseNodeEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::eraseNode(unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE16switchRootToLeafEv\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::switchRootToLeaf()\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE10visitNodesEMS4_FvNS_15IntervalMapImpl7NodeRefEjE\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::visitNodes(void (llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::*)(llvm::IntervalMapImpl::NodeRef, unsigned int))\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE10deleteNodeENS_15IntervalMapImpl7NodeRefEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::deleteNode(llvm::IntervalMapImpl::NodeRef, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_15IntervalMapImpl7NodeRefEE4swapERS3_\", \"llvm::SmallVectorImpl<llvm::IntervalMapImpl::NodeRef>::swap(llvm::SmallVectorImpl<llvm::IntervalMapImpl::NodeRef>&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15IntervalMapImpl7NodeRefELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::IntervalMapImpl::NodeRef, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator6insertES1_S1_j\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::insert(llvm::SlotIndex, llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator10treeInsertES1_S1_j\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::treeInsert(llvm::SlotIndex, llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm15IntervalMapImpl8LeafNodeINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS2_EEE10insertFromERjjS2_S2_j\", \"llvm::IntervalMapImpl::LeafNode<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::insertFrom(unsigned int&, unsigned int, llvm::SlotIndex, llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE10branchRootEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::branchRoot(unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE18switchRootToBranchEv\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::switchRootToBranch()\"},\n    {\"_ZN4llvm15IntervalMapImpl8NodeBaseISt4pairINS_9SlotIndexES3_EjLj9EEC2Ev\", \"llvm::IntervalMapImpl::NodeBase<std::pair<llvm::SlotIndex, llvm::SlotIndex>, unsigned int, 9u>::NodeBase()\"},\n    {\"_ZN4llvm15IntervalMapImpl8LeafNodeINS_9SlotIndexEjLj9ENS_15IntervalMapInfoIS2_EEE10insertFromERjjS2_S2_j\", \"llvm::IntervalMapImpl::LeafNode<llvm::SlotIndex, unsigned int, 9u, llvm::IntervalMapInfo<llvm::SlotIndex> >::insertFrom(unsigned int&, unsigned int, llvm::SlotIndex, llvm::SlotIndex, unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator8overflowINS_15IntervalMapImpl8LeafNodeIS1_jLj9ES3_EEEEbj\", \"bool llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::overflow<llvm::IntervalMapImpl::LeafNode<llvm::SlotIndex, unsigned int, 9u, llvm::IntervalMapInfo<llvm::SlotIndex> > >(unsigned int)\"},\n    {\"_ZN4llvm15IntervalMapImpl18adjustSiblingSizesINS0_8LeafNodeINS_9SlotIndexEjLj9ENS_15IntervalMapInfoIS3_EEEEEEvPPT_jPjPKj\", \"void llvm::IntervalMapImpl::adjustSiblingSizes<llvm::IntervalMapImpl::LeafNode<llvm::SlotIndex, unsigned int, 9u, llvm::IntervalMapInfo<llvm::SlotIndex> > >(llvm::IntervalMapImpl::LeafNode<llvm::SlotIndex, unsigned int, 9u, llvm::IntervalMapInfo<llvm::SlotIndex> >**, unsigned int, unsigned int*, unsigned int const*)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator10insertNodeEjNS_15IntervalMapImpl7NodeRefES1_\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::insertNode(unsigned int, llvm::IntervalMapImpl::NodeRef, llvm::SlotIndex)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE9splitRootEj\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::splitRoot(unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE8iterator8overflowINS_15IntervalMapImpl10BranchNodeIS1_jLj12ES3_EEEEbj\", \"bool llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::iterator::overflow<llvm::IntervalMapImpl::BranchNode<llvm::SlotIndex, unsigned int, 12u, llvm::IntervalMapInfo<llvm::SlotIndex> > >(unsigned int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE7newNodeINS_15IntervalMapImpl10BranchNodeIS1_jLj12ES3_EEEEPT_v\", \"llvm::IntervalMapImpl::BranchNode<llvm::SlotIndex, unsigned int, 12u, llvm::IntervalMapInfo<llvm::SlotIndex> >* llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::newNode<llvm::IntervalMapImpl::BranchNode<llvm::SlotIndex, unsigned int, 12u, llvm::IntervalMapInfo<llvm::SlotIndex> > >()\"},\n    {\"_ZN4llvm15IntervalMapImpl18adjustSiblingSizesINS0_10BranchNodeINS_9SlotIndexEjLj12ENS_15IntervalMapInfoIS3_EEEEEEvPPT_jPjPKj\", \"void llvm::IntervalMapImpl::adjustSiblingSizes<llvm::IntervalMapImpl::BranchNode<llvm::SlotIndex, unsigned int, 12u, llvm::IntervalMapInfo<llvm::SlotIndex> > >(llvm::IntervalMapImpl::BranchNode<llvm::SlotIndex, unsigned int, 12u, llvm::IntervalMapInfo<llvm::SlotIndex> >**, unsigned int, unsigned int*, unsigned int const*)\"},\n    {\"_ZN4llvm15IntervalMapImpl8NodeBaseINS0_7NodeRefENS_9SlotIndexELj12EE17adjustFromLeftSibEjRS4_ji\", \"llvm::IntervalMapImpl::NodeBase<llvm::IntervalMapImpl::NodeRef, llvm::SlotIndex, 12u>::adjustFromLeftSib(unsigned int, llvm::IntervalMapImpl::NodeBase<llvm::IntervalMapImpl::NodeRef, llvm::SlotIndex, 12u>&, unsigned int, int)\"},\n    {\"_ZN4llvm15IntervalMapImpl8NodeBaseISt4pairINS_9SlotIndexES3_EjLj9EE17adjustFromLeftSibEjRS5_ji\", \"llvm::IntervalMapImpl::NodeBase<std::pair<llvm::SlotIndex, llvm::SlotIndex>, unsigned int, 9u>::adjustFromLeftSib(unsigned int, llvm::IntervalMapImpl::NodeBase<std::pair<llvm::SlotIndex, llvm::SlotIndex>, unsigned int, 9u>&, unsigned int, int)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE14const_iterator4findES1_\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::const_iterator::find(llvm::SlotIndex)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE14const_iterator8treeFindES1_\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::const_iterator::treeFind(llvm::SlotIndex)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEE14const_iterator12pathFillFindES1_\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::const_iterator::pathFillFind(llvm::SlotIndex)\"},\n    {\"_ZN4llvm11IntervalMapINS_9SlotIndexEjLj4ENS_15IntervalMapInfoIS1_EEEC2ERNS_18RecyclingAllocatorINS_16BumpPtrAllocatorEcLm192ELm64EEE\", \"llvm::IntervalMap<llvm::SlotIndex, unsigned int, 4u, llvm::IntervalMapInfo<llvm::SlotIndex> >::IntervalMap(llvm::RecyclingAllocator<llvm::BumpPtrAllocator, char, 192ul, 64ul>&)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_18LiveDebugVariablesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LiveDebugVariables>()\"},\n    {\"_ZN4llvm12LiveInterval4findENS_9SlotIndexE\", \"llvm::LiveInterval::find(llvm::SlotIndex)\"},\n    {\"_ZNK4llvm12LiveInterval13killedInRangeENS_9SlotIndexES1_\", \"llvm::LiveInterval::killedInRange(llvm::SlotIndex, llvm::SlotIndex) const\"},\n    {\"_ZNK4llvm12LiveInterval12overlapsFromERKS0_PKNS_9LiveRangeE\", \"llvm::LiveInterval::overlapsFrom(llvm::LiveInterval const&, llvm::LiveRange const*) const\"},\n    {\"_ZNK4llvm12LiveInterval8overlapsENS_9SlotIndexES1_\", \"llvm::LiveInterval::overlaps(llvm::SlotIndex, llvm::SlotIndex) const\"},\n    {\"_ZN4llvm12LiveInterval20markValNoForDeletionEPNS_6VNInfoE\", \"llvm::LiveInterval::markValNoForDeletion(llvm::VNInfo*)\"},\n    {\"_ZN4llvm12LiveInterval14RenumberValuesERNS_13LiveIntervalsE\", \"llvm::LiveInterval::RenumberValues(llvm::LiveIntervals&)\"},\n    {\"_ZN4llvm12LiveInterval19extendIntervalEndToEPNS_9LiveRangeENS_9SlotIndexE\", \"llvm::LiveInterval::extendIntervalEndTo(llvm::LiveRange*, llvm::SlotIndex)\"},\n    {\"_ZN4llvm12LiveInterval21extendIntervalStartToEPNS_9LiveRangeENS_9SlotIndexE\", \"llvm::LiveInterval::extendIntervalStartTo(llvm::LiveRange*, llvm::SlotIndex)\"},\n    {\"_ZN4llvm12LiveInterval12addRangeFromENS_9LiveRangeEPS1_\", \"llvm::LiveInterval::addRangeFrom(llvm::LiveRange, llvm::LiveRange*)\"},\n    {\"_ZN4llvm12LiveInterval11removeRangeENS_9SlotIndexES1_b\", \"llvm::LiveInterval::removeRange(llvm::SlotIndex, llvm::SlotIndex, bool)\"},\n    {\"_ZN4llvm12LiveInterval11removeValNoEPNS_6VNInfoE\", \"llvm::LiveInterval::removeValNo(llvm::VNInfo*)\"},\n    {\"_ZNK4llvm12LiveInterval26findDefinedVNInfoForRegIntENS_9SlotIndexE\", \"llvm::LiveInterval::findDefinedVNInfoForRegInt(llvm::SlotIndex) const\"},\n    {\"_ZN4llvm12LiveInterval4joinERS0_PKiS3_RNS_11SmallVectorIPNS_6VNInfoELj16EEEPNS_19MachineRegisterInfoE\", \"llvm::LiveInterval::join(llvm::LiveInterval&, int const*, int const*, llvm::SmallVector<llvm::VNInfo*, 16u>&, llvm::MachineRegisterInfo*)\"},\n    {\"_ZN4llvm12LiveInterval19ComputeJoinedWeightERKS0_\", \"llvm::LiveInterval::ComputeJoinedWeight(llvm::LiveInterval const&)\"},\n    {\"_ZN4llvm12LiveInterval20MergeRangesInAsValueERKS0_PNS_6VNInfoE\", \"llvm::LiveInterval::MergeRangesInAsValue(llvm::LiveInterval const&, llvm::VNInfo*)\"},\n    {\"_ZN4llvm12LiveInterval19MergeValueInAsValueERKS0_PKNS_6VNInfoEPS3_\", \"llvm::LiveInterval::MergeValueInAsValue(llvm::LiveInterval const&, llvm::VNInfo const*, llvm::VNInfo*)\"},\n    {\"_ZN4llvm12LiveInterval20MergeValueNumberIntoEPNS_6VNInfoES2_\", \"llvm::LiveInterval::MergeValueNumberInto(llvm::VNInfo*, llvm::VNInfo*)\"},\n    {\"_ZN4llvm12LiveInterval4CopyERKS0_PNS_19MachineRegisterInfoERNS_16BumpPtrAllocatorE\", \"llvm::LiveInterval::Copy(llvm::LiveInterval const&, llvm::MachineRegisterInfo*, llvm::BumpPtrAllocator&)\"},\n    {\"_ZNK4llvm12LiveInterval7getSizeEv\", \"llvm::LiveInterval::getSize() const\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamERKNS_9LiveRangeE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::LiveRange const&)\"},\n    {\"_ZNK4llvm9LiveRange4dumpEv\", \"llvm::LiveRange::dump() const\"},\n    {\"_ZNK4llvm12LiveInterval5printERNS_11raw_ostreamEPKNS_18TargetRegisterInfoE\", \"llvm::LiveInterval::print(llvm::raw_ostream&, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm12LiveInterval4dumpEv\", \"llvm::LiveInterval::dump() const\"},\n    {\"_ZNK4llvm9LiveRange5printERNS_11raw_ostreamE\", \"llvm::LiveRange::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm24ConnectedVNInfoEqClasses8ClassifyEPKNS_12LiveIntervalE\", \"llvm::ConnectedVNInfoEqClasses::Classify(llvm::LiveInterval const*)\"},\n    {\"_ZN4llvm24ConnectedVNInfoEqClasses10DistributeEPPNS_12LiveIntervalE\", \"llvm::ConnectedVNInfoEqClasses::Distribute(llvm::LiveInterval**)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9LiveRangeEE6insertEPS1_RKS1_\", \"llvm::SmallVectorImpl<llvm::LiveRange>::insert(llvm::LiveRange*, llvm::LiveRange const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_6VNInfoEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::VNInfo*>::resize(unsigned int)\"},\n    {\"_ZNK4llvm12LiveInterval23FindLiveRangeContainingENS_9SlotIndexE\", \"llvm::LiveInterval::FindLiveRangeContaining(llvm::SlotIndex) const\"},\n    {\"_ZN4llvm27initializeLiveIntervalsPassERNS_12PassRegistryE\", \"llvm::initializeLiveIntervalsPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm13LiveIntervals16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LiveIntervals::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13LiveIntervals13releaseMemoryEv\", \"llvm::LiveIntervals::releaseMemory()\"},\n    {\"_ZN4llvm13LiveIntervals20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::LiveIntervals::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm13LiveIntervals16computeIntervalsEv\", \"llvm::LiveIntervals::computeIntervals()\"},\n    {\"_ZNK4llvm13LiveIntervals5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::LiveIntervals::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm13LiveIntervals11printInstrsERNS_11raw_ostreamE\", \"llvm::LiveIntervals::printInstrs(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm13LiveIntervals10dumpInstrsEv\", \"llvm::LiveIntervals::dumpInstrs() const\"},\n    {\"_ZN4llvm13LiveIntervals20conflictsWithPhysRegERKNS_12LiveIntervalERNS_10VirtRegMapEj\", \"llvm::LiveIntervals::conflictsWithPhysReg(llvm::LiveInterval const&, llvm::VirtRegMap&, unsigned int)\"},\n    {\"_ZN4llvm13LiveIntervals21conflictsWithAliasRefERNS_12LiveIntervalEjRNS_11SmallPtrSetIPNS_12MachineInstrELj32EEE\", \"llvm::LiveIntervals::conflictsWithAliasRef(llvm::LiveInterval&, unsigned int, llvm::SmallPtrSet<llvm::MachineInstr*, 32u>&)\"},\n    {\"_ZN4llvm13LiveIntervals14isPartialRedefENS_9SlotIndexERNS_14MachineOperandERNS_12LiveIntervalE\", \"llvm::LiveIntervals::isPartialRedef(llvm::SlotIndex, llvm::MachineOperand&, llvm::LiveInterval&)\"},\n    {\"_ZN4llvm13LiveIntervals24handleVirtualRegisterDefEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_9SlotIndexERNS_14MachineOperandEjRNS_12LiveIntervalE\", \"llvm::LiveIntervals::handleVirtualRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int, llvm::LiveInterval&)\"},\n    {\"_ZN4llvm13LiveIntervals25handlePhysicalRegisterDefEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_9SlotIndexERNS_14MachineOperandERNS_12LiveIntervalEPS4_\", \"llvm::LiveIntervals::handlePhysicalRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SlotIndex, llvm::MachineOperand&, llvm::LiveInterval&, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveIntervals17handleRegisterDefEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEENS_9SlotIndexERNS_14MachineOperandEj\", \"llvm::LiveIntervals::handleRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int)\"},\n    {\"_ZN4llvm13LiveIntervals20handleLiveInRegisterEPNS_17MachineBasicBlockENS_9SlotIndexERNS_12LiveIntervalEb\", \"llvm::LiveIntervals::handleLiveInRegister(llvm::MachineBasicBlock*, llvm::SlotIndex, llvm::LiveInterval&, bool)\"},\n    {\"_ZN4llvm13LiveIntervals14createIntervalEj\", \"llvm::LiveIntervals::createInterval(unsigned int)\"},\n    {\"_ZN4llvm13LiveIntervals11dupIntervalEPNS_12LiveIntervalE\", \"llvm::LiveIntervals::dupInterval(llvm::LiveInterval*)\"},\n    {\"_ZN4llvm13LiveIntervals12shrinkToUsesEPNS_12LiveIntervalE\", \"llvm::LiveIntervals::shrinkToUses(llvm::LiveInterval*)\"},\n    {\"_ZNK4llvm13LiveIntervals17getLastSplitPointERKNS_12LiveIntervalEPNS_17MachineBasicBlockE\", \"llvm::LiveIntervals::getLastSplitPoint(llvm::LiveInterval const&, llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm13LiveIntervals12addKillFlagsEv\", \"llvm::LiveIntervals::addKillFlags()\"},\n    {\"_ZNK4llvm13LiveIntervals19getReMatImplicitUseERKNS_12LiveIntervalEPNS_12MachineInstrE\", \"llvm::LiveIntervals::getReMatImplicitUse(llvm::LiveInterval const&, llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm13LiveIntervals18isValNoAvailableAtERKNS_12LiveIntervalEPNS_12MachineInstrENS_9SlotIndexE\", \"llvm::LiveIntervals::isValNoAvailableAt(llvm::LiveInterval const&, llvm::MachineInstr*, llvm::SlotIndex) const\"},\n    {\"_ZN4llvm13LiveIntervals18isReMaterializableERKNS_12LiveIntervalEPKNS_6VNInfoEPNS_12MachineInstrERKNS_15SmallVectorImplIPS1_EERb\", \"llvm::LiveIntervals::isReMaterializable(llvm::LiveInterval const&, llvm::VNInfo const*, llvm::MachineInstr*, llvm::SmallVectorImpl<llvm::LiveInterval*> const&, bool&)\"},\n    {\"_ZN4llvm13LiveIntervals18isReMaterializableERKNS_12LiveIntervalEPKNS_6VNInfoEPNS_12MachineInstrE\", \"llvm::LiveIntervals::isReMaterializable(llvm::LiveInterval const&, llvm::VNInfo const*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveIntervals18isReMaterializableERKNS_12LiveIntervalERKNS_15SmallVectorImplIPS1_EERb\", \"llvm::LiveIntervals::isReMaterializable(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::LiveInterval*> const&, bool&)\"},\n    {\"_ZN4llvm13LiveIntervals20tryFoldMemoryOperandERPNS_12MachineInstrERNS_10VirtRegMapES2_NS_9SlotIndexERNS_11SmallVectorIjLj2EEEbij\", \"llvm::LiveIntervals::tryFoldMemoryOperand(llvm::MachineInstr*&, llvm::VirtRegMap&, llvm::MachineInstr*, llvm::SlotIndex, llvm::SmallVector<unsigned int, 2u>&, bool, int, unsigned int)\"},\n    {\"_Z15FilterFoldedOpsPN4llvm12MachineInstrERNS_11SmallVectorIjLj2EEERjS4_\", \"FilterFoldedOps(llvm::MachineInstr*, llvm::SmallVector<unsigned int, 2u>&, unsigned int&, llvm::SmallVector<unsigned int, 2u>&)\"},\n    {\"_ZNK4llvm13LiveIntervals20canFoldMemoryOperandEPNS_12MachineInstrERNS_11SmallVectorIjLj2EEEb\", \"llvm::LiveIntervals::canFoldMemoryOperand(llvm::MachineInstr*, llvm::SmallVector<unsigned int, 2u>&, bool) const\"},\n    {\"_ZNK4llvm13LiveIntervals18intervalIsInOneMBBERKNS_12LiveIntervalE\", \"llvm::LiveIntervals::intervalIsInOneMBB(llvm::LiveInterval const&) const\"},\n    {\"_ZN4llvm13LiveIntervals18rewriteImplicitOpsERKNS_12LiveIntervalEPNS_12MachineInstrEjRNS_10VirtRegMapE\", \"llvm::LiveIntervals::rewriteImplicitOps(llvm::LiveInterval const&, llvm::MachineInstr*, unsigned int, llvm::VirtRegMap&)\"},\n    {\"_ZN4llvm13LiveIntervals27rewriteInstructionForSpillsERKNS_12LiveIntervalEPKNS_6VNInfoEbNS_9SlotIndexES7_PNS_12MachineInstrES9_S9_jibbbbRNS_10VirtRegMapEPKNS_19TargetRegisterClassERNS_11SmallVectorIiLj4EEEPKNS_15MachineLoopInfoERjjRbSM_RNS_8DenseMapIjjNS_12DenseMapInfoIjEESP_EERSt6vectorIPS1_SaIST_EE\", \"llvm::LiveIntervals::rewriteInstructionForSpills(llvm::LiveInterval const&, llvm::VNInfo const*, bool, llvm::SlotIndex, llvm::SlotIndex, llvm::MachineInstr*, llvm::MachineInstr*, llvm::MachineInstr*, unsigned int, int, bool, bool, bool, bool, llvm::VirtRegMap&, llvm::TargetRegisterClass const*, llvm::SmallVector<int, 4u>&, llvm::MachineLoopInfo const*, unsigned int&, unsigned int, bool&, bool&, llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >&, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> >&)\"},\n    {\"_ZNK4llvm13LiveIntervals20anyKillInMBBAfterIdxERKNS_12LiveIntervalEPKNS_6VNInfoEPNS_17MachineBasicBlockENS_9SlotIndexE\", \"llvm::LiveIntervals::anyKillInMBBAfterIdx(llvm::LiveInterval const&, llvm::VNInfo const*, llvm::MachineBasicBlock*, llvm::SlotIndex) const\"},\n    {\"_ZN4llvm13LiveIntervals28rewriteInstructionsForSpillsERKNS_12LiveIntervalEbRPKNS_9LiveRangeEPNS_12MachineInstrES9_jibbbbRNS_10VirtRegMapEPKNS_19TargetRegisterClassERNS_11SmallVectorIiLj4EEEPKNS_15MachineLoopInfoERNS_9BitVectorERNS_8DenseMapIjSt6vectorINS0_6SRInfoESaISP_EENS_12DenseMapInfoIjEENSS_ISR_EEEESM_SW_RNSN_IjjST_ST_EERSO_IPS1_SaISZ_EE\", \"llvm::LiveIntervals::rewriteInstructionsForSpills(llvm::LiveInterval const&, bool, llvm::LiveRange const*&, llvm::MachineInstr*, llvm::MachineInstr*, unsigned int, int, bool, bool, bool, bool, llvm::VirtRegMap&, llvm::TargetRegisterClass const*, llvm::SmallVector<int, 4u>&, llvm::MachineLoopInfo const*, llvm::BitVector&, llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >&, llvm::BitVector&, llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >&, llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >&, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> >&)\"},\n    {\"_ZN4llvm13LiveIntervals14getSpillWeightEbbj\", \"llvm::LiveIntervals::getSpillWeight(bool, bool, unsigned int)\"},\n    {\"_ZN4llvm13LiveIntervals16alsoFoldARestoreEiNS_9SlotIndexEjRNS_9BitVectorERNS_8DenseMapIjSt6vectorINS0_6SRInfoESaIS6_EENS_12DenseMapInfoIjEENS9_IS8_EEEE\", \"llvm::LiveIntervals::alsoFoldARestore(int, llvm::SlotIndex, unsigned int, llvm::BitVector&, llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >&)\"},\n    {\"_ZN4llvm13LiveIntervals16eraseRestoreInfoEiNS_9SlotIndexEjRNS_9BitVectorERNS_8DenseMapIjSt6vectorINS0_6SRInfoESaIS6_EENS_12DenseMapInfoIjEENS9_IS8_EEEE\", \"llvm::LiveIntervals::eraseRestoreInfo(int, llvm::SlotIndex, unsigned int, llvm::BitVector&, llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >&)\"},\n    {\"_ZN4llvm13LiveIntervals20handleSpilledImpDefsERKNS_12LiveIntervalERNS_10VirtRegMapEPKNS_19TargetRegisterClassERSt6vectorIPS1_SaISA_EE\", \"llvm::LiveIntervals::handleSpilledImpDefs(llvm::LiveInterval const&, llvm::VirtRegMap&, llvm::TargetRegisterClass const*, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> >&)\"},\n    {\"_ZN4llvm13LiveIntervals21normalizeSpillWeightsERSt6vectorIPNS_12LiveIntervalESaIS3_EE\", \"llvm::LiveIntervals::normalizeSpillWeights(std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> >&)\"},\n    {\"_ZN4llvm13LiveIntervals21addIntervalsForSpillsERKNS_12LiveIntervalERKNS_15SmallVectorImplIPS1_EEPKNS_15MachineLoopInfoERNS_10VirtRegMapE\", \"llvm::LiveIntervals::addIntervalsForSpills(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::LiveInterval*> const&, llvm::MachineLoopInfo const*, llvm::VirtRegMap&)\"},\n    {\"_ZNK4llvm13LiveIntervals22hasAllocatableSuperRegEj\", \"llvm::LiveIntervals::hasAllocatableSuperReg(unsigned int) const\"},\n    {\"_ZNK4llvm13LiveIntervals20getRepresentativeRegEj\", \"llvm::LiveIntervals::getRepresentativeReg(unsigned int) const\"},\n    {\"_ZNK4llvm13LiveIntervals26getNumConflictsWithPhysRegERKNS_12LiveIntervalEj\", \"llvm::LiveIntervals::getNumConflictsWithPhysReg(llvm::LiveInterval const&, unsigned int) const\"},\n    {\"_ZN4llvm13LiveIntervals29spillPhysRegAroundRegDefsUsesERKNS_12LiveIntervalEjRNS_10VirtRegMapE\", \"llvm::LiveIntervals::spillPhysRegAroundRegDefsUses(llvm::LiveInterval const&, unsigned int, llvm::VirtRegMap&)\"},\n    {\"_ZN4llvm13LiveIntervals24addLiveRangeToEndOfBlockEjPNS_12MachineInstrE\", \"llvm::LiveIntervals::addLiveRangeToEndOfBlock(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111RewriteInfoESt6vectorIS3_SaIS3_EEEElNS2_18RewriteInfoCompareEEvT_SA_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, long, (anonymous namespace)::RewriteInfoCompare>(__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, long, (anonymous namespace)::RewriteInfoCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111RewriteInfoESt6vectorIS3_SaIS3_EEEENS2_18RewriteInfoCompareEEvT_SA_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, (anonymous namespace)::RewriteInfoCompare>(__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, (anonymous namespace)::RewriteInfoCompare)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111RewriteInfoESt6vectorIS3_SaIS3_EEEElS3_NS2_18RewriteInfoCompareEEvT_T0_SB_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, long, (anonymous namespace)::RewriteInfo, (anonymous namespace)::RewriteInfoCompare>(__gnu_cxx::__normal_iterator<(anonymous namespace)::RewriteInfo*, std::vector<(anonymous namespace)::RewriteInfo, std::allocator<(anonymous namespace)::RewriteInfo> > >, long, long, (anonymous namespace)::RewriteInfo, (anonymous namespace)::RewriteInfoCompare)\"},\n    {\"_ZN4llvm13LiveIntervals19getOrCreateIntervalEj\", \"llvm::LiveIntervals::getOrCreateInterval(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9LiveRangeEE4swapERS2_\", \"llvm::SmallVectorImpl<llvm::LiveRange>::swap(llvm::SmallVectorImpl<llvm::LiveRange>&)\"},\n    {\"_ZNK4llvm13LiveIntervals13isLiveInToMBBERKNS_12LiveIntervalEPKNS_17MachineBasicBlockE\", \"llvm::LiveIntervals::isLiveInToMBB(llvm::LiveInterval const&, llvm::MachineBasicBlock const*) const\"},\n    {\"_ZN4llvm10VirtRegMap16transferSpillPtsEPNS_12MachineInstrES2_\", \"llvm::VirtRegMap::transferSpillPts(llvm::MachineInstr*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap18transferRestorePtsEPNS_12MachineInstrES2_\", \"llvm::VirtRegMap::transferRestorePts(llvm::MachineInstr*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap23transferEmergencySpillsEPNS_12MachineInstrES2_\", \"llvm::VirtRegMap::transferEmergencySpills(llvm::MachineInstr*, llvm::MachineInstr*)\"},\n    {\"_ZNK4llvm11SlotIndexes19getMBBCoveringRangeENS_9SlotIndexES1_\", \"llvm::SlotIndexes::getMBBCoveringRange(llvm::SlotIndex, llvm::SlotIndex) const\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorINS_13LiveIntervals6SRInfoESaIS3_EENS_12DenseMapInfoIjEENS6_IS5_EEE6insertERKSt4pairIjS5_E\", \"llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >::insert(std::pair<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_12MachineInstrEE6resizeEjRKS2_\", \"llvm::SmallVectorImpl<llvm::MachineInstr*>::resize(unsigned int, llvm::MachineInstr* const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIiE6resizeEjRKi\", \"llvm::SmallVectorImpl<int>::resize(unsigned int, int const&)\"},\n    {\"_ZN4llvm10VirtRegMap13addSpillPointEjbPNS_12MachineInstrE\", \"llvm::VirtRegMap::addSpillPoint(unsigned int, bool, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap15addRestorePointEjPNS_12MachineInstrE\", \"llvm::VirtRegMap::addRestorePoint(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap17addEmergencySpillEjPNS_12MachineInstrE\", \"llvm::VirtRegMap::addEmergencySpill(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveIntervalsD1Ev\", \"llvm::LiveIntervals::~LiveIntervals()\"},\n    {\"_ZN4llvm13LiveIntervalsD0Ev\", \"llvm::LiveIntervals::~LiveIntervals()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorINS_13LiveIntervals6SRInfoESaIS3_EENS_12DenseMapInfoIjEENS6_IS5_EEE16FindAndConstructERKj\", \"llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >::FindAndConstruct(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorINS_13LiveIntervals6SRInfoESaIS3_EENS_12DenseMapInfoIjEENS6_IS5_EEE16InsertIntoBucketERKjRKS5_PSt4pairIjS5_E\", \"llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >::InsertIntoBucket(unsigned int const&, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > const&, std::pair<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorINS_13LiveIntervals6SRInfoESaIS3_EENS_12DenseMapInfoIjEENS6_IS5_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm13LiveIntervals6SRInfoESaIS2_EEC2ERKS4_\", \"std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >::vector(std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm13LiveIntervals6SRInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LiveIntervals::SRInfo*, std::vector<llvm::LiveIntervals::SRInfo, std::allocator<llvm::LiveIntervals::SRInfo> > >, llvm::LiveIntervals::SRInfo const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12LiveIntervalENS_12DenseMapInfoIjEENS3_IS2_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, llvm::LiveInterval*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::LiveInterval*> >::shrink_and_clear()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIjSaIjEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > > >::_M_insert_unique(std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIjSaIjEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE14_M_create_nodeERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > > >::_M_create_node(std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIjSaIjEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIjbESaIS1_EEC2ERKS3_\", \"std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > >::vector(std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIS3_IjbESaIS6_EEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > > >::_M_insert_unique(std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIjbESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, bool>*, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > >, std::pair<unsigned int, bool> const&)\"},\n    {\"_ZN4llvm11SlotIndexes25replaceMachineInstrInMapsEPNS_12MachineInstrES2_\", \"llvm::SlotIndexes::replaceMachineInstrInMaps(llvm::MachineInstr*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12LiveIntervalENS_12DenseMapInfoIjEENS3_IS2_EEE6insertERKSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::LiveInterval*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::LiveInterval*> >::insert(std::pair<unsigned int, llvm::LiveInterval*> const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12LiveIntervalENS_12DenseMapInfoIjEENS3_IS2_EEE16InsertIntoBucketERKjRKS2_PSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::LiveInterval*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::LiveInterval*> >::InsertIntoBucket(unsigned int const&, llvm::LiveInterval* const&, std::pair<unsigned int, llvm::LiveInterval*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12LiveIntervalENS_12DenseMapInfoIjEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::LiveInterval*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::LiveInterval*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_13LiveIntervalsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LiveIntervals>()\"},\n    {\"_ZN4llvm13LiveIntervalsC2Ev\", \"llvm::LiveIntervals::LiveIntervals()\"},\n    {\"_ZN4llvm13LiveRangeEdit6createERNS_19MachineRegisterInfoERNS_13LiveIntervalsERNS_10VirtRegMapE\", \"llvm::LiveRangeEdit::create(llvm::MachineRegisterInfo&, llvm::LiveIntervals&, llvm::VirtRegMap&)\"},\n    {\"_ZN4llvm13LiveRangeEdit14scanRemattableERNS_13LiveIntervalsERKNS_15TargetInstrInfoEPNS_13AliasAnalysisE\", \"llvm::LiveRangeEdit::scanRemattable(llvm::LiveIntervals&, llvm::TargetInstrInfo const&, llvm::AliasAnalysis*)\"},\n    {\"_ZN4llvm13LiveRangeEdit19anyRematerializableERNS_13LiveIntervalsERKNS_15TargetInstrInfoEPNS_13AliasAnalysisE\", \"llvm::LiveRangeEdit::anyRematerializable(llvm::LiveIntervals&, llvm::TargetInstrInfo const&, llvm::AliasAnalysis*)\"},\n    {\"_ZN4llvm13LiveRangeEdit18allUsesAvailableAtEPKNS_12MachineInstrENS_9SlotIndexES4_RNS_13LiveIntervalsE\", \"llvm::LiveRangeEdit::allUsesAvailableAt(llvm::MachineInstr const*, llvm::SlotIndex, llvm::SlotIndex, llvm::LiveIntervals&)\"},\n    {\"_ZN4llvm13LiveRangeEdit18canRematerializeAtERNS0_5RematENS_9SlotIndexEbRNS_13LiveIntervalsE\", \"llvm::LiveRangeEdit::canRematerializeAt(llvm::LiveRangeEdit::Remat&, llvm::SlotIndex, bool, llvm::LiveIntervals&)\"},\n    {\"_ZN4llvm13LiveRangeEdit15rematerializeAtERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjRKNS0_5RematERNS_13LiveIntervalsERKNS_15TargetInstrInfoERKNS_18TargetRegisterInfoE\", \"llvm::LiveRangeEdit::rematerializeAt(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, llvm::LiveRangeEdit::Remat const&, llvm::LiveIntervals&, llvm::TargetInstrInfo const&, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm24initializeLiveStacksPassERNS_12PassRegistryE\", \"llvm::initializeLiveStacksPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm10LiveStacks16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LiveStacks::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm10LiveStacks13releaseMemoryEv\", \"llvm::LiveStacks::releaseMemory()\"},\n    {\"_ZN4llvm10LiveStacks20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::LiveStacks::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm10LiveStacks19getOrCreateIntervalEiPKNS_19TargetRegisterClassE\", \"llvm::LiveStacks::getOrCreateInterval(int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZNK4llvm10LiveStacks5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::LiveStacks::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZN4llvm10LiveStacksD1Ev\", \"llvm::LiveStacks::~LiveStacks()\"},\n    {\"_ZN4llvm10LiveStacksD0Ev\", \"llvm::LiveStacks::~LiveStacks()\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm19TargetRegisterClassEESt10_Select1stIS6_ESt4lessIiESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<int, std::pair<int const, llvm::TargetRegisterClass const*>, std::_Select1st<std::pair<int const, llvm::TargetRegisterClass const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::TargetRegisterClass const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, llvm::TargetRegisterClass const*> >, std::pair<int const, llvm::TargetRegisterClass const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm19TargetRegisterClassEESt10_Select1stIS6_ESt4lessIiESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<int, std::pair<int const, llvm::TargetRegisterClass const*>, std::_Select1st<std::pair<int const, llvm::TargetRegisterClass const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::TargetRegisterClass const*> > >::_M_insert_unique(std::pair<int const, llvm::TargetRegisterClass const*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_6VNInfoEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::VNInfo*>::operator=(llvm::SmallVectorImpl<llvm::VNInfo*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9LiveRangeEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::LiveRange>::operator=(llvm::SmallVectorImpl<llvm::LiveRange> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiN4llvm12LiveIntervalEESt10_Select1stIS4_ESt4lessIiESaIS4_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS4_ERKS4_\", \"std::_Rb_tree<int, std::pair<int const, llvm::LiveInterval>, std::_Select1st<std::pair<int const, llvm::LiveInterval> >, std::less<int>, std::allocator<std::pair<int const, llvm::LiveInterval> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, llvm::LiveInterval> >, std::pair<int const, llvm::LiveInterval> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiN4llvm12LiveIntervalEESt10_Select1stIS4_ESt4lessIiESaIS4_EE16_M_insert_uniqueERKS4_\", \"std::_Rb_tree<int, std::pair<int const, llvm::LiveInterval>, std::_Select1st<std::pair<int const, llvm::LiveInterval> >, std::less<int>, std::allocator<std::pair<int const, llvm::LiveInterval> > >::_M_insert_unique(std::pair<int const, llvm::LiveInterval> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiN4llvm12LiveIntervalEESt10_Select1stIS4_ESt4lessIiESaIS4_EE14_M_create_nodeERKS4_\", \"std::_Rb_tree<int, std::pair<int const, llvm::LiveInterval>, std::_Select1st<std::pair<int const, llvm::LiveInterval> >, std::less<int>, std::allocator<std::pair<int const, llvm::LiveInterval> > >::_M_create_node(std::pair<int const, llvm::LiveInterval> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm19TargetRegisterClassEESt10_Select1stIS6_ESt4lessIiESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<int, std::pair<int const, llvm::TargetRegisterClass const*>, std::_Select1st<std::pair<int const, llvm::TargetRegisterClass const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::TargetRegisterClass const*> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, llvm::TargetRegisterClass const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiN4llvm12LiveIntervalEESt10_Select1stIS4_ESt4lessIiESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<int, std::pair<int const, llvm::LiveInterval>, std::_Select1st<std::pair<int const, llvm::LiveInterval> >, std::less<int>, std::allocator<std::pair<int const, llvm::LiveInterval> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, llvm::LiveInterval> >*)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_10LiveStacksEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LiveStacks>()\"},\n    {\"_ZN4llvm27initializeLiveVariablesPassERNS_12PassRegistryE\", \"llvm::initializeLiveVariablesPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm13LiveVariables16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LiveVariables::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm13LiveVariables7VarInfo8findKillEPKNS_17MachineBasicBlockE\", \"llvm::LiveVariables::VarInfo::findKill(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm13LiveVariables7VarInfo4dumpEv\", \"llvm::LiveVariables::VarInfo::dump() const\"},\n    {\"_ZN4llvm13LiveVariables10getVarInfoEj\", \"llvm::LiveVariables::getVarInfo(unsigned int)\"},\n    {\"_ZN4llvm13LiveVariables23MarkVirtRegAliveInBlockERNS0_7VarInfoEPNS_17MachineBasicBlockES4_RSt6vectorIS4_SaIS4_EE\", \"llvm::LiveVariables::MarkVirtRegAliveInBlock(llvm::LiveVariables::VarInfo&, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> >&)\"},\n    {\"_ZN4llvm13LiveVariables23MarkVirtRegAliveInBlockERNS0_7VarInfoEPNS_17MachineBasicBlockES4_\", \"llvm::LiveVariables::MarkVirtRegAliveInBlock(llvm::LiveVariables::VarInfo&, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm13LiveVariables16HandleVirtRegUseEjPNS_17MachineBasicBlockEPNS_12MachineInstrE\", \"llvm::LiveVariables::HandleVirtRegUse(unsigned int, llvm::MachineBasicBlock*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables16HandleVirtRegDefEjPNS_12MachineInstrE\", \"llvm::LiveVariables::HandleVirtRegDef(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables18FindLastPartialDefEjRNS_8SmallSetIjLj4EEE\", \"llvm::LiveVariables::FindLastPartialDef(unsigned int, llvm::SmallSet<unsigned int, 4u>&)\"},\n    {\"_ZN4llvm13LiveVariables16HandlePhysRegUseEjPNS_12MachineInstrE\", \"llvm::LiveVariables::HandlePhysRegUse(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables20FindLastRefOrPartRefEj\", \"llvm::LiveVariables::FindLastRefOrPartRef(unsigned int)\"},\n    {\"_ZN4llvm13LiveVariables17HandlePhysRegKillEjPNS_12MachineInstrE\", \"llvm::LiveVariables::HandlePhysRegKill(unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables16HandlePhysRegDefEjPNS_12MachineInstrERNS_11SmallVectorIjLj4EEE\", \"llvm::LiveVariables::HandlePhysRegDef(unsigned int, llvm::MachineInstr*, llvm::SmallVector<unsigned int, 4u>&)\"},\n    {\"_ZN4llvm13LiveVariables17UpdatePhysRegDefsEPNS_12MachineInstrERNS_11SmallVectorIjLj4EEE\", \"llvm::LiveVariables::UpdatePhysRegDefs(llvm::MachineInstr*, llvm::SmallVector<unsigned int, 4u>&)\"},\n    {\"_ZN4llvm13LiveVariables20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::LiveVariables::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm13LiveVariables15analyzePHINodesERKNS_15MachineFunctionE\", \"llvm::LiveVariables::analyzePHINodes(llvm::MachineFunction const&)\"},\n    {\"_ZN4llvm13LiveVariables22replaceKillInstructionEjPNS_12MachineInstrES2_\", \"llvm::LiveVariables::replaceKillInstruction(unsigned int, llvm::MachineInstr*, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables28removeVirtualRegistersKilledEPNS_12MachineInstrE\", \"llvm::LiveVariables::removeVirtualRegistersKilled(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm13LiveVariables7VarInfo8isLiveInERKNS_17MachineBasicBlockEjRNS_19MachineRegisterInfoE\", \"llvm::LiveVariables::VarInfo::isLiveIn(llvm::MachineBasicBlock const&, unsigned int, llvm::MachineRegisterInfo&)\"},\n    {\"_ZN4llvm13LiveVariables9isLiveOutEjRKNS_17MachineBasicBlockE\", \"llvm::LiveVariables::isLiveOut(unsigned int, llvm::MachineBasicBlock const&)\"},\n    {\"_ZN4llvm13LiveVariables11addNewBlockEPNS_17MachineBasicBlockES2_S2_\", \"llvm::LiveVariables::addNewBlock(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE4testEj\", \"llvm::SparseBitVector<128u>::test(unsigned int)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE3setEj\", \"llvm::SparseBitVector<128u>::set(unsigned int)\"},\n    {\"_ZN4llvm8SmallSetIjLj8EE5eraseERKj\", \"llvm::SmallSet<unsigned int, 8u>::erase(unsigned int const&)\"},\n    {\"_ZN4llvm8SmallSetIjLj32EE6insertERKj\", \"llvm::SmallSet<unsigned int, 32u>::insert(unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_12DenseMapInfoIS2_EENS3_IjEEE6insertERKSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<llvm::MachineInstr*, unsigned int> const&)\"},\n    {\"_ZN4llvm13LiveVariablesD1Ev\", \"llvm::LiveVariables::~LiveVariables()\"},\n    {\"_ZN4llvm13LiveVariablesD0Ev\", \"llvm::LiveVariables::~LiveVariables()\"},\n    {\"_ZN4llvm13LiveVariables13releaseMemoryEv\", \"llvm::LiveVariables::releaseMemory()\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEElEvT_SA_T0_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, long>(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, long)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEEEvT_SA_SA_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZSt9sort_heapIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::sort_heap<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::make_heap<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm10IndexedMapINS_13LiveVariables7VarInfoENS_20VirtReg2IndexFunctorEE6resizeEm\", \"llvm::IndexedMap<llvm::LiveVariables::VarInfo, llvm::VirtReg2IndexFunctor>::resize(unsigned long)\"},\n    {\"_ZNSt6vectorIN4llvm13LiveVariables7VarInfoESaIS2_EE6resizeEmS2_\", \"std::vector<llvm::LiveVariables::VarInfo, std::allocator<llvm::LiveVariables::VarInfo> >::resize(unsigned long, llvm::LiveVariables::VarInfo)\"},\n    {\"_ZN4llvm6iplistINS_22SparseBitVectorElementILj128EEENS_12ilist_traitsIS2_EEED2Ev\", \"llvm::iplist<llvm::SparseBitVectorElement<128u>, llvm::ilist_traits<llvm::SparseBitVectorElement<128u> > >::~iplist()\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EEC2ERKS1_\", \"llvm::SparseBitVector<128u>::SparseBitVector(llvm::SparseBitVector<128u> const&)\"},\n    {\"_ZN4llvm5ilistINS_22SparseBitVectorElementILj128EEEE9push_backERKS2_\", \"llvm::ilist<llvm::SparseBitVectorElement<128u> >::push_back(llvm::SparseBitVectorElement<128u> const&)\"},\n    {\"_ZNSt6vectorIN4llvm13LiveVariables7VarInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::LiveVariables::VarInfo, std::allocator<llvm::LiveVariables::VarInfo> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::LiveVariables::VarInfo*, std::vector<llvm::LiveVariables::VarInfo, std::allocator<llvm::LiveVariables::VarInfo> > >, unsigned long, llvm::LiveVariables::VarInfo const&)\"},\n    {\"_ZSt26__uninitialized_fill_n_auxIPN4llvm13LiveVariables7VarInfoEmS2_EvT_T0_RKT1_St12__false_type\", \"void std::__uninitialized_fill_n_aux<llvm::LiveVariables::VarInfo*, unsigned long, llvm::LiveVariables::VarInfo>(llvm::LiveVariables::VarInfo*, unsigned long, llvm::LiveVariables::VarInfo const&, std::__false_type)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EEaSERKS1_\", \"llvm::SparseBitVector<128u>::operator=(llvm::SparseBitVector<128u> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EEaSERKS4_\", \"std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >::operator=(std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > const&)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE23SparseBitVectorIterator20AdvanceToNextNonZeroEv\", \"llvm::SparseBitVector<128u>::SparseBitVectorIterator::AdvanceToNextNonZero()\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE23SparseBitVectorIteratorC2EPKS1_b\", \"llvm::SparseBitVector<128u>::SparseBitVectorIterator::SparseBitVectorIterator(llvm::SparseBitVector<128u> const*, bool)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE14FindLowerBoundEj\", \"llvm::SparseBitVector<128u>::FindLowerBound(unsigned int)\"},\n    {\"_ZN4llvm13LiveVariablesD2Ev\", \"llvm::LiveVariables::~LiveVariables()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_13LiveVariablesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LiveVariables>()\"},\n    {\"_ZN4llvm13LiveVariablesC2Ev\", \"llvm::LiveVariables::LiveVariables()\"},\n    {\"_ZN4llvm34createLocalStackSlotAllocationPassEv\", \"llvm::createLocalStackSlotAllocationPass()\"},\n    {\"_ZN12_GLOBAL__N_118LocalStackSlotPassD1Ev\", \"(anonymous namespace)::LocalStackSlotPass::~LocalStackSlotPass()\"},\n    {\"_ZN12_GLOBAL__N_118LocalStackSlotPassD0Ev\", \"(anonymous namespace)::LocalStackSlotPass::~LocalStackSlotPass()\"},\n    {\"_ZNK12_GLOBAL__N_118LocalStackSlotPass11getPassNameEv\", \"(anonymous namespace)::LocalStackSlotPass::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_118LocalStackSlotPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LocalStackSlotPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118LocalStackSlotPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::LocalStackSlotPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_18FrameRefEEEiPKvS4_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::FrameRef>(void const*, void const*)\"},\n    {\"_ZN12_GLOBAL__N_118LocalStackSlotPass17AdjustStackOffsetEPN4llvm16MachineFrameInfoEiRxbRj\", \"(anonymous namespace)::LocalStackSlotPass::AdjustStackOffset(llvm::MachineFrameInfo*, int, long long&, bool, unsigned int&)\"},\n    {\"_ZN4llvm15SmallVectorImplIxE6resizeEj\", \"llvm::SmallVectorImpl<long long>::resize(unsigned int)\"},\n    {\"_ZN4llvm22createLowerSubregsPassEv\", \"llvm::createLowerSubregsPass()\"},\n    {\"_ZN12_GLOBAL__N_127LowerSubregsInstructionPassD1Ev\", \"(anonymous namespace)::LowerSubregsInstructionPass::~LowerSubregsInstructionPass()\"},\n    {\"_ZN12_GLOBAL__N_127LowerSubregsInstructionPassD0Ev\", \"(anonymous namespace)::LowerSubregsInstructionPass::~LowerSubregsInstructionPass()\"},\n    {\"_ZNK12_GLOBAL__N_127LowerSubregsInstructionPass11getPassNameEv\", \"(anonymous namespace)::LowerSubregsInstructionPass::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_127LowerSubregsInstructionPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LowerSubregsInstructionPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_127LowerSubregsInstructionPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::LowerSubregsInstructionPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm17MachineBasicBlockC1ERNS_15MachineFunctionEPKNS_10BasicBlockE\", \"llvm::MachineBasicBlock::MachineBasicBlock(llvm::MachineFunction&, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17MachineBasicBlockC2ERNS_15MachineFunctionEPKNS_10BasicBlockE\", \"llvm::MachineBasicBlock::MachineBasicBlock(llvm::MachineFunction&, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17MachineBasicBlockD1Ev\", \"llvm::MachineBasicBlock::~MachineBasicBlock()\"},\n    {\"_ZN4llvm17MachineBasicBlockD2Ev\", \"llvm::MachineBasicBlock::~MachineBasicBlock()\"},\n    {\"_ZNK4llvm17MachineBasicBlock9getSymbolEv\", \"llvm::MachineBasicBlock::getSymbol() const\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamERKNS_17MachineBasicBlockE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::MachineBasicBlock const&)\"},\n    {\"_ZNK4llvm17MachineBasicBlock5printERNS_11raw_ostreamEPNS_11SlotIndexesE\", \"llvm::MachineBasicBlock::print(llvm::raw_ostream&, llvm::SlotIndexes*) const\"},\n    {\"_ZN4llvm12ilist_traitsINS_17MachineBasicBlockEE13addNodeToListEPS1_\", \"llvm::ilist_traits<llvm::MachineBasicBlock>::addNodeToList(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12ilist_traitsINS_17MachineBasicBlockEE18removeNodeFromListEPS1_\", \"llvm::ilist_traits<llvm::MachineBasicBlock>::removeNodeFromList(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12ilist_traitsINS_12MachineInstrEE13addNodeToListEPS1_\", \"llvm::ilist_traits<llvm::MachineInstr>::addNodeToList(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm12ilist_traitsINS_12MachineInstrEE18removeNodeFromListEPS1_\", \"llvm::ilist_traits<llvm::MachineInstr>::removeNodeFromList(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm12ilist_traitsINS_12MachineInstrEE21transferNodesFromListERS2_NS_14ilist_iteratorIS1_EES5_\", \"llvm::ilist_traits<llvm::MachineInstr>::transferNodesFromList(llvm::ilist_traits<llvm::MachineInstr>&, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm12ilist_traitsINS_12MachineInstrEE10deleteNodeEPS1_\", \"llvm::ilist_traits<llvm::MachineInstr>::deleteNode(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm17MachineBasicBlock14getFirstNonPHIEv\", \"llvm::MachineBasicBlock::getFirstNonPHI()\"},\n    {\"_ZN4llvm17MachineBasicBlock17SkipPHIsAndLabelsENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::MachineBasicBlock::SkipPHIsAndLabels(llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm17MachineBasicBlock18getFirstTerminatorEv\", \"llvm::MachineBasicBlock::getFirstTerminator()\"},\n    {\"_ZN4llvm17MachineBasicBlock20getLastNonDebugInstrEv\", \"llvm::MachineBasicBlock::getLastNonDebugInstr()\"},\n    {\"_ZNK4llvm17MachineBasicBlock22getLandingPadSuccessorEv\", \"llvm::MachineBasicBlock::getLandingPadSuccessor() const\"},\n    {\"_ZNK4llvm17MachineBasicBlock4dumpEv\", \"llvm::MachineBasicBlock::dump() const\"},\n    {\"_ZNK4llvm17MachineBasicBlock7getNameEv\", \"llvm::MachineBasicBlock::getName() const\"},\n    {\"_ZN4llvm17MachineBasicBlock12removeLiveInEj\", \"llvm::MachineBasicBlock::removeLiveIn(unsigned int)\"},\n    {\"_ZNK4llvm17MachineBasicBlock8isLiveInEj\", \"llvm::MachineBasicBlock::isLiveIn(unsigned int) const\"},\n    {\"_ZN4llvm17MachineBasicBlock10moveBeforeEPS0_\", \"llvm::MachineBasicBlock::moveBefore(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock9moveAfterEPS0_\", \"llvm::MachineBasicBlock::moveAfter(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock16updateTerminatorEv\", \"llvm::MachineBasicBlock::updateTerminator()\"},\n    {\"_ZNK4llvm17MachineBasicBlock17isLayoutSuccessorEPKS0_\", \"llvm::MachineBasicBlock::isLayoutSuccessor(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZN4llvm17MachineBasicBlock12addSuccessorEPS0_\", \"llvm::MachineBasicBlock::addSuccessor(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock14addPredecessorEPS0_\", \"llvm::MachineBasicBlock::addPredecessor(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock15removeSuccessorEPS0_\", \"llvm::MachineBasicBlock::removeSuccessor(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock17removePredecessorEPS0_\", \"llvm::MachineBasicBlock::removePredecessor(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock15removeSuccessorEN9__gnu_cxx17__normal_iteratorIPPS0_St6vectorIS3_SaIS3_EEEE\", \"llvm::MachineBasicBlock::removeSuccessor(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZN4llvm17MachineBasicBlock18transferSuccessorsEPS0_\", \"llvm::MachineBasicBlock::transferSuccessors(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock31transferSuccessorsAndUpdatePHIsEPS0_\", \"llvm::MachineBasicBlock::transferSuccessorsAndUpdatePHIs(llvm::MachineBasicBlock*)\"},\n    {\"_ZNK4llvm17MachineBasicBlock11isSuccessorEPKS0_\", \"llvm::MachineBasicBlock::isSuccessor(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZN4llvm17MachineBasicBlock14canFallThroughEv\", \"llvm::MachineBasicBlock::canFallThrough()\"},\n    {\"_ZN4llvm17MachineBasicBlock17SplitCriticalEdgeEPS0_PNS_4PassE\", \"llvm::MachineBasicBlock::SplitCriticalEdge(llvm::MachineBasicBlock*, llvm::Pass*)\"},\n    {\"_ZN4llvm17MachineBasicBlock22ReplaceUsesOfBlockWithEPS0_S1_\", \"llvm::MachineBasicBlock::ReplaceUsesOfBlockWith(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineBasicBlock16removeFromParentEv\", \"llvm::MachineBasicBlock::removeFromParent()\"},\n    {\"_ZN4llvm17MachineBasicBlock15eraseFromParentEv\", \"llvm::MachineBasicBlock::eraseFromParent()\"},\n    {\"_ZN4llvm17MachineBasicBlock20CorrectExtraCFGEdgesEPS0_S1_b\", \"llvm::MachineBasicBlock::CorrectExtraCFGEdges(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, bool)\"},\n    {\"_ZN4llvm17MachineBasicBlock12findDebugLocERNS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::MachineBasicBlock::findDebugLoc(llvm::ilist_iterator<llvm::MachineInstr>&)\"},\n    {\"_ZN4llvm14WriteAsOperandERNS_11raw_ostreamEPKNS_17MachineBasicBlockEb\", \"llvm::WriteAsOperand(llvm::raw_ostream&, llvm::MachineBasicBlock const*, bool)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE19addBasicBlockToLoopEPS1_RNS_12LoopInfoBaseIS1_S2_EE\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::addBasicBlockToLoop(llvm::MachineBasicBlock*, llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_11MachineLoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineLoop*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineLoop*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::MachineLoop* const&, std::pair<llvm::MachineBasicBlock*, llvm::MachineLoop*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_11MachineLoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineLoop*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineLoop*> >::grow(unsigned int)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPKPN4llvm17MachineBasicBlockESt6vectorIS4_SaIS4_EEEEPKS3_ET_SD_SD_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock* const*, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock* const*, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, llvm::MachineBasicBlock const*>(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock* const*, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock* const*, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, llvm::MachineBasicBlock const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPKjSt6vectorIjSaIjEEEEjET_S8_S8_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<unsigned int const*, std::vector<unsigned int, std::allocator<unsigned int> > > std::__find<__gnu_cxx::__normal_iterator<unsigned int const*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int>(__gnu_cxx::__normal_iterator<unsigned int const*, std::vector<unsigned int, std::allocator<unsigned int> > >, __gnu_cxx::__normal_iterator<unsigned int const*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int const&, std::random_access_iterator_tag)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEEjET_S7_S7_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > > std::__find<__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int>(__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, __gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm15DomTreeNodeBaseINS0_17MachineBasicBlockEEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm15DomTreeNodeBaseINS2_17MachineBasicBlockEEESt6vectorIS6_SaIS6_EEEES6_ET_SC_SC_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>(__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > >, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&, std::pair<llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEEN9__gnu_cxx17__normal_iteratorIPS5_St6vectorIS5_SaIS5_EEEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm6iplistINS_17MachineBasicBlockENS_12ilist_traitsIS1_EEE6insertENS_14ilist_iteratorIS1_EEPS1_\", \"llvm::iplist<llvm::MachineBasicBlock, llvm::ilist_traits<llvm::MachineBasicBlock> >::insert(llvm::ilist_iterator<llvm::MachineBasicBlock>, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm24initializeMachineCSEPassERNS_12PassRegistryE\", \"llvm::initializeMachineCSEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm20createMachineCSEPassEv\", \"llvm::createMachineCSEPass()\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSEC1Ev\", \"(anonymous namespace)::MachineCSE::MachineCSE()\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSED1Ev\", \"(anonymous namespace)::MachineCSE::~MachineCSE()\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSED0Ev\", \"(anonymous namespace)::MachineCSE::~MachineCSE()\"},\n    {\"_ZNK12_GLOBAL__N_110MachineCSE16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineCSE::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSE13releaseMemoryEv\", \"(anonymous namespace)::MachineCSE::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSE20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineCSE::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSE9ExitScopeEPN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::MachineCSE::ExitScope(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_110MachineCSEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::MachineCSE>()\"},\n    {\"_ZN4llvm20ScopedHashTableScopeIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_jEELm32ELm8EEEED2Ev\", \"llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >::~ScopedHashTableScope()\"},\n    {\"_ZNK4llvm8DenseMapIPNS_12MachineInstrEPNS_18ScopedHashTableValIS2_jEENS_27MachineInstrExpressionTraitENS_12DenseMapInfoIS5_EEE15LookupBucketForERKS2_RPSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*> >::LookupBucketFor(llvm::MachineInstr* const&, std::pair<llvm::MachineInstr*, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*>*&) const\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPNS_18ScopedHashTableValIS2_jEENS_27MachineInstrExpressionTraitENS_12DenseMapInfoIS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*> >::InsertIntoBucket(llvm::MachineInstr* const&, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>* const&, std::pair<llvm::MachineInstr*, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPNS_18ScopedHashTableValIS2_jEENS_27MachineInstrExpressionTraitENS_12DenseMapInfoIS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15ScopedHashTableIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_jEELm32ELm8EEEE6insertERKS2_RKj\", \"llvm::ScopedHashTable<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >::insert(llvm::MachineInstr* const&, unsigned int const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_20ScopedHashTableScopeIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS5_jEELm32ELm8EEEEENS_12DenseMapInfoIS2_EENSE_ISD_EEE16InsertIntoBucketERKS2_RKSD_PSt4pairIS2_SD_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >* const&, std::pair<llvm::MachineBasicBlock*, llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_20ScopedHashTableScopeIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS5_jEELm32ELm8EEEEENS_12DenseMapInfoIS2_EENSE_ISD_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEES4_NS_12DenseMapInfoIS4_EES6_E16InsertIntoBucketERKS4_S9_PSt4pairIS4_S4_E\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::InsertIntoBucket(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&, std::pair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEES4_NS_12DenseMapInfoIS4_EES6_E4growEj\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, unsigned int, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>* const&, unsigned int const&, std::pair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, unsigned int, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_20ScopedHashTableScopeIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS5_jEELm32ELm8EEEEENS_12DenseMapInfoIS2_EENSE_ISD_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::ScopedHashTableScope<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm15ScopedHashTableIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_jEELm32ELm8EEEED2Ev\", \"llvm::ScopedHashTable<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::MachineInstr*, unsigned int>, 32ul, 8ul> >::~ScopedHashTable()\"},\n    {\"_ZN4llvm12PrintDomTreeINS_17MachineBasicBlockEEEvPKNS_15DomTreeNodeBaseIT_EERNS_11raw_ostreamEj\", \"void llvm::PrintDomTree<llvm::MachineBasicBlock>(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*, llvm::raw_ostream&, unsigned int)\"},\n    {\"_ZN4llvm34initializeMachineDominatorTreePassERNS_12PassRegistryE\", \"llvm::initializeMachineDominatorTreePass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm20MachineDominatorTree16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MachineDominatorTree::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm20MachineDominatorTree20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::MachineDominatorTree::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm20MachineDominatorTreeC1Ev\", \"llvm::MachineDominatorTree::MachineDominatorTree()\"},\n    {\"_ZN4llvm20MachineDominatorTreeC2Ev\", \"llvm::MachineDominatorTree::MachineDominatorTree()\"},\n    {\"_ZN4llvm20MachineDominatorTreeD0Ev\", \"llvm::MachineDominatorTree::~MachineDominatorTree()\"},\n    {\"_ZN4llvm20MachineDominatorTreeD1Ev\", \"llvm::MachineDominatorTree::~MachineDominatorTree()\"},\n    {\"_ZN4llvm20MachineDominatorTreeD2Ev\", \"llvm::MachineDominatorTree::~MachineDominatorTree()\"},\n    {\"_ZN4llvm20MachineDominatorTree13releaseMemoryEv\", \"llvm::MachineDominatorTree::releaseMemory()\"},\n    {\"_ZNK4llvm20MachineDominatorTree5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::MachineDominatorTree::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE5beginEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::begin()\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE3endEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::end()\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE5beginEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::begin() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE3endEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::end() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE8getBlockEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getBlock() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE7getIDomEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getIDom() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE11getChildrenEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getChildren() const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEEC1EPS1_PS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::DomTreeNodeBase(llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEEC2EPS1_PS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::DomTreeNodeBase(llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE8addChildEPS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::addChild(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE14getNumChildrenEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getNumChildren() const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE16clearAllChildrenEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::clearAllChildren()\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE7compareEPS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::compare(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE7setIDomEPS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::setIDom(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE11getDFSNumInEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getDFSNumIn() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE12getDFSNumOutEv\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::getDFSNumOut() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_17MachineBasicBlockEE11DominatedByEPKS2_\", \"llvm::DomTreeNodeBase<llvm::MachineBasicBlock>::DominatedBy(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7InfoRecC1Ev\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec::InfoRec()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7InfoRecC2Ev\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec::InfoRec()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE5resetEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::reset()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEEC1Eb\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::DominatorTreeBase(bool)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEEC2Eb\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::DominatorTreeBase(bool)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEED0Ev\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEED1Ev\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEED2Ev\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7compareERS2_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::compare(llvm::DominatorTreeBase<llvm::MachineBasicBlock>&) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE13releaseMemoryEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::releaseMemory()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7getNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getNode(llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE11getRootNodeEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getRootNode()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE11getRootNodeEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getRootNode() const\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE17properlyDominatesEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::properlyDominates(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*) const\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE23dominatedBySlowTreeWalkEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::dominatedBySlowTreeWalk(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE17properlyDominatesEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::properlyDominates(llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE20isReachableFromEntryEPKS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::isReachableFromEntry(llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE9dominatesEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::dominates(llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE9dominatesEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::dominates(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE16updateDFSNumbersEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::updateDFSNumbers()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7getRootEv\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getRoot() const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE26findNearestCommonDominatorEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::findNearestCommonDominator(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE26findNearestCommonDominatorEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::findNearestCommonDominator(llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE11addNewBlockEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::addNewBlock(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE24changeImmediateDominatorEPNS_15DomTreeNodeBaseIS1_EES5_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::changeImmediateDominator(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE24changeImmediateDominatorEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::changeImmediateDominator(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE9eraseNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::eraseNode(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE10removeNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::removeNode(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE10splitBlockEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::splitBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE5SplitINS_7InverseIPS1_EENS_11GraphTraitsIS6_EEEEvRNS0_INT0_8NodeTypeEEEPSA_\", \"void llvm::DominatorTreeBase<llvm::MachineBasicBlock>::Split<llvm::Inverse<llvm::MachineBasicBlock*>, llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE5SplitIPS1_NS_11GraphTraitsIS4_EEEEvRNS0_INT0_8NodeTypeEEEPS8_\", \"void llvm::DominatorTreeBase<llvm::MachineBasicBlock>::Split<llvm::MachineBasicBlock*, llvm::GraphTraits<llvm::MachineBasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType*)\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE5printERNS_11raw_ostreamE\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE15getNodeForBlockEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getNodeForBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE7getIDomEPS1_\", \"llvm::DominatorTreeBase<llvm::MachineBasicBlock>::getIDom(llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEE11recalculateINS_15MachineFunctionEEEvRT_\", \"void llvm::DominatorTreeBase<llvm::MachineBasicBlock>::recalculate<llvm::MachineFunction>(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm9CalculateINS_15MachineFunctionEPNS_17MachineBasicBlockEEEvRNS_17DominatorTreeBaseINS_11GraphTraitsIT0_E8NodeTypeEEERT_\", \"void llvm::Calculate<llvm::MachineFunction, llvm::MachineBasicBlock*>(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType>&, llvm::MachineFunction&)\"},\n    {\"_ZN4llvm9CalculateINS_15MachineFunctionENS_7InverseIPNS_17MachineBasicBlockEEEEEvRNS_17DominatorTreeBaseINS_11GraphTraitsIT0_E8NodeTypeEEERT_\", \"void llvm::Calculate<llvm::MachineFunction, llvm::Inverse<llvm::MachineBasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType>&, llvm::MachineFunction&)\"},\n    {\"_ZN4llvm7DFSPassINS_11GraphTraitsINS_7InverseIPNS_17MachineBasicBlockEEEEEEEjRNS_17DominatorTreeBaseINT_8NodeTypeEEEPS9_j\", \"unsigned int llvm::DFSPass<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIjE6resizeEj\", \"llvm::SmallVectorImpl<unsigned int>::resize(unsigned int)\"},\n    {\"_ZN4llvm4EvalINS_11GraphTraitsINS_7InverseIPNS_17MachineBasicBlockEEEEEEEPNT_8NodeTypeERNS_17DominatorTreeBaseIS8_EES9_j\", \"llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType* llvm::Eval<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::MachineBasicBlock*> >::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec> >::shrink_and_clear()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPNS_17MachineBasicBlockEN9__gnu_cxx17__normal_iteratorIPS3_St6vectorIS3_SaIS3_EEEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::MachineBasicBlock*, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec const&, std::pair<llvm::MachineBasicBlock*, llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::MachineBasicBlock>::InfoRec> >::grow(unsigned int)\"},\n    {\"_ZN4llvm7DFSPassINS_11GraphTraitsIPNS_17MachineBasicBlockEEEEEjRNS_17DominatorTreeBaseINT_8NodeTypeEEEPS7_j\", \"unsigned int llvm::DFSPass<llvm::GraphTraits<llvm::MachineBasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm4EvalINS_11GraphTraitsIPNS_17MachineBasicBlockEEEEEPNT_8NodeTypeERNS_17DominatorTreeBaseIS6_EES7_j\", \"llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType* llvm::Eval<llvm::GraphTraits<llvm::MachineBasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::MachineBasicBlock*>::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::MachineBasicBlock* const&, std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockES2_NS_12DenseMapInfoIS2_EES4_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineBasicBlock*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_15DomTreeNodeBaseIS1_EENS_12DenseMapInfoIS2_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_20MachineDominatorTreeEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::MachineDominatorTree>()\"},\n    {\"_ZN4llvm19MachineFunctionInfoD0Ev\", \"llvm::MachineFunctionInfo::~MachineFunctionInfo()\"},\n    {\"_ZN4llvm19MachineFunctionInfoD1Ev\", \"llvm::MachineFunctionInfo::~MachineFunctionInfo()\"},\n    {\"_ZN4llvm19MachineFunctionInfoD2Ev\", \"llvm::MachineFunctionInfo::~MachineFunctionInfo()\"},\n    {\"_ZN4llvm12ilist_traitsINS_17MachineBasicBlockEE10deleteNodeEPS1_\", \"llvm::ilist_traits<llvm::MachineBasicBlock>::deleteNode(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm15MachineFunction23DeleteMachineBasicBlockEPNS_17MachineBasicBlockE\", \"llvm::MachineFunction::DeleteMachineBasicBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm15MachineFunctionC1EPKNS_8FunctionERKNS_13TargetMachineEjRNS_17MachineModuleInfoEPNS_12GCModuleInfoE\", \"llvm::MachineFunction::MachineFunction(llvm::Function const*, llvm::TargetMachine const&, unsigned int, llvm::MachineModuleInfo&, llvm::GCModuleInfo*)\"},\n    {\"_ZN4llvm15MachineFunctionC2EPKNS_8FunctionERKNS_13TargetMachineEjRNS_17MachineModuleInfoEPNS_12GCModuleInfoE\", \"llvm::MachineFunction::MachineFunction(llvm::Function const*, llvm::TargetMachine const&, unsigned int, llvm::MachineModuleInfo&, llvm::GCModuleInfo*)\"},\n    {\"_ZN4llvm15MachineFunctionD1Ev\", \"llvm::MachineFunction::~MachineFunction()\"},\n    {\"_ZN4llvm15MachineFunctionD2Ev\", \"llvm::MachineFunction::~MachineFunction()\"},\n    {\"_ZN4llvm19MachineConstantPoolD1Ev\", \"llvm::MachineConstantPool::~MachineConstantPool()\"},\n    {\"_ZN4llvm15MachineFunction24getOrCreateJumpTableInfoEj\", \"llvm::MachineFunction::getOrCreateJumpTableInfo(unsigned int)\"},\n    {\"_ZN4llvm15MachineFunction14RenumberBlocksEPNS_17MachineBasicBlockE\", \"llvm::MachineFunction::RenumberBlocks(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm15MachineFunction18CreateMachineInstrERKNS_15TargetInstrDescENS_8DebugLocEb\", \"llvm::MachineFunction::CreateMachineInstr(llvm::TargetInstrDesc const&, llvm::DebugLoc, bool)\"},\n    {\"_ZN4llvm15MachineFunction17CloneMachineInstrEPKNS_12MachineInstrE\", \"llvm::MachineFunction::CloneMachineInstr(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm15MachineFunction18DeleteMachineInstrEPNS_12MachineInstrE\", \"llvm::MachineFunction::DeleteMachineInstr(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm15MachineFunction23CreateMachineBasicBlockEPKNS_10BasicBlockE\", \"llvm::MachineFunction::CreateMachineBasicBlock(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm15MachineFunction20getMachineMemOperandENS_18MachinePointerInfoEjyjPKNS_6MDNodeE\", \"llvm::MachineFunction::getMachineMemOperand(llvm::MachinePointerInfo, unsigned int, unsigned long long, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm15MachineFunction20getMachineMemOperandEPKNS_17MachineMemOperandExy\", \"llvm::MachineFunction::getMachineMemOperand(llvm::MachineMemOperand const*, long long, unsigned long long)\"},\n    {\"_ZN4llvm15MachineFunction20allocateMemRefsArrayEm\", \"llvm::MachineFunction::allocateMemRefsArray(unsigned long)\"},\n    {\"_ZN4llvm15MachineFunction18extractLoadMemRefsEPPNS_17MachineMemOperandES3_\", \"llvm::MachineFunction::extractLoadMemRefs(llvm::MachineMemOperand**, llvm::MachineMemOperand**)\"},\n    {\"_ZN4llvm15MachineFunction19extractStoreMemRefsEPPNS_17MachineMemOperandES3_\", \"llvm::MachineFunction::extractStoreMemRefs(llvm::MachineMemOperand**, llvm::MachineMemOperand**)\"},\n    {\"_ZNK4llvm15MachineFunction4dumpEv\", \"llvm::MachineFunction::dump() const\"},\n    {\"_ZNK4llvm15MachineFunction5printERNS_11raw_ostreamEPNS_11SlotIndexesE\", \"llvm::MachineFunction::print(llvm::raw_ostream&, llvm::SlotIndexes*) const\"},\n    {\"_ZNK4llvm16MachineFrameInfo5printERKNS_15MachineFunctionERNS_11raw_ostreamE\", \"llvm::MachineFrameInfo::print(llvm::MachineFunction const&, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm20MachineJumpTableInfo5printERNS_11raw_ostreamE\", \"llvm::MachineJumpTableInfo::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm19MachineConstantPool5printERNS_11raw_ostreamE\", \"llvm::MachineConstantPool::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm15MachineFunction7viewCFGEv\", \"llvm::MachineFunction::viewCFG() const\"},\n    {\"_ZNK4llvm15MachineFunction11viewCFGOnlyEv\", \"llvm::MachineFunction::viewCFGOnly() const\"},\n    {\"_ZN4llvm15MachineFunction9addLiveInEjPKNS_19TargetRegisterClassENS_8DebugLocE\", \"llvm::MachineFunction::addLiveIn(unsigned int, llvm::TargetRegisterClass const*, llvm::DebugLoc)\"},\n    {\"_ZNK4llvm15MachineFunction12getJTISymbolEjRNS_9MCContextEb\", \"llvm::MachineFunction::getJTISymbol(unsigned int, llvm::MCContext&, bool) const\"},\n    {\"_ZNK4llvm15MachineFunction16getPICBaseSymbolEv\", \"llvm::MachineFunction::getPICBaseSymbol() const\"},\n    {\"_ZN4llvm16MachineFrameInfo17CreateFixedObjectEyxb\", \"llvm::MachineFrameInfo::CreateFixedObject(unsigned long long, long long, bool)\"},\n    {\"_ZNK4llvm16MachineFrameInfo15getPristineRegsEPKNS_17MachineBasicBlockE\", \"llvm::MachineFrameInfo::getPristineRegs(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm16MachineFrameInfo4dumpERKNS_15MachineFunctionE\", \"llvm::MachineFrameInfo::dump(llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm20MachineJumpTableInfo12getEntrySizeERKNS_10DataLayoutE\", \"llvm::MachineJumpTableInfo::getEntrySize(llvm::DataLayout const&) const\"},\n    {\"_ZNK4llvm20MachineJumpTableInfo17getEntryAlignmentERKNS_10DataLayoutE\", \"llvm::MachineJumpTableInfo::getEntryAlignment(llvm::DataLayout const&) const\"},\n    {\"_ZN4llvm20MachineJumpTableInfo20createJumpTableIndexERKSt6vectorIPNS_17MachineBasicBlockESaIS3_EE\", \"llvm::MachineJumpTableInfo::createJumpTableIndex(std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > const&)\"},\n    {\"_ZN4llvm20MachineJumpTableInfo22ReplaceMBBInJumpTablesEPNS_17MachineBasicBlockES2_\", \"llvm::MachineJumpTableInfo::ReplaceMBBInJumpTables(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm20MachineJumpTableInfo21ReplaceMBBInJumpTableEjPNS_17MachineBasicBlockES2_\", \"llvm::MachineJumpTableInfo::ReplaceMBBInJumpTable(unsigned int, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*)\"},\n    {\"_ZNK4llvm20MachineJumpTableInfo4dumpEv\", \"llvm::MachineJumpTableInfo::dump() const\"},\n    {\"_ZNK4llvm24MachineConstantPoolEntry7getTypeEv\", \"llvm::MachineConstantPoolEntry::getType() const\"},\n    {\"_ZNK4llvm24MachineConstantPoolEntry17getRelocationInfoEv\", \"llvm::MachineConstantPoolEntry::getRelocationInfo() const\"},\n    {\"_ZN4llvm19MachineConstantPoolD2Ev\", \"llvm::MachineConstantPool::~MachineConstantPool()\"},\n    {\"_ZN4llvm19MachineConstantPool20getConstantPoolIndexEPKNS_8ConstantEj\", \"llvm::MachineConstantPool::getConstantPoolIndex(llvm::Constant const*, unsigned int)\"},\n    {\"_Z25CanShareConstantPoolEntryPKN4llvm8ConstantES2_PKNS_10DataLayoutE\", \"CanShareConstantPoolEntry(llvm::Constant const*, llvm::Constant const*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm19MachineConstantPool20getConstantPoolIndexEPNS_24MachineConstantPoolValueEj\", \"llvm::MachineConstantPool::getConstantPoolIndex(llvm::MachineConstantPoolValue*, unsigned int)\"},\n    {\"_ZNK4llvm19MachineConstantPool4dumpEv\", \"llvm::MachineConstantPool::dump() const\"},\n    {\"_ZN4llvm6iplistINS_17MachineBasicBlockENS_12ilist_traitsIS1_EEE5clearEv\", \"llvm::iplist<llvm::MachineBasicBlock, llvm::ilist_traits<llvm::MachineBasicBlock> >::clear()\"},\n    {\"_ZNSt6vectorIN4llvm21MachineJumpTableEntryESaIS1_EE9push_backERKS1_\", \"std::vector<llvm::MachineJumpTableEntry, std::allocator<llvm::MachineJumpTableEntry> >::push_back(llvm::MachineJumpTableEntry const&)\"},\n    {\"_ZNSt6vectorIN4llvm24MachineConstantPoolEntryESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MachineConstantPoolEntry, std::allocator<llvm::MachineConstantPoolEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineConstantPoolEntry*, std::vector<llvm::MachineConstantPoolEntry, std::allocator<llvm::MachineConstantPoolEntry> > >, llvm::MachineConstantPoolEntry const&)\"},\n    {\"_ZNSt6vectorIN4llvm21MachineJumpTableEntryESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MachineJumpTableEntry, std::allocator<llvm::MachineJumpTableEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineJumpTableEntry*, std::vector<llvm::MachineJumpTableEntry, std::allocator<llvm::MachineJumpTableEntry> > >, llvm::MachineJumpTableEntry const&)\"},\n    {\"_ZNSt6vectorIPN4llvm17MachineBasicBlockESaIS2_EEaSERKS4_\", \"std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> >::operator=(std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm17MachineBasicBlockESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, unsigned long, llvm::MachineBasicBlock* const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8DebugLocENS_12DenseMapInfoIjEENS2_IS1_EEE16InsertIntoBucketERKjRKS1_PSt4pairIjS1_E\", \"llvm::DenseMap<unsigned int, llvm::DebugLoc, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::DebugLoc> >::InsertIntoBucket(unsigned int const&, llvm::DebugLoc const&, std::pair<unsigned int, llvm::DebugLoc>*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_8DebugLocENS_12DenseMapInfoIjEENS2_IS1_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::DebugLoc, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::DebugLoc> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIjjESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, unsigned int>*, std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > > >, std::pair<unsigned int, unsigned int> const&)\"},\n    {\"_ZN4llvm23MachineFunctionAnalysisC1ERKNS_13TargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::MachineFunctionAnalysis::MachineFunctionAnalysis(llvm::TargetMachine const&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm23MachineFunctionAnalysisC2ERKNS_13TargetMachineENS_10CodeGenOpt5LevelE\", \"llvm::MachineFunctionAnalysis::MachineFunctionAnalysis(llvm::TargetMachine const&, llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm23MachineFunctionAnalysisD0Ev\", \"llvm::MachineFunctionAnalysis::~MachineFunctionAnalysis()\"},\n    {\"_ZN4llvm23MachineFunctionAnalysisD1Ev\", \"llvm::MachineFunctionAnalysis::~MachineFunctionAnalysis()\"},\n    {\"_ZN4llvm23MachineFunctionAnalysisD2Ev\", \"llvm::MachineFunctionAnalysis::~MachineFunctionAnalysis()\"},\n    {\"_ZNK4llvm23MachineFunctionAnalysis16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MachineFunctionAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm23MachineFunctionAnalysis16doInitializationERNS_6ModuleE\", \"llvm::MachineFunctionAnalysis::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm23MachineFunctionAnalysis13runOnFunctionERNS_8FunctionE\", \"llvm::MachineFunctionAnalysis::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm23MachineFunctionAnalysis13releaseMemoryEv\", \"llvm::MachineFunctionAnalysis::releaseMemory()\"},\n    {\"_ZNK4llvm23MachineFunctionAnalysis11getPassNameEv\", \"llvm::MachineFunctionAnalysis::getPassName() const\"},\n    {\"_ZNK4llvm19MachineFunctionPass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::MachineFunctionPass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZN4llvm19MachineFunctionPass13runOnFunctionERNS_8FunctionE\", \"llvm::MachineFunctionPass::runOnFunction(llvm::Function&)\"},\n    {\"_ZNK4llvm19MachineFunctionPass16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MachineFunctionPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm32createMachineFunctionPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::createMachineFunctionPrinterPass(llvm::raw_ostream&, std::string const&)\"},\n    {\"_ZN12_GLOBAL__N_126MachineFunctionPrinterPassD1Ev\", \"(anonymous namespace)::MachineFunctionPrinterPass::~MachineFunctionPrinterPass()\"},\n    {\"_ZN12_GLOBAL__N_126MachineFunctionPrinterPassD0Ev\", \"(anonymous namespace)::MachineFunctionPrinterPass::~MachineFunctionPrinterPass()\"},\n    {\"_ZNK12_GLOBAL__N_126MachineFunctionPrinterPass11getPassNameEv\", \"(anonymous namespace)::MachineFunctionPrinterPass::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_126MachineFunctionPrinterPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineFunctionPrinterPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_126MachineFunctionPrinterPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineFunctionPrinterPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm14MachineOperand22AddRegOperandToRegInfoEPNS_19MachineRegisterInfoE\", \"llvm::MachineOperand::AddRegOperandToRegInfo(llvm::MachineRegisterInfo*)\"},\n    {\"_ZN4llvm14MachineOperand27RemoveRegOperandFromRegInfoEv\", \"llvm::MachineOperand::RemoveRegOperandFromRegInfo()\"},\n    {\"_ZN4llvm14MachineOperand6setRegEj\", \"llvm::MachineOperand::setReg(unsigned int)\"},\n    {\"_ZN4llvm14MachineOperand12substVirtRegEjjRKNS_18TargetRegisterInfoE\", \"llvm::MachineOperand::substVirtReg(unsigned int, unsigned int, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm14MachineOperand12substPhysRegEjRKNS_18TargetRegisterInfoE\", \"llvm::MachineOperand::substPhysReg(unsigned int, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm14MachineOperand17ChangeToImmediateEx\", \"llvm::MachineOperand::ChangeToImmediate(long long)\"},\n    {\"_ZN4llvm14MachineOperand16ChangeToRegisterEjbbbbbb\", \"llvm::MachineOperand::ChangeToRegister(unsigned int, bool, bool, bool, bool, bool, bool)\"},\n    {\"_ZNK4llvm14MachineOperand13isIdenticalToERKS0_\", \"llvm::MachineOperand::isIdenticalTo(llvm::MachineOperand const&) const\"},\n    {\"_ZNK4llvm14MachineOperand5printERNS_11raw_ostreamEPKNS_13TargetMachineE\", \"llvm::MachineOperand::print(llvm::raw_ostream&, llvm::TargetMachine const*) const\"},\n    {\"_ZNK4llvm18MachinePointerInfo12getAddrSpaceEv\", \"llvm::MachinePointerInfo::getAddrSpace() const\"},\n    {\"_ZN4llvm18MachinePointerInfo15getConstantPoolEv\", \"llvm::MachinePointerInfo::getConstantPool()\"},\n    {\"_ZN4llvm18MachinePointerInfo13getFixedStackEix\", \"llvm::MachinePointerInfo::getFixedStack(int, long long)\"},\n    {\"_ZN4llvm18MachinePointerInfo12getJumpTableEv\", \"llvm::MachinePointerInfo::getJumpTable()\"},\n    {\"_ZN4llvm18MachinePointerInfo6getGOTEv\", \"llvm::MachinePointerInfo::getGOT()\"},\n    {\"_ZN4llvm18MachinePointerInfo8getStackEx\", \"llvm::MachinePointerInfo::getStack(long long)\"},\n    {\"_ZN4llvm17MachineMemOperandC1ENS_18MachinePointerInfoEjyjPKNS_6MDNodeE\", \"llvm::MachineMemOperand::MachineMemOperand(llvm::MachinePointerInfo, unsigned int, unsigned long long, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZN4llvm17MachineMemOperandC2ENS_18MachinePointerInfoEjyjPKNS_6MDNodeE\", \"llvm::MachineMemOperand::MachineMemOperand(llvm::MachinePointerInfo, unsigned int, unsigned long long, unsigned int, llvm::MDNode const*)\"},\n    {\"_ZNK4llvm17MachineMemOperand7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::MachineMemOperand::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm17MachineMemOperand15refineAlignmentEPKS0_\", \"llvm::MachineMemOperand::refineAlignment(llvm::MachineMemOperand const*)\"},\n    {\"_ZNK4llvm17MachineMemOperand12getAlignmentEv\", \"llvm::MachineMemOperand::getAlignment() const\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamERKNS_17MachineMemOperandE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::MachineMemOperand const&)\"},\n    {\"_ZN4llvm12MachineInstrC1Ev\", \"llvm::MachineInstr::MachineInstr()\"},\n    {\"_ZN4llvm12MachineInstrC2Ev\", \"llvm::MachineInstr::MachineInstr()\"},\n    {\"_ZN4llvm12MachineInstr25addImplicitDefUseOperandsEv\", \"llvm::MachineInstr::addImplicitDefUseOperands()\"},\n    {\"_ZN4llvm12MachineInstr10addOperandERKNS_14MachineOperandE\", \"llvm::MachineInstr::addOperand(llvm::MachineOperand const&)\"},\n    {\"_ZN4llvm12MachineInstrC1ERKNS_15TargetInstrDescEb\", \"llvm::MachineInstr::MachineInstr(llvm::TargetInstrDesc const&, bool)\"},\n    {\"_ZN4llvm12MachineInstrC2ERKNS_15TargetInstrDescEb\", \"llvm::MachineInstr::MachineInstr(llvm::TargetInstrDesc const&, bool)\"},\n    {\"_ZN4llvm12MachineInstrC1ERKNS_15TargetInstrDescENS_8DebugLocEb\", \"llvm::MachineInstr::MachineInstr(llvm::TargetInstrDesc const&, llvm::DebugLoc, bool)\"},\n    {\"_ZN4llvm12MachineInstrC2ERKNS_15TargetInstrDescENS_8DebugLocEb\", \"llvm::MachineInstr::MachineInstr(llvm::TargetInstrDesc const&, llvm::DebugLoc, bool)\"},\n    {\"_ZN4llvm12MachineInstrC1EPNS_17MachineBasicBlockERKNS_15TargetInstrDescE\", \"llvm::MachineInstr::MachineInstr(llvm::MachineBasicBlock*, llvm::TargetInstrDesc const&)\"},\n    {\"_ZN4llvm12MachineInstrC2EPNS_17MachineBasicBlockERKNS_15TargetInstrDescE\", \"llvm::MachineInstr::MachineInstr(llvm::MachineBasicBlock*, llvm::TargetInstrDesc const&)\"},\n    {\"_ZN4llvm12MachineInstrC1EPNS_17MachineBasicBlockENS_8DebugLocERKNS_15TargetInstrDescE\", \"llvm::MachineInstr::MachineInstr(llvm::MachineBasicBlock*, llvm::DebugLoc, llvm::TargetInstrDesc const&)\"},\n    {\"_ZN4llvm12MachineInstrC2EPNS_17MachineBasicBlockENS_8DebugLocERKNS_15TargetInstrDescE\", \"llvm::MachineInstr::MachineInstr(llvm::MachineBasicBlock*, llvm::DebugLoc, llvm::TargetInstrDesc const&)\"},\n    {\"_ZN4llvm12MachineInstrC1ERNS_15MachineFunctionERKS0_\", \"llvm::MachineInstr::MachineInstr(llvm::MachineFunction&, llvm::MachineInstr const&)\"},\n    {\"_ZN4llvm12MachineInstrC2ERNS_15MachineFunctionERKS0_\", \"llvm::MachineInstr::MachineInstr(llvm::MachineFunction&, llvm::MachineInstr const&)\"},\n    {\"_ZN4llvm12MachineInstrD1Ev\", \"llvm::MachineInstr::~MachineInstr()\"},\n    {\"_ZN4llvm12MachineInstrD2Ev\", \"llvm::MachineInstr::~MachineInstr()\"},\n    {\"_ZN4llvm12MachineInstr10getRegInfoEv\", \"llvm::MachineInstr::getRegInfo()\"},\n    {\"_ZN4llvm12MachineInstr29RemoveRegOperandsFromUseListsEv\", \"llvm::MachineInstr::RemoveRegOperandsFromUseLists()\"},\n    {\"_ZN4llvm12MachineInstr24AddRegOperandsToUseListsERNS_19MachineRegisterInfoE\", \"llvm::MachineInstr::AddRegOperandsToUseLists(llvm::MachineRegisterInfo&)\"},\n    {\"_ZN4llvm12MachineInstr13RemoveOperandEj\", \"llvm::MachineInstr::RemoveOperand(unsigned int)\"},\n    {\"_ZN4llvm12MachineInstr13addMemOperandERNS_15MachineFunctionEPNS_17MachineMemOperandE\", \"llvm::MachineInstr::addMemOperand(llvm::MachineFunction&, llvm::MachineMemOperand*)\"},\n    {\"_ZNK4llvm12MachineInstr13isIdenticalToEPKS0_NS0_11MICheckTypeE\", \"llvm::MachineInstr::isIdenticalTo(llvm::MachineInstr const*, llvm::MachineInstr::MICheckType) const\"},\n    {\"_ZN4llvm12MachineInstr16removeFromParentEv\", \"llvm::MachineInstr::removeFromParent()\"},\n    {\"_ZN4llvm12MachineInstr15eraseFromParentEv\", \"llvm::MachineInstr::eraseFromParent()\"},\n    {\"_ZNK4llvm12MachineInstr16OperandsCompleteEv\", \"llvm::MachineInstr::OperandsComplete() const\"},\n    {\"_ZNK4llvm12MachineInstr22getNumExplicitOperandsEv\", \"llvm::MachineInstr::getNumExplicitOperands() const\"},\n    {\"_ZNK4llvm12MachineInstr24isStackAligningInlineAsmEv\", \"llvm::MachineInstr::isStackAligningInlineAsm() const\"},\n    {\"_ZNK4llvm12MachineInstr25findRegisterUseOperandIdxEjbPKNS_18TargetRegisterInfoE\", \"llvm::MachineInstr::findRegisterUseOperandIdx(unsigned int, bool, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm12MachineInstr26readsWritesVirtualRegisterEjPNS_15SmallVectorImplIjEE\", \"llvm::MachineInstr::readsWritesVirtualRegister(unsigned int, llvm::SmallVectorImpl<unsigned int>*) const\"},\n    {\"_ZNK4llvm12MachineInstr25findRegisterDefOperandIdxEjbbPKNS_18TargetRegisterInfoE\", \"llvm::MachineInstr::findRegisterDefOperandIdx(unsigned int, bool, bool, llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZNK4llvm12MachineInstr23findFirstPredOperandIdxEv\", \"llvm::MachineInstr::findFirstPredOperandIdx() const\"},\n    {\"_ZNK4llvm12MachineInstr21isRegTiedToUseOperandEjPj\", \"llvm::MachineInstr::isRegTiedToUseOperand(unsigned int, unsigned int*) const\"},\n    {\"_ZNK4llvm12MachineInstr21isRegTiedToDefOperandEjPj\", \"llvm::MachineInstr::isRegTiedToDefOperand(unsigned int, unsigned int*) const\"},\n    {\"_ZN4llvm12MachineInstr13clearKillInfoEv\", \"llvm::MachineInstr::clearKillInfo()\"},\n    {\"_ZN4llvm12MachineInstr16copyKillDeadInfoEPKS0_\", \"llvm::MachineInstr::copyKillDeadInfo(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm12MachineInstr14copyPredicatesEPKS0_\", \"llvm::MachineInstr::copyPredicates(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm12MachineInstr18substituteRegisterEjjjRKNS_18TargetRegisterInfoE\", \"llvm::MachineInstr::substituteRegister(unsigned int, unsigned int, unsigned int, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZNK4llvm12MachineInstr12isSafeToMoveEPKNS_15TargetInstrInfoEPNS_13AliasAnalysisERb\", \"llvm::MachineInstr::isSafeToMove(llvm::TargetInstrInfo const*, llvm::AliasAnalysis*, bool&) const\"},\n    {\"_ZNK4llvm12MachineInstr23hasUnmodeledSideEffectsEv\", \"llvm::MachineInstr::hasUnmodeledSideEffects() const\"},\n    {\"_ZNK4llvm12MachineInstr15isInvariantLoadEPNS_13AliasAnalysisE\", \"llvm::MachineInstr::isInvariantLoad(llvm::AliasAnalysis*) const\"},\n    {\"_ZNK4llvm12MachineInstr20hasVolatileMemoryRefEv\", \"llvm::MachineInstr::hasVolatileMemoryRef() const\"},\n    {\"_ZNK4llvm12MachineInstr13isSafeToReMatEPKNS_15TargetInstrInfoEPNS_13AliasAnalysisEj\", \"llvm::MachineInstr::isSafeToReMat(llvm::TargetInstrInfo const*, llvm::AliasAnalysis*, unsigned int) const\"},\n    {\"_ZNK4llvm12MachineInstr18isConstantValuePHIEv\", \"llvm::MachineInstr::isConstantValuePHI() const\"},\n    {\"_ZNK4llvm12MachineInstr14allDefsAreDeadEv\", \"llvm::MachineInstr::allDefsAreDead() const\"},\n    {\"_ZN4llvm12MachineInstr15copyImplicitOpsEPKS0_\", \"llvm::MachineInstr::copyImplicitOps(llvm::MachineInstr const*)\"},\n    {\"_ZNK4llvm12MachineInstr4dumpEv\", \"llvm::MachineInstr::dump() const\"},\n    {\"_ZNK4llvm12MachineInstr5printERNS_11raw_ostreamEPKNS_13TargetMachineE\", \"llvm::MachineInstr::print(llvm::raw_ostream&, llvm::TargetMachine const*) const\"},\n    {\"_Z13printDebugLocN4llvm8DebugLocEPKNS_15MachineFunctionERNS_11raw_ostreamE\", \"printDebugLoc(llvm::DebugLoc, llvm::MachineFunction const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm12MachineInstr17addRegisterKilledEjPKNS_18TargetRegisterInfoEb\", \"llvm::MachineInstr::addRegisterKilled(unsigned int, llvm::TargetRegisterInfo const*, bool)\"},\n    {\"_ZN4llvm12MachineInstr15addRegisterDeadEjPKNS_18TargetRegisterInfoEb\", \"llvm::MachineInstr::addRegisterDead(unsigned int, llvm::TargetRegisterInfo const*, bool)\"},\n    {\"_ZN4llvm12MachineInstr18addRegisterDefinedEjPKNS_18TargetRegisterInfoE\", \"llvm::MachineInstr::addRegisterDefined(unsigned int, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN4llvm12MachineInstr21setPhysRegsDeadExceptERKNS_15SmallVectorImplIjEERKNS_18TargetRegisterInfoE\", \"llvm::MachineInstr::setPhysRegsDeadExcept(llvm::SmallVectorImpl<unsigned int> const&, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm27MachineInstrExpressionTrait12getHashValueERKPKNS_12MachineInstrE\", \"llvm::MachineInstrExpressionTrait::getHashValue(llvm::MachineInstr const* const&)\"},\n    {\"_ZNSt6vectorIN4llvm14MachineOperandESaIS1_EE7reserveEm\", \"std::vector<llvm::MachineOperand, std::allocator<llvm::MachineOperand> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm25initializeMachineLICMPassERNS_12PassRegistryE\", \"llvm::initializeMachineLICMPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createMachineLICMPassEb\", \"llvm::createMachineLICMPass(bool)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICMD1Ev\", \"(anonymous namespace)::MachineLICM::~MachineLICM()\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICMD0Ev\", \"(anonymous namespace)::MachineLICM::~MachineLICM()\"},\n    {\"_ZNK12_GLOBAL__N_111MachineLICM11getPassNameEv\", \"(anonymous namespace)::MachineLICM::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_111MachineLICM16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineLICM::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM13releaseMemoryEv\", \"(anonymous namespace)::MachineLICM::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineLICM::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM11HoistRegionEPN4llvm15DomTreeNodeBaseINS1_17MachineBasicBlockEEEb\", \"(anonymous namespace)::MachineLICM::HoistRegion(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, bool)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM15getCurPreheaderEv\", \"(anonymous namespace)::MachineLICM::getCurPreheader()\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM15InitRegPressureEPN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::MachineLICM::InitRegPressure(llvm::MachineBasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM17UpdateRegPressureEPKN4llvm12MachineInstrE\", \"(anonymous namespace)::MachineLICM::UpdateRegPressure(llvm::MachineInstr const*)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM19IsLoopInvariantInstERN4llvm12MachineInstrE\", \"(anonymous namespace)::MachineLICM::IsLoopInvariantInst(llvm::MachineInstr&)\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM19IsProfitableToHoistERN4llvm12MachineInstrE\", \"(anonymous namespace)::MachineLICM::IsProfitableToHoist(llvm::MachineInstr&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111MachineLICMEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::MachineLICM>()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorIPKNS_12MachineInstrESaIS4_EENS_12DenseMapInfoIjEENS7_IS6_EEE5clearEv\", \"llvm::DenseMap<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorIPKNS_12MachineInstrESaIS4_EENS_12DenseMapInfoIjEENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorIPKNS_12MachineInstrESaIS4_EENS_12DenseMapInfoIjEENS7_IS6_EEE6insertERKSt4pairIjS6_E\", \"llvm::DenseMap<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > >::insert(std::pair<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > const&)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorIPKNS_12MachineInstrESaIS4_EENS_12DenseMapInfoIjEENS7_IS6_EEE16InsertIntoBucketERKjRKS6_PSt4pairIjS6_E\", \"llvm::DenseMap<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > >::InsertIntoBucket(unsigned int const&, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > const&, std::pair<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorIPKNS_12MachineInstrESaIS4_EENS_12DenseMapInfoIjEENS7_IS6_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPKN4llvm12MachineInstrESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineInstr const**, std::vector<llvm::MachineInstr const*, std::allocator<llvm::MachineInstr const*> > >, llvm::MachineInstr const* const&)\"},\n    {\"_ZN4llvm8DenseMapIjiNS_12DenseMapInfoIjEENS1_IiEEE6insertERKSt4pairIjiE\", \"llvm::DenseMap<unsigned int, int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<int> >::insert(std::pair<unsigned int, int> const&)\"},\n    {\"_ZN4llvm8DenseMapIjiNS_12DenseMapInfoIjEENS1_IiEEE16InsertIntoBucketERKjRKiPSt4pairIjiE\", \"llvm::DenseMap<unsigned int, int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<int> >::InsertIntoBucket(unsigned int const&, int const&, std::pair<unsigned int, int>*)\"},\n    {\"_ZN4llvm8DenseMapIjiNS_12DenseMapInfoIjEENS1_IiEEE4growEj\", \"llvm::DenseMap<unsigned int, int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIjLj8EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<unsigned int, 8u>, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE8_M_eraseEPSt13_Rb_tree_nodeIiE\", \"std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_erase(std::_Rb_tree_node<int>*)\"},\n    {\"_ZN4llvm8SmallSetIiLj32EE6insertERKi\", \"llvm::SmallSet<int, 32u>::insert(int const&)\"},\n    {\"_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE16_M_insert_uniqueERKi\", \"std::_Rb_tree<int, int, std::_Identity<int>, std::less<int>, std::allocator<int> >::_M_insert_unique(int const&)\"},\n    {\"_ZN4llvm29initializeMachineLoopInfoPassERNS_12PassRegistryE\", \"llvm::initializeMachineLoopInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15MachineLoopInfo20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::MachineLoopInfo::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNK4llvm15MachineLoopInfo16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MachineLoopInfo::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm11MachineLoop11getTopBlockEv\", \"llvm::MachineLoop::getTopBlock()\"},\n    {\"_ZN4llvm11MachineLoop14getBottomBlockEv\", \"llvm::MachineLoop::getBottomBlock()\"},\n    {\"_ZNK4llvm11MachineLoop4dumpEv\", \"llvm::MachineLoop::dump() const\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEEC1Ev\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopBase()\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEEC2Ev\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopBase()\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEED1Ev\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::~LoopBase()\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEED2Ev\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::~LoopBase()\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE12getLoopDepthEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopDepth() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE9getHeaderEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getHeader() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE13getParentLoopEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getParentLoop() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE8containsEPKS2_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::contains(llvm::MachineLoop const*) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE8containsEPKS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::contains(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE11block_beginEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::block_begin() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE9block_endEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::block_end() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE11getSubLoopsEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getSubLoops() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE5beginEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::begin() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE3endEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::end() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE5emptyEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::empty() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE9getBlocksEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getBlocks() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE13isLoopExitingEPKS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::isLoopExiting(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE15getNumBackEdgesEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getNumBackEdges() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE16getExitingBlocksERNS_15SmallVectorImplIPS1_EE\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getExitingBlocks(llvm::SmallVectorImpl<llvm::MachineBasicBlock*>&) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE15getExitingBlockEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getExitingBlock() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE13getExitBlocksERNS_15SmallVectorImplIPS1_EE\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getExitBlocks(llvm::SmallVectorImpl<llvm::MachineBasicBlock*>&) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE12getExitBlockEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getExitBlock() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE16getLoopPreheaderEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopPreheader() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE18getLoopPredecessorEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopPredecessor() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE12getLoopLatchEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopLatch() const\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE20replaceChildLoopWithEPS2_S4_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::replaceChildLoopWith(llvm::MachineLoop*, llvm::MachineLoop*)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE12addChildLoopEPS2_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::addChildLoop(llvm::MachineLoop*)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE15removeChildLoopEN9__gnu_cxx17__normal_iteratorIPKPS2_St6vectorIS6_SaIS6_EEEE\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::removeChildLoop(__gnu_cxx::__normal_iterator<llvm::MachineLoop* const*, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE13addBlockEntryEPS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::addBlockEntry(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE12moveToHeaderEPS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::moveToHeader(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE19removeBlockFromLoopEPS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::removeBlockFromLoop(llvm::MachineBasicBlock*)\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE10verifyLoopEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::verifyLoop() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE14verifyLoopNestEv\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::verifyLoopNest() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEE5printERNS_11raw_ostreamEj\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::print(llvm::raw_ostream&, unsigned int) const\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEEC1EPS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopBase(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm8LoopBaseINS_17MachineBasicBlockENS_11MachineLoopEEC2EPS1_\", \"llvm::LoopBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopBase(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEEC1Ev\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopInfoBase()\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEEC2Ev\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::LoopInfoBase()\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEED1Ev\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::~LoopInfoBase()\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEED2Ev\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::~LoopInfoBase()\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE13releaseMemoryEv\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::releaseMemory()\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE5beginEv\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::begin() const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE3endEv\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::end() const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE5emptyEv\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::empty() const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE10getLoopForEPKS1_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopFor(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEEixEPKS1_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::operator[](llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE12getLoopDepthEPKS1_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::getLoopDepth(llvm::MachineBasicBlock const*) const\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE12isLoopHeaderEPS1_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::isLoopHeader(llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE10removeLoopEN9__gnu_cxx17__normal_iteratorIPKPS2_St6vectorIS6_SaIS6_EEEE\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::removeLoop(__gnu_cxx::__normal_iterator<llvm::MachineLoop* const*, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE13changeLoopForEPS1_PS2_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::changeLoopFor(llvm::MachineBasicBlock*, llvm::MachineLoop*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE18changeTopLevelLoopEPS2_S4_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::changeTopLevelLoop(llvm::MachineLoop*, llvm::MachineLoop*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE15addTopLevelLoopEPS2_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::addTopLevelLoop(llvm::MachineLoop*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE11removeBlockEPS1_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::removeBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE23isNotAlreadyContainedInEPKS2_S5_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::isNotAlreadyContainedIn(llvm::MachineLoop const*, llvm::MachineLoop const*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE9CalculateERNS_17DominatorTreeBaseIS1_EE\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::Calculate(llvm::DominatorTreeBase<llvm::MachineBasicBlock>&)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE15ConsiderForLoopEPS1_RNS_17DominatorTreeBaseIS1_EE\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::ConsiderForLoop(llvm::MachineBasicBlock*, llvm::DominatorTreeBase<llvm::MachineBasicBlock>&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_11MachineLoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineLoop*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineLoop*> >::insert(std::pair<llvm::MachineBasicBlock*, llvm::MachineLoop*> const&)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE19MoveSiblingLoopIntoEPS2_S4_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::MoveSiblingLoopInto(llvm::MachineLoop*, llvm::MachineLoop*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE14InsertLoopIntoEPS2_S4_\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::InsertLoopInto(llvm::MachineLoop*, llvm::MachineLoop*)\"},\n    {\"_ZNK4llvm12LoopInfoBaseINS_17MachineBasicBlockENS_11MachineLoopEE5printERNS_11raw_ostreamE\", \"llvm::LoopInfoBase<llvm::MachineBasicBlock, llvm::MachineLoop>::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm15MachineLoopInfoD1Ev\", \"llvm::MachineLoopInfo::~MachineLoopInfo()\"},\n    {\"_ZN4llvm15MachineLoopInfoD0Ev\", \"llvm::MachineLoopInfo::~MachineLoopInfo()\"},\n    {\"_ZN4llvm15MachineLoopInfo13releaseMemoryEv\", \"llvm::MachineLoopInfo::releaseMemory()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm17MachineBasicBlockESt4pairIKS2_PNS0_11MachineLoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<llvm::MachineBasicBlock*, std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*>, std::_Select1st<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> >, std::less<llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> >, std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm17MachineBasicBlockESt4pairIKS2_PNS0_11MachineLoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<llvm::MachineBasicBlock*, std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*>, std::_Select1st<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> >, std::less<llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> > >::_M_insert_unique(std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm17MachineBasicBlockESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS2_S4_EEEEvS9_T_SA_St20forward_iterator_tag\", \"void std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_17MachineBasicBlockENS_11SmallPtrSetIS2_Lj8EEELb0ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>, false, llvm::GraphTraits<llvm::MachineBasicBlock*> >::toNext()\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_11MachineLoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::MachineLoop*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::MachineLoop*> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorIPN4llvm11MachineLoopESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineLoop**, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >, llvm::MachineLoop* const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm11MachineLoopESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::MachineLoop**, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::MachineLoop**, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >, llvm::MachineLoop*>(__gnu_cxx::__normal_iterator<llvm::MachineLoop**, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >, __gnu_cxx::__normal_iterator<llvm::MachineLoop**, std::vector<llvm::MachineLoop*, std::allocator<llvm::MachineLoop*> > >, llvm::MachineLoop* const&, std::random_access_iterator_tag)\"},\n    {\"_ZSt16__introsort_loopIPPN4llvm17MachineBasicBlockElEvT_S4_T0_\", \"void std::__introsort_loop<llvm::MachineBasicBlock**, long>(llvm::MachineBasicBlock**, llvm::MachineBasicBlock**, long)\"},\n    {\"_ZSt22__final_insertion_sortIPPN4llvm17MachineBasicBlockEEvT_S4_\", \"void std::__final_insertion_sort<llvm::MachineBasicBlock**>(llvm::MachineBasicBlock**, llvm::MachineBasicBlock**)\"},\n    {\"_ZSt13__heap_selectIPPN4llvm17MachineBasicBlockEEvT_S4_S4_\", \"void std::__heap_select<llvm::MachineBasicBlock**>(llvm::MachineBasicBlock**, llvm::MachineBasicBlock**, llvm::MachineBasicBlock**)\"},\n    {\"_ZSt9sort_heapIPPN4llvm17MachineBasicBlockEEvT_S4_\", \"void std::sort_heap<llvm::MachineBasicBlock**>(llvm::MachineBasicBlock**, llvm::MachineBasicBlock**)\"},\n    {\"_ZSt9make_heapIPPN4llvm17MachineBasicBlockEEvT_S4_\", \"void std::make_heap<llvm::MachineBasicBlock**>(llvm::MachineBasicBlock**, llvm::MachineBasicBlock**)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_15MachineLoopInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::MachineLoopInfo>()\"},\n    {\"_ZN4llvm15MachineLoopInfoC2Ev\", \"llvm::MachineLoopInfo::MachineLoopInfo()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm17MachineBasicBlockESt4pairIKS2_PNS0_11MachineLoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::MachineBasicBlock*, std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*>, std::_Select1st<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> >, std::less<llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineBasicBlock* const, llvm::MachineLoop*> >*)\"},\n    {\"_ZN4llvm31initializeMachineModuleInfoPassERNS_12PassRegistryE\", \"llvm::initializeMachineModuleInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21MachineModuleInfoImplD0Ev\", \"llvm::MachineModuleInfoImpl::~MachineModuleInfoImpl()\"},\n    {\"_ZN4llvm21MachineModuleInfoImplD1Ev\", \"llvm::MachineModuleInfoImpl::~MachineModuleInfoImpl()\"},\n    {\"_ZN4llvm21MachineModuleInfoImplD2Ev\", \"llvm::MachineModuleInfoImpl::~MachineModuleInfoImpl()\"},\n    {\"_ZN4llvm15MMIAddrLabelMap18getAddrLabelSymbolEPNS_10BasicBlockE\", \"llvm::MMIAddrLabelMap::getAddrLabelSymbol(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15MMIAddrLabelMap24getAddrLabelSymbolToEmitEPNS_10BasicBlockE\", \"llvm::MMIAddrLabelMap::getAddrLabelSymbolToEmit(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15MMIAddrLabelMap29takeDeletedSymbolsForFunctionEPNS_8FunctionERSt6vectorIPNS_8MCSymbolESaIS5_EE\", \"llvm::MMIAddrLabelMap::takeDeletedSymbolsForFunction(llvm::Function*, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >&)\"},\n    {\"_ZN4llvm15MMIAddrLabelMap21UpdateForDeletedBlockEPNS_10BasicBlockE\", \"llvm::MMIAddrLabelMap::UpdateForDeletedBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15MMIAddrLabelMap18UpdateForRAUWBlockEPNS_10BasicBlockES2_\", \"llvm::MMIAddrLabelMap::UpdateForRAUWBlock(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm26MMIAddrLabelMapCallbackPtr7deletedEv\", \"llvm::MMIAddrLabelMapCallbackPtr::deleted()\"},\n    {\"_ZN4llvm26MMIAddrLabelMapCallbackPtr19allUsesReplacedWithEPNS_5ValueE\", \"llvm::MMIAddrLabelMapCallbackPtr::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm17MachineModuleInfoC1ERKNS_9MCAsmInfoEPKNS_13TargetAsmInfoE\", \"llvm::MachineModuleInfo::MachineModuleInfo(llvm::MCAsmInfo const&, llvm::TargetAsmInfo const*)\"},\n    {\"_ZN4llvm17MachineModuleInfoC2ERKNS_9MCAsmInfoEPKNS_13TargetAsmInfoE\", \"llvm::MachineModuleInfo::MachineModuleInfo(llvm::MCAsmInfo const&, llvm::TargetAsmInfo const*)\"},\n    {\"_ZN4llvm17MachineModuleInfoC1Ev\", \"llvm::MachineModuleInfo::MachineModuleInfo()\"},\n    {\"_ZN4llvm17MachineModuleInfoC2Ev\", \"llvm::MachineModuleInfo::MachineModuleInfo()\"},\n    {\"_ZN4llvm17MachineModuleInfoD0Ev\", \"llvm::MachineModuleInfo::~MachineModuleInfo()\"},\n    {\"_ZN4llvm17MachineModuleInfoD1Ev\", \"llvm::MachineModuleInfo::~MachineModuleInfo()\"},\n    {\"_ZN4llvm17MachineModuleInfoD2Ev\", \"llvm::MachineModuleInfo::~MachineModuleInfo()\"},\n    {\"_ZN4llvm17MachineModuleInfo16doInitializationEv\", \"llvm::MachineModuleInfo::doInitialization()\"},\n    {\"_ZN4llvm17MachineModuleInfo14doFinalizationEv\", \"llvm::MachineModuleInfo::doFinalization()\"},\n    {\"_ZN4llvm17MachineModuleInfo11EndFunctionEv\", \"llvm::MachineModuleInfo::EndFunction()\"},\n    {\"_ZN4llvm17MachineModuleInfo13AnalyzeModuleERKNS_6ModuleE\", \"llvm::MachineModuleInfo::AnalyzeModule(llvm::Module const&)\"},\n    {\"_ZN4llvm17MachineModuleInfo18getAddrLabelSymbolEPKNS_10BasicBlockE\", \"llvm::MachineModuleInfo::getAddrLabelSymbol(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17MachineModuleInfo24getAddrLabelSymbolToEmitEPKNS_10BasicBlockE\", \"llvm::MachineModuleInfo::getAddrLabelSymbolToEmit(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17MachineModuleInfo29takeDeletedSymbolsForFunctionEPKNS_8FunctionERSt6vectorIPNS_8MCSymbolESaIS6_EE\", \"llvm::MachineModuleInfo::takeDeletedSymbolsForFunction(llvm::Function const*, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >&)\"},\n    {\"_ZN4llvm17MachineModuleInfo25getOrCreateLandingPadInfoEPNS_17MachineBasicBlockE\", \"llvm::MachineModuleInfo::getOrCreateLandingPadInfo(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineModuleInfo9addInvokeEPNS_17MachineBasicBlockEPNS_8MCSymbolES4_\", \"llvm::MachineModuleInfo::addInvoke(llvm::MachineBasicBlock*, llvm::MCSymbol*, llvm::MCSymbol*)\"},\n    {\"_ZN4llvm17MachineModuleInfo13addLandingPadEPNS_17MachineBasicBlockE\", \"llvm::MachineModuleInfo::addLandingPad(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineModuleInfo14addPersonalityEPNS_17MachineBasicBlockEPKNS_8FunctionE\", \"llvm::MachineModuleInfo::addPersonality(llvm::MachineBasicBlock*, llvm::Function const*)\"},\n    {\"_ZN4llvm17MachineModuleInfo16addCatchTypeInfoEPNS_17MachineBasicBlockERSt6vectorIPKNS_14GlobalVariableESaIS6_EE\", \"llvm::MachineModuleInfo::addCatchTypeInfo(llvm::MachineBasicBlock*, std::vector<llvm::GlobalVariable const*, std::allocator<llvm::GlobalVariable const*> >&)\"},\n    {\"_ZN4llvm17MachineModuleInfo12getTypeIDForEPKNS_14GlobalVariableE\", \"llvm::MachineModuleInfo::getTypeIDFor(llvm::GlobalVariable const*)\"},\n    {\"_ZN4llvm17MachineModuleInfo17addFilterTypeInfoEPNS_17MachineBasicBlockERSt6vectorIPKNS_14GlobalVariableESaIS6_EE\", \"llvm::MachineModuleInfo::addFilterTypeInfo(llvm::MachineBasicBlock*, std::vector<llvm::GlobalVariable const*, std::allocator<llvm::GlobalVariable const*> >&)\"},\n    {\"_ZN4llvm17MachineModuleInfo14getFilterIDForERSt6vectorIjSaIjEE\", \"llvm::MachineModuleInfo::getFilterIDFor(std::vector<unsigned int, std::allocator<unsigned int> >&)\"},\n    {\"_ZN4llvm17MachineModuleInfo10addCleanupEPNS_17MachineBasicBlockE\", \"llvm::MachineModuleInfo::addCleanup(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineModuleInfo15TidyLandingPadsEPNS_8DenseMapIPNS_8MCSymbolEmNS_12DenseMapInfoIS3_EENS4_ImEEEE\", \"llvm::MachineModuleInfo::TidyLandingPads(llvm::DenseMap<llvm::MCSymbol*, unsigned long, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned long> >*)\"},\n    {\"_ZNK4llvm17MachineModuleInfo14getPersonalityEv\", \"llvm::MachineModuleInfo::getPersonality() const\"},\n    {\"_ZNK4llvm17MachineModuleInfo19getPersonalityIndexEv\", \"llvm::MachineModuleInfo::getPersonalityIndex() const\"},\n    {\"_ZN4llvm26MMIAddrLabelMapCallbackPtrD1Ev\", \"llvm::MMIAddrLabelMapCallbackPtr::~MMIAddrLabelMapCallbackPtr()\"},\n    {\"_ZNSt6vectorIPN4llvm8MCSymbolESaIS2_EEaSERKS4_\", \"std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >::operator=(std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm14LandingPadInfoESaIS1_EE5clearEv\", \"std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> >::clear()\"},\n    {\"_ZNSt6vectorIN4llvm14LandingPadInfoESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE\", \"std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> >::erase(__gnu_cxx::__normal_iterator<llvm::LandingPadInfo*, std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> > >)\"},\n    {\"_ZN4llvm26MMIAddrLabelMapCallbackPtrD0Ev\", \"llvm::MMIAddrLabelMapCallbackPtr::~MMIAddrLabelMapCallbackPtr()\"},\n    {\"_ZNSt6vectorIPKN4llvm14GlobalVariableESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::GlobalVariable const*, std::allocator<llvm::GlobalVariable const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::GlobalVariable const**, std::vector<llvm::GlobalVariable const*, std::allocator<llvm::GlobalVariable const*> > >, llvm::GlobalVariable const* const&)\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPN4llvm14LandingPadInfoES5_EET0_T_S7_S6_\", \"llvm::LandingPadInfo* std::__copy<false, std::random_access_iterator_tag>::copy<llvm::LandingPadInfo*, llvm::LandingPadInfo*>(llvm::LandingPadInfo*, llvm::LandingPadInfo*, llvm::LandingPadInfo*)\"},\n    {\"_ZNSt6vectorIiSaIiEEaSERKS1_\", \"std::vector<int, std::allocator<int> >::operator=(std::vector<int, std::allocator<int> > const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_8MCSymbolEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::MCSymbol*>::operator=(llvm::SmallVectorImpl<llvm::MCSymbol*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolEmNS_12DenseMapInfoIS2_EENS3_ImEEE16InsertIntoBucketERKS2_RKmPSt4pairIS2_mE\", \"llvm::DenseMap<llvm::MCSymbol*, unsigned long, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned long> >::InsertIntoBucket(llvm::MCSymbol* const&, unsigned long const&, std::pair<llvm::MCSymbol*, unsigned long>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolEmNS_12DenseMapInfoIS2_EENS3_ImEEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol*, unsigned long, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned long> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi\", \"std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&)\"},\n    {\"_ZNSt6vectorIN4llvm14LandingPadInfoESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LandingPadInfo*, std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> > >, llvm::LandingPadInfo const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm14LandingPadInfoES5_EET0_T_S7_S6_\", \"llvm::LandingPadInfo* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::LandingPadInfo*, llvm::LandingPadInfo*>(llvm::LandingPadInfo*, llvm::LandingPadInfo*, llvm::LandingPadInfo*)\"},\n    {\"_ZN4llvm14LandingPadInfoC2ERKS0_\", \"llvm::LandingPadInfo::LandingPadInfo(llvm::LandingPadInfo const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_8MCSymbolEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MCSymbol*, unsigned int, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorIPKN4llvm8FunctionESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::Function const*, std::allocator<llvm::Function const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Function const**, std::vector<llvm::Function const*, std::allocator<llvm::Function const*> > >, llvm::Function const* const&)\"},\n    {\"_ZNSt6vectorIN4llvm14LandingPadInfoESaIS1_EED2Ev\", \"std::vector<llvm::LandingPadInfo, std::allocator<llvm::LandingPadInfo> >::~vector()\"},\n    {\"_ZNSt6vectorIPN4llvm8MCSymbolESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS2_S4_EEEEvS9_T_SA_St20forward_iterator_tag\", \"void std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::MCSymbol**, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > > >(__gnu_cxx::__normal_iterator<llvm::MCSymbol**, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > >, __gnu_cxx::__normal_iterator<llvm::MCSymbol**, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > >, __gnu_cxx::__normal_iterator<llvm::MCSymbol**, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > >, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_8FunctionEEESt6vectorIPNS_8MCSymbolESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Function>, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Function> >, llvm::DenseMapInfo<std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > > >::FindAndConstruct(llvm::AssertingVH<llvm::Function> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_8FunctionEEESt6vectorIPNS_8MCSymbolESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE16InsertIntoBucketERKS3_RKS8_PSt4pairIS3_S8_E\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Function>, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Function> >, llvm::DenseMapInfo<std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > > >::InsertIntoBucket(llvm::AssertingVH<llvm::Function> const&, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > const&, std::pair<llvm::AssertingVH<llvm::Function>, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > >*)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_8FunctionEEESt6vectorIPNS_8MCSymbolESaIS6_EENS_12DenseMapInfoIS3_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Function>, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Function> >, llvm::DenseMapInfo<std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm8MCSymbolESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCSymbol**, std::vector<llvm::MCSymbol*, std::allocator<llvm::MCSymbol*> > >, llvm::MCSymbol* const&)\"},\n    {\"_ZNSt6vectorIN4llvm26MMIAddrLabelMapCallbackPtrESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MMIAddrLabelMapCallbackPtr, std::allocator<llvm::MMIAddrLabelMapCallbackPtr> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MMIAddrLabelMapCallbackPtr*, std::vector<llvm::MMIAddrLabelMapCallbackPtr, std::allocator<llvm::MMIAddrLabelMapCallbackPtr> > >, llvm::MMIAddrLabelMapCallbackPtr const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm26MMIAddrLabelMapCallbackPtrES5_EET0_T_S7_S6_\", \"llvm::MMIAddrLabelMapCallbackPtr* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::MMIAddrLabelMapCallbackPtr*, llvm::MMIAddrLabelMapCallbackPtr*>(llvm::MMIAddrLabelMapCallbackPtr*, llvm::MMIAddrLabelMapCallbackPtr*, llvm::MMIAddrLabelMapCallbackPtr*)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_10BasicBlockEEENS_15MMIAddrLabelMap17AddrLabelSymEntryENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::AssertingVH<llvm::BasicBlock>, llvm::MMIAddrLabelMap::AddrLabelSymEntry, llvm::DenseMapInfo<llvm::AssertingVH<llvm::BasicBlock> >, llvm::DenseMapInfo<llvm::MMIAddrLabelMap::AddrLabelSymEntry> >::InsertIntoBucket(llvm::AssertingVH<llvm::BasicBlock> const&, llvm::MMIAddrLabelMap::AddrLabelSymEntry const&, std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::MMIAddrLabelMap::AddrLabelSymEntry>*)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_10BasicBlockEEENS_15MMIAddrLabelMap17AddrLabelSymEntryENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::AssertingVH<llvm::BasicBlock>, llvm::MMIAddrLabelMap::AddrLabelSymEntry, llvm::DenseMapInfo<llvm::AssertingVH<llvm::BasicBlock> >, llvm::DenseMapInfo<llvm::MMIAddrLabelMap::AddrLabelSymEntry> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15MMIAddrLabelMapC2ERNS_9MCContextE\", \"llvm::MMIAddrLabelMap::MMIAddrLabelMap(llvm::MCContext&)\"},\n    {\"_ZN4llvm15MMIAddrLabelMapD2Ev\", \"llvm::MMIAddrLabelMap::~MMIAddrLabelMap()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_17MachineModuleInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::MachineModuleInfo>()\"},\n    {\"_ZN4llvm22MachineModuleInfoMachO6AnchorEv\", \"llvm::MachineModuleInfoMachO::Anchor()\"},\n    {\"_ZN4llvm20MachineModuleInfoELF6AnchorEv\", \"llvm::MachineModuleInfoELF::Anchor()\"},\n    {\"_ZN4llvm21MachineModuleInfoImpl14GetSortedStubsERKNS_8DenseMapIPNS_8MCSymbolENS_14PointerIntPairIS3_Lj1EbNS_21PointerLikeTypeTraitsIS3_EEEENS_12DenseMapInfoIS3_EENS8_IS7_EEEE\", \"llvm::MachineModuleInfoImpl::GetSortedStubs(llvm::DenseMap<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > > const&)\"},\n    {\"_Z14SortSymbolPairPKvS0_\", \"SortSymbolPair(void const*, void const*)\"},\n    {\"_ZN4llvm22MachineModuleInfoMachOD1Ev\", \"llvm::MachineModuleInfoMachO::~MachineModuleInfoMachO()\"},\n    {\"_ZN4llvm22MachineModuleInfoMachOD0Ev\", \"llvm::MachineModuleInfoMachO::~MachineModuleInfoMachO()\"},\n    {\"_ZN4llvm20MachineModuleInfoELFD1Ev\", \"llvm::MachineModuleInfoELF::~MachineModuleInfoELF()\"},\n    {\"_ZN4llvm20MachineModuleInfoELFD0Ev\", \"llvm::MachineModuleInfoELF::~MachineModuleInfoELF()\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm8MCSymbolENS1_14PointerIntPairIS3_Lj1EbNS1_21PointerLikeTypeTraitsIS3_EEEEESaIS8_EE19_M_range_initializeINS1_16DenseMapIteratorIS3_S7_NS1_12DenseMapInfoIS3_EENSD_IS7_EELb1EEEEEvT_SH_St20forward_iterator_tag\", \"void std::vector<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, std::allocator<std::pair<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > > > >::_M_range_initialize<llvm::DenseMapIterator<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, true> >(llvm::DenseMapIterator<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, true>, llvm::DenseMapIterator<llvm::MCSymbol*, llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> >, llvm::DenseMapInfo<llvm::MCSymbol*>, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::MCSymbol*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::MCSymbol*> > >, true>, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm19MachinePassRegistry6RemoveEPNS_23MachinePassRegistryNodeE\", \"llvm::MachinePassRegistry::Remove(llvm::MachinePassRegistryNode*)\"},\n    {\"_ZN4llvm19MachineRegisterInfoC1ERKNS_18TargetRegisterInfoE\", \"llvm::MachineRegisterInfo::MachineRegisterInfo(llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm19MachineRegisterInfoC2ERKNS_18TargetRegisterInfoE\", \"llvm::MachineRegisterInfo::MachineRegisterInfo(llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN4llvm19MachineRegisterInfoD1Ev\", \"llvm::MachineRegisterInfo::~MachineRegisterInfo()\"},\n    {\"_ZN4llvm19MachineRegisterInfoD2Ev\", \"llvm::MachineRegisterInfo::~MachineRegisterInfo()\"},\n    {\"_ZN4llvm19MachineRegisterInfo11setRegClassEjPKNS_19TargetRegisterClassE\", \"llvm::MachineRegisterInfo::setRegClass(unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm19MachineRegisterInfo17constrainRegClassEjPKNS_19TargetRegisterClassE\", \"llvm::MachineRegisterInfo::constrainRegClass(unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm19MachineRegisterInfo21createVirtualRegisterEPKNS_19TargetRegisterClassE\", \"llvm::MachineRegisterInfo::createVirtualRegister(llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm19MachineRegisterInfo26HandleVRegListReallocationEv\", \"llvm::MachineRegisterInfo::HandleVRegListReallocation()\"},\n    {\"_ZN4llvm19MachineRegisterInfo14replaceRegWithEjj\", \"llvm::MachineRegisterInfo::replaceRegWith(unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm19MachineRegisterInfo10getVRegDefEj\", \"llvm::MachineRegisterInfo::getVRegDef(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo9hasOneUseEj\", \"llvm::MachineRegisterInfo::hasOneUse(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo15hasOneNonDBGUseEj\", \"llvm::MachineRegisterInfo::hasOneNonDBGUse(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo14clearKillFlagsEj\", \"llvm::MachineRegisterInfo::clearKillFlags(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo8isLiveInEj\", \"llvm::MachineRegisterInfo::isLiveIn(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo9isLiveOutEj\", \"llvm::MachineRegisterInfo::isLiveOut(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo16getLiveInPhysRegEj\", \"llvm::MachineRegisterInfo::getLiveInPhysReg(unsigned int) const\"},\n    {\"_ZNK4llvm19MachineRegisterInfo16getLiveInVirtRegEj\", \"llvm::MachineRegisterInfo::getLiveInVirtReg(unsigned int) const\"},\n    {\"_ZN4llvm19MachineRegisterInfo16EmitLiveInCopiesEPNS_17MachineBasicBlockERKNS_18TargetRegisterInfoERKNS_15TargetInstrInfoE\", \"llvm::MachineRegisterInfo::EmitLiveInCopies(llvm::MachineBasicBlock*, llvm::TargetRegisterInfo const&, llvm::TargetInstrInfo const&)\"},\n    {\"_ZN4llvm19MachineRegisterInfo17closePhysRegsUsedERKNS_18TargetRegisterInfoE\", \"llvm::MachineRegisterInfo::closePhysRegsUsed(llvm::TargetRegisterInfo const&)\"},\n    {\"_ZNSt6vectorISt4pairIjjESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::pair<unsigned int, unsigned int>*, std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > > >, unsigned long, std::pair<unsigned int, unsigned int> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm19TargetRegisterClassEPNS1_14MachineOperandEESaIS7_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS7_S9_EEmRKS7_\", \"std::vector<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*>, std::allocator<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*> > >::_M_fill_insert(__gnu_cxx::__normal_iterator<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*>*, std::vector<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*>, std::allocator<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*> > > >, unsigned long, std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*> const&)\"},\n    {\"_ZNSt6vectorISt4pairIjjESaIS1_EE7reserveEm\", \"std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIPKN4llvm19TargetRegisterClassEPNS1_14MachineOperandEESaIS7_EE7reserveEm\", \"std::vector<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*>, std::allocator<std::pair<llvm::TargetRegisterClass const*, llvm::MachineOperand*> > >::reserve(unsigned long)\"},\n    {\"_ZN4llvm17MachineSSAUpdaterC1ERNS_15MachineFunctionEPNS_15SmallVectorImplIPNS_12MachineInstrEEE\", \"llvm::MachineSSAUpdater::MachineSSAUpdater(llvm::MachineFunction&, llvm::SmallVectorImpl<llvm::MachineInstr*>*)\"},\n    {\"_ZN4llvm17MachineSSAUpdaterC2ERNS_15MachineFunctionEPNS_15SmallVectorImplIPNS_12MachineInstrEEE\", \"llvm::MachineSSAUpdater::MachineSSAUpdater(llvm::MachineFunction&, llvm::SmallVectorImpl<llvm::MachineInstr*>*)\"},\n    {\"_ZN4llvm17MachineSSAUpdaterD1Ev\", \"llvm::MachineSSAUpdater::~MachineSSAUpdater()\"},\n    {\"_ZN4llvm17MachineSSAUpdaterD2Ev\", \"llvm::MachineSSAUpdater::~MachineSSAUpdater()\"},\n    {\"_ZN4llvm17MachineSSAUpdater10InitializeEj\", \"llvm::MachineSSAUpdater::Initialize(unsigned int)\"},\n    {\"_ZNK4llvm17MachineSSAUpdater16HasValueForBlockEPNS_17MachineBasicBlockE\", \"llvm::MachineSSAUpdater::HasValueForBlock(llvm::MachineBasicBlock*) const\"},\n    {\"_ZN4llvm17MachineSSAUpdater17AddAvailableValueEPNS_17MachineBasicBlockEj\", \"llvm::MachineSSAUpdater::AddAvailableValue(llvm::MachineBasicBlock*, unsigned int)\"},\n    {\"_ZN4llvm17MachineSSAUpdater20GetValueAtEndOfBlockEPNS_17MachineBasicBlockE\", \"llvm::MachineSSAUpdater::GetValueAtEndOfBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineSSAUpdater28GetValueAtEndOfBlockInternalEPNS_17MachineBasicBlockE\", \"llvm::MachineSSAUpdater::GetValueAtEndOfBlockInternal(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17MachineSSAUpdater23GetValueInMiddleOfBlockEPNS_17MachineBasicBlockE\", \"llvm::MachineSSAUpdater::GetValueInMiddleOfBlock(llvm::MachineBasicBlock*)\"},\n    {\"_Z12InsertNewDefjPN4llvm17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEPKNS_19TargetRegisterClassEPNS_19MachineRegisterInfoEPKNS_15TargetInstrInfoE\", \"InsertNewDef(unsigned int, llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::TargetRegisterClass const*, llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*)\"},\n    {\"_ZN4llvm17MachineSSAUpdater10RewriteUseERNS_14MachineOperandE\", \"llvm::MachineSSAUpdater::RewriteUse(llvm::MachineOperand&)\"},\n    {\"_ZN4llvm17MachineSSAUpdater14ReplaceRegWithEjj\", \"llvm::MachineSSAUpdater::ReplaceRegWith(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE8GetValueEPNS_17MachineBasicBlockE\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::GetValue(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE14BuildBlockListEPNS_17MachineBasicBlockEPNS_15SmallVectorImplIPNS2_6BBInfoEEE\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BuildBlockList(llvm::MachineBasicBlock*, llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE14FindDominatorsEPNS_15SmallVectorImplIPNS2_6BBInfoEEES5_\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::FindDominators(llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*>*, llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE17FindAvailableValsEPNS_15SmallVectorImplIPNS2_6BBInfoEEE\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::FindAvailableVals(llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_14SSAUpdaterImplINS_17MachineSSAUpdaterEE6BBInfoENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo* const&, std::pair<llvm::MachineBasicBlock*, llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_14SSAUpdaterImplINS_17MachineSSAUpdaterEE6BBInfoENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::BBInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE17CheckIfPHIMatchesEPNS_12MachineInstrE\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::CheckIfPHIMatches(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_17MachineSSAUpdaterEE17RecordMatchingPHIEPNS_12MachineInstrE\", \"llvm::SSAUpdaterImpl<llvm::MachineSSAUpdater>::RecordMatchingPHI(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MachineBasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, unsigned int const&, std::pair<llvm::MachineBasicBlock*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm28initializeMachineSinkingPassERNS_12PassRegistryE\", \"llvm::initializeMachineSinkingPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24createMachineSinkingPassEv\", \"llvm::createMachineSinkingPass()\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinkingD1Ev\", \"(anonymous namespace)::MachineSinking::~MachineSinking()\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinkingD0Ev\", \"(anonymous namespace)::MachineSinking::~MachineSinking()\"},\n    {\"_ZNK12_GLOBAL__N_114MachineSinking16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineSinking::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinking13releaseMemoryEv\", \"(anonymous namespace)::MachineSinking::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinking20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineSinking::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNK12_GLOBAL__N_114MachineSinking23AllUsesDominatedByBlockEjPN4llvm17MachineBasicBlockES3_RbS4_\", \"(anonymous namespace)::MachineSinking::AllUsesDominatedByBlock(unsigned int, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, bool&, bool&) const\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinking17SplitCriticalEdgeEPN4llvm12MachineInstrEPNS1_17MachineBasicBlockES5_b\", \"(anonymous namespace)::MachineSinking::SplitCriticalEdge(llvm::MachineInstr*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, bool)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114MachineSinkingEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::MachineSinking>()\"},\n    {\"_ZN4llvm8SmallSetISt4pairIPNS_17MachineBasicBlockES3_ELj8EE6insertERKS4_\", \"llvm::SmallSet<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>, 8u>::insert(std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPN4llvm17MachineBasicBlockES3_ES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE16_M_insert_uniqueERKS4_\", \"std::_Rb_tree<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>, std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>, std::_Identity<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> >, std::less<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> >, std::allocator<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> > >::_M_insert_unique(std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPN4llvm17MachineBasicBlockES3_ES4_St9_IdentityIS4_ESt4lessIS4_ESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>, std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*>, std::_Identity<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> >, std::less<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> >, std::allocator<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineBasicBlock*, llvm::MachineBasicBlock*> >*)\"},\n    {\"_ZN4llvm33initializeMachineVerifierPassPassERNS_12PassRegistryE\", \"llvm::initializeMachineVerifierPassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm25createMachineVerifierPassEPKc\", \"llvm::createMachineVerifierPass(char const*)\"},\n    {\"_ZNK4llvm15MachineFunction6verifyEPNS_4PassEPKc\", \"llvm::MachineFunction::verify(llvm::Pass*, char const*) const\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineVerifier::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier6reportEPKcPKN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::MachineVerifier::report(char const*, llvm::MachineBasicBlock const*)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier25visitMachineFunctionAfterEv\", \"(anonymous namespace)::MachineVerifier::visitMachineFunctionAfter()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockEN12_GLOBAL__N_115MachineVerifier6BBInfoENS_12DenseMapInfoIS3_EENS7_IS6_EEEixERKS3_\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, (anonymous namespace)::MachineVerifier::BBInfo, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<(anonymous namespace)::MachineVerifier::BBInfo> >::operator[](llvm::MachineBasicBlock const* const&)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier6reportEPKcPKN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineVerifier::report(char const*, llvm::MachineFunction const*)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier6reportEPKcPKN4llvm12MachineInstrE\", \"(anonymous namespace)::MachineVerifier::report(char const*, llvm::MachineInstr const*)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier6BBInfo9addPassedERKN4llvm8DenseSetIjNS2_12DenseMapInfoIjEEEE\", \"(anonymous namespace)::MachineVerifier::BBInfo::addPassed(llvm::DenseSet<unsigned int, llvm::DenseMapInfo<unsigned int> > const&)\"},\n    {\"_ZN12_GLOBAL__N_115MachineVerifier13markReachableEPKN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::MachineVerifier::markReachable(llvm::MachineBasicBlock const*)\"},\n    {\"_ZN12_GLOBAL__N_119MachineVerifierPassD1Ev\", \"(anonymous namespace)::MachineVerifierPass::~MachineVerifierPass()\"},\n    {\"_ZN12_GLOBAL__N_119MachineVerifierPassD0Ev\", \"(anonymous namespace)::MachineVerifierPass::~MachineVerifierPass()\"},\n    {\"_ZNK12_GLOBAL__N_119MachineVerifierPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MachineVerifierPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_119MachineVerifierPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::MachineVerifierPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_119MachineVerifierPassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::MachineVerifierPass>()\"},\n    {\"_ZN4llvm8DenseMapIjcNS_12DenseMapInfoIjEENS1_IcEEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> >::shrink_and_clear()\"},\n    {\"_ZNK4llvm11SlotIndexes15getMBBFromIndexENS_9SlotIndexE\", \"llvm::SlotIndexes::getMBBFromIndex(llvm::SlotIndex) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, char, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::MachineBasicBlock const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, char, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::MachineBasicBlock const* const&, char const&, std::pair<llvm::MachineBasicBlock const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, char, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjcNS_12DenseMapInfoIjEENS1_IcEEE8CopyFromERKS4_\", \"llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> >::CopyFrom(llvm::DenseMap<unsigned int, char, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<char> > const&)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_12MachineInstrENS_12DenseMapInfoIjEENS4_IS3_EEE8CopyFromERKS7_\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::CopyFrom(llvm::DenseMap<unsigned int, llvm::MachineInstr const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr const*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_12MachineInstrENS_12DenseMapInfoIjEENS4_IS3_EEE6insertERKSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr const*> >::insert(std::pair<unsigned int, llvm::MachineInstr const*> const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm12MachineInstrESt6vectorIS4_SaIS4_EEEEPKS3_ET_SC_SC_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, llvm::MachineInstr const*>(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, __gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, llvm::MachineInstr const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm26initializeOptimizePHIsPassERNS_12PassRegistryE\", \"llvm::initializeOptimizePHIsPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm22createOptimizePHIsPassEv\", \"llvm::createOptimizePHIsPass()\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIsD1Ev\", \"(anonymous namespace)::OptimizePHIs::~OptimizePHIs()\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIsD0Ev\", \"(anonymous namespace)::OptimizePHIs::~OptimizePHIs()\"},\n    {\"_ZNK12_GLOBAL__N_112OptimizePHIs16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::OptimizePHIs::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIs20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::OptimizePHIs::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIs21IsSingleValuePHICycleEPN4llvm12MachineInstrERjRNS1_11SmallPtrSetIS3_Lj16EEE\", \"(anonymous namespace)::OptimizePHIs::IsSingleValuePHICycle(llvm::MachineInstr*, unsigned int&, llvm::SmallPtrSet<llvm::MachineInstr*, 16u>&)\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIs14IsDeadPHICycleEPN4llvm12MachineInstrERNS1_11SmallPtrSetIS3_Lj16EEE\", \"(anonymous namespace)::OptimizePHIs::IsDeadPHICycle(llvm::MachineInstr*, llvm::SmallPtrSet<llvm::MachineInstr*, 16u>&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112OptimizePHIsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::OptimizePHIs>()\"},\n    {\"_ZN4llvm28initializePHIEliminationPassERNS_12PassRegistryE\", \"llvm::initializePHIEliminationPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114PHIEliminationEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PHIElimination>()\"},\n    {\"_ZN12_GLOBAL__N_114PHIEliminationD1Ev\", \"(anonymous namespace)::PHIElimination::~PHIElimination()\"},\n    {\"_ZN12_GLOBAL__N_114PHIEliminationD0Ev\", \"(anonymous namespace)::PHIElimination::~PHIElimination()\"},\n    {\"_ZNK12_GLOBAL__N_114PHIElimination16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PHIElimination::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114PHIElimination20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::PHIElimination::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIjjEjNS_12DenseMapInfoIS2_EENS3_IjEEE5clearEv\", \"llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> >, llvm::DenseMapInfo<unsigned int> >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIjjEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> >, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_12DenseMapInfoIjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE5resetEj\", \"llvm::SparseBitVector<128u>::reset(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIjjEjNS_12DenseMapInfoIS2_EENS3_IjEEE15LookupBucketForERKS2_RPS1_IS2_jE\", \"llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> >, llvm::DenseMapInfo<unsigned int> >::LookupBucketFor(std::pair<unsigned int, unsigned int> const&, std::pair<std::pair<unsigned int, unsigned int>, unsigned int>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIjjEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPS1_IS2_jE\", \"llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> >, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(std::pair<unsigned int, unsigned int> const&, unsigned int const&, std::pair<std::pair<unsigned int, unsigned int>, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIjjEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<std::pair<unsigned int, unsigned int>, unsigned int, llvm::DenseMapInfo<std::pair<unsigned int, unsigned int> >, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_12DenseMapInfoIjEEE15LookupBucketForERKS2_RPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<unsigned int> >::LookupBucketFor(llvm::MachineInstr* const&, std::pair<llvm::MachineInstr*, unsigned int>*&) const\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_12DenseMapInfoIjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MachineInstr* const&, unsigned int const&, std::pair<llvm::MachineInstr*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEjNS_27MachineInstrExpressionTraitENS_12DenseMapInfoIjEEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr*, unsigned int, llvm::MachineInstrExpressionTrait, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm22findPHICopyInsertPointEPNS_17MachineBasicBlockES1_j\", \"llvm::findPHICopyInsertPoint(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, unsigned int)\"},\n    {\"_Z30createDefaultRegisterAllocatorv\", \"createDefaultRegisterAllocator()\"},\n    {\"_ZN4llvm23createRegisterAllocatorENS_10CodeGenOpt5LevelE\", \"llvm::createRegisterAllocator(llvm::CodeGenOpt::Level)\"},\n    {\"_ZN4llvm16RegisterRegAllocD1Ev\", \"llvm::RegisterRegAlloc::~RegisterRegAlloc()\"},\n    {\"_ZN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEED1Ev\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE4doneEv\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::done()\"},\n    {\"_ZN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE16handleOccurrenceEjNS_9StringRefESA_\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEED0Ev\", \"llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_12FunctionPassEvEE5parseERNS0_6OptionENS_9StringRefES9_RS5_\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::FunctionPass* (*&)())\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserIPFPNS_12FunctionPassEvEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::FunctionPass* (*)()>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm18RegisterPassParserINS_16RegisterRegAllocEED1Ev\", \"llvm::RegisterPassParser<llvm::RegisterRegAlloc>::~RegisterPassParser()\"},\n    {\"_ZN4llvm18RegisterPassParserINS_16RegisterRegAllocEED0Ev\", \"llvm::RegisterPassParser<llvm::RegisterRegAlloc>::~RegisterPassParser()\"},\n    {\"_ZN4llvm18RegisterPassParserINS_16RegisterRegAllocEE9NotifyAddEPKcPFPvvES4_\", \"llvm::RegisterPassParser<llvm::RegisterRegAlloc>::NotifyAdd(char const*, void* (*)(), char const*)\"},\n    {\"_ZN4llvm18RegisterPassParserINS_16RegisterRegAllocEE12NotifyRemoveEPKc\", \"llvm::RegisterPassParser<llvm::RegisterRegAlloc>::NotifyRemove(char const*)\"},\n    {\"_ZThn16_N4llvm18RegisterPassParserINS_16RegisterRegAllocEED1Ev\", \"non-virtual thunk to llvm::RegisterPassParser<llvm::RegisterRegAlloc>::~RegisterPassParser()\"},\n    {\"_ZThn16_N4llvm18RegisterPassParserINS_16RegisterRegAllocEED0Ev\", \"non-virtual thunk to llvm::RegisterPassParser<llvm::RegisterRegAlloc>::~RegisterPassParser()\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_12FunctionPassEvEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_12FunctionPassEvEE9getOptionEj\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserIPFPNS_12FunctionPassEvEE14getDescriptionEj\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_12FunctionPassEvEED1Ev\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIPFPNS_12FunctionPassEvEED0Ev\", \"llvm::cl::parser<llvm::FunctionPass* (*)()>::~parser()\"},\n    {\"_ZN4llvm31initializePeepholeOptimizerPassERNS_12PassRegistryE\", \"llvm::initializePeepholeOptimizerPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm27createPeepholeOptimizerPassEv\", \"llvm::createPeepholeOptimizerPass()\"},\n    {\"_ZN12_GLOBAL__N_117PeepholeOptimizerD1Ev\", \"(anonymous namespace)::PeepholeOptimizer::~PeepholeOptimizer()\"},\n    {\"_ZN12_GLOBAL__N_117PeepholeOptimizerD0Ev\", \"(anonymous namespace)::PeepholeOptimizer::~PeepholeOptimizer()\"},\n    {\"_ZNK12_GLOBAL__N_117PeepholeOptimizer16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PeepholeOptimizer::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_117PeepholeOptimizer20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_117PeepholeOptimizerEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PeepholeOptimizer>()\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12MachineInstrENS_12DenseMapInfoIjEENS3_IS2_EEE6insertERKSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr*> >::insert(std::pair<unsigned int, llvm::MachineInstr*> const&)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12MachineInstrENS_12DenseMapInfoIjEENS3_IS2_EEE16InsertIntoBucketERKjRKS2_PSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr*> >::InsertIntoBucket(unsigned int const&, llvm::MachineInstr* const&, std::pair<unsigned int, llvm::MachineInstr*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12MachineInstrENS_12DenseMapInfoIjEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_12MachineInstrENS_12DenseMapInfoIjEENS3_IS2_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, llvm::MachineInstr*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MachineInstr*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm14AntiDepBreakerD0Ev\", \"llvm::AntiDepBreaker::~AntiDepBreaker()\"},\n    {\"_ZN4llvm14AntiDepBreakerD1Ev\", \"llvm::AntiDepBreaker::~AntiDepBreaker()\"},\n    {\"_ZN4llvm14AntiDepBreakerD2Ev\", \"llvm::AntiDepBreaker::~AntiDepBreaker()\"},\n    {\"_ZN4llvm21createPostRASchedulerENS_10CodeGenOpt5LevelE\", \"llvm::createPostRAScheduler(llvm::CodeGenOpt::Level)\"},\n    {\"_ZN12_GLOBAL__N_115PostRASchedulerD1Ev\", \"(anonymous namespace)::PostRAScheduler::~PostRAScheduler()\"},\n    {\"_ZN12_GLOBAL__N_115PostRASchedulerD0Ev\", \"(anonymous namespace)::PostRAScheduler::~PostRAScheduler()\"},\n    {\"_ZNK12_GLOBAL__N_115PostRAScheduler11getPassNameEv\", \"(anonymous namespace)::PostRAScheduler::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_115PostRAScheduler16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PostRAScheduler::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_115PostRAScheduler20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::PostRAScheduler::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDList10StartBlockEPN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::SchedulePostRATDList::StartBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDList11FinishBlockEv\", \"(anonymous namespace)::SchedulePostRATDList::FinishBlock()\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDListD1Ev\", \"(anonymous namespace)::SchedulePostRATDList::~SchedulePostRATDList()\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDListD0Ev\", \"(anonymous namespace)::SchedulePostRATDList::~SchedulePostRATDList()\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDList8ScheduleEv\", \"(anonymous namespace)::SchedulePostRATDList::Schedule()\"},\n    {\"_ZN12_GLOBAL__N_120SchedulePostRATDList17ReleaseSuccessorsEPN4llvm5SUnitE\", \"(anonymous namespace)::SchedulePostRATDList::ReleaseSuccessors(llvm::SUnit*)\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEEC2IA24_cNS0_4descENS0_11initializerIA5_cEENS0_12OptionHiddenEEERKT_RKT0_RKT1_RKT2_\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::opt<char [24], llvm::cl::desc, llvm::cl::initializer<char [5]>, llvm::cl::OptionHidden>(char const (&) [24], llvm::cl::desc const&, llvm::cl::initializer<char [5]> const&, llvm::cl::OptionHidden const&)\"},\n    {\"_ZN4llvm20LatencyPriorityQueueD1Ev\", \"llvm::LatencyPriorityQueue::~LatencyPriorityQueue()\"},\n    {\"_ZN4llvm17ScheduleDAGInstrsD2Ev\", \"llvm::ScheduleDAGInstrs::~ScheduleDAGInstrs()\"},\n    {\"_ZNK4llvm11ScheduleDAG22addCustomGraphFeaturesERNS_11GraphWriterIPS0_EE\", \"llvm::ScheduleDAG::addCustomGraphFeatures(llvm::GraphWriter<llvm::ScheduleDAG*>&) const\"},\n    {\"_ZNK4llvm11ScheduleDAG18ForceUnitLatenciesEv\", \"llvm::ScheduleDAG::ForceUnitLatencies() const\"},\n    {\"_ZNSt6vectorIPN4llvm5SUnitESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SUnit**, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, llvm::SUnit* const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_4SDepEEaSERKS2_\", \"llvm::SmallVectorImpl<llvm::SDep>::operator=(llvm::SmallVectorImpl<llvm::SDep> const&)\"},\n    {\"_ZNSt6vectorIN4llvm5SUnitESaIS1_EE15_M_erase_at_endEPS1_\", \"std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >::_M_erase_at_end(llvm::SUnit*)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrsD1Ev\", \"llvm::ScheduleDAGInstrs::~ScheduleDAGInstrs()\"},\n    {\"_ZN4llvm17ScheduleDAGInstrsD0Ev\", \"llvm::ScheduleDAGInstrs::~ScheduleDAGInstrs()\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPKN4llvm14MachineOperandEjEESt10_Select1stIS7_ESt4lessIjESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > >*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueueD0Ev\", \"llvm::LatencyPriorityQueue::~LatencyPriorityQueue()\"},\n    {\"_ZNK4llvm20LatencyPriorityQueue10isBottomUpEv\", \"llvm::LatencyPriorityQueue::isBottomUp() const\"},\n    {\"_ZN4llvm20LatencyPriorityQueue9initNodesERSt6vectorINS_5SUnitESaIS2_EE\", \"llvm::LatencyPriorityQueue::initNodes(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >&)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue7addNodeEPKNS_5SUnitE\", \"llvm::LatencyPriorityQueue::addNode(llvm::SUnit const*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue10updateNodeEPKNS_5SUnitE\", \"llvm::LatencyPriorityQueue::updateNode(llvm::SUnit const*)\"},\n    {\"_ZN4llvm20LatencyPriorityQueue12releaseStateEv\", \"llvm::LatencyPriorityQueue::releaseState()\"},\n    {\"_ZNK4llvm20LatencyPriorityQueue5emptyEv\", \"llvm::LatencyPriorityQueue::empty() const\"},\n    {\"_ZNK4llvm23SchedulingPriorityQueue17tracksRegPressureEv\", \"llvm::SchedulingPriorityQueue::tracksRegPressure() const\"},\n    {\"_ZNK4llvm23SchedulingPriorityQueue7isReadyEPNS_5SUnitE\", \"llvm::SchedulingPriorityQueue::isReady(llvm::SUnit*) const\"},\n    {\"_ZN4llvm23SchedulingPriorityQueue15UnscheduledNodeEPNS_5SUnitE\", \"llvm::SchedulingPriorityQueue::UnscheduledNode(llvm::SUnit*)\"},\n    {\"_ZN4llvm23SchedulingPriorityQueueD1Ev\", \"llvm::SchedulingPriorityQueue::~SchedulingPriorityQueue()\"},\n    {\"_ZN4llvm23SchedulingPriorityQueueD0Ev\", \"llvm::SchedulingPriorityQueue::~SchedulingPriorityQueue()\"},\n    {\"_ZNK4llvm23SchedulingPriorityQueue4dumpEPNS_11ScheduleDAGE\", \"llvm::SchedulingPriorityQueue::dump(llvm::ScheduleDAG*) const\"},\n    {\"_ZN4llvm23SchedulingPriorityQueue13ScheduledNodeEPNS_5SUnitE\", \"llvm::SchedulingPriorityQueue::ScheduledNode(llvm::SUnit*)\"},\n    {\"_ZN4llvm31initializePreAllocSplittingPassERNS_12PassRegistryE\", \"llvm::initializePreAllocSplittingPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_117PreAllocSplittingEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PreAllocSplitting>()\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplittingD1Ev\", \"(anonymous namespace)::PreAllocSplitting::~PreAllocSplitting()\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplittingD0Ev\", \"(anonymous namespace)::PreAllocSplitting::~PreAllocSplitting()\"},\n    {\"_ZNK12_GLOBAL__N_117PreAllocSplitting11getPassNameEv\", \"(anonymous namespace)::PreAllocSplitting::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_117PreAllocSplitting5printERN4llvm11raw_ostreamEPKNS1_6ModuleE\", \"(anonymous namespace)::PreAllocSplitting::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK12_GLOBAL__N_117PreAllocSplitting16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PreAllocSplitting::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting13releaseMemoryEv\", \"(anonymous namespace)::PreAllocSplitting::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::PreAllocSplitting::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting9FoldSpillEjPKN4llvm19TargetRegisterClassEPNS1_12MachineInstrES6_PNS1_17MachineBasicBlockERiRNS1_11SmallPtrSetIS6_Lj4EEE\", \"(anonymous namespace)::PreAllocSplitting::FoldSpill(unsigned int, llvm::TargetRegisterClass const*, llvm::MachineInstr*, llvm::MachineInstr*, llvm::MachineBasicBlock*, int&, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting14findSpillPointEPN4llvm17MachineBasicBlockEPNS1_12MachineInstrES5_RNS1_11SmallPtrSetIS5_Lj4EEE\", \"(anonymous namespace)::PreAllocSplitting::findSpillPoint(llvm::MachineBasicBlock*, llvm::MachineInstr*, llvm::MachineInstr*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting20CreateSpillStackSlotEjPKN4llvm19TargetRegisterClassE\", \"(anonymous namespace)::PreAllocSplitting::CreateSpillStackSlot(unsigned int, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting23UpdateSpillSlotIntervalEPN4llvm6VNInfoENS1_9SlotIndexES4_\", \"(anonymous namespace)::PreAllocSplitting::UpdateSpillSlotInterval(llvm::VNInfo*, llvm::SlotIndex, llvm::SlotIndex)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting23ReconstructLiveIntervalEPN4llvm12LiveIntervalE\", \"(anonymous namespace)::PreAllocSplitting::ReconstructLiveInterval(llvm::LiveInterval*)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting13RenumberValnoEPN4llvm6VNInfoE\", \"(anonymous namespace)::PreAllocSplitting::RenumberValno(llvm::VNInfo*)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting22PerformPHIConstructionEN4llvm14ilist_iteratorINS1_12MachineInstrEEEPNS1_17MachineBasicBlockEPNS1_12LiveIntervalERNS1_11SmallPtrSetIPS3_Lj4EEERNS1_8DenseMapIS6_NS9_ISA_Lj2EEENS1_12DenseMapInfoIS6_EENSF_ISE_EEEESJ_RNSD_ISA_PNS1_6VNInfoENSF_ISA_EENSF_ISL_EEEERNSD_IS6_SL_SG_SN_EESR_bb\", \"(anonymous namespace)::PreAllocSplitting::PerformPHIConstruction(llvm::ilist_iterator<llvm::MachineInstr>, llvm::MachineBasicBlock*, llvm::LiveInterval*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >&, llvm::DenseMap<llvm::MachineInstr*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting30PerformPHIConstructionFallBackEN4llvm14ilist_iteratorINS1_12MachineInstrEEEPNS1_17MachineBasicBlockEPNS1_12LiveIntervalERNS1_11SmallPtrSetIPS3_Lj4EEERNS1_8DenseMapIS6_NS9_ISA_Lj2EEENS1_12DenseMapInfoIS6_EENSF_ISE_EEEESJ_RNSD_ISA_PNS1_6VNInfoENSF_ISA_EENSF_ISL_EEEERNSD_IS6_SL_SG_SN_EESR_bb\", \"(anonymous namespace)::PreAllocSplitting::PerformPHIConstructionFallBack(llvm::ilist_iterator<llvm::MachineInstr>, llvm::MachineBasicBlock*, llvm::LiveInterval*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >&, llvm::DenseMap<llvm::MachineInstr*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, bool, bool)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6VNInfoENS_11SmallPtrSetIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::VNInfo*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 4u> > >::FindAndConstruct(llvm::VNInfo* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6VNInfoENS_11SmallPtrSetIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE16InsertIntoBucketERKS2_RKS6_PSt4pairIS2_S6_E\", \"llvm::DenseMap<llvm::VNInfo*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 4u> > >::InsertIntoBucket(llvm::VNInfo* const&, llvm::SmallPtrSet<llvm::MachineInstr*, 4u> const&, std::pair<llvm::VNInfo*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6VNInfoENS_11SmallPtrSetIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::VNInfo*, llvm::SmallPtrSet<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 4u> > >::grow(unsigned int)\"},\n    {\"_ZSt6__findIPPN4llvm6VNInfoES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"llvm::VNInfo** std::__find<llvm::VNInfo**, llvm::VNInfo*>(llvm::VNInfo**, llvm::VNInfo**, llvm::VNInfo* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_6VNInfoENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::VNInfo* const&, std::pair<llvm::MachineBasicBlock*, llvm::VNInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockEPNS_6VNInfoENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::VNInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPNS_6VNInfoENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::VNInfo*> >::InsertIntoBucket(llvm::MachineInstr* const&, llvm::VNInfo* const&, std::pair<llvm::MachineInstr*, llvm::VNInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_12MachineInstrEPNS_6VNInfoENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::MachineInstr*>, llvm::DenseMapInfo<llvm::VNInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_11SmallPtrSetIPNS_12MachineInstrELj2EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >::FindAndConstruct(llvm::MachineBasicBlock* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_11SmallPtrSetIPNS_12MachineInstrELj2EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE16InsertIntoBucketERKS2_RKS6_PSt4pairIS2_S6_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::SmallPtrSet<llvm::MachineInstr*, 2u> const&, std::pair<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_11SmallPtrSetIPNS_12MachineInstrELj2EEENS_12DenseMapInfoIS2_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineInstr*, 2u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::MachineInstr*, 2u> > >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E15LookupBucketForERKS1_RPSt4pairIS1_S1_E\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::LookupBucketFor(llvm::SlotIndex const&, std::pair<llvm::SlotIndex, llvm::SlotIndex>*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E16InsertIntoBucketERKS1_S6_PSt4pairIS1_S1_E\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::InsertIntoBucket(llvm::SlotIndex const&, llvm::SlotIndex const&, std::pair<llvm::SlotIndex, llvm::SlotIndex>*)\"},\n    {\"_ZN4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E4growEj\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E4findERKS1_\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::find(llvm::SlotIndex const&) const\"},\n    {\"_ZN4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E5clearEv\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::clear()\"},\n    {\"_ZN4llvm8DenseMapINS_9SlotIndexES1_NS_12DenseMapInfoIS1_EES3_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SlotIndex, llvm::SlotIndex, llvm::DenseMapInfo<llvm::SlotIndex>, llvm::DenseMapInfo<llvm::SlotIndex> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIjiNS_12DenseMapInfoIjEENS1_IiEEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm33initializeProcessImplicitDefsPassERNS_12PassRegistryE\", \"llvm::initializeProcessImplicitDefsPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm19ProcessImplicitDefs16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::ProcessImplicitDefs::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm19ProcessImplicitDefs22CanTurnIntoImplicitDefEPNS_12MachineInstrEjjPKNS_15TargetInstrInfoERNS_8SmallSetIjLj8EEE\", \"llvm::ProcessImplicitDefs::CanTurnIntoImplicitDef(llvm::MachineInstr*, unsigned int, unsigned int, llvm::TargetInstrInfo const*, llvm::SmallSet<unsigned int, 8u>&)\"},\n    {\"_ZN4llvm19ProcessImplicitDefs20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::ProcessImplicitDefs::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm19ProcessImplicitDefsD1Ev\", \"llvm::ProcessImplicitDefs::~ProcessImplicitDefs()\"},\n    {\"_ZN4llvm19ProcessImplicitDefsD0Ev\", \"llvm::ProcessImplicitDefs::~ProcessImplicitDefs()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_19ProcessImplicitDefsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::ProcessImplicitDefs>()\"},\n    {\"_ZN4llvm17initializePEIPassERNS_12PassRegistryE\", \"llvm::initializePEIPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm30createPrologEpilogCodeInserterEv\", \"llvm::createPrologEpilogCodeInserter()\"},\n    {\"_ZN4llvm3PEI20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::PEI::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI25calculateCallsInformationERNS_15MachineFunctionE\", \"llvm::PEI::calculateCallsInformation(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI29calculateCalleeSavedRegistersERNS_15MachineFunctionE\", \"llvm::PEI::calculateCalleeSavedRegisters(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI26insertCSRSpillsAndRestoresERNS_15MachineFunctionE\", \"llvm::PEI::insertCSRSpillsAndRestores(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI27calculateFrameObjectOffsetsERNS_15MachineFunctionE\", \"llvm::PEI::calculateFrameObjectOffsets(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI22insertPrologEpilogCodeERNS_15MachineFunctionE\", \"llvm::PEI::insertPrologEpilogCode(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI19replaceFrameIndicesERNS_15MachineFunctionE\", \"llvm::PEI::replaceFrameIndices(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI24scavengeFrameVirtualRegsERNS_15MachineFunctionE\", \"llvm::PEI::scavengeFrameVirtualRegs(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm8SmallSetIiLj16EE6insertERKi\", \"llvm::SmallSet<int, 16u>::insert(int const&)\"},\n    {\"_ZNSt6vectorIN4llvm15CalleeSavedInfoESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::CalleeSavedInfo*, std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > >, llvm::CalleeSavedInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm14ilist_iteratorINS0_12MachineInstrEEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::ilist_iterator<llvm::MachineInstr>, std::allocator<llvm::ilist_iterator<llvm::MachineInstr> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ilist_iterator<llvm::MachineInstr>*, std::vector<llvm::ilist_iterator<llvm::MachineInstr>, std::allocator<llvm::ilist_iterator<llvm::MachineInstr> > > >, llvm::ilist_iterator<llvm::MachineInstr> const&)\"},\n    {\"_ZNSt6vectorIN4llvm15CalleeSavedInfoESaIS1_EEaSERKS3_\", \"std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> >::operator=(std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&)\"},\n    {\"_ZN4llvm3PEIC2Ev\", \"llvm::PEI::PEI()\"},\n    {\"_ZNK4llvm3PEI11getPassNameEv\", \"llvm::PEI::getPassName() const\"},\n    {\"_ZN4llvm15callDefaultCtorINS_3PEIEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::PEI>()\"},\n    {\"_ZN4llvm17PseudoSourceValue8getStackEv\", \"llvm::PseudoSourceValue::getStack()\"},\n    {\"_ZN4llvm17PseudoSourceValue6getGOTEv\", \"llvm::PseudoSourceValue::getGOT()\"},\n    {\"_ZN4llvm17PseudoSourceValue12getJumpTableEv\", \"llvm::PseudoSourceValue::getJumpTable()\"},\n    {\"_ZN4llvm17PseudoSourceValue15getConstantPoolEv\", \"llvm::PseudoSourceValue::getConstantPool()\"},\n    {\"_ZN4llvm17PseudoSourceValueC1ENS_5Value7ValueTyE\", \"llvm::PseudoSourceValue::PseudoSourceValue(llvm::Value::ValueTy)\"},\n    {\"_ZN4llvm17PseudoSourceValueC2ENS_5Value7ValueTyE\", \"llvm::PseudoSourceValue::PseudoSourceValue(llvm::Value::ValueTy)\"},\n    {\"_ZNK4llvm17PseudoSourceValue11printCustomERNS_11raw_ostreamE\", \"llvm::PseudoSourceValue::printCustom(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm17PseudoSourceValue13getFixedStackEi\", \"llvm::PseudoSourceValue::getFixedStack(int)\"},\n    {\"_ZNK4llvm17PseudoSourceValue10isConstantEPKNS_16MachineFrameInfoE\", \"llvm::PseudoSourceValue::isConstant(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm17PseudoSourceValue9isAliasedEPKNS_16MachineFrameInfoE\", \"llvm::PseudoSourceValue::isAliased(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm17PseudoSourceValue8mayAliasEPKNS_16MachineFrameInfoE\", \"llvm::PseudoSourceValue::mayAlias(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm27FixedStackPseudoSourceValue10isConstantEPKNS_16MachineFrameInfoE\", \"llvm::FixedStackPseudoSourceValue::isConstant(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm27FixedStackPseudoSourceValue9isAliasedEPKNS_16MachineFrameInfoE\", \"llvm::FixedStackPseudoSourceValue::isAliased(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm27FixedStackPseudoSourceValue8mayAliasEPKNS_16MachineFrameInfoE\", \"llvm::FixedStackPseudoSourceValue::mayAlias(llvm::MachineFrameInfo const*) const\"},\n    {\"_ZNK4llvm27FixedStackPseudoSourceValue11printCustomERNS_11raw_ostreamE\", \"llvm::FixedStackPseudoSourceValue::printCustom(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_112PSVGlobalsTyEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::PSVGlobalsTy>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_112PSVGlobalsTyEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::PSVGlobalsTy>::call(void*)\"},\n    {\"_ZN4llvm17PseudoSourceValueD1Ev\", \"llvm::PseudoSourceValue::~PseudoSourceValue()\"},\n    {\"_ZN4llvm17PseudoSourceValueD0Ev\", \"llvm::PseudoSourceValue::~PseudoSourceValue()\"},\n    {\"_ZN4llvm27FixedStackPseudoSourceValueD1Ev\", \"llvm::FixedStackPseudoSourceValue::~FixedStackPseudoSourceValue()\"},\n    {\"_ZN4llvm27FixedStackPseudoSourceValueD0Ev\", \"llvm::FixedStackPseudoSourceValue::~FixedStackPseudoSourceValue()\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm17PseudoSourceValueEESt10_Select1stIS6_ESt4lessIiESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<int, std::pair<int const, llvm::PseudoSourceValue const*>, std::_Select1st<std::pair<int const, llvm::PseudoSourceValue const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::PseudoSourceValue const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, llvm::PseudoSourceValue const*> >, std::pair<int const, llvm::PseudoSourceValue const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm17PseudoSourceValueEESt10_Select1stIS6_ESt4lessIiESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<int, std::pair<int const, llvm::PseudoSourceValue const*>, std::_Select1st<std::pair<int const, llvm::PseudoSourceValue const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::PseudoSourceValue const*> > >::_M_insert_unique(std::pair<int const, llvm::PseudoSourceValue const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKiPKN4llvm17PseudoSourceValueEESt10_Select1stIS6_ESt4lessIiESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<int, std::pair<int const, llvm::PseudoSourceValue const*>, std::_Select1st<std::pair<int const, llvm::PseudoSourceValue const*> >, std::less<int>, std::allocator<std::pair<int const, llvm::PseudoSourceValue const*> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, llvm::PseudoSourceValue const*> >*)\"},\n    {\"_ZN4llvm27createFastRegisterAllocatorEv\", \"llvm::createFastRegisterAllocator()\"},\n    {\"_ZN12_GLOBAL__N_16RAFastD1Ev\", \"(anonymous namespace)::RAFast::~RAFast()\"},\n    {\"_ZN12_GLOBAL__N_16RAFastD0Ev\", \"(anonymous namespace)::RAFast::~RAFast()\"},\n    {\"_ZNK12_GLOBAL__N_16RAFast11getPassNameEv\", \"(anonymous namespace)::RAFast::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_16RAFast16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::RAFast::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_16RAFast20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::RAFast::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast13definePhysRegEPN4llvm12MachineInstrEjNS0_8RegStateE\", \"(anonymous namespace)::RAFast::definePhysReg(llvm::MachineInstr*, unsigned int, (anonymous namespace)::RAFast::RegState)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast10setPhysRegEPN4llvm12MachineInstrEjj\", \"(anonymous namespace)::RAFast::setPhysReg(llvm::MachineInstr*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast13reloadVirtRegEPN4llvm12MachineInstrEjjj\", \"(anonymous namespace)::RAFast::reloadVirtReg(llvm::MachineInstr*, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast8spillAllEPN4llvm12MachineInstrE\", \"(anonymous namespace)::RAFast::spillAll(llvm::MachineInstr*)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast13defineVirtRegEPN4llvm12MachineInstrEjjj\", \"(anonymous namespace)::RAFast::defineVirtReg(llvm::MachineInstr*, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjN12_GLOBAL__N_16RAFast7LiveRegENS_12DenseMapInfoIjEENS4_IS3_EEE6insertERKSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, (anonymous namespace)::RAFast::LiveReg, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<(anonymous namespace)::RAFast::LiveReg> >::insert(std::pair<unsigned int, (anonymous namespace)::RAFast::LiveReg> const&)\"},\n    {\"_ZN12_GLOBAL__N_16RAFast12allocVirtRegEPN4llvm12MachineInstrERSt4pairIjNS0_7LiveRegEEj\", \"(anonymous namespace)::RAFast::allocVirtReg(llvm::MachineInstr*, std::pair<unsigned int, (anonymous namespace)::RAFast::LiveReg>&, unsigned int)\"},\n    {\"_ZNK12_GLOBAL__N_16RAFast13calcSpillCostEj\", \"(anonymous namespace)::RAFast::calcSpillCost(unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_16RAFast12spillVirtRegEN4llvm14ilist_iteratorINS1_12MachineInstrEEENS1_16DenseMapIteratorIjNS0_7LiveRegENS1_12DenseMapInfoIjEENS7_IS6_EELb0EEE\", \"(anonymous namespace)::RAFast::spillVirtReg(llvm::ilist_iterator<llvm::MachineInstr>, llvm::DenseMapIterator<unsigned int, (anonymous namespace)::RAFast::LiveReg, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<(anonymous namespace)::RAFast::LiveReg>, false>)\"},\n    {\"_ZN4llvm33createLinearScanRegisterAllocatorEv\", \"llvm::createLinearScanRegisterAllocator()\"},\n    {\"_ZN4llvm23initializeRALinScanPassERNS_12PassRegistryE\", \"llvm::initializeRALinScanPass(llvm::PassRegistry&)\"},\n    {\"_ZN12_GLOBAL__N_19RALinScanC1Ev\", \"(anonymous namespace)::RALinScan::RALinScan()\"},\n    {\"_ZN12_GLOBAL__N_19RALinScanD1Ev\", \"(anonymous namespace)::RALinScan::~RALinScan()\"},\n    {\"_ZN12_GLOBAL__N_19RALinScanD0Ev\", \"(anonymous namespace)::RALinScan::~RALinScan()\"},\n    {\"_ZNK12_GLOBAL__N_19RALinScan11getPassNameEv\", \"(anonymous namespace)::RALinScan::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_19RALinScan16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::RALinScan::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::RALinScan::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan30assignRegOrStackSlotAtIntervalEPN4llvm12LiveIntervalE\", \"(anonymous namespace)::RALinScan::assignRegOrStackSlotAtInterval(llvm::LiveInterval*)\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan14getFreePhysRegEPN4llvm12LiveIntervalE\", \"(anonymous namespace)::RALinScan::getFreePhysReg(llvm::LiveInterval*)\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan18updateSpillWeightsERSt6vectorIfSaIfEEjfPKN4llvm19TargetRegisterClassE\", \"(anonymous namespace)::RALinScan::updateSpillWeights(std::vector<float, std::allocator<float> >&, unsigned int, float, llvm::TargetRegisterClass const*)\"},\n    {\"_ZSt4sortIPPN4llvm12LiveIntervalEN12_GLOBAL__N_18LISorterEEvT_S6_T0_\", \"void std::sort<llvm::LiveInterval**, (anonymous namespace)::LISorter>(llvm::LiveInterval**, llvm::LiveInterval**, (anonymous namespace)::LISorter)\"},\n    {\"_Z17getConflictWeightPN4llvm12LiveIntervalEjPNS_13LiveIntervalsEPNS_19MachineRegisterInfoEPNS_15MachineLoopInfoE\", \"getConflictWeight(llvm::LiveInterval*, unsigned int, llvm::LiveIntervals*, llvm::MachineRegisterInfo*, llvm::MachineLoopInfo*)\"},\n    {\"_ZSt16__introsort_loopIPPN4llvm12LiveIntervalElN12_GLOBAL__N_18LISorterEEvT_S6_T0_T1_\", \"void std::__introsort_loop<llvm::LiveInterval**, long, (anonymous namespace)::LISorter>(llvm::LiveInterval**, llvm::LiveInterval**, long, (anonymous namespace)::LISorter)\"},\n    {\"_ZSt16__insertion_sortIPPN4llvm12LiveIntervalEN12_GLOBAL__N_18LISorterEEvT_S6_T0_\", \"void std::__insertion_sort<llvm::LiveInterval**, (anonymous namespace)::LISorter>(llvm::LiveInterval**, llvm::LiveInterval**, (anonymous namespace)::LISorter)\"},\n    {\"_ZSt25__unguarded_linear_insertIPPN4llvm12LiveIntervalES2_N12_GLOBAL__N_18LISorterEEvT_T0_T1_\", \"void std::__unguarded_linear_insert<llvm::LiveInterval**, llvm::LiveInterval*, (anonymous namespace)::LISorter>(llvm::LiveInterval**, llvm::LiveInterval*, (anonymous namespace)::LISorter)\"},\n    {\"_ZSt13__adjust_heapIPPN4llvm12LiveIntervalElS2_N12_GLOBAL__N_18LISorterEEvT_T0_S7_T1_T2_\", \"void std::__adjust_heap<llvm::LiveInterval**, long, llvm::LiveInterval*, (anonymous namespace)::LISorter>(llvm::LiveInterval**, long, long, llvm::LiveInterval*, (anonymous namespace)::LISorter)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIjfESt6vectorIS3_SaIS3_EEEElN12_GLOBAL__N_113WeightCompareEEvT_SB_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, long, (anonymous namespace)::WeightCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, __gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, long, (anonymous namespace)::WeightCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIjfESt6vectorIS3_SaIS3_EEEEN12_GLOBAL__N_113WeightCompareEEvT_SB_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, (anonymous namespace)::WeightCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, __gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, (anonymous namespace)::WeightCompare)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIjfESt6vectorIS3_SaIS3_EEEElS3_N12_GLOBAL__N_113WeightCompareEEvT_T0_SC_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, long, std::pair<unsigned int, float>, (anonymous namespace)::WeightCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, long, long, std::pair<unsigned int, float>, (anonymous namespace)::WeightCompare)\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan14getFreePhysRegEPN4llvm12LiveIntervalEPKNS1_19TargetRegisterClassEjRNS1_11SmallVectorIjLj256EEEb\", \"(anonymous namespace)::RALinScan::getFreePhysReg(llvm::LiveInterval*, llvm::TargetRegisterClass const*, unsigned int, llvm::SmallVector<unsigned int, 256u>&, bool)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_19RALinScanEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::RALinScan>()\"},\n    {\"_ZN4llvm15SmallVectorImplIjE6resizeEjRKj\", \"llvm::SmallVectorImpl<unsigned int>::resize(unsigned int, unsigned int const&)\"},\n    {\"_ZNK4llvm11SlotIndexes14findLiveInMBBsENS_9SlotIndexES1_RNS_15SmallVectorImplIPNS_17MachineBasicBlockEEE\", \"llvm::SlotIndexes::findLiveInMBBs(llvm::SlotIndex, llvm::SlotIndex, llvm::SmallVectorImpl<llvm::MachineBasicBlock*>&) const\"},\n    {\"_ZNSt14priority_queueIPN4llvm12LiveIntervalENS0_11SmallVectorIS2_Lj64EEENS0_11greater_ptrIS1_EEE4pushERKS2_\", \"std::priority_queue<llvm::LiveInterval*, llvm::SmallVector<llvm::LiveInterval*, 64u>, llvm::greater_ptr<llvm::LiveInterval> >::push(llvm::LiveInterval* const&)\"},\n    {\"_ZSt6__findIPKjjET_S2_S2_RKT0_St26random_access_iterator_tag\", \"unsigned int const* std::__find<unsigned int const*, unsigned int>(unsigned int const*, unsigned int const*, unsigned int const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_19TargetRegisterClassENS_12DenseMapInfoIjEENS4_IS3_EEE16InsertIntoBucketERKjRKS3_PSt4pairIjS3_E\", \"llvm::DenseMap<unsigned int, llvm::TargetRegisterClass const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::TargetRegisterClass const*> >::InsertIntoBucket(unsigned int const&, llvm::TargetRegisterClass const* const&, std::pair<unsigned int, llvm::TargetRegisterClass const*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPKNS_19TargetRegisterClassENS_12DenseMapInfoIjEENS4_IS3_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::TargetRegisterClass const*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::TargetRegisterClass const*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIjfESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, float>*, std::vector<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float> > > >, std::pair<unsigned int, float> const&)\"},\n    {\"_ZNK4llvm18EquivalenceClassesIPKNS_19TargetRegisterClassEE7ECValue9getLeaderEv\", \"llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue::getLeader() const\"},\n    {\"_ZSt13__adjust_heapIPPN4llvm12LiveIntervalElS2_NS0_11greater_ptrIS1_EEEvT_T0_S7_T1_T2_\", \"void std::__adjust_heap<llvm::LiveInterval**, long, llvm::LiveInterval*, llvm::greater_ptr<llvm::LiveInterval> >(llvm::LiveInterval**, long, long, llvm::LiveInterval*, llvm::greater_ptr<llvm::LiveInterval>)\"},\n    {\"_ZN4llvm18EquivalenceClassesIPKNS_19TargetRegisterClassEE9unionSetsERKS3_S6_\", \"llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::unionSets(llvm::TargetRegisterClass const* const&, llvm::TargetRegisterClass const* const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm18EquivalenceClassesIPKNS0_19TargetRegisterClassEE7ECValueES6_St9_IdentityIS6_ESt4lessIS6_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue, llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue, std::_Identity<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue>, std::less<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue>, std::allocator<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue> >::_M_insert_unique(llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm18EquivalenceClassesIPKNS0_19TargetRegisterClassEE7ECValueES6_St9_IdentityIS6_ESt4lessIS6_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue, llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue, std::_Identity<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue>, std::less<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue>, std::allocator<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue> >::_M_erase(std::_Rb_tree_node<llvm::EquivalenceClasses<llvm::TargetRegisterClass const*>::ECValue>*)\"},\n    {\"_ZNSt14priority_queueIPN4llvm12LiveIntervalENS0_11SmallVectorIS2_Lj64EEENS0_11greater_ptrIS1_EEEC2ERKS6_RKS4_\", \"std::priority_queue<llvm::LiveInterval*, llvm::SmallVector<llvm::LiveInterval*, 64u>, llvm::greater_ptr<llvm::LiveInterval> >::priority_queue(llvm::greater_ptr<llvm::LiveInterval> const&, llvm::SmallVector<llvm::LiveInterval*, 64u> const&)\"},\n    {\"_ZN4llvm40initializeRegisterCoalescerAnalysisGroupERNS_12PassRegistryE\", \"llvm::initializeRegisterCoalescerAnalysisGroup(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm17RegisterCoalescerD0Ev\", \"llvm::RegisterCoalescer::~RegisterCoalescer()\"},\n    {\"_ZN4llvm17RegisterCoalescerD1Ev\", \"llvm::RegisterCoalescer::~RegisterCoalescer()\"},\n    {\"_ZN4llvm17RegisterCoalescerD2Ev\", \"llvm::RegisterCoalescer::~RegisterCoalescer()\"},\n    {\"_ZNK4llvm13CoalescerPair7composeEjj\", \"llvm::CoalescerPair::compose(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm13CoalescerPair11isMoveInstrEPKNS_12MachineInstrERjS4_S4_S4_\", \"llvm::CoalescerPair::isMoveInstr(llvm::MachineInstr const*, unsigned int&, unsigned int&, unsigned int&, unsigned int&) const\"},\n    {\"_ZN4llvm13CoalescerPair12setRegistersEPKNS_12MachineInstrE\", \"llvm::CoalescerPair::setRegisters(llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm13CoalescerPair4flipEv\", \"llvm::CoalescerPair::flip()\"},\n    {\"_ZNK4llvm13CoalescerPair13isCoalescableEPKNS_12MachineInstrE\", \"llvm::CoalescerPair::isCoalescable(llvm::MachineInstr const*) const\"},\n    {\"_ZN4llvm12RegScavenger7setUsedEj\", \"llvm::RegScavenger::setUsed(unsigned int)\"},\n    {\"_ZNK4llvm12RegScavenger11isAliasUsedEj\", \"llvm::RegScavenger::isAliasUsed(unsigned int) const\"},\n    {\"_ZN4llvm12RegScavenger12initRegStateEv\", \"llvm::RegScavenger::initRegState()\"},\n    {\"_ZN4llvm12RegScavenger15enterBasicBlockEPNS_17MachineBasicBlockE\", \"llvm::RegScavenger::enterBasicBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm12RegScavenger17addRegWithSubRegsERNS_9BitVectorEj\", \"llvm::RegScavenger::addRegWithSubRegs(llvm::BitVector&, unsigned int)\"},\n    {\"_ZN4llvm12RegScavenger17addRegWithAliasesERNS_9BitVectorEj\", \"llvm::RegScavenger::addRegWithAliases(llvm::BitVector&, unsigned int)\"},\n    {\"_ZN4llvm12RegScavenger7forwardEv\", \"llvm::RegScavenger::forward()\"},\n    {\"_ZN4llvm12RegScavenger11getRegsUsedERNS_9BitVectorEb\", \"llvm::RegScavenger::getRegsUsed(llvm::BitVector&, bool)\"},\n    {\"_ZNK4llvm12RegScavenger13FindUnusedRegEPKNS_19TargetRegisterClassE\", \"llvm::RegScavenger::FindUnusedReg(llvm::TargetRegisterClass const*) const\"},\n    {\"_ZN4llvm12RegScavenger16getRegsAvailableEPKNS_19TargetRegisterClassERNS_9BitVectorE\", \"llvm::RegScavenger::getRegsAvailable(llvm::TargetRegisterClass const*, llvm::BitVector&)\"},\n    {\"_ZN4llvm12RegScavenger15findSurvivorRegENS_14ilist_iteratorINS_12MachineInstrEEERNS_9BitVectorEjRS3_\", \"llvm::RegScavenger::findSurvivorReg(llvm::ilist_iterator<llvm::MachineInstr>, llvm::BitVector&, unsigned int, llvm::ilist_iterator<llvm::MachineInstr>&)\"},\n    {\"_ZN4llvm12RegScavenger16scavengeRegisterEPKNS_19TargetRegisterClassENS_14ilist_iteratorINS_12MachineInstrEEEi\", \"llvm::RegScavenger::scavengeRegister(llvm::TargetRegisterClass const*, llvm::ilist_iterator<llvm::MachineInstr>, int)\"},\n    {\"_ZN4llvm9BitVectoraSERKS0_\", \"llvm::BitVector::operator=(llvm::BitVector const&)\"},\n    {\"_ZN4llvm12RegScavenger7setUsedERNS_9BitVectorE\", \"llvm::RegScavenger::setUsed(llvm::BitVector&)\"},\n    {\"_ZNK4llvm9BitVectorcoEv\", \"llvm::BitVector::operator~() const\"},\n    {\"_ZN4llvm11ScheduleDAGC1ERNS_15MachineFunctionE\", \"llvm::ScheduleDAG::ScheduleDAG(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm11ScheduleDAGC2ERNS_15MachineFunctionE\", \"llvm::ScheduleDAG::ScheduleDAG(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm11ScheduleDAGD0Ev\", \"llvm::ScheduleDAG::~ScheduleDAG()\"},\n    {\"_ZN4llvm11ScheduleDAGD1Ev\", \"llvm::ScheduleDAG::~ScheduleDAG()\"},\n    {\"_ZN4llvm11ScheduleDAGD2Ev\", \"llvm::ScheduleDAG::~ScheduleDAG()\"},\n    {\"_ZNK4llvm11ScheduleDAG11getNodeDescEPKNS_6SDNodeE\", \"llvm::ScheduleDAG::getNodeDesc(llvm::SDNode const*) const\"},\n    {\"_ZNK4llvm11ScheduleDAG12dumpScheduleEv\", \"llvm::ScheduleDAG::dumpSchedule() const\"},\n    {\"_ZNK4llvm5SUnit4dumpEPKNS_11ScheduleDAGE\", \"llvm::SUnit::dump(llvm::ScheduleDAG const*) const\"},\n    {\"_ZN4llvm11ScheduleDAG3RunEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::ScheduleDAG::Run(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>)\"},\n    {\"_ZN4llvm5SUnit7addPredERKNS_4SDepE\", \"llvm::SUnit::addPred(llvm::SDep const&)\"},\n    {\"_ZN4llvm5SUnit13setDepthDirtyEv\", \"llvm::SUnit::setDepthDirty()\"},\n    {\"_ZN4llvm5SUnit14setHeightDirtyEv\", \"llvm::SUnit::setHeightDirty()\"},\n    {\"_ZN4llvm5SUnit10removePredERKNS_4SDepE\", \"llvm::SUnit::removePred(llvm::SDep const&)\"},\n    {\"_ZN4llvm5SUnit17setDepthToAtLeastEj\", \"llvm::SUnit::setDepthToAtLeast(unsigned int)\"},\n    {\"_ZN4llvm5SUnit18setHeightToAtLeastEj\", \"llvm::SUnit::setHeightToAtLeast(unsigned int)\"},\n    {\"_ZN4llvm5SUnit12ComputeDepthEv\", \"llvm::SUnit::ComputeDepth()\"},\n    {\"_ZN4llvm5SUnit13ComputeHeightEv\", \"llvm::SUnit::ComputeHeight()\"},\n    {\"_ZNK4llvm5SUnit7dumpAllEPKNS_11ScheduleDAGE\", \"llvm::SUnit::dumpAll(llvm::ScheduleDAG const*) const\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort25InitDAGTopologicalSortingEv\", \"llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting()\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort8AllocateEii\", \"llvm::ScheduleDAGTopologicalSort::Allocate(int, int)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort7AddPredEPNS_5SUnitES2_\", \"llvm::ScheduleDAGTopologicalSort::AddPred(llvm::SUnit*, llvm::SUnit*)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort3DFSEPKNS_5SUnitEiRb\", \"llvm::ScheduleDAGTopologicalSort::DFS(llvm::SUnit const*, int, bool&)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort5ShiftERNS_9BitVectorEii\", \"llvm::ScheduleDAGTopologicalSort::Shift(llvm::BitVector&, int, int)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort10RemovePredEPNS_5SUnitES2_\", \"llvm::ScheduleDAGTopologicalSort::RemovePred(llvm::SUnit*, llvm::SUnit*)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort15WillCreateCycleEPNS_5SUnitES2_\", \"llvm::ScheduleDAGTopologicalSort::WillCreateCycle(llvm::SUnit*, llvm::SUnit*)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSort11IsReachableEPKNS_5SUnitES3_\", \"llvm::ScheduleDAGTopologicalSort::IsReachable(llvm::SUnit const*, llvm::SUnit const*)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSortC1ERSt6vectorINS_5SUnitESaIS2_EE\", \"llvm::ScheduleDAGTopologicalSort::ScheduleDAGTopologicalSort(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >&)\"},\n    {\"_ZN4llvm26ScheduleDAGTopologicalSortC2ERSt6vectorINS_5SUnitESaIS2_EE\", \"llvm::ScheduleDAGTopologicalSort::ScheduleDAGTopologicalSort(std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >&)\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizerD0Ev\", \"llvm::ScheduleHazardRecognizer::~ScheduleHazardRecognizer()\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizerD1Ev\", \"llvm::ScheduleHazardRecognizer::~ScheduleHazardRecognizer()\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizerD2Ev\", \"llvm::ScheduleHazardRecognizer::~ScheduleHazardRecognizer()\"},\n    {\"_ZNK4llvm11ScheduleDAG21ComputeOperandLatencyEPNS_5SUnitES2_RNS_4SDepE\", \"llvm::ScheduleDAG::ComputeOperandLatency(llvm::SUnit*, llvm::SUnit*, llvm::SDep&) const\"},\n    {\"_ZNSt6vectorIPKN4llvm5SUnitESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::SUnit const*, std::allocator<llvm::SUnit const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SUnit const**, std::vector<llvm::SUnit const*, std::allocator<llvm::SUnit const*> > >, llvm::SUnit const* const&)\"},\n    {\"_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEmRKi\", \"std::vector<int, std::allocator<int> >::_M_fill_insert(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, unsigned long, int const&)\"},\n    {\"_ZNSt6vectorIN4llvm5SUnitESaIS1_EED2Ev\", \"std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >::~vector()\"},\n    {\"_ZN4llvm11ScheduleDAG8EmitNoopEv\", \"llvm::ScheduleDAG::EmitNoop()\"},\n    {\"_ZN4llvm11ScheduleDAG15EmitPhysRegCopyEPNS_5SUnitERNS_8DenseMapIS2_jNS_12DenseMapInfoIS2_EENS4_IjEEEE\", \"llvm::ScheduleDAG::EmitPhysRegCopy(llvm::SUnit*, llvm::DenseMap<llvm::SUnit*, unsigned int, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitEjNS_12DenseMapInfoIS2_EENS3_IjEEE6insertERKSt4pairIS2_jE\", \"llvm::DenseMap<llvm::SUnit*, unsigned int, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<llvm::SUnit*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::SUnit*, unsigned int, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::SUnit* const&, unsigned int const&, std::pair<llvm::SUnit*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5SUnitEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::SUnit*, unsigned int, llvm::DenseMapInfo<llvm::SUnit*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrsC1ERNS_15MachineFunctionERKNS_15MachineLoopInfoERKNS_20MachineDominatorTreeE\", \"llvm::ScheduleDAGInstrs::ScheduleDAGInstrs(llvm::MachineFunction&, llvm::MachineLoopInfo const&, llvm::MachineDominatorTree const&)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrsC2ERNS_15MachineFunctionERKNS_15MachineLoopInfoERKNS_20MachineDominatorTreeE\", \"llvm::ScheduleDAGInstrs::ScheduleDAGInstrs(llvm::MachineFunction&, llvm::MachineLoopInfo const&, llvm::MachineDominatorTree const&)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs3RunEPNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEES5_j\", \"llvm::ScheduleDAGInstrs::Run(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs10StartBlockEPNS_17MachineBasicBlockE\", \"llvm::ScheduleDAGInstrs::StartBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs19AddSchedBarrierDepsEv\", \"llvm::ScheduleDAGInstrs::AddSchedBarrierDeps()\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs15BuildSchedGraphEPNS_13AliasAnalysisE\", \"llvm::ScheduleDAGInstrs::BuildSchedGraph(llvm::AliasAnalysis*)\"},\n    {\"_Z27getUnderlyingObjectForInstrPKN4llvm12MachineInstrEPKNS_16MachineFrameInfoERb\", \"getUnderlyingObjectForInstr(llvm::MachineInstr const*, llvm::MachineFrameInfo const*, bool&)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs11FinishBlockEv\", \"llvm::ScheduleDAGInstrs::FinishBlock()\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs14ComputeLatencyEPNS_5SUnitE\", \"llvm::ScheduleDAGInstrs::ComputeLatency(llvm::SUnit*)\"},\n    {\"_ZNK4llvm17ScheduleDAGInstrs21ComputeOperandLatencyEPNS_5SUnitES2_RNS_4SDepE\", \"llvm::ScheduleDAGInstrs::ComputeOperandLatency(llvm::SUnit*, llvm::SUnit*, llvm::SDep&) const\"},\n    {\"_ZNK4llvm17ScheduleDAGInstrs8dumpNodeEPKNS_5SUnitE\", \"llvm::ScheduleDAGInstrs::dumpNode(llvm::SUnit const*) const\"},\n    {\"_ZNK4llvm17ScheduleDAGInstrs17getGraphNodeLabelEPKNS_5SUnitE\", \"llvm::ScheduleDAGInstrs::getGraphNodeLabel(llvm::SUnit const*) const\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs12EmitScheduleEv\", \"llvm::ScheduleDAGInstrs::EmitSchedule()\"},\n    {\"_ZN4llvm16LoopDependencies9VisitLoopEPKNS_11MachineLoopE\", \"llvm::LoopDependencies::VisitLoop(llvm::MachineLoop const*)\"},\n    {\"_ZNSt6vectorIN4llvm5SUnitESaIS1_EE7reserveEm\", \"std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm17ScheduleDAGInstrs8NewSUnitEPNS_12MachineInstrE\", \"llvm::ScheduleDAGInstrs::NewSUnit(llvm::MachineInstr*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_St6vectorIPNS0_5SUnitESaIS8_EEESt10_Select1stISB_ESt4lessIS3_ESaISB_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISB_ERKSB_\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, std::_Select1st<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >, std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_St6vectorIPNS0_5SUnitESaIS8_EEESt10_Select1stISB_ESt4lessIS3_ESaISB_EE16_M_insert_uniqueERKSB_\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, std::_Select1st<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > > >::_M_insert_unique(std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_St6vectorIPNS0_5SUnitESaIS8_EEESt10_Select1stISB_ESt4lessIS3_ESaISB_EE14_M_create_nodeERKSB_\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, std::_Select1st<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > > >::_M_create_node(std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_PNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, llvm::SUnit*>, std::_Select1st<std::pair<llvm::Value const* const, llvm::SUnit*> >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, llvm::SUnit*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Value const* const, llvm::SUnit*> >, std::pair<llvm::Value const* const, llvm::SUnit*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_PNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, llvm::SUnit*>, std::_Select1st<std::pair<llvm::Value const* const, llvm::SUnit*> >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, llvm::SUnit*> > >::_M_insert_unique(std::pair<llvm::Value const* const, llvm::SUnit*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_St6vectorIPNS0_5SUnitESaIS8_EEESt10_Select1stISB_ESt4lessIS3_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >, std::_Select1st<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Value const* const, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm5ValueESt4pairIKS3_PNS0_5SUnitEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::Value const*, std::pair<llvm::Value const* const, llvm::SUnit*>, std::_Select1st<std::pair<llvm::Value const* const, llvm::SUnit*> >, std::less<llvm::Value const*>, std::allocator<std::pair<llvm::Value const* const, llvm::SUnit*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Value const* const, llvm::SUnit*> >*)\"},\n    {\"_ZN4llvm5SUnitC2ERKS0_\", \"llvm::SUnit::SUnit(llvm::SUnit const&)\"},\n    {\"_ZSt26__uninitialized_fill_n_auxIPSt6vectorIPN4llvm5SUnitESaIS3_EEmS5_EvT_T0_RKT1_St12__false_type\", \"void std::__uninitialized_fill_n_aux<std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >*, unsigned long, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > >(std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> >*, unsigned long, std::vector<llvm::SUnit*, std::allocator<llvm::SUnit*> > const&, std::__false_type)\"},\n    {\"_ZNSt6vectorIN4llvm5SUnitESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::SUnit, std::allocator<llvm::SUnit> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::SUnit*, std::vector<llvm::SUnit, std::allocator<llvm::SUnit> > >, llvm::SUnit const&)\"},\n    {\"_ZN4llvm5SUnitaSERKS0_\", \"llvm::SUnit::operator=(llvm::SUnit const&)\"},\n    {\"_ZN4llvm16LoopDependencies11VisitRegionEPKNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEEPKS2_PKNS_11MachineLoopERKNS_8SmallSetIjLj8EEE\", \"llvm::LoopDependencies::VisitRegion(llvm::DomTreeNodeBase<llvm::MachineBasicBlock> const*, llvm::MachineBasicBlock const*, llvm::MachineLoop const*, llvm::SmallSet<unsigned int, 8u> const&)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjS0_IPKN4llvm14MachineOperandEjEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> >, std::_Select1st<std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > > >::_M_insert_unique(std::pair<unsigned int const, std::pair<llvm::MachineOperand const*, unsigned int> > const&)\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizerC1EPKNS_18InstrItineraryDataEPKNS_11ScheduleDAGEPKc\", \"llvm::ScoreboardHazardRecognizer::ScoreboardHazardRecognizer(llvm::InstrItineraryData const*, llvm::ScheduleDAG const*, char const*)\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizerC2EPKNS_18InstrItineraryDataEPKNS_11ScheduleDAGEPKc\", \"llvm::ScoreboardHazardRecognizer::ScoreboardHazardRecognizer(llvm::InstrItineraryData const*, llvm::ScheduleDAG const*, char const*)\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizer5ResetEv\", \"llvm::ScoreboardHazardRecognizer::Reset()\"},\n    {\"_ZNK4llvm26ScoreboardHazardRecognizer10Scoreboard4dumpEv\", \"llvm::ScoreboardHazardRecognizer::Scoreboard::dump() const\"},\n    {\"_ZNK4llvm26ScoreboardHazardRecognizer12atIssueLimitEv\", \"llvm::ScoreboardHazardRecognizer::atIssueLimit() const\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizer13getHazardTypeEPNS_5SUnitEi\", \"llvm::ScoreboardHazardRecognizer::getHazardType(llvm::SUnit*, int)\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizer15EmitInstructionEPNS_5SUnitE\", \"llvm::ScoreboardHazardRecognizer::EmitInstruction(llvm::SUnit*)\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizer12AdvanceCycleEv\", \"llvm::ScoreboardHazardRecognizer::AdvanceCycle()\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizer11RecedeCycleEv\", \"llvm::ScoreboardHazardRecognizer::RecedeCycle()\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizerD1Ev\", \"llvm::ScoreboardHazardRecognizer::~ScoreboardHazardRecognizer()\"},\n    {\"_ZN4llvm26ScoreboardHazardRecognizerD0Ev\", \"llvm::ScoreboardHazardRecognizer::~ScoreboardHazardRecognizer()\"},\n    {\"_ZNK4llvm3PEI16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::PEI::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm3PEI24getTopLevelLoopPreheaderEPNS_11MachineLoopE\", \"llvm::PEI::getTopLevelLoopPreheader(llvm::MachineLoop*)\"},\n    {\"_ZN4llvm3PEI21getTopLevelLoopParentEPNS_11MachineLoopE\", \"llvm::PEI::getTopLevelLoopParent(llvm::MachineLoop*)\"},\n    {\"_ZN4llvm3PEI13isReturnBlockEPNS_17MachineBasicBlockE\", \"llvm::PEI::isReturnBlock(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm3PEI19clearAnticAvailSetsEv\", \"llvm::PEI::clearAnticAvailSets()\"},\n    {\"_ZN4llvm3PEI12clearAllSetsEv\", \"llvm::PEI::clearAllSets()\"},\n    {\"_ZN4llvm3PEI22initShrinkWrappingInfoEv\", \"llvm::PEI::initShrinkWrappingInfo()\"},\n    {\"_ZN4llvm3PEI25placeCSRSpillsAndRestoresERNS_15MachineFunctionE\", \"llvm::PEI::placeCSRSpillsAndRestores(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI13calculateSetsERNS_15MachineFunctionE\", \"llvm::PEI::calculateSets(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI22placeSpillsAndRestoresERNS_15MachineFunctionE\", \"llvm::PEI::placeSpillsAndRestores(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI14calcAnticInOutEPNS_17MachineBasicBlockE\", \"llvm::PEI::calcAnticInOut(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm3PEI14calcAvailInOutEPNS_17MachineBasicBlockE\", \"llvm::PEI::calcAvailInOut(llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm3PEI19calculateAnticAvailERNS_15MachineFunctionE\", \"llvm::PEI::calculateAnticAvail(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm3PEI23propagateUsesAroundLoopEPNS_17MachineBasicBlockEPNS_11MachineLoopE\", \"llvm::PEI::propagateUsesAroundLoop(llvm::MachineBasicBlock*, llvm::MachineLoop*)\"},\n    {\"_ZN4llvm3PEI20addUsesForMEMERegionEPNS_17MachineBasicBlockERNS_11SmallVectorIS2_Lj4EEE\", \"llvm::PEI::addUsesForMEMERegion(llvm::MachineBasicBlock*, llvm::SmallVector<llvm::MachineBasicBlock*, 4u>&)\"},\n    {\"_ZN4llvm3PEI23addUsesForTopLevelLoopsERNS_11SmallVectorIPNS_17MachineBasicBlockELj4EEE\", \"llvm::PEI::addUsesForTopLevelLoops(llvm::SmallVector<llvm::MachineBasicBlock*, 4u>&)\"},\n    {\"_ZN4llvm3PEI19calcSpillPlacementsEPNS_17MachineBasicBlockERNS_11SmallVectorIS2_Lj4EEERNS_8DenseMapIS2_NS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS9_IS8_EEEE\", \"llvm::PEI::calcSpillPlacements(llvm::MachineBasicBlock*, llvm::SmallVector<llvm::MachineBasicBlock*, 4u>&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >&)\"},\n    {\"_ZN4llvm3PEI21calcRestorePlacementsEPNS_17MachineBasicBlockERNS_11SmallVectorIS2_Lj4EEERNS_8DenseMapIS2_NS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS9_IS8_EEEE\", \"llvm::PEI::calcRestorePlacements(llvm::MachineBasicBlock*, llvm::SmallVector<llvm::MachineBasicBlock*, 4u>&, llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >&)\"},\n    {\"_ZN4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEED1Ev\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::~opt()\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >::clear()\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EEaNERKS1_\", \"llvm::SparseBitVector<128u>::operator&=(llvm::SparseBitVector<128u> const&)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EEoRERKS1_\", \"llvm::SparseBitVector<128u>::operator|=(llvm::SparseBitVector<128u> const&)\"},\n    {\"_ZNK4llvm15SparseBitVectorILj128EEeqERKS1_\", \"llvm::SparseBitVector<128u>::operator==(llvm::SparseBitVector<128u> const&) const\"},\n    {\"_ZNK4llvm15SparseBitVectorILj128EE10intersectsERKS1_\", \"llvm::SparseBitVector<128u>::intersects(llvm::SparseBitVector<128u> const&) const\"},\n    {\"_ZNK4llvm15SparseBitVectorILj128EE5countEv\", \"llvm::SparseBitVector<128u>::count() const\"},\n    {\"_ZN4llvm3PEID1Ev\", \"llvm::PEI::~PEI()\"},\n    {\"_ZN4llvm3PEID0Ev\", \"llvm::PEI::~PEI()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_17MachineBasicBlockEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::MachineBasicBlock*>::operator=(llvm::SmallVectorImpl<llvm::MachineBasicBlock*> const&)\"},\n    {\"_ZN4llvm15SparseBitVectorILj128EE23intersectWithComplementERKS1_S3_\", \"llvm::SparseBitVector<128u>::intersectWithComplement(llvm::SparseBitVector<128u> const&, llvm::SparseBitVector<128u> const&)\"},\n    {\"_ZNSt6vectorIN4llvm15CalleeSavedInfoESaIS1_EEC2ERKS3_\", \"std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> >::vector(std::vector<llvm::CalleeSavedInfo, std::allocator<llvm::CalleeSavedInfo> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >::FindAndConstruct(llvm::MachineBasicBlock* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >::InsertIntoBucket(llvm::MachineBasicBlock* const&, llvm::SparseBitVector<128u> const&, std::pair<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockENS_15SparseBitVectorILj128EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, llvm::SparseBitVector<128u>, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<llvm::SparseBitVector<128u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEE16handleOccurrenceEjNS_9StringRefES6_\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEE14getOptionWidthEv\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEE15printOptionInfoEm\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEED0Ev\", \"llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserI20ShrinkWrapDebugLevelE5parseERNS0_6OptionENS_9StringRefES6_RS2_\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, ShrinkWrapDebugLevel&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS5_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> > >(llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserI20ShrinkWrapDebugLevelE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<ShrinkWrapDebugLevel>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserI20ShrinkWrapDebugLevelED1Ev\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::~parser()\"},\n    {\"_ZN4llvm2cl6parserI20ShrinkWrapDebugLevelED0Ev\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserI20ShrinkWrapDebugLevelE13getNumOptionsEv\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserI20ShrinkWrapDebugLevelE9getOptionEj\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserI20ShrinkWrapDebugLevelE14getDescriptionEj\", \"llvm::cl::parser<ShrinkWrapDebugLevel>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEEC2IA17_cNS0_12OptionHiddenENS0_4descENS0_10value_descENS0_11initializerIA1_cEEEERKT_RKT0_RKT1_RKT2_RKT3_\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::opt<char [17], llvm::cl::OptionHidden, llvm::cl::desc, llvm::cl::value_desc, llvm::cl::initializer<char [1]> >(char const (&) [17], llvm::cl::OptionHidden const&, llvm::cl::desc const&, llvm::cl::value_desc const&, llvm::cl::initializer<char [1]> const&)\"},\n    {\"_ZN4llvm3PEID2Ev\", \"llvm::PEI::~PEI()\"},\n    {\"_ZN4llvm38initializeSimpleRegisterCoalescingPassERNS_12PassRegistryE\", \"llvm::initializeSimpleRegisterCoalescingPass(llvm::PassRegistry&)\"},\n    {\"_ZThn32_NK4llvm24SimpleRegisterCoalescing16getAnalysisUsageERNS_13AnalysisUsageE\", \"non-virtual thunk to llvm::SimpleRegisterCoalescing::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm24SimpleRegisterCoalescing16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::SimpleRegisterCoalescing::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing20AdjustCopiesBackFromERKNS_13CoalescerPairEPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::AdjustCopiesBackFrom(llvm::CoalescerPair const&, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing25TrimLiveIntervalToLastUseENS_9SlotIndexEPNS_17MachineBasicBlockERNS_12LiveIntervalEPKNS_9LiveRangeE\", \"llvm::SimpleRegisterCoalescing::TrimLiveIntervalToLastUse(llvm::SlotIndex, llvm::MachineBasicBlock*, llvm::LiveInterval&, llvm::LiveRange const*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing20HasOtherReachingDefsERNS_12LiveIntervalES2_PNS_6VNInfoES4_\", \"llvm::SimpleRegisterCoalescing::HasOtherReachingDefs(llvm::LiveInterval&, llvm::LiveInterval&, llvm::VNInfo*, llvm::VNInfo*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing24RemoveCopyByCommutingDefERKNS_13CoalescerPairEPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::RemoveCopyByCommutingDef(llvm::CoalescerPair const&, llvm::MachineInstr*)\"},\n    {\"_ZNK4llvm24SimpleRegisterCoalescing15lastRegisterUseENS_9SlotIndexES1_jRS1_\", \"llvm::SimpleRegisterCoalescing::lastRegisterUse(llvm::SlotIndex, llvm::SlotIndex, unsigned int, llvm::SlotIndex&) const\"},\n    {\"_Z21isSameOrFallThroughBBPN4llvm17MachineBasicBlockES1_PKNS_15TargetInstrInfoE\", \"isSameOrFallThroughBB(llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::TargetInstrInfo const*)\"},\n    {\"_Z11removeRangeRN4llvm12LiveIntervalENS_9SlotIndexES2_PNS_13LiveIntervalsEPKNS_18TargetRegisterInfoE\", \"removeRange(llvm::LiveInterval&, llvm::SlotIndex, llvm::SlotIndex, llvm::LiveIntervals*, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing23ReMaterializeTrivialDefERNS_12LiveIntervalEbjjPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::ReMaterializeTrivialDef(llvm::LiveInterval&, bool, unsigned int, unsigned int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing14RemoveCopyFlagEjPKNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::RemoveCopyFlag(unsigned int, llvm::MachineInstr const*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing17UpdateRegDefsUsesERKNS_13CoalescerPairE\", \"llvm::SimpleRegisterCoalescing::UpdateRegDefsUses(llvm::CoalescerPair const&)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing24ShortenDeadCopyLiveRangeERNS_12LiveIntervalEPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::ShortenDeadCopyLiveRange(llvm::LiveInterval&, llvm::MachineInstr*)\"},\n    {\"_Z21removeIntervalIfEmptyRN4llvm12LiveIntervalEPNS_13LiveIntervalsEPKNS_18TargetRegisterInfoE\", \"removeIntervalIfEmpty(llvm::LiveInterval&, llvm::LiveIntervals*, llvm::TargetRegisterInfo const*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing13RemoveDeadDefERNS_12LiveIntervalEPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::RemoveDeadDef(llvm::LiveInterval&, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing27ShortenDeadCopySrcLiveRangeERNS_12LiveIntervalEPNS_12MachineInstrE\", \"llvm::SimpleRegisterCoalescing::ShortenDeadCopySrcLiveRange(llvm::LiveInterval&, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing21isWinToJoinCrossClassEjjPKNS_19TargetRegisterClassES3_S3_\", \"llvm::SimpleRegisterCoalescing::isWinToJoinCrossClass(unsigned int, unsigned int, llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing8JoinCopyERNS_7CopyRecERb\", \"llvm::SimpleRegisterCoalescing::JoinCopy(llvm::CopyRec&, bool&)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing13JoinIntervalsERNS_13CoalescerPairE\", \"llvm::SimpleRegisterCoalescing::JoinIntervals(llvm::CoalescerPair&)\"},\n    {\"_Z17ComputeUltimateVNPN4llvm6VNInfoERNS_11SmallVectorIS1_Lj16EEERNS_8DenseMapIS1_S1_NS_12DenseMapInfoIS1_EES7_EES9_RNS2_IiLj16EEESB_\", \"ComputeUltimateVN(llvm::VNInfo*, llvm::SmallVector<llvm::VNInfo*, 16u>&, llvm::DenseMap<llvm::VNInfo*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::DenseMap<llvm::VNInfo*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::VNInfo*> >&, llvm::SmallVector<int, 16u>&, llvm::SmallVector<int, 16u>&)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing17CopyCoalesceInMBBEPNS_17MachineBasicBlockERSt6vectorINS_7CopyRecESaIS4_EE\", \"llvm::SimpleRegisterCoalescing::CopyCoalesceInMBB(llvm::MachineBasicBlock*, std::vector<llvm::CopyRec, std::allocator<llvm::CopyRec> >&)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing13joinIntervalsEv\", \"llvm::SimpleRegisterCoalescing::joinIntervals()\"},\n    {\"_ZNK4llvm24SimpleRegisterCoalescing24differingRegisterClassesEjj\", \"llvm::SimpleRegisterCoalescing::differingRegisterClasses(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing13releaseMemoryEv\", \"llvm::SimpleRegisterCoalescing::releaseMemory()\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::SimpleRegisterCoalescing::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZNK4llvm24SimpleRegisterCoalescing5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::SimpleRegisterCoalescing::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZN4llvm29createSimpleRegisterCoalescerEv\", \"llvm::createSimpleRegisterCoalescer()\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIjPN4llvm17MachineBasicBlockEESt6vectorIS6_SaIS6_EEEElN12_GLOBAL__N_115DepthMBBCompareEEvT_SE_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, long, (anonymous namespace)::DepthMBBCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, long, (anonymous namespace)::DepthMBBCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIjPN4llvm17MachineBasicBlockEESt6vectorIS6_SaIS6_EEEEN12_GLOBAL__N_115DepthMBBCompareEEvT_SE_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, (anonymous namespace)::DepthMBBCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, (anonymous namespace)::DepthMBBCompare)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIjPN4llvm17MachineBasicBlockEESt6vectorIS6_SaIS6_EEEElS6_N12_GLOBAL__N_115DepthMBBCompareEEvT_T0_SF_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, long, std::pair<unsigned int, llvm::MachineBasicBlock*>, (anonymous namespace)::DepthMBBCompare>(__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, long, long, std::pair<unsigned int, llvm::MachineBasicBlock*>, (anonymous namespace)::DepthMBBCompare)\"},\n    {\"_ZN4llvm13LiveIntervals14removeIntervalEj\", \"llvm::LiveIntervals::removeInterval(unsigned int)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescingD1Ev\", \"llvm::SimpleRegisterCoalescing::~SimpleRegisterCoalescing()\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescingD0Ev\", \"llvm::SimpleRegisterCoalescing::~SimpleRegisterCoalescing()\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing16coalesceFunctionERNS_15MachineFunctionERNS_13RegallocQueryE\", \"llvm::SimpleRegisterCoalescing::coalesceFunction(llvm::MachineFunction&, llvm::RegallocQuery&)\"},\n    {\"_ZThn32_N4llvm24SimpleRegisterCoalescingD1Ev\", \"non-virtual thunk to llvm::SimpleRegisterCoalescing::~SimpleRegisterCoalescing()\"},\n    {\"_ZThn32_N4llvm24SimpleRegisterCoalescingD0Ev\", \"non-virtual thunk to llvm::SimpleRegisterCoalescing::~SimpleRegisterCoalescing()\"},\n    {\"_ZThn32_N4llvm24SimpleRegisterCoalescing16coalesceFunctionERNS_15MachineFunctionERNS_13RegallocQueryE\", \"non-virtual thunk to llvm::SimpleRegisterCoalescing::coalesceFunction(llvm::MachineFunction&, llvm::RegallocQuery&)\"},\n    {\"_ZN4llvm17RegisterCoalescer5resetERNS_15MachineFunctionE\", \"llvm::RegisterCoalescer::reset(llvm::MachineFunction&)\"},\n    {\"_ZNSt6vectorISt4pairIjPN4llvm17MachineBasicBlockEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<unsigned int, llvm::MachineBasicBlock*>*, std::vector<std::pair<unsigned int, llvm::MachineBasicBlock*>, std::allocator<std::pair<unsigned int, llvm::MachineBasicBlock*> > > >, std::pair<unsigned int, llvm::MachineBasicBlock*> const&)\"},\n    {\"_ZNSt6vectorIN4llvm7CopyRecESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::CopyRec, std::allocator<llvm::CopyRec> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::CopyRec*, std::vector<llvm::CopyRec, std::allocator<llvm::CopyRec> > >, llvm::CopyRec const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6VNInfoES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::VNInfo*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::VNInfo*> >::InsertIntoBucket(llvm::VNInfo* const&, llvm::VNInfo* const&, std::pair<llvm::VNInfo*, llvm::VNInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6VNInfoES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::VNInfo*, llvm::VNInfo*, llvm::DenseMapInfo<llvm::VNInfo*>, llvm::DenseMapInfo<llvm::VNInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescingD2Ev\", \"llvm::SimpleRegisterCoalescing::~SimpleRegisterCoalescing()\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescingC2Ev\", \"llvm::SimpleRegisterCoalescing::SimpleRegisterCoalescing()\"},\n    {\"_ZNK4llvm17RegisterCoalescer16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::RegisterCoalescer::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm15callDefaultCtorINS_24SimpleRegisterCoalescingEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::SimpleRegisterCoalescing>()\"},\n    {\"_ZN4llvm16createSjLjEHPassEPKNS_14TargetLoweringE\", \"llvm::createSjLjEHPass(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_110SjLjEHPassD1Ev\", \"(anonymous namespace)::SjLjEHPass::~SjLjEHPass()\"},\n    {\"_ZN12_GLOBAL__N_110SjLjEHPassD0Ev\", \"(anonymous namespace)::SjLjEHPass::~SjLjEHPass()\"},\n    {\"_ZNK12_GLOBAL__N_110SjLjEHPass11getPassNameEv\", \"(anonymous namespace)::SjLjEHPass::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_110SjLjEHPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::SjLjEHPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_110SjLjEHPass16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::SjLjEHPass::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_110SjLjEHPass13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::SjLjEHPass::runOnFunction(llvm::Function&)\"},\n    {\"_Z16MarkBlocksLiveInPN4llvm10BasicBlockERSt3setIS1_St4lessIS1_ESaIS1_EE\", \"MarkBlocksLiveIn(llvm::BasicBlock*, std::set<llvm::BasicBlock*, std::less<llvm::BasicBlock*>, std::allocator<llvm::BasicBlock*> >&)\"},\n    {\"_ZN4llvm8ICmpInstC2EPNS_11InstructionENS_7CmpInst9PredicateEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::ICmpInst::ICmpInst(llvm::Instruction*, llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm17GetElementPtrInstC2IPPNS_5ValueEEES3_T_S5_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::GetElementPtrInst::GetElementPtrInst<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::BasicBlock*, llvm::BasicBlock*, std::_Identity<llvm::BasicBlock*>, std::less<llvm::BasicBlock*>, std::allocator<llvm::BasicBlock*> >::_M_erase(std::_Rb_tree_node<llvm::BasicBlock*>*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<llvm::BasicBlock*, llvm::BasicBlock*, std::_Identity<llvm::BasicBlock*>, std::less<llvm::BasicBlock*>, std::allocator<llvm::BasicBlock*> >::_M_insert_unique(llvm::BasicBlock* const&)\"},\n    {\"_ZN4llvm16ExtractValueInstC2IPjEEPNS_5ValueET_S5_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ExtractValueInst::ExtractValueInst<unsigned int*>(llvm::Value*, unsigned int*, unsigned int*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm25initializeSlotIndexesPassERNS_12PassRegistryE\", \"llvm::initializeSlotIndexesPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm14IndexListEntry16getEmptyKeyEntryEv\", \"llvm::IndexListEntry::getEmptyKeyEntry()\"},\n    {\"_ZN4llvm14IndexListEntry20getTombstoneKeyEntryEv\", \"llvm::IndexListEntry::getTombstoneKeyEntry()\"},\n    {\"_ZNK4llvm11SlotIndexes16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::SlotIndexes::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm11SlotIndexes13releaseMemoryEv\", \"llvm::SlotIndexes::releaseMemory()\"},\n    {\"_ZN4llvm11SlotIndexes20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::SlotIndexes::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm11SlotIndexes15renumberIndexesEv\", \"llvm::SlotIndexes::renumberIndexes()\"},\n    {\"_ZNK4llvm11SlotIndexes4dumpEv\", \"llvm::SlotIndexes::dump() const\"},\n    {\"_ZNK4llvm9SlotIndex5printERNS_11raw_ostreamE\", \"llvm::SlotIndex::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm9SlotIndex4dumpEv\", \"llvm::SlotIndex::dump() const\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_123TombstoneIndexListEntryEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::TombstoneIndexListEntry>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_123TombstoneIndexListEntryEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::TombstoneIndexListEntry>::call(void*)\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_119EmptyIndexListEntryEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::EmptyIndexListEntry>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_119EmptyIndexListEntryEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::EmptyIndexListEntry>::call(void*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrENS_9SlotIndexENS_12DenseMapInfoIS3_EENS5_IS4_EEE6insertERKSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::SlotIndex, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::SlotIndex> >::insert(std::pair<llvm::MachineInstr const*, llvm::SlotIndex> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockESt4pairINS_9SlotIndexES5_ENS_12DenseMapInfoIS3_EENS7_IS6_EEE6insertERKS4_IS3_S6_E\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex>, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<std::pair<llvm::SlotIndex, llvm::SlotIndex> > >::insert(std::pair<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex> > const&)\"},\n    {\"_ZN4llvm11SlotIndexesD1Ev\", \"llvm::SlotIndexes::~SlotIndexes()\"},\n    {\"_ZN4llvm11SlotIndexesD0Ev\", \"llvm::SlotIndexes::~SlotIndexes()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockESt4pairINS_9SlotIndexES5_ENS_12DenseMapInfoIS3_EENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex>, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<std::pair<llvm::SlotIndex, llvm::SlotIndex> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrENS_9SlotIndexENS_12DenseMapInfoIS3_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::SlotIndex, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::SlotIndex> >::shrink_and_clear()\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEElNS3_14Idx2MBBCompareEEvT_SE_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, long, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, long, llvm::Idx2MBBCompare)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEENS3_14Idx2MBBCompareEEvT_SE_T0_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEENS3_14Idx2MBBCompareEEvT_SE_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare)\"},\n    {\"_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEES7_NS3_14Idx2MBBCompareEET_SE_SE_T0_T1_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > > std::__unguarded_partition<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, llvm::Idx2MBBCompare)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEENS3_14Idx2MBBCompareEEvT_SE_SE_T0_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, llvm::Idx2MBBCompare)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm9SlotIndexEPNS3_17MachineBasicBlockEESt6vectorIS7_SaIS7_EEEElS7_NS3_14Idx2MBBCompareEEvT_T0_SF_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, long, std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, llvm::Idx2MBBCompare>(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, long, long, std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, llvm::Idx2MBBCompare)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm9SlotIndexEPNS1_17MachineBasicBlockEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>*, std::vector<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*>, std::allocator<std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> > > >, std::pair<llvm::SlotIndex, llvm::MachineBasicBlock*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockESt4pairINS_9SlotIndexES5_ENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PS4_IS3_S6_E\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex>, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<std::pair<llvm::SlotIndex, llvm::SlotIndex> > >::InsertIntoBucket(llvm::MachineBasicBlock const* const&, std::pair<llvm::SlotIndex, llvm::SlotIndex> const&, std::pair<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_17MachineBasicBlockESt4pairINS_9SlotIndexES5_ENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock const*, std::pair<llvm::SlotIndex, llvm::SlotIndex>, llvm::DenseMapInfo<llvm::MachineBasicBlock const*>, llvm::DenseMapInfo<std::pair<llvm::SlotIndex, llvm::SlotIndex> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrENS_9SlotIndexENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::SlotIndex, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::SlotIndex> >::InsertIntoBucket(llvm::MachineInstr const* const&, llvm::SlotIndex const&, std::pair<llvm::MachineInstr const*, llvm::SlotIndex>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MachineInstrENS_9SlotIndexENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::MachineInstr const*, llvm::SlotIndex, llvm::DenseMapInfo<llvm::MachineInstr const*>, llvm::DenseMapInfo<llvm::SlotIndex> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_11SlotIndexesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::SlotIndexes>()\"},\n    {\"_ZN4llvm11SlotIndexesC2Ev\", \"llvm::SlotIndexes::SlotIndexes()\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEED1Ev\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::~opt()\"},\n    {\"_ZN4llvm7SpillerD0Ev\", \"llvm::Spiller::~Spiller()\"},\n    {\"_ZN4llvm7SpillerD1Ev\", \"llvm::Spiller::~Spiller()\"},\n    {\"_ZN4llvm7SpillerD2Ev\", \"llvm::Spiller::~Spiller()\"},\n    {\"_ZN4llvm13createSpillerERNS_19MachineFunctionPassERNS_15MachineFunctionERNS_10VirtRegMapE\", \"llvm::createSpiller(llvm::MachineFunctionPass&, llvm::MachineFunction&, llvm::VirtRegMap&)\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEE14getOptionWidthEv\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEE15printOptionInfoEm\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEED0Ev\", \"llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEED1Ev\", \"llvm::cl::parser<(anonymous namespace)::SpillerName>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEED0Ev\", \"llvm::cl::parser<(anonymous namespace)::SpillerName>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEE13getNumOptionsEv\", \"llvm::cl::parser<(anonymous namespace)::SpillerName>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEE9getOptionEj\", \"llvm::cl::parser<(anonymous namespace)::SpillerName>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEE14getDescriptionEj\", \"llvm::cl::parser<(anonymous namespace)::SpillerName>::getDescription(unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_115StandardSpillerD1Ev\", \"(anonymous namespace)::StandardSpiller::~StandardSpiller()\"},\n    {\"_ZN12_GLOBAL__N_115StandardSpillerD0Ev\", \"(anonymous namespace)::StandardSpiller::~StandardSpiller()\"},\n    {\"_ZN12_GLOBAL__N_115StandardSpiller5spillEPN4llvm12LiveIntervalERNS1_15SmallVectorImplIS3_EERKS5_\", \"(anonymous namespace)::StandardSpiller::spill(llvm::LiveInterval*, llvm::SmallVectorImpl<llvm::LiveInterval*>&, llvm::SmallVectorImpl<llvm::LiveInterval*> const&)\"},\n    {\"_ZN12_GLOBAL__N_114TrivialSpillerD1Ev\", \"(anonymous namespace)::TrivialSpiller::~TrivialSpiller()\"},\n    {\"_ZN12_GLOBAL__N_114TrivialSpillerD0Ev\", \"(anonymous namespace)::TrivialSpiller::~TrivialSpiller()\"},\n    {\"_ZN12_GLOBAL__N_114TrivialSpiller5spillEPN4llvm12LiveIntervalERNS1_15SmallVectorImplIS3_EERKS5_\", \"(anonymous namespace)::TrivialSpiller::spill(llvm::LiveInterval*, llvm::SmallVectorImpl<llvm::LiveInterval*>&, llvm::SmallVectorImpl<llvm::LiveInterval*> const&)\"},\n    {\"_ZN12_GLOBAL__N_111SpillerBaseD1Ev\", \"(anonymous namespace)::SpillerBase::~SpillerBase()\"},\n    {\"_ZN12_GLOBAL__N_111SpillerBaseD0Ev\", \"(anonymous namespace)::SpillerBase::~SpillerBase()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_12LiveIntervalEE6insertIN9__gnu_cxx17__normal_iteratorIPS2_St6vectorIS2_SaIS2_EEEEEES7_S7_T_SC_\", \"llvm::LiveInterval** llvm::SmallVectorImpl<llvm::LiveInterval*>::insert<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > > >(llvm::LiveInterval**, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >)\"},\n    {\"_ZN4llvm11SlotIndexes24insertMachineInstrInMapsEPNS_12MachineInstrEPb\", \"llvm::SlotIndexes::insertMachineInstrInMaps(llvm::MachineInstr*, bool*)\"},\n    {\"_ZN4llvm28initializeStackProtectorPassERNS_12PassRegistryE\", \"llvm::initializeStackProtectorPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24createStackProtectorPassEPKNS_14TargetLoweringE\", \"llvm::createStackProtectorPass(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_114StackProtectorD1Ev\", \"(anonymous namespace)::StackProtector::~StackProtector()\"},\n    {\"_ZN12_GLOBAL__N_114StackProtectorD0Ev\", \"(anonymous namespace)::StackProtector::~StackProtector()\"},\n    {\"_ZNK12_GLOBAL__N_114StackProtector16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::StackProtector::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114StackProtector13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::StackProtector::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114StackProtectorEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::StackProtector>()\"},\n    {\"_ZN4llvm8ICmpInstC2ERNS_10BasicBlockENS_7CmpInst9PredicateEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::ICmpInst::ICmpInst(llvm::BasicBlock&, llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm31initializeStackSlotColoringPassERNS_12PassRegistryE\", \"llvm::initializeStackSlotColoringPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm27createStackSlotColoringPassEb\", \"llvm::createStackSlotColoringPass(bool)\"},\n    {\"_ZN12_GLOBAL__N_117StackSlotColoringD1Ev\", \"(anonymous namespace)::StackSlotColoring::~StackSlotColoring()\"},\n    {\"_ZN12_GLOBAL__N_117StackSlotColoringD0Ev\", \"(anonymous namespace)::StackSlotColoring::~StackSlotColoring()\"},\n    {\"_ZNK12_GLOBAL__N_117StackSlotColoring11getPassNameEv\", \"(anonymous namespace)::StackSlotColoring::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_117StackSlotColoring16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::StackSlotColoring::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_117StackSlotColoring20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::StackSlotColoring::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEEN12_GLOBAL__N_114IntervalSorterEEvT_SC_T0_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, (anonymous namespace)::IntervalSorter>(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, (anonymous namespace)::IntervalSorter)\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEES5_lN12_GLOBAL__N_114IntervalSorterEEvT_SC_T0_T1_T2_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, llvm::LiveInterval**, long, (anonymous namespace)::IntervalSorter>(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, llvm::LiveInterval**, long, (anonymous namespace)::IntervalSorter)\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEES5_N12_GLOBAL__N_114IntervalSorterEEvT_SC_T0_T1_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, llvm::LiveInterval**, (anonymous namespace)::IntervalSorter>(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, llvm::LiveInterval**, (anonymous namespace)::IntervalSorter)\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEElS5_N12_GLOBAL__N_114IntervalSorterEEvT_SC_SC_T0_SD_T1_SD_T2_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, long, llvm::LiveInterval**, (anonymous namespace)::IntervalSorter>(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, long, long, llvm::LiveInterval**, long, (anonymous namespace)::IntervalSorter)\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEElN12_GLOBAL__N_114IntervalSorterEEvT_SC_SC_T0_SD_T1_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, long, (anonymous namespace)::IntervalSorter>(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, long, long, (anonymous namespace)::IntervalSorter)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_117StackSlotColoringEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::StackSlotColoring>()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_8SmallSetIjLj4EEEED2Ev\", \"llvm::SmallVectorImpl<llvm::SmallSet<unsigned int, 4u> >::~SmallVectorImpl()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_8SmallSetIjLj4EEEE9push_backERKS2_\", \"llvm::SmallVectorImpl<llvm::SmallSet<unsigned int, 4u> >::push_back(llvm::SmallSet<unsigned int, 4u> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_8SmallSetIjLj4EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallSet<unsigned int, 4u>, false>::grow(unsigned long)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPN4llvm8SmallSetIjLj4EEES3_ET0_T_S5_S4_St12__false_type\", \"llvm::SmallSet<unsigned int, 4u>* std::__uninitialized_copy_aux<llvm::SmallSet<unsigned int, 4u>*, llvm::SmallSet<unsigned int, 4u>*>(llvm::SmallSet<unsigned int, 4u>*, llvm::SmallSet<unsigned int, 4u>*, llvm::SmallSet<unsigned int, 4u>*, std::__false_type)\"},\n    {\"_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE7_M_copyEPKSt13_Rb_tree_nodeIjEPS7_\", \"std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>, std::allocator<unsigned int> >::_M_copy(std::_Rb_tree_node<unsigned int> const*, std::_Rb_tree_node<unsigned int>*)\"},\n    {\"_ZN4llvm10VirtRegMap22getFirstUnusedRegisterEPKNS_19TargetRegisterClassE\", \"llvm::VirtRegMap::getFirstUnusedRegister(llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::FindAndConstruct(llvm::TargetRegisterClass const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::InsertIntoBucket(llvm::TargetRegisterClass const* const&, llvm::BitVector const&, std::pair<llvm::TargetRegisterClass const*, llvm::BitVector>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::grow(unsigned int)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPPN4llvm12LiveIntervalESt6vectorIS4_SaIS4_EEEEEvT_SA_SA_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > > >(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, __gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm11SmallVectorINS0_IiLj4EEELj16EEC2EjRKS1_\", \"llvm::SmallVector<llvm::SmallVector<int, 4u>, 16u>::SmallVector(unsigned int, llvm::SmallVector<int, 4u> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIiLj4EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<int, 4u>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15SmallVectorImplIiEaSERKS1_\", \"llvm::SmallVectorImpl<int>::operator=(llvm::SmallVectorImpl<int> const&)\"},\n    {\"_ZN4llvm11SmallVectorIfLj16EEC2EjRKf\", \"llvm::SmallVector<float, 16u>::SmallVector(unsigned int, float const&)\"},\n    {\"_ZN4llvm11SmallVectorIiLj16EEC2EjRKi\", \"llvm::SmallVector<int, 16u>::SmallVector(unsigned int, int const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_11SmallVectorIPNS_12LiveIntervalELj4EEEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::SmallVector<llvm::LiveInterval*, 4u> >::resize(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm12LiveIntervalESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::LiveInterval**, std::vector<llvm::LiveInterval*, std::allocator<llvm::LiveInterval*> > >, llvm::LiveInterval* const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIPNS_12LiveIntervalELj4EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<llvm::LiveInterval*, 4u>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_12LiveIntervalEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::LiveInterval*>::operator=(llvm::SmallVectorImpl<llvm::LiveInterval*> const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_11SmallVectorIPNS_12MachineInstrELj8EEEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::SmallVector<llvm::MachineInstr*, 8u> >::resize(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallVectorIPNS_12MachineInstrELj8EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallVector<llvm::MachineInstr*, 8u>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm34initializeStrongPHIEliminationPassERNS_12PassRegistryE\", \"llvm::initializeStrongPHIEliminationPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_120StrongPHIEliminationEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::StrongPHIElimination>()\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIEliminationD1Ev\", \"(anonymous namespace)::StrongPHIElimination::~StrongPHIElimination()\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIEliminationD0Ev\", \"(anonymous namespace)::StrongPHIElimination::~StrongPHIElimination()\"},\n    {\"_ZNK12_GLOBAL__N_120StrongPHIElimination16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::StrongPHIElimination::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIElimination20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::StrongPHIElimination::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIElimination9unionRegsEjj\", \"(anonymous namespace)::StrongPHIElimination::unionRegs(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjPN12_GLOBAL__N_120StrongPHIElimination4NodeENS_12DenseMapInfoIjEENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<unsigned int, (anonymous namespace)::StrongPHIElimination::Node*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<(anonymous namespace)::StrongPHIElimination::Node*> >::clear()\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIElimination11getRegColorEj\", \"(anonymous namespace)::StrongPHIElimination::getRegColor(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIElimination17MergeLIsAndRenameEjj\", \"(anonymous namespace)::StrongPHIElimination::MergeLIsAndRename(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjPN12_GLOBAL__N_120StrongPHIElimination4NodeENS_12DenseMapInfoIjEENS5_IS4_EEEixERKj\", \"llvm::DenseMap<unsigned int, (anonymous namespace)::StrongPHIElimination::Node*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<(anonymous namespace)::StrongPHIElimination::Node*> >::operator[](unsigned int const&)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPPN4llvm12MachineInstrESt6vectorIS4_SaIS4_EEEElN12_GLOBAL__N_114MIIndexCompareEEvT_SC_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, long, (anonymous namespace)::MIIndexCompare>(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, __gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, long, (anonymous namespace)::MIIndexCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPPN4llvm12MachineInstrESt6vectorIS4_SaIS4_EEEEN12_GLOBAL__N_114MIIndexCompareEEvT_SC_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, (anonymous namespace)::MIIndexCompare>(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, __gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, (anonymous namespace)::MIIndexCompare)\"},\n    {\"_ZNK12_GLOBAL__N_114MIIndexCompareclEPKN4llvm12MachineInstrES4_\", \"(anonymous namespace)::MIIndexCompare::operator()(llvm::MachineInstr const*, llvm::MachineInstr const*) const\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPPN4llvm12MachineInstrESt6vectorIS4_SaIS4_EEEElS4_N12_GLOBAL__N_114MIIndexCompareEEvT_T0_SD_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, long, llvm::MachineInstr*, (anonymous namespace)::MIIndexCompare>(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, long, long, llvm::MachineInstr*, (anonymous namespace)::MIIndexCompare)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockESt6vectorIPNS_12MachineInstrESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE5clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEPNS_12MachineInstrENS_12DenseMapInfoIS4_EENS7_IS6_EEE5clearEv\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::MachineInstr*> >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEPNS_12MachineInstrENS_12DenseMapInfoIS4_EENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::MachineInstr*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE5clearEv\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE16shrink_and_clearEv\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockESt6vectorIPNS_12MachineInstrESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > >::shrink_and_clear()\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEPNS_12MachineInstrENS_12DenseMapInfoIS4_EENS7_IS6_EEE15LookupBucketForERKS4_RPS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::MachineInstr*> >::LookupBucketFor(std::pair<llvm::MachineBasicBlock*, unsigned int> const&, std::pair<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEPNS_12MachineInstrENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::MachineInstr*> >::InsertIntoBucket(std::pair<llvm::MachineBasicBlock*, unsigned int> const&, llvm::MachineInstr* const&, std::pair<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEPNS_12MachineInstrENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, llvm::MachineInstr*, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::MachineInstr*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE6insertERKS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<llvm::MachineBasicBlock*, unsigned int>, char> const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE15LookupBucketForERKS4_RPS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::LookupBucketFor(std::pair<llvm::MachineBasicBlock*, unsigned int> const&, std::pair<std::pair<llvm::MachineBasicBlock*, unsigned int>, char>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE16InsertIntoBucketERKS4_RKcPS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<llvm::MachineBasicBlock*, unsigned int> const&, char const&, std::pair<std::pair<llvm::MachineBasicBlock*, unsigned int>, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_17MachineBasicBlockEjEcNS_12DenseMapInfoIS4_EENS5_IcEEE4growEj\", \"llvm::DenseMap<std::pair<llvm::MachineBasicBlock*, unsigned int>, char, llvm::DenseMapInfo<std::pair<llvm::MachineBasicBlock*, unsigned int> >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_15DomTreeNodeBaseINS_17MachineBasicBlockEEENS_11SmallPtrSetIS4_Lj8EEELb0ENS_11GraphTraitsIS4_EEE6toNextEv\", \"llvm::df_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, llvm::SmallPtrSet<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 8u>, false, llvm::GraphTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_15DomTreeNodeBaseINS1_17MachineBasicBlockEEELj1EjNS1_21PointerLikeTypeTraitsIS6_EEEEN9__gnu_cxx17__normal_iteratorIPS6_S_IS6_SaIS6_EEEEESaISG_EE13_M_insert_auxENSB_IPSG_SI_EERKSG_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > >*, std::vector<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > > > > >, std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*> > > > const&)\"},\n    {\"_ZNK4llvm13LiveIntervals14isLiveOutOfMBBERKNS_12LiveIntervalEPKNS_17MachineBasicBlockE\", \"llvm::LiveIntervals::isLiveOutOfMBB(llvm::LiveInterval const&, llvm::MachineBasicBlock const*) const\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIPNS_12MachineInstrEjENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PS1_IjS4_E\", \"llvm::DenseMap<unsigned int, std::pair<llvm::MachineInstr*, unsigned int>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<llvm::MachineInstr*, unsigned int> > >::InsertIntoBucket(unsigned int const&, std::pair<llvm::MachineInstr*, unsigned int> const&, std::pair<unsigned int, std::pair<llvm::MachineInstr*, unsigned int> >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIPNS_12MachineInstrEjENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::pair<llvm::MachineInstr*, unsigned int>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<llvm::MachineInstr*, unsigned int> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjSt4pairIPNS_12MachineInstrEjENS_12DenseMapInfoIjEENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, std::pair<llvm::MachineInstr*, unsigned int>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::pair<llvm::MachineInstr*, unsigned int> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockESt6vectorIPNS_12MachineInstrESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > >::FindAndConstruct(llvm::MachineBasicBlock* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockESt6vectorIPNS_12MachineInstrESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > >::InsertIntoBucket(llvm::MachineBasicBlock* const&, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > const&, std::pair<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_17MachineBasicBlockESt6vectorIPNS_12MachineInstrESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::MachineBasicBlock*, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >, llvm::DenseMapInfo<llvm::MachineBasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm23createTailDuplicatePassEb\", \"llvm::createTailDuplicatePass(bool)\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePassD1Ev\", \"(anonymous namespace)::TailDuplicatePass::~TailDuplicatePass()\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePassD0Ev\", \"(anonymous namespace)::TailDuplicatePass::~TailDuplicatePass()\"},\n    {\"_ZNK12_GLOBAL__N_117TailDuplicatePass11getPassNameEv\", \"(anonymous namespace)::TailDuplicatePass::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::TailDuplicatePass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_Z10VerifyPHIsRN4llvm15MachineFunctionEb\", \"VerifyPHIs(llvm::MachineFunction&, bool)\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePass10ProcessPHIEPN4llvm12MachineInstrEPNS1_17MachineBasicBlockES5_RNS1_8DenseMapIjjNS1_12DenseMapInfoIjEES8_EERNS1_11SmallVectorISt4pairIjjELj4EEE\", \"(anonymous namespace)::TailDuplicatePass::ProcessPHI(llvm::MachineInstr*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >&, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>&)\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePass20DuplicateInstructionEPN4llvm12MachineInstrEPNS1_17MachineBasicBlockES5_RNS1_15MachineFunctionERNS1_8DenseMapIjjNS1_12DenseMapInfoIjEESA_EE\", \"(anonymous namespace)::TailDuplicatePass::DuplicateInstruction(llvm::MachineInstr*, llvm::MachineBasicBlock*, llvm::MachineBasicBlock*, llvm::MachineFunction&, llvm::DenseMap<unsigned int, unsigned int, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePass17AddSSAUpdateEntryEjjPN4llvm17MachineBasicBlockE\", \"(anonymous namespace)::TailDuplicatePass::AddSSAUpdateEntry(unsigned int, unsigned int, llvm::MachineBasicBlock*)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorISt4pairIPNS_17MachineBasicBlockEjESaIS5_EENS_12DenseMapInfoIjEENS8_IS7_EEE5clearEv\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorISt4pairIPNS_17MachineBasicBlockEjESaIS5_EENS_12DenseMapInfoIjEENS8_IS7_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorISt4pairIPNS_17MachineBasicBlockEjESaIS5_EENS_12DenseMapInfoIjEENS8_IS7_EEE6insertERKS2_IjS7_E\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > >::insert(std::pair<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm17MachineBasicBlockEjESaIS4_EEC2ERKS6_\", \"std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >::vector(std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > const&)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorISt4pairIPNS_17MachineBasicBlockEjESaIS5_EENS_12DenseMapInfoIjEENS8_IS7_EEE16InsertIntoBucketERKjRKS7_PS2_IjS7_E\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > >::InsertIntoBucket(unsigned int const&, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > const&, std::pair<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > >*)\"},\n    {\"_ZN4llvm8DenseMapIjSt6vectorISt4pairIPNS_17MachineBasicBlockEjESaIS5_EENS_12DenseMapInfoIjEENS8_IS7_EEE4growEj\", \"llvm::DenseMap<unsigned int, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm17MachineBasicBlockEjESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::MachineBasicBlock*, unsigned int>*, std::vector<std::pair<llvm::MachineBasicBlock*, unsigned int>, std::allocator<std::pair<llvm::MachineBasicBlock*, unsigned int> > > >, std::pair<llvm::MachineBasicBlock*, unsigned int> const&)\"},\n    {\"_ZN4llvm14SmallSetVectorIPNS_17MachineBasicBlockELj8EEC2IN9__gnu_cxx17__normal_iteratorIPS2_St6vectorIS2_SaIS2_EEEEEET_SC_\", \"llvm::SmallSetVector<llvm::MachineBasicBlock*, 8u>::SmallSetVector<__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::MachineBasicBlock**, std::vector<llvm::MachineBasicBlock*, std::allocator<llvm::MachineBasicBlock*> > >)\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl23ReplaceTailWithBranchToENS_14ilist_iteratorINS_12MachineInstrEEEPNS_17MachineBasicBlockE\", \"llvm::TargetInstrInfoImpl::ReplaceTailWithBranchTo(llvm::ilist_iterator<llvm::MachineInstr>, llvm::MachineBasicBlock*) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl18commuteInstructionEPNS_12MachineInstrEb\", \"llvm::TargetInstrInfoImpl::commuteInstruction(llvm::MachineInstr*, bool) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl21findCommutedOpIndicesEPNS_12MachineInstrERjS3_\", \"llvm::TargetInstrInfoImpl::findCommutedOpIndices(llvm::MachineInstr*, unsigned int&, unsigned int&) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl20PredicateInstructionEPNS_12MachineInstrERKNS_15SmallVectorImplINS_14MachineOperandEEE\", \"llvm::TargetInstrInfoImpl::PredicateInstruction(llvm::MachineInstr*, llvm::SmallVectorImpl<llvm::MachineOperand> const&) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl13reMaterializeERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEEjjPKS4_RKNS_18TargetRegisterInfoE\", \"llvm::TargetInstrInfoImpl::reMaterialize(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, unsigned int, llvm::MachineInstr const*, llvm::TargetRegisterInfo const&) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl16produceSameValueEPKNS_12MachineInstrES3_PKNS_19MachineRegisterInfoE\", \"llvm::TargetInstrInfoImpl::produceSameValue(llvm::MachineInstr const*, llvm::MachineInstr const*, llvm::MachineRegisterInfo const*) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl9duplicateEPNS_12MachineInstrERNS_15MachineFunctionE\", \"llvm::TargetInstrInfoImpl::duplicate(llvm::MachineInstr*, llvm::MachineFunction&) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl20canFoldMemoryOperandEPKNS_12MachineInstrERKNS_15SmallVectorImplIjEE\", \"llvm::TargetInstrInfoImpl::canFoldMemoryOperand(llvm::MachineInstr const*, llvm::SmallVectorImpl<unsigned int> const&) const\"},\n    {\"_Z11canFoldCopyPKN4llvm12MachineInstrEj\", \"canFoldCopy(llvm::MachineInstr const*, unsigned int)\"},\n    {\"_ZNK4llvm15TargetInstrInfo17foldMemoryOperandENS_14ilist_iteratorINS_12MachineInstrEEERKNS_15SmallVectorImplIjEEi\", \"llvm::TargetInstrInfo::foldMemoryOperand(llvm::ilist_iterator<llvm::MachineInstr>, llvm::SmallVectorImpl<unsigned int> const&, int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo17foldMemoryOperandENS_14ilist_iteratorINS_12MachineInstrEEERKNS_15SmallVectorImplIjEEPS2_\", \"llvm::TargetInstrInfo::foldMemoryOperand(llvm::ilist_iterator<llvm::MachineInstr>, llvm::SmallVectorImpl<unsigned int> const&, llvm::MachineInstr*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo40isReallyTriviallyReMaterializableGenericEPKNS_12MachineInstrEPNS_13AliasAnalysisE\", \"llvm::TargetInstrInfo::isReallyTriviallyReMaterializableGeneric(llvm::MachineInstr const*, llvm::AliasAnalysis*) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl20isSchedulingBoundaryEPKNS_12MachineInstrEPKNS_17MachineBasicBlockERKNS_15MachineFunctionE\", \"llvm::TargetInstrInfoImpl::isSchedulingBoundary(llvm::MachineInstr const*, llvm::MachineBasicBlock const*, llvm::MachineFunction const&) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl24usePreRAHazardRecognizerEv\", \"llvm::TargetInstrInfoImpl::usePreRAHazardRecognizer() const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl28CreateTargetHazardRecognizerEPKNS_13TargetMachineEPKNS_11ScheduleDAGE\", \"llvm::TargetInstrInfoImpl::CreateTargetHazardRecognizer(llvm::TargetMachine const*, llvm::ScheduleDAG const*) const\"},\n    {\"_ZNK4llvm19TargetInstrInfoImpl34CreateTargetPostRAHazardRecognizerEPKNS_18InstrItineraryDataEPKNS_11ScheduleDAGE\", \"llvm::TargetInstrInfoImpl::CreateTargetPostRAHazardRecognizer(llvm::InstrItineraryData const*, llvm::ScheduleDAG const*) const\"},\n    {\"_ZNK4llvm24ScheduleHazardRecognizer12atIssueLimitEv\", \"llvm::ScheduleHazardRecognizer::atIssueLimit() const\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer13getHazardTypeEPNS_5SUnitEi\", \"llvm::ScheduleHazardRecognizer::getHazardType(llvm::SUnit*, int)\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer5ResetEv\", \"llvm::ScheduleHazardRecognizer::Reset()\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer15EmitInstructionEPNS_5SUnitE\", \"llvm::ScheduleHazardRecognizer::EmitInstruction(llvm::SUnit*)\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer12AdvanceCycleEv\", \"llvm::ScheduleHazardRecognizer::AdvanceCycle()\"},\n    {\"_ZN4llvm24ScheduleHazardRecognizer11RecedeCycleEv\", \"llvm::ScheduleHazardRecognizer::RecedeCycle()\"},\n    {\"_ZN4llvm27TargetLoweringObjectFileELF10InitializeERNS_9MCContextERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileELF::Initialize(llvm::MCContext&, llvm::TargetMachine const&)\"},\n    {\"_ZNK4llvm27TargetLoweringObjectFileELF17getEHFrameSectionEv\", \"llvm::TargetLoweringObjectFileELF::getEHFrameSection() const\"},\n    {\"_ZNK4llvm27TargetLoweringObjectFileELF24getExplicitSectionGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileELF::getExplicitSectionGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm27TargetLoweringObjectFileELF22SelectSectionForGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileELF::SelectSectionForGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm27TargetLoweringObjectFileELF21getSectionForConstantENS_11SectionKindE\", \"llvm::TargetLoweringObjectFileELF::getSectionForConstant(llvm::SectionKind) const\"},\n    {\"_ZNK4llvm27TargetLoweringObjectFileELF30getExprForDwarfGlobalReferenceEPKNS_11GlobalValueEPNS_7ManglerEPNS_17MachineModuleInfoEjRNS_10MCStreamerE\", \"llvm::TargetLoweringObjectFileELF::getExprForDwarfGlobalReference(llvm::GlobalValue const*, llvm::Mangler*, llvm::MachineModuleInfo*, unsigned int, llvm::MCStreamer&) const\"},\n    {\"_ZN4llvm29TargetLoweringObjectFileMachO10InitializeERNS_9MCContextERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileMachO::Initialize(llvm::MCContext&, llvm::TargetMachine const&)\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO17getEHFrameSectionEv\", \"llvm::TargetLoweringObjectFileMachO::getEHFrameSection() const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO24getExplicitSectionGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileMachO::getExplicitSectionGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO22SelectSectionForGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileMachO::SelectSectionForGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO21getSectionForConstantENS_11SectionKindE\", \"llvm::TargetLoweringObjectFileMachO::getSectionForConstant(llvm::SectionKind) const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO26shouldEmitUsedDirectiveForEPKNS_11GlobalValueEPNS_7ManglerE\", \"llvm::TargetLoweringObjectFileMachO::shouldEmitUsedDirectiveFor(llvm::GlobalValue const*, llvm::Mangler*) const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO30getExprForDwarfGlobalReferenceEPKNS_11GlobalValueEPNS_7ManglerEPNS_17MachineModuleInfoEjRNS_10MCStreamerE\", \"llvm::TargetLoweringObjectFileMachO::getExprForDwarfGlobalReference(llvm::GlobalValue const*, llvm::Mangler*, llvm::MachineModuleInfo*, unsigned int, llvm::MCStreamer&) const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO22getPersonalityEncodingEv\", \"llvm::TargetLoweringObjectFileMachO::getPersonalityEncoding() const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO15getLSDAEncodingEv\", \"llvm::TargetLoweringObjectFileMachO::getLSDAEncoding() const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO14getFDEEncodingEv\", \"llvm::TargetLoweringObjectFileMachO::getFDEEncoding() const\"},\n    {\"_ZNK4llvm29TargetLoweringObjectFileMachO16getTTypeEncodingEv\", \"llvm::TargetLoweringObjectFileMachO::getTTypeEncoding() const\"},\n    {\"_ZN4llvm28TargetLoweringObjectFileCOFF10InitializeERNS_9MCContextERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileCOFF::Initialize(llvm::MCContext&, llvm::TargetMachine const&)\"},\n    {\"_ZNK4llvm28TargetLoweringObjectFileCOFF17getEHFrameSectionEv\", \"llvm::TargetLoweringObjectFileCOFF::getEHFrameSection() const\"},\n    {\"_ZNK4llvm28TargetLoweringObjectFileCOFF24getExplicitSectionGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm28TargetLoweringObjectFileCOFF22SelectSectionForGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFileCOFF::SelectSectionForGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZN4llvm39initializeTwoAddressInstructionPassPassERNS_12PassRegistryE\", \"llvm::initializeTwoAddressInstructionPassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_125TwoAddressInstructionPassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::TwoAddressInstructionPass>()\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPassD1Ev\", \"(anonymous namespace)::TwoAddressInstructionPass::~TwoAddressInstructionPass()\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPassD0Ev\", \"(anonymous namespace)::TwoAddressInstructionPass::~TwoAddressInstructionPass()\"},\n    {\"_ZNK12_GLOBAL__N_125TwoAddressInstructionPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::TwoAddressInstructionPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPass20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::TwoAddressInstructionPass::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPass23TryInstructionTransformERN4llvm14ilist_iteratorINS1_12MachineInstrEEES5_RNS2_INS1_17MachineBasicBlockEEEjjj\", \"(anonymous namespace)::TwoAddressInstructionPass::TryInstructionTransform(llvm::ilist_iterator<llvm::MachineInstr>&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::ilist_iterator<llvm::MachineBasicBlock>&, unsigned int, unsigned int, unsigned int)\"},\n    {\"_Z8isKilledRN4llvm12MachineInstrEjPKNS_19MachineRegisterInfoEPKNS_15TargetInstrInfoE\", \"isKilled(llvm::MachineInstr&, unsigned int, llvm::MachineRegisterInfo const*, llvm::TargetInstrInfo const*)\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPass17NoUseAfterLastDefEjPN4llvm17MachineBasicBlockEjRj\", \"(anonymous namespace)::TwoAddressInstructionPass::NoUseAfterLastDef(unsigned int, llvm::MachineBasicBlock*, unsigned int, unsigned int&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIjjELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE6insertERKS2_IjS4_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > >::insert(std::pair<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIjjELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > >::clear()\"},\n    {\"_ZSt16__introsort_loopIPjlEvT_S1_T0_\", \"void std::__introsort_loop<unsigned int*, long>(unsigned int*, unsigned int*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPjEvT_S1_\", \"void std::__final_insertion_sort<unsigned int*>(unsigned int*, unsigned int*)\"},\n    {\"_ZSt13__heap_selectIPjEvT_S1_S1_\", \"void std::__heap_select<unsigned int*>(unsigned int*, unsigned int*, unsigned int*)\"},\n    {\"_ZSt9sort_heapIPjEvT_S1_\", \"void std::sort_heap<unsigned int*>(unsigned int*, unsigned int*)\"},\n    {\"_ZSt9make_heapIPjEvT_S1_\", \"void std::make_heap<unsigned int*>(unsigned int*, unsigned int*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIjjELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIjjEEaSERKS3_\", \"llvm::SmallVectorImpl<std::pair<unsigned int, unsigned int> >::operator=(llvm::SmallVectorImpl<std::pair<unsigned int, unsigned int> > const&)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIjjELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE16InsertIntoBucketERKjRKS4_PS2_IjS4_E\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > >::InsertIntoBucket(unsigned int const&, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> const&, std::pair<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIjNS_11SmallVectorISt4pairIjjELj4EEENS_12DenseMapInfoIjEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u>, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, unsigned int>, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm34initializeUnreachableBlockElimPassERNS_12PassRegistryE\", \"llvm::initializeUnreachableBlockElimPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm37createUnreachableBlockEliminationPassEv\", \"llvm::createUnreachableBlockEliminationPass()\"},\n    {\"_ZN4llvm41initializeUnreachableMachineBlockElimPassERNS_12PassRegistryE\", \"llvm::initializeUnreachableMachineBlockElimPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_127UnreachableMachineBlockElimEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::UnreachableMachineBlockElim>()\"},\n    {\"_ZN12_GLOBAL__N_127UnreachableMachineBlockElimD1Ev\", \"(anonymous namespace)::UnreachableMachineBlockElim::~UnreachableMachineBlockElim()\"},\n    {\"_ZN12_GLOBAL__N_127UnreachableMachineBlockElimD0Ev\", \"(anonymous namespace)::UnreachableMachineBlockElim::~UnreachableMachineBlockElim()\"},\n    {\"_ZNK12_GLOBAL__N_127UnreachableMachineBlockElim16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::UnreachableMachineBlockElim::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_127UnreachableMachineBlockElim20runOnMachineFunctionERN4llvm15MachineFunctionE\", \"(anonymous namespace)::UnreachableMachineBlockElim::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN12_GLOBAL__N_120UnreachableBlockElimD1Ev\", \"(anonymous namespace)::UnreachableBlockElim::~UnreachableBlockElim()\"},\n    {\"_ZN12_GLOBAL__N_120UnreachableBlockElimD0Ev\", \"(anonymous namespace)::UnreachableBlockElim::~UnreachableBlockElim()\"},\n    {\"_ZNK12_GLOBAL__N_120UnreachableBlockElim16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::UnreachableBlockElim::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_120UnreachableBlockElim13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::UnreachableBlockElim::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_120UnreachableBlockElimEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::UnreachableBlockElim>()\"},\n    {\"_ZN4llvm12df_ext_beginIPNS_15MachineFunctionENS_11SmallPtrSetIPNS_17MachineBasicBlockELj8EEEEENS_15df_ext_iteratorIT_T0_EERKS8_RS9_\", \"llvm::df_ext_iterator<llvm::MachineFunction*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u> > llvm::df_ext_begin<llvm::MachineFunction*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u> >(llvm::MachineFunction* const&, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_15MachineFunctionENS_11SmallPtrSetIPNS_17MachineBasicBlockELj8EEELb1ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::MachineFunction*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>, true, llvm::GraphTraits<llvm::MachineFunction*> >::toNext()\"},\n    {\"_ZN4llvm11df_iteratorIPNS_15MachineFunctionENS_11SmallPtrSetIPNS_17MachineBasicBlockELj8EEELb1ENS_11GraphTraitsIS2_EEEC2ES5_RS6_\", \"llvm::df_iterator<llvm::MachineFunction*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>, true, llvm::GraphTraits<llvm::MachineFunction*> >::df_iterator(llvm::MachineBasicBlock*, llvm::SmallPtrSet<llvm::MachineBasicBlock*, 8u>&)\"},\n    {\"_ZN4llvm12df_ext_beginIPNS_8FunctionENS_11SmallPtrSetIPNS_10BasicBlockELj8EEEEENS_15df_ext_iteratorIT_T0_EERKS8_RS9_\", \"llvm::df_ext_iterator<llvm::Function*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u> > llvm::df_ext_begin<llvm::Function*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u> >(llvm::Function* const&, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_8FunctionENS_11SmallPtrSetIPNS_10BasicBlockELj8EEELb1ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::Function*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, true, llvm::GraphTraits<llvm::Function*> >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_10BasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEENS1_12SuccIteratorIPNS1_14TerminatorInstES3_EEESaISC_EEC2ERKSE_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > >::vector(std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > > const&)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_8FunctionENS_11SmallPtrSetIPNS_10BasicBlockELj8EEELb1ENS_11GraphTraitsIS2_EEEC2ES5_RS6_\", \"llvm::df_iterator<llvm::Function*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, true, llvm::GraphTraits<llvm::Function*> >::df_iterator(llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>&)\"},\n    {\"_ZN4llvm24initializeVirtRegMapPassERNS_12PassRegistryE\", \"llvm::initializeVirtRegMapPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm10VirtRegMap20runOnMachineFunctionERNS_15MachineFunctionE\", \"llvm::VirtRegMap::runOnMachineFunction(llvm::MachineFunction&)\"},\n    {\"_ZN4llvm10VirtRegMap4growEv\", \"llvm::VirtRegMap::grow()\"},\n    {\"_ZN4llvm10VirtRegMap15createSpillSlotEPKNS_19TargetRegisterClassE\", \"llvm::VirtRegMap::createSpillSlot(llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm10VirtRegMap15getRegAllocPrefEj\", \"llvm::VirtRegMap::getRegAllocPref(unsigned int)\"},\n    {\"_ZN4llvm10VirtRegMap20assignVirt2StackSlotEj\", \"llvm::VirtRegMap::assignVirt2StackSlot(unsigned int)\"},\n    {\"_ZN4llvm10VirtRegMap20assignVirt2StackSlotEji\", \"llvm::VirtRegMap::assignVirt2StackSlot(unsigned int, int)\"},\n    {\"_ZN4llvm10VirtRegMap17assignVirtReMatIdEj\", \"llvm::VirtRegMap::assignVirtReMatId(unsigned int)\"},\n    {\"_ZN4llvm10VirtRegMap17assignVirtReMatIdEji\", \"llvm::VirtRegMap::assignVirtReMatId(unsigned int, int)\"},\n    {\"_ZN4llvm10VirtRegMap21getEmergencySpillSlotEPKNS_19TargetRegisterClassE\", \"llvm::VirtRegMap::getEmergencySpillSlot(llvm::TargetRegisterClass const*)\"},\n    {\"_ZN4llvm10VirtRegMap15addSpillSlotUseEiPNS_12MachineInstrE\", \"llvm::VirtRegMap::addSpillSlotUse(int, llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap10virtFoldedEjPNS_12MachineInstrES2_NS0_6ModRefE\", \"llvm::VirtRegMap::virtFolded(unsigned int, llvm::MachineInstr*, llvm::MachineInstr*, llvm::VirtRegMap::ModRef)\"},\n    {\"_ZN4llvm10VirtRegMap10virtFoldedEjPNS_12MachineInstrENS0_6ModRefE\", \"llvm::VirtRegMap::virtFolded(unsigned int, llvm::MachineInstr*, llvm::VirtRegMap::ModRef)\"},\n    {\"_ZN4llvm10VirtRegMap26RemoveMachineInstrFromMapsEPNS_12MachineInstrE\", \"llvm::VirtRegMap::RemoveMachineInstrFromMaps(llvm::MachineInstr*)\"},\n    {\"_ZN4llvm10VirtRegMap19FindUnusedRegistersEPNS_13LiveIntervalsE\", \"llvm::VirtRegMap::FindUnusedRegisters(llvm::LiveIntervals*)\"},\n    {\"_ZNK4llvm10VirtRegMap5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::VirtRegMap::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm10VirtRegMap4dumpEv\", \"llvm::VirtRegMap::dump() const\"},\n    {\"_ZN4llvm15SmallVectorImplINS_11SmallPtrSetIPNS_12MachineInstrELj4EEEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::SmallPtrSet<llvm::MachineInstr*, 4u> >::resize(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE6insertERKSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::insert(std::pair<llvm::TargetRegisterClass const*, llvm::BitVector> const&)\"},\n    {\"_ZN4llvm10VirtRegMapD1Ev\", \"llvm::VirtRegMap::~VirtRegMap()\"},\n    {\"_ZN4llvm10VirtRegMapD0Ev\", \"llvm::VirtRegMap::~VirtRegMap()\"},\n    {\"_ZNK4llvm10VirtRegMap16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::VirtRegMap::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIjSaIjEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE5eraseESt17_Rb_tree_iteratorIS8_ESG_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIjSaIjEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineInstr* const, std::vector<unsigned int, std::allocator<unsigned int> > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIS3_IjbESaIS6_EEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE5eraseESt17_Rb_tree_iteratorIS9_ESH_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIS3_IjbESaIS6_EEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_S3_IjNS0_10VirtRegMap6ModRefEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE5eraseESt17_Rb_tree_iteratorIS8_ESG_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >, std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_S3_IjNS0_10VirtRegMap6ModRefEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_S3_IjNS0_10VirtRegMap6ModRefEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE15_M_insert_equalESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > > >::_M_insert_equal(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > >, std::pair<llvm::MachineInstr* const, std::pair<unsigned int, llvm::VirtRegMap::ModRef> > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_iESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, int>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, int> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::TargetRegisterClass const* const, int> >, std::pair<llvm::TargetRegisterClass const* const, int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_iESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, int>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, int> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, int> > >::_M_insert_unique(std::pair<llvm::TargetRegisterClass const* const, int> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm12MachineInstrESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::MachineInstr**, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> > >, unsigned long, llvm::MachineInstr* const&)\"},\n    {\"_ZNSt6vectorIN4llvm9SlotIndexESaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_\", \"std::vector<llvm::SlotIndex, std::allocator<llvm::SlotIndex> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::SlotIndex*, std::vector<llvm::SlotIndex, std::allocator<llvm::SlotIndex> > >, unsigned long, llvm::SlotIndex const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_19TargetRegisterClassENS_9BitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::TargetRegisterClass const*, llvm::BitVector, llvm::DenseMapInfo<llvm::TargetRegisterClass const*>, llvm::DenseMapInfo<llvm::BitVector> >::shrink_and_clear()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_11SmallPtrSetIPNS_12MachineInstrELj4EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::SmallPtrSet<llvm::MachineInstr*, 4u>, false>::grow(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm19TargetRegisterClassESt4pairIKS3_iESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::TargetRegisterClass const*, std::pair<llvm::TargetRegisterClass const* const, int>, std::_Select1st<std::pair<llvm::TargetRegisterClass const* const, int> >, std::less<llvm::TargetRegisterClass const*>, std::allocator<std::pair<llvm::TargetRegisterClass const* const, int> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::TargetRegisterClass const* const, int> >*)\"},\n    {\"_ZN4llvm10VirtRegMapD2Ev\", \"llvm::VirtRegMap::~VirtRegMap()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_10VirtRegMapEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::VirtRegMap>()\"},\n    {\"_ZN4llvm10VirtRegMapC2Ev\", \"llvm::VirtRegMap::VirtRegMap()\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEED1Ev\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::~opt()\"},\n    {\"_ZN4llvm15VirtRegRewriterD0Ev\", \"llvm::VirtRegRewriter::~VirtRegRewriter()\"},\n    {\"_ZN4llvm15VirtRegRewriterD1Ev\", \"llvm::VirtRegRewriter::~VirtRegRewriter()\"},\n    {\"_ZN4llvm15VirtRegRewriterD2Ev\", \"llvm::VirtRegRewriter::~VirtRegRewriter()\"},\n    {\"_ZN4llvm21createVirtRegRewriterEv\", \"llvm::createVirtRegRewriter()\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEE14getOptionWidthEv\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEE15printOptionInfoEm\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEED0Ev\", \"llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEED1Ev\", \"llvm::cl::parser<(anonymous namespace)::RewriterName>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEED0Ev\", \"llvm::cl::parser<(anonymous namespace)::RewriterName>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEE13getNumOptionsEv\", \"llvm::cl::parser<(anonymous namespace)::RewriterName>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEE9getOptionEj\", \"llvm::cl::parser<(anonymous namespace)::RewriterName>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEE14getDescriptionEj\", \"llvm::cl::parser<(anonymous namespace)::RewriterName>::getDescription(unsigned int) const\"},\n    {\"_ZN12_GLOBAL__N_115TrivialRewriterD1Ev\", \"(anonymous namespace)::TrivialRewriter::~TrivialRewriter()\"},\n    {\"_ZN12_GLOBAL__N_115TrivialRewriterD0Ev\", \"(anonymous namespace)::TrivialRewriter::~TrivialRewriter()\"},\n    {\"_ZN12_GLOBAL__N_115TrivialRewriter20runOnMachineFunctionERN4llvm15MachineFunctionERNS1_10VirtRegMapEPNS1_13LiveIntervalsE\", \"(anonymous namespace)::TrivialRewriter::runOnMachineFunction(llvm::MachineFunction&, llvm::VirtRegMap&, llvm::LiveIntervals*)\"},\n    {\"_Z17substitutePhysRegRN4llvm14MachineOperandEjRKNS_18TargetRegisterInfoE\", \"substitutePhysReg(llvm::MachineOperand&, unsigned int, llvm::TargetRegisterInfo const&)\"},\n    {\"_ZN12_GLOBAL__N_113LocalRewriterD1Ev\", \"(anonymous namespace)::LocalRewriter::~LocalRewriter()\"},\n    {\"_ZN12_GLOBAL__N_113LocalRewriterD0Ev\", \"(anonymous namespace)::LocalRewriter::~LocalRewriter()\"},\n    {\"_ZN12_GLOBAL__N_113LocalRewriter20runOnMachineFunctionERN4llvm15MachineFunctionERNS1_10VirtRegMapEPNS1_13LiveIntervalsE\", \"(anonymous namespace)::LocalRewriter::runOnMachineFunction(llvm::MachineFunction&, llvm::VirtRegMap&, llvm::LiveIntervals*)\"},\n    {\"_ZN12_GLOBAL__N_113LocalRewriter10RewriteMBBEPN4llvm13LiveIntervalsERNS_15AvailableSpillsERNS1_9BitVectorERSt6vectorIPNS1_14MachineOperandESaISA_EE\", \"(anonymous namespace)::LocalRewriter::RewriteMBB(llvm::LiveIntervals*, (anonymous namespace)::AvailableSpills&, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&)\"},\n    {\"_ZN12_GLOBAL__N_113LocalRewriter10EraseInstrEPN4llvm12MachineInstrE\", \"(anonymous namespace)::LocalRewriter::EraseInstr(llvm::MachineInstr*)\"},\n    {\"_Z22ResurrectConfirmedKilljPKN4llvm18TargetRegisterInfoERNS_9BitVectorERSt6vectorIPNS_14MachineOperandESaIS7_EE\", \"ResurrectConfirmedKill(unsigned int, llvm::TargetRegisterInfo const*, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&)\"},\n    {\"_ZN12_GLOBAL__N_115AvailableSpills18ClobberPhysRegOnlyEj\", \"(anonymous namespace)::AvailableSpills::ClobberPhysRegOnly(unsigned int)\"},\n    {\"_Z15InvalidateKillsRN4llvm12MachineInstrEPKNS_18TargetRegisterInfoERNS_9BitVectorERSt6vectorIPNS_14MachineOperandESaIS9_EEPNS_11SmallVectorIjLj2EEE\", \"InvalidateKills(llvm::MachineInstr&, llvm::TargetRegisterInfo const*, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&, llvm::SmallVector<unsigned int, 2u>*)\"},\n    {\"_ZN12_GLOBAL__N_115AvailableSpills22ModifyStackSlotOrReMatEi\", \"(anonymous namespace)::AvailableSpills::ModifyStackSlotOrReMat(int)\"},\n    {\"_ZN12_GLOBAL__N_115AvailableSpills12addAvailableEijb\", \"(anonymous namespace)::AvailableSpills::addAvailable(int, unsigned int, bool)\"},\n    {\"_Z11UpdateKillsRN4llvm12MachineInstrEPKNS_18TargetRegisterInfoERNS_9BitVectorERSt6vectorIPNS_14MachineOperandESaIS9_EE\", \"UpdateKills(llvm::MachineInstr&, llvm::TargetRegisterInfo const*, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&)\"},\n    {\"_Z14isSafeToDeleteRN4llvm12MachineInstrE\", \"isSafeToDelete(llvm::MachineInstr&)\"},\n    {\"_Z13ResurrectKillRN4llvm12MachineInstrEjPKNS_18TargetRegisterInfoERNS_9BitVectorERSt6vectorIPNS_14MachineOperandESaIS9_EE\", \"ResurrectKill(llvm::MachineInstr&, unsigned int, llvm::TargetRegisterInfo const*, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&)\"},\n    {\"_ZN12_GLOBAL__N_19ReuseInfo15GetRegForReloadEPKN4llvm19TargetRegisterClassEjRNS1_15MachineFunctionEPNS1_12MachineInstrERNS_15AvailableSpillsERSt6vectorIS8_SaIS8_EERNS1_8SmallSetIjLj8EEERNS1_9BitVectorERSB_IPNS1_14MachineOperandESaISL_EERNS1_10VirtRegMapE\", \"(anonymous namespace)::ReuseInfo::GetRegForReload(llvm::TargetRegisterClass const*, unsigned int, llvm::MachineFunction&, llvm::MachineInstr*, (anonymous namespace)::AvailableSpills&, std::vector<llvm::MachineInstr*, std::allocator<llvm::MachineInstr*> >&, llvm::SmallSet<unsigned int, 8u>&, llvm::BitVector&, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >&, llvm::VirtRegMap&)\"},\n    {\"_Z16ComputeReloadLocN4llvm14ilist_iteratorINS_12MachineInstrEEES2_jPKNS_18TargetRegisterInfoEbiPKNS_15TargetInstrInfoERKNS_15MachineFunctionE\", \"ComputeReloadLoc(llvm::ilist_iterator<llvm::MachineInstr>, llvm::ilist_iterator<llvm::MachineInstr>, unsigned int, llvm::TargetRegisterInfo const*, bool, int, llvm::TargetInstrInfo const*, llvm::MachineFunction const&)\"},\n    {\"_Z13ReMaterializeRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEEjjPKNS_15TargetInstrInfoEPKNS_18TargetRegisterInfoERNS_10VirtRegMapE\", \"ReMaterialize(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, unsigned int, unsigned int, llvm::TargetInstrInfo const*, llvm::TargetRegisterInfo const*, llvm::VirtRegMap&)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIPN4llvm12MachineInstrEiElN12_GLOBAL__N_19RefSorterEEvT_S8_T0_T1_\", \"void std::__introsort_loop<std::pair<llvm::MachineInstr*, int>*, long, (anonymous namespace)::RefSorter>(std::pair<llvm::MachineInstr*, int>*, std::pair<llvm::MachineInstr*, int>*, long, (anonymous namespace)::RefSorter)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIPN4llvm12MachineInstrEiEN12_GLOBAL__N_19RefSorterEEvT_S8_T0_\", \"void std::__insertion_sort<std::pair<llvm::MachineInstr*, int>*, (anonymous namespace)::RefSorter>(std::pair<llvm::MachineInstr*, int>*, std::pair<llvm::MachineInstr*, int>*, (anonymous namespace)::RefSorter)\"},\n    {\"_ZN12_GLOBAL__N_115AvailableSpills26disallowClobberPhysRegOnlyEj\", \"(anonymous namespace)::AvailableSpills::disallowClobberPhysRegOnly(unsigned int)\"},\n    {\"_Z20FoldsStackSlotModRefRN4llvm12MachineInstrEijPKNS_15TargetInstrInfoEPKNS_18TargetRegisterInfoERNS_10VirtRegMapE\", \"FoldsStackSlotModRef(llvm::MachineInstr&, int, unsigned int, llvm::TargetInstrInfo const*, llvm::TargetRegisterInfo const*, llvm::VirtRegMap&)\"},\n    {\"_ZN4llvm8DenseMapIiNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIiEENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::clear()\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKijESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<int, std::pair<int const, unsigned int>, std::_Select1st<std::pair<int const, unsigned int> >, std::less<int>, std::allocator<std::pair<int const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, int>, std::_Select1st<std::pair<unsigned int const, int> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, int> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, int> >*)\"},\n    {\"_ZN4llvm8DenseMapIiNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIiEENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIiNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIiEENS5_IS4_EEE16FindAndConstructERKi\", \"llvm::DenseMap<int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::FindAndConstruct(int const&)\"},\n    {\"_ZN4llvm8DenseMapIiNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIiEENS5_IS4_EEE16InsertIntoBucketERKiRKS4_PSt4pairIiS4_E\", \"llvm::DenseMap<int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::InsertIntoBucket(int const&, llvm::SmallVector<llvm::MachineInstr*, 4u> const&, std::pair<int, llvm::SmallVector<llvm::MachineInstr*, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIiNS_11SmallVectorIPNS_12MachineInstrELj4EEENS_12DenseMapInfoIiEENS5_IS4_EEE4growEj\", \"llvm::DenseMap<int, llvm::SmallVector<llvm::MachineInstr*, 4u>, llvm::DenseMapInfo<int>, llvm::DenseMapInfo<llvm::SmallVector<llvm::MachineInstr*, 4u> > >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKijESt10_Select1stIS2_ESt4lessIiESaIS2_EE5eraseESt17_Rb_tree_iteratorIS2_ESA_\", \"std::_Rb_tree<int, std::pair<int const, unsigned int>, std::_Select1st<std::pair<int const, unsigned int> >, std::less<int>, std::allocator<std::pair<int const, unsigned int> > >::erase(std::_Rb_tree_iterator<std::pair<int const, unsigned int> >, std::_Rb_tree_iterator<std::pair<int const, unsigned int> >)\"},\n    {\"_ZN4llvm8SmallSetIiLj2EE6insertERKi\", \"llvm::SmallSet<int, 2u>::insert(int const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKijESt10_Select1stIS2_ESt4lessIiESaIS2_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS2_ERKS2_\", \"std::_Rb_tree<int, std::pair<int const, unsigned int>, std::_Select1st<std::pair<int const, unsigned int> >, std::less<int>, std::allocator<std::pair<int const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<int const, unsigned int> >, std::pair<int const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIiSt4pairIKijESt10_Select1stIS2_ESt4lessIiESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<int, std::pair<int const, unsigned int>, std::_Select1st<std::pair<int const, unsigned int> >, std::less<int>, std::allocator<std::pair<int const, unsigned int> > >::_M_insert_unique(std::pair<int const, unsigned int> const&)\"},\n    {\"_ZN4llvm8SmallSetIjLj2EE6insertERKj\", \"llvm::SmallSet<unsigned int, 2u>::insert(unsigned int const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12MachineInstrESt4pairIKS2_St6vectorIS3_IjbESaIS6_EEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS9_ERKS9_\", \"std::_Rb_tree<llvm::MachineInstr*, std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > >, std::_Select1st<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::less<llvm::MachineInstr*>, std::allocator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > >, std::pair<llvm::MachineInstr* const, std::vector<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool> > > > const&)\"},\n    {\"_ZN4llvm8SmallSetIiLj4EE6insertERKi\", \"llvm::SmallSet<int, 4u>::insert(int const&)\"},\n    {\"_ZNSt6vectorIPN4llvm14MachineOperandESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::MachineOperand**, std::vector<llvm::MachineOperand*, std::allocator<llvm::MachineOperand*> > >, unsigned long, llvm::MachineOperand* const&)\"},\n    {\"_ZN4llvm18initializeADCEPassERNS_12PassRegistryE\", \"llvm::initializeADCEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createAggressiveDCEPassEv\", \"llvm::createAggressiveDCEPass()\"},\n    {\"_ZN12_GLOBAL__N_14ADCED1Ev\", \"(anonymous namespace)::ADCE::~ADCE()\"},\n    {\"_ZN12_GLOBAL__N_14ADCED0Ev\", \"(anonymous namespace)::ADCE::~ADCE()\"},\n    {\"_ZNK12_GLOBAL__N_14ADCE16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::ADCE::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14ADCE13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::ADCE::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_14ADCEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::ADCE>()\"},\n    {\"_ZN4llvm28initializeCodeGenPreparePassERNS_12PassRegistryE\", \"llvm::initializeCodeGenPreparePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24createCodeGenPreparePassEPKNS_14TargetLoweringE\", \"llvm::createCodeGenPreparePass(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepareC1EPKN4llvm14TargetLoweringE\", \"(anonymous namespace)::CodeGenPrepare::CodeGenPrepare(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepareD1Ev\", \"(anonymous namespace)::CodeGenPrepare::~CodeGenPrepare()\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepareD0Ev\", \"(anonymous namespace)::CodeGenPrepare::~CodeGenPrepare()\"},\n    {\"_ZNK12_GLOBAL__N_114CodeGenPrepare16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::CodeGenPrepare::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepare13releaseMemoryEv\", \"(anonymous namespace)::CodeGenPrepare::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepare13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::CodeGenPrepare::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepare12OptimizeInstEPN4llvm11InstructionE\", \"(anonymous namespace)::CodeGenPrepare::OptimizeInst(llvm::Instruction*)\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepare18OptimizeMemoryInstEPN4llvm11InstructionEPNS1_5ValueEPKNS1_4TypeE\", \"(anonymous namespace)::CodeGenPrepare::OptimizeMemoryInst(llvm::Instruction*, llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_131CodeGenPrepareFortifiedLibCallsD1Ev\", \"(anonymous namespace)::CodeGenPrepareFortifiedLibCalls::~CodeGenPrepareFortifiedLibCalls()\"},\n    {\"_ZN12_GLOBAL__N_131CodeGenPrepareFortifiedLibCalls11replaceCallEPN4llvm5ValueE\", \"(anonymous namespace)::CodeGenPrepareFortifiedLibCalls::replaceCall(llvm::Value*)\"},\n    {\"_ZNK12_GLOBAL__N_131CodeGenPrepareFortifiedLibCalls10isFoldableEjjb\", \"(anonymous namespace)::CodeGenPrepareFortifiedLibCalls::isFoldable(unsigned int, unsigned int, bool) const\"},\n    {\"_ZN12_GLOBAL__N_131CodeGenPrepareFortifiedLibCallsD0Ev\", \"(anonymous namespace)::CodeGenPrepareFortifiedLibCalls::~CodeGenPrepareFortifiedLibCalls()\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114CodeGenPrepareEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::CodeGenPrepare>()\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueES2_NS_12DenseMapInfoIS2_EES4_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value*, llvm::Value*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Value*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::Value*, llvm::Value*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(llvm::Value* const&, llvm::Value* const&, std::pair<llvm::Value*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::Value*, llvm::Value*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_11InstructionEEaSERKS3_\", \"llvm::SmallVectorImpl<llvm::Instruction*>::operator=(llvm::SmallVectorImpl<llvm::Instruction*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_7CmpInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::CmpInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::CmpInst*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::CmpInst* const&, std::pair<llvm::BasicBlock*, llvm::CmpInst*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_7CmpInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::CmpInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::CmpInst*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_11InstructionENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Instruction*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Instruction*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::Instruction* const&, std::pair<llvm::BasicBlock*, llvm::Instruction*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_11InstructionENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Instruction*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Instruction*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_8CastInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::CastInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::CastInst*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::CastInst* const&, std::pair<llvm::BasicBlock*, llvm::CastInst*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_8CastInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::CastInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::CastInst*> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8SmallSetISt4pairIPKNS_10BasicBlockES4_ELj8EE5countERKS5_\", \"llvm::SmallSet<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, 8u>::count(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&) const\"},\n    {\"_ZN4llvm8SmallSetISt4pairIPKNS_10BasicBlockES4_ELj8EE6insertERKS5_\", \"llvm::SmallSet<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, 8u>::insert(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::_Identity<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> > >::_M_insert_unique(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::_Identity<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >*)\"},\n    {\"_ZN4llvm40initializeCorrelatedValuePropagationPassERNS_12PassRegistryE\", \"llvm::initializeCorrelatedValuePropagationPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm36createCorrelatedValuePropagationPassEv\", \"llvm::createCorrelatedValuePropagationPass()\"},\n    {\"_ZN12_GLOBAL__N_126CorrelatedValuePropagationD1Ev\", \"(anonymous namespace)::CorrelatedValuePropagation::~CorrelatedValuePropagation()\"},\n    {\"_ZN12_GLOBAL__N_126CorrelatedValuePropagationD0Ev\", \"(anonymous namespace)::CorrelatedValuePropagation::~CorrelatedValuePropagation()\"},\n    {\"_ZNK12_GLOBAL__N_126CorrelatedValuePropagation16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::CorrelatedValuePropagation::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_126CorrelatedValuePropagation13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::CorrelatedValuePropagation::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_126CorrelatedValuePropagationEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::CorrelatedValuePropagation>()\"},\n    {\"_ZN4llvm17initializeDSEPassERNS_12PassRegistryE\", \"llvm::initializeDSEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm30createDeadStoreEliminationPassEv\", \"llvm::createDeadStoreEliminationPass()\"},\n    {\"_ZN12_GLOBAL__N_13DSED1Ev\", \"(anonymous namespace)::DSE::~DSE()\"},\n    {\"_ZN12_GLOBAL__N_13DSED0Ev\", \"(anonymous namespace)::DSE::~DSE()\"},\n    {\"_ZNK12_GLOBAL__N_13DSE16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::DSE::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_13DSE13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::DSE::runOnFunction(llvm::Function&)\"},\n    {\"_Z21DeleteDeadInstructionPN4llvm11InstructionERNS_24MemoryDependenceAnalysisEPNS_11SmallPtrSetIPNS_5ValueELj16EEE\", \"DeleteDeadInstruction(llvm::Instruction*, llvm::MemoryDependenceAnalysis&, llvm::SmallPtrSet<llvm::Value*, 16u>*)\"},\n    {\"_Z14getLocForWritePN4llvm11InstructionERNS_13AliasAnalysisE\", \"getLocForWrite(llvm::Instruction*, llvm::AliasAnalysis&)\"},\n    {\"_Z14getPointerSizePN4llvm5ValueERNS_13AliasAnalysisE\", \"getPointerSize(llvm::Value*, llvm::AliasAnalysis&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_13DSEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::DSE>()\"},\n    {\"_ZN4llvm18createEarlyCSEPassEv\", \"llvm::createEarlyCSEPass()\"},\n    {\"_ZN4llvm22initializeEarlyCSEPassERNS_12PassRegistryE\", \"llvm::initializeEarlyCSEPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_18EarlyCSEEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::EarlyCSE>()\"},\n    {\"_ZN12_GLOBAL__N_18EarlyCSED1Ev\", \"(anonymous namespace)::EarlyCSE::~EarlyCSE()\"},\n    {\"_ZN12_GLOBAL__N_18EarlyCSED0Ev\", \"(anonymous namespace)::EarlyCSE::~EarlyCSE()\"},\n    {\"_ZNK12_GLOBAL__N_18EarlyCSE16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::EarlyCSE::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_18EarlyCSE13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::EarlyCSE::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_18EarlyCSE11processNodeEPN4llvm15DomTreeNodeBaseINS1_10BasicBlockEEE\", \"(anonymous namespace)::EarlyCSE::processNode(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_111SimpleValueEPNS_18ScopedHashTableValIS2_PNS_5ValueEEENS_12DenseMapInfoIS2_EENS8_IS7_EEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::SimpleValue, llvm::ScopedHashTableVal<(anonymous namespace)::SimpleValue, llvm::Value*>*, llvm::DenseMapInfo<(anonymous namespace)::SimpleValue>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<(anonymous namespace)::SimpleValue, llvm::Value*>*> >::operator[]((anonymous namespace)::SimpleValue const&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_111SimpleValueEPNS_18ScopedHashTableValIS2_PNS_5ValueEEENS_12DenseMapInfoIS2_EENS8_IS7_EEE15LookupBucketForERKS2_RPSt4pairIS2_S7_E\", \"llvm::DenseMap<(anonymous namespace)::SimpleValue, llvm::ScopedHashTableVal<(anonymous namespace)::SimpleValue, llvm::Value*>*, llvm::DenseMapInfo<(anonymous namespace)::SimpleValue>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<(anonymous namespace)::SimpleValue, llvm::Value*>*> >::LookupBucketFor((anonymous namespace)::SimpleValue const&, std::pair<(anonymous namespace)::SimpleValue, llvm::ScopedHashTableVal<(anonymous namespace)::SimpleValue, llvm::Value*>*>*&) const\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_19CallValueEPNS_18ScopedHashTableValIS2_St4pairIPNS_5ValueEjEEENS_12DenseMapInfoIS2_EENSA_IS9_EEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::CallValue, llvm::ScopedHashTableVal<(anonymous namespace)::CallValue, std::pair<llvm::Value*, unsigned int> >*, llvm::DenseMapInfo<(anonymous namespace)::CallValue>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<(anonymous namespace)::CallValue, std::pair<llvm::Value*, unsigned int> >*> >::operator[]((anonymous namespace)::CallValue const&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_19CallValueEPNS_18ScopedHashTableValIS2_St4pairIPNS_5ValueEjEEENS_12DenseMapInfoIS2_EENSA_IS9_EEE15LookupBucketForERKS2_RPS4_IS2_S9_E\", \"llvm::DenseMap<(anonymous namespace)::CallValue, llvm::ScopedHashTableVal<(anonymous namespace)::CallValue, std::pair<llvm::Value*, unsigned int> >*, llvm::DenseMapInfo<(anonymous namespace)::CallValue>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<(anonymous namespace)::CallValue, std::pair<llvm::Value*, unsigned int> >*> >::LookupBucketFor((anonymous namespace)::CallValue const&, std::pair<(anonymous namespace)::CallValue, llvm::ScopedHashTableVal<(anonymous namespace)::CallValue, std::pair<llvm::Value*, unsigned int> >*>*&) const\"},\n    {\"_ZN4llvm15ScopedHashTableIPNS_5ValueESt4pairIS2_jENS_12DenseMapInfoIS2_EENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_S4_EELm40ELm8EEEED2Ev\", \"llvm::ScopedHashTable<llvm::Value*, std::pair<llvm::Value*, unsigned int>, llvm::DenseMapInfo<llvm::Value*>, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >, 40ul, 8ul> >::~ScopedHashTable()\"},\n    {\"_ZN4llvm15ScopedHashTableIPNS_5ValueESt4pairIS2_jENS_12DenseMapInfoIS2_EENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_S4_EELm40ELm8EEEE6insertERKS2_RKS4_\", \"llvm::ScopedHashTable<llvm::Value*, std::pair<llvm::Value*, unsigned int>, llvm::DenseMapInfo<llvm::Value*>, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >, 40ul, 8ul> >::insert(llvm::Value* const&, std::pair<llvm::Value*, unsigned int> const&)\"},\n    {\"_ZN4llvm20ScopedHashTableScopeIPNS_5ValueESt4pairIS2_jENS_12DenseMapInfoIS2_EENS_18RecyclingAllocatorINS_16BumpPtrAllocatorENS_18ScopedHashTableValIS2_S4_EELm40ELm8EEEED2Ev\", \"llvm::ScopedHashTableScope<llvm::Value*, std::pair<llvm::Value*, unsigned int>, llvm::DenseMapInfo<llvm::Value*>, llvm::RecyclingAllocator<llvm::BumpPtrAllocator, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >, 40ul, 8ul> >::~ScopedHashTableScope()\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_18ScopedHashTableValIS2_St4pairIS2_jEEENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PS4_IS2_S7_E\", \"llvm::DenseMap<llvm::Value*, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >*> >::InsertIntoBucket(llvm::Value* const&, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >* const&, std::pair<llvm::Value*, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_18ScopedHashTableValIS2_St4pairIS2_jEEENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::ScopedHashTableVal<llvm::Value*, std::pair<llvm::Value*, unsigned int> >*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm25initializeGEPSplitterPassERNS_12PassRegistryE\", \"llvm::initializeGEPSplitterPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createGEPSplitterPassEv\", \"llvm::createGEPSplitterPass()\"},\n    {\"_ZN12_GLOBAL__N_111GEPSplitterD1Ev\", \"(anonymous namespace)::GEPSplitter::~GEPSplitter()\"},\n    {\"_ZN12_GLOBAL__N_111GEPSplitterD0Ev\", \"(anonymous namespace)::GEPSplitter::~GEPSplitter()\"},\n    {\"_ZNK12_GLOBAL__N_111GEPSplitter16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::GEPSplitter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111GEPSplitter13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::GEPSplitter::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111GEPSplitterEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::GEPSplitter>()\"},\n    {\"_ZN4llvm13createGVNPassEb\", \"llvm::createGVNPass(bool)\"},\n    {\"_ZN12_GLOBAL__N_13GVNC1Eb\", \"(anonymous namespace)::GVN::GVN(bool)\"},\n    {\"_ZN4llvm17initializeGVNPassERNS_12PassRegistryE\", \"llvm::initializeGVNPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_13GVNEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::GVN>()\"},\n    {\"_ZN12_GLOBAL__N_13GVND1Ev\", \"(anonymous namespace)::GVN::~GVN()\"},\n    {\"_ZN12_GLOBAL__N_13GVND0Ev\", \"(anonymous namespace)::GVN::~GVN()\"},\n    {\"_ZNK12_GLOBAL__N_13GVN16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::GVN::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_13GVN13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::GVN::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_13GVN17cleanupGlobalSetsEv\", \"(anonymous namespace)::GVN::cleanupGlobalSets()\"},\n    {\"_ZN12_GLOBAL__N_13GVN10findLeaderEPN4llvm10BasicBlockEj\", \"(anonymous namespace)::GVN::findLeader(llvm::BasicBlock*, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIjN12_GLOBAL__N_13GVN16LeaderTableEntryENS_12DenseMapInfoIjEENS4_IS3_EEEixERKj\", \"llvm::DenseMap<unsigned int, (anonymous namespace)::GVN::LeaderTableEntry, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<(anonymous namespace)::GVN::LeaderTableEntry> >::operator[](unsigned int const&)\"},\n    {\"_ZN12_GLOBAL__N_13GVN18processInstructionEPN4llvm11InstructionERNS1_15SmallVectorImplIS3_EE\", \"(anonymous namespace)::GVN::processInstruction(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Instruction*>&)\"},\n    {\"_ZN12_GLOBAL__N_110ValueTable13lookup_or_addEPN4llvm5ValueE\", \"(anonymous namespace)::ValueTable::lookup_or_add(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_110ValueTable17create_expressionEPN4llvm11InstructionE\", \"(anonymous namespace)::ValueTable::create_expression(llvm::Instruction*)\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_110ExpressionEjNS_12DenseMapInfoIS2_EENS3_IjEEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::Expression, unsigned int, llvm::DenseMapInfo<(anonymous namespace)::Expression>, llvm::DenseMapInfo<unsigned int> >::operator[]((anonymous namespace)::Expression const&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_110ExpressionEjNS_12DenseMapInfoIS2_EENS3_IjEEE15LookupBucketForERKS2_RPSt4pairIS2_jE\", \"llvm::DenseMap<(anonymous namespace)::Expression, unsigned int, llvm::DenseMapInfo<(anonymous namespace)::Expression>, llvm::DenseMapInfo<unsigned int> >::LookupBucketFor((anonymous namespace)::Expression const&, std::pair<(anonymous namespace)::Expression, unsigned int>*&) const\"},\n    {\"_Z30AnalyzeLoadFromClobberingStorePKN4llvm4TypeEPNS_5ValueEPNS_9StoreInstERKNS_10DataLayoutE\", \"AnalyzeLoadFromClobberingStore(llvm::Type const*, llvm::Value*, llvm::StoreInst*, llvm::DataLayout const&)\"},\n    {\"_Z20GetStoreValueForLoadPN4llvm5ValueEjPKNS_4TypeEPNS_11InstructionERKNS_10DataLayoutE\", \"GetStoreValueForLoad(llvm::Value*, unsigned int, llvm::Type const*, llvm::Instruction*, llvm::DataLayout const&)\"},\n    {\"_Z32AnalyzeLoadFromClobberingMemInstPKN4llvm4TypeEPNS_5ValueEPNS_12MemIntrinsicERKNS_10DataLayoutE\", \"AnalyzeLoadFromClobberingMemInst(llvm::Type const*, llvm::Value*, llvm::MemIntrinsic*, llvm::DataLayout const&)\"},\n    {\"_Z22GetMemInstValueForLoadPN4llvm12MemIntrinsicEjPKNS_4TypeEPNS_11InstructionERKNS_10DataLayoutE\", \"GetMemInstValueForLoad(llvm::MemIntrinsic*, unsigned int, llvm::Type const*, llvm::Instruction*, llvm::DataLayout const&)\"},\n    {\"_Z30CoerceAvailableValueToLoadTypePN4llvm5ValueEPKNS_4TypeEPNS_11InstructionERKNS_10DataLayoutE\", \"CoerceAvailableValueToLoadType(llvm::Value*, llvm::Type const*, llvm::Instruction*, llvm::DataLayout const&)\"},\n    {\"_Z31CanCoerceMustAliasedValueToLoadPN4llvm5ValueEPKNS_4TypeERKNS_10DataLayoutE\", \"CanCoerceMustAliasedValueToLoad(llvm::Value*, llvm::Type const*, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_121AvailableValueInBlockEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::AvailableValueInBlock>::push_back((anonymous namespace)::AvailableValueInBlock const&)\"},\n    {\"_Z22ConstructSSAForLoadSetPN4llvm8LoadInstERNS_15SmallVectorImplIN12_GLOBAL__N_121AvailableValueInBlockEEEPKNS_10DataLayoutERKNS_13DominatorTreeEPNS_13AliasAnalysisE\", \"ConstructSSAForLoadSet(llvm::LoadInst*, llvm::SmallVectorImpl<(anonymous namespace)::AvailableValueInBlock>&, llvm::DataLayout const*, llvm::DominatorTree const&, llvm::AliasAnalysis*)\"},\n    {\"_Z28IsValueFullyAvailableInBlockPN4llvm10BasicBlockERNS_8DenseMapIS1_cNS_12DenseMapInfoIS1_EENS3_IcEEEE\", \"IsValueFullyAvailableInBlock(llvm::BasicBlock*, llvm::DenseMap<llvm::BasicBlock*, char, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<char> >&)\"},\n    {\"_ZNK12_GLOBAL__N_121AvailableValueInBlock24MaterializeAdjustedValueEPKN4llvm4TypeEPKNS1_10DataLayoutE\", \"(anonymous namespace)::AvailableValueInBlock::MaterializeAdjustedValue(llvm::Type const*, llvm::DataLayout const*) const\"},\n    {\"_Z30AnalyzeLoadFromClobberingWritePKN4llvm4TypeEPNS_5ValueES4_yRKNS_10DataLayoutE\", \"AnalyzeLoadFromClobberingWrite(llvm::Type const*, llvm::Value*, llvm::Value*, unsigned long long, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm7PHINode11addIncomingEPNS_5ValueEPNS_10BasicBlockE\", \"llvm::PHINode::addIncoming(llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11df_iteratorIPNS_10BasicBlockENS_11SmallPtrSetIS2_Lj8EEELb0ENS_11GraphTraitsIS2_EEE6toNextEv\", \"llvm::df_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_10BasicBlockELj1EjNS1_21PointerLikeTypeTraitsIS4_EEEENS1_12SuccIteratorIPNS1_14TerminatorInstES3_EEESaISC_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSC_SE_EERKSC_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >*, std::vector<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > > >, std::pair<llvm::PointerIntPair<llvm::BasicBlock*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::BasicBlock*> >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEjNS_12DenseMapInfoIS2_EENS3_IjEEE6insertERKSt4pairIS2_jE\", \"llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<llvm::Value*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Value* const&, unsigned int const&, std::pair<llvm::Value*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::Value* const&, std::pair<llvm::BasicBlock*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEN9__gnu_cxx17__normal_iteratorIPS5_St6vectorIS5_SaIS5_EEEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Value*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm11df_iteratorIPNS_15DomTreeNodeBaseINS_10BasicBlockEEENS_11SmallPtrSetIS4_Lj8EEELb0ENS_11GraphTraitsIS4_EEE6toNextEv\", \"llvm::df_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>*, llvm::SmallPtrSet<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 8u>, false, llvm::GraphTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >::toNext()\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm14PointerIntPairIPNS1_15DomTreeNodeBaseINS1_10BasicBlockEEELj1EjNS1_21PointerLikeTypeTraitsIS6_EEEEN9__gnu_cxx17__normal_iteratorIPS6_S_IS6_SaIS6_EEEEESaISG_EE13_M_insert_auxENSB_IPSG_SI_EERKSG_\", \"std::vector<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > >*, std::vector<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > >, std::allocator<std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > > > > >, std::pair<llvm::PointerIntPair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, 1u, unsigned int, llvm::PointerLikeTypeTraits<llvm::DomTreeNodeBase<llvm::BasicBlock>*> >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEcNS_12DenseMapInfoIS2_EENS3_IcEEE6insertERKSt4pairIS2_cE\", \"llvm::DenseMap<llvm::BasicBlock*, char, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::BasicBlock*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEcNS_12DenseMapInfoIS2_EENS3_IcEEE16InsertIntoBucketERKS2_RKcPSt4pairIS2_cE\", \"llvm::DenseMap<llvm::BasicBlock*, char, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::BasicBlock* const&, char const&, std::pair<llvm::BasicBlock*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEcNS_12DenseMapInfoIS2_EENS3_IcEEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, char, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE8CreateOrEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateOr(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateShlEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateShl(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateCastENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateLShrEPNS_5ValueES6_RKNS_5TwineEb\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateLShr(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm28initializeIndVarSimplifyPassERNS_12PassRegistryE\", \"llvm::initializeIndVarSimplifyPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24createIndVarSimplifyPassEv\", \"llvm::createIndVarSimplifyPass()\"},\n    {\"_ZN12_GLOBAL__N_114IndVarSimplifyD1Ev\", \"(anonymous namespace)::IndVarSimplify::~IndVarSimplify()\"},\n    {\"_ZN12_GLOBAL__N_114IndVarSimplifyD0Ev\", \"(anonymous namespace)::IndVarSimplify::~IndVarSimplify()\"},\n    {\"_ZNK12_GLOBAL__N_114IndVarSimplify16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::IndVarSimplify::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114IndVarSimplify9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::IndVarSimplify::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_Z6isSafePKN4llvm4SCEVEPKNS_4LoopEPNS_15ScalarEvolutionE\", \"isSafe(llvm::SCEV const*, llvm::Loop const*, llvm::ScalarEvolution*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114IndVarSimplifyEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::IndVarSimplify>()\"},\n    {\"_ZN4llvm27initializeJumpThreadingPassERNS_12PassRegistryE\", \"llvm::initializeJumpThreadingPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createJumpThreadingPassEv\", \"llvm::createJumpThreadingPass()\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreadingC1Ev\", \"(anonymous namespace)::JumpThreading::JumpThreading()\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreadingD1Ev\", \"(anonymous namespace)::JumpThreading::~JumpThreading()\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreadingD0Ev\", \"(anonymous namespace)::JumpThreading::~JumpThreading()\"},\n    {\"_ZNK12_GLOBAL__N_113JumpThreading16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::JumpThreading::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreading13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::JumpThreading::runOnFunction(llvm::Function&)\"},\n    {\"_Z25GetBestDestForJumpOnUndefPN4llvm10BasicBlockE\", \"GetBestDestForJumpOnUndef(llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreading22ProcessThreadableEdgesEPN4llvm5ValueEPNS1_10BasicBlockENS_18ConstantPreferenceE\", \"(anonymous namespace)::JumpThreading::ProcessThreadableEdges(llvm::Value*, llvm::BasicBlock*, (anonymous namespace)::ConstantPreference)\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreading31ComputeValueKnownInPredecessorsEPN4llvm5ValueEPNS1_10BasicBlockERNS1_15SmallVectorImplISt4pairIPNS1_8ConstantES5_EEENS_18ConstantPreferenceE\", \"(anonymous namespace)::JumpThreading::ComputeValueKnownInPredecessors(llvm::Value*, llvm::BasicBlock*, llvm::SmallVectorImpl<std::pair<llvm::Constant*, llvm::BasicBlock*> >&, (anonymous namespace)::ConstantPreference)\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreading32DuplicateCondBranchOnPHIIntoPredEPN4llvm10BasicBlockERKNS1_15SmallVectorImplIS3_EE\", \"(anonymous namespace)::JumpThreading::DuplicateCondBranchOnPHIIntoPred(llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::BasicBlock*> const&)\"},\n    {\"_Z28getJumpThreadDuplicationCostPKN4llvm10BasicBlockE\", \"getJumpThreadDuplicationCost(llvm::BasicBlock const*)\"},\n    {\"_Z31AddPHINodeEntriesForMappedBlockPN4llvm10BasicBlockES1_S1_RNS_8DenseMapIPNS_11InstructionEPNS_5ValueENS_12DenseMapInfoIS4_EENS7_IS6_EEEE\", \"AddPHINodeEntriesForMappedBlock(llvm::BasicBlock*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::DenseMap<llvm::Instruction*, llvm::Value*, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::Value*> >&)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIPNS_10BasicBlockEPNS_5ValueEEEEiPKvS8_\", \"int llvm::array_pod_sort_comparator<std::pair<llvm::BasicBlock*, llvm::Value*> >(void const*, void const*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113JumpThreadingEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::JumpThreading>()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Instruction*, llvm::Value*, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::Value*> >::InsertIntoBucket(llvm::Instruction* const&, llvm::Value* const&, std::pair<llvm::Instruction*, llvm::Value*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, llvm::Value*, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::Value*> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_5ValueEPNS_10BasicBlockEEcNS_12DenseMapInfoIS6_EENS7_IcEEE15LookupBucketForERKS6_RPS1_IS6_cE\", \"llvm::DenseMap<std::pair<llvm::Value*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::LookupBucketFor(std::pair<llvm::Value*, llvm::BasicBlock*> const&, std::pair<std::pair<llvm::Value*, llvm::BasicBlock*>, char>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_5ValueEPNS_10BasicBlockEEcNS_12DenseMapInfoIS6_EENS7_IcEEE6insertERKS1_IS6_cE\", \"llvm::DenseMap<std::pair<llvm::Value*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<llvm::Value*, llvm::BasicBlock*>, char> const&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_5ValueEPNS_10BasicBlockEEcNS_12DenseMapInfoIS6_EENS7_IcEEE16InsertIntoBucketERKS6_RKcPS1_IS6_cE\", \"llvm::DenseMap<std::pair<llvm::Value*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<llvm::Value*, llvm::BasicBlock*> const&, char const&, std::pair<std::pair<llvm::Value*, llvm::BasicBlock*>, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_5ValueEPNS_10BasicBlockEEcNS_12DenseMapInfoIS6_EENS7_IcEEE4growEj\", \"llvm::DenseMap<std::pair<llvm::Value*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::Value*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_10BasicBlockEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::BasicBlock*>::resize(unsigned int)\"},\n    {\"_ZSt6__findIPPN4llvm10BasicBlockES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"llvm::BasicBlock** std::__find<llvm::BasicBlock**, llvm::BasicBlock*>(llvm::BasicBlock**, llvm::BasicBlock**, llvm::BasicBlock* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm18initializeLICMPassERNS_12PassRegistryE\", \"llvm::initializeLICMPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm14createLICMPassEv\", \"llvm::createLICMPass()\"},\n    {\"_ZN12_GLOBAL__N_14LICMD1Ev\", \"(anonymous namespace)::LICM::~LICM()\"},\n    {\"_ZN12_GLOBAL__N_14LICMD0Ev\", \"(anonymous namespace)::LICM::~LICM()\"},\n    {\"_ZNK12_GLOBAL__N_14LICM16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LICM::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14LICM9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LICM::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN12_GLOBAL__N_14LICM14doFinalizationEv\", \"(anonymous namespace)::LICM::doFinalization()\"},\n    {\"_ZN12_GLOBAL__N_14LICM23cloneBasicBlockAnalysisEPN4llvm10BasicBlockES3_PNS1_4LoopE\", \"(anonymous namespace)::LICM::cloneBasicBlockAnalysis(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Loop*)\"},\n    {\"_ZN12_GLOBAL__N_14LICM19deleteAnalysisValueEPN4llvm5ValueEPNS1_4LoopE\", \"(anonymous namespace)::LICM::deleteAnalysisValue(llvm::Value*, llvm::Loop*)\"},\n    {\"_ZN12_GLOBAL__N_14LICM10SinkRegionEPN4llvm15DomTreeNodeBaseINS1_10BasicBlockEEE\", \"(anonymous namespace)::LICM::SinkRegion(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN12_GLOBAL__N_14LICM11HoistRegionEPN4llvm15DomTreeNodeBaseINS1_10BasicBlockEEE\", \"(anonymous namespace)::LICM::HoistRegion(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN12_GLOBAL__N_14LICM30isSafeToExecuteUnconditionallyERN4llvm11InstructionE\", \"(anonymous namespace)::LICM::isSafeToExecuteUnconditionally(llvm::Instruction&)\"},\n    {\"_ZN12_GLOBAL__N_112LoopPromoterD1Ev\", \"(anonymous namespace)::LoopPromoter::~LoopPromoter()\"},\n    {\"_ZN12_GLOBAL__N_112LoopPromoterD0Ev\", \"(anonymous namespace)::LoopPromoter::~LoopPromoter()\"},\n    {\"_ZNK12_GLOBAL__N_112LoopPromoter12isInstInListEPN4llvm11InstructionERKNS1_15SmallVectorImplIS3_EE\", \"(anonymous namespace)::LoopPromoter::isInstInList(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Instruction*> const&) const\"},\n    {\"_ZNK12_GLOBAL__N_112LoopPromoter34doExtraRewritesBeforeFinalDeletionEv\", \"(anonymous namespace)::LoopPromoter::doExtraRewritesBeforeFinalDeletion() const\"},\n    {\"_ZNK12_GLOBAL__N_112LoopPromoter20replaceLoadWithValueEPN4llvm8LoadInstEPNS1_5ValueE\", \"(anonymous namespace)::LoopPromoter::replaceLoadWithValue(llvm::LoadInst*, llvm::Value*) const\"},\n    {\"_ZNK12_GLOBAL__N_112LoopPromoter18instructionDeletedEPN4llvm11InstructionE\", \"(anonymous namespace)::LoopPromoter::instructionDeleted(llvm::Instruction*) const\"},\n    {\"_ZN12_GLOBAL__N_14LICM18canSinkOrHoistInstERN4llvm11InstructionE\", \"(anonymous namespace)::LICM::canSinkOrHoistInst(llvm::Instruction&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_14LICMEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LICM>()\"},\n    {\"_ZN4llvm6iplistINS_8AliasSetENS_12ilist_traitsIS1_EEE3endEv\", \"llvm::iplist<llvm::AliasSet, llvm::ilist_traits<llvm::AliasSet> >::end()\"},\n    {\"_ZN4llvm6iplistINS_8AliasSetENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::AliasSet, llvm::ilist_traits<llvm::AliasSet> >::~iplist()\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEED2Ev\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::~DenseMap()\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVHD1Ev\", \"llvm::AliasSetTracker::ASTCallbackVH::~ASTCallbackVH()\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVHD0Ev\", \"llvm::AliasSetTracker::ASTCallbackVH::~ASTCallbackVH()\"},\n    {\"_ZN4llvm8DenseMapIPNS_4LoopEPNS_15AliasSetTrackerENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Loop*, llvm::AliasSetTracker*, llvm::DenseMapInfo<llvm::Loop*>, llvm::DenseMapInfo<llvm::AliasSetTracker*> >::InsertIntoBucket(llvm::Loop* const&, llvm::AliasSetTracker* const&, std::pair<llvm::Loop*, llvm::AliasSetTracker*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4LoopEPNS_15AliasSetTrackerENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Loop*, llvm::AliasSetTracker*, llvm::DenseMapInfo<llvm::Loop*>, llvm::DenseMapInfo<llvm::AliasSetTracker*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE4initEj\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::init(unsigned int)\"},\n    {\"_ZN4llvm26initializeLoopDeletionPassERNS_12PassRegistryE\", \"llvm::initializeLoopDeletionPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm22createLoopDeletionPassEv\", \"llvm::createLoopDeletionPass()\"},\n    {\"_ZN12_GLOBAL__N_112LoopDeletionD1Ev\", \"(anonymous namespace)::LoopDeletion::~LoopDeletion()\"},\n    {\"_ZN12_GLOBAL__N_112LoopDeletionD0Ev\", \"(anonymous namespace)::LoopDeletion::~LoopDeletion()\"},\n    {\"_ZNK12_GLOBAL__N_112LoopDeletion16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopDeletion::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_112LoopDeletion9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopDeletion::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112LoopDeletionEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopDeletion>()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEE6insertIN9__gnu_cxx17__normal_iteratorIPS4_St6vectorIS4_SaIS4_EEEEEES9_S9_T_SE_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>** llvm::SmallVectorImpl<llvm::DomTreeNodeBase<llvm::BasicBlock>*>::insert<__gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > > >(llvm::DomTreeNodeBase<llvm::BasicBlock>**, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >, __gnu_cxx::__normal_iterator<llvm::DomTreeNodeBase<llvm::BasicBlock>**, std::vector<llvm::DomTreeNodeBase<llvm::BasicBlock>*, std::allocator<llvm::DomTreeNodeBase<llvm::BasicBlock>*> > >)\"},\n    {\"_ZN4llvm32initializeLoopIdiomRecognizePassERNS_12PassRegistryE\", \"llvm::initializeLoopIdiomRecognizePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm19createLoopIdiomPassEv\", \"llvm::createLoopIdiomPass()\"},\n    {\"_ZN12_GLOBAL__N_118LoopIdiomRecognizeD1Ev\", \"(anonymous namespace)::LoopIdiomRecognize::~LoopIdiomRecognize()\"},\n    {\"_ZN12_GLOBAL__N_118LoopIdiomRecognizeD0Ev\", \"(anonymous namespace)::LoopIdiomRecognize::~LoopIdiomRecognize()\"},\n    {\"_ZNK12_GLOBAL__N_118LoopIdiomRecognize16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopIdiomRecognize::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118LoopIdiomRecognize9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopIdiomRecognize::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN12_GLOBAL__N_118LoopIdiomRecognize28processLoopStoreOfSplatValueEPN4llvm5ValueEjjS3_PNS1_11InstructionEPKNS1_14SCEVAddRecExprEPKNS1_4SCEVE\", \"(anonymous namespace)::LoopIdiomRecognize::processLoopStoreOfSplatValue(llvm::Value*, unsigned int, unsigned int, llvm::Value*, llvm::Instruction*, llvm::SCEVAddRecExpr const*, llvm::SCEV const*)\"},\n    {\"_Z21mayLoopAccessLocationPN4llvm5ValueENS_13AliasAnalysis12ModRefResultEPNS_4LoopEPKNS_4SCEVEjRS2_PNS_11InstructionE\", \"mayLoopAccessLocation(llvm::Value*, llvm::AliasAnalysis::ModRefResult, llvm::Loop*, llvm::SCEV const*, unsigned int, llvm::AliasAnalysis&, llvm::Instruction*)\"},\n    {\"_Z21DeleteDeadInstructionPN4llvm11InstructionERNS_15ScalarEvolutionE\", \"DeleteDeadInstruction(llvm::Instruction*, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_118LoopIdiomRecognizeEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopIdiomRecognize>()\"},\n    {\"_ZN4llvm24initializeLoopRotatePassERNS_12PassRegistryE\", \"llvm::initializeLoopRotatePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm20createLoopRotatePassEv\", \"llvm::createLoopRotatePass()\"},\n    {\"_ZN12_GLOBAL__N_110LoopRotateD1Ev\", \"(anonymous namespace)::LoopRotate::~LoopRotate()\"},\n    {\"_ZN12_GLOBAL__N_110LoopRotateD0Ev\", \"(anonymous namespace)::LoopRotate::~LoopRotate()\"},\n    {\"_ZNK12_GLOBAL__N_110LoopRotate16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopRotate::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_110LoopRotate9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopRotate::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_110LoopRotateEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopRotate>()\"},\n    {\"_ZN4llvm8ValueMapIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEEixERKS3_\", \"llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::operator[](llvm::Value const* const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_ED2Ev\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::~DenseMap()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEED1Ev\", \"llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::~ValueMapCallbackVH()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEED0Ev\", \"llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::~ValueMapCallbackVH()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE7deletedEv\", \"llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::deleted()\"},\n    {\"_ZN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE19allUsesReplacedWithEPS1_\", \"llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4findERKSB_\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::find(llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5eraseENS_16DenseMapIteratorISB_S6_SC_SA_Lb0EEE\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::erase(llvm::DenseMapIterator<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> >, false>)\"},\n    {\"_ZN4llvm8ValueMapIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEE6insertERKSt4pairIS3_S5_E\", \"llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::insert(std::pair<llvm::Value const*, llvm::TrackingVH<llvm::Value> > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E6insertERKSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::insert(std::pair<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value> > const&)\"},\n    {\"_ZNK4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E15LookupBucketForERKSB_RPSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::LookupBucketFor(llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > const&, std::pair<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value> >*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E16InsertIntoBucketERKSB_RKS6_PSt4pairISB_S6_E\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::InsertIntoBucket(llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > const&, llvm::TrackingVH<llvm::Value> const&, std::pair<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value> >*)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4growEj\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5eraseERKSB_\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::erase(llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E4initEj\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::init(unsigned int)\"},\n    {\"_ZN4llvm32initializeLoopStrengthReducePassERNS_12PassRegistryE\", \"llvm::initializeLoopStrengthReducePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm28createLoopStrengthReducePassEPKNS_14TargetLoweringE\", \"llvm::createLoopStrengthReducePass(llvm::TargetLowering const*)\"},\n    {\"_ZN12_GLOBAL__N_118LoopStrengthReduceD1Ev\", \"(anonymous namespace)::LoopStrengthReduce::~LoopStrengthReduce()\"},\n    {\"_ZN12_GLOBAL__N_118LoopStrengthReduceD0Ev\", \"(anonymous namespace)::LoopStrengthReduce::~LoopStrengthReduce()\"},\n    {\"_ZNK12_GLOBAL__N_118LoopStrengthReduce16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopStrengthReduce::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118LoopStrengthReduce9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopStrengthReduce::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN12_GLOBAL__N_16LSRUseD1Ev\", \"(anonymous namespace)::LSRUse::~LSRUse()\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstanceC2EPKN4llvm14TargetLoweringEPNS1_4LoopEPNS1_4PassE\", \"(anonymous namespace)::LSRInstance::LSRInstance(llvm::TargetLowering const*, llvm::Loop*, llvm::Pass*)\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance24GenerateAllReuseFormulaeEv\", \"(anonymous namespace)::LSRInstance::GenerateAllReuseFormulae()\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance38FilterOutUndesirableDedicatedRegistersEv\", \"(anonymous namespace)::LSRInstance::FilterOutUndesirableDedicatedRegisters()\"},\n    {\"_ZNK12_GLOBAL__N_111LSRInstance6ExpandERKNS_8LSRFixupERKNS_7FormulaEN4llvm14ilist_iteratorINS7_11InstructionEEERNS7_12SCEVExpanderERNS7_15SmallVectorImplINS7_6WeakVHEEE\", \"(anonymous namespace)::LSRInstance::Expand((anonymous namespace)::LSRFixup const&, (anonymous namespace)::Formula const&, llvm::ilist_iterator<llvm::Instruction>, llvm::SCEVExpander&, llvm::SmallVectorImpl<llvm::WeakVH>&) const\"},\n    {\"_ZNK12_GLOBAL__N_18LSRFixup21isUseFullyOutsideLoopEPKN4llvm4LoopE\", \"(anonymous namespace)::LSRFixup::isUseFullyOutsideLoop(llvm::Loop const*) const\"},\n    {\"_ZNK12_GLOBAL__N_111LSRInstance12SolveRecurseERN4llvm15SmallVectorImplIPKNS_7FormulaEEERNS_4CostES7_RKS8_RKNS1_11SmallPtrSetIPKNS1_4SCEVELj16EEERNS1_8DenseSetISF_NS1_12DenseMapInfoISF_EEEE\", \"(anonymous namespace)::LSRInstance::SolveRecurse(llvm::SmallVectorImpl<(anonymous namespace)::Formula const*>&, (anonymous namespace)::Cost&, llvm::SmallVectorImpl<(anonymous namespace)::Formula const*>&, (anonymous namespace)::Cost const&, llvm::SmallPtrSet<llvm::SCEV const*, 16u> const&, llvm::DenseSet<llvm::SCEV const*, llvm::DenseMapInfo<llvm::SCEV const*> >&) const\"},\n    {\"_ZN12_GLOBAL__N_14Cost11RateFormulaERKNS_7FormulaERN4llvm11SmallPtrSetIPKNS4_4SCEVELj16EEERKNS4_8DenseSetIS8_NS4_12DenseMapInfoIS8_EEEEPKNS4_4LoopERKNS4_15SmallVectorImplIxEERNS4_15ScalarEvolutionERNS4_13DominatorTreeE\", \"(anonymous namespace)::Cost::RateFormula((anonymous namespace)::Formula const&, llvm::SmallPtrSet<llvm::SCEV const*, 16u>&, llvm::DenseSet<llvm::SCEV const*, llvm::DenseMapInfo<llvm::SCEV const*> > const&, llvm::Loop const*, llvm::SmallVectorImpl<long long> const&, llvm::ScalarEvolution&, llvm::DominatorTree&)\"},\n    {\"_ZN12_GLOBAL__N_14Cost12RateRegisterEPKN4llvm4SCEVERNS1_11SmallPtrSetIS4_Lj16EEEPKNS1_4LoopERNS1_15ScalarEvolutionERNS1_13DominatorTreeE\", \"(anonymous namespace)::Cost::RateRegister(llvm::SCEV const*, llvm::SmallPtrSet<llvm::SCEV const*, 16u>&, llvm::Loop const*, llvm::ScalarEvolution&, llvm::DominatorTree&)\"},\n    {\"_ZN12_GLOBAL__N_16LSRUse13RecomputeRegsEmRNS_13RegUseTrackerE\", \"(anonymous namespace)::LSRUse::RecomputeRegs(unsigned long, (anonymous namespace)::RegUseTracker&)\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance18reconcileNewOffsetERNS_6LSRUseExbNS1_8KindTypeEPKN4llvm4TypeE\", \"(anonymous namespace)::LSRInstance::reconcileNewOffset((anonymous namespace)::LSRUse&, long long, bool, (anonymous namespace)::LSRUse::KindType, llvm::Type const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_17FormulaEEaSERKS3_\", \"llvm::SmallVectorImpl<(anonymous namespace)::Formula>::operator=(llvm::SmallVectorImpl<(anonymous namespace)::Formula> const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseIN12_GLOBAL__N_17FormulaELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<(anonymous namespace)::Formula, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapINS_11SmallVectorIPKNS_4SCEVELj2EEEcN12_GLOBAL__N_122UniquifierDenseMapInfoENS_12DenseMapInfoIcEEE8CopyFromERKSA_\", \"llvm::DenseMap<llvm::SmallVector<llvm::SCEV const*, 2u>, char, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<char> >::CopyFrom(llvm::DenseMap<llvm::SmallVector<llvm::SCEV const*, 2u>, char, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<char> > const&)\"},\n    {\"_Z10isLegalUseRKN4llvm14TargetLowering8AddrModeEN12_GLOBAL__N_16LSRUse8KindTypeEPKNS_4TypeEPKS0_\", \"isLegalUse(llvm::TargetLowering::AddrMode const&, (anonymous namespace)::LSRUse::KindType, llvm::Type const*, llvm::TargetLowering const*)\"},\n    {\"_ZNK12_GLOBAL__N_16LSRUse22HasFormulaWithSameRegsERKNS_7FormulaE\", \"(anonymous namespace)::LSRUse::HasFormulaWithSameRegs((anonymous namespace)::Formula const&) const\"},\n    {\"_ZNK4llvm8DenseMapINS_11SmallVectorIPKNS_4SCEVELj2EEEcN12_GLOBAL__N_122UniquifierDenseMapInfoENS_12DenseMapInfoIcEEE15LookupBucketForERKS5_RPSt4pairIS5_cE\", \"llvm::DenseMap<llvm::SmallVector<llvm::SCEV const*, 2u>, char, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<char> >::LookupBucketFor(llvm::SmallVector<llvm::SCEV const*, 2u> const&, std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, char>*&) const\"},\n    {\"_ZNK12_GLOBAL__N_113RegUseTracker24isRegUsedByUsesOtherThanEPKN4llvm4SCEVEm\", \"(anonymous namespace)::RegUseTracker::isRegUsedByUsesOtherThan(llvm::SCEV const*, unsigned long) const\"},\n    {\"_ZNK4llvm8DenseMapINS_11SmallVectorIPKNS_4SCEVELj2EEEmN12_GLOBAL__N_122UniquifierDenseMapInfoENS_12DenseMapInfoImEEE15LookupBucketForERKS5_RPSt4pairIS5_mE\", \"llvm::DenseMap<llvm::SmallVector<llvm::SCEV const*, 2u>, unsigned long, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<unsigned long> >::LookupBucketFor(llvm::SmallVector<llvm::SCEV const*, 2u> const&, std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, unsigned long>*&) const\"},\n    {\"_ZN4llvm16DenseMapIteratorINS_11SmallVectorIPKNS_4SCEVELj2EEEmN12_GLOBAL__N_122UniquifierDenseMapInfoENS_12DenseMapInfoImEELb0EEC1EPSt4pairIS5_mESD_\", \"llvm::DenseMapIterator<llvm::SmallVector<llvm::SCEV const*, 2u>, unsigned long, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<unsigned long>, false>::DenseMapIterator(std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, unsigned long>*, std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, unsigned long>*)\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance22GenerateReassociationsERNS_6LSRUseEjNS_7FormulaEj\", \"(anonymous namespace)::LSRInstance::GenerateReassociations((anonymous namespace)::LSRUse&, unsigned int, (anonymous namespace)::Formula, unsigned int)\"},\n    {\"_Z16ExtractImmediateRPKN4llvm4SCEVERNS_15ScalarEvolutionE\", \"ExtractImmediate(llvm::SCEV const*&, llvm::ScalarEvolution&)\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance13InsertFormulaERNS_6LSRUseEjRKNS_7FormulaE\", \"(anonymous namespace)::LSRInstance::InsertFormula((anonymous namespace)::LSRUse&, unsigned int, (anonymous namespace)::Formula const&)\"},\n    {\"_ZN12_GLOBAL__N_113RegUseTracker13CountRegisterEPKN4llvm4SCEVEm\", \"(anonymous namespace)::RegUseTracker::CountRegister(llvm::SCEV const*, unsigned long)\"},\n    {\"_ZN4llvm16DenseMapIteratorINS_11SmallVectorIPKNS_4SCEVELj2EEEcN12_GLOBAL__N_122UniquifierDenseMapInfoENS_12DenseMapInfoIcEELb0EEC1EPSt4pairIS5_cESD_\", \"llvm::DenseMapIterator<llvm::SmallVector<llvm::SCEV const*, 2u>, char, (anonymous namespace)::UniquifierDenseMapInfo, llvm::DenseMapInfo<char>, false>::DenseMapIterator(std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, char>*, std::pair<llvm::SmallVector<llvm::SCEV const*, 2u>, char>*)\"},\n    {\"_Z12getExactSDivPKN4llvm4SCEVES2_RNS_15ScalarEvolutionEb\", \"getExactSDiv(llvm::SCEV const*, llvm::SCEV const*, llvm::ScalarEvolution&, bool)\"},\n    {\"_Z13ExtractSymbolRPKN4llvm4SCEVERNS_15ScalarEvolutionE\", \"ExtractSymbol(llvm::SCEV const*&, llvm::ScalarEvolution&)\"},\n    {\"_Z15CollectSubexprsPKN4llvm4SCEVEPKNS_12SCEVConstantERNS_15SmallVectorImplIS2_EEPKNS_4LoopERNS_15ScalarEvolutionE\", \"CollectSubexprs(llvm::SCEV const*, llvm::SCEVConstant const*, llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::Loop const*, llvm::ScalarEvolution&)\"},\n    {\"_Z16isAlwaysFoldablePKN4llvm4SCEVExxbN12_GLOBAL__N_16LSRUse8KindTypeEPKNS_4TypeEPKNS_14TargetLoweringERNS_15ScalarEvolutionE\", \"isAlwaysFoldable(llvm::SCEV const*, long long, long long, bool, (anonymous namespace)::LSRUse::KindType, llvm::Type const*, llvm::TargetLowering const*, llvm::ScalarEvolution&)\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance11getNewFixupEv\", \"(anonymous namespace)::LSRInstance::getNewFixup()\"},\n    {\"_ZN12_GLOBAL__N_111LSRInstance6getUseERPKN4llvm4SCEVENS_6LSRUse8KindTypeEPKNS1_4TypeE\", \"(anonymous namespace)::LSRInstance::getUse(llvm::SCEV const*&, (anonymous namespace)::LSRUse::KindType, llvm::Type const*)\"},\n    {\"_Z13getAccessTypePKN4llvm11InstructionE\", \"getAccessType(llvm::Instruction const*)\"},\n    {\"_Z14DoInitialMatchPKN4llvm4SCEVEPNS_4LoopERNS_15SmallVectorImplIS2_EES7_RNS_15ScalarEvolutionE\", \"DoInitialMatch(llvm::SCEV const*, llvm::Loop*, llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_118LoopStrengthReduceEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopStrengthReduce>()\"},\n    {\"_ZNK4llvm8LoopPass27getPotentialPassManagerTypeEv\", \"llvm::LoopPass::getPotentialPassManagerType() const\"},\n    {\"_ZN4llvm8LoopPass16doInitializationEPNS_4LoopERNS_13LPPassManagerE\", \"llvm::LoopPass::doInitialization(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN4llvm8LoopPass14doFinalizationEv\", \"llvm::LoopPass::doFinalization()\"},\n    {\"_ZN4llvm8LoopPass23cloneBasicBlockAnalysisEPNS_10BasicBlockES2_PNS_4LoopE\", \"llvm::LoopPass::cloneBasicBlockAnalysis(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Loop*)\"},\n    {\"_ZN4llvm8LoopPass19deleteAnalysisValueEPNS_5ValueEPNS_4LoopE\", \"llvm::LoopPass::deleteAnalysisValue(llvm::Value*, llvm::Loop*)\"},\n    {\"_ZNSt8_Rb_treeIxxSt9_IdentityIxESt4lessIxESaIxEE8_M_eraseEPSt13_Rb_tree_nodeIxE\", \"std::_Rb_tree<long long, long long, std::_Identity<long long>, std::less<long long>, std::allocator<long long> >::_M_erase(std::_Rb_tree_node<long long>*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4SCEVEPNS1_11InstructionEES0_IKS7_NS1_11AssertingVHINS1_5ValueEEEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E\", \"std::_Rb_tree<std::pair<llvm::SCEV const*, llvm::Instruction*>, std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> >, std::_Select1st<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > >, std::less<std::pair<llvm::SCEV const*, llvm::Instruction*> >, std::allocator<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_5ValueEEES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E\", \"std::_Rb_tree<llvm::AssertingVH<llvm::Value>, llvm::AssertingVH<llvm::Value>, std::_Identity<llvm::AssertingVH<llvm::Value> >, std::less<llvm::AssertingVH<llvm::Value> >, std::allocator<llvm::AssertingVH<llvm::Value> > >::_M_erase(std::_Rb_tree_node<llvm::AssertingVH<llvm::Value> >*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_6WeakVHELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::WeakVH, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15ScalarEvolution10getMulExprEPKNS_4SCEVES3_bb\", \"llvm::ScalarEvolution::getMulExpr(llvm::SCEV const*, llvm::SCEV const*, bool, bool)\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE12getLoopLatchEv\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getLoopLatch() const\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE16getExitingBlocksERNS_15SmallVectorImplIPS1_EE\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getExitingBlocks(llvm::SmallVectorImpl<llvm::BasicBlock*>&) const\"},\n    {\"_ZSt16__introsort_loopIPPN4llvm10BasicBlockElEvT_S4_T0_\", \"void std::__introsort_loop<llvm::BasicBlock**, long>(llvm::BasicBlock**, llvm::BasicBlock**, long)\"},\n    {\"_ZSt22__final_insertion_sortIPPN4llvm10BasicBlockEEvT_S4_\", \"void std::__final_insertion_sort<llvm::BasicBlock**>(llvm::BasicBlock**, llvm::BasicBlock**)\"},\n    {\"_ZSt13__heap_selectIPPN4llvm10BasicBlockEEvT_S4_S4_\", \"void std::__heap_select<llvm::BasicBlock**>(llvm::BasicBlock**, llvm::BasicBlock**, llvm::BasicBlock**)\"},\n    {\"_ZSt9sort_heapIPPN4llvm10BasicBlockEEvT_S4_\", \"void std::sort_heap<llvm::BasicBlock**>(llvm::BasicBlock**, llvm::BasicBlock**)\"},\n    {\"_ZSt9make_heapIPPN4llvm10BasicBlockEEvT_S4_\", \"void std::make_heap<llvm::BasicBlock**>(llvm::BasicBlock**, llvm::BasicBlock**)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPKPN4llvm10BasicBlockESt6vectorIS4_SaIS4_EEEEPKS3_ET_SD_SD_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock const*>(__gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_5ValueENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Value*> >::insert(std::pair<llvm::BasicBlock*, llvm::Value*> const&)\"},\n    {\"_ZN4llvm12SCEVExpanderC2ERNS_15ScalarEvolutionE\", \"llvm::SCEVExpander::SCEVExpander(llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<llvm::SCEV const*, char, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::SCEV const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<llvm::SCEV const*, char, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::SCEV const* const&, char const&, std::pair<llvm::SCEV const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, char, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZSt6__findIPKPKN4llvm4SCEVES3_ET_S6_S6_RKT0_St26random_access_iterator_tag\", \"llvm::SCEV const* const* std::__find<llvm::SCEV const* const*, llvm::SCEV const*>(llvm::SCEV const* const*, llvm::SCEV const* const*, llvm::SCEV const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKNS_4SCEVEEaSERKS4_\", \"llvm::SmallVectorImpl<llvm::SCEV const*>::operator=(llvm::SmallVectorImpl<llvm::SCEV const*> const&)\"},\n    {\"_ZN4llvm14SmallBitVector9referenceaSEb\", \"llvm::SmallBitVector::reference::operator=(bool)\"},\n    {\"_ZN4llvm14SmallBitVector6resizeEjb\", \"llvm::SmallBitVector::resize(unsigned int, bool)\"},\n    {\"_ZN4llvm15SmallVectorImplIxEaSERKS1_\", \"llvm::SmallVectorImpl<long long>::operator=(llvm::SmallVectorImpl<long long> const&)\"},\n    {\"_ZSt16__introsort_loopIPPKN4llvm4SCEVElEvT_S5_T0_\", \"void std::__introsort_loop<llvm::SCEV const**, long>(llvm::SCEV const**, llvm::SCEV const**, long)\"},\n    {\"_ZSt22__final_insertion_sortIPPKN4llvm4SCEVEEvT_S5_\", \"void std::__final_insertion_sort<llvm::SCEV const**>(llvm::SCEV const**, llvm::SCEV const**)\"},\n    {\"_ZSt13__heap_selectIPPKN4llvm4SCEVEEvT_S5_S5_\", \"void std::__heap_select<llvm::SCEV const**>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**)\"},\n    {\"_ZSt9sort_heapIPPKN4llvm4SCEVEEvT_S5_\", \"void std::sort_heap<llvm::SCEV const**>(llvm::SCEV const**, llvm::SCEV const**)\"},\n    {\"_ZSt9make_heapIPPKN4llvm4SCEVEEvT_S5_\", \"void std::make_heap<llvm::SCEV const**>(llvm::SCEV const**, llvm::SCEV const**)\"},\n    {\"_ZNK4llvm14SmallBitVector9find_nextEj\", \"llvm::SmallBitVector::find_next(unsigned int) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVESt3mapIxS3_St4lessIxESaISt4pairIKxS3_EEENS_12DenseMapInfoIS3_EENSC_ISB_EEE6insertERKS7_IS3_SB_E\", \"llvm::DenseMap<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > >::insert(std::pair<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > const&)\"},\n    {\"_ZN4llvm14SmallBitVectoroRERKS0_\", \"llvm::SmallBitVector::operator|=(llvm::SmallBitVector const&)\"},\n    {\"_ZN4llvm8SmallSetISt4pairImxELj32EE6insertERKS2_\", \"llvm::SmallSet<std::pair<unsigned long, long long>, 32u>::insert(std::pair<unsigned long, long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVESt3mapIxS3_St4lessIxESaISt4pairIKxS3_EEENS_12DenseMapInfoIS3_EENSC_ISB_EEE5clearEv\", \"llvm::DenseMap<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_14SmallBitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<llvm::SCEV const*, llvm::SmallBitVector, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::SmallBitVector> >::clear()\"},\n    {\"_ZN4llvm15ScalarEvolution10getAddExprEPKNS_4SCEVES3_bb\", \"llvm::ScalarEvolution::getAddExpr(llvm::SCEV const*, llvm::SCEV const*, bool, bool)\"},\n    {\"_ZNK4llvm5APInt3uleEy\", \"llvm::APInt::ule(unsigned long long) const\"},\n    {\"_ZNSt8_Rb_treeISt4pairImxES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE8_M_eraseEPSt13_Rb_tree_nodeIS1_E\", \"std::_Rb_tree<std::pair<unsigned long, long long>, std::pair<unsigned long, long long>, std::_Identity<std::pair<unsigned long, long long> >, std::less<std::pair<unsigned long, long long> >, std::allocator<std::pair<unsigned long, long long> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned long, long long> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_14SmallBitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SCEV const*, llvm::SmallBitVector, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::SmallBitVector> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVESt3mapIxS3_St4lessIxESaISt4pairIKxS3_EEENS_12DenseMapInfoIS3_EENSC_ISB_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > >::shrink_and_clear()\"},\n    {\"_ZNSt8_Rb_treeISt4pairImxES1_St9_IdentityIS1_ESt4lessIS1_ESaIS1_EE16_M_insert_uniqueERKS1_\", \"std::_Rb_tree<std::pair<unsigned long, long long>, std::pair<unsigned long, long long>, std::_Identity<std::pair<unsigned long, long long> >, std::less<std::pair<unsigned long, long long> >, std::allocator<std::pair<unsigned long, long long> > >::_M_insert_unique(std::pair<unsigned long, long long> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_14SmallBitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::SCEV const*, llvm::SmallBitVector, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::SmallBitVector> >::FindAndConstruct(llvm::SCEV const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_14SmallBitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::SmallBitVector, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::SmallBitVector> >::InsertIntoBucket(llvm::SCEV const* const&, llvm::SmallBitVector const&, std::pair<llvm::SCEV const*, llvm::SmallBitVector>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_14SmallBitVectorENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, llvm::SmallBitVector, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::SmallBitVector> >::grow(unsigned int)\"},\n    {\"_ZNSt8_Rb_treeIxSt4pairIKxPKN4llvm4SCEVEESt10_Select1stIS6_ESt4lessIxESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<long long, std::pair<long long const, llvm::SCEV const*>, std::_Select1st<std::pair<long long const, llvm::SCEV const*> >, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >::_M_insert_unique(std::pair<long long const, llvm::SCEV const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIxSt4pairIKxPKN4llvm4SCEVEESt10_Select1stIS6_ESt4lessIxESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<long long, std::pair<long long const, llvm::SCEV const*>, std::_Select1st<std::pair<long long const, llvm::SCEV const*> >, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >::_M_erase(std::_Rb_tree_node<std::pair<long long const, llvm::SCEV const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIxSt4pairIKxPKN4llvm4SCEVEESt10_Select1stIS6_ESt4lessIxESaIS6_EE7_M_copyEPKSt13_Rb_tree_nodeIS6_EPSE_\", \"std::_Rb_tree<long long, std::pair<long long const, llvm::SCEV const*>, std::_Select1st<std::pair<long long const, llvm::SCEV const*> >, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >::_M_copy(std::_Rb_tree_node<std::pair<long long const, llvm::SCEV const*> > const*, std::_Rb_tree_node<std::pair<long long const, llvm::SCEV const*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVESt3mapIxS3_St4lessIxESaISt4pairIKxS3_EEENS_12DenseMapInfoIS3_EENSC_ISB_EEE16InsertIntoBucketERKS3_RKSB_PS7_IS3_SB_E\", \"llvm::DenseMap<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > >::InsertIntoBucket(llvm::SCEV const* const&, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > const&, std::pair<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVESt3mapIxS3_St4lessIxESaISt4pairIKxS3_EEENS_12DenseMapInfoIS3_EENSC_ISB_EEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > >, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<std::map<long long, llvm::SCEV const*, std::less<long long>, std::allocator<std::pair<long long const, llvm::SCEV const*> > > > >::grow(unsigned int)\"},\n    {\"_ZNK4llvm14SCEVAddRecExpr17getStepRecurrenceERNS_15ScalarEvolutionE\", \"llvm::SCEVAddRecExpr::getStepRecurrence(llvm::ScalarEvolution&) const\"},\n    {\"_ZN4llvm15ScalarEvolution13getAddRecExprERKNS_15SmallVectorImplIPKNS_4SCEVEEEPKNS_4LoopEbb\", \"llvm::ScalarEvolution::getAddRecExpr(llvm::SmallVectorImpl<llvm::SCEV const*> const&, llvm::Loop const*, bool, bool)\"},\n    {\"_ZN4llvm8SmallSetIxLj8EE6insertERKx\", \"llvm::SmallSet<long long, 8u>::insert(long long const&)\"},\n    {\"_ZNSt8_Rb_treeIxxSt9_IdentityIxESt4lessIxESaIxEE16_M_insert_uniqueERKx\", \"std::_Rb_tree<long long, long long, std::_Identity<long long>, std::less<long long>, std::allocator<long long> >::_M_insert_unique(long long const&)\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE18getLoopPredecessorEv\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getLoopPredecessor() const\"},\n    {\"_ZN4llvm8LoopPassD1Ev\", \"llvm::LoopPass::~LoopPass()\"},\n    {\"_ZN4llvm8LoopPassD0Ev\", \"llvm::LoopPass::~LoopPass()\"},\n    {\"_ZN4llvm24initializeLoopUnrollPassERNS_12PassRegistryE\", \"llvm::initializeLoopUnrollPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm20createLoopUnrollPassEv\", \"llvm::createLoopUnrollPass()\"},\n    {\"_ZN12_GLOBAL__N_110LoopUnrollD1Ev\", \"(anonymous namespace)::LoopUnroll::~LoopUnroll()\"},\n    {\"_ZN12_GLOBAL__N_110LoopUnrollD0Ev\", \"(anonymous namespace)::LoopUnroll::~LoopUnroll()\"},\n    {\"_ZNK12_GLOBAL__N_110LoopUnroll16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopUnroll::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_110LoopUnroll9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopUnroll::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_110LoopUnrollEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopUnroll>()\"},\n    {\"_ZN4llvm26initializeLoopUnswitchPassERNS_12PassRegistryE\", \"llvm::initializeLoopUnswitchPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm22createLoopUnswitchPassEb\", \"llvm::createLoopUnswitchPass(bool)\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitchD1Ev\", \"(anonymous namespace)::LoopUnswitch::~LoopUnswitch()\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitchD0Ev\", \"(anonymous namespace)::LoopUnswitch::~LoopUnswitch()\"},\n    {\"_ZNK12_GLOBAL__N_112LoopUnswitch16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopUnswitch::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch13releaseMemoryEv\", \"(anonymous namespace)::LoopUnswitch::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopUnswitch::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_Z20FindLIVLoopConditionPN4llvm5ValueEPNS_4LoopERb\", \"FindLIVLoopCondition(llvm::Value*, llvm::Loop*, bool&)\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch20UnswitchIfProfitableEPN4llvm5ValueEPNS1_8ConstantE\", \"(anonymous namespace)::LoopUnswitch::UnswitchIfProfitable(llvm::Value*, llvm::Constant*)\"},\n    {\"_Z9CloneLoopPN4llvm4LoopES1_RNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS3_EENS_14ValueMapConfigIS5_EENS_12DenseMapInfoIS7_EEEEPNS_8LoopInfoEPNS_13LPPassManagerE\", \"CloneLoop(llvm::Loop*, llvm::Loop*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, llvm::LoopInfo*, llvm::LPPassManager*)\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch30EmitPreheaderBranchOnConditionEPN4llvm5ValueEPNS1_8ConstantEPNS1_10BasicBlockES7_PNS1_11InstructionE\", \"(anonymous namespace)::LoopUnswitch::EmitPreheaderBranchOnCondition(llvm::Value*, llvm::Constant*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Instruction*)\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch36RewriteLoopBodyWithConditionConstantEPN4llvm4LoopEPNS1_5ValueEPNS1_8ConstantEb\", \"(anonymous namespace)::LoopUnswitch::RewriteLoopBodyWithConditionConstant(llvm::Loop*, llvm::Value*, llvm::Constant*, bool)\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch12SimplifyCodeERSt6vectorIPN4llvm11InstructionESaIS4_EEPNS2_4LoopE\", \"(anonymous namespace)::LoopUnswitch::SimplifyCode(std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >&, llvm::Loop*)\"},\n    {\"_Z18RemoveFromWorklistPN4llvm11InstructionERSt6vectorIS1_SaIS1_EE\", \"RemoveFromWorklist(llvm::Instruction*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >&)\"},\n    {\"_Z17ReplaceUsesOfWithPN4llvm11InstructionEPNS_5ValueERSt6vectorIS1_SaIS1_EEPNS_4LoopEPNS_13LPPassManagerE\", \"ReplaceUsesOfWith(llvm::Instruction*, llvm::Value*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >&, llvm::Loop*, llvm::LPPassManager*)\"},\n    {\"_Z28isTrivialLoopExitBlockHelperPN4llvm4LoopEPNS_10BasicBlockERS3_RSt3setIS3_St4lessIS3_ESaIS3_EE\", \"isTrivialLoopExitBlockHelper(llvm::Loop*, llvm::BasicBlock*, llvm::BasicBlock*&, std::set<llvm::BasicBlock*, std::less<llvm::BasicBlock*>, std::allocator<llvm::BasicBlock*> >&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112LoopUnswitchEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopUnswitch>()\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm11InstructionESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::Instruction**, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::Instruction**, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > >, llvm::Instruction*>(__gnu_cxx::__normal_iterator<llvm::Instruction**, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > >, __gnu_cxx::__normal_iterator<llvm::Instruction**, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > >, llvm::Instruction* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm4UserESaIS2_EEC2INS0_18value_use_iteratorIS1_EEEET_S8_RKS3_\", \"std::vector<llvm::User*, std::allocator<llvm::User*> >::vector<llvm::value_use_iterator<llvm::User> >(llvm::value_use_iterator<llvm::User>, llvm::value_use_iterator<llvm::User>, std::allocator<llvm::User*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE15_M_range_insertIPS2_EEvN9__gnu_cxx17__normal_iteratorIS6_S4_EET_SA_St20forward_iterator_tag\", \"void std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_range_insert<llvm::BasicBlock**>(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock**, llvm::BasicBlock**, std::forward_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEvNS7_IPS2_S4_EET_SD_St20forward_iterator_tag\", \"void std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > >(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::BasicBlock* const*, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm19createMemCpyOptPassEv\", \"llvm::createMemCpyOptPass()\"},\n    {\"_ZN4llvm23initializeMemCpyOptPassERNS_12PassRegistryE\", \"llvm::initializeMemCpyOptPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_19MemCpyOptEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::MemCpyOpt>()\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOptD1Ev\", \"(anonymous namespace)::MemCpyOpt::~MemCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOptD0Ev\", \"(anonymous namespace)::MemCpyOpt::~MemCpyOpt()\"},\n    {\"_ZNK12_GLOBAL__N_19MemCpyOpt16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::MemCpyOpt::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOpt13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::MemCpyOpt::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOpt20performCallSlotOptznEPN4llvm11InstructionEPNS1_5ValueES5_yPNS1_8CallInstE\", \"(anonymous namespace)::MemCpyOpt::performCallSlotOptzn(llvm::Instruction*, llvm::Value*, llvm::Value*, unsigned long long, llvm::CallInst*)\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOpt20tryMergingIntoMemsetEPN4llvm11InstructionEPNS1_5ValueES5_\", \"(anonymous namespace)::MemCpyOpt::tryMergingIntoMemset(llvm::Instruction*, llvm::Value*, llvm::Value*)\"},\n    {\"_Z15IsPointerOffsetPN4llvm5ValueES1_RxRKNS_10DataLayoutE\", \"IsPointerOffset(llvm::Value*, llvm::Value*, long long&, llvm::DataLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_112MemsetRanges8addStoreExPN4llvm9StoreInstE\", \"(anonymous namespace)::MemsetRanges::addStore(long long, llvm::StoreInst*)\"},\n    {\"_ZN12_GLOBAL__N_112MemsetRanges8addRangeExxPN4llvm5ValueEjPNS1_11InstructionE\", \"(anonymous namespace)::MemsetRanges::addRange(long long, long long, llvm::Value*, unsigned int, llvm::Instruction*)\"},\n    {\"_Z18GetOffsetFromIndexPKN4llvm17GetElementPtrInstEjRbRKNS_10DataLayoutE\", \"GetOffsetFromIndex(llvm::GetElementPtrInst const*, unsigned int, bool&, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_4UserEE6appendINS_18value_use_iteratorIS1_EEEEvT_S7_\", \"void llvm::SmallVectorImpl<llvm::User*>::append<llvm::value_use_iterator<llvm::User> >(llvm::value_use_iterator<llvm::User>, llvm::value_use_iterator<llvm::User>)\"},\n    {\"_ZN4llvm25initializeReassociatePassERNS_12PassRegistryE\", \"llvm::initializeReassociatePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createReassociatePassEv\", \"llvm::createReassociatePass()\"},\n    {\"_ZN12_GLOBAL__N_111ReassociateC1Ev\", \"(anonymous namespace)::Reassociate::Reassociate()\"},\n    {\"_ZN12_GLOBAL__N_111ReassociateD1Ev\", \"(anonymous namespace)::Reassociate::~Reassociate()\"},\n    {\"_ZN12_GLOBAL__N_111ReassociateD0Ev\", \"(anonymous namespace)::Reassociate::~Reassociate()\"},\n    {\"_ZNK12_GLOBAL__N_111Reassociate16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::Reassociate::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::Reassociate::runOnFunction(llvm::Function&)\"},\n    {\"_Z21LowerNegateToMultiplyPN4llvm11InstructionERNS_8DenseMapINS_11AssertingVHINS_5ValueEEEjNS_12DenseMapInfoIS5_EENS6_IjEEEE\", \"LowerNegateToMultiply(llvm::Instruction*, llvm::DenseMap<llvm::AssertingVH<llvm::Value>, unsigned int, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Value> >, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate21ReassociateExpressionEPN4llvm14BinaryOperatorE\", \"(anonymous namespace)::Reassociate::ReassociateExpression(llvm::BinaryOperator*)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate17LinearizeExprTreeEPN4llvm14BinaryOperatorERNS1_15SmallVectorImplINS_10ValueEntryEEE\", \"(anonymous namespace)::Reassociate::LinearizeExprTree(llvm::BinaryOperator*, llvm::SmallVectorImpl<(anonymous namespace)::ValueEntry>&)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate18OptimizeExpressionEPN4llvm14BinaryOperatorERNS1_15SmallVectorImplINS_10ValueEntryEEE\", \"(anonymous namespace)::Reassociate::OptimizeExpression(llvm::BinaryOperator*, llvm::SmallVectorImpl<(anonymous namespace)::ValueEntry>&)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate18RemoveDeadBinaryOpEPN4llvm5ValueE\", \"(anonymous namespace)::Reassociate::RemoveDeadBinaryOp(llvm::Value*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_110ValueEntryEE6insertEPS2_RKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::ValueEntry>::insert((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry const&)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate15RewriteExprTreeEPN4llvm14BinaryOperatorERNS1_15SmallVectorImplINS_10ValueEntryEEEj\", \"(anonymous namespace)::Reassociate::RewriteExprTree(llvm::BinaryOperator*, llvm::SmallVectorImpl<(anonymous namespace)::ValueEntry>&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate7getRankEPN4llvm5ValueE\", \"(anonymous namespace)::Reassociate::getRank(llvm::Value*)\"},\n    {\"_Z28FindSingleUseMultiplyFactorsPN4llvm5ValueERNS_15SmallVectorImplIS1_EERKNS2_IN12_GLOBAL__N_110ValueEntryEEEb\", \"FindSingleUseMultiplyFactors(llvm::Value*, llvm::SmallVectorImpl<llvm::Value*>&, llvm::SmallVectorImpl<(anonymous namespace)::ValueEntry> const&, bool)\"},\n    {\"_Z19EmitAddTreeOfValuesPN4llvm11InstructionERNS_15SmallVectorImplIPNS_5ValueEEE\", \"EmitAddTreeOfValues(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Value*>&)\"},\n    {\"_ZSt21__inplace_stable_sortIPN12_GLOBAL__N_110ValueEntryEEvT_S3_\", \"void std::__inplace_stable_sort<(anonymous namespace)::ValueEntry*>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPN12_GLOBAL__N_110ValueEntryES2_lEvT_S3_T0_T1_\", \"void std::__stable_sort_adaptive<(anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, long>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, long)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPN12_GLOBAL__N_110ValueEntryES2_EvT_S3_T0_\", \"void std::__merge_sort_with_buffer<(anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*)\"},\n    {\"_ZSt16__merge_adaptiveIPN12_GLOBAL__N_110ValueEntryElS2_EvT_S3_S3_T0_S4_T1_S4_\", \"void std::__merge_adaptive<(anonymous namespace)::ValueEntry*, long, (anonymous namespace)::ValueEntry*>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, long, long, (anonymous namespace)::ValueEntry*, long)\"},\n    {\"_ZSt6rotateIPN12_GLOBAL__N_110ValueEntryEEvT_S3_S3_\", \"void std::rotate<(anonymous namespace)::ValueEntry*>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*)\"},\n    {\"_ZSt16__insertion_sortIPN12_GLOBAL__N_110ValueEntryEEvT_S3_\", \"void std::__insertion_sort<(anonymous namespace)::ValueEntry*>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*)\"},\n    {\"_ZSt22__merge_without_bufferIPN12_GLOBAL__N_110ValueEntryElEvT_S3_S3_T0_S4_\", \"void std::__merge_without_buffer<(anonymous namespace)::ValueEntry*, long>((anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, (anonymous namespace)::ValueEntry*, long, long)\"},\n    {\"_Z11NegateValuePN4llvm5ValueEPNS_11InstructionE\", \"NegateValue(llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111ReassociateEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::Reassociate>()\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_5ValueEEEjNS_12DenseMapInfoIS3_EENS4_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Value>, unsigned int, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Value> >, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_5ValueEEEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Value>, unsigned int, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Value> >, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::AssertingVH<llvm::Value> const&, unsigned int const&, std::pair<llvm::AssertingVH<llvm::Value>, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapINS_11AssertingVHINS_5ValueEEEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::AssertingVH<llvm::Value>, unsigned int, llvm::DenseMapInfo<llvm::AssertingVH<llvm::Value> >, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm25ReversePostOrderTraversalIPNS_8FunctionENS_11GraphTraitsIS2_EEEC2ES2_\", \"llvm::ReversePostOrderTraversal<llvm::Function*, llvm::GraphTraits<llvm::Function*> >::ReversePostOrderTraversal(llvm::Function*)\"},\n    {\"_ZSt4copyIN4llvm11po_iteratorIPNS0_10BasicBlockENS0_11SmallPtrSetIS3_Lj8EEELb0ENS0_11GraphTraitsIS3_EEEESt20back_insert_iteratorISt6vectorIS3_SaIS3_EEEET0_T_SF_SE_\", \"std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::copy<llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > >(llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >)\"},\n    {\"_ZN4llvm8po_beginIPNS_10BasicBlockEEENS_11po_iteratorIT_NS_11SmallPtrSetIPNS_11GraphTraitsIS4_E8NodeTypeELj8EEELb0ES7_EES4_\", \"llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::GraphTraits<llvm::BasicBlock*>::NodeType*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> > llvm::po_begin<llvm::BasicBlock*>(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11po_iteratorIPNS_10BasicBlockENS_11SmallPtrSetIS2_Lj8EEELb0ENS_11GraphTraitsIS2_EEE13traverseChildEv\", \"llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >::traverseChild()\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm10BasicBlockENS1_12SuccIteratorIPNS1_14TerminatorInstES2_EEESaIS8_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS8_SA_EERKS8_\", \"std::vector<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >*, std::vector<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > > >, std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > const&)\"},\n    {\"_ZNSt13__copy_normalILb0ELb0EE8__copy_nIN4llvm11po_iteratorIPNS2_10BasicBlockENS2_11SmallPtrSetIS5_Lj8EEELb0ENS2_11GraphTraitsIS5_EEEESt20back_insert_iteratorISt6vectorIS5_SaIS5_EEEEET0_T_SH_SG_\", \"std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::__copy_normal<false, false>::__copy_n<llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > >(llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm10BasicBlockENS1_12SuccIteratorIPNS1_14TerminatorInstES2_EEESaIS8_EEC2ERKSA_\", \"std::vector<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > >::vector(std::vector<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, std::allocator<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> > > > const&)\"},\n    {\"_ZSt10__copy_auxIN4llvm11po_iteratorIPNS0_10BasicBlockENS0_11SmallPtrSetIS3_Lj8EEELb0ENS0_11GraphTraitsIS3_EEEESt20back_insert_iteratorISt6vectorIS3_SaIS3_EEEET0_T_SF_SE_\", \"std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::__copy_aux<llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > >(llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >)\"},\n    {\"_ZNSt6__copyILb0ESt20forward_iterator_tagE4copyIN4llvm11po_iteratorIPNS3_10BasicBlockENS3_11SmallPtrSetIS6_Lj8EEELb0ENS3_11GraphTraitsIS6_EEEESt20back_insert_iteratorISt6vectorIS6_SaIS6_EEEEET0_T_SI_SH_\", \"std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::__copy<false, std::forward_iterator_tag>::copy<llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > >(llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, llvm::po_iterator<llvm::BasicBlock*, llvm::SmallPtrSet<llvm::BasicBlock*, 8u>, false, llvm::GraphTraits<llvm::BasicBlock*> >, std::back_insert_iterator<std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >)\"},\n    {\"_ZN4llvm18initializeSCCPPassERNS_12PassRegistryE\", \"llvm::initializeSCCPPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm14createSCCPPassEv\", \"llvm::createSCCPPass()\"},\n    {\"_ZN4llvm20initializeIPSCCPPassERNS_12PassRegistryE\", \"llvm::initializeIPSCCPPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm16createIPSCCPPassEv\", \"llvm::createIPSCCPPass()\"},\n    {\"_ZN12_GLOBAL__N_16IPSCCPD1Ev\", \"(anonymous namespace)::IPSCCP::~IPSCCP()\"},\n    {\"_ZN12_GLOBAL__N_16IPSCCPD0Ev\", \"(anonymous namespace)::IPSCCP::~IPSCCP()\"},\n    {\"_ZN12_GLOBAL__N_16IPSCCP11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::IPSCCP::runOnModule(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolverC1EPKN4llvm10DataLayoutE\", \"(anonymous namespace)::SCCPSolver::SCCPSolver(llvm::DataLayout const*)\"},\n    {\"_Z14AddressIsTakenPKN4llvm11GlobalValueE\", \"AddressIsTaken(llvm::GlobalValue const*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver23markAnythingOverdefinedEPN4llvm5ValueE\", \"(anonymous namespace)::SCCPSolver::markAnythingOverdefined(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver5SolveEv\", \"(anonymous namespace)::SCCPSolver::Solve()\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver16ResolvedUndefsInERN4llvm8FunctionE\", \"(anonymous namespace)::SCCPSolver::ResolvedUndefsIn(llvm::Function&)\"},\n    {\"_Z24DeleteInstructionInBlockPN4llvm10BasicBlockE\", \"DeleteInstructionInBlock(llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolverD1Ev\", \"(anonymous namespace)::SCCPSolver::~SCCPSolver()\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver19getStructValueStateEPN4llvm5ValueEj\", \"(anonymous namespace)::SCCPSolver::getStructValueState(llvm::Value*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver13getValueStateEPN4llvm5ValueE\", \"(anonymous namespace)::SCCPSolver::getValueState(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver18markForcedConstantEPN4llvm5ValueEPNS1_8ConstantE\", \"(anonymous namespace)::SCCPSolver::markForcedConstant(llvm::Value*, llvm::Constant*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver15markOverdefinedEPN4llvm5ValueE\", \"(anonymous namespace)::SCCPSolver::markOverdefined(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver18markEdgeExecutableEPN4llvm10BasicBlockES3_\", \"(anonymous namespace)::SCCPSolver::markEdgeExecutable(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver12visitPHINodeERN4llvm7PHINodeE\", \"(anonymous namespace)::SCCPSolver::visitPHINode(llvm::PHINode&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver12markConstantEPN4llvm5ValueEPNS1_8ConstantE\", \"(anonymous namespace)::SCCPSolver::markConstant(llvm::Value*, llvm::Constant*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEN12_GLOBAL__N_110LatticeValENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Value*, (anonymous namespace)::LatticeVal, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<(anonymous namespace)::LatticeVal> >::InsertIntoBucket(llvm::Value* const&, (anonymous namespace)::LatticeVal const&, std::pair<llvm::Value*, (anonymous namespace)::LatticeVal>*)\"},\n    {\"_ZN4llvm11InstVisitorIN12_GLOBAL__N_110SCCPSolverEvE5visitERNS_11InstructionE\", \"llvm::InstVisitor<(anonymous namespace)::SCCPSolver, void>::visit(llvm::Instruction&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver12mergeInValueERNS_10LatticeValEPN4llvm5ValueES1_\", \"(anonymous namespace)::SCCPSolver::mergeInValue((anonymous namespace)::LatticeVal&, llvm::Value*, (anonymous namespace)::LatticeVal)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver12mergeInValueEPN4llvm5ValueENS_10LatticeValE\", \"(anonymous namespace)::SCCPSolver::mergeInValue(llvm::Value*, (anonymous namespace)::LatticeVal)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver13visitCallSiteEN4llvm8CallSiteE\", \"(anonymous namespace)::SCCPSolver::visitCallSite(llvm::CallSite)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_8FunctionEjEN12_GLOBAL__N_110LatticeValENS_12DenseMapInfoIS4_EENS7_IS6_EEE15LookupBucketForERKS4_RPS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::Function*, unsigned int>, (anonymous namespace)::LatticeVal, llvm::DenseMapInfo<std::pair<llvm::Function*, unsigned int> >, llvm::DenseMapInfo<(anonymous namespace)::LatticeVal> >::LookupBucketFor(std::pair<llvm::Function*, unsigned int> const&, std::pair<std::pair<llvm::Function*, unsigned int>, (anonymous namespace)::LatticeVal>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_8FunctionEjEN12_GLOBAL__N_110LatticeValENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::Function*, unsigned int>, (anonymous namespace)::LatticeVal, llvm::DenseMapInfo<std::pair<llvm::Function*, unsigned int> >, llvm::DenseMapInfo<(anonymous namespace)::LatticeVal> >::InsertIntoBucket(std::pair<llvm::Function*, unsigned int> const&, (anonymous namespace)::LatticeVal const&, std::pair<std::pair<llvm::Function*, unsigned int>, (anonymous namespace)::LatticeVal>*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver12visitCmpInstERN4llvm7CmpInstE\", \"(anonymous namespace)::SCCPSolver::visitCmpInst(llvm::CmpInst&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver23InsertInOverdefinedPHIsEPN4llvm11InstructionEPNS1_7PHINodeE\", \"(anonymous namespace)::SCCPSolver::InsertInOverdefinedPHIs(llvm::Instruction*, llvm::PHINode*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver25RemoveFromOverdefinedPHIsEPN4llvm11InstructionEPNS1_7PHINodeE\", \"(anonymous namespace)::SCCPSolver::RemoveFromOverdefinedPHIs(llvm::Instruction*, llvm::PHINode*)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver13visitCastInstERN4llvm8CastInstE\", \"(anonymous namespace)::SCCPSolver::visitCastInst(llvm::CastInst&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver19visitBinaryOperatorERN4llvm11InstructionE\", \"(anonymous namespace)::SCCPSolver::visitBinaryOperator(llvm::Instruction&)\"},\n    {\"_ZN12_GLOBAL__N_110SCCPSolver19visitTerminatorInstERN4llvm14TerminatorInstE\", \"(anonymous namespace)::SCCPSolver::visitTerminatorInst(llvm::TerminatorInst&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_5ValueEjEN12_GLOBAL__N_110LatticeValENS_12DenseMapInfoIS4_EENS7_IS6_EEE15LookupBucketForERKS4_RPS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::Value*, unsigned int>, (anonymous namespace)::LatticeVal, llvm::DenseMapInfo<std::pair<llvm::Value*, unsigned int> >, llvm::DenseMapInfo<(anonymous namespace)::LatticeVal> >::LookupBucketFor(std::pair<llvm::Value*, unsigned int> const&, std::pair<std::pair<llvm::Value*, unsigned int>, (anonymous namespace)::LatticeVal>*&) const\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_16IPSCCPEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::IPSCCP>()\"},\n    {\"_ZN12_GLOBAL__N_14SCCPD1Ev\", \"(anonymous namespace)::SCCP::~SCCP()\"},\n    {\"_ZN12_GLOBAL__N_14SCCPD0Ev\", \"(anonymous namespace)::SCCP::~SCCP()\"},\n    {\"_ZN12_GLOBAL__N_14SCCP13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::SCCP::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_14SCCPEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::SCCP>()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm7PHINodeESt4pairIKS2_PNS0_11InstructionEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::PHINode*, std::pair<llvm::PHINode* const, llvm::Instruction*>, std::_Select1st<std::pair<llvm::PHINode* const, llvm::Instruction*> >, std::less<llvm::PHINode*>, std::allocator<std::pair<llvm::PHINode* const, llvm::Instruction*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::PHINode* const, llvm::Instruction*> >*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockES3_EcNS_12DenseMapInfoIS4_EENS5_IcEEE6insertERKS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char> const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_10BasicBlockES3_EcNS_12DenseMapInfoIS4_EENS5_IcEEE15LookupBucketForERKS4_RPS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::LookupBucketFor(std::pair<llvm::BasicBlock*, llvm::BasicBlock*> const&, std::pair<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockES3_EcNS_12DenseMapInfoIS4_EENS5_IcEEE16InsertIntoBucketERKS4_RKcPS1_IS4_cE\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<llvm::BasicBlock*, llvm::BasicBlock*> const&, char const&, std::pair<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockES3_EcNS_12DenseMapInfoIS4_EENS5_IcEEE4growEj\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, llvm::BasicBlock*>, char, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, llvm::BasicBlock*> >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm21initializeSROA_DTPassERNS_12PassRegistryE\", \"llvm::initializeSROA_DTPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24initializeSROA_SSAUpPassERNS_12PassRegistryE\", \"llvm::initializeSROA_SSAUpPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm30createScalarReplAggregatesPassEib\", \"llvm::createScalarReplAggregatesPass(int, bool)\"},\n    {\"_ZN12_GLOBAL__N_110SROA_SSAUpD1Ev\", \"(anonymous namespace)::SROA_SSAUp::~SROA_SSAUp()\"},\n    {\"_ZN12_GLOBAL__N_110SROA_SSAUpD0Ev\", \"(anonymous namespace)::SROA_SSAUp::~SROA_SSAUp()\"},\n    {\"_ZNK12_GLOBAL__N_110SROA_SSAUp16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::SROA_SSAUp::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14SROA13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::SROA::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_14SROA16performPromotionERN4llvm8FunctionE\", \"(anonymous namespace)::SROA::performPromotion(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_119ConvertToScalarInfo18CanConvertToScalarEPN4llvm5ValueEy\", \"(anonymous namespace)::ConvertToScalarInfo::CanConvertToScalar(llvm::Value*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_119ConvertToScalarInfo19ConvertUsesToScalarEPN4llvm5ValueEPNS1_10AllocaInstEy\", \"(anonymous namespace)::ConvertToScalarInfo::ConvertUsesToScalar(llvm::Value*, llvm::AllocaInst*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_119ConvertToScalarInfo26ConvertScalar_ExtractValueEPN4llvm5ValueEPKNS1_4TypeEyRNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::ConvertToScalarInfo::ConvertScalar_ExtractValue(llvm::Value*, llvm::Type const*, unsigned long long, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_119ConvertToScalarInfo25ConvertScalar_InsertValueEPN4llvm5ValueES3_yRNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::ConvertToScalarInfo::ConvertScalar_InsertValue(llvm::Value*, llvm::Value*, unsigned long long, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_119ConvertToScalarInfo11MergeInTypeEPKN4llvm4TypeEy\", \"(anonymous namespace)::ConvertToScalarInfo::MergeInType(llvm::Type const*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_14SROA20RewriteForScalarReplEPN4llvm11InstructionEPNS1_10AllocaInstEyRNS1_11SmallVectorIS5_Lj32EEE\", \"(anonymous namespace)::SROA::RewriteForScalarRepl(llvm::Instruction*, llvm::AllocaInst*, unsigned long long, llvm::SmallVector<llvm::AllocaInst*, 32u>&)\"},\n    {\"_ZN12_GLOBAL__N_14SROA20FindElementAndOffsetERPKN4llvm4TypeERyS5_\", \"(anonymous namespace)::SROA::FindElementAndOffset(llvm::Type const*&, unsigned long long&, llvm::Type const*&)\"},\n    {\"_ZN12_GLOBAL__N_14SROA19isSafeForScalarReplEPN4llvm11InstructionEyRNS0_10AllocaInfoE\", \"(anonymous namespace)::SROA::isSafeForScalarRepl(llvm::Instruction*, unsigned long long, (anonymous namespace)::SROA::AllocaInfo&)\"},\n    {\"_ZN12_GLOBAL__N_14SROA15isSafeMemAccessEyyPKN4llvm4TypeEbRNS0_10AllocaInfoEPNS1_11InstructionEb\", \"(anonymous namespace)::SROA::isSafeMemAccess(unsigned long long, unsigned long long, llvm::Type const*, bool, (anonymous namespace)::SROA::AllocaInfo&, llvm::Instruction*, bool)\"},\n    {\"_ZN12_GLOBAL__N_14SROA31isSafePHISelectUseForScalarReplEPN4llvm11InstructionEyRNS0_10AllocaInfoE\", \"(anonymous namespace)::SROA::isSafePHISelectUseForScalarRepl(llvm::Instruction*, unsigned long long, (anonymous namespace)::SROA::AllocaInfo&)\"},\n    {\"_ZN12_GLOBAL__N_14SROA16TypeHasComponentEPKN4llvm4TypeEyy\", \"(anonymous namespace)::SROA::TypeHasComponent(llvm::Type const*, unsigned long long, unsigned long long)\"},\n    {\"_Z30isOnlyCopiedFromConstantGlobalPN4llvm5ValueERPNS_15MemTransferInstEb\", \"isOnlyCopiedFromConstantGlobal(llvm::Value*, llvm::MemTransferInst*&, bool)\"},\n    {\"_Z27tryToMakeAllocaBePromotablePN4llvm10AllocaInstEPKNS_10DataLayoutE\", \"tryToMakeAllocaBePromotable(llvm::AllocaInst*, llvm::DataLayout const*)\"},\n    {\"_ZN12_GLOBAL__N_114AllocaPromoterD1Ev\", \"(anonymous namespace)::AllocaPromoter::~AllocaPromoter()\"},\n    {\"_ZN12_GLOBAL__N_114AllocaPromoterD0Ev\", \"(anonymous namespace)::AllocaPromoter::~AllocaPromoter()\"},\n    {\"_ZNK12_GLOBAL__N_114AllocaPromoter12isInstInListEPN4llvm11InstructionERKNS1_15SmallVectorImplIS3_EE\", \"(anonymous namespace)::AllocaPromoter::isInstInList(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Instruction*> const&) const\"},\n    {\"_ZN12_GLOBAL__N_14SROAD1Ev\", \"(anonymous namespace)::SROA::~SROA()\"},\n    {\"_ZN12_GLOBAL__N_14SROAD0Ev\", \"(anonymous namespace)::SROA::~SROA()\"},\n    {\"_ZN12_GLOBAL__N_17SROA_DTD1Ev\", \"(anonymous namespace)::SROA_DT::~SROA_DT()\"},\n    {\"_ZN12_GLOBAL__N_17SROA_DTD0Ev\", \"(anonymous namespace)::SROA_DT::~SROA_DT()\"},\n    {\"_ZNK12_GLOBAL__N_17SROA_DT16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::SROA_DT::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_110SROA_SSAUpEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::SROA_SSAUp>()\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_17SROA_DTEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::SROA_DT>()\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateLoadEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateLoad(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE19CreateInsertElementEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateInsertElement(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE18CreateExtractValueEPNS_5ValueEjRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateExtractValue(llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE20CreateExtractElementEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateExtractElement(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE17CreateInsertValueEPNS_5ValueES6_jRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateInsertValue(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm11SmallVectorIPNS_8ConstantELj16EEC2EjRKS2_\", \"llvm::SmallVector<llvm::Constant*, 16u>::SmallVector(unsigned int, llvm::Constant* const&)\"},\n    {\"_ZNSt6vectorIPN4llvm10AllocaInstESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AllocaInst**, std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > >, llvm::AllocaInst* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_8LoadInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::LoadInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::LoadInst*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::LoadInst* const&, std::pair<llvm::BasicBlock*, llvm::LoadInst*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_8LoadInstENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::LoadInst*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::LoadInst*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm29initializeCFGSimplifyPassPassERNS_12PassRegistryE\", \"llvm::initializeCFGSimplifyPassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm27createCFGSimplificationPassEv\", \"llvm::createCFGSimplificationPass()\"},\n    {\"_ZN12_GLOBAL__N_115CFGSimplifyPassD1Ev\", \"(anonymous namespace)::CFGSimplifyPass::~CFGSimplifyPass()\"},\n    {\"_ZN12_GLOBAL__N_115CFGSimplifyPassD0Ev\", \"(anonymous namespace)::CFGSimplifyPass::~CFGSimplifyPass()\"},\n    {\"_ZN12_GLOBAL__N_115CFGSimplifyPass13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::CFGSimplifyPass::runOnFunction(llvm::Function&)\"},\n    {\"_Z29RemoveUnreachableBlocksFromFnRN4llvm8FunctionE\", \"RemoveUnreachableBlocksFromFn(llvm::Function&)\"},\n    {\"_Z20IterativeSimplifyCFGRN4llvm8FunctionEPKNS_10DataLayoutE\", \"IterativeSimplifyCFG(llvm::Function&, llvm::DataLayout const*)\"},\n    {\"_Z19ChangeToUnreachablePN4llvm11InstructionEb\", \"ChangeToUnreachable(llvm::Instruction*, bool)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_115CFGSimplifyPassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::CFGSimplifyPass>()\"},\n    {\"_ZN4llvm30initializeSimplifyLibCallsPassERNS_12PassRegistryE\", \"llvm::initializeSimplifyLibCallsPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm26createSimplifyLibCallsPassEv\", \"llvm::createSimplifyLibCallsPass()\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCallsD1Ev\", \"(anonymous namespace)::SimplifyLibCalls::~SimplifyLibCalls()\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCallsD0Ev\", \"(anonymous namespace)::SimplifyLibCalls::~SimplifyLibCalls()\"},\n    {\"_ZNK12_GLOBAL__N_116SimplifyLibCalls16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::SimplifyLibCalls::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::SimplifyLibCalls::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::SimplifyLibCalls::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm9StringMapIPN12_GLOBAL__N_119LibCallOptimizationENS_15MallocAllocatorEEixENS_9StringRefE\", \"llvm::StringMap<(anonymous namespace)::LibCallOptimization*, llvm::MallocAllocator>::operator[](llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls15setDoesNotThrowERN4llvm8FunctionE\", \"(anonymous namespace)::SimplifyLibCalls::setDoesNotThrow(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls15setDoesNotAliasERN4llvm8FunctionEj\", \"(anonymous namespace)::SimplifyLibCalls::setDoesNotAlias(llvm::Function&, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls22setDoesNotAccessMemoryERN4llvm8FunctionE\", \"(anonymous namespace)::SimplifyLibCalls::setDoesNotAccessMemory(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_17PutsOptD1Ev\", \"(anonymous namespace)::PutsOpt::~PutsOpt()\"},\n    {\"_ZN12_GLOBAL__N_110FPrintFOptD1Ev\", \"(anonymous namespace)::FPrintFOpt::~FPrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_18FPutsOptD1Ev\", \"(anonymous namespace)::FPutsOpt::~FPutsOpt()\"},\n    {\"_ZN12_GLOBAL__N_19FWriteOptD1Ev\", \"(anonymous namespace)::FWriteOpt::~FWriteOpt()\"},\n    {\"_ZN12_GLOBAL__N_19PrintFOptD1Ev\", \"(anonymous namespace)::PrintFOpt::~PrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_110SPrintFOptD1Ev\", \"(anonymous namespace)::SPrintFOpt::~SPrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_110ToAsciiOptD1Ev\", \"(anonymous namespace)::ToAsciiOpt::~ToAsciiOpt()\"},\n    {\"_ZN12_GLOBAL__N_110IsAsciiOptD1Ev\", \"(anonymous namespace)::IsAsciiOpt::~IsAsciiOpt()\"},\n    {\"_ZN12_GLOBAL__N_110IsDigitOptD1Ev\", \"(anonymous namespace)::IsDigitOpt::~IsDigitOpt()\"},\n    {\"_ZN12_GLOBAL__N_16AbsOptD1Ev\", \"(anonymous namespace)::AbsOpt::~AbsOpt()\"},\n    {\"_ZN12_GLOBAL__N_16FFSOptD1Ev\", \"(anonymous namespace)::FFSOpt::~FFSOpt()\"},\n    {\"_ZN12_GLOBAL__N_116UnaryDoubleFPOptD1Ev\", \"(anonymous namespace)::UnaryDoubleFPOpt::~UnaryDoubleFPOpt()\"},\n    {\"_ZN12_GLOBAL__N_17Exp2OptD1Ev\", \"(anonymous namespace)::Exp2Opt::~Exp2Opt()\"},\n    {\"_ZN12_GLOBAL__N_16PowOptD1Ev\", \"(anonymous namespace)::PowOpt::~PowOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemSetOptD1Ev\", \"(anonymous namespace)::MemSetOpt::~MemSetOpt()\"},\n    {\"_ZN12_GLOBAL__N_110MemMoveOptD1Ev\", \"(anonymous namespace)::MemMoveOpt::~MemMoveOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOptD1Ev\", \"(anonymous namespace)::MemCpyOpt::~MemCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemCmpOptD1Ev\", \"(anonymous namespace)::MemCmpOpt::~MemCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrStrOptD1Ev\", \"(anonymous namespace)::StrStrOpt::~StrStrOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrCSpnOptD1Ev\", \"(anonymous namespace)::StrCSpnOpt::~StrCSpnOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrSpnOptD1Ev\", \"(anonymous namespace)::StrSpnOpt::~StrSpnOpt()\"},\n    {\"_ZN12_GLOBAL__N_18StrToOptD1Ev\", \"(anonymous namespace)::StrToOpt::~StrToOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrPBrkOptD1Ev\", \"(anonymous namespace)::StrPBrkOpt::~StrPBrkOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrLenOptD1Ev\", \"(anonymous namespace)::StrLenOpt::~StrLenOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCpyOptD1Ev\", \"(anonymous namespace)::StrNCpyOpt::~StrNCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCpyOptD1Ev\", \"(anonymous namespace)::StrCpyOpt::~StrCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCmpOptD1Ev\", \"(anonymous namespace)::StrNCmpOpt::~StrNCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCmpOptD1Ev\", \"(anonymous namespace)::StrCmpOpt::~StrCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrRChrOptD1Ev\", \"(anonymous namespace)::StrRChrOpt::~StrRChrOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrChrOptD1Ev\", \"(anonymous namespace)::StrChrOpt::~StrChrOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCatOptD1Ev\", \"(anonymous namespace)::StrNCatOpt::~StrNCatOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCatOptD1Ev\", \"(anonymous namespace)::StrCatOpt::~StrCatOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCatOptD0Ev\", \"(anonymous namespace)::StrCatOpt::~StrCatOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCatOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrCatOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_119LibCallOptimizationD1Ev\", \"(anonymous namespace)::LibCallOptimization::~LibCallOptimization()\"},\n    {\"_ZN12_GLOBAL__N_119LibCallOptimizationD0Ev\", \"(anonymous namespace)::LibCallOptimization::~LibCallOptimization()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCatOptD0Ev\", \"(anonymous namespace)::StrNCatOpt::~StrNCatOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCatOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrNCatOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrChrOptD0Ev\", \"(anonymous namespace)::StrChrOpt::~StrChrOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrChrOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrChrOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110StrRChrOptD0Ev\", \"(anonymous namespace)::StrRChrOpt::~StrRChrOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrRChrOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrRChrOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrCmpOptD0Ev\", \"(anonymous namespace)::StrCmpOpt::~StrCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCmpOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrCmpOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110StrNCmpOptD0Ev\", \"(anonymous namespace)::StrNCmpOpt::~StrNCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCmpOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrNCmpOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrCpyOptD0Ev\", \"(anonymous namespace)::StrCpyOpt::~StrCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrCpyOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrCpyOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110StrNCpyOptD0Ev\", \"(anonymous namespace)::StrNCpyOpt::~StrNCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrNCpyOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrNCpyOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrLenOptD0Ev\", \"(anonymous namespace)::StrLenOpt::~StrLenOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrLenOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrLenOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110StrPBrkOptD0Ev\", \"(anonymous namespace)::StrPBrkOpt::~StrPBrkOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrPBrkOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrPBrkOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_18StrToOptD0Ev\", \"(anonymous namespace)::StrToOpt::~StrToOpt()\"},\n    {\"_ZN12_GLOBAL__N_18StrToOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrToOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrSpnOptD0Ev\", \"(anonymous namespace)::StrSpnOpt::~StrSpnOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrSpnOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrSpnOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110StrCSpnOptD0Ev\", \"(anonymous namespace)::StrCSpnOpt::~StrCSpnOpt()\"},\n    {\"_ZN12_GLOBAL__N_110StrCSpnOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrCSpnOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19StrStrOptD0Ev\", \"(anonymous namespace)::StrStrOpt::~StrStrOpt()\"},\n    {\"_ZN12_GLOBAL__N_19StrStrOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::StrStrOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19MemCmpOptD0Ev\", \"(anonymous namespace)::MemCmpOpt::~MemCmpOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemCmpOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::MemCmpOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOptD0Ev\", \"(anonymous namespace)::MemCpyOpt::~MemCpyOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::MemCpyOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110MemMoveOptD0Ev\", \"(anonymous namespace)::MemMoveOpt::~MemMoveOpt()\"},\n    {\"_ZN12_GLOBAL__N_110MemMoveOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::MemMoveOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19MemSetOptD0Ev\", \"(anonymous namespace)::MemSetOpt::~MemSetOpt()\"},\n    {\"_ZN12_GLOBAL__N_19MemSetOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::MemSetOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_16PowOptD0Ev\", \"(anonymous namespace)::PowOpt::~PowOpt()\"},\n    {\"_ZN12_GLOBAL__N_16PowOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::PowOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_17Exp2OptD0Ev\", \"(anonymous namespace)::Exp2Opt::~Exp2Opt()\"},\n    {\"_ZN12_GLOBAL__N_17Exp2Opt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::Exp2Opt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_116UnaryDoubleFPOptD0Ev\", \"(anonymous namespace)::UnaryDoubleFPOpt::~UnaryDoubleFPOpt()\"},\n    {\"_ZN12_GLOBAL__N_116UnaryDoubleFPOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::UnaryDoubleFPOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_16FFSOptD0Ev\", \"(anonymous namespace)::FFSOpt::~FFSOpt()\"},\n    {\"_ZN12_GLOBAL__N_16FFSOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::FFSOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_16AbsOptD0Ev\", \"(anonymous namespace)::AbsOpt::~AbsOpt()\"},\n    {\"_ZN12_GLOBAL__N_16AbsOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::AbsOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110IsDigitOptD0Ev\", \"(anonymous namespace)::IsDigitOpt::~IsDigitOpt()\"},\n    {\"_ZN12_GLOBAL__N_110IsDigitOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::IsDigitOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110IsAsciiOptD0Ev\", \"(anonymous namespace)::IsAsciiOpt::~IsAsciiOpt()\"},\n    {\"_ZN12_GLOBAL__N_110IsAsciiOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::IsAsciiOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110ToAsciiOptD0Ev\", \"(anonymous namespace)::ToAsciiOpt::~ToAsciiOpt()\"},\n    {\"_ZN12_GLOBAL__N_110ToAsciiOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::ToAsciiOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110SPrintFOptD0Ev\", \"(anonymous namespace)::SPrintFOpt::~SPrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_110SPrintFOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::SPrintFOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19PrintFOptD0Ev\", \"(anonymous namespace)::PrintFOpt::~PrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_19PrintFOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::PrintFOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_19FWriteOptD0Ev\", \"(anonymous namespace)::FWriteOpt::~FWriteOpt()\"},\n    {\"_ZN12_GLOBAL__N_19FWriteOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::FWriteOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_18FPutsOptD0Ev\", \"(anonymous namespace)::FPutsOpt::~FPutsOpt()\"},\n    {\"_ZN12_GLOBAL__N_18FPutsOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::FPutsOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_110FPrintFOptD0Ev\", \"(anonymous namespace)::FPrintFOpt::~FPrintFOpt()\"},\n    {\"_ZN12_GLOBAL__N_110FPrintFOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::FPrintFOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN12_GLOBAL__N_17PutsOptD0Ev\", \"(anonymous namespace)::PutsOpt::~PutsOpt()\"},\n    {\"_ZN12_GLOBAL__N_17PutsOpt13CallOptimizerEPN4llvm8FunctionEPNS1_8CallInstERNS1_9IRBuilderILb1ENS1_14ConstantFolderENS1_24IRBuilderDefaultInserterILb1EEEEE\", \"(anonymous namespace)::PutsOpt::CallOptimizer(llvm::Function*, llvm::CallInst*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_116SimplifyLibCallsEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::SimplifyLibCalls>()\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateGEPEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateGEP(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateLoadEPNS_5ValueEPKc\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateLoad(llvm::Value*, char const*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateICmpENS_7CmpInst9PredicateEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateICmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE26CreateConstInBoundsGEP1_64EPNS_5ValueEyRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateConstInBoundsGEP1_64(llvm::Value*, unsigned long long, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE12CreateSelectEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateSelect(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateFMulEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateFMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateFDivEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateFDiv(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateFCmpENS_7CmpInst9PredicateEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateFCmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE11CreateCall2EPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall2(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateCallEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateNegEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateNeg(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE11CreateStoreEPNS_5ValueES6_b\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateStore(llvm::Value*, llvm::Value*, bool)\"},\n    {\"_ZN4llvm26initializeTailCallElimPassERNS_12PassRegistryE\", \"llvm::initializeTailCallElimPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm29createTailCallEliminationPassEv\", \"llvm::createTailCallEliminationPass()\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElimD1Ev\", \"(anonymous namespace)::TailCallElim::~TailCallElim()\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElimD0Ev\", \"(anonymous namespace)::TailCallElim::~TailCallElim()\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElim13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::TailCallElim::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElim16FindTRECandidateEPN4llvm11InstructionEb\", \"(anonymous namespace)::TailCallElim::FindTRECandidate(llvm::Instruction*, bool)\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElim26EliminateRecursiveTailCallEPN4llvm8CallInstEPNS1_10ReturnInstERPNS1_10BasicBlockERbRNS1_11SmallVectorIPNS1_7PHINodeELj8EEEb\", \"(anonymous namespace)::TailCallElim::EliminateRecursiveTailCall(llvm::CallInst*, llvm::ReturnInst*, llvm::BasicBlock*&, bool&, llvm::SmallVector<llvm::PHINode*, 8u>&, bool)\"},\n    {\"_Z17isDynamicConstantPN4llvm5ValueEPNS_8CallInstEPNS_10ReturnInstE\", \"isDynamicConstant(llvm::Value*, llvm::CallInst*, llvm::ReturnInst*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112TailCallElimEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::TailCallElim>()\"},\n    {\"_ZN4llvm12InstCombiner24WillNotOverflowSignedAddEPNS_5ValueES2_\", \"llvm::InstCombiner::WillNotOverflowSignedAdd(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner8visitAddERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitAdd(llvm::BinaryOperator&)\"},\n    {\"_Z19dyn_castFoldableMulPN4llvm5ValueERPNS_11ConstantIntE\", \"dyn_castFoldableMul(llvm::Value*, llvm::ConstantInt*&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFAddERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitFAdd(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner13EmitGEPOffsetEPNS_4UserE\", \"llvm::InstCombiner::EmitGEPOffset(llvm::User*)\"},\n    {\"_ZN4llvm12InstCombiner25OptimizePointerDifferenceEPNS_5ValueES2_PKNS_4TypeE\", \"llvm::InstCombiner::OptimizePointerDifference(llvm::Value*, llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN4llvm12InstCombiner8visitSubERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitSub(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFSubERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitFSub(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE12CreateNSWAddEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateNSWAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm12PatternMatch15CastClass_matchINS1_INS0_7bind_tyINS_5ValueEEELj39EEELj30EE5matchIS3_EEbPT_\", \"bool llvm::PatternMatch::CastClass_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 39u>, 30u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_9neg_matchINS0_7bind_tyINS_5ValueEEEEES5_Lj12EE5matchINS_14BinaryOperatorEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::neg_match<llvm::PatternMatch::bind_ty<llvm::Value> >, llvm::PatternMatch::bind_ty<llvm::Value>, 12u>::match<llvm::BinaryOperator>(llvm::BinaryOperator*)\"},\n    {\"_ZN4llvm12PatternMatch9neg_matchINS0_7bind_tyINS_5ValueEEEE5matchIS3_EEbPT_\", \"bool llvm::PatternMatch::neg_match<llvm::PatternMatch::bind_ty<llvm::Value> >::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch9neg_matchINS0_7bind_tyINS_5ValueEEEE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::neg_match<llvm::PatternMatch::bind_ty<llvm::Value> >::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_7bind_tyINS_5ValueEEENS0_9neg_matchIS4_EELj12EE5matchINS_14BinaryOperatorEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::bind_ty<llvm::Value>, llvm::PatternMatch::neg_match<llvm::PatternMatch::bind_ty<llvm::Value> >, 12u>::match<llvm::BinaryOperator>(llvm::BinaryOperator*)\"},\n    {\"_ZN4llvm12InstCombiner8OptAndOpEPNS_11InstructionEPNS_11ConstantIntES4_RNS_14BinaryOperatorE\", \"llvm::InstCombiner::OptAndOp(llvm::Instruction*, llvm::ConstantInt*, llvm::ConstantInt*, llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner15InsertRangeTestEPNS_5ValueEPNS_8ConstantES4_bb\", \"llvm::InstCombiner::InsertRangeTest(llvm::Value*, llvm::Constant*, llvm::Constant*, bool, bool)\"},\n    {\"_ZN4llvm12InstCombiner18FoldLogicalPlusAndEPNS_5ValueES2_PNS_11ConstantIntEbRNS_11InstructionE\", \"llvm::InstCombiner::FoldLogicalPlusAnd(llvm::Value*, llvm::Value*, llvm::ConstantInt*, bool, llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombiner14FoldAndOfICmpsEPNS_8ICmpInstES2_\", \"llvm::InstCombiner::FoldAndOfICmps(llvm::ICmpInst*, llvm::ICmpInst*)\"},\n    {\"_Z12getICmpValuebjPN4llvm5ValueES1_PNS_9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEEE\", \"getICmpValue(bool, unsigned int, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>*)\"},\n    {\"_Z22foldLogOpOfMaskedICmpsPN4llvm8ICmpInstES1_NS_7CmpInst9PredicateEPNS_9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEEE\", \"foldLogOpOfMaskedICmps(llvm::ICmpInst*, llvm::ICmpInst*, llvm::CmpInst::Predicate, llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>*)\"},\n    {\"_ZN4llvm12InstCombiner14FoldAndOfFCmpsEPNS_8FCmpInstES2_\", \"llvm::InstCombiner::FoldAndOfFCmps(llvm::FCmpInst*, llvm::FCmpInst*)\"},\n    {\"_ZN4llvm12InstCombiner8visitAndERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitAnd(llvm::BinaryOperator&)\"},\n    {\"_Z14dyn_castNotValPN4llvm5ValueE\", \"dyn_castNotVal(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner10MatchBSwapERNS_14BinaryOperatorE\", \"llvm::InstCombiner::MatchBSwap(llvm::BinaryOperator&)\"},\n    {\"_Z17CollectBSwapPartsPN4llvm5ValueEijRNS_11SmallVectorIS1_Lj8EEE\", \"CollectBSwapParts(llvm::Value*, int, unsigned int, llvm::SmallVector<llvm::Value*, 8u>&)\"},\n    {\"_ZN4llvm12InstCombiner13FoldOrOfICmpsEPNS_8ICmpInstES2_\", \"llvm::InstCombiner::FoldOrOfICmps(llvm::ICmpInst*, llvm::ICmpInst*)\"},\n    {\"_ZN4llvm12InstCombiner13FoldOrOfFCmpsEPNS_8FCmpInstES2_\", \"llvm::InstCombiner::FoldOrOfFCmps(llvm::FCmpInst*, llvm::FCmpInst*)\"},\n    {\"_ZN4llvm12InstCombiner19FoldOrWithConstantsERNS_14BinaryOperatorEPNS_5ValueES4_S4_S4_\", \"llvm::InstCombiner::FoldOrWithConstants(llvm::BinaryOperator&, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner7visitOrERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitOr(llvm::BinaryOperator&)\"},\n    {\"_Z20MatchSelectFromAndOrPN4llvm5ValueES1_S1_S1_\", \"MatchSelectFromAndOr(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner8visitXorERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitXor(llvm::BinaryOperator&)\"},\n    {\"_Z19getTypeOfMaskedICmpPN4llvm5ValueES1_S1_NS_7CmpInst9PredicateE\", \"getTypeOfMaskedICmp(llvm::Value*, llvm::Value*, llvm::Value*, llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE8CreateOrEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateOr(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateNegEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateNeg(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE20CreateTruncOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateTruncOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_5ValueEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::Value*>::resize(unsigned int)\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_14specificval_tyEE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::not_match<llvm::PatternMatch::specificval_ty>::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_14BinaryOp_matchINS0_7bind_tyINS_5ValueEEES5_Lj23EEEE10matchIfNotEPS4_S8_\", \"llvm::PatternMatch::not_match<llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::bind_ty<llvm::Value>, llvm::PatternMatch::bind_ty<llvm::Value>, 23u> >::matchIfNot(llvm::Value*, llvm::Value*)\"},\n    {\"_ZNK4llvm12TargetFolder20CreateTruncOrBitCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::TargetFolder::CreateTruncOrBitCast(llvm::Constant*, llvm::Type const*) const\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_15CastClass_matchINS0_14specificval_tyELj32EEEE10matchIfNotEPNS_5ValueES7_\", \"llvm::PatternMatch::not_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::specificval_ty, 32u> >::matchIfNot(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm8APIntOps13isShiftedMaskEjRKNS_5APIntE\", \"llvm::APIntOps::isShiftedMask(unsigned int, llvm::APInt const&)\"},\n    {\"_ZN4llvm12InstCombiner19SimplifyMemTransferEPNS_12MemIntrinsicE\", \"llvm::InstCombiner::SimplifyMemTransfer(llvm::MemIntrinsic*)\"},\n    {\"_ZN4llvm12InstCombiner14SimplifyMemSetEPNS_10MemSetInstE\", \"llvm::InstCombiner::SimplifyMemSet(llvm::MemSetInst*)\"},\n    {\"_ZN4llvm12InstCombiner13visitCallInstERNS_8CallInstE\", \"llvm::InstCombiner::visitCallInst(llvm::CallInst&)\"},\n    {\"_ZN4llvm12InstCombiner13visitCallSiteENS_8CallSiteE\", \"llvm::InstCombiner::visitCallSite(llvm::CallSite)\"},\n    {\"_ZN4llvm12InstCombiner15visitInvokeInstERNS_10InvokeInstE\", \"llvm::InstCombiner::visitInvokeInst(llvm::InvokeInst&)\"},\n    {\"_ZN4llvm12InstCombiner15tryOptimizeCallEPNS_8CallInstEPKNS_10DataLayoutE\", \"llvm::InstCombiner::tryOptimizeCall(llvm::CallInst*, llvm::DataLayout const*)\"},\n    {\"_ZN12_GLOBAL__N_128InstCombineFortifiedLibCallsD1Ev\", \"(anonymous namespace)::InstCombineFortifiedLibCalls::~InstCombineFortifiedLibCalls()\"},\n    {\"_ZN4llvm12InstCombiner26transformConstExprCastCallENS_8CallSiteE\", \"llvm::InstCombiner::transformConstExprCastCall(llvm::CallSite)\"},\n    {\"_ZN4llvm12InstCombiner30transformCallThroughTrampolineENS_8CallSiteE\", \"llvm::InstCombiner::transformCallThroughTrampoline(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_128InstCombineFortifiedLibCalls11replaceCallEPN4llvm5ValueE\", \"(anonymous namespace)::InstCombineFortifiedLibCalls::replaceCall(llvm::Value*)\"},\n    {\"_ZNK12_GLOBAL__N_128InstCombineFortifiedLibCalls10isFoldableEjjb\", \"(anonymous namespace)::InstCombineFortifiedLibCalls::isFoldable(unsigned int, unsigned int, bool) const\"},\n    {\"_ZN12_GLOBAL__N_128InstCombineFortifiedLibCallsD0Ev\", \"(anonymous namespace)::InstCombineFortifiedLibCalls::~InstCombineFortifiedLibCalls()\"},\n    {\"_ZN4llvm12InstCombiner23PromoteCastOfAllocationERNS_11BitCastInstERNS_10AllocaInstE\", \"llvm::InstCombiner::PromoteCastOfAllocation(llvm::BitCastInst&, llvm::AllocaInst&)\"},\n    {\"_Z25DecomposeSimpleLinearExprPN4llvm5ValueERjRy\", \"DecomposeSimpleLinearExpr(llvm::Value*, unsigned int&, unsigned long long&)\"},\n    {\"_ZN4llvm12InstCombiner23EvaluateInDifferentTypeEPNS_5ValueEPKNS_4TypeEb\", \"llvm::InstCombiner::EvaluateInDifferentType(llvm::Value*, llvm::Type const*, bool)\"},\n    {\"_ZN4llvm12InstCombiner18ShouldOptimizeCastENS_11Instruction7CastOpsEPKNS_5ValueEPKNS_4TypeE\", \"llvm::InstCombiner::ShouldOptimizeCast(llvm::Instruction::CastOps, llvm::Value const*, llvm::Type const*)\"},\n    {\"_Z20isEliminableCastPairPKN4llvm8CastInstEjPKNS_4TypeEPNS_10DataLayoutE\", \"isEliminableCastPair(llvm::CastInst const*, unsigned int, llvm::Type const*, llvm::DataLayout*)\"},\n    {\"_ZN4llvm12InstCombiner20commonCastTransformsERNS_8CastInstE\", \"llvm::InstCombiner::commonCastTransforms(llvm::CastInst&)\"},\n    {\"_ZN4llvm12InstCombiner10visitTruncERNS_9TruncInstE\", \"llvm::InstCombiner::visitTrunc(llvm::TruncInst&)\"},\n    {\"_Z20CanEvaluateTruncatedPN4llvm5ValueEPKNS_4TypeE\", \"CanEvaluateTruncated(llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN4llvm12InstCombiner17transformZExtICmpEPNS_8ICmpInstERNS_11InstructionEb\", \"llvm::InstCombiner::transformZExtICmp(llvm::ICmpInst*, llvm::Instruction&, bool)\"},\n    {\"_ZN4llvm12InstCombiner9visitZExtERNS_8ZExtInstE\", \"llvm::InstCombiner::visitZExt(llvm::ZExtInst&)\"},\n    {\"_Z16CanEvaluateZExtdPN4llvm5ValueEPKNS_4TypeERj\", \"CanEvaluateZExtd(llvm::Value*, llvm::Type const*, unsigned int&)\"},\n    {\"_ZN4llvm12InstCombiner9visitSExtERNS_8SExtInstE\", \"llvm::InstCombiner::visitSExt(llvm::SExtInst&)\"},\n    {\"_Z16CanEvaluateSExtdPN4llvm5ValueEPKNS_4TypeE\", \"CanEvaluateSExtd(llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN4llvm12InstCombiner12visitFPTruncERNS_11FPTruncInstE\", \"llvm::InstCombiner::visitFPTrunc(llvm::FPTruncInst&)\"},\n    {\"_Z23LookThroughFPExtensionsPN4llvm5ValueE\", \"LookThroughFPExtensions(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner10visitFPExtERNS_8CastInstE\", \"llvm::InstCombiner::visitFPExt(llvm::CastInst&)\"},\n    {\"_ZN4llvm12InstCombiner11visitFPToUIERNS_10FPToUIInstE\", \"llvm::InstCombiner::visitFPToUI(llvm::FPToUIInst&)\"},\n    {\"_ZN4llvm12InstCombiner11visitFPToSIERNS_10FPToSIInstE\", \"llvm::InstCombiner::visitFPToSI(llvm::FPToSIInst&)\"},\n    {\"_ZN4llvm12InstCombiner11visitUIToFPERNS_8CastInstE\", \"llvm::InstCombiner::visitUIToFP(llvm::CastInst&)\"},\n    {\"_ZN4llvm12InstCombiner11visitSIToFPERNS_8CastInstE\", \"llvm::InstCombiner::visitSIToFP(llvm::CastInst&)\"},\n    {\"_ZN4llvm12InstCombiner13visitIntToPtrERNS_12IntToPtrInstE\", \"llvm::InstCombiner::visitIntToPtr(llvm::IntToPtrInst&)\"},\n    {\"_ZN4llvm12InstCombiner27commonPointerCastTransformsERNS_8CastInstE\", \"llvm::InstCombiner::commonPointerCastTransforms(llvm::CastInst&)\"},\n    {\"_ZN4llvm12InstCombiner13visitPtrToIntERNS_12PtrToIntInstE\", \"llvm::InstCombiner::visitPtrToInt(llvm::PtrToIntInst&)\"},\n    {\"_ZN4llvm12InstCombiner12visitBitCastERNS_11BitCastInstE\", \"llvm::InstCombiner::visitBitCast(llvm::BitCastInst&)\"},\n    {\"_Z24CollectInsertionElementsPN4llvm5ValueEjRNS_15SmallVectorImplIS1_EEPKNS_4TypeE\", \"CollectInsertionElements(llvm::Value*, unsigned int, llvm::SmallVectorImpl<llvm::Value*>&, llvm::Type const*)\"},\n    {\"_Z12FitsInFPTypePN4llvm10ConstantFPERKNS_12fltSemanticsE\", \"FitsInFPType(llvm::ConstantFP*, llvm::fltSemantics const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateAndEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateAnd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateLShrEPNS_5ValueES5_RKNS_5TwineEb\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateLShr(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateXorEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateXor(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateShlEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateShl(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateAShrEPNS_5ValueES5_RKNS_5TwineEb\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateAShr(llvm::Value*, llvm::Value*, llvm::Twine const&, bool)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateNotEPNS_5ValueERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateNot(llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE20CreateExtractElementEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateExtractElement(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm11SmallVectorIPNS_5ValueELj8EEC2EjRKS2_\", \"llvm::SmallVector<llvm::Value*, 8u>::SmallVector(unsigned int, llvm::Value* const&)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS1_INS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj30EEENS3_INS_11ConstantIntEEELj20EEES8_Lj22EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 30u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 20u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 22u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj30EEENS3_INS_11ConstantIntEEELj20EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 30u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 20u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj30EEENS3_INS_11ConstantIntEEELj20EE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 30u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 20u>::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_7bind_tyINS_5ValueEEEE5matchINS_14BinaryOperatorEEEbPT_\", \"bool llvm::PatternMatch::not_match<llvm::PatternMatch::bind_ty<llvm::Value> >::match<llvm::BinaryOperator>(llvm::BinaryOperator*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj31EEENS3_INS_11ConstantIntEEELj21EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 31u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 21u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE19CreateInsertElementEPNS_5ValueES5_S5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateInsertElement(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj41EEENS3_INS_11ConstantIntEEELj21EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 41u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 21u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj41EEENS3_INS_11ConstantIntEEELj21EE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 41u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 21u>::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch15CastClass_matchINS1_INS0_7bind_tyINS_5ValueEEELj41EEELj30EE5matchIS3_EEbPT_\", \"bool llvm::PatternMatch::CastClass_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 41u>, 30u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner28FoldCmpLoadFromIndexedGlobalEPNS_17GetElementPtrInstEPNS_14GlobalVariableERNS_7CmpInstEPNS_11ConstantIntE\", \"llvm::InstCombiner::FoldCmpLoadFromIndexedGlobal(llvm::GetElementPtrInst*, llvm::GlobalVariable*, llvm::CmpInst&, llvm::ConstantInt*)\"},\n    {\"_ZN4llvm12InstCombiner11FoldGEPICmpEPNS_11GEPOperatorEPNS_5ValueENS_7CmpInst9PredicateERNS_11InstructionE\", \"llvm::InstCombiner::FoldGEPICmp(llvm::GEPOperator*, llvm::Value*, llvm::CmpInst::Predicate, llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombiner16FoldICmpAddOpCstERNS_8ICmpInstEPNS_5ValueEPNS_11ConstantIntENS_7CmpInst9PredicateES4_\", \"llvm::InstCombiner::FoldICmpAddOpCst(llvm::ICmpInst&, llvm::Value*, llvm::ConstantInt*, llvm::CmpInst::Predicate, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner14FoldICmpDivCstERNS_8ICmpInstEPNS_14BinaryOperatorEPNS_11ConstantIntE\", \"llvm::InstCombiner::FoldICmpDivCst(llvm::ICmpInst&, llvm::BinaryOperator*, llvm::ConstantInt*)\"},\n    {\"_Z15AddWithOverflowRPN4llvm8ConstantES1_S1_b\", \"AddWithOverflow(llvm::Constant*&, llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm12InstCombiner30visitICmpInstWithInstAndIntCstERNS_8ICmpInstEPNS_11InstructionEPNS_11ConstantIntE\", \"llvm::InstCombiner::visitICmpInstWithInstAndIntCst(llvm::ICmpInst&, llvm::Instruction*, llvm::ConstantInt*)\"},\n    {\"_Z14isSignBitCheckN4llvm7CmpInst9PredicateEPNS_11ConstantIntERb\", \"isSignBitCheck(llvm::CmpInst::Predicate, llvm::ConstantInt*, bool&)\"},\n    {\"_ZN4llvm12InstCombiner28visitICmpInstWithCastAndCastERNS_8ICmpInstE\", \"llvm::InstCombiner::visitICmpInstWithCastAndCast(llvm::ICmpInst&)\"},\n    {\"_ZN4llvm12InstCombiner13visitICmpInstERNS_8ICmpInstE\", \"llvm::InstCombiner::visitICmpInst(llvm::ICmpInst&)\"},\n    {\"_Z38ComputeSignedMinMaxValuesFromKnownBitsRKN4llvm5APIntES2_RS0_S3_\", \"ComputeSignedMinMaxValuesFromKnownBits(llvm::APInt const&, llvm::APInt const&, llvm::APInt&, llvm::APInt&)\"},\n    {\"_Z16ProcessUAddIdiomRN4llvm11InstructionEPNS_5ValueERNS_12InstCombinerE\", \"ProcessUAddIdiom(llvm::Instruction&, llvm::Value*, llvm::InstCombiner&)\"},\n    {\"_ZN4llvm12InstCombiner20FoldFCmp_IntToFP_CstERNS_8FCmpInstEPNS_11InstructionEPNS_8ConstantE\", \"llvm::InstCombiner::FoldFCmp_IntToFP_Cst(llvm::FCmpInst&, llvm::Instruction*, llvm::Constant*)\"},\n    {\"_ZN4llvm12InstCombiner13visitFCmpInstERNS_8FCmpInstE\", \"llvm::InstCombiner::visitFCmpInst(llvm::FCmpInst&)\"},\n    {\"_Z14HasAddOverflowPN4llvm11ConstantIntES1_S1_b\", \"HasAddOverflow(llvm::ConstantInt*, llvm::ConstantInt*, llvm::ConstantInt*, bool)\"},\n    {\"_ZNK4llvm5APInt3sgtEy\", \"llvm::APInt::sgt(unsigned long long) const\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS1_INS0_7bind_tyINS_5ValueEEES4_Lj8EEENS2_INS_11ConstantIntEEELj8EE5matchIS3_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::bind_ty<llvm::Value>, llvm::PatternMatch::bind_ty<llvm::Value>, 8u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 8u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_15CastClass_matchINS0_7bind_tyINS_5ValueEEELj39EEES6_Lj24EE5matchINS_11InstructionEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 39u>, llvm::PatternMatch::CastClass_match<llvm::PatternMatch::bind_ty<llvm::Value>, 39u>, 24u>::match<llvm::Instruction>(llvm::Instruction*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE18CreateExtractValueEPNS_5ValueEjRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateExtractValue(llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm12InstCombiner15visitAllocaInstERNS_10AllocaInstE\", \"llvm::InstCombiner::visitAllocaInst(llvm::AllocaInst&)\"},\n    {\"_ZN4llvm12InstCombiner13visitLoadInstERNS_8LoadInstE\", \"llvm::InstCombiner::visitLoadInst(llvm::LoadInst&)\"},\n    {\"_Z19InstCombineLoadCastRN4llvm12InstCombinerERNS_8LoadInstEPKNS_10DataLayoutE\", \"InstCombineLoadCast(llvm::InstCombiner&, llvm::LoadInst&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm12InstCombiner20hasOneUsePlusDeclareEPNS_5ValueE\", \"llvm::InstCombiner::hasOneUsePlusDeclare(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner14visitStoreInstERNS_9StoreInstE\", \"llvm::InstCombiner::visitStoreInst(llvm::StoreInst&)\"},\n    {\"_Z22InstCombineStoreToCastRN4llvm12InstCombinerERNS_9StoreInstE\", \"InstCombineStoreToCast(llvm::InstCombiner&, llvm::StoreInst&)\"},\n    {\"_ZN4llvm12InstCombiner25SimplifyStoreAtEndOfBlockERNS_9StoreInstE\", \"llvm::InstCombiner::SimplifyStoreAtEndOfBlock(llvm::StoreInst&)\"},\n    {\"_ZN4llvm12InstCombiner8visitMulERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitMul(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFMulERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitFMul(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner22SimplifyDivRemOfSelectERNS_14BinaryOperatorE\", \"llvm::InstCombiner::SimplifyDivRemOfSelect(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner20commonIDivTransformsERNS_14BinaryOperatorE\", \"llvm::InstCombiner::commonIDivTransforms(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitUDivERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitUDiv(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitSDivERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitSDiv(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFDivERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitFDiv(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner19commonRemTransformsERNS_14BinaryOperatorE\", \"llvm::InstCombiner::commonRemTransforms(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner20commonIRemTransformsERNS_14BinaryOperatorE\", \"llvm::InstCombiner::commonIRemTransforms(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitURemERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitURem(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitSRemERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitSRem(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFRemERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitFRem(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateURemEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateURem(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateSRemEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateSRem(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateSubEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm19InstCombineWorklist8AddValueEPNS_5ValueE\", \"llvm::InstCombineWorklist::AddValue(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_11cst_pred_tyINS0_6is_oneEEENS0_7bind_tyINS_5ValueEEELj20EE5matchIS6_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_one>, llvm::PatternMatch::bind_ty<llvm::Value>, 20u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner22FoldPHIArgBinOpIntoPHIERNS_7PHINodeE\", \"llvm::InstCombiner::FoldPHIArgBinOpIntoPHI(llvm::PHINode&)\"},\n    {\"_ZN4llvm12InstCombiner20FoldPHIArgGEPIntoPHIERNS_7PHINodeE\", \"llvm::InstCombiner::FoldPHIArgGEPIntoPHI(llvm::PHINode&)\"},\n    {\"_ZN4llvm12InstCombiner21FoldPHIArgLoadIntoPHIERNS_7PHINodeE\", \"llvm::InstCombiner::FoldPHIArgLoadIntoPHI(llvm::PHINode&)\"},\n    {\"_Z29isSafeAndProfitableToSinkLoadPN4llvm8LoadInstE\", \"isSafeAndProfitableToSinkLoad(llvm::LoadInst*)\"},\n    {\"_ZN4llvm12InstCombiner19FoldPHIArgOpIntoPHIERNS_7PHINodeE\", \"llvm::InstCombiner::FoldPHIArgOpIntoPHI(llvm::PHINode&)\"},\n    {\"_ZN4llvm12InstCombiner24SliceUpIllegalIntegerPHIERNS_7PHINodeE\", \"llvm::InstCombiner::SliceUpIllegalIntegerPHI(llvm::PHINode&)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_114PHIUsageRecordEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::PHIUsageRecord>::push_back((anonymous namespace)::PHIUsageRecord const&)\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_116LoweredPHIRecordEPNS_7PHINodeENS_12DenseMapInfoIS2_EENS5_IS4_EEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::LoweredPHIRecord, llvm::PHINode*, llvm::DenseMapInfo<(anonymous namespace)::LoweredPHIRecord>, llvm::DenseMapInfo<llvm::PHINode*> >::operator[]((anonymous namespace)::LoweredPHIRecord const&)\"},\n    {\"_ZN4llvm12InstCombiner12visitPHINodeERNS_7PHINodeE\", \"llvm::InstCombiner::visitPHINode(llvm::PHINode&)\"},\n    {\"_Z14PHIsEqualValuePN4llvm7PHINodeEPNS_5ValueERNS_11SmallPtrSetIS1_Lj16EEE\", \"PHIsEqualValue(llvm::PHINode*, llvm::Value*, llvm::SmallPtrSet<llvm::PHINode*, 16u>&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_116LoweredPHIRecordEPNS_7PHINodeENS_12DenseMapInfoIS2_EENS5_IS4_EEE15LookupBucketForERKS2_RPSt4pairIS2_S4_E\", \"llvm::DenseMap<(anonymous namespace)::LoweredPHIRecord, llvm::PHINode*, llvm::DenseMapInfo<(anonymous namespace)::LoweredPHIRecord>, llvm::DenseMapInfo<llvm::PHINode*> >::LookupBucketFor((anonymous namespace)::LoweredPHIRecord const&, std::pair<(anonymous namespace)::LoweredPHIRecord, llvm::PHINode*>*&) const\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_114PHIUsageRecordEEEiPKvS4_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::PHIUsageRecord>(void const*, void const*)\"},\n    {\"_ZSt6__findIPPN4llvm7PHINodeES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"llvm::PHINode** std::__find<llvm::PHINode**, llvm::PHINode*>(llvm::PHINode**, llvm::PHINode**, llvm::PHINode* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm11SmallVectorIPNS_7PHINodeELj16EEC2EjRKS2_\", \"llvm::SmallVector<llvm::PHINode*, 16u>::SmallVector(unsigned int, llvm::PHINode* const&)\"},\n    {\"_ZN4llvm12InstCombiner14FoldSelectOpOpERNS_10SelectInstEPNS_11InstructionES4_\", \"llvm::InstCombiner::FoldSelectOpOp(llvm::SelectInst&, llvm::Instruction*, llvm::Instruction*)\"},\n    {\"_ZN4llvm12InstCombiner16FoldSelectIntoOpERNS_10SelectInstEPNS_5ValueES4_\", \"llvm::InstCombiner::FoldSelectIntoOp(llvm::SelectInst&, llvm::Value*, llvm::Value*)\"},\n    {\"_Z25GetSelectFoldableConstantPN4llvm11InstructionE\", \"GetSelectFoldableConstant(llvm::Instruction*)\"},\n    {\"_Z10isSelect01PN4llvm8ConstantES1_\", \"isSelect01(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12InstCombiner23visitSelectInstWithICmpERNS_10SelectInstEPNS_8ICmpInstE\", \"llvm::InstCombiner::visitSelectInstWithICmp(llvm::SelectInst&, llvm::ICmpInst*)\"},\n    {\"_ZN4llvm12InstCombiner12FoldSPFofSPFEPNS_11InstructionENS_19SelectPatternFlavorEPNS_5ValueES5_RS1_S3_S5_\", \"llvm::InstCombiner::FoldSPFofSPF(llvm::Instruction*, llvm::SelectPatternFlavor, llvm::Value*, llvm::Value*, llvm::Instruction&, llvm::SelectPatternFlavor, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner15visitSelectInstERNS_10SelectInstE\", \"llvm::InstCombiner::visitSelectInst(llvm::SelectInst&)\"},\n    {\"_ZN4llvm12InstCombiner21commonShiftTransformsERNS_14BinaryOperatorE\", \"llvm::InstCombiner::commonShiftTransforms(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner19FoldShiftByConstantEPNS_5ValueEPNS_11ConstantIntERNS_14BinaryOperatorE\", \"llvm::InstCombiner::FoldShiftByConstant(llvm::Value*, llvm::ConstantInt*, llvm::BinaryOperator&)\"},\n    {\"_Z18CanEvaluateShiftedPN4llvm5ValueEjbRNS_12InstCombinerE\", \"CanEvaluateShifted(llvm::Value*, unsigned int, bool, llvm::InstCombiner&)\"},\n    {\"_Z15GetShiftedValuePN4llvm5ValueEjbRNS_12InstCombinerE\", \"GetShiftedValue(llvm::Value*, unsigned int, bool, llvm::InstCombiner&)\"},\n    {\"_ZN4llvm12InstCombiner8visitShlERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitShl(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitLShrERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitLShr(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner9visitAShrERNS_14BinaryOperatorE\", \"llvm::InstCombiner::visitAShr(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_12BinOp2_matchINS0_7bind_tyINS_5ValueEEES5_Lj21ELj22EEENS3_INS_11ConstantIntEEELj23EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::BinOp2_match<llvm::PatternMatch::bind_ty<llvm::Value>, llvm::PatternMatch::bind_ty<llvm::Value>, 21u, 22u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 23u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_12BinOp2_matchINS0_7bind_tyINS_5ValueEEENS0_14specificval_tyELj21ELj22EEENS3_INS_11ConstantIntEEELj23EE5matchIS4_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::BinOp2_match<llvm::PatternMatch::bind_ty<llvm::Value>, llvm::PatternMatch::specificval_ty, 21u, 22u>, llvm::PatternMatch::bind_ty<llvm::ConstantInt>, 23u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner31SimplifyDemandedInstructionBitsERNS_11InstructionE\", \"llvm::InstCombiner::SimplifyDemandedInstructionBits(llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombiner23SimplifyDemandedUseBitsEPNS_5ValueENS_5APIntERS3_S4_j\", \"llvm::InstCombiner::SimplifyDemandedUseBits(llvm::Value*, llvm::APInt, llvm::APInt&, llvm::APInt&, unsigned int)\"},\n    {\"_ZN4llvm12InstCombiner20SimplifyDemandedBitsERNS_3UseENS_5APIntERS3_S4_j\", \"llvm::InstCombiner::SimplifyDemandedBits(llvm::Use&, llvm::APInt, llvm::APInt&, llvm::APInt&, unsigned int)\"},\n    {\"_Z22ShrinkDemandedConstantPN4llvm11InstructionEjNS_5APIntE\", \"ShrinkDemandedConstant(llvm::Instruction*, unsigned int, llvm::APInt)\"},\n    {\"_ZN4llvm12InstCombiner26SimplifyDemandedVectorEltsEPNS_5ValueENS_5APIntERS3_j\", \"llvm::InstCombiner::SimplifyDemandedVectorElts(llvm::Value*, llvm::APInt, llvm::APInt&, unsigned int)\"},\n    {\"_ZN4llvm12InstCombiner23visitExtractElementInstERNS_18ExtractElementInstE\", \"llvm::InstCombiner::visitExtractElementInst(llvm::ExtractElementInst&)\"},\n    {\"_Z17FindScalarElementPN4llvm5ValueEj\", \"FindScalarElement(llvm::Value*, unsigned int)\"},\n    {\"_Z16CheapToScalarizePN4llvm5ValueEb\", \"CheapToScalarize(llvm::Value*, bool)\"},\n    {\"_Z14getShuffleMaskPKN4llvm17ShuffleVectorInstE\", \"getShuffleMask(llvm::ShuffleVectorInst const*)\"},\n    {\"_ZN4llvm12InstCombiner22visitInsertElementInstERNS_17InsertElementInstE\", \"llvm::InstCombiner::visitInsertElementInst(llvm::InsertElementInst&)\"},\n    {\"_Z22CollectShuffleElementsPN4llvm5ValueERSt6vectorIPNS_8ConstantESaIS4_EERS1_\", \"CollectShuffleElements(llvm::Value*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >&, llvm::Value*&)\"},\n    {\"_ZN4llvm12InstCombiner22visitShuffleVectorInstERNS_17ShuffleVectorInstE\", \"llvm::InstCombiner::visitShuffleVectorInst(llvm::ShuffleVectorInst&)\"},\n    {\"_Z28CollectSingleShuffleElementsPN4llvm5ValueES1_S1_RSt6vectorIPNS_8ConstantESaIS4_EE\", \"CollectSingleShuffleElements(llvm::Value*, llvm::Value*, llvm::Value*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >&)\"},\n    {\"_ZN4llvm21initializeInstCombineERNS_12PassRegistryE\", \"llvm::initializeInstCombine(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm26initializeInstCombinerPassERNS_12PassRegistryE\", \"llvm::initializeInstCombinerPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm12InstCombiner16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::InstCombiner::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm12InstCombiner16ShouldChangeTypeEPKNS_4TypeES3_\", \"llvm::InstCombiner::ShouldChangeType(llvm::Type const*, llvm::Type const*) const\"},\n    {\"_ZN4llvm12InstCombiner32SimplifyAssociativeOrCommutativeERNS_14BinaryOperatorE\", \"llvm::InstCombiner::SimplifyAssociativeOrCommutative(llvm::BinaryOperator&)\"},\n    {\"_ZN4llvm12InstCombiner29SimplifyUsingDistributiveLawsERNS_14BinaryOperatorE\", \"llvm::InstCombiner::SimplifyUsingDistributiveLaws(llvm::BinaryOperator&)\"},\n    {\"_ZNK4llvm12InstCombiner14dyn_castNegValEPNS_5ValueE\", \"llvm::InstCombiner::dyn_castNegVal(llvm::Value*) const\"},\n    {\"_ZNK4llvm12InstCombiner15dyn_castFNegValEPNS_5ValueE\", \"llvm::InstCombiner::dyn_castFNegVal(llvm::Value*) const\"},\n    {\"_ZN4llvm12InstCombiner16FoldOpIntoSelectERNS_11InstructionEPNS_10SelectInstE\", \"llvm::InstCombiner::FoldOpIntoSelect(llvm::Instruction&, llvm::SelectInst*)\"},\n    {\"_Z30FoldOperationIntoSelectOperandRN4llvm11InstructionEPNS_5ValueEPNS_12InstCombinerE\", \"FoldOperationIntoSelectOperand(llvm::Instruction&, llvm::Value*, llvm::InstCombiner*)\"},\n    {\"_ZN4llvm12InstCombiner13FoldOpIntoPhiERNS_11InstructionE\", \"llvm::InstCombiner::FoldOpIntoPhi(llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombiner19FindElementAtOffsetEPKNS_4TypeExRNS_15SmallVectorImplIPNS_5ValueEEE\", \"llvm::InstCombiner::FindElementAtOffset(llvm::Type const*, long long, llvm::SmallVectorImpl<llvm::Value*>&)\"},\n    {\"_ZN4llvm12InstCombiner22visitGetElementPtrInstERNS_17GetElementPtrInstE\", \"llvm::InstCombiner::visitGetElementPtrInst(llvm::GetElementPtrInst&)\"},\n    {\"_ZN4llvm12InstCombiner11visitMallocERNS_11InstructionE\", \"llvm::InstCombiner::visitMalloc(llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombiner9visitFreeERNS_8CallInstE\", \"llvm::InstCombiner::visitFree(llvm::CallInst&)\"},\n    {\"_ZN4llvm12InstCombiner15visitBranchInstERNS_10BranchInstE\", \"llvm::InstCombiner::visitBranchInst(llvm::BranchInst&)\"},\n    {\"_ZN4llvm12InstCombiner15visitSwitchInstERNS_10SwitchInstE\", \"llvm::InstCombiner::visitSwitchInst(llvm::SwitchInst&)\"},\n    {\"_ZN4llvm12InstCombiner21visitExtractValueInstERNS_16ExtractValueInstE\", \"llvm::InstCombiner::visitExtractValueInst(llvm::ExtractValueInst&)\"},\n    {\"_ZN4llvm12InstCombiner14DoOneIterationERNS_8FunctionEj\", \"llvm::InstCombiner::DoOneIteration(llvm::Function&, unsigned int)\"},\n    {\"_ZN4llvm12InstCombiner13runOnFunctionERNS_8FunctionE\", \"llvm::InstCombiner::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm30createInstructionCombiningPassEv\", \"llvm::createInstructionCombiningPass()\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE11CreateBinOpENS_11Instruction9BinaryOpsEPNS_5ValueES7_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateBinOp(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm12InstCombiner19InsertNewInstBeforeEPNS_11InstructionERS1_\", \"llvm::InstCombiner::InsertNewInstBefore(llvm::Instruction*, llvm::Instruction&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE12CreateSelectEPNS_5ValueES5_S5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateSelect(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateICmpENS_7CmpInst9PredicateEPNS_5ValueES7_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateICmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateFCmpENS_7CmpInst9PredicateEPNS_5ValueES7_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateFCmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE10CreateCastENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm12InstCombiner19ReplaceInstUsesWithERNS_11InstructionEPNS_5ValueE\", \"llvm::InstCombiner::ReplaceInstUsesWith(llvm::Instruction&, llvm::Value*)\"},\n    {\"_ZN4llvm12InstCombiner21EraseInstFromFunctionERNS_11InstructionE\", \"llvm::InstCombiner::EraseInstFromFunction(llvm::Instruction&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE13CreateIntCastEPNS_5ValueEPKNS_4TypeEbRKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateIntCast(llvm::Value*, llvm::Type const*, bool, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateAddEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE17CreateInBoundsGEPIPPNS_5ValueEEES6_S6_T_S8_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateInBoundsGEP<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateGEPIPPNS_5ValueEEES6_S6_T_S8_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateGEP<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE9CreateMulEPNS_5ValueES5_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_21InstCombineIRInserterEE18CreateExtractValueIPKjEEPNS_5ValueES8_T_S9_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<true, llvm::TargetFolder, llvm::InstCombineIRInserter>::CreateExtractValue<unsigned int const*>(llvm::Value*, unsigned int const*, unsigned int const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm11InstVisitorINS_12InstCombinerEPNS_11InstructionEE5visitERS2_\", \"llvm::InstVisitor<llvm::InstCombiner, llvm::Instruction*>::visit(llvm::Instruction&)\"},\n    {\"_ZN4llvm19InstCombineWorklist18AddUsersToWorkListERNS_11InstructionE\", \"llvm::InstCombineWorklist::AddUsersToWorkList(llvm::Instruction&)\"},\n    {\"_ZN4llvm12InstCombinerD1Ev\", \"llvm::InstCombiner::~InstCombiner()\"},\n    {\"_ZN4llvm12InstCombinerD0Ev\", \"llvm::InstCombiner::~InstCombiner()\"},\n    {\"_ZNK4llvm21InstCombineIRInserter12InsertHelperEPNS_11InstructionERKNS_5TwineEPNS_10BasicBlockENS_14ilist_iteratorIS1_EE\", \"llvm::InstCombineIRInserter::InsertHelper(llvm::Instruction*, llvm::Twine const&, llvm::BasicBlock*, llvm::ilist_iterator<llvm::Instruction>) const\"},\n    {\"_ZN4llvm15InsertValueInstC2IPKjEEPNS_5ValueES5_T_S6_RKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertValueInst::InsertValueInst<unsigned int const*>(llvm::Value*, llvm::Value*, unsigned int const*, unsigned int const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm16ExtractValueInstC2IPKjEEPNS_5ValueET_S6_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ExtractValueInst::ExtractValueInst<unsigned int const*>(llvm::Value*, unsigned int const*, unsigned int const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_7bind_tyINS_5ValueEEEE5matchIS3_EEbPT_\", \"bool llvm::PatternMatch::not_match<llvm::PatternMatch::bind_ty<llvm::Value> >::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZNK4llvm12TargetFolder13CreateIntCastEPNS_8ConstantEPKNS_4TypeEb\", \"llvm::TargetFolder::CreateIntCast(llvm::Constant*, llvm::Type const*, bool) const\"},\n    {\"_ZN4llvm12InstCombinerC2Ev\", \"llvm::InstCombiner::InstCombiner()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, unsigned int, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm19InstCombineWorklist15AddInitialGroupEPKPNS_11InstructionEj\", \"llvm::InstCombineWorklist::AddInitialGroup(llvm::Instruction* const*, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEjNS_12DenseMapInfoIS2_EENS3_IjEEE6insertERKSt4pairIS2_jE\", \"llvm::DenseMap<llvm::Instruction*, unsigned int, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<unsigned int> >::insert(std::pair<llvm::Instruction*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::Instruction*, unsigned int, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Instruction* const&, unsigned int const&, std::pair<llvm::Instruction*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, unsigned int, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_12InstCombinerEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::InstCombiner>()\"},\n    {\"_ZNK4llvm11ExtAddrMode5printERNS_11raw_ostreamE\", \"llvm::ExtAddrMode::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm11ExtAddrMode4dumpEv\", \"llvm::ExtAddrMode::dump() const\"},\n    {\"_ZN4llvm21AddressingModeMatcher16MatchScaledValueEPNS_5ValueExj\", \"llvm::AddressingModeMatcher::MatchScaledValue(llvm::Value*, long long, unsigned int)\"},\n    {\"_ZN4llvm21AddressingModeMatcher9MatchAddrEPNS_5ValueEj\", \"llvm::AddressingModeMatcher::MatchAddr(llvm::Value*, unsigned int)\"},\n    {\"_ZN4llvm21AddressingModeMatcher18MatchOperationAddrEPNS_4UserEjj\", \"llvm::AddressingModeMatcher::MatchOperationAddr(llvm::User*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm21AddressingModeMatcher36IsProfitableToFoldIntoAddressingModeEPNS_11InstructionERNS_11ExtAddrModeES4_\", \"llvm::AddressingModeMatcher::IsProfitableToFoldIntoAddressingMode(llvm::Instruction*, llvm::ExtAddrMode&, llvm::ExtAddrMode&)\"},\n    {\"_ZN4llvm21AddressingModeMatcher22ValueAlreadyLiveAtInstEPNS_5ValueES2_S2_\", \"llvm::AddressingModeMatcher::ValueAlreadyLiveAtInst(llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_Z17FindAllMemoryUsesPN4llvm11InstructionERNS_15SmallVectorImplISt4pairIS1_jEEERNS_11SmallPtrSetIS1_Lj16EEERKNS_14TargetLoweringE\", \"FindAllMemoryUses(llvm::Instruction*, llvm::SmallVectorImpl<std::pair<llvm::Instruction*, unsigned int> >&, llvm::SmallPtrSet<llvm::Instruction*, 16u>&, llvm::TargetLowering const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_11InstructionEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::Instruction*>::resize(unsigned int)\"},\n    {\"_ZSt6__findIPPN4llvm11InstructionES2_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"llvm::Instruction** std::__find<llvm::Instruction**, llvm::Instruction*>(llvm::Instruction**, llvm::Instruction**, llvm::Instruction* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15DeleteDeadBlockEPNS_10BasicBlockE\", \"llvm::DeleteDeadBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm23FoldSingleEntryPHINodesEPNS_10BasicBlockEPNS_4PassE\", \"llvm::FoldSingleEntryPHINodes(llvm::BasicBlock*, llvm::Pass*)\"},\n    {\"_ZN4llvm14DeleteDeadPHIsEPNS_10BasicBlockE\", \"llvm::DeleteDeadPHIs(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm25MergeBlockIntoPredecessorEPNS_10BasicBlockEPNS_4PassE\", \"llvm::MergeBlockIntoPredecessor(llvm::BasicBlock*, llvm::Pass*)\"},\n    {\"_ZN4llvm20ReplaceInstWithValueERNS_6iplistINS_11InstructionENS_12ilist_traitsIS1_EEEERNS_14ilist_iteratorIS1_EEPNS_5ValueE\", \"llvm::ReplaceInstWithValue(llvm::iplist<llvm::Instruction, llvm::ilist_traits<llvm::Instruction> >&, llvm::ilist_iterator<llvm::Instruction>&, llvm::Value*)\"},\n    {\"_ZN4llvm19ReplaceInstWithInstERNS_6iplistINS_11InstructionENS_12ilist_traitsIS1_EEEERNS_14ilist_iteratorIS1_EEPS1_\", \"llvm::ReplaceInstWithInst(llvm::iplist<llvm::Instruction, llvm::ilist_traits<llvm::Instruction> >&, llvm::ilist_iterator<llvm::Instruction>&, llvm::Instruction*)\"},\n    {\"_ZN4llvm19ReplaceInstWithInstEPNS_11InstructionES1_\", \"llvm::ReplaceInstWithInst(llvm::Instruction*, llvm::Instruction*)\"},\n    {\"_ZN4llvm18GetSuccessorNumberEPNS_10BasicBlockES1_\", \"llvm::GetSuccessorNumber(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9SplitEdgeEPNS_10BasicBlockES1_PNS_4PassE\", \"llvm::SplitEdge(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Pass*)\"},\n    {\"_ZN4llvm10SplitBlockEPNS_10BasicBlockEPNS_11InstructionEPNS_4PassE\", \"llvm::SplitBlock(llvm::BasicBlock*, llvm::Instruction*, llvm::Pass*)\"},\n    {\"_ZN4llvm22SplitBlockPredecessorsEPNS_10BasicBlockEPKS1_jPKcPNS_4PassE\", \"llvm::SplitBlockPredecessors(llvm::BasicBlock*, llvm::BasicBlock* const*, unsigned int, char const*, llvm::Pass*)\"},\n    {\"_ZN4llvm21FindFunctionBackedgesERKNS_8FunctionERNS_15SmallVectorImplISt4pairIPKNS_10BasicBlockES7_EEE\", \"llvm::FindFunctionBackedges(llvm::Function const&, llvm::SmallVectorImpl<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >&)\"},\n    {\"_ZN4llvm26FoldReturnIntoUncondBranchEPNS_10ReturnInstEPNS_10BasicBlockES3_\", \"llvm::FoldReturnIntoUncondBranch(llvm::ReturnInst*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE19addBasicBlockToLoopEPS1_RNS_12LoopInfoBaseIS1_S2_EE\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::addBasicBlockToLoop(llvm::BasicBlock*, llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPKNS_10BasicBlockENS_12SuccIteratorIPKNS_14TerminatorInstES3_EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::BasicBlock const*, llvm::SuccIterator<llvm::TerminatorInst const*, llvm::BasicBlock const> >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_4LoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Loop*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Loop*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::Loop* const&, std::pair<llvm::BasicBlock*, llvm::Loop*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_4LoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Loop*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Loop*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE11removeBlockEPS1_\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::removeBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE19removeBlockFromLoopEPS1_\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::removeBlockFromLoop(llvm::BasicBlock*)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm10BasicBlockESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock*>(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, __gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::BasicBlock* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm32initializeBreakCriticalEdgesPassERNS_12PassRegistryE\", \"llvm::initializeBreakCriticalEdgesPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm28createBreakCriticalEdgesPassEv\", \"llvm::createBreakCriticalEdgesPass()\"},\n    {\"_ZN4llvm14isCriticalEdgeEPKNS_14TerminatorInstEjb\", \"llvm::isCriticalEdge(llvm::TerminatorInst const*, unsigned int, bool)\"},\n    {\"_ZN4llvm17SplitCriticalEdgeEPNS_14TerminatorInstEjPNS_4PassEb\", \"llvm::SplitCriticalEdge(llvm::TerminatorInst*, unsigned int, llvm::Pass*, bool)\"},\n    {\"_Z26CreatePHIsForSplitLoopExitRN4llvm15SmallVectorImplIPNS_10BasicBlockEEES2_S2_\", \"CreatePHIsForSplitLoopExit(llvm::SmallVectorImpl<llvm::BasicBlock*>&, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_118BreakCriticalEdgesD1Ev\", \"(anonymous namespace)::BreakCriticalEdges::~BreakCriticalEdges()\"},\n    {\"_ZN12_GLOBAL__N_118BreakCriticalEdgesD0Ev\", \"(anonymous namespace)::BreakCriticalEdges::~BreakCriticalEdges()\"},\n    {\"_ZNK12_GLOBAL__N_118BreakCriticalEdges16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::BreakCriticalEdges::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118BreakCriticalEdges13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::BreakCriticalEdges::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_118BreakCriticalEdgesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::BreakCriticalEdges>()\"},\n    {\"_ZN4llvm10CastToCStrEPNS_5ValueERNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEE\", \"llvm::CastToCStr(llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&)\"},\n    {\"_ZN4llvm10EmitStrLenEPNS_5ValueERNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitStrLen(llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm10EmitStrChrEPNS_5ValueEcRNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitStrChr(llvm::Value*, char, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm11EmitStrNCmpEPNS_5ValueES1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitStrNCmp(llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm10EmitStrCpyEPNS_5ValueES1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutENS_9StringRefE\", \"llvm::EmitStrCpy(llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*, llvm::StringRef)\"},\n    {\"_ZN4llvm11EmitStrNCpyEPNS_5ValueES1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutENS_9StringRefE\", \"llvm::EmitStrNCpy(llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*, llvm::StringRef)\"},\n    {\"_ZN4llvm13EmitMemCpyChkEPNS_5ValueES1_S1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitMemCpyChk(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm10EmitMemChrEPNS_5ValueES1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitMemChr(llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm10EmitMemCmpEPNS_5ValueES1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitMemCmp(llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm20EmitUnaryFloatFnCallEPNS_5ValueEPKcRNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEERKNS_11AttrListPtrE\", \"llvm::EmitUnaryFloatFnCall(llvm::Value*, char const*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm11EmitPutCharEPNS_5ValueERNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitPutChar(llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm8EmitPutSEPNS_5ValueERNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitPutS(llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm9EmitFPutCEPNS_5ValueES1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitFPutC(llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm9EmitFPutSEPNS_5ValueES1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitFPutS(llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm10EmitFWriteEPNS_5ValueES1_S1_RNS_9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEEEPKNS_10DataLayoutE\", \"llvm::EmitFWrite(llvm::Value*, llvm::Value*, llvm::Value*, llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm25SimplifyFortifiedLibCallsD0Ev\", \"llvm::SimplifyFortifiedLibCalls::~SimplifyFortifiedLibCalls()\"},\n    {\"_ZN4llvm25SimplifyFortifiedLibCallsD1Ev\", \"llvm::SimplifyFortifiedLibCalls::~SimplifyFortifiedLibCalls()\"},\n    {\"_ZN4llvm25SimplifyFortifiedLibCallsD2Ev\", \"llvm::SimplifyFortifiedLibCalls::~SimplifyFortifiedLibCalls()\"},\n    {\"_ZN4llvm25SimplifyFortifiedLibCalls4foldEPNS_8CallInstEPKNS_10DataLayoutE\", \"llvm::SimplifyFortifiedLibCalls::fold(llvm::CallInst*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE11CreateCall3EPNS_5ValueES6_S6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall3(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE11CreateCall4EPNS_5ValueES6_S6_S6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall4(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm15CloneBasicBlockEPKNS_10BasicBlockERNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS4_EENS_14ValueMapConfigIS6_EENS_12DenseMapInfoIS8_EEEERKNS_5TwineEPNS_8FunctionEPNS_14ClonedCodeInfoE\", \"llvm::CloneBasicBlock(llvm::BasicBlock const*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, llvm::Twine const&, llvm::Function*, llvm::ClonedCodeInfo*)\"},\n    {\"_ZN4llvm17CloneFunctionIntoEPNS_8FunctionEPKS0_RNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS5_EENS_14ValueMapConfigIS7_EENS_12DenseMapInfoIS9_EEEEbRNS_15SmallVectorImplIPNS_10ReturnInstEEEPKcPNS_14ClonedCodeInfoE\", \"llvm::CloneFunctionInto(llvm::Function*, llvm::Function const*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, bool, llvm::SmallVectorImpl<llvm::ReturnInst*>&, char const*, llvm::ClonedCodeInfo*)\"},\n    {\"_ZN4llvm13CloneFunctionEPKNS_8FunctionERNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS4_EENS_14ValueMapConfigIS6_EENS_12DenseMapInfoIS8_EEEEbPNS_14ClonedCodeInfoE\", \"llvm::CloneFunction(llvm::Function const*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, bool, llvm::ClonedCodeInfo*)\"},\n    {\"_ZN4llvm25CloneAndPruneFunctionIntoEPNS_8FunctionEPKS0_RNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS5_EENS_14ValueMapConfigIS7_EENS_12DenseMapInfoIS9_EEEEbRNS_15SmallVectorImplIPNS_10ReturnInstEEEPKcPNS_14ClonedCodeInfoEPKNS_10DataLayoutEPNS_11InstructionE\", \"llvm::CloneAndPruneFunctionInto(llvm::Function*, llvm::Function const*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, bool, llvm::SmallVectorImpl<llvm::ReturnInst*>&, char const*, llvm::ClonedCodeInfo*, llvm::DataLayout const*, llvm::Instruction*)\"},\n    {\"_Z19UpdateInlinedAtInfoRKN4llvm8DebugLocES2_RNS_11LLVMContextE\", \"UpdateInlinedAtInfo(llvm::DebugLoc const&, llvm::DebugLoc const&, llvm::LLVMContext&)\"},\n    {\"_ZNSt6vectorIPKN4llvm10BasicBlockESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::BasicBlock const**, std::vector<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> > >, llvm::BasicBlock const* const&)\"},\n    {\"_ZN4llvm16DemoteRegToStackERNS_11InstructionEbPS0_\", \"llvm::DemoteRegToStack(llvm::Instruction&, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm16DemotePHIToStackEPNS_7PHINodeEPNS_11InstructionE\", \"llvm::DemotePHIToStack(llvm::PHINode*, llvm::Instruction*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_5ValueEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Value*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Value*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Value*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock* const, llvm::Value*> >, std::pair<llvm::BasicBlock* const, llvm::Value*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_5ValueEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Value*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Value*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Value*> > >::_M_insert_unique(std::pair<llvm::BasicBlock* const, llvm::Value*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_5ValueEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Value*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Value*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Value*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock* const, llvm::Value*> >*)\"},\n    {\"_ZN4llvm14InlineFunctionEPNS_8CallInstERNS_18InlineFunctionInfoE\", \"llvm::InlineFunction(llvm::CallInst*, llvm::InlineFunctionInfo&)\"},\n    {\"_ZN4llvm14InlineFunctionENS_8CallSiteERNS_18InlineFunctionInfoE\", \"llvm::InlineFunction(llvm::CallSite, llvm::InlineFunctionInfo&)\"},\n    {\"_ZN4llvm14InlineFunctionEPNS_10InvokeInstERNS_18InlineFunctionInfoE\", \"llvm::InlineFunction(llvm::InvokeInst*, llvm::InlineFunctionInfo&)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm6WeakVHEPNS1_13CallGraphNodeEESaIS5_EE13_M_assign_auxIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEEEvT_SD_St20forward_iterator_tag\", \"void std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > >::_M_assign_aux<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::forward_iterator_tag)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm6WeakVHEPNS1_13CallGraphNodeEESaIS5_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEEESB_mT_SD_\", \"std::pair<llvm::WeakVH, llvm::CallGraphNode*>* std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > >::_M_allocate_and_copy<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > > >(unsigned long, __gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >)\"},\n    {\"_ZN4llvm19initializeLCSSAPassERNS_12PassRegistryE\", \"llvm::initializeLCSSAPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15createLCSSAPassEv\", \"llvm::createLCSSAPass()\"},\n    {\"_ZN12_GLOBAL__N_15LCSSAC1Ev\", \"(anonymous namespace)::LCSSA::LCSSA()\"},\n    {\"_ZN12_GLOBAL__N_15LCSSAD1Ev\", \"(anonymous namespace)::LCSSA::~LCSSA()\"},\n    {\"_ZN12_GLOBAL__N_15LCSSAD0Ev\", \"(anonymous namespace)::LCSSA::~LCSSA()\"},\n    {\"_ZNK12_GLOBAL__N_15LCSSA16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LCSSA::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK12_GLOBAL__N_15LCSSA14verifyAnalysisEv\", \"(anonymous namespace)::LCSSA::verifyAnalysis() const\"},\n    {\"_ZN12_GLOBAL__N_15LCSSA9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LCSSA::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIPNS_10BasicBlockEEEiPKvS4_\", \"int llvm::array_pod_sort_comparator<llvm::BasicBlock*>(void const*, void const*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_15LCSSAEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LCSSA>()\"},\n    {\"_ZN4llvm17PredIteratorCache11GetNumPredsEPNS_10BasicBlockE\", \"llvm::PredIteratorCache::GetNumPreds(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm22ConstantFoldTerminatorEPNS_10BasicBlockE\", \"llvm::ConstantFoldTerminator(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm26isInstructionTriviallyDeadEPNS_11InstructionE\", \"llvm::isInstructionTriviallyDead(llvm::Instruction*)\"},\n    {\"_ZN4llvm42RecursivelyDeleteTriviallyDeadInstructionsEPNS_5ValueE\", \"llvm::RecursivelyDeleteTriviallyDeadInstructions(llvm::Value*)\"},\n    {\"_ZN4llvm28RecursivelyDeleteDeadPHINodeEPNS_7PHINodeE\", \"llvm::RecursivelyDeleteDeadPHINode(llvm::PHINode*)\"},\n    {\"_ZN4llvm27SimplifyInstructionsInBlockEPNS_10BasicBlockEPKNS_10DataLayoutE\", \"llvm::SimplifyInstructionsInBlock(llvm::BasicBlock*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm28RemovePredecessorAndSimplifyEPNS_10BasicBlockES1_PNS_10DataLayoutE\", \"llvm::RemovePredecessorAndSimplify(llvm::BasicBlock*, llvm::BasicBlock*, llvm::DataLayout*)\"},\n    {\"_ZN4llvm27MergeBasicBlockIntoOnlyPredEPNS_10BasicBlockEPNS_4PassE\", \"llvm::MergeBasicBlockIntoOnlyPred(llvm::BasicBlock*, llvm::Pass*)\"},\n    {\"_ZN4llvm39TryToSimplifyUncondBranchFromEmptyBlockEPNS_10BasicBlockE\", \"llvm::TryToSimplifyUncondBranchFromEmptyBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm26EliminateDuplicatePHINodesEPNS_10BasicBlockE\", \"llvm::EliminateDuplicatePHINodes(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm26getOrEnforceKnownAlignmentEPNS_5ValueEjPKNS_10DataLayoutE\", \"llvm::getOrEnforceKnownAlignment(llvm::Value*, unsigned int, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm8DenseMapImPNS_7PHINodeENS_12DenseMapInfoImEENS3_IS2_EEE6insertERKSt4pairImS2_E\", \"llvm::DenseMap<unsigned long, llvm::PHINode*, llvm::DenseMapInfo<unsigned long>, llvm::DenseMapInfo<llvm::PHINode*> >::insert(std::pair<unsigned long, llvm::PHINode*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_7PHINodeES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::PHINode*, llvm::PHINode*, llvm::DenseMapInfo<llvm::PHINode*>, llvm::DenseMapInfo<llvm::PHINode*> >::InsertIntoBucket(llvm::PHINode* const&, llvm::PHINode* const&, std::pair<llvm::PHINode*, llvm::PHINode*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_7PHINodeES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::PHINode*, llvm::PHINode*, llvm::DenseMapInfo<llvm::PHINode*>, llvm::DenseMapInfo<llvm::PHINode*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapImPNS_7PHINodeENS_12DenseMapInfoImEENS3_IS2_EEE16InsertIntoBucketERKmRKS2_PSt4pairImS2_E\", \"llvm::DenseMap<unsigned long, llvm::PHINode*, llvm::DenseMapInfo<unsigned long>, llvm::DenseMapInfo<llvm::PHINode*> >::InsertIntoBucket(unsigned long const&, llvm::PHINode* const&, std::pair<unsigned long, llvm::PHINode*>*)\"},\n    {\"_ZN4llvm8DenseMapImPNS_7PHINodeENS_12DenseMapInfoImEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned long, llvm::PHINode*, llvm::DenseMapInfo<unsigned long>, llvm::DenseMapInfo<llvm::PHINode*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm11SmallPtrSetIPNS_10BasicBlockELj16EEC2INS_12PredIteratorIS1_NS_18value_use_iteratorINS_4UserEEEEEEET_SA_\", \"llvm::SmallPtrSet<llvm::BasicBlock*, 16u>::SmallPtrSet<llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >(llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >)\"},\n    {\"_ZN4llvm26initializeLoopSimplifyPassERNS_12PassRegistryE\", \"llvm::initializeLoopSimplifyPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm22createLoopSimplifyPassEv\", \"llvm::createLoopSimplifyPass()\"},\n    {\"_ZN12_GLOBAL__N_112LoopSimplifyD1Ev\", \"(anonymous namespace)::LoopSimplify::~LoopSimplify()\"},\n    {\"_ZN12_GLOBAL__N_112LoopSimplifyD0Ev\", \"(anonymous namespace)::LoopSimplify::~LoopSimplify()\"},\n    {\"_ZNK12_GLOBAL__N_112LoopSimplify16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LoopSimplify::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK12_GLOBAL__N_112LoopSimplify14verifyAnalysisEv\", \"(anonymous namespace)::LoopSimplify::verifyAnalysis() const\"},\n    {\"_ZN12_GLOBAL__N_112LoopSimplify9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::LoopSimplify::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZN12_GLOBAL__N_112LoopSimplify24PlaceSplitBlockCarefullyEPN4llvm10BasicBlockERNS1_15SmallVectorImplIS3_EEPNS1_4LoopE\", \"(anonymous namespace)::LoopSimplify::PlaceSplitBlockCarefully(llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::BasicBlock*>&, llvm::Loop*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_112LoopSimplifyEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LoopSimplify>()\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE15getNumBackEdgesEv\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getNumBackEdges() const\"},\n    {\"_ZN4llvm14SmallSetVectorIPNS_10BasicBlockELj8EEC2IPS2_EET_S6_\", \"llvm::SmallSetVector<llvm::BasicBlock*, 8u>::SmallSetVector<llvm::BasicBlock**>(llvm::BasicBlock**, llvm::BasicBlock**)\"},\n    {\"_ZN4llvm10UnrollLoopEPNS_4LoopEjPNS_8LoopInfoEPNS_13LPPassManagerE\", \"llvm::UnrollLoop(llvm::Loop*, unsigned int, llvm::LoopInfo*, llvm::LPPassManager*)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS2_EENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5beginEv\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >, llvm::TrackingVH<llvm::Value>, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > > >, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >::begin()\"},\n    {\"_ZNSt6vectorIPN4llvm7PHINodeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::PHINode*, std::allocator<llvm::PHINode*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::PHINode**, std::vector<llvm::PHINode*, std::allocator<llvm::PHINode*> > >, llvm::PHINode* const&)\"},\n    {\"_ZN4llvm25initializeLowerInvokePassERNS_12PassRegistryE\", \"llvm::initializeLowerInvokePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createLowerInvokePassEPKNS_14TargetLoweringE\", \"llvm::createLowerInvokePass(llvm::TargetLowering const*)\"},\n    {\"_ZN4llvm21createLowerInvokePassEPKNS_14TargetLoweringEb\", \"llvm::createLowerInvokePass(llvm::TargetLowering const*, bool)\"},\n    {\"_ZN12_GLOBAL__N_111LowerInvokeD1Ev\", \"(anonymous namespace)::LowerInvoke::~LowerInvoke()\"},\n    {\"_ZN12_GLOBAL__N_111LowerInvokeD0Ev\", \"(anonymous namespace)::LowerInvoke::~LowerInvoke()\"},\n    {\"_ZNK12_GLOBAL__N_111LowerInvoke16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LowerInvoke::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111LowerInvoke16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::LowerInvoke::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_111LowerInvoke13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::LowerInvoke::runOnFunction(llvm::Function&)\"},\n    {\"_Z16MarkBlocksLiveInPN4llvm10BasicBlockERSt3setIS1_St4lessIS1_ESaIS1_EE\", \"MarkBlocksLiveIn(llvm::BasicBlock*, std::set<llvm::BasicBlock*, std::less<llvm::BasicBlock*>, std::allocator<llvm::BasicBlock*> >&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111LowerInvokeEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LowerInvoke>()\"},\n    {\"_ZN4llvm17GetElementPtrInstC2IPPNS_5ValueEEES3_T_S5_jRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::GetElementPtrInst::GetElementPtrInst<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, unsigned int, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10InvokeInstES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::InvokeInst*, llvm::InvokeInst*, std::_Identity<llvm::InvokeInst*>, std::less<llvm::InvokeInst*>, std::allocator<llvm::InvokeInst*> >::_M_erase(std::_Rb_tree_node<llvm::InvokeInst*>*)\"},\n    {\"_ZN4llvm25initializeLowerSwitchPassERNS_12PassRegistryE\", \"llvm::initializeLowerSwitchPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createLowerSwitchPassEv\", \"llvm::createLowerSwitchPass()\"},\n    {\"_ZlsRN4llvm11raw_ostreamERKSt6vectorIN12_GLOBAL__N_111LowerSwitch9CaseRangeESaIS5_EE\", \"operator<<(llvm::raw_ostream&, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > const&)\"},\n    {\"_ZN12_GLOBAL__N_111LowerSwitchD1Ev\", \"(anonymous namespace)::LowerSwitch::~LowerSwitch()\"},\n    {\"_ZN12_GLOBAL__N_111LowerSwitchD0Ev\", \"(anonymous namespace)::LowerSwitch::~LowerSwitch()\"},\n    {\"_ZNK12_GLOBAL__N_111LowerSwitch16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::LowerSwitch::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111LowerSwitch13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::LowerSwitch::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_111LowerSwitch13switchConvertEN9__gnu_cxx17__normal_iteratorIPNS0_9CaseRangeESt6vectorIS3_SaIS3_EEEES8_PN4llvm5ValueEPNS9_10BasicBlockESD_\", \"(anonymous namespace)::LowerSwitch::switchConvert(__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111LowerSwitch9CaseRangeESt6vectorIS4_SaIS4_EEEElNS2_7CaseCmpEEvT_SB_T0_T1_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, long, (anonymous namespace)::CaseCmp>(__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, long, (anonymous namespace)::CaseCmp)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111LowerSwitch9CaseRangeESt6vectorIS4_SaIS4_EEEENS2_7CaseCmpEEvT_SB_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, (anonymous namespace)::CaseCmp>(__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, (anonymous namespace)::CaseCmp)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_111LowerSwitch9CaseRangeESt6vectorIS4_SaIS4_EEEElS4_NS2_7CaseCmpEEvT_T0_SC_T1_T2_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, long, (anonymous namespace)::LowerSwitch::CaseRange, (anonymous namespace)::CaseCmp>(__gnu_cxx::__normal_iterator<(anonymous namespace)::LowerSwitch::CaseRange*, std::vector<(anonymous namespace)::LowerSwitch::CaseRange, std::allocator<(anonymous namespace)::LowerSwitch::CaseRange> > >, long, long, (anonymous namespace)::LowerSwitch::CaseRange, (anonymous namespace)::CaseCmp)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111LowerSwitchEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::LowerSwitch>()\"},\n    {\"_ZN4llvm18isAllocaPromotableEPKNS_10AllocaInstE\", \"llvm::isAllocaPromotable(llvm::AllocaInst const*)\"},\n    {\"_ZN4llvm15PromoteMemToRegERKSt6vectorIPNS_10AllocaInstESaIS2_EERNS_13DominatorTreeEPNS_15AliasSetTrackerE\", \"llvm::PromoteMemToReg(std::vector<llvm::AllocaInst*, std::allocator<llvm::AllocaInst*> > const&, llvm::DominatorTree&, llvm::AliasSetTracker*)\"},\n    {\"_ZN12_GLOBAL__N_114PromoteMem2Reg3runEv\", \"(anonymous namespace)::PromoteMem2Reg::run()\"},\n    {\"_ZN12_GLOBAL__N_114PromoteMem2Reg31ConvertDebugDeclareToDebugValueEPN4llvm14DbgDeclareInstEPNS1_9StoreInstE\", \"(anonymous namespace)::PromoteMem2Reg::ConvertDebugDeclareToDebugValue(llvm::DbgDeclareInst*, llvm::StoreInst*)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_114RenamePassDataESaIS1_EE9push_backERKS1_\", \"std::vector<(anonymous namespace)::RenamePassData, std::allocator<(anonymous namespace)::RenamePassData> >::push_back((anonymous namespace)::RenamePassData const&)\"},\n    {\"_ZN12_GLOBAL__N_114PromoteMem2Reg11getNumPredsEPKN4llvm10BasicBlockE\", \"(anonymous namespace)::PromoteMem2Reg::getNumPreds(llvm::BasicBlock const*)\"},\n    {\"_ZN12_GLOBAL__N_114LargeBlockInfo19getInstructionIndexEPKN4llvm11InstructionE\", \"(anonymous namespace)::LargeBlockInfo::getInstructionIndex(llvm::Instruction const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_14DbgDeclareInstEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::DbgDeclareInst*>::resize(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockEjEPNS_7PHINodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE5clearEv\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::PHINode*> >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockEjEPNS_7PHINodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE16shrink_and_clearEv\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::PHINode*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_7PHINodeEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::PHINode*, unsigned int, llvm::DenseMapInfo<llvm::PHINode*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::PHINode* const&, unsigned int const&, std::pair<llvm::PHINode*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_7PHINodeEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::PHINode*, unsigned int, llvm::DenseMapInfo<llvm::PHINode*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionEjNS_12DenseMapInfoIS3_EENS4_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction const*, unsigned int, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockEjEPNS_7PHINodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE16FindAndConstructERKS4_\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::PHINode*> >::FindAndConstruct(std::pair<llvm::BasicBlock*, unsigned int> const&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockEjEPNS_7PHINodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE16InsertIntoBucketERKS4_RKS6_PS1_IS4_S6_E\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::PHINode*> >::InsertIntoBucket(std::pair<llvm::BasicBlock*, unsigned int> const&, llvm::PHINode* const&, std::pair<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_10BasicBlockEjEPNS_7PHINodeENS_12DenseMapInfoIS4_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<std::pair<llvm::BasicBlock*, unsigned int>, llvm::PHINode*, llvm::DenseMapInfo<std::pair<llvm::BasicBlock*, unsigned int> >, llvm::DenseMapInfo<llvm::PHINode*> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIjPN4llvm10BasicBlockEElEvT_S6_T0_\", \"void std::__introsort_loop<std::pair<unsigned int, llvm::BasicBlock*>*, long>(std::pair<unsigned int, llvm::BasicBlock*>*, std::pair<unsigned int, llvm::BasicBlock*>*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPSt4pairIjPN4llvm10BasicBlockEEEvT_S6_\", \"void std::__final_insertion_sort<std::pair<unsigned int, llvm::BasicBlock*>*>(std::pair<unsigned int, llvm::BasicBlock*>*, std::pair<unsigned int, llvm::BasicBlock*>*)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIjPN4llvm10BasicBlockEEEvT_S6_\", \"void std::__insertion_sort<std::pair<unsigned int, llvm::BasicBlock*>*>(std::pair<unsigned int, llvm::BasicBlock*>*, std::pair<unsigned int, llvm::BasicBlock*>*)\"},\n    {\"_ZSt13__heap_selectIPSt4pairIjPN4llvm10BasicBlockEEEvT_S6_S6_\", \"void std::__heap_select<std::pair<unsigned int, llvm::BasicBlock*>*>(std::pair<unsigned int, llvm::BasicBlock*>*, std::pair<unsigned int, llvm::BasicBlock*>*, std::pair<unsigned int, llvm::BasicBlock*>*)\"},\n    {\"_ZSt13__adjust_heapIPSt4pairIjPN4llvm10BasicBlockEElS4_EvT_T0_S7_T1_\", \"void std::__adjust_heap<std::pair<unsigned int, llvm::BasicBlock*>*, long, std::pair<unsigned int, llvm::BasicBlock*> >(std::pair<unsigned int, llvm::BasicBlock*>*, long, long, std::pair<unsigned int, llvm::BasicBlock*>)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEjEEaSERKS7_\", \"llvm::SmallVectorImpl<std::pair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, unsigned int> >::operator=(llvm::SmallVectorImpl<std::pair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, unsigned int> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10AllocaInstEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::AllocaInst*, unsigned int, llvm::DenseMapInfo<llvm::AllocaInst*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::AllocaInst* const&, unsigned int const&, std::pair<llvm::AllocaInst*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10AllocaInstEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::AllocaInst*, unsigned int, llvm::DenseMapInfo<llvm::AllocaInst*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE16InsertIntoBucketERKS4_RKjPSt4pairIS4_jE\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::BasicBlock>*, unsigned int, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::BasicBlock>*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::DomTreeNodeBase<llvm::BasicBlock>* const&, unsigned int const&, std::pair<llvm::DomTreeNodeBase<llvm::BasicBlock>*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_15DomTreeNodeBaseINS_10BasicBlockEEEjNS_12DenseMapInfoIS4_EENS5_IjEEE4growEj\", \"llvm::DenseMap<llvm::DomTreeNodeBase<llvm::BasicBlock>*, unsigned int, llvm::DenseMapInfo<llvm::DomTreeNodeBase<llvm::BasicBlock>*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIjPN4llvm9StoreInstEElEvT_S6_T0_\", \"void std::__introsort_loop<std::pair<unsigned int, llvm::StoreInst*>*, long>(std::pair<unsigned int, llvm::StoreInst*>*, std::pair<unsigned int, llvm::StoreInst*>*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPSt4pairIjPN4llvm9StoreInstEEEvT_S6_\", \"void std::__final_insertion_sort<std::pair<unsigned int, llvm::StoreInst*>*>(std::pair<unsigned int, llvm::StoreInst*>*, std::pair<unsigned int, llvm::StoreInst*>*)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIjPN4llvm9StoreInstEEEvT_S6_\", \"void std::__insertion_sort<std::pair<unsigned int, llvm::StoreInst*>*>(std::pair<unsigned int, llvm::StoreInst*>*, std::pair<unsigned int, llvm::StoreInst*>*)\"},\n    {\"_ZSt13__heap_selectIPSt4pairIjPN4llvm9StoreInstEEEvT_S6_S6_\", \"void std::__heap_select<std::pair<unsigned int, llvm::StoreInst*>*>(std::pair<unsigned int, llvm::StoreInst*>*, std::pair<unsigned int, llvm::StoreInst*>*, std::pair<unsigned int, llvm::StoreInst*>*)\"},\n    {\"_ZSt13__adjust_heapIPSt4pairIjPN4llvm9StoreInstEElS4_EvT_T0_S7_T1_\", \"void std::__adjust_heap<std::pair<unsigned int, llvm::StoreInst*>*, long, std::pair<unsigned int, llvm::StoreInst*> >(std::pair<unsigned int, llvm::StoreInst*>*, long, long, std::pair<unsigned int, llvm::StoreInst*>)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::Instruction const*, unsigned int, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Instruction const* const&, unsigned int const&, std::pair<llvm::Instruction const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::Instruction const*, unsigned int, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm10SSAUpdaterC1EPNS_15SmallVectorImplIPNS_7PHINodeEEE\", \"llvm::SSAUpdater::SSAUpdater(llvm::SmallVectorImpl<llvm::PHINode*>*)\"},\n    {\"_ZN4llvm10SSAUpdaterC2EPNS_15SmallVectorImplIPNS_7PHINodeEEE\", \"llvm::SSAUpdater::SSAUpdater(llvm::SmallVectorImpl<llvm::PHINode*>*)\"},\n    {\"_ZN4llvm10SSAUpdaterD1Ev\", \"llvm::SSAUpdater::~SSAUpdater()\"},\n    {\"_ZN4llvm10SSAUpdaterD2Ev\", \"llvm::SSAUpdater::~SSAUpdater()\"},\n    {\"_ZN4llvm10SSAUpdater10InitializeEPKNS_4TypeENS_9StringRefE\", \"llvm::SSAUpdater::Initialize(llvm::Type const*, llvm::StringRef)\"},\n    {\"_ZNK4llvm10SSAUpdater16HasValueForBlockEPNS_10BasicBlockE\", \"llvm::SSAUpdater::HasValueForBlock(llvm::BasicBlock*) const\"},\n    {\"_ZN4llvm10SSAUpdater17AddAvailableValueEPNS_10BasicBlockEPNS_5ValueE\", \"llvm::SSAUpdater::AddAvailableValue(llvm::BasicBlock*, llvm::Value*)\"},\n    {\"_ZN4llvm10SSAUpdater20GetValueAtEndOfBlockEPNS_10BasicBlockE\", \"llvm::SSAUpdater::GetValueAtEndOfBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SSAUpdater28GetValueAtEndOfBlockInternalEPNS_10BasicBlockE\", \"llvm::SSAUpdater::GetValueAtEndOfBlockInternal(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SSAUpdater23GetValueInMiddleOfBlockEPNS_10BasicBlockE\", \"llvm::SSAUpdater::GetValueInMiddleOfBlock(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SSAUpdater10RewriteUseERNS_3UseE\", \"llvm::SSAUpdater::RewriteUse(llvm::Use&)\"},\n    {\"_ZN4llvm10SSAUpdater25RewriteUseAfterInsertionsERNS_3UseE\", \"llvm::SSAUpdater::RewriteUseAfterInsertions(llvm::Use&)\"},\n    {\"_ZN4llvm20LoadAndStorePromoterC1ERKNS_15SmallVectorImplIPNS_11InstructionEEERNS_10SSAUpdaterENS_9StringRefE\", \"llvm::LoadAndStorePromoter::LoadAndStorePromoter(llvm::SmallVectorImpl<llvm::Instruction*> const&, llvm::SSAUpdater&, llvm::StringRef)\"},\n    {\"_ZN4llvm20LoadAndStorePromoterC2ERKNS_15SmallVectorImplIPNS_11InstructionEEERNS_10SSAUpdaterENS_9StringRefE\", \"llvm::LoadAndStorePromoter::LoadAndStorePromoter(llvm::SmallVectorImpl<llvm::Instruction*> const&, llvm::SSAUpdater&, llvm::StringRef)\"},\n    {\"_ZNK4llvm20LoadAndStorePromoter3runERKNS_15SmallVectorImplIPNS_11InstructionEEE\", \"llvm::LoadAndStorePromoter::run(llvm::SmallVectorImpl<llvm::Instruction*> const&) const\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE8GetValueEPNS_10BasicBlockE\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::GetValue(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm20LoadAndStorePromoterD1Ev\", \"llvm::LoadAndStorePromoter::~LoadAndStorePromoter()\"},\n    {\"_ZN4llvm20LoadAndStorePromoterD0Ev\", \"llvm::LoadAndStorePromoter::~LoadAndStorePromoter()\"},\n    {\"_ZNK4llvm20LoadAndStorePromoter12isInstInListEPNS_11InstructionERKNS_15SmallVectorImplIS2_EE\", \"llvm::LoadAndStorePromoter::isInstInList(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Instruction*> const&) const\"},\n    {\"_ZNK4llvm20LoadAndStorePromoter34doExtraRewritesBeforeFinalDeletionEv\", \"llvm::LoadAndStorePromoter::doExtraRewritesBeforeFinalDeletion() const\"},\n    {\"_ZNK4llvm20LoadAndStorePromoter20replaceLoadWithValueEPNS_8LoadInstEPNS_5ValueE\", \"llvm::LoadAndStorePromoter::replaceLoadWithValue(llvm::LoadInst*, llvm::Value*) const\"},\n    {\"_ZNK4llvm20LoadAndStorePromoter18instructionDeletedEPNS_11InstructionE\", \"llvm::LoadAndStorePromoter::instructionDeleted(llvm::Instruction*) const\"},\n    {\"_ZNSt6vectorIPN4llvm11InstructionESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Instruction**, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > >, llvm::Instruction* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockESt6vectorIPNS_11InstructionESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::BasicBlock*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > > >::FindAndConstruct(llvm::BasicBlock* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockESt6vectorIPNS_11InstructionESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<llvm::BasicBlock*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > > >::InsertIntoBucket(llvm::BasicBlock* const&, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > const&, std::pair<llvm::BasicBlock*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockESt6vectorIPNS_11InstructionESaIS5_EENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> >, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<std::vector<llvm::Instruction*, std::allocator<llvm::Instruction*> > > >::grow(unsigned int)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE14BuildBlockListEPNS_10BasicBlockEPNS_15SmallVectorImplIPNS2_6BBInfoEEE\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BuildBlockList(llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE14FindDominatorsEPNS_15SmallVectorImplIPNS2_6BBInfoEEES5_\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::FindDominators(llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*>*, llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE17FindAvailableValsEPNS_15SmallVectorImplIPNS2_6BBInfoEEE\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::FindAvailableVals(llvm::SmallVectorImpl<llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_14SSAUpdaterImplINS_10SSAUpdaterEE6BBInfoENS_12DenseMapInfoIS2_EENS8_IS7_EEE16InsertIntoBucketERKS2_RKS7_PSt4pairIS2_S7_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo* const&, std::pair<llvm::BasicBlock*, llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_14SSAUpdaterImplINS_10SSAUpdaterEE6BBInfoENS_12DenseMapInfoIS2_EENS8_IS7_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::SSAUpdaterImpl<llvm::SSAUpdater>::BBInfo*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE17CheckIfPHIMatchesEPNS_7PHINodeE\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::CheckIfPHIMatches(llvm::PHINode*)\"},\n    {\"_ZN4llvm14SSAUpdaterImplINS_10SSAUpdaterEE17RecordMatchingPHIEPNS_7PHINodeE\", \"llvm::SSAUpdaterImpl<llvm::SSAUpdater>::RecordMatchingPHI(llvm::PHINode*)\"},\n    {\"_ZN4llvm16SSAUpdaterTraitsINS_10SSAUpdaterEE21FindPredecessorBlocksEPNS_10BasicBlockEPNS_15SmallVectorImplIS4_EE\", \"llvm::SSAUpdaterTraits<llvm::SSAUpdater>::FindPredecessorBlocks(llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::BasicBlock*>*)\"},\n    {\"_ZN4llvm22FoldBranchToCommonDestEPNS_10BranchInstE\", \"llvm::FoldBranchToCommonDest(llvm::BranchInst*)\"},\n    {\"_Z22SafeToMergeTerminatorsPN4llvm14TerminatorInstES1_\", \"SafeToMergeTerminators(llvm::TerminatorInst*, llvm::TerminatorInst*)\"},\n    {\"_ZN4llvm11SimplifyCFGEPNS_10BasicBlockEPKNS_10DataLayoutE\", \"llvm::SimplifyCFG(llvm::BasicBlock*, llvm::DataLayout const*)\"},\n    {\"_ZN12_GLOBAL__N_114SimplifyCFGOpt3runEPN4llvm10BasicBlockE\", \"(anonymous namespace)::SimplifyCFGOpt::run(llvm::BasicBlock*)\"},\n    {\"_Z29EraseTerminatorInstAndDCECondPN4llvm14TerminatorInstE\", \"EraseTerminatorInstAndDCECond(llvm::TerminatorInst*)\"},\n    {\"_ZN12_GLOBAL__N_114SimplifyCFGOpt25isValueEqualityComparisonEPN4llvm14TerminatorInstE\", \"(anonymous namespace)::SimplifyCFGOpt::isValueEqualityComparison(llvm::TerminatorInst*)\"},\n    {\"_ZN12_GLOBAL__N_114SimplifyCFGOpt45SimplifyEqualityComparisonWithOnlyPredecessorEPN4llvm14TerminatorInstEPNS1_10BasicBlockE\", \"(anonymous namespace)::SimplifyCFGOpt::SimplifyEqualityComparisonWithOnlyPredecessor(llvm::TerminatorInst*, llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_114SimplifyCFGOpt35FoldValueComparisonIntoPredecessorsEPN4llvm14TerminatorInstE\", \"(anonymous namespace)::SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(llvm::TerminatorInst*)\"},\n    {\"_Z24ConstantIntSortPredicatePKvS0_\", \"ConstantIntSortPredicate(void const*, void const*)\"},\n    {\"_ZN12_GLOBAL__N_114SimplifyCFGOpt31GetValueEqualityComparisonCasesEPN4llvm14TerminatorInstERSt6vectorISt4pairIPNS1_11ConstantIntEPNS1_10BasicBlockEESaISA_EE\", \"(anonymous namespace)::SimplifyCFGOpt::GetValueEqualityComparisonCases(llvm::TerminatorInst*, std::vector<std::pair<llvm::ConstantInt*, llvm::BasicBlock*>, std::allocator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*> > >&)\"},\n    {\"_ZNSt3setIPN4llvm11ConstantIntEN12_GLOBAL__N_119ConstantIntOrderingESaIS2_EE6insertERKS2_\", \"std::set<llvm::ConstantInt*, (anonymous namespace)::ConstantIntOrdering, std::allocator<llvm::ConstantInt*> >::insert(llvm::ConstantInt* const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm11ConstantIntES2_St9_IdentityIS2_EN12_GLOBAL__N_119ConstantIntOrderingESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::ConstantInt*, llvm::ConstantInt*, std::_Identity<llvm::ConstantInt*>, (anonymous namespace)::ConstantIntOrdering, std::allocator<llvm::ConstantInt*> >::_M_erase(std::_Rb_tree_node<llvm::ConstantInt*>*)\"},\n    {\"_Z14GetConstantIntPN4llvm5ValueEPKNS_10DataLayoutE\", \"GetConstantInt(llvm::Value*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIPNS_11ConstantIntEPNS_10BasicBlockEEEEiPKvS8_\", \"int llvm::array_pod_sort_comparator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*> >(void const*, void const*)\"},\n    {\"_Z22SpeculativelyExecuteBBPN4llvm10BranchInstEPNS_10BasicBlockE\", \"SpeculativelyExecuteBB(llvm::BranchInst*, llvm::BasicBlock*)\"},\n    {\"_Z19FoldCondBranchOnPHIPN4llvm10BranchInstEPKNS_10DataLayoutE\", \"FoldCondBranchOnPHI(llvm::BranchInst*, llvm::DataLayout const*)\"},\n    {\"_Z34BlockIsSimpleEnoughToThreadThroughPN4llvm10BasicBlockE\", \"BlockIsSimpleEnoughToThreadThrough(llvm::BasicBlock*)\"},\n    {\"_Z19isSafeToHoistInvokePN4llvm10BasicBlockES1_PNS_11InstructionES3_\", \"isSafeToHoistInvoke(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Instruction*, llvm::Instruction*)\"},\n    {\"_Z22GatherConstantComparesPN4llvm5ValueERSt6vectorIPNS_11ConstantIntESaIS4_EERS1_PKNS_10DataLayoutEbRj\", \"GatherConstantCompares(llvm::Value*, std::vector<llvm::ConstantInt*, std::allocator<llvm::ConstantInt*> >&, llvm::Value*&, llvm::DataLayout const*, bool, unsigned int&)\"},\n    {\"_Z19DominatesMergePointPN4llvm5ValueEPNS_10BasicBlockEPNS_11SmallPtrSetIPNS_11InstructionELj4EEE\", \"DominatesMergePoint(llvm::Value*, llvm::BasicBlock*, llvm::SmallPtrSet<llvm::Instruction*, 4u>*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, unsigned int>, std::_Select1st<std::pair<llvm::BasicBlock* const, unsigned int> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, unsigned int> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock* const, unsigned int> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS5_ERKS5_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, unsigned int>, std::_Select1st<std::pair<llvm::BasicBlock* const, unsigned int> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, unsigned int> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock* const, unsigned int> >, std::pair<llvm::BasicBlock* const, unsigned int> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_jESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, unsigned int>, std::_Select1st<std::pair<llvm::BasicBlock* const, unsigned int> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, unsigned int> > >::_M_insert_unique(std::pair<llvm::BasicBlock* const, unsigned int> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm11ConstantIntEPNS1_10BasicBlockEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<llvm::ConstantInt*, llvm::BasicBlock*>, std::allocator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*>*, std::vector<std::pair<llvm::ConstantInt*, llvm::BasicBlock*>, std::allocator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*> > > >, std::pair<llvm::ConstantInt*, llvm::BasicBlock*> const&)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm11ConstantIntEPNS1_10BasicBlockEESaIS6_EE7reserveEm\", \"std::vector<std::pair<llvm::ConstantInt*, llvm::BasicBlock*>, std::allocator<std::pair<llvm::ConstantInt*, llvm::BasicBlock*> > >::reserve(unsigned long)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPN4llvm5ValueES3_ES0_IKS4_PNS1_10SelectInstEESt10_Select1stIS8_ESt4lessIS4_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<std::pair<llvm::Value*, llvm::Value*>, std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*>, std::_Select1st<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> >, std::less<std::pair<llvm::Value*, llvm::Value*> >, std::allocator<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPN4llvm5ValueES3_ES0_IKS4_PNS1_10SelectInstEESt10_Select1stIS8_ESt4lessIS4_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<std::pair<llvm::Value*, llvm::Value*>, std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*>, std::_Select1st<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> >, std::less<std::pair<llvm::Value*, llvm::Value*> >, std::allocator<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> >, std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPN4llvm5ValueES3_ES0_IKS4_PNS1_10SelectInstEESt10_Select1stIS8_ESt4lessIS4_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<std::pair<llvm::Value*, llvm::Value*>, std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*>, std::_Select1st<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> >, std::less<std::pair<llvm::Value*, llvm::Value*> >, std::allocator<std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> > >::_M_insert_unique(std::pair<std::pair<llvm::Value*, llvm::Value*> const, llvm::SelectInst*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm11ConstantIntESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::ConstantInt*, std::allocator<llvm::ConstantInt*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::ConstantInt**, std::vector<llvm::ConstantInt*, std::allocator<llvm::ConstantInt*> > >, unsigned long, llvm::ConstantInt* const&)\"},\n    {\"_ZN4llvm36initializeUnifyFunctionExitNodesPassERNS_12PassRegistryE\", \"llvm::initializeUnifyFunctionExitNodesPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm32createUnifyFunctionExitNodesPassEv\", \"llvm::createUnifyFunctionExitNodesPass()\"},\n    {\"_ZNK4llvm22UnifyFunctionExitNodes16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::UnifyFunctionExitNodes::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm22UnifyFunctionExitNodes13runOnFunctionERNS_8FunctionE\", \"llvm::UnifyFunctionExitNodes::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm22UnifyFunctionExitNodesD1Ev\", \"llvm::UnifyFunctionExitNodes::~UnifyFunctionExitNodes()\"},\n    {\"_ZN4llvm22UnifyFunctionExitNodesD0Ev\", \"llvm::UnifyFunctionExitNodes::~UnifyFunctionExitNodes()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_22UnifyFunctionExitNodesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::UnifyFunctionExitNodes>()\"},\n    {\"_ZN4llvm8MapValueEPKNS_5ValueERNS_8ValueMapIS2_NS_10TrackingVHIS0_EENS_14ValueMapConfigIS2_EENS_12DenseMapInfoIS5_EEEENS_10RemapFlagsE\", \"llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, llvm::RemapFlags)\"},\n    {\"_ZN4llvm16RemapInstructionEPNS_11InstructionERNS_8ValueMapIPKNS_5ValueENS_10TrackingVHIS3_EENS_14ValueMapConfigIS5_EENS_12DenseMapInfoIS7_EEEENS_10RemapFlagsE\", \"llvm::RemapInstruction(llvm::Instruction*, llvm::ValueMap<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >&, llvm::RemapFlags)\"},\n    {\"_ZN4llvm32initializeCallGraphAnalysisGroupERNS_12PassRegistryE\", \"llvm::initializeCallGraphAnalysisGroup(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm28initializeBasicCallGraphPassERNS_12PassRegistryE\", \"llvm::initializeBasicCallGraphPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm9CallGraph10initializeERNS_6ModuleE\", \"llvm::CallGraph::initialize(llvm::Module&)\"},\n    {\"_ZN4llvm9CallGraph7destroyEv\", \"llvm::CallGraph::destroy()\"},\n    {\"_ZNK4llvm9CallGraph5printERNS_11raw_ostreamEPNS_6ModuleE\", \"llvm::CallGraph::print(llvm::raw_ostream&, llvm::Module*) const\"},\n    {\"_ZNK4llvm13CallGraphNode5printERNS_11raw_ostreamE\", \"llvm::CallGraphNode::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm9CallGraph4dumpEv\", \"llvm::CallGraph::dump() const\"},\n    {\"_ZN4llvm9CallGraph24removeFunctionFromModuleEPNS_13CallGraphNodeE\", \"llvm::CallGraph::removeFunctionFromModule(llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm9CallGraph14spliceFunctionEPKNS_8FunctionES3_\", \"llvm::CallGraph::spliceFunction(llvm::Function const*, llvm::Function const*)\"},\n    {\"_ZN4llvm9CallGraph19getOrInsertFunctionEPKNS_8FunctionE\", \"llvm::CallGraph::getOrInsertFunction(llvm::Function const*)\"},\n    {\"_ZNK4llvm13CallGraphNode4dumpEv\", \"llvm::CallGraphNode::dump() const\"},\n    {\"_ZN4llvm13CallGraphNode17removeCallEdgeForENS_8CallSiteE\", \"llvm::CallGraphNode::removeCallEdgeFor(llvm::CallSite)\"},\n    {\"_ZN4llvm13CallGraphNode19removeAnyCallEdgeToEPS0_\", \"llvm::CallGraphNode::removeAnyCallEdgeTo(llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm13CallGraphNode23removeOneAbstractEdgeToEPS0_\", \"llvm::CallGraphNode::removeOneAbstractEdgeTo(llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm13CallGraphNode15replaceCallEdgeENS_8CallSiteES1_PS0_\", \"llvm::CallGraphNode::replaceCallEdge(llvm::CallSite, llvm::CallSite, llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_114BasicCallGraphEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::BasicCallGraph>()\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraphD1Ev\", \"(anonymous namespace)::BasicCallGraph::~BasicCallGraph()\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraphD0Ev\", \"(anonymous namespace)::BasicCallGraph::~BasicCallGraph()\"},\n    {\"_ZNK12_GLOBAL__N_114BasicCallGraph5printERN4llvm11raw_ostreamEPKNS1_6ModuleE\", \"(anonymous namespace)::BasicCallGraph::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK12_GLOBAL__N_114BasicCallGraph16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::BasicCallGraph::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph13releaseMemoryEv\", \"(anonymous namespace)::BasicCallGraph::releaseMemory()\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph26getAdjustedAnalysisPointerEPKv\", \"(anonymous namespace)::BasicCallGraph::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::BasicCallGraph::runOnModule(llvm::Module&)\"},\n    {\"_ZNK12_GLOBAL__N_114BasicCallGraph22getExternalCallingNodeEv\", \"(anonymous namespace)::BasicCallGraph::getExternalCallingNode() const\"},\n    {\"_ZNK12_GLOBAL__N_114BasicCallGraph20getCallsExternalNodeEv\", \"(anonymous namespace)::BasicCallGraph::getCallsExternalNode() const\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph7getRootEv\", \"(anonymous namespace)::BasicCallGraph::getRoot()\"},\n    {\"_ZNK12_GLOBAL__N_114BasicCallGraph7getRootEv\", \"(anonymous namespace)::BasicCallGraph::getRoot() const\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph7destroyEv\", \"(anonymous namespace)::BasicCallGraph::destroy()\"},\n    {\"_ZThn32_NK12_GLOBAL__N_114BasicCallGraph22getExternalCallingNodeEv\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::getExternalCallingNode() const\"},\n    {\"_ZThn32_NK12_GLOBAL__N_114BasicCallGraph20getCallsExternalNodeEv\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::getCallsExternalNode() const\"},\n    {\"_ZThn32_N12_GLOBAL__N_114BasicCallGraph7getRootEv\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::getRoot()\"},\n    {\"_ZThn32_NK12_GLOBAL__N_114BasicCallGraph7getRootEv\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::getRoot() const\"},\n    {\"_ZThn32_N12_GLOBAL__N_114BasicCallGraphD1Ev\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::~BasicCallGraph()\"},\n    {\"_ZThn32_N12_GLOBAL__N_114BasicCallGraphD0Ev\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::~BasicCallGraph()\"},\n    {\"_ZThn32_N12_GLOBAL__N_114BasicCallGraph7destroyEv\", \"non-virtual thunk to (anonymous namespace)::BasicCallGraph::destroy()\"},\n    {\"_ZN4llvm13CallGraphNodeD1Ev\", \"llvm::CallGraphNode::~CallGraphNode()\"},\n    {\"_ZNK4llvm9CallGraph22getExternalCallingNodeEv\", \"llvm::CallGraph::getExternalCallingNode() const\"},\n    {\"_ZNK4llvm9CallGraph20getCallsExternalNodeEv\", \"llvm::CallGraph::getCallsExternalNode() const\"},\n    {\"_ZN4llvm9CallGraph7getRootEv\", \"llvm::CallGraph::getRoot()\"},\n    {\"_ZNK4llvm9CallGraph7getRootEv\", \"llvm::CallGraph::getRoot() const\"},\n    {\"_ZN4llvm9CallGraphD1Ev\", \"llvm::CallGraph::~CallGraph()\"},\n    {\"_ZN4llvm9CallGraphD0Ev\", \"llvm::CallGraph::~CallGraph()\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_PNS0_13CallGraphNodeEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, llvm::CallGraphNode*>, std::_Select1st<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::pair<llvm::Function const* const, llvm::CallGraphNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_PNS0_13CallGraphNodeEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, llvm::CallGraphNode*>, std::_Select1st<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> > >::_M_insert_unique(std::pair<llvm::Function const* const, llvm::CallGraphNode*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_PNS0_13CallGraphNodeEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE5eraseESt17_Rb_tree_iteratorIS8_ESG_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, llvm::CallGraphNode*>, std::_Select1st<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::_Rb_tree_iterator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_PNS0_13CallGraphNodeEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, llvm::CallGraphNode*>, std::_Select1st<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, llvm::CallGraphNode*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Function const* const, llvm::CallGraphNode*> >*)\"},\n    {\"_ZN4llvm13CallGraphNode17addCalledFunctionENS_8CallSiteEPS0_\", \"llvm::CallGraphNode::addCalledFunction(llvm::CallSite, llvm::CallGraphNode*)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm6WeakVHEPNS1_13CallGraphNodeEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_\", \"std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pair<llvm::WeakVH, llvm::CallGraphNode*> const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm6WeakVHEPNS4_13CallGraphNodeEES9_EET0_T_SB_SA_\", \"std::pair<llvm::WeakVH, llvm::CallGraphNode*>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::pair<llvm::WeakVH, llvm::CallGraphNode*>*>(std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::pair<llvm::WeakVH, llvm::CallGraphNode*>*)\"},\n    {\"_ZN4llvm12CallGraphSCC11ReplaceNodeEPNS_13CallGraphNodeES2_\", \"llvm::CallGraphSCC::ReplaceNode(llvm::CallGraphNode*, llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm16CallGraphSCCPass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::CallGraphSCCPass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZNK4llvm16CallGraphSCCPass16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::CallGraphSCCPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm16CallGraphSCCPass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::CallGraphSCCPass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZN12_GLOBAL__N_118PrintCallGraphPassD1Ev\", \"(anonymous namespace)::PrintCallGraphPass::~PrintCallGraphPass()\"},\n    {\"_ZN12_GLOBAL__N_118PrintCallGraphPassD0Ev\", \"(anonymous namespace)::PrintCallGraphPass::~PrintCallGraphPass()\"},\n    {\"_ZNK12_GLOBAL__N_118PrintCallGraphPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PrintCallGraphPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118PrintCallGraphPass8runOnSCCERN4llvm12CallGraphSCCE\", \"(anonymous namespace)::PrintCallGraphPass::runOnSCC(llvm::CallGraphSCC&)\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManagerD1Ev\", \"(anonymous namespace)::CGPassManager::~CGPassManager()\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManagerD0Ev\", \"(anonymous namespace)::CGPassManager::~CGPassManager()\"},\n    {\"_ZNK12_GLOBAL__N_113CGPassManager11getPassNameEv\", \"(anonymous namespace)::CGPassManager::getPassName() const\"},\n    {\"_ZNK12_GLOBAL__N_113CGPassManager16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::CGPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager18getAsPMDataManagerEv\", \"(anonymous namespace)::CGPassManager::getAsPMDataManager()\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager17dumpPassStructureEj\", \"(anonymous namespace)::CGPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::CGPassManager::runOnModule(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager9getAsPassEv\", \"(anonymous namespace)::CGPassManager::getAsPass()\"},\n    {\"_ZNK12_GLOBAL__N_113CGPassManager18getPassManagerTypeEv\", \"(anonymous namespace)::CGPassManager::getPassManagerType() const\"},\n    {\"_ZThn32_N12_GLOBAL__N_113CGPassManagerD1Ev\", \"non-virtual thunk to (anonymous namespace)::CGPassManager::~CGPassManager()\"},\n    {\"_ZThn32_N12_GLOBAL__N_113CGPassManagerD0Ev\", \"non-virtual thunk to (anonymous namespace)::CGPassManager::~CGPassManager()\"},\n    {\"_ZThn32_N12_GLOBAL__N_113CGPassManager9getAsPassEv\", \"non-virtual thunk to (anonymous namespace)::CGPassManager::getAsPass()\"},\n    {\"_ZThn32_NK12_GLOBAL__N_113CGPassManager18getPassManagerTypeEv\", \"non-virtual thunk to (anonymous namespace)::CGPassManager::getPassManagerType() const\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager16RefreshCallGraphERN4llvm12CallGraphSCCERNS1_9CallGraphEb\", \"(anonymous namespace)::CGPassManager::RefreshCallGraph(llvm::CallGraphSCC&, llvm::CallGraph&, bool)\"},\n    {\"_ZN4llvm12scc_iteratorIPNS_9CallGraphENS_11GraphTraitsIS2_EEE11ReplaceNodeEPNS_13CallGraphNodeES7_\", \"llvm::scc_iterator<llvm::CallGraph*, llvm::GraphTraits<llvm::CallGraph*> >::ReplaceNode(llvm::CallGraphNode*, llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_13CallGraphNodeEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::CallGraphNode*, unsigned int, llvm::DenseMapInfo<llvm::CallGraphNode*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::CallGraphNode* const&, unsigned int const&, std::pair<llvm::CallGraphNode*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_13CallGraphNodeEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::CallGraphNode*, unsigned int, llvm::DenseMapInfo<llvm::CallGraphNode*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9scc_beginIPNS_9CallGraphEEENS_12scc_iteratorIT_NS_11GraphTraitsIS4_EEEERKS4_\", \"llvm::scc_iterator<llvm::CallGraph*, llvm::GraphTraits<llvm::CallGraph*> > llvm::scc_begin<llvm::CallGraph*>(llvm::CallGraph* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_13CallGraphNodeENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Value*, llvm::CallGraphNode*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::CallGraphNode*> >::insert(std::pair<llvm::Value*, llvm::CallGraphNode*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_13CallGraphNodeENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value*, llvm::CallGraphNode*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::CallGraphNode*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_13CallGraphNodeENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Value*, llvm::CallGraphNode*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::CallGraphNode*> >::InsertIntoBucket(llvm::Value* const&, llvm::CallGraphNode* const&, std::pair<llvm::Value*, llvm::CallGraphNode*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_13CallGraphNodeENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, llvm::CallGraphNode*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::CallGraphNode*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12scc_iteratorIPNS_9CallGraphENS_11GraphTraitsIS2_EEE10GetNextSCCEv\", \"llvm::scc_iterator<llvm::CallGraph*, llvm::GraphTraits<llvm::CallGraph*> >::GetNextSCC()\"},\n    {\"_ZN4llvm12scc_iteratorIPNS_9CallGraphENS_11GraphTraitsIS2_EEE16DFSVisitChildrenEv\", \"llvm::scc_iterator<llvm::CallGraph*, llvm::GraphTraits<llvm::CallGraph*> >::DFSVisitChildren()\"},\n    {\"_ZNSt6vectorIPN4llvm13CallGraphNodeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::CallGraphNode*, std::allocator<llvm::CallGraphNode*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::CallGraphNode**, std::vector<llvm::CallGraphNode*, std::allocator<llvm::CallGraphNode*> > >, llvm::CallGraphNode* const&)\"},\n    {\"_ZN4llvm12scc_iteratorIPNS_9CallGraphENS_11GraphTraitsIS2_EEE11DFSVisitOneEPNS_13CallGraphNodeE\", \"llvm::scc_iterator<llvm::CallGraph*, llvm::GraphTraits<llvm::CallGraph*> >::DFSVisitOne(llvm::CallGraphNode*)\"},\n    {\"_ZN4llvm11GraphTraitsIPNS_13CallGraphNodeEE8CGNDerefESt4pairINS_6WeakVHES2_E\", \"llvm::GraphTraits<llvm::CallGraphNode*>::CGNDeref(std::pair<llvm::WeakVH, llvm::CallGraphNode*>)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm13CallGraphNodeENS1_15mapped_iteratorIN9__gnu_cxx17__normal_iteratorIPS0_INS1_6WeakVHES3_ES_IS8_SaIS8_EEEESt25pointer_to_unary_functionIS8_S3_EEEESaISG_EE13_M_insert_auxENS6_IPSG_SI_EERKSG_\", \"std::vector<std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > >, std::allocator<std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > > > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > >*, std::vector<std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > >, std::allocator<std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > > > > >, std::pair<llvm::CallGraphNode*, llvm::mapped_iterator<__gnu_cxx::__normal_iterator<std::pair<llvm::WeakVH, llvm::CallGraphNode*>*, std::vector<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, std::allocator<std::pair<llvm::WeakVH, llvm::CallGraphNode*> > > >, std::pointer_to_unary_function<std::pair<llvm::WeakVH, llvm::CallGraphNode*>, llvm::CallGraphNode*> > > const&)\"},\n    {\"_ZNSt6vectorIPN4llvm13CallGraphNodeESaIS2_EE13_M_assign_auxIPKS2_EEvT_S8_St20forward_iterator_tag\", \"void std::vector<llvm::CallGraphNode*, std::allocator<llvm::CallGraphNode*> >::_M_assign_aux<llvm::CallGraphNode* const*>(llvm::CallGraphNode* const*, llvm::CallGraphNode* const*, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm27initializeFindUsedTypesPassERNS_12PassRegistryE\", \"llvm::initializeFindUsedTypesPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm13FindUsedTypes15IncorporateTypeEPKNS_4TypeE\", \"llvm::FindUsedTypes::IncorporateType(llvm::Type const*)\"},\n    {\"_ZN4llvm13FindUsedTypes16IncorporateValueEPKNS_5ValueE\", \"llvm::FindUsedTypes::IncorporateValue(llvm::Value const*)\"},\n    {\"_ZN4llvm13FindUsedTypes11runOnModuleERNS_6ModuleE\", \"llvm::FindUsedTypes::runOnModule(llvm::Module&)\"},\n    {\"_ZNK4llvm13FindUsedTypes5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::FindUsedTypes::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZN4llvm13FindUsedTypesD1Ev\", \"llvm::FindUsedTypes::~FindUsedTypes()\"},\n    {\"_ZN4llvm13FindUsedTypesD0Ev\", \"llvm::FindUsedTypes::~FindUsedTypes()\"},\n    {\"_ZNK4llvm13FindUsedTypes16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::FindUsedTypes::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE16_M_insert_uniqueERKS3_\", \"std::_Rb_tree<llvm::Type const*, llvm::Type const*, std::_Identity<llvm::Type const*>, std::less<llvm::Type const*>, std::allocator<llvm::Type const*> >::_M_insert_unique(llvm::Type const* const&)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_13FindUsedTypesEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::FindUsedTypes>()\"},\n    {\"_ZN4llvm36initializeAliasAnalysisAnalysisGroupERNS_12PassRegistryE\", \"llvm::initializeAliasAnalysisAnalysisGroup(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm13AliasAnalysis5aliasERKNS0_8LocationES3_\", \"llvm::AliasAnalysis::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysis22pointsToConstantMemoryERKNS0_8LocationEb\", \"llvm::AliasAnalysis::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZN4llvm13AliasAnalysis11deleteValueEPNS_5ValueE\", \"llvm::AliasAnalysis::deleteValue(llvm::Value*)\"},\n    {\"_ZN4llvm13AliasAnalysis9copyValueEPNS_5ValueES2_\", \"llvm::AliasAnalysis::copyValue(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm13AliasAnalysis14addEscapingUseERNS_3UseE\", \"llvm::AliasAnalysis::addEscapingUse(llvm::Use&)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoENS_17ImmutableCallSiteERKNS0_8LocationE\", \"llvm::AliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoENS_17ImmutableCallSiteES1_\", \"llvm::AliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZN4llvm13AliasAnalysis17getModRefBehaviorENS_17ImmutableCallSiteE\", \"llvm::AliasAnalysis::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZN4llvm13AliasAnalysis17getModRefBehaviorEPKNS_8FunctionE\", \"llvm::AliasAnalysis::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZN4llvm13AliasAnalysis11getLocationEPKNS_8LoadInstE\", \"llvm::AliasAnalysis::getLocation(llvm::LoadInst const*)\"},\n    {\"_ZN4llvm13AliasAnalysis16getTypeStoreSizeEPKNS_4TypeE\", \"llvm::AliasAnalysis::getTypeStoreSize(llvm::Type const*)\"},\n    {\"_ZN4llvm13AliasAnalysis11getLocationEPKNS_9StoreInstE\", \"llvm::AliasAnalysis::getLocation(llvm::StoreInst const*)\"},\n    {\"_ZN4llvm13AliasAnalysis11getLocationEPKNS_9VAArgInstE\", \"llvm::AliasAnalysis::getLocation(llvm::VAArgInst const*)\"},\n    {\"_ZN4llvm13AliasAnalysis20getLocationForSourceEPKNS_15MemTransferInstE\", \"llvm::AliasAnalysis::getLocationForSource(llvm::MemTransferInst const*)\"},\n    {\"_ZN4llvm13AliasAnalysis18getLocationForDestEPKNS_12MemIntrinsicE\", \"llvm::AliasAnalysis::getLocationForDest(llvm::MemIntrinsic const*)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoEPKNS_8LoadInstERKNS0_8LocationE\", \"llvm::AliasAnalysis::getModRefInfo(llvm::LoadInst const*, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoEPKNS_9StoreInstERKNS0_8LocationE\", \"llvm::AliasAnalysis::getModRefInfo(llvm::StoreInst const*, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoEPKNS_9VAArgInstERKNS0_8LocationE\", \"llvm::AliasAnalysis::getModRefInfo(llvm::VAArgInst const*, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysisD0Ev\", \"llvm::AliasAnalysis::~AliasAnalysis()\"},\n    {\"_ZN4llvm13AliasAnalysisD1Ev\", \"llvm::AliasAnalysis::~AliasAnalysis()\"},\n    {\"_ZN4llvm13AliasAnalysisD2Ev\", \"llvm::AliasAnalysis::~AliasAnalysis()\"},\n    {\"_ZN4llvm13AliasAnalysis23InitializeAliasAnalysisEPNS_4PassE\", \"llvm::AliasAnalysis::InitializeAliasAnalysis(llvm::Pass*)\"},\n    {\"_ZNK4llvm13AliasAnalysis16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::AliasAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13AliasAnalysis19canBasicBlockModifyERKNS_10BasicBlockERKNS0_8LocationE\", \"llvm::AliasAnalysis::canBasicBlockModify(llvm::BasicBlock const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13AliasAnalysis25canInstructionRangeModifyERKNS_11InstructionES3_RKNS0_8LocationE\", \"llvm::AliasAnalysis::canInstructionRangeModify(llvm::Instruction const&, llvm::Instruction const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm13isNoAliasCallEPKNS_5ValueE\", \"llvm::isNoAliasCall(llvm::Value const*)\"},\n    {\"_ZN4llvm18isIdentifiedObjectEPKNS_5ValueE\", \"llvm::isIdentifiedObject(llvm::Value const*)\"},\n    {\"_ZN4llvm13AliasAnalysis13getModRefInfoEPKNS_11InstructionERKNS0_8LocationE\", \"llvm::AliasAnalysis::getModRefInfo(llvm::Instruction const*, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN4llvm8AliasSet10mergeSetInERS0_RNS_15AliasSetTrackerE\", \"llvm::AliasSet::mergeSetIn(llvm::AliasSet&, llvm::AliasSetTracker&)\"},\n    {\"_ZN4llvm15AliasSetTracker14removeAliasSetEPNS_8AliasSetE\", \"llvm::AliasSetTracker::removeAliasSet(llvm::AliasSet*)\"},\n    {\"_ZN4llvm8AliasSet17removeFromTrackerERNS_15AliasSetTrackerE\", \"llvm::AliasSet::removeFromTracker(llvm::AliasSetTracker&)\"},\n    {\"_ZN4llvm8AliasSet10addPointerERNS_15AliasSetTrackerERNS0_10PointerRecEyPKNS_6MDNodeEb\", \"llvm::AliasSet::addPointer(llvm::AliasSetTracker&, llvm::AliasSet::PointerRec&, unsigned long long, llvm::MDNode const*, bool)\"},\n    {\"_ZN4llvm8AliasSet11addCallSiteENS_8CallSiteERNS_13AliasAnalysisE\", \"llvm::AliasSet::addCallSite(llvm::CallSite, llvm::AliasAnalysis&)\"},\n    {\"_ZNK4llvm8AliasSet14aliasesPointerEPKNS_5ValueEyPKNS_6MDNodeERNS_13AliasAnalysisE\", \"llvm::AliasSet::aliasesPointer(llvm::Value const*, unsigned long long, llvm::MDNode const*, llvm::AliasAnalysis&) const\"},\n    {\"_ZNK4llvm8AliasSet15aliasesCallSiteENS_8CallSiteERNS_13AliasAnalysisE\", \"llvm::AliasSet::aliasesCallSite(llvm::CallSite, llvm::AliasAnalysis&) const\"},\n    {\"_ZN4llvm15AliasSetTracker5clearEv\", \"llvm::AliasSetTracker::clear()\"},\n    {\"_ZN4llvm15AliasSetTracker22findAliasSetForPointerEPKNS_5ValueEyPKNS_6MDNodeE\", \"llvm::AliasSetTracker::findAliasSetForPointer(llvm::Value const*, unsigned long long, llvm::MDNode const*)\"},\n    {\"_ZNK4llvm15AliasSetTracker15containsPointerEPNS_5ValueEyPKNS_6MDNodeE\", \"llvm::AliasSetTracker::containsPointer(llvm::Value*, unsigned long long, llvm::MDNode const*) const\"},\n    {\"_ZN4llvm15AliasSetTracker23findAliasSetForCallSiteENS_8CallSiteE\", \"llvm::AliasSetTracker::findAliasSetForCallSite(llvm::CallSite)\"},\n    {\"_ZN4llvm15AliasSetTracker21getAliasSetForPointerEPNS_5ValueEyPKNS_6MDNodeEPb\", \"llvm::AliasSetTracker::getAliasSetForPointer(llvm::Value*, unsigned long long, llvm::MDNode const*, bool*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addEPNS_5ValueEyPKNS_6MDNodeE\", \"llvm::AliasSetTracker::add(llvm::Value*, unsigned long long, llvm::MDNode const*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addEPNS_8LoadInstE\", \"llvm::AliasSetTracker::add(llvm::LoadInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addEPNS_9StoreInstE\", \"llvm::AliasSetTracker::add(llvm::StoreInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addEPNS_9VAArgInstE\", \"llvm::AliasSetTracker::add(llvm::VAArgInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addENS_8CallSiteE\", \"llvm::AliasSetTracker::add(llvm::CallSite)\"},\n    {\"_ZN4llvm15AliasSetTracker3addEPNS_11InstructionE\", \"llvm::AliasSetTracker::add(llvm::Instruction*)\"},\n    {\"_ZN4llvm15AliasSetTracker3addERNS_10BasicBlockE\", \"llvm::AliasSetTracker::add(llvm::BasicBlock&)\"},\n    {\"_ZN4llvm15AliasSetTracker3addERKS0_\", \"llvm::AliasSetTracker::add(llvm::AliasSetTracker const&)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeERNS_8AliasSetE\", \"llvm::AliasSetTracker::remove(llvm::AliasSet&)\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVHC1EPNS_5ValueEPS0_\", \"llvm::AliasSetTracker::ASTCallbackVH::ASTCallbackVH(llvm::Value*, llvm::AliasSetTracker*)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeEPNS_5ValueEyPKNS_6MDNodeE\", \"llvm::AliasSetTracker::remove(llvm::Value*, unsigned long long, llvm::MDNode const*)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeEPNS_8LoadInstE\", \"llvm::AliasSetTracker::remove(llvm::LoadInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeEPNS_9StoreInstE\", \"llvm::AliasSetTracker::remove(llvm::StoreInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeEPNS_9VAArgInstE\", \"llvm::AliasSetTracker::remove(llvm::VAArgInst*)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeENS_8CallSiteE\", \"llvm::AliasSetTracker::remove(llvm::CallSite)\"},\n    {\"_ZN4llvm15AliasSetTracker6removeEPNS_11InstructionE\", \"llvm::AliasSetTracker::remove(llvm::Instruction*)\"},\n    {\"_ZN4llvm15AliasSetTracker11deleteValueEPNS_5ValueE\", \"llvm::AliasSetTracker::deleteValue(llvm::Value*)\"},\n    {\"_ZN4llvm15AliasSetTracker9copyValueEPNS_5ValueES2_\", \"llvm::AliasSetTracker::copyValue(llvm::Value*, llvm::Value*)\"},\n    {\"_ZNK4llvm8AliasSet5printERNS_11raw_ostreamE\", \"llvm::AliasSet::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm15AliasSetTracker5printERNS_11raw_ostreamE\", \"llvm::AliasSetTracker::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm8AliasSet4dumpEv\", \"llvm::AliasSet::dump() const\"},\n    {\"_ZNK4llvm15AliasSetTracker4dumpEv\", \"llvm::AliasSetTracker::dump() const\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVH7deletedEv\", \"llvm::AliasSetTracker::ASTCallbackVH::deleted()\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVHC2EPNS_5ValueEPS0_\", \"llvm::AliasSetTracker::ASTCallbackVH::ASTCallbackVH(llvm::Value*, llvm::AliasSetTracker*)\"},\n    {\"_ZN4llvm15AliasSetTracker13ASTCallbackVHaSEPNS_5ValueE\", \"llvm::AliasSetTracker::ASTCallbackVH::operator=(llvm::Value*)\"},\n    {\"_ZN4llvm29initializeAliasSetPrinterPassERNS_12PassRegistryE\", \"llvm::initializeAliasSetPrinterPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_115AliasSetPrinterEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::AliasSetPrinter>()\"},\n    {\"_ZN12_GLOBAL__N_115AliasSetPrinterD1Ev\", \"(anonymous namespace)::AliasSetPrinter::~AliasSetPrinter()\"},\n    {\"_ZN12_GLOBAL__N_115AliasSetPrinterD0Ev\", \"(anonymous namespace)::AliasSetPrinter::~AliasSetPrinter()\"},\n    {\"_ZNK12_GLOBAL__N_115AliasSetPrinter16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::AliasSetPrinter::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_115AliasSetPrinter13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::AliasSetPrinter::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE5beginEv\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::begin()\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE5clearEv\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::clear()\"},\n    {\"_ZN4llvm15AliasSetTracker11getEntryForEPNS_5ValueE\", \"llvm::AliasSetTracker::getEntryFor(llvm::Value*)\"},\n    {\"_ZN4llvm8AliasSet18getForwardedTargetERNS_15AliasSetTrackerE\", \"llvm::AliasSet::getForwardedTarget(llvm::AliasSetTracker&)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE5eraseERKS2_\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::erase(llvm::AliasSetTracker::ASTCallbackVH const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE4findERKS2_\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::find(llvm::AliasSetTracker::ASTCallbackVH const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE5eraseENS_16DenseMapIteratorIS2_S5_S6_S8_Lb0EEE\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::erase(llvm::DenseMapIterator<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*>, false>)\"},\n    {\"_ZNK4llvm6iplistINS_8AliasSetENS_12ilist_traitsIS1_EEE3endEv\", \"llvm::iplist<llvm::AliasSet, llvm::ilist_traits<llvm::AliasSet> >::end() const\"},\n    {\"_ZNK4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE15LookupBucketForERKS2_RPSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::LookupBucketFor(llvm::AliasSetTracker::ASTCallbackVH const&, std::pair<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*>*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorIN4llvm11AssertingVHINS0_11InstructionEEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AssertingVH<llvm::Instruction>*, std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > > >, llvm::AssertingVH<llvm::Instruction> const&)\"},\n    {\"_ZNSt6vectorIN4llvm11AssertingVHINS0_11InstructionEEESaIS3_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS3_S5_EEEEvSA_T_SB_St20forward_iterator_tag\", \"void std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > >::_M_range_insert<__gnu_cxx::__normal_iterator<llvm::AssertingVH<llvm::Instruction>*, std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > > > >(__gnu_cxx::__normal_iterator<llvm::AssertingVH<llvm::Instruction>*, std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > > >, __gnu_cxx::__normal_iterator<llvm::AssertingVH<llvm::Instruction>*, std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > > >, __gnu_cxx::__normal_iterator<llvm::AssertingVH<llvm::Instruction>*, std::vector<llvm::AssertingVH<llvm::Instruction>, std::allocator<llvm::AssertingVH<llvm::Instruction> > > >, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::InsertIntoBucket(llvm::AliasSetTracker::ASTCallbackVH const&, llvm::AliasSet::PointerRec* const&, std::pair<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*>*)\"},\n    {\"_ZN4llvm8DenseMapINS_15AliasSetTracker13ASTCallbackVHEPNS_8AliasSet10PointerRecENS1_25ASTCallbackVHDenseMapInfoENS_12DenseMapInfoIS5_EEE4growEj\", \"llvm::DenseMap<llvm::AliasSetTracker::ASTCallbackVH, llvm::AliasSet::PointerRec*, llvm::AliasSetTracker::ASTCallbackVHDenseMapInfo, llvm::DenseMapInfo<llvm::AliasSet::PointerRec*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm32initializeBasicAliasAnalysisPassERNS_12PassRegistryE\", \"llvm::initializeBasicAliasAnalysisPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm28createBasicAliasAnalysisPassEv\", \"llvm::createBasicAliasAnalysisPass()\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysisD1Ev\", \"(anonymous namespace)::BasicAliasAnalysis::~BasicAliasAnalysis()\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysisD0Ev\", \"(anonymous namespace)::BasicAliasAnalysis::~BasicAliasAnalysis()\"},\n    {\"_ZNK12_GLOBAL__N_118BasicAliasAnalysis16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::BasicAliasAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis26getAdjustedAnalysisPointerEPKv\", \"(anonymous namespace)::BasicAliasAnalysis::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis14initializePassEv\", \"(anonymous namespace)::BasicAliasAnalysis::initializePass()\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"(anonymous namespace)::BasicAliasAnalysis::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"(anonymous namespace)::BasicAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"(anonymous namespace)::BasicAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"(anonymous namespace)::BasicAliasAnalysis::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"(anonymous namespace)::BasicAliasAnalysis::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis17getModRefBehaviorEPKN4llvm8FunctionE\", \"(anonymous namespace)::BasicAliasAnalysis::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZThn32_NK12_GLOBAL__N_118BasicAliasAnalysis16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysisD1Ev\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::~BasicAliasAnalysis()\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysisD0Ev\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::~BasicAliasAnalysis()\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis17getModRefBehaviorEPKN4llvm8FunctionE\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_118BasicAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"non-virtual thunk to (anonymous namespace)::BasicAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis10aliasCheckEPKN4llvm5ValueEyPKNS1_6MDNodeES4_yS7_\", \"(anonymous namespace)::BasicAliasAnalysis::aliasCheck(llvm::Value const*, unsigned long long, llvm::MDNode const*, llvm::Value const*, unsigned long long, llvm::MDNode const*)\"},\n    {\"_Z24isNonEscapingLocalObjectPKN4llvm5ValueE\", \"isNonEscapingLocalObject(llvm::Value const*)\"},\n    {\"_Z13getObjectSizePKN4llvm5ValueERKNS_10DataLayoutE\", \"getObjectSize(llvm::Value const*, llvm::DataLayout const&)\"},\n    {\"_Z22DecomposeGEPExpressionPKN4llvm5ValueERxRNS_15SmallVectorImplIN12_GLOBAL__N_116VariableGEPIndexEEEPKNS_10DataLayoutE\", \"DecomposeGEPExpression(llvm::Value const*, long long&, llvm::SmallVectorImpl<(anonymous namespace)::VariableGEPIndex>&, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_116VariableGEPIndexEE9push_backERKS2_\", \"llvm::SmallVectorImpl<(anonymous namespace)::VariableGEPIndex>::push_back((anonymous namespace)::VariableGEPIndex const&)\"},\n    {\"_Z19GetLinearExpressionPN4llvm5ValueERNS_5APIntES3_RN12_GLOBAL__N_113ExtensionKindERKNS_10DataLayoutEj\", \"GetLinearExpression(llvm::Value*, llvm::APInt&, llvm::APInt&, (anonymous namespace)::ExtensionKind&, llvm::DataLayout const&, unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_118BasicAliasAnalysisEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::BasicAliasAnalysis>()\"},\n    {\"_ZN4llvm20PointerMayBeCapturedEPKNS_5ValueEbb\", \"llvm::PointerMayBeCaptured(llvm::Value const*, bool, bool)\"},\n    {\"_ZN4llvm28ConstantFoldLoadFromConstPtrEPNS_8ConstantEPKNS_10DataLayoutE\", \"llvm::ConstantFoldLoadFromConstPtr(llvm::Constant*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm38ConstantFoldLoadThroughGEPConstantExprEPNS_8ConstantEPNS_12ConstantExprE\", \"llvm::ConstantFoldLoadThroughGEPConstantExpr(llvm::Constant*, llvm::ConstantExpr*)\"},\n    {\"_Z31FoldReinterpretLoadFromConstPtrPN4llvm8ConstantERKNS_10DataLayoutE\", \"FoldReinterpretLoadFromConstPtr(llvm::Constant*, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm23ConstantFoldInstructionEPNS_11InstructionEPKNS_10DataLayoutE\", \"llvm::ConstantFoldInstruction(llvm::Instruction*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm31ConstantFoldCompareInstOperandsEjPNS_8ConstantES1_PKNS_10DataLayoutE\", \"llvm::ConstantFoldCompareInstOperands(unsigned int, llvm::Constant*, llvm::Constant*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm24ConstantFoldInstOperandsEjPKNS_4TypeEPKPNS_8ConstantEjPKNS_10DataLayoutE\", \"llvm::ConstantFoldInstOperands(unsigned int, llvm::Type const*, llvm::Constant* const*, unsigned int, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm30ConstantFoldConstantExpressionEPKNS_12ConstantExprEPKNS_10DataLayoutE\", \"llvm::ConstantFoldConstantExpression(llvm::ConstantExpr const*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm21canConstantFoldCallToEPKNS_8FunctionE\", \"llvm::canConstantFoldCallTo(llvm::Function const*)\"},\n    {\"_ZN4llvm16ConstantFoldCallEPNS_8FunctionEPKPNS_8ConstantEj\", \"llvm::ConstantFoldCall(llvm::Function*, llvm::Constant* const*, unsigned int)\"},\n    {\"_Z11FoldBitCastPN4llvm8ConstantEPKNS_4TypeERKNS_10DataLayoutE\", \"FoldBitCast(llvm::Constant*, llvm::Type const*, llvm::DataLayout const&)\"},\n    {\"_Z14ConstantFoldFPPFddEdPKN4llvm4TypeE\", \"ConstantFoldFP(double (*)(double), double, llvm::Type const*)\"},\n    {\"_Z20ConstantFoldBinaryFPPFdddEddPKN4llvm4TypeE\", \"ConstantFoldBinaryFP(double (*)(double, double), double, double, llvm::Type const*)\"},\n    {\"_Z26IsConstantOffsetFromGlobalPN4llvm8ConstantERPNS_11GlobalValueERxRKNS_10DataLayoutE\", \"IsConstantOffsetFromGlobal(llvm::Constant*, llvm::GlobalValue*&, long long&, llvm::DataLayout const&)\"},\n    {\"_Z18ReadDataFromGlobalPN4llvm8ConstantEyPhjRKNS_10DataLayoutE\", \"ReadDataFromGlobal(llvm::Constant*, unsigned long long, unsigned char*, unsigned int, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm9DIBuilderC1ERNS_6ModuleE\", \"llvm::DIBuilder::DIBuilder(llvm::Module&)\"},\n    {\"_ZN4llvm9DIBuilderC2ERNS_6ModuleE\", \"llvm::DIBuilder::DIBuilder(llvm::Module&)\"},\n    {\"_ZN4llvm9DIBuilder17CreateCompileUnitEjNS_9StringRefES1_S1_bS1_j\", \"llvm::DIBuilder::CreateCompileUnit(unsigned int, llvm::StringRef, llvm::StringRef, llvm::StringRef, bool, llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder10CreateFileENS_9StringRefES1_\", \"llvm::DIBuilder::CreateFile(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm9DIBuilder16CreateEnumeratorENS_9StringRefEy\", \"llvm::DIBuilder::CreateEnumerator(llvm::StringRef, unsigned long long)\"},\n    {\"_ZN4llvm9DIBuilder15CreateBasicTypeENS_9StringRefEyyj\", \"llvm::DIBuilder::CreateBasicType(llvm::StringRef, unsigned long long, unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder19CreateQualifiedTypeEjNS_6DITypeE\", \"llvm::DIBuilder::CreateQualifiedType(unsigned int, llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder17CreatePointerTypeENS_6DITypeEyyNS_9StringRefE\", \"llvm::DIBuilder::CreatePointerType(llvm::DIType, unsigned long long, unsigned long long, llvm::StringRef)\"},\n    {\"_ZN4llvm9DIBuilder19CreateReferenceTypeENS_6DITypeE\", \"llvm::DIBuilder::CreateReferenceType(llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder13CreateTypedefENS_6DITypeENS_9StringRefENS_6DIFileEj\", \"llvm::DIBuilder::CreateTypedef(llvm::DIType, llvm::StringRef, llvm::DIFile, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder12CreateFriendENS_6DITypeES1_\", \"llvm::DIBuilder::CreateFriend(llvm::DIType, llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder17CreateInheritanceENS_6DITypeES1_yj\", \"llvm::DIBuilder::CreateInheritance(llvm::DIType, llvm::DIType, unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder16CreateMemberTypeENS_9StringRefENS_6DIFileEjyyyjNS_6DITypeE\", \"llvm::DIBuilder::CreateMemberType(llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned int, llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder15CreateClassTypeENS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyyjNS_6DITypeENS_7DIArrayEPNS_6MDNodeES7_\", \"llvm::DIBuilder::CreateClassType(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned int, llvm::DIType, llvm::DIArray, llvm::MDNode*, llvm::MDNode*)\"},\n    {\"_ZN4llvm9DIBuilder27CreateTemplateTypeParameterENS_12DIDescriptorENS_9StringRefENS_6DITypeEPNS_6MDNodeEjj\", \"llvm::DIBuilder::CreateTemplateTypeParameter(llvm::DIDescriptor, llvm::StringRef, llvm::DIType, llvm::MDNode*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder28CreateTemplateValueParameterENS_12DIDescriptorENS_9StringRefENS_6DITypeEyPNS_6MDNodeEjj\", \"llvm::DIBuilder::CreateTemplateValueParameter(llvm::DIDescriptor, llvm::StringRef, llvm::DIType, unsigned long long, llvm::MDNode*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder16CreateStructTypeENS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyjNS_7DIArrayEj\", \"llvm::DIBuilder::CreateStructType(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned int, llvm::DIArray, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder15CreateUnionTypeENS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyjNS_7DIArrayEj\", \"llvm::DIBuilder::CreateUnionType(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned int, llvm::DIArray, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder20CreateSubroutineTypeENS_6DIFileENS_7DIArrayE\", \"llvm::DIBuilder::CreateSubroutineType(llvm::DIFile, llvm::DIArray)\"},\n    {\"_ZN4llvm9DIBuilder21CreateEnumerationTypeENS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyNS_7DIArrayE\", \"llvm::DIBuilder::CreateEnumerationType(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, llvm::DIArray)\"},\n    {\"_ZN4llvm9DIBuilder15CreateArrayTypeEyyNS_6DITypeENS_7DIArrayE\", \"llvm::DIBuilder::CreateArrayType(unsigned long long, unsigned long long, llvm::DIType, llvm::DIArray)\"},\n    {\"_ZN4llvm9DIBuilder16CreateVectorTypeEyyNS_6DITypeENS_7DIArrayE\", \"llvm::DIBuilder::CreateVectorType(unsigned long long, unsigned long long, llvm::DIType, llvm::DIArray)\"},\n    {\"_ZN4llvm9DIBuilder20CreateArtificialTypeENS_6DITypeE\", \"llvm::DIBuilder::CreateArtificialType(llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder10RetainTypeENS_6DITypeE\", \"llvm::DIBuilder::RetainType(llvm::DIType)\"},\n    {\"_ZN4llvm9DIBuilder26CreateUnspecifiedParameterEv\", \"llvm::DIBuilder::CreateUnspecifiedParameter()\"},\n    {\"_ZN4llvm9DIBuilder19CreateTemporaryTypeEv\", \"llvm::DIBuilder::CreateTemporaryType()\"},\n    {\"_ZN4llvm9DIBuilder19CreateTemporaryTypeENS_6DIFileE\", \"llvm::DIBuilder::CreateTemporaryType(llvm::DIFile)\"},\n    {\"_ZN4llvm9DIBuilder16GetOrCreateArrayEPKPNS_5ValueEj\", \"llvm::DIBuilder::GetOrCreateArray(llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder19GetOrCreateSubrangeExx\", \"llvm::DIBuilder::GetOrCreateSubrange(long long, long long)\"},\n    {\"_ZN4llvm9DIBuilder20CreateGlobalVariableENS_9StringRefENS_6DIFileEjNS_6DITypeEbPNS_5ValueE\", \"llvm::DIBuilder::CreateGlobalVariable(llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, llvm::Value*)\"},\n    {\"_ZN4llvm9DIBuilder20CreateStaticVariableENS_12DIDescriptorENS_9StringRefES2_NS_6DIFileEjNS_6DITypeEbPNS_5ValueE\", \"llvm::DIBuilder::CreateStaticVariable(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, llvm::Value*)\"},\n    {\"_ZN4llvm9DIBuilder19CreateLocalVariableEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjNS_6DITypeEbj\", \"llvm::DIBuilder::CreateLocalVariable(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder21CreateComplexVariableEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjNS_6DITypeEPKPNS_5ValueEj\", \"llvm::DIBuilder::CreateComplexVariable(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder14CreateFunctionENS_12DIDescriptorENS_9StringRefES2_NS_6DIFileEjNS_6DITypeEbbjbPNS_8FunctionE\", \"llvm::DIBuilder::CreateFunction(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, bool, unsigned int, bool, llvm::Function*)\"},\n    {\"_ZN4llvm9DIBuilder12CreateMethodENS_12DIDescriptorENS_9StringRefES2_NS_6DIFileEjNS_6DITypeEbbjjPNS_6MDNodeEjbPNS_8FunctionE\", \"llvm::DIBuilder::CreateMethod(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, bool, unsigned int, unsigned int, llvm::MDNode*, unsigned int, bool, llvm::Function*)\"},\n    {\"_ZN4llvm9DIBuilder15CreateNameSpaceENS_12DIDescriptorENS_9StringRefENS_6DIFileEj\", \"llvm::DIBuilder::CreateNameSpace(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder18CreateLexicalBlockENS_12DIDescriptorENS_6DIFileEjj\", \"llvm::DIBuilder::CreateLexicalBlock(llvm::DIDescriptor, llvm::DIFile, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIBuilder13InsertDeclareEPNS_5ValueENS_10DIVariableEPNS_11InstructionE\", \"llvm::DIBuilder::InsertDeclare(llvm::Value*, llvm::DIVariable, llvm::Instruction*)\"},\n    {\"_ZN4llvm9DIBuilder13InsertDeclareEPNS_5ValueENS_10DIVariableEPNS_10BasicBlockE\", \"llvm::DIBuilder::InsertDeclare(llvm::Value*, llvm::DIVariable, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9DIBuilder23InsertDbgValueIntrinsicEPNS_5ValueEyNS_10DIVariableEPNS_11InstructionE\", \"llvm::DIBuilder::InsertDbgValueIntrinsic(llvm::Value*, unsigned long long, llvm::DIVariable, llvm::Instruction*)\"},\n    {\"_ZN4llvm9DIBuilder23InsertDbgValueIntrinsicEPNS_5ValueEyNS_10DIVariableEPNS_10BasicBlockE\", \"llvm::DIBuilder::InsertDbgValueIntrinsic(llvm::Value*, unsigned long long, llvm::DIVariable, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12DIDescriptorC1ENS_6DIFileE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIFile)\"},\n    {\"_ZN4llvm12DIDescriptorC2ENS_6DIFileE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIFile)\"},\n    {\"_ZN4llvm12DIDescriptorC1ENS_12DISubprogramE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DISubprogram)\"},\n    {\"_ZN4llvm12DIDescriptorC2ENS_12DISubprogramE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DISubprogram)\"},\n    {\"_ZN4llvm12DIDescriptorC1ENS_14DILexicalBlockE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DILexicalBlock)\"},\n    {\"_ZN4llvm12DIDescriptorC2ENS_14DILexicalBlockE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DILexicalBlock)\"},\n    {\"_ZN4llvm12DIDescriptorC1ENS_10DIVariableE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIVariable)\"},\n    {\"_ZN4llvm12DIDescriptorC2ENS_10DIVariableE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIVariable)\"},\n    {\"_ZN4llvm12DIDescriptorC1ENS_6DITypeE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIType)\"},\n    {\"_ZN4llvm12DIDescriptorC2ENS_6DITypeE\", \"llvm::DIDescriptor::DIDescriptor(llvm::DIType)\"},\n    {\"_ZNK4llvm12DIDescriptor14getStringFieldEj\", \"llvm::DIDescriptor::getStringField(unsigned int) const\"},\n    {\"_ZNK4llvm12DIDescriptor14getUInt64FieldEj\", \"llvm::DIDescriptor::getUInt64Field(unsigned int) const\"},\n    {\"_ZNK4llvm12DIDescriptor18getDescriptorFieldEj\", \"llvm::DIDescriptor::getDescriptorField(unsigned int) const\"},\n    {\"_ZNK4llvm12DIDescriptor22getGlobalVariableFieldEj\", \"llvm::DIDescriptor::getGlobalVariableField(unsigned int) const\"},\n    {\"_ZNK4llvm12DIDescriptor16getConstantFieldEj\", \"llvm::DIDescriptor::getConstantField(unsigned int) const\"},\n    {\"_ZNK4llvm12DIDescriptor16getFunctionFieldEj\", \"llvm::DIDescriptor::getFunctionField(unsigned int) const\"},\n    {\"_ZNK4llvm10DIVariable18getNumAddrElementsEv\", \"llvm::DIVariable::getNumAddrElements() const\"},\n    {\"_ZNK4llvm12DIDescriptor11isBasicTypeEv\", \"llvm::DIDescriptor::isBasicType() const\"},\n    {\"_ZNK4llvm12DIDescriptor13isDerivedTypeEv\", \"llvm::DIDescriptor::isDerivedType() const\"},\n    {\"_ZNK4llvm12DIDescriptor15isCompositeTypeEv\", \"llvm::DIDescriptor::isCompositeType() const\"},\n    {\"_ZNK4llvm12DIDescriptor10isVariableEv\", \"llvm::DIDescriptor::isVariable() const\"},\n    {\"_ZNK4llvm12DIDescriptor6isTypeEv\", \"llvm::DIDescriptor::isType() const\"},\n    {\"_ZNK4llvm12DIDescriptor12isSubprogramEv\", \"llvm::DIDescriptor::isSubprogram() const\"},\n    {\"_ZNK4llvm12DIDescriptor16isGlobalVariableEv\", \"llvm::DIDescriptor::isGlobalVariable() const\"},\n    {\"_ZNK4llvm12DIDescriptor8isGlobalEv\", \"llvm::DIDescriptor::isGlobal() const\"},\n    {\"_ZNK4llvm12DIDescriptor22isUnspecifiedParameterEv\", \"llvm::DIDescriptor::isUnspecifiedParameter() const\"},\n    {\"_ZNK4llvm12DIDescriptor7isScopeEv\", \"llvm::DIDescriptor::isScope() const\"},\n    {\"_ZNK4llvm12DIDescriptor23isTemplateTypeParameterEv\", \"llvm::DIDescriptor::isTemplateTypeParameter() const\"},\n    {\"_ZNK4llvm12DIDescriptor24isTemplateValueParameterEv\", \"llvm::DIDescriptor::isTemplateValueParameter() const\"},\n    {\"_ZNK4llvm12DIDescriptor13isCompileUnitEv\", \"llvm::DIDescriptor::isCompileUnit() const\"},\n    {\"_ZNK4llvm12DIDescriptor6isFileEv\", \"llvm::DIDescriptor::isFile() const\"},\n    {\"_ZNK4llvm12DIDescriptor11isNameSpaceEv\", \"llvm::DIDescriptor::isNameSpace() const\"},\n    {\"_ZNK4llvm12DIDescriptor14isLexicalBlockEv\", \"llvm::DIDescriptor::isLexicalBlock() const\"},\n    {\"_ZNK4llvm12DIDescriptor10isSubrangeEv\", \"llvm::DIDescriptor::isSubrange() const\"},\n    {\"_ZNK4llvm12DIDescriptor12isEnumeratorEv\", \"llvm::DIDescriptor::isEnumerator() const\"},\n    {\"_ZN4llvm6DITypeC1EPKNS_6MDNodeE\", \"llvm::DIType::DIType(llvm::MDNode const*)\"},\n    {\"_ZN4llvm6DITypeC2EPKNS_6MDNodeE\", \"llvm::DIType::DIType(llvm::MDNode const*)\"},\n    {\"_ZNK4llvm7DIArray14getNumElementsEv\", \"llvm::DIArray::getNumElements() const\"},\n    {\"_ZN4llvm6DIType18replaceAllUsesWithERNS_12DIDescriptorE\", \"llvm::DIType::replaceAllUsesWith(llvm::DIDescriptor&)\"},\n    {\"_ZN4llvm6DIType18replaceAllUsesWithEPNS_6MDNodeE\", \"llvm::DIType::replaceAllUsesWith(llvm::MDNode*)\"},\n    {\"_ZNK4llvm13DICompileUnit6VerifyEv\", \"llvm::DICompileUnit::Verify() const\"},\n    {\"_ZNK4llvm6DIType6VerifyEv\", \"llvm::DIType::Verify() const\"},\n    {\"_ZNK4llvm11DIBasicType6VerifyEv\", \"llvm::DIBasicType::Verify() const\"},\n    {\"_ZNK4llvm13DIDerivedType6VerifyEv\", \"llvm::DIDerivedType::Verify() const\"},\n    {\"_ZNK4llvm15DICompositeType6VerifyEv\", \"llvm::DICompositeType::Verify() const\"},\n    {\"_ZNK4llvm12DISubprogram6VerifyEv\", \"llvm::DISubprogram::Verify() const\"},\n    {\"_ZNK4llvm16DIGlobalVariable6VerifyEv\", \"llvm::DIGlobalVariable::Verify() const\"},\n    {\"_ZNK4llvm10DIVariable6VerifyEv\", \"llvm::DIVariable::Verify() const\"},\n    {\"_ZNK4llvm10DILocation6VerifyEv\", \"llvm::DILocation::Verify() const\"},\n    {\"_ZNK4llvm11DINameSpace6VerifyEv\", \"llvm::DINameSpace::Verify() const\"},\n    {\"_ZNK4llvm13DIDerivedType19getOriginalTypeSizeEv\", \"llvm::DIDerivedType::getOriginalTypeSize() const\"},\n    {\"_ZN4llvm10DIVariable19isInlinedFnArgumentEPKNS_8FunctionE\", \"llvm::DIVariable::isInlinedFnArgument(llvm::Function const*)\"},\n    {\"_ZN4llvm12DISubprogram9describesEPKNS_8FunctionE\", \"llvm::DISubprogram::describes(llvm::Function const*)\"},\n    {\"_ZNK4llvm12DISubprogram11isOptimizedEv\", \"llvm::DISubprogram::isOptimized() const\"},\n    {\"_ZNK4llvm7DIScope11getFilenameEv\", \"llvm::DIScope::getFilename() const\"},\n    {\"_ZNK4llvm7DIScope12getDirectoryEv\", \"llvm::DIScope::getDirectory() const\"},\n    {\"_ZNK4llvm12DIDescriptor5printERNS_11raw_ostreamE\", \"llvm::DIDescriptor::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm13DICompileUnit5printERNS_11raw_ostreamE\", \"llvm::DICompileUnit::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm6DIType5printERNS_11raw_ostreamE\", \"llvm::DIType::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm11DIBasicType5printERNS_11raw_ostreamE\", \"llvm::DIBasicType::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm13DIDerivedType5printERNS_11raw_ostreamE\", \"llvm::DIDerivedType::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm15DICompositeType5printERNS_11raw_ostreamE\", \"llvm::DICompositeType::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm12DISubprogram5printERNS_11raw_ostreamE\", \"llvm::DISubprogram::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm16DIGlobalVariable5printERNS_11raw_ostreamE\", \"llvm::DIGlobalVariable::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm10DIVariable5printERNS_11raw_ostreamE\", \"llvm::DIVariable::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm12DIDescriptor4dumpEv\", \"llvm::DIDescriptor::dump() const\"},\n    {\"_ZNK4llvm13DICompileUnit4dumpEv\", \"llvm::DICompileUnit::dump() const\"},\n    {\"_ZNK4llvm6DIType4dumpEv\", \"llvm::DIType::dump() const\"},\n    {\"_ZNK4llvm11DIBasicType4dumpEv\", \"llvm::DIBasicType::dump() const\"},\n    {\"_ZNK4llvm13DIDerivedType4dumpEv\", \"llvm::DIDerivedType::dump() const\"},\n    {\"_ZNK4llvm15DICompositeType4dumpEv\", \"llvm::DICompositeType::dump() const\"},\n    {\"_ZNK4llvm12DISubprogram4dumpEv\", \"llvm::DISubprogram::dump() const\"},\n    {\"_ZNK4llvm16DIGlobalVariable4dumpEv\", \"llvm::DIGlobalVariable::dump() const\"},\n    {\"_ZNK4llvm10DIVariable4dumpEv\", \"llvm::DIVariable::dump() const\"},\n    {\"_ZN4llvm9DIFactoryC1ERNS_6ModuleE\", \"llvm::DIFactory::DIFactory(llvm::Module&)\"},\n    {\"_ZN4llvm9DIFactoryC2ERNS_6ModuleE\", \"llvm::DIFactory::DIFactory(llvm::Module&)\"},\n    {\"_ZN4llvm9DIFactory14GetTagConstantEj\", \"llvm::DIFactory::GetTagConstant(unsigned int)\"},\n    {\"_ZN4llvm9DIFactory16GetOrCreateArrayEPNS_12DIDescriptorEj\", \"llvm::DIFactory::GetOrCreateArray(llvm::DIDescriptor*, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory19GetOrCreateSubrangeExx\", \"llvm::DIFactory::GetOrCreateSubrange(long long, long long)\"},\n    {\"_ZN4llvm9DIFactory26CreateUnspecifiedParameterEv\", \"llvm::DIFactory::CreateUnspecifiedParameter()\"},\n    {\"_ZN4llvm9DIFactory17CreateCompileUnitEjNS_9StringRefES1_S1_bbS1_j\", \"llvm::DIFactory::CreateCompileUnit(unsigned int, llvm::StringRef, llvm::StringRef, llvm::StringRef, bool, bool, llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory10CreateFileENS_9StringRefES1_NS_13DICompileUnitE\", \"llvm::DIFactory::CreateFile(llvm::StringRef, llvm::StringRef, llvm::DICompileUnit)\"},\n    {\"_ZN4llvm9DIFactory16CreateEnumeratorENS_9StringRefEy\", \"llvm::DIFactory::CreateEnumerator(llvm::StringRef, unsigned long long)\"},\n    {\"_ZN4llvm9DIFactory15CreateBasicTypeENS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyyjj\", \"llvm::DIFactory::CreateBasicType(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory17CreateBasicTypeExENS_12DIDescriptorENS_9StringRefENS_6DIFileEjPNS_8ConstantES5_S5_jj\", \"llvm::DIFactory::CreateBasicTypeEx(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::Constant*, llvm::Constant*, llvm::Constant*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory20CreateArtificialTypeENS_6DITypeE\", \"llvm::DIFactory::CreateArtificialType(llvm::DIType)\"},\n    {\"_ZN4llvm9DIFactory17CreateDerivedTypeEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyyjNS_6DITypeE\", \"llvm::DIFactory::CreateDerivedType(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned int, llvm::DIType)\"},\n    {\"_ZN4llvm9DIFactory19CreateDerivedTypeExEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjPNS_8ConstantES5_S5_jNS_6DITypeE\", \"llvm::DIFactory::CreateDerivedTypeEx(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::Constant*, llvm::Constant*, llvm::Constant*, unsigned int, llvm::DIType)\"},\n    {\"_ZN4llvm9DIFactory19CreateCompositeTypeEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjyyyjNS_6DITypeENS_7DIArrayEjPNS_6MDNodeE\", \"llvm::DIFactory::CreateCompositeType(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned int, llvm::DIType, llvm::DIArray, unsigned int, llvm::MDNode*)\"},\n    {\"_ZN4llvm9DIFactory19CreateTemporaryTypeEv\", \"llvm::DIFactory::CreateTemporaryType()\"},\n    {\"_ZN4llvm9DIFactory19CreateTemporaryTypeENS_6DIFileE\", \"llvm::DIFactory::CreateTemporaryType(llvm::DIFile)\"},\n    {\"_ZN4llvm9DIFactory21CreateCompositeTypeExEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjPNS_8ConstantES5_S5_jNS_6DITypeENS_7DIArrayEjPNS_6MDNodeE\", \"llvm::DIFactory::CreateCompositeTypeEx(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::Constant*, llvm::Constant*, llvm::Constant*, unsigned int, llvm::DIType, llvm::DIArray, unsigned int, llvm::MDNode*)\"},\n    {\"_ZN4llvm9DIFactory16CreateSubprogramENS_12DIDescriptorENS_9StringRefES2_S2_NS_6DIFileEjNS_6DITypeEbbjjS4_jbPNS_8FunctionE\", \"llvm::DIFactory::CreateSubprogram(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, bool, unsigned int, unsigned int, llvm::DIType, unsigned int, bool, llvm::Function*)\"},\n    {\"_ZN4llvm9DIFactory26CreateSubprogramDefinitionERNS_12DISubprogramE\", \"llvm::DIFactory::CreateSubprogramDefinition(llvm::DISubprogram&)\"},\n    {\"_ZN4llvm9DIFactory20CreateGlobalVariableENS_12DIDescriptorENS_9StringRefES2_S2_NS_6DIFileEjNS_6DITypeEbbPNS_14GlobalVariableE\", \"llvm::DIFactory::CreateGlobalVariable(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, bool, llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm9DIFactory20CreateGlobalVariableENS_12DIDescriptorENS_9StringRefES2_S2_NS_6DIFileEjNS_6DITypeEbbPNS_8ConstantE\", \"llvm::DIFactory::CreateGlobalVariable(llvm::DIDescriptor, llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, bool, llvm::Constant*)\"},\n    {\"_ZN4llvm27getOrInsertFnSpecificMDNodeERNS_6ModuleENS_9StringRefE\", \"llvm::getOrInsertFnSpecificMDNode(llvm::Module&, llvm::StringRef)\"},\n    {\"_ZN4llvm19getFnSpecificMDNodeERKNS_6ModuleENS_9StringRefE\", \"llvm::getFnSpecificMDNode(llvm::Module const&, llvm::StringRef)\"},\n    {\"_ZN4llvm9DIFactory14CreateVariableEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjNS_6DITypeEbj\", \"llvm::DIFactory::CreateVariable(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, bool, unsigned int)\"},\n    {\"_ZN4llvm15getDISubprogramEPKNS_6MDNodeE\", \"llvm::getDISubprogram(llvm::MDNode const*)\"},\n    {\"_ZN4llvm9DIFactory21CreateComplexVariableEjNS_12DIDescriptorENS_9StringRefENS_6DIFileEjNS_6DITypeEPKPNS_5ValueEj\", \"llvm::DIFactory::CreateComplexVariable(unsigned int, llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int, llvm::DIType, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory18CreateLexicalBlockENS_12DIDescriptorENS_6DIFileEjj\", \"llvm::DIFactory::CreateLexicalBlock(llvm::DIDescriptor, llvm::DIFile, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory15CreateNameSpaceENS_12DIDescriptorENS_9StringRefENS_6DIFileEj\", \"llvm::DIFactory::CreateNameSpace(llvm::DIDescriptor, llvm::StringRef, llvm::DIFile, unsigned int)\"},\n    {\"_ZN4llvm9DIFactory14CreateLocationEjjNS_7DIScopeENS_10DILocationE\", \"llvm::DIFactory::CreateLocation(unsigned int, unsigned int, llvm::DIScope, llvm::DILocation)\"},\n    {\"_ZN4llvm9DIFactory13InsertDeclareEPNS_5ValueENS_10DIVariableEPNS_11InstructionE\", \"llvm::DIFactory::InsertDeclare(llvm::Value*, llvm::DIVariable, llvm::Instruction*)\"},\n    {\"_ZN4llvm9DIFactory13InsertDeclareEPNS_5ValueENS_10DIVariableEPNS_10BasicBlockE\", \"llvm::DIFactory::InsertDeclare(llvm::Value*, llvm::DIVariable, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9DIFactory23InsertDbgValueIntrinsicEPNS_5ValueEyNS_10DIVariableEPNS_11InstructionE\", \"llvm::DIFactory::InsertDbgValueIntrinsic(llvm::Value*, unsigned long long, llvm::DIVariable, llvm::Instruction*)\"},\n    {\"_ZN4llvm9DIFactory23InsertDbgValueIntrinsicEPNS_5ValueEyNS_10DIVariableEPNS_10BasicBlockE\", \"llvm::DIFactory::InsertDbgValueIntrinsic(llvm::Value*, unsigned long long, llvm::DIVariable, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9DIFactory10RecordTypeENS_6DITypeE\", \"llvm::DIFactory::RecordType(llvm::DIType)\"},\n    {\"_ZN4llvm15DebugInfoFinder13processModuleERNS_6ModuleE\", \"llvm::DebugInfoFinder::processModule(llvm::Module&)\"},\n    {\"_ZN4llvm15DebugInfoFinder14processDeclareEPNS_14DbgDeclareInstE\", \"llvm::DebugInfoFinder::processDeclare(llvm::DbgDeclareInst*)\"},\n    {\"_ZN4llvm15DebugInfoFinder14addCompileUnitENS_13DICompileUnitE\", \"llvm::DebugInfoFinder::addCompileUnit(llvm::DICompileUnit)\"},\n    {\"_ZN4llvm15DebugInfoFinder17processSubprogramENS_12DISubprogramE\", \"llvm::DebugInfoFinder::processSubprogram(llvm::DISubprogram)\"},\n    {\"_ZN4llvm15DebugInfoFinder19processLexicalBlockENS_14DILexicalBlockE\", \"llvm::DebugInfoFinder::processLexicalBlock(llvm::DILexicalBlock)\"},\n    {\"_ZN4llvm15DebugInfoFinder15processLocationENS_10DILocationE\", \"llvm::DebugInfoFinder::processLocation(llvm::DILocation)\"},\n    {\"_ZN4llvm15DebugInfoFinder17addGlobalVariableENS_16DIGlobalVariableE\", \"llvm::DebugInfoFinder::addGlobalVariable(llvm::DIGlobalVariable)\"},\n    {\"_ZN4llvm15DebugInfoFinder11processTypeENS_6DITypeE\", \"llvm::DebugInfoFinder::processType(llvm::DIType)\"},\n    {\"_ZN4llvm15DebugInfoFinder7addTypeENS_6DITypeE\", \"llvm::DebugInfoFinder::addType(llvm::DIType)\"},\n    {\"_ZN4llvm15DebugInfoFinder13addSubprogramENS_12DISubprogramE\", \"llvm::DebugInfoFinder::addSubprogram(llvm::DISubprogram)\"},\n    {\"_ZN4llvm15getLocationInfoEPKNS_5ValueERSsS3_RjS3_S3_\", \"llvm::getLocationInfo(llvm::Value const*, std::string&, std::string&, unsigned int&, std::string&, std::string&)\"},\n    {\"_ZN4llvm18getDICompositeTypeENS_6DITypeE\", \"llvm::getDICompositeType(llvm::DIType)\"},\n    {\"_ZNK4llvm6DIType11getFilenameEv\", \"llvm::DIType::getFilename() const\"},\n    {\"_ZNK4llvm6DIType14getCompileUnitEv\", \"llvm::DIType::getCompileUnit() const\"},\n    {\"_ZN4llvm13DICompileUnitD1Ev\", \"llvm::DICompileUnit::~DICompileUnit()\"},\n    {\"_ZNK4llvm12DISubprogram14getCompileUnitEv\", \"llvm::DISubprogram::getCompileUnit() const\"},\n    {\"_ZN4llvm15DICompositeTypeD1Ev\", \"llvm::DICompositeType::~DICompositeType()\"},\n    {\"_ZNK4llvm16DIGlobalVariable14getCompileUnitEv\", \"llvm::DIGlobalVariable::getCompileUnit() const\"},\n    {\"_ZN4llvm6DITypeD1Ev\", \"llvm::DIType::~DIType()\"},\n    {\"_ZNK4llvm10DIVariable14getCompileUnitEv\", \"llvm::DIVariable::getCompileUnit() const\"},\n    {\"_ZNK4llvm11DINameSpace14getCompileUnitEv\", \"llvm::DINameSpace::getCompileUnit() const\"},\n    {\"_ZNK4llvm6DIType7isValidEv\", \"llvm::DIType::isValid() const\"},\n    {\"_ZN4llvm13DIDerivedTypeD1Ev\", \"llvm::DIDerivedType::~DIDerivedType()\"},\n    {\"_ZNK4llvm14DILexicalBlock11getFilenameEv\", \"llvm::DILexicalBlock::getFilename() const\"},\n    {\"_ZN4llvm14DILexicalBlockD1Ev\", \"llvm::DILexicalBlock::~DILexicalBlock()\"},\n    {\"_ZNK4llvm12DISubprogram11getFilenameEv\", \"llvm::DISubprogram::getFilename() const\"},\n    {\"_ZNK4llvm11DINameSpace11getFilenameEv\", \"llvm::DINameSpace::getFilename() const\"},\n    {\"_ZN4llvm11DINameSpaceD1Ev\", \"llvm::DINameSpace::~DINameSpace()\"},\n    {\"_ZN4llvm6DIFileD1Ev\", \"llvm::DIFile::~DIFile()\"},\n    {\"_ZNK4llvm14DILexicalBlock12getDirectoryEv\", \"llvm::DILexicalBlock::getDirectory() const\"},\n    {\"_ZNK4llvm12DISubprogram12getDirectoryEv\", \"llvm::DISubprogram::getDirectory() const\"},\n    {\"_ZNK4llvm11DINameSpace12getDirectoryEv\", \"llvm::DINameSpace::getDirectory() const\"},\n    {\"_ZNK4llvm6DIType12getDirectoryEv\", \"llvm::DIType::getDirectory() const\"},\n    {\"_ZN4llvm11DIBasicTypeD1Ev\", \"llvm::DIBasicType::~DIBasicType()\"},\n    {\"_ZN4llvm6DITypeD0Ev\", \"llvm::DIType::~DIType()\"},\n    {\"_ZN4llvm8CallInstC2IPPNS_5ValueEEES3_T_S5_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CallInst::CallInst<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInstC2IPPNS_5ValueEEES3_T_S5_RKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15DICompositeTypeD0Ev\", \"llvm::DICompositeType::~DICompositeType()\"},\n    {\"_ZN4llvm13DIDerivedTypeD0Ev\", \"llvm::DIDerivedType::~DIDerivedType()\"},\n    {\"_ZN4llvm11DIBasicTypeD0Ev\", \"llvm::DIBasicType::~DIBasicType()\"},\n    {\"_ZN4llvm6DIFileD0Ev\", \"llvm::DIFile::~DIFile()\"},\n    {\"_ZN4llvm11DINameSpaceD0Ev\", \"llvm::DINameSpace::~DINameSpace()\"},\n    {\"_ZN4llvm13DICompileUnitD0Ev\", \"llvm::DICompileUnit::~DICompileUnit()\"},\n    {\"_ZN4llvm14DILexicalBlockD0Ev\", \"llvm::DILexicalBlock::~DILexicalBlock()\"},\n    {\"_ZNK4llvm12DIDescriptor10getFieldAsINS_15DICompositeTypeEEET_j\", \"llvm::DICompositeType llvm::DIDescriptor::getFieldAs<llvm::DICompositeType>(unsigned int) const\"},\n    {\"_ZN4llvm21initializeIVUsersPassERNS_12PassRegistryE\", \"llvm::initializeIVUsersPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm17createIVUsersPassEv\", \"llvm::createIVUsersPass()\"},\n    {\"_ZN4llvm7IVUsersC1Ev\", \"llvm::IVUsers::IVUsers()\"},\n    {\"_ZN4llvm7IVUsers21AddUsersIfInterestingEPNS_11InstructionE\", \"llvm::IVUsers::AddUsersIfInteresting(llvm::Instruction*)\"},\n    {\"_Z13isInterestingPKN4llvm4SCEVEPKNS_11InstructionEPKNS_4LoopEPNS_15ScalarEvolutionE\", \"isInteresting(llvm::SCEV const*, llvm::Instruction const*, llvm::Loop const*, llvm::ScalarEvolution*)\"},\n    {\"_ZN4llvm7IVUsers7AddUserEPNS_11InstructionEPNS_5ValueE\", \"llvm::IVUsers::AddUser(llvm::Instruction*, llvm::Value*)\"},\n    {\"_ZN4llvm7IVUsersC2Ev\", \"llvm::IVUsers::IVUsers()\"},\n    {\"_ZNK4llvm7IVUsers16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::IVUsers::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm7IVUsers9runOnLoopEPNS_4LoopERNS_13LPPassManagerE\", \"llvm::IVUsers::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZNK4llvm7IVUsers5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::IVUsers::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm7IVUsers18getReplacementExprERKNS_11IVStrideUseE\", \"llvm::IVUsers::getReplacementExpr(llvm::IVStrideUse const&) const\"},\n    {\"_ZNK4llvm7IVUsers4dumpEv\", \"llvm::IVUsers::dump() const\"},\n    {\"_ZN4llvm7IVUsers13releaseMemoryEv\", \"llvm::IVUsers::releaseMemory()\"},\n    {\"_ZNK4llvm7IVUsers7getExprERKNS_11IVStrideUseE\", \"llvm::IVUsers::getExpr(llvm::IVStrideUse const&) const\"},\n    {\"_ZNK4llvm7IVUsers9getStrideERKNS_11IVStrideUseEPKNS_4LoopE\", \"llvm::IVUsers::getStride(llvm::IVStrideUse const&, llvm::Loop const*) const\"},\n    {\"_Z17findAddRecForLoopPKN4llvm4SCEVEPKNS_4LoopE\", \"findAddRecForLoop(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm11IVStrideUse18transformToPostIncEPKNS_4LoopE\", \"llvm::IVStrideUse::transformToPostInc(llvm::Loop const*)\"},\n    {\"_ZN4llvm11IVStrideUse7deletedEv\", \"llvm::IVStrideUse::deleted()\"},\n    {\"_ZN4llvm11IVStrideUseD1Ev\", \"llvm::IVStrideUse::~IVStrideUse()\"},\n    {\"_ZN4llvm11IVStrideUseD0Ev\", \"llvm::IVStrideUse::~IVStrideUse()\"},\n    {\"_ZN4llvm7IVUsersD1Ev\", \"llvm::IVUsers::~IVUsers()\"},\n    {\"_ZN4llvm7IVUsersD0Ev\", \"llvm::IVUsers::~IVUsers()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_7IVUsersEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::IVUsers>()\"},\n    {\"_ZN4llvm11callIsSmallEPKNS_8FunctionE\", \"llvm::callIsSmall(llvm::Function const*)\"},\n    {\"_ZN4llvm11CodeMetrics17analyzeBasicBlockEPKNS_10BasicBlockE\", \"llvm::CodeMetrics::analyzeBasicBlock(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm11CodeMetrics29CountCodeReductionForConstantEPNS_5ValueE\", \"llvm::CodeMetrics::CountCodeReductionForConstant(llvm::Value*)\"},\n    {\"_ZN4llvm11CodeMetrics27CountCodeReductionForAllocaEPNS_5ValueE\", \"llvm::CodeMetrics::CountCodeReductionForAlloca(llvm::Value*)\"},\n    {\"_ZN4llvm11CodeMetrics15analyzeFunctionEPNS_8FunctionE\", \"llvm::CodeMetrics::analyzeFunction(llvm::Function*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer12FunctionInfo15analyzeFunctionEPNS_8FunctionE\", \"llvm::InlineCostAnalyzer::FunctionInfo::analyzeFunction(llvm::Function*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer12FunctionInfo11NeverInlineEv\", \"llvm::InlineCostAnalyzer::FunctionInfo::NeverInline()\"},\n    {\"_ZN4llvm18InlineCostAnalyzer22getSpecializationBonusEPNS_8FunctionERNS_15SmallVectorImplIjEE\", \"llvm::InlineCostAnalyzer::getSpecializationBonus(llvm::Function*, llvm::SmallVectorImpl<unsigned int>&)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer21CountBonusForConstantEPNS_5ValueEPNS_8ConstantE\", \"llvm::InlineCostAnalyzer::CountBonusForConstant(llvm::Value*, llvm::Constant*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer21ConstantFunctionBonusENS_8CallSiteEPNS_8ConstantE\", \"llvm::InlineCostAnalyzer::ConstantFunctionBonus(llvm::CallSite, llvm::Constant*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer13getInlineSizeENS_8CallSiteEPNS_8FunctionE\", \"llvm::InlineCostAnalyzer::getInlineSize(llvm::CallSite, llvm::Function*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer16getInlineBonusesENS_8CallSiteEPNS_8FunctionE\", \"llvm::InlineCostAnalyzer::getInlineBonuses(llvm::CallSite, llvm::Function*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer13getInlineCostENS_8CallSiteERNS_11SmallPtrSetIPKNS_8FunctionELj16EEE\", \"llvm::InlineCostAnalyzer::getInlineCost(llvm::CallSite, llvm::SmallPtrSet<llvm::Function const*, 16u>&)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer13getInlineCostENS_8CallSiteEPNS_8FunctionERNS_11SmallPtrSetIPKS2_Lj16EEE\", \"llvm::InlineCostAnalyzer::getInlineCost(llvm::CallSite, llvm::Function*, llvm::SmallPtrSet<llvm::Function const*, 16u>&)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer21getSpecializationCostEPNS_8FunctionERNS_15SmallVectorImplIjEE\", \"llvm::InlineCostAnalyzer::getSpecializationCost(llvm::Function*, llvm::SmallVectorImpl<unsigned int>&)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer20getInlineFudgeFactorENS_8CallSiteE\", \"llvm::InlineCostAnalyzer::getInlineFudgeFactor(llvm::CallSite)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer18growCachedCostInfoEPNS_8FunctionES2_\", \"llvm::InlineCostAnalyzer::growCachedCostInfo(llvm::Function*, llvm::Function*)\"},\n    {\"_ZN4llvm18InlineCostAnalyzer5clearEv\", \"llvm::InlineCostAnalyzer::clear()\"},\n    {\"_ZNSt6vectorIN4llvm18InlineCostAnalyzer7ArgInfoESaIS2_EE7reserveEm\", \"std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> >::reserve(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E5clearEv\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::clear()\"},\n    {\"_ZN4llvm8DenseMapINS_18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS4_EENS_12DenseMapInfoIS6_EEEES6_NS9_ISB_EESA_E16shrink_and_clearEv\", \"llvm::DenseMap<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >, llvm::InlineCostAnalyzer::FunctionInfo, llvm::DenseMapInfo<llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> > >, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >::shrink_and_clear()\"},\n    {\"_ZNSt6vectorIN4llvm18InlineCostAnalyzer7ArgInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::InlineCostAnalyzer::ArgInfo*, std::vector<llvm::InlineCostAnalyzer::ArgInfo, std::allocator<llvm::InlineCostAnalyzer::ArgInfo> > >, llvm::InlineCostAnalyzer::ArgInfo const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::BasicBlock const*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::BasicBlock const* const&, unsigned int const&, std::pair<llvm::BasicBlock const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10BasicBlockEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock const*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SimplifyAddInstEPNS_5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyAddInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifyAddInstPN4llvm5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyAddInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm15SimplifySubInstEPNS_5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifySubInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifySubInstPN4llvm5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifySubInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm15SimplifyMulInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyMulInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifyMulInstPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyMulInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm16SimplifySDivInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifySDivInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm16SimplifyUDivInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyUDivInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm16SimplifyFDivInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyFDivInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm15SimplifyShlInstEPNS_5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyShlInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifyShlInstPN4llvm5ValueES1_bbPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyShlInst(llvm::Value*, llvm::Value*, bool, bool, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm16SimplifyLShrInstEPNS_5ValueES1_bPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyLShrInst(llvm::Value*, llvm::Value*, bool, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z16SimplifyLShrInstPN4llvm5ValueES1_bPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyLShrInst(llvm::Value*, llvm::Value*, bool, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm16SimplifyAShrInstEPNS_5ValueES1_bPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyAShrInst(llvm::Value*, llvm::Value*, bool, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z16SimplifyAShrInstPN4llvm5ValueES1_bPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyAShrInst(llvm::Value*, llvm::Value*, bool, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm15SimplifyAndInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyAndInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifyAndInstPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyAndInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm14SimplifyOrInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyOrInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z14SimplifyOrInstPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyOrInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm15SimplifyXorInstEPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyXorInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z15SimplifyXorInstPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyXorInst(llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm16SimplifyICmpInstEjPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyICmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z16SimplifyICmpInstjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyICmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm16SimplifyFCmpInstEjPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyFCmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z16SimplifyFCmpInstjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyFCmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm18SimplifySelectInstEPNS_5ValueES1_S1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifySelectInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm15SimplifyGEPInstEPKPNS_5ValueEjPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyGEPInst(llvm::Value* const*, unsigned int, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm13SimplifyBinOpEjPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyBinOp(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z13SimplifyBinOpjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyBinOp(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm15SimplifyCmpInstEjPNS_5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyCmpInst(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm19SimplifyInstructionEPNS_11InstructionEPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::SimplifyInstruction(llvm::Instruction*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm25ReplaceAndSimplifyAllUsesEPNS_11InstructionEPNS_5ValueEPKNS_10DataLayoutEPKNS_13DominatorTreeE\", \"llvm::ReplaceAndSimplifyAllUses(llvm::Instruction*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*)\"},\n    {\"_Z24SimplifyAssociativeBinOpjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyAssociativeBinOp(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z21ThreadBinOpOverSelectjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"ThreadBinOpOverSelect(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z18ThreadBinOpOverPHIjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"ThreadBinOpOverPHI(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z19ThreadCmpOverSelectN4llvm7CmpInst9PredicateEPNS_5ValueES3_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"ThreadCmpOverSelect(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z16ThreadCmpOverPHIN4llvm7CmpInst9PredicateEPNS_5ValueES3_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"ThreadCmpOverPHI(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z14FactorizeBinOpjPN4llvm5ValueES1_jPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"FactorizeBinOp(unsigned int, llvm::Value*, llvm::Value*, unsigned int, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z11ExpandBinOpjPN4llvm5ValueES1_jPKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"ExpandBinOp(unsigned int, llvm::Value*, llvm::Value*, unsigned int, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z13SimplifyShiftjPN4llvm5ValueES1_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyShift(unsigned int, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_Z11SimplifyDivN4llvm11Instruction9BinaryOpsEPNS_5ValueES3_PKNS_10DataLayoutEPKNS_13DominatorTreeEj\", \"SimplifyDiv(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::DataLayout const*, llvm::DominatorTree const*, unsigned int)\"},\n    {\"_ZN4llvm12PatternMatch9not_matchINS0_14specificval_tyEE5matchINS_5ValueEEEbPT_\", \"bool llvm::PatternMatch::not_match<llvm::PatternMatch::specificval_ty>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch11cst_pred_tyINS0_11is_all_onesEE5matchINS_5ValueEEEbPT_\", \"bool llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_all_ones>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_14specificval_tyENS0_11cst_pred_tyINS0_6is_oneEEELj20EE5matchINS_5ValueEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::specificval_ty, llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_one>, 20u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch11cst_pred_tyINS0_6is_oneEE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_one>::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_14specificval_tyENS0_17constantint_matchILx2EEELj12EE5matchINS_5ValueEEEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::specificval_ty, llvm::PatternMatch::constantint_match<2ll>, 12u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm27initializeLazyValueInfoPassERNS_12PassRegistryE\", \"llvm::initializeLazyValueInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createLazyValueInfoPassEv\", \"llvm::createLazyValueInfoPass()\"},\n    {\"_ZN4llvm13LazyValueInfo13runOnFunctionERNS_8FunctionE\", \"llvm::LazyValueInfo::runOnFunction(llvm::Function&)\"},\n    {\"_Z8getCacheRPv\", \"getCache(void*&)\"},\n    {\"_ZN4llvm13LazyValueInfo13releaseMemoryEv\", \"llvm::LazyValueInfo::releaseMemory()\"},\n    {\"_ZN4llvm13LazyValueInfo11getConstantEPNS_5ValueEPNS_10BasicBlockE\", \"llvm::LazyValueInfo::getConstant(llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm13LazyValueInfo17getConstantOnEdgeEPNS_5ValueEPNS_10BasicBlockES4_\", \"llvm::LazyValueInfo::getConstantOnEdge(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm13LazyValueInfo18getPredicateOnEdgeEjPNS_5ValueEPNS_8ConstantEPNS_10BasicBlockES6_\", \"llvm::LazyValueInfo::getPredicateOnEdge(unsigned int, llvm::Value*, llvm::Constant*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm13LazyValueInfo10threadEdgeEPNS_10BasicBlockES2_S2_\", \"llvm::LazyValueInfo::threadEdge(llvm::BasicBlock*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm13LazyValueInfo10eraseBlockEPNS_10BasicBlockE\", \"llvm::LazyValueInfo::eraseBlock(llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_114LVIValueHandleD1Ev\", \"(anonymous namespace)::LVIValueHandle::~LVIValueHandle()\"},\n    {\"_ZN12_GLOBAL__N_114LVIValueHandleD0Ev\", \"(anonymous namespace)::LVIValueHandle::~LVIValueHandle()\"},\n    {\"_ZN12_GLOBAL__N_114LVIValueHandle7deletedEv\", \"(anonymous namespace)::LVIValueHandle::deleted()\"},\n    {\"_ZN12_GLOBAL__N_114LVIValueHandle19allUsesReplacedWithEPN4llvm5ValueE\", \"(anonymous namespace)::LVIValueHandle::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_114LVIValueHandleESt3mapINS_11AssertingVHINS_10BasicBlockEEENS1_13LVILatticeValESt4lessIS6_ESaISt4pairIKS6_S7_EEENS_12DenseMapInfoIS2_EENSF_ISE_EEE15LookupBucketForERKS2_RPSA_IS2_SE_E\", \"llvm::DenseMap<(anonymous namespace)::LVIValueHandle, std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >, llvm::DenseMapInfo<(anonymous namespace)::LVIValueHandle>, llvm::DenseMapInfo<std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > > > >::LookupBucketFor((anonymous namespace)::LVIValueHandle const&, std::pair<(anonymous namespace)::LVIValueHandle, std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > > >*&) const\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_10BasicBlockEEESt4pairIKS3_N12_GLOBAL__N_113LVILatticeValEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::AssertingVH<llvm::BasicBlock>, std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal>, std::_Select1st<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >*)\"},\n    {\"_ZN4llvm8DenseMapIN12_GLOBAL__N_114LVIValueHandleESt3mapINS_11AssertingVHINS_10BasicBlockEEENS1_13LVILatticeValESt4lessIS6_ESaISt4pairIKS6_S7_EEENS_12DenseMapInfoIS2_EENSF_ISE_EEEixERKS2_\", \"llvm::DenseMap<(anonymous namespace)::LVIValueHandle, std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >, llvm::DenseMapInfo<(anonymous namespace)::LVIValueHandle>, llvm::DenseMapInfo<std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > > > >::operator[]((anonymous namespace)::LVIValueHandle const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_10BasicBlockEEESt4pairIKS3_N12_GLOBAL__N_113LVILatticeValEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_\", \"std::_Rb_tree<llvm::AssertingVH<llvm::BasicBlock>, std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal>, std::_Select1st<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > const*, std::_Rb_tree_node<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_10BasicBlockEEESt4pairIKS3_N12_GLOBAL__N_113LVILatticeValEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE14_M_create_nodeERKS8_\", \"std::_Rb_tree<llvm::AssertingVH<llvm::BasicBlock>, std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal>, std::_Select1st<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >::_M_create_node(std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> const&)\"},\n    {\"_ZN12_GLOBAL__N_118LazyValueInfoCache12getEdgeValueEPN4llvm5ValueEPNS1_10BasicBlockES5_RNS_13LVILatticeValE\", \"(anonymous namespace)::LazyValueInfoCache::getEdgeValue(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, (anonymous namespace)::LVILatticeVal&)\"},\n    {\"_ZN12_GLOBAL__N_118LazyValueInfoCache5solveEv\", \"(anonymous namespace)::LazyValueInfoCache::solve()\"},\n    {\"_ZNSt3mapIN4llvm11AssertingVHINS0_10BasicBlockEEEN12_GLOBAL__N_113LVILatticeValESt4lessIS3_ESaISt4pairIKS3_S5_EEEixERS9_\", \"std::map<llvm::AssertingVH<llvm::BasicBlock>, (anonymous namespace)::LVILatticeVal, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >::operator[](llvm::AssertingVH<llvm::BasicBlock> const&)\"},\n    {\"_ZN12_GLOBAL__N_118LazyValueInfoCache13hasBlockValueEPN4llvm5ValueEPNS1_10BasicBlockE\", \"(anonymous namespace)::LazyValueInfoCache::hasBlockValue(llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_118LazyValueInfoCache13getBlockValueEPN4llvm5ValueEPNS1_10BasicBlockE\", \"(anonymous namespace)::LazyValueInfoCache::getBlockValue(llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN12_GLOBAL__N_113LVILatticeVal17markConstantRangeEN4llvm13ConstantRangeE\", \"(anonymous namespace)::LVILatticeVal::markConstantRange(llvm::ConstantRange)\"},\n    {\"_ZN12_GLOBAL__N_113LVILatticeVal3getEPN4llvm8ConstantE\", \"(anonymous namespace)::LVILatticeVal::get(llvm::Constant*)\"},\n    {\"_ZN12_GLOBAL__N_113LVILatticeVal15markNotConstantEPN4llvm8ConstantE\", \"(anonymous namespace)::LVILatticeVal::markNotConstant(llvm::Constant*)\"},\n    {\"_ZN12_GLOBAL__N_113LVILatticeVal7mergeInERKS0_\", \"(anonymous namespace)::LVILatticeVal::mergeIn((anonymous namespace)::LVILatticeVal const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_10BasicBlockEEESt4pairIKS3_N12_GLOBAL__N_113LVILatticeValEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::AssertingVH<llvm::BasicBlock>, std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal>, std::_Select1st<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> >, std::less<llvm::AssertingVH<llvm::BasicBlock> >, std::allocator<std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> > >::_M_insert_unique(std::pair<llvm::AssertingVH<llvm::BasicBlock> const, (anonymous namespace)::LVILatticeVal> const&)\"},\n    {\"_ZN12_GLOBAL__N_113LVILatticeVal8getRangeEN4llvm13ConstantRangeE\", \"(anonymous namespace)::LVILatticeVal::getRange(llvm::ConstantRange)\"},\n    {\"_ZN4llvm13LazyValueInfoD1Ev\", \"llvm::LazyValueInfo::~LazyValueInfo()\"},\n    {\"_ZN4llvm13LazyValueInfoD0Ev\", \"llvm::LazyValueInfo::~LazyValueInfo()\"},\n    {\"_ZNK4llvm13LazyValueInfo16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LazyValueInfo::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE15_M_range_insertINS0_12SuccIteratorIPNS0_14TerminatorInstES1_EEEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EET_SE_St20forward_iterator_tag\", \"void std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_range_insert<llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock>, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock>, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEEcNS_12DenseMapInfoIS7_EENS8_IcEEE4findERKS7_\", \"llvm::DenseMap<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> >, llvm::DenseMapInfo<char> >::find(std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEcNS_12DenseMapInfoIS2_EENS3_IcEEE6insertERKSt4pairIS2_cE\", \"llvm::DenseMap<llvm::Value*, char, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::Value*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEcNS_12DenseMapInfoIS2_EENS3_IcEEE16InsertIntoBucketERKS2_RKcPSt4pairIS2_cE\", \"llvm::DenseMap<llvm::Value*, char, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::Value* const&, char const&, std::pair<llvm::Value*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEcNS_12DenseMapInfoIS2_EENS3_IcEEE4growEj\", \"llvm::DenseMap<llvm::Value*, char, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZNSt5dequeISt4pairIPN4llvm10BasicBlockEPNS1_5ValueEESaIS6_EE9push_backERKS6_\", \"std::deque<std::pair<llvm::BasicBlock*, llvm::Value*>, std::allocator<std::pair<llvm::BasicBlock*, llvm::Value*> > >::push_back(std::pair<llvm::BasicBlock*, llvm::Value*> const&)\"},\n    {\"_ZNSt5dequeISt4pairIPN4llvm10BasicBlockEPNS1_5ValueEESaIS6_EE17_M_reallocate_mapEmb\", \"std::deque<std::pair<llvm::BasicBlock*, llvm::Value*>, std::allocator<std::pair<llvm::BasicBlock*, llvm::Value*> > >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZN4llvm8DenseMapISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEEcNS_12DenseMapInfoIS7_EENS8_IcEEE6insertERKS1_IS7_cE\", \"llvm::DenseMap<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> >, llvm::DenseMapInfo<char> >::insert(std::pair<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char> const&)\"},\n    {\"_ZN4llvm8DenseMapISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEEcNS_12DenseMapInfoIS7_EENS8_IcEEE16InsertIntoBucketERKS7_RKcPS1_IS7_cE\", \"llvm::DenseMap<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> >, llvm::DenseMapInfo<char> >::InsertIntoBucket(std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> const&, char const&, std::pair<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEEcNS_12DenseMapInfoIS7_EENS8_IcEEE4growEj\", \"llvm::DenseMap<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> >, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseSetISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEENS_12DenseMapInfoIS7_EEE5clearEv\", \"llvm::DenseSet<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> > >::clear()\"},\n    {\"_ZN4llvm8DenseMapISt4pairINS_11AssertingVHINS_10BasicBlockEEEPNS_5ValueEEcNS_12DenseMapInfoIS7_EENS8_IcEEE16shrink_and_clearEv\", \"llvm::DenseMap<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*>, char, llvm::DenseMapInfo<std::pair<llvm::AssertingVH<llvm::BasicBlock>, llvm::Value*> >, llvm::DenseMapInfo<char> >::shrink_and_clear()\"},\n    {\"_ZNSt11_Deque_baseISt4pairIPN4llvm10BasicBlockEPNS1_5ValueEESaIS6_EE17_M_initialize_mapEm\", \"std::_Deque_base<std::pair<llvm::BasicBlock*, llvm::Value*>, std::allocator<std::pair<llvm::BasicBlock*, llvm::Value*> > >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeISt4pairIPN4llvm10BasicBlockEPNS1_5ValueEESaIS6_EEC2ERKS8_\", \"std::deque<std::pair<llvm::BasicBlock*, llvm::Value*>, std::allocator<std::pair<llvm::BasicBlock*, llvm::Value*> > >::deque(std::deque<std::pair<llvm::BasicBlock*, llvm::Value*>, std::allocator<std::pair<llvm::BasicBlock*, llvm::Value*> > > const&)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_13LazyValueInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LazyValueInfo>()\"},\n    {\"_ZN4llvm27isSafeToLoadUnconditionallyEPNS_5ValueEPNS_11InstructionEjPKNS_10DataLayoutE\", \"llvm::isSafeToLoadUnconditionally(llvm::Value*, llvm::Instruction*, unsigned int, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm24FindAvailableLoadedValueEPNS_5ValueEPNS_10BasicBlockERNS_14ilist_iteratorINS_11InstructionEEEjPNS_13AliasAnalysisE\", \"llvm::FindAvailableLoadedValue(llvm::Value*, llvm::BasicBlock*, llvm::ilist_iterator<llvm::Instruction>&, unsigned int, llvm::AliasAnalysis*)\"},\n    {\"_ZN4llvm22initializeLoopInfoPassERNS_12PassRegistryE\", \"llvm::initializeLoopInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm4Loop15isLoopInvariantEPNS_5ValueE\", \"llvm::Loop::isLoopInvariant(llvm::Value*) const\"},\n    {\"_ZNK4llvm4Loop24hasLoopInvariantOperandsEPNS_11InstructionE\", \"llvm::Loop::hasLoopInvariantOperands(llvm::Instruction*) const\"},\n    {\"_ZNK4llvm4Loop17makeLoopInvariantEPNS_5ValueERbPNS_11InstructionE\", \"llvm::Loop::makeLoopInvariant(llvm::Value*, bool&, llvm::Instruction*) const\"},\n    {\"_ZNK4llvm4Loop17makeLoopInvariantEPNS_11InstructionERbS2_\", \"llvm::Loop::makeLoopInvariant(llvm::Instruction*, bool&, llvm::Instruction*) const\"},\n    {\"_ZNK4llvm4Loop29getCanonicalInductionVariableEv\", \"llvm::Loop::getCanonicalInductionVariable() const\"},\n    {\"_ZNK4llvm4Loop12getTripCountEv\", \"llvm::Loop::getTripCount() const\"},\n    {\"_ZNK4llvm4Loop25getSmallConstantTripCountEv\", \"llvm::Loop::getSmallConstantTripCount() const\"},\n    {\"_ZNK4llvm4Loop28getSmallConstantTripMultipleEv\", \"llvm::Loop::getSmallConstantTripMultiple() const\"},\n    {\"_ZNK4llvm4Loop11isLCSSAFormERNS_13DominatorTreeE\", \"llvm::Loop::isLCSSAForm(llvm::DominatorTree&) const\"},\n    {\"_ZNK4llvm4Loop18isLoopSimplifyFormEv\", \"llvm::Loop::isLoopSimplifyForm() const\"},\n    {\"_ZNK4llvm4Loop17hasDedicatedExitsEv\", \"llvm::Loop::hasDedicatedExits() const\"},\n    {\"_ZNK4llvm4Loop19getUniqueExitBlocksERNS_15SmallVectorImplIPNS_10BasicBlockEEE\", \"llvm::Loop::getUniqueExitBlocks(llvm::SmallVectorImpl<llvm::BasicBlock*>&) const\"},\n    {\"_ZNK4llvm4Loop18getUniqueExitBlockEv\", \"llvm::Loop::getUniqueExitBlock() const\"},\n    {\"_ZNK4llvm4Loop4dumpEv\", \"llvm::Loop::dump() const\"},\n    {\"_ZN4llvm8LoopInfo13runOnFunctionERNS_8FunctionE\", \"llvm::LoopInfo::runOnFunction(llvm::Function&)\"},\n    {\"_ZNK4llvm8LoopInfo14verifyAnalysisEv\", \"llvm::LoopInfo::verifyAnalysis() const\"},\n    {\"_ZNK4llvm8LoopInfo16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LoopInfo::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZNK4llvm8LoopInfo5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::LoopInfo::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE5printERNS_11raw_ostreamEj\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::print(llvm::raw_ostream&, unsigned int) const\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE9CalculateERNS_17DominatorTreeBaseIS1_EE\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::Calculate(llvm::DominatorTreeBase<llvm::BasicBlock>&)\"},\n    {\"_ZN4llvm8LoopInfoD1Ev\", \"llvm::LoopInfo::~LoopInfo()\"},\n    {\"_ZN4llvm8LoopInfoD0Ev\", \"llvm::LoopInfo::~LoopInfo()\"},\n    {\"_ZN4llvm8LoopInfo13releaseMemoryEv\", \"llvm::LoopInfo::releaseMemory()\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE15ConsiderForLoopEPS1_RNS_17DominatorTreeBaseIS1_EE\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::ConsiderForLoop(llvm::BasicBlock*, llvm::DominatorTreeBase<llvm::BasicBlock>&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_4LoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE6insertERKSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Loop*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Loop*> >::insert(std::pair<llvm::BasicBlock*, llvm::Loop*> const&)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE19MoveSiblingLoopIntoEPS2_S4_\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::MoveSiblingLoopInto(llvm::Loop*, llvm::Loop*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_4LoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Loop*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Loop*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Loop*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock* const, llvm::Loop*> >*)\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE14InsertLoopIntoEPS2_S4_\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::InsertLoopInto(llvm::Loop*, llvm::Loop*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_4LoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Loop*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Loop*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Loop*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock* const, llvm::Loop*> >, std::pair<llvm::BasicBlock* const, llvm::Loop*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10BasicBlockESt4pairIKS2_PNS0_4LoopEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<llvm::BasicBlock*, std::pair<llvm::BasicBlock* const, llvm::Loop*>, std::_Select1st<std::pair<llvm::BasicBlock* const, llvm::Loop*> >, std::less<llvm::BasicBlock*>, std::allocator<std::pair<llvm::BasicBlock* const, llvm::Loop*> > >::_M_insert_unique(std::pair<llvm::BasicBlock* const, llvm::Loop*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm10BasicBlockESaIS2_EE15_M_range_insertINS0_12PredIteratorIS1_NS0_18value_use_iteratorINS0_4UserEEEEEEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EET_SF_St20forward_iterator_tag\", \"void std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> >::_M_range_insert<llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >(__gnu_cxx::__normal_iterator<llvm::BasicBlock**, std::vector<llvm::BasicBlock*, std::allocator<llvm::BasicBlock*> > >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >, std::forward_iterator_tag)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm4LoopESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::Loop**, std::vector<llvm::Loop*, std::allocator<llvm::Loop*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::Loop**, std::vector<llvm::Loop*, std::allocator<llvm::Loop*> > >, llvm::Loop*>(__gnu_cxx::__normal_iterator<llvm::Loop**, std::vector<llvm::Loop*, std::allocator<llvm::Loop*> > >, __gnu_cxx::__normal_iterator<llvm::Loop**, std::vector<llvm::Loop*, std::allocator<llvm::Loop*> > >, llvm::Loop* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE13isLoopExitingEPKS1_\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::isLoopExiting(llvm::BasicBlock const*) const\"},\n    {\"_ZN4llvm12LoopInfoBaseINS_10BasicBlockENS_4LoopEE13releaseMemoryEv\", \"llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>::releaseMemory()\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPNS_4LoopENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::Loop*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Loop*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_8LoopInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::LoopInfo>()\"},\n    {\"_ZN4llvm8LoopInfoC2Ev\", \"llvm::LoopInfo::LoopInfo()\"},\n    {\"_ZN4llvm13LPPassManagerC1Ei\", \"llvm::LPPassManager::LPPassManager(int)\"},\n    {\"_ZN4llvm13LPPassManagerC2Ei\", \"llvm::LPPassManager::LPPassManager(int)\"},\n    {\"_ZN4llvm13LPPassManager19deleteLoopFromQueueEPNS_4LoopE\", \"llvm::LPPassManager::deleteLoopFromQueue(llvm::Loop*)\"},\n    {\"_ZN4llvm13LPPassManager10insertLoopEPNS_4LoopES2_\", \"llvm::LPPassManager::insertLoop(llvm::Loop*, llvm::Loop*)\"},\n    {\"_ZN4llvm13LPPassManager19insertLoopIntoQueueEPNS_4LoopE\", \"llvm::LPPassManager::insertLoopIntoQueue(llvm::Loop*)\"},\n    {\"_ZN4llvm13LPPassManager8redoLoopEPNS_4LoopE\", \"llvm::LPPassManager::redoLoop(llvm::Loop*)\"},\n    {\"_ZN4llvm13LPPassManager29cloneBasicBlockSimpleAnalysisEPNS_10BasicBlockES2_PNS_4LoopE\", \"llvm::LPPassManager::cloneBasicBlockSimpleAnalysis(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Loop*)\"},\n    {\"_ZN4llvm13LPPassManager25deleteSimpleAnalysisValueEPNS_5ValueEPNS_4LoopE\", \"llvm::LPPassManager::deleteSimpleAnalysisValue(llvm::Value*, llvm::Loop*)\"},\n    {\"_ZNK4llvm13LPPassManager16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::LPPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13LPPassManager13runOnFunctionERNS_8FunctionE\", \"llvm::LPPassManager::runOnFunction(llvm::Function&)\"},\n    {\"_Z16addLoopIntoQueuePN4llvm4LoopERSt5dequeIS1_SaIS1_EE\", \"addLoopIntoQueue(llvm::Loop*, std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >&)\"},\n    {\"_ZN4llvm13LPPassManager17dumpPassStructureEj\", \"llvm::LPPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZNK4llvm8LoopPass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::LoopPass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZN4llvm8LoopPass18preparePassManagerERNS_7PMStackE\", \"llvm::LoopPass::preparePassManager(llvm::PMStack&)\"},\n    {\"_ZN4llvm8LoopPass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::LoopPass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZN12_GLOBAL__N_113PrintLoopPassD1Ev\", \"(anonymous namespace)::PrintLoopPass::~PrintLoopPass()\"},\n    {\"_ZN12_GLOBAL__N_113PrintLoopPassD0Ev\", \"(anonymous namespace)::PrintLoopPass::~PrintLoopPass()\"},\n    {\"_ZNK12_GLOBAL__N_113PrintLoopPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PrintLoopPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_113PrintLoopPass9runOnLoopEPN4llvm4LoopERNS1_13LPPassManagerE\", \"(anonymous namespace)::PrintLoopPass::runOnLoop(llvm::Loop*, llvm::LPPassManager&)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE5eraseESt15_Deque_iteratorIS2_RS2_PS2_E\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::erase(std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE9push_backERKS2_\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::push_back(llvm::Loop* const&)\"},\n    {\"_ZN4llvm13LPPassManagerD1Ev\", \"llvm::LPPassManager::~LPPassManager()\"},\n    {\"_ZN4llvm13LPPassManagerD0Ev\", \"llvm::LPPassManager::~LPPassManager()\"},\n    {\"_ZNK4llvm13LPPassManager11getPassNameEv\", \"llvm::LPPassManager::getPassName() const\"},\n    {\"_ZN4llvm13LPPassManager18getAsPMDataManagerEv\", \"llvm::LPPassManager::getAsPMDataManager()\"},\n    {\"_ZN4llvm13LPPassManager9getAsPassEv\", \"llvm::LPPassManager::getAsPass()\"},\n    {\"_ZNK4llvm13LPPassManager18getPassManagerTypeEv\", \"llvm::LPPassManager::getPassManagerType() const\"},\n    {\"_ZThn32_N4llvm13LPPassManagerD1Ev\", \"non-virtual thunk to llvm::LPPassManager::~LPPassManager()\"},\n    {\"_ZThn32_N4llvm13LPPassManagerD0Ev\", \"non-virtual thunk to llvm::LPPassManager::~LPPassManager()\"},\n    {\"_ZThn32_N4llvm13LPPassManager9getAsPassEv\", \"non-virtual thunk to llvm::LPPassManager::getAsPass()\"},\n    {\"_ZThn32_NK4llvm13LPPassManager18getPassManagerTypeEv\", \"non-virtual thunk to llvm::LPPassManager::getPassManagerType() const\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE17_M_reallocate_mapEmb\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE14_M_fill_insertESt15_Deque_iteratorIS2_RS2_PS2_EmRKS2_\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_fill_insert(std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>, unsigned long, llvm::Loop* const&)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE13_M_insert_auxESt15_Deque_iteratorIS2_RS2_PS2_EmRKS2_\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_insert_aux(std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>, unsigned long, llvm::Loop* const&)\"},\n    {\"_ZSt4fillIPN4llvm4LoopEEvRKSt15_Deque_iteratorIT_RS4_PS4_ES9_RKS4_\", \"void std::fill<llvm::Loop*>(std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**> const&, std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**> const&, llvm::Loop* const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bISt15_Deque_iteratorIPN4llvm4LoopERS6_PS6_ES9_EET0_T_SB_SA_\", \"std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**> std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>, std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**> >(std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>, std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>, std::_Deque_iterator<llvm::Loop*, llvm::Loop*&, llvm::Loop**>)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE23_M_new_elements_at_backEm\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_new_elements_at_back(unsigned long)\"},\n    {\"_ZNSt5dequeIPN4llvm4LoopESaIS2_EE24_M_new_elements_at_frontEm\", \"std::deque<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_new_elements_at_front(unsigned long)\"},\n    {\"_ZNSt6vectorIPN4llvm4LoopESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Loop**, std::vector<llvm::Loop*, std::allocator<llvm::Loop*> > >, llvm::Loop* const&)\"},\n    {\"_ZNSt11_Deque_baseIPN4llvm4LoopESaIS2_EE17_M_initialize_mapEm\", \"std::_Deque_base<llvm::Loop*, std::allocator<llvm::Loop*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZN4llvm8LoopBaseINS_10BasicBlockENS_4LoopEED2Ev\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::~LoopBase()\"},\n    {\"_ZN4llvm8isMallocEPKNS_5ValueE\", \"llvm::isMalloc(llvm::Value const*)\"},\n    {\"_ZN4llvm17extractMallocCallEPKNS_5ValueE\", \"llvm::extractMallocCall(llvm::Value const*)\"},\n    {\"_ZN4llvm28extractMallocCallFromBitCastEPKNS_5ValueE\", \"llvm::extractMallocCallFromBitCast(llvm::Value const*)\"},\n    {\"_Z12isMallocCallPKN4llvm8CallInstE\", \"isMallocCall(llvm::CallInst const*)\"},\n    {\"_ZN4llvm17extractMallocCallEPNS_5ValueE\", \"llvm::extractMallocCall(llvm::Value*)\"},\n    {\"_ZN4llvm28extractMallocCallFromBitCastEPNS_5ValueE\", \"llvm::extractMallocCallFromBitCast(llvm::Value*)\"},\n    {\"_ZN4llvm13isArrayMallocEPKNS_5ValueEPKNS_10DataLayoutE\", \"llvm::isArrayMalloc(llvm::Value const*, llvm::DataLayout const*)\"},\n    {\"_Z16computeArraySizePKN4llvm8CallInstEPKNS_10DataLayoutEb\", \"computeArraySize(llvm::CallInst const*, llvm::DataLayout const*, bool)\"},\n    {\"_ZN4llvm13getMallocTypeEPKNS_8CallInstE\", \"llvm::getMallocType(llvm::CallInst const*)\"},\n    {\"_ZN4llvm22getMallocAllocatedTypeEPKNS_8CallInstE\", \"llvm::getMallocAllocatedType(llvm::CallInst const*)\"},\n    {\"_ZN4llvm18getMallocArraySizeEPNS_8CallInstEPKNS_10DataLayoutEb\", \"llvm::getMallocArraySize(llvm::CallInst*, llvm::DataLayout const*, bool)\"},\n    {\"_ZN4llvm10isFreeCallEPKNS_5ValueE\", \"llvm::isFreeCall(llvm::Value const*)\"},\n    {\"_ZN4llvm38initializeMemoryDependenceAnalysisPassERNS_12PassRegistryE\", \"llvm::initializeMemoryDependenceAnalysisPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysisC1Ev\", \"llvm::MemoryDependenceAnalysis::MemoryDependenceAnalysis()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysisC2Ev\", \"llvm::MemoryDependenceAnalysis::MemoryDependenceAnalysis()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysisD0Ev\", \"llvm::MemoryDependenceAnalysis::~MemoryDependenceAnalysis()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysisD1Ev\", \"llvm::MemoryDependenceAnalysis::~MemoryDependenceAnalysis()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysisD2Ev\", \"llvm::MemoryDependenceAnalysis::~MemoryDependenceAnalysis()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis13releaseMemoryEv\", \"llvm::MemoryDependenceAnalysis::releaseMemory()\"},\n    {\"_ZNK4llvm24MemoryDependenceAnalysis16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MemoryDependenceAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis13runOnFunctionERNS_8FunctionE\", \"llvm::MemoryDependenceAnalysis::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis25getCallSiteDependencyFromENS_8CallSiteEbNS_14ilist_iteratorINS_11InstructionEEEPNS_10BasicBlockE\", \"llvm::MemoryDependenceAnalysis::getCallSiteDependencyFrom(llvm::CallSite, bool, llvm::ilist_iterator<llvm::Instruction>, llvm::BasicBlock*)\"},\n    {\"_Z11GetLocationPKN4llvm11InstructionERNS_13AliasAnalysis8LocationEPS3_\", \"GetLocation(llvm::Instruction const*, llvm::AliasAnalysis::Location&, llvm::AliasAnalysis*)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis24getPointerDependencyFromERKNS_13AliasAnalysis8LocationEbNS_14ilist_iteratorINS_11InstructionEEEPNS_10BasicBlockE\", \"llvm::MemoryDependenceAnalysis::getPointerDependencyFrom(llvm::AliasAnalysis::Location const&, bool, llvm::ilist_iterator<llvm::Instruction>, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis13getDependencyEPNS_11InstructionE\", \"llvm::MemoryDependenceAnalysis::getDependency(llvm::Instruction*)\"},\n    {\"_Z20RemoveFromReverseMapIPN4llvm11InstructionEEvRNS0_8DenseMapIS2_NS0_11SmallPtrSetIT_Lj4EEENS0_12DenseMapInfoIS2_EENS7_IS6_EEEES2_S5_\", \"void RemoveFromReverseMap<llvm::Instruction*>(llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >&, llvm::Instruction*, llvm::Instruction*)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis25getNonLocalCallDependencyENS_8CallSiteE\", \"llvm::MemoryDependenceAnalysis::getNonLocalCallDependency(llvm::CallSite)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis28getNonLocalPointerDependencyERKNS_13AliasAnalysis8LocationEbPNS_10BasicBlockERNS_15SmallVectorImplINS_17NonLocalDepResultEEE\", \"llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis27getNonLocalPointerDepFromBBERKNS_12PHITransAddrERKNS_13AliasAnalysis8LocationEbPNS_10BasicBlockERNS_15SmallVectorImplINS_17NonLocalDepResultEEERNS_8DenseMapIS9_PNS_5ValueENS_12DenseMapInfoIS9_EENSH_ISG_EEEEb\", \"llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::PHITransAddr const&, llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::Value*> >&, bool)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis23GetNonLocalInfoForBlockERKNS_13AliasAnalysis8LocationEbPNS_10BasicBlockEPSt6vectorINS_16NonLocalDepEntryESaIS8_EEj\", \"llvm::MemoryDependenceAnalysis::GetNonLocalInfoForBlock(llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >*, unsigned int)\"},\n    {\"_Z20RemoveFromReverseMapIN4llvm14PointerIntPairIPKNS0_5ValueELj1EbNS0_21PointerLikeTypeTraitsIS4_EEEEEvRNS0_8DenseMapIPNS0_11InstructionENS0_11SmallPtrSetIT_Lj4EEENS0_12DenseMapInfoISA_EENSE_ISD_EEEESA_SC_\", \"void RemoveFromReverseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >(llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >&, llvm::Instruction*, llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >)\"},\n    {\"_Z24SortNonLocalDepInfoCacheRSt6vectorIN4llvm16NonLocalDepEntryESaIS1_EEj\", \"SortNonLocalDepInfoCache(std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >&, unsigned int)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis39RemoveCachedNonLocalPointerDependenciesENS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEE\", \"llvm::MemoryDependenceAnalysis::RemoveCachedNonLocalPointerDependencies(llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis27invalidateCachedPointerInfoEPNS_5ValueE\", \"llvm::MemoryDependenceAnalysis::invalidateCachedPointerInfo(llvm::Value*)\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis28invalidateCachedPredecessorsEv\", \"llvm::MemoryDependenceAnalysis::invalidateCachedPredecessors()\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis17removeInstructionEPNS_11InstructionE\", \"llvm::MemoryDependenceAnalysis::removeInstruction(llvm::Instruction*)\"},\n    {\"_ZNK4llvm24MemoryDependenceAnalysis13verifyRemovedEPNS_11InstructionE\", \"llvm::MemoryDependenceAnalysis::verifyRemoved(llvm::Instruction*) const\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt4pairISt6vectorINS_16NonLocalDepEntryESaIS5_EEbENS_12DenseMapInfoIS2_EENS9_IS8_EEE5clearEv\", \"llvm::DenseMap<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> > >::clear()\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE5clearEv\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetIS2_Lj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS7_EEEELj4EEENS_12DenseMapInfoIS2_EENSC_ISB_EEE5clearEv\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >::clear()\"},\n    {\"_ZN4llvm17PredIteratorCache5clearEv\", \"llvm::PredIteratorCache::clear()\"},\n    {\"_ZN4llvm17PredIteratorCache8GetPredsEPNS_10BasicBlockE\", \"llvm::PredIteratorCache::GetPreds(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE6insertERKSt4pairIS7_S9_E\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::insert(std::pair<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE16FindAndConstructERKS7_\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::FindAndConstruct(llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > const&)\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE16InsertIntoBucketERKS7_RKS9_PSt4pairIS7_S9_E\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::InsertIntoBucket(llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > const&, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo const&, std::pair<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo>*)\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS7_EEEELj4EEENS_12DenseMapInfoIS2_EENSC_ISB_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >::FindAndConstruct(llvm::Instruction* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS7_EEEELj4EEENS_12DenseMapInfoIS2_EENSC_ISB_EEE16InsertIntoBucketERKS2_RKSB_PSt4pairIS2_SB_E\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >::InsertIntoBucket(llvm::Instruction* const&, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> const&, std::pair<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS7_EEEELj4EEENS_12DenseMapInfoIS2_EENSC_ISB_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_17NonLocalDepResultELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::NonLocalDepResult, false>::grow(unsigned long)\"},\n    {\"_ZNSt6vectorIN4llvm16NonLocalDepEntryESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, llvm::NonLocalDepEntry const&)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEElEvT_S9_T0_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, long>(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, long)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEEEvT_S9_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > > >(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEEEvT_S9_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > > >(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEEEvT_S9_S9_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > > >(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >)\"},\n    {\"_ZSt9sort_heapIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEEEvT_S9_\", \"void std::sort_heap<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > > >(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >)\"},\n    {\"_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPN4llvm16NonLocalDepEntryESt6vectorIS3_SaIS3_EEEEEvT_S9_\", \"void std::make_heap<__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > > >(__gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >, __gnu_cxx::__normal_iterator<llvm::NonLocalDepEntry*, std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > >)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt4pairISt6vectorINS_16NonLocalDepEntryESaIS5_EEbENS_12DenseMapInfoIS2_EENS9_IS8_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> > >::FindAndConstruct(llvm::Instruction* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt4pairISt6vectorINS_16NonLocalDepEntryESaIS5_EEbENS_12DenseMapInfoIS2_EENS9_IS8_EEE16InsertIntoBucketERKS2_RKS8_PS3_IS2_S8_E\", \"llvm::DenseMap<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> > >::InsertIntoBucket(llvm::Instruction* const&, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> const&, std::pair<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt4pairISt6vectorINS_16NonLocalDepEntryESaIS5_EEbENS_12DenseMapInfoIS2_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm16NonLocalDepEntryESaIS1_EEC2ERKS3_\", \"std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >::vector(std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetIS2_Lj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >::FindAndConstruct(llvm::Instruction* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetIS2_Lj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >::InsertIntoBucket(llvm::Instruction* const&, llvm::SmallPtrSet<llvm::Instruction*, 4u> const&, std::pair<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetIS2_Lj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_12MemDepResultENS_12DenseMapInfoIS2_EENS4_IS3_EEE16InsertIntoBucketERKS2_RKS3_PSt4pairIS2_S3_E\", \"llvm::DenseMap<llvm::Instruction*, llvm::MemDepResult, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::MemDepResult> >::InsertIntoBucket(llvm::Instruction* const&, llvm::MemDepResult const&, std::pair<llvm::Instruction*, llvm::MemDepResult>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_12MemDepResultENS_12DenseMapInfoIS2_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction*, llvm::MemDepResult, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::MemDepResult> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS7_EEEELj4EEENS_12DenseMapInfoIS2_EENSC_ISB_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, 4u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_11SmallPtrSetIS2_Lj4EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, llvm::SmallPtrSet<llvm::Instruction*, 4u>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Instruction*, 4u> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapINS_14PointerIntPairIPKNS_5ValueELj1EbNS_21PointerLikeTypeTraitsIS4_EEEENS_24MemoryDependenceAnalysis19NonLocalPointerInfoENS_12DenseMapInfoIS7_EENSA_IS9_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> >, llvm::MemoryDependenceAnalysis::NonLocalPointerInfo, llvm::DenseMapInfo<llvm::PointerIntPair<llvm::Value const*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value const*> > >, llvm::DenseMapInfo<llvm::MemoryDependenceAnalysis::NonLocalPointerInfo> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionESt4pairISt6vectorINS_16NonLocalDepEntryESaIS5_EEbENS_12DenseMapInfoIS2_EENS9_IS8_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool>, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<std::pair<std::vector<llvm::NonLocalDepEntry, std::allocator<llvm::NonLocalDepEntry> >, bool> > >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_11InstructionENS_12MemDepResultENS_12DenseMapInfoIS2_EENS4_IS3_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Instruction*, llvm::MemDepResult, llvm::DenseMapInfo<llvm::Instruction*>, llvm::DenseMapInfo<llvm::MemDepResult> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::BasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::BasicBlock* const&, unsigned int const&, std::pair<llvm::BasicBlock*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPS2_NS_12DenseMapInfoIS2_EENS4_IS3_EEE16InsertIntoBucketERKS2_RKS3_PSt4pairIS2_S3_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock**, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock**> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::BasicBlock** const&, std::pair<llvm::BasicBlock*, llvm::BasicBlock**>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPS2_NS_12DenseMapInfoIS2_EENS4_IS3_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock**, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock**> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEjNS_12DenseMapInfoIS2_EENS3_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, unsigned int, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockEPS2_NS_12DenseMapInfoIS2_EENS4_IS3_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::BasicBlock**, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::BasicBlock**> >::shrink_and_clear()\"},\n    {\"_ZN4llvm15callDefaultCtorINS_24MemoryDependenceAnalysisEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::MemoryDependenceAnalysis>()\"},\n    {\"_ZN4llvm18initializeNoAAPassERNS_12PassRegistryE\", \"llvm::initializeNoAAPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm14createNoAAPassEv\", \"llvm::createNoAAPass()\"},\n    {\"_ZN12_GLOBAL__N_14NoAAD1Ev\", \"(anonymous namespace)::NoAA::~NoAA()\"},\n    {\"_ZN12_GLOBAL__N_14NoAAD0Ev\", \"(anonymous namespace)::NoAA::~NoAA()\"},\n    {\"_ZNK12_GLOBAL__N_14NoAA16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::NoAA::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_14NoAA26getAdjustedAnalysisPointerEPKv\", \"(anonymous namespace)::NoAA::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA14initializePassEv\", \"(anonymous namespace)::NoAA::initializePass()\"},\n    {\"_ZN12_GLOBAL__N_14NoAA5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"(anonymous namespace)::NoAA::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"(anonymous namespace)::NoAA::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA17getModRefBehaviorEPKN4llvm8FunctionE\", \"(anonymous namespace)::NoAA::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"(anonymous namespace)::NoAA::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"(anonymous namespace)::NoAA::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"(anonymous namespace)::NoAA::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA11deleteValueEPN4llvm5ValueE\", \"(anonymous namespace)::NoAA::deleteValue(llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA9copyValueEPN4llvm5ValueES3_\", \"(anonymous namespace)::NoAA::copyValue(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN12_GLOBAL__N_14NoAA14addEscapingUseERN4llvm3UseE\", \"(anonymous namespace)::NoAA::addEscapingUse(llvm::Use&)\"},\n    {\"_ZThn32_NK12_GLOBAL__N_14NoAA16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"non-virtual thunk to (anonymous namespace)::NoAA::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAAD1Ev\", \"non-virtual thunk to (anonymous namespace)::NoAA::~NoAA()\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAAD0Ev\", \"non-virtual thunk to (anonymous namespace)::NoAA::~NoAA()\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"non-virtual thunk to (anonymous namespace)::NoAA::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"non-virtual thunk to (anonymous namespace)::NoAA::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"non-virtual thunk to (anonymous namespace)::NoAA::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA17getModRefBehaviorEPKN4llvm8FunctionE\", \"non-virtual thunk to (anonymous namespace)::NoAA::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"non-virtual thunk to (anonymous namespace)::NoAA::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"non-virtual thunk to (anonymous namespace)::NoAA::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA11deleteValueEPN4llvm5ValueE\", \"non-virtual thunk to (anonymous namespace)::NoAA::deleteValue(llvm::Value*)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA9copyValueEPN4llvm5ValueES3_\", \"non-virtual thunk to (anonymous namespace)::NoAA::copyValue(llvm::Value*, llvm::Value*)\"},\n    {\"_ZThn32_N12_GLOBAL__N_14NoAA14addEscapingUseERN4llvm3UseE\", \"non-virtual thunk to (anonymous namespace)::NoAA::addEscapingUse(llvm::Use&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_14NoAAEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::NoAA>()\"},\n    {\"_ZNK4llvm12PHITransAddr4dumpEv\", \"llvm::PHITransAddr::dump() const\"},\n    {\"_ZNK4llvm12PHITransAddr6VerifyEv\", \"llvm::PHITransAddr::Verify() const\"},\n    {\"_Z13VerifySubExprPN4llvm5ValueERNS_15SmallVectorImplIPNS_11InstructionEEE\", \"VerifySubExpr(llvm::Value*, llvm::SmallVectorImpl<llvm::Instruction*>&)\"},\n    {\"_ZNK4llvm12PHITransAddr28IsPotentiallyPHITranslatableEv\", \"llvm::PHITransAddr::IsPotentiallyPHITranslatable() const\"},\n    {\"_ZN4llvm12PHITransAddr19PHITranslateSubExprEPNS_5ValueEPNS_10BasicBlockES4_PKNS_13DominatorTreeE\", \"llvm::PHITransAddr::PHITranslateSubExpr(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::DominatorTree const*)\"},\n    {\"_Z16RemoveInstInputsPN4llvm5ValueERNS_15SmallVectorImplIPNS_11InstructionEEE\", \"RemoveInstInputs(llvm::Value*, llvm::SmallVectorImpl<llvm::Instruction*>&)\"},\n    {\"_ZN4llvm12PHITransAddr17PHITranslateValueEPNS_10BasicBlockES2_PKNS_13DominatorTreeE\", \"llvm::PHITransAddr::PHITranslateValue(llvm::BasicBlock*, llvm::BasicBlock*, llvm::DominatorTree const*)\"},\n    {\"_ZN4llvm12PHITransAddr25PHITranslateWithInsertionEPNS_10BasicBlockES2_RKNS_13DominatorTreeERNS_15SmallVectorImplIPNS_11InstructionEEE\", \"llvm::PHITransAddr::PHITranslateWithInsertion(llvm::BasicBlock*, llvm::BasicBlock*, llvm::DominatorTree const&, llvm::SmallVectorImpl<llvm::Instruction*>&)\"},\n    {\"_ZN4llvm12PHITransAddr26InsertPHITranslatedSubExprEPNS_5ValueEPNS_10BasicBlockES4_RKNS_13DominatorTreeERNS_15SmallVectorImplIPNS_11InstructionEEE\", \"llvm::PHITransAddr::InsertPHITranslatedSubExpr(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::DominatorTree const&, llvm::SmallVectorImpl<llvm::Instruction*>&)\"},\n    {\"_ZN4llvm34initializeProfileInfoAnalysisGroupERNS_12PassRegistryE\", \"llvm::initializeProfileInfoAnalysisGroup(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEEC1Ev\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEEC2Ev\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEED1Ev\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::~ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEED2Ev\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::~ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEEC1Ev\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEEC2Ev\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEED1Ev\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::~ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEED2Ev\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::~ProfileInfoT()\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE17getExecutionCountEPKS2_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::getExecutionCount(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEE17getExecutionCountEPKS2_\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::getExecutionCount(llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE17getExecutionCountEPKS1_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::getExecutionCount(llvm::Function const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEE17getExecutionCountEPKS1_\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::getExecutionCount(llvm::MachineFunction const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE17setExecutionCountEPKS2_d\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::setExecutionCount(llvm::BasicBlock const*, double)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEE17setExecutionCountEPKS2_d\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::setExecutionCount(llvm::MachineBasicBlock const*, double)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE13addEdgeWeightESt4pairIPKS2_S6_Ed\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::addEdgeWeight(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE17addExecutionCountEPKS2_d\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::addExecutionCount(llvm::BasicBlock const*, double)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE11removeBlockEPKS2_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::removeBlock(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE10removeEdgeESt4pairIPKS2_S6_E\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::removeEdge(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE11replaceEdgeERKSt4pairIPKS2_S6_ES9_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::replaceEdge(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE7GetPathEPKS2_S5_RSt3mapIS5_S5_St4lessIS5_ESaISt4pairIKS5_S5_EEEj\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::GetPath(llvm::BasicBlock const*, llvm::BasicBlock const*, std::map<llvm::BasicBlock const*, llvm::BasicBlock const*, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> > >&, unsigned int)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE10divertFlowERKSt4pairIPKS2_S6_ES9_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::divertFlow(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const&)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE14replaceAllUsesEPKS2_S5_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::replaceAllUses(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE9splitEdgeEPKS2_S5_S5_b\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::splitEdge(llvm::BasicBlock const*, llvm::BasicBlock const*, llvm::BasicBlock const*, bool)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE10splitBlockEPKS2_S5_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::splitBlock(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE10splitBlockEPKS2_S5_PKPS2_j\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::splitBlock(llvm::BasicBlock const*, llvm::BasicBlock const*, llvm::BasicBlock* const*, unsigned int)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE8transferEPKS1_S5_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::transfer(llvm::Function const*, llvm::Function const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE20CalculateMissingEdgeEPKS2_RSt4pairIS5_S5_Eb\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::CalculateMissingEdge(llvm::BasicBlock const*, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>&, bool)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE20EstimateMissingEdgesEPKS2_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::EstimateMissingEdges(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE6repairEPKS1_\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::repair(llvm::Function const*)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamEPKNS_8FunctionE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::Function const*)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamEPKNS_15MachineFunctionE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::MachineFunction const*)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamEPKNS_10BasicBlockE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamEPKNS_17MachineBasicBlockE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::MachineBasicBlock const*)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamESt4pairIPKNS_10BasicBlockES5_E\", \"llvm::operator<<(llvm::raw_ostream&, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamESt4pairIPKNS_17MachineBasicBlockES5_E\", \"llvm::operator<<(llvm::raw_ostream&, std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>)\"},\n    {\"_ZN4llvm27initializeNoProfileInfoPassERNS_12PassRegistryE\", \"llvm::initializeNoProfileInfoPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm23createNoProfileInfoPassEv\", \"llvm::createNoProfileInfoPass()\"},\n    {\"_ZN12_GLOBAL__N_113NoProfileInfoD1Ev\", \"(anonymous namespace)::NoProfileInfo::~NoProfileInfo()\"},\n    {\"_ZN12_GLOBAL__N_113NoProfileInfoD0Ev\", \"(anonymous namespace)::NoProfileInfo::~NoProfileInfo()\"},\n    {\"_ZNK12_GLOBAL__N_113NoProfileInfo11getPassNameEv\", \"(anonymous namespace)::NoProfileInfo::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_113NoProfileInfo26getAdjustedAnalysisPointerEPKv\", \"(anonymous namespace)::NoProfileInfo::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_113NoProfileInfoEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::NoProfileInfo>()\"},\n    {\"_ZNK4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE13getEdgeWeightESt4pairIPKS2_S6_E\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::getEdgeWeight(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>) const\"},\n    {\"_ZNSt3mapIPKN4llvm8FunctionES_IPKNS0_10BasicBlockEdSt4lessIS6_ESaISt4pairIKS6_dEEES7_IS3_ESaIS9_IKS3_SD_EEEixERSF_\", \"std::map<llvm::Function const*, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::operator[](llvm::Function const* const&)\"},\n    {\"_ZNSt3mapIPKN4llvm15MachineFunctionES_IPKNS0_17MachineBasicBlockEdSt4lessIS6_ESaISt4pairIKS6_dEEES7_IS3_ESaIS9_IKS3_SD_EEEixERSF_\", \"std::map<llvm::MachineFunction const*, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > > >::operator[](llvm::MachineFunction const* const&)\"},\n    {\"_ZNSt3mapIPKN4llvm8FunctionES_ISt4pairIPKNS0_10BasicBlockES7_EdSt4lessIS8_ESaIS4_IKS8_dEEES9_IS3_ESaIS4_IKS3_SE_EEEixERSG_\", \"std::map<llvm::Function const*, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::operator[](llvm::Function const* const&)\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE13setEdgeWeightESt4pairIPKS2_S6_Ed\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::setEdgeWeight(std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE7_M_copyEPKSt13_Rb_tree_nodeIS7_EPSF_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >::_M_copy(std::_Rb_tree_node<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > const*, std::_Rb_tree_node<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E\", \"std::_Rb_tree<llvm::BasicBlock const*, llvm::BasicBlock const*, std::_Identity<llvm::BasicBlock const*>, std::less<llvm::BasicBlock const*>, std::allocator<llvm::BasicBlock const*> >::_M_erase(std::_Rb_tree_node<llvm::BasicBlock const*>*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::_Identity<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE5eraseESt17_Rb_tree_iteratorIS3_ESB_\", \"std::_Rb_tree<llvm::BasicBlock const*, llvm::BasicBlock const*, std::_Identity<llvm::BasicBlock const*>, std::less<llvm::BasicBlock const*>, std::allocator<llvm::BasicBlock const*> >::erase(std::_Rb_tree_iterator<llvm::BasicBlock const*>, std::_Rb_tree_iterator<llvm::BasicBlock const*>)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE5eraseESt17_Rb_tree_iteratorIS6_ESE_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, double>, std::_Select1st<std::pair<llvm::Function const* const, double> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, double> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, double> >, std::_Rb_tree_iterator<std::pair<llvm::Function const* const, double> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, double>, std::_Select1st<std::pair<llvm::Function const* const, double> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Function const* const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIPKNS0_10BasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE5eraseESt17_Rb_tree_iteratorISG_ESN_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, double>, std::_Select1st<std::pair<llvm::BasicBlock const* const, double> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIPKNS0_10BasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIS4_IPKNS0_10BasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE5eraseESt17_Rb_tree_iteratorISH_ESO_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIS4_IPKNS0_10BasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> >, std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> > >::_M_insert_unique(std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> const&)\"},\n    {\"_ZNSt5dequeIPKN4llvm10BasicBlockESaIS3_EE9push_backERKS3_\", \"std::deque<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> >::push_back(llvm::BasicBlock const* const&)\"},\n    {\"_ZNSt5dequeIPKN4llvm10BasicBlockESaIS3_EE17_M_reallocate_mapEmb\", \"std::deque<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> >::_M_reallocate_map(unsigned long, bool)\"},\n    {\"_ZNSt11_Deque_baseIPKN4llvm10BasicBlockESaIS3_EE17_M_initialize_mapEm\", \"std::_Deque_base<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> >::_M_initialize_map(unsigned long)\"},\n    {\"_ZNSt5dequeIPKN4llvm10BasicBlockESaIS3_EEC2ERKS5_\", \"std::deque<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> >::deque(std::deque<llvm::BasicBlock const*, std::allocator<llvm::BasicBlock const*> > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::_Rb_tree_iterator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE5eraseESt17_Rb_tree_iteratorIS6_ESE_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, double>, std::_Select1st<std::pair<llvm::BasicBlock const* const, double> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const* const, double> >, std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const* const, double> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10BasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> >, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > >::_M_insert_unique(std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIS4_IPKNS0_10BasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISH_ERKSH_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIS4_IPKNS0_10BasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE9_M_insertEPSt18_Rb_tree_node_baseSO_RKSH_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIS4_IPKNS0_10BasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE16_M_insert_uniqueERKSH_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > > >::_M_insert_unique(std::pair<llvm::Function const* const, std::map<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*>, double, std::less<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::BasicBlock const*, llvm::BasicBlock const*> const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm17MachineBasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::MachineBasicBlock const*, std::pair<llvm::MachineBasicBlock const* const, double>, std::_Select1st<std::pair<llvm::MachineBasicBlock const* const, double> >, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineBasicBlock const* const, double> >, std::pair<llvm::MachineBasicBlock const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm17MachineBasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::MachineBasicBlock const*, std::pair<llvm::MachineBasicBlock const* const, double>, std::_Select1st<std::pair<llvm::MachineBasicBlock const* const, double> >, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > >::_M_insert_unique(std::pair<llvm::MachineBasicBlock const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm17MachineBasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::MachineBasicBlock const*, std::pair<llvm::MachineBasicBlock const* const, double>, std::_Select1st<std::pair<llvm::MachineBasicBlock const* const, double> >, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineBasicBlock const* const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm17MachineBasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE7_M_copyEPKSt13_Rb_tree_nodeIS6_EPSE_\", \"std::_Rb_tree<llvm::MachineBasicBlock const*, std::pair<llvm::MachineBasicBlock const* const, double>, std::_Select1st<std::pair<llvm::MachineBasicBlock const* const, double> >, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::MachineBasicBlock const* const, double> > const*, std::_Rb_tree_node<std::pair<llvm::MachineBasicBlock const* const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_St3mapIPKNS0_17MachineBasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISG_ERKSG_\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_St3mapIPKNS0_17MachineBasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE9_M_insertEPSt18_Rb_tree_node_baseSN_RKSG_\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_St3mapIPKNS0_17MachineBasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > > >::_M_insert_unique(std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, double>, std::_Select1st<std::pair<llvm::MachineFunction const* const, double> >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, double> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::MachineFunction const* const, double> >, std::pair<llvm::MachineFunction const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, double>, std::_Select1st<std::pair<llvm::MachineFunction const* const, double> >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, double> > >::_M_insert_unique(std::pair<llvm::MachineFunction const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, double>, std::_Select1st<std::pair<llvm::Function const* const, double> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, double> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, double> >, std::pair<llvm::Function const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, double>, std::_Select1st<std::pair<llvm::Function const* const, double> >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, double> > >::_M_insert_unique(std::pair<llvm::Function const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, double>, std::_Select1st<std::pair<llvm::BasicBlock const* const, double> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const* const, double> >, std::pair<llvm::BasicBlock const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, double>, std::_Select1st<std::pair<llvm::BasicBlock const* const, double> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >::_M_insert_unique(std::pair<llvm::BasicBlock const* const, double> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE7_M_copyEPKSt13_Rb_tree_nodeIS6_EPSE_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, double>, std::_Select1st<std::pair<llvm::BasicBlock const* const, double> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, double> > const*, std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIPKNS0_10BasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISG_ERKSG_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIPKNS0_10BasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE9_M_insertEPSt18_Rb_tree_node_baseSN_RKSG_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm8FunctionESt4pairIKS3_St3mapIPKNS0_10BasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::Function const*, std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > >, std::less<llvm::Function const*>, std::allocator<std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > > >::_M_insert_unique(std::pair<llvm::Function const* const, std::map<llvm::BasicBlock const*, double, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, double> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE16_M_insert_uniqueERKS3_\", \"std::_Rb_tree<llvm::BasicBlock const*, llvm::BasicBlock const*, std::_Identity<llvm::BasicBlock const*>, std::less<llvm::BasicBlock const*>, std::allocator<llvm::BasicBlock const*> >::_M_insert_unique(llvm::BasicBlock const* const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, llvm::BasicBlock const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_St3mapIS4_IPKNS0_17MachineBasicBlockES9_EdSt4lessISA_ESaIS4_IKSA_dEEEESt10_Select1stISH_ESB_IS3_ESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, std::map<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>, double, std::less<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> > > >, std::_Select1st<std::pair<llvm::MachineFunction const* const, std::map<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>, double, std::less<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> > > > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>, double, std::less<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineFunction const* const, std::map<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>, double, std::less<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm17MachineBasicBlockES4_ES0_IKS5_dESt10_Select1stIS7_ESt4lessIS5_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*>, std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double>, std::_Select1st<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> >, std::less<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> >, std::allocator<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::MachineBasicBlock const*, llvm::MachineBasicBlock const*> const, double> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_St3mapIPKNS0_17MachineBasicBlockEdSt4lessIS9_ESaIS4_IKS9_dEEEESt10_Select1stISG_ESA_IS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > >, std::_Select1st<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineFunction const* const, std::map<llvm::MachineBasicBlock const*, double, std::less<llvm::MachineBasicBlock const*>, std::allocator<std::pair<llvm::MachineBasicBlock const* const, double> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm15MachineFunctionESt4pairIKS3_dESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::MachineFunction const*, std::pair<llvm::MachineFunction const* const, double>, std::_Select1st<std::pair<llvm::MachineFunction const* const, double> >, std::less<llvm::MachineFunction const*>, std::allocator<std::pair<llvm::MachineFunction const* const, double> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::MachineFunction const* const, double> >*)\"},\n    {\"_ZN4llvm29initializeScalarEvolutionPassERNS_12PassRegistryE\", \"llvm::initializeScalarEvolutionPass(llvm::PassRegistry&)\"},\n    {\"_ZNK4llvm4SCEV4dumpEv\", \"llvm::SCEV::dump() const\"},\n    {\"_ZNK4llvm4SCEV5printERNS_11raw_ostreamE\", \"llvm::SCEV::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm4SCEV7getTypeEv\", \"llvm::SCEV::getType() const\"},\n    {\"_ZNK4llvm11SCEVUnknown8isSizeOfERPKNS_4TypeE\", \"llvm::SCEVUnknown::isSizeOf(llvm::Type const*&) const\"},\n    {\"_ZNK4llvm11SCEVUnknown9isAlignOfERPKNS_4TypeE\", \"llvm::SCEVUnknown::isAlignOf(llvm::Type const*&) const\"},\n    {\"_ZNK4llvm11SCEVUnknown10isOffsetOfERPKNS_4TypeERPNS_8ConstantE\", \"llvm::SCEVUnknown::isOffsetOf(llvm::Type const*&, llvm::Constant*&) const\"},\n    {\"_ZNK4llvm4SCEV6isZeroEv\", \"llvm::SCEV::isZero() const\"},\n    {\"_ZNK4llvm4SCEV5isOneEv\", \"llvm::SCEV::isOne() const\"},\n    {\"_ZNK4llvm4SCEV14isAllOnesValueEv\", \"llvm::SCEV::isAllOnesValue() const\"},\n    {\"_ZN4llvm19SCEVCouldNotComputeC1Ev\", \"llvm::SCEVCouldNotCompute::SCEVCouldNotCompute()\"},\n    {\"_ZN4llvm19SCEVCouldNotComputeC2Ev\", \"llvm::SCEVCouldNotCompute::SCEVCouldNotCompute()\"},\n    {\"_ZN4llvm19SCEVCouldNotCompute7classofEPKNS_4SCEVE\", \"llvm::SCEVCouldNotCompute::classof(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getConstantEPNS_11ConstantIntE\", \"llvm::ScalarEvolution::getConstant(llvm::ConstantInt*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getConstantERKNS_5APIntE\", \"llvm::ScalarEvolution::getConstant(llvm::APInt const&)\"},\n    {\"_ZN4llvm15ScalarEvolution11getConstantEPKNS_4TypeEyb\", \"llvm::ScalarEvolution::getConstant(llvm::Type const*, unsigned long long, bool)\"},\n    {\"_ZNK4llvm15ScalarEvolution20getEffectiveSCEVTypeEPKNS_4TypeE\", \"llvm::ScalarEvolution::getEffectiveSCEVType(llvm::Type const*) const\"},\n    {\"_ZN4llvm12SCEVCastExprC1ENS_19FoldingSetNodeIDRefEjPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVCastExpr::SCEVCastExpr(llvm::FoldingSetNodeIDRef, unsigned int, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm12SCEVCastExprC2ENS_19FoldingSetNodeIDRefEjPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVCastExpr::SCEVCastExpr(llvm::FoldingSetNodeIDRef, unsigned int, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm16SCEVTruncateExprC1ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVTruncateExpr::SCEVTruncateExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm16SCEVTruncateExprC2ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVTruncateExpr::SCEVTruncateExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm18SCEVZeroExtendExprC1ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVZeroExtendExpr::SCEVZeroExtendExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm18SCEVZeroExtendExprC2ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVZeroExtendExpr::SCEVZeroExtendExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm18SCEVSignExtendExprC1ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVSignExtendExpr::SCEVSignExtendExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm18SCEVSignExtendExprC2ENS_19FoldingSetNodeIDRefEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVSignExtendExpr::SCEVSignExtendExpr(llvm::FoldingSetNodeIDRef, llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm11SCEVUnknown7deletedEv\", \"llvm::SCEVUnknown::deleted()\"},\n    {\"_ZN4llvm15ScalarEvolution21forgetMemoizedResultsEPKNS_4SCEVE\", \"llvm::ScalarEvolution::forgetMemoizedResults(llvm::SCEV const*)\"},\n    {\"_ZN4llvm11SCEVUnknown19allUsesReplacedWithEPNS_5ValueE\", \"llvm::SCEVUnknown::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZNK4llvm14SCEVAddRecExpr19evaluateAtIterationEPKNS_4SCEVERNS_15ScalarEvolutionE\", \"llvm::SCEVAddRecExpr::evaluateAtIteration(llvm::SCEV const*, llvm::ScalarEvolution&) const\"},\n    {\"_ZN4llvm15ScalarEvolution15getTruncateExprEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getTruncateExpr(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution23getTruncateOrSignExtendEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getTruncateOrSignExtend(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution23getTruncateOrZeroExtendEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getTruncateOrZeroExtend(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution10getAddExprERNS_15SmallVectorImplIPKNS_4SCEVEEEbb\", \"llvm::ScalarEvolution::getAddExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&, bool, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution10getMulExprERNS_15SmallVectorImplIPKNS_4SCEVEEEbb\", \"llvm::ScalarEvolution::getMulExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&, bool, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution13getAddRecExprERNS_15SmallVectorImplIPKNS_4SCEVEEEPKNS_4LoopEbb\", \"llvm::ScalarEvolution::getAddRecExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::Loop const*, bool, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution7getSCEVEPNS_5ValueE\", \"llvm::ScalarEvolution::getSCEV(llvm::Value*)\"},\n    {\"_ZN4llvm15ScalarEvolution17getZeroExtendExprEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution16getUnsignedRangeEPKNS_4SCEVE\", \"llvm::ScalarEvolution::getUnsignedRange(llvm::SCEV const*)\"},\n    {\"_ZNK4llvm15ScalarEvolution17getTypeSizeInBitsEPKNS_4TypeE\", \"llvm::ScalarEvolution::getTypeSizeInBits(llvm::Type const*) const\"},\n    {\"_ZN4llvm15ScalarEvolution13getAddRecExprEPKNS_4SCEVES3_PKNS_4LoopEbb\", \"llvm::ScalarEvolution::getAddRecExpr(llvm::SCEV const*, llvm::SCEV const*, llvm::Loop const*, bool, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution24getMaxBackedgeTakenCountEPKNS_4LoopE\", \"llvm::ScalarEvolution::getMaxBackedgeTakenCount(llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution17getSignExtendExprEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getSignExtendExpr(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution15isKnownPositiveEPKNS_4SCEVE\", \"llvm::ScalarEvolution::isKnownPositive(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution27isLoopBackedgeGuardedByCondEPKNS_4LoopENS_7CmpInst9PredicateEPKNS_4SCEVES8_\", \"llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(llvm::Loop const*, llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution24isLoopEntryGuardedByCondEPKNS_4LoopENS_7CmpInst9PredicateEPKNS_4SCEVES8_\", \"llvm::ScalarEvolution::isLoopEntryGuardedByCond(llvm::Loop const*, llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution15isKnownNegativeEPKNS_4SCEVE\", \"llvm::ScalarEvolution::isKnownNegative(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution14getSignedRangeEPKNS_4SCEVE\", \"llvm::ScalarEvolution::getSignedRange(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18isKnownNonNegativeEPKNS_4SCEVE\", \"llvm::ScalarEvolution::isKnownNonNegative(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution16getAnyExtendExprEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getAnyExtendExpr(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution17getTruncateOrNoopEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getTruncateOrNoop(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_Z17GroupByComplexityRN4llvm15SmallVectorImplIPKNS_4SCEVEEEPNS_8LoopInfoE\", \"GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*)\"},\n    {\"_Z28CollectAddOperandsWithScalesRN4llvm8DenseMapIPKNS_4SCEVENS_5APIntENS_12DenseMapInfoIS3_EENS5_IS4_EEEERNS_11SmallVectorIS3_Lj8EEERS4_PKS3_mRKS4_RNS_15ScalarEvolutionE\", \"CollectAddOperandsWithScales(llvm::DenseMap<llvm::SCEV const*, llvm::APInt, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::APInt> >&, llvm::SmallVector<llvm::SCEV const*, 8u>&, llvm::APInt&, llvm::SCEV const* const*, unsigned long, llvm::APInt const&, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm15ScalarEvolution15isLoopInvariantEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::isLoopInvariant(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getUDivExprEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getUDivExpr(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getSMaxExprEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getSMaxExpr(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getSMaxExprERNS_15SmallVectorImplIPKNS_4SCEVEEE\", \"llvm::ScalarEvolution::getSMaxExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&)\"},\n    {\"_ZN4llvm15ScalarEvolution16isKnownPredicateENS_7CmpInst9PredicateEPKNS_4SCEVES5_\", \"llvm::ScalarEvolution::isKnownPredicate(llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getUMaxExprEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getUMaxExpr(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getUMaxExprERNS_15SmallVectorImplIPKNS_4SCEVEEE\", \"llvm::ScalarEvolution::getUMaxExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&)\"},\n    {\"_ZN4llvm15ScalarEvolution11getSMinExprEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getSMinExpr(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution10getNotSCEVEPKNS_4SCEVE\", \"llvm::ScalarEvolution::getNotSCEV(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11getUMinExprEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getUMinExpr(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution13getSizeOfExprEPKNS_4TypeE\", \"llvm::ScalarEvolution::getSizeOfExpr(llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution14getAlignOfExprEPKNS_4TypeE\", \"llvm::ScalarEvolution::getAlignOfExpr(llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution15getOffsetOfExprEPKNS_10StructTypeEj\", \"llvm::ScalarEvolution::getOffsetOfExpr(llvm::StructType const*, unsigned int)\"},\n    {\"_ZN4llvm15ScalarEvolution15getOffsetOfExprEPKNS_4TypeEPNS_8ConstantE\", \"llvm::ScalarEvolution::getOffsetOfExpr(llvm::Type const*, llvm::Constant*)\"},\n    {\"_ZN4llvm15ScalarEvolution10getUnknownEPNS_5ValueE\", \"llvm::ScalarEvolution::getUnknown(llvm::Value*)\"},\n    {\"_ZNK4llvm15ScalarEvolution10isSCEVableEPKNS_4TypeE\", \"llvm::ScalarEvolution::isSCEVable(llvm::Type const*) const\"},\n    {\"_ZN4llvm15ScalarEvolution18getCouldNotComputeEv\", \"llvm::ScalarEvolution::getCouldNotCompute()\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVHC1EPNS_5ValueEPS0_\", \"llvm::ScalarEvolution::SCEVCallbackVH::SCEVCallbackVH(llvm::Value*, llvm::ScalarEvolution*)\"},\n    {\"_ZN4llvm15ScalarEvolution10createSCEVEPNS_5ValueE\", \"llvm::ScalarEvolution::createSCEV(llvm::Value*)\"},\n    {\"_ZN4llvm15ScalarEvolution15getNegativeSCEVEPKNS_4SCEVE\", \"llvm::ScalarEvolution::getNegativeSCEV(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution12getMinusSCEVEPKNS_4SCEVES3_bb\", \"llvm::ScalarEvolution::getMinusSCEV(llvm::SCEV const*, llvm::SCEV const*, bool, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution19getNoopOrZeroExtendEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getNoopOrZeroExtend(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution19getNoopOrSignExtendEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getNoopOrSignExtend(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18getNoopOrAnyExtendEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::ScalarEvolution::getNoopOrAnyExtend(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15ScalarEvolution26getUMaxFromMismatchedTypesEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getUMaxFromMismatchedTypes(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution26getUMinFromMismatchedTypesEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::getUMinFromMismatchedTypes(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18ForgetSymbolicNameEPNS_11InstructionEPKNS_4SCEVE\", \"llvm::ScalarEvolution::ForgetSymbolicName(llvm::Instruction*, llvm::SCEV const*)\"},\n    {\"_ZNK4llvm15ScalarEvolution10hasOperandEPKNS_4SCEVES3_\", \"llvm::ScalarEvolution::hasOperand(llvm::SCEV const*, llvm::SCEV const*) const\"},\n    {\"_ZN4llvm15ScalarEvolution16createNodeForPHIEPNS_7PHINodeE\", \"llvm::ScalarEvolution::createNodeForPHI(llvm::PHINode*)\"},\n    {\"_ZN4llvm15ScalarEvolution16createNodeForGEPEPNS_11GEPOperatorE\", \"llvm::ScalarEvolution::createNodeForGEP(llvm::GEPOperator*)\"},\n    {\"_ZN4llvm15ScalarEvolution19GetMinTrailingZerosEPKNS_4SCEVE\", \"llvm::ScalarEvolution::GetMinTrailingZeros(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18isKnownNonPositiveEPKNS_4SCEVE\", \"llvm::ScalarEvolution::isKnownNonPositive(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution21getBackedgeTakenCountEPKNS_4LoopE\", \"llvm::ScalarEvolution::getBackedgeTakenCount(llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution20getBackedgeTakenInfoEPKNS_4LoopE\", \"llvm::ScalarEvolution::getBackedgeTakenInfo(llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution25ComputeBackedgeTakenCountEPKNS_4LoopE\", \"llvm::ScalarEvolution::ComputeBackedgeTakenCount(llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution10forgetLoopEPKNS_4LoopE\", \"llvm::ScalarEvolution::forgetLoop(llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution11forgetValueEPNS_5ValueE\", \"llvm::ScalarEvolution::forgetValue(llvm::Value*)\"},\n    {\"_ZN4llvm15ScalarEvolution33ComputeBackedgeTakenCountFromExitEPKNS_4LoopEPNS_10BasicBlockE\", \"llvm::ScalarEvolution::ComputeBackedgeTakenCountFromExit(llvm::Loop const*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15ScalarEvolution37ComputeBackedgeTakenCountFromExitCondEPKNS_4LoopEPNS_5ValueEPNS_10BasicBlockES7_\", \"llvm::ScalarEvolution::ComputeBackedgeTakenCountFromExitCond(llvm::Loop const*, llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15ScalarEvolution41ComputeBackedgeTakenCountFromExitCondICmpEPKNS_4LoopEPNS_8ICmpInstEPNS_10BasicBlockES7_\", \"llvm::ScalarEvolution::ComputeBackedgeTakenCountFromExitCondICmp(llvm::Loop const*, llvm::ICmpInst*, llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15ScalarEvolution37ComputeBackedgeTakenCountExhaustivelyEPKNS_4LoopEPNS_5ValueEb\", \"llvm::ScalarEvolution::ComputeBackedgeTakenCountExhaustively(llvm::Loop const*, llvm::Value*, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution44ComputeLoadConstantCompareBackedgeTakenCountEPNS_8LoadInstEPNS_8ConstantEPKNS_4LoopENS_7CmpInst9PredicateE\", \"llvm::ScalarEvolution::ComputeLoadConstantCompareBackedgeTakenCount(llvm::LoadInst*, llvm::Constant*, llvm::Loop const*, llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm15ScalarEvolution14getSCEVAtScopeEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::getSCEVAtScope(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution20SimplifyICmpOperandsERNS_7CmpInst9PredicateERPKNS_4SCEVES7_\", \"llvm::ScalarEvolution::SimplifyICmpOperands(llvm::CmpInst::Predicate&, llvm::SCEV const*&, llvm::SCEV const*&)\"},\n    {\"_ZNK4llvm14SCEVAddRecExpr23getNumIterationsInRangeENS_13ConstantRangeERNS_15ScalarEvolutionE\", \"llvm::SCEVAddRecExpr::getNumIterationsInRange(llvm::ConstantRange, llvm::ScalarEvolution&) const\"},\n    {\"_ZN4llvm15ScalarEvolution12HowFarToZeroEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::HowFarToZero(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution15HowFarToNonZeroEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::HowFarToNonZero(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution16HowManyLessThansEPKNS_4SCEVES3_PKNS_4LoopEb\", \"llvm::ScalarEvolution::HowManyLessThans(llvm::SCEV const*, llvm::SCEV const*, llvm::Loop const*, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution33getConstantEvolutionLoopExitValueEPNS_7PHINodeERKNS_5APIntEPKNS_4LoopE\", \"llvm::ScalarEvolution::getConstantEvolutionLoopExitValue(llvm::PHINode*, llvm::APInt const&, llvm::Loop const*)\"},\n    {\"_Z22getConstantEvolvingPHIPN4llvm5ValueEPKNS_4LoopE\", \"getConstantEvolvingPHI(llvm::Value*, llvm::Loop const*)\"},\n    {\"_Z18EvaluateExpressionPN4llvm5ValueEPNS_8ConstantEPKNS_10DataLayoutE\", \"EvaluateExpression(llvm::Value*, llvm::Constant*, llvm::DataLayout const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18computeSCEVAtScopeEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::computeSCEVAtScope(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution14getSCEVAtScopeEPNS_5ValueEPKNS_4LoopE\", \"llvm::ScalarEvolution::getSCEVAtScope(llvm::Value*, llvm::Loop const*)\"},\n    {\"_Z22SolveQuadraticEquationPKN4llvm14SCEVAddRecExprERNS_15ScalarEvolutionE\", \"SolveQuadraticEquation(llvm::SCEVAddRecExpr const*, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm15ScalarEvolution38getPredecessorWithUniqueSuccessorForBBEPNS_10BasicBlockE\", \"llvm::ScalarEvolution::getPredecessorWithUniqueSuccessorForBB(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15ScalarEvolution17properlyDominatesEPKNS_4SCEVEPKNS_10BasicBlockE\", \"llvm::ScalarEvolution::properlyDominates(llvm::SCEV const*, llvm::BasicBlock const*)\"},\n    {\"_Z12HasSameValuePKN4llvm4SCEVES2_\", \"HasSameValue(llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution14isKnownNonZeroEPKNS_4SCEVE\", \"llvm::ScalarEvolution::isKnownNonZero(llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution26isKnownPredicateWithRangesENS_7CmpInst9PredicateEPKNS_4SCEVES5_\", \"llvm::ScalarEvolution::isKnownPredicateWithRanges(llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution13isImpliedCondENS_7CmpInst9PredicateEPKNS_4SCEVES5_PNS_5ValueEb\", \"llvm::ScalarEvolution::isImpliedCond(llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*, llvm::Value*, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution21isImpliedCondOperandsENS_7CmpInst9PredicateEPKNS_4SCEVES5_S5_S5_\", \"llvm::ScalarEvolution::isImpliedCondOperands(llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution27isImpliedCondOperandsHelperENS_7CmpInst9PredicateEPKNS_4SCEVES5_S5_S5_\", \"llvm::ScalarEvolution::isImpliedCondOperandsHelper(llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*)\"},\n    {\"_ZN4llvm15ScalarEvolution10getBECountEPKNS_4SCEVES3_S3_b\", \"llvm::ScalarEvolution::getBECount(llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*, bool)\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVH7deletedEv\", \"llvm::ScalarEvolution::SCEVCallbackVH::deleted()\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVH19allUsesReplacedWithEPNS_5ValueE\", \"llvm::ScalarEvolution::SCEVCallbackVH::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVHC2EPNS_5ValueEPS0_\", \"llvm::ScalarEvolution::SCEVCallbackVH::SCEVCallbackVH(llvm::Value*, llvm::ScalarEvolution*)\"},\n    {\"_ZN4llvm15ScalarEvolutionC1Ev\", \"llvm::ScalarEvolution::ScalarEvolution()\"},\n    {\"_ZN4llvm15ScalarEvolutionC2Ev\", \"llvm::ScalarEvolution::ScalarEvolution()\"},\n    {\"_ZN4llvm15ScalarEvolution13runOnFunctionERNS_8FunctionE\", \"llvm::ScalarEvolution::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm15ScalarEvolution13releaseMemoryEv\", \"llvm::ScalarEvolution::releaseMemory()\"},\n    {\"_ZNK4llvm15ScalarEvolution16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::ScalarEvolution::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm15ScalarEvolution34hasLoopInvariantBackedgeTakenCountEPKNS_4LoopE\", \"llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount(llvm::Loop const*)\"},\n    {\"_ZNK4llvm15ScalarEvolution5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::ScalarEvolution::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_Z13PrintLoopInfoRN4llvm11raw_ostreamEPNS_15ScalarEvolutionEPKNS_4LoopE\", \"PrintLoopInfo(llvm::raw_ostream&, llvm::ScalarEvolution*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution18getLoopDispositionEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::getLoopDisposition(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution22computeLoopDispositionEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::computeLoopDisposition(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution26hasComputableLoopEvolutionEPKNS_4SCEVEPKNS_4LoopE\", \"llvm::ScalarEvolution::hasComputableLoopEvolution(llvm::SCEV const*, llvm::Loop const*)\"},\n    {\"_ZN4llvm15ScalarEvolution19getBlockDispositionEPKNS_4SCEVEPKNS_10BasicBlockE\", \"llvm::ScalarEvolution::getBlockDisposition(llvm::SCEV const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm15ScalarEvolution23computeBlockDispositionEPKNS_4SCEVEPKNS_10BasicBlockE\", \"llvm::ScalarEvolution::computeBlockDisposition(llvm::SCEV const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm15ScalarEvolution9dominatesEPKNS_4SCEVEPKNS_10BasicBlockE\", \"llvm::ScalarEvolution::dominates(llvm::SCEV const*, llvm::BasicBlock const*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5APIntESt4pairIKS1_NS0_11SmallVectorIPKNS0_4SCEVELj4EEEESt10_Select1stIS9_EN12_GLOBAL__N_112APIntCompareESaIS9_EE9_M_insertEPSt18_Rb_tree_node_baseSH_RKS9_\", \"std::_Rb_tree<llvm::APInt, std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> >, std::_Select1st<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > >, (anonymous namespace)::APIntCompare, std::allocator<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5APIntESt4pairIKS1_NS0_11SmallVectorIPKNS0_4SCEVELj4EEEESt10_Select1stIS9_EN12_GLOBAL__N_112APIntCompareESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<llvm::APInt, std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> >, std::_Select1st<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > >, (anonymous namespace)::APIntCompare, std::allocator<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > > >::_M_insert_unique(std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm5APIntESt4pairIKS1_NS0_11SmallVectorIPKNS0_4SCEVELj4EEEESt10_Select1stIS9_EN12_GLOBAL__N_112APIntCompareESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<llvm::APInt, std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> >, std::_Select1st<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > >, (anonymous namespace)::APIntCompare, std::allocator<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::APInt const, llvm::SmallVector<llvm::SCEV const*, 4u> > >*)\"},\n    {\"_ZSt21__inplace_stable_sortIPPKN4llvm4SCEVEN12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_T0_\", \"void std::__inplace_stable_sort<llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPPKN4llvm4SCEVES4_lN12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_T0_T1_T2_\", \"void std::__stable_sort_adaptive<llvm::SCEV const**, llvm::SCEV const**, long, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, long, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPPKN4llvm4SCEVES4_N12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_T0_T1_\", \"void std::__merge_sort_with_buffer<llvm::SCEV const**, llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZSt16__merge_adaptiveIPPKN4llvm4SCEVElS4_N12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_S7_T0_S8_T1_S8_T2_\", \"void std::__merge_adaptive<llvm::SCEV const**, long, llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, long, long, llvm::SCEV const**, long, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZSt16__insertion_sortIPPKN4llvm4SCEVEN12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_T0_\", \"void std::__insertion_sort<llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZSt22__merge_without_bufferIPPKN4llvm4SCEVElN12_GLOBAL__N_121SCEVComplexityCompareEEvT_S7_S7_T0_S8_T1_\", \"void std::__merge_without_buffer<llvm::SCEV const**, long, (anonymous namespace)::SCEVComplexityCompare>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, long, long, (anonymous namespace)::SCEVComplexityCompare)\"},\n    {\"_ZNK12_GLOBAL__N_121SCEVComplexityCompare7compareEPKN4llvm4SCEVES4_\", \"(anonymous namespace)::SCEVComplexityCompare::compare(llvm::SCEV const*, llvm::SCEV const*) const\"},\n    {\"_ZN4llvm15ScalarEvolution10getAddExprEPKNS_4SCEVES3_S3_bb\", \"llvm::ScalarEvolution::getAddExpr(llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV const*, bool, bool)\"},\n    {\"_ZNK4llvm11ConstantInt10isMaxValueEb\", \"llvm::ConstantInt::isMaxValue(bool) const\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE4findERKS2_\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::find(llvm::ScalarEvolution::SCEVCallbackVH const&)\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVHD1Ev\", \"llvm::ScalarEvolution::SCEVCallbackVH::~SCEVCallbackVH()\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE6insertERKSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::insert(std::pair<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE5eraseENS_16DenseMapIteratorIS2_S5_S9_SA_Lb0EEE\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::erase(llvm::DenseMapIterator<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*>, false>)\"},\n    {\"_ZN4llvm8LoopInfo29replacementPreservesLCSSAFormEPNS_11InstructionEPNS_5ValueE\", \"llvm::LoopInfo::replacementPreservesLCSSAForm(llvm::Instruction*, llvm::Value*)\"},\n    {\"_ZN4llvm15ScalarEvolution16setUnsignedRangeEPKNS_4SCEVERKNS_13ConstantRangeE\", \"llvm::ScalarEvolution::setUnsignedRange(llvm::SCEV const*, llvm::ConstantRange const&)\"},\n    {\"_ZN4llvm15ScalarEvolution14setSignedRangeEPKNS_4SCEVERKNS_13ConstantRangeE\", \"llvm::ScalarEvolution::setSignedRange(llvm::SCEV const*, llvm::ConstantRange const&)\"},\n    {\"_ZNK4llvm5APInt3ugtEy\", \"llvm::APInt::ugt(unsigned long long) const\"},\n    {\"_ZNSt3mapIPKN4llvm4SCEVES_IPKNS0_4LoopES3_St4lessIS6_ESaISt4pairIKS6_S3_EEES7_IS3_ESaIS9_IKS3_SD_EEEixERSF_\", \"std::map<llvm::SCEV const*, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::operator[](llvm::SCEV const* const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE5eraseERKS2_\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::erase(llvm::ScalarEvolution::SCEVCallbackVH const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE5clearEv\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE5clearEv\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::clear()\"},\n    {\"_ZNSt3mapIPKN4llvm4SCEVES_IPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS6_ESaISt4pairIKS6_S8_EEES9_IS3_ESaISB_IKS3_SF_EEEixERSH_\", \"std::map<llvm::SCEV const*, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::operator[](llvm::SCEV const* const&)\"},\n    {\"_ZNSt3mapIPKN4llvm4SCEVES_IPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS6_ESaISt4pairIKS6_S8_EEES9_IS3_ESaISB_IKS3_SF_EEEixERSH_\", \"std::map<llvm::SCEV const*, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::operator[](llvm::SCEV const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE5eraseERKS3_\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::erase(llvm::SCEV const* const&)\"},\n    {\"_ZN4llvm11SCEVUnknownD1Ev\", \"llvm::SCEVUnknown::~SCEVUnknown()\"},\n    {\"_ZN4llvm11SCEVUnknownD0Ev\", \"llvm::SCEVUnknown::~SCEVUnknown()\"},\n    {\"_ZN4llvm15ScalarEvolution14SCEVCallbackVHD0Ev\", \"llvm::ScalarEvolution::SCEVCallbackVH::~SCEVCallbackVH()\"},\n    {\"_ZN4llvm15ScalarEvolutionD1Ev\", \"llvm::ScalarEvolution::~ScalarEvolution()\"},\n    {\"_ZN4llvm15ScalarEvolutionD0Ev\", \"llvm::ScalarEvolution::~ScalarEvolution()\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE5eraseESt17_Rb_tree_iteratorISI_ESP_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_NS0_15ScalarEvolution16BlockDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE8_M_eraseEPSt13_Rb_tree_nodeISI_E\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE5eraseESt17_Rb_tree_iteratorISI_ESP_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution15LoopDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE8_M_eraseEPSt13_Rb_tree_nodeISI_E\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopES3_St4lessIS9_ESaIS4_IKS9_S3_EEEESt10_Select1stISG_ESA_IS3_ESaISG_EE5eraseESt17_Rb_tree_iteratorISG_ESN_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_PKNS0_4SCEVEESt10_Select1stIS9_ESt4lessIS3_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::SCEV const*>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::SCEV const*> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::SCEV const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopES3_St4lessIS9_ESaIS4_IKS9_S3_EEEESt10_Select1stISG_ESA_IS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_NS0_15ScalarEvolution16BlockDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >, std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_NS0_15ScalarEvolution16BlockDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > >::_M_insert_unique(std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm10BasicBlockESt4pairIKS3_NS0_15ScalarEvolution16BlockDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_\", \"std::_Rb_tree<llvm::BasicBlock const*, std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition>, std::_Select1st<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > const*, std::_Rb_tree_node<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISI_ERKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE9_M_insertEPSt18_Rb_tree_node_baseSP_RKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_10BasicBlockENS0_15ScalarEvolution16BlockDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE16_M_insert_uniqueERKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > > >::_M_insert_unique(std::pair<llvm::SCEV const* const, std::map<llvm::BasicBlock const*, llvm::ScalarEvolution::BlockDisposition, std::less<llvm::BasicBlock const*>, std::allocator<std::pair<llvm::BasicBlock const* const, llvm::ScalarEvolution::BlockDisposition> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution15LoopDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution15LoopDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > >::_M_insert_unique(std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution15LoopDispositionEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > const*, std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISI_ERKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE9_M_insertEPSt18_Rb_tree_node_baseSP_RKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopENS0_15ScalarEvolution15LoopDispositionESt4lessIS9_ESaIS4_IKS9_SB_EEEESt10_Select1stISI_ESC_IS3_ESaISI_EE16_M_insert_uniqueERKSI_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > > >::_M_insert_unique(std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::ScalarEvolution::LoopDisposition, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::LoopDisposition> > > > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::shrink_and_clear()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm7PHINodeESt4pairIKS2_PNS0_8ConstantEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::PHINode*, std::pair<llvm::PHINode* const, llvm::Constant*>, std::_Select1st<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::less<llvm::PHINode*>, std::allocator<std::pair<llvm::PHINode* const, llvm::Constant*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::PHINode* const, llvm::Constant*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution17BackedgeTakenInfoEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >*)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::shrink_and_clear()\"},\n    {\"_ZN4llvm10FoldingSetINS_4SCEVEED1Ev\", \"llvm::FoldingSet<llvm::SCEV>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_4SCEVEED0Ev\", \"llvm::FoldingSet<llvm::SCEV>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_4SCEVEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::SCEV>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_4SCEVEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS6_\", \"llvm::FoldingSet<llvm::SCEV>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_4SCEVEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::SCEV>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE4initEj\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::init(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE15LookupBucketForERKS2_RPSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::LookupBucketFor(llvm::ScalarEvolution::SCEVCallbackVH const&, std::pair<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*>*&) const\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_PKNS0_4SCEVEESt10_Select1stIS9_ESt4lessIS3_ESaIS9_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS9_ERKS9_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::SCEV const*>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::SCEV const*> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Loop const* const, llvm::SCEV const*> >, std::pair<llvm::Loop const* const, llvm::SCEV const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_PKNS0_4SCEVEESt10_Select1stIS9_ESt4lessIS3_ESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::SCEV const*>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::SCEV const*> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > >::_M_insert_unique(std::pair<llvm::Loop const* const, llvm::SCEV const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_PKNS0_4SCEVEESt10_Select1stIS9_ESt4lessIS3_ESaIS9_EE7_M_copyEPKSt13_Rb_tree_nodeIS9_EPSH_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::SCEV const*>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::SCEV const*> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > >::_M_copy(std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::SCEV const*> > const*, std::_Rb_tree_node<std::pair<llvm::Loop const* const, llvm::SCEV const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopES3_St4lessIS9_ESaIS4_IKS9_S3_EEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISG_ERKSG_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopES3_St4lessIS9_ESaIS4_IKS9_S3_EEEESt10_Select1stISG_ESA_IS3_ESaISG_EE9_M_insertEPSt18_Rb_tree_node_baseSN_RKSG_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4SCEVESt4pairIKS3_St3mapIPKNS0_4LoopES3_St4lessIS9_ESaIS4_IKS9_S3_EEEESt10_Select1stISG_ESA_IS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::SCEV const*, std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > >, std::_Select1st<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > >, std::less<llvm::SCEV const*>, std::allocator<std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > > >::_M_insert_unique(std::pair<llvm::SCEV const* const, std::map<llvm::Loop const*, llvm::SCEV const*, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::SCEV const*> > > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm7PHINodeESt4pairIKS2_PNS0_8ConstantEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<llvm::PHINode*, std::pair<llvm::PHINode* const, llvm::Constant*>, std::_Select1st<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::less<llvm::PHINode*>, std::allocator<std::pair<llvm::PHINode* const, llvm::Constant*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::pair<llvm::PHINode* const, llvm::Constant*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm7PHINodeESt4pairIKS2_PNS0_8ConstantEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<llvm::PHINode*, std::pair<llvm::PHINode* const, llvm::Constant*>, std::_Select1st<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::less<llvm::PHINode*>, std::allocator<std::pair<llvm::PHINode* const, llvm::Constant*> > >::_M_insert_unique(std::pair<llvm::PHINode* const, llvm::Constant*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm11ConstantIntESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::ConstantInt*, std::allocator<llvm::ConstantInt*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::ConstantInt**, std::vector<llvm::ConstantInt*, std::allocator<llvm::ConstantInt*> > >, llvm::ConstantInt* const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution17BackedgeTakenInfoEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE5eraseESt17_Rb_tree_iteratorIS8_ESG_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >, std::_Rb_tree_iterator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm7PHINodeESt4pairIKS2_PNS0_8ConstantEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<llvm::PHINode*, std::pair<llvm::PHINode* const, llvm::Constant*>, std::_Select1st<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::less<llvm::PHINode*>, std::allocator<std::pair<llvm::PHINode* const, llvm::Constant*> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::PHINode* const, llvm::Constant*> >, std::_Rb_tree_iterator<std::pair<llvm::PHINode* const, llvm::Constant*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4LoopESt4pairIKS3_NS0_15ScalarEvolution17BackedgeTakenInfoEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE16_M_insert_uniqueERKS8_\", \"std::_Rb_tree<llvm::Loop const*, std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo>, std::_Select1st<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> >, std::less<llvm::Loop const*>, std::allocator<std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> > >::_M_insert_unique(std::pair<llvm::Loop const* const, llvm::ScalarEvolution::BackedgeTakenInfo> const&)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::InsertIntoBucket(llvm::ScalarEvolution::SCEVCallbackVH const&, llvm::SCEV const* const&, std::pair<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*>*)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapINS_15ScalarEvolution14SCEVCallbackVHEPKNS_4SCEVENS_12DenseMapInfoIPNS_5ValueEEENS6_IS5_EEED2Ev\", \"llvm::DenseMap<llvm::ScalarEvolution::SCEVCallbackVH, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::SCEV const*> >::~DenseMap()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEED2Ev\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::~DenseMap()\"},\n    {\"_ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE13getExitBlocksERNS_15SmallVectorImplIPS1_EE\", \"llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getExitBlocks(llvm::SmallVectorImpl<llvm::BasicBlock*>&) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE6insertERKSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::insert(std::pair<llvm::SCEV const*, llvm::ConstantRange> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::InsertIntoBucket(llvm::SCEV const* const&, llvm::ConstantRange const&, std::pair<llvm::SCEV const*, llvm::ConstantRange>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_13ConstantRangeENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, llvm::ConstantRange, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::ConstantRange> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_5APIntENS_12DenseMapInfoIS3_EENS5_IS4_EEE6insertERKSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::APInt, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::APInt> >::insert(std::pair<llvm::SCEV const*, llvm::APInt> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_5APIntENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::APInt, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::APInt> >::InsertIntoBucket(llvm::SCEV const* const&, llvm::APInt const&, std::pair<llvm::SCEV const*, llvm::APInt>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVENS_5APIntENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, llvm::APInt, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::APInt> >::grow(unsigned int)\"},\n    {\"_ZSt8__rotateIPPKN4llvm4SCEVEEvT_S5_S5_St26random_access_iterator_tag\", \"void std::__rotate<llvm::SCEV const**>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_15ScalarEvolutionEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::ScalarEvolution>()\"},\n    {\"_ZN4llvm12SCEVExpander17ReuseOrCreateCastEPNS_5ValueEPKNS_4TypeENS_11Instruction7CastOpsENS_14ilist_iteratorIS6_EE\", \"llvm::SCEVExpander::ReuseOrCreateCast(llvm::Value*, llvm::Type const*, llvm::Instruction::CastOps, llvm::ilist_iterator<llvm::Instruction>)\"},\n    {\"_ZN4llvm12SCEVExpander19rememberInstructionEPNS_5ValueE\", \"llvm::SCEVExpander::rememberInstruction(llvm::Value*)\"},\n    {\"_ZN4llvm12SCEVExpander18InsertNoopCastOfToEPNS_5ValueEPKNS_4TypeE\", \"llvm::SCEVExpander::InsertNoopCastOfTo(llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN4llvm12SCEVExpander11InsertBinopENS_11Instruction9BinaryOpsEPNS_5ValueES4_\", \"llvm::SCEVExpander::InsertBinop(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm12SCEVExpander18restoreInsertPointEPNS_10BasicBlockENS_14ilist_iteratorINS_11InstructionEEE\", \"llvm::SCEVExpander::restoreInsertPoint(llvm::BasicBlock*, llvm::ilist_iterator<llvm::Instruction>)\"},\n    {\"_ZN4llvm12SCEVExpander14expandAddToGEPEPKPKNS_4SCEVES5_PKNS_11PointerTypeEPKNS_4TypeEPNS_5ValueE\", \"llvm::SCEVExpander::expandAddToGEP(llvm::SCEV const* const*, llvm::SCEV const* const*, llvm::PointerType const*, llvm::Type const*, llvm::Value*)\"},\n    {\"_Z17FactorOutConstantRPKN4llvm4SCEVES3_S2_RNS_15ScalarEvolutionEPKNS_10DataLayoutE\", \"FactorOutConstant(llvm::SCEV const*&, llvm::SCEV const*&, llvm::SCEV const*, llvm::ScalarEvolution&, llvm::DataLayout const*)\"},\n    {\"_Z19SimplifyAddOperandsRN4llvm15SmallVectorImplIPKNS_4SCEVEEEPKNS_4TypeERNS_15ScalarEvolutionE\", \"SimplifyAddOperands(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::Type const*, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm12SCEVExpander13expandCodeForEPKNS_4SCEVEPKNS_4TypeE\", \"llvm::SCEVExpander::expandCodeFor(llvm::SCEV const*, llvm::Type const*)\"},\n    {\"_ZN4llvm12SCEVExpander6expandEPKNS_4SCEVE\", \"llvm::SCEVExpander::expand(llvm::SCEV const*)\"},\n    {\"_ZN4llvm12SCEVExpander15getRelevantLoopEPKNS_4SCEVE\", \"llvm::SCEVExpander::getRelevantLoop(llvm::SCEV const*)\"},\n    {\"_ZN4llvm12SCEVExpander12visitAddExprEPKNS_11SCEVAddExprE\", \"llvm::SCEVExpander::visitAddExpr(llvm::SCEVAddExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander12visitMulExprEPKNS_11SCEVMulExprE\", \"llvm::SCEVExpander::visitMulExpr(llvm::SCEVMulExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander13visitUDivExprEPKNS_12SCEVUDivExprE\", \"llvm::SCEVExpander::visitUDivExpr(llvm::SCEVUDivExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander25getAddRecExprPHILiterallyEPKNS_14SCEVAddRecExprEPKNS_4LoopEPKNS_4TypeES9_\", \"llvm::SCEVExpander::getAddRecExprPHILiterally(llvm::SCEVAddRecExpr const*, llvm::Loop const*, llvm::Type const*, llvm::Type const*)\"},\n    {\"_ZN4llvm12SCEVExpander13expandCodeForEPKNS_4SCEVEPKNS_4TypeEPNS_11InstructionE\", \"llvm::SCEVExpander::expandCodeFor(llvm::SCEV const*, llvm::Type const*, llvm::Instruction*)\"},\n    {\"_ZN4llvm12SCEVExpander25expandAddRecExprLiterallyEPKNS_14SCEVAddRecExprE\", \"llvm::SCEVExpander::expandAddRecExprLiterally(llvm::SCEVAddRecExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander15visitAddRecExprEPKNS_14SCEVAddRecExprE\", \"llvm::SCEVExpander::visitAddRecExpr(llvm::SCEVAddRecExpr const*)\"},\n    {\"_Z17ExposePointerBaseRPKN4llvm4SCEVES3_RNS_15ScalarEvolutionE\", \"ExposePointerBase(llvm::SCEV const*&, llvm::SCEV const*&, llvm::ScalarEvolution&)\"},\n    {\"_ZN4llvm12SCEVExpander17visitTruncateExprEPKNS_16SCEVTruncateExprE\", \"llvm::SCEVExpander::visitTruncateExpr(llvm::SCEVTruncateExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander19visitZeroExtendExprEPKNS_18SCEVZeroExtendExprE\", \"llvm::SCEVExpander::visitZeroExtendExpr(llvm::SCEVZeroExtendExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander19visitSignExtendExprEPKNS_18SCEVSignExtendExprE\", \"llvm::SCEVExpander::visitSignExtendExpr(llvm::SCEVSignExtendExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander13visitSMaxExprEPKNS_12SCEVSMaxExprE\", \"llvm::SCEVExpander::visitSMaxExpr(llvm::SCEVSMaxExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander13visitUMaxExprEPKNS_12SCEVUMaxExprE\", \"llvm::SCEVExpander::visitUMaxExpr(llvm::SCEVUMaxExpr const*)\"},\n    {\"_ZN4llvm12SCEVExpander37getOrInsertCanonicalInductionVariableEPKNS_4LoopEPKNS_4TypeE\", \"llvm::SCEVExpander::getOrInsertCanonicalInductionVariable(llvm::Loop const*, llvm::Type const*)\"},\n    {\"_ZSt21__inplace_stable_sortIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEEN12_GLOBAL__N_111LoopCompareEEvT_SC_T0_\", \"void std::__inplace_stable_sort<std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZSt22__stable_sort_adaptiveIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEES9_lN12_GLOBAL__N_111LoopCompareEEvT_SC_T0_T1_T2_\", \"void std::__stable_sort_adaptive<std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZSt24__merge_sort_with_bufferIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEES9_N12_GLOBAL__N_111LoopCompareEEvT_SC_T0_T1_\", \"void std::__merge_sort_with_buffer<std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZSt16__merge_adaptiveIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEElS9_N12_GLOBAL__N_111LoopCompareEEvT_SC_SC_T0_SD_T1_SD_T2_\", \"void std::__merge_adaptive<std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, long, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZSt5mergeIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEES9_S9_N12_GLOBAL__N_111LoopCompareEET1_T_SD_T0_SE_SC_T2_\", \"std::pair<llvm::Loop const*, llvm::SCEV const*>* std::merge<std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZNK12_GLOBAL__N_111LoopCompareclESt4pairIPKN4llvm4LoopEPKNS2_4SCEVEES9_\", \"(anonymous namespace)::LoopCompare::operator()(std::pair<llvm::Loop const*, llvm::SCEV const*>, std::pair<llvm::Loop const*, llvm::SCEV const*>) const\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEEN12_GLOBAL__N_111LoopCompareEEvT_SC_T0_\", \"void std::__insertion_sort<std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZSt22__merge_without_bufferIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEElN12_GLOBAL__N_111LoopCompareEEvT_SC_SC_T0_SD_T1_\", \"void std::__merge_without_buffer<std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, (anonymous namespace)::LoopCompare>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, long, (anonymous namespace)::LoopCompare)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE11CreateBinOpENS_11Instruction9BinaryOpsEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateBinOp(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateGEPEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateGEP(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateGEPIPPNS_5ValueEEES7_S7_T_S9_RKNS_5TwineE\", \"llvm::Value* llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateGEP<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, llvm::Twine const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEPKNS_4LoopENS_12DenseMapInfoIS3_EENS7_IS6_EEE6insertERKSt4pairIS3_S6_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::Loop const*, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::Loop const*> >::insert(std::pair<llvm::SCEV const*, llvm::Loop const*> const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreatePHIEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreatePHI(llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateSubEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateSub(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateAddEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateAdd(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE9CreateMulEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateMul(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE12CreateSelectEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateSelect(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm11SCEVVisitorINS_12SCEVExpanderEPNS_5ValueEE5visitEPKNS_4SCEVE\", \"llvm::SCEVVisitor<llvm::SCEVExpander, llvm::Value*>::visit(llvm::SCEV const*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4SCEVEPNS1_11InstructionEES0_IKS7_NS1_11AssertingVHINS1_5ValueEEEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISC_ERKSC_\", \"std::_Rb_tree<std::pair<llvm::SCEV const*, llvm::Instruction*>, std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> >, std::_Select1st<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > >, std::less<std::pair<llvm::SCEV const*, llvm::Instruction*> >, std::allocator<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > >, std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4SCEVEPNS1_11InstructionEES0_IKS7_NS1_11AssertingVHINS1_5ValueEEEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE16_M_insert_uniqueERKSC_\", \"std::_Rb_tree<std::pair<llvm::SCEV const*, llvm::Instruction*>, std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> >, std::_Select1st<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > >, std::less<std::pair<llvm::SCEV const*, llvm::Instruction*> >, std::allocator<std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > > >::_M_insert_unique(std::pair<std::pair<llvm::SCEV const*, llvm::Instruction*> const, llvm::AssertingVH<llvm::Value> > const&)\"},\n    {\"_ZN4llvm11SCEVVisitorINS_12SCEVExpanderEPNS_5ValueEE20visitCouldNotComputeEPKNS_19SCEVCouldNotComputeE\", \"llvm::SCEVVisitor<llvm::SCEVExpander, llvm::Value*>::visitCouldNotCompute(llvm::SCEVCouldNotCompute const*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateICmpENS_7CmpInst9PredicateEPNS_5ValueES8_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateICmp(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZNK4llvm12TargetFolder12CreateSelectEPNS_8ConstantES2_S2_\", \"llvm::TargetFolder::CreateSelect(llvm::Constant*, llvm::Constant*, llvm::Constant*) const\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_12TargetFolderENS_24IRBuilderDefaultInserterILb1EEEE10CreateCastENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::TargetFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&)\"},\n    {\"_ZNK4llvm12TargetFolder10CreateCastENS_11Instruction7CastOpsEPNS_8ConstantEPKNS_4TypeE\", \"llvm::TargetFolder::CreateCast(llvm::Instruction::CastOps, llvm::Constant*, llvm::Type const*) const\"},\n    {\"_ZN4llvm11SmallVectorIPKNS_4SCEVELj4EEC2EjRKS3_\", \"llvm::SmallVector<llvm::SCEV const*, 4u>::SmallVector(unsigned int, llvm::SCEV const* const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm11AssertingVHINS0_5ValueEEES3_St9_IdentityIS3_ESt4lessIS3_ESaIS3_EE16_M_insert_uniqueERKS3_\", \"std::_Rb_tree<llvm::AssertingVH<llvm::Value>, llvm::AssertingVH<llvm::Value>, std::_Identity<llvm::AssertingVH<llvm::Value> >, std::less<llvm::AssertingVH<llvm::Value> >, std::allocator<llvm::AssertingVH<llvm::Value> > >::_M_insert_unique(llvm::AssertingVH<llvm::Value> const&)\"},\n    {\"_ZSt4copyIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEES9_ET0_T_SB_SA_\", \"std::pair<llvm::Loop const*, llvm::SCEV const*>* std::copy<std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*)\"},\n    {\"_ZSt17__rotate_adaptiveIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEES9_lET_SA_SA_SA_T1_SB_T0_SB_\", \"std::pair<llvm::Loop const*, llvm::SCEV const*>* std::__rotate_adaptive<std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long, long, std::pair<llvm::Loop const*, llvm::SCEV const*>*, long)\"},\n    {\"_ZSt8__rotateIPSt4pairIPKN4llvm4LoopEPKNS1_4SCEVEEEvT_SA_SA_St26random_access_iterator_tag\", \"void std::__rotate<std::pair<llvm::Loop const*, llvm::SCEV const*>*>(std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::pair<llvm::Loop const*, llvm::SCEV const*>*, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEPKNS_4LoopENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PSt4pairIS3_S6_E\", \"llvm::DenseMap<llvm::SCEV const*, llvm::Loop const*, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::Loop const*> >::InsertIntoBucket(llvm::SCEV const* const&, llvm::Loop const* const&, std::pair<llvm::SCEV const*, llvm::Loop const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4SCEVEPKNS_4LoopENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::SCEV const*, llvm::Loop const*, llvm::DenseMapInfo<llvm::SCEV const*>, llvm::DenseMapInfo<llvm::Loop const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm22TransformForPostIncUseENS_13TransformKindEPKNS_4SCEVEPNS_11InstructionEPNS_5ValueERNS_11SmallPtrSetIPKNS_4LoopELj2EEERNS_15ScalarEvolutionERNS_13DominatorTreeE\", \"llvm::TransformForPostIncUse(llvm::TransformKind, llvm::SCEV const*, llvm::Instruction*, llvm::Value*, llvm::SmallPtrSet<llvm::Loop const*, 2u>&, llvm::ScalarEvolution&, llvm::DominatorTree&)\"},\n    {\"_ZN4llvm36initializeTypeBasedAliasAnalysisPassERNS_12PassRegistryE\", \"llvm::initializeTypeBasedAliasAnalysisPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm32createTypeBasedAliasAnalysisPassEv\", \"llvm::createTypeBasedAliasAnalysisPass()\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysisD1Ev\", \"(anonymous namespace)::TypeBasedAliasAnalysis::~TypeBasedAliasAnalysis()\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysisD0Ev\", \"(anonymous namespace)::TypeBasedAliasAnalysis::~TypeBasedAliasAnalysis()\"},\n    {\"_ZNK12_GLOBAL__N_122TypeBasedAliasAnalysis16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis26getAdjustedAnalysisPointerEPKv\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis14initializePassEv\", \"(anonymous namespace)::TypeBasedAliasAnalysis::initializePass()\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"(anonymous namespace)::TypeBasedAliasAnalysis::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"(anonymous namespace)::TypeBasedAliasAnalysis::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis17getModRefBehaviorEPKN4llvm8FunctionE\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"(anonymous namespace)::TypeBasedAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZThn32_NK12_GLOBAL__N_122TypeBasedAliasAnalysis16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysisD1Ev\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::~TypeBasedAliasAnalysis()\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysisD0Ev\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::~TypeBasedAliasAnalysis()\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis5aliasERKN4llvm13AliasAnalysis8LocationES5_\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::alias(llvm::AliasAnalysis::Location const&, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis22pointsToConstantMemoryERKN4llvm13AliasAnalysis8LocationEb\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::pointsToConstantMemory(llvm::AliasAnalysis::Location const&, bool)\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis17getModRefBehaviorEN4llvm17ImmutableCallSiteE\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::getModRefBehavior(llvm::ImmutableCallSite)\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis17getModRefBehaviorEPKN4llvm8FunctionE\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::getModRefBehavior(llvm::Function const*)\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteERKNS1_13AliasAnalysis8LocationE\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::AliasAnalysis::Location const&)\"},\n    {\"_ZThn32_N12_GLOBAL__N_122TypeBasedAliasAnalysis13getModRefInfoEN4llvm17ImmutableCallSiteES2_\", \"non-virtual thunk to (anonymous namespace)::TypeBasedAliasAnalysis::getModRefInfo(llvm::ImmutableCallSite, llvm::ImmutableCallSite)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_122TypeBasedAliasAnalysisEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::TypeBasedAliasAnalysis>()\"},\n    {\"_ZN4llvm17ComputeMaskedBitsEPNS_5ValueERKNS_5APIntERS2_S5_PKNS_10DataLayoutEj\", \"llvm::ComputeMaskedBits(llvm::Value*, llvm::APInt const&, llvm::APInt&, llvm::APInt&, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm14ComputeSignBitEPNS_5ValueERbS2_PKNS_10DataLayoutEj\", \"llvm::ComputeSignBit(llvm::Value*, bool&, bool&, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm12isPowerOfTwoEPNS_5ValueEPKNS_10DataLayoutEj\", \"llvm::isPowerOfTwo(llvm::Value*, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm14isKnownNonZeroEPNS_5ValueEPKNS_10DataLayoutEj\", \"llvm::isKnownNonZero(llvm::Value*, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm17MaskedValueIsZeroEPNS_5ValueERKNS_5APIntEPKNS_10DataLayoutEj\", \"llvm::MaskedValueIsZero(llvm::Value*, llvm::APInt const&, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm18ComputeNumSignBitsEPNS_5ValueEPKNS_10DataLayoutEj\", \"llvm::ComputeNumSignBits(llvm::Value*, llvm::DataLayout const*, unsigned int)\"},\n    {\"_ZN4llvm15ComputeMultipleEPNS_5ValueEjRS1_bj\", \"llvm::ComputeMultiple(llvm::Value*, unsigned int, llvm::Value*&, bool, unsigned int)\"},\n    {\"_ZN4llvm20CannotBeNegativeZeroEPKNS_5ValueEj\", \"llvm::CannotBeNegativeZero(llvm::Value const*, unsigned int)\"},\n    {\"_ZN4llvm15isBytewiseValueEPNS_5ValueE\", \"llvm::isBytewiseValue(llvm::Value*)\"},\n    {\"_ZN4llvm17FindInsertedValueEPNS_5ValueEPKjS3_PNS_11InstructionE\", \"llvm::FindInsertedValue(llvm::Value*, unsigned int const*, unsigned int const*, llvm::Instruction*)\"},\n    {\"_ZN4llvm32GetPointerBaseWithConstantOffsetEPNS_5ValueERxRKNS_10DataLayoutE\", \"llvm::GetPointerBaseWithConstantOffset(llvm::Value*, long long&, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm21GetConstantStringInfoEPKNS_5ValueERSsyb\", \"llvm::GetConstantStringInfo(llvm::Value const*, std::string&, unsigned long long, bool)\"},\n    {\"_ZN4llvm15GetStringLengthEPNS_5ValueE\", \"llvm::GetStringLength(llvm::Value*)\"},\n    {\"_Z16GetStringLengthHPN4llvm5ValueERNS_11SmallPtrSetIPNS_7PHINodeELj32EEE\", \"GetStringLengthH(llvm::Value*, llvm::SmallPtrSet<llvm::PHINode*, 32u>&)\"},\n    {\"_ZN4llvm19GetUnderlyingObjectEPNS_5ValueEPKNS_10DataLayoutEj\", \"llvm::GetUnderlyingObject(llvm::Value*, llvm::DataLayout const*, unsigned int)\"},\n    {\"_Z17BuildSubAggregatePN4llvm5ValueES1_PKNS_4TypeERNS_11SmallVectorIjLj10EEEjPNS_11InstructionE\", \"BuildSubAggregate(llvm::Value*, llvm::Value*, llvm::Type const*, llvm::SmallVector<unsigned int, 10u>&, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm12PatternMatch11cst_pred_tyINS0_11is_sign_bitEE5matchINS_5ValueEEEbPT_\", \"bool llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_sign_bit>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm12PatternMatch11cst_pred_tyINS0_11is_sign_bitEE5matchINS_8ConstantEEEbPT_\", \"bool llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_sign_bit>::match<llvm::Constant>(llvm::Constant*)\"},\n    {\"_ZN4llvm12PatternMatch14BinaryOp_matchINS0_11cst_pred_tyINS0_6is_oneEEENS0_11class_matchINS_5ValueEEELj20EE5matchIS6_EEbPT_\", \"bool llvm::PatternMatch::BinaryOp_match<llvm::PatternMatch::cst_pred_ty<llvm::PatternMatch::is_one>, llvm::PatternMatch::class_match<llvm::Value>, 20u>::match<llvm::Value>(llvm::Value*)\"},\n    {\"_ZN4llvm7Mangler17getNameWithPrefixERNS_15SmallVectorImplIcEERKNS_5TwineENS0_15ManglerPrefixTyE\", \"llvm::Mangler::getNameWithPrefix(llvm::SmallVectorImpl<char>&, llvm::Twine const&, llvm::Mangler::ManglerPrefixTy)\"},\n    {\"_ZN4llvm7Mangler17getNameWithPrefixERNS_15SmallVectorImplIcEEPKNS_11GlobalValueEb\", \"llvm::Mangler::getNameWithPrefix(llvm::SmallVectorImpl<char>&, llvm::GlobalValue const*, bool)\"},\n    {\"_ZN4llvm7Mangler17getNameWithPrefixEPKNS_11GlobalValueEb\", \"llvm::Mangler::getNameWithPrefix(llvm::GlobalValue const*, bool)\"},\n    {\"_ZN4llvm7Mangler9getSymbolEPKNS_11GlobalValueE\", \"llvm::Mangler::getSymbol(llvm::GlobalValue const*)\"},\n    {\"_Z12MangleLetterRN4llvm15SmallVectorImplIcEEh\", \"MangleLetter(llvm::SmallVectorImpl<char>&, unsigned char)\"},\n    {\"_ZN4llvm15SmallVectorImplIcE6insertEPcRKc\", \"llvm::SmallVectorImpl<char>::insert(char*, char const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11GlobalValueEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::GlobalValue const*, unsigned int, llvm::DenseMapInfo<llvm::GlobalValue const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::GlobalValue const* const&, unsigned int const&, std::pair<llvm::GlobalValue const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11GlobalValueEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::GlobalValue const*, unsigned int, llvm::DenseMapInfo<llvm::GlobalValue const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm17SubtargetFeatures10AddFeatureERKSsb\", \"llvm::SubtargetFeatures::AddFeature(std::string const&, bool)\"},\n    {\"_ZN4llvm15LowercaseStringERKSs\", \"llvm::LowercaseString(std::string const&)\"},\n    {\"_ZN4llvm17SubtargetFeaturesC1ERKSs\", \"llvm::SubtargetFeatures::SubtargetFeatures(std::string const&)\"},\n    {\"_ZN4llvm17SubtargetFeaturesC2ERKSs\", \"llvm::SubtargetFeatures::SubtargetFeatures(std::string const&)\"},\n    {\"_Z5SplitRSt6vectorISsSaISsEERKSs\", \"Split(std::vector<std::string, std::allocator<std::string> >&, std::string const&)\"},\n    {\"_ZNK4llvm17SubtargetFeatures9getStringEv\", \"llvm::SubtargetFeatures::getString() const\"},\n    {\"_ZN4llvm17SubtargetFeatures9setStringERKSs\", \"llvm::SubtargetFeatures::setString(std::string const&)\"},\n    {\"_ZN4llvm17SubtargetFeatures6setCPUERKSs\", \"llvm::SubtargetFeatures::setCPU(std::string const&)\"},\n    {\"_ZN4llvm17SubtargetFeatures12setCPUIfNoneERKSs\", \"llvm::SubtargetFeatures::setCPUIfNone(std::string const&)\"},\n    {\"_ZNK4llvm17SubtargetFeatures6getCPUEv\", \"llvm::SubtargetFeatures::getCPU() const\"},\n    {\"_ZN4llvm17SubtargetFeatures7getBitsEPKNS_18SubtargetFeatureKVEmS3_m\", \"llvm::SubtargetFeatures::getBits(llvm::SubtargetFeatureKV const*, unsigned long, llvm::SubtargetFeatureKV const*, unsigned long)\"},\n    {\"_Z4HelpPKN4llvm18SubtargetFeatureKVEmS2_m\", \"Help(llvm::SubtargetFeatureKV const*, unsigned long, llvm::SubtargetFeatureKV const*, unsigned long)\"},\n    {\"_Z14SetImpliedBitsRjPKN4llvm18SubtargetFeatureKVES3_m\", \"SetImpliedBits(unsigned int&, llvm::SubtargetFeatureKV const*, llvm::SubtargetFeatureKV const*, unsigned long)\"},\n    {\"_Z16ClearImpliedBitsRjPKN4llvm18SubtargetFeatureKVES3_m\", \"ClearImpliedBits(unsigned int&, llvm::SubtargetFeatureKV const*, llvm::SubtargetFeatureKV const*, unsigned long)\"},\n    {\"_ZN4llvm17SubtargetFeatures7getInfoEPKNS_15SubtargetInfoKVEm\", \"llvm::SubtargetFeatures::getInfo(llvm::SubtargetInfoKV const*, unsigned long)\"},\n    {\"_ZNK4llvm17SubtargetFeatures5printERNS_11raw_ostreamE\", \"llvm::SubtargetFeatures::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm17SubtargetFeatures4dumpEv\", \"llvm::SubtargetFeatures::dump() const\"},\n    {\"_ZN4llvm17SubtargetFeatures27getDefaultSubtargetFeaturesERKSsRKNS_6TripleE\", \"llvm::SubtargetFeatures::getDefaultSubtargetFeatures(std::string const&, llvm::Triple const&)\"},\n    {\"_Z4FindIN4llvm18SubtargetFeatureKVEEPKT_RKSsS4_m\", \"llvm::SubtargetFeatureKV const* Find<llvm::SubtargetFeatureKV>(std::string const&, llvm::SubtargetFeatureKV const*, unsigned long)\"},\n    {\"_Z4FindIN4llvm15SubtargetInfoKVEEPKT_RKSsS4_m\", \"llvm::SubtargetInfoKV const* Find<llvm::SubtargetInfoKV>(std::string const&, llvm::SubtargetInfoKV const*, unsigned long)\"},\n    {\"_ZN4llvm13TargetAsmInfoC1ERKNS_13TargetMachineE\", \"llvm::TargetAsmInfo::TargetAsmInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm13TargetAsmInfoC2ERKNS_13TargetMachineE\", \"llvm::TargetAsmInfo::TargetAsmInfo(llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm14TargetAsmLexerC1ERKNS_6TargetE\", \"llvm::TargetAsmLexer::TargetAsmLexer(llvm::Target const&)\"},\n    {\"_ZN4llvm14TargetAsmLexerC2ERKNS_6TargetE\", \"llvm::TargetAsmLexer::TargetAsmLexer(llvm::Target const&)\"},\n    {\"_ZN4llvm14TargetAsmLexerD0Ev\", \"llvm::TargetAsmLexer::~TargetAsmLexer()\"},\n    {\"_ZN4llvm14TargetAsmLexerD1Ev\", \"llvm::TargetAsmLexer::~TargetAsmLexer()\"},\n    {\"_ZN4llvm14TargetAsmLexerD2Ev\", \"llvm::TargetAsmLexer::~TargetAsmLexer()\"},\n    {\"_ZN4llvm24initializeDataLayoutPassERNS_12PassRegistryE\", \"llvm::initializeDataLayoutPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm12StructLayoutC1EPKNS_10StructTypeERKNS_10DataLayoutE\", \"llvm::StructLayout::StructLayout(llvm::StructType const*, llvm::DataLayout const&)\"},\n    {\"_ZN4llvm12StructLayoutC2EPKNS_10StructTypeERKNS_10DataLayoutE\", \"llvm::StructLayout::StructLayout(llvm::StructType const*, llvm::DataLayout const&)\"},\n    {\"_ZNK4llvm10DataLayout19getABITypeAlignmentEPKNS_4TypeE\", \"llvm::DataLayout::getABITypeAlignment(llvm::Type const*) const\"},\n    {\"_ZNK4llvm12StructLayout26getElementContainingOffsetEy\", \"llvm::StructLayout::getElementContainingOffset(unsigned long long) const\"},\n    {\"_ZN4llvm15TargetAlignElem3getENS_13AlignTypeEnumEjjj\", \"llvm::TargetAlignElem::get(llvm::AlignTypeEnum, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm15TargetAlignElemeqERKS0_\", \"llvm::TargetAlignElem::operator==(llvm::TargetAlignElem const&) const\"},\n    {\"_ZN4llvm10DataLayout4initENS_9StringRefE\", \"llvm::DataLayout::init(llvm::StringRef)\"},\n    {\"_ZN4llvm10DataLayout12setAlignmentENS_13AlignTypeEnumEjjj\", \"llvm::DataLayout::setAlignment(llvm::AlignTypeEnum, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10DataLayoutC1Ev\", \"llvm::DataLayout::DataLayout()\"},\n    {\"_ZN4llvm10DataLayoutC2Ev\", \"llvm::DataLayout::DataLayout()\"},\n    {\"_ZN4llvm10DataLayoutC1EPKNS_6ModuleE\", \"llvm::DataLayout::DataLayout(llvm::Module const*)\"},\n    {\"_ZN4llvm10DataLayoutC2EPKNS_6ModuleE\", \"llvm::DataLayout::DataLayout(llvm::Module const*)\"},\n    {\"_ZNK4llvm10DataLayout16getAlignmentInfoENS_13AlignTypeEnumEjbPKNS_4TypeE\", \"llvm::DataLayout::getAlignmentInfo(llvm::AlignTypeEnum, unsigned int, bool, llvm::Type const*) const\"},\n    {\"_ZN4llvm10DataLayoutD0Ev\", \"llvm::DataLayout::~DataLayout()\"},\n    {\"_ZN4llvm10DataLayoutD1Ev\", \"llvm::DataLayout::~DataLayout()\"},\n    {\"_ZN4llvm10DataLayoutD2Ev\", \"llvm::DataLayout::~DataLayout()\"},\n    {\"_ZNK4llvm10DataLayout15getStructLayoutEPKNS_10StructTypeE\", \"llvm::DataLayout::getStructLayout(llvm::StructType const*) const\"},\n    {\"_ZNK4llvm10DataLayout26InvalidateStructLayoutInfoEPKNS_10StructTypeE\", \"llvm::DataLayout::InvalidateStructLayoutInfo(llvm::StructType const*) const\"},\n    {\"_ZNK4llvm10DataLayout23getStringRepresentationEv\", \"llvm::DataLayout::getStringRepresentation() const\"},\n    {\"_ZNK4llvm10DataLayout17getTypeSizeInBitsEPKNS_4TypeE\", \"llvm::DataLayout::getTypeSizeInBits(llvm::Type const*) const\"},\n    {\"_ZNK4llvm10DataLayout12getAlignmentEPKNS_4TypeEb\", \"llvm::DataLayout::getAlignment(llvm::Type const*, bool) const\"},\n    {\"_ZNK4llvm10DataLayout26getABIIntegerTypeAlignmentEj\", \"llvm::DataLayout::getABIIntegerTypeAlignment(unsigned int) const\"},\n    {\"_ZNK4llvm10DataLayout25getCallFrameTypeAlignmentEPKNS_4TypeE\", \"llvm::DataLayout::getCallFrameTypeAlignment(llvm::Type const*) const\"},\n    {\"_ZNK4llvm10DataLayout20getPrefTypeAlignmentEPKNS_4TypeE\", \"llvm::DataLayout::getPrefTypeAlignment(llvm::Type const*) const\"},\n    {\"_ZNK4llvm10DataLayout30getPreferredTypeAlignmentShiftEPKNS_4TypeE\", \"llvm::DataLayout::getPreferredTypeAlignmentShift(llvm::Type const*) const\"},\n    {\"_ZNK4llvm10DataLayout13getIntPtrTypeERNS_11LLVMContextE\", \"llvm::DataLayout::getIntPtrType(llvm::LLVMContext&) const\"},\n    {\"_ZNK4llvm10DataLayout16getIndexedOffsetEPKNS_4TypeEPKPNS_5ValueEj\", \"llvm::DataLayout::getIndexedOffset(llvm::Type const*, llvm::Value* const*, unsigned int) const\"},\n    {\"_ZNK4llvm10DataLayout21getPreferredAlignmentEPKNS_14GlobalVariableE\", \"llvm::DataLayout::getPreferredAlignment(llvm::GlobalVariable const*) const\"},\n    {\"_ZNK4llvm10DataLayout24getPreferredAlignmentLogEPKNS_14GlobalVariableE\", \"llvm::DataLayout::getPreferredAlignmentLog(llvm::GlobalVariable const*) const\"},\n    {\"_ZN12_GLOBAL__N_115StructLayoutMapD1Ev\", \"(anonymous namespace)::StructLayoutMap::~StructLayoutMap()\"},\n    {\"_ZN12_GLOBAL__N_115StructLayoutMapD0Ev\", \"(anonymous namespace)::StructLayoutMap::~StructLayoutMap()\"},\n    {\"_ZN12_GLOBAL__N_115StructLayoutMap18refineAbstractTypeEPKN4llvm11DerivedTypeEPKNS1_4TypeE\", \"(anonymous namespace)::StructLayoutMap::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_115StructLayoutMap18typeBecameConcreteEPKN4llvm11DerivedTypeE\", \"(anonymous namespace)::StructLayoutMap::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK12_GLOBAL__N_115StructLayoutMap4dumpEv\", \"(anonymous namespace)::StructLayoutMap::dump() const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_15TargetAlignElemELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::TargetAlignElem, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm12PATypeHolderaSEPKNS_4TypeE\", \"llvm::PATypeHolder::operator=(llvm::Type const*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10StructTypeEPNS_12StructLayoutENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::StructType const*, llvm::StructLayout*, llvm::DenseMapInfo<llvm::StructType const*>, llvm::DenseMapInfo<llvm::StructLayout*> >::InsertIntoBucket(llvm::StructType const* const&, llvm::StructLayout* const&, std::pair<llvm::StructType const*, llvm::StructLayout*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10StructTypeEPNS_12StructLayoutENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::StructType const*, llvm::StructLayout*, llvm::DenseMapInfo<llvm::StructType const*>, llvm::DenseMapInfo<llvm::StructLayout*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_10DataLayoutEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::DataLayout>()\"},\n    {\"_ZN4llvm19TargetELFWriterInfoC1Ebb\", \"llvm::TargetELFWriterInfo::TargetELFWriterInfo(bool, bool)\"},\n    {\"_ZN4llvm19TargetELFWriterInfoC2Ebb\", \"llvm::TargetELFWriterInfo::TargetELFWriterInfo(bool, bool)\"},\n    {\"_ZN4llvm19TargetELFWriterInfoD0Ev\", \"llvm::TargetELFWriterInfo::~TargetELFWriterInfo()\"},\n    {\"_ZN4llvm19TargetELFWriterInfoD1Ev\", \"llvm::TargetELFWriterInfo::~TargetELFWriterInfo()\"},\n    {\"_ZN4llvm19TargetELFWriterInfoD2Ev\", \"llvm::TargetELFWriterInfo::~TargetELFWriterInfo()\"},\n    {\"_ZN4llvm19TargetFrameLoweringD0Ev\", \"llvm::TargetFrameLowering::~TargetFrameLowering()\"},\n    {\"_ZN4llvm19TargetFrameLoweringD1Ev\", \"llvm::TargetFrameLowering::~TargetFrameLowering()\"},\n    {\"_ZN4llvm19TargetFrameLoweringD2Ev\", \"llvm::TargetFrameLowering::~TargetFrameLowering()\"},\n    {\"_ZNK4llvm19TargetFrameLowering20getInitialFrameStateERSt6vectorINS_11MachineMoveESaIS2_EE\", \"llvm::TargetFrameLowering::getInitialFrameState(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> >&) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering19getFrameIndexOffsetERKNS_15MachineFunctionEi\", \"llvm::TargetFrameLowering::getFrameIndexOffset(llvm::MachineFunction const&, int) const\"},\n    {\"_ZNK4llvm19TargetFrameLowering22getFrameIndexReferenceERKNS_15MachineFunctionEiRj\", \"llvm::TargetFrameLowering::getFrameIndexReference(llvm::MachineFunction const&, int, unsigned int&) const\"},\n    {\"_ZNK4llvm17TargetOperandInfo11getRegClassEPKNS_18TargetRegisterInfoE\", \"llvm::TargetOperandInfo::getRegClass(llvm::TargetRegisterInfo const*) const\"},\n    {\"_ZN4llvm15TargetInstrInfoC1EPKNS_15TargetInstrDescEj\", \"llvm::TargetInstrInfo::TargetInstrInfo(llvm::TargetInstrDesc const*, unsigned int)\"},\n    {\"_ZN4llvm15TargetInstrInfoC2EPKNS_15TargetInstrDescEj\", \"llvm::TargetInstrInfo::TargetInstrInfo(llvm::TargetInstrDesc const*, unsigned int)\"},\n    {\"_ZN4llvm15TargetInstrInfoD0Ev\", \"llvm::TargetInstrInfo::~TargetInstrInfo()\"},\n    {\"_ZN4llvm15TargetInstrInfoD1Ev\", \"llvm::TargetInstrInfo::~TargetInstrInfo()\"},\n    {\"_ZN4llvm15TargetInstrInfoD2Ev\", \"llvm::TargetInstrInfo::~TargetInstrInfo()\"},\n    {\"_ZNK4llvm15TargetInstrInfo14getNumMicroOpsEPKNS_18InstrItineraryDataEPKNS_12MachineInstrE\", \"llvm::TargetInstrInfo::getNumMicroOps(llvm::InstrItineraryData const*, llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo17getOperandLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEjS6_j\", \"llvm::TargetInstrInfo::getOperandLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo17getOperandLatencyEPKNS_18InstrItineraryDataEPNS_6SDNodeEjS5_j\", \"llvm::TargetInstrInfo::getOperandLatency(llvm::InstrItineraryData const*, llvm::SDNode*, unsigned int, llvm::SDNode*, unsigned int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo15getInstrLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEPj\", \"llvm::TargetInstrInfo::getInstrLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo15getInstrLatencyEPKNS_18InstrItineraryDataEPNS_6SDNodeE\", \"llvm::TargetInstrInfo::getInstrLatency(llvm::InstrItineraryData const*, llvm::SDNode*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo16hasLowDefLatencyEPKNS_18InstrItineraryDataEPKNS_12MachineInstrEj\", \"llvm::TargetInstrInfo::hasLowDefLatency(llvm::InstrItineraryData const*, llvm::MachineInstr const*, unsigned int) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo10insertNoopERNS_17MachineBasicBlockENS_14ilist_iteratorINS_12MachineInstrEEE\", \"llvm::TargetInstrInfo::insertNoop(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo24isUnpredicatedTerminatorEPKNS_12MachineInstrE\", \"llvm::TargetInstrInfo::isUnpredicatedTerminator(llvm::MachineInstr const*) const\"},\n    {\"_ZNK4llvm15TargetInstrInfo18getInlineAsmLengthEPKcRKNS_9MCAsmInfoE\", \"llvm::TargetInstrInfo::getInlineAsmLength(char const*, llvm::MCAsmInfo const&) const\"},\n    {\"_ZN4llvm24TargetLoweringObjectFileC1Ev\", \"llvm::TargetLoweringObjectFile::TargetLoweringObjectFile()\"},\n    {\"_ZN4llvm24TargetLoweringObjectFileC2Ev\", \"llvm::TargetLoweringObjectFile::TargetLoweringObjectFile()\"},\n    {\"_ZN4llvm24TargetLoweringObjectFileD0Ev\", \"llvm::TargetLoweringObjectFile::~TargetLoweringObjectFile()\"},\n    {\"_ZN4llvm24TargetLoweringObjectFileD1Ev\", \"llvm::TargetLoweringObjectFile::~TargetLoweringObjectFile()\"},\n    {\"_ZN4llvm24TargetLoweringObjectFileD2Ev\", \"llvm::TargetLoweringObjectFile::~TargetLoweringObjectFile()\"},\n    {\"_ZN4llvm24TargetLoweringObjectFile16getKindForGlobalEPKNS_11GlobalValueERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFile::getKindForGlobal(llvm::GlobalValue const*, llvm::TargetMachine const&)\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile16SectionForGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFile::SectionForGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile22SelectSectionForGlobalEPKNS_11GlobalValueENS_11SectionKindEPNS_7ManglerERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFile::SelectSectionForGlobal(llvm::GlobalValue const*, llvm::SectionKind, llvm::Mangler*, llvm::TargetMachine const&) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile21getSectionForConstantENS_11SectionKindE\", \"llvm::TargetLoweringObjectFile::getSectionForConstant(llvm::SectionKind) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile30getExprForDwarfGlobalReferenceEPKNS_11GlobalValueEPNS_7ManglerEPNS_17MachineModuleInfoEjRNS_10MCStreamerE\", \"llvm::TargetLoweringObjectFile::getExprForDwarfGlobalReference(llvm::GlobalValue const*, llvm::Mangler*, llvm::MachineModuleInfo*, unsigned int, llvm::MCStreamer&) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile24getExprForDwarfReferenceEPKNS_8MCSymbolEPNS_7ManglerEPNS_17MachineModuleInfoEjRNS_10MCStreamerE\", \"llvm::TargetLoweringObjectFile::getExprForDwarfReference(llvm::MCSymbol const*, llvm::Mangler*, llvm::MachineModuleInfo*, unsigned int, llvm::MCStreamer&) const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile22getPersonalityEncodingEv\", \"llvm::TargetLoweringObjectFile::getPersonalityEncoding() const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile15getLSDAEncodingEv\", \"llvm::TargetLoweringObjectFile::getLSDAEncoding() const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile14getFDEEncodingEv\", \"llvm::TargetLoweringObjectFile::getFDEEncoding() const\"},\n    {\"_ZNK4llvm24TargetLoweringObjectFile16getTTypeEncodingEv\", \"llvm::TargetLoweringObjectFile::getTTypeEncoding() const\"},\n    {\"_ZN4llvm24TargetLoweringObjectFile10InitializeERNS_9MCContextERKNS_13TargetMachineE\", \"llvm::TargetLoweringObjectFile::Initialize(llvm::MCContext&, llvm::TargetMachine const&)\"},\n    {\"_ZN4llvm13TargetMachineC1ERKNS_6TargetE\", \"llvm::TargetMachine::TargetMachine(llvm::Target const&)\"},\n    {\"_ZN4llvm13TargetMachineC2ERKNS_6TargetE\", \"llvm::TargetMachine::TargetMachine(llvm::Target const&)\"},\n    {\"_ZN4llvm13TargetMachineD0Ev\", \"llvm::TargetMachine::~TargetMachine()\"},\n    {\"_ZN4llvm13TargetMachineD1Ev\", \"llvm::TargetMachine::~TargetMachine()\"},\n    {\"_ZN4llvm13TargetMachineD2Ev\", \"llvm::TargetMachine::~TargetMachine()\"},\n    {\"_ZN4llvm13TargetMachine18getRelocationModelEv\", \"llvm::TargetMachine::getRelocationModel()\"},\n    {\"_ZN4llvm13TargetMachine18setRelocationModelENS_5Reloc5ModelE\", \"llvm::TargetMachine::setRelocationModel(llvm::Reloc::Model)\"},\n    {\"_ZN4llvm13TargetMachine12getCodeModelEv\", \"llvm::TargetMachine::getCodeModel()\"},\n    {\"_ZN4llvm13TargetMachine12setCodeModelENS_9CodeModel5ModelE\", \"llvm::TargetMachine::setCodeModel(llvm::CodeModel::Model)\"},\n    {\"_ZN4llvm13TargetMachine22getAsmVerbosityDefaultEv\", \"llvm::TargetMachine::getAsmVerbosityDefault()\"},\n    {\"_ZN4llvm13TargetMachine22setAsmVerbosityDefaultEb\", \"llvm::TargetMachine::setAsmVerbosityDefault(bool)\"},\n    {\"_ZN4llvm13TargetMachine19getFunctionSectionsEv\", \"llvm::TargetMachine::getFunctionSections()\"},\n    {\"_ZN4llvm13TargetMachine15getDataSectionsEv\", \"llvm::TargetMachine::getDataSections()\"},\n    {\"_ZN4llvm13TargetMachine19setFunctionSectionsEb\", \"llvm::TargetMachine::setFunctionSections(bool)\"},\n    {\"_ZN4llvm13TargetMachine15setDataSectionsEb\", \"llvm::TargetMachine::setDataSections(bool)\"},\n    {\"_ZN4llvm23DisableFramePointerElimERKNS_15MachineFunctionE\", \"llvm::DisableFramePointerElim(llvm::MachineFunction const&)\"},\n    {\"_ZN4llvm16LessPreciseFPMADEv\", \"llvm::LessPreciseFPMAD()\"},\n    {\"_ZN4llvm32HonorSignDependentRoundingFPMathEv\", \"llvm::HonorSignDependentRoundingFPMath()\"},\n    {\"_ZN4llvm2cl3optIbLb1ENS0_6parserIbEEED1Ev\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEED1Ev\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::~opt()\"},\n    {\"_ZN4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEED1Ev\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::~opt()\"},\n    {\"_ZN4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEED1Ev\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIjLb1ENS0_6parserIjEEED1Ev\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::~opt()\"},\n    {\"_ZNK4llvm13TargetMachine25getEnableTailMergeDefaultEv\", \"llvm::TargetMachine::getEnableTailMergeDefault() const\"},\n    {\"_ZN4llvm13TargetMachine19addPassesToEmitFileERNS_15PassManagerBaseERNS_21formatted_raw_ostreamENS0_15CodeGenFileTypeENS_10CodeGenOpt5LevelEb\", \"llvm::TargetMachine::addPassesToEmitFile(llvm::PassManagerBase&, llvm::formatted_raw_ostream&, llvm::TargetMachine::CodeGenFileType, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_ZN4llvm13TargetMachine26addPassesToEmitMachineCodeERNS_15PassManagerBaseERNS_14JITCodeEmitterENS_10CodeGenOpt5LevelEb\", \"llvm::TargetMachine::addPassesToEmitMachineCode(llvm::PassManagerBase&, llvm::JITCodeEmitter&, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_ZN4llvm13TargetMachine17addPassesToEmitMCERNS_15PassManagerBaseERPNS_9MCContextENS_10CodeGenOpt5LevelEb\", \"llvm::TargetMachine::addPassesToEmitMC(llvm::PassManagerBase&, llvm::MCContext*&, llvm::CodeGenOpt::Level, bool)\"},\n    {\"_ZN4llvm2cl3optIbLb1ENS0_6parserIbEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIbLb1ENS0_6parserIbEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIbLb1ENS0_6parserIbEEE14getOptionWidthEv\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIbLb1ENS0_6parserIbEEE15printOptionInfoEm\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIbLb1ENS0_6parserIbEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIbLb1ENS0_6parserIbEEED0Ev\", \"llvm::cl::opt<bool, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIjLb1ENS0_6parserIjEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIjLb1ENS0_6parserIjEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIjLb1ENS0_6parserIjEEE14getOptionWidthEv\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIjLb1ENS0_6parserIjEEE15printOptionInfoEm\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIjLb1ENS0_6parserIjEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIjLb1ENS0_6parserIjEEED0Ev\", \"llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >::~opt()\"},\n    {\"_ZN4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEED0Ev\", \"llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >::~opt()\"},\n    {\"_ZN4llvm2cl19generic_parser_base19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::generic_parser_base::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl6parserINS_9CodeModel5ModelEE5parseERNS0_6OptionENS_9StringRefES7_RS3_\", \"llvm::cl::parser<llvm::CodeModel::Model>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::CodeModel::Model&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optINS_9CodeModel5ModelELb1ENS0_6parserIS6_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> > >(llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserINS_9CodeModel5ModelEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::CodeModel::Model>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserINS_9CodeModel5ModelEED1Ev\", \"llvm::cl::parser<llvm::CodeModel::Model>::~parser()\"},\n    {\"_ZN4llvm2cl6parserINS_9CodeModel5ModelEED0Ev\", \"llvm::cl::parser<llvm::CodeModel::Model>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserINS_9CodeModel5ModelEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::CodeModel::Model>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserINS_9CodeModel5ModelEE9getOptionEj\", \"llvm::cl::parser<llvm::CodeModel::Model>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserINS_9CodeModel5ModelEE14getDescriptionEj\", \"llvm::cl::parser<llvm::CodeModel::Model>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEED0Ev\", \"llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserINS_5Reloc5ModelEE5parseERNS0_6OptionENS_9StringRefES7_RS3_\", \"llvm::cl::parser<llvm::Reloc::Model>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::Reloc::Model&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optINS_5Reloc5ModelELb1ENS0_6parserIS6_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> > >(llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserINS_5Reloc5ModelEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::Reloc::Model>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserINS_5Reloc5ModelEED1Ev\", \"llvm::cl::parser<llvm::Reloc::Model>::~parser()\"},\n    {\"_ZN4llvm2cl6parserINS_5Reloc5ModelEED0Ev\", \"llvm::cl::parser<llvm::Reloc::Model>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserINS_5Reloc5ModelEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::Reloc::Model>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserINS_5Reloc5ModelEE9getOptionEj\", \"llvm::cl::parser<llvm::Reloc::Model>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserINS_5Reloc5ModelEE14getDescriptionEj\", \"llvm::cl::parser<llvm::Reloc::Model>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEED0Ev\", \"llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserINS_8FloatABI7ABITypeEE5parseERNS0_6OptionENS_9StringRefES7_RS3_\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::FloatABI::ABIType&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS6_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> > >(llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserINS_8FloatABI7ABITypeEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::FloatABI::ABIType>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserINS_8FloatABI7ABITypeEED1Ev\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::~parser()\"},\n    {\"_ZN4llvm2cl6parserINS_8FloatABI7ABITypeEED0Ev\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserINS_8FloatABI7ABITypeEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserINS_8FloatABI7ABITypeEE9getOptionEj\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserINS_8FloatABI7ABITypeEE14getDescriptionEj\", \"llvm::cl::parser<llvm::FloatABI::ABIType>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm18TargetRegisterInfoC1EPKNS_18TargetRegisterDescEjPKPKNS_19TargetRegisterClassES8_PKPKciiPKjjSE_j\", \"llvm::TargetRegisterInfo::TargetRegisterInfo(llvm::TargetRegisterDesc const*, unsigned int, llvm::TargetRegisterClass const* const*, llvm::TargetRegisterClass const* const*, char const* const*, int, int, unsigned int const*, unsigned int, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm18TargetRegisterInfoC2EPKNS_18TargetRegisterDescEjPKPKNS_19TargetRegisterClassES8_PKPKciiPKjjSE_j\", \"llvm::TargetRegisterInfo::TargetRegisterInfo(llvm::TargetRegisterDesc const*, unsigned int, llvm::TargetRegisterClass const* const*, llvm::TargetRegisterClass const* const*, char const* const*, int, int, unsigned int const*, unsigned int, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm18TargetRegisterInfoD0Ev\", \"llvm::TargetRegisterInfo::~TargetRegisterInfo()\"},\n    {\"_ZN4llvm18TargetRegisterInfoD1Ev\", \"llvm::TargetRegisterInfo::~TargetRegisterInfo()\"},\n    {\"_ZN4llvm18TargetRegisterInfoD2Ev\", \"llvm::TargetRegisterInfo::~TargetRegisterInfo()\"},\n    {\"_ZNK4llvm8PrintReg5printERNS_11raw_ostreamE\", \"llvm::PrintReg::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo22getMinimalPhysRegClassEjNS_3EVTE\", \"llvm::TargetRegisterInfo::getMinimalPhysRegClass(unsigned int, llvm::EVT) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo17getAllocatableSetERKNS_15MachineFunctionEPKNS_19TargetRegisterClassE\", \"llvm::TargetRegisterInfo::getAllocatableSet(llvm::MachineFunction const&, llvm::TargetRegisterClass const*) const\"},\n    {\"_ZN4llvm17getCommonSubClassEPKNS_19TargetRegisterClassES2_\", \"llvm::getCommonSubClass(llvm::TargetRegisterClass const*, llvm::TargetRegisterClass const*)\"},\n    {\"_ZNK4llvm18TargetRegisterInfo20composeSubRegIndicesEjj\", \"llvm::TargetRegisterInfo::composeSubRegIndices(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm18TargetRegisterInfo21needsStackRealignmentERKNS_15MachineFunctionE\", \"llvm::TargetRegisterInfo::needsStackRealignment(llvm::MachineFunction const&) const\"},\n    {\"_ZN4llvm15TargetSubtargetC1Ev\", \"llvm::TargetSubtarget::TargetSubtarget()\"},\n    {\"_ZN4llvm15TargetSubtargetC2Ev\", \"llvm::TargetSubtarget::TargetSubtarget()\"},\n    {\"_ZN4llvm15TargetSubtargetD0Ev\", \"llvm::TargetSubtarget::~TargetSubtarget()\"},\n    {\"_ZN4llvm15TargetSubtargetD1Ev\", \"llvm::TargetSubtarget::~TargetSubtarget()\"},\n    {\"_ZN4llvm15TargetSubtargetD2Ev\", \"llvm::TargetSubtarget::~TargetSubtarget()\"},\n    {\"_ZNK4llvm15TargetSubtarget21enablePostRASchedulerENS_10CodeGenOpt5LevelERNS0_16AntiDepBreakModeERNS_15SmallVectorImplIPNS_19TargetRegisterClassEEE\", \"llvm::TargetSubtarget::enablePostRAScheduler(llvm::CodeGenOpt::Level, llvm::TargetSubtarget::AntiDepBreakMode&, llvm::SmallVectorImpl<llvm::TargetRegisterClass*>&) const\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriterD0Ev\", \"llvm::AssemblyAnnotationWriter::~AssemblyAnnotationWriter()\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriterD1Ev\", \"llvm::AssemblyAnnotationWriter::~AssemblyAnnotationWriter()\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriterD2Ev\", \"llvm::AssemblyAnnotationWriter::~AssemblyAnnotationWriter()\"},\n    {\"_ZN4llvm12TypePrinting5clearEv\", \"llvm::TypePrinting::clear()\"},\n    {\"_ZNK4llvm12TypePrinting11hasTypeNameEPKNS_4TypeE\", \"llvm::TypePrinting::hasTypeName(llvm::Type const*) const\"},\n    {\"_ZN4llvm12TypePrinting11addTypeNameEPKNS_4TypeERKSs\", \"llvm::TypePrinting::addTypeName(llvm::Type const*, std::string const&)\"},\n    {\"_ZN4llvm12TypePrintingC1Ev\", \"llvm::TypePrinting::TypePrinting()\"},\n    {\"_ZN4llvm12TypePrintingC2Ev\", \"llvm::TypePrinting::TypePrinting()\"},\n    {\"_ZN4llvm12TypePrintingD1Ev\", \"llvm::TypePrinting::~TypePrinting()\"},\n    {\"_ZN4llvm12TypePrintingD2Ev\", \"llvm::TypePrinting::~TypePrinting()\"},\n    {\"_ZN4llvm12TypePrinting12CalcTypeNameEPKNS_4TypeERNS_15SmallVectorImplIS3_EERNS_11raw_ostreamEb\", \"llvm::TypePrinting::CalcTypeName(llvm::Type const*, llvm::SmallVectorImpl<llvm::Type const*>&, llvm::raw_ostream&, bool)\"},\n    {\"_ZN4llvm12TypePrinting5printEPKNS_4TypeERNS_11raw_ostreamEb\", \"llvm::TypePrinting::print(llvm::Type const*, llvm::raw_ostream&, bool)\"},\n    {\"_ZN4llvm17WriteTypeSymbolicERNS_11raw_ostreamEPKNS_4TypeEPKNS_6ModuleE\", \"llvm::WriteTypeSymbolic(llvm::raw_ostream&, llvm::Type const*, llvm::Module const*)\"},\n    {\"_Z23AddModuleTypesToPrinterRN4llvm12TypePrintingERSt6vectorIPKNS_4TypeESaIS5_EEPKNS_6ModuleE\", \"AddModuleTypesToPrinter(llvm::TypePrinting&, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> >&, llvm::Module const*)\"},\n    {\"_ZN4llvm14WriteAsOperandERNS_11raw_ostreamEPKNS_5ValueEbPKNS_6ModuleE\", \"llvm::WriteAsOperand(llvm::raw_ostream&, llvm::Value const*, bool, llvm::Module const*)\"},\n    {\"_Z22WriteAsOperandInternalRN4llvm11raw_ostreamEPKNS_5ValueEPNS_12TypePrintingEPN12_GLOBAL__N_111SlotTrackerEPKNS_6ModuleE\", \"WriteAsOperandInternal(llvm::raw_ostream&, llvm::Value const*, llvm::TypePrinting*, (anonymous namespace)::SlotTracker*, llvm::Module const*)\"},\n    {\"_ZNK4llvm6Module5printERNS_11raw_ostreamEPNS_24AssemblyAnnotationWriterE\", \"llvm::Module::print(llvm::raw_ostream&, llvm::AssemblyAnnotationWriter*) const\"},\n    {\"_ZN12_GLOBAL__N_111SlotTrackerC1EPKN4llvm6ModuleE\", \"(anonymous namespace)::SlotTracker::SlotTracker(llvm::Module const*)\"},\n    {\"_ZNK4llvm11NamedMDNode5printERNS_11raw_ostreamEPNS_24AssemblyAnnotationWriterE\", \"llvm::NamedMDNode::print(llvm::raw_ostream&, llvm::AssemblyAnnotationWriter*) const\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter16printNamedMDNodeEPKN4llvm11NamedMDNodeE\", \"(anonymous namespace)::AssemblyWriter::printNamedMDNode(llvm::NamedMDNode const*)\"},\n    {\"_ZNK4llvm4Type5printERNS_11raw_ostreamE\", \"llvm::Type::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm5Value5printERNS_11raw_ostreamEPNS_24AssemblyAnnotationWriterE\", \"llvm::Value::print(llvm::raw_ostream&, llvm::AssemblyAnnotationWriter*) const\"},\n    {\"_ZN12_GLOBAL__N_111SlotTrackerC1EPKN4llvm8FunctionE\", \"(anonymous namespace)::SlotTracker::SlotTracker(llvm::Function const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter16printInstructionERKN4llvm11InstructionE\", \"(anonymous namespace)::AssemblyWriter::printInstruction(llvm::Instruction const&)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter15printBasicBlockEPKN4llvm10BasicBlockE\", \"(anonymous namespace)::AssemblyWriter::printBasicBlock(llvm::BasicBlock const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter11printGlobalEPKN4llvm14GlobalVariableE\", \"(anonymous namespace)::AssemblyWriter::printGlobal(llvm::GlobalVariable const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter13printFunctionEPKN4llvm8FunctionE\", \"(anonymous namespace)::AssemblyWriter::printFunction(llvm::Function const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter10printAliasEPKN4llvm11GlobalAliasE\", \"(anonymous namespace)::AssemblyWriter::printAlias(llvm::GlobalAlias const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter15printMDNodeBodyEPKN4llvm6MDNodeE\", \"(anonymous namespace)::AssemblyWriter::printMDNodeBody(llvm::MDNode const*)\"},\n    {\"_Z21WriteConstantInternalRN4llvm11raw_ostreamEPKNS_8ConstantERNS_12TypePrintingEPN12_GLOBAL__N_111SlotTrackerEPKNS_6ModuleE\", \"WriteConstantInternal(llvm::raw_ostream&, llvm::Constant const*, llvm::TypePrinting&, (anonymous namespace)::SlotTracker*, llvm::Module const*)\"},\n    {\"_ZNK4llvm5Value11printCustomERNS_11raw_ostreamE\", \"llvm::Value::printCustom(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm5Value4dumpEv\", \"llvm::Value::dump() const\"},\n    {\"_ZNK4llvm4Type4dumpEPKNS_6ModuleE\", \"llvm::Type::dump(llvm::Module const*) const\"},\n    {\"_ZNK4llvm4Type4dumpEv\", \"llvm::Type::dump() const\"},\n    {\"_ZNK4llvm6Module4dumpEv\", \"llvm::Module::dump() const\"},\n    {\"_Z18PrintEscapedStringN4llvm9StringRefERNS_11raw_ostreamE\", \"PrintEscapedString(llvm::StringRef, llvm::raw_ostream&)\"},\n    {\"_Z21WriteOptimizationInfoRN4llvm11raw_ostreamEPKNS_4UserE\", \"WriteOptimizationInfo(llvm::raw_ostream&, llvm::User const*)\"},\n    {\"_Z23WriteMDNodeBodyInternalRN4llvm11raw_ostreamEPKNS_6MDNodeEPNS_12TypePrintingEPN12_GLOBAL__N_111SlotTrackerEPKNS_6ModuleE\", \"WriteMDNodeBodyInternal(llvm::raw_ostream&, llvm::MDNode const*, llvm::TypePrinting*, (anonymous namespace)::SlotTracker*, llvm::Module const*)\"},\n    {\"_Z12PrintLinkageN4llvm11GlobalValue12LinkageTypesERNS_21formatted_raw_ostreamE\", \"PrintLinkage(llvm::GlobalValue::LinkageTypes, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter12writeOperandEPKN4llvm5ValueEb\", \"(anonymous namespace)::AssemblyWriter::writeOperand(llvm::Value const*, bool)\"},\n    {\"_Z13PrintLLVMNameRN4llvm11raw_ostreamENS_9StringRefE10PrefixType\", \"PrintLLVMName(llvm::raw_ostream&, llvm::StringRef, PrefixType)\"},\n    {\"_ZN12_GLOBAL__N_111SlotTracker10initializeEv\", \"(anonymous namespace)::SlotTracker::initialize()\"},\n    {\"_ZN12_GLOBAL__N_111SlotTracker18CreateMetadataSlotEPKN4llvm6MDNodeE\", \"(anonymous namespace)::SlotTracker::CreateMetadataSlot(llvm::MDNode const*)\"},\n    {\"_ZN12_GLOBAL__N_114AssemblyWriter17writeParamOperandEPKN4llvm5ValueEj\", \"(anonymous namespace)::AssemblyWriter::writeParamOperand(llvm::Value const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_110TypeFinder15IncorporateTypeEPKN4llvm4TypeE\", \"(anonymous namespace)::TypeFinder::IncorporateType(llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_110TypeFinder16IncorporateValueEPKN4llvm5ValueE\", \"(anonymous namespace)::TypeFinder::IncorporateValue(llvm::Value const*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeESsNS_12DenseMapInfoIS3_EENS4_ISsEEE5clearEv\", \"llvm::DenseMap<llvm::Type const*, std::string, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<std::string> >::clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeESsNS_12DenseMapInfoIS3_EENS4_ISsEEE6insertERKSt4pairIS3_SsE\", \"llvm::DenseMap<llvm::Type const*, std::string, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<std::string> >::insert(std::pair<llvm::Type const*, std::string> const&)\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriter17emitFunctionAnnotEPKNS_8FunctionERNS_21formatted_raw_ostreamE\", \"llvm::AssemblyAnnotationWriter::emitFunctionAnnot(llvm::Function const*, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriter24emitBasicBlockStartAnnotEPKNS_10BasicBlockERNS_21formatted_raw_ostreamE\", \"llvm::AssemblyAnnotationWriter::emitBasicBlockStartAnnot(llvm::BasicBlock const*, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriter22emitBasicBlockEndAnnotEPKNS_10BasicBlockERNS_21formatted_raw_ostreamE\", \"llvm::AssemblyAnnotationWriter::emitBasicBlockEndAnnot(llvm::BasicBlock const*, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriter20emitInstructionAnnotEPKNS_11InstructionERNS_21formatted_raw_ostreamE\", \"llvm::AssemblyAnnotationWriter::emitInstructionAnnot(llvm::Instruction const*, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN4llvm24AssemblyAnnotationWriter16printInfoCommentERKNS_5ValueERNS_21formatted_raw_ostreamE\", \"llvm::AssemblyAnnotationWriter::printInfoComment(llvm::Value const&, llvm::formatted_raw_ostream&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16InsertIntoBucketERKS3_RKSsPSt4pairIS3_SsE\", \"llvm::DenseMap<llvm::Type const*, std::string, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<std::string> >::InsertIntoBucket(llvm::Type const* const&, std::string const&, std::pair<llvm::Type const*, std::string>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeESsNS_12DenseMapInfoIS3_EENS4_ISsEEE4growEj\", \"llvm::DenseMap<llvm::Type const*, std::string, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<std::string> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeESsNS_12DenseMapInfoIS3_EENS4_ISsEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Type const*, std::string, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<std::string> >::shrink_and_clear()\"},\n    {\"_ZNK4llvm5APInt3ultEy\", \"llvm::APInt::ult(unsigned long long) const\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEjNS_12DenseMapInfoIS3_EENS4_IjEEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::Value const*, unsigned int, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<unsigned int> >::shrink_and_clear()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::MDNode const*, unsigned int, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MDNode const* const&, unsigned int const&, std::pair<llvm::MDNode const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_6MDNodeEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::MDNode const*, unsigned int, llvm::DenseMapInfo<llvm::MDNode const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplIPKNS_6MDNodeEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::MDNode const*>::resize(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<llvm::Value const*, char, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::Value const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<llvm::Value const*, char, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::Value const* const&, char const&, std::pair<llvm::Value const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_5ValueEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<llvm::Value const*, char, llvm::DenseMapInfo<llvm::Value const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeEcNS_12DenseMapInfoIS3_EENS4_IcEEE6insertERKSt4pairIS3_cE\", \"llvm::DenseMap<llvm::Type const*, char, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<char> >::insert(std::pair<llvm::Type const*, char> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeEcNS_12DenseMapInfoIS3_EENS4_IcEEE16InsertIntoBucketERKS3_RKcPSt4pairIS3_cE\", \"llvm::DenseMap<llvm::Type const*, char, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<char> >::InsertIntoBucket(llvm::Type const* const&, char const&, std::pair<llvm::Type const*, char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_4TypeEcNS_12DenseMapInfoIS3_EENS4_IcEEE4growEj\", \"llvm::DenseMap<llvm::Type const*, char, llvm::DenseMapInfo<llvm::Type const*>, llvm::DenseMapInfo<char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9Attribute11getAsStringEj\", \"llvm::Attribute::getAsString(unsigned int)\"},\n    {\"_ZN4llvm9Attribute16typeIncompatibleEPKNS_4TypeE\", \"llvm::Attribute::typeIncompatible(llvm::Type const*)\"},\n    {\"_ZN4llvm17AttributeListImplD1Ev\", \"llvm::AttributeListImpl::~AttributeListImpl()\"},\n    {\"_ZN4llvm17AttributeListImplD2Ev\", \"llvm::AttributeListImpl::~AttributeListImpl()\"},\n    {\"_ZN4llvm11AttrListPtr3getEPKNS_18AttributeWithIndexEj\", \"llvm::AttrListPtr::get(llvm::AttributeWithIndex const*, unsigned int)\"},\n    {\"_ZN4llvm11AttrListPtrC1EPNS_17AttributeListImplE\", \"llvm::AttrListPtr::AttrListPtr(llvm::AttributeListImpl*)\"},\n    {\"_ZN4llvm11AttrListPtrC2EPNS_17AttributeListImplE\", \"llvm::AttrListPtr::AttrListPtr(llvm::AttributeListImpl*)\"},\n    {\"_ZN4llvm11AttrListPtrC1ERKS0_\", \"llvm::AttrListPtr::AttrListPtr(llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm11AttrListPtrC2ERKS0_\", \"llvm::AttrListPtr::AttrListPtr(llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm11AttrListPtraSERKS0_\", \"llvm::AttrListPtr::operator=(llvm::AttrListPtr const&)\"},\n    {\"_ZN4llvm11AttrListPtrD1Ev\", \"llvm::AttrListPtr::~AttrListPtr()\"},\n    {\"_ZN4llvm11AttrListPtrD2Ev\", \"llvm::AttrListPtr::~AttrListPtr()\"},\n    {\"_ZNK4llvm11AttrListPtr11getNumSlotsEv\", \"llvm::AttrListPtr::getNumSlots() const\"},\n    {\"_ZNK4llvm11AttrListPtr7getSlotEj\", \"llvm::AttrListPtr::getSlot(unsigned int) const\"},\n    {\"_ZNK4llvm11AttrListPtr13getAttributesEj\", \"llvm::AttrListPtr::getAttributes(unsigned int) const\"},\n    {\"_ZNK4llvm11AttrListPtr16hasAttrSomewhereEj\", \"llvm::AttrListPtr::hasAttrSomewhere(unsigned int) const\"},\n    {\"_ZNK4llvm11AttrListPtr7addAttrEjj\", \"llvm::AttrListPtr::addAttr(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm11AttrListPtr10removeAttrEjj\", \"llvm::AttrListPtr::removeAttr(unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm11AttrListPtr4dumpEv\", \"llvm::AttrListPtr::dump() const\"},\n    {\"_ZN4llvm17AttributeListImpl6AddRefEv\", \"llvm::AttributeListImpl::AddRef()\"},\n    {\"_ZN4llvm17AttributeListImpl7DropRefEv\", \"llvm::AttributeListImpl::DropRef()\"},\n    {\"_ZN4llvm15SmallVectorImplINS_18AttributeWithIndexEE6insertIPKS1_EEPS1_S6_T_S7_\", \"llvm::AttributeWithIndex* llvm::SmallVectorImpl<llvm::AttributeWithIndex>::insert<llvm::AttributeWithIndex const*>(llvm::AttributeWithIndex*, llvm::AttributeWithIndex const*, llvm::AttributeWithIndex const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_18AttributeWithIndexELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::AttributeWithIndex, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm14object_creatorINS_10FoldingSetINS_17AttributeListImplEEEEEPvv\", \"void* llvm::object_creator<llvm::FoldingSet<llvm::AttributeListImpl> >()\"},\n    {\"_ZN4llvm14object_deleterINS_10FoldingSetINS_17AttributeListImplEEEE4callEPv\", \"llvm::object_deleter<llvm::FoldingSet<llvm::AttributeListImpl> >::call(void*)\"},\n    {\"_ZN4llvm10FoldingSetINS_17AttributeListImplEED1Ev\", \"llvm::FoldingSet<llvm::AttributeListImpl>::~FoldingSet()\"},\n    {\"_ZN4llvm10FoldingSetINS_17AttributeListImplEED0Ev\", \"llvm::FoldingSet<llvm::AttributeListImpl>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_17AttributeListImplEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::AttributeListImpl>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17AttributeListImplEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS6_\", \"llvm::FoldingSet<llvm::AttributeListImpl>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_17AttributeListImplEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::AttributeListImpl>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm24UpgradeIntrinsicFunctionEPNS_8FunctionERS1_\", \"llvm::UpgradeIntrinsicFunction(llvm::Function*, llvm::Function*&)\"},\n    {\"_Z25UpgradeIntrinsicFunction1PN4llvm8FunctionERS1_\", \"UpgradeIntrinsicFunction1(llvm::Function*, llvm::Function*&)\"},\n    {\"_ZN4llvm21UpgradeGlobalVariableEPNS_14GlobalVariableE\", \"llvm::UpgradeGlobalVariable(llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm20UpgradeIntrinsicCallEPNS_8CallInstEPNS_8FunctionE\", \"llvm::UpgradeIntrinsicCall(llvm::CallInst*, llvm::Function*)\"},\n    {\"_Z14ExtendNEONArgsPN4llvm8CallInstEPNS_5ValueES3_RS3_S4_\", \"ExtendNEONArgs(llvm::CallInst*, llvm::Value*, llvm::Value*, llvm::Value*&, llvm::Value*&)\"},\n    {\"_Z8CallVABDPN4llvm8CallInstEPNS_5ValueES3_\", \"CallVABD(llvm::CallInst*, llvm::Value*, llvm::Value*)\"},\n    {\"_Z20ConstructNewCallInstPN4llvm8FunctionEPNS_8CallInstEPPNS_5ValueEjb\", \"ConstructNewCallInst(llvm::Function*, llvm::CallInst*, llvm::Value**, unsigned int, bool)\"},\n    {\"_ZN4llvm23UpgradeCallsToIntrinsicEPNS_8FunctionE\", \"llvm::UpgradeCallsToIntrinsic(llvm::Function*)\"},\n    {\"_ZN4llvm24CheckDebugInfoIntrinsicsEPNS_6ModuleE\", \"llvm::CheckDebugInfoIntrinsics(llvm::Module*)\"},\n    {\"_ZN4llvm9IRBuilderILb1ENS_14ConstantFolderENS_24IRBuilderDefaultInserterILb1EEEE19CreateShuffleVectorEPNS_5ValueES6_S6_RKNS_5TwineE\", \"llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateShuffleVector(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm10BasicBlock19getValueSymbolTableEv\", \"llvm::BasicBlock::getValueSymbolTable()\"},\n    {\"_ZNK4llvm10BasicBlock10getContextEv\", \"llvm::BasicBlock::getContext() const\"},\n    {\"_ZN4llvm10BasicBlockC1ERNS_11LLVMContextERKNS_5TwineEPNS_8FunctionEPS0_\", \"llvm::BasicBlock::BasicBlock(llvm::LLVMContext&, llvm::Twine const&, llvm::Function*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BasicBlockC2ERNS_11LLVMContextERKNS_5TwineEPNS_8FunctionEPS0_\", \"llvm::BasicBlock::BasicBlock(llvm::LLVMContext&, llvm::Twine const&, llvm::Function*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BasicBlockD0Ev\", \"llvm::BasicBlock::~BasicBlock()\"},\n    {\"_ZN4llvm10BasicBlockD1Ev\", \"llvm::BasicBlock::~BasicBlock()\"},\n    {\"_ZN4llvm10BasicBlockD2Ev\", \"llvm::BasicBlock::~BasicBlock()\"},\n    {\"_ZN4llvm10BasicBlock17dropAllReferencesEv\", \"llvm::BasicBlock::dropAllReferences()\"},\n    {\"_ZN4llvm10BasicBlock9setParentEPNS_8FunctionE\", \"llvm::BasicBlock::setParent(llvm::Function*)\"},\n    {\"_ZN4llvm10BasicBlock16removeFromParentEv\", \"llvm::BasicBlock::removeFromParent()\"},\n    {\"_ZN4llvm10BasicBlock15eraseFromParentEv\", \"llvm::BasicBlock::eraseFromParent()\"},\n    {\"_ZN4llvm10BasicBlock10moveBeforeEPS0_\", \"llvm::BasicBlock::moveBefore(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BasicBlock9moveAfterEPS0_\", \"llvm::BasicBlock::moveAfter(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BasicBlock13getTerminatorEv\", \"llvm::BasicBlock::getTerminator()\"},\n    {\"_ZNK4llvm10BasicBlock13getTerminatorEv\", \"llvm::BasicBlock::getTerminator() const\"},\n    {\"_ZN4llvm10BasicBlock14getFirstNonPHIEv\", \"llvm::BasicBlock::getFirstNonPHI()\"},\n    {\"_ZN4llvm10BasicBlock19getFirstNonPHIOrDbgEv\", \"llvm::BasicBlock::getFirstNonPHIOrDbg()\"},\n    {\"_ZN4llvm10BasicBlock20getSinglePredecessorEv\", \"llvm::BasicBlock::getSinglePredecessor()\"},\n    {\"_ZN4llvm10BasicBlock20getUniquePredecessorEv\", \"llvm::BasicBlock::getUniquePredecessor()\"},\n    {\"_ZN4llvm10BasicBlock17removePredecessorEPS0_b\", \"llvm::BasicBlock::removePredecessor(llvm::BasicBlock*, bool)\"},\n    {\"_ZN4llvm10BasicBlock15splitBasicBlockENS_14ilist_iteratorINS_11InstructionEEERKNS_5TwineE\", \"llvm::BasicBlock::splitBasicBlock(llvm::ilist_iterator<llvm::Instruction>, llvm::Twine const&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::getList(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::getSymTab(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::addNodeToList(llvm::Instruction*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::removeNodeFromList(llvm::Instruction*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::transferNodesFromList(llvm::ilist_traits<llvm::Instruction>&, llvm::ilist_iterator<llvm::Instruction>, llvm::ilist_iterator<llvm::Instruction>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11InstructionENS_10BasicBlockEE15setSymTabObjectIPNS_8FunctionEEEvPT_S7_\", \"void llvm::SymbolTableListTraits<llvm::Instruction, llvm::BasicBlock>::setSymTabObject<llvm::Function*>(llvm::Function**, llvm::Function*)\"},\n    {\"_ZN4llvm6iplistINS_11InstructionENS_12ilist_traitsIS1_EEE5eraseENS_14ilist_iteratorIS1_EE\", \"llvm::iplist<llvm::Instruction, llvm::ilist_traits<llvm::Instruction> >::erase(llvm::ilist_iterator<llvm::Instruction>)\"},\n    {\"_ZN4llvm27ConstantFoldCastInstructionEjPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantFoldCastInstruction(unsigned int, llvm::Constant*, llvm::Type const*)\"},\n    {\"_Z15getFoldedSizeOfPKN4llvm4TypeES2_b\", \"getFoldedSizeOf(llvm::Type const*, llvm::Type const*, bool)\"},\n    {\"_Z16getFoldedAlignOfPKN4llvm4TypeES2_b\", \"getFoldedAlignOf(llvm::Type const*, llvm::Type const*, bool)\"},\n    {\"_Z20ExtractConstantBytesPN4llvm8ConstantEjj\", \"ExtractConstantBytes(llvm::Constant*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm29ConstantFoldSelectInstructionEPNS_8ConstantES1_S1_\", \"llvm::ConstantFoldSelectInstruction(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm37ConstantFoldExtractElementInstructionEPNS_8ConstantES1_\", \"llvm::ConstantFoldExtractElementInstruction(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm36ConstantFoldInsertElementInstructionEPNS_8ConstantES1_S1_\", \"llvm::ConstantFoldInsertElementInstruction(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm36ConstantFoldShuffleVectorInstructionEPNS_8ConstantES1_S1_\", \"llvm::ConstantFoldShuffleVectorInstruction(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_Z16GetVectorElementPN4llvm8ConstantEj\", \"GetVectorElement(llvm::Constant*, unsigned int)\"},\n    {\"_ZN4llvm35ConstantFoldExtractValueInstructionEPNS_8ConstantEPKjj\", \"llvm::ConstantFoldExtractValueInstruction(llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm34ConstantFoldInsertValueInstructionEPNS_8ConstantES1_PKjj\", \"llvm::ConstantFoldInsertValueInstruction(llvm::Constant*, llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm29ConstantFoldBinaryInstructionEjPNS_8ConstantES1_\", \"llvm::ConstantFoldBinaryInstruction(unsigned int, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm30ConstantFoldCompareInstructionEtPNS_8ConstantES1_\", \"llvm::ConstantFoldCompareInstruction(unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_Z20evaluateFCmpRelationPN4llvm8ConstantES1_\", \"evaluateFCmpRelation(llvm::Constant*, llvm::Constant*)\"},\n    {\"_Z20evaluateICmpRelationPN4llvm8ConstantES1_b\", \"evaluateICmpRelation(llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm25ConstantFoldGetElementPtrEPNS_8ConstantEbPKS1_j\", \"llvm::ConstantFoldGetElementPtr(llvm::Constant*, bool, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm25ConstantFoldGetElementPtrEPNS_8ConstantEbPKPNS_5ValueEj\", \"llvm::ConstantFoldGetElementPtr(llvm::Constant*, bool, llvm::Value* const*, unsigned int)\"},\n    {\"_Z20isMaybeZeroSizedTypePKN4llvm4TypeE\", \"isMaybeZeroSizedType(llvm::Type const*)\"},\n    {\"_ZN4llvm8Constant12getNullValueEPKNS_4TypeE\", \"llvm::Constant::getNullValue(llvm::Type const*)\"},\n    {\"_ZN4llvm11ConstantInt3getEPKNS_4TypeEyb\", \"llvm::ConstantInt::get(llvm::Type const*, unsigned long long, bool)\"},\n    {\"_ZN4llvm10ConstantFP3getERNS_11LLVMContextERKNS_7APFloatE\", \"llvm::ConstantFP::get(llvm::LLVMContext&, llvm::APFloat const&)\"},\n    {\"_ZN4llvm19ConstantPointerNull3getEPKNS_11PointerTypeE\", \"llvm::ConstantPointerNull::get(llvm::PointerType const*)\"},\n    {\"_ZN4llvm21ConstantAggregateZero3getEPKNS_4TypeE\", \"llvm::ConstantAggregateZero::get(llvm::Type const*)\"},\n    {\"_ZN4llvm8Constant15getIntegerValueEPKNS_4TypeERKNS_5APIntE\", \"llvm::Constant::getIntegerValue(llvm::Type const*, llvm::APInt const&)\"},\n    {\"_ZN4llvm11ConstantInt3getERNS_11LLVMContextERKNS_5APIntE\", \"llvm::ConstantInt::get(llvm::LLVMContext&, llvm::APInt const&)\"},\n    {\"_ZN4llvm12ConstantExpr11getIntToPtrEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getIntToPtr(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm14ConstantVector3getERKSt6vectorIPNS_8ConstantESaIS3_EE\", \"llvm::ConstantVector::get(std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm8Constant15getAllOnesValueEPKNS_4TypeE\", \"llvm::Constant::getAllOnesValue(llvm::Type const*)\"},\n    {\"_ZN4llvm8Constant19destroyConstantImplEv\", \"llvm::Constant::destroyConstantImpl()\"},\n    {\"_ZNK4llvm8Constant7canTrapEv\", \"llvm::Constant::canTrap() const\"},\n    {\"_ZNK4llvm8Constant14isConstantUsedEv\", \"llvm::Constant::isConstantUsed() const\"},\n    {\"_ZNK4llvm8Constant17getRelocationInfoEv\", \"llvm::Constant::getRelocationInfo() const\"},\n    {\"_ZNK4llvm8Constant17getVectorElementsERNS_15SmallVectorImplIPS0_EE\", \"llvm::Constant::getVectorElements(llvm::SmallVectorImpl<llvm::Constant*>&) const\"},\n    {\"_ZN4llvm10UndefValue3getEPKNS_4TypeE\", \"llvm::UndefValue::get(llvm::Type const*)\"},\n    {\"_ZN4llvm11ConstantIntC1EPKNS_11IntegerTypeERKNS_5APIntE\", \"llvm::ConstantInt::ConstantInt(llvm::IntegerType const*, llvm::APInt const&)\"},\n    {\"_ZN4llvm11ConstantIntC2EPKNS_11IntegerTypeERKNS_5APIntE\", \"llvm::ConstantInt::ConstantInt(llvm::IntegerType const*, llvm::APInt const&)\"},\n    {\"_ZN4llvm11ConstantInt7getTrueERNS_11LLVMContextE\", \"llvm::ConstantInt::getTrue(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm11ConstantInt3getEPKNS_11IntegerTypeEyb\", \"llvm::ConstantInt::get(llvm::IntegerType const*, unsigned long long, bool)\"},\n    {\"_ZN4llvm11ConstantInt8getFalseERNS_11LLVMContextE\", \"llvm::ConstantInt::getFalse(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm11ConstantInt9getSignedEPKNS_11IntegerTypeEx\", \"llvm::ConstantInt::getSigned(llvm::IntegerType const*, long long)\"},\n    {\"_ZN4llvm11ConstantInt9getSignedEPKNS_4TypeEx\", \"llvm::ConstantInt::getSigned(llvm::Type const*, long long)\"},\n    {\"_ZN4llvm11ConstantInt3getEPKNS_4TypeERKNS_5APIntE\", \"llvm::ConstantInt::get(llvm::Type const*, llvm::APInt const&)\"},\n    {\"_ZN4llvm11ConstantInt3getEPKNS_11IntegerTypeENS_9StringRefEh\", \"llvm::ConstantInt::get(llvm::IntegerType const*, llvm::StringRef, unsigned char)\"},\n    {\"_ZN4llvm10ConstantFP3getEPKNS_4TypeEd\", \"llvm::ConstantFP::get(llvm::Type const*, double)\"},\n    {\"_ZN4llvm10ConstantFP3getEPKNS_4TypeENS_9StringRefE\", \"llvm::ConstantFP::get(llvm::Type const*, llvm::StringRef)\"},\n    {\"_ZN4llvm10ConstantFP15getNegativeZeroEPKNS_4TypeE\", \"llvm::ConstantFP::getNegativeZero(llvm::Type const*)\"},\n    {\"_ZN4llvm10ConstantFP23getZeroValueForNegationEPKNS_4TypeE\", \"llvm::ConstantFP::getZeroValueForNegation(llvm::Type const*)\"},\n    {\"_ZN4llvm14ConstantVector3getEPKNS_10VectorTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantVector::get(llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm10ConstantFPC1EPKNS_4TypeERKNS_7APFloatE\", \"llvm::ConstantFP::ConstantFP(llvm::Type const*, llvm::APFloat const&)\"},\n    {\"_ZN4llvm10ConstantFP11getInfinityEPKNS_4TypeEb\", \"llvm::ConstantFP::getInfinity(llvm::Type const*, bool)\"},\n    {\"_ZN4llvm10ConstantFPC2EPKNS_4TypeERKNS_7APFloatE\", \"llvm::ConstantFP::ConstantFP(llvm::Type const*, llvm::APFloat const&)\"},\n    {\"_ZNK4llvm10ConstantFP11isNullValueEv\", \"llvm::ConstantFP::isNullValue() const\"},\n    {\"_ZNK4llvm10ConstantFP14isExactlyValueERKNS_7APFloatE\", \"llvm::ConstantFP::isExactlyValue(llvm::APFloat const&) const\"},\n    {\"_ZN4llvm13ConstantArrayC1EPKNS_9ArrayTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantArray::ConstantArray(llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm13ConstantArrayC2EPKNS_9ArrayTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantArray::ConstantArray(llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm13ConstantArray3getEPKNS_9ArrayTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantArray::get(llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm13ConstantArray3getEPKNS_9ArrayTypeEPKPNS_8ConstantEj\", \"llvm::ConstantArray::get(llvm::ArrayType const*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm13ConstantArray3getERNS_11LLVMContextENS_9StringRefEb\", \"llvm::ConstantArray::get(llvm::LLVMContext&, llvm::StringRef, bool)\"},\n    {\"_ZN4llvm14ConstantStructC1EPKNS_10StructTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantStruct::ConstantStruct(llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm14ConstantStructC2EPKNS_10StructTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantStruct::ConstantStruct(llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm14ConstantStruct3getEPKNS_10StructTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantStruct::get(llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm14ConstantStruct3getERNS_11LLVMContextERKSt6vectorIPNS_8ConstantESaIS5_EEb\", \"llvm::ConstantStruct::get(llvm::LLVMContext&, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, bool)\"},\n    {\"_ZN4llvm14ConstantStruct3getERNS_11LLVMContextEPKPNS_8ConstantEjb\", \"llvm::ConstantStruct::get(llvm::LLVMContext&, llvm::Constant* const*, unsigned int, bool)\"},\n    {\"_ZN4llvm14ConstantVectorC1EPKNS_10VectorTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantVector::ConstantVector(llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm14ConstantVectorC2EPKNS_10VectorTypeERKSt6vectorIPNS_8ConstantESaIS6_EE\", \"llvm::ConstantVector::ConstantVector(llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm14ConstantVector3getEPKPNS_8ConstantEj\", \"llvm::ConstantVector::get(llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr9getNSWNegEPNS_8ConstantE\", \"llvm::ConstantExpr::getNSWNeg(llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNSWSubEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNSWSub(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNUWNegEPNS_8ConstantE\", \"llvm::ConstantExpr::getNUWNeg(llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNUWSubEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNUWSub(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNSWAddEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNSWAdd(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr5getTyEPKNS_4TypeEjPNS_8ConstantES5_j\", \"llvm::ConstantExpr::getTy(llvm::Type const*, unsigned int, llvm::Constant*, llvm::Constant*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr9getNUWAddEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNUWAdd(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNSWMulEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNSWMul(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNUWMulEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNUWMul(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNSWShlEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNSWShl(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getNUWShlEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getNUWShl(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZNK4llvm12ConstantExpr6isCastEv\", \"llvm::ConstantExpr::isCast() const\"},\n    {\"_ZNK4llvm12ConstantExpr9isCompareEv\", \"llvm::ConstantExpr::isCompare() const\"},\n    {\"_ZNK4llvm12ConstantExpr31isGEPWithNoNotionalOverIndexingEv\", \"llvm::ConstantExpr::isGEPWithNoNotionalOverIndexing() const\"},\n    {\"_ZNK4llvm12ConstantExpr10hasIndicesEv\", \"llvm::ConstantExpr::hasIndices() const\"},\n    {\"_ZNK4llvm12ConstantExpr10getIndicesEv\", \"llvm::ConstantExpr::getIndices() const\"},\n    {\"_ZNK4llvm12ConstantExpr12getPredicateEv\", \"llvm::ConstantExpr::getPredicate() const\"},\n    {\"_ZNK4llvm12ConstantExpr22getWithOperandReplacedEjPNS_8ConstantE\", \"llvm::ConstantExpr::getWithOperandReplaced(unsigned int, llvm::Constant*) const\"},\n    {\"_ZN4llvm12ConstantExpr7getCastEjPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getCast(unsigned int, llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr16getInsertElementEPNS_8ConstantES2_S2_\", \"llvm::ConstantExpr::getInsertElement(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr17getExtractElementEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getExtractElement(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr16getShuffleVectorEPNS_8ConstantES2_S2_\", \"llvm::ConstantExpr::getShuffleVector(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr24getInBoundsGetElementPtrEPNS_8ConstantEPKS2_j\", \"llvm::ConstantExpr::getInBoundsGetElementPtr(llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr16getGetElementPtrEPNS_8ConstantEPKS2_j\", \"llvm::ConstantExpr::getGetElementPtr(llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr3getEjPNS_8ConstantES2_j\", \"llvm::ConstantExpr::get(unsigned int, llvm::Constant*, llvm::Constant*, unsigned int)\"},\n    {\"_ZNK4llvm12ConstantExpr15getWithOperandsEPKPNS_8ConstantEj\", \"llvm::ConstantExpr::getWithOperands(llvm::Constant* const*, unsigned int) const\"},\n    {\"_ZN4llvm12ConstantExpr10getCompareEtPNS_8ConstantES2_\", \"llvm::ConstantExpr::getCompare(unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm11ConstantInt19isValueValidForTypeEPKNS_4TypeEy\", \"llvm::ConstantInt::isValueValidForType(llvm::Type const*, unsigned long long)\"},\n    {\"_ZN4llvm11ConstantInt19isValueValidForTypeEPKNS_4TypeEx\", \"llvm::ConstantInt::isValueValidForType(llvm::Type const*, long long)\"},\n    {\"_ZN4llvm10ConstantFP19isValueValidForTypeEPKNS_4TypeERKNS_7APFloatE\", \"llvm::ConstantFP::isValueValidForType(llvm::Type const*, llvm::APFloat const&)\"},\n    {\"_ZN4llvm21ConstantAggregateZero15destroyConstantEv\", \"llvm::ConstantAggregateZero::destroyConstant()\"},\n    {\"_ZN4llvm13ConstantArray15destroyConstantEv\", \"llvm::ConstantArray::destroyConstant()\"},\n    {\"_ZNK4llvm13ConstantArray8isStringEv\", \"llvm::ConstantArray::isString() const\"},\n    {\"_ZNK4llvm13ConstantArray9isCStringEv\", \"llvm::ConstantArray::isCString() const\"},\n    {\"_ZNK4llvm13ConstantArray11getAsStringEv\", \"llvm::ConstantArray::getAsString() const\"},\n    {\"_ZN4llvm14ConstantStruct15destroyConstantEv\", \"llvm::ConstantStruct::destroyConstant()\"},\n    {\"_ZN4llvm14ConstantVector15destroyConstantEv\", \"llvm::ConstantVector::destroyConstant()\"},\n    {\"_ZNK4llvm14ConstantVector14isAllOnesValueEv\", \"llvm::ConstantVector::isAllOnesValue() const\"},\n    {\"_ZNK4llvm14ConstantVector13getSplatValueEv\", \"llvm::ConstantVector::getSplatValue() const\"},\n    {\"_ZN4llvm19ConstantPointerNull15destroyConstantEv\", \"llvm::ConstantPointerNull::destroyConstant()\"},\n    {\"_ZN4llvm10UndefValue15destroyConstantEv\", \"llvm::UndefValue::destroyConstant()\"},\n    {\"_ZN4llvm12BlockAddress3getEPNS_10BasicBlockE\", \"llvm::BlockAddress::get(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12BlockAddress3getEPNS_8FunctionEPNS_10BasicBlockE\", \"llvm::BlockAddress::get(llvm::Function*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12BlockAddressC1EPNS_8FunctionEPNS_10BasicBlockE\", \"llvm::BlockAddress::BlockAddress(llvm::Function*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12BlockAddressC2EPNS_8FunctionEPNS_10BasicBlockE\", \"llvm::BlockAddress::BlockAddress(llvm::Function*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12BlockAddress15destroyConstantEv\", \"llvm::BlockAddress::destroyConstant()\"},\n    {\"_ZN4llvm12BlockAddress27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::BlockAddress::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm12ConstantExpr8getTruncEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getTrunc(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr7getZExtEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getZExt(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr7getSExtEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getSExt(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr10getFPTruncEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getFPTrunc(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr11getFPExtendEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getFPExtend(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr9getUIToFPEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getUIToFP(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr9getSIToFPEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getSIToFP(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr9getFPToUIEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getFPToUI(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr9getFPToSIEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getFPToSI(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr11getPtrToIntEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getPtrToInt(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr10getBitCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getBitCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr16getZExtOrBitCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getZExtOrBitCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr16getSExtOrBitCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getSExtOrBitCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr17getTruncOrBitCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getTruncOrBitCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr14getPointerCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getPointerCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr14getIntegerCastEPNS_8ConstantEPKNS_4TypeEb\", \"llvm::ConstantExpr::getIntegerCast(llvm::Constant*, llvm::Type const*, bool)\"},\n    {\"_ZN4llvm12ConstantExpr9getFPCastEPNS_8ConstantEPKNS_4TypeE\", \"llvm::ConstantExpr::getFPCast(llvm::Constant*, llvm::Type const*)\"},\n    {\"_Z13getFoldedCastN4llvm11Instruction7CastOpsEPNS_8ConstantEPKNS_4TypeE\", \"getFoldedCast(llvm::Instruction::CastOps, llvm::Constant*, llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr12getCompareTyEtPNS_8ConstantES2_\", \"llvm::ConstantExpr::getCompareTy(unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFCmpEtPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFCmp(unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getICmpEtPNS_8ConstantES2_\", \"llvm::ConstantExpr::getICmp(unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr9getSizeOfEPKNS_4TypeE\", \"llvm::ConstantExpr::getSizeOf(llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr10getAlignOfEPKNS_4TypeE\", \"llvm::ConstantExpr::getAlignOf(llvm::Type const*)\"},\n    {\"_ZN4llvm12ConstantExpr11getOffsetOfEPKNS_10StructTypeEj\", \"llvm::ConstantExpr::getOffsetOf(llvm::StructType const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr11getOffsetOfEPKNS_4TypeEPNS_8ConstantE\", \"llvm::ConstantExpr::getOffsetOf(llvm::Type const*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr11getSelectTyEPKNS_4TypeEPNS_8ConstantES5_S5_\", \"llvm::ConstantExpr::getSelectTy(llvm::Type const*, llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr16getGetElementPtrEPNS_8ConstantEPKPNS_5ValueEj\", \"llvm::ConstantExpr::getGetElementPtr(llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr24getInBoundsGetElementPtrEPNS_8ConstantEPKPNS_5ValueEj\", \"llvm::ConstantExpr::getInBoundsGetElementPtr(llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr19getExtractElementTyEPKNS_4TypeEPNS_8ConstantES5_\", \"llvm::ConstantExpr::getExtractElementTy(llvm::Type const*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr18getInsertElementTyEPKNS_4TypeEPNS_8ConstantES5_S5_\", \"llvm::ConstantExpr::getInsertElementTy(llvm::Type const*, llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr18getShuffleVectorTyEPKNS_4TypeEPNS_8ConstantES5_S5_\", \"llvm::ConstantExpr::getShuffleVectorTy(llvm::Type const*, llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr16getInsertValueTyEPKNS_4TypeEPNS_8ConstantES5_PKjj\", \"llvm::ConstantExpr::getInsertValueTy(llvm::Type const*, llvm::Constant*, llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr14getInsertValueEPNS_8ConstantES2_PKjj\", \"llvm::ConstantExpr::getInsertValue(llvm::Constant*, llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr17getExtractValueTyEPKNS_4TypeEPNS_8ConstantEPKjj\", \"llvm::ConstantExpr::getExtractValueTy(llvm::Type const*, llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr15getExtractValueEPNS_8ConstantEPKjj\", \"llvm::ConstantExpr::getExtractValue(llvm::Constant*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr6getNegEPNS_8ConstantE\", \"llvm::ConstantExpr::getNeg(llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFNegEPNS_8ConstantE\", \"llvm::ConstantExpr::getFNeg(llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getNotEPNS_8ConstantE\", \"llvm::ConstantExpr::getNot(llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getAddEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getAdd(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFAddEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFAdd(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getSubEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getSub(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFSubEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFSub(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getMulEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getMul(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFMulEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFMul(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getUDivEPNS_8ConstantES2_b\", \"llvm::ConstantExpr::getUDiv(llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm12ConstantExpr7getSDivEPNS_8ConstantES2_b\", \"llvm::ConstantExpr::getSDiv(llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm12ConstantExpr7getFDivEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFDiv(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getURemEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getURem(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getSRemEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getSRem(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getFRemEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getFRem(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getAndEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getAnd(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr5getOrEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getOr(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getXorEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getXor(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr6getShlEPNS_8ConstantES2_\", \"llvm::ConstantExpr::getShl(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm12ConstantExpr7getLShrEPNS_8ConstantES2_b\", \"llvm::ConstantExpr::getLShr(llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm12ConstantExpr7getAShrEPNS_8ConstantES2_b\", \"llvm::ConstantExpr::getAShr(llvm::Constant*, llvm::Constant*, bool)\"},\n    {\"_ZN4llvm12ConstantExpr15destroyConstantEv\", \"llvm::ConstantExpr::destroyConstant()\"},\n    {\"_ZNK4llvm12ConstantExpr13getOpcodeNameEv\", \"llvm::ConstantExpr::getOpcodeName() const\"},\n    {\"_ZN4llvm25GetElementPtrConstantExprC1EPNS_8ConstantERKSt6vectorIS2_SaIS2_EEPKNS_4TypeE\", \"llvm::GetElementPtrConstantExpr::GetElementPtrConstantExpr(llvm::Constant*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, llvm::Type const*)\"},\n    {\"_ZN4llvm25GetElementPtrConstantExprC2EPNS_8ConstantERKSt6vectorIS2_SaIS2_EEPKNS_4TypeE\", \"llvm::GetElementPtrConstantExpr::GetElementPtrConstantExpr(llvm::Constant*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, llvm::Type const*)\"},\n    {\"_ZN4llvm13ConstantArray27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::ConstantArray::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm14ConstantStruct27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::ConstantStruct::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm14ConstantVector27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::ConstantVector::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm12ConstantExpr27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::ConstantExpr::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE11getOrCreateEPKS6_RKS5_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::getOrCreate(llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE11getOrCreateEPKS6_RKS5_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::getOrCreate(llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE11getOrCreateEPKS6_RKS5_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::getOrCreate(llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_8ConstantEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::Constant*>::resize(unsigned int)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE6removeEPS2_\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::remove(llvm::ConstantAggregateZero*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE6removeEPS7_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::remove(llvm::ConstantArray*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE6removeEPS7_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::remove(llvm::ConstantStruct*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE6removeEPS7_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::remove(llvm::ConstantVector*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE6removeEPS2_\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::remove(llvm::ConstantPointerNull*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE6removeEPS2_\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::remove(llvm::UndefValue*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE11getOrCreateEPKS2_RKS1_\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::getOrCreate(llvm::Type const*, llvm::ExprMapKeyType const&)\"},\n    {\"_ZN4llvm12ConstantExpr20getGetElementPtrImplIPNS_5ValueEEEPNS_8ConstantES5_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getGetElementPtrImpl<llvm::Value*>(llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr20getGetElementPtrImplIPNS_8ConstantEEES3_S3_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getGetElementPtrImpl<llvm::Constant*>(llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr28getInBoundsGetElementPtrImplIPNS_5ValueEEEPNS_8ConstantES5_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getInBoundsGetElementPtrImpl<llvm::Value*>(llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr28getInBoundsGetElementPtrImplIPNS_8ConstantEEES3_S3_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getInBoundsGetElementPtrImpl<llvm::Constant*>(llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE6removeEPS3_\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::remove(llvm::ConstantExpr*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE15InsertOrGetItemERSt4pairIS9_IPKS6_S5_EPS7_ERb\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::InsertOrGetItem(std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, llvm::ConstantArray*>&, bool&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE21MoveConstantToNewSlotEPS7_St17_Rb_tree_iteratorISt4pairIKSB_IPKS6_S5_ES9_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::MoveConstantToNewSlot(llvm::ConstantArray*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE15InsertOrGetItemERSt4pairIS9_IPKS6_S5_EPS7_ERb\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::InsertOrGetItem(std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, llvm::ConstantStruct*>&, bool&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE21MoveConstantToNewSlotEPS7_St17_Rb_tree_iteratorISt4pairIKSB_IPKS6_S5_ES9_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::MoveConstantToNewSlot(llvm::ConstantStruct*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >)\"},\n    {\"_ZN4llvm21ConstantAggregateZeroD1Ev\", \"llvm::ConstantAggregateZero::~ConstantAggregateZero()\"},\n    {\"_ZN4llvm21ConstantAggregateZeroD0Ev\", \"llvm::ConstantAggregateZero::~ConstantAggregateZero()\"},\n    {\"_ZNK4llvm21ConstantAggregateZero11isNullValueEv\", \"llvm::ConstantAggregateZero::isNullValue() const\"},\n    {\"_ZNK4llvm8Constant19isNegativeZeroValueEv\", \"llvm::Constant::isNegativeZeroValue() const\"},\n    {\"_ZN4llvm8Constant27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::Constant::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm19ConstantPointerNullD1Ev\", \"llvm::ConstantPointerNull::~ConstantPointerNull()\"},\n    {\"_ZN4llvm19ConstantPointerNullD0Ev\", \"llvm::ConstantPointerNull::~ConstantPointerNull()\"},\n    {\"_ZNK4llvm19ConstantPointerNull11isNullValueEv\", \"llvm::ConstantPointerNull::isNullValue() const\"},\n    {\"_ZN4llvm12ConstantExprD1Ev\", \"llvm::ConstantExpr::~ConstantExpr()\"},\n    {\"_ZN4llvm12ConstantExprD0Ev\", \"llvm::ConstantExpr::~ConstantExpr()\"},\n    {\"_ZNK4llvm12ConstantExpr11isNullValueEv\", \"llvm::ConstantExpr::isNullValue() const\"},\n    {\"_ZN4llvm10UndefValueD1Ev\", \"llvm::UndefValue::~UndefValue()\"},\n    {\"_ZN4llvm10UndefValueD0Ev\", \"llvm::UndefValue::~UndefValue()\"},\n    {\"_ZNK4llvm10UndefValue11isNullValueEv\", \"llvm::UndefValue::isNullValue() const\"},\n    {\"_ZN4llvm10ConstantFPD1Ev\", \"llvm::ConstantFP::~ConstantFP()\"},\n    {\"_ZN4llvm10ConstantFPD0Ev\", \"llvm::ConstantFP::~ConstantFP()\"},\n    {\"_ZNK4llvm10ConstantFP19isNegativeZeroValueEv\", \"llvm::ConstantFP::isNegativeZeroValue() const\"},\n    {\"_ZN4llvm8Constant15destroyConstantEv\", \"llvm::Constant::destroyConstant()\"},\n    {\"_ZN4llvm13ConstantArrayD1Ev\", \"llvm::ConstantArray::~ConstantArray()\"},\n    {\"_ZN4llvm13ConstantArrayD0Ev\", \"llvm::ConstantArray::~ConstantArray()\"},\n    {\"_ZNK4llvm13ConstantArray11isNullValueEv\", \"llvm::ConstantArray::isNullValue() const\"},\n    {\"_ZN4llvm14ConstantStructD1Ev\", \"llvm::ConstantStruct::~ConstantStruct()\"},\n    {\"_ZN4llvm14ConstantStructD0Ev\", \"llvm::ConstantStruct::~ConstantStruct()\"},\n    {\"_ZNK4llvm14ConstantStruct11isNullValueEv\", \"llvm::ConstantStruct::isNullValue() const\"},\n    {\"_ZN4llvm14ConstantVectorD1Ev\", \"llvm::ConstantVector::~ConstantVector()\"},\n    {\"_ZN4llvm14ConstantVectorD0Ev\", \"llvm::ConstantVector::~ConstantVector()\"},\n    {\"_ZNK4llvm14ConstantVector11isNullValueEv\", \"llvm::ConstantVector::isNullValue() const\"},\n    {\"_ZN4llvm12BlockAddressD1Ev\", \"llvm::BlockAddress::~BlockAddress()\"},\n    {\"_ZN4llvm12BlockAddressD0Ev\", \"llvm::BlockAddress::~BlockAddress()\"},\n    {\"_ZNK4llvm12BlockAddress11isNullValueEv\", \"llvm::BlockAddress::isNullValue() const\"},\n    {\"_ZN4llvm25GetElementPtrConstantExprD1Ev\", \"llvm::GetElementPtrConstantExpr::~GetElementPtrConstantExpr()\"},\n    {\"_ZN4llvm25GetElementPtrConstantExprD0Ev\", \"llvm::GetElementPtrConstantExpr::~GetElementPtrConstantExpr()\"},\n    {\"_ZN4llvm11ConstantIntD1Ev\", \"llvm::ConstantInt::~ConstantInt()\"},\n    {\"_ZN4llvm11ConstantIntD0Ev\", \"llvm::ConstantInt::~ConstantInt()\"},\n    {\"_ZNK4llvm11ConstantInt11isNullValueEv\", \"llvm::ConstantInt::isNullValue() const\"},\n    {\"_ZN4llvm8ConstantD1Ev\", \"llvm::Constant::~Constant()\"},\n    {\"_ZN4llvm8ConstantD0Ev\", \"llvm::Constant::~Constant()\"},\n    {\"_ZN4llvm4UserD1Ev\", \"llvm::User::~User()\"},\n    {\"_ZN4llvm4UserD0Ev\", \"llvm::User::~User()\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE19FindExistingElementEPS3_\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::FindExistingElement(llvm::ConstantExpr*)\"},\n    {\"_ZN4llvm12ConstantExpr26getInBoundsGetElementPtrTyIPNS_8ConstantEEES3_PKNS_4TypeES3_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getInBoundsGetElementPtrTy<llvm::Constant*>(llvm::Type const*, llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr26getInBoundsGetElementPtrTyIPNS_5ValueEEEPNS_8ConstantEPKNS_4TypeES5_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getInBoundsGetElementPtrTy<llvm::Value*>(llvm::Type const*, llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr18getGetElementPtrTyIPNS_8ConstantEEES3_PKNS_4TypeES3_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getGetElementPtrTy<llvm::Constant*>(llvm::Type const*, llvm::Constant*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm12ConstantExpr18getGetElementPtrTyIPNS_5ValueEEEPNS_8ConstantEPKNS_4TypeES5_PKT_j\", \"llvm::Constant* llvm::ConstantExpr::getGetElementPtrTy<llvm::Value*>(llvm::Type const*, llvm::Constant*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE6CreateEPKS2_RKS1_St17_Rb_tree_iteratorISt4pairIKSA_IS6_S1_EPS3_EE\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::Create(llvm::Type const*, llvm::ExprMapKeyType const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >)\"},\n    {\"_ZN4llvm15ConstantCreatorINS_12ConstantExprENS_4TypeENS_14ExprMapKeyTypeEE6createEPKS2_RKS3_t\", \"llvm::ConstantCreator<llvm::ConstantExpr, llvm::Type, llvm::ExprMapKeyType>::create(llvm::Type const*, llvm::ExprMapKeyType const&, unsigned short)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeENS1_14ExprMapKeyTypeEES0_IKS6_PNS1_12ConstantExprEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >, std::less<std::pair<llvm::Type const*, llvm::ExprMapKeyType> >, std::allocator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >, std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> const&)\"},\n    {\"_ZN4llvm19CompareConstantExprC2EPKNS_4TypeENS_11Instruction8OtherOpsEtPNS_8ConstantES7_\", \"llvm::CompareConstantExpr::CompareConstantExpr(llvm::Type const*, llvm::Instruction::OtherOps, unsigned short, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm19CompareConstantExprD1Ev\", \"llvm::CompareConstantExpr::~CompareConstantExpr()\"},\n    {\"_ZN4llvm19CompareConstantExprD0Ev\", \"llvm::CompareConstantExpr::~CompareConstantExpr()\"},\n    {\"_ZN4llvm24ExtractValueConstantExprC2EPNS_8ConstantERKNS_11SmallVectorIjLj4EEEPKNS_4TypeE\", \"llvm::ExtractValueConstantExpr::ExtractValueConstantExpr(llvm::Constant*, llvm::SmallVector<unsigned int, 4u> const&, llvm::Type const*)\"},\n    {\"_ZN4llvm24ExtractValueConstantExprD1Ev\", \"llvm::ExtractValueConstantExpr::~ExtractValueConstantExpr()\"},\n    {\"_ZN4llvm24ExtractValueConstantExprD0Ev\", \"llvm::ExtractValueConstantExpr::~ExtractValueConstantExpr()\"},\n    {\"_ZN4llvm23InsertValueConstantExprC2EPNS_8ConstantES2_RKNS_11SmallVectorIjLj4EEEPKNS_4TypeE\", \"llvm::InsertValueConstantExpr::InsertValueConstantExpr(llvm::Constant*, llvm::Constant*, llvm::SmallVector<unsigned int, 4u> const&, llvm::Type const*)\"},\n    {\"_ZN4llvm23InsertValueConstantExprD1Ev\", \"llvm::InsertValueConstantExpr::~InsertValueConstantExpr()\"},\n    {\"_ZN4llvm23InsertValueConstantExprD0Ev\", \"llvm::InsertValueConstantExpr::~InsertValueConstantExpr()\"},\n    {\"_ZN4llvm25ShuffleVectorConstantExprC2EPNS_8ConstantES2_S2_\", \"llvm::ShuffleVectorConstantExpr::ShuffleVectorConstantExpr(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm25ShuffleVectorConstantExprD1Ev\", \"llvm::ShuffleVectorConstantExpr::~ShuffleVectorConstantExpr()\"},\n    {\"_ZN4llvm25ShuffleVectorConstantExprD0Ev\", \"llvm::ShuffleVectorConstantExpr::~ShuffleVectorConstantExpr()\"},\n    {\"_ZN4llvm25InsertElementConstantExprC2EPNS_8ConstantES2_S2_\", \"llvm::InsertElementConstantExpr::InsertElementConstantExpr(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm25InsertElementConstantExprD1Ev\", \"llvm::InsertElementConstantExpr::~InsertElementConstantExpr()\"},\n    {\"_ZN4llvm25InsertElementConstantExprD0Ev\", \"llvm::InsertElementConstantExpr::~InsertElementConstantExpr()\"},\n    {\"_ZN4llvm26ExtractElementConstantExprC2EPNS_8ConstantES2_\", \"llvm::ExtractElementConstantExpr::ExtractElementConstantExpr(llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm26ExtractElementConstantExprD1Ev\", \"llvm::ExtractElementConstantExpr::~ExtractElementConstantExpr()\"},\n    {\"_ZN4llvm26ExtractElementConstantExprD0Ev\", \"llvm::ExtractElementConstantExpr::~ExtractElementConstantExpr()\"},\n    {\"_ZN4llvm18SelectConstantExprC2EPNS_8ConstantES2_S2_\", \"llvm::SelectConstantExpr::SelectConstantExpr(llvm::Constant*, llvm::Constant*, llvm::Constant*)\"},\n    {\"_ZN4llvm18SelectConstantExprD1Ev\", \"llvm::SelectConstantExpr::~SelectConstantExpr()\"},\n    {\"_ZN4llvm18SelectConstantExprD0Ev\", \"llvm::SelectConstantExpr::~SelectConstantExpr()\"},\n    {\"_ZN4llvm18BinaryConstantExprC2EjPNS_8ConstantES2_j\", \"llvm::BinaryConstantExpr::BinaryConstantExpr(unsigned int, llvm::Constant*, llvm::Constant*, unsigned int)\"},\n    {\"_ZN4llvm18BinaryConstantExprD1Ev\", \"llvm::BinaryConstantExpr::~BinaryConstantExpr()\"},\n    {\"_ZN4llvm18BinaryConstantExprD0Ev\", \"llvm::BinaryConstantExpr::~BinaryConstantExpr()\"},\n    {\"_ZN4llvm17UnaryConstantExprD1Ev\", \"llvm::UnaryConstantExpr::~UnaryConstantExpr()\"},\n    {\"_ZN4llvm17UnaryConstantExprD0Ev\", \"llvm::UnaryConstantExpr::~UnaryConstantExpr()\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_8FunctionEPNS_10BasicBlockEEPNS_12BlockAddressENS_12DenseMapInfoIS6_EENS9_IS8_EEE15LookupBucketForERKS6_RPS1_IS6_S8_E\", \"llvm::DenseMap<std::pair<llvm::Function*, llvm::BasicBlock*>, llvm::BlockAddress*, llvm::DenseMapInfo<std::pair<llvm::Function*, llvm::BasicBlock*> >, llvm::DenseMapInfo<llvm::BlockAddress*> >::LookupBucketFor(std::pair<llvm::Function*, llvm::BasicBlock*> const&, std::pair<std::pair<llvm::Function*, llvm::BasicBlock*>, llvm::BlockAddress*>*&) const\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_8FunctionEPNS_10BasicBlockEEPNS_12BlockAddressENS_12DenseMapInfoIS6_EENS9_IS8_EEE16InsertIntoBucketERKS6_RKS8_PS1_IS6_S8_E\", \"llvm::DenseMap<std::pair<llvm::Function*, llvm::BasicBlock*>, llvm::BlockAddress*, llvm::DenseMapInfo<std::pair<llvm::Function*, llvm::BasicBlock*> >, llvm::DenseMapInfo<llvm::BlockAddress*> >::InsertIntoBucket(std::pair<llvm::Function*, llvm::BasicBlock*> const&, llvm::BlockAddress* const&, std::pair<std::pair<llvm::Function*, llvm::BasicBlock*>, llvm::BlockAddress*>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_8FunctionEPNS_10BasicBlockEEPNS_12BlockAddressENS_12DenseMapInfoIS6_EENS9_IS8_EEE4growEj\", \"llvm::DenseMap<std::pair<llvm::Function*, llvm::BasicBlock*>, llvm::BlockAddress*, llvm::DenseMapInfo<std::pair<llvm::Function*, llvm::BasicBlock*> >, llvm::DenseMapInfo<llvm::BlockAddress*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE6CreateEPKS1_RKcSt17_Rb_tree_iteratorISt4pairIKS9_IS5_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::Create(llvm::Type const*, char const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_10UndefValueEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS9_ERKS9_\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >, std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE6CreateEPKS1_RKcSt17_Rb_tree_iteratorISt4pairIKS9_IS5_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::Create(llvm::PointerType const*, char const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeEcES0_IKS5_PNS1_19ConstantPointerNullEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS9_ERKS9_\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, char>, std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >, std::less<std::pair<llvm::PointerType const*, char> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >, std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE19FindExistingElementEPS7_\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::FindExistingElement(llvm::ConstantVector*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm14ConstantStructESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE5eraseES5_ISI_ESP_\", \"std::_Rb_tree<llvm::ConstantStruct*, std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::ConstantStruct*>, std::allocator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::_Rb_tree_iterator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm13ConstantArrayESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE5eraseES5_ISI_ESP_\", \"std::_Rb_tree<llvm::ConstantArray*, std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::ConstantArray*>, std::allocator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::_Rb_tree_iterator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE6CreateEPKS1_RKcSt17_Rb_tree_iteratorISt4pairIKS9_IS5_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::Create(llvm::Type const*, char const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_21ConstantAggregateZeroEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS9_ERKS9_\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >, std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE6CreateEPKS6_RKS5_St17_Rb_tree_iteratorISt4pairIKSE_ISA_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::Create(llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISE_ERKSE_\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE6CreateEPKS6_RKS5_St17_Rb_tree_iteratorISt4pairIKSE_ISA_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::Create(llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISE_ERKSE_\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE6CreateEPKS6_RKS5_St17_Rb_tree_iteratorISt4pairIKSE_ISA_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::Create(llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISE_ERKSE_\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> const&)\"},\n    {\"_ZNK4llvm8DenseMapINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EEE15LookupBucketForERKS2_RPSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*> >::LookupBucketFor(llvm::DenseMapAPFloatKeyInfo::KeyTy const&, std::pair<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*>*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*> >::InsertIntoBucket(llvm::DenseMapAPFloatKeyInfo::KeyTy const&, llvm::ConstantFP* const&, std::pair<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*>*)\"},\n    {\"_ZN4llvm8DenseMapINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EEE4growEj\", \"llvm::DenseMap<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*> >::grow(unsigned int)\"},\n    {\"_ZNK4llvm8DenseMapINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EEE15LookupBucketForERKS2_RPSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*> >::LookupBucketFor(llvm::DenseMapAPIntKeyInfo::KeyTy const&, std::pair<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*>*&) const\"},\n    {\"_ZN4llvm8DenseMapINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*> >::InsertIntoBucket(llvm::DenseMapAPIntKeyInfo::KeyTy const&, llvm::ConstantInt* const&, std::pair<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*>*)\"},\n    {\"_ZN4llvm8DenseMapINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EEE4growEj\", \"llvm::DenseMap<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPN4llvm8ConstantESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, unsigned long, llvm::Constant* const&)\"},\n    {\"_ZNK4llvm8DebugLoc8getScopeERKNS_11LLVMContextE\", \"llvm::DebugLoc::getScope(llvm::LLVMContext const&) const\"},\n    {\"_ZNK4llvm8DebugLoc12getInlinedAtERKNS_11LLVMContextE\", \"llvm::DebugLoc::getInlinedAt(llvm::LLVMContext const&) const\"},\n    {\"_ZNK4llvm8DebugLoc20getScopeAndInlinedAtERPNS_6MDNodeES3_RKNS_11LLVMContextE\", \"llvm::DebugLoc::getScopeAndInlinedAt(llvm::MDNode*&, llvm::MDNode*&, llvm::LLVMContext const&) const\"},\n    {\"_ZN4llvm8DebugLoc3getEjjPNS_6MDNodeES2_\", \"llvm::DebugLoc::get(unsigned int, unsigned int, llvm::MDNode*, llvm::MDNode*)\"},\n    {\"_ZN4llvm15LLVMContextImpl27getOrAddScopeRecordIdxEntryEPNS_6MDNodeEi\", \"llvm::LLVMContextImpl::getOrAddScopeRecordIdxEntry(llvm::MDNode*, int)\"},\n    {\"_ZN4llvm15LLVMContextImpl30getOrAddScopeInlinedAtIdxEntryEPNS_6MDNodeES2_i\", \"llvm::LLVMContextImpl::getOrAddScopeInlinedAtIdxEntry(llvm::MDNode*, llvm::MDNode*, int)\"},\n    {\"_ZNK4llvm8DebugLoc11getAsMDNodeERKNS_11LLVMContextE\", \"llvm::DebugLoc::getAsMDNode(llvm::LLVMContext const&) const\"},\n    {\"_ZN4llvm8DebugLoc17getFromDILocationEPNS_6MDNodeE\", \"llvm::DebugLoc::getFromDILocation(llvm::MDNode*)\"},\n    {\"_ZN4llvm10DebugRecVH7deletedEv\", \"llvm::DebugRecVH::deleted()\"},\n    {\"_ZN4llvm10DebugRecVH19allUsesReplacedWithEPNS_5ValueE\", \"llvm::DebugRecVH::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZNSt6vectorIN4llvm10DebugRecVHESaIS1_EE7reserveEm\", \"std::vector<llvm::DebugRecVH, std::allocator<llvm::DebugRecVH> >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm10DebugRecVHES2_ESaIS3_EE7reserveEm\", \"std::vector<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>, std::allocator<std::pair<llvm::DebugRecVH, llvm::DebugRecVH> > >::reserve(unsigned long)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm10DebugRecVHES2_ESaIS3_EE9push_backERKS3_\", \"std::vector<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>, std::allocator<std::pair<llvm::DebugRecVH, llvm::DebugRecVH> > >::push_back(std::pair<llvm::DebugRecVH, llvm::DebugRecVH> const&)\"},\n    {\"_ZNK4llvm8DenseMapISt4pairIPNS_6MDNodeES3_EiNS_12DenseMapInfoIS4_EENS5_IiEEE15LookupBucketForERKS4_RPS1_IS4_iE\", \"llvm::DenseMap<std::pair<llvm::MDNode*, llvm::MDNode*>, int, llvm::DenseMapInfo<std::pair<llvm::MDNode*, llvm::MDNode*> >, llvm::DenseMapInfo<int> >::LookupBucketFor(std::pair<llvm::MDNode*, llvm::MDNode*> const&, std::pair<std::pair<llvm::MDNode*, llvm::MDNode*>, int>*&) const\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm10DebugRecVHES2_ESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>, std::allocator<std::pair<llvm::DebugRecVH, llvm::DebugRecVH> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::vector<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>, std::allocator<std::pair<llvm::DebugRecVH, llvm::DebugRecVH> > > >, std::pair<llvm::DebugRecVH, llvm::DebugRecVH> const&)\"},\n    {\"_ZSt24__uninitialized_copy_auxIPSt4pairIN4llvm10DebugRecVHES2_ES4_ET0_T_S6_S5_St12__false_type\", \"std::pair<llvm::DebugRecVH, llvm::DebugRecVH>* std::__uninitialized_copy_aux<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*>(std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::__false_type)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPSt4pairIN4llvm10DebugRecVHES5_ES7_EET0_T_S9_S8_\", \"std::pair<llvm::DebugRecVH, llvm::DebugRecVH>* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*>(std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*, std::pair<llvm::DebugRecVH, llvm::DebugRecVH>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_6MDNodeES3_EiNS_12DenseMapInfoIS4_EENS5_IiEEE16InsertIntoBucketERKS4_RKiPS1_IS4_iE\", \"llvm::DenseMap<std::pair<llvm::MDNode*, llvm::MDNode*>, int, llvm::DenseMapInfo<std::pair<llvm::MDNode*, llvm::MDNode*> >, llvm::DenseMapInfo<int> >::InsertIntoBucket(std::pair<llvm::MDNode*, llvm::MDNode*> const&, int const&, std::pair<std::pair<llvm::MDNode*, llvm::MDNode*>, int>*)\"},\n    {\"_ZN4llvm8DenseMapISt4pairIPNS_6MDNodeES3_EiNS_12DenseMapInfoIS4_EENS5_IiEEE4growEj\", \"llvm::DenseMap<std::pair<llvm::MDNode*, llvm::MDNode*>, int, llvm::DenseMapInfo<std::pair<llvm::MDNode*, llvm::MDNode*> >, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm10DebugRecVHESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::DebugRecVH, std::allocator<llvm::DebugRecVH> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::DebugRecVH*, std::vector<llvm::DebugRecVH, std::allocator<llvm::DebugRecVH> > >, llvm::DebugRecVH const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm10DebugRecVHES5_EET0_T_S7_S6_\", \"llvm::DebugRecVH* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::DebugRecVH*, llvm::DebugRecVH*>(llvm::DebugRecVH*, llvm::DebugRecVH*, llvm::DebugRecVH*)\"},\n    {\"_ZNSt6vectorIN4llvm10DebugRecVHESaIS1_EE20_M_allocate_and_copyIPS1_EES5_mT_S6_\", \"llvm::DebugRecVH* std::vector<llvm::DebugRecVH, std::allocator<llvm::DebugRecVH> >::_M_allocate_and_copy<llvm::DebugRecVH*>(unsigned long, llvm::DebugRecVH*, llvm::DebugRecVH*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6MDNodeEiNS_12DenseMapInfoIS2_EENS3_IiEEE16InsertIntoBucketERKS2_RKiPSt4pairIS2_iE\", \"llvm::DenseMap<llvm::MDNode*, int, llvm::DenseMapInfo<llvm::MDNode*>, llvm::DenseMapInfo<int> >::InsertIntoBucket(llvm::MDNode* const&, int const&, std::pair<llvm::MDNode*, int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_6MDNodeEiNS_12DenseMapInfoIS2_EENS3_IiEEE4growEj\", \"llvm::DenseMap<llvm::MDNode*, int, llvm::DenseMapInfo<llvm::MDNode*>, llvm::DenseMapInfo<int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm12PrintDomTreeINS_10BasicBlockEEEvPKNS_15DomTreeNodeBaseIT_EERNS_11raw_ostreamEj\", \"void llvm::PrintDomTree<llvm::BasicBlock>(llvm::DomTreeNodeBase<llvm::BasicBlock> const*, llvm::raw_ostream&, unsigned int)\"},\n    {\"_ZN4llvm27initializeDominatorTreePassERNS_12PassRegistryE\", \"llvm::initializeDominatorTreePass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm13DominatorTree13runOnFunctionERNS_8FunctionE\", \"llvm::DominatorTree::runOnFunction(llvm::Function&)\"},\n    {\"_ZNK4llvm13DominatorTree14verifyAnalysisEv\", \"llvm::DominatorTree::verifyAnalysis() const\"},\n    {\"_ZNK4llvm13DominatorTree5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::DominatorTree::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm13DominatorTree9dominatesEPKNS_11InstructionES3_\", \"llvm::DominatorTree::dominates(llvm::Instruction const*, llvm::Instruction const*) const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE5beginEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::begin()\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE3endEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::end()\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE5beginEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::begin() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE3endEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::end() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE8getBlockEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getBlock() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE7getIDomEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getIDom() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE11getChildrenEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getChildren() const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEEC1EPS1_PS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::DomTreeNodeBase(llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEEC2EPS1_PS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::DomTreeNodeBase(llvm::BasicBlock*, llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE8addChildEPS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::addChild(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE14getNumChildrenEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getNumChildren() const\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE16clearAllChildrenEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::clearAllChildren()\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE7compareEPS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::compare(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN4llvm15DomTreeNodeBaseINS_10BasicBlockEE7setIDomEPS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::setIDom(llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE11getDFSNumInEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getDFSNumIn() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE12getDFSNumOutEv\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::getDFSNumOut() const\"},\n    {\"_ZNK4llvm15DomTreeNodeBaseINS_10BasicBlockEE11DominatedByEPKS2_\", \"llvm::DomTreeNodeBase<llvm::BasicBlock>::DominatedBy(llvm::DomTreeNodeBase<llvm::BasicBlock> const*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE7InfoRecC1Ev\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec::InfoRec()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE7InfoRecC2Ev\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec::InfoRec()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE5resetEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::reset()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEEC1Eb\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::DominatorTreeBase(bool)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEEC2Eb\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::DominatorTreeBase(bool)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEED0Ev\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEED1Ev\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEED2Ev\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::~DominatorTreeBase()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE7compareERS2_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::compare(llvm::DominatorTreeBase<llvm::BasicBlock>&) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE13releaseMemoryEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::releaseMemory()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE7getNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getNode(llvm::BasicBlock*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE11getRootNodeEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getRootNode()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE11getRootNodeEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getRootNode() const\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE17properlyDominatesEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::properlyDominates(llvm::DomTreeNodeBase<llvm::BasicBlock> const*, llvm::DomTreeNodeBase<llvm::BasicBlock> const*) const\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE23dominatedBySlowTreeWalkEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::dominatedBySlowTreeWalk(llvm::DomTreeNodeBase<llvm::BasicBlock> const*, llvm::DomTreeNodeBase<llvm::BasicBlock> const*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE17properlyDominatesEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::properlyDominates(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE20isReachableFromEntryEPKS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::isReachableFromEntry(llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE9dominatesEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::dominates(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE9dominatesEPKNS_15DomTreeNodeBaseIS1_EES6_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::dominates(llvm::DomTreeNodeBase<llvm::BasicBlock> const*, llvm::DomTreeNodeBase<llvm::BasicBlock> const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE16updateDFSNumbersEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::updateDFSNumbers()\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE7getRootEv\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getRoot() const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE26findNearestCommonDominatorEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::findNearestCommonDominator(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE26findNearestCommonDominatorEPKS1_S4_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::findNearestCommonDominator(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE11addNewBlockEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::addNewBlock(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE24changeImmediateDominatorEPNS_15DomTreeNodeBaseIS1_EES5_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::changeImmediateDominator(llvm::DomTreeNodeBase<llvm::BasicBlock>*, llvm::DomTreeNodeBase<llvm::BasicBlock>*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE24changeImmediateDominatorEPS1_S3_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::changeImmediateDominator(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE9eraseNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::eraseNode(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE10removeNodeEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::removeNode(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE10splitBlockEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::splitBlock(llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE5printERNS_11raw_ostreamE\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE15getNodeForBlockEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getNodeForBlock(llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm17DominatorTreeBaseINS_10BasicBlockEE7getIDomEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::getIDom(llvm::BasicBlock*) const\"},\n    {\"_ZN4llvm17DominatorTreeBaseINS_10BasicBlockEE7addRootEPS1_\", \"llvm::DominatorTreeBase<llvm::BasicBlock>::addRoot(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm13DominatorTreeD1Ev\", \"llvm::DominatorTree::~DominatorTree()\"},\n    {\"_ZN4llvm13DominatorTreeD0Ev\", \"llvm::DominatorTree::~DominatorTree()\"},\n    {\"_ZNK4llvm13DominatorTree16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::DominatorTree::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13DominatorTree13releaseMemoryEv\", \"llvm::DominatorTree::releaseMemory()\"},\n    {\"_ZN4llvm9CalculateINS_8FunctionEPNS_10BasicBlockEEEvRNS_17DominatorTreeBaseINS_11GraphTraitsIT0_E8NodeTypeEEERT_\", \"void llvm::Calculate<llvm::Function, llvm::BasicBlock*>(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::BasicBlock*>::NodeType>&, llvm::Function&)\"},\n    {\"_ZN4llvm9CalculateINS_8FunctionENS_7InverseIPNS_10BasicBlockEEEEEvRNS_17DominatorTreeBaseINS_11GraphTraitsIT0_E8NodeTypeEEERT_\", \"void llvm::Calculate<llvm::Function, llvm::Inverse<llvm::BasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType>&, llvm::Function&)\"},\n    {\"_ZN4llvm7DFSPassINS_11GraphTraitsINS_7InverseIPNS_10BasicBlockEEEEEEEjRNS_17DominatorTreeBaseINT_8NodeTypeEEEPS9_j\", \"unsigned int llvm::DFSPass<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm4EvalINS_11GraphTraitsINS_7InverseIPNS_10BasicBlockEEEEEEEPNT_8NodeTypeERNS_17DominatorTreeBaseIS8_EES9_j\", \"llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType* llvm::Eval<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> > >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType>&, llvm::GraphTraits<llvm::Inverse<llvm::BasicBlock*> >::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE16shrink_and_clearEv\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec> >::shrink_and_clear()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPNS_10BasicBlockENS_12PredIteratorIS2_NS_18value_use_iteratorINS_4UserEEEEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::BasicBlock*, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec> >::InsertIntoBucket(llvm::BasicBlock* const&, llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec const&, std::pair<llvm::BasicBlock*, llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_10BasicBlockENS_17DominatorTreeBaseIS1_E7InfoRecENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::BasicBlock*, llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec, llvm::DenseMapInfo<llvm::BasicBlock*>, llvm::DenseMapInfo<llvm::DominatorTreeBase<llvm::BasicBlock>::InfoRec> >::grow(unsigned int)\"},\n    {\"_ZN4llvm7DFSPassINS_11GraphTraitsIPNS_10BasicBlockEEEEEjRNS_17DominatorTreeBaseINT_8NodeTypeEEEPS7_j\", \"unsigned int llvm::DFSPass<llvm::GraphTraits<llvm::BasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::BasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::BasicBlock*>::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm4EvalINS_11GraphTraitsIPNS_10BasicBlockEEEEEPNT_8NodeTypeERNS_17DominatorTreeBaseIS6_EES7_j\", \"llvm::GraphTraits<llvm::BasicBlock*>::NodeType* llvm::Eval<llvm::GraphTraits<llvm::BasicBlock*> >(llvm::DominatorTreeBase<llvm::GraphTraits<llvm::BasicBlock*>::NodeType>&, llvm::GraphTraits<llvm::BasicBlock*>::NodeType*, unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIPNS_10BasicBlockENS_12SuccIteratorIPNS_14TerminatorInstES2_EEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<llvm::BasicBlock*, llvm::SuccIterator<llvm::TerminatorInst*, llvm::BasicBlock> >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm15callDefaultCtorINS_13DominatorTreeEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<llvm::DominatorTree>()\"},\n    {\"_ZN4llvm8Argument9setParentEPNS_8FunctionE\", \"llvm::Argument::setParent(llvm::Function*)\"},\n    {\"_ZN4llvm8ArgumentC1EPKNS_4TypeERKNS_5TwineEPNS_8FunctionE\", \"llvm::Argument::Argument(llvm::Type const*, llvm::Twine const&, llvm::Function*)\"},\n    {\"_ZN4llvm8ArgumentC2EPKNS_4TypeERKNS_5TwineEPNS_8FunctionE\", \"llvm::Argument::Argument(llvm::Type const*, llvm::Twine const&, llvm::Function*)\"},\n    {\"_ZNK4llvm8Argument8getArgNoEv\", \"llvm::Argument::getArgNo() const\"},\n    {\"_ZNK4llvm8Argument12hasByValAttrEv\", \"llvm::Argument::hasByValAttr() const\"},\n    {\"_ZNK4llvm8Argument11hasNestAttrEv\", \"llvm::Argument::hasNestAttr() const\"},\n    {\"_ZNK4llvm8Argument14hasNoAliasAttrEv\", \"llvm::Argument::hasNoAliasAttr() const\"},\n    {\"_ZNK4llvm8Argument16hasNoCaptureAttrEv\", \"llvm::Argument::hasNoCaptureAttr() const\"},\n    {\"_ZNK4llvm8Argument16hasStructRetAttrEv\", \"llvm::Argument::hasStructRetAttr() const\"},\n    {\"_ZN4llvm8Argument7addAttrEj\", \"llvm::Argument::addAttr(unsigned int)\"},\n    {\"_ZN4llvm8Function12addAttributeEjj\", \"llvm::Function::addAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8Argument10removeAttrEj\", \"llvm::Argument::removeAttr(unsigned int)\"},\n    {\"_ZN4llvm8Function15removeAttributeEjj\", \"llvm::Function::removeAttribute(unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm8Function10getContextEv\", \"llvm::Function::getContext() const\"},\n    {\"_ZNK4llvm8Function15getFunctionTypeEv\", \"llvm::Function::getFunctionType() const\"},\n    {\"_ZNK4llvm8Function8isVarArgEv\", \"llvm::Function::isVarArg() const\"},\n    {\"_ZNK4llvm8Function13getReturnTypeEv\", \"llvm::Function::getReturnType() const\"},\n    {\"_ZN4llvm8Function16removeFromParentEv\", \"llvm::Function::removeFromParent()\"},\n    {\"_ZN4llvm8Function15eraseFromParentEv\", \"llvm::Function::eraseFromParent()\"},\n    {\"_ZN4llvm8FunctionC1EPKNS_12FunctionTypeENS_11GlobalValue12LinkageTypesERKNS_5TwineEPNS_6ModuleE\", \"llvm::Function::Function(llvm::FunctionType const*, llvm::GlobalValue::LinkageTypes, llvm::Twine const&, llvm::Module*)\"},\n    {\"_ZN4llvm8FunctionC2EPKNS_12FunctionTypeENS_11GlobalValue12LinkageTypesERKNS_5TwineEPNS_6ModuleE\", \"llvm::Function::Function(llvm::FunctionType const*, llvm::GlobalValue::LinkageTypes, llvm::Twine const&, llvm::Module*)\"},\n    {\"_ZNK4llvm8Function14getIntrinsicIDEv\", \"llvm::Function::getIntrinsicID() const\"},\n    {\"_ZN4llvm9Intrinsic13getAttributesENS0_2IDE\", \"llvm::Intrinsic::getAttributes(llvm::Intrinsic::ID)\"},\n    {\"_ZN4llvm8FunctionD0Ev\", \"llvm::Function::~Function()\"},\n    {\"_ZN4llvm8FunctionD1Ev\", \"llvm::Function::~Function()\"},\n    {\"_ZN4llvm8FunctionD2Ev\", \"llvm::Function::~Function()\"},\n    {\"_ZN4llvm8Function17dropAllReferencesEv\", \"llvm::Function::dropAllReferences()\"},\n    {\"_ZN4llvm8Function7clearGCEv\", \"llvm::Function::clearGC()\"},\n    {\"_ZNK4llvm8Function18BuildLazyArgumentsEv\", \"llvm::Function::BuildLazyArguments() const\"},\n    {\"_ZNK4llvm8Function8arg_sizeEv\", \"llvm::Function::arg_size() const\"},\n    {\"_ZNK4llvm8Function9arg_emptyEv\", \"llvm::Function::arg_empty() const\"},\n    {\"_ZN4llvm8Function9setParentEPNS_6ModuleE\", \"llvm::Function::setParent(llvm::Module*)\"},\n    {\"_ZNK4llvm8Function5hasGCEv\", \"llvm::Function::hasGC() const\"},\n    {\"_ZNK4llvm8Function5getGCEv\", \"llvm::Function::getGC() const\"},\n    {\"_ZN4llvm8Function5setGCEPKc\", \"llvm::Function::setGC(char const*)\"},\n    {\"_ZN4llvm8Function18copyAttributesFromEPKNS_11GlobalValueE\", \"llvm::Function::copyAttributesFrom(llvm::GlobalValue const*)\"},\n    {\"_ZN4llvm9Intrinsic7getNameENS0_2IDEPPKNS_4TypeEj\", \"llvm::Intrinsic::getName(llvm::Intrinsic::ID, llvm::Type const**, unsigned int)\"},\n    {\"_ZN4llvm9Intrinsic7getTypeERNS_11LLVMContextENS0_2IDEPPKNS_4TypeEj\", \"llvm::Intrinsic::getType(llvm::LLVMContext&, llvm::Intrinsic::ID, llvm::Type const**, unsigned int)\"},\n    {\"_ZN4llvm9Intrinsic12isOverloadedENS0_2IDE\", \"llvm::Intrinsic::isOverloaded(llvm::Intrinsic::ID)\"},\n    {\"_ZN4llvm9Intrinsic14getDeclarationEPNS_6ModuleENS0_2IDEPPKNS_4TypeEj\", \"llvm::Intrinsic::getDeclaration(llvm::Module*, llvm::Intrinsic::ID, llvm::Type const**, unsigned int)\"},\n    {\"_ZN4llvm9Intrinsic25getIntrinsicForGCCBuiltinEPKcS2_\", \"llvm::Intrinsic::getIntrinsicForGCCBuiltin(char const*, char const*)\"},\n    {\"_ZNK4llvm8Function15hasAddressTakenEPPKNS_4UserE\", \"llvm::Function::hasAddressTaken(llvm::User const**) const\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::getList(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::getSymTab(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::addNodeToList(llvm::Argument*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::removeNodeFromList(llvm::Argument*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::transferNodesFromList(llvm::ilist_traits<llvm::Argument>&, llvm::ilist_iterator<llvm::Argument>, llvm::ilist_iterator<llvm::Argument>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8ArgumentENS_8FunctionEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Argument, llvm::Function>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::getList(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::getSymTab(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::addNodeToList(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::removeNodeFromList(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::transferNodesFromList(llvm::ilist_traits<llvm::BasicBlock>&, llvm::ilist_iterator<llvm::BasicBlock>, llvm::ilist_iterator<llvm::BasicBlock>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_10BasicBlockENS_8FunctionEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::BasicBlock, llvm::Function>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm6iplistINS_8ArgumentENS_12ilist_traitsIS1_EEE5clearEv\", \"llvm::iplist<llvm::Argument, llvm::ilist_traits<llvm::Argument> >::clear()\"},\n    {\"_ZN4llvm11GlobalValueD2Ev\", \"llvm::GlobalValue::~GlobalValue()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionENS_15PooledStringPtrENS_12DenseMapInfoIS3_EENS5_IS4_EEE5eraseERKS3_\", \"llvm::DenseMap<llvm::Function const*, llvm::PooledStringPtr, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::PooledStringPtr> >::erase(llvm::Function const* const&)\"},\n    {\"_ZNK4llvm11GlobalValue11isNullValueEv\", \"llvm::GlobalValue::isNullValue() const\"},\n    {\"_ZNK4llvm8Function13isDeclarationEv\", \"llvm::Function::isDeclaration() const\"},\n    {\"_ZN4llvm8ArgumentD1Ev\", \"llvm::Argument::~Argument()\"},\n    {\"_ZN4llvm8ArgumentD0Ev\", \"llvm::Argument::~Argument()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionENS_15PooledStringPtrENS_12DenseMapInfoIS3_EENS5_IS4_EEED2Ev\", \"llvm::DenseMap<llvm::Function const*, llvm::PooledStringPtr, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::PooledStringPtr> >::~DenseMap()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionENS_15PooledStringPtrENS_12DenseMapInfoIS3_EENS5_IS4_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::Function const*, llvm::PooledStringPtr, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::PooledStringPtr> >::FindAndConstruct(llvm::Function const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionENS_15PooledStringPtrENS_12DenseMapInfoIS3_EENS5_IS4_EEE16InsertIntoBucketERKS3_RKS4_PSt4pairIS3_S4_E\", \"llvm::DenseMap<llvm::Function const*, llvm::PooledStringPtr, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::PooledStringPtr> >::InsertIntoBucket(llvm::Function const* const&, llvm::PooledStringPtr const&, std::pair<llvm::Function const*, llvm::PooledStringPtr>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8FunctionENS_15PooledStringPtrENS_12DenseMapInfoIS3_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Function const*, llvm::PooledStringPtr, llvm::DenseMapInfo<llvm::Function const*>, llvm::DenseMapInfo<llvm::PooledStringPtr> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14object_creatorINS_3sys12SmartRWMutexILb1EEEEEPvv\", \"void* llvm::object_creator<llvm::sys::SmartRWMutex<true> >()\"},\n    {\"_ZN4llvm14object_deleterINS_3sys12SmartRWMutexILb1EEEE4callEPv\", \"llvm::object_deleter<llvm::sys::SmartRWMutex<true> >::call(void*)\"},\n    {\"_ZN4llvm6iplistINS_10BasicBlockENS_12ilist_traitsIS1_EEE5eraseENS_14ilist_iteratorIS1_EE\", \"llvm::iplist<llvm::BasicBlock, llvm::ilist_traits<llvm::BasicBlock> >::erase(llvm::ilist_iterator<llvm::BasicBlock>)\"},\n    {\"_ZN4llvm11GlobalValueD1Ev\", \"llvm::GlobalValue::~GlobalValue()\"},\n    {\"_ZN4llvm11GlobalValueD0Ev\", \"llvm::GlobalValue::~GlobalValue()\"},\n    {\"_ZN4llvm14GVMaterializerD0Ev\", \"llvm::GVMaterializer::~GVMaterializer()\"},\n    {\"_ZN4llvm14GVMaterializerD1Ev\", \"llvm::GVMaterializer::~GVMaterializer()\"},\n    {\"_ZN4llvm14GVMaterializerD2Ev\", \"llvm::GVMaterializer::~GVMaterializer()\"},\n    {\"_ZNK4llvm11GlobalValue16isMaterializableEv\", \"llvm::GlobalValue::isMaterializable() const\"},\n    {\"_ZNK4llvm11GlobalValue18isDematerializableEv\", \"llvm::GlobalValue::isDematerializable() const\"},\n    {\"_ZN4llvm11GlobalValue11MaterializeEPSs\", \"llvm::GlobalValue::Materialize(std::string*)\"},\n    {\"_ZN4llvm11GlobalValue13DematerializeEv\", \"llvm::GlobalValue::Dematerialize()\"},\n    {\"_ZNK4llvm11GlobalValue23removeDeadConstantUsersEv\", \"llvm::GlobalValue::removeDeadConstantUsers() const\"},\n    {\"_Z25removeDeadUsersOfConstantPKN4llvm8ConstantE\", \"removeDeadUsersOfConstant(llvm::Constant const*)\"},\n    {\"_ZN4llvm11GlobalValue15destroyConstantEv\", \"llvm::GlobalValue::destroyConstant()\"},\n    {\"_ZN4llvm11GlobalValue18copyAttributesFromEPKS0_\", \"llvm::GlobalValue::copyAttributesFrom(llvm::GlobalValue const*)\"},\n    {\"_ZN4llvm11GlobalValue12setAlignmentEj\", \"llvm::GlobalValue::setAlignment(unsigned int)\"},\n    {\"_ZN4llvm14GlobalVariableC1EPKNS_4TypeEbNS_11GlobalValue12LinkageTypesEPNS_8ConstantERKNS_5TwineEbj\", \"llvm::GlobalVariable::GlobalVariable(llvm::Type const*, bool, llvm::GlobalValue::LinkageTypes, llvm::Constant*, llvm::Twine const&, bool, unsigned int)\"},\n    {\"_ZN4llvm14GlobalVariableC2EPKNS_4TypeEbNS_11GlobalValue12LinkageTypesEPNS_8ConstantERKNS_5TwineEbj\", \"llvm::GlobalVariable::GlobalVariable(llvm::Type const*, bool, llvm::GlobalValue::LinkageTypes, llvm::Constant*, llvm::Twine const&, bool, unsigned int)\"},\n    {\"_ZN4llvm14GlobalVariableC1ERNS_6ModuleEPKNS_4TypeEbNS_11GlobalValue12LinkageTypesEPNS_8ConstantERKNS_5TwineEPS0_bj\", \"llvm::GlobalVariable::GlobalVariable(llvm::Module&, llvm::Type const*, bool, llvm::GlobalValue::LinkageTypes, llvm::Constant*, llvm::Twine const&, llvm::GlobalVariable*, bool, unsigned int)\"},\n    {\"_ZN4llvm14GlobalVariableC2ERNS_6ModuleEPKNS_4TypeEbNS_11GlobalValue12LinkageTypesEPNS_8ConstantERKNS_5TwineEPS0_bj\", \"llvm::GlobalVariable::GlobalVariable(llvm::Module&, llvm::Type const*, bool, llvm::GlobalValue::LinkageTypes, llvm::Constant*, llvm::Twine const&, llvm::GlobalVariable*, bool, unsigned int)\"},\n    {\"_ZN4llvm14GlobalVariable9setParentEPNS_6ModuleE\", \"llvm::GlobalVariable::setParent(llvm::Module*)\"},\n    {\"_ZN4llvm14GlobalVariable16removeFromParentEv\", \"llvm::GlobalVariable::removeFromParent()\"},\n    {\"_ZN4llvm14GlobalVariable15eraseFromParentEv\", \"llvm::GlobalVariable::eraseFromParent()\"},\n    {\"_ZN4llvm14GlobalVariable27replaceUsesOfWithOnConstantEPNS_5ValueES2_PNS_3UseE\", \"llvm::GlobalVariable::replaceUsesOfWithOnConstant(llvm::Value*, llvm::Value*, llvm::Use*)\"},\n    {\"_ZN4llvm14GlobalVariable14setInitializerEPNS_8ConstantE\", \"llvm::GlobalVariable::setInitializer(llvm::Constant*)\"},\n    {\"_ZN4llvm14GlobalVariable18copyAttributesFromEPKNS_11GlobalValueE\", \"llvm::GlobalVariable::copyAttributesFrom(llvm::GlobalValue const*)\"},\n    {\"_ZN4llvm11GlobalAliasC1EPKNS_4TypeENS_11GlobalValue12LinkageTypesERKNS_5TwineEPNS_8ConstantEPNS_6ModuleE\", \"llvm::GlobalAlias::GlobalAlias(llvm::Type const*, llvm::GlobalValue::LinkageTypes, llvm::Twine const&, llvm::Constant*, llvm::Module*)\"},\n    {\"_ZN4llvm11GlobalAliasC2EPKNS_4TypeENS_11GlobalValue12LinkageTypesERKNS_5TwineEPNS_8ConstantEPNS_6ModuleE\", \"llvm::GlobalAlias::GlobalAlias(llvm::Type const*, llvm::GlobalValue::LinkageTypes, llvm::Twine const&, llvm::Constant*, llvm::Module*)\"},\n    {\"_ZN4llvm11GlobalAlias9setParentEPNS_6ModuleE\", \"llvm::GlobalAlias::setParent(llvm::Module*)\"},\n    {\"_ZN4llvm11GlobalAlias16removeFromParentEv\", \"llvm::GlobalAlias::removeFromParent()\"},\n    {\"_ZN4llvm11GlobalAlias15eraseFromParentEv\", \"llvm::GlobalAlias::eraseFromParent()\"},\n    {\"_ZNK4llvm11GlobalAlias13isDeclarationEv\", \"llvm::GlobalAlias::isDeclaration() const\"},\n    {\"_ZNK4llvm11GlobalAlias16getAliasedGlobalEv\", \"llvm::GlobalAlias::getAliasedGlobal() const\"},\n    {\"_ZN4llvm11GlobalAlias10setAliaseeEPNS_8ConstantE\", \"llvm::GlobalAlias::setAliasee(llvm::Constant*)\"},\n    {\"_ZNK4llvm11GlobalAlias20resolveAliasedGlobalEb\", \"llvm::GlobalAlias::resolveAliasedGlobal(bool) const\"},\n    {\"_ZN4llvm6iplistINS_14GlobalVariableENS_12ilist_traitsIS1_EEE9push_backEPS1_\", \"llvm::iplist<llvm::GlobalVariable, llvm::ilist_traits<llvm::GlobalVariable> >::push_back(llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm6iplistINS_11GlobalAliasENS_12ilist_traitsIS1_EEE9push_backEPS1_\", \"llvm::iplist<llvm::GlobalAlias, llvm::ilist_traits<llvm::GlobalAlias> >::push_back(llvm::GlobalAlias*)\"},\n    {\"_ZN4llvm14GlobalVariableD1Ev\", \"llvm::GlobalVariable::~GlobalVariable()\"},\n    {\"_ZN4llvm14GlobalVariableD0Ev\", \"llvm::GlobalVariable::~GlobalVariable()\"},\n    {\"_ZNK4llvm14GlobalVariable13isDeclarationEv\", \"llvm::GlobalVariable::isDeclaration() const\"},\n    {\"_ZN4llvm11GlobalAliasD1Ev\", \"llvm::GlobalAlias::~GlobalAlias()\"},\n    {\"_ZN4llvm11GlobalAliasD0Ev\", \"llvm::GlobalAlias::~GlobalAlias()\"},\n    {\"_ZN4llvm13IRBuilderBase18CreateGlobalStringEPKcRKNS_5TwineE\", \"llvm::IRBuilderBase::CreateGlobalString(char const*, llvm::Twine const&)\"},\n    {\"_ZNK4llvm13IRBuilderBase28getCurrentFunctionReturnTypeEv\", \"llvm::IRBuilderBase::getCurrentFunctionReturnType() const\"},\n    {\"_ZN4llvm13IRBuilderBase21getCastedInt8PtrValueEPNS_5ValueE\", \"llvm::IRBuilderBase::getCastedInt8PtrValue(llvm::Value*)\"},\n    {\"_ZN4llvm13IRBuilderBase12CreateMemSetEPNS_5ValueES2_S2_jbPNS_6MDNodeE\", \"llvm::IRBuilderBase::CreateMemSet(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int, bool, llvm::MDNode*)\"},\n    {\"_Z16createCallHelperPN4llvm5ValueEPKS1_jPNS_13IRBuilderBaseE\", \"createCallHelper(llvm::Value*, llvm::Value* const*, unsigned int, llvm::IRBuilderBase*)\"},\n    {\"_ZN4llvm13IRBuilderBase12CreateMemCpyEPNS_5ValueES2_S2_jbPNS_6MDNodeE\", \"llvm::IRBuilderBase::CreateMemCpy(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int, bool, llvm::MDNode*)\"},\n    {\"_ZN4llvm13IRBuilderBase13CreateMemMoveEPNS_5ValueES2_S2_jbPNS_6MDNodeE\", \"llvm::IRBuilderBase::CreateMemMove(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int, bool, llvm::MDNode*)\"},\n    {\"_ZN4llvm9InlineAsmD0Ev\", \"llvm::InlineAsm::~InlineAsm()\"},\n    {\"_ZN4llvm9InlineAsmD1Ev\", \"llvm::InlineAsm::~InlineAsm()\"},\n    {\"_ZN4llvm9InlineAsmD2Ev\", \"llvm::InlineAsm::~InlineAsm()\"},\n    {\"_ZN4llvm9InlineAsm3getEPKNS_12FunctionTypeENS_9StringRefES4_bb\", \"llvm::InlineAsm::get(llvm::FunctionType const*, llvm::StringRef, llvm::StringRef, bool, bool)\"},\n    {\"_ZN4llvm9InlineAsmC1EPKNS_11PointerTypeERKSsS5_bb\", \"llvm::InlineAsm::InlineAsm(llvm::PointerType const*, std::string const&, std::string const&, bool, bool)\"},\n    {\"_ZN4llvm9InlineAsmC2EPKNS_11PointerTypeERKSsS5_bb\", \"llvm::InlineAsm::InlineAsm(llvm::PointerType const*, std::string const&, std::string const&, bool, bool)\"},\n    {\"_ZN4llvm9InlineAsm15destroyConstantEv\", \"llvm::InlineAsm::destroyConstant()\"},\n    {\"_ZNK4llvm9InlineAsm15getFunctionTypeEv\", \"llvm::InlineAsm::getFunctionType() const\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfoC1Ev\", \"llvm::InlineAsm::ConstraintInfo::ConstraintInfo()\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfoC2Ev\", \"llvm::InlineAsm::ConstraintInfo::ConstraintInfo()\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfoC1ERKS1_\", \"llvm::InlineAsm::ConstraintInfo::ConstraintInfo(llvm::InlineAsm::ConstraintInfo const&)\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfoC2ERKS1_\", \"llvm::InlineAsm::ConstraintInfo::ConstraintInfo(llvm::InlineAsm::ConstraintInfo const&)\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfo5ParseENS_9StringRefERSt6vectorIS1_SaIS1_EE\", \"llvm::InlineAsm::ConstraintInfo::Parse(llvm::StringRef, std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >&)\"},\n    {\"_ZN4llvm9InlineAsm14ConstraintInfo17selectAlternativeEj\", \"llvm::InlineAsm::ConstraintInfo::selectAlternative(unsigned int)\"},\n    {\"_ZN4llvm9InlineAsm16ParseConstraintsENS_9StringRefE\", \"llvm::InlineAsm::ParseConstraints(llvm::StringRef)\"},\n    {\"_ZN4llvm9InlineAsm6VerifyEPKNS_12FunctionTypeENS_9StringRefE\", \"llvm::InlineAsm::Verify(llvm::FunctionType const*, llvm::StringRef)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE11getOrCreateEPKS2_RKS1_\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::getOrCreate(llvm::PointerType const*, llvm::InlineAsmKeyType const&)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm14ConstraintInfoESaIS2_EE9push_backERKS2_\", \"std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >::push_back(llvm::InlineAsm::ConstraintInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm14ConstraintInfoESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::InlineAsm::ConstraintInfo*, std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> > >, llvm::InlineAsm::ConstraintInfo const&)\"},\n    {\"_ZNSt15__copy_backwardILb0ESt26random_access_iterator_tagE8__copy_bIPN4llvm9InlineAsm14ConstraintInfoES6_EET0_T_S8_S7_\", \"llvm::InlineAsm::ConstraintInfo* std::__copy_backward<false, std::random_access_iterator_tag>::__copy_b<llvm::InlineAsm::ConstraintInfo*, llvm::InlineAsm::ConstraintInfo*>(llvm::InlineAsm::ConstraintInfo*, llvm::InlineAsm::ConstraintInfo*, llvm::InlineAsm::ConstraintInfo*)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm14ConstraintInfoESaIS2_EE15_M_erase_at_endEPS2_\", \"std::vector<llvm::InlineAsm::ConstraintInfo, std::allocator<llvm::InlineAsm::ConstraintInfo> >::_M_erase_at_end(llvm::InlineAsm::ConstraintInfo*)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm17SubConstraintInfoESaIS2_EE15_M_erase_at_endEPS2_\", \"std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> >::_M_erase_at_end(llvm::InlineAsm::SubConstraintInfo*)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm17SubConstraintInfoESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::InlineAsm::SubConstraintInfo*, std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> > >, unsigned long, llvm::InlineAsm::SubConstraintInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm9InlineAsm17SubConstraintInfoESaIS2_EEC2ERKS4_\", \"std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> >::vector(std::vector<llvm::InlineAsm::SubConstraintInfo, std::allocator<llvm::InlineAsm::SubConstraintInfo> > const&)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE19FindExistingElementEPS3_\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::FindExistingElement(llvm::InlineAsm*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE6CreateEPKS2_RKS1_St17_Rb_tree_iteratorISt4pairIKSA_IS6_S1_EPS3_EE\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::Create(llvm::PointerType const*, llvm::InlineAsmKeyType const&, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeENS1_16InlineAsmKeyTypeEES0_IKS6_PNS1_9InlineAsmEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE16_M_insert_uniqueESt17_Rb_tree_iteratorISA_ERKSA_\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType>, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::less<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> const&)\"},\n    {\"_ZN4llvm11InstructionC1EPKNS_4TypeEjPNS_3UseEjPS0_\", \"llvm::Instruction::Instruction(llvm::Type const*, unsigned int, llvm::Use*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm11InstructionC2EPKNS_4TypeEjPNS_3UseEjPS0_\", \"llvm::Instruction::Instruction(llvm::Type const*, unsigned int, llvm::Use*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm11InstructionC1EPKNS_4TypeEjPNS_3UseEjPNS_10BasicBlockE\", \"llvm::Instruction::Instruction(llvm::Type const*, unsigned int, llvm::Use*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11InstructionC2EPKNS_4TypeEjPNS_3UseEjPNS_10BasicBlockE\", \"llvm::Instruction::Instruction(llvm::Type const*, unsigned int, llvm::Use*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11InstructionD0Ev\", \"llvm::Instruction::~Instruction()\"},\n    {\"_ZN4llvm11InstructionD1Ev\", \"llvm::Instruction::~Instruction()\"},\n    {\"_ZN4llvm11InstructionD2Ev\", \"llvm::Instruction::~Instruction()\"},\n    {\"_ZN4llvm11Instruction9setParentEPNS_10BasicBlockE\", \"llvm::Instruction::setParent(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11Instruction16removeFromParentEv\", \"llvm::Instruction::removeFromParent()\"},\n    {\"_ZN4llvm11Instruction15eraseFromParentEv\", \"llvm::Instruction::eraseFromParent()\"},\n    {\"_ZN4llvm11Instruction12insertBeforeEPS0_\", \"llvm::Instruction::insertBefore(llvm::Instruction*)\"},\n    {\"_ZN4llvm11Instruction11insertAfterEPS0_\", \"llvm::Instruction::insertAfter(llvm::Instruction*)\"},\n    {\"_ZN4llvm11Instruction10moveBeforeEPS0_\", \"llvm::Instruction::moveBefore(llvm::Instruction*)\"},\n    {\"_ZN4llvm11Instruction13getOpcodeNameEj\", \"llvm::Instruction::getOpcodeName(unsigned int)\"},\n    {\"_ZNK4llvm11Instruction13isIdenticalToEPKS0_\", \"llvm::Instruction::isIdenticalTo(llvm::Instruction const*) const\"},\n    {\"_ZNK4llvm11Instruction24isIdenticalToWhenDefinedEPKS0_\", \"llvm::Instruction::isIdenticalToWhenDefined(llvm::Instruction const*) const\"},\n    {\"_ZNK4llvm11Instruction17isSameOperationAsEPKS0_\", \"llvm::Instruction::isSameOperationAs(llvm::Instruction const*) const\"},\n    {\"_ZNK4llvm11Instruction20isUsedOutsideOfBlockEPKNS_10BasicBlockE\", \"llvm::Instruction::isUsedOutsideOfBlock(llvm::BasicBlock const*) const\"},\n    {\"_ZNK4llvm11Instruction17mayReadFromMemoryEv\", \"llvm::Instruction::mayReadFromMemory() const\"},\n    {\"_ZNK4llvm11Instruction16mayWriteToMemoryEv\", \"llvm::Instruction::mayWriteToMemory() const\"},\n    {\"_ZNK4llvm11Instruction8mayThrowEv\", \"llvm::Instruction::mayThrow() const\"},\n    {\"_ZN4llvm11Instruction13isAssociativeEj\", \"llvm::Instruction::isAssociative(unsigned int)\"},\n    {\"_ZN4llvm11Instruction13isCommutativeEj\", \"llvm::Instruction::isCommutative(unsigned int)\"},\n    {\"_ZNK4llvm11Instruction28isSafeToSpeculativelyExecuteEv\", \"llvm::Instruction::isSafeToSpeculativelyExecute() const\"},\n    {\"_ZNK4llvm11Instruction5cloneEv\", \"llvm::Instruction::clone() const\"},\n    {\"_ZNK4llvm8CallSite9getCalleeEv\", \"llvm::CallSite::getCallee() const\"},\n    {\"_ZN4llvm14TerminatorInstD0Ev\", \"llvm::TerminatorInst::~TerminatorInst()\"},\n    {\"_ZN4llvm14TerminatorInstD1Ev\", \"llvm::TerminatorInst::~TerminatorInst()\"},\n    {\"_ZN4llvm14TerminatorInstD2Ev\", \"llvm::TerminatorInst::~TerminatorInst()\"},\n    {\"_ZN4llvm16UnaryInstructionD0Ev\", \"llvm::UnaryInstruction::~UnaryInstruction()\"},\n    {\"_ZN4llvm16UnaryInstructionD1Ev\", \"llvm::UnaryInstruction::~UnaryInstruction()\"},\n    {\"_ZN4llvm16UnaryInstructionD2Ev\", \"llvm::UnaryInstruction::~UnaryInstruction()\"},\n    {\"_ZN4llvm10SelectInst18areInvalidOperandsEPNS_5ValueES2_S2_\", \"llvm::SelectInst::areInvalidOperands(llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm7PHINodeC1ERKS0_\", \"llvm::PHINode::PHINode(llvm::PHINode const&)\"},\n    {\"_ZN4llvm7PHINodeC2ERKS0_\", \"llvm::PHINode::PHINode(llvm::PHINode const&)\"},\n    {\"_ZN4llvm7PHINodeD0Ev\", \"llvm::PHINode::~PHINode()\"},\n    {\"_ZN4llvm7PHINodeD1Ev\", \"llvm::PHINode::~PHINode()\"},\n    {\"_ZN4llvm7PHINodeD2Ev\", \"llvm::PHINode::~PHINode()\"},\n    {\"_ZN4llvm7PHINode19removeIncomingValueEjb\", \"llvm::PHINode::removeIncomingValue(unsigned int, bool)\"},\n    {\"_ZN4llvm7PHINode14resizeOperandsEj\", \"llvm::PHINode::resizeOperands(unsigned int)\"},\n    {\"_ZNK4llvm7PHINode16hasConstantValueEv\", \"llvm::PHINode::hasConstantValue() const\"},\n    {\"_ZN4llvm8CallInstD0Ev\", \"llvm::CallInst::~CallInst()\"},\n    {\"_ZN4llvm8CallInstD1Ev\", \"llvm::CallInst::~CallInst()\"},\n    {\"_ZN4llvm8CallInstD2Ev\", \"llvm::CallInst::~CallInst()\"},\n    {\"_ZN4llvm8CallInst4initEPNS_5ValueEPKS2_j\", \"llvm::CallInst::init(llvm::Value*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm8CallInst4initEPNS_5ValueES2_S2_\", \"llvm::CallInst::init(llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm8CallInst4initEPNS_5ValueES2_\", \"llvm::CallInst::init(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm8CallInst4initEPNS_5ValueE\", \"llvm::CallInst::init(llvm::Value*)\"},\n    {\"_ZN4llvm8CallInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CallInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CallInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInstC1EPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CallInstC2EPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CallInstC1EPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInstC2EPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CallInst::CallInst(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInstC1ERKS0_\", \"llvm::CallInst::CallInst(llvm::CallInst const&)\"},\n    {\"_ZN4llvm8CallInstC2ERKS0_\", \"llvm::CallInst::CallInst(llvm::CallInst const&)\"},\n    {\"_ZN4llvm8CallInst12addAttributeEjj\", \"llvm::CallInst::addAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm8CallInst15removeAttributeEjj\", \"llvm::CallInst::removeAttribute(unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm8CallInst12paramHasAttrEjj\", \"llvm::CallInst::paramHasAttr(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm8CallInst12CreateMallocEPNS_11InstructionEPKNS_4TypeES5_PNS_5ValueES7_PNS_8FunctionERKNS_5TwineE\", \"llvm::CallInst::CreateMalloc(llvm::Instruction*, llvm::Type const*, llvm::Type const*, llvm::Value*, llvm::Value*, llvm::Function*, llvm::Twine const&)\"},\n    {\"_Z12createMallocPN4llvm11InstructionEPNS_10BasicBlockEPKNS_4TypeES6_PNS_5ValueES8_PNS_8FunctionERKNS_5TwineE\", \"createMalloc(llvm::Instruction*, llvm::BasicBlock*, llvm::Type const*, llvm::Type const*, llvm::Value*, llvm::Value*, llvm::Function*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8CallInst12CreateMallocEPNS_10BasicBlockEPKNS_4TypeES5_PNS_5ValueES7_PNS_8FunctionERKNS_5TwineE\", \"llvm::CallInst::CreateMalloc(llvm::BasicBlock*, llvm::Type const*, llvm::Type const*, llvm::Value*, llvm::Value*, llvm::Function*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8CallInst10CreateFreeEPNS_5ValueEPNS_11InstructionE\", \"llvm::CallInst::CreateFree(llvm::Value*, llvm::Instruction*)\"},\n    {\"_Z10createFreePN4llvm5ValueEPNS_11InstructionEPNS_10BasicBlockE\", \"createFree(llvm::Value*, llvm::Instruction*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CallInst10CreateFreeEPNS_5ValueEPNS_10BasicBlockE\", \"llvm::CallInst::CreateFree(llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10InvokeInst4initEPNS_5ValueEPNS_10BasicBlockES4_PKS2_j\", \"llvm::InvokeInst::init(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm10InvokeInstC1ERKS0_\", \"llvm::InvokeInst::InvokeInst(llvm::InvokeInst const&)\"},\n    {\"_ZN4llvm10InvokeInstC2ERKS0_\", \"llvm::InvokeInst::InvokeInst(llvm::InvokeInst const&)\"},\n    {\"_ZNK4llvm10InvokeInst13getSuccessorVEj\", \"llvm::InvokeInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZNK4llvm10InvokeInst17getNumSuccessorsVEv\", \"llvm::InvokeInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm10InvokeInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::InvokeInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm10InvokeInst12paramHasAttrEjj\", \"llvm::InvokeInst::paramHasAttr(unsigned int, unsigned int) const\"},\n    {\"_ZN4llvm10InvokeInst12addAttributeEjj\", \"llvm::InvokeInst::addAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10InvokeInst15removeAttributeEjj\", \"llvm::InvokeInst::removeAttribute(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10ReturnInstC1ERKS0_\", \"llvm::ReturnInst::ReturnInst(llvm::ReturnInst const&)\"},\n    {\"_ZN4llvm10ReturnInstC2ERKS0_\", \"llvm::ReturnInst::ReturnInst(llvm::ReturnInst const&)\"},\n    {\"_ZN4llvm10ReturnInstC1ERNS_11LLVMContextEPNS_5ValueEPNS_11InstructionE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10ReturnInstC2ERNS_11LLVMContextEPNS_5ValueEPNS_11InstructionE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10ReturnInstC1ERNS_11LLVMContextEPNS_5ValueEPNS_10BasicBlockE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10ReturnInstC2ERNS_11LLVMContextEPNS_5ValueEPNS_10BasicBlockE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10ReturnInstC1ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10ReturnInstC2ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm10ReturnInst17getNumSuccessorsVEv\", \"llvm::ReturnInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm10ReturnInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::ReturnInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm10ReturnInst13getSuccessorVEj\", \"llvm::ReturnInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZN4llvm10ReturnInstD0Ev\", \"llvm::ReturnInst::~ReturnInst()\"},\n    {\"_ZN4llvm10ReturnInstD1Ev\", \"llvm::ReturnInst::~ReturnInst()\"},\n    {\"_ZN4llvm10ReturnInstD2Ev\", \"llvm::ReturnInst::~ReturnInst()\"},\n    {\"_ZN4llvm10UnwindInstC1ERNS_11LLVMContextEPNS_11InstructionE\", \"llvm::UnwindInst::UnwindInst(llvm::LLVMContext&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10UnwindInstC2ERNS_11LLVMContextEPNS_11InstructionE\", \"llvm::UnwindInst::UnwindInst(llvm::LLVMContext&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10UnwindInstC1ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::UnwindInst::UnwindInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10UnwindInstC2ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::UnwindInst::UnwindInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm10UnwindInst17getNumSuccessorsVEv\", \"llvm::UnwindInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm10UnwindInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::UnwindInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm10UnwindInst13getSuccessorVEj\", \"llvm::UnwindInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZN4llvm15UnreachableInstC1ERNS_11LLVMContextEPNS_11InstructionE\", \"llvm::UnreachableInst::UnreachableInst(llvm::LLVMContext&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15UnreachableInstC2ERNS_11LLVMContextEPNS_11InstructionE\", \"llvm::UnreachableInst::UnreachableInst(llvm::LLVMContext&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15UnreachableInstC1ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::UnreachableInst::UnreachableInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15UnreachableInstC2ERNS_11LLVMContextEPNS_10BasicBlockE\", \"llvm::UnreachableInst::UnreachableInst(llvm::LLVMContext&, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm15UnreachableInst17getNumSuccessorsVEv\", \"llvm::UnreachableInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm15UnreachableInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::UnreachableInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm15UnreachableInst13getSuccessorVEj\", \"llvm::UnreachableInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZN4llvm10BranchInst8AssertOKEv\", \"llvm::BranchInst::AssertOK()\"},\n    {\"_ZN4llvm10BranchInstC1EPNS_10BasicBlockEPNS_11InstructionE\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10BranchInstC2EPNS_10BasicBlockEPNS_11InstructionE\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10BranchInstC1EPNS_10BasicBlockES2_PNS_5ValueEPNS_11InstructionE\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10BranchInstC2EPNS_10BasicBlockES2_PNS_5ValueEPNS_11InstructionE\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm10BranchInstC1EPNS_10BasicBlockES2_\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BranchInstC2EPNS_10BasicBlockES2_\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BranchInstC1EPNS_10BasicBlockES2_PNS_5ValueES2_\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BranchInstC2EPNS_10BasicBlockES2_PNS_5ValueES2_\", \"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10BranchInstC1ERKS0_\", \"llvm::BranchInst::BranchInst(llvm::BranchInst const&)\"},\n    {\"_ZN4llvm10BranchInstC2ERKS0_\", \"llvm::BranchInst::BranchInst(llvm::BranchInst const&)\"},\n    {\"_ZNK4llvm10BranchInst13getSuccessorVEj\", \"llvm::BranchInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZNK4llvm10BranchInst17getNumSuccessorsVEv\", \"llvm::BranchInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm10BranchInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::BranchInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInst12setAlignmentEj\", \"llvm::AllocaInst::setAlignment(unsigned int)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeEPNS_5ValueEjRKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeEPNS_5ValueEjRKNS_5TwineEPNS_11InstructionE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10AllocaInstC1EPKNS_4TypeEPNS_5ValueEjRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstC2EPKNS_4TypeEPNS_5ValueEjRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::AllocaInst::AllocaInst(llvm::Type const*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10AllocaInstD0Ev\", \"llvm::AllocaInst::~AllocaInst()\"},\n    {\"_ZN4llvm10AllocaInstD1Ev\", \"llvm::AllocaInst::~AllocaInst()\"},\n    {\"_ZN4llvm10AllocaInstD2Ev\", \"llvm::AllocaInst::~AllocaInst()\"},\n    {\"_ZNK4llvm10AllocaInst17isArrayAllocationEv\", \"llvm::AllocaInst::isArrayAllocation() const\"},\n    {\"_ZNK4llvm10AllocaInst16getAllocatedTypeEv\", \"llvm::AllocaInst::getAllocatedType() const\"},\n    {\"_ZNK4llvm10AllocaInst14isStaticAllocaEv\", \"llvm::AllocaInst::isStaticAlloca() const\"},\n    {\"_ZN4llvm8LoadInst8AssertOKEv\", \"llvm::LoadInst::AssertOK()\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInst12setAlignmentEj\", \"llvm::LoadInst::setAlignment(unsigned int)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEbPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEbPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEbjPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEbjPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEbjPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEbjPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueERKNS_5TwineEbPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueERKNS_5TwineEbPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, llvm::Twine const&, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueEPKcPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueEPKcPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueEPKcPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueEPKcPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueEPKcbPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueEPKcbPNS_11InstructionE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm8LoadInstC1EPNS_5ValueEPKcbPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8LoadInstC2EPNS_5ValueEPKcbPNS_10BasicBlockE\", \"llvm::LoadInst::LoadInst(llvm::Value*, char const*, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInst8AssertOKEv\", \"llvm::StoreInst::AssertOK()\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_PNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_PNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInst12setAlignmentEj\", \"llvm::StoreInst::setAlignment(unsigned int)\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_PNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_PNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_bPNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_bPNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_bjPNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_bjPNS_11InstructionE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_bjPNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_bjPNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInstC1EPNS_5ValueES2_bPNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9StoreInstC2EPNS_5ValueES2_bPNS_10BasicBlockE\", \"llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17GetElementPtrInst4initEPNS_5ValueEPKS2_jRKNS_5TwineE\", \"llvm::GetElementPtrInst::init(llvm::Value*, llvm::Value* const*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm17GetElementPtrInst4initEPNS_5ValueES2_RKNS_5TwineE\", \"llvm::GetElementPtrInst::init(llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm17GetElementPtrInstC1ERKS0_\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::GetElementPtrInst const&)\"},\n    {\"_ZN4llvm17GetElementPtrInstC2ERKS0_\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::GetElementPtrInst const&)\"},\n    {\"_ZN4llvm17GetElementPtrInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17GetElementPtrInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17GetElementPtrInst14getIndexedTypeEPKNS_4TypeEPNS_5ValueE\", \"llvm::GetElementPtrInst::getIndexedType(llvm::Type const*, llvm::Value*)\"},\n    {\"_ZN4llvm17GetElementPtrInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17GetElementPtrInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::GetElementPtrInst::GetElementPtrInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17GetElementPtrInst14getIndexedTypeEPKNS_4TypeEPKPNS_5ValueEj\", \"llvm::GetElementPtrInst::getIndexedType(llvm::Type const*, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm17GetElementPtrInst14getIndexedTypeEPKNS_4TypeEPKPNS_8ConstantEj\", \"llvm::GetElementPtrInst::getIndexedType(llvm::Type const*, llvm::Constant* const*, unsigned int)\"},\n    {\"_ZN4llvm17GetElementPtrInst14getIndexedTypeEPKNS_4TypeEPKyj\", \"llvm::GetElementPtrInst::getIndexedType(llvm::Type const*, unsigned long long const*, unsigned int)\"},\n    {\"_ZNK4llvm17GetElementPtrInst17hasAllZeroIndicesEv\", \"llvm::GetElementPtrInst::hasAllZeroIndices() const\"},\n    {\"_ZNK4llvm17GetElementPtrInst21hasAllConstantIndicesEv\", \"llvm::GetElementPtrInst::hasAllConstantIndices() const\"},\n    {\"_ZN4llvm17GetElementPtrInst13setIsInBoundsEb\", \"llvm::GetElementPtrInst::setIsInBounds(bool)\"},\n    {\"_ZNK4llvm17GetElementPtrInst10isInBoundsEv\", \"llvm::GetElementPtrInst::isInBounds() const\"},\n    {\"_ZN4llvm18ExtractElementInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm18ExtractElementInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm18ExtractElementInstC1EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm18ExtractElementInstC2EPNS_5ValueES2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ExtractElementInst::ExtractElementInst(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm18ExtractElementInst15isValidOperandsEPKNS_5ValueES3_\", \"llvm::ExtractElementInst::isValidOperands(llvm::Value const*, llvm::Value const*)\"},\n    {\"_ZN4llvm17InsertElementInstC1EPNS_5ValueES2_S2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17InsertElementInstC2EPNS_5ValueES2_S2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17InsertElementInstC1EPNS_5ValueES2_S2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17InsertElementInstC2EPNS_5ValueES2_S2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17InsertElementInst15isValidOperandsEPKNS_5ValueES3_S3_\", \"llvm::InsertElementInst::isValidOperands(llvm::Value const*, llvm::Value const*, llvm::Value const*)\"},\n    {\"_ZN4llvm17ShuffleVectorInstC1EPNS_5ValueES2_S2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ShuffleVectorInst::ShuffleVectorInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17ShuffleVectorInstC2EPNS_5ValueES2_S2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::ShuffleVectorInst::ShuffleVectorInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm17ShuffleVectorInstC1EPNS_5ValueES2_S2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ShuffleVectorInst::ShuffleVectorInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17ShuffleVectorInstC2EPNS_5ValueES2_S2_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ShuffleVectorInst::ShuffleVectorInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17ShuffleVectorInst15isValidOperandsEPKNS_5ValueES3_S3_\", \"llvm::ShuffleVectorInst::isValidOperands(llvm::Value const*, llvm::Value const*, llvm::Value const*)\"},\n    {\"_ZNK4llvm17ShuffleVectorInst12getMaskValueEj\", \"llvm::ShuffleVectorInst::getMaskValue(unsigned int) const\"},\n    {\"_ZN4llvm15InsertValueInst4initEPNS_5ValueES2_PKjjRKNS_5TwineE\", \"llvm::InsertValueInst::init(llvm::Value*, llvm::Value*, unsigned int const*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm15InsertValueInst4initEPNS_5ValueES2_jRKNS_5TwineE\", \"llvm::InsertValueInst::init(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm15InsertValueInstC1ERKS0_\", \"llvm::InsertValueInst::InsertValueInst(llvm::InsertValueInst const&)\"},\n    {\"_ZN4llvm15InsertValueInstC2ERKS0_\", \"llvm::InsertValueInst::InsertValueInst(llvm::InsertValueInst const&)\"},\n    {\"_ZN4llvm15InsertValueInstC1EPNS_5ValueES2_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertValueInst::InsertValueInst(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15InsertValueInstC2EPNS_5ValueES2_jRKNS_5TwineEPNS_11InstructionE\", \"llvm::InsertValueInst::InsertValueInst(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm15InsertValueInstC1EPNS_5ValueES2_jRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::InsertValueInst::InsertValueInst(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm15InsertValueInstC2EPNS_5ValueES2_jRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::InsertValueInst::InsertValueInst(llvm::Value*, llvm::Value*, unsigned int, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm16ExtractValueInst4initEPKjjRKNS_5TwineE\", \"llvm::ExtractValueInst::init(unsigned int const*, unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm16ExtractValueInst4initEjRKNS_5TwineE\", \"llvm::ExtractValueInst::init(unsigned int, llvm::Twine const&)\"},\n    {\"_ZN4llvm16ExtractValueInstC1ERKS0_\", \"llvm::ExtractValueInst::ExtractValueInst(llvm::ExtractValueInst const&)\"},\n    {\"_ZN4llvm16ExtractValueInstC2ERKS0_\", \"llvm::ExtractValueInst::ExtractValueInst(llvm::ExtractValueInst const&)\"},\n    {\"_ZN4llvm16ExtractValueInst14getIndexedTypeEPKNS_4TypeEPKjj\", \"llvm::ExtractValueInst::getIndexedType(llvm::Type const*, unsigned int const*, unsigned int)\"},\n    {\"_ZN4llvm16ExtractValueInst14getIndexedTypeEPKNS_4TypeEj\", \"llvm::ExtractValueInst::getIndexedType(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm14BinaryOperatorC1ENS_11Instruction9BinaryOpsEPNS_5ValueES4_PKNS_4TypeERKNS_5TwineEPS1_\", \"llvm::BinaryOperator::BinaryOperator(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperatorC2ENS_11Instruction9BinaryOpsEPNS_5ValueES4_PKNS_4TypeERKNS_5TwineEPS1_\", \"llvm::BinaryOperator::BinaryOperator(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator4initENS_11Instruction9BinaryOpsE\", \"llvm::BinaryOperator::init(llvm::Instruction::BinaryOps)\"},\n    {\"_ZN4llvm14BinaryOperatorC1ENS_11Instruction9BinaryOpsEPNS_5ValueES4_PKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::BinaryOperator(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperatorC2ENS_11Instruction9BinaryOpsEPNS_5ValueES4_PKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::BinaryOperator(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator6CreateENS_11Instruction9BinaryOpsEPNS_5ValueES4_RKNS_5TwineEPS1_\", \"llvm::BinaryOperator::Create(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator6CreateENS_11Instruction9BinaryOpsEPNS_5ValueES4_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::Create(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNegEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::BinaryOperator::CreateNeg(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNegEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::CreateNeg(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator12CreateNSWNegEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::BinaryOperator::CreateNSWNeg(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator12CreateNSWNegEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::CreateNSWNeg(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator12CreateNUWNegEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::BinaryOperator::CreateNUWNeg(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator12CreateNUWNegEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::CreateNUWNeg(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator10CreateFNegEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::BinaryOperator::CreateFNeg(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator10CreateFNegEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::CreateFNeg(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNotEPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::BinaryOperator::CreateNot(llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNotEPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BinaryOperator::CreateNot(llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14BinaryOperator5isNegEPKNS_5ValueE\", \"llvm::BinaryOperator::isNeg(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator6isFNegEPKNS_5ValueE\", \"llvm::BinaryOperator::isFNeg(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator5isNotEPKNS_5ValueE\", \"llvm::BinaryOperator::isNot(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator14getNegArgumentEPNS_5ValueE\", \"llvm::BinaryOperator::getNegArgument(llvm::Value*)\"},\n    {\"_ZN4llvm14BinaryOperator14getNegArgumentEPKNS_5ValueE\", \"llvm::BinaryOperator::getNegArgument(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator15getFNegArgumentEPNS_5ValueE\", \"llvm::BinaryOperator::getFNegArgument(llvm::Value*)\"},\n    {\"_ZN4llvm14BinaryOperator15getFNegArgumentEPKNS_5ValueE\", \"llvm::BinaryOperator::getFNegArgument(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator14getNotArgumentEPNS_5ValueE\", \"llvm::BinaryOperator::getNotArgument(llvm::Value*)\"},\n    {\"_ZN4llvm14BinaryOperator14getNotArgumentEPKNS_5ValueE\", \"llvm::BinaryOperator::getNotArgument(llvm::Value const*)\"},\n    {\"_ZN4llvm14BinaryOperator12swapOperandsEv\", \"llvm::BinaryOperator::swapOperands()\"},\n    {\"_ZN4llvm14BinaryOperator20setHasNoUnsignedWrapEb\", \"llvm::BinaryOperator::setHasNoUnsignedWrap(bool)\"},\n    {\"_ZN4llvm14BinaryOperator18setHasNoSignedWrapEb\", \"llvm::BinaryOperator::setHasNoSignedWrap(bool)\"},\n    {\"_ZN4llvm14BinaryOperator10setIsExactEb\", \"llvm::BinaryOperator::setIsExact(bool)\"},\n    {\"_ZNK4llvm14BinaryOperator17hasNoUnsignedWrapEv\", \"llvm::BinaryOperator::hasNoUnsignedWrap() const\"},\n    {\"_ZNK4llvm14BinaryOperator15hasNoSignedWrapEv\", \"llvm::BinaryOperator::hasNoSignedWrap() const\"},\n    {\"_ZNK4llvm14BinaryOperator7isExactEv\", \"llvm::BinaryOperator::isExact() const\"},\n    {\"_ZNK4llvm8CastInst13isIntegerCastEv\", \"llvm::CastInst::isIntegerCast() const\"},\n    {\"_ZNK4llvm8CastInst14isLosslessCastEv\", \"llvm::CastInst::isLosslessCast() const\"},\n    {\"_ZN4llvm8CastInst10isNoopCastENS_11Instruction7CastOpsEPKNS_4TypeES5_S5_\", \"llvm::CastInst::isNoopCast(llvm::Instruction::CastOps, llvm::Type const*, llvm::Type const*, llvm::Type const*)\"},\n    {\"_ZNK4llvm8CastInst10isNoopCastEPKNS_4TypeE\", \"llvm::CastInst::isNoopCast(llvm::Type const*) const\"},\n    {\"_ZN4llvm8CastInst20isEliminableCastPairENS_11Instruction7CastOpsES2_PKNS_4TypeES5_S5_S5_\", \"llvm::CastInst::isEliminableCastPair(llvm::Instruction::CastOps, llvm::Instruction::CastOps, llvm::Type const*, llvm::Type const*, llvm::Type const*, llvm::Type const*)\"},\n    {\"_ZN4llvm8CastInst6CreateENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPS1_\", \"llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm9TruncInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::TruncInst::TruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8ZExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::ZExtInst::ZExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8SExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::SExtInst::SExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm11FPTruncInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPTruncInst::FPTruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm9FPExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPExtInst::FPExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10UIToFPInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::UIToFPInst::UIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SIToFPInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::SIToFPInst::SIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10FPToUIInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPToUIInst::FPToUIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10FPToSIInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPToSIInst::FPToSIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm12PtrToIntInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::PtrToIntInst::PtrToIntInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm12IntToPtrInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::IntToPtrInst::IntToPtrInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm11BitCastInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::BitCastInst::BitCastInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst6CreateENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9TruncInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::TruncInst::TruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8ZExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ZExtInst::ZExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8SExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::SExtInst::SExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11FPTruncInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPTruncInst::FPTruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9FPExtInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPExtInst::FPExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10UIToFPInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::UIToFPInst::UIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SIToFPInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::SIToFPInst::SIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10FPToUIInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPToUIInst::FPToUIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10FPToSIInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPToSIInst::FPToSIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12PtrToIntInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::PtrToIntInst::PtrToIntInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12IntToPtrInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::IntToPtrInst::IntToPtrInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11BitCastInstC1EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BitCastInst::BitCastInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst19CreateZExtOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreateZExtOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst19CreateZExtOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreateZExtOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst19CreateSExtOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreateSExtOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst19CreateSExtOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreateSExtOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst20CreateTruncOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreateTruncOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst20CreateTruncOrBitCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreateTruncOrBitCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst17CreatePointerCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreatePointerCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst17CreatePointerCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreatePointerCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst17CreateIntegerCastEPNS_5ValueEPKNS_4TypeEbRKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreateIntegerCast(llvm::Value*, llvm::Type const*, bool, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst17CreateIntegerCastEPNS_5ValueEPKNS_4TypeEbRKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreateIntegerCast(llvm::Value*, llvm::Type const*, bool, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst12CreateFPCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CreateFPCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInst12CreateFPCastEPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CreateFPCast(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8CastInst10isCastableEPKNS_4TypeES3_\", \"llvm::CastInst::isCastable(llvm::Type const*, llvm::Type const*)\"},\n    {\"_ZN4llvm8CastInst13getCastOpcodeEPKNS_5ValueEbPKNS_4TypeEb\", \"llvm::CastInst::getCastOpcode(llvm::Value const*, bool, llvm::Type const*, bool)\"},\n    {\"_ZN4llvm8CastInst11castIsValidENS_11Instruction7CastOpsEPNS_5ValueEPKNS_4TypeE\", \"llvm::CastInst::castIsValid(llvm::Instruction::CastOps, llvm::Value*, llvm::Type const*)\"},\n    {\"_ZN4llvm9TruncInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::TruncInst::TruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm9TruncInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::TruncInst::TruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8ZExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::ZExtInst::ZExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8ZExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::ZExtInst::ZExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm8SExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::SExtInst::SExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8SExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::SExtInst::SExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11FPTruncInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPTruncInst::FPTruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm11FPTruncInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPTruncInst::FPTruncInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm9FPExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPExtInst::FPExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm9FPExtInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPExtInst::FPExtInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10UIToFPInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::UIToFPInst::UIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10UIToFPInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::UIToFPInst::UIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SIToFPInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::SIToFPInst::SIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SIToFPInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::SIToFPInst::SIToFPInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10FPToUIInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPToUIInst::FPToUIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10FPToUIInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPToUIInst::FPToUIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10FPToSIInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::FPToSIInst::FPToSIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10FPToSIInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::FPToSIInst::FPToSIInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12PtrToIntInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::PtrToIntInst::PtrToIntInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm12PtrToIntInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::PtrToIntInst::PtrToIntInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm12IntToPtrInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::IntToPtrInst::IntToPtrInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm12IntToPtrInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::IntToPtrInst::IntToPtrInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm11BitCastInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::BitCastInst::BitCastInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm11BitCastInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::BitCastInst::BitCastInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm7CmpInst6AnchorEv\", \"llvm::CmpInst::Anchor() const\"},\n    {\"_ZN4llvm7CmpInstC1EPKNS_4TypeENS_11Instruction8OtherOpsEtPNS_5ValueES7_RKNS_5TwineEPS4_\", \"llvm::CmpInst::CmpInst(llvm::Type const*, llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm7CmpInstC2EPKNS_4TypeENS_11Instruction8OtherOpsEtPNS_5ValueES7_RKNS_5TwineEPS4_\", \"llvm::CmpInst::CmpInst(llvm::Type const*, llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm7CmpInstC1EPKNS_4TypeENS_11Instruction8OtherOpsEtPNS_5ValueES7_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CmpInst::CmpInst(llvm::Type const*, llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm7CmpInstC2EPKNS_4TypeENS_11Instruction8OtherOpsEtPNS_5ValueES7_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CmpInst::CmpInst(llvm::Type const*, llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm7CmpInst6CreateENS_11Instruction8OtherOpsEtPNS_5ValueES4_RKNS_5TwineEPS1_\", \"llvm::CmpInst::Create(llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm7CmpInst6CreateENS_11Instruction8OtherOpsEtPNS_5ValueES4_RKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CmpInst::Create(llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm7CmpInst12swapOperandsEv\", \"llvm::CmpInst::swapOperands()\"},\n    {\"_ZNK4llvm7CmpInst13isCommutativeEv\", \"llvm::CmpInst::isCommutative() const\"},\n    {\"_ZNK4llvm7CmpInst10isEqualityEv\", \"llvm::CmpInst::isEquality() const\"},\n    {\"_ZN4llvm7CmpInst19getInversePredicateENS0_9PredicateE\", \"llvm::CmpInst::getInversePredicate(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm8ICmpInst18getSignedPredicateENS_7CmpInst9PredicateE\", \"llvm::ICmpInst::getSignedPredicate(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm8ICmpInst20getUnsignedPredicateENS_7CmpInst9PredicateE\", \"llvm::ICmpInst::getUnsignedPredicate(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm8ICmpInst17makeConstantRangeENS_7CmpInst9PredicateERKNS_5APIntE\", \"llvm::ICmpInst::makeConstantRange(llvm::CmpInst::Predicate, llvm::APInt const&)\"},\n    {\"_ZN4llvm7CmpInst19getSwappedPredicateENS0_9PredicateE\", \"llvm::CmpInst::getSwappedPredicate(llvm::CmpInst::Predicate)\"},\n    {\"_ZN4llvm7CmpInst10isUnsignedEt\", \"llvm::CmpInst::isUnsigned(unsigned short)\"},\n    {\"_ZN4llvm7CmpInst8isSignedEt\", \"llvm::CmpInst::isSigned(unsigned short)\"},\n    {\"_ZN4llvm7CmpInst9isOrderedEt\", \"llvm::CmpInst::isOrdered(unsigned short)\"},\n    {\"_ZN4llvm7CmpInst11isUnorderedEt\", \"llvm::CmpInst::isUnordered(unsigned short)\"},\n    {\"_ZN4llvm7CmpInst15isTrueWhenEqualEt\", \"llvm::CmpInst::isTrueWhenEqual(unsigned short)\"},\n    {\"_ZN4llvm7CmpInst16isFalseWhenEqualEt\", \"llvm::CmpInst::isFalseWhenEqual(unsigned short)\"},\n    {\"_ZN4llvm10SwitchInst4initEPNS_5ValueEPNS_10BasicBlockEj\", \"llvm::SwitchInst::init(llvm::Value*, llvm::BasicBlock*, unsigned int)\"},\n    {\"_ZN4llvm10SwitchInstC1EPNS_5ValueEPNS_10BasicBlockEjPNS_11InstructionE\", \"llvm::SwitchInst::SwitchInst(llvm::Value*, llvm::BasicBlock*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SwitchInstC2EPNS_5ValueEPNS_10BasicBlockEjPNS_11InstructionE\", \"llvm::SwitchInst::SwitchInst(llvm::Value*, llvm::BasicBlock*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SwitchInstC1EPNS_5ValueEPNS_10BasicBlockEjS4_\", \"llvm::SwitchInst::SwitchInst(llvm::Value*, llvm::BasicBlock*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SwitchInstC2EPNS_5ValueEPNS_10BasicBlockEjS4_\", \"llvm::SwitchInst::SwitchInst(llvm::Value*, llvm::BasicBlock*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SwitchInstC1ERKS0_\", \"llvm::SwitchInst::SwitchInst(llvm::SwitchInst const&)\"},\n    {\"_ZN4llvm10SwitchInstC2ERKS0_\", \"llvm::SwitchInst::SwitchInst(llvm::SwitchInst const&)\"},\n    {\"_ZN4llvm10SwitchInstD0Ev\", \"llvm::SwitchInst::~SwitchInst()\"},\n    {\"_ZN4llvm10SwitchInstD1Ev\", \"llvm::SwitchInst::~SwitchInst()\"},\n    {\"_ZN4llvm10SwitchInstD2Ev\", \"llvm::SwitchInst::~SwitchInst()\"},\n    {\"_ZN4llvm10SwitchInst7addCaseEPNS_11ConstantIntEPNS_10BasicBlockE\", \"llvm::SwitchInst::addCase(llvm::ConstantInt*, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm10SwitchInst14resizeOperandsEj\", \"llvm::SwitchInst::resizeOperands(unsigned int)\"},\n    {\"_ZN4llvm10SwitchInst10removeCaseEj\", \"llvm::SwitchInst::removeCase(unsigned int)\"},\n    {\"_ZNK4llvm10SwitchInst13getSuccessorVEj\", \"llvm::SwitchInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZNK4llvm10SwitchInst17getNumSuccessorsVEv\", \"llvm::SwitchInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm10SwitchInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::SwitchInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14IndirectBrInst4initEPNS_5ValueEj\", \"llvm::IndirectBrInst::init(llvm::Value*, unsigned int)\"},\n    {\"_ZN4llvm14IndirectBrInst14resizeOperandsEj\", \"llvm::IndirectBrInst::resizeOperands(unsigned int)\"},\n    {\"_ZN4llvm14IndirectBrInstC1EPNS_5ValueEjPNS_11InstructionE\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::Value*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm14IndirectBrInstC2EPNS_5ValueEjPNS_11InstructionE\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::Value*, unsigned int, llvm::Instruction*)\"},\n    {\"_ZN4llvm14IndirectBrInstC1EPNS_5ValueEjPNS_10BasicBlockE\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::Value*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14IndirectBrInstC2EPNS_5ValueEjPNS_10BasicBlockE\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::Value*, unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14IndirectBrInstC1ERKS0_\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::IndirectBrInst const&)\"},\n    {\"_ZN4llvm14IndirectBrInstC2ERKS0_\", \"llvm::IndirectBrInst::IndirectBrInst(llvm::IndirectBrInst const&)\"},\n    {\"_ZN4llvm14IndirectBrInstD0Ev\", \"llvm::IndirectBrInst::~IndirectBrInst()\"},\n    {\"_ZN4llvm14IndirectBrInstD1Ev\", \"llvm::IndirectBrInst::~IndirectBrInst()\"},\n    {\"_ZN4llvm14IndirectBrInstD2Ev\", \"llvm::IndirectBrInst::~IndirectBrInst()\"},\n    {\"_ZN4llvm14IndirectBrInst14addDestinationEPNS_10BasicBlockE\", \"llvm::IndirectBrInst::addDestination(llvm::BasicBlock*)\"},\n    {\"_ZN4llvm14IndirectBrInst17removeDestinationEj\", \"llvm::IndirectBrInst::removeDestination(unsigned int)\"},\n    {\"_ZNK4llvm14IndirectBrInst13getSuccessorVEj\", \"llvm::IndirectBrInst::getSuccessorV(unsigned int) const\"},\n    {\"_ZNK4llvm14IndirectBrInst17getNumSuccessorsVEv\", \"llvm::IndirectBrInst::getNumSuccessorsV() const\"},\n    {\"_ZN4llvm14IndirectBrInst13setSuccessorVEjPNS_10BasicBlockE\", \"llvm::IndirectBrInst::setSuccessorV(unsigned int, llvm::BasicBlock*)\"},\n    {\"_ZNK4llvm17GetElementPtrInst10clone_implEv\", \"llvm::GetElementPtrInst::clone_impl() const\"},\n    {\"_ZNK4llvm14BinaryOperator10clone_implEv\", \"llvm::BinaryOperator::clone_impl() const\"},\n    {\"_ZNK4llvm8FCmpInst10clone_implEv\", \"llvm::FCmpInst::clone_impl() const\"},\n    {\"_ZNK4llvm8ICmpInst10clone_implEv\", \"llvm::ICmpInst::clone_impl() const\"},\n    {\"_ZNK4llvm16ExtractValueInst10clone_implEv\", \"llvm::ExtractValueInst::clone_impl() const\"},\n    {\"_ZNK4llvm15InsertValueInst10clone_implEv\", \"llvm::InsertValueInst::clone_impl() const\"},\n    {\"_ZNK4llvm10AllocaInst10clone_implEv\", \"llvm::AllocaInst::clone_impl() const\"},\n    {\"_ZNK4llvm8LoadInst10clone_implEv\", \"llvm::LoadInst::clone_impl() const\"},\n    {\"_ZNK4llvm9StoreInst10clone_implEv\", \"llvm::StoreInst::clone_impl() const\"},\n    {\"_ZNK4llvm9TruncInst10clone_implEv\", \"llvm::TruncInst::clone_impl() const\"},\n    {\"_ZNK4llvm8ZExtInst10clone_implEv\", \"llvm::ZExtInst::clone_impl() const\"},\n    {\"_ZNK4llvm8SExtInst10clone_implEv\", \"llvm::SExtInst::clone_impl() const\"},\n    {\"_ZNK4llvm11FPTruncInst10clone_implEv\", \"llvm::FPTruncInst::clone_impl() const\"},\n    {\"_ZNK4llvm9FPExtInst10clone_implEv\", \"llvm::FPExtInst::clone_impl() const\"},\n    {\"_ZNK4llvm10UIToFPInst10clone_implEv\", \"llvm::UIToFPInst::clone_impl() const\"},\n    {\"_ZNK4llvm10SIToFPInst10clone_implEv\", \"llvm::SIToFPInst::clone_impl() const\"},\n    {\"_ZNK4llvm10FPToUIInst10clone_implEv\", \"llvm::FPToUIInst::clone_impl() const\"},\n    {\"_ZNK4llvm10FPToSIInst10clone_implEv\", \"llvm::FPToSIInst::clone_impl() const\"},\n    {\"_ZNK4llvm12PtrToIntInst10clone_implEv\", \"llvm::PtrToIntInst::clone_impl() const\"},\n    {\"_ZNK4llvm12IntToPtrInst10clone_implEv\", \"llvm::IntToPtrInst::clone_impl() const\"},\n    {\"_ZNK4llvm11BitCastInst10clone_implEv\", \"llvm::BitCastInst::clone_impl() const\"},\n    {\"_ZNK4llvm8CallInst10clone_implEv\", \"llvm::CallInst::clone_impl() const\"},\n    {\"_ZNK4llvm10SelectInst10clone_implEv\", \"llvm::SelectInst::clone_impl() const\"},\n    {\"_ZNK4llvm9VAArgInst10clone_implEv\", \"llvm::VAArgInst::clone_impl() const\"},\n    {\"_ZNK4llvm18ExtractElementInst10clone_implEv\", \"llvm::ExtractElementInst::clone_impl() const\"},\n    {\"_ZNK4llvm17InsertElementInst10clone_implEv\", \"llvm::InsertElementInst::clone_impl() const\"},\n    {\"_ZNK4llvm17ShuffleVectorInst10clone_implEv\", \"llvm::ShuffleVectorInst::clone_impl() const\"},\n    {\"_ZNK4llvm7PHINode10clone_implEv\", \"llvm::PHINode::clone_impl() const\"},\n    {\"_ZNK4llvm10ReturnInst10clone_implEv\", \"llvm::ReturnInst::clone_impl() const\"},\n    {\"_ZNK4llvm10BranchInst10clone_implEv\", \"llvm::BranchInst::clone_impl() const\"},\n    {\"_ZNK4llvm10SwitchInst10clone_implEv\", \"llvm::SwitchInst::clone_impl() const\"},\n    {\"_ZNK4llvm14IndirectBrInst10clone_implEv\", \"llvm::IndirectBrInst::clone_impl() const\"},\n    {\"_ZNK4llvm10InvokeInst10clone_implEv\", \"llvm::InvokeInst::clone_impl() const\"},\n    {\"_ZNK4llvm10UnwindInst10clone_implEv\", \"llvm::UnwindInst::clone_impl() const\"},\n    {\"_ZNK4llvm15UnreachableInst10clone_implEv\", \"llvm::UnreachableInst::clone_impl() const\"},\n    {\"_ZN4llvm8CastInstC2EPKNS_4TypeEjPNS_5ValueERKNS_5TwineEPNS_11InstructionE\", \"llvm::CastInst::CastInst(llvm::Type const*, unsigned int, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm8CastInstC2EPKNS_4TypeEjPNS_5ValueERKNS_5TwineEPNS_10BasicBlockE\", \"llvm::CastInst::CastInst(llvm::Type const*, unsigned int, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)\"},\n    {\"_ZN4llvm17GetElementPtrInstD1Ev\", \"llvm::GetElementPtrInst::~GetElementPtrInst()\"},\n    {\"_ZN4llvm17GetElementPtrInstD0Ev\", \"llvm::GetElementPtrInst::~GetElementPtrInst()\"},\n    {\"_ZN4llvm7CmpInstD1Ev\", \"llvm::CmpInst::~CmpInst()\"},\n    {\"_ZN4llvm7CmpInstD0Ev\", \"llvm::CmpInst::~CmpInst()\"},\n    {\"_ZN4llvm8ICmpInstD1Ev\", \"llvm::ICmpInst::~ICmpInst()\"},\n    {\"_ZN4llvm8ICmpInstD0Ev\", \"llvm::ICmpInst::~ICmpInst()\"},\n    {\"_ZN4llvm8FCmpInstD1Ev\", \"llvm::FCmpInst::~FCmpInst()\"},\n    {\"_ZN4llvm8FCmpInstD0Ev\", \"llvm::FCmpInst::~FCmpInst()\"},\n    {\"_ZN4llvm10SelectInstD1Ev\", \"llvm::SelectInst::~SelectInst()\"},\n    {\"_ZN4llvm10SelectInstD0Ev\", \"llvm::SelectInst::~SelectInst()\"},\n    {\"_ZN4llvm9VAArgInstD1Ev\", \"llvm::VAArgInst::~VAArgInst()\"},\n    {\"_ZN4llvm9VAArgInstD0Ev\", \"llvm::VAArgInst::~VAArgInst()\"},\n    {\"_ZN4llvm18ExtractElementInstD1Ev\", \"llvm::ExtractElementInst::~ExtractElementInst()\"},\n    {\"_ZN4llvm18ExtractElementInstD0Ev\", \"llvm::ExtractElementInst::~ExtractElementInst()\"},\n    {\"_ZN4llvm17InsertElementInstD1Ev\", \"llvm::InsertElementInst::~InsertElementInst()\"},\n    {\"_ZN4llvm17InsertElementInstD0Ev\", \"llvm::InsertElementInst::~InsertElementInst()\"},\n    {\"_ZN4llvm16ExtractValueInstD1Ev\", \"llvm::ExtractValueInst::~ExtractValueInst()\"},\n    {\"_ZN4llvm16ExtractValueInstD0Ev\", \"llvm::ExtractValueInst::~ExtractValueInst()\"},\n    {\"_ZN4llvm15InsertValueInstD1Ev\", \"llvm::InsertValueInst::~InsertValueInst()\"},\n    {\"_ZN4llvm15InsertValueInstD0Ev\", \"llvm::InsertValueInst::~InsertValueInst()\"},\n    {\"_ZN4llvm10BranchInstD1Ev\", \"llvm::BranchInst::~BranchInst()\"},\n    {\"_ZN4llvm10BranchInstD0Ev\", \"llvm::BranchInst::~BranchInst()\"},\n    {\"_ZN4llvm11BitCastInstD1Ev\", \"llvm::BitCastInst::~BitCastInst()\"},\n    {\"_ZN4llvm11BitCastInstD0Ev\", \"llvm::BitCastInst::~BitCastInst()\"},\n    {\"_ZN4llvm10InvokeInstD1Ev\", \"llvm::InvokeInst::~InvokeInst()\"},\n    {\"_ZN4llvm10InvokeInstD0Ev\", \"llvm::InvokeInst::~InvokeInst()\"},\n    {\"_ZN4llvm10UnwindInstD1Ev\", \"llvm::UnwindInst::~UnwindInst()\"},\n    {\"_ZN4llvm10UnwindInstD0Ev\", \"llvm::UnwindInst::~UnwindInst()\"},\n    {\"_ZN4llvm15UnreachableInstD1Ev\", \"llvm::UnreachableInst::~UnreachableInst()\"},\n    {\"_ZN4llvm15UnreachableInstD0Ev\", \"llvm::UnreachableInst::~UnreachableInst()\"},\n    {\"_ZN4llvm8LoadInstD1Ev\", \"llvm::LoadInst::~LoadInst()\"},\n    {\"_ZN4llvm8LoadInstD0Ev\", \"llvm::LoadInst::~LoadInst()\"},\n    {\"_ZN4llvm9StoreInstD1Ev\", \"llvm::StoreInst::~StoreInst()\"},\n    {\"_ZN4llvm9StoreInstD0Ev\", \"llvm::StoreInst::~StoreInst()\"},\n    {\"_ZN4llvm17ShuffleVectorInstD1Ev\", \"llvm::ShuffleVectorInst::~ShuffleVectorInst()\"},\n    {\"_ZN4llvm17ShuffleVectorInstD0Ev\", \"llvm::ShuffleVectorInst::~ShuffleVectorInst()\"},\n    {\"_ZN4llvm14BinaryOperatorD1Ev\", \"llvm::BinaryOperator::~BinaryOperator()\"},\n    {\"_ZN4llvm14BinaryOperatorD0Ev\", \"llvm::BinaryOperator::~BinaryOperator()\"},\n    {\"_ZN4llvm9TruncInstD1Ev\", \"llvm::TruncInst::~TruncInst()\"},\n    {\"_ZN4llvm9TruncInstD0Ev\", \"llvm::TruncInst::~TruncInst()\"},\n    {\"_ZN4llvm8ZExtInstD1Ev\", \"llvm::ZExtInst::~ZExtInst()\"},\n    {\"_ZN4llvm8ZExtInstD0Ev\", \"llvm::ZExtInst::~ZExtInst()\"},\n    {\"_ZN4llvm8SExtInstD1Ev\", \"llvm::SExtInst::~SExtInst()\"},\n    {\"_ZN4llvm8SExtInstD0Ev\", \"llvm::SExtInst::~SExtInst()\"},\n    {\"_ZN4llvm11FPTruncInstD1Ev\", \"llvm::FPTruncInst::~FPTruncInst()\"},\n    {\"_ZN4llvm11FPTruncInstD0Ev\", \"llvm::FPTruncInst::~FPTruncInst()\"},\n    {\"_ZN4llvm9FPExtInstD1Ev\", \"llvm::FPExtInst::~FPExtInst()\"},\n    {\"_ZN4llvm9FPExtInstD0Ev\", \"llvm::FPExtInst::~FPExtInst()\"},\n    {\"_ZN4llvm10UIToFPInstD1Ev\", \"llvm::UIToFPInst::~UIToFPInst()\"},\n    {\"_ZN4llvm10UIToFPInstD0Ev\", \"llvm::UIToFPInst::~UIToFPInst()\"},\n    {\"_ZN4llvm10SIToFPInstD1Ev\", \"llvm::SIToFPInst::~SIToFPInst()\"},\n    {\"_ZN4llvm10SIToFPInstD0Ev\", \"llvm::SIToFPInst::~SIToFPInst()\"},\n    {\"_ZN4llvm10FPToUIInstD1Ev\", \"llvm::FPToUIInst::~FPToUIInst()\"},\n    {\"_ZN4llvm10FPToUIInstD0Ev\", \"llvm::FPToUIInst::~FPToUIInst()\"},\n    {\"_ZN4llvm10FPToSIInstD1Ev\", \"llvm::FPToSIInst::~FPToSIInst()\"},\n    {\"_ZN4llvm10FPToSIInstD0Ev\", \"llvm::FPToSIInst::~FPToSIInst()\"},\n    {\"_ZN4llvm12PtrToIntInstD1Ev\", \"llvm::PtrToIntInst::~PtrToIntInst()\"},\n    {\"_ZN4llvm12PtrToIntInstD0Ev\", \"llvm::PtrToIntInst::~PtrToIntInst()\"},\n    {\"_ZN4llvm12IntToPtrInstD1Ev\", \"llvm::IntToPtrInst::~IntToPtrInst()\"},\n    {\"_ZN4llvm12IntToPtrInstD0Ev\", \"llvm::IntToPtrInst::~IntToPtrInst()\"},\n    {\"_ZNSt6__copyILb0ESt26random_access_iterator_tagE4copyIPN4llvm3UseES5_EET0_T_S7_S6_\", \"llvm::Use* std::__copy<false, std::random_access_iterator_tag>::copy<llvm::Use*, llvm::Use*>(llvm::Use*, llvm::Use*, llvm::Use*)\"},\n    {\"_ZN4llvm8CastInstD1Ev\", \"llvm::CastInst::~CastInst()\"},\n    {\"_ZN4llvm8CastInstD0Ev\", \"llvm::CastInst::~CastInst()\"},\n    {\"_ZN4llvm9VAArgInstC2EPNS_5ValueEPKNS_4TypeERKNS_5TwineEPNS_11InstructionE\", \"llvm::VAArgInst::VAArgInst(llvm::Value*, llvm::Type const*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SelectInstC2EPNS_5ValueES2_S2_RKNS_5TwineEPNS_11InstructionE\", \"llvm::SelectInst::SelectInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm10SelectInst4initEPNS_5ValueES2_S2_\", \"llvm::SelectInst::init(llvm::Value*, llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm8FCmpInstC2ERNS_10BasicBlockENS_7CmpInst9PredicateEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::FCmpInst::FCmpInst(llvm::BasicBlock&, llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8FCmpInstC2ENS_7CmpInst9PredicateEPNS_5ValueES4_RKNS_5TwineE\", \"llvm::FCmpInst::FCmpInst(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8FCmpInstC2EPNS_11InstructionENS_7CmpInst9PredicateEPNS_5ValueES6_RKNS_5TwineE\", \"llvm::FCmpInst::FCmpInst(llvm::Instruction*, llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm8ICmpInstC2ENS_7CmpInst9PredicateEPNS_5ValueES4_RKNS_5TwineE\", \"llvm::ICmpInst::ICmpInst(llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNUWENS_11Instruction9BinaryOpsEPNS_5ValueES4_RKNS_5TwineEPS1_\", \"llvm::BinaryOperator::CreateNUW(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm14BinaryOperator9CreateNSWENS_11Instruction9BinaryOpsEPNS_5ValueES4_RKNS_5TwineEPS1_\", \"llvm::BinaryOperator::CreateNSW(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*)\"},\n    {\"_ZN4llvm16DbgInfoIntrinsic9StripCastEPNS_5ValueE\", \"llvm::DbgInfoIntrinsic::StripCast(llvm::Value*)\"},\n    {\"_ZNK4llvm14DbgDeclareInst10getAddressEv\", \"llvm::DbgDeclareInst::getAddress() const\"},\n    {\"_ZNK4llvm12DbgValueInst8getValueEv\", \"llvm::DbgValueInst::getValue() const\"},\n    {\"_ZN4llvm12DbgValueInst8getValueEv\", \"llvm::DbgValueInst::getValue()\"},\n    {\"_ZN4llvm16getGlobalContextEv\", \"llvm::getGlobalContext()\"},\n    {\"_ZN4llvm11LLVMContextC1Ev\", \"llvm::LLVMContext::LLVMContext()\"},\n    {\"_ZN4llvm11LLVMContextC2Ev\", \"llvm::LLVMContext::LLVMContext()\"},\n    {\"_ZNK4llvm11LLVMContext11getMDKindIDENS_9StringRefE\", \"llvm::LLVMContext::getMDKindID(llvm::StringRef) const\"},\n    {\"_ZN4llvm11LLVMContextD1Ev\", \"llvm::LLVMContext::~LLVMContext()\"},\n    {\"_ZN4llvm11LLVMContextD2Ev\", \"llvm::LLVMContext::~LLVMContext()\"},\n    {\"_ZN4llvm11LLVMContext9addModuleEPNS_6ModuleE\", \"llvm::LLVMContext::addModule(llvm::Module*)\"},\n    {\"_ZN4llvm11LLVMContext12removeModuleEPNS_6ModuleE\", \"llvm::LLVMContext::removeModule(llvm::Module*)\"},\n    {\"_ZN4llvm11LLVMContext29setInlineAsmDiagnosticHandlerEPFvRKNS_12SMDiagnosticEPvjES4_\", \"llvm::LLVMContext::setInlineAsmDiagnosticHandler(void (*)(llvm::SMDiagnostic const&, void*, unsigned int), void*)\"},\n    {\"_ZNK4llvm11LLVMContext29getInlineAsmDiagnosticHandlerEv\", \"llvm::LLVMContext::getInlineAsmDiagnosticHandler() const\"},\n    {\"_ZNK4llvm11LLVMContext29getInlineAsmDiagnosticContextEv\", \"llvm::LLVMContext::getInlineAsmDiagnosticContext() const\"},\n    {\"_ZN4llvm11LLVMContext9emitErrorENS_9StringRefE\", \"llvm::LLVMContext::emitError(llvm::StringRef)\"},\n    {\"_ZN4llvm11LLVMContext9emitErrorEjNS_9StringRefE\", \"llvm::LLVMContext::emitError(unsigned int, llvm::StringRef)\"},\n    {\"_ZN4llvm11LLVMContext9emitErrorEPKNS_11InstructionENS_9StringRefE\", \"llvm::LLVMContext::emitError(llvm::Instruction const*, llvm::StringRef)\"},\n    {\"_ZNK4llvm11LLVMContext14getMDKindNamesERNS_15SmallVectorImplINS_9StringRefEEE\", \"llvm::LLVMContext::getMDKindNames(llvm::SmallVectorImpl<llvm::StringRef>&) const\"},\n    {\"_ZN4llvm9StringMapIjNS_15MallocAllocatorEE16GetOrCreateValueIjEERNS_14StringMapEntryIjEENS_9StringRefET_\", \"llvm::StringMapEntry<unsigned int>& llvm::StringMap<unsigned int, llvm::MallocAllocator>::GetOrCreateValue<unsigned int>(llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_9StringRefEE6resizeEj\", \"llvm::SmallVectorImpl<llvm::StringRef>::resize(unsigned int)\"},\n    {\"_ZN4llvm14object_creatorINS_11LLVMContextEEEPvv\", \"void* llvm::object_creator<llvm::LLVMContext>()\"},\n    {\"_ZN4llvm14object_deleterINS_11LLVMContextEE4callEPv\", \"llvm::object_deleter<llvm::LLVMContext>::call(void*)\"},\n    {\"_ZN4llvm15LLVMContextImplC1ERNS_11LLVMContextE\", \"llvm::LLVMContextImpl::LLVMContextImpl(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm15LLVMContextImplC2ERNS_11LLVMContextE\", \"llvm::LLVMContextImpl::LLVMContextImpl(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm15LLVMContextImplD1Ev\", \"llvm::LLVMContextImpl::~LLVMContextImpl()\"},\n    {\"_ZN4llvm15LLVMContextImplD2Ev\", \"llvm::LLVMContextImpl::~LLVMContextImpl()\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_6MDNodeEE6appendINS_19SmallPtrSetIteratorIS2_EEEEvT_S7_\", \"void llvm::SmallVectorImpl<llvm::MDNode*>::append<llvm::SmallPtrSetIterator<llvm::MDNode*> >(llvm::SmallPtrSetIterator<llvm::MDNode*>, llvm::SmallPtrSetIterator<llvm::MDNode*>)\"},\n    {\"_ZN4llvm11IntegerTypeD1Ev\", \"llvm::IntegerType::~IntegerType()\"},\n    {\"_ZN4llvm4TypeD1Ev\", \"llvm::Type::~Type()\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EED1Ev\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EED1Ev\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EED1Ev\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EED1Ev\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EED1Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EED1Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EED1Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EED1Ev\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm10FoldingSetINS_6MDNodeEED1Ev\", \"llvm::FoldingSet<llvm::MDNode>::~FoldingSet()\"},\n    {\"_ZN4llvm16DenseMapIteratorINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EELb0EE23AdvancePastEmptyBucketsEv\", \"llvm::DenseMapIterator<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*>, false>::AdvancePastEmptyBuckets()\"},\n    {\"_ZN4llvm16DenseMapIteratorINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EELb0EE23AdvancePastEmptyBucketsEv\", \"llvm::DenseMapIterator<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*>, false>::AdvancePastEmptyBuckets()\"},\n    {\"_ZNSt6vectorIPN4llvm6ModuleESaIS2_EE19_M_range_initializeINS0_19SmallPtrSetIteratorIS2_EEEEvT_S8_St20forward_iterator_tag\", \"void std::vector<llvm::Module*, std::allocator<llvm::Module*> >::_M_range_initialize<llvm::SmallPtrSetIterator<llvm::Module*> >(llvm::SmallPtrSetIterator<llvm::Module*>, llvm::SmallPtrSetIterator<llvm::Module*>, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm10DebugRecVHD1Ev\", \"llvm::DebugRecVH::~DebugRecVH()\"},\n    {\"_ZN4llvm10DebugRecVHD0Ev\", \"llvm::DebugRecVH::~DebugRecVH()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionENS_11SmallVectorISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELj2EEENS_12DenseMapInfoIS3_EENSB_ISA_EEED2Ev\", \"llvm::DenseMap<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u>, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> > >::~DenseMap()\"},\n    {\"_ZN4llvm8DenseMapINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EEED2Ev\", \"llvm::DenseMap<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*> >::~DenseMap()\"},\n    {\"_ZN4llvm8DenseMapINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EEED2Ev\", \"llvm::DenseMap<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*> >::~DenseMap()\"},\n    {\"_ZN4llvm10FoldingSetINS_6MDNodeEED0Ev\", \"llvm::FoldingSet<llvm::MDNode>::~FoldingSet()\"},\n    {\"_ZNK4llvm10FoldingSetINS_6MDNodeEE14GetNodeProfileEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::MDNode>::GetNodeProfile(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_6MDNodeEE10NodeEqualsEPNS_14FoldingSetImpl4NodeERKNS_16FoldingSetNodeIDERS6_\", \"llvm::FoldingSet<llvm::MDNode>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm10FoldingSetINS_6MDNodeEE15ComputeNodeHashEPNS_14FoldingSetImpl4NodeERNS_16FoldingSetNodeIDE\", \"llvm::FoldingSet<llvm::MDNode>::ComputeNodeHash(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm8DenseMapINS_22DenseMapAPFloatKeyInfo5KeyTyEPNS_10ConstantFPES1_NS_12DenseMapInfoIS4_EEE4initEj\", \"llvm::DenseMap<llvm::DenseMapAPFloatKeyInfo::KeyTy, llvm::ConstantFP*, llvm::DenseMapAPFloatKeyInfo, llvm::DenseMapInfo<llvm::ConstantFP*> >::init(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapINS_20DenseMapAPIntKeyInfo5KeyTyEPNS_11ConstantIntES1_NS_12DenseMapInfoIS4_EEE4initEj\", \"llvm::DenseMap<llvm::DenseMapAPIntKeyInfo::KeyTy, llvm::ConstantInt*, llvm::DenseMapAPIntKeyInfo, llvm::DenseMapInfo<llvm::ConstantInt*> >::init(unsigned int)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EED0Ev\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKS1_\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::dump() const\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKS8_IPKS1_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_21ConstantAggregateZeroEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueES6_ISG_ERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_21ConstantAggregateZeroEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_21ConstantAggregateZeroEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE5eraseES6_ISG_ESN_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_21ConstantAggregateZeroEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_21ConstantAggregateZeroEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >::_M_insert_unique(std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_21ConstantAggregateZeroEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm21ConstantAggregateZeroESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_4TypeEcES2_EEESt10_Select1stISD_ESt4lessIS2_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E\", \"std::_Rb_tree<llvm::ConstantAggregateZero*, std::pair<llvm::ConstantAggregateZero* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > >, std::_Select1st<std::pair<llvm::ConstantAggregateZero* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >, std::less<llvm::ConstantAggregateZero*>, std::allocator<std::pair<llvm::ConstantAggregateZero* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantAggregateZero* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::ConstantAggregateZero*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EED0Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE4dumpEv\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::dump() const\"},\n    {\"_ZN4llvm15ConstantKeyDataINS_13ConstantArrayEE10getValTypeEPS1_\", \"llvm::ConstantKeyData<llvm::ConstantArray>::getValType(llvm::ConstantArray*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKSD_IPKS6_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_13ConstantArrayEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueES6_ISL_ERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_13ConstantArrayEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm13ConstantArrayESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE16_M_insert_uniqueES5_ISI_ERKSI_\", \"std::_Rb_tree<llvm::ConstantArray*, std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::ConstantArray*>, std::allocator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm13ConstantArrayESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE16_M_insert_uniqueERKSI_\", \"std::_Rb_tree<llvm::ConstantArray*, std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::ConstantArray*>, std::allocator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_insert_unique(std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_13ConstantArrayEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE5eraseES6_ISL_ESS_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_13ConstantArrayEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE8_M_eraseEPSt13_Rb_tree_nodeISL_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE4findERSB_\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::find(std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueERKSE_\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::_M_insert_unique(std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE9_M_insertEPSt18_Rb_tree_node_baseSM_RKSE_\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE14_M_create_nodeERKSE_\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::_M_create_node(std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> const&)\"},\n    {\"_ZNSt6vectorIPN4llvm8ConstantESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Constant**, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, llvm::Constant* const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm9ArrayTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_13ConstantArrayEESt10_Select1stISE_ESt4lessISA_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E\", \"std::_Rb_tree<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*>, std::_Select1st<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >, std::less<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm13ConstantArrayESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_9ArrayTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE8_M_eraseEPSt13_Rb_tree_nodeISI_E\", \"std::_Rb_tree<llvm::ConstantArray*, std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > >, std::_Select1st<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >, std::less<llvm::ConstantArray*>, std::allocator<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantArray* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::ArrayType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantArray*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EED0Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE4dumpEv\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::dump() const\"},\n    {\"_ZN4llvm15ConstantKeyDataINS_14ConstantStructEE10getValTypeEPS1_\", \"llvm::ConstantKeyData<llvm::ConstantStruct>::getValType(llvm::ConstantStruct*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKSD_IPKS6_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantStructEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueES6_ISL_ERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantStructEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm14ConstantStructESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE16_M_insert_uniqueES5_ISI_ERKSI_\", \"std::_Rb_tree<llvm::ConstantStruct*, std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::ConstantStruct*>, std::allocator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm14ConstantStructESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE16_M_insert_uniqueERKSI_\", \"std::_Rb_tree<llvm::ConstantStruct*, std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::ConstantStruct*>, std::allocator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_insert_unique(std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantStructEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE5eraseES6_ISL_ESS_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantStructEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE8_M_eraseEPSt13_Rb_tree_nodeISL_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE4findERSB_\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::find(std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueERKSE_\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::_M_insert_unique(std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE9_M_insertEPSt18_Rb_tree_node_baseSM_RKSE_\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE14_M_create_nodeERKSE_\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::_M_create_node(std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10StructTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantStructEESt10_Select1stISE_ESt4lessISA_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E\", \"std::_Rb_tree<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*>, std::_Select1st<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >, std::less<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm14ConstantStructESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_10StructTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE8_M_eraseEPSt13_Rb_tree_nodeISI_E\", \"std::_Rb_tree<llvm::ConstantStruct*, std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > >, std::_Select1st<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >, std::less<llvm::ConstantStruct*>, std::allocator<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantStruct* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::StructType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantStruct*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EED0Ev\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::dump() const\"},\n    {\"_ZN4llvm15ConstantKeyDataINS_14ConstantVectorEE10getValTypeEPS1_\", \"llvm::ConstantKeyData<llvm::ConstantVector>::getValType(llvm::ConstantVector*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKSD_IPKS6_S5_EPS7_EE\", \"llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10VectorTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantVectorEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueES6_ISL_ERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10VectorTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantVectorEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE16_M_insert_uniqueERKSL_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10VectorTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantVectorEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE5eraseES6_ISL_ESS_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_10VectorTypeESt6vectorIPNS0_8ConstantESaISC_EEEPNS0_14ConstantVectorEEEESt10_Select1stISL_ESt4lessIS3_ESaISL_EE8_M_eraseEPSt13_Rb_tree_nodeISL_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE4findERSB_\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::find(std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE16_M_insert_uniqueERKSE_\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::_M_insert_unique(std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE9_M_insertEPSt18_Rb_tree_node_baseSM_RKSE_\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE14_M_create_nodeERKSE_\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::_M_create_node(std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm10VectorTypeESt6vectorIPNS1_8ConstantESaIS7_EEES0_IKSA_PNS1_14ConstantVectorEESt10_Select1stISE_ESt4lessISA_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E\", \"std::_Rb_tree<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > >, std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*>, std::_Select1st<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >, std::less<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > >, std::allocator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm14ConstantVectorESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_10VectorTypeESt6vectorIPNS0_8ConstantESaISB_EEES2_EEESt10_Select1stISI_ESt4lessIS2_ESaISI_EE8_M_eraseEPSt13_Rb_tree_nodeISI_E\", \"std::_Rb_tree<llvm::ConstantVector*, std::pair<llvm::ConstantVector* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > >, std::_Select1st<std::pair<llvm::ConstantVector* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >, std::less<llvm::ConstantVector*>, std::allocator<std::pair<llvm::ConstantVector* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantVector* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::VectorType const*, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > > const, llvm::ConstantVector*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EED0Ev\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::dump() const\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKS8_IPKS1_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeEcEPNS0_19ConstantPointerNullEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueES6_ISG_ERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeEcEPNS0_19ConstantPointerNullEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeEcEPNS0_19ConstantPointerNullEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE5eraseES6_ISG_ESN_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeEcEPNS0_19ConstantPointerNullEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeEcES0_IKS5_PNS1_19ConstantPointerNullEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, char>, std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >, std::less<std::pair<llvm::PointerType const*, char> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >::_M_insert_unique(std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeEcES0_IKS5_PNS1_19ConstantPointerNullEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, char>, std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >, std::less<std::pair<llvm::PointerType const*, char> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm19ConstantPointerNullESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_11PointerTypeEcES2_EEESt10_Select1stISD_ESt4lessIS2_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E\", \"std::_Rb_tree<llvm::ConstantPointerNull*, std::pair<llvm::ConstantPointerNull* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > >, std::_Select1st<std::pair<llvm::ConstantPointerNull* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >, std::less<llvm::ConstantPointerNull*>, std::allocator<std::pair<llvm::ConstantPointerNull* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantPointerNull* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, char> const, llvm::ConstantPointerNull*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EED0Ev\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKS1_\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::dump() const\"},\n    {\"_ZN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKS8_IPKS1_cEPS2_EE\", \"llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_10UndefValueEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueES6_ISG_ERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_10UndefValueEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE16_M_insert_uniqueERKSG_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_10UndefValueEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE5eraseES6_ISG_ESN_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeEcEPNS0_10UndefValueEEEESt10_Select1stISG_ESt4lessIS3_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >*)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_10UndefValueEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE16_M_insert_uniqueERKS9_\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >::_M_insert_unique(std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeEcES0_IKS5_PNS1_10UndefValueEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E\", \"std::_Rb_tree<std::pair<llvm::Type const*, char>, std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >, std::less<std::pair<llvm::Type const*, char> >, std::allocator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm10UndefValueESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_4TypeEcES2_EEESt10_Select1stISD_ESt4lessIS2_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E\", \"std::_Rb_tree<llvm::UndefValue*, std::pair<llvm::UndefValue* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > >, std::_Select1st<std::pair<llvm::UndefValue* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >, std::less<llvm::UndefValue*>, std::allocator<std::pair<llvm::UndefValue* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::UndefValue* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, char> const, llvm::UndefValue*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EED0Ev\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKS2_\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::dump() const\"},\n    {\"_ZN4llvm15ConstantKeyDataINS_12ConstantExprEE10getValTypeEPS1_\", \"llvm::ConstantKeyData<llvm::ConstantExpr>::getValType(llvm::ConstantExpr*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKS9_IPKS2_S1_EPS3_EE\", \"llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE16_M_insert_uniqueES6_ISH_ERKSH_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE16_M_insert_uniqueERKSH_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE5eraseES6_ISH_ESO_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >*)\"},\n    {\"_ZNK4llvm14ExprMapKeyTypeltERKS0_\", \"llvm::ExprMapKeyType::operator<(llvm::ExprMapKeyType const&) const\"},\n    {\"_ZNSt4pairIS_IPKN4llvm4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEC2ERKS5_RKS7_\", \"std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, llvm::ConstantExpr*>::pair(std::pair<llvm::Type const*, llvm::ExprMapKeyType> const&, llvm::ConstantExpr* const&)\"},\n    {\"_ZNSt4pairIKS_IPKN4llvm4TypeENS0_14ExprMapKeyTypeEEPNS0_12ConstantExprEEC2IS5_S8_EERKS_IT_T0_E\", \"std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*>::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, llvm::ConstantExpr*>(std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, llvm::ConstantExpr*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeENS1_14ExprMapKeyTypeEES0_IKS6_PNS1_12ConstantExprEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >, std::less<std::pair<llvm::Type const*, llvm::ExprMapKeyType> >, std::allocator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >::_M_insert_unique(std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIKS1_IPKN4llvm4TypeENS2_14ExprMapKeyTypeEEPNS2_12ConstantExprEEE9constructEPSB_RKSB_\", \"__gnu_cxx::new_allocator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >::construct(std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*>*, std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> const&)\"},\n    {\"_ZN4llvm14ExprMapKeyTypeC2EjRKSt6vectorIPNS_8ConstantESaIS3_EEttRKNS_11SmallVectorIjLj4EEE\", \"llvm::ExprMapKeyType::ExprMapKeyType(unsigned int, std::vector<llvm::Constant*, std::allocator<llvm::Constant*> > const&, unsigned short, unsigned short, llvm::SmallVector<unsigned int, 4u> const&)\"},\n    {\"_ZNSt4pairIPKN4llvm4TypeENS0_14ExprMapKeyTypeEEC2ERKS3_RKS4_\", \"std::pair<llvm::Type const*, llvm::ExprMapKeyType>::pair(llvm::Type const* const&, llvm::ExprMapKeyType const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm4TypeENS1_14ExprMapKeyTypeEES0_IKS6_PNS1_12ConstantExprEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<std::pair<llvm::Type const*, llvm::ExprMapKeyType>, std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*>, std::_Select1st<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >, std::less<std::pair<llvm::Type const*, llvm::ExprMapKeyType> >, std::allocator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm12ConstantExprESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_4TypeENS0_14ExprMapKeyTypeEES2_EEESt10_Select1stISE_ESt4lessIS2_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E\", \"std::_Rb_tree<llvm::ConstantExpr*, std::pair<llvm::ConstantExpr* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > >, std::_Select1st<std::pair<llvm::ConstantExpr* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >, std::less<llvm::ConstantExpr*>, std::allocator<std::pair<llvm::ConstantExpr* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ConstantExpr* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::Type const*, llvm::ExprMapKeyType> const, llvm::ConstantExpr*> > > >*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EED0Ev\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::~ConstantUniqueMap()\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE4dumpEv\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::dump() const\"},\n    {\"_ZN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EE21UpdateAbstractTypeMapEPKNS_11DerivedTypeESt17_Rb_tree_iteratorISt4pairIKS9_IPKS2_S1_EPS3_EE\", \"llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>::UpdateAbstractTypeMap(llvm::DerivedType const*, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeENS0_16InlineAsmKeyTypeEEPNS0_9InlineAsmEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE16_M_insert_uniqueES6_ISH_ERKSH_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeENS0_16InlineAsmKeyTypeEEPNS0_9InlineAsmEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE16_M_insert_uniqueERKSH_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > > >::_M_insert_unique(std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeENS1_16InlineAsmKeyTypeEES0_IKS6_PNS1_9InlineAsmEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE5eraseESt17_Rb_tree_iteratorISA_E\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType>, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::less<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeENS0_16InlineAsmKeyTypeEEPNS0_9InlineAsmEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE5eraseES6_ISH_ESO_\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > > >::erase(std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::_Rb_tree_iterator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm11DerivedTypeESt4pairIKS3_St17_Rb_tree_iteratorIS4_IKS4_IPKNS0_11PointerTypeENS0_16InlineAsmKeyTypeEEPNS0_9InlineAsmEEEESt10_Select1stISH_ESt4lessIS3_ESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E\", \"std::_Rb_tree<llvm::DerivedType const*, std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >, std::_Select1st<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::less<llvm::DerivedType const*>, std::allocator<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::DerivedType const* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >*)\"},\n    {\"_ZNK4llvm16InlineAsmKeyTypeltERKS0_\", \"llvm::InlineAsmKeyType::operator<(llvm::InlineAsmKeyType const&) const\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeENS1_16InlineAsmKeyTypeEES0_IKS6_PNS1_9InlineAsmEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE16_M_insert_uniqueERKSA_\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType>, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::less<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >::_M_insert_unique(std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeENS1_16InlineAsmKeyTypeEES0_IKS6_PNS1_9InlineAsmEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE9_M_insertEPSt18_Rb_tree_node_baseSI_RKSA_\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType>, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::less<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> const&)\"},\n    {\"_ZNSt8_Rb_treeISt4pairIPKN4llvm11PointerTypeENS1_16InlineAsmKeyTypeEES0_IKS6_PNS1_9InlineAsmEESt10_Select1stISA_ESt4lessIS6_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E\", \"std::_Rb_tree<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType>, std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*>, std::_Select1st<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >, std::less<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> >, std::allocator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm9InlineAsmESt4pairIKS2_St17_Rb_tree_iteratorIS3_IKS3_IPKNS0_11PointerTypeENS0_16InlineAsmKeyTypeEES2_EEESt10_Select1stISE_ESt4lessIS2_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E\", \"std::_Rb_tree<llvm::InlineAsm*, std::pair<llvm::InlineAsm* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > >, std::_Select1st<std::pair<llvm::InlineAsm* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >, std::less<llvm::InlineAsm*>, std::allocator<std::pair<llvm::InlineAsm* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::InlineAsm* const, std::_Rb_tree_iterator<std::pair<std::pair<llvm::PointerType const*, llvm::InlineAsmKeyType> const, llvm::InlineAsm*> > > >*)\"},\n    {\"_ZN4llvm4TypeD0Ev\", \"llvm::Type::~Type()\"},\n    {\"_ZN4llvm11IntegerTypeD0Ev\", \"llvm::IntegerType::~IntegerType()\"},\n    {\"_ZNK4llvm11DerivedType4dumpEv\", \"llvm::DerivedType::dump() const\"},\n    {\"_ZN4llvm11DerivedTypeD1Ev\", \"llvm::DerivedType::~DerivedType()\"},\n    {\"_ZN4llvm11DerivedTypeD0Ev\", \"llvm::DerivedType::~DerivedType()\"},\n    {\"_ZN4llvm11TypeMapBaseD2Ev\", \"llvm::TypeMapBase::~TypeMapBase()\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm12PATypeHolderEESt10_Select1stIS4_ESt4lessIjESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::PATypeHolder>, std::_Select1st<std::pair<unsigned int const, llvm::PATypeHolder> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<unsigned int const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm12ArrayValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::ArrayValType, std::pair<llvm::ArrayValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >, std::less<llvm::ArrayValType>, std::allocator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13VectorValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::VectorValType, std::pair<llvm::VectorValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >, std::less<llvm::VectorValType>, std::allocator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14PointerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::PointerValType, std::pair<llvm::PointerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >, std::less<llvm::PointerValType>, std::allocator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::StructValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14IntegerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E\", \"std::_Rb_tree<llvm::IntegerValType, std::pair<llvm::IntegerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::IntegerValType const, llvm::PATypeHolder> >, std::less<llvm::IntegerValType>, std::allocator<std::pair<llvm::IntegerValType const, llvm::PATypeHolder> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::IntegerValType const, llvm::PATypeHolder> >*)\"},\n    {\"_ZN4llvm8MDStringC1ERNS_11LLVMContextENS_9StringRefE\", \"llvm::MDString::MDString(llvm::LLVMContext&, llvm::StringRef)\"},\n    {\"_ZN4llvm8MDStringC2ERNS_11LLVMContextENS_9StringRefE\", \"llvm::MDString::MDString(llvm::LLVMContext&, llvm::StringRef)\"},\n    {\"_ZN4llvm8MDString3getERNS_11LLVMContextENS_9StringRefE\", \"llvm::MDString::get(llvm::LLVMContext&, llvm::StringRef)\"},\n    {\"_ZN4llvm13MDNodeOperand7deletedEv\", \"llvm::MDNodeOperand::deleted()\"},\n    {\"_ZN4llvm6MDNode14replaceOperandEPNS_13MDNodeOperandEPNS_5ValueE\", \"llvm::MDNode::replaceOperand(llvm::MDNodeOperand*, llvm::Value*)\"},\n    {\"_ZN4llvm13MDNodeOperand19allUsesReplacedWithEPNS_5ValueE\", \"llvm::MDNodeOperand::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm6MDNodeC1ERNS_11LLVMContextEPKPNS_5ValueEjb\", \"llvm::MDNode::MDNode(llvm::LLVMContext&, llvm::Value* const*, unsigned int, bool)\"},\n    {\"_ZN4llvm6MDNodeC2ERNS_11LLVMContextEPKPNS_5ValueEjb\", \"llvm::MDNode::MDNode(llvm::LLVMContext&, llvm::Value* const*, unsigned int, bool)\"},\n    {\"_ZN4llvm6MDNodeD0Ev\", \"llvm::MDNode::~MDNode()\"},\n    {\"_ZN4llvm6MDNodeD1Ev\", \"llvm::MDNode::~MDNode()\"},\n    {\"_ZN4llvm6MDNodeD2Ev\", \"llvm::MDNode::~MDNode()\"},\n    {\"_ZNK4llvm6MDNode11getFunctionEv\", \"llvm::MDNode::getFunction() const\"},\n    {\"_Z19getFunctionForValuePN4llvm5ValueE\", \"getFunctionForValue(llvm::Value*)\"},\n    {\"_ZNK4llvm6MDNode10getOperandEj\", \"llvm::MDNode::getOperand(unsigned int) const\"},\n    {\"_ZN4llvm6MDNode7destroyEv\", \"llvm::MDNode::destroy()\"},\n    {\"_ZN4llvm6MDNode9getMDNodeERNS_11LLVMContextEPKPNS_5ValueEjNS0_17FunctionLocalnessEb\", \"llvm::MDNode::getMDNode(llvm::LLVMContext&, llvm::Value* const*, unsigned int, llvm::MDNode::FunctionLocalness, bool)\"},\n    {\"_ZN4llvm6MDNode3getERNS_11LLVMContextEPKPNS_5ValueEj\", \"llvm::MDNode::get(llvm::LLVMContext&, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm6MDNode21getWhenValsUnresolvedERNS_11LLVMContextEPKPNS_5ValueEjb\", \"llvm::MDNode::getWhenValsUnresolved(llvm::LLVMContext&, llvm::Value* const*, unsigned int, bool)\"},\n    {\"_ZN4llvm6MDNode11getIfExistsERNS_11LLVMContextEPKPNS_5ValueEj\", \"llvm::MDNode::getIfExists(llvm::LLVMContext&, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm6MDNode12getTemporaryERNS_11LLVMContextEPKPNS_5ValueEj\", \"llvm::MDNode::getTemporary(llvm::LLVMContext&, llvm::Value* const*, unsigned int)\"},\n    {\"_ZN4llvm6MDNode15deleteTemporaryEPS0_\", \"llvm::MDNode::deleteTemporary(llvm::MDNode*)\"},\n    {\"_ZNK4llvm6MDNode7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::MDNode::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm6MDNode15setIsNotUniquedEv\", \"llvm::MDNode::setIsNotUniqued()\"},\n    {\"_ZN4llvm11NamedMDNodeC1ERKNS_5TwineE\", \"llvm::NamedMDNode::NamedMDNode(llvm::Twine const&)\"},\n    {\"_ZN4llvm11NamedMDNodeC2ERKNS_5TwineE\", \"llvm::NamedMDNode::NamedMDNode(llvm::Twine const&)\"},\n    {\"_ZN4llvm11NamedMDNodeD1Ev\", \"llvm::NamedMDNode::~NamedMDNode()\"},\n    {\"_ZN4llvm11NamedMDNodeD2Ev\", \"llvm::NamedMDNode::~NamedMDNode()\"},\n    {\"_ZN4llvm11NamedMDNode17dropAllReferencesEv\", \"llvm::NamedMDNode::dropAllReferences()\"},\n    {\"_ZNK4llvm11NamedMDNode14getNumOperandsEv\", \"llvm::NamedMDNode::getNumOperands() const\"},\n    {\"_ZNK4llvm11NamedMDNode10getOperandEj\", \"llvm::NamedMDNode::getOperand(unsigned int) const\"},\n    {\"_ZN4llvm11NamedMDNode10addOperandEPNS_6MDNodeE\", \"llvm::NamedMDNode::addOperand(llvm::MDNode*)\"},\n    {\"_ZN4llvm11NamedMDNode15eraseFromParentEv\", \"llvm::NamedMDNode::eraseFromParent()\"},\n    {\"_ZNK4llvm11NamedMDNode7getNameEv\", \"llvm::NamedMDNode::getName() const\"},\n    {\"_ZN4llvm11Instruction11setMetadataEPKcPNS_6MDNodeE\", \"llvm::Instruction::setMetadata(char const*, llvm::MDNode*)\"},\n    {\"_ZN4llvm11Instruction11setMetadataEjPNS_6MDNodeE\", \"llvm::Instruction::setMetadata(unsigned int, llvm::MDNode*)\"},\n    {\"_ZNK4llvm11Instruction15getMetadataImplEPKc\", \"llvm::Instruction::getMetadataImpl(char const*) const\"},\n    {\"_ZNK4llvm11Instruction15getMetadataImplEj\", \"llvm::Instruction::getMetadataImpl(unsigned int) const\"},\n    {\"_ZNK4llvm11Instruction18getAllMetadataImplERNS_15SmallVectorImplISt4pairIjPNS_6MDNodeEEEE\", \"llvm::Instruction::getAllMetadataImpl(llvm::SmallVectorImpl<std::pair<unsigned int, llvm::MDNode*> >&) const\"},\n    {\"_ZNK4llvm11Instruction35getAllMetadataOtherThanDebugLocImplERNS_15SmallVectorImplISt4pairIjPNS_6MDNodeEEEE\", \"llvm::Instruction::getAllMetadataOtherThanDebugLocImpl(llvm::SmallVectorImpl<std::pair<unsigned int, llvm::MDNode*> >&) const\"},\n    {\"_ZN4llvm11Instruction24clearMetadataHashEntriesEv\", \"llvm::Instruction::clearMetadataHashEntries()\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorISt4pairIjPNS_6MDNodeEEEEiPKvS6_\", \"int llvm::array_pod_sort_comparator<std::pair<unsigned int, llvm::MDNode*> >(void const*, void const*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionENS_11SmallVectorISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELj2EEENS_12DenseMapInfoIS3_EENSB_ISA_EEE5eraseERKS3_\", \"llvm::DenseMap<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u>, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> > >::erase(llvm::Instruction const* const&)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIjPNS_6MDNodeEEE6appendIPKS1_IjNS_10TrackingVHIS2_EEEEEvT_SC_\", \"void llvm::SmallVectorImpl<std::pair<unsigned int, llvm::MDNode*> >::append<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> > const*>(std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> > const*, std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> > const*)\"},\n    {\"_ZN4llvm13MDNodeOperandD1Ev\", \"llvm::MDNodeOperand::~MDNodeOperand()\"},\n    {\"_ZN4llvm13MDNodeOperandD0Ev\", \"llvm::MDNodeOperand::~MDNodeOperand()\"},\n    {\"_ZN4llvm8MDStringD1Ev\", \"llvm::MDString::~MDString()\"},\n    {\"_ZN4llvm8MDStringD0Ev\", \"llvm::MDString::~MDString()\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionENS_11SmallVectorISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELj2EEENS_12DenseMapInfoIS3_EENSB_ISA_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u>, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> > >::FindAndConstruct(llvm::Instruction const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionENS_11SmallVectorISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELj2EEENS_12DenseMapInfoIS3_EENSB_ISA_EEE16InsertIntoBucketERKS3_RKSA_PS5_IS3_SA_E\", \"llvm::DenseMap<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u>, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> > >::InsertIntoBucket(llvm::Instruction const* const&, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> const&, std::pair<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_11InstructionENS_11SmallVectorISt4pairIjNS_10TrackingVHINS_6MDNodeEEEELj2EEENS_12DenseMapInfoIS3_EENSB_ISA_EEE4growEj\", \"llvm::DenseMap<llvm::Instruction const*, llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u>, llvm::DenseMapInfo<llvm::Instruction const*>, llvm::DenseMapInfo<llvm::SmallVector<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> >, 2u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm15SmallVectorImplISt4pairIjNS_10TrackingVHINS_6MDNodeEEEEEaSERKS6_\", \"llvm::SmallVectorImpl<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> > >::operator=(llvm::SmallVectorImpl<std::pair<unsigned int, llvm::TrackingVH<llvm::MDNode> > > const&)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_10TrackingVHINS_6MDNodeEEELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::TrackingVH<llvm::MDNode>, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm9StringMapIPNS_8MDStringENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::MDString*>& llvm::StringMap<llvm::MDString*, llvm::MallocAllocator>::GetOrCreateValue<llvm::MDString*>(llvm::StringRef, llvm::MDString*)\"},\n    {\"_ZN4llvm10CallbackVH7deletedEv\", \"llvm::CallbackVH::deleted()\"},\n    {\"_ZN4llvm10CallbackVH19allUsesReplacedWithEPNS_5ValueE\", \"llvm::CallbackVH::allUsesReplacedWith(llvm::Value*)\"},\n    {\"_ZN4llvm12ilist_traitsINS_14GlobalVariableEE14createSentinelEv\", \"llvm::ilist_traits<llvm::GlobalVariable>::createSentinel()\"},\n    {\"_ZN4llvm12ilist_traitsINS_11GlobalAliasEE14createSentinelEv\", \"llvm::ilist_traits<llvm::GlobalAlias>::createSentinel()\"},\n    {\"_ZN4llvm6ModuleC1ENS_9StringRefERNS_11LLVMContextE\", \"llvm::Module::Module(llvm::StringRef, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm6ModuleC2ENS_9StringRefERNS_11LLVMContextE\", \"llvm::Module::Module(llvm::StringRef, llvm::LLVMContext&)\"},\n    {\"_ZN4llvm6ModuleD1Ev\", \"llvm::Module::~Module()\"},\n    {\"_ZN4llvm6ModuleD2Ev\", \"llvm::Module::~Module()\"},\n    {\"_ZN4llvm6Module17dropAllReferencesEv\", \"llvm::Module::dropAllReferences()\"},\n    {\"_ZNK4llvm6Module13getEndiannessEv\", \"llvm::Module::getEndianness() const\"},\n    {\"_ZNK4llvm6Module14getPointerSizeEv\", \"llvm::Module::getPointerSize() const\"},\n    {\"_ZNK4llvm6Module13getNamedValueENS_9StringRefE\", \"llvm::Module::getNamedValue(llvm::StringRef) const\"},\n    {\"_ZNK4llvm6Module11getMDKindIDENS_9StringRefE\", \"llvm::Module::getMDKindID(llvm::StringRef) const\"},\n    {\"_ZNK4llvm6Module14getMDKindNamesERNS_15SmallVectorImplINS_9StringRefEEE\", \"llvm::Module::getMDKindNames(llvm::SmallVectorImpl<llvm::StringRef>&) const\"},\n    {\"_ZN4llvm6Module19getOrInsertFunctionENS_9StringRefEPKNS_12FunctionTypeENS_11AttrListPtrE\", \"llvm::Module::getOrInsertFunction(llvm::StringRef, llvm::FunctionType const*, llvm::AttrListPtr)\"},\n    {\"_ZN4llvm6Module19getOrInsertFunctionENS_9StringRefEPKNS_12FunctionTypeE\", \"llvm::Module::getOrInsertFunction(llvm::StringRef, llvm::FunctionType const*)\"},\n    {\"_ZN4llvm6Module26getOrInsertTargetIntrinsicENS_9StringRefEPKNS_12FunctionTypeENS_11AttrListPtrE\", \"llvm::Module::getOrInsertTargetIntrinsic(llvm::StringRef, llvm::FunctionType const*, llvm::AttrListPtr)\"},\n    {\"_ZN4llvm6Module19getOrInsertFunctionENS_9StringRefENS_11AttrListPtrEPKNS_4TypeEz\", \"llvm::Module::getOrInsertFunction(llvm::StringRef, llvm::AttrListPtr, llvm::Type const*, ...)\"},\n    {\"_ZN4llvm6Module19getOrInsertFunctionENS_9StringRefEPKNS_4TypeEz\", \"llvm::Module::getOrInsertFunction(llvm::StringRef, llvm::Type const*, ...)\"},\n    {\"_ZNK4llvm6Module11getFunctionENS_9StringRefE\", \"llvm::Module::getFunction(llvm::StringRef) const\"},\n    {\"_ZNK4llvm6Module17getGlobalVariableENS_9StringRefEb\", \"llvm::Module::getGlobalVariable(llvm::StringRef, bool) const\"},\n    {\"_ZN4llvm6Module17getOrInsertGlobalENS_9StringRefEPKNS_4TypeE\", \"llvm::Module::getOrInsertGlobal(llvm::StringRef, llvm::Type const*)\"},\n    {\"_ZNK4llvm6Module13getNamedAliasENS_9StringRefE\", \"llvm::Module::getNamedAlias(llvm::StringRef) const\"},\n    {\"_ZNK4llvm6Module16getNamedMetadataERKNS_5TwineE\", \"llvm::Module::getNamedMetadata(llvm::Twine const&) const\"},\n    {\"_ZN4llvm6Module24getOrInsertNamedMetadataENS_9StringRefE\", \"llvm::Module::getOrInsertNamedMetadata(llvm::StringRef)\"},\n    {\"_ZN4llvm6Module18eraseNamedMetadataEPNS_11NamedMDNodeE\", \"llvm::Module::eraseNamedMetadata(llvm::NamedMDNode*)\"},\n    {\"_ZN4llvm6Module11addTypeNameENS_9StringRefEPKNS_4TypeE\", \"llvm::Module::addTypeName(llvm::StringRef, llvm::Type const*)\"},\n    {\"_ZNK4llvm6Module13getTypeByNameENS_9StringRefE\", \"llvm::Module::getTypeByName(llvm::StringRef) const\"},\n    {\"_ZNK4llvm6Module11getTypeNameEPKNS_4TypeE\", \"llvm::Module::getTypeName(llvm::Type const*) const\"},\n    {\"_ZN4llvm6Module15setMaterializerEPNS_14GVMaterializerE\", \"llvm::Module::setMaterializer(llvm::GVMaterializer*)\"},\n    {\"_ZNK4llvm6Module16isMaterializableEPKNS_11GlobalValueE\", \"llvm::Module::isMaterializable(llvm::GlobalValue const*) const\"},\n    {\"_ZNK4llvm6Module18isDematerializableEPKNS_11GlobalValueE\", \"llvm::Module::isDematerializable(llvm::GlobalValue const*) const\"},\n    {\"_ZN4llvm6Module11MaterializeEPNS_11GlobalValueEPSs\", \"llvm::Module::Materialize(llvm::GlobalValue*, std::string*)\"},\n    {\"_ZN4llvm6Module13DematerializeEPNS_11GlobalValueE\", \"llvm::Module::Dematerialize(llvm::GlobalValue*)\"},\n    {\"_ZN4llvm6Module14MaterializeAllEPSs\", \"llvm::Module::MaterializeAll(std::string*)\"},\n    {\"_ZN4llvm6Module25MaterializeAllPermanentlyEPSs\", \"llvm::Module::MaterializeAllPermanently(std::string*)\"},\n    {\"_ZN4llvm6Module10addLibraryENS_9StringRefE\", \"llvm::Module::addLibrary(llvm::StringRef)\"},\n    {\"_ZN4llvm6Module13removeLibraryENS_9StringRefE\", \"llvm::Module::removeLibrary(llvm::StringRef)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::getList(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::getSymTab(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::addNodeToList(llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::removeNodeFromList(llvm::GlobalVariable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::transferNodesFromList(llvm::ilist_traits<llvm::GlobalVariable>&, llvm::ilist_iterator<llvm::GlobalVariable>, llvm::ilist_iterator<llvm::GlobalVariable>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_14GlobalVariableENS_6ModuleEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::GlobalVariable, llvm::Module>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::getList(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::getSymTab(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::addNodeToList(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::removeNodeFromList(llvm::Function*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::transferNodesFromList(llvm::ilist_traits<llvm::Function>&, llvm::ilist_iterator<llvm::Function>, llvm::ilist_iterator<llvm::Function>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_8FunctionENS_6ModuleEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::Function, llvm::Module>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEEC1Ev\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEEC2Ev\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::SymbolTableListTraits()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE12getListOwnerEv\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::getListOwner()\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE7getListEPS2_\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::getList(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE9getSymTabEPS2_\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::getSymTab(llvm::Module*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE5toPtrERNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::toPtr(llvm::ValueSymbolTable&)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE13addNodeToListEPS1_\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::addNodeToList(llvm::GlobalAlias*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE18removeNodeFromListEPS1_\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::removeNodeFromList(llvm::GlobalAlias*)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE21transferNodesFromListERNS_12ilist_traitsIS1_EENS_14ilist_iteratorIS1_EES8_\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::transferNodesFromList(llvm::ilist_traits<llvm::GlobalAlias>&, llvm::ilist_iterator<llvm::GlobalAlias>, llvm::ilist_iterator<llvm::GlobalAlias>)\"},\n    {\"_ZN4llvm21SymbolTableListTraitsINS_11GlobalAliasENS_6ModuleEE5toPtrEPNS_16ValueSymbolTableE\", \"llvm::SymbolTableListTraits<llvm::GlobalAlias, llvm::Module>::toPtr(llvm::ValueSymbolTable*)\"},\n    {\"_ZN4llvm9StringMapIPNS_11NamedMDNodeENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::NamedMDNode*>& llvm::StringMap<llvm::NamedMDNode*, llvm::MallocAllocator>::GetOrCreateValue<llvm::NamedMDNode*>(llvm::StringRef, llvm::NamedMDNode*)\"},\n    {\"_ZNSt6vectorIPKN4llvm4TypeESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::Type const*, std::allocator<llvm::Type const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Type const**, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > >, llvm::Type const* const&)\"},\n    {\"_ZN4llvm21ilist_sentinel_traitsINS_11GlobalAliasEE10ensureHeadERPS1_\", \"llvm::ilist_sentinel_traits<llvm::GlobalAlias>::ensureHead(llvm::GlobalAlias*&)\"},\n    {\"_ZN4llvm6iplistINS_11GlobalAliasENS_12ilist_traitsIS1_EEE5eraseENS_14ilist_iteratorIS1_EE\", \"llvm::iplist<llvm::GlobalAlias, llvm::ilist_traits<llvm::GlobalAlias> >::erase(llvm::ilist_iterator<llvm::GlobalAlias>)\"},\n    {\"_ZN4llvm6iplistINS_8FunctionENS_12ilist_traitsIS1_EEE5eraseENS_14ilist_iteratorIS1_EE\", \"llvm::iplist<llvm::Function, llvm::ilist_traits<llvm::Function> >::erase(llvm::ilist_iterator<llvm::Function>)\"},\n    {\"_ZN4llvm21ilist_sentinel_traitsINS_14GlobalVariableEE10ensureHeadERPS1_\", \"llvm::ilist_sentinel_traits<llvm::GlobalVariable>::ensureHead(llvm::GlobalVariable*&)\"},\n    {\"_ZN4llvm6iplistINS_14GlobalVariableENS_12ilist_traitsIS1_EEE5eraseENS_14ilist_iteratorIS1_EE\", \"llvm::iplist<llvm::GlobalVariable, llvm::ilist_traits<llvm::GlobalVariable> >::erase(llvm::ilist_iterator<llvm::GlobalVariable>)\"},\n    {\"_ZN4llvm6iplistINS_11GlobalAliasENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::GlobalAlias, llvm::ilist_traits<llvm::GlobalAlias> >::~iplist()\"},\n    {\"_ZN4llvm6iplistINS_14GlobalVariableENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::GlobalVariable, llvm::ilist_traits<llvm::GlobalVariable> >::~iplist()\"},\n    {\"_ZN4llvm4PassC1ENS_8PassKindERc\", \"llvm::Pass::Pass(llvm::PassKind, char&)\"},\n    {\"_ZN4llvm4PassC2ENS_8PassKindERc\", \"llvm::Pass::Pass(llvm::PassKind, char&)\"},\n    {\"_ZN4llvm4PassD0Ev\", \"llvm::Pass::~Pass()\"},\n    {\"_ZN4llvm4PassD1Ev\", \"llvm::Pass::~Pass()\"},\n    {\"_ZN4llvm4PassD2Ev\", \"llvm::Pass::~Pass()\"},\n    {\"_ZN4llvm10ModulePassD0Ev\", \"llvm::ModulePass::~ModulePass()\"},\n    {\"_ZN4llvm10ModulePassD1Ev\", \"llvm::ModulePass::~ModulePass()\"},\n    {\"_ZN4llvm10ModulePassD2Ev\", \"llvm::ModulePass::~ModulePass()\"},\n    {\"_ZNK4llvm10ModulePass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::ModulePass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZNK4llvm10ModulePass27getPotentialPassManagerTypeEv\", \"llvm::ModulePass::getPotentialPassManagerType() const\"},\n    {\"_ZNK4llvm4Pass22mustPreserveAnalysisIDERc\", \"llvm::Pass::mustPreserveAnalysisID(char&) const\"},\n    {\"_ZN4llvm4Pass17dumpPassStructureEj\", \"llvm::Pass::dumpPassStructure(unsigned int)\"},\n    {\"_ZNK4llvm4Pass11getPassNameEv\", \"llvm::Pass::getPassName() const\"},\n    {\"_ZN4llvm4Pass18preparePassManagerERNS_7PMStackE\", \"llvm::Pass::preparePassManager(llvm::PMStack&)\"},\n    {\"_ZNK4llvm4Pass27getPotentialPassManagerTypeEv\", \"llvm::Pass::getPotentialPassManagerType() const\"},\n    {\"_ZNK4llvm4Pass16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::Pass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm4Pass13releaseMemoryEv\", \"llvm::Pass::releaseMemory()\"},\n    {\"_ZNK4llvm4Pass14verifyAnalysisEv\", \"llvm::Pass::verifyAnalysis() const\"},\n    {\"_ZN4llvm4Pass26getAdjustedAnalysisPointerEPKv\", \"llvm::Pass::getAdjustedAnalysisPointer(void const*)\"},\n    {\"_ZN4llvm4Pass18getAsImmutablePassEv\", \"llvm::Pass::getAsImmutablePass()\"},\n    {\"_ZN4llvm4Pass18getAsPMDataManagerEv\", \"llvm::Pass::getAsPMDataManager()\"},\n    {\"_ZN4llvm4Pass11setResolverEPNS_16AnalysisResolverE\", \"llvm::Pass::setResolver(llvm::AnalysisResolver*)\"},\n    {\"_ZNK4llvm4Pass5printERNS_11raw_ostreamEPKNS_6ModuleE\", \"llvm::Pass::print(llvm::raw_ostream&, llvm::Module const*) const\"},\n    {\"_ZNK4llvm4Pass4dumpEv\", \"llvm::Pass::dump() const\"},\n    {\"_ZN4llvm13ImmutablePassD0Ev\", \"llvm::ImmutablePass::~ImmutablePass()\"},\n    {\"_ZN4llvm13ImmutablePassD1Ev\", \"llvm::ImmutablePass::~ImmutablePass()\"},\n    {\"_ZN4llvm13ImmutablePassD2Ev\", \"llvm::ImmutablePass::~ImmutablePass()\"},\n    {\"_ZN4llvm13ImmutablePass14initializePassEv\", \"llvm::ImmutablePass::initializePass()\"},\n    {\"_ZNK4llvm12FunctionPass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::FunctionPass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZN4llvm12FunctionPass16doInitializationERNS_6ModuleE\", \"llvm::FunctionPass::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm12FunctionPass14doFinalizationERNS_6ModuleE\", \"llvm::FunctionPass::doFinalization(llvm::Module&)\"},\n    {\"_ZNK4llvm12FunctionPass27getPotentialPassManagerTypeEv\", \"llvm::FunctionPass::getPotentialPassManagerType() const\"},\n    {\"_ZNK4llvm14BasicBlockPass17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::BasicBlockPass::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZN4llvm14BasicBlockPass16doInitializationERNS_6ModuleE\", \"llvm::BasicBlockPass::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm14BasicBlockPass16doInitializationERNS_8FunctionE\", \"llvm::BasicBlockPass::doInitialization(llvm::Function&)\"},\n    {\"_ZN4llvm14BasicBlockPass14doFinalizationERNS_8FunctionE\", \"llvm::BasicBlockPass::doFinalization(llvm::Function&)\"},\n    {\"_ZN4llvm14BasicBlockPass14doFinalizationERNS_6ModuleE\", \"llvm::BasicBlockPass::doFinalization(llvm::Module&)\"},\n    {\"_ZNK4llvm14BasicBlockPass27getPotentialPassManagerTypeEv\", \"llvm::BasicBlockPass::getPotentialPassManagerType() const\"},\n    {\"_ZN4llvm4Pass14lookupPassInfoEPKv\", \"llvm::Pass::lookupPassInfo(void const*)\"},\n    {\"_ZN4llvm4Pass14lookupPassInfoENS_9StringRefE\", \"llvm::Pass::lookupPassInfo(llvm::StringRef)\"},\n    {\"_ZNK4llvm8PassInfo10createPassEv\", \"llvm::PassInfo::createPass() const\"},\n    {\"_ZN4llvm14RegisterAGBaseC1EPKcPKvS4_b\", \"llvm::RegisterAGBase::RegisterAGBase(char const*, void const*, void const*, bool)\"},\n    {\"_ZN4llvm14RegisterAGBaseC2EPKcPKvS4_b\", \"llvm::RegisterAGBase::RegisterAGBase(char const*, void const*, void const*, bool)\"},\n    {\"_ZN4llvm24PassRegistrationListenerC1Ev\", \"llvm::PassRegistrationListener::PassRegistrationListener()\"},\n    {\"_ZN4llvm24PassRegistrationListenerD0Ev\", \"llvm::PassRegistrationListener::~PassRegistrationListener()\"},\n    {\"_ZN4llvm24PassRegistrationListenerD1Ev\", \"llvm::PassRegistrationListener::~PassRegistrationListener()\"},\n    {\"_ZN4llvm24PassRegistrationListenerD2Ev\", \"llvm::PassRegistrationListener::~PassRegistrationListener()\"},\n    {\"_ZThn16_N4llvm14PassNameParserD0Ev\", \"non-virtual thunk to llvm::PassNameParser::~PassNameParser()\"},\n    {\"_ZN4llvm14PassNameParserD0Ev\", \"llvm::PassNameParser::~PassNameParser()\"},\n    {\"_ZN4llvm14PassNameParserD1Ev\", \"llvm::PassNameParser::~PassNameParser()\"},\n    {\"_ZThn16_N4llvm14PassNameParserD1Ev\", \"non-virtual thunk to llvm::PassNameParser::~PassNameParser()\"},\n    {\"_ZN4llvm14PassNameParserD2Ev\", \"llvm::PassNameParser::~PassNameParser()\"},\n    {\"_ZN4llvm13AnalysisUsage15setPreservesCFGEv\", \"llvm::AnalysisUsage::setPreservesCFG()\"},\n    {\"_ZN12_GLOBAL__N_116GetCFGOnlyPassesD1Ev\", \"(anonymous namespace)::GetCFGOnlyPasses::~GetCFGOnlyPasses()\"},\n    {\"_ZN4llvm13AnalysisUsage12addPreservedENS_9StringRefE\", \"llvm::AnalysisUsage::addPreserved(llvm::StringRef)\"},\n    {\"_ZN4llvm13AnalysisUsage13addRequiredIDEPKv\", \"llvm::AnalysisUsage::addRequiredID(void const*)\"},\n    {\"_ZN4llvm13AnalysisUsage13addRequiredIDERc\", \"llvm::AnalysisUsage::addRequiredID(char&)\"},\n    {\"_ZN4llvm13AnalysisUsage23addRequiredTransitiveIDERc\", \"llvm::AnalysisUsage::addRequiredTransitiveID(char&)\"},\n    {\"_ZN12_GLOBAL__N_116GetCFGOnlyPassesD0Ev\", \"(anonymous namespace)::GetCFGOnlyPasses::~GetCFGOnlyPasses()\"},\n    {\"_ZN12_GLOBAL__N_116GetCFGOnlyPasses13passEnumerateEPKN4llvm8PassInfoE\", \"(anonymous namespace)::GetCFGOnlyPasses::passEnumerate(llvm::PassInfo const*)\"},\n    {\"_ZN4llvm4Pass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::Pass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZN4llvm14BasicBlockPassD1Ev\", \"llvm::BasicBlockPass::~BasicBlockPass()\"},\n    {\"_ZN4llvm14BasicBlockPassD0Ev\", \"llvm::BasicBlockPass::~BasicBlockPass()\"},\n    {\"_ZN4llvm24PassRegistrationListener14passRegisteredEPKNS_8PassInfoE\", \"llvm::PassRegistrationListener::passRegistered(llvm::PassInfo const*)\"},\n    {\"_ZN4llvm24PassRegistrationListener13passEnumerateEPKNS_8PassInfoE\", \"llvm::PassRegistrationListener::passEnumerate(llvm::PassInfo const*)\"},\n    {\"_ZN4llvm14PassNameParser14passRegisteredEPKNS_8PassInfoE\", \"llvm::PassNameParser::passRegistered(llvm::PassInfo const*)\"},\n    {\"_ZN4llvm14PassNameParser13passEnumerateEPKNS_8PassInfoE\", \"llvm::PassNameParser::passEnumerate(llvm::PassInfo const*)\"},\n    {\"_ZNK4llvm14PassNameParser17ignorablePassImplEPKNS_8PassInfoE\", \"llvm::PassNameParser::ignorablePassImpl(llvm::PassInfo const*) const\"},\n    {\"_ZNK4llvm14PassNameParser15printOptionInfoERKNS_2cl6OptionEm\", \"llvm::PassNameParser::printOptionInfo(llvm::cl::Option const&, unsigned long) const\"},\n    {\"_ZNK4llvm2cl6parserIPKNS_8PassInfoEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::PassInfo const*>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserIPKNS_8PassInfoEE9getOptionEj\", \"llvm::cl::parser<llvm::PassInfo const*>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserIPKNS_8PassInfoEE14getDescriptionEj\", \"llvm::cl::parser<llvm::PassInfo const*>::getDescription(unsigned int) const\"},\n    {\"_ZThn16_NK4llvm14PassNameParser15printOptionInfoERKNS_2cl6OptionEm\", \"non-virtual thunk to llvm::PassNameParser::printOptionInfo(llvm::cl::Option const&, unsigned long) const\"},\n    {\"_ZN4llvm14PassNameParser11ValLessThanEPKvS2_\", \"llvm::PassNameParser::ValLessThan(void const*, void const*)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserIPKNS_8PassInfoEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::PassInfo const*>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserIPKNS_8PassInfoEED1Ev\", \"llvm::cl::parser<llvm::PassInfo const*>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIPKNS_8PassInfoEED0Ev\", \"llvm::cl::parser<llvm::PassInfo const*>::~parser()\"},\n    {\"_ZNK4llvm13PMDataManager31isPassDebuggingExecutionsOrMoreEv\", \"llvm::PMDataManager::isPassDebuggingExecutionsOrMore() const\"},\n    {\"_ZNK4llvm27PassManagerPrettyStackEntry5printERNS_11raw_ostreamE\", \"llvm::PassManagerPrettyStackEntry::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm17PMTopLevelManagerC1EPNS_13PMDataManagerE\", \"llvm::PMTopLevelManager::PMTopLevelManager(llvm::PMDataManager*)\"},\n    {\"_ZN4llvm17PMTopLevelManagerC2EPNS_13PMDataManagerE\", \"llvm::PMTopLevelManager::PMTopLevelManager(llvm::PMDataManager*)\"},\n    {\"_ZN4llvm7PMStack4pushEPNS_13PMDataManagerE\", \"llvm::PMStack::push(llvm::PMDataManager*)\"},\n    {\"_ZN4llvm17PMTopLevelManager11setLastUserERKNS_15SmallVectorImplIPNS_4PassEEES3_\", \"llvm::PMTopLevelManager::setLastUser(llvm::SmallVectorImpl<llvm::Pass*> const&, llvm::Pass*)\"},\n    {\"_ZN4llvm17PMTopLevelManager17findAnalysisUsageEPNS_4PassE\", \"llvm::PMTopLevelManager::findAnalysisUsage(llvm::Pass*)\"},\n    {\"_ZN4llvm17PMTopLevelManager16findAnalysisPassEPKv\", \"llvm::PMTopLevelManager::findAnalysisPass(void const*)\"},\n    {\"_ZN4llvm17PMTopLevelManager15collectLastUsesERNS_15SmallVectorImplIPNS_4PassEEES3_\", \"llvm::PMTopLevelManager::collectLastUses(llvm::SmallVectorImpl<llvm::Pass*>&, llvm::Pass*)\"},\n    {\"_ZN4llvm17PMTopLevelManager12schedulePassEPNS_4PassE\", \"llvm::PMTopLevelManager::schedulePass(llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager16findAnalysisPassEPKvb\", \"llvm::PMDataManager::findAnalysisPass(void const*, bool)\"},\n    {\"_ZNK4llvm17PMTopLevelManager10dumpPassesEv\", \"llvm::PMTopLevelManager::dumpPasses() const\"},\n    {\"_ZNK4llvm17PMTopLevelManager13dumpArgumentsEv\", \"llvm::PMTopLevelManager::dumpArguments() const\"},\n    {\"_ZNK4llvm13PMDataManager17dumpPassArgumentsEv\", \"llvm::PMDataManager::dumpPassArguments() const\"},\n    {\"_ZN4llvm17PMTopLevelManager25initializeAllAnalysisInfoEv\", \"llvm::PMTopLevelManager::initializeAllAnalysisInfo()\"},\n    {\"_ZN4llvm17PMTopLevelManagerD0Ev\", \"llvm::PMTopLevelManager::~PMTopLevelManager()\"},\n    {\"_ZN4llvm17PMTopLevelManagerD1Ev\", \"llvm::PMTopLevelManager::~PMTopLevelManager()\"},\n    {\"_ZN4llvm17PMTopLevelManagerD2Ev\", \"llvm::PMTopLevelManager::~PMTopLevelManager()\"},\n    {\"_ZN4llvm13PMDataManager23recordAvailableAnalysisEPNS_4PassE\", \"llvm::PMDataManager::recordAvailableAnalysis(llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager27preserveHigherLevelAnalysisEPNS_4PassE\", \"llvm::PMDataManager::preserveHigherLevelAnalysis(llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager23verifyPreservedAnalysisEPNS_4PassE\", \"llvm::PMDataManager::verifyPreservedAnalysis(llvm::Pass*)\"},\n    {\"_ZN4llvm12getPassTimerEPNS_4PassE\", \"llvm::getPassTimer(llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager26removeNotPreservedAnalysisEPNS_4PassE\", \"llvm::PMDataManager::removeNotPreservedAnalysis(llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager16removeDeadPassesEPNS_4PassENS_9StringRefENS_19PassDebuggingStringE\", \"llvm::PMDataManager::removeDeadPasses(llvm::Pass*, llvm::StringRef, llvm::PassDebuggingString)\"},\n    {\"_ZN4llvm13PMDataManager8freePassEPNS_4PassENS_9StringRefENS_19PassDebuggingStringE\", \"llvm::PMDataManager::freePass(llvm::Pass*, llvm::StringRef, llvm::PassDebuggingString)\"},\n    {\"_ZN4llvm13PMDataManager12dumpPassInfoEPNS_4PassENS_19PassDebuggingStringES3_NS_9StringRefE\", \"llvm::PMDataManager::dumpPassInfo(llvm::Pass*, llvm::PassDebuggingString, llvm::PassDebuggingString, llvm::StringRef)\"},\n    {\"_ZN4llvm13PMDataManager3addEPNS_4PassEb\", \"llvm::PMDataManager::add(llvm::Pass*, bool)\"},\n    {\"_ZN4llvm13PMDataManager23collectRequiredAnalysisERNS_15SmallVectorImplIPNS_4PassEEERNS1_IPKvEES3_\", \"llvm::PMDataManager::collectRequiredAnalysis(llvm::SmallVectorImpl<llvm::Pass*>&, llvm::SmallVectorImpl<void const*>&, llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager22initializeAnalysisImplEPNS_4PassE\", \"llvm::PMDataManager::initializeAnalysisImpl(llvm::Pass*)\"},\n    {\"_ZNK4llvm13PMDataManager12dumpLastUsesEPNS_4PassEj\", \"llvm::PMDataManager::dumpLastUses(llvm::Pass*, unsigned int) const\"},\n    {\"_ZNK4llvm13PMDataManager15dumpRequiredSetEPKNS_4PassE\", \"llvm::PMDataManager::dumpRequiredSet(llvm::Pass const*) const\"},\n    {\"_ZNK4llvm13PMDataManager17dumpAnalysisUsageENS_9StringRefEPKNS_4PassERKNS_11SmallVectorIPKvLj32EEE\", \"llvm::PMDataManager::dumpAnalysisUsage(llvm::StringRef, llvm::Pass const*, llvm::SmallVector<void const*, 32u> const&) const\"},\n    {\"_ZNK4llvm13PMDataManager16dumpPreservedSetEPKNS_4PassE\", \"llvm::PMDataManager::dumpPreservedSet(llvm::Pass const*) const\"},\n    {\"_ZN4llvm13PMDataManager25addLowerLevelRequiredPassEPNS_4PassES2_\", \"llvm::PMDataManager::addLowerLevelRequiredPass(llvm::Pass*, llvm::Pass*)\"},\n    {\"_ZN4llvm13PMDataManager15getOnTheFlyPassEPNS_4PassEPKvRNS_8FunctionE\", \"llvm::PMDataManager::getOnTheFlyPass(llvm::Pass*, void const*, llvm::Function&)\"},\n    {\"_ZN4llvm13PMDataManagerD0Ev\", \"llvm::PMDataManager::~PMDataManager()\"},\n    {\"_ZN4llvm13PMDataManagerD1Ev\", \"llvm::PMDataManager::~PMDataManager()\"},\n    {\"_ZN4llvm13PMDataManagerD2Ev\", \"llvm::PMDataManager::~PMDataManager()\"},\n    {\"_ZNK4llvm16AnalysisResolver22getAnalysisIfAvailableEPKvb\", \"llvm::AnalysisResolver::getAnalysisIfAvailable(void const*, bool) const\"},\n    {\"_ZN4llvm16AnalysisResolver12findImplPassEPNS_4PassEPKvRNS_8FunctionE\", \"llvm::AnalysisResolver::findImplPass(llvm::Pass*, void const*, llvm::Function&)\"},\n    {\"_ZN4llvm19FunctionPassManagerC1EPNS_6ModuleE\", \"llvm::FunctionPassManager::FunctionPassManager(llvm::Module*)\"},\n    {\"_ZN4llvm19FunctionPassManagerC2EPNS_6ModuleE\", \"llvm::FunctionPassManager::FunctionPassManager(llvm::Module*)\"},\n    {\"_ZN4llvm19FunctionPassManagerD0Ev\", \"llvm::FunctionPassManager::~FunctionPassManager()\"},\n    {\"_ZN4llvm19FunctionPassManagerD1Ev\", \"llvm::FunctionPassManager::~FunctionPassManager()\"},\n    {\"_ZN4llvm19FunctionPassManagerD2Ev\", \"llvm::FunctionPassManager::~FunctionPassManager()\"},\n    {\"_ZN4llvm15PassManagerBaseD2Ev\", \"llvm::PassManagerBase::~PassManagerBase()\"},\n    {\"_ZN4llvm19FunctionPassManager7addImplEPNS_4PassE\", \"llvm::FunctionPassManager::addImpl(llvm::Pass*)\"},\n    {\"_ZN4llvm19FunctionPassManager3addEPNS_4PassE\", \"llvm::FunctionPassManager::add(llvm::Pass*)\"},\n    {\"_ZN4llvm19FunctionPassManager3runERNS_8FunctionE\", \"llvm::FunctionPassManager::run(llvm::Function&)\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl3runERNS_8FunctionE\", \"llvm::FunctionPassManagerImpl::run(llvm::Function&)\"},\n    {\"_ZN4llvm19FunctionPassManager16doInitializationEv\", \"llvm::FunctionPassManager::doInitialization()\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl16doInitializationERNS_6ModuleE\", \"llvm::FunctionPassManagerImpl::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm19FunctionPassManager14doFinalizationEv\", \"llvm::FunctionPassManager::doFinalization()\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl14doFinalizationERNS_6ModuleE\", \"llvm::FunctionPassManagerImpl::doFinalization(llvm::Module&)\"},\n    {\"_ZN4llvm13FPPassManager16doInitializationERNS_6ModuleE\", \"llvm::FPPassManager::doInitialization(llvm::Module&)\"},\n    {\"_ZN4llvm13FPPassManager14doFinalizationERNS_6ModuleE\", \"llvm::FPPassManager::doFinalization(llvm::Module&)\"},\n    {\"_ZN4llvm13FPPassManager7cleanupEv\", \"llvm::FPPassManager::cleanup()\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl21releaseMemoryOnTheFlyEv\", \"llvm::FunctionPassManagerImpl::releaseMemoryOnTheFly()\"},\n    {\"_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE\", \"llvm::FPPassManager::runOnFunction(llvm::Function&)\"},\n    {\"_ZN4llvm13FPPassManager17dumpPassStructureEj\", \"llvm::FPPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE\", \"llvm::FPPassManager::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm13MPPassManager11runOnModuleERNS_6ModuleE\", \"llvm::MPPassManager::runOnModule(llvm::Module&)\"},\n    {\"_ZThn32_N4llvm13MPPassManager25addLowerLevelRequiredPassEPNS_4PassES2_\", \"non-virtual thunk to llvm::MPPassManager::addLowerLevelRequiredPass(llvm::Pass*, llvm::Pass*)\"},\n    {\"_ZN4llvm13MPPassManager25addLowerLevelRequiredPassEPNS_4PassES2_\", \"llvm::MPPassManager::addLowerLevelRequiredPass(llvm::Pass*, llvm::Pass*)\"},\n    {\"_ZThn32_N4llvm13MPPassManager15getOnTheFlyPassEPNS_4PassEPKvRNS_8FunctionE\", \"non-virtual thunk to llvm::MPPassManager::getOnTheFlyPass(llvm::Pass*, void const*, llvm::Function&)\"},\n    {\"_ZN4llvm13MPPassManager15getOnTheFlyPassEPNS_4PassEPKvRNS_8FunctionE\", \"llvm::MPPassManager::getOnTheFlyPass(llvm::Pass*, void const*, llvm::Function&)\"},\n    {\"_ZN4llvm15PassManagerImpl3runERNS_6ModuleE\", \"llvm::PassManagerImpl::run(llvm::Module&)\"},\n    {\"_ZN4llvm11PassManagerC1Ev\", \"llvm::PassManager::PassManager()\"},\n    {\"_ZN4llvm11PassManagerC2Ev\", \"llvm::PassManager::PassManager()\"},\n    {\"_ZN4llvm11PassManagerD0Ev\", \"llvm::PassManager::~PassManager()\"},\n    {\"_ZN4llvm11PassManagerD1Ev\", \"llvm::PassManager::~PassManager()\"},\n    {\"_ZN4llvm11PassManagerD2Ev\", \"llvm::PassManager::~PassManager()\"},\n    {\"_ZN4llvm11PassManager7addImplEPNS_4PassE\", \"llvm::PassManager::addImpl(llvm::Pass*)\"},\n    {\"_ZN4llvm11PassManager3addEPNS_4PassE\", \"llvm::PassManager::add(llvm::Pass*)\"},\n    {\"_ZN4llvm11PassManager3runERNS_6ModuleE\", \"llvm::PassManager::run(llvm::Module&)\"},\n    {\"_ZN4llvm7PMStack3popEv\", \"llvm::PMStack::pop()\"},\n    {\"_ZNK4llvm7PMStack4dumpEv\", \"llvm::PMStack::dump() const\"},\n    {\"_ZN4llvm10ModulePass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::ModulePass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZN4llvm12FunctionPass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::FunctionPass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZN4llvm14BasicBlockPass17assignPassManagerERNS_7PMStackENS_15PassManagerTypeE\", \"llvm::BasicBlockPass::assignPassManager(llvm::PMStack&, llvm::PassManagerType)\"},\n    {\"_ZN4llvm15PassManagerBaseD0Ev\", \"llvm::PassManagerBase::~PassManagerBase()\"},\n    {\"_ZN4llvm15PassManagerBaseD1Ev\", \"llvm::PassManagerBase::~PassManagerBase()\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManagerD1Ev\", \"(anonymous namespace)::BBPassManager::~BBPassManager()\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManagerD0Ev\", \"(anonymous namespace)::BBPassManager::~BBPassManager()\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager9getAsPassEv\", \"(anonymous namespace)::BBPassManager::getAsPass()\"},\n    {\"_ZNK12_GLOBAL__N_113BBPassManager18getPassManagerTypeEv\", \"(anonymous namespace)::BBPassManager::getPassManagerType() const\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::BBPassManager::runOnFunction(llvm::Function&)\"},\n    {\"_ZNK12_GLOBAL__N_113BBPassManager16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::BBPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::BBPassManager::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager14doFinalizationERN4llvm6ModuleE\", \"(anonymous namespace)::BBPassManager::doFinalization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager18getAsPMDataManagerEv\", \"(anonymous namespace)::BBPassManager::getAsPMDataManager()\"},\n    {\"_ZNK12_GLOBAL__N_113BBPassManager11getPassNameEv\", \"(anonymous namespace)::BBPassManager::getPassName() const\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager17dumpPassStructureEj\", \"(anonymous namespace)::BBPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManagerD1Ev\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::~BBPassManager()\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManagerD0Ev\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::~BBPassManager()\"},\n    {\"_ZThn392_NK12_GLOBAL__N_113BBPassManager11getPassNameEv\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::getPassName() const\"},\n    {\"_ZThn392_NK12_GLOBAL__N_113BBPassManager16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManager18getAsPMDataManagerEv\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::getAsPMDataManager()\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManager17dumpPassStructureEj\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManager16doInitializationERN4llvm6ModuleE\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::doInitialization(llvm::Module&)\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManager13runOnFunctionERN4llvm8FunctionE\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::runOnFunction(llvm::Function&)\"},\n    {\"_ZThn392_N12_GLOBAL__N_113BBPassManager14doFinalizationERN4llvm6ModuleE\", \"non-virtual thunk to (anonymous namespace)::BBPassManager::doFinalization(llvm::Module&)\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_110TimingInfoEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::TimingInfo>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_110TimingInfoEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::TimingInfo>::call(void*)\"},\n    {\"_ZN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEED1Ev\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::~opt()\"},\n    {\"_ZN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEED1Ev\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::~list()\"},\n    {\"_ZN4llvm27PassManagerPrettyStackEntryD1Ev\", \"llvm::PassManagerPrettyStackEntry::~PassManagerPrettyStackEntry()\"},\n    {\"_ZN4llvm27PassManagerPrettyStackEntryD0Ev\", \"llvm::PassManagerPrettyStackEntry::~PassManagerPrettyStackEntry()\"},\n    {\"_ZNK4llvm13PMDataManager21getNumContainedPassesEv\", \"llvm::PMDataManager::getNumContainedPasses() const\"},\n    {\"_ZNK4llvm13PMDataManager18getPassManagerTypeEv\", \"llvm::PMDataManager::getPassManagerType() const\"},\n    {\"_ZN4llvm13FPPassManagerD1Ev\", \"llvm::FPPassManager::~FPPassManager()\"},\n    {\"_ZN4llvm13FPPassManagerD0Ev\", \"llvm::FPPassManager::~FPPassManager()\"},\n    {\"_ZNK4llvm13FPPassManager11getPassNameEv\", \"llvm::FPPassManager::getPassName() const\"},\n    {\"_ZNK4llvm13FPPassManager16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::FPPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13FPPassManager18getAsPMDataManagerEv\", \"llvm::FPPassManager::getAsPMDataManager()\"},\n    {\"_ZN4llvm13FPPassManager9getAsPassEv\", \"llvm::FPPassManager::getAsPass()\"},\n    {\"_ZNK4llvm13FPPassManager18getPassManagerTypeEv\", \"llvm::FPPassManager::getPassManagerType() const\"},\n    {\"_ZThn32_N4llvm13FPPassManagerD1Ev\", \"non-virtual thunk to llvm::FPPassManager::~FPPassManager()\"},\n    {\"_ZThn32_N4llvm13FPPassManagerD0Ev\", \"non-virtual thunk to llvm::FPPassManager::~FPPassManager()\"},\n    {\"_ZThn32_N4llvm13FPPassManager9getAsPassEv\", \"non-virtual thunk to llvm::FPPassManager::getAsPass()\"},\n    {\"_ZThn32_NK4llvm13FPPassManager18getPassManagerTypeEv\", \"non-virtual thunk to llvm::FPPassManager::getPassManagerType() const\"},\n    {\"_ZNK4llvm17PMTopLevelManager23getNumContainedManagersEv\", \"llvm::PMTopLevelManager::getNumContainedManagers() const\"},\n    {\"_ZN4llvm13MPPassManagerD1Ev\", \"llvm::MPPassManager::~MPPassManager()\"},\n    {\"_ZN4llvm13MPPassManagerD0Ev\", \"llvm::MPPassManager::~MPPassManager()\"},\n    {\"_ZNK4llvm13MPPassManager11getPassNameEv\", \"llvm::MPPassManager::getPassName() const\"},\n    {\"_ZNK4llvm13MPPassManager17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::MPPassManager::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZNK4llvm13MPPassManager16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::MPPassManager::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm13MPPassManager18getAsPMDataManagerEv\", \"llvm::MPPassManager::getAsPMDataManager()\"},\n    {\"_ZN4llvm13MPPassManager17dumpPassStructureEj\", \"llvm::MPPassManager::dumpPassStructure(unsigned int)\"},\n    {\"_ZN4llvm13MPPassManager9getAsPassEv\", \"llvm::MPPassManager::getAsPass()\"},\n    {\"_ZNK4llvm13MPPassManager18getPassManagerTypeEv\", \"llvm::MPPassManager::getPassManagerType() const\"},\n    {\"_ZThn32_N4llvm13MPPassManagerD1Ev\", \"non-virtual thunk to llvm::MPPassManager::~MPPassManager()\"},\n    {\"_ZThn32_N4llvm13MPPassManagerD0Ev\", \"non-virtual thunk to llvm::MPPassManager::~MPPassManager()\"},\n    {\"_ZThn32_N4llvm13MPPassManager9getAsPassEv\", \"non-virtual thunk to llvm::MPPassManager::getAsPass()\"},\n    {\"_ZThn32_NK4llvm13MPPassManager18getPassManagerTypeEv\", \"non-virtual thunk to llvm::MPPassManager::getPassManagerType() const\"},\n    {\"_ZNSt6vectorIPN4llvm13PMDataManagerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::PMDataManager*, std::allocator<llvm::PMDataManager*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::PMDataManager**, std::vector<llvm::PMDataManager*, std::allocator<llvm::PMDataManager*> > >, llvm::PMDataManager* const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm4PassESt4pairIKS2_PNS0_23FunctionPassManagerImplEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<llvm::Pass*, std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*>, std::_Select1st<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> >, std::less<llvm::Pass*>, std::allocator<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> >, std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm4PassESt4pairIKS2_PNS0_23FunctionPassManagerImplEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<llvm::Pass*, std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*>, std::_Select1st<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> >, std::less<llvm::Pass*>, std::allocator<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> > >::_M_insert_unique(std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKvSt4pairIKS1_PN4llvm4PassEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_ESF_\", \"std::_Rb_tree<void const*, std::pair<void const* const, llvm::Pass*>, std::_Select1st<std::pair<void const* const, llvm::Pass*> >, std::less<void const*>, std::allocator<std::pair<void const* const, llvm::Pass*> > >::erase(std::_Rb_tree_iterator<std::pair<void const* const, llvm::Pass*> >, std::_Rb_tree_iterator<std::pair<void const* const, llvm::Pass*> >)\"},\n    {\"_ZNSt8_Rb_treeIPKvSt4pairIKS1_PN4llvm4PassEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<void const*, std::pair<void const* const, llvm::Pass*>, std::_Select1st<std::pair<void const* const, llvm::Pass*> >, std::less<void const*>, std::allocator<std::pair<void const* const, llvm::Pass*> > >::_M_erase(std::_Rb_tree_node<std::pair<void const* const, llvm::Pass*> >*)\"},\n    {\"_ZSt6__findIPKPKvS1_ET_S4_S4_RKT0_St26random_access_iterator_tag\", \"void const* const* std::__find<void const* const*, void const*>(void const* const*, void const* const*, void const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt8_Rb_treeIPKvSt4pairIKS1_PN4llvm4PassEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_\", \"std::_Rb_tree<void const*, std::pair<void const* const, llvm::Pass*>, std::_Select1st<std::pair<void const* const, llvm::Pass*> >, std::less<void const*>, std::allocator<std::pair<void const* const, llvm::Pass*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<void const* const, llvm::Pass*> >, std::pair<void const* const, llvm::Pass*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKvSt4pairIKS1_PN4llvm4PassEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE16_M_insert_uniqueERKS7_\", \"std::_Rb_tree<void const*, std::pair<void const* const, llvm::Pass*>, std::_Select1st<std::pair<void const* const, llvm::Pass*> >, std::less<void const*>, std::allocator<std::pair<void const* const, llvm::Pass*> > >::_M_insert_unique(std::pair<void const* const, llvm::Pass*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassENS_11SmallPtrSetIS2_Lj8EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16FindAndConstructERKS2_\", \"llvm::DenseMap<llvm::Pass*, llvm::SmallPtrSet<llvm::Pass*, 8u>, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Pass*, 8u> > >::FindAndConstruct(llvm::Pass* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassENS_11SmallPtrSetIS2_Lj8EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Pass*, llvm::SmallPtrSet<llvm::Pass*, 8u>, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Pass*, 8u> > >::InsertIntoBucket(llvm::Pass* const&, llvm::SmallPtrSet<llvm::Pass*, 8u> const&, std::pair<llvm::Pass*, llvm::SmallPtrSet<llvm::Pass*, 8u> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassENS_11SmallPtrSetIS2_Lj8EEENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Pass*, llvm::SmallPtrSet<llvm::Pass*, 8u>, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::SmallPtrSet<llvm::Pass*, 8u> > >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassEPNS_13AnalysisUsageENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Pass*, llvm::AnalysisUsage*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::AnalysisUsage*> >::InsertIntoBucket(llvm::Pass* const&, llvm::AnalysisUsage* const&, std::pair<llvm::Pass*, llvm::AnalysisUsage*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassEPNS_13AnalysisUsageENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Pass*, llvm::AnalysisUsage*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::AnalysisUsage*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassES2_NS_12DenseMapInfoIS2_EES4_E16InsertIntoBucketERKS2_S7_PSt4pairIS2_S2_E\", \"llvm::DenseMap<llvm::Pass*, llvm::Pass*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::Pass*> >::InsertIntoBucket(llvm::Pass* const&, llvm::Pass* const&, std::pair<llvm::Pass*, llvm::Pass*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassES2_NS_12DenseMapInfoIS2_EES4_E4growEj\", \"llvm::DenseMap<llvm::Pass*, llvm::Pass*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::Pass*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEE14getOptionWidthEv\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEE15printOptionInfoEm\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEED0Ev\", \"llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::~list()\"},\n    {\"_ZN4llvm2cl6parserIPKNS_8PassInfoEE5parseERNS0_6OptionENS_9StringRefES8_RS4_\", \"llvm::cl::parser<llvm::PassInfo const*>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::PassInfo const*&)\"},\n    {\"_ZNSt6vectorIPKN4llvm8PassInfoESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::PassInfo const**, std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> > >, llvm::PassInfo const* const&)\"},\n    {\"_ZN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEE16handleOccurrenceEjNS_9StringRefES6_\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEE14getOptionWidthEv\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEE15printOptionInfoEm\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEED0Ev\", \"llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserINS_14PassDebugLevelEE5parseERNS0_6OptionENS_9StringRefES6_RS2_\", \"llvm::cl::parser<llvm::PassDebugLevel>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::PassDebugLevel&)\"},\n    {\"_ZNK4llvm2cl11ValuesClassIiE5applyINS0_3optINS_14PassDebugLevelELb0ENS0_6parserIS5_EEEEEEvRT_\", \"void llvm::cl::ValuesClass<int>::apply<llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> > >(llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >&) const\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseINS_2cl6parserINS_14PassDebugLevelEE10OptionInfoELb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm::cl::parser<llvm::PassDebugLevel>::OptionInfo, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm2cl6parserINS_14PassDebugLevelEED1Ev\", \"llvm::cl::parser<llvm::PassDebugLevel>::~parser()\"},\n    {\"_ZN4llvm2cl6parserINS_14PassDebugLevelEED0Ev\", \"llvm::cl::parser<llvm::PassDebugLevel>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserINS_14PassDebugLevelEE13getNumOptionsEv\", \"llvm::cl::parser<llvm::PassDebugLevel>::getNumOptions() const\"},\n    {\"_ZNK4llvm2cl6parserINS_14PassDebugLevelEE9getOptionEj\", \"llvm::cl::parser<llvm::PassDebugLevel>::getOption(unsigned int) const\"},\n    {\"_ZNK4llvm2cl6parserINS_14PassDebugLevelEE14getDescriptionEj\", \"llvm::cl::parser<llvm::PassDebugLevel>::getDescription(unsigned int) const\"},\n    {\"_ZN4llvm13MPPassManagerD2Ev\", \"llvm::MPPassManager::~MPPassManager()\"},\n    {\"_ZNSt8_Rb_treeIPN4llvm4PassESt4pairIKS2_PNS0_23FunctionPassManagerImplEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E\", \"std::_Rb_tree<llvm::Pass*, std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*>, std::_Select1st<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> >, std::less<llvm::Pass*>, std::allocator<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Pass* const, llvm::FunctionPassManagerImpl*> >*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassEPNS_5TimerENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Pass*, llvm::Timer*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::Timer*> >::InsertIntoBucket(llvm::Pass* const&, llvm::Timer* const&, std::pair<llvm::Pass*, llvm::Timer*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4PassEPNS_5TimerENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Pass*, llvm::Timer*, llvm::DenseMapInfo<llvm::Pass*>, llvm::DenseMapInfo<llvm::Timer*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15PassManagerImplC2Ei\", \"llvm::PassManagerImpl::PassManagerImpl(int)\"},\n    {\"_ZN4llvm15PassManagerImplD1Ev\", \"llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZN4llvm15PassManagerImplD0Ev\", \"llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZNK4llvm15PassManagerImpl17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::PassManagerImpl::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZNK4llvm15PassManagerImpl16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::PassManagerImpl::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm15PassManagerImpl18getAsPMDataManagerEv\", \"llvm::PassManagerImpl::getAsPMDataManager()\"},\n    {\"_ZN4llvm15PassManagerImpl15addTopLevelPassEPNS_4PassE\", \"llvm::PassManagerImpl::addTopLevelPass(llvm::Pass*)\"},\n    {\"_ZN4llvm15PassManagerImpl9getAsPassEv\", \"llvm::PassManagerImpl::getAsPass()\"},\n    {\"_ZThn32_N4llvm15PassManagerImplD1Ev\", \"non-virtual thunk to llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZThn32_N4llvm15PassManagerImplD0Ev\", \"non-virtual thunk to llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZThn32_N4llvm15PassManagerImpl9getAsPassEv\", \"non-virtual thunk to llvm::PassManagerImpl::getAsPass()\"},\n    {\"_ZThn432_N4llvm15PassManagerImpl15addTopLevelPassEPNS_4PassE\", \"non-virtual thunk to llvm::PassManagerImpl::addTopLevelPass(llvm::Pass*)\"},\n    {\"_ZThn432_N4llvm15PassManagerImplD1Ev\", \"non-virtual thunk to llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZThn432_N4llvm15PassManagerImplD0Ev\", \"non-virtual thunk to llvm::PassManagerImpl::~PassManagerImpl()\"},\n    {\"_ZN4llvm23FunctionPassManagerImplC2Ei\", \"llvm::FunctionPassManagerImpl::FunctionPassManagerImpl(int)\"},\n    {\"_ZN4llvm23FunctionPassManagerImplD1Ev\", \"llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZN4llvm23FunctionPassManagerImplD0Ev\", \"llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZNK4llvm23FunctionPassManagerImpl17createPrinterPassERNS_11raw_ostreamERKSs\", \"llvm::FunctionPassManagerImpl::createPrinterPass(llvm::raw_ostream&, std::string const&) const\"},\n    {\"_ZNK4llvm23FunctionPassManagerImpl16getAnalysisUsageERNS_13AnalysisUsageE\", \"llvm::FunctionPassManagerImpl::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl18getAsPMDataManagerEv\", \"llvm::FunctionPassManagerImpl::getAsPMDataManager()\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl9getAsPassEv\", \"llvm::FunctionPassManagerImpl::getAsPass()\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl15addTopLevelPassEPNS_4PassE\", \"llvm::FunctionPassManagerImpl::addTopLevelPass(llvm::Pass*)\"},\n    {\"_ZThn32_N4llvm23FunctionPassManagerImplD1Ev\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZThn32_N4llvm23FunctionPassManagerImplD0Ev\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZThn32_N4llvm23FunctionPassManagerImpl9getAsPassEv\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::getAsPass()\"},\n    {\"_ZThn432_N4llvm23FunctionPassManagerImpl15addTopLevelPassEPNS_4PassE\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::addTopLevelPass(llvm::Pass*)\"},\n    {\"_ZThn432_N4llvm23FunctionPassManagerImplD1Ev\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZThn432_N4llvm23FunctionPassManagerImplD0Ev\", \"non-virtual thunk to llvm::FunctionPassManagerImpl::~FunctionPassManagerImpl()\"},\n    {\"_ZNSt6vectorISt4pairIPKvPN4llvm4PassEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<void const*, llvm::Pass*>, std::allocator<std::pair<void const*, llvm::Pass*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<void const*, llvm::Pass*>*, std::vector<std::pair<void const*, llvm::Pass*>, std::allocator<std::pair<void const*, llvm::Pass*> > > >, std::pair<void const*, llvm::Pass*> const&)\"},\n    {\"_ZN4llvm12PassRegistryD1Ev\", \"llvm::PassRegistry::~PassRegistry()\"},\n    {\"_ZN4llvm12PassRegistryD2Ev\", \"llvm::PassRegistry::~PassRegistry()\"},\n    {\"_ZNK4llvm12PassRegistry11getPassInfoEPKv\", \"llvm::PassRegistry::getPassInfo(void const*) const\"},\n    {\"_ZNK4llvm12PassRegistry11getPassInfoENS_9StringRefE\", \"llvm::PassRegistry::getPassInfo(llvm::StringRef) const\"},\n    {\"_ZN4llvm12PassRegistry12registerPassERKNS_8PassInfoEb\", \"llvm::PassRegistry::registerPass(llvm::PassInfo const&, bool)\"},\n    {\"_ZN4llvm12PassRegistry14unregisterPassERKNS_8PassInfoE\", \"llvm::PassRegistry::unregisterPass(llvm::PassInfo const&)\"},\n    {\"_ZN4llvm12PassRegistry21registerAnalysisGroupEPKvS2_RNS_8PassInfoEbb\", \"llvm::PassRegistry::registerAnalysisGroup(void const*, void const*, llvm::PassInfo&, bool, bool)\"},\n    {\"_ZN4llvm12PassRegistry26removeRegistrationListenerEPNS_24PassRegistrationListenerE\", \"llvm::PassRegistry::removeRegistrationListener(llvm::PassRegistrationListener*)\"},\n    {\"_ZN4llvm8DenseMapIPKvPKNS_8PassInfoENS_12DenseMapInfoIS2_EENS6_IS5_EEE6insertERKSt4pairIS2_S5_E\", \"llvm::DenseMap<void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<llvm::PassInfo const*> >::insert(std::pair<void const*, llvm::PassInfo const*> const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm24PassRegistrationListenerESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::PassRegistrationListener**, std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::PassRegistrationListener**, std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> > >, llvm::PassRegistrationListener*>(__gnu_cxx::__normal_iterator<llvm::PassRegistrationListener**, std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> > >, __gnu_cxx::__normal_iterator<llvm::PassRegistrationListener**, std::vector<llvm::PassRegistrationListener*, std::allocator<llvm::PassRegistrationListener*> > >, llvm::PassRegistrationListener* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm9StringMapIPKNS_8PassInfoENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::PassInfo const*>& llvm::StringMap<llvm::PassInfo const*, llvm::MallocAllocator>::GetOrCreateValue<llvm::PassInfo const*>(llvm::StringRef, llvm::PassInfo const*)\"},\n    {\"_ZN4llvm8DenseMapIPKvPKNS_8PassInfoENS_12DenseMapInfoIS2_EENS6_IS5_EEE16InsertIntoBucketERKS2_RKS5_PSt4pairIS2_S5_E\", \"llvm::DenseMap<void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<llvm::PassInfo const*> >::InsertIntoBucket(void const* const&, llvm::PassInfo const* const&, std::pair<void const*, llvm::PassInfo const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKvPKNS_8PassInfoENS_12DenseMapInfoIS2_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<void const*, llvm::PassInfo const*, llvm::DenseMapInfo<void const*>, llvm::DenseMapInfo<llvm::PassInfo const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14object_creatorINS_12PassRegistryEEEPvv\", \"void* llvm::object_creator<llvm::PassRegistry>()\"},\n    {\"_ZN4llvm14object_deleterINS_12PassRegistryEE4callEPv\", \"llvm::object_deleter<llvm::PassRegistry>::call(void*)\"},\n    {\"_ZN4llvm29initializePrintModulePassPassERNS_12PassRegistryE\", \"llvm::initializePrintModulePassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm31initializePrintFunctionPassPassERNS_12PassRegistryE\", \"llvm::initializePrintFunctionPassPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm21createPrintModulePassEPNS_11raw_ostreamEbRKSs\", \"llvm::createPrintModulePass(llvm::raw_ostream*, bool, std::string const&)\"},\n    {\"_ZN4llvm23createPrintFunctionPassERKSsPNS_11raw_ostreamEb\", \"llvm::createPrintFunctionPass(std::string const&, llvm::raw_ostream*, bool)\"},\n    {\"_ZN12_GLOBAL__N_117PrintFunctionPassD1Ev\", \"(anonymous namespace)::PrintFunctionPass::~PrintFunctionPass()\"},\n    {\"_ZN12_GLOBAL__N_117PrintFunctionPassD0Ev\", \"(anonymous namespace)::PrintFunctionPass::~PrintFunctionPass()\"},\n    {\"_ZNK12_GLOBAL__N_117PrintFunctionPass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PrintFunctionPass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_117PrintFunctionPass13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::PrintFunctionPass::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_115PrintModulePassD1Ev\", \"(anonymous namespace)::PrintModulePass::~PrintModulePass()\"},\n    {\"_ZN12_GLOBAL__N_115PrintModulePassD0Ev\", \"(anonymous namespace)::PrintModulePass::~PrintModulePass()\"},\n    {\"_ZNK12_GLOBAL__N_115PrintModulePass16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PrintModulePass::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_115PrintModulePass11runOnModuleERN4llvm6ModuleE\", \"(anonymous namespace)::PrintModulePass::runOnModule(llvm::Module&)\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_117PrintFunctionPassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PrintFunctionPass>()\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_115PrintModulePassEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PrintModulePass>()\"},\n    {\"_ZN4llvm16AbstractTypeUserD0Ev\", \"llvm::AbstractTypeUser::~AbstractTypeUser()\"},\n    {\"_ZN4llvm16AbstractTypeUserD1Ev\", \"llvm::AbstractTypeUser::~AbstractTypeUser()\"},\n    {\"_ZN4llvm16AbstractTypeUserD2Ev\", \"llvm::AbstractTypeUser::~AbstractTypeUser()\"},\n    {\"_ZN4llvm16AbstractTypeUser7setTypeEPNS_5ValueEPKNS_4TypeE\", \"llvm::AbstractTypeUser::setType(llvm::Value*, llvm::Type const*)\"},\n    {\"_ZNK4llvm4Type7destroyEv\", \"llvm::Type::destroy() const\"},\n    {\"_ZN4llvm4Type16getPrimitiveTypeERNS_11LLVMContextENS0_6TypeIDE\", \"llvm::Type::getPrimitiveType(llvm::LLVMContext&, llvm::Type::TypeID)\"},\n    {\"_ZN4llvm4Type9getVoidTyERNS_11LLVMContextE\", \"llvm::Type::getVoidTy(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type10getFloatTyERNS_11LLVMContextE\", \"llvm::Type::getFloatTy(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type11getDoubleTyERNS_11LLVMContextE\", \"llvm::Type::getDoubleTy(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type13getX86_FP80TyERNS_11LLVMContextE\", \"llvm::Type::getX86_FP80Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type10getFP128TyERNS_11LLVMContextE\", \"llvm::Type::getFP128Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type14getPPC_FP128TyERNS_11LLVMContextE\", \"llvm::Type::getPPC_FP128Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type10getLabelTyERNS_11LLVMContextE\", \"llvm::Type::getLabelTy(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type13getMetadataTyERNS_11LLVMContextE\", \"llvm::Type::getMetadataTy(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type12getX86_MMXTyERNS_11LLVMContextE\", \"llvm::Type::getX86_MMXTy(llvm::LLVMContext&)\"},\n    {\"_ZNK4llvm4Type21getVAArgsPromotedTypeERNS_11LLVMContextE\", \"llvm::Type::getVAArgsPromotedType(llvm::LLVMContext&) const\"},\n    {\"_ZN4llvm4Type10getInt32TyERNS_11LLVMContextE\", \"llvm::Type::getInt32Ty(llvm::LLVMContext&)\"},\n    {\"_ZNK4llvm4Type13getScalarTypeEv\", \"llvm::Type::getScalarType() const\"},\n    {\"_ZNK4llvm4Type11isIntegerTyEj\", \"llvm::Type::isIntegerTy(unsigned int) const\"},\n    {\"_ZNK4llvm4Type18isIntOrIntVectorTyEv\", \"llvm::Type::isIntOrIntVectorTy() const\"},\n    {\"_ZNK4llvm4Type16isFPOrFPVectorTyEv\", \"llvm::Type::isFPOrFPVectorTy() const\"},\n    {\"_ZNK4llvm4Type22canLosslesslyBitCastToEPKS0_\", \"llvm::Type::canLosslesslyBitCastTo(llvm::Type const*) const\"},\n    {\"_ZNK4llvm4Type22getPrimitiveSizeInBitsEv\", \"llvm::Type::getPrimitiveSizeInBits() const\"},\n    {\"_ZNK4llvm4Type19getScalarSizeInBitsEv\", \"llvm::Type::getScalarSizeInBits() const\"},\n    {\"_ZNK4llvm4Type18getFPMantissaWidthEv\", \"llvm::Type::getFPMantissaWidth() const\"},\n    {\"_ZNK4llvm4Type18isSizedDerivedTypeEv\", \"llvm::Type::isSizedDerivedType() const\"},\n    {\"_ZNK4llvm4Type24getForwardedTypeInternalEv\", \"llvm::Type::getForwardedTypeInternal() const\"},\n    {\"_ZN4llvm4Type18refineAbstractTypeEPKNS_11DerivedTypeEPKS0_\", \"llvm::Type::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm4Type18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::Type::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm4Type14getDescriptionEv\", \"llvm::Type::getDescription() const\"},\n    {\"_ZNK4llvm10StructType10indexValidEPKNS_5ValueE\", \"llvm::StructType::indexValid(llvm::Value const*) const\"},\n    {\"_ZNK4llvm10StructType10indexValidEj\", \"llvm::StructType::indexValid(unsigned int) const\"},\n    {\"_ZNK4llvm10StructType14getTypeAtIndexEPKNS_5ValueE\", \"llvm::StructType::getTypeAtIndex(llvm::Value const*) const\"},\n    {\"_ZNK4llvm10StructType14getTypeAtIndexEj\", \"llvm::StructType::getTypeAtIndex(unsigned int) const\"},\n    {\"_ZN4llvm4Type9getIntNTyERNS_11LLVMContextEj\", \"llvm::Type::getIntNTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm11IntegerType3getERNS_11LLVMContextEj\", \"llvm::IntegerType::get(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type9getInt1TyERNS_11LLVMContextE\", \"llvm::Type::getInt1Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type9getInt8TyERNS_11LLVMContextE\", \"llvm::Type::getInt8Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type10getInt16TyERNS_11LLVMContextE\", \"llvm::Type::getInt16Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type10getInt64TyERNS_11LLVMContextE\", \"llvm::Type::getInt64Ty(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm4Type13getFloatPtrTyERNS_11LLVMContextEj\", \"llvm::Type::getFloatPtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZNK4llvm4Type12getPointerToEj\", \"llvm::Type::getPointerTo(unsigned int) const\"},\n    {\"_ZN4llvm4Type14getDoublePtrTyERNS_11LLVMContextEj\", \"llvm::Type::getDoublePtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type16getX86_FP80PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getX86_FP80PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type13getFP128PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getFP128PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type17getPPC_FP128PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getPPC_FP128PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type15getX86_MMXPtrTyERNS_11LLVMContextEj\", \"llvm::Type::getX86_MMXPtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type12getIntNPtrTyERNS_11LLVMContextEjj\", \"llvm::Type::getIntNPtrTy(llvm::LLVMContext&, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm4Type12getInt1PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getInt1PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type12getInt8PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getInt8PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type13getInt16PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getInt16PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type13getInt32PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getInt32PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm4Type13getInt64PtrTyERNS_11LLVMContextEj\", \"llvm::Type::getInt64PtrTy(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm12FunctionType17isValidReturnTypeEPKNS_4TypeE\", \"llvm::FunctionType::isValidReturnType(llvm::Type const*)\"},\n    {\"_ZN4llvm12FunctionType19isValidArgumentTypeEPKNS_4TypeE\", \"llvm::FunctionType::isValidArgumentType(llvm::Type const*)\"},\n    {\"_ZN4llvm12FunctionTypeC1EPKNS_4TypeERKSt6vectorIS3_SaIS3_EEb\", \"llvm::FunctionType::FunctionType(llvm::Type const*, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm12FunctionTypeC2EPKNS_4TypeERKSt6vectorIS3_SaIS3_EEb\", \"llvm::FunctionType::FunctionType(llvm::Type const*, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm10StructTypeC1ERNS_11LLVMContextERKSt6vectorIPKNS_4TypeESaIS6_EEb\", \"llvm::StructType::StructType(llvm::LLVMContext&, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm10StructTypeC2ERNS_11LLVMContextERKSt6vectorIPKNS_4TypeESaIS6_EEb\", \"llvm::StructType::StructType(llvm::LLVMContext&, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm9ArrayTypeC1EPKNS_4TypeEy\", \"llvm::ArrayType::ArrayType(llvm::Type const*, unsigned long long)\"},\n    {\"_ZN4llvm9ArrayTypeC2EPKNS_4TypeEy\", \"llvm::ArrayType::ArrayType(llvm::Type const*, unsigned long long)\"},\n    {\"_ZN4llvm10VectorTypeC1EPKNS_4TypeEj\", \"llvm::VectorType::VectorType(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm10VectorTypeC2EPKNS_4TypeEj\", \"llvm::VectorType::VectorType(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm11PointerTypeC1EPKNS_4TypeEj\", \"llvm::PointerType::PointerType(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm11PointerTypeC2EPKNS_4TypeEj\", \"llvm::PointerType::PointerType(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm10OpaqueTypeC1ERNS_11LLVMContextE\", \"llvm::OpaqueType::OpaqueType(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm10OpaqueTypeC2ERNS_11LLVMContextE\", \"llvm::OpaqueType::OpaqueType(llvm::LLVMContext&)\"},\n    {\"_ZN4llvm12PATypeHolder7destroyEv\", \"llvm::PATypeHolder::destroy()\"},\n    {\"_ZN4llvm11DerivedType15dropAllTypeUsesEv\", \"llvm::DerivedType::dropAllTypeUses()\"},\n    {\"_ZN4llvm4Type25PromoteAbstractToConcreteEv\", \"llvm::Type::PromoteAbstractToConcrete()\"},\n    {\"_ZN4llvm11DerivedType32notifyUsesThatTypeBecameConcreteEv\", \"llvm::DerivedType::notifyUsesThatTypeBecameConcrete()\"},\n    {\"_ZNK4llvm11IntegerType19isPowerOf2ByteWidthEv\", \"llvm::IntegerType::isPowerOf2ByteWidth() const\"},\n    {\"_ZNK4llvm11IntegerType7getMaskEv\", \"llvm::IntegerType::getMask() const\"},\n    {\"_ZN4llvm15FunctionValType3getEPKNS_12FunctionTypeE\", \"llvm::FunctionValType::get(llvm::FunctionType const*)\"},\n    {\"_ZN4llvm12FunctionType3getEPKNS_4TypeERKSt6vectorIS3_SaIS3_EEb\", \"llvm::FunctionType::get(llvm::Type const*, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm9ArrayType3getEPKNS_4TypeEy\", \"llvm::ArrayType::get(llvm::Type const*, unsigned long long)\"},\n    {\"_ZN4llvm9ArrayType18isValidElementTypeEPKNS_4TypeE\", \"llvm::ArrayType::isValidElementType(llvm::Type const*)\"},\n    {\"_ZN4llvm10VectorType3getEPKNS_4TypeEj\", \"llvm::VectorType::get(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm10VectorType18isValidElementTypeEPKNS_4TypeE\", \"llvm::VectorType::isValidElementType(llvm::Type const*)\"},\n    {\"_ZN4llvm10StructType3getERNS_11LLVMContextERKSt6vectorIPKNS_4TypeESaIS6_EEb\", \"llvm::StructType::get(llvm::LLVMContext&, std::vector<llvm::Type const*, std::allocator<llvm::Type const*> > const&, bool)\"},\n    {\"_ZN4llvm10StructType3getERNS_11LLVMContextEPKNS_4TypeEz\", \"llvm::StructType::get(llvm::LLVMContext&, llvm::Type const*, ...)\"},\n    {\"_ZN4llvm10StructType18isValidElementTypeEPKNS_4TypeE\", \"llvm::StructType::isValidElementType(llvm::Type const*)\"},\n    {\"_ZN4llvm11PointerType3getEPKNS_4TypeEj\", \"llvm::PointerType::get(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm11PointerType18isValidElementTypeEPKNS_4TypeE\", \"llvm::PointerType::isValidElementType(llvm::Type const*)\"},\n    {\"_ZN4llvm10OpaqueType3getERNS_11LLVMContextE\", \"llvm::OpaqueType::get(llvm::LLVMContext&)\"},\n    {\"_ZNK4llvm4Type19addAbstractTypeUserEPNS_16AbstractTypeUserE\", \"llvm::Type::addAbstractTypeUser(llvm::AbstractTypeUser*) const\"},\n    {\"_ZNK4llvm4Type22removeAbstractTypeUserEPNS_16AbstractTypeUserE\", \"llvm::Type::removeAbstractTypeUser(llvm::AbstractTypeUser*) const\"},\n    {\"_ZN4llvm11DerivedType20refineAbstractTypeToEPKNS_4TypeE\", \"llvm::DerivedType::refineAbstractTypeTo(llvm::Type const*)\"},\n    {\"_ZN4llvm12FunctionType18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::FunctionType::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm12FunctionType18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::FunctionType::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZN4llvm9ArrayType18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::ArrayType::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm9ArrayType18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::ArrayType::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZN4llvm10VectorType18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::VectorType::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm10VectorType18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::VectorType::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZN4llvm10StructType18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::StructType::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm10StructType18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::StructType::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZN4llvm11PointerType18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::PointerType::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm11PointerType18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::PointerType::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm14SequentialType10indexValidEPKNS_5ValueE\", \"llvm::SequentialType::indexValid(llvm::Value const*) const\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamERKNS_4TypeE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::Type const&)\"},\n    {\"_ZN4llvm25TypeHasCycleThroughItselfEPKNS_4TypeE\", \"llvm::TypeHasCycleThroughItself(llvm::Type const*)\"},\n    {\"_Z10TypesEqualPKN4llvm4TypeES2_RSt3mapIS2_S2_St4lessIS2_ESaISt4pairIKS2_S2_EEE\", \"TypesEqual(llvm::Type const*, llvm::Type const*, std::map<llvm::Type const*, llvm::Type const*, std::less<llvm::Type const*>, std::allocator<std::pair<llvm::Type const* const, llvm::Type const*> > >&)\"},\n    {\"_Z27AbstractTypeHasCycleThroughPKN4llvm4TypeES2_RNS_11SmallPtrSetIS2_Lj128EEE\", \"AbstractTypeHasCycleThrough(llvm::Type const*, llvm::Type const*, llvm::SmallPtrSet<llvm::Type const*, 128u>&)\"},\n    {\"_Z27ConcreteTypeHasCycleThroughPKN4llvm4TypeES2_RNS_11SmallPtrSetIS2_Lj128EEE\", \"ConcreteTypeHasCycleThrough(llvm::Type const*, llvm::Type const*, llvm::SmallPtrSet<llvm::Type const*, 128u>&)\"},\n    {\"_ZN4llvm12scc_iteratorIN12_GLOBAL__N_118TypePromotionGraphENS_11GraphTraitsIS2_EEE10GetNextSCCEv\", \"llvm::scc_iterator<(anonymous namespace)::TypePromotionGraph, llvm::GraphTraits<(anonymous namespace)::TypePromotionGraph> >::GetNextSCC()\"},\n    {\"_ZN4llvm12scc_iteratorIN12_GLOBAL__N_118TypePromotionGraphENS_11GraphTraitsIS2_EEE11DFSVisitOneEPNS_4TypeE\", \"llvm::scc_iterator<(anonymous namespace)::TypePromotionGraph, llvm::GraphTraits<(anonymous namespace)::TypePromotionGraph> >::DFSVisitOne(llvm::Type*)\"},\n    {\"_ZN4llvm12FunctionTypeD1Ev\", \"llvm::FunctionType::~FunctionType()\"},\n    {\"_ZN4llvm10StructTypeD1Ev\", \"llvm::StructType::~StructType()\"},\n    {\"_ZNK4llvm10VectorType11getBitWidthEv\", \"llvm::VectorType::getBitWidth() const\"},\n    {\"_ZNK4llvm4Type16getForwardedTypeEv\", \"llvm::Type::getForwardedType() const\"},\n    {\"_ZN4llvm14SequentialTypeC2ENS_4Type6TypeIDEPKS1_\", \"llvm::SequentialType::SequentialType(llvm::Type::TypeID, llvm::Type const*)\"},\n    {\"_ZN4llvm12PATypeHandleaSEPKNS_4TypeE\", \"llvm::PATypeHandle::operator=(llvm::Type const*)\"},\n    {\"_ZN4llvm7TypeMapINS_14IntegerValTypeENS_11IntegerTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::IntegerValType, llvm::IntegerType>::add(llvm::IntegerValType const&, llvm::IntegerType*)\"},\n    {\"_ZN4llvm7TypeMapINS_15FunctionValTypeENS_12FunctionTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::FunctionValType, llvm::FunctionType>::add(llvm::FunctionValType const&, llvm::FunctionType*)\"},\n    {\"_ZN4llvm7TypeMapINS_12ArrayValTypeENS_9ArrayTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::ArrayValType, llvm::ArrayType>::add(llvm::ArrayValType const&, llvm::ArrayType*)\"},\n    {\"_ZN4llvm7TypeMapINS_13VectorValTypeENS_10VectorTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::VectorValType, llvm::VectorType>::add(llvm::VectorValType const&, llvm::VectorType*)\"},\n    {\"_ZN4llvm7TypeMapINS_13StructValTypeENS_10StructTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::StructValType, llvm::StructType>::add(llvm::StructValType const&, llvm::StructType*)\"},\n    {\"_ZN4llvm7TypeMapINS_14PointerValTypeENS_11PointerTypeEE3addERKS1_PS2_\", \"llvm::TypeMap<llvm::PointerValType, llvm::PointerType>::add(llvm::PointerValType const&, llvm::PointerType*)\"},\n    {\"_ZN4llvm7TypeMapINS_15FunctionValTypeENS_12FunctionTypeEE18RefineAbstractTypeEPS2_PKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeMap<llvm::FunctionValType, llvm::FunctionType>::RefineAbstractType(llvm::FunctionType*, llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm11TypeMapBase18TypeBecameConcreteEPNS_11DerivedTypeEPKS1_\", \"llvm::TypeMapBase::TypeBecameConcrete(llvm::DerivedType*, llvm::DerivedType const*)\"},\n    {\"_ZN4llvm7TypeMapINS_12ArrayValTypeENS_9ArrayTypeEE18RefineAbstractTypeEPS2_PKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeMap<llvm::ArrayValType, llvm::ArrayType>::RefineAbstractType(llvm::ArrayType*, llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm7TypeMapINS_13VectorValTypeENS_10VectorTypeEE18RefineAbstractTypeEPS2_PKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeMap<llvm::VectorValType, llvm::VectorType>::RefineAbstractType(llvm::VectorType*, llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm7TypeMapINS_13StructValTypeENS_10StructTypeEE18RefineAbstractTypeEPS2_PKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeMap<llvm::StructValType, llvm::StructType>::RefineAbstractType(llvm::StructType*, llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm7TypeMapINS_14PointerValTypeENS_11PointerTypeEE18RefineAbstractTypeEPS2_PKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeMap<llvm::PointerValType, llvm::PointerType>::RefineAbstractType(llvm::PointerType*, llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm14SequentialTypeD1Ev\", \"llvm::SequentialType::~SequentialType()\"},\n    {\"_ZN4llvm14SequentialTypeD0Ev\", \"llvm::SequentialType::~SequentialType()\"},\n    {\"_ZNK4llvm14SequentialType14getTypeAtIndexEPKNS_5ValueE\", \"llvm::SequentialType::getTypeAtIndex(llvm::Value const*) const\"},\n    {\"_ZNK4llvm14SequentialType14getTypeAtIndexEj\", \"llvm::SequentialType::getTypeAtIndex(unsigned int) const\"},\n    {\"_ZNK4llvm14SequentialType10indexValidEj\", \"llvm::SequentialType::indexValid(unsigned int) const\"},\n    {\"_ZN4llvm12FunctionTypeD0Ev\", \"llvm::FunctionType::~FunctionType()\"},\n    {\"_ZN4llvm10StructTypeD0Ev\", \"llvm::StructType::~StructType()\"},\n    {\"_ZN4llvm9ArrayTypeD1Ev\", \"llvm::ArrayType::~ArrayType()\"},\n    {\"_ZN4llvm9ArrayTypeD0Ev\", \"llvm::ArrayType::~ArrayType()\"},\n    {\"_ZN4llvm10VectorTypeD1Ev\", \"llvm::VectorType::~VectorType()\"},\n    {\"_ZN4llvm10VectorTypeD0Ev\", \"llvm::VectorType::~VectorType()\"},\n    {\"_ZN4llvm11PointerTypeD1Ev\", \"llvm::PointerType::~PointerType()\"},\n    {\"_ZN4llvm11PointerTypeD0Ev\", \"llvm::PointerType::~PointerType()\"},\n    {\"_ZN4llvm10OpaqueTypeD1Ev\", \"llvm::OpaqueType::~OpaqueType()\"},\n    {\"_ZN4llvm10OpaqueTypeD0Ev\", \"llvm::OpaqueType::~OpaqueType()\"},\n    {\"_ZN4llvm11TypeMapBase21RemoveFromTypesByHashEjPKNS_4TypeE\", \"llvm::TypeMapBase::RemoveFromTypesByHash(unsigned int, llvm::Type const*)\"},\n    {\"_ZNSt8_Rb_treeIjSt4pairIKjN4llvm12PATypeHolderEESt10_Select1stIS4_ESt4lessIjESaIS4_EE15_M_insert_equalERKS4_\", \"std::_Rb_tree<unsigned int, std::pair<unsigned int const, llvm::PATypeHolder>, std::_Select1st<std::pair<unsigned int const, llvm::PATypeHolder> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, llvm::PATypeHolder> > >::_M_insert_equal(std::pair<unsigned int const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<llvm::Type const*, std::pair<llvm::Type const* const, llvm::Type const*>, std::_Select1st<std::pair<llvm::Type const* const, llvm::Type const*> >, std::less<llvm::Type const*>, std::allocator<std::pair<llvm::Type const* const, llvm::Type const*> > >::_M_erase(std::_Rb_tree_node<std::pair<llvm::Type const* const, llvm::Type const*> >*)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_\", \"std::_Rb_tree<llvm::Type const*, std::pair<llvm::Type const* const, llvm::Type const*>, std::_Select1st<std::pair<llvm::Type const* const, llvm::Type const*> >, std::less<llvm::Type const*>, std::allocator<std::pair<llvm::Type const* const, llvm::Type const*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<llvm::Type const* const, llvm::Type const*> >, std::pair<llvm::Type const* const, llvm::Type const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIPKN4llvm4TypeESt4pairIKS3_S3_ESt10_Select1stIS6_ESt4lessIS3_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<llvm::Type const*, std::pair<llvm::Type const* const, llvm::Type const*>, std::_Select1st<std::pair<llvm::Type const* const, llvm::Type const*> >, std::less<llvm::Type const*>, std::allocator<std::pair<llvm::Type const* const, llvm::Type const*> > >::_M_insert_unique(std::pair<llvm::Type const* const, llvm::Type const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14PointerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::PointerValType, std::pair<llvm::PointerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >, std::less<llvm::PointerValType>, std::allocator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::PointerValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14PointerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<llvm::PointerValType, std::pair<llvm::PointerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >, std::less<llvm::PointerValType>, std::allocator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::PointerValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14PointerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<llvm::PointerValType, std::pair<llvm::PointerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >, std::less<llvm::PointerValType>, std::allocator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >, std::_Rb_tree_iterator<std::pair<llvm::PointerValType const, llvm::PATypeHolder> >)\"},\n    {\"_ZN4llvm13StructValType3getEPKNS_10StructTypeE\", \"llvm::StructValType::get(llvm::StructType const*)\"},\n    {\"_ZNSt4pairIKN4llvm13StructValTypeENS0_12PATypeHolderEEC2IS1_PNS0_10StructTypeEEERKS_IT_T0_E\", \"std::pair<llvm::StructValType const, llvm::PATypeHolder>::pair<llvm::StructValType, llvm::StructType*>(std::pair<llvm::StructValType, llvm::StructType*> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::StructValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::StructValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIKN4llvm13StructValTypeENS2_12PATypeHolderEEE9constructEPS6_RKS6_\", \"__gnu_cxx::new_allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> >::construct(std::pair<llvm::StructValType const, llvm::PATypeHolder>*, std::pair<llvm::StructValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseERS3_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::erase(llvm::StructValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_E\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::StructValType const, llvm::PATypeHolder> >)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE11lower_boundERS3_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::lower_bound(llvm::StructValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE11upper_boundERS3_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::upper_bound(llvm::StructValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13VectorValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::VectorValType, std::pair<llvm::VectorValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >, std::less<llvm::VectorValType>, std::allocator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::VectorValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13VectorValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<llvm::VectorValType, std::pair<llvm::VectorValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >, std::less<llvm::VectorValType>, std::allocator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::VectorValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13VectorValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<llvm::VectorValType, std::pair<llvm::VectorValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >, std::less<llvm::VectorValType>, std::allocator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >, std::_Rb_tree_iterator<std::pair<llvm::VectorValType const, llvm::PATypeHolder> >)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm12ArrayValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::ArrayValType, std::pair<llvm::ArrayValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >, std::less<llvm::ArrayValType>, std::allocator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::ArrayValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm12ArrayValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<llvm::ArrayValType, std::pair<llvm::ArrayValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >, std::less<llvm::ArrayValType>, std::allocator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::ArrayValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm12ArrayValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_ESD_\", \"std::_Rb_tree<llvm::ArrayValType, std::pair<llvm::ArrayValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >, std::less<llvm::ArrayValType>, std::allocator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >, std::_Rb_tree_iterator<std::pair<llvm::ArrayValType const, llvm::PATypeHolder> >)\"},\n    {\"_ZNSt4pairIKN4llvm15FunctionValTypeENS0_12PATypeHolderEEC2IS1_PNS0_12FunctionTypeEEERKS_IT_T0_E\", \"std::pair<llvm::FunctionValType const, llvm::PATypeHolder>::pair<llvm::FunctionValType, llvm::FunctionType*>(std::pair<llvm::FunctionValType, llvm::FunctionType*> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::FunctionValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<llvm::FunctionValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZN9__gnu_cxx13new_allocatorISt4pairIKN4llvm15FunctionValTypeENS2_12PATypeHolderEEE9constructEPS6_RKS6_\", \"__gnu_cxx::new_allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >::construct(std::pair<llvm::FunctionValType const, llvm::PATypeHolder>*, std::pair<llvm::FunctionValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseERS3_\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::erase(llvm::FunctionValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE11equal_rangeERS3_\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::equal_range(llvm::FunctionValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE5eraseESt17_Rb_tree_iteratorIS5_E\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::erase(std::_Rb_tree_iterator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >)\"},\n    {\"_ZNSt6vectorIPN4llvm16AbstractTypeUserESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::AbstractTypeUser*, std::allocator<llvm::AbstractTypeUser*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::AbstractTypeUser**, std::vector<llvm::AbstractTypeUser*, std::allocator<llvm::AbstractTypeUser*> > >, llvm::AbstractTypeUser* const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm13StructValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE4findERS3_\", \"std::_Rb_tree<llvm::StructValType, std::pair<llvm::StructValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::StructValType const, llvm::PATypeHolder> >, std::less<llvm::StructValType>, std::allocator<std::pair<llvm::StructValType const, llvm::PATypeHolder> > >::find(llvm::StructValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm15FunctionValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE4findERS3_\", \"std::_Rb_tree<llvm::FunctionValType, std::pair<llvm::FunctionValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> >, std::less<llvm::FunctionValType>, std::allocator<std::pair<llvm::FunctionValType const, llvm::PATypeHolder> > >::find(llvm::FunctionValType const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm14IntegerValTypeESt4pairIKS1_NS0_12PATypeHolderEESt10_Select1stIS5_ESt4lessIS1_ESaIS5_EE16_M_insert_uniqueERKS5_\", \"std::_Rb_tree<llvm::IntegerValType, std::pair<llvm::IntegerValType const, llvm::PATypeHolder>, std::_Select1st<std::pair<llvm::IntegerValType const, llvm::PATypeHolder> >, std::less<llvm::IntegerValType>, std::allocator<std::pair<llvm::IntegerValType const, llvm::PATypeHolder> > >::_M_insert_unique(std::pair<llvm::IntegerValType const, llvm::PATypeHolder> const&)\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm4TypeESt6vectorIS4_SaIS4_EEEENS2_12PATypeHandleEET_SB_SB_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::Type**, std::vector<llvm::Type*, std::allocator<llvm::Type*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::Type**, std::vector<llvm::Type*, std::allocator<llvm::Type*> > >, llvm::PATypeHandle>(__gnu_cxx::__normal_iterator<llvm::Type**, std::vector<llvm::Type*, std::allocator<llvm::Type*> > >, __gnu_cxx::__normal_iterator<llvm::Type**, std::vector<llvm::Type*, std::allocator<llvm::Type*> > >, llvm::PATypeHandle const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm4TypeESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Type*, std::allocator<llvm::Type*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Type**, std::vector<llvm::Type*, std::allocator<llvm::Type*> > >, llvm::Type* const&)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4TypeEjNS_12DenseMapInfoIS2_EENS3_IjEEE16InsertIntoBucketERKS2_RKjPSt4pairIS2_jE\", \"llvm::DenseMap<llvm::Type*, unsigned int, llvm::DenseMapInfo<llvm::Type*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::Type* const&, unsigned int const&, std::pair<llvm::Type*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_4TypeEjNS_12DenseMapInfoIS2_EENS3_IjEEE4growEj\", \"llvm::DenseMap<llvm::Type*, unsigned int, llvm::DenseMapInfo<llvm::Type*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorISt4pairIPN4llvm4TypeEPNS1_12PATypeHandleEESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_\", \"std::vector<std::pair<llvm::Type*, llvm::PATypeHandle*>, std::allocator<std::pair<llvm::Type*, llvm::PATypeHandle*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::Type*, llvm::PATypeHandle*>*, std::vector<std::pair<llvm::Type*, llvm::PATypeHandle*>, std::allocator<std::pair<llvm::Type*, llvm::PATypeHandle*> > > >, std::pair<llvm::Type*, llvm::PATypeHandle*> const&)\"},\n    {\"_ZN4llvm13CompositeTypeD1Ev\", \"llvm::CompositeType::~CompositeType()\"},\n    {\"_ZN4llvm13CompositeTypeD0Ev\", \"llvm::CompositeType::~CompositeType()\"},\n    {\"_ZN4llvm15TypeSymbolTableD0Ev\", \"llvm::TypeSymbolTable::~TypeSymbolTable()\"},\n    {\"_ZN4llvm15TypeSymbolTableD1Ev\", \"llvm::TypeSymbolTable::~TypeSymbolTable()\"},\n    {\"_ZN4llvm15TypeSymbolTableD2Ev\", \"llvm::TypeSymbolTable::~TypeSymbolTable()\"},\n    {\"_ZNK4llvm15TypeSymbolTable13getUniqueNameENS_9StringRefE\", \"llvm::TypeSymbolTable::getUniqueName(llvm::StringRef) const\"},\n    {\"_ZNK4llvm15TypeSymbolTable6lookupENS_9StringRefE\", \"llvm::TypeSymbolTable::lookup(llvm::StringRef) const\"},\n    {\"_ZN4llvm15TypeSymbolTable6removeESt17_Rb_tree_iteratorISt4pairIKSsPKNS_4TypeEEE\", \"llvm::TypeSymbolTable::remove(std::_Rb_tree_iterator<std::pair<std::string const, llvm::Type const*> >)\"},\n    {\"_ZN4llvm15TypeSymbolTable6insertENS_9StringRefEPKNS_4TypeE\", \"llvm::TypeSymbolTable::insert(llvm::StringRef, llvm::Type const*)\"},\n    {\"_ZN4llvm15TypeSymbolTable18refineAbstractTypeEPKNS_11DerivedTypeEPKNS_4TypeE\", \"llvm::TypeSymbolTable::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN4llvm15TypeSymbolTable18typeBecameConcreteEPKNS_11DerivedTypeE\", \"llvm::TypeSymbolTable::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK4llvm15TypeSymbolTable4dumpEv\", \"llvm::TypeSymbolTable::dump() const\"},\n    {\"_ZNSt8_Rb_treeIKSsSt4pairIS0_PKN4llvm4TypeEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE16_M_insert_uniqueERKS6_\", \"std::_Rb_tree<std::string const, std::pair<std::string const, llvm::Type const*>, std::_Select1st<std::pair<std::string const, llvm::Type const*> >, std::less<std::string const>, std::allocator<std::pair<std::string const, llvm::Type const*> > >::_M_insert_unique(std::pair<std::string const, llvm::Type const*> const&)\"},\n    {\"_ZNSt8_Rb_treeIKSsSt4pairIS0_PKN4llvm4TypeEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_\", \"std::_Rb_tree<std::string const, std::pair<std::string const, llvm::Type const*>, std::_Select1st<std::pair<std::string const, llvm::Type const*> >, std::less<std::string const>, std::allocator<std::pair<std::string const, llvm::Type const*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, llvm::Type const*> const&)\"},\n    {\"_ZNKSt8_Rb_treeIKSsSt4pairIS0_PKN4llvm4TypeEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE4findERS0_\", \"std::_Rb_tree<std::string const, std::pair<std::string const, llvm::Type const*>, std::_Select1st<std::pair<std::string const, llvm::Type const*> >, std::less<std::string const>, std::allocator<std::pair<std::string const, llvm::Type const*> > >::find(std::string const&) const\"},\n    {\"_ZNSt8_Rb_treeIKSsSt4pairIS0_PKN4llvm4TypeEESt10_Select1stIS6_ESt4lessIS0_ESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E\", \"std::_Rb_tree<std::string const, std::pair<std::string const, llvm::Type const*>, std::_Select1st<std::pair<std::string const, llvm::Type const*> >, std::less<std::string const>, std::allocator<std::pair<std::string const, llvm::Type const*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, llvm::Type const*> >*)\"},\n    {\"_ZN4llvm3Use4swapERS0_\", \"llvm::Use::swap(llvm::Use&)\"},\n    {\"_ZNK4llvm3Use14getImpliedUserEv\", \"llvm::Use::getImpliedUser() const\"},\n    {\"_ZN4llvm3Use8initTagsEPS0_S1_\", \"llvm::Use::initTags(llvm::Use*, llvm::Use*)\"},\n    {\"_ZN4llvm3Use3zapEPS0_PKS0_b\", \"llvm::Use::zap(llvm::Use*, llvm::Use const*, bool)\"},\n    {\"_ZNK4llvm3Use7getUserEv\", \"llvm::Use::getUser() const\"},\n    {\"_ZN4llvm4User17replaceUsesOfWithEPNS_5ValueES2_\", \"llvm::User::replaceUsesOfWith(llvm::Value*, llvm::Value*)\"},\n    {\"_ZNK4llvm4User16allocHungoffUsesEj\", \"llvm::User::allocHungoffUses(unsigned int) const\"},\n    {\"_ZN4llvm4UsernwEmj\", \"llvm::User::operator new(unsigned long, unsigned int)\"},\n    {\"_ZN4llvm4UserdlEPv\", \"llvm::User::operator delete(void*)\"},\n    {\"_ZN4llvm5ValueC1EPKNS_4TypeEj\", \"llvm::Value::Value(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm5ValueC2EPKNS_4TypeEj\", \"llvm::Value::Value(llvm::Type const*, unsigned int)\"},\n    {\"_ZN4llvm5ValueD0Ev\", \"llvm::Value::~Value()\"},\n    {\"_ZN4llvm5ValueD1Ev\", \"llvm::Value::~Value()\"},\n    {\"_ZN4llvm5ValueD2Ev\", \"llvm::Value::~Value()\"},\n    {\"_ZN4llvm15ValueHandleBase14ValueIsDeletedEPNS_5ValueE\", \"llvm::ValueHandleBase::ValueIsDeleted(llvm::Value*)\"},\n    {\"_ZNK4llvm5Value8hasNUsesEj\", \"llvm::Value::hasNUses(unsigned int) const\"},\n    {\"_ZNK4llvm5Value14hasNUsesOrMoreEj\", \"llvm::Value::hasNUsesOrMore(unsigned int) const\"},\n    {\"_ZNK4llvm5Value18isUsedInBasicBlockEPKNS_10BasicBlockE\", \"llvm::Value::isUsedInBasicBlock(llvm::BasicBlock const*) const\"},\n    {\"_ZNK4llvm5Value10getNumUsesEv\", \"llvm::Value::getNumUses() const\"},\n    {\"_ZNK4llvm5Value7getNameEv\", \"llvm::Value::getName() const\"},\n    {\"_ZNK4llvm5Value10getNameStrEv\", \"llvm::Value::getNameStr() const\"},\n    {\"_ZN4llvm5Value7setNameERKNS_5TwineE\", \"llvm::Value::setName(llvm::Twine const&)\"},\n    {\"_ZN4llvm5Value8takeNameEPS0_\", \"llvm::Value::takeName(llvm::Value*)\"},\n    {\"_ZN4llvm5Value27uncheckedReplaceAllUsesWithEPS0_\", \"llvm::Value::uncheckedReplaceAllUsesWith(llvm::Value*)\"},\n    {\"_ZN4llvm15ValueHandleBase12ValueIsRAUWdEPNS_5ValueES2_\", \"llvm::ValueHandleBase::ValueIsRAUWd(llvm::Value*, llvm::Value*)\"},\n    {\"_ZN4llvm5Value18replaceAllUsesWithEPS0_\", \"llvm::Value::replaceAllUsesWith(llvm::Value*)\"},\n    {\"_ZN4llvm5Value17stripPointerCastsEv\", \"llvm::Value::stripPointerCasts()\"},\n    {\"_ZNK4llvm5Value24isDereferenceablePointerEv\", \"llvm::Value::isDereferenceablePointer() const\"},\n    {\"_ZN4llvm5Value16DoPHITranslationEPKNS_10BasicBlockES3_\", \"llvm::Value::DoPHITranslation(llvm::BasicBlock const*, llvm::BasicBlock const*)\"},\n    {\"_ZNK4llvm5Value10getContextEv\", \"llvm::Value::getContext() const\"},\n    {\"_ZN4llvm15ValueHandleBase20AddToExistingUseListEPPS0_\", \"llvm::ValueHandleBase::AddToExistingUseList(llvm::ValueHandleBase**)\"},\n    {\"_ZN4llvm15ValueHandleBase25AddToExistingUseListAfterEPS0_\", \"llvm::ValueHandleBase::AddToExistingUseListAfter(llvm::ValueHandleBase*)\"},\n    {\"_ZN4llvm15ValueHandleBase12AddToUseListEv\", \"llvm::ValueHandleBase::AddToUseList()\"},\n    {\"_ZN4llvm15ValueHandleBase17RemoveFromUseListEv\", \"llvm::ValueHandleBase::RemoveFromUseList()\"},\n    {\"_ZN4llvm10CallbackVHD0Ev\", \"llvm::CallbackVH::~CallbackVH()\"},\n    {\"_ZN4llvm10CallbackVHD1Ev\", \"llvm::CallbackVH::~CallbackVH()\"},\n    {\"_ZN4llvm10CallbackVHD2Ev\", \"llvm::CallbackVH::~CallbackVH()\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_15ValueHandleBaseENS_12DenseMapInfoIS2_EENS5_IS4_EEE16InsertIntoBucketERKS2_RKS4_PSt4pairIS2_S4_E\", \"llvm::DenseMap<llvm::Value*, llvm::ValueHandleBase*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::ValueHandleBase*> >::InsertIntoBucket(llvm::Value* const&, llvm::ValueHandleBase* const&, std::pair<llvm::Value*, llvm::ValueHandleBase*>*)\"},\n    {\"_ZN4llvm8DenseMapIPNS_5ValueEPNS_15ValueHandleBaseENS_12DenseMapInfoIS2_EENS5_IS4_EEE4growEj\", \"llvm::DenseMap<llvm::Value*, llvm::ValueHandleBase*, llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::ValueHandleBase*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm16ValueSymbolTableD1Ev\", \"llvm::ValueSymbolTable::~ValueSymbolTable()\"},\n    {\"_ZN4llvm16ValueSymbolTableD2Ev\", \"llvm::ValueSymbolTable::~ValueSymbolTable()\"},\n    {\"_ZN4llvm16ValueSymbolTable13reinsertValueEPNS_5ValueE\", \"llvm::ValueSymbolTable::reinsertValue(llvm::Value*)\"},\n    {\"_ZN4llvm16ValueSymbolTable15removeValueNameEPNS_14StringMapEntryIPNS_5ValueEEE\", \"llvm::ValueSymbolTable::removeValueName(llvm::StringMapEntry<llvm::Value*>*)\"},\n    {\"_ZN4llvm16ValueSymbolTable15createValueNameENS_9StringRefEPNS_5ValueE\", \"llvm::ValueSymbolTable::createValueName(llvm::StringRef, llvm::Value*)\"},\n    {\"_ZNK4llvm16ValueSymbolTable4dumpEv\", \"llvm::ValueSymbolTable::dump() const\"},\n    {\"_ZN4llvm9StringMapIPNS_5ValueENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::Value*>& llvm::StringMap<llvm::Value*, llvm::MallocAllocator>::GetOrCreateValue<llvm::Value*>(llvm::StringRef, llvm::Value*)\"},\n    {\"_ZN4llvm3EVT20getExtendedIntegerVTERNS_11LLVMContextEj\", \"llvm::EVT::getExtendedIntegerVT(llvm::LLVMContext&, unsigned int)\"},\n    {\"_ZN4llvm3EVT19getExtendedVectorVTERNS_11LLVMContextES0_j\", \"llvm::EVT::getExtendedVectorVT(llvm::LLVMContext&, llvm::EVT, unsigned int)\"},\n    {\"_ZNK4llvm3EVT13getTypeForEVTERNS_11LLVMContextE\", \"llvm::EVT::getTypeForEVT(llvm::LLVMContext&) const\"},\n    {\"_ZNK4llvm3EVT23isExtendedFloatingPointEv\", \"llvm::EVT::isExtendedFloatingPoint() const\"},\n    {\"_ZNK4llvm3EVT17isExtendedIntegerEv\", \"llvm::EVT::isExtendedInteger() const\"},\n    {\"_ZNK4llvm3EVT16isExtendedVectorEv\", \"llvm::EVT::isExtendedVector() const\"},\n    {\"_ZNK4llvm3EVT21isExtended64BitVectorEv\", \"llvm::EVT::isExtended64BitVector() const\"},\n    {\"_ZNK4llvm3EVT22isExtended128BitVectorEv\", \"llvm::EVT::isExtended128BitVector() const\"},\n    {\"_ZNK4llvm3EVT22isExtended256BitVectorEv\", \"llvm::EVT::isExtended256BitVector() const\"},\n    {\"_ZNK4llvm3EVT22isExtended512BitVectorEv\", \"llvm::EVT::isExtended512BitVector() const\"},\n    {\"_ZNK4llvm3EVT28getExtendedVectorElementTypeEv\", \"llvm::EVT::getExtendedVectorElementType() const\"},\n    {\"_ZN4llvm3EVT6getEVTEPKNS_4TypeEb\", \"llvm::EVT::getEVT(llvm::Type const*, bool)\"},\n    {\"_ZNK4llvm3EVT28getExtendedVectorNumElementsEv\", \"llvm::EVT::getExtendedVectorNumElements() const\"},\n    {\"_ZNK4llvm3EVT21getExtendedSizeInBitsEv\", \"llvm::EVT::getExtendedSizeInBits() const\"},\n    {\"_ZNK4llvm3EVT12getEVTStringEv\", \"llvm::EVT::getEVTString() const\"},\n    {\"_ZN4llvm25initializePreVerifierPassERNS_12PassRegistryE\", \"llvm::initializePreVerifierPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm22initializeVerifierPassERNS_12PassRegistryE\", \"llvm::initializeVerifierPass(llvm::PassRegistry&)\"},\n    {\"_ZN4llvm18createVerifierPassENS_21VerifierFailureActionE\", \"llvm::createVerifierPass(llvm::VerifierFailureAction)\"},\n    {\"_ZN4llvm14verifyFunctionERKNS_8FunctionENS_21VerifierFailureActionE\", \"llvm::verifyFunction(llvm::Function const&, llvm::VerifierFailureAction)\"},\n    {\"_ZN4llvm12verifyModuleERKNS_6ModuleENS_21VerifierFailureActionEPSs\", \"llvm::verifyModule(llvm::Module const&, llvm::VerifierFailureAction, std::string*)\"},\n    {\"_ZN12_GLOBAL__N_18VerifierD1Ev\", \"(anonymous namespace)::Verifier::~Verifier()\"},\n    {\"_ZN12_GLOBAL__N_18VerifierD0Ev\", \"(anonymous namespace)::Verifier::~Verifier()\"},\n    {\"_ZNK12_GLOBAL__N_18Verifier16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::Verifier::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_18Verifier16doInitializationERN4llvm6ModuleE\", \"(anonymous namespace)::Verifier::doInitialization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::Verifier::runOnFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier14doFinalizationERN4llvm6ModuleE\", \"(anonymous namespace)::Verifier::doFinalization(llvm::Module&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier16visitGlobalValueERN4llvm11GlobalValueE\", \"(anonymous namespace)::Verifier::visitGlobalValue(llvm::GlobalValue&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier13visitFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::Verifier::visitFunction(llvm::Function&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier13abortIfBrokenEv\", \"(anonymous namespace)::Verifier::abortIfBroken()\"},\n    {\"_ZN12_GLOBAL__N_18Verifier11CheckFailedERKN4llvm5TwineEPKNS1_5ValueES7_S7_S7_\", \"(anonymous namespace)::Verifier::CheckFailed(llvm::Twine const&, llvm::Value const*, llvm::Value const*, llvm::Value const*, llvm::Value const*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier11visitMDNodeERN4llvm6MDNodeEPNS1_8FunctionE\", \"(anonymous namespace)::Verifier::visitMDNode(llvm::MDNode&, llvm::Function*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier11CheckFailedERKN4llvm5TwineEPKNS1_5ValueEPKNS1_4TypeES7_\", \"(anonymous namespace)::Verifier::CheckFailed(llvm::Twine const&, llvm::Value const*, llvm::Type const*, llvm::Value const*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier19VerifyFunctionAttrsEPKN4llvm12FunctionTypeERKNS1_11AttrListPtrEPKNS1_5ValueE\", \"(anonymous namespace)::Verifier::VerifyFunctionAttrs(llvm::FunctionType const*, llvm::AttrListPtr const&, llvm::Value const*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier20VerifyParameterAttrsEjPKN4llvm4TypeEbPKNS1_5ValueE\", \"(anonymous namespace)::Verifier::VerifyParameterAttrs(unsigned int, llvm::Type const*, bool, llvm::Value const*)\"},\n    {\"_ZN4llvm11InstVisitorIN12_GLOBAL__N_18VerifierEvE5visitERNS_11InstructionE\", \"llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit(llvm::Instruction&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier16visitInstructionERN4llvm11InstructionE\", \"(anonymous namespace)::Verifier::visitInstruction(llvm::Instruction&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier10VerifyTypeEPKN4llvm4TypeE\", \"(anonymous namespace)::Verifier::VerifyType(llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier11CheckFailedERKN4llvm5TwineEPKNS1_4TypeES7_S7_\", \"(anonymous namespace)::Verifier::CheckFailed(llvm::Twine const&, llvm::Type const*, llvm::Type const*, llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier14VerifyCallSiteEN4llvm8CallSiteE\", \"(anonymous namespace)::Verifier::VerifyCallSite(llvm::CallSite)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier26visitIntrinsicFunctionCallEN4llvm9Intrinsic2IDERNS1_8CallInstE\", \"(anonymous namespace)::Verifier::visitIntrinsicFunctionCall(llvm::Intrinsic::ID, llvm::CallInst&)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier24VerifyIntrinsicPrototypeEN4llvm9Intrinsic2IDEPNS1_8FunctionEjjz\", \"(anonymous namespace)::Verifier::VerifyIntrinsicPrototype(llvm::Intrinsic::ID, llvm::Function*, unsigned int, unsigned int, ...)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier16PerformTypeCheckEN4llvm9Intrinsic2IDEPNS1_8FunctionEPKNS1_4TypeEijRSs\", \"(anonymous namespace)::Verifier::PerformTypeCheck(llvm::Intrinsic::ID, llvm::Function*, llvm::Type const*, int, unsigned int, std::string&)\"},\n    {\"_Z14IntrinsicParamjj\", \"IntrinsicParam(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_18Verifier19visitBinaryOperatorERN4llvm14BinaryOperatorE\", \"(anonymous namespace)::Verifier::visitBinaryOperator(llvm::BinaryOperator&)\"},\n    {\"_ZN12_GLOBAL__N_17TypeSetD1Ev\", \"(anonymous namespace)::TypeSet::~TypeSet()\"},\n    {\"_ZN12_GLOBAL__N_17TypeSetD0Ev\", \"(anonymous namespace)::TypeSet::~TypeSet()\"},\n    {\"_ZN12_GLOBAL__N_17TypeSet18refineAbstractTypeEPKN4llvm11DerivedTypeEPKNS1_4TypeE\", \"(anonymous namespace)::TypeSet::refineAbstractType(llvm::DerivedType const*, llvm::Type const*)\"},\n    {\"_ZN12_GLOBAL__N_17TypeSet18typeBecameConcreteEPKN4llvm11DerivedTypeE\", \"(anonymous namespace)::TypeSet::typeBecameConcrete(llvm::DerivedType const*)\"},\n    {\"_ZNK12_GLOBAL__N_17TypeSet4dumpEv\", \"(anonymous namespace)::TypeSet::dump() const\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_18VerifierEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::Verifier>()\"},\n    {\"_ZN4llvm15callDefaultCtorIN12_GLOBAL__N_111PreVerifierEEEPNS_4PassEv\", \"llvm::Pass* llvm::callDefaultCtor<(anonymous namespace)::PreVerifier>()\"},\n    {\"_ZN12_GLOBAL__N_111PreVerifierD1Ev\", \"(anonymous namespace)::PreVerifier::~PreVerifier()\"},\n    {\"_ZN12_GLOBAL__N_111PreVerifierD0Ev\", \"(anonymous namespace)::PreVerifier::~PreVerifier()\"},\n    {\"_ZNK12_GLOBAL__N_111PreVerifier16getAnalysisUsageERN4llvm13AnalysisUsageE\", \"(anonymous namespace)::PreVerifier::getAnalysisUsage(llvm::AnalysisUsage&) const\"},\n    {\"_ZN12_GLOBAL__N_111PreVerifier13runOnFunctionERN4llvm8FunctionE\", \"(anonymous namespace)::PreVerifier::runOnFunction(llvm::Function&)\"},\n    {\"_ZSt16__introsort_loopIPSt4pairIPN4llvm10BasicBlockEPNS1_5ValueEElEvT_S8_T0_\", \"void std::__introsort_loop<std::pair<llvm::BasicBlock*, llvm::Value*>*, long>(std::pair<llvm::BasicBlock*, llvm::Value*>*, std::pair<llvm::BasicBlock*, llvm::Value*>*, long)\"},\n    {\"_ZSt22__final_insertion_sortIPSt4pairIPN4llvm10BasicBlockEPNS1_5ValueEEEvT_S8_\", \"void std::__final_insertion_sort<std::pair<llvm::BasicBlock*, llvm::Value*>*>(std::pair<llvm::BasicBlock*, llvm::Value*>*, std::pair<llvm::BasicBlock*, llvm::Value*>*)\"},\n    {\"_ZSt16__insertion_sortIPSt4pairIPN4llvm10BasicBlockEPNS1_5ValueEEEvT_S8_\", \"void std::__insertion_sort<std::pair<llvm::BasicBlock*, llvm::Value*>*>(std::pair<llvm::BasicBlock*, llvm::Value*>*, std::pair<llvm::BasicBlock*, llvm::Value*>*)\"},\n    {\"_ZSt13__heap_selectIPSt4pairIPN4llvm10BasicBlockEPNS1_5ValueEEEvT_S8_S8_\", \"void std::__heap_select<std::pair<llvm::BasicBlock*, llvm::Value*>*>(std::pair<llvm::BasicBlock*, llvm::Value*>*, std::pair<llvm::BasicBlock*, llvm::Value*>*, std::pair<llvm::BasicBlock*, llvm::Value*>*)\"},\n    {\"_ZSt13__adjust_heapIPSt4pairIPN4llvm10BasicBlockEPNS1_5ValueEElS6_EvT_T0_S9_T1_\", \"void std::__adjust_heap<std::pair<llvm::BasicBlock*, llvm::Value*>*, long, std::pair<llvm::BasicBlock*, llvm::Value*> >(std::pair<llvm::BasicBlock*, llvm::Value*>*, long, long, std::pair<llvm::BasicBlock*, llvm::Value*>)\"},\n    {\"_ZN4llvm15SmallVectorImplIPNS_10BasicBlockEE6appendINS_12PredIteratorIS1_NS_18value_use_iteratorINS_4UserEEEEEEEvT_SA_\", \"void llvm::SmallVectorImpl<llvm::BasicBlock*>::append<llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> > >(llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >, llvm::PredIterator<llvm::BasicBlock, llvm::value_use_iterator<llvm::User> >)\"},\n    {\"_ZSt6__findIPPKN4llvm4TypeES3_ET_S5_S5_RKT0_St26random_access_iterator_tag\", \"llvm::Type const** std::__find<llvm::Type const**, llvm::Type const*>(llvm::Type const**, llvm::Type const**, llvm::Type const* const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm14ARMInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter12printOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter24printSBitModifierOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printSBitModifierOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printPredicateOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printPredicateOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter17printSORegOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printSORegOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter15printPImmediateEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printPImmediate(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printCPSOptionOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printCPSOptionOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter15printMemBOptionEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printMemBOption(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter25printAddrModeImm12OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrModeImm12Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printAddrMode2OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode2Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printLdStmModeOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printLdStmModeOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter18printSetendOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printSetendOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter16printThumbITMaskEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbITMask(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter30printMandatoryPredicateOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printMandatoryPredicateOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter15printCImmediateEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printCImmediate(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter20printNoHashImmediateEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printNoHashImmediate(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter19printMSRMaskOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printMSRMaskOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter22printThumbS4ImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbS4ImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter17printSOImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printSOImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter22printNEONModImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printNEONModImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printAddrMode5OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode5Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter26printT2AddrModeImm8OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2AddrModeImm8Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printT2AddrModeSoRegOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2AddrModeSoRegOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter17printRegisterListEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printRegisterList(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter30printBitfieldInvMaskImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printBitfieldInvMaskImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printAddrMode3OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode3Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter16printT2SOOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2SOOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter31printThumbAddrModeImm5S1OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbAddrModeImm5S1Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printThumbAddrModeRROperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbAddrModeRROperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter31printThumbAddrModeImm5S2OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbAddrModeImm5S2Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter31printThumbAddrModeImm5S4OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbAddrModeImm5S4Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printThumbAddrModeSPOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printThumbAddrModeSPOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter28printT2AddrModeImm8s4OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2AddrModeImm8s4Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printVFPf64ImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printVFPf64ImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printVFPf32ImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printVFPf32ImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printAddrMode2OffsetOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode2OffsetOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printAddrMode3OffsetOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode3OffsetOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter32printT2AddrModeImm8OffsetOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2AddrModeImm8OffsetOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter20printShiftImmOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printShiftImmOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter21printAddrMode6OperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode6Operand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter27printAddrMode6OffsetOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printAddrMode6OffsetOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter34printT2AddrModeImm8s4OffsetOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printT2AddrModeImm8s4OffsetOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter15getRegisterNameEj\", \"llvm::ARMInstPrinter::getRegisterName(unsigned int)\"},\n    {\"_ZN4llvm14ARMInstPrinter18getInstructionNameEj\", \"llvm::ARMInstPrinter::getInstructionName(unsigned int)\"},\n    {\"_ZNK4llvm14ARMInstPrinter13getOpcodeNameEj\", \"llvm::ARMInstPrinter::getOpcodeName(unsigned int) const\"},\n    {\"_ZN4llvm14ARMInstPrinter9printInstEPKNS_6MCInstERNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printInst(llvm::MCInst const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter19printNegZeroOperandEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printNegZeroOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter12printPCLabelEPKNS_6MCInstEjRNS_11raw_ostreamE\", \"llvm::ARMInstPrinter::printPCLabel(llvm::MCInst const*, unsigned int, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14ARMInstPrinter30printThumbAddrModeImm5SOperandEPKNS_6MCInstEjRNS_11raw_ostreamEj\", \"llvm::ARMInstPrinter::printThumbAddrModeImm5SOperand(llvm::MCInst const*, unsigned int, llvm::raw_ostream&, unsigned int)\"},\n    {\"_ZN4llvm14ARMInstPrinterD1Ev\", \"llvm::ARMInstPrinter::~ARMInstPrinter()\"},\n    {\"_ZN4llvm14ARMInstPrinterD0Ev\", \"llvm::ARMInstPrinter::~ARMInstPrinter()\"},\n    {\"_ZN4llvm14RegisterTargetILNS_6Triple8ArchTypeE14ELb1EE21getTripleMatchQualityERKSs\", \"llvm::RegisterTarget<(llvm::Triple::ArchType)14, true>::getTripleMatchQuality(std::string const&)\"},\n    {\"_ZN4llvm14RegisterTargetILNS_6Triple8ArchTypeE2ELb1EE21getTripleMatchQualityERKSs\", \"llvm::RegisterTarget<(llvm::Triple::ArchType)2, true>::getTripleMatchQuality(std::string const&)\"},\n    {\"_ZN4llvm21createELFObjectWriterEPNS_23MCELFObjectTargetWriterERNS_11raw_ostreamEb\", \"llvm::createELFObjectWriter(llvm::MCELFObjectTargetWriter*, llvm::raw_ostream&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriterC2EPN4llvm23MCELFObjectTargetWriterERNS1_11raw_ostreamEb\", \"(anonymous namespace)::ELFObjectWriter::ELFObjectWriter(llvm::MCELFObjectTargetWriter*, llvm::raw_ostream&, bool)\"},\n    {\"_ZN12_GLOBAL__N_118X86ELFObjectWriterD1Ev\", \"(anonymous namespace)::X86ELFObjectWriter::~X86ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_118X86ELFObjectWriterD0Ev\", \"(anonymous namespace)::X86ELFObjectWriter::~X86ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter24ExecutePostLayoutBindingERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::ELFObjectWriter::ExecutePostLayoutBinding(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter16RecordRelocationERKN4llvm11MCAssemblerERKNS1_11MCAsmLayoutEPKNS1_10MCFragmentERKNS1_7MCFixupENS1_7MCValueERy\", \"(anonymous namespace)::ELFObjectWriter::RecordRelocation(llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::MCFragment const*, llvm::MCFixup const&, llvm::MCValue, unsigned long long&)\"},\n    {\"_ZNK12_GLOBAL__N_115ELFObjectWriter38IsSymbolRefDifferenceFullyResolvedImplERKN4llvm11MCAssemblerERKNS1_12MCSymbolDataERKNS1_10MCFragmentEbb\", \"(anonymous namespace)::ELFObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(llvm::MCAssembler const&, llvm::MCSymbolData const&, llvm::MCFragment const&, bool, bool) const\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter11WriteObjectERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::ELFObjectWriter::WriteObject(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZNK12_GLOBAL__N_115ELFObjectWriter14ExplicitRelSymERKN4llvm11MCAssemblerERKNS1_7MCValueERKNS1_10MCFragmentEb\", \"(anonymous namespace)::ELFObjectWriter::ExplicitRelSym(llvm::MCAssembler const&, llvm::MCValue const&, llvm::MCFragment const&, bool) const\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter11WriteHeaderEyj\", \"(anonymous namespace)::ELFObjectWriter::WriteHeader(unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter11WriteEFlagsEv\", \"(anonymous namespace)::ELFObjectWriter::WriteEFlags()\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter16WriteSymbolEntryEPN4llvm14MCDataFragmentES3_yhyyhjb\", \"(anonymous namespace)::ELFObjectWriter::WriteSymbolEntry(llvm::MCDataFragment*, llvm::MCDataFragment*, unsigned long long, unsigned char, unsigned long long, unsigned long long, unsigned char, unsigned int, bool)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter11WriteSymbolEPN4llvm14MCDataFragmentES3_RNS0_13ELFSymbolDataERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::ELFObjectWriter::WriteSymbol(llvm::MCDataFragment*, llvm::MCDataFragment*, (anonymous namespace)::ELFObjectWriter::ELFSymbolData&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter16WriteSymbolTableEPN4llvm14MCDataFragmentES3_RKNS1_11MCAssemblerERKNS1_11MCAsmLayoutERKNS1_8DenseMapIPKNS1_12MCSectionELFEjNS1_12DenseMapInfoISD_EENSE_IjEEEE\", \"(anonymous namespace)::ELFObjectWriter::WriteSymbolTable(llvm::MCDataFragment*, llvm::MCDataFragment*, llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> > const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter27getSymbolIndexInSymbolTableERKN4llvm11MCAssemblerEPKNS1_8MCSymbolE\", \"(anonymous namespace)::ELFObjectWriter::getSymbolIndexInSymbolTable(llvm::MCAssembler const&, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter18ComputeSymbolTableERN4llvm11MCAssemblerERKNS1_8DenseMapIPKNS1_12MCSectionELFEjNS1_12DenseMapInfoIS7_EENS8_IjEEEENS4_IPKNS1_8MCSymbolES7_NS8_ISG_EES9_EE\", \"(anonymous namespace)::ELFObjectWriter::ComputeSymbolTable(llvm::MCAssembler&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> > const&, llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> >)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter15ComputeIndexMapERN4llvm11MCAssemblerERNS1_8DenseMapIPKNS1_12MCSectionELFEjNS1_12DenseMapInfoIS7_EENS8_IjEEEE\", \"(anonymous namespace)::ELFObjectWriter::ComputeIndexMap(llvm::MCAssembler&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> >&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter15WriteRelocationERN4llvm11MCAssemblerERNS1_11MCAsmLayoutERKNS1_13MCSectionDataE\", \"(anonymous namespace)::ELFObjectWriter::WriteRelocation(llvm::MCAssembler&, llvm::MCAsmLayout&, llvm::MCSectionData const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter16WriteRelocationsERN4llvm11MCAssemblerERNS1_11MCAsmLayoutE\", \"(anonymous namespace)::ELFObjectWriter::WriteRelocations(llvm::MCAssembler&, llvm::MCAsmLayout&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter22CreateMetadataSectionsERN4llvm11MCAssemblerERNS1_11MCAsmLayoutERKNS1_8DenseMapIPKNS1_12MCSectionELFEjNS1_12DenseMapInfoIS9_EENSA_IjEEEE\", \"(anonymous namespace)::ELFObjectWriter::CreateMetadataSections(llvm::MCAssembler&, llvm::MCAsmLayout&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> > const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter21CreateIndexedSectionsERN4llvm11MCAssemblerERNS1_11MCAsmLayoutERNS1_8DenseMapIPKNS1_12MCSectionELFEPKNS1_8MCSymbolENS1_12DenseMapInfoIS9_EENSD_ISC_EEEERNS6_ISC_S9_SF_SE_EE\", \"(anonymous namespace)::ELFObjectWriter::CreateIndexedSections(llvm::MCAssembler&, llvm::MCAsmLayout&, llvm::DenseMap<llvm::MCSectionELF const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >&, llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> >&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter16WriteSecHdrEntryEjjyyyyjjyy\", \"(anonymous namespace)::ELFObjectWriter::WriteSecHdrEntry(unsigned int, unsigned int, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned int, unsigned int, unsigned long long, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter24WriteRelocationsFragmentERKN4llvm11MCAssemblerEPNS1_14MCDataFragmentEPKNS1_13MCSectionDataE\", \"(anonymous namespace)::ELFObjectWriter::WriteRelocationsFragment(llvm::MCAssembler const&, llvm::MCDataFragment*, llvm::MCSectionData const*)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter12WriteSectionERN4llvm11MCAssemblerERKNS1_8DenseMapIPKNS1_12MCSectionELFEjNS1_12DenseMapInfoIS7_EENS8_IjEEEEjyyyRS6_\", \"(anonymous namespace)::ELFObjectWriter::WriteSection(llvm::MCAssembler&, llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> > const&, unsigned int, unsigned long long, unsigned long long, unsigned long long, llvm::MCSectionELF const&)\"},\n    {\"_ZN12_GLOBAL__N_118X86ELFObjectWriter12GetRelocTypeERKN4llvm7MCValueERKNS1_7MCFixupEbbx\", \"(anonymous namespace)::X86ELFObjectWriter::GetRelocType(llvm::MCValue const&, llvm::MCFixup const&, bool, bool, long long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataESt6vectorIN12_GLOBAL__N_115ELFObjectWriter18ELFRelocationEntryESaIS7_EENS_12DenseMapInfoIS3_EENSA_IS9_EEEixERKS3_\", \"llvm::DenseMap<llvm::MCSectionData const*, std::vector<(anonymous namespace)::ELFObjectWriter::ELFRelocationEntry, std::allocator<(anonymous namespace)::ELFObjectWriter::ELFRelocationEntry> >, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<std::vector<(anonymous namespace)::ELFObjectWriter::ELFRelocationEntry, std::allocator<(anonymous namespace)::ELFObjectWriter::ELFRelocationEntry> > > >::operator[](llvm::MCSectionData const* const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriter8String64ERN4llvm14MCDataFragmentEy\", \"(anonymous namespace)::ELFObjectWriter::String64(llvm::MCDataFragment&, unsigned long long)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_115ELFObjectWriter18ELFRelocationEntryEEEiPKvS5_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::ELFObjectWriter::ELFRelocationEntry>(void const*, void const*)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_115ELFObjectWriter13ELFSymbolDataESaIS2_EE9push_backERKS2_\", \"std::vector<(anonymous namespace)::ELFObjectWriter::ELFSymbolData, std::allocator<(anonymous namespace)::ELFObjectWriter::ELFSymbolData> >::push_back((anonymous namespace)::ELFObjectWriter::ELFSymbolData const&)\"},\n    {\"_ZN4llvm25array_pod_sort_comparatorIN12_GLOBAL__N_115ELFObjectWriter13ELFSymbolDataEEEiPKvS5_\", \"int llvm::array_pod_sort_comparator<(anonymous namespace)::ELFObjectWriter::ELFSymbolData>(void const*, void const*)\"},\n    {\"_Z15DataSectionSizeRKN4llvm13MCSectionDataE\", \"DataSectionSize(llvm::MCSectionData const&)\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriterD2Ev\", \"(anonymous namespace)::ELFObjectWriter::~ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriterD1Ev\", \"(anonymous namespace)::ELFObjectWriter::~ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_115ELFObjectWriterD0Ev\", \"(anonymous namespace)::ELFObjectWriter::~ELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_121MBlazeELFObjectWriterD1Ev\", \"(anonymous namespace)::MBlazeELFObjectWriter::~MBlazeELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_121MBlazeELFObjectWriterD0Ev\", \"(anonymous namespace)::MBlazeELFObjectWriter::~MBlazeELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_121MBlazeELFObjectWriter12GetRelocTypeERKN4llvm7MCValueERKNS1_7MCFixupEbbx\", \"(anonymous namespace)::MBlazeELFObjectWriter::GetRelocType(llvm::MCValue const&, llvm::MCFixup const&, bool, bool, long long)\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriterD1Ev\", \"(anonymous namespace)::ARMELFObjectWriter::~ARMELFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriterD0Ev\", \"(anonymous namespace)::ARMELFObjectWriter::~ARMELFObjectWriter()\"},\n    {\"_ZNK12_GLOBAL__N_118ARMELFObjectWriter14ExplicitRelSymERKN4llvm11MCAssemblerERKNS1_7MCValueERKNS1_10MCFragmentEb\", \"(anonymous namespace)::ARMELFObjectWriter::ExplicitRelSym(llvm::MCAssembler const&, llvm::MCValue const&, llvm::MCFragment const&, bool) const\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriter11WriteEFlagsEv\", \"(anonymous namespace)::ARMELFObjectWriter::WriteEFlags()\"},\n    {\"_ZN12_GLOBAL__N_118ARMELFObjectWriter12GetRelocTypeERKN4llvm7MCValueERKNS1_7MCFixupEbbx\", \"(anonymous namespace)::ARMELFObjectWriter::GetRelocType(llvm::MCValue const&, llvm::MCFixup const&, bool, bool, long long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEyNS_12DenseMapInfoIS3_EENS4_IyEEE16InsertIntoBucketERKS3_RKyPSt4pairIS3_yE\", \"llvm::DenseMap<llvm::MCSection const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(llvm::MCSection const* const&, unsigned long long const&, std::pair<llvm::MCSection const*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEyNS_12DenseMapInfoIS3_EENS4_IyEEE4growEj\", \"llvm::DenseMap<llvm::MCSection const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MCSectionELFEPKNS_8MCSymbolENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PSt4pairIS3_S6_E\", \"llvm::DenseMap<llvm::MCSectionELF const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::InsertIntoBucket(llvm::MCSectionELF const* const&, llvm::MCSymbol const* const&, std::pair<llvm::MCSectionELF const*, llvm::MCSymbol const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MCSectionELFEPKNS_8MCSymbolENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::MCSectionELF const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPKNS_12MCSectionELFENS_12DenseMapInfoIS3_EENS7_IS6_EEE16InsertIntoBucketERKS3_RKS6_PSt4pairIS3_S6_E\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> >::InsertIntoBucket(llvm::MCSymbol const* const&, llvm::MCSectionELF const* const&, std::pair<llvm::MCSymbol const*, llvm::MCSectionELF const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPKNS_12MCSectionELFENS_12DenseMapInfoIS3_EENS7_IS6_EEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MCSectionELFEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MCSectionELF const* const&, unsigned int const&, std::pair<llvm::MCSectionELF const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_12MCSectionELFEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::MCSectionELF const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionELF const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIPKN4llvm12MCSectionELFESaIS3_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS3_S5_EEmRKS3_\", \"std::vector<llvm::MCSectionELF const*, std::allocator<llvm::MCSectionELF const*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::MCSectionELF const**, std::vector<llvm::MCSectionELF const*, std::allocator<llvm::MCSectionELF const*> > >, unsigned long, llvm::MCSectionELF const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPKNS_12MCSectionELFENS_12DenseMapInfoIS3_EENS7_IS6_EEE8CopyFromERKSA_\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> >::CopyFrom(llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSectionELF const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSectionELF const*> > const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolES3_NS_12DenseMapInfoIS3_EES5_E6insertERKSt4pairIS3_S3_E\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::insert(std::pair<llvm::MCSymbol const*, llvm::MCSymbol const*> const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolES3_NS_12DenseMapInfoIS3_EES5_E16InsertIntoBucketERKS3_S8_PSt4pairIS3_S3_E\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::InsertIntoBucket(llvm::MCSymbol const* const&, llvm::MCSymbol const* const&, std::pair<llvm::MCSymbol const*, llvm::MCSymbol const*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolES3_NS_12DenseMapInfoIS3_EES5_E4growEj\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSymbol const*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9MCAsmInfoC1Ev\", \"llvm::MCAsmInfo::MCAsmInfo()\"},\n    {\"_ZN4llvm9MCAsmInfoC2Ev\", \"llvm::MCAsmInfo::MCAsmInfo()\"},\n    {\"_ZN4llvm9MCAsmInfoD0Ev\", \"llvm::MCAsmInfo::~MCAsmInfo()\"},\n    {\"_ZN4llvm9MCAsmInfoD1Ev\", \"llvm::MCAsmInfo::~MCAsmInfo()\"},\n    {\"_ZN4llvm9MCAsmInfoD2Ev\", \"llvm::MCAsmInfo::~MCAsmInfo()\"},\n    {\"_ZN4llvm9MCAsmInfo14getULEB128SizeEj\", \"llvm::MCAsmInfo::getULEB128Size(unsigned int)\"},\n    {\"_ZN4llvm9MCAsmInfo14getSLEB128SizeEi\", \"llvm::MCAsmInfo::getSLEB128Size(int)\"},\n    {\"_ZN4llvm13MCAsmInfoCOFFC1Ev\", \"llvm::MCAsmInfoCOFF::MCAsmInfoCOFF()\"},\n    {\"_ZN4llvm13MCAsmInfoCOFFC2Ev\", \"llvm::MCAsmInfoCOFF::MCAsmInfoCOFF()\"},\n    {\"_ZN4llvm15MCAsmInfoDarwinC1Ev\", \"llvm::MCAsmInfoDarwin::MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm15MCAsmInfoDarwinC2Ev\", \"llvm::MCAsmInfoDarwin::MCAsmInfoDarwin()\"},\n    {\"_ZN4llvm17createAsmStreamerERNS_9MCContextERNS_21formatted_raw_ostreamEbbPNS_13MCInstPrinterEPNS_13MCCodeEmitterEPNS_16TargetAsmBackendEb\", \"llvm::createAsmStreamer(llvm::MCContext&, llvm::formatted_raw_ostream&, bool, bool, llvm::MCInstPrinter*, llvm::MCCodeEmitter*, llvm::TargetAsmBackend*, bool)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamerD1Ev\", \"(anonymous namespace)::MCAsmStreamer::~MCAsmStreamer()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamerD0Ev\", \"(anonymous namespace)::MCAsmStreamer::~MCAsmStreamer()\"},\n    {\"_ZNK12_GLOBAL__N_113MCAsmStreamer12isVerboseAsmEv\", \"(anonymous namespace)::MCAsmStreamer::isVerboseAsm() const\"},\n    {\"_ZNK12_GLOBAL__N_113MCAsmStreamer17hasRawTextSupportEv\", \"(anonymous namespace)::MCAsmStreamer::hasRawTextSupport() const\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer10AddCommentERKN4llvm5TwineE\", \"(anonymous namespace)::MCAsmStreamer::AddComment(llvm::Twine const&)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer12GetCommentOSEv\", \"(anonymous namespace)::MCAsmStreamer::GetCommentOS()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer12AddBlankLineEv\", \"(anonymous namespace)::MCAsmStreamer::AddBlankLine()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer13SwitchSectionEPKN4llvm9MCSectionE\", \"(anonymous namespace)::MCAsmStreamer::SwitchSection(llvm::MCSection const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer12InitSectionsEv\", \"(anonymous namespace)::MCAsmStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCAsmStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::MCAsmStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCAsmStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCAsmStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer17EmitWeakReferenceEPN4llvm8MCSymbolEPKS2_\", \"(anonymous namespace)::MCAsmStreamer::EmitWeakReference(llvm::MCSymbol*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::MCAsmStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCAsmStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::MCAsmStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::MCAsmStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::MCAsmStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::MCAsmStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCAsmStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::MCAsmStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::MCAsmStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::MCAsmStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::MCAsmStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::MCAsmStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer13EmitValueImplEPKN4llvm6MCExprEjbj\", \"(anonymous namespace)::MCAsmStreamer::EmitValueImpl(llvm::MCExpr const*, unsigned int, bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer12EmitIntValueEyjj\", \"(anonymous namespace)::MCAsmStreamer::EmitIntValue(unsigned long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EmitULEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCAsmStreamer::EmitULEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EmitSLEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCAsmStreamer::EmitSLEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EmitGPRel32ValueEPKN4llvm6MCExprE\", \"(anonymous namespace)::MCAsmStreamer::EmitGPRel32Value(llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer8EmitFillEyhj\", \"(anonymous namespace)::MCAsmStreamer::EmitFill(unsigned long long, unsigned char, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::MCAsmStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::MCAsmStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer17EmitValueToOffsetEPKN4llvm6MCExprEh\", \"(anonymous namespace)::MCAsmStreamer::EmitValueToOffset(llvm::MCExpr const*, unsigned char)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::MCAsmStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer22EmitDwarfFileDirectiveEjN4llvm9StringRefE\", \"(anonymous namespace)::MCAsmStreamer::EmitDwarfFileDirective(unsigned int, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer21EmitDwarfLocDirectiveEjjjjjj\", \"(anonymous namespace)::MCAsmStreamer::EmitDwarfLocDirective(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer24EmitDwarfAdvanceLineAddrExPKN4llvm8MCSymbolES4_\", \"(anonymous namespace)::MCAsmStreamer::EmitDwarfAdvanceLineAddr(long long, llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer16EmitCFIStartProcEv\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIStartProc()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer14EmitCFIEndProcEv\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIEndProc()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer19EmitCFIDefCfaOffsetEx\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIDefCfaOffset(long long)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer21EmitCFIDefCfaRegisterEx\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIDefCfaRegister(long long)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer13EmitCFIOffsetExx\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIOffset(long long, long long)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer18EmitCFIPersonalityEPKN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCAsmStreamer::EmitCFIPersonality(llvm::MCSymbol const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer11EmitCFILsdaEPKN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCAsmStreamer::EmitCFILsda(llvm::MCSymbol const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer15EmitInstructionERKN4llvm6MCInstE\", \"(anonymous namespace)::MCAsmStreamer::EmitInstruction(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer11EmitRawTextEN4llvm9StringRefE\", \"(anonymous namespace)::MCAsmStreamer::EmitRawText(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer6FinishEv\", \"(anonymous namespace)::MCAsmStreamer::Finish()\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer18AddEncodingCommentERKN4llvm6MCInstE\", \"(anonymous namespace)::MCAsmStreamer::AddEncodingComment(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_113MCAsmStreamer7EmitEOLEv\", \"(anonymous namespace)::MCAsmStreamer::EmitEOL()\"},\n    {\"_Z17PrintQuotedStringN4llvm9StringRefERNS_11raw_ostreamE\", \"PrintQuotedString(llvm::StringRef, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14format_object1IhED1Ev\", \"llvm::format_object1<unsigned char>::~format_object1()\"},\n    {\"_ZNK4llvm14format_object1IhE7snprintEPcj\", \"llvm::format_object1<unsigned char>::snprint(char*, unsigned int) const\"},\n    {\"_ZN4llvm14format_object1IhED0Ev\", \"llvm::format_object1<unsigned char>::~format_object1()\"},\n    {\"_ZN4llvm11MCAsmLayoutC1ERNS_11MCAssemblerE\", \"llvm::MCAsmLayout::MCAsmLayout(llvm::MCAssembler&)\"},\n    {\"_ZN4llvm11MCAsmLayoutC2ERNS_11MCAssemblerE\", \"llvm::MCAsmLayout::MCAsmLayout(llvm::MCAssembler&)\"},\n    {\"_ZNK4llvm11MCAsmLayout18isFragmentUpToDateEPKNS_10MCFragmentE\", \"llvm::MCAsmLayout::isFragmentUpToDate(llvm::MCFragment const*) const\"},\n    {\"_ZN4llvm11MCAsmLayout10InvalidateEPNS_10MCFragmentE\", \"llvm::MCAsmLayout::Invalidate(llvm::MCFragment*)\"},\n    {\"_ZNK4llvm11MCAsmLayout11EnsureValidEPKNS_10MCFragmentE\", \"llvm::MCAsmLayout::EnsureValid(llvm::MCFragment const*) const\"},\n    {\"_ZN4llvm11MCAsmLayout14LayoutFragmentEPNS_10MCFragmentE\", \"llvm::MCAsmLayout::LayoutFragment(llvm::MCFragment*)\"},\n    {\"_ZNK4llvm11MCAsmLayout17getFragmentOffsetEPKNS_10MCFragmentE\", \"llvm::MCAsmLayout::getFragmentOffset(llvm::MCFragment const*) const\"},\n    {\"_ZNK4llvm11MCAsmLayout15getSymbolOffsetEPKNS_12MCSymbolDataE\", \"llvm::MCAsmLayout::getSymbolOffset(llvm::MCSymbolData const*) const\"},\n    {\"_ZNK4llvm11MCAsmLayout21getSectionAddressSizeEPKNS_13MCSectionDataE\", \"llvm::MCAsmLayout::getSectionAddressSize(llvm::MCSectionData const*) const\"},\n    {\"_ZNK4llvm11MCAssembler19ComputeFragmentSizeERKNS_11MCAsmLayoutERKNS_10MCFragmentE\", \"llvm::MCAssembler::ComputeFragmentSize(llvm::MCAsmLayout const&, llvm::MCFragment const&) const\"},\n    {\"_ZNK4llvm11MCAsmLayout18getSectionFileSizeEPKNS_13MCSectionDataE\", \"llvm::MCAsmLayout::getSectionFileSize(llvm::MCSectionData const*) const\"},\n    {\"_ZN4llvm10MCFragmentC1Ev\", \"llvm::MCFragment::MCFragment()\"},\n    {\"_ZN4llvm10MCFragmentC2Ev\", \"llvm::MCFragment::MCFragment()\"},\n    {\"_ZN4llvm10MCFragmentD0Ev\", \"llvm::MCFragment::~MCFragment()\"},\n    {\"_ZN4llvm10MCFragmentD1Ev\", \"llvm::MCFragment::~MCFragment()\"},\n    {\"_ZN4llvm10MCFragmentD2Ev\", \"llvm::MCFragment::~MCFragment()\"},\n    {\"_ZN4llvm10MCFragmentC1ENS0_12FragmentTypeEPNS_13MCSectionDataE\", \"llvm::MCFragment::MCFragment(llvm::MCFragment::FragmentType, llvm::MCSectionData*)\"},\n    {\"_ZN4llvm10MCFragmentC2ENS0_12FragmentTypeEPNS_13MCSectionDataE\", \"llvm::MCFragment::MCFragment(llvm::MCFragment::FragmentType, llvm::MCSectionData*)\"},\n    {\"_ZN4llvm13MCSectionDataC1Ev\", \"llvm::MCSectionData::MCSectionData()\"},\n    {\"_ZN4llvm13MCSectionDataC2Ev\", \"llvm::MCSectionData::MCSectionData()\"},\n    {\"_ZN4llvm13MCSectionDataC1ERKNS_9MCSectionEPNS_11MCAssemblerE\", \"llvm::MCSectionData::MCSectionData(llvm::MCSection const&, llvm::MCAssembler*)\"},\n    {\"_ZN4llvm13MCSectionDataC2ERKNS_9MCSectionEPNS_11MCAssemblerE\", \"llvm::MCSectionData::MCSectionData(llvm::MCSection const&, llvm::MCAssembler*)\"},\n    {\"_ZN4llvm12MCSymbolDataC1Ev\", \"llvm::MCSymbolData::MCSymbolData()\"},\n    {\"_ZN4llvm12MCSymbolDataC2Ev\", \"llvm::MCSymbolData::MCSymbolData()\"},\n    {\"_ZN4llvm12MCSymbolDataC1ERKNS_8MCSymbolEPNS_10MCFragmentEyPNS_11MCAssemblerE\", \"llvm::MCSymbolData::MCSymbolData(llvm::MCSymbol const&, llvm::MCFragment*, unsigned long long, llvm::MCAssembler*)\"},\n    {\"_ZN4llvm12MCSymbolDataC2ERKNS_8MCSymbolEPNS_10MCFragmentEyPNS_11MCAssemblerE\", \"llvm::MCSymbolData::MCSymbolData(llvm::MCSymbol const&, llvm::MCFragment*, unsigned long long, llvm::MCAssembler*)\"},\n    {\"_ZN4llvm11MCAssemblerC1ERNS_9MCContextERNS_16TargetAsmBackendERNS_13MCCodeEmitterERNS_14MCObjectWriterERNS_11raw_ostreamE\", \"llvm::MCAssembler::MCAssembler(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::MCCodeEmitter&, llvm::MCObjectWriter&, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm11MCAssemblerC2ERNS_9MCContextERNS_16TargetAsmBackendERNS_13MCCodeEmitterERNS_14MCObjectWriterERNS_11raw_ostreamE\", \"llvm::MCAssembler::MCAssembler(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::MCCodeEmitter&, llvm::MCObjectWriter&, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm11MCAssemblerD1Ev\", \"llvm::MCAssembler::~MCAssembler()\"},\n    {\"_ZN4llvm11MCAssemblerD2Ev\", \"llvm::MCAssembler::~MCAssembler()\"},\n    {\"_ZNK4llvm11MCAssembler21isSymbolLinkerVisibleERKNS_8MCSymbolE\", \"llvm::MCAssembler::isSymbolLinkerVisible(llvm::MCSymbol const&) const\"},\n    {\"_ZNK4llvm11MCAssembler7getAtomEPKNS_12MCSymbolDataE\", \"llvm::MCAssembler::getAtom(llvm::MCSymbolData const*) const\"},\n    {\"_ZNK4llvm11MCAssembler13EvaluateFixupERKNS_11MCAsmLayoutERKNS_7MCFixupEPKNS_10MCFragmentERNS_7MCValueERy\", \"llvm::MCAssembler::EvaluateFixup(llvm::MCAsmLayout const&, llvm::MCFixup const&, llvm::MCFragment const*, llvm::MCValue&, unsigned long long&) const\"},\n    {\"_ZNK4llvm11MCAssembler16WriteSectionDataEPKNS_13MCSectionDataERKNS_11MCAsmLayoutE\", \"llvm::MCAssembler::WriteSectionData(llvm::MCSectionData const*, llvm::MCAsmLayout const&) const\"},\n    {\"_ZN4llvm11MCAssembler11HandleFixupERKNS_11MCAsmLayoutERNS_10MCFragmentERKNS_7MCFixupE\", \"llvm::MCAssembler::HandleFixup(llvm::MCAsmLayout const&, llvm::MCFragment&, llvm::MCFixup const&)\"},\n    {\"_ZN4llvm11MCAssembler6FinishEv\", \"llvm::MCAssembler::Finish()\"},\n    {\"_ZN4llvm11MCAssembler10LayoutOnceERNS_11MCAsmLayoutE\", \"llvm::MCAssembler::LayoutOnce(llvm::MCAsmLayout&)\"},\n    {\"_ZN4llvm11MCAssembler12FinishLayoutERNS_11MCAsmLayoutE\", \"llvm::MCAssembler::FinishLayout(llvm::MCAsmLayout&)\"},\n    {\"_ZNK4llvm11MCAssembler20FixupNeedsRelaxationERKNS_7MCFixupEPKNS_10MCFragmentERKNS_11MCAsmLayoutE\", \"llvm::MCAssembler::FixupNeedsRelaxation(llvm::MCFixup const&, llvm::MCFragment const*, llvm::MCAsmLayout const&) const\"},\n    {\"_ZNK4llvm11MCAssembler23FragmentNeedsRelaxationEPKNS_14MCInstFragmentERKNS_11MCAsmLayoutE\", \"llvm::MCAssembler::FragmentNeedsRelaxation(llvm::MCInstFragment const*, llvm::MCAsmLayout const&) const\"},\n    {\"_ZN4llvm11MCAssembler16RelaxInstructionERNS_11MCAsmLayoutERNS_14MCInstFragmentE\", \"llvm::MCAssembler::RelaxInstruction(llvm::MCAsmLayout&, llvm::MCInstFragment&)\"},\n    {\"_ZN4llvm11MCAssembler8RelaxLEBERNS_11MCAsmLayoutERNS_13MCLEBFragmentE\", \"llvm::MCAssembler::RelaxLEB(llvm::MCAsmLayout&, llvm::MCLEBFragment&)\"},\n    {\"_ZN4llvm11MCAssembler18RelaxDwarfLineAddrERNS_11MCAsmLayoutERNS_23MCDwarfLineAddrFragmentE\", \"llvm::MCAssembler::RelaxDwarfLineAddr(llvm::MCAsmLayout&, llvm::MCDwarfLineAddrFragment&)\"},\n    {\"_ZN4llvm11MCAssembler27RelaxDwarfCallFrameFragmentERNS_11MCAsmLayoutERNS_24MCDwarfCallFrameFragmentE\", \"llvm::MCAssembler::RelaxDwarfCallFrameFragment(llvm::MCAsmLayout&, llvm::MCDwarfCallFrameFragment&)\"},\n    {\"_ZN4llvm11MCAssembler17LayoutSectionOnceERNS_11MCAsmLayoutERNS_13MCSectionDataE\", \"llvm::MCAssembler::LayoutSectionOnce(llvm::MCAsmLayout&, llvm::MCSectionData&)\"},\n    {\"_ZN4llvmlsERNS_11raw_ostreamERKNS_7MCFixupE\", \"llvm::operator<<(llvm::raw_ostream&, llvm::MCFixup const&)\"},\n    {\"_ZN4llvm10MCFragment4dumpEv\", \"llvm::MCFragment::dump()\"},\n    {\"_ZN4llvm13MCSectionData4dumpEv\", \"llvm::MCSectionData::dump()\"},\n    {\"_ZN4llvm12MCSymbolData4dumpEv\", \"llvm::MCSymbolData::dump()\"},\n    {\"_ZN4llvm11MCAssembler4dumpEv\", \"llvm::MCAssembler::dump()\"},\n    {\"_ZN4llvm6iplistINS_12MCSymbolDataENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::MCSymbolData, llvm::ilist_traits<llvm::MCSymbolData> >::~iplist()\"},\n    {\"_ZN4llvm6iplistINS_13MCSectionDataENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::MCSectionData, llvm::ilist_traits<llvm::MCSectionData> >::~iplist()\"},\n    {\"_ZN4llvm6iplistINS_10MCFragmentENS_12ilist_traitsIS1_EEED2Ev\", \"llvm::iplist<llvm::MCFragment, llvm::ilist_traits<llvm::MCFragment> >::~iplist()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEPNS_10MCFragmentENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MCSectionData const*, llvm::MCFragment*, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<llvm::MCFragment*> >::InsertIntoBucket(llvm::MCSectionData const* const&, llvm::MCFragment* const&, std::pair<llvm::MCSectionData const*, llvm::MCFragment*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEPNS_10MCFragmentENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MCSectionData const*, llvm::MCFragment*, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<llvm::MCFragment*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm14MCObjectWriter10WriteZerosEj\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)\"},\n    {\"_ZN4llvm13MCCodeEmitterC1Ev\", \"llvm::MCCodeEmitter::MCCodeEmitter()\"},\n    {\"_ZN4llvm13MCCodeEmitterC2Ev\", \"llvm::MCCodeEmitter::MCCodeEmitter()\"},\n    {\"_ZN4llvm13MCCodeEmitterD0Ev\", \"llvm::MCCodeEmitter::~MCCodeEmitter()\"},\n    {\"_ZN4llvm13MCCodeEmitterD1Ev\", \"llvm::MCCodeEmitter::~MCCodeEmitter()\"},\n    {\"_ZN4llvm13MCCodeEmitterD2Ev\", \"llvm::MCCodeEmitter::~MCCodeEmitter()\"},\n    {\"_ZN4llvm9MCContextC1ERKNS_9MCAsmInfoEPKNS_13TargetAsmInfoE\", \"llvm::MCContext::MCContext(llvm::MCAsmInfo const&, llvm::TargetAsmInfo const*)\"},\n    {\"_ZN4llvm9MCContextC2ERKNS_9MCAsmInfoEPKNS_13TargetAsmInfoE\", \"llvm::MCContext::MCContext(llvm::MCAsmInfo const&, llvm::TargetAsmInfo const*)\"},\n    {\"_ZN4llvm9MCContextD1Ev\", \"llvm::MCContext::~MCContext()\"},\n    {\"_ZN4llvm9MCContextD2Ev\", \"llvm::MCContext::~MCContext()\"},\n    {\"_ZN4llvm9MCContext17GetOrCreateSymbolENS_9StringRefE\", \"llvm::MCContext::GetOrCreateSymbol(llvm::StringRef)\"},\n    {\"_ZN4llvm9MCContext12CreateSymbolENS_9StringRefE\", \"llvm::MCContext::CreateSymbol(llvm::StringRef)\"},\n    {\"_ZN4llvm9MCContext17GetOrCreateSymbolERKNS_5TwineE\", \"llvm::MCContext::GetOrCreateSymbol(llvm::Twine const&)\"},\n    {\"_ZN4llvm9MCContext16CreateTempSymbolEv\", \"llvm::MCContext::CreateTempSymbol()\"},\n    {\"_ZN4llvm9MCContext12NextInstanceEx\", \"llvm::MCContext::NextInstance(long long)\"},\n    {\"_ZN4llvm9MCContext11GetInstanceEx\", \"llvm::MCContext::GetInstance(long long)\"},\n    {\"_ZN4llvm9MCContext28CreateDirectionalLocalSymbolEx\", \"llvm::MCContext::CreateDirectionalLocalSymbol(long long)\"},\n    {\"_ZN4llvm9MCContext25GetDirectionalLocalSymbolExi\", \"llvm::MCContext::GetDirectionalLocalSymbol(long long, int)\"},\n    {\"_ZNK4llvm9MCContext12LookupSymbolENS_9StringRefE\", \"llvm::MCContext::LookupSymbol(llvm::StringRef) const\"},\n    {\"_ZN4llvm9MCContext15getMachOSectionENS_9StringRefES1_jjNS_11SectionKindE\", \"llvm::MCContext::getMachOSection(llvm::StringRef, llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind)\"},\n    {\"_ZN4llvm9MCContext13getELFSectionENS_9StringRefEjjNS_11SectionKindE\", \"llvm::MCContext::getELFSection(llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind)\"},\n    {\"_ZN4llvm9MCContext13getELFSectionENS_9StringRefEjjNS_11SectionKindEjS1_\", \"llvm::MCContext::getELFSection(llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind, unsigned int, llvm::StringRef)\"},\n    {\"_ZN4llvm9MCContext21CreateELFGroupSectionEv\", \"llvm::MCContext::CreateELFGroupSection()\"},\n    {\"_ZN4llvm9MCContext14getCOFFSectionENS_9StringRefEjiNS_11SectionKindE\", \"llvm::MCContext::getCOFFSection(llvm::StringRef, unsigned int, int, llvm::SectionKind)\"},\n    {\"_ZN4llvm9MCContext12GetDwarfFileENS_9StringRefEj\", \"llvm::MCContext::GetDwarfFile(llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm9MCContext22isValidDwarfFileNumberEj\", \"llvm::MCContext::isValidDwarfFileNumber(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm9StringRefESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::StringRef, std::allocator<llvm::StringRef> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::StringRef*, std::vector<llvm::StringRef, std::allocator<llvm::StringRef> > >, llvm::StringRef const&)\"},\n    {\"_ZNSt6vectorIPN4llvm11MCDwarfFileESaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_\", \"std::vector<llvm::MCDwarfFile*, std::allocator<llvm::MCDwarfFile*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<llvm::MCDwarfFile**, std::vector<llvm::MCDwarfFile*, std::allocator<llvm::MCDwarfFile*> > >, unsigned long, llvm::MCDwarfFile* const&)\"},\n    {\"_ZN4llvm9StringMapIPKNS_13MCSectionCOFFENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::MCSectionCOFF const*>& llvm::StringMap<llvm::MCSectionCOFF const*, llvm::MallocAllocator>::GetOrCreateValue<llvm::MCSectionCOFF const*>(llvm::StringRef, llvm::MCSectionCOFF const*)\"},\n    {\"_ZN4llvm9StringMapIPKNS_12MCSectionELFENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::MCSectionELF const*>& llvm::StringMap<llvm::MCSectionELF const*, llvm::MallocAllocator>::GetOrCreateValue<llvm::MCSectionELF const*>(llvm::StringRef, llvm::MCSectionELF const*)\"},\n    {\"_ZN4llvm9StringMapIPKNS_14MCSectionMachOENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::MCSectionMachO const*>& llvm::StringMap<llvm::MCSectionMachO const*, llvm::MallocAllocator>::GetOrCreateValue<llvm::MCSectionMachO const*>(llvm::StringRef, llvm::MCSectionMachO const*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_7MCLabelENS_12DenseMapInfoIjEENS3_IS2_EEE16InsertIntoBucketERKjRKS2_PSt4pairIjS2_E\", \"llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MCLabel*> >::InsertIntoBucket(unsigned int const&, llvm::MCLabel* const&, std::pair<unsigned int, llvm::MCLabel*>*)\"},\n    {\"_ZN4llvm8DenseMapIjPNS_7MCLabelENS_12DenseMapInfoIjEENS3_IS2_EEE4growEj\", \"llvm::DenseMap<unsigned int, llvm::MCLabel*, llvm::DenseMapInfo<unsigned int>, llvm::DenseMapInfo<llvm::MCLabel*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm9StringMapIbNS_15MallocAllocatorEE16GetOrCreateValueIbEERNS_14StringMapEntryIbEENS_9StringRefET_\", \"llvm::StringMapEntry<bool>& llvm::StringMap<bool, llvm::MallocAllocator>::GetOrCreateValue<bool>(llvm::StringRef, bool)\"},\n    {\"_ZN4llvm9StringMapIPNS_8MCSymbolENS_15MallocAllocatorEE16GetOrCreateValueIS2_EERNS_14StringMapEntryIS2_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::MCSymbol*>& llvm::StringMap<llvm::MCSymbol*, llvm::MallocAllocator>::GetOrCreateValue<llvm::MCSymbol*>(llvm::StringRef, llvm::MCSymbol*)\"},\n    {\"_ZNK4llvm9MCSection22isBaseAddressKnownZeroEv\", \"llvm::MCSection::isBaseAddressKnownZero() const\"},\n    {\"_ZNK4llvm12MCSectionELF22isBaseAddressKnownZeroEv\", \"llvm::MCSectionELF::isBaseAddressKnownZero() const\"},\n    {\"_ZN4llvm11MCLineEntry4MakeEPNS_10MCStreamerEPKNS_9MCSectionE\", \"llvm::MCLineEntry::Make(llvm::MCStreamer*, llvm::MCSection const*)\"},\n    {\"_ZN4llvm16MCDwarfFileTable4EmitEPNS_10MCStreamerE\", \"llvm::MCDwarfFileTable::Emit(llvm::MCStreamer*)\"},\n    {\"_ZN4llvm15MCDwarfLineAddr4EmitEPNS_10MCStreamerExy\", \"llvm::MCDwarfLineAddr::Emit(llvm::MCStreamer*, long long, unsigned long long)\"},\n    {\"_ZN4llvm15MCDwarfLineAddr5WriteEPNS_14MCObjectWriterExy\", \"llvm::MCDwarfLineAddr::Write(llvm::MCObjectWriter*, long long, unsigned long long)\"},\n    {\"_ZN4llvm15MCDwarfLineAddr6EncodeExyRNS_11raw_ostreamE\", \"llvm::MCDwarfLineAddr::Encode(long long, unsigned long long, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm11MCDwarfFile5printERNS_11raw_ostreamE\", \"llvm::MCDwarfFile::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm11MCDwarfFile4dumpEv\", \"llvm::MCDwarfFile::dump() const\"},\n    {\"_ZN4llvm19MCDwarfFrameEmitter4EmitERNS_10MCStreamerE\", \"llvm::MCDwarfFrameEmitter::Emit(llvm::MCStreamer&)\"},\n    {\"_ZN4llvm19MCDwarfFrameEmitter14EmitAdvanceLocERNS_10MCStreamerEy\", \"llvm::MCDwarfFrameEmitter::EmitAdvanceLoc(llvm::MCStreamer&, unsigned long long)\"},\n    {\"_ZN4llvm19MCDwarfFrameEmitter16EncodeAdvanceLocEyRNS_11raw_ostreamE\", \"llvm::MCDwarfFrameEmitter::EncodeAdvanceLoc(unsigned long long, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm8DenseMapIN12_GLOBAL__N_16CIEKeyEPKNS_8MCSymbolENS_12DenseMapInfoIS2_EENS6_IS5_EEE15LookupBucketForERKS2_RPSt4pairIS2_S5_E\", \"llvm::DenseMap<(anonymous namespace)::CIEKey, llvm::MCSymbol const*, llvm::DenseMapInfo<(anonymous namespace)::CIEKey>, llvm::DenseMapInfo<llvm::MCSymbol const*> >::LookupBucketFor((anonymous namespace)::CIEKey const&, std::pair<(anonymous namespace)::CIEKey, llvm::MCSymbol const*>*&) const\"},\n    {\"_Z19EmitCFIInstructionsRN4llvm10MCStreamerERKSt6vectorINS_16MCCFIInstructionESaIS3_EEPNS_8MCSymbolE\", \"EmitCFIInstructions(llvm::MCStreamer&, std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> > const&, llvm::MCSymbol*)\"},\n    {\"_ZN4llvm9MCContext16addMCLineSectionEPKNS_9MCSectionEPNS_13MCLineSectionE\", \"llvm::MCContext::addMCLineSection(llvm::MCSection const*, llvm::MCLineSection*)\"},\n    {\"_ZNSt6vectorIN4llvm11MachineMoveESaIS1_EEC2ERKS3_\", \"std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> >::vector(std::vector<llvm::MachineMove, std::allocator<llvm::MachineMove> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm11MCLineEntryESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MCLineEntry, std::allocator<llvm::MCLineEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCLineEntry*, std::vector<llvm::MCLineEntry, std::allocator<llvm::MCLineEntry> > >, llvm::MCLineEntry const&)\"},\n    {\"_ZNSt6vectorIPKN4llvm9MCSectionESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::MCSection const*, std::allocator<llvm::MCSection const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCSection const**, std::vector<llvm::MCSection const*, std::allocator<llvm::MCSection const*> > >, llvm::MCSection const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEPNS_13MCLineSectionENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MCSection const*, llvm::MCLineSection*, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<llvm::MCLineSection*> >::InsertIntoBucket(llvm::MCSection const* const&, llvm::MCLineSection* const&, std::pair<llvm::MCSection const*, llvm::MCLineSection*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEPNS_13MCLineSectionENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MCSection const*, llvm::MCLineSection*, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<llvm::MCLineSection*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm23MCELFObjectTargetWriterC1EbNS_6Triple6OSTypeEtb\", \"llvm::MCELFObjectTargetWriter::MCELFObjectTargetWriter(bool, llvm::Triple::OSType, unsigned short, bool)\"},\n    {\"_ZN4llvm23MCELFObjectTargetWriterC2EbNS_6Triple6OSTypeEtb\", \"llvm::MCELFObjectTargetWriter::MCELFObjectTargetWriter(bool, llvm::Triple::OSType, unsigned short, bool)\"},\n    {\"_ZN4llvm23MCELFObjectTargetWriterD0Ev\", \"llvm::MCELFObjectTargetWriter::~MCELFObjectTargetWriter()\"},\n    {\"_ZN4llvm23MCELFObjectTargetWriterD1Ev\", \"llvm::MCELFObjectTargetWriter::~MCELFObjectTargetWriter()\"},\n    {\"_ZN4llvm23MCELFObjectTargetWriterD2Ev\", \"llvm::MCELFObjectTargetWriter::~MCELFObjectTargetWriter()\"},\n    {\"_ZN4llvm17createELFStreamerERNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterEbb\", \"llvm::createELFStreamer(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*, bool, bool)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamerD1Ev\", \"(anonymous namespace)::MCELFStreamer::~MCELFStreamer()\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamerD0Ev\", \"(anonymous namespace)::MCELFStreamer::~MCELFStreamer()\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer13SwitchSectionEPKN4llvm9MCSectionE\", \"(anonymous namespace)::MCELFStreamer::SwitchSection(llvm::MCSection const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer12InitSectionsEv\", \"(anonymous namespace)::MCELFStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCELFStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::MCELFStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCELFStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCELFStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer17EmitWeakReferenceEPN4llvm8MCSymbolEPKS2_\", \"(anonymous namespace)::MCELFStreamer::EmitWeakReference(llvm::MCSymbol*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::MCELFStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCELFStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::MCELFStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::MCELFStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::MCELFStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::MCELFStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCELFStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::MCELFStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::MCELFStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::MCELFStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::MCELFStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::MCELFStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::MCELFStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::MCELFStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::MCELFStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer6FinishEv\", \"(anonymous namespace)::MCELFStreamer::Finish()\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer14EmitInstToDataERKN4llvm6MCInstE\", \"(anonymous namespace)::MCELFStreamer::EmitInstToData(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer18EmitInstToFragmentERKN4llvm6MCInstE\", \"(anonymous namespace)::MCELFStreamer::EmitInstToFragment(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_113MCELFStreamer21fixSymbolsInTLSFixupsEPKN4llvm6MCExprE\", \"(anonymous namespace)::MCELFStreamer::fixSymbolsInTLSFixups(llvm::MCExpr const*)\"},\n    {\"_ZNK4llvm6MCExpr5printERNS_11raw_ostreamE\", \"llvm::MCExpr::print(llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm15MCSymbolRefExpr18getVariantKindNameENS0_11VariantKindE\", \"llvm::MCSymbolRefExpr::getVariantKindName(llvm::MCSymbolRefExpr::VariantKind)\"},\n    {\"_ZNK4llvm6MCExpr4dumpEv\", \"llvm::MCExpr::dump() const\"},\n    {\"_ZN4llvm12MCBinaryExpr6CreateENS0_6OpcodeEPKNS_6MCExprES4_RNS_9MCContextE\", \"llvm::MCBinaryExpr::Create(llvm::MCBinaryExpr::Opcode, llvm::MCExpr const*, llvm::MCExpr const*, llvm::MCContext&)\"},\n    {\"_ZN4llvm11MCUnaryExpr6CreateENS0_6OpcodeEPKNS_6MCExprERNS_9MCContextE\", \"llvm::MCUnaryExpr::Create(llvm::MCUnaryExpr::Opcode, llvm::MCExpr const*, llvm::MCContext&)\"},\n    {\"_ZN4llvm14MCConstantExpr6CreateExRNS_9MCContextE\", \"llvm::MCConstantExpr::Create(long long, llvm::MCContext&)\"},\n    {\"_ZN4llvm15MCSymbolRefExpr6CreateEPKNS_8MCSymbolENS0_11VariantKindERNS_9MCContextE\", \"llvm::MCSymbolRefExpr::Create(llvm::MCSymbol const*, llvm::MCSymbolRefExpr::VariantKind, llvm::MCContext&)\"},\n    {\"_ZN4llvm15MCSymbolRefExpr6CreateENS_9StringRefENS0_11VariantKindERNS_9MCContextE\", \"llvm::MCSymbolRefExpr::Create(llvm::StringRef, llvm::MCSymbolRefExpr::VariantKind, llvm::MCContext&)\"},\n    {\"_ZN4llvm15MCSymbolRefExpr21getVariantKindForNameENS_9StringRefE\", \"llvm::MCSymbolRefExpr::getVariantKindForName(llvm::StringRef)\"},\n    {\"_ZN4llvm12MCTargetExpr6AnchorEv\", \"llvm::MCTargetExpr::Anchor()\"},\n    {\"_ZNK4llvm6MCExpr18EvaluateAsAbsoluteERx\", \"llvm::MCExpr::EvaluateAsAbsolute(long long&) const\"},\n    {\"_ZNK4llvm6MCExpr18EvaluateAsAbsoluteERxPKNS_11MCAssemblerEPKNS_11MCAsmLayoutEPKNS_8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoISB_EENSC_IyEEEE\", \"llvm::MCExpr::EvaluateAsAbsolute(long long&, llvm::MCAssembler const*, llvm::MCAsmLayout const*, llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> > const*) const\"},\n    {\"_ZNK4llvm6MCExpr18EvaluateAsAbsoluteERxRKNS_11MCAsmLayoutE\", \"llvm::MCExpr::EvaluateAsAbsolute(long long&, llvm::MCAsmLayout const&) const\"},\n    {\"_ZNK4llvm6MCExpr18EvaluateAsAbsoluteERxRKNS_11MCAsmLayoutERKNS_8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoIS8_EENS9_IyEEEE\", \"llvm::MCExpr::EvaluateAsAbsolute(long long&, llvm::MCAsmLayout const&, llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> > const&) const\"},\n    {\"_ZNK4llvm6MCExpr18EvaluateAsAbsoluteERxRKNS_11MCAssemblerE\", \"llvm::MCExpr::EvaluateAsAbsolute(long long&, llvm::MCAssembler const&) const\"},\n    {\"_ZNK4llvm6MCExpr25EvaluateAsRelocatableImplERNS_7MCValueEPKNS_11MCAssemblerEPKNS_11MCAsmLayoutEPKNS_8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoISC_EENSD_IyEEEEb\", \"llvm::MCExpr::EvaluateAsRelocatableImpl(llvm::MCValue&, llvm::MCAssembler const*, llvm::MCAsmLayout const*, llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> > const*, bool) const\"},\n    {\"_ZNK4llvm6MCExpr21EvaluateAsRelocatableERNS_7MCValueERKNS_11MCAsmLayoutE\", \"llvm::MCExpr::EvaluateAsRelocatable(llvm::MCValue&, llvm::MCAsmLayout const&) const\"},\n    {\"_Z19EvaluateSymbolicAddPKN4llvm11MCAssemblerEPKNS_11MCAsmLayoutEPKNS_8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoIS9_EENSA_IyEEEEbRKNS_7MCValueEPKNS_15MCSymbolRefExprESL_xRSG_\", \"EvaluateSymbolicAdd(llvm::MCAssembler const*, llvm::MCAsmLayout const*, llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> > const*, bool, llvm::MCValue const&, llvm::MCSymbolRefExpr const*, llvm::MCSymbolRefExpr const*, long long, llvm::MCValue&)\"},\n    {\"_Z35AttemptToFoldSymbolOffsetDifferencePKN4llvm11MCAssemblerEPKNS_11MCAsmLayoutEPKNS_8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoIS9_EENSA_IyEEEEbRPKNS_15MCSymbolRefExprESJ_Rx\", \"AttemptToFoldSymbolOffsetDifference(llvm::MCAssembler const*, llvm::MCAsmLayout const*, llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> > const*, bool, llvm::MCSymbolRefExpr const*&, llvm::MCSymbolRefExpr const*&, long long&)\"},\n    {\"_ZN4llvm12MCTargetExprD1Ev\", \"llvm::MCTargetExpr::~MCTargetExpr()\"},\n    {\"_ZN4llvm12MCTargetExprD0Ev\", \"llvm::MCTargetExpr::~MCTargetExpr()\"},\n    {\"_ZNK4llvm9MCOperand5printERNS_11raw_ostreamEPKNS_9MCAsmInfoE\", \"llvm::MCOperand::print(llvm::raw_ostream&, llvm::MCAsmInfo const*) const\"},\n    {\"_ZNK4llvm9MCOperand4dumpEv\", \"llvm::MCOperand::dump() const\"},\n    {\"_ZNK4llvm6MCInst5printERNS_11raw_ostreamEPKNS_9MCAsmInfoE\", \"llvm::MCInst::print(llvm::raw_ostream&, llvm::MCAsmInfo const*) const\"},\n    {\"_ZNK4llvm6MCInst11dump_prettyERNS_11raw_ostreamEPKNS_9MCAsmInfoEPKNS_13MCInstPrinterENS_9StringRefE\", \"llvm::MCInst::dump_pretty(llvm::raw_ostream&, llvm::MCAsmInfo const*, llvm::MCInstPrinter const*, llvm::StringRef) const\"},\n    {\"_ZNK4llvm6MCInst4dumpEv\", \"llvm::MCInst::dump() const\"},\n    {\"_ZN4llvm13MCInstPrinterD0Ev\", \"llvm::MCInstPrinter::~MCInstPrinter()\"},\n    {\"_ZN4llvm13MCInstPrinterD1Ev\", \"llvm::MCInstPrinter::~MCInstPrinter()\"},\n    {\"_ZN4llvm13MCInstPrinterD2Ev\", \"llvm::MCInstPrinter::~MCInstPrinter()\"},\n    {\"_ZNK4llvm13MCInstPrinter13getOpcodeNameEj\", \"llvm::MCInstPrinter::getOpcodeName(unsigned int) const\"},\n    {\"_ZN4llvm21createLoggingStreamerEPNS_10MCStreamerERNS_11raw_ostreamE\", \"llvm::createLoggingStreamer(llvm::MCStreamer*, llvm::raw_ostream&)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamerD1Ev\", \"(anonymous namespace)::MCLoggingStreamer::~MCLoggingStreamer()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamerD0Ev\", \"(anonymous namespace)::MCLoggingStreamer::~MCLoggingStreamer()\"},\n    {\"_ZNK12_GLOBAL__N_117MCLoggingStreamer12isVerboseAsmEv\", \"(anonymous namespace)::MCLoggingStreamer::isVerboseAsm() const\"},\n    {\"_ZNK12_GLOBAL__N_117MCLoggingStreamer17hasRawTextSupportEv\", \"(anonymous namespace)::MCLoggingStreamer::hasRawTextSupport() const\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer10AddCommentERKN4llvm5TwineE\", \"(anonymous namespace)::MCLoggingStreamer::AddComment(llvm::Twine const&)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer12GetCommentOSEv\", \"(anonymous namespace)::MCLoggingStreamer::GetCommentOS()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer12AddBlankLineEv\", \"(anonymous namespace)::MCLoggingStreamer::AddBlankLine()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer13SwitchSectionEPKN4llvm9MCSectionE\", \"(anonymous namespace)::MCLoggingStreamer::SwitchSection(llvm::MCSection const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer12InitSectionsEv\", \"(anonymous namespace)::MCLoggingStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCLoggingStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::MCLoggingStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCLoggingStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCLoggingStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer17EmitWeakReferenceEPN4llvm8MCSymbolEPKS2_\", \"(anonymous namespace)::MCLoggingStreamer::EmitWeakReference(llvm::MCSymbol*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::MCLoggingStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCLoggingStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::MCLoggingStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::MCLoggingStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::MCLoggingStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::MCLoggingStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCLoggingStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::MCLoggingStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::MCLoggingStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::MCLoggingStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::MCLoggingStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::MCLoggingStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer13EmitValueImplEPKN4llvm6MCExprEjbj\", \"(anonymous namespace)::MCLoggingStreamer::EmitValueImpl(llvm::MCExpr const*, unsigned int, bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer16EmitULEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCLoggingStreamer::EmitULEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer16EmitSLEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCLoggingStreamer::EmitSLEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer16EmitGPRel32ValueEPKN4llvm6MCExprE\", \"(anonymous namespace)::MCLoggingStreamer::EmitGPRel32Value(llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer8EmitFillEyhj\", \"(anonymous namespace)::MCLoggingStreamer::EmitFill(unsigned long long, unsigned char, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::MCLoggingStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::MCLoggingStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer17EmitValueToOffsetEPKN4llvm6MCExprEh\", \"(anonymous namespace)::MCLoggingStreamer::EmitValueToOffset(llvm::MCExpr const*, unsigned char)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::MCLoggingStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer22EmitDwarfFileDirectiveEjN4llvm9StringRefE\", \"(anonymous namespace)::MCLoggingStreamer::EmitDwarfFileDirective(unsigned int, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer21EmitDwarfLocDirectiveEjjjjjj\", \"(anonymous namespace)::MCLoggingStreamer::EmitDwarfLocDirective(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer24EmitDwarfAdvanceLineAddrExPKN4llvm8MCSymbolES4_\", \"(anonymous namespace)::MCLoggingStreamer::EmitDwarfAdvanceLineAddr(long long, llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer15EmitInstructionERKN4llvm6MCInstE\", \"(anonymous namespace)::MCLoggingStreamer::EmitInstruction(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer11EmitRawTextEN4llvm9StringRefE\", \"(anonymous namespace)::MCLoggingStreamer::EmitRawText(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer6FinishEv\", \"(anonymous namespace)::MCLoggingStreamer::Finish()\"},\n    {\"_ZN12_GLOBAL__N_117MCLoggingStreamer7LogCallEPKcRKN4llvm5TwineE\", \"(anonymous namespace)::MCLoggingStreamer::LogCall(char const*, llvm::Twine const&)\"},\n    {\"_ZN4llvm19createMachOStreamerERNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterEb\", \"llvm::createMachOStreamer(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*, bool)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamerD1Ev\", \"(anonymous namespace)::MCMachOStreamer::~MCMachOStreamer()\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamerD0Ev\", \"(anonymous namespace)::MCMachOStreamer::~MCMachOStreamer()\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer12InitSectionsEv\", \"(anonymous namespace)::MCMachOStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCMachOStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::MCMachOStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCMachOStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCMachOStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::MCMachOStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCMachOStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::MCMachOStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::MCMachOStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::MCMachOStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::MCMachOStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCMachOStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::MCMachOStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::MCMachOStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::MCMachOStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::MCMachOStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::MCMachOStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::MCMachOStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::MCMachOStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::MCMachOStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer6FinishEv\", \"(anonymous namespace)::MCMachOStreamer::Finish()\"},\n    {\"_ZN12_GLOBAL__N_115MCMachOStreamer14EmitInstToDataERKN4llvm6MCInstE\", \"(anonymous namespace)::MCMachOStreamer::EmitInstToData(llvm::MCInst const&)\"},\n    {\"_ZNSt6vectorIN4llvm7MCFixupESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MCFixup, std::allocator<llvm::MCFixup> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCFixup*, std::vector<llvm::MCFixup, std::allocator<llvm::MCFixup> > >, llvm::MCFixup const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10MCFragmentEPNS_12MCSymbolDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MCFragment const*, llvm::MCSymbolData*, llvm::DenseMapInfo<llvm::MCFragment const*>, llvm::DenseMapInfo<llvm::MCSymbolData*> >::InsertIntoBucket(llvm::MCFragment const* const&, llvm::MCSymbolData* const&, std::pair<llvm::MCFragment const*, llvm::MCSymbolData*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_10MCFragmentEPNS_12MCSymbolDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MCFragment const*, llvm::MCSymbolData*, llvm::DenseMapInfo<llvm::MCFragment const*>, llvm::DenseMapInfo<llvm::MCSymbolData*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm15MCAlignFragmentD1Ev\", \"llvm::MCAlignFragment::~MCAlignFragment()\"},\n    {\"_ZN4llvm15MCAlignFragmentD0Ev\", \"llvm::MCAlignFragment::~MCAlignFragment()\"},\n    {\"_ZN4llvm11MCAssembler22getOrCreateSectionDataERKNS_9MCSectionEPb\", \"llvm::MCAssembler::getOrCreateSectionData(llvm::MCSection const&, bool*)\"},\n    {\"_ZN4llvm11MCAssembler21getOrCreateSymbolDataERKNS_8MCSymbolEPb\", \"llvm::MCAssembler::getOrCreateSymbolData(llvm::MCSymbol const&, bool*)\"},\n    {\"_ZN4llvm14MCFillFragmentD1Ev\", \"llvm::MCFillFragment::~MCFillFragment()\"},\n    {\"_ZN4llvm14MCFillFragmentD0Ev\", \"llvm::MCFillFragment::~MCFillFragment()\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPNS_12MCSymbolDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSymbolData*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSymbolData*> >::InsertIntoBucket(llvm::MCSymbol const* const&, llvm::MCSymbolData* const&, std::pair<llvm::MCSymbol const*, llvm::MCSymbolData*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPNS_12MCSymbolDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MCSymbol const*, llvm::MCSymbolData*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<llvm::MCSymbolData*> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEPNS_13MCSectionDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE16InsertIntoBucketERKS3_RKS5_PSt4pairIS3_S5_E\", \"llvm::DenseMap<llvm::MCSection const*, llvm::MCSectionData*, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<llvm::MCSectionData*> >::InsertIntoBucket(llvm::MCSection const* const&, llvm::MCSectionData* const&, std::pair<llvm::MCSection const*, llvm::MCSectionData*>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEPNS_13MCSectionDataENS_12DenseMapInfoIS3_EENS6_IS5_EEE4growEj\", \"llvm::DenseMap<llvm::MCSection const*, llvm::MCSectionData*, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<llvm::MCSectionData*> >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm18IndirectSymbolDataESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::IndirectSymbolData, std::allocator<llvm::IndirectSymbolData> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::IndirectSymbolData*, std::vector<llvm::IndirectSymbolData, std::allocator<llvm::IndirectSymbolData> > >, llvm::IndirectSymbolData const&)\"},\n    {\"_ZN4llvm14MCDataFragmentD1Ev\", \"llvm::MCDataFragment::~MCDataFragment()\"},\n    {\"_ZN4llvm14MCDataFragmentD0Ev\", \"llvm::MCDataFragment::~MCDataFragment()\"},\n    {\"_ZN4llvm24MCMachObjectTargetWriterC1Ebjjb\", \"llvm::MCMachObjectTargetWriter::MCMachObjectTargetWriter(bool, unsigned int, unsigned int, bool)\"},\n    {\"_ZN4llvm24MCMachObjectTargetWriterC2Ebjjb\", \"llvm::MCMachObjectTargetWriter::MCMachObjectTargetWriter(bool, unsigned int, unsigned int, bool)\"},\n    {\"_ZN4llvm24MCMachObjectTargetWriterD0Ev\", \"llvm::MCMachObjectTargetWriter::~MCMachObjectTargetWriter()\"},\n    {\"_ZN4llvm24MCMachObjectTargetWriterD1Ev\", \"llvm::MCMachObjectTargetWriter::~MCMachObjectTargetWriter()\"},\n    {\"_ZN4llvm24MCMachObjectTargetWriterD2Ev\", \"llvm::MCMachObjectTargetWriter::~MCMachObjectTargetWriter()\"},\n    {\"_ZN4llvm18createNullStreamerERNS_9MCContextE\", \"llvm::createNullStreamer(llvm::MCContext&)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamerD1Ev\", \"(anonymous namespace)::MCNullStreamer::~MCNullStreamer()\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamerD0Ev\", \"(anonymous namespace)::MCNullStreamer::~MCNullStreamer()\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer13SwitchSectionEPKN4llvm9MCSectionE\", \"(anonymous namespace)::MCNullStreamer::SwitchSection(llvm::MCSection const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer12InitSectionsEv\", \"(anonymous namespace)::MCNullStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCNullStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::MCNullStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::MCNullStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCNullStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer17EmitWeakReferenceEPN4llvm8MCSymbolEPKS2_\", \"(anonymous namespace)::MCNullStreamer::EmitWeakReference(llvm::MCSymbol*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::MCNullStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::MCNullStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::MCNullStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::MCNullStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::MCNullStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::MCNullStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::MCNullStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::MCNullStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::MCNullStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::MCNullStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::MCNullStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::MCNullStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer13EmitValueImplEPKN4llvm6MCExprEjbj\", \"(anonymous namespace)::MCNullStreamer::EmitValueImpl(llvm::MCExpr const*, unsigned int, bool, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer16EmitULEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCNullStreamer::EmitULEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer16EmitSLEB128ValueEPKN4llvm6MCExprEj\", \"(anonymous namespace)::MCNullStreamer::EmitSLEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer16EmitGPRel32ValueEPKN4llvm6MCExprE\", \"(anonymous namespace)::MCNullStreamer::EmitGPRel32Value(llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::MCNullStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::MCNullStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer17EmitValueToOffsetEPKN4llvm6MCExprEh\", \"(anonymous namespace)::MCNullStreamer::EmitValueToOffset(llvm::MCExpr const*, unsigned char)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::MCNullStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer22EmitDwarfFileDirectiveEjN4llvm9StringRefE\", \"(anonymous namespace)::MCNullStreamer::EmitDwarfFileDirective(unsigned int, llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer21EmitDwarfLocDirectiveEjjjjjj\", \"(anonymous namespace)::MCNullStreamer::EmitDwarfLocDirective(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer24EmitDwarfAdvanceLineAddrExPKN4llvm8MCSymbolES4_\", \"(anonymous namespace)::MCNullStreamer::EmitDwarfAdvanceLineAddr(long long, llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer15EmitInstructionERKN4llvm6MCInstE\", \"(anonymous namespace)::MCNullStreamer::EmitInstruction(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_114MCNullStreamer6FinishEv\", \"(anonymous namespace)::MCNullStreamer::Finish()\"},\n    {\"_ZNK4llvm10MCStreamer12isVerboseAsmEv\", \"llvm::MCStreamer::isVerboseAsm() const\"},\n    {\"_ZNK4llvm10MCStreamer17hasRawTextSupportEv\", \"llvm::MCStreamer::hasRawTextSupport() const\"},\n    {\"_ZN4llvm10MCStreamer10AddCommentERKNS_5TwineE\", \"llvm::MCStreamer::AddComment(llvm::Twine const&)\"},\n    {\"_ZN4llvm10MCStreamer12AddBlankLineEv\", \"llvm::MCStreamer::AddBlankLine()\"},\n    {\"_ZN4llvm10MCStreamer25EmitDwarfAdvanceFrameAddrEPKNS_8MCSymbolES3_\", \"llvm::MCStreamer::EmitDwarfAdvanceFrameAddr(llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm16MCObjectStreamerC1ERNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterE\", \"llvm::MCObjectStreamer::MCObjectStreamer(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*)\"},\n    {\"_ZN4llvm16MCObjectStreamerC2ERNS_9MCContextERNS_16TargetAsmBackendERNS_11raw_ostreamEPNS_13MCCodeEmitterE\", \"llvm::MCObjectStreamer::MCObjectStreamer(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::raw_ostream&, llvm::MCCodeEmitter*)\"},\n    {\"_ZN4llvm16MCObjectStreamerD0Ev\", \"llvm::MCObjectStreamer::~MCObjectStreamer()\"},\n    {\"_ZN4llvm16MCObjectStreamerD1Ev\", \"llvm::MCObjectStreamer::~MCObjectStreamer()\"},\n    {\"_ZN4llvm16MCObjectStreamerD2Ev\", \"llvm::MCObjectStreamer::~MCObjectStreamer()\"},\n    {\"_ZNK4llvm16MCObjectStreamer18getCurrentFragmentEv\", \"llvm::MCObjectStreamer::getCurrentFragment() const\"},\n    {\"_ZNK4llvm16MCObjectStreamer23getOrCreateDataFragmentEv\", \"llvm::MCObjectStreamer::getOrCreateDataFragment() const\"},\n    {\"_ZN4llvm16MCObjectStreamer15AddValueSymbolsEPKNS_6MCExprE\", \"llvm::MCObjectStreamer::AddValueSymbols(llvm::MCExpr const*)\"},\n    {\"_ZN4llvm16MCObjectStreamer13EmitValueImplEPKNS_6MCExprEjbj\", \"llvm::MCObjectStreamer::EmitValueImpl(llvm::MCExpr const*, unsigned int, bool, unsigned int)\"},\n    {\"_ZN4llvm16MCObjectStreamer9EmitLabelEPNS_8MCSymbolE\", \"llvm::MCObjectStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN4llvm16MCObjectStreamer16EmitULEB128ValueEPKNS_6MCExprEj\", \"llvm::MCObjectStreamer::EmitULEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN4llvm16MCObjectStreamer16EmitSLEB128ValueEPKNS_6MCExprEj\", \"llvm::MCObjectStreamer::EmitSLEB128Value(llvm::MCExpr const*, unsigned int)\"},\n    {\"_ZN4llvm16MCObjectStreamer17EmitWeakReferenceEPNS_8MCSymbolEPKS1_\", \"llvm::MCObjectStreamer::EmitWeakReference(llvm::MCSymbol*, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm16MCObjectStreamer13SwitchSectionEPKNS_9MCSectionE\", \"llvm::MCObjectStreamer::SwitchSection(llvm::MCSection const*)\"},\n    {\"_ZN4llvm16MCObjectStreamer15EmitInstructionERKNS_6MCInstE\", \"llvm::MCObjectStreamer::EmitInstruction(llvm::MCInst const&)\"},\n    {\"_ZN4llvm16MCObjectStreamer18EmitInstToFragmentERKNS_6MCInstE\", \"llvm::MCObjectStreamer::EmitInstToFragment(llvm::MCInst const&)\"},\n    {\"_ZN4llvm16MCObjectStreamer24EmitDwarfAdvanceLineAddrExPKNS_8MCSymbolES3_\", \"llvm::MCObjectStreamer::EmitDwarfAdvanceLineAddr(long long, llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm16MCObjectStreamer25EmitDwarfAdvanceFrameAddrEPKNS_8MCSymbolES3_\", \"llvm::MCObjectStreamer::EmitDwarfAdvanceFrameAddr(llvm::MCSymbol const*, llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm16MCObjectStreamer17EmitValueToOffsetEPKNS_6MCExprEh\", \"llvm::MCObjectStreamer::EmitValueToOffset(llvm::MCExpr const*, unsigned char)\"},\n    {\"_ZN4llvm16MCObjectStreamer6FinishEv\", \"llvm::MCObjectStreamer::Finish()\"},\n    {\"_ZN4llvm13MCOrgFragmentD1Ev\", \"llvm::MCOrgFragment::~MCOrgFragment()\"},\n    {\"_ZN4llvm13MCOrgFragmentD0Ev\", \"llvm::MCOrgFragment::~MCOrgFragment()\"},\n    {\"_ZN4llvm24MCDwarfCallFrameFragmentD1Ev\", \"llvm::MCDwarfCallFrameFragment::~MCDwarfCallFrameFragment()\"},\n    {\"_ZN4llvm24MCDwarfCallFrameFragmentD0Ev\", \"llvm::MCDwarfCallFrameFragment::~MCDwarfCallFrameFragment()\"},\n    {\"_ZN4llvm23MCDwarfLineAddrFragmentD1Ev\", \"llvm::MCDwarfLineAddrFragment::~MCDwarfLineAddrFragment()\"},\n    {\"_ZN4llvm23MCDwarfLineAddrFragmentD0Ev\", \"llvm::MCDwarfLineAddrFragment::~MCDwarfLineAddrFragment()\"},\n    {\"_ZN4llvm13MCLEBFragmentD1Ev\", \"llvm::MCLEBFragment::~MCLEBFragment()\"},\n    {\"_ZN4llvm13MCLEBFragmentD0Ev\", \"llvm::MCLEBFragment::~MCLEBFragment()\"},\n    {\"_ZN4llvm14MCObjectWriterD0Ev\", \"llvm::MCObjectWriter::~MCObjectWriter()\"},\n    {\"_ZN4llvm14MCObjectWriterD1Ev\", \"llvm::MCObjectWriter::~MCObjectWriter()\"},\n    {\"_ZN4llvm14MCObjectWriterD2Ev\", \"llvm::MCObjectWriter::~MCObjectWriter()\"},\n    {\"_ZN4llvm14MCObjectWriter13EncodeSLEB128ExRNS_11raw_ostreamE\", \"llvm::MCObjectWriter::EncodeSLEB128(long long, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14MCObjectWriter13EncodeULEB128EyRNS_11raw_ostreamE\", \"llvm::MCObjectWriter::EncodeULEB128(unsigned long long, llvm::raw_ostream&)\"},\n    {\"_ZNK4llvm14MCObjectWriter34IsSymbolRefDifferenceFullyResolvedERKNS_11MCAssemblerEPKNS_15MCSymbolRefExprES6_b\", \"llvm::MCObjectWriter::IsSymbolRefDifferenceFullyResolved(llvm::MCAssembler const&, llvm::MCSymbolRefExpr const*, llvm::MCSymbolRefExpr const*, bool) const\"},\n    {\"_ZN4llvm9MCSectionD0Ev\", \"llvm::MCSection::~MCSection()\"},\n    {\"_ZN4llvm9MCSectionD1Ev\", \"llvm::MCSection::~MCSection()\"},\n    {\"_ZN4llvm9MCSectionD2Ev\", \"llvm::MCSection::~MCSection()\"},\n    {\"_ZN4llvm13MCSectionCOFFD0Ev\", \"llvm::MCSectionCOFF::~MCSectionCOFF()\"},\n    {\"_ZN4llvm13MCSectionCOFFD1Ev\", \"llvm::MCSectionCOFF::~MCSectionCOFF()\"},\n    {\"_ZN4llvm13MCSectionCOFFD2Ev\", \"llvm::MCSectionCOFF::~MCSectionCOFF()\"},\n    {\"_ZNK4llvm13MCSectionCOFF26ShouldOmitSectionDirectiveENS_9StringRefERKNS_9MCAsmInfoE\", \"llvm::MCSectionCOFF::ShouldOmitSectionDirective(llvm::StringRef, llvm::MCAsmInfo const&) const\"},\n    {\"_ZNK4llvm13MCSectionCOFF20PrintSwitchToSectionERKNS_9MCAsmInfoERNS_11raw_ostreamE\", \"llvm::MCSectionCOFF::PrintSwitchToSection(llvm::MCAsmInfo const&, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm13MCSectionCOFF12UseCodeAlignEv\", \"llvm::MCSectionCOFF::UseCodeAlign() const\"},\n    {\"_ZNK4llvm13MCSectionCOFF16isVirtualSectionEv\", \"llvm::MCSectionCOFF::isVirtualSection() const\"},\n    {\"_ZN4llvm12MCSectionELFD0Ev\", \"llvm::MCSectionELF::~MCSectionELF()\"},\n    {\"_ZN4llvm12MCSectionELFD1Ev\", \"llvm::MCSectionELF::~MCSectionELF()\"},\n    {\"_ZN4llvm12MCSectionELFD2Ev\", \"llvm::MCSectionELF::~MCSectionELF()\"},\n    {\"_ZNK4llvm12MCSectionELF26ShouldOmitSectionDirectiveENS_9StringRefERKNS_9MCAsmInfoE\", \"llvm::MCSectionELF::ShouldOmitSectionDirective(llvm::StringRef, llvm::MCAsmInfo const&) const\"},\n    {\"_ZNK4llvm12MCSectionELF20PrintSwitchToSectionERKNS_9MCAsmInfoERNS_11raw_ostreamE\", \"llvm::MCSectionELF::PrintSwitchToSection(llvm::MCAsmInfo const&, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm12MCSectionELF12UseCodeAlignEv\", \"llvm::MCSectionELF::UseCodeAlign() const\"},\n    {\"_ZNK4llvm12MCSectionELF16isVirtualSectionEv\", \"llvm::MCSectionELF::isVirtualSection() const\"},\n    {\"_ZNK4llvm12MCSectionELF16HasCommonSymbolsEv\", \"llvm::MCSectionELF::HasCommonSymbols() const\"},\n    {\"_ZN4llvm12MCSectionELF18DetermineEntrySizeENS_11SectionKindE\", \"llvm::MCSectionELF::DetermineEntrySize(llvm::SectionKind)\"},\n    {\"_ZN4llvm14MCSectionMachOC1ENS_9StringRefES1_jjNS_11SectionKindE\", \"llvm::MCSectionMachO::MCSectionMachO(llvm::StringRef, llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind)\"},\n    {\"_ZN4llvm14MCSectionMachOC2ENS_9StringRefES1_jjNS_11SectionKindE\", \"llvm::MCSectionMachO::MCSectionMachO(llvm::StringRef, llvm::StringRef, unsigned int, unsigned int, llvm::SectionKind)\"},\n    {\"_ZNK4llvm14MCSectionMachO20PrintSwitchToSectionERKNS_9MCAsmInfoERNS_11raw_ostreamE\", \"llvm::MCSectionMachO::PrintSwitchToSection(llvm::MCAsmInfo const&, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm14MCSectionMachO12UseCodeAlignEv\", \"llvm::MCSectionMachO::UseCodeAlign() const\"},\n    {\"_ZNK4llvm14MCSectionMachO16isVirtualSectionEv\", \"llvm::MCSectionMachO::isVirtualSection() const\"},\n    {\"_ZN4llvm14MCSectionMachO21ParseSectionSpecifierENS_9StringRefERS1_S2_RjS3_\", \"llvm::MCSectionMachO::ParseSectionSpecifier(llvm::StringRef, llvm::StringRef&, llvm::StringRef&, unsigned int&, unsigned int&)\"},\n    {\"_Z11StripSpacesRN4llvm9StringRefE\", \"StripSpaces(llvm::StringRef&)\"},\n    {\"_ZN4llvm14MCSectionMachOD1Ev\", \"llvm::MCSectionMachO::~MCSectionMachO()\"},\n    {\"_ZN4llvm14MCSectionMachOD0Ev\", \"llvm::MCSectionMachO::~MCSectionMachO()\"},\n    {\"_ZN4llvm10MCStreamerC1ERNS_9MCContextE\", \"llvm::MCStreamer::MCStreamer(llvm::MCContext&)\"},\n    {\"_ZN4llvm10MCStreamerC2ERNS_9MCContextE\", \"llvm::MCStreamer::MCStreamer(llvm::MCContext&)\"},\n    {\"_ZN4llvm10MCStreamerD0Ev\", \"llvm::MCStreamer::~MCStreamer()\"},\n    {\"_ZN4llvm10MCStreamerD1Ev\", \"llvm::MCStreamer::~MCStreamer()\"},\n    {\"_ZN4llvm10MCStreamerD2Ev\", \"llvm::MCStreamer::~MCStreamer()\"},\n    {\"_ZN4llvm10MCStreamer12GetCommentOSEv\", \"llvm::MCStreamer::GetCommentOS()\"},\n    {\"_ZN4llvm10MCStreamer20EmitDwarfSetLineAddrExPKNS_8MCSymbolEi\", \"llvm::MCStreamer::EmitDwarfSetLineAddr(long long, llvm::MCSymbol const*, int)\"},\n    {\"_ZN4llvm10MCStreamer19EmitULEB128IntValueEyj\", \"llvm::MCStreamer::EmitULEB128IntValue(unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer15EmitSymbolValueEPKNS_8MCSymbolEjj\", \"llvm::MCStreamer::EmitSymbolValue(llvm::MCSymbol const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer12EmitIntValueEyjj\", \"llvm::MCStreamer::EmitIntValue(unsigned long long, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer19EmitSLEB128IntValueExj\", \"llvm::MCStreamer::EmitSLEB128IntValue(long long, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer12EmitAbsValueEPKNS_6MCExprEjj\", \"llvm::MCStreamer::EmitAbsValue(llvm::MCExpr const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer9EmitValueEPKNS_6MCExprEjj\", \"llvm::MCStreamer::EmitValue(llvm::MCExpr const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer14EmitPCRelValueEPKNS_6MCExprEjj\", \"llvm::MCStreamer::EmitPCRelValue(llvm::MCExpr const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer15EmitSymbolValueEPKNS_8MCSymbolEjbj\", \"llvm::MCStreamer::EmitSymbolValue(llvm::MCSymbol const*, unsigned int, bool, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer20EmitPCRelSymbolValueEPKNS_8MCSymbolEjj\", \"llvm::MCStreamer::EmitPCRelSymbolValue(llvm::MCSymbol const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer16EmitGPRel32ValueEPKNS_6MCExprE\", \"llvm::MCStreamer::EmitGPRel32Value(llvm::MCExpr const*)\"},\n    {\"_ZN4llvm10MCStreamer8EmitFillEyhj\", \"llvm::MCStreamer::EmitFill(unsigned long long, unsigned char, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer22EmitDwarfFileDirectiveEjNS_9StringRefE\", \"llvm::MCStreamer::EmitDwarfFileDirective(unsigned int, llvm::StringRef)\"},\n    {\"_ZN4llvm10MCStreamer21EmitDwarfLocDirectiveEjjjjjj\", \"llvm::MCStreamer::EmitDwarfLocDirective(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer19getCurrentFrameInfoEv\", \"llvm::MCStreamer::getCurrentFrameInfo()\"},\n    {\"_ZN4llvm10MCStreamer16EnsureValidFrameEv\", \"llvm::MCStreamer::EnsureValidFrame()\"},\n    {\"_ZN4llvm10MCStreamer16EmitCFIStartProcEv\", \"llvm::MCStreamer::EmitCFIStartProc()\"},\n    {\"_ZN4llvm10MCStreamer14EmitCFIEndProcEv\", \"llvm::MCStreamer::EmitCFIEndProc()\"},\n    {\"_ZN4llvm10MCStreamer13EmitCFIDefCfaExx\", \"llvm::MCStreamer::EmitCFIDefCfa(long long, long long)\"},\n    {\"_ZN4llvm10MCStreamer19EmitCFIDefCfaOffsetEx\", \"llvm::MCStreamer::EmitCFIDefCfaOffset(long long)\"},\n    {\"_ZN4llvm10MCStreamer21EmitCFIDefCfaRegisterEx\", \"llvm::MCStreamer::EmitCFIDefCfaRegister(long long)\"},\n    {\"_ZN4llvm10MCStreamer13EmitCFIOffsetExx\", \"llvm::MCStreamer::EmitCFIOffset(long long, long long)\"},\n    {\"_ZN4llvm10MCStreamer18EmitCFIPersonalityEPKNS_8MCSymbolEj\", \"llvm::MCStreamer::EmitCFIPersonality(llvm::MCSymbol const*, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer11EmitCFILsdaEPKNS_8MCSymbolEj\", \"llvm::MCStreamer::EmitCFILsda(llvm::MCSymbol const*, unsigned int)\"},\n    {\"_ZN4llvm10MCStreamer20EmitCFIRememberStateEv\", \"llvm::MCStreamer::EmitCFIRememberState()\"},\n    {\"_ZN4llvm10MCStreamer19EmitCFIRestoreStateEv\", \"llvm::MCStreamer::EmitCFIRestoreState()\"},\n    {\"_ZN4llvm10MCStreamer11EmitRawTextENS_9StringRefE\", \"llvm::MCStreamer::EmitRawText(llvm::StringRef)\"},\n    {\"_ZN4llvm10MCStreamer11EmitRawTextERKNS_5TwineE\", \"llvm::MCStreamer::EmitRawText(llvm::Twine const&)\"},\n    {\"_ZNSt6vectorIN4llvm16MCCFIInstructionESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCCFIInstruction*, std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> > >, llvm::MCCFIInstruction const&)\"},\n    {\"_ZNSt6vectorIN4llvm16MCDwarfFrameInfoESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_\", \"std::vector<llvm::MCDwarfFrameInfo, std::allocator<llvm::MCDwarfFrameInfo> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MCDwarfFrameInfo*, std::vector<llvm::MCDwarfFrameInfo, std::allocator<llvm::MCDwarfFrameInfo> > >, llvm::MCDwarfFrameInfo const&)\"},\n    {\"_ZNSt6vectorIN4llvm16MCCFIInstructionESaIS1_EEaSERKS3_\", \"std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> >::operator=(std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm16MCCFIInstructionESaIS1_EEC2ERKS3_\", \"std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> >::vector(std::vector<llvm::MCCFIInstruction, std::allocator<llvm::MCCFIInstruction> > const&)\"},\n    {\"_ZNK4llvm8MCSymbol13AliasedSymbolEv\", \"llvm::MCSymbol::AliasedSymbol() const\"},\n    {\"_ZN4llvm8MCSymbol16setVariableValueEPKNS_6MCExprE\", \"llvm::MCSymbol::setVariableValue(llvm::MCExpr const*)\"},\n    {\"_ZNK4llvm8MCSymbol5printERNS_11raw_ostreamE\", \"llvm::MCSymbol::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm8MCSymbol4dumpEv\", \"llvm::MCSymbol::dump() const\"},\n    {\"_ZN4llvm22createMachObjectWriterEPNS_24MCMachObjectTargetWriterERNS_11raw_ostreamEb\", \"llvm::createMachObjectWriter(llvm::MCMachObjectTargetWriter*, llvm::raw_ostream&, bool)\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriterD1Ev\", \"(anonymous namespace)::MachObjectWriter::~MachObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriterD0Ev\", \"(anonymous namespace)::MachObjectWriter::~MachObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter24ExecutePostLayoutBindingERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::MachObjectWriter::ExecutePostLayoutBinding(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter16RecordRelocationERKN4llvm11MCAssemblerERKNS1_11MCAsmLayoutEPKNS1_10MCFragmentERKNS1_7MCFixupENS1_7MCValueERy\", \"(anonymous namespace)::MachObjectWriter::RecordRelocation(llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::MCFragment const*, llvm::MCFixup const&, llvm::MCValue, unsigned long long&)\"},\n    {\"_ZNK12_GLOBAL__N_116MachObjectWriter38IsSymbolRefDifferenceFullyResolvedImplERKN4llvm11MCAssemblerERKNS1_12MCSymbolDataERKNS1_10MCFragmentEbb\", \"(anonymous namespace)::MachObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(llvm::MCAssembler const&, llvm::MCSymbolData const&, llvm::MCFragment const&, bool, bool) const\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter11WriteObjectERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::MachObjectWriter::WriteObject(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZNK12_GLOBAL__N_116MachObjectWriter14getPaddingSizeEPKN4llvm13MCSectionDataERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::MachObjectWriter::getPaddingSize(llvm::MCSectionData const*, llvm::MCAsmLayout const&) const\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter10WriteNlistERNS0_14MachSymbolDataERKN4llvm11MCAsmLayoutE\", \"(anonymous namespace)::MachObjectWriter::WriteNlist((anonymous namespace)::MachObjectWriter::MachSymbolData&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter25RecordScatteredRelocationERKN4llvm11MCAssemblerERKNS1_11MCAsmLayoutEPKNS1_10MCFragmentERKNS1_7MCFixupENS1_7MCValueEjRy\", \"(anonymous namespace)::MachObjectWriter::RecordScatteredRelocation(llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::MCFragment const*, llvm::MCFixup const&, llvm::MCValue, unsigned int, unsigned long long&)\"},\n    {\"_ZN12_GLOBAL__N_116MachObjectWriter28RecordARMScatteredRelocationERKN4llvm11MCAssemblerERKNS1_11MCAsmLayoutEPKNS1_10MCFragmentERKNS1_7MCFixupENS1_7MCValueEjRy\", \"(anonymous namespace)::MachObjectWriter::RecordARMScatteredRelocation(llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::MCFragment const*, llvm::MCFixup const&, llvm::MCValue, unsigned int, unsigned long long&)\"},\n    {\"_ZNSt6vectorIN12_GLOBAL__N_116MachObjectWriter14MachSymbolDataESaIS2_EE9push_backERKS2_\", \"std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> >::push_back((anonymous namespace)::MachObjectWriter::MachSymbolData const&)\"},\n    {\"_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_116MachObjectWriter14MachSymbolDataESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > > >(__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >)\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_116MachObjectWriter14MachSymbolDataESt6vectorIS4_SaIS4_EEEElEvT_SA_T0_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, long>(__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, long)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_116MachObjectWriter14MachSymbolDataESt6vectorIS4_SaIS4_EEEEEvT_SA_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > > >(__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, __gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPN12_GLOBAL__N_116MachObjectWriter14MachSymbolDataESt6vectorIS4_SaIS4_EEEElS4_EvT_T0_SB_T1_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, long, (anonymous namespace)::MachObjectWriter::MachSymbolData>(__gnu_cxx::__normal_iterator<(anonymous namespace)::MachObjectWriter::MachSymbolData*, std::vector<(anonymous namespace)::MachObjectWriter::MachSymbolData, std::allocator<(anonymous namespace)::MachObjectWriter::MachSymbolData> > >, long, long, (anonymous namespace)::MachObjectWriter::MachSymbolData)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataESt6vectorINS_6object5macho15RelocationEntryESaIS7_EENS_12DenseMapInfoIS3_EENSA_IS9_EEE16FindAndConstructERKS3_\", \"llvm::DenseMap<llvm::MCSectionData const*, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> >, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > > >::FindAndConstruct(llvm::MCSectionData const* const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataESt6vectorINS_6object5macho15RelocationEntryESaIS7_EENS_12DenseMapInfoIS3_EENSA_IS9_EEE16InsertIntoBucketERKS3_RKS9_PSt4pairIS3_S9_E\", \"llvm::DenseMap<llvm::MCSectionData const*, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> >, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > > >::InsertIntoBucket(llvm::MCSectionData const* const&, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > const&, std::pair<llvm::MCSectionData const*, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > >*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataESt6vectorINS_6object5macho15RelocationEntryESaIS7_EENS_12DenseMapInfoIS3_EENSA_IS9_EEE4growEj\", \"llvm::DenseMap<llvm::MCSectionData const*, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> >, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > > >::grow(unsigned int)\"},\n    {\"_ZNSt6vectorIN4llvm6object5macho15RelocationEntryESaIS3_EEC2ERKS5_\", \"std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> >::vector(std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > const&)\"},\n    {\"_ZNSt6vectorIN4llvm6object5macho15RelocationEntryESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::object::macho::RelocationEntry*, std::vector<llvm::object::macho::RelocationEntry, std::allocator<llvm::object::macho::RelocationEntry> > >, llvm::object::macho::RelocationEntry const&)\"},\n    {\"_ZN4llvm9StringMapIyNS_15MallocAllocatorEE16GetOrCreateValueIyEERNS_14StringMapEntryIyEENS_9StringRefET_\", \"llvm::StringMapEntry<unsigned long long>& llvm::StringMap<unsigned long long, llvm::MallocAllocator>::GetOrCreateValue<unsigned long long>(llvm::StringRef, unsigned long long)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEhNS_12DenseMapInfoIS3_EENS4_IhEEE16InsertIntoBucketERKS3_RKhPSt4pairIS3_hE\", \"llvm::DenseMap<llvm::MCSection const*, unsigned char, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<unsigned char> >::InsertIntoBucket(llvm::MCSection const* const&, unsigned char const&, std::pair<llvm::MCSection const*, unsigned char>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEhNS_12DenseMapInfoIS3_EENS4_IhEEE4growEj\", \"llvm::DenseMap<llvm::MCSection const*, unsigned char, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<unsigned char> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEjNS_12DenseMapInfoIS3_EENS4_IjEEE16InsertIntoBucketERKS3_RKjPSt4pairIS3_jE\", \"llvm::DenseMap<llvm::MCSectionData const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned int> >::InsertIntoBucket(llvm::MCSectionData const* const&, unsigned int const&, std::pair<llvm::MCSectionData const*, unsigned int>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEjNS_12DenseMapInfoIS3_EENS4_IjEEE4growEj\", \"llvm::DenseMap<llvm::MCSectionData const*, unsigned int, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned int> >::grow(unsigned int)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoIS3_EENS4_IyEEE16InsertIntoBucketERKS3_RKyPSt4pairIS3_yE\", \"llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> >::InsertIntoBucket(llvm::MCSectionData const* const&, unsigned long long const&, std::pair<llvm::MCSectionData const*, unsigned long long>*)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_13MCSectionDataEyNS_12DenseMapInfoIS3_EENS4_IyEEE4growEj\", \"llvm::DenseMap<llvm::MCSectionData const*, unsigned long long, llvm::DenseMapInfo<llvm::MCSectionData const*>, llvm::DenseMapInfo<unsigned long long> >::grow(unsigned int)\"},\n    {\"_ZN4llvm16TargetAsmBackendC1Ev\", \"llvm::TargetAsmBackend::TargetAsmBackend()\"},\n    {\"_ZN4llvm16TargetAsmBackendC2Ev\", \"llvm::TargetAsmBackend::TargetAsmBackend()\"},\n    {\"_ZN4llvm16TargetAsmBackendD0Ev\", \"llvm::TargetAsmBackend::~TargetAsmBackend()\"},\n    {\"_ZN4llvm16TargetAsmBackendD1Ev\", \"llvm::TargetAsmBackend::~TargetAsmBackend()\"},\n    {\"_ZN4llvm16TargetAsmBackendD2Ev\", \"llvm::TargetAsmBackend::~TargetAsmBackend()\"},\n    {\"_ZNK4llvm16TargetAsmBackend16getFixupKindInfoENS_11MCFixupKindE\", \"llvm::TargetAsmBackend::getFixupKindInfo(llvm::MCFixupKind) const\"},\n    {\"_ZN4llvm25createWinCOFFObjectWriterERNS_11raw_ostreamEb\", \"llvm::createWinCOFFObjectWriter(llvm::raw_ostream&, bool)\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriterD1Ev\", \"(anonymous namespace)::WinCOFFObjectWriter::~WinCOFFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriterD0Ev\", \"(anonymous namespace)::WinCOFFObjectWriter::~WinCOFFObjectWriter()\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriter24ExecutePostLayoutBindingERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::WinCOFFObjectWriter::ExecutePostLayoutBinding(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriter16RecordRelocationERKN4llvm11MCAssemblerERKNS1_11MCAsmLayoutEPKNS1_10MCFragmentERKNS1_7MCFixupENS1_7MCValueERy\", \"(anonymous namespace)::WinCOFFObjectWriter::RecordRelocation(llvm::MCAssembler const&, llvm::MCAsmLayout const&, llvm::MCFragment const*, llvm::MCFixup const&, llvm::MCValue, unsigned long long&)\"},\n    {\"_ZNK12_GLOBAL__N_119WinCOFFObjectWriter38IsSymbolRefDifferenceFullyResolvedImplERKN4llvm11MCAssemblerERKNS1_12MCSymbolDataERKNS1_10MCFragmentEbb\", \"(anonymous namespace)::WinCOFFObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(llvm::MCAssembler const&, llvm::MCSymbolData const&, llvm::MCFragment const&, bool, bool) const\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriter11WriteObjectERN4llvm11MCAssemblerERKNS1_11MCAsmLayoutE\", \"(anonymous namespace)::WinCOFFObjectWriter::WriteObject(llvm::MCAssembler&, llvm::MCAsmLayout const&)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_9MCSectionEPN12_GLOBAL__N_111COFFSectionENS_12DenseMapInfoIS3_EENS7_IS6_EEEixERKS3_\", \"llvm::DenseMap<llvm::MCSection const*, (anonymous namespace)::COFFSection*, llvm::DenseMapInfo<llvm::MCSection const*>, llvm::DenseMapInfo<(anonymous namespace)::COFFSection*> >::operator[](llvm::MCSection const* const&)\"},\n    {\"_ZN12_GLOBAL__N_111StringTable6insertEN4llvm9StringRefE\", \"(anonymous namespace)::StringTable::insert(llvm::StringRef)\"},\n    {\"_ZN4llvm8DenseMapIPKNS_8MCSymbolEPN12_GLOBAL__N_110COFFSymbolENS_12DenseMapInfoIS3_EENS7_IS6_EEEixERKS3_\", \"llvm::DenseMap<llvm::MCSymbol const*, (anonymous namespace)::COFFSymbol*, llvm::DenseMapInfo<llvm::MCSymbol const*>, llvm::DenseMapInfo<(anonymous namespace)::COFFSymbol*> >::operator[](llvm::MCSymbol const* const&)\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriter21GetOrCreateCOFFSymbolEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::WinCOFFObjectWriter::GetOrCreateCOFFSymbol(llvm::MCSymbol const*)\"},\n    {\"_ZN4llvm15SmallVectorImplIN12_GLOBAL__N_19AuxSymbolEE6resizeEj\", \"llvm::SmallVectorImpl<(anonymous namespace)::AuxSymbol>::resize(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_119WinCOFFObjectWriter16createCOFFEntityINS_10COFFSymbolESt6vectorIPS2_SaIS4_EEEEPT_N4llvm9StringRefERT0_\", \"(anonymous namespace)::COFFSymbol* (anonymous namespace)::WinCOFFObjectWriter::createCOFFEntity<(anonymous namespace)::COFFSymbol, std::vector<(anonymous namespace)::COFFSymbol*, std::allocator<(anonymous namespace)::COFFSymbol*> > >(llvm::StringRef, std::vector<(anonymous namespace)::COFFSymbol*, std::allocator<(anonymous namespace)::COFFSymbol*> >&)\"},\n    {\"_ZN4llvm9StringMapImNS_15MallocAllocatorEE16GetOrCreateValueImEERNS_14StringMapEntryImEENS_9StringRefET_\", \"llvm::StringMapEntry<unsigned long>& llvm::StringMap<unsigned long, llvm::MallocAllocator>::GetOrCreateValue<unsigned long>(llvm::StringRef, unsigned long)\"},\n    {\"_ZNSt6vectorIcSaIcEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPcS1_EERKc\", \"std::vector<char, std::allocator<char> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const&)\"},\n    {\"_ZNSt6vectorIcSaIcEE15_M_range_insertIPKcEEvN9__gnu_cxx17__normal_iteratorIPcS1_EET_S9_St20forward_iterator_tag\", \"void std::vector<char, std::allocator<char> >::_M_range_insert<char const*>(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, char const*, char const*, std::forward_iterator_tag)\"},\n    {\"_ZN4llvm21createWinCOFFStreamerERNS_9MCContextERNS_16TargetAsmBackendERNS_13MCCodeEmitterERNS_11raw_ostreamEb\", \"llvm::createWinCOFFStreamer(llvm::MCContext&, llvm::TargetAsmBackend&, llvm::MCCodeEmitter&, llvm::raw_ostream&, bool)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamerD1Ev\", \"(anonymous namespace)::WinCOFFStreamer::~WinCOFFStreamer()\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamerD0Ev\", \"(anonymous namespace)::WinCOFFStreamer::~WinCOFFStreamer()\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer12InitSectionsEv\", \"(anonymous namespace)::WinCOFFStreamer::InitSections()\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer9EmitLabelEPN4llvm8MCSymbolE\", \"(anonymous namespace)::WinCOFFStreamer::EmitLabel(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer17EmitAssemblerFlagEN4llvm15MCAssemblerFlagE\", \"(anonymous namespace)::WinCOFFStreamer::EmitAssemblerFlag(llvm::MCAssemblerFlag)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer13EmitThumbFuncEPN4llvm8MCSymbolE\", \"(anonymous namespace)::WinCOFFStreamer::EmitThumbFunc(llvm::MCSymbol*)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer14EmitAssignmentEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::WinCOFFStreamer::EmitAssignment(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer19EmitSymbolAttributeEPN4llvm8MCSymbolENS1_12MCSymbolAttrE\", \"(anonymous namespace)::WinCOFFStreamer::EmitSymbolAttribute(llvm::MCSymbol*, llvm::MCSymbolAttr)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer14EmitSymbolDescEPN4llvm8MCSymbolEj\", \"(anonymous namespace)::WinCOFFStreamer::EmitSymbolDesc(llvm::MCSymbol*, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer18BeginCOFFSymbolDefEPKN4llvm8MCSymbolE\", \"(anonymous namespace)::WinCOFFStreamer::BeginCOFFSymbolDef(llvm::MCSymbol const*)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer26EmitCOFFSymbolStorageClassEi\", \"(anonymous namespace)::WinCOFFStreamer::EmitCOFFSymbolStorageClass(int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer18EmitCOFFSymbolTypeEi\", \"(anonymous namespace)::WinCOFFStreamer::EmitCOFFSymbolType(int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer16EndCOFFSymbolDefEv\", \"(anonymous namespace)::WinCOFFStreamer::EndCOFFSymbolDef()\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer11EmitELFSizeEPN4llvm8MCSymbolEPKNS1_6MCExprE\", \"(anonymous namespace)::WinCOFFStreamer::EmitELFSize(llvm::MCSymbol*, llvm::MCExpr const*)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer16EmitCommonSymbolEPN4llvm8MCSymbolEyj\", \"(anonymous namespace)::WinCOFFStreamer::EmitCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer21EmitLocalCommonSymbolEPN4llvm8MCSymbolEy\", \"(anonymous namespace)::WinCOFFStreamer::EmitLocalCommonSymbol(llvm::MCSymbol*, unsigned long long)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer12EmitZerofillEPKN4llvm9MCSectionEPNS1_8MCSymbolEjj\", \"(anonymous namespace)::WinCOFFStreamer::EmitZerofill(llvm::MCSection const*, llvm::MCSymbol*, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer14EmitTBSSSymbolEPKN4llvm9MCSectionEPNS1_8MCSymbolEyj\", \"(anonymous namespace)::WinCOFFStreamer::EmitTBSSSymbol(llvm::MCSection const*, llvm::MCSymbol*, unsigned long long, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer9EmitBytesEN4llvm9StringRefEj\", \"(anonymous namespace)::WinCOFFStreamer::EmitBytes(llvm::StringRef, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer20EmitValueToAlignmentEjxjj\", \"(anonymous namespace)::WinCOFFStreamer::EmitValueToAlignment(unsigned int, long long, unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer17EmitCodeAlignmentEjj\", \"(anonymous namespace)::WinCOFFStreamer::EmitCodeAlignment(unsigned int, unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer17EmitFileDirectiveEN4llvm9StringRefE\", \"(anonymous namespace)::WinCOFFStreamer::EmitFileDirective(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer15EmitInstructionERKN4llvm6MCInstE\", \"(anonymous namespace)::WinCOFFStreamer::EmitInstruction(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer6FinishEv\", \"(anonymous namespace)::WinCOFFStreamer::Finish()\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer14EmitInstToDataERKN4llvm6MCInstE\", \"(anonymous namespace)::WinCOFFStreamer::EmitInstToData(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer18EmitInstToFragmentERKN4llvm6MCInstE\", \"(anonymous namespace)::WinCOFFStreamer::EmitInstToFragment(llvm::MCInst const&)\"},\n    {\"_ZN12_GLOBAL__N_115WinCOFFStreamer15AddCommonSymbolEPN4llvm8MCSymbolEyjb\", \"(anonymous namespace)::WinCOFFStreamer::AddCommonSymbol(llvm::MCSymbol*, unsigned long long, unsigned int, bool)\"},\n    {\"_ZN4llvm14MCInstFragmentD1Ev\", \"llvm::MCInstFragment::~MCInstFragment()\"},\n    {\"_ZN4llvm14MCInstFragmentD0Ev\", \"llvm::MCInstFragment::~MCInstFragment()\"},\n    {\"_ZN4llvm7APFloat10initializeEPKNS_12fltSemanticsE\", \"llvm::APFloat::initialize(llvm::fltSemantics const*)\"},\n    {\"_ZNK4llvm7APFloat9partCountEv\", \"llvm::APFloat::partCount() const\"},\n    {\"_ZN4llvm7APFloat15freeSignificandEv\", \"llvm::APFloat::freeSignificand()\"},\n    {\"_ZN4llvm7APFloat6assignERKS0_\", \"llvm::APFloat::assign(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat15copySignificandERKS0_\", \"llvm::APFloat::copySignificand(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat16significandPartsEv\", \"llvm::APFloat::significandParts()\"},\n    {\"_ZNK4llvm7APFloat16significandPartsEv\", \"llvm::APFloat::significandParts() const\"},\n    {\"_ZN4llvm7APFloat7makeNaNEbbPKNS_5APIntE\", \"llvm::APFloat::makeNaN(bool, bool, llvm::APInt const*)\"},\n    {\"_ZN4llvm7APFloat7makeNaNERKNS_12fltSemanticsEbbPKNS_5APIntE\", \"llvm::APFloat::makeNaN(llvm::fltSemantics const&, bool, bool, llvm::APInt const*)\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_12fltSemanticsENS0_16uninitializedTagE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::APFloat::uninitializedTag)\"},\n    {\"_ZN4llvm7APFloatD1Ev\", \"llvm::APFloat::~APFloat()\"},\n    {\"_ZN4llvm7APFloataSERKS0_\", \"llvm::APFloat::operator=(llvm::APFloat const&)\"},\n    {\"_ZNK4llvm7APFloat14bitwiseIsEqualERKS0_\", \"llvm::APFloat::bitwiseIsEqual(llvm::APFloat const&) const\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_12fltSemanticsEy\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, unsigned long long)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_12fltSemanticsEy\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, unsigned long long)\"},\n    {\"_ZN4llvm7APFloat15zeroSignificandEv\", \"llvm::APFloat::zeroSignificand()\"},\n    {\"_ZN4llvm7APFloat9normalizeENS0_12roundingModeENS_12lostFractionE\", \"llvm::APFloat::normalize(llvm::APFloat::roundingMode, llvm::lostFraction)\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_12fltSemanticsE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_12fltSemanticsE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_12fltSemanticsENS0_16uninitializedTagE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::APFloat::uninitializedTag)\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_12fltSemanticsENS0_11fltCategoryEb\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::APFloat::fltCategory, bool)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_12fltSemanticsENS0_11fltCategoryEb\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::APFloat::fltCategory, bool)\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_12fltSemanticsENS_9StringRefE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::StringRef)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_12fltSemanticsENS_9StringRefE\", \"llvm::APFloat::APFloat(llvm::fltSemantics const&, llvm::StringRef)\"},\n    {\"_ZN4llvm7APFloat17convertFromStringENS_9StringRefENS0_12roundingModeE\", \"llvm::APFloat::convertFromString(llvm::StringRef, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloatC1ERKS0_\", \"llvm::APFloat::APFloat(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloatC2ERKS0_\", \"llvm::APFloat::APFloat(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloatD2Ev\", \"llvm::APFloat::~APFloat()\"},\n    {\"_ZNK4llvm7APFloat7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::APFloat::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZNK4llvm7APFloat14bitcastToAPIntEv\", \"llvm::APFloat::bitcastToAPInt() const\"},\n    {\"_ZN4llvm7APFloat18semanticsPrecisionERKNS_12fltSemanticsE\", \"llvm::APFloat::semanticsPrecision(llvm::fltSemantics const&)\"},\n    {\"_ZN4llvm7APFloat20incrementSignificandEv\", \"llvm::APFloat::incrementSignificand()\"},\n    {\"_ZN4llvm7APFloat14addSignificandERKS0_\", \"llvm::APFloat::addSignificand(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat19subtractSignificandERKS0_y\", \"llvm::APFloat::subtractSignificand(llvm::APFloat const&, unsigned long long)\"},\n    {\"_ZN4llvm7APFloat19multiplySignificandERKS0_PS1_\", \"llvm::APFloat::multiplySignificand(llvm::APFloat const&, llvm::APFloat const*)\"},\n    {\"_ZN4llvm7APFloat7convertERKNS_12fltSemanticsENS0_12roundingModeEPb\", \"llvm::APFloat::convert(llvm::fltSemantics const&, llvm::APFloat::roundingMode, bool*)\"},\n    {\"_ZN4llvm7APFloat24addOrSubtractSignificandERKS0_b\", \"llvm::APFloat::addOrSubtractSignificand(llvm::APFloat const&, bool)\"},\n    {\"_ZN4llvm7APFloat17divideSignificandERKS0_\", \"llvm::APFloat::divideSignificand(llvm::APFloat const&)\"},\n    {\"_ZNK4llvm7APFloat14significandMSBEv\", \"llvm::APFloat::significandMSB() const\"},\n    {\"_ZNK4llvm7APFloat14significandLSBEv\", \"llvm::APFloat::significandLSB() const\"},\n    {\"_ZN4llvm7APFloat21shiftSignificandRightEj\", \"llvm::APFloat::shiftSignificandRight(unsigned int)\"},\n    {\"_ZN4llvm7APFloat20shiftSignificandLeftEj\", \"llvm::APFloat::shiftSignificandLeft(unsigned int)\"},\n    {\"_ZNK4llvm7APFloat20compareAbsoluteValueERKS0_\", \"llvm::APFloat::compareAbsoluteValue(llvm::APFloat const&) const\"},\n    {\"_ZN4llvm7APFloat14handleOverflowENS0_12roundingModeE\", \"llvm::APFloat::handleOverflow(llvm::APFloat::roundingMode)\"},\n    {\"_ZNK4llvm7APFloat17roundAwayFromZeroENS0_12roundingModeENS_12lostFractionEj\", \"llvm::APFloat::roundAwayFromZero(llvm::APFloat::roundingMode, llvm::lostFraction, unsigned int) const\"},\n    {\"_ZN4llvm7APFloat21addOrSubtractSpecialsERKS0_b\", \"llvm::APFloat::addOrSubtractSpecials(llvm::APFloat const&, bool)\"},\n    {\"_ZN4llvm7APFloat16multiplySpecialsERKS0_\", \"llvm::APFloat::multiplySpecials(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat14divideSpecialsERKS0_\", \"llvm::APFloat::divideSpecials(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat11modSpecialsERKS0_\", \"llvm::APFloat::modSpecials(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat10changeSignEv\", \"llvm::APFloat::changeSign()\"},\n    {\"_ZN4llvm7APFloat9clearSignEv\", \"llvm::APFloat::clearSign()\"},\n    {\"_ZN4llvm7APFloat8copySignERKS0_\", \"llvm::APFloat::copySign(llvm::APFloat const&)\"},\n    {\"_ZN4llvm7APFloat13addOrSubtractERKS0_NS0_12roundingModeEb\", \"llvm::APFloat::addOrSubtract(llvm::APFloat const&, llvm::APFloat::roundingMode, bool)\"},\n    {\"_ZN4llvm7APFloat3addERKS0_NS0_12roundingModeE\", \"llvm::APFloat::add(llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat8subtractERKS0_NS0_12roundingModeE\", \"llvm::APFloat::subtract(llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat8multiplyERKS0_NS0_12roundingModeE\", \"llvm::APFloat::multiply(llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat6divideERKS0_NS0_12roundingModeE\", \"llvm::APFloat::divide(llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat9remainderERKS0_\", \"llvm::APFloat::remainder(llvm::APFloat const&)\"},\n    {\"_ZNK4llvm7APFloat16convertToIntegerEPyjbNS0_12roundingModeEPb\", \"llvm::APFloat::convertToInteger(unsigned long long*, unsigned int, bool, llvm::APFloat::roundingMode, bool*) const\"},\n    {\"_ZN4llvm7APFloat30convertFromZeroExtendedIntegerEPKyjbNS0_12roundingModeE\", \"llvm::APFloat::convertFromZeroExtendedInteger(unsigned long long const*, unsigned int, bool, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat3modERKS0_NS0_12roundingModeE\", \"llvm::APFloat::mod(llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat16fusedMultiplyAddERKS0_S2_NS0_12roundingModeE\", \"llvm::APFloat::fusedMultiplyAdd(llvm::APFloat const&, llvm::APFloat const&, llvm::APFloat::roundingMode)\"},\n    {\"_ZNK4llvm7APFloat7compareERKS0_\", \"llvm::APFloat::compare(llvm::APFloat const&) const\"},\n    {\"_ZNK4llvm7APFloat28convertToSignExtendedIntegerEPyjbNS0_12roundingModeEPb\", \"llvm::APFloat::convertToSignExtendedInteger(unsigned long long*, unsigned int, bool, llvm::APFloat::roundingMode, bool*) const\"},\n    {\"_ZN4llvm7APFloat24convertFromUnsignedPartsEPKyjNS0_12roundingModeE\", \"llvm::APFloat::convertFromUnsignedParts(unsigned long long const*, unsigned int, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat16convertFromAPIntERKNS_5APIntEbNS0_12roundingModeE\", \"llvm::APFloat::convertFromAPInt(llvm::APInt const&, bool, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat30convertFromSignExtendedIntegerEPKyjbNS0_12roundingModeE\", \"llvm::APFloat::convertFromSignExtendedInteger(unsigned long long const*, unsigned int, bool, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat28convertFromHexadecimalStringENS_9StringRefENS0_12roundingModeE\", \"llvm::APFloat::convertFromHexadecimalString(llvm::StringRef, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat28roundSignificandWithExponentEPKyjiNS0_12roundingModeE\", \"llvm::APFloat::roundSignificandWithExponent(unsigned long long const*, unsigned int, int, llvm::APFloat::roundingMode)\"},\n    {\"_ZN4llvm7APFloat24convertFromDecimalStringENS_9StringRefENS0_12roundingModeE\", \"llvm::APFloat::convertFromDecimalString(llvm::StringRef, llvm::APFloat::roundingMode)\"},\n    {\"_ZNK4llvm7APFloat18convertToHexStringEPcjbNS0_12roundingModeE\", \"llvm::APFloat::convertToHexString(char*, unsigned int, bool, llvm::APFloat::roundingMode) const\"},\n    {\"_ZNK4llvm7APFloat24convertNormalToHexStringEPcjbNS0_12roundingModeE\", \"llvm::APFloat::convertNormalToHexString(char*, unsigned int, bool, llvm::APFloat::roundingMode) const\"},\n    {\"_ZNK4llvm7APFloat12getHashValueEv\", \"llvm::APFloat::getHashValue() const\"},\n    {\"_ZNK4llvm7APFloat34convertF80LongDoubleAPFloatToAPIntEv\", \"llvm::APFloat::convertF80LongDoubleAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat36convertPPCDoubleDoubleAPFloatToAPIntEv\", \"llvm::APFloat::convertPPCDoubleDoubleAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat30convertQuadrupleAPFloatToAPIntEv\", \"llvm::APFloat::convertQuadrupleAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat27convertDoubleAPFloatToAPIntEv\", \"llvm::APFloat::convertDoubleAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat26convertFloatAPFloatToAPIntEv\", \"llvm::APFloat::convertFloatAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat25convertHalfAPFloatToAPIntEv\", \"llvm::APFloat::convertHalfAPFloatToAPInt() const\"},\n    {\"_ZNK4llvm7APFloat14convertToFloatEv\", \"llvm::APFloat::convertToFloat() const\"},\n    {\"_ZNK4llvm7APFloat15convertToDoubleEv\", \"llvm::APFloat::convertToDouble() const\"},\n    {\"_ZN4llvm7APFloat26initFromF80LongDoubleAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromF80LongDoubleAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat28initFromPPCDoubleDoubleAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromPPCDoubleDoubleAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat22initFromQuadrupleAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromQuadrupleAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat19initFromDoubleAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromDoubleAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat18initFromFloatAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromFloatAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat17initFromHalfAPIntERKNS_5APIntE\", \"llvm::APFloat::initFromHalfAPInt(llvm::APInt const&)\"},\n    {\"_ZN4llvm7APFloat13initFromAPIntERKNS_5APIntEb\", \"llvm::APFloat::initFromAPInt(llvm::APInt const&, bool)\"},\n    {\"_ZN4llvm7APFloat10getLargestERKNS_12fltSemanticsEb\", \"llvm::APFloat::getLargest(llvm::fltSemantics const&, bool)\"},\n    {\"_ZN4llvm7APFloat11getSmallestERKNS_12fltSemanticsEb\", \"llvm::APFloat::getSmallest(llvm::fltSemantics const&, bool)\"},\n    {\"_ZN4llvm7APFloat21getSmallestNormalizedERKNS_12fltSemanticsEb\", \"llvm::APFloat::getSmallestNormalized(llvm::fltSemantics const&, bool)\"},\n    {\"_ZN4llvm7APFloatC1ERKNS_5APIntEb\", \"llvm::APFloat::APFloat(llvm::APInt const&, bool)\"},\n    {\"_ZN4llvm7APFloatC2ERKNS_5APIntEb\", \"llvm::APFloat::APFloat(llvm::APInt const&, bool)\"},\n    {\"_ZN4llvm7APFloatC1Ef\", \"llvm::APFloat::APFloat(float)\"},\n    {\"_ZN4llvm7APFloatC2Ef\", \"llvm::APFloat::APFloat(float)\"},\n    {\"_ZN4llvm7APFloatC1Ed\", \"llvm::APFloat::APFloat(double)\"},\n    {\"_ZN4llvm7APFloatC2Ed\", \"llvm::APFloat::APFloat(double)\"},\n    {\"_ZNK4llvm7APFloat8toStringERNS_15SmallVectorImplIcEEjj\", \"llvm::APFloat::toString(llvm::SmallVectorImpl<char>&, unsigned int, unsigned int) const\"},\n    {\"_ZNK4llvm5APIntngEv\", \"llvm::APInt::operator-() const\"},\n    {\"_ZN4llvm5APIntlSEj\", \"llvm::APInt::operator<<=(unsigned int)\"},\n    {\"_ZN4llvm5APInt12initSlowCaseEjyb\", \"llvm::APInt::initSlowCase(unsigned int, unsigned long long, bool)\"},\n    {\"_ZN4llvm5APInt12initSlowCaseERKS0_\", \"llvm::APInt::initSlowCase(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntC1EjjPKy\", \"llvm::APInt::APInt(unsigned int, unsigned int, unsigned long long const*)\"},\n    {\"_ZN4llvm5APIntC2EjjPKy\", \"llvm::APInt::APInt(unsigned int, unsigned int, unsigned long long const*)\"},\n    {\"_ZN4llvm5APIntC1EjNS_9StringRefEh\", \"llvm::APInt::APInt(unsigned int, llvm::StringRef, unsigned char)\"},\n    {\"_ZN4llvm5APIntC2EjNS_9StringRefEh\", \"llvm::APInt::APInt(unsigned int, llvm::StringRef, unsigned char)\"},\n    {\"_ZN4llvm5APInt10fromStringEjNS_9StringRefEh\", \"llvm::APInt::fromString(unsigned int, llvm::StringRef, unsigned char)\"},\n    {\"_ZN4llvm5APInt14AssignSlowCaseERKS0_\", \"llvm::APInt::AssignSlowCase(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntaSEy\", \"llvm::APInt::operator=(unsigned long long)\"},\n    {\"_ZNK4llvm5APInt7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::APInt::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm5APIntppEv\", \"llvm::APInt::operator++()\"},\n    {\"_ZN4llvm5APIntmmEv\", \"llvm::APInt::operator--()\"},\n    {\"_ZN4llvm5APIntpLERKS0_\", \"llvm::APInt::operator+=(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntmIERKS0_\", \"llvm::APInt::operator-=(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntmLERKS0_\", \"llvm::APInt::operator*=(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntaNERKS0_\", \"llvm::APInt::operator&=(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APIntoRERKS0_\", \"llvm::APInt::operator|=(llvm::APInt const&)\"},\n    {\"_ZN4llvm5APInteOERKS0_\", \"llvm::APInt::operator^=(llvm::APInt const&)\"},\n    {\"_ZNK4llvm5APInt11AndSlowCaseERKS0_\", \"llvm::APInt::AndSlowCase(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt10OrSlowCaseERKS0_\", \"llvm::APInt::OrSlowCase(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt11XorSlowCaseERKS0_\", \"llvm::APInt::XorSlowCase(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APIntntEv\", \"llvm::APInt::operator!() const\"},\n    {\"_ZNK4llvm5APIntmlERKS0_\", \"llvm::APInt::operator*(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APIntplERKS0_\", \"llvm::APInt::operator+(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APIntmiERKS0_\", \"llvm::APInt::operator-(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APIntixEj\", \"llvm::APInt::operator[](unsigned int) const\"},\n    {\"_ZNK4llvm5APInt13EqualSlowCaseERKS0_\", \"llvm::APInt::EqualSlowCase(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt13EqualSlowCaseEy\", \"llvm::APInt::EqualSlowCase(unsigned long long) const\"},\n    {\"_ZNK4llvm5APInt3ultERKS0_\", \"llvm::APInt::ult(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt3sltERKS0_\", \"llvm::APInt::slt(llvm::APInt const&) const\"},\n    {\"_ZN4llvm5APInt6setBitEj\", \"llvm::APInt::setBit(unsigned int)\"},\n    {\"_ZN4llvm5APInt8clearBitEj\", \"llvm::APInt::clearBit(unsigned int)\"},\n    {\"_ZN4llvm5APInt7flipBitEj\", \"llvm::APInt::flipBit(unsigned int)\"},\n    {\"_ZN4llvm5APInt13getBitsNeededENS_9StringRefEh\", \"llvm::APInt::getBitsNeeded(llvm::StringRef, unsigned char)\"},\n    {\"_ZNK4llvm5APInt12getHashValueEv\", \"llvm::APInt::getHashValue() const\"},\n    {\"_ZNK4llvm5APInt9getHiBitsEj\", \"llvm::APInt::getHiBits(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt9getLoBitsEj\", \"llvm::APInt::getLoBits(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt25countLeadingZerosSlowCaseEv\", \"llvm::APInt::countLeadingZerosSlowCase() const\"},\n    {\"_ZNK4llvm5APInt16countLeadingOnesEv\", \"llvm::APInt::countLeadingOnes() const\"},\n    {\"_ZNK4llvm5APInt18countTrailingZerosEv\", \"llvm::APInt::countTrailingZeros() const\"},\n    {\"_ZNK4llvm5APInt25countTrailingOnesSlowCaseEv\", \"llvm::APInt::countTrailingOnesSlowCase() const\"},\n    {\"_ZNK4llvm5APInt23countPopulationSlowCaseEv\", \"llvm::APInt::countPopulationSlowCase() const\"},\n    {\"_ZNK4llvm5APInt8byteSwapEv\", \"llvm::APInt::byteSwap() const\"},\n    {\"_ZN4llvm8APIntOps21GreatestCommonDivisorERKNS_5APIntES3_\", \"llvm::APIntOps::GreatestCommonDivisor(llvm::APInt const&, llvm::APInt const&)\"},\n    {\"_ZN4llvm8APIntOps18RoundDoubleToAPIntEdj\", \"llvm::APIntOps::RoundDoubleToAPInt(double, unsigned int)\"},\n    {\"_ZNK4llvm5APInt13roundToDoubleEb\", \"llvm::APInt::roundToDouble(bool) const\"},\n    {\"_ZNK4llvm5APInt5truncEj\", \"llvm::APInt::trunc(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4sextEj\", \"llvm::APInt::sext(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4zextEj\", \"llvm::APInt::zext(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt11zextOrTruncEj\", \"llvm::APInt::zextOrTrunc(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt11sextOrTruncEj\", \"llvm::APInt::sextOrTrunc(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4ashrERKS0_\", \"llvm::APInt::ashr(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt4ashrEj\", \"llvm::APInt::ashr(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4lshrERKS0_\", \"llvm::APInt::lshr(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt4lshrEj\", \"llvm::APInt::lshr(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt3shlERKS0_\", \"llvm::APInt::shl(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt11shlSlowCaseEj\", \"llvm::APInt::shlSlowCase(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4rotlERKS0_\", \"llvm::APInt::rotl(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt4rotlEj\", \"llvm::APInt::rotl(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4rotrERKS0_\", \"llvm::APInt::rotr(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt4rotrEj\", \"llvm::APInt::rotr(unsigned int) const\"},\n    {\"_ZNK4llvm5APInt4sqrtEv\", \"llvm::APInt::sqrt() const\"},\n    {\"_ZNK4llvm5APInt4udivERKS0_\", \"llvm::APInt::udiv(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt21multiplicativeInverseERKS0_\", \"llvm::APInt::multiplicativeInverse(llvm::APInt const&) const\"},\n    {\"_ZN4llvm5APInt7udivremERKS0_S2_RS0_S3_\", \"llvm::APInt::udivrem(llvm::APInt const&, llvm::APInt const&, llvm::APInt&, llvm::APInt&)\"},\n    {\"_ZNK4llvm5APInt5magicEv\", \"llvm::APInt::magic() const\"},\n    {\"_ZNK4llvm5APInt4uremERKS0_\", \"llvm::APInt::urem(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt6magicuEv\", \"llvm::APInt::magicu() const\"},\n    {\"_ZN4llvm5APInt6divideES0_jRKS0_jPS0_S3_\", \"llvm::APInt::divide(llvm::APInt, unsigned int, llvm::APInt const&, unsigned int, llvm::APInt*, llvm::APInt*)\"},\n    {\"_ZNK4llvm5APInt7sadd_ovERKS0_Rb\", \"llvm::APInt::sadd_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7uadd_ovERKS0_Rb\", \"llvm::APInt::uadd_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7ssub_ovERKS0_Rb\", \"llvm::APInt::ssub_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7usub_ovERKS0_Rb\", \"llvm::APInt::usub_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7sdiv_ovERKS0_Rb\", \"llvm::APInt::sdiv_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7smul_ovERKS0_Rb\", \"llvm::APInt::smul_ov(llvm::APInt const&, bool&) const\"},\n    {\"_ZNK4llvm5APInt7sshl_ovEjRb\", \"llvm::APInt::sshl_ov(unsigned int, bool&) const\"},\n    {\"_ZNK4llvm5APInt8toStringERNS_15SmallVectorImplIcEEjb\", \"llvm::APInt::toString(llvm::SmallVectorImpl<char>&, unsigned int, bool) const\"},\n    {\"_ZNK4llvm5APInt8toStringEjb\", \"llvm::APInt::toString(unsigned int, bool) const\"},\n    {\"_ZNK4llvm5APInt4dumpEv\", \"llvm::APInt::dump() const\"},\n    {\"_ZNK4llvm5APInt5printERNS_11raw_ostreamEb\", \"llvm::APInt::print(llvm::raw_ostream&, bool) const\"},\n    {\"_ZN4llvm5APInt5tcSetEPyyj\", \"llvm::APInt::tcSet(unsigned long long*, unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm5APInt8tcAssignEPyPKyj\", \"llvm::APInt::tcAssign(unsigned long long*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt8tcIsZeroEPKyj\", \"llvm::APInt::tcIsZero(unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt12tcExtractBitEPKyj\", \"llvm::APInt::tcExtractBit(unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt8tcSetBitEPyj\", \"llvm::APInt::tcSetBit(unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt10tcClearBitEPyj\", \"llvm::APInt::tcClearBit(unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt5tcLSBEPKyj\", \"llvm::APInt::tcLSB(unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt5tcMSBEPKyj\", \"llvm::APInt::tcMSB(unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt9tcExtractEPyjPKyjj\", \"llvm::APInt::tcExtract(unsigned long long*, unsigned int, unsigned long long const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm5APInt12tcShiftRightEPyjj\", \"llvm::APInt::tcShiftRight(unsigned long long*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm5APInt5tcAddEPyPKyyj\", \"llvm::APInt::tcAdd(unsigned long long*, unsigned long long const*, unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm5APInt10tcSubtractEPyPKyyj\", \"llvm::APInt::tcSubtract(unsigned long long*, unsigned long long const*, unsigned long long, unsigned int)\"},\n    {\"_ZN4llvm5APInt8tcNegateEPyj\", \"llvm::APInt::tcNegate(unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt12tcComplementEPyj\", \"llvm::APInt::tcComplement(unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt11tcIncrementEPyj\", \"llvm::APInt::tcIncrement(unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt14tcMultiplyPartEPyPKyyyjjb\", \"llvm::APInt::tcMultiplyPart(unsigned long long*, unsigned long long const*, unsigned long long, unsigned long long, unsigned int, unsigned int, bool)\"},\n    {\"_ZN4llvm5APInt10tcMultiplyEPyPKyS3_j\", \"llvm::APInt::tcMultiply(unsigned long long*, unsigned long long const*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt14tcFullMultiplyEPyPKyS3_jj\", \"llvm::APInt::tcFullMultiply(unsigned long long*, unsigned long long const*, unsigned long long const*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm5APInt8tcDivideEPyPKyS1_S1_j\", \"llvm::APInt::tcDivide(unsigned long long*, unsigned long long const*, unsigned long long*, unsigned long long*, unsigned int)\"},\n    {\"_ZN4llvm5APInt11tcShiftLeftEPyjj\", \"llvm::APInt::tcShiftLeft(unsigned long long*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm5APInt9tcCompareEPKyS2_j\", \"llvm::APInt::tcCompare(unsigned long long const*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt5tcAndEPyPKyj\", \"llvm::APInt::tcAnd(unsigned long long*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt4tcOrEPyPKyj\", \"llvm::APInt::tcOr(unsigned long long*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt5tcXorEPyPKyj\", \"llvm::APInt::tcXor(unsigned long long*, unsigned long long const*, unsigned int)\"},\n    {\"_ZN4llvm5APInt25tcSetLeastSignificantBitsEPyjj\", \"llvm::APInt::tcSetLeastSignificantBits(unsigned long long*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm5APIntppEi\", \"llvm::APInt::operator++(int)\"},\n    {\"_ZNK4llvm5APInt3absEv\", \"llvm::APInt::abs() const\"},\n    {\"_ZNK4llvm5APInteqERKS0_\", \"llvm::APInt::operator==(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt16isMinSignedValueEv\", \"llvm::APInt::isMinSignedValue() const\"},\n    {\"_ZNK4llvm5APInt4sdivERKS0_\", \"llvm::APInt::sdiv(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm5APInt17countLeadingZerosEv\", \"llvm::APInt::countLeadingZeros() const\"},\n    {\"_ZN4llvm5APIntmmEi\", \"llvm::APInt::operator--(int)\"},\n    {\"_ZN4llvm5APIntC2Ejyb\", \"llvm::APInt::APInt(unsigned int, unsigned long long, bool)\"},\n    {\"_ZNK4llvm6APSInt7ProfileERNS_16FoldingSetNodeIDE\", \"llvm::APSInt::Profile(llvm::FoldingSetNodeID&) const\"},\n    {\"_ZN4llvm16BumpPtrAllocatorC1EmmRNS_13SlabAllocatorE\", \"llvm::BumpPtrAllocator::BumpPtrAllocator(unsigned long, unsigned long, llvm::SlabAllocator&)\"},\n    {\"_ZN4llvm16BumpPtrAllocatorC2EmmRNS_13SlabAllocatorE\", \"llvm::BumpPtrAllocator::BumpPtrAllocator(unsigned long, unsigned long, llvm::SlabAllocator&)\"},\n    {\"_ZN4llvm16BumpPtrAllocatorD1Ev\", \"llvm::BumpPtrAllocator::~BumpPtrAllocator()\"},\n    {\"_ZN4llvm16BumpPtrAllocatorD2Ev\", \"llvm::BumpPtrAllocator::~BumpPtrAllocator()\"},\n    {\"_ZN4llvm16BumpPtrAllocator15DeallocateSlabsEPNS_7MemSlabE\", \"llvm::BumpPtrAllocator::DeallocateSlabs(llvm::MemSlab*)\"},\n    {\"_ZN4llvm16BumpPtrAllocator8AlignPtrEPcm\", \"llvm::BumpPtrAllocator::AlignPtr(char*, unsigned long)\"},\n    {\"_ZN4llvm16BumpPtrAllocator12StartNewSlabEv\", \"llvm::BumpPtrAllocator::StartNewSlab()\"},\n    {\"_ZN4llvm16BumpPtrAllocator5ResetEv\", \"llvm::BumpPtrAllocator::Reset()\"},\n    {\"_ZN4llvm16BumpPtrAllocator8AllocateEmm\", \"llvm::BumpPtrAllocator::Allocate(unsigned long, unsigned long)\"},\n    {\"_ZNK4llvm16BumpPtrAllocator11GetNumSlabsEv\", \"llvm::BumpPtrAllocator::GetNumSlabs() const\"},\n    {\"_ZNK4llvm16BumpPtrAllocator10PrintStatsEv\", \"llvm::BumpPtrAllocator::PrintStats() const\"},\n    {\"_ZN4llvm19MallocSlabAllocatorD1Ev\", \"llvm::MallocSlabAllocator::~MallocSlabAllocator()\"},\n    {\"_ZN4llvm13SlabAllocatorD0Ev\", \"llvm::SlabAllocator::~SlabAllocator()\"},\n    {\"_ZN4llvm13SlabAllocatorD1Ev\", \"llvm::SlabAllocator::~SlabAllocator()\"},\n    {\"_ZN4llvm13SlabAllocatorD2Ev\", \"llvm::SlabAllocator::~SlabAllocator()\"},\n    {\"_ZN4llvm19MallocSlabAllocatorD0Ev\", \"llvm::MallocSlabAllocator::~MallocSlabAllocator()\"},\n    {\"_ZN4llvm19MallocSlabAllocatorD2Ev\", \"llvm::MallocSlabAllocator::~MallocSlabAllocator()\"},\n    {\"_ZN4llvm19MallocSlabAllocator8AllocateEm\", \"llvm::MallocSlabAllocator::Allocate(unsigned long)\"},\n    {\"_ZN4llvm19MallocSlabAllocator10DeallocateEPNS_7MemSlabE\", \"llvm::MallocSlabAllocator::Deallocate(llvm::MemSlab*)\"},\n    {\"_ZN4llvm18PrintRecyclerStatsEmmm\", \"llvm::PrintRecyclerStats(unsigned long, unsigned long, unsigned long)\"},\n    {\"_ZN4llvm3sys14CompareAndSwapEPVjjj\", \"llvm::sys::CompareAndSwap(unsigned int volatile*, unsigned int, unsigned int)\"},\n    {\"_ZN4llvm3sys15AtomicIncrementEPVj\", \"llvm::sys::AtomicIncrement(unsigned int volatile*)\"},\n    {\"_ZN4llvm3sys15AtomicDecrementEPVj\", \"llvm::sys::AtomicDecrement(unsigned int volatile*)\"},\n    {\"_ZN4llvm3sys9AtomicAddEPVjj\", \"llvm::sys::AtomicAdd(unsigned int volatile*, unsigned int)\"},\n    {\"_ZN4llvm3sys9AtomicMulEPVjj\", \"llvm::sys::AtomicMul(unsigned int volatile*, unsigned int)\"},\n    {\"_ZN4llvm3sys9AtomicDivEPVjj\", \"llvm::sys::AtomicDiv(unsigned int volatile*, unsigned int)\"},\n    {\"_ZN4llvm2cl6parserIjE5parseERNS0_6OptionENS_9StringRefES5_Rj\", \"llvm::cl::parser<unsigned int>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, unsigned int&)\"},\n    {\"_ZNK4llvm2cl17basic_parser_impl14getOptionWidthERKNS0_6OptionE\", \"llvm::cl::basic_parser_impl::getOptionWidth(llvm::cl::Option const&) const\"},\n    {\"_ZNK4llvm2cl17basic_parser_impl15printOptionInfoERKNS0_6OptionEm\", \"llvm::cl::basic_parser_impl::printOptionInfo(llvm::cl::Option const&, unsigned long) const\"},\n    {\"_ZN4llvm2cl6parserIiE5parseERNS0_6OptionENS_9StringRefES5_Ri\", \"llvm::cl::parser<int>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, int&)\"},\n    {\"_ZN4llvm2cl6parserIbE5parseERNS0_6OptionENS_9StringRefES5_Rb\", \"llvm::cl::parser<bool>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, bool&)\"},\n    {\"_ZN4llvm2cl6Option6anchorEv\", \"llvm::cl::Option::anchor()\"},\n    {\"_ZN4llvm2cl17basic_parser_impl6anchorEv\", \"llvm::cl::basic_parser_impl::anchor()\"},\n    {\"_ZN4llvm2cl6parserIbE6anchorEv\", \"llvm::cl::parser<bool>::anchor()\"},\n    {\"_ZN4llvm2cl6parserINS0_13boolOrDefaultEE6anchorEv\", \"llvm::cl::parser<llvm::cl::boolOrDefault>::anchor()\"},\n    {\"_ZN4llvm2cl6parserIiE6anchorEv\", \"llvm::cl::parser<int>::anchor()\"},\n    {\"_ZN4llvm2cl6parserIjE6anchorEv\", \"llvm::cl::parser<unsigned int>::anchor()\"},\n    {\"_ZN4llvm2cl6parserIdE6anchorEv\", \"llvm::cl::parser<double>::anchor()\"},\n    {\"_ZN4llvm2cl6parserIfE6anchorEv\", \"llvm::cl::parser<float>::anchor()\"},\n    {\"_ZN4llvm2cl6parserISsE6anchorEv\", \"llvm::cl::parser<std::string>::anchor()\"},\n    {\"_ZN4llvm2cl6parserIcE6anchorEv\", \"llvm::cl::parser<char>::anchor()\"},\n    {\"_ZN4llvm2cl9extrahelpC1EPKc\", \"llvm::cl::extrahelp::extrahelp(char const*)\"},\n    {\"_ZN4llvm2cl9extrahelpC2EPKc\", \"llvm::cl::extrahelp::extrahelp(char const*)\"},\n    {\"_ZN4llvm2cl23ParseEnvironmentOptionsEPKcS2_S2_b\", \"llvm::cl::ParseEnvironmentOptions(char const*, char const*, char const*, bool)\"},\n    {\"_Z18ParseCStringVectorRSt6vectorIPcSaIS0_EEPKc\", \"ParseCStringVector(std::vector<char*, std::allocator<char*> >&, char const*)\"},\n    {\"_ZN4llvm2cl23ParseCommandLineOptionsEiPPcPKcb\", \"llvm::cl::ParseCommandLineOptions(int, char**, char const*, bool)\"},\n    {\"_Z13GetOptionInfoRN4llvm15SmallVectorImplIPNS_2cl6OptionEEES5_RNS_9StringMapIS3_NS_15MallocAllocatorEEE\", \"GetOptionInfo(llvm::SmallVectorImpl<llvm::cl::Option*>&, llvm::SmallVectorImpl<llvm::cl::Option*>&, llvm::StringMap<llvm::cl::Option*, llvm::MallocAllocator>&)\"},\n    {\"_ZN4llvm2cl6Option5errorERKNS_5TwineENS_9StringRefE\", \"llvm::cl::Option::error(llvm::Twine const&, llvm::StringRef)\"},\n    {\"_Z12LookupOptionRN4llvm9StringRefES1_RKNS_9StringMapIPNS_2cl6OptionENS_15MallocAllocatorEEE\", \"LookupOption(llvm::StringRef&, llvm::StringRef&, llvm::StringMap<llvm::cl::Option*, llvm::MallocAllocator> const&)\"},\n    {\"_ZN4llvm2cl6Option13addOccurrenceEjNS_9StringRefES2_b\", \"llvm::cl::Option::addOccurrence(unsigned int, llvm::StringRef, llvm::StringRef, bool)\"},\n    {\"_Z13ProvideOptionPN4llvm2cl6OptionENS_9StringRefES3_iPPcRi\", \"ProvideOption(llvm::cl::Option*, llvm::StringRef, llvm::StringRef, int, char**, int&)\"},\n    {\"_ZNK4llvm2cl5alias14getOptionWidthEv\", \"llvm::cl::alias::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl5alias15printOptionInfoEm\", \"llvm::cl::alias::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl6parserINS0_13boolOrDefaultEE5parseERNS0_6OptionENS_9StringRefES6_RS2_\", \"llvm::cl::parser<llvm::cl::boolOrDefault>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, llvm::cl::boolOrDefault&)\"},\n    {\"_ZN4llvm2cl6parserIdE5parseERNS0_6OptionENS_9StringRefES5_Rd\", \"llvm::cl::parser<double>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, double&)\"},\n    {\"_Z11parseDoubleRN4llvm2cl6OptionENS_9StringRefERd\", \"parseDouble(llvm::cl::Option&, llvm::StringRef, double&)\"},\n    {\"_ZN4llvm2cl6parserIfE5parseERNS0_6OptionENS_9StringRefES5_Rf\", \"llvm::cl::parser<float>::parse(llvm::cl::Option&, llvm::StringRef, llvm::StringRef, float&)\"},\n    {\"_ZN4llvm2cl19generic_parser_base10findOptionEPKc\", \"llvm::cl::generic_parser_base::findOption(char const*)\"},\n    {\"_ZNK4llvm2cl19generic_parser_base14getOptionWidthERKNS0_6OptionE\", \"llvm::cl::generic_parser_base::getOptionWidth(llvm::cl::Option const&) const\"},\n    {\"_ZNK4llvm2cl19generic_parser_base15printOptionInfoERKNS0_6OptionEm\", \"llvm::cl::generic_parser_base::printOptionInfo(llvm::cl::Option const&, unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEED1Ev\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEED1Ev\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl16PrintHelpMessageEv\", \"llvm::cl::PrintHelpMessage()\"},\n    {\"_ZN12_GLOBAL__N_111HelpPrinteraSEb\", \"(anonymous namespace)::HelpPrinter::operator=(bool)\"},\n    {\"_ZN4llvm2cl19PrintVersionMessageEv\", \"llvm::cl::PrintVersionMessage()\"},\n    {\"_ZN12_GLOBAL__N_114VersionPrinter5printEv\", \"(anonymous namespace)::VersionPrinter::print()\"},\n    {\"_ZN4llvm2cl17SetVersionPrinterEPFvvE\", \"llvm::cl::SetVersionPrinter(void (*)())\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEE14getOptionWidthEv\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEE15printOptionInfoEm\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEED0Ev\", \"llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEE16handleOccurrenceEjNS_9StringRefES7_\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEE14getOptionWidthEv\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEE15printOptionInfoEm\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEED0Ev\", \"llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_Z17TargetArraySortFnPKvS0_\", \"TargetArraySortFn(void const*, void const*)\"},\n    {\"_Z14OptNameComparePKvS0_\", \"OptNameCompare(void const*, void const*)\"},\n    {\"_Z28CommaSeparateAndAddOccurencePN4llvm2cl6OptionEjNS_9StringRefES3_b\", \"CommaSeparateAndAddOccurence(llvm::cl::Option*, unsigned int, llvm::StringRef, llvm::StringRef, bool)\"},\n    {\"_Z13getOptionPredN4llvm9StringRefERmPFbPKNS_2cl6OptionEERKNS_9StringMapIPS3_NS_15MallocAllocatorEEE\", \"getOptionPred(llvm::StringRef, unsigned long&, bool (*)(llvm::cl::Option const*), llvm::StringMap<llvm::cl::Option*, llvm::MallocAllocator> const&)\"},\n    {\"_Z20isPrefixedOrGroupingPKN4llvm2cl6OptionE\", \"isPrefixedOrGrouping(llvm::cl::Option const*)\"},\n    {\"_Z10isGroupingPKN4llvm2cl6OptionE\", \"isGrouping(llvm::cl::Option const*)\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIjLb0ENS0_6parserIjEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZNK4llvm2cl3optIjLb0ENS0_6parserIjEEE14getOptionWidthEv\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIjLb0ENS0_6parserIjEEE15printOptionInfoEm\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEE4doneEv\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::done()\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEE15setInitialValueERKj\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::setInitialValue(unsigned int const&)\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEE9getParserEv\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::getParser()\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIiLb0ENS0_6parserIiEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZNK4llvm2cl3optIiLb0ENS0_6parserIiEEE14getOptionWidthEv\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIiLb0ENS0_6parserIiEEE15printOptionInfoEm\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEE4doneEv\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::done()\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEE15setInitialValueERKi\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::setInitialValue(int const&)\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEE9getParserEv\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::getParser()\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optISsLb0ENS0_6parserISsEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZNK4llvm2cl3optISsLb0ENS0_6parserISsEEE14getOptionWidthEv\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optISsLb0ENS0_6parserISsEEE15printOptionInfoEm\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEE4doneEv\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::done()\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEE15setInitialValueERKSs\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::setInitialValue(std::string const&)\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEE9getParserEv\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::getParser()\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIcLb0ENS0_6parserIcEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZNK4llvm2cl3optIcLb0ENS0_6parserIcEEE14getOptionWidthEv\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIcLb0ENS0_6parserIcEEE15printOptionInfoEm\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEE4doneEv\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::done()\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEE15setInitialValueERKc\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::setInitialValue(char const&)\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEE9getParserEv\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::getParser()\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optIbLb0ENS0_6parserIbEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZNK4llvm2cl3optIbLb0ENS0_6parserIbEEE14getOptionWidthEv\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optIbLb0ENS0_6parserIbEEE15printOptionInfoEm\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEE4doneEv\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::done()\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEE15setInitialValueERKb\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::setInitialValue(bool const&)\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEE9getParserEv\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::getParser()\"},\n    {\"_ZN4llvm2cl19generic_parser_baseD1Ev\", \"llvm::cl::generic_parser_base::~generic_parser_base()\"},\n    {\"_ZN4llvm2cl19generic_parser_baseD0Ev\", \"llvm::cl::generic_parser_base::~generic_parser_base()\"},\n    {\"_ZN4llvm2cl12basic_parserIbED1Ev\", \"llvm::cl::basic_parser<bool>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIbED0Ev\", \"llvm::cl::basic_parser<bool>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserINS0_13boolOrDefaultEED1Ev\", \"llvm::cl::basic_parser<llvm::cl::boolOrDefault>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserINS0_13boolOrDefaultEED0Ev\", \"llvm::cl::basic_parser<llvm::cl::boolOrDefault>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIiED1Ev\", \"llvm::cl::basic_parser<int>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIiED0Ev\", \"llvm::cl::basic_parser<int>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIjED1Ev\", \"llvm::cl::basic_parser<unsigned int>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIjED0Ev\", \"llvm::cl::basic_parser<unsigned int>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIdED1Ev\", \"llvm::cl::basic_parser<double>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIdED0Ev\", \"llvm::cl::basic_parser<double>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIfED1Ev\", \"llvm::cl::basic_parser<float>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIfED0Ev\", \"llvm::cl::basic_parser<float>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserISsED1Ev\", \"llvm::cl::basic_parser<std::string>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserISsED0Ev\", \"llvm::cl::basic_parser<std::string>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIcED1Ev\", \"llvm::cl::basic_parser<char>::~basic_parser()\"},\n    {\"_ZN4llvm2cl12basic_parserIcED0Ev\", \"llvm::cl::basic_parser<char>::~basic_parser()\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEED1Ev\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIjLb0ENS0_6parserIjEEED0Ev\", \"llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEED1Ev\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIiLb0ENS0_6parserIiEEED0Ev\", \"llvm::cl::opt<int, false, llvm::cl::parser<int> >::~opt()\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEED1Ev\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::~opt()\"},\n    {\"_ZN4llvm2cl3optISsLb0ENS0_6parserISsEEED0Ev\", \"llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEED1Ev\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIcLb0ENS0_6parserIcEEED0Ev\", \"llvm::cl::opt<char, false, llvm::cl::parser<char> >::~opt()\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEED0Ev\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserINS0_13boolOrDefaultEED1Ev\", \"llvm::cl::parser<llvm::cl::boolOrDefault>::~parser()\"},\n    {\"_ZN4llvm2cl6parserINS0_13boolOrDefaultEED0Ev\", \"llvm::cl::parser<llvm::cl::boolOrDefault>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserINS0_13boolOrDefaultEE12getValueNameEv\", \"llvm::cl::parser<llvm::cl::boolOrDefault>::getValueName() const\"},\n    {\"_ZN4llvm2cl6parserIiED1Ev\", \"llvm::cl::parser<int>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIiED0Ev\", \"llvm::cl::parser<int>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIiE12getValueNameEv\", \"llvm::cl::parser<int>::getValueName() const\"},\n    {\"_ZN4llvm2cl6parserIjED1Ev\", \"llvm::cl::parser<unsigned int>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIjED0Ev\", \"llvm::cl::parser<unsigned int>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIjE12getValueNameEv\", \"llvm::cl::parser<unsigned int>::getValueName() const\"},\n    {\"_ZN4llvm2cl6parserIdED1Ev\", \"llvm::cl::parser<double>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIdED0Ev\", \"llvm::cl::parser<double>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIdE12getValueNameEv\", \"llvm::cl::parser<double>::getValueName() const\"},\n    {\"_ZN4llvm2cl6parserIfED1Ev\", \"llvm::cl::parser<float>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIfED0Ev\", \"llvm::cl::parser<float>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIfE12getValueNameEv\", \"llvm::cl::parser<float>::getValueName() const\"},\n    {\"_ZN4llvm2cl6parserIcED1Ev\", \"llvm::cl::parser<char>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIcED0Ev\", \"llvm::cl::parser<char>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIcE12getValueNameEv\", \"llvm::cl::parser<char>::getValueName() const\"},\n    {\"_ZN4llvm2cl5alias16handleOccurrenceEjNS_9StringRefES2_\", \"llvm::cl::alias::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm2cl5aliasD1Ev\", \"llvm::cl::alias::~alias()\"},\n    {\"_ZN4llvm2cl5aliasD0Ev\", \"llvm::cl::alias::~alias()\"},\n    {\"_ZNSt6vectorIPcSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_\", \"std::vector<char*, std::allocator<char*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char**, std::vector<char*, std::allocator<char*> > >, char* const&)\"},\n    {\"_ZN4llvm14object_creatorISt6vectorIPKcSaIS3_EEEEPvv\", \"void* llvm::object_creator<std::vector<char const*, std::allocator<char const*> > >()\"},\n    {\"_ZN4llvm14object_deleterISt6vectorIPKcSaIS3_EEE4callEPv\", \"llvm::object_deleter<std::vector<char const*, std::allocator<char const*> > >::call(void*)\"},\n    {\"_ZNSt6vectorISt4pairIPKcPKN4llvm6TargetEESaIS7_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS7_S9_EERKS7_\", \"std::vector<std::pair<char const*, llvm::Target const*>, std::allocator<std::pair<char const*, llvm::Target const*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<char const*, llvm::Target const*>*, std::vector<std::pair<char const*, llvm::Target const*>, std::allocator<std::pair<char const*, llvm::Target const*> > > >, std::pair<char const*, llvm::Target const*> const&)\"},\n    {\"_ZN4llvm9StringMapIPNS_2cl6OptionENS_15MallocAllocatorEE16GetOrCreateValueIS3_EERNS_14StringMapEntryIS3_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::cl::Option*>& llvm::StringMap<llvm::cl::Option*, llvm::MallocAllocator>::GetOrCreateValue<llvm::cl::Option*>(llvm::StringRef, llvm::cl::Option*)\"},\n    {\"_ZN4llvm13ConstantRangeC1Ejb\", \"llvm::ConstantRange::ConstantRange(unsigned int, bool)\"},\n    {\"_ZN4llvm13ConstantRangeC2Ejb\", \"llvm::ConstantRange::ConstantRange(unsigned int, bool)\"},\n    {\"_ZN4llvm13ConstantRangeC1ERKNS_5APIntE\", \"llvm::ConstantRange::ConstantRange(llvm::APInt const&)\"},\n    {\"_ZN4llvm13ConstantRangeC2ERKNS_5APIntE\", \"llvm::ConstantRange::ConstantRange(llvm::APInt const&)\"},\n    {\"_ZN4llvm13ConstantRangeC1ERKNS_5APIntES3_\", \"llvm::ConstantRange::ConstantRange(llvm::APInt const&, llvm::APInt const&)\"},\n    {\"_ZN4llvm13ConstantRangeC2ERKNS_5APIntES3_\", \"llvm::ConstantRange::ConstantRange(llvm::APInt const&, llvm::APInt const&)\"},\n    {\"_ZN4llvm13ConstantRange14makeICmpRegionEjRKS0_\", \"llvm::ConstantRange::makeICmpRegion(unsigned int, llvm::ConstantRange const&)\"},\n    {\"_ZNK4llvm13ConstantRange10isEmptySetEv\", \"llvm::ConstantRange::isEmptySet() const\"},\n    {\"_ZNK4llvm13ConstantRange14getUnsignedMaxEv\", \"llvm::ConstantRange::getUnsignedMax() const\"},\n    {\"_ZNK4llvm13ConstantRange12getSignedMaxEv\", \"llvm::ConstantRange::getSignedMax() const\"},\n    {\"_ZNK4llvm13ConstantRange14getUnsignedMinEv\", \"llvm::ConstantRange::getUnsignedMin() const\"},\n    {\"_ZNK4llvm13ConstantRange12getSignedMinEv\", \"llvm::ConstantRange::getSignedMin() const\"},\n    {\"_ZNK4llvm13ConstantRange9isFullSetEv\", \"llvm::ConstantRange::isFullSet() const\"},\n    {\"_ZNK4llvm13ConstantRange12isWrappedSetEv\", \"llvm::ConstantRange::isWrappedSet() const\"},\n    {\"_ZNK4llvm13ConstantRange16isSignWrappedSetEv\", \"llvm::ConstantRange::isSignWrappedSet() const\"},\n    {\"_ZNK4llvm13ConstantRange8containsERKNS_5APIntE\", \"llvm::ConstantRange::contains(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm13ConstantRange10getSetSizeEv\", \"llvm::ConstantRange::getSetSize() const\"},\n    {\"_ZNK4llvm13ConstantRange8containsERKS0_\", \"llvm::ConstantRange::contains(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange8subtractERKNS_5APIntE\", \"llvm::ConstantRange::subtract(llvm::APInt const&) const\"},\n    {\"_ZNK4llvm13ConstantRange13intersectWithERKS0_\", \"llvm::ConstantRange::intersectWith(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange9unionWithERKS0_\", \"llvm::ConstantRange::unionWith(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange10zeroExtendEj\", \"llvm::ConstantRange::zeroExtend(unsigned int) const\"},\n    {\"_ZNK4llvm13ConstantRange10signExtendEj\", \"llvm::ConstantRange::signExtend(unsigned int) const\"},\n    {\"_ZNK4llvm13ConstantRange8truncateEj\", \"llvm::ConstantRange::truncate(unsigned int) const\"},\n    {\"_ZNK4llvm13ConstantRange11zextOrTruncEj\", \"llvm::ConstantRange::zextOrTrunc(unsigned int) const\"},\n    {\"_ZNK4llvm13ConstantRange11sextOrTruncEj\", \"llvm::ConstantRange::sextOrTrunc(unsigned int) const\"},\n    {\"_ZNK4llvm13ConstantRange3addERKS0_\", \"llvm::ConstantRange::add(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange3subERKS0_\", \"llvm::ConstantRange::sub(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange8multiplyERKS0_\", \"llvm::ConstantRange::multiply(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange4smaxERKS0_\", \"llvm::ConstantRange::smax(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange4umaxERKS0_\", \"llvm::ConstantRange::umax(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange4udivERKS0_\", \"llvm::ConstantRange::udiv(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange9binaryAndERKS0_\", \"llvm::ConstantRange::binaryAnd(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange8binaryOrERKS0_\", \"llvm::ConstantRange::binaryOr(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange3shlERKS0_\", \"llvm::ConstantRange::shl(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange4lshrERKS0_\", \"llvm::ConstantRange::lshr(llvm::ConstantRange const&) const\"},\n    {\"_ZNK4llvm13ConstantRange7inverseEv\", \"llvm::ConstantRange::inverse() const\"},\n    {\"_ZNK4llvm13ConstantRange5printERNS_11raw_ostreamE\", \"llvm::ConstantRange::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm13ConstantRange4dumpEv\", \"llvm::ConstantRange::dump() const\"},\n    {\"_ZN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEED1Ev\", \"llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>::~ThreadLocal()\"},\n    {\"_ZN4llvm20CrashRecoveryContextD1Ev\", \"llvm::CrashRecoveryContext::~CrashRecoveryContext()\"},\n    {\"_ZN4llvm20CrashRecoveryContextD2Ev\", \"llvm::CrashRecoveryContext::~CrashRecoveryContext()\"},\n    {\"_ZN4llvm20CrashRecoveryContext10GetCurrentEv\", \"llvm::CrashRecoveryContext::GetCurrent()\"},\n    {\"_ZN4llvm20CrashRecoveryContext6EnableEv\", \"llvm::CrashRecoveryContext::Enable()\"},\n    {\"_Z26CrashRecoverySignalHandleri\", \"CrashRecoverySignalHandler(int)\"},\n    {\"_ZN4llvm20CrashRecoveryContext7DisableEv\", \"llvm::CrashRecoveryContext::Disable()\"},\n    {\"_ZN4llvm20CrashRecoveryContext9RunSafelyEPFvPvES1_\", \"llvm::CrashRecoveryContext::RunSafely(void (*)(void*), void*)\"},\n    {\"_ZN4llvm20CrashRecoveryContext11HandleCrashEv\", \"llvm::CrashRecoveryContext::HandleCrash()\"},\n    {\"_ZNK4llvm20CrashRecoveryContext12getBacktraceEv\", \"llvm::CrashRecoveryContext::getBacktrace() const\"},\n    {\"_ZN4llvm20CrashRecoveryContext17RunSafelyOnThreadEPFvPvES1_j\", \"llvm::CrashRecoveryContext::RunSafelyOnThread(void (*)(void*), void*, unsigned int)\"},\n    {\"_Z26RunSafelyOnThread_DispatchPv\", \"RunSafelyOnThread_Dispatch(void*)\"},\n    {\"_ZN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEED0Ev\", \"llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>::~ThreadLocal()\"},\n    {\"_ZN4llvm3sys10SmartMutexILb0EED1Ev\", \"llvm::sys::SmartMutex<false>::~SmartMutex()\"},\n    {\"_ZN4llvm4dbgsEv\", \"llvm::dbgs()\"},\n    {\"_ZN4llvm5dwarf9TagStringEj\", \"llvm::dwarf::TagString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf14ChildrenStringEj\", \"llvm::dwarf::ChildrenString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf15AttributeStringEj\", \"llvm::dwarf::AttributeString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf18FormEncodingStringEj\", \"llvm::dwarf::FormEncodingString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf23OperationEncodingStringEj\", \"llvm::dwarf::OperationEncodingString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf23AttributeEncodingStringEj\", \"llvm::dwarf::AttributeEncodingString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf17DecimalSignStringEj\", \"llvm::dwarf::DecimalSignString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf15EndianityStringEj\", \"llvm::dwarf::EndianityString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf19AccessibilityStringEj\", \"llvm::dwarf::AccessibilityString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16VisibilityStringEj\", \"llvm::dwarf::VisibilityString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16VirtualityStringEj\", \"llvm::dwarf::VirtualityString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf14LanguageStringEj\", \"llvm::dwarf::LanguageString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf10CaseStringEj\", \"llvm::dwarf::CaseString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16ConventionStringEj\", \"llvm::dwarf::ConventionString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16InlineCodeStringEj\", \"llvm::dwarf::InlineCodeString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16ArrayOrderStringEj\", \"llvm::dwarf::ArrayOrderString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf18DiscriminantStringEj\", \"llvm::dwarf::DiscriminantString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16LNStandardStringEj\", \"llvm::dwarf::LNStandardString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf16LNExtendedStringEj\", \"llvm::dwarf::LNExtendedString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf13MacinfoStringEj\", \"llvm::dwarf::MacinfoString(unsigned int)\"},\n    {\"_ZN4llvm5dwarf15CallFrameStringEj\", \"llvm::dwarf::CallFrameString(unsigned int)\"},\n    {\"_ZN12_GLOBAL__N_122ExplicitSymbolsDeleterD1Ev\", \"(anonymous namespace)::ExplicitSymbolsDeleter::~ExplicitSymbolsDeleter()\"},\n    {\"_ZN4llvm3sys14DynamicLibrary9AddSymbolEPKcPv\", \"llvm::sys::DynamicLibrary::AddSymbol(char const*, void*)\"},\n    {\"_ZN4llvm3sys14DynamicLibrary22LoadLibraryPermanentlyEPKcPSs\", \"llvm::sys::DynamicLibrary::LoadLibraryPermanently(char const*, std::string*)\"},\n    {\"_ZN4llvm3sys14DynamicLibrary24SearchForAddressOfSymbolEPKc\", \"llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(char const*)\"},\n    {\"_ZNSt3mapISsPvSt4lessISsESaISt4pairIKSsS0_EEEixERS4_\", \"std::map<std::string, void*, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::operator[](std::string const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPvESt10_Select1stIS3_ESt4lessISsESaIS3_EE4findERS1_\", \"std::_Rb_tree<std::string, std::pair<std::string const, void*>, std::_Select1st<std::pair<std::string const, void*> >, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::find(std::string const&)\"},\n    {\"_ZNSt6vectorIPvSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0_\", \"std::vector<void*, std::allocator<void*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<void**, std::vector<void*, std::allocator<void*> > >, void* const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPvESt10_Select1stIS3_ESt4lessISsESaIS3_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS3_ERKS3_\", \"std::_Rb_tree<std::string, std::pair<std::string const, void*>, std::_Select1st<std::pair<std::string const, void*> >, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, void*> >, std::pair<std::string const, void*> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPvESt10_Select1stIS3_ESt4lessISsESaIS3_EE9_M_insertEPSt18_Rb_tree_node_baseSB_RKS3_\", \"std::_Rb_tree<std::string, std::pair<std::string const, void*>, std::_Select1st<std::pair<std::string const, void*> >, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, void*> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPvESt10_Select1stIS3_ESt4lessISsESaIS3_EE16_M_insert_uniqueERKS3_\", \"std::_Rb_tree<std::string, std::pair<std::string const, void*>, std::_Select1st<std::pair<std::string const, void*> >, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::_M_insert_unique(std::pair<std::string const, void*> const&)\"},\n    {\"_ZNSt8_Rb_treeISsSt4pairIKSsPvESt10_Select1stIS3_ESt4lessISsESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E\", \"std::_Rb_tree<std::string, std::pair<std::string const, void*>, std::_Select1st<std::pair<std::string const, void*> >, std::less<std::string>, std::allocator<std::pair<std::string const, void*> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, void*> >*)\"},\n    {\"_ZN4llvm3sys8StrErrorEv\", \"llvm::sys::StrError()\"},\n    {\"_ZN4llvm3sys8StrErrorEi\", \"llvm::sys::StrError(int)\"},\n    {\"_ZN4llvm27install_fatal_error_handlerEPFvPvRKSsES0_\", \"llvm::install_fatal_error_handler(void (*)(void*, std::string const&), void*)\"},\n    {\"_ZN4llvm26remove_fatal_error_handlerEv\", \"llvm::remove_fatal_error_handler()\"},\n    {\"_ZN4llvm18report_fatal_errorEPKc\", \"llvm::report_fatal_error(char const*)\"},\n    {\"_ZN4llvm18report_fatal_errorERKNS_5TwineE\", \"llvm::report_fatal_error(llvm::Twine const&)\"},\n    {\"_ZN4llvm18report_fatal_errorERKSs\", \"llvm::report_fatal_error(std::string const&)\"},\n    {\"_ZN4llvm18report_fatal_errorENS_9StringRefE\", \"llvm::report_fatal_error(llvm::StringRef)\"},\n    {\"_ZN4llvm25llvm_unreachable_internalEPKcS1_j\", \"llvm::llvm_unreachable_internal(char const*, char const*, unsigned int)\"},\n    {\"_ZNK4llvm19FoldingSetNodeIDRef11ComputeHashEv\", \"llvm::FoldingSetNodeIDRef::ComputeHash() const\"},\n    {\"_ZNK4llvm19FoldingSetNodeIDRefeqES0_\", \"llvm::FoldingSetNodeIDRef::operator==(llvm::FoldingSetNodeIDRef) const\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddPointerEPKv\", \"llvm::FoldingSetNodeID::AddPointer(void const*)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEi\", \"llvm::FoldingSetNodeID::AddInteger(int)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEj\", \"llvm::FoldingSetNodeID::AddInteger(unsigned int)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEl\", \"llvm::FoldingSetNodeID::AddInteger(long)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEm\", \"llvm::FoldingSetNodeID::AddInteger(unsigned long)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEy\", \"llvm::FoldingSetNodeID::AddInteger(unsigned long long)\"},\n    {\"_ZN4llvm16FoldingSetNodeID10AddIntegerEx\", \"llvm::FoldingSetNodeID::AddInteger(long long)\"},\n    {\"_ZN4llvm16FoldingSetNodeID9AddStringENS_9StringRefE\", \"llvm::FoldingSetNodeID::AddString(llvm::StringRef)\"},\n    {\"_ZNK4llvm16FoldingSetNodeID11ComputeHashEv\", \"llvm::FoldingSetNodeID::ComputeHash() const\"},\n    {\"_ZNK4llvm16FoldingSetNodeIDeqERKS0_\", \"llvm::FoldingSetNodeID::operator==(llvm::FoldingSetNodeID const&) const\"},\n    {\"_ZNK4llvm16FoldingSetNodeIDeqENS_19FoldingSetNodeIDRefE\", \"llvm::FoldingSetNodeID::operator==(llvm::FoldingSetNodeIDRef) const\"},\n    {\"_ZNK4llvm16FoldingSetNodeID6InternERNS_16BumpPtrAllocatorE\", \"llvm::FoldingSetNodeID::Intern(llvm::BumpPtrAllocator&) const\"},\n    {\"_ZN4llvm14FoldingSetImplC1Ej\", \"llvm::FoldingSetImpl::FoldingSetImpl(unsigned int)\"},\n    {\"_ZN4llvm14FoldingSetImplC2Ej\", \"llvm::FoldingSetImpl::FoldingSetImpl(unsigned int)\"},\n    {\"_ZN4llvm14FoldingSetImplD0Ev\", \"llvm::FoldingSetImpl::~FoldingSetImpl()\"},\n    {\"_ZN4llvm14FoldingSetImplD1Ev\", \"llvm::FoldingSetImpl::~FoldingSetImpl()\"},\n    {\"_ZN4llvm14FoldingSetImplD2Ev\", \"llvm::FoldingSetImpl::~FoldingSetImpl()\"},\n    {\"_ZN4llvm14FoldingSetImpl5clearEv\", \"llvm::FoldingSetImpl::clear()\"},\n    {\"_ZN4llvm14FoldingSetImpl13GrowHashTableEv\", \"llvm::FoldingSetImpl::GrowHashTable()\"},\n    {\"_ZN4llvm14FoldingSetImpl10InsertNodeEPNS0_4NodeEPv\", \"llvm::FoldingSetImpl::InsertNode(llvm::FoldingSetImpl::Node*, void*)\"},\n    {\"_ZN4llvm14FoldingSetImpl19FindNodeOrInsertPosERKNS_16FoldingSetNodeIDERPv\", \"llvm::FoldingSetImpl::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&)\"},\n    {\"_ZN4llvm14FoldingSetImpl10RemoveNodeEPNS0_4NodeE\", \"llvm::FoldingSetImpl::RemoveNode(llvm::FoldingSetImpl::Node*)\"},\n    {\"_ZN4llvm14FoldingSetImpl15GetOrInsertNodeEPNS0_4NodeE\", \"llvm::FoldingSetImpl::GetOrInsertNode(llvm::FoldingSetImpl::Node*)\"},\n    {\"_ZN4llvm22FoldingSetIteratorImplC1EPPv\", \"llvm::FoldingSetIteratorImpl::FoldingSetIteratorImpl(void**)\"},\n    {\"_ZN4llvm22FoldingSetIteratorImplC2EPPv\", \"llvm::FoldingSetIteratorImpl::FoldingSetIteratorImpl(void**)\"},\n    {\"_ZN4llvm22FoldingSetIteratorImpl7advanceEv\", \"llvm::FoldingSetIteratorImpl::advance()\"},\n    {\"_ZN4llvm28FoldingSetBucketIteratorImplC1EPPv\", \"llvm::FoldingSetBucketIteratorImpl::FoldingSetBucketIteratorImpl(void**)\"},\n    {\"_ZN4llvm28FoldingSetBucketIteratorImplC2EPPv\", \"llvm::FoldingSetBucketIteratorImpl::FoldingSetBucketIteratorImpl(void**)\"},\n    {\"_ZN4llvm21formatted_raw_ostream13ComputeColumnEPKcm\", \"llvm::formatted_raw_ostream::ComputeColumn(char const*, unsigned long)\"},\n    {\"_ZN4llvm21formatted_raw_ostream11PadToColumnEj\", \"llvm::formatted_raw_ostream::PadToColumn(unsigned int)\"},\n    {\"_ZN4llvm21formatted_raw_ostream10write_implEPKcm\", \"llvm::formatted_raw_ostream::write_impl(char const*, unsigned long)\"},\n    {\"_ZN4llvm5foutsEv\", \"llvm::fouts()\"},\n    {\"_ZN4llvm5ferrsEv\", \"llvm::ferrs()\"},\n    {\"_ZN4llvm5fdbgsEv\", \"llvm::fdbgs()\"},\n    {\"_ZN4llvm3DOT12EscapeStringERKSs\", \"llvm::DOT::EscapeString(std::string const&)\"},\n    {\"_ZN4llvm12DisplayGraphERKNS_3sys4PathEbNS_12GraphProgram4NameE\", \"llvm::DisplayGraph(llvm::sys::Path const&, bool, llvm::GraphProgram::Name)\"},\n    {\"_ZN4llvm3sys13getHostTripleEv\", \"llvm::sys::getHostTriple()\"},\n    {\"_ZN4llvm3sys14getHostCPUNameEv\", \"llvm::sys::getHostCPUName()\"},\n    {\"_ZN4llvm3sys18getHostCPUFeaturesERNS_9StringMapIbNS_15MallocAllocatorEEE\", \"llvm::sys::getHostCPUFeatures(llvm::StringMap<bool, llvm::MallocAllocator>&)\"},\n    {\"_ZN4llvm12IntEqClasses4growEj\", \"llvm::IntEqClasses::grow(unsigned int)\"},\n    {\"_ZN4llvm12IntEqClasses4joinEjj\", \"llvm::IntEqClasses::join(unsigned int, unsigned int)\"},\n    {\"_ZNK4llvm12IntEqClasses10findLeaderEj\", \"llvm::IntEqClasses::findLeader(unsigned int) const\"},\n    {\"_ZN4llvm12IntEqClasses8compressEv\", \"llvm::IntEqClasses::compress()\"},\n    {\"_ZN4llvm12IntEqClasses10uncompressEv\", \"llvm::IntEqClasses::uncompress()\"},\n    {\"_ZN4llvm15IntervalMapImpl4Path11replaceRootEPvjSt4pairIjjE\", \"llvm::IntervalMapImpl::Path::replaceRoot(void*, unsigned int, std::pair<unsigned int, unsigned int>)\"},\n    {\"_ZNK4llvm15IntervalMapImpl4Path14getLeftSiblingEj\", \"llvm::IntervalMapImpl::Path::getLeftSibling(unsigned int) const\"},\n    {\"_ZN4llvm15IntervalMapImpl4Path8moveLeftEj\", \"llvm::IntervalMapImpl::Path::moveLeft(unsigned int)\"},\n    {\"_ZNK4llvm15IntervalMapImpl4Path15getRightSiblingEj\", \"llvm::IntervalMapImpl::Path::getRightSibling(unsigned int) const\"},\n    {\"_ZN4llvm15IntervalMapImpl4Path9moveRightEj\", \"llvm::IntervalMapImpl::Path::moveRight(unsigned int)\"},\n    {\"_ZN4llvm15IntervalMapImpl10distributeEjjjPKjPjjb\", \"llvm::IntervalMapImpl::distribute(unsigned int, unsigned int, unsigned int, unsigned int const*, unsigned int*, unsigned int, bool)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_15IntervalMapImpl4Path5EntryEE6insertEPS3_RKS3_\", \"llvm::SmallVectorImpl<llvm::IntervalMapImpl::Path::Entry>::insert(llvm::IntervalMapImpl::Path::Entry*, llvm::IntervalMapImpl::Path::Entry const&)\"},\n    {\"_ZN4llvm15SmallVectorImplINS_15IntervalMapImpl4Path5EntryEE6resizeEjRKS3_\", \"llvm::SmallVectorImpl<llvm::IntervalMapImpl::Path::Entry>::resize(unsigned int, llvm::IntervalMapImpl::Path::Entry const&)\"},\n    {\"_ZNK4llvm17ManagedStaticBase7destroyEv\", \"llvm::ManagedStaticBase::destroy() const\"},\n    {\"_ZN4llvm13llvm_shutdownEv\", \"llvm::llvm_shutdown()\"},\n    {\"_ZN4llvm3sys6Memory11AllocateRWXEmPKNS0_11MemoryBlockEPSs\", \"llvm::sys::Memory::AllocateRWX(unsigned long, llvm::sys::MemoryBlock const*, std::string*)\"},\n    {\"_Z10MakeErrMsgPSsRKSsi\", \"MakeErrMsg(std::string*, std::string const&, int)\"},\n    {\"_ZN4llvm3sys6Memory10ReleaseRWXERNS0_11MemoryBlockEPSs\", \"llvm::sys::Memory::ReleaseRWX(llvm::sys::MemoryBlock&, std::string*)\"},\n    {\"_ZN4llvm3sys6Memory11setWritableERNS0_11MemoryBlockEPSs\", \"llvm::sys::Memory::setWritable(llvm::sys::MemoryBlock&, std::string*)\"},\n    {\"_ZN4llvm3sys6Memory13setExecutableERNS0_11MemoryBlockEPSs\", \"llvm::sys::Memory::setExecutable(llvm::sys::MemoryBlock&, std::string*)\"},\n    {\"_ZN4llvm3sys6Memory16setRangeWritableEPKvm\", \"llvm::sys::Memory::setRangeWritable(void const*, unsigned long)\"},\n    {\"_ZN4llvm3sys6Memory18setRangeExecutableEPKvm\", \"llvm::sys::Memory::setRangeExecutable(void const*, unsigned long)\"},\n    {\"_ZN4llvm3sys6Memory26InvalidateInstructionCacheEPKvm\", \"llvm::sys::Memory::InvalidateInstructionCache(void const*, unsigned long)\"},\n    {\"_ZN4llvm12MemoryBufferD0Ev\", \"llvm::MemoryBuffer::~MemoryBuffer()\"},\n    {\"_ZN4llvm12MemoryBufferD1Ev\", \"llvm::MemoryBuffer::~MemoryBuffer()\"},\n    {\"_ZN4llvm12MemoryBufferD2Ev\", \"llvm::MemoryBuffer::~MemoryBuffer()\"},\n    {\"_ZN4llvm12MemoryBuffer4initEPKcS2_\", \"llvm::MemoryBuffer::init(char const*, char const*)\"},\n    {\"_ZN4llvm12MemoryBuffer12getMemBufferENS_9StringRefES1_\", \"llvm::MemoryBuffer::getMemBuffer(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm12MemoryBuffer16getMemBufferCopyENS_9StringRefES1_\", \"llvm::MemoryBuffer::getMemBufferCopy(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm12MemoryBuffer21getNewUninitMemBufferEmNS_9StringRefE\", \"llvm::MemoryBuffer::getNewUninitMemBuffer(unsigned long, llvm::StringRef)\"},\n    {\"_ZN4llvm12MemoryBuffer15getNewMemBufferEmNS_9StringRefE\", \"llvm::MemoryBuffer::getNewMemBuffer(unsigned long, llvm::StringRef)\"},\n    {\"_ZN4llvm12MemoryBuffer14getFileOrSTDINENS_9StringRefERNS_9OwningPtrIS0_EEx\", \"llvm::MemoryBuffer::getFileOrSTDIN(llvm::StringRef, llvm::OwningPtr<llvm::MemoryBuffer>&, long long)\"},\n    {\"_ZN4llvm12MemoryBuffer8getSTDINERNS_9OwningPtrIS0_EE\", \"llvm::MemoryBuffer::getSTDIN(llvm::OwningPtr<llvm::MemoryBuffer>&)\"},\n    {\"_ZN4llvm12MemoryBuffer7getFileENS_9StringRefERNS_9OwningPtrIS0_EEx\", \"llvm::MemoryBuffer::getFile(llvm::StringRef, llvm::OwningPtr<llvm::MemoryBuffer>&, long long)\"},\n    {\"_ZN4llvm12MemoryBuffer14getFileOrSTDINEPKcRNS_9OwningPtrIS0_EEx\", \"llvm::MemoryBuffer::getFileOrSTDIN(char const*, llvm::OwningPtr<llvm::MemoryBuffer>&, long long)\"},\n    {\"_ZN4llvm12MemoryBuffer7getFileEPKcRNS_9OwningPtrIS0_EEx\", \"llvm::MemoryBuffer::getFile(char const*, llvm::OwningPtr<llvm::MemoryBuffer>&, long long)\"},\n    {\"_ZN4llvm12MemoryBuffer11getOpenFileEiPKcRNS_9OwningPtrIS0_EEx\", \"llvm::MemoryBuffer::getOpenFile(int, char const*, llvm::OwningPtr<llvm::MemoryBuffer>&, long long)\"},\n    {\"_ZN12_GLOBAL__N_120MemoryBufferMMapFileD1Ev\", \"(anonymous namespace)::MemoryBufferMMapFile::~MemoryBufferMMapFile()\"},\n    {\"_ZN12_GLOBAL__N_120MemoryBufferMMapFileD0Ev\", \"(anonymous namespace)::MemoryBufferMMapFile::~MemoryBufferMMapFile()\"},\n    {\"_ZNK12_GLOBAL__N_115MemoryBufferMem19getBufferIdentifierEv\", \"(anonymous namespace)::MemoryBufferMem::getBufferIdentifier() const\"},\n    {\"_ZN12_GLOBAL__N_115MemoryBufferMemD1Ev\", \"(anonymous namespace)::MemoryBufferMem::~MemoryBufferMem()\"},\n    {\"_ZN12_GLOBAL__N_115MemoryBufferMemD0Ev\", \"(anonymous namespace)::MemoryBufferMem::~MemoryBufferMem()\"},\n    {\"_ZNK4llvm12MemoryBuffer19getBufferIdentifierEv\", \"llvm::MemoryBuffer::getBufferIdentifier() const\"},\n    {\"_ZN4llvm3sys9MutexImplC1Eb\", \"llvm::sys::MutexImpl::MutexImpl(bool)\"},\n    {\"_ZN4llvm3sys9MutexImplD1Ev\", \"llvm::sys::MutexImpl::~MutexImpl()\"},\n    {\"_ZN4llvm3sys9MutexImplD2Ev\", \"llvm::sys::MutexImpl::~MutexImpl()\"},\n    {\"_ZN4llvm3sys9MutexImpl10tryacquireEv\", \"llvm::sys::MutexImpl::tryacquire()\"},\n    {\"_ZNK4llvm3sys4PatheqERKS1_\", \"llvm::sys::Path::operator==(llvm::sys::Path const&) const\"},\n    {\"_ZNK4llvm3sys4PathltERKS1_\", \"llvm::sys::Path::operator<(llvm::sys::Path const&) const\"},\n    {\"_ZN4llvm3sys4Path16GetLLVMConfigDirEv\", \"llvm::sys::Path::GetLLVMConfigDir()\"},\n    {\"_ZN4llvm3sys4Path3setENS_9StringRefE\", \"llvm::sys::Path::set(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4Path23GetLLVMDefaultConfigDirEv\", \"llvm::sys::Path::GetLLVMDefaultConfigDir()\"},\n    {\"_ZN4llvm3sys16IdentifyFileTypeEPKcj\", \"llvm::sys::IdentifyFileType(char const*, unsigned int)\"},\n    {\"_ZNK4llvm3sys4Path9isArchiveEv\", \"llvm::sys::Path::isArchive() const\"},\n    {\"_ZNK4llvm3sys4Path16isDynamicLibraryEv\", \"llvm::sys::Path::isDynamicLibrary() const\"},\n    {\"_ZNK4llvm3sys4Path12isObjectFileEv\", \"llvm::sys::Path::isObjectFile() const\"},\n    {\"_ZN4llvm3sys4Path11FindLibraryERSs\", \"llvm::sys::Path::FindLibrary(std::string&)\"},\n    {\"_ZN4llvm3sys4Path21GetSystemLibraryPathsERSt6vectorIS1_SaIS1_EE\", \"llvm::sys::Path::GetSystemLibraryPaths(std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> >&)\"},\n    {\"_ZN4llvm3sys4Path15appendComponentENS_9StringRefE\", \"llvm::sys::Path::appendComponent(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4Path11eraseSuffixEv\", \"llvm::sys::Path::eraseSuffix()\"},\n    {\"_ZN4llvm3sys4Path12appendSuffixENS_9StringRefE\", \"llvm::sys::Path::appendSuffix(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4Path12GetDLLSuffixEv\", \"llvm::sys::Path::GetDLLSuffix()\"},\n    {\"_ZNK4llvm3sys4Path13isBitcodeFileEv\", \"llvm::sys::Path::isBitcodeFile() const\"},\n    {\"_ZNK4llvm3sys4Path14hasMagicNumberENS_9StringRefE\", \"llvm::sys::Path::hasMagicNumber(llvm::StringRef) const\"},\n    {\"_ZNK4llvm3sys4Path14getMagicNumberERSsj\", \"llvm::sys::Path::getMagicNumber(std::string&, unsigned int) const\"},\n    {\"_ZN4llvm3sys4Path12GetEXESuffixEv\", \"llvm::sys::Path::GetEXESuffix()\"},\n    {\"_ZN4llvm3sys4PathC1ENS_9StringRefE\", \"llvm::sys::Path::Path(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4PathC2ENS_9StringRefE\", \"llvm::sys::Path::Path(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4PathC1EPKcj\", \"llvm::sys::Path::Path(char const*, unsigned int)\"},\n    {\"_ZN4llvm3sys4PathC2EPKcj\", \"llvm::sys::Path::Path(char const*, unsigned int)\"},\n    {\"_ZN4llvm3sys4PathaSENS_9StringRefE\", \"llvm::sys::Path::operator=(llvm::StringRef)\"},\n    {\"_ZNK4llvm3sys4Path7isValidEv\", \"llvm::sys::Path::isValid() const\"},\n    {\"_ZN4llvm3sys4Path10isAbsoluteEPKcj\", \"llvm::sys::Path::isAbsolute(char const*, unsigned int)\"},\n    {\"_ZNK4llvm3sys4Path10isAbsoluteEv\", \"llvm::sys::Path::isAbsolute() const\"},\n    {\"_ZN4llvm3sys4Path16GetRootDirectoryEv\", \"llvm::sys::Path::GetRootDirectory()\"},\n    {\"_ZN4llvm3sys4Path21GetTemporaryDirectoryEPSs\", \"llvm::sys::Path::GetTemporaryDirectory(std::string*)\"},\n    {\"_Z10MakeErrMsgPSsRKSsi\", \"MakeErrMsg(std::string*, std::string const&, int)\"},\n    {\"_Z11getPathListPKcRSt6vectorIN4llvm3sys4PathESaIS4_EE\", \"getPathList(char const*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> >&)\"},\n    {\"_ZN4llvm3sys4Path22GetBitcodeLibraryPathsERSt6vectorIS1_SaIS1_EE\", \"llvm::sys::Path::GetBitcodeLibraryPaths(std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> >&)\"},\n    {\"_ZNK4llvm3sys4Path7canReadEv\", \"llvm::sys::Path::canRead() const\"},\n    {\"_ZN4llvm3sys4Path20GetUserHomeDirectoryEv\", \"llvm::sys::Path::GetUserHomeDirectory()\"},\n    {\"_ZN4llvm3sys4Path19GetCurrentDirectoryEv\", \"llvm::sys::Path::GetCurrentDirectory()\"},\n    {\"_ZN4llvm3sys4Path17GetMainExecutableEPKcPv\", \"llvm::sys::Path::GetMainExecutable(char const*, void*)\"},\n    {\"_ZNK4llvm3sys4Path10getDirnameEv\", \"llvm::sys::Path::getDirname() const\"},\n    {\"_ZNK4llvm3sys4Path11getBasenameEv\", \"llvm::sys::Path::getBasename() const\"},\n    {\"_ZNK4llvm3sys4Path9getSuffixEv\", \"llvm::sys::Path::getSuffix() const\"},\n    {\"_ZNK4llvm3sys4Path6existsEv\", \"llvm::sys::Path::exists() const\"},\n    {\"_ZNK4llvm3sys4Path11isDirectoryEv\", \"llvm::sys::Path::isDirectory() const\"},\n    {\"_ZNK4llvm3sys4Path9isSymLinkEv\", \"llvm::sys::Path::isSymLink() const\"},\n    {\"_ZNK4llvm3sys4Path8canWriteEv\", \"llvm::sys::Path::canWrite() const\"},\n    {\"_ZNK4llvm3sys4Path13isRegularFileEv\", \"llvm::sys::Path::isRegularFile() const\"},\n    {\"_ZNK4llvm3sys4Path10canExecuteEv\", \"llvm::sys::Path::canExecute() const\"},\n    {\"_ZNK4llvm3sys4Path7getLastEv\", \"llvm::sys::Path::getLast() const\"},\n    {\"_ZNK4llvm3sys14PathWithStatus13getFileStatusEbPSs\", \"llvm::sys::PathWithStatus::getFileStatus(bool, std::string*) const\"},\n    {\"_ZN4llvm3sys4Path18makeReadableOnDiskEPSs\", \"llvm::sys::Path::makeReadableOnDisk(std::string*)\"},\n    {\"_ZN4llvm3sys4Path19makeWriteableOnDiskEPSs\", \"llvm::sys::Path::makeWriteableOnDisk(std::string*)\"},\n    {\"_ZN4llvm3sys4Path20makeExecutableOnDiskEPSs\", \"llvm::sys::Path::makeExecutableOnDisk(std::string*)\"},\n    {\"_ZNK4llvm3sys4Path20getDirectoryContentsERSt3setIS1_St4lessIS1_ESaIS1_EEPSs\", \"llvm::sys::Path::getDirectoryContents(std::set<llvm::sys::Path, std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path> >&, std::string*) const\"},\n    {\"_ZN4llvm3sys4Path14eraseComponentEv\", \"llvm::sys::Path::eraseComponent()\"},\n    {\"_ZN4llvm3sys4Path21createDirectoryOnDiskEbPSs\", \"llvm::sys::Path::createDirectoryOnDisk(bool, std::string*)\"},\n    {\"_ZN4llvm21createDirectoryHelperEPcS0_b\", \"llvm::createDirectoryHelper(char*, char*, bool)\"},\n    {\"_ZN4llvm3sys4Path16createFileOnDiskEPSs\", \"llvm::sys::Path::createFileOnDisk(std::string*)\"},\n    {\"_ZN4llvm3sys4Path25createTemporaryFileOnDiskEbPSs\", \"llvm::sys::Path::createTemporaryFileOnDisk(bool, std::string*)\"},\n    {\"_ZN4llvm3sys4Path10makeUniqueEbPSs\", \"llvm::sys::Path::makeUnique(bool, std::string*)\"},\n    {\"_ZNK4llvm3sys4Path13eraseFromDiskEbPSs\", \"llvm::sys::Path::eraseFromDisk(bool, std::string*) const\"},\n    {\"_ZN4llvm3sys4Path16renamePathOnDiskERKS1_PSs\", \"llvm::sys::Path::renamePathOnDisk(llvm::sys::Path const&, std::string*)\"},\n    {\"_ZNK4llvm3sys4Path19setStatusInfoOnDiskERKNS0_10FileStatusEPSs\", \"llvm::sys::Path::setStatusInfoOnDisk(llvm::sys::FileStatus const&, std::string*) const\"},\n    {\"_ZN4llvm3sys8CopyFileERKNS0_4PathES3_PSs\", \"llvm::sys::CopyFile(llvm::sys::Path const&, llvm::sys::Path const&, std::string*)\"},\n    {\"_ZN4llvm3sys4Path14MapInFilePagesEiy\", \"llvm::sys::Path::MapInFilePages(int, unsigned long long)\"},\n    {\"_ZN4llvm3sys4Path14UnMapFilePagesEPKcy\", \"llvm::sys::Path::UnMapFilePages(char const*, unsigned long long)\"},\n    {\"_ZNSt6vectorIcSaIcEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPcS1_EEmRKc\", \"std::vector<char, std::allocator<char> >::_M_fill_insert(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >, unsigned long, char const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueERKS2_\", \"std::_Rb_tree<llvm::sys::Path, llvm::sys::Path, std::_Identity<llvm::sys::Path>, std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path> >::_M_insert_unique(llvm::sys::Path const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_\", \"std::_Rb_tree<llvm::sys::Path, llvm::sys::Path, std::_Identity<llvm::sys::Path>, std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path> >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, llvm::sys::Path const&)\"},\n    {\"_ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E\", \"std::_Rb_tree<llvm::sys::Path, llvm::sys::Path, std::_Identity<llvm::sys::Path>, std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path> >::_M_erase(std::_Rb_tree_node<llvm::sys::Path>*)\"},\n    {\"_ZN4llvm3sys4path5beginENS_9StringRefE\", \"llvm::sys::path::begin(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path3endENS_9StringRefE\", \"llvm::sys::path::end(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path14const_iteratorppEv\", \"llvm::sys::path::const_iterator::operator++()\"},\n    {\"_ZN4llvm3sys4path14const_iteratormmEv\", \"llvm::sys::path::const_iterator::operator--()\"},\n    {\"_ZNK4llvm3sys4path14const_iteratoreqERKS2_\", \"llvm::sys::path::const_iterator::operator==(llvm::sys::path::const_iterator const&) const\"},\n    {\"_ZNK4llvm3sys4path14const_iteratorneERKS2_\", \"llvm::sys::path::const_iterator::operator!=(llvm::sys::path::const_iterator const&) const\"},\n    {\"_ZNK4llvm3sys4path14const_iteratormiERKS2_\", \"llvm::sys::path::const_iterator::operator-(llvm::sys::path::const_iterator const&) const\"},\n    {\"_ZN4llvm3sys4path9root_pathENS_9StringRefE\", \"llvm::sys::path::root_path(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path9root_nameENS_9StringRefE\", \"llvm::sys::path::root_name(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path14root_directoryENS_9StringRefE\", \"llvm::sys::path::root_directory(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path13relative_pathENS_9StringRefE\", \"llvm::sys::path::relative_path(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path6appendERNS_15SmallVectorImplIcEERKNS_5TwineES7_S7_S7_\", \"llvm::sys::path::append(llvm::SmallVectorImpl<char>&, llvm::Twine const&, llvm::Twine const&, llvm::Twine const&, llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path13has_root_nameERKNS_5TwineE\", \"llvm::sys::path::has_root_name(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path11parent_pathENS_9StringRefE\", \"llvm::sys::path::parent_path(llvm::StringRef)\"},\n    {\"_ZN12_GLOBAL__N_115parent_path_endEN4llvm9StringRefE\", \"(anonymous namespace)::parent_path_end(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path15remove_filenameERNS_15SmallVectorImplIcEE\", \"llvm::sys::path::remove_filename(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys4path17replace_extensionERNS_15SmallVectorImplIcEERKNS_5TwineE\", \"llvm::sys::path::replace_extension(llvm::SmallVectorImpl<char>&, llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path6nativeERKNS_5TwineERNS_15SmallVectorImplIcEE\", \"llvm::sys::path::native(llvm::Twine const&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys4path8filenameENS_9StringRefE\", \"llvm::sys::path::filename(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path4stemENS_9StringRefE\", \"llvm::sys::path::stem(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path9extensionENS_9StringRefE\", \"llvm::sys::path::extension(llvm::StringRef)\"},\n    {\"_ZN4llvm3sys4path18has_root_directoryERKNS_5TwineE\", \"llvm::sys::path::has_root_directory(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path13has_root_pathERKNS_5TwineE\", \"llvm::sys::path::has_root_path(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path17has_relative_pathERKNS_5TwineE\", \"llvm::sys::path::has_relative_path(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path12has_filenameERKNS_5TwineE\", \"llvm::sys::path::has_filename(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path15has_parent_pathERKNS_5TwineE\", \"llvm::sys::path::has_parent_path(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path8has_stemERKNS_5TwineE\", \"llvm::sys::path::has_stem(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path13has_extensionERKNS_5TwineE\", \"llvm::sys::path::has_extension(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path11is_absoluteERKNS_5TwineE\", \"llvm::sys::path::is_absolute(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys4path11is_relativeERKNS_5TwineE\", \"llvm::sys::path::is_relative(llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys2fs13make_absoluteERNS_15SmallVectorImplIcEE\", \"llvm::sys::fs::make_absolute(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys2fs12current_pathERNS_15SmallVectorImplIcEE\", \"llvm::sys::fs::current_path(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys2fs18create_directoriesERKNS_5TwineERb\", \"llvm::sys::fs::create_directories(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs6existsERKNS_5TwineERb\", \"llvm::sys::fs::exists(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs16create_directoryERKNS_5TwineERb\", \"llvm::sys::fs::create_directory(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs6existsENS1_11file_statusE\", \"llvm::sys::fs::exists(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs12status_knownENS1_11file_statusE\", \"llvm::sys::fs::status_known(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs12is_directoryENS1_11file_statusE\", \"llvm::sys::fs::is_directory(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs12is_directoryERKNS_5TwineERb\", \"llvm::sys::fs::is_directory(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs6statusERKNS_5TwineERNS1_11file_statusE\", \"llvm::sys::fs::status(llvm::Twine const&, llvm::sys::fs::file_status&)\"},\n    {\"_ZN4llvm3sys2fs15is_regular_fileENS1_11file_statusE\", \"llvm::sys::fs::is_regular_file(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs15is_regular_fileERKNS_5TwineERb\", \"llvm::sys::fs::is_regular_file(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs10is_symlinkENS1_11file_statusE\", \"llvm::sys::fs::is_symlink(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs10is_symlinkERKNS_5TwineERb\", \"llvm::sys::fs::is_symlink(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs8is_otherENS1_11file_statusE\", \"llvm::sys::fs::is_other(llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs15directory_entry16replace_filenameERKNS_5TwineENS1_11file_statusES6_\", \"llvm::sys::fs::directory_entry::replace_filename(llvm::Twine const&, llvm::sys::fs::file_status, llvm::sys::fs::file_status)\"},\n    {\"_ZN4llvm3sys2fs9has_magicERKNS_5TwineES4_Rb\", \"llvm::sys::fs::has_magic(llvm::Twine const&, llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs9get_magicERKNS_5TwineEjRNS_15SmallVectorImplIcEE\", \"llvm::sys::fs::get_magic(llvm::Twine const&, unsigned int, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys2fs14identify_magicERKNS_5TwineERNS0_12LLVMFileTypeE\", \"llvm::sys::fs::identify_magic(llvm::Twine const&, llvm::sys::LLVMFileType&)\"},\n    {\"_ZN4llvm3sys2fs10remove_allERKNS_5TwineERj\", \"llvm::sys::fs::remove_all(llvm::Twine const&, unsigned int&)\"},\n    {\"_ZN4llvm3sys2fs12_GLOBAL__N_112remove_all_rENS_9StringRefENS1_9file_typeERj\", \"llvm::sys::fs::(anonymous namespace)::remove_all_r(llvm::StringRef, llvm::sys::fs::file_type, unsigned int&)\"},\n    {\"_ZNK4llvm3sys2fs15directory_entry6statusERNS1_11file_statusE\", \"llvm::sys::fs::directory_entry::status(llvm::sys::fs::file_status&) const\"},\n    {\"_ZN4llvm3sys2fs9copy_fileERKNS_5TwineES4_NS1_11copy_optionE\", \"llvm::sys::fs::copy_file(llvm::Twine const&, llvm::Twine const&, llvm::sys::fs::copy_option)\"},\n    {\"_ZN4llvm3sys2fs16create_hard_linkERKNS_5TwineES4_\", \"llvm::sys::fs::create_hard_link(llvm::Twine const&, llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys2fs14create_symlinkERKNS_5TwineES4_\", \"llvm::sys::fs::create_symlink(llvm::Twine const&, llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys2fs6removeERKNS_5TwineERb\", \"llvm::sys::fs::remove(llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs6renameERKNS_5TwineES4_\", \"llvm::sys::fs::rename(llvm::Twine const&, llvm::Twine const&)\"},\n    {\"_ZN4llvm3sys2fs11resize_fileERKNS_5TwineEy\", \"llvm::sys::fs::resize_file(llvm::Twine const&, unsigned long long)\"},\n    {\"_ZN4llvm3sys2fs10equivalentERKNS_5TwineES4_Rb\", \"llvm::sys::fs::equivalent(llvm::Twine const&, llvm::Twine const&, bool&)\"},\n    {\"_ZN4llvm3sys2fs9file_sizeERKNS_5TwineERy\", \"llvm::sys::fs::file_size(llvm::Twine const&, unsigned long long&)\"},\n    {\"_ZN4llvm3sys2fs11unique_fileERKNS_5TwineERiRNS_15SmallVectorImplIcEE\", \"llvm::sys::fs::unique_file(llvm::Twine const&, int&, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm3sys2fs28directory_iterator_constructERNS1_18directory_iteratorENS_9StringRefE\", \"llvm::sys::fs::directory_iterator_construct(llvm::sys::fs::directory_iterator&, llvm::StringRef)\"},\n    {\"_ZN4llvm3sys2fs28directory_iterator_incrementERNS1_18directory_iteratorE\", \"llvm::sys::fs::directory_iterator_increment(llvm::sys::fs::directory_iterator&)\"},\n    {\"_ZN4llvm3sys2fs27directory_iterator_destructERNS1_18directory_iteratorE\", \"llvm::sys::fs::directory_iterator_destruct(llvm::sys::fs::directory_iterator&)\"},\n    {\"_ZN4llvm3sys4path9canonicalEPKcRNS_15SmallVectorImplIcEE\", \"llvm::sys::path::canonical(char const*, llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm15SmallVectorImplIcE4swapERS1_\", \"llvm::SmallVectorImpl<char>::swap(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm21PrettyStackTraceEntryC1Ev\", \"llvm::PrettyStackTraceEntry::PrettyStackTraceEntry()\"},\n    {\"_ZN4llvm21PrettyStackTraceEntryC2Ev\", \"llvm::PrettyStackTraceEntry::PrettyStackTraceEntry()\"},\n    {\"_ZN4llvm21PrettyStackTraceEntryD0Ev\", \"llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()\"},\n    {\"_ZN4llvm21PrettyStackTraceEntryD1Ev\", \"llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()\"},\n    {\"_ZN4llvm21PrettyStackTraceEntryD2Ev\", \"llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()\"},\n    {\"_ZNK4llvm22PrettyStackTraceString5printERNS_11raw_ostreamE\", \"llvm::PrettyStackTraceString::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm23PrettyStackTraceProgram5printERNS_11raw_ostreamE\", \"llvm::PrettyStackTraceProgram::print(llvm::raw_ostream&) const\"},\n    {\"_Z12CrashHandlerPv\", \"CrashHandler(void*)\"},\n    {\"_Z10PrintStackPKN4llvm21PrettyStackTraceEntryERNS_11raw_ostreamE\", \"PrintStack(llvm::PrettyStackTraceEntry const*, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm3sys11ThreadLocalIKNS_21PrettyStackTraceEntryEED1Ev\", \"llvm::sys::ThreadLocal<llvm::PrettyStackTraceEntry const>::~ThreadLocal()\"},\n    {\"_ZN4llvm3sys11ThreadLocalIKNS_21PrettyStackTraceEntryEED0Ev\", \"llvm::sys::ThreadLocal<llvm::PrettyStackTraceEntry const>::~ThreadLocal()\"},\n    {\"_ZN4llvm3sys7Process11GetPageSizeEv\", \"llvm::sys::Process::GetPageSize()\"},\n    {\"_ZN4llvm3sys7Process14GetMallocUsageEv\", \"llvm::sys::Process::GetMallocUsage()\"},\n    {\"_ZN4llvm3sys7Process19GetTotalMemoryUsageEv\", \"llvm::sys::Process::GetTotalMemoryUsage()\"},\n    {\"_ZN4llvm3sys7Process12GetTimeUsageERNS0_9TimeValueES3_S3_\", \"llvm::sys::Process::GetTimeUsage(llvm::sys::TimeValue&, llvm::sys::TimeValue&, llvm::sys::TimeValue&)\"},\n    {\"_ZN4llvm3sys7Process16GetCurrentUserIdEv\", \"llvm::sys::Process::GetCurrentUserId()\"},\n    {\"_ZN4llvm3sys7Process17GetCurrentGroupIdEv\", \"llvm::sys::Process::GetCurrentGroupId()\"},\n    {\"_ZN4llvm3sys7Process16PreventCoreFilesEv\", \"llvm::sys::Process::PreventCoreFiles()\"},\n    {\"_ZN4llvm3sys7Process21StandardInIsUserInputEv\", \"llvm::sys::Process::StandardInIsUserInput()\"},\n    {\"_ZN4llvm3sys7Process25FileDescriptorIsDisplayedEi\", \"llvm::sys::Process::FileDescriptorIsDisplayed(int)\"},\n    {\"_ZN4llvm3sys7Process22StandardOutIsDisplayedEv\", \"llvm::sys::Process::StandardOutIsDisplayed()\"},\n    {\"_ZN4llvm3sys7Process22StandardErrIsDisplayedEv\", \"llvm::sys::Process::StandardErrIsDisplayed()\"},\n    {\"_ZN4llvm3sys7Process18StandardOutColumnsEv\", \"llvm::sys::Process::StandardOutColumns()\"},\n    {\"_ZN4llvm3sys7Process18StandardErrColumnsEv\", \"llvm::sys::Process::StandardErrColumns()\"},\n    {\"_ZN4llvm3sys7Process20StandardOutHasColorsEv\", \"llvm::sys::Process::StandardOutHasColors()\"},\n    {\"_ZN4llvm3sys7Process20StandardErrHasColorsEv\", \"llvm::sys::Process::StandardErrHasColors()\"},\n    {\"_ZN4llvm3sys7Process15ColorNeedsFlushEv\", \"llvm::sys::Process::ColorNeedsFlush()\"},\n    {\"_ZN4llvm3sys7Process11OutputColorEcbb\", \"llvm::sys::Process::OutputColor(char, bool, bool)\"},\n    {\"_ZN4llvm3sys7Process10OutputBoldEb\", \"llvm::sys::Process::OutputBold(bool)\"},\n    {\"_ZN4llvm3sys7Process10ResetColorEv\", \"llvm::sys::Process::ResetColor()\"},\n    {\"_ZN4llvm3sys7Program14ExecuteAndWaitERKNS0_4PathEPPKcS7_PPS3_jjPSs\", \"llvm::sys::Program::ExecuteAndWait(llvm::sys::Path const&, char const**, char const**, llvm::sys::Path const**, unsigned int, unsigned int, std::string*)\"},\n    {\"_ZN4llvm3sys7ProgramC1Ev\", \"llvm::sys::Program::Program()\"},\n    {\"_ZN4llvm3sys7Program7ExecuteERKNS0_4PathEPPKcS7_PPS3_jPSs\", \"llvm::sys::Program::Execute(llvm::sys::Path const&, char const**, char const**, llvm::sys::Path const**, unsigned int, std::string*)\"},\n    {\"_ZN4llvm3sys7Program4WaitERKNS0_4PathEjPSs\", \"llvm::sys::Program::Wait(llvm::sys::Path const&, unsigned int, std::string*)\"},\n    {\"_ZN4llvm3sys7ProgramD1Ev\", \"llvm::sys::Program::~Program()\"},\n    {\"_ZN4llvm3sys7Program13ExecuteNoWaitERKNS0_4PathEPPKcS7_PPS3_jPSs\", \"llvm::sys::Program::ExecuteNoWait(llvm::sys::Path const&, char const**, char const**, llvm::sys::Path const**, unsigned int, std::string*)\"},\n    {\"_ZN4llvm3sys7ProgramC2Ev\", \"llvm::sys::Program::Program()\"},\n    {\"_ZN4llvm3sys7ProgramD2Ev\", \"llvm::sys::Program::~Program()\"},\n    {\"_ZNK4llvm3sys7Program6GetPidEv\", \"llvm::sys::Program::GetPid() const\"},\n    {\"_ZN4llvm3sys7Program17FindProgramByNameERKSs\", \"llvm::sys::Program::FindProgramByName(std::string const&)\"},\n    {\"_ZN4llvm13RedirectIO_PSEPKNS_3sys4PathEiPSsRPv\", \"llvm::RedirectIO_PS(llvm::sys::Path const*, int, std::string*, void*&)\"},\n    {\"_Z10MakeErrMsgPSsRKSsi\", \"MakeErrMsg(std::string*, std::string const&, int)\"},\n    {\"_ZN4llvm10RedirectIOEPKNS_3sys4PathEiPSs\", \"llvm::RedirectIO(llvm::sys::Path const*, int, std::string*)\"},\n    {\"_ZN4llvm14TimeOutHandlerEi\", \"llvm::TimeOutHandler(int)\"},\n    {\"_ZN4llvm3sys7Program4KillEPSs\", \"llvm::sys::Program::Kill(std::string*)\"},\n    {\"_ZN4llvm3sys7Program19ChangeStdinToBinaryEv\", \"llvm::sys::Program::ChangeStdinToBinary()\"},\n    {\"_ZN4llvm3sys7Program20ChangeStdoutToBinaryEv\", \"llvm::sys::Program::ChangeStdoutToBinary()\"},\n    {\"_ZN4llvm3sys7Program20ChangeStderrToBinaryEv\", \"llvm::sys::Program::ChangeStderrToBinary()\"},\n    {\"_ZN4llvm3sys11RWMutexImplC1Ev\", \"llvm::sys::RWMutexImpl::RWMutexImpl()\"},\n    {\"_ZN4llvm3sys11RWMutexImplC2Ev\", \"llvm::sys::RWMutexImpl::RWMutexImpl()\"},\n    {\"_ZN4llvm3sys11RWMutexImplD1Ev\", \"llvm::sys::RWMutexImpl::~RWMutexImpl()\"},\n    {\"_ZN4llvm3sys11RWMutexImplD2Ev\", \"llvm::sys::RWMutexImpl::~RWMutexImpl()\"},\n    {\"_ZN4llvm3sys11RWMutexImpl14reader_acquireEv\", \"llvm::sys::RWMutexImpl::reader_acquire()\"},\n    {\"_ZN4llvm3sys11RWMutexImpl14reader_releaseEv\", \"llvm::sys::RWMutexImpl::reader_release()\"},\n    {\"_ZN4llvm3sys11RWMutexImpl14writer_acquireEv\", \"llvm::sys::RWMutexImpl::writer_acquire()\"},\n    {\"_ZN4llvm3sys11RWMutexImpl14writer_releaseEv\", \"llvm::sys::RWMutexImpl::writer_release()\"},\n    {\"_ZN4llvm5RegexC1ENS_9StringRefEj\", \"llvm::Regex::Regex(llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm5RegexC2ENS_9StringRefEj\", \"llvm::Regex::Regex(llvm::StringRef, unsigned int)\"},\n    {\"_ZN4llvm5RegexD1Ev\", \"llvm::Regex::~Regex()\"},\n    {\"_ZN4llvm5RegexD2Ev\", \"llvm::Regex::~Regex()\"},\n    {\"_ZN4llvm5Regex7isValidERSs\", \"llvm::Regex::isValid(std::string&)\"},\n    {\"_ZNK4llvm5Regex13getNumMatchesEv\", \"llvm::Regex::getNumMatches() const\"},\n    {\"_ZN4llvm5Regex5matchENS_9StringRefEPNS_15SmallVectorImplIS1_EE\", \"llvm::Regex::match(llvm::StringRef, llvm::SmallVectorImpl<llvm::StringRef>*)\"},\n    {\"_ZN4llvm5Regex3subENS_9StringRefES1_PSs\", \"llvm::Regex::sub(llvm::StringRef, llvm::StringRef, std::string*)\"},\n    {\"_ZN4llvm15SmallVectorImplI15llvm_regmatch_tE6resizeEj\", \"llvm::SmallVectorImpl<llvm_regmatch_t>::resize(unsigned int)\"},\n    {\"_ZN4llvm23SmallVectorTemplateBaseI15llvm_regmatch_tLb0EE4growEm\", \"llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long)\"},\n    {\"_ZN4llvm31SearchForAddressOfSpecialSymbolEPKc\", \"llvm::SearchForAddressOfSpecialSymbol(char const*)\"},\n    {\"_ZN4llvm3sys20RunInterruptHandlersEv\", \"llvm::sys::RunInterruptHandlers()\"},\n    {\"_ZN4llvm3sys20SetInterruptFunctionEPFvvE\", \"llvm::sys::SetInterruptFunction(void (*)())\"},\n    {\"_ZN4llvm3sys18RemoveFileOnSignalERKNS0_4PathEPSs\", \"llvm::sys::RemoveFileOnSignal(llvm::sys::Path const&, std::string*)\"},\n    {\"_ZN4llvm3sys22DontRemoveFileOnSignalERKNS0_4PathE\", \"llvm::sys::DontRemoveFileOnSignal(llvm::sys::Path const&)\"},\n    {\"_ZN4llvm3sys16AddSignalHandlerEPFvPvES1_\", \"llvm::sys::AddSignalHandler(void (*)(void*), void*)\"},\n    {\"_ZN4llvm3sys28PrintStackTraceOnErrorSignalEv\", \"llvm::sys::PrintStackTraceOnErrorSignal()\"},\n    {\"_Z15PrintStackTracePv\", \"PrintStackTrace(void*)\"},\n    {\"_Z12__assert_rtnPKcS0_iS0_\", \"__assert_rtn(char const*, char const*, int, char const*)\"},\n    {\"_Z13SignalHandleri\", \"SignalHandler(int)\"},\n    {\"_ZN4llvm3sys10SmartMutexILb1EED1Ev\", \"llvm::sys::SmartMutex<true>::~SmartMutex()\"},\n    {\"_ZNSt6vectorIN4llvm3sys4PathESaIS2_EED1Ev\", \"std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> >::~vector()\"},\n    {\"_ZNSt6vectorISt4pairIPFvPvES1_ESaIS4_EED1Ev\", \"std::vector<std::pair<void (*)(void*), void*>, std::allocator<std::pair<void (*)(void*), void*> > >::~vector()\"},\n    {\"_ZNSt6vectorISt4pairIPFvPvES1_ESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_\", \"std::vector<std::pair<void (*)(void*), void*>, std::allocator<std::pair<void (*)(void*), void*> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<void (*)(void*), void*>*, std::vector<std::pair<void (*)(void*), void*>, std::allocator<std::pair<void (*)(void*), void*> > > >, std::pair<void (*)(void*), void*> const&)\"},\n    {\"_ZSt6__findISt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPN4llvm3sys4PathESt6vectorIS5_SaIS5_EEEEES5_ET_SC_SC_RKT0_St26random_access_iterator_tag\", \"std::reverse_iterator<__gnu_cxx::__normal_iterator<llvm::sys::Path*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> > > > std::__find<std::reverse_iterator<__gnu_cxx::__normal_iterator<llvm::sys::Path*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> > > >, llvm::sys::Path>(std::reverse_iterator<__gnu_cxx::__normal_iterator<llvm::sys::Path*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> > > >, std::reverse_iterator<__gnu_cxx::__normal_iterator<llvm::sys::Path*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> > > >, llvm::sys::Path const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIN4llvm3sys4PathESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::sys::Path*, std::vector<llvm::sys::Path, std::allocator<llvm::sys::Path> > >, llvm::sys::Path const&)\"},\n    {\"_ZSt6__findIPKiiET_S2_S2_RKT0_St26random_access_iterator_tag\", \"int const* std::__find<int const*, int>(int const*, int const*, int const&, std::random_access_iterator_tag)\"},\n    {\"_ZN4llvm15SmallPtrSetImpl16shrink_and_clearEv\", \"llvm::SmallPtrSetImpl::shrink_and_clear()\"},\n    {\"_ZN4llvm15SmallPtrSetImpl10insert_impEPKv\", \"llvm::SmallPtrSetImpl::insert_imp(void const*)\"},\n    {\"_ZN4llvm15SmallPtrSetImpl4GrowEv\", \"llvm::SmallPtrSetImpl::Grow()\"},\n    {\"_ZNK4llvm15SmallPtrSetImpl13FindBucketForEPKv\", \"llvm::SmallPtrSetImpl::FindBucketFor(void const*) const\"},\n    {\"_ZN4llvm15SmallPtrSetImpl9erase_impEPKv\", \"llvm::SmallPtrSetImpl::erase_imp(void const*)\"},\n    {\"_ZN4llvm15SmallPtrSetImplC1EPPKvRKS0_\", \"llvm::SmallPtrSetImpl::SmallPtrSetImpl(void const**, llvm::SmallPtrSetImpl const&)\"},\n    {\"_ZN4llvm15SmallPtrSetImplC2EPPKvRKS0_\", \"llvm::SmallPtrSetImpl::SmallPtrSetImpl(void const**, llvm::SmallPtrSetImpl const&)\"},\n    {\"_ZN4llvm15SmallPtrSetImpl8CopyFromERKS0_\", \"llvm::SmallPtrSetImpl::CopyFrom(llvm::SmallPtrSetImpl const&)\"},\n    {\"_ZN4llvm15SmallPtrSetImplD1Ev\", \"llvm::SmallPtrSetImpl::~SmallPtrSetImpl()\"},\n    {\"_ZN4llvm15SmallPtrSetImplD2Ev\", \"llvm::SmallPtrSetImpl::~SmallPtrSetImpl()\"},\n    {\"_ZN4llvm9SourceMgrD1Ev\", \"llvm::SourceMgr::~SourceMgr()\"},\n    {\"_ZN4llvm9SourceMgrD2Ev\", \"llvm::SourceMgr::~SourceMgr()\"},\n    {\"_ZN4llvm9SourceMgr14AddIncludeFileERKSsNS_5SMLocE\", \"llvm::SourceMgr::AddIncludeFile(std::string const&, llvm::SMLoc)\"},\n    {\"_ZNK4llvm9SourceMgr23FindBufferContainingLocENS_5SMLocE\", \"llvm::SourceMgr::FindBufferContainingLoc(llvm::SMLoc) const\"},\n    {\"_ZNK4llvm9SourceMgr14FindLineNumberENS_5SMLocEi\", \"llvm::SourceMgr::FindLineNumber(llvm::SMLoc, int) const\"},\n    {\"_ZNK4llvm9SourceMgr17PrintIncludeStackENS_5SMLocERNS_11raw_ostreamE\", \"llvm::SourceMgr::PrintIncludeStack(llvm::SMLoc, llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm9SourceMgr10GetMessageENS_5SMLocERKNS_5TwineEPKcb\", \"llvm::SourceMgr::GetMessage(llvm::SMLoc, llvm::Twine const&, char const*, bool) const\"},\n    {\"_ZNK4llvm9SourceMgr12PrintMessageENS_5SMLocERKNS_5TwineEPKcb\", \"llvm::SourceMgr::PrintMessage(llvm::SMLoc, llvm::Twine const&, char const*, bool) const\"},\n    {\"_ZNK4llvm12SMDiagnostic5PrintEPKcRNS_11raw_ostreamE\", \"llvm::SMDiagnostic::Print(char const*, llvm::raw_ostream&) const\"},\n    {\"_ZN4llvm9Statistic17RegisterStatisticEv\", \"llvm::Statistic::RegisterStatistic()\"},\n    {\"_ZN4llvm16EnableStatisticsEv\", \"llvm::EnableStatistics()\"},\n    {\"_ZN4llvm15PrintStatisticsERNS_11raw_ostreamE\", \"llvm::PrintStatistics(llvm::raw_ostream&)\"},\n    {\"_ZN4llvm15PrintStatisticsEv\", \"llvm::PrintStatistics()\"},\n    {\"_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEEN12_GLOBAL__N_111NameCompareEEvT_SD_T0_\", \"void std::__inplace_stable_sort<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEES6_lN12_GLOBAL__N_111NameCompareEEvT_SD_T0_T1_T2_\", \"void std::__stable_sort_adaptive<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, long, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, long, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEES6_N12_GLOBAL__N_111NameCompareEEvT_SD_T0_T1_\", \"void std::__merge_sort_with_buffer<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEElS6_N12_GLOBAL__N_111NameCompareEEvT_SD_SD_T0_SE_T1_SE_T2_\", \"void std::__merge_adaptive<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, long, llvm::Statistic const**, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, long, long, llvm::Statistic const**, long, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt5mergeIPPKN4llvm9StatisticES4_N9__gnu_cxx17__normal_iteratorIS4_St6vectorIS3_SaIS3_EEEEN12_GLOBAL__N_111NameCompareEET1_T_SE_T0_SF_SD_T2_\", \"__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > > std::merge<llvm::Statistic const**, llvm::Statistic const**, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare>(llvm::Statistic const**, llvm::Statistic const**, llvm::Statistic const**, llvm::Statistic const**, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt5mergeIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEESA_S6_N12_GLOBAL__N_111NameCompareEET1_T_SE_T0_SF_SD_T2_\", \"llvm::Statistic const** std::merge<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const**, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEEN12_GLOBAL__N_111NameCompareEEvT_SD_T0_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, (anonymous namespace)::NameCompare)\"},\n    {\"_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEElN12_GLOBAL__N_111NameCompareEEvT_SD_SD_T0_SE_T1_\", \"void std::__merge_without_buffer<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, long, (anonymous namespace)::NameCompare>(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, long, long, (anonymous namespace)::NameCompare)\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_113StatisticInfoEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::StatisticInfo>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_113StatisticInfoEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::StatisticInfo>::call(void*)\"},\n    {\"_ZSt8__rotateIN9__gnu_cxx17__normal_iteratorIPPKN4llvm9StatisticESt6vectorIS5_SaIS5_EEEEEvT_SB_SB_St26random_access_iterator_tag\", \"void std::__rotate<__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > > >(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, __gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPKN4llvm9StatisticESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Statistic const**, std::vector<llvm::Statistic const*, std::allocator<llvm::Statistic const*> > >, llvm::Statistic const* const&)\"},\n    {\"_ZN4llvm14StrInStrNoCaseENS_9StringRefES0_\", \"llvm::StrInStrNoCase(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm8getTokenENS_9StringRefES0_\", \"llvm::getToken(llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZN4llvm11SplitStringENS_9StringRefERNS_15SmallVectorImplIS0_EES0_\", \"llvm::SplitString(llvm::StringRef, llvm::SmallVectorImpl<llvm::StringRef>&, llvm::StringRef)\"},\n    {\"_ZNK4llvm9StringRef5splitERNS_15SmallVectorImplIS0_EES0_ib\", \"llvm::StringRef::split(llvm::SmallVectorImpl<llvm::StringRef>&, llvm::StringRef, int, bool) const\"},\n    {\"_ZN4llvm13StringMapImplC1Ejj\", \"llvm::StringMapImpl::StringMapImpl(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm13StringMapImplC2Ejj\", \"llvm::StringMapImpl::StringMapImpl(unsigned int, unsigned int)\"},\n    {\"_ZN4llvm13StringMapImpl4initEj\", \"llvm::StringMapImpl::init(unsigned int)\"},\n    {\"_ZN4llvm13StringMapImpl15LookupBucketForENS_9StringRefE\", \"llvm::StringMapImpl::LookupBucketFor(llvm::StringRef)\"},\n    {\"_ZNK4llvm13StringMapImpl7FindKeyENS_9StringRefE\", \"llvm::StringMapImpl::FindKey(llvm::StringRef) const\"},\n    {\"_ZN4llvm13StringMapImpl9RemoveKeyEPNS_18StringMapEntryBaseE\", \"llvm::StringMapImpl::RemoveKey(llvm::StringMapEntryBase*)\"},\n    {\"_ZN4llvm13StringMapImpl9RemoveKeyENS_9StringRefE\", \"llvm::StringMapImpl::RemoveKey(llvm::StringRef)\"},\n    {\"_ZN4llvm13StringMapImpl11RehashTableEv\", \"llvm::StringMapImpl::RehashTable()\"},\n    {\"_ZN4llvm10StringPoolC1Ev\", \"llvm::StringPool::StringPool()\"},\n    {\"_ZN4llvm10StringPoolC2Ev\", \"llvm::StringPool::StringPool()\"},\n    {\"_ZN4llvm10StringPoolD1Ev\", \"llvm::StringPool::~StringPool()\"},\n    {\"_ZN4llvm10StringPoolD2Ev\", \"llvm::StringPool::~StringPool()\"},\n    {\"_ZN4llvm10StringPool6internENS_9StringRefE\", \"llvm::StringPool::intern(llvm::StringRef)\"},\n    {\"_ZNK4llvm9StringRef13compare_lowerES0_\", \"llvm::StringRef::compare_lower(llvm::StringRef) const\"},\n    {\"_ZNK4llvm9StringRef15compare_numericES0_\", \"llvm::StringRef::compare_numeric(llvm::StringRef) const\"},\n    {\"_ZN4llvm9StringRef13edit_distanceES0_bj\", \"llvm::StringRef::edit_distance(llvm::StringRef, bool, unsigned int)\"},\n    {\"_ZNK4llvm9StringRef4findES0_m\", \"llvm::StringRef::find(llvm::StringRef, unsigned long) const\"},\n    {\"_ZNK4llvm9StringRef5rfindES0_\", \"llvm::StringRef::rfind(llvm::StringRef) const\"},\n    {\"_ZNK4llvm9StringRef13find_first_ofES0_m\", \"llvm::StringRef::find_first_of(llvm::StringRef, unsigned long) const\"},\n    {\"_ZNK4llvm9StringRef17find_first_not_ofEcm\", \"llvm::StringRef::find_first_not_of(char, unsigned long) const\"},\n    {\"_ZNK4llvm9StringRef17find_first_not_ofES0_m\", \"llvm::StringRef::find_first_not_of(llvm::StringRef, unsigned long) const\"},\n    {\"_ZNK4llvm9StringRef12find_last_ofES0_m\", \"llvm::StringRef::find_last_of(llvm::StringRef, unsigned long) const\"},\n    {\"_ZNK4llvm9StringRef5countES0_\", \"llvm::StringRef::count(llvm::StringRef) const\"},\n    {\"_ZNK4llvm9StringRef12getAsIntegerEjRy\", \"llvm::StringRef::getAsInteger(unsigned int, unsigned long long&) const\"},\n    {\"_Z20GetAsUnsignedIntegerN4llvm9StringRefEjRy\", \"GetAsUnsignedInteger(llvm::StringRef, unsigned int, unsigned long long&)\"},\n    {\"_ZNK4llvm9StringRef12getAsIntegerEjRx\", \"llvm::StringRef::getAsInteger(unsigned int, long long&) const\"},\n    {\"_ZNK4llvm9StringRef12getAsIntegerEjRi\", \"llvm::StringRef::getAsInteger(unsigned int, int&) const\"},\n    {\"_ZNK4llvm9StringRef12getAsIntegerEjRj\", \"llvm::StringRef::getAsInteger(unsigned int, unsigned int&) const\"},\n    {\"_ZNK4llvm9StringRef12getAsIntegerEjRNS_5APIntE\", \"llvm::StringRef::getAsInteger(unsigned int, llvm::APInt&) const\"},\n    {\"_ZN4llvm14TargetRegistry5beginEv\", \"llvm::TargetRegistry::begin()\"},\n    {\"_ZN4llvm14TargetRegistry12lookupTargetERKSsRSs\", \"llvm::TargetRegistry::lookupTarget(std::string const&, std::string&)\"},\n    {\"_ZN4llvm14TargetRegistry14RegisterTargetERNS_6TargetEPKcS4_PFjRKSsEb\", \"llvm::TargetRegistry::RegisterTarget(llvm::Target&, char const*, char const*, unsigned int (*)(std::string const&), bool)\"},\n    {\"_ZN4llvm14TargetRegistry22getClosestTargetForJITERSs\", \"llvm::TargetRegistry::getClosestTargetForJIT(std::string&)\"},\n    {\"_ZN4llvm3sys15ThreadLocalImplC1Ev\", \"llvm::sys::ThreadLocalImpl::ThreadLocalImpl()\"},\n    {\"_ZN4llvm3sys15ThreadLocalImplD0Ev\", \"llvm::sys::ThreadLocalImpl::~ThreadLocalImpl()\"},\n    {\"_ZN4llvm3sys15ThreadLocalImplD1Ev\", \"llvm::sys::ThreadLocalImpl::~ThreadLocalImpl()\"},\n    {\"_ZN4llvm3sys15ThreadLocalImplD2Ev\", \"llvm::sys::ThreadLocalImpl::~ThreadLocalImpl()\"},\n    {\"_ZN4llvm3sys15ThreadLocalImpl11setInstanceEPKv\", \"llvm::sys::ThreadLocalImpl::setInstance(void const*)\"},\n    {\"_ZN4llvm3sys15ThreadLocalImpl11getInstanceEv\", \"llvm::sys::ThreadLocalImpl::getInstance()\"},\n    {\"_ZN4llvm3sys15ThreadLocalImpl14removeInstanceEv\", \"llvm::sys::ThreadLocalImpl::removeInstance()\"},\n    {\"_ZN4llvm24llvm_start_multithreadedEv\", \"llvm::llvm_start_multithreaded()\"},\n    {\"_ZN4llvm23llvm_stop_multithreadedEv\", \"llvm::llvm_stop_multithreaded()\"},\n    {\"_ZN4llvm22llvm_execute_on_threadEPFvPvES0_j\", \"llvm::llvm_execute_on_thread(void (*)(void*), void*, unsigned int)\"},\n    {\"_Z24ExecuteOnThread_DispatchPv\", \"ExecuteOnThread_Dispatch(void*)\"},\n    {\"_ZN4llvm3sys9TimeValue9normalizeEv\", \"llvm::sys::TimeValue::normalize()\"},\n    {\"_ZNK4llvm3sys9TimeValue3strEv\", \"llvm::sys::TimeValue::str() const\"},\n    {\"_ZN4llvm3sys9TimeValue3nowEv\", \"llvm::sys::TimeValue::now()\"},\n    {\"_ZN4llvm20CreateInfoOutputFileEv\", \"llvm::CreateInfoOutputFile()\"},\n    {\"_ZN4llvm5Timer4initENS_9StringRefE\", \"llvm::Timer::init(llvm::StringRef)\"},\n    {\"_ZN4llvm10TimerGroup8addTimerERNS_5TimerE\", \"llvm::TimerGroup::addTimer(llvm::Timer&)\"},\n    {\"_ZN4llvm5Timer4initENS_9StringRefERNS_10TimerGroupE\", \"llvm::Timer::init(llvm::StringRef, llvm::TimerGroup&)\"},\n    {\"_ZN4llvm5TimerD1Ev\", \"llvm::Timer::~Timer()\"},\n    {\"_ZN4llvm5TimerD2Ev\", \"llvm::Timer::~Timer()\"},\n    {\"_ZN4llvm10TimerGroup11removeTimerERNS_5TimerE\", \"llvm::TimerGroup::removeTimer(llvm::Timer&)\"},\n    {\"_ZN4llvm10TimeRecord14getCurrentTimeEb\", \"llvm::TimeRecord::getCurrentTime(bool)\"},\n    {\"_ZN4llvm5Timer10startTimerEv\", \"llvm::Timer::startTimer()\"},\n    {\"_ZN4llvm5Timer9stopTimerEv\", \"llvm::Timer::stopTimer()\"},\n    {\"_ZNK4llvm10TimeRecord5printERKS0_RNS_11raw_ostreamE\", \"llvm::TimeRecord::print(llvm::TimeRecord const&, llvm::raw_ostream&) const\"},\n    {\"_Z8printValddRN4llvm11raw_ostreamE\", \"printVal(double, double, llvm::raw_ostream&)\"},\n    {\"_ZN4llvm16NamedRegionTimerC1ENS_9StringRefEb\", \"llvm::NamedRegionTimer::NamedRegionTimer(llvm::StringRef, bool)\"},\n    {\"_ZN4llvm16NamedRegionTimerC2ENS_9StringRefEb\", \"llvm::NamedRegionTimer::NamedRegionTimer(llvm::StringRef, bool)\"},\n    {\"_ZN4llvm16NamedRegionTimerC1ENS_9StringRefES1_b\", \"llvm::NamedRegionTimer::NamedRegionTimer(llvm::StringRef, llvm::StringRef, bool)\"},\n    {\"_ZN4llvm16NamedRegionTimerC2ENS_9StringRefES1_b\", \"llvm::NamedRegionTimer::NamedRegionTimer(llvm::StringRef, llvm::StringRef, bool)\"},\n    {\"_ZN4llvm10TimerGroupC1ENS_9StringRefE\", \"llvm::TimerGroup::TimerGroup(llvm::StringRef)\"},\n    {\"_ZN4llvm10TimerGroupC2ENS_9StringRefE\", \"llvm::TimerGroup::TimerGroup(llvm::StringRef)\"},\n    {\"_ZN4llvm10TimerGroupD1Ev\", \"llvm::TimerGroup::~TimerGroup()\"},\n    {\"_ZN4llvm10TimerGroupD2Ev\", \"llvm::TimerGroup::~TimerGroup()\"},\n    {\"_ZN4llvm10TimerGroup17PrintQueuedTimersERNS_11raw_ostreamE\", \"llvm::TimerGroup::PrintQueuedTimers(llvm::raw_ostream&)\"},\n    {\"_ZN4llvm10TimerGroup5printERNS_11raw_ostreamE\", \"llvm::TimerGroup::print(llvm::raw_ostream&)\"},\n    {\"_ZN4llvm10TimerGroup8printAllERNS_11raw_ostreamE\", \"llvm::TimerGroup::printAll(llvm::raw_ostream&)\"},\n    {\"_ZN4llvm14object_creatorIN12_GLOBAL__N_112Name2PairMapEEEPvv\", \"void* llvm::object_creator<(anonymous namespace)::Name2PairMap>()\"},\n    {\"_ZN4llvm14object_deleterIN12_GLOBAL__N_112Name2PairMapEE4callEPv\", \"llvm::object_deleter<(anonymous namespace)::Name2PairMap>::call(void*)\"},\n    {\"_ZN4llvm2cl3optIbLb0ENS0_6parserIbEEED1Ev\", \"llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::~opt()\"},\n    {\"_ZN4llvm2cl3optISsLb1ENS0_6parserISsEEED1Ev\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::~opt()\"},\n    {\"_ZN4llvm14format_object1IxED1Ev\", \"llvm::format_object1<long long>::~format_object1()\"},\n    {\"_ZN4llvm14format_object1IdED1Ev\", \"llvm::format_object1<double>::~format_object1()\"},\n    {\"_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEElEvT_SB_T0_\", \"void std::__introsort_loop<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long>(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long)\"},\n    {\"_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEEEvT_SB_\", \"void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >)\"},\n    {\"_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEEEvT_SB_\", \"void std::__insertion_sort<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >)\"},\n    {\"_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEES5_EvT_T0_\", \"void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, std::pair<llvm::TimeRecord, std::string> >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, std::pair<llvm::TimeRecord, std::string>)\"},\n    {\"_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEES5_ET_SB_SB_T0_\", \"__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > std::__unguarded_partition<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, std::pair<llvm::TimeRecord, std::string> >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, std::pair<llvm::TimeRecord, std::string>)\"},\n    {\"_ZSt8__medianISt4pairIN4llvm10TimeRecordESsEERKT_S6_S6_S6_\", \"std::pair<llvm::TimeRecord, std::string> const& std::__median<std::pair<llvm::TimeRecord, std::string> >(std::pair<llvm::TimeRecord, std::string> const&, std::pair<llvm::TimeRecord, std::string> const&, std::pair<llvm::TimeRecord, std::string> const&)\"},\n    {\"_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEEEvT_SB_SB_\", \"void std::__heap_select<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >)\"},\n    {\"_ZSt8pop_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEEEvT_SB_\", \"void std::pop_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >)\"},\n    {\"_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEElS5_EvT_T0_SC_T1_\", \"void std::__adjust_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long, std::pair<llvm::TimeRecord, std::string> >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long, long, std::pair<llvm::TimeRecord, std::string>)\"},\n    {\"_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEElS5_EvT_T0_SC_T1_\", \"void std::__push_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long, std::pair<llvm::TimeRecord, std::string> >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, long, long, std::pair<llvm::TimeRecord, std::string>)\"},\n    {\"_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4llvm10TimeRecordESsESt6vectorIS5_SaIS5_EEEEEvT_SB_\", \"void std::make_heap<__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > > >(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, __gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >)\"},\n    {\"_ZNSt6vectorISt4pairIN4llvm10TimeRecordESsESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_\", \"std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::pair<llvm::TimeRecord, std::string>*, std::vector<std::pair<llvm::TimeRecord, std::string>, std::allocator<std::pair<llvm::TimeRecord, std::string> > > >, std::pair<llvm::TimeRecord, std::string> const&)\"},\n    {\"_ZN4llvm9StringMapISt4pairIPNS_10TimerGroupENS0_INS_5TimerENS_15MallocAllocatorEEEES5_ED2Ev\", \"llvm::StringMap<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >, llvm::MallocAllocator>::~StringMap()\"},\n    {\"_ZN4llvm9StringMapINS_5TimerENS_15MallocAllocatorEE5clearEv\", \"llvm::StringMap<llvm::Timer, llvm::MallocAllocator>::clear()\"},\n    {\"_ZN4llvm14object_creatorINS_3sys10SmartMutexILb1EEEEEPvv\", \"void* llvm::object_creator<llvm::sys::SmartMutex<true> >()\"},\n    {\"_ZN4llvm14object_deleterINS_3sys10SmartMutexILb1EEEE4callEPv\", \"llvm::object_deleter<llvm::sys::SmartMutex<true> >::call(void*)\"},\n    {\"_ZNK4llvm14format_object1IxE7snprintEPcj\", \"llvm::format_object1<long long>::snprint(char*, unsigned int) const\"},\n    {\"_ZN4llvm14format_object1IxED0Ev\", \"llvm::format_object1<long long>::~format_object1()\"},\n    {\"_ZN4llvm18format_object_baseD1Ev\", \"llvm::format_object_base::~format_object_base()\"},\n    {\"_ZN4llvm18format_object_baseD0Ev\", \"llvm::format_object_base::~format_object_base()\"},\n    {\"_ZNK4llvm14format_object1IdE7snprintEPcj\", \"llvm::format_object1<double>::snprint(char*, unsigned int) const\"},\n    {\"_ZN4llvm14format_object1IdED0Ev\", \"llvm::format_object1<double>::~format_object1()\"},\n    {\"_ZSt6__findIN9__gnu_cxx17__normal_iteratorIPPN4llvm5TimerESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_St26random_access_iterator_tag\", \"__gnu_cxx::__normal_iterator<llvm::Timer**, std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > > std::__find<__gnu_cxx::__normal_iterator<llvm::Timer**, std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >, llvm::Timer*>(__gnu_cxx::__normal_iterator<llvm::Timer**, std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >, __gnu_cxx::__normal_iterator<llvm::Timer**, std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >, llvm::Timer* const&, std::random_access_iterator_tag)\"},\n    {\"_ZNSt6vectorIPN4llvm5TimerESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_\", \"std::vector<llvm::Timer*, std::allocator<llvm::Timer*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::Timer**, std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >, llvm::Timer* const&)\"},\n    {\"_ZN4llvm14object_creatorISt6vectorIPNS_5TimerESaIS3_EEEEPvv\", \"void* llvm::object_creator<std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >()\"},\n    {\"_ZN4llvm14object_deleterISt6vectorIPNS_5TimerESaIS3_EEE4callEPv\", \"llvm::object_deleter<std::vector<llvm::Timer*, std::allocator<llvm::Timer*> > >::call(void*)\"},\n    {\"_ZN4llvm2cl3optISsLb1ENS0_6parserISsEEE16handleOccurrenceEjNS_9StringRefES5_\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::handleOccurrence(unsigned int, llvm::StringRef, llvm::StringRef)\"},\n    {\"_ZNK4llvm2cl3optISsLb1ENS0_6parserISsEEE27getValueExpectedFlagDefaultEv\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::getValueExpectedFlagDefault() const\"},\n    {\"_ZNK4llvm2cl3optISsLb1ENS0_6parserISsEEE14getOptionWidthEv\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::getOptionWidth() const\"},\n    {\"_ZNK4llvm2cl3optISsLb1ENS0_6parserISsEEE15printOptionInfoEm\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::printOptionInfo(unsigned long) const\"},\n    {\"_ZN4llvm2cl3optISsLb1ENS0_6parserISsEEE19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl3optISsLb1ENS0_6parserISsEEED0Ev\", \"llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >::~opt()\"},\n    {\"_ZN4llvm2cl6parserISsED1Ev\", \"llvm::cl::parser<std::string>::~parser()\"},\n    {\"_ZN4llvm2cl6parserISsED0Ev\", \"llvm::cl::parser<std::string>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserISsE12getValueNameEv\", \"llvm::cl::parser<std::string>::getValueName() const\"},\n    {\"_ZN4llvm2cl17basic_parser_implD1Ev\", \"llvm::cl::basic_parser_impl::~basic_parser_impl()\"},\n    {\"_ZN4llvm2cl17basic_parser_implD0Ev\", \"llvm::cl::basic_parser_impl::~basic_parser_impl()\"},\n    {\"_ZNK4llvm2cl17basic_parser_impl12getValueNameEv\", \"llvm::cl::basic_parser_impl::getValueName() const\"},\n    {\"_ZNK4llvm2cl6Option27getValueExpectedFlagDefaultEv\", \"llvm::cl::Option::getValueExpectedFlagDefault() const\"},\n    {\"_ZN4llvm2cl6Option19getExtraOptionNamesERNS_15SmallVectorImplIPKcEE\", \"llvm::cl::Option::getExtraOptionNames(llvm::SmallVectorImpl<char const*>&)\"},\n    {\"_ZN4llvm2cl6OptionD1Ev\", \"llvm::cl::Option::~Option()\"},\n    {\"_ZN4llvm2cl6OptionD0Ev\", \"llvm::cl::Option::~Option()\"},\n    {\"_ZN4llvm2cl6parserIbED1Ev\", \"llvm::cl::parser<bool>::~parser()\"},\n    {\"_ZN4llvm2cl6parserIbED0Ev\", \"llvm::cl::parser<bool>::~parser()\"},\n    {\"_ZNK4llvm2cl6parserIbE12getValueNameEv\", \"llvm::cl::parser<bool>::getValueName() const\"},\n    {\"_ZN4llvm9StringMapINS_5TimerENS_15MallocAllocatorEE16GetOrCreateValueIS1_EERNS_14StringMapEntryIS1_EENS_9StringRefET_\", \"llvm::StringMapEntry<llvm::Timer>& llvm::StringMap<llvm::Timer, llvm::MallocAllocator>::GetOrCreateValue<llvm::Timer>(llvm::StringRef, llvm::Timer)\"},\n    {\"_ZN4llvm9StringMapISt4pairIPNS_10TimerGroupENS0_INS_5TimerENS_15MallocAllocatorEEEES5_E16GetOrCreateValueIS7_EERNS_14StringMapEntryIS7_EENS_9StringRefET_\", \"llvm::StringMapEntry<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> > >& llvm::StringMap<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >, llvm::MallocAllocator>::GetOrCreateValue<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> > >(llvm::StringRef, std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >)\"},\n    {\"_ZN4llvm14StringMapEntryISt4pairIPNS_10TimerGroupENS_9StringMapINS_5TimerENS_15MallocAllocatorEEEEE6CreateIS6_S8_EEPS9_PKcSD_RT_T0_\", \"llvm::StringMapEntry<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> > >* llvm::StringMapEntry<std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> > >::Create<llvm::MallocAllocator, std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> > >(char const*, char const*, llvm::MallocAllocator&, std::pair<llvm::TimerGroup*, llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >)\"},\n    {\"_ZN4llvm14object_creatorINS_9StringMapINS_5TimerENS_15MallocAllocatorEEEEEPvv\", \"void* llvm::object_creator<llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >()\"},\n    {\"_ZN4llvm14object_deleterINS_9StringMapINS_5TimerENS_15MallocAllocatorEEEE4callEPv\", \"llvm::object_deleter<llvm::StringMap<llvm::Timer, llvm::MallocAllocator> >::call(void*)\"},\n    {\"_ZN4llvm14object_creatorISsEEPvv\", \"void* llvm::object_creator<std::string>()\"},\n    {\"_ZN4llvm14object_deleterISsE4callEPv\", \"llvm::object_deleter<std::string>::call(void*)\"},\n    {\"_ZN4llvm6Triple15getArchTypeNameENS0_8ArchTypeE\", \"llvm::Triple::getArchTypeName(llvm::Triple::ArchType)\"},\n    {\"_ZN4llvm6Triple17getArchTypePrefixENS0_8ArchTypeE\", \"llvm::Triple::getArchTypePrefix(llvm::Triple::ArchType)\"},\n    {\"_ZN4llvm6Triple17getVendorTypeNameENS0_10VendorTypeE\", \"llvm::Triple::getVendorTypeName(llvm::Triple::VendorType)\"},\n    {\"_ZN4llvm6Triple13getOSTypeNameENS0_6OSTypeE\", \"llvm::Triple::getOSTypeName(llvm::Triple::OSType)\"},\n    {\"_ZN4llvm6Triple22getEnvironmentTypeNameENS0_15EnvironmentTypeE\", \"llvm::Triple::getEnvironmentTypeName(llvm::Triple::EnvironmentType)\"},\n    {\"_ZN4llvm6Triple22getArchTypeForLLVMNameENS_9StringRefE\", \"llvm::Triple::getArchTypeForLLVMName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple28getArchTypeForDarwinArchNameENS_9StringRefE\", \"llvm::Triple::getArchTypeForDarwinArchName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple23getArchNameForAssemblerEv\", \"llvm::Triple::getArchNameForAssembler()\"},\n    {\"_ZNK4llvm6Triple11getArchNameEv\", \"llvm::Triple::getArchName() const\"},\n    {\"_ZN4llvm6Triple9ParseArchENS_9StringRefE\", \"llvm::Triple::ParseArch(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple11ParseVendorENS_9StringRefE\", \"llvm::Triple::ParseVendor(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple7ParseOSENS_9StringRefE\", \"llvm::Triple::ParseOS(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple16ParseEnvironmentENS_9StringRefE\", \"llvm::Triple::ParseEnvironment(llvm::StringRef)\"},\n    {\"_ZNK4llvm6Triple5ParseEv\", \"llvm::Triple::Parse() const\"},\n    {\"_ZNK4llvm6Triple13getVendorNameEv\", \"llvm::Triple::getVendorName() const\"},\n    {\"_ZNK4llvm6Triple9getOSNameEv\", \"llvm::Triple::getOSName() const\"},\n    {\"_ZNK4llvm6Triple18getEnvironmentNameEv\", \"llvm::Triple::getEnvironmentName() const\"},\n    {\"_ZN4llvm6Triple9normalizeENS_9StringRefE\", \"llvm::Triple::normalize(llvm::StringRef)\"},\n    {\"_ZNK4llvm6Triple23getOSAndEnvironmentNameEv\", \"llvm::Triple::getOSAndEnvironmentName() const\"},\n    {\"_ZNK4llvm6Triple15getDarwinNumberERjS1_S1_\", \"llvm::Triple::getDarwinNumber(unsigned int&, unsigned int&, unsigned int&) const\"},\n    {\"_ZN4llvm6Triple9setTripleERKNS_5TwineE\", \"llvm::Triple::setTriple(llvm::Twine const&)\"},\n    {\"_ZN4llvm6Triple7setArchENS0_8ArchTypeE\", \"llvm::Triple::setArch(llvm::Triple::ArchType)\"},\n    {\"_ZN4llvm6Triple11setArchNameENS_9StringRefE\", \"llvm::Triple::setArchName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple9setVendorENS0_10VendorTypeE\", \"llvm::Triple::setVendor(llvm::Triple::VendorType)\"},\n    {\"_ZN4llvm6Triple13setVendorNameENS_9StringRefE\", \"llvm::Triple::setVendorName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple5setOSENS0_6OSTypeE\", \"llvm::Triple::setOS(llvm::Triple::OSType)\"},\n    {\"_ZN4llvm6Triple9setOSNameENS_9StringRefE\", \"llvm::Triple::setOSName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple14setEnvironmentENS0_15EnvironmentTypeE\", \"llvm::Triple::setEnvironment(llvm::Triple::EnvironmentType)\"},\n    {\"_ZN4llvm6Triple18setEnvironmentNameENS_9StringRefE\", \"llvm::Triple::setEnvironmentName(llvm::StringRef)\"},\n    {\"_ZN4llvm6Triple23setOSAndEnvironmentNameENS_9StringRefE\", \"llvm::Triple::setOSAndEnvironmentName(llvm::StringRef)\"},\n    {\"_ZNK4llvm5Twine3strEv\", \"llvm::Twine::str() const\"},\n    {\"_ZNK4llvm5Twine11toStringRefERNS_15SmallVectorImplIcEE\", \"llvm::Twine::toStringRef(llvm::SmallVectorImpl<char>&) const\"},\n    {\"_ZNK4llvm5Twine8toVectorERNS_15SmallVectorImplIcEE\", \"llvm::Twine::toVector(llvm::SmallVectorImpl<char>&) const\"},\n    {\"_ZNK4llvm5Twine5printERNS_11raw_ostreamE\", \"llvm::Twine::print(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm5Twine25toNullTerminatedStringRefERNS_15SmallVectorImplIcEE\", \"llvm::Twine::toNullTerminatedStringRef(llvm::SmallVectorImpl<char>&) const\"},\n    {\"_ZNK4llvm5Twine13printOneChildERNS_11raw_ostreamEPKvNS0_8NodeKindE\", \"llvm::Twine::printOneChild(llvm::raw_ostream&, void const*, llvm::Twine::NodeKind) const\"},\n    {\"_ZNK4llvm5Twine17printOneChildReprERNS_11raw_ostreamEPKvNS0_8NodeKindE\", \"llvm::Twine::printOneChildRepr(llvm::raw_ostream&, void const*, llvm::Twine::NodeKind) const\"},\n    {\"_ZNK4llvm5Twine9printReprERNS_11raw_ostreamE\", \"llvm::Twine::printRepr(llvm::raw_ostream&) const\"},\n    {\"_ZNK4llvm5Twine4dumpEv\", \"llvm::Twine::dump() const\"},\n    {\"_ZNK4llvm5Twine8dumpReprEv\", \"llvm::Twine::dumpRepr() const\"},\n    {\"_ZN4llvm3sys17RunningOnValgrindEv\", \"llvm::sys::RunningOnValgrind()\"},\n    {\"_ZN4llvm3sys27ValgrindDiscardTranslationsEPKvm\", \"llvm::sys::ValgrindDiscardTranslations(void const*, unsigned long)\"},\n    {\"_ZN4llvm11raw_ostreamD0Ev\", \"llvm::raw_ostream::~raw_ostream()\"},\n    {\"_ZN4llvm11raw_ostreamD1Ev\", \"llvm::raw_ostream::~raw_ostream()\"},\n    {\"_ZN4llvm11raw_ostreamD2Ev\", \"llvm::raw_ostream::~raw_ostream()\"},\n    {\"_ZN4llvm11raw_ostream6handleEv\", \"llvm::raw_ostream::handle()\"},\n    {\"_ZNK4llvm11raw_ostream21preferred_buffer_sizeEv\", \"llvm::raw_ostream::preferred_buffer_size() const\"},\n    {\"_ZN4llvm11raw_ostream11SetBufferedEv\", \"llvm::raw_ostream::SetBuffered()\"},\n    {\"_ZN4llvm11raw_ostream16SetBufferAndModeEPcmNS0_10BufferKindE\", \"llvm::raw_ostream::SetBufferAndMode(char*, unsigned long, llvm::raw_ostream::BufferKind)\"},\n    {\"_ZN4llvm11raw_ostreamlsEm\", \"llvm::raw_ostream::operator<<(unsigned long)\"},\n    {\"_ZN4llvm11raw_ostream5writeEPKcm\", \"llvm::raw_ostream::write(char const*, unsigned long)\"},\n    {\"_ZN4llvm11raw_ostreamlsEl\", \"llvm::raw_ostream::operator<<(long)\"},\n    {\"_ZN4llvm11raw_ostreamlsEy\", \"llvm::raw_ostream::operator<<(unsigned long long)\"},\n    {\"_ZN4llvm11raw_ostreamlsEx\", \"llvm::raw_ostream::operator<<(long long)\"},\n    {\"_ZN4llvm11raw_ostream9write_hexEy\", \"llvm::raw_ostream::write_hex(unsigned long long)\"},\n    {\"_ZN4llvm11raw_ostream13write_escapedENS_9StringRefEb\", \"llvm::raw_ostream::write_escaped(llvm::StringRef, bool)\"},\n    {\"_ZN4llvm11raw_ostreamlsEPKv\", \"llvm::raw_ostream::operator<<(void const*)\"},\n    {\"_ZN4llvm11raw_ostreamlsEd\", \"llvm::raw_ostream::operator<<(double)\"},\n    {\"_ZN4llvm11raw_ostreamlsERKNS_18format_object_baseE\", \"llvm::raw_ostream::operator<<(llvm::format_object_base const&)\"},\n    {\"_ZN4llvm11raw_ostream14flush_nonemptyEv\", \"llvm::raw_ostream::flush_nonempty()\"},\n    {\"_ZN4llvm11raw_ostream5writeEh\", \"llvm::raw_ostream::write(unsigned char)\"},\n    {\"_ZN4llvm11raw_ostream14copy_to_bufferEPKcm\", \"llvm::raw_ostream::copy_to_buffer(char const*, unsigned long)\"},\n    {\"_ZN4llvm11raw_ostream6indentEj\", \"llvm::raw_ostream::indent(unsigned int)\"},\n    {\"_ZN4llvm18format_object_base4homeEv\", \"llvm::format_object_base::home()\"},\n    {\"_ZN4llvm14raw_fd_ostreamC1EPKcRSsj\", \"llvm::raw_fd_ostream::raw_fd_ostream(char const*, std::string&, unsigned int)\"},\n    {\"_ZN4llvm14raw_fd_ostreamC2EPKcRSsj\", \"llvm::raw_fd_ostream::raw_fd_ostream(char const*, std::string&, unsigned int)\"},\n    {\"_ZN4llvm14raw_fd_ostreamC1Eibb\", \"llvm::raw_fd_ostream::raw_fd_ostream(int, bool, bool)\"},\n    {\"_ZN4llvm14raw_fd_ostreamC2Eibb\", \"llvm::raw_fd_ostream::raw_fd_ostream(int, bool, bool)\"},\n    {\"_ZN4llvm14raw_fd_ostreamD0Ev\", \"llvm::raw_fd_ostream::~raw_fd_ostream()\"},\n    {\"_ZN4llvm14raw_fd_ostreamD1Ev\", \"llvm::raw_fd_ostream::~raw_fd_ostream()\"},\n    {\"_ZN4llvm14raw_fd_ostreamD2Ev\", \"llvm::raw_fd_ostream::~raw_fd_ostream()\"},\n    {\"_ZN4llvm14raw_fd_ostream10write_implEPKcm\", \"llvm::raw_fd_ostream::write_impl(char const*, unsigned long)\"},\n    {\"_ZN4llvm14raw_fd_ostream5closeEv\", \"llvm::raw_fd_ostream::close()\"},\n    {\"_ZN4llvm14raw_fd_ostream4seekEy\", \"llvm::raw_fd_ostream::seek(unsigned long long)\"},\n    {\"_ZNK4llvm14raw_fd_ostream21preferred_buffer_sizeEv\", \"llvm::raw_fd_ostream::preferred_buffer_size() const\"},\n    {\"_ZN4llvm14raw_fd_ostream11changeColorENS_11raw_ostream6ColorsEbb\", \"llvm::raw_fd_ostream::changeColor(llvm::raw_ostream::Colors, bool, bool)\"},\n    {\"_ZN4llvm14raw_fd_ostream10resetColorEv\", \"llvm::raw_fd_ostream::resetColor()\"},\n    {\"_ZNK4llvm14raw_fd_ostream12is_displayedEv\", \"llvm::raw_fd_ostream::is_displayed() const\"},\n    {\"_ZN4llvm4outsEv\", \"llvm::outs()\"},\n    {\"_ZN4llvm4errsEv\", \"llvm::errs()\"},\n    {\"_ZN4llvm5nullsEv\", \"llvm::nulls()\"},\n    {\"_ZN4llvm16raw_null_ostreamD1Ev\", \"llvm::raw_null_ostream::~raw_null_ostream()\"},\n    {\"_ZN4llvm18raw_string_ostreamD0Ev\", \"llvm::raw_string_ostream::~raw_string_ostream()\"},\n    {\"_ZN4llvm18raw_string_ostreamD1Ev\", \"llvm::raw_string_ostream::~raw_string_ostream()\"},\n    {\"_ZN4llvm18raw_string_ostreamD2Ev\", \"llvm::raw_string_ostream::~raw_string_ostream()\"},\n    {\"_ZN4llvm18raw_string_ostream10write_implEPKcm\", \"llvm::raw_string_ostream::write_impl(char const*, unsigned long)\"},\n    {\"_ZN4llvm19raw_svector_ostreamC1ERNS_15SmallVectorImplIcEE\", \"llvm::raw_svector_ostream::raw_svector_ostream(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm19raw_svector_ostreamC2ERNS_15SmallVectorImplIcEE\", \"llvm::raw_svector_ostream::raw_svector_ostream(llvm::SmallVectorImpl<char>&)\"},\n    {\"_ZN4llvm19raw_svector_ostreamD0Ev\", \"llvm::raw_svector_ostream::~raw_svector_ostream()\"},\n    {\"_ZN4llvm19raw_svector_ostreamD1Ev\", \"llvm::raw_svector_ostream::~raw_svector_ostream()\"},\n    {\"_ZN4llvm19raw_svector_ostreamD2Ev\", \"llvm::raw_svector_ostream::~raw_svector_ostream()\"},\n    {\"_ZN4llvm19raw_svector_ostream6resyncEv\", \"llvm::raw_svector_ostream::resync()\"},\n    {\"_ZN4llvm19raw_svector_ostream10write_implEPKcm\", \"llvm::raw_svector_ostream::write_impl(char const*, unsigned long)\"},\n    {\"_ZNK4llvm19raw_svector_ostream11current_posEv\", \"llvm::raw_svector_ostream::current_pos() const\"},\n    {\"_ZN4llvm19raw_svector_ostream3strEv\", \"llvm::raw_svector_ostream::str()\"},\n    {\"_ZN4llvm16raw_null_ostreamD0Ev\", \"llvm::raw_null_ostream::~raw_null_ostream()\"},\n    {\"_ZN4llvm16raw_null_ostreamD2Ev\", \"llvm::raw_null_ostream::~raw_null_ostream()\"},\n    {\"_ZN4llvm16raw_null_ostream10write_implEPKcm\", \"llvm::raw_null_ostream::write_impl(char const*, unsigned long)\"},\n    {\"_ZNK4llvm16raw_null_ostream11current_posEv\", \"llvm::raw_null_ostream::current_pos() const\"},\n    {\"_ZNK4llvm14raw_fd_ostream11current_posEv\", \"llvm::raw_fd_ostream::current_pos() const\"},\n    {\"_ZN4llvm14error_categoryC1Ev\", \"llvm::error_category::error_category()\"},\n    {\"_ZN4llvm14error_categoryC2Ev\", \"llvm::error_category::error_category()\"},\n    {\"_ZN4llvm14error_categoryD0Ev\", \"llvm::error_category::~error_category()\"},\n    {\"_ZN4llvm14error_categoryD1Ev\", \"llvm::error_category::~error_category()\"},\n    {\"_ZN4llvm14error_categoryD2Ev\", \"llvm::error_category::~error_category()\"},\n    {\"_ZNK4llvm14error_category23default_error_conditionEi\", \"llvm::error_category::default_error_condition(int) const\"},\n    {\"_ZNK4llvm14error_category10equivalentEiRKNS_15error_conditionE\", \"llvm::error_category::equivalent(int, llvm::error_condition const&) const\"},\n    {\"_ZNK4llvm14error_category10equivalentERKNS_10error_codeEi\", \"llvm::error_category::equivalent(llvm::error_code const&, int) const\"},\n    {\"_ZNK4llvm11_do_message7messageEi\", \"llvm::_do_message::message(int) const\"},\n    {\"_ZNK4llvm23_generic_error_category4nameEv\", \"llvm::_generic_error_category::name() const\"},\n    {\"_ZNK4llvm23_generic_error_category7messageEi\", \"llvm::_generic_error_category::message(int) const\"},\n    {\"_ZN4llvm16generic_categoryEv\", \"llvm::generic_category()\"},\n    {\"_ZNK4llvm22_system_error_category4nameEv\", \"llvm::_system_error_category::name() const\"},\n    {\"_ZN4llvm14posix_categoryEv\", \"llvm::posix_category()\"},\n    {\"_ZNK4llvm15error_condition7messageEv\", \"llvm::error_condition::message() const\"},\n    {\"_ZNK4llvm10error_code7messageEv\", \"llvm::error_code::message() const\"},\n    {\"_ZNK4llvm22_system_error_category7messageEi\", \"llvm::_system_error_category::message(int) const\"},\n    {\"_ZNK4llvm22_system_error_category23default_error_conditionEi\", \"llvm::_system_error_category::default_error_condition(int) const\"},\n    {\"_ZN4llvm23_generic_error_categoryD1Ev\", \"llvm::_generic_error_category::~_generic_error_category()\"},\n    {\"_ZN4llvm22_system_error_categoryD1Ev\", \"llvm::_system_error_category::~_system_error_category()\"},\n    {\"_ZN4llvm11_do_messageD1Ev\", \"llvm::_do_message::~_do_message()\"},\n    {\"_ZN4llvm11_do_messageD0Ev\", \"llvm::_do_message::~_do_message()\"},\n    {\"_ZN4llvm23_generic_error_categoryD0Ev\", \"llvm::_generic_error_category::~_generic_error_category()\"},\n    {\"_ZN4llvm22_system_error_categoryD0Ev\", \"llvm::_system_error_category::~_system_error_category()\"},\n    {\"_ZZN4llvm3sys4Path21GetTemporaryDirectoryEPSsE8pathname\", \"llvm::sys::Path::GetTemporaryDirectory(std::string*)::pathname\"},\n    {\"_ZZN5clang6Parser30ParseTemplateTemplateParameterEjjE7EndToks\", \"clang::Parser::ParseTemplateTemplateParameter(unsigned int, unsigned int)::EndToks\"},\n    {\"_ZZN5clang4Sema27SemaBuiltinAtomicOverloadedENS_12ActionResultIPNS_4ExprELb1EEEE14BuiltinIndices\", \"clang::Sema::SemaBuiltinAtomicOverloaded(clang::ActionResult<clang::Expr*, true>)::BuiltinIndices\"},\n    {\"_ZZN5clang21GetConversionCategoryENS_22ImplicitConversionKindEE8Category\", \"clang::GetConversionCategory(clang::ImplicitConversionKind)::Category\"},\n    {\"_ZZN5clang17GetConversionRankENS_22ImplicitConversionKindEE4Rank\", \"clang::GetConversionRank(clang::ImplicitConversionKind)::Rank\"},\n    {\"_ZZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder17getArithmeticTypeEjE15ArithmeticTypes\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::getArithmeticType(unsigned int)::ArithmeticTypes\"},\n    {\"_ZZN5clang12_GLOBAL__N_130BuiltinOperatorOverloadBuilder29getUsualArithmeticConversionsEjjE16ConversionsTable\", \"clang::(anonymous namespace)::BuiltinOperatorOverloadBuilder::getUsualArithmeticConversions(unsigned int, unsigned int)::ConversionsTable\"},\n    {\"_ZZ15GetCFNumberSizeRN5clang10ASTContextEyE9FixedSize\", \"GetCFNumberSize(clang::ASTContext&, unsigned long long)::FixedSize\"},\n    {\"_ZZN5clang15DeclarationName21getUsingDirectiveNameEvE9UDirExtra\", \"clang::DeclarationName::getUsingDirectiveName()::UDirExtra\"},\n    {\"_ZZN5clang14BinaryOperator21getOverloadedOperatorENS_18BinaryOperatorKindEE7OverOps\", \"clang::BinaryOperator::getOverloadedOperator(clang::BinaryOperatorKind)::OverOps\"},\n    {\"_ZZ15EncodeUCNEscapeRPKcS0_RPcRbN5clang13FullSourceLocEbPNS5_10DiagnosticERKNS5_11LangOptionsEE13firstByteMark\", \"EncodeUCNEscape(char const*&, char const*, char*&, bool&, clang::FullSourceLoc, bool, clang::Diagnostic*, clang::LangOptions const&)::firstByteMark\"},\n    {\"_ZZN5clang10TargetInfo9setCXXABIERKSsE7Unknown\", \"clang::TargetInfo::setCXXABI(std::string const&)::Unknown\"},\n    {\"_ZZNK12_GLOBAL__N_113X86AsmBackend12WriteNopDataEyPN4llvm14MCObjectWriterEE4Nops\", \"(anonymous namespace)::X86AsmBackend::WriteNopData(unsigned long long, llvm::MCObjectWriter*) const::Nops\"},\n    {\"_ZZN4llvm13X86AsmPrinter16EmitEndOfAsmFileERNS_6ModuleEE8HltInsts\", \"llvm::X86AsmPrinter::EmitEndOfAsmFile(llvm::Module&)::HltInsts\"},\n    {\"_ZZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE16emitMemModRMByteERKNS1_12MachineInstrEjjlE7SSTable\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::emitMemModRMByte(llvm::MachineInstr const&, unsigned int, unsigned int, long)::SSTable\"},\n    {\"_ZZ14RetCC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList7\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList7\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ11CC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList7\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList7\"},\n    {\"_ZZ13CC_X86_32_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_FastCCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_FastCC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_FastCCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_32_FastCC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ18CC_X86_32_FastCalljN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_FastCall(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ13CC_X86_64_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_64_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ13CC_X86_64_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_64_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ22findDeadCallerSavedRegRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEERKNS_18TargetRegisterInfoEbE20CallerSavedRegs32Bit\", \"findDeadCallerSavedReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::TargetRegisterInfo const&, bool)::CallerSavedRegs32Bit\"},\n    {\"_ZZ22findDeadCallerSavedRegRN4llvm17MachineBasicBlockERNS_14ilist_iteratorINS_12MachineInstrEEERKNS_18TargetRegisterInfoEbE20CallerSavedRegs64Bit\", \"findDeadCallerSavedReg(llvm::MachineBasicBlock&, llvm::ilist_iterator<llvm::MachineInstr>&, llvm::TargetRegisterInfo const&, bool)::CallerSavedRegs64Bit\"},\n    {\"_ZZN12_GLOBAL__N_115X86DAGToDAGISel10SelectCodeEPN4llvm6SDNodeEE12MatcherTable\", \"(anonymous namespace)::X86DAGToDAGISel::SelectCode(llvm::SDNode*)::MatcherTable\"},\n    {\"_ZZNK4llvm17X86TargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EEE17GPR64ArgRegsWin64\", \"llvm::X86TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const::GPR64ArgRegsWin64\"},\n    {\"_ZZNK4llvm17X86TargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EEE17GPR64ArgRegs64Bit\", \"llvm::X86TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const::GPR64ArgRegs64Bit\"},\n    {\"_ZZNK4llvm17X86TargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EEE15XMMArgRegs64Bit\", \"llvm::X86TargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const::XMMArgRegs64Bit\"},\n    {\"_ZZNK4llvm17X86TargetLowering9LowerCallENS_7SDValueES1_NS_11CallingConv2IDEbRbRKNS_15SmallVectorImplINS_3ISD9OutputArgEEERKNS5_IS1_EERKNS5_INS6_8InputArgEEENS_8DebugLocERNS_12SelectionDAGERSB_E10XMMArgRegs\", \"llvm::X86TargetLowering::LowerCall(llvm::SDValue, llvm::SDValue, llvm::CallingConv::ID, bool, bool&, llvm::SmallVectorImpl<llvm::ISD::OutputArg> const&, llvm::SmallVectorImpl<llvm::SDValue> const&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const::XMMArgRegs\"},\n    {\"_ZZ11CC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ16CC_X86_32_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList7\", \"CC_X86_32_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList7\"},\n    {\"_ZZ13CC_X86_32_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_FastCCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_FastCC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_X86_32_FastCCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_32_FastCC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ18CC_X86_32_FastCalljN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_32_FastCall(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ11CC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"CC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ14CC_X86_Win64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"CC_X86_Win64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ13CC_X86_64_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_X86_64_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ13CC_X86_64_GHCjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_X86_64_GHC(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14RetCC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_X86_32_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_32_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList6\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList6\"},\n    {\"_ZZ15RetCC_X86CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList7\", \"RetCC_X86Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList7\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList4\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList4\"},\n    {\"_ZZ17RetCC_X86_32_FastjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList5\", \"RetCC_X86_32_Fast(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList5\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14RetCC_X86_64_CjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_X86_64_C(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZN4llvm12X86InstrInfoC1ERNS_16X86TargetMachineEE10OpTbl2Addr\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)::OpTbl2Addr\"},\n    {\"_ZZN4llvm12X86InstrInfoC1ERNS_16X86TargetMachineEE6OpTbl0\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)::OpTbl0\"},\n    {\"_ZZN4llvm12X86InstrInfoC1ERNS_16X86TargetMachineEE6OpTbl1\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)::OpTbl1\"},\n    {\"_ZZN4llvm12X86InstrInfoC1ERNS_16X86TargetMachineEE6OpTbl2\", \"llvm::X86InstrInfo::X86InstrInfo(llvm::X86TargetMachine&)::OpTbl2\"},\n    {\"_ZZNK12_GLOBAL__N_116X86MCCodeEmitter16EmitMemModRMByteERKN4llvm6MCInstEjjyRjRNS1_11raw_ostreamERNS1_15SmallVectorImplINS1_7MCFixupEEEE7SSTable\", \"(anonymous namespace)::X86MCCodeEmitter::EmitMemModRMByte(llvm::MCInst const&, unsigned int, unsigned int, unsigned long long, unsigned int&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&) const::SSTable\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE18GhcCalleeSavedRegs\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::GhcCalleeSavedRegs\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE20CalleeSavedRegs32Bit\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegs32Bit\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE22CalleeSavedRegs32EHRet\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegs32EHRet\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE20CalleeSavedRegs64Bit\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegs64Bit\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE22CalleeSavedRegs64EHRet\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegs64EHRet\"},\n    {\"_ZZNK4llvm15X86RegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE20CalleeSavedRegsWin64\", \"llvm::X86RegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegsWin64\"},\n    {\"_ZZN4llvm17X86ATTInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamEE6OpInfo\", \"llvm::X86ATTInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)::OpInfo\"},\n    {\"_ZZN4llvm17X86ATTInstPrinter15getRegisterNameEjE12RegAsmOffset\", \"llvm::X86ATTInstPrinter::getRegisterName(unsigned int)::RegAsmOffset\"},\n    {\"_ZZN4llvm17X86ATTInstPrinter18getInstructionNameEjE13InstAsmOffset\", \"llvm::X86ATTInstPrinter::getInstructionName(unsigned int)::InstAsmOffset\"},\n    {\"_ZZN4llvm19X86IntelInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamEE6OpInfo\", \"llvm::X86IntelInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)::OpInfo\"},\n    {\"_ZZN4llvm19X86IntelInstPrinter15getRegisterNameEjE12RegAsmOffset\", \"llvm::X86IntelInstPrinter::getRegisterName(unsigned int)::RegAsmOffset\"},\n    {\"_ZZN4llvm19X86IntelInstPrinter18getInstructionNameEjE13InstAsmOffset\", \"llvm::X86IntelInstPrinter::getInstructionName(unsigned int)::InstAsmOffset\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE15CalleeSavedRegs\", \"llvm::ARMBaseRegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::CalleeSavedRegs\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getCalleeSavedRegsEPKNS_15MachineFunctionEE21DarwinCalleeSavedRegs\", \"llvm::ARMBaseRegisterInfo::getCalleeSavedRegs(llvm::MachineFunction const*) const::DarwinCalleeSavedRegs\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven1\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven1\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd1\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd1\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven2\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven2\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd2\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd2\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven3\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven3\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd3\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd3\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven4\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven4\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd4\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd4\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven5\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven5\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd5\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd5\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE8GPREven6\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPREven6\"},\n    {\"_ZZNK4llvm19ARMBaseRegisterInfo18getAllocationOrderEPKNS_19TargetRegisterClassEjjRKNS_15MachineFunctionEE7GPROdd6\", \"llvm::ARMBaseRegisterInfo::getAllocationOrder(llvm::TargetRegisterClass const*, unsigned int, unsigned int, llvm::MachineFunction const&) const::GPROdd6\"},\n    {\"_ZZNK12_GLOBAL__N_114ARMCodeEmitter21getBinaryCodeForInstrERKN4llvm12MachineInstrEE8InstBits\", \"(anonymous namespace)::ARMCodeEmitter::getBinaryCodeForInstr(llvm::MachineInstr const&) const::InstBits\"},\n    {\"_ZZ11CC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZN4llvm13f64AssignAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE7RegList\", \"llvm::f64AssignAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::RegList\"},\n    {\"_ZZ14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEE9HiRegList\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)::HiRegList\"},\n    {\"_ZZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEE9LoRegList\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)::LoRegList\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE9HiRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::HiRegList\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE9LoRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::LoRegList\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE13ShadowRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::ShadowRegList\"},\n    {\"_ZZ22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes1\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel10SelectCodeEPN4llvm6SDNodeEE12MatcherTable\", \"(anonymous namespace)::ARMDAGToDAGISel::SelectCode(llvm::SDNode*)::MatcherTable\"},\n    {\"_ZZNK4llvm17ARMTargetLowering20LowerFormalArgumentsENS_7SDValueENS_11CallingConv2IDEbRKNS_15SmallVectorImplINS_3ISD8InputArgEEENS_8DebugLocERNS_12SelectionDAGERNS4_IS1_EEE10GPRArgRegs\", \"llvm::ARMTargetLowering::LowerFormalArguments(llvm::SDValue, llvm::CallingConv::ID, bool, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, llvm::DebugLoc, llvm::SelectionDAG&, llvm::SmallVectorImpl<llvm::SDValue>&) const::GPRArgRegs\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ19CC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE9HiRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::HiRegList\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE9LoRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::LoRegList\"},\n    {\"_ZZN4llvm14f64AssignAAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE13ShadowRegList\", \"llvm::f64AssignAAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::ShadowRegList\"},\n    {\"_ZZ22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ22RetCC_ARM_AAPCS_CommonjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_AAPCS_Common(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEE9HiRegList\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)::HiRegList\"},\n    {\"_ZZN4llvm12f64RetAssignERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEE9LoRegList\", \"llvm::f64RetAssign(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&)::LoRegList\"},\n    {\"_ZZ11CC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZN4llvm13f64AssignAPCSERjRNS_3MVTES2_RNS_11CCValAssign7LocInfoERNS_7CCStateEbE7RegList\", \"llvm::f64AssignAPCS(unsigned int&, llvm::MVT&, llvm::MVT&, llvm::CCValAssign::LocInfo&, llvm::CCState&, bool)::RegList\"},\n    {\"_ZZ14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ14RetCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ16CC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"CC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ19RetCC_ARM_AAPCS_VFPjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetCC_ARM_AAPCS_VFP(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ15FastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"FastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ15FastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"FastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ15FastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"FastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZ18RetFastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList1\", \"RetFastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList1\"},\n    {\"_ZZ18RetFastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList2\", \"RetFastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList2\"},\n    {\"_ZZ18RetFastCC_ARM_APCSjN4llvm3MVTES0_NS_11CCValAssign7LocInfoENS_3ISD10ArgFlagsTyERNS_7CCStateEE8RegList3\", \"RetFastCC_ARM_APCS(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)::RegList3\"},\n    {\"_ZZNK12_GLOBAL__N_116ARMMCCodeEmitter21getBinaryCodeForInstrERKN4llvm6MCInstERNS1_15SmallVectorImplINS1_7MCFixupEEEE8InstBits\", \"(anonymous namespace)::ARMMCCodeEmitter::getBinaryCodeForInstr(llvm::MCInst const&, llvm::SmallVectorImpl<llvm::MCFixup>&) const::InstBits\"},\n    {\"_ZZN12_GLOBAL__N_116Thumb2SizeReduce13ReduceSpecialERN4llvm17MachineBasicBlockEPNS1_12MachineInstrERKNS_11ReduceEntryEbE11NarrowEntry\", \"(anonymous namespace)::Thumb2SizeReduce::ReduceSpecial(llvm::MachineBasicBlock&, llvm::MachineInstr*, (anonymous namespace)::ReduceEntry const&, bool)::NarrowEntry\"},\n    {\"_ZZN12_GLOBAL__N_120SelectionDAGLegalize10ExpandNodeEPN4llvm6SDNodeERNS1_15SmallVectorImplINS1_7SDValueEEEE3Ops\", \"(anonymous namespace)::SelectionDAGLegalize::ExpandNode(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&)::Ops\"},\n    {\"_ZZN4llvm16DAGTypeLegalizer25ExpandFloatRes_XINT_TO_FPEPNS_6SDNodeERNS_7SDValueES4_E6TwoE32\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)::TwoE32\"},\n    {\"_ZZN4llvm16DAGTypeLegalizer25ExpandFloatRes_XINT_TO_FPEPNS_6SDNodeERNS_7SDValueES4_E6TwoE64\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)::TwoE64\"},\n    {\"_ZZN4llvm16DAGTypeLegalizer25ExpandFloatRes_XINT_TO_FPEPNS_6SDNodeERNS_7SDValueES4_E7TwoE128\", \"llvm::DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(llvm::SDNode*, llvm::SDValue&, llvm::SDValue&)::TwoE128\"},\n    {\"_ZZN4llvm16DAGTypeLegalizer24ExpandFloatOp_FP_TO_UINTEPNS_6SDNodeEE6TwoE31\", \"llvm::DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT(llvm::SDNode*)::TwoE31\"},\n    {\"_ZZ10LowerCTPOPRN4llvm11LLVMContextEPNS_5ValueEPNS_11InstructionEE10MaskValues\", \"LowerCTPOP(llvm::LLVMContext&, llvm::Value*, llvm::Instruction*)::MaskValues\"},\n    {\"_ZN4llvm24RegisterCoalescerLinkVarE\", \"llvm::RegisterCoalescerLinkVar\"},\n    {\"_ZN4llvm31SimpleRegisterCoalescingLinkVarE\", \"llvm::SimpleRegisterCoalescingLinkVar\"},\n    {\"_ZN4llvm16CallGraphLinkVarE\", \"llvm::CallGraphLinkVar\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE12MissingValueE\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::MissingValue\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEE12MissingValueE\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::MissingValue\"},\n    {\"_ZTSN4llvm5ValueE\", \"typeinfo name for llvm::Value\"},\n    {\"_ZTSN4llvm4TypeE\", \"typeinfo name for llvm::Type\"},\n    {\"_ZTSN4llvm24AssemblyAnnotationWriterE\", \"typeinfo name for llvm::AssemblyAnnotationWriter\"},\n    {\"_ZTSN4llvm10FoldingSetINS_17AttributeListImplEEE\", \"typeinfo name for llvm::FoldingSet<llvm::AttributeListImpl>\"},\n    {\"_ZTSN4llvm10BasicBlockE\", \"typeinfo name for llvm::BasicBlock\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_10BasicBlockEEE\", \"typeinfo name for llvm::ilist_node<llvm::BasicBlock>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_10BasicBlockEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::BasicBlock>\"},\n    {\"_ZTSN4llvm21ConstantAggregateZeroE\", \"typeinfo name for llvm::ConstantAggregateZero\"},\n    {\"_ZTSN4llvm19ConstantPointerNullE\", \"typeinfo name for llvm::ConstantPointerNull\"},\n    {\"_ZTSN4llvm12ConstantExprE\", \"typeinfo name for llvm::ConstantExpr\"},\n    {\"_ZTSN4llvm10UndefValueE\", \"typeinfo name for llvm::UndefValue\"},\n    {\"_ZTSN4llvm10ConstantFPE\", \"typeinfo name for llvm::ConstantFP\"},\n    {\"_ZTSN4llvm13ConstantArrayE\", \"typeinfo name for llvm::ConstantArray\"},\n    {\"_ZTSN4llvm14ConstantStructE\", \"typeinfo name for llvm::ConstantStruct\"},\n    {\"_ZTSN4llvm14ConstantVectorE\", \"typeinfo name for llvm::ConstantVector\"},\n    {\"_ZTSN4llvm12BlockAddressE\", \"typeinfo name for llvm::BlockAddress\"},\n    {\"_ZTSN4llvm8ConstantE\", \"typeinfo name for llvm::Constant\"},\n    {\"_ZTSN4llvm25GetElementPtrConstantExprE\", \"typeinfo name for llvm::GetElementPtrConstantExpr\"},\n    {\"_ZTSN4llvm11ConstantIntE\", \"typeinfo name for llvm::ConstantInt\"},\n    {\"_ZTSN4llvm19CompareConstantExprE\", \"typeinfo name for llvm::CompareConstantExpr\"},\n    {\"_ZTSN4llvm24ExtractValueConstantExprE\", \"typeinfo name for llvm::ExtractValueConstantExpr\"},\n    {\"_ZTSN4llvm23InsertValueConstantExprE\", \"typeinfo name for llvm::InsertValueConstantExpr\"},\n    {\"_ZTSN4llvm25ShuffleVectorConstantExprE\", \"typeinfo name for llvm::ShuffleVectorConstantExpr\"},\n    {\"_ZTSN4llvm25InsertElementConstantExprE\", \"typeinfo name for llvm::InsertElementConstantExpr\"},\n    {\"_ZTSN4llvm26ExtractElementConstantExprE\", \"typeinfo name for llvm::ExtractElementConstantExpr\"},\n    {\"_ZTSN4llvm18SelectConstantExprE\", \"typeinfo name for llvm::SelectConstantExpr\"},\n    {\"_ZTSN4llvm18BinaryConstantExprE\", \"typeinfo name for llvm::BinaryConstantExpr\"},\n    {\"_ZTSN4llvm17UnaryConstantExprE\", \"typeinfo name for llvm::UnaryConstantExpr\"},\n    {\"_ZTSN4llvm10DebugRecVHE\", \"typeinfo name for llvm::DebugRecVH\"},\n    {\"_ZTSN4llvm17DominatorTreeBaseINS_10BasicBlockEEE\", \"typeinfo name for llvm::DominatorTreeBase<llvm::BasicBlock>\"},\n    {\"_ZTSN4llvm13DominatorBaseINS_10BasicBlockEEE\", \"typeinfo name for llvm::DominatorBase<llvm::BasicBlock>\"},\n    {\"_ZTSN4llvm13DominatorTreeE\", \"typeinfo name for llvm::DominatorTree\"},\n    {\"_ZZN4llvm9Intrinsic12isOverloadedENS0_2IDEE6OTable\", \"llvm::Intrinsic::isOverloaded(llvm::Intrinsic::ID)::OTable\"},\n    {\"_ZTSN4llvm8FunctionE\", \"typeinfo name for llvm::Function\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_8FunctionEEE\", \"typeinfo name for llvm::ilist_node<llvm::Function>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_8FunctionEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::Function>\"},\n    {\"_ZTSN4llvm8ArgumentE\", \"typeinfo name for llvm::Argument\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_8ArgumentEEE\", \"typeinfo name for llvm::ilist_node<llvm::Argument>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_8ArgumentEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::Argument>\"},\n    {\"_ZTSN4llvm14GVMaterializerE\", \"typeinfo name for llvm::GVMaterializer\"},\n    {\"_ZTSN4llvm11GlobalValueE\", \"typeinfo name for llvm::GlobalValue\"},\n    {\"_ZTSN4llvm14GlobalVariableE\", \"typeinfo name for llvm::GlobalVariable\"},\n    {\"_ZTSN4llvm11GlobalAliasE\", \"typeinfo name for llvm::GlobalAlias\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_14GlobalVariableEEE\", \"typeinfo name for llvm::ilist_node<llvm::GlobalVariable>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_14GlobalVariableEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::GlobalVariable>\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_11GlobalAliasEEE\", \"typeinfo name for llvm::ilist_node<llvm::GlobalAlias>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_11GlobalAliasEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::GlobalAlias>\"},\n    {\"_ZTSN4llvm9InlineAsmE\", \"typeinfo name for llvm::InlineAsm\"},\n    {\"_ZTSN4llvm11InstructionE\", \"typeinfo name for llvm::Instruction\"},\n    {\"_ZTSN4llvm4UserE\", \"typeinfo name for llvm::User\"},\n    {\"_ZTSN4llvm10ilist_nodeINS_11InstructionEEE\", \"typeinfo name for llvm::ilist_node<llvm::Instruction>\"},\n    {\"_ZTSN4llvm15ilist_half_nodeINS_11InstructionEEE\", \"typeinfo name for llvm::ilist_half_node<llvm::Instruction>\"},\n    {\"_ZZN4llvm8CastInst20isEliminableCastPairENS_11Instruction7CastOpsES2_PKNS_4TypeES5_S5_S5_E11CastResults\", \"llvm::CastInst::isEliminableCastPair(llvm::Instruction::CastOps, llvm::Instruction::CastOps, llvm::Type const*, llvm::Type const*, llvm::Type const*, llvm::Type const*)::CastResults\"},\n    {\"_ZTSN4llvm14TerminatorInstE\", \"typeinfo name for llvm::TerminatorInst\"},\n    {\"_ZTSN4llvm16UnaryInstructionE\", \"typeinfo name for llvm::UnaryInstruction\"},\n    {\"_ZTSN4llvm17GetElementPtrInstE\", \"typeinfo name for llvm::GetElementPtrInst\"},\n    {\"_ZTSN4llvm7CmpInstE\", \"typeinfo name for llvm::CmpInst\"},\n    {\"_ZTSN4llvm8ICmpInstE\", \"typeinfo name for llvm::ICmpInst\"},\n    {\"_ZTSN4llvm8FCmpInstE\", \"typeinfo name for llvm::FCmpInst\"},\n    {\"_ZTSN4llvm8CallInstE\", \"typeinfo name for llvm::CallInst\"},\n    {\"_ZTSN4llvm10SelectInstE\", \"typeinfo name for llvm::SelectInst\"},\n    {\"_ZTSN4llvm9VAArgInstE\", \"typeinfo name for llvm::VAArgInst\"},\n    {\"_ZTSN4llvm18ExtractElementInstE\", \"typeinfo name for llvm::ExtractElementInst\"},\n    {\"_ZTSN4llvm17InsertElementInstE\", \"typeinfo name for llvm::InsertElementInst\"},\n    {\"_ZTSN4llvm16ExtractValueInstE\", \"typeinfo name for llvm::ExtractValueInst\"},\n    {\"_ZTSN4llvm15InsertValueInstE\", \"typeinfo name for llvm::InsertValueInst\"},\n    {\"_ZTSN4llvm7PHINodeE\", \"typeinfo name for llvm::PHINode\"},\n    {\"_ZTSN4llvm10ReturnInstE\", \"typeinfo name for llvm::ReturnInst\"},\n    {\"_ZTSN4llvm10BranchInstE\", \"typeinfo name for llvm::BranchInst\"},\n    {\"_ZTSN4llvm10SwitchInstE\", \"typeinfo name for llvm::SwitchInst\"},\n    {\"_ZTSN4llvm14IndirectBrInstE\", \"typeinfo name for llvm::IndirectBrInst\"},\n    {\"_ZTSN4llvm11BitCastInstE\", \"typeinfo name for llvm::BitCastInst\"},\n    {\"_ZTSN4llvm10InvokeInstE\", \"typeinfo name for llvm::InvokeInst\"},\n    {\"_ZTSN4llvm10UnwindInstE\", \"typeinfo name for llvm::UnwindInst\"},\n    {\"_ZTSN4llvm15UnreachableInstE\", \"typeinfo name for llvm::UnreachableInst\"},\n    {\"_ZTSN4llvm10AllocaInstE\", \"typeinfo name for llvm::AllocaInst\"},\n    {\"_ZTSN4llvm8LoadInstE\", \"typeinfo name for llvm::LoadInst\"},\n    {\"_ZTSN4llvm9StoreInstE\", \"typeinfo name for llvm::StoreInst\"},\n    {\"_ZTSN4llvm17ShuffleVectorInstE\", \"typeinfo name for llvm::ShuffleVectorInst\"},\n    {\"_ZTSN4llvm14BinaryOperatorE\", \"typeinfo name for llvm::BinaryOperator\"},\n    {\"_ZTSN4llvm9TruncInstE\", \"typeinfo name for llvm::TruncInst\"},\n    {\"_ZTSN4llvm8ZExtInstE\", \"typeinfo name for llvm::ZExtInst\"},\n    {\"_ZTSN4llvm8SExtInstE\", \"typeinfo name for llvm::SExtInst\"},\n    {\"_ZTSN4llvm11FPTruncInstE\", \"typeinfo name for llvm::FPTruncInst\"},\n    {\"_ZTSN4llvm9FPExtInstE\", \"typeinfo name for llvm::FPExtInst\"},\n    {\"_ZTSN4llvm10UIToFPInstE\", \"typeinfo name for llvm::UIToFPInst\"},\n    {\"_ZTSN4llvm10SIToFPInstE\", \"typeinfo name for llvm::SIToFPInst\"},\n    {\"_ZTSN4llvm10FPToUIInstE\", \"typeinfo name for llvm::FPToUIInst\"},\n    {\"_ZTSN4llvm10FPToSIInstE\", \"typeinfo name for llvm::FPToSIInst\"},\n    {\"_ZTSN4llvm12PtrToIntInstE\", \"typeinfo name for llvm::PtrToIntInst\"},\n    {\"_ZTSN4llvm12IntToPtrInstE\", \"typeinfo name for llvm::IntToPtrInst\"},\n    {\"_ZTSN4llvm8CastInstE\", \"typeinfo name for llvm::CastInst\"},\n    {\"_ZTSN4llvm10FoldingSetINS_6MDNodeEEE\", \"typeinfo name for llvm::FoldingSet<llvm::MDNode>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EEE\", \"typeinfo name for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EEE\", \"typeinfo name for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>\"},\n    {\"_ZTSN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EEE\", \"typeinfo name for llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>\"},\n    {\"_ZTSN4llvm11IntegerTypeE\", \"typeinfo name for llvm::IntegerType\"},\n    {\"_ZTSN4llvm11DerivedTypeE\", \"typeinfo name for llvm::DerivedType\"},\n    {\"_ZTSN4llvm13MDNodeOperandE\", \"typeinfo name for llvm::MDNodeOperand\"},\n    {\"_ZTSN4llvm6MDNodeE\", \"typeinfo name for llvm::MDNode\"},\n    {\"_ZTSN4llvm15ValueHandleBaseE\", \"typeinfo name for llvm::ValueHandleBase\"},\n    {\"_ZTSN4llvm14FoldingSetImpl4NodeE\", \"typeinfo name for llvm::FoldingSetImpl::Node\"},\n    {\"_ZTSN4llvm8MDStringE\", \"typeinfo name for llvm::MDString\"},\n    {\"_ZTSN4llvm4PassE\", \"typeinfo name for llvm::Pass\"},\n    {\"_ZTSN4llvm10ModulePassE\", \"typeinfo name for llvm::ModulePass\"},\n    {\"_ZTSN4llvm13ImmutablePassE\", \"typeinfo name for llvm::ImmutablePass\"},\n    {\"_ZTSN4llvm12FunctionPassE\", \"typeinfo name for llvm::FunctionPass\"},\n    {\"_ZTSN4llvm14BasicBlockPassE\", \"typeinfo name for llvm::BasicBlockPass\"},\n    {\"_ZTSN4llvm24PassRegistrationListenerE\", \"typeinfo name for llvm::PassRegistrationListener\"},\n    {\"_ZTSN4llvm14PassNameParserE\", \"typeinfo name for llvm::PassNameParser\"},\n    {\"_ZTSN12_GLOBAL__N_116GetCFGOnlyPassesE\", \"typeinfo name for (anonymous namespace)::GetCFGOnlyPasses\"},\n    {\"_ZTSN4llvm2cl6parserIPKNS_8PassInfoEEE\", \"typeinfo name for llvm::cl::parser<llvm::PassInfo const*>\"},\n    {\"_ZTSN4llvm27PassManagerPrettyStackEntryE\", \"typeinfo name for llvm::PassManagerPrettyStackEntry\"},\n    {\"_ZTSN4llvm13PMDataManagerE\", \"typeinfo name for llvm::PMDataManager\"},\n    {\"_ZTSN4llvm13FPPassManagerE\", \"typeinfo name for llvm::FPPassManager\"},\n    {\"_ZTSN4llvm17PMTopLevelManagerE\", \"typeinfo name for llvm::PMTopLevelManager\"},\n    {\"_ZTSN4llvm13MPPassManagerE\", \"typeinfo name for llvm::MPPassManager\"},\n    {\"_ZTSN4llvm15PassManagerBaseE\", \"typeinfo name for llvm::PassManagerBase\"},\n    {\"_ZTSN4llvm19FunctionPassManagerE\", \"typeinfo name for llvm::FunctionPassManager\"},\n    {\"_ZTSN4llvm11PassManagerE\", \"typeinfo name for llvm::PassManager\"},\n    {\"_ZTSN12_GLOBAL__N_113BBPassManagerE\", \"typeinfo name for (anonymous namespace)::BBPassManager\"},\n    {\"_ZTSN4llvm2cl3optIbLb1ENS0_6parserIbEEEE\", \"typeinfo name for llvm::cl::opt<bool, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIbLb1ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<bool, true, false>\"},\n    {\"_ZTSN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEEE\", \"typeinfo name for llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>\"},\n    {\"_ZTSN4llvm2cl12list_storageIPKNS_8PassInfoEbEE\", \"typeinfo name for llvm::cl::list_storage<llvm::PassInfo const*, bool>\"},\n    {\"_ZTSSt6vectorIPKN4llvm8PassInfoESaIS3_EE\", \"typeinfo name for std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> >\"},\n    {\"_ZTSSt12_Vector_baseIPKN4llvm8PassInfoESaIS3_EE\", \"typeinfo name for std::_Vector_base<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> >\"},\n    {\"_ZTSN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEEE\", \"typeinfo name for llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageINS_14PassDebugLevelELb0ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<llvm::PassDebugLevel, false, false>\"},\n    {\"_ZTSN4llvm2cl6parserINS_14PassDebugLevelEEE\", \"typeinfo name for llvm::cl::parser<llvm::PassDebugLevel>\"},\n    {\"_ZTSN4llvm15PassManagerImplE\", \"typeinfo name for llvm::PassManagerImpl\"},\n    {\"_ZTSN4llvm23FunctionPassManagerImplE\", \"typeinfo name for llvm::FunctionPassManagerImpl\"},\n    {\"_ZTSN12_GLOBAL__N_117PrintFunctionPassE\", \"typeinfo name for (anonymous namespace)::PrintFunctionPass\"},\n    {\"_ZTSN12_GLOBAL__N_115PrintModulePassE\", \"typeinfo name for (anonymous namespace)::PrintModulePass\"},\n    {\"_ZTSN4llvm16AbstractTypeUserE\", \"typeinfo name for llvm::AbstractTypeUser\"},\n    {\"_ZTSN4llvm14SequentialTypeE\", \"typeinfo name for llvm::SequentialType\"},\n    {\"_ZTSN4llvm12FunctionTypeE\", \"typeinfo name for llvm::FunctionType\"},\n    {\"_ZTSN4llvm10StructTypeE\", \"typeinfo name for llvm::StructType\"},\n    {\"_ZTSN4llvm9ArrayTypeE\", \"typeinfo name for llvm::ArrayType\"},\n    {\"_ZTSN4llvm10VectorTypeE\", \"typeinfo name for llvm::VectorType\"},\n    {\"_ZTSN4llvm11PointerTypeE\", \"typeinfo name for llvm::PointerType\"},\n    {\"_ZTSN4llvm13CompositeTypeE\", \"typeinfo name for llvm::CompositeType\"},\n    {\"_ZTSN4llvm10OpaqueTypeE\", \"typeinfo name for llvm::OpaqueType\"},\n    {\"_ZTSN4llvm15TypeSymbolTableE\", \"typeinfo name for llvm::TypeSymbolTable\"},\n    {\"_ZZN4llvm3Use8initTagsEPS0_S1_E4tags\", \"llvm::Use::initTags(llvm::Use*, llvm::Use*)::tags\"},\n    {\"_ZTSN4llvm10CallbackVHE\", \"typeinfo name for llvm::CallbackVH\"},\n    {\"_ZTSN12_GLOBAL__N_18VerifierE\", \"typeinfo name for (anonymous namespace)::Verifier\"},\n    {\"_ZTSN4llvm11InstVisitorIN12_GLOBAL__N_18VerifierEvEE\", \"typeinfo name for llvm::InstVisitor<(anonymous namespace)::Verifier, void>\"},\n    {\"_ZTSN12_GLOBAL__N_17TypeSetE\", \"typeinfo name for (anonymous namespace)::TypeSet\"},\n    {\"_ZTSN12_GLOBAL__N_111PreVerifierE\", \"typeinfo name for (anonymous namespace)::PreVerifier\"},\n    {\"_ZZN4llvm14ARMInstPrinter16printInstructionEPKNS_6MCInstERNS_11raw_ostreamEE6OpInfo\", \"llvm::ARMInstPrinter::printInstruction(llvm::MCInst const*, llvm::raw_ostream&)::OpInfo\"},\n    {\"_ZZN4llvm14ARMInstPrinter15getRegisterNameEjE12RegAsmOffset\", \"llvm::ARMInstPrinter::getRegisterName(unsigned int)::RegAsmOffset\"},\n    {\"_ZZN4llvm14ARMInstPrinter18getInstructionNameEjE13InstAsmOffset\", \"llvm::ARMInstPrinter::getInstructionName(unsigned int)::InstAsmOffset\"},\n    {\"_ZZN4llvm14MCObjectWriter10WriteZerosEjE5Zeros\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)::Zeros\"},\n    {\"_ZZN4llvm14MCObjectWriter10WriteZerosEjE5Zeros\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)::Zeros\"},\n    {\"_ZZN4llvm14MCObjectWriter10WriteZerosEjE5Zeros\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)::Zeros\"},\n    {\"_ZZN4llvm14MCObjectWriter10WriteZerosEjE5Zeros\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)::Zeros\"},\n    {\"_ZZN4llvm14MCObjectWriter10WriteZerosEjE5Zeros\", \"llvm::MCObjectWriter::WriteZeros(unsigned int)::Zeros\"},\n    {\"_ZZN4llvm7APFloat28roundSignificandWithExponentEPKyjiNS0_12roundingModeEE13calcSemantics\", \"llvm::APFloat::roundSignificandWithExponent(unsigned long long const*, unsigned int, int, llvm::APFloat::roundingMode)::calcSemantics\"},\n    {\"_ZZ8powerOf5PyjE16firstEightPowers\", \"powerOf5(unsigned long long*, unsigned int)::firstEightPowers\"},\n    {\"_ZZNK4llvm5APInt4sqrtEvE7results\", \"llvm::APInt::sqrt() const::results\"},\n    {\"_ZZNK4llvm5APInt8toStringERNS_15SmallVectorImplIcEEjbE6Digits\", \"llvm::APInt::toString(llvm::SmallVectorImpl<char>&, unsigned int, bool) const::Digits\"},\n    {\"_ZTSN4llvm13SlabAllocatorE\", \"typeinfo name for llvm::SlabAllocator\"},\n    {\"_ZTSN4llvm19MallocSlabAllocatorE\", \"typeinfo name for llvm::MallocSlabAllocator\"},\n    {\"_ZTSN4llvm2cl6OptionE\", \"typeinfo name for llvm::cl::Option\"},\n    {\"_ZTSN4llvm2cl19generic_parser_baseE\", \"typeinfo name for llvm::cl::generic_parser_base\"},\n    {\"_ZTSN4llvm2cl17basic_parser_implE\", \"typeinfo name for llvm::cl::basic_parser_impl\"},\n    {\"_ZTSN4llvm2cl6parserIbEE\", \"typeinfo name for llvm::cl::parser<bool>\"},\n    {\"_ZTSN4llvm2cl6parserINS0_13boolOrDefaultEEE\", \"typeinfo name for llvm::cl::parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTSN4llvm2cl6parserIiEE\", \"typeinfo name for llvm::cl::parser<int>\"},\n    {\"_ZTSN4llvm2cl6parserIjEE\", \"typeinfo name for llvm::cl::parser<unsigned int>\"},\n    {\"_ZTSN4llvm2cl6parserIdEE\", \"typeinfo name for llvm::cl::parser<double>\"},\n    {\"_ZTSN4llvm2cl6parserIfEE\", \"typeinfo name for llvm::cl::parser<float>\"},\n    {\"_ZTSN4llvm2cl6parserISsEE\", \"typeinfo name for llvm::cl::parser<std::string>\"},\n    {\"_ZTSN4llvm2cl6parserIcEE\", \"typeinfo name for llvm::cl::parser<char>\"},\n    {\"_ZTSN4llvm2cl5aliasE\", \"typeinfo name for llvm::cl::alias\"},\n    {\"_ZTSN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEEE\", \"typeinfo name for llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIN12_GLOBAL__N_114VersionPrinterELb1ELb1EEE\", \"typeinfo name for llvm::cl::opt_storage<(anonymous namespace)::VersionPrinter, true, true>\"},\n    {\"_ZTSN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEEE\", \"typeinfo name for llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIN12_GLOBAL__N_111HelpPrinterELb1ELb1EEE\", \"typeinfo name for llvm::cl::opt_storage<(anonymous namespace)::HelpPrinter, true, true>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIbEE\", \"typeinfo name for llvm::cl::basic_parser<bool>\"},\n    {\"_ZTSN4llvm2cl12basic_parserINS0_13boolOrDefaultEEE\", \"typeinfo name for llvm::cl::basic_parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIiEE\", \"typeinfo name for llvm::cl::basic_parser<int>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIjEE\", \"typeinfo name for llvm::cl::basic_parser<unsigned int>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIdEE\", \"typeinfo name for llvm::cl::basic_parser<double>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIfEE\", \"typeinfo name for llvm::cl::basic_parser<float>\"},\n    {\"_ZTSN4llvm2cl12basic_parserISsEE\", \"typeinfo name for llvm::cl::basic_parser<std::string>\"},\n    {\"_ZTSN4llvm2cl12basic_parserIcEE\", \"typeinfo name for llvm::cl::basic_parser<char>\"},\n    {\"_ZTSN4llvm2cl3optIjLb0ENS0_6parserIjEEEE\", \"typeinfo name for llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIjLb0ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<unsigned int, false, false>\"},\n    {\"_ZTSN4llvm2cl3optIiLb0ENS0_6parserIiEEEE\", \"typeinfo name for llvm::cl::opt<int, false, llvm::cl::parser<int> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIiLb0ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<int, false, false>\"},\n    {\"_ZTSN4llvm2cl3optISsLb0ENS0_6parserISsEEEE\", \"typeinfo name for llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageISsLb0ELb1EEE\", \"typeinfo name for llvm::cl::opt_storage<std::string, false, true>\"},\n    {\"_ZTSSs\", \"typeinfo name for std::string\"},\n    {\"_ZTSN4llvm2cl3optIcLb0ENS0_6parserIcEEEE\", \"typeinfo name for llvm::cl::opt<char, false, llvm::cl::parser<char> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIcLb0ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<char, false, false>\"},\n    {\"_ZTSN4llvm2cl3optIbLb0ENS0_6parserIbEEEE\", \"typeinfo name for llvm::cl::opt<bool, false, llvm::cl::parser<bool> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageIbLb0ELb0EEE\", \"typeinfo name for llvm::cl::opt_storage<bool, false, false>\"},\n    {\"_ZTSN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEEE\", \"typeinfo name for llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>\"},\n    {\"_ZTSN4llvm14FoldingSetImplE\", \"typeinfo name for llvm::FoldingSetImpl\"},\n    {\"_ZTSN4llvm21formatted_raw_ostreamE\", \"typeinfo name for llvm::formatted_raw_ostream\"},\n    {\"_ZTSN4llvm12MemoryBufferE\", \"typeinfo name for llvm::MemoryBuffer\"},\n    {\"_ZTSN12_GLOBAL__N_120MemoryBufferMMapFileE\", \"typeinfo name for (anonymous namespace)::MemoryBufferMMapFile\"},\n    {\"_ZTSN12_GLOBAL__N_115MemoryBufferMemE\", \"typeinfo name for (anonymous namespace)::MemoryBufferMem\"},\n    {\"_ZN4llvm3sys13PathSeparatorE\", \"llvm::sys::PathSeparator\"},\n    {\"_ZTSN4llvm21PrettyStackTraceEntryE\", \"typeinfo name for llvm::PrettyStackTraceEntry\"},\n    {\"_ZTSN4llvm22PrettyStackTraceStringE\", \"typeinfo name for llvm::PrettyStackTraceString\"},\n    {\"_ZTSN4llvm23PrettyStackTraceProgramE\", \"typeinfo name for llvm::PrettyStackTraceProgram\"},\n    {\"_ZTSN4llvm3sys11ThreadLocalIKNS_21PrettyStackTraceEntryEEE\", \"typeinfo name for llvm::sys::ThreadLocal<llvm::PrettyStackTraceEntry const>\"},\n    {\"_ZN4llvm9StringRef4nposE\", \"llvm::StringRef::npos\"},\n    {\"_ZTSN4llvm3sys15ThreadLocalImplE\", \"typeinfo name for llvm::sys::ThreadLocalImpl\"},\n    {\"_ZTSN4llvm14format_object1IxEE\", \"typeinfo name for llvm::format_object1<long long>\"},\n    {\"_ZTSN4llvm14format_object1IdEE\", \"typeinfo name for llvm::format_object1<double>\"},\n    {\"_ZTSN4llvm2cl3optISsLb1ENS0_6parserISsEEEE\", \"typeinfo name for llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >\"},\n    {\"_ZTSN4llvm2cl11opt_storageISsLb1ELb1EEE\", \"typeinfo name for llvm::cl::opt_storage<std::string, true, true>\"},\n    {\"_ZZN4llvm11raw_ostream6indentEjE6Spaces\", \"llvm::raw_ostream::indent(unsigned int)::Spaces\"},\n    {\"_ZTSN4llvm11raw_ostreamE\", \"typeinfo name for llvm::raw_ostream\"},\n    {\"_ZTSN4llvm18raw_string_ostreamE\", \"typeinfo name for llvm::raw_string_ostream\"},\n    {\"_ZTSN4llvm16raw_null_ostreamE\", \"typeinfo name for llvm::raw_null_ostream\"},\n    {\"_ZTSN4llvm18format_object_baseE\", \"typeinfo name for llvm::format_object_base\"},\n    {\"_ZTSN4llvm14raw_fd_ostreamE\", \"typeinfo name for llvm::raw_fd_ostream\"},\n    {\"_ZTSN4llvm19raw_svector_ostreamE\", \"typeinfo name for llvm::raw_svector_ostream\"},\n    {\"_ZTSN4llvm14error_categoryE\", \"typeinfo name for llvm::error_category\"},\n    {\"_ZTSN4llvm11_do_messageE\", \"typeinfo name for llvm::_do_message\"},\n    {\"_ZTSN4llvm23_generic_error_categoryE\", \"typeinfo name for llvm::_generic_error_category\"},\n    {\"_ZTSN4llvm22_system_error_categoryE\", \"typeinfo name for llvm::_system_error_category\"},\n    {\"_ZTVN12_GLOBAL__N_110ASTDumpXMLE\", \"vtable for (anonymous namespace)::ASTDumpXML\"},\n    {\"_ZTVN12_GLOBAL__N_117InheritanceViewerE\", \"vtable for (anonymous namespace)::InheritanceViewer\"},\n    {\"_ZTVN12_GLOBAL__N_118DeclContextPrinterE\", \"vtable for (anonymous namespace)::DeclContextPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_19ASTViewerE\", \"vtable for (anonymous namespace)::ASTViewer\"},\n    {\"_ZTVN12_GLOBAL__N_113ASTPrinterXMLE\", \"vtable for (anonymous namespace)::ASTPrinterXML\"},\n    {\"_ZTVN12_GLOBAL__N_110ASTPrinterE\", \"vtable for (anonymous namespace)::ASTPrinter\"},\n    {\"_ZTVN5clang14ASTMergeActionE\", \"vtable for clang::ASTMergeAction\"},\n    {\"_ZTVN12_GLOBAL__N_129AugmentedCodeCompleteConsumerE\", \"vtable for (anonymous namespace)::AugmentedCodeCompleteConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_122StoredDiagnosticClientE\", \"vtable for (anonymous namespace)::StoredDiagnosticClient\"},\n    {\"_ZTVN12_GLOBAL__N_124PrecompilePreambleActionE\", \"vtable for (anonymous namespace)::PrecompilePreambleAction\"},\n    {\"_ZTVN12_GLOBAL__N_126PrecompilePreambleConsumerE\", \"vtable for (anonymous namespace)::PrecompilePreambleConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_125TopLevelDeclTrackerActionE\", \"vtable for (anonymous namespace)::TopLevelDeclTrackerAction\"},\n    {\"_ZTVN12_GLOBAL__N_127TopLevelDeclTrackerConsumerE\", \"vtable for (anonymous namespace)::TopLevelDeclTrackerConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_116ASTInfoCollectorE\", \"vtable for (anonymous namespace)::ASTInfoCollector\"},\n    {\"_ZTVN5clang14BoostConActionE\", \"vtable for clang::BoostConAction\"},\n    {\"_ZTVN12_GLOBAL__N_119BoostConASTConsumerE\", \"vtable for (anonymous namespace)::BoostConASTConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_112StatListenerE\", \"vtable for (anonymous namespace)::StatListener\"},\n    {\"_ZTVN12_GLOBAL__N_122DependencyFileCallbackE\", \"vtable for (anonymous namespace)::DependencyFileCallback\"},\n    {\"_ZTVN5clang14FrontendActionE\", \"vtable for clang::FrontendAction\"},\n    {\"_ZTVN5clang17ASTFrontendActionE\", \"vtable for clang::ASTFrontendAction\"},\n    {\"_ZTVN5clang26PreprocessorFrontendActionE\", \"vtable for clang::PreprocessorFrontendAction\"},\n    {\"_ZTVN12_GLOBAL__N_124DeserializedDeclsCheckerE\", \"vtable for (anonymous namespace)::DeserializedDeclsChecker\"},\n    {\"_ZTVN12_GLOBAL__N_123DeserializedDeclsDumperE\", \"vtable for (anonymous namespace)::DeserializedDeclsDumper\"},\n    {\"_ZTVN5clang14InitOnlyActionE\", \"vtable for clang::InitOnlyAction\"},\n    {\"_ZTVN5clang14ASTPrintActionE\", \"vtable for clang::ASTPrintAction\"},\n    {\"_ZTVN5clang17ASTPrintXMLActionE\", \"vtable for clang::ASTPrintXMLAction\"},\n    {\"_ZTVN5clang13ASTDumpActionE\", \"vtable for clang::ASTDumpAction\"},\n    {\"_ZTVN5clang16ASTDumpXMLActionE\", \"vtable for clang::ASTDumpXMLAction\"},\n    {\"_ZTVN5clang13ASTViewActionE\", \"vtable for clang::ASTViewAction\"},\n    {\"_ZTVN5clang22DeclContextPrintActionE\", \"vtable for clang::DeclContextPrintAction\"},\n    {\"_ZTVN5clang17GeneratePCHActionE\", \"vtable for clang::GeneratePCHAction\"},\n    {\"_ZTVN5clang21InheritanceViewActionE\", \"vtable for clang::InheritanceViewAction\"},\n    {\"_ZTVN5clang16SyntaxOnlyActionE\", \"vtable for clang::SyntaxOnlyAction\"},\n    {\"_ZTVN5clang19PrintPreambleActionE\", \"vtable for clang::PrintPreambleAction\"},\n    {\"_ZTVN5clang19DumpRawTokensActionE\", \"vtable for clang::DumpRawTokensAction\"},\n    {\"_ZTVN5clang16DumpTokensActionE\", \"vtable for clang::DumpTokensAction\"},\n    {\"_ZTVN5clang17GeneratePTHActionE\", \"vtable for clang::GeneratePTHAction\"},\n    {\"_ZTVN5clang20PreprocessOnlyActionE\", \"vtable for clang::PreprocessOnlyAction\"},\n    {\"_ZTVN5clang23PrintPreprocessedActionE\", \"vtable for clang::PrintPreprocessedAction\"},\n    {\"_ZTVN12_GLOBAL__N_122HeaderIncludesCallbackE\", \"vtable for (anonymous namespace)::HeaderIncludesCallback\"},\n    {\"_ZTVN5clang35MultiplexASTDeserializationListenerE\", \"vtable for clang::MultiplexASTDeserializationListener\"},\n    {\"_ZTVN5clang28MultiplexASTMutationListenerE\", \"vtable for clang::MultiplexASTMutationListener\"},\n    {\"_ZTVN5clang17MultiplexConsumerE\", \"vtable for clang::MultiplexConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_120UnknownPragmaHandlerE\", \"vtable for (anonymous namespace)::UnknownPragmaHandler\"},\n    {\"_ZTVN12_GLOBAL__N_124PrintPPOutputPPCallbacksE\", \"vtable for (anonymous namespace)::PrintPPOutputPPCallbacks\"},\n    {\"_ZTVN5clang20TextDiagnosticBufferE\", \"vtable for clang::TextDiagnosticBuffer\"},\n    {\"_ZTVN5clang21TextDiagnosticPrinterE\", \"vtable for clang::TextDiagnosticPrinter\"},\n    {\"_ZTVN5clang23VerifyDiagnosticsClientE\", \"vtable for clang::VerifyDiagnosticsClient\"},\n    {\"_ZTVN12_GLOBAL__N_117StandardDirectiveE\", \"vtable for (anonymous namespace)::StandardDirective\"},\n    {\"_ZTVN12_GLOBAL__N_19DirectiveE\", \"vtable for (anonymous namespace)::Directive\"},\n    {\"_ZTVN12_GLOBAL__N_114RegexDirectiveE\", \"vtable for (anonymous namespace)::RegexDirective\"},\n    {\"_ZTVN5clang6driver6ActionE\", \"vtable for clang::driver::Action\"},\n    {\"_ZTVN5clang6driver7ArgListE\", \"vtable for clang::driver::ArgList\"},\n    {\"_ZTVN5clang6driver12InputArgListE\", \"vtable for clang::driver::InputArgList\"},\n    {\"_ZTVN5clang6driver14DerivedArgListE\", \"vtable for clang::driver::DerivedArgList\"},\n    {\"_ZTVN5clang6driver8HostInfoE\", \"vtable for clang::driver::HostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115UnknownHostInfoE\", \"vtable for (anonymous namespace)::UnknownHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113MinGWHostInfoE\", \"vtable for (anonymous namespace)::MinGWHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115WindowsHostInfoE\", \"vtable for (anonymous namespace)::WindowsHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_111TCEHostInfoE\", \"vtable for (anonymous namespace)::TCEHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113LinuxHostInfoE\", \"vtable for (anonymous namespace)::LinuxHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117DragonFlyHostInfoE\", \"vtable for (anonymous namespace)::DragonFlyHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113MinixHostInfoE\", \"vtable for (anonymous namespace)::MinixHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114NetBSDHostInfoE\", \"vtable for (anonymous namespace)::NetBSDHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115FreeBSDHostInfoE\", \"vtable for (anonymous namespace)::FreeBSDHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115OpenBSDHostInfoE\", \"vtable for (anonymous namespace)::OpenBSDHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114DarwinHostInfoE\", \"vtable for (anonymous namespace)::DarwinHostInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116AuroraUXHostInfoE\", \"vtable for (anonymous namespace)::AuroraUXHostInfo\"},\n    {\"_ZTVN5clang6driver3JobE\", \"vtable for clang::driver::Job\"},\n    {\"_ZTVN5clang6driver7JobListE\", \"vtable for clang::driver::JobList\"},\n    {\"_ZTVN5clang6driver6OptionE\", \"vtable for clang::driver::Option\"},\n    {\"_ZTVN5clang6driver11OptionGroupE\", \"vtable for clang::driver::OptionGroup\"},\n    {\"_ZTVN5clang6driver11InputOptionE\", \"vtable for clang::driver::InputOption\"},\n    {\"_ZTVN5clang6driver13UnknownOptionE\", \"vtable for clang::driver::UnknownOption\"},\n    {\"_ZTVN5clang6driver10FlagOptionE\", \"vtable for clang::driver::FlagOption\"},\n    {\"_ZTVN5clang6driver12JoinedOptionE\", \"vtable for clang::driver::JoinedOption\"},\n    {\"_ZTVN5clang6driver17CommaJoinedOptionE\", \"vtable for clang::driver::CommaJoinedOption\"},\n    {\"_ZTVN5clang6driver14SeparateOptionE\", \"vtable for clang::driver::SeparateOption\"},\n    {\"_ZTVN5clang6driver14MultiArgOptionE\", \"vtable for clang::driver::MultiArgOption\"},\n    {\"_ZTVN5clang6driver22JoinedOrSeparateOptionE\", \"vtable for clang::driver::JoinedOrSeparateOption\"},\n    {\"_ZTVN5clang6driver23JoinedAndSeparateOptionE\", \"vtable for clang::driver::JoinedAndSeparateOption\"},\n    {\"_ZTVN5clang6driver4ToolE\", \"vtable for clang::driver::Tool\"},\n    {\"_ZTVN5clang6driver9ToolChainE\", \"vtable for clang::driver::ToolChain\"},\n    {\"_ZTVN5clang6driver10toolchains6DarwinE\", \"vtable for clang::driver::toolchains::Darwin\"},\n    {\"_ZTVN5clang6driver10toolchains9DarwinGCCE\", \"vtable for clang::driver::toolchains::DarwinGCC\"},\n    {\"_ZTVN5clang6driver10toolchains11DarwinClangE\", \"vtable for clang::driver::toolchains::DarwinClang\"},\n    {\"_ZTVN5clang6driver10toolchains11Generic_GCCE\", \"vtable for clang::driver::toolchains::Generic_GCC\"},\n    {\"_ZTVN5clang6driver10toolchains12TCEToolChainE\", \"vtable for clang::driver::toolchains::TCEToolChain\"},\n    {\"_ZTVN5clang6driver10toolchains7OpenBSDE\", \"vtable for clang::driver::toolchains::OpenBSD\"},\n    {\"_ZTVN5clang6driver10toolchains7FreeBSDE\", \"vtable for clang::driver::toolchains::FreeBSD\"},\n    {\"_ZTVN5clang6driver10toolchains6NetBSDE\", \"vtable for clang::driver::toolchains::NetBSD\"},\n    {\"_ZTVN5clang6driver10toolchains5MinixE\", \"vtable for clang::driver::toolchains::Minix\"},\n    {\"_ZTVN5clang6driver10toolchains8AuroraUXE\", \"vtable for clang::driver::toolchains::AuroraUX\"},\n    {\"_ZTVN5clang6driver10toolchains5LinuxE\", \"vtable for clang::driver::toolchains::Linux\"},\n    {\"_ZZN5clang6driver10toolchains5LinuxC1ERKNS0_8HostInfoERKN4llvm6TripleEE11GccVersions\", \"clang::driver::toolchains::Linux::Linux(clang::driver::HostInfo const&, llvm::Triple const&)::GccVersions\"},\n    {\"_ZTVN5clang6driver10toolchains9DragonFlyE\", \"vtable for clang::driver::toolchains::DragonFly\"},\n    {\"_ZTVN5clang6driver10toolchains7WindowsE\", \"vtable for clang::driver::toolchains::Windows\"},\n    {\"_ZTVN5clang6driver10toolchains18Darwin_Generic_GCCE\", \"vtable for clang::driver::toolchains::Darwin_Generic_GCC\"},\n    {\"_ZTVN5clang6driver5tools5ClangE\", \"vtable for clang::driver::tools::Clang\"},\n    {\"_ZTVN5clang6driver5tools7ClangAsE\", \"vtable for clang::driver::tools::ClangAs\"},\n    {\"_ZTVN5clang6driver5tools3gcc6CommonE\", \"vtable for clang::driver::tools::gcc::Common\"},\n    {\"_ZTVN5clang6driver5tools3gcc10PreprocessE\", \"vtable for clang::driver::tools::gcc::Preprocess\"},\n    {\"_ZTVN5clang6driver5tools3gcc10PrecompileE\", \"vtable for clang::driver::tools::gcc::Precompile\"},\n    {\"_ZTVN5clang6driver5tools3gcc7CompileE\", \"vtable for clang::driver::tools::gcc::Compile\"},\n    {\"_ZTVN5clang6driver5tools3gcc8AssembleE\", \"vtable for clang::driver::tools::gcc::Assemble\"},\n    {\"_ZTVN5clang6driver5tools3gcc4LinkE\", \"vtable for clang::driver::tools::gcc::Link\"},\n    {\"_ZTVN5clang6driver5tools6darwin10PreprocessE\", \"vtable for clang::driver::tools::darwin::Preprocess\"},\n    {\"_ZTVN5clang6driver5tools6darwin7CompileE\", \"vtable for clang::driver::tools::darwin::Compile\"},\n    {\"_ZTVN5clang6driver5tools6darwin8AssembleE\", \"vtable for clang::driver::tools::darwin::Assemble\"},\n    {\"_ZTVN5clang6driver5tools6darwin4LinkE\", \"vtable for clang::driver::tools::darwin::Link\"},\n    {\"_ZTVN5clang6driver5tools6darwin4LipoE\", \"vtable for clang::driver::tools::darwin::Lipo\"},\n    {\"_ZTVN5clang6driver5tools6darwin8DsymutilE\", \"vtable for clang::driver::tools::darwin::Dsymutil\"},\n    {\"_ZTVN5clang6driver5tools7openbsd8AssembleE\", \"vtable for clang::driver::tools::openbsd::Assemble\"},\n    {\"_ZTVN5clang6driver5tools7openbsd4LinkE\", \"vtable for clang::driver::tools::openbsd::Link\"},\n    {\"_ZTVN5clang6driver5tools7freebsd8AssembleE\", \"vtable for clang::driver::tools::freebsd::Assemble\"},\n    {\"_ZTVN5clang6driver5tools7freebsd4LinkE\", \"vtable for clang::driver::tools::freebsd::Link\"},\n    {\"_ZTVN5clang6driver5tools6netbsd8AssembleE\", \"vtable for clang::driver::tools::netbsd::Assemble\"},\n    {\"_ZTVN5clang6driver5tools6netbsd4LinkE\", \"vtable for clang::driver::tools::netbsd::Link\"},\n    {\"_ZTVN5clang6driver5tools10linuxtools8AssembleE\", \"vtable for clang::driver::tools::linuxtools::Assemble\"},\n    {\"_ZTVN5clang6driver5tools10linuxtools4LinkE\", \"vtable for clang::driver::tools::linuxtools::Link\"},\n    {\"_ZTVN5clang6driver5tools5minix8AssembleE\", \"vtable for clang::driver::tools::minix::Assemble\"},\n    {\"_ZTVN5clang6driver5tools5minix4LinkE\", \"vtable for clang::driver::tools::minix::Link\"},\n    {\"_ZTVN5clang6driver5tools8auroraux8AssembleE\", \"vtable for clang::driver::tools::auroraux::Assemble\"},\n    {\"_ZTVN5clang6driver5tools8auroraux4LinkE\", \"vtable for clang::driver::tools::auroraux::Link\"},\n    {\"_ZTVN5clang6driver5tools9dragonfly8AssembleE\", \"vtable for clang::driver::tools::dragonfly::Assemble\"},\n    {\"_ZTVN5clang6driver5tools9dragonfly4LinkE\", \"vtable for clang::driver::tools::dragonfly::Link\"},\n    {\"_ZTVN5clang6driver5tools12visualstudio4LinkE\", \"vtable for clang::driver::tools::visualstudio::Link\"},\n    {\"_ZTVN5clang26ASTDeserializationListenerE\", \"vtable for clang::ASTDeserializationListener\"},\n    {\"_ZTVN5clang17ASTReaderListenerE\", \"vtable for clang::ASTReaderListener\"},\n    {\"_ZTVN5clang21ASTIdentifierIteratorE\", \"vtable for clang::ASTIdentifierIterator\"},\n    {\"_ZTVN5clang9ASTReaderE\", \"vtable for clang::ASTReader\"},\n    {\"_ZTVN5clang12PCHValidatorE\", \"vtable for clang::PCHValidator\"},\n    {\"_ZTVN12_GLOBAL__N_112ASTStatCacheE\", \"vtable for (anonymous namespace)::ASTStatCache\"},\n    {\"_ZTVN5clang9ASTWriterE\", \"vtable for clang::ASTWriter\"},\n    {\"_ZTVN5clang24ASTSerializationListenerE\", \"vtable for clang::ASTSerializationListener\"},\n    {\"_ZTVN5clang12PCHGeneratorE\", \"vtable for clang::PCHGenerator\"},\n    {\"_ZTVN5clang7CodeGen8CGCXXABIE\", \"vtable for clang::CodeGen::CGCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_113CallLocalDtorE\", \"vtable for (anonymous namespace)::CallLocalDtor\"},\n    {\"_ZTVN12_GLOBAL__N_113CallFieldDtorE\", \"vtable for (anonymous namespace)::CallFieldDtor\"},\n    {\"_ZTVN12_GLOBAL__N_118CallArrayFieldDtorE\", \"vtable for (anonymous namespace)::CallArrayFieldDtor\"},\n    {\"_ZTVN12_GLOBAL__N_114CallDtorDeleteE\", \"vtable for (anonymous namespace)::CallDtorDelete\"},\n    {\"_ZTVN12_GLOBAL__N_112CallBaseDtorE\", \"vtable for (anonymous namespace)::CallBaseDtor\"},\n    {\"_ZTVN12_GLOBAL__N_114CallMemberDtorE\", \"vtable for (anonymous namespace)::CallMemberDtor\"},\n    {\"_ZTVN5clang7CodeGen12EHScopeStack7CleanupE\", \"vtable for clang::CodeGen::EHScopeStack::Cleanup\"},\n    {\"_ZTVN12_GLOBAL__N_116CallBlockReleaseE\", \"vtable for (anonymous namespace)::CallBlockRelease\"},\n    {\"_ZTVN12_GLOBAL__N_119CallCleanupFunctionE\", \"vtable for (anonymous namespace)::CallCleanupFunction\"},\n    {\"_ZTVN12_GLOBAL__N_111CallVarDtorE\", \"vtable for (anonymous namespace)::CallVarDtor\"},\n    {\"_ZTVN12_GLOBAL__N_113CallArrayDtorE\", \"vtable for (anonymous namespace)::CallArrayDtor\"},\n    {\"_ZTVN12_GLOBAL__N_116CallStackRestoreE\", \"vtable for (anonymous namespace)::CallStackRestore\"},\n    {\"_ZTVN12_GLOBAL__N_114PerformFinallyE\", \"vtable for (anonymous namespace)::PerformFinally\"},\n    {\"_ZTVN12_GLOBAL__N_122CallEndCatchForFinallyE\", \"vtable for (anonymous namespace)::CallEndCatchForFinally\"},\n    {\"_ZTVN12_GLOBAL__N_111CallRethrowE\", \"vtable for (anonymous namespace)::CallRethrow\"},\n    {\"_ZTVN12_GLOBAL__N_112CallEndCatchE\", \"vtable for (anonymous namespace)::CallEndCatch\"},\n    {\"_ZTVN12_GLOBAL__N_116CallObjectDeleteE\", \"vtable for (anonymous namespace)::CallObjectDelete\"},\n    {\"_ZTVN12_GLOBAL__N_115CallArrayDeleteE\", \"vtable for (anonymous namespace)::CallArrayDelete\"},\n    {\"_ZTVN12_GLOBAL__N_130CallDeleteDuringConditionalNewE\", \"vtable for (anonymous namespace)::CallDeleteDuringConditionalNew\"},\n    {\"_ZTVN12_GLOBAL__N_119CallDeleteDuringNewE\", \"vtable for (anonymous namespace)::CallDeleteDuringNew\"},\n    {\"_ZTVN5clang7CodeGen13CGObjCRuntimeE\", \"vtable for clang::CodeGen::CGObjCRuntime\"},\n    {\"_ZTVN12_GLOBAL__N_19CGObjCGNUE\", \"vtable for (anonymous namespace)::CGObjCGNU\"},\n    {\"_ZTVN12_GLOBAL__N_112CallSyncExitE\", \"vtable for (anonymous namespace)::CallSyncExit\"},\n    {\"_ZTVN12_GLOBAL__N_122CGObjCNonFragileABIMacE\", \"vtable for (anonymous namespace)::CGObjCNonFragileABIMac\"},\n    {\"_ZTVN12_GLOBAL__N_116CallObjCEndCatchE\", \"vtable for (anonymous namespace)::CallObjCEndCatch\"},\n    {\"_ZTVN12_GLOBAL__N_112CallSyncExitE\", \"vtable for (anonymous namespace)::CallSyncExit\"},\n    {\"_ZTVN12_GLOBAL__N_115CGObjCCommonMacE\", \"vtable for (anonymous namespace)::CGObjCCommonMac\"},\n    {\"_ZTVN12_GLOBAL__N_19CGObjCMacE\", \"vtable for (anonymous namespace)::CGObjCMac\"},\n    {\"_ZTVN12_GLOBAL__N_121PerformFragileFinallyE\", \"vtable for (anonymous namespace)::PerformFragileFinally\"},\n    {\"_ZTVN5clang13CodeGenActionE\", \"vtable for clang::CodeGenAction\"},\n    {\"_ZTVN12_GLOBAL__N_19ARMCXXABIE\", \"vtable for (anonymous namespace)::ARMCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_114CallGuardAbortE\", \"vtable for (anonymous namespace)::CallGuardAbort\"},\n    {\"_ZTVN12_GLOBAL__N_113ItaniumCXXABIE\", \"vtable for (anonymous namespace)::ItaniumCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_115MicrosoftCXXABIE\", \"vtable for (anonymous namespace)::MicrosoftCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_117CodeGeneratorImplE\", \"vtable for (anonymous namespace)::CodeGeneratorImpl\"},\n    {\"_ZTVN5clang7ABIInfoE\", \"vtable for clang::ABIInfo\"},\n    {\"_ZTVN5clang17TargetCodeGenInfoE\", \"vtable for clang::TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_123X86_64TargetCodeGenInfoE\", \"vtable for (anonymous namespace)::X86_64TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113X86_64ABIInfoE\", \"vtable for (anonymous namespace)::X86_64ABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_126WinX86_64TargetCodeGenInfoE\", \"vtable for (anonymous namespace)::WinX86_64TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116WinX86_64ABIInfoE\", \"vtable for (anonymous namespace)::WinX86_64ABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_123X86_32TargetCodeGenInfoE\", \"vtable for (anonymous namespace)::X86_32TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113X86_32ABIInfoE\", \"vtable for (anonymous namespace)::X86_32ABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_123MSP430TargetCodeGenInfoE\", \"vtable for (anonymous namespace)::MSP430TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114DefaultABIInfoE\", \"vtable for (anonymous namespace)::DefaultABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_123MBlazeTargetCodeGenInfoE\", \"vtable for (anonymous namespace)::MBlazeTargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113MBlazeABIInfoE\", \"vtable for (anonymous namespace)::MBlazeABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_124SystemZTargetCodeGenInfoE\", \"vtable for (anonymous namespace)::SystemZTargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114SystemZABIInfoE\", \"vtable for (anonymous namespace)::SystemZABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_122PPC32TargetCodeGenInfoE\", \"vtable for (anonymous namespace)::PPC32TargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_124DefaultTargetCodeGenInfoE\", \"vtable for (anonymous namespace)::DefaultTargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_120ARMTargetCodeGenInfoE\", \"vtable for (anonymous namespace)::ARMTargetCodeGenInfo\"},\n    {\"_ZTVN12_GLOBAL__N_110ARMABIInfoE\", \"vtable for (anonymous namespace)::ARMABIInfo\"},\n    {\"_ZTVN12_GLOBAL__N_121MIPSTargetCodeGenInfoE\", \"vtable for (anonymous namespace)::MIPSTargetCodeGenInfo\"},\n    {\"_ZTVN5clang6Parser21LateParsedDeclarationE\", \"vtable for clang::Parser::LateParsedDeclaration\"},\n    {\"_ZTVN5clang6Parser15LateParsedClassE\", \"vtable for clang::Parser::LateParsedClass\"},\n    {\"_ZTVN5clang6Parser11LexedMethodE\", \"vtable for clang::Parser::LexedMethod\"},\n    {\"_ZTVN5clang6Parser27LateParsedMethodDeclarationE\", \"vtable for clang::Parser::LateParsedMethodDeclaration\"},\n    {\"_ZTVZN5clang6Parser20ParseStructUnionBodyENS_14SourceLocationEjPNS_4DeclEE14CFieldCallback\", \"vtable for clang::Parser::ParseStructUnionBody(clang::SourceLocation, unsigned int, clang::Decl*)::CFieldCallback\"},\n    {\"_ZTVZN5clang6Parser31ParseObjCClassInstanceVariablesEPNS_4DeclENS_3tok15ObjCKeywordKindENS_14SourceLocationEE16ObjCIvarCallback\", \"vtable for clang::Parser::ParseObjCClassInstanceVariables(clang::Decl*, clang::tok::ObjCKeywordKind, clang::SourceLocation)::ObjCIvarCallback\"},\n    {\"_ZTVN5clang18PragmaAlignHandlerE\", \"vtable for clang::PragmaAlignHandler\"},\n    {\"_ZTVN5clang26PragmaGCCVisibilityHandlerE\", \"vtable for clang::PragmaGCCVisibilityHandler\"},\n    {\"_ZTVN5clang20PragmaOptionsHandlerE\", \"vtable for clang::PragmaOptionsHandler\"},\n    {\"_ZTVN5clang17PragmaPackHandlerE\", \"vtable for clang::PragmaPackHandler\"},\n    {\"_ZTVN5clang19PragmaUnusedHandlerE\", \"vtable for clang::PragmaUnusedHandler\"},\n    {\"_ZTVN5clang17PragmaWeakHandlerE\", \"vtable for clang::PragmaWeakHandler\"},\n    {\"_ZTVN5clang6ParserE\", \"vtable for clang::Parser\"},\n    {\"_ZTVN5clang27PrettyStackTraceParserEntryE\", \"vtable for clang::PrettyStackTraceParserEntry\"},\n    {\"_ZTVN5clang6Parser13FieldCallbackE\", \"vtable for clang::Parser::FieldCallback\"},\n    {\"_ZTVN12_GLOBAL__N_122UninitValsDiagReporterE\", \"vtable for (anonymous namespace)::UninitValsDiagReporter\"},\n    {\"_ZTVN12_GLOBAL__N_122UnreachableCodeHandlerE\", \"vtable for (anonymous namespace)::UnreachableCodeHandler\"},\n    {\"_ZTVN5clang20CodeCompleteConsumerE\", \"vtable for clang::CodeCompleteConsumer\"},\n    {\"_ZTVN5clang28PrintingCodeCompleteConsumerE\", \"vtable for clang::PrintingCodeCompleteConsumer\"},\n    {\"_ZTVN5clang4sema17FunctionScopeInfoE\", \"vtable for clang::sema::FunctionScopeInfo\"},\n    {\"_ZTVN5clang4sema14BlockScopeInfoE\", \"vtable for clang::sema::BlockScopeInfo\"},\n    {\"_ZTVN5clang18ExternalSemaSourceE\", \"vtable for clang::ExternalSemaSource\"},\n    {\"_ZTVN5clang25PrettyDeclStackTraceEntryE\", \"vtable for clang::PrettyDeclStackTraceEntry\"},\n    {\"_ZTVN12_GLOBAL__N_117CheckScanfHandlerE\", \"vtable for (anonymous namespace)::CheckScanfHandler\"},\n    {\"_ZTVN12_GLOBAL__N_118CheckFormatHandlerE\", \"vtable for (anonymous namespace)::CheckFormatHandler\"},\n    {\"_ZTVN12_GLOBAL__N_118CheckPrintfHandlerE\", \"vtable for (anonymous namespace)::CheckPrintfHandler\"},\n    {\"_ZTVN12_GLOBAL__N_126CodeCompletionDeclConsumerE\", \"vtable for (anonymous namespace)::CodeCompletionDeclConsumer\"},\n    {\"_ZTVN5clang19VisibleDeclConsumerE\", \"vtable for clang::VisibleDeclConsumer\"},\n    {\"_ZZN5clang4Sema11CorrectTypoERNS_12LookupResultEPNS_5ScopeEPNS_12CXXScopeSpecEPNS_11DeclContextEbNS0_18CorrectTypoContextEPKNS_21ObjCObjectPointerTypeEE10CTypeSpecs\", \"clang::Sema::CorrectTypo(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec*, clang::DeclContext*, bool, clang::Sema::CorrectTypoContext, clang::ObjCObjectPointerType const*)::CTypeSpecs\"},\n    {\"_ZZN5clang4Sema11CorrectTypoERNS_12LookupResultEPNS_5ScopeEPNS_12CXXScopeSpecEPNS_11DeclContextEbNS0_18CorrectTypoContextEPKNS_21ObjCObjectPointerTypeEE6CStmts\", \"clang::Sema::CorrectTypo(clang::LookupResult&, clang::Scope*, clang::CXXScopeSpec*, clang::DeclContext*, bool, clang::Sema::CorrectTypoContext, clang::ObjCObjectPointerType const*)::CStmts\"},\n    {\"_ZTVN12_GLOBAL__N_122TypoCorrectionConsumerE\", \"vtable for (anonymous namespace)::TypoCorrectionConsumer\"},\n    {\"_ZZN5clang25GetImplicitConversionNameENS_22ImplicitConversionKindEE4Name\", \"clang::GetImplicitConversionName(clang::ImplicitConversionKind)::Name\"},\n    {\"_ZTVN5clang20TargetAttributesSemaE\", \"vtable for clang::TargetAttributesSema\"},\n    {\"_ZTVN12_GLOBAL__N_117X86AttributesSemaE\", \"vtable for (anonymous namespace)::X86AttributesSema\"},\n    {\"_ZTVN12_GLOBAL__N_120MBlazeAttributesSemaE\", \"vtable for (anonymous namespace)::MBlazeAttributesSema\"},\n    {\"_ZTVN12_GLOBAL__N_120MSP430AttributesSemaE\", \"vtable for (anonymous namespace)::MSP430AttributesSema\"},\n    {\"_ZTVN12_GLOBAL__N_126AdjustedReturnValueCheckerE\", \"vtable for (anonymous namespace)::AdjustedReturnValueChecker\"},\n    {\"_ZTVN12_GLOBAL__N_111UbigraphVizE\", \"vtable for (anonymous namespace)::UbigraphViz\"},\n    {\"_ZTVN12_GLOBAL__N_116AnalysisConsumerE\", \"vtable for (anonymous namespace)::AnalysisConsumer\"},\n    {\"_ZTVN12_GLOBAL__N_120AnalyzerStatsCheckerE\", \"vtable for (anonymous namespace)::AnalyzerStatsChecker\"},\n    {\"_ZTVN12_GLOBAL__N_117ArrayBoundCheckerE\", \"vtable for (anonymous namespace)::ArrayBoundChecker\"},\n    {\"_ZTVN12_GLOBAL__N_119ArrayBoundCheckerV2E\", \"vtable for (anonymous namespace)::ArrayBoundCheckerV2\"},\n    {\"_ZTVN12_GLOBAL__N_118AttrNonNullCheckerE\", \"vtable for (anonymous namespace)::AttrNonNullChecker\"},\n    {\"_ZTVN12_GLOBAL__N_119ClassReleaseCheckerE\", \"vtable for (anonymous namespace)::ClassReleaseChecker\"},\n    {\"_ZTVN12_GLOBAL__N_19APIMisuseE\", \"vtable for (anonymous namespace)::APIMisuse\"},\n    {\"_ZTVN12_GLOBAL__N_122CFRetainReleaseCheckerE\", \"vtable for (anonymous namespace)::CFRetainReleaseChecker\"},\n    {\"_ZTVN12_GLOBAL__N_121CFNumberCreateCheckerE\", \"vtable for (anonymous namespace)::CFNumberCreateChecker\"},\n    {\"_ZTVN12_GLOBAL__N_113NilArgCheckerE\", \"vtable for (anonymous namespace)::NilArgChecker\"},\n    {\"_ZTVN12_GLOBAL__N_122BuiltinFunctionCheckerE\", \"vtable for (anonymous namespace)::BuiltinFunctionChecker\"},\n    {\"_ZTVN12_GLOBAL__N_114CStringCheckerE\", \"vtable for (anonymous namespace)::CStringChecker\"},\n    {\"_ZTVN12_GLOBAL__N_121CallAndMessageCheckerE\", \"vtable for (anonymous namespace)::CallAndMessageChecker\"},\n    {\"_ZTVN12_GLOBAL__N_115CastSizeCheckerE\", \"vtable for (anonymous namespace)::CastSizeChecker\"},\n    {\"_ZTVN12_GLOBAL__N_119CastToStructCheckerE\", \"vtable for (anonymous namespace)::CastToStructChecker\"},\n    {\"_ZZN12_GLOBAL__N_17WalkAST14CheckCall_randEPKN5clang8CallExprEPKNS1_12FunctionDeclEE11identifiers\", \"(anonymous namespace)::WalkAST::CheckCall_rand(clang::CallExpr const*, clang::FunctionDecl const*)::identifiers\"},\n    {\"_ZTVN12_GLOBAL__N_113ChrootCheckerE\", \"vtable for (anonymous namespace)::ChrootChecker\"},\n    {\"_ZTVN12_GLOBAL__N_112DeadStoreObsE\", \"vtable for (anonymous namespace)::DeadStoreObs\"},\n    {\"_ZTVN12_GLOBAL__N_118DereferenceCheckerE\", \"vtable for (anonymous namespace)::DereferenceChecker\"},\n    {\"_ZTVN12_GLOBAL__N_114DivZeroCheckerE\", \"vtable for (anonymous namespace)::DivZeroChecker\"},\n    {\"_ZTVN5clang4ento10ExprEngineE\", \"vtable for clang::ento::ExprEngine\"},\n    {\"_ZTVN12_GLOBAL__N_119FixedAddressCheckerE\", \"vtable for (anonymous namespace)::FixedAddressChecker\"},\n    {\"_ZTVN5clang4ento14AnalysisActionE\", \"vtable for clang::ento::AnalysisAction\"},\n    {\"_ZTVN12_GLOBAL__N_126IdempotentOperationCheckerE\", \"vtable for (anonymous namespace)::IdempotentOperationChecker\"},\n    {\"_ZTVZN12_GLOBAL__N_126IdempotentOperationChecker25PathWasCompletelyAnalyzedEPKN5clang3CFGEPKNS1_8CFGBlockEPKNS1_10CFGStmtMapERKNS1_4ento10CoreEngineEE7VisitWL\", \"vtable for (anonymous namespace)::IdempotentOperationChecker::PathWasCompletelyAnalyzed(clang::CFG const*, clang::CFGBlock const*, clang::CFGStmtMap const*, clang::ento::CoreEngine const&)::VisitWL\"},\n    {\"_ZTVN12_GLOBAL__N_116MacOSXAPICheckerE\", \"vtable for (anonymous namespace)::MacOSXAPIChecker\"},\n    {\"_ZTVN12_GLOBAL__N_113MallocCheckerE\", \"vtable for (anonymous namespace)::MallocChecker\"},\n    {\"_ZTVN12_GLOBAL__N_124NSAutoreleasePoolCheckerE\", \"vtable for (anonymous namespace)::NSAutoreleasePoolChecker\"},\n    {\"_ZTVN12_GLOBAL__N_114NSErrorCheckerE\", \"vtable for (anonymous namespace)::NSErrorChecker\"},\n    {\"_ZTVN12_GLOBAL__N_123NoReturnFunctionCheckerE\", \"vtable for (anonymous namespace)::NoReturnFunctionChecker\"},\n    {\"_ZTVN12_GLOBAL__N_115OSAtomicCheckerE\", \"vtable for (anonymous namespace)::OSAtomicChecker\"},\n    {\"_ZTVN12_GLOBAL__N_117ObjCAtSyncCheckerE\", \"vtable for (anonymous namespace)::ObjCAtSyncChecker\"},\n    {\"_ZTVN12_GLOBAL__N_119ObjCSelfInitCheckerE\", \"vtable for (anonymous namespace)::ObjCSelfInitChecker\"},\n    {\"_ZTVN12_GLOBAL__N_111InitSelfBugE\", \"vtable for (anonymous namespace)::InitSelfBug\"},\n    {\"_ZTVN12_GLOBAL__N_119PointerArithCheckerE\", \"vtable for (anonymous namespace)::PointerArithChecker\"},\n    {\"_ZTVN12_GLOBAL__N_117PointerSubCheckerE\", \"vtable for (anonymous namespace)::PointerSubChecker\"},\n    {\"_ZTVN12_GLOBAL__N_118PthreadLockCheckerE\", \"vtable for (anonymous namespace)::PthreadLockChecker\"},\n    {\"_ZTVN12_GLOBAL__N_125ReturnPointerRangeCheckerE\", \"vtable for (anonymous namespace)::ReturnPointerRangeChecker\"},\n    {\"_ZTVN12_GLOBAL__N_118ReturnUndefCheckerE\", \"vtable for (anonymous namespace)::ReturnUndefChecker\"},\n    {\"_ZTVN12_GLOBAL__N_120StackAddrLeakCheckerE\", \"vtable for (anonymous namespace)::StackAddrLeakChecker\"},\n    {\"_ZTVZN12_GLOBAL__N_120StackAddrLeakChecker11evalEndPathERN5clang4ento24EndOfFunctionNodeBuilderEPvRNS2_10ExprEngineEE8CallBack\", \"vtable for (anonymous namespace)::StackAddrLeakChecker::evalEndPath(clang::ento::EndOfFunctionNodeBuilder&, void*, clang::ento::ExprEngine&)::CallBack\"},\n    {\"_ZTVN12_GLOBAL__N_113StreamCheckerE\", \"vtable for (anonymous namespace)::StreamChecker\"},\n    {\"_ZTVN12_GLOBAL__N_118UndefBranchCheckerE\", \"vtable for (anonymous namespace)::UndefBranchChecker\"},\n    {\"_ZTVN12_GLOBAL__N_128UndefCapturedBlockVarCheckerE\", \"vtable for (anonymous namespace)::UndefCapturedBlockVarChecker\"},\n    {\"_ZTVN12_GLOBAL__N_118UndefResultCheckerE\", \"vtable for (anonymous namespace)::UndefResultChecker\"},\n    {\"_ZTVN12_GLOBAL__N_130UndefinedArraySubscriptCheckerE\", \"vtable for (anonymous namespace)::UndefinedArraySubscriptChecker\"},\n    {\"_ZTVN12_GLOBAL__N_126UndefinedAssignmentCheckerE\", \"vtable for (anonymous namespace)::UndefinedAssignmentChecker\"},\n    {\"_ZTVN12_GLOBAL__N_114UnixAPICheckerE\", \"vtable for (anonymous namespace)::UnixAPIChecker\"},\n    {\"_ZTVN12_GLOBAL__N_122UnreachableCodeCheckerE\", \"vtable for (anonymous namespace)::UnreachableCodeChecker\"},\n    {\"_ZTVN12_GLOBAL__N_114VLASizeCheckerE\", \"vtable for (anonymous namespace)::VLASizeChecker\"},\n    {\"_ZTVN12_GLOBAL__N_122BasicConstraintManagerE\", \"vtable for (anonymous namespace)::BasicConstraintManager\"},\n    {\"_ZTVN5clang4ento12StoreManager15BindingsHandlerE\", \"vtable for clang::ento::StoreManager::BindingsHandler\"},\n    {\"_ZTVN12_GLOBAL__N_117BasicStoreManagerE\", \"vtable for (anonymous namespace)::BasicStoreManager\"},\n    {\"_ZTVN12_GLOBAL__N_122BasicStoreSubRegionMapE\", \"vtable for (anonymous namespace)::BasicStoreSubRegionMap\"},\n    {\"_ZTVN5clang4ento18BugReporterVisitorE\", \"vtable for clang::ento::BugReporterVisitor\"},\n    {\"_ZTVN5clang4ento18BugReporterContextE\", \"vtable for clang::ento::BugReporterContext\"},\n    {\"_ZTVN5clang4ento7BugTypeE\", \"vtable for clang::ento::BugType\"},\n    {\"_ZTVN5clang4ento9BugReportE\", \"vtable for clang::ento::BugReport\"},\n    {\"_ZTVN5clang4ento15RangedBugReportE\", \"vtable for clang::ento::RangedBugReport\"},\n    {\"_ZTVN5clang4ento13GRBugReporterE\", \"vtable for clang::ento::GRBugReporter\"},\n    {\"_ZTVN5clang4ento15BugReporterDataE\", \"vtable for clang::ento::BugReporterData\"},\n    {\"_ZTVN5clang4ento11BugReporterE\", \"vtable for clang::ento::BugReporter\"},\n    {\"_ZTVN12_GLOBAL__N_121PathDiagnosticBuilderE\", \"vtable for (anonymous namespace)::PathDiagnosticBuilder\"},\n    {\"_ZTVN12_GLOBAL__N_114NodeMapClosureE\", \"vtable for (anonymous namespace)::NodeMapClosure\"},\n    {\"_ZTVN12_GLOBAL__N_118ScanNotableSymbolsE\", \"vtable for (anonymous namespace)::ScanNotableSymbols\"},\n    {\"_ZTVN12_GLOBAL__N_120NotableSymbolHandlerE\", \"vtable for (anonymous namespace)::NotableSymbolHandler\"},\n    {\"_ZTVN12_GLOBAL__N_118NilReceiverVisitorE\", \"vtable for (anonymous namespace)::NilReceiverVisitor\"},\n    {\"_ZTVN12_GLOBAL__N_122FindLastStoreBRVisitorE\", \"vtable for (anonymous namespace)::FindLastStoreBRVisitor\"},\n    {\"_ZTVN12_GLOBAL__N_124TrackConstraintBRVisitorE\", \"vtable for (anonymous namespace)::TrackConstraintBRVisitor\"},\n    {\"_ZTVN12_GLOBAL__N_110CFRefCountE\", \"vtable for (anonymous namespace)::CFRefCount\"},\n    {\"_ZTVN12_GLOBAL__N_111CFRefReportE\", \"vtable for (anonymous namespace)::CFRefReport\"},\n    {\"_ZTVN12_GLOBAL__N_115CFRefLeakReportE\", \"vtable for (anonymous namespace)::CFRefLeakReport\"},\n    {\"_ZTVN12_GLOBAL__N_117FindUniqueBindingE\", \"vtable for (anonymous namespace)::FindUniqueBinding\"},\n    {\"_ZTVN12_GLOBAL__N_120StopTrackingCallbackE\", \"vtable for (anonymous namespace)::StopTrackingCallback\"},\n    {\"_ZTVN12_GLOBAL__N_120RetainReleaseCheckerE\", \"vtable for (anonymous namespace)::RetainReleaseChecker\"},\n    {\"_ZTVN12_GLOBAL__N_118LeakWithinFunctionE\", \"vtable for (anonymous namespace)::LeakWithinFunction\"},\n    {\"_ZTVN12_GLOBAL__N_18CFRefBugE\", \"vtable for (anonymous namespace)::CFRefBug\"},\n    {\"_ZTVN12_GLOBAL__N_112LeakAtReturnE\", \"vtable for (anonymous namespace)::LeakAtReturn\"},\n    {\"_ZTVN12_GLOBAL__N_124ReturnedNotOwnedForOwnedE\", \"vtable for (anonymous namespace)::ReturnedNotOwnedForOwned\"},\n    {\"_ZTVN12_GLOBAL__N_115OverAutoreleaseE\", \"vtable for (anonymous namespace)::OverAutorelease\"},\n    {\"_ZTVN12_GLOBAL__N_115DeallocNotOwnedE\", \"vtable for (anonymous namespace)::DeallocNotOwned\"},\n    {\"_ZTVN12_GLOBAL__N_19DeallocGCE\", \"vtable for (anonymous namespace)::DeallocGC\"},\n    {\"_ZTVN12_GLOBAL__N_110BadReleaseE\", \"vtable for (anonymous namespace)::BadRelease\"},\n    {\"_ZTVN12_GLOBAL__N_115UseAfterReleaseE\", \"vtable for (anonymous namespace)::UseAfterRelease\"},\n    {\"_ZTVN12_GLOBAL__N_110CFRefCount15BindingsPrinterE\", \"vtable for (anonymous namespace)::CFRefCount::BindingsPrinter\"},\n    {\"_ZTVN5clang4ento7CheckerE\", \"vtable for clang::ento::Checker\"},\n    {\"_ZTVN5clang4ento8WorkList7VisitorE\", \"vtable for clang::ento::WorkList::Visitor\"},\n    {\"_ZTVN5clang4ento8WorkListE\", \"vtable for clang::ento::WorkList\"},\n    {\"_ZTVN12_GLOBAL__N_119BFSBlockDFSContentsE\", \"vtable for (anonymous namespace)::BFSBlockDFSContents\"},\n    {\"_ZTVN12_GLOBAL__N_13BFSE\", \"vtable for (anonymous namespace)::BFS\"},\n    {\"_ZTVN12_GLOBAL__N_13DFSE\", \"vtable for (anonymous namespace)::DFS\"},\n    {\"_ZTVN12_GLOBAL__N_116MarkLiveCallbackE\", \"vtable for (anonymous namespace)::MarkLiveCallback\"},\n    {\"_ZTVN5clang4ento12ExplodedNode7AuditorE\", \"vtable for clang::ento::ExplodedNode::Auditor\"},\n    {\"_ZTVN12_GLOBAL__N_116FlatStoreManagerE\", \"vtable for (anonymous namespace)::FlatStoreManager\"},\n    {\"_ZTVN5clang4ento17ConstraintManagerE\", \"vtable for clang::ento::ConstraintManager\"},\n    {\"_ZTVN12_GLOBAL__N_120ScanReachableSymbolsE\", \"vtable for (anonymous namespace)::ScanReachableSymbols\"},\n    {\"_ZTVN12_GLOBAL__N_115HTMLDiagnosticsE\", \"vtable for (anonymous namespace)::HTMLDiagnostics\"},\n    {\"_ZTVN5clang4ento9MemRegionE\", \"vtable for clang::ento::MemRegion\"},\n    {\"_ZTVN5clang4ento14MemSpaceRegionE\", \"vtable for clang::ento::MemSpaceRegion\"},\n    {\"_ZTVN5clang4ento23StaticGlobalSpaceRegionE\", \"vtable for clang::ento::StaticGlobalSpaceRegion\"},\n    {\"_ZTVN5clang4ento26NonStaticGlobalSpaceRegionE\", \"vtable for clang::ento::NonStaticGlobalSpaceRegion\"},\n    {\"_ZTVN5clang4ento16StackSpaceRegionE\", \"vtable for clang::ento::StackSpaceRegion\"},\n    {\"_ZTVN5clang4ento9SubRegionE\", \"vtable for clang::ento::SubRegion\"},\n    {\"_ZTVN5clang4ento12AllocaRegionE\", \"vtable for clang::ento::AllocaRegion\"},\n    {\"_ZTVN5clang4ento18FunctionTextRegionE\", \"vtable for clang::ento::FunctionTextRegion\"},\n    {\"_ZTVN5clang4ento15BlockTextRegionE\", \"vtable for clang::ento::BlockTextRegion\"},\n    {\"_ZTVN5clang4ento15BlockDataRegionE\", \"vtable for clang::ento::BlockDataRegion\"},\n    {\"_ZTVN5clang4ento14SymbolicRegionE\", \"vtable for clang::ento::SymbolicRegion\"},\n    {\"_ZTVN5clang4ento12StringRegionE\", \"vtable for clang::ento::StringRegion\"},\n    {\"_ZTVN5clang4ento21CompoundLiteralRegionE\", \"vtable for clang::ento::CompoundLiteralRegion\"},\n    {\"_ZTVN5clang4ento10DeclRegionE\", \"vtable for clang::ento::DeclRegion\"},\n    {\"_ZTVN5clang4ento9VarRegionE\", \"vtable for clang::ento::VarRegion\"},\n    {\"_ZTVN5clang4ento13CXXThisRegionE\", \"vtable for clang::ento::CXXThisRegion\"},\n    {\"_ZTVN5clang4ento11FieldRegionE\", \"vtable for clang::ento::FieldRegion\"},\n    {\"_ZTVN5clang4ento14ObjCIvarRegionE\", \"vtable for clang::ento::ObjCIvarRegion\"},\n    {\"_ZTVN5clang4ento13ElementRegionE\", \"vtable for clang::ento::ElementRegion\"},\n    {\"_ZTVN5clang4ento19CXXTempObjectRegionE\", \"vtable for clang::ento::CXXTempObjectRegion\"},\n    {\"_ZTVN5clang4ento19CXXBaseObjectRegionE\", \"vtable for clang::ento::CXXBaseObjectRegion\"},\n    {\"_ZTVN5clang4ento19PathDiagnosticPieceE\", \"vtable for clang::ento::PathDiagnosticPiece\"},\n    {\"_ZTVN5clang4ento24PathDiagnosticEventPieceE\", \"vtable for clang::ento::PathDiagnosticEventPiece\"},\n    {\"_ZTVN5clang4ento30PathDiagnosticControlFlowPieceE\", \"vtable for clang::ento::PathDiagnosticControlFlowPiece\"},\n    {\"_ZTVN5clang4ento24PathDiagnosticMacroPieceE\", \"vtable for clang::ento::PathDiagnosticMacroPiece\"},\n    {\"_ZTVN5clang4ento20PathDiagnosticClientE\", \"vtable for clang::ento::PathDiagnosticClient\"},\n    {\"_ZTVN5clang4ento23PathDiagnosticSpotPieceE\", \"vtable for clang::ento::PathDiagnosticSpotPiece\"},\n    {\"_ZTVN12_GLOBAL__N_116PlistDiagnosticsE\", \"vtable for (anonymous namespace)::PlistDiagnostics\"},\n    {\"_ZTVN12_GLOBAL__N_122RangeConstraintManagerE\", \"vtable for (anonymous namespace)::RangeConstraintManager\"},\n    {\"_ZTVN12_GLOBAL__N_118RegionStoreManagerE\", \"vtable for (anonymous namespace)::RegionStoreManager\"},\n    {\"_ZTVN12_GLOBAL__N_123RegionStoreSubRegionMapE\", \"vtable for (anonymous namespace)::RegionStoreSubRegionMap\"},\n    {\"_ZTVN5clang4ento23SimpleConstraintManagerE\", \"vtable for clang::ento::SimpleConstraintManager\"},\n    {\"_ZTVN12_GLOBAL__N_117SimpleSValBuilderE\", \"vtable for (anonymous namespace)::SimpleSValBuilder\"},\n    {\"_ZTVN5clang4ento12StoreManagerE\", \"vtable for clang::ento::StoreManager\"},\n    {\"_ZTVN5clang4ento13SymbolVisitorE\", \"vtable for clang::ento::SymbolVisitor\"},\n    {\"_ZTVN5clang4ento17SymbolRegionValueE\", \"vtable for clang::ento::SymbolRegionValue\"},\n    {\"_ZTVN5clang4ento14SymbolConjuredE\", \"vtable for clang::ento::SymbolConjured\"},\n    {\"_ZTVN5clang4ento13SymbolDerivedE\", \"vtable for clang::ento::SymbolDerived\"},\n    {\"_ZTVN5clang4ento12SymbolExtentE\", \"vtable for clang::ento::SymbolExtent\"},\n    {\"_ZTVN5clang4ento14SymbolMetadataE\", \"vtable for clang::ento::SymbolMetadata\"},\n    {\"_ZTVN5clang4ento10SymIntExprE\", \"vtable for clang::ento::SymIntExpr\"},\n    {\"_ZTVN5clang4ento10SymSymExprE\", \"vtable for clang::ento::SymSymExpr\"},\n    {\"_ZTVN12_GLOBAL__N_119TextPathDiagnosticsE\", \"vtable for (anonymous namespace)::TextPathDiagnostics\"},\n    {\"_ZTVN5clang15LocationContextE\", \"vtable for clang::LocationContext\"},\n    {\"_ZTVN5clang17StackFrameContextE\", \"vtable for clang::StackFrameContext\"},\n    {\"_ZTVN5clang12ScopeContextE\", \"vtable for clang::ScopeContext\"},\n    {\"_ZTVN5clang22BlockInvocationContextE\", \"vtable for clang::BlockInvocationContext\"},\n    {\"_ZTVN12_GLOBAL__N_117StmtPrinterHelperE\", \"vtable for (anonymous namespace)::StmtPrinterHelper\"},\n    {\"_ZTVN5clang21analyze_format_string19FormatStringHandlerE\", \"vtable for clang::analyze_format_string::FormatStringHandler\"},\n    {\"_ZTVN5clang30UninitializedValues_ValueTypes10ObserverTyE\", \"vtable for clang::UninitializedValues_ValueTypes::ObserverTy\"},\n    {\"_ZTVN12_GLOBAL__N_126UninitializedValuesCheckerE\", \"vtable for (anonymous namespace)::UninitializedValuesChecker\"},\n    {\"_ZTVN5clang22UninitVariablesHandlerE\", \"vtable for clang::UninitVariablesHandler\"},\n    {\"_ZTVN5clang3idx13EntityHandlerE\", \"vtable for clang::idx::EntityHandler\"},\n    {\"_ZTVN5clang3idx22TranslationUnitHandlerE\", \"vtable for clang::idx::TranslationUnitHandler\"},\n    {\"_ZTVN5clang3idx17TULocationHandlerE\", \"vtable for clang::idx::TULocationHandler\"},\n    {\"_ZTVN5clang3idx13IndexProviderE\", \"vtable for clang::idx::IndexProvider\"},\n    {\"_ZTVN5clang3idx7IndexerE\", \"vtable for clang::idx::Indexer\"},\n    {\"_ZTVN12_GLOBAL__N_113EntityIndexerE\", \"vtable for (anonymous namespace)::EntityIndexer\"},\n    {\"_ZTVN5clang3idx15TranslationUnitE\", \"vtable for clang::idx::TranslationUnit\"},\n    {\"_ZTVN5clang13FixItRewriterE\", \"vtable for clang::FixItRewriter\"},\n    {\"_ZTVN5clang12FixItOptionsE\", \"vtable for clang::FixItOptions\"},\n    {\"_ZTVN5clang11FixItActionE\", \"vtable for clang::FixItAction\"},\n    {\"_ZTVN5clang15HTMLPrintActionE\", \"vtable for clang::HTMLPrintAction\"},\n    {\"_ZTVN5clang17RewriteObjCActionE\", \"vtable for clang::RewriteObjCAction\"},\n    {\"_ZTVN5clang19RewriteMacrosActionE\", \"vtable for clang::RewriteMacrosAction\"},\n    {\"_ZTVN5clang17RewriteTestActionE\", \"vtable for clang::RewriteTestAction\"},\n    {\"_ZTVN12_GLOBAL__N_119FixItRewriteInPlaceE\", \"vtable for (anonymous namespace)::FixItRewriteInPlace\"},\n    {\"_ZTVN12_GLOBAL__N_125FixItActionSuffixInserterE\", \"vtable for (anonymous namespace)::FixItActionSuffixInserter\"},\n    {\"_ZTVN12_GLOBAL__N_111HTMLPrinterE\", \"vtable for (anonymous namespace)::HTMLPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_118IgnoringDiagClientE\", \"vtable for (anonymous namespace)::IgnoringDiagClient\"},\n    {\"_ZTVN12_GLOBAL__N_111RewriteObjCE\", \"vtable for (anonymous namespace)::RewriteObjC\"},\n    {\"_ZTVN5clang11ASTConsumerE\", \"vtable for clang::ASTConsumer\"},\n    {\"_ZTVN5clang17ExternalASTSourceE\", \"vtable for clang::ExternalASTSource\"},\n    {\"_ZTVN5clang19ASTMutationListenerE\", \"vtable for clang::ASTMutationListener\"},\n    {\"_ZTVN5clang6CXXABIE\", \"vtable for clang::CXXABI\"},\n    {\"_ZTVN5clang11ASTImporterE\", \"vtable for clang::ASTImporter\"},\n    {\"_ZTVN5clang4AttrE\", \"vtable for clang::Attr\"},\n    {\"_ZTVN5clang9AliasAttrE\", \"vtable for clang::AliasAttr\"},\n    {\"_ZTVN5clang15AlignMac68kAttrE\", \"vtable for clang::AlignMac68kAttr\"},\n    {\"_ZTVN5clang11AlignedAttrE\", \"vtable for clang::AlignedAttr\"},\n    {\"_ZTVN5clang16AlwaysInlineAttrE\", \"vtable for clang::AlwaysInlineAttr\"},\n    {\"_ZTVN5clang20AnalyzerNoReturnAttrE\", \"vtable for clang::AnalyzerNoReturnAttr\"},\n    {\"_ZTVN5clang12AnnotateAttrE\", \"vtable for clang::AnnotateAttr\"},\n    {\"_ZTVN5clang12AsmLabelAttrE\", \"vtable for clang::AsmLabelAttr\"},\n    {\"_ZTVN5clang10BlocksAttrE\", \"vtable for clang::BlocksAttr\"},\n    {\"_ZTVN5clang9CDeclAttrE\", \"vtable for clang::CDeclAttr\"},\n    {\"_ZTVN5clang14CFConsumedAttrE\", \"vtable for clang::CFConsumedAttr\"},\n    {\"_ZTVN5clang24CFReturnsNotRetainedAttrE\", \"vtable for clang::CFReturnsNotRetainedAttr\"},\n    {\"_ZTVN5clang21CFReturnsRetainedAttrE\", \"vtable for clang::CFReturnsRetainedAttr\"},\n    {\"_ZTVN5clang16CUDAConstantAttrE\", \"vtable for clang::CUDAConstantAttr\"},\n    {\"_ZTVN5clang14CUDADeviceAttrE\", \"vtable for clang::CUDADeviceAttr\"},\n    {\"_ZTVN5clang14CUDAGlobalAttrE\", \"vtable for clang::CUDAGlobalAttr\"},\n    {\"_ZTVN5clang12CUDAHostAttrE\", \"vtable for clang::CUDAHostAttr\"},\n    {\"_ZTVN5clang20CUDALaunchBoundsAttrE\", \"vtable for clang::CUDALaunchBoundsAttr\"},\n    {\"_ZTVN5clang14CUDASharedAttrE\", \"vtable for clang::CUDASharedAttr\"},\n    {\"_ZTVN5clang21CarriesDependencyAttrE\", \"vtable for clang::CarriesDependencyAttr\"},\n    {\"_ZTVN5clang11CleanupAttrE\", \"vtable for clang::CleanupAttr\"},\n    {\"_ZTVN5clang10CommonAttrE\", \"vtable for clang::CommonAttr\"},\n    {\"_ZTVN5clang9ConstAttrE\", \"vtable for clang::ConstAttr\"},\n    {\"_ZTVN5clang15ConstructorAttrE\", \"vtable for clang::ConstructorAttr\"},\n    {\"_ZTVN5clang13DLLExportAttrE\", \"vtable for clang::DLLExportAttr\"},\n    {\"_ZTVN5clang13DLLImportAttrE\", \"vtable for clang::DLLImportAttr\"},\n    {\"_ZTVN5clang14DeprecatedAttrE\", \"vtable for clang::DeprecatedAttr\"},\n    {\"_ZTVN5clang14DestructorAttrE\", \"vtable for clang::DestructorAttr\"},\n    {\"_ZTVN5clang12ExplicitAttrE\", \"vtable for clang::ExplicitAttr\"},\n    {\"_ZTVN5clang12FastCallAttrE\", \"vtable for clang::FastCallAttr\"},\n    {\"_ZTVN5clang9FinalAttrE\", \"vtable for clang::FinalAttr\"},\n    {\"_ZTVN5clang10FormatAttrE\", \"vtable for clang::FormatAttr\"},\n    {\"_ZTVN5clang13FormatArgAttrE\", \"vtable for clang::FormatArgAttr\"},\n    {\"_ZTVN5clang13GNUInlineAttrE\", \"vtable for clang::GNUInlineAttr\"},\n    {\"_ZTVN5clang12IBActionAttrE\", \"vtable for clang::IBActionAttr\"},\n    {\"_ZTVN5clang12IBOutletAttrE\", \"vtable for clang::IBOutletAttr\"},\n    {\"_ZTVN5clang22IBOutletCollectionAttrE\", \"vtable for clang::IBOutletCollectionAttr\"},\n    {\"_ZTVN5clang16InitPriorityAttrE\", \"vtable for clang::InitPriorityAttr\"},\n    {\"_ZTVN5clang26MBlazeInterruptHandlerAttrE\", \"vtable for clang::MBlazeInterruptHandlerAttr\"},\n    {\"_ZTVN5clang23MBlazeSaveVolatilesAttrE\", \"vtable for clang::MBlazeSaveVolatilesAttr\"},\n    {\"_ZTVN5clang19MSP430InterruptAttrE\", \"vtable for clang::MSP430InterruptAttr\"},\n    {\"_ZTVN5clang10MallocAttrE\", \"vtable for clang::MallocAttr\"},\n    {\"_ZTVN5clang21MaxFieldAlignmentAttrE\", \"vtable for clang::MaxFieldAlignmentAttr\"},\n    {\"_ZTVN5clang12MayAliasAttrE\", \"vtable for clang::MayAliasAttr\"},\n    {\"_ZTVN5clang14NSConsumedAttrE\", \"vtable for clang::NSConsumedAttr\"},\n    {\"_ZTVN5clang18NSConsumesSelfAttrE\", \"vtable for clang::NSConsumesSelfAttr\"},\n    {\"_ZTVN5clang25NSReturnsAutoreleasedAttrE\", \"vtable for clang::NSReturnsAutoreleasedAttr\"},\n    {\"_ZTVN5clang24NSReturnsNotRetainedAttrE\", \"vtable for clang::NSReturnsNotRetainedAttr\"},\n    {\"_ZTVN5clang21NSReturnsRetainedAttrE\", \"vtable for clang::NSReturnsRetainedAttr\"},\n    {\"_ZTVN5clang9NakedAttrE\", \"vtable for clang::NakedAttr\"},\n    {\"_ZTVN5clang12NoCommonAttrE\", \"vtable for clang::NoCommonAttr\"},\n    {\"_ZTVN5clang11NoDebugAttrE\", \"vtable for clang::NoDebugAttr\"},\n    {\"_ZTVN5clang12NoInlineAttrE\", \"vtable for clang::NoInlineAttr\"},\n    {\"_ZTVN5clang24NoInstrumentFunctionAttrE\", \"vtable for clang::NoInstrumentFunctionAttr\"},\n    {\"_ZTVN5clang12NoReturnAttrE\", \"vtable for clang::NoReturnAttr\"},\n    {\"_ZTVN5clang11NoThrowAttrE\", \"vtable for clang::NoThrowAttr\"},\n    {\"_ZTVN5clang11NonNullAttrE\", \"vtable for clang::NonNullAttr\"},\n    {\"_ZTVN5clang17ObjCExceptionAttrE\", \"vtable for clang::ObjCExceptionAttr\"},\n    {\"_ZTVN5clang16ObjCNSObjectAttrE\", \"vtable for clang::ObjCNSObjectAttr\"},\n    {\"_ZTVN5clang16OverloadableAttrE\", \"vtable for clang::OverloadableAttr\"},\n    {\"_ZTVN5clang12OverrideAttrE\", \"vtable for clang::OverrideAttr\"},\n    {\"_ZTVN5clang13OwnershipAttrE\", \"vtable for clang::OwnershipAttr\"},\n    {\"_ZTVN5clang10PackedAttrE\", \"vtable for clang::PackedAttr\"},\n    {\"_ZTVN5clang10PascalAttrE\", \"vtable for clang::PascalAttr\"},\n    {\"_ZTVN5clang8PureAttrE\", \"vtable for clang::PureAttr\"},\n    {\"_ZTVN5clang11RegparmAttrE\", \"vtable for clang::RegparmAttr\"},\n    {\"_ZTVN5clang21ReqdWorkGroupSizeAttrE\", \"vtable for clang::ReqdWorkGroupSizeAttr\"},\n    {\"_ZTVN5clang11SectionAttrE\", \"vtable for clang::SectionAttr\"},\n    {\"_ZTVN5clang12SentinelAttrE\", \"vtable for clang::SentinelAttr\"},\n    {\"_ZTVN5clang11StdCallAttrE\", \"vtable for clang::StdCallAttr\"},\n    {\"_ZTVN5clang12ThisCallAttrE\", \"vtable for clang::ThisCallAttr\"},\n    {\"_ZTVN5clang20TransparentUnionAttrE\", \"vtable for clang::TransparentUnionAttr\"},\n    {\"_ZTVN5clang15UnavailableAttrE\", \"vtable for clang::UnavailableAttr\"},\n    {\"_ZTVN5clang10UnusedAttrE\", \"vtable for clang::UnusedAttr\"},\n    {\"_ZTVN5clang8UsedAttrE\", \"vtable for clang::UsedAttr\"},\n    {\"_ZTVN5clang8UuidAttrE\", \"vtable for clang::UuidAttr\"},\n    {\"_ZTVN5clang13VecReturnAttrE\", \"vtable for clang::VecReturnAttr\"},\n    {\"_ZTVN5clang14VisibilityAttrE\", \"vtable for clang::VisibilityAttr\"},\n    {\"_ZTVN5clang20WarnUnusedResultAttrE\", \"vtable for clang::WarnUnusedResultAttr\"},\n    {\"_ZTVN5clang8WeakAttrE\", \"vtable for clang::WeakAttr\"},\n    {\"_ZTVN5clang14WeakImportAttrE\", \"vtable for clang::WeakImportAttr\"},\n    {\"_ZTVN5clang11WeakRefAttrE\", \"vtable for clang::WeakRefAttr\"},\n    {\"_ZTVN5clang27X86ForceAlignArgPointerAttrE\", \"vtable for clang::X86ForceAlignArgPointerAttr\"},\n    {\"_ZTVN5clang10RecordDeclE\", \"vtable for clang::RecordDecl\"},\n    {\"_ZTVN5clang7VarDeclE\", \"vtable for clang::VarDecl\"},\n    {\"_ZTVN5clang12FunctionDeclE\", \"vtable for clang::FunctionDecl\"},\n    {\"_ZTVN5clang16EnumConstantDeclE\", \"vtable for clang::EnumConstantDecl\"},\n    {\"_ZTVN5clang7TagDeclE\", \"vtable for clang::TagDecl\"},\n    {\"_ZTVN5clang9BlockDeclE\", \"vtable for clang::BlockDecl\"},\n    {\"_ZTVN5clang4DeclE\", \"vtable for clang::Decl\"},\n    {\"_ZTVN5clang20PrettyStackTraceDeclE\", \"vtable for clang::PrettyStackTraceDecl\"},\n    {\"_ZTVN5clang13CXXRecordDeclE\", \"vtable for clang::CXXRecordDecl\"},\n    {\"_ZTVN5clang13ObjCClassDeclE\", \"vtable for clang::ObjCClassDecl\"},\n    {\"_ZTVN5clang14ObjCMethodDeclE\", \"vtable for clang::ObjCMethodDecl\"},\n    {\"_ZTVN5clang20ObjCPropertyImplDeclE\", \"vtable for clang::ObjCPropertyImplDecl\"},\n    {\"_ZTVN5clang23NonTypeTemplateParmDeclE\", \"vtable for clang::NonTypeTemplateParmDecl\"},\n    {\"_ZTVN5clang31ClassTemplateSpecializationDeclE\", \"vtable for clang::ClassTemplateSpecializationDecl\"},\n    {\"_ZTVN5clang24RedeclarableTemplateDeclE\", \"vtable for clang::RedeclarableTemplateDecl\"},\n    {\"_ZTVN5clang20FunctionTemplateDeclE\", \"vtable for clang::FunctionTemplateDecl\"},\n    {\"_ZTVN5clang17ClassTemplateDeclE\", \"vtable for clang::ClassTemplateDecl\"},\n    {\"_ZZNK5clang15DeclarationName9printNameERN4llvm11raw_ostreamEE13OperatorNames\", \"clang::DeclarationName::printName(llvm::raw_ostream&) const::OperatorNames\"},\n    {\"_ZTVN12_GLOBAL__N_19ARMCXXABIE\", \"vtable for (anonymous namespace)::ARMCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_113ItaniumCXXABIE\", \"vtable for (anonymous namespace)::ItaniumCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_120ItaniumMangleContextE\", \"vtable for (anonymous namespace)::ItaniumMangleContext\"},\n    {\"_ZTVN12_GLOBAL__N_115MicrosoftCXXABIE\", \"vtable for (anonymous namespace)::MicrosoftCXXABI\"},\n    {\"_ZTVN12_GLOBAL__N_122MicrosoftMangleContextE\", \"vtable for (anonymous namespace)::MicrosoftMangleContext\"},\n    {\"_ZTVN12_GLOBAL__N_119RecordLayoutBuilderE\", \"vtable for (anonymous namespace)::RecordLayoutBuilder\"},\n    {\"_ZTVN12_GLOBAL__N_121MSRecordLayoutBuilderE\", \"vtable for (anonymous namespace)::MSRecordLayoutBuilder\"},\n    {\"_ZTVN5clang13PrinterHelperE\", \"vtable for clang::PrinterHelper\"},\n    {\"_ZZN12_GLOBAL__N_111StmtPrinter24VisitCXXOperatorCallExprEPN5clang19CXXOperatorCallExprEE9OpStrings\", \"(anonymous namespace)::StmtPrinter::VisitCXXOperatorCallExpr(clang::CXXOperatorCallExpr*)::OpStrings\"},\n    {\"_ZTVN5clang11PPCallbacksE\", \"vtable for clang::PPCallbacks\"},\n    {\"_ZZ16ComputeDATE_TIMERN5clang14SourceLocationES1_RNS_12PreprocessorEE6Months\", \"ComputeDATE_TIME(clang::SourceLocation&, clang::SourceLocation&, clang::Preprocessor&)::Months\"},\n    {\"_ZTVN5clang8PTHLexerE\", \"vtable for clang::PTHLexer\"},\n    {\"_ZTVN5clang10PTHManagerE\", \"vtable for clang::PTHManager\"},\n    {\"_ZTVN12_GLOBAL__N_112PTHStatCacheE\", \"vtable for (anonymous namespace)::PTHStatCache\"},\n    {\"_ZTVN5clang13PragmaHandlerE\", \"vtable for clang::PragmaHandler\"},\n    {\"_ZTVN5clang18EmptyPragmaHandlerE\", \"vtable for clang::EmptyPragmaHandler\"},\n    {\"_ZTVN5clang15PragmaNamespaceE\", \"vtable for clang::PragmaNamespace\"},\n    {\"_ZTVN12_GLOBAL__N_120PragmaCommentHandlerE\", \"vtable for (anonymous namespace)::PragmaCommentHandler\"},\n    {\"_ZTVN12_GLOBAL__N_125PragmaSTDC_UnknownHandlerE\", \"vtable for (anonymous namespace)::PragmaSTDC_UnknownHandler\"},\n    {\"_ZTVN12_GLOBAL__N_134PragmaSTDC_CX_LIMITED_RANGEHandlerE\", \"vtable for (anonymous namespace)::PragmaSTDC_CX_LIMITED_RANGEHandler\"},\n    {\"_ZTVN12_GLOBAL__N_129PragmaSTDC_FENV_ACCESSHandlerE\", \"vtable for (anonymous namespace)::PragmaSTDC_FENV_ACCESSHandler\"},\n    {\"_ZTVN12_GLOBAL__N_129PragmaSTDC_FP_CONTRACTHandlerE\", \"vtable for (anonymous namespace)::PragmaSTDC_FP_CONTRACTHandler\"},\n    {\"_ZTVN12_GLOBAL__N_118PragmaDebugHandlerE\", \"vtable for (anonymous namespace)::PragmaDebugHandler\"},\n    {\"_ZTVN12_GLOBAL__N_123PragmaDiagnosticHandlerE\", \"vtable for (anonymous namespace)::PragmaDiagnosticHandler\"},\n    {\"_ZTVN12_GLOBAL__N_123PragmaDependencyHandlerE\", \"vtable for (anonymous namespace)::PragmaDependencyHandler\"},\n    {\"_ZTVN12_GLOBAL__N_125PragmaSystemHeaderHandlerE\", \"vtable for (anonymous namespace)::PragmaSystemHeaderHandler\"},\n    {\"_ZTVN12_GLOBAL__N_119PragmaPoisonHandlerE\", \"vtable for (anonymous namespace)::PragmaPoisonHandler\"},\n    {\"_ZTVN12_GLOBAL__N_120PragmaMessageHandlerE\", \"vtable for (anonymous namespace)::PragmaMessageHandler\"},\n    {\"_ZTVN12_GLOBAL__N_121PragmaPopMacroHandlerE\", \"vtable for (anonymous namespace)::PragmaPopMacroHandler\"},\n    {\"_ZTVN12_GLOBAL__N_122PragmaPushMacroHandlerE\", \"vtable for (anonymous namespace)::PragmaPushMacroHandler\"},\n    {\"_ZTVN12_GLOBAL__N_117PragmaMarkHandlerE\", \"vtable for (anonymous namespace)::PragmaMarkHandler\"},\n    {\"_ZTVN12_GLOBAL__N_117PragmaOnceHandlerE\", \"vtable for (anonymous namespace)::PragmaOnceHandler\"},\n    {\"_ZTVN5clang33ExternalPreprocessingRecordSourceE\", \"vtable for clang::ExternalPreprocessingRecordSource\"},\n    {\"_ZTVN5clang19PreprocessingRecordE\", \"vtable for clang::PreprocessingRecord\"},\n    {\"_ZTVN5clang26ExternalPreprocessorSourceE\", \"vtable for clang::ExternalPreprocessorSource\"},\n    {\"_ZTVN5clang14CommentHandlerE\", \"vtable for clang::CommentHandler\"},\n    {\"_ZTVN5clang21CodeCompletionHandlerE\", \"vtable for clang::CodeCompletionHandler\"},\n    {\"_ZTVN5clang16DiagnosticClientE\", \"vtable for clang::DiagnosticClient\"},\n    {\"_ZZN5clang13DiagnosticIDs21getCategoryNameFromIDEjE17CategoryNameTable\", \"clang::DiagnosticIDs::getCategoryNameFromID(unsigned int)::CategoryNameTable\"},\n    {\"_ZTVN5clang17MemorizeStatCallsE\", \"vtable for clang::MemorizeStatCalls\"},\n    {\"_ZTVN5clang18IdentifierIteratorE\", \"vtable for clang::IdentifierIterator\"},\n    {\"_ZTVN5clang20IdentifierInfoLookupE\", \"vtable for clang::IdentifierInfoLookup\"},\n    {\"_ZTVN5clang24ExternalIdentifierLookupE\", \"vtable for clang::ExternalIdentifierLookup\"},\n    {\"_ZTVN12_GLOBAL__N_119EmptyLookupIteratorE\", \"vtable for (anonymous namespace)::EmptyLookupIterator\"},\n    {\"_ZTVN5clang19PrettyStackTraceLocE\", \"vtable for clang::PrettyStackTraceLoc\"},\n    {\"_ZTVN5clang23ExternalSLocEntrySourceE\", \"vtable for clang::ExternalSLocEntrySource\"},\n    {\"_ZTVN5clang10TargetInfoE\", \"vtable for clang::TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116X86_64TargetInfoE\", \"vtable for (anonymous namespace)::X86_64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113X86TargetInfoE\", \"vtable for (anonymous namespace)::X86TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_135VisualStudioWindowsX86_64TargetInfoE\", \"vtable for (anonymous namespace)::VisualStudioWindowsX86_64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_121MinGWX86_64TargetInfoE\", \"vtable for (anonymous namespace)::MinGWX86_64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_123OpenBSDX86_64TargetInfoE\", \"vtable for (anonymous namespace)::OpenBSDX86_64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_122DarwinX86_64TargetInfoE\", \"vtable for (anonymous namespace)::DarwinX86_64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_64TargetInfoEEE\", \"vtable for (anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_116X86_32TargetInfoE\", \"vtable for (anonymous namespace)::X86_32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_121HaikuX86_32TargetInfoE\", \"vtable for (anonymous namespace)::HaikuX86_32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_135VisualStudioWindowsX86_32TargetInfoE\", \"vtable for (anonymous namespace)::VisualStudioWindowsX86_32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_121MinGWX86_32TargetInfoE\", \"vtable for (anonymous namespace)::MinGWX86_32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_122CygwinX86_32TargetInfoE\", \"vtable for (anonymous namespace)::CygwinX86_32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117SolarisTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::SolarisTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115MinixTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::MinixTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_117FreeBSDTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_121OpenBSDI386TargetInfoE\", \"vtable for (anonymous namespace)::OpenBSDI386TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116NetBSDTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::NetBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_122DragonFlyBSDTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::DragonFlyBSDTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115LinuxTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_120DarwinI386TargetInfoE\", \"vtable for (anonymous namespace)::DarwinI386TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116DarwinTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_118AuroraUXTargetInfoINS_16X86_32TargetInfoEEE\", \"vtable for (anonymous namespace)::AuroraUXTargetInfo<(anonymous namespace)::X86_32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_113TCETargetInfoE\", \"vtable for (anonymous namespace)::TCETargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117SystemZTargetInfoE\", \"vtable for (anonymous namespace)::SystemZTargetInfo\"},\n    {\"_ZN12_GLOBAL__N_117SystemZTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::SystemZTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_116PS3SPUTargetInfoINS_15PPC64TargetInfoEEE\", \"vtable for (anonymous namespace)::PS3SPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>\"},\n    {\"_ZN12_GLOBAL__N_113PPCTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::PPCTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_115PPC64TargetInfoE\", \"vtable for (anonymous namespace)::PPC64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113PPCTargetInfoE\", \"vtable for (anonymous namespace)::PPCTargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117SparcV8TargetInfoE\", \"vtable for (anonymous namespace)::SparcV8TargetInfo\"},\n    {\"_ZN12_GLOBAL__N_117SparcV8TargetInfo11GCCRegNamesE\", \"(anonymous namespace)::SparcV8TargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_124SolarisSparcV8TargetInfoE\", \"vtable for (anonymous namespace)::SolarisSparcV8TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_125AuroraUXSparcV8TargetInfoE\", \"vtable for (anonymous namespace)::AuroraUXSparcV8TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116MBlazeTargetInfoE\", \"vtable for (anonymous namespace)::MBlazeTargetInfo\"},\n    {\"_ZN12_GLOBAL__N_116MBlazeTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::MBlazeTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC64TargetInfoEEE\", \"vtable for (anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_116PS3PPUTargetInfoINS_15PPC64TargetInfoEEE\", \"vtable for (anonymous namespace)::PS3PPUTargetInfo<(anonymous namespace)::PPC64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_121DarwinPPC64TargetInfoE\", \"vtable for (anonymous namespace)::DarwinPPC64TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC64TargetInfoEEE\", \"vtable for (anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC64TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115PPC32TargetInfoE\", \"vtable for (anonymous namespace)::PPC32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117FreeBSDTargetInfoINS_15PPC32TargetInfoEEE\", \"vtable for (anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::PPC32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_121DarwinPPC32TargetInfoE\", \"vtable for (anonymous namespace)::DarwinPPC32TargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116DarwinTargetInfoINS_15PPC32TargetInfoEEE\", \"vtable for (anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::PPC32TargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_116MipselTargetInfoE\", \"vtable for (anonymous namespace)::MipselTargetInfo\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::MipsTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_114MipsTargetInfoE\", \"vtable for (anonymous namespace)::MipsTargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115LinuxTargetInfoINS_16MipselTargetInfoEEE\", \"vtable for (anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipselTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_113PSPTargetInfoINS_16MipselTargetInfoEEE\", \"vtable for (anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipselTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115LinuxTargetInfoINS_14MipsTargetInfoEEE\", \"vtable for (anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::MipsTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_113PSPTargetInfoINS_14MipsTargetInfoEEE\", \"vtable for (anonymous namespace)::PSPTargetInfo<(anonymous namespace)::MipsTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_116MSP430TargetInfoE\", \"vtable for (anonymous namespace)::MSP430TargetInfo\"},\n    {\"_ZN12_GLOBAL__N_116MSP430TargetInfo11GCCRegNamesE\", \"(anonymous namespace)::MSP430TargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_118BlackfinTargetInfoE\", \"vtable for (anonymous namespace)::BlackfinTargetInfo\"},\n    {\"_ZN12_GLOBAL__N_118BlackfinTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::BlackfinTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_113ARMTargetInfoE\", \"vtable for (anonymous namespace)::ARMTargetInfo\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo11GCCRegNamesE\", \"(anonymous namespace)::ARMTargetInfo::GCCRegNames\"},\n    {\"_ZTVN12_GLOBAL__N_117FreeBSDTargetInfoINS_13ARMTargetInfoEEE\", \"vtable for (anonymous namespace)::FreeBSDTargetInfo<(anonymous namespace)::ARMTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_119DarwinARMTargetInfoE\", \"vtable for (anonymous namespace)::DarwinARMTargetInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116DarwinTargetInfoINS_13ARMTargetInfoEEE\", \"vtable for (anonymous namespace)::DarwinTargetInfo<(anonymous namespace)::ARMTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_115LinuxTargetInfoINS_13ARMTargetInfoEEE\", \"vtable for (anonymous namespace)::LinuxTargetInfo<(anonymous namespace)::ARMTargetInfo>\"},\n    {\"_ZTVN12_GLOBAL__N_112ArgPromotionE\", \"vtable for (anonymous namespace)::ArgPromotion\"},\n    {\"_ZTVN12_GLOBAL__N_113ConstantMergeE\", \"vtable for (anonymous namespace)::ConstantMerge\"},\n    {\"_ZTVN12_GLOBAL__N_13DAHE\", \"vtable for (anonymous namespace)::DAH\"},\n    {\"_ZTVN12_GLOBAL__N_13DAEE\", \"vtable for (anonymous namespace)::DAE\"},\n    {\"_ZTVN12_GLOBAL__N_13DTEE\", \"vtable for (anonymous namespace)::DTE\"},\n    {\"_ZTVN12_GLOBAL__N_113FunctionAttrsE\", \"vtable for (anonymous namespace)::FunctionAttrs\"},\n    {\"_ZTVN12_GLOBAL__N_19GlobalDCEE\", \"vtable for (anonymous namespace)::GlobalDCE\"},\n    {\"_ZTVN12_GLOBAL__N_19GlobalOptE\", \"vtable for (anonymous namespace)::GlobalOpt\"},\n    {\"_ZTVN12_GLOBAL__N_113AlwaysInlinerE\", \"vtable for (anonymous namespace)::AlwaysInliner\"},\n    {\"_ZTVN12_GLOBAL__N_113SimpleInlinerE\", \"vtable for (anonymous namespace)::SimpleInliner\"},\n    {\"_ZTVN4llvm7InlinerE\", \"vtable for llvm::Inliner\"},\n    {\"_ZTVN12_GLOBAL__N_17PruneEHE\", \"vtable for (anonymous namespace)::PruneEH\"},\n    {\"_ZTVN12_GLOBAL__N_123StripDeadPrototypesPassE\", \"vtable for (anonymous namespace)::StripDeadPrototypesPass\"},\n    {\"_ZTVN12_GLOBAL__N_116WriteBitcodePassE\", \"vtable for (anonymous namespace)::WriteBitcodePass\"},\n    {\"_ZTVN4llvm13BitcodeReaderE\", \"vtable for llvm::BitcodeReader\"},\n    {\"_ZTVN4llvm12_GLOBAL__N_119ConstantPlaceHolderE\", \"vtable for llvm::(anonymous namespace)::ConstantPlaceHolder\"},\n    {\"_ZTVN12_GLOBAL__N_111X86AsmLexerE\", \"vtable for (anonymous namespace)::X86AsmLexer\"},\n    {\"_ZTVN12_GLOBAL__N_118X86_64ATTAsmParserE\", \"vtable for (anonymous namespace)::X86_64ATTAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_110X86OperandE\", \"vtable for (anonymous namespace)::X86Operand\"},\n    {\"_ZTVN12_GLOBAL__N_115X86ATTAsmParserE\", \"vtable for (anonymous namespace)::X86ATTAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_118X86_32ATTAsmParserE\", \"vtable for (anonymous namespace)::X86_32ATTAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_116SSEDomainFixPassE\", \"vtable for (anonymous namespace)::SSEDomainFixPass\"},\n    {\"_ZTVN12_GLOBAL__N_119ELFX86_64AsmBackendE\", \"vtable for (anonymous namespace)::ELFX86_64AsmBackend\"},\n    {\"_ZZNK12_GLOBAL__N_113X86AsmBackend16getFixupKindInfoEN4llvm11MCFixupKindEE5Infos\", \"(anonymous namespace)::X86AsmBackend::getFixupKindInfo(llvm::MCFixupKind) const::Infos\"},\n    {\"_ZTVN12_GLOBAL__N_118X86ELFObjectWriterE\", \"vtable for (anonymous namespace)::X86ELFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_113X86AsmBackendE\", \"vtable for (anonymous namespace)::X86AsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_122DarwinX86_64AsmBackendE\", \"vtable for (anonymous namespace)::DarwinX86_64AsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_119ELFX86_32AsmBackendE\", \"vtable for (anonymous namespace)::ELFX86_32AsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_120WindowsX86AsmBackendE\", \"vtable for (anonymous namespace)::WindowsX86AsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_122DarwinX86_32AsmBackendE\", \"vtable for (anonymous namespace)::DarwinX86_32AsmBackend\"},\n    {\"_ZTVN4llvm13X86AsmPrinterE\", \"vtable for llvm::X86AsmPrinter\"},\n    {\"_ZTVN4llvm24X86COFFMachineModuleInfoE\", \"vtable for llvm::X86COFFMachineModuleInfo\"},\n    {\"_ZTVN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEEE\", \"vtable for (anonymous namespace)::Emitter<llvm::JITCodeEmitter>\"},\n    {\"_ZTVN4llvm16X86ELFWriterInfoE\", \"vtable for llvm::X86ELFWriterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_111X86FastISelE\", \"vtable for (anonymous namespace)::X86FastISel\"},\n    {\"_ZTVN12_GLOBAL__N_13FPSE\", \"vtable for (anonymous namespace)::FPS\"},\n    {\"_ZTVN4llvm16X86FrameLoweringE\", \"vtable for llvm::X86FrameLowering\"},\n    {\"_ZTVN12_GLOBAL__N_115X86DAGToDAGISelE\", \"vtable for (anonymous namespace)::X86DAGToDAGISel\"},\n    {\"_ZTVN4llvm17X86TargetLoweringE\", \"vtable for llvm::X86TargetLowering\"},\n    {\"_ZTVN4llvm12X86InstrInfoE\", \"vtable for llvm::X86InstrInfo\"},\n    {\"_ZTVN12_GLOBAL__N_14CGBRE\", \"vtable for (anonymous namespace)::CGBR\"},\n    {\"_ZTVN4llvm10X86JITInfoE\", \"vtable for llvm::X86JITInfo\"},\n    {\"_ZTVN4llvm15X86ELFMCAsmInfoE\", \"vtable for llvm::X86ELFMCAsmInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116X86MCCodeEmitterE\", \"vtable for (anonymous namespace)::X86MCCodeEmitter\"},\n    {\"_ZTVN12_GLOBAL__N_119X86MachObjectWriterE\", \"vtable for (anonymous namespace)::X86MachObjectWriter\"},\n    {\"_ZTVN4llvm15X86RegisterInfoE\", \"vtable for llvm::X86RegisterInfo\"},\n    {\"_ZTVN4llvm3X868CCRClassE\", \"vtable for llvm::X86::CCRClass\"},\n    {\"_ZTVN4llvm3X869FR32ClassE\", \"vtable for llvm::X86::FR32Class\"},\n    {\"_ZTVN4llvm3X869FR64ClassE\", \"vtable for llvm::X86::FR64Class\"},\n    {\"_ZTVN4llvm3X869GR16ClassE\", \"vtable for llvm::X86::GR16Class\"},\n    {\"_ZTVN4llvm3X8615GR16_NOREXClassE\", \"vtable for llvm::X86::GR16_NOREXClass\"},\n    {\"_ZTVN4llvm3X869GR32ClassE\", \"vtable for llvm::X86::GR32Class\"},\n    {\"_ZTVN4llvm3X8615GR32_NOREXClassE\", \"vtable for llvm::X86::GR32_NOREXClass\"},\n    {\"_ZTVN4llvm3X8614GR32_NOSPClassE\", \"vtable for llvm::X86::GR32_NOSPClass\"},\n    {\"_ZTVN4llvm3X869GR64ClassE\", \"vtable for llvm::X86::GR64Class\"},\n    {\"_ZTVN4llvm3X8615GR64_NOREXClassE\", \"vtable for llvm::X86::GR64_NOREXClass\"},\n    {\"_ZTVN4llvm3X8620GR64_NOREX_NOSPClassE\", \"vtable for llvm::X86::GR64_NOREX_NOSPClass\"},\n    {\"_ZTVN4llvm3X8614GR64_NOSPClassE\", \"vtable for llvm::X86::GR64_NOSPClass\"},\n    {\"_ZTVN4llvm3X868GR8ClassE\", \"vtable for llvm::X86::GR8Class\"},\n    {\"_ZTVN4llvm3X8614GR8_NOREXClassE\", \"vtable for llvm::X86::GR8_NOREXClass\"},\n    {\"_ZTVN4llvm3X868RSTClassE\", \"vtable for llvm::X86::RSTClass\"},\n    {\"_ZTVN4llvm3X8610VR128ClassE\", \"vtable for llvm::X86::VR128Class\"},\n    {\"_ZTVN4llvm3X8610VR256ClassE\", \"vtable for llvm::X86::VR256Class\"},\n    {\"_ZTVN4llvm18X86GenRegisterInfoE\", \"vtable for llvm::X86GenRegisterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_14MSAHE\", \"vtable for (anonymous namespace)::MSAH\"},\n    {\"_ZTVN4llvm19X86SelectionDAGInfoE\", \"vtable for llvm::X86SelectionDAGInfo\"},\n    {\"_ZTVN4llvm12X86SubtargetE\", \"vtable for llvm::X86Subtarget\"},\n    {\"_ZTVN4llvm16X86TargetMachineE\", \"vtable for llvm::X86TargetMachine\"},\n    {\"_ZTVN4llvm25X8632_ELFTargetObjectFileE\", \"vtable for llvm::X8632_ELFTargetObjectFile\"},\n    {\"_ZTVN4llvm25X8664_ELFTargetObjectFileE\", \"vtable for llvm::X8664_ELFTargetObjectFile\"},\n    {\"_ZTVN4llvm27X8664_MachoTargetObjectFileE\", \"vtable for llvm::X8664_MachoTargetObjectFile\"},\n    {\"_ZTVN4llvm17X86ATTInstPrinterE\", \"vtable for llvm::X86ATTInstPrinter\"},\n    {\"_ZTVN4llvm19X86IntelInstPrinterE\", \"vtable for llvm::X86IntelInstPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_113ThumbAsmLexerE\", \"vtable for (anonymous namespace)::ThumbAsmLexer\"},\n    {\"_ZTVN12_GLOBAL__N_115ARMBaseAsmLexerE\", \"vtable for (anonymous namespace)::ARMBaseAsmLexer\"},\n    {\"_ZTVN12_GLOBAL__N_111ARMAsmLexerE\", \"vtable for (anonymous namespace)::ARMAsmLexer\"},\n    {\"_ZTVN12_GLOBAL__N_112ARMAsmParserE\", \"vtable for (anonymous namespace)::ARMAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_110ARMOperandE\", \"vtable for (anonymous namespace)::ARMOperand\"},\n    {\"_ZTVN12_GLOBAL__N_116ELFARMAsmBackendE\", \"vtable for (anonymous namespace)::ELFARMAsmBackend\"},\n    {\"_ZZNK12_GLOBAL__N_113ARMAsmBackend16getFixupKindInfoEN4llvm11MCFixupKindEE5Infos\", \"(anonymous namespace)::ARMAsmBackend::getFixupKindInfo(llvm::MCFixupKind) const::Infos\"},\n    {\"_ZTVN12_GLOBAL__N_118ARMELFObjectWriterE\", \"vtable for (anonymous namespace)::ARMELFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_113ARMAsmBackendE\", \"vtable for (anonymous namespace)::ARMAsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_119DarwinARMAsmBackendE\", \"vtable for (anonymous namespace)::DarwinARMAsmBackend\"},\n    {\"_ZTVN12_GLOBAL__N_119ARMMachObjectWriterE\", \"vtable for (anonymous namespace)::ARMMachObjectWriter\"},\n    {\"_ZTVN4llvm13ARMAsmPrinterE\", \"vtable for llvm::ARMAsmPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_122ObjectAttributeEmitterE\", \"vtable for (anonymous namespace)::ObjectAttributeEmitter\"},\n    {\"_ZTVN12_GLOBAL__N_116AttributeEmitterE\", \"vtable for (anonymous namespace)::AttributeEmitter\"},\n    {\"_ZTVN12_GLOBAL__N_119AsmAttributeEmitterE\", \"vtable for (anonymous namespace)::AsmAttributeEmitter\"},\n    {\"_ZTVN4llvm16ARMBaseInstrInfoE\", \"vtable for llvm::ARMBaseInstrInfo\"},\n    {\"_ZTVN4llvm19ARMBaseRegisterInfoE\", \"vtable for llvm::ARMBaseRegisterInfo\"},\n    {\"_ZTVN4llvm3ARM8DPRClassE\", \"vtable for llvm::ARM::DPRClass\"},\n    {\"_ZTVN4llvm3ARM8GPRClassE\", \"vtable for llvm::ARM::GPRClass\"},\n    {\"_ZTVN4llvm3ARM8QPRClassE\", \"vtable for llvm::ARM::QPRClass\"},\n    {\"_ZTVN4llvm3ARM9QQPRClassE\", \"vtable for llvm::ARM::QQPRClass\"},\n    {\"_ZTVN4llvm3ARM11QQQQPRClassE\", \"vtable for llvm::ARM::QQQQPRClass\"},\n    {\"_ZTVN4llvm3ARM9rGPRClassE\", \"vtable for llvm::ARM::rGPRClass\"},\n    {\"_ZTVN4llvm3ARM10tcGPRClassE\", \"vtable for llvm::ARM::tcGPRClass\"},\n    {\"_ZTVN4llvm18ARMGenRegisterInfoE\", \"vtable for llvm::ARMGenRegisterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114ARMCodeEmitterE\", \"vtable for (anonymous namespace)::ARMCodeEmitter\"},\n    {\"_ZTVN12_GLOBAL__N_118ARMConstantIslandsE\", \"vtable for (anonymous namespace)::ARMConstantIslands\"},\n    {\"_ZTVN4llvm20ARMConstantPoolValueE\", \"vtable for llvm::ARMConstantPoolValue\"},\n    {\"_ZTVN4llvm16ARMELFWriterInfoE\", \"vtable for llvm::ARMELFWriterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115ARMExpandPseudoE\", \"vtable for (anonymous namespace)::ARMExpandPseudo\"},\n    {\"_ZTVN12_GLOBAL__N_111ARMFastISelE\", \"vtable for (anonymous namespace)::ARMFastISel\"},\n    {\"_ZTVN4llvm16ARMFrameLoweringE\", \"vtable for llvm::ARMFrameLowering\"},\n    {\"_ZTVN12_GLOBAL__N_114ARMGlobalMergeE\", \"vtable for (anonymous namespace)::ARMGlobalMerge\"},\n    {\"_ZTVN4llvm19ARMHazardRecognizerE\", \"vtable for llvm::ARMHazardRecognizer\"},\n    {\"_ZTVN12_GLOBAL__N_115ARMDAGToDAGISelE\", \"vtable for (anonymous namespace)::ARMDAGToDAGISel\"},\n    {\"_ZTVN4llvm17ARMTargetLoweringE\", \"vtable for llvm::ARMTargetLowering\"},\n    {\"_ZTVN4llvm12ARMInstrInfoE\", \"vtable for llvm::ARMInstrInfo\"},\n    {\"_ZTVN4llvm10ARMJITInfoE\", \"vtable for llvm::ARMJITInfo\"},\n    {\"_ZTVN12_GLOBAL__N_115ARMLoadStoreOptE\", \"vtable for (anonymous namespace)::ARMLoadStoreOpt\"},\n    {\"_ZTVN12_GLOBAL__N_123ARMPreAllocLoadStoreOptE\", \"vtable for (anonymous namespace)::ARMPreAllocLoadStoreOpt\"},\n    {\"_ZTVN12_GLOBAL__N_116ARMMCCodeEmitterE\", \"vtable for (anonymous namespace)::ARMMCCodeEmitter\"},\n    {\"_ZTVN4llvm9ARMMCExprE\", \"vtable for llvm::ARMMCExpr\"},\n    {\"_ZTVN4llvm19ARMSelectionDAGInfoE\", \"vtable for llvm::ARMSelectionDAGInfo\"},\n    {\"_ZTVN4llvm12ARMSubtargetE\", \"vtable for llvm::ARMSubtarget\"},\n    {\"_ZTVN4llvm20ARMBaseTargetMachineE\", \"vtable for llvm::ARMBaseTargetMachine\"},\n    {\"_ZTVN4llvm22ARMElfTargetObjectFileE\", \"vtable for llvm::ARMElfTargetObjectFile\"},\n    {\"_ZTVN12_GLOBAL__N_112MLxExpansionE\", \"vtable for (anonymous namespace)::MLxExpansion\"},\n    {\"_ZTVN12_GLOBAL__N_115NEONMoveFixPassE\", \"vtable for (anonymous namespace)::NEONMoveFixPass\"},\n    {\"_ZTVN4llvm19Thumb1FrameLoweringE\", \"vtable for llvm::Thumb1FrameLowering\"},\n    {\"_ZTVN4llvm15Thumb1InstrInfoE\", \"vtable for llvm::Thumb1InstrInfo\"},\n    {\"_ZTVN4llvm18Thumb1RegisterInfoE\", \"vtable for llvm::Thumb1RegisterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_117Thumb2ITBlockPassE\", \"vtable for (anonymous namespace)::Thumb2ITBlockPass\"},\n    {\"_ZTVN4llvm15Thumb2InstrInfoE\", \"vtable for llvm::Thumb2InstrInfo\"},\n    {\"_ZTVN4llvm18Thumb2RegisterInfoE\", \"vtable for llvm::Thumb2RegisterInfo\"},\n    {\"_ZTVN12_GLOBAL__N_116Thumb2SizeReduceE\", \"vtable for (anonymous namespace)::Thumb2SizeReduce\"},\n    {\"_ZTVN12_GLOBAL__N_115WorkListRemoverE\", \"vtable for (anonymous namespace)::WorkListRemover\"},\n    {\"_ZTVN4llvm8FastISelE\", \"vtable for llvm::FastISel\"},\n    {\"_ZTVN12_GLOBAL__N_118NodeUpdateListenerE\", \"vtable for (anonymous namespace)::NodeUpdateListener\"},\n    {\"_ZTVN12_GLOBAL__N_115ScheduleDAGListE\", \"vtable for (anonymous namespace)::ScheduleDAGList\"},\n    {\"_ZTVN12_GLOBAL__N_125RegReductionPriorityQueueINS_14ilp_ls_rr_sortEEE\", \"vtable for (anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::ilp_ls_rr_sort>\"},\n    {\"_ZTVN12_GLOBAL__N_118RegReductionPQBaseE\", \"vtable for (anonymous namespace)::RegReductionPQBase\"},\n    {\"_ZTVN12_GLOBAL__N_125RegReductionPriorityQueueINS_17hybrid_ls_rr_sortEEE\", \"vtable for (anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::hybrid_ls_rr_sort>\"},\n    {\"_ZTVN12_GLOBAL__N_125RegReductionPriorityQueueINS_14src_ls_rr_sortEEE\", \"vtable for (anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::src_ls_rr_sort>\"},\n    {\"_ZTVN12_GLOBAL__N_125RegReductionPriorityQueueINS_13td_ls_rr_sortEEE\", \"vtable for (anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::td_ls_rr_sort>\"},\n    {\"_ZTVN12_GLOBAL__N_125RegReductionPriorityQueueINS_13bu_ls_rr_sortEEE\", \"vtable for (anonymous namespace)::RegReductionPriorityQueue<(anonymous namespace)::bu_ls_rr_sort>\"},\n    {\"_ZTVN12_GLOBAL__N_117ScheduleDAGRRListE\", \"vtable for (anonymous namespace)::ScheduleDAGRRList\"},\n    {\"_ZTVN4llvm18ScheduleDAGSDNodesE\", \"vtable for llvm::ScheduleDAGSDNodes\"},\n    {\"_ZTVN4llvm12SelectionDAG17DAGUpdateListenerE\", \"vtable for llvm::SelectionDAG::DAGUpdateListener\"},\n    {\"_ZTVN12_GLOBAL__N_118RAUWUpdateListenerE\", \"vtable for (anonymous namespace)::RAUWUpdateListener\"},\n    {\"_ZTVN4llvm16SelectionDAGISelE\", \"vtable for llvm::SelectionDAGISel\"},\n    {\"_ZZ19FunctionCallsSetJmpPKN4llvm8FunctionEE15ReturnsTwiceFns\", \"FunctionCallsSetJmp(llvm::Function const*)::ReturnsTwiceFns\"},\n    {\"_ZTVN4llvm14TargetLoweringE\", \"vtable for llvm::TargetLowering\"},\n    {\"_ZTVN4llvm22TargetSelectionDAGInfoE\", \"vtable for llvm::TargetSelectionDAGInfo\"},\n    {\"_ZTVN4llvm10AsmPrinterE\", \"vtable for llvm::AsmPrinter\"},\n    {\"_ZTVN4llvm3DIEE\", \"vtable for llvm::DIE\"},\n    {\"_ZTVN4llvm10DIEIntegerE\", \"vtable for llvm::DIEInteger\"},\n    {\"_ZTVN4llvm9DIEStringE\", \"vtable for llvm::DIEString\"},\n    {\"_ZTVN4llvm8DIELabelE\", \"vtable for llvm::DIELabel\"},\n    {\"_ZTVN4llvm8DIEDeltaE\", \"vtable for llvm::DIEDelta\"},\n    {\"_ZTVN4llvm8DIEEntryE\", \"vtable for llvm::DIEEntry\"},\n    {\"_ZTVN4llvm8DIEBlockE\", \"vtable for llvm::DIEBlock\"},\n    {\"_ZTVN4llvm17DwarfCFIExceptionE\", \"vtable for llvm::DwarfCFIException\"},\n    {\"_ZTVN4llvm8DbgScopeE\", \"vtable for llvm::DbgScope\"},\n    {\"_ZTVN4llvm14DwarfExceptionE\", \"vtable for llvm::DwarfException\"},\n    {\"_ZTVN4llvm19DwarfTableExceptionE\", \"vtable for llvm::DwarfTableException\"},\n    {\"_ZTVN4llvm8AsmLexerE\", \"vtable for llvm::AsmLexer\"},\n    {\"_ZTVN12_GLOBAL__N_19AsmParserE\", \"vtable for (anonymous namespace)::AsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_116GenericAsmParserE\", \"vtable for (anonymous namespace)::GenericAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_113COFFAsmParserE\", \"vtable for (anonymous namespace)::COFFAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_115DarwinAsmParserE\", \"vtable for (anonymous namespace)::DarwinAsmParser\"},\n    {\"_ZTVN12_GLOBAL__N_112ELFAsmParserE\", \"vtable for (anonymous namespace)::ELFAsmParser\"},\n    {\"_ZTVN4llvm10MCAsmLexerE\", \"vtable for llvm::MCAsmLexer\"},\n    {\"_ZTVN4llvm11MCAsmParserE\", \"vtable for llvm::MCAsmParser\"},\n    {\"_ZTVN4llvm20MCAsmParserExtensionE\", \"vtable for llvm::MCAsmParserExtension\"},\n    {\"_ZTVN4llvm15TargetAsmParserE\", \"vtable for llvm::TargetAsmParser\"},\n    {\"_ZTVN4llvm24AggressiveAntiDepBreakerE\", \"vtable for llvm::AggressiveAntiDepBreaker\"},\n    {\"_ZTVN12_GLOBAL__N_116BranchFolderPassE\", \"vtable for (anonymous namespace)::BranchFolderPass\"},\n    {\"_ZTVN4llvm21CalculateSpillWeightsE\", \"vtable for llvm::CalculateSpillWeights\"},\n    {\"_ZTVN12_GLOBAL__N_116CodePlacementOptE\", \"vtable for (anonymous namespace)::CodePlacementOpt\"},\n    {\"_ZTVN4llvm22CriticalAntiDepBreakerE\", \"vtable for llvm::CriticalAntiDepBreaker\"},\n    {\"_ZTVN12_GLOBAL__N_126DeadMachineInstructionElimE\", \"vtable for (anonymous namespace)::DeadMachineInstructionElim\"},\n    {\"_ZTVN12_GLOBAL__N_114DwarfEHPrepareE\", \"vtable for (anonymous namespace)::DwarfEHPrepare\"},\n    {\"_ZN4llvm13EdgeBundlesIDE\", \"llvm::EdgeBundlesID\"},\n    {\"_ZTVN4llvm11EdgeBundlesE\", \"vtable for llvm::EdgeBundles\"},\n    {\"_ZTVN12_GLOBAL__N_117ExpandISelPseudosE\", \"vtable for (anonymous namespace)::ExpandISelPseudos\"},\n    {\"_ZTVN4llvm12GCModuleInfoE\", \"vtable for llvm::GCModuleInfo\"},\n    {\"_ZTVN12_GLOBAL__N_17DeleterE\", \"vtable for (anonymous namespace)::Deleter\"},\n    {\"_ZTVN12_GLOBAL__N_17PrinterE\", \"vtable for (anonymous namespace)::Printer\"},\n    {\"_ZTVN4llvm10GCStrategyE\", \"vtable for llvm::GCStrategy\"},\n    {\"_ZTVN12_GLOBAL__N_119MachineCodeAnalysisE\", \"vtable for (anonymous namespace)::MachineCodeAnalysis\"},\n    {\"_ZTVN12_GLOBAL__N_115LowerIntrinsicsE\", \"vtable for (anonymous namespace)::LowerIntrinsics\"},\n    {\"_ZTVN12_GLOBAL__N_111IfConverterE\", \"vtable for (anonymous namespace)::IfConverter\"},\n    {\"_ZTVN12_GLOBAL__N_113InlineSpillerE\", \"vtable for (anonymous namespace)::InlineSpiller\"},\n    {\"_ZTVN4llvm17LLVMTargetMachineE\", \"vtable for llvm::LLVMTargetMachine\"},\n    {\"_ZTVN4llvm20LatencyPriorityQueueE\", \"vtable for llvm::LatencyPriorityQueue\"},\n    {\"_ZTVN4llvm18LiveDebugVariablesE\", \"vtable for llvm::LiveDebugVariables\"},\n    {\"_ZTVN4llvm13LiveIntervalsE\", \"vtable for llvm::LiveIntervals\"},\n    {\"_ZN4llvm12LiveStacksIDE\", \"llvm::LiveStacksID\"},\n    {\"_ZTVN4llvm10LiveStacksE\", \"vtable for llvm::LiveStacks\"},\n    {\"_ZTVN4llvm13LiveVariablesE\", \"vtable for llvm::LiveVariables\"},\n    {\"_ZTVN12_GLOBAL__N_118LocalStackSlotPassE\", \"vtable for (anonymous namespace)::LocalStackSlotPass\"},\n    {\"_ZTVN12_GLOBAL__N_127LowerSubregsInstructionPassE\", \"vtable for (anonymous namespace)::LowerSubregsInstructionPass\"},\n    {\"_ZTVN12_GLOBAL__N_110MachineCSEE\", \"vtable for (anonymous namespace)::MachineCSE\"},\n    {\"_ZN4llvm19MachineDominatorsIDE\", \"llvm::MachineDominatorsID\"},\n    {\"_ZTVN4llvm20MachineDominatorTreeE\", \"vtable for llvm::MachineDominatorTree\"},\n    {\"_ZTVN4llvm19MachineFunctionInfoE\", \"vtable for llvm::MachineFunctionInfo\"},\n    {\"_ZTVN4llvm23MachineFunctionAnalysisE\", \"vtable for llvm::MachineFunctionAnalysis\"},\n    {\"_ZTVN4llvm19MachineFunctionPassE\", \"vtable for llvm::MachineFunctionPass\"},\n    {\"_ZTVN12_GLOBAL__N_126MachineFunctionPrinterPassE\", \"vtable for (anonymous namespace)::MachineFunctionPrinterPass\"},\n    {\"_ZTVN12_GLOBAL__N_111MachineLICME\", \"vtable for (anonymous namespace)::MachineLICM\"},\n    {\"_ZN4llvm17MachineLoopInfoIDE\", \"llvm::MachineLoopInfoID\"},\n    {\"_ZTVN4llvm15MachineLoopInfoE\", \"vtable for llvm::MachineLoopInfo\"},\n    {\"_ZTVN4llvm21MachineModuleInfoImplE\", \"vtable for llvm::MachineModuleInfoImpl\"},\n    {\"_ZTVN4llvm17MachineModuleInfoE\", \"vtable for llvm::MachineModuleInfo\"},\n    {\"_ZTVN4llvm26MMIAddrLabelMapCallbackPtrE\", \"vtable for llvm::MMIAddrLabelMapCallbackPtr\"},\n    {\"_ZTVN4llvm22MachineModuleInfoMachOE\", \"vtable for llvm::MachineModuleInfoMachO\"},\n    {\"_ZTVN4llvm20MachineModuleInfoELFE\", \"vtable for llvm::MachineModuleInfoELF\"},\n    {\"_ZTVN12_GLOBAL__N_114MachineSinkingE\", \"vtable for (anonymous namespace)::MachineSinking\"},\n    {\"_ZTVN12_GLOBAL__N_119MachineVerifierPassE\", \"vtable for (anonymous namespace)::MachineVerifierPass\"},\n    {\"_ZTVN12_GLOBAL__N_112OptimizePHIsE\", \"vtable for (anonymous namespace)::OptimizePHIs\"},\n    {\"_ZN4llvm16PHIEliminationIDE\", \"llvm::PHIEliminationID\"},\n    {\"_ZTVN12_GLOBAL__N_114PHIEliminationE\", \"vtable for (anonymous namespace)::PHIElimination\"},\n    {\"_ZTVN12_GLOBAL__N_117PeepholeOptimizerE\", \"vtable for (anonymous namespace)::PeepholeOptimizer\"},\n    {\"_ZTVN4llvm14AntiDepBreakerE\", \"vtable for llvm::AntiDepBreaker\"},\n    {\"_ZTVN12_GLOBAL__N_115PostRASchedulerE\", \"vtable for (anonymous namespace)::PostRAScheduler\"},\n    {\"_ZTVN12_GLOBAL__N_120SchedulePostRATDListE\", \"vtable for (anonymous namespace)::SchedulePostRATDList\"},\n    {\"_ZN4llvm19PreAllocSplittingIDE\", \"llvm::PreAllocSplittingID\"},\n    {\"_ZTVN12_GLOBAL__N_117PreAllocSplittingE\", \"vtable for (anonymous namespace)::PreAllocSplitting\"},\n    {\"_ZTVN4llvm19ProcessImplicitDefsE\", \"vtable for llvm::ProcessImplicitDefs\"},\n    {\"_ZTVN4llvm17PseudoSourceValueE\", \"vtable for llvm::PseudoSourceValue\"},\n    {\"_ZTVN4llvm27FixedStackPseudoSourceValueE\", \"vtable for llvm::FixedStackPseudoSourceValue\"},\n    {\"_ZTVN12_GLOBAL__N_16RAFastE\", \"vtable for (anonymous namespace)::RAFast\"},\n    {\"_ZTVN12_GLOBAL__N_19RALinScanE\", \"vtable for (anonymous namespace)::RALinScan\"},\n    {\"_ZTVN4llvm17RegisterCoalescerE\", \"vtable for llvm::RegisterCoalescer\"},\n    {\"_ZTVN4llvm11ScheduleDAGE\", \"vtable for llvm::ScheduleDAG\"},\n    {\"_ZTVN4llvm24ScheduleHazardRecognizerE\", \"vtable for llvm::ScheduleHazardRecognizer\"},\n    {\"_ZTVN4llvm17ScheduleDAGInstrsE\", \"vtable for llvm::ScheduleDAGInstrs\"},\n    {\"_ZTVN4llvm26ScoreboardHazardRecognizerE\", \"vtable for llvm::ScoreboardHazardRecognizer\"},\n    {\"_ZTVN4llvm3PEIE\", \"vtable for llvm::PEI\"},\n    {\"_ZN4llvm26SimpleRegisterCoalescingIDE\", \"llvm::SimpleRegisterCoalescingID\"},\n    {\"_ZTVN4llvm24SimpleRegisterCoalescingE\", \"vtable for llvm::SimpleRegisterCoalescing\"},\n    {\"_ZTVN12_GLOBAL__N_110SjLjEHPassE\", \"vtable for (anonymous namespace)::SjLjEHPass\"},\n    {\"_ZTVN4llvm11SlotIndexesE\", \"vtable for llvm::SlotIndexes\"},\n    {\"_ZTVN12_GLOBAL__N_115StandardSpillerE\", \"vtable for (anonymous namespace)::StandardSpiller\"},\n    {\"_ZTVN12_GLOBAL__N_114TrivialSpillerE\", \"vtable for (anonymous namespace)::TrivialSpiller\"},\n    {\"_ZTVN12_GLOBAL__N_111SpillerBaseE\", \"vtable for (anonymous namespace)::SpillerBase\"},\n    {\"_ZTVN12_GLOBAL__N_114StackProtectorE\", \"vtable for (anonymous namespace)::StackProtector\"},\n    {\"_ZTVN12_GLOBAL__N_117StackSlotColoringE\", \"vtable for (anonymous namespace)::StackSlotColoring\"},\n    {\"_ZN4llvm22StrongPHIEliminationIDE\", \"llvm::StrongPHIEliminationID\"},\n    {\"_ZTVN12_GLOBAL__N_120StrongPHIEliminationE\", \"vtable for (anonymous namespace)::StrongPHIElimination\"},\n    {\"_ZTVN12_GLOBAL__N_117TailDuplicatePassE\", \"vtable for (anonymous namespace)::TailDuplicatePass\"},\n    {\"_ZTVN4llvm19TargetInstrInfoImplE\", \"vtable for llvm::TargetInstrInfoImpl\"},\n    {\"_ZTVN4llvm27TargetLoweringObjectFileELFE\", \"vtable for llvm::TargetLoweringObjectFileELF\"},\n    {\"_ZTVN4llvm29TargetLoweringObjectFileMachOE\", \"vtable for llvm::TargetLoweringObjectFileMachO\"},\n    {\"_ZTVN4llvm28TargetLoweringObjectFileCOFFE\", \"vtable for llvm::TargetLoweringObjectFileCOFF\"},\n    {\"_ZN4llvm27TwoAddressInstructionPassIDE\", \"llvm::TwoAddressInstructionPassID\"},\n    {\"_ZTVN12_GLOBAL__N_125TwoAddressInstructionPassE\", \"vtable for (anonymous namespace)::TwoAddressInstructionPass\"},\n    {\"_ZN4llvm29UnreachableMachineBlockElimIDE\", \"llvm::UnreachableMachineBlockElimID\"},\n    {\"_ZTVN12_GLOBAL__N_127UnreachableMachineBlockElimE\", \"vtable for (anonymous namespace)::UnreachableMachineBlockElim\"},\n    {\"_ZTVN12_GLOBAL__N_120UnreachableBlockElimE\", \"vtable for (anonymous namespace)::UnreachableBlockElim\"},\n    {\"_ZTVN4llvm10VirtRegMapE\", \"vtable for llvm::VirtRegMap\"},\n    {\"_ZTVN4llvm15VirtRegRewriterE\", \"vtable for llvm::VirtRegRewriter\"},\n    {\"_ZTVN12_GLOBAL__N_115TrivialRewriterE\", \"vtable for (anonymous namespace)::TrivialRewriter\"},\n    {\"_ZTVN12_GLOBAL__N_113LocalRewriterE\", \"vtable for (anonymous namespace)::LocalRewriter\"},\n    {\"_ZTVN12_GLOBAL__N_14ADCEE\", \"vtable for (anonymous namespace)::ADCE\"},\n    {\"_ZTVN12_GLOBAL__N_114CodeGenPrepareE\", \"vtable for (anonymous namespace)::CodeGenPrepare\"},\n    {\"_ZTVN12_GLOBAL__N_131CodeGenPrepareFortifiedLibCallsE\", \"vtable for (anonymous namespace)::CodeGenPrepareFortifiedLibCalls\"},\n    {\"_ZTVN12_GLOBAL__N_126CorrelatedValuePropagationE\", \"vtable for (anonymous namespace)::CorrelatedValuePropagation\"},\n    {\"_ZTVN12_GLOBAL__N_13DSEE\", \"vtable for (anonymous namespace)::DSE\"},\n    {\"_ZTVN12_GLOBAL__N_18EarlyCSEE\", \"vtable for (anonymous namespace)::EarlyCSE\"},\n    {\"_ZTVN12_GLOBAL__N_111GEPSplitterE\", \"vtable for (anonymous namespace)::GEPSplitter\"},\n    {\"_ZTVN12_GLOBAL__N_13GVNE\", \"vtable for (anonymous namespace)::GVN\"},\n    {\"_ZTVN12_GLOBAL__N_114IndVarSimplifyE\", \"vtable for (anonymous namespace)::IndVarSimplify\"},\n    {\"_ZTVN12_GLOBAL__N_113JumpThreadingE\", \"vtable for (anonymous namespace)::JumpThreading\"},\n    {\"_ZTVN12_GLOBAL__N_14LICME\", \"vtable for (anonymous namespace)::LICM\"},\n    {\"_ZTVN12_GLOBAL__N_112LoopPromoterE\", \"vtable for (anonymous namespace)::LoopPromoter\"},\n    {\"_ZTVN12_GLOBAL__N_112LoopDeletionE\", \"vtable for (anonymous namespace)::LoopDeletion\"},\n    {\"_ZTVN12_GLOBAL__N_118LoopIdiomRecognizeE\", \"vtable for (anonymous namespace)::LoopIdiomRecognize\"},\n    {\"_ZTVN12_GLOBAL__N_110LoopRotateE\", \"vtable for (anonymous namespace)::LoopRotate\"},\n    {\"_ZTVN12_GLOBAL__N_118LoopStrengthReduceE\", \"vtable for (anonymous namespace)::LoopStrengthReduce\"},\n    {\"_ZTVN12_GLOBAL__N_110LoopUnrollE\", \"vtable for (anonymous namespace)::LoopUnroll\"},\n    {\"_ZTVN12_GLOBAL__N_112LoopUnswitchE\", \"vtable for (anonymous namespace)::LoopUnswitch\"},\n    {\"_ZTVN12_GLOBAL__N_19MemCpyOptE\", \"vtable for (anonymous namespace)::MemCpyOpt\"},\n    {\"_ZTVN12_GLOBAL__N_111ReassociateE\", \"vtable for (anonymous namespace)::Reassociate\"},\n    {\"_ZTVN12_GLOBAL__N_16IPSCCPE\", \"vtable for (anonymous namespace)::IPSCCP\"},\n    {\"_ZTVN12_GLOBAL__N_14SCCPE\", \"vtable for (anonymous namespace)::SCCP\"},\n    {\"_ZTVN12_GLOBAL__N_110SROA_SSAUpE\", \"vtable for (anonymous namespace)::SROA_SSAUp\"},\n    {\"_ZTVN12_GLOBAL__N_114AllocaPromoterE\", \"vtable for (anonymous namespace)::AllocaPromoter\"},\n    {\"_ZTVN12_GLOBAL__N_14SROAE\", \"vtable for (anonymous namespace)::SROA\"},\n    {\"_ZTVN12_GLOBAL__N_17SROA_DTE\", \"vtable for (anonymous namespace)::SROA_DT\"},\n    {\"_ZTVN12_GLOBAL__N_115CFGSimplifyPassE\", \"vtable for (anonymous namespace)::CFGSimplifyPass\"},\n    {\"_ZTVN12_GLOBAL__N_116SimplifyLibCallsE\", \"vtable for (anonymous namespace)::SimplifyLibCalls\"},\n    {\"_ZTVN12_GLOBAL__N_19StrCatOptE\", \"vtable for (anonymous namespace)::StrCatOpt\"},\n    {\"_ZTVN12_GLOBAL__N_119LibCallOptimizationE\", \"vtable for (anonymous namespace)::LibCallOptimization\"},\n    {\"_ZTVN12_GLOBAL__N_110StrNCatOptE\", \"vtable for (anonymous namespace)::StrNCatOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrChrOptE\", \"vtable for (anonymous namespace)::StrChrOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110StrRChrOptE\", \"vtable for (anonymous namespace)::StrRChrOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrCmpOptE\", \"vtable for (anonymous namespace)::StrCmpOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110StrNCmpOptE\", \"vtable for (anonymous namespace)::StrNCmpOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrCpyOptE\", \"vtable for (anonymous namespace)::StrCpyOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110StrNCpyOptE\", \"vtable for (anonymous namespace)::StrNCpyOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrLenOptE\", \"vtable for (anonymous namespace)::StrLenOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110StrPBrkOptE\", \"vtable for (anonymous namespace)::StrPBrkOpt\"},\n    {\"_ZTVN12_GLOBAL__N_18StrToOptE\", \"vtable for (anonymous namespace)::StrToOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrSpnOptE\", \"vtable for (anonymous namespace)::StrSpnOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110StrCSpnOptE\", \"vtable for (anonymous namespace)::StrCSpnOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19StrStrOptE\", \"vtable for (anonymous namespace)::StrStrOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19MemCmpOptE\", \"vtable for (anonymous namespace)::MemCmpOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19MemCpyOptE\", \"vtable for (anonymous namespace)::MemCpyOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110MemMoveOptE\", \"vtable for (anonymous namespace)::MemMoveOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19MemSetOptE\", \"vtable for (anonymous namespace)::MemSetOpt\"},\n    {\"_ZTVN12_GLOBAL__N_16PowOptE\", \"vtable for (anonymous namespace)::PowOpt\"},\n    {\"_ZTVN12_GLOBAL__N_17Exp2OptE\", \"vtable for (anonymous namespace)::Exp2Opt\"},\n    {\"_ZTVN12_GLOBAL__N_116UnaryDoubleFPOptE\", \"vtable for (anonymous namespace)::UnaryDoubleFPOpt\"},\n    {\"_ZTVN12_GLOBAL__N_16FFSOptE\", \"vtable for (anonymous namespace)::FFSOpt\"},\n    {\"_ZTVN12_GLOBAL__N_16AbsOptE\", \"vtable for (anonymous namespace)::AbsOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110IsDigitOptE\", \"vtable for (anonymous namespace)::IsDigitOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110IsAsciiOptE\", \"vtable for (anonymous namespace)::IsAsciiOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110ToAsciiOptE\", \"vtable for (anonymous namespace)::ToAsciiOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110SPrintFOptE\", \"vtable for (anonymous namespace)::SPrintFOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19PrintFOptE\", \"vtable for (anonymous namespace)::PrintFOpt\"},\n    {\"_ZTVN12_GLOBAL__N_19FWriteOptE\", \"vtable for (anonymous namespace)::FWriteOpt\"},\n    {\"_ZTVN12_GLOBAL__N_18FPutsOptE\", \"vtable for (anonymous namespace)::FPutsOpt\"},\n    {\"_ZTVN12_GLOBAL__N_110FPrintFOptE\", \"vtable for (anonymous namespace)::FPrintFOpt\"},\n    {\"_ZTVN12_GLOBAL__N_17PutsOptE\", \"vtable for (anonymous namespace)::PutsOpt\"},\n    {\"_ZTVN12_GLOBAL__N_112TailCallElimE\", \"vtable for (anonymous namespace)::TailCallElim\"},\n    {\"_ZTVN12_GLOBAL__N_128InstCombineFortifiedLibCallsE\", \"vtable for (anonymous namespace)::InstCombineFortifiedLibCalls\"},\n    {\"_ZTVN4llvm12InstCombinerE\", \"vtable for llvm::InstCombiner\"},\n    {\"_ZN4llvm20BreakCriticalEdgesIDE\", \"llvm::BreakCriticalEdgesID\"},\n    {\"_ZTVN12_GLOBAL__N_118BreakCriticalEdgesE\", \"vtable for (anonymous namespace)::BreakCriticalEdges\"},\n    {\"_ZTVN4llvm25SimplifyFortifiedLibCallsE\", \"vtable for llvm::SimplifyFortifiedLibCalls\"},\n    {\"_ZN4llvm7LCSSAIDE\", \"llvm::LCSSAID\"},\n    {\"_ZTVN12_GLOBAL__N_15LCSSAE\", \"vtable for (anonymous namespace)::LCSSA\"},\n    {\"_ZN4llvm14LoopSimplifyIDE\", \"llvm::LoopSimplifyID\"},\n    {\"_ZTVN12_GLOBAL__N_112LoopSimplifyE\", \"vtable for (anonymous namespace)::LoopSimplify\"},\n    {\"_ZN4llvm17LowerInvokePassIDE\", \"llvm::LowerInvokePassID\"},\n    {\"_ZTVN12_GLOBAL__N_111LowerInvokeE\", \"vtable for (anonymous namespace)::LowerInvoke\"},\n    {\"_ZN4llvm13LowerSwitchIDE\", \"llvm::LowerSwitchID\"},\n    {\"_ZTVN12_GLOBAL__N_111LowerSwitchE\", \"vtable for (anonymous namespace)::LowerSwitch\"},\n    {\"_ZTVN4llvm22UnifyFunctionExitNodesE\", \"vtable for llvm::UnifyFunctionExitNodes\"},\n    {\"_ZTVN4llvm9CallGraphE\", \"vtable for llvm::CallGraph\"},\n    {\"_ZTVN12_GLOBAL__N_114BasicCallGraphE\", \"vtable for (anonymous namespace)::BasicCallGraph\"},\n    {\"_ZTVN4llvm16CallGraphSCCPassE\", \"vtable for llvm::CallGraphSCCPass\"},\n    {\"_ZTVN12_GLOBAL__N_118PrintCallGraphPassE\", \"vtable for (anonymous namespace)::PrintCallGraphPass\"},\n    {\"_ZTVN12_GLOBAL__N_113CGPassManagerE\", \"vtable for (anonymous namespace)::CGPassManager\"},\n    {\"_ZTVN4llvm13FindUsedTypesE\", \"vtable for llvm::FindUsedTypes\"},\n    {\"_ZTVN4llvm13AliasAnalysisE\", \"vtable for llvm::AliasAnalysis\"},\n    {\"_ZTVN4llvm15AliasSetTracker13ASTCallbackVHE\", \"vtable for llvm::AliasSetTracker::ASTCallbackVH\"},\n    {\"_ZTVN12_GLOBAL__N_115AliasSetPrinterE\", \"vtable for (anonymous namespace)::AliasSetPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_118BasicAliasAnalysisE\", \"vtable for (anonymous namespace)::BasicAliasAnalysis\"},\n    {\"_ZTVN4llvm7IVUsersE\", \"vtable for llvm::IVUsers\"},\n    {\"_ZTVN4llvm11IVStrideUseE\", \"vtable for llvm::IVStrideUse\"},\n    {\"_ZTVN4llvm13LazyValueInfoE\", \"vtable for llvm::LazyValueInfo\"},\n    {\"_ZTVN12_GLOBAL__N_114LVIValueHandleE\", \"vtable for (anonymous namespace)::LVIValueHandle\"},\n    {\"_ZTVN4llvm8LoopInfoE\", \"vtable for llvm::LoopInfo\"},\n    {\"_ZTVN4llvm13LPPassManagerE\", \"vtable for llvm::LPPassManager\"},\n    {\"_ZTVN4llvm8LoopPassE\", \"vtable for llvm::LoopPass\"},\n    {\"_ZTVN12_GLOBAL__N_113PrintLoopPassE\", \"vtable for (anonymous namespace)::PrintLoopPass\"},\n    {\"_ZTVN4llvm24MemoryDependenceAnalysisE\", \"vtable for llvm::MemoryDependenceAnalysis\"},\n    {\"_ZTVN12_GLOBAL__N_14NoAAE\", \"vtable for (anonymous namespace)::NoAA\"},\n    {\"_ZTVN12_GLOBAL__N_113NoProfileInfoE\", \"vtable for (anonymous namespace)::NoProfileInfo\"},\n    {\"_ZTVN4llvm15ScalarEvolution14SCEVCallbackVHE\", \"vtable for llvm::ScalarEvolution::SCEVCallbackVH\"},\n    {\"_ZTVN4llvm15ScalarEvolutionE\", \"vtable for llvm::ScalarEvolution\"},\n    {\"_ZTVN4llvm11SCEVUnknownE\", \"vtable for llvm::SCEVUnknown\"},\n    {\"_ZTVN12_GLOBAL__N_122TypeBasedAliasAnalysisE\", \"vtable for (anonymous namespace)::TypeBasedAliasAnalysis\"},\n    {\"_ZTVN4llvm14TargetAsmLexerE\", \"vtable for llvm::TargetAsmLexer\"},\n    {\"_ZTVN4llvm10DataLayoutE\", \"vtable for llvm::DataLayout\"},\n    {\"_ZTVN12_GLOBAL__N_115StructLayoutMapE\", \"vtable for (anonymous namespace)::StructLayoutMap\"},\n    {\"_ZTVN4llvm19TargetELFWriterInfoE\", \"vtable for llvm::TargetELFWriterInfo\"},\n    {\"_ZTVN4llvm19TargetFrameLoweringE\", \"vtable for llvm::TargetFrameLowering\"},\n    {\"_ZTVN4llvm15TargetInstrInfoE\", \"vtable for llvm::TargetInstrInfo\"},\n    {\"_ZTVN4llvm24TargetLoweringObjectFileE\", \"vtable for llvm::TargetLoweringObjectFile\"},\n    {\"_ZTVN4llvm13TargetMachineE\", \"vtable for llvm::TargetMachine\"},\n    {\"_ZTVN4llvm18TargetRegisterInfoE\", \"vtable for llvm::TargetRegisterInfo\"},\n    {\"_ZTVN4llvm15TargetSubtargetE\", \"vtable for llvm::TargetSubtarget\"},\n    {\"_ZTVN4llvm24AssemblyAnnotationWriterE\", \"vtable for llvm::AssemblyAnnotationWriter\"},\n    {\"_ZTVN4llvm5ValueE\", \"vtable for llvm::Value\"},\n    {\"_ZTIN4llvm5ValueE\", \"typeinfo for llvm::Value\"},\n    {\"_ZTVN4llvm4TypeE\", \"vtable for llvm::Type\"},\n    {\"_ZTIN4llvm4TypeE\", \"typeinfo for llvm::Type\"},\n    {\"_ZTIN4llvm24AssemblyAnnotationWriterE\", \"typeinfo for llvm::AssemblyAnnotationWriter\"},\n    {\"_ZTVN4llvm10BasicBlockE\", \"vtable for llvm::BasicBlock\"},\n    {\"_ZTIN4llvm10BasicBlockE\", \"typeinfo for llvm::BasicBlock\"},\n    {\"_ZTVN4llvm10ConstantFPE\", \"vtable for llvm::ConstantFP\"},\n    {\"_ZTVN4llvm13ConstantArrayE\", \"vtable for llvm::ConstantArray\"},\n    {\"_ZTVN4llvm14ConstantStructE\", \"vtable for llvm::ConstantStruct\"},\n    {\"_ZTVN4llvm14ConstantVectorE\", \"vtable for llvm::ConstantVector\"},\n    {\"_ZTVN4llvm12BlockAddressE\", \"vtable for llvm::BlockAddress\"},\n    {\"_ZTVN4llvm21ConstantAggregateZeroE\", \"vtable for llvm::ConstantAggregateZero\"},\n    {\"_ZTIN4llvm21ConstantAggregateZeroE\", \"typeinfo for llvm::ConstantAggregateZero\"},\n    {\"_ZTVN4llvm19ConstantPointerNullE\", \"vtable for llvm::ConstantPointerNull\"},\n    {\"_ZTIN4llvm19ConstantPointerNullE\", \"typeinfo for llvm::ConstantPointerNull\"},\n    {\"_ZTVN4llvm12ConstantExprE\", \"vtable for llvm::ConstantExpr\"},\n    {\"_ZTIN4llvm12ConstantExprE\", \"typeinfo for llvm::ConstantExpr\"},\n    {\"_ZTVN4llvm10UndefValueE\", \"vtable for llvm::UndefValue\"},\n    {\"_ZTIN4llvm10UndefValueE\", \"typeinfo for llvm::UndefValue\"},\n    {\"_ZTIN4llvm10ConstantFPE\", \"typeinfo for llvm::ConstantFP\"},\n    {\"_ZTIN4llvm13ConstantArrayE\", \"typeinfo for llvm::ConstantArray\"},\n    {\"_ZTIN4llvm14ConstantStructE\", \"typeinfo for llvm::ConstantStruct\"},\n    {\"_ZTIN4llvm14ConstantVectorE\", \"typeinfo for llvm::ConstantVector\"},\n    {\"_ZTIN4llvm12BlockAddressE\", \"typeinfo for llvm::BlockAddress\"},\n    {\"_ZTVN4llvm10DebugRecVHE\", \"vtable for llvm::DebugRecVH\"},\n    {\"_ZTIN4llvm10DebugRecVHE\", \"typeinfo for llvm::DebugRecVH\"},\n    {\"_ZTVN4llvm13DominatorTreeE\", \"vtable for llvm::DominatorTree\"},\n    {\"_ZTIN4llvm13DominatorTreeE\", \"typeinfo for llvm::DominatorTree\"},\n    {\"_ZTVN4llvm8FunctionE\", \"vtable for llvm::Function\"},\n    {\"_ZZN4llvm9Intrinsic7getNameENS0_2IDEPPKNS_4TypeEjE5Table\", \"llvm::Intrinsic::getName(llvm::Intrinsic::ID, llvm::Type const**, unsigned int)::Table\"},\n    {\"_ZTIN4llvm8FunctionE\", \"typeinfo for llvm::Function\"},\n    {\"_ZTVN4llvm14GVMaterializerE\", \"vtable for llvm::GVMaterializer\"},\n    {\"_ZTIN4llvm14GVMaterializerE\", \"typeinfo for llvm::GVMaterializer\"},\n    {\"_ZTVN4llvm14GlobalVariableE\", \"vtable for llvm::GlobalVariable\"},\n    {\"_ZTVN4llvm11GlobalAliasE\", \"vtable for llvm::GlobalAlias\"},\n    {\"_ZTVN4llvm11GlobalValueE\", \"vtable for llvm::GlobalValue\"},\n    {\"_ZTIN4llvm11GlobalValueE\", \"typeinfo for llvm::GlobalValue\"},\n    {\"_ZTIN4llvm14GlobalVariableE\", \"typeinfo for llvm::GlobalVariable\"},\n    {\"_ZTIN4llvm11GlobalAliasE\", \"typeinfo for llvm::GlobalAlias\"},\n    {\"_ZTVN4llvm9InlineAsmE\", \"vtable for llvm::InlineAsm\"},\n    {\"_ZTIN4llvm9InlineAsmE\", \"typeinfo for llvm::InlineAsm\"},\n    {\"_ZTVN4llvm11InstructionE\", \"vtable for llvm::Instruction\"},\n    {\"_ZTIN4llvm11InstructionE\", \"typeinfo for llvm::Instruction\"},\n    {\"_ZTVN4llvm14TerminatorInstE\", \"vtable for llvm::TerminatorInst\"},\n    {\"_ZTVN4llvm16UnaryInstructionE\", \"vtable for llvm::UnaryInstruction\"},\n    {\"_ZTVN4llvm7PHINodeE\", \"vtable for llvm::PHINode\"},\n    {\"_ZTVN4llvm8CallInstE\", \"vtable for llvm::CallInst\"},\n    {\"_ZTVN4llvm10InvokeInstE\", \"vtable for llvm::InvokeInst\"},\n    {\"_ZTVN4llvm10ReturnInstE\", \"vtable for llvm::ReturnInst\"},\n    {\"_ZTVN4llvm10UnwindInstE\", \"vtable for llvm::UnwindInst\"},\n    {\"_ZTVN4llvm15UnreachableInstE\", \"vtable for llvm::UnreachableInst\"},\n    {\"_ZTVN4llvm10BranchInstE\", \"vtable for llvm::BranchInst\"},\n    {\"_ZTVN4llvm10AllocaInstE\", \"vtable for llvm::AllocaInst\"},\n    {\"_ZTVN4llvm8LoadInstE\", \"vtable for llvm::LoadInst\"},\n    {\"_ZTVN4llvm9StoreInstE\", \"vtable for llvm::StoreInst\"},\n    {\"_ZTVN4llvm17GetElementPtrInstE\", \"vtable for llvm::GetElementPtrInst\"},\n    {\"_ZTVN4llvm18ExtractElementInstE\", \"vtable for llvm::ExtractElementInst\"},\n    {\"_ZTVN4llvm17InsertElementInstE\", \"vtable for llvm::InsertElementInst\"},\n    {\"_ZTVN4llvm17ShuffleVectorInstE\", \"vtable for llvm::ShuffleVectorInst\"},\n    {\"_ZTVN4llvm15InsertValueInstE\", \"vtable for llvm::InsertValueInst\"},\n    {\"_ZTVN4llvm16ExtractValueInstE\", \"vtable for llvm::ExtractValueInst\"},\n    {\"_ZTVN4llvm14BinaryOperatorE\", \"vtable for llvm::BinaryOperator\"},\n    {\"_ZTVN4llvm9TruncInstE\", \"vtable for llvm::TruncInst\"},\n    {\"_ZTVN4llvm8ZExtInstE\", \"vtable for llvm::ZExtInst\"},\n    {\"_ZTVN4llvm8SExtInstE\", \"vtable for llvm::SExtInst\"},\n    {\"_ZTVN4llvm11FPTruncInstE\", \"vtable for llvm::FPTruncInst\"},\n    {\"_ZTVN4llvm9FPExtInstE\", \"vtable for llvm::FPExtInst\"},\n    {\"_ZTVN4llvm10UIToFPInstE\", \"vtable for llvm::UIToFPInst\"},\n    {\"_ZTVN4llvm10SIToFPInstE\", \"vtable for llvm::SIToFPInst\"},\n    {\"_ZTVN4llvm10FPToUIInstE\", \"vtable for llvm::FPToUIInst\"},\n    {\"_ZTVN4llvm10FPToSIInstE\", \"vtable for llvm::FPToSIInst\"},\n    {\"_ZTVN4llvm12PtrToIntInstE\", \"vtable for llvm::PtrToIntInst\"},\n    {\"_ZTVN4llvm12IntToPtrInstE\", \"vtable for llvm::IntToPtrInst\"},\n    {\"_ZTVN4llvm11BitCastInstE\", \"vtable for llvm::BitCastInst\"},\n    {\"_ZTVN4llvm7CmpInstE\", \"vtable for llvm::CmpInst\"},\n    {\"_ZTVN4llvm10SwitchInstE\", \"vtable for llvm::SwitchInst\"},\n    {\"_ZTVN4llvm14IndirectBrInstE\", \"vtable for llvm::IndirectBrInst\"},\n    {\"_ZTIN4llvm14TerminatorInstE\", \"typeinfo for llvm::TerminatorInst\"},\n    {\"_ZTIN4llvm16UnaryInstructionE\", \"typeinfo for llvm::UnaryInstruction\"},\n    {\"_ZTIN4llvm17GetElementPtrInstE\", \"typeinfo for llvm::GetElementPtrInst\"},\n    {\"_ZTIN4llvm7CmpInstE\", \"typeinfo for llvm::CmpInst\"},\n    {\"_ZTVN4llvm8ICmpInstE\", \"vtable for llvm::ICmpInst\"},\n    {\"_ZTIN4llvm8ICmpInstE\", \"typeinfo for llvm::ICmpInst\"},\n    {\"_ZTVN4llvm8FCmpInstE\", \"vtable for llvm::FCmpInst\"},\n    {\"_ZTIN4llvm8FCmpInstE\", \"typeinfo for llvm::FCmpInst\"},\n    {\"_ZTIN4llvm8CallInstE\", \"typeinfo for llvm::CallInst\"},\n    {\"_ZTVN4llvm10SelectInstE\", \"vtable for llvm::SelectInst\"},\n    {\"_ZTIN4llvm10SelectInstE\", \"typeinfo for llvm::SelectInst\"},\n    {\"_ZTVN4llvm9VAArgInstE\", \"vtable for llvm::VAArgInst\"},\n    {\"_ZTIN4llvm9VAArgInstE\", \"typeinfo for llvm::VAArgInst\"},\n    {\"_ZTIN4llvm18ExtractElementInstE\", \"typeinfo for llvm::ExtractElementInst\"},\n    {\"_ZTIN4llvm17InsertElementInstE\", \"typeinfo for llvm::InsertElementInst\"},\n    {\"_ZTIN4llvm16ExtractValueInstE\", \"typeinfo for llvm::ExtractValueInst\"},\n    {\"_ZTIN4llvm15InsertValueInstE\", \"typeinfo for llvm::InsertValueInst\"},\n    {\"_ZTIN4llvm7PHINodeE\", \"typeinfo for llvm::PHINode\"},\n    {\"_ZTIN4llvm10ReturnInstE\", \"typeinfo for llvm::ReturnInst\"},\n    {\"_ZTIN4llvm10BranchInstE\", \"typeinfo for llvm::BranchInst\"},\n    {\"_ZTIN4llvm10SwitchInstE\", \"typeinfo for llvm::SwitchInst\"},\n    {\"_ZTIN4llvm14IndirectBrInstE\", \"typeinfo for llvm::IndirectBrInst\"},\n    {\"_ZTIN4llvm11BitCastInstE\", \"typeinfo for llvm::BitCastInst\"},\n    {\"_ZTIN4llvm10InvokeInstE\", \"typeinfo for llvm::InvokeInst\"},\n    {\"_ZTIN4llvm10UnwindInstE\", \"typeinfo for llvm::UnwindInst\"},\n    {\"_ZTIN4llvm15UnreachableInstE\", \"typeinfo for llvm::UnreachableInst\"},\n    {\"_ZTIN4llvm10AllocaInstE\", \"typeinfo for llvm::AllocaInst\"},\n    {\"_ZTIN4llvm8LoadInstE\", \"typeinfo for llvm::LoadInst\"},\n    {\"_ZTIN4llvm9StoreInstE\", \"typeinfo for llvm::StoreInst\"},\n    {\"_ZTIN4llvm17ShuffleVectorInstE\", \"typeinfo for llvm::ShuffleVectorInst\"},\n    {\"_ZTIN4llvm14BinaryOperatorE\", \"typeinfo for llvm::BinaryOperator\"},\n    {\"_ZTIN4llvm9TruncInstE\", \"typeinfo for llvm::TruncInst\"},\n    {\"_ZTIN4llvm8ZExtInstE\", \"typeinfo for llvm::ZExtInst\"},\n    {\"_ZTIN4llvm8SExtInstE\", \"typeinfo for llvm::SExtInst\"},\n    {\"_ZTIN4llvm11FPTruncInstE\", \"typeinfo for llvm::FPTruncInst\"},\n    {\"_ZTIN4llvm9FPExtInstE\", \"typeinfo for llvm::FPExtInst\"},\n    {\"_ZTIN4llvm10UIToFPInstE\", \"typeinfo for llvm::UIToFPInst\"},\n    {\"_ZTIN4llvm10SIToFPInstE\", \"typeinfo for llvm::SIToFPInst\"},\n    {\"_ZTIN4llvm10FPToUIInstE\", \"typeinfo for llvm::FPToUIInst\"},\n    {\"_ZTIN4llvm10FPToSIInstE\", \"typeinfo for llvm::FPToSIInst\"},\n    {\"_ZTIN4llvm12PtrToIntInstE\", \"typeinfo for llvm::PtrToIntInst\"},\n    {\"_ZTIN4llvm12IntToPtrInstE\", \"typeinfo for llvm::IntToPtrInst\"},\n    {\"_ZTVN4llvm6MDNodeE\", \"vtable for llvm::MDNode\"},\n    {\"_ZTVN4llvm13MDNodeOperandE\", \"vtable for llvm::MDNodeOperand\"},\n    {\"_ZTIN4llvm13MDNodeOperandE\", \"typeinfo for llvm::MDNodeOperand\"},\n    {\"_ZTIN4llvm6MDNodeE\", \"typeinfo for llvm::MDNode\"},\n    {\"_ZTVN4llvm4PassE\", \"vtable for llvm::Pass\"},\n    {\"_ZTVN4llvm10ModulePassE\", \"vtable for llvm::ModulePass\"},\n    {\"_ZTVN4llvm13ImmutablePassE\", \"vtable for llvm::ImmutablePass\"},\n    {\"_ZTVN4llvm24PassRegistrationListenerE\", \"vtable for llvm::PassRegistrationListener\"},\n    {\"_ZTVN4llvm14PassNameParserE\", \"vtable for llvm::PassNameParser\"},\n    {\"_ZTIN4llvm4PassE\", \"typeinfo for llvm::Pass\"},\n    {\"_ZTIN4llvm10ModulePassE\", \"typeinfo for llvm::ModulePass\"},\n    {\"_ZTIN4llvm13ImmutablePassE\", \"typeinfo for llvm::ImmutablePass\"},\n    {\"_ZTVN4llvm12FunctionPassE\", \"vtable for llvm::FunctionPass\"},\n    {\"_ZTIN4llvm12FunctionPassE\", \"typeinfo for llvm::FunctionPass\"},\n    {\"_ZTVN4llvm14BasicBlockPassE\", \"vtable for llvm::BasicBlockPass\"},\n    {\"_ZTIN4llvm14BasicBlockPassE\", \"typeinfo for llvm::BasicBlockPass\"},\n    {\"_ZTIN4llvm24PassRegistrationListenerE\", \"typeinfo for llvm::PassRegistrationListener\"},\n    {\"_ZTIN4llvm14PassNameParserE\", \"typeinfo for llvm::PassNameParser\"},\n    {\"_ZTVN12_GLOBAL__N_116GetCFGOnlyPassesE\", \"vtable for (anonymous namespace)::GetCFGOnlyPasses\"},\n    {\"_ZTIN12_GLOBAL__N_116GetCFGOnlyPassesE\", \"typeinfo for (anonymous namespace)::GetCFGOnlyPasses\"},\n    {\"_ZTVN4llvm17PMTopLevelManagerE\", \"vtable for llvm::PMTopLevelManager\"},\n    {\"_ZTVN4llvm13PMDataManagerE\", \"vtable for llvm::PMDataManager\"},\n    {\"_ZTVN4llvm19FunctionPassManagerE\", \"vtable for llvm::FunctionPassManager\"},\n    {\"_ZTVN4llvm11PassManagerE\", \"vtable for llvm::PassManager\"},\n    {\"_ZTVN4llvm15PassManagerBaseE\", \"vtable for llvm::PassManagerBase\"},\n    {\"_ZTVN4llvm27PassManagerPrettyStackEntryE\", \"vtable for llvm::PassManagerPrettyStackEntry\"},\n    {\"_ZTIN4llvm27PassManagerPrettyStackEntryE\", \"typeinfo for llvm::PassManagerPrettyStackEntry\"},\n    {\"_ZTIN4llvm13PMDataManagerE\", \"typeinfo for llvm::PMDataManager\"},\n    {\"_ZTVN4llvm13FPPassManagerE\", \"vtable for llvm::FPPassManager\"},\n    {\"_ZTIN4llvm13FPPassManagerE\", \"typeinfo for llvm::FPPassManager\"},\n    {\"_ZTIN4llvm17PMTopLevelManagerE\", \"typeinfo for llvm::PMTopLevelManager\"},\n    {\"_ZTVN4llvm13MPPassManagerE\", \"vtable for llvm::MPPassManager\"},\n    {\"_ZTIN4llvm13MPPassManagerE\", \"typeinfo for llvm::MPPassManager\"},\n    {\"_ZTIN4llvm15PassManagerBaseE\", \"typeinfo for llvm::PassManagerBase\"},\n    {\"_ZTIN4llvm19FunctionPassManagerE\", \"typeinfo for llvm::FunctionPassManager\"},\n    {\"_ZTIN4llvm11PassManagerE\", \"typeinfo for llvm::PassManager\"},\n    {\"_ZTVN12_GLOBAL__N_113BBPassManagerE\", \"vtable for (anonymous namespace)::BBPassManager\"},\n    {\"_ZTIN12_GLOBAL__N_113BBPassManagerE\", \"typeinfo for (anonymous namespace)::BBPassManager\"},\n    {\"_ZTVN12_GLOBAL__N_117PrintFunctionPassE\", \"vtable for (anonymous namespace)::PrintFunctionPass\"},\n    {\"_ZTIN12_GLOBAL__N_117PrintFunctionPassE\", \"typeinfo for (anonymous namespace)::PrintFunctionPass\"},\n    {\"_ZTVN12_GLOBAL__N_115PrintModulePassE\", \"vtable for (anonymous namespace)::PrintModulePass\"},\n    {\"_ZTIN12_GLOBAL__N_115PrintModulePassE\", \"typeinfo for (anonymous namespace)::PrintModulePass\"},\n    {\"_ZTVN4llvm16AbstractTypeUserE\", \"vtable for llvm::AbstractTypeUser\"},\n    {\"_ZTVN4llvm12FunctionTypeE\", \"vtable for llvm::FunctionType\"},\n    {\"_ZTVN4llvm10StructTypeE\", \"vtable for llvm::StructType\"},\n    {\"_ZTVN4llvm9ArrayTypeE\", \"vtable for llvm::ArrayType\"},\n    {\"_ZTVN4llvm10VectorTypeE\", \"vtable for llvm::VectorType\"},\n    {\"_ZTVN4llvm11PointerTypeE\", \"vtable for llvm::PointerType\"},\n    {\"_ZTIN4llvm16AbstractTypeUserE\", \"typeinfo for llvm::AbstractTypeUser\"},\n    {\"_ZTVN4llvm14SequentialTypeE\", \"vtable for llvm::SequentialType\"},\n    {\"_ZTIN4llvm14SequentialTypeE\", \"typeinfo for llvm::SequentialType\"},\n    {\"_ZTIN4llvm12FunctionTypeE\", \"typeinfo for llvm::FunctionType\"},\n    {\"_ZTIN4llvm10StructTypeE\", \"typeinfo for llvm::StructType\"},\n    {\"_ZTIN4llvm9ArrayTypeE\", \"typeinfo for llvm::ArrayType\"},\n    {\"_ZTIN4llvm10VectorTypeE\", \"typeinfo for llvm::VectorType\"},\n    {\"_ZTIN4llvm11PointerTypeE\", \"typeinfo for llvm::PointerType\"},\n    {\"_ZTVN4llvm15TypeSymbolTableE\", \"vtable for llvm::TypeSymbolTable\"},\n    {\"_ZTIN4llvm15TypeSymbolTableE\", \"typeinfo for llvm::TypeSymbolTable\"},\n    {\"_ZTVN4llvm10CallbackVHE\", \"vtable for llvm::CallbackVH\"},\n    {\"_ZTIN4llvm10CallbackVHE\", \"typeinfo for llvm::CallbackVH\"},\n    {\"_ZTVN12_GLOBAL__N_18VerifierE\", \"vtable for (anonymous namespace)::Verifier\"},\n    {\"_ZTIN4llvm11InstVisitorIN12_GLOBAL__N_18VerifierEvEE\", \"typeinfo for llvm::InstVisitor<(anonymous namespace)::Verifier, void>\"},\n    {\"_ZTIN12_GLOBAL__N_18VerifierE\", \"typeinfo for (anonymous namespace)::Verifier\"},\n    {\"_ZTVN12_GLOBAL__N_17TypeSetE\", \"vtable for (anonymous namespace)::TypeSet\"},\n    {\"_ZTIN12_GLOBAL__N_17TypeSetE\", \"typeinfo for (anonymous namespace)::TypeSet\"},\n    {\"_ZTVN12_GLOBAL__N_111PreVerifierE\", \"vtable for (anonymous namespace)::PreVerifier\"},\n    {\"_ZTIN12_GLOBAL__N_111PreVerifierE\", \"typeinfo for (anonymous namespace)::PreVerifier\"},\n    {\"_ZTVN4llvm14ARMInstPrinterE\", \"vtable for llvm::ARMInstPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_118X86ELFObjectWriterE\", \"vtable for (anonymous namespace)::X86ELFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_115ELFObjectWriterE\", \"vtable for (anonymous namespace)::ELFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_121MBlazeELFObjectWriterE\", \"vtable for (anonymous namespace)::MBlazeELFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_118ARMELFObjectWriterE\", \"vtable for (anonymous namespace)::ARMELFObjectWriter\"},\n    {\"_ZTVN4llvm9MCAsmInfoE\", \"vtable for llvm::MCAsmInfo\"},\n    {\"_ZTVN12_GLOBAL__N_113MCAsmStreamerE\", \"vtable for (anonymous namespace)::MCAsmStreamer\"},\n    {\"_ZTVN4llvm10MCFragmentE\", \"vtable for llvm::MCFragment\"},\n    {\"_ZTVN4llvm13MCCodeEmitterE\", \"vtable for llvm::MCCodeEmitter\"},\n    {\"_ZTVN4llvm23MCELFObjectTargetWriterE\", \"vtable for llvm::MCELFObjectTargetWriter\"},\n    {\"_ZTVN12_GLOBAL__N_113MCELFStreamerE\", \"vtable for (anonymous namespace)::MCELFStreamer\"},\n    {\"_ZTVN4llvm12MCTargetExprE\", \"vtable for llvm::MCTargetExpr\"},\n    {\"_ZTVN4llvm13MCInstPrinterE\", \"vtable for llvm::MCInstPrinter\"},\n    {\"_ZTVN12_GLOBAL__N_117MCLoggingStreamerE\", \"vtable for (anonymous namespace)::MCLoggingStreamer\"},\n    {\"_ZTVN12_GLOBAL__N_115MCMachOStreamerE\", \"vtable for (anonymous namespace)::MCMachOStreamer\"},\n    {\"_ZTVN4llvm24MCMachObjectTargetWriterE\", \"vtable for llvm::MCMachObjectTargetWriter\"},\n    {\"_ZTVN12_GLOBAL__N_114MCNullStreamerE\", \"vtable for (anonymous namespace)::MCNullStreamer\"},\n    {\"_ZTVN4llvm16MCObjectStreamerE\", \"vtable for llvm::MCObjectStreamer\"},\n    {\"_ZTVN4llvm14MCObjectWriterE\", \"vtable for llvm::MCObjectWriter\"},\n    {\"_ZTVN4llvm9MCSectionE\", \"vtable for llvm::MCSection\"},\n    {\"_ZTVN4llvm13MCSectionCOFFE\", \"vtable for llvm::MCSectionCOFF\"},\n    {\"_ZTVN4llvm12MCSectionELFE\", \"vtable for llvm::MCSectionELF\"},\n    {\"_ZTVN4llvm14MCSectionMachOE\", \"vtable for llvm::MCSectionMachO\"},\n    {\"_ZTVN4llvm10MCStreamerE\", \"vtable for llvm::MCStreamer\"},\n    {\"_ZTVN12_GLOBAL__N_116MachObjectWriterE\", \"vtable for (anonymous namespace)::MachObjectWriter\"},\n    {\"_ZTVN4llvm16TargetAsmBackendE\", \"vtable for llvm::TargetAsmBackend\"},\n    {\"_ZZNK4llvm16TargetAsmBackend16getFixupKindInfoENS_11MCFixupKindEE8Builtins\", \"llvm::TargetAsmBackend::getFixupKindInfo(llvm::MCFixupKind) const::Builtins\"},\n    {\"_ZTVN12_GLOBAL__N_119WinCOFFObjectWriterE\", \"vtable for (anonymous namespace)::WinCOFFObjectWriter\"},\n    {\"_ZTVN12_GLOBAL__N_115WinCOFFStreamerE\", \"vtable for (anonymous namespace)::WinCOFFStreamer\"},\n    {\"_ZTVN4llvm13SlabAllocatorE\", \"vtable for llvm::SlabAllocator\"},\n    {\"_ZTVN4llvm19MallocSlabAllocatorE\", \"vtable for llvm::MallocSlabAllocator\"},\n    {\"_ZTIN4llvm13SlabAllocatorE\", \"typeinfo for llvm::SlabAllocator\"},\n    {\"_ZTIN4llvm19MallocSlabAllocatorE\", \"typeinfo for llvm::MallocSlabAllocator\"},\n    {\"_ZTVN4llvm2cl6OptionE\", \"vtable for llvm::cl::Option\"},\n    {\"_ZTIN4llvm2cl6OptionE\", \"typeinfo for llvm::cl::Option\"},\n    {\"_ZTVN4llvm2cl19generic_parser_baseE\", \"vtable for llvm::cl::generic_parser_base\"},\n    {\"_ZTIN4llvm2cl19generic_parser_baseE\", \"typeinfo for llvm::cl::generic_parser_base\"},\n    {\"_ZTIN4llvm2cl17basic_parser_implE\", \"typeinfo for llvm::cl::basic_parser_impl\"},\n    {\"_ZTVN4llvm2cl17basic_parser_implE\", \"vtable for llvm::cl::basic_parser_impl\"},\n    {\"_ZTVN4llvm2cl6parserIbEE\", \"vtable for llvm::cl::parser<bool>\"},\n    {\"_ZTIN4llvm2cl6parserIbEE\", \"typeinfo for llvm::cl::parser<bool>\"},\n    {\"_ZTVN4llvm2cl6parserINS0_13boolOrDefaultEEE\", \"vtable for llvm::cl::parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTIN4llvm2cl6parserINS0_13boolOrDefaultEEE\", \"typeinfo for llvm::cl::parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTVN4llvm2cl6parserIiEE\", \"vtable for llvm::cl::parser<int>\"},\n    {\"_ZTIN4llvm2cl6parserIiEE\", \"typeinfo for llvm::cl::parser<int>\"},\n    {\"_ZTVN4llvm2cl6parserIjEE\", \"vtable for llvm::cl::parser<unsigned int>\"},\n    {\"_ZTIN4llvm2cl6parserIjEE\", \"typeinfo for llvm::cl::parser<unsigned int>\"},\n    {\"_ZTVN4llvm2cl6parserIdEE\", \"vtable for llvm::cl::parser<double>\"},\n    {\"_ZTIN4llvm2cl6parserIdEE\", \"typeinfo for llvm::cl::parser<double>\"},\n    {\"_ZTVN4llvm2cl6parserIfEE\", \"vtable for llvm::cl::parser<float>\"},\n    {\"_ZTIN4llvm2cl6parserIfEE\", \"typeinfo for llvm::cl::parser<float>\"},\n    {\"_ZTVN4llvm2cl6parserISsEE\", \"vtable for llvm::cl::parser<std::string>\"},\n    {\"_ZTIN4llvm2cl6parserISsEE\", \"typeinfo for llvm::cl::parser<std::string>\"},\n    {\"_ZTVN4llvm2cl6parserIcEE\", \"vtable for llvm::cl::parser<char>\"},\n    {\"_ZTIN4llvm2cl6parserIcEE\", \"typeinfo for llvm::cl::parser<char>\"},\n    {\"_ZTVN4llvm2cl5aliasE\", \"vtable for llvm::cl::alias\"},\n    {\"_ZTIN4llvm2cl5aliasE\", \"typeinfo for llvm::cl::alias\"},\n    {\"_ZTIN4llvm2cl11opt_storageIN12_GLOBAL__N_114VersionPrinterELb1ELb1EEE\", \"typeinfo for llvm::cl::opt_storage<(anonymous namespace)::VersionPrinter, true, true>\"},\n    {\"_ZTIN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEEE\", \"typeinfo for llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTIN4llvm2cl11opt_storageIN12_GLOBAL__N_111HelpPrinterELb1ELb1EEE\", \"typeinfo for llvm::cl::opt_storage<(anonymous namespace)::HelpPrinter, true, true>\"},\n    {\"_ZTIN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEEE\", \"typeinfo for llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTIN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEEE\", \"typeinfo for llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>\"},\n    {\"_ZTVN4llvm14FoldingSetImplE\", \"vtable for llvm::FoldingSetImpl\"},\n    {\"_ZTIN4llvm14FoldingSetImplE\", \"typeinfo for llvm::FoldingSetImpl\"},\n    {\"_ZTVN4llvm21formatted_raw_ostreamE\", \"vtable for llvm::formatted_raw_ostream\"},\n    {\"_ZTIN4llvm21formatted_raw_ostreamE\", \"typeinfo for llvm::formatted_raw_ostream\"},\n    {\"_ZTVN4llvm12MemoryBufferE\", \"vtable for llvm::MemoryBuffer\"},\n    {\"_ZTIN4llvm12MemoryBufferE\", \"typeinfo for llvm::MemoryBuffer\"},\n    {\"_ZTVN12_GLOBAL__N_120MemoryBufferMMapFileE\", \"vtable for (anonymous namespace)::MemoryBufferMMapFile\"},\n    {\"_ZTIN12_GLOBAL__N_115MemoryBufferMemE\", \"typeinfo for (anonymous namespace)::MemoryBufferMem\"},\n    {\"_ZTIN12_GLOBAL__N_120MemoryBufferMMapFileE\", \"typeinfo for (anonymous namespace)::MemoryBufferMMapFile\"},\n    {\"_ZTVN12_GLOBAL__N_115MemoryBufferMemE\", \"vtable for (anonymous namespace)::MemoryBufferMem\"},\n    {\"_ZTVN4llvm21PrettyStackTraceEntryE\", \"vtable for llvm::PrettyStackTraceEntry\"},\n    {\"_ZTIN4llvm21PrettyStackTraceEntryE\", \"typeinfo for llvm::PrettyStackTraceEntry\"},\n    {\"_ZTVN4llvm22PrettyStackTraceStringE\", \"vtable for llvm::PrettyStackTraceString\"},\n    {\"_ZTIN4llvm22PrettyStackTraceStringE\", \"typeinfo for llvm::PrettyStackTraceString\"},\n    {\"_ZTVN4llvm23PrettyStackTraceProgramE\", \"vtable for llvm::PrettyStackTraceProgram\"},\n    {\"_ZTIN4llvm23PrettyStackTraceProgramE\", \"typeinfo for llvm::PrettyStackTraceProgram\"},\n    {\"_ZTVN4llvm3sys15ThreadLocalImplE\", \"vtable for llvm::sys::ThreadLocalImpl\"},\n    {\"_ZTIN4llvm3sys15ThreadLocalImplE\", \"typeinfo for llvm::sys::ThreadLocalImpl\"},\n    {\"_ZTVN4llvm11raw_ostreamE\", \"vtable for llvm::raw_ostream\"},\n    {\"_ZTVN4llvm14raw_fd_ostreamE\", \"vtable for llvm::raw_fd_ostream\"},\n    {\"_ZTVN4llvm18raw_string_ostreamE\", \"vtable for llvm::raw_string_ostream\"},\n    {\"_ZTVN4llvm19raw_svector_ostreamE\", \"vtable for llvm::raw_svector_ostream\"},\n    {\"_ZTVN4llvm16raw_null_ostreamE\", \"vtable for llvm::raw_null_ostream\"},\n    {\"_ZTIN4llvm11raw_ostreamE\", \"typeinfo for llvm::raw_ostream\"},\n    {\"_ZTIN4llvm18raw_string_ostreamE\", \"typeinfo for llvm::raw_string_ostream\"},\n    {\"_ZTIN4llvm16raw_null_ostreamE\", \"typeinfo for llvm::raw_null_ostream\"},\n    {\"_ZTVN4llvm18format_object_baseE\", \"vtable for llvm::format_object_base\"},\n    {\"_ZTIN4llvm18format_object_baseE\", \"typeinfo for llvm::format_object_base\"},\n    {\"_ZTIN4llvm14raw_fd_ostreamE\", \"typeinfo for llvm::raw_fd_ostream\"},\n    {\"_ZTIN4llvm19raw_svector_ostreamE\", \"typeinfo for llvm::raw_svector_ostream\"},\n    {\"_ZTVN4llvm14error_categoryE\", \"vtable for llvm::error_category\"},\n    {\"_ZTIN4llvm14error_categoryE\", \"typeinfo for llvm::error_category\"},\n    {\"_ZTVN4llvm11_do_messageE\", \"vtable for llvm::_do_message\"},\n    {\"_ZTIN4llvm11_do_messageE\", \"typeinfo for llvm::_do_message\"},\n    {\"_ZTVN4llvm23_generic_error_categoryE\", \"vtable for llvm::_generic_error_category\"},\n    {\"_ZTIN4llvm23_generic_error_categoryE\", \"typeinfo for llvm::_generic_error_category\"},\n    {\"_ZTVN4llvm22_system_error_categoryE\", \"vtable for llvm::_system_error_category\"},\n    {\"_ZTIN4llvm22_system_error_categoryE\", \"typeinfo for llvm::_system_error_category\"},\n    {\"_ZTVN5clang17PreprocessorLexerE\", \"vtable for clang::PreprocessorLexer\"},\n    {\"_ZTVN5clang6driver5tools6darwin10DarwinToolE\", \"vtable for clang::driver::tools::darwin::DarwinTool\"},\n    {\"_ZTVN5clang6driver5tools6darwin3CC1E\", \"vtable for clang::driver::tools::darwin::CC1\"},\n    {\"_ZTVN5clang19FileSystemStatCacheE\", \"vtable for clang::FileSystemStatCache\"},\n    {\"_ZTVN5clang13CodeGeneratorE\", \"vtable for clang::CodeGenerator\"},\n    {\"_ZTVN5clang14reachable_code8CallbackE\", \"vtable for clang::reachable_code::Callback\"},\n    {\"_ZTVN5clang15InheritableAttrE\", \"vtable for clang::InheritableAttr\"},\n    {\"_ZTVN5clang4ento9SubEngineE\", \"vtable for clang::ento::SubEngine\"},\n    {\"_ZTVN5clang4ento12SubRegionMapE\", \"vtable for clang::ento::SubRegionMap\"},\n    {\"_ZTVN5clang4ento9BugReport12NodeResolverE\", \"vtable for clang::ento::BugReport::NodeResolver\"},\n    {\"_ZTVN5clang4ento7GRState7PrinterE\", \"vtable for clang::ento::GRState::Printer\"},\n    {\"_ZTVN5clang4ento12SubRegionMap7VisitorE\", \"vtable for clang::ento::SubRegionMap::Visitor\"},\n    {\"_ZTVN5clang4ento11TypedRegionE\", \"vtable for clang::ento::TypedRegion\"},\n    {\"_ZTVN5clang4ento14CodeTextRegionE\", \"vtable for clang::ento::CodeTextRegion\"},\n    {\"_ZTVN5clang4ento11SValBuilderE\", \"vtable for clang::ento::SValBuilder\"},\n    {\"_ZTVN5clang4ento7SymExprE\", \"vtable for clang::ento::SymExpr\"},\n    {\"_ZTVN5clang4ento10SymbolDataE\", \"vtable for clang::ento::SymbolData\"},\n    {\"_ZTVN5clang13MangleContextE\", \"vtable for clang::MangleContext\"},\n    {\"_ZTVN4llvm18MCParsedAsmOperandE\", \"vtable for llvm::MCParsedAsmOperand\"},\n    {\"_ZTVN4llvm24MachineConstantPoolValueE\", \"vtable for llvm::MachineConstantPoolValue\"},\n    {\"_ZTVN4llvm13TargetJITInfoE\", \"vtable for llvm::TargetJITInfo\"},\n    {\"_ZTVN4llvm27MachinePassRegistryListenerE\", \"vtable for llvm::MachinePassRegistryListener\"},\n    {\"_ZTVN4llvm8DIEValueE\", \"vtable for llvm::DIEValue\"},\n    {\"_ZTVN4llvm23SchedulingPriorityQueueE\", \"vtable for llvm::SchedulingPriorityQueue\"},\n    {\"_ZTVN4llvm7SpillerE\", \"vtable for llvm::Spiller\"},\n    {\"_ZTIN4llvm10FoldingSetINS_17AttributeListImplEEE\", \"typeinfo for llvm::FoldingSet<llvm::AttributeListImpl>\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_10BasicBlockEEE\", \"typeinfo for llvm::ilist_half_node<llvm::BasicBlock>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_10BasicBlockEEE\", \"typeinfo for llvm::ilist_node<llvm::BasicBlock>\"},\n    {\"_ZTIN4llvm4UserE\", \"typeinfo for llvm::User\"},\n    {\"_ZTIN4llvm8ConstantE\", \"typeinfo for llvm::Constant\"},\n    {\"_ZTIN4llvm25GetElementPtrConstantExprE\", \"typeinfo for llvm::GetElementPtrConstantExpr\"},\n    {\"_ZTIN4llvm11ConstantIntE\", \"typeinfo for llvm::ConstantInt\"},\n    {\"_ZTVN4llvm8ConstantE\", \"vtable for llvm::Constant\"},\n    {\"_ZTIN4llvm19CompareConstantExprE\", \"typeinfo for llvm::CompareConstantExpr\"},\n    {\"_ZTIN4llvm24ExtractValueConstantExprE\", \"typeinfo for llvm::ExtractValueConstantExpr\"},\n    {\"_ZTIN4llvm23InsertValueConstantExprE\", \"typeinfo for llvm::InsertValueConstantExpr\"},\n    {\"_ZTIN4llvm25ShuffleVectorConstantExprE\", \"typeinfo for llvm::ShuffleVectorConstantExpr\"},\n    {\"_ZTIN4llvm25InsertElementConstantExprE\", \"typeinfo for llvm::InsertElementConstantExpr\"},\n    {\"_ZTIN4llvm26ExtractElementConstantExprE\", \"typeinfo for llvm::ExtractElementConstantExpr\"},\n    {\"_ZTIN4llvm18SelectConstantExprE\", \"typeinfo for llvm::SelectConstantExpr\"},\n    {\"_ZTIN4llvm18BinaryConstantExprE\", \"typeinfo for llvm::BinaryConstantExpr\"},\n    {\"_ZTIN4llvm17UnaryConstantExprE\", \"typeinfo for llvm::UnaryConstantExpr\"},\n    {\"_ZTIN4llvm13DominatorBaseINS_10BasicBlockEEE\", \"typeinfo for llvm::DominatorBase<llvm::BasicBlock>\"},\n    {\"_ZTIN4llvm17DominatorTreeBaseINS_10BasicBlockEEE\", \"typeinfo for llvm::DominatorTreeBase<llvm::BasicBlock>\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_8FunctionEEE\", \"typeinfo for llvm::ilist_half_node<llvm::Function>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_8FunctionEEE\", \"typeinfo for llvm::ilist_node<llvm::Function>\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_8ArgumentEEE\", \"typeinfo for llvm::ilist_half_node<llvm::Argument>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_8ArgumentEEE\", \"typeinfo for llvm::ilist_node<llvm::Argument>\"},\n    {\"_ZTIN4llvm8ArgumentE\", \"typeinfo for llvm::Argument\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_14GlobalVariableEEE\", \"typeinfo for llvm::ilist_half_node<llvm::GlobalVariable>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_14GlobalVariableEEE\", \"typeinfo for llvm::ilist_node<llvm::GlobalVariable>\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_11GlobalAliasEEE\", \"typeinfo for llvm::ilist_half_node<llvm::GlobalAlias>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_11GlobalAliasEEE\", \"typeinfo for llvm::ilist_node<llvm::GlobalAlias>\"},\n    {\"_ZTIN4llvm15ilist_half_nodeINS_11InstructionEEE\", \"typeinfo for llvm::ilist_half_node<llvm::Instruction>\"},\n    {\"_ZTIN4llvm10ilist_nodeINS_11InstructionEEE\", \"typeinfo for llvm::ilist_node<llvm::Instruction>\"},\n    {\"_ZTIN4llvm8CastInstE\", \"typeinfo for llvm::CastInst\"},\n    {\"_ZTVN4llvm8CastInstE\", \"vtable for llvm::CastInst\"},\n    {\"_ZTIN4llvm15ValueHandleBaseE\", \"typeinfo for llvm::ValueHandleBase\"},\n    {\"_ZTIN4llvm10FoldingSetINS_6MDNodeEEE\", \"typeinfo for llvm::FoldingSet<llvm::MDNode>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EEE\", \"typeinfo for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EEE\", \"typeinfo for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>\"},\n    {\"_ZTIN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EEE\", \"typeinfo for llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>\"},\n    {\"_ZTIN4llvm11DerivedTypeE\", \"typeinfo for llvm::DerivedType\"},\n    {\"_ZTIN4llvm11IntegerTypeE\", \"typeinfo for llvm::IntegerType\"},\n    {\"_ZTIN4llvm14FoldingSetImpl4NodeE\", \"typeinfo for llvm::FoldingSetImpl::Node\"},\n    {\"_ZTIN4llvm8MDStringE\", \"typeinfo for llvm::MDString\"},\n    {\"_ZTIN4llvm2cl6parserIPKNS_8PassInfoEEE\", \"typeinfo for llvm::cl::parser<llvm::PassInfo const*>\"},\n    {\"_ZTIN4llvm2cl11opt_storageIbLb1ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<bool, true, false>\"},\n    {\"_ZTIN4llvm2cl3optIbLb1ENS0_6parserIbEEEE\", \"typeinfo for llvm::cl::opt<bool, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTISt12_Vector_baseIPKN4llvm8PassInfoESaIS3_EE\", \"typeinfo for std::_Vector_base<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> >\"},\n    {\"_ZTISt6vectorIPKN4llvm8PassInfoESaIS3_EE\", \"typeinfo for std::vector<llvm::PassInfo const*, std::allocator<llvm::PassInfo const*> >\"},\n    {\"_ZTIN4llvm2cl12list_storageIPKNS_8PassInfoEbEE\", \"typeinfo for llvm::cl::list_storage<llvm::PassInfo const*, bool>\"},\n    {\"_ZTIN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEEE\", \"typeinfo for llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>\"},\n    {\"_ZTIN4llvm2cl11opt_storageINS_14PassDebugLevelELb0ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<llvm::PassDebugLevel, false, false>\"},\n    {\"_ZTIN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEEE\", \"typeinfo for llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >\"},\n    {\"_ZTIN4llvm2cl6parserINS_14PassDebugLevelEEE\", \"typeinfo for llvm::cl::parser<llvm::PassDebugLevel>\"},\n    {\"_ZTIN4llvm15PassManagerImplE\", \"typeinfo for llvm::PassManagerImpl\"},\n    {\"_ZTIN4llvm23FunctionPassManagerImplE\", \"typeinfo for llvm::FunctionPassManagerImpl\"},\n    {\"_ZTIN4llvm13CompositeTypeE\", \"typeinfo for llvm::CompositeType\"},\n    {\"_ZTIN4llvm10OpaqueTypeE\", \"typeinfo for llvm::OpaqueType\"},\n    {\"_ZTVN4llvm13CompositeTypeE\", \"vtable for llvm::CompositeType\"},\n    {\"_ZTIN4llvm2cl12basic_parserIbEE\", \"typeinfo for llvm::cl::basic_parser<bool>\"},\n    {\"_ZTIN4llvm2cl12basic_parserINS0_13boolOrDefaultEEE\", \"typeinfo for llvm::cl::basic_parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTIN4llvm2cl12basic_parserIiEE\", \"typeinfo for llvm::cl::basic_parser<int>\"},\n    {\"_ZTIN4llvm2cl12basic_parserIjEE\", \"typeinfo for llvm::cl::basic_parser<unsigned int>\"},\n    {\"_ZTIN4llvm2cl12basic_parserIdEE\", \"typeinfo for llvm::cl::basic_parser<double>\"},\n    {\"_ZTIN4llvm2cl12basic_parserIfEE\", \"typeinfo for llvm::cl::basic_parser<float>\"},\n    {\"_ZTIN4llvm2cl12basic_parserISsEE\", \"typeinfo for llvm::cl::basic_parser<std::string>\"},\n    {\"_ZTIN4llvm2cl12basic_parserIcEE\", \"typeinfo for llvm::cl::basic_parser<char>\"},\n    {\"_ZTIN4llvm2cl11opt_storageIjLb0ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<unsigned int, false, false>\"},\n    {\"_ZTIN4llvm2cl3optIjLb0ENS0_6parserIjEEEE\", \"typeinfo for llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >\"},\n    {\"_ZTIN4llvm2cl11opt_storageIiLb0ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<int, false, false>\"},\n    {\"_ZTIN4llvm2cl3optIiLb0ENS0_6parserIiEEEE\", \"typeinfo for llvm::cl::opt<int, false, llvm::cl::parser<int> >\"},\n    {\"_ZTISs\", \"typeinfo for std::string\"},\n    {\"_ZTIN4llvm2cl11opt_storageISsLb0ELb1EEE\", \"typeinfo for llvm::cl::opt_storage<std::string, false, true>\"},\n    {\"_ZTIN4llvm2cl3optISsLb0ENS0_6parserISsEEEE\", \"typeinfo for llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >\"},\n    {\"_ZTIN4llvm2cl11opt_storageIcLb0ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<char, false, false>\"},\n    {\"_ZTIN4llvm2cl3optIcLb0ENS0_6parserIcEEEE\", \"typeinfo for llvm::cl::opt<char, false, llvm::cl::parser<char> >\"},\n    {\"_ZTIN4llvm2cl11opt_storageIbLb0ELb0EEE\", \"typeinfo for llvm::cl::opt_storage<bool, false, false>\"},\n    {\"_ZTIN4llvm2cl3optIbLb0ENS0_6parserIbEEEE\", \"typeinfo for llvm::cl::opt<bool, false, llvm::cl::parser<bool> >\"},\n    {\"_ZTIN4llvm3sys11ThreadLocalIKNS_21PrettyStackTraceEntryEEE\", \"typeinfo for llvm::sys::ThreadLocal<llvm::PrettyStackTraceEntry const>\"},\n    {\"_ZTIN4llvm14format_object1IxEE\", \"typeinfo for llvm::format_object1<long long>\"},\n    {\"_ZTIN4llvm14format_object1IdEE\", \"typeinfo for llvm::format_object1<double>\"},\n    {\"_ZTIN4llvm2cl11opt_storageISsLb1ELb1EEE\", \"typeinfo for llvm::cl::opt_storage<std::string, true, true>\"},\n    {\"_ZTIN4llvm2cl3optISsLb1ENS0_6parserISsEEEE\", \"typeinfo for llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >\"},\n    {\"_ZN4llvm8RegistryIN5clang15PluginASTActionENS_14RegistryTraitsIS2_EEE4HeadE\", \"llvm::Registry<clang::PluginASTAction, llvm::RegistryTraits<clang::PluginASTAction> >::Head\"},\n    {\"_ZTVN5clang23ChainedDiagnosticClientE\", \"vtable for clang::ChainedDiagnosticClient\"},\n    {\"_ZTVN5clang5LexerE\", \"vtable for clang::Lexer\"},\n    {\"_ZTVN5clang12SemaConsumerE\", \"vtable for clang::SemaConsumer\"},\n    {\"_ZTVN5clang6driver11InputActionE\", \"vtable for clang::driver::InputAction\"},\n    {\"_ZTVN5clang6driver14BindArchActionE\", \"vtable for clang::driver::BindArchAction\"},\n    {\"_ZTVN5clang6driver9JobActionE\", \"vtable for clang::driver::JobAction\"},\n    {\"_ZTVN5clang6driver19PreprocessJobActionE\", \"vtable for clang::driver::PreprocessJobAction\"},\n    {\"_ZTVN5clang6driver19PrecompileJobActionE\", \"vtable for clang::driver::PrecompileJobAction\"},\n    {\"_ZTVN5clang6driver16AnalyzeJobActionE\", \"vtable for clang::driver::AnalyzeJobAction\"},\n    {\"_ZTVN5clang6driver16CompileJobActionE\", \"vtable for clang::driver::CompileJobAction\"},\n    {\"_ZTVN5clang6driver17AssembleJobActionE\", \"vtable for clang::driver::AssembleJobAction\"},\n    {\"_ZTVN5clang6driver13LinkJobActionE\", \"vtable for clang::driver::LinkJobAction\"},\n    {\"_ZTVN5clang6driver13LipoJobActionE\", \"vtable for clang::driver::LipoJobAction\"},\n    {\"_ZTVN5clang6driver17DsymutilJobActionE\", \"vtable for clang::driver::DsymutilJobAction\"},\n    {\"_ZTVN5clang6driver7CommandE\", \"vtable for clang::driver::Command\"},\n    {\"_ZTVN5clang6driver10toolchains11Generic_ELFE\", \"vtable for clang::driver::toolchains::Generic_ELF\"},\n    {\"_ZTVN5clang7CodeGen12EHScopeStack19ConditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEEE\", \"vtable for clang::CodeGen::EHScopeStack::ConditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>\"},\n    {\"_ZTVN5clang7CodeGen12EHScopeStack21UnconditionalCleanup1IN12_GLOBAL__N_113FreeExceptionEPN4llvm5ValueEEE\", \"vtable for clang::CodeGen::EHScopeStack::UnconditionalCleanup1<(anonymous namespace)::FreeException, llvm::Value*>\"},\n    {\"_ZTVN5clang7CodeGen12EHScopeStack19ConditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEEE\", \"vtable for clang::CodeGen::EHScopeStack::ConditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>\"},\n    {\"_ZTVN5clang7CodeGen12EHScopeStack21UnconditionalCleanup2IN12_GLOBAL__N_116DestroyTemporaryEPKNS_17CXXDestructorDeclEPN4llvm5ValueEEE\", \"vtable for clang::CodeGen::EHScopeStack::UnconditionalCleanup2<(anonymous namespace)::DestroyTemporary, clang::CXXDestructorDecl const*, llvm::Value*>\"},\n    {\"_ZTVN5clang18EmitAssemblyActionE\", \"vtable for clang::EmitAssemblyAction\"},\n    {\"_ZTVN5clang12EmitBCActionE\", \"vtable for clang::EmitBCAction\"},\n    {\"_ZTVN5clang14EmitLLVMActionE\", \"vtable for clang::EmitLLVMAction\"},\n    {\"_ZTVN5clang18EmitLLVMOnlyActionE\", \"vtable for clang::EmitLLVMOnlyAction\"},\n    {\"_ZTVN5clang21EmitCodeGenOnlyActionE\", \"vtable for clang::EmitCodeGenOnlyAction\"},\n    {\"_ZTVN5clang13EmitObjActionE\", \"vtable for clang::EmitObjAction\"},\n    {\"_ZTVN5clang15BackendConsumerE\", \"vtable for clang::BackendConsumer\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang7CodeGen14CGFunctionInfoEEE\", \"vtable for llvm::FoldingSet<clang::CodeGen::CGFunctionInfo>\"},\n    {\"_ZTVN5clang6Parser20ObjCPropertyCallbackE\", \"vtable for clang::Parser::ObjCPropertyCallback\"},\n    {\"_ZTVN5clang15UsingShadowDeclE\", \"vtable for clang::UsingShadowDecl\"},\n    {\"_ZTVN5clang14AccessSpecDeclE\", \"vtable for clang::AccessSpecDecl\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126AdjustedReturnValueCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::AdjustedReturnValueChecker>\"},\n    {\"_ZTVN5clang4ento15AnalysisManagerE\", \"vtable for clang::ento::AnalysisManager\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang15LocationContextEEE\", \"vtable for llvm::FoldingSet<clang::LocationContext>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120AnalyzerStatsCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::AnalyzerStatsChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ArrayBoundCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundChecker>\"},\n    {\"_ZTVN5clang4ento10BuiltinBugE\", \"vtable for clang::ento::BuiltinBug\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ArrayBoundCheckerV2EEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ArrayBoundCheckerV2>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118AttrNonNullCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::AttrNonNullChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ClassReleaseCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ClassReleaseChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_122CFRetainReleaseCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CFRetainReleaseChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CFNumberCreateCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CFNumberCreateChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113NilArgCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::NilArgChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114CStringCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CStringChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_121CallAndMessageCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CallAndMessageChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_115CastSizeCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CastSizeChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119CastToStructCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::CastToStructChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113ChrootCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ChrootChecker>\"},\n    {\"_ZTVN5clang24LiveVariables_ValueTypes10ObserverTyE\", \"vtable for clang::LiveVariables_ValueTypes::ObserverTy\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114DivZeroCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::DivZeroChecker>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento7GRStateEEE\", \"vtable for llvm::FoldingSet<clang::ento::GRState>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento12ExplodedNodeEEE\", \"vtable for llvm::FoldingSet<clang::ento::ExplodedNode>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119FixedAddressCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::FixedAddressChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126IdempotentOperationCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::IdempotentOperationChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_116MacOSXAPICheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::MacOSXAPIChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113MallocCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::MallocChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_124NSAutoreleasePoolCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::NSAutoreleasePoolChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_123NoReturnFunctionCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::NoReturnFunctionChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117ObjCAtSyncCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ObjCAtSyncChecker>\"},\n    {\"_ZZN5clang4ento12GRStateTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEjNS2_16ImutKeyValueInfoIS6_jEEEEE8GDMIndexEvE5index\", \"clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, unsigned int, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, unsigned int> > >::GDMIndex()::index\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento19BugReportEquivClassEEE\", \"vtable for llvm::FoldingSet<clang::ento::BugReportEquivClass>\"},\n    {\"_ZTVN5clang4ento17EnhancedBugReportE\", \"vtable for clang::ento::EnhancedBugReport\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119ObjCSelfInitCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ObjCSelfInitChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_119PointerArithCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::PointerArithChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_117PointerSubCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::PointerSubChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118PthreadLockCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::PthreadLockChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_125ReturnPointerRangeCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ReturnPointerRangeChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118ReturnUndefCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::ReturnUndefChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120StackAddrLeakCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::StackAddrLeakChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_113StreamCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::StreamChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_128UndefCapturedBlockVarCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::UndefCapturedBlockVarChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_118UndefResultCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::UndefResultChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_130UndefinedArraySubscriptCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedArraySubscriptChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_126UndefinedAssignmentCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::UndefinedAssignmentChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114UnixAPICheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::UnixAPIChecker>\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_114VLASizeCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::VLASizeChecker>\"},\n    {\"_ZTVN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES4_EEE\", \"vtable for llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> >\"},\n    {\"_ZTVN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValES5_EEEEE\", \"vtable for llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, clang::ento::SVal> > >\"},\n    {\"_ZTVN4llvm21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEE\", \"vtable for llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> >\"},\n    {\"_ZTVN4llvm10FoldingSetINS_21FoldingSetNodeWrapperISt4pairIN5clang4ento4SValEmEEEEE\", \"vtable for llvm::FoldingSet<llvm::FoldingSetNodeWrapper<std::pair<clang::ento::SVal, unsigned long> > >\"},\n    {\"_ZTVN4llvm21FoldingSetNodeWrapperINS_6APSIntEEE\", \"vtable for llvm::FoldingSetNodeWrapper<llvm::APSInt>\"},\n    {\"_ZTVN4llvm10FoldingSetINS_17ImmutableListImplIN5clang4ento4SValEEEEE\", \"vtable for llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SVal> >\"},\n    {\"_ZTVN4llvm10FoldingSetINS_21FoldingSetNodeWrapperINS_6APSIntEEEEE\", \"vtable for llvm::FoldingSet<llvm::FoldingSetNodeWrapper<llvm::APSInt> >\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento15CompoundValDataEEE\", \"vtable for llvm::FoldingSet<clang::ento::CompoundValData>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento19LazyCompoundValDataEEE\", \"vtable for llvm::FoldingSet<clang::ento::LazyCompoundValData>\"},\n    {\"_ZTVN4llvm10FoldingSetINS_17ImmutableListImplIPN5clang4ento18BugReporterVisitorEEEEE\", \"vtable for llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::BugReporterVisitor*> >\"},\n    {\"_ZTVN5clang4ento13DiagBugReportE\", \"vtable for clang::ento::DiagBugReport\"},\n    {\"_ZTVN4llvm10FoldingSetIN12_GLOBAL__N_113DiagCacheItemEEE\", \"vtable for llvm::FoldingSet<(anonymous namespace)::DiagCacheItem>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento18BugReporterVisitorEEE\", \"vtable for llvm::FoldingSet<clang::ento::BugReporterVisitor>\"},\n    {\"_ZTVN4llvm10FoldingSetINS_17ImmutableListImplIPKN5clang4ento10SymbolDataEEEEE\", \"vtable for llvm::FoldingSet<llvm::ImmutableListImpl<clang::ento::SymbolData const*> >\"},\n    {\"_ZTVN5clang4ento14CheckerVisitorIN12_GLOBAL__N_120RetainReleaseCheckerEEE\", \"vtable for clang::ento::CheckerVisitor<(anonymous namespace)::RetainReleaseChecker>\"},\n    {\"_ZTVN5clang4ento13TransferFuncsE\", \"vtable for clang::ento::TransferFuncs\"},\n    {\"_ZTVN5clang4ento21InterExplodedGraphMapE\", \"vtable for clang::ento::InterExplodedGraphMap\"},\n    {\"_ZTVN5clang4ento18UnknownSpaceRegionE\", \"vtable for clang::ento::UnknownSpaceRegion\"},\n    {\"_ZTVN5clang4ento15HeapSpaceRegionE\", \"vtable for clang::ento::HeapSpaceRegion\"},\n    {\"_ZTVN5clang4ento18GlobalsSpaceRegionE\", \"vtable for clang::ento::GlobalsSpaceRegion\"},\n    {\"_ZTVN5clang4ento25StackArgumentsSpaceRegionE\", \"vtable for clang::ento::StackArgumentsSpaceRegion\"},\n    {\"_ZTVN5clang4ento22StackLocalsSpaceRegionE\", \"vtable for clang::ento::StackLocalsSpaceRegion\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento9MemRegionEEE\", \"vtable for llvm::FoldingSet<clang::ento::MemRegion>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang4ento7SymExprEEE\", \"vtable for llvm::FoldingSet<clang::ento::SymExpr>\"},\n    {\"_ZTVN5clang24LiveVariables_ValueTypes14AnalysisDataTyE\", \"vtable for clang::LiveVariables_ValueTypes::AnalysisDataTy\"},\n    {\"_ZTVN5clang23StmtDeclBitVector_Types14AnalysisDataTyE\", \"vtable for clang::StmtDeclBitVector_Types::AnalysisDataTy\"},\n    {\"_ZTVN5clang19DeclBitVector_Types14AnalysisDataTyE\", \"vtable for clang::DeclBitVector_Types::AnalysisDataTy\"},\n    {\"_ZTVN4llvm14format_object1IjEE\", \"vtable for llvm::format_object1<unsigned int>\"},\n    {\"_ZTVN5clang30UninitializedValues_ValueTypes14AnalysisDataTyE\", \"vtable for clang::UninitializedValues_ValueTypes::AnalysisDataTy\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang3idx10EntityImplEEE\", \"vtable for llvm::FoldingSet<clang::idx::EntityImpl>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang10ASTContext29CanonicalTemplateTemplateParmEEE\", \"vtable for llvm::FoldingSet<clang::ASTContext::CanonicalTemplateTemplateParm>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang19NestedNameSpecifierEEE\", \"vtable for llvm::FoldingSet<clang::NestedNameSpecifier>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang36SubstTemplateTemplateParmPackStorageEEE\", \"vtable for llvm::FoldingSet<clang::SubstTemplateTemplateParmPackStorage>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang21DependentTemplateNameEEE\", \"vtable for llvm::FoldingSet<clang::DependentTemplateName>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang21QualifiedTemplateNameEEE\", \"vtable for llvm::FoldingSet<clang::QualifiedTemplateName>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang14AttributedTypeEEE\", \"vtable for llvm::FoldingSet<clang::AttributedType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang21ObjCObjectPointerTypeEEE\", \"vtable for llvm::FoldingSet<clang::ObjCObjectPointerType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang18ObjCObjectTypeImplEEE\", \"vtable for llvm::FoldingSet<clang::ObjCObjectTypeImpl>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang17PackExpansionTypeEEE\", \"vtable for llvm::FoldingSet<clang::PackExpansionType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang17DependentNameTypeEEE\", \"vtable for llvm::FoldingSet<clang::DependentNameType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang14ElaboratedTypeEEE\", \"vtable for llvm::FoldingSet<clang::ElaboratedType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang9ParenTypeEEE\", \"vtable for llvm::FoldingSet<clang::ParenType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang29SubstTemplateTypeParmPackTypeEEE\", \"vtable for llvm::FoldingSet<clang::SubstTemplateTypeParmPackType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang25SubstTemplateTypeParmTypeEEE\", \"vtable for llvm::FoldingSet<clang::SubstTemplateTypeParmType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang20TemplateTypeParmTypeEEE\", \"vtable for llvm::FoldingSet<clang::TemplateTypeParmType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang21DependentDecltypeTypeEEE\", \"vtable for llvm::FoldingSet<clang::DependentDecltypeType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang23DependentTypeOfExprTypeEEE\", \"vtable for llvm::FoldingSet<clang::DependentTypeOfExprType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang17FunctionProtoTypeEEE\", \"vtable for llvm::FoldingSet<clang::FunctionProtoType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang19FunctionNoProtoTypeEEE\", \"vtable for llvm::FoldingSet<clang::FunctionNoProtoType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang10VectorTypeEEE\", \"vtable for llvm::FoldingSet<clang::VectorType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang27DependentSizedExtVectorTypeEEE\", \"vtable for llvm::FoldingSet<clang::DependentSizedExtVectorType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang23DependentSizedArrayTypeEEE\", \"vtable for llvm::FoldingSet<clang::DependentSizedArrayType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang19IncompleteArrayTypeEEE\", \"vtable for llvm::FoldingSet<clang::IncompleteArrayType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang17ConstantArrayTypeEEE\", \"vtable for llvm::FoldingSet<clang::ConstantArrayType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang17MemberPointerTypeEEE\", \"vtable for llvm::FoldingSet<clang::MemberPointerType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang19RValueReferenceTypeEEE\", \"vtable for llvm::FoldingSet<clang::RValueReferenceType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang19LValueReferenceTypeEEE\", \"vtable for llvm::FoldingSet<clang::LValueReferenceType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang16BlockPointerTypeEEE\", \"vtable for llvm::FoldingSet<clang::BlockPointerType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang11PointerTypeEEE\", \"vtable for llvm::FoldingSet<clang::PointerType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang11ComplexTypeEEE\", \"vtable for llvm::FoldingSet<clang::ComplexType>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang8ExtQualsEEE\", \"vtable for llvm::FoldingSet<clang::ExtQuals>\"},\n    {\"_ZTVN4llvm20ContextualFoldingSetIN5clang35DependentTemplateSpecializationTypeERNS1_10ASTContextEEE\", \"vtable for llvm::ContextualFoldingSet<clang::DependentTemplateSpecializationType, clang::ASTContext&>\"},\n    {\"_ZTVN4llvm20ContextualFoldingSetIN5clang26TemplateSpecializationTypeERNS1_10ASTContextEEE\", \"vtable for llvm::ContextualFoldingSet<clang::TemplateSpecializationType, clang::ASTContext&>\"},\n    {\"_ZTVN5clang8TypeDeclE\", \"vtable for clang::TypeDecl\"},\n    {\"_ZTVN5clang9NamedDeclE\", \"vtable for clang::NamedDecl\"},\n    {\"_ZTVN5clang9ValueDeclE\", \"vtable for clang::ValueDecl\"},\n    {\"_ZTVN5clang14DeclaratorDeclE\", \"vtable for clang::DeclaratorDecl\"},\n    {\"_ZTVN5clang16FileScopeAsmDeclE\", \"vtable for clang::FileScopeAsmDecl\"},\n    {\"_ZTVN5clang11TypedefDeclE\", \"vtable for clang::TypedefDecl\"},\n    {\"_ZTVN5clang17IndirectFieldDeclE\", \"vtable for clang::IndirectFieldDecl\"},\n    {\"_ZTVN5clang17ImplicitParamDeclE\", \"vtable for clang::ImplicitParamDecl\"},\n    {\"_ZTVN5clang13NamespaceDeclE\", \"vtable for clang::NamespaceDecl\"},\n    {\"_ZTVN5clang19TranslationUnitDeclE\", \"vtable for clang::TranslationUnitDecl\"},\n    {\"_ZTVN5clang8EnumDeclE\", \"vtable for clang::EnumDecl\"},\n    {\"_ZTVN5clang9FieldDeclE\", \"vtable for clang::FieldDecl\"},\n    {\"_ZTVN5clang11ParmVarDeclE\", \"vtable for clang::ParmVarDecl\"},\n    {\"_ZTVN5clang16StaticAssertDeclE\", \"vtable for clang::StaticAssertDecl\"},\n    {\"_ZTVN5clang27UnresolvedUsingTypenameDeclE\", \"vtable for clang::UnresolvedUsingTypenameDecl\"},\n    {\"_ZTVN5clang24UnresolvedUsingValueDeclE\", \"vtable for clang::UnresolvedUsingValueDecl\"},\n    {\"_ZTVN5clang9UsingDeclE\", \"vtable for clang::UsingDecl\"},\n    {\"_ZTVN5clang18NamespaceAliasDeclE\", \"vtable for clang::NamespaceAliasDecl\"},\n    {\"_ZTVN5clang18UsingDirectiveDeclE\", \"vtable for clang::UsingDirectiveDecl\"},\n    {\"_ZTVN5clang15LinkageSpecDeclE\", \"vtable for clang::LinkageSpecDecl\"},\n    {\"_ZTVN5clang17CXXConversionDeclE\", \"vtable for clang::CXXConversionDecl\"},\n    {\"_ZTVN5clang13CXXMethodDeclE\", \"vtable for clang::CXXMethodDecl\"},\n    {\"_ZTVN5clang17CXXDestructorDeclE\", \"vtable for clang::CXXDestructorDecl\"},\n    {\"_ZTVN5clang18CXXConstructorDeclE\", \"vtable for clang::CXXConstructorDecl\"},\n    {\"_ZTVN5clang10FriendDeclE\", \"vtable for clang::FriendDecl\"},\n    {\"_ZTVN5clang17ObjCInterfaceDeclE\", \"vtable for clang::ObjCInterfaceDecl\"},\n    {\"_ZTVN5clang23ObjCForwardProtocolDeclE\", \"vtable for clang::ObjCForwardProtocolDecl\"},\n    {\"_ZTVN5clang17ObjCContainerDeclE\", \"vtable for clang::ObjCContainerDecl\"},\n    {\"_ZTVN5clang16ObjCPropertyDeclE\", \"vtable for clang::ObjCPropertyDecl\"},\n    {\"_ZTVN5clang23ObjCCompatibleAliasDeclE\", \"vtable for clang::ObjCCompatibleAliasDecl\"},\n    {\"_ZTVN5clang22ObjCImplementationDeclE\", \"vtable for clang::ObjCImplementationDecl\"},\n    {\"_ZTVN5clang12ObjCImplDeclE\", \"vtable for clang::ObjCImplDecl\"},\n    {\"_ZTVN5clang20ObjCCategoryImplDeclE\", \"vtable for clang::ObjCCategoryImplDecl\"},\n    {\"_ZTVN5clang16ObjCCategoryDeclE\", \"vtable for clang::ObjCCategoryDecl\"},\n    {\"_ZTVN5clang16ObjCProtocolDeclE\", \"vtable for clang::ObjCProtocolDecl\"},\n    {\"_ZTVN5clang19ObjCAtDefsFieldDeclE\", \"vtable for clang::ObjCAtDefsFieldDecl\"},\n    {\"_ZTVN5clang12ObjCIvarDeclE\", \"vtable for clang::ObjCIvarDecl\"},\n    {\"_ZTVN5clang12TemplateDeclE\", \"vtable for clang::TemplateDecl\"},\n    {\"_ZTVN5clang18FriendTemplateDeclE\", \"vtable for clang::FriendTemplateDecl\"},\n    {\"_ZTVN5clang38ClassTemplatePartialSpecializationDeclE\", \"vtable for clang::ClassTemplatePartialSpecializationDecl\"},\n    {\"_ZTVN5clang24TemplateTemplateParmDeclE\", \"vtable for clang::TemplateTemplateParmDecl\"},\n    {\"_ZTVN5clang20TemplateTypeParmDeclE\", \"vtable for clang::TemplateTypeParmDecl\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang38ClassTemplatePartialSpecializationDeclEEE\", \"vtable for llvm::FoldingSet<clang::ClassTemplatePartialSpecializationDecl>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang31ClassTemplateSpecializationDeclEEE\", \"vtable for llvm::FoldingSet<clang::ClassTemplateSpecializationDecl>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang34FunctionTemplateSpecializationInfoEEE\", \"vtable for llvm::FoldingSet<clang::FunctionTemplateSpecializationInfo>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang24CXXLiteralOperatorIdNameEEE\", \"vtable for llvm::FoldingSet<clang::CXXLiteralOperatorIdName>\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang14CXXSpecialNameEEE\", \"vtable for llvm::FoldingSet<clang::CXXSpecialName>\"},\n    {\"_ZTVN5clang18PPChainedCallbacksE\", \"vtable for clang::PPChainedCallbacks\"},\n    {\"_ZTVN4llvm10FoldingSetIN5clang20MultiKeywordSelectorEEE\", \"vtable for llvm::FoldingSet<clang::MultiKeywordSelector>\"},\n    {\"_ZN12_GLOBAL__N_113PPCTargetInfo11BuiltinInfoE\", \"(anonymous namespace)::PPCTargetInfo::BuiltinInfo\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo11BuiltinInfoE\", \"(anonymous namespace)::ARMTargetInfo::BuiltinInfo\"},\n    {\"_ZN12_GLOBAL__N_113PPCTargetInfo13GCCRegAliasesE\", \"(anonymous namespace)::PPCTargetInfo::GCCRegAliases\"},\n    {\"_ZN12_GLOBAL__N_117SparcV8TargetInfo13GCCRegAliasesE\", \"(anonymous namespace)::SparcV8TargetInfo::GCCRegAliases\"},\n    {\"_ZN12_GLOBAL__N_116MBlazeTargetInfo13GCCRegAliasesE\", \"(anonymous namespace)::MBlazeTargetInfo::GCCRegAliases\"},\n    {\"_ZN12_GLOBAL__N_114MipsTargetInfo13GCCRegAliasesE\", \"(anonymous namespace)::MipsTargetInfo::GCCRegAliases\"},\n    {\"_ZN12_GLOBAL__N_113ARMTargetInfo13GCCRegAliasesE\", \"(anonymous namespace)::ARMTargetInfo::GCCRegAliases\"},\n    {\"_ZTVN4llvm18ValueMapCallbackVHIPKNS_8FunctionENS_18InlineCostAnalyzer12FunctionInfoENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEEE\", \"vtable for llvm::ValueMapCallbackVH<llvm::Function const*, llvm::InlineCostAnalyzer::FunctionInfo, llvm::ValueMapConfig<llvm::Function const*>, llvm::DenseMapInfo<llvm::InlineCostAnalyzer::FunctionInfo> >\"},\n    {\"_ZTVN4llvm12DISubprogramE\", \"vtable for llvm::DISubprogram\"},\n    {\"_ZTVN4llvm7DIScopeE\", \"vtable for llvm::DIScope\"},\n    {\"_ZTVN4llvm22X86MachineFunctionInfoE\", \"vtable for llvm::X86MachineFunctionInfo\"},\n    {\"_ZTVN4llvm18X86MCAsmInfoDarwinE\", \"vtable for llvm::X86MCAsmInfoDarwin\"},\n    {\"_ZTVN4llvm16X86MCAsmInfoCOFFE\", \"vtable for llvm::X86MCAsmInfoCOFF\"},\n    {\"_ZTVN4llvm15MCAsmInfoDarwinE\", \"vtable for llvm::MCAsmInfoDarwin\"},\n    {\"_ZTVN4llvm13MCAsmInfoCOFFE\", \"vtable for llvm::MCAsmInfoCOFF\"},\n    {\"_ZTVN4llvm2cl3optI17AsmWriterFlavorTyLb0ENS0_6parserIS2_EEEE\", \"vtable for llvm::cl::opt<AsmWriterFlavorTy, false, llvm::cl::parser<AsmWriterFlavorTy> >\"},\n    {\"_ZTVN4llvm2cl6parserI17AsmWriterFlavorTyEE\", \"vtable for llvm::cl::parser<AsmWriterFlavorTy>\"},\n    {\"_ZTVN4llvm3X8616CONTROL_REGClassE\", \"vtable for llvm::X86::CONTROL_REGClass\"},\n    {\"_ZTVN4llvm3X8614DEBUG_REGClassE\", \"vtable for llvm::X86::DEBUG_REGClass\"},\n    {\"_ZTVN4llvm3X8614GR16_ABCDClassE\", \"vtable for llvm::X86::GR16_ABCDClass\"},\n    {\"_ZTVN4llvm3X8614GR32_ABCDClassE\", \"vtable for llvm::X86::GR32_ABCDClass\"},\n    {\"_ZTVN4llvm3X8612GR32_ADClassE\", \"vtable for llvm::X86::GR32_ADClass\"},\n    {\"_ZTVN4llvm3X8612GR32_TCClassE\", \"vtable for llvm::X86::GR32_TCClass\"},\n    {\"_ZTVN4llvm3X8614GR64_ABCDClassE\", \"vtable for llvm::X86::GR64_ABCDClass\"},\n    {\"_ZTVN4llvm3X8612GR64_TCClassE\", \"vtable for llvm::X86::GR64_TCClass\"},\n    {\"_ZTVN4llvm3X8615GR64_TCW64ClassE\", \"vtable for llvm::X86::GR64_TCW64Class\"},\n    {\"_ZTVN4llvm3X8615GR8_ABCD_HClassE\", \"vtable for llvm::X86::GR8_ABCD_HClass\"},\n    {\"_ZTVN4llvm3X8615GR8_ABCD_LClassE\", \"vtable for llvm::X86::GR8_ABCD_LClass\"},\n    {\"_ZTVN4llvm3X8610RFP32ClassE\", \"vtable for llvm::X86::RFP32Class\"},\n    {\"_ZTVN4llvm3X8610RFP64ClassE\", \"vtable for llvm::X86::RFP64Class\"},\n    {\"_ZTVN4llvm3X8610RFP80ClassE\", \"vtable for llvm::X86::RFP80Class\"},\n    {\"_ZTVN4llvm3X8616SEGMENT_REGClassE\", \"vtable for llvm::X86::SEGMENT_REGClass\"},\n    {\"_ZTVN4llvm3X869VR64ClassE\", \"vtable for llvm::X86::VR64Class\"},\n    {\"_ZTVN4llvm19X86_32TargetMachineE\", \"vtable for llvm::X86_32TargetMachine\"},\n    {\"_ZTVN4llvm19X86_64TargetMachineE\", \"vtable for llvm::X86_64TargetMachine\"},\n    {\"_ZN4llvm15TheX86_32TargetE\", \"llvm::TheX86_32Target\"},\n    {\"_ZN4llvm15TheX86_64TargetE\", \"llvm::TheX86_64Target\"},\n    {\"_ZTVN4llvm15ARMFunctionInfoE\", \"vtable for llvm::ARMFunctionInfo\"},\n    {\"_ZTVN4llvm3ARM8CCRClassE\", \"vtable for llvm::ARM::CCRClass\"},\n    {\"_ZTVN4llvm3ARM10DPR_8ClassE\", \"vtable for llvm::ARM::DPR_8Class\"},\n    {\"_ZTVN4llvm3ARM13DPR_VFP2ClassE\", \"vtable for llvm::ARM::DPR_VFP2Class\"},\n    {\"_ZTVN4llvm3ARM10QPR_8ClassE\", \"vtable for llvm::ARM::QPR_8Class\"},\n    {\"_ZTVN4llvm3ARM13QPR_VFP2ClassE\", \"vtable for llvm::ARM::QPR_VFP2Class\"},\n    {\"_ZTVN4llvm3ARM14QQPR_VFP2ClassE\", \"vtable for llvm::ARM::QQPR_VFP2Class\"},\n    {\"_ZTVN4llvm3ARM8SPRClassE\", \"vtable for llvm::ARM::SPRClass\"},\n    {\"_ZTVN4llvm3ARM10SPR_8ClassE\", \"vtable for llvm::ARM::SPR_8Class\"},\n    {\"_ZTVN4llvm3ARM9tGPRClassE\", \"vtable for llvm::ARM::tGPRClass\"},\n    {\"_ZTVN4llvm19TargetRegisterClassE\", \"vtable for llvm::TargetRegisterClass\"},\n    {\"_ZTVN4llvm16SelectionDAGISel11ISelUpdaterE\", \"vtable for llvm::SelectionDAGISel::ISelUpdater\"},\n    {\"_ZTVN4llvm18ARMMCAsmInfoDarwinE\", \"vtable for llvm::ARMMCAsmInfoDarwin\"},\n    {\"_ZTVN4llvm15ARMELFMCAsmInfoE\", \"vtable for llvm::ARMELFMCAsmInfo\"},\n    {\"_ZTVN4llvm16ARMTargetMachineE\", \"vtable for llvm::ARMTargetMachine\"},\n    {\"_ZTVN4llvm18ThumbTargetMachineE\", \"vtable for llvm::ThumbTargetMachine\"},\n    {\"_ZTVN4llvm15ARMRegisterInfoE\", \"vtable for llvm::ARMRegisterInfo\"},\n    {\"_ZTVN4llvm10FoldingSetINS_6SDNodeEEE\", \"vtable for llvm::FoldingSet<llvm::SDNode>\"},\n    {\"_ZTVN4llvm2cl3optIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEELb0ENS_18RegisterPassParserINS_17RegisterSchedulerEEEEE\", \"vtable for llvm::cl::opt<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level), false, llvm::RegisterPassParser<llvm::RegisterScheduler> >\"},\n    {\"_ZTVN4llvm18RegisterPassParserINS_17RegisterSchedulerEEE\", \"vtable for llvm::RegisterPassParser<llvm::RegisterScheduler>\"},\n    {\"_ZTVN4llvm2cl6parserIPFPNS_18ScheduleDAGSDNodesEPNS_16SelectionDAGISelENS_10CodeGenOpt5LevelEEEE\", \"vtable for llvm::cl::parser<llvm::ScheduleDAGSDNodes* (*)(llvm::SelectionDAGISel*, llvm::CodeGenOpt::Level)>\"},\n    {\"_ZN4llvm8RegistryINS_17GCMetadataPrinterENS_14RegistryTraitsIS1_EEE4HeadE\", \"llvm::Registry<llvm::GCMetadataPrinter, llvm::RegistryTraits<llvm::GCMetadataPrinter> >::Head\"},\n    {\"_ZTVN4llvm14format_object1IyEE\", \"vtable for llvm::format_object1<unsigned long long>\"},\n    {\"_ZTVN4llvm10FoldingSetINS_9DIEAbbrevEEE\", \"vtable for llvm::FoldingSet<llvm::DIEAbbrev>\"},\n    {\"_ZTVN4llvm9DIEAbbrevE\", \"vtable for llvm::DIEAbbrev\"},\n    {\"_ZN4llvm8RegistryINS_10GCStrategyENS_14RegistryTraitsIS1_EEE4HeadE\", \"llvm::Registry<llvm::GCStrategy, llvm::RegistryTraits<llvm::GCStrategy> >::Head\"},\n    {\"_ZTVN4llvm2cl3optINS0_13boolOrDefaultELb0ENS0_6parserIS2_EEEE\", \"vtable for llvm::cl::opt<llvm::cl::boolOrDefault, false, llvm::cl::parser<llvm::cl::boolOrDefault> >\"},\n    {\"_ZTVN4llvm17DominatorTreeBaseINS_17MachineBasicBlockEEE\", \"vtable for llvm::DominatorTreeBase<llvm::MachineBasicBlock>\"},\n    {\"_ZTVN4llvm2cl3optIPFPNS_12FunctionPassEvELb0ENS_18RegisterPassParserINS_16RegisterRegAllocEEEEE\", \"vtable for llvm::cl::opt<llvm::FunctionPass* (*)(), false, llvm::RegisterPassParser<llvm::RegisterRegAlloc> >\"},\n    {\"_ZTVN4llvm18RegisterPassParserINS_16RegisterRegAllocEEE\", \"vtable for llvm::RegisterPassParser<llvm::RegisterRegAlloc>\"},\n    {\"_ZTVN4llvm2cl6parserIPFPNS_12FunctionPassEvEEE\", \"vtable for llvm::cl::parser<llvm::FunctionPass* (*)()>\"},\n    {\"_ZTVN4llvm2cl3optI20ShrinkWrapDebugLevelLb0ENS0_6parserIS2_EEEE\", \"vtable for llvm::cl::opt<ShrinkWrapDebugLevel, false, llvm::cl::parser<ShrinkWrapDebugLevel> >\"},\n    {\"_ZTVN4llvm2cl6parserI20ShrinkWrapDebugLevelEE\", \"vtable for llvm::cl::parser<ShrinkWrapDebugLevel>\"},\n    {\"_ZTVN4llvm2cl3optIN12_GLOBAL__N_111SpillerNameELb0ENS0_6parserIS3_EEEE\", \"vtable for llvm::cl::opt<(anonymous namespace)::SpillerName, false, llvm::cl::parser<(anonymous namespace)::SpillerName> >\"},\n    {\"_ZTVN4llvm2cl6parserIN12_GLOBAL__N_111SpillerNameEEE\", \"vtable for llvm::cl::parser<(anonymous namespace)::SpillerName>\"},\n    {\"_ZTVN4llvm2cl3optIN12_GLOBAL__N_112RewriterNameELb0ENS0_6parserIS3_EEEE\", \"vtable for llvm::cl::opt<(anonymous namespace)::RewriterName, false, llvm::cl::parser<(anonymous namespace)::RewriterName> >\"},\n    {\"_ZTVN4llvm2cl6parserIN12_GLOBAL__N_112RewriterNameEEE\", \"vtable for llvm::cl::parser<(anonymous namespace)::RewriterName>\"},\n    {\"_ZTVN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_10TrackingVHIS1_EENS_14ValueMapConfigIS3_EENS_12DenseMapInfoIS5_EEEE\", \"vtable for llvm::ValueMapCallbackVH<llvm::Value const*, llvm::TrackingVH<llvm::Value>, llvm::ValueMapConfig<llvm::Value const*>, llvm::DenseMapInfo<llvm::TrackingVH<llvm::Value> > >\"},\n    {\"_ZTVN4llvm20LoadAndStorePromoterE\", \"vtable for llvm::LoadAndStorePromoter\"},\n    {\"_ZTVN4llvm6DITypeE\", \"vtable for llvm::DIType\"},\n    {\"_ZTVN4llvm15DICompositeTypeE\", \"vtable for llvm::DICompositeType\"},\n    {\"_ZTVN4llvm13DIDerivedTypeE\", \"vtable for llvm::DIDerivedType\"},\n    {\"_ZTVN4llvm11DIBasicTypeE\", \"vtable for llvm::DIBasicType\"},\n    {\"_ZTVN4llvm6DIFileE\", \"vtable for llvm::DIFile\"},\n    {\"_ZTVN4llvm11DINameSpaceE\", \"vtable for llvm::DINameSpace\"},\n    {\"_ZTVN4llvm13DICompileUnitE\", \"vtable for llvm::DICompileUnit\"},\n    {\"_ZTVN4llvm14DILexicalBlockE\", \"vtable for llvm::DILexicalBlock\"},\n    {\"_ZTVN4llvm10FoldingSetINS_4SCEVEEE\", \"vtable for llvm::FoldingSet<llvm::SCEV>\"},\n    {\"_ZTVN4llvm2cl3optIbLb1ENS0_6parserIbEEEE\", \"vtable for llvm::cl::opt<bool, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTVN4llvm2cl3optIjLb1ENS0_6parserIjEEEE\", \"vtable for llvm::cl::opt<unsigned int, true, llvm::cl::parser<unsigned int> >\"},\n    {\"_ZTVN4llvm2cl3optINS_9CodeModel5ModelELb1ENS0_6parserIS3_EEEE\", \"vtable for llvm::cl::opt<llvm::CodeModel::Model, true, llvm::cl::parser<llvm::CodeModel::Model> >\"},\n    {\"_ZTVN4llvm2cl6parserINS_9CodeModel5ModelEEE\", \"vtable for llvm::cl::parser<llvm::CodeModel::Model>\"},\n    {\"_ZTVN4llvm2cl3optINS_5Reloc5ModelELb1ENS0_6parserIS3_EEEE\", \"vtable for llvm::cl::opt<llvm::Reloc::Model, true, llvm::cl::parser<llvm::Reloc::Model> >\"},\n    {\"_ZTVN4llvm2cl6parserINS_5Reloc5ModelEEE\", \"vtable for llvm::cl::parser<llvm::Reloc::Model>\"},\n    {\"_ZTVN4llvm2cl3optINS_8FloatABI7ABITypeELb1ENS0_6parserIS3_EEEE\", \"vtable for llvm::cl::opt<llvm::FloatABI::ABIType, true, llvm::cl::parser<llvm::FloatABI::ABIType> >\"},\n    {\"_ZTVN4llvm2cl6parserINS_8FloatABI7ABITypeEEE\", \"vtable for llvm::cl::parser<llvm::FloatABI::ABIType>\"},\n    {\"_ZTVN4llvm10FoldingSetINS_17AttributeListImplEEE\", \"vtable for llvm::FoldingSet<llvm::AttributeListImpl>\"},\n    {\"_ZTVN4llvm11ConstantIntE\", \"vtable for llvm::ConstantInt\"},\n    {\"_ZTVN4llvm25GetElementPtrConstantExprE\", \"vtable for llvm::GetElementPtrConstantExpr\"},\n    {\"_ZTVN4llvm4UserE\", \"vtable for llvm::User\"},\n    {\"_ZTVN4llvm19CompareConstantExprE\", \"vtable for llvm::CompareConstantExpr\"},\n    {\"_ZTVN4llvm24ExtractValueConstantExprE\", \"vtable for llvm::ExtractValueConstantExpr\"},\n    {\"_ZTVN4llvm23InsertValueConstantExprE\", \"vtable for llvm::InsertValueConstantExpr\"},\n    {\"_ZTVN4llvm25ShuffleVectorConstantExprE\", \"vtable for llvm::ShuffleVectorConstantExpr\"},\n    {\"_ZTVN4llvm25InsertElementConstantExprE\", \"vtable for llvm::InsertElementConstantExpr\"},\n    {\"_ZTVN4llvm26ExtractElementConstantExprE\", \"vtable for llvm::ExtractElementConstantExpr\"},\n    {\"_ZTVN4llvm18SelectConstantExprE\", \"vtable for llvm::SelectConstantExpr\"},\n    {\"_ZTVN4llvm18BinaryConstantExprE\", \"vtable for llvm::BinaryConstantExpr\"},\n    {\"_ZTVN4llvm17UnaryConstantExprE\", \"vtable for llvm::UnaryConstantExpr\"},\n    {\"_ZTVN4llvm17DominatorTreeBaseINS_10BasicBlockEEE\", \"vtable for llvm::DominatorTreeBase<llvm::BasicBlock>\"},\n    {\"_ZTVN4llvm8ArgumentE\", \"vtable for llvm::Argument\"},\n    {\"_ZTVN4llvm10FoldingSetINS_6MDNodeEEE\", \"vtable for llvm::FoldingSet<llvm::MDNode>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapIcNS_4TypeENS_21ConstantAggregateZeroELb0EEE\", \"vtable for llvm::ConstantUniqueMap<char, llvm::Type, llvm::ConstantAggregateZero, false>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_9ArrayTypeENS_13ConstantArrayELb1EEE\", \"vtable for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::ArrayType, llvm::ConstantArray, true>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10StructTypeENS_14ConstantStructELb1EEE\", \"vtable for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct, true>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapISt6vectorIPNS_8ConstantESaIS3_EENS_10VectorTypeENS_14ConstantVectorELb0EEE\", \"vtable for llvm::ConstantUniqueMap<std::vector<llvm::Constant*, std::allocator<llvm::Constant*> >, llvm::VectorType, llvm::ConstantVector, false>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapIcNS_11PointerTypeENS_19ConstantPointerNullELb0EEE\", \"vtable for llvm::ConstantUniqueMap<char, llvm::PointerType, llvm::ConstantPointerNull, false>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapIcNS_4TypeENS_10UndefValueELb0EEE\", \"vtable for llvm::ConstantUniqueMap<char, llvm::Type, llvm::UndefValue, false>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapINS_14ExprMapKeyTypeENS_4TypeENS_12ConstantExprELb0EEE\", \"vtable for llvm::ConstantUniqueMap<llvm::ExprMapKeyType, llvm::Type, llvm::ConstantExpr, false>\"},\n    {\"_ZTVN4llvm17ConstantUniqueMapINS_16InlineAsmKeyTypeENS_11PointerTypeENS_9InlineAsmELb0EEE\", \"vtable for llvm::ConstantUniqueMap<llvm::InlineAsmKeyType, llvm::PointerType, llvm::InlineAsm, false>\"},\n    {\"_ZTVN4llvm11IntegerTypeE\", \"vtable for llvm::IntegerType\"},\n    {\"_ZTVN4llvm11DerivedTypeE\", \"vtable for llvm::DerivedType\"},\n    {\"_ZTVN4llvm8MDStringE\", \"vtable for llvm::MDString\"},\n    {\"_ZTVN4llvm2cl6parserIPKNS_8PassInfoEEE\", \"vtable for llvm::cl::parser<llvm::PassInfo const*>\"},\n    {\"_ZTVN4llvm2cl4listIPKNS_8PassInfoEbNS_14PassNameParserEEE\", \"vtable for llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>\"},\n    {\"_ZTVN4llvm2cl3optINS_14PassDebugLevelELb0ENS0_6parserIS2_EEEE\", \"vtable for llvm::cl::opt<llvm::PassDebugLevel, false, llvm::cl::parser<llvm::PassDebugLevel> >\"},\n    {\"_ZTVN4llvm2cl6parserINS_14PassDebugLevelEEE\", \"vtable for llvm::cl::parser<llvm::PassDebugLevel>\"},\n    {\"_ZTVN4llvm15PassManagerImplE\", \"vtable for llvm::PassManagerImpl\"},\n    {\"_ZTVN4llvm23FunctionPassManagerImplE\", \"vtable for llvm::FunctionPassManagerImpl\"},\n    {\"_ZTVN4llvm10OpaqueTypeE\", \"vtable for llvm::OpaqueType\"},\n    {\"_ZN4llvm12TheARMTargetE\", \"llvm::TheARMTarget\"},\n    {\"_ZN4llvm14TheThumbTargetE\", \"llvm::TheThumbTarget\"},\n    {\"_ZTVN4llvm14format_object1IhEE\", \"vtable for llvm::format_object1<unsigned char>\"},\n    {\"_ZTVN4llvm15MCAlignFragmentE\", \"vtable for llvm::MCAlignFragment\"},\n    {\"_ZTVN4llvm14MCFillFragmentE\", \"vtable for llvm::MCFillFragment\"},\n    {\"_ZTVN4llvm14MCDataFragmentE\", \"vtable for llvm::MCDataFragment\"},\n    {\"_ZTVN4llvm13MCOrgFragmentE\", \"vtable for llvm::MCOrgFragment\"},\n    {\"_ZTVN4llvm24MCDwarfCallFrameFragmentE\", \"vtable for llvm::MCDwarfCallFrameFragment\"},\n    {\"_ZTVN4llvm23MCDwarfLineAddrFragmentE\", \"vtable for llvm::MCDwarfLineAddrFragment\"},\n    {\"_ZTVN4llvm13MCLEBFragmentE\", \"vtable for llvm::MCLEBFragment\"},\n    {\"_ZN4llvm8MCSymbol21AbsolutePseudoSectionE\", \"llvm::MCSymbol::AbsolutePseudoSection\"},\n    {\"_ZTVN4llvm14MCInstFragmentE\", \"vtable for llvm::MCInstFragment\"},\n    {\"_ZN4llvm7APFloat8IEEEhalfE\", \"llvm::APFloat::IEEEhalf\"},\n    {\"_ZN4llvm7APFloat10IEEEsingleE\", \"llvm::APFloat::IEEEsingle\"},\n    {\"_ZN4llvm7APFloat10IEEEdoubleE\", \"llvm::APFloat::IEEEdouble\"},\n    {\"_ZN4llvm7APFloat8IEEEquadE\", \"llvm::APFloat::IEEEquad\"},\n    {\"_ZN4llvm7APFloat17x87DoubleExtendedE\", \"llvm::APFloat::x87DoubleExtended\"},\n    {\"_ZN4llvm7APFloat5BogusE\", \"llvm::APFloat::Bogus\"},\n    {\"_ZN4llvm7APFloat15PPCDoubleDoubleE\", \"llvm::APFloat::PPCDoubleDouble\"},\n    {\"_ZTVN4llvm2cl12basic_parserIbEE\", \"vtable for llvm::cl::basic_parser<bool>\"},\n    {\"_ZTVN4llvm2cl12basic_parserINS0_13boolOrDefaultEEE\", \"vtable for llvm::cl::basic_parser<llvm::cl::boolOrDefault>\"},\n    {\"_ZTVN4llvm2cl12basic_parserIiEE\", \"vtable for llvm::cl::basic_parser<int>\"},\n    {\"_ZTVN4llvm2cl12basic_parserIjEE\", \"vtable for llvm::cl::basic_parser<unsigned int>\"},\n    {\"_ZTVN4llvm2cl12basic_parserIdEE\", \"vtable for llvm::cl::basic_parser<double>\"},\n    {\"_ZTVN4llvm2cl12basic_parserIfEE\", \"vtable for llvm::cl::basic_parser<float>\"},\n    {\"_ZTVN4llvm2cl12basic_parserISsEE\", \"vtable for llvm::cl::basic_parser<std::string>\"},\n    {\"_ZTVN4llvm2cl12basic_parserIcEE\", \"vtable for llvm::cl::basic_parser<char>\"},\n    {\"_ZTVN4llvm2cl3optIjLb0ENS0_6parserIjEEEE\", \"vtable for llvm::cl::opt<unsigned int, false, llvm::cl::parser<unsigned int> >\"},\n    {\"_ZTVN4llvm2cl3optIiLb0ENS0_6parserIiEEEE\", \"vtable for llvm::cl::opt<int, false, llvm::cl::parser<int> >\"},\n    {\"_ZTVN4llvm2cl3optISsLb0ENS0_6parserISsEEEE\", \"vtable for llvm::cl::opt<std::string, false, llvm::cl::parser<std::string> >\"},\n    {\"_ZTVN4llvm2cl3optIcLb0ENS0_6parserIcEEEE\", \"vtable for llvm::cl::opt<char, false, llvm::cl::parser<char> >\"},\n    {\"_ZTVN4llvm2cl3optIbLb0ENS0_6parserIbEEEE\", \"vtable for llvm::cl::opt<bool, false, llvm::cl::parser<bool> >\"},\n    {\"_ZTVN4llvm2cl3optIN12_GLOBAL__N_114VersionPrinterELb1ENS0_6parserIbEEEE\", \"vtable for llvm::cl::opt<(anonymous namespace)::VersionPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTVN4llvm2cl3optIN12_GLOBAL__N_111HelpPrinterELb1ENS0_6parserIbEEEE\", \"vtable for llvm::cl::opt<(anonymous namespace)::HelpPrinter, true, llvm::cl::parser<bool> >\"},\n    {\"_ZTVN4llvm3sys11ThreadLocalIKN12_GLOBAL__N_124CrashRecoveryContextImplEEE\", \"vtable for llvm::sys::ThreadLocal<(anonymous namespace)::CrashRecoveryContextImpl const>\"},\n    {\"_ZTVN4llvm3sys11ThreadLocalIKNS_21PrettyStackTraceEntryEEE\", \"vtable for llvm::sys::ThreadLocal<llvm::PrettyStackTraceEntry const>\"},\n    {\"_ZN4llvm3sys9TimeValue7MinTimeE\", \"llvm::sys::TimeValue::MinTime\"},\n    {\"_ZN4llvm3sys9TimeValue7MaxTimeE\", \"llvm::sys::TimeValue::MaxTime\"},\n    {\"_ZN4llvm3sys9TimeValue13PosixZeroTimeE\", \"llvm::sys::TimeValue::PosixZeroTime\"},\n    {\"_ZN4llvm3sys9TimeValue13Win32ZeroTimeE\", \"llvm::sys::TimeValue::Win32ZeroTime\"},\n    {\"_ZTVN4llvm14format_object1IxEE\", \"vtable for llvm::format_object1<long long>\"},\n    {\"_ZTVN4llvm14format_object1IdEE\", \"vtable for llvm::format_object1<double>\"},\n    {\"_ZTVN4llvm2cl3optISsLb1ENS0_6parserISsEEEE\", \"vtable for llvm::cl::opt<std::string, true, llvm::cl::parser<std::string> >\"},\n    {\"_ZZN5clang12_GLOBAL__N_18getNewIdENS0_7tIdTypeEE8idCounts\", \"clang::(anonymous namespace)::getNewId(clang::(anonymous namespace)::tIdType)::idCounts\"},\n    {\"_ZZN12_GLOBAL__N_126AdjustedReturnValueChecker6getTagEvE1x\", \"(anonymous namespace)::AdjustedReturnValueChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_120AnalyzerStatsChecker6getTagEvE1x\", \"(anonymous namespace)::AnalyzerStatsChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_117ArrayBoundChecker6getTagEvE1x\", \"(anonymous namespace)::ArrayBoundChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_119ArrayBoundCheckerV26getTagEvE1x\", \"(anonymous namespace)::ArrayBoundCheckerV2::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_118AttrNonNullChecker6getTagEvE1x\", \"(anonymous namespace)::AttrNonNullChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_119ClassReleaseChecker6getTagEvE1x\", \"(anonymous namespace)::ClassReleaseChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_122CFRetainReleaseChecker6getTagEvE1x\", \"(anonymous namespace)::CFRetainReleaseChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_121CFNumberCreateChecker6getTagEvE1x\", \"(anonymous namespace)::CFNumberCreateChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_113NilArgChecker6getTagEvE1x\", \"(anonymous namespace)::NilArgChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_122BuiltinFunctionChecker6getTagEvE3tag\", \"(anonymous namespace)::BuiltinFunctionChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_114CStringChecker6getTagEvE3tag\", \"(anonymous namespace)::CStringChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_121CallAndMessageChecker6getTagEvE1x\", \"(anonymous namespace)::CallAndMessageChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_115CastSizeChecker6getTagEvE1x\", \"(anonymous namespace)::CastSizeChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_119CastToStructChecker6getTagEvE1x\", \"(anonymous namespace)::CastToStructChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_113ChrootChecker6getTagEvE1x\", \"(anonymous namespace)::ChrootChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_118DereferenceChecker6getTagEvE3tag\", \"(anonymous namespace)::DereferenceChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_114DivZeroChecker6getTagEvE1x\", \"(anonymous namespace)::DivZeroChecker::getTag()::x\"},\n    {\"_ZZN5clang4ento10ExprEngine23processCFGBlockEntranceERNS0_15ExplodedNodeSetERNS0_18GenericNodeBuilderINS_13BlockEntranceEEEE3tag\", \"clang::ento::ExprEngine::processCFGBlockEntrance(clang::ento::ExplodedNodeSet&, clang::ento::GenericNodeBuilder<clang::BlockEntrance>&)::tag\"},\n    {\"_ZZN5clang4ento10ExprEngine8evalLoadERNS0_15ExplodedNodeSetEPKNS_4ExprEPNS0_12ExplodedNodeEPKNS0_7GRStateENS0_4SValEPKvNS_8QualTypeEE16loadReferenceTag\", \"clang::ento::ExprEngine::evalLoad(clang::ento::ExplodedNodeSet&, clang::Expr const*, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SVal, void const*, clang::QualType)::loadReferenceTag\"},\n    {\"_ZZN5clang4ento10ExprEngine15VisitReturnStmtEPKNS_10ReturnStmtEPNS0_12ExplodedNodeERNS0_15ExplodedNodeSetEE3tag\", \"clang::ento::ExprEngine::VisitReturnStmt(clang::ReturnStmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&)::tag\"},\n    {\"_ZN12_GLOBAL__N_110ReturnExpr6TagIntE\", \"(anonymous namespace)::ReturnExpr::TagInt\"},\n    {\"_ZZN12_GLOBAL__N_119FixedAddressChecker6getTagEvE1x\", \"(anonymous namespace)::FixedAddressChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_126IdempotentOperationChecker6getTagEvE1x\", \"(anonymous namespace)::IdempotentOperationChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_116MacOSXAPIChecker6getTagEvE3tag\", \"(anonymous namespace)::MacOSXAPIChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_113MallocChecker6getTagEvE1x\", \"(anonymous namespace)::MallocChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_124NSAutoreleasePoolChecker6getTagEvE1x\", \"(anonymous namespace)::NSAutoreleasePoolChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_123NoReturnFunctionChecker6getTagEvE3tag\", \"(anonymous namespace)::NoReturnFunctionChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_115OSAtomicChecker6getTagEvE3tag\", \"(anonymous namespace)::OSAtomicChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_115OSAtomicChecker26evalOSAtomicCompareAndSwapERN5clang4ento14CheckerContextEPKNS1_8CallExprEE10magic_load\", \"(anonymous namespace)::OSAtomicChecker::evalOSAtomicCompareAndSwap(clang::ento::CheckerContext&, clang::CallExpr const*)::magic_load\"},\n    {\"_ZZN12_GLOBAL__N_115OSAtomicChecker26evalOSAtomicCompareAndSwapERN5clang4ento14CheckerContextEPKNS1_8CallExprEE11magic_store\", \"(anonymous namespace)::OSAtomicChecker::evalOSAtomicCompareAndSwap(clang::ento::CheckerContext&, clang::CallExpr const*)::magic_store\"},\n    {\"_ZZN12_GLOBAL__N_117ObjCAtSyncChecker6getTagEvE3tag\", \"(anonymous namespace)::ObjCAtSyncChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_119ObjCSelfInitChecker6getTagEvE3tag\", \"(anonymous namespace)::ObjCSelfInitChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_119PointerArithChecker6getTagEvE1x\", \"(anonymous namespace)::PointerArithChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_117PointerSubChecker6getTagEvE1x\", \"(anonymous namespace)::PointerSubChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_118PthreadLockChecker6getTagEvE1x\", \"(anonymous namespace)::PthreadLockChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_125ReturnPointerRangeChecker6getTagEvE1x\", \"(anonymous namespace)::ReturnPointerRangeChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_118ReturnUndefChecker6getTagEvE1x\", \"(anonymous namespace)::ReturnUndefChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_120StackAddrLeakChecker6getTagEvE1x\", \"(anonymous namespace)::StackAddrLeakChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_113StreamChecker6getTagEvE1x\", \"(anonymous namespace)::StreamChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_118UndefBranchChecker6getTagEvE1x\", \"(anonymous namespace)::UndefBranchChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_128UndefCapturedBlockVarChecker6getTagEvE3tag\", \"(anonymous namespace)::UndefCapturedBlockVarChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_118UndefResultChecker6getTagEvE3tag\", \"(anonymous namespace)::UndefResultChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_130UndefinedArraySubscriptChecker6getTagEvE1x\", \"(anonymous namespace)::UndefinedArraySubscriptChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_126UndefinedAssignmentChecker6getTagEvE1x\", \"(anonymous namespace)::UndefinedAssignmentChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_114UnixAPIChecker6getTagEvE3tag\", \"(anonymous namespace)::UnixAPIChecker::getTag()::tag\"},\n    {\"_ZZN12_GLOBAL__N_122UnreachableCodeChecker6getTagEvE1x\", \"(anonymous namespace)::UnreachableCodeChecker::getTag()::x\"},\n    {\"_ZZN12_GLOBAL__N_114VLASizeChecker6getTagEvE3tag\", \"(anonymous namespace)::VLASizeChecker::getTag()::tag\"},\n    {\"_ZZ18IsCachedDiagnosticPN5clang4ento9BugReportEPNS0_14PathDiagnosticEE2DC\", \"IsCachedDiagnostic(clang::ento::BugReport*, clang::ento::PathDiagnostic*)::DC\"},\n    {\"_ZGVZ18IsCachedDiagnosticPN5clang4ento9BugReportEPNS0_14PathDiagnosticEE2DC\", \"guard variable for IsCachedDiagnostic(clang::ento::BugReport*, clang::ento::PathDiagnostic*)::DC\"},\n    {\"_ZZNK12_GLOBAL__N_118NilReceiverVisitor7ProfileERN4llvm16FoldingSetNodeIDEE1x\", \"(anonymous namespace)::NilReceiverVisitor::Profile(llvm::FoldingSetNodeID&) const::x\"},\n    {\"_ZZNK12_GLOBAL__N_122FindLastStoreBRVisitor7ProfileERN4llvm16FoldingSetNodeIDEE3tag\", \"(anonymous namespace)::FindLastStoreBRVisitor::Profile(llvm::FoldingSetNodeID&) const::tag\"},\n    {\"_ZZNK12_GLOBAL__N_124TrackConstraintBRVisitor7ProfileERN4llvm16FoldingSetNodeIDEE3tag\", \"(anonymous namespace)::TrackConstraintBRVisitor::Profile(llvm::FoldingSetNodeID&) const::tag\"},\n    {\"_ZZN5clang4ento12GRStateTraitIN4llvm12ImmutableMapIPKNS0_10SymbolDataEN12_GLOBAL__N_16RefValENS2_16ImutKeyValueInfoIS6_S8_EEEEE8GDMIndexEvE9RefBIndex\", \"clang::ento::GRStateTrait<llvm::ImmutableMap<clang::ento::SymbolData const*, (anonymous namespace)::RefVal, llvm::ImutKeyValueInfo<clang::ento::SymbolData const*, (anonymous namespace)::RefVal> > >::GDMIndex()::RefBIndex\"},\n    {\"_ZZN12_GLOBAL__N_110CFRefCount10evalReturnERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_10ReturnStmtEPNS2_12ExplodedNodeEE14autoreleasetag\", \"(anonymous namespace)::CFRefCount::evalReturn(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ReturnStmt const*, clang::ento::ExplodedNode*)::autoreleasetag\"},\n    {\"_ZZN12_GLOBAL__N_110CFRefCount10evalReturnERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_10ReturnStmtEPNS2_12ExplodedNodeEE16ReturnOwnLeakTag\", \"(anonymous namespace)::CFRefCount::evalReturn(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ReturnStmt const*, clang::ento::ExplodedNode*)::ReturnOwnLeakTag\"},\n    {\"_ZZN12_GLOBAL__N_110CFRefCount10evalReturnERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPKNS1_10ReturnStmtEPNS2_12ExplodedNodeEE25ReturnNotOwnedForOwnedTag\", \"(anonymous namespace)::CFRefCount::evalReturn(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ReturnStmt const*, clang::ento::ExplodedNode*)::ReturnNotOwnedForOwnedTag\"},\n    {\"_ZZN12_GLOBAL__N_110CFRefCount15evalDeadSymbolsERN5clang4ento15ExplodedNodeSetERNS2_10ExprEngineERNS2_15StmtNodeBuilderEPNS2_12ExplodedNodeEPKNS2_7GRStateERNS2_12SymbolReaperEE9LeakPPTag\", \"(anonymous namespace)::CFRefCount::evalDeadSymbols(clang::ento::ExplodedNodeSet&, clang::ento::ExprEngine&, clang::ento::StmtNodeBuilder&, clang::ento::ExplodedNode*, clang::ento::GRState const*, clang::ento::SymbolReaper&)::LeakPPTag\"},\n    {\"_ZZN12_GLOBAL__N_120RetainReleaseChecker6getTagEvE1x\", \"(anonymous namespace)::RetainReleaseChecker::getTag()::x\"},\n    {\"_ZZN5clang4ento14CheckerContextD1EvE17autoTransitionTag\", \"clang::ento::CheckerContext::~CheckerContext()::autoTransitionTag\"},\n    {\"_ZZN12_GLOBAL__N_111RewriteObjC38RewriteFunctionBodyOrGlobalInitializerEPN5clang4StmtEE20uniqueByrefDeclCount\", \"(anonymous namespace)::RewriteObjC::RewriteFunctionBodyOrGlobalInitializer(clang::Stmt*)::uniqueByrefDeclCount\"},\n    {\"_ZZN5clang22getClangRepositoryPathEvE13SVNRepository\", \"clang::getClangRepositoryPath()::SVNRepository\"},\n    {\"_ZGVZN5clang22getClangRepositoryPathEvE13SVNRepository\", \"guard variable for clang::getClangRepositoryPath()::SVNRepository\"},\n    {\"_ZZN4llvm26initializeArgPromotionPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeArgPromotionPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112ArgPromotion2IDE\", \"(anonymous namespace)::ArgPromotion::ID\"},\n    {\"_ZZN4llvm27initializeConstantMergePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeConstantMergePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113ConstantMerge2IDE\", \"(anonymous namespace)::ConstantMerge::ID\"},\n    {\"_ZZN4llvm17initializeDAEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDAEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm17initializeDAHPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDAHPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_13DAH2IDE\", \"(anonymous namespace)::DAH::ID\"},\n    {\"_ZN12_GLOBAL__N_13DAE2IDE\", \"(anonymous namespace)::DAE::ID\"},\n    {\"_ZZN4llvm17initializeDTEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDTEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_13DTE2IDE\", \"(anonymous namespace)::DTE::ID\"},\n    {\"_ZZN4llvm27initializeFunctionAttrsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeFunctionAttrsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113FunctionAttrs2IDE\", \"(anonymous namespace)::FunctionAttrs::ID\"},\n    {\"_ZZN4llvm23initializeGlobalDCEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeGlobalDCEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_19GlobalDCE2IDE\", \"(anonymous namespace)::GlobalDCE::ID\"},\n    {\"_ZZN4llvm23initializeGlobalOptPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeGlobalOptPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_19GlobalOpt2IDE\", \"(anonymous namespace)::GlobalOpt::ID\"},\n    {\"_ZZN4llvm27initializeAlwaysInlinerPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeAlwaysInlinerPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113AlwaysInliner2IDE\", \"(anonymous namespace)::AlwaysInliner::ID\"},\n    {\"_ZZN4llvm27initializeSimpleInlinerPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSimpleInlinerPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113SimpleInliner2IDE\", \"(anonymous namespace)::SimpleInliner::ID\"},\n    {\"_ZZN4llvm21initializePruneEHPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePruneEHPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_17PruneEH2IDE\", \"(anonymous namespace)::PruneEH::ID\"},\n    {\"_ZZN4llvm37initializeStripDeadPrototypesPassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeStripDeadPrototypesPassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_123StripDeadPrototypesPass2IDE\", \"(anonymous namespace)::StripDeadPrototypesPass::ID\"},\n    {\"_ZN12_GLOBAL__N_116WriteBitcodePass2IDE\", \"(anonymous namespace)::WriteBitcodePass::ID\"},\n    {\"_ZN12_GLOBAL__N_116SSEDomainFixPass2IDE\", \"(anonymous namespace)::SSEDomainFixPass::ID\"},\n    {\"_ZN12_GLOBAL__N_17EmitterIN4llvm14JITCodeEmitterEE2IDE\", \"(anonymous namespace)::Emitter<llvm::JITCodeEmitter>::ID\"},\n    {\"_ZN12_GLOBAL__N_13FPS2IDE\", \"(anonymous namespace)::FPS::ID\"},\n    {\"_ZZN4llvm17X86TargetLoweringC1ERNS_16X86TargetMachineEE6IntVTs\", \"llvm::X86TargetLowering::X86TargetLowering(llvm::X86TargetMachine&)::IntVTs\"},\n    {\"_ZGVZN4llvm17X86TargetLoweringC1ERNS_16X86TargetMachineEE6IntVTs\", \"guard variable for llvm::X86TargetLowering::X86TargetLowering(llvm::X86TargetMachine&)::IntVTs\"},\n    {\"_ZN12_GLOBAL__N_14CGBR2IDE\", \"(anonymous namespace)::CGBR::ID\"},\n    {\"_ZN12_GLOBAL__N_14MSAH2IDE\", \"(anonymous namespace)::MSAH::ID\"},\n    {\"_ZN12_GLOBAL__N_114ARMCodeEmitter2IDE\", \"(anonymous namespace)::ARMCodeEmitter::ID\"},\n    {\"_ZN12_GLOBAL__N_118ARMConstantIslands2IDE\", \"(anonymous namespace)::ARMConstantIslands::ID\"},\n    {\"_ZN12_GLOBAL__N_115ARMExpandPseudo2IDE\", \"(anonymous namespace)::ARMExpandPseudo::ID\"},\n    {\"_ZN12_GLOBAL__N_114ARMGlobalMerge2IDE\", \"(anonymous namespace)::ARMGlobalMerge::ID\"},\n    {\"_ZN12_GLOBAL__N_115ARMLoadStoreOpt2IDE\", \"(anonymous namespace)::ARMLoadStoreOpt::ID\"},\n    {\"_ZN12_GLOBAL__N_123ARMPreAllocLoadStoreOpt2IDE\", \"(anonymous namespace)::ARMPreAllocLoadStoreOpt::ID\"},\n    {\"_ZN12_GLOBAL__N_112MLxExpansion2IDE\", \"(anonymous namespace)::MLxExpansion::ID\"},\n    {\"_ZN12_GLOBAL__N_115NEONMoveFixPass2IDE\", \"(anonymous namespace)::NEONMoveFixPass::ID\"},\n    {\"_ZN12_GLOBAL__N_117Thumb2ITBlockPass2IDE\", \"(anonymous namespace)::Thumb2ITBlockPass::ID\"},\n    {\"_ZN12_GLOBAL__N_116Thumb2SizeReduce2IDE\", \"(anonymous namespace)::Thumb2SizeReduce::ID\"},\n    {\"_ZZN12_GLOBAL__N_120SelectionDAGLegalize10LegalizeOpEN4llvm7SDValueEE5depth\", \"(anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDValue)::depth\"},\n    {\"_ZZN4llvm10DwarfDebug21computeSizeAndOffsetsEvE6Offset\", \"llvm::DwarfDebug::computeSizeAndOffsets()::Offset\"},\n    {\"_ZGVZN4llvm10DwarfDebug21computeSizeAndOffsetsEvE6Offset\", \"guard variable for llvm::DwarfDebug::computeSizeAndOffsets()::Offset\"},\n    {\"_ZN12_GLOBAL__N_116BranchFolderPass2IDE\", \"(anonymous namespace)::BranchFolderPass::ID\"},\n    {\"_ZZN4llvm35initializeCalculateSpillWeightsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeCalculateSpillWeightsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_116CodePlacementOpt2IDE\", \"(anonymous namespace)::CodePlacementOpt::ID\"},\n    {\"_ZZN4llvm40initializeDeadMachineInstructionElimPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDeadMachineInstructionElimPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_126DeadMachineInstructionElim2IDE\", \"(anonymous namespace)::DeadMachineInstructionElim::ID\"},\n    {\"_ZN12_GLOBAL__N_114DwarfEHPrepare2IDE\", \"(anonymous namespace)::DwarfEHPrepare::ID\"},\n    {\"_ZZN4llvm25initializeEdgeBundlesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeEdgeBundlesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm31initializeExpandISelPseudosPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeExpandISelPseudosPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_117ExpandISelPseudos2IDE\", \"(anonymous namespace)::ExpandISelPseudos::ID\"},\n    {\"_ZZN4llvm26initializeGCModuleInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeGCModuleInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_17Deleter2IDE\", \"(anonymous namespace)::Deleter::ID\"},\n    {\"_ZN12_GLOBAL__N_17Printer2IDE\", \"(anonymous namespace)::Printer::ID\"},\n    {\"_ZZN4llvm29initializeLowerIntrinsicsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLowerIntrinsicsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_119MachineCodeAnalysis2IDE\", \"(anonymous namespace)::MachineCodeAnalysis::ID\"},\n    {\"_ZN12_GLOBAL__N_115LowerIntrinsics2IDE\", \"(anonymous namespace)::LowerIntrinsics::ID\"},\n    {\"_ZZN4llvm25initializeIfConverterPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeIfConverterPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111IfConverter2IDE\", \"(anonymous namespace)::IfConverter::ID\"},\n    {\"_ZZN4llvm32initializeLiveDebugVariablesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLiveDebugVariablesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm27initializeLiveIntervalsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLiveIntervalsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm24initializeLiveStacksPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLiveStacksPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm27initializeLiveVariablesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLiveVariablesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_118LocalStackSlotPass2IDE\", \"(anonymous namespace)::LocalStackSlotPass::ID\"},\n    {\"_ZN12_GLOBAL__N_127LowerSubregsInstructionPass2IDE\", \"(anonymous namespace)::LowerSubregsInstructionPass::ID\"},\n    {\"_ZZN4llvm24initializeMachineCSEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineCSEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_110MachineCSE2IDE\", \"(anonymous namespace)::MachineCSE::ID\"},\n    {\"_ZZN4llvm34initializeMachineDominatorTreePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineDominatorTreePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_126MachineFunctionPrinterPass2IDE\", \"(anonymous namespace)::MachineFunctionPrinterPass::ID\"},\n    {\"_ZZN4llvm25initializeMachineLICMPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineLICMPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111MachineLICM2IDE\", \"(anonymous namespace)::MachineLICM::ID\"},\n    {\"_ZZN4llvm29initializeMachineLoopInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineLoopInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm31initializeMachineModuleInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineModuleInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm28initializeMachineSinkingPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineSinkingPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114MachineSinking2IDE\", \"(anonymous namespace)::MachineSinking::ID\"},\n    {\"_ZZN4llvm33initializeMachineVerifierPassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMachineVerifierPassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_119MachineVerifierPass2IDE\", \"(anonymous namespace)::MachineVerifierPass::ID\"},\n    {\"_ZZN4llvm26initializeOptimizePHIsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeOptimizePHIsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112OptimizePHIs2IDE\", \"(anonymous namespace)::OptimizePHIs::ID\"},\n    {\"_ZZN4llvm28initializePHIEliminationPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePHIEliminationPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114PHIElimination2IDE\", \"(anonymous namespace)::PHIElimination::ID\"},\n    {\"_ZZN4llvm31initializePeepholeOptimizerPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePeepholeOptimizerPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_117PeepholeOptimizer2IDE\", \"(anonymous namespace)::PeepholeOptimizer::ID\"},\n    {\"_ZN12_GLOBAL__N_115PostRAScheduler2IDE\", \"(anonymous namespace)::PostRAScheduler::ID\"},\n    {\"_ZZN4llvm31initializePreAllocSplittingPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePreAllocSplittingPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_117PreAllocSplitting2IDE\", \"(anonymous namespace)::PreAllocSplitting::ID\"},\n    {\"_ZZN4llvm33initializeProcessImplicitDefsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeProcessImplicitDefsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm17initializePEIPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePEIPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_16RAFast2IDE\", \"(anonymous namespace)::RAFast::ID\"},\n    {\"_ZZN4llvm23initializeRALinScanPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeRALinScanPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_19RALinScan2IDE\", \"(anonymous namespace)::RALinScan::ID\"},\n    {\"_ZZN4llvm40initializeRegisterCoalescerAnalysisGroupERNS_12PassRegistryEE11initialized\", \"llvm::initializeRegisterCoalescerAnalysisGroup(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm38initializeSimpleRegisterCoalescingPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSimpleRegisterCoalescingPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_110SjLjEHPass2IDE\", \"(anonymous namespace)::SjLjEHPass::ID\"},\n    {\"_ZN12_GLOBAL__N_122IndexListEntryEmptyKeyE\", \"(anonymous namespace)::IndexListEntryEmptyKey\"},\n    {\"_ZN12_GLOBAL__N_126IndexListEntryTombstoneKeyE\", \"(anonymous namespace)::IndexListEntryTombstoneKey\"},\n    {\"_ZZN4llvm25initializeSlotIndexesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSlotIndexesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm28initializeStackProtectorPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeStackProtectorPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114StackProtector2IDE\", \"(anonymous namespace)::StackProtector::ID\"},\n    {\"_ZZN4llvm31initializeStackSlotColoringPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeStackSlotColoringPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_117StackSlotColoring2IDE\", \"(anonymous namespace)::StackSlotColoring::ID\"},\n    {\"_ZZN4llvm34initializeStrongPHIEliminationPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeStrongPHIEliminationPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_120StrongPHIElimination2IDE\", \"(anonymous namespace)::StrongPHIElimination::ID\"},\n    {\"_ZN12_GLOBAL__N_117TailDuplicatePass2IDE\", \"(anonymous namespace)::TailDuplicatePass::ID\"},\n    {\"_ZZN4llvm39initializeTwoAddressInstructionPassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeTwoAddressInstructionPassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_125TwoAddressInstructionPass2IDE\", \"(anonymous namespace)::TwoAddressInstructionPass::ID\"},\n    {\"_ZZN4llvm34initializeUnreachableBlockElimPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeUnreachableBlockElimPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm41initializeUnreachableMachineBlockElimPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeUnreachableMachineBlockElimPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_127UnreachableMachineBlockElim2IDE\", \"(anonymous namespace)::UnreachableMachineBlockElim::ID\"},\n    {\"_ZN12_GLOBAL__N_120UnreachableBlockElim2IDE\", \"(anonymous namespace)::UnreachableBlockElim::ID\"},\n    {\"_ZZN4llvm24initializeVirtRegMapPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeVirtRegMapPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm18initializeADCEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeADCEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_14ADCE2IDE\", \"(anonymous namespace)::ADCE::ID\"},\n    {\"_ZZN4llvm28initializeCodeGenPreparePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeCodeGenPreparePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114CodeGenPrepare2IDE\", \"(anonymous namespace)::CodeGenPrepare::ID\"},\n    {\"_ZZN4llvm40initializeCorrelatedValuePropagationPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeCorrelatedValuePropagationPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_126CorrelatedValuePropagation2IDE\", \"(anonymous namespace)::CorrelatedValuePropagation::ID\"},\n    {\"_ZZN4llvm17initializeDSEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDSEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_13DSE2IDE\", \"(anonymous namespace)::DSE::ID\"},\n    {\"_ZZN4llvm22initializeEarlyCSEPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeEarlyCSEPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_18EarlyCSE2IDE\", \"(anonymous namespace)::EarlyCSE::ID\"},\n    {\"_ZZN4llvm25initializeGEPSplitterPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeGEPSplitterPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111GEPSplitter2IDE\", \"(anonymous namespace)::GEPSplitter::ID\"},\n    {\"_ZZN4llvm17initializeGVNPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeGVNPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_13GVN2IDE\", \"(anonymous namespace)::GVN::ID\"},\n    {\"_ZZN4llvm28initializeIndVarSimplifyPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeIndVarSimplifyPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114IndVarSimplify2IDE\", \"(anonymous namespace)::IndVarSimplify::ID\"},\n    {\"_ZZN4llvm27initializeJumpThreadingPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeJumpThreadingPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113JumpThreading2IDE\", \"(anonymous namespace)::JumpThreading::ID\"},\n    {\"_ZZN4llvm18initializeLICMPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLICMPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_14LICM2IDE\", \"(anonymous namespace)::LICM::ID\"},\n    {\"_ZZN4llvm26initializeLoopDeletionPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopDeletionPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112LoopDeletion2IDE\", \"(anonymous namespace)::LoopDeletion::ID\"},\n    {\"_ZZN4llvm32initializeLoopIdiomRecognizePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopIdiomRecognizePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_118LoopIdiomRecognize2IDE\", \"(anonymous namespace)::LoopIdiomRecognize::ID\"},\n    {\"_ZZN4llvm24initializeLoopRotatePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopRotatePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_110LoopRotate2IDE\", \"(anonymous namespace)::LoopRotate::ID\"},\n    {\"_ZZN4llvm32initializeLoopStrengthReducePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopStrengthReducePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_118LoopStrengthReduce2IDE\", \"(anonymous namespace)::LoopStrengthReduce::ID\"},\n    {\"_ZZN4llvm24initializeLoopUnrollPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopUnrollPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_110LoopUnroll2IDE\", \"(anonymous namespace)::LoopUnroll::ID\"},\n    {\"_ZZN4llvm26initializeLoopUnswitchPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopUnswitchPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112LoopUnswitch2IDE\", \"(anonymous namespace)::LoopUnswitch::ID\"},\n    {\"_ZZN4llvm23initializeMemCpyOptPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMemCpyOptPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_19MemCpyOpt2IDE\", \"(anonymous namespace)::MemCpyOpt::ID\"},\n    {\"_ZZN4llvm25initializeReassociatePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeReassociatePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111Reassociate2IDE\", \"(anonymous namespace)::Reassociate::ID\"},\n    {\"_ZZN4llvm18initializeSCCPPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSCCPPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm20initializeIPSCCPPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeIPSCCPPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_16IPSCCP2IDE\", \"(anonymous namespace)::IPSCCP::ID\"},\n    {\"_ZN12_GLOBAL__N_14SCCP2IDE\", \"(anonymous namespace)::SCCP::ID\"},\n    {\"_ZZN4llvm21initializeSROA_DTPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSROA_DTPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm24initializeSROA_SSAUpPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSROA_SSAUpPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_110SROA_SSAUp2IDE\", \"(anonymous namespace)::SROA_SSAUp::ID\"},\n    {\"_ZN12_GLOBAL__N_17SROA_DT2IDE\", \"(anonymous namespace)::SROA_DT::ID\"},\n    {\"_ZZN4llvm29initializeCFGSimplifyPassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeCFGSimplifyPassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_115CFGSimplifyPass2IDE\", \"(anonymous namespace)::CFGSimplifyPass::ID\"},\n    {\"_ZZN4llvm30initializeSimplifyLibCallsPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeSimplifyLibCallsPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_116SimplifyLibCalls2IDE\", \"(anonymous namespace)::SimplifyLibCalls::ID\"},\n    {\"_ZZN4llvm26initializeTailCallElimPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeTailCallElimPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112TailCallElim2IDE\", \"(anonymous namespace)::TailCallElim::ID\"},\n    {\"_ZZN4llvm26initializeInstCombinerPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeInstCombinerPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm32initializeBreakCriticalEdgesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeBreakCriticalEdgesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_118BreakCriticalEdges2IDE\", \"(anonymous namespace)::BreakCriticalEdges::ID\"},\n    {\"_ZZN4llvm19initializeLCSSAPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLCSSAPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_15LCSSA2IDE\", \"(anonymous namespace)::LCSSA::ID\"},\n    {\"_ZZN4llvm26initializeLoopSimplifyPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopSimplifyPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_112LoopSimplify2IDE\", \"(anonymous namespace)::LoopSimplify::ID\"},\n    {\"_ZZN4llvm25initializeLowerInvokePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLowerInvokePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111LowerInvoke2IDE\", \"(anonymous namespace)::LowerInvoke::ID\"},\n    {\"_ZZN4llvm25initializeLowerSwitchPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLowerSwitchPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_111LowerSwitch2IDE\", \"(anonymous namespace)::LowerSwitch::ID\"},\n    {\"_ZZN4llvm36initializeUnifyFunctionExitNodesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeUnifyFunctionExitNodesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm32initializeCallGraphAnalysisGroupERNS_12PassRegistryEE11initialized\", \"llvm::initializeCallGraphAnalysisGroup(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm28initializeBasicCallGraphPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeBasicCallGraphPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_114BasicCallGraph2IDE\", \"(anonymous namespace)::BasicCallGraph::ID\"},\n    {\"_ZN12_GLOBAL__N_118PrintCallGraphPass2IDE\", \"(anonymous namespace)::PrintCallGraphPass::ID\"},\n    {\"_ZN12_GLOBAL__N_113CGPassManager2IDE\", \"(anonymous namespace)::CGPassManager::ID\"},\n    {\"_ZZN4llvm27initializeFindUsedTypesPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeFindUsedTypesPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm36initializeAliasAnalysisAnalysisGroupERNS_12PassRegistryEE11initialized\", \"llvm::initializeAliasAnalysisAnalysisGroup(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm29initializeAliasSetPrinterPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeAliasSetPrinterPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_115AliasSetPrinter2IDE\", \"(anonymous namespace)::AliasSetPrinter::ID\"},\n    {\"_ZZN4llvm32initializeBasicAliasAnalysisPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeBasicAliasAnalysisPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_118BasicAliasAnalysis2IDE\", \"(anonymous namespace)::BasicAliasAnalysis::ID\"},\n    {\"_ZZN4llvm9DIBuilder18CreateLexicalBlockENS_12DIDescriptorENS_6DIFileEjjE9unique_id\", \"llvm::DIBuilder::CreateLexicalBlock(llvm::DIDescriptor, llvm::DIFile, unsigned int, unsigned int)::unique_id\"},\n    {\"_ZZN4llvm9DIFactory18CreateLexicalBlockENS_12DIDescriptorENS_6DIFileEjjE9unique_id\", \"llvm::DIFactory::CreateLexicalBlock(llvm::DIDescriptor, llvm::DIFile, unsigned int, unsigned int)::unique_id\"},\n    {\"_ZZN4llvm21initializeIVUsersPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeIVUsersPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm27initializeLazyValueInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLazyValueInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm22initializeLoopInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeLoopInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113PrintLoopPass2IDE\", \"(anonymous namespace)::PrintLoopPass::ID\"},\n    {\"_ZZN4llvm38initializeMemoryDependenceAnalysisPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeMemoryDependenceAnalysisPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm18initializeNoAAPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeNoAAPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_14NoAA2IDE\", \"(anonymous namespace)::NoAA::ID\"},\n    {\"_ZZN4llvm34initializeProfileInfoAnalysisGroupERNS_12PassRegistryEE11initialized\", \"llvm::initializeProfileInfoAnalysisGroup(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm27initializeNoProfileInfoPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeNoProfileInfoPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113NoProfileInfo2IDE\", \"(anonymous namespace)::NoProfileInfo::ID\"},\n    {\"_ZZN4llvm29initializeScalarEvolutionPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeScalarEvolutionPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm36initializeTypeBasedAliasAnalysisPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeTypeBasedAliasAnalysisPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_122TypeBasedAliasAnalysis2IDE\", \"(anonymous namespace)::TypeBasedAliasAnalysis::ID\"},\n    {\"_ZZN4llvm24initializeDataLayoutPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDataLayoutPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm27initializeDominatorTreePassERNS_12PassRegistryEE11initialized\", \"llvm::initializeDominatorTreePass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_113BBPassManager2IDE\", \"(anonymous namespace)::BBPassManager::ID\"},\n    {\"_ZZN12_GLOBAL__N_110TimingInfo17createTheTimeInfoEvE3TTI\", \"(anonymous namespace)::TimingInfo::createTheTimeInfo()::TTI\"},\n    {\"_ZZN4llvm29initializePrintModulePassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePrintModulePassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm31initializePrintFunctionPassPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePrintFunctionPassPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_117PrintFunctionPass2IDE\", \"(anonymous namespace)::PrintFunctionPass::ID\"},\n    {\"_ZN12_GLOBAL__N_115PrintModulePass2IDE\", \"(anonymous namespace)::PrintModulePass::ID\"},\n    {\"_ZZN4llvm25initializePreVerifierPassERNS_12PassRegistryEE11initialized\", \"llvm::initializePreVerifierPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZZN4llvm22initializeVerifierPassERNS_12PassRegistryEE11initialized\", \"llvm::initializeVerifierPass(llvm::PassRegistry&)::initialized\"},\n    {\"_ZN12_GLOBAL__N_18Verifier2IDE\", \"(anonymous namespace)::Verifier::ID\"},\n    {\"_ZN12_GLOBAL__N_111PreVerifier2IDE\", \"(anonymous namespace)::PreVerifier::ID\"},\n    {\"_ZZ8getMutexvE12HandlesMutex\", \"getMutex()::HandlesMutex\"},\n    {\"_ZGVZ8getMutexvE12HandlesMutex\", \"guard variable for getMutex()::HandlesMutex\"},\n    {\"_ZZN4llvm5foutsEvE1S\", \"llvm::fouts()::S\"},\n    {\"_ZGVZN4llvm5foutsEvE1S\", \"guard variable for llvm::fouts()::S\"},\n    {\"_ZZN4llvm5ferrsEvE1S\", \"llvm::ferrs()::S\"},\n    {\"_ZGVZN4llvm5ferrsEvE1S\", \"guard variable for llvm::ferrs()::S\"},\n    {\"_ZZN4llvm5fdbgsEvE1S\", \"llvm::fdbgs()::S\"},\n    {\"_ZGVZN4llvm5fdbgsEvE1S\", \"guard variable for llvm::fdbgs()::S\"},\n    {\"_ZGVZN4llvm21PrettyStackTraceEntryC1EvE17HandlerRegistered\", \"guard variable for llvm::PrettyStackTraceEntry::PrettyStackTraceEntry()::HandlerRegistered\"},\n    {\"_ZZ15PrintStackTracePvE10StackTrace\", \"PrintStackTrace(void*)::StackTrace\"},\n    {\"_ZZN4llvm4outsEvE1S\", \"llvm::outs()::S\"},\n    {\"_ZGVZN4llvm4outsEvE1S\", \"guard variable for llvm::outs()::S\"},\n    {\"_ZZN4llvm4errsEvE1S\", \"llvm::errs()::S\"},\n    {\"_ZGVZN4llvm4errsEvE1S\", \"guard variable for llvm::errs()::S\"},\n    {\"_ZZN4llvm5nullsEvE1S\", \"llvm::nulls()::S\"},\n    {\"_ZGVZN4llvm5nullsEvE1S\", \"guard variable for llvm::nulls()::S\"},\n    {\"_ZZN4llvm16generic_categoryEvE1s\", \"llvm::generic_category()::s\"},\n    {\"_ZGVZN4llvm16generic_categoryEvE1s\", \"guard variable for llvm::generic_category()::s\"},\n    {\"_ZZN4llvm15system_categoryEvE1s\", \"llvm::system_category()::s\"},\n    {\"_ZGVZN4llvm15system_categoryEvE1s\", \"guard variable for llvm::system_category()::s\"},\n    {\"_ZN5clang7CodeGen13EHPersonality5GNU_CE\", \"clang::CodeGen::EHPersonality::GNU_C\"},\n    {\"_ZN5clang7CodeGen13EHPersonality10GNU_C_SJLJE\", \"clang::CodeGen::EHPersonality::GNU_C_SJLJ\"},\n    {\"_ZN5clang7CodeGen13EHPersonality9NeXT_ObjCE\", \"clang::CodeGen::EHPersonality::NeXT_ObjC\"},\n    {\"_ZN5clang7CodeGen13EHPersonality13GNU_CPlusPlusE\", \"clang::CodeGen::EHPersonality::GNU_CPlusPlus\"},\n    {\"_ZN5clang7CodeGen13EHPersonality18GNU_CPlusPlus_SJLJE\", \"clang::CodeGen::EHPersonality::GNU_CPlusPlus_SJLJ\"},\n    {\"_ZN5clang7CodeGen13EHPersonality8GNU_ObjCE\", \"clang::CodeGen::EHPersonality::GNU_ObjC\"},\n    {\"_ZN5clang4ento15ManagerRegistry15StoreMgrCreatorE\", \"clang::ento::ManagerRegistry::StoreMgrCreator\"},\n    {\"_ZN5clang4ento15ManagerRegistry20ConstraintMgrCreatorE\", \"clang::ento::ManagerRegistry::ConstraintMgrCreator\"},\n    {\"_ZN5clang10ASTContext30NumImplicitDefaultConstructorsE\", \"clang::ASTContext::NumImplicitDefaultConstructors\"},\n    {\"_ZN5clang10ASTContext38NumImplicitDefaultConstructorsDeclaredE\", \"clang::ASTContext::NumImplicitDefaultConstructorsDeclared\"},\n    {\"_ZN5clang10ASTContext27NumImplicitCopyConstructorsE\", \"clang::ASTContext::NumImplicitCopyConstructors\"},\n    {\"_ZN5clang10ASTContext35NumImplicitCopyConstructorsDeclaredE\", \"clang::ASTContext::NumImplicitCopyConstructorsDeclared\"},\n    {\"_ZN5clang10ASTContext34NumImplicitCopyAssignmentOperatorsE\", \"clang::ASTContext::NumImplicitCopyAssignmentOperators\"},\n    {\"_ZN5clang10ASTContext42NumImplicitCopyAssignmentOperatorsDeclaredE\", \"clang::ASTContext::NumImplicitCopyAssignmentOperatorsDeclared\"},\n    {\"_ZN5clang10ASTContext22NumImplicitDestructorsE\", \"clang::ASTContext::NumImplicitDestructors\"},\n    {\"_ZN5clang10ASTContext30NumImplicitDestructorsDeclaredE\", \"clang::ASTContext::NumImplicitDestructorsDeclared\"},\n    {\"_ZN4llvm3X8611GR8RegClassE\", \"llvm::X86::GR8RegClass\"},\n    {\"_ZN4llvm3X8618GR8_ABCD_LRegClassE\", \"llvm::X86::GR8_ABCD_LRegClass\"},\n    {\"_ZN4llvm3X8618GR8_ABCD_HRegClassE\", \"llvm::X86::GR8_ABCD_HRegClass\"},\n    {\"_ZN4llvm3X8612GR64RegClassE\", \"llvm::X86::GR64RegClass\"},\n    {\"_ZN4llvm3X8617GR64_ABCDRegClassE\", \"llvm::X86::GR64_ABCDRegClass\"},\n    {\"_ZN4llvm3X8618GR64_NOREXRegClassE\", \"llvm::X86::GR64_NOREXRegClass\"},\n    {\"_ZN4llvm3X8617GR64_NOSPRegClassE\", \"llvm::X86::GR64_NOSPRegClass\"},\n    {\"_ZN4llvm3X8623GR64_NOREX_NOSPRegClassE\", \"llvm::X86::GR64_NOREX_NOSPRegClass\"},\n    {\"_ZN4llvm3X8612GR32RegClassE\", \"llvm::X86::GR32RegClass\"},\n    {\"_ZN4llvm3X8617GR32_ABCDRegClassE\", \"llvm::X86::GR32_ABCDRegClass\"},\n    {\"_ZN4llvm3X8618GR32_NOREXRegClassE\", \"llvm::X86::GR32_NOREXRegClass\"},\n    {\"_ZN4llvm3X8617GR32_NOSPRegClassE\", \"llvm::X86::GR32_NOSPRegClass\"},\n    {\"_ZN4llvm3X8612GR16RegClassE\", \"llvm::X86::GR16RegClass\"},\n    {\"_ZN4llvm3X8617GR16_ABCDRegClassE\", \"llvm::X86::GR16_ABCDRegClass\"},\n    {\"_ZN4llvm3X8618GR16_NOREXRegClassE\", \"llvm::X86::GR16_NOREXRegClass\"},\n    {\"_ZN4llvm3X8617GR8_NOREXRegClassE\", \"llvm::X86::GR8_NOREXRegClass\"},\n    {\"_ZN4llvm3X8612FR32RegClassE\", \"llvm::X86::FR32RegClass\"},\n    {\"_ZN4llvm3X8612FR64RegClassE\", \"llvm::X86::FR64RegClass\"},\n    {\"_ZN4llvm3X8613VR128RegClassE\", \"llvm::X86::VR128RegClass\"},\n    {\"_ZN4llvm3X8618GR64_TCW64RegClassE\", \"llvm::X86::GR64_TCW64RegClass\"},\n    {\"_ZN4llvm3X8615GR64_TCRegClassE\", \"llvm::X86::GR64_TCRegClass\"},\n    {\"_ZN4llvm3X8615GR32_TCRegClassE\", \"llvm::X86::GR32_TCRegClass\"},\n    {\"_ZN4llvm3X8611CCRRegClassE\", \"llvm::X86::CCRRegClass\"},\n    {\"_ZN4llvm3X8619CONTROL_REGRegClassE\", \"llvm::X86::CONTROL_REGRegClass\"},\n    {\"_ZN4llvm3X8617DEBUG_REGRegClassE\", \"llvm::X86::DEBUG_REGRegClass\"},\n    {\"_ZN4llvm3X8615GR32_ADRegClassE\", \"llvm::X86::GR32_ADRegClass\"},\n    {\"_ZN4llvm3X8613RFP32RegClassE\", \"llvm::X86::RFP32RegClass\"},\n    {\"_ZN4llvm3X8613RFP64RegClassE\", \"llvm::X86::RFP64RegClass\"},\n    {\"_ZN4llvm3X8613RFP80RegClassE\", \"llvm::X86::RFP80RegClass\"},\n    {\"_ZN4llvm3X8611RSTRegClassE\", \"llvm::X86::RSTRegClass\"},\n    {\"_ZN4llvm3X8619SEGMENT_REGRegClassE\", \"llvm::X86::SEGMENT_REGRegClass\"},\n    {\"_ZN4llvm3X8613VR256RegClassE\", \"llvm::X86::VR256RegClass\"},\n    {\"_ZN4llvm3X8612VR64RegClassE\", \"llvm::X86::VR64RegClass\"},\n    {\"_ZN4llvm3ARM13SPR_8RegClassE\", \"llvm::ARM::SPR_8RegClass\"},\n    {\"_ZN4llvm3ARM13DPR_8RegClassE\", \"llvm::ARM::DPR_8RegClass\"},\n    {\"_ZN4llvm3ARM16DPR_VFP2RegClassE\", \"llvm::ARM::DPR_VFP2RegClass\"},\n    {\"_ZN4llvm3ARM13QPR_8RegClassE\", \"llvm::ARM::QPR_8RegClass\"},\n    {\"_ZN4llvm3ARM16QPR_VFP2RegClassE\", \"llvm::ARM::QPR_VFP2RegClass\"},\n    {\"_ZN4llvm3ARM17QQPR_VFP2RegClassE\", \"llvm::ARM::QQPR_VFP2RegClass\"},\n    {\"_ZN4llvm3ARM11DPRRegClassE\", \"llvm::ARM::DPRRegClass\"},\n    {\"_ZN4llvm3ARM11QPRRegClassE\", \"llvm::ARM::QPRRegClass\"},\n    {\"_ZN4llvm3ARM11CCRRegClassE\", \"llvm::ARM::CCRRegClass\"},\n    {\"_ZN4llvm3ARM11GPRRegClassE\", \"llvm::ARM::GPRRegClass\"},\n    {\"_ZN4llvm3ARM12QQPRRegClassE\", \"llvm::ARM::QQPRRegClass\"},\n    {\"_ZN4llvm3ARM14QQQQPRRegClassE\", \"llvm::ARM::QQQQPRRegClass\"},\n    {\"_ZN4llvm3ARM11SPRRegClassE\", \"llvm::ARM::SPRRegClass\"},\n    {\"_ZN4llvm3ARM12rGPRRegClassE\", \"llvm::ARM::rGPRRegClass\"},\n    {\"_ZN4llvm3ARM12tGPRRegClassE\", \"llvm::ARM::tGPRRegClass\"},\n    {\"_ZN4llvm3ARM13tcGPRRegClassE\", \"llvm::ARM::tcGPRRegClass\"},\n    {\"_ZN4llvm17RegisterScheduler8RegistryE\", \"llvm::RegisterScheduler::Registry\"},\n    {\"_ZN4llvm16SelectionDAGISel2IDE\", \"llvm::SelectionDAGISel::ID\"},\n    {\"_ZN4llvm10AsmPrinter2IDE\", \"llvm::AsmPrinter::ID\"},\n    {\"_ZN4llvm21CalculateSpillWeights2IDE\", \"llvm::CalculateSpillWeights::ID\"},\n    {\"_ZN4llvm11EdgeBundles2IDE\", \"llvm::EdgeBundles::ID\"},\n    {\"_ZN4llvm12GCModuleInfo2IDE\", \"llvm::GCModuleInfo::ID\"},\n    {\"_ZN4llvm14EnableFastISelE\", \"llvm::EnableFastISel\"},\n    {\"_ZN4llvm18LiveDebugVariables2IDE\", \"llvm::LiveDebugVariables::ID\"},\n    {\"_ZN4llvm13LiveIntervals2IDE\", \"llvm::LiveIntervals::ID\"},\n    {\"_ZN4llvm10LiveStacks2IDE\", \"llvm::LiveStacks::ID\"},\n    {\"_ZN4llvm13LiveVariables2IDE\", \"llvm::LiveVariables::ID\"},\n    {\"_ZN4llvm20MachineDominatorTree2IDE\", \"llvm::MachineDominatorTree::ID\"},\n    {\"_ZN4llvm23MachineFunctionAnalysis2IDE\", \"llvm::MachineFunctionAnalysis::ID\"},\n    {\"_ZN4llvm15MachineLoopInfo2IDE\", \"llvm::MachineLoopInfo::ID\"},\n    {\"_ZN4llvm17MachineModuleInfo2IDE\", \"llvm::MachineModuleInfo::ID\"},\n    {\"_ZN4llvm16RegisterRegAlloc8RegistryE\", \"llvm::RegisterRegAlloc::Registry\"},\n    {\"_ZN4llvm19ProcessImplicitDefs2IDE\", \"llvm::ProcessImplicitDefs::ID\"},\n    {\"_ZN4llvm3PEI2IDE\", \"llvm::PEI::ID\"},\n    {\"_ZN4llvm17RegisterCoalescer2IDE\", \"llvm::RegisterCoalescer::ID\"},\n    {\"_ZN4llvm24SimpleRegisterCoalescing2IDE\", \"llvm::SimpleRegisterCoalescing::ID\"},\n    {\"_ZN4llvm11SlotIndexes2IDE\", \"llvm::SlotIndexes::ID\"},\n    {\"_ZN4llvm10VirtRegMap2IDE\", \"llvm::VirtRegMap::ID\"},\n    {\"_ZN4llvm12InstCombiner2IDE\", \"llvm::InstCombiner::ID\"},\n    {\"_ZN4llvm22UnifyFunctionExitNodes2IDE\", \"llvm::UnifyFunctionExitNodes::ID\"},\n    {\"_ZN4llvm9CallGraph2IDE\", \"llvm::CallGraph::ID\"},\n    {\"_ZN4llvm13FindUsedTypes2IDE\", \"llvm::FindUsedTypes::ID\"},\n    {\"_ZN4llvm13AliasAnalysis2IDE\", \"llvm::AliasAnalysis::ID\"},\n    {\"_ZN4llvm7IVUsers2IDE\", \"llvm::IVUsers::ID\"},\n    {\"_ZN4llvm13LazyValueInfo2IDE\", \"llvm::LazyValueInfo::ID\"},\n    {\"_ZN4llvm8LoopInfo2IDE\", \"llvm::LoopInfo::ID\"},\n    {\"_ZN4llvm13LPPassManager2IDE\", \"llvm::LPPassManager::ID\"},\n    {\"_ZN4llvm24MemoryDependenceAnalysis2IDE\", \"llvm::MemoryDependenceAnalysis::ID\"},\n    {\"_ZN4llvm12ProfileInfoTINS_8FunctionENS_10BasicBlockEE2IDE\", \"llvm::ProfileInfoT<llvm::Function, llvm::BasicBlock>::ID\"},\n    {\"_ZN4llvm12ProfileInfoTINS_15MachineFunctionENS_17MachineBasicBlockEE2IDE\", \"llvm::ProfileInfoT<llvm::MachineFunction, llvm::MachineBasicBlock>::ID\"},\n    {\"_ZN4llvm15ScalarEvolution2IDE\", \"llvm::ScalarEvolution::ID\"},\n    {\"_ZN4llvm10DataLayout2IDE\", \"llvm::DataLayout::ID\"},\n    {\"_ZN4llvm10DataLayout20InvalidAlignmentElemE\", \"llvm::DataLayout::InvalidAlignmentElem\"},\n    {\"_ZN4llvm22LessPreciseFPMADOptionE\", \"llvm::LessPreciseFPMADOption\"},\n    {\"_ZN4llvm16PrintMachineCodeE\", \"llvm::PrintMachineCode\"},\n    {\"_ZN4llvm18NoFramePointerElimE\", \"llvm::NoFramePointerElim\"},\n    {\"_ZN4llvm25NoFramePointerElimNonLeafE\", \"llvm::NoFramePointerElimNonLeaf\"},\n    {\"_ZN4llvm19NoExcessFPPrecisionE\", \"llvm::NoExcessFPPrecision\"},\n    {\"_ZN4llvm12UnsafeFPMathE\", \"llvm::UnsafeFPMath\"},\n    {\"_ZN4llvm12NoInfsFPMathE\", \"llvm::NoInfsFPMath\"},\n    {\"_ZN4llvm12NoNaNsFPMathE\", \"llvm::NoNaNsFPMath\"},\n    {\"_ZN4llvm38HonorSignDependentRoundingFPMathOptionE\", \"llvm::HonorSignDependentRoundingFPMathOption\"},\n    {\"_ZN4llvm12UseSoftFloatE\", \"llvm::UseSoftFloat\"},\n    {\"_ZN4llvm12FloatABITypeE\", \"llvm::FloatABIType\"},\n    {\"_ZN4llvm15NoImplicitFloatE\", \"llvm::NoImplicitFloat\"},\n    {\"_ZN4llvm12NoZerosInBSSE\", \"llvm::NoZerosInBSS\"},\n    {\"_ZN4llvm20JITExceptionHandlingE\", \"llvm::JITExceptionHandling\"},\n    {\"_ZN4llvm16JITEmitDebugInfoE\", \"llvm::JITEmitDebugInfo\"},\n    {\"_ZN4llvm22JITEmitDebugInfoToDiskE\", \"llvm::JITEmitDebugInfoToDisk\"},\n    {\"_ZN4llvm21UnwindTablesMandatoryE\", \"llvm::UnwindTablesMandatory\"},\n    {\"_ZN4llvm15RelocationModelE\", \"llvm::RelocationModel\"},\n    {\"_ZN4llvm7CMModelE\", \"llvm::CMModel\"},\n    {\"_ZN4llvm21GuaranteedTailCallOptE\", \"llvm::GuaranteedTailCallOpt\"},\n    {\"_ZN4llvm14StackAlignmentE\", \"llvm::StackAlignment\"},\n    {\"_ZN4llvm12RealignStackE\", \"llvm::RealignStack\"},\n    {\"_ZN4llvm17DisableJumpTablesE\", \"llvm::DisableJumpTables\"},\n    {\"_ZN4llvm13StrongPHIElimE\", \"llvm::StrongPHIElim\"},\n    {\"_ZN4llvm19AsmVerbosityDefaultE\", \"llvm::AsmVerbosityDefault\"},\n    {\"_ZN4llvm13DominatorTree2IDE\", \"llvm::DominatorTree::ID\"},\n    {\"_ZN4llvm23FunctionPassManagerImpl2IDE\", \"llvm::FunctionPassManagerImpl::ID\"},\n    {\"_ZN4llvm13MPPassManager2IDE\", \"llvm::MPPassManager::ID\"},\n    {\"_ZN4llvm15PassManagerImpl2IDE\", \"llvm::PassManagerImpl::ID\"},\n    {\"_ZN4llvm13FPPassManager2IDE\", \"llvm::FPPassManager::ID\"},\n    {\"_ZN4llvm19TimePassesIsEnabledE\", \"llvm::TimePassesIsEnabled\"},\n    {\"_ZN4llvm16BumpPtrAllocator20DefaultSlabAllocatorE\", \"llvm::BumpPtrAllocator::DefaultSlabAllocator\"},\n    {\"_ZN4llvm20EnableDebugBufferingE\", \"llvm::EnableDebugBuffering\"},\n    {\"_ZN4llvm23DisablePrettyStackTraceE\", \"llvm::DisablePrettyStackTrace\"},\n    {\"_ZN4llvm3sys9TimeValue8ZeroTimeE\", \"llvm::sys::TimeValue::ZeroTime\"},\n    {\"_ZNKSs13find_first_ofEPKcmm\", \"std::string::find_first_of(char const*, unsigned long, unsigned long) const\"},\n    {\"_ZNKSs4copyEPcmm\", \"std::string::copy(char*, unsigned long, unsigned long) const\"},\n    {\"_ZNKSs4findEPKcmm\", \"std::string::find(char const*, unsigned long, unsigned long) const\"},\n    {\"_ZNKSs4findEcm\", \"std::string::find(char, unsigned long) const\"},\n    {\"_ZNKSs5rfindEPKcmm\", \"std::string::rfind(char const*, unsigned long, unsigned long) const\"},\n    {\"_ZNKSs5rfindEcm\", \"std::string::rfind(char, unsigned long) const\"},\n    {\"_ZNKSs7compareEPKc\", \"std::string::compare(char const*) const\"},\n    {\"_ZNKSs7compareEmmPKc\", \"std::string::compare(unsigned long, unsigned long, char const*) const\"},\n    {\"_ZNKSs7compareEmmPKcm\", \"std::string::compare(unsigned long, unsigned long, char const*, unsigned long) const\"},\n    {\"_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc\", \"std::basic_ios<char, std::char_traits<char> >::widen(char) const\"},\n    {\"_ZNSo3putEc\", \"std::ostream::put(char)\"},\n    {\"_ZNSo5flushEv\", \"std::ostream::flush()\"},\n    {\"_ZNSs12_M_leak_hardEv\", \"std::string::_M_leak_hard()\"},\n    {\"_ZNSs14_M_replace_auxEmmmc\", \"std::string::_M_replace_aux(unsigned long, unsigned long, unsigned long, char)\"},\n    {\"_ZNSs4_Rep10_M_destroyERKSaIcE\", \"std::string::_Rep::_M_destroy(std::allocator<char> const&)\"},\n    {\"_ZNSs4_Rep11_S_terminalE\", \"std::string::_Rep::_S_terminal\"},\n    {\"_ZNSs4_Rep20_S_empty_rep_storageE\", \"std::string::_Rep::_S_empty_rep_storage\"},\n    {\"_ZNSs4_Rep9_S_createEmmRKSaIcE\", \"std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)\"},\n    {\"_ZNSs4swapERSs\", \"std::string::swap(std::string&)\"},\n    {\"_ZNSs6appendEPKcm\", \"std::string::append(char const*, unsigned long)\"},\n    {\"_ZNSs6appendERKSs\", \"std::string::append(std::string const&)\"},\n    {\"_ZNSs6appendEmc\", \"std::string::append(unsigned long, char)\"},\n    {\"_ZNSs6assignEPKcm\", \"std::string::assign(char const*, unsigned long)\"},\n    {\"_ZNSs6assignERKSs\", \"std::string::assign(std::string const&)\"},\n    {\"_ZNSs6resizeEmc\", \"std::string::resize(unsigned long, char)\"},\n    {\"_ZNSs7replaceEmmPKcm\", \"std::string::replace(unsigned long, unsigned long, char const*, unsigned long)\"},\n    {\"_ZNSs7reserveEm\", \"std::string::reserve(unsigned long)\"},\n    {\"_ZNSs9_M_mutateEmmm\", \"std::string::_M_mutate(unsigned long, unsigned long, unsigned long)\"},\n    {\"_ZNSsC1EPKcRKSaIcE\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)\"},\n    {\"_ZNSsC1EPKcmRKSaIcE\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned long, std::allocator<char> const&)\"},\n    {\"_ZNSsC1ERKSs\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)\"},\n    {\"_ZNSsC1ERKSsmm\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&, unsigned long, unsigned long)\"},\n    {\"_ZNSsC1EmcRKSaIcE\", \"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(unsigned long, char, std::allocator<char> const&)\"},\n    {\"_ZNSsixEm\", \"std::string::operator[](unsigned long)\"},\n    {\"_ZNSspLEPKc\", \"std::string::operator+=(char const*)\"},\n    {\"_ZNSspLEc\", \"std::string::operator+=(char)\"},\n    {\"_ZNSt15_List_node_base4hookEPS_\", \"std::_List_node_base::hook(std::_List_node_base*)\"},\n    {\"_ZNSt15_List_node_base4swapERS_S0_\", \"std::_List_node_base::swap(std::_List_node_base&, std::_List_node_base&)\"},\n    {\"_ZNSt15_List_node_base6unhookEv\", \"std::_List_node_base::unhook()\"},\n    {\"_ZNSt8ios_base4InitC1Ev\", \"std::ios_base::Init::Init()\"},\n    {\"_ZNSt8ios_base4InitD1Ev\", \"std::ios_base::Init::~Init()\"},\n    {\"_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l\", \"std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)\"},\n    {\"_ZSt17__throw_bad_allocv\", \"std::__throw_bad_alloc()\"},\n    {\"_ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base\", \"std::_Rb_tree_decrement(std::_Rb_tree_node_base const*)\"},\n    {\"_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base\", \"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)\"},\n    {\"_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base\", \"std::_Rb_tree_increment(std::_Rb_tree_node_base const*)\"},\n    {\"_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base\", \"std::_Rb_tree_increment(std::_Rb_tree_node_base*)\"},\n    {\"_ZSt19__throw_logic_errorPKc\", \"std::__throw_logic_error(char const*)\"},\n    {\"_ZSt20__throw_length_errorPKc\", \"std::__throw_length_error(char const*)\"},\n    {\"_ZSt20__throw_out_of_rangePKc\", \"std::__throw_out_of_range(char const*)\"},\n    {\"_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_\", \"std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)\"},\n    {\"_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_\", \"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)\"},\n    {\"_ZSt4cout\", \"std::cout\"},\n    {\"_ZSt7nothrow\", \"std::nothrow\"},\n    {\"_ZTVN10__cxxabiv117__class_type_infoE\", \"vtable for __cxxabiv1::__class_type_info\"},\n    {\"_ZTVN10__cxxabiv120__si_class_type_infoE\", \"vtable for __cxxabiv1::__si_class_type_info\"},\n    {\"_ZTVN10__cxxabiv121__vmi_class_type_infoE\", \"vtable for __cxxabiv1::__vmi_class_type_info\"},\n    {\"_ZdaPv\", \"operator delete[](void*)\"},\n    {\"_ZdlPv\", \"operator delete(void*)\"},\n    {\"_ZdlPvRKSt9nothrow_t\", \"operator delete(void*, std::nothrow_t const&)\"},\n    {\"_Znam\", \"operator new[](unsigned long)\"},\n    {\"_Znwm\", \"operator new(unsigned long)\"},\n    {\"_ZnwmRKSt9nothrow_t\", \"operator new(unsigned long, std::nothrow_t const&)\"},\n\n    // The following pairs are not supported by gcc's __cxa_demangle\n\n    {\"_ZStL8__ioinit\", \"std::__ioinit\"},\n    {\"_ZL4NaNU\", \"NaNU\"},\n    {\"_ZL4NaNL\", \"NaNL\"},\n    {\"_ZL8CharInfo\", \"CharInfo\"},\n    {\"_ZL13DiagSubGroup0\", \"DiagSubGroup0\"},\n    {\"_ZL10DiagArray1\", \"DiagArray1\"},\n    {\"_ZL10DiagArray2\", \"DiagArray2\"},\n    {\"_ZL10DiagArray5\", \"DiagArray5\"},\n    {\"_ZL13DiagSubGroup7\", \"DiagSubGroup7\"},\n    {\"_ZL10DiagArray8\", \"DiagArray8\"},\n    {\"_ZL13DiagSubGroup9\", \"DiagSubGroup9\"},\n    {\"_ZL11DiagArray12\", \"DiagArray12\"},\n    {\"_ZL11DiagArray13\", \"DiagArray13\"},\n    {\"_ZL11DiagArray14\", \"DiagArray14\"},\n    {\"_ZL11DiagArray15\", \"DiagArray15\"},\n    {\"_ZL11DiagArray16\", \"DiagArray16\"},\n    {\"_ZL11DiagArray17\", \"DiagArray17\"},\n    {\"_ZL14DiagSubGroup17\", \"DiagSubGroup17\"},\n    {\"_ZL11DiagArray18\", \"DiagArray18\"},\n    {\"_ZL11DiagArray19\", \"DiagArray19\"},\n    {\"_ZL11DiagArray22\", \"DiagArray22\"},\n    {\"_ZL11DiagArray23\", \"DiagArray23\"},\n    {\"_ZL14DiagSubGroup24\", \"DiagSubGroup24\"},\n    {\"_ZL11DiagArray25\", \"DiagArray25\"},\n    {\"_ZL11DiagArray26\", \"DiagArray26\"},\n    {\"_ZL11DiagArray27\", \"DiagArray27\"},\n    {\"_ZL14DiagSubGroup27\", \"DiagSubGroup27\"},\n    {\"_ZL11DiagArray29\", \"DiagArray29\"},\n    {\"_ZL11DiagArray30\", \"DiagArray30\"},\n    {\"_ZL11DiagArray31\", \"DiagArray31\"},\n    {\"_ZL14DiagSubGroup31\", \"DiagSubGroup31\"},\n    {\"_ZL11DiagArray32\", \"DiagArray32\"},\n    {\"_ZL11DiagArray33\", \"DiagArray33\"},\n    {\"_ZL11DiagArray38\", \"DiagArray38\"},\n    {\"_ZL14DiagSubGroup39\", \"DiagSubGroup39\"},\n    {\"_ZL14DiagSubGroup40\", \"DiagSubGroup40\"},\n    {\"_ZL11DiagArray41\", \"DiagArray41\"},\n    {\"_ZL11DiagArray42\", \"DiagArray42\"},\n    {\"_ZL11DiagArray43\", \"DiagArray43\"},\n    {\"_ZL14DiagSubGroup43\", \"DiagSubGroup43\"},\n    {\"_ZL11DiagArray44\", \"DiagArray44\"},\n    {\"_ZL11DiagArray45\", \"DiagArray45\"},\n    {\"_ZL14DiagSubGroup45\", \"DiagSubGroup45\"},\n    {\"_ZL11DiagArray46\", \"DiagArray46\"},\n    {\"_ZL14DiagSubGroup46\", \"DiagSubGroup46\"},\n    {\"_ZL14DiagSubGroup47\", \"DiagSubGroup47\"},\n    {\"_ZL11DiagArray48\", \"DiagArray48\"},\n    {\"_ZL14DiagSubGroup49\", \"DiagSubGroup49\"},\n    {\"_ZL11DiagArray50\", \"DiagArray50\"},\n    {\"_ZL11DiagArray51\", \"DiagArray51\"},\n    {\"_ZL11DiagArray52\", \"DiagArray52\"},\n    {\"_ZL14DiagSubGroup52\", \"DiagSubGroup52\"},\n    {\"_ZL11DiagArray53\", \"DiagArray53\"},\n    {\"_ZL11DiagArray54\", \"DiagArray54\"},\n    {\"_ZL11DiagArray55\", \"DiagArray55\"},\n    {\"_ZL14DiagSubGroup56\", \"DiagSubGroup56\"},\n    {\"_ZL11DiagArray57\", \"DiagArray57\"},\n    {\"_ZL11DiagArray58\", \"DiagArray58\"},\n    {\"_ZL11DiagArray59\", \"DiagArray59\"},\n    {\"_ZL11DiagArray62\", \"DiagArray62\"},\n    {\"_ZL11DiagArray65\", \"DiagArray65\"},\n    {\"_ZL11DiagArray66\", \"DiagArray66\"},\n    {\"_ZL11DiagArray68\", \"DiagArray68\"},\n    {\"_ZL11DiagArray69\", \"DiagArray69\"},\n    {\"_ZL11DiagArray70\", \"DiagArray70\"},\n    {\"_ZL11DiagArray71\", \"DiagArray71\"},\n    {\"_ZL11DiagArray72\", \"DiagArray72\"},\n    {\"_ZL11DiagArray73\", \"DiagArray73\"},\n    {\"_ZL11DiagArray75\", \"DiagArray75\"},\n    {\"_ZL11DiagArray76\", \"DiagArray76\"},\n    {\"_ZL11DiagArray77\", \"DiagArray77\"},\n    {\"_ZL11DiagArray78\", \"DiagArray78\"},\n    {\"_ZL11DiagArray79\", \"DiagArray79\"},\n    {\"_ZL11DiagArray80\", \"DiagArray80\"},\n    {\"_ZL11DiagArray83\", \"DiagArray83\"},\n    {\"_ZL11DiagArray84\", \"DiagArray84\"},\n    {\"_ZL14DiagSubGroup85\", \"DiagSubGroup85\"},\n    {\"_ZL11DiagArray86\", \"DiagArray86\"},\n    {\"_ZL14DiagSubGroup89\", \"DiagSubGroup89\"},\n    {\"_ZL11DiagArray90\", \"DiagArray90\"},\n    {\"_ZL11DiagArray91\", \"DiagArray91\"},\n    {\"_ZL11DiagArray92\", \"DiagArray92\"},\n    {\"_ZL11DiagArray93\", \"DiagArray93\"},\n    {\"_ZL11DiagArray95\", \"DiagArray95\"},\n    {\"_ZL11DiagArray98\", \"DiagArray98\"},\n    {\"_ZL12DiagArray100\", \"DiagArray100\"},\n    {\"_ZL12DiagArray101\", \"DiagArray101\"},\n    {\"_ZL12DiagArray102\", \"DiagArray102\"},\n    {\"_ZL12DiagArray103\", \"DiagArray103\"},\n    {\"_ZL12DiagArray104\", \"DiagArray104\"},\n    {\"_ZL15DiagSubGroup104\", \"DiagSubGroup104\"},\n    {\"_ZL12DiagArray105\", \"DiagArray105\"},\n    {\"_ZL12DiagArray106\", \"DiagArray106\"},\n    {\"_ZL12DiagArray108\", \"DiagArray108\"},\n    {\"_ZL12DiagArray109\", \"DiagArray109\"},\n    {\"_ZL12DiagArray111\", \"DiagArray111\"},\n    {\"_ZL12DiagArray112\", \"DiagArray112\"},\n    {\"_ZL12DiagArray113\", \"DiagArray113\"},\n    {\"_ZL12DiagArray114\", \"DiagArray114\"},\n    {\"_ZL12DiagArray115\", \"DiagArray115\"},\n    {\"_ZL12DiagArray117\", \"DiagArray117\"},\n    {\"_ZL12DiagArray118\", \"DiagArray118\"},\n    {\"_ZL12DiagArray119\", \"DiagArray119\"},\n    {\"_ZL12DiagArray134\", \"DiagArray134\"},\n    {\"_ZL12DiagArray135\", \"DiagArray135\"},\n    {\"_ZL12DiagArray136\", \"DiagArray136\"},\n    {\"_ZL15DiagSubGroup136\", \"DiagSubGroup136\"},\n    {\"_ZL12DiagArray138\", \"DiagArray138\"},\n    {\"_ZL12DiagArray140\", \"DiagArray140\"},\n    {\"_ZL12DiagArray141\", \"DiagArray141\"},\n    {\"_ZL12DiagArray143\", \"DiagArray143\"},\n    {\"_ZL12DiagArray144\", \"DiagArray144\"},\n    {\"_ZL12DiagArray145\", \"DiagArray145\"},\n    {\"_ZL12DiagArray146\", \"DiagArray146\"},\n    {\"_ZL12DiagArray147\", \"DiagArray147\"},\n    {\"_ZL12DiagArray148\", \"DiagArray148\"},\n    {\"_ZL12DiagArray149\", \"DiagArray149\"},\n    {\"_ZL12DiagArray150\", \"DiagArray150\"},\n    {\"_ZL12DiagArray151\", \"DiagArray151\"},\n    {\"_ZL12DiagArray152\", \"DiagArray152\"},\n    {\"_ZL15DiagSubGroup153\", \"DiagSubGroup153\"},\n    {\"_ZL12DiagArray155\", \"DiagArray155\"},\n    {\"_ZL12DiagArray156\", \"DiagArray156\"},\n    {\"_ZL12DiagArray157\", \"DiagArray157\"},\n    {\"_ZL12DiagArray158\", \"DiagArray158\"},\n    {\"_ZL12DiagArray159\", \"DiagArray159\"},\n    {\"_ZL12DiagArray160\", \"DiagArray160\"},\n    {\"_ZL12DiagArray161\", \"DiagArray161\"},\n    {\"_ZL12DiagArray162\", \"DiagArray162\"},\n    {\"_ZL12DiagArray163\", \"DiagArray163\"},\n    {\"_ZL12DiagArray164\", \"DiagArray164\"},\n    {\"_ZL12DiagArray165\", \"DiagArray165\"},\n    {\"_ZL12DiagArray166\", \"DiagArray166\"},\n    {\"_ZL12DiagArray168\", \"DiagArray168\"},\n    {\"_ZN4llvmL13ImplicitList1E\", \"llvm::ImplicitList1\"},\n    {\"_ZN4llvmL13ImplicitList2E\", \"llvm::ImplicitList2\"},\n    {\"_ZN4llvmL13ImplicitList3E\", \"llvm::ImplicitList3\"},\n    {\"_ZN4llvmL13ImplicitList4E\", \"llvm::ImplicitList4\"},\n    {\"_ZN4llvmL13ImplicitList5E\", \"llvm::ImplicitList5\"},\n    {\"_ZN4llvmL13ImplicitList6E\", \"llvm::ImplicitList6\"},\n    {\"_ZN4llvmL13ImplicitList7E\", \"llvm::ImplicitList7\"},\n    {\"_ZN4llvmL13ImplicitList8E\", \"llvm::ImplicitList8\"},\n    {\"_ZN4llvmL13ImplicitList9E\", \"llvm::ImplicitList9\"},\n    {\"_ZN4llvmL14ImplicitList10E\", \"llvm::ImplicitList10\"},\n    {\"_ZN4llvmL14ImplicitList11E\", \"llvm::ImplicitList11\"},\n    {\"_ZN4llvmL14ImplicitList12E\", \"llvm::ImplicitList12\"},\n    {\"_ZN4llvmL14ImplicitList13E\", \"llvm::ImplicitList13\"},\n    {\"_ZN4llvmL14ImplicitList14E\", \"llvm::ImplicitList14\"},\n    {\"_ZN4llvmL14ImplicitList15E\", \"llvm::ImplicitList15\"},\n    {\"_ZN4llvmL14ImplicitList16E\", \"llvm::ImplicitList16\"},\n    {\"_ZN4llvmL14ImplicitList17E\", \"llvm::ImplicitList17\"},\n    {\"_ZN4llvmL14ImplicitList18E\", \"llvm::ImplicitList18\"},\n    {\"_ZN4llvmL14ImplicitList19E\", \"llvm::ImplicitList19\"},\n    {\"_ZN4llvmL14ImplicitList20E\", \"llvm::ImplicitList20\"},\n    {\"_ZN4llvmL14ImplicitList21E\", \"llvm::ImplicitList21\"},\n    {\"_ZN4llvmL14ImplicitList22E\", \"llvm::ImplicitList22\"},\n    {\"_ZN4llvmL14ImplicitList23E\", \"llvm::ImplicitList23\"},\n    {\"_ZN4llvmL14ImplicitList24E\", \"llvm::ImplicitList24\"},\n    {\"_ZN4llvmL14ImplicitList25E\", \"llvm::ImplicitList25\"},\n    {\"_ZN4llvmL14ImplicitList26E\", \"llvm::ImplicitList26\"},\n    {\"_ZN4llvmL14ImplicitList27E\", \"llvm::ImplicitList27\"},\n    {\"_ZN4llvmL14ImplicitList28E\", \"llvm::ImplicitList28\"},\n    {\"_ZN4llvmL14ImplicitList29E\", \"llvm::ImplicitList29\"},\n    {\"_ZN4llvmL14ImplicitList30E\", \"llvm::ImplicitList30\"},\n    {\"_ZN4llvmL14ImplicitList31E\", \"llvm::ImplicitList31\"},\n    {\"_ZN4llvmL14ImplicitList32E\", \"llvm::ImplicitList32\"},\n    {\"_ZN4llvmL14ImplicitList33E\", \"llvm::ImplicitList33\"},\n    {\"_ZN4llvmL14ImplicitList34E\", \"llvm::ImplicitList34\"},\n    {\"_ZN4llvmL14ImplicitList35E\", \"llvm::ImplicitList35\"},\n    {\"_ZN4llvmL14ImplicitList36E\", \"llvm::ImplicitList36\"},\n    {\"_ZN4llvmL14ImplicitList37E\", \"llvm::ImplicitList37\"},\n    {\"_ZN4llvmL14ImplicitList38E\", \"llvm::ImplicitList38\"},\n    {\"_ZN4llvmL14ImplicitList39E\", \"llvm::ImplicitList39\"},\n    {\"_ZN4llvmL14ImplicitList40E\", \"llvm::ImplicitList40\"},\n    {\"_ZN4llvmL14ImplicitList41E\", \"llvm::ImplicitList41\"},\n    {\"_ZN4llvmL14ImplicitList42E\", \"llvm::ImplicitList42\"},\n    {\"_ZN4llvmL14ImplicitList43E\", \"llvm::ImplicitList43\"},\n    {\"_ZN4llvmL14ImplicitList44E\", \"llvm::ImplicitList44\"},\n    {\"_ZN4llvmL14ImplicitList45E\", \"llvm::ImplicitList45\"},\n    {\"_ZN4llvmL14ImplicitList46E\", \"llvm::ImplicitList46\"},\n    {\"_ZN4llvmL14ImplicitList47E\", \"llvm::ImplicitList47\"},\n    {\"_ZN4llvmL14ImplicitList48E\", \"llvm::ImplicitList48\"},\n    {\"_ZN4llvmL14ImplicitList49E\", \"llvm::ImplicitList49\"},\n    {\"_ZN4llvmL14ImplicitList50E\", \"llvm::ImplicitList50\"},\n    {\"_ZN4llvmL14ImplicitList51E\", \"llvm::ImplicitList51\"},\n    {\"_ZN4llvmL14ImplicitList52E\", \"llvm::ImplicitList52\"},\n    {\"_ZN4llvmL14ImplicitList53E\", \"llvm::ImplicitList53\"},\n    {\"_ZN4llvmL14ImplicitList54E\", \"llvm::ImplicitList54\"},\n    {\"_ZN4llvmL14ImplicitList55E\", \"llvm::ImplicitList55\"},\n    {\"_ZN4llvmL14ImplicitList56E\", \"llvm::ImplicitList56\"},\n    {\"_ZN4llvmL14ImplicitList57E\", \"llvm::ImplicitList57\"},\n    {\"_ZN4llvmL14ImplicitList58E\", \"llvm::ImplicitList58\"},\n    {\"_ZN4llvmL14ImplicitList59E\", \"llvm::ImplicitList59\"},\n    {\"_ZN4llvmL14ImplicitList60E\", \"llvm::ImplicitList60\"},\n    {\"_ZN4llvmL14ImplicitList61E\", \"llvm::ImplicitList61\"},\n    {\"_ZN4llvmL14ImplicitList62E\", \"llvm::ImplicitList62\"},\n    {\"_ZN4llvmL14ImplicitList63E\", \"llvm::ImplicitList63\"},\n    {\"_ZN4llvmL14ImplicitList64E\", \"llvm::ImplicitList64\"},\n    {\"_ZN4llvmL14ImplicitList65E\", \"llvm::ImplicitList65\"},\n    {\"_ZL17ReplaceableInstrs\", \"ReplaceableInstrs\"},\n    {\"_ZN4llvm3X86L18CCRSuperRegClassesE\", \"llvm::X86::CCRSuperRegClasses\"},\n    {\"_ZN4llvm3X86L26CONTROL_REGSuperRegClassesE\", \"llvm::X86::CONTROL_REGSuperRegClasses\"},\n    {\"_ZN4llvm3X86L24DEBUG_REGSuperRegClassesE\", \"llvm::X86::DEBUG_REGSuperRegClasses\"},\n    {\"_ZN4llvm3X86L22GR32_ADSuperRegClassesE\", \"llvm::X86::GR32_ADSuperRegClasses\"},\n    {\"_ZN4llvm3X86L19GR64SuperRegClassesE\", \"llvm::X86::GR64SuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR64_ABCDSuperRegClassesE\", \"llvm::X86::GR64_ABCDSuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR64_NOREXSuperRegClassesE\", \"llvm::X86::GR64_NOREXSuperRegClasses\"},\n    {\"_ZN4llvm3X86L30GR64_NOREX_NOSPSuperRegClassesE\", \"llvm::X86::GR64_NOREX_NOSPSuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR64_NOSPSuperRegClassesE\", \"llvm::X86::GR64_NOSPSuperRegClasses\"},\n    {\"_ZN4llvm3X86L22GR64_TCSuperRegClassesE\", \"llvm::X86::GR64_TCSuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR64_TCW64SuperRegClassesE\", \"llvm::X86::GR64_TCW64SuperRegClasses\"},\n    {\"_ZN4llvm3X86L20RFP32SuperRegClassesE\", \"llvm::X86::RFP32SuperRegClasses\"},\n    {\"_ZN4llvm3X86L20RFP64SuperRegClassesE\", \"llvm::X86::RFP64SuperRegClasses\"},\n    {\"_ZN4llvm3X86L20RFP80SuperRegClassesE\", \"llvm::X86::RFP80SuperRegClasses\"},\n    {\"_ZN4llvm3X86L18RSTSuperRegClassesE\", \"llvm::X86::RSTSuperRegClasses\"},\n    {\"_ZN4llvm3X86L26SEGMENT_REGSuperRegClassesE\", \"llvm::X86::SEGMENT_REGSuperRegClasses\"},\n    {\"_ZN4llvm3X86L20VR256SuperRegClassesE\", \"llvm::X86::VR256SuperRegClasses\"},\n    {\"_ZN4llvm3X86L19VR64SuperRegClassesE\", \"llvm::X86::VR64SuperRegClasses\"},\n    {\"_ZN4llvm3X86L13CCRSubclassesE\", \"llvm::X86::CCRSubclasses\"},\n    {\"_ZN4llvm3X86L21CONTROL_REGSubclassesE\", \"llvm::X86::CONTROL_REGSubclasses\"},\n    {\"_ZN4llvm3X86L19DEBUG_REGSubclassesE\", \"llvm::X86::DEBUG_REGSubclasses\"},\n    {\"_ZN4llvm3X86L19GR16_ABCDSubclassesE\", \"llvm::X86::GR16_ABCDSubclasses\"},\n    {\"_ZN4llvm3X86L17GR32_ADSubclassesE\", \"llvm::X86::GR32_ADSubclasses\"},\n    {\"_ZN4llvm3X86L19GR64_ABCDSubclassesE\", \"llvm::X86::GR64_ABCDSubclasses\"},\n    {\"_ZN4llvm3X86L20GR64_TCW64SubclassesE\", \"llvm::X86::GR64_TCW64Subclasses\"},\n    {\"_ZN4llvm3X86L20GR8_ABCD_HSubclassesE\", \"llvm::X86::GR8_ABCD_HSubclasses\"},\n    {\"_ZN4llvm3X86L20GR8_ABCD_LSubclassesE\", \"llvm::X86::GR8_ABCD_LSubclasses\"},\n    {\"_ZN4llvm3X86L15RFP80SubclassesE\", \"llvm::X86::RFP80Subclasses\"},\n    {\"_ZN4llvm3X86L13RSTSubclassesE\", \"llvm::X86::RSTSubclasses\"},\n    {\"_ZN4llvm3X86L21SEGMENT_REGSubclassesE\", \"llvm::X86::SEGMENT_REGSubclasses\"},\n    {\"_ZN4llvm3X86L15VR128SubclassesE\", \"llvm::X86::VR128Subclasses\"},\n    {\"_ZN4llvm3X86L15VR256SubclassesE\", \"llvm::X86::VR256Subclasses\"},\n    {\"_ZN4llvm3X86L14VR64SubclassesE\", \"llvm::X86::VR64Subclasses\"},\n    {\"_ZN4llvm3X86L15CCRSuperclassesE\", \"llvm::X86::CCRSuperclasses\"},\n    {\"_ZN4llvm3X86L23CONTROL_REGSuperclassesE\", \"llvm::X86::CONTROL_REGSuperclasses\"},\n    {\"_ZN4llvm3X86L21DEBUG_REGSuperclassesE\", \"llvm::X86::DEBUG_REGSuperclasses\"},\n    {\"_ZN4llvm3X86L16FR32SuperclassesE\", \"llvm::X86::FR32Superclasses\"},\n    {\"_ZN4llvm3X86L16GR16SuperclassesE\", \"llvm::X86::GR16Superclasses\"},\n    {\"_ZN4llvm3X86L16GR32SuperclassesE\", \"llvm::X86::GR32Superclasses\"},\n    {\"_ZN4llvm3X86L16GR64SuperclassesE\", \"llvm::X86::GR64Superclasses\"},\n    {\"_ZN4llvm3X86L15GR8SuperclassesE\", \"llvm::X86::GR8Superclasses\"},\n    {\"_ZN4llvm3X86L17RFP32SuperclassesE\", \"llvm::X86::RFP32Superclasses\"},\n    {\"_ZN4llvm3X86L15RSTSuperclassesE\", \"llvm::X86::RSTSuperclasses\"},\n    {\"_ZN4llvm3X86L23SEGMENT_REGSuperclassesE\", \"llvm::X86::SEGMENT_REGSuperclasses\"},\n    {\"_ZN4llvm3X86L17VR256SuperclassesE\", \"llvm::X86::VR256Superclasses\"},\n    {\"_ZN4llvm3X86L16VR64SuperclassesE\", \"llvm::X86::VR64Superclasses\"},\n    {\"_ZN4llvm3X86L16CCRSubRegClassesE\", \"llvm::X86::CCRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3CCRE\", \"llvm::(anonymous namespace)::CCR\"},\n    {\"_ZN4llvm3X86L24CONTROL_REGSubRegClassesE\", \"llvm::X86::CONTROL_REGSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11CONTROL_REGE\", \"llvm::(anonymous namespace)::CONTROL_REG\"},\n    {\"_ZN4llvm3X86L22DEBUG_REGSubRegClassesE\", \"llvm::X86::DEBUG_REGSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9DEBUG_REGE\", \"llvm::(anonymous namespace)::DEBUG_REG\"},\n    {\"_ZN4llvm3X86L17FR32SubRegClassesE\", \"llvm::X86::FR32SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4FR32E\", \"llvm::(anonymous namespace)::FR32\"},\n    {\"_ZN4llvm3X86L17FR64SubRegClassesE\", \"llvm::X86::FR64SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4FR64E\", \"llvm::(anonymous namespace)::FR64\"},\n    {\"_ZN4llvm3X86L14X86_GR16_AO_64E\", \"llvm::X86::X86_GR16_AO_64\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4GR16E\", \"llvm::(anonymous namespace)::GR16\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR16_ABCDE\", \"llvm::(anonymous namespace)::GR16_ABCD\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR16_NOREXE\", \"llvm::(anonymous namespace)::GR16_NOREX\"},\n    {\"_ZN4llvm3X86L14X86_GR32_AO_64E\", \"llvm::X86::X86_GR32_AO_64\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4GR32E\", \"llvm::(anonymous namespace)::GR32\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR32_ABCDE\", \"llvm::(anonymous namespace)::GR32_ABCD\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR32_ADE\", \"llvm::(anonymous namespace)::GR32_AD\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR32_NOREXE\", \"llvm::(anonymous namespace)::GR32_NOREX\"},\n    {\"_ZN4llvm3X86L19X86_GR32_NOSP_AO_64E\", \"llvm::X86::X86_GR32_NOSP_AO_64\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR32_NOSPE\", \"llvm::(anonymous namespace)::GR32_NOSP\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR32_TCE\", \"llvm::(anonymous namespace)::GR32_TC\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4GR64E\", \"llvm::(anonymous namespace)::GR64\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR64_ABCDE\", \"llvm::(anonymous namespace)::GR64_ABCD\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR64_NOREXE\", \"llvm::(anonymous namespace)::GR64_NOREX\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15GR64_NOREX_NOSPE\", \"llvm::(anonymous namespace)::GR64_NOREX_NOSP\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR64_NOSPE\", \"llvm::(anonymous namespace)::GR64_NOSP\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR64_TCE\", \"llvm::(anonymous namespace)::GR64_TC\"},\n    {\"_ZN4llvm3X86L23GR64_TCW64SubRegClassesE\", \"llvm::X86::GR64_TCW64SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR64_TCW64E\", \"llvm::(anonymous namespace)::GR64_TCW64\"},\n    {\"_ZN4llvm3X86L13X86_GR8_AO_64E\", \"llvm::X86::X86_GR8_AO_64\"},\n    {\"_ZN4llvm3X86L16GR8SubRegClassesE\", \"llvm::X86::GR8SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3GR8E\", \"llvm::(anonymous namespace)::GR8\"},\n    {\"_ZN4llvm3X86L23GR8_ABCD_HSubRegClassesE\", \"llvm::X86::GR8_ABCD_HSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR8_ABCD_HE\", \"llvm::(anonymous namespace)::GR8_ABCD_H\"},\n    {\"_ZN4llvm3X86L23GR8_ABCD_LSubRegClassesE\", \"llvm::X86::GR8_ABCD_LSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR8_ABCD_LE\", \"llvm::(anonymous namespace)::GR8_ABCD_L\"},\n    {\"_ZN4llvm3X86L19X86_GR8_NOREX_AO_64E\", \"llvm::X86::X86_GR8_NOREX_AO_64\"},\n    {\"_ZN4llvm3X86L22GR8_NOREXSubRegClassesE\", \"llvm::X86::GR8_NOREXSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9GR8_NOREXE\", \"llvm::(anonymous namespace)::GR8_NOREX\"},\n    {\"_ZN4llvm3X86L18RFP32SubRegClassesE\", \"llvm::X86::RFP32SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5RFP32E\", \"llvm::(anonymous namespace)::RFP32\"},\n    {\"_ZN4llvm3X86L18RFP64SubRegClassesE\", \"llvm::X86::RFP64SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5RFP64E\", \"llvm::(anonymous namespace)::RFP64\"},\n    {\"_ZN4llvm3X86L18RFP80SubRegClassesE\", \"llvm::X86::RFP80SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5RFP80E\", \"llvm::(anonymous namespace)::RFP80\"},\n    {\"_ZN4llvm3X86L16RSTSubRegClassesE\", \"llvm::X86::RSTSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3RSTE\", \"llvm::(anonymous namespace)::RST\"},\n    {\"_ZN4llvm3X86L24SEGMENT_REGSubRegClassesE\", \"llvm::X86::SEGMENT_REGSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11SEGMENT_REGE\", \"llvm::(anonymous namespace)::SEGMENT_REG\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5VR128E\", \"llvm::(anonymous namespace)::VR128\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5VR256E\", \"llvm::(anonymous namespace)::VR256\"},\n    {\"_ZN4llvm3X86L17VR64SubRegClassesE\", \"llvm::X86::VR64SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4VR64E\", \"llvm::(anonymous namespace)::VR64\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15SubregHashTableE\", \"llvm::(anonymous namespace)::SubregHashTable\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16AliasesHashTableE\", \"llvm::(anonymous namespace)::AliasesHashTable\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11AH_OverlapsE\", \"llvm::(anonymous namespace)::AH_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Empty_SubRegsSetE\", \"llvm::(anonymous namespace)::Empty_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15AH_SuperRegsSetE\", \"llvm::(anonymous namespace)::AH_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11AL_OverlapsE\", \"llvm::(anonymous namespace)::AL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15AL_SuperRegsSetE\", \"llvm::(anonymous namespace)::AL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11AX_OverlapsE\", \"llvm::(anonymous namespace)::AX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13AX_SubRegsSetE\", \"llvm::(anonymous namespace)::AX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15AX_SuperRegsSetE\", \"llvm::(anonymous namespace)::AX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11BH_OverlapsE\", \"llvm::(anonymous namespace)::BH_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15BH_SuperRegsSetE\", \"llvm::(anonymous namespace)::BH_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11BL_OverlapsE\", \"llvm::(anonymous namespace)::BL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15BL_SuperRegsSetE\", \"llvm::(anonymous namespace)::BL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11BP_OverlapsE\", \"llvm::(anonymous namespace)::BP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13BP_SubRegsSetE\", \"llvm::(anonymous namespace)::BP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15BP_SuperRegsSetE\", \"llvm::(anonymous namespace)::BP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12BPL_OverlapsE\", \"llvm::(anonymous namespace)::BPL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16BPL_SuperRegsSetE\", \"llvm::(anonymous namespace)::BPL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11BX_OverlapsE\", \"llvm::(anonymous namespace)::BX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13BX_SubRegsSetE\", \"llvm::(anonymous namespace)::BX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15BX_SuperRegsSetE\", \"llvm::(anonymous namespace)::BX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11CH_OverlapsE\", \"llvm::(anonymous namespace)::CH_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15CH_SuperRegsSetE\", \"llvm::(anonymous namespace)::CH_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11CL_OverlapsE\", \"llvm::(anonymous namespace)::CL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15CL_SuperRegsSetE\", \"llvm::(anonymous namespace)::CL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR0_OverlapsE\", \"llvm::(anonymous namespace)::CR0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18Empty_SuperRegsSetE\", \"llvm::(anonymous namespace)::Empty_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR1_OverlapsE\", \"llvm::(anonymous namespace)::CR1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR2_OverlapsE\", \"llvm::(anonymous namespace)::CR2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR3_OverlapsE\", \"llvm::(anonymous namespace)::CR3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR4_OverlapsE\", \"llvm::(anonymous namespace)::CR4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR5_OverlapsE\", \"llvm::(anonymous namespace)::CR5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR6_OverlapsE\", \"llvm::(anonymous namespace)::CR6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR7_OverlapsE\", \"llvm::(anonymous namespace)::CR7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR8_OverlapsE\", \"llvm::(anonymous namespace)::CR8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12CR9_OverlapsE\", \"llvm::(anonymous namespace)::CR9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR10_OverlapsE\", \"llvm::(anonymous namespace)::CR10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR11_OverlapsE\", \"llvm::(anonymous namespace)::CR11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR12_OverlapsE\", \"llvm::(anonymous namespace)::CR12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR13_OverlapsE\", \"llvm::(anonymous namespace)::CR13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR14_OverlapsE\", \"llvm::(anonymous namespace)::CR14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CR15_OverlapsE\", \"llvm::(anonymous namespace)::CR15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11CS_OverlapsE\", \"llvm::(anonymous namespace)::CS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11CX_OverlapsE\", \"llvm::(anonymous namespace)::CX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CX_SubRegsSetE\", \"llvm::(anonymous namespace)::CX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15CX_SuperRegsSetE\", \"llvm::(anonymous namespace)::CX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DH_OverlapsE\", \"llvm::(anonymous namespace)::DH_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15DH_SuperRegsSetE\", \"llvm::(anonymous namespace)::DH_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DI_OverlapsE\", \"llvm::(anonymous namespace)::DI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13DI_SubRegsSetE\", \"llvm::(anonymous namespace)::DI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15DI_SuperRegsSetE\", \"llvm::(anonymous namespace)::DI_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DIL_OverlapsE\", \"llvm::(anonymous namespace)::DIL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16DIL_SuperRegsSetE\", \"llvm::(anonymous namespace)::DIL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DL_OverlapsE\", \"llvm::(anonymous namespace)::DL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15DL_SuperRegsSetE\", \"llvm::(anonymous namespace)::DL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR0_OverlapsE\", \"llvm::(anonymous namespace)::DR0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR1_OverlapsE\", \"llvm::(anonymous namespace)::DR1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR2_OverlapsE\", \"llvm::(anonymous namespace)::DR2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR3_OverlapsE\", \"llvm::(anonymous namespace)::DR3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR4_OverlapsE\", \"llvm::(anonymous namespace)::DR4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR5_OverlapsE\", \"llvm::(anonymous namespace)::DR5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR6_OverlapsE\", \"llvm::(anonymous namespace)::DR6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DR7_OverlapsE\", \"llvm::(anonymous namespace)::DR7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DS_OverlapsE\", \"llvm::(anonymous namespace)::DS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DX_OverlapsE\", \"llvm::(anonymous namespace)::DX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13DX_SubRegsSetE\", \"llvm::(anonymous namespace)::DX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15DX_SuperRegsSetE\", \"llvm::(anonymous namespace)::DX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EAX_OverlapsE\", \"llvm::(anonymous namespace)::EAX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EAX_SubRegsSetE\", \"llvm::(anonymous namespace)::EAX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EAX_SuperRegsSetE\", \"llvm::(anonymous namespace)::EAX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EBP_OverlapsE\", \"llvm::(anonymous namespace)::EBP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EBP_SubRegsSetE\", \"llvm::(anonymous namespace)::EBP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EBP_SuperRegsSetE\", \"llvm::(anonymous namespace)::EBP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EBX_OverlapsE\", \"llvm::(anonymous namespace)::EBX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EBX_SubRegsSetE\", \"llvm::(anonymous namespace)::EBX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EBX_SuperRegsSetE\", \"llvm::(anonymous namespace)::EBX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ECX_OverlapsE\", \"llvm::(anonymous namespace)::ECX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14ECX_SubRegsSetE\", \"llvm::(anonymous namespace)::ECX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16ECX_SuperRegsSetE\", \"llvm::(anonymous namespace)::ECX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EDI_OverlapsE\", \"llvm::(anonymous namespace)::EDI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EDI_SubRegsSetE\", \"llvm::(anonymous namespace)::EDI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EDI_SuperRegsSetE\", \"llvm::(anonymous namespace)::EDI_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EDX_OverlapsE\", \"llvm::(anonymous namespace)::EDX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EDX_SubRegsSetE\", \"llvm::(anonymous namespace)::EDX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EDX_SuperRegsSetE\", \"llvm::(anonymous namespace)::EDX_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15EFLAGS_OverlapsE\", \"llvm::(anonymous namespace)::EFLAGS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EIP_OverlapsE\", \"llvm::(anonymous namespace)::EIP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14EIP_SubRegsSetE\", \"llvm::(anonymous namespace)::EIP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16EIP_SuperRegsSetE\", \"llvm::(anonymous namespace)::EIP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12EIZ_OverlapsE\", \"llvm::(anonymous namespace)::EIZ_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11ES_OverlapsE\", \"llvm::(anonymous namespace)::ES_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ESI_OverlapsE\", \"llvm::(anonymous namespace)::ESI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14ESI_SubRegsSetE\", \"llvm::(anonymous namespace)::ESI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16ESI_SuperRegsSetE\", \"llvm::(anonymous namespace)::ESI_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ESP_OverlapsE\", \"llvm::(anonymous namespace)::ESP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14ESP_SubRegsSetE\", \"llvm::(anonymous namespace)::ESP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16ESP_SuperRegsSetE\", \"llvm::(anonymous namespace)::ESP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP0_OverlapsE\", \"llvm::(anonymous namespace)::FP0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP1_OverlapsE\", \"llvm::(anonymous namespace)::FP1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP2_OverlapsE\", \"llvm::(anonymous namespace)::FP2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP3_OverlapsE\", \"llvm::(anonymous namespace)::FP3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP4_OverlapsE\", \"llvm::(anonymous namespace)::FP4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP5_OverlapsE\", \"llvm::(anonymous namespace)::FP5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12FP6_OverlapsE\", \"llvm::(anonymous namespace)::FP6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11FS_OverlapsE\", \"llvm::(anonymous namespace)::FS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11GS_OverlapsE\", \"llvm::(anonymous namespace)::GS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11IP_OverlapsE\", \"llvm::(anonymous namespace)::IP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15IP_SuperRegsSetE\", \"llvm::(anonymous namespace)::IP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM0_OverlapsE\", \"llvm::(anonymous namespace)::MM0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM1_OverlapsE\", \"llvm::(anonymous namespace)::MM1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM2_OverlapsE\", \"llvm::(anonymous namespace)::MM2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM3_OverlapsE\", \"llvm::(anonymous namespace)::MM3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM4_OverlapsE\", \"llvm::(anonymous namespace)::MM4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM5_OverlapsE\", \"llvm::(anonymous namespace)::MM5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM6_OverlapsE\", \"llvm::(anonymous namespace)::MM6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12MM7_OverlapsE\", \"llvm::(anonymous namespace)::MM7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R8_OverlapsE\", \"llvm::(anonymous namespace)::R8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R8_SubRegsSetE\", \"llvm::(anonymous namespace)::R8_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R8B_OverlapsE\", \"llvm::(anonymous namespace)::R8B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R8B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R8B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R8D_OverlapsE\", \"llvm::(anonymous namespace)::R8D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R8D_SubRegsSetE\", \"llvm::(anonymous namespace)::R8D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R8D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R8D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R8W_OverlapsE\", \"llvm::(anonymous namespace)::R8W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R8W_SubRegsSetE\", \"llvm::(anonymous namespace)::R8W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R8W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R8W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R9_OverlapsE\", \"llvm::(anonymous namespace)::R9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R9_SubRegsSetE\", \"llvm::(anonymous namespace)::R9_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R9B_OverlapsE\", \"llvm::(anonymous namespace)::R9B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R9B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R9B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R9D_OverlapsE\", \"llvm::(anonymous namespace)::R9D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R9D_SubRegsSetE\", \"llvm::(anonymous namespace)::R9D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R9D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R9D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R9W_OverlapsE\", \"llvm::(anonymous namespace)::R9W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R9W_SubRegsSetE\", \"llvm::(anonymous namespace)::R9W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16R9W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R9W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R10_OverlapsE\", \"llvm::(anonymous namespace)::R10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R10_SubRegsSetE\", \"llvm::(anonymous namespace)::R10_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R10B_OverlapsE\", \"llvm::(anonymous namespace)::R10B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R10B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R10B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R10D_OverlapsE\", \"llvm::(anonymous namespace)::R10D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R10D_SubRegsSetE\", \"llvm::(anonymous namespace)::R10D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R10D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R10D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R10W_OverlapsE\", \"llvm::(anonymous namespace)::R10W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R10W_SubRegsSetE\", \"llvm::(anonymous namespace)::R10W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R10W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R10W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R11_OverlapsE\", \"llvm::(anonymous namespace)::R11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R11_SubRegsSetE\", \"llvm::(anonymous namespace)::R11_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R11B_OverlapsE\", \"llvm::(anonymous namespace)::R11B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R11B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R11B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R11D_OverlapsE\", \"llvm::(anonymous namespace)::R11D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R11D_SubRegsSetE\", \"llvm::(anonymous namespace)::R11D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R11D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R11D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R11W_OverlapsE\", \"llvm::(anonymous namespace)::R11W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R11W_SubRegsSetE\", \"llvm::(anonymous namespace)::R11W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R11W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R11W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R12_OverlapsE\", \"llvm::(anonymous namespace)::R12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R12_SubRegsSetE\", \"llvm::(anonymous namespace)::R12_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R12B_OverlapsE\", \"llvm::(anonymous namespace)::R12B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R12B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R12B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R12D_OverlapsE\", \"llvm::(anonymous namespace)::R12D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R12D_SubRegsSetE\", \"llvm::(anonymous namespace)::R12D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R12D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R12D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R12W_OverlapsE\", \"llvm::(anonymous namespace)::R12W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R12W_SubRegsSetE\", \"llvm::(anonymous namespace)::R12W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R12W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R12W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R13_OverlapsE\", \"llvm::(anonymous namespace)::R13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R13_SubRegsSetE\", \"llvm::(anonymous namespace)::R13_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R13B_OverlapsE\", \"llvm::(anonymous namespace)::R13B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R13B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R13B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R13D_OverlapsE\", \"llvm::(anonymous namespace)::R13D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R13D_SubRegsSetE\", \"llvm::(anonymous namespace)::R13D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R13D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R13D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R13W_OverlapsE\", \"llvm::(anonymous namespace)::R13W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R13W_SubRegsSetE\", \"llvm::(anonymous namespace)::R13W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R13W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R13W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R14_OverlapsE\", \"llvm::(anonymous namespace)::R14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R14_SubRegsSetE\", \"llvm::(anonymous namespace)::R14_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R14B_OverlapsE\", \"llvm::(anonymous namespace)::R14B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R14B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R14B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R14D_OverlapsE\", \"llvm::(anonymous namespace)::R14D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R14D_SubRegsSetE\", \"llvm::(anonymous namespace)::R14D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R14D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R14D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R14W_OverlapsE\", \"llvm::(anonymous namespace)::R14W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R14W_SubRegsSetE\", \"llvm::(anonymous namespace)::R14W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R14W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R14W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R15_OverlapsE\", \"llvm::(anonymous namespace)::R15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14R15_SubRegsSetE\", \"llvm::(anonymous namespace)::R15_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R15B_OverlapsE\", \"llvm::(anonymous namespace)::R15B_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R15B_SuperRegsSetE\", \"llvm::(anonymous namespace)::R15B_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R15D_OverlapsE\", \"llvm::(anonymous namespace)::R15D_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R15D_SubRegsSetE\", \"llvm::(anonymous namespace)::R15D_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R15D_SuperRegsSetE\", \"llvm::(anonymous namespace)::R15D_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13R15W_OverlapsE\", \"llvm::(anonymous namespace)::R15W_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15R15W_SubRegsSetE\", \"llvm::(anonymous namespace)::R15W_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17R15W_SuperRegsSetE\", \"llvm::(anonymous namespace)::R15W_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RAX_OverlapsE\", \"llvm::(anonymous namespace)::RAX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RAX_SubRegsSetE\", \"llvm::(anonymous namespace)::RAX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RBP_OverlapsE\", \"llvm::(anonymous namespace)::RBP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RBP_SubRegsSetE\", \"llvm::(anonymous namespace)::RBP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RBX_OverlapsE\", \"llvm::(anonymous namespace)::RBX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RBX_SubRegsSetE\", \"llvm::(anonymous namespace)::RBX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RCX_OverlapsE\", \"llvm::(anonymous namespace)::RCX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RCX_SubRegsSetE\", \"llvm::(anonymous namespace)::RCX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RDI_OverlapsE\", \"llvm::(anonymous namespace)::RDI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RDI_SubRegsSetE\", \"llvm::(anonymous namespace)::RDI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RDX_OverlapsE\", \"llvm::(anonymous namespace)::RDX_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RDX_SubRegsSetE\", \"llvm::(anonymous namespace)::RDX_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RIP_OverlapsE\", \"llvm::(anonymous namespace)::RIP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RIP_SubRegsSetE\", \"llvm::(anonymous namespace)::RIP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RIZ_OverlapsE\", \"llvm::(anonymous namespace)::RIZ_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RSI_OverlapsE\", \"llvm::(anonymous namespace)::RSI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RSI_SubRegsSetE\", \"llvm::(anonymous namespace)::RSI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12RSP_OverlapsE\", \"llvm::(anonymous namespace)::RSP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14RSP_SubRegsSetE\", \"llvm::(anonymous namespace)::RSP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11SI_OverlapsE\", \"llvm::(anonymous namespace)::SI_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13SI_SubRegsSetE\", \"llvm::(anonymous namespace)::SI_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15SI_SuperRegsSetE\", \"llvm::(anonymous namespace)::SI_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12SIL_OverlapsE\", \"llvm::(anonymous namespace)::SIL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16SIL_SuperRegsSetE\", \"llvm::(anonymous namespace)::SIL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11SP_OverlapsE\", \"llvm::(anonymous namespace)::SP_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13SP_SubRegsSetE\", \"llvm::(anonymous namespace)::SP_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15SP_SuperRegsSetE\", \"llvm::(anonymous namespace)::SP_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12SPL_OverlapsE\", \"llvm::(anonymous namespace)::SPL_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16SPL_SuperRegsSetE\", \"llvm::(anonymous namespace)::SPL_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11SS_OverlapsE\", \"llvm::(anonymous namespace)::SS_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST0_OverlapsE\", \"llvm::(anonymous namespace)::ST0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST1_OverlapsE\", \"llvm::(anonymous namespace)::ST1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST2_OverlapsE\", \"llvm::(anonymous namespace)::ST2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST3_OverlapsE\", \"llvm::(anonymous namespace)::ST3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST4_OverlapsE\", \"llvm::(anonymous namespace)::ST4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST5_OverlapsE\", \"llvm::(anonymous namespace)::ST5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST6_OverlapsE\", \"llvm::(anonymous namespace)::ST6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12ST7_OverlapsE\", \"llvm::(anonymous namespace)::ST7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM0_OverlapsE\", \"llvm::(anonymous namespace)::XMM0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM0_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM0_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM1_OverlapsE\", \"llvm::(anonymous namespace)::XMM1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM1_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM1_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM2_OverlapsE\", \"llvm::(anonymous namespace)::XMM2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM2_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM2_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM3_OverlapsE\", \"llvm::(anonymous namespace)::XMM3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM3_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM3_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM4_OverlapsE\", \"llvm::(anonymous namespace)::XMM4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM4_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM4_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM5_OverlapsE\", \"llvm::(anonymous namespace)::XMM5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM5_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM5_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM6_OverlapsE\", \"llvm::(anonymous namespace)::XMM6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM6_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM6_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM7_OverlapsE\", \"llvm::(anonymous namespace)::XMM7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM7_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM7_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM8_OverlapsE\", \"llvm::(anonymous namespace)::XMM8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM8_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM8_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13XMM9_OverlapsE\", \"llvm::(anonymous namespace)::XMM9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L17XMM9_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM9_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM10_OverlapsE\", \"llvm::(anonymous namespace)::XMM10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM10_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM10_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM11_OverlapsE\", \"llvm::(anonymous namespace)::XMM11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM11_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM11_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM12_OverlapsE\", \"llvm::(anonymous namespace)::XMM12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM12_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM12_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM13_OverlapsE\", \"llvm::(anonymous namespace)::XMM13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM13_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM13_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM14_OverlapsE\", \"llvm::(anonymous namespace)::XMM14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM14_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM14_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14XMM15_OverlapsE\", \"llvm::(anonymous namespace)::XMM15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18XMM15_SuperRegsSetE\", \"llvm::(anonymous namespace)::XMM15_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM0_OverlapsE\", \"llvm::(anonymous namespace)::YMM0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM0_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM0_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM1_OverlapsE\", \"llvm::(anonymous namespace)::YMM1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM1_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM1_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM2_OverlapsE\", \"llvm::(anonymous namespace)::YMM2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM2_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM2_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM3_OverlapsE\", \"llvm::(anonymous namespace)::YMM3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM3_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM3_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM4_OverlapsE\", \"llvm::(anonymous namespace)::YMM4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM4_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM4_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM5_OverlapsE\", \"llvm::(anonymous namespace)::YMM5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM5_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM5_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM6_OverlapsE\", \"llvm::(anonymous namespace)::YMM6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM6_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM6_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM7_OverlapsE\", \"llvm::(anonymous namespace)::YMM7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM7_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM7_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM8_OverlapsE\", \"llvm::(anonymous namespace)::YMM8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM8_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM8_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13YMM9_OverlapsE\", \"llvm::(anonymous namespace)::YMM9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15YMM9_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM9_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM10_OverlapsE\", \"llvm::(anonymous namespace)::YMM10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM10_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM10_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM11_OverlapsE\", \"llvm::(anonymous namespace)::YMM11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM11_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM11_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM12_OverlapsE\", \"llvm::(anonymous namespace)::YMM12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM12_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM12_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM13_OverlapsE\", \"llvm::(anonymous namespace)::YMM13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM13_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM13_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM14_OverlapsE\", \"llvm::(anonymous namespace)::YMM14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM14_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM14_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14YMM15_OverlapsE\", \"llvm::(anonymous namespace)::YMM15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16YMM15_SubRegsSetE\", \"llvm::(anonymous namespace)::YMM15_SubRegsSet\"},\n    {\"_ZN4llvmL13ImplicitList1E\", \"llvm::ImplicitList1\"},\n    {\"_ZN4llvmL13ImplicitList2E\", \"llvm::ImplicitList2\"},\n    {\"_ZN4llvmL13ImplicitList3E\", \"llvm::ImplicitList3\"},\n    {\"_ZN4llvmL13ImplicitList4E\", \"llvm::ImplicitList4\"},\n    {\"_ZN4llvmL13ImplicitList5E\", \"llvm::ImplicitList5\"},\n    {\"_ZN4llvmL13ImplicitList6E\", \"llvm::ImplicitList6\"},\n    {\"_ZN4llvmL13ImplicitList7E\", \"llvm::ImplicitList7\"},\n    {\"_ZN4llvmL13ImplicitList8E\", \"llvm::ImplicitList8\"},\n    {\"_ZN4llvmL13ImplicitList9E\", \"llvm::ImplicitList9\"},\n    {\"_ZN4llvmL14ImplicitList10E\", \"llvm::ImplicitList10\"},\n    {\"_ZN4llvmL14ImplicitList11E\", \"llvm::ImplicitList11\"},\n    {\"_ZN4llvmL14ImplicitList12E\", \"llvm::ImplicitList12\"},\n    {\"_ZN4llvmL14ImplicitList13E\", \"llvm::ImplicitList13\"},\n    {\"_ZN4llvmL14ImplicitList14E\", \"llvm::ImplicitList14\"},\n    {\"_ZN4llvmL14ImplicitList15E\", \"llvm::ImplicitList15\"},\n    {\"_ZN4llvmL14ImplicitList16E\", \"llvm::ImplicitList16\"},\n    {\"_ZN4llvm3ARML18CCRSuperRegClassesE\", \"llvm::ARM::CCRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML18GPRSuperRegClassesE\", \"llvm::ARM::GPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML20QPR_8SuperRegClassesE\", \"llvm::ARM::QPR_8SuperRegClasses\"},\n    {\"_ZN4llvm3ARML19QQPRSuperRegClassesE\", \"llvm::ARM::QQPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML24QQPR_VFP2SuperRegClassesE\", \"llvm::ARM::QQPR_VFP2SuperRegClasses\"},\n    {\"_ZN4llvm3ARML21QQQQPRSuperRegClassesE\", \"llvm::ARM::QQQQPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML19rGPRSuperRegClassesE\", \"llvm::ARM::rGPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML19tGPRSuperRegClassesE\", \"llvm::ARM::tGPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML20tcGPRSuperRegClassesE\", \"llvm::ARM::tcGPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML13CCRSubclassesE\", \"llvm::ARM::CCRSubclasses\"},\n    {\"_ZN4llvm3ARML15DPR_8SubclassesE\", \"llvm::ARM::DPR_8Subclasses\"},\n    {\"_ZN4llvm3ARML15QPR_8SubclassesE\", \"llvm::ARM::QPR_8Subclasses\"},\n    {\"_ZN4llvm3ARML19QQPR_VFP2SubclassesE\", \"llvm::ARM::QQPR_VFP2Subclasses\"},\n    {\"_ZN4llvm3ARML16QQQQPRSubclassesE\", \"llvm::ARM::QQQQPRSubclasses\"},\n    {\"_ZN4llvm3ARML15SPR_8SubclassesE\", \"llvm::ARM::SPR_8Subclasses\"},\n    {\"_ZN4llvm3ARML14tGPRSubclassesE\", \"llvm::ARM::tGPRSubclasses\"},\n    {\"_ZN4llvm3ARML15tcGPRSubclassesE\", \"llvm::ARM::tcGPRSubclasses\"},\n    {\"_ZN4llvm3ARML15CCRSuperclassesE\", \"llvm::ARM::CCRSuperclasses\"},\n    {\"_ZN4llvm3ARML15DPRSuperclassesE\", \"llvm::ARM::DPRSuperclasses\"},\n    {\"_ZN4llvm3ARML15GPRSuperclassesE\", \"llvm::ARM::GPRSuperclasses\"},\n    {\"_ZN4llvm3ARML15QPRSuperclassesE\", \"llvm::ARM::QPRSuperclasses\"},\n    {\"_ZN4llvm3ARML16QQPRSuperclassesE\", \"llvm::ARM::QQPRSuperclasses\"},\n    {\"_ZN4llvm3ARML18QQQQPRSuperclassesE\", \"llvm::ARM::QQQQPRSuperclasses\"},\n    {\"_ZN4llvm3ARML15SPRSuperclassesE\", \"llvm::ARM::SPRSuperclasses\"},\n    {\"_ZN4llvm3ARML16CCRSubRegClassesE\", \"llvm::ARM::CCRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3CCRE\", \"llvm::(anonymous namespace)::CCR\"},\n    {\"_ZN4llvm3ARML12ARM_DPR_VFP3E\", \"llvm::ARM::ARM_DPR_VFP3\"},\n    {\"_ZN4llvm3ARML12ARM_DPR_VFP2E\", \"llvm::ARM::ARM_DPR_VFP2\"},\n    {\"_ZN4llvm3ARML16DPRSubRegClassesE\", \"llvm::ARM::DPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3DPRE\", \"llvm::(anonymous namespace)::DPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5DPR_8E\", \"llvm::(anonymous namespace)::DPR_8\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8DPR_VFP2E\", \"llvm::(anonymous namespace)::DPR_VFP2\"},\n    {\"_ZN4llvm3ARML12THUMB_GPR_AOE\", \"llvm::ARM::THUMB_GPR_AO\"},\n    {\"_ZN4llvm3ARML10ARM_GPR_AOE\", \"llvm::ARM::ARM_GPR_AO\"},\n    {\"_ZN4llvm3ARML16GPRSubRegClassesE\", \"llvm::ARM::GPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3GPRE\", \"llvm::(anonymous namespace)::GPR\"},\n    {\"_ZN4llvm3ARML7ARM_QPRE\", \"llvm::ARM::ARM_QPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3QPRE\", \"llvm::(anonymous namespace)::QPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5QPR_8E\", \"llvm::(anonymous namespace)::QPR_8\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8QPR_VFP2E\", \"llvm::(anonymous namespace)::QPR_VFP2\"},\n    {\"_ZN4llvm3ARML8ARM_QQPRE\", \"llvm::ARM::ARM_QQPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4QQPRE\", \"llvm::(anonymous namespace)::QQPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9QQPR_VFP2E\", \"llvm::(anonymous namespace)::QQPR_VFP2\"},\n    {\"_ZN4llvm3ARML10ARM_QQQQPRE\", \"llvm::ARM::ARM_QQQQPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6QQQQPRE\", \"llvm::(anonymous namespace)::QQQQPR\"},\n    {\"_ZN4llvm3ARML16SPRSubRegClassesE\", \"llvm::ARM::SPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L3SPRE\", \"llvm::(anonymous namespace)::SPR\"},\n    {\"_ZN4llvm3ARML18SPR_8SubRegClassesE\", \"llvm::ARM::SPR_8SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5SPR_8E\", \"llvm::(anonymous namespace)::SPR_8\"},\n    {\"_ZN4llvm3ARML13THUMB_rGPR_AOE\", \"llvm::ARM::THUMB_rGPR_AO\"},\n    {\"_ZN4llvm3ARML11ARM_rGPR_AOE\", \"llvm::ARM::ARM_rGPR_AO\"},\n    {\"_ZN4llvm3ARML17rGPRSubRegClassesE\", \"llvm::ARM::rGPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4rGPRE\", \"llvm::(anonymous namespace)::rGPR\"},\n    {\"_ZN4llvm3ARML17tGPRSubRegClassesE\", \"llvm::ARM::tGPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L4tGPRE\", \"llvm::(anonymous namespace)::tGPR\"},\n    {\"_ZN4llvm3ARML15THUMB_GPR_AO_TCE\", \"llvm::ARM::THUMB_GPR_AO_TC\"},\n    {\"_ZN4llvm3ARML13ARM_GPR_R9_TCE\", \"llvm::ARM::ARM_GPR_R9_TC\"},\n    {\"_ZN4llvm3ARML15ARM_GPR_NOR9_TCE\", \"llvm::ARM::ARM_GPR_NOR9_TC\"},\n    {\"_ZN4llvm3ARML18tcGPRSubRegClassesE\", \"llvm::ARM::tcGPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L5tcGPRE\", \"llvm::(anonymous namespace)::tcGPR\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15SubregHashTableE\", \"llvm::(anonymous namespace)::SubregHashTable\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16AliasesHashTableE\", \"llvm::(anonymous namespace)::AliasesHashTable\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13CPSR_OverlapsE\", \"llvm::(anonymous namespace)::CPSR_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Empty_SubRegsSetE\", \"llvm::(anonymous namespace)::Empty_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18Empty_SuperRegsSetE\", \"llvm::(anonymous namespace)::Empty_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D0_OverlapsE\", \"llvm::(anonymous namespace)::D0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D0_SubRegsSetE\", \"llvm::(anonymous namespace)::D0_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D0_SuperRegsSetE\", \"llvm::(anonymous namespace)::D0_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D1_OverlapsE\", \"llvm::(anonymous namespace)::D1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D1_SubRegsSetE\", \"llvm::(anonymous namespace)::D1_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D1_SuperRegsSetE\", \"llvm::(anonymous namespace)::D1_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D2_OverlapsE\", \"llvm::(anonymous namespace)::D2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D2_SubRegsSetE\", \"llvm::(anonymous namespace)::D2_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D2_SuperRegsSetE\", \"llvm::(anonymous namespace)::D2_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D3_OverlapsE\", \"llvm::(anonymous namespace)::D3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D3_SubRegsSetE\", \"llvm::(anonymous namespace)::D3_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D3_SuperRegsSetE\", \"llvm::(anonymous namespace)::D3_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D4_OverlapsE\", \"llvm::(anonymous namespace)::D4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D4_SubRegsSetE\", \"llvm::(anonymous namespace)::D4_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D4_SuperRegsSetE\", \"llvm::(anonymous namespace)::D4_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D5_OverlapsE\", \"llvm::(anonymous namespace)::D5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D5_SubRegsSetE\", \"llvm::(anonymous namespace)::D5_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D5_SuperRegsSetE\", \"llvm::(anonymous namespace)::D5_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D6_OverlapsE\", \"llvm::(anonymous namespace)::D6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D6_SubRegsSetE\", \"llvm::(anonymous namespace)::D6_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D6_SuperRegsSetE\", \"llvm::(anonymous namespace)::D6_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D7_OverlapsE\", \"llvm::(anonymous namespace)::D7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D7_SubRegsSetE\", \"llvm::(anonymous namespace)::D7_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D7_SuperRegsSetE\", \"llvm::(anonymous namespace)::D7_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D8_OverlapsE\", \"llvm::(anonymous namespace)::D8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D8_SubRegsSetE\", \"llvm::(anonymous namespace)::D8_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D8_SuperRegsSetE\", \"llvm::(anonymous namespace)::D8_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11D9_OverlapsE\", \"llvm::(anonymous namespace)::D9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13D9_SubRegsSetE\", \"llvm::(anonymous namespace)::D9_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15D9_SuperRegsSetE\", \"llvm::(anonymous namespace)::D9_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D10_OverlapsE\", \"llvm::(anonymous namespace)::D10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D10_SubRegsSetE\", \"llvm::(anonymous namespace)::D10_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D10_SuperRegsSetE\", \"llvm::(anonymous namespace)::D10_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D11_OverlapsE\", \"llvm::(anonymous namespace)::D11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D11_SubRegsSetE\", \"llvm::(anonymous namespace)::D11_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D11_SuperRegsSetE\", \"llvm::(anonymous namespace)::D11_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D12_OverlapsE\", \"llvm::(anonymous namespace)::D12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D12_SubRegsSetE\", \"llvm::(anonymous namespace)::D12_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D12_SuperRegsSetE\", \"llvm::(anonymous namespace)::D12_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D13_OverlapsE\", \"llvm::(anonymous namespace)::D13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D13_SubRegsSetE\", \"llvm::(anonymous namespace)::D13_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D13_SuperRegsSetE\", \"llvm::(anonymous namespace)::D13_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D14_OverlapsE\", \"llvm::(anonymous namespace)::D14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D14_SubRegsSetE\", \"llvm::(anonymous namespace)::D14_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D14_SuperRegsSetE\", \"llvm::(anonymous namespace)::D14_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D15_OverlapsE\", \"llvm::(anonymous namespace)::D15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14D15_SubRegsSetE\", \"llvm::(anonymous namespace)::D15_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D15_SuperRegsSetE\", \"llvm::(anonymous namespace)::D15_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D16_OverlapsE\", \"llvm::(anonymous namespace)::D16_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D16_SuperRegsSetE\", \"llvm::(anonymous namespace)::D16_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D17_OverlapsE\", \"llvm::(anonymous namespace)::D17_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D17_SuperRegsSetE\", \"llvm::(anonymous namespace)::D17_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D18_OverlapsE\", \"llvm::(anonymous namespace)::D18_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D18_SuperRegsSetE\", \"llvm::(anonymous namespace)::D18_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D19_OverlapsE\", \"llvm::(anonymous namespace)::D19_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D19_SuperRegsSetE\", \"llvm::(anonymous namespace)::D19_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D20_OverlapsE\", \"llvm::(anonymous namespace)::D20_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D20_SuperRegsSetE\", \"llvm::(anonymous namespace)::D20_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D21_OverlapsE\", \"llvm::(anonymous namespace)::D21_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D21_SuperRegsSetE\", \"llvm::(anonymous namespace)::D21_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D22_OverlapsE\", \"llvm::(anonymous namespace)::D22_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D22_SuperRegsSetE\", \"llvm::(anonymous namespace)::D22_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D23_OverlapsE\", \"llvm::(anonymous namespace)::D23_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D23_SuperRegsSetE\", \"llvm::(anonymous namespace)::D23_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D24_OverlapsE\", \"llvm::(anonymous namespace)::D24_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D24_SuperRegsSetE\", \"llvm::(anonymous namespace)::D24_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D25_OverlapsE\", \"llvm::(anonymous namespace)::D25_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D25_SuperRegsSetE\", \"llvm::(anonymous namespace)::D25_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D26_OverlapsE\", \"llvm::(anonymous namespace)::D26_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D26_SuperRegsSetE\", \"llvm::(anonymous namespace)::D26_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D27_OverlapsE\", \"llvm::(anonymous namespace)::D27_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D27_SuperRegsSetE\", \"llvm::(anonymous namespace)::D27_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D28_OverlapsE\", \"llvm::(anonymous namespace)::D28_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D28_SuperRegsSetE\", \"llvm::(anonymous namespace)::D28_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D29_OverlapsE\", \"llvm::(anonymous namespace)::D29_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D29_SuperRegsSetE\", \"llvm::(anonymous namespace)::D29_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D30_OverlapsE\", \"llvm::(anonymous namespace)::D30_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D30_SuperRegsSetE\", \"llvm::(anonymous namespace)::D30_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12D31_OverlapsE\", \"llvm::(anonymous namespace)::D31_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16D31_SuperRegsSetE\", \"llvm::(anonymous namespace)::D31_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14FPEXC_OverlapsE\", \"llvm::(anonymous namespace)::FPEXC_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14FPSCR_OverlapsE\", \"llvm::(anonymous namespace)::FPSCR_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14FPSID_OverlapsE\", \"llvm::(anonymous namespace)::FPSID_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16ITSTATE_OverlapsE\", \"llvm::(anonymous namespace)::ITSTATE_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11LR_OverlapsE\", \"llvm::(anonymous namespace)::LR_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11PC_OverlapsE\", \"llvm::(anonymous namespace)::PC_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q0_OverlapsE\", \"llvm::(anonymous namespace)::Q0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q0_SubRegsSetE\", \"llvm::(anonymous namespace)::Q0_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q0_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q0_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q1_OverlapsE\", \"llvm::(anonymous namespace)::Q1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q1_SubRegsSetE\", \"llvm::(anonymous namespace)::Q1_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q1_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q1_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q2_OverlapsE\", \"llvm::(anonymous namespace)::Q2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q2_SubRegsSetE\", \"llvm::(anonymous namespace)::Q2_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q2_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q2_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q3_OverlapsE\", \"llvm::(anonymous namespace)::Q3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q3_SubRegsSetE\", \"llvm::(anonymous namespace)::Q3_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q3_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q3_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q4_OverlapsE\", \"llvm::(anonymous namespace)::Q4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q4_SubRegsSetE\", \"llvm::(anonymous namespace)::Q4_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q4_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q4_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q5_OverlapsE\", \"llvm::(anonymous namespace)::Q5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q5_SubRegsSetE\", \"llvm::(anonymous namespace)::Q5_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q5_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q5_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q6_OverlapsE\", \"llvm::(anonymous namespace)::Q6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q6_SubRegsSetE\", \"llvm::(anonymous namespace)::Q6_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q6_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q6_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q7_OverlapsE\", \"llvm::(anonymous namespace)::Q7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q7_SubRegsSetE\", \"llvm::(anonymous namespace)::Q7_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q7_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q7_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q8_OverlapsE\", \"llvm::(anonymous namespace)::Q8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q8_SubRegsSetE\", \"llvm::(anonymous namespace)::Q8_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q8_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q8_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11Q9_OverlapsE\", \"llvm::(anonymous namespace)::Q9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13Q9_SubRegsSetE\", \"llvm::(anonymous namespace)::Q9_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15Q9_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q9_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q10_OverlapsE\", \"llvm::(anonymous namespace)::Q10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q10_SubRegsSetE\", \"llvm::(anonymous namespace)::Q10_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q10_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q10_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q11_OverlapsE\", \"llvm::(anonymous namespace)::Q11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q11_SubRegsSetE\", \"llvm::(anonymous namespace)::Q11_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q11_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q11_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q12_OverlapsE\", \"llvm::(anonymous namespace)::Q12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q12_SubRegsSetE\", \"llvm::(anonymous namespace)::Q12_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q12_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q12_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q13_OverlapsE\", \"llvm::(anonymous namespace)::Q13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q13_SubRegsSetE\", \"llvm::(anonymous namespace)::Q13_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q13_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q13_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q14_OverlapsE\", \"llvm::(anonymous namespace)::Q14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q14_SubRegsSetE\", \"llvm::(anonymous namespace)::Q14_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q14_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q14_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12Q15_OverlapsE\", \"llvm::(anonymous namespace)::Q15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14Q15_SubRegsSetE\", \"llvm::(anonymous namespace)::Q15_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16Q15_SuperRegsSetE\", \"llvm::(anonymous namespace)::Q15_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ0_OverlapsE\", \"llvm::(anonymous namespace)::QQ0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ0_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ0_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ0_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ0_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ1_OverlapsE\", \"llvm::(anonymous namespace)::QQ1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ1_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ1_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ1_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ1_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ2_OverlapsE\", \"llvm::(anonymous namespace)::QQ2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ2_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ2_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ2_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ2_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ3_OverlapsE\", \"llvm::(anonymous namespace)::QQ3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ3_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ3_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ3_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ3_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ4_OverlapsE\", \"llvm::(anonymous namespace)::QQ4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ4_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ4_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ4_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ4_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ5_OverlapsE\", \"llvm::(anonymous namespace)::QQ5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ5_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ5_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ5_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ5_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ6_OverlapsE\", \"llvm::(anonymous namespace)::QQ6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ6_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ6_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ6_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ6_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQ7_OverlapsE\", \"llvm::(anonymous namespace)::QQ7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQ7_SubRegsSetE\", \"llvm::(anonymous namespace)::QQ7_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQ7_SuperRegsSetE\", \"llvm::(anonymous namespace)::QQ7_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQQQ0_OverlapsE\", \"llvm::(anonymous namespace)::QQQQ0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQQQ0_SubRegsSetE\", \"llvm::(anonymous namespace)::QQQQ0_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQQQ1_OverlapsE\", \"llvm::(anonymous namespace)::QQQQ1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQQQ1_SubRegsSetE\", \"llvm::(anonymous namespace)::QQQQ1_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQQQ2_OverlapsE\", \"llvm::(anonymous namespace)::QQQQ2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQQQ2_SubRegsSetE\", \"llvm::(anonymous namespace)::QQQQ2_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14QQQQ3_OverlapsE\", \"llvm::(anonymous namespace)::QQQQ3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16QQQQ3_SubRegsSetE\", \"llvm::(anonymous namespace)::QQQQ3_SubRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R0_OverlapsE\", \"llvm::(anonymous namespace)::R0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R1_OverlapsE\", \"llvm::(anonymous namespace)::R1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R2_OverlapsE\", \"llvm::(anonymous namespace)::R2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R3_OverlapsE\", \"llvm::(anonymous namespace)::R3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R4_OverlapsE\", \"llvm::(anonymous namespace)::R4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R5_OverlapsE\", \"llvm::(anonymous namespace)::R5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R6_OverlapsE\", \"llvm::(anonymous namespace)::R6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R7_OverlapsE\", \"llvm::(anonymous namespace)::R7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R8_OverlapsE\", \"llvm::(anonymous namespace)::R8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11R9_OverlapsE\", \"llvm::(anonymous namespace)::R9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R10_OverlapsE\", \"llvm::(anonymous namespace)::R10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R11_OverlapsE\", \"llvm::(anonymous namespace)::R11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12R12_OverlapsE\", \"llvm::(anonymous namespace)::R12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S0_OverlapsE\", \"llvm::(anonymous namespace)::S0_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S0_SuperRegsSetE\", \"llvm::(anonymous namespace)::S0_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S1_OverlapsE\", \"llvm::(anonymous namespace)::S1_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S1_SuperRegsSetE\", \"llvm::(anonymous namespace)::S1_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S2_OverlapsE\", \"llvm::(anonymous namespace)::S2_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S2_SuperRegsSetE\", \"llvm::(anonymous namespace)::S2_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S3_OverlapsE\", \"llvm::(anonymous namespace)::S3_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S3_SuperRegsSetE\", \"llvm::(anonymous namespace)::S3_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S4_OverlapsE\", \"llvm::(anonymous namespace)::S4_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S4_SuperRegsSetE\", \"llvm::(anonymous namespace)::S4_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S5_OverlapsE\", \"llvm::(anonymous namespace)::S5_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S5_SuperRegsSetE\", \"llvm::(anonymous namespace)::S5_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S6_OverlapsE\", \"llvm::(anonymous namespace)::S6_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S6_SuperRegsSetE\", \"llvm::(anonymous namespace)::S6_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S7_OverlapsE\", \"llvm::(anonymous namespace)::S7_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S7_SuperRegsSetE\", \"llvm::(anonymous namespace)::S7_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S8_OverlapsE\", \"llvm::(anonymous namespace)::S8_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S8_SuperRegsSetE\", \"llvm::(anonymous namespace)::S8_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11S9_OverlapsE\", \"llvm::(anonymous namespace)::S9_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15S9_SuperRegsSetE\", \"llvm::(anonymous namespace)::S9_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S10_OverlapsE\", \"llvm::(anonymous namespace)::S10_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S10_SuperRegsSetE\", \"llvm::(anonymous namespace)::S10_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S11_OverlapsE\", \"llvm::(anonymous namespace)::S11_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S11_SuperRegsSetE\", \"llvm::(anonymous namespace)::S11_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S12_OverlapsE\", \"llvm::(anonymous namespace)::S12_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S12_SuperRegsSetE\", \"llvm::(anonymous namespace)::S12_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S13_OverlapsE\", \"llvm::(anonymous namespace)::S13_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S13_SuperRegsSetE\", \"llvm::(anonymous namespace)::S13_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S14_OverlapsE\", \"llvm::(anonymous namespace)::S14_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S14_SuperRegsSetE\", \"llvm::(anonymous namespace)::S14_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S15_OverlapsE\", \"llvm::(anonymous namespace)::S15_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S15_SuperRegsSetE\", \"llvm::(anonymous namespace)::S15_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S16_OverlapsE\", \"llvm::(anonymous namespace)::S16_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S16_SuperRegsSetE\", \"llvm::(anonymous namespace)::S16_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S17_OverlapsE\", \"llvm::(anonymous namespace)::S17_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S17_SuperRegsSetE\", \"llvm::(anonymous namespace)::S17_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S18_OverlapsE\", \"llvm::(anonymous namespace)::S18_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S18_SuperRegsSetE\", \"llvm::(anonymous namespace)::S18_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S19_OverlapsE\", \"llvm::(anonymous namespace)::S19_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S19_SuperRegsSetE\", \"llvm::(anonymous namespace)::S19_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S20_OverlapsE\", \"llvm::(anonymous namespace)::S20_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S20_SuperRegsSetE\", \"llvm::(anonymous namespace)::S20_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S21_OverlapsE\", \"llvm::(anonymous namespace)::S21_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S21_SuperRegsSetE\", \"llvm::(anonymous namespace)::S21_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S22_OverlapsE\", \"llvm::(anonymous namespace)::S22_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S22_SuperRegsSetE\", \"llvm::(anonymous namespace)::S22_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S23_OverlapsE\", \"llvm::(anonymous namespace)::S23_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S23_SuperRegsSetE\", \"llvm::(anonymous namespace)::S23_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S24_OverlapsE\", \"llvm::(anonymous namespace)::S24_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S24_SuperRegsSetE\", \"llvm::(anonymous namespace)::S24_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S25_OverlapsE\", \"llvm::(anonymous namespace)::S25_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S25_SuperRegsSetE\", \"llvm::(anonymous namespace)::S25_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S26_OverlapsE\", \"llvm::(anonymous namespace)::S26_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S26_SuperRegsSetE\", \"llvm::(anonymous namespace)::S26_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S27_OverlapsE\", \"llvm::(anonymous namespace)::S27_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S27_SuperRegsSetE\", \"llvm::(anonymous namespace)::S27_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S28_OverlapsE\", \"llvm::(anonymous namespace)::S28_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S28_SuperRegsSetE\", \"llvm::(anonymous namespace)::S28_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S29_OverlapsE\", \"llvm::(anonymous namespace)::S29_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S29_SuperRegsSetE\", \"llvm::(anonymous namespace)::S29_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S30_OverlapsE\", \"llvm::(anonymous namespace)::S30_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S30_SuperRegsSetE\", \"llvm::(anonymous namespace)::S30_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12S31_OverlapsE\", \"llvm::(anonymous namespace)::S31_Overlaps\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16S31_SuperRegsSetE\", \"llvm::(anonymous namespace)::S31_SuperRegsSet\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11SP_OverlapsE\", \"llvm::(anonymous namespace)::SP_Overlaps\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes8\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes9\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes10\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes11\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE7Opcodes12\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::Opcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes13\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes14\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes15\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes16\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes118\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes19\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes21\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes23\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes25\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes26\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes27\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes28\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes29\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes131\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes32\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes134\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes35\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes37\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes39\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes41\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes42\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes43\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes44\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes45\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes046\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes0\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes147\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes48\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes049\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes0\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes150\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes51\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes53\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes55\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes57\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes58\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes59\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8QOpcodes60\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes61\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes062\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes0\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes163\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes64\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes065\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes0\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE9QOpcodes166\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::QOpcodes1\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes67\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes69\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZZN12_GLOBAL__N_115ARMDAGToDAGISel6SelectEPN4llvm6SDNodeEE8DOpcodes71\", \"(anonymous namespace)::ARMDAGToDAGISel::Select(llvm::SDNode*)::DOpcodes\"},\n    {\"_ZL19PerfectShuffleTable\", \"PerfectShuffleTable\"},\n    {\"_ZL13OperandCycles\", \"OperandCycles\"},\n    {\"_ZL16ForwardingPathes\", \"ForwardingPathes\"},\n    {\"_ZZN12_GLOBAL__N_116Thumb2SizeReduce13ReduceSpecialERN4llvm17MachineBasicBlockEPNS1_12MachineInstrERKNS_11ReduceEntryEbE11NarrowEntry11\", \"(anonymous namespace)::Thumb2SizeReduce::ReduceSpecial(llvm::MachineBasicBlock&, llvm::MachineInstr*, (anonymous namespace)::ReduceEntry const&, bool)::NarrowEntry\"},\n    {\"_ZN4llvm9AttributeL20MutuallyIncompatibleE\", \"llvm::Attribute::MutuallyIncompatible\"},\n    {\"_ZL14hexDigitsUpper\", \"hexDigitsUpper\"},\n    {\"_ZL14hexDigitsLower\", \"hexDigitsLower\"},\n    {\"_ZL10colorcodes\", \"colorcodes\"},\n    {\"_ZL7IntSigs\", \"IntSigs\"},\n    {\"_ZL8KillSigs\", \"KillSigs\"},\n    {\"_ZN12_GLOBAL__N_1L11GCCRegNamesE\", \"(anonymous namespace)::GCCRegNames\"},\n    {\"_ZL8TokNames\", \"TokNames\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZL13x86_asm_table\", \"x86_asm_table\"},\n    {\"_ZN4llvm3X86L19FR32SuperRegClassesE\", \"llvm::X86::FR32SuperRegClasses\"},\n    {\"_ZN4llvm3X86L19FR64SuperRegClassesE\", \"llvm::X86::FR64SuperRegClasses\"},\n    {\"_ZN4llvm3X86L19GR16SuperRegClassesE\", \"llvm::X86::GR16SuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR16_ABCDSuperRegClassesE\", \"llvm::X86::GR16_ABCDSuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR16_NOREXSuperRegClassesE\", \"llvm::X86::GR16_NOREXSuperRegClasses\"},\n    {\"_ZN4llvm3X86L19GR32SuperRegClassesE\", \"llvm::X86::GR32SuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR32_ABCDSuperRegClassesE\", \"llvm::X86::GR32_ABCDSuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR32_NOREXSuperRegClassesE\", \"llvm::X86::GR32_NOREXSuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR32_NOSPSuperRegClassesE\", \"llvm::X86::GR32_NOSPSuperRegClasses\"},\n    {\"_ZN4llvm3X86L22GR32_TCSuperRegClassesE\", \"llvm::X86::GR32_TCSuperRegClasses\"},\n    {\"_ZN4llvm3X86L18GR8SuperRegClassesE\", \"llvm::X86::GR8SuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR8_ABCD_HSuperRegClassesE\", \"llvm::X86::GR8_ABCD_HSuperRegClasses\"},\n    {\"_ZN4llvm3X86L25GR8_ABCD_LSuperRegClassesE\", \"llvm::X86::GR8_ABCD_LSuperRegClasses\"},\n    {\"_ZN4llvm3X86L24GR8_NOREXSuperRegClassesE\", \"llvm::X86::GR8_NOREXSuperRegClasses\"},\n    {\"_ZN4llvm3X86L20VR128SuperRegClassesE\", \"llvm::X86::VR128SuperRegClasses\"},\n    {\"_ZN4llvm3X86L14FR32SubclassesE\", \"llvm::X86::FR32Subclasses\"},\n    {\"_ZN4llvm3X86L14FR64SubclassesE\", \"llvm::X86::FR64Subclasses\"},\n    {\"_ZN4llvm3X86L14GR16SubclassesE\", \"llvm::X86::GR16Subclasses\"},\n    {\"_ZN4llvm3X86L20GR16_NOREXSubclassesE\", \"llvm::X86::GR16_NOREXSubclasses\"},\n    {\"_ZN4llvm3X86L14GR32SubclassesE\", \"llvm::X86::GR32Subclasses\"},\n    {\"_ZN4llvm3X86L19GR32_ABCDSubclassesE\", \"llvm::X86::GR32_ABCDSubclasses\"},\n    {\"_ZN4llvm3X86L20GR32_NOREXSubclassesE\", \"llvm::X86::GR32_NOREXSubclasses\"},\n    {\"_ZN4llvm3X86L19GR32_NOSPSubclassesE\", \"llvm::X86::GR32_NOSPSubclasses\"},\n    {\"_ZN4llvm3X86L17GR32_TCSubclassesE\", \"llvm::X86::GR32_TCSubclasses\"},\n    {\"_ZN4llvm3X86L14GR64SubclassesE\", \"llvm::X86::GR64Subclasses\"},\n    {\"_ZN4llvm3X86L20GR64_NOREXSubclassesE\", \"llvm::X86::GR64_NOREXSubclasses\"},\n    {\"_ZN4llvm3X86L25GR64_NOREX_NOSPSubclassesE\", \"llvm::X86::GR64_NOREX_NOSPSubclasses\"},\n    {\"_ZN4llvm3X86L19GR64_NOSPSubclassesE\", \"llvm::X86::GR64_NOSPSubclasses\"},\n    {\"_ZN4llvm3X86L17GR64_TCSubclassesE\", \"llvm::X86::GR64_TCSubclasses\"},\n    {\"_ZN4llvm3X86L13GR8SubclassesE\", \"llvm::X86::GR8Subclasses\"},\n    {\"_ZN4llvm3X86L19GR8_NOREXSubclassesE\", \"llvm::X86::GR8_NOREXSubclasses\"},\n    {\"_ZN4llvm3X86L15RFP32SubclassesE\", \"llvm::X86::RFP32Subclasses\"},\n    {\"_ZN4llvm3X86L15RFP64SubclassesE\", \"llvm::X86::RFP64Subclasses\"},\n    {\"_ZN4llvm3X86L16FR64SuperclassesE\", \"llvm::X86::FR64Superclasses\"},\n    {\"_ZN4llvm3X86L21GR16_ABCDSuperclassesE\", \"llvm::X86::GR16_ABCDSuperclasses\"},\n    {\"_ZN4llvm3X86L22GR16_NOREXSuperclassesE\", \"llvm::X86::GR16_NOREXSuperclasses\"},\n    {\"_ZN4llvm3X86L21GR32_ABCDSuperclassesE\", \"llvm::X86::GR32_ABCDSuperclasses\"},\n    {\"_ZN4llvm3X86L19GR32_ADSuperclassesE\", \"llvm::X86::GR32_ADSuperclasses\"},\n    {\"_ZN4llvm3X86L22GR32_NOREXSuperclassesE\", \"llvm::X86::GR32_NOREXSuperclasses\"},\n    {\"_ZN4llvm3X86L21GR32_NOSPSuperclassesE\", \"llvm::X86::GR32_NOSPSuperclasses\"},\n    {\"_ZN4llvm3X86L19GR32_TCSuperclassesE\", \"llvm::X86::GR32_TCSuperclasses\"},\n    {\"_ZN4llvm3X86L21GR64_ABCDSuperclassesE\", \"llvm::X86::GR64_ABCDSuperclasses\"},\n    {\"_ZN4llvm3X86L22GR64_NOREXSuperclassesE\", \"llvm::X86::GR64_NOREXSuperclasses\"},\n    {\"_ZN4llvm3X86L27GR64_NOREX_NOSPSuperclassesE\", \"llvm::X86::GR64_NOREX_NOSPSuperclasses\"},\n    {\"_ZN4llvm3X86L21GR64_NOSPSuperclassesE\", \"llvm::X86::GR64_NOSPSuperclasses\"},\n    {\"_ZN4llvm3X86L19GR64_TCSuperclassesE\", \"llvm::X86::GR64_TCSuperclasses\"},\n    {\"_ZN4llvm3X86L22GR64_TCW64SuperclassesE\", \"llvm::X86::GR64_TCW64Superclasses\"},\n    {\"_ZN4llvm3X86L22GR8_ABCD_HSuperclassesE\", \"llvm::X86::GR8_ABCD_HSuperclasses\"},\n    {\"_ZN4llvm3X86L22GR8_ABCD_LSuperclassesE\", \"llvm::X86::GR8_ABCD_LSuperclasses\"},\n    {\"_ZN4llvm3X86L21GR8_NOREXSuperclassesE\", \"llvm::X86::GR8_NOREXSuperclasses\"},\n    {\"_ZN4llvm3X86L17RFP64SuperclassesE\", \"llvm::X86::RFP64Superclasses\"},\n    {\"_ZN4llvm3X86L17RFP80SuperclassesE\", \"llvm::X86::RFP80Superclasses\"},\n    {\"_ZN4llvm3X86L17VR128SuperclassesE\", \"llvm::X86::VR128Superclasses\"},\n    {\"_ZN4llvm3X86L17GR16SubRegClassesE\", \"llvm::X86::GR16SubRegClasses\"},\n    {\"_ZN4llvm3X86L22GR16_ABCDSubRegClassesE\", \"llvm::X86::GR16_ABCDSubRegClasses\"},\n    {\"_ZN4llvm3X86L23GR16_NOREXSubRegClassesE\", \"llvm::X86::GR16_NOREXSubRegClasses\"},\n    {\"_ZN4llvm3X86L17GR32SubRegClassesE\", \"llvm::X86::GR32SubRegClasses\"},\n    {\"_ZN4llvm3X86L22GR32_ABCDSubRegClassesE\", \"llvm::X86::GR32_ABCDSubRegClasses\"},\n    {\"_ZN4llvm3X86L20GR32_ADSubRegClassesE\", \"llvm::X86::GR32_ADSubRegClasses\"},\n    {\"_ZN4llvm3X86L23GR32_NOREXSubRegClassesE\", \"llvm::X86::GR32_NOREXSubRegClasses\"},\n    {\"_ZN4llvm3X86L22GR32_NOSPSubRegClassesE\", \"llvm::X86::GR32_NOSPSubRegClasses\"},\n    {\"_ZN4llvm3X86L20GR32_TCSubRegClassesE\", \"llvm::X86::GR32_TCSubRegClasses\"},\n    {\"_ZN4llvm3X86L17GR64SubRegClassesE\", \"llvm::X86::GR64SubRegClasses\"},\n    {\"_ZN4llvm3X86L22GR64_ABCDSubRegClassesE\", \"llvm::X86::GR64_ABCDSubRegClasses\"},\n    {\"_ZN4llvm3X86L23GR64_NOREXSubRegClassesE\", \"llvm::X86::GR64_NOREXSubRegClasses\"},\n    {\"_ZN4llvm3X86L28GR64_NOREX_NOSPSubRegClassesE\", \"llvm::X86::GR64_NOREX_NOSPSubRegClasses\"},\n    {\"_ZN4llvm3X86L22GR64_NOSPSubRegClassesE\", \"llvm::X86::GR64_NOSPSubRegClasses\"},\n    {\"_ZN4llvm3X86L20GR64_TCSubRegClassesE\", \"llvm::X86::GR64_TCSubRegClasses\"},\n    {\"_ZN4llvm3X86L18VR128SubRegClassesE\", \"llvm::X86::VR128SubRegClasses\"},\n    {\"_ZN4llvm3X86L18VR256SubRegClassesE\", \"llvm::X86::VR256SubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15RegisterClassesE\", \"llvm::(anonymous namespace)::RegisterClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16SubRegIndexTableE\", \"llvm::(anonymous namespace)::SubRegIndexTable\"},\n    {\"_ZN4llvm3ARML18DPRSuperRegClassesE\", \"llvm::ARM::DPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML20DPR_8SuperRegClassesE\", \"llvm::ARM::DPR_8SuperRegClasses\"},\n    {\"_ZN4llvm3ARML23DPR_VFP2SuperRegClassesE\", \"llvm::ARM::DPR_VFP2SuperRegClasses\"},\n    {\"_ZN4llvm3ARML18QPRSuperRegClassesE\", \"llvm::ARM::QPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML23QPR_VFP2SuperRegClassesE\", \"llvm::ARM::QPR_VFP2SuperRegClasses\"},\n    {\"_ZN4llvm3ARML18SPRSuperRegClassesE\", \"llvm::ARM::SPRSuperRegClasses\"},\n    {\"_ZN4llvm3ARML20SPR_8SuperRegClassesE\", \"llvm::ARM::SPR_8SuperRegClasses\"},\n    {\"_ZN4llvm3ARML13DPRSubclassesE\", \"llvm::ARM::DPRSubclasses\"},\n    {\"_ZN4llvm3ARML18DPR_VFP2SubclassesE\", \"llvm::ARM::DPR_VFP2Subclasses\"},\n    {\"_ZN4llvm3ARML13GPRSubclassesE\", \"llvm::ARM::GPRSubclasses\"},\n    {\"_ZN4llvm3ARML13QPRSubclassesE\", \"llvm::ARM::QPRSubclasses\"},\n    {\"_ZN4llvm3ARML18QPR_VFP2SubclassesE\", \"llvm::ARM::QPR_VFP2Subclasses\"},\n    {\"_ZN4llvm3ARML14QQPRSubclassesE\", \"llvm::ARM::QQPRSubclasses\"},\n    {\"_ZN4llvm3ARML13SPRSubclassesE\", \"llvm::ARM::SPRSubclasses\"},\n    {\"_ZN4llvm3ARML14rGPRSubclassesE\", \"llvm::ARM::rGPRSubclasses\"},\n    {\"_ZN4llvm3ARML17DPR_8SuperclassesE\", \"llvm::ARM::DPR_8Superclasses\"},\n    {\"_ZN4llvm3ARML20DPR_VFP2SuperclassesE\", \"llvm::ARM::DPR_VFP2Superclasses\"},\n    {\"_ZN4llvm3ARML17QPR_8SuperclassesE\", \"llvm::ARM::QPR_8Superclasses\"},\n    {\"_ZN4llvm3ARML20QPR_VFP2SuperclassesE\", \"llvm::ARM::QPR_VFP2Superclasses\"},\n    {\"_ZN4llvm3ARML21QQPR_VFP2SuperclassesE\", \"llvm::ARM::QQPR_VFP2Superclasses\"},\n    {\"_ZN4llvm3ARML17SPR_8SuperclassesE\", \"llvm::ARM::SPR_8Superclasses\"},\n    {\"_ZN4llvm3ARML16rGPRSuperclassesE\", \"llvm::ARM::rGPRSuperclasses\"},\n    {\"_ZN4llvm3ARML16tGPRSuperclassesE\", \"llvm::ARM::tGPRSuperclasses\"},\n    {\"_ZN4llvm3ARML17tcGPRSuperclassesE\", \"llvm::ARM::tcGPRSuperclasses\"},\n    {\"_ZN4llvm3ARML18DPR_8SubRegClassesE\", \"llvm::ARM::DPR_8SubRegClasses\"},\n    {\"_ZN4llvm3ARML21DPR_VFP2SubRegClassesE\", \"llvm::ARM::DPR_VFP2SubRegClasses\"},\n    {\"_ZN4llvm3ARML16QPRSubRegClassesE\", \"llvm::ARM::QPRSubRegClasses\"},\n    {\"_ZN4llvm3ARML18QPR_8SubRegClassesE\", \"llvm::ARM::QPR_8SubRegClasses\"},\n    {\"_ZN4llvm3ARML21QPR_VFP2SubRegClassesE\", \"llvm::ARM::QPR_VFP2SubRegClasses\"},\n    {\"_ZN4llvm3ARML17QQPRSubRegClassesE\", \"llvm::ARM::QQPRSubRegClasses\"},\n    {\"_ZN4llvm3ARML22QQPR_VFP2SubRegClassesE\", \"llvm::ARM::QQPR_VFP2SubRegClasses\"},\n    {\"_ZN4llvm3ARML19QQQQPRSubRegClassesE\", \"llvm::ARM::QQQQPRSubRegClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L15RegisterClassesE\", \"llvm::(anonymous namespace)::RegisterClasses\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L16SubRegIndexTableE\", \"llvm::(anonymous namespace)::SubRegIndexTable\"},\n    {\"_ZL13arm_asm_table\", \"arm_asm_table\"},\n    {\"_ZN4llvmL24RegisterCoalescerLinkObjE\", \"llvm::RegisterCoalescerLinkObj\"},\n    {\"_ZN4llvmL31SimpleRegisterCoalescingLinkObjE\", \"llvm::SimpleRegisterCoalescingLinkObj\"},\n    {\"_ZL8PSVNames\", \"PSVNames\"},\n    {\"_ZN4llvmL24RegisterCoalescerLinkObjE\", \"llvm::RegisterCoalescerLinkObj\"},\n    {\"_ZN4llvmL31SimpleRegisterCoalescingLinkObjE\", \"llvm::SimpleRegisterCoalescingLinkObj\"},\n    {\"_ZN4llvmL24RegisterCoalescerLinkObjE\", \"llvm::RegisterCoalescerLinkObj\"},\n    {\"_ZN4llvmL31SimpleRegisterCoalescingLinkObjE\", \"llvm::SimpleRegisterCoalescingLinkObj\"},\n    {\"_ZN4llvmL24RegisterCoalescerLinkObjE\", \"llvm::RegisterCoalescerLinkObj\"},\n    {\"_ZN4llvmL31SimpleRegisterCoalescingLinkObjE\", \"llvm::SimpleRegisterCoalescingLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZN4llvmL16CallGraphLinkObjE\", \"llvm::CallGraphLinkObj\"},\n    {\"_ZL22SectionTypeDescriptors\", \"SectionTypeDescriptors\"},\n    {\"_ZL22SectionAttrDescriptors\", \"SectionAttrDescriptors\"},\n    {\"_ZL9Lang_cuda\", \"Lang_cuda\"},\n    {\"_ZL11Lang_opencl\", \"Lang_opencl\"},\n    {\"_ZL13Lang_gnucxx0x\", \"Lang_gnucxx0x\"},\n    {\"_ZL10Lang_cxx0x\", \"Lang_cxx0x\"},\n    {\"_ZL13Lang_gnucxx98\", \"Lang_gnucxx98\"},\n    {\"_ZL10Lang_cxx98\", \"Lang_cxx98\"},\n    {\"_ZL10Lang_gnu9x\", \"Lang_gnu9x\"},\n    {\"_ZL10Lang_gnu99\", \"Lang_gnu99\"},\n    {\"_ZL17Lang_iso9899_199x\", \"Lang_iso9899_199x\"},\n    {\"_ZL17Lang_iso9899_1999\", \"Lang_iso9899_1999\"},\n    {\"_ZL8Lang_c9x\", \"Lang_c9x\"},\n    {\"_ZL8Lang_c99\", \"Lang_c99\"},\n    {\"_ZL10Lang_gnu89\", \"Lang_gnu89\"},\n    {\"_ZL8Lang_c94\", \"Lang_c94\"},\n    {\"_ZL17Lang_iso9899_1990\", \"Lang_iso9899_1990\"},\n    {\"_ZL8Lang_c90\", \"Lang_c90\"},\n    {\"_ZL8Lang_c89\", \"Lang_c89\"},\n    {\"_ZL14CC1AsInfoTable\", \"CC1AsInfoTable\"},\n    {\"_ZL12CC1InfoTable\", \"CC1InfoTable\"},\n    {\"_ZL9InfoTable\", \"InfoTable\"},\n    {\"_ZL9TypeInfos\", \"TypeInfos\"},\n    {\"_ZL16EagerlyAssumeTag\", \"EagerlyAssumeTag\"},\n    {\"_ZL4Msgs\", \"Msgs\"},\n    {\"_ZL11BuiltinInfo\", \"BuiltinInfo\"},\n    {\"_ZL14StaticDiagInfo\", \"StaticDiagInfo\"},\n    {\"_ZL11OptionTable\", \"OptionTable\"},\n    {\"_ZN12_GLOBAL__N_1L11BuiltinInfoE\", \"(anonymous namespace)::BuiltinInfo\"},\n    {\"_ZN12_GLOBAL__N_1L13GCCRegAliasesE\", \"(anonymous namespace)::GCCRegAliases\"},\n    {\"_ZL21NumAggregatesPromoted\", \"NumAggregatesPromoted\"},\n    {\"_ZL20NumArgumentsPromoted\", \"NumArgumentsPromoted\"},\n    {\"_ZL16NumArgumentsDead\", \"NumArgumentsDead\"},\n    {\"_ZL20NumByValArgsPromoted\", \"NumByValArgsPromoted\"},\n    {\"_ZL9NumMerged\", \"NumMerged\"},\n    {\"_ZL29NumArgumentsReplacedWithUndef\", \"NumArgumentsReplacedWithUndef\"},\n    {\"_ZL22NumArgumentsEliminated\", \"NumArgumentsEliminated\"},\n    {\"_ZL20NumRetValsEliminated\", \"NumRetValsEliminated\"},\n    {\"_ZL9NumKilled\", \"NumKilled\"},\n    {\"_ZL10NumNoAlias\", \"NumNoAlias\"},\n    {\"_ZL12NumNoCapture\", \"NumNoCapture\"},\n    {\"_ZL11NumReadNone\", \"NumReadNone\"},\n    {\"_ZL11NumReadOnly\", \"NumReadOnly\"},\n    {\"_ZL10NumAliases\", \"NumAliases\"},\n    {\"_ZL12NumVariables\", \"NumVariables\"},\n    {\"_ZL12NumFunctions\", \"NumFunctions\"},\n    {\"_ZL17NumAliasesRemoved\", \"NumAliasesRemoved\"},\n    {\"_ZL18NumAliasesResolved\", \"NumAliasesResolved\"},\n    {\"_ZL15NumShrunkToBool\", \"NumShrunkToBool\"},\n    {\"_ZL10NumHeapSRA\", \"NumHeapSRA\"},\n    {\"_ZL11NumGlobUses\", \"NumGlobUses\"},\n    {\"_ZL13NumSubstitute\", \"NumSubstitute\"},\n    {\"_ZL6NumSRA\", \"NumSRA\"},\n    {\"_ZL9NumMarked\", \"NumMarked\"},\n    {\"_ZL12NumLocalized\", \"NumLocalized\"},\n    {\"_ZL10NumUnnamed\", \"NumUnnamed\"},\n    {\"_ZL10NumDeleted\", \"NumDeleted\"},\n    {\"_ZL17NumCtorsEvaluated\", \"NumCtorsEvaluated\"},\n    {\"_ZL14NumNestRemoved\", \"NumNestRemoved\"},\n    {\"_ZL14NumFastCallFns\", \"NumFastCallFns\"},\n    {\"_ZL12NumFnDeleted\", \"NumFnDeleted\"},\n    {\"_ZL10NumDeleted\", \"NumDeleted\"},\n    {\"_ZL10NumInlined\", \"NumInlined\"},\n    {\"_ZL16NumMergedAllocas\", \"NumMergedAllocas\"},\n    {\"_ZL15NumCallsDeleted\", \"NumCallsDeleted\"},\n    {\"_ZL10NumUnreach\", \"NumUnreach\"},\n    {\"_ZL10NumRemoved\", \"NumRemoved\"},\n    {\"_ZL17NumDeadPrototypes\", \"NumDeadPrototypes\"},\n    {\"_ZL10MatchTable\", \"MatchTable\"},\n    {\"_ZL10NumEmitted\", \"NumEmitted\"},\n    {\"_ZL7NumFXCH\", \"NumFXCH\"},\n    {\"_ZL8PopTable\", \"PopTable\"},\n    {\"_ZL11OpcodeTable\", \"OpcodeTable\"},\n    {\"_ZL15ForwardST0Table\", \"ForwardST0Table\"},\n    {\"_ZL15ReverseST0Table\", \"ReverseST0Table\"},\n    {\"_ZL15ForwardSTiTable\", \"ForwardSTiTable\"},\n    {\"_ZL15ReverseSTiTable\", \"ReverseSTiTable\"},\n    {\"_ZL5NumFP\", \"NumFP\"},\n    {\"_ZL12NumLoadMoved\", \"NumLoadMoved\"},\n    {\"_ZL12NumTailCalls\", \"NumTailCalls\"},\n    {\"_ZN4llvmL9Barriers1E\", \"llvm::Barriers1\"},\n    {\"_ZN4llvmL9Barriers2E\", \"llvm::Barriers2\"},\n    {\"_ZN4llvmL9Barriers3E\", \"llvm::Barriers3\"},\n    {\"_ZN4llvmL9Barriers4E\", \"llvm::Barriers4\"},\n    {\"_ZN4llvmL9Barriers5E\", \"llvm::Barriers5\"},\n    {\"_ZN4llvmL9Barriers6E\", \"llvm::Barriers6\"},\n    {\"_ZN4llvmL9Barriers7E\", \"llvm::Barriers7\"},\n    {\"_ZN4llvmL9Barriers8E\", \"llvm::Barriers8\"},\n    {\"_ZN4llvmL12OperandInfo2E\", \"llvm::OperandInfo2\"},\n    {\"_ZN4llvmL12OperandInfo3E\", \"llvm::OperandInfo3\"},\n    {\"_ZN4llvmL12OperandInfo4E\", \"llvm::OperandInfo4\"},\n    {\"_ZN4llvmL12OperandInfo5E\", \"llvm::OperandInfo5\"},\n    {\"_ZN4llvmL12OperandInfo6E\", \"llvm::OperandInfo6\"},\n    {\"_ZN4llvmL12OperandInfo7E\", \"llvm::OperandInfo7\"},\n    {\"_ZN4llvmL12OperandInfo8E\", \"llvm::OperandInfo8\"},\n    {\"_ZN4llvmL12OperandInfo9E\", \"llvm::OperandInfo9\"},\n    {\"_ZN4llvmL13OperandInfo10E\", \"llvm::OperandInfo10\"},\n    {\"_ZN4llvmL13OperandInfo11E\", \"llvm::OperandInfo11\"},\n    {\"_ZN4llvmL13OperandInfo12E\", \"llvm::OperandInfo12\"},\n    {\"_ZN4llvmL13OperandInfo13E\", \"llvm::OperandInfo13\"},\n    {\"_ZN4llvmL13OperandInfo14E\", \"llvm::OperandInfo14\"},\n    {\"_ZN4llvmL13OperandInfo15E\", \"llvm::OperandInfo15\"},\n    {\"_ZN4llvmL13OperandInfo16E\", \"llvm::OperandInfo16\"},\n    {\"_ZN4llvmL13OperandInfo17E\", \"llvm::OperandInfo17\"},\n    {\"_ZN4llvmL13OperandInfo18E\", \"llvm::OperandInfo18\"},\n    {\"_ZN4llvmL13OperandInfo19E\", \"llvm::OperandInfo19\"},\n    {\"_ZN4llvmL13OperandInfo20E\", \"llvm::OperandInfo20\"},\n    {\"_ZN4llvmL13OperandInfo21E\", \"llvm::OperandInfo21\"},\n    {\"_ZN4llvmL13OperandInfo22E\", \"llvm::OperandInfo22\"},\n    {\"_ZN4llvmL13OperandInfo23E\", \"llvm::OperandInfo23\"},\n    {\"_ZN4llvmL13OperandInfo24E\", \"llvm::OperandInfo24\"},\n    {\"_ZN4llvmL13OperandInfo25E\", \"llvm::OperandInfo25\"},\n    {\"_ZN4llvmL13OperandInfo26E\", \"llvm::OperandInfo26\"},\n    {\"_ZN4llvmL13OperandInfo27E\", \"llvm::OperandInfo27\"},\n    {\"_ZN4llvmL13OperandInfo28E\", \"llvm::OperandInfo28\"},\n    {\"_ZN4llvmL13OperandInfo29E\", \"llvm::OperandInfo29\"},\n    {\"_ZN4llvmL13OperandInfo30E\", \"llvm::OperandInfo30\"},\n    {\"_ZN4llvmL13OperandInfo31E\", \"llvm::OperandInfo31\"},\n    {\"_ZN4llvmL13OperandInfo32E\", \"llvm::OperandInfo32\"},\n    {\"_ZN4llvmL13OperandInfo33E\", \"llvm::OperandInfo33\"},\n    {\"_ZN4llvmL13OperandInfo34E\", \"llvm::OperandInfo34\"},\n    {\"_ZN4llvmL13OperandInfo35E\", \"llvm::OperandInfo35\"},\n    {\"_ZN4llvmL13OperandInfo36E\", \"llvm::OperandInfo36\"},\n    {\"_ZN4llvmL13OperandInfo37E\", \"llvm::OperandInfo37\"},\n    {\"_ZN4llvmL13OperandInfo38E\", \"llvm::OperandInfo38\"},\n    {\"_ZN4llvmL13OperandInfo39E\", \"llvm::OperandInfo39\"},\n    {\"_ZN4llvmL13OperandInfo40E\", \"llvm::OperandInfo40\"},\n    {\"_ZN4llvmL13OperandInfo41E\", \"llvm::OperandInfo41\"},\n    {\"_ZN4llvmL13OperandInfo42E\", \"llvm::OperandInfo42\"},\n    {\"_ZN4llvmL13OperandInfo43E\", \"llvm::OperandInfo43\"},\n    {\"_ZN4llvmL13OperandInfo44E\", \"llvm::OperandInfo44\"},\n    {\"_ZN4llvmL13OperandInfo45E\", \"llvm::OperandInfo45\"},\n    {\"_ZN4llvmL13OperandInfo46E\", \"llvm::OperandInfo46\"},\n    {\"_ZN4llvmL13OperandInfo47E\", \"llvm::OperandInfo47\"},\n    {\"_ZN4llvmL13OperandInfo48E\", \"llvm::OperandInfo48\"},\n    {\"_ZN4llvmL13OperandInfo49E\", \"llvm::OperandInfo49\"},\n    {\"_ZN4llvmL13OperandInfo50E\", \"llvm::OperandInfo50\"},\n    {\"_ZN4llvmL13OperandInfo51E\", \"llvm::OperandInfo51\"},\n    {\"_ZN4llvmL13OperandInfo52E\", \"llvm::OperandInfo52\"},\n    {\"_ZN4llvmL13OperandInfo53E\", \"llvm::OperandInfo53\"},\n    {\"_ZN4llvmL13OperandInfo54E\", \"llvm::OperandInfo54\"},\n    {\"_ZN4llvmL13OperandInfo55E\", \"llvm::OperandInfo55\"},\n    {\"_ZN4llvmL13OperandInfo56E\", \"llvm::OperandInfo56\"},\n    {\"_ZN4llvmL13OperandInfo57E\", \"llvm::OperandInfo57\"},\n    {\"_ZN4llvmL13OperandInfo58E\", \"llvm::OperandInfo58\"},\n    {\"_ZN4llvmL13OperandInfo59E\", \"llvm::OperandInfo59\"},\n    {\"_ZN4llvmL13OperandInfo60E\", \"llvm::OperandInfo60\"},\n    {\"_ZN4llvmL13OperandInfo61E\", \"llvm::OperandInfo61\"},\n    {\"_ZN4llvmL13OperandInfo62E\", \"llvm::OperandInfo62\"},\n    {\"_ZN4llvmL13OperandInfo63E\", \"llvm::OperandInfo63\"},\n    {\"_ZN4llvmL13OperandInfo64E\", \"llvm::OperandInfo64\"},\n    {\"_ZN4llvmL13OperandInfo65E\", \"llvm::OperandInfo65\"},\n    {\"_ZN4llvmL13OperandInfo66E\", \"llvm::OperandInfo66\"},\n    {\"_ZN4llvmL13OperandInfo67E\", \"llvm::OperandInfo67\"},\n    {\"_ZN4llvmL13OperandInfo68E\", \"llvm::OperandInfo68\"},\n    {\"_ZN4llvmL13OperandInfo69E\", \"llvm::OperandInfo69\"},\n    {\"_ZN4llvmL13OperandInfo70E\", \"llvm::OperandInfo70\"},\n    {\"_ZN4llvmL13OperandInfo71E\", \"llvm::OperandInfo71\"},\n    {\"_ZN4llvmL13OperandInfo72E\", \"llvm::OperandInfo72\"},\n    {\"_ZN4llvmL13OperandInfo73E\", \"llvm::OperandInfo73\"},\n    {\"_ZN4llvmL13OperandInfo74E\", \"llvm::OperandInfo74\"},\n    {\"_ZN4llvmL13OperandInfo75E\", \"llvm::OperandInfo75\"},\n    {\"_ZN4llvmL13OperandInfo76E\", \"llvm::OperandInfo76\"},\n    {\"_ZN4llvmL13OperandInfo77E\", \"llvm::OperandInfo77\"},\n    {\"_ZN4llvmL13OperandInfo78E\", \"llvm::OperandInfo78\"},\n    {\"_ZN4llvmL13OperandInfo79E\", \"llvm::OperandInfo79\"},\n    {\"_ZN4llvmL13OperandInfo80E\", \"llvm::OperandInfo80\"},\n    {\"_ZN4llvmL13OperandInfo81E\", \"llvm::OperandInfo81\"},\n    {\"_ZN4llvmL13OperandInfo82E\", \"llvm::OperandInfo82\"},\n    {\"_ZN4llvmL13OperandInfo83E\", \"llvm::OperandInfo83\"},\n    {\"_ZN4llvmL13OperandInfo84E\", \"llvm::OperandInfo84\"},\n    {\"_ZN4llvmL13OperandInfo85E\", \"llvm::OperandInfo85\"},\n    {\"_ZN4llvmL13OperandInfo86E\", \"llvm::OperandInfo86\"},\n    {\"_ZN4llvmL13OperandInfo87E\", \"llvm::OperandInfo87\"},\n    {\"_ZN4llvmL13OperandInfo88E\", \"llvm::OperandInfo88\"},\n    {\"_ZN4llvmL13OperandInfo89E\", \"llvm::OperandInfo89\"},\n    {\"_ZN4llvmL13OperandInfo90E\", \"llvm::OperandInfo90\"},\n    {\"_ZN4llvmL13OperandInfo91E\", \"llvm::OperandInfo91\"},\n    {\"_ZN4llvmL13OperandInfo92E\", \"llvm::OperandInfo92\"},\n    {\"_ZN4llvmL13OperandInfo93E\", \"llvm::OperandInfo93\"},\n    {\"_ZN4llvmL13OperandInfo94E\", \"llvm::OperandInfo94\"},\n    {\"_ZN4llvmL13OperandInfo95E\", \"llvm::OperandInfo95\"},\n    {\"_ZN4llvmL13OperandInfo96E\", \"llvm::OperandInfo96\"},\n    {\"_ZN4llvmL13OperandInfo97E\", \"llvm::OperandInfo97\"},\n    {\"_ZN4llvmL13OperandInfo98E\", \"llvm::OperandInfo98\"},\n    {\"_ZN4llvmL13OperandInfo99E\", \"llvm::OperandInfo99\"},\n    {\"_ZN4llvmL14OperandInfo100E\", \"llvm::OperandInfo100\"},\n    {\"_ZN4llvmL14OperandInfo101E\", \"llvm::OperandInfo101\"},\n    {\"_ZN4llvmL14OperandInfo102E\", \"llvm::OperandInfo102\"},\n    {\"_ZN4llvmL14OperandInfo103E\", \"llvm::OperandInfo103\"},\n    {\"_ZN4llvmL14OperandInfo104E\", \"llvm::OperandInfo104\"},\n    {\"_ZN4llvmL14OperandInfo105E\", \"llvm::OperandInfo105\"},\n    {\"_ZN4llvmL14OperandInfo106E\", \"llvm::OperandInfo106\"},\n    {\"_ZN4llvmL14OperandInfo107E\", \"llvm::OperandInfo107\"},\n    {\"_ZN4llvmL14OperandInfo108E\", \"llvm::OperandInfo108\"},\n    {\"_ZN4llvmL14OperandInfo109E\", \"llvm::OperandInfo109\"},\n    {\"_ZN4llvmL14OperandInfo110E\", \"llvm::OperandInfo110\"},\n    {\"_ZN4llvmL14OperandInfo111E\", \"llvm::OperandInfo111\"},\n    {\"_ZN4llvmL14OperandInfo112E\", \"llvm::OperandInfo112\"},\n    {\"_ZN4llvmL14OperandInfo113E\", \"llvm::OperandInfo113\"},\n    {\"_ZN4llvmL14OperandInfo114E\", \"llvm::OperandInfo114\"},\n    {\"_ZN4llvmL14OperandInfo115E\", \"llvm::OperandInfo115\"},\n    {\"_ZN4llvmL14OperandInfo116E\", \"llvm::OperandInfo116\"},\n    {\"_ZN4llvmL14OperandInfo117E\", \"llvm::OperandInfo117\"},\n    {\"_ZN4llvmL14OperandInfo118E\", \"llvm::OperandInfo118\"},\n    {\"_ZN4llvmL14OperandInfo119E\", \"llvm::OperandInfo119\"},\n    {\"_ZN4llvmL14OperandInfo120E\", \"llvm::OperandInfo120\"},\n    {\"_ZN4llvmL14OperandInfo121E\", \"llvm::OperandInfo121\"},\n    {\"_ZN4llvmL14OperandInfo122E\", \"llvm::OperandInfo122\"},\n    {\"_ZN4llvmL14OperandInfo123E\", \"llvm::OperandInfo123\"},\n    {\"_ZN4llvmL14OperandInfo124E\", \"llvm::OperandInfo124\"},\n    {\"_ZN4llvmL14OperandInfo125E\", \"llvm::OperandInfo125\"},\n    {\"_ZN4llvmL14OperandInfo126E\", \"llvm::OperandInfo126\"},\n    {\"_ZN4llvmL14OperandInfo127E\", \"llvm::OperandInfo127\"},\n    {\"_ZN4llvmL14OperandInfo128E\", \"llvm::OperandInfo128\"},\n    {\"_ZN4llvmL14OperandInfo129E\", \"llvm::OperandInfo129\"},\n    {\"_ZN4llvmL14OperandInfo130E\", \"llvm::OperandInfo130\"},\n    {\"_ZN4llvmL14OperandInfo131E\", \"llvm::OperandInfo131\"},\n    {\"_ZN4llvmL14OperandInfo132E\", \"llvm::OperandInfo132\"},\n    {\"_ZN4llvmL14OperandInfo133E\", \"llvm::OperandInfo133\"},\n    {\"_ZN4llvmL14OperandInfo134E\", \"llvm::OperandInfo134\"},\n    {\"_ZN4llvmL14OperandInfo135E\", \"llvm::OperandInfo135\"},\n    {\"_ZN4llvmL14OperandInfo136E\", \"llvm::OperandInfo136\"},\n    {\"_ZN4llvmL14OperandInfo137E\", \"llvm::OperandInfo137\"},\n    {\"_ZN4llvmL14OperandInfo138E\", \"llvm::OperandInfo138\"},\n    {\"_ZN4llvmL14OperandInfo139E\", \"llvm::OperandInfo139\"},\n    {\"_ZN4llvmL14OperandInfo140E\", \"llvm::OperandInfo140\"},\n    {\"_ZN4llvmL14OperandInfo141E\", \"llvm::OperandInfo141\"},\n    {\"_ZN4llvmL14OperandInfo142E\", \"llvm::OperandInfo142\"},\n    {\"_ZN4llvmL14OperandInfo143E\", \"llvm::OperandInfo143\"},\n    {\"_ZN4llvmL14OperandInfo144E\", \"llvm::OperandInfo144\"},\n    {\"_ZN4llvmL14OperandInfo145E\", \"llvm::OperandInfo145\"},\n    {\"_ZN4llvmL14OperandInfo146E\", \"llvm::OperandInfo146\"},\n    {\"_ZN4llvmL14OperandInfo147E\", \"llvm::OperandInfo147\"},\n    {\"_ZN4llvmL14OperandInfo148E\", \"llvm::OperandInfo148\"},\n    {\"_ZN4llvmL14OperandInfo149E\", \"llvm::OperandInfo149\"},\n    {\"_ZN4llvmL14OperandInfo150E\", \"llvm::OperandInfo150\"},\n    {\"_ZN4llvmL14OperandInfo151E\", \"llvm::OperandInfo151\"},\n    {\"_ZN4llvmL14OperandInfo152E\", \"llvm::OperandInfo152\"},\n    {\"_ZN4llvmL14OperandInfo153E\", \"llvm::OperandInfo153\"},\n    {\"_ZN4llvmL14OperandInfo154E\", \"llvm::OperandInfo154\"},\n    {\"_ZN4llvmL14OperandInfo155E\", \"llvm::OperandInfo155\"},\n    {\"_ZN4llvmL14OperandInfo156E\", \"llvm::OperandInfo156\"},\n    {\"_ZN4llvmL14OperandInfo157E\", \"llvm::OperandInfo157\"},\n    {\"_ZN4llvmL14OperandInfo158E\", \"llvm::OperandInfo158\"},\n    {\"_ZN4llvmL14OperandInfo159E\", \"llvm::OperandInfo159\"},\n    {\"_ZN4llvmL14OperandInfo160E\", \"llvm::OperandInfo160\"},\n    {\"_ZN4llvmL14OperandInfo161E\", \"llvm::OperandInfo161\"},\n    {\"_ZN4llvmL14OperandInfo162E\", \"llvm::OperandInfo162\"},\n    {\"_ZN4llvmL14OperandInfo163E\", \"llvm::OperandInfo163\"},\n    {\"_ZN4llvmL14OperandInfo164E\", \"llvm::OperandInfo164\"},\n    {\"_ZN4llvmL14OperandInfo165E\", \"llvm::OperandInfo165\"},\n    {\"_ZN4llvmL14OperandInfo166E\", \"llvm::OperandInfo166\"},\n    {\"_ZN4llvmL14OperandInfo167E\", \"llvm::OperandInfo167\"},\n    {\"_ZN4llvmL14OperandInfo168E\", \"llvm::OperandInfo168\"},\n    {\"_ZN4llvmL14OperandInfo169E\", \"llvm::OperandInfo169\"},\n    {\"_ZN4llvmL14OperandInfo170E\", \"llvm::OperandInfo170\"},\n    {\"_ZN4llvmL14OperandInfo171E\", \"llvm::OperandInfo171\"},\n    {\"_ZN4llvmL14OperandInfo172E\", \"llvm::OperandInfo172\"},\n    {\"_ZN4llvmL14OperandInfo173E\", \"llvm::OperandInfo173\"},\n    {\"_ZN4llvmL14OperandInfo174E\", \"llvm::OperandInfo174\"},\n    {\"_ZN4llvmL14OperandInfo175E\", \"llvm::OperandInfo175\"},\n    {\"_ZN4llvmL14OperandInfo176E\", \"llvm::OperandInfo176\"},\n    {\"_ZN4llvmL14OperandInfo177E\", \"llvm::OperandInfo177\"},\n    {\"_ZN4llvmL14OperandInfo178E\", \"llvm::OperandInfo178\"},\n    {\"_ZN4llvmL14OperandInfo179E\", \"llvm::OperandInfo179\"},\n    {\"_ZN4llvmL14OperandInfo180E\", \"llvm::OperandInfo180\"},\n    {\"_ZN4llvmL14OperandInfo181E\", \"llvm::OperandInfo181\"},\n    {\"_ZN4llvmL14OperandInfo182E\", \"llvm::OperandInfo182\"},\n    {\"_ZN4llvmL14OperandInfo183E\", \"llvm::OperandInfo183\"},\n    {\"_ZN4llvmL14OperandInfo184E\", \"llvm::OperandInfo184\"},\n    {\"_ZN4llvmL14OperandInfo185E\", \"llvm::OperandInfo185\"},\n    {\"_ZN4llvmL14OperandInfo186E\", \"llvm::OperandInfo186\"},\n    {\"_ZN4llvmL14OperandInfo187E\", \"llvm::OperandInfo187\"},\n    {\"_ZN4llvmL14OperandInfo188E\", \"llvm::OperandInfo188\"},\n    {\"_ZN4llvmL14OperandInfo189E\", \"llvm::OperandInfo189\"},\n    {\"_ZN4llvmL14OperandInfo190E\", \"llvm::OperandInfo190\"},\n    {\"_ZN4llvmL14OperandInfo191E\", \"llvm::OperandInfo191\"},\n    {\"_ZN4llvmL14OperandInfo192E\", \"llvm::OperandInfo192\"},\n    {\"_ZN4llvmL14OperandInfo193E\", \"llvm::OperandInfo193\"},\n    {\"_ZN4llvmL14OperandInfo194E\", \"llvm::OperandInfo194\"},\n    {\"_ZN4llvmL14OperandInfo195E\", \"llvm::OperandInfo195\"},\n    {\"_ZN4llvmL14OperandInfo196E\", \"llvm::OperandInfo196\"},\n    {\"_ZN4llvmL14OperandInfo197E\", \"llvm::OperandInfo197\"},\n    {\"_ZN4llvmL14OperandInfo198E\", \"llvm::OperandInfo198\"},\n    {\"_ZN4llvmL14OperandInfo199E\", \"llvm::OperandInfo199\"},\n    {\"_ZN4llvmL14OperandInfo200E\", \"llvm::OperandInfo200\"},\n    {\"_ZN4llvmL14OperandInfo201E\", \"llvm::OperandInfo201\"},\n    {\"_ZN4llvmL14OperandInfo202E\", \"llvm::OperandInfo202\"},\n    {\"_ZN4llvmL14OperandInfo203E\", \"llvm::OperandInfo203\"},\n    {\"_ZN4llvmL14OperandInfo204E\", \"llvm::OperandInfo204\"},\n    {\"_ZN4llvmL14OperandInfo205E\", \"llvm::OperandInfo205\"},\n    {\"_ZN4llvmL14OperandInfo206E\", \"llvm::OperandInfo206\"},\n    {\"_ZN4llvmL14OperandInfo207E\", \"llvm::OperandInfo207\"},\n    {\"_ZN4llvmL14OperandInfo208E\", \"llvm::OperandInfo208\"},\n    {\"_ZN4llvmL14OperandInfo209E\", \"llvm::OperandInfo209\"},\n    {\"_ZN4llvmL14OperandInfo210E\", \"llvm::OperandInfo210\"},\n    {\"_ZN4llvmL14OperandInfo211E\", \"llvm::OperandInfo211\"},\n    {\"_ZN4llvmL14OperandInfo212E\", \"llvm::OperandInfo212\"},\n    {\"_ZN4llvmL14OperandInfo213E\", \"llvm::OperandInfo213\"},\n    {\"_ZN4llvmL14OperandInfo214E\", \"llvm::OperandInfo214\"},\n    {\"_ZN4llvmL14OperandInfo215E\", \"llvm::OperandInfo215\"},\n    {\"_ZN4llvmL14OperandInfo216E\", \"llvm::OperandInfo216\"},\n    {\"_ZN4llvmL14OperandInfo217E\", \"llvm::OperandInfo217\"},\n    {\"_ZN4llvmL14OperandInfo218E\", \"llvm::OperandInfo218\"},\n    {\"_ZN4llvmL14OperandInfo219E\", \"llvm::OperandInfo219\"},\n    {\"_ZN4llvmL14OperandInfo220E\", \"llvm::OperandInfo220\"},\n    {\"_ZN4llvmL14OperandInfo221E\", \"llvm::OperandInfo221\"},\n    {\"_ZN4llvmL14OperandInfo222E\", \"llvm::OperandInfo222\"},\n    {\"_ZN4llvmL14OperandInfo223E\", \"llvm::OperandInfo223\"},\n    {\"_ZN4llvmL14OperandInfo224E\", \"llvm::OperandInfo224\"},\n    {\"_ZN4llvmL14OperandInfo225E\", \"llvm::OperandInfo225\"},\n    {\"_ZN4llvmL14OperandInfo226E\", \"llvm::OperandInfo226\"},\n    {\"_ZN4llvmL14OperandInfo227E\", \"llvm::OperandInfo227\"},\n    {\"_ZN4llvmL14OperandInfo228E\", \"llvm::OperandInfo228\"},\n    {\"_ZN4llvmL14OperandInfo229E\", \"llvm::OperandInfo229\"},\n    {\"_ZN4llvmL14OperandInfo230E\", \"llvm::OperandInfo230\"},\n    {\"_ZN4llvmL14OperandInfo231E\", \"llvm::OperandInfo231\"},\n    {\"_ZN4llvmL14OperandInfo232E\", \"llvm::OperandInfo232\"},\n    {\"_ZN4llvmL14OperandInfo233E\", \"llvm::OperandInfo233\"},\n    {\"_ZN4llvmL14OperandInfo234E\", \"llvm::OperandInfo234\"},\n    {\"_ZN4llvmL14OperandInfo235E\", \"llvm::OperandInfo235\"},\n    {\"_ZN4llvmL14OperandInfo236E\", \"llvm::OperandInfo236\"},\n    {\"_ZN4llvmL14OperandInfo237E\", \"llvm::OperandInfo237\"},\n    {\"_ZN4llvmL14OperandInfo238E\", \"llvm::OperandInfo238\"},\n    {\"_ZN4llvmL14OperandInfo239E\", \"llvm::OperandInfo239\"},\n    {\"_ZN4llvmL14OperandInfo240E\", \"llvm::OperandInfo240\"},\n    {\"_ZN4llvmL14OperandInfo241E\", \"llvm::OperandInfo241\"},\n    {\"_ZN4llvmL14OperandInfo242E\", \"llvm::OperandInfo242\"},\n    {\"_ZN4llvmL14OperandInfo243E\", \"llvm::OperandInfo243\"},\n    {\"_ZN4llvmL14OperandInfo244E\", \"llvm::OperandInfo244\"},\n    {\"_ZN4llvmL14OperandInfo245E\", \"llvm::OperandInfo245\"},\n    {\"_ZN4llvmL14OperandInfo246E\", \"llvm::OperandInfo246\"},\n    {\"_ZN4llvmL14OperandInfo247E\", \"llvm::OperandInfo247\"},\n    {\"_ZN4llvmL14OperandInfo248E\", \"llvm::OperandInfo248\"},\n    {\"_ZN4llvmL14OperandInfo249E\", \"llvm::OperandInfo249\"},\n    {\"_ZN4llvmL14OperandInfo250E\", \"llvm::OperandInfo250\"},\n    {\"_ZN4llvmL14OperandInfo251E\", \"llvm::OperandInfo251\"},\n    {\"_ZN4llvmL14OperandInfo252E\", \"llvm::OperandInfo252\"},\n    {\"_ZN4llvmL14OperandInfo253E\", \"llvm::OperandInfo253\"},\n    {\"_ZN4llvmL14OperandInfo254E\", \"llvm::OperandInfo254\"},\n    {\"_ZN4llvmL14OperandInfo255E\", \"llvm::OperandInfo255\"},\n    {\"_ZN4llvmL14OperandInfo256E\", \"llvm::OperandInfo256\"},\n    {\"_ZN4llvmL14OperandInfo257E\", \"llvm::OperandInfo257\"},\n    {\"_ZN4llvmL14OperandInfo258E\", \"llvm::OperandInfo258\"},\n    {\"_ZN4llvmL14OperandInfo259E\", \"llvm::OperandInfo259\"},\n    {\"_ZN4llvmL14OperandInfo260E\", \"llvm::OperandInfo260\"},\n    {\"_ZN4llvmL14OperandInfo261E\", \"llvm::OperandInfo261\"},\n    {\"_ZN4llvmL8X86InstsE\", \"llvm::X86Insts\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L19RegisterDescriptorsE\", \"llvm::(anonymous namespace)::RegisterDescriptors\"},\n    {\"_ZL9SubTypeKV\", \"SubTypeKV\"},\n    {\"_ZL9FeatureKV\", \"FeatureKV\"},\n    {\"_ZL10MatchTable\", \"MatchTable\"},\n    {\"_ZL17OperandMatchTable\", \"OperandMatchTable\"},\n    {\"_ZN4llvmL9Barriers1E\", \"llvm::Barriers1\"},\n    {\"_ZN4llvmL9Barriers2E\", \"llvm::Barriers2\"},\n    {\"_ZN4llvmL9Barriers3E\", \"llvm::Barriers3\"},\n    {\"_ZN4llvmL9Barriers4E\", \"llvm::Barriers4\"},\n    {\"_ZN4llvmL9Barriers5E\", \"llvm::Barriers5\"},\n    {\"_ZN4llvmL9Barriers6E\", \"llvm::Barriers6\"},\n    {\"_ZN4llvmL9Barriers7E\", \"llvm::Barriers7\"},\n    {\"_ZN4llvmL9Barriers8E\", \"llvm::Barriers8\"},\n    {\"_ZN4llvmL12OperandInfo2E\", \"llvm::OperandInfo2\"},\n    {\"_ZN4llvmL12OperandInfo3E\", \"llvm::OperandInfo3\"},\n    {\"_ZN4llvmL12OperandInfo4E\", \"llvm::OperandInfo4\"},\n    {\"_ZN4llvmL12OperandInfo5E\", \"llvm::OperandInfo5\"},\n    {\"_ZN4llvmL12OperandInfo6E\", \"llvm::OperandInfo6\"},\n    {\"_ZN4llvmL12OperandInfo7E\", \"llvm::OperandInfo7\"},\n    {\"_ZN4llvmL12OperandInfo8E\", \"llvm::OperandInfo8\"},\n    {\"_ZN4llvmL12OperandInfo9E\", \"llvm::OperandInfo9\"},\n    {\"_ZN4llvmL13OperandInfo10E\", \"llvm::OperandInfo10\"},\n    {\"_ZN4llvmL13OperandInfo11E\", \"llvm::OperandInfo11\"},\n    {\"_ZN4llvmL13OperandInfo12E\", \"llvm::OperandInfo12\"},\n    {\"_ZN4llvmL13OperandInfo13E\", \"llvm::OperandInfo13\"},\n    {\"_ZN4llvmL13OperandInfo14E\", \"llvm::OperandInfo14\"},\n    {\"_ZN4llvmL13OperandInfo15E\", \"llvm::OperandInfo15\"},\n    {\"_ZN4llvmL13OperandInfo16E\", \"llvm::OperandInfo16\"},\n    {\"_ZN4llvmL13OperandInfo17E\", \"llvm::OperandInfo17\"},\n    {\"_ZN4llvmL13OperandInfo18E\", \"llvm::OperandInfo18\"},\n    {\"_ZN4llvmL13OperandInfo19E\", \"llvm::OperandInfo19\"},\n    {\"_ZN4llvmL13OperandInfo20E\", \"llvm::OperandInfo20\"},\n    {\"_ZN4llvmL13OperandInfo21E\", \"llvm::OperandInfo21\"},\n    {\"_ZN4llvmL13OperandInfo22E\", \"llvm::OperandInfo22\"},\n    {\"_ZN4llvmL13OperandInfo23E\", \"llvm::OperandInfo23\"},\n    {\"_ZN4llvmL13OperandInfo24E\", \"llvm::OperandInfo24\"},\n    {\"_ZN4llvmL13OperandInfo25E\", \"llvm::OperandInfo25\"},\n    {\"_ZN4llvmL13OperandInfo26E\", \"llvm::OperandInfo26\"},\n    {\"_ZN4llvmL13OperandInfo27E\", \"llvm::OperandInfo27\"},\n    {\"_ZN4llvmL13OperandInfo28E\", \"llvm::OperandInfo28\"},\n    {\"_ZN4llvmL13OperandInfo29E\", \"llvm::OperandInfo29\"},\n    {\"_ZN4llvmL13OperandInfo30E\", \"llvm::OperandInfo30\"},\n    {\"_ZN4llvmL13OperandInfo31E\", \"llvm::OperandInfo31\"},\n    {\"_ZN4llvmL13OperandInfo32E\", \"llvm::OperandInfo32\"},\n    {\"_ZN4llvmL13OperandInfo33E\", \"llvm::OperandInfo33\"},\n    {\"_ZN4llvmL13OperandInfo34E\", \"llvm::OperandInfo34\"},\n    {\"_ZN4llvmL13OperandInfo35E\", \"llvm::OperandInfo35\"},\n    {\"_ZN4llvmL13OperandInfo36E\", \"llvm::OperandInfo36\"},\n    {\"_ZN4llvmL13OperandInfo37E\", \"llvm::OperandInfo37\"},\n    {\"_ZN4llvmL13OperandInfo38E\", \"llvm::OperandInfo38\"},\n    {\"_ZN4llvmL13OperandInfo39E\", \"llvm::OperandInfo39\"},\n    {\"_ZN4llvmL13OperandInfo40E\", \"llvm::OperandInfo40\"},\n    {\"_ZN4llvmL13OperandInfo41E\", \"llvm::OperandInfo41\"},\n    {\"_ZN4llvmL13OperandInfo42E\", \"llvm::OperandInfo42\"},\n    {\"_ZN4llvmL13OperandInfo43E\", \"llvm::OperandInfo43\"},\n    {\"_ZN4llvmL13OperandInfo44E\", \"llvm::OperandInfo44\"},\n    {\"_ZN4llvmL13OperandInfo45E\", \"llvm::OperandInfo45\"},\n    {\"_ZN4llvmL13OperandInfo46E\", \"llvm::OperandInfo46\"},\n    {\"_ZN4llvmL13OperandInfo47E\", \"llvm::OperandInfo47\"},\n    {\"_ZN4llvmL13OperandInfo48E\", \"llvm::OperandInfo48\"},\n    {\"_ZN4llvmL13OperandInfo49E\", \"llvm::OperandInfo49\"},\n    {\"_ZN4llvmL13OperandInfo50E\", \"llvm::OperandInfo50\"},\n    {\"_ZN4llvmL13OperandInfo51E\", \"llvm::OperandInfo51\"},\n    {\"_ZN4llvmL13OperandInfo52E\", \"llvm::OperandInfo52\"},\n    {\"_ZN4llvmL13OperandInfo53E\", \"llvm::OperandInfo53\"},\n    {\"_ZN4llvmL13OperandInfo54E\", \"llvm::OperandInfo54\"},\n    {\"_ZN4llvmL13OperandInfo55E\", \"llvm::OperandInfo55\"},\n    {\"_ZN4llvmL13OperandInfo56E\", \"llvm::OperandInfo56\"},\n    {\"_ZN4llvmL13OperandInfo57E\", \"llvm::OperandInfo57\"},\n    {\"_ZN4llvmL13OperandInfo58E\", \"llvm::OperandInfo58\"},\n    {\"_ZN4llvmL13OperandInfo59E\", \"llvm::OperandInfo59\"},\n    {\"_ZN4llvmL13OperandInfo60E\", \"llvm::OperandInfo60\"},\n    {\"_ZN4llvmL13OperandInfo61E\", \"llvm::OperandInfo61\"},\n    {\"_ZN4llvmL13OperandInfo62E\", \"llvm::OperandInfo62\"},\n    {\"_ZN4llvmL13OperandInfo63E\", \"llvm::OperandInfo63\"},\n    {\"_ZN4llvmL13OperandInfo64E\", \"llvm::OperandInfo64\"},\n    {\"_ZN4llvmL13OperandInfo65E\", \"llvm::OperandInfo65\"},\n    {\"_ZN4llvmL13OperandInfo66E\", \"llvm::OperandInfo66\"},\n    {\"_ZN4llvmL13OperandInfo67E\", \"llvm::OperandInfo67\"},\n    {\"_ZN4llvmL13OperandInfo68E\", \"llvm::OperandInfo68\"},\n    {\"_ZN4llvmL13OperandInfo69E\", \"llvm::OperandInfo69\"},\n    {\"_ZN4llvmL13OperandInfo70E\", \"llvm::OperandInfo70\"},\n    {\"_ZN4llvmL13OperandInfo71E\", \"llvm::OperandInfo71\"},\n    {\"_ZN4llvmL13OperandInfo72E\", \"llvm::OperandInfo72\"},\n    {\"_ZN4llvmL13OperandInfo73E\", \"llvm::OperandInfo73\"},\n    {\"_ZN4llvmL13OperandInfo74E\", \"llvm::OperandInfo74\"},\n    {\"_ZN4llvmL13OperandInfo75E\", \"llvm::OperandInfo75\"},\n    {\"_ZN4llvmL13OperandInfo76E\", \"llvm::OperandInfo76\"},\n    {\"_ZN4llvmL13OperandInfo77E\", \"llvm::OperandInfo77\"},\n    {\"_ZN4llvmL13OperandInfo78E\", \"llvm::OperandInfo78\"},\n    {\"_ZN4llvmL13OperandInfo79E\", \"llvm::OperandInfo79\"},\n    {\"_ZN4llvmL13OperandInfo80E\", \"llvm::OperandInfo80\"},\n    {\"_ZN4llvmL13OperandInfo81E\", \"llvm::OperandInfo81\"},\n    {\"_ZN4llvmL13OperandInfo82E\", \"llvm::OperandInfo82\"},\n    {\"_ZN4llvmL13OperandInfo83E\", \"llvm::OperandInfo83\"},\n    {\"_ZN4llvmL13OperandInfo84E\", \"llvm::OperandInfo84\"},\n    {\"_ZN4llvmL13OperandInfo85E\", \"llvm::OperandInfo85\"},\n    {\"_ZN4llvmL13OperandInfo86E\", \"llvm::OperandInfo86\"},\n    {\"_ZN4llvmL13OperandInfo87E\", \"llvm::OperandInfo87\"},\n    {\"_ZN4llvmL13OperandInfo88E\", \"llvm::OperandInfo88\"},\n    {\"_ZN4llvmL13OperandInfo89E\", \"llvm::OperandInfo89\"},\n    {\"_ZN4llvmL13OperandInfo90E\", \"llvm::OperandInfo90\"},\n    {\"_ZN4llvmL13OperandInfo91E\", \"llvm::OperandInfo91\"},\n    {\"_ZN4llvmL13OperandInfo92E\", \"llvm::OperandInfo92\"},\n    {\"_ZN4llvmL13OperandInfo93E\", \"llvm::OperandInfo93\"},\n    {\"_ZN4llvmL13OperandInfo94E\", \"llvm::OperandInfo94\"},\n    {\"_ZN4llvmL13OperandInfo95E\", \"llvm::OperandInfo95\"},\n    {\"_ZN4llvmL13OperandInfo96E\", \"llvm::OperandInfo96\"},\n    {\"_ZN4llvmL13OperandInfo97E\", \"llvm::OperandInfo97\"},\n    {\"_ZN4llvmL13OperandInfo98E\", \"llvm::OperandInfo98\"},\n    {\"_ZN4llvmL13OperandInfo99E\", \"llvm::OperandInfo99\"},\n    {\"_ZN4llvmL14OperandInfo100E\", \"llvm::OperandInfo100\"},\n    {\"_ZN4llvmL14OperandInfo101E\", \"llvm::OperandInfo101\"},\n    {\"_ZN4llvmL14OperandInfo102E\", \"llvm::OperandInfo102\"},\n    {\"_ZN4llvmL14OperandInfo103E\", \"llvm::OperandInfo103\"},\n    {\"_ZN4llvmL14OperandInfo104E\", \"llvm::OperandInfo104\"},\n    {\"_ZN4llvmL14OperandInfo105E\", \"llvm::OperandInfo105\"},\n    {\"_ZN4llvmL14OperandInfo106E\", \"llvm::OperandInfo106\"},\n    {\"_ZN4llvmL14OperandInfo107E\", \"llvm::OperandInfo107\"},\n    {\"_ZN4llvmL14OperandInfo108E\", \"llvm::OperandInfo108\"},\n    {\"_ZN4llvmL14OperandInfo109E\", \"llvm::OperandInfo109\"},\n    {\"_ZN4llvmL14OperandInfo110E\", \"llvm::OperandInfo110\"},\n    {\"_ZN4llvmL14OperandInfo111E\", \"llvm::OperandInfo111\"},\n    {\"_ZN4llvmL14OperandInfo112E\", \"llvm::OperandInfo112\"},\n    {\"_ZN4llvmL14OperandInfo113E\", \"llvm::OperandInfo113\"},\n    {\"_ZN4llvmL14OperandInfo114E\", \"llvm::OperandInfo114\"},\n    {\"_ZN4llvmL14OperandInfo115E\", \"llvm::OperandInfo115\"},\n    {\"_ZN4llvmL14OperandInfo116E\", \"llvm::OperandInfo116\"},\n    {\"_ZN4llvmL14OperandInfo117E\", \"llvm::OperandInfo117\"},\n    {\"_ZN4llvmL14OperandInfo118E\", \"llvm::OperandInfo118\"},\n    {\"_ZN4llvmL14OperandInfo119E\", \"llvm::OperandInfo119\"},\n    {\"_ZN4llvmL14OperandInfo120E\", \"llvm::OperandInfo120\"},\n    {\"_ZN4llvmL14OperandInfo121E\", \"llvm::OperandInfo121\"},\n    {\"_ZN4llvmL14OperandInfo122E\", \"llvm::OperandInfo122\"},\n    {\"_ZN4llvmL14OperandInfo123E\", \"llvm::OperandInfo123\"},\n    {\"_ZN4llvmL14OperandInfo124E\", \"llvm::OperandInfo124\"},\n    {\"_ZN4llvmL14OperandInfo125E\", \"llvm::OperandInfo125\"},\n    {\"_ZN4llvmL14OperandInfo126E\", \"llvm::OperandInfo126\"},\n    {\"_ZN4llvmL14OperandInfo127E\", \"llvm::OperandInfo127\"},\n    {\"_ZN4llvmL14OperandInfo128E\", \"llvm::OperandInfo128\"},\n    {\"_ZN4llvmL14OperandInfo129E\", \"llvm::OperandInfo129\"},\n    {\"_ZN4llvmL14OperandInfo130E\", \"llvm::OperandInfo130\"},\n    {\"_ZN4llvmL14OperandInfo131E\", \"llvm::OperandInfo131\"},\n    {\"_ZN4llvmL14OperandInfo132E\", \"llvm::OperandInfo132\"},\n    {\"_ZN4llvmL14OperandInfo133E\", \"llvm::OperandInfo133\"},\n    {\"_ZN4llvmL14OperandInfo134E\", \"llvm::OperandInfo134\"},\n    {\"_ZN4llvmL14OperandInfo135E\", \"llvm::OperandInfo135\"},\n    {\"_ZN4llvmL14OperandInfo136E\", \"llvm::OperandInfo136\"},\n    {\"_ZN4llvmL14OperandInfo137E\", \"llvm::OperandInfo137\"},\n    {\"_ZN4llvmL14OperandInfo138E\", \"llvm::OperandInfo138\"},\n    {\"_ZN4llvmL14OperandInfo139E\", \"llvm::OperandInfo139\"},\n    {\"_ZN4llvmL14OperandInfo140E\", \"llvm::OperandInfo140\"},\n    {\"_ZN4llvmL14OperandInfo141E\", \"llvm::OperandInfo141\"},\n    {\"_ZN4llvmL14OperandInfo142E\", \"llvm::OperandInfo142\"},\n    {\"_ZN4llvmL14OperandInfo143E\", \"llvm::OperandInfo143\"},\n    {\"_ZN4llvmL14OperandInfo144E\", \"llvm::OperandInfo144\"},\n    {\"_ZN4llvmL14OperandInfo145E\", \"llvm::OperandInfo145\"},\n    {\"_ZN4llvmL14OperandInfo146E\", \"llvm::OperandInfo146\"},\n    {\"_ZN4llvmL14OperandInfo147E\", \"llvm::OperandInfo147\"},\n    {\"_ZN4llvmL14OperandInfo148E\", \"llvm::OperandInfo148\"},\n    {\"_ZN4llvmL14OperandInfo149E\", \"llvm::OperandInfo149\"},\n    {\"_ZN4llvmL14OperandInfo150E\", \"llvm::OperandInfo150\"},\n    {\"_ZN4llvmL14OperandInfo151E\", \"llvm::OperandInfo151\"},\n    {\"_ZN4llvmL14OperandInfo152E\", \"llvm::OperandInfo152\"},\n    {\"_ZN4llvmL14OperandInfo153E\", \"llvm::OperandInfo153\"},\n    {\"_ZN4llvmL14OperandInfo154E\", \"llvm::OperandInfo154\"},\n    {\"_ZN4llvmL14OperandInfo155E\", \"llvm::OperandInfo155\"},\n    {\"_ZN4llvmL14OperandInfo156E\", \"llvm::OperandInfo156\"},\n    {\"_ZN4llvmL14OperandInfo157E\", \"llvm::OperandInfo157\"},\n    {\"_ZN4llvmL14OperandInfo158E\", \"llvm::OperandInfo158\"},\n    {\"_ZN4llvmL14OperandInfo159E\", \"llvm::OperandInfo159\"},\n    {\"_ZN4llvmL14OperandInfo160E\", \"llvm::OperandInfo160\"},\n    {\"_ZN4llvmL14OperandInfo161E\", \"llvm::OperandInfo161\"},\n    {\"_ZN4llvmL14OperandInfo162E\", \"llvm::OperandInfo162\"},\n    {\"_ZN4llvmL14OperandInfo163E\", \"llvm::OperandInfo163\"},\n    {\"_ZN4llvmL14OperandInfo164E\", \"llvm::OperandInfo164\"},\n    {\"_ZN4llvmL14OperandInfo165E\", \"llvm::OperandInfo165\"},\n    {\"_ZN4llvmL14OperandInfo166E\", \"llvm::OperandInfo166\"},\n    {\"_ZN4llvmL14OperandInfo167E\", \"llvm::OperandInfo167\"},\n    {\"_ZN4llvmL14OperandInfo168E\", \"llvm::OperandInfo168\"},\n    {\"_ZN4llvmL14OperandInfo169E\", \"llvm::OperandInfo169\"},\n    {\"_ZN4llvmL14OperandInfo170E\", \"llvm::OperandInfo170\"},\n    {\"_ZN4llvmL14OperandInfo171E\", \"llvm::OperandInfo171\"},\n    {\"_ZN4llvmL14OperandInfo172E\", \"llvm::OperandInfo172\"},\n    {\"_ZN4llvmL14OperandInfo173E\", \"llvm::OperandInfo173\"},\n    {\"_ZN4llvmL14OperandInfo174E\", \"llvm::OperandInfo174\"},\n    {\"_ZN4llvmL14OperandInfo175E\", \"llvm::OperandInfo175\"},\n    {\"_ZN4llvmL14OperandInfo176E\", \"llvm::OperandInfo176\"},\n    {\"_ZN4llvmL14OperandInfo177E\", \"llvm::OperandInfo177\"},\n    {\"_ZN4llvmL14OperandInfo178E\", \"llvm::OperandInfo178\"},\n    {\"_ZN4llvmL14OperandInfo179E\", \"llvm::OperandInfo179\"},\n    {\"_ZN4llvmL14OperandInfo180E\", \"llvm::OperandInfo180\"},\n    {\"_ZN4llvmL14OperandInfo181E\", \"llvm::OperandInfo181\"},\n    {\"_ZN4llvmL14OperandInfo182E\", \"llvm::OperandInfo182\"},\n    {\"_ZN4llvmL14OperandInfo183E\", \"llvm::OperandInfo183\"},\n    {\"_ZN4llvmL14OperandInfo184E\", \"llvm::OperandInfo184\"},\n    {\"_ZN4llvmL14OperandInfo185E\", \"llvm::OperandInfo185\"},\n    {\"_ZN4llvmL14OperandInfo186E\", \"llvm::OperandInfo186\"},\n    {\"_ZN4llvmL14OperandInfo187E\", \"llvm::OperandInfo187\"},\n    {\"_ZN4llvmL14OperandInfo188E\", \"llvm::OperandInfo188\"},\n    {\"_ZN4llvmL14OperandInfo189E\", \"llvm::OperandInfo189\"},\n    {\"_ZN4llvmL14OperandInfo190E\", \"llvm::OperandInfo190\"},\n    {\"_ZN4llvmL14OperandInfo191E\", \"llvm::OperandInfo191\"},\n    {\"_ZN4llvmL14OperandInfo192E\", \"llvm::OperandInfo192\"},\n    {\"_ZN4llvmL14OperandInfo193E\", \"llvm::OperandInfo193\"},\n    {\"_ZN4llvmL14OperandInfo194E\", \"llvm::OperandInfo194\"},\n    {\"_ZN4llvmL14OperandInfo195E\", \"llvm::OperandInfo195\"},\n    {\"_ZN4llvmL14OperandInfo196E\", \"llvm::OperandInfo196\"},\n    {\"_ZN4llvmL14OperandInfo197E\", \"llvm::OperandInfo197\"},\n    {\"_ZN4llvmL14OperandInfo198E\", \"llvm::OperandInfo198\"},\n    {\"_ZN4llvmL14OperandInfo199E\", \"llvm::OperandInfo199\"},\n    {\"_ZN4llvmL14OperandInfo200E\", \"llvm::OperandInfo200\"},\n    {\"_ZN4llvmL14OperandInfo201E\", \"llvm::OperandInfo201\"},\n    {\"_ZN4llvmL14OperandInfo202E\", \"llvm::OperandInfo202\"},\n    {\"_ZN4llvmL14OperandInfo203E\", \"llvm::OperandInfo203\"},\n    {\"_ZN4llvmL14OperandInfo204E\", \"llvm::OperandInfo204\"},\n    {\"_ZN4llvmL14OperandInfo205E\", \"llvm::OperandInfo205\"},\n    {\"_ZN4llvmL14OperandInfo206E\", \"llvm::OperandInfo206\"},\n    {\"_ZN4llvmL14OperandInfo207E\", \"llvm::OperandInfo207\"},\n    {\"_ZN4llvmL14OperandInfo208E\", \"llvm::OperandInfo208\"},\n    {\"_ZN4llvmL14OperandInfo209E\", \"llvm::OperandInfo209\"},\n    {\"_ZN4llvmL14OperandInfo210E\", \"llvm::OperandInfo210\"},\n    {\"_ZN4llvmL14OperandInfo211E\", \"llvm::OperandInfo211\"},\n    {\"_ZN4llvmL14OperandInfo212E\", \"llvm::OperandInfo212\"},\n    {\"_ZN4llvmL14OperandInfo213E\", \"llvm::OperandInfo213\"},\n    {\"_ZN4llvmL14OperandInfo214E\", \"llvm::OperandInfo214\"},\n    {\"_ZN4llvmL14OperandInfo215E\", \"llvm::OperandInfo215\"},\n    {\"_ZN4llvmL14OperandInfo216E\", \"llvm::OperandInfo216\"},\n    {\"_ZN4llvmL14OperandInfo217E\", \"llvm::OperandInfo217\"},\n    {\"_ZN4llvmL14OperandInfo218E\", \"llvm::OperandInfo218\"},\n    {\"_ZN4llvmL14OperandInfo219E\", \"llvm::OperandInfo219\"},\n    {\"_ZN4llvmL14OperandInfo220E\", \"llvm::OperandInfo220\"},\n    {\"_ZN4llvmL14OperandInfo221E\", \"llvm::OperandInfo221\"},\n    {\"_ZN4llvmL14OperandInfo222E\", \"llvm::OperandInfo222\"},\n    {\"_ZN4llvmL14OperandInfo223E\", \"llvm::OperandInfo223\"},\n    {\"_ZN4llvmL14OperandInfo224E\", \"llvm::OperandInfo224\"},\n    {\"_ZN4llvmL14OperandInfo225E\", \"llvm::OperandInfo225\"},\n    {\"_ZN4llvmL14OperandInfo226E\", \"llvm::OperandInfo226\"},\n    {\"_ZN4llvmL14OperandInfo227E\", \"llvm::OperandInfo227\"},\n    {\"_ZN4llvmL14OperandInfo228E\", \"llvm::OperandInfo228\"},\n    {\"_ZN4llvmL14OperandInfo229E\", \"llvm::OperandInfo229\"},\n    {\"_ZN4llvmL14OperandInfo230E\", \"llvm::OperandInfo230\"},\n    {\"_ZN4llvmL14OperandInfo231E\", \"llvm::OperandInfo231\"},\n    {\"_ZN4llvmL14OperandInfo232E\", \"llvm::OperandInfo232\"},\n    {\"_ZN4llvmL14OperandInfo233E\", \"llvm::OperandInfo233\"},\n    {\"_ZN4llvmL14OperandInfo234E\", \"llvm::OperandInfo234\"},\n    {\"_ZN4llvmL14OperandInfo235E\", \"llvm::OperandInfo235\"},\n    {\"_ZN4llvmL14OperandInfo236E\", \"llvm::OperandInfo236\"},\n    {\"_ZN4llvmL14OperandInfo237E\", \"llvm::OperandInfo237\"},\n    {\"_ZN4llvmL14OperandInfo238E\", \"llvm::OperandInfo238\"},\n    {\"_ZN4llvmL14OperandInfo239E\", \"llvm::OperandInfo239\"},\n    {\"_ZN4llvmL14OperandInfo240E\", \"llvm::OperandInfo240\"},\n    {\"_ZN4llvmL14OperandInfo241E\", \"llvm::OperandInfo241\"},\n    {\"_ZN4llvmL14OperandInfo242E\", \"llvm::OperandInfo242\"},\n    {\"_ZN4llvmL14OperandInfo243E\", \"llvm::OperandInfo243\"},\n    {\"_ZN4llvmL14OperandInfo244E\", \"llvm::OperandInfo244\"},\n    {\"_ZN4llvmL14OperandInfo245E\", \"llvm::OperandInfo245\"},\n    {\"_ZN4llvmL14OperandInfo246E\", \"llvm::OperandInfo246\"},\n    {\"_ZN4llvmL14OperandInfo247E\", \"llvm::OperandInfo247\"},\n    {\"_ZN4llvmL14OperandInfo248E\", \"llvm::OperandInfo248\"},\n    {\"_ZN4llvmL14OperandInfo249E\", \"llvm::OperandInfo249\"},\n    {\"_ZN4llvmL14OperandInfo250E\", \"llvm::OperandInfo250\"},\n    {\"_ZN4llvmL14OperandInfo251E\", \"llvm::OperandInfo251\"},\n    {\"_ZN4llvmL14OperandInfo252E\", \"llvm::OperandInfo252\"},\n    {\"_ZN4llvmL14OperandInfo253E\", \"llvm::OperandInfo253\"},\n    {\"_ZN4llvmL14OperandInfo254E\", \"llvm::OperandInfo254\"},\n    {\"_ZN4llvmL14OperandInfo255E\", \"llvm::OperandInfo255\"},\n    {\"_ZN4llvmL14OperandInfo256E\", \"llvm::OperandInfo256\"},\n    {\"_ZN4llvmL14OperandInfo257E\", \"llvm::OperandInfo257\"},\n    {\"_ZN4llvmL14OperandInfo258E\", \"llvm::OperandInfo258\"},\n    {\"_ZN4llvmL14OperandInfo259E\", \"llvm::OperandInfo259\"},\n    {\"_ZN4llvmL14OperandInfo260E\", \"llvm::OperandInfo260\"},\n    {\"_ZN4llvmL8ARMInstsE\", \"llvm::ARMInsts\"},\n    {\"_ZL12ARM_MLxTable\", \"ARM_MLxTable\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L19RegisterDescriptorsE\", \"llvm::(anonymous namespace)::RegisterDescriptors\"},\n    {\"_ZL10NumEmitted\", \"NumEmitted\"},\n    {\"_ZL6NumTBs\", \"NumTBs\"},\n    {\"_ZL6NumCBZ\", \"NumCBZ\"},\n    {\"_ZL13NumT2BrShrunk\", \"NumT2BrShrunk\"},\n    {\"_ZL13NumT2CPShrunk\", \"NumT2CPShrunk\"},\n    {\"_ZL8NumSplit\", \"NumSplit\"},\n    {\"_ZL11NumCBrFixed\", \"NumCBrFixed\"},\n    {\"_ZL11NumUBrFixed\", \"NumUBrFixed\"},\n    {\"_ZL7NumCPEs\", \"NumCPEs\"},\n    {\"_ZL13NumJTInserted\", \"NumJTInserted\"},\n    {\"_ZL10NumJTMoved\", \"NumJTMoved\"},\n    {\"_ZL13NEONLdStTable\", \"NEONLdStTable\"},\n    {\"_ZL11NumMovwMovt\", \"NumMovwMovt\"},\n    {\"_ZL12NumTailCalls\", \"NumTailCalls\"},\n    {\"_ZL12NumVSTMGened\", \"NumVSTMGened\"},\n    {\"_ZL12NumVLDMGened\", \"NumVLDMGened\"},\n    {\"_ZL11NumSTMGened\", \"NumSTMGened\"},\n    {\"_ZL11NumLDMGened\", \"NumLDMGened\"},\n    {\"_ZL11NumSTRD2STR\", \"NumSTRD2STR\"},\n    {\"_ZL11NumLDRD2LDR\", \"NumLDRD2LDR\"},\n    {\"_ZL11NumSTRD2STM\", \"NumSTRD2STM\"},\n    {\"_ZL11NumLDRD2LDM\", \"NumLDRD2LDM\"},\n    {\"_ZL12NumLdStMoved\", \"NumLdStMoved\"},\n    {\"_ZL13NumSTRDFormed\", \"NumSTRDFormed\"},\n    {\"_ZL13NumLDRDFormed\", \"NumLDRDFormed\"},\n    {\"_ZL12MCNumEmitted\", \"MCNumEmitted\"},\n    {\"_ZL18MCNumCPRelocations\", \"MCNumCPRelocations\"},\n    {\"_ZL9SubTypeKV\", \"SubTypeKV\"},\n    {\"_ZL9FeatureKV\", \"FeatureKV\"},\n    {\"_ZL10ProcItinKV\", \"ProcItinKV\"},\n    {\"_ZL6Stages\", \"Stages\"},\n    {\"_ZL18GenericItineraries\", \"GenericItineraries\"},\n    {\"_ZL16ARMV6Itineraries\", \"ARMV6Itineraries\"},\n    {\"_ZL19CortexA8Itineraries\", \"CortexA8Itineraries\"},\n    {\"_ZL19CortexA9Itineraries\", \"CortexA9Itineraries\"},\n    {\"_ZL9NumExpand\", \"NumExpand\"},\n    {\"_ZL8NumVMovs\", \"NumVMovs\"},\n    {\"_ZL6NumITs\", \"NumITs\"},\n    {\"_ZL13NumMovedInsts\", \"NumMovedInsts\"},\n    {\"_ZL10NumNarrows\", \"NumNarrows\"},\n    {\"_ZL9Num2Addrs\", \"Num2Addrs\"},\n    {\"_ZL8NumLdSts\", \"NumLdSts\"},\n    {\"_ZN12_GLOBAL__N_1L11ReduceTableE\", \"(anonymous namespace)::ReduceTable\"},\n    {\"_ZL13NodesCombined\", \"NodesCombined\"},\n    {\"_ZL11OpsNarrowed\", \"OpsNarrowed\"},\n    {\"_ZL16PostIndexedNodes\", \"PostIndexedNodes\"},\n    {\"_ZL15PreIndexedNodes\", \"PreIndexedNodes\"},\n    {\"_ZL10LdStFP2Int\", \"LdStFP2Int\"},\n    {\"_ZL8NumNoops\", \"NumNoops\"},\n    {\"_ZL9NumStalls\", \"NumStalls\"},\n    {\"_ZL11NumPRCopies\", \"NumPRCopies\"},\n    {\"_ZL7NumDups\", \"NumDups\"},\n    {\"_ZL10NumUnfolds\", \"NumUnfolds\"},\n    {\"_ZL13NumBacktracks\", \"NumBacktracks\"},\n    {\"_ZL14LoadsClustered\", \"LoadsClustered\"},\n    {\"_ZL17NumDAGIselRetries\", \"NumDAGIselRetries\"},\n    {\"_ZL17NumFastIselBlocks\", \"NumFastIselBlocks\"},\n    {\"_ZL12NumDAGBlocks\", \"NumDAGBlocks\"},\n    {\"_ZL19NumFastIselFailures\", \"NumFastIselFailures\"},\n    {\"_ZL12EmittedInsts\", \"EmittedInsts\"},\n    {\"_ZL13NumBranchOpts\", \"NumBranchOpts\"},\n    {\"_ZL13NumDeadBlocks\", \"NumDeadBlocks\"},\n    {\"_ZL12NumTailMerge\", \"NumTailMerge\"},\n    {\"_ZL15NumLoopsAligned\", \"NumLoopsAligned\"},\n    {\"_ZL13NumIntraMoved\", \"NumIntraMoved\"},\n    {\"_ZL12NumIntraElim\", \"NumIntraElim\"},\n    {\"_ZL10NumDeletes\", \"NumDeletes\"},\n    {\"_ZL23NumExceptionValuesMoved\", \"NumExceptionValuesMoved\"},\n    {\"_ZL17NumUnwindsLowered\", \"NumUnwindsLowered\"},\n    {\"_ZL19NumLandingPadsSplit\", \"NumLandingPadsSplit\"},\n    {\"_ZL12NumIfConvBBs\", \"NumIfConvBBs\"},\n    {\"_ZL9NumDupBBs\", \"NumDupBBs\"},\n    {\"_ZL11NumDiamonds\", \"NumDiamonds\"},\n    {\"_ZL15NumTriangleFRev\", \"NumTriangleFRev\"},\n    {\"_ZL16NumTriangleFalse\", \"NumTriangleFalse\"},\n    {\"_ZL14NumTriangleRev\", \"NumTriangleRev\"},\n    {\"_ZL11NumTriangle\", \"NumTriangle\"},\n    {\"_ZL14NumSimpleFalse\", \"NumSimpleFalse\"},\n    {\"_ZL9NumSimple\", \"NumSimple\"},\n    {\"_ZL9numSplits\", \"numSplits\"},\n    {\"_ZL8numFolds\", \"numFolds\"},\n    {\"_ZL12numIntervals\", \"numIntervals\"},\n    {\"_ZL15NumReplacements\", \"NumReplacements\"},\n    {\"_ZL16NumBaseRegisters\", \"NumBaseRegisters\"},\n    {\"_ZL14NumAllocations\", \"NumAllocations\"},\n    {\"_ZL11NumCommutes\", \"NumCommutes\"},\n    {\"_ZL11NumPhysCSEs\", \"NumPhysCSEs\"},\n    {\"_ZL7NumCSEs\", \"NumCSEs\"},\n    {\"_ZL12NumCoalesces\", \"NumCoalesces\"},\n    {\"_ZL10NumHoisted\", \"NumHoisted\"},\n    {\"_ZL8NumCSEed\", \"NumCSEed\"},\n    {\"_ZL8NumLowRP\", \"NumLowRP\"},\n    {\"_ZL14NumHighLatency\", \"NumHighLatency\"},\n    {\"_ZL16NumPostRAHoisted\", \"NumPostRAHoisted\"},\n    {\"_ZL7NumSunk\", \"NumSunk\"},\n    {\"_ZL8NumSplit\", \"NumSplit\"},\n    {\"_ZL12NumCoalesces\", \"NumCoalesces\"},\n    {\"_ZL16NumDeadPHICycles\", \"NumDeadPHICycles\"},\n    {\"_ZL12NumPHICycles\", \"NumPHICycles\"},\n    {\"_ZL9NumReused\", \"NumReused\"},\n    {\"_ZL9NumAtomic\", \"NumAtomic\"},\n    {\"_ZL10NumImmFold\", \"NumImmFold\"},\n    {\"_ZL8NumReuse\", \"NumReuse\"},\n    {\"_ZL13NumEliminated\", \"NumEliminated\"},\n    {\"_ZL8NumNoops\", \"NumNoops\"},\n    {\"_ZL9NumStalls\", \"NumStalls\"},\n    {\"_ZL12NumFixedAnti\", \"NumFixedAnti\"},\n    {\"_ZL13NumDeadSpills\", \"NumDeadSpills\"},\n    {\"_ZL12NumRenumbers\", \"NumRenumbers\"},\n    {\"_ZL15NumRestoreFolds\", \"NumRestoreFolds\"},\n    {\"_ZL8NumFolds\", \"NumFolds\"},\n    {\"_ZL9NumRemats\", \"NumRemats\"},\n    {\"_ZL9NumSplits\", \"NumSplits\"},\n    {\"_ZL16NumScavengedRegs\", \"NumScavengedRegs\"},\n    {\"_ZL19NumVirtualFrameRegs\", \"NumVirtualFrameRegs\"},\n    {\"_ZL9NumCopies\", \"NumCopies\"},\n    {\"_ZL9NumStores\", \"NumStores\"},\n    {\"_ZL8NumLoads\", \"NumLoads\"},\n    {\"_ZL11NumCoalesce\", \"NumCoalesce\"},\n    {\"_ZL13NumBacktracks\", \"NumBacktracks\"},\n    {\"_ZL12NumDowngrade\", \"NumDowngrade\"},\n    {\"_ZL8NumIters\", \"NumIters\"},\n    {\"_ZL12numSRReduced\", \"numSRReduced\"},\n    {\"_ZL7numPeep\", \"numPeep\"},\n    {\"_ZL8numJoins\", \"numJoins\"},\n    {\"_ZL11numCrossRCs\", \"numCrossRCs\"},\n    {\"_ZL9numAborts\", \"numAborts\"},\n    {\"_ZL12numDeadValNo\", \"numDeadValNo\"},\n    {\"_ZL9NumReMats\", \"NumReMats\"},\n    {\"_ZL11numCommutes\", \"numCommutes\"},\n    {\"_ZL10numExtends\", \"numExtends\"},\n    {\"_ZL10NumSpilled\", \"NumSpilled\"},\n    {\"_ZL10NumUnwinds\", \"NumUnwinds\"},\n    {\"_ZL10NumInvokes\", \"NumInvokes\"},\n    {\"_ZL7NumDead\", \"NumDead\"},\n    {\"_ZL12NumStoreElim\", \"NumStoreElim\"},\n    {\"_ZL10NumRegRepl\", \"NumRegRepl\"},\n    {\"_ZL11NumLoadElim\", \"NumLoadElim\"},\n    {\"_ZL13NumEliminated\", \"NumEliminated\"},\n    {\"_ZL13NumDeadBlocks\", \"NumDeadBlocks\"},\n    {\"_ZL12NumInstrDups\", \"NumInstrDups\"},\n    {\"_ZL11NumTailDups\", \"NumTailDups\"},\n    {\"_ZL8NumTails\", \"NumTails\"},\n    {\"_ZL9NumReMats\", \"NumReMats\"},\n    {\"_ZL19NumConvertedTo3Addr\", \"NumConvertedTo3Addr\"},\n    {\"_ZL12Num3AddrSunk\", \"Num3AddrSunk\"},\n    {\"_ZL15NumAggrCommuted\", \"NumAggrCommuted\"},\n    {\"_ZL11NumCommuted\", \"NumCommuted\"},\n    {\"_ZL10NumDeletes\", \"NumDeletes\"},\n    {\"_ZL19NumTwoAddressInstrs\", \"NumTwoAddressInstrs\"},\n    {\"_ZL9NumSpills\", \"NumSpills\"},\n    {\"_ZL6NumDSS\", \"NumDSS\"},\n    {\"_ZL9NumStores\", \"NumStores\"},\n    {\"_ZL6NumDRM\", \"NumDRM\"},\n    {\"_ZL9NumReused\", \"NumReused\"},\n    {\"_ZL8NumLoads\", \"NumLoads\"},\n    {\"_ZL9NumReMats\", \"NumReMats\"},\n    {\"_ZL6NumDCE\", \"NumDCE\"},\n    {\"_ZL11NumCommutes\", \"NumCommutes\"},\n    {\"_ZL6NumDSE\", \"NumDSE\"},\n    {\"_ZL10NumSUnfold\", \"NumSUnfold\"},\n    {\"_ZL10NumAvoided\", \"NumAvoided\"},\n    {\"_ZL11NumCopified\", \"NumCopified\"},\n    {\"_ZL10NumOmitted\", \"NumOmitted\"},\n    {\"_ZL10NumPSpills\", \"NumPSpills\"},\n    {\"_ZL15NumModRefUnfold\", \"NumModRefUnfold\"},\n    {\"_ZL10NumRemoved\", \"NumRemoved\"},\n    {\"_ZL11NumGEPsElim\", \"NumGEPsElim\"},\n    {\"_ZL14NumMemoryInsts\", \"NumMemoryInsts\"},\n    {\"_ZL10NumCmpUses\", \"NumCmpUses\"},\n    {\"_ZL10NumExtUses\", \"NumExtUses\"},\n    {\"_ZL12NumExtsMoved\", \"NumExtsMoved\"},\n    {\"_ZL11NumCastUses\", \"NumCastUses\"},\n    {\"_ZL11NumPHIsElim\", \"NumPHIsElim\"},\n    {\"_ZL13NumBlocksElim\", \"NumBlocksElim\"},\n    {\"_ZL12NumMemAccess\", \"NumMemAccess\"},\n    {\"_ZL7NumCmps\", \"NumCmps\"},\n    {\"_ZL7NumPhis\", \"NumPhis\"},\n    {\"_ZL10NumSelects\", \"NumSelects\"},\n    {\"_ZL12NumFastOther\", \"NumFastOther\"},\n    {\"_ZL13NumFastStores\", \"NumFastStores\"},\n    {\"_ZL6NumDSE\", \"NumDSE\"},\n    {\"_ZL10NumCSECall\", \"NumCSECall\"},\n    {\"_ZL10NumCSELoad\", \"NumCSELoad\"},\n    {\"_ZL6NumCSE\", \"NumCSE\"},\n    {\"_ZL11NumSimplify\", \"NumSimplify\"},\n    {\"_ZL9NumGVNPRE\", \"NumGVNPRE\"},\n    {\"_ZL11NumGVNInstr\", \"NumGVNInstr\"},\n    {\"_ZL10NumPRELoad\", \"NumPRELoad\"},\n    {\"_ZL10NumGVNLoad\", \"NumGVNLoad\"},\n    {\"_ZL12NumGVNBlocks\", \"NumGVNBlocks\"},\n    {\"_ZL10NumRemoved\", \"NumRemoved\"},\n    {\"_ZL7NumLFTR\", \"NumLFTR\"},\n    {\"_ZL11NumInserted\", \"NumInserted\"},\n    {\"_ZL11NumReplaced\", \"NumReplaced\"},\n    {\"_ZL8NumDupes\", \"NumDupes\"},\n    {\"_ZL10NumThreads\", \"NumThreads\"},\n    {\"_ZL8NumFolds\", \"NumFolds\"},\n    {\"_ZL11NumPromoted\", \"NumPromoted\"},\n    {\"_ZL10NumHoisted\", \"NumHoisted\"},\n    {\"_ZL13NumMovedCalls\", \"NumMovedCalls\"},\n    {\"_ZL13NumMovedLoads\", \"NumMovedLoads\"},\n    {\"_ZL7NumSunk\", \"NumSunk\"},\n    {\"_ZL10NumDeleted\", \"NumDeleted\"},\n    {\"_ZL9NumMemSet\", \"NumMemSet\"},\n    {\"_ZL9NumMemCpy\", \"NumMemCpy\"},\n    {\"_ZL10NumRotated\", \"NumRotated\"},\n    {\"_ZL10NumSelects\", \"NumSelects\"},\n    {\"_ZL11NumSwitches\", \"NumSwitches\"},\n    {\"_ZL11NumBranches\", \"NumBranches\"},\n    {\"_ZL11NumSimplify\", \"NumSimplify\"},\n    {\"_ZL10NumTrivial\", \"NumTrivial\"},\n    {\"_ZL14NumMemCpyInstr\", \"NumMemCpyInstr\"},\n    {\"_ZL12NumMoveToCpy\", \"NumMoveToCpy\"},\n    {\"_ZL11NumCpyToSet\", \"NumCpyToSet\"},\n    {\"_ZL14NumMemSetInfer\", \"NumMemSetInfer\"},\n    {\"_ZL10NumChanged\", \"NumChanged\"},\n    {\"_ZL10NumAnnihil\", \"NumAnnihil\"},\n    {\"_ZL9NumFactor\", \"NumFactor\"},\n    {\"_ZL9NumLinear\", \"NumLinear\"},\n    {\"_ZL16IPNumGlobalConst\", \"IPNumGlobalConst\"},\n    {\"_ZL16IPNumInstRemoved\", \"IPNumInstRemoved\"},\n    {\"_ZL14NumInstRemoved\", \"NumInstRemoved\"},\n    {\"_ZL13NumDeadBlocks\", \"NumDeadBlocks\"},\n    {\"_ZL15IPNumArgsElimed\", \"IPNumArgsElimed\"},\n    {\"_ZL12NumConverted\", \"NumConverted\"},\n    {\"_ZL11NumReplaced\", \"NumReplaced\"},\n    {\"_ZL10NumGlobals\", \"NumGlobals\"},\n    {\"_ZL11NumPromoted\", \"NumPromoted\"},\n    {\"_ZL11NumAdjusted\", \"NumAdjusted\"},\n    {\"_ZL8NumSimpl\", \"NumSimpl\"},\n    {\"_ZL13NumSimplified\", \"NumSimplified\"},\n    {\"_ZL12NumAnnotated\", \"NumAnnotated\"},\n    {\"_ZL11NumRetDuped\", \"NumRetDuped\"},\n    {\"_ZL13NumEliminated\", \"NumEliminated\"},\n    {\"_ZL13NumAccumAdded\", \"NumAccumAdded\"},\n    {\"_ZL12NumDeadStore\", \"NumDeadStore\"},\n    {\"_ZL11NumCombined\", \"NumCombined\"},\n    {\"_ZL11NumSunkInst\", \"NumSunkInst\"},\n    {\"_ZL12NumConstProp\", \"NumConstProp\"},\n    {\"_ZL11NumDeadInst\", \"NumDeadInst\"},\n    {\"_ZL9NumExpand\", \"NumExpand\"},\n    {\"_ZL9NumFactor\", \"NumFactor\"},\n    {\"_ZL10NumReassoc\", \"NumReassoc\"},\n    {\"_ZL9NumBroken\", \"NumBroken\"},\n    {\"_ZL8NumLCSSA\", \"NumLCSSA\"},\n    {\"_ZL9NumNested\", \"NumNested\"},\n    {\"_ZL11NumInserted\", \"NumInserted\"},\n    {\"_ZL11NumUnrolled\", \"NumUnrolled\"},\n    {\"_ZL21NumCompletelyUnrolled\", \"NumCompletelyUnrolled\"},\n    {\"_ZL10NumUnwinds\", \"NumUnwinds\"},\n    {\"_ZL10NumInvokes\", \"NumInvokes\"},\n    {\"_ZL10NumSpilled\", \"NumSpilled\"},\n    {\"_ZL12NumPHIInsert\", \"NumPHIInsert\"},\n    {\"_ZL16NumLocalPromoted\", \"NumLocalPromoted\"},\n    {\"_ZL14NumSingleStore\", \"NumSingleStore\"},\n    {\"_ZL13NumDeadAlloca\", \"NumDeadAlloca\"},\n    {\"_ZL15NumSpeculations\", \"NumSpeculations\"},\n    {\"_ZL16MaxSCCIterations\", \"MaxSCCIterations\"},\n    {\"_ZL10NumReassoc\", \"NumReassoc\"},\n    {\"_ZL9NumFactor\", \"NumFactor\"},\n    {\"_ZL9NumExpand\", \"NumExpand\"},\n    {\"_ZL27NumCacheCompleteNonLocalPtr\", \"NumCacheCompleteNonLocalPtr\"},\n    {\"_ZL21NumUncacheNonLocalPtr\", \"NumUncacheNonLocalPtr\"},\n    {\"_ZL24NumCacheDirtyNonLocalPtr\", \"NumCacheDirtyNonLocalPtr\"},\n    {\"_ZL19NumCacheNonLocalPtr\", \"NumCacheNonLocalPtr\"},\n    {\"_ZL18NumUncacheNonLocal\", \"NumUncacheNonLocal\"},\n    {\"_ZL21NumCacheDirtyNonLocal\", \"NumCacheDirtyNonLocal\"},\n    {\"_ZL16NumCacheNonLocal\", \"NumCacheNonLocal\"},\n    {\"_ZL31NumBruteForceTripCountsComputed\", \"NumBruteForceTripCountsComputed\"},\n    {\"_ZL19NumArrayLenItCounts\", \"NumArrayLenItCounts\"},\n    {\"_ZL24NumTripCountsNotComputed\", \"NumTripCountsNotComputed\"},\n    {\"_ZL21NumTripCountsComputed\", \"NumTripCountsComputed\"},\n    {\"_ZN12_GLOBAL__N_15statsL15RelaxationStepsE\", \"(anonymous namespace)::stats::RelaxationSteps\"},\n    {\"_ZN12_GLOBAL__N_15statsL19RelaxedInstructionsE\", \"(anonymous namespace)::stats::RelaxedInstructions\"},\n    {\"_ZN12_GLOBAL__N_15statsL11ObjectBytesE\", \"(anonymous namespace)::stats::ObjectBytes\"},\n    {\"_ZN12_GLOBAL__N_15statsL16EmittedFragmentsE\", \"(anonymous namespace)::stats::EmittedFragments\"},\n    {\"_ZN12_GLOBAL__N_15statsL15FragmentLayoutsE\", \"(anonymous namespace)::stats::FragmentLayouts\"},\n    {\"_ZN12_GLOBAL__N_15statsL13EvaluateFixupE\", \"(anonymous namespace)::stats::EvaluateFixup\"},\n    {\"_ZN12_GLOBAL__N_15statsL14MCExprEvaluateE\", \"(anonymous namespace)::stats::MCExprEvaluate\"},\n    {\"_ZL11ProgramName\", \"ProgramName\"},\n    {\"_ZL20ActiveASTUnitObjects\", \"ActiveASTUnitObjects\"},\n    {\"_ZL12ConstEqIndex\", \"ConstEqIndex\"},\n    {\"_ZL15ConstNotEqIndex\", \"ConstNotEqIndex\"},\n    {\"_ZL11AutoRCIndex\", \"AutoRCIndex\"},\n    {\"_ZL11AutoRBIndex\", \"AutoRBIndex\"},\n    {\"_ZL20ConstraintRangeIndex\", \"ConstraintRangeIndex\"},\n    {\"_ZL12nAccessSpecs\", \"nAccessSpecs\"},\n    {\"_ZL7nBlocks\", \"nBlocks\"},\n    {\"_ZL14nFileScopeAsms\", \"nFileScopeAsms\"},\n    {\"_ZL8nFriends\", \"nFriends\"},\n    {\"_ZL16nFriendTemplates\", \"nFriendTemplates\"},\n    {\"_ZL13nLinkageSpecs\", \"nLinkageSpecs\"},\n    {\"_ZL11nNamespaces\", \"nNamespaces\"},\n    {\"_ZL16nNamespaceAliass\", \"nNamespaceAliass\"},\n    {\"_ZL21nObjCCompatibleAliass\", \"nObjCCompatibleAliass\"},\n    {\"_ZL14nObjCCategorys\", \"nObjCCategorys\"},\n    {\"_ZL18nObjCCategoryImpls\", \"nObjCCategoryImpls\"},\n    {\"_ZL20nObjCImplementations\", \"nObjCImplementations\"},\n    {\"_ZL15nObjCInterfaces\", \"nObjCInterfaces\"},\n    {\"_ZL14nObjCProtocols\", \"nObjCProtocols\"},\n    {\"_ZL12nObjCMethods\", \"nObjCMethods\"},\n    {\"_ZL14nObjCPropertys\", \"nObjCPropertys\"},\n    {\"_ZL15nClassTemplates\", \"nClassTemplates\"},\n    {\"_ZL18nFunctionTemplates\", \"nFunctionTemplates\"},\n    {\"_ZL22nTemplateTemplateParms\", \"nTemplateTemplateParms\"},\n    {\"_ZL6nEnums\", \"nEnums\"},\n    {\"_ZL8nRecords\", \"nRecords\"},\n    {\"_ZL11nCXXRecords\", \"nCXXRecords\"},\n    {\"_ZL29nClassTemplateSpecializations\", \"nClassTemplateSpecializations\"},\n    {\"_ZL36nClassTemplatePartialSpecializations\", \"nClassTemplatePartialSpecializations\"},\n    {\"_ZL18nTemplateTypeParms\", \"nTemplateTypeParms\"},\n    {\"_ZL9nTypedefs\", \"nTypedefs\"},\n    {\"_ZL25nUnresolvedUsingTypenames\", \"nUnresolvedUsingTypenames\"},\n    {\"_ZL7nUsings\", \"nUsings\"},\n    {\"_ZL16nUsingDirectives\", \"nUsingDirectives\"},\n    {\"_ZL13nUsingShadows\", \"nUsingShadows\"},\n    {\"_ZL7nFields\", \"nFields\"},\n    {\"_ZL17nObjCAtDefsFields\", \"nObjCAtDefsFields\"},\n    {\"_ZL10nObjCIvars\", \"nObjCIvars\"},\n    {\"_ZL10nFunctions\", \"nFunctions\"},\n    {\"_ZL11nCXXMethods\", \"nCXXMethods\"},\n    {\"_ZL16nCXXConstructors\", \"nCXXConstructors\"},\n    {\"_ZL15nCXXConversions\", \"nCXXConversions\"},\n    {\"_ZL15nCXXDestructors\", \"nCXXDestructors\"},\n    {\"_ZL21nNonTypeTemplateParms\", \"nNonTypeTemplateParms\"},\n    {\"_ZL5nVars\", \"nVars\"},\n    {\"_ZL15nImplicitParams\", \"nImplicitParams\"},\n    {\"_ZL9nParmVars\", \"nParmVars\"},\n    {\"_ZL14nEnumConstants\", \"nEnumConstants\"},\n    {\"_ZL15nIndirectFields\", \"nIndirectFields\"},\n    {\"_ZL22nUnresolvedUsingValues\", \"nUnresolvedUsingValues\"},\n    {\"_ZL11nObjCClasss\", \"nObjCClasss\"},\n    {\"_ZL21nObjCForwardProtocols\", \"nObjCForwardProtocols\"},\n    {\"_ZL18nObjCPropertyImpls\", \"nObjCPropertyImpls\"},\n    {\"_ZL14nStaticAsserts\", \"nStaticAsserts\"},\n    {\"_ZL17nTranslationUnits\", \"nTranslationUnits\"},\n    {\"_ZL13StmtClassInfo\", \"StmtClassInfo\"},\n    {\"_ZL11InlineLimit\", \"InlineLimit\"},\n    {\"_ZL13HintThreshold\", \"HintThreshold\"},\n    {\"_ZL13Disable256Bit\", \"Disable256Bit\"},\n    {\"_ZL8NoFusing\", \"NoFusing\"},\n    {\"_ZL17PrintFailedFusing\", \"PrintFailedFusing\"},\n    {\"_ZL16ReMatPICStubLoad\", \"ReMatPICStubLoad\"},\n    {\"_ZL19JITCompilerFunction\", \"JITCompilerFunction\"},\n    {\"_ZL15AsmWriterFlavor\", \"AsmWriterFlavor\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6CCRVTsE\", \"llvm::(anonymous namespace)::CCRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14CONTROL_REGVTsE\", \"llvm::(anonymous namespace)::CONTROL_REGVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12DEBUG_REGVTsE\", \"llvm::(anonymous namespace)::DEBUG_REGVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7FR32VTsE\", \"llvm::(anonymous namespace)::FR32VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7FR64VTsE\", \"llvm::(anonymous namespace)::FR64VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR16VTsE\", \"llvm::(anonymous namespace)::GR16VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR16_ABCDVTsE\", \"llvm::(anonymous namespace)::GR16_ABCDVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR16_NOREXVTsE\", \"llvm::(anonymous namespace)::GR16_NOREXVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR32VTsE\", \"llvm::(anonymous namespace)::GR32VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR32_ABCDVTsE\", \"llvm::(anonymous namespace)::GR32_ABCDVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR32_ADVTsE\", \"llvm::(anonymous namespace)::GR32_ADVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR32_NOREXVTsE\", \"llvm::(anonymous namespace)::GR32_NOREXVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR32_NOSPVTsE\", \"llvm::(anonymous namespace)::GR32_NOSPVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR32_TCVTsE\", \"llvm::(anonymous namespace)::GR32_TCVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7GR64VTsE\", \"llvm::(anonymous namespace)::GR64VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR64_ABCDVTsE\", \"llvm::(anonymous namespace)::GR64_ABCDVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR64_NOREXVTsE\", \"llvm::(anonymous namespace)::GR64_NOREXVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L18GR64_NOREX_NOSPVTsE\", \"llvm::(anonymous namespace)::GR64_NOREX_NOSPVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR64_NOSPVTsE\", \"llvm::(anonymous namespace)::GR64_NOSPVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L10GR64_TCVTsE\", \"llvm::(anonymous namespace)::GR64_TCVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR64_TCW64VTsE\", \"llvm::(anonymous namespace)::GR64_TCW64VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6GR8VTsE\", \"llvm::(anonymous namespace)::GR8VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR8_ABCD_HVTsE\", \"llvm::(anonymous namespace)::GR8_ABCD_HVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L13GR8_ABCD_LVTsE\", \"llvm::(anonymous namespace)::GR8_ABCD_LVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12GR8_NOREXVTsE\", \"llvm::(anonymous namespace)::GR8_NOREXVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8RFP32VTsE\", \"llvm::(anonymous namespace)::RFP32VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8RFP64VTsE\", \"llvm::(anonymous namespace)::RFP64VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8RFP80VTsE\", \"llvm::(anonymous namespace)::RFP80VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6RSTVTsE\", \"llvm::(anonymous namespace)::RSTVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L14SEGMENT_REGVTsE\", \"llvm::(anonymous namespace)::SEGMENT_REGVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8VR128VTsE\", \"llvm::(anonymous namespace)::VR128VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8VR256VTsE\", \"llvm::(anonymous namespace)::VR256VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7VR64VTsE\", \"llvm::(anonymous namespace)::VR64VTs\"},\n    {\"_ZL14EnableARM3Addr\", \"EnableARM3Addr\"},\n    {\"_ZL20ForceAllBaseRegAlloc\", \"ForceAllBaseRegAlloc\"},\n    {\"_ZL21EnableLocalStackAlloc\", \"EnableLocalStackAlloc\"},\n    {\"_ZL17EnableBasePointer\", \"EnableBasePointer\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6CCRVTsE\", \"llvm::(anonymous namespace)::CCRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6DPRVTsE\", \"llvm::(anonymous namespace)::DPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8DPR_8VTsE\", \"llvm::(anonymous namespace)::DPR_8VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11DPR_VFP2VTsE\", \"llvm::(anonymous namespace)::DPR_VFP2VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6GPRVTsE\", \"llvm::(anonymous namespace)::GPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6QPRVTsE\", \"llvm::(anonymous namespace)::QPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8QPR_8VTsE\", \"llvm::(anonymous namespace)::QPR_8VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L11QPR_VFP2VTsE\", \"llvm::(anonymous namespace)::QPR_VFP2VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7QQPRVTsE\", \"llvm::(anonymous namespace)::QQPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L12QQPR_VFP2VTsE\", \"llvm::(anonymous namespace)::QQPR_VFP2VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L9QQQQPRVTsE\", \"llvm::(anonymous namespace)::QQQQPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L6SPRVTsE\", \"llvm::(anonymous namespace)::SPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8SPR_8VTsE\", \"llvm::(anonymous namespace)::SPR_8VTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7rGPRVTsE\", \"llvm::(anonymous namespace)::rGPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L7tGPRVTsE\", \"llvm::(anonymous namespace)::tGPRVTs\"},\n    {\"_ZN4llvm12_GLOBAL__N_1L8tcGPRVTsE\", \"llvm::(anonymous namespace)::tcGPRVTs\"},\n    {\"_ZL21AdjustJumpTableBlocks\", \"AdjustJumpTableBlocks\"},\n    {\"_ZL18DisableARMFastISel\", \"DisableARMFastISel\"},\n    {\"_ZL16DisableShifterOp\", \"DisableShifterOp\"},\n    {\"_ZL15CheckVMLxHazard\", \"CheckVMLxHazard\"},\n    {\"_ZL18EnableARMTailCalls\", \"EnableARMTailCalls\"},\n    {\"_ZL15ARMInterworking\", \"ARMInterworking\"},\n    {\"_ZL19JITCompilerFunction\", \"JITCompilerFunction\"},\n    {\"_ZL9ReserveR9\", \"ReserveR9\"},\n    {\"_ZL13DarwinUseMOVT\", \"DarwinUseMOVT\"},\n    {\"_ZL11StrictAlign\", \"StrictAlign\"},\n    {\"_ZL9ExpandMLx\", \"ExpandMLx\"},\n    {\"_ZL11ForceExapnd\", \"ForceExapnd\"},\n    {\"_ZL11ExpandLimit\", \"ExpandLimit\"},\n    {\"_ZL10OldT2IfCvt\", \"OldT2IfCvt\"},\n    {\"_ZL11ReduceLimit\", \"ReduceLimit\"},\n    {\"_ZL16ReduceLimit2Addr\", \"ReduceLimit2Addr\"},\n    {\"_ZL15ReduceLimitLdSt\", \"ReduceLimitLdSt\"},\n    {\"_ZN12_GLOBAL__N_1L10CombinerAAE\", \"(anonymous namespace)::CombinerAA\"},\n    {\"_ZN12_GLOBAL__N_1L16CombinerGlobalAAE\", \"(anonymous namespace)::CombinerGlobalAA\"},\n    {\"_ZL21EnableExpensiveChecks\", \"EnableExpensiveChecks\"},\n    {\"_ZL18tdListDAGScheduler\", \"tdListDAGScheduler\"},\n    {\"_ZL20burrListDAGScheduler\", \"burrListDAGScheduler\"},\n    {\"_ZL20tdrListrDAGScheduler\", \"tdrListrDAGScheduler\"},\n    {\"_ZL22sourceListDAGScheduler\", \"sourceListDAGScheduler\"},\n    {\"_ZL22hybridListDAGScheduler\", \"hybridListDAGScheduler\"},\n    {\"_ZL19ILPListDAGScheduler\", \"ILPListDAGScheduler\"},\n    {\"_ZL18DisableSchedCycles\", \"DisableSchedCycles\"},\n    {\"_ZL4EVTs\", \"EVTs\"},\n    {\"_ZL13SimpleVTArray\", \"SimpleVTArray\"},\n    {\"_ZL7VTMutex\", \"VTMutex\"},\n    {\"_ZL16LimitFPPrecision\", \"LimitFPPrecision\"},\n    {\"_ZL19LimitFloatPrecision\", \"LimitFloatPrecision\"},\n    {\"_ZL17MaxParallelChains\", \"MaxParallelChains\"},\n    {\"_ZL21EnableFastISelVerbose\", \"EnableFastISelVerbose\"},\n    {\"_ZL19EnableFastISelAbort\", \"EnableFastISelAbort\"},\n    {\"_ZL11ISHeuristic\", \"ISHeuristic\"},\n    {\"_ZL23defaultListDAGScheduler\", \"defaultListDAGScheduler\"},\n    {\"_ZL13PrintDbgScope\", \"PrintDbgScope\"},\n    {\"_ZL24DisableDebugInfoPrinting\", \"DisableDebugInfoPrinting\"},\n    {\"_ZL16UnknownLocations\", \"UnknownLocations\"},\n    {\"_ZL8DebugDiv\", \"DebugDiv\"},\n    {\"_ZL8DebugMod\", \"DebugMod\"},\n    {\"_ZL19FlagEnableTailMerge\", \"FlagEnableTailMerge\"},\n    {\"_ZL18TailMergeThreshold\", \"TailMergeThreshold\"},\n    {\"_ZL13TailMergeSize\", \"TailMergeSize\"},\n    {\"_ZL15ViewEdgeBundles\", \"ViewEdgeBundles\"},\n    {\"_ZL12IfCvtFnStart\", \"IfCvtFnStart\"},\n    {\"_ZL11IfCvtFnStop\", \"IfCvtFnStop\"},\n    {\"_ZL10IfCvtLimit\", \"IfCvtLimit\"},\n    {\"_ZL13DisableSimple\", \"DisableSimple\"},\n    {\"_ZL14DisableSimpleF\", \"DisableSimpleF\"},\n    {\"_ZL15DisableTriangle\", \"DisableTriangle\"},\n    {\"_ZL16DisableTriangleR\", \"DisableTriangleR\"},\n    {\"_ZL16DisableTriangleF\", \"DisableTriangleF\"},\n    {\"_ZL17DisableTriangleFR\", \"DisableTriangleFR\"},\n    {\"_ZL14DisableDiamond\", \"DisableDiamond\"},\n    {\"_ZL15IfCvtBranchFold\", \"IfCvtBranchFold\"},\n    {\"_ZL12VerifySpills\", \"VerifySpills\"},\n    {\"_ZL13DisablePostRA\", \"DisablePostRA\"},\n    {\"_ZL17DisableBranchFold\", \"DisableBranchFold\"},\n    {\"_ZL20DisableTailDuplicate\", \"DisableTailDuplicate\"},\n    {\"_ZL19DisableEarlyTailDup\", \"DisableEarlyTailDup\"},\n    {\"_ZL16DisableCodePlace\", \"DisableCodePlace\"},\n    {\"_ZL10DisableSSC\", \"DisableSSC\"},\n    {\"_ZL18DisableMachineLICM\", \"DisableMachineLICM\"},\n    {\"_ZL24DisablePostRAMachineLICM\", \"DisablePostRAMachineLICM\"},\n    {\"_ZL18DisableMachineSink\", \"DisableMachineSink\"},\n    {\"_ZL10DisableLSR\", \"DisableLSR\"},\n    {\"_ZL10DisableCGP\", \"DisableCGP\"},\n    {\"_ZL8PrintLSR\", \"PrintLSR\"},\n    {\"_ZL14PrintISelInput\", \"PrintISelInput\"},\n    {\"_ZL11PrintGCInfo\", \"PrintGCInfo\"},\n    {\"_ZL14ShowMCEncoding\", \"ShowMCEncoding\"},\n    {\"_ZL10ShowMCInst\", \"ShowMCInst\"},\n    {\"_ZL15EnableMCLogging\", \"EnableMCLogging\"},\n    {\"_ZL17VerifyMachineCode\", \"VerifyMachineCode\"},\n    {\"_ZL10AsmVerbose\", \"AsmVerbose\"},\n    {\"_ZL20EnableFastISelOption\", \"EnableFastISelOption\"},\n    {\"_ZL17EnableSplitGEPGVN\", \"EnableSplitGEPGVN\"},\n    {\"_ZL9EnableLDV\", \"EnableLDV\"},\n    {\"_ZL12DisableReMat\", \"DisableReMat\"},\n    {\"_ZL10SplitEdges\", \"SplitEdges\"},\n    {\"_ZL15defaultRegAlloc\", \"defaultRegAlloc\"},\n    {\"_ZL8RegAlloc\", \"RegAlloc\"},\n    {\"_ZL10Aggressive\", \"Aggressive\"},\n    {\"_ZL15DisablePeephole\", \"DisablePeephole\"},\n    {\"_ZL21EnablePostRAScheduler\", \"EnablePostRAScheduler\"},\n    {\"_ZL21EnableAntiDepBreaking\", \"EnableAntiDepBreaking\"},\n    {\"_ZL8DebugDiv\", \"DebugDiv\"},\n    {\"_ZL8DebugMod\", \"DebugMod\"},\n    {\"_ZL13PreSplitLimit\", \"PreSplitLimit\"},\n    {\"_ZL14DeadSplitLimit\", \"DeadSplitLimit\"},\n    {\"_ZL16RestoreFoldLimit\", \"RestoreFoldLimit\"},\n    {\"_ZN12_GLOBAL__N_1L10PSVGlobalsE\", \"(anonymous namespace)::PSVGlobals\"},\n    {\"_ZL12fastRegAlloc\", \"fastRegAlloc\"},\n    {\"_ZL12NewHeuristic\", \"NewHeuristic\"},\n    {\"_ZL17PreSplitIntervals\", \"PreSplitIntervals\"},\n    {\"_ZL16TrivCoalesceEnds\", \"TrivCoalesceEnds\"},\n    {\"_ZL18linearscanRegAlloc\", \"linearscanRegAlloc\"},\n    {\"_ZN12_GLOBAL__N_1L19NumRecentlyUsedRegsE\", \"(anonymous namespace)::NumRecentlyUsedRegs\"},\n    {\"_ZL14ShrinkWrapping\", \"ShrinkWrapping\"},\n    {\"_ZL14ShrinkWrapFunc\", \"ShrinkWrapFunc\"},\n    {\"_ZL19ShrinkWrapDebugging\", \"ShrinkWrapDebugging\"},\n    {\"_ZL13EnableJoining\", \"EnableJoining\"},\n    {\"_ZL21DisableCrossClassJoin\", \"DisableCrossClassJoin\"},\n    {\"_ZL19DisablePhysicalJoin\", \"DisablePhysicalJoin\"},\n    {\"_ZL16VerifyCoalescing\", \"VerifyCoalescing\"},\n    {\"_ZL10spillerOpt\", \"spillerOpt\"},\n    {\"_ZL13SSPBufferSize\", \"SSPBufferSize\"},\n    {\"_ZL14DisableSharing\", \"DisableSharing\"},\n    {\"_ZL16ColorWithRegsOpt\", \"ColorWithRegsOpt\"},\n    {\"_ZL8DCELimit\", \"DCELimit\"},\n    {\"_ZL17TailDuplicateSize\", \"TailDuplicateSize\"},\n    {\"_ZL13TailDupVerify\", \"TailDupVerify\"},\n    {\"_ZL12TailDupLimit\", \"TailDupLimit\"},\n    {\"_ZL23DisableHazardRecognizer\", \"DisableHazardRecognizer\"},\n    {\"_ZL11RewriterOpt\", \"RewriterOpt\"},\n    {\"_ZL14ScheduleSpills\", \"ScheduleSpills\"},\n    {\"_ZL17CriticalEdgeSplit\", \"CriticalEdgeSplit\"},\n    {\"_ZL9EnablePRE\", \"EnablePRE\"},\n    {\"_ZL13EnableLoadPRE\", \"EnableLoadPRE\"},\n    {\"_ZL9Threshold\", \"Threshold\"},\n    {\"_ZL16DisablePromotion\", \"DisablePromotion\"},\n    {\"_ZL15UnrollThreshold\", \"UnrollThreshold\"},\n    {\"_ZL11UnrollCount\", \"UnrollCount\"},\n    {\"_ZL18UnrollAllowPartial\", \"UnrollAllowPartial\"},\n    {\"_ZL9Threshold\", \"Threshold\"},\n    {\"_ZL18ExpensiveEHSupport\", \"ExpensiveEHSupport\"},\n    {\"_ZL6DupRet\", \"DupRet\"},\n    {\"_ZL13MaxIterations\", \"MaxIterations\"},\n    {\"_ZL14VerifyLoopInfo\", \"VerifyLoopInfo\"},\n    {\"_ZL15VerifyLoopInfoX\", \"VerifyLoopInfoX\"},\n    {\"_ZL23MaxBruteForceIterations\", \"MaxBruteForceIterations\"},\n    {\"_ZL10EnableTBAA\", \"EnableTBAA\"},\n    {\"_ZL9PrintCode\", \"PrintCode\"},\n    {\"_ZL13DisableFPElim\", \"DisableFPElim\"},\n    {\"_ZL20DisableFPElimNonLeaf\", \"DisableFPElimNonLeaf\"},\n    {\"_ZL22DisableExcessPrecision\", \"DisableExcessPrecision\"},\n    {\"_ZL11EnableFPMAD\", \"EnableFPMAD\"},\n    {\"_ZL18EnableUnsafeFPMath\", \"EnableUnsafeFPMath\"},\n    {\"_ZL18EnableNoInfsFPMath\", \"EnableNoInfsFPMath\"},\n    {\"_ZL18EnableNoNaNsFPMath\", \"EnableNoNaNsFPMath\"},\n    {\"_ZL38EnableHonorSignDependentRoundingFPMath\", \"EnableHonorSignDependentRoundingFPMath\"},\n    {\"_ZL22GenerateSoftFloatCalls\", \"GenerateSoftFloatCalls\"},\n    {\"_ZL16FloatABIForCalls\", \"FloatABIForCalls\"},\n    {\"_ZL19DontPlaceZerosInBSS\", \"DontPlaceZerosInBSS\"},\n    {\"_ZL26EnableJITExceptionHandling\", \"EnableJITExceptionHandling\"},\n    {\"_ZL16EmitJitDebugInfo\", \"EmitJitDebugInfo\"},\n    {\"_ZL22EmitJitDebugInfoToDisk\", \"EmitJitDebugInfoToDisk\"},\n    {\"_ZL18EnableUnwindTables\", \"EnableUnwindTables\"},\n    {\"_ZL18DefRelocationModel\", \"DefRelocationModel\"},\n    {\"_ZL12DefCodeModel\", \"DefCodeModel\"},\n    {\"_ZL27EnableGuaranteedTailCallOpt\", \"EnableGuaranteedTailCallOpt\"},\n    {\"_ZL22OverrideStackAlignment\", \"OverrideStackAlignment\"},\n    {\"_ZL18EnableRealignStack\", \"EnableRealignStack\"},\n    {\"_ZL19DisableSwitchTables\", \"DisableSwitchTables\"},\n    {\"_ZL19EnableStrongPHIElim\", \"EnableStrongPHIElim\"},\n    {\"_ZL12DataSections\", \"DataSections\"},\n    {\"_ZL16FunctionSections\", \"FunctionSections\"},\n    {\"_ZL15AttributesLists\", \"AttributesLists\"},\n    {\"_ZN4llvmL7ALMutexE\", \"llvm::ALMutex\"},\n    {\"_ZL13VerifyDomInfo\", \"VerifyDomInfo\"},\n    {\"_ZL14VerifyDomInfoX\", \"VerifyDomInfoX\"},\n    {\"_ZL6GCLock\", \"GCLock\"},\n    {\"_ZL7GCNames\", \"GCNames\"},\n    {\"_ZL10GCNamePool\", \"GCNamePool\"},\n    {\"_ZL13GlobalContext\", \"GlobalContext\"},\n    {\"_ZN4llvmL13PassDebuggingE\", \"llvm::PassDebugging\"},\n    {\"_ZN4llvmL11PrintBeforeE\", \"llvm::PrintBefore\"},\n    {\"_ZN4llvmL10PrintAfterE\", \"llvm::PrintAfter\"},\n    {\"_ZN4llvmL14PrintBeforeAllE\", \"llvm::PrintBeforeAll\"},\n    {\"_ZN4llvmL13PrintAfterAllE\", \"llvm::PrintAfterAll\"},\n    {\"_ZN12_GLOBAL__N_1L15TimingInfoMutexE\", \"(anonymous namespace)::TimingInfoMutex\"},\n    {\"_ZL12EnableTiming\", \"EnableTiming\"},\n    {\"_ZL11TheTimeInfo\", \"TheTimeInfo\"},\n    {\"_ZL15PassRegistryObj\", \"PassRegistryObj\"},\n    {\"_ZL4Lock\", \"Lock\"},\n    {\"_ZL8MoreHelp\", \"MoreHelp\"},\n    {\"_ZL20RegisteredOptionList\", \"RegisteredOptionList\"},\n    {\"_ZL15ProgramOverview\", \"ProgramOverview\"},\n    {\"_ZL13NormalPrinter\", \"NormalPrinter\"},\n    {\"_ZL13HiddenPrinter\", \"HiddenPrinter\"},\n    {\"_ZL3HOp\", \"HOp\"},\n    {\"_ZL4HHOp\", \"HHOp\"},\n    {\"_ZL6VersOp\", \"VersOp\"},\n    {\"_ZL22VersionPrinterInstance\", \"VersionPrinterInstance\"},\n    {\"_ZL22OverrideVersionPrinter\", \"OverrideVersionPrinter\"},\n    {\"_ZN12_GLOBAL__N_1L14CurrentContextE\", \"(anonymous namespace)::CurrentContext\"},\n    {\"_ZL25gCrashRecoveryContexMutex\", \"gCrashRecoveryContexMutex\"},\n    {\"_ZL11PrevActions\", \"PrevActions\"},\n    {\"_ZL5Dummy\", \"Dummy\"},\n    {\"_ZL15ExplicitSymbols\", \"ExplicitSymbols\"},\n    {\"_ZL13OpenedHandles\", \"OpenedHandles\"},\n    {\"_ZL12ErrorHandler\", \"ErrorHandler\"},\n    {\"_ZL20ErrorHandlerUserData\", \"ErrorHandlerUserData\"},\n    {\"_ZL10StaticList\", \"StaticList\"},\n    {\"_ZN12_GLOBAL__N_1L7successE\", \"(anonymous namespace)::success\"},\n    {\"_ZN12_GLOBAL__N_1L10separatorsE\", \"(anonymous namespace)::separators\"},\n    {\"_ZN12_GLOBAL__N_1L7successE\", \"(anonymous namespace)::success\"},\n    {\"_ZL20PrettyStackTraceHead\", \"PrettyStackTraceHead\"},\n    {\"_ZL12SignalsMutex\", \"SignalsMutex\"},\n    {\"_ZL13FilesToRemove\", \"FilesToRemove\"},\n    {\"_ZL14CallBacksToRun\", \"CallBacksToRun\"},\n    {\"_ZL17InterruptFunction\", \"InterruptFunction\"},\n    {\"_ZL20NumRegisteredSignals\", \"NumRegisteredSignals\"},\n    {\"_ZL20RegisteredSignalInfo\", \"RegisteredSignalInfo\"},\n    {\"_ZL7Enabled\", \"Enabled\"},\n    {\"_ZL8StatInfo\", \"StatInfo\"},\n    {\"_ZL8StatLock\", \"StatLock\"},\n    {\"_ZL11FirstTarget\", \"FirstTarget\"},\n    {\"_ZL11global_lock\", \"global_lock\"},\n    {\"_ZL28LibSupportInfoOutputFilename\", \"LibSupportInfoOutputFilename\"},\n    {\"_ZL9TimerLock\", \"TimerLock\"},\n    {\"_ZN12_GLOBAL__N_1L10TrackSpaceE\", \"(anonymous namespace)::TrackSpace\"},\n    {\"_ZN12_GLOBAL__N_1L18InfoOutputFilenameE\", \"(anonymous namespace)::InfoOutputFilename\"},\n    {\"_ZL12ActiveTimers\", \"ActiveTimers\"},\n    {\"_ZL11NamedTimers\", \"NamedTimers\"},\n    {\"_ZL18NamedGroupedTimers\", \"NamedGroupedTimers\"},\n    {\"_ZL14TimerGroupList\", \"TimerGroupList\"},\n    {\"_ZL17DefaultTimerGroup\", \"DefaultTimerGroup\"},\n    {\"_ZL16NotUnderValgrind\", \"NotUnderValgrind\"},\n    {\"_ZN8Blizzard6Memory12voidp_returncvPT_IcEEv\", \"Blizzard::Memory::voidp_return::operator char*<char>()\"},\n    {\"_Z2f0PU3AS1c\", \"f0(char AS1*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXleT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) <= (4), void>::type*)\"},\n    {\"_ZN5Casts6cstyleILj4EEEvPN9enable_ifIXleT_cvjLi4EEvE4typeE\", \"void Casts::cstyle<4u>(enable_if<(4u) <= ((unsigned int)(4)), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXaaT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) && (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXaNT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) &= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXaST_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) = (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXstT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<sizeof (4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXszT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<sizeof (4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXatT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<alignof (4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXazT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<alignof (4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXcmT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) , (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXcoT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<~(4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXdeT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<*(4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXdvT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) / (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXdVT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) /= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXeoT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) ^ (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXeOT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) ^= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXeqT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) == (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXgeT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) >= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXgtT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<((4u) > (4)), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXlsT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) << (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXlST_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) <<= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXltT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) < (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXmiT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) - (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXmIT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) -= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXmlT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) * (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXmLT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) *= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXmmT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u)--, void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXneT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) != (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXngT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<-(4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXntT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<!(4u), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXooT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) || (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXorT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) | (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXoRT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) |= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXpmT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) ->* (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXplT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) + (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXpLT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) += (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXppT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u)++, void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXpsT_EvE4typeE\", \"void Casts::implicit<4u>(enable_if<+(4u), void>::type*)\"},\n//    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXptT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) -> (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXquT_Li4ELi5EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) ? (4) : (5), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrmT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) % (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrMT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) %= (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrsT_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) >> (4), void>::type*)\"},\n    {\"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrST_Li4EEvE4typeE\", \"void Casts::implicit<4u>(enable_if<(4u) >>= (4), void>::type*)\"},\n    {\"_Z1fPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP1XS13_S12_S11_S10_SZ_SY_SX_SW_SV_SU_ST_SS_SR_SQ_SP_SO_SN_SM_SL_SK_SJ_SI_SH_SG_SF_SE_SD_SC_SB_SA_S9_S8_S7_S6_S5_S4_S3_S2_S1_S0_S_\", \"f(X****************************************, X****************************************, X***************************************, X**************************************, X*************************************, X************************************, X***********************************, X**********************************, X*********************************, X********************************, X*******************************, X******************************, X*****************************, X****************************, X***************************, X**************************, X*************************, X************************, X***********************, X**********************, X*********************, X********************, X*******************, X******************, X*****************, X****************, X***************, X**************, X*************, X************, X***********, X**********, X*********, X********, X*******, X******, X*****, X****, X***, X**, X*, X)\"},\n    {\"_ZZN1J1KEvENK1C1FEv\", \"J::K()::C::F() const\"},\n    {\"_ZZNVK1J1KEvENK1C1FEv\", \"J::K() const volatile::C::F() const\"},\n    {\"U4_farrVKPi\", \"int* const volatile restrict _far\"},\n    {\"_Z1fM1AKFvvE\", \"f(void (A::*)() const)\"},\n    {\"_ZNR1X1fEv\", \"X::f() &\"},\n    {\"_ZNKO1X1hEv\", \"X::h() const &&\"},\n//    {\"_Z1fM1XVKFivEMS_VFivEMS_KOFivE\", \"f(int (X::*)() const volatile, int (X::*)() volatile, int (X::*)() const &&)\"},\n//    {\"_Z1fM1XRFivEMS_OFivEMS_KOFivE\", \"f(int (X::*)() &, int (X::*)() &&, int (X::*)() const &&)\"},\n    {\"_ZN5test12f0ENS_1TILZNS_1xEEEE\", \"test1::f0(test1::T<test1::x>)\"},\n    {\"_ZN5test12f1ENS_2t1ILZNS_2f0EfEEE\", \"test1::f1(test1::t1<test1::f0(float)>)\"},\n    {\"_ZN5test22f1ENS_2t1IXadL_ZNS_2f0EfEEEE\", \"test2::f1(test2::t1<&(test2::f0(float))>)\"},\n    {\"_ZN5test32f1ENS_2t1ILZ8test3_f0EEE\", \"test3::f1(test3::t1<test3_f0>)\"},\n    {\"_ZN5test42f1ENS_2t1IXadL_Z8test4_f0EEEE\", \"test4::f1(test4::t1<&(test4_f0)>)\"},\n    {\"_ZN5test52f1ENS_2t1ILZ8test5_f0EEE\", \"test5::f1(test5::t1<test5_f0>)\"},\n    {\"_ZN5test52f2ENS_2t2ILZ4mainEEE\", \"test5::f2(test5::t2<main>)\"},\n    {\"_ZN5test52f2ENS_2t2ILZ4mainEEE\", \"test5::f2(test5::t2<main>)\"},\n    {\"_ZN5test62f0ENS_1TIXadL_ZNS_1A3im0EfEEEE\", \"test6::f0(test6::T<&(test6::A::im0(float))>)\"},\n    {\"_ZN5test71XIiEC1IdEEPT_PNS_5int_cIXplL_ZNS_4metaIiE5valueEEsrNS6_IS3_EE5valueEE4typeE\", \"test7::X<int>::X<double>(double*, test7::int_c<(test7::meta<int>::value) + (test7::meta<double>::value)>::type*)\"},\n    {\"_ZN5test81fIiEEvNS_5int_cIXsrNS_4metaIT_E4typeE5valueEEE\", \"void test8::f<int>(test8::int_c<test8::meta<int>::type::value>)\"},\n    {\"_ZN5test91fIiNS_1XEEENS_9supermetaIT_E5applyIT0_E4typeEv\", \"test9::supermeta<int>::apply<test9::X>::type test9::f<int, test9::X>()\"},\n    {\"_ZN6test101fIidEENS_1XIT_E10definitionIT0_EES2_S5_\", \"test10::X<int>::definition<double> test10::f<int, double>(int, double)\"},\n    {\"_ZZ2f5vE1a\", \"f5()::a\"},\n    {\"_ZZ2f6vE1b\", \"f6()::b\"},\n    {\"_ZNV3$_35test9Ev\", \"$_3::test9() volatile\"},\n    {\"_ZN5Test8I3$_2EC1ES0_\", \"Test8<$_2>::Test8($_2)\"},\n    {\"_ZGVZN1N1gEvE1a\", \"guard variable for N::g()::a\"},\n    {\"_ZplRK1YRA100_P1X\", \"operator+(Y const&, X* (&) [100])\"},\n    {\"_Z1fno\", \"f(__int128, unsigned __int128)\"},\n    {\"_Z1fM1SKFvvE\", \"f(void (S::*)() const)\"},\n    {\"_Z3ft7IiEN11__enable_ifIXsr16__is_scalar_typeIT_EE7__valueEvE6__typeEv\", \"__enable_if<__is_scalar_type<int>::__value, void>::__type ft7<int>()\"},\n    {\"_Z3ft7IPvEN11__enable_ifIXsr16__is_scalar_typeIT_EE7__valueEvE6__typeEv\", \"__enable_if<__is_scalar_type<void*>::__value, void>::__type ft7<void*>()\"},\n    {\"_ZN6PR57968__fill_aIiEENS_11__enable_ifIXntsrNS_11__is_scalarIT_EE7__valueEvE6__typeEv\", \"PR5796::__enable_if<!(PR5796::__is_scalar<int>::__value), void>::__type PR5796::__fill_a<int>()\"},\n    {\"_ZN11Expressions2f1ILi1EEEvPAplngT_Li2E_i\", \"void Expressions::f1<1>(int (*) [(-(1)) + (2)])\"},\n    {\"_ZN11Expressions2f2ILi1EEEvPApsT__i\", \"void Expressions::f2<1>(int (*) [+(1)])\"},\n    {\"_ZN11Expressions2f3ILi1EEEvPAplT_T__i\", \"void Expressions::f3<1>(int (*) [(1) + (1)])\"},\n    {\"_ZN11Expressions2f4ILi1EEEvPAplplLi2ET_T__i\", \"void Expressions::f4<1>(int (*) [((2) + (1)) + (1)])\"},\n    {\"_ZN3OpsplERKS_\", \"Ops::operator+(Ops const&)\"},\n    {\"_ZN6PR58615AllocIcNS_6PolicyINS_1PELb1EEEE8allocateEiPKv\", \"PR5861::Alloc<char, PR5861::Policy<PR5861::P, true> >::allocate(int, void const*)\"},\n    {\"_ZN5test01fIdEEvT_RAszcl3ovlcvS1__EE_c\", \"void test0::f<double>(double, char (&) [sizeof (ovl((double)()))])\"},\n    {\"_ZN5test01fIiEEvT_RAszcl3ovlcvS1__EE_c\", \"void test0::f<int>(int, char (&) [sizeof (ovl((int)()))])\"},\n    {\"_ZN5test01gIfEEvRAszplcvT__ELf40a00000E_c\", \"void test0::g<float>(char (&) [sizeof (((float)()) + (0x1.4p+2f))])\"},\n    {\"_ZN5test01hIfEEvRAszplcvT__ELd4014000000000000E_c\", \"void test0::h<float>(char (&) [sizeof (((float)()) + (0x1.4p+2))])\"},\n#if LDBL_FP80\n    {\"_ZN5test01hIfEEvRAcvjplstT_Le4001a000000000000000E_c\", \"void test0::h<float>(char (&) [(unsigned int)((sizeof (float)) + (0xap-1L))])\"},\n#endif\n    {\"_ZN5test01jINS_1AEEEvRAszdtcvT__E6buffer_c\", \"void test0::j<test0::A>(char (&) [sizeof ((test0::A)().buffer)])\"},\n    {\"_ZN5test11fINS_1XEiEEvT_IT0_E\", \"void test1::f<test1::X, int>(test1::X<int>)\"},\n    {\"_ZN5test211read_memberINS_1AEEEDtptcvPT_Li0E6memberERS2_\", \"decltype((test2::A*)(0)->member) test2::read_member<test2::A>(test2::A&)\"},\n    {\"_ZN5test37get_p_1INS_7DerivedEEEDtptcvPT_Li0EsrNS_5Path1E1pERS2_\", \"decltype((test3::Derived*)(0)->test3::Path1::p) test3::get_p_1<test3::Derived>(test3::Derived&)\"},\n    {\"_ZN5test37get_p_1INS_7DerivedEEEDtptcvPT_Li0EsrNS_5Path2E1pERS2_\", \"decltype((test3::Derived*)(0)->test3::Path2::p) test3::get_p_1<test3::Derived>(test3::Derived&)\"},\n    {\"_ZN5test41gEPNS_3zedIXadL_ZNS_3foo3barEEEEE\", \"test4::g(test4::zed<&(test4::foo::bar)>*)\"},\n    {\"_ZN5test51gEPNS_3zedIXadL_ZNS_3foo3barEEEEE\", \"test5::g(test5::zed<&(test5::foo::bar)>*)\"},\n    {\"_ZN5test71gEPNS_3zedIXadL_ZNS_3foo3barEvEEEE\", \"test7::g(test7::zed<&(test7::foo::bar())>*)\"},\n    {\"_ZN5test91fIiNS_3barEEEvRKNT0_3baz1XE\", \"void test9::f<int, test9::bar>(test9::bar::baz::X const&)\"},\n    {\"_ZN6test101fILc3EEEvNS_1SIXquLb0ELc97ET_EEE\", \"void test10::f<(char)3>(test10::S<(false) ? ((char)97) : ((char)3)>)\"},\n    {\"_ZN6test111fEz\", \"test11::f(...)\"},\n    {\"_ZN6test121fENS_1AILt33000EEE\", \"test12::f(test12::A<(unsigned short)33000>)\"},\n    {\"_ZN6test151fILi7EEEvNS_1SIXplT_LNS_1EE3EEEE\", \"void test15::f<7>(test15::S<(7) + ((test15::E)3)>)\"},\n    {\"_ZN6test174funcINS_1BEEENS_1AIXszclsrT_3fooEEEEv\", \"test17::A<sizeof (test17::B::foo())> test17::func<test17::B>()\"},\n    {\"_ZN6test181fINS_1AEEEvNS_1SIXadsrT_plEEE\", \"void test18::f<test18::A>(test18::S<&(test18::A::operator+)>)\"},\n    {\"_ZN6test181fINS_1AEEEvNS_1SIXadsrT_anEEE\", \"void test18::f<test18::A>(test18::S<&(test18::A::operator&)>)\"},\n    {\"_ZN6test191gINS_1AEEEvNS_1SIXadsrT_1fIiEEEE\", \"void test19::g<test19::A>(test19::S<&(test19::A::f<int>)>)\"},\n    {\"_ZN6test191gINS_1AEEEvNS_1SIXadsrT_plEEE\", \"void test19::g<test19::A>(test19::S<&(test19::A::operator+)>)\"},\n    {\"_ZN6test191gINS_1AEEEvNS_1SIXadsrT_cviEEE\", \"void test19::g<test19::A>(test19::S<&(test19::A::operator int)>)\"},\n    {\"_ZN6test191gINS_1AEEEvNS_1SIXadsrT_miIdEEEE\", \"void test19::g<test19::A>(test19::S<&(test19::A::operator-<double>)>)\"},\n    {\"_ZN6test205test0IiEEvDTcl1fIPT_ELi0EEE\", \"void test20::test0<int>(decltype(f<int*>(0)))\"},\n    {\"_ZN6test2112vla_arg_funcEiPA_i\", \"test21::vla_arg_func(int, int (*) [])\"},\n    {\"_ZN6test221fEDn\", \"test22::f(std::nullptr_t)\"},\n    {\"_ZN6test231fERA10_KPv\", \"test23::f(void* const (&) [10])\"},\n    {\"_ZN6test231fERA10_A5_VKPv\", \"test23::f(void* const volatile (&) [10][5])\"},\n    {\"_Z4testIcLj5ELj10ELj15EEvRAT0__AT1__AT2__T_\", \"void test<char, 5u, 10u, 15u>(char (&) [5u][10u][15u])\"},\n    {\"_ZN6test205test1IiEEvDTcl1fIEcvT__EEE\", \"void test20::test1<int>(decltype(f<>((int)())))\"},\n    {\"_Z2f0IJEEv1XIXsZT_EJDpRT_EE\", \"void f0<>(X<sizeof...()>)\"},\n    {\"_Z2f0IJifdEEv1XIXsZT_EJDpRT_EE\", \"void f0<int, float, double>(X<sizeof...(int, float, double), int&, float&, double&>)\"},\n    {\"_Z2f1IJEEvv\", \"void f1<>()\"},\n    {\"_Z2f1IJiEEvv\", \"void f1<int>()\"},\n    {\"_Z2f1IJifEEvv\", \"void f1<int, float>()\"},\n    {\"_Z2f2IJEEvDpT_\", \"void f2<>()\"},\n    {\"_Z2f2IJiEEvDpT_\", \"void f2<int>(int)\"},\n    {\"_Z2f2IJifEEvDpT_\", \"void f2<int, float>(int, float)\"},\n    {\"_Z2f3IJEEvDpPKT_\", \"void f3<>()\"},\n    {\"_Z2f3IJiEEvDpPKT_\", \"void f3<int>(int const*)\"},\n    {\"_Z2f3IJifEEvDpPKT_\", \"void f3<int, float>(int const*, float const*)\"},\n    {\"_Z2f4IJifdEE5tupleIJDpT_EEv\", \"tuple<int, float, double> f4<int, float, double>()\"},\n    {\"_Z2f5IiJifdEE8identityIFT_DpT0_EEv\", \"identity<int (int, float, double)> f5<int, int, float, double>()\"},\n    {\"_Z2f6IJLi1ELi2ELi3EEE9int_tupleIJXspT_EEEv\", \"int_tuple<1, 2, 3> f6<1, 2, 3>()\"},\n    {\"_Z2f7IJ8identity13add_referenceEE14template_tupleIJDpT_EEv\", \"template_tuple<identity, add_reference> f7<identity, add_reference>()\"},\n    {\"_ZNK10__cxxabiv111__libcxxabi5__sub20first_demangled_nameEPc.eh\", \"__cxxabiv1::__libcxxabi::__sub::first_demangled_name(char*) const (.eh)\"},\n    {\"_ZSt13copy_backwardIN9__gnu_cxx17__normal_iteratorIPNS0_19_Hashtable_iteratorISt4pairIK16CSCppSymbolOwnerP20CSCppSymbolOwnerDataES4_27CSCppSymbolOwnerHashFunctorSt10_Select1stIS8_E29CSCppSymbolOwnerEqualsFunctorSaIS7_EEESt6vectorISE_SaISE_EEEESJ_ET0_T_SL_SK_\", \"__gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > > std::copy_backward<__gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > >, __gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > > >(__gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > >, __gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > >, __gnu_cxx::__normal_iterator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >*, std::vector<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> >, std::allocator<__gnu_cxx::_Hashtable_iterator<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*>, CSCppSymbolOwner, CSCppSymbolOwnerHashFunctor, std::_Select1st<std::pair<CSCppSymbolOwner const, CSCppSymbolOwnerData*> >, CSCppSymbolOwnerEqualsFunctor, std::allocator<CSCppSymbolOwnerData*> > > > >)\"},\n    {\"_ZTC14SSDatabaseImpl0_N8Security10CssmClient6DbImplE\", \"construction vtable for Security::CssmClient::DbImpl-in-SSDatabaseImpl\"},\n    {\"_ZGRZN1N1gEvE1a\", \"reference temporary for N::g()::a\"},\n    {\"_ZN5boost4bindIvN10libtorrent15peer_connectionEiRKNS1_11disk_io_jobENS1_12peer_requestENS_10shared_ptrINS1_7torrentEEENS_13intrusive_ptrIS2_EENS_3argILi1EEENSC_ILi2EEES6_S9_EENS_3_bi6bind_tIT_NS_4_mfi3mf4ISH_T0_T1_T2_T3_T4_EENSF_9list_av_5IT5_T6_T7_T8_T9_E4typeEEEMSK_FSH_SL_SM_SN_SO_ESR_SS_ST_SU_SV_\", \"boost::_bi::bind_t<void, boost::_mfi::mf4<void, libtorrent::peer_connection, int, libtorrent::disk_io_job const&, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent> >, boost::_bi::list_av_5<boost::intrusive_ptr<libtorrent::peer_connection>, boost::arg<1>, boost::arg<2>, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent> >::type> boost::bind<void, libtorrent::peer_connection, int, libtorrent::disk_io_job const&, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent>, boost::intrusive_ptr<libtorrent::peer_connection>, boost::arg<1>, boost::arg<2>, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent> >(void (libtorrent::peer_connection::*)(int, libtorrent::disk_io_job const&, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent>), boost::intrusive_ptr<libtorrent::peer_connection>, boost::arg<1>, boost::arg<2>, libtorrent::peer_request, boost::shared_ptr<libtorrent::torrent>)\"},\n    {\"_ZN7WebCore20createFileThreadTaskINS_15FileStreamProxyEN3WTF6StringERKS3_ddEENS2_10PassOwnPtrINS_10FileThread4TaskEEEPT_MSA_FvT1_T3_ERKT0_RKT2_\", \"WTF::PassOwnPtr<WebCore::FileThread::Task> WebCore::createFileThreadTask<WebCore::FileStreamProxy, WTF::String, WTF::String const&, double, double>(WebCore::FileStreamProxy*, void (WebCore::FileStreamProxy::*)(WTF::String const&, double), WTF::String const&, double const&)\"},\n    {\"_ZN3WTF15deleteAllValuesIPN7WebCore5XPath4Step8NodeTestEKNS_9HashTableIS5_S5_NS_17IdentityExtractorENS_7PtrHashIS5_EENS_10HashTraitsIS5_EESB_EEEEvRT0_\", \"void WTF::deleteAllValues<WebCore::XPath::Step::NodeTest*, WTF::HashTable<WebCore::XPath::Step::NodeTest*, WebCore::XPath::Step::NodeTest*, WTF::IdentityExtractor, WTF::PtrHash<WebCore::XPath::Step::NodeTest*>, WTF::HashTraits<WebCore::XPath::Step::NodeTest*>, WTF::HashTraits<WebCore::XPath::Step::NodeTest*> > const>(WTF::HashTable<WebCore::XPath::Step::NodeTest*, WebCore::XPath::Step::NodeTest*, WTF::IdentityExtractor, WTF::PtrHash<WebCore::XPath::Step::NodeTest*>, WTF::HashTraits<WebCore::XPath::Step::NodeTest*>, WTF::HashTraits<WebCore::XPath::Step::NodeTest*> > const&)\"},\n    {\"_Z13JVTLib_103270ILi1EEvPsDv2_xS1_\", \"void JVTLib_103270<1>(short*, long long vector[2], long long vector[2])\"},\n    {\"_ZN8platform20split_string_convertIcPFiRKSsEiSaIiESt6vectorEEjPKT_S9_S7_T0_RT3_IT1_T2_E\", \"unsigned int platform::split_string_convert<char, int (*)(std::string const&), int, std::allocator<int>, std::vector>(char const*, char const*, char, int (*)(std::string const&), std::vector<int, std::allocator<int> >&)\"},\n    {\"_ZN2MF12_GLOBAL__N_114WeakCallHelperINS0_15DecodeQueueImplEEEvRKN5boost8functionIFvvEEERKNS3_8weak_ptrIT_EE\", \"void MF::(anonymous namespace)::WeakCallHelper<MF::(anonymous namespace)::DecodeQueueImpl>(boost::function<void ()> const&, boost::weak_ptr<MF::(anonymous namespace)::DecodeQueueImpl> const&)\"},\n    {\"_ZZN4NIds4NStr14TCStrAggregateINS0_13TCTCStrTraitsINS0_11TCStrTraitsIcNS0_17CDefaultStrParamsEEENS0_14TCStrImp_FixedIS5_Lx256EEEEEE21f_AddFromIteratorUTF8INS0_16CStrIteratorUTF8EEEvRxRKT_ENKSA_ISB_EUlmE0_clEm\", \"void NIds::NStr::TCStrAggregate<NIds::NStr::TCTCStrTraits<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, NIds::NStr::TCStrImp_Fixed<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, 256ll> > >::f_AddFromIteratorUTF8<NIds::NStr::CStrIteratorUTF8>(long long&, NIds::NStr::CStrIteratorUTF8 const&)::NIds::NStr::TCStrAggregate<NIds::NStr::TCTCStrTraits<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, NIds::NStr::TCStrImp_Fixed<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, 256ll> > >::f_AddFromIteratorUTF8<NIds::NStr::CStrIteratorUTF8>::'lambda0'(unsigned long)::operator()(unsigned long) const\"},\n    {\"_ZZN4NIds4NStr14TCStrAggregateINS0_13TCTCStrTraitsINS0_11TCStrTraitsIcNS0_17CDefaultStrParamsEEENS0_14TCStrImp_FixedIS5_Lx256EEEEEE21f_AddFromIteratorUTF8INS0_16CStrIteratorUTF8EEEvRxRKT_ENKSA_ISB_EUt0_clEm\", \"void NIds::NStr::TCStrAggregate<NIds::NStr::TCTCStrTraits<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, NIds::NStr::TCStrImp_Fixed<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, 256ll> > >::f_AddFromIteratorUTF8<NIds::NStr::CStrIteratorUTF8>(long long&, NIds::NStr::CStrIteratorUTF8 const&)::NIds::NStr::TCStrAggregate<NIds::NStr::TCTCStrTraits<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, NIds::NStr::TCStrImp_Fixed<NIds::NStr::TCStrTraits<char, NIds::NStr::CDefaultStrParams>, 256ll> > >::f_AddFromIteratorUTF8<NIds::NStr::CStrIteratorUTF8>::'unnamed0'::operator()(unsigned long) const\"},\n    {\"_ZNK3com9markzware2js11cJSArgumentcvRKT_I8cMyClassEEv\", \"com::markzware::js::cJSArgument::operator cMyClass const&<cMyClass>() const\"},\n    {\"_ZNKSt3__110__function6__funcIZN4DLCL8DLFutureIP15AnalysenManagerE3setINS_8functionIFS5_vEEEJEEEvT_DpOT0_EUlvE_NS_9allocatorISF_EEFvvEE7__cloneEv\", \"std::__1::__function::__func<void DLCL::DLFuture<AnalysenManager*>::set<std::__1::function<AnalysenManager* ()> >(std::__1::function<AnalysenManager* ()>)::'lambda'(), std::__1::allocator<void DLCL::DLFuture<AnalysenManager*>::set<std::__1::function<AnalysenManager* ()> >(std::__1::function<AnalysenManager* ()>)::'lambda'()>, void ()>::__clone() const\"},\n    {\"___ZN19URLConnectionClient33_clientInterface_cancelConnectionEP16dispatch_queue_sU13block_pointerFvvE_block_invoke14\", \"invocation function for block in URLConnectionClient::_clientInterface_cancelConnection(dispatch_queue_s*, void () block_pointer)\"},\n    {\"_Z1fIJicdEEPFvDpT_EPFvDpRPS0_ES8_S1_DpS4_S6_\", \"void (*f<int, char, double>(void (*)(int*&, char*&, double*&), void (*)(int*&, char*&, double*&), int, char, double, int*, char*, double*, int*&, char*&, double*&))(int, char, double)\"},\n    {\"_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKSbIS2_St11char_traitsIS2_ESaIS2_EESA_\", \"__gnu_cxx::__enable_if<__is_char<char>::__value, bool>::__type std::operator==<char>(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)\"},\n    {\"_ZZ10+[Foo bar]E3Baz\", \"+[Foo bar]::Baz\"},\n    {\"_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairISsbESt6vectorIS2_SaIS2_EEEC5ERKS4_\", \"__gnu_cxx::__normal_iterator<std::pair<std::string, bool> const*, std::vector<std::pair<std::string, bool>, std::allocator<std::pair<std::string, bool> > > >::__normal_iterator(std::pair<std::string, bool> const* const&)\"},\n    {\"_Z1fIiEDTeqfp_LDnEEPT_\", \"decltype((fp) == (std::nullptr_t)) f<int>(int*)\"},\n    {\"_Z1fIiEDTeqfp1_LDnEEicPT_\", \"decltype((fp1) == (std::nullptr_t)) f<int>(int, char, int*)\"},\n    {\"_ZZN1S1fEiiEd0_NKUlvE_clEv\", \"S::f(int, int)::'lambda'()::operator()() const\"},\n    {\"_Z3fooPM2ABi\", \"foo(int AB::**)\"},\n    {\"_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_\", \"r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const)\"},\n    {\"_Z1fPU11objcproto1A11objc_object\", \"f(id<A>)\"},\n    {\"_Z1fPKU11objcproto1A7NSArray\", \"f(NSArray<A> const*)\"},\n    {\"_ZNK1AIJ1Z1Y1XEEcv1BIJDpPT_EEIJS2_S1_S0_EEEv\", \"A<Z, Y, X>::operator B<X*, Y*, Z*><X, Y, Z>() const\"},\n    {\"_ZNK3Ncr6Silver7Utility6detail12CallOnThreadIZ53-[DeploymentSetupController handleManualServerEntry:]E3$_5EclIJEEEDTclclL_ZNS2_4getTIS4_EERT_vEEspclsr3stdE7forwardIT_Efp_EEEDpOSA_\", \"decltype(-[DeploymentSetupController handleManualServerEntry:]::$_5& Ncr::Silver::Utility::detail::getT<-[DeploymentSetupController handleManualServerEntry:]::$_5>()()(std::forward<-[DeploymentSetupController handleManualServerEntry:]::$_5>(fp))) Ncr::Silver::Utility::detail::CallOnThread<-[DeploymentSetupController handleManualServerEntry:]::$_5>::operator()<>(-[DeploymentSetupController handleManualServerEntry:]::$_5&&) const\"},\n    {\"_Zli2_xy\", \"operator\\\"\\\" _x(unsigned long long)\"},\n    {\"_Z1fIiEDcT_\", \"decltype(auto) f<int>(int)\"},\n};\n\nconst unsigned N = sizeof(cases) / sizeof(cases[0]);\n\nconst char* invalid_cases[] =\n{\n    \"_ZIPPreEncode\",\n    \"Agentt\",\n    \"NSoERj5E=Y1[uM:ga\",\n    \"Aon_PmKVPDk7?fg4XP5smMUL6;<WsI_mgbf23cCgsHbT<l8EE\\0uVRkNOoXDrgdA4[8IU>Vl<>IL8ayHpiVDDDXTY;^o9;i\",\n    \"_ZNSt16allocator_traitsISaIN4llvm3sys2fs18directory_iteratorEEE9constructIS3_IS3_EEEDTcl12_S_constructfp_fp0_spcl7forwardIT0_Efp1_EEERS4_PT_DpOS7_\",\n#if !LDBL_FP80\n    \"_ZN5test01hIfEEvRAcvjplstT_Le4001a000000000000000E_c\",\n#endif\n};\n\nconst unsigned NI = sizeof(invalid_cases) / sizeof(invalid_cases[0]);\n\nvoid test()\n{\n    std::size_t len = 0;\n    char* buf = nullptr;\n    for (unsigned i = 0; i < N; ++i)\n    {\n        int status;\n        char* demang = __cxxabiv1::__cxa_demangle(cases[i][0], buf, &len, &status);\n        if (demang == 0 || std::strcmp(demang, cases[i][1]) != 0)\n        {\n            std::cout << cases[i][0] << \" -> \" << cases[i][1] << '\\n';\n            if (demang)\n            {\n                std::cout << \"Got instead: \" << demang << '\\n';\n                assert(std::strcmp(demang, cases[i][1]) == 0);\n            }\n            else\n            {\n                std::cout << \"Got instead: NULL, \" << status << '\\n';\n                assert(demang != 0);\n            }\n        }\n        else\n        {\n            buf = demang;\n        }\n    }\n    free(buf);\n}\n\nvoid test2()\n{\n    std::size_t len = 0;\n    char* buf = nullptr;\n    for (unsigned i = 0; i < NI; ++i)\n    {\n        int status;\n        char* demang = __cxxabiv1::__cxa_demangle(invalid_cases[i], buf, &len, &status);\n        if (status != -2)\n        {\n            std::cout << invalid_cases[i] << \" should be invalid but is not\\n\" << \" got status = \" << status << '\\n';\n            assert(status == -2);\n        }\n        else\n        {\n            buf = demang;\n        }\n    }\n    free(buf);\n}\n\nint main()\n{\n    std::cout << \"Testing \" << N << \" symbols.\" << std::endl;\n    {\n        timer t;\n        test();\n        test2();\n    }\n#if 0\n    std::string input;\n    while (std::cin)\n    {\n        std::getline(std::cin, input);\n        if (std::cin.fail())\n            break;\n        std::size_t len = 0;\n        int status;\n        len = 0;\n        char* demang = abi::__cxa_demangle(input.c_str(), 0, &len, &status);\n        switch (status)\n        {\n        case -3:\n            std::cout << \"Invalid arguments\\n\";\n            break;\n        case -2:\n            std::cout << \"Invalid mangled name\\n\";\n            break;\n        case -1:\n            std::cout << \"memory allocation failure\\n\";\n            break;\n        case 0:\n            std::cout << \"len = \" << len << '\\n';\n            std::cout << demang << '\\n';\n            std::free(demang);\n            break;\n        case 1:\n            std::cout << \"not immplemented\\n\";\n            break;\n        }\n        std::cout << '\\n';\n    }\n#endif\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_exception_storage.pass.cpp",
    "content": "//===-------------------- test_exception_storage.cpp ----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"../src/config.h\"\n\n#include <cstdlib>\n#include <algorithm>\n#include <iostream>\n#if !LIBCXXABI_HAS_NO_THREADS\n#  include <pthread.h>\n#endif\n#include <unistd.h>\n\n#include \"../src/cxa_exception.hpp\"\n\ntypedef __cxxabiv1::__cxa_eh_globals globals_t ;\n\nvoid *thread_code (void *parm) {\n    size_t *result = (size_t *) parm;\n    globals_t *glob1, *glob2;\n    \n    glob1 = __cxxabiv1::__cxa_get_globals ();\n    if ( NULL == glob1 )\n        std::cerr << \"Got null result from __cxa_get_globals\" << std::endl;\n\n    glob2 = __cxxabiv1::__cxa_get_globals_fast ();\n    if ( glob1 != glob2 )\n        std::cerr << \"Got different globals!\" << std::endl;\n    \n    *result = (size_t) glob1;\n    sleep ( 1 );\n    return parm;\n    }\n\n#if !LIBCXXABI_HAS_NO_THREADS\n#define NUMTHREADS  10\nsize_t      thread_globals [ NUMTHREADS ] = { 0 };\npthread_t   threads        [ NUMTHREADS ];\n#endif\n\nvoid print_sizes ( size_t *first, size_t *last ) {\n    std::cout << \"{ \" << std::hex;\n    for ( size_t *iter = first; iter != last; ++iter )\n        std::cout << *iter << \" \";\n    std::cout << \"}\" << std::dec << std::endl;\n    }\n\nint main ( int argc, char *argv [] ) {\n    int retVal = 0;\n\n#if LIBCXXABI_HAS_NO_THREADS\n    size_t thread_globals;\n    // Check that __cxa_get_globals() is not NULL.\n    if (thread_code(&thread_globals) == 0) {\n        retVal = 1;\n    }\n#else\n//  Make the threads, let them run, and wait for them to finish\n    for ( int i = 0; i < NUMTHREADS; ++i )\n        pthread_create( threads + i, NULL, thread_code, (void *) (thread_globals + i));\n    for ( int i = 0; i < NUMTHREADS; ++i )\n        pthread_join ( threads [ i ], NULL );\n\n    for ( int i = 0; i < NUMTHREADS; ++i )\n        if ( 0 == thread_globals [ i ] ) {\n            std::cerr << \"Thread #\" << i << \" had a zero global\" << std::endl;\n            retVal = 1;\n            }\n        \n//  print_sizes ( thread_globals, thread_globals + NUMTHREADS );\n    std::sort ( thread_globals, thread_globals + NUMTHREADS );\n    for ( int i = 1; i < NUMTHREADS; ++i )\n        if ( thread_globals [ i - 1 ] == thread_globals [ i ] ) {\n            std::cerr << \"Duplicate thread globals (\" << i-1 << \" and \" << i << \")\" << std::endl;\n            retVal = 2;\n            }\n//  print_sizes ( thread_globals, thread_globals + NUMTHREADS );\n\n#endif\n    return retVal;\n    }\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_fallback_malloc.pass.cpp",
    "content": "//===--------------------- test_fallback_malloc.cpp -----------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <deque>\n\n#include <pthread.h>\n\ntypedef std::deque<void *> container;\n\n// #define  DEBUG_FALLBACK_MALLOC\n#define INSTRUMENT_FALLBACK_MALLOC\n#include \"../src/fallback_malloc.ipp\"\n\ncontainer alloc_series ( size_t sz ) {\n    container ptrs;\n    void *p;\n    \n    while ( NULL != ( p = fallback_malloc ( sz )))\n        ptrs.push_back ( p );\n    return ptrs;\n    }\n\ncontainer alloc_series ( size_t sz, float growth ) {\n    container ptrs;\n    void *p;\n    \n    while ( NULL != ( p = fallback_malloc ( sz ))) {\n        ptrs.push_back ( p );\n        sz *= growth;\n        }\n\n    return ptrs;\n    }\n\ncontainer alloc_series ( const size_t *first, size_t len ) {\n    container ptrs;\n    const size_t *last = first + len;\n    void * p;\n    \n    for ( const size_t *iter = first; iter != last; ++iter ) {\n        if ( NULL == (p = fallback_malloc ( *iter )))\n            break;\n        ptrs.push_back ( p );\n        }\n\n    return ptrs;\n    }\n\nvoid *pop ( container &c, bool from_end ) {\n    void *ptr;\n    if ( from_end ) {\n        ptr = c.back ();\n        c.pop_back ();\n        }\n    else {\n        ptr = c.front ();\n        c.pop_front ();\n        }\n    return ptr;\n    }\n\nvoid exhaustion_test1 () {\n    container ptrs;\n    \n    init_heap ();\n    std::cout << \"Constant exhaustion tests\" << std::endl;\n    \n//  Delete in allocation order\n    ptrs = alloc_series ( 32 );\n    std::cout << \"Allocated \" << ptrs.size () << \" 32 byte chunks\" << std::endl;\n    print_free_list ();\n    for ( container::iterator iter = ptrs.begin (); iter != ptrs.end (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n\n//  Delete in reverse order\n    ptrs = alloc_series ( 32 );\n    std::cout << \"Allocated \" << ptrs.size () << \" 32 byte chunks\" << std::endl;\n    for ( container::reverse_iterator iter = ptrs.rbegin (); iter != ptrs.rend (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n\n//  Alternate deletions\n    ptrs = alloc_series ( 32 );\n    std::cout << \"Allocated \" << ptrs.size () << \" 32 byte chunks\" << std::endl;\n    while ( ptrs.size () > 0 )\n        fallback_free ( pop ( ptrs, ptrs.size () % 1 == 1 ));\n    print_free_list ();\n    }\n            \nvoid exhaustion_test2 () {\n    container ptrs;\n    init_heap ();\n    \n    std::cout << \"Growing exhaustion tests\" << std::endl;\n\n//  Delete in allocation order\n    ptrs = alloc_series ( 32, 1.5 );\n    std::cout << \"Allocated \" << ptrs.size () << \" { 32, 48, 72, 108, 162 ... }  byte chunks\" << std::endl;\n    print_free_list ();\n    for ( container::iterator iter = ptrs.begin (); iter != ptrs.end (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n    \n//  Delete in reverse order\n    print_free_list ();\n    ptrs = alloc_series ( 32, 1.5 );\n    std::cout << \"Allocated \" << ptrs.size () << \" { 32, 48, 72, 108, 162 ... }  byte chunks\" << std::endl;\n    for ( container::reverse_iterator iter = ptrs.rbegin (); iter != ptrs.rend (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n\n//  Alternate deletions\n    ptrs = alloc_series ( 32, 1.5 );\n    std::cout << \"Allocated \" << ptrs.size () << \" { 32, 48, 72, 108, 162 ... }  byte chunks\" << std::endl;\n    while ( ptrs.size () > 0 )\n        fallback_free ( pop ( ptrs, ptrs.size () % 1 == 1 ));\n    print_free_list (); \n    \n    }\n\nvoid exhaustion_test3 () {\n    const size_t allocs [] = { 124, 60, 252, 60, 4 };\n    container ptrs;\n    init_heap ();\n    \n    std::cout << \"Complete exhaustion tests\" << std::endl;\n\n//  Delete in allocation order\n    ptrs = alloc_series ( allocs, sizeof ( allocs ) / sizeof ( allocs[0] ));\n    std::cout << \"Allocated \" << ptrs.size () << \" chunks\" << std::endl;\n    print_free_list ();\n    for ( container::iterator iter = ptrs.begin (); iter != ptrs.end (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n    \n//  Delete in reverse order\n    print_free_list ();\n    ptrs = alloc_series ( allocs, sizeof ( allocs ) / sizeof ( allocs[0] ));\n    std::cout << \"Allocated \" << ptrs.size () << \" chunks\" << std::endl;\n    for ( container::reverse_iterator iter = ptrs.rbegin (); iter != ptrs.rend (); ++iter )\n        fallback_free ( *iter );\n    print_free_list ();\n    std::cout << \"----\" << std::endl;\n\n//  Alternate deletions\n    ptrs = alloc_series ( allocs, sizeof ( allocs ) / sizeof ( allocs[0] ));\n    std::cout << \"Allocated \" << ptrs.size () << \" chunks\" << std::endl;\n    while ( ptrs.size () > 0 )\n        fallback_free ( pop ( ptrs, ptrs.size () % 1 == 1 ));\n    print_free_list (); \n    \n    }\n\n    \nint main ( int argc, char *argv [] ) {\n    print_free_list ();\n\n    char *p = (char *) fallback_malloc ( 1024 );    // too big!\n    std::cout << \"fallback_malloc ( 1024 ) --> \" << (unsigned long ) p << std::endl;\n    print_free_list ();\n    \n    p = (char *) fallback_malloc ( 32 );\n    std::cout << \"fallback_malloc ( 32 ) --> \" << (unsigned long) (p - heap) << std::endl;\n    if ( !is_fallback_ptr ( p ))\n        std::cout << \"### p is not a fallback pointer!!\" << std::endl;\n    \n    print_free_list ();\n    fallback_free ( p );\n    print_free_list ();\n    \n    std::cout << std::endl;\n    exhaustion_test1 (); std::cout << std::endl;\n    exhaustion_test2 (); std::cout << std::endl;\n    exhaustion_test3 (); std::cout << std::endl;\n    return 0;\n    }\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_guard.pass.cpp",
    "content": "//===----------------------------- test_guard.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"../src/config.h\"\n#include \"cxxabi.h\"\n\n#include <cassert>\n\n#if !LIBCXXABI_HAS_NO_THREADS\n#include <thread>\n#endif\n\n// Ensure that we initialize each variable once and only once.\nnamespace test1 {\n    static int run_count = 0;\n    int increment() {\n        ++run_count;\n        return 0;\n    }\n    void helper() {\n        static int a = increment();\n    }\n    void test() {\n        static int a = increment();\n        assert(run_count == 1);\n        static int b = increment();\n        assert(run_count == 2);\n        helper();\n        assert(run_count == 3);\n        helper();\n        assert(run_count == 3);\n    }\n}\n\n// When initialization fails, ensure that we try to initialize it again next\n// time.\nnamespace test2 {\n    static int run_count = 0;\n    int increment() {\n        ++run_count;\n        throw 0;\n    }\n    void helper() {\n        try {\n            static int a = increment();\n            assert(0);\n        } catch (...) {}\n    }\n    void test() {\n        helper();\n        assert(run_count == 1);\n        helper();\n        assert(run_count == 2);\n    }\n}\n\n// Check that we can initialize a second value while initializing a first.\nnamespace test3 {\n    int zero() {\n        return 0;\n    }\n\n    int one() {\n        static int b = zero();\n        return 0;\n    }\n\n    void test() {\n        static int a = one();\n    }\n}\n\n#if !LIBCXXABI_HAS_NO_THREADS\n// A simple thread test of two threads racing to initialize a variable. This\n// isn't guaranteed to catch any particular threading problems.\nnamespace test4 {\n    static int run_count = 0;\n    int increment() {\n        ++run_count;\n        return 0;\n    }\n\n    void helper() {\n        static int a = increment();\n    }\n\n    void test() {\n        std::thread t1(helper), t2(helper);\n        t1.join();\n        t2.join();\n        assert(run_count == 1);\n    }\n}\n\n// Check that we don't re-initialize a static variable even when it's\n// encountered from two different threads.\nnamespace test5 {\n    static int run_count = 0;\n    int zero() {\n        ++run_count;\n        return 0;\n    }\n\n    int one() {\n        static int b = zero();\n        return 0;\n    }\n\n    void another_helper() {\n        static int a = one();\n    }\n\n    void helper() {\n        static int a = one();\n        std::thread t(another_helper);\n        t.join();\n    }\n\n    void test() {\n        std::thread t(helper);\n        t.join();\n        assert(run_count == 1);\n    }\n}\n#endif /* LIBCXXABI_HAS_NO_THREADS */\n\nint main()\n{\n    test1::test();\n    test2::test();\n    test3::test();\n#if !LIBCXXABI_HAS_NO_THREADS\n    test4::test();\n    test5::test();\n#endif\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_vector1.pass.cpp",
    "content": "//===---------------------------- test_vector.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n\n#include <iostream>\n#include <cstdlib>\n#include <cassert>\n\n//  Wrapper routines\nvoid *my_alloc2 ( size_t sz ) {\n    void *p = std::malloc ( sz );\n//  std::printf ( \"Allocated %ld bytes at %lx\\n\", sz, (unsigned long) p );  \n    return p;\n    }\n    \nvoid my_dealloc2 ( void *p ) {\n//  std::printf ( \"Freeing %lx\\n\", (unsigned long) p ); \n    std::free ( p ); \n    }\n\nvoid my_dealloc3 ( void *p, size_t   sz   ) {\n//  std::printf ( \"Freeing %lx (size %ld)\\n\", (unsigned long) p, sz );  \n    std::free ( p ); \n    }\n\nvoid my_construct ( void *p ) {\n//  std::printf ( \"Constructing %lx\\n\", (unsigned long) p );\n    }\n\nvoid my_destruct  ( void *p ) {\n//  std::printf ( \"Destructing  %lx\\n\", (unsigned long) p );\n    }\n\nint gCounter;\nvoid count_construct ( void *p ) { ++gCounter; }\nvoid count_destruct  ( void *p ) { --gCounter; }\n\n\nint gConstructorCounter;\nint gConstructorThrowTarget;\nint gDestructorCounter;\nint gDestructorThrowTarget;\nvoid throw_construct ( void *p ) { if ( gConstructorCounter   == gConstructorThrowTarget ) throw 1; ++gConstructorCounter; }\nvoid throw_destruct  ( void *p ) { if ( ++gDestructorCounter  == gDestructorThrowTarget  ) throw 2; }\n\n#if __cplusplus >= 201103L\n#   define CAN_THROW noexcept(false)\n#else\n#   define CAN_THROW\n#endif\n\nstruct vec_on_stack {\n    void *storage;\n    vec_on_stack () : storage ( __cxxabiv1::__cxa_vec_new    (            10, 40, 8, throw_construct, throw_destruct )) {}\n    ~vec_on_stack () CAN_THROW {__cxxabiv1::__cxa_vec_delete ( storage,       40, 8,                  throw_destruct );  }\n    };\n\n//  Test calls with empty constructors and destructors\nint test_empty ( ) {\n    void *one, *two, *three;\n\n//  Try with no padding and no con/destructors\n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 0, NULL, NULL );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 0, NULL, NULL, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 0, NULL, NULL, my_alloc2, my_dealloc3 );\n\n    __cxxabiv1::__cxa_vec_delete ( one,       40, 0, NULL );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 0, NULL, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 0, NULL, my_dealloc3 );\n    \n//  Try with no padding\n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 0, my_construct, my_destruct );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 0, my_construct, my_destruct, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 0, my_construct, my_destruct, my_alloc2, my_dealloc3 );\n\n    __cxxabiv1::__cxa_vec_delete ( one,       40, 0, my_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 0, my_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 0, my_destruct, my_dealloc3 );\n\n//  Padding and no con/destructors \n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, NULL, NULL );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, NULL, NULL, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 8, NULL, NULL, my_alloc2, my_dealloc3 );\n\n    __cxxabiv1::__cxa_vec_delete ( one,       40, 8, NULL );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 8, NULL, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 8, NULL, my_dealloc3 );\n\n//  Padding with con/destructors \n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, my_construct, my_destruct );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, my_construct, my_destruct, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 8, my_construct, my_destruct, my_alloc2, my_dealloc3 );\n\n    __cxxabiv1::__cxa_vec_delete ( one,       40, 8, my_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 8, my_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 8, my_destruct, my_dealloc3 );\n\n    return 0;\n    }\n\n//  Make sure the constructors and destructors are matched\nint test_counted ( ) {\n    int retVal = 0;\n    void *one, *two, *three;\n\n//  Try with no padding\n    gCounter = 0;   \n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 0, count_construct, count_destruct );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 0, count_construct, count_destruct, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 0, count_construct, count_destruct, my_alloc2, my_dealloc3 );\n    \n    __cxxabiv1::__cxa_vec_delete ( one,       40, 0, count_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 0, count_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 0, count_destruct, my_dealloc3 );\n    \n//  Since there was no padding, the # of elements in the array are not stored \n//  and the destructors are not called.\n    if ( gCounter != 30 ) {\n        std::cerr << \"Mismatched Constructor/Destructor calls (1)\" << std::endl;\n        std::cerr << \"  Expected 30, got \" << gCounter << std::endl;\n        retVal = 1;\n        }\n    \n    gCounter = 0;   \n    one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, count_construct, count_destruct );\n    two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, count_construct, count_destruct, my_alloc2, my_dealloc2 );\n    three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 8, count_construct, count_destruct, my_alloc2, my_dealloc3 );\n\n    __cxxabiv1::__cxa_vec_delete ( one,       40, 8, count_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 8, count_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 8, count_destruct, my_dealloc3 );\n\n    if ( gCounter != 0 ) {\n        std::cerr << \"Mismatched Constructor/Destructor calls (2)\" << std::endl;\n        std::cerr << \"  Expected 0, got \" << gCounter << std::endl;\n        retVal = 1;\n        }\n\n    return retVal;\n    }\n    \n//  Make sure the constructors and destructors are matched\nint test_exception_in_constructor ( ) {\n    int retVal = 0;\n    void *one, *two, *three;\n\n//  Try with no padding\n    gConstructorCounter = gDestructorCounter = 0;\n    gConstructorThrowTarget = 15;\n    gDestructorThrowTarget  = -1;\n    try {\n        one = two = three = NULL;\n        one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 0, throw_construct, throw_destruct );\n        two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 0, throw_construct, throw_destruct, my_alloc2, my_dealloc2 );\n        three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 0, throw_construct, throw_destruct, my_alloc2, my_dealloc3 );\n        }\n    catch ( int i ) {}\n    \n    __cxxabiv1::__cxa_vec_delete ( one,       40, 0, throw_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 0, throw_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 0, throw_destruct, my_dealloc3 );\n    \n//  Since there was no padding, the # of elements in the array are not stored \n//  and the destructors are not called.\n//  Since we threw after 15 calls to the constructor, we should see 5 calls to\n//      the destructor from the partially constructed array.\n    if ( gConstructorCounter - gDestructorCounter != 10 ) {\n        std::cerr << \"Mismatched Constructor/Destructor calls (1C)\" << std::endl;\n        std::cerr << gConstructorCounter << \" constructors, but \" << \n                gDestructorCounter << \" destructors\" << std::endl;\n        retVal = 1;\n        }\n    \n    gConstructorCounter = gDestructorCounter = 0;\n    gConstructorThrowTarget = 15;\n    gDestructorThrowTarget  = -1;\n    try {\n        one = two = three = NULL;\n        one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, throw_construct, throw_destruct );\n        two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, throw_construct, throw_destruct, my_alloc2, my_dealloc2 );\n        three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 8, throw_construct, throw_destruct, my_alloc2, my_dealloc3 );\n        }\n    catch ( int i ) {}\n    \n    __cxxabiv1::__cxa_vec_delete ( one,       40, 8, throw_destruct );\n    __cxxabiv1::__cxa_vec_delete2( two,       40, 8, throw_destruct, my_dealloc2 );\n    __cxxabiv1::__cxa_vec_delete3( three,     40, 8, throw_destruct, my_dealloc3 );\n\n    if ( gConstructorCounter != gDestructorCounter ) {\n        std::cerr << \"Mismatched Constructor/Destructor calls (2C)\" << std::endl;\n        std::cerr << gConstructorCounter << \" constructors, but \" << \n                gDestructorCounter << \" destructors\" << std::endl;\n        retVal = 1;\n        }\n\n    return retVal;\n    }\n\n//  Make sure the constructors and destructors are matched\nint test_exception_in_destructor ( ) {\n    int retVal = 0;\n    void *one, *two, *three;\n    one = two = three = NULL;\n\n//  Throw from within a destructor\n    gConstructorCounter = gDestructorCounter = 0;\n    gConstructorThrowTarget = -1;\n    gDestructorThrowTarget  = 15;\n    try {\n        one = two = NULL;\n        one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, throw_construct, throw_destruct );\n        two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, throw_construct, throw_destruct, my_alloc2, my_dealloc2 );\n        }\n    catch ( int i ) {}\n    \n    try {\n        __cxxabiv1::__cxa_vec_delete ( one,       40, 8, throw_destruct );\n        __cxxabiv1::__cxa_vec_delete2( two,       40, 8, throw_destruct, my_dealloc2 );\n        assert(false);\n        }\n    catch ( int i ) {}\n    \n//  We should have thrown in the middle of cleaning up \"two\", which means that\n//  there should be 20 calls to the destructor and the try block should exit\n//  before the assertion.\n    if ( gConstructorCounter != 20 || gDestructorCounter != 20 ) {\n        std::cerr << \"Unexpected Constructor/Destructor calls (1D)\" << std::endl;\n        std::cerr << \"Expected (20, 20), but got (\" << gConstructorCounter << \", \" <<\n                gDestructorCounter << \")\" << std::endl;\n        retVal = 1;\n        }\n\n//  Try throwing from a destructor - should be fine.\n    gConstructorCounter = gDestructorCounter = 0;\n    gConstructorThrowTarget = -1;\n    gDestructorThrowTarget  = 5;\n    try { vec_on_stack v; }\n    catch ( int i ) {}\n    \n    if ( gConstructorCounter != gDestructorCounter ) {\n        std::cerr << \"Mismatched Constructor/Destructor calls (2D)\" << std::endl;\n        std::cerr << gConstructorCounter << \" constructors, but \" << \n                gDestructorCounter << \" destructors\" << std::endl;\n        retVal = 1;\n        }\n\n    return retVal;\n    }\n\nint main ( int argc, char *argv [] ) {\n    int retVal = 0;\n    retVal += test_empty ();\n    retVal += test_counted ();\n    retVal += test_exception_in_constructor ();\n    retVal += test_exception_in_destructor ();\n    return retVal;\n    }\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_vector2.pass.cpp",
    "content": "//===--------------------------- test_vector2.cpp -------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n\n#include <iostream>\n#include <cstdlib>\n\nvoid my_terminate () { exit ( 0 ); }\n\n//  Wrapper routines\nvoid *my_alloc2 ( size_t sz ) {\n    void *p = std::malloc ( sz );\n//  std::printf ( \"Allocated %ld bytes at %lx\\n\", sz, (unsigned long) p );  \n    return p;\n    }\n    \nvoid my_dealloc2 ( void *p ) {\n//  std::printf ( \"Freeing %lx\\n\", (unsigned long) p ); \n    std::free ( p ); \n    }\n\nvoid my_dealloc3 ( void *p, size_t   sz   ) {\n//  std::printf ( \"Freeing %lx (size %ld)\\n\", (unsigned long) p, sz );  \n    std::free ( p ); \n    }\n\nvoid my_construct ( void *p ) {\n//  std::printf ( \"Constructing %lx\\n\", (unsigned long) p );\n    }\n\nvoid my_destruct  ( void *p ) {\n//  std::printf ( \"Destructing  %lx\\n\", (unsigned long) p );\n    }\n\nint gCounter;\nvoid count_construct ( void *p ) { ++gCounter; }\nvoid count_destruct  ( void *p ) { --gCounter; }\n\n\nint gConstructorCounter;\nint gConstructorThrowTarget;\nint gDestructorCounter;\nint gDestructorThrowTarget;\nvoid throw_construct ( void *p ) { if ( gConstructorCounter   == gConstructorThrowTarget ) throw 1; ++gConstructorCounter; }\nvoid throw_destruct  ( void *p ) { if ( ++gDestructorCounter  == gDestructorThrowTarget  ) throw 2; }\n\nstruct vec_on_stack {\n    void *storage;\n    vec_on_stack () : storage ( __cxxabiv1::__cxa_vec_new    (            10, 40, 8, throw_construct, throw_destruct )) {}\n    ~vec_on_stack () {          __cxxabiv1::__cxa_vec_delete ( storage,       40, 8,                  throw_destruct );  }\n    };\n\n\n//  Make sure the constructors and destructors are matched\nvoid test_exception_in_destructor ( ) {\n\n//  Try throwing from a destructor while unwinding the stack -- should abort\n    gConstructorCounter = gDestructorCounter = 0;\n    gConstructorThrowTarget = -1;\n    gDestructorThrowTarget  = 5;\n    try {\n        vec_on_stack v;\n        throw 3;\n        }\n    catch ( int i ) {}\n\n    std::cerr << \"should never get here\" << std::endl;    \n    }\n\n\n\nint main ( int argc, char *argv [] ) {\n    std::set_terminate ( my_terminate );\n    test_exception_in_destructor ();\n    return 1;       // we failed if we get here\n    }\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/test_vector3.pass.cpp",
    "content": "//===------------------------- test_vector3.cpp ---------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include \"cxxabi.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <assert.h>\n#include <exception>\n\n#include <memory>\n\n// use dtors instead of try/catch\nnamespace test1 {\n    struct B {\n         ~B() {\n            printf(\"should not be run\\n\");\n            exit(10);\n            }\n};\n\nstruct A {\n ~A()\n#if __has_feature(cxx_noexcept)\n    noexcept(false)\n#endif\n {\n   B b;\n   throw 0;\n }\n};\n}  // test1\n\nvoid my_terminate() { exit(0); }\n\ntemplate <class T>\nvoid destroy(void* v)\n{\n  T* t = static_cast<T*>(v);\n  t->~T();\n}\n\nint main( int argc, char *argv [])\n{\n  std::set_terminate(my_terminate);\n  {\n  typedef test1::A Array[10];\n  Array a[10]; // calls _cxa_vec_dtor\n  __cxxabiv1::__cxa_vec_dtor(a, 10, sizeof(test1::A), destroy<test1::A>);\n  assert(false);\n  }\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/testit",
    "content": "#!/bin/sh\n# //===--------------------------- testit ---------------------------------===//\n# //\n# //                     The LLVM Compiler Infrastructure\n# //\n# // This file is distributed under the University of Illinois Open Source\n# // License. See LICENSE.TXT for details.\n# //\n# //===--------------------------------------------------------------------===//\n\nif [ -z \"$CC\" ]\nthen\n\tCC=clang++\nfi\n\nif [ -z \"$OPTIONS\" ]\nthen\n\tOPTIONS=\"-std=c++0x -stdlib=libc++\"\nfi\n\ncase $TRIPLE in\n  *-*-mingw* | *-*-cygwin* | *-*-win*)\n\tTEST_EXE=test.exe\n    ;;\n  *)\n    TEST_EXE=a.out\n    ;;\nesac\n\nFAIL=0\nPASS=0\nUNIMPLEMENTED=0\nIMPLEMENTED_FAIL=0\nIMPLEMENTED_PASS=0\n\nafunc()\n{\n\tfail=0\n\tpass=0\n\tif (ls *.fail.cpp > /dev/null 2>&1)\n\tthen\n\t\tfor FILE in $(ls *.fail.cpp); do\n\t\t\tif $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1\n\t\t\tthen\n\t\t\t\trm ./$TEST_EXE\n\t\t\t\techo \"$FILE should not compile\"\n\t\t\t\tfail=$(($fail + 1))\n\t\t\telse\n\t\t\t\tpass=$(($pass + 1))\n\t\t\tfi\n\t\tdone\n\tfi\n\n\tif (ls *.cpp > /dev/null 2>&1)\n\tthen\n\t\tfor FILE in $(ls *.pass.cpp); do\n\t\t\tif $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE\n\t\t\tthen\n\t\t\t\tif ./$TEST_EXE\n\t\t\t\tthen\n\t\t\t\t\trm ./$TEST_EXE\n\t\t\t\t\tpass=$(($pass + 1))\n\t\t\t\telse\n\t\t\t\t\techo \"$FILE failed at run time\"\n\t\t\t\t\tfail=$(($fail + 1))\n\t\t\t\t\trm ./$TEST_EXE\n\t\t\t\tfi\n\t\t\telse\n\t\t\t\techo \"$FILE failed to compile\"\n\t\t\t\tfail=$(($fail + 1))\n\t\t\tfi\n\t\tdone\n\tfi\n\n\tif [ $fail -gt 0 ]\n\tthen\n\t\techo \"failed $fail tests in `pwd`\"\n\t\tIMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL + 1))\n\tfi\n\tif [ $pass -gt 0 ]\n\tthen\n\t\techo \"passed $pass tests in `pwd`\"\n\t\tif [ $fail -eq 0 ]\n\t\tthen\n\t\t\tIMPLEMENTED_PASS=$(($IMPLEMENTED_PASS + 1))\n\t\tfi\n\tfi\n\tif [ $fail -eq 0 -a $pass -eq 0 ]\n\tthen\n\t\techo \"not implemented:  `pwd`\"\n\t\tUNIMPLEMENTED=$(($UNIMPLEMENTED + 1))\n\tfi\n\n\tFAIL=$(($FAIL + $fail))\n\tPASS=$(($PASS + $pass))\n\n\tfor FILE in *\n\tdo\n\t\tif [ -d \"$FILE\" ];\n\t\tthen\n\t\t\tcd $FILE\n\t\t\tafunc\n\t\t\tcd ..\n\t\tfi\n\tdone\n}\n\nafunc\n\necho \"****************************************************\"\necho \"Results for `pwd`:\"\necho \"using `$CC --version`\"\necho \"with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB\"\necho \"----------------------------------------------------\"\necho \"sections without tests   : $UNIMPLEMENTED\"\necho \"sections with failures   : $IMPLEMENTED_FAIL\"\necho \"sections without failures: $IMPLEMENTED_PASS\"\necho \"                       +   ----\"\necho \"total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))\"\necho \"----------------------------------------------------\"\necho \"number of tests failed   : $FAIL\"\necho \"number of tests passed   : $PASS\"\necho \"                       +   ----\"\necho \"total number of tests    : $(($FAIL+$PASS))\"\necho \"****************************************************\"\n\nexit $FAIL\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/testit_android",
    "content": "#!/bin/bash\n# //===--------------------------- testit ---------------------------------===//\n# //\n# //                     The LLVM Compiler Infrastructure\n# //\n# // This file is distributed under the University of Illinois Open Source\n# // License. See LICENSE.TXT for details.\n# //\n# //===--------------------------------------------------------------------===//\n\ncurrentpath=`pwd`\norigpath=$currentpath\ncurrentdir=`basename $currentpath`\nwhile [ $currentdir != \"test\" ]; do\n\tif [ $currentdir = \"/\" ]\n\tthen\n\t\techo \"current directory must be in or under \\\"test\\\".\"\n\t\texit 1\n\tfi\n\tcd ..\n\tcurrentpath=`pwd`\n\tcurrentdir=`basename $currentpath`\ndone\n\ncd ..\nLIBCXX_ROOT=`pwd`/../../llvm-libc++/libcxx\ncd $origpath\n\nVERBOSE=1\n\nrun () {\n  if [ \"$VERBOSE\" -gt 1 ]; then\n    echo \"COMMAND: $@\"\n  fi\n  case $VERBOSE in\n    0|1)\n      # Hide command output and errors.\n      \"$@\" >/dev/null 2>&1\n      ;;\n    2)\n      # Only hide command output\n      \"$@\" >/dev/null\n      ;;\n    *)\n      # Show command output and errors.\n      \"$@\"\n      ;;\n  esac\n}\n\nrun2 () {\n  if [ \"$VERBOSE\" -gt 2 ]; then\n    echo \"COMMAND: $@\"\n  fi\n  case $VERBOSE in\n    0|1)\n      # Hide command output and errors.\n      \"$@\" >/dev/null 2>&1\n      ;;\n    2)\n      # Only hide command output\n      \"$@\" >/dev/null\n      ;;\n    *)\n      # Show command output and errors.\n      \"$@\"\n      ;;\n  esac\n}\n\n# The list of valid target abis supported by this script.\nVALID_ABIS=\"armeabi armeabi-v7a armeabi-v7a-hard x86 mips\"\n\nDO_HELP=\nDO_STATIC=\nTARGET_ABI=\nTARGET_ARCH=\nif [ -n \"$SHARD_TEST_TOOLCHAIN\" ]; then\n  TARGET_PATH=/data/local/tmp/libcxx-${SHARD_TEST_TOOLCHAIN}-$(dirname $PWD | sum | cut -d' ' -f1)-$(basename $PWD)\nelse\n  TARGET_PATH=/data/local/tmp/libcxx\nfi\nCXX=\nWITH_COMPILER_RT=\nOPTIMIZE=\nfor OPT; do\n  case $OPT in\n    --help|-?)\n      DO_HELP=true\n      ;;\n    --abi=*)\n      TARGET_ABI=${OPT##--abi=}\n      ;;\n    --static)\n      DO_STATIC=true\n      ;;\n    --shared)\n      DO_STATIC=\n      ;;\n    --cxx=*)\n      CXX=${OPT##--cxx=}\n      ;;\n    --verbose)\n      VERBOSE=$(( $VERBOSE + 1 ))\n      ;;\n    --with-compiler-rt)\n      WITH_COMPILER_RT=yes\n      ;;\n    -O*)\n      OPTIMIZE=$OPT\n      ;;\n    -*)\n      echo \"Unknown option: $OPT. See --help.\"\n      exit 1\n      ;;\n    *)\n      echo \"This script doesn't take parameters. See --help.\"\n      exit 1\n      ;;\n  esac\ndone\n\nif [ \"$DO_HELP\" ]; then\n  echo \\\n\"Usage: $(basename $0) [options]\n\nThis script is used to run the libc++ test suite for Android.\nYou will need the following things:\n\n  - The prebuild libc++ libraries in your NDK install.\n  - A prebuilt Android toolchain in your path.\n  - The 'adb' tool in your path.\n  - An Android device connected to ADB.\n\nThe toolchain and device must match your target ABI. For example, if\nyou use --abi=armeabi-v7a, your device must run ARMv7-A Android binaries,\nand arm-linux-androideabi-g++ will be used to compile all tests, unless\nyou use --cxx=<command> to override it.\n\nValid options:\n  --help|-?        Display this message.\n  --abi=<name>     Specify target ABI. Use --abi=list for list.\n  --static         Link against static libc++ library.\n  --cxx=<program>  Override C++ compiler/linker.\n  --verbose        Increase verbosity.\n\"\n  exit 0\nfi\n\n# Check target ABI.\nif [ \"$TARGET_ABI\" = \"list\" ]; then\n  echo \"List of valid target ABIs:\"\n  for ABI in $VALID_ABIS; do\n    printf \" %s\" $ABI\n  done\n  printf \"\\n\"\n  exit 0\nfi\n\nif [ -z \"$TARGET_ABI\" ]; then\n  echo \"ERROR: Please specify a target ABI (--abi=<name>).\"\n  exit 1\nfi\n\nFOUND_ABI=\nfor ABI in $VALID_ABIS; do\n  if [ \"$ABI\" = \"$TARGET_ABI\" ]; then\n    FOUND_ABI=true\n    break\n  fi\ndone\n\nif [ -z \"$FOUND_ABI\" ]; then\n  echo \"ERROR: Invalid abi '$TARGET_ABI'. Must be one of: $VALID_ABIS\"\n  exit 1\nfi\n\nLIBCXX_LIBS=$(cd $LIBCXX_ROOT/.. && pwd)/libs/$TARGET_ABI\nfor LIB in libc++_static.a libc++_shared.so; do\n  if [ ! -f \"$LIBCXX_LIBS/$LIB\" ]; then\n    echo \"ERROR: Missing prebuilt library: $LIBCXX_LIBS/$LIB\"\n    echo \"Please run: build/tools/build-cxx-stl.sh --stl=libc++\"\n    exit 1\n  fi\ndone\n\nLIBCOMPILER_RT_LIBS=$(cd \"$LIBCXX_ROOT\"/../../../android/compiler-rt && pwd)/libs/$TARGET_ABI\nif [ \"$WITH_COMPILER_RT\" = \"yes\" ]; then\n  for LIB in libcompiler_rt_static.a libcompiler_rt_shared.so; do\n    if [ ! -f \"$LIBCOMPILER_RT_LIBS/$LIB\" ]; then\n      echo \"ERROR: Missing prebuilt library: $LIBCOMPILER_RT_LIBS/$LIB\"\n      echo \"Please run: build/tools/build-compiler-rt.sh --ndk-dir=$NDK \\\n--src-dir=/tmp/ndk-$USER/src/llvm-3.4/compiler-rt --llvm-version=3.4\"\n      exit 1\n    fi\n  done\nfi\n\n# Check or detect C++ toolchain.\nTOOLCHAIN_CFLAGS=\nTOOLCHAIN_LDFLAGS=\nTHUMB_MODE=\"-mthumb\"\nLIBM=\"-lm\"\nif [ -z \"$TOOLCHAIN_PREFIX\" ]; then\n  # Compute\n  case $TARGET_ABI in\n    armeabi)\n      TOOLCHAIN_PREFIX=arm-linux-androideabi\n      TOOLCHAIN_CFLAGS=\"$THUMB_MODE\"\n      TOOLCHAIN_LDFLAGS=\"$THUMB_MODE\"\n      ;;\n    armeabi-v7a)\n      TOOLCHAIN_PREFIX=arm-linux-androideabi\n      TOOLCHAIN_CFLAGS=\"-march=armv7-a $THUMB_MODE -mfpu=vfpv3-d16\"\n      TOOLCHAIN_LDFLAGS=\"-march=armv7-a $THUMB_MODE -Wl,--fix-cortex-a8\"\n      ;;\n    armeabi-v7a-hard)\n      TOOLCHAIN_PREFIX=arm-linux-androideabi\n      TOOLCHAIN_CFLAGS=\"-march=armv7-a $THUMB_MODE -mfpu=vfpv3-d16 -mhard-float -D_NDK_MATH_NO_SOFTFP=1\"\n      TOOLCHAIN_LDFLAGS=\"-march=armv7-a $THUMB_MODE -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch\"\n      LIBM=\"-lm_hard\"\n      ;;\n    x86)\n      TOOLCHAIN_PREFIX=i686-linux-android\n      ;;\n    mips)\n      TOOLCHAIN_PREFIX=mipsel-linux-android\n      ;;\n    *)\n      echo \"ERROR: Unknown ABI '$ABI'\"\n      exit 1\n      ;;\n  esac\n  if [ -z \"$CXX\" ]; then\n      CXX=$TOOLCHAIN_PREFIX-g++\n  fi\nfi\n\nREAL_CXX=$(which \"$CXX\" 2>/dev/null)\nif [ -z \"$REAL_CXX\" ]; then\n  echo \"ERROR: Missing C++ compiler: $CXX\"\n  exit 1\nfi\nCC=$CXX\n\nfunction version_ge {\n    input_string=$1\n    compare_string=$2\n    input_major=$(echo $input_string | cut -d\\. -f 1)\n    input_minor=$(echo $input_string | cut -d\\. -f 2)\n    compare_major=$(echo $compare_string | cut -d\\. -f 1)\n    compare_minor=$(echo $compare_string | cut -d\\. -f 2)\n    true=0\n    false=1\n    if [ \"$input_major\" -gt \"$compare_major\" ]; then return $true; fi\n    if [ \"$input_major\" -lt \"$compare_major\" ]; then return $false; fi\n    if [ \"$input_minor\" -ge \"$compare_minor\" ]; then return $true; fi\n    return $false\n}\n\nif [ -z \"$OPTIONS\" ]\nthen\n  OPTIONS=\"-std=c++11 -g -funwind-tables $OPTIMIZE\"\n  # Note that some tests use assert() to check condition but -O2 defines assert() to nothing,\n  # unless we specify -UNDEBUG to bring assert() back.\n  # But currently adding -UNDEBUG crashes both clang3.4 and clang3.3 for test\n  # like libcxx/test/atomics/atomics.types.generic/address.pass.cpp.  Define -UNDEBUG\n  # only when we are not using clang.  ToDo\n  if [ \"$CXX\" = \"${CXX%%*clang++*}\" ] ; then\n    OPTIONS=\"$OPTIONS -UNDEBUG\"\n  fi\n  if [ -n \"$LLVM_VERSION\" ]; then\n    if version_ge \"$LLVM_VERSION\" \"3.4\"; then\n      OPTIONS=\"${OPTIONS} -mllvm -arm-enable-ehabi-descriptors -mllvm -arm-enable-ehabi\"\n    fi\n  fi\nfi\nOPTIONS=\"$OPTIONS $TOOLCHAIN_CFLAGS $TOOLCHAIN_LDFLAGS\"\nOPTIONS=\"$OPTIONS -I$LIBCXX_ROOT/test/support\"\n# llvm-libc++/libcxx/test/lit.cfg line #278 defineds the following for testing only on Linux\nOPTIONS=\"$OPTIONS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS\"\n\nif [ -z \"$ADB\" ]\nthen\n  ADB=adb\nfi\n\n# Run a shell command through ADB, return its status.\n# Variable ERR contains output if $RET is non-zero\nadb_shell () {\n  # We need a temporary file to store the output of our command\n  local CMD_OUT RET\n  ERR=\n  CMD_OUT=$(mktemp /tmp/testit_android-cmdout-XXXXXX)\n  # Run the command, while storing the standard output to CMD_OUT\n  # and appending the exit code as the last line.\n  if [ \"$VERBOSE\" -gt 2 ]; then\n    echo \"COMMAND: $ADB shell $@\"\n  fi\n  $ADB shell \"$@ ; echo \\$?\" | sed -e 's![[:cntrl:]]!!g' > $CMD_OUT 2>&1\n  # Get last line in log, which contains the exit code from the command\n  RET=$(sed -e '$!d' $CMD_OUT)\n  # Get output, which corresponds to everything except the last line\n  OUT=$(sed -e '$d' $CMD_OUT)\n  if [ \"$RET\" != \"0\" ]; then\n    ERR=$OUT\n  fi\n  if [ \"$VERBOSE\" -gt 2 ]; then\n    printf \"%s\" \"$OUT\"\n  fi\n  rm -f $CMD_OUT\n  return $RET\n}\n\n# Push a given file through ADB.\n# $1: File path\nadb_push () {\n  local FILE=$1\n  local FILE_BASENAME=$(basename \"$FILE\")\n  run2 $ADB push $FILE $TARGET_PATH/$FILE_BASENAME 2>/dev/null\n}\n\n# Run a given executable through ADB.\n# $1: Executable path\nadb_run () {\n  local EXECUTABLE=$1\n  local EXECUTABLE_BASENAME=$(basename \"$EXECUTABLE\")\n  run2 $ADB push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null\n  if [ \"$?\" != 0 ]; then\n    return 1;\n  fi\n  # Retry up to 10 times if fail is due to \"Text file busy\"\n  for i in 1 2 3 4 5 6 7 8 9 10; do\n    adb_shell \"cd $TARGET_PATH; LD_LIBRARY_PATH=$TARGET_PATH LIBUNWIND_PRINT_UNWINDING=1 ./$EXECUTABLE_BASENAME\"\n    if [ \"$?\" = \"0\" ]; then\n      return 0\n    fi\n    if ! $(echo $ERR | grep -iq \"Text file busy\"); then\n      if [ \"$i\" != \"1\" ]; then\n        # Dump error message to help diagnostics\n        echo \"ERR=$ERR\"\n      fi\n      break;\n    fi\n    echo \"Text file busy.  Re-try $i\"\n    sleep 1\n    run2 $ADB push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null\n    sleep 2  # try again\n  done\n  return 1\n}\n\nadb_shell \"rm -rf $TARGET_PATH\"\nadb_shell \"mkdir -p $TARGET_PATH\"\n\nif [ \"$DO_STATIC\" ]; then\n  # Statically link to ensure the executable can be run easily through ADB\n  if [ \"$WITH_COMPILER_RT\" = \"yes\" ]; then\n    LIBS=\"-nodefaultlibs -lc++_static -latomic -ldl $LIBM -lc -lcompiler_rt_static\"\n  else\n    LIBS=\"-nodefaultlibs -latomic -ldl $LIBM -lc\"\n  fi\nelse\n  run2 $ADB push $LIBCXX_LIBS/libc++_shared.so $TARGET_PATH 2>/dev/null\n  if [ $? != 0 ]; then\n    echo \"ERROR: Can't push shared libc++ to target device!\"\n    exit 1\n  fi\n  if [ \"$WITH_COMPILER_RT\" = \"yes\" ]; then\n    run2 $ADB push $LIBCOMPILER_RT_LIBS/libcompiler_rt_shared.so $TARGET_PATH 2>/dev/null\n    if [ $? != 0 ]; then\n      echo \"ERROR: Can't push shared libcompiler_rt to target device!\"\n      exit 1\n    fi\n    LIBS=\"-nodefaultlibs -lc++_shared -latomic -ldl $LIBM -lc -lcompiler_rt_shared\"\n  else\n    LIBS=\"-nodefaultlibs -lc++_shared -latomic -ldl $LIBM -lc\"\n  fi\nfi\n\ncase $TRIPLE in\n  *-*-mingw* | *-*-cygwin* | *-*-win*)\n    TEST_EXE=test.exe\n    ;;\n  *)\n    TEST_EXE=a.out\n    ;;\nesac\n\nTEST_EXE=/tmp/testit_android-$USER-$$-$TEST_EXE\n\nFAIL=0\nPASS=0\nUNIMPLEMENTED=0\nIMPLEMENTED_FAIL=0\nIMPLEMENTED_PASS=0\n\n# Run tests in current directory, recursively\n#\n# Note that file path containing EQ are symlink to the existing tests whose path contain '=',\n# to workaround an issue in ndk-build which doesn't handle LOCAL_SRC_FILES with '='.\n# See tests/device/test-libc++-static-full/jni/Android.mk  We need to filter out path containing\n# EQ such that we don't run same tests twice\n#\n# An alternative is to do \"find . -type f\", but this doesn't work in NDK windows package\n# where zip turns symlink into physical file it points to.\n#\n# We also sort the test to make the test report comparable to previous test\n#\n\nafunc() {\n\tfail=0\n\tpass=0\n\tif (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1)\n\tthen\n\t\tfor FILE in $(ls ${TEST_PREFIX}*fail.cpp | tr ' ' '\\n' | grep -v EQ | sort); do\n\t\t\tif run $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o $TEST_EXE > /dev/null 2>&1\n\t\t\tthen\n\t\t\t\trm $TEST_EXE\n\t\t\t\techo \"$FILE should not compile\"\n\t\t\t\tfail=$(($fail+1))\n\t\t\telse\n\t\t\t\tpass=$(($pass+1))\n\t\t\tfi\n\t\tdone\n\tfi\n\n\tif (ls ${TEST_PREFIX}*.cpp > /dev/null 2>&1)\n\tthen\n\t\tif (ls *.dat > /dev/null 2>&1)\n\t\tthen\n\t\t\tadb_shell \"rm -f $TARGET_PATH/*.dat\"\n\t\t\tfor FILE in $(ls *.dat | tr ' ' '\\n' | grep -v EQ | sort); do\n\t                      if [ \"$VERBOSE\" -gt 1 ]; then\n\t                          echo \"Pushing data: \" $FILE\n\t\t\t      fi\n\t\t\t      adb_push $FILE\n\t\t\t      if [ $? != 0 ]; then\n\t\t\t\t  echo \"Failed to push file $FILE\"\n\t                      fi\n\t\t\tdone\n\t\tfi\n\t\tfor FILE in $(ls ${TEST_PREFIX}*.cpp | tr ' ' '\\n' | grep -v EQ | sort); do\n                      if [ \"$VERBOSE\" -gt 1 ]; then\n                          echo \"Running test: \" $FILE\n                      fi\n                        COMMAND=\"( cd $(pwd) && $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS )\"\n\t\t\tif run $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o $TEST_EXE\n\t\t\tthen\n\t\t\t\tif adb_run $TEST_EXE\n\t\t\t\tthen\n\t\t\t\t\trm $TEST_EXE\n\t\t\t\t\tpass=$(($pass+1))\n\t\t\t\telse\n\t\t\t\t\techo \"`pwd`/$FILE failed at run time\"\n\t\t\t\t\techo \"Compile line was: $COMMAND # run-time\"\n\t\t\t\t\tfail=$(($fail+1))\n\t\t\t\t\trm $TEST_EXE\n\t\t\t\tfi\n\t\t\telse\n\t\t\t\techo \"`pwd`/$FILE failed to compile\"\n\t\t\t\techo \"Compile line was: $COMMAND # compile-time\"\n\t\t\t\tfail=$(($fail+1))\n\t\t\tfi\n\t\tdone\n\tfi\n\n\tif [ $fail -gt 0 ]\n\tthen\n\t\techo \"failed $fail tests in `pwd`\"\n\t\tIMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1))\n\tfi\n\tif [ $pass -gt 0 ]\n\tthen\n\t\techo \"passed $pass tests in `pwd`\"\n\t\tif [ $fail -eq 0 ]\n\t\tthen\n\t\t\tIMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1))\n\t\tfi\n\tfi\n\tif [ $fail -eq 0 -a $pass -eq 0 ]\n\tthen\n\t\techo \"not implemented:  `pwd`\"\n\t\tUNIMPLEMENTED=$(($UNIMPLEMENTED+1))\n\tfi\n\n\tFAIL=$(($FAIL+$fail))\n\tPASS=$(($PASS+$pass))\n\n\tfor FILE in $(ls | tr ' ' '\\n' | grep -v EQ | sort)\n\tdo\n\t\tif [ -d \"$FILE\" ];\n\t\tthen\n\t\t\tcd $FILE\n\t\t\tafunc\n\t\t\tcd ..\n\t\tfi\n\tdone\n}\n\nafunc\n\necho \"****************************************************\"\necho \"Results for `pwd`:\"\necho \"using `$CC --version`\"\necho \"with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB\"\necho \"----------------------------------------------------\"\necho \"sections without tests   : $UNIMPLEMENTED\"\necho \"sections with failures   : $IMPLEMENTED_FAIL\"\necho \"sections without failures: $IMPLEMENTED_PASS\"\necho \"                       +   ----\"\necho \"total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))\"\necho \"----------------------------------------------------\"\necho \"number of tests failed   : $FAIL\"\necho \"number of tests passed   : $PASS\"\necho \"                       +   ----\"\necho \"total number of tests    : $(($FAIL+$PASS))\"\necho \"****************************************************\"\n\nexit $FAIL\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_01.pass.cpp",
    "content": "//===------------------------- unwind_01.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    A() : id_(++count) {}\n    ~A() {assert(id_ == count--);}\n\nprivate:\n    A(const A&);\n    A& operator=(const A&);\n};\n\nint A::count = 0;\n\nstruct B\n{\n    static int count;\n    int id_;\n    B() : id_(++count) {}\n    ~B() {assert(id_ == count--);}\n\nprivate:\n    B(const B&);\n    B& operator=(const B&);\n};\n\nint B::count = 0;\n\nstruct C\n{\n    static int count;\n    int id_;\n    C() : id_(++count) {}\n    ~C() {assert(id_ == count--);}\n\nprivate:\n    C(const C&);\n    C& operator=(const C&);\n};\n\nint C::count = 0;\n\nvoid f2()\n{\n    C c;\n    A a;\n    throw 55;\n    B b;\n}\n\nvoid f1()\n{\n    A a;\n    B b;\n    f2();\n    C c;\n}\n\nint main()\n{\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (int* i)\n    {\n        assert(false);\n    }\n    catch (long i)\n    {\n        assert(false);\n    }\n    catch (int i)\n    {\n        assert(i == 55);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n    assert(A::count == 0);\n    assert(B::count == 0);\n    assert(C::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_02.pass.cpp",
    "content": "//===------------------------- unwind_02.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    A() : id_(++count) {}\n    ~A() {assert(id_ == count--);}\n\nprivate:\n    A(const A&);\n    A& operator=(const A&);\n};\n\nint A::count = 0;\n\nstruct B\n{\n    static int count;\n    int id_;\n    B() : id_(++count) {}\n    ~B() {assert(id_ == count--);}\n\nprivate:\n    B(const B&);\n    B& operator=(const B&);\n};\n\nint B::count = 0;\n\nstruct C\n{\n    static int count;\n    int id_;\n    C() : id_(++count) {}\n    ~C() {assert(id_ == count--);}\n\nprivate:\n    C(const C&);\n    C& operator=(const C&);\n};\n\nint C::count = 0;\n\nvoid f2()\n{\n    C c;\n    A a;\n    throw 55;\n    B b;\n}\n\nvoid f1() throw (long, char, int, double)\n{\n    A a;\n    B b;\n    f2();\n    C c;\n}\n\nint main()\n{\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (int* i)\n    {\n        assert(false);\n    }\n    catch (long i)\n    {\n        assert(false);\n    }\n    catch (int i)\n    {\n        assert(i == 55);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n    assert(A::count == 0);\n    assert(B::count == 0);\n    assert(C::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_03.pass.cpp",
    "content": "//===------------------------- unwind_03.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    A() : id_(++count) {}\n    ~A() {assert(id_ == count--);}\n\nprivate:\n    A(const A&);\n    A& operator=(const A&);\n};\n\nint A::count = 0;\n\nstruct B\n{\n    static int count;\n    int id_;\n    B() : id_(++count) {}\n    ~B() {assert(id_ == count--);}\n\nprivate:\n    B(const B&);\n    B& operator=(const B&);\n};\n\nint B::count = 0;\n\nstruct C\n{\n    static int count;\n    int id_;\n    C() : id_(++count) {}\n    ~C() {assert(id_ == count--);}\n\nprivate:\n    C(const C&);\n    C& operator=(const C&);\n};\n\nint C::count = 0;\n\nvoid f2()\n{\n    C c;\n    A a;\n    throw 55;\n    B b;\n}\n\nvoid f1() throw (long, char, double)\n{\n    A a;\n    B b;\n    f2();\n    C c;\n}\n\nvoid u_handler()\n{\n    exit(0);\n}\n\nint main()\n{\n    std::set_unexpected(u_handler);\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (int* i)\n    {\n        assert(false);\n    }\n    catch (long i)\n    {\n        assert(false);\n    }\n    catch (int i)\n    {\n        assert(i == 55);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n    assert(false);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_04.pass.cpp",
    "content": "//===------------------------- unwind_04.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    A() : id_(++count) {}\n    ~A() {assert(id_ == count--);}\n\nprivate:\n    A(const A&);\n    A& operator=(const A&);\n};\n\nint A::count = 0;\n\nstruct B\n{\n    static int count;\n    int id_;\n    B() : id_(++count) {}\n    ~B() {assert(id_ == count--);}\n\nprivate:\n    B(const B&);\n    B& operator=(const B&);\n};\n\nint B::count = 0;\n\nstruct C\n{\n    static int count;\n    int id_;\n    C() : id_(++count) {}\n    ~C() {assert(id_ == count--);}\n\nprivate:\n    C(const C&);\n    C& operator=(const C&);\n};\n\nint C::count = 0;\n\nvoid f2()\n{\n    C c;\n    A a;\n    throw 55;\n    B b;\n}\n\nvoid f1() throw (long, char, double)\n{\n    A a;\n    B b;\n    f2();\n    C c;\n}\n\nvoid u_handler()\n{\n    throw 'a';\n}\n\nint main()\n{\n    std::set_unexpected(u_handler);\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (int* i)\n    {\n        assert(false);\n    }\n    catch (long i)\n    {\n        assert(false);\n    }\n    catch (int i)\n    {\n        assert(false);\n    }\n    catch (char c)\n    {\n        assert(c == 'a');\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n    assert(A::count == 0);\n    assert(B::count == 0);\n    assert(C::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_05.pass.cpp",
    "content": "//===------------------------- unwind_05.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n\nstruct A\n{\n    static int count;\n    int id_;\n    A() : id_(++count) {}\n    ~A() {assert(id_ == count--);}\n\nprivate:\n    A(const A&);\n    A& operator=(const A&);\n};\n\nint A::count = 0;\n\nstruct B\n{\n    static int count;\n    int id_;\n    B() : id_(++count) {}\n    ~B() {assert(id_ == count--);}\n\nprivate:\n    B(const B&);\n    B& operator=(const B&);\n};\n\nint B::count = 0;\n\nstruct C\n{\n    static int count;\n    int id_;\n    C() : id_(++count) {}\n    ~C() {assert(id_ == count--);}\n\nprivate:\n    C(const C&);\n    C& operator=(const C&);\n};\n\nint C::count = 0;\n\nvoid f2()\n{\n    C c;\n    A a;\n    throw 55;\n    B b;\n}\n\nvoid f1() throw (long, char, double, std::bad_exception)\n{\n    A a;\n    B b;\n    f2();\n    C c;\n}\n\nvoid u_handler()\n{\n    throw;\n}\n\nint main()\n{\n    std::set_unexpected(u_handler);\n    try\n    {\n        f1();\n        assert(false);\n    }\n    catch (int* i)\n    {\n        assert(false);\n    }\n    catch (long i)\n    {\n        assert(false);\n    }\n    catch (int i)\n    {\n        assert(false);\n    }\n    catch (char c)\n    {\n        assert(false);\n    }\n    catch (const std::bad_exception& e)\n    {\n        assert(true);\n    }\n    catch (...)\n    {\n        assert(false);\n    }\n    assert(A::count == 0);\n    assert(B::count == 0);\n    assert(C::count == 0);\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/libcxxabi/test/unwind_06.pass.cpp",
    "content": "//===------------------------- unwind_06.cpp ------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <exception>\n#include <stdlib.h>\n#include <assert.h>\n#include <stdio.h>\n\n// Compile with -Os to get compiler uses float registers to hold float variables\n\ndouble get_(int x) { return (double)x; }\n\ndouble (* volatile get)(int) = get_;\n\nvolatile int counter;\n\ndouble try1(bool v) {\n  double a = get(0);\n  double b = get(1);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b;\n  if (v) throw 10;\n  return get(0)+a+b;\n}\n\ndouble try2(bool v) {\n  double a = get(0);\n  double b = get(1);\n  double c = get(2);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b + c;\n  if (v) throw 10;\n  return get(0)+a+b+c;\n}\n\ndouble try3(bool v) {\n  double a = get(0);\n  double b = get(1);\n  double c = get(2);\n  double d = get(3);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b + c + d;\n  if (v) throw 10;\n  return get(0)+a+b+c+d;\n}\n\ndouble try4(bool v) {\n  double a = get(0);\n  double b = get(0);\n  double c = get(0);\n  double d = get(0);\n  double e = get(0);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b+c+d+e;\n  if (v) throw 10;\n  return get(0)+a+b+c+d+e;\n}\n\ndouble try5(bool v) {\n  double a = get(0);\n  double b = get(0);\n  double c = get(0);\n  double d = get(0);\n  double e = get(0);\n  double f = get(0);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b+c+d+e+f;\n  if (v) throw 10;\n  return get(0)+a+b+c+d+e+f;\n}\n\ndouble try6(bool v) {\n  double a = get(0);\n  double b = get(0);\n  double c = get(0);\n  double d = get(0);\n  double e = get(0);\n  double f = get(0);\n  double g = get(0);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b+c+d+e+f+g;\n  if (v) throw 10;\n  return get(0)+a+b+c+d+e+f+g;\n}\n\ndouble try7(bool v) {\n  double a = get(0);\n  double b = get(0);\n  double c = get(0);\n  double d = get(0);\n  double e = get(0);\n  double f = get(0);\n  double g = get(0);\n  double h = get(0);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b+c+d+e+f+g;\n  if (v) throw 10;\n  return get(0)+a+b+c+d+e+f+g;\n}\n\ndouble try8(bool v) {\n  double a = get(0);\n  double b = get(0);\n  double c = get(0);\n  double d = get(0);\n  double e = get(0);\n  double f = get(0);\n  double g = get(0);\n  double h = get(0);\n  double i = get(0);\n  for (counter = 100; counter; --counter)\n    a += get(1) + b+c+d+e+f+g+i;\n  if (v) throw 10;\n  return get(0)+a+b+c+d+e+f+g+i;\n}\n\n\n\n\n\ndouble foo()\n{\n  double a = get(1);\n  double b = get(2);\n  double c = get(3);\n  double d = get(4);\n  double e = get(5);\n  double f = get(6);\n  double g = get(7);\n  double h = get(8);\n  try {\n    try1(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try2(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try3(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try4(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try5(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try6(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try7(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n  \n  try {\n    try8(true);    \n  }\n  catch (int e) {\n  }\n  assert(a == get(1));\n  assert(b == get(2));\n  assert(c == get(3));\n  assert(d == get(4));\n  assert(e == get(5));\n  assert(f == get(6));\n  assert(g == get(7));\n  assert(h == get(8));\n\n  return a+b+c+d+e+f+g+h;\n}\n\n\n\nint main()\n{\n  foo();\n}\n"
  },
  {
    "path": "sources/cxx-stl/llvm-libc++abi/sources.mk",
    "content": "libcxxabi_path := $(call my-dir)\n\nlibcxxabi_src_files := \\\n        libcxxabi/src/abort_message.cpp \\\n        libcxxabi/src/cxa_aux_runtime.cpp \\\n        libcxxabi/src/cxa_default_handlers.cpp \\\n        libcxxabi/src/cxa_demangle.cpp \\\n        libcxxabi/src/cxa_exception.cpp \\\n        libcxxabi/src/cxa_exception_storage.cpp \\\n        libcxxabi/src/cxa_guard.cpp \\\n        libcxxabi/src/cxa_handlers.cpp \\\n        libcxxabi/src/cxa_new_delete.cpp \\\n        libcxxabi/src/cxa_personality.cpp \\\n        libcxxabi/src/cxa_thread_atexit.cpp \\\n        libcxxabi/src/cxa_unexpected.cpp \\\n        libcxxabi/src/cxa_vector.cpp \\\n        libcxxabi/src/cxa_virtual.cpp \\\n        libcxxabi/src/exception.cpp \\\n        libcxxabi/src/private_typeinfo.cpp \\\n        libcxxabi/src/stdexcept.cpp \\\n        libcxxabi/src/typeinfo.cpp\n\nlibcxxabi_unwind_src_files := \\\n        libcxxabi/src/Unwind/libunwind.cpp \\\n        libcxxabi/src/Unwind/Unwind-EHABI.cpp \\\n        libcxxabi/src/Unwind/Unwind-sjlj.c \\\n        libcxxabi/src/Unwind/UnwindLevel1.c \\\n        libcxxabi/src/Unwind/UnwindLevel1-gcc-ext.c \\\n        libcxxabi/src/Unwind/UnwindRegistersRestore.S \\\n        libcxxabi/src/Unwind/UnwindRegistersSave.S\n\n\nlibcxxabi_c_includes := $(libcxxabi_path)/libcxxabi/include\n"
  },
  {
    "path": "sources/cxx-stl/system/Android.mk",
    "content": "LOCAL_PATH:= $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := libstdc++\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include\nLOCAL_EXPORT_LDLIBS := -lstdc++\n\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/cxx-stl/system/MODULE_LICENSE_BSD",
    "content": ""
  },
  {
    "path": "sources/cxx-stl/system/NOTICE",
    "content": "Copyright (C) 2009 The Android Open Source Project\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n *\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\nOF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\nAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\n\n\nCopyright (C) 2008 The Android Open Source Project\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in\n   the documentation and/or other materials provided with the\n   distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\nOF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\nAND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n\n\n\nCopyright (c) 1994\nHewlett-Packard Company\n\nPermission to use, copy, modify, distribute and sell this software\nand its documentation for any purpose is hereby granted without fee,\nprovided that the above copyright notice appear in all copies and\nthat both that copyright notice and this permission notice appear\nin supporting documentation.  Hewlett-Packard Company makes no\nrepresentations about the suitability of this software for any\npurpose.  It is provided \"as is\" without express or implied warranty.\n\n\n\nCopyright (c) 1996,1997\nSilicon Graphics Computer Systems, Inc.\n\nPermission to use, copy, modify, distribute and sell this software\nand its documentation for any purpose is hereby granted without fee,\nprovided that the above copyright notice appear in all copies and\nthat both that copyright notice and this permission notice appear\nin supporting documentation.  Silicon Graphics makes no\nrepresentations about the suitability of this software for any\npurpose.  It is provided \"as is\" without express or implied warranty.\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cassert",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Standard C++ Library wrapper around the C assert.h header file.  This file\n * can be included multiple times with different definition of NDEBUG, hence the\n * absence of include guards.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CASSERT__\n#define BIONIC_LIBSTDCPP_INCLUDE_CASSERT__\n#endif\n#include <assert.h>\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cctype",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CCTYPE__\n#define BIONIC_LIBSTDCPP_INCLUDE_CCTYPE__\n\n/*\n * Standard C++ Library wrapper around the C ctype.h header file.\n */\n\n#include <ctype.h>\n\nextern \"C++\" {\n\nnamespace std \n{\nusing ::isalnum;\nusing ::isalpha;\nusing ::iscntrl;\nusing ::isdigit;\nusing ::isgraph;\nusing ::islower;\nusing ::isprint;\nusing ::ispunct;\nusing ::isspace;\nusing ::isupper;\nusing ::isxdigit;\nusing ::tolower;\nusing ::toupper;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CCTYPE__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cerrno",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CERRNO__\n#define BIONIC_LIBSTDCPP_INCLUDE_CERRNO__\n\n/*\n * Standard C++ Library wrapper around the C errno.h header file.\n */\n#include <errno.h>\n\n// errno is a macro, so we can't define std::errno\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CERRNO__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cfloat",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CFLOAT__\n#define BIONIC_LIBSTDCPP_INCLUDE_CFLOAT__\n\n/*\n * Standard C++ Library wrapper around the C float.h header file.\n */\n#include <sys/limits.h>\n#include <float.h>\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CFLOAT__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/climits",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CLIMITS__\n#define BIONIC_LIBSTDCPP_INCLUDE_CLIMITS__\n\n/*\n * Standard C++ Library wrapper around the C limits.h header file.\n */\n\n#include <limits.h>\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CLIMITS__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cmath",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CMATH__\n#define BIONIC_LIBSTDCPP_INCLUDE_CMATH__\n\n/*\n * Standard C++ Library wrapper around the C time.h header file.\n */\n\n#include <cstddef>\n#include <math.h>\n\nextern \"C++\" {\n\nnamespace std\n{\n// Functions.\nusing ::cos;\nusing ::sin;\nusing ::tan;\nusing ::acos;\nusing ::asin;\nusing ::atan;\nusing ::atan2;\n\nusing ::cosh;\nusing ::sinh;\nusing ::tanh;\n\nusing ::exp;\nusing ::frexp;\nusing ::ldexp;\nusing ::log;\nusing ::log10;\nusing ::modf;\n\nusing ::pow;\nusing ::sqrt;\n\nusing ::ceil;\nusing ::fabs;\nusing ::floor;\nusing ::fmod;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CMATH__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/csetjmp",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSETJMP__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSETJMP__\n\n/*\n * Standard C++ Library wrapper around the C setjmp.h header file.\n */\n\n#include <setjmp.h>\n\nextern \"C++\" {\n\n#ifndef setjmp\n#define setjmp(env) setjmp (env)\n#endif\n\nnamespace std\n{\nusing ::jmp_buf;\nusing ::longjmp;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSETJMP__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/csignal",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSIGNAL__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSIGNAL__\n\n/*\n * Standard C++ Library wrapper around the C signal.h header file.\n */\n\n#include <signal.h>\n\nextern \"C++\" {\n\nnamespace std\n{\nusing ::sig_atomic_t;\nusing ::signal;\nusing ::raise;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSIGNAL__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cstddef",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSTDDEF__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSTDDEF__\n\n/*\n * Standard C++ Library wrapper around the C stddef.h header file.\n * The following 2 types are also declared in the 'std' namespace:\n *   . ptrdiff_t\n *   . size_t\n */\n#include <stddef.h>\n\nextern \"C++\" {\n\nnamespace std {\nusing ::ptrdiff_t;\nusing ::size_t;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSTDDEF__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cstdint",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSTDINT__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSTDINT__\n\n/*\n * Standard C++ Library wrapper around the C stdint.h header file.\n */\n\n#include <stdint.h>\n\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSTDINT__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cstdio",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSTDIO__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSTDIO__\n\n/*\n * Standard C++ Library wrapper around the C stdio.h header file.\n */\n#include <cstddef>\n#include <stdio.h>\n\nextern \"C++\" {\n\nnamespace std {\nusing ::FILE;\nusing ::fpos_t;\n\nusing ::clearerr;\nusing ::fclose;\nusing ::feof;\nusing ::ferror;\nusing ::fflush;\nusing ::fgetc;\nusing ::fgetpos;\nusing ::fgets;\nusing ::fopen;\nusing ::fprintf;\nusing ::fputc;\nusing ::fputs;\nusing ::fread;\nusing ::freopen;\nusing ::fscanf;\nusing ::fseek;\nusing ::fsetpos;\nusing ::ftell;\nusing ::fwrite;\nusing ::getc;\nusing ::getchar;\nusing ::gets;\nusing ::perror;\nusing ::printf;\nusing ::putc;\nusing ::putchar;\nusing ::puts;\nusing ::remove;\nusing ::rename;\nusing ::rewind;\nusing ::scanf;\nusing ::setbuf;\nusing ::setvbuf;\nusing ::sprintf;\nusing ::sscanf;\nusing ::tmpfile;\nusing ::tmpnam;\nusing ::ungetc;\nusing ::vfprintf;\nusing ::vprintf;\nusing ::vsprintf;\n\nusing ::snprintf;\nusing ::vfscanf;\nusing ::vscanf;\nusing ::vsnprintf;\nusing ::vsscanf;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSTDIO__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cstdlib",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSTDLIB__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSTDLIB__\n\n/*\n * Standard C++ Library wrapper around the C stdlib.h header file.\n */\n#include <stdlib.h>\n\nextern \"C++\" {\n\nnamespace std {\n\nusing ::exit;\nusing ::abort;\nusing ::atexit;\n#if 0 /* MISSING FROM BIONIC */\nusing ::on_exit;\n#endif\n\nusing ::getenv;\nusing ::putenv;\nusing ::setenv;\nusing ::unsetenv;\n\nusing ::mktemp;\nusing ::mkstemp;\n\nusing ::strtol;\nusing ::strtoll;\nusing ::strtoul;\nusing ::strtoull;\nusing ::strtod;\nusing ::strtof;\n\nusing ::atoi;\nusing ::atol;\nusing ::atoll;\nusing ::atof;\n\nusing ::abs;\nusing ::labs;\nusing ::llabs;\n\nusing ::realpath;\nusing ::system;\n\nusing ::bsearch;\nusing ::qsort;\n\nusing ::jrand48;\nusing ::mrand48;\nusing ::nrand48;\nusing ::lrand48;\nusing ::seed48;\nusing ::srand48;\n\nusing ::rand;\nusing ::srand;\nusing ::random;\nusing ::srandom;\n\nusing ::malloc;\nusing ::free;\nusing ::calloc;\nusing ::realloc;\n\nusing ::unlockpt;\nusing ::ptsname;\nusing ::ptsname_r;\nusing ::getpt;\nusing ::grantpt;\n\nusing ::div_t;\nusing ::div;\nusing ::ldiv_t;\nusing ::ldiv;\nusing ::lldiv_t;\nusing ::lldiv;\n\nusing ::mblen;\nusing ::mbstowcs;\nusing ::mbtowc;\nusing ::wctomb;\nusing ::wcstombs;\n\n#if __ANDROID_API__ >= 9\nusing ::clearenv;\n#endif\n\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSTDLIB__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cstring",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CSTRING__\n#define BIONIC_LIBSTDCPP_INCLUDE_CSTRING__\n\n/*\n * Standard C++ Library wrapper around the C string.h header file.\n */\n\n#include <cstddef>\n#include <string.h>\n\nextern \"C++\" {\n\nnamespace std\n{\nusing ::memchr;\nusing ::memcmp;\nusing ::memcpy;\nusing ::memmove;\nusing ::memset;\nusing ::strcat;\nusing ::strchr;\nusing ::strcmp;\nusing ::strcoll;\nusing ::strcpy;\nusing ::strcspn;\nusing ::strerror;\nusing ::strlen;\nusing ::strncat;\nusing ::strncmp;\nusing ::strncpy;\nusing ::strpbrk;\nusing ::strrchr;\nusing ::strspn;\nusing ::strstr;\nusing ::strtok;\nusing ::strxfrm;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CSTRING__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/ctime",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#ifndef BIONIC_LIBSTDCPP_INCLUDE_CTIME__\n#define BIONIC_LIBSTDCPP_INCLUDE_CTIME__\n\n/*\n * Standard C++ Library wrapper around the C time.h header file.\n */\n\n#include <cstddef>\n#include <time.h>\n\nextern \"C++\" {\n\nnamespace std \n{\n// Types.\nusing ::clock_t;\nusing ::time_t;\nusing ::tm;\n\n// Functions.\nusing ::clock;\nusing ::difftime;\nusing ::mktime;\nusing ::time;\nusing ::asctime;\nusing ::ctime;\nusing ::gmtime;\nusing ::localtime;\nusing ::strftime;\n}  // namespace std\n\n}  // extern C++\n\n#endif  // BIONIC_LIBSTDCPP_INCLUDE_CTIME__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cwchar",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/* IMPORTANT: cwchar and cwctype are not supported. See comment in\n * bionic/libc/include/wchar.h */\n"
  },
  {
    "path": "sources/cxx-stl/system/include/cwctype_is_not_supported",
    "content": "/* -*- c++ -*- */\n/*\n * Copyright (C) 2009 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/* IMPORTANT: cwchar and cwctype are not supported. See comment in\n * bionic/libc/include/wchar.h */\n"
  },
  {
    "path": "sources/cxx-stl/system/include/new",
    "content": "/* -*- c++ -*- */\n#ifndef __NEW__\n#define __NEW__\n\n#include <cstddef>\n\nextern \"C++\" {\n\nnamespace std {\n    struct nothrow_t {};\n    extern const nothrow_t nothrow;\n}\n\nvoid* operator new(std::size_t);\nvoid* operator new[](std::size_t);\nvoid  operator delete(void*);\nvoid  operator delete[](void*);\nvoid* operator new(std::size_t, const std::nothrow_t&);\nvoid* operator new[](std::size_t, const std::nothrow_t&);\nvoid  operator delete(void*, const std::nothrow_t&);\nvoid  operator delete[](void*, const std::nothrow_t&);\n\ninline void* operator new(std::size_t, void* p) { return p; }\ninline void* operator new[](std::size_t, void* p) { return p; }\n\n// these next two are not really required, since exceptions are off\ninline void  operator delete(void*, void*) { }\ninline void  operator delete[](void*, void*) { }\n\n}  // extern C++\n\n#endif // __NEW__\n"
  },
  {
    "path": "sources/cxx-stl/system/include/stl_pair.h",
    "content": "/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n/*\n *\n * Copyright (c) 1994\n * Hewlett-Packard Company\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.  Hewlett-Packard Company 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 * Copyright (c) 1996,1997\n * Silicon Graphics Computer Systems, Inc.\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.  Silicon Graphics 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/* NOTE: This is an internal header file, included by other STL headers.\n *   You should not attempt to use it directly.\n */\n\n#ifndef __SGI_STL_INTERNAL_PAIR_H\n#define __SGI_STL_INTERNAL_PAIR_H\n\n#ifndef __STL_BEGIN_NAMESPACE\n#define __STL_BEGIN_NAMESPACE namespace std {\n#endif\n\n#ifndef __STL_END_NAMESPACE\n#define __STL_END_NAMESPACE   }\n#endif\n\n__STL_BEGIN_NAMESPACE\n\ntemplate <class _T1, class _T2>\nstruct pair {\n  typedef _T1 first_type;\n  typedef _T2 second_type;\n\n  _T1 first;\n  _T2 second;\n  pair() : first(), second() {}\n  pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}\n\n  template <class _U1, class _U2>\n  pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}\n};\n\ntemplate <class _T1, class _T2>\ninline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)\n{\n  return __x.first == __y.first && __x.second == __y.second;\n}\n\ntemplate <class _T1, class _T2>\ninline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)\n{\n  return __x.first < __y.first ||\n         (!(__y.first < __x.first) && __x.second < __y.second);\n}\n\ntemplate <class _T1, class _T2>\ninline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {\n  return !(__x == __y);\n}\n\ntemplate <class _T1, class _T2>\ninline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {\n  return __y < __x;\n}\n\ntemplate <class _T1, class _T2>\ninline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {\n  return !(__y < __x);\n}\n\ntemplate <class _T1, class _T2>\ninline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {\n  return !(__x < __y);\n}\n\ntemplate <class _T1, class _T2>\ninline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y)\n{\n  return pair<_T1, _T2>(__x, __y);\n}\n\n__STL_END_NAMESPACE\n\n#endif /* __SGI_STL_INTERNAL_PAIR_H */\n\n// Local Variables:\n// mode:C++\n// End:\n"
  },
  {
    "path": "sources/cxx-stl/system/include/typeinfo",
    "content": "#ifndef _TYPEINFO_HEADER_GAURD\n#define _TYPEINFO_HEADER_GAURD\n\nextern \"C++\" {\n\nnamespace std {\n    class type_info;\n    class bad_cast;\n    class bad_typeid;\n};\n\n\nclass type_info {\npublic:\n    type_info();\n    virtual ~type_info();\n\n    char const * name() const;\n\n    bool operator==(type_info const & right) const;\n    bool operator!=(type_info const & right) const;\n    bool before(type_info const & right) const;\n\nprivate:\n    type_info(type_info const & right);\n    type_info & operator=(type_info const & right);\n};\n\n}  // C++\n\n#endif\n"
  },
  {
    "path": "sources/cxx-stl/system/include/utility",
    "content": "/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n#ifndef _CPP_UTILITY\n#define _CPP_UTILITY\n\n#pragma GCC system_header\n\n#define  __STL_BEGIN_NAMESPACE  namespace std {\n#define  __STL_END_NAMESPACE    }\n\n#include <stl_pair.h>\n\n#endif /* _CPP_UTILITY */\n"
  },
  {
    "path": "sources/cxx-stl/system/setup.mk",
    "content": "NDK_APP_CXX_STATIC_LIBRARIES := libstdc++\nNDK_APP_CXX_SHARED_LIBRARIES :=\n\ninclude $(call my-dir)/Android.mk\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/COPYING",
    "content": "\n\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n\t\t       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n \n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n  \n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/ChangeLog",
    "content": "gppfs (0.2)\n\n  * Add support for std::tr1::unordered_{multi,}{map,set}, std::auto_ptr,\n    std::tr1::shared_ptr and std::tr1::weak_ptr.\n  * Fix display of empty strings with STLport 5.0.x if\n    _STLP_FORCE_STRING_TERMINATION is not enabled.\n\n -- Joachim Reichel <joachim.reichel@gmx.de>  Mon, 04 Oct 2010 20:10:14 +0200\n\ngppfs (0.1)\n\n  * Initial release.\n\n -- Joachim Reichel <joachim.reichel@gmx.de>  Thu, 30 Sep 2010 18:40:42 +0200\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/README",
    "content": "GDB pretty printers for STLport\n===============================\n\nThis python module provides GDB pretty printers for the containers from\nSTLport. It is based on a similar python module for libstdc++ [1]. It has\nbeen tested with GDB 7.0.1/7.2 and STLport 4.6.2/5.0.3/5.1.7/5.2.1.\n\n[1] svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python\n\n\nInstallation\n------------\n\nTo install the python module copy the \"stlport\" subdirectory to some place.\nTo enable the pretty printer add the following code to $HOME/.gdbinit:\n\n    python\n    import sys\n\n    sys.path.insert (0, '/path/to/dir/containing/the/stlport/dir')\n    import stlport.printers\n    stlport.printers.register_stlport_printers (None)\n\n    # see the python module for a description of these options\n    # stlport.printers.stlport_version           = 5.2\n    # stlport.printers.print_vector_with_indices = False\n    \n    end\n\n\nTesting\n-------\n\nTo test the pretty printers, go to the test directory and set up the STLport\ndirectory in the Makefile. Calling make should then compile two executables\n(with and without -D_STLP_DEBUG) and invoke GDB with the supplied script. If\nthe pretty printers work the variables from test.cpp should be displayed in a\nconvenient way.\n\nNote that GDB prefers python modules from $HOME/.gdbinit over those from\n.gdbinit in the current working directory. If you adapted $HOME/.gdbinit as\ndescribed above the location there will be used. Otherwise, test/.gdbinit will\nload stlport/printers.py.\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/stlport/__init__.py",
    "content": "\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/stlport/printers.py",
    "content": "# GDB pretty printers for STLport.\n#\n# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.\n# Copyright (C) 2010 Joachim Reichel\n#\n# This program 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 3 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\n\n# pylint: disable=C0103,C0111,R0201,R0903\n\n\nimport gdb\nimport re\n\n\n# Set the STLport version which is needed for a few features.\n#\n# - for std::list:\n#   STLport older than 5.0?\n# - for std::deque, std::stack, and std::queue on 64bit systems:\n#   STLport older than 5.2?\nstlport_version = 5.2\n\n# Indicates whether std::vector is printed with indices.\nprint_vector_with_indices = False\n\n\ndef lookup_stlport_type (typename):\n    \"Look up a type in the public STLport namespace.\"\n\n    namespaces = ['std::', 'stlpd_std::', 'stlp_std::', '_STL::']\n    for namespace in namespaces:\n        try:\n            return gdb.lookup_type (namespace + typename)\n        except RuntimeError:\n            pass\n\ndef lookup_stlport_priv_type (typename):\n    \"Look up a type in the private STLport namespace.\"\n\n    namespaces = ['std::priv::', 'stlpd_std::priv::', 'stlp_priv::', 'stlp_std::priv::',\n                  'stlpd_std::', 'stlp_std::', '_STL::']\n    for namespace in namespaces:\n        try:\n            return gdb.lookup_type (namespace + typename)\n        except RuntimeError:\n            pass\n\n\ndef get_non_debug_impl (value, member = None):\n    \"Return the non-debug implementation of value or value[member].\"\n    if member:\n        value = value[member]\n    try:\n        return value['_M_non_dbg_impl']\n    except RuntimeError:\n        return value\n\n\nclass RbtreeIterator:\n\n    def __init__ (self, rbtree):\n        tree = get_non_debug_impl (rbtree , '_M_t')\n        self.size = tree['_M_node_count']\n        self.node = tree['_M_header']['_M_data']['_M_left']\n        self.count = 0\n\n    def __iter__ (self):\n        return self\n\n    def __len__ (self):\n        return int (self.size)\n\n    def next (self):\n        if self.count == self.size:\n            raise StopIteration\n        result = self.node\n        self.count += 1\n        if self.count < self.size:\n            node = self.node\n            # Is there a right child?\n            if node.dereference()['_M_right']:\n                # Walk down to left-most child in right subtree.\n                node = node.dereference()['_M_right']\n                while node.dereference()['_M_left']:\n                    node = node.dereference()['_M_left']\n            else:\n                # Walk up to first parent reached via left subtree.\n                parent = node.dereference()['_M_parent']\n                while node == parent.dereference()['_M_right']:\n                    node = parent\n                    parent = parent.dereference()['_M_parent']\n                node = parent\n            self.node = node\n        return result\n\n\nclass BitsetPrinter:\n    \"Pretty printer for std::bitset.\"\n\n    def __init__(self, typename, val):\n        self.typename = typename\n        self.val      = val\n\n    def to_string (self):\n        # If template_argument handled values, we could print the\n        # size.  Or we could use a regexp on the type.\n        return '%s' % (self.typename)\n\n    def children (self):\n        words = self.val['_M_w']\n\n        # The _M_w member can be either an unsigned long, or an\n        # array.  This depends on the template specialization used.\n        # If it is a single long, convert to a single element list.\n        if words.type.code == gdb.TYPE_CODE_ARRAY:\n            word_size = words.type.target ().sizeof\n            n_words   = words.type.sizeof / word_size\n        else:\n            word_size = words.type.sizeof \n            n_words   = 1\n            words     = [words]\n\n        result = []\n        word = 0\n        while word < n_words:\n            w = words[word]\n            bit = 0\n            while w != 0:\n                if w & 1:\n                    result.append (('[%d]' % (word * word_size * 8 + bit), 1))\n                bit += 1\n                w = w >> 1\n            word += 1\n        return result\n\n\nclass DequePrinter:\n    \"Pretty printer for std::deque.\"\n\n    class Iterator:\n        def __init__ (self, start_node, start_cur, start_last,\n                      finish_cur, buffer_size):\n            self.node        = start_node\n            self.item        = start_cur\n            self.node_last   = start_last\n            self.last        = finish_cur\n            self.buffer_size = buffer_size\n            self.count       = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.item == self.last:\n                raise StopIteration\n            result = ('[%d]' % self.count, self.item.dereference())\n            self.count += 1\n            self.item  += 1\n            if self.item == self.node_last:\n                self.node += 1\n                self.item = self.node[0]\n                self.node_last = self.item + self.buffer_size\n            return result\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n        size = val.type.template_argument(0).sizeof\n        # see MAX_BYTES in stlport/stl/_alloc.h\n        if stlport_version < 5.2:\n            blocksize = 128\n        else:\n            blocksize = 32 * gdb.lookup_type (\"void\").pointer().sizeof\n        if size < blocksize:\n            self.buffer_size = int (blocksize / size)\n        else:\n            self.buffer_size = 1\n\n    def to_string (self):\n        start   = self.val['_M_start']\n        finish  = self.val['_M_finish']\n        delta_n = finish['_M_node'] - start['_M_node'] - 1\n        delta_s = start['_M_last'] - start['_M_cur']\n        delta_f = finish['_M_cur'] - finish['_M_first']\n        if delta_n == -1:\n            size = delta_f\n        else:\n            size = self.buffer_size * delta_n + delta_s + delta_f\n        ta0 = self.val.type.template_argument (0)\n        return '%s<%s> with %d elements' % (self.typename, ta0, int (size))\n\n    def children (self):\n        start  = self.val['_M_start']\n        finish = self.val['_M_finish']\n        return self.Iterator (start['_M_node'], start['_M_cur'],\n            start['_M_last'], finish['_M_cur'], self.buffer_size)\n\n    def display_hint (self):\n        return 'array'\n\n\nclass ListPrinter:\n    \"Pretty printer for std::list.\"\n\n    class Iterator:\n        def __init__ (self, node_type, head):\n            self.node_type = node_type\n            # see empty() in stlport/stl/_list.h\n            if stlport_version < 5.0:\n                self.sentinel = head\n            else:\n                self.sentinel = head.address\n            self.item  = head['_M_next']\n            self.count = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.item == self.sentinel:\n                raise StopIteration\n            node = self.item.cast (self.node_type).dereference()\n            self.item = node['_M_next']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, node['_M_data'])\n\n    def __init__(self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n\n    def children (self):\n        ta0       = self.val.type.template_argument(0)\n        node_type = lookup_stlport_priv_type ('_List_node<%s>' % ta0).pointer()\n        return self.Iterator (node_type, self.val['_M_node']['_M_data'])\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        # see empty() in stlport/stl/_list.h\n        if stlport_version < 5.0:\n            sentinel = self.val['_M_node']['_M_data']\n        else:\n            sentinel = self.val['_M_node']['_M_data'].address\n        if self.val['_M_node']['_M_data']['_M_next'] == sentinel:\n            return 'empty %s<%s>' % (self.typename, ta0)\n        return '%s<%s>' % (self.typename, ta0)\n\n    def display_hint (self):\n        return 'array'\n\n\nclass MapPrinter:\n    \"Pretty printer for std::map and std::multimap.\"\n\n    class Iterator:\n\n        def __init__ (self, rbiter, node_type):\n            self.rbiter    = rbiter\n            self.node_type = node_type\n            self.count     = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.count % 2 == 0:\n                item = self.rbiter.next().dereference()\n                self.pair = (item.cast (self.node_type))['_M_value_field']\n                element = self.pair['first']\n            else:\n                element = self.pair['second']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, element)\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = val\n\n    def children (self):\n        key_type   = self.val.type.template_argument (0)\n        value_type = self.val.type.template_argument (1)\n        pair_type  \\\n            = lookup_stlport_type ('pair<%s const,%s>' % (key_type,value_type))\n        node_type  \\\n            = lookup_stlport_priv_type ('_Rb_tree_node<%s >' % str (pair_type))\n        return self.Iterator (RbtreeIterator (self.val), node_type)\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        count = get_non_debug_impl (self.val, '_M_t')['_M_node_count']\n        return ('%s<%s> with %d elements' % (self.typename, ta0, count))\n\n    def display_hint (self):\n        return 'map'\n\n\nclass SetPrinter:\n    \"Pretty printer for std::set and std::multiset.\"\n\n    class Iterator:\n        def __init__ (self, rbiter, node_type):\n            self.rbiter    = rbiter\n            self.node_type = node_type\n            self.count     = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            item = self.rbiter.next().dereference()\n            element = (item.cast (self.node_type))['_M_value_field']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, element)\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = val\n\n    def children (self):\n        value_type = self.val.type.template_argument (0)\n        node_type  \\\n            = lookup_stlport_priv_type ('_Rb_tree_node<%s>' % (value_type))\n        return self.Iterator (RbtreeIterator (self.val), node_type)\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        count = get_non_debug_impl (self.val, '_M_t')['_M_node_count']\n        return ('%s<%s> with %d elements' % (self.typename, ta0, count))\n\n    def display_hint (self):\n        return 'array'\n\n\nclass SlistPrinter:\n    \"Pretty printer for std::slist.\"\n\n    class Iterator:\n        def __init__ (self, node_type, head):\n            self.node_type = node_type\n            self.item  = head['_M_next']\n            self.count = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.item == 0:\n                raise StopIteration\n            node = self.item.cast (self.node_type).dereference()\n            self.item = node['_M_next']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, node['_M_data'])\n\n    def __init__(self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n\n    def children (self):\n        ta0       = self.val.type.template_argument(0)\n        node_type = lookup_stlport_priv_type ('_Slist_node<%s>' % ta0).pointer()\n        return self.Iterator (node_type, self.val['_M_head']['_M_data'])\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        if self.val['_M_head']['_M_data']['_M_next'] == 0:\n            return 'empty %s<%s>' % (self.typename, ta0)\n        return '%s<%s>' % (self.typename, ta0)\n\n    def display_hint (self):\n        return 'array'\n\n\nclass StringPrinter:\n    \"Pretty printer for std::string or std::wstring.\"\n\n    def __init__ (self, _typename, val):\n        self.val = get_non_debug_impl (val)\n\n    def to_string (self):\n        try:\n            # STLport 5.2 and later\n            return self.val['_M_start_of_storage']['_M_data']\n        except RuntimeError:\n            try:\n                # STLport 5.0 and 5.1 with short string optimization\n                static_buf = self.val['_M_buffers']['_M_static_buf']\n                data       = self.val['_M_end_of_storage']['_M_data']\n                if static_buf.address + 1 == data:\n                    ta0    = self.val.type.template_argument (0)\n                    start  = static_buf.cast (ta0.pointer())\n                    finish = self.val['_M_finish']\n                    if start == finish:\n                        # STLport 5.0 without _STLP_FORCE_STRING_TERMINATION\n                        return \"\"\n                    return start\n                return self.val['_M_buffers']['_M_dynamic_buf']\n            except RuntimeError:\n                # STLport 5.0 and 5.1 without short string optimization,\n                # and STLport 4.6\n                start  = self.val['_M_start']\n                finish = self.val['_M_finish']\n                if start == finish:\n                    # STLport 5.0 without _STLP_FORCE_STRING_TERMINATION\n                    return \"\"\n                return start\n\n    def display_hint (self):\n        return 'string'\n\n\nclass VectorPrinter:\n    \"Pretty printer for std::vector.\"\n\n    class Iterator:\n\n        def __init__ (self, start, finish, bit_vector):\n            self.bit_vector = bit_vector\n            self.count      = 0\n            if bit_vector:\n                self.item   = start['_M_p']\n                self.io     = start['_M_offset']\n                self.finish = finish['_M_p']\n                self.fo     = finish['_M_offset']\n                self.isize  = 8 * self.item.dereference().type.sizeof\n            else:\n                self.item   = start\n                self.finish = finish\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            count = self.count\n            self.count += 1\n            if self.bit_vector:\n                if self.item == self.finish and self.io == self.fo:\n                    raise StopIteration\n                element = self.item.dereference()\n                value = 0\n                if element & (1 << self.io):\n                    value = 1\n                self.io += 1\n                if self.io >= self.isize:\n                    self.item += 1\n                    self.io   =  0\n                return ('[%d]' % count, value)\n            else:\n                if self.item == self.finish:\n                    raise StopIteration\n                element = self.item.dereference()\n                self.item += 1\n                return ('[%d]' % count, element)\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n        self.bit_vector \\\n            = val.type.template_argument (0).code == gdb.TYPE_CODE_BOOL\n\n    def children (self):\n        start  = self.val['_M_start']\n        finish = self.val['_M_finish']\n        return self.Iterator (start, finish, self.bit_vector)\n\n    def to_string (self):\n        if self.bit_vector:\n            start    = self.val['_M_start']['_M_p']\n            so       = self.val['_M_start']['_M_offset']\n            finish   = self.val['_M_finish']['_M_p']\n            fo       = self.val['_M_finish']['_M_offset']\n            end      = self.val['_M_end_of_storage']['_M_data']\n            isize    = 8 * start.dereference().type.sizeof\n            length   = (isize - so) + isize * (finish - start - 1) + fo\n            capacity = isize * (end - start)\n            return ('%s<bool> of length %d, capacity %d'\n                % (self.typename, length, capacity))\n        else:\n            start    = self.val['_M_start']\n            finish   = self.val['_M_finish']\n            end      = self.val['_M_end_of_storage']['_M_data']\n            length   = finish - start\n            capacity = end - start\n            ta0      = self.val.type.template_argument (0)\n            return ('%s<%s> of length %d, capacity %d'\n                % (self.typename, ta0, length, capacity))\n\n    def display_hint (self):\n        if print_vector_with_indices:\n            return None\n        else:\n            return 'array'\n\n\nclass WrapperPrinter:\n    \"Pretty printer for std::stack, std::queue, and std::priority_queue.\"\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = val\n        self.visualizer = gdb.default_visualizer (val['c'])\n\n    def children (self):\n        return self.visualizer.children()\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        return ('%s<%s>, wrapping %s'\n            % (self.typename, ta0, self.visualizer.to_string()))\n\n    def display_hint (self):\n        if hasattr (self.visualizer, 'display_hint'):\n            return self.visualizer.display_hint()\n        return None\n\n\nclass UnorderedMapPrinter:\n    \"\"\"Pretty printer for std::tr1::unordered_map\n    and std::tr1::unordered_multimap.\"\"\"\n\n    class Iterator:\n        def __init__ (self, node_type, head):\n            self.node_type = node_type\n            self.item  = head['_M_next']\n            self.count = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.item == 0 and self.count % 2 == 0:\n                raise StopIteration\n            if self.count % 2 == 0:\n                self.pair = self.item.cast (self.node_type).dereference()\n                self.item = self.pair['_M_next']\n                element = self.pair['_M_data']['first']\n            else:\n                element = self.pair['_M_data']['second']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, element)\n\n    def __init__(self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n\n    def children (self):\n        key_type   = self.val.type.template_argument (0)\n        value_type = self.val.type.template_argument (1)\n        pair_type  \\\n            = lookup_stlport_type ('pair<%s const,%s>' % (key_type,value_type))\n        node_type  \\\n            = lookup_stlport_priv_type ('_Slist_node<%s >'\n                % str (pair_type)).pointer()\n        elements = get_non_debug_impl (self.val, '_M_ht')['_M_elems']\n        return self.Iterator (node_type, elements['_M_head']['_M_data'])\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        length = get_non_debug_impl (self.val, '_M_ht')['_M_num_elements']\n        if length == 0:\n            return 'empty %s<%s>' % (self.typename, ta0)\n        return '%s<%s> with %d elements' % (self.typename, ta0, length)\n\n    def display_hint (self):\n        return 'map'\n\n\nclass UnorderedSetPrinter:\n    \"\"\"Pretty printer for std::tr1::unordered_set\n    and std::tr1::unordered_multiset.\"\"\"\n\n    class Iterator:\n        def __init__ (self, node_type, head):\n            self.node_type = node_type\n            self.item  = head['_M_next']\n            self.count = 0\n\n        def __iter__ (self):\n            return self\n\n        def next (self):\n            if self.item == 0:\n                raise StopIteration\n            node = self.item.cast (self.node_type).dereference()\n            self.item = node['_M_next']\n            count = self.count\n            self.count += 1\n            return ('[%d]' % count, node['_M_data'])\n\n    def __init__(self, typename, val):\n        self.typename = typename\n        self.val = get_non_debug_impl (val)\n\n    def children (self):\n        ta0 = self.val.type.template_argument(0)\n        node_type = lookup_stlport_priv_type ('_Slist_node<%s>' % ta0).pointer()\n        elements = get_non_debug_impl (self.val, '_M_ht')['_M_elems']\n        return self.Iterator (node_type, elements['_M_head']['_M_data'])\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        length = get_non_debug_impl (self.val, '_M_ht')['_M_num_elements']\n        if length == 0:\n            return 'empty %s<%s>' % (self.typename, ta0)\n        return '%s<%s> with %d elements' % (self.typename, ta0, length)\n\n    def display_hint (self):\n        return 'array'\n\n\nclass AutoptrPrinter:\n    \"Pretty printer for std::auto_ptr.\"\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = val\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        pointer = self.val['_M_p'].cast (ta0.pointer())\n        if pointer == 0:\n            return ('%s<%s> (empty)' % (self.typename, ta0))\n        else:\n            return ('%s<%s>, pointing to %s'\n                % (self.typename, ta0, pointer.dereference()))\n\n    def display_hint (self):\n        return None\n\n\nclass SharedptrPrinter:\n    \"Pretty printer for std::shared_ptr and std::weak_ptr.\"\n\n    def __init__ (self, typename, val):\n        self.typename = typename\n        self.val = val\n\n    def to_string (self):\n        ta0 = self.val.type.template_argument (0)\n        pointer = self.val['px'].cast (ta0.pointer())\n        if pointer == 0:\n            return ('%s<%s> (empty)' % (self.typename, ta0))\n        else:\n            count = self.val['pn']['pi_']['use_count_']\n            return ('%s<%s> (count %d), pointing to %s'\n                % (self.typename, ta0, count, pointer.dereference()))\n\n    def display_hint (self):\n        return None\n\n\ndef lookup_function (val):\n    \"Look-up and return a pretty-printer that can print val.\"\n\n    type = val.type\n    if type.code == gdb.TYPE_CODE_REF:\n        type = type.target()\n    type = type.unqualified().strip_typedefs()\n\n    typename = type.tag\n    if typename == None:\n        return None\n\n    for function in pretty_printers_dict:\n        if function.search (typename):\n            return pretty_printers_dict[function] (val)\n    return None\n\n\ndef register_stlport_printers (obj):\n    \"Register STLport pretty-printers with object file obj.\"\n\n    if obj == None:\n        obj = gdb\n    obj.pretty_printers.append (lookup_function)\n\n\n\npretty_printers_dict = {}\n\ndef add_entry (regex, printer, typename):\n    prefix = \"^(stlpd?_std|_STL|std)::\"\n    suffix = \"<.*>$\"\n    if typename != None:\n        typename = \"std::\" + typename\n    if regex[0:5] == \"boost\":\n        prefix = \"\"\n    pretty_printers_dict[re.compile (prefix+regex+suffix)] \\\n        = lambda val: printer (typename, val)\n\nadd_entry (\"basic_string\",   StringPrinter,  None)\nadd_entry (\"bitset\",         BitsetPrinter,  \"bitset\")\nadd_entry (\"deque\",          DequePrinter,   \"deque\")\nadd_entry (\"map\",            MapPrinter,     \"map\")\nadd_entry (\"list\",           ListPrinter,    \"list\")\nadd_entry (\"multimap\",       MapPrinter,     \"multimap\")\nadd_entry (\"multiset\",       SetPrinter,     \"multiset\")\nadd_entry (\"queue\",          WrapperPrinter, \"queue\")\nadd_entry (\"priority_queue\", WrapperPrinter, \"priority_queue\")\nadd_entry (\"set\",            SetPrinter,     \"set\")\nadd_entry (\"slist\",          SlistPrinter,   \"slist\")\nadd_entry (\"stack\",          WrapperPrinter, \"stack\")\nadd_entry (\"vector\",         VectorPrinter,  \"vector\")\n\nadd_entry (\"tr1::unordered_map\",      UnorderedMapPrinter, \"tr1::unordered_map\")\nadd_entry (\"tr1::unordered_multimap\", UnorderedMapPrinter, \"tr1::unordered_multimap\")\nadd_entry (\"tr1::unordered_set\",      UnorderedSetPrinter, \"tr1::unordered_set\")\nadd_entry (\"tr1::unordered_multiset\", UnorderedSetPrinter, \"tr1::unordered_multiset\")\n\nadd_entry (\"auto_ptr\",          AutoptrPrinter,   \"auto_ptr\")\nadd_entry (\"boost::shared_ptr\", SharedptrPrinter, \"tr1::shared_ptr\")\nadd_entry (\"boost::weak_ptr\",   SharedptrPrinter, \"tr1::weak_ptr\")\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/test/.gdbinit",
    "content": "python\nimport os\nimport sys\n\nsys.path.insert (0, os.getcwd() + '/..')\nimport stlport.printers\nstlport.printers.register_stlport_printers (None)\n\n# stlport.printers.stlport_version           = 5.2\n# stlport.printers.print_vector_with_indices = False\n\nend\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/test/Makefile",
    "content": "CXX=g++\nGDB=gdb\n\n# Adjust and uncomment to enable the corresponding tests\n# STLPORT46_ROOT_DIR=/usr/local/stlport-4.6.2\n# STLPORT50_ROOT_DIR=/usr/local/stlport-5.0.3\n# STLPORT51_ROOT_DIR=/usr/local/stlport-5.1.7\n# STLPORT52_ROOT_DIR=/usr/local/stlport-5.2.1\n\n# To enable Boost support you might need to patch\n# $(STLPORT52_ROOT_DIR)/include/stlport/stl/type_traits.h\n# to include <boost/type_traits/remove_const.hpp>.\n# STLPORT52_USE_BOOST_SUPPORT=1\n\n\n\n# Common flags for STLport 4.6.x tests\nSTLPORT46_FLAGS = \\\n  $(CXXFLAGS) $(LDFLAGS) \\\n  -I$(STLPORT46_ROOT_DIR)/include/stlport \\\n  -L$(STLPORT46_ROOT_DIR)/lib \\\n  -Wl,-R$(STLPORT46_ROOT_DIR)/lib \\\n  -pthread\n\n# Common flags for STLport 5.0.x tests\nSTLPORT50_FLAGS = \\\n  $(CXXFLAGS) $(LDFLAGS) \\\n  -I$(STLPORT50_ROOT_DIR)/include/stlport \\\n  -L$(STLPORT50_ROOT_DIR)/lib \\\n  -Wl,-R$(STLPORT50_ROOT_DIR)/lib \\\n  -pthread\n\n# Common flags for STLport 5.1.x tests\nSTLPORT51_FLAGS = \\\n  $(CXXFLAGS) $(LDFLAGS) \\\n  -I$(STLPORT51_ROOT_DIR)/include/stlport \\\n  -L$(STLPORT51_ROOT_DIR)/lib \\\n  -Wl,-R$(STLPORT51_ROOT_DIR)/lib \\\n  -pthread\n\n# Common flags for STLport 5.2.x tests\nSTLPORT52_FLAGS = \\\n  $(CXXFLAGS) $(LDFLAGS) \\\n  -I$(STLPORT52_ROOT_DIR)/include/stlport \\\n  -L$(STLPORT52_ROOT_DIR)/lib \\\n  -Wl,-R$(STLPORT52_ROOT_DIR)/lib \\\n  -pthread\n\nifneq ($(STLPORT52_USE_BOOST_SUPPORT),)\nSTLPORT52_FLAGS += -D_STLP_USE_BOOST_SUPPORT\nendif\n\n\n\n# Add STLport 4.6.x tests to $(TARGETS) (if enabled)\nifneq ($(STLPORT46_ROOT_DIR),)\nTARGETS += test_stlport46 test_stlport46d\nendif\n\n# Add STLport 5.0.x tests to $(TARGETS) (if enabled)\nifneq ($(STLPORT50_ROOT_DIR),)\nTARGETS += test_stlport50 test_stlport50d\nendif\n\n# Add STLport 5.1.x tests to $(TARGETS) (if enabled)\nifneq ($(STLPORT51_ROOT_DIR),)\nTARGETS += test_stlport51 test_stlport51d\nendif\n\n# Add STLport 5.2.x tests to $(TARGETS) (if enabled)\nifneq ($(STLPORT52_ROOT_DIR),)\nTARGETS += test_stlport52 test_stlport52d\nendif\n\n\n\ndefault: run\nifeq ($(TARGETS),)\n\t@echo \"You need to configure the STLport directory at the start of the Makefile.\"\nendif\n\nrun: build\nifneq ($(TARGETS),)\n\tfor TARGET in $(TARGETS); do \\\n\t  echo \"Running test for $$TARGET\"; \\\n\t  $(GDB) -batch -x script ./$$TARGET; \\\n\tdone\nendif\n\nbuild: $(TARGETS)\n\ntest_stlport46: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT46_FLAGS) -lstlport_gcc\n\ntest_stlport46d: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT46_FLAGS) -lstlport_gcc_stldebug -D_STLP_DEBUG\n\ntest_stlport50: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT50_FLAGS) -lstlport\n\ntest_stlport50d: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT50_FLAGS) -lstlportstlg -D_STLP_DEBUG\n\ntest_stlport51: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT51_FLAGS) -lstlport\n\ntest_stlport51d: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT51_FLAGS) -lstlportstlg -D_STLP_DEBUG\n\ntest_stlport52: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT52_FLAGS) -lstlport\n\ntest_stlport52d: test.cpp Makefile\n\t$(CXX) -o $@ $< -g $(STLPORT52_FLAGS) -lstlportstlg -D_STLP_DEBUG\n\nclean:\n\trm -f test_stlport*\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/test/script",
    "content": "b foo\nr\nfin\np string1\np string2\np string3\np wstring1\np wstring2\np wstring3\np vector1\np vector2\np map1\np multimap1\np set1\np multiset1\np list1\np list2\np slist1\np slist2\np deque1\np deque2\np stack1\np queue1\np priority_queue1\np bitset1\np bitset2\np unordered_map1\np unordered_map2\np unordered_multimap1\np unordered_multimap2\np unordered_set1\np unordered_set2\np unordered_multiset1\np unordered_multiset2\np auto_ptr1\np auto_ptr2\np shared_ptr1\np shared_ptr2\np weak_ptr1\np weak_ptr2\nq\n"
  },
  {
    "path": "sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2/test/test.cpp",
    "content": "#include <bitset>\n#include <deque>\n#include <list>\n#include <memory>\n#include <map>\n#include <queue>\n#include <set>\n#ifdef _STLPORT_VERSION\n#include <slist>\n#endif // _STLPORT_VERSION\n#include <string>\n#include <stack>\n#if _STLPORT_VERSION >= 0x520\n#include <unordered_map>\n#include <unordered_set>\n#endif //_STLPORT_VERSION >= 0x520\n#include <vector>\n\n#ifdef _STLPORT_VERSION\n#define STD_TR1 std::tr1\n#else // _STLPORT_VERSION\n#define STD_TR1 std\n#endif // _STLPORT_VERSION\n\nstruct Large {\n  char m_foo[100];\n};\n\nvoid foo() { }\n\nint main() {\n\n  std::string string1 = \"\";\n  std::string string2 = \"a short string\";\n  std::string string3 = \"a very long string ...\";\n\n  std::wstring wstring1 = L\"\";\n  std::wstring wstring2 = L\"a short string\";\n  std::wstring wstring3 = L\"a very long string ...\";\n\n  std::vector<int> vector1;\n  vector1.push_back( 100);\n  vector1.push_back( 200);\n  vector1.push_back( 300);\n\n  std::vector<bool> vector2;\n  vector2.push_back( true);\n  vector2.push_back( false);\n  vector2.push_back( true);\n\n  std::map<int,int> map1;\n  map1[1] = -1;\n  map1[21] = -21;\n  map1[42] = -42;\n\n  std::multimap<int,int> multimap1;\n  multimap1.insert (std::pair<int,int> (1, -1));\n  multimap1.insert (std::pair<int,int> (1, -2));\n  multimap1.insert (std::pair<int,int> (21, -21));\n  multimap1.insert (std::pair<int,int> (21, -22));\n  multimap1.insert (std::pair<int,int> (42, -42));\n  multimap1.insert (std::pair<int,int> (42, -43));\n\n  std::set<int> set1;\n  set1.insert( 100);\n  set1.insert( 200);\n  set1.insert( 300);\n\n  std::multiset<int> multiset1;\n  multiset1.insert( 100);\n  multiset1.insert( 100);\n  multiset1.insert( 200);\n  multiset1.insert( 200);\n  multiset1.insert( 300);\n  multiset1.insert( 300);\n\n  std::list<int> list1;\n  std::list<int> list2;\n  list1.push_back( 100);\n  list1.push_back( 200);\n  list1.push_back( 300);\n\n#ifdef _STLPORT_VERSION\n  std::slist<int> slist1;\n  std::slist<int> slist2;\n  slist1.push_front( 100);\n  slist1.push_front( 200);\n  slist1.push_front( 300);\n#else // _STLPORT_VERSION\n  std::string slist1 = \"std::slist not supported\";\n  std::string slist2 = \"std::slist not supported\";\n#endif // _STLPORT_VERSION\n\n  std::deque<int> deque1;\n  deque1.push_front( 100);\n  deque1.push_front( 200);\n  deque1.push_front( 300);\n\n  std::deque<Large> deque2;\n  deque2.push_back( Large());\n  deque2.push_back( Large());\n  deque2.push_front( Large());\n\n  std::stack<int> stack1;\n  stack1.push( 100);\n  stack1.push( 200);\n  stack1.push( 300);\n\n  std::queue<int> queue1;\n  queue1.push( 100);\n  queue1.push( 200);\n  queue1.push( 300);\n\n  std::priority_queue<int> priority_queue1;\n  priority_queue1.push( 200);\n  priority_queue1.push( 100);\n  priority_queue1.push( 300);\n\n  std::bitset<100> bitset1;\n  bitset1[2] = 1;\n  bitset1[42] = 1;\n  bitset1[64] = 1;\n  \n  std::bitset<1> bitset2;\n  bitset2[0] = 1;\n\n#if _STLPORT_VERSION >= 0x520\n  STD_TR1::unordered_map<int,int> unordered_map1;\n  STD_TR1::unordered_map<int,int> unordered_map2;\n  for( int i = 0; i < 5; ++i)\n      unordered_map1[i*i] = -i*i;\n\n  STD_TR1::unordered_multimap<int,int> unordered_multimap1;\n  STD_TR1::unordered_multimap<int,int> unordered_multimap2;\n  for( int i = 0; i < 5; ++i) {\n      unordered_multimap1.insert( std::pair<int,int>( i*i, -i*i));\n      unordered_multimap1.insert( std::pair<int,int>( i*i,  i*i));\n  }\n\n  STD_TR1::unordered_set<int> unordered_set1;\n  STD_TR1::unordered_set<int> unordered_set2;\n  for( int i = 0; i < 5; ++i)\n      unordered_set1.insert( i*i);\n  \n  STD_TR1::unordered_multiset<int> unordered_multiset1;\n  STD_TR1::unordered_multiset<int> unordered_multiset2;\n  for( int i = 0; i < 5; ++i) {\n      unordered_multiset1.insert( -i*i);\n      unordered_multiset1.insert(  i*i);\n  }\n#else // _STLPORT_VERSION < 0x520\n  std::string unordered_map1 = \"std::tr1::unordered_map not supported\";\n  std::string unordered_map2 = \"std::tr1::unordered_map not supported\";\n  std::string unordered_multimap1 = \"std::tr1::unordered_multimap not supported\";\n  std::string unordered_multimap2 = \"std::tr1::unordered_multimap not supported\";\n  std::string unordered_set1 = \"std::tr1::unordered_set not supported\";\n  std::string unordered_set2 = \"std::tr1::unordered_set not supported\";\n  std::string unordered_multiset1 = \"std::tr1::unordered_multiset not supported\";\n  std::string unordered_multiset2 = \"std::tr1::unordered_multiset not supported\";\n#endif // _STLPORT_VERSION < 0x520\n\n  std::auto_ptr<Large> auto_ptr1( new Large());\n  std::auto_ptr<Large> auto_ptr2;\n\n#ifdef _STLP_USE_BOOST_SUPPORT\n  STD_TR1::shared_ptr<Large> shared_ptr1( new Large);\n  STD_TR1::shared_ptr<Large> shared_ptr2;\n  \n  STD_TR1::weak_ptr<Large> weak_ptr1( shared_ptr1);\n  STD_TR1::weak_ptr<Large> weak_ptr2;\n#else // _STLP_USE_BOOST_SUPPORT\n  std::string shared_ptr1 = \"std::tr1::shared_ptr not supported\";\n  std::string shared_ptr2 = \"std::tr1::shared_ptr not supported\";\n\n  std::string weak_ptr1 = \"std::tr1::weak_ptr not supported\";\n  std::string weak_ptr2 = \"std::tr1::weak_ptr not supported\";\n#endif // _STLP_USE_BOOST_SUPPORT\n  \n  foo();\n  return 0;\n}\n"
  },
  {
    "path": "sources/host-tools/gdb-stub/gdb-stub.c",
    "content": "/***************************************************************************\n** The BSD 3-Clause License. http://www.opensource.org/licenses/BSD-3-Clause\n**\n** This file is part of 'mingw-builds' project.\n** Copyright (c) 2011,2012,2013 by niXman (i dotty nixman doggy gmail dotty com)\n** All rights reserved.\n**\n** Project: mingw-builds ( http://sourceforge.net/projects/mingwbuilds/ )\n**\n** Redistribution and use in source and binary forms, with or without \n** modification, are permitted provided that the following conditions are met:\n** - Redistributions of source code must retain the above copyright \n**     notice, this list of conditions and the following disclaimer.\n** - Redistributions in binary form must reproduce the above copyright \n**     notice, this list of conditions and the following disclaimer in \n**     the documentation and/or other materials provided with the distribution.\n** - Neither the name of the 'mingw-builds' nor the names of its contributors may \n**     be used to endorse or promote products derived from this software \n**     without specific prior written permission.\n**\n** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \n** \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \n** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \n** A PARTICULAR PURPOSE ARE DISCLAIMED.\n** IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY \n** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \n** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS \n** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER \n** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, \n** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE \n** USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n**\n***************************************************************************/\n\n#include <windows.h>\n\n#include <stdio.h>\n#include <strings.h>\n\n#ifdef _DEBUG\n #define dbg_printf(...) printf(__VA_ARGS__)\n#else\n #define dbg_printf(...) do {} while(0)\n#endif\n\n// When built for the Android NDK, values are\n// passed in on the GCC commandline, and when\n// built for mingw-builds, these defaults are\n// used.\n#ifndef GDB_TO_PYTHON_REL_DIR\n #define GDB_TO_PYTHON_REL_DIR \"..\\\\opt\\\\bin\"\n#endif\n\n#ifndef GDB_EXECUTABLE_ORIG_FILENAME\n #define GDB_EXECUTABLE_ORIG_FILENAME \"gdborig.exe\"\n#endif\n\n#ifndef PYTHONHOME_REL_DIR\n #define PYTHONHOME_REL_DIR \"..\\\\opt\"\n#endif\n\n#define DIE_IF_FALSE(var) \\\n\tdo { \\\n\t\tif ( !(var) ) { \\\n\t\t\tfprintf(stderr, \"%s(%d)[%d]: expression \\\"%s\\\" fail. terminate.\\n\" \\\n\t\t\t\t,__FILE__ \\\n\t\t\t\t,__LINE__ \\\n\t\t\t\t,GetLastError() \\\n\t\t\t\t,#var \\\n\t\t\t); \\\n\t\t\texit(1); \\\n\t\t} \\\n\t} while (0)\n\nint main(int argc, char** argv) {\n\tenum {\n\t\t envbufsize = 1024*32\n\t\t,exebufsize = 1024\n\t\t,cmdbufsize = envbufsize\n\t};\n\n\tchar *envbuf, *sep, *resbuf, *cmdbuf;\n\tDWORD len, exitCode;\n\tSTARTUPINFO si;\n\tPROCESS_INFORMATION pi;\n\n\tDIE_IF_FALSE(\n\t\t(envbuf = (char *)malloc(envbufsize))\n\t);\n\tDIE_IF_FALSE(\n\t\t(cmdbuf = (char *)malloc(cmdbufsize))\n\t);\n\t*cmdbuf = 0;\n\n\tDIE_IF_FALSE(\n\t\tGetEnvironmentVariable(\"PATH\", envbuf, envbufsize)\n\t);\n\tdbg_printf(\"env: %s\\n\", envbuf);\n\n\tDIE_IF_FALSE(\n\t\tGetModuleFileName(0, cmdbuf, exebufsize)\n\t);\n\tdbg_printf(\"curdir: %s\\n\", cmdbuf);\n\n\tDIE_IF_FALSE(\n\t\t(sep = strrchr(cmdbuf, '\\\\'))\n\t);\n\t*(sep+1) = 0;\n\tstrcat(cmdbuf, GDB_TO_PYTHON_REL_DIR);\n\tdbg_printf(\"sep: %s\\n\", cmdbuf);\n\n\tlen = strlen(envbuf)+strlen(cmdbuf)\n\t\t+1  /* for envronment separator */\n\t\t+1; /* for zero-terminator */\n\n\tDIE_IF_FALSE(\n\t\t(resbuf = (char *)malloc(len))\n\t);\n\n\tDIE_IF_FALSE(\n\t\t(snprintf(resbuf, len, \"%s;%s\", cmdbuf, envbuf) > 0)\n\t);\n\tdbg_printf(\"PATH: %s\\n\", resbuf);\n\n\tDIE_IF_FALSE(\n\t\tSetEnvironmentVariable(\"PATH\", resbuf)\n\t);\n\n\t*(sep+1) = 0;\n\tstrcat(cmdbuf, PYTHONHOME_REL_DIR);\n\tdbg_printf(\"PYTHONHOME: %s\\n\", cmdbuf);\n\tDIE_IF_FALSE(\n\t\tSetEnvironmentVariable(\"PYTHONHOME\", cmdbuf)\n\t);\n\n\t*(sep+1) = 0;\n\tstrcat(cmdbuf, GDB_EXECUTABLE_ORIG_FILENAME\" \");\n\n\tif ( argc > 1 ) {\n\t\tfor ( ++argv; *argv; ++argv ) {\n\t\t\tlen = strlen(cmdbuf);\n\t\t\tsnprintf(cmdbuf+len, cmdbufsize-len, \"%s \", *argv);\n\t\t}\n\t}\n\tdbg_printf(\"cmd: %s\\n\", cmdbuf);\n\n\tHANDLE ghJob = CreateJobObject(NULL, \"Gdb-Wrapper\\0\"/*NULL*/);\n\tif ( ghJob == NULL ) {\n        fprintf(stderr, \"Could not create job object\\n\");\n\t}\n\telse{\n\t\tJOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };\n\t\t// Configure all child processes associated with the job to terminate when the last handle to the job is closed\n\t\tjeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;\n\t\tif ( SetInformationJobObject(ghJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)) == 0 ) {\n            fprintf(stderr, \"Could not SetInformationJobObject\\n\");\n\t\t}\n\t}\n\n\tmemset(&si, 0, sizeof(si));\n\tsi.cb = sizeof(si);\n\tsi.dwFlags |= STARTF_USESTDHANDLES;\n\tsi.hStdInput = GetStdHandle(STD_INPUT_HANDLE);\n\tsi.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);\n\tsi.hStdError = GetStdHandle(STD_ERROR_HANDLE);\n\n\tmemset(&pi, 0, sizeof(pi));\n\n\tDIE_IF_FALSE(\n\t\tCreateProcess(\n\t\t\t0\t\t\t// exe name\n\t\t\t,cmdbuf\t\t// command line\n\t\t\t,0\t\t\t// process security attributes\n\t\t\t,0\t\t\t// primary thread security attributes\n\t\t\t,TRUE\t\t// handles are inherited\n\t\t\t,0\t\t\t// creation flags\n\t\t\t,0\t\t\t// use parent's environment\n\t\t\t,0\t\t\t// use parent's current directory\n\t\t\t,&si\t\t// STARTUPINFO pointer\n\t\t\t,&pi\t\t// receives PROCESS_INFORMATION\n\t\t)\n\t);\n\n\tif ( ghJob != NULL )\n\t\tif ( AssignProcessToJobObject(ghJob, pi.hProcess) == 0 ) {\n            fprintf(stderr, \"Could not AssignProcessToObject\\n\");\n\t\t}\n\n\t// Do not handle Ctrl-C in the wrapper\n\tSetConsoleCtrlHandler(NULL, TRUE);\n\n\tWaitForSingleObject(pi.hProcess, INFINITE);\n\n\tDIE_IF_FALSE(\n\t\tGetExitCodeProcess(pi.hProcess, &exitCode)\n\t);\n\n\tif ( ghJob != NULL )\n\t\tCloseHandle(ghJob);\n\tCloseHandle( pi.hProcess );\n\tCloseHandle( pi.hThread );\n\n\tfree(envbuf);\n\tfree(resbuf);\n\tfree(cmdbuf);\n\n\tdbg_printf(\"exiting with exitCode %d\", exitCode);\n\n\treturn exitCode;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/ABOUT-NLS",
    "content": "Notes on the Free Translation Project\n*************************************\n\nFree software is going international!  The Free Translation Project is\na way to get maintainers of free software, translators, and users all\ntogether, so that will gradually become able to speak many languages.\nA few packages already provide translations for their messages.\n\n   If you found this `ABOUT-NLS' file inside a distribution, you may\nassume that the distributed package does use GNU `gettext' internally,\nitself available at your nearest GNU archive site.  But you do _not_\nneed to install GNU `gettext' prior to configuring, installing or using\nthis package with messages translated.\n\n   Installers will find here some useful hints.  These notes also\nexplain how users should proceed for getting the programs to use the\navailable translations.  They tell how people wanting to contribute and\nwork at translations should contact the appropriate team.\n\n   When reporting bugs in the `intl/' directory or bugs which may be\nrelated to internationalization, you should tell about the version of\n`gettext' which is used.  The information can be found in the\n`intl/VERSION' file, in internationalized packages.\n\nQuick configuration advice\n==========================\n\nIf you want to exploit the full power of internationalization, you\nshould configure it using\n\n     ./configure --with-included-gettext\n\nto force usage of internationalizing routines provided within this\npackage, despite the existence of internationalizing capabilities in the\noperating system where this package is being installed.  So far, only\nthe `gettext' implementation in the GNU C library version 2 provides as\nmany features (such as locale alias, message inheritance, automatic\ncharset conversion or plural form handling) as the implementation here.\nIt is also not possible to offer this additional functionality on top\nof a `catgets' implementation.  Future versions of GNU `gettext' will\nvery likely convey even more functionality.  So it might be a good idea\nto change to GNU `gettext' as soon as possible.\n\n   So you need _not_ provide this option if you are using GNU libc 2 or\nyou have installed a recent copy of the GNU gettext package with the\nincluded `libintl'.\n\nINSTALL Matters\n===============\n\nSome packages are \"localizable\" when properly installed; the programs\nthey contain can be made to speak your own native language.  Most such\npackages use GNU `gettext'.  Other packages have their own ways to\ninternationalization, predating GNU `gettext'.\n\n   By default, this package will be installed to allow translation of\nmessages.  It will automatically detect whether the system already\nprovides the GNU `gettext' functions.  If not, the GNU `gettext' own\nlibrary will be used.  This library is wholly contained within this\npackage, usually in the `intl/' subdirectory, so prior installation of\nthe GNU `gettext' package is _not_ required.  Installers may use\nspecial options at configuration time for changing the default\nbehaviour.  The commands:\n\n     ./configure --with-included-gettext\n     ./configure --disable-nls\n\nwill respectively bypass any pre-existing `gettext' to use the\ninternationalizing routines provided within this package, or else,\n_totally_ disable translation of messages.\n\n   When you already have GNU `gettext' installed on your system and run\nconfigure without an option for your new package, `configure' will\nprobably detect the previously built and installed `libintl.a' file and\nwill decide to use this.  This might be not what is desirable.  You\nshould use the more recent version of the GNU `gettext' library.  I.e.\nif the file `intl/VERSION' shows that the library which comes with this\npackage is more recent, you should use\n\n     ./configure --with-included-gettext\n\nto prevent auto-detection.\n\n   The configuration process will not test for the `catgets' function\nand therefore it will not be used.  The reason is that even an\nemulation of `gettext' on top of `catgets' could not provide all the\nextensions of the GNU `gettext' library.\n\n   Internationalized packages have usually many `po/LL.po' files, where\nLL gives an ISO 639 two-letter code identifying the language.  Unless\ntranslations have been forbidden at `configure' time by using the\n`--disable-nls' switch, all available translations are installed\ntogether with the package.  However, the environment variable `LINGUAS'\nmay be set, prior to configuration, to limit the installed set.\n`LINGUAS' should then contain a space separated list of two-letter\ncodes, stating which languages are allowed.\n\nUsing This Package\n==================\n\nAs a user, if your language has been installed for this package, you\nonly have to set the `LANG' environment variable to the appropriate\n`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,\nand `CC' is an ISO 3166 two-letter country code.  For example, let's\nsuppose that you speak German and live in Germany.  At the shell\nprompt, merely execute `setenv LANG de_DE' (in `csh'),\n`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').\nThis can be done from your `.login' or `.profile' file, once and for\nall.\n\n   You might think that the country code specification is redundant.\nBut in fact, some languages have dialects in different countries.  For\nexample, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The\ncountry code serves to distinguish the dialects.\n\n   The locale naming convention of `LL_CC', with `LL' denoting the\nlanguage and `CC' denoting the country, is the one use on systems based\non GNU libc.  On other systems, some variations of this scheme are\nused, such as `LL' or `LL_CC.ENCODING'.  You can get the list of\nlocales supported by your system for your country by running the command\n`locale -a | grep '^LL''.\n\n   Not all programs have translations for all languages.  By default, an\nEnglish message is shown in place of a nonexistent translation.  If you\nunderstand other languages, you can set up a priority list of languages.\nThis is done through a different environment variable, called\n`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'\nfor the purpose of message handling, but you still need to have `LANG'\nset to the primary language; this is required by other parts of the\nsystem libraries.  For example, some Swedish users who would rather\nread translations in German than English for when Swedish is not\navailable, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.\n\n   Special advice for Norwegian users: The language code for Norwegian\nbokma*l changed from `no' to `nb' recently (in 2003).  During the\ntransition period, while some message catalogs for this language are\ninstalled under `nb' and some older ones under `no', it's recommended\nfor Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and\nolder translations are used.\n\n   In the `LANGUAGE' environment variable, but not in the `LANG'\nenvironment variable, `LL_CC' combinations can be abbreviated as `LL'\nto denote the language's main dialect.  For example, `de' is equivalent\nto `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'\n(Portuguese as spoken in Portugal) in this context.\n\nTranslating Teams\n=================\n\nFor the Free Translation Project to be a success, we need interested\npeople who like their own language and write it well, and who are also\nable to synergize with other translators speaking the same language.\nEach translation team has its own mailing list.  The up-to-date list of\nteams can be found at the Free Translation Project's homepage,\n`http://www.iro.umontreal.ca/contrib/po/HTML/', in the \"National teams\"\narea.\n\n   If you'd like to volunteer to _work_ at translating messages, you\nshould become a member of the translating team for your own language.\nThe subscribing address is _not_ the same as the list itself, it has\n`-request' appended.  For example, speakers of Swedish can send a\nmessage to `sv-request@li.org', having this message body:\n\n     subscribe\n\n   Keep in mind that team members are expected to participate\n_actively_ in translations, or at solving translational difficulties,\nrather than merely lurking around.  If your team does not exist yet and\nyou want to start one, or if you are unsure about what to do or how to\nget started, please write to `translation@iro.umontreal.ca' to reach the\ncoordinator for all translator teams.\n\n   The English team is special.  It works at improving and uniformizing\nthe terminology in use.  Proven linguistic skill are praised more than\nprogramming skill, here.\n\nAvailable Packages\n==================\n\nLanguages are not equally supported in all packages.  The following\nmatrix shows the current state of internationalization, as of January\n2004.  The matrix shows, in regard of each package, for which languages\nPO files have been submitted to translation coordination, with a\ntranslation percentage of at least 50%.\n\n     Ready PO files       af am ar az be bg bs ca cs da de el en en_GB eo es\n                        +----------------------------------------------------+\n     a2ps               |             []             [] [] []                |\n     aegis              |                               ()                   |\n     ant-phone          |                               ()                   |\n     anubis             |                                                    |\n     ap-utils           |                                                    |\n     aspell             |             []                                     |\n     bash               |                      []       []             [] [] |\n     batchelor          |                                                    |\n     bfd                |                            []                   [] |\n     binutils           |                            []                   [] |\n     bison              |                            [] []                [] |\n     bluez-pin          | []                      []                   []    |\n     clisp              |                                                    |\n     clisp              |                               []    []          [] |\n     console-tools      |                         []    []                   |\n     coreutils          |                      []    [] []                [] |\n     cpio               |                            [] []                [] |\n     darkstat           |                []          ()                   [] |\n     diffutils          |                      [] [] [] [] []          [] [] |\n     e2fsprogs          |                         []    []                [] |\n     enscript           |                      []    [] []        []         |\n     error              |                      []    [] []        []      [] |\n     fetchmail          |                      [] () [] [] []             [] |\n     fileutils          |                            [] []                [] |\n     findutils          |             []       []    [] [] []          [] [] |\n     flex               |                      []    [] []                [] |\n     fslint             |                                                    |\n     gas                |                                                 [] |\n     gawk               |                      []    [] []                [] |\n     gbiff              |                               []                   |\n     gcal               |                      []                            |\n     gcc                |                            []                   [] |\n     gettext            |             []       []    [] []                [] |\n     gettext-examples   | []                   []       []                [] |\n     gettext-runtime    |             []       []    [] []                [] |\n     gettext-tools      |                      []       []                [] |\n     gimp-print         |                         [] [] []        []      [] |\n     gliv               |                                                    |\n     glunarclock        |                            [] []                   |\n     gnubiff            |                               []                   |\n     gnucash            |                         []    ()        []      [] |\n     gnucash-glossary   |                            [] ()                [] |\n     gnupg              |                      [] ()    [] []          [] [] |\n     gpe-aerial         |                         []                         |\n     gpe-beam           |                         []    []                   |\n     gpe-calendar       |                         []    []                   |\n     gpe-clock          |                         []    []                   |\n     gpe-conf           |                         []    []                   |\n     gpe-contacts       |                         []    []                   |\n     gpe-edit           |                         []                         |\n     gpe-go             |                         []                         |\n     gpe-login          |                         []    []                   |\n     gpe-ownerinfo      |                         []    []                   |\n     gpe-sketchbook     |                         []    []                   |\n     gpe-su             |                         []    []                   |\n     gpe-taskmanager    |                         []    []                   |\n     gpe-timesheet      |                         []                         |\n     gpe-today          |                         []    []                   |\n     gpe-todo           |                         []    []                   |\n     gphoto2            |                         [] [] []                [] |\n     gprof              |                            [] []                [] |\n     gpsdrive           |                               ()    ()          () |\n     gramadoir          |                               []                   |\n     grep               |             [] []    []       [] []             [] |\n     gretl              |                                                 [] |\n     gtick              | []                            ()                   |\n     hello              |                      []    [] [] []          [] [] |\n     id-utils           |                            [] []                   |\n     indent             |                      []       []             [] [] |\n     iso_3166           |          []    [] [] [] [] [] [] []          [] [] |\n     iso_3166_1         |                      [] [] [] [] []             [] |\n     iso_3166_2         |                                                    |\n     iso_3166_3         |                               []                   |\n     iso_4217           |                      []    [] []                [] |\n     iso_639            |                                                    |\n     jpilot             |                         [] []                   [] |\n     jtag               |                                                    |\n     jwhois             |                                                 [] |\n     kbd                |                         [] [] [] []             [] |\n     latrine            |                               ()                   |\n     ld                 |                            []                   [] |\n     libc               |                      [] [] [] [] []             [] |\n     libgpewidget       |                         []    []                   |\n     libiconv           |                      []    [] []             [] [] |\n     lifelines          |                            [] ()                   |\n     lilypond           |                               []                   |\n     lingoteach         |                                                    |\n     lingoteach_lessons |                               ()                () |\n     lynx               |                      [] [] [] []                   |\n     m4                 |                         [] [] [] []                |\n     mailutils          |                      []                         [] |\n     make               |                            [] []                [] |\n     man-db             |                      [] () [] []                () |\n     minicom            |                         []    []                [] |\n     mysecretdiary      |                            [] []                [] |\n     nano               |                      [] () [] []                [] |\n     nano_1_0           |                      [] () [] []                [] |\n     opcodes            |                                                 [] |\n     parted             |                      [] [] [] []                [] |\n     ptx                |                      []    [] []             [] [] |\n     python             |                                                    |\n     radius             |                                                 [] |\n     recode             |             []       []    [] [] []          [] [] |\n     rpm                |                         [] []                      |\n     screem             |                                                    |\n     scrollkeeper       |             []       [] [] [] []                [] |\n     sed                | []                   []    [] []             [] [] |\n     sh-utils           |                            [] []                [] |\n     shared-mime-info   |                                                    |\n     sharutils          |                      [] [] [] [] []             [] |\n     silky              |                               ()                   |\n     skencil            |                            [] ()                [] |\n     sketch             |                            [] ()                [] |\n     soundtracker       |                            [] []                [] |\n     sp                 |                               []                   |\n     tar                |                         [] [] []                [] |\n     texinfo            |                            [] []             []    |\n     textutils          |                      []    [] []                [] |\n     tin                |                               ()        ()         |\n     tp-robot           |                                                    |\n     tuxpaint           |                      [] [] [] [] []     []      [] |\n     unicode-han-tra... |                                                    |\n     unicode-transla... |                                                    |\n     util-linux         |                      [] [] [] []                [] |\n     vorbis-tools       |             []          [] []                   [] |\n     wastesedge         |                               ()                   |\n     wdiff              |                      []    [] []                [] |\n     wget               |                []    []    [] [] []             [] |\n     xchat              |                      []       [] []             [] |\n     xfree86_xkb_xml    |                         [] []                      |\n     xpad               |                                                 [] |\n                        +----------------------------------------------------+\n                          af am ar az be bg bs ca cs da de el en en_GB eo es\n                           4  0  0  1  9  4  1 40 41 60 78 17  1   5   13 68\n     \n                          et eu fa fi fr ga gl he hr hu id is it ja ko lg\n                        +-------------------------------------------------+\n     a2ps               | []       [] []                      ()    ()    |\n     aegis              |                                                 |\n     ant-phone          |             []                                  |\n     anubis             |             []                                  |\n     ap-utils           |             []                                  |\n     aspell             |             [] []                               |\n     bash               |             []             []                   |\n     batchelor          |             [] []                               |\n     bfd                |             []                                  |\n     binutils           |             []                         []       |\n     bison              | []          []                []    []          |\n     bluez-pin          |          [] [] []          [] []                |\n     clisp              |                                                 |\n     clisp              |             []                                  |\n     console-tools      |                                                 |\n     coreutils          | []       [] [] []                   [] []       |\n     cpio               |             []    []       []             []    |\n     darkstat           |             () []          [] []                |\n     diffutils          |          [] []    [] []    [] []       []       |\n     e2fsprogs          |                                                 |\n     enscript           |             []          []                      |\n     error              |          [] [] []          []                   |\n     fetchmail          |                                        []       |\n     fileutils          | []          [] []          []       [] []       |\n     findutils          | []       [] [] [] []    [] [] []    [] [] []    |\n     flex               |             [] []                         []    |\n     fslint             |             []                                  |\n     gas                |             []                                  |\n     gawk               |             []       []                []       |\n     gbiff              |             []                                  |\n     gcal               |             []                                  |\n     gcc                |             []                                  |\n     gettext            |             []                         [] []    |\n     gettext-examples   |             []                         []       |\n     gettext-runtime    |          [] []                []       [] []    |\n     gettext-tools      |             []                         [] []    |\n     gimp-print         |             []                         []       |\n     gliv               |             ()                                  |\n     glunarclock        |          []    [] []       []                   |\n     gnubiff            |             []                                  |\n     gnucash            |             ()                      []          |\n     gnucash-glossary   |                                     []          |\n     gnupg              | []       [] []    []          []    [] []       |\n     gpe-aerial         |             []                                  |\n     gpe-beam           |             []                                  |\n     gpe-calendar       |             []             [] []                |\n     gpe-clock          |             []                                  |\n     gpe-conf           |             []                                  |\n     gpe-contacts       |             []             []                   |\n     gpe-edit           |             []                []                |\n     gpe-go             |             []                                  |\n     gpe-login          |             []             []                   |\n     gpe-ownerinfo      |             []             [] []                |\n     gpe-sketchbook     |             []                                  |\n     gpe-su             |             []                                  |\n     gpe-taskmanager    |             []                                  |\n     gpe-timesheet      |             [] []             []                |\n     gpe-today          |             [] []                               |\n     gpe-todo           |             []                []                |\n     gphoto2            |             []             []          []       |\n     gprof              |             []                []                |\n     gpsdrive           |             ()                      () ()       |\n     gramadoir          |             [] []                               |\n     grep               | []       [] [] [] [] [] [] [] []    [] []       |\n     gretl              |             []                      []          |\n     gtick              |          [] [] []                               |\n     hello              | []    [] [] [] [] [] [] [] [] []    [] [] []    |\n     id-utils           |             []             [] []    []          |\n     indent             | []       [] [] [] []       [] []    [] []       |\n     iso_3166           |    []       [] []       [] [] []    []          |\n     iso_3166_1         |    []       [] []          [] []                |\n     iso_3166_2         |                                                 |\n     iso_3166_3         |                                                 |\n     iso_4217           | []          []    []       []       [] []       |\n     iso_639            |                                                 |\n     jpilot             |             []                         ()       |\n     jtag               |             []                                  |\n     jwhois             |             []             [] []    []          |\n     kbd                |             []                                  |\n     latrine            |             []                                  |\n     ld                 |             []                                  |\n     libc               |          [] []    []       []          [] []    |\n     libgpewidget       |             [] []          [] []                |\n     libiconv           | []       [] [] [] []    [] [] []    []          |\n     lifelines          |             ()                                  |\n     lilypond           |             []                                  |\n     lingoteach         |             []                []                |\n     lingoteach_lessons |                                                 |\n     lynx               | []                         []       [] []       |\n     m4                 |             []    []          []       []       |\n     mailutils          |                                                 |\n     make               |             []    [] [] []             [] []    |\n     man-db             |                                     () ()       |\n     minicom            |          [] []             []          []       |\n     mysecretdiary      |             []                []                |\n     nano               |             []    []          []    []          |\n     nano_1_0           |             []    []          []    []          |\n     opcodes            |             []                                  |\n     parted             |             []    []                   []       |\n     ptx                | []       [] [] [] []       [] []                |\n     python             |                                                 |\n     radius             |             []                                  |\n     recode             |             []    [] []    [] []    []          |\n     rpm                |             []                            []    |\n     screem             |                                                 |\n     scrollkeeper       |                            []                   |\n     sed                | []       [] [] [] []       [] []    [] []       |\n     sh-utils           | []       [] [] []          []       [] []       |\n     shared-mime-info   |          [] []             []                   |\n     sharutils          | []          []    []       []          []       |\n     silky              |          () []             ()       ()          |\n     skencil            |             []                                  |\n     sketch             |             []                                  |\n     soundtracker       |             []                      []          |\n     sp                 |             []                         ()       |\n     tar                | []       [] []    []    [] [] []    [] []       |\n     texinfo            |             []       [] []             []       |\n     textutils          |             [] [] []       []          [] []    |\n     tin                | []          ()                                  |\n     tp-robot           |             []                                  |\n     tuxpaint           |          [] []       []    [] [] [] [] [] []    |\n     unicode-han-tra... |                                                 |\n     unicode-transla... |             [] []                               |\n     util-linux         | []       [] []             []       () []       |\n     vorbis-tools       |             []                                  |\n     wastesedge         |             ()                                  |\n     wdiff              | []          [] [] []       [] []                |\n     wget               | []       [] []    []    [] []          []       |\n     xchat              | []       [] []                                  |\n     xfree86_xkb_xml    |             []             []                   |\n     xpad               |             [] []                               |\n                        +-------------------------------------------------+\n                          et eu fa fi fr ga gl he hr hu id is it ja ko lg\n                          22  2  1 26 106 28 24  8 10 41 33  1 26 33 12  0\n     \n                          lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru\n                        +-----------------------------------------------------+\n     a2ps               |             []       []    ()     ()     []   [] [] |\n     aegis              |                      ()                       () () |\n     ant-phone          |                      []                       []    |\n     anubis             |             []    [] []           []          [] [] |\n     ap-utils           |                      []           ()          []    |\n     aspell             |                      []                             |\n     bash               |                                          []   [] [] |\n     batchelor          |                                               []    |\n     bfd                |                                               []    |\n     binutils           |                                                  [] |\n     bison              |             []       []                  []   [] [] |\n     bluez-pin          |                      []           []          []    |\n     clisp              |                                                     |\n     clisp              |                      []                             |\n     console-tools      |                                                  [] |\n     coreutils          |                                   []             [] |\n     cpio               |                      []           []     []   [] [] |\n     darkstat           |             []       []                  []   []    |\n     diffutils          |             []       []           []     []   [] [] |\n     e2fsprogs          |                                   []                |\n     enscript           |                      []                  []   [] [] |\n     error              |                      []                  []   []    |\n     fetchmail          |                      []           []     ()      [] |\n     fileutils          |                                   []          [] [] |\n     findutils          |                      []           []     []   [] [] |\n     flex               |                                   []     []   [] [] |\n     fslint             |                      []                       []    |\n     gas                |                                                     |\n     gawk               |                                   []     []   []    |\n     gbiff              |                      []                       []    |\n     gcal               |                                                     |\n     gcc                |                                                     |\n     gettext            |                                   []          [] [] |\n     gettext-examples   |                      []           []          []    |\n     gettext-runtime    |                      []           []          [] [] |\n     gettext-tools      |                                   []          []    |\n     gimp-print         |                      []                             |\n     gliv               |                      []                  []   []    |\n     glunarclock        |             []       []                       [] [] |\n     gnubiff            |                      []                             |\n     gnucash            |                      []              []  ()      [] |\n     gnucash-glossary   |                      []              []             |\n     gnupg              |                                               []    |\n     gpe-aerial         |                      []              []       [] [] |\n     gpe-beam           |                      []              []       [] [] |\n     gpe-calendar       |                      []              []       [] [] |\n     gpe-clock          |                      []              []       [] [] |\n     gpe-conf           |                      []              []       [] [] |\n     gpe-contacts       |                      []              []       [] [] |\n     gpe-edit           |                      []              []       [] [] |\n     gpe-go             |                      []                       [] [] |\n     gpe-login          |                      []              []       [] [] |\n     gpe-ownerinfo      |                      []              []       [] [] |\n     gpe-sketchbook     |                      []              []       [] [] |\n     gpe-su             |                      []              []       [] [] |\n     gpe-taskmanager    |                      []              []       [] [] |\n     gpe-timesheet      |                      []              []       [] [] |\n     gpe-today          |                      []              []       [] [] |\n     gpe-todo           |                      []              []       [] [] |\n     gphoto2            |                                               []    |\n     gprof              |                                          []   []    |\n     gpsdrive           |                      ()    ()                 []    |\n     gramadoir          |                      ()                       []    |\n     grep               |                                   [] []  []   [] [] |\n     gretl              |                                                     |\n     gtick              |                      []                       [] [] |\n     hello              |    []       []    [] [] [] []     []     []   [] [] |\n     id-utils           |                      []                  []   [] [] |\n     indent             |                      []                  []   [] [] |\n     iso_3166           |          []                [] []                    |\n     iso_3166_1         |                      []    []                       |\n     iso_3166_2         |                                                     |\n     iso_3166_3         |                      []                             |\n     iso_4217           |          []          [] [] []     [] []  []      [] |\n     iso_639            |          []                                         |\n     jpilot             |                      ()    ()                       |\n     jtag               |                                                     |\n     jwhois             |                      []           []     []   [] () |\n     kbd                |                      []           []          []    |\n     latrine            |                                               []    |\n     ld                 |                                                     |\n     libc               |                   []       []     []     []         |\n     libgpewidget       |                      []              []       []    |\n     libiconv           |                      []           []     []   [] [] |\n     lifelines          |                                                     |\n     lilypond           |                                                     |\n     lingoteach         |                                                     |\n     lingoteach_lessons |                                                     |\n     lynx               |                      []                  []      [] |\n     m4                 |                      []           []     []   [] [] |\n     mailutils          |                                   []          [] [] |\n     make               |                      []           []     []      [] |\n     man-db             |                                               []    |\n     minicom            |                                   []     []   [] [] |\n     mysecretdiary      |                      []                  []   []    |\n     nano               |             []       []           []          [] [] |\n     nano_1_0           |             []    []    []        []          [] [] |\n     opcodes            |                      []                       []    |\n     parted             |                         []        [] []  []         |\n     ptx                |                   [] []    []     [] []  []   [] [] |\n     python             |                                                     |\n     radius             |                                   []             [] |\n     recode             |                                   []     []   [] [] |\n     rpm                |                                   [] []          [] |\n     screem             |                                                     |\n     scrollkeeper       |                   [] []           []          [] [] |\n     sed                |                                   []     []   []    |\n     sh-utils           |                   []                             [] |\n     shared-mime-info   |                      [] []                          |\n     sharutils          |                      []                          [] |\n     silky              |                                                  () |\n     skencil            |                                      []  []         |\n     sketch             |                                      []  []         |\n     soundtracker       |                                                     |\n     sp                 |                                                     |\n     tar                |             []    []       []     []     []   []    |\n     texinfo            |                   []              []          [] [] |\n     textutils          |                   []                             [] |\n     tin                |                                                     |\n     tp-robot           |                      []                             |\n     tuxpaint           | []          []       [] []        [] []  []   []    |\n     unicode-han-tra... |                                                     |\n     unicode-transla... |                                                     |\n     util-linux         |                      []                  []      [] |\n     vorbis-tools       |                      []                       [] [] |\n     wastesedge         |                                                     |\n     wdiff              |             []                    []     []   [] [] |\n     wget               |                                   []          [] [] |\n     xchat              |    []                []                          [] |\n     xfree86_xkb_xml    |                      []                          [] |\n     xpad               |                      []                       []    |\n                        +-----------------------------------------------------+\n                          lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru\n                           1  2  0  3 12  0 10 69  6  7  1  40 26  36   76 63\n     \n                          sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu\n                        +-----------------------------------------------------+\n     a2ps               |    []    []       [] []                             | 16\n     aegis              |                                                     |  0\n     ant-phone          |                                                     |  3\n     anubis             |                   [] []                             |  9\n     ap-utils           |                      ()                             |  3\n     aspell             |                                                     |  4\n     bash               |                                                     |  9\n     batchelor          |                                                     |  3\n     bfd                |          []       []                                |  6\n     binutils           |          []       []                  []            |  8\n     bison              |          []       []                                | 14\n     bluez-pin          | []       []                    []                   | 14\n     clisp              |                                                     |  0\n     clisp              |                                                     |  5\n     console-tools      |                                                     |  3\n     coreutils          |    []    []       []                        []      | 16\n     cpio               |          []                           []            | 14\n     darkstat           | []    [] []                           ()    ()      | 12\n     diffutils          |          []       []                        []      | 23\n     e2fsprogs          |          []       []                                |  6\n     enscript           |          []       []                                | 12\n     error              | []                []                        []      | 15\n     fetchmail          | []                []                                | 11\n     fileutils          |    []    []       []                  []    []      | 17\n     findutils          | [] [] [] []       []                  []            | 29\n     flex               |          []       []                                | 13\n     fslint             |                                                     |  3\n     gas                |                   []                                |  3\n     gawk               |          []       []                                | 12\n     gbiff              |                                                     |  4\n     gcal               |          []       []                                |  4\n     gcc                |                   []                                |  4\n     gettext            | [] []    []       []                        []      | 16\n     gettext-examples   | []    [] []       []                  []            | 14\n     gettext-runtime    | [] [] [] []       [] []               []    []      | 22\n     gettext-tools      | [] [] [] []       []                  []            | 14\n     gimp-print         | []       []                                         | 10\n     gliv               |                                                     |  3\n     glunarclock        |       [] []                    []                   | 13\n     gnubiff            |                                                     |  3\n     gnucash            | []                                          []      |  9\n     gnucash-glossary   | []       []                                 []      |  8\n     gnupg              | []       []       []                        []      | 17\n     gpe-aerial         |          []                                         |  7\n     gpe-beam           |          []                                         |  8\n     gpe-calendar       | []       []                    []           []      | 13\n     gpe-clock          | []    [] []                                         | 10\n     gpe-conf           | []       []                                         |  9\n     gpe-contacts       | []       []                                 []      | 11\n     gpe-edit           | []    [] []                    []           []      | 12\n     gpe-go             |                                                     |  5\n     gpe-login          | []    [] []                    []           []      | 13\n     gpe-ownerinfo      | []    [] []                                 []      | 13\n     gpe-sketchbook     | []       []                                         |  9\n     gpe-su             | []    [] []                                         | 10\n     gpe-taskmanager    | []    [] []                                         | 10\n     gpe-timesheet      | []    [] []                                 []      | 12\n     gpe-today          | []    [] []                    []           []      | 13\n     gpe-todo           | []       []                    []           []      | 12\n     gphoto2            | []       []                           []            | 11\n     gprof              |          []       []                                |  9\n     gpsdrive           | []       []                                         |  3\n     gramadoir          | []                                                  |  5\n     grep               |    [] []          [] []                             | 26\n     gretl              |                                                     |  3\n     gtick              |                                                     |  7\n     hello              | []    [] []       [] []                             | 34\n     id-utils           |          []       []                                | 12\n     indent             | []    [] []       []                                | 21\n     iso_3166           | [] [] [] []       []    []     []                   | 27\n     iso_3166_1         | [] []             []                                | 16\n     iso_3166_2         |                                                     |  0\n     iso_3166_3         |                                                     |  2\n     iso_4217           | [] []    []       [] []               []            | 24\n     iso_639            |                                                     |  1\n     jpilot             |          []       []        []        []    []      |  9\n     jtag               | []                                                  |  2\n     jwhois             |          ()       []                        []      | 11\n     kbd                |          []       []                                | 11\n     latrine            |                                                     |  2\n     ld                 |          []       []                                |  5\n     libc               | []       []       []                  []            | 20\n     libgpewidget       | []    [] []                    []                   | 13\n     libiconv           | [] [] [] []       [] []        []     []            | 27\n     lifelines          |          []                                         |  2\n     lilypond           |          []                                         |  3\n     lingoteach         |                                                     |  2\n     lingoteach_lessons |                                       ()            |  0\n     lynx               |          []       [] []                             | 14\n     m4                 |          []                           []            | 15\n     mailutils          |                                                     |  5\n     make               |          []       []                  []            | 16\n     man-db             |          []                                         |  5\n     minicom            |                                                     | 11\n     mysecretdiary      |          []       []                                | 10\n     nano               |       [] []       [] []                             | 17\n     nano_1_0           |          []       [] []                             | 17\n     opcodes            |          []       []                                |  6\n     parted             |          []       []                  []            | 15\n     ptx                |          []       []                                | 22\n     python             |                                                     |  0\n     radius             |                                                     |  4\n     recode             |    []    []       []                                | 20\n     rpm                |          []       []                                |  9\n     screem             |          []                           []            |  2\n     scrollkeeper       | []    [] []                                         | 15\n     sed                | [] [] [] []       [] []                             | 24\n     sh-utils           |    []             []                                | 14\n     shared-mime-info   |       [] []                                         |  7\n     sharutils          |       [] []       []                        []      | 17\n     silky              | ()                                                  |  3\n     skencil            |          []                                         |  6\n     sketch             |          []                                         |  6\n     soundtracker       | []       []                                         |  7\n     sp                 |                   []                                |  3\n     tar                | [] []    []       []                  []            | 24\n     texinfo            |          []       []                  []            | 14\n     textutils          |    []    []       []                        []      | 16\n     tin                |                                                     |  1\n     tp-robot           |                                                     |  2\n     tuxpaint           | []       []       []           []     []            | 29\n     unicode-han-tra... |                                                     |  0\n     unicode-transla... |                                                     |  2\n     util-linux         |          []       []                                | 15\n     vorbis-tools       |                                                     |  8\n     wastesedge         |                                                     |  0\n     wdiff              | []       []       []                                | 18\n     wget               | [] [] [] []       [] []               []    []      | 24\n     xchat              | [] [] [] []                           []            | 15\n     xfree86_xkb_xml    | []    []          [] []               []            | 11\n     xpad               |                                                     |  5\n                        +-----------------------------------------------------+\n       63 teams           sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu\n      131 domains         47 19 28 83  0  0 59 13  1   1 11  0  22    22    0  1373\n\n   Some counters in the preceding matrix are higher than the number of\nvisible blocks let us expect.  This is because a few extra PO files are\nused for implementing regional variants of languages, or language\ndialects.\n\n   For a PO file in the matrix above to be effective, the package to\nwhich it applies should also have been internationalized and\ndistributed as such by its maintainer.  There might be an observable\nlag between the mere existence a PO file and its wide availability in a\ndistribution.\n\n   If January 2004 seems to be old, you may fetch a more recent copy of\nthis `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date\nmatrix with full percentage details can be found at\n`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.\n\nUsing `gettext' in new packages\n===============================\n\nIf you are writing a freely available program and want to\ninternationalize it you are welcome to use GNU `gettext' in your\npackage.  Of course you have to respect the GNU Library General Public\nLicense which covers the use of the GNU `gettext' library.  This means\nin particular that even non-free programs can use `libintl' as a shared\nlibrary, whereas only free software can use `libintl' as a static\nlibrary or use modified versions of `libintl'.\n\n   Once the sources are changed appropriately and the setup can handle\nthe use of `gettext' the only thing missing are the translations.  The\nFree Translation Project is also available for packages which are not\ndeveloped inside the GNU project.  Therefore the information given above\napplies also for every other Free Software Project.  Contact\n`translation@iro.umontreal.ca' to make the `.pot' files available to\nthe translation teams.\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/AUTHORS",
    "content": "-----------------------------------\n\nGNU make development up to version 3.75 by:\n    Roland McGrath <roland@gnu.org>\n\n\nDevelopment starting with GNU make 3.76 by:\n    Paul D. Smith <psmith@gnu.org>\n\n    Additional development starting with GNU make 3.81 by:\n        Boris Kolpackov <boris@kolpackov.net>\n\n\nGNU Make User's Manual\n  Written by:\n    Richard M. Stallman <rms@gnu.org>\n\n  Edited by:\n    Roland McGrath <roland@gnu.org>\n    Bob Chassell <bob@gnu.org>\n    Melissa Weisshaus <melissa@gnu.org>\n    Paul D. Smith <psmith@gnu.org>\n\n-----------------------------------\nGNU make porting efforts:\n\n  Port to VMS by:\n      Klaus Kaempf <kkaempf@progis.de>\n      Hartmut Becker <Hartmut.Becker@hp.com>\n      Archive support/Bug fixes by:\n        John W. Eaton <jwe@bevo.che.wisc.edu>\n        Martin Zinser <zinser@decus.decus.de>\n\n  Port to Amiga by:\n      Aaron Digulla <digulla@fh-konstanz.de>\n\n  Port to MS-DOS (DJGPP), OS/2, and MS-Windows (native/MinGW) by:\n      DJ Delorie <dj@delorie.com>\n      Rob Tulloh <rob_tulloh@tivoli.com>\n      Eli Zaretskii <eliz@is.elta.co.il>\n      Jonathan Grant <jg@jguk.org>\n      Andreas Beuning <andreas.buening@nexgo.de>\n      Earnie Boyd <earnie@uses.sf.net>\n\n-----------------------------------\nOther contributors:\n\n  Janet Carson <janet_carson@tivoli.com>\n  Howard Chu <hyc@highlandsun.com>\n  Paul Eggert <eggert@twinsun.com>\n  Klaus Heinz <kamar@ease.rhein-main.de>\n  Michael Joosten\n  Jim Kelton <jim_kelton@tivoli.com>\n  David Lubbren <uhay@rz.uni-karlsruhe.de>\n  Tim Magill <tim.magill@telops.gte.com>\n  Markus Mauhart <qwe123@chello.at>\n  Greg McGary <greg@mcgary.org>\n  Thomas Riedl <thomas.riedl@siemens.com>\n  Han-Wen Nienhuys <hanwen@cs.uu.nl>\n  Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>\n  Carl Staelin (Princeton University)\n  Ian Stewartson (Data Logic Limited)\n\nWith suggestions/comments/bug reports from a cast of ... well ...\nhundreds, anyway :)\n\n-------------------------------------------------------------------------------\nCopyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\nFree Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n                          59 Temple Place - Suite 330, Boston, MA\n                          02111-1307, USA.\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\tAppendix: How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) 19yy  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) 19yy name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/ChangeLog",
    "content": "2006-04-01  Paul D. Smith  <psmith@gnu.org>\n\n\tVersion 3.81 released.\n\n\t* NEWS: Updated for 3.81.\n\n\t* README.cvs: Mention that vpath builds are not supported out of\n\tCVS.  Fixes Savannah bug #16236.\n\tRemove update of make.texi from the list of things to do; we use\n\tversion.texi now.\n\n2006-03-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* doc/make.texi: Clean up licensing.  Use @copying and version.texi\n\tsupport from automake, as described in the Texinfo manual.\n\n2006-03-25  Eli Zaretskii  <eliz@gnu.org>\n\n\t* implicit.c (pattern_search) [HAVE_DOS_PATHS]: Don't compare b\n\twith lastslash, since the latter points to filename, not to\n\ttarget.\n\t* job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]:\n\tDeclare and define sh_chars_sh[].\n\n2006-03-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: Look for build.sh.in in $srcdir so it will be\n\tbuilt for remote configurations as well.\n\n\t* Makefile.am: Make sure to clean up build.sh during distclean.\n\tFixes Savannah bug #16166.\n\n\t* misc.c (log_access): Takes a const char *.\n\t* function.c (fold_newlines): Takes an unsigned int *.\n\tBoth fixes for Savannah bug #16170.\n\n2006-03-22  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* implicit.c (pattern_search): Call set_file_variables only\n\tif we have prerequisites that need second expansion. Fixes\n\tSavannah bug #16140.\n\n2006-03-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (update_file): Add alloca(0) to clean up alloca'd\n\tmemory on hosts that don't support it directly.\n\n\t* README.cvs: Add information on steps for making a release (to\n\tmake sure I don't forget any).\n\n\t* main.c (clean_jobserver): Move jobserver cleanup code into a new\n\tfunction.\n\t(die): Cleanup code was removed from here; call the new function.\n\t(main): If we are re-execing, clean up the jobserver first so we\n\tdon't leak file descriptors.\n\tFix bug reported by Craig Fithian <craig.fithian@citigroup.com>.\n\n2006-03-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* maintMakefile (do-po-update): Rewrite this rule to clean up and\n\tallow multiple concurrent runs.\n\tPatch from Joseph Myers <joseph@codesourcery.com>\n\n2006-03-17  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* dep.h (struct dep): Add the stem field.\n\t* misc.c (alloc_dep, free_dep): New functions.\n\t(copy_dep_chain): Copy stem.\n\t(free_dep_chain): Use free_dep.\n\t* read.c (record_files): Store stem in the dependency line.\n\t* file.c (expand_deps): Use stem stored in the dependency line. Use\n\tfree_dep_chain instead of free_ns_chain.\n\t* implicit.c (pattern_search): Use alloc_dep and free_dep.\n\t* read.c (read_all_makefiles, eval_makefile, eval): Ditto.\n\t* main.c (main, handle_non_switch_argument): Ditto.\n\t* remake.c (check_dep): Ditto.\n\t* rule.c (convert_suffix_rule, freerule): Ditto.\n\n2006-03-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* expand.c (variable_append): Instead of appending everything then\n\texpanding the result, we expand (or not, if it's simple) each part\n\tas we add it.\n\t(allocated_variable_append): Don't expand the final result.\n\tFixes Savannah bug #15913.\n\n2006-03-09  Paul Smith  <psmith@gnu.org>\n\n\t* remake.c (update_file_1): Revert the change of 3 Jan 2006 which\n\tlisted non-existent files as changed.  Turns out there's a bug in\n\tthe Linux kernel builds which means that this change causes\n\teverything to rebuild every time.  We will re-introduce this fix\n\tin the next release, to give them time to fix their build system.\n\tFixes Savannah bug #16002.\n\tIntroduces Savannah bug #16051.\n\n\t* implicit.c (pattern_search) [DOS_PATHS]: Look for DOS paths if\n\twe *don't* find UNIX \"/\".\n\tReported by David Ergo <david.ergo@alterface.com>\n\n2006-03-04  Eli Zaretskii  <eliz@gnu.org>\n\n\t* variable.c (do_variable_definition) [WINDOWS32]: Call the shell\n\tlocator function find_and_set_default_shell if SHELL came from the\n\tcommand line.\n\n2006-02-20  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (merge_variable_set_lists): It's legal for *setlist0\n\tto be null; don't core in that case.\n\n2006-02-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* commands.c (set_file_variables): Realloc, not malloc, the static\n\tstring values to avoid memory leaks.\n\n\t* expand.c (recursively_expand_for_file): Only set reading_file to\n\tan initialized value.\n\n\t* implicit.c (pattern_search): We need to make a copy of the stem\n\tif we get it from an intermediate dep, since those get freed.\n\n\t* file.c (lookup_file) [VMS]: Don't lowercase special targets that\n\tbegin with \".\".\n\t(enter_file) [VMS]: Ditto.\n\tPatch provided by Hartmut Becker <Hartmut.Becker@hp.com>.\n\n2006-02-24  Eli Zaretskii  <eliz@gnu.org>\n\n\t* job.c (construct_command_argv_internal): Fix last change.\n\n\t* w32/subproc/sub_proc.c (process_pipe_io): Make dwStdin,\n        dwStdout, and dwStderr unsigned int: avoids compiler warnings in\n        the calls to _beginthreadex.\n\n\t* expand.c (recursively_expand_for_file): Initialize `save' to\n        prevent compiler warnings.\n\n2006-02-18  Eli Zaretskii  <eliz@gnu.org>\n\n        * job.c (construct_command_argv_internal): Don't create a temporary\n\tscript/batch file if we are under -n.  Call _setmode to switch the\n\tscript file stream to text mode.\n\n2006-02-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (merge_variable_set_lists): Don't try to merge the\n\tglobal_setlist.  Not only is this useless, but it can lead to\n\tcircularities in the linked list, if global_setlist->next in one\n\tlist gets set to point to another list which also ends in\n\tglobal_setlist.\n\tFixes Savannah bug #15757.\n\n2006-02-15  Paul D. Smith  <psmith@gnu.org>\n\n\tFix for Savannah bug #106.\n\n\t* expand.c (expanding_var): Keep track of which variable we're\n\texpanding.  If no variable is being expanded, it's the same as\n\treading_file.\n\t* make.h (expanding_var): Declare it.\n\t* expand.c (recursively_expand_for_file): Set expanding_var to the\n\tcurrent variable we're expanding, unless there's no file info in\n\tit (could happen if it comes from the command line or a default\n\tvariable).  Restore it before we exit.\n\t* expand.c (variable_expand_string): Use the expanding_var file\n\tinfo instead of the reading_file info.\n\t* function.c (check_numeric): Ditto.\n\t(func_word): Ditto.\n\t(func_wordlist): Ditto.\n\t(func_error): Ditto.\n\t(expand_builtin_function): Ditto.\n\t(handle_function): Ditto.\n\n2006-02-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval): Even if the included filenames expands to the\n\tempty string we still need to free the allocated buffer.\n\n\t* implicit.c (pattern_search): If we allocated a variable set for\n\tan impossible file, free it.\n\t* variable.c (free_variable_set): New function.\n\t* variable.h: Declare it.\n\n\t* read.c (read_all_makefiles): Makefile names are kept in the\n\tstrcache, so there's never any need to alloc/free them.\n\t(eval): Ditto.\n\n\t* main.c (main): Add \"archives\" to the .FEATURES variable if\n\tarchive support is enabled.\n\t* doc/make.texi (Special Variables): Document it.\n\n2006-02-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* implicit.c (pattern_search): Add checking for DOS pathnames to\n\tthe pattern rule target LASTSLASH manipulation.\n\tFixes Savannah bug #11183.\n\n2006-02-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* (ALL FILES): Updated copyright and license notices.\n\n2006-02-10  Paul D. Smith  <psmith@gnu.org>\n\n\tA new internal capability: the string cache is a read-only cache\n\tof strings, with a hash table interface for fast lookup.  Nothing\n\tin the cache will ever be freed, so there's no need for reference\n\tcounting, etc.  This is the beginning of a full solution for\n\tSavannah bug #15182, but for now we only store makefile names here.\n\n\t* strcache.c: New file.  Implement a read-only string cache.\n\t* make.h: Add prototypes for new functions.\n\t* main.c (initialize_global_hash_tables): Initialize the string cache.\n\t(print_data_base): Print string cache stats.\n\t* read.c (eval_makefile): Use the string cache to store makefile\n\tnames.  Rewrite the string allocation to be sure we free everything.\n\n2006-02-10  Eli Zaretskii  <eliz@gnu.org>\n\n\t* dir.c (dir_contents_file_exists_p): Don't opendir if the\n\tdirectory time stamp didn't change, except on FAT filesystems.\n\tSuggested by J. David Bryan <jdbryan@acm.org>.\n\n2006-02-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_or): Implement a short-circuiting OR function.\n\t(func_and): Implement a short-circuiting AND function.\n\t(function_table_init): Update the table with the new functions.\n\t* doc/make.texi (Conditional Functions): Changed the \"if\" section\n\tto one on general conditional functions.  Added documentation for\n\t$(and ...) and $(or ...) functions.\n\t* NEWS: Note new $(and ...) and $(or ...) functions.\n\n2006-02-08  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* job.h (struct child): Add the dontcare bitfield.\n\t* job.c (new_job): Cache dontcare flag.\n\t* job.c (reap_children): Use cached dontcare flag instead of the\n\tone in struct file. Fixes Savannah bug #15641.\n\n2006-02-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* vpath.c (selective_vpath_search): If the file we find has a\n\ttimestamp from -o or -W, use that instead of the real time.\n\t* remake.c (f_mtime): If the mtime is a special token from -o or\n\t-W, don't overwrite it with the real mtime.\n\tFixes Savannah bug #15341.\n\n\tUpdates from Markus Mauhart <qwe123@chello.at>:\n\n\t* w32/subproc/sub_proc.c (process_begin): Remove no-op tests.\n\t(process_signal, process_last_err, process_exit_code): Manage\n\tinvalid handle values.\n\t(process_{outbuf,errbuf,outcnt,errcnt,pipes}): Unused and don't\n\tmanage invalid handles; remove them.\n\t* job.c (start_job_command) [WINDOWS32]: Jump out on error.\n\t* config.h.W32.template [WINDOWS32]: Set flags for Windows builds.\n\t* README.cvs: Updates for building from CVS.\n\n2006-02-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* file.c (enter_file): Keep track of the last double_colon entry,\n\tto avoid walking the list every time we want to add a new one.\n\tFixes Savannah bug #15533.\n\t* filedef.h (struct file): Add a new LAST pointer.\n\n\t* dir.c (directory_contents_hash_cmp): Don't use subtraction to do\n\tthe comparison.  For 64-bits systems the result of the subtraction\n\tmight not fit into an int.  Use comparison instead.\n\tFixes Savannah bug #15534.\n\n\t* doc/make.texi: Update the chapter on writing commands to reflect\n\tthe changes made in 3.81 for backslash/newline and SHELL handling.\n\n2006-02-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* dir.c (dir_contents_file_exists_p) [WINDOWS32]: Make sure\n\tvariable st is not used when it's not initialized.\n\tPatch from Eli Zaretskii <eliz@gnu.org>.\n\n2006-01-31  Paul D. Smith  <psmith@gnu.org>\n\n\t* README.W32.template: Applied patch #4785 from\n\tMarkus Mauhart <qwe123@chello.at>.\n\t* README.cvs: Applied patch #4786 from\n\tMarkus Mauhart <qwe123@chello.at>.\n\t* make_msvc_net2003.vcproj [WINDOWS32]: New version from\n\tJ. Grant <jg@jguk.org>.\n\n\t* main.c: Update the copyright year in the version output.\n\t* prepare_w32.bat: Remove this file from the distribution.\n\n2006-01-21  Eli Zaretskii  <eliz@gnu.org>\n\n\t* remake.c (update_goal_chain): Set g->changed instead of\n\tincrementing it, as it is only 8-bit wide, and could overflow if\n\tmany commands got started in update_file.\n\n\t* w32/include/sub_proc.h: Add a prototype for process_used_slots.\n\n\t* w32/subproc/sub_proc.c: Change dimension of proc_array[] to\n\tMAXIMUM_WAIT_OBJECTS.\n\t(process_wait_for_any_private): Change dimension of handles[]\n\tarray to MAXIMUM_WAIT_OBJECTS.\n\t(process_used_slots): New function.\n\t(process_register): Don't register more processes than the\n\tavailable number of slots.\n\t(process_easy): Don't start new processes if all slots are used\tup.\n\n\t* job.c (load_too_high, start_waiting_jobs) [WINDOWS32]: If there\n\tare already more children than sub_proc.c can handle, behave as if\n\tthe load were too high.\n\t(start_job_command): Fix a typo in error message when process_easy\n\tfails.\n\n2006-01-14  Eli Zaretskii  <eliz@gnu.org>\n\n\t* main.c (main) [WINDOWS32]: Don't refuse to run with -jN, even if\n\tthe shell is not sh.exe.\n\n\t* job.c (create_batch_file): Renamed from create_batch_filename;\n\tall callers changed.  Don't close the temporary file; return its\n\tfile descriptor instead.  New arg FD allows to return the file\n\tdescriptor.\n\t(construct_command_argv_internal): Use _fdopen instead of fopen to\n\topen the batch file.\n\n2006-01-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* readme.vms: Updates for case-insensitive VMS file systems from\n\tHartmut Becker <Hartmut.Becker@hp.com>.\n\t* dir.c (vms_hash): Ditto.\n\t* vmsify.c (copyto): Ditto.\n\t* vmsfunctions.c (readdir): Ditto.\n\n\t* make.1: Add a section on the exit codes for make.\n\n\t* doc/make.texi: A number of minor updates to the documentation.\n\n2006-01-03  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (update_file_1): Mark a prerequisite changed if it\n\tdoesn't exist.\n\n\t* read.c (eval): Be sure to strip off trailing whitespace from the\n\tprerequisites list properly.  Also, initialize all fields in\n\tstruct dep when creating a new one.\n\n2005-12-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* config.h.W32.template [WINDOWS32]: Add in some pragmas to\n\tdisable warnings for MSC.\n\tPatch by Rob Tulloh <rtulloh@yahoo.com>.\n\n2005-12-17  Eli Zaretskii  <eliz@gnu.org>\n\n\t* doc/make.texi (Execution): Add a footnote about changes in\n\thandling of backslash-newline sequences.  Mention the differences\n\ton MS-DOS and MS-Windows.\n\n\t* NEWS: More details about building the MinGW port and a pointer\n\tto README.W32.  Fix the section name that describes the new\n\tbackward-incompatible processing of backslash-newline sequences.\n\tThe special processing of SHELL set to \"cmd\" is only relevant to\n\tMS-Windows, not MS-DOS.\n\n2005-12-17  Eli Zaretskii  <eliz@gnu.org>\n\n\t* main.c (handle_runtime_exceptions): Cast exrec->ExceptionAddress\n\tto DWORD, to avoid compiler warnings.\n\t* job.c (exec_command): Cast hWaitPID and hPID to DWORD, and\n\tuse %ld in format, to avoid compiler warnings.\n\n\t* doc/make.texi (Special Targets): Fix a typo.\n\t(Appending): Fix cross-reference to Setting.\n\t(Special Variables, Secondary Expansion, File Name Functions)\n\t(Flavor Function, Pattern Match, Quick Reference): Ensure two\n\tperiods after a sentence.\n\t(Execution): Add @: after \"e.g.\".\n\t(Environment): Fix punctuation.\n\t(Target-specific, Call Function, Quick Reference): Add @: after \"etc.\"\n\t(Shell Function, Target-specific): Add @: after \"vs.\"\n\n2005-12-14  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (record_target_var): Initialize variable's export field\n\twith v_default instead of leaving it \"initialized\" by whatever\n\tgarbage happened to be on the heap.\n\n2005-12-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* make.1: Fix some display errors and document all existing options.\n\tPatch provided by Mike Frysinger <vapier@gentoo.org>.\n\n2005-12-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* implicit.c (pattern_search): If 2nd expansion is not set for\n\tthis implicit rule, replace the pattern with the stem directly,\n\tand don't re-expand the variable list.  Along with the other\n\t.SECONDEXPANSION changes below, fixes bug #13781.\n\n2005-12-09  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* implicit.c (pattern_search): Mark other files that this rule\n\tbuilds as targets so that they are not treated as intermediates\n\tby the pattern rule search algorithm. Fixes bug #13022.\n\n2005-12-07  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* remake.c (notice_finished_file): Propagate the change of\n\tmodification time to all the double-colon entries only if\n\tit is the last one to be updated. Fixes bug #14334.\n\n2005-11-17  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* function.c (func_flavor): Implement the flavor function which\n\treturns the flavor of a variable.\n\t* doc/make.texi (Functions for Transforming Text): Document it.\n\t* NEWS: Add it to the list of new functions.\n\n2005-11-14  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (construct_include_path): Set the .INCLUDE_DIRS special\n\tvariable.\n\t* doc/make.texi (Special Variables): Document .INCLUDE_DIRS.\n\t* NEWS: Add .INCLUDE_DIRS to the list of new special variables.\n\n2005-10-26  Paul Smith  <psmith@gnu.org>\n\n\t* read.c (record_files): Don't set deps flags if there are no deps.\n\t* maintMakefile: We only need to build the templates when we are\n\tcreating a distribution, so don't do it for \"all\".\n\n2005-10-24  Paul D. Smith  <psmith@gnu.org>\n\n\tMake secondary expansion optional: its enabled by declaring the\n\tspecial target .SECONDEXPANSION.\n\n\t* NEWS: Update information on second expansion capabilities.\n\t* doc/make.texi (Secondary Expansion): Document the\n\t.SECONDEXPANSION special target and its behavior.\n\t* dep.h (struct dep): Add a flag STATICPATTERN, set to true if the\n\tprerequisite list was found in a static pattern rule.\n\t(free_dep_chain): Declare a prototype.\n\t* file.c (parse_prereqs): New function: break out some complexity\n\tfrom expand_deps().\n\t(expand_deps): If we aren't doing second expansion, replace % with\n\tthe stem for static pattern rules.  Call the new function.\n\t* filedef.h (parse_prereqs): Declare a prototype.\n\t* implicit.c (pattern_search): Initialize the new staticpattern\n\tfield.\n\t* main.c (second_expansion): Declare a global variable to remember\n\tif the special target has been seen.  Initialize the new\n\tstaticpattern field for prerequisites.\n\t* make.h: Extern for second_expansion.\n\t* misc.c (free_dep_chain): New function: frees a struct dep list.\n\t* read.c (read_all_makefiles): Initialize the staticpattern field.\n\t(eval_makefile): Ditto.\n\t(record_files): Check for the .SECONDEXPANSION target and set\n\tsecond_expansion global if it's found.\n\tUse the new free_dep_chain() instead of doing it by hand.\n\tSet the staticpattern field for prereqs of static pattern targets.\n\n2005-10-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main): Set CURDIR to be a file variable instead of a\n\tdefault, so that values of CURDIR inherited from the environment\n\twon't override the make value.\n\n2005-09-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (construct_command_argv_internal): If the line is empty\n\tremember to free the temporary argv strings.\n\tFixes bug # 14527.\n\n2005-09-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (start_job_command): The noerror flag is a boolean (single\n\tbit); set it appropriately.\n\tReported by Mark Eichin <eichin@metacarta.com>\n\n2005-08-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_error): On Windows, output from $(info ...)\n\tseems to come in the wrong order.  Try to force it with fflush().\n\n2005-08-10  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (record_files): Move code that sets stem for static\n\tpattern rules out of the if (!two_colon) condition so it is\n\talso executed for two-colon rules. Fixes Savannah bug #13881.\n\n2005-08-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* make.h: Don't test that __STDC__ is non-0.  Some compilers\n\t(Windows for example) set it to 0 to denote \"ISO C + extensions\".\n\tFixes bug # 13594.\n\n2005-08-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* w32/pathstuff.c (getcwd_fs): Fix warning about assignment in a\n\tconditional (slightly different version of a fix from Eli).\n\n\tFix a bug reported by Michael Matz <matz@suse.de>: patch included.\n\tIf make is running in parallel without -k and two jobs die in a\n\trow, but not too close to each other, then make will quit without\n\twaiting for the rest of the jobs to die.\n\n\t* main.c (die): Don't reset err before calling reap_children() the\n\tsecond time: we still want it to be in the error condition.\n\t* job.c (reap_children): Use a static variable, rather than err,\n\tto control whether or not the error message should be printed.\n\n2005-08-06  Eli Zaretskii  <eliz@gnu.org>\n\n\t* w32/subproc/sub_proc.c: Include signal.h.\n\t(process_pipe_io, process_file_io): Pass a pointer to a local\n\tDWORD variable to GetExitCodeProcess.  If the exit code is\n\tCONTROL_C_EXIT, put SIGINT into pproc->signal.\n\n\t* job.c [WINDOWS32]: Include windows.h.\n\t(main_thread) [WINDOWS32]: New global variable.\n\t(reap_children) [WINDOWS32]: Get the handle for the main thread\n\tand store it in main_thread.\n\n\t* commands.c [WINDOWS32]: Include windows.h and w32err.h.\n\t(fatal_error_signal) [WINDOWS32]: Suspend the main thread before\n\tdoing anything else.  When we are done, close the main thread\n\thandle and exit with status 130.\n\n2005-07-30  Eli Zaretskii  <eliz@gnu.org>\n\n\t* w32/subproc/sub_proc.c (process_begin): Don't pass a NULL\n\tpointer to fprintf.\n\n\t* main.c (find_and_set_default_shell): If found a DOSish shell,\n\tset sh_found and the value of default_shell, and report the\n\tfindings in debug mode.\n\n\t* job.c (construct_command_argv_internal): Check unixy_shell, not\n\tno_default_sh_exe, to decide whether to use Unixy or DOSish\n\tbuiltin commands.\n\n\t* README.W32: Update with info about the MinGW build.\n\n\t* build_w32.bat: Support MinGW.\n\n\t* w32/subproc/build.bat: Likewise.\n\n\t* w32/subproc/sub_proc.c (process_easy): Fix format strings for\n\tprinting DWORD args.\n\n\t* function.c (windows32_openpipe): Fix format strings for printing\n\tDWORD args.\n\n\t* job.c (reap_children) [WINDOWS32]: Don't declare 'status' and\n\t'reap_mode'.\n\t(start_job_command): Fix format string for printing the result of\n\tprocess_easy.\n\t(start_job_command) [WINDOWS32]: Do not define.\n\t(exec_command): Fix format string for printing HANDLE args.\n\n\t* main.c (handle_runtime_exceptions): Fix sprintf format strings\n\tto avoid compiler warnings.\n\t(open_tmpfile): Declare fd only if HAVE_FDOPEN is defined.\n\t(Note: some of these fixes were submitted independently by J. Grant)\n\n2005-07-30  J. Grant <jg@jguk.org>\n\n\t* prepare_w32.bat: Copy config.h.w32 to config.h if not exist.\n\t* make_msvc_net2003.vcproj, make_msvc_net2003.sln: MSVC Project files.\n\t* Makefile.am (EXTRA_DIST): Add MSVC Project files.\n\n2005-07-15  Paul Smith  <psmith@gnu.org>\n\n\t* job.c (construct_command_argv_internal) [DOS,WINDOWS32,OS/2]: If\n\twe don't have a POSIX shell, then revert to the old\n\tbackslash-newline behavior (where they are stripped).\n\tFixes bug #13665.\n\n2005-07-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* config.h.W32.template: Reorder to match the standard config.h,\n\tfor easier comparisons.\n\tFrom J. Grant <jg@jguk.org>\n\n\t* maintMakefile: Remove .dep_segment before overwriting it, in\n\tcase it's not writable or noclobber is set.\n\t* expand.c (variable_expand_string): Cast result of pointer\n\tarithmetic to avoid a warning.\n\t* main.c (switches): Add full-fledged final initializer.\n\n2005-07-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: IRIX has _sys_siglist.  Tru64 UNIX has __sys_siglist.\n\t* signame.c (strsignal): If we found _sys_siglist[] or\n\t__sys_siglist[] use those instead of sys_siglist[].\n\tFrom Albert Chin <china@thewrittenword.com>\n\n2005-07-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* config.h-vms.template [VMS]: Latest VMS has its own glob() and\n\tglobfree(); set up to use the GNU versions.\n\tFrom Martin Zinser <zinser@zinser.no-ip.info>\n\n2005-07-03  Paul D. Smith  <psmith@gnu.org>\n\n\tFrom J. Grant <jg@jguk.org>:\n\n\t* README.W32.template: Update the Windows and tested MSVC versions.\n\t* NMakefile.template (CFLAGS_any): Change warning level from W3 to W4.\n\t* w32/subproc/NMakefile (CFLAGS_any): Ditto.\n\t* build_w32.bat: Ditto.\n\t* w32/subproc/build.bat: Ditto.\n\n2005-06-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* signame.c: HAVE_DECL_* macros are set to 0, not undef, if the\n\tdeclaration was checked but not present.\n\n2005-06-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* dir.c (find_directory): Change type of fs_serno/fs_flags/fs_len\n\tto unsigned long.  Fixes Savannah bug #13550.\n\n\t* w32/subproc/sub_proc.c: Remove (HANDLE) casts on lvalues.\n\t(process_pipe_io): Initialize tStdin/tStdout/tStderr variables.\n\tFixes Savannah bug #13551.\n\n2005-06-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* make.h: Fix bug in ANSI_STRING/strerror() handling; only define\n\tit if ANSI_STRING is not set.\n\n2005-06-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval): If no filenames are passed to any of the\n\t\"include\" variants, don't print an error.\n\t* doc/make.texi (Include): Document this.\n\tFixes Savannah bug #1761.\n\n\t* job.c (construct_command_argv_internal): Sanitize handling of\n\tbackslash/newline pairs according to POSIX: that is, keep the\n\tbackslash-newline in the command script, but remove a following\n\tTAB character, if present.  In the fast path, make sure that the\n\tbehavior matches what the shell would do both inside and outside\n\tof quotes.  In the slow path, quote the backslash and put a\n\tliteral newline in the string.\n\tFixes Savannah bug #1332.\n\t* doc/make.texi (Execution): Document the new behavior and give\n\tsome examples.\n\t* NEWS: Make a note of the new behavior.\n\n\t* make.h [WINDOWS32]: #include <direct.h>.\n\tFixes Savannah bug #13478.\n\n\t* remake.c (name_mtime): If the stat() of a file fails and the -L\n\toption was given and the file is a symlink, take the best mtime of\n\tthe symlink we can get as the mtime of the file and don't fail.\n\tFixes Savannah bug #13280.\n\n\t* read.c (find_char_unquote): Accept a new argument IGNOREVARS.\n\tIf it's set, then don't\tstop on STOPCHARs or BLANKs if they're\n\tinside a variable reference.  Make this function static as it's\n\tonly used here.\n\t(eval): Call find_char_unquote() with IGNOREVARS set when we're\n\tparsing an unexpanded line looking for semicolons.\n\tFixes Savannah bug #1454.\n\t* misc.c (remove_comments): Move this to read.c and make it static\n\tas it's only used there.  Call find_char_unquote() with new arg.\n\t* make.h: Remove prototypes for find_char_unquote() and\n\tremove_comments() since they're static now.\n\n\t* main.c (main): If we see MAKE_RESTARTS in the environment, unset\n\tits export flag and obtain its value.  When we need to re-exec,\n\tincrement the value and add it into the environment.\n\t* doc/make.texi (Special Variables): Document MAKE_RESTARTS.\n\t* NEWS: Mention MAKE_RESTARTS.\n\t* main.c (always_make_set): New variable.  Change the -B option to\n\tset this one instead.\n\t(main): When checking makefiles, only set always_make_flag if\n\talways_make_set is set AND the restarts flag is 0.  When building\n\tnormal targets, set it IFF always_make_set is set.\n\t(main): Avoid infinite recursion with -W, too: only set what-if\n\tfiles to NEW before we check makefiles if we've never restarted\n\tbefore.  If we have restarted, set what-if files to NEW _after_ we\n\tcheck makefiles.\n\tFixes Savannah bug #7566:\n\n2005-06-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* default.c: Change VMS implicit rules to use $$$$ instead of $$\n\tin the prerequisites list.\n\n2005-06-12  Paul D. Smith  <psmith@gnu.org>\n\n\tFix Savannah bug # 1328.\n\n\t* configure.in: Check for atexit().\n\t* misc.c (close_stdout): Test stdout to see if writes to it have\n\tfailed.  If so, be sure to exit with a non-0 error code.  Based on\n\tcode found in gnulib.\n\t* make.h: Prototype.\n\t* main.c (main): Install close_stdout() with atexit().\n\n2005-06-10  Paul D. Smith  <psmith@gnu.org>\n\n\tVMS build updates from Hartmut Becker <Hartmut.Becker@hp.com>:\n\n\t* vmsjobs.c [VMS]: Updates to compile on VMS: add some missing\n\theaders; make vmsWaitForChildren() static; extern vmsify().\n\t* job.c [VMS]: Move vmsWaitForChildren() prototype to be global.\n\tDon't create child_execute_job() here (it's in vmsjobs.c).\n\t* makefile.vms (job.obj) [VMS]: Add vmsjobs.c as a prerequisite.\n\n2005-06-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (push_new_variable_scope): File variables point\n\tdirectly to the global_setlist variable.  So, inserting a new\n\tscope in front of that has no effect on those variables: they\n\tdon't go through current_variable_set_list.  If we're pushing a\n\tscope and the current scope is global, push it \"the other way\" so\n\tthat the new setlist is in the global_setlist variable, and\n\tnext points to a new setlist with the global variable set.\n\t(pop_variable_scope): Properly undo a push with the new\n\tsemantics.\n\tFixes Savannah bug #11913.\n\n2005-05-31  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* job.c (reap_children): Don't die of the command failed but\n\tthe dontcare flag is set. Fixes Savannah bug #13216.\n\n\t* implicit.c (pattern_search): When creating a target from\n\tan implicit rule match, lookup pattern target and set precious\n\tflag in a newly created target. Fixes Savannah bug #13218.\n\n2005-05-13  Paul D. Smith  <psmith@gnu.org>\n\n\tImplement \"if... else if... endif\" syntax.\n\n\t* read.c (eval): Push all checks for conditional words (\"ifeq\",\n\t\"else\", etc.) down into the conditional_line() function.\n\t(conditional_line): Rework to allow \"else if...\" clause.  New\n\treturn value -2 for lines which are not conditionals.  The\n\tignoring flag can now also be 2, which means \"already parsed a\n\ttrue branch\".  If that value is seen no other branch of this\n\tconditional can be considered true.  In the else parsing if there\n\tis extra text after the else, invoke conditional_line()\n\trecursively to see if it's another conditional.  If not, it's an\n\terror.  If so, raise the conditional value to this level instead\n\tof creating a new conditional nesting level.  Special check for\n\t\"else\" and \"endif\", which aren't allowed on the \"else\" line.\n\t* doc/make.texi (Conditional Syntax): Document the new syntax.\n\n2005-05-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* Makefile.am (EXTRA_make_SOURCES): Add vmsjobs.c\n\t(MAYBE_W32): Rework how SUBDIRS are handled so that \"make dist\"\n\trecurses to the w32 directory, even on non-Windows systems.  Use\n\tthe method suggested in the automake manual.\n\t* configure.in: Add w32/Makefile to AC_CONFIG_FILES.\n\t* maintMakefile (gnulib-url): They moved the texinfo.tex files.\n\n2005-05-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (die): If we're dying with a fatal error (not that a\n\tcommand has failed), write back any leftover tokens before we go.\n\n\t* job.c (set_child_handler_action_flags): If there are jobs\n\twaiting for the load to go down, set an alarm to go off in 1\n\tsecond.  This allows us to wake up from a potentially long-lasting\n\tread() and start a new job if the load has gone down.  Turn it off\n\tafter the read.\n\t(job_noop): Dummy signal handler function.\n\t(new_job): Invoke it with the new semantics.\n\n\t* docs/make.texi: Document secondary expansion.  Various cleanups\n\tand random work.\n\n2005-05-03  Paul D. Smith  <psmith@gnu.org>\n\n\tRename .DEFAULT_TARGET to .DEFAULT_GOAL: in GNU make terminology\n\tthe targets which are to ultimately be made are called \"goals\";\n\tsee the GNU make manual.  Also, MAKECMDGOALS, etc.\n\n\t* filedef.h, read.c, main.c: Change .DEFAULT_TARGET to\n\t.DEFAULT_GOAL, and default_target_name to default_goal_name.\n\t* doc/make.texi (Special Variables): Document .DEFAULT_GOAL.\n\n2005-05-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c, vmsjobs.c (vmsWaitForChildren, vms_redirect,\n\tvms_handle_apos, vmsHandleChildTerm, reEnableAst, astHandler,\n\ttryToSetupYAst, child_execute_job) [VMS]: Move VMS-specific\n\tfunctions to vmsjobs.c.  #include it into jobs.c.\n\n\tGrant Taylor <gtaylor@picante.com> reports that -j# can lose\n\tjobserver tokens.  I found that this happens when an exported\n\trecursive variable contains a $(shell ...) function reference: in\n\tthis situation we could \"forget\" to write back a token.\n\n\t* job.c, job.h: Add variable jobserver_tokens: counts the tokens\n\twe have.  It's not reliable to depend on the number of children in\n\tour linked list so keep a separate count.\n\t(new_job): Check jobserver_tokens rather than children &&\n\twaiting_jobs.  Increment jobserver_tokens when we get one.\n\t(free_child): If jobserver_tokens is 0, internal error.  If it's\n\t>1, write a token back to the jobserver pipe (we don't write a\n\ttoken for the \"free\" job).  Decrement jobserver_tokens.\n\n\t* main.c: Add variable master_job_slots.\n\t(main): Set it to hold the number of jobs requested if we're the\n\tmaster process, when using the jobserver.\n\t(die): Sanity checks: first test jobserver_tokens to make sure\n\tthis process isn't holding any tokens we didn't write back.\n\tSecond, if master_job_slots is set count the tokens left in the\n\tjobserver pipe and ensure it's the same as master_job_slots (- 1).\n\n2005-04-24  Paul D. Smith  <psmith@gnu.org>\n\n\tGrant Taylor <gtaylor@picante.com> reports that -j# in conjunction\n\twith -l# can lose jobserver tokens, because waiting jobs are not\n\tconsulted properly when checking for the \"free\" token.\n\n\t* job.c (free_child): Count waiting_jobs as having tokens.\n\t* job.c (new_job): Ditto.  Plus, call start_waiting_jobs() here to\n\thandle jobs waiting for the load to drop.\n\n2005-04-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main): Be careful to not core if a variable setting in\n\tthe environment doesn't contain an '='.  This is illegal but can\n\thappen in broken setups.\n\tReported by Joerg Schilling <schilling@fokus.fraunhofer.de>.\n\n2005-04-12  Paul D. Smith  <psmith@gnu.org>\n\n\tThe second expansion feature causes significant slowdown.  Timing\n\ta complex makefile (GCC 4.1) shows a slowdown from .25s to just\n\tread the makefile before the feature, to 11+s to do the same\n\toperations after the feature.  Additionally, memory usage\n\tincreased drastically.  To fix this I added some intelligence that\n\tavoids the overhead of the second expansion unless it's required.\n\n\t* dep.h: Add a new boolean field, need_2nd_expansion.\n\n\t* read.c (eval): When creating the struct dep for the target,\n\tcheck if the name contains a \"$\"; if so set need_2nd_expansion to 1.\n\t(record_files): If there's a \"%\" in a static pattern rule, it gets\n\tconverted to \"$*\" so set need_2nd_expansion to 1.\n\n\t* file.c (expand_deps): Rework to be more efficient.  Only perform\n\tinitialize_file_variables(), set_file_variables(), and\n\tvariable_expand_for_file() if the need_2nd_expansion is set.\n\n\t* implicit.c (pattern_search): Default need_2nd_expansion to 0.\n\t(pattern_search): Ditto.\n\t* main.c (handle_non_switch_argument): Ditto.\n\t(main): Ditto.\n\t* read.c (read_all_makefiles): Ditto.\n\t(eval_makefile): Ditto.\n\n2005-04-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main) [WINDOWS32]: Export PATH to sub-shells, not Path.\n\t* variable.c (sync_Path_environment): Ditto.\n\tPatch by Alessandro Vesely.  Fixes Savannah bug #12209.\n\n\t* main.c (main): Define the .FEATURES variable.\n\t* NEWS: Announce .FEATURES.\n\t* doc/make.texi (Special Variables): Document .FEATURES.\n\n\t* remake.c (check_dep): If a file is .PHONY, update it even if\n\tit's marked intermediate.  Fixes Savannah bug #12331.\n\n2005-03-15  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* file.c (expand_deps): Factor out the second expansion and\n\tprerequisite line parsing logic from snap_deps().\n\n\t* file.c (snap_deps): Use expand_deps(). Expand and parse\n\tprerequisites of the .SUFFIXES special target first. Fixes\n\tSavannah bug #12320.\n\n2005-03-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main) [MSDOS]: Export SHELL in MSDOS.  Requested by Eli\n\tZaretskii.\n\n2005-03-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* signame.c (strsignal): HAVE_DECL_SYS_SIGLIST is 0 when not\n\tavailable, not undefined (from Earnie Boyd).\n\n2005-03-10  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* implicit.c (pattern_search): Mark an intermediate target as\n\tprecious if it happened to be a prerequisite of some (other)\n\ttarget. Fixes Savannah bug #12267.\n\n2005-03-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval_makefile): Add alloca(0).\n\t(eval_buffer): Ditto.\n\n2005-03-09  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* main.c (main): Use o_file instead of o_default when defining\n\tthe .DEFAULT_TARGET special variable.\n\t* read.c (eval): Use define_variable_global() instead of\n\tdefine_variable() when setting new value for the .DEFAULT_TARGET\n\tspecial variable.  Fixes Savannah bug #12266.\n\n2005-03-04  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* imlicit.c (pattern_search): Mark files for which an implicit\n\trule has been found as targets. Fixes Savannah bug #12202.\n\n2005-03-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* AUTHORS: Update.\n\t* doc/make.texi (Automatic Variables): Document $|.\n\n2005-03-03  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (record_files): Instead of substituting % with\n\tactual stem value in dependency list replace it with $*.\n\tThis fixes stem triple expansion bug.\n\n\t* implicit.c (pattern_search): Copy stem to a separate\n\tbuffer and make it a properly terminated string. Assign\n\tthis buffer instead of STEM (which is not terminated) to\n\tf->stem. Instead of substituting % with actual stem value\n\tin dependency list replace it with $*. This fixes stem\n\ttriple expansion bug.\n\n2005-03-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* commands.c (fatal_error_signal) [WINDOWS32]: Don't call kill()\n\ton Windows, as it takes a handle not a pid.  Just exit.\n\tFix from patch #3679, provided by Alessandro Vesely.\n\n\t* configure.in: Update check for sys_siglist[] from autoconf manual.\n\t* signame.c (strsignal): Update to use the new autoconf macro.\n\n2005-03-01  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (record_files): Add a check for the list of prerequisites\n\tof a static pattern rule being empty. Fixes Savannah bug #12180.\n\n2005-02-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* doc/make.texi (Text Functions): Update docs to allow the end\n\tordinal for $(wordlist ...) to be 0.\n\t* function.c (func_wordlist): Fail if the start ordinal for\n\t$(wordlist ...) is <1.  Matches documentation.\n\tResolves Savannah support request #103195.\n\n\t* remake.c (update_goal_chain): Fix logic for stopping in -q:\n\tpreviously we were stopping when !-q, exactly the opposite.  This\n\thas been wrong since version 1.34, in 1994!\n\t(update_file): If we got an error don't break out to run more\n\tdouble-colon rules: just return immediately.\n\tFixes Savannah bug #7144.\n\n2005-02-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* misc.c (end_of_token): Make argument const.\n\t* make.h: Update prototype.\n\n\t* function.c (abspath, func_realpath, func_abspath): Use\n\tPATH_VAR() and GET_PATH_MAX instead of PATH_MAX.\n\t* dir.c (downcase): Use PATH_VAR() instead of PATH_MAX.\n\t* read.c (record_files): Ditto.\n\t* variable.c (do_variable_definition): Ditto.\n\n\t* function.c (func_error): Create a new function $(info ...) that\n\tsimply prints the message to stdout with no extras.\n\t(function_table_init): Add new function to the table.\n\t* NEWS: Add $(info ...) reference.\n\t* doc/make.texi (Make Control Functions): Document it.\n\n\tNew feature: if the system supports symbolic links, and the user\n\tprovides the -L/--check-symlink-time flag, then use the latest\n\tmtime between the symlink(s) and the target file.\n\n\t* configure.in (MAKE_SYMLINKS): Check for lstat() and\n\treadlink().  If both are available, define MAKE_SYMLINKS.\n\t* main.c: New variable: check_symlink_flag.\n\t(usage): Add a line for -L/--check-symlink-times to the help string.\n\t(switches): Add -L/--check-symlink-times command line argument.\n\t(main): If MAKE_SYMLINKS is not defined but the user specified -L,\n\tprint a warning and disable it again.\n\t* make.h: Declare check_symlink_flag.\n\t* remake.c (name_mtime): If MAKE_SYMLINKS and check_symlink_flag,\n\tif the file is a symlink then check each link in the chain and\n\tchoose the NEWEST mtime we find as the mtime for the file.  The\n\tnewest mtime might be the file itself!\n\t* NEWS: Add information about this new feature.\n\t* doc/make.texi (Options Summary): Add -L/--check-symlink-times docs.\n\n\tAvoid core dumps described in Savannah bug # 12124:\n\n\t* file.c: New variable snapped_deps remember whether we've run\n\tsnap_deps().\n\t(snap_deps): Set it.\n\t* filedef.h: Extern it.\n\t* read.c (record_files): Check snapped_deps; if it's set then\n\twe're trying to eval a new target/prerequisite relationship from\n\twithin a command script, which we don't support.  Fatal.\n\n2005-02-28  Boris Kolpackov  <boris@kolpackov.net>\n\n\tImplementation of the .DEFAULT_TARGET special variable.\n\n\t* read.c (eval): If necessary, update default_target_name when\n\treading rules.\n\t* read.c (record_files): Update default_target_file if\n\tdefault_target_name has changed.\n\t* main.c (default_target_name): Define.\n\t* main.c (main): Enter .DEFAULT_TARGET as make variable. If\n\tdefault_target_name is set use default_target_file as a root\n\ttarget to make.\n\t* filedef.h (default_target_name): Declare.\n\t* dep.h (free_dep_chain):\n\t* misc.c (free_dep_chain): Change to operate on struct nameseq\n\tand change name to free_ns_chain.\n\t* file.c (snap_deps): Update to use free_ns_chain.\n\n2005-02-27  Boris Kolpackov  <boris@kolpackov.net>\n\n\tImplementation of the second expansion in explicit rules,\n\tstatic pattern rules and implicit rules.\n\n\t* read.c (eval): Refrain from chopping up rule's dependencies.\n\tStore them in a struct dep as a single dependency line. Remove\n\tthe code that implements SySV-style automatic variables.\n\n\t* read.c (record_files): Adjust the code that handles static\n\tpattern rules to expand all percents instead of only the first\n\tone. Reverse the order in which dependencies are stored so that\n\twhen the second expansion reverses them again they appear in\n\tthe makefile order (with some exceptions, see comments in\n\tthe code). Remove the code that implements SySV-style automatic\n\tvariables.\n\n\t* file.c (snap_deps): Implement the second expansion and chopping\n\tof dependency lines for explicit rules.\n\n\t* implicit.c (struct idep): Define an auxiliary data type to hold\n\timplicit rule's dependencies after stem substitution and\n\texpansion.\n\n\t* implicit.c (free_idep_chain): Implement.\n\n\t* implicit.c (get_next_word): Implement helper function for\n\tparsing implicit rule's dependency lines into words taking\n\tinto account variable expansion requests. Used in the stem\n\tsplitting code.\n\n\t* implicit.c (pattern_search): Implement the second expansion\n\tfor implicit rules. Also fixes bug #12091.\n\n\t* commands.h (set_file_variables): Declare.\n\t* commands.c (set_file_variables): Remove static specifier.\n\n\t* dep.h (free_dep_chain): Declare.\n\t* misc.c (free_dep_chain): Implement.\n\n\t* variable.h (variable_expand_for_file): Declare.\n\t* expand.c (variable_expand_for_file): Remove static specifier.\n\n\t* make.h (strip_whitespace): Declare.\n\t* function.c (strip_whitespace): Remove static specifier.\n\n2005-02-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main): Check for ferror() when reading makefiles from stdin.\n\tApparently some shells in Windows don't close pipes properly and\n\trequire this check.\n\n2005-02-24  Jonathan Grant  <jg@jguk.org>\n\n\t* configure.in: Add MinGW configuration options, and extra w32 code\n\tdirectory.\n\t* Makefile.am: Add MinGW configuration options, and extra w32 code\n\tdirectory.\n\t* main.c: Determine correct program string (after last \\ without .exe).\n\t* subproc/sub_proc.c: `GetExitCodeProcess' from incompatible pointer\n\ttype fix x2\n\t* w32/Makefile.am: Import to build win32 lib of sub_proc etc.\n\t* subproc/w32err.c: MSVC thread directive not applied to MinGW builds.\n\t* tests/run_make_tests.pl, tests/test_driver.pl: MSYS testing\n\tenvironment support.\n\n2004-04-16  Dmitry V. Levin  <ldv@altlinux.org>\n\n\t* function.c (func_shell): When initializing error_prefix, check\n\tthat reading file name is not null.  This fixes long-standing\n\tsegfault in cases like \"make 'a1=$(shell :)' 'a2:=$(a1)'\".\n\n2005-02-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* maintMakefile: Update the CVS download URL to simplify them.\n\tAlso, the ftp://ftp.gnu.org/GNUinfo site was removed so I'm\n\tdownloading the .texi files from Savannah now.\n\n\tFixed these issues reported by Markus Mauhart <qwe123@chello.at>:\n\n\t* main.c (handle_non_switch_argument): Only add variables to\n\tcommand_variables if they're not already there: duplicate settings\n\twaste space and can be confusing to read.\n\n\t* w32/include/sub_proc.h: Remove WINDOWS32.  It's not needed since\n\tthis header is never included by non-WINDOWS32 code, and it\n\trequires <config.h> to define which isn't always included first.\n\n\t* dir.c (read_dirstream) [MINGW]: Use proper macro names when\n\ttesting MINGW32 versions.\n\n\t* main.c (log_working_directory): flush stdout to be sure the WD\n\tchange is printed before any stderr messages show up.\n\n2005-02-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* maintMakefile (po_repo): Update the GNU translation site URL.\n\n2004-12-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main): Change char* env_shell to struct variable shell_var.\n\t* variable.c (target_environment): Use new shell_var.\n\n2004-11-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: The old way we avoided creating build.sh from\n\tbuild.sh.in before build.sh.in exists doesn't work anymore; we\n\thave to use raw M4 (thanks to Andreas Schwab <schwab@suse.de> for\n\tthe help!).  This also keeps automake from complaining.\n\t* Makefile.am (README): Add a dummy target so automake won't\n\tcomplain that this file doesn't exist when we checkout from CVS.\n\t* maintMakefile (.dep_segment): Rewrite this rule since newer\n\tversions of automake don't provide DEP_FILES.\n\n2004-11-30  Boris Kolpackov  <boris@kolpackov.net>\n\n\tImplementation of `realpath' and `abspath' built-in functions.\n\n\t* configure.in: Check for realpath.\n\t* function.c (abspath): Return an absolute file name that does\n\tnot contain any `.' or `..' components, nor repeated `/'.\n\t* function.c (func_abspath): For each name call abspath.\n\t* function.c (func_realpath): For each name call realpath\n\tfrom libc or delegate to abspath if realpath is not available.\n\t* doc/make.texi (Functions for File Names): Document new functions.\n\t* doc/make.texi (Quick Reference): Ditto.\n\n2004-11-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main) [WINDOWS32]: Remove any trailing slashes from -C\n\targuments.  Fixes bug #10252.\n\n\tFix for bug #1276: Handle SHELL according to POSIX requirements.\n\n\t* main.c (main): Set SHELL to v_noexport by default.  Remember the\n\toriginal environment setting of SHELL in the env_shell variable.\n\t* main.h: Export new env_shell variable.\n\t* variable.c (target_environment): If we find a v_noexport\n\tvariable for SHELL, add a SHELL variable with the env_shell value.\n\t* doc/make.texi (Quick Reference): Document the POSIX behavior.\n\t* doc/make.texi (Variables/Recursion): Ditto.\n\n2004-11-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (find_and_set_default_shell) [WINDOWS32]: check for\n\tequality of \"cmd\"/\"cmd.exe\", not inequality.  Fixes bug #11155.\n\tPatch by Alessandro Vesely.\n\n2004-11-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (child_execute_job) [VMS]: Don't treat \"#\" as a comment on\n\tthe command line if it's inside a string.\n\tPatch by: Hartmut Becker <Hartmut.Becker@hp.com>\n\n2004-10-21  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* function.c (func_lastword): New function: return last word\n\tfrom the list of words.\n\t* doc/make.texi: Document $(lastword ). Fix broken links in\n\tQuick Reference section.\n\n2004-10-06  Paul D. Smith  <psmith@gnu.org>\n\n\tApply patch from Alessandro Vesely, provided with bug # 9748.\n\tFix use of tmpnam() to work with Borland C.\n\n\t* job.c (construct_command_argv_internal) [WINDOWS32]: Remove\n\tconstruction of a temporary filename, and call new function\n\tcreate_batch_filename().\n\t(create_batch_filename) [WINDOWS32]: New function to create a\n\ttemporary filename.\n\n2004-10-05  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* read.c (record_target_var): Expand simple pattern-specific\n\tvariable.\n\t* variable.c (initialize_file_variables): Do not expand simple\n\tpattern-specific variable.\n\n2004-09-28  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* remake.c (update_file_1): When rebuilding makefiles inherit\n\tdontcare flag from a target that triggered update.\n\n2004-09-27  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* variable.c (initialize_file_variables): Mark pattern-specific\n\tvariable as a per-target and copy export status.\n\n2004-09-21  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* file.c (snap_deps): Mark .PHONY prerequisites as targets.\n\n\t* implicit.c (pattern_search): When considering an implicit rule's\n\tprerequisite check that it is actually a target rather then\n\tjust an entry in the file hashtable.\n\n2004-09-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (readstring): Fix some logic errors in backslash handling.\n\t(eval): Remove some unnecessary processing in buffer handling.\n\t(record_target_var): Assert that parse_variable_definition() succeeded.\n\tReported by: Markus Mauhart <qwe123@chello.at>.\n\n\t* misc.c: Removed the sindex() function.  All instances of this\n\tfunction were trivially replaceable by the standard strstr()\n\tfunction, and that function will always have better (or certainly\n\tno worse) performance than the very simple-minded algorithm\n\tsindex() used.  This can matter with complex makefiles.\n\t* make.h: Remove the prototype for sindex().\n\t* function.c (subst_expand): Convert sindex() call to strstr().\n\tThis means we no longer need to track the TLEN value so remove that.\n\t(func_findstring): Convert sindex() to strstr().\n\t* commands.c (chop_commands): Convert sindex() calls to strstr().\n\tSuggested by: Markus Mauhart <qwe123@chello.at>.\n\n\t* main.c (find_and_set_default_shell) [WINDOWS32]: Implement the\n\tidea behind Savannah Patch #3144 from david.baird@homemail.com.\n\tIf SHELL is set to CMD.EXE then assume it's batch-mode and\n\tnon-unixy.  I wrote the code differently from the patch, though,\n\tto make it safer.  This also resolves bug #9174.\n\n2004-09-20  Paul D. Smith  <psmith@gnu.org>\n\n\t* expand.c (variable_expand_string): Modify to invoke\n\tpatsubst_expand() instead of subst_expand(); the latter didn't\n\thandle suffix patterns correctly.\n\t* function.c (subst_expand): Remove the SUFFIX_ONLY parameter; it\n\twas used only from variable_expand_string() and is no longer used\n\tthere.\n\t(func_subst): Ditto, on call to subst_expand().\n\t(patsubst_expand): Require the percent pointers to point to the\n\tcharacter after the %, not to the % itself.\n\t* read.c (record_files): New call criteria for patsubst_expand().\n\t* variable.h: Remove SUFFIX_ONLY from subst_expand() prototype.\n\tThis is to fix a bug reported by Markus Mauhart <qwe123@chello.at>.\n\n2004-09-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (subst_expand): Fix a check in by_word: look for a\n\tprevious blank if we're beyond the beginning of the string, not\n\tthe beginning of the word.\n\tBugs reported by Markus Mauhart <qwe123@chello.at>.\n\n2004-05-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (update_goal_chain): Change the argument specifying\n\twhether we're rebuilding makefiles to be a global variable,\n\tREBUILDING_MAKEFILES.\n\t(complain): Extract the code that complains about no rules to make\n\ta target into a separate function.\n\t(update_file_1): If we tried to rebuild a file during the makefile\n\trebuild phase and it was dontcare, then no message was printed.\n\tIf we then try to build the same file during the normal build,\n\tprint a message this time.\n\t(remake_file): Don't complain about un-remake-able files when\n\twe're rebuilding makefiles.\n\n2004-05-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (construct_command_argv_internal): OS/2 patches from\n\tAndreas Buening <andreas.buening@nexgo.de>.\n\n2004-05-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (update_file): Don't walk the double-colon chain unless\n\tthis is a double-colon rule.  Fix suggested by Boris Kolpackov\n\t<boris@kolpackov.net>.\n\n\t* makefile.vms (CFLAGS): Remove glob/globfree (see readme.vms docs)\n\t* readme.vms: New section describing OpenVMS support and issues.\n\t* default.c (default_variables): Add support for IA64.\n\t* job.c (tryToSetupYAst) [VMS]: On VMS running make in batch mode\n\twithout some privilege aborts make with the error\n\t%SYSTEM-F-NOPRIV. It happens when setting up a handler for\n\tpressing Ctrl+Y and the input device is no terminal. The change\n\tcatches this error and just continues.\n\n\tPatches by Hartmut Becker <Hartmut.Becker@hp.com>\n\n2004-04-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* commands.c (set_file_variables): Set $< properly in the face of\n\torder-only prerequisites.\n\tPatch from Boris Kolpackov <boris@kolpackov.net>\n\n2004-04-21  Bob Byrnes  <byrnes@curl.com>\n\n\t* main.c (main): Notice failures to remake makefiles.\n\n2004-03-28  Paul D. Smith  <psmith@gnu.org>\n\n\tPatches for Acorn RISC OS by Peter Naulls <peter@chocky.org>\n\n\t* job.c: No default shell for RISC OS.\n\t(load_too_high): Hard-code the return to 1.\n\t(construct_command_argv_internal): No sh_chars or sh_cmds.\n\t* getloadavg.c: Don't set LOAD_AVE_TYPE on RISC OS.\n\n2004-03-20  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (do_variable_definition): Don't append from the\n\tglobal set if a previous non-appending target-specific variable\n\tdefinition exists.  Reported by Oliver Schmidt <oschmidt@gmx.net>\n\t(with fix).\n\n\t* expand.c (reference_variable): Don't give up on variables with\n\tno value that have the target-specific append flag set: they might\n\thave a value after all.  Reported by Oliver Schmidt\n\t<oschmidt@gmx.net> (with fix) and also by Maksim A. Nikulin\n\t<nikulin@dx1cmd.inp.nsk.su>.\n\n\t* rule.c (count_implicit_rule_limits): Don't delete patterns which\n\trefer to absolute pathnames in directories that don't exist: some\n\tportion of the makefile could create those directories before we\n\tmatch the pattern.  Fixes bugs #775 and #108.\n\n\tFixes from Jonathan R. Grant  <jg-make@jguk.org>:\n\n\t* main.c (main): Free makefile_mtimes if we have any.\n\t* README.W32.template: Update documentation for the current status\n\tof the MS-Windows port.\n\t* NMakefile.template (MAKE): Add \"MAKE = nmake\".  A conflicting\n\tenvironment variable is sometimes already defined which causes the\n\tbuild to fail.\n\t* main.c (debug_signal_handler): Only define this function if\n\tSIGUSR1 is available.\n\n\tFixes for OS/2 from Andreas Beuning <andreas.buening@nexgo.de>:\n\n\t* configure.in [OS/2]: Relocate setting of HAVE_SA_RESTART for OS/2.\n\t* README.OS2.template: Documentation updates.\n\t* build.template: Add LIBINTL into LOADLIBES.  Add $CFLAGS to the\n\tlink line for safety.\n\t* maintMakefile (build.sh.in): Remove an extraneous \")\".\n\t* job.c (child_execute_job): Close saved FDs.\n\t* job.c (exec_command) [OS/2]: exec_command(): If the command\n\tcan't be exec'ed and if the shell is not Unix-sh, then try again\n\twith argv = { \"cmd\", \"/c\", ... }. Normally, this code is never\n\treached for the cmd shell unless the command really doesn't exist.\n\t(construct_command_argv_internal) [OS/2]: The code for cmd\n\thandling now uses new_argv = { \"cmd\", \"/c\", \"original line\", NULL}.\n\tThe CMD builtin commands are case insensitive so use strcasecmp().\n\n2004-03-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (do_define): Re-order line counter increment so the count\n\tis accurate (we were losing one line per define).  Reported by\n\tDave Yost <Dave@Yost.com>.\n\n2004-03-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in (HAVE_ANSI_COMPILER): Define if we have an ANSI/ISO\n\tcompiler.\n\t* make.h: Convert uses of __STDC__ to HAVE_ANSI_COMPILER.\n\t* misc.c (message,error,fatal): Ditto.\n\t* configh.dos.template: Define HAVE_ANSI_COMPILER.\n\t* config.h.W32.template: Ditto.\n\t* config.h-vms.template: Ditto.\n\t* config.ami.template: Ditto.\n\n2004-03-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* README.template: Add a note about broken /bin/sh on SunOS\n\t4.1.3_U1 & 4.1.4.  Fix up Savannah links.\n\n\t* misc.c (message, error, fatal): Don't use \"...\" if we're using\n\tvarargs.  ansi2knr should handle this but it doesn't work: it\n\ttranslates \"...\" to va_dcl etc. but _AFTER_ the preprocessor is\n\tdone.  On many systems (SunOS for example) va_dcl is a #define.\n\tSo, force the use of the non-\"...\" version on pre-ANSI compilers.\n\n\t* maintMakefile (sign-dist): Create some rules to help automate\n\tthe new GNU ftp upload method.\n\n2004-02-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* config.h.W32.template: Add HAVE_STDARG_H\n\t* config.h-vms.template: Ditto.\n\t* config.ami.template: Ditto.\n\n2004-02-23  Jonathan Grant  <jg-make@jguk.org>\n\n\t* README.W32.template: Add a notation about -j with BATCH_MODE_ONLY.\n\t* build_w32.bat: Remove extra \"+\".\n\n2004-02-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* make.h: Create an UNUSED macro to mark unused parameters.\n\t* (many): Clean up warnings by applying UNUSED, fixing\n\tsigned/unsigned incompatibilities, etc.\n\n\t* acinclude.m4 (AC_STRUCT_ST_MTIM_NSEC): Add quoting to silence\n\tautoconf warnings.\n\t* filedef.h: Name the command_state enumeration.\n\t* file.c (set_command_state): Use the enumeration in the function\n\targument.\n\n\t* configure.in: Explicitly set SET_MAKE to empty, to disable\n\tMAKE=make even when no make already exists.  Fix bug #3823.\n\n2004-02-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* maintMakefile: Perl script to clean up all non-CVS files.  Use\n\tit on all the subdirectories for the cvs-clean target.\n\n\t* main.c (decode_switches): Require non-empty strings for all our\n\tstring command-line options.  Fixes Debian bug # 164165.\n\n\t* configure.in: Check for stdarg.h and varargs.h.\n\t* make.h (USE_VARIADIC): Set this if we can use variadic functions\n\tfor printing messages.\n\t* misc.c: Check USE_VARIADIC instead of (obsolete) HAVE_STDVARARGS.\n\t(message): Ditto.\n\t(error): Ditto.\n\t(fatal): Ditto.\n\n\tA number of patches for OS/2 support from Andreas Buening\n\t<andreas.buening@nexgo.de>:\n\n\t* job.c (child_handler) [OS/2]: Allow this on OS/2 but we have to\n\tdisable the SIGCHLD handler.\n\t(reap_children) [OS/2]: Remove special handling of job_rfd.\n\t(set_child_handler_action_flags) [OS/2]: Use this function in OS/2.\n\t(new_job) [OS/2]: Disable the SIGCHLD handler on OS/2.\n\t* main.c (main) [OS/2]: Special handling for paths in OS/2.\n\t* configure.in [OS/2]: Force SA_RESTART for OS/2.\n\t* Makefile.am (check-regression): Use $(EXEEXT) for Windows-type\n\tsystems.\n\n2004-02-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* w32/subproc/sub_proc.c (process_easy) [W32]: Christoph Schulz\n\t<mail@kristov.de> reports that if process_begin() fails we don't\n\thandle the error condition correctly in all cases.\n\t* w32/subproc/w32err.c (map_windows32_error_to_string): Make sure\n\tto have a newline on the message.\n\n\t* job.c (construct_command_argv_internal): Add \"test\" to UNIX\n\tsh_cmds[].  Fixes Savannah bug # 7606.\n\n2004-02-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (vms_handle_apos) [VMS]: Fix various string handling\n\tsituations in VMS DCL.  Fixes Savannah bug #5533.  Fix provided by\n\tHartmut Becker <Hartmut.Becker@hp.com>.\n\n2004-01-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (load_too_high): Implement an algorithm to control the\n\t\"thundering herd\" problem when using -l to control job creation\n\tvia the load average.  The system only recomputes the load once a\n\tsecond but we can start many jobs in a second.  To solve this we\n\tkeep track of the number of jobs started in the last second and\n\tapply a weight to try to guess what a correct load would be.\n\tThe algorithm was provided by Thomas Riedl <thomas.riedl@siemens.com>.\n\tAlso fixes bug #4693.\n\t(reap_children): Decrease the job count for this second.\n\t(start_job_command): Increase the job count for this second.\n\n\t* read.c (conditional_line): Expand the text after ifn?def before\n\tchecking to see if it's a single word.  Fixes bug #7257.\n\n2004-01-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* file.c (print_file): Recurse to print all targets in\n\tdouble-colon rules.  Fixes bug #4518, reported (with patch) by\n\tAndrew Chatham <chatham@google.com>.\n\n2004-01-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* acinclude.m4: Remove make_FUNC_SETVBUF_REVERSED.\n\t* configure.in: Change make_FUNC_SETVBUF_REVERSED to\n\tAC_FUNC_SETVBUF_REVERSED.\n\n\t* doc/make.texi (Target-specific): Fix Savannah bug #1772.\n\t(MAKE Variable): Fix Savannah bug #4898.\n\n\t* job.c (construct_command_argv_internal): Add \"!\" to the list of\n\tshell escape chars.  POSIX sh allows it to appear before a\n\tcommand, to negate the exit code.  Fixes bug #6404.\n\n\t* implicit.c (pattern_search): When matching an implicit rule,\n\tremember which dependencies have the ignore_mtime flag set.\n\tOriginal fix provided in Savannah patch #2349, by Benoit\n\tPoulot-Cazajous <Benoit.Poulot-Cazajous@jaluna.com>.\n\n2003-11-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* README.W32.template (Outputs): Clarification on -j with\n\tBATCH_MODE_ONLY_SEHLL suggested by Jonathan R. Grant\n\t<jg-make@jguk.org>.\n\n2003-11-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_if): Strip all the trailing whitespace from the\n\tcondition, then don't expand it.  Fixed bug # 5798.\n\n\t* expand.c (recursively_expand_for_file): If we're expanding a\n\tvariable with no file context, then use the variable's context.\n\tFixes bug # 6195.\n\n2003-10-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (log_working_directory): Add newlines to printf()s.\n\n\t* README.cvs: Add a note to ignore warnings during autoreconf.\n\n\t* maintMakefile (po_repo): Set a new URL for PO file updates.\n\t(get-config/config.guess get-config/config.sub): Get these files\n\tfrom the Savannah config project instead of ftp.gnu.org.\n\n2003-10-05  Paul Eggert  <eggert@twinsun.com>\n\n\t* main.c (main): Avoid potential subscript error if environ has\n\tshort strings.\n\n2003-08-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* misc.c (xmalloc, xrealloc): Add one to 0 sizes, to cater to\n\tsystems which don't yet implement the C89 standard :-/.\n\n2003-07-18  Paul D. Smith  <psmith@gnu.org>\n\n\t* dir.c (directory_contents_hash_1, directory_contents_hash_1)\n\t[WINDOWS32]: Initialize hash.\n\n2003-06-19  Earnie Boyd  <earnie@uses.sf.net>\n\n\t* dir.c (read_dirstream): Provide a workaround for broken versions of\n\tthe MinGW dirent structure.\n\n2003-05-30  Earnie Boyd  <earnie@users.sf.net>\n\n\t* w32/include/dirent.h: Add __MINGW32__ filter.\n\n2003-05-30  Earnie Boyd  <earnie@users.sf.net>\n\n\t* make.h: Add global declaration of *make_host.\n\t* main.c (print_usage): Remove local declaration of *make_host.\n\t(print_version): Display \"This program built for ...\" after Copyright\n\tnotice.\n\n2003-05-30  Earnie Boyd  <earnie@users.sf.net>\n\n\t* doc/make.texi: Change \"ifinfo\" to \"ifnottex\" as suggested by the\n\texecution of \"makeinfo --html make.texi\".\n\n2003-04-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* build.template: Make some changes to maybe allow this script to\n\twork on DOS/Windows/OS2 systems.  Suggested by Andreas Buening.\n\n\t* README.OS2.template: New file for OS/2 support.  Original\n\tcontributed by Andreas Buening.\n\t* configure.in: Invoke new pds_AC_DOS_PATHS macro to test for\n\tDOS-style paths.\n\n2003-04-19  Paul D. Smith  <psmith@gnu.org>\n\n\tFix bug #1405: allow a target to match multiple pattern-specific\n\tvariables.\n\n\t* rule.c (create_pattern_var, lookup_pattern_var): Move these to\n\tvariable.c, where they've always belonged.\n\t* rule.h: Move the prototypes and struct pattern_var as well.\n\t* variable.c (initialize_file_variables): Invoke\n\tlookup_pattern_var() in a loop, until no more matches are found.\n\tIf a match is found, create a new variable set for the target's\n\tpattern variables.  Then merge the contents of each matching\n\tpattern variable set into the target's pattern variable set.\n\t(lookup_pattern_var): Change this function to be usable\n\tin a loop.  It takes a starting position: if NULL, start at the\n\tbeginning; if non-NULL, start with the pattern variable after that\n\tposition, and return the next matching pattern.\n\t(create_pattern_var): Create a unique instance of\n\tpattern-specific variables for every definition in the makefile.\n\tDon't combine the same pattern together.  This allows us to\n\tprocess the variable handling properly even when the same pattern\n\tis used multiple times.\n\t(parse_variable_definition): New function: break out the parsing\n\tof a variable definition line from try_variable_definition.\n\t(try_variable_definition): Call parse_variable_definition to\n\tparse.\n\t(print_variable_data_base): Print out pattern-specific variables.\n\t* variable.h (struct variable): Remember when a variable is\n\tconditional.  Also remember its flavor.\n\t(struct pattern_var): Instead of keeping a variable set, we just\n\tkeep a single variable for each pattern.\n\t* read.c (record_target_var): Each pattern variable contains only a\n\tsingle variable, not a set, so create it properly.\n\t* doc/make.texi (Pattern-specific): Document the new behavior.\n\n2003-04-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* dir.c (file_exists_p) [VMS]: Patch provided with Bug #3018 by\n\tJean-Pierre Portier <portierjp2@free.fr>.  I don't understand the\n\tfile/directory naming rules for VMS so I can't tell whether this\n\tis correct or not.\n\n2003-04-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in (HAVE_DOS_PATHS): Define this on systems that need\n\tDOS-style pathnames: backslash separators and drive specifiers.\n\n2003-03-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* file.c (snap_deps): If .SECONDARY with no targets is given, set\n\tthe intermediate flag on all targets.  Fixes bug #2515.\n\n2003-03-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in, Makefile.am, glob/Makefile.am, doc/Makefile.am:\n\tUpgrade to autoconf 2.57 and automake 1.7.3.\n\n\t* job.c: More OS/2 changes from Andreas Buening.\n\n\t* file.c (print_file): Fix variable initialization.\n\tFixes bug #2892.\n\n\t* remake.c (notice_finished_file):\n\n\t* make.h (ENULLLOOP): Set errno = 0 before invoking the command;\n\tsome calls (like readdir()) return NULL in valid situations\n\twithout resetting errno.  Fixes bug #2846.\n\n2003-02-25  Paul D. Smith  <psmith@gnu.org>\n\n\tPort to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>.\n\n\t* job.c (_is_unixy_shell) [OS/2]: New function.\n\tSet default shell to /bin/sh.\n\t(reap_children): Close the job_rfd pipe here since we don't use a\n\tSIGCHLD handler.\n\t(set_child_handler_action_flags): define this to empty on OS/2.\n\t(start_job_command): Close the jobserver pipe and use\n\tchild_execute_job() instead of fork/exec.\n\t(child_execute_job): Rewrite to handle stdin/stdout FDs and spawn\n\trather than exec'ing, then reconfigure stdin/stdout.\n\t(exec_command): Rewrite to use spawn instead of exec.  Return the\n\tPID of the child.\n\n\t* main.c (main) [OS/2]: Call initialize_main().  Handle argv[0] as\n\tin DOS.  Handle the TEMP environment variable as in DOS.  Don't\n\tuse a SIGCHLD handler on OS/2.  Choose a shell as in DOS.  Don't\n\tuse -j in DOS mode.  Use child_execute_job() instead of\n\texec_command().\n\n\t* function.c (func_shell) [OS/2]: Can't use fork/exec on OS/2: use\n\tspawn() instead.\n\n\t* job.h [OS/2]: Move CLOSE_ON_EXEC here from job.c.  Add\n\tprototypes that return values.\n\n\t* remake.c (f_mtime) [OS/2]: Handle FAT timestamp offsets for OS/2.\n\n\t* read.c (readline) [OS/2]: Don't handle CRLF specially on OS/2.\n\t* default.c (default_suffixes) [OS/2]: Set proper default suffixes\n\tfor OS/2.\n\t* vpath.c (construct_vpath_list) [OS/2]: Handle OS/2 paths like\n\tDOS paths.\n\n2003-02-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* default.c [VMS]: New default rules for .cxx -> .obj compiles.\n\t* job.c (child_execute_job) [VMS]: New code for handling spawn().\n\t(child_execute_job) [VMS]: Handle error status properly.\n\tPatches provided by Hartmut Becker <Hartmut.Becker@compaq.com>.\n\n\t* function.c (func_shell): Use EINTRLOOP() while reading from the\n\tsubshell pipe (Fixes bug #2502).\n\t* job.c (free_child): Use EINTRLOOP() while writing tokens to the\n\tjobserver pipe.\n\t* main.c (main): Ditto.\n\n2003-01-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval): eval() was not fully reentrant, because the\n\tcollapsed buffer was static.  Change it to be an automatic\n\tvariable so that eval() can be invoked recursively.\n\tFixes bug # 2238.\n\t(eval): Apply patch # 1022: fix memory reference error on long\n\ttarget-specific variable lines.\n\tPatch provided by Steve Brown <Steve.Brown@macquarie.com>.\n\n\t* function.c (check_numeric): Combine the is_numeric() function\n\tinto this function, since it's only called from one place.\n\tConstify this function.  Have it print the incorrect string in the\n\terror message.  Fixes bug #2407.\n\t(strip_whitespace): Constify.\n\t(func_if): Constify.\n\t* expand.c (expand_argument): Constify.\n\n2003-01-29  Paul D. Smith  <psmith@gnu.org>\n\n\tFix bug # 2169, also reported by other people on various systems.\n\n\t* make.h: Some systems, such as Solaris and PTX, do not fully\n\timplement POSIX-compliant SA_RESTART functionality; important\n\tsystem calls like stat() and readdir() can still fail with EINTR\n\teven if SA_RESTART has been set on the signal handler.  So,\n\tintroduce macros EINTRLOOP() and ENULLLOOP() which can loop on\n\tEINTR for system calls which return -1 or 0 (NULL), respectively,\n\ton error.\n\tAlso, remove the old atomic_stat()/atomic_readdir() and\n\tHAVE_BROKEN_RESTART handling.\n\n\t* configure.in: Remove setting of HAVE_BROKEN_RESTART.\n\n\t* arscan.c (ar_member_touch): Use EINTRLOOP() to wrap fstat().\n\t* remake.c (touch_file): Ditto.\n\n\t* commands.c (delete_target): Use EINTRLOOP() to wrap stat().\n\t* read.c (construct_include_path): Ditto.\n\t* remake.c (name_mtime): Ditto.\n\t* vpath.c (selective_vpath_search): Ditto.\n\t* dir.c (find_directory): Ditto.\n\t(local_stat): Ditto.\n\t(find_directory): Use ENULLLOOP() to wrap opendir().\n\t(dir_contents_file_exists_p): Use ENULLLOOP() to wrap readdir().\n\n\t* misc.c: Remove HAVE_BROKEN_RESTART, atomic_stat(), and\n\tatomic_readdir() handling.\n\n2003-01-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_call): Fix Bug #1744.  If we're inside a\n\trecursive invocation of $(call ...), mask any of the outer\n\tinvocation's arguments that aren't used by this one, so that this\n\tinvocation doesn't \"inherit\" them accidentally.\n\n2002-12-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (subst_expand): Valery Khamenia reported a\n\tpathological performance hit when doing substitutions on very\n\tlarge values with lots of words: turns out we were invoking\n\tstrlen() a ridiculous number of times.  Instead of having each\n\tcall to sindex() call strlen() again, keep track of how much of\n\tthe text we've seen and pass the length to sindex().\n\n2002-11-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* README.cvs, configure.in: Upgrade to require autoconf 2.56.\n\n\n2002-11-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* NMakefile.template (OBJS): Add hash.c object file.\n\t* SMakefile.template (srcs): Ditto.\n\t* Makefile.ami (objs): Ditto.\n\t* build_w32.bat: Ditto.\n\n\t* Makefile.DOS.template: Remove extra dependencies.\n\n2002-10-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* expand.c (install_variable_buffer): New function.  Install a new\n\tvariable_buffer context and return the previous one.\n\t(restore_variable_buffer): New function.  Free the current\n\tvariable_buffer context and put a previously saved one back.\n\t* variable.h: Prototypes for {install,restore}_variable_buffer.\n\t* function.c (func_eval): Push a new variable_buffer context\n\tbefore we eval, then restore the old one when we're done.\n\tFixes Bug #1517.\n\n\t* read.c (install_conditionals): New function.  Install a new\n\tconditional context and return the previous one.\n\t(restore_conditionals): New function.  Free the current\n\tconditional context and put a previously saved one back.\n\t(eval): Use the {install,restore}_conditionals for \"include\"\n\thandling.\n\t(eval_buffer): Use {install,restore}_conditionals to preserve the\n\tpresent conditional state before we evaluate the buffer.\n\tFixes Bug #1516.\n\n\t* doc/make.texi (Quick Reference): Add references to $(eval ...)\n\tand $(value ...).\n\t(Recursion): Add a variable index entry for CURDIR.\n\n\t* README.cvs: Update to appropriate versions.\n\t* Makefile.am (nodist_loadavg_SOURCES): automake gurus point out I\n\tdon't need to copy loadavg.c: automake is smart enough to create\n\tit for me.  Still have a bug in automake related to ansi2knr tho.\n\n2002-10-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (notice_finished_file): Only touch targets if they have\n\tat least one command (as per POSIX).  Resolve Bug #1418.\n\n\t* *.c: Convert to using ANSI C-style function definitions.\n\t* Makefile.am: Enable the ansi2knr feature of automake.\n\t* configure.in: ditto.\n\n2002-10-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* commands.c (set_file_variables): Bug #1379: Don't use alloca()\n\tfor automatic variable values like $^, etc.  In the case of very\n\tlarge lists of prerequisites this causes problems.  Instead reuse\n\ta static buffer (resizeable) for each variable.\n\n\t* read.c (eval): Fix Bug #1391: allow \"export\" keyword in\n\ttarget-specific variable definitions.  Check for it and set an\n\t\"exported\" flag.\n\t(record_target_var): Set the export field to v_export if the\n\t\"exported\" flag is set.\n\t* doc/make.texi (Target-specific): Document the ability to use\n\t\"export\".\n\n\t* doc/make.texi: Change the name of the section on automatic\n\tvariables from \"Automatic\" to \"Automatic Variables\".  Added text\n\tclarifying the scope of automatic variables.\n\n2002-10-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval): Allow SysV $$@ variables to use {} braces as well\n\tas () braces.\n\t(record_files): Ditto.\n\n\t* expand.c (variable_expand_string): In $(A:x=y) expansion limit\n\tthe search for the '=' to only within the enclosing parens.\n\n2002-10-03  Paul D. Smith  <psmith@gnu.org>\n\n\tVersion 3.80 released.\n\n\t* dir.c: Change hash functions to use K&R function definition style.\n\t* function.c: Ditto.\n\t* read.c: Ditto.\n\t* variable.c: Ditto.\n\n\tUpdate to automake 1.7.\n\n\t* Makefile.am (AUTOMAKE_OPTIONS): Update to require 1.7.\n\t(pdf): Remove this target as automake now provides one.\n\n\t* configure.in: Change AM_CONFIG_HEADER to AC_CONFIG_HEADERS.\n\n2002-09-30  Martin P.J. Zinser  <zinser@decus.de>\n\n\t* makefile.com: Updates for GNU make 3.80.\n\t* makefile.vms: Ditto.\n\n2002-09-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (enum make_word_type): Remove w_comment.\n\t(get_next_mword): Don't treat comment characters as special; where\n\tthis function is used we will never see a comment (it's stripped\n\tbefore we get here) and treating comments specially means that\n\ttargets like \"foo\\#bar\" aren't handled properly.\n\n2002-09-18  Paul D. Smith  <psmith@gnu.org>\n\n\t* doc/make.texi (Bugs): Update with some info on Savannah, etc.\n\n\t* read.c (eval): Expansion of arguments to export/unexport was\n\tignoring all arguments after the first one.  Change the algorithm\n\tto expand the whole line once, then parse the results.\n\n2002-09-17  Paul D. Smith  <psmith@gnu.org>\n\n\tFix Bug #940 (plus another bug I found while looking at this):\n\n\t* read.c (record_target_var): enter_file() will add a new entry if\n\tit's a double-colon target: we don't want to do that in this\n\tsituation.  Invoke lookup_file() and only enter_file() if it does\n\tnot already exist.  If the file we get back is a double-colon then\n\tadd this variable to the \"root\" double-colon target.\n\n\t* variable.c (initialize_file_variables): If this file is a\n\tdouble-colon target but is not the \"root\" target, then initialize\n\tthe root and make the root's variable list the parent of our\n\tvariable list.\n\n2002-09-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* doc/make.texi (MAKE Variable): Add some indexing for \"+\".\n\n\t* hash.c (round_up_2): Get rid of a warning.\n\n2002-09-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* Makefile.am (loadavg_SOURCES, loadavg.c): Tiptoe around automake\n\tso it doesn't complain about getloadavg.c.\n\n\t* commands.c (set_file_variables): Make sure we always alloca() at\n\tleast 1 character for the value of $? (for '\\0').\n\n2002-09-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* hash.h (STRING_COMPARE, ISTRING_COMPARE, STRING_N_COMPARE): Fix\n\tmacro to use RESULT instead of the incorrect _RESULT_.\n\n\t* make.h (HAVE_BROKEN_RESTART): Add prototypes for atomic_stat()\n\tand atomic_readdir().  We need to #include dirent.h to get this to\n\twork.\n\t* misc.c (atomic_readdir): Fix typos.\n\n2002-09-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (eval): Expand variable lists given to export and\n\tunexport, so that \"export $(LIST_OF_VARIABLES)\" (etc.) works.\n\t(conditional_line): Ditto for \"ifdef\".  Fixes bug #103.\n\n\t* doc/make.texi (Variables/Recursion): Document this.\n\t(Conditional Syntax): And here.\n\n2002-09-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: Check for memmove().\n\n2002-09-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in (HAVE_BROKEN_RESTART): Define this on PTX systems;\n\tMichael Sterrett <msterret@coat.com> reports that while it has\n\tSA_RESTART, it does not work properly.\n\n\t* misc.c (atomic_stat): If HAVE_BROKEN_RESTART, create a function\n\tthat invokes stat() and loops to do it again if it returns EINTR.\n\t(atomic_readdir): Ditto, with readdir().\n\n\t* make.h (stat, readdir): If HAVE_BROKEN_RESTART, alias stat()\n\tand readdir() to atomic_stat() and atomic_readdir().\n\n2002-09-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* implicit.c (pattern_search): Daniel <barkalow@reputation.com>\n\treports that GNU make sometimes doesn't recognize that targets can\n\tbe made, when directories can be created as prerequisites.  He\n\treports that changing the order of predicates in the DEP->changed\n\tflag test so that lookup_file() is always performed, solves this\n\tproblem.\n\n2002-08-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: Require a newer version of gettext.\n\n\t* misc.c (perror_with_name): Translate the format string (for\n\tright-to-left language support).\n\t(pfatal_with_name): Ditto.\n\n\t* main.c: Create a static array of strings to store the usage\n\ttext.  This is done to facilitate translations.\n\t(struct command_switch): Remove argdesc and description fields.\n\t(switches): Remove values for obsolete fields.\n\t(print_usage): Print each element of the usage array.\n\n\t* hash.c: Change function definitions to be K&R style.\n\n2002-08-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* NEWS: Remove the mention of .TARGETS; we aren't going to publish\n\tthis one because it's too hard to get right.  We'll look at it for\n\ta future release.\n\t* main.c (main): Don't create the .TARGETS variable.\n\t* variable.c (handle_special_var): Don't handle .TARGETS.\n\n2002-08-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (switches): Add a new option, -B (--always-make).  If\n\tspecified, make will rebuild all targets that it encounters even\n\tif they don't appear to be out of date.\n\t(always_make_flag): New flag.\n\t* make.h: Extern always_make_flag.\n\t* remake.c (update_file_1): Check always_make_flag; if it's set we\n\twill always rebuild any target we can, even if none of its\n\tprerequisites are newer.\n\t* NEWS: Mention it.\n\n\t* doc/make.texi (Shell Function): Make it clear that make\n\tvariables marked as \"export\" are not passed to instances of the\n\tshell function.\n\n\tAdd new introspection variable .VARIABLES and .TARGETS.\n\n\t* variable.c (handle_special_var): New function.  If the variable\n\treference passed in is \"special\" (.VARIABLES or .TARGETS),\n\tcalculate the new value if necessary.  .VARIABLES is handled here:\n\twalk through the hash of defined variables and construct a value\n\twhich is a list of the names.  .TARGETS is handled by\n\tbuild_target_list().\n\t(lookup_variable): Invoke handle_special_var().\n\t* file.c (build_target_list): Walk through the hask of known files\n\tand construct a list of the names of all the ones marked as\n\ttargets.\n\t* main.c (main): Initialize them to empty (and as simple variables).\n\t* doc/make.texi (Special Variables): Document them.\n\t* NEWS: Mention them.\n\n\t* variable.h (struct variable): Add a new flag \"exportable\" which\n\tis true if the variable name is valid for export.\n\t* variable.c (define_variable_in_set): Set \"exportable\" when a new\n\tvariable is defined.\n\t(target_environment): Use the \"exportable\" flag\tinstead of\n\tre-checking the name here... an efficiency improvement.\n\n2002-07-31  Paul D. Smith  <psmith@gnu.org>\n\n\t* config.h-vms.template: Updates to build on VMS.  Thanks to\n\tBrian_Benning@aksteel.com for helping verify the build.\n\t* makefile.com: Build the new hash.c file.\n\t* hash.h: Use strcpmi(), not stricmp(), in the\n\tHAVE_CASE_INSENSITIVE_FS case.\n\n2002-07-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* hash.h (ISTRING_COMPARE, return_ISTRING_COMPARE): Add missing\n\tbackslashes to the HAVE_CASE_INSENSITIVE_FS case.\n\tReported by <Brian_Benning@aksteel.com>.\n\n2002-07-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (pop_variable_scope): Remove variable made unused by\n\tnew hash infrastructure.\n\t* read.c (dep_hash_cmp): Rewrite this to handle ignore_mtime\n\tcomparisons as well as name comparisons.\n\t* variable.h: Add a prototype for new hash_init_function_table().\n\t* file.c (lookup_file): Remove variables made unused by new hash\n\tinfrastructure.\n\t* dir.c (directory_contents_hash_2): Missing return of hash value.\n\t(dir_contents_file_exists_p): Remove variables made unused by new\n\thash infrastructure.\n\n\n\tInstalled Greg McGary's integration of the hash functions from the\n\tGNU id-utils package:\n\n2002-07-10  Greg McGary  <greg@mcgary.org>\n\n\t* scripts/functions/filter-out: Add literals to to the\n\tpattern space in order to add complexity, and trigger\n\tuse of an internal hash table.  Fix documentation strings.\n\t* scripts/targets/INTERMEDIATE: Reverse order of files\n\tpassed to expected `rm' command.\n\n2002-07-10  Greg McGary  <greg@mcgary.org>\n\n\t* Makefile.am (SRCS): Add hash.c (noinst_HEADERS): Add hash.h\n\t* hash.c: New file, taken from id-utils.\n\t* hash.h: New file, taken from id-utils.\n\n\t* make.h (HASH, HASHI): Remove macros.\n\t(find_char_unquote): Change arglist in decl.\n\t(hash_init_directories): New function decl.\n\t* variable.h (hash.h): New #include.\n\t(MAKELEVEL_NAME, MAKELEVEL_LENGTH): New constants.\n\t* filedef.h (hash.h): New #include.\n\t(struct file) [next]: Remove member.\n\t(file_hash_enter): Remove function decl.\n\t(init_hash_files): New function decl.\n\n\t* ar.c (ar_name): Delay call to strlen until needed.\n\t* main.c (initialize_global_hash_tables): New function.\n\t(main): Call it.  Use MAKELEVEL_NAME & MAKELEVEL_LENGTH.\n\t* misc.c (remove_comments): Pass char constants to find_char_unquote.\n\t* remake.c (notice_finished_file): Update last_mtime on `prev' chain.\n\n\t* dir.c (hash.h): New #include.\n\t(struct directory_contents) [next, files]: Remove members.\n\t[ctime]: Add member for VMS.  [dirfiles]: Add hash-table member.\n\t(directory_contents_hash_1, directory_contents_hash_2,\n\tdirectory_contents_hash_cmp): New functions.\n\t(directories_contents): Change type to `struct hash_table'.\n\t(struct directory) [next]: Remove member.\n\t(directory_hash_1, directory_hash_2, directory_hash_cmp): New funcs.\n\t(directory): Change type to `struct hash_table'.\n\t(struct dirfile) [next]: Remove member.\n\t[length]: Add member.  [impossible]: widen type to fill alignment gap.\n\t(dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp): New functions.\n\t(find_directory): Use new hash table package.\n\t(dir_contents_file_exists_p): Likewise.\n\t(file_impossible): Likewise.\n\t(file_impossible_p): Likewise.\n\t(print_dir_data_base): Likewise.\n\t(open_dirstream): Likewise.\n\t(read_dirstream): Likewise.\n\t(hash_init_directories): New function.\n\n\t* file.c (hash.h): New #include.\n\t(file_hash_1, file_hash_2, file_hash_cmp): New functions.\n\t(files): Change type to `struct hash_table'.\n\t(lookup_file): Use new hash table package.\n\t(enter_file): Likewise.\n\t(remove_intermediates): Likewise.\n\t(snap_deps): Likewise.\n\t(print_file_data_base): Likewise.\n\n\t* function.c\n\t(function_table_entry_hash_1, function_table_entry_hash_2,\n\tfunction_table_entry_hash_cmp): New functions.\n\t(lookup_function): Remove `table' argument.\n\tUse new hash table package.\n\t(struct a_word) [chain, length]: New members.\n\t(a_word_hash_1, a_word_hash_2, a_word_hash_cmp): New functions.\n\t(struct a_pattern): New struct.\n\t(func_filter_filterout): Pass through patterns noting boundaries\n\tand '%', if present.  Note a_word length.  Use a hash table if\n\targlists are large enough to justify cost.\n\t(function_table_init): Renamed from function_table.\n\t(function_table): Declare as `struct hash_table'.\n\t(FUNCTION_TABLE_ENTRIES): New constant.\n\t(hash_init_function_table): New function.\n\n\t* read.c (hash.h): New #include.\n\t(read_makefile): Pass char constants to find_char_unquote.\n\t(dep_hash_1, dep_hash_2, dep_hash_cmp): New functions.\n\t(uniquize_deps): Use hash table to efficiently identify duplicates.\n\t(find_char_unquote): Accept two char-constant stop chars, rather\n\tthan a string constant, avoiding zillions of calls to strchr.\n\tTighten inner search loops to test only for desired delimiters.\n\n\t* variable.c (variable_hash_1, variable_hash_2,\n\tvariable_hash_cmp): New functions.\n\t(variable_table): Declare as `struct hash_table'.\n\t(global_variable_set): Remove initialization.\n\t(init_hash_global_variable_set): New function.\n\t(define_variable_in_set): Use new hash table package.\n\t(lookup_variable): Likewise.\n\t(lookup_variable_in_set): Likewise.\n\t(initialize_file_variables): Likewise.\n\t(pop_variable_scope): Likewise.\n\t(create_new_variable_set): Likewise.\n\t(merge_variable_sets): Likewise.\n\t(define_automatic_variables): Likewise.\n\t(target_environment): Likewise.\n\t(print_variable_set): Likewise.\n\n2002-07-10  Paul D. Smith  <psmith@gnu.org>\n\n\tImplement the SysV make syntax $$@, $$(@D), and $$(@F) in the\n\tprerequisite list.  A real SysV make will expand the entire\n\tprerequisites list _twice_: we don't do that as it's a big\n\tbackward-compatibility problem.  We only replace those specific\n\tvariables.\n\n\t* read.c (record_files): Replace any $@, $(@D), and $(@F) variable\n\treferences left in the list of prerequisites.  Check for .POSIX as\n\twe record targets, so we can disable non-POSIX behavior while\n\treading makefiles as well as running them.\n\t(eval): Check the prerequisite list to see if we have anything\n\tthat looks like a SysV prerequisite variable reference.\n\n2002-07-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* doc/make.texi (Prerequisite Types): Add a new section describing\n\torder-only prerequisites.\n\n\t* read.c (uniquize_deps): If we have the same file as both a\n\tnormal and order-only prereq, get rid of the order-only prereq,\n\tsince the normal one supersedes it.\n\n2002-07-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* AUTHORS: Added Greg McGary to the AUTHORS file.\n\t* NEWS: Blurbed order-only prerequisites.\n\t* file.c (print_file): Show order-only deps properly when printing\n\tthe database.\n\n\t* maintMakefile: Add \"update\" targets for wget'ing the latest\n\tversions of various external files.  Taken from Makefile.maint in\n\tautoconf, etc.\n\n\t* dosbuild.bat: Somehow we got _double_ ^M's.  Remove them.\n\tReported by Eli Zaretskii <eliz@is.elta.co.il>.\n\n2002-07-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* po/*.po: Remove.  We'll use wget to retrieve them at release\n\ttime.\n\n\t* variable.c (do_variable_definition) [W32]: On W32 using cmd\n\trather than a shell you get an exception.  Make sure we look up\n\tthe variable.  Patch provided by Eli Zaretskii <eliz@is.elta.co.il>.\n\n\t* remake.c (notice_finished_file): Fix handling of -t flag.\n\tPatch provided by Henning Makholm <henning@makholm.net>.\n\n\t* implicit.c (pattern_search): Some systems apparently run short\n\tof stack space, and using alloca() in this function caused an\n\toverrun.  I modified it to use xmalloc() on the two variables\n\twhich seemed like they might get large.  Fixes Bug #476.\n\n\t* main.c (print_version): Update copyright notice to conform with\n\tGNU standards.\n\t(print_usage): Update help output.\n\n\t* function.c (func_eval): Create a new make function, $(eval\n\t...).  Expand the arguments, put them into a buffer, then invoke\n\teval_buffer() on the resulting string.\n\t(func_quote): Create a new function, $(quote VARNAME).  Inserts\n\tthe value of the variable VARNAME without expanding it any\n\tfurther.\n\n\t* read.c (struct ebuffer): Change the linebuffer structure to an\n\t\"eval buffer\", which can be either a file or a buffer.\n\t(eval_makefile): Move the code in the old read_makefile() which\n\tlocated a makefile into here: create a struct ebuffer with that\n\tinformation.  Have it invoke the new function eval() with that\n\tebuffer.\n\t(eval_buffer): Create a new function that creates a struct ebuffer\n\tthat holds a string buffer instead of a file.  Have it invoke\n\teval() with that ebuffer.\n\t(eval): New function that contains the guts of the old\n\tread_makefile() function: this function parses makefiles.  Obtains\n\tdata to parse from the provided ebuffer.  Some modifications to\n\tmake the flow of the function cleaner and clearer.  Still could\n\tuse some work here...\n\t(do_define): Takes a struct ebuffer instead of a FILE*.  Read the\n\tcontents of the define/endef variable from the ebuffer.\n\t(readstring): Read the next line from a string-style ebuffer.\n\t(readline): Read the next line from an ebuffer.  If it's a string\n\tebuffer, invoke readstring().  If it's a FILE* ebuffer, read it\n\tfrom the file.\n\n\t* dep.h (eval_buffer): Prototype eval_buffer();\n\n\t* variable.c (do_variable_definition): Make sure that all\n\tnon-target-specific variables are registered in the global set.\n\tIf we're invoked from an $(eval ...) we might be inside a $(call\n\t...) or other function which has pushed a variable scope; we still\n\twant to define our variables from evaluated makefile code in the\n\tglobal scope.\n\n2002-07-03  Greg McGary  <greg@mcgary.org>\n\n\t* dep.h (struct dep) [ignore_mtime]: New member.\n\t[changed]: convert to a bitfield.\n\t* implicit.c (pattern_search): Zero ignore_mtime.\n\t* main.c (main, handle_non_switch_argument): Likewise.\n\t* rule.c (convert_suffix_rule): Likewise.\n\t* read.c (read_all_makefiles, read_makefile, multi_glob): Likewise.\n\t(read_makefile): Parse '|' in prerequisite list.\n\t(uniquize_deps): Consider ignore_mtime when comparing deps.\n\t* remake.c (update_file_1, check_dep): Don't force remake for\n\tdependencies that have d->ignore_mtime.\n\t* commands.c (FILE_LIST_SEPARATOR): New constant.\n\t(set_file_variables): Don't include a\n\tprerequisite in $+, $^ or $? if d->ignore_mtime.\n\tDefine $|.\n\n2002-06-18  Paul D. Smith  <psmith@gnu.org>\n\n\t* make.texinfo: Updates for next revision.  New date/rev/etc.\n\tRecreate all Info menus.  Change license on the manual to the GNU\n\tFree Documentation License.  A number of typos.\n\t(Variables Simplify): Don't use \"-\" before it's defined.\n\t(Automatic Prerequisites): Rewrite the target example to work\n\tproperly if the compile fails.  Remove incorrect comments about\n\thow \"set -e\" behaves.\n\t(Text Functions): Move the \"word\", \"wordlist\", \"words\", and\n\t\"firstword\" functions here, from \"File Name Functions\".\n\t* make-stds.texi: Update from latest GNU version.\n\t* fdl.texi: (created) Import the latest GNU version.\n\n2002-06-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (do_variable_definition): New function: extract the\n\tpart of try_variable_definition() that actually sets the value\n\tinto a separate function.\n\t(try_variable_definition): Call do_variable_definition() after\n\tparsing the variable definition string.\n\t(define_variable_in_set): Make the name argument const.\n\n\t* variable.h (enum variable_flavor): Make public.\n\t(do_variable_definition): Create prototype.\n\n\t* read.c (read_all_makefiles): Create a new built-in variable,\n\tMAKEFILE_LIST.\n\t(read_makefile): Add each makefile read in to this variable value.\n\n2002-05-18  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* Makefile.DOS.template: Tweak according to changes in the\n\tdistribution.  Add back the dependencies of *.o files.\n\n\t* configh.dos.template: Synchronize with config.h.in.\n\n2002-05-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* file.c (file_timestamp_now): Use K&R function declaration.\n\n\t* getloadavg.c (getloadavg): Merge setlocale() fix from sh-utils\n\tgetloadavg.c.  Autoconf thinks QNX is SVR4-like, but it isn't, so\n\t#undef it.  Remove predefined setup of NLIST_STRUCT.  Decide\n\twhether to include nlist.h based on HAVE_NLIST_H.  Change obsolete\n\tNLIST_NAME_UNION to new HAVE_STRUCT_NLIST_N_UN_N_NAME.\n\t* configure.in (NLIST_STRUCT): Define this if we have nlist.h and\n\tnlist.n_name is a pointer rather than an array.\n\n\t* acinclude.m4 (make_FUNC_SETVBUF_REVERSED): Grab the latest\n\tversion of AC_FUNC_SETVBUF_REVERSED from autoconf CVS.\n\t* configure.in: Use it instead of the old version.\n\n\t* main.c (main): Prefer setvbuf() to setlinebuf().\n\n2002-05-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* Makefile.am (make_LDADD): Add GETLOADAVG_LIBS.\n\t(loadavg_LDADD): Ditto.\n\n2002-04-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* expand.c (recursively_expand_for_file): Rename\n\trecursively_expand() to recursively_expand_for_file() and provide\n\tan extra argument, struct file.  If the argument is provided, set\n\tthe variable scope to that of the file before expanding.\n\t* variable.h (recursively_expand): Make this a macro that invokes\n\trecursively_expand_for_file() with a NULL file pointer.\n\t* variable.c (target_environment): Call the renamed function and\n\tprovide the current file context.\n\tFixes Debian bug #144306.\n\n2002-04-28  Paul D. Smith  <psmith@gnu.org>\n\n\tAllow $(call ...) user-defined variables to be self-referencing\n\twithout throwing an error.  Allows implementation of transitive\n\tclosures, among other possibly useful things.\n\tRequested by: Philip Guenther <guenther@sendmail.com>\n\n\t* variable.h (struct variable): Add a new field: exp_count, and\n\tnew macros to hold its size and maximum value.\n\t(warn_undefined): Make this a macro.\n\t* variable.c (define_variable_in_set): Initialize it.\n\t* expand.c (recursively_expand): If we detect recursive expansion\n\tof a variable, check the exp_count field.  If it's greater than 0\n\tallow the recursion and decrement the count.\n\t(warn_undefined): Remove this (now a macro in variable.h).\n\t* function.c (func_call): Before we expand the user-defined\n\tfunction, modify its exp_count field to contain the maximum\n\tnumber of recursive calls we'll allow.  After the call, reset it\n\tto 0.\n\n2002-04-21  Paul D. Smith  <psmith@gnu.org>\n\n\tModified to use latest autoconf (2.53), automake (1.6.1), and\n\tgettext (0.11.1).  We're using gettext's new \"external\" support,\n\tto avoid including libintl source with GNU make.\n\n\t* README.cvs: New file.  Explain how to build GNU make from CVS.\n\n\t* configure.in: Modify checking for the system glob library.\n\tUse AC_EGREP_CPP instead of AC_TRY_CPP.  Remove the setting of\n\tGLOBDIR (we will always put \"glob\" in SUBDIRS, so automake\n\tetc. will manage it correctly).  Set an automake conditional\n\tUSE_LOCAL_GLOB to decide whether to compile the glob library.\n\n\t* getloadavg.c (main): Include make.h in the \"TEST\" program to\n\tavoid warnings.\n\n\t* Makefile.am: Remove special rules for loadavg.  Replace them\n\twith Automake capabilities for building extra programs.\n\n\t* signame.c: This file does nothing if the system provide\n\tstrsignal().  If not, it implements strsignal().  If the system\n\tdoesn't define sys_siglist, then we make our own; otherwise we use\n\tthe system version.\n\t* signame.h: Removed.\n\n\t* main.c (main): No need to invoke signame_init().  Update copyright.\n\n\t* ABOUT-NLS: Removed.\n\t* gettext.c: Removed.\n\t* gettext.h: Get a simplified copy from the gettext package.\n\t* po/*: Created.\n\t* i18n/*.po: Moved to po/.\n\t* i18n/: Removed.\n\n\t* config/*: Created.  Contains package configuration helper files.\n\t* config.guess, config.sub: Moved to config directory.\n\n\t* configure.in (AC_CONFIG_FILES): Add po/Makefile.in, config/Makefile.\n\tRework to use new-style autoconf features.  Use the \"external\"\n\tmode for gettext.  Make the build.sh config file conditional on\n\twhether build.sh.in exists, to avoid autoconf errors.\n\t* acinclude.m4: Removed almost all macros as being obsolete.\n\tRewrote remaining macros to use AC_DEFINE.\n\t* acconfig.h: Removed.\n\n\t* Makefile.am (EXTRA_DIST): Add config/config.rpath.  Use a\n\tconditional to handle customs support.  Remove special handling\n\tfor i18n features.\n\n2002-04-20  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_call): Don't mark the argument variables $1,\n\tetc. as recursive.  They've already been fully expanded so\n\tthere's no need to do it again, and doing so strips escaped $'s.\n\tReported by Sebastian Glita <glseba@yahoo.com>.\n\n\t* remake.c (notice_finished_file): Walk through double-colon\n\tentries via the prev field, not the next field!\n\tReported by Greg McGary <greg@mcgary.org>.\n\n\t* main.c (main): If the user specifies -q and asks for a specific\n\ttarget which is a makefile, we got an assert.  In that case it\n\tturns out we should continue normally instead.\n\n\t* i18n/de.po, i18n/fr.po: Installed an updated translation.\n\n\t* i18n/he.po: Installed a new translation.\n\n2002-01-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/es.po, i18n/ru.po: Installed an updated translation.\n\n2001-12-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/ja.po: Installed an updated translation.\n\n2001-09-06  Paul Eggert  <eggert@twinsun.com>\n\n\t* configure.in (AC_CHECK_HEADERS): Add sys/resource.h.\n\t(AC_CHECK_FUNCS): Add getrlimit, setrlimit.\n\n\t* main.c: Include <sys/resource.h> if it, getrlimit, and setrlimit\n\tare available.\n\t(main): Get rid of any avoidable limit on stack size.\n\n2001-09-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/da.po: Installed an updated translation.\n\n2001-08-03  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/fr.po: Installed an updated translation.\n\tResolves Debian\tbug #106720.\n\n2001-06-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/da.po, configure.in (ALL_LINGUAS): Installed a new\n\ttranslation.\n\n2001-06-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/ko.po: Installed a new translation.\n\n2001-05-06  Paul D. Smith  <psmith@gnu.org>\n\n\tModify the EINTR handling.\n\n\t* job.c (new_job): Reorganize the jobserver algorithm.  Reorder\n\tthe way in which we manage the file descriptor/signal handler race\n\ttrap to be more efficient.\n\n2001-05-06  Paul Eggert  <eggert@twinsun.com>\n\n\tRestart almost all system calls that are interrupted, instead\n\tof worrying about EINTR.  The lone exception is the read() for\n\tjob tokens.\n\n\t* configure.in (HAVE_SA_RESTART): New macro.\n\t(MAKE_JOBSERVER): Define to 1 only if HAVE_SA_RESTART.\n\t* main.c (main): Use SA_RESTART instead of the old,\n\tnonstandard SA_INTERRUPT.\n\n\t* configure.in (AC_CHECK_FUNCS): Add bsd_signal.\n\t* main.c (bsd_signal): New function or macro,\n\tif the implementation doesn't supply it.\n\t(The bsd_signal function will be in POSIX 1003.1-200x.)\n\t(HANDLESIG): Remove.\n\t(main, FATAL_SIG): Use bsd_signal instead of signal or HANDLESIG.\n\n\t* make.h (EINTR_SET): Remove.\n\t(SA_RESTART): New macro.\n\n\t* arscan.c (ar_member_touch): Don't worry about EINTR.\n\t* function.c (func_shell): Likewise.\n\t* job.c (reap_children, free_child, new_job): Likewise.\n\t* main.c (main): Likewise.\n\t* remake.c (touch_file, name_mtime): Likewise.\n\n\t* arscan.c (ar_member_touch): Fix bug uncovered by EINTR removal;\n\tif fstat failed with errno!=EINTR, the error was ignored.\n\n\t* job.c (set_child_handler_action_flags): New function.\n\t(new_job): Use it to temporarily clear the SIGCHLD action flags\n\twhile reading the token.\n\n2001-05-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (start_job_command): Don't add define/endef per-line flags\n\tto the top-level flags setting.\n\n2001-04-03  Paul D. Smith  <psmith@gnu.org>\n\n\t* arscan.c (VMS_get_member_info,ar_scan) [VMS]: VMS sets the low\n\tbit on error, so check for odd return values, not non-0 return\n\tvalues.\n\t(VMS_get_member_info): Calculate the timezone differences correctly.\n\tReported by John Fowler <jfowler@nyx.net>.\n\n\n2001-03-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (lookup_variable) [VMS]: Null-terminate the variable\n\tvalue before invoking define_variable().\n\tReported by John Fowler <jfowler@nyx.net>.\n\n2001-02-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (record_target_var): If we reset the variable due to a\n\tcommand-line variable setting overriding it, turn off the \"append\"\n\tflag.\n\n2001-01-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (lookup_variable) [VMS]: When getting values from the\n\tenvironment, allocate enough space for the _value_ plus escapes,\n\tnot enough space for the name plus escapes :-/.\n\tReported by John Fowler <jfowler@nyx.net>.\n\n\t* remake.c (f_mtime): Removed the \"***\" prefix from the mod time\n\twarnings that make generates, so it doesn't look like an error.\n\tReported by Karl Berry <karl@gnu.org>.\n\n\n\tFix for PR/2020:  Rework appended target-specific variables.  I'm\n\tfairly confident this algorithm is finally correct.\n\n\t* expand.c (allocated_variable_append): Rewrite.  Instead of\n\texpanding each appended variable then adding all the expanded\n\tstrings together, we append all the unexpanded values going up\n\tthrough the variable set contexts, then expand the final result.\n\tThis behaves just like non-target-specific appended variable\n\tvalues, while the old way didn't in various corner cases.\n\t(variable_append): New function: recursively append the unexpanded\n\tvalue of a variable, walking from the outermost variable scope to\n\tthe innermost.\n\t* variable.c (lookup_variable): Remove the code that looked up the\n\tvariable set list if the found variable was \"append\".  We don't\n\tneed this anymore.\n\t(lookup_variable_in_set): Make this non-static so we can use it\n\telsewhere.\n\t(try_variable_definition): Use lookup_variable_in_set() rather\n\tthan faking out current_variable_set_list by hand (cleanup).\n\t* variable.h: Add a prototype for the now non-static\n\tlookup_variable_in_set().\n\n2000-11-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (f_mtime) [WINDOWS32]: On various advice, I changed the\n\tWINDOWS32 port to assume timestamps can be up to 3 seconds away\n\tbefore throwing a fit.\n\n2000-11-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* read.c (readline): CRLF calculations had a hole, if you hit the\n\tbuffer grow scenario just right.  Reworked the algorithm to avoid\n\tthe need for len or lastlen at all.  Problem description with\n\tsample code chages provided by Chris Faylor <cgf@redhat.com>.\n\n2000-10-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* gettext.c (SWAP): Declare this with the prototype, otherwise\n\tsome systems don't work (non-32-bit?  Reported for Cray T3E).\n\tReported by Thorstein Thorsteinsson <thor@signe.teokem.lu.se>.\n\n2000-10-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* acinclude.m4 (AM_LC_MESSAGES): Remove undefined macro\n\tAM_LC_MESSAGES; it doesn't seem to do anything anyway??\n\n\t* i18n/gl.po, configure.in (ALL_LINGUAS): New Galician translation.\n\n2000-09-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* gettext.c: Don't #define _GETTEXT_H here; we only include some\n\tparts of the real gettext.h here, and we expect to really include\n\tthe real gettext.h later.  If we keep this #define, it's ignored.\n\n2000-09-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (log_working_directory): Rework the text to use complete\n\tsentences, to make life simpler for the translators.\n\n2000-08-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* file.c (remove_intermediates): Print a debug message before we\n\tremove intermediate files, so the user (if she uses -d) knows\n\twhat's going on.\n\n2000-08-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (try_variable_definition): Change how we handle\n\ttarget-specific append variable defns: instead of just setting the\n\tvalue, expand it as an append _but_ only within the current\n\ttarget's context.  Otherwise we lose all but the last value if the\n\tvariable is appended more than once within the current target\n\tcontext.  Fixes PR/1831.\n\n2000-08-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* function.c (func_shell): Nul-terminate the buffer before\n\tprinting an exec error message (just in case it's not!).\n\tFixes PR/1860, reported by Joey Hess <joey@valinux.com>.\n\n2000-07-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* job.c (construct_command_argv_internal): Add \"~\" to the list of\n\tsh_chars[] which disallow optimizing out the shell call.\n\n2000-07-23  Paul Eggert  <eggert@twinsun.com>\n\n\t* NEWS, make.texinfo: Document .LOW_RESOLUTION_TIME, which\n\tsupersedes --disable-nsec-timestamps.\n\t* make.texinfo: Consistently use \"time stamp\" instead of \"timestamp\".\n\t* README: Remove --disable-nsec-timestamps.\n\n\t* filedef.h (struct file.low_resolution_time): New member.\n\t* file.c (snap_deps): Add support for .LOW_RESOLUTION_TIME.\n\t* remake.c (update_file_1):\n\tAvoid spurious rebuilds due to low resolution time stamps,\n\tgeneralizing the earlier code that applied only to archive members.\n\t(f_mtime): Archive members always have low resolution time stamps.\n\n\t* configure.in: Remove --disable-nsec-timestamps, as this has\n\tbeen superseded by .LOW_RESOLUTION_TIME.\n\n2000-07-23  Paul Eggert  <eggert@twinsun.com>\n\n\t* configure.in (enable_nsec_timestamps): Renamed from\n\tmake_cv_nsec_timestamps, since enable/disable options\n\tshouldn't be cached.\n\n2000-07-23  Bruno Haible  <haible@clisp.cons.org>\n       and  Paul Eggert  <eggert@twinsun.com>\n\n\t* file.c (file_timestamp_now):\n\tUse preprocessor-time check for FILE_TIMESTAMP_HI_RES\n\tso that clock_gettime is not linked unless needed.\n\n\t* filedef.h (FILE_TIMESTAMP_HI_RES):\n\tRemove definition; \"configure\" now does this.\n\n\t* configure.in (jm_AC_TYPE_UINTMAX_T): Move up,\n\tto before high resolution file timestamp check,\n\tsince that check now uses uintmax_t.\n\t(FILE_TIMESTAMP_HI_RES): Define to nonzero if the code should use\n\thigh resolution file timestamps.\n\t(HAVE_CLOCK_GETTIME): Do not define if !FILE_TIMESTAMP_HI_RES,\n\tso that we don't link in clock_gettime unnecessarily.\n\n2000-07-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* i18n/ja.po: New version of the translation file.\n\n2000-07-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* remake.c (f_mtime): If NO_FLOAT is defined, don't bother with\n\tthe offset calculation.\n\t(name_mtime): Replace EINTR test with EINTR_SET macro.\n\n2000-07-07  Paul Eggert  <eggert@twinsun.com>\n\n\tFix for PR/1811:\n\n\t* remake.c (update_file_1):\n\tAvoid spurious rebuilds of archive members due to their\n\ttimestamp resolution being only one second.\n\t(f_mtime): Avoid spurious warnings of timestamps in the future due to\n\tthe clock's resolution being lower than file timestamps'.\n\tWhen warning about future timestamps, report only the discrepancy,\n\tnot the absolute value of the timestamp and the current time.\n\n\t* file.c (file_timestamp_now): New arg RESOLUTION.\n\t* filedef.h (file_timestamp_now): Likewise.\n\t(FILE_TIMESTAMP_NS): Now returns int.  All uses changed.\n\n2000-07-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* variable.c (lookup_variable) [VMS]: Remove vestigial references\n\tto listp.  Fixes PR/1793.\n\n2000-06-26  Paul Eggert  <eggert@twinsun.com>\n\n\t* Makefile.am (MAINTAINERCLEANFILES): New macro, with stamp-pot in it.\n\n\t* dir.c (vms_hash): Ensure ctype macro args are nonnegative.\n\n\t* remake.c (f_mtime): Remove unused var memtime.\n\n2000-06-25  Martin Buchholz  <martin@xemacs.org>\n\n\t* make.texinfo, NEWS, TODO.private: Minor spelling corrections.\n\tRan spell-check\ton make.texinfo.\n\n2000-06-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* main.c (main): Replace EXIT_SUCCESS, EXIT_FAILURE, and\n\tEXIT_TROUBLE with MAKE_SUCCESS, MAKE_FAILURE, and MAKE_TROUBLE.\n\t* make.h: Define these macros.\n\n\t* Version 3.79.1 released.\n\n\t* configure.in: Add a new option, --disable-nsec-timestamps, to\n\tavoid using sub-second timestamps on systems that support it.  It\n\tcan lead to problems, e.g. if your makefile relies on \"cp -p\".\n\t* README.template: Document the issue with \"cp -p\".\n\n\t* config.guess, config.sub: Updated.\n\n\f\n\nSee ChangeLog.2, available in the CVS repository at:\n\n\thttp://savannah.gnu.org/cvs/?group=make\n\nfor earlier changes.\n\n\nCopyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/INSTALL",
    "content": "Installation Instructions\n*************************\n\nCopyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free\nSoftware Foundation, Inc.\n\nThis file is free documentation; the Free Software Foundation gives\nunlimited permission to copy, distribute and modify it.\n\nBasic Installation\n==================\n\nThese are generic installation instructions.\n\n   The `configure' shell script attempts to guess correct values for\nvarious system-dependent variables used during compilation.  It uses\nthose values to create a `Makefile' in each directory of the package.\nIt may also create one or more `.h' files containing system-dependent\ndefinitions.  Finally, it creates a shell script `config.status' that\nyou can run in the future to recreate the current configuration, and a\nfile `config.log' containing compiler output (useful mainly for\ndebugging `configure').\n\n   It can also use an optional file (typically called `config.cache'\nand enabled with `--cache-file=config.cache' or simply `-C') that saves\nthe results of its tests to speed up reconfiguring.  (Caching is\ndisabled by default to prevent problems with accidental use of stale\ncache files.)\n\n   If you need to do unusual things to compile the package, please try\nto figure out how `configure' could check whether to do them, and mail\ndiffs or instructions to the address given in the `README' so they can\nbe considered for the next release.  If you are using the cache, and at\nsome point `config.cache' contains results you don't want to keep, you\nmay remove or edit it.\n\n   The file `configure.ac' (or `configure.in') is used to create\n`configure' by a program called `autoconf'.  You only need\n`configure.ac' if you want to change it or regenerate `configure' using\na newer version of `autoconf'.\n\nThe simplest way to compile this package is:\n\n  1. `cd' to the directory containing the package's source code and type\n     `./configure' to configure the package for your system.  If you're\n     using `csh' on an old version of System V, you might need to type\n     `sh ./configure' instead to prevent `csh' from trying to execute\n     `configure' itself.\n\n     Running `configure' takes awhile.  While running, it prints some\n     messages telling which features it is checking for.\n\n  2. Type `make' to compile the package.\n\n  3. Optionally, type `make check' to run any self-tests that come with\n     the package.\n\n  4. Type `make install' to install the programs and any data files and\n     documentation.\n\n  5. You can remove the program binaries and object files from the\n     source code directory by typing `make clean'.  To also remove the\n     files that `configure' created (so you can compile the package for\n     a different kind of computer), type `make distclean'.  There is\n     also a `make maintainer-clean' target, but that is intended mainly\n     for the package's developers.  If you use it, you may have to get\n     all sorts of other programs in order to regenerate files that came\n     with the distribution.\n\nCompilers and Options\n=====================\n\nSome systems require unusual options for compilation or linking that the\n`configure' script does not know about.  Run `./configure --help' for\ndetails on some of the pertinent environment variables.\n\n   You can give `configure' initial values for configuration parameters\nby setting variables in the command line or in the environment.  Here\nis an example:\n\n     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix\n\n   *Note Defining Variables::, for more details.\n\nCompiling For Multiple Architectures\n====================================\n\nYou can compile the package for more than one kind of computer at the\nsame time, by placing the object files for each architecture in their\nown directory.  To do this, you must use a version of `make' that\nsupports the `VPATH' variable, such as GNU `make'.  `cd' to the\ndirectory where you want the object files and executables to go and run\nthe `configure' script.  `configure' automatically checks for the\nsource code in the directory that `configure' is in and in `..'.\n\n   If you have to use a `make' that does not support the `VPATH'\nvariable, you have to compile the package for one architecture at a\ntime in the source code directory.  After you have installed the\npackage for one architecture, use `make distclean' before reconfiguring\nfor another architecture.\n\nInstallation Names\n==================\n\nBy default, `make install' will install the package's files in\n`/usr/local/bin', `/usr/local/man', etc.  You can specify an\ninstallation prefix other than `/usr/local' by giving `configure' the\noption `--prefix=PREFIX'.\n\n   You can specify separate installation prefixes for\narchitecture-specific files and architecture-independent files.  If you\ngive `configure' the option `--exec-prefix=PREFIX', the package will\nuse PREFIX as the prefix for installing programs and libraries.\nDocumentation and other data files will still use the regular prefix.\n\n   In addition, if you use an unusual directory layout you can give\noptions like `--bindir=DIR' to specify different values for particular\nkinds of files.  Run `configure --help' for a list of the directories\nyou can set and what kinds of files go in them.\n\n   If the package supports it, you can cause programs to be installed\nwith an extra prefix or suffix on their names by giving `configure' the\noption `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.\n\nOptional Features\n=================\n\nSome packages pay attention to `--enable-FEATURE' options to\n`configure', where FEATURE indicates an optional part of the package.\nThey may also pay attention to `--with-PACKAGE' options, where PACKAGE\nis something like `gnu-as' or `x' (for the X Window System).  The\n`README' should mention any `--enable-' and `--with-' options that the\npackage recognizes.\n\n   For packages that use the X Window System, `configure' can usually\nfind the X include and library files automatically, but if it doesn't,\nyou can use the `configure' options `--x-includes=DIR' and\n`--x-libraries=DIR' to specify their locations.\n\nSpecifying the System Type\n==========================\n\nThere may be some features `configure' cannot figure out automatically,\nbut needs to determine by the type of machine the package will run on.\nUsually, assuming the package is built to be run on the _same_\narchitectures, `configure' can figure that out, but if it prints a\nmessage saying it cannot guess the machine type, give it the\n`--build=TYPE' option.  TYPE can either be a short name for the system\ntype, such as `sun4', or a canonical name which has the form:\n\n     CPU-COMPANY-SYSTEM\n\nwhere SYSTEM can have one of these forms:\n\n     OS KERNEL-OS\n\n   See the file `config.sub' for the possible values of each field.  If\n`config.sub' isn't included in this package, then this package doesn't\nneed to know the machine type.\n\n   If you are _building_ compiler tools for cross-compiling, you should\nuse the `--target=TYPE' option to select the type of system they will\nproduce code for.\n\n   If you want to _use_ a cross compiler, that generates code for a\nplatform different from the build platform, you should specify the\n\"host\" platform (i.e., that on which the generated programs will\neventually be run) with `--host=TYPE'.\n\nSharing Defaults\n================\n\nIf you want to set default values for `configure' scripts to share, you\ncan create a site shell script called `config.site' that gives default\nvalues for variables like `CC', `cache_file', and `prefix'.\n`configure' looks for `PREFIX/share/config.site' if it exists, then\n`PREFIX/etc/config.site' if it exists.  Or, you can set the\n`CONFIG_SITE' environment variable to the location of the site script.\nA warning: not all `configure' scripts look for a site script.\n\nDefining Variables\n==================\n\nVariables not defined in a site shell script can be set in the\nenvironment passed to `configure'.  However, some packages may run\nconfigure again during the build, and the customized values of these\nvariables may be lost.  In order to avoid this problem, you should set\nthem in the `configure' command line, using `VAR=value'.  For example:\n\n     ./configure CC=/usr/local2/bin/gcc\n\nwill cause the specified gcc to be used as the C compiler (unless it is\noverridden in the site shell script).\n\n`configure' Invocation\n======================\n\n`configure' recognizes the following options to control how it operates.\n\n`--help'\n`-h'\n     Print a summary of the options to `configure', and exit.\n\n`--version'\n`-V'\n     Print the version of Autoconf used to generate the `configure'\n     script, and exit.\n\n`--cache-file=FILE'\n     Enable the cache: use and save the results of the tests in FILE,\n     traditionally `config.cache'.  FILE defaults to `/dev/null' to\n     disable caching.\n\n`--config-cache'\n`-C'\n     Alias for `--cache-file=config.cache'.\n\n`--quiet'\n`--silent'\n`-q'\n     Do not print messages saying which checks are being made.  To\n     suppress all normal output, redirect it to `/dev/null' (any error\n     messages will still be shown).\n\n`--srcdir=DIR'\n     Look for the package's source code in directory DIR.  Usually\n     `configure' can determine that directory automatically.\n\n`configure' also accepts some other, not widely useful, options.  Run\n`configure --help' for more details.\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/Makefile.DOS",
    "content": "# -*-Makefile-*- template for DJGPP\n# Makefile.in generated automatically by automake 1.2 from Makefile.am\n#\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,\n# 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nSHELL = /bin/sh\n\nsrcdir = .\nVPATH = $(srcdir)\n# $DJDIR is defined automatically by DJGPP to point\n# to the root of the DJGPP installation tree.\nprefix = /dev/env/DJDIR\nexec_prefix = ${prefix}\n\nbindir = /bin\ndatadir = /share\nlibdir = /lib\ninfodir = /info\nmandir = /man\nincludedir = /include\noldincludedir = c:/djgpp/include\n\nDESTDIR = /dev/env/DJDIR\n\npkgdatadir = $(datadir)/make\npkglibdir = $(libdir)/make\npkgincludedir = $(includedir)/make\nlocaledir = $(datadir)/locale\n\nINSTALL = ${exec_prefix}/bin/ginstall -c\nINSTALL_PROGRAM = ${exec_prefix}/bin/ginstall -c\nINSTALL_DATA = ${exec_prefix}/bin/ginstall -c -m 644\nINSTALL_SCRIPT = ${exec_prefix}/bin/ginstall -c\ntransform = s,x,x,\n\n# This will fail even if they don't have a Unix-like shell (stock DOS\n# shell doesn't know about `false').  The only difference is that they\n# get \"Error -1\" instead of \"Error 1\".\nEXIT_FAIL = false\n\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nEXEEXT = .exe\nOBJEXT = o\n\nAR = ar\nAWK = gawk\nCC = gcc\nCPP = gcc -E\nLIBOBJS =\nMAKEINFO = ${exec_prefix}/bin/makeinfo\nPACKAGE = make\nPERL = perl\nRANLIB = ranlib\nREMOTE = stub\nVERSION = 3.81\n\nAUTOMAKE_OPTIONS = 1.2\n\nbin_PROGRAMS =\tmake$(EXEEXT)\n\nmake_SOURCES =\tar.c arscan.c commands.c default.c dir.c expand.c file.c function.c getopt.c getopt1.c implicit.c job.c main.c misc.c read.c remake.c rule.c signame.c strcache.c variable.c version.c vpath.c hash.c remote-$(REMOTE).c\n# This should include the glob/ prefix\nlibglob_a_SOURCES =\tglob/fnmatch.c glob/glob.c glob/fnmatch.h glob/glob.h\nmake_LDADD =\t  glob/libglob.a\n\ninfo_TEXINFOS =\tmake.texinfo\nman_MANS =\tmake.1\n\nINCLUDES =\t-I$(srcdir)/glob -DLIBDIR=\\\"c:/djgpp/lib\\\" -DINCLUDEDIR=\\\"c:/djgpp/include\\\" -DLOCALEDIR=\\\"$(localedir)\\\"\n\nBUILT_SOURCES =\tREADME build.sh-in\n\nEXTRA_DIST = \t$(BUILT_SOURCES) $(man_MANS) README.customs remote-cstms.c  make-stds.texi texinfo.tex SCOPTIONS SMakefile  Makefile.ami README.Amiga config.ami amiga.c amiga.h  NMakefile README.DOS configh.dos configure.bat makefile.com  README.W32 build_w32.bat config.h-W32 subproc.bat make.lnk  config.h-vms makefile.vms readme.vms vmsdir.h vmsfunctions.c  vmsify.c\n\nSUBDIRS =\tglob\nmkinstalldirs = ${exec_prefix}/bin/gmkdir -p\nCONFIG_HEADER = config.h\nCONFIG_CLEAN_FILES =  build.sh\nPROGRAMS =  $(bin_PROGRAMS)\n\nMAKE_HOST = i386-pc-msdosdjgpp\n\n\nDEFS =  -I. -I$(srcdir) -I.\nCPPFLAGS = -DHAVE_CONFIG_H\nLDFLAGS =\nLIBS =\nmake_OBJECTS =  ar.o arscan.o commands.o default.o dir.o expand.o file.o function.o getopt.o getopt1.o implicit.o job.o main.o misc.o read.o remake.o rule.o signame.o strcache.o variable.o version.o vpath.o hash.o remote-$(REMOTE).o\nmake_DEPENDENCIES =    glob/libglob.a\nmake_LDFLAGS =\nlibglob_a_LIBADD =\nlibglob_a_OBJECTS =  fnmatch.o glob.o\nnoinst_LIBRARIES =\tglob/libglob.a\nCFLAGS = -O2 -g\nCOMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)\nLINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@\nTEXI2DVI = texi2dvi\nTEXINFO_TEX = $(srcdir)/config/texinfo.tex\nINFO_DEPS = make.info\nDVIS = make.dvi\nTEXINFOS = make.texinfo\nman1dir = $(mandir)/man1\nMANS = $(man_MANS)\n\nNROFF = nroff\nDIST_COMMON =  README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am  Makefile.in NEWS acconfig.h aclocal.m4 alloca.c build.sh-in config.h-in  configure configure.in getloadavg.c\n\nDISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)\n\nTAR = gtar\nGZIP = --best\nSOURCES = $(make_SOURCES)\nOBJECTS = $(make_OBJECTS)\nHEADERS = $(wildcard $(srcdir)/*.h)\n\ndefault: all\n\n.SUFFIXES:\n.SUFFIXES: .c .dvi .info .o .obj .ps .texinfo .tex\n\nmostlyclean-hdr:\n\nclean-hdr:\n\ndistclean-hdr:\n\t-rm -f config.h\n\nmaintainer-clean-hdr:\n\nmostlyclean-binPROGRAMS:\n\nclean-binPROGRAMS:\n\t-test -z \"$(bin_PROGRAMS)\" || rm -f $(bin_PROGRAMS)\n\ndistclean-binPROGRAMS:\n\nmaintainer-clean-binPROGRAMS:\n\ninstall-binPROGRAMS: $(bin_PROGRAMS)\n\t@$(NORMAL_INSTALL)\n\t$(mkinstalldirs) $(DESTDIR)$(bindir)\n\t@list='$(bin_PROGRAMS)'; for p in $$list; do    if test -f $$p; then      echo \"  $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`\";       $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`;    else :; fi;  done\n\nuninstall-binPROGRAMS:\n\t$(NORMAL_UNINSTALL)\n\tlist='$(bin_PROGRAMS)'; for p in $$list; do    rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`.exe;  done\n\n.c.o:\n\t$(COMPILE) -c $<\n\nclean-noinstLIBRARIES:\n\t-test -z \"$(noinst_LIBRARIES)\" || rm -f $(noinst_LIBRARIES)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT) *$(EXEEXT) make.new core\n\nclean-compile:\n\ndistclean-compile:\n\t-rm -f *.tab.c *_tab.c\n\nmaintainer-clean-compile:\n\nmake$(EXEEXT): $(make_OBJECTS) $(make_DEPENDENCIES)\n\t@command.com /c if exist make del make\n\t@command.com /c if exist make.exe del make.exe\n\t$(LINK) $(make_LDFLAGS) $(make_OBJECTS) $(make_LDADD) $(LIBS)\n\nmake.info: make.texinfo\nmake.dvi: make.texinfo\n\n\nDVIPS = dvips\n\n.texinfo.info:\n\t@command.com /c if exist make.info* del make.info*\n\t@command.com /c if exist make.i* del make.i*\n\t$(MAKEINFO) -I$(srcdir) $< -o ./$@\n\n.texinfo:\n\t@command.com /c if exist make.info* del make.info*\n\t@command.com /c if exist make.i* del make.i*\n\t$(MAKEINFO) -I$(srcdir) $< -o ./$@\n\n.texinfo.dvi:\n\tTEXINPUTS=\"$(srcdir);$$TEXINPUTS\"    MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<\n\n\n.dvi.ps:\n\t$(DVIPS) $< -o $@\n\ninstall-info-am: $(INFO_DEPS)\n\t@$(NORMAL_INSTALL)\n\t$(mkinstalldirs) $(DESTDIR)$(infodir)\n\t@for file in $(INFO_DEPS) make.i; do    d=$(srcdir);    for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9] $$file[0-9] $$file[0-9][0-9]`; do      if test -f $$d/$$ifile; then        echo \" $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile\"; $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; else : ; fi;    done;  done\n\t@$(POST_INSTALL)\n\t@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then    for file in $(INFO_DEPS); do      echo \" install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file\";     install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;   done;  else : ; fi\n\nuninstall-info:\n\t$(PRE_UNINSTALL)\n\t@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then    ii=yes;  else ii=; fi;  for file in $(INFO_DEPS); do    test -z $ii || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file;  done\n\t$(NORMAL_UNINSTALL)\n\tfor file in $(INFO_DEPS) make.i; do    (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9] $$file[0-9] $$file[0-9][0-9]);  done\n\ndist-info: $(INFO_DEPS)\n\tfor base in $(INFO_DEPS); do    d=$(srcdir);    for file in `cd $$d && eval echo $$base*`; do      test -f $(distdir)/$$file      || ln $$d/$$file $(distdir)/$$file 2> /dev/null      || cp -p $$d/$$file $(distdir)/$$file;    done;  done\n\nmostlyclean-aminfo:\n\t-rm -f make.aux make.cp make.cps make.dvi make.fn make.fns make.ky \\\n\t  make.kys make.ps make.log make.pg make.toc make.tp make.tps \\\n\t  make.vr make.vrs make.op make.tr make.cv make.cn\n\nclean-aminfo:\n\ndistclean-aminfo:\n\nmaintainer-clean-aminfo:\n\tfor i in $(INFO_DEPS) make.i; do rm -f `eval echo $$i*`; done\n\ninstall-man1:\n\t$(mkinstalldirs) $(DESTDIR)$(man1dir)\n\t@list='$(man1_MANS)'; \\\n\tl2='$(man_MANS)'; for i in $$l2; do \\\n\t  case \"$$i\" in \\\n\t    *.1*) list=\"$$list $$i\" ;; \\\n\t  esac; \\\n\tdone; \\\n\tfor i in $$list; do \\\n\t  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \\\n\t  else file=$$i; fi; \\\n\t  ext=`echo $$i | sed -e 's/^.*\\\\.//'`; \\\n\t  inst=`echo $$i | sed -e 's/\\\\.[0-9a-z]*$$//'`; \\\n\t  inst=`echo $$inst | sed '$(transform)'`.$$ext; \\\n\t  echo \" $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst\"; \\\n\t  $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \\\n\tdone\n\nuninstall-man1:\n\t@list='$(man1_MANS)'; \\\n\tl2='$(man_MANS)'; for i in $$l2; do \\\n\t  case \"$$i\" in \\\n\t    *.1*) list=\"$$list $$i\" ;; \\\n\t  esac; \\\n\tdone; \\\n\tfor i in $$list; do \\\n\t  ext=`echo $$i | sed -e 's/^.*\\\\.//'`; \\\n\t  inst=`echo $$i | sed -e 's/\\\\.[0-9a-z]*$$//'`; \\\n\t  inst=`echo $$inst | sed '$(transform)'`.$$ext; \\\n\t  echo \" rm -f $(DESTDIR)$(man1dir)/$$inst\"; \\\n\t  rm -f $(DESTDIR)$(man1dir)/$$inst; \\\n\tdone\ninstall-man: $(MANS)\n\t@$(NORMAL_INSTALL)\n\t$(MAKE) install-man1\nuninstall-man:\n\t@$(NORMAL_UNINSTALL)\n\t$(MAKE) uninstall-man1\n\n# Assume that the only thing to do in glob is to build libglob.a,\n# but do a sanity check: if $SUBDIRS will ever have more than\n# a single directory, yell bloody murder.\nall-recursive:\nifeq ($(words $(SUBDIRS)), 1)\n\t@command.com /c if not exist glob\\\\nul md glob\n\t@echo Making all in $(SUBDIRS)\n\t$(MAKE) -C $(SUBDIRS) -f ../Makefile INCLUDES='-I$(srcdir) -I$(srcdir)/glob' DEFS='-I.. -I$(srcdir)' VPATH=$(srcdir)/glob libglob.a\nelse\n\t@echo FATAL: There is more than one directory in \"($(SUBDIRS))\"\n\t@$(EXIT_FAIL)\nendif\n\n$(SUBDIRS):\n\tcommand.com /c md $@\n\nlibglob.a: $(libglob_a_OBJECTS)\n\tcommand.com /c if exist libglob.a del libglob.a\n\t$(AR) cru libglob.a $(libglob_a_OBJECTS) $(libglob_a_LIBADD)\n\t$(RANLIB) libglob.a\n\nmostlyclean-recursive clean-recursive distclean-recursive \\\nmaintainer-clean-recursive check-recursive:\nifeq ($(words $(SUBDIRS)), 1)\n\t@echo Making $(shell echo $@ | sed s/-recursive//) in $(SUBDIRS)\n\t$(MAKE) -C $(SUBDIRS) -f ../Makefile $(shell echo $@ | sed s/-recursive//)-am\nelse\n\t@echo FATAL: There is more than one directory in \"($(SUBDIRS))\"\n\t@$(EXIT_FAIL)\nendif\n\ntags-in-glob: $(libglob_a_SOURCES)\n\tetags $(addprefix $(srcdir)/,$^) -o ./glob/TAGS\n\ntags-recursive:\nifeq ($(words $(SUBDIRS)), 1)\n\t$(MAKE) tags-in-glob\nelse\n\t@echo FATAL: There is more than one directory in \"($(SUBDIRS))\"\n\t@$(EXIT_FAIL)\nendif\n\ntags: TAGS\n\nID: $(HEADERS) $(SOURCES)\n\tmkid $(srcdir)/$(SOURCES) $(srcdir)/$(libglob_a_SOURCES) ./config.h $(HEADERS)\n\nTAGS: tags-recursive $(HEADERS) $(srcdir)/$(SOURCES) config.h $(TAGS_DEPENDENCIES)\n\tetags -i ./glob/TAGS $(ETAGS_ARGS) $(srcdir)/$(SOURCES) ./config.h $(HEADERS)\n\nmostlyclean-tags:\n\nclean-tags:\n\ndistclean-tags:\n\t-rm -f TAGS ID\n\nmaintainer-clean-tags:\n\ndistdir = $(PACKAGE)-$(VERSION)\ntop_distdir = $(distdir)\n\n# This target untars the dist file and tries a VPATH configuration.  Then\n# it guarantees that the distribution is self-contained by making another\n# tarfile.\ndistcheck: dist\n\trm -rf $(distdir)\n\tGZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz\n\tmkdir $(distdir)/=build\n\tmkdir $(distdir)/=inst\n\tdc_install_base=`cd $(distdir)/=inst && pwd`;  cd $(distdir)/=build    && ../configure --srcdir=.. --prefix=$$dc_install_base    && $(MAKE)    && $(MAKE) dvi    && $(MAKE) check    && $(MAKE) install    && $(MAKE) installcheck    && $(MAKE) dist\n\trm -rf $(distdir)\n\t@echo \"========================\";  echo \"$(distdir).tar.gz is ready for distribution\";  echo \"========================\"\ndist: distdir\n\t-chmod -R a+r $(distdir)\n\tGZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)\n\trm -rf $(distdir)\ndist-all: distdir\n\t-chmod -R a+r $(distdir)\n\tGZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)\n\trm -rf $(distdir)\ndistdir: $(DISTFILES)\n\trm -rf $(distdir)\n\tmkdir $(distdir)\n\t-chmod 777 $(distdir)\n\t@for file in $(DISTFILES); do d=$(srcdir); test -f $(distdir)/$$file || ln $$d/$$file $(distdir)/$$file 2> /dev/null || cp -p $$d/$$file $(distdir)/$$file; done; for subdir in $(SUBDIRS); do test -d $(distdir)/$$subdir || mkdir $(distdir)/$$subdir || exit 1; chmod 777 $(distdir)/$$subdir; (cd $$subdir && $(MAKE) top_distdir=../$(top_distdir)/$$subdir distdir=../$(distdir)/$$subdir distdir) || exit 1; done\n\t$(MAKE) top_distdir=\"$(top_distdir)\" distdir=\"$(distdir)\" dist-info\n\t$(MAKE) top_distdir=\"$(top_distdir)\" distdir=\"$(distdir)\" dist-hook\n\ninfo: $(INFO_DEPS) info-recursive\ndvi: $(DVIS) dvi-recursive\ncheck: all-am check-recursive check-local\n\t@:\ninstallcheck: installcheck-recursive\nall-recursive-am: config.h\n\t$(MAKE) all-recursive\n\nall-am: Makefile $(INFO_DEPS) $(PROGRAMS) config.h\n\ninstall-exec-am: install-binPROGRAMS\n\ninstall-data-am: install-info-am\n\nuninstall-am: uninstall-binPROGRAMS uninstall-info\n\ninstall-exec: install-exec-recursive install-exec-am\n\t@$(NORMAL_INSTALL)\n\ninstall-data: install-data-recursive install-data-am\n\t@$(NORMAL_INSTALL)\n\ninstall-recursive uninstall-recursive:\n\t@:\n\ninstall: install-recursive install-exec-am install-data-am\n\t@:\n\nuninstall: uninstall-recursive uninstall-am\n\nall: all-recursive-am all-am\n\ninstall-strip:\n\t$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install\ninstalldirs: installdirs-recursive\n\t$(mkinstalldirs)  $(bindir) $(infodir)\n\n\nmostlyclean-generic:\n\t-test -z \"$(MOSTLYCLEANFILES)\" || rm -f $(MOSTLYCLEANFILES)\n\nclean-generic:\n\t-test -z \"$(CLEANFILES)\" || rm -f $(CLEANFILES)\n\ndistclean-generic:\n\t-rm -f Makefile $(DISTCLEANFILES)\n\t-rm -f config.cache config.log stamp-h stamp-h[0-9]*\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t-test -z \"$(MAINTAINERCLEANFILES)\" || rm -f $(MAINTAINERCLEANFILES)\n\t-test -z \"$(BUILT_SOURCES)\" || rm -f $(BUILT_SOURCES)\nmostlyclean-am:  mostlyclean-hdr mostlyclean-binPROGRAMS  mostlyclean-compile mostlyclean-aminfo mostlyclean-tags  mostlyclean-generic\n\nclean-am:  clean-hdr clean-binPROGRAMS clean-compile clean-aminfo  clean-tags clean-generic mostlyclean-am\n\ndistclean-am:  distclean-hdr distclean-binPROGRAMS distclean-compile  distclean-aminfo distclean-tags distclean-generic  clean-am\n\nmaintainer-clean-am:  maintainer-clean-hdr maintainer-clean-binPROGRAMS  maintainer-clean-compile maintainer-clean-aminfo  maintainer-clean-tags maintainer-clean-generic  distclean-am\n\nmostlyclean:  mostlyclean-recursive mostlyclean-am\n\nclean: clean-noinstLIBRARIES clean-recursive clean-am\n\ndistclean:  distclean-recursive distclean-am\n\trm -f config.status\n\nmaintainer-clean:  maintainer-clean-recursive maintainer-clean-am\n\t@echo \"This command is intended for maintainers to use;\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\n\trm -f config.status\n\n.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \\\nmaintainer-clean-hdr mostlyclean-binPROGRAMS distclean-binPROGRAMS \\\nclean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \\\ninstall-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \\\nmaintainer-clean-compile install-info-am uninstall-info \\\nmostlyclean-aminfo distclean-aminfo clean-aminfo \\\nmaintainer-clean-aminfo install-data-recursive uninstall-data-recursive \\\ninstall-exec-recursive uninstall-exec-recursive installdirs-recursive \\\nuninstalldirs-recursive all-recursive check-recursive check-am \\\ninstallcheck-recursive info-recursive dvi-recursive \\\nmostlyclean-recursive distclean-recursive clean-recursive \\\nmaintainer-clean-recursive tags tags-recursive mostlyclean-tags \\\ndistclean-tags clean-tags maintainer-clean-tags distdir \\\nmostlyclean-depend distclean-depend clean-depend \\\nmaintainer-clean-depend info dvi check-local installcheck \\\nall-recursive-am all-am install-exec-am install-data-am uninstall-am \\\ninstall-exec install-data install uninstall all installdirs \\\nmostlyclean-generic distclean-generic clean-generic \\\nmaintainer-clean-generic clean mostlyclean distclean maintainer-clean\n\n\n# --------------- Local DIST Section\n\n# Install the w32 subdirectory\n#\ndist-hook:\n\t(cd $(srcdir); \\\n\t w32=`find w32 -follow \\( -name CVS -prune \\) -o -type f -print`; \\\n\t tar chf - $$w32) \\\n\t| (cd $(distdir); tar xfBp -)\n\n# --------------- Local CHECK Section\n\n# Note: check-loadavg is NOT a prerequisite of check-local, since\n# there's no uptime utility, and the test it does doesn't make sense\n# on MSDOS anyway.\ncheck-local: check-shell check-regression\n\t@banner=\" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) \"; \\\n\tdashes=`echo \"$$banner\" | sed s/./=/g`; \\\n\techo; \\\n\techo \"$$dashes\"; \\\n\techo \"$$banner\"; \\\n\techo \"$$dashes\"; \\\n\techo\n\n.PHONY: check-loadavg check-shell check-regression\n\n# > check-shell\n#\n# check-shell is designed to fail if they don't have a Unixy shell\n# installed.  The test suite requires such a shell.\ncheck-shell:\n\t@echo If Make says Error -1, you do not have Unix-style shell installed\n\t@foo=bar.exe :\n\n# > check-loadavg\n#\nloadavg: loadavg.c config.h\n\t@rm -f loadavg\n\t$(LINK) -DTEST $(make_LDFLAGS) loadavg.c $(LIBS)\n# We copy getloadavg.c into a different file rather than compiling it\n# directly because some compilers clobber getloadavg.o in the process.\nloadavg.c: getloadavg.c\n\tln $(srcdir)/getloadavg.c loadavg.c || \\\n\tcp $(srcdir)/getloadavg.c loadavg.c\ncheck-loadavg: loadavg\n\t@echo The system uptime program believes the load average to be:\n\t-uptime\n\t@echo The GNU load average checking code believes:\n\t-./loadavg\n\n# > check-regression\n#\n# Look for the make test suite, and run it if found.  Look in MAKE_TEST if\n# specified, or else in the srcdir or the distdir, their parents, and _their_\n# parents.\n#\ncheck-regression:\n\t@if test -f \"$(srcdir)/tests/run_make_tests\"; then \\\n\t  if $(PERL) -v >/dev/null 2>&1; then \\\n\t    case `cd $(srcdir); pwd` in `pwd`) : ;; \\\n\t      *) test -d tests || mkdir tests; \\\n\t\t for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \\\n\t\t   rm -rf tests/$$f; cp -pr $(srcdir)/tests/$$f tests; \\\n\t\t done ;; \\\n\t    esac; \\\n\t    echo \"cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS)\"; \\\n\t    cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS); \\\n\t  else \\\n\t    echo \"Can't find a working Perl ($(PERL)); the test suite requires Perl.\"; \\\n\t  fi; \\\n\t else \\\n\t  echo \"Can't find the GNU Make test suite ($(srcdir)/tests).\"; \\\n\t fi\n\n# --------------- Maintainer's Section\n\n# Note this requires GNU make.  Not to worry, since it will only be included\n# in the Makefile if we're in the maintainer's environment.\n#include $(srcdir)/maintMakefile\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n\n# --------------- DEPENDENCIES\n\n# --------------- DEPENDENCIES\n#\n\n# .deps/alloca.Po\n# dummy\n\n# .deps/ar.Po\nar.o ar.o: ar.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h dep.h \\\n\n# .deps/arscan.Po\narscan.o arscan.o: arscan.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/commands.Po\ncommands.o commands.o: commands.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h\n\n# .deps/default.Po\ndefault.o default.o: default.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h rule.h \\\n  dep.h job.h commands.h\n\n# .deps/dir.Po\ndir.o dir.o: dir.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h \\\n\n# .deps/expand.Po\nexpand.o expand.o: expand.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h \\\n  job.h commands.h \\\n  variable.h rule.h\n\n# .deps/file.Po\nfile.o file.o: file.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h debug.h\n\n# .deps/function.Po\nfunction.o function.o: function.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h dep.h \\\n  job.h commands.h debug.h\n\n# .deps/getloadavg.Po\n# dummy\n\n# .deps/getopt.Po\ngetopt.o getopt.o: getopt.c config.h \\\n\n# .deps/getopt1.Po\ngetopt1.o getopt1.o: getopt1.c config.h getopt.h \\\n\n# .deps/hash.Po\nhash.o hash.o: hash.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/implicit.Po\nimplicit.o implicit.o: implicit.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h rule.h dep.h debug.h \\\n  variable.h job.h \\\n  commands.h\n\n# .deps/job.Po\njob.o job.o: job.c make.h config.h \\\n  getopt.h \\\n  gettext.h job.h \\\n  debug.h filedef.h hash.h \\\n  commands.h variable.h \\\n\n# .deps/loadavg-getloadavg.Po\nloadavg-getloadavg.o loadavg-getloadavg.o: getloadavg.c config.h \\\n  make.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/main.Po\nmain.o main.o: main.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h rule.h \\\n  debug.h getopt.h \\\n\n# .deps/misc.Po\nmisc.o misc.o: misc.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h debug.h\n\n# .deps/read.Po\nread.o read.o: read.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n  dep.h filedef.h hash.h job.h \\\n  commands.h variable.h rule.h debug.h \\\n\n# .deps/remake.Po\nremake.o remake.o: remake.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h dep.h \\\n  variable.h debug.h\n\n# .deps/remote-cstms.Po\n# dummy\n\n# .deps/remote-stub.Po\nremote-stub.o remote-stub.o: remote-stub.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h\n\n# .deps/rule.Po\nrule.o rule.o: rule.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h job.h \\\n  commands.h variable.h \\\n  rule.h\n\n# .deps/signame.Po\nsigname.o signame.o: signame.c make.h config.h \\\n  getopt.h \\\n  gettext.h\n\n# .deps/strcache.Po\nstrcache.o strcache.o: strcache.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/variable.Po\nvariable.o variable.o: variable.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h rule.h\n\n# .deps/version.Po\nversion.o version.o: version.c config.h\n\n# .deps/vmsjobs.Po\n# dummy\n\n# .deps/vpath.Po\nvpath.o vpath.o: vpath.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h\n"
  },
  {
    "path": "sources/host-tools/make-3.81/Makefile.am",
    "content": "# This is a -*-Makefile-*-, or close enough\n#\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\n# Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAUTOMAKE_OPTIONS = 1.8 dist-bzip2 check-news ansi2knr\nACLOCAL_AMFLAGS\t=  -I config\n\nMAKE_HOST =\t@MAKE_HOST@\n\n# Only process if target is MS-Windows\nif WINDOWSENV\n  MAYBE_W32 =\tw32\n  W32INC =\t-I $(top_srcdir)/w32/include\n  W32LIB =\t-Lw32 -lw32\nendif\n\nSUBDIRS =\tglob config po doc $(MAYBE_W32)\n\nbin_PROGRAMS =\tmake\n\nif USE_CUSTOMS\n  remote =\tremote-cstms.c\nelse\n  remote =\tremote-stub.c\nendif\n\n\nmake_SOURCES =\tar.c arscan.c commands.c default.c dir.c expand.c file.c \\\n\t\tfunction.c getopt.c getopt1.c implicit.c job.c main.c \\\n\t\tmisc.c read.c remake.c $(remote) rule.c signame.c \\\n\t\tstrcache.c variable.c version.c vpath.c hash.c\n\nEXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cstms.c\n\nnoinst_HEADERS = commands.h dep.h filedef.h job.h make.h rule.h variable.h \\\n\t\tdebug.h getopt.h gettext.h hash.h\n\nmake_LDADD =\t@LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@\n# Only process if target is MS-Windows\nif WINDOWSENV\n    make_LDADD += $(W32LIB)\nendif\n\nman_MANS =\tmake.1\n\nDEFS =\t\t-DLOCALEDIR=\\\"$(localedir)\\\" -DLIBDIR=\\\"$(libdir)\\\" -DINCLUDEDIR=\\\"$(includedir)\\\" @DEFS@\n\nAM_CPPFLAGS =\t$(GLOBINC)\n# Only process if target is MS-Windows\nif WINDOWSENV\n    AM_CPPFLAGS +=\t$(W32INC)\nendif\n\n\n# Extra stuff to include in the distribution.\n\nEXTRA_DIST =\tREADME build.sh.in $(man_MANS) \\\n\t\tREADME.customs README.OS2 \\\n\t\tSCOPTIONS SMakefile \\\n\t\tREADME.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \\\n\t\tREADME.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\\\n\t\tREADME.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \\\n\t\tmake_msvc_net2003.sln make_msvc_net2003.vcproj \\\n\t\treadme.vms makefile.vms makefile.com config.h-vms \\\n\t\tvmsdir.h vmsfunctions.c vmsify.c\n\n# This is built during configure, but behind configure's back\n\nDISTCLEANFILES = build.sh\n\n# Forward targets\n\nhtml:\n\tcd doc && $(MAKE) $(AM_MAKEFLAGS) $@\n\n.PHONY: html\n\n# --------------- Internationalization Section\n\nlocaledir =\t$(datadir)/locale\n\n# --------------- Local INSTALL Section\n\n# If necessary, change the gid of the app and turn on the setgid flag.\n#\n\n# Whether or not make needs to be installed setgid.\n# The value should be either `true' or `false'.\n# On many systems, the getloadavg function (used to implement the `-l'\n# switch) will not work unless make is installed setgid kmem.\n#\ninst_setgid = @NEED_SETGID@\n\n# Install make setgid to this group so it can get the load average.\n#\ninst_group = @KMEM_GROUP@\n\ninstall-exec-local:\n\t@if $(inst_setgid); then \\\n\t   app=$(DESTDIR)$(bindir)/`echo $(bin_PROGRAMS)|sed '$(transform)'`; \\\n\t   if chgrp $(inst_group) $$app && chmod g+s $$app; then \\\n\t     echo \"chgrp $(inst_group) $$app && chmod g+s $$app\"; \\\n\t   else \\\n\t     echo \"$$app needs to be owned by group $(inst_group) and setgid;\"; \\\n\t     echo \"otherwise the \\`-l' option will probably not work.\"; \\\n\t     echo \"You may need special privileges to complete the installation\"; \\\n\t     echo \"of $$app.\"; \\\n\t   fi; \\\n\t else true; fi\n\n# --------------- Local DIST Section\n\n# Install the w32 and tests subdirectories\n#\ndist-hook:\n\t(cd $(srcdir); \\\n\t sub=`find w32 tests -follow \\( -name CVS -prune -o -name .cvsignore -o -name work -prune \\) -o \\( -name \\*.orig -o -name \\*.rej -o -name \\*~ -prune \\) -o -type f -print`; \\\n\t tar chf - $$sub) \\\n\t| (cd $(distdir); tar xfBp -)\n\n\n# --------------- Local CHECK Section\n\ncheck-local: check-regression check-loadavg\n\t@banner=\" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) \"; \\\n\tdashes=`echo \"$$banner\" | sed s/./=/g`; \\\n\techo; \\\n\techo \"$$dashes\"; \\\n\techo \"$$banner\"; \\\n\techo \"$$dashes\"; \\\n\techo\n\n.PHONY: check-loadavg check-regression\n\ncheck-loadavg: loadavg$(EXEEXT)\n\t@echo The system uptime program believes the load average to be:\n\t-uptime\n\t@echo The GNU load average checking code thinks:\n\t-./loadavg$(EXEEXT)\n\n# The loadavg function is invoked during \"make check\" to test getloadavg.\ncheck_PROGRAMS = loadavg\nnodist_loadavg_SOURCES = getloadavg.c\nloadavg_CPPFLAGS = -DTEST\nloadavg_LDADD = @GETLOADAVG_LIBS@\n\n# > check-regression\n#\n# Look for the make test suite, and run it if found and we can find perl.\n# If we're building outside the tree, we use symlinks to make a local copy of\n# the test suite.  Unfortunately the test suite itself isn't localizable yet.\n#\nMAKETESTFLAGS =\n\ncheck-regression:\n\t@if test -f \"$(srcdir)/tests/run_make_tests\"; then \\\n\t  if $(PERL) -v >/dev/null 2>&1; then \\\n\t    case `cd $(srcdir); pwd` in `pwd`) : ;; \\\n\t      *) test -d tests || mkdir tests; \\\n\t\t rm -f srctests; \\\n\t\t if ln -s \"$(srcdir)/tests\" srctests; then \\\n\t\t   for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \\\n\t\t     rm -f tests/$$f; ln -s ../srctests/$$f tests; \\\n\t\t   done; fi ;; \\\n\t    esac; \\\n\t    echo \"cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS)\"; \\\n\t    cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS); \\\n\t  else \\\n\t    echo \"Can't find a working Perl ($(PERL)); the test suite requires Perl.\"; \\\n\t  fi; \\\n\t else \\\n\t  echo \"Can't find the GNU Make test suite ($(srcdir)/tests).\"; \\\n\t fi\n\n\n# --------------- Maintainer's Section\n\n# Tell automake that I haven't forgotten about this file and it will be\n# created before we build a distribution (see maintMakefile in the CVS\n# distribution).\n\nREADME:\n\n@MAINT_MAKEFILE@\n"
  },
  {
    "path": "sources/host-tools/make-3.81/Makefile.ami",
    "content": "# -*-Makefile-*- for GNU make on Amiga\n#\n# NOTE: If you have no `make' program at all to process this makefile, run\n# `build.sh' instead.\n#\n# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n#\n#\tMakefile for GNU Make\n#\n\nCC = sc\nRM = delete\n\nCFLAGS =\nCPPFLAGS =\nLDFLAGS =\n\n# Define these for your system as follows:\n#\t-DNO_ARCHIVES\t\tTo disable `ar' archive support.\n#\t-DNO_FLOAT\t\tTo avoid using floating-point numbers.\n#\t-DENUM_BITFIELDS\tIf the compiler isn't GCC but groks enum foo:2.\n#\t\t\t\tSome compilers apparently accept this\n#\t\t\t\twithout complaint but produce losing code,\n#\t\t\t\tso beware.\n# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.\n# See also `config.h'.\ndefines =\n\n# Which flavor of remote job execution support to use.\n# The code is found in `remote-$(REMOTE).c'.\nREMOTE = stub\n\n# If you are using the GNU C library, or have the GNU getopt functions in\n# your C library, you can comment these out.\nGETOPT = getopt.o getopt1.o\nGETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h\n\n# If you are using the GNU C library, or have the GNU glob functions in\n# your C library, you can comment this out.  GNU make uses special hooks\n# into the glob functions to be more efficient (by using make's directory\n# cache for globbing), so you must use the GNU functions even if your\n# system's C library has the 1003.2 glob functions already.  Also, the glob\n# functions in the AIX and HPUX C libraries are said to be buggy.\nGLOB = glob/glob.lib\n\n# If your system doesn't have alloca, or the one provided is bad, define this.\nALLOCA = alloca.o\nALLOCA_SRC = $(srcdir)alloca.c\n\n# If your system needs extra libraries loaded in, define them here.\n# System V probably need -lPW for alloca.  HP-UX 7.0's alloca in\n# libPW.a is broken on HP9000s300 and HP9000s400 machines.  Use\n# alloca.c instead on those machines.\nLOADLIBES =\n\n# Any extra object files your system needs.\nextras = amiga.o\n\n# Common prefix for machine-independent installed files.\nprefix =\n# Common prefix for machine-dependent installed files.\nexec_prefix =\n\n# Directory to install `make' in.\nbindir = sc:c\n# Directory to find libraries in for `-lXXX'.\nlibdir = lib:\n# Directory to search by default for included makefiles.\nincludedir = include:\n# Directory to install the Info files in.\ninfodir = doc:\n# Directory to install the man page in.\nmandir = t:\n# Number to put on the man page filename.\nmanext = 1\n# Prefix to put on installed `make' binary file name.\nbinprefix =\n# Prefix to put on installed `make' man page file name.\nmanprefix = $(binprefix)\n\n# Whether or not make needs to be installed setgid.\n# The value should be either `true' or `false'.\n# On many systems, the getloadavg function (used to implement the `-l'\n# switch) will not work unless make is installed setgid kmem.\ninstall_setgid = false\n# Install make setgid to this group so it can read /dev/kmem.\ngroup = sys\n\n# Program to install `make'.\nINSTALL_PROGRAM = copy\n# Program to install the man page.\nINSTALL_DATA = copy\n# Generic install program.\nINSTALL = copy\n\n# Program to format Texinfo source into Info files.\nMAKEINFO = makeinfo\n# Program to format Texinfo source into DVI files.\nTEXI2DVI = texi2dvi\n\n# Programs to make tags files.\nETAGS = etags -w\nCTAGS = ctags -w\n\nobjs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o\t\\\n       rule.o implicit.o default.o variable.o expand.o function.o\t\\\n       vpath.o version.o ar.o arscan.o signame.o strcache.o hash.o      \\\n       remote-$(REMOTE).o $(GETOPT) $(ALLOCA) $(extras)\nsrcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c             \\\n       $(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c         \\\n       $(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c             \\\n       $(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c        \\\n       $(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c     \\\n       $(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c           \\\n       $(srcdir)remote-$(REMOTE).c                                     \\\n       $(srcdir)ar.c $(srcdir)arscan.c $(srcdir)strcache.c              \\\n       $(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC)            \\\n       $(srcdir)commands.h $(srcdir)dep.h $(srcdir)filedep.h            \\\n       $(srcdir)job.h $(srcdir)make.h $(srcdir)rule.h                \\\n       $(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in\n\n\n.SUFFIXES:\n.SUFFIXES: .o .c .h .ps .dvi .info .texinfo\n\nall: make\ninfo: make.info\ndvi: make.dvi\n# Some makes apparently use .PHONY as the default goal if it is before `all'.\n.PHONY: all check info dvi\n\nmake.info: make.texinfo\n\t$(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info\n\nmake.dvi: make.texinfo\n\t$(TEXI2DVI) $(srcdir)make.texinfo\n\nmake.ps: make.dvi\n\tdvi2ps make.dvi > make.ps\n\nmake: $(objs) $(GLOB)\n\t$(CC) Link $(LDFLAGS) $(objs) Lib $(GLOB) $(LOADLIBES) To make.new\n\t-delete make\n\trename make.new make\n\nTMPFILE = t:Make$$\n\n$(GLOB):\n\tcd glob @@\\\n\t$(MAKE) -$(MAKEFLAGS) -f Makefile\n\n# -I. is needed to find config.h in the build directory.\nOUTPUT_OPTION =\n.c.o:\n\t$(CC) $(defines) IDir \"\" IDir glob \\\n\t      $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)\n\n# For some losing Unix makes.\nSHELL = /bin/sh\n#@SET_MAKE@\n\nglob/libglob.a: FORCE config.h\n\tcd glob; $(MAKE) libglob.a\nFORCE:\n\ntagsrcs = $(srcs) $(srcdir)remote-*.c\n\n.PHONY: install installdirs\ninstall: installdirs \\\n\t $(bindir)$(binprefix)make $(infodir)make.info \\\n\t $(mandir)$(manprefix)make.$(manext)\n\ninstalldirs:\n\t$(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(infodir) $(mandir)\n\n$(bindir)$(binprefix)make: make\n\t$(INSTALL_PROGRAM) make $@.new\n\t@if $(install_setgid); then \\\n\t   if chgrp $(group) $@.new && chmod g+s $@.new; then \\\n\t     echo \"chgrp $(group) $@.new && chmod g+s $@.new\"; \\\n\t   else \\\n\t     echo \"$@ needs to be owned by group $(group) and setgid;\"; \\\n\t     echo \"otherwise the \\`-l' option will probably not work.\"; \\\n\t     echo \"You may need special privileges to install $@.\"; \\\n\t   fi; \\\n\t else true; fi\n# Some systems can't deal with renaming onto a running binary.\n\t-$(RM) $@.old\n\t-mv $@ $@.old\n\tmv $@.new $@\n\n$(infodir)make.info: make.info\n\tif [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \\\n\tfor file in $${dir}/make.info*; do \\\n\t  name=\"`basename $$file`\"; \\\n\t  $(INSTALL_DATA) $$file \\\n\t    `echo $@ | sed \"s,make.info\\$$,$$name,\"`; \\\n\tdone\n# Run install-info only if it exists.\n# Use `if' instead of just prepending `-' to the\n# line so we notice real errors from install-info.\n# We use `$(SHELL) -c' because some shells do not\n# fail gracefully when there is an unknown command.\n\tif $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \\\n\t  if [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \\\n\t  install-info --infodir=$(infodir) $$dir/make.info; \\\n\telse true; fi\n\n$(mandir)$(manprefix)make.$(manext): make.man\n\t$(INSTALL_DATA) $(srcdir)make.man $@\n\n\nloadavg: loadavg.c config.h\n\t$(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \\\n\t      loadavg.c $(LOADLIBES) -o $@\n# We copy getloadavg.c into a different file rather than compiling it\n# directly because some compilers clobber getloadavg.o in the process.\nloadavg.c: getloadavg.c\n\tln $(srcdir)getloadavg.c loadavg.c || \\\n\tcp $(srcdir)getloadavg.c loadavg.c\ncheck-loadavg: loadavg\n\t@echo The system uptime program believes the load average to be:\n\t-uptime\n\t@echo The GNU load average checking code believes:\n\t./loadavg\ncheck: check-loadavg\n\n\n.PHONY: clean realclean distclean mostlyclean\nclean: glob-clean\n\t-$(RM) make loadavg \"#?.o\" core make.dvi\n\ndistclean: clean glob-realclean\n\t-$(RM) Makefile config.h config.status build.sh\n\t-$(RM) config.log config.cache\n\t-$(RM) TAGS tags\n\t-$(RM) make.?? make.??s make.log make.toc make.*aux\n\t-$(RM) loadavg.c\n\nrealclean: distclean\n\t-$(RM) make.info*\nmostlyclean: clean\n\n.PHONY: glob-clean glob-realclean\nglob-clean glob-realclean:\n\tcd glob @@\\\n\t$(MAKE) $@\n\n# This tells versions [3.59,3.63) of GNU make not to export all variables.\n.NOEXPORT:\n\n# The automatically generated dependencies below may omit config.h\n# because it is included with ``#include <config.h>'' rather than\n# ``#include \"config.h\"''.  So we add the explicit dependency to make sure.\n$(objs): config.h\n\n# Automatically generated dependencies will be put at the end of the file.\n\n# Automatically generated dependencies.\ncommands.o: commands.c make.h dep.h filedef.h variable.h job.h \\\n commands.h\njob.o: job.c make.h job.h filedef.h commands.h variable.h\ndir.o: dir.c make.h\nfile.o: file.c make.h dep.h filedef.h job.h commands.h variable.h\nmisc.o: misc.c make.h dep.h\nmain.o: main.c make.h dep.h filedef.h variable.h job.h commands.h \\\n getopt.h\nread.o: read.c make.h dep.h filedef.h job.h commands.h variable.h \\\n glob/glob.h\nremake.o: remake.c make.h filedef.h job.h commands.h dep.h\nrule.o: rule.c make.h dep.h filedef.h job.h commands.h variable.h \\\n rule.h\nimplicit.o: implicit.c make.h rule.h dep.h filedef.h\ndefault.o: default.c make.h rule.h dep.h filedef.h job.h commands.h \\\n variable.h\nvariable.o: variable.c make.h dep.h filedef.h job.h commands.h \\\n variable.h\nexpand.o: expand.c make.h filedef.h job.h commands.h variable.h\nfunction.o: function.c make.h filedef.h variable.h dep.h job.h \\\n commands.h amiga.h\nvpath.o: vpath.c make.h filedef.h variable.h\nstrcache.o: strcache.c make.h hash.h\nversion.o: version.c\nar.o: ar.c make.h filedef.h dep.h\narscan.o: arscan.c make.h\nsigname.o: signame.c signame.h\nremote-stub.o: remote-stub.c make.h filedef.h job.h commands.h\ngetopt.o: getopt.c\ngetopt1.o : getopt1.c getopt.h\ngetloadavg.o: getloadavg.c\namiga.o: amiga.c make.h variable.h amiga.h\n"
  },
  {
    "path": "sources/host-tools/make-3.81/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n# This is a -*-Makefile-*-, or close enough\n#\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\n# Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = .\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nANSI2KNR = @ANSI2KNR@\nbin_PROGRAMS = make$(EXEEXT)\n# Only process if target is MS-Windows\n@WINDOWSENV_TRUE@am__append_1 = $(W32LIB)\n# Only process if target is MS-Windows\n@WINDOWSENV_TRUE@am__append_2 = $(W32INC)\ncheck_PROGRAMS = loadavg$(EXEEXT)\nsubdir = .\nDIST_COMMON = README $(am__configure_deps) $(noinst_HEADERS) \\\n\t$(srcdir)/Makefile.am $(srcdir)/Makefile.in \\\n\t$(srcdir)/config.h.in $(top_srcdir)/configure ABOUT-NLS \\\n\tAUTHORS COPYING ChangeLog INSTALL NEWS alloca.c ansi2knr.1 \\\n\tansi2knr.c getloadavg.c\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nam__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \\\n configure.lineno configure.status.lineno\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = config.h\nCONFIG_CLEAN_FILES =\nam__installdirs = \"$(DESTDIR)$(bindir)\" \"$(DESTDIR)$(man1dir)\"\nbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)\nPROGRAMS = $(bin_PROGRAMS)\nnodist_loadavg_OBJECTS = loadavg-getloadavg$U.$(OBJEXT)\nloadavg_OBJECTS = $(nodist_loadavg_OBJECTS)\nloadavg_DEPENDENCIES =\nam__make_SOURCES_DIST = ar.c arscan.c commands.c default.c dir.c \\\n\texpand.c file.c function.c getopt.c getopt1.c implicit.c job.c \\\n\tmain.c misc.c read.c remake.c remote-stub.c remote-cstms.c \\\n\trule.c signame.c strcache.c variable.c version.c vpath.c \\\n\thash.c\n@USE_CUSTOMS_FALSE@am__objects_1 = remote-stub$U.$(OBJEXT)\n@USE_CUSTOMS_TRUE@am__objects_1 = remote-cstms$U.$(OBJEXT)\nam_make_OBJECTS = ar$U.$(OBJEXT) arscan$U.$(OBJEXT) \\\n\tcommands$U.$(OBJEXT) default$U.$(OBJEXT) dir$U.$(OBJEXT) \\\n\texpand$U.$(OBJEXT) file$U.$(OBJEXT) function$U.$(OBJEXT) \\\n\tgetopt$U.$(OBJEXT) getopt1$U.$(OBJEXT) implicit$U.$(OBJEXT) \\\n\tjob$U.$(OBJEXT) main$U.$(OBJEXT) misc$U.$(OBJEXT) \\\n\tread$U.$(OBJEXT) remake$U.$(OBJEXT) $(am__objects_1) \\\n\trule$U.$(OBJEXT) signame$U.$(OBJEXT) strcache$U.$(OBJEXT) \\\n\tvariable$U.$(OBJEXT) version$U.$(OBJEXT) vpath$U.$(OBJEXT) \\\n\thash$U.$(OBJEXT)\nmake_OBJECTS = $(am_make_OBJECTS)\nam__DEPENDENCIES_1 =\n@WINDOWSENV_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)\nmake_DEPENDENCIES = @LIBOBJS@ @ALLOCA@ $(am__DEPENDENCIES_1) \\\n\t$(am__DEPENDENCIES_2)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I.\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(nodist_loadavg_SOURCES) $(make_SOURCES) \\\n\t$(EXTRA_make_SOURCES)\nDIST_SOURCES = $(am__make_SOURCES_DIST) $(EXTRA_make_SOURCES)\nRECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \\\n\thtml-recursive info-recursive install-data-recursive \\\n\tinstall-exec-recursive install-info-recursive \\\n\tinstall-recursive installcheck-recursive installdirs-recursive \\\n\tpdf-recursive ps-recursive uninstall-info-recursive \\\n\tuninstall-recursive\nman1dir = $(mandir)/man1\nNROFF = nroff\nMANS = $(man_MANS)\nHEADERS = $(noinst_HEADERS)\nETAGS = etags\nCTAGS = ctags\nDIST_SUBDIRS = glob config po doc w32\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\ndistdir = $(PACKAGE)-$(VERSION)\ntop_distdir = $(distdir)\nam__remove_distdir = \\\n  { test ! -d $(distdir) \\\n    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \\\n         && rm -fr $(distdir); }; }\nDIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2\nGZIP_ENV = --best\ndistuninstallcheck_listfiles = find . -type f -print\ndistcleancheck_listfiles = find . -type f -print\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = -DLOCALEDIR=\\\"$(localedir)\\\" -DLIBDIR=\\\"$(libdir)\\\" -DINCLUDEDIR=\\\"$(includedir)\\\" @DEFS@\nDEPDIR = @DEPDIR@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nGETLOADAVG_LIBS = @GETLOADAVG_LIBS@\nGLOBINC = @GLOBINC@\nGLOBLIB = @GLOBLIB@\nGMSGFMT = @GMSGFMT@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nINTLLIBS = @INTLLIBS@\nKMEM_GROUP = @KMEM_GROUP@\nLDFLAGS = @LDFLAGS@\nLIBICONV = @LIBICONV@\nLIBINTL = @LIBINTL@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLTLIBICONV = @LTLIBICONV@\nLTLIBINTL = @LTLIBINTL@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMAKE_HOST = @MAKE_HOST@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nMSGFMT = @MSGFMT@\nMSGMERGE = @MSGMERGE@\nNEED_SETGID = @NEED_SETGID@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPOSUB = @POSUB@\nRANLIB = @RANLIB@\nREMOTE = @REMOTE@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nU = @U@\nUSE_CUSTOMS_FALSE = @USE_CUSTOMS_FALSE@\nUSE_CUSTOMS_TRUE = @USE_CUSTOMS_TRUE@\nUSE_LOCAL_GLOB_FALSE = @USE_LOCAL_GLOB_FALSE@\nUSE_LOCAL_GLOB_TRUE = @USE_LOCAL_GLOB_TRUE@\nUSE_NLS = @USE_NLS@\nVERSION = @VERSION@\nWINDOWSENV_FALSE = @WINDOWSENV_FALSE@\nWINDOWSENV_TRUE = @WINDOWSENV_TRUE@\nXGETTEXT = @XGETTEXT@\nac_ct_CC = @ac_ct_CC@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nAUTOMAKE_OPTIONS = 1.8 dist-bzip2 check-news ansi2knr\nACLOCAL_AMFLAGS = -I config\n\n# Only process if target is MS-Windows\n@WINDOWSENV_TRUE@MAYBE_W32 = w32\n@WINDOWSENV_TRUE@W32INC = -I $(top_srcdir)/w32/include\n@WINDOWSENV_TRUE@W32LIB = -Lw32 -lw32\nSUBDIRS = glob config po doc $(MAYBE_W32)\n@USE_CUSTOMS_FALSE@remote = remote-stub.c\n@USE_CUSTOMS_TRUE@remote = remote-cstms.c\nmake_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c \\\n\t\tfunction.c getopt.c getopt1.c implicit.c job.c main.c \\\n\t\tmisc.c read.c remake.c $(remote) rule.c signame.c \\\n\t\tstrcache.c variable.c version.c vpath.c hash.c\n\nEXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cstms.c\nnoinst_HEADERS = commands.h dep.h filedef.h job.h make.h rule.h variable.h \\\n\t\tdebug.h getopt.h gettext.h hash.h\n\nmake_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ \\\n\t$(am__append_1)\nman_MANS = make.1\nAM_CPPFLAGS = $(GLOBINC) $(am__append_2)\n\n# Extra stuff to include in the distribution.\nEXTRA_DIST = README build.sh.in $(man_MANS) \\\n\t\tREADME.customs README.OS2 \\\n\t\tSCOPTIONS SMakefile \\\n\t\tREADME.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \\\n\t\tREADME.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\\\n\t\tREADME.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \\\n\t\tmake_msvc_net2003.sln make_msvc_net2003.vcproj \\\n\t\treadme.vms makefile.vms makefile.com config.h-vms \\\n\t\tvmsdir.h vmsfunctions.c vmsify.c\n\n\n# This is built during configure, but behind configure's back\nDISTCLEANFILES = build.sh\n\n# --------------- Internationalization Section\nlocaledir = $(datadir)/locale\n\n# --------------- Local INSTALL Section\n\n# If necessary, change the gid of the app and turn on the setgid flag.\n#\n\n# Whether or not make needs to be installed setgid.\n# The value should be either `true' or `false'.\n# On many systems, the getloadavg function (used to implement the `-l'\n# switch) will not work unless make is installed setgid kmem.\n#\ninst_setgid = @NEED_SETGID@\n\n# Install make setgid to this group so it can get the load average.\n#\ninst_group = @KMEM_GROUP@\nnodist_loadavg_SOURCES = getloadavg.c\nloadavg_CPPFLAGS = -DTEST\nloadavg_LDADD = @GETLOADAVG_LIBS@\n\n# > check-regression\n#\n# Look for the make test suite, and run it if found and we can find perl.\n# If we're building outside the tree, we use symlinks to make a local copy of\n# the test suite.  Unfortunately the test suite itself isn't localizable yet.\n#\nMAKETESTFLAGS = \nall: config.h\n\t$(MAKE) $(AM_MAKEFLAGS) all-recursive\n\n.SUFFIXES:\n.SUFFIXES: .c .o .obj\nam--refresh:\n\t@:\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \\\n\t      cd $(srcdir) && $(AUTOMAKE) --gnu  \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    echo ' $(SHELL) ./config.status'; \\\n\t    $(SHELL) ./config.status;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\t$(SHELL) ./config.status --recheck\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(srcdir) && $(AUTOCONF)\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)\n\nconfig.h: stamp-h1\n\t@if test ! -f $@; then \\\n\t  rm -f stamp-h1; \\\n\t  $(MAKE) stamp-h1; \\\n\telse :; fi\n\nstamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status\n\t@rm -f stamp-h1\n\tcd $(top_builddir) && $(SHELL) ./config.status config.h\n$(srcdir)/config.h.in:  $(am__configure_deps) \n\tcd $(top_srcdir) && $(AUTOHEADER)\n\trm -f stamp-h1\n\ttouch $@\n\ndistclean-hdr:\n\t-rm -f config.h stamp-h1\ninstall-binPROGRAMS: $(bin_PROGRAMS)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(bindir)\" || $(mkdir_p) \"$(DESTDIR)$(bindir)\"\n\t@list='$(bin_PROGRAMS)'; for p in $$list; do \\\n\t  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \\\n\t  if test -f $$p \\\n\t  ; then \\\n\t    f=`echo \"$$p1\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \\\n\t   echo \" $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'\"; \\\n\t   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) \"$$p\" \"$(DESTDIR)$(bindir)/$$f\" || exit 1; \\\n\t  else :; fi; \\\n\tdone\n\nuninstall-binPROGRAMS:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(bin_PROGRAMS)'; for p in $$list; do \\\n\t  f=`echo \"$$p\" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \\\n\t  echo \" rm -f '$(DESTDIR)$(bindir)/$$f'\"; \\\n\t  rm -f \"$(DESTDIR)$(bindir)/$$f\"; \\\n\tdone\n\nclean-binPROGRAMS:\n\t-test -z \"$(bin_PROGRAMS)\" || rm -f $(bin_PROGRAMS)\n\nclean-checkPROGRAMS:\n\t-test -z \"$(check_PROGRAMS)\" || rm -f $(check_PROGRAMS)\nloadavg$(EXEEXT): $(loadavg_OBJECTS) $(loadavg_DEPENDENCIES) \n\t@rm -f loadavg$(EXEEXT)\n\t$(LINK) $(loadavg_LDFLAGS) $(loadavg_OBJECTS) $(loadavg_LDADD) $(LIBS)\nmake$(EXEEXT): $(make_OBJECTS) $(make_DEPENDENCIES) \n\t@rm -f make$(EXEEXT)\n\t$(LINK) $(make_LDFLAGS) $(make_OBJECTS) $(make_LDADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\nansi2knr: ansi2knr.$(OBJEXT)\n\t$(LINK) ansi2knr.$(OBJEXT) $(LIBS)\nansi2knr.$(OBJEXT): $(CONFIG_HEADER)\n\nclean-krextra:\n\t-rm -f ansi2knr\n\nmostlyclean-kr:\n\t-test \"$U\" = \"\" || rm -f *_.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getloadavg.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ar$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arscan$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/default$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expand$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/function$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/implicit$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loadavg-getloadavg$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remake$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-cstms$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remote-stub$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rule$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signame$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcache$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variable$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmsjobs$U.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpath$U.Po@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\n\nloadavg-getloadavg$U.o: getloadavg$U.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadavg_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT loadavg-getloadavg$U.o -MD -MP -MF \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\" -c -o loadavg-getloadavg$U.o `test -f 'getloadavg$U.c' || echo '$(srcdir)/'`getloadavg$U.c; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\" \"$(DEPDIR)/loadavg-getloadavg$U.Po\"; else rm -f \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='getloadavg$U.c' object='loadavg-getloadavg$U.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadavg_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o loadavg-getloadavg$U.o `test -f 'getloadavg$U.c' || echo '$(srcdir)/'`getloadavg$U.c\n\nloadavg-getloadavg$U.obj: getloadavg$U.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadavg_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT loadavg-getloadavg$U.obj -MD -MP -MF \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\" -c -o loadavg-getloadavg$U.obj `if test -f 'getloadavg$U.c'; then $(CYGPATH_W) 'getloadavg$U.c'; else $(CYGPATH_W) '$(srcdir)/getloadavg$U.c'; fi`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\" \"$(DEPDIR)/loadavg-getloadavg$U.Po\"; else rm -f \"$(DEPDIR)/loadavg-getloadavg$U.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='getloadavg$U.c' object='loadavg-getloadavg$U.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadavg_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o loadavg-getloadavg$U.obj `if test -f 'getloadavg$U.c'; then $(CYGPATH_W) 'getloadavg$U.c'; else $(CYGPATH_W) '$(srcdir)/getloadavg$U.c'; fi`\nalloca_.c: alloca.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nar_.c: ar.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ar.c; then echo $(srcdir)/ar.c; else echo ar.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\narscan_.c: arscan.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/arscan.c; then echo $(srcdir)/arscan.c; else echo arscan.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ncommands_.c: commands.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/commands.c; then echo $(srcdir)/commands.c; else echo commands.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ndefault_.c: default.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/default.c; then echo $(srcdir)/default.c; else echo default.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ndir_.c: dir.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dir.c; then echo $(srcdir)/dir.c; else echo dir.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nexpand_.c: expand.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/expand.c; then echo $(srcdir)/expand.c; else echo expand.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nfile_.c: file.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/file.c; then echo $(srcdir)/file.c; else echo file.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nfunction_.c: function.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/function.c; then echo $(srcdir)/function.c; else echo function.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ngetloadavg_.c: getloadavg.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getloadavg.c; then echo $(srcdir)/getloadavg.c; else echo getloadavg.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ngetopt_.c: getopt.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\ngetopt1_.c: getopt1.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nhash_.c: hash.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hash.c; then echo $(srcdir)/hash.c; else echo hash.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nimplicit_.c: implicit.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/implicit.c; then echo $(srcdir)/implicit.c; else echo implicit.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\njob_.c: job.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/job.c; then echo $(srcdir)/job.c; else echo job.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nmain_.c: main.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/main.c; then echo $(srcdir)/main.c; else echo main.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nmisc_.c: misc.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/misc.c; then echo $(srcdir)/misc.c; else echo misc.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nread_.c: read.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/read.c; then echo $(srcdir)/read.c; else echo read.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nremake_.c: remake.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/remake.c; then echo $(srcdir)/remake.c; else echo remake.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nremote-cstms_.c: remote-cstms.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/remote-cstms.c; then echo $(srcdir)/remote-cstms.c; else echo remote-cstms.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nremote-stub_.c: remote-stub.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/remote-stub.c; then echo $(srcdir)/remote-stub.c; else echo remote-stub.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nrule_.c: rule.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rule.c; then echo $(srcdir)/rule.c; else echo rule.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nsigname_.c: signame.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/signame.c; then echo $(srcdir)/signame.c; else echo signame.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nstrcache_.c: strcache.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strcache.c; then echo $(srcdir)/strcache.c; else echo strcache.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nvariable_.c: variable.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/variable.c; then echo $(srcdir)/variable.c; else echo variable.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nversion_.c: version.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/version.c; then echo $(srcdir)/version.c; else echo version.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nvmsjobs_.c: vmsjobs.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/vmsjobs.c; then echo $(srcdir)/vmsjobs.c; else echo vmsjobs.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nvpath_.c: vpath.c $(ANSI2KNR)\n\t$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/vpath.c; then echo $(srcdir)/vpath.c; else echo vpath.c; fi` | sed 's/^# \\([0-9]\\)/#line \\1/' | $(ANSI2KNR) > $@ || rm -f $@\nalloca_.$(OBJEXT) ar_.$(OBJEXT) arscan_.$(OBJEXT) commands_.$(OBJEXT) \\\ndefault_.$(OBJEXT) dir_.$(OBJEXT) expand_.$(OBJEXT) file_.$(OBJEXT) \\\nfunction_.$(OBJEXT) getloadavg_.$(OBJEXT) getopt_.$(OBJEXT) \\\ngetopt1_.$(OBJEXT) hash_.$(OBJEXT) implicit_.$(OBJEXT) job_.$(OBJEXT) \\\nmain_.$(OBJEXT) misc_.$(OBJEXT) read_.$(OBJEXT) remake_.$(OBJEXT) \\\nremote-cstms_.$(OBJEXT) remote-stub_.$(OBJEXT) rule_.$(OBJEXT) \\\nsigname_.$(OBJEXT) strcache_.$(OBJEXT) variable_.$(OBJEXT) \\\nversion_.$(OBJEXT) vmsjobs_.$(OBJEXT) vpath_.$(OBJEXT) : $(ANSI2KNR)\nuninstall-info-am:\ninstall-man1: $(man1_MANS) $(man_MANS)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(man1dir)\" || $(mkdir_p) \"$(DESTDIR)$(man1dir)\"\n\t@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \\\n\tl2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \\\n\tfor i in $$l2; do \\\n\t  case \"$$i\" in \\\n\t    *.1*) list=\"$$list $$i\" ;; \\\n\t  esac; \\\n\tdone; \\\n\tfor i in $$list; do \\\n\t  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \\\n\t  else file=$$i; fi; \\\n\t  ext=`echo $$i | sed -e 's/^.*\\\\.//'`; \\\n\t  case \"$$ext\" in \\\n\t    1*) ;; \\\n\t    *) ext='1' ;; \\\n\t  esac; \\\n\t  inst=`echo $$i | sed -e 's/\\\\.[0-9a-z]*$$//'`; \\\n\t  inst=`echo $$inst | sed -e 's/^.*\\///'`; \\\n\t  inst=`echo $$inst | sed '$(transform)'`.$$ext; \\\n\t  echo \" $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'\"; \\\n\t  $(INSTALL_DATA) \"$$file\" \"$(DESTDIR)$(man1dir)/$$inst\"; \\\n\tdone\nuninstall-man1:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \\\n\tl2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \\\n\tfor i in $$l2; do \\\n\t  case \"$$i\" in \\\n\t    *.1*) list=\"$$list $$i\" ;; \\\n\t  esac; \\\n\tdone; \\\n\tfor i in $$list; do \\\n\t  ext=`echo $$i | sed -e 's/^.*\\\\.//'`; \\\n\t  case \"$$ext\" in \\\n\t    1*) ;; \\\n\t    *) ext='1' ;; \\\n\t  esac; \\\n\t  inst=`echo $$i | sed -e 's/\\\\.[0-9a-z]*$$//'`; \\\n\t  inst=`echo $$inst | sed -e 's/^.*\\///'`; \\\n\t  inst=`echo $$inst | sed '$(transform)'`.$$ext; \\\n\t  echo \" rm -f '$(DESTDIR)$(man1dir)/$$inst'\"; \\\n\t  rm -f \"$(DESTDIR)$(man1dir)/$$inst\"; \\\n\tdone\n\n# This directory's subdirectories are mostly independent; you can cd\n# into them and run `make' without going through this Makefile.\n# To change the values of `make' variables: instead of editing Makefiles,\n# (1) if the variable is set in `config.status', edit `config.status'\n#     (which will cause the Makefiles to be regenerated when you run `make');\n# (2) otherwise, pass the desired values on the `make' command line.\n$(RECURSIVE_TARGETS):\n\t@failcom='exit 1'; \\\n\tfor f in x $$MAKEFLAGS; do \\\n\t  case $$f in \\\n\t    *=* | --[!k]*);; \\\n\t    *k*) failcom='fail=yes';; \\\n\t  esac; \\\n\tdone; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  echo \"Making $$target in $$subdir\"; \\\n\t  if test \"$$subdir\" = \".\"; then \\\n\t    dot_seen=yes; \\\n\t    local_target=\"$$target-am\"; \\\n\t  else \\\n\t    local_target=\"$$target\"; \\\n\t  fi; \\\n\t  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \\\n\t  || eval $$failcom; \\\n\tdone; \\\n\tif test \"$$dot_seen\" = \"no\"; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) \"$$target-am\" || exit 1; \\\n\tfi; test -z \"$$fail\"\n\nmostlyclean-recursive clean-recursive distclean-recursive \\\nmaintainer-clean-recursive:\n\t@failcom='exit 1'; \\\n\tfor f in x $$MAKEFLAGS; do \\\n\t  case $$f in \\\n\t    *=* | --[!k]*);; \\\n\t    *k*) failcom='fail=yes';; \\\n\t  esac; \\\n\tdone; \\\n\tdot_seen=no; \\\n\tcase \"$@\" in \\\n\t  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \\\n\t  *) list='$(SUBDIRS)' ;; \\\n\tesac; \\\n\trev=''; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = \".\"; then :; else \\\n\t    rev=\"$$subdir $$rev\"; \\\n\t  fi; \\\n\tdone; \\\n\trev=\"$$rev .\"; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tfor subdir in $$rev; do \\\n\t  echo \"Making $$target in $$subdir\"; \\\n\t  if test \"$$subdir\" = \".\"; then \\\n\t    local_target=\"$$target-am\"; \\\n\t  else \\\n\t    local_target=\"$$target\"; \\\n\t  fi; \\\n\t  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \\\n\t  || eval $$failcom; \\\n\tdone && test -z \"$$fail\"\ntags-recursive:\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  test \"$$subdir\" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \\\n\tdone\nctags-recursive:\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  test \"$$subdir\" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \\\n\tdone\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tif ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \\\n\t  include_option=--etags-include; \\\n\t  empty_fix=.; \\\n\telse \\\n\t  include_option=--include; \\\n\t  empty_fix=; \\\n\tfi; \\\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    test ! -f $$subdir/TAGS || \\\n\t      tags=\"$$tags $$include_option=$$here/$$subdir/TAGS\"; \\\n\t  fi; \\\n\tdone; \\\n\tlist='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@case `sed 15q $(srcdir)/NEWS` in \\\n\t*\"$(VERSION)\"*) : ;; \\\n\t*) \\\n\t  echo \"NEWS not updated; not releasing\" 1>&2; \\\n\t  exit 1;; \\\n\tesac\n\t$(am__remove_distdir)\n\tmkdir $(distdir)\n\t$(mkdir_p) $(distdir)/config $(distdir)/po\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\n\tlist='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    test -d \"$(distdir)/$$subdir\" \\\n\t    || $(mkdir_p) \"$(distdir)/$$subdir\" \\\n\t    || exit 1; \\\n\t    distdir=`$(am__cd) $(distdir) && pwd`; \\\n\t    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \\\n\t    (cd $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$top_distdir\" \\\n\t        distdir=\"$$distdir/$$subdir\" \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\n\t$(MAKE) $(AM_MAKEFLAGS) \\\n\t  top_distdir=\"$(top_distdir)\" distdir=\"$(distdir)\" \\\n\t  dist-hook\n\t-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \\; -o \\\n\t  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \\; -o \\\n\t  ! -type d ! -perm -400 -exec chmod a+r {} \\; -o \\\n\t  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \\; \\\n\t|| chmod -R a+r $(distdir)\ndist-gzip: distdir\n\ttardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz\n\t$(am__remove_distdir)\ndist-bzip2: distdir\n\ttardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2\n\t$(am__remove_distdir)\n\ndist-tarZ: distdir\n\ttardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z\n\t$(am__remove_distdir)\n\ndist-shar: distdir\n\tshar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz\n\t$(am__remove_distdir)\n\ndist-zip: distdir\n\t-rm -f $(distdir).zip\n\tzip -rq $(distdir).zip $(distdir)\n\t$(am__remove_distdir)\n\ndist dist-all: distdir\n\ttardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz\n\ttardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2\n\t$(am__remove_distdir)\n\n# This target untars the dist file and tries a VPATH configuration.  Then\n# it guarantees that the distribution is self-contained by making another\n# tarfile.\ndistcheck: dist\n\tcase '$(DIST_ARCHIVES)' in \\\n\t*.tar.gz*) \\\n\t  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\\\n\t*.tar.bz2*) \\\n\t  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\\\n\t*.tar.Z*) \\\n\t  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\\\n\t*.shar.gz*) \\\n\t  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\\\n\t*.zip*) \\\n\t  unzip $(distdir).zip ;;\\\n\tesac\n\tchmod -R a-w $(distdir); chmod a+w $(distdir)\n\tmkdir $(distdir)/_build\n\tmkdir $(distdir)/_inst\n\tchmod a-w $(distdir)\n\tdc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\\\/]:[\\\\/],/,'` \\\n\t  && dc_destdir=\"$${TMPDIR-/tmp}/am-dc-$$$$/\" \\\n\t  && cd $(distdir)/_build \\\n\t  && ../configure --srcdir=.. --prefix=\"$$dc_install_base\" \\\n\t    $(DISTCHECK_CONFIGURE_FLAGS) \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) dvi \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) check \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) install \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) installcheck \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) uninstall \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir=\"$$dc_install_base\" \\\n\t        distuninstallcheck \\\n\t  && chmod -R a-w \"$$dc_install_base\" \\\n\t  && ({ \\\n\t       (cd ../.. && umask 077 && mkdir \"$$dc_destdir\") \\\n\t       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR=\"$$dc_destdir\" install \\\n\t       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR=\"$$dc_destdir\" uninstall \\\n\t       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR=\"$$dc_destdir\" \\\n\t            distuninstallcheck_dir=\"$$dc_destdir\" distuninstallcheck; \\\n\t      } || { rm -rf \"$$dc_destdir\"; exit 1; }) \\\n\t  && rm -rf \"$$dc_destdir\" \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) dist \\\n\t  && rm -rf $(DIST_ARCHIVES) \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck\n\t$(am__remove_distdir)\n\t@(echo \"$(distdir) archives ready for distribution: \"; \\\n\t  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \\\n\t  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'\ndistuninstallcheck:\n\t@cd $(distuninstallcheck_dir) \\\n\t&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \\\n\t   || { echo \"ERROR: files left after uninstall:\" ; \\\n\t        if test -n \"$(DESTDIR)\"; then \\\n\t          echo \"  (check DESTDIR support)\"; \\\n\t        fi ; \\\n\t        $(distuninstallcheck_listfiles) ; \\\n\t        exit 1; } >&2\ndistcleancheck: distclean\n\t@if test '$(srcdir)' = . ; then \\\n\t  echo \"ERROR: distcleancheck can only run from a VPATH build\" ; \\\n\t  exit 1 ; \\\n\tfi\n\t@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \\\n\t  || { echo \"ERROR: files left in build directory after distclean:\" ; \\\n\t       $(distcleancheck_listfiles) ; \\\n\t       exit 1; } >&2\ncheck-am: all-am\n\t$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)\n\t$(MAKE) $(AM_MAKEFLAGS) check-local\ncheck: check-recursive\nall-am: Makefile $(ANSI2KNR) $(PROGRAMS) $(MANS) $(HEADERS) config.h\ninstalldirs: installdirs-recursive\ninstalldirs-am:\n\tfor dir in \"$(DESTDIR)$(bindir)\" \"$(DESTDIR)$(man1dir)\"; do \\\n\t  test -z \"$$dir\" || $(mkdir_p) \"$$dir\"; \\\n\tdone\ninstall: install-recursive\ninstall-exec: install-exec-recursive\ninstall-data: install-data-recursive\nuninstall: uninstall-recursive\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-recursive\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test -z \"$(DISTCLEANFILES)\" || rm -f $(DISTCLEANFILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-recursive\n\nclean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \\\n\tclean-krextra mostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -f $(am__CONFIG_DISTCLEAN_FILES)\n\t-rm -rf $(DEPDIR) ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-hdr distclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am: install-man\n\ninstall-exec-am: install-binPROGRAMS install-exec-local\n\ninstall-info: install-info-recursive\n\ninstall-man: install-man1\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-recursive\n\t-rm -f $(am__CONFIG_DISTCLEAN_FILES)\n\t-rm -rf $(top_srcdir)/autom4te.cache\n\t-rm -rf $(DEPDIR) ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-recursive\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic mostlyclean-kr\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man\n\nuninstall-info: uninstall-info-recursive\n\nuninstall-man: uninstall-man1\n\n.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \\\n\tcheck-am check-local clean clean-binPROGRAMS \\\n\tclean-checkPROGRAMS clean-generic clean-krextra \\\n\tclean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \\\n\tdist-gzip dist-hook dist-shar dist-tarZ dist-zip distcheck \\\n\tdistclean distclean-compile distclean-generic distclean-hdr \\\n\tdistclean-recursive distclean-tags distcleancheck distdir \\\n\tdistuninstallcheck dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-binPROGRAMS install-data \\\n\tinstall-data-am install-exec install-exec-am \\\n\tinstall-exec-local install-info install-info-am install-man \\\n\tinstall-man1 install-strip installcheck installcheck-am \\\n\tinstalldirs installdirs-am maintainer-clean \\\n\tmaintainer-clean-generic maintainer-clean-recursive \\\n\tmostlyclean mostlyclean-compile mostlyclean-generic \\\n\tmostlyclean-kr mostlyclean-recursive pdf pdf-am ps ps-am tags \\\n\ttags-recursive uninstall uninstall-am uninstall-binPROGRAMS \\\n\tuninstall-info-am uninstall-man uninstall-man1\n\n\n# Forward targets\n\nhtml:\n\tcd doc && $(MAKE) $(AM_MAKEFLAGS) $@\n\n.PHONY: html\n\ninstall-exec-local:\n\t@if $(inst_setgid); then \\\n\t   app=$(DESTDIR)$(bindir)/`echo $(bin_PROGRAMS)|sed '$(transform)'`; \\\n\t   if chgrp $(inst_group) $$app && chmod g+s $$app; then \\\n\t     echo \"chgrp $(inst_group) $$app && chmod g+s $$app\"; \\\n\t   else \\\n\t     echo \"$$app needs to be owned by group $(inst_group) and setgid;\"; \\\n\t     echo \"otherwise the \\`-l' option will probably not work.\"; \\\n\t     echo \"You may need special privileges to complete the installation\"; \\\n\t     echo \"of $$app.\"; \\\n\t   fi; \\\n\t else true; fi\n\n# --------------- Local DIST Section\n\n# Install the w32 and tests subdirectories\n#\ndist-hook:\n\t(cd $(srcdir); \\\n\t sub=`find w32 tests -follow \\( -name CVS -prune -o -name .cvsignore -o -name work -prune \\) -o \\( -name \\*.orig -o -name \\*.rej -o -name \\*~ -prune \\) -o -type f -print`; \\\n\t tar chf - $$sub) \\\n\t| (cd $(distdir); tar xfBp -)\n\n# --------------- Local CHECK Section\n\ncheck-local: check-regression check-loadavg\n\t@banner=\" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) \"; \\\n\tdashes=`echo \"$$banner\" | sed s/./=/g`; \\\n\techo; \\\n\techo \"$$dashes\"; \\\n\techo \"$$banner\"; \\\n\techo \"$$dashes\"; \\\n\techo\n\n.PHONY: check-loadavg check-regression\n\ncheck-loadavg: loadavg$(EXEEXT)\n\t@echo The system uptime program believes the load average to be:\n\t-uptime\n\t@echo The GNU load average checking code thinks:\n\t-./loadavg$(EXEEXT)\n\ncheck-regression:\n\t@if test -f \"$(srcdir)/tests/run_make_tests\"; then \\\n\t  if $(PERL) -v >/dev/null 2>&1; then \\\n\t    case `cd $(srcdir); pwd` in `pwd`) : ;; \\\n\t      *) test -d tests || mkdir tests; \\\n\t\t rm -f srctests; \\\n\t\t if ln -s \"$(srcdir)/tests\" srctests; then \\\n\t\t   for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \\\n\t\t     rm -f tests/$$f; ln -s ../srctests/$$f tests; \\\n\t\t   done; fi ;; \\\n\t    esac; \\\n\t    echo \"cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS)\"; \\\n\t    cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS); \\\n\t  else \\\n\t    echo \"Can't find a working Perl ($(PERL)); the test suite requires Perl.\"; \\\n\t  fi; \\\n\t else \\\n\t  echo \"Can't find the GNU Make test suite ($(srcdir)/tests).\"; \\\n\t fi\n\n# --------------- Maintainer's Section\n\n# Tell automake that I haven't forgotten about this file and it will be\n# created before we build a distribution (see maintMakefile in the CVS\n# distribution).\n\nREADME:\n\n@MAINT_MAKEFILE@\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/NEWS",
    "content": "GNU make NEWS                                               -*-indented-text-*-\n  History of user-visible changes.\n  1 April 2006\n\nSee the end of this file for copyrights and conditions.\n\nAll changes mentioned here are more fully described in the GNU make\nmanual, which is contained in this distribution as the file doc/make.texi.\nSee the README file and the GNU make manual for instructions for\nreporting bugs.\n\f\nVersion 3.81\n\n* GNU make is ported to OS/2.\n\n* GNU make is ported to MinGW.  The MinGW build is only supported by\n  the build_w32.bat batch file; see the file README.W32 for more\n  details.\n\n* WARNING: Future backward-incompatibility!\n  Up to and including this release, the '$?' variable does not contain\n  any prerequisite that does not exist, even though that prerequisite\n  might have caused the target to rebuild.  Starting with the _next_\n  release of GNU make, '$?' will contain all prerequisites that caused\n  the target to be considered out of date.  See this Savannah bug:\n  http://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=16051\n\n* WARNING: Backward-incompatibility!\n  GNU make now implements a generic \"second expansion\" feature on the\n  prerequisites of both explicit and implicit (pattern) rules.  In order\n  to enable this feature, the special target '.SECONDEXPANSION' must be\n  defined before the first target which takes advantage of it.  If this\n  feature is enabled then after all rules have been parsed the\n  prerequisites are expanded again, this time with all the automatic\n  variables in scope.  This means that in addition to using standard\n  SysV $$@ in prerequisites lists, you can also use complex functions\n  such as $$(notdir $$@) etc.  This behavior applies to implicit rules,\n  as well, where the second expansion occurs when the rule is matched.\n  However, this means that when '.SECONDEXPANSION' is enabled you must\n  double-quote any \"$\" in your filenames; instead of \"foo: boo$$bar\" you\n  now must write \"foo: foo$$$$bar\".  Note that the SysV $$@ etc. feature,\n  which used to be available by default, is now ONLY available when the\n  .SECONDEXPANSION target is defined.  If your makefiles take advantage\n  of this SysV feature you will need to update them.\n\n* WARNING: Backward-incompatibility!\n  In order to comply with POSIX, the way in which GNU make processes\n  backslash-newline sequences in command strings has changed.  If your\n  makefiles use backslash-newline sequences inside of single-quoted\n  strings in command scripts you will be impacted by this change.  See\n  the GNU make manual subsection \"Splitting Command Lines\" (node\n  \"Splitting Lines\"), in section \"Command Syntax\", chapter \"Writing the\n  Commands in Rules\", for details.\n\n* WARNING: Backward-incompatibility!\n  Some previous versions of GNU make had a bug where \"#\" in a function\n  invocation such as $(shell ...) was treated as a make comment.  A\n  workaround was to escape these with backslashes.  This bug has been\n  fixed: if your makefile uses \"\\#\" in a function invocation the\n  backslash is now preserved, so you'll need to remove it.\n\n* New command-line option: -L (--check-symlink-times).  On systems that\n  support symbolic links, if this option is given then GNU make will\n  use the most recent modification time of any symbolic links that are\n  used to resolve target files.  The default behavior remains as it\n  always has: use the modification time of the actual target file only.\n\n* The \"else\" conditional line can now be followed by any other valid\n  conditional on the same line: this does not increase the depth of the\n  conditional nesting, so only one \"endif\" is required to close the\n  conditional.\n\n* All pattern-specific variables that match a given target are now used\n  (previously only the first match was used).\n\n* Target-specific variables can be marked as exportable using the\n  \"export\" keyword.\n\n* In a recursive $(call ...) context, any extra arguments from the outer\n  call are now masked in the context of the inner call.\n\n* Implemented a solution for the \"thundering herd\" problem with \"-j -l\".\n  This version of GNU make uses an algorithm suggested by Thomas Riedl\n  <thomas.riedl@siemens.com> to track the number of jobs started in the\n  last second and artificially adjust GNU make's view of the system's\n  load average accordingly.\n\n* New special variables available in this release:\n   - .INCLUDE_DIRS: Expands to a list of directories that make searches\n     for included makefiles.\n   - .FEATURES: Contains a list of special features available in this\n     version of GNU make.\n   - .DEFAULT_GOAL: Set the name of the default goal make will\n     use if no goals are provided on the command line.\n   - MAKE_RESTARTS: If set, then this is the number of times this\n     instance of make has been restarted (see \"How Makefiles Are Remade\"\n     in the manual).\n   - New automatic variable: $| (added in 3.80, actually): contains all\n     the order-only prerequisites defined for the target.\n\n* New functions available in this release:\n   - $(lastword ...) returns the last word in the list.  This gives\n     identical results as $(word $(words ...) ...), but is much faster.\n   - $(abspath ...) returns the absolute path (all \".\" and \"..\"\n     directories resolved, and any duplicate \"/\" characters removed) for\n     each path provided.\n   - $(realpath ...) returns the canonical pathname for each path\n     provided.  The canonical pathname is the absolute pathname, with\n     all symbolic links resolved as well.\n   - $(info ...) prints its arguments to stdout.  No makefile name or\n     line number info, etc. is printed.\n   - $(flavor ...) returns the flavor of a variable.\n   - $(or ...) provides a short-circuiting OR conditional: each argument\n     is expanded.  The first true (non-empty) argument is returned; no\n     further arguments are expanded.  Expands to empty if there are no\n     true arguments.\n   - $(and ...) provides a short-circuiting AND conditional: each\n     argument is expanded.  The first false (empty) argument is\n     returned; no further arguments are expanded.  Expands to the last\n     argument if all arguments are true.\n\n* Changes made for POSIX compatibility:\n   - Only touch targets (under -t) if they have at least one command.\n   - Setting the SHELL make variable does NOT change the value of the\n     SHELL environment variable given to programs invoked by make.  As\n     an enhancement to POSIX, if you export the make variable SHELL then\n     it will be set in the environment, just as before.\n\n* On MS Windows systems, explicitly setting SHELL to a pathname ending\n  in \"cmd\" or \"cmd.exe\" (case-insensitive) will force GNU make to use\n  the DOS command interpreter in batch mode even if a UNIX-like shell\n  could be found on the system.\n\n* On VMS there is now support for case-sensitive filesystems such as ODS5.\n  See the readme.vms file for information.\n\n* Parallel builds (-jN) no longer require a working Bourne shell on\n  Windows platforms.  They work even with the stock Windows shells, such\n  as cmd.exe and command.com.\n\n* Updated to autoconf 2.59, automake 1.9.5, and gettext 0.14.1.  Users\n  should not be impacted.\n\n* New translations for Swedish, Chinese (simplified), Ukrainian,\n  Belarusian, Finnish, Kinyarwandan, and Irish.  Many updated\n  translations.\n\nA complete list of bugs fixed in this version is available here:\n\n  http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103\n\n\f\nVersion 3.80\n\n* A new feature exists: order-only prerequisites.  These prerequisites\n  affect the order in which targets are built, but they do not impact\n  the rebuild/no-rebuild decision of their dependents.  That is to say,\n  they allow you to require target B be built before target A, without\n  requiring that target A will always be rebuilt if target B is updated.\n  Patch for this feature provided by Greg McGary <greg@mcgary.org>.\n\n* For compatibility with SysV make, GNU make now supports the peculiar\n  syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule.\n  This syntax is only valid within explicit and static pattern rules: it\n  cannot be used in implicit (suffix or pattern) rules.  Edouard G. Parmelan\n  <egp@free.fr> provided a patch implementing this feature; however, I\n  decided to implement it in a different way.\n\n* The argument to the \"ifdef\" conditional is now expanded before it's\n  tested, so it can be a constructed variable name.\n\n  Similarly, the arguments to \"export\" (when not used in a variable\n  definition context) and \"unexport\" are also now expanded.\n\n* A new function is defined: $(value ...).  The argument to this\n  function is the _name_ of a variable.  The result of the function is\n  the value of the variable, without having been expanded.\n\n* A new function is defined: $(eval ...).  The arguments to this\n  function should expand to makefile commands, which will then be\n  evaluated as if they had appeared in the makefile.  In combination\n  with define/endef multiline variable definitions this is an extremely\n  powerful capability.  The $(value ...) function is also sometimes\n  useful here.\n\n* A new built-in variable is defined, $(MAKEFILE_LIST).  It contains a\n  list of each makefile GNU make has read, or started to read, in the\n  order in which they were encountered.  So, the last filename in the\n  list when a makefile is just being read (before any includes) is the\n  name of the current makefile.\n\n* A new built-in variable is defined: $(.VARIABLES).  When it is\n  expanded it returns a complete list of variable names defined by all\n  makefiles at that moment.\n\n* A new command-line option is defined, -B or --always-make.  If\n  specified GNU make will consider all targets out-of-date even if they\n  would otherwise not be.\n\n* The arguments to $(call ...) functions were being stored in $1, $2,\n  etc. as recursive variables, even though they are fully expanded\n  before assignment.  This means that escaped dollar signs ($$ etc.)\n  were not behaving properly.  Now the arguments are stored as simple\n  variables.  This may mean that if you added extra escaping to your\n  $(call ...) function arguments you will need to undo it now.\n\n* The variable invoked by $(call ...) can now be recursive: unlike other\n  variables it can reference itself and this will not produce an error\n  when it is used as the first argument to $(call ...) (but only then).\n\n* New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure\n  option --disable-nsec-timestamps.  You might need this if your build\n  process depends on tools like \"cp -p\" preserving time stamps, since\n  \"cp -p\" (right now) doesn't preserve the subsecond portion of a time\n  stamp.\n\n* Updated translations for French, Galician, German, Japanese, Korean,\n  and Russian.  New translations for Croatian, Danish, Hebrew, and\n  Turkish.\n\n* Updated internationalization support to Gettext 0.11.5.\n  GNU make now uses Gettext's \"external\" feature, and does not include\n  any internationalization code itself.  Configure will search your\n  system for an existing implementation of GNU Gettext (only GNU Gettext\n  is acceptable) and use it if it exists.  If not, NLS will be disabled.\n  See ABOUT-NLS for more information.\n\n* Updated to autoconf 2.54 and automake 1.7.  Users should not be impacted.\n\nA complete list of bugs fixed in this version is available here:\n\n  http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102\n\n\f\nVersion 3.79.1\n\n* .SECONDARY with no prerequisites now prevents any target from being\n  removed because make thinks it's an intermediate file, not just those\n  listed in the makefile.\n\n* New configure option --disable-nsec-timestamps, but this was\n  superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.\n\f\nVersion 3.79\n\n* GNU make optionally supports internationalization and locales via the\n  GNU gettext (or local gettext if suitable) package.  See the ABOUT-NLS\n  file for more information on configuring GNU make for NLS.\n\n* Previously, GNU make quoted variables such as MAKEFLAGS and\n  MAKEOVERRIDES for proper parsing by the shell.  This allowed them to\n  be used within make build scripts.  However, using them there is not\n  proper behavior: they are meant to be passed to subshells via the\n  environment.  Unfortunately the values were not quoted properly to be\n  passed through the environment.  This meant that make didn't properly\n  pass some types of command line values to submakes.\n\n  With this version we change that behavior: now these variables are\n  quoted properly for passing through the environment, which is the\n  correct way to do it.  If you previously used these variables\n  explicitly within a make rule you may need to re-examine your use for\n  correctness given this change.\n\n* A new pseudo-target .NOTPARALLEL is available.  If defined, the\n  current makefile is run serially regardless of the value of -j.\n  However, submakes are still eligible for parallel execution.\n\n* The --debug option has changed: it now allows optional flags\n  controlling the amount and type of debugging output.  By default only\n  a minimal amount information is generated, displaying the names of\n  \"normal\" targets (not makefiles) that were deemed out of date and in\n  need of being rebuilt.\n\n  Note that the -d option behaves as before: it takes no arguments and\n  all debugging information is generated.\n\n* The `-p' (print database) output now includes filename and linenumber\n  information for variable definitions, to aid debugging.\n\n* The wordlist function no longer reverses its arguments if the \"start\"\n  value is greater than the \"end\" value.  If that's true, nothing is\n  returned.\n\n* Hartmut Becker provided many updates for the VMS port of GNU make.\n  See the readme.vms file for more details.\n\f\nVersion 3.78\n\n* Two new functions, $(error ...) and $(warning ...) are available.  The\n  former will cause make to fail and exit immediately upon expansion of\n  the function, with the text provided as the error message.  The latter\n  causes the text provided to be printed as a warning message, but make\n  proceeds normally.\n\n* A new function $(call ...) is available.  This allows users to create\n  their own parameterized macros and invoke them later.  Original\n  implementation of this function was provided by Han-Wen Nienhuys\n  <hanwen@cs.uu.nl>.\n\n* A new function $(if ...) is available.  It provides if-then-else\n  capabilities in a builtin function.  Original implementation of this\n  function was provided by Han-Wen Nienhuys <hanwen@cs.uu.nl>.\n\n* Make defines a new variable, .LIBPATTERNS.  This variable controls how\n  library dependency expansion (dependencies like ``-lfoo'') is performed.\n\n* Make accepts CRLF sequences as well as traditional LF, for\n  compatibility with makefiles created on other operating systems.\n\n* Make accepts a new option: -R, or --no-builtin-variables.  This option\n  disables the definition of the rule-specific builtin variables (CC,\n  LD, AR, etc.).  Specifying this option forces -r (--no-builtin-rules)\n  as well.\n\n* A \"job server\" feature, suggested by Howard Chu <hyc@highlandsun.com>.\n\n  On systems that support POSIX pipe(2) semantics, GNU make can now pass\n  -jN options to submakes rather than forcing them all to use -j1.  The\n  top make and all its sub-make processes use a pipe to communicate with\n  each other to ensure that no more than N jobs are started across all\n  makes.  To get the old behavior of -j back, you can configure make\n  with the --disable-job-server option.\n\n* The confusing term \"dependency\" has been replaced by the more accurate\n  and standard term \"prerequisite\", both in the manual and in all GNU make\n  output.\n\n* GNU make supports the \"big archive\" library format introduced in AIX 4.3.\n\n* GNU make supports large files on AIX, HP-UX, and IRIX.  These changes\n  were provided by Paul Eggert <eggert@twinsun.com>.  (Large file\n  support for Solaris and Linux was introduced in 3.77, but the\n  configuration had issues: these have also been resolved).\n\n* The Windows 95/98/NT (W32) version of GNU make now has native support\n  for the Cygnus Cygwin release B20.1 shell (bash).\n\n* The GNU make regression test suite, long available separately \"under\n  the table\", has been integrated into the release.  You can invoke it\n  by running \"make check\" in the distribution.  Note that it requires\n  Perl (either Perl 4 or Perl 5) to run.\n\f\nVersion 3.77\n\n* Implement BSD make's \"?=\" variable assignment operator.  The variable\n  is assigned the specified value only if that variable is not already\n  defined.\n\n* Make defines a new variable, \"CURDIR\", to contain the current working\n  directory (after the -C option, if any, has been processed).\n  Modifying this variable has no effect on the operation of make.\n\n* Make defines a new default RCS rule, for new-style master file\n  storage: ``% :: RCS/%'' (note no ``,v'' suffix).\n\n  Make defines new default rules for DOS-style C++ file naming\n  conventions, with ``.cpp'' suffixes.  All the same rules as for\n  ``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and\n  COMPILE.cpp macros (which default to the same value as LINK.cc and\n  COMPILE.cc).  Note CPPFLAGS is still C preprocessor flags!  You should\n  use CXXFLAGS to change C++ compiler flags.\n\n* A new feature, \"target-specific variable values\", has been added.\n  This is a large change so please see the appropriate sections of the\n  manual for full details.  Briefly, syntax like this:\n\n    TARGET: VARIABLE = VALUE\n\n  defines VARIABLE as VALUE within the context of TARGET.  This is\n  similar to SunOS make's \"TARGET := VARIABLE = VALUE\" feature.  Note\n  that the assignment may be of any type, not just recursive, and that\n  the override keyword is available.\n\n  COMPATIBILITY: This new syntax means that if you have any rules where\n  the first or second dependency has an equal sign (=) in its name,\n  you'll have to escape them with a backslash: \"foo : bar\\=baz\".\n  Further, if you have any dependencies which already contain \"\\=\",\n  you'll have to escape both of them: \"foo : bar\\\\\\=baz\".\n\n* A new appendix listing the most common error and warning messages\n  generated by GNU make, with some explanation, has been added to the\n  GNU make User's Manual.\n\n* Updates to the GNU make Customs library support (see README.customs).\n\n* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),\n  and to the DOS port from Eli Zaretski (see README.DOS).\n\f\nVersion 3.76.1\n\n* Small (but serious) bug fix.  Quick rollout to get into the GNU source CD.\n\f\nVersion 3.76\n\n* GNU make now uses automake to control Makefile.in generation.  This\n  should make it more consistent with the GNU standards.\n\n* VPATH functionality has been changed to incorporate the VPATH+ patch,\n  previously maintained by Paul Smith <psmith@baynetworks.com>.  See the\n  manual.\n\n* Make defines a new variable, `MAKECMDGOALS', to contain the goals that\n  were specified on the command line, if any.  Modifying this variable\n  has no effect on the operation of make.\n\n* A new function, `$(wordlist S,E,TEXT)', is available: it returns a\n  list of words from number S to number E (inclusive) of TEXT.\n\n* Instead of an error, detection of future modification times gives a\n  warning and continues.  The warning is repeated just before GNU make\n  exits, so it is less likely to be lost.\n\n* Fix the $(basename) and $(suffix) functions so they only operate on\n  the last filename, not the entire string:\n\n      Command              Old Result             New Result\n      -------              ----------             ----------\n    $(basename a.b)        a                      a\n    $(basename a.b/c)      a                      a.b/c\n    $(suffix a.b)          b                      b\n    $(suffix a.b/c)        b/c                    <empty>\n\n* The $(strip) function now removes newlines as well as TABs and spaces.\n\n* The $(shell) function now changes CRLF (\\r\\n) pairs to a space as well\n  as newlines (\\n).\n\n* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32).\n\n* Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS\n  and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler\n  and utilities.  See README.DOS for details, and direct all questions\n  concerning this port to Eli Zaretskii <eliz@is.elta.co.il> or DJ\n  Delorie <dj@delorie.com>.\n\n* John W. Eaton has updated the VMS port to support libraries and VPATH.\n\f\nVersion 3.75\n\n* The directory messages printed by `-w' and implicitly in sub-makes,\n  are now omitted if Make runs no commands and has no other messages to print.\n\n* Make now detects files that for whatever reason have modification times\n  in the future and gives an error.  Files with such impossible timestamps\n  can result from unsynchronized clocks, or archived distributions\n  containing bogus timestamps; they confuse Make's dependency engine\n  thoroughly.\n\n* The new directive `sinclude' is now recognized as another name for\n  `-include', for compatibility with some other Makes.\n\n* Aaron Digulla has contributed a port to AmigaDOS.  See README.Amiga for\n  details, and direct all Amiga-related questions to <digulla@fh-konstanz.de>.\n\n* Rob Tulloh of Tivoli Systems has contributed a port to Windows NT or 95.\n  See README.W32 for details, and direct all Windows-related questions to\n  <rob_tulloh@tivoli.com>.\n\f\nVersion 3.73\n\n* Converted to use Autoconf version 2, so `configure' has some new options.\n  See INSTALL for details.\n\n* You can now send a SIGUSR1 signal to Make to toggle printing of debugging\n  output enabled by -d, at any time during the run.\n\f\nVersion 3.72\n\n* DJ Delorie has ported Make to MS-DOS using the GO32 extender.\n  He is maintaining the DOS port, not the GNU Make maintainer;\n  please direct bugs and questions for DOS to <djgpp@sun.soe.clarkson.edu>.\n  MS-DOS binaries are available for FTP from ftp.simtel.net in\n  /pub/simtelnet/gnu/djgpp/.\n\n* The `MAKEFLAGS' variable (in the environment or in a makefile) can now\n  contain variable definitions itself; these are treated just like\n  command-line variable definitions.  Make will automatically insert any\n  variable definitions from the environment value of `MAKEFLAGS' or from\n  the command line, into the `MAKEFLAGS' value exported to children.  The\n  `MAKEOVERRIDES' variable previously included in the value of `$(MAKE)'\n  for sub-makes is now included in `MAKEFLAGS' instead.  As before, you can\n  reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables\n  in the environment when its size is limited.\n\n* If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of\n  a rule if it has changed when its commands exit with a nonzero status,\n  just as when the commands get a signal.\n\n* The automatic variable `$+' is new.  It lists all the dependencies like\n  `$^', but preserves duplicates listed in the makefile.  This is useful\n  for linking rules, where library files sometimes need to be listed twice\n  in the link order.\n\n* You can now specify the `.IGNORE' and `.SILENT' special targets with\n  dependencies to limit their effects to those files.  If a file appears as\n  a dependency of `.IGNORE', then errors will be ignored while running the\n  commands to update that file.  Likewise if a file appears as a dependency\n  of `.SILENT', then the commands to update that file will not be printed\n  before they are run.  (This change was made to conform to POSIX.2.)\n\f\nVersion 3.71\n\n* The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(<D)', `$(?D)', and\n  `$(^D)' now omit the trailing slash from the directory name.  (This change\n  was made to comply with POSIX.2.)\n\n* The source distribution now includes the Info files for the Make manual.\n  There is no longer a separate distribution containing Info and DVI files.\n\n* You can now set the variables `binprefix' and/or `manprefix' in\n  Makefile.in (or on the command line when installing) to install GNU make\n  under a name other than `make' (i.e., ``make binprefix=g install''\n  installs GNU make as `gmake').\n\n* The built-in Texinfo rules use the new variables `TEXI2DVI_FLAGS' for\n  flags to the `texi2dvi' script, and `MAKEINFO_FLAGS' for flags to the\n  Makeinfo program.\n\n* The exit status of Make when it runs into errors is now 2 instead of 1.\n  The exit status is 1 only when using -q and some target is not up to date.\n  (This change was made to comply with POSIX.2.)\n\f\nVersion 3.70\n\n* It is no longer a fatal error to have a NUL character in a makefile.\n  You should never put a NUL in a makefile because it can have strange\n  results, but otherwise empty lines full of NULs (such as produced by\n  the `xmkmf' program) will always work fine.\n\n* The error messages for nonexistent included makefiles now refer to the\n  makefile name and line number where the `include' appeared, so Emacs's\n  C-x ` command takes you there (in case it's a typo you need to fix).\n\f\nVersion 3.69\n\n* Implicit rule search for archive member references is now done in the\n  opposite order from previous versions: the whole target name `LIB(MEM)'\n  first, and just the member name and parentheses `(MEM)' second.\n\n* Make now gives an error for an unterminated variable or function reference.\n  For example, `$(foo' with no matching `)' or `${bar' with no matching `}'.\n\n* The new default variable `MAKE_VERSION' gives the version number of\n  Make, and a string describing the remote job support compiled in (if any).\n  Thus the value (in this release) is something like `3.69' or `3.69-Customs'.\n\n* Commands in an invocation of the `shell' function are no longer run with\n  a modified environment like target commands are.  As in versions before\n  3.68, they now run with the environment that `make' started with.  We\n  have reversed the change made in version 3.68 because it turned out to\n  cause a paradoxical situation in cases like:\n\n\texport variable = $(shell echo value)\n\n  When Make attempted to put this variable in the environment for a target\n  command, it would try expand the value by running the shell command\n  `echo value'.  In version 3.68, because it constructed an environment\n  for that shell command in the same way, Make would begin to go into an\n  infinite loop and then get a fatal error when it detected the loop.\n\n* The commands given for `.DEFAULT' are now used for phony targets with no\n  commands.\n\f\nVersion 3.68\n\n* You can list several archive member names inside parenthesis:\n  `lib(mem1 mem2 mem3)' is equivalent to `lib(mem1) lib(mem2) lib(mem3)'.\n\n* You can use wildcards inside archive member references.  For example,\n  `lib(*.o)' expands to all existing members of `lib' whose names end in\n  `.o' (e.g. `lib(a.o) lib(b.o)'); `*.a(*.o)' expands to all such members\n  of all existing files whose names end in `.a' (e.g. `foo.a(a.o)\n  foo.a(b.o) bar.a(c.o) bar.a(d.o)'.\n\n* A suffix rule `.X.a' now produces two pattern rules:\n\t(%.o): %.X\t# Previous versions produced only this.\n\t%.a: %.X\t# Now produces this as well, just like other suffixes.\n\n* The new flag `--warn-undefined-variables' says to issue a warning message\n  whenever Make expands a reference to an undefined variable.\n\n* The new `-include' directive is just like `include' except that there is\n  no error (not even a warning) for a nonexistent makefile.\n\n* Commands in an invocation of the `shell' function are now run with a\n  modified environment like target commands are, so you can use `export' et\n  al to set up variables for them.  They used to run with the environment\n  that `make' started with.\n\f\nVersion 3.66\n\n* `make --version' (or `make -v') now exits immediately after printing\n  the version number.\n\f\nVersion 3.65\n\n* Make now supports long-named members in `ar' archive files.\n\f\nVersion 3.64\n\n* Make now supports the `+=' syntax for a variable definition which appends\n  to the variable's previous value.  See the section `Appending More Text\n  to Variables' in the manual for full details.\n\n* The new option `--no-print-directory' inhibits the `-w' or\n  `--print-directory' feature.  Make turns on `--print-directory'\n  automatically if you use `-C' or `--directory', and in sub-makes; some\n  users have found this behavior undesirable.\n\n* The built-in implicit rules now support the alternative extension\n  `.txinfo' for Texinfo files, just like `.texinfo' and `.texi'.\n\f\nVersion 3.63\n\n* Make now uses a standard GNU `configure' script.  See the new file\n  INSTALL for the new (and much simpler) installation procedure.\n\n* There is now a shell script to build Make the first time, if you have no\n  other `make' program.  `build.sh' is created by `configure'; see README.\n\n* GNU Make now completely conforms to the POSIX.2 specification for `make'.\n\n* Elements of the `$^' and `$?' automatic variables that are archive\n  member references now list only the member name, as in Unix and POSIX.2.\n\n* You should no longer ever need to specify the `-w' switch, which prints\n  the current directory before and after Make runs.  The `-C' switch to\n  change directory, and recursive use of Make, now set `-w' automatically.\n\n* Multiple double-colon rules for the same target will no longer have their\n  commands run simultaneously under -j, as this could result in the two\n  commands trying to change the file at the same time and interfering with\n  one another.\n\n* The `SHELL' variable is now never taken from the environment.\n  Each makefile that wants a shell other than the default (/bin/sh) must\n  set SHELL itself.  SHELL is always exported to child processes.\n  This change was made for compatibility with POSIX.2.\n\n* Make now accepts long options.  There is now an informative usage message\n  that tells you what all the options are and what they do.  Try `make --help'.\n\n* There are two new directives: `export' and `unexport'.  All variables are\n  no longer automatically put into the environments of the commands that\n  Make runs.  Instead, only variables specified on the command line or in\n  the environment are exported by default.  To export others, use:\n\texport VARIABLE\n  or you can define variables with:\n\texport VARIABLE = VALUE\n  or:\n\texport VARIABLE := VALUE\n  You can use just:\n\texport\n  or:\n\t.EXPORT_ALL_VARIABLES:\n  to get the old behavior.  See the node `Variables/Recursion' in the manual\n  for a full description.\n\n* The commands from the `.DEFAULT' special target are only applied to\n  targets which have no rules at all, not all targets with no commands.\n  This change was made for compatibility with Unix make.\n\n* All fatal error messages now contain `***', so they are easy to find in\n  compilation logs.\n\n* Dependency file names like `-lNAME' are now replaced with the actual file\n  name found, as with files found by normal directory search (VPATH).\n  The library file `libNAME.a' may now be found in the current directory,\n  which is checked before VPATH; the standard set of directories (/lib,\n  /usr/lib, /usr/local/lib) is now checked last.\n  See the node `Libraries/Search' in the manual for full details.\n\n* A single `include' directive can now specify more than one makefile to\n  include, like this:\n\tinclude file1 file2\n  You can also use shell file name patterns in an `include' directive:\n\tinclude *.mk\n\n* The default directories to search for included makefiles, and for\n  libraries specified with `-lNAME', are now set by configuration.\n\n* You can now use blanks as well as colons to separate the directories in a\n  search path for the `vpath' directive or the `VPATH' variable.\n\n* You can now use variables and functions in the left hand side of a\n  variable assignment, as in \"$(foo)bar = value\".\n\n* The `MAKE' variable is always defined as `$(MAKE_COMMAND) $(MAKEOVERRIDES)'.\n  The `MAKE_COMMAND' variable is now defined to the name with which make\n  was invoked.\n\n* The built-in rules for C++ compilation now use the variables `$(CXX)' and\n  `$(CXXFLAGS)' instead of `$(C++)' and `$(C++FLAGS)'.  The old names had\n  problems with shells that cannot have `+' in environment variable names.\n\n* The value of a recursively expanded variable is now expanded when putting\n  it into the environment for child processes.  This change was made for\n  compatibility with Unix make.\n\n* A rule with no targets before the `:' is now accepted and ignored.\n  This change was made for compatibility with SunOS 4 make.\n  We do not recommend that you write your makefiles to take advantage of this.\n\n* The `-I' switch can now be used in MAKEFLAGS, and are put there\n  automatically just like other switches.\n\f\nVersion 3.61\n\n* Built-in rules for C++ source files with the `.C' suffix.\n  We still recommend that you use `.cc' instead.\n\n* If commands are given too many times for a single target,\n  the last set given is used, and a warning message is printed.\n\n* Error messages about makefiles are in standard GNU error format,\n  so C-x ` in Emacs works on them.\n\n* Dependencies of pattern rules which contain no % need not actually exist\n  if they can be created (just like dependencies which do have a %).\n\f\nVersion 3.60\n\n* A message is always printed when Make decides there is nothing to be done.\n  It used to be that no message was printed for top-level phony targets\n  (because \"`phony' is up to date\" isn't quite right).  Now a different\n  message \"Nothing to be done for `phony'\" is printed in that case.\n\n* Archives on AIX now supposedly work.\n\n* When the commands specified for .DEFAULT are used to update a target,\n  the $< automatic variable is given the same value as $@ for that target.\n  This is how Unix make behaves, and this behavior is mandated by POSIX.2.\n\f\nVersion 3.59\n\n* The -n, -q, and -t options are not put in the `MAKEFLAGS' and `MFLAG'\n  variables while remaking makefiles, so recursive makes done while remaking\n  makefiles will behave properly.\n\n* If the special target `.NOEXPORT' is specified in a makefile,\n  only variables that came from the environment and variables\n  defined on the command line are exported.\n\f\nVersion 3.58\n\n* Suffix rules may have dependencies (which are ignored).\n\f\nVersion 3.57\n\n* Dependencies of the form `-lLIB' are searched for as /usr/local/lib/libLIB.a\n  as well as libLIB.a in /usr/lib, /lib, the current directory, and VPATH.\n\f\nVersion 3.55\n\n* There is now a Unix man page for GNU Make.  It is certainly not a replacement\nfor the Texinfo manual, but it documents the basic functionality and the\nswitches.  For full documentation, you should still read the Texinfo manual.\nThanks to Dennis Morse of Stanford University for contributing the initial\nversion of this.\n\n* Variables which are defined by default (e.g., `CC') will no longer be put\ninto the environment for child processes.  (If these variables are reset by the\nenvironment, makefiles, or the command line, they will still go into the\nenvironment.)\n\n* Makefiles which have commands but no dependencies (and thus are always\n  considered out of date and in need of remaking), will not be remade (if they\n  were being remade only because they were makefiles).  This means that GNU\n  Make will no longer go into an infinite loop when fed the makefiles that\n  `imake' (necessary to build X Windows) produces.\n\n* There is no longer a warning for using the `vpath' directive with an explicit\npathname (instead of a `%' pattern).\n\f\nVersion 3.51\n\n* When removing intermediate files, only one `rm' command line is printed,\nlisting all file names.\n\n* There are now automatic variables `$(^D)', `$(^F)', `$(?D)', and `$(?F)'.\nThese are the directory-only and file-only versions of `$^' and `$?'.\n\n* Library dependencies given as `-lNAME' will use \"libNAME.a\" in the current\ndirectory if it exists.\n\n* The automatic variable `$($/)' is no longer defined.\n\n* Leading `+' characters on a command line make that line be executed even\nunder -n, -t, or -q (as if the line contained `$(MAKE)').\n\n* For command lines containing `$(MAKE)', `${MAKE}', or leading `+' characters,\nonly those lines are executed, not their entire rules.\n(This is how Unix make behaves for lines containing `$(MAKE)' or `${MAKE}'.)\n\f\nVersion 3.50\n\n* Filenames in rules will now have ~ and ~USER expanded.\n\n* The `-p' output has been changed so it can be used as a makefile.\n(All information that isn't specified by makefiles is prefaced with comment\ncharacters.)\n\f\nVersion 3.49\n\n* The % character can be quoted with backslash in implicit pattern rules,\nstatic pattern rules, `vpath' directives, and `patsubst', `filter', and\n`filter-out' functions.  A warning is issued if a `vpath' directive's\npattern contains no %.\n\n* The `wildcard' variable expansion function now expands ~ and ~USER.\n\n* Messages indicating failed commands now contain the target name:\n\tmake: *** [target] Error 1\n\n* The `-p' output format has been changed somewhat to look more like\nmakefile rules and to give all information that Make has about files.\n\f\nVersion 3.48\n\f\nVersion 3.47\n\n* The `-l' switch with no argument removes any previous load-average limit.\n\n* When the `-w' switch is in effect, and Make has updated makefiles,\nit will write a `Leaving directory' messagfe before re-executing itself.\nThis makes the `directory change tracking' changes to Emacs's compilation\ncommands work properly.\n\f\nVersion 3.46\n\n* The automatic variable `$*' is now defined for explicit rules,\nas it is in Unix make.\n\f\nVersion 3.45\n\n* The `-j' switch is now put in the MAKEFLAGS and MFLAGS variables when\nspecified without an argument (indicating infinite jobs).\nThe `-l' switch is not always put in the MAKEFLAGS and MFLAGS variables.\n\n* Make no longer checks hashed directories after running commands.\nThe behavior implemented in 3.41 caused too much slowdown.\n\f\nVersion 3.44\n\n* A dependency is NOT considered newer than its dependent if\nthey have the same modification time.  The behavior implemented\nin 3.43 conflicts with RCS.\n\f\nVersion 3.43\n\n* Dependency loops are no longer fatal errors.\n\n* A dependency is considered newer than its dependent if\nthey have the same modification time.\n\f\nVersion 3.42\n\n* The variables F77 and F77FLAGS are now set by default to $(FC) and\n$(FFLAGS).  Makefiles designed for System V make may use these variables in\nexplicit rules and expect them to be set.  Unfortunately, there is no way to\nmake setting these affect the Fortran implicit rules unless FC and FFLAGS\nare not used (and these are used by BSD make).\n\f\nVersion 3.41\n\n* Make now checks to see if its hashed directories are changed by commands.\nOther makes that hash directories (Sun, 4.3 BSD) don't do this.\n\f\nVersion 3.39\n\n* The `shell' function no longer captures standard error output.\n\f\nVersion 3.32\n\n* A file beginning with a dot can be the default target if it also contains\na slash (e.g., `../bin/foo').  (Unix make allows this as well.)\n\f\nVersion 3.31\n\n* Archive member names are truncated to 15 characters.\n\n* Yet more USG stuff.\n\n* Minimal support for Microport System V (a 16-bit machine and a\nbrain-damaged compiler).  This has even lower priority than other USG\nsupport, so if it gets beyond trivial, I will take it out completely.\n\n* Revamped default implicit rules (not much visible change).\n\n* The -d and -p options can come from the environment.\n\f\nVersion 3.30\n\n* Improved support for USG and HPUX (hopefully).\n\n* A variable reference like `$(foo:a=b)', if `a' contains a `%', is\nequivalent to `$(patsubst a,b,$(foo))'.\n\n* Defining .DEFAULT with no deps or commands clears its commands.\n\n* New default implicit rules for .S (cpp, then as), and .sh (copy and make\nexecutable).  All default implicit rules that use cpp (even indirectly), use\n$(CPPFLAGS).\n\f\nVersion 3.29\n\n* Giving the -j option with no arguments gives you infinite jobs.\n\f\nVersion 3.28\n\n* New option: \"-l LOAD\" says not to start any new jobs while others are\nrunning if the load average is not below LOAD (a floating-point number).\n\n* There is support in place for implementations of remote command execution\nin Make.  See the file remote.c.\n\f\nVersion 3.26\n\n* No more than 10 directories will be kept open at once.\n(This number can be changed by redefining MAX_OPEN_DIRECTORIES in dir.c.)\n\f\nVersion 3.25\n\n* Archive files will have their modification times recorded before doing\nanything that might change their modification times by updating an archive\nmember.\n\f\nVersion 3.20\n\n* The `MAKELEVEL' variable is defined for use by makefiles.\n\f\nVersion 3.19\n\n* The recursion level indications in error messages are much shorter than\nthey were in version 3.14.\n\f\nVersion 3.18\n\n* Leading spaces before directives are ignored (as documented).\n\n* Included makefiles can determine the default goal target.\n(System V Make does it this way, so we are being compatible).\n\f\nVersion 3.14.\n\n* Variables that are defaults built into Make will not be put in the\nenvironment for children.  This just saves some environment space and,\nexcept under -e, will be transparent to sub-makes.\n\n* Error messages from sub-makes will indicate the level of recursion.\n\n* Hopefully some speed-up for large directories due to a change in the\ndirectory hashing scheme.\n\n* One child will always get a standard input that is usable.\n\n* Default makefiles that don't exist will be remade and read in.\n\f\nVersion 3.13.\n\n* Count parentheses inside expansion function calls so you can\nhave nested calls: `$(sort $(foreach x,a b,$(x)))'.\n\f\nVersion 3.12.\n\n* Several bug fixes, including USG and Sun386i support.\n\n* `shell' function to expand shell commands a la `\n\n* If the `-d' flag is given, version information will be printed.\n\n* The `-c' option has been renamed to `-C' for compatibility with tar.\n\n* The `-p' option no longer inhibits other normal operation.\n\n* Makefiles will be updated and re-read if necessary.\n\n* Can now run several commands at once (parallelism), -j option.\n\n* Error messages will contain the level of Make recursion, if any.\n\n* The `MAKEFLAGS' and `MFLAGS' variables will be scanned for options after\nmakefiles are read.\n\n* A double-colon rule with no dependencies will always have its commands run.\n(This is how both the BSD and System V versions of Make do it.)\n\f\nVersion 3.05\n\n(Changes from versions 1 through 3.05 were never recorded.  Sorry.)\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/NMakefile",
    "content": "# -*-Makefile-*- to build GNU make with nmake\n#\n# NOTE: If you have no 'make' program at all to process this makefile,\n# run 'build_w32.bat' instead.\n#\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n# 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nLINK = link\nCC = cl\nMAKE = nmake\n\nOUTDIR=.\nMAKEFILE=NMakefile\nSUBPROC_MAKEFILE=NMakefile\n\nCFLAGS_any = /nologo /MT /W4 /GX /Zi /YX /I . /I glob /I w32/include /D WIN32 /D WINDOWS32 /D _CONSOLE /D HAVE_CONFIG_H\nCFLAGS_debug = $(CFLAGS_any) /Od /D DEBUG /D _DEBUG /FR.\\WinDebug/ /Fp.\\WinDebug/make.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/make.pdb\nCFLAGS_release = $(CFLAGS_any) /O2 /D NDEBUG /FR.\\WinRel/ /Fp.\\WinRel/make.pch /Fo.\\WinRel/\n\nLDFLAGS_debug = w32\\subproc\\WinDebug\\subproc.lib /NOLOGO /SUBSYSTEM:console\\\n\t/INCREMENTAL:no /PDB:WinDebug/make.pdb /MACHINE:I386 \\\n\t/OUT:WinDebug/make.exe /DEBUG\nLDFLAGS_release = w32\\subproc\\WinRel\\subproc.lib /NOLOGO /SUBSYSTEM:console\\\n\t/INCREMENTAL:no /MACHINE:I386 /OUT:WinRel/make.exe\n\nall: config.h subproc Release Debug\n\n#\n# Make sure we build the subproc library first. It has it's own\n# makefile. To be portable to Windows 95, we put the instructions\n# on how to build the library into a batch file. On NT, we could\n# simply have done foo && bar && dog, but this doesn't port.\n#\nsubproc: w32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib\n\nw32/subproc/WinDebug/subproc.lib w32/subproc/WinRel/subproc.lib: w32/subproc/misc.c w32/subproc/sub_proc.c w32/subproc/w32err.c\n\tsubproc.bat $(SUBPROC_MAKEFILE) $(MAKE)\n\tif exist WinDebug\\make.exe erase WinDebug\\make.exe\n\tif exist WinRel\\make.exe erase WinRel\\make.exe\n\nconfig.h: config.h.W32\n\tcopy $? $@\n\nRelease:\n\t$(MAKE) /f $(MAKEFILE) LDFLAGS=\"$(LDFLAGS_release)\" CFLAGS=\"$(CFLAGS_release)\" OUTDIR=WinRel WinRel/make.exe\nDebug:\n\t$(MAKE) /f $(MAKEFILE) LDFLAGS=\"$(LDFLAGS_debug)\" CFLAGS=\"$(CFLAGS_debug)\" OUTDIR=WinDebug WinDebug/make.exe\n\nclean:\n\tif exist WinDebug\\nul rmdir /s /q WinDebug\n\tif exist WinRel\\nul rmdir /s /q WinRel\n\tif exist w32\\subproc\\WinDebug\\nul rmdir /s /q w32\\subproc\\WinDebug\n\tif exist w32\\subproc\\WinRel\\nul rmdir /s /q w32\\subproc\\WinRel\n\tif exist config.h erase config.h\n\terase *.pdb\n\n$(OUTDIR):\n\tif not exist .\\$@\\nul mkdir .\\$@\n\nLIBS = kernel32.lib user32.lib advapi32.lib\n\nOBJS = \\\n\t$(OUTDIR)/ar.obj \\\n\t$(OUTDIR)/arscan.obj \\\n\t$(OUTDIR)/commands.obj \\\n\t$(OUTDIR)/default.obj \\\n\t$(OUTDIR)/dir.obj \\\n\t$(OUTDIR)/expand.obj \\\n\t$(OUTDIR)/file.obj \\\n\t$(OUTDIR)/function.obj \\\n\t$(OUTDIR)/getloadavg.obj \\\n\t$(OUTDIR)/getopt.obj \\\n\t$(OUTDIR)/getopt1.obj \\\n\t$(OUTDIR)/hash.obj \\\n\t$(OUTDIR)/implicit.obj \\\n\t$(OUTDIR)/job.obj \\\n\t$(OUTDIR)/main.obj \\\n\t$(OUTDIR)/misc.obj \\\n\t$(OUTDIR)/read.obj \\\n\t$(OUTDIR)/remake.obj \\\n\t$(OUTDIR)/remote-stub.obj \\\n\t$(OUTDIR)/rule.obj \\\n\t$(OUTDIR)/signame.obj \\\n\t$(OUTDIR)/strcache.obj \\\n\t$(OUTDIR)/variable.obj \\\n\t$(OUTDIR)/version.obj \\\n\t$(OUTDIR)/vpath.obj \\\n\t$(OUTDIR)/glob.obj \\\n\t$(OUTDIR)/fnmatch.obj \\\n\t$(OUTDIR)/dirent.obj \\\n\t$(OUTDIR)/pathstuff.obj\n\n$(OUTDIR)/make.exe: $(OUTDIR) $(OBJS)\n\t$(LINK) @<<\n\t\t$(LDFLAGS) $(LIBS) $(OBJS)\n<<\n\n.c{$(OUTDIR)}.obj:\n\t$(CC) $(CFLAGS) /c $<\n\n$(OUTDIR)/glob.obj : glob/glob.c\n\t$(CC) $(CFLAGS) /c $?\n$(OUTDIR)/fnmatch.obj : glob/fnmatch.c\n\t$(CC) $(CFLAGS) /c $?\n$(OUTDIR)/dirent.obj : w32/compat/dirent.c\n\t$(CC) $(CFLAGS) /c $?\n$(OUTDIR)/pathstuff.obj : w32/pathstuff.c\n\t$(CC) $(CFLAGS) /c $?\n\n# --------------- DEPENDENCIES\n#\n\n# .deps/alloca.Po\n# dummy\n\n# .deps/ar.Po\nar.o ar.o: ar.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h dep.h \\\n\n# .deps/arscan.Po\narscan.o arscan.o: arscan.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/commands.Po\ncommands.o commands.o: commands.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h\n\n# .deps/default.Po\ndefault.o default.o: default.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h rule.h \\\n  dep.h job.h commands.h\n\n# .deps/dir.Po\ndir.o dir.o: dir.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h \\\n\n# .deps/expand.Po\nexpand.o expand.o: expand.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h \\\n  job.h commands.h \\\n  variable.h rule.h\n\n# .deps/file.Po\nfile.o file.o: file.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h debug.h\n\n# .deps/function.Po\nfunction.o function.o: function.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h dep.h \\\n  job.h commands.h debug.h\n\n# .deps/getloadavg.Po\n# dummy\n\n# .deps/getopt.Po\ngetopt.o getopt.o: getopt.c config.h \\\n\n# .deps/getopt1.Po\ngetopt1.o getopt1.o: getopt1.c config.h getopt.h \\\n\n# .deps/hash.Po\nhash.o hash.o: hash.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/implicit.Po\nimplicit.o implicit.o: implicit.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h rule.h dep.h debug.h \\\n  variable.h job.h \\\n  commands.h\n\n# .deps/job.Po\njob.o job.o: job.c make.h config.h \\\n  getopt.h \\\n  gettext.h job.h \\\n  debug.h filedef.h hash.h \\\n  commands.h variable.h \\\n\n# .deps/loadavg-getloadavg.Po\nloadavg-getloadavg.o loadavg-getloadavg.o: getloadavg.c config.h \\\n  make.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/main.Po\nmain.o main.o: main.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h rule.h \\\n  debug.h getopt.h \\\n\n# .deps/misc.Po\nmisc.o misc.o: misc.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h debug.h\n\n# .deps/read.Po\nread.o read.o: read.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n  dep.h filedef.h hash.h job.h \\\n  commands.h variable.h rule.h debug.h \\\n\n# .deps/remake.Po\nremake.o remake.o: remake.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h dep.h \\\n  variable.h debug.h\n\n# .deps/remote-cstms.Po\n# dummy\n\n# .deps/remote-stub.Po\nremote-stub.o remote-stub.o: remote-stub.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h\n\n# .deps/rule.Po\nrule.o rule.o: rule.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h job.h \\\n  commands.h variable.h \\\n  rule.h\n\n# .deps/signame.Po\nsigname.o signame.o: signame.c make.h config.h \\\n  getopt.h \\\n  gettext.h\n\n# .deps/strcache.Po\nstrcache.o strcache.o: strcache.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/variable.Po\nvariable.o variable.o: variable.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h rule.h\n\n# .deps/version.Po\nversion.o version.o: version.c config.h\n\n# .deps/vmsjobs.Po\n# dummy\n\n# .deps/vpath.Po\nvpath.o vpath.o: vpath.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README",
    "content": "This directory contains the 3.81 release of GNU Make.\n\nSee the file NEWS for the user-visible changes from previous releases.\nIn addition, there have been bugs fixed.\n\nPlease check the system-specific notes below for any caveats related to\nyour operating system.\n\nFor general building and installation instructions, see the file INSTALL.\n\nIf you need to build GNU Make and have no other `make' program to use,\nyou can use the shell script `build.sh' instead.  To do this, first run\n`configure' as described in INSTALL.  Then, instead of typing `make' to\nbuild the program, type `sh build.sh'.  This should compile the program\nin the current directory.  Then you will have a Make program that you can\nuse for `./make install', or whatever else.\n\nSome systems' Make programs are broken and cannot process the Makefile for\nGNU Make.  If you get errors from your system's Make when building GNU\nMake, try using `build.sh' instead.\n\n\nGNU Make is free software.  See the file COPYING for copying conditions.\n\n\nDownloading\n-----------\n\nGNU Make can be obtained in many different ways.  See a description here:\n\n  http://www.gnu.org/software/software.html\n\n\nDocumentation\n-------------\n\nGNU make is fully documented in the GNU Make manual, which is contained\nin this distribution as the file make.texinfo.  You can also find\non-line and preformatted (PostScript and DVI) versions at the FSF's web\nsite.  There is information there about ordering hardcopy documentation.\n\n  http://www.gnu.org/\n  http://www.gnu.org/doc/doc.html\n  http://www.gnu.org/manual/manual.html\n\n\nDevelopment\n-----------\n\nGNU Make development is hosted by Savannah, the FSF's online development\nmanagement tool.  Savannah is here:\n\n  http://savannah.gnu.org\n\nAnd the GNU Make development page is here:\n\n  http://savannah.gnu.org/projects/make/\n\nYou can find most information concerning the development of GNU Make at\nthis site.\n\n\nBug Reporting\n-------------\n\nYou can send GNU make bug reports to <bug-make@gnu.org>.  Please see the\nsection of the GNU make manual entitled `Problems and Bugs' for\ninformation on submitting useful and complete bug reports.\n\nYou can also use the online bug tracking system in the Savannah GNU Make\nproject to submit new problem reports or search for existing ones:\n\n  http://savannah.gnu.org/bugs/?group=make\n\nIf you need help using GNU make, try these forums:\n\n  help-make@gnu.org\n  help-utils@gnu.org\n  news:gnu.utils.help\n  news:gnu.utils.bug\n\n  http://savannah.gnu.org/support/?group=make\n\nYou may also find interesting patches to GNU Make available here:\n\n  http://savannah.gnu.org/patch/?group=make\n\nNote these patches are provided by our users as a service and we make no\nstatements regarding their correctness.  Please contact the authors\ndirectly if you have a problem or suggestion for a patch available on\nthis page.\n\n\nCVS Access\n----------\n\nThe GNU make source repository is available via anonymous CVS from the\nGNU Subversions CVS server; look here for details:\n\n  http://savannah.gnu.org/cvs/?group=make\n\nPlease note: you won't be able to build GNU make from CVS without\ninstalling appropriate maintainer's tools, such as GNU m4, automake,\nautoconf, Perl, GNU make, and GCC.  See the README.cvs file for hints on\nhow to build GNU make once these tools are available.  We make no\nguarantees about the contents or quality of the latest code in the CVS\nrepository: it is not unheard of for code that is known to be broken to\nbe checked in.  Use at your own risk.\n\n\nSystem-specific Notes\n---------------------\n\nIt has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such\nthat if you compile make with `cc -O' on AIX 3.2, it will not work\ncorrectly.  It is said that using `cc' without `-O' does work.\n\nThe standard /bin/sh on SunOS 4.1.3_U1 and 4.1.4 is broken and cannot be\nused to configure GNU make.  Please install a different shell such as\nbash or pdksh in order to run \"configure\".  See this message for more\ninformation:\n  http://mail.gnu.org/archive/html/bug-autoconf/2003-10/msg00190.html\n\nOne area that is often a problem in configuration and porting is the code\nto check the system's current load average.  To make it easier to test and\ndebug this code, you can do `make check-loadavg' to see if it works\nproperly on your system.  (You must run `configure' beforehand, but you\nneed not build Make itself to run this test.)\n\nAnother potential source of porting problems is the support for large\nfiles (LFS) in configure for those operating systems that provide it.\nPlease report any bugs that you find in this area.  If you run into\ndifficulties, then as a workaround you should be able to disable LFS by\nadding the `--disable-largefile' option to the `configure' script.\n\nOn systems that support micro- and nano-second timestamp values and\nwhere stat(2) provides this information, GNU make will use it when\ncomparing timestamps to get the most accurate possible result.  However,\nnote that many current implementations of tools that *set* timestamps do\nnot preserve micro- or nano-second granularity.  This means that \"cp -p\"\nand other similar tools (tar, etc.) may not exactly duplicate timestamps\nwith micro- and nano-second granularity on some systems.  If your build\nsystem contains rules that depend on proper behavior of tools like \"cp\n-p\", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to\nforce make to treat them properly.  See the manual for details.\n\n\nPorts\n-----\n\n  - See README.customs for details on integrating GNU make with the\n    Customs distributed build environment from the Pmake distribution.\n\n  - See readme.vms for details about GNU Make on OpenVMS.\n\n  - See README.Amiga for details about GNU Make on AmigaDOS.\n\n  - See README.W32 for details about GNU Make on Windows NT, 95, or 98.\n\n  - See README.DOS for compilation instructions on MS-DOS and MS-Windows\n    using DJGPP tools.\n\n    A precompiled binary of the MSDOS port of GNU Make is available as part\n    of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more\n    information.\n\nPlease note there are two _separate_ ports of GNU make for Microsoft\nsystems: a native Windows tool built with (for example) MSVC or Cygwin,\nand a DOS-based tool built with DJGPP.  Please be sure you are looking\nat the right README!\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,\nInc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README.Amiga",
    "content": "Short: Port of GNU make with SAS/C (no ixemul.library required)\nAuthor: GNU, Amiga port by Aaron \"Optimizer\" Digulla\nUploader: Aaron \"Optimizer\" Digulla (digulla@fh-konstanz.de)\nType: dev/c\n\nThis is a pure Amiga port of GNU make. It needs no extra libraries or\nanything. It has the following features (in addition to any features of\nGNU make):\n\n- Runs Amiga-Commands with SystemTags() (Execute)\n- Can run multi-line statements\n- Allows to use Device-Names in targets:\n\n\tc:make : make.o\n\n    is ok. To distinguish between device-names and target : or ::, MAKE\n    looks for spaces. If there are any around :, it's taken as a target\n    delimiter, if there are none, it's taken as the name of a device. Note\n    that \"make:make.o\" tries to create \"make.o\" on the device \"make:\".\n- Replaces @@ by a newline in any command line:\n\n\tif exists make @@\\\n\t    delete make.bak quiet @@\\\n\t    rename make make.bak @@\\\n\tendif @@\\\n\t$(CC) Link Make.o To make\n\n    works. Note that the @@ must stand alone (ie. \"make@@\\\" is illegal).\n    Also be carefull that there is a space after the \"\\\" (ie, at the\n    beginning of the next line).\n- Can be made resident to save space and time\n- Amiga specific wildcards can be used in $(wildcard ...)\n\nBUGS:\n- The line\n\n    dummy.h : src/*.c\n\ntries to make dummy.h from \"src/*.c\" (ie. no wildcard-expansion takes\nplace). You have to use \"$(wildcard src/*.c)\" instead.\n\nCOMPILING FROM SCRATCH\n----------------------\n\nTo recompile, you need SAS/C 6.51. make itself is not neccessary, there\nis an smakefile.\n\n1. Copy config.ami to config.h\n2. If you use make to compie, copy Makefile.ami to Makefile and\n    glob/Makefile.ami to glob/Makefile. Copy make into the current\n    directory.\n\n3. Run smake/make\n\nINSTALLATION\n\nCopy make somewhere in your search path (eg. sc:c or sc:bin).\nIf you plan to use recursive makes, install make resident:\n\n    Resident make Add\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README.DOS",
    "content": "Port of GNU Make to 32-bit protected mode on MSDOS and MS-Windows.\n\nBuilds with DJGPP v2 port of GNU C/C++ compiler and utilities.\n\n\nNew (since 3.74) DOS-specific features:\n\n   1. Supports long filenames when run from DOS box on Windows 9x.\n\n   2. Supports both stock DOS COMMAND.COM and Unix-style shells\n      (details in ``Notes'' below).\n\n   3. Supports DOS drive letters in dependencies and pattern rules.\n\n   4. Better support for DOS-style backslashes in pathnames (but see\n      ``Notes'' below).\n\n   5. The $(shell) built-in can run arbitrary complex commands,\n      including pipes and redirection, even when COMMAND.COM is your\n      shell.\n\n   6. Can be built without floating-point code (see below).\n\n   7. Supports signals in child programs and restores the original\n      directory if the child was interrupted.\n\n   8. Can be built without (a previous version of) Make.\n\n   9. The build process requires only standard tools.  (Optional\n      targets like \"install:\" and \"clean:\" still need additional\n      programs, though, see below.)\n\n  10. Beginning with v3.78, the test suite works in the DJGPP\n      environment (requires Perl and auxiliary tools; see below).\n\n\nTo install a binary distribution:\n\n   Simply unzip the makNNNb.zip file (where NNN is the version number)\n   preserving the directory structure (-d switch if you use PKUNZIP).\n   If you are installing Make on Windows 9X or Windows 2000, use an\n   unzip program that supports long filenames in zip files.  After\n   unzipping, make sure the directory with make.exe is on your PATH,\n   and that's all you need to use Make.\n\n\nTo build from sources:\n\n   1. Unzip the archive, preserving the directory structure (-d switch\n      if you use PKUNZIP).  If you build Make on Windows 9X or Windows\n      2000, use an unzip program that supports long filenames in zip\n      files.\n\n      If you are unpacking an official GNU source distribution, use\n      either DJTAR (which is part of the DJGPP development\n      environment), or the DJGPP port of GNU Tar.\n\n   2. Invoke the `configure.bat' batch file.\n\n      If you are building Make in-place, i.e. in the same directory\n      where its sources are kept, just type \"configure.bat\" and press\n      [Enter].  Otherwise, you need to supply the path to the source\n      directory as an argument to the batch file, like this:\n\n\tc:\\djgpp\\gnu\\make-3.81\\configure.bat c:/djgpp/gnu/make-3.81\n\n      Note the forward slashes in the source path argument: you MUST\n      use them here.\n\n   3. If configure.bat doesn't find a working Make, it will suggest to\n      use the `dosbuild.bat' batch file to build Make.  Either do as it\n      suggests or install another Make program (a pre-compiled binary\n      should be available from the usual DJGPP sites) and rerun\n      configure.bat.\n\n   4. If you will need to run Make on machines without an FPU, you\n      might consider building a version of Make which doesn't issue\n      floating-point instructions (they don't help much on MSDOS\n      anyway).  To this end, edit the Makefile created by\n      configure.bat and add -DNO_FLOAT to the value of CPPFLAGS.\n\n   5. Invoke Make.\n\n      If you are building from outside of the source directory, you\n      need to tell Make where the sources are, like this:\n\n\t        make srcdir=c:/djgpp/gnu/make-3.81\n\n      (configure.bat will tell you this when it finishes).  You MUST\n      use a full, not relative, name of the source directory here, or\n      else Make might fail.\n\n   6. After Make finishes, if you have a Unix-style shell installed,\n      you can use the `install' target to install the package.  You\n      will also need GNU Fileutils and GNU Sed for this (they should\n      be available from the DJGPP sites).\n\n      By default, GNU make will install into your DJGPP installation\n      area.  If you wish to use a different directory, override the\n      DESTDIR variable when invoking \"make install\", like this:\n\n\t\tmake install DESTDIR=c:/other/dir\n\n      This causes the make executable to be placed in c:/other/dir/bin,\n      the man pages in c:/other/dir/man, etc.\n\n      Without a Unix-style shell, you will have to install programs\n      and the docs manually.  Copy make.exe to a directory on your\n      PATH, make.i* info files to your Info directory, and update the\n      file `dir' in your Info directory by adding the following item\n      to the main menu:\n\n\t* Make: (make.info).           The GNU make utility.\n\n      If you have the `install-info' program (from the GNU Texinfo\n      package), it will do that for you if you invoke it like this:\n\n\tinstall-info --info-dir=c:/djgpp/info c:/djgpp/info/make.info\n\n      (If your Info directory is other than C:\\DJGPP\\INFO, change this\n      command accordingly.)\n\n   7. The `clean' targets also require Unix-style shell, and GNU Sed\n      and `rm' programs (the latter from Fileutils).\n\n   8. To run the test suite, type \"make check\".  This requires a Unix\n      shell (I used the DJGPP port of Bash 2.03), Perl, Sed, Fileutils\n      and Sh-utils.\n\n\nNotes:\n-----\n\n   1. The shell issue.\n\n      This is probably the most significant improvement, first\n      introduced in the port of GNU Make 3.75.\n\n      The original behavior of GNU Make is to invoke commands\n      directly, as long as they don't include characters special to\n      the shell or internal shell commands, because that is faster.\n      When shell features like redirection or filename wildcards are\n      involved, Make calls the shell.\n\n      This port supports both DOS shells (the stock COMMAND.COM and its\n      4DOS/NDOS replacements), and Unix-style shells (tested with the\n      venerable Stewartson's `ms_sh' 2.3 and the DJGPP port of `bash' by\n      Daisuke Aoyama <jack@st.rim.or.jp>).\n\n      When the $SHELL variable points to a Unix-style shell, Make\n      works just like you'd expect on Unix, calling the shell for any\n      command that involves characters special to the shell or\n      internal shell commands.  The only difference is that, since\n      there is no standard way to pass command lines longer than the\n      infamous DOS 126-character limit, this port of Make writes the\n      command line to a temporary disk file and then invokes the shell\n      on that file.\n\n      If $SHELL points to a DOS-style shell, however, Make will not\n      call it automatically, as it does with Unix shells.  Stock\n      COMMAND.COM is too dumb and would unnecessarily limit the\n      functionality of Make.  For example, you would not be able to\n      use long command lines in commands that use redirection or\n      pipes.  Therefore, when presented with a DOS shell, this port of\n      Make will emulate most of the shell functionality, like\n      redirection and pipes, and shall only call the shell when a\n      batch file or a command internal to the shell is invoked.  (Even\n      when a command is an internal shell command, Make will first\n      search the $PATH for it, so that if a Makefile calls `mkdir',\n      you can install, say, a port of GNU `mkdir' and have it called\n      in that case.)\n\n      The key to all this is the extended functionality of `spawn' and\n      `system' functions from the DJGPP library; this port just calls\n      `system' where it would invoke the shell on Unix.  The most\n      important aspect of these functions is that they use a special\n      mechanism to pass long (up to 16KB) command lines to DJGPP\n      programs.  In addition, `system' emulates some internal\n      commands, like `cd' (so that you can now use forward slashes\n      with it, and can also change the drive if the directory is on\n      another drive).  Another aspect worth mentioning is that you can\n      call Unix shell scripts directly, provided that the shell whose\n      name is mentioned on the first line of the script is installed\n      anywhere along the $PATH.  It is impossible to tell here\n      everything about these functions; refer to the DJGPP library\n      reference for more details.\n\n      The $(shell) built-in is implemented in this port by calling\n      `popen'.  Since `popen' calls `system', the above considerations\n      are valid for $(shell) as well.  In particular, you can put\n      arbitrary complex commands, including pipes and redirection,\n      inside $(shell), which is in many cases a valid substitute for\n      the Unix-style command substitution (`command`) feature.\n\n\n   2. \"SHELL=/bin/sh\" -- or is it?\n\n      Many Unix Makefiles include a line which sets the SHELL, for\n      those versions of Make which don't have this as the default.\n      Since many DOS systems don't have `sh' installed (in fact, most\n      of them don't even have a `/bin' directory), this port takes\n      such directives with a grain of salt.  It will only honor such a\n      directive if the basename of the shell name (like `sh' in the\n      above example) can indeed be found in the directory that is\n      mentioned in the SHELL= line (`/bin' in the above example), or\n      in the current working directory, or anywhere on the $PATH (in\n      that order).  If the basename doesn't include a filename\n      extension, Make will look for any known extension that indicates\n      an executable file (.exe, .com, .bat, .btm, .sh, and even .sed\n      and .pl).  If any such file is found, then $SHELL will be\n      defined to the exact pathname of that file, and that shell will\n      hence be used for the rest of processing.  But if the named\n      shell is *not* found, the line which sets it will be effectively\n      ignored, leaving the value of $SHELL as it was before.  Since a\n      lot of decisions that this port makes depend on the gender of\n      the shell, I feel it doesn't make any sense to tailor Make's\n      behavior to a shell which is nowhere to be found.\n\n      Note that the above special handling of \"SHELL=\" only happens\n      for Makefiles; if you set $SHELL in the environment or on the\n      Make command line, you are expected to give the complete\n      pathname of the shell, including the filename extension.\n\n      The default value of $SHELL is computed as on Unix (see the Make\n      manual for details), except that if $SHELL is not defined in the\n      environment, $COMSPEC is used.  Also, if an environment variable\n      named $MAKESHELL is defined, it takes precedence over both\n      $COMSPEC and $SHELL.  Note that, unlike Unix, $SHELL in the\n      environment *is* used to set the shell (since on MSDOS, it's\n      unlikely that the interactive shell will not be suitable for\n      Makefile processing).\n\n      The bottom line is that you can now write Makefiles where some\n      of the targets require a real (i.e. Unix-like) shell, which will\n      nevertheless work when such shell is not available (provided, of\n      course, that the commands which should always work, don't\n      require such a shell).  More important, you can convert Unix\n      Makefiles to MSDOS and leave the line which sets the shell\n      intact, so that people who do have Unixy shell could use it for\n      targets which aren't converted to DOS (like `install' and\n      `uninstall', for example).\n\n\n   3. Default directories.\n\n      GNU Make knows about standard directories where it searches for\n      library and include files mentioned in the Makefile.  Since\n      MSDOS machines don't have standard places for these, this port\n      will search ${DJDIR}/lib and ${DJDIR}/include respectively.\n      $DJDIR is defined automatically by the DJGPP startup code as the\n      root of the DJGPP installation tree (unless you've tampered with\n      the DJGPP.ENV file).  This should provide reasonable default\n      values, unless you moved parts of DJGPP to other directories.\n\n\n   4. Letter-case in filenames.\n\n      If you run Make on Windows 9x, you should be aware of the\n      letter-case issue.  Make is internally case-sensitive, but all\n      file operations are case-insensitive on Windows 9x, so\n      e.g. files `FAQ', `faq' and `Faq' all refer to the same file, as\n      far as Windows is concerned.  The underlying DJGPP C library\n      functions honor the letter-case of the filenames they get from\n      the OS, except that by default, they down-case 8+3 DOS filenames\n      which are stored in upper case in the directory and would break\n      many Makefiles otherwise.  (The details of which filenames are\n      converted to lower case are explained in the DJGPP libc docs,\n      under the `_preserve_fncase' and `_lfn_gen_short_fname'\n      functions, but as a thumb rule, any filename that is stored in\n      upper case in the directory, is a valid DOS 8+3 filename and\n      doesn't include characters invalid on MSDOS FAT filesystems,\n      will be automatically down-cased.)  User reports that I have\n      indicate that this default behavior is generally what you'd\n      expect; however, your input is most welcome.\n\n      In any case, if you hit a situation where you must force Make to\n      get the 8+3 DOS filenames in upper case, set FNCASE=y in the\n      environment or in the Makefile.\n\n\n   5. DOS-style pathnames.\n\n      There are a lot of places throughout the program sources which\n      make implicit assumptions about the pathname syntax.  In\n      particular, the directories are assumed to be separated by `/',\n      and any pathname which doesn't begin with a `/' is assumed to be\n      relative to the current directory.  This port attempts to\n      support DOS-style pathnames which might include the drive letter\n      and use backslashes instead of forward slashes.  However, this\n      support is not complete; I feel that pursuing this support too\n      far might break some more important features, particularly if\n      you use a Unix-style shell (where a backslash is a quote\n      character).  I only consider support of backslashes desirable\n      because some Makefiles invoke non-DJGPP programs which don't\n      understand forward slashes.  A notable example of such programs\n      is the standard programs which come with MSDOS.  Otherwise, you\n      are advised to stay away from backslashes whenever possible.  In\n      particular, filename globbing won't work on pathnames with\n      backslashes, because the GNU `glob' library doesn't support them\n      (backslash is special in filename wildcards, and I didn't want\n      to break that).\n\n      One feature which *does* work with backslashes is the filename-\n      related built-in functions such as $(dir), $(notdir), etc.\n      Drive letters in pathnames are also fully supported.\n\n\n\nBug reports:\n-----------\n\n   Bugs that are clearly related to the MSDOS/DJGPP port should be\n   reported first on the comp.os.msdos.djgpp news group (if you cannot\n   post to Usenet groups, write to the DJGPP mailing list,\n   <djgpp@delorie.com>, which is an email gateway into the above news\n   group).  For other bugs, please follow the procedure explained in\n   the \"Bugs\" chapter of the Info docs.  If you don't have an Info\n   reader, look up that chapter in the `make.i1' file with any text\n   browser/editor.\n\n\n   Enjoy,\n\t\t\tEli Zaretskii <eliz@is.elta.co.il>\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README.OS2",
    "content": "Port of GNU make to OS/2.\n\nFeatures of GNU make that do not work under OS/2:\n  - remote job execution\n  - dynamic load balancing\n\n\nSpecial features of the OS/2 version:\n\nDue to the fact that some people might want to use sh syntax in\nMakefiles while others might want to use OS/2's native shell cmd.exe,\nGNU make supports both shell types. The following list defines the order\nthat is used to determine the shell:\n\n 1. The shell specified by the environment variable MAKESHELL.\n 2. The shell specified by the SHELL variable within a Makefile. As on\n    Unix, SHELL is NOT taken from the environment.\n 3. The shell specified by the COMSPEC environment variable.\n 4. The shell specified by the OS2_SHELL environment variable.\n 5. If none of the above is defined /bin/sh is used as default.  This\n    happens e.g. in the make testsuite.\n\nNote: - Points 3 and 4 can be turned off at compile time by adding\n        -DNO_CMD_DEFAULT to the CPPFLAGS.\n      - DOS support is not tested for EMX and therefore might not work.\n      - The UNIXROOT environment variable is supported to find /bin/sh\n        if it is not on the current drive.\n\n\nCOMPILATION OF GNU MAKE FOR OS/2:\n\nI. ***** SPECIAL OPTIONS *****\n\n - At compile time you can turn off that cmd is used as default shell\n   (but only /bin/sh). Simply set CPPFLAGS=\"-DNO_CMD_DEFAULT\" and make\n   will not use cmd unless you cause it to do so by setting MAKESHELL to\n   cmd or by specifying SHELL=cmd in your Makefile.\n\n - At compile time you can set CPPFLAGS=\"-DNO_CHDIR2\" to turn off that\n   GNU make prints drive letters. This is necessary if you want to run\n   the testsuite.\n\n\nII. ***** REQUIREMENTS FOR THE COMPILATION *****\n\nA standard Unix like build environment:\n\n - sh compatible shell (ksh, bash, ash, but tested only with pdksh 5.2.14\n   release 2)\n   If you use pdksh it is recommended to update to 5.2.14 release 2. Older\n   versions may not work! You can get this version at\n   http://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip\n - GNU file utilities (make sure that install.exe from the file utilities\n   is in front of your PATH before X:\\OS2\\INSTALL\\INSTALL.EXE. I recommend\n   also to change the filename to ginstall.exe instead of install.exe\n   to avoid confusion with X:\\OS2\\INSTALL\\INSTALL.EXE)\n - GNU shell utilities\n - GNU text utilities\n - gawk\n - grep\n - sed\n - GNU make 3.79.1 (special OS/2 patched version) or higher\n - perl 5.005 or higher\n - GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0)\n\nIf you want to recreate the configuration files (developers only!)\nyou need also: GNU m4 1.4, autoconf 2.59, automake 1.8.2 (or compatible)\n\n\nIII. ***** COMPILATION AND INSTALLATION *****\n\n a) ** Developers only - Everyone else should skip this section **\n    To recreate the configuration files use:\n\n      export EMXSHELL=ksh\n      aclocal -I config\n      automake\n      autoconf\n      autoheader\n\n\nb) Installation into x:/usr\n\n   Note: Although it is possible to compile make using \"./configure\",\n         \"make\", \"make install\" this is not recommended.  In particular,\n         you must ALWAYS use LDFLAGS=\"-Zstack 0x8000\" because the default\n         stack size is far to small and make will not work properly!\n\nRecommended environment variables and installation options:\n\n    export ac_executable_extensions=\".exe\"\n    export CPPFLAGS=\"-D__ST_MT_ERRNO__\"\n    export CFLAGS=\"-O2 -Zomf -Zmt\"\n    export LDFLAGS=\"-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000\"\n    export RANLIB=\"echo\"\n    ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext\n    make AR=emxomfar\n    make install\n\nNote: If you use gcc 2.9.x or higher I recommend to set also LIBS=\"-lgcc\"\n\nNote: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS.\n      See section I. for details.\n\n\nIV. ***** NLS support *****\n\nGNU make has NLS (National Language Support), with the following\ncaveats:\n\n a) It will only work with GNU gettext, and\n b) GNU gettext support is not included in the GNU make package.\n\nTherefore, if you wish to enable the internationalization features of\nGNU make you must install GNU gettext on your system before configuring\nGNU make.\n\nYou can choose the languages to be installed. To install support for\nEnglish, German and French only enter:\n\n  export LINGUAS=\"en de fr\"\n\nIf you don't specify LINGUAS all languages are installed.\n\nIf you don't want NLS support (English only) use the option\n--disable-nls for the configure script.  Note if GNU gettext is not\ninstalled then NLS will not be enabled regardless of this flag.\n\n\nV. ***** Running the make test suite *****\n\nTo run the included make test suite you have to set\n\n  CPPFLAGS=\"-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2\"\n\nbefore you compile make. This is due to some restrictions of the\ntestsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default\nshell in every case. Normally you could simply set MAKESHELL=\"/bin/sh\"\nto do this but the testsuite ignores the environment. -DNO_CHDIR2 causes\nmake not to use drive letters for directory names (i.e. _chdir2() and\n_getcwd2() are NOT used).  The testsuite interpretes the whole output of\nmake, especially statements like make[1]: Entering directory\n`C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the\ndrive letter. This would be interpreted as an error even if there is\nnone.\n\nTo run the testsuite do the following:\n\n  export CPPFLAGS=\"-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2\"\n  export CFLAGS=\"-Zomf -O2 -Zmt\"\n  export LDFLAGS=\"-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000\"\n  export RANLIB=\"echo\"\n  ./configure --prefix=x:/usr --disable-nls\n  make AR=emxomfar\n  make check\n\nAll tests should work fine with the exception of \"default_names\" which\nis because OS/2 file systems are not case sensitive (\"makefile\" and\n\"Makefile\" specify the same file).\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README.W32",
    "content": "This version of GNU make has been tested on Microsoft Windows 2000/XP/2003.\nIt has also been used on Windows 95/98/NT, and on OS/2.\n\nIt builds natively with MSVC 2.x, 4.x, 5.x, 6.x, and 2003 as well as\n.NET 7.x and .NET 2003.\n\nIt builds with the MinGW port of GCC 3.x (tested with GCC 3.4.2).\n\nThe Windows 32-bit port of GNU make is maintained jointly by various\npeople.  It was originally made by Rob Tulloh.\n\n\nDo this first, regardless of the build method you choose:\n---------------------------------------------------------\n\n 1. At the Windows command prompt run:\n\n      if not exist NMakefile copy NMakefile.template NMakefile\n      if not exist config.h copy config.h.W32 config.h\n\n    Then edit config.h to your liking (especially the few shell-related\n    defines near the end, or HAVE_CASE_INSENSITIVE_FS which corresponds\n    to './configure --enable-case-insensitive-file-system').\n\n\nUsing make_msvc_net2003.vcproj\n------------------------------\n\n 2. Open make_msvc_net2003.vcproj in MSVS71 or MSVC71 or any compatible IDE,\n    then build this project as usual.\n\n\nBuilding with (MinGW-)GCC using build_w32.bat\n---------------------------------------------\n\n 2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a\n    correct PATH and other environment variables for it, then execute ...\n\n\tbuild_w32.bat gcc\n\n    This produces gnumake.exe in the current directory.\n\n\nBuilding with (MSVC++-)cl using build_w32.bat or NMakefile\n----------------------------------------------------------\n\n 2. Open a W32 command prompt for your installed (MSVC++-)cl, setup a\n    correct PATH and other environment variables for it (usually via\n    executing vcvars32.bat or vsvars32.bat from the cl-installation,\n    e.g. \"%VS71COMNTOOLS%vsvars32.bat\"; or using a corresponding start\n    menue entry from the cl-installation), then execute EITHER ...\n\n\tbuild_w32.bat\n\n    (this produces WinDebug/gnumake.exe and WinRel/gnumake.exe)\n\n    ... OR ...\n\n\tnmake /f NMakefile\n\n    (this produces WinDebug/make.exe and WinRel/make.exe).\n\n\n-------------------\n-- Notes/Caveats --\n-------------------\n\nGNU make on Windows 32-bit platforms:\n\n\tThis version of make is ported natively to Windows32 platforms\n\t(Windows NT 3.51, Windows NT 4.0, Windows 95, and Windows 98). It\n\tdoes not rely on any 3rd party software or add-on packages for\n\tbuilding. The only thing needed is a version of Visual C++,\n\twhich is the predominant compiler used on Windows32 platforms.\n\n\tDo not confuse this port of GNU make with other Windows32 projects\n\twhich provide a GNU make binary. These are separate projects\n\tand are not connected to this port effort.\n\nGNU make and sh.exe:\n\n\tThis port prefers you have a working sh.exe somewhere on your\n\tsystem. If you don't have sh.exe, the port falls back to\n\tMSDOS mode for launching programs (via a batch file).\n\tThe MSDOS mode style execution has not been tested that\n\tcarefully though (The author uses GNU bash as sh.exe).\n\n\tThere are very few true ports of Bourne shell for NT right now.\n\tThere is a version of GNU bash available from Cygnus \"Cygwin\"\n\tporting effort (http://www.cygwin.com/).\n\tOther possibilities are the MKS version of sh.exe, or building\n        your own with a package like NutCracker (DataFocus) or Portage\n        (Consensys).  Also MinGW includes sh (http://mingw.org/).\n\nGNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL):\n\n\tSome versions of Bourne shell do not behave well when invoked\n\tas 'sh -c' from CreateProcess().  The main problem is they seem\n\tto have a hard time handling quoted strings correctly. This can\n\tbe circumvented by writing commands to be executed to a batch\n\tfile and then executing the command by calling 'sh file'.\n\n\tTo work around this difficulty, this version of make supports\n\ta batch mode.  When BATCH_MODE_ONLY_SHELL is defined at compile\n\ttime, make forces all command lines to be executed via script\n\tfiles instead of by command line.  In this mode you must have a\n\tworking sh.exe in order to use parallel builds (-j).\n\n\tA native Windows32 system with no Bourne shell will also run\n\tin batch mode.  All command lines will be put into batch files\n\tand executed via $(COMSPEC) (%COMSPEC%).  Note that parallel\n        builds (-j) require a working Bourne shell; they will not work\n        with COM.\n\nGNU make and Cygnus GNU Windows32 tools:\n\n\tGood news! Make now has native support for Cygwin sh. To enable,\n\tdefine the HAVE_CYGWIN_SHELL in config.h and rebuild make\n\tfrom scratch. This version of make tested with B20.1 of Cygwin.\n\tDo not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL.\n\nGNU make and the MKS shell:\n\n\tThere is now semi-official support for the MKS shell. To turn this\n\tsupport on, define HAVE_MKS_SHELL in the config.h.W32 before you\n\tbuild make.  Do not define BATCH_MODE_ONLY_SHELL if you turn\n\ton HAVE_MKS_SHELL.\n\nGNU make handling of drive letters in pathnames (PATH, vpath, VPATH):\n\n\tThere is a caveat that should be noted with respect to handling\n\tsingle character pathnames on Windows systems.\tWhen colon is\n\tused in PATH variables, make tries to be smart about knowing when\n\tyou are using colon as a separator versus colon as a drive\n\tletter.\t Unfortunately, something as simple as the string 'x:/'\n\tcould be interpreted 2 ways: (x and /) or (x:/).\n\n\tMake chooses to interpret a letter plus colon (e.g. x:/) as a\n\tdrive letter pathname.\tIf it is necessary to use single\n\tcharacter directories in paths (VPATH, vpath, Path, PATH), the\n\tuser must do one of two things:\n\n\t a. Use semicolon as the separator to disambiguate colon. For\n\t    example use 'x;/' if you want to say 'x' and '/' are\n\t    separate components.\n\n\t b. Qualify the directory name so that there is more than\n\t    one character in the path(s) used. For example, none\n\t    of these settings are ambiguous:\n\n\t      ./x:./y\n\t      /some/path/x:/some/path/y\n\t      x:/some/path/x:x:/some/path/y\n\n\tPlease note that you are free to mix colon and semi-colon in the\n\tspecification of paths.\t Make is able to figure out the intended\n\tresult and convert the paths internally to the format needed\n\twhen interacting with the operating system, providing the path\n\tis not within quotes, e.g. \"x:/test/test.c\".\n\n\tYou are encouraged to use colon as the separator character.\n\tThis should ease the pain of deciding how to handle various path\n\tproblems which exist between platforms.\t If colon is used on\n\tboth Unix and Windows systems, then no ifdef'ing will be\n\tnecessary in the makefile source.\n\nGNU make test suite:\n\n\tI verified all functionality with a slightly modified version\n\tof make-test-3.81 (modifications to get test suite to run\n\ton Windows NT). All tests pass in an environment that includes\n\tsh.exe.  Tests were performed on both Windows NT and Windows 95.\n\nBuilding GNU make on Windows NT and Windows 95/98 with Microsoft Visual C:\n\n\tI did not provide a Visual C project file with this port as\n\tthe project file would not be considered freely distributable\n\t(or so I think). It is easy enough to create one, though, if\n\tyou know how to use Visual C.\n\n\tI build the program statically to avoid problems locating DLL's\n\ton machines that may not have MSVC runtime installed. If you\n\tprefer, you can change make to build with shared libraries by\n\tchanging /MT to /MD in the NMakefile (or in build_w32.bat).\n\n\tThe program has not been built for non-Intel architectures (yet).\n\n\tI have not tried to build with any other compilers than MSVC. I\n\thave heard that this is possible though so don't be afraid to\n\tnotify me of your successes!\n\nPathnames and white space:\n\n\tUnlike Unix, Windows 95/NT systems encourage pathnames which\n\tcontain white space (e.g. C:\\Program Files\\). These sorts of\n\tpathnames are legal under Unix too, but are never encouraged.\n\tThere is at least one place in make (VPATH/vpath handling) where\n\tpaths containing white space will simply not work. There may be\n\tothers too. I chose to not try and port make in such a way so\n\tthat these sorts of paths could be handled. I offer these\n\tsuggestions as workarounds:\n\n\t\t1. Use 8.3 notation. i.e. \"x:/long~1/\", which is actually\n\t\t   \"x:\\longpathtest\".  Type \"dir /x\" to view these filenames\n\t\t   within the cmd.exe shell.\n\t\t2. Rename the directory so it does not contain white space.\n\n\tIf you are unhappy with this choice, this is free software\n\tand you are free to take a crack at making this work. The code\n\tin w32/pathstuff.c and vpath.c would be the places to start.\n\nPathnames and Case insensitivity:\n\n\tUnlike Unix, Windows 95/NT systems are case insensitive but case\n\tpreserving.  For example if you tell the file system to create a\n\tfile named \"Target\", it will preserve the case.  Subsequent access to\n\tthe file with other case permutations will succeed (i.e. opening a\n\tfile named \"target\" or \"TARGET\" will open the file \"Target\").\n\n\tBy default, GNU make retains its case sensitivity when comparing\n\ttarget names and existing files or directories.  It can be\n\tconfigured, however, into a case preserving and case insensitive\n\tmode by adding a define for HAVE_CASE_INSENSITIVE_FS to\n\tconfig.h.W32.\n\n\tFor example, the following makefile will create a file named\n\tTarget in the directory subdir which will subsequently be used\n\tto satisfy the dependency of SUBDIR/DepTarget on SubDir/TARGET.\n\tWithout HAVE_CASE_INSENSITIVE_FS configured, the dependency link\n\twill not be made:\n\n\tsubdir/Target:\n\t\ttouch $@\n\n\tSUBDIR/DepTarget: SubDir/TARGET\n\t\tcp $^ $@\n\n\tReliance on this behavior also eliminates the ability of GNU make\n\tto use case in comparison of matching rules.  For example, it is\n\tnot possible to set up a C++ rule using %.C that is different\n\tthan a C rule using %.c.  GNU make will consider these to be the\n\tsame rule and will issue a warning.\n\nSAMBA/NTFS/VFAT:\n\n\tI have not had any success building the debug version of this\n\tpackage using SAMBA as my file server. The reason seems to be\n\trelated to the way VC++ 4.0 changes the case name of the pdb\n\tfilename it is passed on the command line. It seems to change\n\tthe name always to to lower case. I contend that the VC++\n\tcompiler should not change the casename of files that are passed\n\tas arguments on the command line. I don't think this was a\n\tproblem in MSVC 2.x, but I know it is a problem in MSVC 4.x.\n\n\tThe package builds fine on VFAT and NTFS filesystems.\n\n\tMost all of the development I have done to date has been using\n\tNTFS and long file names. I have not done any considerable work\n\tunder VFAT. VFAT users may wish to be aware that this port of\n\tmake does respect case sensitivity.\n\nFAT:\n\n\tVersion 3.76 added support for FAT filesystems. Make works\n\taround some difficulties with stat'ing of files and caching of\n\tfilenames and directories internally.\n\nBug reports:\n\n\tPlease submit bugs via the normal bug reporting mechanism which\n\tis described in the GNU make manual and the base README.\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/README.customs",
    "content": "                                                            -*-indented-text-*-\n\nGNU make can utilize the Customs library, distributed with Pmake, to\nprovide builds distributed across multiple hosts.\n\nIn order to utilize this capability, you must first download and build\nthe Customs library.  It is contained in the Pmake distribution, which\ncan be obtained at:\n\n  ftp://ftp.icsi.berkeley.edu/pub/ai/stolcke/software/\n\nThis integration was tested (superficially) with Pmake 2.1.33.\n\n\nBUILDING CUSTOMS\n----------------\n\nFirst, build pmake and Customs.  You need to build pmake first, because\nCustoms require pmake to build.  Unfortunately, this is not trivial;\nplease see the pmake and Customs documentation for details.  The best\nplace to look for instructions is in the pmake-2.1.33/INSTALL file.\n\nNote that the 2.1.33 Pmake distribution comes with a set of patches to\nGNU make, distributed in the pmake-2.1.33/etc/gnumake/ directory.  These\npatches are based on GNU make 3.75 (there are patches for earlier\nversions of GNU make, also).  The parts of this patchfile which relate\ndirectly to Customs support have already been incorporated into this\nversion of GNU make, so you should _NOT_ apply the patch file.\n\nHowever, there are a few non-Customs specific (as far as I could tell)\nchanges here which are not incorporated (for example, the modification\nto try expanding -lfoo to libfoo.so).  If you rely on these changes\nyou'll need to re-apply them by hand.\n\nInstall the Customs library and header files according to the\ndocumentation.  You should also install the man pages (contrary to\ncomments in the documentation, they weren't installed automatically for\nme; I had to cd to the ``pmake-2.1.33/doc'' directory and run ``pmake\ninstall'' there directly).\n\n\nBUILDING GNU MAKE\n-----------------\n\nOnce you've installed Customs, you can build GNU make to use it.  When\nconfiguring GNU make, merely use the ``--with-customs=DIR'' option.\nProvide the directory containing the ``lib'' and ``include/customs''\nsubdirectories as DIR.  For example, if you installed the customs\nlibrary in /usr/local/lib and the headers in /usr/local/include/customs,\nthen you'd pass ``--with-customs=/usr/local'' as an option to configure.\n\nRun make (or use build.sh) normally to build GNU make as described in\nthe INSTALL file.\n\nSee the documentation for Customs for information on starting and\nconfiguring Customs.\n\n\nINVOKING CUSTOMS-IZED GNU MAKE\n-----------------------------\n\nOne thing you should be aware of is that the default build environment\nfor Customs requires root permissions.  Practically, this means that GNU\nmake must be installed setuid root to use Customs.\n\nIf you don't want to do this, you can build Customs such that root\npermissions are not necessary.  Andreas Stolcke <stolcke@speech.sri.com>\nwrites:\n\n > pmake, gnumake or any other customs client program is not required to\n > be suid root if customs was compiled WITHOUT the USE_RESERVED_PORTS\n > option in customs/config.h.  Make sure the \"customs\" service in\n > /etc/services is defined accordingly (port 8231 instead of 1001).\n\n > Not using USE_RESERVED_PORTS means that a user with programming\n > skills could impersonate another user by writing a fake customs\n > client that pretends to be someone other than himself.  See the\n > discussion in etc/SECURITY.\n\n\nPROBLEMS\n--------\n\nSunOS 4.1.x:\n  The customs/sprite.h header file #includes the <malloc.h> header\n  files; this conflicts with GNU make's configuration so you'll get a\n  compile error if you use GCC (or any other ANSI-capable C compiler).\n\n  I commented out the #include in sprite.h:107:\n\n    #if defined(sun) || defined(ultrix) || defined(hpux) || defined(sgi)\n    /* #include <malloc.h> */\n    #else\n\n  YMMV.\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\nFree Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/SCOPTIONS",
    "content": "ERRORREXX\nOPTIMIZE\nNOVERSION\nOPTIMIZERTIME\nOPTIMIZERALIAS\nDEFINE INCLUDEDIR=\"include:\"\nDEFINE LIBDIR=\"lib:\"\nDEFINE NO_ALLOCA\nDEFINE NO_FLOAT\nDEFINE NO_ARCHIVES\nIGNORE=161\nIGNORE=100\nSTARTUP=cres\n"
  },
  {
    "path": "sources/host-tools/make-3.81/SMakefile",
    "content": "# -*-Makefile-*- for building GNU make with smake\n#\n# NOTE: If you have no 'make' program at all to process this makefile,\n# run 'build.sh' instead.\n#\n# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n#\n#\tMakefile for GNU Make\n#\n\n# Ultrix 2.2 make doesn't expand the value of VPATH.\nVPATH = /make-3.81/\n# This must repeat the value, because configure will remove `VPATH = .'.\nsrcdir = /make-3.81/\n\nCC = sc\nRM = delete\nMAKE = smake\n\nCFLAGS =\nCPPFLAGS =\nLDFLAGS =\n\n# Define these for your system as follows:\n#\t-DNO_ARCHIVES\t\tTo disable `ar' archive support.\n#\t-DNO_FLOAT\t\tTo avoid using floating-point numbers.\n#\t-DENUM_BITFIELDS\tIf the compiler isn't GCC but groks enum foo:2.\n#\t\t\t\tSome compilers apparently accept this\n#\t\t\t\twithout complaint but produce losing code,\n#\t\t\t\tso beware.\n# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline.\n# See also `config.h'.\ndefines =\n\n# Which flavor of remote job execution support to use.\n# The code is found in `remote-$(REMOTE).c'.\nREMOTE = stub\n\n# If you are using the GNU C library, or have the GNU getopt functions in\n# your C library, you can comment these out.\nGETOPT = getopt.o getopt1.o\nGETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h\n\n# If you are using the GNU C library, or have the GNU glob functions in\n# your C library, you can comment this out.  GNU make uses special hooks\n# into the glob functions to be more efficient (by using make's directory\n# cache for globbing), so you must use the GNU functions even if your\n# system's C library has the 1003.2 glob functions already.  Also, the glob\n# functions in the AIX and HPUX C libraries are said to be buggy.\nGLOB = Lib glob/glob.lib\n\n# If your system doesn't have alloca, or the one provided is bad, define this.\nALLOCA = alloca.o\nALLOCA_SRC = $(srcdir)alloca.c\n\n# If your system needs extra libraries loaded in, define them here.\n# System V probably need -lPW for alloca.  HP-UX 7.0's alloca in\n# libPW.a is broken on HP9000s300 and HP9000s400 machines.  Use\n# alloca.c instead on those machines.\nLOADLIBES =\n\n# Any extra object files your system needs.\nextras = amiga.o\n\n# Common prefix for machine-independent installed files.\nprefix =\n# Common prefix for machine-dependent installed files.\nexec_prefix =\n\n# Directory to install `make' in.\nbindir = sc:c\n# Directory to find libraries in for `-lXXX'.\nlibdir = lib:\n# Directory to search by default for included makefiles.\nincludedir = include:\n# Directory to install the Info files in.\ninfodir = doc:\n# Directory to install the man page in.\nmandir = t:\n# Number to put on the man page filename.\nmanext = 1\n# Prefix to put on installed `make' binary file name.\nbinprefix =\n# Prefix to put on installed `make' man page file name.\nmanprefix = $(binprefix)\n\n# Whether or not make needs to be installed setgid.\n# The value should be either `true' or `false'.\n# On many systems, the getloadavg function (used to implement the `-l'\n# switch) will not work unless make is installed setgid kmem.\ninstall_setgid = false\n# Install make setgid to this group so it can read /dev/kmem.\ngroup = sys\n\n# Program to install `make'.\nINSTALL_PROGRAM = copy\n# Program to install the man page.\nINSTALL_DATA = copy\n# Generic install program.\nINSTALL = copy\n\n# Program to format Texinfo source into Info files.\nMAKEINFO = makeinfo\n# Program to format Texinfo source into DVI files.\nTEXI2DVI = texi2dvi\n\n# Programs to make tags files.\nETAGS = etags -w\nCTAGS = ctags -w\n\nobjs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o\t\\\n       rule.o implicit.o default.o variable.o expand.o function.o\t\\\n       vpath.o version.o ar.o arscan.o signame.o strcache.o hash.o      \\\n       remote-$(REMOTE).o $(GLOB) $(GETOPT) $(ALLOCA) $(extras)\nsrcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c             \\\n       $(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c         \\\n       $(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c             \\\n       $(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c        \\\n       $(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c     \\\n       $(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c           \\\n       $(srcdir)remote-$(REMOTE).c                                     \\\n       $(srcdir)ar.c $(srcdir)arscan.c $(srcdir)strcache.c              \\\n       $(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC)            \\\n       $(srcdir)commands.h $(srcdir)dep.h $(srcdir)file.h            \\\n       $(srcdir)job.h $(srcdir)make.h $(srcdir)rule.h                \\\n       $(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in\n\n\n.SUFFIXES:\n.SUFFIXES: .o .c .h .ps .dvi .info .texinfo\n\nall: make\ninfo: make.info\ndvi: make.dvi\n# Some makes apparently use .PHONY as the default goal if it is before `all'.\n.PHONY: all check info dvi\n\nmake.info: make.texinfo\n\t$(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info\n\nmake.dvi: make.texinfo\n\t$(TEXI2DVI) $(srcdir)make.texinfo\n\nmake.ps: make.dvi\n\tdvi2ps make.dvi > make.ps\n\nmake: $(objs) glob/glob.lib\n\t$(CC) Link $(LDFLAGS) $(objs) $(LOADLIBES) To make.new\n\t-delete quiet make\n\trename make.new make\n\n# -I. is needed to find config.h in the build directory.\n.c.o:\n\t$(CC) $(defines) IDir \"\" IDir $(srcdir)glob \\\n\t      $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)\n\nglob/glob.lib:\n\texecute <<\n\t    cd glob\n\t    smake\n<\n\ntagsrcs = $(srcs) $(srcdir)remote-*.c\nTAGS: $(tagsrcs)\n\t$(ETAGS) $(tagsrcs)\ntags: $(tagsrcs)\n\t$(CTAGS) $(tagsrcs)\n\n.PHONY: install installdirs\ninstall:\n\tcopy make sc:c\n\nloadavg: loadavg.c config.h\n\t$(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \\\n\t      loadavg.c $(LOADLIBES) -o $@\n\nclean: glob-clean\n\t-$(RM) -f make loadavg *.o core make.dvi\n\ndistclean: clean glob-realclean\n\t-$(RM) -f Makefile config.h config.status build.sh\n\t-$(RM) -f config.log config.cache\n\t-$(RM) -f TAGS tags\n\t-$(RM) -f make.?? make.??s make.log make.toc make.*aux\n\t-$(RM) -f loadavg.c\n\nrealclean: distclean\n\t-$(RM) -f make.info*\n\nmostlyclean: clean\n\n.PHONY: glob-clean glob-realclean\n\nglob-clean glob-realclean:\n\texecute <<\n\tcd glob\n\tsmake $@\n<\n\n# --------------- DEPENDENCIES\n#\n\n# .deps/alloca.Po\n# dummy\n\n# .deps/ar.Po\nar.o ar.o: ar.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h dep.h \\\n\n# .deps/arscan.Po\narscan.o arscan.o: arscan.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/commands.Po\ncommands.o commands.o: commands.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h\n\n# .deps/default.Po\ndefault.o default.o: default.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h rule.h \\\n  dep.h job.h commands.h\n\n# .deps/dir.Po\ndir.o dir.o: dir.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h \\\n\n# .deps/expand.Po\nexpand.o expand.o: expand.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h \\\n  job.h commands.h \\\n  variable.h rule.h\n\n# .deps/file.Po\nfile.o file.o: file.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h debug.h\n\n# .deps/function.Po\nfunction.o function.o: function.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h dep.h \\\n  job.h commands.h debug.h\n\n# .deps/getloadavg.Po\n# dummy\n\n# .deps/getopt.Po\ngetopt.o getopt.o: getopt.c config.h \\\n\n# .deps/getopt1.Po\ngetopt1.o getopt1.o: getopt1.c config.h getopt.h \\\n\n# .deps/hash.Po\nhash.o hash.o: hash.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/implicit.Po\nimplicit.o implicit.o: implicit.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h rule.h dep.h debug.h \\\n  variable.h job.h \\\n  commands.h\n\n# .deps/job.Po\njob.o job.o: job.c make.h config.h \\\n  getopt.h \\\n  gettext.h job.h \\\n  debug.h filedef.h hash.h \\\n  commands.h variable.h \\\n\n# .deps/loadavg-getloadavg.Po\nloadavg-getloadavg.o loadavg-getloadavg.o: getloadavg.c config.h \\\n  make.h \\\n  getopt.h \\\n  gettext.h \\\n\n# .deps/main.Po\nmain.o main.o: main.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h variable.h \\\n  job.h commands.h rule.h \\\n  debug.h getopt.h \\\n\n# .deps/misc.Po\nmisc.o misc.o: misc.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h debug.h\n\n# .deps/read.Po\nread.o read.o: read.c make.h config.h \\\n  getopt.h \\\n  gettext.h \\\n  dep.h filedef.h hash.h job.h \\\n  commands.h variable.h rule.h debug.h \\\n\n# .deps/remake.Po\nremake.o remake.o: remake.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h dep.h \\\n  variable.h debug.h\n\n# .deps/remote-cstms.Po\n# dummy\n\n# .deps/remote-stub.Po\nremote-stub.o remote-stub.o: remote-stub.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h job.h \\\n  commands.h\n\n# .deps/rule.Po\nrule.o rule.o: rule.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h hash.h job.h \\\n  commands.h variable.h \\\n  rule.h\n\n# .deps/signame.Po\nsigname.o signame.o: signame.c make.h config.h \\\n  getopt.h \\\n  gettext.h\n\n# .deps/strcache.Po\nstrcache.o strcache.o: strcache.c make.h config.h \\\n  getopt.h \\\n  gettext.h hash.h\n\n# .deps/variable.Po\nvariable.o variable.o: variable.c make.h config.h \\\n  getopt.h \\\n  gettext.h dep.h filedef.h \\\n  hash.h job.h commands.h \\\n  variable.h rule.h\n\n# .deps/version.Po\nversion.o version.o: version.c config.h\n\n# .deps/vmsjobs.Po\n# dummy\n\n# .deps/vpath.Po\nvpath.o vpath.o: vpath.c make.h config.h \\\n  getopt.h \\\n  gettext.h filedef.h hash.h variable.h\n"
  },
  {
    "path": "sources/host-tools/make-3.81/acinclude.m4",
    "content": "dnl acinclude.m4 -- Extra macros needed for GNU make.\ndnl\ndnl Automake will incorporate this into its generated aclocal.m4.\ndnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\ndnl Free Software Foundation, Inc.\ndnl This file is part of GNU Make.\ndnl\ndnl GNU Make is free software; you can redistribute it and/or modify it\ndnl under the terms of the GNU General Public License as published by\ndnl the Free Software Foundation; either version 2, or (at your option)\ndnl any later version.\ndnl\ndnl GNU Make is distributed in the hope that it will be useful, but\ndnl WITHOUT ANY WARRANTY; without even the implied warranty of\ndnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\ndnl General Public License for more details.\ndnl\ndnl You should have received a copy of the GNU General Public License\ndnl along with GNU Make; see the file COPYING.  If not, write to the\ndnl Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,\ndnl MA 02110-1301 USA.\n\n\ndnl ---------------------------------------------------------------------------\ndnl Got this from the lynx 2.8 distribution.\ndnl by T.E.Dickey <dickey@clark.net>\ndnl and Jim Spath <jspath@mail.bcpl.lib.md.us>\ndnl and Philippe De Muyter <phdm@macqel.be>\ndnl\ndnl Created: 1997/1/28\ndnl Updated: 1997/12/23\ndnl ---------------------------------------------------------------------------\ndnl After checking for functions in the default $LIBS, make a further check\ndnl for the functions that are netlib-related (these aren't always in the\ndnl libc, etc., and have to be handled specially because there are conflicting\ndnl and broken implementations.\ndnl Common library requirements (in order):\ndnl\t-lresolv -lsocket -lnsl\ndnl\t-lnsl -lsocket\ndnl\t-lsocket\ndnl\t-lbsd\nAC_DEFUN([CF_NETLIBS],[\ncf_test_netlibs=no\nAC_MSG_CHECKING(for network libraries)\nAC_CACHE_VAL(cf_cv_netlibs,[\nAC_MSG_RESULT(working...)\ncf_cv_netlibs=\"\"\ncf_test_netlibs=yes\nAC_CHECK_FUNCS(gethostname,,[\n\tCF_RECHECK_FUNC(gethostname,nsl,cf_cv_netlibs,[\n\t\tCF_RECHECK_FUNC(gethostname,socket,cf_cv_netlibs)])])\n#\n# FIXME:  sequent needs this library (i.e., -lsocket -linet -lnsl), but\n# I don't know the entrypoints - 97/7/22 TD\nAC_CHECK_LIB(inet,main,cf_cv_netlibs=\"-linet $cf_cv_netlibs\")\n#\nif test \"$ac_cv_func_lsocket\" != no ; then\nAC_CHECK_FUNCS(socket,,[\n\tCF_RECHECK_FUNC(socket,socket,cf_cv_netlibs,[\n\t\tCF_RECHECK_FUNC(socket,bsd,cf_cv_netlibs)])])\nfi\n#\nAC_CHECK_FUNCS(gethostbyname,,[\n\tCF_RECHECK_FUNC(gethostbyname,nsl,cf_cv_netlibs)])\n#\nAC_CHECK_FUNCS(strcasecmp,,[\n\tCF_RECHECK_FUNC(strcasecmp,resolv,cf_cv_netlibs)])\n])\nLIBS=\"$LIBS $cf_cv_netlibs\"\ntest $cf_test_netlibs = no && echo \"$cf_cv_netlibs\" >&AC_FD_MSG\n])dnl\ndnl ---------------------------------------------------------------------------\ndnl Re-check on a function to see if we can pick it up by adding a library.\ndnl\t$1 = function to check\ndnl\t$2 = library to check in\ndnl\t$3 = environment to update (e.g., $LIBS)\ndnl\t$4 = what to do if this fails\ndnl\ndnl This uses 'unset' if the shell happens to support it, but leaves the\ndnl configuration variable set to 'unknown' if not.  This is a little better\ndnl than the normal autoconf test, which gives misleading results if a test\ndnl for the function is made (e.g., with AC_CHECK_FUNC) after this macro is\ndnl used (autoconf does not distinguish between a null token and one that is\ndnl set to 'no').\nAC_DEFUN([CF_RECHECK_FUNC],[\nAC_CHECK_LIB($2,$1,[\n\tCF_UPPER(cf_tr_func,$1)\n\tAC_DEFINE_UNQUOTED(HAVE_$cf_tr_func,1,[Define if you have function $1])\n\tac_cv_func_$1=yes\n\t$3=\"-l$2 [$]$3\"],[\n\tac_cv_func_$1=unknown\n\tunset ac_cv_func_$1 2>/dev/null\n\t$4],\n\t[[$]$3])\n])dnl\ndnl ---------------------------------------------------------------------------\ndnl Make an uppercase version of a variable\ndnl $1=uppercase($2)\nAC_DEFUN([CF_UPPER],\n[\nchangequote(,)dnl\n$1=`echo $2 | tr '[a-z]' '[A-Z]'`\nchangequote([,])dnl\n])dnl\n\n\ndnl ---------------------------------------------------------------------------\ndnl From Paul Eggert <eggert@twinsun.com>\n\nAC_DEFUN([AC_STRUCT_ST_MTIM_NSEC],\n [AC_CACHE_CHECK([for nanoseconds field of struct stat.st_mtim],\n   ac_cv_struct_st_mtim_nsec,\n   [ac_save_CPPFLAGS=\"$CPPFLAGS\"\n    ac_cv_struct_st_mtim_nsec=no\n    # tv_nsec -- the usual case\n    # _tv_nsec -- Solaris 2.6, if\n    #\t(defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1\n    #\t && !defined __EXTENSIONS__)\n    # st__tim.tv_nsec -- UnixWare 2.1.2\n    for ac_val in tv_nsec _tv_nsec st__tim.tv_nsec; do\n      CPPFLAGS=\"$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val\"\n      AC_TRY_COMPILE([#include <sys/types.h>\n#include <sys/stat.h>\n\t], [struct stat s; s.st_mtim.ST_MTIM_NSEC;],\n        [ac_cv_struct_st_mtim_nsec=$ac_val; break])\n    done\n    CPPFLAGS=\"$ac_save_CPPFLAGS\"\n   ])\n\n  if test $ac_cv_struct_st_mtim_nsec != no; then\n    AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec],\n\t[Define if struct stat contains a nanoseconds field])\n  fi\n ]\n)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/aclocal.m4",
    "content": "# generated automatically by aclocal 1.9.6 -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005  Free Software Foundation, Inc.\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# AM_AUTOMAKE_VERSION(VERSION)\n# ----------------------------\n# Automake X.Y traces this macro to ensure aclocal.m4 has been\n# generated from the m4 files accompanying Automake X.Y.\nAC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version=\"1.9\"])\n\n# AM_SET_CURRENT_AUTOMAKE_VERSION\n# -------------------------------\n# Call AM_AUTOMAKE_VERSION so it can be traced.\n# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.\nAC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\n\t [AM_AUTOMAKE_VERSION([1.9.6])])\n\n# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-\n\n# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets\n# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to\n# `$srcdir', `$srcdir/..', or `$srcdir/../..'.\n#\n# Of course, Automake must honor this variable whenever it calls a\n# tool from the auxiliary directory.  The problem is that $srcdir (and\n# therefore $ac_aux_dir as well) can be either absolute or relative,\n# depending on how configure is run.  This is pretty annoying, since\n# it makes $ac_aux_dir quite unusable in subdirectories: in the top\n# source directory, any form will work fine, but in subdirectories a\n# relative path needs to be adjusted first.\n#\n# $ac_aux_dir/missing\n#    fails when called from a subdirectory if $ac_aux_dir is relative\n# $top_srcdir/$ac_aux_dir/missing\n#    fails if $ac_aux_dir is absolute,\n#    fails when called from a subdirectory in a VPATH build with\n#          a relative $ac_aux_dir\n#\n# The reason of the latter failure is that $top_srcdir and $ac_aux_dir\n# are both prefixed by $srcdir.  In an in-source build this is usually\n# harmless because $srcdir is `.', but things will broke when you\n# start a VPATH build or use an absolute $srcdir.\n#\n# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,\n# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:\n#   am_aux_dir='\\$(top_srcdir)/'`expr \"$ac_aux_dir\" : \"$srcdir//*\\(.*\\)\"`\n# and then we would define $MISSING as\n#   MISSING=\"\\${SHELL} $am_aux_dir/missing\"\n# This will work as long as MISSING is not called from configure, because\n# unfortunately $(top_srcdir) has no meaning in configure.\n# However there are other variables, like CC, which are often used in\n# configure, and could therefore not use this \"fixed\" $ac_aux_dir.\n#\n# Another solution, used here, is to always expand $ac_aux_dir to an\n# absolute PATH.  The drawback is that using absolute paths prevent a\n# configured tree to be moved without reconfiguration.\n\nAC_DEFUN([AM_AUX_DIR_EXPAND],\n[dnl Rely on autoconf to set up CDPATH properly.\nAC_PREREQ([2.50])dnl\n# expand $ac_aux_dir to an absolute path\nam_aux_dir=`cd $ac_aux_dir && pwd`\n])\n\n# AM_CONDITIONAL                                            -*- Autoconf -*-\n\n# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 7\n\n# AM_CONDITIONAL(NAME, SHELL-CONDITION)\n# -------------------------------------\n# Define a conditional.\nAC_DEFUN([AM_CONDITIONAL],\n[AC_PREREQ(2.52)dnl\n ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],\n\t[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl\nAC_SUBST([$1_TRUE])\nAC_SUBST([$1_FALSE])\nif $2; then\n  $1_TRUE=\n  $1_FALSE='#'\nelse\n  $1_TRUE='#'\n  $1_FALSE=\nfi\nAC_CONFIG_COMMANDS_PRE(\n[if test -z \"${$1_TRUE}\" && test -z \"${$1_FALSE}\"; then\n  AC_MSG_ERROR([[conditional \"$1\" was never defined.\nUsually this means the macro was only invoked conditionally.]])\nfi])])\n\n\n# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 8\n\n# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be\n# written in clear, in which case automake, when reading aclocal.m4,\n# will think it sees a *use*, and therefore will trigger all it's\n# C support machinery.  Also note that it means that autoscan, seeing\n# CC etc. in the Makefile, will ask for an AC_PROG_CC use...\n\n\n# _AM_DEPENDENCIES(NAME)\n# ----------------------\n# See how the compiler implements dependency checking.\n# NAME is \"CC\", \"CXX\", \"GCJ\", or \"OBJC\".\n# We try a few techniques and use that to set a single cache variable.\n#\n# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was\n# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular\n# dependency, and given that the user is not expected to run this macro,\n# just rely on AC_PROG_CC.\nAC_DEFUN([_AM_DEPENDENCIES],\n[AC_REQUIRE([AM_SET_DEPDIR])dnl\nAC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl\nAC_REQUIRE([AM_MAKE_INCLUDE])dnl\nAC_REQUIRE([AM_DEP_TRACK])dnl\n\nifelse([$1], CC,   [depcc=\"$CC\"   am_compiler_list=],\n       [$1], CXX,  [depcc=\"$CXX\"  am_compiler_list=],\n       [$1], OBJC, [depcc=\"$OBJC\" am_compiler_list='gcc3 gcc'],\n       [$1], GCJ,  [depcc=\"$GCJ\"  am_compiler_list='gcc3 gcc'],\n                   [depcc=\"$$1\"   am_compiler_list=])\n\nAC_CACHE_CHECK([dependency style of $depcc],\n               [am_cv_$1_dependencies_compiler_type],\n[if test -z \"$AMDEP_TRUE\" && test -f \"$am_depcomp\"; then\n  # We make a subdir and do the tests there.  Otherwise we can end up\n  # making bogus files that we don't know about and never remove.  For\n  # instance it was reported that on HP-UX the gcc test will end up\n  # making a dummy file named `D' -- because `-MD' means `put the output\n  # in D'.\n  mkdir conftest.dir\n  # Copy depcomp to subdir because otherwise we won't find it if we're\n  # using a relative directory.\n  cp \"$am_depcomp\" conftest.dir\n  cd conftest.dir\n  # We will build objects and dependencies in a subdirectory because\n  # it helps to detect inapplicable dependency modes.  For instance\n  # both Tru64's cc and ICC support -MD to output dependencies as a\n  # side effect of compilation, but ICC will put the dependencies in\n  # the current directory while Tru64 will put them in the object\n  # directory.\n  mkdir sub\n\n  am_cv_$1_dependencies_compiler_type=none\n  if test \"$am_compiler_list\" = \"\"; then\n     am_compiler_list=`sed -n ['s/^#*\\([a-zA-Z0-9]*\\))$/\\1/p'] < ./depcomp`\n  fi\n  for depmode in $am_compiler_list; do\n    # Setup a source with many dependencies, because some compilers\n    # like to wrap large dependency lists on column 80 (with \\), and\n    # we should not choose a depcomp mode which is confused by this.\n    #\n    # We need to recreate these files for each test, as the compiler may\n    # overwrite some of them when testing with obscure command lines.\n    # This happens at least with the AIX C compiler.\n    : > sub/conftest.c\n    for i in 1 2 3 4 5 6; do\n      echo '#include \"conftst'$i'.h\"' >> sub/conftest.c\n      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with\n      # Solaris 8's {/usr,}/bin/sh.\n      touch sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\n    case $depmode in\n    nosideeffect)\n      # after this tag, mechanisms are not by side-effect, so they'll\n      # only be used when explicitly requested\n      if test \"x$enable_dependency_tracking\" = xyes; then\n\tcontinue\n      else\n\tbreak\n      fi\n      ;;\n    none) break ;;\n    esac\n    # We check with `-c' and `-o' for the sake of the \"dashmstdout\"\n    # mode.  It turns out that the SunPro C++ compiler does not properly\n    # handle `-M -o', and we need to detect this.\n    if depmode=$depmode \\\n       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&\n       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then\n      # icc doesn't choke on unknown options, it will just issue warnings\n      # or remarks (even with -Werror).  So we grep stderr for any message\n      # that says an option was ignored or not supported.\n      # When given -MP, icc 7.0 and 7.1 complain thusly:\n      #   icc: Command line warning: ignoring option '-M'; no argument required\n      # The diagnosis changed in icc 8.0:\n      #   icc: Command line remark: option '-MP' not supported\n      if (grep 'ignoring option' conftest.err ||\n          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else\n        am_cv_$1_dependencies_compiler_type=$depmode\n        break\n      fi\n    fi\n  done\n\n  cd ..\n  rm -rf conftest.dir\nelse\n  am_cv_$1_dependencies_compiler_type=none\nfi\n])\nAC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])\nAM_CONDITIONAL([am__fastdep$1], [\n  test \"x$enable_dependency_tracking\" != xno \\\n  && test \"$am_cv_$1_dependencies_compiler_type\" = gcc3])\n])\n\n\n# AM_SET_DEPDIR\n# -------------\n# Choose a directory name for dependency files.\n# This macro is AC_REQUIREd in _AM_DEPENDENCIES\nAC_DEFUN([AM_SET_DEPDIR],\n[AC_REQUIRE([AM_SET_LEADING_DOT])dnl\nAC_SUBST([DEPDIR], [\"${am__leading_dot}deps\"])dnl\n])\n\n\n# AM_DEP_TRACK\n# ------------\nAC_DEFUN([AM_DEP_TRACK],\n[AC_ARG_ENABLE(dependency-tracking,\n[  --disable-dependency-tracking  speeds up one-time build\n  --enable-dependency-tracking   do not reject slow dependency extractors])\nif test \"x$enable_dependency_tracking\" != xno; then\n  am_depcomp=\"$ac_aux_dir/depcomp\"\n  AMDEPBACKSLASH='\\'\nfi\nAM_CONDITIONAL([AMDEP], [test \"x$enable_dependency_tracking\" != xno])\nAC_SUBST([AMDEPBACKSLASH])\n])\n\n# Generate code to set up dependency tracking.              -*- Autoconf -*-\n\n# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n#serial 3\n\n# _AM_OUTPUT_DEPENDENCY_COMMANDS\n# ------------------------------\nAC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],\n[for mf in $CONFIG_FILES; do\n  # Strip MF so we end up with the name of the file.\n  mf=`echo \"$mf\" | sed -e 's/:.*$//'`\n  # Check whether this is an Automake generated Makefile or not.\n  # We used to match only the files named `Makefile.in', but\n  # some people rename them; so instead we look at the file content.\n  # Grep'ing the first line is not enough: some people post-process\n  # each Makefile.in and add a new line on top of each file to say so.\n  # So let's grep whole file.\n  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then\n    dirpart=`AS_DIRNAME(\"$mf\")`\n  else\n    continue\n  fi\n  # Extract the definition of DEPDIR, am__include, and am__quote\n  # from the Makefile without running `make'.\n  DEPDIR=`sed -n 's/^DEPDIR = //p' < \"$mf\"`\n  test -z \"$DEPDIR\" && continue\n  am__include=`sed -n 's/^am__include = //p' < \"$mf\"`\n  test -z \"am__include\" && continue\n  am__quote=`sed -n 's/^am__quote = //p' < \"$mf\"`\n  # When using ansi2knr, U may be empty or an underscore; expand it\n  U=`sed -n 's/^U = //p' < \"$mf\"`\n  # Find all dependency output files, they are included files with\n  # $(DEPDIR) in their names.  We invoke sed twice because it is the\n  # simplest approach to changing $(DEPDIR) to its actual value in the\n  # expansion.\n  for file in `sed -n \"\n    s/^$am__include $am__quote\\(.*(DEPDIR).*\\)$am__quote\"'$/\\1/p' <\"$mf\" | \\\n       sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/g' -e 's/\\$U/'\"$U\"'/g'`; do\n    # Make sure the directory exists.\n    test -f \"$dirpart/$file\" && continue\n    fdir=`AS_DIRNAME([\"$file\"])`\n    AS_MKDIR_P([$dirpart/$fdir])\n    # echo \"creating $dirpart/$file\"\n    echo '# dummy' > \"$dirpart/$file\"\n  done\ndone\n])# _AM_OUTPUT_DEPENDENCY_COMMANDS\n\n\n# AM_OUTPUT_DEPENDENCY_COMMANDS\n# -----------------------------\n# This macro should only be invoked once -- use via AC_REQUIRE.\n#\n# This code is only required when automatic dependency tracking\n# is enabled.  FIXME.  This creates each `.P' file that we will\n# need in order to bootstrap the dependency handling code.\nAC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],\n[AC_CONFIG_COMMANDS([depfiles],\n     [test x\"$AMDEP_TRUE\" != x\"\" || _AM_OUTPUT_DEPENDENCY_COMMANDS],\n     [AMDEP_TRUE=\"$AMDEP_TRUE\" ac_aux_dir=\"$ac_aux_dir\"])\n])\n\n\n# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 3\n\nAC_DEFUN([AM_WITH_DMALLOC],\n[AC_MSG_CHECKING([if malloc debugging is wanted])\nAC_ARG_WITH(dmalloc,\n[  --with-dmalloc          use dmalloc, as in\n\t\t\t  http://www.dmalloc.com/dmalloc.tar.gz],\n[if test \"$withval\" = yes; then\n  AC_MSG_RESULT(yes)\n  AC_DEFINE(WITH_DMALLOC,1,\n\t    [Define if using the dmalloc debugging malloc package])\n  LIBS=\"$LIBS -ldmalloc\"\n  LDFLAGS=\"$LDFLAGS -g\"\nelse\n  AC_MSG_RESULT(no)\nfi], [AC_MSG_RESULT(no)])\n])\n\nAU_DEFUN([fp_WITH_DMALLOC], [AM_WITH_DMALLOC])\n\n# Do all the work for Automake.                             -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 12\n\n# This macro actually does too much.  Some checks are only needed if\n# your package does certain things.  But this isn't really a big deal.\n\n# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])\n# AM_INIT_AUTOMAKE([OPTIONS])\n# -----------------------------------------------\n# The call with PACKAGE and VERSION arguments is the old style\n# call (pre autoconf-2.50), which is being phased out.  PACKAGE\n# and VERSION should now be passed to AC_INIT and removed from\n# the call to AM_INIT_AUTOMAKE.\n# We support both call styles for the transition.  After\n# the next Automake release, Autoconf can make the AC_INIT\n# arguments mandatory, and then we can depend on a new Autoconf\n# release and drop the old call support.\nAC_DEFUN([AM_INIT_AUTOMAKE],\n[AC_PREREQ([2.58])dnl\ndnl Autoconf wants to disallow AM_ names.  We explicitly allow\ndnl the ones we care about.\nm4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl\nAC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl\nAC_REQUIRE([AC_PROG_INSTALL])dnl\n# test to see if srcdir already configured\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\" &&\n   test -f $srcdir/config.status; then\n  AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])\nfi\n\n# test whether we have cygpath\nif test -z \"$CYGPATH_W\"; then\n  if (cygpath --version) >/dev/null 2>/dev/null; then\n    CYGPATH_W='cygpath -w'\n  else\n    CYGPATH_W=echo\n  fi\nfi\nAC_SUBST([CYGPATH_W])\n\n# Define the identity of the package.\ndnl Distinguish between old-style and new-style calls.\nm4_ifval([$2],\n[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl\n AC_SUBST([PACKAGE], [$1])dnl\n AC_SUBST([VERSION], [$2])],\n[_AM_SET_OPTIONS([$1])dnl\n AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl\n AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl\n\n_AM_IF_OPTION([no-define],,\n[AC_DEFINE_UNQUOTED(PACKAGE, \"$PACKAGE\", [Name of package])\n AC_DEFINE_UNQUOTED(VERSION, \"$VERSION\", [Version number of package])])dnl\n\n# Some tools Automake needs.\nAC_REQUIRE([AM_SANITY_CHECK])dnl\nAC_REQUIRE([AC_ARG_PROGRAM])dnl\nAM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})\nAM_MISSING_PROG(AUTOCONF, autoconf)\nAM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})\nAM_MISSING_PROG(AUTOHEADER, autoheader)\nAM_MISSING_PROG(MAKEINFO, makeinfo)\nAM_PROG_INSTALL_SH\nAM_PROG_INSTALL_STRIP\nAC_REQUIRE([AM_PROG_MKDIR_P])dnl\n# We need awk for the \"check\" target.  The system \"awk\" is bad on\n# some platforms.\nAC_REQUIRE([AC_PROG_AWK])dnl\nAC_REQUIRE([AC_PROG_MAKE_SET])dnl\nAC_REQUIRE([AM_SET_LEADING_DOT])dnl\n_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],\n              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],\n\t      \t\t     [_AM_PROG_TAR([v7])])])\n_AM_IF_OPTION([no-dependencies],,\n[AC_PROVIDE_IFELSE([AC_PROG_CC],\n                  [_AM_DEPENDENCIES(CC)],\n                  [define([AC_PROG_CC],\n                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_CXX],\n                  [_AM_DEPENDENCIES(CXX)],\n                  [define([AC_PROG_CXX],\n                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl\n])\n])\n\n\n# When config.status generates a header, we must update the stamp-h file.\n# This file resides in the same directory as the config header\n# that is generated.  The stamp files are numbered to have different names.\n\n# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the\n# loop where config.status creates the headers, so we can generate\n# our stamp files there.\nAC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],\n[# Compute $1's index in $config_headers.\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $1 | $1:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $1\" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])\n\n# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# AM_PROG_INSTALL_SH\n# ------------------\n# Define $install_sh.\nAC_DEFUN([AM_PROG_INSTALL_SH],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\ninstall_sh=${install_sh-\"$am_aux_dir/install-sh\"}\nAC_SUBST(install_sh)])\n\n# Copyright (C) 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 2\n\n# Check whether the underlying file-system supports filenames\n# with a leading dot.  For instance MS-DOS doesn't.\nAC_DEFUN([AM_SET_LEADING_DOT],\n[rm -rf .tst 2>/dev/null\nmkdir .tst 2>/dev/null\nif test -d .tst; then\n  am__leading_dot=.\nelse\n  am__leading_dot=_\nfi\nrmdir .tst 2>/dev/null\nAC_SUBST([am__leading_dot])])\n\n# Check to see how 'make' treats includes.\t            -*- Autoconf -*-\n\n# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 3\n\n# AM_MAKE_INCLUDE()\n# -----------------\n# Check to see how make treats includes.\nAC_DEFUN([AM_MAKE_INCLUDE],\n[am_make=${MAKE-make}\ncat > confinc << 'END'\nam__doit:\n\t@echo done\n.PHONY: am__doit\nEND\n# If we don't find an include directive, just comment out the code.\nAC_MSG_CHECKING([for style of include used by $am_make])\nam__include=\"#\"\nam__quote=\n_am_result=none\n# First try GNU make style include.\necho \"include confinc\" > confmf\n# We grep out `Entering directory' and `Leaving directory'\n# messages which can occur if `w' ends up in MAKEFLAGS.\n# In particular we don't look at `^make:' because GNU make might\n# be invoked under some other name (usually \"gmake\"), in which\n# case it prints its new name instead of `make'.\nif test \"`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`\" = \"done\"; then\n   am__include=include\n   am__quote=\n   _am_result=GNU\nfi\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   if test \"`$am_make -s -f confmf 2> /dev/null`\" = \"done\"; then\n      am__include=.include\n      am__quote=\"\\\"\"\n      _am_result=BSD\n   fi\nfi\nAC_SUBST([am__include])\nAC_SUBST([am__quote])\nAC_MSG_RESULT([$_am_result])\nrm -f confinc confmf\n])\n\n# Copyright (C) 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 3\n\n# AM_PROG_CC_C_O\n# --------------\n# Like AC_PROG_CC_C_O, but changed for automake.\nAC_DEFUN([AM_PROG_CC_C_O],\n[AC_REQUIRE([AC_PROG_CC_C_O])dnl\nAC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\n# FIXME: we rely on the cache variable name because\n# there is no other way.\nset dummy $CC\nac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`\nif eval \"test \\\"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\\\" != yes\"; then\n   # Losing compiler, so override with the script.\n   # FIXME: It is wrong to rewrite CC.\n   # But if we don't then we get into trouble of one sort or another.\n   # A longer-term fix would be to have automake use am__CC in this case,\n   # and then we could set am__CC=\"\\$(top_srcdir)/compile \\$(CC)\"\n   CC=\"$am_aux_dir/compile $CC\"\nfi\n])\n\n# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-\n\n# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 4\n\n# AM_MISSING_PROG(NAME, PROGRAM)\n# ------------------------------\nAC_DEFUN([AM_MISSING_PROG],\n[AC_REQUIRE([AM_MISSING_HAS_RUN])\n$1=${$1-\"${am_missing_run}$2\"}\nAC_SUBST($1)])\n\n\n# AM_MISSING_HAS_RUN\n# ------------------\n# Define MISSING if not defined so far and test if it supports --run.\n# If it does, set am_missing_run to use it, otherwise, to nothing.\nAC_DEFUN([AM_MISSING_HAS_RUN],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\ntest x\"${MISSING+set}\" = xset || MISSING=\"\\${SHELL} $am_aux_dir/missing\"\n# Use eval to expand $SHELL\nif eval \"$MISSING --run true\"; then\n  am_missing_run=\"$MISSING --run \"\nelse\n  am_missing_run=\n  AC_MSG_WARN([`missing' script is too old or missing])\nfi\n])\n\n# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# AM_PROG_MKDIR_P\n# ---------------\n# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.\n#\n# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories\n# created by `make install' are always world readable, even if the\n# installer happens to have an overly restrictive umask (e.g. 077).\n# This was a mistake.  There are at least two reasons why we must not\n# use `-m 0755':\n#   - it causes special bits like SGID to be ignored,\n#   - it may be too restrictive (some setups expect 775 directories).\n#\n# Do not use -m 0755 and let people choose whatever they expect by\n# setting umask.\n#\n# We cannot accept any implementation of `mkdir' that recognizes `-p'.\n# Some implementations (such as Solaris 8's) are not thread-safe: if a\n# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'\n# concurrently, both version can detect that a/ is missing, but only\n# one can create it and the other will error out.  Consequently we\n# restrict ourselves to GNU make (using the --version option ensures\n# this.)\nAC_DEFUN([AM_PROG_MKDIR_P],\n[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then\n  # We used to keeping the `.' as first argument, in order to\n  # allow $(mkdir_p) to be used without argument.  As in\n  #   $(mkdir_p) $(somedir)\n  # where $(somedir) is conditionally defined.  However this is wrong\n  # for two reasons:\n  #  1. if the package is installed by a user who cannot write `.'\n  #     make install will fail,\n  #  2. the above comment should most certainly read\n  #     $(mkdir_p) $(DESTDIR)$(somedir)\n  #     so it does not work when $(somedir) is undefined and\n  #     $(DESTDIR) is not.\n  #  To support the latter case, we have to write\n  #     test -z \"$(somedir)\" || $(mkdir_p) $(DESTDIR)$(somedir),\n  #  so the `.' trick is pointless.\n  mkdir_p='mkdir -p --'\nelse\n  # On NextStep and OpenStep, the `mkdir' command does not\n  # recognize any option.  It will interpret all options as\n  # directories to create, and then abort because `.' already\n  # exists.\n  for d in ./-p ./--version;\n  do\n    test -d $d && rmdir $d\n  done\n  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.\n  if test -f \"$ac_aux_dir/mkinstalldirs\"; then\n    mkdir_p='$(mkinstalldirs)'\n  else\n    mkdir_p='$(install_sh) -d'\n  fi\nfi\nAC_SUBST([mkdir_p])])\n\n# Helper functions for option handling.                     -*- Autoconf -*-\n\n# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 3\n\n# _AM_MANGLE_OPTION(NAME)\n# -----------------------\nAC_DEFUN([_AM_MANGLE_OPTION],\n[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])\n\n# _AM_SET_OPTION(NAME)\n# ------------------------------\n# Set option NAME.  Presently that only means defining a flag for this option.\nAC_DEFUN([_AM_SET_OPTION],\n[m4_define(_AM_MANGLE_OPTION([$1]), 1)])\n\n# _AM_SET_OPTIONS(OPTIONS)\n# ----------------------------------\n# OPTIONS is a space-separated list of Automake options.\nAC_DEFUN([_AM_SET_OPTIONS],\n[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])\n\n# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])\n# -------------------------------------------\n# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.\nAC_DEFUN([_AM_IF_OPTION],\n[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])\n\n# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 4\n\nAC_DEFUN([AM_C_PROTOTYPES],\n[AC_REQUIRE([AC_C_PROTOTYPES])\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n  U= ANSI2KNR=\nelse\n  U=_ ANSI2KNR=./ansi2knr\nfi\n# Ensure some checks needed by ansi2knr itself.\nAC_REQUIRE([AC_HEADER_STDC])\nAC_CHECK_HEADERS(string.h)\nAC_SUBST(U)dnl\nAC_SUBST(ANSI2KNR)dnl\n])\n\nAU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])\n\n# Check to make sure that the build environment is sane.    -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005\n# Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 4\n\n# AM_SANITY_CHECK\n# ---------------\nAC_DEFUN([AM_SANITY_CHECK],\n[AC_MSG_CHECKING([whether build environment is sane])\n# Just in case\nsleep 1\necho timestamp > conftest.file\n# Do `set' in a subshell so we don't clobber the current shell's\n# arguments.  Must try -L first in case configure is actually a\n# symlink; some systems play weird games with the mod time of symlinks\n# (eg FreeBSD returns the mod time of the symlink's containing\n# directory).\nif (\n   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`\n   if test \"$[*]\" = \"X\"; then\n      # -L didn't work.\n      set X `ls -t $srcdir/configure conftest.file`\n   fi\n   rm -f conftest.file\n   if test \"$[*]\" != \"X $srcdir/configure conftest.file\" \\\n      && test \"$[*]\" != \"X conftest.file $srcdir/configure\"; then\n\n      # If neither matched, then we have a broken ls.  This can happen\n      # if, for instance, CONFIG_SHELL is bash and it inherits a\n      # broken ls alias from the environment.  This has actually\n      # happened.  Such a system could not be considered \"sane\".\n      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken\nalias in your environment])\n   fi\n\n   test \"$[2]\" = conftest.file\n   )\nthen\n   # Ok.\n   :\nelse\n   AC_MSG_ERROR([newly created file is older than distributed files!\nCheck your system clock])\nfi\nAC_MSG_RESULT(yes)])\n\n# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# AM_PROG_INSTALL_STRIP\n# ---------------------\n# One issue with vendor `install' (even GNU) is that you can't\n# specify the program used to strip binaries.  This is especially\n# annoying in cross-compiling environments, where the build's strip\n# is unlikely to handle the host's binaries.\n# Fortunately install-sh will honor a STRIPPROG variable, so we\n# always use install-sh in `make install-strip', and initialize\n# STRIPPROG with the value of the STRIP variable (set by the user).\nAC_DEFUN([AM_PROG_INSTALL_STRIP],\n[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl\n# Installed binaries are usually stripped using `strip' when the user\n# run `make install-strip'.  However `strip' might not be the right\n# tool to use in cross-compilation environments, therefore Automake\n# will honor the `STRIP' environment variable to overrule this program.\ndnl Don't test for $cross_compiling = yes, because it might be `maybe'.\nif test \"$cross_compiling\" != no; then\n  AC_CHECK_TOOL([STRIP], [strip], :)\nfi\nINSTALL_STRIP_PROGRAM=\"\\${SHELL} \\$(install_sh) -c -s\"\nAC_SUBST([INSTALL_STRIP_PROGRAM])])\n\n# Check how to create a tarball.                            -*- Autoconf -*-\n\n# Copyright (C) 2004, 2005  Free Software Foundation, Inc.\n#\n# This file is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# serial 2\n\n# _AM_PROG_TAR(FORMAT)\n# --------------------\n# Check how to create a tarball in format FORMAT.\n# FORMAT should be one of `v7', `ustar', or `pax'.\n#\n# Substitute a variable $(am__tar) that is a command\n# writing to stdout a FORMAT-tarball containing the directory\n# $tardir.\n#     tardir=directory && $(am__tar) > result.tar\n#\n# Substitute a variable $(am__untar) that extract such\n# a tarball read from stdin.\n#     $(am__untar) < result.tar\nAC_DEFUN([_AM_PROG_TAR],\n[# Always define AMTAR for backward compatibility.\nAM_MISSING_PROG([AMTAR], [tar])\nm4_if([$1], [v7],\n     [am__tar='${AMTAR} chof - \"$$tardir\"'; am__untar='${AMTAR} xf -'],\n     [m4_case([$1], [ustar],, [pax],,\n              [m4_fatal([Unknown tar format])])\nAC_MSG_CHECKING([how to create a $1 tar archive])\n# Loop over all known methods to create a tar archive until one works.\n_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'\n_am_tools=${am_cv_prog_tar_$1-$_am_tools}\n# Do not fold the above two line into one, because Tru64 sh and\n# Solaris sh will not grok spaces in the rhs of `-'.\nfor _am_tool in $_am_tools\ndo\n  case $_am_tool in\n  gnutar)\n    for _am_tar in tar gnutar gtar;\n    do\n      AM_RUN_LOG([$_am_tar --version]) && break\n    done\n    am__tar=\"$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - \"'\"$$tardir\"'\n    am__tar_=\"$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - \"'\"$tardir\"'\n    am__untar=\"$_am_tar -xf -\"\n    ;;\n  plaintar)\n    # Must skip GNU tar: if it does not support --format= it doesn't create\n    # ustar tarball either.\n    (tar --version) >/dev/null 2>&1 && continue\n    am__tar='tar chf - \"$$tardir\"'\n    am__tar_='tar chf - \"$tardir\"'\n    am__untar='tar xf -'\n    ;;\n  pax)\n    am__tar='pax -L -x $1 -w \"$$tardir\"'\n    am__tar_='pax -L -x $1 -w \"$tardir\"'\n    am__untar='pax -r'\n    ;;\n  cpio)\n    am__tar='find \"$$tardir\" -print | cpio -o -H $1 -L'\n    am__tar_='find \"$tardir\" -print | cpio -o -H $1 -L'\n    am__untar='cpio -i -H $1 -d'\n    ;;\n  none)\n    am__tar=false\n    am__tar_=false\n    am__untar=false\n    ;;\n  esac\n\n  # If the value was cached, stop now.  We just wanted to have am__tar\n  # and am__untar set.\n  test -n \"${am_cv_prog_tar_$1}\" && break\n\n  # tar/untar a dummy directory, and stop if the command works\n  rm -rf conftest.dir\n  mkdir conftest.dir\n  echo GrepMe > conftest.dir/file\n  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])\n  rm -rf conftest.dir\n  if test -s conftest.tar; then\n    AM_RUN_LOG([$am__untar <conftest.tar])\n    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break\n  fi\ndone\nrm -rf conftest.dir\n\nAC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])\nAC_MSG_RESULT([$am_cv_prog_tar_$1])])\nAC_SUBST([am__tar])\nAC_SUBST([am__untar])\n]) # _AM_PROG_TAR\n\nm4_include([config/dospaths.m4])\nm4_include([config/gettext.m4])\nm4_include([config/iconv.m4])\nm4_include([config/lib-ld.m4])\nm4_include([config/lib-link.m4])\nm4_include([config/lib-prefix.m4])\nm4_include([config/nls.m4])\nm4_include([config/po.m4])\nm4_include([config/progtest.m4])\nm4_include([acinclude.m4])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/alloca.c",
    "content": "/* alloca.c -- allocate automatically reclaimed memory\n   (Mostly) portable public-domain implementation -- D A Gwyn\n\n   This implementation of the PWB library alloca function,\n   which is used to allocate space off the run-time stack so\n   that it is automatically reclaimed upon procedure exit,\n   was inspired by discussions with J. Q. Johnson of Cornell.\n   J.Otto Tennant <jot@cray.com> contributed the Cray support.\n\n   There are some preprocessor constants that can\n   be defined when compiling for your specific system, for\n   improved efficiency; however, the defaults should be okay.\n\n   The general concept of this implementation is to keep\n   track of all alloca-allocated blocks, and reclaim any\n   that are found to be deeper in the stack than the current\n   invocation.  This heuristic does not reclaim storage as\n   soon as it becomes invalid, but it will do so eventually.\n\n   As a special case, alloca(0) reclaims storage without\n   allocating any.  It is a good idea to use alloca(0) in\n   your main control loop, etc. to force garbage collection.  */\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#ifdef HAVE_STRING_H\n#include <string.h>\n#endif\n#ifdef HAVE_STDLIB_H\n#include <stdlib.h>\n#endif\n\n#ifdef emacs\n#include \"blockinput.h\"\n#endif\n\n/* If compiling with GCC 2, this file's not needed.  */\n#if !defined (__GNUC__) || __GNUC__ < 2\n\n/* If someone has defined alloca as a macro,\n   there must be some other way alloca is supposed to work.  */\n#ifndef alloca\n\n#ifdef emacs\n#ifdef static\n/* actually, only want this if static is defined as \"\"\n   -- this is for usg, in which emacs must undefine static\n   in order to make unexec workable\n   */\n#ifndef STACK_DIRECTION\nyou\nlose\n-- must know STACK_DIRECTION at compile-time\n#endif /* STACK_DIRECTION undefined */\n#endif /* static */\n#endif /* emacs */\n\n/* If your stack is a linked list of frames, you have to\n   provide an \"address metric\" ADDRESS_FUNCTION macro.  */\n\n#if defined (CRAY) && defined (CRAY_STACKSEG_END)\nlong i00afunc ();\n#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))\n#else\n#define ADDRESS_FUNCTION(arg) &(arg)\n#endif\n\n#if __STDC__\ntypedef void *pointer;\n#else\ntypedef char *pointer;\n#endif\n\n#ifndef NULL\n#define\tNULL\t0\n#endif\n\n/* Different portions of Emacs need to call different versions of\n   malloc.  The Emacs executable needs alloca to call xmalloc, because\n   ordinary malloc isn't protected from input signals.  On the other\n   hand, the utilities in lib-src need alloca to call malloc; some of\n   them are very simple, and don't have an xmalloc routine.\n\n   Non-Emacs programs expect this to call use xmalloc.\n\n   Callers below should use malloc.  */\n\n#ifndef emacs\n#define malloc xmalloc\n#endif\nextern pointer malloc ();\n\n/* Define STACK_DIRECTION if you know the direction of stack\n   growth for your system; otherwise it will be automatically\n   deduced at run-time.\n\n   STACK_DIRECTION > 0 => grows toward higher addresses\n   STACK_DIRECTION < 0 => grows toward lower addresses\n   STACK_DIRECTION = 0 => direction of growth unknown  */\n\n#ifndef STACK_DIRECTION\n#define\tSTACK_DIRECTION\t0\t/* Direction unknown.  */\n#endif\n\n#if STACK_DIRECTION != 0\n\n#define\tSTACK_DIR\tSTACK_DIRECTION\t/* Known at compile-time.  */\n\n#else /* STACK_DIRECTION == 0; need run-time code.  */\n\nstatic int stack_dir;\t\t/* 1 or -1 once known.  */\n#define\tSTACK_DIR\tstack_dir\n\nstatic void\nfind_stack_direction (void)\n{\n  static char *addr = NULL;\t/* Address of first `dummy', once known.  */\n  auto char dummy;\t\t/* To get stack address.  */\n\n  if (addr == NULL)\n    {\t\t\t\t/* Initial entry.  */\n      addr = ADDRESS_FUNCTION (dummy);\n\n      find_stack_direction ();\t/* Recurse once.  */\n    }\n  else\n    {\n      /* Second entry.  */\n      if (ADDRESS_FUNCTION (dummy) > addr)\n\tstack_dir = 1;\t\t/* Stack grew upward.  */\n      else\n\tstack_dir = -1;\t\t/* Stack grew downward.  */\n    }\n}\n\n#endif /* STACK_DIRECTION == 0 */\n\n/* An \"alloca header\" is used to:\n   (a) chain together all alloca'ed blocks;\n   (b) keep track of stack depth.\n\n   It is very important that sizeof(header) agree with malloc\n   alignment chunk size.  The following default should work okay.  */\n\n#ifndef\tALIGN_SIZE\n#define\tALIGN_SIZE\tsizeof(double)\n#endif\n\ntypedef union hdr\n{\n  char align[ALIGN_SIZE];\t/* To force sizeof(header).  */\n  struct\n    {\n      union hdr *next;\t\t/* For chaining headers.  */\n      char *deep;\t\t/* For stack depth measure.  */\n    } h;\n} header;\n\nstatic header *last_alloca_header = NULL;\t/* -> last alloca header.  */\n\n/* Return a pointer to at least SIZE bytes of storage,\n   which will be automatically reclaimed upon exit from\n   the procedure that called alloca.  Originally, this space\n   was supposed to be taken from the current stack frame of the\n   caller, but that method cannot be made to work for some\n   implementations of C, for example under Gould's UTX/32.  */\n\npointer\nalloca (unsigned size)\n{\n  auto char probe;\t\t/* Probes stack depth: */\n  register char *depth = ADDRESS_FUNCTION (probe);\n\n#if STACK_DIRECTION == 0\n  if (STACK_DIR == 0)\t\t/* Unknown growth direction.  */\n    find_stack_direction ();\n#endif\n\n  /* Reclaim garbage, defined as all alloca'd storage that\n     was allocated from deeper in the stack than currently.  */\n\n  {\n    register header *hp;\t/* Traverses linked list.  */\n\n#ifdef emacs\n    BLOCK_INPUT;\n#endif\n\n    for (hp = last_alloca_header; hp != NULL;)\n      if ((STACK_DIR > 0 && hp->h.deep > depth)\n\t  || (STACK_DIR < 0 && hp->h.deep < depth))\n\t{\n\t  register header *np = hp->h.next;\n\n\t  free ((pointer) hp);\t/* Collect garbage.  */\n\n\t  hp = np;\t\t/* -> next header.  */\n\t}\n      else\n\tbreak;\t\t\t/* Rest are not deeper.  */\n\n    last_alloca_header = hp;\t/* -> last valid storage.  */\n\n#ifdef emacs\n    UNBLOCK_INPUT;\n#endif\n  }\n\n  if (size == 0)\n    return NULL;\t\t/* No allocation required.  */\n\n  /* Allocate combined header + user data storage.  */\n\n  {\n    register pointer new = malloc (sizeof (header) + size);\n    /* Address of header.  */\n\n    if (new == 0)\n      abort();\n\n    ((header *) new)->h.next = last_alloca_header;\n    ((header *) new)->h.deep = depth;\n\n    last_alloca_header = (header *) new;\n\n    /* User storage begins just after header.  */\n\n    return (pointer) ((char *) new + sizeof (header));\n  }\n}\n\n#if defined (CRAY) && defined (CRAY_STACKSEG_END)\n\n#ifdef DEBUG_I00AFUNC\n#include <stdio.h>\n#endif\n\n#ifndef CRAY_STACK\n#define CRAY_STACK\n#ifndef CRAY2\n/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */\nstruct stack_control_header\n  {\n    long shgrow:32;\t\t/* Number of times stack has grown.  */\n    long shaseg:32;\t\t/* Size of increments to stack.  */\n    long shhwm:32;\t\t/* High water mark of stack.  */\n    long shsize:32;\t\t/* Current size of stack (all segments).  */\n  };\n\n/* The stack segment linkage control information occurs at\n   the high-address end of a stack segment.  (The stack\n   grows from low addresses to high addresses.)  The initial\n   part of the stack segment linkage control information is\n   0200 (octal) words.  This provides for register storage\n   for the routine which overflows the stack.  */\n\nstruct stack_segment_linkage\n  {\n    long ss[0200];\t\t/* 0200 overflow words.  */\n    long sssize:32;\t\t/* Number of words in this segment.  */\n    long ssbase:32;\t\t/* Offset to stack base.  */\n    long:32;\n    long sspseg:32;\t\t/* Offset to linkage control of previous\n\t\t\t\t   segment of stack.  */\n    long:32;\n    long sstcpt:32;\t\t/* Pointer to task common address block.  */\n    long sscsnm;\t\t/* Private control structure number for\n\t\t\t\t   microtasking.  */\n    long ssusr1;\t\t/* Reserved for user.  */\n    long ssusr2;\t\t/* Reserved for user.  */\n    long sstpid;\t\t/* Process ID for pid based multi-tasking.  */\n    long ssgvup;\t\t/* Pointer to multitasking thread giveup.  */\n    long sscray[7];\t\t/* Reserved for Cray Research.  */\n    long ssa0;\n    long ssa1;\n    long ssa2;\n    long ssa3;\n    long ssa4;\n    long ssa5;\n    long ssa6;\n    long ssa7;\n    long sss0;\n    long sss1;\n    long sss2;\n    long sss3;\n    long sss4;\n    long sss5;\n    long sss6;\n    long sss7;\n  };\n\n#else /* CRAY2 */\n/* The following structure defines the vector of words\n   returned by the STKSTAT library routine.  */\nstruct stk_stat\n  {\n    long now;\t\t\t/* Current total stack size.  */\n    long maxc;\t\t\t/* Amount of contiguous space which would\n\t\t\t\t   be required to satisfy the maximum\n\t\t\t\t   stack demand to date.  */\n    long high_water;\t\t/* Stack high-water mark.  */\n    long overflows;\t\t/* Number of stack overflow ($STKOFEN) calls.  */\n    long hits;\t\t\t/* Number of internal buffer hits.  */\n    long extends;\t\t/* Number of block extensions.  */\n    long stko_mallocs;\t\t/* Block allocations by $STKOFEN.  */\n    long underflows;\t\t/* Number of stack underflow calls ($STKRETN).  */\n    long stko_free;\t\t/* Number of deallocations by $STKRETN.  */\n    long stkm_free;\t\t/* Number of deallocations by $STKMRET.  */\n    long segments;\t\t/* Current number of stack segments.  */\n    long maxs;\t\t\t/* Maximum number of stack segments so far.  */\n    long pad_size;\t\t/* Stack pad size.  */\n    long current_address;\t/* Current stack segment address.  */\n    long current_size;\t\t/* Current stack segment size.  This\n\t\t\t\t   number is actually corrupted by STKSTAT to\n\t\t\t\t   include the fifteen word trailer area.  */\n    long initial_address;\t/* Address of initial segment.  */\n    long initial_size;\t\t/* Size of initial segment.  */\n  };\n\n/* The following structure describes the data structure which trails\n   any stack segment.  I think that the description in 'asdef' is\n   out of date.  I only describe the parts that I am sure about.  */\n\nstruct stk_trailer\n  {\n    long this_address;\t\t/* Address of this block.  */\n    long this_size;\t\t/* Size of this block (does not include\n\t\t\t\t   this trailer).  */\n    long unknown2;\n    long unknown3;\n    long link;\t\t\t/* Address of trailer block of previous\n\t\t\t\t   segment.  */\n    long unknown5;\n    long unknown6;\n    long unknown7;\n    long unknown8;\n    long unknown9;\n    long unknown10;\n    long unknown11;\n    long unknown12;\n    long unknown13;\n    long unknown14;\n  };\n\n#endif /* CRAY2 */\n#endif /* not CRAY_STACK */\n\n#ifdef CRAY2\n/* Determine a \"stack measure\" for an arbitrary ADDRESS.\n   I doubt that \"lint\" will like this much.  */\n\nstatic long\ni00afunc (long *address)\n{\n  struct stk_stat status;\n  struct stk_trailer *trailer;\n  long *block, size;\n  long result = 0;\n\n  /* We want to iterate through all of the segments.  The first\n     step is to get the stack status structure.  We could do this\n     more quickly and more directly, perhaps, by referencing the\n     $LM00 common block, but I know that this works.  */\n\n  STKSTAT (&status);\n\n  /* Set up the iteration.  */\n\n  trailer = (struct stk_trailer *) (status.current_address\n\t\t\t\t    + status.current_size\n\t\t\t\t    - 15);\n\n  /* There must be at least one stack segment.  Therefore it is\n     a fatal error if \"trailer\" is null.  */\n\n  if (trailer == 0)\n    abort ();\n\n  /* Discard segments that do not contain our argument address.  */\n\n  while (trailer != 0)\n    {\n      block = (long *) trailer->this_address;\n      size = trailer->this_size;\n      if (block == 0 || size == 0)\n\tabort ();\n      trailer = (struct stk_trailer *) trailer->link;\n      if ((block <= address) && (address < (block + size)))\n\tbreak;\n    }\n\n  /* Set the result to the offset in this segment and add the sizes\n     of all predecessor segments.  */\n\n  result = address - block;\n\n  if (trailer == 0)\n    {\n      return result;\n    }\n\n  do\n    {\n      if (trailer->this_size <= 0)\n\tabort ();\n      result += trailer->this_size;\n      trailer = (struct stk_trailer *) trailer->link;\n    }\n  while (trailer != 0);\n\n  /* We are done.  Note that if you present a bogus address (one\n     not in any segment), you will get a different number back, formed\n     from subtracting the address of the first block.  This is probably\n     not what you want.  */\n\n  return (result);\n}\n\n#else /* not CRAY2 */\n/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.\n   Determine the number of the cell within the stack,\n   given the address of the cell.  The purpose of this\n   routine is to linearize, in some sense, stack addresses\n   for alloca.  */\n\nstatic long\ni00afunc (long address)\n{\n  long stkl = 0;\n\n  long size, pseg, this_segment, stack;\n  long result = 0;\n\n  struct stack_segment_linkage *ssptr;\n\n  /* Register B67 contains the address of the end of the\n     current stack segment.  If you (as a subprogram) store\n     your registers on the stack and find that you are past\n     the contents of B67, you have overflowed the segment.\n\n     B67 also points to the stack segment linkage control\n     area, which is what we are really interested in.  */\n\n  stkl = CRAY_STACKSEG_END ();\n  ssptr = (struct stack_segment_linkage *) stkl;\n\n  /* If one subtracts 'size' from the end of the segment,\n     one has the address of the first word of the segment.\n\n     If this is not the first segment, 'pseg' will be\n     nonzero.  */\n\n  pseg = ssptr->sspseg;\n  size = ssptr->sssize;\n\n  this_segment = stkl - size;\n\n  /* It is possible that calling this routine itself caused\n     a stack overflow.  Discard stack segments which do not\n     contain the target address.  */\n\n  while (!(this_segment <= address && address <= stkl))\n    {\n#ifdef DEBUG_I00AFUNC\n      fprintf (stderr, \"%011o %011o %011o\\n\", this_segment, address, stkl);\n#endif\n      if (pseg == 0)\n\tbreak;\n      stkl = stkl - pseg;\n      ssptr = (struct stack_segment_linkage *) stkl;\n      size = ssptr->sssize;\n      pseg = ssptr->sspseg;\n      this_segment = stkl - size;\n    }\n\n  result = address - this_segment;\n\n  /* If you subtract pseg from the current end of the stack,\n     you get the address of the previous stack segment's end.\n     This seems a little convoluted to me, but I'll bet you save\n     a cycle somewhere.  */\n\n  while (pseg != 0)\n    {\n#ifdef DEBUG_I00AFUNC\n      fprintf (stderr, \"%011o %011o\\n\", pseg, size);\n#endif\n      stkl = stkl - pseg;\n      ssptr = (struct stack_segment_linkage *) stkl;\n      size = ssptr->sssize;\n      pseg = ssptr->sspseg;\n      result += size;\n    }\n  return (result);\n}\n\n#endif /* not CRAY2 */\n#endif /* CRAY */\n\n#endif /* no alloca */\n#endif /* not GCC version 2 */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/amiga.c",
    "content": "/* Running commands on Amiga\nCopyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"variable.h\"\n#include \"amiga.h\"\n#include <assert.h>\n#include <exec/memory.h>\n#include <dos/dostags.h>\n#include <proto/exec.h>\n#include <proto/dos.h>\n\nstatic const char Amiga_version[] = \"$VER: Make 3.74.3 (12.05.96) \\n\"\n\t\t    \"Amiga Port by A. Digulla (digulla@home.lake.de)\";\n\nint\nMyExecute (char **argv)\n{\n    char * buffer, * ptr;\n    char ** aptr;\n    int len = 0;\n    int status;\n\n    for (aptr=argv; *aptr; aptr++)\n    {\n\tlen += strlen (*aptr) + 4;\n    }\n\n    buffer = AllocMem (len, MEMF_ANY);\n\n    if (!buffer)\n      fatal (NILF, \"MyExecute: Cannot allocate space for calling a command\");\n\n    ptr = buffer;\n\n    for (aptr=argv; *aptr; aptr++)\n    {\n\tif (((*aptr)[0] == ';' && !(*aptr)[1]))\n\t{\n\t    *ptr ++ = '\"';\n\t    strcpy (ptr, *aptr);\n\t    ptr += strlen (ptr);\n\t    *ptr ++ = '\"';\n\t}\n\telse if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2])\n\t{\n\t    *ptr ++ = '\\n';\n\t    continue;\n\t}\n\telse\n\t{\n\t    strcpy (ptr, *aptr);\n\t    ptr += strlen (ptr);\n\t}\n\t*ptr ++ = ' ';\n\t*ptr = 0;\n    }\n\n    ptr[-1] = '\\n';\n\n    status = SystemTags (buffer,\n\tSYS_UserShell, TRUE,\n\tTAG_END);\n\n    FreeMem (buffer, len);\n\n    if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C)\n\tstatus = 20;\n\n    /* Warnings don't count */\n    if (status == 5)\n\tstatus = 0;\n\n    return status;\n}\n\nchar *\nwildcard_expansion (char *wc, char *o)\n{\n#   define PATH_SIZE\t1024\n    struct AnchorPath * apath;\n\n    if ( (apath = AllocMem (sizeof (struct AnchorPath) + PATH_SIZE,\n\t    MEMF_CLEAR))\n\t)\n    {\n\tapath->ap_Strlen = PATH_SIZE;\n\n\tif (MatchFirst (wc, apath) == 0)\n\t{\n\t    do\n\t    {\n\t\to = variable_buffer_output (o, apath->ap_Buf,\n\t\t\tstrlen (apath->ap_Buf));\n\t\to = variable_buffer_output (o, \" \",1);\n\t    } while (MatchNext (apath) == 0);\n\t}\n\n\tMatchEnd (apath);\n\tFreeMem (apath, sizeof (struct AnchorPath) + PATH_SIZE);\n    }\n\n    return o;\n}\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/amiga.h",
    "content": "/* Definitions for amiga specific things\nCopyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\nextern int MyExecute PARAMS ((char ** argv));\nextern char * wildcard_expansion PARAMS ((char * wc, char * o));\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/ansi2knr.1",
    "content": ".TH ANSI2KNR 1 \"19 Jan 1996\"\n.SH NAME\nansi2knr \\- convert ANSI C to Kernighan & Ritchie C\n.SH SYNOPSIS\n.I ansi2knr\n[--varargs] input_file [output_file]\n.SH DESCRIPTION\nIf no output_file is supplied, output goes to stdout.\n.br\nThere are no error messages.\n.sp\n.I ansi2knr\nrecognizes function definitions by seeing a non-keyword identifier at the left\nmargin, followed by a left parenthesis, with a right parenthesis as the last\ncharacter on the line, and with a left brace as the first token on the\nfollowing line (ignoring possible intervening comments).  It will recognize a\nmulti-line header provided that no intervening line ends with a left or right\nbrace or a semicolon.  These algorithms ignore whitespace and comments, except\nthat the function name must be the first thing on the line.\n.sp\nThe following constructs will confuse it:\n.br\n     - Any other construct that starts at the left margin and follows the\nabove syntax (such as a macro or function call).\n.br\n     - Some macros that tinker with the syntax of the function header.\n.sp\nThe --varargs switch is obsolete, and is recognized only for\nbackwards compatibility.  The present version of\n.I ansi2knr\nwill always attempt to convert a ... argument to va_alist and va_dcl.\n.SH AUTHOR\nL. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and\ncontinues to maintain the current version; most of the code in the current\nversion is his work.  ansi2knr also includes contributions by Francois\nPinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/ansi2knr.c",
    "content": "/* Copyright (C) 1989, 2000 Aladdin Enterprises.  All rights reserved. */\n\n/*$Id: ansi2knr.c,v 1.3 2000/04/13 03:41:48 lpd Exp $*/\n/* Convert ANSI C function definitions to K&R (\"traditional C\") syntax */\n\n/*\nansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY.  No author or distributor accepts responsibility to anyone for the\nconsequences of using it or for whether it serves any particular purpose or\nworks at all, unless he says so in writing.  Refer to the GNU General Public\nLicense (the \"GPL\") for full details.\n\nEveryone is granted permission to copy, modify and redistribute ansi2knr,\nbut only under the conditions described in the GPL.  A copy of this license\nis supposed to have been given to you along with ansi2knr so you can know\nyour rights and responsibilities.  It should be in a file named COPYLEFT,\nor, if there is no file named COPYLEFT, a file named COPYING.  Among other\nthings, the copyright notice and this notice must be preserved on all\ncopies.\n\nWe explicitly state here what we believe is already implied by the GPL: if\nthe ansi2knr program is distributed as a separate set of sources and a\nseparate executable file which are aggregated on a storage medium together\nwith another program, this in itself does not bring the other program under\nthe GPL, nor does the mere fact that such a program or the procedures for\nconstructing it invoke the ansi2knr executable bring any other part of the\nprogram under the GPL.\n*/\n\n/*\n * Usage:\n\tansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n * --filename provides the file name for the #line directive in the output,\n * overriding input_file (if present).\n * If no input_file is supplied, input is read from stdin.\n * If no output_file is supplied, output goes to stdout.\n * There are no error messages.\n *\n * ansi2knr recognizes function definitions by seeing a non-keyword\n * identifier at the left margin, followed by a left parenthesis, with a\n * right parenthesis as the last character on the line, and with a left\n * brace as the first token on the following line (ignoring possible\n * intervening comments and/or preprocessor directives), except that a line\n * consisting of only\n *\tidentifier1(identifier2)\n * will not be considered a function definition unless identifier2 is\n * the word \"void\", and a line consisting of\n *\tidentifier1(identifier2, <<arbitrary>>)\n * will not be considered a function definition.\n * ansi2knr will recognize a multi-line header provided that no intervening\n * line ends with a left or right brace or a semicolon.  These algorithms\n * ignore whitespace, comments, and preprocessor directives, except that\n * the function name must be the first thing on the line.  The following\n * constructs will confuse it:\n *\t- Any other construct that starts at the left margin and\n *\t    follows the above syntax (such as a macro or function call).\n *\t- Some macros that tinker with the syntax of function headers.\n */\n\n/*\n * The original and principal author of ansi2knr is L. Peter Deutsch\n * <ghost@aladdin.com>.  Other authors are noted in the change history\n * that follows (in reverse chronological order):\n\n\tlpd 2000-04-12 backs out Eggert's changes because of bugs:\n\t- concatlits didn't declare the type of its bufend argument;\n\t- concatlits didn't recognize when it was inside a comment;\n\t- scanstring could scan backward past the beginning of the string; when\n\t- the check for \\ + newline in scanstring was unnecessary.\n\n\t2000-03-05  Paul Eggert  <eggert@twinsun.com>\n\n\tAdd support for concatenated string literals.\n\t* ansi2knr.c (concatlits): New decl.\n\t(main): Invoke concatlits to concatenate string literals.\n\t(scanstring): Handle backslash-newline correctly.  Work with\n\tcharacter constants.  Fix bug when scanning backwards through\n\tbackslash-quote.  Check for unterminated strings.\n\t(convert1): Parse character constants, too.\n\t(appendline, concatlits): New functions.\n\t* ansi2knr.1: Document this.\n\n\tlpd 1999-08-17 added code to allow preprocessor directives\n\t\twherever comments are allowed\n\tlpd 1999-04-12 added minor fixes from Pavel Roskin\n\t\t<pavel_roskin@geocities.com> for clean compilation with\n\t\tgcc -W -Wall\n\tlpd 1999-03-22 added hack to recognize lines consisting of\n\t\tidentifier1(identifier2, xxx) as *not* being procedures\n\tlpd 1999-02-03 made indentation of preprocessor commands consistent\n\tlpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an\n\t\tendless loop; quoted strings within an argument list\n\t\tconfused the parser\n\tlpd 1999-01-24 added a check for write errors on the output,\n\t\tsuggested by Jim Meyering <meyering@ascend.com>\n\tlpd 1998-11-09 added further hack to recognize identifier(void)\n\t\tas being a procedure\n\tlpd 1998-10-23 added hack to recognize lines consisting of\n\t\tidentifier1(identifier2) as *not* being procedures\n\tlpd 1997-12-08 made input_file optional; only closes input and/or\n\t\toutput file if not stdin or stdout respectively; prints\n\t\tusage message on stderr rather than stdout; adds\n\t\t--filename switch (changes suggested by\n\t\t<ceder@lysator.liu.se>)\n\tlpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with\n\t\tcompilers that don't understand void, as suggested by\n\t\tTom Lane\n\tlpd 1996-01-15 changed to require that the first non-comment token\n\t\ton the line following a function header be a left brace,\n\t\tto reduce sensitivity to macros, as suggested by Tom Lane\n\t\t<tgl@sss.pgh.pa.us>\n\tlpd 1995-06-22 removed #ifndefs whose sole purpose was to define\n\t\tundefined preprocessor symbols as 0; changed all #ifdefs\n\t\tfor configuration symbols to #ifs\n\tlpd 1995-04-05 changed copyright notice to make it clear that\n\t\tincluding ansi2knr in a program does not bring the entire\n\t\tprogram under the GPL\n\tlpd 1994-12-18 added conditionals for systems where ctype macros\n\t\tdon't handle 8-bit characters properly, suggested by\n\t\tFrancois Pinard <pinard@iro.umontreal.ca>;\n\t\tremoved --varargs switch (this is now the default)\n\tlpd 1994-10-10 removed CONFIG_BROKETS conditional\n\tlpd 1994-07-16 added some conditionals to help GNU `configure',\n\t\tsuggested by Francois Pinard <pinard@iro.umontreal.ca>;\n\t\tproperly erase prototype args in function parameters,\n\t\tcontributed by Jim Avera <jima@netcom.com>;\n\t\tcorrect error in writeblanks (it shouldn't erase EOLs)\n\tlpd 1989-xx-xx original version\n */\n\n/* Most of the conditionals here are to make ansi2knr work with */\n/* or without the GNU configure machinery. */\n\n#if HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n#include <stdio.h>\n#include <ctype.h>\n\n#if HAVE_CONFIG_H\n\n/*\n   For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).\n   This will define HAVE_CONFIG_H and so, activate the following lines.\n */\n\n# if STDC_HEADERS || HAVE_STRING_H\n#  include <string.h>\n# else\n#  include <strings.h>\n# endif\n\n#else /* not HAVE_CONFIG_H */\n\n/* Otherwise do it the hard way */\n\n# ifdef BSD\n#  include <strings.h>\n# else\n#  ifdef VMS\n    extern int strlen(), strncmp();\n#  else\n#   include <string.h>\n#  endif\n# endif\n\n#endif /* not HAVE_CONFIG_H */\n\n#if STDC_HEADERS\n# include <stdlib.h>\n#else\n/*\n   malloc and free should be declared in stdlib.h,\n   but if you've got a K&R compiler, they probably aren't.\n */\n# ifdef MSDOS\n#  include <malloc.h>\n# else\n#  ifdef VMS\n     extern char *malloc();\n     extern void free();\n#  else\n     extern char *malloc();\n     extern int free();\n#  endif\n# endif\n\n#endif\n\n/* Define NULL (for *very* old compilers). */\n#ifndef NULL\n# define NULL (0)\n#endif\n\n/*\n * The ctype macros don't always handle 8-bit characters correctly.\n * Compensate for this here.\n */\n#ifdef isascii\n# undef HAVE_ISASCII\t\t/* just in case */\n# define HAVE_ISASCII 1\n#else\n#endif\n#if STDC_HEADERS || !HAVE_ISASCII\n# define is_ascii(c) 1\n#else\n# define is_ascii(c) isascii(c)\n#endif\n\n#define is_space(c) (is_ascii(c) && isspace(c))\n#define is_alpha(c) (is_ascii(c) && isalpha(c))\n#define is_alnum(c) (is_ascii(c) && isalnum(c))\n\n/* Scanning macros */\n#define isidchar(ch) (is_alnum(ch) || (ch) == '_')\n#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')\n\n/* Forward references */\nchar *ppdirforward();\nchar *ppdirbackward();\nchar *skipspace();\nchar *scanstring();\nint writeblanks();\nint test1();\nint convert1();\n\n/* The main program */\nint\nmain(argc, argv)\n    int argc;\n    char *argv[];\n{\tFILE *in = stdin;\n\tFILE *out = stdout;\n\tchar *filename = 0;\n\tchar *program_name = argv[0];\n\tchar *output_name = 0;\n#define bufsize 5000\t\t\t/* arbitrary size */\n\tchar *buf;\n\tchar *line;\n\tchar *more;\n\tchar *usage =\n\t  \"Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\\n\";\n\t/*\n\t * In previous versions, ansi2knr recognized a --varargs switch.\n\t * If this switch was supplied, ansi2knr would attempt to convert\n\t * a ... argument to va_alist and va_dcl; if this switch was not\n\t * supplied, ansi2knr would simply drop any such arguments.\n\t * Now, ansi2knr always does this conversion, and we only\n\t * check for this switch for backward compatibility.\n\t */\n\tint convert_varargs = 1;\n\tint output_error;\n\n\twhile ( argc > 1 && argv[1][0] == '-' ) {\n\t  if ( !strcmp(argv[1], \"--varargs\") ) {\n\t    convert_varargs = 1;\n\t    argc--;\n\t    argv++;\n\t    continue;\n\t  }\n\t  if ( !strcmp(argv[1], \"--filename\") && argc > 2 ) {\n\t    filename = argv[2];\n\t    argc -= 2;\n\t    argv += 2;\n\t    continue;\n\t  }\n\t  fprintf(stderr, \"%s: Unrecognized switch: %s\\n\", program_name,\n\t\t  argv[1]);\n\t  fprintf(stderr, usage);\n\t  exit(1);\n\t}\n\tswitch ( argc )\n\t   {\n\tdefault:\n\t\tfprintf(stderr, usage);\n\t\texit(0);\n\tcase 3:\n\t\toutput_name = argv[2];\n\t\tout = fopen(output_name, \"w\");\n\t\tif ( out == NULL ) {\n\t\t  fprintf(stderr, \"%s: Cannot open output file %s\\n\",\n\t\t\t  program_name, output_name);\n\t\t  exit(1);\n\t\t}\n\t\t/* falls through */\n\tcase 2:\n\t\tin = fopen(argv[1], \"r\");\n\t\tif ( in == NULL ) {\n\t\t  fprintf(stderr, \"%s: Cannot open input file %s\\n\",\n\t\t\t  program_name, argv[1]);\n\t\t  exit(1);\n\t\t}\n\t\tif ( filename == 0 )\n\t\t  filename = argv[1];\n\t\t/* falls through */\n\tcase 1:\n\t\tbreak;\n\t   }\n\tif ( filename )\n\t  fprintf(out, \"#line 1 \\\"%s\\\"\\n\", filename);\n\tbuf = malloc(bufsize);\n\tif ( buf == NULL )\n\t   {\n\t\tfprintf(stderr, \"Unable to allocate read buffer!\\n\");\n\t\texit(1);\n\t   }\n\tline = buf;\n\twhile ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )\n\t   {\ntest:\t\tline += strlen(line);\n\t\tswitch ( test1(buf) )\n\t\t   {\n\t\tcase 2:\t\t\t/* a function header */\n\t\t\tconvert1(buf, out, 1, convert_varargs);\n\t\t\tbreak;\n\t\tcase 1:\t\t\t/* a function */\n\t\t\t/* Check for a { at the start of the next line. */\n\t\t\tmore = ++line;\nf:\t\t\tif ( line >= buf + (bufsize - 1) ) /* overflow check */\n\t\t\t  goto wl;\n\t\t\tif ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )\n\t\t\t  goto wl;\n\t\t\tswitch ( *skipspace(ppdirforward(more), 1) )\n\t\t\t  {\n\t\t\t  case '{':\n\t\t\t    /* Definitely a function header. */\n\t\t\t    convert1(buf, out, 0, convert_varargs);\n\t\t\t    fputs(more, out);\n\t\t\t    break;\n\t\t\t  case 0:\n\t\t\t    /* The next line was blank or a comment: */\n\t\t\t    /* keep scanning for a non-comment. */\n\t\t\t    line += strlen(line);\n\t\t\t    goto f;\n\t\t\t  default:\n\t\t\t    /* buf isn't a function header, but */\n\t\t\t    /* more might be. */\n\t\t\t    fputs(buf, out);\n\t\t\t    strcpy(buf, more);\n\t\t\t    line = buf;\n\t\t\t    goto test;\n\t\t\t  }\n\t\t\tbreak;\n\t\tcase -1:\t\t/* maybe the start of a function */\n\t\t\tif ( line != buf + (bufsize - 1) ) /* overflow check */\n\t\t\t  continue;\n\t\t\t/* falls through */\n\t\tdefault:\t\t/* not a function */\nwl:\t\t\tfputs(buf, out);\n\t\t\tbreak;\n\t\t   }\n\t\tline = buf;\n\t   }\n\tif ( line != buf )\n\t  fputs(buf, out);\n\tfree(buf);\n\tif ( output_name ) {\n\t  output_error = ferror(out);\n\t  output_error |= fclose(out);\n\t} else {\t\t/* out == stdout */\n\t  fflush(out);\n\t  output_error = ferror(out);\n\t}\n\tif ( output_error ) {\n\t  fprintf(stderr, \"%s: error writing to %s\\n\", program_name,\n\t\t  (output_name ? output_name : \"stdout\"));\n\t  exit(1);\n\t}\n\tif ( in != stdin )\n\t  fclose(in);\n\treturn 0;\n}\n\n/*\n * Skip forward or backward over one or more preprocessor directives.\n */\nchar *\nppdirforward(p)\n    char *p;\n{\n    for (; *p == '#'; ++p) {\n\tfor (; *p != '\\r' && *p != '\\n'; ++p)\n\t    if (*p == 0)\n\t\treturn p;\n\tif (*p == '\\r' && p[1] == '\\n')\n\t    ++p;\n    }\n    return p;\n}\nchar *\nppdirbackward(p, limit)\n    char *p;\n    char *limit;\n{\n    char *np = p;\n\n    for (;; p = --np) {\n\tif (*np == '\\n' && np[-1] == '\\r')\n\t    --np;\n\tfor (; np > limit && np[-1] != '\\r' && np[-1] != '\\n'; --np)\n\t    if (np[-1] == 0)\n\t\treturn np;\n\tif (*np != '#')\n\t    return p;\n    }\n}\n\n/*\n * Skip over whitespace, comments, and preprocessor directives,\n * in either direction.\n */\nchar *\nskipspace(p, dir)\n    char *p;\n    int dir;\t\t\t/* 1 for forward, -1 for backward */\n{\n    for ( ; ; ) {\n\twhile ( is_space(*p) )\n\t    p += dir;\n\tif ( !(*p == '/' && p[dir] == '*') )\n\t    break;\n\tp += dir;  p += dir;\n\twhile ( !(*p == '*' && p[dir] == '/') ) {\n\t    if ( *p == 0 )\n\t\treturn p;\t/* multi-line comment?? */\n\t    p += dir;\n\t}\n\tp += dir;  p += dir;\n    }\n    return p;\n}\n\n/* Scan over a quoted string, in either direction. */\nchar *\nscanstring(p, dir)\n    char *p;\n    int dir;\n{\n    for (p += dir; ; p += dir)\n\tif (*p == '\"' && p[-dir] != '\\\\')\n\t    return p + dir;\n}\n\n/*\n * Write blanks over part of a string.\n * Don't overwrite end-of-line characters.\n */\nint\nwriteblanks(start, end)\n    char *start;\n    char *end;\n{\tchar *p;\n\tfor ( p = start; p < end; p++ )\n\t  if ( *p != '\\r' && *p != '\\n' )\n\t    *p = ' ';\n\treturn 0;\n}\n\n/*\n * Test whether the string in buf is a function definition.\n * The string may contain and/or end with a newline.\n * Return as follows:\n *\t0 - definitely not a function definition;\n *\t1 - definitely a function definition;\n *\t2 - definitely a function prototype (NOT USED);\n *\t-1 - may be the beginning of a function definition,\n *\t\tappend another line and look again.\n * The reason we don't attempt to convert function prototypes is that\n * Ghostscript's declaration-generating macros look too much like\n * prototypes, and confuse the algorithms.\n */\nint\ntest1(buf)\n    char *buf;\n{\tchar *p = buf;\n\tchar *bend;\n\tchar *endfn;\n\tint contin;\n\n\tif ( !isidfirstchar(*p) )\n\t  return 0;\t\t/* no name at left margin */\n\tbend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1);\n\tswitch ( *bend )\n\t   {\n\t   case ';': contin = 0 /*2*/; break;\n\t   case ')': contin = 1; break;\n\t   case '{': return 0;\t\t/* not a function */\n\t   case '}': return 0;\t\t/* not a function */\n\t   default: contin = -1;\n\t   }\n\twhile ( isidchar(*p) )\n\t  p++;\n\tendfn = p;\n\tp = skipspace(p, 1);\n\tif ( *p++ != '(' )\n\t  return 0;\t\t/* not a function */\n\tp = skipspace(p, 1);\n\tif ( *p == ')' )\n\t  return 0;\t\t/* no parameters */\n\t/* Check that the apparent function name isn't a keyword. */\n\t/* We only need to check for keywords that could be followed */\n\t/* by a left parenthesis (which, unfortunately, is most of them). */\n\t   {\tstatic char *words[] =\n\t\t   {\t\"asm\", \"auto\", \"case\", \"char\", \"const\", \"double\",\n\t\t\t\"extern\", \"float\", \"for\", \"if\", \"int\", \"long\",\n\t\t\t\"register\", \"return\", \"short\", \"signed\", \"sizeof\",\n\t\t\t\"static\", \"switch\", \"typedef\", \"unsigned\",\n\t\t\t\"void\", \"volatile\", \"while\", 0\n\t\t   };\n\t\tchar **key = words;\n\t\tchar *kp;\n\t\tunsigned len = endfn - buf;\n\n\t\twhile ( (kp = *key) != 0 )\n\t\t   {\tif ( strlen(kp) == len && !strncmp(kp, buf, len) )\n\t\t\t  return 0;\t/* name is a keyword */\n\t\t\tkey++;\n\t\t   }\n\t   }\n\t   {\n\t       char *id = p;\n\t       int len;\n\t       /*\n\t\t* Check for identifier1(identifier2) and not\n\t\t* identifier1(void), or identifier1(identifier2, xxxx).\n\t\t*/\n\n\t       while ( isidchar(*p) )\n\t\t   p++;\n\t       len = p - id;\n\t       p = skipspace(p, 1);\n\t       if (*p == ',' ||\n\t\t   (*p == ')' && (len != 4 || strncmp(id, \"void\", 4)))\n\t\t   )\n\t\t   return 0;\t/* not a function */\n\t   }\n\t/*\n\t * If the last significant character was a ), we need to count\n\t * parentheses, because it might be part of a formal parameter\n\t * that is a procedure.\n\t */\n\tif (contin > 0) {\n\t    int level = 0;\n\n\t    for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1))\n\t\tlevel += (*p == '(' ? 1 : *p == ')' ? -1 : 0);\n\t    if (level > 0)\n\t\tcontin = -1;\n\t}\n\treturn contin;\n}\n\n/* Convert a recognized function definition or header to K&R syntax. */\nint\nconvert1(buf, out, header, convert_varargs)\n    char *buf;\n    FILE *out;\n    int header;\t\t\t/* Boolean */\n    int convert_varargs;\t/* Boolean */\n{\tchar *endfn;\n\tchar *p;\n\t/*\n\t * The breaks table contains pointers to the beginning and end\n\t * of each argument.\n\t */\n\tchar **breaks;\n\tunsigned num_breaks = 2;\t/* for testing */\n\tchar **btop;\n\tchar **bp;\n\tchar **ap;\n\tchar *vararg = 0;\n\n\t/* Pre-ANSI implementations don't agree on whether strchr */\n\t/* is called strchr or index, so we open-code it here. */\n\tfor ( endfn = buf; *(endfn++) != '('; )\n\t  ;\ntop:\tp = endfn;\n\tbreaks = (char **)malloc(sizeof(char *) * num_breaks * 2);\n\tif ( breaks == NULL )\n\t   {\t/* Couldn't allocate break table, give up */\n\t\tfprintf(stderr, \"Unable to allocate break table!\\n\");\n\t\tfputs(buf, out);\n\t\treturn -1;\n\t   }\n\tbtop = breaks + num_breaks * 2 - 2;\n\tbp = breaks;\n\t/* Parse the argument list */\n\tdo\n\t   {\tint level = 0;\n\t\tchar *lp = NULL;\n\t\tchar *rp = NULL;\n\t\tchar *end = NULL;\n\n\t\tif ( bp >= btop )\n\t\t   {\t/* Filled up break table. */\n\t\t\t/* Allocate a bigger one and start over. */\n\t\t\tfree((char *)breaks);\n\t\t\tnum_breaks <<= 1;\n\t\t\tgoto top;\n\t\t   }\n\t\t*bp++ = p;\n\t\t/* Find the end of the argument */\n\t\tfor ( ; end == NULL; p++ )\n\t\t   {\tswitch(*p)\n\t\t\t   {\n\t\t\t   case ',':\n\t\t\t\tif ( !level ) end = p;\n\t\t\t\tbreak;\n\t\t\t   case '(':\n\t\t\t\tif ( !level ) lp = p;\n\t\t\t\tlevel++;\n\t\t\t\tbreak;\n\t\t\t   case ')':\n\t\t\t\tif ( --level < 0 ) end = p;\n\t\t\t\telse rp = p;\n\t\t\t\tbreak;\n\t\t\t   case '/':\n\t\t\t\tif (p[1] == '*')\n\t\t\t\t    p = skipspace(p, 1) - 1;\n\t\t\t\tbreak;\n\t\t\t   case '\"':\n\t\t\t       p = scanstring(p, 1) - 1;\n\t\t\t       break;\n\t\t\t   default:\n\t\t\t\t;\n\t\t\t   }\n\t\t   }\n\t\t/* Erase any embedded prototype parameters. */\n\t\tif ( lp && rp )\n\t\t  writeblanks(lp + 1, rp);\n\t\tp--;\t\t\t/* back up over terminator */\n\t\t/* Find the name being declared. */\n\t\t/* This is complicated because of procedure and */\n\t\t/* array modifiers. */\n\t\tfor ( ; ; )\n\t\t   {\tp = skipspace(p - 1, -1);\n\t\t\tswitch ( *p )\n\t\t\t   {\n\t\t\t   case ']':\t/* skip array dimension(s) */\n\t\t\t   case ')':\t/* skip procedure args OR name */\n\t\t\t   {\tint level = 1;\n\t\t\t\twhile ( level )\n\t\t\t\t switch ( *--p )\n\t\t\t\t   {\n\t\t\t\t   case ']': case ')':\n\t\t\t\t       level++;\n\t\t\t\t       break;\n\t\t\t\t   case '[': case '(':\n\t\t\t\t       level--;\n\t\t\t\t       break;\n\t\t\t\t   case '/':\n\t\t\t\t       if (p > buf && p[-1] == '*')\n\t\t\t\t\t   p = skipspace(p, -1) + 1;\n\t\t\t\t       break;\n\t\t\t\t   case '\"':\n\t\t\t\t       p = scanstring(p, -1) + 1;\n\t\t\t\t       break;\n\t\t\t\t   default: ;\n\t\t\t\t   }\n\t\t\t   }\n\t\t\t\tif ( *p == '(' && *skipspace(p + 1, 1) == '*' )\n\t\t\t\t   {\t/* We found the name being declared */\n\t\t\t\t\twhile ( !isidfirstchar(*p) )\n\t\t\t\t\t  p = skipspace(p, 1) + 1;\n\t\t\t\t\tgoto found;\n\t\t\t\t   }\n\t\t\t\tbreak;\n\t\t\t   default:\n\t\t\t\tgoto found;\n\t\t\t   }\n\t\t   }\nfound:\t\tif ( *p == '.' && p[-1] == '.' && p[-2] == '.' )\n\t\t  {\tif ( convert_varargs )\n\t\t\t  {\t*bp++ = \"va_alist\";\n\t\t\t\tvararg = p-2;\n\t\t\t  }\n\t\t\telse\n\t\t\t  {\tp++;\n\t\t\t\tif ( bp == breaks + 1 )\t/* sole argument */\n\t\t\t\t  writeblanks(breaks[0], p);\n\t\t\t\telse\n\t\t\t\t  writeblanks(bp[-1] - 1, p);\n\t\t\t\tbp--;\n\t\t\t  }\n\t\t   }\n\t\telse\n\t\t   {\twhile ( isidchar(*p) ) p--;\n\t\t\t*bp++ = p+1;\n\t\t   }\n\t\tp = end;\n\t   }\n\twhile ( *p++ == ',' );\n\t*bp = p;\n\t/* Make a special check for 'void' arglist */\n\tif ( bp == breaks+2 )\n\t   {\tp = skipspace(breaks[0], 1);\n\t\tif ( !strncmp(p, \"void\", 4) )\n\t\t   {\tp = skipspace(p+4, 1);\n\t\t\tif ( p == breaks[2] - 1 )\n\t\t\t   {\tbp = breaks;\t/* yup, pretend arglist is empty */\n\t\t\t\twriteblanks(breaks[0], p + 1);\n\t\t\t   }\n\t\t   }\n\t   }\n\t/* Put out the function name and left parenthesis. */\n\tp = buf;\n\twhile ( p != endfn ) putc(*p, out), p++;\n\t/* Put out the declaration. */\n\tif ( header )\n\t  {\tfputs(\");\", out);\n\t\tfor ( p = breaks[0]; *p; p++ )\n\t\t  if ( *p == '\\r' || *p == '\\n' )\n\t\t    putc(*p, out);\n\t  }\n\telse\n\t  {\tfor ( ap = breaks+1; ap < bp; ap += 2 )\n\t\t  {\tp = *ap;\n\t\t\twhile ( isidchar(*p) )\n\t\t\t  putc(*p, out), p++;\n\t\t\tif ( ap < bp - 1 )\n\t\t\t  fputs(\", \", out);\n\t\t  }\n\t\tfputs(\")  \", out);\n\t\t/* Put out the argument declarations */\n\t\tfor ( ap = breaks+2; ap <= bp; ap += 2 )\n\t\t  (*ap)[-1] = ';';\n\t\tif ( vararg != 0 )\n\t\t  {\t*vararg = 0;\n\t\t\tfputs(breaks[0], out);\t\t/* any prior args */\n\t\t\tfputs(\"va_dcl\", out);\t\t/* the final arg */\n\t\t\tfputs(bp[0], out);\n\t\t  }\n\t\telse\n\t\t  fputs(breaks[0], out);\n\t  }\n\tfree((char *)breaks);\n\treturn 0;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/ar.c",
    "content": "/* Interface to `ar' archives for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#ifndef\tNO_ARCHIVES\n\n#include \"filedef.h\"\n#include \"dep.h\"\n#include <fnmatch.h>\n\n/* Defined in arscan.c.  */\nextern long int ar_scan PARAMS ((char *archive, long int (*function) (), intptr_t arg));\nextern int ar_name_equal PARAMS ((char *name, char *mem, int truncated));\n#ifndef VMS\nextern int ar_member_touch PARAMS ((char *arname, char *memname));\n#endif\n\n/* Return nonzero if NAME is an archive-member reference, zero if not.\n   An archive-member reference is a name like `lib(member)'.\n   If a name like `lib((entry))' is used, a fatal error is signaled at\n   the attempt to use this unsupported feature.  */\n\nint\nar_name (char *name)\n{\n  char *p = strchr (name, '(');\n  char *end;\n\n  if (p == 0 || p == name)\n    return 0;\n\n  end = p + strlen (p) - 1;\n  if (*end != ')')\n    return 0;\n\n  if (p[1] == '(' && end[-1] == ')')\n    fatal (NILF, _(\"attempt to use unsupported feature: `%s'\"), name);\n\n  return 1;\n}\n\n\n/* Parse the archive-member reference NAME into the archive and member names.\n   Put the malloc'd archive name in *ARNAME_P if ARNAME_P is non-nil;\n   put the malloc'd member name in *MEMNAME_P if MEMNAME_P is non-nil.  */\n\nvoid\nar_parse_name (char *name, char **arname_p, char **memname_p)\n{\n  char *p = strchr (name, '('), *end = name + strlen (name) - 1;\n\n  if (arname_p != 0)\n    *arname_p = savestring (name, p - name);\n\n  if (memname_p != 0)\n    *memname_p = savestring (p + 1, end - (p + 1));\n}\n\f\nstatic long int ar_member_date_1 PARAMS ((int desc, char *mem, int truncated, long int hdrpos,\n\tlong int datapos, long int size, long int date, int uid, int gid, int mode, char *name));\n\n/* Return the modtime of NAME.  */\n\ntime_t\nar_member_date (char *name)\n{\n  char *arname;\n  int arname_used = 0;\n  char *memname;\n  long int val;\n\n  ar_parse_name (name, &arname, &memname);\n\n  /* Make sure we know the modtime of the archive itself because we are\n     likely to be called just before commands to remake a member are run,\n     and they will change the archive itself.\n\n     But we must be careful not to enter_file the archive itself if it does\n     not exist, because pattern_search assumes that files found in the data\n     base exist or can be made.  */\n  {\n    struct file *arfile;\n    arfile = lookup_file (arname);\n    if (arfile == 0 && file_exists_p (arname))\n      {\n\tarfile = enter_file (arname);\n\tarname_used = 1;\n      }\n\n    if (arfile != 0)\n      (void) f_mtime (arfile, 0);\n  }\n\n  val = ar_scan (arname, ar_member_date_1, (intptr_t) memname);\n\n  if (!arname_used)\n    free (arname);\n  free (memname);\n\n  return (val <= 0 ? (time_t) -1 : (time_t) val);\n}\n\n/* This function is called by `ar_scan' to find which member to look at.  */\n\n/* ARGSUSED */\nstatic long int\nar_member_date_1 (int desc UNUSED, char *mem, int truncated,\n\t\t  long int hdrpos UNUSED, long int datapos UNUSED,\n                  long int size UNUSED, long int date,\n                  int uid UNUSED, int gid UNUSED, int mode UNUSED, char *name)\n{\n  return ar_name_equal (name, mem, truncated) ? date : 0;\n}\n\f\n/* Set the archive-member NAME's modtime to now.  */\n\n#ifdef VMS\nint\nar_touch (char *name)\n{\n  error (NILF, _(\"touch archive member is not available on VMS\"));\n  return -1;\n}\n#else\nint\nar_touch (char *name)\n{\n  char *arname, *memname;\n  int arname_used = 0;\n  register int val;\n\n  ar_parse_name (name, &arname, &memname);\n\n  /* Make sure we know the modtime of the archive itself before we\n     touch the member, since this will change the archive itself.  */\n  {\n    struct file *arfile;\n    arfile = lookup_file (arname);\n    if (arfile == 0)\n      {\n\tarfile = enter_file (arname);\n\tarname_used = 1;\n      }\n\n    (void) f_mtime (arfile, 0);\n  }\n\n  val = 1;\n  switch (ar_member_touch (arname, memname))\n    {\n    case -1:\n      error (NILF, _(\"touch: Archive `%s' does not exist\"), arname);\n      break;\n    case -2:\n      error (NILF, _(\"touch: `%s' is not a valid archive\"), arname);\n      break;\n    case -3:\n      perror_with_name (\"touch: \", arname);\n      break;\n    case 1:\n      error (NILF,\n             _(\"touch: Member `%s' does not exist in `%s'\"), memname, arname);\n      break;\n    case 0:\n      val = 0;\n      break;\n    default:\n      error (NILF,\n             _(\"touch: Bad return code from ar_member_touch on `%s'\"), name);\n    }\n\n  if (!arname_used)\n    free (arname);\n  free (memname);\n\n  return val;\n}\n#endif /* !VMS */\n\f\n/* State of an `ar_glob' run, passed to `ar_glob_match'.  */\n\nstruct ar_glob_state\n  {\n    char *arname;\n    char *pattern;\n    unsigned int size;\n    struct nameseq *chain;\n    unsigned int n;\n  };\n\n/* This function is called by `ar_scan' to match one archive\n   element against the pattern in STATE.  */\n\nstatic long int\nar_glob_match (int desc UNUSED, char *mem, int truncated UNUSED,\n\t       long int hdrpos UNUSED, long int datapos UNUSED,\n               long int size UNUSED, long int date UNUSED, int uid UNUSED,\n               int gid UNUSED, int mode UNUSED, struct ar_glob_state *state)\n{\n  if (fnmatch (state->pattern, mem, FNM_PATHNAME|FNM_PERIOD) == 0)\n    {\n      /* We have a match.  Add it to the chain.  */\n      struct nameseq *new = (struct nameseq *) xmalloc (state->size);\n      new->name = concat (state->arname, mem, \")\");\n      new->next = state->chain;\n      state->chain = new;\n      ++state->n;\n    }\n\n  return 0L;\n}\n\n/* Return nonzero if PATTERN contains any metacharacters.\n   Metacharacters can be quoted with backslashes if QUOTE is nonzero.  */\nstatic int\nglob_pattern_p (const char *pattern, int quote)\n{\n  const char *p;\n  int open = 0;\n\n  for (p = pattern; *p != '\\0'; ++p)\n    switch (*p)\n      {\n      case '?':\n      case '*':\n\treturn 1;\n\n      case '\\\\':\n\tif (quote)\n\t  ++p;\n\tbreak;\n\n      case '[':\n\topen = 1;\n\tbreak;\n\n      case ']':\n\tif (open)\n\t  return 1;\n\tbreak;\n      }\n\n  return 0;\n}\n\n/* Glob for MEMBER_PATTERN in archive ARNAME.\n   Return a malloc'd chain of matching elements (or nil if none).  */\n\nstruct nameseq *\nar_glob (char *arname, char *member_pattern, unsigned int size)\n{\n  struct ar_glob_state state;\n  char **names;\n  struct nameseq *n;\n  unsigned int i;\n\n  if (! glob_pattern_p (member_pattern, 1))\n    return 0;\n\n  /* Scan the archive for matches.\n     ar_glob_match will accumulate them in STATE.chain.  */\n  i = strlen (arname);\n  state.arname = (char *) alloca (i + 2);\n  bcopy (arname, state.arname, i);\n  state.arname[i] = '(';\n  state.arname[i + 1] = '\\0';\n  state.pattern = member_pattern;\n  state.size = size;\n  state.chain = 0;\n  state.n = 0;\n  (void) ar_scan (arname, ar_glob_match, (intptr_t) &state);\n\n  if (state.chain == 0)\n    return 0;\n\n  /* Now put the names into a vector for sorting.  */\n  names = (char **) alloca (state.n * sizeof (char *));\n  i = 0;\n  for (n = state.chain; n != 0; n = n->next)\n    names[i++] = n->name;\n\n  /* Sort them alphabetically.  */\n  qsort ((char *) names, i, sizeof (*names), alpha_compare);\n\n  /* Put them back into the chain in the sorted order.  */\n  i = 0;\n  for (n = state.chain; n != 0; n = n->next)\n    n->name = names[i++];\n\n  return state.chain;\n}\n\n#endif\t/* Not NO_ARCHIVES.  */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/arscan.c",
    "content": "/* Library function for scanning an archive file.\nCopyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,\nInc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#ifdef HAVE_FCNTL_H\n#include <fcntl.h>\n#else\n#include <sys/file.h>\n#endif\n\n#ifndef\tNO_ARCHIVES\n\f\n#ifdef VMS\n#include <lbrdef.h>\n#include <mhddef.h>\n#include <credef.h>\n#include <descrip.h>\n#include <ctype.h>\n#if __DECC\n#include <unixlib.h>\n#include <lbr$routines.h>\n#endif\n\nstatic void *VMS_lib_idx;\n\nstatic char *VMS_saved_memname;\n\nstatic time_t VMS_member_date;\n\nstatic long int (*VMS_function) ();\n\nstatic int\nVMS_get_member_info (struct dsc$descriptor_s *module, unsigned long *rfa)\n{\n  int status, i;\n  long int fnval;\n\n  time_t val;\n\n  static struct dsc$descriptor_s bufdesc =\n    { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL };\n\n  struct mhddef *mhd;\n  char filename[128];\n\n  bufdesc.dsc$a_pointer = filename;\n  bufdesc.dsc$w_length = sizeof (filename);\n\n  status = lbr$set_module (&VMS_lib_idx, rfa, &bufdesc,\n\t\t\t   &bufdesc.dsc$w_length, 0);\n  if (! (status & 1))\n    {\n      error (NILF, _(\"lbr$set_module failed to extract module info, status = %d\"),\n\t     status);\n\n      lbr$close (&VMS_lib_idx);\n\n      return 0;\n    }\n\n  mhd = (struct mhddef *) filename;\n\n#ifdef __DECC\n  /* John Fowler <jfowler@nyx.net> writes this is needed in his environment,\n   * but that decc$fix_time() isn't documented to work this way.  Let me\n   * know if this causes problems in other VMS environments.\n   */\n  val = decc$fix_time (&mhd->mhd$l_datim) + timezone - daylight*3600;\n#endif\n\n  for (i = 0; i < module->dsc$w_length; i++)\n    filename[i] = _tolower ((unsigned char)module->dsc$a_pointer[i]);\n\n  filename[i] = '\\0';\n\n  VMS_member_date = (time_t) -1;\n\n  fnval =\n    (*VMS_function) (-1, filename, 0, 0, 0, 0, val, 0, 0, 0,\n\t\t     VMS_saved_memname);\n\n  if (fnval)\n    {\n      VMS_member_date = fnval;\n      return 0;\n    }\n  else\n    return 1;\n}\n\n/* Takes three arguments ARCHIVE, FUNCTION and ARG.\n\n   Open the archive named ARCHIVE, find its members one by one,\n   and for each one call FUNCTION with the following arguments:\n     archive file descriptor for reading the data,\n     member name,\n     member name might be truncated flag,\n     member header position in file,\n     member data position in file,\n     member data size,\n     member date,\n     member uid,\n     member gid,\n     member protection mode,\n     ARG.\n\n   NOTE: on VMS systems, only name, date, and arg are meaningful!\n\n   The descriptor is poised to read the data of the member\n   when FUNCTION is called.  It does not matter how much\n   data FUNCTION reads.\n\n   If FUNCTION returns nonzero, we immediately return\n   what FUNCTION returned.\n\n   Returns -1 if archive does not exist,\n   Returns -2 if archive has invalid format.\n   Returns 0 if have scanned successfully.  */\n\nlong int\nar_scan (char *archive, long int (*function) PARAMS ((void)), intptr_t arg)\n{\n  char *p;\n\n  static struct dsc$descriptor_s libdesc =\n    { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL };\n\n  unsigned long func = LBR$C_READ;\n  unsigned long type = LBR$C_TYP_UNK;\n  unsigned long index = 1;\n\n  int status;\n\n  status = lbr$ini_control (&VMS_lib_idx, &func, &type, 0);\n\n  if (! (status & 1))\n    {\n      error (NILF, _(\"lbr$ini_control failed with status = %d\"),status);\n      return -2;\n    }\n\n  libdesc.dsc$a_pointer = archive;\n  libdesc.dsc$w_length = strlen (archive);\n\n  status = lbr$open (&VMS_lib_idx, &libdesc, 0, 0, 0, 0, 0);\n\n  if (! (status & 1))\n    {\n      error (NILF, _(\"unable to open library `%s' to lookup member `%s'\"),\n\t     archive, (char *)arg);\n      return -1;\n    }\n\n  VMS_saved_memname = (char *)arg;\n\n  /* For comparison, delete .obj from arg name.  */\n\n  p = strrchr (VMS_saved_memname, '.');\n  if (p)\n    *p = '\\0';\n\n  VMS_function = function;\n\n  VMS_member_date = (time_t) -1;\n  lbr$get_index (&VMS_lib_idx, &index, VMS_get_member_info, 0);\n\n  /* Undo the damage.  */\n  if (p)\n    *p = '.';\n\n  lbr$close (&VMS_lib_idx);\n\n  return VMS_member_date > 0 ? VMS_member_date : 0;\n}\n\n#else /* !VMS */\n\n/* SCO Unix's compiler defines both of these.  */\n#ifdef\tM_UNIX\n#undef\tM_XENIX\n#endif\n\n/* On the sun386i and in System V rel 3, ar.h defines two different archive\n   formats depending upon whether you have defined PORTAR (normal) or PORT5AR\n   (System V Release 1).  There is no default, one or the other must be defined\n   to have a nonzero value.  */\n\n#if (!defined (PORTAR) || PORTAR == 0) && (!defined (PORT5AR) || PORT5AR == 0)\n#undef\tPORTAR\n#ifdef M_XENIX\n/* According to Jim Sievert <jas1@rsvl.unisys.com>, for SCO XENIX defining\n   PORTAR to 1 gets the wrong archive format, and defining it to 0 gets the\n   right one.  */\n#define PORTAR 0\n#else\n#define PORTAR 1\n#endif\n#endif\n\n/* On AIX, define these symbols to be sure to get both archive formats.\n   AIX 4.3 introduced the \"big\" archive format to support 64-bit object\n   files, so on AIX 4.3 systems we need to support both the \"normal\" and\n   \"big\" archive formats.  An archive's format is indicated in the\n   \"fl_magic\" field of the \"FL_HDR\" structure.  For a normal archive,\n   this field will be the string defined by the AIAMAG symbol.  For a\n   \"big\" archive, it will be the string defined by the AIAMAGBIG symbol\n   (at least on AIX it works this way).\n\n   Note: we'll define these symbols regardless of which AIX version\n   we're compiling on, but this is okay since we'll use the new symbols\n   only if they're present.  */\n#ifdef _AIX\n# define __AR_SMALL__\n# define __AR_BIG__\n#endif\n\n#ifndef WINDOWS32\n# ifndef __BEOS__\n#  include <ar.h>\n# else\n   /* BeOS 5 doesn't have <ar.h> but has archives in the same format\n    * as many other Unices.  This was taken from GNU binutils for BeOS.\n    */\n#  define ARMAG\t\"!<arch>\\n\"\t/* String that begins an archive file.  */\n#  define SARMAG 8\t\t/* Size of that string.  */\n#  define ARFMAG \"`\\n\"\t\t/* String in ar_fmag at end of each header.  */\nstruct ar_hdr\n  {\n    char ar_name[16];\t\t/* Member file name, sometimes / terminated. */\n    char ar_date[12];\t\t/* File date, decimal seconds since Epoch.  */\n    char ar_uid[6], ar_gid[6];\t/* User and group IDs, in ASCII decimal.  */\n    char ar_mode[8];\t\t/* File mode, in ASCII octal.  */\n    char ar_size[10];\t\t/* File size, in ASCII decimal.  */\n    char ar_fmag[2];\t\t/* Always contains ARFMAG.  */\n  };\n# endif\n#else\n/* These should allow us to read Windows (VC++) libraries (according to Frank\n * Libbrecht <frankl@abzx.belgium.hp.com>)\n */\n# include <windows.h>\n# include <windef.h>\n# include <io.h>\n# define ARMAG      IMAGE_ARCHIVE_START\n# define SARMAG     IMAGE_ARCHIVE_START_SIZE\n# define ar_hdr     _IMAGE_ARCHIVE_MEMBER_HEADER\n# define ar_name    Name\n# define ar_mode    Mode\n# define ar_size    Size\n# define ar_date    Date\n# define ar_uid     UserID\n# define ar_gid     GroupID\n#endif\n\n/* Cray's <ar.h> apparently defines this.  */\n#ifndef\tAR_HDR_SIZE\n# define   AR_HDR_SIZE\t(sizeof (struct ar_hdr))\n#endif\n\f\n/* Takes three arguments ARCHIVE, FUNCTION and ARG.\n\n   Open the archive named ARCHIVE, find its members one by one,\n   and for each one call FUNCTION with the following arguments:\n     archive file descriptor for reading the data,\n     member name,\n     member name might be truncated flag,\n     member header position in file,\n     member data position in file,\n     member data size,\n     member date,\n     member uid,\n     member gid,\n     member protection mode,\n     ARG.\n\n   The descriptor is poised to read the data of the member\n   when FUNCTION is called.  It does not matter how much\n   data FUNCTION reads.\n\n   If FUNCTION returns nonzero, we immediately return\n   what FUNCTION returned.\n\n   Returns -1 if archive does not exist,\n   Returns -2 if archive has invalid format.\n   Returns 0 if have scanned successfully.  */\n\nlong int\nar_scan (char *archive, long int (*function)(), intptr_t arg)\n{\n#ifdef AIAMAG\n  FL_HDR fl_header;\n#ifdef AIAMAGBIG\n  int big_archive = 0;\n  FL_HDR_BIG fl_header_big;\n#endif\n#else\n  int long_name = 0;\n#endif\n  char *namemap = 0;\n  register int desc = open (archive, O_RDONLY, 0);\n  if (desc < 0)\n    return -1;\n#ifdef SARMAG\n  {\n    char buf[SARMAG];\n    register int nread = read (desc, buf, SARMAG);\n    if (nread != SARMAG || bcmp (buf, ARMAG, SARMAG))\n      {\n\t(void) close (desc);\n\treturn -2;\n      }\n  }\n#else\n#ifdef AIAMAG\n  {\n    register int nread = read (desc, (char *) &fl_header, FL_HSZ);\n\n    if (nread != FL_HSZ)\n      {\n\t(void) close (desc);\n\treturn -2;\n      }\n#ifdef AIAMAGBIG\n    /* If this is a \"big\" archive, then set the flag and\n       re-read the header into the \"big\" structure. */\n    if (!bcmp (fl_header.fl_magic, AIAMAGBIG, SAIAMAG))\n      {\n\tbig_archive = 1;\n\n\t/* seek back to beginning of archive */\n\tif (lseek (desc, 0, 0) < 0)\n\t  {\n\t    (void) close (desc);\n\t    return -2;\n\t  }\n\n\t/* re-read the header into the \"big\" structure */\n\tnread = read (desc, (char *) &fl_header_big, FL_HSZ_BIG);\n\tif (nread != FL_HSZ_BIG)\n\t  {\n\t    (void) close (desc);\n\t    return -2;\n\t  }\n      }\n    else\n#endif\n       /* Check to make sure this is a \"normal\" archive. */\n      if (bcmp (fl_header.fl_magic, AIAMAG, SAIAMAG))\n\t{\n          (void) close (desc);\n          return -2;\n\t}\n  }\n#else\n  {\n#ifndef M_XENIX\n    int buf;\n#else\n    unsigned short int buf;\n#endif\n    register int nread = read(desc, &buf, sizeof (buf));\n    if (nread != sizeof (buf) || buf != ARMAG)\n      {\n\t(void) close (desc);\n\treturn -2;\n      }\n  }\n#endif\n#endif\n\n  /* Now find the members one by one.  */\n  {\n#ifdef SARMAG\n    register long int member_offset = SARMAG;\n#else\n#ifdef AIAMAG\n    long int member_offset;\n    long int last_member_offset;\n\n#ifdef AIAMAGBIG\n    if ( big_archive )\n      {\n\tsscanf (fl_header_big.fl_fstmoff, \"%20ld\", &member_offset);\n\tsscanf (fl_header_big.fl_lstmoff, \"%20ld\", &last_member_offset);\n      }\n    else\n#endif\n      {\n\tsscanf (fl_header.fl_fstmoff, \"%12ld\", &member_offset);\n\tsscanf (fl_header.fl_lstmoff, \"%12ld\", &last_member_offset);\n      }\n\n    if (member_offset == 0)\n      {\n\t/* Empty archive.  */\n\tclose (desc);\n\treturn 0;\n      }\n#else\n#ifndef\tM_XENIX\n    register long int member_offset = sizeof (int);\n#else\t/* Xenix.  */\n    register long int member_offset = sizeof (unsigned short int);\n#endif\t/* Not Xenix.  */\n#endif\n#endif\n\n    while (1)\n      {\n\tregister int nread;\n\tstruct ar_hdr member_header;\n#ifdef AIAMAGBIG\n\tstruct ar_hdr_big member_header_big;\n#endif\n#ifdef AIAMAG\n\tchar name[256];\n\tint name_len;\n\tlong int dateval;\n\tint uidval, gidval;\n\tlong int data_offset;\n#else\n\tchar namebuf[sizeof member_header.ar_name + 1];\n\tchar *name;\n\tint is_namemap;\t\t/* Nonzero if this entry maps long names.  */\n#endif\n\tlong int eltsize;\n\tint eltmode;\n\tlong int fnval;\n\n\tif (lseek (desc, member_offset, 0) < 0)\n\t  {\n\t    (void) close (desc);\n\t    return -2;\n\t  }\n\n#ifdef AIAMAG\n#define       AR_MEMHDR_SZ(x) (sizeof(x) - sizeof (x._ar_name))\n\n#ifdef AIAMAGBIG\n\tif (big_archive)\n\t  {\n\t    nread = read (desc, (char *) &member_header_big,\n\t\t\t  AR_MEMHDR_SZ(member_header_big) );\n\n\t    if (nread != AR_MEMHDR_SZ(member_header_big))\n\t      {\n\t\t(void) close (desc);\n\t\treturn -2;\n\t      }\n\n\t    sscanf (member_header_big.ar_namlen, \"%4d\", &name_len);\n\t    nread = read (desc, name, name_len);\n\n\t    if (nread != name_len)\n\t      {\n\t\t(void) close (desc);\n\t\treturn -2;\n\t      }\n\n\t    name[name_len] = 0;\n\n\t    sscanf (member_header_big.ar_date, \"%12ld\", &dateval);\n\t    sscanf (member_header_big.ar_uid, \"%12d\", &uidval);\n\t    sscanf (member_header_big.ar_gid, \"%12d\", &gidval);\n\t    sscanf (member_header_big.ar_mode, \"%12o\", &eltmode);\n\t    sscanf (member_header_big.ar_size, \"%20ld\", &eltsize);\n\n\t    data_offset = (member_offset + AR_MEMHDR_SZ(member_header_big)\n\t\t\t   + name_len + 2);\n\t  }\n\telse\n#endif\n\t  {\n\t    nread = read (desc, (char *) &member_header,\n\t\t\t  AR_MEMHDR_SZ(member_header) );\n\n\t    if (nread != AR_MEMHDR_SZ(member_header))\n\t      {\n\t\t(void) close (desc);\n\t\treturn -2;\n\t      }\n\n\t    sscanf (member_header.ar_namlen, \"%4d\", &name_len);\n\t    nread = read (desc, name, name_len);\n\n\t    if (nread != name_len)\n\t      {\n\t\t(void) close (desc);\n\t\treturn -2;\n\t      }\n\n\t    name[name_len] = 0;\n\n\t    sscanf (member_header.ar_date, \"%12ld\", &dateval);\n\t    sscanf (member_header.ar_uid, \"%12d\", &uidval);\n\t    sscanf (member_header.ar_gid, \"%12d\", &gidval);\n\t    sscanf (member_header.ar_mode, \"%12o\", &eltmode);\n\t    sscanf (member_header.ar_size, \"%12ld\", &eltsize);\n\n\t    data_offset = (member_offset + AR_MEMHDR_SZ(member_header)\n\t\t\t   + name_len + 2);\n\t  }\n\tdata_offset += data_offset % 2;\n\n\tfnval =\n\t  (*function) (desc, name, 0,\n\t\t       member_offset, data_offset, eltsize,\n\t\t       dateval, uidval, gidval,\n\t\t       eltmode, arg);\n\n#else\t/* Not AIAMAG.  */\n\tnread = read (desc, (char *) &member_header, AR_HDR_SIZE);\n\tif (nread == 0)\n\t  /* No data left means end of file; that is OK.  */\n\t  break;\n\n\tif (nread != AR_HDR_SIZE\n#if defined(ARFMAG) || defined(ARFZMAG)\n\t    || (\n# ifdef ARFMAG\n                bcmp (member_header.ar_fmag, ARFMAG, 2)\n# else\n                1\n# endif\n                &&\n# ifdef ARFZMAG\n                bcmp (member_header.ar_fmag, ARFZMAG, 2)\n# else\n                1\n# endif\n               )\n#endif\n\t    )\n\t  {\n\t    (void) close (desc);\n\t    return -2;\n\t  }\n\n\tname = namebuf;\n\tbcopy (member_header.ar_name, name, sizeof member_header.ar_name);\n\t{\n\t  register char *p = name + sizeof member_header.ar_name;\n\t  do\n\t    *p = '\\0';\n\t  while (p > name && *--p == ' ');\n\n#ifndef AIAMAG\n\t  /* If the member name is \"//\" or \"ARFILENAMES/\" this may be\n\t     a list of file name mappings.  The maximum file name\n \t     length supported by the standard archive format is 14\n \t     characters.  This member will actually always be the\n \t     first or second entry in the archive, but we don't check\n \t     that.  */\n \t  is_namemap = (!strcmp (name, \"//\")\n\t\t\t|| !strcmp (name, \"ARFILENAMES/\"));\n#endif\t/* Not AIAMAG. */\n\t  /* On some systems, there is a slash after each member name.  */\n\t  if (*p == '/')\n\t    *p = '\\0';\n\n#ifndef AIAMAG\n \t  /* If the member name starts with a space or a slash, this\n \t     is an index into the file name mappings (used by GNU ar).\n \t     Otherwise if the member name looks like #1/NUMBER the\n \t     real member name appears in the element data (used by\n \t     4.4BSD).  */\n \t  if (! is_namemap\n \t      && (name[0] == ' ' || name[0] == '/')\n \t      && namemap != 0)\n\t    {\n\t      name = namemap + atoi (name + 1);\n\t      long_name = 1;\n\t    }\n \t  else if (name[0] == '#'\n \t\t   && name[1] == '1'\n \t\t   && name[2] == '/')\n \t    {\n \t      int namesize = atoi (name + 3);\n\n \t      name = (char *) alloca (namesize + 1);\n \t      nread = read (desc, name, namesize);\n \t      if (nread != namesize)\n \t\t{\n \t\t  close (desc);\n \t\t  return -2;\n \t\t}\n \t      name[namesize] = '\\0';\n\n\t      long_name = 1;\n \t    }\n#endif /* Not AIAMAG. */\n\t}\n\n#ifndef\tM_XENIX\n\tsscanf (member_header.ar_mode, \"%o\", &eltmode);\n\teltsize = atol (member_header.ar_size);\n#else\t/* Xenix.  */\n\teltmode = (unsigned short int) member_header.ar_mode;\n\teltsize = member_header.ar_size;\n#endif\t/* Not Xenix.  */\n\n\tfnval =\n\t  (*function) (desc, name, ! long_name, member_offset,\n\t\t       member_offset + AR_HDR_SIZE, eltsize,\n#ifndef\tM_XENIX\n\t\t       atol (member_header.ar_date),\n\t\t       atoi (member_header.ar_uid),\n\t\t       atoi (member_header.ar_gid),\n#else\t/* Xenix.  */\n\t\t       member_header.ar_date,\n\t\t       member_header.ar_uid,\n\t\t       member_header.ar_gid,\n#endif\t/* Not Xenix.  */\n\t\t       eltmode, arg);\n\n#endif  /* AIAMAG.  */\n\n\tif (fnval)\n\t  {\n\t    (void) close (desc);\n\t    return fnval;\n\t  }\n\n#ifdef AIAMAG\n\tif (member_offset == last_member_offset)\n\t  /* End of the chain.  */\n\t  break;\n\n#ifdef AIAMAGBIG\n\tif (big_archive)\n          sscanf (member_header_big.ar_nxtmem, \"%20ld\", &member_offset);\n\telse\n#endif\n\t  sscanf (member_header.ar_nxtmem, \"%12ld\", &member_offset);\n\n\tif (lseek (desc, member_offset, 0) != member_offset)\n\t  {\n\t    (void) close (desc);\n\t    return -2;\n\t  }\n#else\n\n \t/* If this member maps archive names, we must read it in.  The\n \t   name map will always precede any members whose names must\n \t   be mapped.  */\n\tif (is_namemap)\n \t  {\n \t    char *clear;\n \t    char *limit;\n\n \t    namemap = (char *) alloca (eltsize);\n \t    nread = read (desc, namemap, eltsize);\n \t    if (nread != eltsize)\n \t      {\n \t\t(void) close (desc);\n \t\treturn -2;\n \t      }\n\n \t    /* The names are separated by newlines.  Some formats have\n \t       a trailing slash.  Null terminate the strings for\n \t       convenience.  */\n \t    limit = namemap + eltsize;\n \t    for (clear = namemap; clear < limit; clear++)\n \t      {\n \t\tif (*clear == '\\n')\n \t\t  {\n \t\t    *clear = '\\0';\n \t\t    if (clear[-1] == '/')\n \t\t      clear[-1] = '\\0';\n \t\t  }\n \t      }\n\n\t    is_namemap = 0;\n \t  }\n\n\tmember_offset += AR_HDR_SIZE + eltsize;\n\tif (member_offset % 2 != 0)\n\t  member_offset++;\n#endif\n      }\n  }\n\n  close (desc);\n  return 0;\n}\n#endif /* !VMS */\n\f\n/* Return nonzero iff NAME matches MEM.\n   If TRUNCATED is nonzero, MEM may be truncated to\n   sizeof (struct ar_hdr.ar_name) - 1.  */\n\nint\nar_name_equal (char *name, char *mem, int truncated)\n{\n  char *p;\n\n  p = strrchr (name, '/');\n  if (p != 0)\n    name = p + 1;\n\n#ifndef VMS\n  if (truncated)\n    {\n#ifdef AIAMAG\n      /* TRUNCATED should never be set on this system.  */\n      abort ();\n#else\n      struct ar_hdr hdr;\n#if !defined (__hpux) && !defined (cray)\n      return strneq (name, mem, sizeof(hdr.ar_name) - 1);\n#else\n      return strneq (name, mem, sizeof(hdr.ar_name) - 2);\n#endif /* !__hpux && !cray */\n#endif /* !AIAMAG */\n    }\n#endif /* !VMS */\n\n  return !strcmp (name, mem);\n}\n\f\n#ifndef VMS\n/* ARGSUSED */\nstatic long int\nar_member_pos (int desc UNUSED, char *mem, int truncated,\n\t       long int hdrpos, long int datapos UNUSED, long int size UNUSED,\n               long int date UNUSED, int uid UNUSED, int gid UNUSED,\n               int mode UNUSED, char *name)\n{\n  if (!ar_name_equal (name, mem, truncated))\n    return 0;\n  return hdrpos;\n}\n\n/* Set date of member MEMNAME in archive ARNAME to current time.\n   Returns 0 if successful,\n   -1 if file ARNAME does not exist,\n   -2 if not a valid archive,\n   -3 if other random system call error (including file read-only),\n   1 if valid but member MEMNAME does not exist.  */\n\nint\nar_member_touch (char *arname, char *memname)\n{\n  long int pos = ar_scan (arname, ar_member_pos, (intptr_t) memname);\n  int fd;\n  struct ar_hdr ar_hdr;\n  int i;\n  unsigned int ui;\n  struct stat statbuf;\n\n  if (pos < 0)\n    return (int) pos;\n  if (!pos)\n    return 1;\n\n  fd = open (arname, O_RDWR, 0666);\n  if (fd < 0)\n    return -3;\n  /* Read in this member's header */\n  if (lseek (fd, pos, 0) < 0)\n    goto lose;\n  if (AR_HDR_SIZE != read (fd, (char *) &ar_hdr, AR_HDR_SIZE))\n    goto lose;\n  /* Write back the header, thus touching the archive file.  */\n  if (lseek (fd, pos, 0) < 0)\n    goto lose;\n  if (AR_HDR_SIZE != write (fd, (char *) &ar_hdr, AR_HDR_SIZE))\n    goto lose;\n  /* The file's mtime is the time we we want.  */\n  EINTRLOOP (i, fstat (fd, &statbuf));\n  if (i < 0)\n    goto lose;\n#if defined(ARFMAG) || defined(ARFZMAG) || defined(AIAMAG) || defined(WINDOWS32)\n  /* Advance member's time to that time */\n  for (ui = 0; ui < sizeof ar_hdr.ar_date; ui++)\n    ar_hdr.ar_date[ui] = ' ';\n  sprintf (ar_hdr.ar_date, \"%ld\", (long int) statbuf.st_mtime);\n#ifdef AIAMAG\n  ar_hdr.ar_date[strlen(ar_hdr.ar_date)] = ' ';\n#endif\n#else\n  ar_hdr.ar_date = statbuf.st_mtime;\n#endif\n  /* Write back this member's header */\n  if (lseek (fd, pos, 0) < 0)\n    goto lose;\n  if (AR_HDR_SIZE != write (fd, (char *) &ar_hdr, AR_HDR_SIZE))\n    goto lose;\n  close (fd);\n  return 0;\n\n lose:\n  i = errno;\n  close (fd);\n  errno = i;\n  return -3;\n}\n#endif\n\f\n#ifdef TEST\n\nintptr_t\ndescribe_member (int desc, char *name, int truncated,\n\t\t long int hdrpos, long int datapos, long int size,\n                 long int date, int uid, int gid, int mode)\n{\n  extern char *ctime ();\n\n  printf (_(\"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"),\n\t  name, truncated ? _(\" (name might be truncated)\") : \"\",\n\t  size, hdrpos, datapos);\n  printf (_(\"  Date %s\"), ctime (&date));\n  printf (_(\"  uid = %d, gid = %d, mode = 0%o.\\n\"), uid, gid, mode);\n\n  return 0;\n}\n\nint\nmain (int argc, char **argv)\n{\n  ar_scan (argv[1], describe_member);\n  return 0;\n}\n\n#endif\t/* TEST.  */\n#endif\t/* NO_ARCHIVES.  */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/autom4te.cache/output.0",
    "content": "@%:@! /bin/sh\n@%:@ From configure.in Id: configure.in,v 1.142 2006/04/01 06:36:40 psmith Exp .\n@%:@ Guess values for system-dependent variables and create Makefiles.\n@%:@ Generated by GNU Autoconf 2.65 for GNU make 3.81.\n@%:@\n@%:@ Report bugs to <bug-make@gnu.org>.\n@%:@ \n@%:@ \n@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,\n@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,\n@%:@ Inc.\n@%:@ \n@%:@ \n@%:@ This configure script is free software; the Free Software Foundation\n@%:@ gives unlimited permission to copy, distribute and modify it.\n## -------------------- ##\n## M4sh Initialization. ##\n## -------------------- ##\n\n# Be more Bourne compatible\nDUALCASE=1; export DUALCASE # for MKS sh\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in @%:@(\n  *posix*) :\n    set -o posix ;; @%:@(\n  *) :\n     ;;\nesac\nfi\n\n\nas_nl='\n'\nexport as_nl\n# Printing a long string crashes Solaris 7 /usr/bin/printf.\nas_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo\n# Prefer a ksh shell builtin over an external printf program on Solaris,\n# but without wasting forks for bash or zsh.\nif test -z \"$BASH_VERSION$ZSH_VERSION\" \\\n    && (test \"X`print -r -- $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='print -r --'\n  as_echo_n='print -rn --'\nelif (test \"X`printf %s $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='printf %s\\n'\n  as_echo_n='printf %s'\nelse\n  if test \"X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`\" = \"X-n $as_echo\"; then\n    as_echo_body='eval /usr/ucb/echo -n \"$1$as_nl\"'\n    as_echo_n='/usr/ucb/echo -n'\n  else\n    as_echo_body='eval expr \"X$1\" : \"X\\\\(.*\\\\)\"'\n    as_echo_n_body='eval\n      arg=$1;\n      case $arg in @%:@(\n      *\"$as_nl\"*)\n\texpr \"X$arg\" : \"X\\\\(.*\\\\)$as_nl\";\n\targ=`expr \"X$arg\" : \".*$as_nl\\\\(.*\\\\)\"`;;\n      esac;\n      expr \"X$arg\" : \"X\\\\(.*\\\\)\" | tr -d \"$as_nl\"\n    '\n    export as_echo_n_body\n    as_echo_n='sh -c $as_echo_n_body as_echo'\n  fi\n  export as_echo_body\n  as_echo='sh -c $as_echo_body as_echo'\nfi\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  PATH_SEPARATOR=:\n  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {\n    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||\n      PATH_SEPARATOR=';'\n  }\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in @%:@((\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\n  done\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  $as_echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  exit 1\nfi\n\n# Unset variables that we do not need and which cause bugs (e.g. in\n# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the \"|| exit 1\"\n# suppresses any \"Segmentation fault\" message there.  '((' could\n# trigger a bug in pdksh 5.2.14.\nfor as_var in BASH_ENV ENV MAIL MAILPATH\ndo eval test x\\${$as_var+set} = xset \\\n  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nLC_ALL=C\nexport LC_ALL\nLANGUAGE=C\nexport LANGUAGE\n\n# CDPATH.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test \"x$CONFIG_SHELL\" = x; then\n  as_bourne_compatible=\"if test -n \\\"\\${ZSH_VERSION+set}\\\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on \\${1+\\\"\\$@\\\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '\\${1+\\\"\\$@\\\"}'='\\\"\\$@\\\"'\n  setopt NO_GLOB_SUBST\nelse\n  case \\`(set -o) 2>/dev/null\\` in @%:@(\n  *posix*) :\n    set -o posix ;; @%:@(\n  *) :\n     ;;\nesac\nfi\n\"\n  as_required=\"as_fn_return () { (exit \\$1); }\nas_fn_success () { as_fn_return 0; }\nas_fn_failure () { as_fn_return 1; }\nas_fn_ret_success () { return 0; }\nas_fn_ret_failure () { return 1; }\n\nexitcode=0\nas_fn_success || { exitcode=1; echo as_fn_success failed.; }\nas_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }\nas_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }\nas_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }\nif ( set x; as_fn_ret_success y && test x = \\\"\\$1\\\" ); then :\n  \nelse\n  exitcode=1; echo positional parameters were not saved.\nfi\ntest x\\$exitcode = x0 || exit 1\"\n  as_suggested=\"  as_lineno_1=\";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested\" as_lineno_1a=\\$LINENO\n  as_lineno_2=\";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested\" as_lineno_2a=\\$LINENO\n  eval 'test \\\"x\\$as_lineno_1'\\$as_run'\\\" != \\\"x\\$as_lineno_2'\\$as_run'\\\" &&\n  test \\\"x\\`expr \\$as_lineno_1'\\$as_run' + 1\\`\\\" = \\\"x\\$as_lineno_2'\\$as_run'\\\"' || exit 1\ntest \\$(( 1 + 1 )) = 2 || exit 1\"\n  if (eval \"$as_required\") 2>/dev/null; then :\n  as_have_required=yes\nelse\n  as_have_required=no\nfi\n  if test x$as_have_required = xyes && (eval \"$as_suggested\") 2>/dev/null; then :\n  \nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nas_found=false\nfor as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  as_found=:\n  case $as_dir in @%:@(\n\t /*)\n\t   for as_base in sh bash ksh sh5; do\n\t     # Try only shells that exist, to save several forks.\n\t     as_shell=$as_dir/$as_base\n\t     if { test -f \"$as_shell\" || test -f \"$as_shell.exe\"; } &&\n\t\t    { $as_echo \"$as_bourne_compatible\"\"$as_required\" | as_run=a \"$as_shell\"; } 2>/dev/null; then :\n  CONFIG_SHELL=$as_shell as_have_required=yes\n\t\t   if { $as_echo \"$as_bourne_compatible\"\"$as_suggested\" | as_run=a \"$as_shell\"; } 2>/dev/null; then :\n  break 2\nfi\nfi\n\t   done;;\n       esac\n  as_found=false\ndone\n$as_found || { if { test -f \"$SHELL\" || test -f \"$SHELL.exe\"; } &&\n\t      { $as_echo \"$as_bourne_compatible\"\"$as_required\" | as_run=a \"$SHELL\"; } 2>/dev/null; then :\n  CONFIG_SHELL=$SHELL as_have_required=yes\nfi; }\nIFS=$as_save_IFS\n\n\n      if test \"x$CONFIG_SHELL\" != x; then :\n  # We cannot yet assume a decent shell, so we have to provide a\n\t# neutralization value for shells without unset; and this also\n\t# works around shells that cannot unset nonexistent variables.\n\tBASH_ENV=/dev/null\n\tENV=/dev/null\n\t(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\n\texport CONFIG_SHELL\n\texec \"$CONFIG_SHELL\" \"$as_myself\" ${1+\"$@\"}\nfi\n\n    if test x$as_have_required = xno; then :\n  $as_echo \"$0: This script requires a shell more modern than all\"\n  $as_echo \"$0: the shells that I found on your system.\"\n  if test x${ZSH_VERSION+set} = xset ; then\n    $as_echo \"$0: In particular, zsh $ZSH_VERSION has bugs and should\"\n    $as_echo \"$0: be upgraded to zsh 4.3.4 or later.\"\n  else\n    $as_echo \"$0: Please tell bug-autoconf@gnu.org and bug-make@gnu.org\n$0: about your system, including any error possibly output\n$0: before this message. Then install a modern shell, or\n$0: manually run the script under such a shell if you do\n$0: have one.\"\n  fi\n  exit 1\nfi\nfi\nfi\nSHELL=${CONFIG_SHELL-/bin/sh}\nexport SHELL\n# Unset more variables known to interfere with behavior of common tools.\nCLICOLOR_FORCE= GREP_OPTIONS=\nunset CLICOLOR_FORCE GREP_OPTIONS\n\n## --------------------- ##\n## M4sh Shell Functions. ##\n## --------------------- ##\n@%:@ as_fn_unset VAR\n@%:@ ---------------\n@%:@ Portably unset VAR.\nas_fn_unset ()\n{\n  { eval $1=; unset $1;}\n}\nas_unset=as_fn_unset\n\n@%:@ as_fn_set_status STATUS\n@%:@ -----------------------\n@%:@ Set @S|@? to STATUS, without forking.\nas_fn_set_status ()\n{\n  return $1\n} @%:@ as_fn_set_status\n\n@%:@ as_fn_exit STATUS\n@%:@ -----------------\n@%:@ Exit the shell with STATUS, even in a \"trap 0\" or \"set -e\" context.\nas_fn_exit ()\n{\n  set +e\n  as_fn_set_status $1\n  exit $1\n} @%:@ as_fn_exit\n\n@%:@ as_fn_mkdir_p\n@%:@ -------------\n@%:@ Create \"@S|@as_dir\" as a directory, including parents if necessary.\nas_fn_mkdir_p ()\n{\n\n  case $as_dir in #(\n  -*) as_dir=./$as_dir;;\n  esac\n  test -d \"$as_dir\" || eval $as_mkdir_p || {\n    as_dirs=\n    while :; do\n      case $as_dir in #(\n      *\\'*) as_qdir=`$as_echo \"$as_dir\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; #'(\n      *) as_qdir=$as_dir;;\n      esac\n      as_dirs=\"'$as_qdir' $as_dirs\"\n      as_dir=`$as_dirname -- \"$as_dir\" ||\n$as_expr X\"$as_dir\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_dir\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_dir\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n      test -d \"$as_dir\" && break\n    done\n    test -z \"$as_dirs\" || eval \"mkdir $as_dirs\"\n  } || test -d \"$as_dir\" || as_fn_error \"cannot create directory $as_dir\"\n\n\n} @%:@ as_fn_mkdir_p\n@%:@ as_fn_append VAR VALUE\n@%:@ ----------------------\n@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take\n@%:@ advantage of any shell optimizations that allow amortized linear growth over\n@%:@ repeated appends, instead of the typical quadratic growth present in naive\n@%:@ implementations.\nif (eval \"as_var=1; as_var+=2; test x\\$as_var = x12\") 2>/dev/null; then :\n  eval 'as_fn_append ()\n  {\n    eval $1+=\\$2\n  }'\nelse\n  as_fn_append ()\n  {\n    eval $1=\\$$1\\$2\n  }\nfi # as_fn_append\n\n@%:@ as_fn_arith ARG...\n@%:@ ------------------\n@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the\n@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments\n@%:@ must be portable across @S|@(()) and expr.\nif (eval \"test \\$(( 1 + 1 )) = 2\") 2>/dev/null; then :\n  eval 'as_fn_arith ()\n  {\n    as_val=$(( $* ))\n  }'\nelse\n  as_fn_arith ()\n  {\n    as_val=`expr \"$@\" || test $? -eq 1`\n  }\nfi # as_fn_arith\n\n\n@%:@ as_fn_error ERROR [LINENO LOG_FD]\n@%:@ ---------------------------------\n@%:@ Output \"`basename @S|@0`: error: ERROR\" to stderr. If LINENO and LOG_FD are\n@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the\n@%:@ script with status @S|@?, using 1 if that was 0.\nas_fn_error ()\n{\n  as_status=$?; test $as_status -eq 0 && as_status=1\n  if test \"$3\"; then\n    as_lineno=${as_lineno-\"$2\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $1\" >&$3\n  fi\n  $as_echo \"$as_me: error: $1\" >&2\n  as_fn_exit $as_status\n} @%:@ as_fn_error\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\nif (as_dir=`dirname -- /` && test \"X$as_dir\" = X/) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\n\n  as_lineno_1=$LINENO as_lineno_1a=$LINENO\n  as_lineno_2=$LINENO as_lineno_2a=$LINENO\n  eval 'test \"x$as_lineno_1'$as_run'\" != \"x$as_lineno_2'$as_run'\" &&\n  test \"x`expr $as_lineno_1'$as_run' + 1`\" = \"x$as_lineno_2'$as_run'\"' || {\n  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)\n  sed -n '\n    p\n    /[$]LINENO/=\n  ' <$as_myself |\n    sed '\n      s/[$]LINENO.*/&-/\n      t lineno\n      b\n      :lineno\n      N\n      :loop\n      s/[$]LINENO\\([^'$as_cr_alnum'_].*\\n\\)\\(.*\\)/\\2\\1\\2/\n      t loop\n      s/-\\n.*//\n    ' >$as_me.lineno &&\n  chmod +x \"$as_me.lineno\" ||\n    { $as_echo \"$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell\" >&2; as_fn_exit 1; }\n\n  # Don't try to exec as it changes $[0], causing all sort of problems\n  # (the dirname of $[0] is not the place where we might find the\n  # original and so on.  Autoconf is especially sensitive to this).\n  . \"./$as_me.lineno\"\n  # Exit status is that of the last command.\n  exit\n}\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in @%:@(((((\n-n*)\n  case `echo 'xy\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  xy)  ECHO_C='\\c';;\n  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null\n       ECHO_T='\t';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir 2>/dev/null\nfi\nif (echo >conf$$.file) 2>/dev/null; then\n  if ln -s conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s='ln -s'\n    # ... but there are two gotchas:\n    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n    # In both cases, we have to default to `cp -p'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -p'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -p'\n  fi\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p='mkdir -p \"$as_dir\"'\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\nif test -x / >/dev/null 2>&1; then\n  as_test_x='test -x'\nelse\n  if ls -dL / >/dev/null 2>&1; then\n    as_ls_L_option=L\n  else\n    as_ls_L_option=\n  fi\n  as_test_x='\n    eval sh -c '\\''\n      if test -d \"$1\"; then\n\ttest -d \"$1/.\";\n      else\n\tcase $1 in @%:@(\n\t-*)set \"./$1\";;\n\tesac;\n\tcase `ls -ld'$as_ls_L_option' \"$1\" 2>/dev/null` in @%:@((\n\t???[sx]*):;;*)false;;esac;fi\n    '\\'' sh\n  '\nfi\nas_executable_p=$as_test_x\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\ntest -n \"$DJDIR\" || exec 7<&0 </dev/null\nexec 6>&1\n\n# Name of the host.\n# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,\n# so uname gets run too.\nac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`\n\n#\n# Initializations.\n#\nac_default_prefix=/usr/local\nac_clean_files=\nac_config_libobj_dir=.\nLIB@&t@OBJS=\ncross_compiling=no\nsubdirs=\nMFLAGS=\nMAKEFLAGS=\n\n# Identity of this package.\nPACKAGE_NAME='GNU make'\nPACKAGE_TARNAME='make'\nPACKAGE_VERSION='3.81'\nPACKAGE_STRING='GNU make 3.81'\nPACKAGE_BUGREPORT='bug-make@gnu.org'\nPACKAGE_URL='http://www.gnu.org/software/make/'\n\nac_unique_file=\"vpath.c\"\n# Factoring default headers for most tests.\nac_includes_default=\"\\\n#include <stdio.h>\n#ifdef HAVE_SYS_TYPES_H\n# include <sys/types.h>\n#endif\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef STDC_HEADERS\n# include <stdlib.h>\n# include <stddef.h>\n#else\n# ifdef HAVE_STDLIB_H\n#  include <stdlib.h>\n# endif\n#endif\n#ifdef HAVE_STRING_H\n# if !defined STDC_HEADERS && defined HAVE_MEMORY_H\n#  include <memory.h>\n# endif\n# include <string.h>\n#endif\n#ifdef HAVE_STRINGS_H\n# include <strings.h>\n#endif\n#ifdef HAVE_INTTYPES_H\n# include <inttypes.h>\n#endif\n#ifdef HAVE_STDINT_H\n# include <stdint.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\"\n\nac_subst_vars='LTLIBOBJS\nWINDOWSENV_FALSE\nWINDOWSENV_TRUE\nMAKE_HOST\nUSE_LOCAL_GLOB_FALSE\nUSE_LOCAL_GLOB_TRUE\nGLOBLIB\nGLOBINC\nUSE_CUSTOMS_FALSE\nUSE_CUSTOMS_TRUE\nREMOTE\nGETLOADAVG_LIBS\nKMEM_GROUP\nNEED_SETGID\nLIB@&t@OBJS\nALLOCA\nPOSUB\nLTLIBINTL\nLIBINTL\nINTLLIBS\nLTLIBICONV\nLIBICONV\nMSGMERGE\nXGETTEXT\nGMSGFMT\nMSGFMT\nUSE_NLS\nMKINSTALLDIRS\nANSI2KNR\nU\nEGREP\nGREP\nhost_os\nhost_vendor\nhost_cpu\nhost\nbuild_os\nbuild_vendor\nbuild_cpu\nbuild\nPERL\nAR\nCPP\nRANLIB\nam__fastdepCC_FALSE\nam__fastdepCC_TRUE\nCCDEPMODE\nAMDEPBACKSLASH\nAMDEP_FALSE\nAMDEP_TRUE\nam__quote\nam__include\nDEPDIR\nOBJEXT\nEXEEXT\nac_ct_CC\nCPPFLAGS\nLDFLAGS\nCFLAGS\nCC\nam__untar\nam__tar\nAMTAR\nam__leading_dot\nSET_MAKE\nAWK\nmkdir_p\nINSTALL_STRIP_PROGRAM\nSTRIP\ninstall_sh\nMAKEINFO\nAUTOHEADER\nAUTOMAKE\nAUTOCONF\nACLOCAL\nVERSION\nPACKAGE\nCYGPATH_W\nINSTALL_DATA\nINSTALL_SCRIPT\nINSTALL_PROGRAM\ntarget_alias\nhost_alias\nbuild_alias\nLIBS\nECHO_T\nECHO_N\nECHO_C\nDEFS\nmandir\nlocaledir\nlibdir\npsdir\npdfdir\ndvidir\nhtmldir\ninfodir\ndocdir\noldincludedir\nincludedir\nlocalstatedir\nsharedstatedir\nsysconfdir\ndatadir\ndatarootdir\nlibexecdir\nsbindir\nbindir\nprogram_transform_name\nprefix\nexec_prefix\nPACKAGE_URL\nPACKAGE_BUGREPORT\nPACKAGE_STRING\nPACKAGE_VERSION\nPACKAGE_TARNAME\nPACKAGE_NAME\nPATH_SEPARATOR\nSHELL'\nac_subst_files='MAINT_MAKEFILE'\nac_user_opts='\nenable_option_checking\nenable_dependency_tracking\nenable_nls\nwith_gnu_ld\nenable_rpath\nwith_libiconv_prefix\nwith_libintl_prefix\nenable_largefile\nwith_customs\nenable_case_insensitive_file_system\nenable_job_server\nwith_dmalloc\n'\n      ac_precious_vars='build_alias\nhost_alias\ntarget_alias\nCC\nCFLAGS\nLDFLAGS\nLIBS\nCPPFLAGS\nCPP'\n\n\n# Initialize some variables set by options.\nac_init_help=\nac_init_version=false\nac_unrecognized_opts=\nac_unrecognized_sep=\n# The variables have the same names as the options, with\n# dashes changed to underlines.\ncache_file=/dev/null\nexec_prefix=NONE\nno_create=\nno_recursion=\nprefix=NONE\nprogram_prefix=NONE\nprogram_suffix=NONE\nprogram_transform_name=s,x,x,\nsilent=\nsite=\nsrcdir=\nverbose=\nx_includes=NONE\nx_libraries=NONE\n\n# Installation directory options.\n# These are left unexpanded so users can \"make install exec_prefix=/foo\"\n# and all the variables that are supposed to be based on exec_prefix\n# by default will actually change.\n# Use braces instead of parens because sh, perl, etc. also accept them.\n# (The list follows the same order as the GNU Coding Standards.)\nbindir='${exec_prefix}/bin'\nsbindir='${exec_prefix}/sbin'\nlibexecdir='${exec_prefix}/libexec'\ndatarootdir='${prefix}/share'\ndatadir='${datarootdir}'\nsysconfdir='${prefix}/etc'\nsharedstatedir='${prefix}/com'\nlocalstatedir='${prefix}/var'\nincludedir='${prefix}/include'\noldincludedir='/usr/include'\ndocdir='${datarootdir}/doc/${PACKAGE_TARNAME}'\ninfodir='${datarootdir}/info'\nhtmldir='${docdir}'\ndvidir='${docdir}'\npdfdir='${docdir}'\npsdir='${docdir}'\nlibdir='${exec_prefix}/lib'\nlocaledir='${datarootdir}/locale'\nmandir='${datarootdir}/man'\n\nac_prev=\nac_dashdash=\nfor ac_option\ndo\n  # If the previous option needs an argument, assign it.\n  if test -n \"$ac_prev\"; then\n    eval $ac_prev=\\$ac_option\n    ac_prev=\n    continue\n  fi\n\n  case $ac_option in\n  *=*)\tac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *)\tac_optarg=yes ;;\n  esac\n\n  # Accept the important Cygnus configure options, so we can diagnose typos.\n\n  case $ac_dashdash$ac_option in\n  --)\n    ac_dashdash=yes ;;\n\n  -bindir | --bindir | --bindi | --bind | --bin | --bi)\n    ac_prev=bindir ;;\n  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)\n    bindir=$ac_optarg ;;\n\n  -build | --build | --buil | --bui | --bu)\n    ac_prev=build_alias ;;\n  -build=* | --build=* | --buil=* | --bui=* | --bu=*)\n    build_alias=$ac_optarg ;;\n\n  -cache-file | --cache-file | --cache-fil | --cache-fi \\\n  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)\n    ac_prev=cache_file ;;\n  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \\\n  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)\n    cache_file=$ac_optarg ;;\n\n  --config-cache | -C)\n    cache_file=config.cache ;;\n\n  -datadir | --datadir | --datadi | --datad)\n    ac_prev=datadir ;;\n  -datadir=* | --datadir=* | --datadi=* | --datad=*)\n    datadir=$ac_optarg ;;\n\n  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \\\n  | --dataroo | --dataro | --datar)\n    ac_prev=datarootdir ;;\n  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \\\n  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)\n    datarootdir=$ac_optarg ;;\n\n  -disable-* | --disable-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*disable-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid feature name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"enable_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval enable_$ac_useropt=no ;;\n\n  -docdir | --docdir | --docdi | --doc | --do)\n    ac_prev=docdir ;;\n  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)\n    docdir=$ac_optarg ;;\n\n  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)\n    ac_prev=dvidir ;;\n  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)\n    dvidir=$ac_optarg ;;\n\n  -enable-* | --enable-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*enable-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid feature name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"enable_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval enable_$ac_useropt=\\$ac_optarg ;;\n\n  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \\\n  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \\\n  | --exec | --exe | --ex)\n    ac_prev=exec_prefix ;;\n  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \\\n  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \\\n  | --exec=* | --exe=* | --ex=*)\n    exec_prefix=$ac_optarg ;;\n\n  -gas | --gas | --ga | --g)\n    # Obsolete; use --with-gas.\n    with_gas=yes ;;\n\n  -help | --help | --hel | --he | -h)\n    ac_init_help=long ;;\n  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)\n    ac_init_help=recursive ;;\n  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)\n    ac_init_help=short ;;\n\n  -host | --host | --hos | --ho)\n    ac_prev=host_alias ;;\n  -host=* | --host=* | --hos=* | --ho=*)\n    host_alias=$ac_optarg ;;\n\n  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)\n    ac_prev=htmldir ;;\n  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \\\n  | --ht=*)\n    htmldir=$ac_optarg ;;\n\n  -includedir | --includedir | --includedi | --included | --include \\\n  | --includ | --inclu | --incl | --inc)\n    ac_prev=includedir ;;\n  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \\\n  | --includ=* | --inclu=* | --incl=* | --inc=*)\n    includedir=$ac_optarg ;;\n\n  -infodir | --infodir | --infodi | --infod | --info | --inf)\n    ac_prev=infodir ;;\n  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)\n    infodir=$ac_optarg ;;\n\n  -libdir | --libdir | --libdi | --libd)\n    ac_prev=libdir ;;\n  -libdir=* | --libdir=* | --libdi=* | --libd=*)\n    libdir=$ac_optarg ;;\n\n  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \\\n  | --libexe | --libex | --libe)\n    ac_prev=libexecdir ;;\n  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \\\n  | --libexe=* | --libex=* | --libe=*)\n    libexecdir=$ac_optarg ;;\n\n  -localedir | --localedir | --localedi | --localed | --locale)\n    ac_prev=localedir ;;\n  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)\n    localedir=$ac_optarg ;;\n\n  -localstatedir | --localstatedir | --localstatedi | --localstated \\\n  | --localstate | --localstat | --localsta | --localst | --locals)\n    ac_prev=localstatedir ;;\n  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \\\n  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)\n    localstatedir=$ac_optarg ;;\n\n  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)\n    ac_prev=mandir ;;\n  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)\n    mandir=$ac_optarg ;;\n\n  -nfp | --nfp | --nf)\n    # Obsolete; use --without-fp.\n    with_fp=no ;;\n\n  -no-create | --no-create | --no-creat | --no-crea | --no-cre \\\n  | --no-cr | --no-c | -n)\n    no_create=yes ;;\n\n  -no-recursion | --no-recursion | --no-recursio | --no-recursi \\\n  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)\n    no_recursion=yes ;;\n\n  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \\\n  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \\\n  | --oldin | --oldi | --old | --ol | --o)\n    ac_prev=oldincludedir ;;\n  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \\\n  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \\\n  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)\n    oldincludedir=$ac_optarg ;;\n\n  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)\n    ac_prev=prefix ;;\n  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)\n    prefix=$ac_optarg ;;\n\n  -program-prefix | --program-prefix | --program-prefi | --program-pref \\\n  | --program-pre | --program-pr | --program-p)\n    ac_prev=program_prefix ;;\n  -program-prefix=* | --program-prefix=* | --program-prefi=* \\\n  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)\n    program_prefix=$ac_optarg ;;\n\n  -program-suffix | --program-suffix | --program-suffi | --program-suff \\\n  | --program-suf | --program-su | --program-s)\n    ac_prev=program_suffix ;;\n  -program-suffix=* | --program-suffix=* | --program-suffi=* \\\n  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)\n    program_suffix=$ac_optarg ;;\n\n  -program-transform-name | --program-transform-name \\\n  | --program-transform-nam | --program-transform-na \\\n  | --program-transform-n | --program-transform- \\\n  | --program-transform | --program-transfor \\\n  | --program-transfo | --program-transf \\\n  | --program-trans | --program-tran \\\n  | --progr-tra | --program-tr | --program-t)\n    ac_prev=program_transform_name ;;\n  -program-transform-name=* | --program-transform-name=* \\\n  | --program-transform-nam=* | --program-transform-na=* \\\n  | --program-transform-n=* | --program-transform-=* \\\n  | --program-transform=* | --program-transfor=* \\\n  | --program-transfo=* | --program-transf=* \\\n  | --program-trans=* | --program-tran=* \\\n  | --progr-tra=* | --program-tr=* | --program-t=*)\n    program_transform_name=$ac_optarg ;;\n\n  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)\n    ac_prev=pdfdir ;;\n  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)\n    pdfdir=$ac_optarg ;;\n\n  -psdir | --psdir | --psdi | --psd | --ps)\n    ac_prev=psdir ;;\n  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)\n    psdir=$ac_optarg ;;\n\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil)\n    silent=yes ;;\n\n  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)\n    ac_prev=sbindir ;;\n  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \\\n  | --sbi=* | --sb=*)\n    sbindir=$ac_optarg ;;\n\n  -sharedstatedir | --sharedstatedir | --sharedstatedi \\\n  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \\\n  | --sharedst | --shareds | --shared | --share | --shar \\\n  | --sha | --sh)\n    ac_prev=sharedstatedir ;;\n  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \\\n  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \\\n  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \\\n  | --sha=* | --sh=*)\n    sharedstatedir=$ac_optarg ;;\n\n  -site | --site | --sit)\n    ac_prev=site ;;\n  -site=* | --site=* | --sit=*)\n    site=$ac_optarg ;;\n\n  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)\n    ac_prev=srcdir ;;\n  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)\n    srcdir=$ac_optarg ;;\n\n  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \\\n  | --syscon | --sysco | --sysc | --sys | --sy)\n    ac_prev=sysconfdir ;;\n  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \\\n  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)\n    sysconfdir=$ac_optarg ;;\n\n  -target | --target | --targe | --targ | --tar | --ta | --t)\n    ac_prev=target_alias ;;\n  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)\n    target_alias=$ac_optarg ;;\n\n  -v | -verbose | --verbose | --verbos | --verbo | --verb)\n    verbose=yes ;;\n\n  -version | --version | --versio | --versi | --vers | -V)\n    ac_init_version=: ;;\n\n  -with-* | --with-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*with-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid package name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"with_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval with_$ac_useropt=\\$ac_optarg ;;\n\n  -without-* | --without-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*without-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid package name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"with_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval with_$ac_useropt=no ;;\n\n  --x)\n    # Obsolete; use --with-x.\n    with_x=yes ;;\n\n  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \\\n  | --x-incl | --x-inc | --x-in | --x-i)\n    ac_prev=x_includes ;;\n  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \\\n  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)\n    x_includes=$ac_optarg ;;\n\n  -x-libraries | --x-libraries | --x-librarie | --x-librari \\\n  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)\n    ac_prev=x_libraries ;;\n  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \\\n  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)\n    x_libraries=$ac_optarg ;;\n\n  -*) as_fn_error \"unrecognized option: \\`$ac_option'\nTry \\`$0 --help' for more information.\"\n    ;;\n\n  *=*)\n    ac_envvar=`expr \"x$ac_option\" : 'x\\([^=]*\\)='`\n    # Reject names that are not valid shell variable names.\n    case $ac_envvar in #(\n      '' | [0-9]* | *[!_$as_cr_alnum]* )\n      as_fn_error \"invalid variable name: \\`$ac_envvar'\" ;;\n    esac\n    eval $ac_envvar=\\$ac_optarg\n    export $ac_envvar ;;\n\n  *)\n    # FIXME: should be removed in autoconf 3.0.\n    $as_echo \"$as_me: WARNING: you should use --build, --host, --target\" >&2\n    expr \"x$ac_option\" : \".*[^-._$as_cr_alnum]\" >/dev/null &&\n      $as_echo \"$as_me: WARNING: invalid host type: $ac_option\" >&2\n    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}\n    ;;\n\n  esac\ndone\n\nif test -n \"$ac_prev\"; then\n  ac_option=--`echo $ac_prev | sed 's/_/-/g'`\n  as_fn_error \"missing argument to $ac_option\"\nfi\n\nif test -n \"$ac_unrecognized_opts\"; then\n  case $enable_option_checking in\n    no) ;;\n    fatal) as_fn_error \"unrecognized options: $ac_unrecognized_opts\" ;;\n    *)     $as_echo \"$as_me: WARNING: unrecognized options: $ac_unrecognized_opts\" >&2 ;;\n  esac\nfi\n\n# Check all directory arguments for consistency.\nfor ac_var in\texec_prefix prefix bindir sbindir libexecdir datarootdir \\\n\t\tdatadir sysconfdir sharedstatedir localstatedir includedir \\\n\t\toldincludedir docdir infodir htmldir dvidir pdfdir psdir \\\n\t\tlibdir localedir mandir\ndo\n  eval ac_val=\\$$ac_var\n  # Remove trailing slashes.\n  case $ac_val in\n    */ )\n      ac_val=`expr \"X$ac_val\" : 'X\\(.*[^/]\\)' \\| \"X$ac_val\" : 'X\\(.*\\)'`\n      eval $ac_var=\\$ac_val;;\n  esac\n  # Be sure to have absolute directory names.\n  case $ac_val in\n    [\\\\/$]* | ?:[\\\\/]* )  continue;;\n    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;\n  esac\n  as_fn_error \"expected an absolute directory name for --$ac_var: $ac_val\"\ndone\n\n# There might be people who depend on the old broken behavior: `$host'\n# used to hold the argument of --host etc.\n# FIXME: To remove some day.\nbuild=$build_alias\nhost=$host_alias\ntarget=$target_alias\n\n# FIXME: To remove some day.\nif test \"x$host_alias\" != x; then\n  if test \"x$build_alias\" = x; then\n    cross_compiling=maybe\n    $as_echo \"$as_me: WARNING: If you wanted to set the --build type, don't use --host.\n    If a cross compiler is detected then cross compile mode will be used.\" >&2\n  elif test \"x$build_alias\" != \"x$host_alias\"; then\n    cross_compiling=yes\n  fi\nfi\n\nac_tool_prefix=\ntest -n \"$host_alias\" && ac_tool_prefix=$host_alias-\n\ntest \"$silent\" = yes && exec 6>/dev/null\n\n\nac_pwd=`pwd` && test -n \"$ac_pwd\" &&\nac_ls_di=`ls -di .` &&\nac_pwd_ls_di=`cd \"$ac_pwd\" && ls -di .` ||\n  as_fn_error \"working directory cannot be determined\"\ntest \"X$ac_ls_di\" = \"X$ac_pwd_ls_di\" ||\n  as_fn_error \"pwd does not report name of working directory\"\n\n\n# Find the source files, if location was not specified.\nif test -z \"$srcdir\"; then\n  ac_srcdir_defaulted=yes\n  # Try the directory containing this script, then the parent directory.\n  ac_confdir=`$as_dirname -- \"$as_myself\" ||\n$as_expr X\"$as_myself\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_myself\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_myself\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_myself\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_myself\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  srcdir=$ac_confdir\n  if test ! -r \"$srcdir/$ac_unique_file\"; then\n    srcdir=..\n  fi\nelse\n  ac_srcdir_defaulted=no\nfi\nif test ! -r \"$srcdir/$ac_unique_file\"; then\n  test \"$ac_srcdir_defaulted\" = yes && srcdir=\"$ac_confdir or ..\"\n  as_fn_error \"cannot find sources ($ac_unique_file) in $srcdir\"\nfi\nac_msg=\"sources are in $srcdir, but \\`cd $srcdir' does not work\"\nac_abs_confdir=`(\n\tcd \"$srcdir\" && test -r \"./$ac_unique_file\" || as_fn_error \"$ac_msg\"\n\tpwd)`\n# When building in place, set srcdir=.\nif test \"$ac_abs_confdir\" = \"$ac_pwd\"; then\n  srcdir=.\nfi\n# Remove unnecessary trailing slashes from srcdir.\n# Double slashes in file names in object file debugging info\n# mess up M-x gdb in Emacs.\ncase $srcdir in\n*/) srcdir=`expr \"X$srcdir\" : 'X\\(.*[^/]\\)' \\| \"X$srcdir\" : 'X\\(.*\\)'`;;\nesac\nfor ac_var in $ac_precious_vars; do\n  eval ac_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_env_${ac_var}_value=\\$${ac_var}\n  eval ac_cv_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_cv_env_${ac_var}_value=\\$${ac_var}\ndone\n\n#\n# Report the --help message.\n#\nif test \"$ac_init_help\" = \"long\"; then\n  # Omit some internal or obsolete options to make the list less imposing.\n  # This message is too long to be a string in the A/UX 3.1 sh.\n  cat <<_ACEOF\n\\`configure' configures GNU make 3.81 to adapt to many kinds of systems.\n\nUsage: $0 [OPTION]... [VAR=VALUE]...\n\nTo assign environment variables (e.g., CC, CFLAGS...), specify them as\nVAR=VALUE.  See below for descriptions of some of the useful variables.\n\nDefaults for the options are specified in brackets.\n\nConfiguration:\n  -h, --help              display this help and exit\n      --help=short        display options specific to this package\n      --help=recursive    display the short help of all the included packages\n  -V, --version           display version information and exit\n  -q, --quiet, --silent   do not print \\`checking...' messages\n      --cache-file=FILE   cache test results in FILE [disabled]\n  -C, --config-cache      alias for \\`--cache-file=config.cache'\n  -n, --no-create         do not create output files\n      --srcdir=DIR        find the sources in DIR [configure dir or \\`..']\n\nInstallation directories:\n  --prefix=PREFIX         install architecture-independent files in PREFIX\n                          @<:@@S|@ac_default_prefix@:>@\n  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX\n                          @<:@PREFIX@:>@\n\nBy default, \\`make install' will install all the files in\n\\`$ac_default_prefix/bin', \\`$ac_default_prefix/lib' etc.  You can specify\nan installation prefix other than \\`$ac_default_prefix' using \\`--prefix',\nfor instance \\`--prefix=\\$HOME'.\n\nFor better control, use the options below.\n\nFine tuning of the installation directories:\n  --bindir=DIR            user executables [EPREFIX/bin]\n  --sbindir=DIR           system admin executables [EPREFIX/sbin]\n  --libexecdir=DIR        program executables [EPREFIX/libexec]\n  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]\n  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]\n  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]\n  --libdir=DIR            object code libraries [EPREFIX/lib]\n  --includedir=DIR        C header files [PREFIX/include]\n  --oldincludedir=DIR     C header files for non-gcc [/usr/include]\n  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]\n  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]\n  --infodir=DIR           info documentation [DATAROOTDIR/info]\n  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]\n  --mandir=DIR            man documentation [DATAROOTDIR/man]\n  --docdir=DIR            documentation root @<:@DATAROOTDIR/doc/make@:>@\n  --htmldir=DIR           html documentation [DOCDIR]\n  --dvidir=DIR            dvi documentation [DOCDIR]\n  --pdfdir=DIR            pdf documentation [DOCDIR]\n  --psdir=DIR             ps documentation [DOCDIR]\n_ACEOF\n\n  cat <<\\_ACEOF\n\nProgram names:\n  --program-prefix=PREFIX            prepend PREFIX to installed program names\n  --program-suffix=SUFFIX            append SUFFIX to installed program names\n  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names\n\nSystem types:\n  --build=BUILD     configure for building on BUILD [guessed]\n  --host=HOST       cross-compile to build programs to run on HOST [BUILD]\n_ACEOF\nfi\n\nif test -n \"$ac_init_help\"; then\n  case $ac_init_help in\n     short | recursive ) echo \"Configuration of GNU make 3.81:\";;\n   esac\n  cat <<\\_ACEOF\n\nOptional Features:\n  --disable-option-checking  ignore unrecognized --enable/--with options\n  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)\n  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]\n  --disable-dependency-tracking  speeds up one-time build\n  --enable-dependency-tracking   do not reject slow dependency extractors\n  --disable-nls           do not use Native Language Support\n  --disable-rpath         do not hardcode runtime library paths\n  --disable-largefile     omit support for large files\n  --enable-case-insensitive-file-system \n                          enable case insensitive file system support\n  --disable-job-server    disallow recursive make communication during -jN\n\nOptional Packages:\n  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]\n  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)\n  --with-gnu-ld           assume the C compiler uses GNU ld default=no\n  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib\n  --without-libiconv-prefix     don't search for libiconv in includedir and libdir\n  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib\n  --without-libintl-prefix     don't search for libintl in includedir and libdir\n  --with-customs=DIR      enable remote jobs via Customs--see README.customs\n  --with-dmalloc          use dmalloc, as in\n\t\t\t  http://www.dmalloc.com/dmalloc.tar.gz\n\nSome influential environment variables:\n  CC          C compiler command\n  CFLAGS      C compiler flags\n  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a\n              nonstandard directory <lib dir>\n  LIBS        libraries to pass to the linker, e.g. -l<library>\n  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if\n              you have headers in a nonstandard directory <include dir>\n  CPP         C preprocessor\n\nUse these variables to override the choices made by `configure' or to help\nit to find libraries and programs with nonstandard names/locations.\n\nReport bugs to <bug-make@gnu.org>.\nGNU make home page: <http://www.gnu.org/software/make/>.\nGeneral help using GNU software: <http://www.gnu.org/gethelp/>.\n_ACEOF\nac_status=$?\nfi\n\nif test \"$ac_init_help\" = \"recursive\"; then\n  # If there are subdirs, report their specific --help.\n  for ac_dir in : $ac_subdirs_all; do test \"x$ac_dir\" = x: && continue\n    test -d \"$ac_dir\" ||\n      { cd \"$srcdir\" && ac_pwd=`pwd` && srcdir=. && test -d \"$ac_dir\"; } ||\n      continue\n    ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`$as_echo \"$ac_dir\" | sed 's|^\\.[\\\\/]||'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`$as_echo \"$ac_dir_suffix\" | sed 's|/[^\\\\/]*|/..|g;s|/||'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n    cd \"$ac_dir\" || { ac_status=$?; continue; }\n    # Check for guested configure.\n    if test -f \"$ac_srcdir/configure.gnu\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure.gnu\" --help=recursive\n    elif test -f \"$ac_srcdir/configure\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure\" --help=recursive\n    else\n      $as_echo \"$as_me: WARNING: no configuration information is in $ac_dir\" >&2\n    fi || ac_status=$?\n    cd \"$ac_pwd\" || { ac_status=$?; break; }\n  done\nfi\n\ntest -n \"$ac_init_help\" && exit $ac_status\nif $ac_init_version; then\n  cat <<\\_ACEOF\nGNU make configure 3.81\ngenerated by GNU Autoconf 2.65\n\nCopyright (C) 2009 Free Software Foundation, Inc.\nThis configure script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\n_ACEOF\n  exit\nfi\n\n## ------------------------ ##\n## Autoconf initialization. ##\n## ------------------------ ##\n\n@%:@ ac_fn_c_try_compile LINENO\n@%:@ --------------------------\n@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded.\nac_fn_c_try_compile ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  rm -f conftest.$ac_objext\n  if { { ac_try=\"$ac_compile\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compile\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && {\n\t test -z \"$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       } && test -s conftest.$ac_objext; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_retval=1\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} @%:@ ac_fn_c_try_compile\n\n@%:@ ac_fn_c_try_cpp LINENO\n@%:@ ----------------------\n@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded.\nac_fn_c_try_cpp ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { { ac_try=\"$ac_cpp conftest.$ac_ext\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_cpp conftest.$ac_ext\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } >/dev/null && {\n\t test -z \"$ac_c_preproc_warn_flag$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n    ac_retval=1\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} @%:@ ac_fn_c_try_cpp\n\n@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES\n@%:@ -------------------------------------------------------\n@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using\n@%:@ the include files in INCLUDES and setting the cache variable VAR\n@%:@ accordingly.\nac_fn_c_check_header_mongrel ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nelse\n  # Is the header compilable?\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking $2 usability\" >&5\n$as_echo_n \"checking $2 usability... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\n@%:@include <$2>\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_header_compiler=yes\nelse\n  ac_header_compiler=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler\" >&5\n$as_echo \"$ac_header_compiler\" >&6; }\n\n# Is the header present?\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking $2 presence\" >&5\n$as_echo_n \"checking $2 presence... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <$2>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  ac_header_preproc=yes\nelse\n  ac_header_preproc=no\nfi\nrm -f conftest.err conftest.$ac_ext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc\" >&5\n$as_echo \"$ac_header_preproc\" >&6; }\n\n# So?  What about this header?\ncase $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((\n  yes:no: )\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!\" >&5\n$as_echo \"$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result\" >&5\n$as_echo \"$as_me: WARNING: $2: proceeding with the compiler's result\" >&2;}\n    ;;\n  no:yes:* )\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled\" >&5\n$as_echo \"$as_me: WARNING: $2: present but cannot be compiled\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?\" >&5\n$as_echo \"$as_me: WARNING: $2:     check for missing prerequisite headers?\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation\" >&5\n$as_echo \"$as_me: WARNING: $2: see the Autoconf documentation\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \\\"Present But Cannot Be Compiled\\\"\" >&5\n$as_echo \"$as_me: WARNING: $2:     section \\\"Present But Cannot Be Compiled\\\"\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result\" >&5\n$as_echo \"$as_me: WARNING: $2: proceeding with the compiler's result\" >&2;}\n( cat <<\\_ASBOX\n## ------------------------------- ##\n## Report this to bug-make@gnu.org ##\n## ------------------------------- ##\n_ASBOX\n     ) | sed \"s/^/$as_me: WARNING:     /\" >&2\n    ;;\nesac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  eval \"$3=\\$ac_header_compiler\"\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_header_mongrel\n\n@%:@ ac_fn_c_try_run LINENO\n@%:@ ----------------------\n@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes\n@%:@ that executables *can* be run.\nac_fn_c_try_run ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: program exited with status $ac_status\" >&5\n       $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n       ac_retval=$ac_status\nfi\n  rm -rf conftest.dSYM conftest_ipa8_conftest.oo\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} @%:@ ac_fn_c_try_run\n\n@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES\n@%:@ -------------------------------------------------------\n@%:@ Tests whether HEADER exists and can be compiled using the include files in\n@%:@ INCLUDES, setting the cache variable VAR accordingly.\nac_fn_c_check_header_compile ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\n@%:@include <$2>\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_header_compile\n\n@%:@ ac_fn_c_try_link LINENO\n@%:@ -----------------------\n@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded.\nac_fn_c_try_link ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  rm -f conftest.$ac_objext conftest$ac_exeext\n  if { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && {\n\t test -z \"$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       } && test -s conftest$ac_exeext && {\n\t test \"$cross_compiling\" = yes ||\n\t $as_test_x conftest$ac_exeext\n       }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_retval=1\nfi\n  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information\n  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would\n  # interfere with the next link command; also delete a directory that is\n  # left behind by Apple's compiler.  We do this before executing the actions.\n  rm -rf conftest.dSYM conftest_ipa8_conftest.oo\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} @%:@ ac_fn_c_try_link\n\n@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES\n@%:@ -------------------------------------------\n@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache\n@%:@ variable VAR accordingly.\nac_fn_c_check_type ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  eval \"$3=no\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\nif (sizeof ($2))\n\t return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\nif (sizeof (($2)))\n\t    return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  \nelse\n  eval \"$3=yes\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_type\n\n@%:@ ac_fn_c_check_func LINENO FUNC VAR\n@%:@ ----------------------------------\n@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly\nac_fn_c_check_func ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n/* Define $2 to an innocuous variant, in case <limits.h> declares $2.\n   For example, HP-UX 11i <limits.h> declares gettimeofday.  */\n#define $2 innocuous_$2\n\n/* System header to define __stub macros and hopefully few prototypes,\n    which can conflict with char $2 (); below.\n    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n    <limits.h> exists even on freestanding compilers.  */\n\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\n#undef $2\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar $2 ();\n/* The GNU C library defines this for functions which it implements\n    to always fail with ENOSYS.  Some functions are actually named\n    something starting with __ and the normal name is an alias.  */\n#if defined __stub_$2 || defined __stub___$2\nchoke me\n#endif\n\nint\nmain ()\n{\nreturn $2 ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_func\n\n@%:@ ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES\n@%:@ ----------------------------------------------------\n@%:@ Tries to find if the field MEMBER exists in type AGGR, after including\n@%:@ INCLUDES, setting cache variable VAR accordingly.\nac_fn_c_check_member ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2.$3\" >&5\n$as_echo_n \"checking for $2.$3... \" >&6; }\nif { as_var=$4; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$5\nint\nmain ()\n{\nstatic $2 ac_aggr;\nif (ac_aggr.$3)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$4=yes\"\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$5\nint\nmain ()\n{\nstatic $2 ac_aggr;\nif (sizeof ac_aggr.$3)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$4=yes\"\nelse\n  eval \"$4=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$4\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_member\n\n@%:@ ac_fn_c_check_decl LINENO SYMBOL VAR\n@%:@ ------------------------------------\n@%:@ Tests whether SYMBOL is declared, setting cache variable VAR accordingly.\nac_fn_c_check_decl ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $2 is declared\" >&5\n$as_echo_n \"checking whether $2 is declared... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\n@%:@ifndef $2\n  (void) $2;\n@%:@endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} @%:@ ac_fn_c_check_decl\ncat >config.log <<_ACEOF\nThis file contains any messages produced by compilers while\nrunning configure, to aid debugging if configure makes a mistake.\n\nIt was created by GNU make $as_me 3.81, which was\ngenerated by GNU Autoconf 2.65.  Invocation command line was\n\n  $ $0 $@\n\n_ACEOF\nexec 5>>config.log\n{\ncat <<_ASUNAME\n## --------- ##\n## Platform. ##\n## --------- ##\n\nhostname = `(hostname || uname -n) 2>/dev/null | sed 1q`\nuname -m = `(uname -m) 2>/dev/null || echo unknown`\nuname -r = `(uname -r) 2>/dev/null || echo unknown`\nuname -s = `(uname -s) 2>/dev/null || echo unknown`\nuname -v = `(uname -v) 2>/dev/null || echo unknown`\n\n/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`\n/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`\n\n/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`\n/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`\n/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`\n/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`\n/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`\n/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`\n/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`\n\n_ASUNAME\n\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    $as_echo \"PATH: $as_dir\"\n  done\nIFS=$as_save_IFS\n\n} >&5\n\ncat >&5 <<_ACEOF\n\n\n## ----------- ##\n## Core tests. ##\n## ----------- ##\n\n_ACEOF\n\n\n# Keep a trace of the command line.\n# Strip out --no-create and --no-recursion so they do not pile up.\n# Strip out --silent because we don't want to record it for future runs.\n# Also quote any args containing shell meta-characters.\n# Make two passes to allow for proper duplicate-argument suppression.\nac_configure_args=\nac_configure_args0=\nac_configure_args1=\nac_must_keep_next=false\nfor ac_pass in 1 2\ndo\n  for ac_arg\n  do\n    case $ac_arg in\n    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;\n    -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n    | -silent | --silent | --silen | --sile | --sil)\n      continue ;;\n    *\\'*)\n      ac_arg=`$as_echo \"$ac_arg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    case $ac_pass in\n    1) as_fn_append ac_configure_args0 \" '$ac_arg'\" ;;\n    2)\n      as_fn_append ac_configure_args1 \" '$ac_arg'\"\n      if test $ac_must_keep_next = true; then\n\tac_must_keep_next=false # Got value, back to normal.\n      else\n\tcase $ac_arg in\n\t  *=* | --config-cache | -C | -disable-* | --disable-* \\\n\t  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \\\n\t  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \\\n\t  | -with-* | --with-* | -without-* | --without-* | --x)\n\t    case \"$ac_configure_args0 \" in\n\t      \"$ac_configure_args1\"*\" '$ac_arg' \"* ) continue ;;\n\t    esac\n\t    ;;\n\t  -* ) ac_must_keep_next=true ;;\n\tesac\n      fi\n      as_fn_append ac_configure_args \" '$ac_arg'\"\n      ;;\n    esac\n  done\ndone\n{ ac_configure_args0=; unset ac_configure_args0;}\n{ ac_configure_args1=; unset ac_configure_args1;}\n\n# When interrupted or exit'd, cleanup temporary files, and complete\n# config.log.  We remove comments because anyway the quotes in there\n# would cause problems or look ugly.\n# WARNING: Use '\\'' to represent an apostrophe within the trap.\n# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.\ntrap 'exit_status=$?\n  # Save into config.log some information that might help in debugging.\n  {\n    echo\n\n    cat <<\\_ASBOX\n## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\n_ASBOX\n    echo\n    # The following way of writing the cache mishandles newlines in values,\n(\n  for ac_var in `(set) 2>&1 | sed -n '\\''s/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'\\''`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline\" >&5\n$as_echo \"$as_me: WARNING: cache variable $ac_var contains a newline\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(\n      *) { eval $ac_var=; unset $ac_var;} ;;\n      esac ;;\n    esac\n  done\n  (set) 2>&1 |\n    case $as_nl`(ac_space='\\'' '\\''; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      sed -n \\\n\t\"s/'\\''/'\\''\\\\\\\\'\\'''\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\''\\\\2'\\''/p\"\n      ;; #(\n    *)\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n)\n    echo\n\n    cat <<\\_ASBOX\n## ----------------- ##\n## Output variables. ##\n## ----------------- ##\n_ASBOX\n    echo\n    for ac_var in $ac_subst_vars\n    do\n      eval ac_val=\\$$ac_var\n      case $ac_val in\n      *\\'\\''*) ac_val=`$as_echo \"$ac_val\" | sed \"s/'\\''/'\\''\\\\\\\\\\\\\\\\'\\'''\\''/g\"`;;\n      esac\n      $as_echo \"$ac_var='\\''$ac_val'\\''\"\n    done | sort\n    echo\n\n    if test -n \"$ac_subst_files\"; then\n      cat <<\\_ASBOX\n## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\n_ASBOX\n      echo\n      for ac_var in $ac_subst_files\n      do\n\teval ac_val=\\$$ac_var\n\tcase $ac_val in\n\t*\\'\\''*) ac_val=`$as_echo \"$ac_val\" | sed \"s/'\\''/'\\''\\\\\\\\\\\\\\\\'\\'''\\''/g\"`;;\n\tesac\n\t$as_echo \"$ac_var='\\''$ac_val'\\''\"\n      done | sort\n      echo\n    fi\n\n    if test -s confdefs.h; then\n      cat <<\\_ASBOX\n## ----------- ##\n## confdefs.h. ##\n## ----------- ##\n_ASBOX\n      echo\n      cat confdefs.h\n      echo\n    fi\n    test \"$ac_signal\" != 0 &&\n      $as_echo \"$as_me: caught signal $ac_signal\"\n    $as_echo \"$as_me: exit $exit_status\"\n  } >&5\n  rm -f core *.core core.conftest.* &&\n    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&\n    exit $exit_status\n' 0\nfor ac_signal in 1 2 13 15; do\n  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal\ndone\nac_signal=0\n\n# confdefs.h avoids OS command line length limits that DEFS can exceed.\nrm -f -r conftest* confdefs.h\n\n$as_echo \"/* confdefs.h */\" > confdefs.h\n\n# Predefined preprocessor variables.\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE_URL \"$PACKAGE_URL\"\n_ACEOF\n\n\n# Let the site file select an alternate cache file if it wants to.\n# Prefer an explicitly selected file to automatically selected ones.\nac_site_file1=NONE\nac_site_file2=NONE\nif test -n \"$CONFIG_SITE\"; then\n  ac_site_file1=$CONFIG_SITE\nelif test \"x$prefix\" != xNONE; then\n  ac_site_file1=$prefix/share/config.site\n  ac_site_file2=$prefix/etc/config.site\nelse\n  ac_site_file1=$ac_default_prefix/share/config.site\n  ac_site_file2=$ac_default_prefix/etc/config.site\nfi\nfor ac_site_file in \"$ac_site_file1\" \"$ac_site_file2\"\ndo\n  test \"x$ac_site_file\" = xNONE && continue\n  if test /dev/null != \"$ac_site_file\" && test -r \"$ac_site_file\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file\" >&5\n$as_echo \"$as_me: loading site script $ac_site_file\" >&6;}\n    sed 's/^/| /' \"$ac_site_file\" >&5\n    . \"$ac_site_file\"\n  fi\ndone\n\nif test -r \"$cache_file\"; then\n  # Some versions of bash will fail to source /dev/null (special files\n  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.\n  if test /dev/null != \"$cache_file\" && test -f \"$cache_file\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: loading cache $cache_file\" >&5\n$as_echo \"$as_me: loading cache $cache_file\" >&6;}\n    case $cache_file in\n      [\\\\/]* | ?:[\\\\/]* ) . \"$cache_file\";;\n      *)                      . \"./$cache_file\";;\n    esac\n  fi\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: creating cache $cache_file\" >&5\n$as_echo \"$as_me: creating cache $cache_file\" >&6;}\n  >$cache_file\nfi\n\n# Check that the precious variables saved in the cache have kept the same\n# value.\nac_cache_corrupted=false\nfor ac_var in $ac_precious_vars; do\n  eval ac_old_set=\\$ac_cv_env_${ac_var}_set\n  eval ac_new_set=\\$ac_env_${ac_var}_set\n  eval ac_old_val=\\$ac_cv_env_${ac_var}_value\n  eval ac_new_val=\\$ac_env_${ac_var}_value\n  case $ac_old_set,$ac_new_set in\n    set,)\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,set)\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' was not set in the previous run\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' was not set in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,);;\n    *)\n      if test \"x$ac_old_val\" != \"x$ac_new_val\"; then\n\t# differences in whitespace do not lead to failure.\n\tac_old_val_w=`echo x $ac_old_val`\n\tac_new_val_w=`echo x $ac_new_val`\n\tif test \"$ac_old_val_w\" != \"$ac_new_val_w\"; then\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' has changed since the previous run:\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' has changed since the previous run:\" >&2;}\n\t  ac_cache_corrupted=:\n\telse\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \\`$ac_var' since the previous run:\" >&5\n$as_echo \"$as_me: warning: ignoring whitespace changes in \\`$ac_var' since the previous run:\" >&2;}\n\t  eval $ac_var=\\$ac_old_val\n\tfi\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}:   former value:  \\`$ac_old_val'\" >&5\n$as_echo \"$as_me:   former value:  \\`$ac_old_val'\" >&2;}\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}:   current value: \\`$ac_new_val'\" >&5\n$as_echo \"$as_me:   current value: \\`$ac_new_val'\" >&2;}\n      fi;;\n  esac\n  # Pass precious variables to config.status.\n  if test \"$ac_new_set\" = set; then\n    case $ac_new_val in\n    *\\'*) ac_arg=$ac_var=`$as_echo \"$ac_new_val\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    *) ac_arg=$ac_var=$ac_new_val ;;\n    esac\n    case \" $ac_configure_args \" in\n      *\" '$ac_arg' \"*) ;; # Avoid dups.  Use of quotes ensures accuracy.\n      *) as_fn_append ac_configure_args \" '$ac_arg'\" ;;\n    esac\n  fi\ndone\nif $ac_cache_corrupted; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build\" >&5\n$as_echo \"$as_me: error: changes in the environment can compromise the build\" >&2;}\n  as_fn_error \"run \\`make distclean' and/or \\`rm $cache_file' and start over\" \"$LINENO\" 5\nfi\n## -------------------- ##\n## Main body of script. ##\n## -------------------- ##\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\n\n\n\n\n# Autoconf setup\nac_aux_dir=\nfor ac_dir in config \"$srcdir\"/config; do\n  for ac_t in install-sh install.sh shtool; do\n    if test -f \"$ac_dir/$ac_t\"; then\n      ac_aux_dir=$ac_dir\n      ac_install_sh=\"$ac_aux_dir/$ac_t -c\"\n      break 2\n    fi\n  done\ndone\nif test -z \"$ac_aux_dir\"; then\n  as_fn_error \"cannot find install-sh, install.sh, or shtool in config \\\"$srcdir\\\"/config\" \"$LINENO\" 5\nfi\n\n# These three variables are undocumented and unsupported,\n# and are intended to be withdrawn in a future Autoconf release.\n# They can cause serious problems if a builder's source tree is in a directory\n# whose full name contains unusual characters.\nac_config_guess=\"$SHELL $ac_aux_dir/config.guess\"  # Please don't use this var.\nac_config_sub=\"$SHELL $ac_aux_dir/config.sub\"  # Please don't use this var.\nac_configure=\"$SHELL $ac_aux_dir/configure\"  # Please don't use this var.\n\n\n\nac_config_headers=\"$ac_config_headers config.h\"\n\n\n# Automake setup\nam__api_version=\"1.9\"\n# Find a good install program.  We prefer a C program (faster),\n# so one script is as good as another.  But avoid the broken or\n# incompatible versions:\n# SysV /etc/install, /usr/sbin/install\n# SunOS /usr/etc/install\n# IRIX /sbin/install\n# AIX /bin/install\n# AmigaOS /C/install, which installs bootblocks on floppy discs\n# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag\n# AFS /usr/afsws/bin/install, which mishandles nonexistent args\n# SVR4 /usr/ucb/install, which tries to use the nonexistent group \"staff\"\n# OS/2's system install, which has a completely different semantic\n# ./install, which can be erroneously created by make from ./install.sh.\n# Reject install programs that cannot install multiple files.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install\" >&5\n$as_echo_n \"checking for a BSD-compatible install... \" >&6; }\nif test -z \"$INSTALL\"; then\nif test \"${ac_cv_path_install+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    # Account for people who put trailing slashes in PATH elements.\ncase $as_dir/ in @%:@((\n  ./ | .// | /[cC]/* | \\\n  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \\\n  ?:[\\\\/]os2[\\\\/]install[\\\\/]* | ?:[\\\\/]OS2[\\\\/]INSTALL[\\\\/]* | \\\n  /usr/ucb/* ) ;;\n  *)\n    # OSF1 and SCO ODT 3.0 have their own names for install.\n    # Don't use installbsd from OSF since it installs stuff as root\n    # by default.\n    for ac_prog in ginstall scoinst install; do\n      for ac_exec_ext in '' $ac_executable_extensions; do\n\tif { test -f \"$as_dir/$ac_prog$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_prog$ac_exec_ext\"; }; then\n\t  if test $ac_prog = install &&\n\t    grep dspmsg \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # AIX install.  It has an incompatible calling convention.\n\t    :\n\t  elif test $ac_prog = install &&\n\t    grep pwplus \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # program-specific install script used by HP pwplus--don't use.\n\t    :\n\t  else\n\t    rm -rf conftest.one conftest.two conftest.dir\n\t    echo one > conftest.one\n\t    echo two > conftest.two\n\t    mkdir conftest.dir\n\t    if \"$as_dir/$ac_prog$ac_exec_ext\" -c conftest.one conftest.two \"`pwd`/conftest.dir\" &&\n\t      test -s conftest.one && test -s conftest.two &&\n\t      test -s conftest.dir/conftest.one &&\n\t      test -s conftest.dir/conftest.two\n\t    then\n\t      ac_cv_path_install=\"$as_dir/$ac_prog$ac_exec_ext -c\"\n\t      break 3\n\t    fi\n\t  fi\n\tfi\n      done\n    done\n    ;;\nesac\n\n  done\nIFS=$as_save_IFS\n\nrm -rf conftest.one conftest.two conftest.dir\n\nfi\n  if test \"${ac_cv_path_install+set}\" = set; then\n    INSTALL=$ac_cv_path_install\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for INSTALL within a source directory, because that will\n    # break other packages using the cache if that directory is\n    # removed, or if the value is a relative name.\n    INSTALL=$ac_install_sh\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $INSTALL\" >&5\n$as_echo \"$INSTALL\" >&6; }\n\n# Use test -z because SunOS4 sh mishandles braces in ${var-val}.\n# It thinks the first close brace ends the variable substitution.\ntest -z \"$INSTALL_PROGRAM\" && INSTALL_PROGRAM='${INSTALL}'\n\ntest -z \"$INSTALL_SCRIPT\" && INSTALL_SCRIPT='${INSTALL}'\n\ntest -z \"$INSTALL_DATA\" && INSTALL_DATA='${INSTALL} -m 644'\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether build environment is sane\" >&5\n$as_echo_n \"checking whether build environment is sane... \" >&6; }\n# Just in case\nsleep 1\necho timestamp > conftest.file\n# Do `set' in a subshell so we don't clobber the current shell's\n# arguments.  Must try -L first in case configure is actually a\n# symlink; some systems play weird games with the mod time of symlinks\n# (eg FreeBSD returns the mod time of the symlink's containing\n# directory).\nif (\n   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`\n   if test \"$*\" = \"X\"; then\n      # -L didn't work.\n      set X `ls -t $srcdir/configure conftest.file`\n   fi\n   rm -f conftest.file\n   if test \"$*\" != \"X $srcdir/configure conftest.file\" \\\n      && test \"$*\" != \"X conftest.file $srcdir/configure\"; then\n\n      # If neither matched, then we have a broken ls.  This can happen\n      # if, for instance, CONFIG_SHELL is bash and it inherits a\n      # broken ls alias from the environment.  This has actually\n      # happened.  Such a system could not be considered \"sane\".\n      as_fn_error \"ls -t appears to fail.  Make sure there is not a broken\nalias in your environment\" \"$LINENO\" 5\n   fi\n\n   test \"$2\" = conftest.file\n   )\nthen\n   # Ok.\n   :\nelse\n   as_fn_error \"newly created file is older than distributed files!\nCheck your system clock\" \"$LINENO\" 5\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\ntest \"$program_prefix\" != NONE &&\n  program_transform_name=\"s&^&$program_prefix&;$program_transform_name\"\n# Use a double $ so make ignores it.\ntest \"$program_suffix\" != NONE &&\n  program_transform_name=\"s&\\$&$program_suffix&;$program_transform_name\"\n# Double any \\ or $.\n# By default was `s,x,x', remove it if useless.\nac_script='s/[\\\\$]/&&/g;s/;s,x,x,$//'\nprogram_transform_name=`$as_echo \"$program_transform_name\" | sed \"$ac_script\"`\n\n# expand $ac_aux_dir to an absolute path\nam_aux_dir=`cd $ac_aux_dir && pwd`\n\ntest x\"${MISSING+set}\" = xset || MISSING=\"\\${SHELL} $am_aux_dir/missing\"\n# Use eval to expand $SHELL\nif eval \"$MISSING --run true\"; then\n  am_missing_run=\"$MISSING --run \"\nelse\n  am_missing_run=\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: \\`missing' script is too old or missing\" >&5\n$as_echo \"$as_me: WARNING: \\`missing' script is too old or missing\" >&2;}\nfi\n\nif mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then\n  # We used to keeping the `.' as first argument, in order to\n  # allow $(mkdir_p) to be used without argument.  As in\n  #   $(mkdir_p) $(somedir)\n  # where $(somedir) is conditionally defined.  However this is wrong\n  # for two reasons:\n  #  1. if the package is installed by a user who cannot write `.'\n  #     make install will fail,\n  #  2. the above comment should most certainly read\n  #     $(mkdir_p) $(DESTDIR)$(somedir)\n  #     so it does not work when $(somedir) is undefined and\n  #     $(DESTDIR) is not.\n  #  To support the latter case, we have to write\n  #     test -z \"$(somedir)\" || $(mkdir_p) $(DESTDIR)$(somedir),\n  #  so the `.' trick is pointless.\n  mkdir_p='mkdir -p --'\nelse\n  # On NextStep and OpenStep, the `mkdir' command does not\n  # recognize any option.  It will interpret all options as\n  # directories to create, and then abort because `.' already\n  # exists.\n  for d in ./-p ./--version;\n  do\n    test -d $d && rmdir $d\n  done\n  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.\n  if test -f \"$ac_aux_dir/mkinstalldirs\"; then\n    mkdir_p='$(mkinstalldirs)'\n  else\n    mkdir_p='$(install_sh) -d'\n  fi\nfi\n\nfor ac_prog in gawk mawk nawk awk\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_AWK+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$AWK\"; then\n  ac_cv_prog_AWK=\"$AWK\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_AWK=\"$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nAWK=$ac_cv_prog_AWK\nif test -n \"$AWK\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $AWK\" >&5\n$as_echo \"$AWK\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  test -n \"$AWK\" && break\ndone\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \\$(MAKE)\" >&5\n$as_echo_n \"checking whether ${MAKE-make} sets \\$(MAKE)... \" >&6; }\nset x ${MAKE-make}\nac_make=`$as_echo \"$2\" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`\nif { as_var=ac_cv_prog_make_${ac_make}_set; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat >conftest.make <<\\_ACEOF\nSHELL = /bin/sh\nall:\n\t@echo '@@@%%%=$(MAKE)=@@@%%%'\n_ACEOF\n# GNU make sometimes prints \"make[1]: Entering...\", which would confuse us.\ncase `${MAKE-make} -f conftest.make 2>/dev/null` in\n  *@@@%%%=?*=@@@%%%*)\n    eval ac_cv_prog_make_${ac_make}_set=yes;;\n  *)\n    eval ac_cv_prog_make_${ac_make}_set=no;;\nesac\nrm -f conftest.make\nfi\nif eval test \\$ac_cv_prog_make_${ac_make}_set = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n  SET_MAKE=\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n  SET_MAKE=\"MAKE=${MAKE-make}\"\nfi\n\nrm -rf .tst 2>/dev/null\nmkdir .tst 2>/dev/null\nif test -d .tst; then\n  am__leading_dot=.\nelse\n  am__leading_dot=_\nfi\nrmdir .tst 2>/dev/null\n\n# test to see if srcdir already configured\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\" &&\n   test -f $srcdir/config.status; then\n  as_fn_error \"source directory already configured; run \\\"make distclean\\\" there first\" \"$LINENO\" 5\nfi\n\n# test whether we have cygpath\nif test -z \"$CYGPATH_W\"; then\n  if (cygpath --version) >/dev/null 2>/dev/null; then\n    CYGPATH_W='cygpath -w'\n  else\n    CYGPATH_W=echo\n  fi\nfi\n\n\n# Define the identity of the package.\n PACKAGE='make'\n VERSION='3.81'\n\n\ncat >>confdefs.h <<_ACEOF\n@%:@define PACKAGE \"$PACKAGE\"\n_ACEOF\n\n \ncat >>confdefs.h <<_ACEOF\n@%:@define VERSION \"$VERSION\"\n_ACEOF\n\n# Some tools Automake needs.\n\nACLOCAL=${ACLOCAL-\"${am_missing_run}aclocal-${am__api_version}\"}\n\n\nAUTOCONF=${AUTOCONF-\"${am_missing_run}autoconf\"}\n\n\nAUTOMAKE=${AUTOMAKE-\"${am_missing_run}automake-${am__api_version}\"}\n\n\nAUTOHEADER=${AUTOHEADER-\"${am_missing_run}autoheader\"}\n\n\nMAKEINFO=${MAKEINFO-\"${am_missing_run}makeinfo\"}\n\ninstall_sh=${install_sh-\"$am_aux_dir/install-sh\"}\n\n# Installed binaries are usually stripped using `strip' when the user\n# run `make install-strip'.  However `strip' might not be the right\n# tool to use in cross-compilation environments, therefore Automake\n# will honor the `STRIP' environment variable to overrule this program.\nif test \"$cross_compiling\" != no; then\n  if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}strip\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}strip; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_STRIP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$STRIP\"; then\n  ac_cv_prog_STRIP=\"$STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_STRIP=\"${ac_tool_prefix}strip\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nSTRIP=$ac_cv_prog_STRIP\nif test -n \"$STRIP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $STRIP\" >&5\n$as_echo \"$STRIP\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_STRIP\"; then\n  ac_ct_STRIP=$STRIP\n  # Extract the first word of \"strip\", so it can be a program name with args.\nset dummy strip; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_STRIP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_STRIP\"; then\n  ac_cv_prog_ac_ct_STRIP=\"$ac_ct_STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_STRIP=\"strip\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP\nif test -n \"$ac_ct_STRIP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP\" >&5\n$as_echo \"$ac_ct_STRIP\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_STRIP\" = x; then\n    STRIP=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    STRIP=$ac_ct_STRIP\n  fi\nelse\n  STRIP=\"$ac_cv_prog_STRIP\"\nfi\n\nfi\nINSTALL_STRIP_PROGRAM=\"\\${SHELL} \\$(install_sh) -c -s\"\n\n# We need awk for the \"check\" target.  The system \"awk\" is bad on\n# some platforms.\n# Always define AMTAR for backward compatibility.\n\nAMTAR=${AMTAR-\"${am_missing_run}tar\"}\n\nam__tar='${AMTAR} chof - \"$$tardir\"'; am__untar='${AMTAR} xf -'\n\n\n\n\n\n\n# Checks for programs.\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}gcc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}gcc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}gcc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_CC\"; then\n  ac_ct_CC=$CC\n  # Extract the first word of \"gcc\", so it can be a program name with args.\nset dummy gcc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"gcc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC\" >&5\n$as_echo \"$ac_ct_CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nelse\n  CC=\"$ac_cv_prog_CC\"\nfi\n\nif test -z \"$CC\"; then\n          if test -n \"$ac_tool_prefix\"; then\n    # Extract the first word of \"${ac_tool_prefix}cc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}cc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}cc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  fi\nfi\nif test -z \"$CC\"; then\n  # Extract the first word of \"cc\", so it can be a program name with args.\nset dummy cc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\n  ac_prog_rejected=no\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    if test \"$as_dir/$ac_word$ac_exec_ext\" = \"/usr/ucb/cc\"; then\n       ac_prog_rejected=yes\n       continue\n     fi\n    ac_cv_prog_CC=\"cc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nif test $ac_prog_rejected = yes; then\n  # We found a bogon in the path, so make sure we never use it.\n  set dummy $ac_cv_prog_CC\n  shift\n  if test $@%:@ != 0; then\n    # We chose a different compiler from the bogus one.\n    # However, it has the same basename, so the bogon will be chosen\n    # first if we set CC to just the basename; use the full file name.\n    shift\n    ac_cv_prog_CC=\"$as_dir/$ac_word${1+' '}$@\"\n  fi\nfi\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$CC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in cl.exe\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"$ac_tool_prefix$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n    test -n \"$CC\" && break\n  done\nfi\nif test -z \"$CC\"; then\n  ac_ct_CC=$CC\n  for ac_prog in cl.exe\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC\" >&5\n$as_echo \"$ac_ct_CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CC\" && break\ndone\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nfi\n\nfi\n\n\ntest -z \"$CC\" && { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\n\n# Provide some information about the compiler.\n$as_echo \"$as_me:${as_lineno-$LINENO}: checking for C compiler version\" >&5\nset X $ac_compile\nac_compiler=$2\nfor ac_option in --version -v -V -qversion; do\n  { { ac_try=\"$ac_compiler $ac_option >&5\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compiler $ac_option >&5\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    sed '10a\\\n... rest of stderr output deleted ...\n         10q' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n  fi\n  rm -f conftest.er1 conftest.err\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\ndone\n\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files a.out a.out.dSYM a.exe b.out\"\n# Try to create an executable without -o first, disregard a.out.\n# It will help us diagnose broken compilers, and finding out an intuition\n# of exeext.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the C compiler works\" >&5\n$as_echo_n \"checking whether the C compiler works... \" >&6; }\nac_link_default=`$as_echo \"$ac_link\" | sed 's/ -o *conftest[^ ]*//'`\n\n# The possible output files:\nac_files=\"a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*\"\n\nac_rmfiles=\nfor ac_file in $ac_files\ndo\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;\n    * ) ac_rmfiles=\"$ac_rmfiles $ac_file\";;\n  esac\ndone\nrm -f $ac_rmfiles\n\nif { { ac_try=\"$ac_link_default\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link_default\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.\n# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'\n# in a Makefile.  We should not override ac_cv_exeext if it was cached,\n# so that the user can short-circuit this test for compilers unknown to\n# Autoconf.\nfor ac_file in $ac_files ''\ndo\n  test -f \"$ac_file\" || continue\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )\n\t;;\n    [ab].out )\n\t# We found the default executable, but exeext='' is most\n\t# certainly right.\n\tbreak;;\n    *.* )\n\tif test \"${ac_cv_exeext+set}\" = set && test \"$ac_cv_exeext\" != no;\n\tthen :; else\n\t   ac_cv_exeext=`expr \"$ac_file\" : '[^.]*\\(\\..*\\)'`\n\tfi\n\t# We set ac_cv_exeext here because the later test for it is not\n\t# safe: cross compilers may not add the suffix if given an `-o'\n\t# argument, so we may need to know it at that point already.\n\t# Even if this section looks crufty: it has the advantage of\n\t# actually working.\n\tbreak;;\n    * )\n\tbreak;;\n  esac\ndone\ntest \"$ac_cv_exeext\" = no && ac_cv_exeext=\n\nelse\n  ac_file=''\nfi\nif test -z \"$ac_file\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n$as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\n{ as_fn_set_status 77\nas_fn_error \"C compiler cannot create executables\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name\" >&5\n$as_echo_n \"checking for C compiler default output file name... \" >&6; }\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_file\" >&5\n$as_echo \"$ac_file\" >&6; }\nac_exeext=$ac_cv_exeext\n\nrm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out\nac_clean_files=$ac_clean_files_save\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for suffix of executables\" >&5\n$as_echo_n \"checking for suffix of executables... \" >&6; }\nif { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  # If both `conftest.exe' and `conftest' are `present' (well, observable)\n# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will\n# work properly (i.e., refer to `conftest.exe'), while it won't with\n# `rm'.\nfor ac_file in conftest.exe conftest conftest.*; do\n  test -f \"$ac_file\" || continue\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;\n    *.* ) ac_cv_exeext=`expr \"$ac_file\" : '[^.]*\\(\\..*\\)'`\n\t  break;;\n    * ) break;;\n  esac\ndone\nelse\n  { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot compute suffix of executables: cannot compile and link\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\nrm -f conftest conftest$ac_cv_exeext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext\" >&5\n$as_echo \"$ac_cv_exeext\" >&6; }\n\nrm -f conftest.$ac_ext\nEXEEXT=$ac_cv_exeext\nac_exeext=$EXEEXT\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <stdio.h>\nint\nmain ()\n{\nFILE *f = fopen (\"conftest.out\", \"w\");\n return ferror (f) || fclose (f) != 0;\n\n  ;\n  return 0;\n}\n_ACEOF\nac_clean_files=\"$ac_clean_files conftest.out\"\n# Check that the compiler produces executables we can run.  If not, either\n# the compiler is broken, or we cross compile.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling\" >&5\n$as_echo_n \"checking whether we are cross compiling... \" >&6; }\nif test \"$cross_compiling\" != yes; then\n  { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n  if { ac_try='./conftest$ac_cv_exeext'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then\n    cross_compiling=no\n  else\n    if test \"$cross_compiling\" = maybe; then\n\tcross_compiling=yes\n    else\n\t{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot run C compiled programs.\nIf you meant to cross compile, use \\`--host'.\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\n    fi\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $cross_compiling\" >&5\n$as_echo \"$cross_compiling\" >&6; }\n\nrm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out\nac_clean_files=$ac_clean_files_save\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for suffix of object files\" >&5\n$as_echo_n \"checking for suffix of object files... \" >&6; }\nif test \"${ac_cv_objext+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.o conftest.obj\nif { { ac_try=\"$ac_compile\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compile\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  for ac_file in conftest.o conftest.obj conftest.*; do\n  test -f \"$ac_file\" || continue;\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;\n    *) ac_cv_objext=`expr \"$ac_file\" : '.*\\.\\(.*\\)'`\n       break;;\n  esac\ndone\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot compute suffix of object files: cannot compile\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\nrm -f conftest.$ac_cv_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext\" >&5\n$as_echo \"$ac_cv_objext\" >&6; }\nOBJEXT=$ac_cv_objext\nac_objext=$OBJEXT\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler\" >&5\n$as_echo_n \"checking whether we are using the GNU C compiler... \" >&6; }\nif test \"${ac_cv_c_compiler_gnu+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_compiler_gnu=yes\nelse\n  ac_compiler_gnu=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_c_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu\" >&5\n$as_echo \"$ac_cv_c_compiler_gnu\" >&6; }\nif test $ac_compiler_gnu = yes; then\n  GCC=yes\nelse\n  GCC=\nfi\nac_test_CFLAGS=${CFLAGS+set}\nac_save_CFLAGS=$CFLAGS\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g\" >&5\n$as_echo_n \"checking whether $CC accepts -g... \" >&6; }\nif test \"${ac_cv_prog_cc_g+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_save_c_werror_flag=$ac_c_werror_flag\n   ac_c_werror_flag=yes\n   ac_cv_prog_cc_g=no\n   CFLAGS=\"-g\"\n   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_g=yes\nelse\n  CFLAGS=\"\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  \nelse\n  ac_c_werror_flag=$ac_save_c_werror_flag\n\t CFLAGS=\"-g\"\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_g=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_c_werror_flag=$ac_save_c_werror_flag\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g\" >&5\n$as_echo \"$ac_cv_prog_cc_g\" >&6; }\nif test \"$ac_test_CFLAGS\" = set; then\n  CFLAGS=$ac_save_CFLAGS\nelif test $ac_cv_prog_cc_g = yes; then\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-g -O2\"\n  else\n    CFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-O2\"\n  else\n    CFLAGS=\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89\" >&5\n$as_echo_n \"checking for $CC option to accept ISO C89... \" >&6; }\nif test \"${ac_cv_prog_cc_c89+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_prog_cc_c89=no\nac_save_CC=$CC\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdarg.h>\n#include <stdio.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\nstruct buf { int x; };\nFILE * (*rcsopen) (struct buf *, struct stat *, int);\nstatic char *e (p, i)\n     char **p;\n     int i;\n{\n  return p[i];\n}\nstatic char *f (char * (*g) (char **, int), char **p, ...)\n{\n  char *s;\n  va_list v;\n  va_start (v,p);\n  s = g (p, va_arg (v,int));\n  va_end (v);\n  return s;\n}\n\n/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\n   function prototypes and stuff, but not '\\xHH' hex character constants.\n   These don't provoke an error unfortunately, instead are silently treated\n   as 'x'.  The following induces an error, until -std is added to get\n   proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\n   array size at least.  It's necessary to write '\\x00'==0 to get something\n   that's true only with -std.  */\nint osf4_cc_array ['\\x00' == 0 ? 1 : -1];\n\n/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters\n   inside strings and character constants.  */\n#define FOO(x) 'x'\nint xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];\n\nint test (int i, double x);\nstruct s1 {int (*f) (int a);};\nstruct s2 {int (*f) (double a);};\nint pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\nint argc;\nchar **argv;\nint\nmain ()\n{\nreturn f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \\\n\t-Ae \"-Aa -D_HPUX_SOURCE\" \"-Xc -D__EXTENSIONS__\"\ndo\n  CC=\"$ac_save_CC $ac_arg\"\n  if ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_c89=$ac_arg\nfi\nrm -f core conftest.err conftest.$ac_objext\n  test \"x$ac_cv_prog_cc_c89\" != \"xno\" && break\ndone\nrm -f conftest.$ac_ext\nCC=$ac_save_CC\n\nfi\n# AC_CACHE_VAL\ncase \"x$ac_cv_prog_cc_c89\" in\n  x)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: none needed\" >&5\n$as_echo \"none needed\" >&6; } ;;\n  xno)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: unsupported\" >&5\n$as_echo \"unsupported\" >&6; } ;;\n  *)\n    CC=\"$CC $ac_cv_prog_cc_c89\"\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89\" >&5\n$as_echo \"$ac_cv_prog_cc_c89\" >&6; } ;;\nesac\nif test \"x$ac_cv_prog_cc_c89\" != xno; then :\n  \nfi\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nDEPDIR=\"${am__leading_dot}deps\"\n\nac_config_commands=\"$ac_config_commands depfiles\"\n\n\nam_make=${MAKE-make}\ncat > confinc << 'END'\nam__doit:\n\t@echo done\n.PHONY: am__doit\nEND\n# If we don't find an include directive, just comment out the code.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make\" >&5\n$as_echo_n \"checking for style of include used by $am_make... \" >&6; }\nam__include=\"#\"\nam__quote=\n_am_result=none\n# First try GNU make style include.\necho \"include confinc\" > confmf\n# We grep out `Entering directory' and `Leaving directory'\n# messages which can occur if `w' ends up in MAKEFLAGS.\n# In particular we don't look at `^make:' because GNU make might\n# be invoked under some other name (usually \"gmake\"), in which\n# case it prints its new name instead of `make'.\nif test \"`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`\" = \"done\"; then\n   am__include=include\n   am__quote=\n   _am_result=GNU\nfi\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   if test \"`$am_make -s -f confmf 2> /dev/null`\" = \"done\"; then\n      am__include=.include\n      am__quote=\"\\\"\"\n      _am_result=BSD\n   fi\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $_am_result\" >&5\n$as_echo \"$_am_result\" >&6; }\nrm -f confinc confmf\n\n@%:@ Check whether --enable-dependency-tracking was given.\nif test \"${enable_dependency_tracking+set}\" = set; then :\n  enableval=$enable_dependency_tracking; \nfi\n\nif test \"x$enable_dependency_tracking\" != xno; then\n  am_depcomp=\"$ac_aux_dir/depcomp\"\n  AMDEPBACKSLASH='\\'\nfi\n \n\nif test \"x$enable_dependency_tracking\" != xno; then\n  AMDEP_TRUE=\n  AMDEP_FALSE='#'\nelse\n  AMDEP_TRUE='#'\n  AMDEP_FALSE=\nfi\n\n\n\n\ndepcc=\"$CC\"   am_compiler_list=\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc\" >&5\n$as_echo_n \"checking dependency style of $depcc... \" >&6; }\nif test \"${am_cv_CC_dependencies_compiler_type+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$AMDEP_TRUE\" && test -f \"$am_depcomp\"; then\n  # We make a subdir and do the tests there.  Otherwise we can end up\n  # making bogus files that we don't know about and never remove.  For\n  # instance it was reported that on HP-UX the gcc test will end up\n  # making a dummy file named `D' -- because `-MD' means `put the output\n  # in D'.\n  mkdir conftest.dir\n  # Copy depcomp to subdir because otherwise we won't find it if we're\n  # using a relative directory.\n  cp \"$am_depcomp\" conftest.dir\n  cd conftest.dir\n  # We will build objects and dependencies in a subdirectory because\n  # it helps to detect inapplicable dependency modes.  For instance\n  # both Tru64's cc and ICC support -MD to output dependencies as a\n  # side effect of compilation, but ICC will put the dependencies in\n  # the current directory while Tru64 will put them in the object\n  # directory.\n  mkdir sub\n\n  am_cv_CC_dependencies_compiler_type=none\n  if test \"$am_compiler_list\" = \"\"; then\n     am_compiler_list=`sed -n 's/^#*\\([a-zA-Z0-9]*\\))$/\\1/p' < ./depcomp`\n  fi\n  for depmode in $am_compiler_list; do\n    # Setup a source with many dependencies, because some compilers\n    # like to wrap large dependency lists on column 80 (with \\), and\n    # we should not choose a depcomp mode which is confused by this.\n    #\n    # We need to recreate these files for each test, as the compiler may\n    # overwrite some of them when testing with obscure command lines.\n    # This happens at least with the AIX C compiler.\n    : > sub/conftest.c\n    for i in 1 2 3 4 5 6; do\n      echo '#include \"conftst'$i'.h\"' >> sub/conftest.c\n      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with\n      # Solaris 8's {/usr,}/bin/sh.\n      touch sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\n    case $depmode in\n    nosideeffect)\n      # after this tag, mechanisms are not by side-effect, so they'll\n      # only be used when explicitly requested\n      if test \"x$enable_dependency_tracking\" = xyes; then\n\tcontinue\n      else\n\tbreak\n      fi\n      ;;\n    none) break ;;\n    esac\n    # We check with `-c' and `-o' for the sake of the \"dashmstdout\"\n    # mode.  It turns out that the SunPro C++ compiler does not properly\n    # handle `-M -o', and we need to detect this.\n    if depmode=$depmode \\\n       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&\n       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then\n      # icc doesn't choke on unknown options, it will just issue warnings\n      # or remarks (even with -Werror).  So we grep stderr for any message\n      # that says an option was ignored or not supported.\n      # When given -MP, icc 7.0 and 7.1 complain thusly:\n      #   icc: Command line warning: ignoring option '-M'; no argument required\n      # The diagnosis changed in icc 8.0:\n      #   icc: Command line remark: option '-MP' not supported\n      if (grep 'ignoring option' conftest.err ||\n          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else\n        am_cv_CC_dependencies_compiler_type=$depmode\n        break\n      fi\n    fi\n  done\n\n  cd ..\n  rm -rf conftest.dir\nelse\n  am_cv_CC_dependencies_compiler_type=none\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type\" >&5\n$as_echo \"$am_cv_CC_dependencies_compiler_type\" >&6; }\nCCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type\n\n \n\nif \n  test \"x$enable_dependency_tracking\" != xno \\\n  && test \"$am_cv_CC_dependencies_compiler_type\" = gcc3; then\n  am__fastdepCC_TRUE=\n  am__fastdepCC_FALSE='#'\nelse\n  am__fastdepCC_TRUE='#'\n  am__fastdepCC_FALSE=\nfi\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ranlib\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}ranlib; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_RANLIB+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$RANLIB\"; then\n  ac_cv_prog_RANLIB=\"$RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_RANLIB=\"${ac_tool_prefix}ranlib\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nRANLIB=$ac_cv_prog_RANLIB\nif test -n \"$RANLIB\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $RANLIB\" >&5\n$as_echo \"$RANLIB\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_RANLIB\"; then\n  ac_ct_RANLIB=$RANLIB\n  # Extract the first word of \"ranlib\", so it can be a program name with args.\nset dummy ranlib; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_RANLIB+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_RANLIB\"; then\n  ac_cv_prog_ac_ct_RANLIB=\"$ac_ct_RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_RANLIB=\"ranlib\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB\nif test -n \"$ac_ct_RANLIB\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB\" >&5\n$as_echo \"$ac_ct_RANLIB\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_RANLIB\" = x; then\n    RANLIB=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    RANLIB=$ac_ct_RANLIB\n  fi\nelse\n  RANLIB=\"$ac_cv_prog_RANLIB\"\nfi\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor\" >&5\n$as_echo_n \"checking how to run the C preprocessor... \" >&6; }\n# On Suns, sometimes $CPP names a directory.\nif test -n \"$CPP\" && test -d \"$CPP\"; then\n  CPP=\nfi\nif test -z \"$CPP\"; then\n  if test \"${ac_cv_prog_CPP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n      # Double quotes because CPP needs to be expanded\n    for CPP in \"$CC -E\" \"$CC -E -traditional-cpp\" \"/lib/cpp\"\n    do\n      ac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@ifdef __STDC__\n@%:@ include <limits.h>\n@%:@else\n@%:@ include <assert.h>\n@%:@endif\n\t\t     Syntax error\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  \nelse\n  # Broken: fails on valid input.\ncontinue\nfi\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <ac_nonexistent.h>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  # Broken: success on invalid input.\ncontinue\nelse\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then :\n  break\nfi\n\n    done\n    ac_cv_prog_CPP=$CPP\n  \nfi\n  CPP=$ac_cv_prog_CPP\nelse\n  ac_cv_prog_CPP=$CPP\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CPP\" >&5\n$as_echo \"$CPP\" >&6; }\nac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@ifdef __STDC__\n@%:@ include <limits.h>\n@%:@else\n@%:@ include <assert.h>\n@%:@endif\n\t\t     Syntax error\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  \nelse\n  # Broken: fails on valid input.\ncontinue\nfi\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <ac_nonexistent.h>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  # Broken: success on invalid input.\ncontinue\nelse\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then :\n  \nelse\n  { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"C preprocessor \\\"$CPP\\\" fails sanity check\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n# Extract the first word of \"ar\", so it can be a program name with args.\nset dummy ar; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_AR+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$AR\"; then\n  ac_cv_prog_AR=\"$AR\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_AR=\"ar\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_prog_AR\" && ac_cv_prog_AR=\"ar\"\nfi\nfi\nAR=$ac_cv_prog_AR\nif test -n \"$AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $AR\" >&5\n$as_echo \"$AR\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n# Perl is needed for the test suite (only)\n# Extract the first word of \"perl\", so it can be a program name with args.\nset dummy perl; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_PERL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$PERL\"; then\n  ac_cv_prog_PERL=\"$PERL\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_PERL=\"perl\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_prog_PERL\" && ac_cv_prog_PERL=\"perl\"\nfi\nfi\nPERL=$ac_cv_prog_PERL\nif test -n \"$PERL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $PERL\" >&5\n$as_echo \"$PERL\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n# Specialized system macros\n# Make sure we can run config.sub.\n$SHELL \"$ac_aux_dir/config.sub\" sun4 >/dev/null 2>&1 ||\n  as_fn_error \"cannot run $SHELL $ac_aux_dir/config.sub\" \"$LINENO\" 5\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking build system type\" >&5\n$as_echo_n \"checking build system type... \" >&6; }\nif test \"${ac_cv_build+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_build_alias=$build_alias\ntest \"x$ac_build_alias\" = x &&\n  ac_build_alias=`$SHELL \"$ac_aux_dir/config.guess\"`\ntest \"x$ac_build_alias\" = x &&\n  as_fn_error \"cannot guess build type; you must specify one\" \"$LINENO\" 5\nac_cv_build=`$SHELL \"$ac_aux_dir/config.sub\" $ac_build_alias` ||\n  as_fn_error \"$SHELL $ac_aux_dir/config.sub $ac_build_alias failed\" \"$LINENO\" 5\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_build\" >&5\n$as_echo \"$ac_cv_build\" >&6; }\ncase $ac_cv_build in\n*-*-*) ;;\n*) as_fn_error \"invalid value of canonical build\" \"$LINENO\" 5;;\nesac\nbuild=$ac_cv_build\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_build\nshift\nbuild_cpu=$1\nbuild_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nbuild_os=$*\nIFS=$ac_save_IFS\ncase $build_os in *\\ *) build_os=`echo \"$build_os\" | sed 's/ /-/g'`;; esac\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking host system type\" >&5\n$as_echo_n \"checking host system type... \" >&6; }\nif test \"${ac_cv_host+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"x$host_alias\" = x; then\n  ac_cv_host=$ac_cv_build\nelse\n  ac_cv_host=`$SHELL \"$ac_aux_dir/config.sub\" $host_alias` ||\n    as_fn_error \"$SHELL $ac_aux_dir/config.sub $host_alias failed\" \"$LINENO\" 5\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_host\" >&5\n$as_echo \"$ac_cv_host\" >&6; }\ncase $ac_cv_host in\n*-*-*) ;;\n*) as_fn_error \"invalid value of canonical host\" \"$LINENO\" 5;;\nesac\nhost=$ac_cv_host\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_host\nshift\nhost_cpu=$1\nhost_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nhost_os=$*\nIFS=$ac_save_IFS\ncase $host_os in *\\ *) host_os=`echo \"$host_os\" | sed 's/ /-/g'`;; esac\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e\" >&5\n$as_echo_n \"checking for grep that handles long lines and -e... \" >&6; }\nif test \"${ac_cv_path_GREP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$GREP\"; then\n  ac_path_GREP_found=false\n  # Loop through the user's path and test for each of PROGNAME-LIST\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in grep ggrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_GREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_GREP\" && $as_test_x \"$ac_path_GREP\"; } || continue\n# Check for GNU ac_path_GREP and select it if it is found.\n  # Check for GNU $ac_path_GREP\ncase `\"$ac_path_GREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_GREP=\"$ac_path_GREP\" ac_path_GREP_found=:;;\n*)\n  ac_count=0\n  $as_echo_n 0123456789 >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    $as_echo 'GREP' >> \"conftest.nl\"\n    \"$ac_path_GREP\" -e 'GREP$' -e '-(cannot match)-' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    as_fn_arith $ac_count + 1 && ac_count=$as_val\n    if test $ac_count -gt ${ac_path_GREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_GREP=\"$ac_path_GREP\"\n      ac_path_GREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n      $ac_path_GREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_GREP\"; then\n    as_fn_error \"no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_GREP=$GREP\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP\" >&5\n$as_echo \"$ac_cv_path_GREP\" >&6; }\n GREP=\"$ac_cv_path_GREP\"\n \n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for egrep\" >&5\n$as_echo_n \"checking for egrep... \" >&6; }\nif test \"${ac_cv_path_EGREP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1\n   then ac_cv_path_EGREP=\"$GREP -E\"\n   else\n     if test -z \"$EGREP\"; then\n  ac_path_EGREP_found=false\n  # Loop through the user's path and test for each of PROGNAME-LIST\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in egrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_EGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_EGREP\" && $as_test_x \"$ac_path_EGREP\"; } || continue\n# Check for GNU ac_path_EGREP and select it if it is found.\n  # Check for GNU $ac_path_EGREP\ncase `\"$ac_path_EGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_EGREP=\"$ac_path_EGREP\" ac_path_EGREP_found=:;;\n*)\n  ac_count=0\n  $as_echo_n 0123456789 >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    $as_echo 'EGREP' >> \"conftest.nl\"\n    \"$ac_path_EGREP\" 'EGREP$' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    as_fn_arith $ac_count + 1 && ac_count=$as_val\n    if test $ac_count -gt ${ac_path_EGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_EGREP=\"$ac_path_EGREP\"\n      ac_path_EGREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n      $ac_path_EGREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_EGREP\"; then\n    as_fn_error \"no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_EGREP=$EGREP\nfi\n\n   fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP\" >&5\n$as_echo \"$ac_cv_path_EGREP\" >&6; }\n EGREP=\"$ac_cv_path_EGREP\"\n \n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ANSI C header files\" >&5\n$as_echo_n \"checking for ANSI C header files... \" >&6; }\nif test \"${ac_cv_header_stdc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <float.h>\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stdc=yes\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test $ac_cv_header_stdc = yes; then\n  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <string.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"memchr\" >/dev/null 2>&1; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"free\" >/dev/null 2>&1; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.\n  if test \"$cross_compiling\" = yes; then :\n  :\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ctype.h>\n#include <stdlib.h>\n#if ((' ' & 0x0FF) == 0x020)\n# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')\n# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))\n#else\n# define ISLOWER(c) \\\n\t\t   (('a' <= (c) && (c) <= 'i') \\\n\t\t     || ('j' <= (c) && (c) <= 'r') \\\n\t\t     || ('s' <= (c) && (c) <= 'z'))\n# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))\n#endif\n\n#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))\nint\nmain ()\n{\n  int i;\n  for (i = 0; i < 256; i++)\n    if (XOR (islower (i), ISLOWER (i))\n\t|| toupper (i) != TOUPPER (i))\n      return 2;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc\" >&5\n$as_echo \"$ac_cv_header_stdc\" >&6; }\nif test $ac_cv_header_stdc = yes; then\n  \n$as_echo \"@%:@define STDC_HEADERS 1\" >>confdefs.h\n\nfi\n\n# On IRIX 5.3, sys/types and inttypes.h are conflicting.\nfor ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \\\n\t\t  inttypes.h stdint.h unistd.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_compile \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\n\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n \nfi\n\ndone\n\n\n\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"minix/config.h\" \"ac_cv_header_minix_config_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_minix_config_h\" = x\"\"yes; then :\n  MINIX=yes\nelse\n  MINIX=\nfi\n\n\n  if test \"$MINIX\" = yes; then\n    \n$as_echo \"@%:@define _POSIX_SOURCE 1\" >>confdefs.h\n\n    \n$as_echo \"@%:@define _POSIX_1_SOURCE 2\" >>confdefs.h\n\n    \n$as_echo \"@%:@define _MINIX 1\" >>confdefs.h\n\n  fi\n\n  \n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__\" >&5\n$as_echo_n \"checking whether it is safe to define __EXTENSIONS__... \" >&6; }\nif test \"${ac_cv_safe_to_define___extensions__+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#\t  define __EXTENSIONS__ 1\n\t  $ac_includes_default\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_safe_to_define___extensions__=yes\nelse\n  ac_cv_safe_to_define___extensions__=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__\" >&5\n$as_echo \"$ac_cv_safe_to_define___extensions__\" >&6; }\n  test $ac_cv_safe_to_define___extensions__ = yes &&\n    $as_echo \"@%:@define __EXTENSIONS__ 1\" >>confdefs.h\n\n  $as_echo \"@%:@define _ALL_SOURCE 1\" >>confdefs.h\n\n  $as_echo \"@%:@define _GNU_SOURCE 1\" >>confdefs.h\n\n  $as_echo \"@%:@define _POSIX_PTHREAD_SEMANTICS 1\" >>confdefs.h\n\n  $as_echo \"@%:@define _TANDEM_SOURCE 1\" >>confdefs.h\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing strerror\" >&5\n$as_echo_n \"checking for library containing strerror... \" >&6; }\nif test \"${ac_cv_search_strerror+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar strerror ();\nint\nmain ()\n{\nreturn strerror ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' cposix; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_strerror=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_strerror+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_strerror+set}\" = set; then :\n  \nelse\n  ac_cv_search_strerror=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror\" >&5\n$as_echo \"$ac_cv_search_strerror\" >&6; }\nac_res=$ac_cv_search_strerror\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n  \nfi\n\n\n\n# Needed for ansi2knr\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for function prototypes\" >&5\n$as_echo_n \"checking for function prototypes... \" >&6; }\nif test \"$ac_cv_prog_cc_c89\" != no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n  \n$as_echo \"@%:@define PROTOTYPES 1\" >>confdefs.h\n\n  \n$as_echo \"@%:@define __PROTOTYPES 1\" >>confdefs.h\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n  U= ANSI2KNR=\nelse\n  U=_ ANSI2KNR=./ansi2knr\nfi\n# Ensure some checks needed by ansi2knr itself.\n\nfor ac_header in string.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"string.h\" \"ac_cv_header_string_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_string_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_STRING_H 1\n_ACEOF\n \nfi\n\ndone\n\n\n\n# Enable gettext, in \"external\" mode.\n\n\n\n        MKINSTALLDIRS=\n  if test -n \"$ac_aux_dir\"; then\n    case \"$ac_aux_dir\" in\n      /*) MKINSTALLDIRS=\"$ac_aux_dir/mkinstalldirs\" ;;\n      *) MKINSTALLDIRS=\"\\$(top_builddir)/$ac_aux_dir/mkinstalldirs\" ;;\n    esac\n  fi\n  if test -z \"$MKINSTALLDIRS\"; then\n    MKINSTALLDIRS=\"\\$(top_srcdir)/mkinstalldirs\"\n  fi\n  \n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether NLS is requested\" >&5\n$as_echo_n \"checking whether NLS is requested... \" >&6; }\n    @%:@ Check whether --enable-nls was given.\nif test \"${enable_nls+set}\" = set; then :\n  enableval=$enable_nls; USE_NLS=$enableval\nelse\n  USE_NLS=yes\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n  \n\n\n        \n    \n        \n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"msgfmt\", so it can be a program name with args.\nset dummy msgfmt; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_MSGFMT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$MSGFMT\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_MSGFMT=\"$MSGFMT\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n            ac_cv_path_MSGFMT=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_MSGFMT\" && ac_cv_path_MSGFMT=\":\"\n    ;;\nesac\nfi\nMSGFMT=\"$ac_cv_path_MSGFMT\"\nif test \"$MSGFMT\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MSGFMT\" >&5\n$as_echo \"$MSGFMT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  # Extract the first word of \"gmsgfmt\", so it can be a program name with args.\nset dummy gmsgfmt; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_GMSGFMT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $GMSGFMT in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_GMSGFMT=\"$GMSGFMT\" # Let the user override the test with a path.\n  ;;\n  *)\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_path_GMSGFMT=\"$as_dir/$ac_word$ac_exec_ext\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_path_GMSGFMT\" && ac_cv_path_GMSGFMT=\"$MSGFMT\"\n  ;;\nesac\nfi\nGMSGFMT=$ac_cv_path_GMSGFMT\nif test -n \"$GMSGFMT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $GMSGFMT\" >&5\n$as_echo \"$GMSGFMT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n        \n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"xgettext\", so it can be a program name with args.\nset dummy xgettext; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_XGETTEXT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$XGETTEXT\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_XGETTEXT=\"$XGETTEXT\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n            ac_cv_path_XGETTEXT=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_XGETTEXT\" && ac_cv_path_XGETTEXT=\":\"\n    ;;\nesac\nfi\nXGETTEXT=\"$ac_cv_path_XGETTEXT\"\nif test \"$XGETTEXT\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $XGETTEXT\" >&5\n$as_echo \"$XGETTEXT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n    rm -f messages.po\n\n    \n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"msgmerge\", so it can be a program name with args.\nset dummy msgmerge; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_MSGMERGE+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$MSGMERGE\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_MSGMERGE=\"$MSGMERGE\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then\n            ac_cv_path_MSGMERGE=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_MSGMERGE\" && ac_cv_path_MSGMERGE=\":\"\n    ;;\nesac\nfi\nMSGMERGE=\"$ac_cv_path_MSGMERGE\"\nif test \"$MSGMERGE\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MSGMERGE\" >&5\n$as_echo \"$MSGMERGE\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n      if test \"$GMSGFMT\" != \":\"; then\n            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&\n       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      GMSGFMT=`echo \"$GMSGFMT\" | sed -e 's,^.*/,,'`\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it\" >&5\n$as_echo \"found $GMSGFMT program is not GNU msgfmt; ignore it\" >&6; }\n      GMSGFMT=\":\"\n    fi\n  fi\n\n      if test \"$XGETTEXT\" != \":\"; then\n            if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it\" >&5\n$as_echo \"found xgettext program is not GNU xgettext; ignore it\" >&6; }\n      XGETTEXT=\":\"\n    fi\n        rm -f messages.po\n  fi\n\n  ac_config_commands=\"$ac_config_commands default-1\"\n\n\n\n      if test \"X$prefix\" = \"XNONE\"; then\n    acl_final_prefix=\"$ac_default_prefix\"\n  else\n    acl_final_prefix=\"$prefix\"\n  fi\n  if test \"X$exec_prefix\" = \"XNONE\"; then\n    acl_final_exec_prefix='${prefix}'\n  else\n    acl_final_exec_prefix=\"$exec_prefix\"\n  fi\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  eval acl_final_exec_prefix=\\\"$acl_final_exec_prefix\\\"\n  prefix=\"$acl_save_prefix\"\n\n\n@%:@ Check whether --with-gnu-ld was given.\nif test \"${with_gnu_ld+set}\" = set; then :\n  withval=$with_gnu_ld; test \"$withval\" = no || with_gnu_ld=yes\nelse\n  with_gnu_ld=no\nfi\n\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ld used by GCC\" >&5\n$as_echo_n \"checking for ld used by GCC... \" >&6; }\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [\\\\/]* | [A-Za-z]:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the path of ld\n      ac_prog=`echo $ac_prog| sed 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| sed \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU ld\" >&5\n$as_echo_n \"checking for GNU ld... \" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for non-GNU ld\" >&5\n$as_echo_n \"checking for non-GNU ld... \" >&6; }\nfi\nif test \"${acl_cv_path_LD+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$LD\"; then\n  IFS=\"${IFS= \t}\"; ac_save_ifs=\"$IFS\"; IFS=\"${IFS}${PATH_SEPARATOR-:}\"\n  for ac_dir in $PATH; do\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      acl_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some GNU ld's only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$acl_cv_path_LD\" -v 2>&1 < /dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break ;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break ;;\n      esac\n    fi\n  done\n  IFS=\"$ac_save_ifs\"\nelse\n  acl_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$acl_cv_path_LD\"\nif test -n \"$LD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LD\" >&5\n$as_echo \"$LD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\ntest -z \"$LD\" && as_fn_error \"no acceptable ld found in \\$PATH\" \"$LINENO\" 5\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld\" >&5\n$as_echo_n \"checking if the linker ($LD) is GNU ld... \" >&6; }\nif test \"${acl_cv_prog_gnu_ld+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU ld's only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  acl_cv_prog_gnu_ld=yes ;;\n*)\n  acl_cv_prog_gnu_ld=no ;;\nesac\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld\" >&5\n$as_echo \"$acl_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$acl_cv_prog_gnu_ld\n\n\n\n                                                { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for shared library run path origin\" >&5\n$as_echo_n \"checking for shared library run path origin... \" >&6; }\nif test \"${acl_cv_rpath+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n    CC=\"$CC\" GCC=\"$GCC\" LDFLAGS=\"$LDFLAGS\" LD=\"$LD\" with_gnu_ld=\"$with_gnu_ld\" \\\n    ${CONFIG_SHELL-/bin/sh} \"$ac_aux_dir/config.rpath\" \"$host\" > conftest.sh\n    . ./conftest.sh\n    rm -f ./conftest.sh\n    acl_cv_rpath=done\n  \nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath\" >&5\n$as_echo \"$acl_cv_rpath\" >&6; }\n  wl=\"$acl_cv_wl\"\n  libext=\"$acl_cv_libext\"\n  shlibext=\"$acl_cv_shlibext\"\n  hardcode_libdir_flag_spec=\"$acl_cv_hardcode_libdir_flag_spec\"\n  hardcode_libdir_separator=\"$acl_cv_hardcode_libdir_separator\"\n  hardcode_direct=\"$acl_cv_hardcode_direct\"\n  hardcode_minus_L=\"$acl_cv_hardcode_minus_L\"\n    @%:@ Check whether --enable-rpath was given.\nif test \"${enable_rpath+set}\" = set; then :\n  enableval=$enable_rpath; :\nelse\n  enable_rpath=yes\nfi\n\n\n\n    \n  \n\n      \n  \n    use_additional=yes\n  \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  \n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  \n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n  \n@%:@ Check whether --with-libiconv-prefix was given.\nif test \"${with_libiconv_prefix+set}\" = set; then :\n  withval=$with_libiconv_prefix; \n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  \n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        \n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n\nfi\n\n      LIBICONV=\n  LTLIBICONV=\n  INCICONV=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='iconv '\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n                        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIBICONV=\"${LIBICONV}${LIBICONV:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }$value\"\n          else\n                                    :\n          fi\n        else\n                              found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIBICONV; do\n              \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n                        LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n                                                        if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n              else\n                                                                                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                                if test \"$hardcode_direct\" = yes; then\n                                                      LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                                                            LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                                                            haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                                                                                haveit=\n                    for x in $LDFLAGS $LIBICONV; do\n                      \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                                                                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                    else\n                                                                                                                                                                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_a\"\n              else\n                                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name\"\n              fi\n            fi\n                        additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n                                                                                                                if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux*) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INCICONV; do\n                    \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                                            INCICONV=\"${INCICONV}${INCICONV:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n                        if test -n \"$found_la\"; then\n                                                        save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n                            for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                                                                                                                                                                if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux*) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIBICONV; do\n                          \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIBICONV; do\n                          \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                                                                  haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                                                                  haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                                        names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                                                                                names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$dep\"\n                    LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n                                                            LIBICONV=\"${LIBICONV}${LIBICONV:+ }-l$name\"\n            LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n                        alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n            acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIBICONV=\"${LIBICONV}${LIBICONV:+ }$flag\"\n    else\n            for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n            for found_dir in $ltrpathdirs; do\n      LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir\"\n    done\n  fi\n\n\n\n    \n  \n  \n  \n\n    \n\n    \n  \n\n                        \n    \n  \n\n    \n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether NLS is requested\" >&5\n$as_echo_n \"checking whether NLS is requested... \" >&6; }\n    @%:@ Check whether --enable-nls was given.\nif test \"${enable_nls+set}\" = set; then :\n  enableval=$enable_nls; USE_NLS=$enableval\nelse\n  USE_NLS=yes\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n  \n\n\n  \n  LIBINTL=\n  LTLIBINTL=\n  POSUB=\n\n    if test \"$USE_NLS\" = \"yes\"; then\n    gt_use_preinstalled_gnugettext=no\n    \n                        \n                \n        \n        \n\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc\" >&5\n$as_echo_n \"checking for GNU gettext in libc... \" >&6; }\nif test \"${gt_cv_func_gnugettext1_libc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern int *_nl_domain_bindings;\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_domain_bindings\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  gt_cv_func_gnugettext1_libc=yes\nelse\n  gt_cv_func_gnugettext1_libc=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc\" >&5\n$as_echo \"$gt_cv_func_gnugettext1_libc\" >&6; }\n\n        if test \"$gt_cv_func_gnugettext1_libc\" != \"yes\"; then\n                    \n            \n    \n      \n\n          am_save_CPPFLAGS=\"$CPPFLAGS\"\n  \n  for element in $INCICONV; do\n    haveit=\n    for x in $CPPFLAGS; do\n      \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }$element\"\n    fi\n  done\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for iconv\" >&5\n$as_echo_n \"checking for iconv... \" >&6; }\nif test \"${am_cv_func_iconv+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n    am_cv_func_iconv=\"no, consider installing GNU libiconv\"\n    am_cv_lib_iconv=no\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <iconv.h>\nint\nmain ()\n{\niconv_t cd = iconv_open(\"\",\"\");\n       iconv(cd,NULL,NULL,NULL,NULL);\n       iconv_close(cd);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  am_cv_func_iconv=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n    if test \"$am_cv_func_iconv\" != yes; then\n      am_save_LIBS=\"$LIBS\"\n      LIBS=\"$LIBS $LIBICONV\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <iconv.h>\nint\nmain ()\n{\niconv_t cd = iconv_open(\"\",\"\");\n         iconv(cd,NULL,NULL,NULL,NULL);\n         iconv_close(cd);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  am_cv_lib_iconv=yes\n        am_cv_func_iconv=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n      LIBS=\"$am_save_LIBS\"\n    fi\n  \nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv\" >&5\n$as_echo \"$am_cv_func_iconv\" >&6; }\n  if test \"$am_cv_func_iconv\" = yes; then\n    \n$as_echo \"@%:@define HAVE_ICONV 1\" >>confdefs.h\n\n  fi\n  if test \"$am_cv_lib_iconv\" = yes; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to link with libiconv\" >&5\n$as_echo_n \"checking how to link with libiconv... \" >&6; }\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIBICONV\" >&5\n$as_echo \"$LIBICONV\" >&6; }\n  else\n            CPPFLAGS=\"$am_save_CPPFLAGS\"\n    LIBICONV=\n    LTLIBICONV=\n  fi\n  \n  \n\n          \n                                                  \n  \n    use_additional=yes\n  \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  \n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  \n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n  \n@%:@ Check whether --with-libintl-prefix was given.\nif test \"${with_libintl_prefix+set}\" = set; then :\n  withval=$with_libintl_prefix; \n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  \n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        \n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n\nfi\n\n      LIBINTL=\n  LTLIBINTL=\n  INCINTL=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='intl '\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n                        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIBINTL=\"${LIBINTL}${LIBINTL:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }$value\"\n          else\n                                    :\n          fi\n        else\n                              found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIBINTL; do\n              \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n                        LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n                                                        if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n              else\n                                                                                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                                if test \"$hardcode_direct\" = yes; then\n                                                      LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                                                            LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                                                            haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                                                                                haveit=\n                    for x in $LDFLAGS $LIBINTL; do\n                      \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                                                                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                    else\n                                                                                                                                                                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_a\"\n              else\n                                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name\"\n              fi\n            fi\n                        additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n                                                                                                                if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux*) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INCINTL; do\n                    \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                                            INCINTL=\"${INCINTL}${INCINTL:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n                        if test -n \"$found_la\"; then\n                                                        save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n                            for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                                                                                                                                                                if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux*) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIBINTL; do\n                          \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIBINTL; do\n                          \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                                                                  haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                                                                  haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                                        names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                                                                                names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$dep\"\n                    LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n                                                            LIBINTL=\"${LIBINTL}${LIBINTL:+ }-l$name\"\n            LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n                        alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n            acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIBINTL=\"${LIBINTL}${LIBINTL:+ }$flag\"\n    else\n            for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n            for found_dir in $ltrpathdirs; do\n      LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir\"\n    done\n  fi\n\n          { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl\" >&5\n$as_echo_n \"checking for GNU gettext in libintl... \" >&6; }\nif test \"${gt_cv_func_gnugettext1_libintl+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  gt_save_CPPFLAGS=\"$CPPFLAGS\"\n            CPPFLAGS=\"$CPPFLAGS $INCINTL\"\n            gt_save_LIBS=\"$LIBS\"\n            LIBS=\"$LIBS $LIBINTL\"\n                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_expand_alias (0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  gt_cv_func_gnugettext1_libintl=yes\nelse\n  gt_cv_func_gnugettext1_libintl=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n                        if test \"$gt_cv_func_gnugettext1_libintl\" != yes && test -n \"$LIBICONV\"; then\n              LIBS=\"$LIBS $LIBICONV\"\n              cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_expand_alias (0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  LIBINTL=\"$LIBINTL $LIBICONV\"\n                LTLIBINTL=\"$LTLIBINTL $LTLIBICONV\"\n                gt_cv_func_gnugettext1_libintl=yes\n               \nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n            fi\n            CPPFLAGS=\"$gt_save_CPPFLAGS\"\n            LIBS=\"$gt_save_LIBS\"\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl\" >&5\n$as_echo \"$gt_cv_func_gnugettext1_libintl\" >&6; }\n        fi\n\n                                        if test \"$gt_cv_func_gnugettext1_libc\" = \"yes\" \\\n           || { test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\" \\\n                && test \"$PACKAGE\" != gettext-runtime \\\n                && test \"$PACKAGE\" != gettext-tools; }; then\n          gt_use_preinstalled_gnugettext=yes\n        else\n                    LIBINTL=\n          LTLIBINTL=\n          INCINTL=\n        fi\n\n    \n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\" \\\n       || test \"$nls_cv_use_gnu_gettext\" = \"yes\"; then\n      \n$as_echo \"@%:@define ENABLE_NLS 1\" >>confdefs.h\n\n    else\n      USE_NLS=no\n    fi\n  fi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to use NLS\" >&5\n$as_echo_n \"checking whether to use NLS... \" >&6; }\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n  if test \"$USE_NLS\" = \"yes\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from\" >&5\n$as_echo_n \"checking where the gettext function comes from... \" >&6; }\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\"; then\n        gt_source=\"external libintl\"\n      else\n        gt_source=\"libc\"\n      fi\n    else\n      gt_source=\"included intl directory\"\n    fi\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_source\" >&5\n$as_echo \"$gt_source\" >&6; }\n  fi\n\n  if test \"$USE_NLS\" = \"yes\"; then\n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\"; then\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to link with libintl\" >&5\n$as_echo_n \"checking how to link with libintl... \" >&6; }\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIBINTL\" >&5\n$as_echo \"$LIBINTL\" >&6; }\n        \n  for element in $INCINTL; do\n    haveit=\n    for x in $CPPFLAGS; do\n      \n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }$element\"\n    fi\n  done\n\n      fi\n\n            \n$as_echo \"@%:@define HAVE_GETTEXT 1\" >>confdefs.h\n\n      \n$as_echo \"@%:@define HAVE_DCGETTEXT 1\" >>confdefs.h\n\n    fi\n\n        POSUB=po\n  fi\n\n  \n\n    INTLLIBS=\"$LIBINTL\"\n  \n\n    \n  \n  \n\n\n# This test must come as early as possible after the compiler configuration\n# tests, because the choice of the file model can (in principle) affect\n# whether functions and headers are available, whether they work, etc.\n@%:@ Check whether --enable-largefile was given.\nif test \"${enable_largefile+set}\" = set; then :\n  enableval=$enable_largefile; \nfi\n\nif test \"$enable_largefile\" != no; then\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files\" >&5\n$as_echo_n \"checking for special C compiler options needed for large files... \" >&6; }\nif test \"${ac_cv_sys_largefile_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_sys_largefile_CC=no\n     if test \"$GCC\" != yes; then\n       ac_save_CC=$CC\n       while :; do\n\t # IRIX 6.2 and later do not support large files by default,\n\t # so use the C compiler's -n32 option if that helps.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\n\t if ac_fn_c_try_compile \"$LINENO\"; then :\n  break\nfi\nrm -f core conftest.err conftest.$ac_objext\n\t CC=\"$CC -n32\"\n\t if ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_largefile_CC=' -n32'; break\nfi\nrm -f core conftest.err conftest.$ac_objext\n\t break\n       done\n       CC=$ac_save_CC\n       rm -f conftest.$ac_ext\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC\" >&5\n$as_echo \"$ac_cv_sys_largefile_CC\" >&6; }\n  if test \"$ac_cv_sys_largefile_CC\" != no; then\n    CC=$CC$ac_cv_sys_largefile_CC\n  fi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files\" >&5\n$as_echo_n \"checking for _FILE_OFFSET_BITS value needed for large files... \" >&6; }\nif test \"${ac_cv_sys_file_offset_bits+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  while :; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_file_offset_bits=no; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@define _FILE_OFFSET_BITS 64\n@%:@include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_file_offset_bits=64; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  ac_cv_sys_file_offset_bits=unknown\n  break\ndone\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits\" >&5\n$as_echo \"$ac_cv_sys_file_offset_bits\" >&6; }\ncase $ac_cv_sys_file_offset_bits in #(\n  no | unknown) ;;\n  *) \ncat >>confdefs.h <<_ACEOF\n@%:@define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits\n_ACEOF\n;;\nesac\nrm -rf conftest*\n  if test $ac_cv_sys_file_offset_bits = unknown; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files\" >&5\n$as_echo_n \"checking for _LARGE_FILES value needed for large files... \" >&6; }\nif test \"${ac_cv_sys_large_files+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  while :; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_large_files=no; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@define _LARGE_FILES 1\n@%:@include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_large_files=1; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  ac_cv_sys_large_files=unknown\n  break\ndone\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files\" >&5\n$as_echo \"$ac_cv_sys_large_files\" >&6; }\ncase $ac_cv_sys_large_files in #(\n  no | unknown) ;;\n  *) \ncat >>confdefs.h <<_ACEOF\n@%:@define _LARGE_FILES $ac_cv_sys_large_files\n_ACEOF\n;;\nesac\nrm -rf conftest*\n  fi\nfi\n\n\n# Checks for libraries.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing getpwnam\" >&5\n$as_echo_n \"checking for library containing getpwnam... \" >&6; }\nif test \"${ac_cv_search_getpwnam+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getpwnam ();\nint\nmain ()\n{\nreturn getpwnam ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' sun; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_getpwnam=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_getpwnam+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_getpwnam+set}\" = set; then :\n  \nelse\n  ac_cv_search_getpwnam=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getpwnam\" >&5\n$as_echo \"$ac_cv_search_getpwnam\" >&6; }\nac_res=$ac_cv_search_getpwnam\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n  \nfi\n\n\n# Checks for header files.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ANSI C header files\" >&5\n$as_echo_n \"checking for ANSI C header files... \" >&6; }\nif test \"${ac_cv_header_stdc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <float.h>\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stdc=yes\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test $ac_cv_header_stdc = yes; then\n  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <string.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"memchr\" >/dev/null 2>&1; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"free\" >/dev/null 2>&1; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.\n  if test \"$cross_compiling\" = yes; then :\n  :\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ctype.h>\n#include <stdlib.h>\n#if ((' ' & 0x0FF) == 0x020)\n# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')\n# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))\n#else\n# define ISLOWER(c) \\\n\t\t   (('a' <= (c) && (c) <= 'i') \\\n\t\t     || ('j' <= (c) && (c) <= 'r') \\\n\t\t     || ('s' <= (c) && (c) <= 'z'))\n# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))\n#endif\n\n#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))\nint\nmain ()\n{\n  int i;\n  for (i = 0; i < 256; i++)\n    if (XOR (islower (i), ISLOWER (i))\n\t|| toupper (i) != TOUPPER (i))\n      return 2;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  \nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc\" >&5\n$as_echo \"$ac_cv_header_stdc\" >&6; }\nif test $ac_cv_header_stdc = yes; then\n  \n$as_echo \"@%:@define STDC_HEADERS 1\" >>confdefs.h\n\nfi\n\nac_header_dirent=no\nfor ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do\n  as_ac_Header=`$as_echo \"ac_cv_header_dirent_$ac_hdr\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR\" >&5\n$as_echo_n \"checking for $ac_hdr that defines DIR... \" >&6; }\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <$ac_hdr>\n\nint\nmain ()\n{\nif ((DIR *) 0)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_ac_Header=yes\"\nelse\n  eval \"$as_ac_Header=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$as_ac_Header\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_hdr\" | $as_tr_cpp` 1\n_ACEOF\n\nac_header_dirent=$ac_hdr; break\nfi\n\ndone\n# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.\nif test $ac_header_dirent = dirent.h; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing opendir\" >&5\n$as_echo_n \"checking for library containing opendir... \" >&6; }\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar opendir ();\nint\nmain ()\n{\nreturn opendir ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' dir; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_opendir=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_opendir+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  \nelse\n  ac_cv_search_opendir=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir\" >&5\n$as_echo \"$ac_cv_search_opendir\" >&6; }\nac_res=$ac_cv_search_opendir\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n  \nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing opendir\" >&5\n$as_echo_n \"checking for library containing opendir... \" >&6; }\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar opendir ();\nint\nmain ()\n{\nreturn opendir ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' x; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_opendir=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_opendir+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  \nelse\n  ac_cv_search_opendir=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir\" >&5\n$as_echo \"$ac_cv_search_opendir\" >&6; }\nac_res=$ac_cv_search_opendir\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n  \nfi\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken\" >&5\n$as_echo_n \"checking whether stat file-mode macros are broken... \" >&6; }\nif test \"${ac_cv_header_stat_broken+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/stat.h>\n\n#if defined S_ISBLK && defined S_IFDIR\nextern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];\n#endif\n\n#if defined S_ISBLK && defined S_IFCHR\nextern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];\n#endif\n\n#if defined S_ISLNK && defined S_IFREG\nextern char c3[S_ISLNK (S_IFREG) ? -1 : 1];\n#endif\n\n#if defined S_ISSOCK && defined S_IFREG\nextern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stat_broken=no\nelse\n  ac_cv_header_stat_broken=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken\" >&5\n$as_echo \"$ac_cv_header_stat_broken\" >&6; }\nif test $ac_cv_header_stat_broken = yes; then\n  \n$as_echo \"@%:@define STAT_MACROS_BROKEN 1\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included\" >&5\n$as_echo_n \"checking whether time.h and sys/time.h may both be included... \" >&6; }\nif test \"${ac_cv_header_time+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/time.h>\n#include <time.h>\n\nint\nmain ()\n{\nif ((struct tm *) 0)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_time=yes\nelse\n  ac_cv_header_time=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time\" >&5\n$as_echo \"$ac_cv_header_time\" >&6; }\nif test $ac_cv_header_time = yes; then\n  \n$as_echo \"@%:@define TIME_WITH_SYS_TIME 1\" >>confdefs.h\n\nfi\n\nfor ac_header in stdlib.h locale.h unistd.h limits.h fcntl.h string.h \\\n\t\t memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_mongrel \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n \nfi\n\ndone\n\n\n# Set a flag if we have an ANSI C compiler\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n  \n$as_echo \"@%:@define HAVE_ANSI_COMPILER 1\" >>confdefs.h\n\nfi\n\n\n# Determine what kind of variadic function calls we support\nfor ac_header in stdarg.h varargs.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_mongrel \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n break\nfi\n\ndone\n\n\nif test \"x$CC\" != xcc; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together\" >&5\n$as_echo_n \"checking whether $CC and cc understand -c and -o together... \" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together\" >&5\n$as_echo_n \"checking whether cc understands -c and -o together... \" >&6; }\nfi\nset dummy $CC; ac_cc=`$as_echo \"$2\" |\n\t\t      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`\nif { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\n# Make sure it works both with $CC and with simple cc.\n# We do the test twice because some compilers refuse to overwrite an\n# existing .o file with -o, though they will create one.\nac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'\nrm -f conftest2.*\nif { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } &&\n   test -f conftest2.$ac_objext && { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; };\nthen\n  eval ac_cv_prog_cc_${ac_cc}_c_o=yes\n  if test \"x$CC\" != xcc; then\n    # Test first that cc exists at all.\n    if { ac_try='cc -c conftest.$ac_ext >&5'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then\n      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'\n      rm -f conftest2.*\n      if { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } &&\n\t test -f conftest2.$ac_objext && { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; };\n      then\n\t# cc works too.\n\t:\n      else\n\t# cc exists but doesn't like -o.\n\teval ac_cv_prog_cc_${ac_cc}_c_o=no\n      fi\n    fi\n  fi\nelse\n  eval ac_cv_prog_cc_${ac_cc}_c_o=no\nfi\nrm -f core conftest*\n\nfi\nif eval test \\$ac_cv_prog_cc_${ac_cc}_c_o = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n  \n$as_echo \"@%:@define NO_MINUS_C_MINUS_O 1\" >>confdefs.h\n\nfi\n\n# FIXME: we rely on the cache variable name because\n# there is no other way.\nset dummy $CC\nac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`\nif eval \"test \\\"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\\\" != yes\"; then\n   # Losing compiler, so override with the script.\n   # FIXME: It is wrong to rewrite CC.\n   # But if we don't then we get into trouble of one sort or another.\n   # A longer-term fix would be to have automake use am__CC in this case,\n   # and then we could set am__CC=\"\\$(top_srcdir)/compile \\$(CC)\"\n   CC=\"$am_aux_dir/compile $CC\"\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const\" >&5\n$as_echo_n \"checking for an ANSI C-conforming const... \" >&6; }\nif test \"${ac_cv_c_const+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n/* FIXME: Include the comments suggested by Paul. */\n#ifndef __cplusplus\n  /* Ultrix mips cc rejects this.  */\n  typedef int charset[2];\n  const charset cs;\n  /* SunOS 4.1.1 cc rejects this.  */\n  char const *const *pcpcc;\n  char **ppc;\n  /* NEC SVR4.0.2 mips cc rejects this.  */\n  struct point {int x, y;};\n  static struct point const zero = {0,0};\n  /* AIX XL C 1.02.0.0 rejects this.\n     It does not let you subtract one const X* pointer from another in\n     an arm of an if-expression whose if-part is not a constant\n     expression */\n  const char *g = \"string\";\n  pcpcc = &g + (g ? g-g : 0);\n  /* HPUX 7.0 cc rejects these. */\n  ++pcpcc;\n  ppc = (char**) pcpcc;\n  pcpcc = (char const *const *) ppc;\n  { /* SCO 3.2v4 cc rejects this.  */\n    char *t;\n    char const *s = 0 ? (char *) 0 : (char const *) 0;\n\n    *t++ = 0;\n    if (s) return 0;\n  }\n  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */\n    int x[] = {25, 17};\n    const int *foo = &x[0];\n    ++foo;\n  }\n  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */\n    typedef const int *iptr;\n    iptr p = 0;\n    ++p;\n  }\n  { /* AIX XL C 1.02.0.0 rejects this saying\n       \"k.c\", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */\n    struct s { int j; const int *ap[3]; };\n    struct s *b; b->j = 5;\n  }\n  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */\n    const int foo = 10;\n    if (!foo) return 0;\n  }\n  return !cs[0] && !zero.x;\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_const=yes\nelse\n  ac_cv_c_const=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const\" >&5\n$as_echo \"$ac_cv_c_const\" >&6; }\nif test $ac_cv_c_const = no; then\n  \n$as_echo \"@%:@define const /**/\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking return type of signal handlers\" >&5\n$as_echo_n \"checking return type of signal handlers... \" >&6; }\nif test \"${ac_cv_type_signal+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <signal.h>\n\nint\nmain ()\n{\nreturn *(signal (0, 0)) (0) == 1;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_type_signal=int\nelse\n  ac_cv_type_signal=void\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal\" >&5\n$as_echo \"$ac_cv_type_signal\" >&6; }\n\ncat >>confdefs.h <<_ACEOF\n@%:@define RETSIGTYPE $ac_cv_type_signal\n_ACEOF\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h\" >&5\n$as_echo_n \"checking for uid_t in sys/types.h... \" >&6; }\nif test \"${ac_cv_type_uid_t+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"uid_t\" >/dev/null 2>&1; then :\n  ac_cv_type_uid_t=yes\nelse\n  ac_cv_type_uid_t=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t\" >&5\n$as_echo \"$ac_cv_type_uid_t\" >&6; }\nif test $ac_cv_type_uid_t = no; then\n  \n$as_echo \"@%:@define uid_t int\" >>confdefs.h\n\n  \n$as_echo \"@%:@define gid_t int\" >>confdefs.h\n\nfi\n\nac_fn_c_check_type \"$LINENO\" \"pid_t\" \"ac_cv_type_pid_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_pid_t\" = x\"\"yes; then :\n  \nelse\n  \ncat >>confdefs.h <<_ACEOF\n@%:@define pid_t int\n_ACEOF\n\nfi\n\n\n# Find some definition for uintmax_t\n\nac_fn_c_check_type \"$LINENO\" \"uintmax_t\" \"ac_cv_type_uintmax_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_uintmax_t\" = x\"\"yes; then :\n  \nelse\n  \n  uintmax_t=\"unsigned long\"\n  ac_fn_c_check_type \"$LINENO\" \"unsigned long long\" \"ac_cv_type_unsigned_long_long\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_unsigned_long_long\" = x\"\"yes; then :\n  uintmax_t=\"unsigned long long\"\nfi\n\n  \ncat >>confdefs.h <<_ACEOF\n@%:@define uintmax_t $uintmax_t\n_ACEOF\n\nfi\n\n\n# Find out whether our struct stat returns nanosecond resolution timestamps.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for nanoseconds field of struct stat.st_mtim\" >&5\n$as_echo_n \"checking for nanoseconds field of struct stat.st_mtim... \" >&6; }\nif test \"${ac_cv_struct_st_mtim_nsec+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_save_CPPFLAGS=\"$CPPFLAGS\"\n    ac_cv_struct_st_mtim_nsec=no\n    # tv_nsec -- the usual case\n    # _tv_nsec -- Solaris 2.6, if\n    #\t(defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1\n    #\t && !defined __EXTENSIONS__)\n    # st__tim.tv_nsec -- UnixWare 2.1.2\n    for ac_val in tv_nsec _tv_nsec st__tim.tv_nsec; do\n      CPPFLAGS=\"$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/stat.h>\n\t\nint\nmain ()\n{\nstruct stat s; s.st_mtim.ST_MTIM_NSEC;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_struct_st_mtim_nsec=$ac_val; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n    done\n    CPPFLAGS=\"$ac_save_CPPFLAGS\"\n   \nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_st_mtim_nsec\" >&5\n$as_echo \"$ac_cv_struct_st_mtim_nsec\" >&6; }\n\n  if test $ac_cv_struct_st_mtim_nsec != no; then\n    \ncat >>confdefs.h <<_ACEOF\n@%:@define ST_MTIM_NSEC $ac_cv_struct_st_mtim_nsec\n_ACEOF\n\n  fi\n \n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to use high resolution file timestamps\" >&5\n$as_echo_n \"checking whether to use high resolution file timestamps... \" >&6; }\nif test \"${make_cv_file_timestamp_hi_res+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n  make_cv_file_timestamp_hi_res=no\n  if test \"$ac_cv_struct_st_mtim_nsec\" != no; then\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#\tif HAVE_INTTYPES_H\n#\t include <inttypes.h>\n#\tendif\nint\nmain ()\n{\nchar a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_file_timestamp_hi_res=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  fi\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_file_timestamp_hi_res\" >&5\n$as_echo \"$make_cv_file_timestamp_hi_res\" >&6; }\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  val=1\nelse\n  val=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n@%:@define FILE_TIMESTAMP_HI_RES $val\n_ACEOF\n\n\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.\n  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime\" >&5\n$as_echo_n \"checking for library containing clock_gettime... \" >&6; }\nif test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar clock_gettime ();\nint\nmain ()\n{\nreturn clock_gettime ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' rt posix4; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_clock_gettime=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n  \nelse\n  ac_cv_search_clock_gettime=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime\" >&5\n$as_echo \"$ac_cv_search_clock_gettime\" >&6; }\nac_res=$ac_cv_search_clock_gettime\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n  \nfi\n\n  if test \"$ac_cv_search_clock_gettime\" != no; then\n    \n$as_echo \"@%:@define HAVE_CLOCK_GETTIME 1\" >>confdefs.h\n\n  fi\nfi\n\n# Check for DOS-style pathnames.\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether system uses MSDOS-style paths\" >&5\n$as_echo_n \"checking whether system uses MSDOS-style paths... \" >&6; }\nif test \"${ac_cv_dos_paths+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__\nneither MSDOS nor Windows nor OS2\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_dos_paths=yes\nelse\n  ac_cv_dos_paths=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n      \nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_dos_paths\" >&5\n$as_echo \"$ac_cv_dos_paths\" >&6; }\n\n    if test x\"$ac_cv_dos_paths\" = xyes; then\n      \ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_DOS_PATHS 1\n_ACEOF\n\n    fi\n  \n\n# See if we have a standard version of gettimeofday().  Since actual\n# implementations can differ, just make sure we have the most common\n# one.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for standard gettimeofday\" >&5\n$as_echo_n \"checking for standard gettimeofday... \" >&6; }\nif test \"${ac_cv_func_gettimeofday+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_func_gettimeofday=no\n   if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_gettimeofday=\"no (cross-compiling)\"\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/time.h>\n                  int main ()\n\t          {\n\t\t    struct timeval t; t.tv_sec = -1; t.tv_usec = -1;\n\t\t    exit (gettimeofday (&t, 0) != 0\n\t\t          || t.tv_sec < 0 || t.tv_usec < 0);\n\t          }\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_gettimeofday=yes\nelse\n  ac_cv_func_gettimeofday=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_gettimeofday\" >&5\n$as_echo \"$ac_cv_func_gettimeofday\" >&6; }\nif test \"$ac_cv_func_gettimeofday\" = yes; then\n  \n$as_echo \"@%:@define HAVE_GETTIMEOFDAY 1\" >>confdefs.h\n\nfi\n\nfor ac_func in memcpy memmove strchr strdup mkstemp mktemp fdopen \\\n\t        bsd_signal dup2 getcwd realpath sigsetmask sigaction \\\n                getgroups seteuid setegid setlinebuf setreuid setregid \\\n                getrlimit setrlimit setvbuf pipe strerror strsignal \\\n\t\tlstat readlink atexit\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n \nfi\ndone\n\n\nif test \"${ac_cv_func_setvbuf_reversed+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_func_setvbuf_reversed=no\nfi\n\n\n\n# strcoll() is used by the GNU glob library\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working strcoll\" >&5\n$as_echo_n \"checking for working strcoll... \" >&6; }\nif test \"${ac_cv_func_strcoll_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_strcoll_works=no\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\nreturn (strcoll (\"abc\", \"def\") >= 0 ||\n\t strcoll (\"ABC\", \"DEF\") >= 0 ||\n\t strcoll (\"123\", \"456\") >= 0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_strcoll_works=yes\nelse\n  ac_cv_func_strcoll_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works\" >&5\n$as_echo \"$ac_cv_func_strcoll_works\" >&6; }\nif test $ac_cv_func_strcoll_works = yes; then\n  \n$as_echo \"@%:@define HAVE_STRCOLL 1\" >>confdefs.h\n\nfi\n\n\n# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works\n# for constant arguments.  Useless!\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working alloca.h\" >&5\n$as_echo_n \"checking for working alloca.h... \" >&6; }\nif test \"${ac_cv_working_alloca_h+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n@%:@include <alloca.h>\nint\nmain ()\n{\nchar *p = (char *) alloca (2 * sizeof (int));\n\t\t\t  if (p) return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_working_alloca_h=yes\nelse\n  ac_cv_working_alloca_h=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h\" >&5\n$as_echo \"$ac_cv_working_alloca_h\" >&6; }\nif test $ac_cv_working_alloca_h = yes; then\n  \n$as_echo \"@%:@define HAVE_ALLOCA_H 1\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for alloca\" >&5\n$as_echo_n \"checking for alloca... \" >&6; }\nif test \"${ac_cv_func_alloca_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifdef __GNUC__\n# define alloca __builtin_alloca\n#else\n# ifdef _MSC_VER\n#  include <malloc.h>\n#  define alloca _alloca\n# else\n#  ifdef HAVE_ALLOCA_H\n#   include <alloca.h>\n#  else\n#   ifdef _AIX\n #pragma alloca\n#   else\n#    ifndef alloca /* predefined by HP cc +Olibcalls */\nchar *alloca ();\n#    endif\n#   endif\n#  endif\n# endif\n#endif\n\nint\nmain ()\n{\nchar *p = (char *) alloca (1);\n\t\t\t\t    if (p) return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_func_alloca_works=yes\nelse\n  ac_cv_func_alloca_works=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works\" >&5\n$as_echo \"$ac_cv_func_alloca_works\" >&6; }\n\nif test $ac_cv_func_alloca_works = yes; then\n  \n$as_echo \"@%:@define HAVE_ALLOCA 1\" >>confdefs.h\n\nelse\n  # The SVR3 libPW and SVR4 libucb both contain incompatible functions\n# that cause trouble.  Some versions do not even contain alloca or\n# contain a buggy version.  If you still want to use their alloca,\n# use ar to extract alloca.o from them instead of compiling alloca.c.\n\nALLOCA=\\${LIBOBJDIR}alloca.$ac_objext\n\n$as_echo \"@%:@define C_ALLOCA 1\" >>confdefs.h\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether \\`alloca.c' needs Cray hooks\" >&5\n$as_echo_n \"checking whether \\`alloca.c' needs Cray hooks... \" >&6; }\nif test \"${ac_cv_os_cray+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#if defined CRAY && ! defined CRAY2\nwebecray\n#else\nwenotbecray\n#endif\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"webecray\" >/dev/null 2>&1; then :\n  ac_cv_os_cray=yes\nelse\n  ac_cv_os_cray=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray\" >&5\n$as_echo \"$ac_cv_os_cray\" >&6; }\nif test $ac_cv_os_cray = yes; then\n  for ac_func in _getb67 GETB67 getb67; do\n    as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  \ncat >>confdefs.h <<_ACEOF\n@%:@define CRAY_STACKSEG_END $ac_func\n_ACEOF\n\n    break\nfi\n\n  done\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca\" >&5\n$as_echo_n \"checking stack direction for C alloca... \" >&6; }\nif test \"${ac_cv_c_stack_direction+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_c_stack_direction=0\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nfind_stack_direction ()\n{\n  static char *addr = 0;\n  auto char dummy;\n  if (addr == 0)\n    {\n      addr = &dummy;\n      return find_stack_direction ();\n    }\n  else\n    return (&dummy > addr) ? 1 : -1;\n}\n\nint\nmain ()\n{\n  return find_stack_direction () < 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_c_stack_direction=1\nelse\n  ac_cv_c_stack_direction=-1\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction\" >&5\n$as_echo \"$ac_cv_c_stack_direction\" >&6; }\ncat >>confdefs.h <<_ACEOF\n@%:@define STACK_DIRECTION $ac_cv_c_stack_direction\n_ACEOF\n\n\nfi\n\nfor ac_header in vfork.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"vfork.h\" \"ac_cv_header_vfork_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_vfork_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_VFORK_H 1\n_ACEOF\n \nfi\n\ndone\n\nfor ac_func in fork vfork\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n \nfi\ndone\n\nif test \"x$ac_cv_func_fork\" = xyes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working fork\" >&5\n$as_echo_n \"checking for working fork... \" >&6; }\nif test \"${ac_cv_func_fork_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_fork_works=cross\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\n\n\t  /* By Ruediger Kuhlmann. */\n\t  return fork () < 0;\n\t\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_fork_works=yes\nelse\n  ac_cv_func_fork_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works\" >&5\n$as_echo \"$ac_cv_func_fork_works\" >&6; }\n\nelse\n  ac_cv_func_fork_works=$ac_cv_func_fork\nfi\nif test \"x$ac_cv_func_fork_works\" = xcross; then\n  case $host in\n    *-*-amigaos* | *-*-msdosdjgpp*)\n      # Override, as these systems have only a dummy fork() stub\n      ac_cv_func_fork_works=no\n      ;;\n    *)\n      ac_cv_func_fork_works=yes\n      ;;\n  esac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation\" >&5\n$as_echo \"$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation\" >&2;}\nfi\nac_cv_func_vfork_works=$ac_cv_func_vfork\nif test \"x$ac_cv_func_vfork\" = xyes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working vfork\" >&5\n$as_echo_n \"checking for working vfork... \" >&6; }\nif test \"${ac_cv_func_vfork_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_vfork_works=cross\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n/* Thanks to Paul Eggert for this test.  */\n$ac_includes_default\n#include <sys/wait.h>\n#ifdef HAVE_VFORK_H\n# include <vfork.h>\n#endif\n/* On some sparc systems, changes by the child to local and incoming\n   argument registers are propagated back to the parent.  The compiler\n   is told about this with #include <vfork.h>, but some compilers\n   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a\n   static variable whose address is put into a register that is\n   clobbered by the vfork.  */\nstatic void\n#ifdef __cplusplus\nsparc_address_test (int arg)\n# else\nsparc_address_test (arg) int arg;\n#endif\n{\n  static pid_t child;\n  if (!child) {\n    child = vfork ();\n    if (child < 0) {\n      perror (\"vfork\");\n      _exit(2);\n    }\n    if (!child) {\n      arg = getpid();\n      write(-1, \"\", 0);\n      _exit (arg);\n    }\n  }\n}\n\nint\nmain ()\n{\n  pid_t parent = getpid ();\n  pid_t child;\n\n  sparc_address_test (0);\n\n  child = vfork ();\n\n  if (child == 0) {\n    /* Here is another test for sparc vfork register problems.  This\n       test uses lots of local variables, at least as many local\n       variables as main has allocated so far including compiler\n       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris\n       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should\n       reuse the register of parent for one of the local variables,\n       since it will think that parent can't possibly be used any more\n       in this routine.  Assigning to the local variable will thus\n       munge parent in the parent process.  */\n    pid_t\n      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),\n      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();\n    /* Convince the compiler that p..p7 are live; otherwise, it might\n       use the same hardware register for all 8 local variables.  */\n    if (p != p1 || p != p2 || p != p3 || p != p4\n\t|| p != p5 || p != p6 || p != p7)\n      _exit(1);\n\n    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent\n       from child file descriptors.  If the child closes a descriptor\n       before it execs or exits, this munges the parent's descriptor\n       as well.  Test for this by closing stdout in the child.  */\n    _exit(close(fileno(stdout)) != 0);\n  } else {\n    int status;\n    struct stat st;\n\n    while (wait(&status) != child)\n      ;\n    return (\n\t /* Was there some problem with vforking?  */\n\t child < 0\n\n\t /* Did the child fail?  (This shouldn't happen.)  */\n\t || status\n\n\t /* Did the vfork/compiler bug occur?  */\n\t || parent != getpid()\n\n\t /* Did the file descriptor bug occur?  */\n\t || fstat(fileno(stdout), &st) != 0\n\t );\n  }\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_vfork_works=yes\nelse\n  ac_cv_func_vfork_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works\" >&5\n$as_echo \"$ac_cv_func_vfork_works\" >&6; }\n\nfi;\nif test \"x$ac_cv_func_fork_works\" = xcross; then\n  ac_cv_func_vfork_works=$ac_cv_func_vfork\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation\" >&5\n$as_echo \"$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation\" >&2;}\nfi\n\nif test \"x$ac_cv_func_vfork_works\" = xyes; then\n  \n$as_echo \"@%:@define HAVE_WORKING_VFORK 1\" >>confdefs.h\n\nelse\n  \n$as_echo \"@%:@define vfork fork\" >>confdefs.h\n\nfi\nif test \"x$ac_cv_func_fork_works\" = xyes; then\n  \n$as_echo \"@%:@define HAVE_WORKING_FORK 1\" >>confdefs.h\n\nfi\n\nfor ac_func in vprintf\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"vprintf\" \"ac_cv_func_vprintf\"\nif test \"x$ac_cv_func_vprintf\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_VPRINTF 1\n_ACEOF\n \nac_fn_c_check_func \"$LINENO\" \"_doprnt\" \"ac_cv_func__doprnt\"\nif test \"x$ac_cv_func__doprnt\" = x\"\"yes; then :\n  \n$as_echo \"@%:@define HAVE_DOPRNT 1\" >>confdefs.h\n\nfi\n\nfi\ndone\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether closedir returns void\" >&5\n$as_echo_n \"checking whether closedir returns void... \" >&6; }\nif test \"${ac_cv_func_closedir_void+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_closedir_void=yes\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\n#include <$ac_header_dirent>\n#ifndef __cplusplus\nint closedir ();\n#endif\n\nint\nmain ()\n{\nreturn closedir (opendir (\".\")) != 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_closedir_void=no\nelse\n  ac_cv_func_closedir_void=yes\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void\" >&5\n$as_echo \"$ac_cv_func_closedir_void\" >&6; }\nif test $ac_cv_func_closedir_void = yes; then\n  \n$as_echo \"@%:@define CLOSEDIR_VOID 1\" >>confdefs.h\n\nfi\n\n\nac_have_func=no # yes means we've found a way to get the load average.\n\n# Make sure getloadavg.c is where it belongs, at configure-time.\ntest -f \"$srcdir/$ac_config_libobj_dir/getloadavg.c\" ||\n  as_fn_error \"$srcdir/$ac_config_libobj_dir/getloadavg.c is missing\" \"$LINENO\" 5\n\nac_save_LIBS=$LIBS\n\n# Check for getloadavg, but be sure not to touch the cache variable.\n(ac_fn_c_check_func \"$LINENO\" \"getloadavg\" \"ac_cv_func_getloadavg\"\nif test \"x$ac_cv_func_getloadavg\" = x\"\"yes; then :\n  exit 0\nelse\n  exit 1\nfi\n) && ac_have_func=yes\n\n# On HPUX9, an unprivileged user can get load averages through this function.\nfor ac_func in pstat_getdynamic\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"pstat_getdynamic\" \"ac_cv_func_pstat_getdynamic\"\nif test \"x$ac_cv_func_pstat_getdynamic\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_PSTAT_GETDYNAMIC 1\n_ACEOF\n \nfi\ndone\n\n\n# Solaris has libkstat which does not require root.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat\" >&5\n$as_echo_n \"checking for kstat_open in -lkstat... \" >&6; }\nif test \"${ac_cv_lib_kstat_kstat_open+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lkstat  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar kstat_open ();\nint\nmain ()\n{\nreturn kstat_open ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_kstat_kstat_open=yes\nelse\n  ac_cv_lib_kstat_kstat_open=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open\" >&5\n$as_echo \"$ac_cv_lib_kstat_kstat_open\" >&6; }\nif test \"x$ac_cv_lib_kstat_kstat_open\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_LIBKSTAT 1\n_ACEOF\n\n  LIBS=\"-lkstat $LIBS\"\n\nfi\n\ntest $ac_cv_lib_kstat_kstat_open = yes && ac_have_func=yes\n\n# Some systems with -lutil have (and need) -lkvm as well, some do not.\n# On Solaris, -lkvm requires nlist from -lelf, so check that first\n# to get the right answer into the cache.\n# For kstat on solaris, we need libelf to force the definition of SVR4 below.\nif test $ac_have_func = no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for elf_begin in -lelf\" >&5\n$as_echo_n \"checking for elf_begin in -lelf... \" >&6; }\nif test \"${ac_cv_lib_elf_elf_begin+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lelf  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar elf_begin ();\nint\nmain ()\n{\nreturn elf_begin ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_elf_elf_begin=yes\nelse\n  ac_cv_lib_elf_elf_begin=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_begin\" >&5\n$as_echo \"$ac_cv_lib_elf_elf_begin\" >&6; }\nif test \"x$ac_cv_lib_elf_elf_begin\" = x\"\"yes; then :\n  LIBS=\"-lelf $LIBS\"\nfi\n\nfi\nif test $ac_have_func = no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for kvm_open in -lkvm\" >&5\n$as_echo_n \"checking for kvm_open in -lkvm... \" >&6; }\nif test \"${ac_cv_lib_kvm_kvm_open+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lkvm  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar kvm_open ();\nint\nmain ()\n{\nreturn kvm_open ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_kvm_kvm_open=yes\nelse\n  ac_cv_lib_kvm_kvm_open=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_kvm_open\" >&5\n$as_echo \"$ac_cv_lib_kvm_kvm_open\" >&6; }\nif test \"x$ac_cv_lib_kvm_kvm_open\" = x\"\"yes; then :\n  LIBS=\"-lkvm $LIBS\"\nfi\n\n  # Check for the 4.4BSD definition of getloadavg.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lutil\" >&5\n$as_echo_n \"checking for getloadavg in -lutil... \" >&6; }\nif test \"${ac_cv_lib_util_getloadavg+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lutil  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getloadavg ();\nint\nmain ()\n{\nreturn getloadavg ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_util_getloadavg=yes\nelse\n  ac_cv_lib_util_getloadavg=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_getloadavg\" >&5\n$as_echo \"$ac_cv_lib_util_getloadavg\" >&6; }\nif test \"x$ac_cv_lib_util_getloadavg\" = x\"\"yes; then :\n  LIBS=\"-lutil $LIBS\" ac_have_func=yes ac_cv_func_getloadavg_setgid=yes\nfi\n\nfi\n\nif test $ac_have_func = no; then\n  # There is a commonly available library for RS/6000 AIX.\n  # Since it is not a standard part of AIX, it might be installed locally.\n  ac_getloadavg_LIBS=$LIBS\n  LIBS=\"-L/usr/local/lib $LIBS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lgetloadavg\" >&5\n$as_echo_n \"checking for getloadavg in -lgetloadavg... \" >&6; }\nif test \"${ac_cv_lib_getloadavg_getloadavg+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lgetloadavg  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getloadavg ();\nint\nmain ()\n{\nreturn getloadavg ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_getloadavg_getloadavg=yes\nelse\n  ac_cv_lib_getloadavg_getloadavg=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_getloadavg_getloadavg\" >&5\n$as_echo \"$ac_cv_lib_getloadavg_getloadavg\" >&6; }\nif test \"x$ac_cv_lib_getloadavg_getloadavg\" = x\"\"yes; then :\n  LIBS=\"-lgetloadavg $LIBS\"\nelse\n  LIBS=$ac_getloadavg_LIBS\nfi\n\nfi\n\n# Make sure it is really in the library, if we think we found it,\n# otherwise set up the replacement function.\nfor ac_func in getloadavg\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"getloadavg\" \"ac_cv_func_getloadavg\"\nif test \"x$ac_cv_func_getloadavg\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_GETLOADAVG 1\n_ACEOF\n \nelse\n  case \" $LIB@&t@OBJS \" in\n  *\" getloadavg.$ac_objext \"* ) ;;\n  *) LIB@&t@OBJS=\"$LIB@&t@OBJS getloadavg.$ac_objext\"\n ;;\nesac\n\n\n$as_echo \"@%:@define C_GETLOADAVG 1\" >>confdefs.h\n\n# Figure out what our getloadavg.c needs.\nac_have_func=no\nac_fn_c_check_header_mongrel \"$LINENO\" \"sys/dg_sys_info.h\" \"ac_cv_header_sys_dg_sys_info_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_dg_sys_info_h\" = x\"\"yes; then :\n  ac_have_func=yes\n \n$as_echo \"@%:@define DGUX 1\" >>confdefs.h\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dg_sys_info in -ldgc\" >&5\n$as_echo_n \"checking for dg_sys_info in -ldgc... \" >&6; }\nif test \"${ac_cv_lib_dgc_dg_sys_info+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldgc  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dg_sys_info ();\nint\nmain ()\n{\nreturn dg_sys_info ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dgc_dg_sys_info=yes\nelse\n  ac_cv_lib_dgc_dg_sys_info=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dgc_dg_sys_info\" >&5\n$as_echo \"$ac_cv_lib_dgc_dg_sys_info\" >&6; }\nif test \"x$ac_cv_lib_dgc_dg_sys_info\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_LIBDGC 1\n_ACEOF\n\n  LIBS=\"-ldgc $LIBS\"\n\nfi\n\nfi\n\n\n\nac_fn_c_check_header_mongrel \"$LINENO\" \"locale.h\" \"ac_cv_header_locale_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_locale_h\" = x\"\"yes; then :\n  \nfi\n\n\nfor ac_func in setlocale\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"setlocale\" \"ac_cv_func_setlocale\"\nif test \"x$ac_cv_func_setlocale\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_SETLOCALE 1\n_ACEOF\n \nfi\ndone\n\n\n# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it\n# uses stabs), but it is still SVR4.  We cannot check for <elf.h> because\n# Irix 4.0.5F has the header but not the library.\nif test $ac_have_func = no && test \"$ac_cv_lib_elf_elf_begin\" = yes; then\n  ac_have_func=yes\n  \n$as_echo \"@%:@define SVR4 1\" >>confdefs.h\n\nfi\n\nif test $ac_have_func = no; then\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"inq_stats/cpustats.h\" \"ac_cv_header_inq_stats_cpustats_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_inq_stats_cpustats_h\" = x\"\"yes; then :\n  ac_have_func=yes\n   \n$as_echo \"@%:@define UMAX 1\" >>confdefs.h\n\n   \n$as_echo \"@%:@define UMAX4_3 1\" >>confdefs.h\n\nfi\n\n\nfi\n\nif test $ac_have_func = no; then\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/cpustats.h\" \"ac_cv_header_sys_cpustats_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_cpustats_h\" = x\"\"yes; then :\n  ac_have_func=yes; $as_echo \"@%:@define UMAX 1\" >>confdefs.h\n\nfi\n\n\nfi\n\nif test $ac_have_func = no; then\n  for ac_header in mach/mach.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"mach/mach.h\" \"ac_cv_header_mach_mach_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_mach_mach_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_MACH_MACH_H 1\n_ACEOF\n \nfi\n\ndone\n\nfi\n\nfor ac_header in nlist.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"nlist.h\" \"ac_cv_header_nlist_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_nlist_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_NLIST_H 1\n_ACEOF\n ac_fn_c_check_member \"$LINENO\" \"struct nlist\" \"n_un.n_name\" \"ac_cv_member_struct_nlist_n_un_n_name\" \"@%:@include <nlist.h>\n\"\nif test \"x$ac_cv_member_struct_nlist_n_un_n_name\" = x\"\"yes; then :\n  \ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_STRUCT_NLIST_N_UN_N_NAME 1\n_ACEOF\n\n\n$as_echo \"@%:@define NLIST_NAME_UNION 1\" >>confdefs.h\n\nfi\n\n\nfi\n\ndone\n\nfi\ndone\n\n\n# Some definitions of getloadavg require that the program be installed setgid.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether getloadavg requires setgid\" >&5\n$as_echo_n \"checking whether getloadavg requires setgid... \" >&6; }\nif test \"${ac_cv_func_getloadavg_setgid+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include \"$srcdir/$ac_config_libobj_dir/getloadavg.c\"\n#ifdef LDAV_PRIVILEGED\nYowza Am I SETGID yet\n@%:@endif\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"Yowza Am I SETGID yet\" >/dev/null 2>&1; then :\n  ac_cv_func_getloadavg_setgid=yes\nelse\n  ac_cv_func_getloadavg_setgid=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getloadavg_setgid\" >&5\n$as_echo \"$ac_cv_func_getloadavg_setgid\" >&6; }\nif test $ac_cv_func_getloadavg_setgid = yes; then\n  NEED_SETGID=true\n  \n$as_echo \"@%:@define GETLOADAVG_PRIVILEGED 1\" >>confdefs.h\n\nelse\n  NEED_SETGID=false\nfi\n\nif test $ac_cv_func_getloadavg_setgid = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking group of /dev/kmem\" >&5\n$as_echo_n \"checking group of /dev/kmem... \" >&6; }\nif test \"${ac_cv_group_kmem+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n   # On Solaris, /dev/kmem is a symlink.  Get info on the real file.\n  ac_ls_output=`ls -lgL /dev/kmem 2>/dev/null`\n  # If we got an error (system does not support symlinks), try without -L.\n  test -z \"$ac_ls_output\" && ac_ls_output=`ls -lg /dev/kmem`\n  ac_cv_group_kmem=`$as_echo \"$ac_ls_output\" \\\n    | sed -ne 's/[\t ][\t ]*/ /g;\n\t       s/^.[sSrwx-]* *[0-9]* *\\([^0-9]*\\)  *.*/\\1/;\n\t       / /s/.* //;p;'`\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_group_kmem\" >&5\n$as_echo \"$ac_cv_group_kmem\" >&6; }\n  KMEM_GROUP=$ac_cv_group_kmem\nfi\nif test \"x$ac_save_LIBS\" = x; then\n  GETLOADAVG_LIBS=$LIBS\nelse\n  GETLOADAVG_LIBS=`$as_echo \"$LIBS\" | sed \"s|$ac_save_LIBS||\"`\nfi\nLIBS=$ac_save_LIBS\n\n\n\n# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it\n# doesn't.  So, we will.\n\nif test \"$ac_cv_header_nlist_h\" = yes; then\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <nlist.h>\nint\nmain ()\n{\nstruct nlist nl;\n          nl.n_name = \"string\";\n          return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_nlist_struct=yes\nelse\n  make_cv_nlist_struct=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  if test \"$make_cv_nlist_struct\" = yes; then\n    \n$as_echo \"@%:@define NLIST_STRUCT 1\" >>confdefs.h\n\n  fi\nfi\n\nac_fn_c_check_decl \"$LINENO\" \"sys_siglist\" \"ac_cv_have_decl_sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl_sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_DECL_SYS_SIGLIST $ac_have_decl\n_ACEOF\nac_fn_c_check_decl \"$LINENO\" \"_sys_siglist\" \"ac_cv_have_decl__sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl__sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_DECL__SYS_SIGLIST $ac_have_decl\n_ACEOF\nac_fn_c_check_decl \"$LINENO\" \"__sys_siglist\" \"ac_cv_have_decl___sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl___sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_DECL___SYS_SIGLIST $ac_have_decl\n_ACEOF\n\n\n\n# Check out the wait reality.\nfor ac_header in sys/wait.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/wait.h\" \"ac_cv_header_sys_wait_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_wait_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_SYS_WAIT_H 1\n_ACEOF\n \nfi\n\ndone\n\nfor ac_func in waitpid wait3\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n \nfi\ndone\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for union wait\" >&5\n$as_echo_n \"checking for union wait... \" >&6; }\nif test \"${make_cv_union_wait+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/wait.h>\nint\nmain ()\n{\nunion wait status; int pid; pid = wait (&status);\n#ifdef WEXITSTATUS\n/* Some POSIXoid systems have both the new-style macros and the old\n   union wait type, and they do not work together.  If union wait\n   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */\n        if (WEXITSTATUS (status) != 0) pid = -1;\n#ifdef WTERMSIG\n        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */\n        -- blow chunks here --\n#endif\n#endif\n#ifdef HAVE_WAITPID\n        /* Make sure union wait works with waitpid.  */\n        pid = waitpid (-1, &status, 0);\n#endif\n      \n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  make_cv_union_wait=yes\nelse\n  make_cv_union_wait=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n\nif test \"$make_cv_union_wait\" = yes; then\n  \n$as_echo \"@%:@define HAVE_UNION_WAIT 1\" >>confdefs.h\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_union_wait\" >&5\n$as_echo \"$make_cv_union_wait\" >&6; }\n\n\n# If we're building on Windows/DOS/OS/2, add some support for DOS drive specs.\nif test \"$PATH_SEPARATOR\" = ';'; then\n  \n$as_echo \"@%:@define HAVE_DOS_PATHS 1\" >>confdefs.h\n\nfi\n\n\n# See if the user wants to use pmake's \"customs\" distributed build capability\n\n REMOTE=stub\nuse_customs=false\n\n@%:@ Check whether --with-customs was given.\nif test \"${with_customs+set}\" = set; then :\n  withval=$with_customs; case $withval in\n    n|no) : ;;\n    *) make_cppflags=\"$CPPFLAGS\"\n       case $withval in\n\t y|ye|yes) : ;;\n\t *) CPPFLAGS=\"$CPPFLAGS -I$with_customs/include/customs\"\n\t    make_ldflags=\"$LDFLAGS -L$with_customs/lib\" ;;\n       esac\n       \ncf_test_netlibs=no\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for network libraries\" >&5\n$as_echo_n \"checking for network libraries... \" >&6; }\nif test \"${cf_cv_netlibs+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: working...\" >&5\n$as_echo \"working...\" >&6; }\ncf_cv_netlibs=\"\"\ncf_test_netlibs=yes\nfor ac_func in gethostname\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"gethostname\" \"ac_cv_func_gethostname\"\nif test \"x$ac_cv_func_gethostname\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_GETHOSTNAME 1\n_ACEOF\n \nelse\n  \n\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostname in -lnsl\" >&5\n$as_echo_n \"checking for gethostname in -lnsl... \" >&6; }\nif test \"${ac_cv_lib_nsl_gethostname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lnsl $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostname ();\nint\nmain ()\n{\nreturn gethostname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_nsl_gethostname=yes\nelse\n  ac_cv_lib_nsl_gethostname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostname\" >&5\n$as_echo \"$ac_cv_lib_nsl_gethostname\" >&6; }\nif test \"x$ac_cv_lib_nsl_gethostname\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostname=yes\n\tcf_cv_netlibs=\"-lnsl $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_gethostname=unknown\n\tunset ac_cv_func_gethostname 2>/dev/null\n\t\n\t\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostname in -lsocket\" >&5\n$as_echo_n \"checking for gethostname in -lsocket... \" >&6; }\nif test \"${ac_cv_lib_socket_gethostname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsocket $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostname ();\nint\nmain ()\n{\nreturn gethostname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_socket_gethostname=yes\nelse\n  ac_cv_lib_socket_gethostname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostname\" >&5\n$as_echo \"$ac_cv_lib_socket_gethostname\" >&6; }\nif test \"x$ac_cv_lib_socket_gethostname\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostname=yes\n\tcf_cv_netlibs=\"-lsocket $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_gethostname=unknown\n\tunset ac_cv_func_gethostname 2>/dev/null\n\t\nfi\n\n\nfi\n\n\nfi\ndone\n\n#\n# FIXME:  sequent needs this library (i.e., -lsocket -linet -lnsl), but\n# I don't know the entrypoints - 97/7/22 TD\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for main in -linet\" >&5\n$as_echo_n \"checking for main in -linet... \" >&6; }\nif test \"${ac_cv_lib_inet_main+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-linet  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n\nint\nmain ()\n{\nreturn main ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_inet_main=yes\nelse\n  ac_cv_lib_inet_main=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main\" >&5\n$as_echo \"$ac_cv_lib_inet_main\" >&6; }\nif test \"x$ac_cv_lib_inet_main\" = x\"\"yes; then :\n  cf_cv_netlibs=\"-linet $cf_cv_netlibs\"\nfi\n\n#\nif test \"$ac_cv_func_lsocket\" != no ; then\nfor ac_func in socket\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"socket\" \"ac_cv_func_socket\"\nif test \"x$ac_cv_func_socket\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_SOCKET 1\n_ACEOF\n \nelse\n  \n\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket\" >&5\n$as_echo_n \"checking for socket in -lsocket... \" >&6; }\nif test \"${ac_cv_lib_socket_socket+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsocket $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar socket ();\nint\nmain ()\n{\nreturn socket ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_socket_socket=yes\nelse\n  ac_cv_lib_socket_socket=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket\" >&5\n$as_echo \"$ac_cv_lib_socket_socket\" >&6; }\nif test \"x$ac_cv_lib_socket_socket\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_socket=yes\n\tcf_cv_netlibs=\"-lsocket $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_socket=unknown\n\tunset ac_cv_func_socket 2>/dev/null\n\t\n\t\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for socket in -lbsd\" >&5\n$as_echo_n \"checking for socket in -lbsd... \" >&6; }\nif test \"${ac_cv_lib_bsd_socket+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lbsd $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar socket ();\nint\nmain ()\n{\nreturn socket ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_bsd_socket=yes\nelse\n  ac_cv_lib_bsd_socket=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_socket\" >&5\n$as_echo \"$ac_cv_lib_bsd_socket\" >&6; }\nif test \"x$ac_cv_lib_bsd_socket\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_socket=yes\n\tcf_cv_netlibs=\"-lbsd $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_socket=unknown\n\tunset ac_cv_func_socket 2>/dev/null\n\t\nfi\n\n\nfi\n\n\nfi\ndone\n\nfi\n#\nfor ac_func in gethostbyname\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"gethostbyname\" \"ac_cv_func_gethostbyname\"\nif test \"x$ac_cv_func_gethostbyname\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_GETHOSTBYNAME 1\n_ACEOF\n \nelse\n  \n\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl\" >&5\n$as_echo_n \"checking for gethostbyname in -lnsl... \" >&6; }\nif test \"${ac_cv_lib_nsl_gethostbyname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lnsl $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostbyname ();\nint\nmain ()\n{\nreturn gethostbyname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_nsl_gethostbyname=yes\nelse\n  ac_cv_lib_nsl_gethostbyname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname\" >&5\n$as_echo \"$ac_cv_lib_nsl_gethostbyname\" >&6; }\nif test \"x$ac_cv_lib_nsl_gethostbyname\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo gethostbyname | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostbyname=yes\n\tcf_cv_netlibs=\"-lnsl $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_gethostbyname=unknown\n\tunset ac_cv_func_gethostbyname 2>/dev/null\n\t\nfi\n\n\nfi\ndone\n\n#\nfor ac_func in strcasecmp\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"strcasecmp\" \"ac_cv_func_strcasecmp\"\nif test \"x$ac_cv_func_strcasecmp\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n@%:@define HAVE_STRCASECMP 1\n_ACEOF\n \nelse\n  \n\t\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolv\" >&5\n$as_echo_n \"checking for strcasecmp in -lresolv... \" >&6; }\nif test \"${ac_cv_lib_resolv_strcasecmp+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lresolv $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar strcasecmp ();\nint\nmain ()\n{\nreturn strcasecmp ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_resolv_strcasecmp=yes\nelse\n  ac_cv_lib_resolv_strcasecmp=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_strcasecmp\" >&5\n$as_echo \"$ac_cv_lib_resolv_strcasecmp\" >&6; }\nif test \"x$ac_cv_lib_resolv_strcasecmp\" = x\"\"yes; then :\n  \n\t\ncf_tr_func=`echo strcasecmp | tr '[a-z]' '[A-Z]'`\n\n\t\ncat >>confdefs.h <<_ACEOF\n@%:@define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_strcasecmp=yes\n\tcf_cv_netlibs=\"-lresolv $cf_cv_netlibs\"\nelse\n  \n\tac_cv_func_strcasecmp=unknown\n\tunset ac_cv_func_strcasecmp 2>/dev/null\n\t\nfi\n\n\nfi\ndone\n\n\nfi\n\nLIBS=\"$LIBS $cf_cv_netlibs\"\ntest $cf_test_netlibs = no && echo \"$cf_cv_netlibs\" >&6\n\n       ac_fn_c_check_header_mongrel \"$LINENO\" \"customs.h\" \"ac_cv_header_customs_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_customs_h\" = x\"\"yes; then :\n  use_customs=true\n\t\t         REMOTE=cstms\n\t\t\t LIBS=\"$LIBS -lcustoms\" LDFLAGS=\"$make_ldflags\"\nelse\n  with_customs=no\n\t\t\t CPPFLAGS=\"$make_cppflags\" make_badcust=yes\nfi\n\n\n       ;;\n  esac\nfi\n\n# Tell automake about this, so it can include the right .c files.\n \n\nif test \"$use_customs\" = true; then\n  USE_CUSTOMS_TRUE=\n  USE_CUSTOMS_FALSE='#'\nelse\n  USE_CUSTOMS_TRUE='#'\n  USE_CUSTOMS_FALSE=\nfi\n\n\n# See if the user asked to handle case insensitive file systems.\n\n\n@%:@ Check whether --enable-case-insensitive-file-system was given.\nif test \"${enable_case_insensitive_file_system+set}\" = set; then :\n  enableval=$enable_case_insensitive_file_system; case_insensitive_fs=\"yes\" $as_echo \"@%:@define HAVE_CASE_INSENSITIVE_FS 1\" >>confdefs.h\n\nelse\n  case_insensitive_fs=\"no\"\nfi\n\n\n# See if we can handle the job server feature, and if the user wants it.\n\n@%:@ Check whether --enable-job-server was given.\nif test \"${enable_job_server+set}\" = set; then :\n  enableval=$enable_job_server; make_cv_job_server=\"$enableval\" user_job_server=\"$enableval\"\nelse\n  make_cv_job_server=\"yes\"\nfi\n\n\nhas_wait_nohang=yes\ncase \"$ac_cv_func_waitpid/$ac_cv_func_wait3\" in\n  no/no) has_wait_nohang=no ;;\nesac\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SA_RESTART\" >&5\n$as_echo_n \"checking for SA_RESTART... \" >&6; }\nif test \"${make_cv_sa_restart+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <signal.h>\nint\nmain ()\n{\nreturn SA_RESTART;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_sa_restart=yes\nelse\n  make_cv_sa_restart=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_sa_restart\" >&5\n$as_echo \"$make_cv_sa_restart\" >&6; }\n\nif test \"$make_cv_sa_restart\" != no; then\n  \n$as_echo \"@%:@define HAVE_SA_RESTART 1\" >>confdefs.h\n\nfi\n\n# enable make_cv_sa_restart for OS/2 so that the jobserver will be enabled,\n# but do it after HAVE_SA_RESTART has been defined.\ncase \"$host_os\" in\n  os2*) make_cv_sa_restart=yes ;;\nesac\n\ncase \"$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/$make_cv_job_server\" in\n  yes/yes/yes/yes/yes)\n    \n$as_echo \"@%:@define MAKE_JOBSERVER 1\" >>confdefs.h\n;;\nesac\n\n# if we have both lstat() and readlink() then we can support symlink\n# timechecks.\ncase \"$ac_cv_func_lstat/$ac_cv_func_readlink\" in\n  yes/yes)\n    \n$as_echo \"@%:@define MAKE_SYMLINKS 1\" >>confdefs.h\n;;\nesac\n\n# Find the SCCS commands, so we can include them in our default rules.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for location of SCCS get command\" >&5\n$as_echo_n \"checking for location of SCCS get command... \" >&6; }\nif test \"${make_cv_path_sccs_get+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \nif test -f /usr/sccs/get; then\n  make_cv_path_sccs_get=/usr/sccs/get\nelse\n  make_cv_path_sccs_get=get\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_path_sccs_get\" >&5\n$as_echo \"$make_cv_path_sccs_get\" >&6; }\n\ncat >>confdefs.h <<_ACEOF\n@%:@define SCCS_GET \"$make_cv_path_sccs_get\"\n_ACEOF\n\n\nac_clean_files=\"$ac_clean_files s.conftest conftoast\" # Remove these later.\nif ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 &&\n   test -f s.conftest; then\n  # We successfully created an SCCS file.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if SCCS get command understands -G\" >&5\n$as_echo_n \"checking if SCCS get command understands -G... \" >&6; }\nif test \"${make_cv_sys_get_minus_G+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n    if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 &&\n       test -f conftoast; then\n       make_cv_sys_get_minus_G=yes\n    else\n       make_cv_sys_get_minus_G=no\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_sys_get_minus_G\" >&5\n$as_echo \"$make_cv_sys_get_minus_G\" >&6; }\n  case \"$make_cv_sys_get_minus_G\" in\n    yes) \n$as_echo \"@%:@define SCCS_GET_MINUS_G 1\" >>confdefs.h\n;;\n  esac\nfi\nrm -f s.conftest conftoast\n\n# Check the system to see if it provides GNU glob.  If not, use our\n# local version.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if system libc has GNU glob\" >&5\n$as_echo_n \"checking if system libc has GNU glob... \" >&6; }\nif test \"${make_cv_sys_gnu_glob+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \n cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <features.h>\n#include <glob.h>\n#include <fnmatch.h>\n\n#define GLOB_INTERFACE_VERSION 1\n#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1\n# include <gnu-versions.h>\n# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION\n   gnu glob\n# endif\n#endif\n \n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"gnu glob\" >/dev/null 2>&1; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nmake_cv_sys_gnu_glob=yes\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no; using local copy\" >&5\n$as_echo \"no; using local copy\" >&6; }\n GLOBINC='-I$(srcdir)/glob'\n GLOBLIB=glob/libglob.a\nmake_cv_sys_gnu_glob=no\nfi\nrm -f conftest*\n\nfi\n\n# Tell automake about this, so it can build the right .c files.\n \n\nif test \"$make_cv_sys_gnu_glob\" = no; then\n  USE_LOCAL_GLOB_TRUE=\n  USE_LOCAL_GLOB_FALSE='#'\nelse\n  USE_LOCAL_GLOB_TRUE='#'\n  USE_LOCAL_GLOB_FALSE=\nfi\n\n\n# Let the makefile know what our build host is\n\n\ncat >>confdefs.h <<_ACEOF\n@%:@define MAKE_HOST \"$host\"\n_ACEOF\n\nMAKE_HOST=\"$host\"\n\n\nw32_target_env=no\n \n\nif false; then\n  WINDOWSENV_TRUE=\n  WINDOWSENV_FALSE='#'\nelse\n  WINDOWSENV_TRUE='#'\n  WINDOWSENV_FALSE=\nfi\n\n\ncase \"$host\" in\n  *-*-mingw32)\n     \n\nif true; then\n  WINDOWSENV_TRUE=\n  WINDOWSENV_FALSE='#'\nelse\n  WINDOWSENV_TRUE='#'\n  WINDOWSENV_FALSE=\nfi\n\n    w32_target_env=yes\n    \n$as_echo \"@%:@define WINDOWS32 1\" >>confdefs.h\n\n    \n$as_echo \"@%:@define HAVE_DOS_PATHS 1\" >>confdefs.h\n\n    ;;\nesac\n\n# Include the Maintainer's Makefile section, if it's here.\n\nMAINT_MAKEFILE=/dev/null\nif test -r \"$srcdir/maintMakefile\"; then\n  MAINT_MAKEFILE=\"$srcdir/maintMakefile\"\nfi\n\n\n# Allow building with dmalloc\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted\" >&5\n$as_echo_n \"checking if malloc debugging is wanted... \" >&6; }\n\n@%:@ Check whether --with-dmalloc was given.\nif test \"${with_dmalloc+set}\" = set; then :\n  withval=$with_dmalloc; if test \"$withval\" = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n  \n$as_echo \"@%:@define WITH_DMALLOC 1\" >>confdefs.h\n\n  LIBS=\"$LIBS -ldmalloc\"\n  LDFLAGS=\"$LDFLAGS -g\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n# Forcibly disable SET_MAKE.  If it's set it breaks things like the test\n# scripts, etc.\nSET_MAKE=\n\n# Sanity check and inform the user of what we found\n\ncase \"$make_badcust\" in\n  yes) echo\n       echo \"WARNING: --with-customs specified but no customs.h could be found;\"\n       echo \"         disabling Customs support.\"\n       echo ;;\nesac\n\ncase \"$with_customs\" in\n  \"\"|n|no|y|ye|yes) ;;\n  *) if test -f \"$with_customs/lib/libcustoms.a\"; then\n       :\n     else\n       echo\n       echo \"WARNING: '$with_customs/lib' does not appear to contain the\"\n       echo \"         Customs library.  You must build and install Customs\"\n       echo \"         before compiling GNU make.\"\n       echo\n     fi ;;\nesac\n\ncase \"$has_wait_nohang\" in\n  no) echo\n      echo \"WARNING: Your system has neither waitpid() nor wait3().\"\n      echo \"         Without one of these, signal handling is unreliable.\"\n      echo \"         You should be aware that running GNU make with -j\"\n      echo \"         could result in erratic behavior.\"\n      echo ;;\nesac\n\ncase \"$make_cv_job_server/$user_job_server\" in\n  no/yes) echo\n\t  echo \"WARNING: Make job server requires a POSIX-ish system that\"\n\t  echo \"         supports the pipe(), sigaction(), and either\"\n          echo \"         waitpid() or wait3() functions.  Your system doesn't\"\n\t  echo \"         appear to provide one or more of those.\"\n\t  echo \"         Disabling job server support.\"\n          echo ;;\nesac\n\n\n# Specify what files are to be created.\nac_config_files=\"$ac_config_files Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile w32/Makefile\"\n\n\n# OK, do it!\n\ncat >confcache <<\\_ACEOF\n# This file is a shell script that caches the results of configure\n# tests run on this system so they can be shared between configure\n# scripts and configure runs, see configure's option --config-cache.\n# It is not useful on other systems.  If it contains results you don't\n# want to keep, you may remove or edit it.\n#\n# config.status only pays attention to the cache file if you give it\n# the --recheck option to rerun configure.\n#\n# `ac_cv_env_foo' variables (set or unset) will be overridden when\n# loading this file, other *unset* `ac_cv_foo' will be assigned the\n# following values.\n\n_ACEOF\n\n# The following way of writing the cache mishandles newlines in values,\n# but we know of no workaround that is simple, portable, and efficient.\n# So, we kill variables containing newlines.\n# Ultrix sh set writes to stderr and can't be redirected directly,\n# and sets the high bit in the cache file unless we assign to the vars.\n(\n  for ac_var in `(set) 2>&1 | sed -n 's/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline\" >&5\n$as_echo \"$as_me: WARNING: cache variable $ac_var contains a newline\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(\n      *) { eval $ac_var=; unset $ac_var;} ;;\n      esac ;;\n    esac\n  done\n\n  (set) 2>&1 |\n    case $as_nl`(ac_space=' '; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      # `set' does not quote correctly, so add quotes: double-quote\n      # substitution turns \\\\\\\\ into \\\\, and sed turns \\\\ into \\.\n      sed -n \\\n\t\"s/'/'\\\\\\\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\\\2'/p\"\n      ;; #(\n    *)\n      # `set' quotes correctly as required by POSIX, so do not add quotes.\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n) |\n  sed '\n     /^ac_cv_env_/b end\n     t clear\n     :clear\n     s/^\\([^=]*\\)=\\(.*[{}].*\\)$/test \"${\\1+set}\" = set || &/\n     t end\n     s/^\\([^=]*\\)=\\(.*\\)$/\\1=${\\1=\\2}/\n     :end' >>confcache\nif diff \"$cache_file\" confcache >/dev/null 2>&1; then :; else\n  if test -w \"$cache_file\"; then\n    test \"x$cache_file\" != \"x/dev/null\" &&\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: updating cache $cache_file\" >&5\n$as_echo \"$as_me: updating cache $cache_file\" >&6;}\n    cat confcache >$cache_file\n  else\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file\" >&5\n$as_echo \"$as_me: not updating unwritable cache $cache_file\" >&6;}\n  fi\nfi\nrm -f confcache\n\ntest \"x$prefix\" = xNONE && prefix=$ac_default_prefix\n# Let make expand exec_prefix.\ntest \"x$exec_prefix\" = xNONE && exec_prefix='${prefix}'\n\nDEFS=-DHAVE_CONFIG_H\n\nac_libobjs=\nac_ltlibobjs=\nfor ac_i in : $LIB@&t@OBJS; do test \"x$ac_i\" = x: && continue\n  # 1. Remove the extension, and $U if already installed.\n  ac_script='s/\\$U\\././;s/\\.o$//;s/\\.obj$//'\n  ac_i=`$as_echo \"$ac_i\" | sed \"$ac_script\"`\n  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR\n  #    will be set to the directory where LIBOBJS objects are built.\n  as_fn_append ac_libobjs \" \\${LIBOBJDIR}$ac_i\\$U.$ac_objext\"\n  as_fn_append ac_ltlibobjs \" \\${LIBOBJDIR}$ac_i\"'$U.lo'\ndone\nLIB@&t@OBJS=$ac_libobjs\n\nLTLIBOBJS=$ac_ltlibobjs\n\n\nif test -z \"${AMDEP_TRUE}\" && test -z \"${AMDEP_FALSE}\"; then\n  as_fn_error \"conditional \\\"AMDEP\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${am__fastdepCC_TRUE}\" && test -z \"${am__fastdepCC_FALSE}\"; then\n  as_fn_error \"conditional \\\"am__fastdepCC\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${USE_CUSTOMS_TRUE}\" && test -z \"${USE_CUSTOMS_FALSE}\"; then\n  as_fn_error \"conditional \\\"USE_CUSTOMS\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${USE_LOCAL_GLOB_TRUE}\" && test -z \"${USE_LOCAL_GLOB_FALSE}\"; then\n  as_fn_error \"conditional \\\"USE_LOCAL_GLOB\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${WINDOWSENV_TRUE}\" && test -z \"${WINDOWSENV_FALSE}\"; then\n  as_fn_error \"conditional \\\"WINDOWSENV\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${WINDOWSENV_TRUE}\" && test -z \"${WINDOWSENV_FALSE}\"; then\n  as_fn_error \"conditional \\\"WINDOWSENV\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\n\n: ${CONFIG_STATUS=./config.status}\nac_write_fail=0\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files $CONFIG_STATUS\"\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS\" >&5\n$as_echo \"$as_me: creating $CONFIG_STATUS\" >&6;}\nas_write_fail=0\ncat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1\n#! $SHELL\n# Generated by $as_me.\n# Run this file to recreate the current configuration.\n# Compiler output produced by configure, useful for debugging\n# configure, is in config.log if it exists.\n\ndebug=false\nac_cs_recheck=false\nac_cs_silent=false\n\nSHELL=\\${CONFIG_SHELL-$SHELL}\nexport SHELL\n_ASEOF\ncat >>$CONFIG_STATUS <<\\_ASEOF || as_write_fail=1\n## -------------------- ##\n## M4sh Initialization. ##\n## -------------------- ##\n\n# Be more Bourne compatible\nDUALCASE=1; export DUALCASE # for MKS sh\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in @%:@(\n  *posix*) :\n    set -o posix ;; @%:@(\n  *) :\n     ;;\nesac\nfi\n\n\nas_nl='\n'\nexport as_nl\n# Printing a long string crashes Solaris 7 /usr/bin/printf.\nas_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo\n# Prefer a ksh shell builtin over an external printf program on Solaris,\n# but without wasting forks for bash or zsh.\nif test -z \"$BASH_VERSION$ZSH_VERSION\" \\\n    && (test \"X`print -r -- $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='print -r --'\n  as_echo_n='print -rn --'\nelif (test \"X`printf %s $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='printf %s\\n'\n  as_echo_n='printf %s'\nelse\n  if test \"X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`\" = \"X-n $as_echo\"; then\n    as_echo_body='eval /usr/ucb/echo -n \"$1$as_nl\"'\n    as_echo_n='/usr/ucb/echo -n'\n  else\n    as_echo_body='eval expr \"X$1\" : \"X\\\\(.*\\\\)\"'\n    as_echo_n_body='eval\n      arg=$1;\n      case $arg in @%:@(\n      *\"$as_nl\"*)\n\texpr \"X$arg\" : \"X\\\\(.*\\\\)$as_nl\";\n\targ=`expr \"X$arg\" : \".*$as_nl\\\\(.*\\\\)\"`;;\n      esac;\n      expr \"X$arg\" : \"X\\\\(.*\\\\)\" | tr -d \"$as_nl\"\n    '\n    export as_echo_n_body\n    as_echo_n='sh -c $as_echo_n_body as_echo'\n  fi\n  export as_echo_body\n  as_echo='sh -c $as_echo_body as_echo'\nfi\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  PATH_SEPARATOR=:\n  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {\n    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||\n      PATH_SEPARATOR=';'\n  }\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in @%:@((\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\n  done\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  $as_echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  exit 1\nfi\n\n# Unset variables that we do not need and which cause bugs (e.g. in\n# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the \"|| exit 1\"\n# suppresses any \"Segmentation fault\" message there.  '((' could\n# trigger a bug in pdksh 5.2.14.\nfor as_var in BASH_ENV ENV MAIL MAILPATH\ndo eval test x\\${$as_var+set} = xset \\\n  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nLC_ALL=C\nexport LC_ALL\nLANGUAGE=C\nexport LANGUAGE\n\n# CDPATH.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\n\n@%:@ as_fn_error ERROR [LINENO LOG_FD]\n@%:@ ---------------------------------\n@%:@ Output \"`basename @S|@0`: error: ERROR\" to stderr. If LINENO and LOG_FD are\n@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the\n@%:@ script with status @S|@?, using 1 if that was 0.\nas_fn_error ()\n{\n  as_status=$?; test $as_status -eq 0 && as_status=1\n  if test \"$3\"; then\n    as_lineno=${as_lineno-\"$2\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $1\" >&$3\n  fi\n  $as_echo \"$as_me: error: $1\" >&2\n  as_fn_exit $as_status\n} @%:@ as_fn_error\n\n\n@%:@ as_fn_set_status STATUS\n@%:@ -----------------------\n@%:@ Set @S|@? to STATUS, without forking.\nas_fn_set_status ()\n{\n  return $1\n} @%:@ as_fn_set_status\n\n@%:@ as_fn_exit STATUS\n@%:@ -----------------\n@%:@ Exit the shell with STATUS, even in a \"trap 0\" or \"set -e\" context.\nas_fn_exit ()\n{\n  set +e\n  as_fn_set_status $1\n  exit $1\n} @%:@ as_fn_exit\n\n@%:@ as_fn_unset VAR\n@%:@ ---------------\n@%:@ Portably unset VAR.\nas_fn_unset ()\n{\n  { eval $1=; unset $1;}\n}\nas_unset=as_fn_unset\n@%:@ as_fn_append VAR VALUE\n@%:@ ----------------------\n@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take\n@%:@ advantage of any shell optimizations that allow amortized linear growth over\n@%:@ repeated appends, instead of the typical quadratic growth present in naive\n@%:@ implementations.\nif (eval \"as_var=1; as_var+=2; test x\\$as_var = x12\") 2>/dev/null; then :\n  eval 'as_fn_append ()\n  {\n    eval $1+=\\$2\n  }'\nelse\n  as_fn_append ()\n  {\n    eval $1=\\$$1\\$2\n  }\nfi # as_fn_append\n\n@%:@ as_fn_arith ARG...\n@%:@ ------------------\n@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the\n@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments\n@%:@ must be portable across @S|@(()) and expr.\nif (eval \"test \\$(( 1 + 1 )) = 2\") 2>/dev/null; then :\n  eval 'as_fn_arith ()\n  {\n    as_val=$(( $* ))\n  }'\nelse\n  as_fn_arith ()\n  {\n    as_val=`expr \"$@\" || test $? -eq 1`\n  }\nfi # as_fn_arith\n\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\nif (as_dir=`dirname -- /` && test \"X$as_dir\" = X/) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in @%:@(((((\n-n*)\n  case `echo 'xy\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  xy)  ECHO_C='\\c';;\n  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null\n       ECHO_T='\t';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir 2>/dev/null\nfi\nif (echo >conf$$.file) 2>/dev/null; then\n  if ln -s conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s='ln -s'\n    # ... but there are two gotchas:\n    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n    # In both cases, we have to default to `cp -p'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -p'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -p'\n  fi\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\n\n@%:@ as_fn_mkdir_p\n@%:@ -------------\n@%:@ Create \"@S|@as_dir\" as a directory, including parents if necessary.\nas_fn_mkdir_p ()\n{\n\n  case $as_dir in #(\n  -*) as_dir=./$as_dir;;\n  esac\n  test -d \"$as_dir\" || eval $as_mkdir_p || {\n    as_dirs=\n    while :; do\n      case $as_dir in #(\n      *\\'*) as_qdir=`$as_echo \"$as_dir\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; #'(\n      *) as_qdir=$as_dir;;\n      esac\n      as_dirs=\"'$as_qdir' $as_dirs\"\n      as_dir=`$as_dirname -- \"$as_dir\" ||\n$as_expr X\"$as_dir\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_dir\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_dir\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n      test -d \"$as_dir\" && break\n    done\n    test -z \"$as_dirs\" || eval \"mkdir $as_dirs\"\n  } || test -d \"$as_dir\" || as_fn_error \"cannot create directory $as_dir\"\n\n\n} @%:@ as_fn_mkdir_p\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p='mkdir -p \"$as_dir\"'\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\nif test -x / >/dev/null 2>&1; then\n  as_test_x='test -x'\nelse\n  if ls -dL / >/dev/null 2>&1; then\n    as_ls_L_option=L\n  else\n    as_ls_L_option=\n  fi\n  as_test_x='\n    eval sh -c '\\''\n      if test -d \"$1\"; then\n\ttest -d \"$1/.\";\n      else\n\tcase $1 in @%:@(\n\t-*)set \"./$1\";;\n\tesac;\n\tcase `ls -ld'$as_ls_L_option' \"$1\" 2>/dev/null` in @%:@((\n\t???[sx]*):;;*)false;;esac;fi\n    '\\'' sh\n  '\nfi\nas_executable_p=$as_test_x\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\nexec 6>&1\n## ----------------------------------- ##\n## Main body of $CONFIG_STATUS script. ##\n## ----------------------------------- ##\n_ASEOF\ntest $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# Save the log message, to keep $0 and so on meaningful, and to\n# report actual input values of CONFIG_FILES etc. instead of their\n# values after options handling.\nac_log=\"\nThis file was extended by GNU make $as_me 3.81, which was\ngenerated by GNU Autoconf 2.65.  Invocation command line was\n\n  CONFIG_FILES    = $CONFIG_FILES\n  CONFIG_HEADERS  = $CONFIG_HEADERS\n  CONFIG_LINKS    = $CONFIG_LINKS\n  CONFIG_COMMANDS = $CONFIG_COMMANDS\n  $ $0 $@\n\non `(hostname || uname -n) 2>/dev/null | sed 1q`\n\"\n\n_ACEOF\n\ncase $ac_config_files in *\"\n\"*) set x $ac_config_files; shift; ac_config_files=$*;;\nesac\n\ncase $ac_config_headers in *\"\n\"*) set x $ac_config_headers; shift; ac_config_headers=$*;;\nesac\n\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n# Files that config.status was made for.\nconfig_files=\"$ac_config_files\"\nconfig_headers=\"$ac_config_headers\"\nconfig_commands=\"$ac_config_commands\"\n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nac_cs_usage=\"\\\n\\`$as_me' instantiates files and other configuration actions\nfrom templates according to the current configuration.  Unless the files\nand actions are specified as TAGs, all are instantiated by default.\n\nUsage: $0 [OPTION]... [TAG]...\n\n  -h, --help       print this help, then exit\n  -V, --version    print version number and configuration settings, then exit\n      --config     print configuration, then exit\n  -q, --quiet, --silent\n                   do not print progress messages\n  -d, --debug      don't remove temporary files\n      --recheck    update $as_me by reconfiguring in the same conditions\n      --file=FILE[:TEMPLATE] \n                   instantiate the configuration file FILE\n      --header=FILE[:TEMPLATE] \n                   instantiate the configuration header FILE\n\nConfiguration files:\n$config_files\n\nConfiguration headers:\n$config_headers\n\nConfiguration commands:\n$config_commands\n\nReport bugs to <bug-make@gnu.org>.\nGNU make home page: <http://www.gnu.org/software/make/>.\nGeneral help using GNU software: <http://www.gnu.org/gethelp/>.\"\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nac_cs_config=\"`$as_echo \"$ac_configure_args\" | sed 's/^ //; s/[\\\\\"\"\\`\\$]/\\\\\\\\&/g'`\"\nac_cs_version=\"\\\\\nGNU make config.status 3.81\nconfigured by $0, generated by GNU Autoconf 2.65,\n  with options \\\\\"\\$ac_cs_config\\\\\"\n\nCopyright (C) 2009 Free Software Foundation, Inc.\nThis config.status script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\"\n\nac_pwd='$ac_pwd'\nsrcdir='$srcdir'\nINSTALL='$INSTALL'\nAWK='$AWK'\ntest -n \"\\$AWK\" || AWK=awk\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# The default lists apply if the user does not specify any file.\nac_need_defaults=:\nwhile test $# != 0\ndo\n  case $1 in\n  --*=*)\n    ac_option=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=`expr \"X$1\" : 'X[^=]*=\\(.*\\)'`\n    ac_shift=:\n    ;;\n  *)\n    ac_option=$1\n    ac_optarg=$2\n    ac_shift=shift\n    ;;\n  esac\n\n  case $ac_option in\n  # Handling of the options.\n  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)\n    ac_cs_recheck=: ;;\n  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )\n    $as_echo \"$ac_cs_version\"; exit ;;\n  --config | --confi | --conf | --con | --co | --c )\n    $as_echo \"$ac_cs_config\"; exit ;;\n  --debug | --debu | --deb | --de | --d | -d )\n    debug=: ;;\n  --file | --fil | --fi | --f )\n    $ac_shift\n    case $ac_optarg in\n    *\\'*) ac_optarg=`$as_echo \"$ac_optarg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    as_fn_append CONFIG_FILES \" '$ac_optarg'\"\n    ac_need_defaults=false;;\n  --header | --heade | --head | --hea )\n    $ac_shift\n    case $ac_optarg in\n    *\\'*) ac_optarg=`$as_echo \"$ac_optarg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    as_fn_append CONFIG_HEADERS \" '$ac_optarg'\"\n    ac_need_defaults=false;;\n  --he | --h)\n    # Conflict between --help and --header\n    as_fn_error \"ambiguous option: \\`$1'\nTry \\`$0 --help' for more information.\";;\n  --help | --hel | -h )\n    $as_echo \"$ac_cs_usage\"; exit ;;\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil | --si | --s)\n    ac_cs_silent=: ;;\n\n  # This is an error.\n  -*) as_fn_error \"unrecognized option: \\`$1'\nTry \\`$0 --help' for more information.\" ;;\n\n  *) as_fn_append ac_config_targets \" $1\"\n     ac_need_defaults=false ;;\n\n  esac\n  shift\ndone\n\nac_configure_extra_args=\n\nif $ac_cs_silent; then\n  exec 6>/dev/null\n  ac_configure_extra_args=\"$ac_configure_extra_args --silent\"\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nif \\$ac_cs_recheck; then\n  set X '$SHELL' '$0' $ac_configure_args \\$ac_configure_extra_args --no-create --no-recursion\n  shift\n  \\$as_echo \"running CONFIG_SHELL=$SHELL \\$*\" >&6\n  CONFIG_SHELL='$SHELL'\n  export CONFIG_SHELL\n  exec \"\\$@\"\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nexec 5>>config.log\n{\n  echo\n  sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX\n@%:@@%:@ Running $as_me. @%:@@%:@\n_ASBOX\n  $as_echo \"$ac_log\"\n} >&5\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n#\n# INIT-COMMANDS\n#\nAMDEP_TRUE=\"$AMDEP_TRUE\" ac_aux_dir=\"$ac_aux_dir\"\n# Capture the value of obsolete ALL_LINGUAS because we need it to compute\n    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it\n    # from automake.\n    eval 'OBSOLETE_ALL_LINGUAS''=\"$ALL_LINGUAS\"'\n    # Capture the value of LINGUAS because we need it to compute CATALOGS.\n    LINGUAS=\"${LINGUAS-%UNSET%}\"\n   \n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n\n# Handling of arguments.\nfor ac_config_target in $ac_config_targets\ndo\n  case $ac_config_target in\n    \"config.h\") CONFIG_HEADERS=\"$CONFIG_HEADERS config.h\" ;;\n    \"depfiles\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS depfiles\" ;;\n    \"default-1\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS default-1\" ;;\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"glob/Makefile\") CONFIG_FILES=\"$CONFIG_FILES glob/Makefile\" ;;\n    \"po/Makefile.in\") CONFIG_FILES=\"$CONFIG_FILES po/Makefile.in\" ;;\n    \"config/Makefile\") CONFIG_FILES=\"$CONFIG_FILES config/Makefile\" ;;\n    \"doc/Makefile\") CONFIG_FILES=\"$CONFIG_FILES doc/Makefile\" ;;\n    \"w32/Makefile\") CONFIG_FILES=\"$CONFIG_FILES w32/Makefile\" ;;\n\n  *) as_fn_error \"invalid argument: \\`$ac_config_target'\" \"$LINENO\" 5;;\n  esac\ndone\n\n\n# If the user did not use the arguments to specify the items to instantiate,\n# then the envvar interface is used.  Set only those that are not.\n# We use the long form for the default assignment because of an extremely\n# bizarre bug on SunOS 4.1.3.\nif $ac_need_defaults; then\n  test \"${CONFIG_FILES+set}\" = set || CONFIG_FILES=$config_files\n  test \"${CONFIG_HEADERS+set}\" = set || CONFIG_HEADERS=$config_headers\n  test \"${CONFIG_COMMANDS+set}\" = set || CONFIG_COMMANDS=$config_commands\nfi\n\n# Have a temporary directory for convenience.  Make it in the build tree\n# simply because there is no reason against having it here, and in addition,\n# creating and moving files from /tmp can sometimes cause problems.\n# Hook for its removal unless debugging.\n# Note that there is a small window in which the directory will not be cleaned:\n# after its creation but before its name has been assigned to `$tmp'.\n$debug ||\n{\n  tmp=\n  trap 'exit_status=$?\n  { test -z \"$tmp\" || test ! -d \"$tmp\" || rm -fr \"$tmp\"; } && exit $exit_status\n' 0\n  trap 'as_fn_exit 1' 1 2 13 15\n}\n# Create a (secure) tmp directory for tmp files.\n\n{\n  tmp=`(umask 077 && mktemp -d \"./confXXXXXX\") 2>/dev/null` &&\n  test -n \"$tmp\" && test -d \"$tmp\"\n}  ||\n{\n  tmp=./conf$$-$RANDOM\n  (umask 077 && mkdir \"$tmp\")\n} || as_fn_error \"cannot create a temporary directory in .\" \"$LINENO\" 5\n\n# Set up the scripts for CONFIG_FILES section.\n# No need to generate them if there are no CONFIG_FILES.\n# This happens for instance with `./config.status config.h'.\nif test -n \"$CONFIG_FILES\"; then\n\nif $AWK 'BEGIN { getline <\"/dev/null\" }' </dev/null 2>/dev/null; then\n  ac_cs_awk_getline=:\n  ac_cs_awk_pipe_init=\n  ac_cs_awk_read_file='\n      while ((getline aline < (F[key])) > 0)\n\tprint(aline)\n      close(F[key])'\n  ac_cs_awk_pipe_fini=\nelse\n  ac_cs_awk_getline=false\n  ac_cs_awk_pipe_init=\"print \\\"cat <<'|#_!!_#|' &&\\\"\"\n  ac_cs_awk_read_file='\n      print \"|#_!!_#|\"\n      print \"cat \" F[key] \" &&\"\n      '$ac_cs_awk_pipe_init\n  # The final `:' finishes the AND list.\n  ac_cs_awk_pipe_fini='END { print \"|#_!!_#|\"; print \":\" }'\nfi\nac_cr=`echo X | tr X '\\015'`\n# On cygwin, bash can eat \\r inside `` if the user requested igncr.\n# But we know of no other shell where ac_cr would be empty at this\n# point, so we can use a bashism as a fallback.\nif test \"x$ac_cr\" = x; then\n  eval ac_cr=\\$\\'\\\\r\\'\nfi\nac_cs_awk_cr=`$AWK 'BEGIN { print \"a\\rb\" }' </dev/null 2>/dev/null`\nif test \"$ac_cs_awk_cr\" = \"a${ac_cr}b\"; then\n  ac_cs_awk_cr='\\r'\nelse\n  ac_cs_awk_cr=$ac_cr\nfi\n\necho 'BEGIN {' >\"$tmp/subs1.awk\" &&\n_ACEOF\n\n# Create commands to substitute file output variables.\n{\n  echo \"cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\" &&\n  echo 'cat >>\"\\$tmp/subs1.awk\" <<\\\\_ACAWK &&' &&\n  echo \"$ac_subst_files\" | sed 's/.*/F@<:@\"&\"@:>@=\"$&\"/' &&\n  echo \"_ACAWK\" &&\n  echo \"_ACEOF\"\n} >conf$$files.sh &&\n. ./conf$$files.sh ||\n  as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\nrm -f conf$$files.sh\n\n{\n  echo \"cat >conf$$subs.awk <<_ACEOF\" &&\n  echo \"$ac_subst_vars\" | sed 's/.*/&!$&$ac_delim/' &&\n  echo \"_ACEOF\"\n} >conf$$subs.sh ||\n  as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\nac_delim_num=`echo \"$ac_subst_vars\" | grep -c '$'`\nac_delim='%!_!# '\nfor ac_last_try in false false false false false :; do\n  . ./conf$$subs.sh ||\n    as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\n\n  ac_delim_n=`sed -n \"s/.*$ac_delim\\$/X/p\" conf$$subs.awk | grep -c X`\n  if test $ac_delim_n = $ac_delim_num; then\n    break\n  elif $ac_last_try; then\n    as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\n  else\n    ac_delim=\"$ac_delim!$ac_delim _$ac_delim!! \"\n  fi\ndone\nrm -f conf$$subs.sh\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\ncat >>\"\\$tmp/subs1.awk\" <<\\\\_ACAWK &&\n_ACEOF\nsed -n '\nh\ns/^/S[\"/; s/!.*/\"]=/\np\ng\ns/^[^!]*!//\n:repl\nt repl\ns/'\"$ac_delim\"'$//\nt delim\n:nl\nh\ns/\\(.\\{148\\}\\)..*/\\1/\nt more1\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\\\\n\"\\\\/\np\nn\nb repl\n:more1\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"\\\\/\np\ng\ns/.\\{148\\}//\nt nl\n:delim\nh\ns/\\(.\\{148\\}\\)..*/\\1/\nt more2\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"/\np\nb\n:more2\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"\\\\/\np\ng\ns/.\\{148\\}//\nt delim\n' <conf$$subs.awk | sed '\n/^[^\"\"]/{\n  N\n  s/\\n//\n}\n' >>$CONFIG_STATUS || ac_write_fail=1\nrm -f conf$$subs.awk\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n_ACAWK\ncat >>\"\\$tmp/subs1.awk\" <<_ACAWK &&\n  for (key in S) S_is_set[key] = 1\n  FS = \"\u0007\"\n  \\$ac_cs_awk_pipe_init\n}\n{\n  line = $ 0\n  nfields = split(line, field, \"@\")\n  substed = 0\n  len = length(field[1])\n  for (i = 2; i < nfields; i++) {\n    key = field[i]\n    keylen = length(key)\n    if (S_is_set[key]) {\n      value = S[key]\n      line = substr(line, 1, len) \"\" value \"\" substr(line, len + keylen + 3)\n      len += length(value) + length(field[++i])\n      substed = 1\n    } else\n      len += 1 + keylen\n  }\n  if (nfields == 3 && !substed) {\n    key = field[2]\n    if (F[key] != \"\" && line ~ /^[\t ]*@.*@[\t ]*$/) {\n      \\$ac_cs_awk_read_file\n      next\n    }\n  }\n  print line\n}\n\\$ac_cs_awk_pipe_fini\n_ACAWK\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nif sed \"s/$ac_cr//\" < /dev/null > /dev/null 2>&1; then\n  sed \"s/$ac_cr\\$//; s/$ac_cr/$ac_cs_awk_cr/g\"\nelse\n  cat\nfi < \"$tmp/subs1.awk\" > \"$tmp/subs.awk\" \\\n  || as_fn_error \"could not setup config files machinery\" \"$LINENO\" 5\n_ACEOF\n\n# VPATH may cause trouble with some makes, so we remove $(srcdir),\n# ${srcdir} and @srcdir@ from VPATH if srcdir is \".\", strip leading and\n# trailing colons and then remove the whole line if VPATH becomes empty\n# (actually we leave an empty line to preserve line numbers).\nif test \"x$srcdir\" = x.; then\n  ac_vpsub='/^[\t ]*VPATH[\t ]*=/{\ns/:*\\$(srcdir):*/:/\ns/:*\\${srcdir}:*/:/\ns/:*@srcdir@:*/:/\ns/^\\([^=]*=[\t ]*\\):*/\\1/\ns/:*$//\ns/^[^=]*=[\t ]*$//\n}'\nfi\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nfi # test -n \"$CONFIG_FILES\"\n\n# Set up the scripts for CONFIG_HEADERS section.\n# No need to generate them if there are no CONFIG_HEADERS.\n# This happens for instance with `./config.status Makefile'.\nif test -n \"$CONFIG_HEADERS\"; then\ncat >\"$tmp/defines.awk\" <<\\_ACAWK ||\nBEGIN {\n_ACEOF\n\n# Transform confdefs.h into an awk script `defines.awk', embedded as\n# here-document in config.status, that substitutes the proper values into\n# config.h.in to produce config.h.\n\n# Create a delimiter string that does not exist in confdefs.h, to ease\n# handling of long lines.\nac_delim='%!_!# '\nfor ac_last_try in false false :; do\n  ac_t=`sed -n \"/$ac_delim/p\" confdefs.h`\n  if test -z \"$ac_t\"; then\n    break\n  elif $ac_last_try; then\n    as_fn_error \"could not make $CONFIG_HEADERS\" \"$LINENO\" 5\n  else\n    ac_delim=\"$ac_delim!$ac_delim _$ac_delim!! \"\n  fi\ndone\n\n# For the awk script, D is an array of macro values keyed by name,\n# likewise P contains macro parameters if any.  Preserve backslash\n# newline sequences.\n\nac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*\nsed -n '\ns/.\\{148\\}/&'\"$ac_delim\"'/g\nt rset\n:rset\ns/^[\t ]*#[\t ]*define[\t ][\t ]*/ /\nt def\nd\n:def\ns/\\\\$//\nt bsnl\ns/[\"\\\\]/\\\\&/g\ns/^ \\('\"$ac_word_re\"'\\)\\(([^()]*)\\)[\t ]*\\(.*\\)/P[\"\\1\"]=\"\\2\"\\\nD[\"\\1\"]=\" \\3\"/p\ns/^ \\('\"$ac_word_re\"'\\)[\t ]*\\(.*\\)/D[\"\\1\"]=\" \\2\"/p\nd\n:bsnl\ns/[\"\\\\]/\\\\&/g\ns/^ \\('\"$ac_word_re\"'\\)\\(([^()]*)\\)[\t ]*\\(.*\\)/P[\"\\1\"]=\"\\2\"\\\nD[\"\\1\"]=\" \\3\\\\\\\\\\\\n\"\\\\/p\nt cont\ns/^ \\('\"$ac_word_re\"'\\)[\t ]*\\(.*\\)/D[\"\\1\"]=\" \\2\\\\\\\\\\\\n\"\\\\/p\nt cont\nd\n:cont\nn\ns/.\\{148\\}/&'\"$ac_delim\"'/g\nt clear\n:clear\ns/\\\\$//\nt bsnlc\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"/p\nd\n:bsnlc\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\\\\\\\\\\\\n\"\\\\/p\nb cont\n' <confdefs.h | sed '\ns/'\"$ac_delim\"'/\"\\\\\\\n\"/g' >>$CONFIG_STATUS || ac_write_fail=1\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n  for (key in D) D_is_set[key] = 1\n  FS = \"\u0007\"\n}\n/^[\\t ]*#[\\t ]*(define|undef)[\\t ]+$ac_word_re([\\t (]|\\$)/ {\n  line = \\$ 0\n  split(line, arg, \" \")\n  if (arg[1] == \"#\") {\n    defundef = arg[2]\n    mac1 = arg[3]\n  } else {\n    defundef = substr(arg[1], 2)\n    mac1 = arg[2]\n  }\n  split(mac1, mac2, \"(\") #)\n  macro = mac2[1]\n  prefix = substr(line, 1, index(line, defundef) - 1)\n  if (D_is_set[macro]) {\n    # Preserve the white space surrounding the \"#\".\n    print prefix \"define\", macro P[macro] D[macro]\n    next\n  } else {\n    # Replace #undef with comments.  This is necessary, for example,\n    # in the case of _POSIX_SOURCE, which is predefined and required\n    # on some systems where configure will not decide to define it.\n    if (defundef == \"undef\") {\n      print \"/*\", prefix defundef, macro, \"*/\"\n      next\n    }\n  }\n}\n{ print }\n_ACAWK\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n  as_fn_error \"could not setup config headers machinery\" \"$LINENO\" 5\nfi # test -n \"$CONFIG_HEADERS\"\n\n\neval set X \"  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS\"\nshift\nfor ac_tag\ndo\n  case $ac_tag in\n  :[FHLC]) ac_mode=$ac_tag; continue;;\n  esac\n  case $ac_mode$ac_tag in\n  :[FHL]*:*);;\n  :L* | :C*:*) as_fn_error \"invalid tag \\`$ac_tag'\" \"$LINENO\" 5;;\n  :[FH]-) ac_tag=-:-;;\n  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;\n  esac\n  ac_save_IFS=$IFS\n  IFS=:\n  set x $ac_tag\n  IFS=$ac_save_IFS\n  shift\n  ac_file=$1\n  shift\n\n  case $ac_mode in\n  :L) ac_source=$1;;\n  :[FH])\n    ac_file_inputs=\n    for ac_f\n    do\n      case $ac_f in\n      -) ac_f=\"$tmp/stdin\";;\n      *) # Look for the file first in the build tree, then in the source tree\n\t # (if the path is not absolute).  The absolute path cannot be DOS-style,\n\t # because $ac_f cannot contain `:'.\n\t test -f \"$ac_f\" ||\n\t   case $ac_f in\n\t   [\\\\/$]*) false;;\n\t   *) test -f \"$srcdir/$ac_f\" && ac_f=\"$srcdir/$ac_f\";;\n\t   esac ||\n\t   as_fn_error \"cannot find input file: \\`$ac_f'\" \"$LINENO\" 5;;\n      esac\n      case $ac_f in *\\'*) ac_f=`$as_echo \"$ac_f\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; esac\n      as_fn_append ac_file_inputs \" '$ac_f'\"\n    done\n\n    # Let's still pretend it is `configure' which instantiates (i.e., don't\n    # use $as_me), people would be surprised to read:\n    #    /* config.h.  Generated by config.status.  */\n    configure_input='Generated from '`\n\t  $as_echo \"$*\" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'\n\t`' by configure.'\n    if test x\"$ac_file\" != x-; then\n      configure_input=\"$ac_file.  $configure_input\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: creating $ac_file\" >&5\n$as_echo \"$as_me: creating $ac_file\" >&6;}\n    fi\n    # Neutralize special characters interpreted by sed in replacement strings.\n    case $configure_input in #(\n    *\\&* | *\\|* | *\\\\* )\n       ac_sed_conf_input=`$as_echo \"$configure_input\" |\n       sed 's/[\\\\\\\\&|]/\\\\\\\\&/g'`;; #(\n    *) ac_sed_conf_input=$configure_input;;\n    esac\n\n    case $ac_tag in\n    *:-:* | *:-) cat >\"$tmp/stdin\" \\\n      || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5 ;;\n    esac\n    ;;\n  esac\n\n  ac_dir=`$as_dirname -- \"$ac_file\" ||\n$as_expr X\"$ac_file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)$' \\| \\\n\t X\"$ac_file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$ac_file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  as_dir=\"$ac_dir\"; as_fn_mkdir_p\n  ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`$as_echo \"$ac_dir\" | sed 's|^\\.[\\\\/]||'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`$as_echo \"$ac_dir_suffix\" | sed 's|/[^\\\\/]*|/..|g;s|/||'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n\n  case $ac_mode in\n  :F)\n  #\n  # CONFIG_FILE\n  #\n\n  case $INSTALL in\n  [\\\\/$]* | ?:[\\\\/]* ) ac_INSTALL=$INSTALL ;;\n  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;\n  esac\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# If the template does not know about datarootdir, expand it.\n# FIXME: This hack should be removed a few years after 2.60.\nac_datarootdir_hack=; ac_datarootdir_seen=\nac_sed_dataroot='\n/datarootdir/ {\n  p\n  q\n}\n/@datadir@/p\n/@docdir@/p\n/@infodir@/p\n/@localedir@/p\n/@mandir@/p'\ncase `eval \"sed -n \\\"\\$ac_sed_dataroot\\\" $ac_file_inputs\"` in\n*datarootdir*) ac_datarootdir_seen=yes;;\n*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&5\n$as_echo \"$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&2;}\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n  ac_datarootdir_hack='\n  s&@datadir@&$datadir&g\n  s&@docdir@&$docdir&g\n  s&@infodir@&$infodir&g\n  s&@localedir@&$localedir&g\n  s&@mandir@&$mandir&g\n  s&\\\\\\${datarootdir}&$datarootdir&g' ;;\nesac\n_ACEOF\n\n# Neutralize VPATH when `$srcdir' = `.'.\n# Shell code in configure.ac might set extrasub.\n# FIXME: do we really want to maintain this feature?\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nac_sed_extra=\"$ac_vpsub\n$extrasub\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n:t\n/@[a-zA-Z_][a-zA-Z_0-9]*@/!b\ns|@configure_input@|$ac_sed_conf_input|;t t\ns&@top_builddir@&$ac_top_builddir_sub&;t t\ns&@top_build_prefix@&$ac_top_build_prefix&;t t\ns&@srcdir@&$ac_srcdir&;t t\ns&@abs_srcdir@&$ac_abs_srcdir&;t t\ns&@top_srcdir@&$ac_top_srcdir&;t t\ns&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t\ns&@builddir@&$ac_builddir&;t t\ns&@abs_builddir@&$ac_abs_builddir&;t t\ns&@abs_top_builddir@&$ac_abs_top_builddir&;t t\ns&@INSTALL@&$ac_INSTALL&;t t\n$ac_datarootdir_hack\n\"\neval sed \\\"\\$ac_sed_extra\\\" \"$ac_file_inputs\" |\nif $ac_cs_awk_getline; then\n  $AWK -f \"$tmp/subs.awk\"\nelse\n  $AWK -f \"$tmp/subs.awk\" | $SHELL\nfi >$tmp/out \\\n  || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n\ntest -z \"$ac_datarootdir_hack$ac_datarootdir_seen\" &&\n  { ac_out=`sed -n '/\\${datarootdir}/p' \"$tmp/out\"`; test -n \"$ac_out\"; } &&\n  { ac_out=`sed -n '/^[\t ]*datarootdir[\t ]*:*=/p' \"$tmp/out\"`; test -z \"$ac_out\"; } &&\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \\`datarootdir'\nwhich seems to be undefined.  Please make sure it is defined.\" >&5\n$as_echo \"$as_me: WARNING: $ac_file contains a reference to the variable \\`datarootdir'\nwhich seems to be undefined.  Please make sure it is defined.\" >&2;}\n\n  rm -f \"$tmp/stdin\"\n  case $ac_file in\n  -) cat \"$tmp/out\" && rm -f \"$tmp/out\";;\n  *) rm -f \"$ac_file\" && mv \"$tmp/out\" \"$ac_file\";;\n  esac \\\n  || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n ;;\n  :H)\n  #\n  # CONFIG_HEADER\n  #\n  if test x\"$ac_file\" != x-; then\n    {\n      $as_echo \"/* $configure_input  */\" \\\n      && eval '$AWK -f \"$tmp/defines.awk\"' \"$ac_file_inputs\"\n    } >\"$tmp/config.h\" \\\n      || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n    if diff \"$ac_file\" \"$tmp/config.h\" >/dev/null 2>&1; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: $ac_file is unchanged\" >&5\n$as_echo \"$as_me: $ac_file is unchanged\" >&6;}\n    else\n      rm -f \"$ac_file\"\n      mv \"$tmp/config.h\" \"$ac_file\" \\\n\t|| as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n    fi\n  else\n    $as_echo \"/* $configure_input  */\" \\\n      && eval '$AWK -f \"$tmp/defines.awk\"' \"$ac_file_inputs\" \\\n      || as_fn_error \"could not create -\" \"$LINENO\" 5\n  fi\n# Compute \"$ac_file\"'s index in $config_headers.\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    \"$ac_file\" | \"$ac_file\":* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for \"$ac_file\"\" >`$as_dirname -- \"$ac_file\" ||\n$as_expr X\"$ac_file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)$' \\| \\\n\t X\"$ac_file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$ac_file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`/stamp-h$_am_stamp_count\n ;;\n  \n  :C)  { $as_echo \"$as_me:${as_lineno-$LINENO}: executing $ac_file commands\" >&5\n$as_echo \"$as_me: executing $ac_file commands\" >&6;}\n ;;\n  esac\n\n\n  case $ac_file$ac_mode in\n    \"depfiles\":C) test x\"$AMDEP_TRUE\" != x\"\" || for mf in $CONFIG_FILES; do\n  # Strip MF so we end up with the name of the file.\n  mf=`echo \"$mf\" | sed -e 's/:.*$//'`\n  # Check whether this is an Automake generated Makefile or not.\n  # We used to match only the files named `Makefile.in', but\n  # some people rename them; so instead we look at the file content.\n  # Grep'ing the first line is not enough: some people post-process\n  # each Makefile.in and add a new line on top of each file to say so.\n  # So let's grep whole file.\n  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then\n    dirpart=`$as_dirname -- \"$mf\" ||\n$as_expr X\"$mf\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$mf\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$mf\" : 'X\\(//\\)$' \\| \\\n\t X\"$mf\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$mf\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  else\n    continue\n  fi\n  # Extract the definition of DEPDIR, am__include, and am__quote\n  # from the Makefile without running `make'.\n  DEPDIR=`sed -n 's/^DEPDIR = //p' < \"$mf\"`\n  test -z \"$DEPDIR\" && continue\n  am__include=`sed -n 's/^am__include = //p' < \"$mf\"`\n  test -z \"am__include\" && continue\n  am__quote=`sed -n 's/^am__quote = //p' < \"$mf\"`\n  # When using ansi2knr, U may be empty or an underscore; expand it\n  U=`sed -n 's/^U = //p' < \"$mf\"`\n  # Find all dependency output files, they are included files with\n  # $(DEPDIR) in their names.  We invoke sed twice because it is the\n  # simplest approach to changing $(DEPDIR) to its actual value in the\n  # expansion.\n  for file in `sed -n \"\n    s/^$am__include $am__quote\\(.*(DEPDIR).*\\)$am__quote\"'$/\\1/p' <\"$mf\" | \\\n       sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/g' -e 's/\\$U/'\"$U\"'/g'`; do\n    # Make sure the directory exists.\n    test -f \"$dirpart/$file\" && continue\n    fdir=`$as_dirname -- \"$file\" ||\n$as_expr X\"$file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$file\" : 'X\\(//\\)$' \\| \\\n\t X\"$file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n    as_dir=$dirpart/$fdir; as_fn_mkdir_p\n    # echo \"creating $dirpart/$file\"\n    echo '# dummy' > \"$dirpart/$file\"\n  done\ndone\n ;;\n    \"default-1\":C) \n    for ac_file in $CONFIG_FILES; do\n      # Support \"outfile[:infile[:infile...]]\"\n      case \"$ac_file\" in\n        *:*) ac_file=`echo \"$ac_file\"|sed 's%:.*%%'` ;;\n      esac\n      # PO directories have a Makefile.in generated from Makefile.in.in.\n      case \"$ac_file\" in */Makefile.in)\n        # Adjust a relative srcdir.\n        ac_dir=`echo \"$ac_file\"|sed 's%/[^/][^/]*$%%'`\n        ac_dir_suffix=\"/`echo \"$ac_dir\"|sed 's%^\\./%%'`\"\n        ac_dots=`echo \"$ac_dir_suffix\"|sed 's%/[^/]*%../%g'`\n        # In autoconf-2.13 it is called $ac_given_srcdir.\n        # In autoconf-2.50 it is called $srcdir.\n        test -n \"$ac_given_srcdir\" || ac_given_srcdir=\"$srcdir\"\n        case \"$ac_given_srcdir\" in\n          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;\n          /*) top_srcdir=\"$ac_given_srcdir\" ;;\n          *)  top_srcdir=\"$ac_dots$ac_given_srcdir\" ;;\n        esac\n        if test -f \"$ac_given_srcdir/$ac_dir/POTFILES.in\"; then\n          rm -f \"$ac_dir/POTFILES\"\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/POTFILES\" || echo \"creating $ac_dir/POTFILES\"\n          cat \"$ac_given_srcdir/$ac_dir/POTFILES.in\" | sed -e \"/^#/d\" -e \"/^[ \t]*\\$/d\" -e \"s,.*,     $top_srcdir/& \\\\\\\\,\" | sed -e \"\\$s/\\(.*\\) \\\\\\\\/\\1/\" > \"$ac_dir/POTFILES\"\n          POMAKEFILEDEPS=\"POTFILES.in\"\n          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend\n          # on $ac_dir but don't depend on user-specified configuration\n          # parameters.\n          if test -f \"$ac_given_srcdir/$ac_dir/LINGUAS\"; then\n            # The LINGUAS file contains the set of available languages.\n            if test -n \"$OBSOLETE_ALL_LINGUAS\"; then\n              test -n \"$as_me\" && echo \"$as_me: setting ALL_LINGUAS in configure.in is obsolete\" || echo \"setting ALL_LINGUAS in configure.in is obsolete\"\n            fi\n            ALL_LINGUAS_=`sed -e \"/^#/d\" \"$ac_given_srcdir/$ac_dir/LINGUAS\"`\n            # Hide the ALL_LINGUAS assigment from automake.\n            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'\n            POMAKEFILEDEPS=\"$POMAKEFILEDEPS LINGUAS\"\n          else\n            # The set of available languages was given in configure.in.\n            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'\n          fi\n          # Compute POFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)\n          # Compute UPDATEPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)\n          # Compute DUMMYPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)\n          # Compute GMOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)\n          case \"$ac_given_srcdir\" in\n            .) srcdirpre= ;;\n            *) srcdirpre='$(srcdir)/' ;;\n          esac\n          POFILES=\n          UPDATEPOFILES=\n          DUMMYPOFILES=\n          GMOFILES=\n          for lang in $ALL_LINGUAS; do\n            POFILES=\"$POFILES $srcdirpre$lang.po\"\n            UPDATEPOFILES=\"$UPDATEPOFILES $lang.po-update\"\n            DUMMYPOFILES=\"$DUMMYPOFILES $lang.nop\"\n            GMOFILES=\"$GMOFILES $srcdirpre$lang.gmo\"\n          done\n          # CATALOGS depends on both $ac_dir and the user's LINGUAS\n          # environment variable.\n          INST_LINGUAS=\n          if test -n \"$ALL_LINGUAS\"; then\n            for presentlang in $ALL_LINGUAS; do\n              useit=no\n              if test \"%UNSET%\" != \"$LINGUAS\"; then\n                desiredlanguages=\"$LINGUAS\"\n              else\n                desiredlanguages=\"$ALL_LINGUAS\"\n              fi\n              for desiredlang in $desiredlanguages; do\n                # Use the presentlang catalog if desiredlang is\n                #   a. equal to presentlang, or\n                #   b. a variant of presentlang (because in this case,\n                #      presentlang can be used as a fallback for messages\n                #      which are not translated in the desiredlang catalog).\n                case \"$desiredlang\" in\n                  \"$presentlang\"*) useit=yes;;\n                esac\n              done\n              if test $useit = yes; then\n                INST_LINGUAS=\"$INST_LINGUAS $presentlang\"\n              fi\n            done\n          fi\n          CATALOGS=\n          if test -n \"$INST_LINGUAS\"; then\n            for lang in $INST_LINGUAS; do\n              CATALOGS=\"$CATALOGS $lang.gmo\"\n            done\n          fi\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/Makefile\" || echo \"creating $ac_dir/Makefile\"\n          sed -e \"/^POTFILES =/r $ac_dir/POTFILES\" -e \"/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars\" -e \"s|@POFILES@|$POFILES|g\" -e \"s|@UPDATEPOFILES@|$UPDATEPOFILES|g\" -e \"s|@DUMMYPOFILES@|$DUMMYPOFILES|g\" -e \"s|@GMOFILES@|$GMOFILES|g\" -e \"s|@CATALOGS@|$CATALOGS|g\" -e \"s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g\" \"$ac_dir/Makefile.in\" > \"$ac_dir/Makefile\"\n          for f in \"$ac_given_srcdir/$ac_dir\"/Rules-*; do\n            if test -f \"$f\"; then\n              case \"$f\" in\n                *.orig | *.bak | *~) ;;\n                *) cat \"$f\" >> \"$ac_dir/Makefile\" ;;\n              esac\n            fi\n          done\n        fi\n        ;;\n      esac\n    done ;;\n\n  esac\ndone # for ac_tag\n\n\nas_fn_exit 0\n_ACEOF\nac_clean_files=$ac_clean_files_save\n\ntest $ac_write_fail = 0 ||\n  as_fn_error \"write failure creating $CONFIG_STATUS\" \"$LINENO\" 5\n\n\n# configure is writing to config.log, and then calls config.status.\n# config.status does its own redirection, appending to config.log.\n# Unfortunately, on DOS this fails, as config.log is still kept open\n# by configure, so config.status won't be able to write to it; its\n# output is simply discarded.  So we exec the FD to /dev/null,\n# effectively closing config.log, so it can be properly (re)opened and\n# appended to by config.status.  When coming back to configure, we\n# need to make the FD available again.\nif test \"$no_create\" != yes; then\n  ac_cs_success=:\n  ac_config_status_args=\n  test \"$silent\" = yes &&\n    ac_config_status_args=\"$ac_config_status_args --quiet\"\n  exec 5>/dev/null\n  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false\n  exec 5>>config.log\n  # Use ||, not &&, to avoid exiting from the if with $? = 1, which\n  # would make configure fail if this is the last instruction.\n  $ac_cs_success || as_fn_exit $?\nfi\nif test -n \"$ac_unrecognized_opts\" && test \"$enable_option_checking\" != no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts\" >&5\n$as_echo \"$as_me: WARNING: unrecognized options: $ac_unrecognized_opts\" >&2;}\nfi\n\n\n# We only generate the build.sh if we have a build.sh.in; we won't have\n# one before we've created a distribution.\nif test -f \"$srcdir/build.sh.in\"; then\n  ./config.status --file build.sh\n  chmod +x build.sh\nfi\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/autom4te.cache/requests",
    "content": "# This file was generated by Autom4te Tue Dec 22 07:01:21 UTC 2009.\n# It contains the lists of macros which have been traced.\n# It can be safely removed.\n\n@request = (\n             bless( [\n                      '0',\n                      1,\n                      [\n                        '/usr/share/autoconf'\n                      ],\n                      [\n                        '/usr/share/autoconf/autoconf/autoconf.m4f',\n                        'aclocal.m4',\n                        'configure.in'\n                      ],\n                      {\n                        'AM_PROG_F77_C_O' => 1,\n                        '_LT_AC_TAGCONFIG' => 1,\n                        'm4_pattern_forbid' => 1,\n                        'AC_INIT' => 1,\n                        'AC_CANONICAL_TARGET' => 1,\n                        '_AM_COND_IF' => 1,\n                        'AC_CONFIG_LIBOBJ_DIR' => 1,\n                        'AC_SUBST' => 1,\n                        'AC_CANONICAL_HOST' => 1,\n                        'AC_FC_SRCEXT' => 1,\n                        'AC_PROG_LIBTOOL' => 1,\n                        'AM_INIT_AUTOMAKE' => 1,\n                        'AC_CONFIG_SUBDIRS' => 1,\n                        'AM_AUTOMAKE_VERSION' => 1,\n                        'LT_CONFIG_LTDL_DIR' => 1,\n                        'AC_CONFIG_LINKS' => 1,\n                        'AC_REQUIRE_AUX_FILE' => 1,\n                        'LT_SUPPORTED_TAG' => 1,\n                        'm4_sinclude' => 1,\n                        'AM_MAINTAINER_MODE' => 1,\n                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,\n                        '_m4_warn' => 1,\n                        'AM_PROG_CXX_C_O' => 1,\n                        '_AM_COND_ENDIF' => 1,\n                        'AM_ENABLE_MULTILIB' => 1,\n                        'AM_SILENT_RULES' => 1,\n                        'AC_CONFIG_FILES' => 1,\n                        'include' => 1,\n                        'LT_INIT' => 1,\n                        'AM_GNU_GETTEXT' => 1,\n                        'AC_LIBSOURCE' => 1,\n                        'AC_CANONICAL_BUILD' => 1,\n                        'AM_PROG_FC_C_O' => 1,\n                        'AC_FC_FREEFORM' => 1,\n                        'AH_OUTPUT' => 1,\n                        'AC_CONFIG_AUX_DIR' => 1,\n                        '_AM_SUBST_NOTMAKE' => 1,\n                        'AM_PROG_CC_C_O' => 1,\n                        'm4_pattern_allow' => 1,\n                        'sinclude' => 1,\n                        'AM_CONDITIONAL' => 1,\n                        'AC_CANONICAL_SYSTEM' => 1,\n                        'AC_CONFIG_HEADERS' => 1,\n                        'AC_DEFINE_TRACE_LITERAL' => 1,\n                        'm4_include' => 1,\n                        '_AM_COND_ELSE' => 1,\n                        'AC_SUBST_TRACE' => 1\n                      }\n                    ], 'Autom4te::Request' )\n           );\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/autom4te.cache/traces.0",
    "content": "m4trace:aclocal.m4:932: -1- m4_include([config/dospaths.m4])\nm4trace:aclocal.m4:933: -1- m4_include([config/gettext.m4])\nm4trace:aclocal.m4:934: -1- m4_include([config/iconv.m4])\nm4trace:aclocal.m4:935: -1- m4_include([config/lib-ld.m4])\nm4trace:aclocal.m4:936: -1- m4_include([config/lib-link.m4])\nm4trace:aclocal.m4:937: -1- m4_include([config/lib-prefix.m4])\nm4trace:aclocal.m4:938: -1- m4_include([config/nls.m4])\nm4trace:aclocal.m4:939: -1- m4_include([config/po.m4])\nm4trace:aclocal.m4:940: -1- m4_include([config/progtest.m4])\nm4trace:aclocal.m4:941: -1- m4_include([acinclude.m4])\nm4trace:configure.in:19: -1- AC_INIT([GNU make], [3.81], [bug-make@gnu.org])\nm4trace:configure.in:19: -1- m4_pattern_forbid([^_?A[CHUM]_])\nm4trace:configure.in:19: -1- m4_pattern_forbid([_AC_])\nm4trace:configure.in:19: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])\nm4trace:configure.in:19: -1- m4_pattern_allow([^AS_FLAGS$])\nm4trace:configure.in:19: -1- m4_pattern_forbid([^_?m4_])\nm4trace:configure.in:19: -1- m4_pattern_forbid([^dnl$])\nm4trace:configure.in:19: -1- m4_pattern_forbid([^_?AS_])\nm4trace:configure.in:19: -1- AC_SUBST([SHELL])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([SHELL])\nm4trace:configure.in:19: -1- m4_pattern_allow([^SHELL$])\nm4trace:configure.in:19: -1- AC_SUBST([PATH_SEPARATOR])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PATH_SEPARATOR])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PATH_SEPARATOR$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_NAME])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_NAME$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_TARNAME$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_VERSION])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_VERSION$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_STRING])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_STRING$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])\nm4trace:configure.in:19: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL],       ['AC_PACKAGE_URL'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([PACKAGE_URL])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_URL$])\nm4trace:configure.in:19: -1- AC_SUBST([exec_prefix], [NONE])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([exec_prefix])\nm4trace:configure.in:19: -1- m4_pattern_allow([^exec_prefix$])\nm4trace:configure.in:19: -1- AC_SUBST([prefix], [NONE])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([prefix])\nm4trace:configure.in:19: -1- m4_pattern_allow([^prefix$])\nm4trace:configure.in:19: -1- AC_SUBST([program_transform_name], [s,x,x,])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([program_transform_name])\nm4trace:configure.in:19: -1- m4_pattern_allow([^program_transform_name$])\nm4trace:configure.in:19: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([bindir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^bindir$])\nm4trace:configure.in:19: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([sbindir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^sbindir$])\nm4trace:configure.in:19: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([libexecdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^libexecdir$])\nm4trace:configure.in:19: -1- AC_SUBST([datarootdir], ['${prefix}/share'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([datarootdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^datarootdir$])\nm4trace:configure.in:19: -1- AC_SUBST([datadir], ['${datarootdir}'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([datadir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^datadir$])\nm4trace:configure.in:19: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([sysconfdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^sysconfdir$])\nm4trace:configure.in:19: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([sharedstatedir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^sharedstatedir$])\nm4trace:configure.in:19: -1- AC_SUBST([localstatedir], ['${prefix}/var'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([localstatedir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^localstatedir$])\nm4trace:configure.in:19: -1- AC_SUBST([includedir], ['${prefix}/include'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([includedir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^includedir$])\nm4trace:configure.in:19: -1- AC_SUBST([oldincludedir], ['/usr/include'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([oldincludedir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^oldincludedir$])\nm4trace:configure.in:19: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],\n\t\t\t\t     ['${datarootdir}/doc/${PACKAGE_TARNAME}'],\n\t\t\t\t     ['${datarootdir}/doc/${PACKAGE}'])])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([docdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^docdir$])\nm4trace:configure.in:19: -1- AC_SUBST([infodir], ['${datarootdir}/info'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([infodir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^infodir$])\nm4trace:configure.in:19: -1- AC_SUBST([htmldir], ['${docdir}'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([htmldir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^htmldir$])\nm4trace:configure.in:19: -1- AC_SUBST([dvidir], ['${docdir}'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([dvidir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^dvidir$])\nm4trace:configure.in:19: -1- AC_SUBST([pdfdir], ['${docdir}'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([pdfdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^pdfdir$])\nm4trace:configure.in:19: -1- AC_SUBST([psdir], ['${docdir}'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([psdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^psdir$])\nm4trace:configure.in:19: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([libdir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^libdir$])\nm4trace:configure.in:19: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([localedir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^localedir$])\nm4trace:configure.in:19: -1- AC_SUBST([mandir], ['${datarootdir}/man'])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([mandir])\nm4trace:configure.in:19: -1- m4_pattern_allow([^mandir$])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_NAME$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */\n@%:@undef PACKAGE_NAME])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_TARNAME$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */\n@%:@undef PACKAGE_TARNAME])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_VERSION$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */\n@%:@undef PACKAGE_VERSION])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_STRING$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */\n@%:@undef PACKAGE_STRING])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */\n@%:@undef PACKAGE_BUGREPORT])\nm4trace:configure.in:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])\nm4trace:configure.in:19: -1- m4_pattern_allow([^PACKAGE_URL$])\nm4trace:configure.in:19: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */\n@%:@undef PACKAGE_URL])\nm4trace:configure.in:19: -1- AC_SUBST([DEFS])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([DEFS])\nm4trace:configure.in:19: -1- m4_pattern_allow([^DEFS$])\nm4trace:configure.in:19: -1- AC_SUBST([ECHO_C])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([ECHO_C])\nm4trace:configure.in:19: -1- m4_pattern_allow([^ECHO_C$])\nm4trace:configure.in:19: -1- AC_SUBST([ECHO_N])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([ECHO_N])\nm4trace:configure.in:19: -1- m4_pattern_allow([^ECHO_N$])\nm4trace:configure.in:19: -1- AC_SUBST([ECHO_T])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([ECHO_T])\nm4trace:configure.in:19: -1- m4_pattern_allow([^ECHO_T$])\nm4trace:configure.in:19: -1- AC_SUBST([LIBS])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([LIBS])\nm4trace:configure.in:19: -1- m4_pattern_allow([^LIBS$])\nm4trace:configure.in:19: -1- AC_SUBST([build_alias])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([build_alias])\nm4trace:configure.in:19: -1- m4_pattern_allow([^build_alias$])\nm4trace:configure.in:19: -1- AC_SUBST([host_alias])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([host_alias])\nm4trace:configure.in:19: -1- m4_pattern_allow([^host_alias$])\nm4trace:configure.in:19: -1- AC_SUBST([target_alias])\nm4trace:configure.in:19: -1- AC_SUBST_TRACE([target_alias])\nm4trace:configure.in:19: -1- m4_pattern_allow([^target_alias$])\nm4trace:configure.in:25: -1- AC_CONFIG_AUX_DIR([config])\nm4trace:configure.in:27: -1- AC_CONFIG_HEADERS([config.h])\nm4trace:configure.in:30: -1- AM_INIT_AUTOMAKE([1.9])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])\nm4trace:configure.in:30: -1- AM_AUTOMAKE_VERSION([1.9.6])\nm4trace:configure.in:30: -1- AC_REQUIRE_AUX_FILE([install-sh])\nm4trace:configure.in:30: -1- AC_SUBST([INSTALL_PROGRAM])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])\nm4trace:configure.in:30: -1- m4_pattern_allow([^INSTALL_PROGRAM$])\nm4trace:configure.in:30: -1- AC_SUBST([INSTALL_SCRIPT])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])\nm4trace:configure.in:30: -1- m4_pattern_allow([^INSTALL_SCRIPT$])\nm4trace:configure.in:30: -1- AC_SUBST([INSTALL_DATA])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([INSTALL_DATA])\nm4trace:configure.in:30: -1- m4_pattern_allow([^INSTALL_DATA$])\nm4trace:configure.in:30: -1- AC_SUBST([CYGPATH_W])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([CYGPATH_W])\nm4trace:configure.in:30: -1- m4_pattern_allow([^CYGPATH_W$])\nm4trace:configure.in:30: -1- _m4_warn([obsolete], [The macro `AC_FOREACH' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:196: AC_FOREACH is expanded from...\naclocal.m4:722: _AM_SET_OPTIONS is expanded from...\naclocal.m4:396: AM_INIT_AUTOMAKE is expanded from...\nconfigure.in:30: the top level])\nm4trace:configure.in:30: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([PACKAGE])\nm4trace:configure.in:30: -1- m4_pattern_allow([^PACKAGE$])\nm4trace:configure.in:30: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([VERSION])\nm4trace:configure.in:30: -1- m4_pattern_allow([^VERSION$])\nm4trace:configure.in:30: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])\nm4trace:configure.in:30: -1- m4_pattern_allow([^PACKAGE$])\nm4trace:configure.in:30: -1- AH_OUTPUT([PACKAGE], [/* Name of package */\n@%:@undef PACKAGE])\nm4trace:configure.in:30: -1- AC_DEFINE_TRACE_LITERAL([VERSION])\nm4trace:configure.in:30: -1- m4_pattern_allow([^VERSION$])\nm4trace:configure.in:30: -1- AH_OUTPUT([VERSION], [/* Version number of package */\n@%:@undef VERSION])\nm4trace:configure.in:30: -1- AC_SUBST([ACLOCAL])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([ACLOCAL])\nm4trace:configure.in:30: -1- m4_pattern_allow([^ACLOCAL$])\nm4trace:configure.in:30: -1- AC_SUBST([AUTOCONF])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([AUTOCONF])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AUTOCONF$])\nm4trace:configure.in:30: -1- AC_SUBST([AUTOMAKE])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([AUTOMAKE])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AUTOMAKE$])\nm4trace:configure.in:30: -1- AC_SUBST([AUTOHEADER])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([AUTOHEADER])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AUTOHEADER$])\nm4trace:configure.in:30: -1- AC_SUBST([MAKEINFO])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([MAKEINFO])\nm4trace:configure.in:30: -1- m4_pattern_allow([^MAKEINFO$])\nm4trace:configure.in:30: -1- AC_SUBST([install_sh])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([install_sh])\nm4trace:configure.in:30: -1- m4_pattern_allow([^install_sh$])\nm4trace:configure.in:30: -1- AC_SUBST([STRIP])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([STRIP])\nm4trace:configure.in:30: -1- m4_pattern_allow([^STRIP$])\nm4trace:configure.in:30: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])\nm4trace:configure.in:30: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])\nm4trace:configure.in:30: -1- AC_SUBST([mkdir_p])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([mkdir_p])\nm4trace:configure.in:30: -1- m4_pattern_allow([^mkdir_p$])\nm4trace:configure.in:30: -1- AC_SUBST([AWK])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([AWK])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AWK$])\nm4trace:configure.in:30: -1- AC_SUBST([SET_MAKE])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([SET_MAKE])\nm4trace:configure.in:30: -1- m4_pattern_allow([^SET_MAKE$])\nm4trace:configure.in:30: -1- AC_SUBST([am__leading_dot])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([am__leading_dot])\nm4trace:configure.in:30: -1- m4_pattern_allow([^am__leading_dot$])\nm4trace:configure.in:30: -1- AC_SUBST([AMTAR])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([AMTAR])\nm4trace:configure.in:30: -1- m4_pattern_allow([^AMTAR$])\nm4trace:configure.in:30: -1- AC_SUBST([am__tar])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([am__tar])\nm4trace:configure.in:30: -1- m4_pattern_allow([^am__tar$])\nm4trace:configure.in:30: -1- AC_SUBST([am__untar])\nm4trace:configure.in:30: -1- AC_SUBST_TRACE([am__untar])\nm4trace:configure.in:30: -1- m4_pattern_allow([^am__untar$])\nm4trace:configure.in:33: -1- AC_SUBST([CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CC$])\nm4trace:configure.in:33: -1- AC_SUBST([CFLAGS])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CFLAGS])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CFLAGS$])\nm4trace:configure.in:33: -1- AC_SUBST([LDFLAGS])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([LDFLAGS])\nm4trace:configure.in:33: -1- m4_pattern_allow([^LDFLAGS$])\nm4trace:configure.in:33: -1- AC_SUBST([LIBS])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([LIBS])\nm4trace:configure.in:33: -1- m4_pattern_allow([^LIBS$])\nm4trace:configure.in:33: -1- AC_SUBST([CPPFLAGS])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CPPFLAGS])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CPPFLAGS$])\nm4trace:configure.in:33: -1- AC_SUBST([CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CC$])\nm4trace:configure.in:33: -1- AC_SUBST([CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CC$])\nm4trace:configure.in:33: -1- AC_SUBST([CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CC$])\nm4trace:configure.in:33: -1- AC_SUBST([CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CC$])\nm4trace:configure.in:33: -1- AC_SUBST([ac_ct_CC])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([ac_ct_CC])\nm4trace:configure.in:33: -1- m4_pattern_allow([^ac_ct_CC$])\nm4trace:configure.in:33: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([EXEEXT])\nm4trace:configure.in:33: -1- m4_pattern_allow([^EXEEXT$])\nm4trace:configure.in:33: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([OBJEXT])\nm4trace:configure.in:33: -1- m4_pattern_allow([^OBJEXT$])\nm4trace:configure.in:33: -1- AC_SUBST([DEPDIR], [\"${am__leading_dot}deps\"])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([DEPDIR])\nm4trace:configure.in:33: -1- m4_pattern_allow([^DEPDIR$])\nm4trace:configure.in:33: -1- AC_SUBST([am__include])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([am__include])\nm4trace:configure.in:33: -1- m4_pattern_allow([^am__include$])\nm4trace:configure.in:33: -1- AC_SUBST([am__quote])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([am__quote])\nm4trace:configure.in:33: -1- m4_pattern_allow([^am__quote$])\nm4trace:configure.in:33: -1- AM_CONDITIONAL([AMDEP], [test \"x$enable_dependency_tracking\" != xno])\nm4trace:configure.in:33: -1- AC_SUBST([AMDEP_TRUE])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([AMDEP_TRUE])\nm4trace:configure.in:33: -1- m4_pattern_allow([^AMDEP_TRUE$])\nm4trace:configure.in:33: -1- AC_SUBST([AMDEP_FALSE])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([AMDEP_FALSE])\nm4trace:configure.in:33: -1- m4_pattern_allow([^AMDEP_FALSE$])\nm4trace:configure.in:33: -1- AC_SUBST([AMDEPBACKSLASH])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])\nm4trace:configure.in:33: -1- m4_pattern_allow([^AMDEPBACKSLASH$])\nm4trace:configure.in:33: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([CCDEPMODE])\nm4trace:configure.in:33: -1- m4_pattern_allow([^CCDEPMODE$])\nm4trace:configure.in:33: -1- AM_CONDITIONAL([am__fastdepCC], [\n  test \"x$enable_dependency_tracking\" != xno \\\n  && test \"$am_cv_CC_dependencies_compiler_type\" = gcc3])\nm4trace:configure.in:33: -1- AC_SUBST([am__fastdepCC_TRUE])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])\nm4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])\nm4trace:configure.in:33: -1- AC_SUBST([am__fastdepCC_FALSE])\nm4trace:configure.in:33: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])\nm4trace:configure.in:33: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])\nm4trace:configure.in:35: -1- AC_SUBST([RANLIB])\nm4trace:configure.in:35: -1- AC_SUBST_TRACE([RANLIB])\nm4trace:configure.in:35: -1- m4_pattern_allow([^RANLIB$])\nm4trace:configure.in:36: -1- AC_SUBST([CPP])\nm4trace:configure.in:36: -1- AC_SUBST_TRACE([CPP])\nm4trace:configure.in:36: -1- m4_pattern_allow([^CPP$])\nm4trace:configure.in:36: -1- AC_SUBST([CPPFLAGS])\nm4trace:configure.in:36: -1- AC_SUBST_TRACE([CPPFLAGS])\nm4trace:configure.in:36: -1- m4_pattern_allow([^CPPFLAGS$])\nm4trace:configure.in:36: -1- AC_SUBST([CPP])\nm4trace:configure.in:36: -1- AC_SUBST_TRACE([CPP])\nm4trace:configure.in:36: -1- m4_pattern_allow([^CPP$])\nm4trace:configure.in:37: -1- AC_SUBST([AR])\nm4trace:configure.in:37: -1- AC_SUBST_TRACE([AR])\nm4trace:configure.in:37: -1- m4_pattern_allow([^AR$])\nm4trace:configure.in:39: -1- AC_SUBST([PERL])\nm4trace:configure.in:39: -1- AC_SUBST_TRACE([PERL])\nm4trace:configure.in:39: -1- m4_pattern_allow([^PERL$])\nm4trace:configure.in:42: -1- AC_CANONICAL_HOST\nm4trace:configure.in:42: -1- AC_CANONICAL_BUILD\nm4trace:configure.in:42: -1- AC_REQUIRE_AUX_FILE([config.sub])\nm4trace:configure.in:42: -1- AC_REQUIRE_AUX_FILE([config.guess])\nm4trace:configure.in:42: -1- AC_SUBST([build], [$ac_cv_build])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([build])\nm4trace:configure.in:42: -1- m4_pattern_allow([^build$])\nm4trace:configure.in:42: -1- AC_SUBST([build_cpu], [$[1]])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([build_cpu])\nm4trace:configure.in:42: -1- m4_pattern_allow([^build_cpu$])\nm4trace:configure.in:42: -1- AC_SUBST([build_vendor], [$[2]])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([build_vendor])\nm4trace:configure.in:42: -1- m4_pattern_allow([^build_vendor$])\nm4trace:configure.in:42: -1- AC_SUBST([build_os])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([build_os])\nm4trace:configure.in:42: -1- m4_pattern_allow([^build_os$])\nm4trace:configure.in:42: -1- AC_SUBST([host], [$ac_cv_host])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([host])\nm4trace:configure.in:42: -1- m4_pattern_allow([^host$])\nm4trace:configure.in:42: -1- AC_SUBST([host_cpu], [$[1]])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([host_cpu])\nm4trace:configure.in:42: -1- m4_pattern_allow([^host_cpu$])\nm4trace:configure.in:42: -1- AC_SUBST([host_vendor], [$[2]])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([host_vendor])\nm4trace:configure.in:42: -1- m4_pattern_allow([^host_vendor$])\nm4trace:configure.in:42: -1- AC_SUBST([host_os])\nm4trace:configure.in:42: -1- AC_SUBST_TRACE([host_os])\nm4trace:configure.in:42: -1- m4_pattern_allow([^host_os$])\nm4trace:configure.in:43: -1- _m4_warn([obsolete], [The macro `AC_AIX' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/specific.m4:432: AC_AIX is expanded from...\nconfigure.in:43: the top level])\nm4trace:configure.in:43: -1- AC_SUBST([GREP])\nm4trace:configure.in:43: -1- AC_SUBST_TRACE([GREP])\nm4trace:configure.in:43: -1- m4_pattern_allow([^GREP$])\nm4trace:configure.in:43: -1- AC_SUBST([EGREP])\nm4trace:configure.in:43: -1- AC_SUBST_TRACE([EGREP])\nm4trace:configure.in:43: -1- m4_pattern_allow([^EGREP$])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])\nm4trace:configure.in:43: -1- m4_pattern_allow([^STDC_HEADERS$])\nm4trace:configure.in:43: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */\n@%:@undef STDC_HEADERS])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */\n@%:@undef HAVE_SYS_TYPES_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */\n@%:@undef HAVE_SYS_STAT_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */\n@%:@undef HAVE_STDLIB_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */\n@%:@undef HAVE_STRING_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */\n@%:@undef HAVE_MEMORY_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */\n@%:@undef HAVE_STRINGS_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */\n@%:@undef HAVE_INTTYPES_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */\n@%:@undef HAVE_STDINT_H])\nm4trace:configure.in:43: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */\n@%:@undef HAVE_UNISTD_H])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_SOURCE])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_POSIX_SOURCE$])\nm4trace:configure.in:43: -1- AH_OUTPUT([_POSIX_SOURCE], [/* Define to 1 if you need to in order for `stat\\' and other things to work. */\n@%:@undef _POSIX_SOURCE])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_1_SOURCE])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_POSIX_1_SOURCE$])\nm4trace:configure.in:43: -1- AH_OUTPUT([_POSIX_1_SOURCE], [/* Define to 2 if the system does not provide POSIX.1 features except with\n   this defined. */\n@%:@undef _POSIX_1_SOURCE])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_MINIX])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_MINIX$])\nm4trace:configure.in:43: -1- AH_OUTPUT([_MINIX], [/* Define to 1 if on MINIX. */\n@%:@undef _MINIX])\nm4trace:configure.in:43: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix.  */\n#ifndef _ALL_SOURCE\n# undef _ALL_SOURCE\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# undef _GNU_SOURCE\n#endif\n/* Enable threading extensions on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# undef _POSIX_PTHREAD_SEMANTICS\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# undef _TANDEM_SOURCE\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# undef __EXTENSIONS__\n#endif\n])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([__EXTENSIONS__])\nm4trace:configure.in:43: -1- m4_pattern_allow([^__EXTENSIONS__$])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_ALL_SOURCE])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_ALL_SOURCE$])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_GNU_SOURCE$])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_PTHREAD_SEMANTICS])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$])\nm4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([_TANDEM_SOURCE])\nm4trace:configure.in:43: -1- m4_pattern_allow([^_TANDEM_SOURCE$])\nm4trace:configure.in:44: -1- _m4_warn([obsolete], [The macro `AC_ISC_POSIX' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/specific.m4:442: AC_ISC_POSIX is expanded from...\nconfigure.in:44: the top level])\nm4trace:configure.in:45: -1- _m4_warn([obsolete], [The macro `AC_MINIX' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/specific.m4:437: AC_MINIX is expanded from...\nconfigure.in:45: the top level])\nm4trace:configure.in:48: -1- AC_DEFINE_TRACE_LITERAL([PROTOTYPES])\nm4trace:configure.in:48: -1- m4_pattern_allow([^PROTOTYPES$])\nm4trace:configure.in:48: -1- AH_OUTPUT([PROTOTYPES], [/* Define to 1 if the C compiler supports function prototypes. */\n@%:@undef PROTOTYPES])\nm4trace:configure.in:48: -1- AC_DEFINE_TRACE_LITERAL([__PROTOTYPES])\nm4trace:configure.in:48: -1- m4_pattern_allow([^__PROTOTYPES$])\nm4trace:configure.in:48: -1- AH_OUTPUT([__PROTOTYPES], [/* Define like PROTOTYPES; this can be used by system headers. */\n@%:@undef __PROTOTYPES])\nm4trace:configure.in:48: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */\n@%:@undef HAVE_STRING_H])\nm4trace:configure.in:48: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRING_H])\nm4trace:configure.in:48: -1- m4_pattern_allow([^HAVE_STRING_H$])\nm4trace:configure.in:48: -1- AC_SUBST([U])\nm4trace:configure.in:48: -1- AC_SUBST_TRACE([U])\nm4trace:configure.in:48: -1- m4_pattern_allow([^U$])\nm4trace:configure.in:48: -1- AC_SUBST([ANSI2KNR])\nm4trace:configure.in:48: -1- AC_SUBST_TRACE([ANSI2KNR])\nm4trace:configure.in:48: -1- m4_pattern_allow([^ANSI2KNR$])\nm4trace:configure.in:53: -1- AM_GNU_GETTEXT([external])\nm4trace:configure.in:53: -1- AC_SUBST([MKINSTALLDIRS])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([MKINSTALLDIRS])\nm4trace:configure.in:53: -1- m4_pattern_allow([^MKINSTALLDIRS$])\nm4trace:configure.in:53: -1- AC_SUBST([USE_NLS])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([USE_NLS])\nm4trace:configure.in:53: -1- m4_pattern_allow([^USE_NLS$])\nm4trace:configure.in:53: -1- AC_SUBST([MSGFMT])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([MSGFMT])\nm4trace:configure.in:53: -1- m4_pattern_allow([^MSGFMT$])\nm4trace:configure.in:53: -1- AC_SUBST([GMSGFMT])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([GMSGFMT])\nm4trace:configure.in:53: -1- m4_pattern_allow([^GMSGFMT$])\nm4trace:configure.in:53: -1- AC_SUBST([XGETTEXT])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([XGETTEXT])\nm4trace:configure.in:53: -1- m4_pattern_allow([^XGETTEXT$])\nm4trace:configure.in:53: -1- AC_SUBST([MSGMERGE])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([MSGMERGE])\nm4trace:configure.in:53: -1- m4_pattern_allow([^MSGMERGE$])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/status.m4:1019: AC_OUTPUT_COMMANDS is expanded from...\nconfig/po.m4:23: AM_PO_SUBDIRS is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- AC_SUBST([USE_NLS])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([USE_NLS])\nm4trace:configure.in:53: -1- m4_pattern_allow([^USE_NLS$])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nconfig/iconv.m4:22: AM_ICONV_LINK is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nconfig/iconv.m4:22: AM_ICONV_LINK is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ICONV])\nm4trace:configure.in:53: -1- m4_pattern_allow([^HAVE_ICONV$])\nm4trace:configure.in:53: -1- AH_OUTPUT([HAVE_ICONV], [/* Define if you have the iconv() function. */\n@%:@undef HAVE_ICONV])\nm4trace:configure.in:53: -1- AC_SUBST([LIBICONV])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([LIBICONV])\nm4trace:configure.in:53: -1- m4_pattern_allow([^LIBICONV$])\nm4trace:configure.in:53: -1- AC_SUBST([LTLIBICONV])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([LTLIBICONV])\nm4trace:configure.in:53: -1- m4_pattern_allow([^LTLIBICONV$])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nconfig/gettext.m4:59: AM_GNU_GETTEXT is expanded from...\nconfigure.in:53: the top level])\nm4trace:configure.in:53: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_NLS])\nm4trace:configure.in:53: -1- m4_pattern_allow([^ENABLE_NLS$])\nm4trace:configure.in:53: -1- AH_OUTPUT([ENABLE_NLS], [/* Define to 1 if translation of program messages to the user\\'s native\n   language is requested. */\n@%:@undef ENABLE_NLS])\nm4trace:configure.in:53: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETTEXT])\nm4trace:configure.in:53: -1- m4_pattern_allow([^HAVE_GETTEXT$])\nm4trace:configure.in:53: -1- AH_OUTPUT([HAVE_GETTEXT], [/* Define if the GNU gettext() function is already present or preinstalled. */\n@%:@undef HAVE_GETTEXT])\nm4trace:configure.in:53: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DCGETTEXT])\nm4trace:configure.in:53: -1- m4_pattern_allow([^HAVE_DCGETTEXT$])\nm4trace:configure.in:53: -1- AH_OUTPUT([HAVE_DCGETTEXT], [/* Define if the GNU dcgettext() function is already present or preinstalled.\n   */\n@%:@undef HAVE_DCGETTEXT])\nm4trace:configure.in:53: -1- AC_SUBST([INTLLIBS])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([INTLLIBS])\nm4trace:configure.in:53: -1- m4_pattern_allow([^INTLLIBS$])\nm4trace:configure.in:53: -1- AC_SUBST([LIBINTL])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([LIBINTL])\nm4trace:configure.in:53: -1- m4_pattern_allow([^LIBINTL$])\nm4trace:configure.in:53: -1- AC_SUBST([LTLIBINTL])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([LTLIBINTL])\nm4trace:configure.in:53: -1- m4_pattern_allow([^LTLIBINTL$])\nm4trace:configure.in:53: -1- AC_SUBST([POSUB])\nm4trace:configure.in:53: -1- AC_SUBST_TRACE([POSUB])\nm4trace:configure.in:53: -1- m4_pattern_allow([^POSUB$])\nm4trace:configure.in:58: -1- AC_DEFINE_TRACE_LITERAL([_FILE_OFFSET_BITS])\nm4trace:configure.in:58: -1- m4_pattern_allow([^_FILE_OFFSET_BITS$])\nm4trace:configure.in:58: -1- AH_OUTPUT([_FILE_OFFSET_BITS], [/* Number of bits in a file offset, on hosts where this is settable. */\n@%:@undef _FILE_OFFSET_BITS])\nm4trace:configure.in:58: -1- AC_DEFINE_TRACE_LITERAL([_LARGE_FILES])\nm4trace:configure.in:58: -1- m4_pattern_allow([^_LARGE_FILES$])\nm4trace:configure.in:58: -1- AH_OUTPUT([_LARGE_FILES], [/* Define for large files, on AIX-style hosts. */\n@%:@undef _LARGE_FILES])\nm4trace:configure.in:64: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])\nm4trace:configure.in:64: -1- m4_pattern_allow([^STDC_HEADERS$])\nm4trace:configure.in:64: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */\n@%:@undef STDC_HEADERS])\nm4trace:configure.in:65: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR\\'.\n   */\n@%:@undef HAVE_DIRENT_H])\nm4trace:configure.in:65: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR\\'.\n   */\n@%:@undef HAVE_SYS_NDIR_H])\nm4trace:configure.in:65: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR\\'.\n   */\n@%:@undef HAVE_SYS_DIR_H])\nm4trace:configure.in:65: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR\\'. */\n@%:@undef HAVE_NDIR_H])\nm4trace:configure.in:66: -1- AC_DEFINE_TRACE_LITERAL([STAT_MACROS_BROKEN])\nm4trace:configure.in:66: -1- m4_pattern_allow([^STAT_MACROS_BROKEN$])\nm4trace:configure.in:66: -1- AH_OUTPUT([STAT_MACROS_BROKEN], [/* Define to 1 if the `S_IS*\\' macros in <sys/stat.h> do not work properly. */\n@%:@undef STAT_MACROS_BROKEN])\nm4trace:configure.in:67: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])\nm4trace:configure.in:67: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$])\nm4trace:configure.in:67: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n@%:@undef TIME_WITH_SYS_TIME])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */\n@%:@undef HAVE_STDLIB_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */\n@%:@undef HAVE_LOCALE_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */\n@%:@undef HAVE_UNISTD_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */\n@%:@undef HAVE_LIMITS_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */\n@%:@undef HAVE_FCNTL_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */\n@%:@undef HAVE_STRING_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */\n@%:@undef HAVE_MEMORY_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */\n@%:@undef HAVE_SYS_PARAM_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_SYS_RESOURCE_H], [/* Define to 1 if you have the <sys/resource.h> header file. */\n@%:@undef HAVE_SYS_RESOURCE_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */\n@%:@undef HAVE_SYS_TIME_H])\nm4trace:configure.in:68: -1- AH_OUTPUT([HAVE_SYS_TIMEB_H], [/* Define to 1 if you have the <sys/timeb.h> header file. */\n@%:@undef HAVE_SYS_TIMEB_H])\nm4trace:configure.in:73: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ANSI_COMPILER])\nm4trace:configure.in:73: -1- m4_pattern_allow([^HAVE_ANSI_COMPILER$])\nm4trace:configure.in:73: -1- AH_OUTPUT([HAVE_ANSI_COMPILER], [/* Define if your compiler conforms to the ANSI C standard. */\n@%:@undef HAVE_ANSI_COMPILER])\nm4trace:configure.in:79: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the <stdarg.h> header file. */\n@%:@undef HAVE_STDARG_H])\nm4trace:configure.in:79: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the <varargs.h> header file. */\n@%:@undef HAVE_VARARGS_H])\nm4trace:configure.in:81: -1- AM_PROG_CC_C_O\nm4trace:configure.in:81: -1- AC_DEFINE_TRACE_LITERAL([NO_MINUS_C_MINUS_O])\nm4trace:configure.in:81: -1- m4_pattern_allow([^NO_MINUS_C_MINUS_O$])\nm4trace:configure.in:81: -1- AH_OUTPUT([NO_MINUS_C_MINUS_O], [/* Define to 1 if your C compiler doesn\\'t accept -c and -o together. */\n@%:@undef NO_MINUS_C_MINUS_O])\nm4trace:configure.in:82: -1- AC_DEFINE_TRACE_LITERAL([const])\nm4trace:configure.in:82: -1- m4_pattern_allow([^const$])\nm4trace:configure.in:82: -1- AH_OUTPUT([const], [/* Define to empty if `const\\' does not conform to ANSI C. */\n@%:@undef const])\nm4trace:configure.in:83: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from...\nconfigure.in:83: the top level])\nm4trace:configure.in:83: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])\nm4trace:configure.in:83: -1- m4_pattern_allow([^RETSIGTYPE$])\nm4trace:configure.in:83: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\\' or `void\\'). */\n@%:@undef RETSIGTYPE])\nm4trace:configure.in:84: -1- AC_DEFINE_TRACE_LITERAL([uid_t])\nm4trace:configure.in:84: -1- m4_pattern_allow([^uid_t$])\nm4trace:configure.in:84: -1- AH_OUTPUT([uid_t], [/* Define to `int\\' if <sys/types.h> doesn\\'t define. */\n@%:@undef uid_t])\nm4trace:configure.in:84: -1- AC_DEFINE_TRACE_LITERAL([gid_t])\nm4trace:configure.in:84: -1- m4_pattern_allow([^gid_t$])\nm4trace:configure.in:84: -1- AH_OUTPUT([gid_t], [/* Define to `int\\' if <sys/types.h> doesn\\'t define. */\n@%:@undef gid_t])\nm4trace:configure.in:85: -1- AC_DEFINE_TRACE_LITERAL([pid_t])\nm4trace:configure.in:85: -1- m4_pattern_allow([^pid_t$])\nm4trace:configure.in:85: -1- AH_OUTPUT([pid_t], [/* Define to `int\\' if <sys/types.h> does not define. */\n@%:@undef pid_t])\nm4trace:configure.in:89: -1- AC_DEFINE_TRACE_LITERAL([uintmax_t])\nm4trace:configure.in:89: -1- m4_pattern_allow([^uintmax_t$])\nm4trace:configure.in:89: -1- AH_OUTPUT([uintmax_t], [/* Define uintmax_t if not defined in <stdint.h> or <inttypes.h>. */\n@%:@undef uintmax_t])\nm4trace:configure.in:97: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:2581: AC_TRY_COMPILE is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\n../../lib/autoconf/general.m4:2019: AC_CACHE_CHECK is expanded from...\nacinclude.m4:110: AC_STRUCT_ST_MTIM_NSEC is expanded from...\nconfigure.in:97: the top level])\nm4trace:configure.in:97: -1- AC_DEFINE_TRACE_LITERAL([ST_MTIM_NSEC])\nm4trace:configure.in:97: -1- m4_pattern_allow([^ST_MTIM_NSEC$])\nm4trace:configure.in:97: -1- AH_OUTPUT([ST_MTIM_NSEC], [/* Define if struct stat contains a nanoseconds field */\n@%:@undef ST_MTIM_NSEC])\nm4trace:configure.in:116: -1- AC_DEFINE_TRACE_LITERAL([FILE_TIMESTAMP_HI_RES])\nm4trace:configure.in:116: -1- m4_pattern_allow([^FILE_TIMESTAMP_HI_RES$])\nm4trace:configure.in:116: -1- AH_OUTPUT([FILE_TIMESTAMP_HI_RES], [/* Use high resolution file timestamps if nonzero. */\n@%:@undef FILE_TIMESTAMP_HI_RES])\nm4trace:configure.in:124: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLOCK_GETTIME])\nm4trace:configure.in:124: -1- m4_pattern_allow([^HAVE_CLOCK_GETTIME$])\nm4trace:configure.in:124: -1- AH_OUTPUT([HAVE_CLOCK_GETTIME], [/* Define if you have the clock_gettime function. */\n@%:@undef HAVE_CLOCK_GETTIME])\nm4trace:configure.in:130: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOS_PATHS])\nm4trace:configure.in:130: -1- m4_pattern_allow([^HAVE_DOS_PATHS$])\nm4trace:configure.in:130: -1- AH_OUTPUT([HAVE_DOS_PATHS], [/* Define if the system uses DOS-style pathnames. */\n@%:@undef HAVE_DOS_PATHS])\nm4trace:configure.in:148: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETTIMEOFDAY])\nm4trace:configure.in:148: -1- m4_pattern_allow([^HAVE_GETTIMEOFDAY$])\nm4trace:configure.in:148: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define if you have a standard gettimeofday function */\n@%:@undef HAVE_GETTIMEOFDAY])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_MEMCPY], [/* Define to 1 if you have the `memcpy\\' function. */\n@%:@undef HAVE_MEMCPY])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\\' function. */\n@%:@undef HAVE_MEMMOVE])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\\' function. */\n@%:@undef HAVE_STRCHR])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\\' function. */\n@%:@undef HAVE_STRDUP])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_MKSTEMP], [/* Define to 1 if you have the `mkstemp\\' function. */\n@%:@undef HAVE_MKSTEMP])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_MKTEMP], [/* Define to 1 if you have the `mktemp\\' function. */\n@%:@undef HAVE_MKTEMP])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_FDOPEN], [/* Define to 1 if you have the `fdopen\\' function. */\n@%:@undef HAVE_FDOPEN])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_BSD_SIGNAL], [/* Define to 1 if you have the `bsd_signal\\' function. */\n@%:@undef HAVE_BSD_SIGNAL])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_DUP2], [/* Define to 1 if you have the `dup2\\' function. */\n@%:@undef HAVE_DUP2])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\\' function. */\n@%:@undef HAVE_GETCWD])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_REALPATH], [/* Define to 1 if you have the `realpath\\' function. */\n@%:@undef HAVE_REALPATH])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SIGSETMASK], [/* Define to 1 if you have the `sigsetmask\\' function. */\n@%:@undef HAVE_SIGSETMASK])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SIGACTION], [/* Define to 1 if you have the `sigaction\\' function. */\n@%:@undef HAVE_SIGACTION])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_GETGROUPS], [/* Define to 1 if you have the `getgroups\\' function. */\n@%:@undef HAVE_GETGROUPS])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETEUID], [/* Define to 1 if you have the `seteuid\\' function. */\n@%:@undef HAVE_SETEUID])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETEGID], [/* Define to 1 if you have the `setegid\\' function. */\n@%:@undef HAVE_SETEGID])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETLINEBUF], [/* Define to 1 if you have the `setlinebuf\\' function. */\n@%:@undef HAVE_SETLINEBUF])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETREUID], [/* Define to 1 if you have the `setreuid\\' function. */\n@%:@undef HAVE_SETREUID])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETREGID], [/* Define to 1 if you have the `setregid\\' function. */\n@%:@undef HAVE_SETREGID])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_GETRLIMIT], [/* Define to 1 if you have the `getrlimit\\' function. */\n@%:@undef HAVE_GETRLIMIT])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETRLIMIT], [/* Define to 1 if you have the `setrlimit\\' function. */\n@%:@undef HAVE_SETRLIMIT])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_SETVBUF], [/* Define to 1 if you have the `setvbuf\\' function. */\n@%:@undef HAVE_SETVBUF])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_PIPE], [/* Define to 1 if you have the `pipe\\' function. */\n@%:@undef HAVE_PIPE])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\\' function. */\n@%:@undef HAVE_STRERROR])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_STRSIGNAL], [/* Define to 1 if you have the `strsignal\\' function. */\n@%:@undef HAVE_STRSIGNAL])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_LSTAT], [/* Define to 1 if you have the `lstat\\' function. */\n@%:@undef HAVE_LSTAT])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_READLINK], [/* Define to 1 if you have the `readlink\\' function. */\n@%:@undef HAVE_READLINK])\nm4trace:configure.in:152: -1- AH_OUTPUT([HAVE_ATEXIT], [/* Define to 1 if you have the `atexit\\' function. */\n@%:@undef HAVE_ATEXIT])\nm4trace:configure.in:158: -1- _m4_warn([obsolete], [The macro `AC_FUNC_SETVBUF_REVERSED' is obsolete.  Remove it and all references to SETVBUF_REVERSED.], [../../lib/autoconf/functions.m4:1692: AC_FUNC_SETVBUF_REVERSED is expanded from...\nconfigure.in:158: the top level])\nm4trace:configure.in:161: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCOLL])\nm4trace:configure.in:161: -1- m4_pattern_allow([^HAVE_STRCOLL$])\nm4trace:configure.in:161: -1- AH_OUTPUT([HAVE_STRCOLL], [/* Define to 1 if you have the `strcoll\\' function and it is properly defined.\n   */\n@%:@undef HAVE_STRCOLL])\nm4trace:configure.in:163: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H])\nm4trace:configure.in:163: -1- m4_pattern_allow([^HAVE_ALLOCA_H$])\nm4trace:configure.in:163: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).\n   */\n@%:@undef HAVE_ALLOCA_H])\nm4trace:configure.in:163: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA])\nm4trace:configure.in:163: -1- m4_pattern_allow([^HAVE_ALLOCA$])\nm4trace:configure.in:163: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\\', as a function or macro. */\n@%:@undef HAVE_ALLOCA])\nm4trace:configure.in:163: -1- AC_LIBSOURCE([alloca.c])\nm4trace:configure.in:163: -1- AC_SUBST([ALLOCA], [\\${LIBOBJDIR}alloca.$ac_objext])\nm4trace:configure.in:163: -1- AC_SUBST_TRACE([ALLOCA])\nm4trace:configure.in:163: -1- m4_pattern_allow([^ALLOCA$])\nm4trace:configure.in:163: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA])\nm4trace:configure.in:163: -1- m4_pattern_allow([^C_ALLOCA$])\nm4trace:configure.in:163: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\\'. */\n@%:@undef C_ALLOCA])\nm4trace:configure.in:163: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END])\nm4trace:configure.in:163: -1- m4_pattern_allow([^CRAY_STACKSEG_END$])\nm4trace:configure.in:163: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\\', `GETB67\\', `getb67\\' for Cray-2 and Cray-YMP\n   systems. This function is required for `alloca.c\\' support on those systems.\n   */\n@%:@undef CRAY_STACKSEG_END])\nm4trace:configure.in:163: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at runtime.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown */\n@%:@undef STACK_DIRECTION])\nm4trace:configure.in:163: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION])\nm4trace:configure.in:163: -1- m4_pattern_allow([^STACK_DIRECTION$])\nm4trace:configure.in:164: -1- AH_OUTPUT([HAVE_VFORK_H], [/* Define to 1 if you have the <vfork.h> header file. */\n@%:@undef HAVE_VFORK_H])\nm4trace:configure.in:164: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VFORK_H])\nm4trace:configure.in:164: -1- m4_pattern_allow([^HAVE_VFORK_H$])\nm4trace:configure.in:164: -1- AH_OUTPUT([HAVE_FORK], [/* Define to 1 if you have the `fork\\' function. */\n@%:@undef HAVE_FORK])\nm4trace:configure.in:164: -1- AH_OUTPUT([HAVE_VFORK], [/* Define to 1 if you have the `vfork\\' function. */\n@%:@undef HAVE_VFORK])\nm4trace:configure.in:164: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_VFORK])\nm4trace:configure.in:164: -1- m4_pattern_allow([^HAVE_WORKING_VFORK$])\nm4trace:configure.in:164: -1- AH_OUTPUT([HAVE_WORKING_VFORK], [/* Define to 1 if `vfork\\' works. */\n@%:@undef HAVE_WORKING_VFORK])\nm4trace:configure.in:164: -1- AC_DEFINE_TRACE_LITERAL([vfork])\nm4trace:configure.in:164: -1- m4_pattern_allow([^vfork$])\nm4trace:configure.in:164: -1- AH_OUTPUT([vfork], [/* Define as `fork\\' if `vfork\\' does not work. */\n@%:@undef vfork])\nm4trace:configure.in:164: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_FORK])\nm4trace:configure.in:164: -1- m4_pattern_allow([^HAVE_WORKING_FORK$])\nm4trace:configure.in:164: -1- AH_OUTPUT([HAVE_WORKING_FORK], [/* Define to 1 if `fork\\' works. */\n@%:@undef HAVE_WORKING_FORK])\nm4trace:configure.in:165: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\\' function. */\n@%:@undef HAVE_VPRINTF])\nm4trace:configure.in:165: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF])\nm4trace:configure.in:165: -1- m4_pattern_allow([^HAVE_VPRINTF$])\nm4trace:configure.in:165: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT])\nm4trace:configure.in:165: -1- m4_pattern_allow([^HAVE_DOPRNT$])\nm4trace:configure.in:165: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\\'t have `vprintf\\' but do have `_doprnt.\\' */\n@%:@undef HAVE_DOPRNT])\nm4trace:configure.in:166: -1- AC_DEFINE_TRACE_LITERAL([CLOSEDIR_VOID])\nm4trace:configure.in:166: -1- m4_pattern_allow([^CLOSEDIR_VOID$])\nm4trace:configure.in:166: -1- AH_OUTPUT([CLOSEDIR_VOID], [/* Define to 1 if the `closedir\\' function returns void instead of `int\\'. */\n@%:@undef CLOSEDIR_VOID])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_PSTAT_GETDYNAMIC], [/* Define to 1 if you have the `pstat_getdynamic\\' function. */\n@%:@undef HAVE_PSTAT_GETDYNAMIC])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PSTAT_GETDYNAMIC])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_PSTAT_GETDYNAMIC$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_LIBKSTAT], [/* Define to 1 if you have the `kstat\\' library (-lkstat). */\n@%:@undef HAVE_LIBKSTAT])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBKSTAT])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_LIBKSTAT$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_GETLOADAVG], [/* Define to 1 if you have the `getloadavg\\' function. */\n@%:@undef HAVE_GETLOADAVG])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETLOADAVG])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_GETLOADAVG$])\nm4trace:configure.in:168: -1- AC_LIBSOURCE([getloadavg.c])\nm4trace:configure.in:168: -1- AC_SUBST([LIB@&t@OBJS], [\"$LIB@&t@OBJS getloadavg.$ac_objext\"])\nm4trace:configure.in:168: -1- AC_SUBST_TRACE([LIB@&t@OBJS])\nm4trace:configure.in:168: -1- m4_pattern_allow([^LIB@&t@OBJS$])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([C_GETLOADAVG])\nm4trace:configure.in:168: -1- m4_pattern_allow([^C_GETLOADAVG$])\nm4trace:configure.in:168: -1- AH_OUTPUT([C_GETLOADAVG], [/* Define to 1 if using `getloadavg.c\\'. */\n@%:@undef C_GETLOADAVG])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([DGUX])\nm4trace:configure.in:168: -1- m4_pattern_allow([^DGUX$])\nm4trace:configure.in:168: -1- AH_OUTPUT([DGUX], [/* Define to 1 for DGUX with <sys/dg_sys_info.h>. */\n@%:@undef DGUX])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_LIBDGC], [/* Define to 1 if you have the `dgc\\' library (-ldgc). */\n@%:@undef HAVE_LIBDGC])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDGC])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_LIBDGC$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\\' function. */\n@%:@undef HAVE_SETLOCALE])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SETLOCALE])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_SETLOCALE$])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([SVR4])\nm4trace:configure.in:168: -1- m4_pattern_allow([^SVR4$])\nm4trace:configure.in:168: -1- AH_OUTPUT([SVR4], [/* Define to 1 on System V Release 4. */\n@%:@undef SVR4])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([UMAX])\nm4trace:configure.in:168: -1- m4_pattern_allow([^UMAX$])\nm4trace:configure.in:168: -1- AH_OUTPUT([UMAX], [/* Define to 1 for Encore UMAX. */\n@%:@undef UMAX])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([UMAX4_3])\nm4trace:configure.in:168: -1- m4_pattern_allow([^UMAX4_3$])\nm4trace:configure.in:168: -1- AH_OUTPUT([UMAX4_3], [/* Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of\n   <sys/cpustats.h>. */\n@%:@undef UMAX4_3])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([UMAX])\nm4trace:configure.in:168: -1- m4_pattern_allow([^UMAX$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_MACH_MACH_H], [/* Define to 1 if you have the <mach/mach.h> header file. */\n@%:@undef HAVE_MACH_MACH_H])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MACH_MACH_H])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_MACH_MACH_H$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_NLIST_H], [/* Define to 1 if you have the <nlist.h> header file. */\n@%:@undef HAVE_NLIST_H])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NLIST_H])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_NLIST_H$])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_NLIST_N_UN_N_NAME])\nm4trace:configure.in:168: -1- m4_pattern_allow([^HAVE_STRUCT_NLIST_N_UN_N_NAME$])\nm4trace:configure.in:168: -1- AH_OUTPUT([HAVE_STRUCT_NLIST_N_UN_N_NAME], [/* Define to 1 if `n_un.n_name\\' is a member of `struct nlist\\'. */\n@%:@undef HAVE_STRUCT_NLIST_N_UN_N_NAME])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([NLIST_NAME_UNION])\nm4trace:configure.in:168: -1- m4_pattern_allow([^NLIST_NAME_UNION$])\nm4trace:configure.in:168: -1- AH_OUTPUT([NLIST_NAME_UNION], [/* Define to 1 if your `struct nlist\\' has an `n_un\\' member. Obsolete, depend\n   on `HAVE_STRUCT_NLIST_N_UN_N_NAME */\n@%:@undef NLIST_NAME_UNION])\nm4trace:configure.in:168: -1- AC_DEFINE_TRACE_LITERAL([GETLOADAVG_PRIVILEGED])\nm4trace:configure.in:168: -1- m4_pattern_allow([^GETLOADAVG_PRIVILEGED$])\nm4trace:configure.in:168: -1- AH_OUTPUT([GETLOADAVG_PRIVILEGED], [/* Define to 1 if the `getloadavg\\' function needs to be run setuid or setgid.\n   */\n@%:@undef GETLOADAVG_PRIVILEGED])\nm4trace:configure.in:168: -1- AC_SUBST([NEED_SETGID])\nm4trace:configure.in:168: -1- AC_SUBST_TRACE([NEED_SETGID])\nm4trace:configure.in:168: -1- m4_pattern_allow([^NEED_SETGID$])\nm4trace:configure.in:168: -1- AC_SUBST([KMEM_GROUP], [$ac_cv_group_kmem])\nm4trace:configure.in:168: -1- AC_SUBST_TRACE([KMEM_GROUP])\nm4trace:configure.in:168: -1- m4_pattern_allow([^KMEM_GROUP$])\nm4trace:configure.in:168: -1- AC_SUBST([GETLOADAVG_LIBS])\nm4trace:configure.in:168: -1- AC_SUBST_TRACE([GETLOADAVG_LIBS])\nm4trace:configure.in:168: -1- m4_pattern_allow([^GETLOADAVG_LIBS$])\nm4trace:configure.in:181: -1- AC_DEFINE_TRACE_LITERAL([NLIST_STRUCT])\nm4trace:configure.in:181: -1- m4_pattern_allow([^NLIST_STRUCT$])\nm4trace:configure.in:181: -1- AH_OUTPUT([NLIST_STRUCT], [/* Define if struct nlist.n_name is a pointer rather than an array. */\n@%:@undef NLIST_STRUCT])\nm4trace:configure.in:186: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SYS_SIGLIST])\nm4trace:configure.in:186: -1- m4_pattern_allow([^HAVE_DECL_SYS_SIGLIST$])\nm4trace:configure.in:186: -1- AH_OUTPUT([HAVE_DECL_SYS_SIGLIST], [/* Define to 1 if you have the declaration of `sys_siglist\\', and to 0 if you\n   don\\'t. */\n@%:@undef HAVE_DECL_SYS_SIGLIST])\nm4trace:configure.in:186: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL__SYS_SIGLIST])\nm4trace:configure.in:186: -1- m4_pattern_allow([^HAVE_DECL__SYS_SIGLIST$])\nm4trace:configure.in:186: -1- AH_OUTPUT([HAVE_DECL__SYS_SIGLIST], [/* Define to 1 if you have the declaration of `_sys_siglist\\', and to 0 if you\n   don\\'t. */\n@%:@undef HAVE_DECL__SYS_SIGLIST])\nm4trace:configure.in:186: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL___SYS_SIGLIST])\nm4trace:configure.in:186: -1- m4_pattern_allow([^HAVE_DECL___SYS_SIGLIST$])\nm4trace:configure.in:186: -1- AH_OUTPUT([HAVE_DECL___SYS_SIGLIST], [/* Define to 1 if you have the declaration of `__sys_siglist\\', and to 0 if you\n   don\\'t. */\n@%:@undef HAVE_DECL___SYS_SIGLIST])\nm4trace:configure.in:197: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have the <sys/wait.h> header file. */\n@%:@undef HAVE_SYS_WAIT_H])\nm4trace:configure.in:197: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_WAIT_H])\nm4trace:configure.in:197: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$])\nm4trace:configure.in:198: -1- AH_OUTPUT([HAVE_WAITPID], [/* Define to 1 if you have the `waitpid\\' function. */\n@%:@undef HAVE_WAITPID])\nm4trace:configure.in:198: -1- AH_OUTPUT([HAVE_WAIT3], [/* Define to 1 if you have the `wait3\\' function. */\n@%:@undef HAVE_WAIT3])\nm4trace:configure.in:222: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNION_WAIT])\nm4trace:configure.in:222: -1- m4_pattern_allow([^HAVE_UNION_WAIT$])\nm4trace:configure.in:222: -1- AH_OUTPUT([HAVE_UNION_WAIT], [/* Define this if you have the \\\\`union wait\\' type in <sys/wait.h>. */\n@%:@undef HAVE_UNION_WAIT])\nm4trace:configure.in:230: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOS_PATHS])\nm4trace:configure.in:230: -1- m4_pattern_allow([^HAVE_DOS_PATHS$])\nm4trace:configure.in:230: -1- AH_OUTPUT([HAVE_DOS_PATHS], [/* Define this if your system requires backslashes or drive specs in\n   pathnames. */\n@%:@undef HAVE_DOS_PATHS])\nm4trace:configure.in:237: -1- AC_SUBST([REMOTE])\nm4trace:configure.in:237: -1- AC_SUBST_TRACE([REMOTE])\nm4trace:configure.in:237: -1- m4_pattern_allow([^REMOTE$])\nm4trace:configure.in:240: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...\nconfigure.in:240: the top level])\nm4trace:configure.in:239: -1- AH_OUTPUT([HAVE_GETHOSTNAME], [/* Define to 1 if you have the `gethostname\\' function. */\n@%:@undef HAVE_GETHOSTNAME])\nm4trace:configure.in:239: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETHOSTNAME])\nm4trace:configure.in:239: -1- m4_pattern_allow([^HAVE_GETHOSTNAME$])\nm4trace:configure.in:239: -1- AH_OUTPUT([HAVE_SOCKET], [/* Define to 1 if you have the `socket\\' function. */\n@%:@undef HAVE_SOCKET])\nm4trace:configure.in:239: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SOCKET])\nm4trace:configure.in:239: -1- m4_pattern_allow([^HAVE_SOCKET$])\nm4trace:configure.in:239: -1- AH_OUTPUT([HAVE_GETHOSTBYNAME], [/* Define to 1 if you have the `gethostbyname\\' function. */\n@%:@undef HAVE_GETHOSTBYNAME])\nm4trace:configure.in:239: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETHOSTBYNAME])\nm4trace:configure.in:239: -1- m4_pattern_allow([^HAVE_GETHOSTBYNAME$])\nm4trace:configure.in:239: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\\' function. */\n@%:@undef HAVE_STRCASECMP])\nm4trace:configure.in:239: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCASECMP])\nm4trace:configure.in:239: -1- m4_pattern_allow([^HAVE_STRCASECMP$])\nm4trace:configure.in:239: -1- _m4_warn([obsolete], [The macro `AC_FD_MSG' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:378: AC_FD_MSG is expanded from...\nacinclude.m4:42: CF_NETLIBS is expanded from...\n../../lib/m4sugar/m4sh.m4:598: AS_IF is expanded from...\n../../lib/autoconf/general.m4:1473: AC_ARG_WITH is expanded from...\nconfigure.in:239: the top level])\nm4trace:configure.in:260: -1- AM_CONDITIONAL([USE_CUSTOMS], [test \"$use_customs\" = true])\nm4trace:configure.in:260: -1- AC_SUBST([USE_CUSTOMS_TRUE])\nm4trace:configure.in:260: -1- AC_SUBST_TRACE([USE_CUSTOMS_TRUE])\nm4trace:configure.in:260: -1- m4_pattern_allow([^USE_CUSTOMS_TRUE$])\nm4trace:configure.in:260: -1- AC_SUBST([USE_CUSTOMS_FALSE])\nm4trace:configure.in:260: -1- AC_SUBST_TRACE([USE_CUSTOMS_FALSE])\nm4trace:configure.in:260: -1- m4_pattern_allow([^USE_CUSTOMS_FALSE$])\nm4trace:configure.in:264: -1- AH_OUTPUT([HAVE_CASE_INSENSITIVE_FS], [/* Use case insensitive file names */\n@%:@undef HAVE_CASE_INSENSITIVE_FS])\nm4trace:configure.in:266: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...\nconfigure.in:266: the top level])\nm4trace:configure.in:268: -2- AC_DEFINE_TRACE_LITERAL([HAVE_CASE_INSENSITIVE_FS])\nm4trace:configure.in:268: -2- m4_pattern_allow([^HAVE_CASE_INSENSITIVE_FS$])\nm4trace:configure.in:274: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.\nYou should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...\nconfigure.in:274: the top level])\nm4trace:configure.in:291: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SA_RESTART])\nm4trace:configure.in:291: -1- m4_pattern_allow([^HAVE_SA_RESTART$])\nm4trace:configure.in:291: -1- AH_OUTPUT([HAVE_SA_RESTART], [/* Define if <signal.h> defines the SA_RESTART constant. */\n@%:@undef HAVE_SA_RESTART])\nm4trace:configure.in:303: -1- AC_DEFINE_TRACE_LITERAL([MAKE_JOBSERVER])\nm4trace:configure.in:303: -1- m4_pattern_allow([^MAKE_JOBSERVER$])\nm4trace:configure.in:303: -1- AH_OUTPUT([MAKE_JOBSERVER], [/* Define this to enable job server support in GNU make. */\n@%:@undef MAKE_JOBSERVER])\nm4trace:configure.in:311: -1- AC_DEFINE_TRACE_LITERAL([MAKE_SYMLINKS])\nm4trace:configure.in:311: -1- m4_pattern_allow([^MAKE_SYMLINKS$])\nm4trace:configure.in:311: -1- AH_OUTPUT([MAKE_SYMLINKS], [/* Define this to enable symbolic link timestamp checking. */\n@%:@undef MAKE_SYMLINKS])\nm4trace:configure.in:323: -1- AC_DEFINE_TRACE_LITERAL([SCCS_GET])\nm4trace:configure.in:323: -1- m4_pattern_allow([^SCCS_GET$])\nm4trace:configure.in:323: -1- AH_OUTPUT([SCCS_GET], [/* Define to the name of the SCCS \\'get\\' command. */\n@%:@undef SCCS_GET])\nm4trace:configure.in:338: -1- AC_DEFINE_TRACE_LITERAL([SCCS_GET_MINUS_G])\nm4trace:configure.in:338: -1- m4_pattern_allow([^SCCS_GET_MINUS_G$])\nm4trace:configure.in:338: -1- AH_OUTPUT([SCCS_GET_MINUS_G], [/* Define this if the SCCS \\'get\\' command understands the \\'-G<file>\\' option. */\n@%:@undef SCCS_GET_MINUS_G])\nm4trace:configure.in:348: -1- _m4_warn([syntax], [AC_CACHE_VAL(make_cv_sys_gnu_glob, ...): suspicious presence of an AC_SUBST in the second argument, where no actions should be taken], [../../lib/autoconf/general.m4:1998: AC_CACHE_VAL is expanded from...\nconfigure.in:348: the top level])\nm4trace:configure.in:348: -1- AC_SUBST([GLOBINC])\nm4trace:configure.in:348: -1- AC_SUBST_TRACE([GLOBINC])\nm4trace:configure.in:348: -1- m4_pattern_allow([^GLOBINC$])\nm4trace:configure.in:348: -1- AC_SUBST([GLOBLIB])\nm4trace:configure.in:348: -1- AC_SUBST_TRACE([GLOBLIB])\nm4trace:configure.in:348: -1- m4_pattern_allow([^GLOBLIB$])\nm4trace:configure.in:367: -1- AM_CONDITIONAL([USE_LOCAL_GLOB], [test \"$make_cv_sys_gnu_glob\" = no])\nm4trace:configure.in:367: -1- AC_SUBST([USE_LOCAL_GLOB_TRUE])\nm4trace:configure.in:367: -1- AC_SUBST_TRACE([USE_LOCAL_GLOB_TRUE])\nm4trace:configure.in:367: -1- m4_pattern_allow([^USE_LOCAL_GLOB_TRUE$])\nm4trace:configure.in:367: -1- AC_SUBST([USE_LOCAL_GLOB_FALSE])\nm4trace:configure.in:367: -1- AC_SUBST_TRACE([USE_LOCAL_GLOB_FALSE])\nm4trace:configure.in:367: -1- m4_pattern_allow([^USE_LOCAL_GLOB_FALSE$])\nm4trace:configure.in:371: -1- AC_DEFINE_TRACE_LITERAL([MAKE_HOST])\nm4trace:configure.in:371: -1- m4_pattern_allow([^MAKE_HOST$])\nm4trace:configure.in:371: -1- AH_OUTPUT([MAKE_HOST], [/* Build host information. */\n@%:@undef MAKE_HOST])\nm4trace:configure.in:373: -1- AC_SUBST([MAKE_HOST])\nm4trace:configure.in:373: -1- AC_SUBST_TRACE([MAKE_HOST])\nm4trace:configure.in:373: -1- m4_pattern_allow([^MAKE_HOST$])\nm4trace:configure.in:376: -1- AM_CONDITIONAL([WINDOWSENV], [false])\nm4trace:configure.in:376: -1- AC_SUBST([WINDOWSENV_TRUE])\nm4trace:configure.in:376: -1- AC_SUBST_TRACE([WINDOWSENV_TRUE])\nm4trace:configure.in:376: -1- m4_pattern_allow([^WINDOWSENV_TRUE$])\nm4trace:configure.in:376: -1- AC_SUBST([WINDOWSENV_FALSE])\nm4trace:configure.in:376: -1- AC_SUBST_TRACE([WINDOWSENV_FALSE])\nm4trace:configure.in:376: -1- m4_pattern_allow([^WINDOWSENV_FALSE$])\nm4trace:configure.in:380: -1- AM_CONDITIONAL([WINDOWSENV], [true])\nm4trace:configure.in:380: -1- AC_SUBST([WINDOWSENV_TRUE])\nm4trace:configure.in:380: -1- AC_SUBST_TRACE([WINDOWSENV_TRUE])\nm4trace:configure.in:380: -1- m4_pattern_allow([^WINDOWSENV_TRUE$])\nm4trace:configure.in:380: -1- AC_SUBST([WINDOWSENV_FALSE])\nm4trace:configure.in:380: -1- AC_SUBST_TRACE([WINDOWSENV_FALSE])\nm4trace:configure.in:380: -1- m4_pattern_allow([^WINDOWSENV_FALSE$])\nm4trace:configure.in:382: -1- AC_DEFINE_TRACE_LITERAL([WINDOWS32])\nm4trace:configure.in:382: -1- m4_pattern_allow([^WINDOWS32$])\nm4trace:configure.in:382: -1- AH_OUTPUT([WINDOWS32], [/* Use platform specific coding */\n@%:@undef WINDOWS32])\nm4trace:configure.in:383: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOS_PATHS])\nm4trace:configure.in:383: -1- m4_pattern_allow([^HAVE_DOS_PATHS$])\nm4trace:configure.in:383: -1- AH_OUTPUT([HAVE_DOS_PATHS], [/* Use platform specific coding */\n@%:@undef HAVE_DOS_PATHS])\nm4trace:configure.in:393: -1- m4_pattern_allow([^MAINT_MAKEFILE$])\nm4trace:configure.in:396: -1- AC_DEFINE_TRACE_LITERAL([WITH_DMALLOC])\nm4trace:configure.in:396: -1- m4_pattern_allow([^WITH_DMALLOC$])\nm4trace:configure.in:396: -1- AH_OUTPUT([WITH_DMALLOC], [/* Define if using the dmalloc debugging malloc package */\n@%:@undef WITH_DMALLOC])\nm4trace:configure.in:445: -1- AC_CONFIG_FILES([Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile w32/Makefile])\nm4trace:configure.in:449: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([LIB@&t@OBJS])\nm4trace:configure.in:449: -1- m4_pattern_allow([^LIB@&t@OBJS$])\nm4trace:configure.in:449: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([LTLIBOBJS])\nm4trace:configure.in:449: -1- m4_pattern_allow([^LTLIBOBJS$])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([top_builddir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([top_build_prefix])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([srcdir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([abs_srcdir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([top_srcdir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([abs_top_srcdir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([builddir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([abs_builddir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([abs_top_builddir])\nm4trace:configure.in:449: -1- AC_SUBST_TRACE([INSTALL])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/build-make.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Build the host version of the make executable and place it\n# at the right location\n\nPROGDIR=$(dirname $0)\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the host GNU Make tool used by the NDK.\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Install to specific NDK directory\"\n\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nOUT=\nCUSTOM_OUT=\nregister_option \"--out=<file>\" do_out \"Specify output executable path\" \"$OUT\"\ndo_out () { CUSTOM_OUT=true; OUT=$1; }\n\nGNUMAKE=make\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program for the build\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binaries into package directory\"\n\nextract_parameters \"$@\"\n\nif [ -z \"$CUSTOM_OUT\" ]; then\n    SUBDIR=$(get_prebuilt_host_exec make)\n    OUT=$NDK_DIR/$SUBDIR\n    log \"Auto-config: --out=$OUT\"\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=ndk-make-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nGNUMAKE_VERSION=3.81\nGNUMAKE_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/make-$GNUMAKE_VERSION\nif [ ! -d \"$GNUMAKE_SRCDIR\" ]; then\n    echo \"ERROR: Can't find make-$GNUMAKE_VERSION source tree: $GNUMAKE_SRCDIR\"\n    exit 1\nfi\n\nlog \"Using sources from: $GNUMAKE_SRCDIR\"\n\nprepare_abi_configure_build\nprepare_host_build\n\nTMP_SRCDIR=$NDK_TMPDIR/src\n\n# We need to copy the sources to a temporary directory because\n# the build system will modify some documentation files in the\n# source directory. Sigh...\nlog \"Copying sources to temporary directory: $TMP_SRCDIR\"\nmkdir -p \"$TMP_SRCDIR\" && copy_directory \"$GNUMAKE_SRCDIR\" \"$TMP_SRCDIR\"\nfail_panic \"Could not copy GNU Make sources to: $TMP_SRCDIR\"\n\nBUILD_DIR=$NDK_TMPDIR/build\n\nCONFIGURE_FLAGS=\"--disable-nls --disable-rpath\"\nif [ \"$MINGW\" = \"yes\" ]; then\n    # Required for a proper mingw cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=i586-pc-mingw32\"\nfi\n\nif [ \"$DARWIN\" = \"yes\" ]; then\n    # Required for a proper darwin cross compile\n    CONFIGURE_FLAGS=$CONFIGURE_FLAGS\" --host=$ABI_CONFIGURE_HOST\"\nfi\n\nlog \"Configuring the build\"\nmkdir -p $BUILD_DIR && rm -rf $BUILD_DIR/*\nprepare_canadian_toolchain $BUILD_DIR\ncd $BUILD_DIR &&\nCFLAGS=$HOST_CFLAGS\" -O2 -s\" &&\nexport CC CFLAGS &&\nrun $TMP_SRCDIR/configure $CONFIGURE_FLAGS --build=$ABI_CONFIGURE_BUILD\nfail_panic \"Failed to configure the make-$GNUMAKE_VERSION build!\"\n\nlog \"Building make\"\nrun $GNUMAKE -j $NUM_JOBS\nfail_panic \"Failed to build the make-$GNUMAKE_VERSION executable!\"\n\nlog \"Copying executable to prebuilt location\"\nrun mkdir -p $(dirname \"$OUT\") && cp $(get_host_exec_name make) $OUT\nfail_panic \"Could not copy executable to: $OUT\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    dump \"Packaging: $ARCHIVE\"\n    mkdir -p \"$PACKAGE_DIR\" &&\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not package archive: $PACKAGE_DIR/$ARCHIVE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up\"\nrm -rf $BUILD_DIR $TMP_SRCDIR\n\nlog \"Done.\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds make for the NDK.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef main(args):\n    build_cmd = [\n        'bash', 'build-make.sh',\n    ]\n\n    if args.host in ('windows', 'windows64'):\n        build_cmd.append('--mingw')\n\n    if args.host != 'windows':\n        build_cmd.append('--try-64')\n\n    build_support.build(build_cmd, args, intermediate_package=True)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/build.sh.in",
    "content": "#!/bin/sh\n# Shell script to build GNU Make in the absence of any `make' program.\n# @configure_input@\n\n# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n# See Makefile.in for comments describing these variables.\n\nsrcdir='@srcdir@'\nCC='@CC@'\nCFLAGS='@CFLAGS@'\nCPPFLAGS='@CPPFLAGS@'\nLDFLAGS='@LDFLAGS@'\nALLOCA='@ALLOCA@'\nLOADLIBES='@LIBS@ @LIBINTL@'\neval extras=\\'@LIBOBJS@\\'\nREMOTE='@REMOTE@'\nGLOBLIB='@GLOBLIB@'\nPATH_SEPARATOR='@PATH_SEPARATOR@'\nOBJEXT='@OBJEXT@'\nEXEEXT='@EXEEXT@'\n\n# Common prefix for machine-independent installed files.\nprefix='@prefix@'\n# Common prefix for machine-dependent installed files.\nexec_prefix=`eval echo @exec_prefix@`\n# Directory to find libraries in for `-lXXX'.\nlibdir=${exec_prefix}/lib\n# Directory to search by default for included makefiles.\nincludedir=${prefix}/include\n\nlocaledir=${prefix}/share/locale\naliaspath=${localedir}${PATH_SEPARATOR}.\n\ndefines=\"-DALIASPATH=\\\"${aliaspath}\\\" -DLOCALEDIR=\\\"${localedir}\\\" -DLIBDIR=\\\"${libdir}\\\" -DINCLUDEDIR=\\\"${includedir}\\\"\"' @DEFS@'\n\n# Exit as soon as any command fails.\nset -e\n\n# These are all the objects we need to link together.\nobjs=\"ar.${OBJEXT} arscan.${OBJEXT} commands.${OBJEXT} default.${OBJEXT} dir.${OBJEXT} expand.${OBJEXT} file.${OBJEXT} function.${OBJEXT} getopt.${OBJEXT} getopt1.${OBJEXT} implicit.${OBJEXT} job.${OBJEXT} main.${OBJEXT} misc.${OBJEXT} read.${OBJEXT} remake.${OBJEXT} rule.${OBJEXT} signame.${OBJEXT} strcache.${OBJEXT} variable.${OBJEXT} version.${OBJEXT} vpath.${OBJEXT} hash.${OBJEXT} remote-${REMOTE}.${OBJEXT} ${extras} ${ALLOCA}\"\n\nif [ x\"$GLOBLIB\" != x ]; then\n  objs=\"$objs glob/fnmatch.${OBJEXT} glob/glob.${OBJEXT}\"\n  globinc=-I${srcdir}/glob\nfi\n\n# Compile the source files into those objects.\nfor file in `echo ${objs} | sed 's/\\.'${OBJEXT}'/.c/g'`; do\n  echo compiling ${file}...\n  $CC $defines $CPPFLAGS $CFLAGS \\\n      -c -I. -I${srcdir} ${globinc} ${srcdir}/$file\ndone\n\n# The object files were actually all put in the current directory.\n# Remove the source directory names from the list.\nsrcobjs=\"$objs\"\nobjs=\nfor obj in $srcobjs; do\n  objs=\"$objs `basename $obj`\"\ndone\n\n# Link all the objects together.\necho linking make...\n$CC $CFLAGS $LDFLAGS $objs $LOADLIBES -o makenew${EXEEXT}\necho done\nmv -f makenew${EXEEXT} make${EXEEXT}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/build_w32.bat",
    "content": "@echo off\r\nrem Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\nrem 2006 Free Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under the\r\nrem terms of the GNU General Public License as published by the Free Software\r\nrem Foundation; either version 2, or (at your option) any later version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nrem WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nrem A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along with\r\nrem GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n\r\nif not exist config.h copy config.h.W32 config.h\r\ncd w32\\subproc\r\necho \"Creating the subproc library\"\r\n%ComSpec% /c build.bat %1\r\ncd ..\\..\r\n\r\nif exist link.dbg del link.dbg\r\nif exist link.rel del link.rel\r\necho \"Creating GNU Make for Windows 9X/NT/2K/XP\"\r\nif \"%1\" == \"gcc\" GoTo GCCBuild\r\nset make=gnumake\r\necho on\r\nif not exist .\\WinDebug\\nul mkdir .\\WinDebug\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D TIVOLI /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c variable.c\r\necho WinDebug\\variable.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c rule.c\r\necho WinDebug\\rule.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c remote-stub.c\r\necho WinDebug\\remote-stub.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c commands.c\r\necho WinDebug\\commands.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c file.c\r\necho WinDebug\\file.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c getloadavg.c\r\necho WinDebug\\getloadavg.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c default.c\r\necho WinDebug\\default.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c signame.c\r\necho WinDebug\\signame.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c expand.c\r\necho WinDebug\\expand.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c dir.c\r\necho WinDebug\\dir.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c main.c\r\necho WinDebug\\main.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c getopt1.c\r\necho WinDebug\\getopt1.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c job.c\r\necho WinDebug\\job.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c read.c\r\necho WinDebug\\read.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c version.c\r\necho WinDebug\\version.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c getopt.c\r\necho WinDebug\\getopt.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c arscan.c\r\necho WinDebug\\arscan.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c hash.c\r\necho WinDebug\\hash.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c strcache.c\r\necho WinDebug\\strcache.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c remake.c\r\necho WinDebug\\remake.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c misc.c\r\necho WinDebug\\misc.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c ar.c\r\necho WinDebug\\ar.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c function.c\r\necho WinDebug\\function.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c vpath.c\r\necho WinDebug\\vpath.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c implicit.c\r\necho WinDebug\\implicit.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c  .\\w32\\compat\\dirent.c\r\necho WinDebug\\dirent.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c  .\\glob\\glob.c\r\necho WinDebug\\glob.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c  .\\glob\\fnmatch.c\r\necho WinDebug\\fnmatch.obj >>link.dbg\r\ncl.exe /nologo /MT /W4 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinDebug/ /Fp.\\WinDebug/%make%.pch /Fo.\\WinDebug/ /Fd.\\WinDebug/%make%.pdb /c  .\\w32\\pathstuff.c\r\necho WinDebug\\pathstuff.obj >>link.dbg\r\necho off\r\necho \"Linking WinDebug/%make%.exe\"\r\nrem link.exe kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\\subproc\\windebug\\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\\WinDebug/%make%.pdb /DEBUG /MACHINE:I386 /OUT:.\\WinDebug/%make%.exe .\\WinDebug/variable.obj  .\\WinDebug/rule.obj  .\\WinDebug/remote-stub.obj  .\\WinDebug/commands.obj  .\\WinDebug/file.obj  .\\WinDebug/getloadavg.obj  .\\WinDebug/default.obj  .\\WinDebug/signame.obj  .\\WinDebug/expand.obj  .\\WinDebug/dir.obj  .\\WinDebug/main.obj  .\\WinDebug/getopt1.obj  .\\WinDebug/job.obj  .\\WinDebug/read.obj  .\\WinDebug/version.obj  .\\WinDebug/getopt.obj  .\\WinDebug/arscan.obj  .\\WinDebug/remake.obj  .\\WinDebug/hash.obj  .\\WinDebug/strcache.obj  .\\WinDebug/misc.obj  .\\WinDebug/ar.obj  .\\WinDebug/function.obj  .\\WinDebug/vpath.obj  .\\WinDebug/implicit.obj  .\\WinDebug/dirent.obj  .\\WinDebug/glob.obj  .\\WinDebug/fnmatch.obj  .\\WinDebug/pathstuff.obj\r\necho kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\\subproc\\windebug\\subproc.lib >>link.dbg\r\nlink.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\\WinDebug/%make%.pdb /DEBUG /MACHINE:I386 /OUT:.\\WinDebug/%make%.exe @link.dbg\r\nif not exist .\\WinDebug/%make%.exe echo \"WinDebug build failed\"\r\nif exist .\\WinDebug/%make%.exe echo \"WinDebug build succeeded!\"\r\nif not exist .\\WinRel\\nul mkdir .\\WinRel\r\necho on\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /D TIVOLI /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c variable.c\r\necho WinRel\\variable.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c rule.c\r\necho WinRel\\rule.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c remote-stub.c\r\necho WinRel\\remote-stub.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c commands.c\r\necho WinRel\\commands.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c file.c\r\necho WinRel\\file.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c getloadavg.c\r\necho WinRel\\getloadavg.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c default.c\r\necho WinRel\\default.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c signame.c\r\necho WinRel\\signame.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c expand.c\r\necho WinRel\\expand.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c dir.c\r\necho WinRel\\dir.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c main.c\r\necho WinRel\\main.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c getopt1.c\r\necho WinRel\\getopt1.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c job.c\r\necho WinRel\\job.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c read.c\r\necho WinRel\\read.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c version.c\r\necho WinRel\\version.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c getopt.c\r\necho WinRel\\getopt.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c arscan.c\r\necho WinRel\\arscan.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c remake.c\r\necho WinRel\\remake.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c hash.c\r\necho WinRel\\hash.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c strcache.c\r\necho WinRel\\strcache.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c misc.c\r\necho WinRel\\misc.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c ar.c\r\necho WinRel\\ar.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c function.c\r\necho WinRel\\function.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c vpath.c\r\necho WinRel\\vpath.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c implicit.c\r\necho WinRel\\implicit.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c  .\\w32\\compat\\dirent.c\r\necho WinRel\\dirent.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c  .\\glob\\glob.c\r\necho WinRel\\glob.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c  .\\glob\\fnmatch.c\r\necho WinRel\\fnmatch.obj >>link.rel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\\WinRel/ /Fp.\\WinRel/%make%.pch /Fo.\\WinRel/ /c  .\\w32\\pathstuff.c\r\necho WinRel\\pathstuff.obj >>link.rel\r\necho off\r\necho \"Linking WinRel/%make%.exe\"\r\nrem link.exe kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\\subproc\\winrel\\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\\WinRel/%make%.pdb /MACHINE:I386 /OUT:.\\WinRel/%make%.exe .\\WinRel/variable.obj  .\\WinRel/rule.obj  .\\WinRel/remote-stub.obj  .\\WinRel/commands.obj  .\\WinRel/file.obj  .\\WinRel/getloadavg.obj  .\\WinRel/default.obj  .\\WinRel/signame.obj  .\\WinRel/expand.obj  .\\WinRel/dir.obj  .\\WinRel/main.obj  .\\WinRel/getopt1.obj  .\\WinRel/job.obj  .\\WinRel/read.obj  .\\WinRel/version.obj  .\\WinRel/getopt.obj  .\\WinRel/arscan.obj  .\\WinRel/remake.obj  .\\WinRel/misc.obj  .\\WinRel/hash.obj  .\\WinRel/strcache.obj  .\\WinRel/ar.obj  .\\WinRel/function.obj  .\\WinRel/vpath.obj  .\\WinRel/implicit.obj  .\\WinRel/dirent.obj  .\\WinRel/glob.obj  .\\WinRel/fnmatch.obj  .\\WinRel/pathstuff.obj\r\necho kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\\subproc\\winrel\\subproc.lib >>link.rel\r\nlink.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\\WinRel/%make%.pdb /MACHINE:I386 /OUT:.\\WinRel/%make%.exe @link.rel\r\nif not exist .\\WinRel/%make%.exe echo \"WinRel build failed\"\r\nif exist .\\WinRel/%make%.exe echo \"WinRel build succeeded!\"\r\nset make=\r\nGoTo BuildEnd\r\n:GCCBuild\r\necho on\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c variable.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c rule.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remote-stub.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c commands.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c file.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getloadavg.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c default.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c signame.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c expand.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c dir.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c main.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt1.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c job.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c read.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c version.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c getopt.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c arscan.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c remake.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c hash.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c strcache.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c misc.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ar.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c function.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c vpath.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c implicit.c\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/glob.c -o glob.o\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./glob/fnmatch.c -o fnmatch.o\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I. -I./glob -I./w32/include -DWINDOWS32 -DHAVE_CONFIG_H -c ./w32/pathstuff.c -o pathstuff.o\r\ngcc -mthreads -gstabs+ -ggdb3 -o gnumake.exe variable.o rule.o remote-stub.o commands.o file.o getloadavg.o default.o signame.o expand.o dir.o main.o getopt1.o job.o read.o version.o getopt.o arscan.o remake.o misc.o hash.o strcache.o ar.o function.o vpath.o implicit.o glob.o fnmatch.o pathstuff.o w32_misc.o sub_proc.o w32err.o -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32\r\n:BuildEnd\r\necho on\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/commands.c",
    "content": "/* Command processing for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"variable.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#ifdef WINDOWS32\n#include <windows.h>\n#include \"w32err.h\"\n#endif\n\n#if VMS\n# define FILE_LIST_SEPARATOR ','\n#else\n# define FILE_LIST_SEPARATOR ' '\n#endif\n\nextern int remote_kill PARAMS ((int id, int sig));\n\n#ifndef\tHAVE_UNISTD_H\nextern int getpid ();\n#endif\n\f\n/* Set FILE's automatic variables up.  */\n\nvoid\nset_file_variables (struct file *file)\n{\n  struct dep *d;\n  char *at, *percent, *star, *less;\n\n#ifndef\tNO_ARCHIVES\n  /* If the target is an archive member `lib(member)',\n     then $@ is `lib' and $% is `member'.  */\n\n  if (ar_name (file->name))\n    {\n      unsigned int len;\n      char *p;\n\n      p = strchr (file->name, '(');\n      at = (char *) alloca (p - file->name + 1);\n      bcopy (file->name, at, p - file->name);\n      at[p - file->name] = '\\0';\n      len = strlen (p + 1);\n      percent = (char *) alloca (len);\n      bcopy (p + 1, percent, len - 1);\n      percent[len - 1] = '\\0';\n    }\n  else\n#endif\t/* NO_ARCHIVES.  */\n    {\n      at = file->name;\n      percent = \"\";\n    }\n\n  /* $* is the stem from an implicit or static pattern rule.  */\n  if (file->stem == 0)\n    {\n      /* In Unix make, $* is set to the target name with\n\t any suffix in the .SUFFIXES list stripped off for\n\t explicit rules.  We store this in the `stem' member.  */\n      register struct dep *d;\n      char *name;\n      unsigned int len;\n\n#ifndef\tNO_ARCHIVES\n      if (ar_name (file->name))\n\t{\n\t  name = strchr (file->name, '(') + 1;\n\t  len = strlen (name) - 1;\n\t}\n      else\n#endif\n\t{\n\t  name = file->name;\n\t  len = strlen (name);\n\t}\n\n      for (d = enter_file (\".SUFFIXES\")->deps; d != 0; d = d->next)\n\t{\n\t  unsigned int slen = strlen (dep_name (d));\n\t  if (len > slen && strneq (dep_name (d), name + (len - slen), slen))\n\t    {\n\t      file->stem = savestring (name, len - slen);\n\t      break;\n\t    }\n\t}\n      if (d == 0)\n\tfile->stem = \"\";\n    }\n  star = file->stem;\n\n  /* $< is the first not order-only dependency.  */\n  less = \"\";\n  for (d = file->deps; d != 0; d = d->next)\n    if (!d->ignore_mtime)\n      {\n        less = dep_name (d);\n        break;\n      }\n\n  if (file->cmds == default_file->cmds)\n    /* This file got its commands from .DEFAULT.\n       In this case $< is the same as $@.  */\n    less = at;\n\n#define\tDEFINE_VARIABLE(name, len, value) \\\n  (void) define_variable_for_file (name,len,value,o_automatic,0,file)\n\n  /* Define the variables.  */\n\n  DEFINE_VARIABLE (\"<\", 1, less);\n  DEFINE_VARIABLE (\"*\", 1, star);\n  DEFINE_VARIABLE (\"@\", 1, at);\n  DEFINE_VARIABLE (\"%\", 1, percent);\n\n  /* Compute the values for $^, $+, $?, and $|.  */\n\n  {\n    static char *plus_value=0, *bar_value=0, *qmark_value=0;\n    static unsigned int qmark_max=0, plus_max=0, bar_max=0;\n\n    unsigned int qmark_len, plus_len, bar_len;\n    char *cp;\n    char *caret_value;\n    char *qp;\n    char *bp;\n    unsigned int len;\n\n    /* Compute first the value for $+, which is supposed to contain\n       duplicate dependencies as they were listed in the makefile.  */\n\n    plus_len = 0;\n    for (d = file->deps; d != 0; d = d->next)\n      if (! d->ignore_mtime)\n\tplus_len += strlen (dep_name (d)) + 1;\n    if (plus_len == 0)\n      plus_len++;\n\n    if (plus_len > plus_max)\n      plus_value = xrealloc (plus_value, plus_max = plus_len);\n    cp = plus_value;\n\n    qmark_len = plus_len + 1;\t/* Will be this or less.  */\n    for (d = file->deps; d != 0; d = d->next)\n      if (! d->ignore_mtime)\n        {\n          char *c = dep_name (d);\n\n#ifndef\tNO_ARCHIVES\n          if (ar_name (c))\n            {\n              c = strchr (c, '(') + 1;\n              len = strlen (c) - 1;\n            }\n          else\n#endif\n            len = strlen (c);\n\n          bcopy (c, cp, len);\n          cp += len;\n          *cp++ = FILE_LIST_SEPARATOR;\n          if (! d->changed)\n            qmark_len -= len + 1;\t/* Don't space in $? for this one.  */\n        }\n\n    /* Kill the last space and define the variable.  */\n\n    cp[cp > plus_value ? -1 : 0] = '\\0';\n    DEFINE_VARIABLE (\"+\", 1, plus_value);\n\n    /* Make sure that no dependencies are repeated.  This does not\n       really matter for the purpose of updating targets, but it\n       might make some names be listed twice for $^ and $?.  */\n\n    uniquize_deps (file->deps);\n\n    bar_len = 0;\n    for (d = file->deps; d != 0; d = d->next)\n      if (d->ignore_mtime)\n\tbar_len += strlen (dep_name (d)) + 1;\n    if (bar_len == 0)\n      bar_len++;\n\n    /* Compute the values for $^, $?, and $|.  */\n\n    cp = caret_value = plus_value; /* Reuse the buffer; it's big enough.  */\n\n    if (qmark_len > qmark_max)\n      qmark_value = xrealloc (qmark_value, qmark_max = qmark_len);\n    qp = qmark_value;\n\n    if (bar_len > bar_max)\n      bar_value = xrealloc (bar_value, bar_max = bar_len);\n    bp = bar_value;\n\n    for (d = file->deps; d != 0; d = d->next)\n      {\n\tchar *c = dep_name (d);\n\n#ifndef\tNO_ARCHIVES\n\tif (ar_name (c))\n\t  {\n\t    c = strchr (c, '(') + 1;\n\t    len = strlen (c) - 1;\n\t  }\n\telse\n#endif\n\t  len = strlen (c);\n\n        if (d->ignore_mtime)\n          {\n\t    bcopy (c, bp, len);\n\t    bp += len;\n\t    *bp++ = FILE_LIST_SEPARATOR;\n\t  }\n\telse\n\t  {\n            bcopy (c, cp, len);\n            cp += len;\n            *cp++ = FILE_LIST_SEPARATOR;\n            if (d->changed)\n              {\n                bcopy (c, qp, len);\n                qp += len;\n                *qp++ = FILE_LIST_SEPARATOR;\n              }\n          }\n      }\n\n    /* Kill the last spaces and define the variables.  */\n\n    cp[cp > caret_value ? -1 : 0] = '\\0';\n    DEFINE_VARIABLE (\"^\", 1, caret_value);\n\n    qp[qp > qmark_value ? -1 : 0] = '\\0';\n    DEFINE_VARIABLE (\"?\", 1, qmark_value);\n\n    bp[bp > bar_value ? -1 : 0] = '\\0';\n    DEFINE_VARIABLE (\"|\", 1, bar_value);\n  }\n\n#undef\tDEFINE_VARIABLE\n}\n\f\n/* Chop CMDS up into individual command lines if necessary.\n   Also set the `lines_flags' and `any_recurse' members.  */\n\nvoid\nchop_commands (struct commands *cmds)\n{\n  register char *p;\n  unsigned int nlines, idx;\n  char **lines;\n\n  /* If we don't have any commands,\n     or we already parsed them, never mind.  */\n\n  if (!cmds || cmds->command_lines != 0)\n    return;\n\n  /* Chop CMDS->commands up into lines in CMDS->command_lines.\n\t Also set the corresponding CMDS->lines_flags elements,\n\t and the CMDS->any_recurse flag.  */\n\n  nlines = 5;\n  lines = (char **) xmalloc (5 * sizeof (char *));\n  idx = 0;\n  p = cmds->commands;\n  while (*p != '\\0')\n    {\n      char *end = p;\n    find_end:;\n      end = strchr (end, '\\n');\n      if (end == 0)\n        end = p + strlen (p);\n      else if (end > p && end[-1] == '\\\\')\n        {\n          int backslash = 1;\n          register char *b;\n          for (b = end - 2; b >= p && *b == '\\\\'; --b)\n            backslash = !backslash;\n          if (backslash)\n            {\n              ++end;\n              goto find_end;\n            }\n        }\n\n      if (idx == nlines)\n        {\n          nlines += 2;\n          lines = (char **) xrealloc ((char *) lines,\n                                      nlines * sizeof (char *));\n        }\n      lines[idx++] = savestring (p, end - p);\n      p = end;\n      if (*p != '\\0')\n        ++p;\n    }\n\n  if (idx != nlines)\n    {\n      nlines = idx;\n      lines = (char **) xrealloc ((char *) lines,\n                                  nlines * sizeof (char *));\n    }\n\n  cmds->ncommand_lines = nlines;\n  cmds->command_lines = lines;\n\n  cmds->any_recurse = 0;\n  cmds->lines_flags = (char *) xmalloc (nlines);\n  for (idx = 0; idx < nlines; ++idx)\n    {\n      int flags = 0;\n\n      for (p = lines[idx];\n           isblank ((unsigned char)*p) || *p == '-' || *p == '@' || *p == '+';\n           ++p)\n        switch (*p)\n          {\n          case '+':\n            flags |= COMMANDS_RECURSE;\n            break;\n          case '@':\n            flags |= COMMANDS_SILENT;\n            break;\n          case '-':\n            flags |= COMMANDS_NOERROR;\n            break;\n          }\n\n      /* If no explicit '+' was given, look for MAKE variable references.  */\n      if (!(flags & COMMANDS_RECURSE)\n          && (strstr (p, \"$(MAKE)\") != 0 || strstr (p, \"${MAKE}\") != 0))\n        flags |= COMMANDS_RECURSE;\n\n      cmds->lines_flags[idx] = flags;\n      cmds->any_recurse |= flags & COMMANDS_RECURSE;\n    }\n}\n\f\n/* Execute the commands to remake FILE.  If they are currently executing,\n   return or have already finished executing, just return.  Otherwise,\n   fork off a child process to run the first command line in the sequence.  */\n\nvoid\nexecute_file_commands (struct file *file)\n{\n  register char *p;\n\n  /* Don't go through all the preparations if\n     the commands are nothing but whitespace.  */\n\n  for (p = file->cmds->commands; *p != '\\0'; ++p)\n    if (!isspace ((unsigned char)*p) && *p != '-' && *p != '@')\n      break;\n  if (*p == '\\0')\n    {\n      /* If there are no commands, assume everything worked.  */\n      set_command_state (file, cs_running);\n      file->update_status = 0;\n      notice_finished_file (file);\n      return;\n    }\n\n  /* First set the automatic variables according to this file.  */\n\n  initialize_file_variables (file, 0);\n\n  set_file_variables (file);\n\n  /* Start the commands running.  */\n  new_job (file);\n}\n\f\n/* This is set while we are inside fatal_error_signal,\n   so things can avoid nonreentrant operations.  */\n\nint handling_fatal_signal = 0;\n\n/* Handle fatal signals.  */\n\nRETSIGTYPE\nfatal_error_signal (int sig)\n{\n#ifdef __MSDOS__\n  extern int dos_status, dos_command_running;\n\n  if (dos_command_running)\n    {\n      /* That was the child who got the signal, not us.  */\n      dos_status |= (sig << 8);\n      return;\n    }\n  remove_intermediates (1);\n  exit (EXIT_FAILURE);\n#else /* not __MSDOS__ */\n#ifdef _AMIGA\n  remove_intermediates (1);\n  if (sig == SIGINT)\n     fputs (_(\"*** Break.\\n\"), stderr);\n\n  exit (10);\n#else /* not Amiga */\n#ifdef WINDOWS32\n  extern HANDLE main_thread;\n\n  /* Windows creates a sperate thread for handling Ctrl+C, so we need\n     to suspend the main thread, or else we will have race conditions\n     when both threads call reap_children.  */\n  if (main_thread)\n    {\n      DWORD susp_count = SuspendThread (main_thread);\n\n      if (susp_count != 0)\n\tfprintf (stderr, \"SuspendThread: suspend count = %ld\\n\", susp_count);\n      else if (susp_count == (DWORD)-1)\n\t{\n\t  DWORD ierr = GetLastError ();\n\n\t  fprintf (stderr, \"SuspendThread: error %ld: %s\\n\",\n\t\t   ierr, map_windows32_error_to_string (ierr));\n\t}\n    }\n#endif\n  handling_fatal_signal = 1;\n\n  /* Set the handling for this signal to the default.\n     It is blocked now while we run this handler.  */\n  signal (sig, SIG_DFL);\n\n  /* A termination signal won't be sent to the entire\n     process group, but it means we want to kill the children.  */\n\n  if (sig == SIGTERM)\n    {\n      register struct child *c;\n      for (c = children; c != 0; c = c->next)\n\tif (!c->remote)\n\t  (void) kill (c->pid, SIGTERM);\n    }\n\n  /* If we got a signal that means the user\n     wanted to kill make, remove pending targets.  */\n\n  if (sig == SIGTERM || sig == SIGINT\n#ifdef SIGHUP\n    || sig == SIGHUP\n#endif\n#ifdef SIGQUIT\n    || sig == SIGQUIT\n#endif\n    )\n    {\n      register struct child *c;\n\n      /* Remote children won't automatically get signals sent\n\t to the process group, so we must send them.  */\n      for (c = children; c != 0; c = c->next)\n\tif (c->remote)\n\t  (void) remote_kill (c->pid, sig);\n\n      for (c = children; c != 0; c = c->next)\n\tdelete_child_targets (c);\n\n      /* Clean up the children.  We don't just use the call below because\n\t we don't want to print the \"Waiting for children\" message.  */\n      while (job_slots_used > 0)\n\treap_children (1, 0);\n    }\n  else\n    /* Wait for our children to die.  */\n    while (job_slots_used > 0)\n      reap_children (1, 1);\n\n  /* Delete any non-precious intermediate files that were made.  */\n\n  remove_intermediates (1);\n\n#ifdef SIGQUIT\n  if (sig == SIGQUIT)\n    /* We don't want to send ourselves SIGQUIT, because it will\n       cause a core dump.  Just exit instead.  */\n    exit (EXIT_FAILURE);\n#endif\n\n#ifdef WINDOWS32\n  if (main_thread)\n    CloseHandle (main_thread);\n  /* Cannot call W32_kill with a pid (it needs a handle).  The exit\n     status of 130 emulates what happens in Bash.  */\n  exit (130);\n#else\n  /* Signal the same code; this time it will really be fatal.  The signal\n     will be unblocked when we return and arrive then to kill us.  */\n  if (kill (getpid (), sig) < 0)\n    pfatal_with_name (\"kill\");\n#endif /* not WINDOWS32 */\n#endif /* not Amiga */\n#endif /* not __MSDOS__  */\n}\n\f\n/* Delete FILE unless it's precious or not actually a file (phony),\n   and it has changed on disk since we last stat'd it.  */\n\nstatic void\ndelete_target (struct file *file, char *on_behalf_of)\n{\n  struct stat st;\n  int e;\n\n  if (file->precious || file->phony)\n    return;\n\n#ifndef NO_ARCHIVES\n  if (ar_name (file->name))\n    {\n      time_t file_date = (file->last_mtime == NONEXISTENT_MTIME\n\t\t\t  ? (time_t) -1\n\t\t\t  : (time_t) FILE_TIMESTAMP_S (file->last_mtime));\n      if (ar_member_date (file->name) != file_date)\n\t{\n\t  if (on_behalf_of)\n\t    error (NILF, _(\"*** [%s] Archive member `%s' may be bogus; not deleted\"),\n\t\t   on_behalf_of, file->name);\n\t  else\n\t    error (NILF, _(\"*** Archive member `%s' may be bogus; not deleted\"),\n\t\t   file->name);\n\t}\n      return;\n    }\n#endif\n\n  EINTRLOOP (e, stat (file->name, &st));\n  if (e == 0\n      && S_ISREG (st.st_mode)\n      && FILE_TIMESTAMP_STAT_MODTIME (file->name, st) != file->last_mtime)\n    {\n      if (on_behalf_of)\n\terror (NILF, _(\"*** [%s] Deleting file `%s'\"), on_behalf_of, file->name);\n      else\n\terror (NILF, _(\"*** Deleting file `%s'\"), file->name);\n      if (unlink (file->name) < 0\n\t  && errno != ENOENT)\t/* It disappeared; so what.  */\n\tperror_with_name (\"unlink: \", file->name);\n    }\n}\n\n\n/* Delete all non-precious targets of CHILD unless they were already deleted.\n   Set the flag in CHILD to say they've been deleted.  */\n\nvoid\ndelete_child_targets (struct child *child)\n{\n  struct dep *d;\n\n  if (child->deleted)\n    return;\n\n  /* Delete the target file if it changed.  */\n  delete_target (child->file, (char *) 0);\n\n  /* Also remove any non-precious targets listed in the `also_make' member.  */\n  for (d = child->file->also_make; d != 0; d = d->next)\n    delete_target (d->file, child->file->name);\n\n  child->deleted = 1;\n}\n\f\n/* Print out the commands in CMDS.  */\n\nvoid\nprint_commands (struct commands *cmds)\n{\n  register char *s;\n\n  fputs (_(\"#  commands to execute\"), stdout);\n\n  if (cmds->fileinfo.filenm == 0)\n    puts (_(\" (built-in):\"));\n  else\n    printf (_(\" (from `%s', line %lu):\\n\"),\n            cmds->fileinfo.filenm, cmds->fileinfo.lineno);\n\n  s = cmds->commands;\n  while (*s != '\\0')\n    {\n      char *end;\n\n      while (isspace ((unsigned char)*s))\n\t++s;\n\n      end = strchr (s, '\\n');\n      if (end == 0)\n\tend = s + strlen (s);\n\n      printf (\"\\t%.*s\\n\", (int) (end - s), s);\n\n      s = end;\n    }\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/commands.h",
    "content": "/* Definition of data structures describing shell commands for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Structure that gives the commands to make a file\n   and information about where these commands came from.  */\n\nstruct commands\n  {\n    struct floc fileinfo;\t/* Where commands were defined.  */\n    char *commands;\t\t/* Commands text.  */\n    unsigned int ncommand_lines;/* Number of command lines.  */\n    char **command_lines;\t/* Commands chopped up into lines.  */\n    char *lines_flags;\t\t/* One set of flag bits for each line.  */\n    int any_recurse;\t\t/* Nonzero if any `lines_recurse' elt has */\n\t\t\t\t/* the COMMANDS_RECURSE bit set.  */\n  };\n\n/* Bits in `lines_flags'.  */\n#define\tCOMMANDS_RECURSE\t1 /* Recurses: + or $(MAKE).  */\n#define\tCOMMANDS_SILENT\t\t2 /* Silent: @.  */\n#define\tCOMMANDS_NOERROR\t4 /* No errors: -.  */\n\nextern void execute_file_commands PARAMS ((struct file *file));\nextern void print_commands PARAMS ((struct commands *cmds));\nextern void delete_child_targets PARAMS ((struct child *child));\nextern void chop_commands PARAMS ((struct commands *cmds));\nextern void set_file_variables PARAMS ((struct file *file));\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/ChangeLog",
    "content": "2006-03-09  Paul Smith  <psmith@gnu.org>\n\n\t* dospaths.m4: Add MSYS to the list of targets allowing DOS-style\n\tpathnames.  Reported by David Ergo <david.ergo@alterface.com>.\n\n2005-07-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* Makefile.am (EXTRA_DIST): Added more M4 files to EXTRA_DIST, so\n\tusers can re-run aclocal.\n\n2003-04-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* dospaths.m4: New macro to test for DOS-style pathnames, based on\n\tcoreutils 5.0 \"dos.m4\" by Jim Meyering.\n\n2002-04-21  gettextize  <bug-gnu-gettext@gnu.org>\n\n\t* codeset.m4: New file, from gettext-0.11.1.\n\t* gettext.m4: New file, from gettext-0.11.1.\n\t* glibc21.m4: New file, from gettext-0.11.1.\n\t* iconv.m4: New file, from gettext-0.11.1.\n\t* isc-posix.m4: New file, from gettext-0.11.1.\n\t* lcmessage.m4: New file, from gettext-0.11.1.\n\t* lib-ld.m4: New file, from gettext-0.11.1.\n\t* lib-link.m4: New file, from gettext-0.11.1.\n\t* lib-prefix.m4: New file, from gettext-0.11.1.\n\t* progtest.m4: New file, from gettext-0.11.1.\n\t* Makefile.am: New file.\n\f\n\nCopyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/Makefile.am",
    "content": "# -*-Makefile-*-, or close enough\n# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nEXTRA_DIST =\tcodeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 nls.m4 \\\n\t\tintdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 \\\n\t\tisc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \\\n\t\tprogtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 longlong.m4 \\\n\t\tdospaths.m4 po.m4 signed.m4 longdouble.m4 wchar_t.m4 \\\n\t\twint_t.m4 intmax.m4 printf-posix.m4 xsize.m4 size_max.m4\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n# -*-Makefile-*-, or close enough\n# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = ..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nsubdir = config\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog \\\n\tcompile config.guess config.rpath config.sub depcomp \\\n\tinstall-sh mdate-sh missing mkinstalldirs texinfo.tex\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nSOURCES =\nDIST_SOURCES =\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nGETLOADAVG_LIBS = @GETLOADAVG_LIBS@\nGLOBINC = @GLOBINC@\nGLOBLIB = @GLOBLIB@\nGMSGFMT = @GMSGFMT@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nINTLLIBS = @INTLLIBS@\nKMEM_GROUP = @KMEM_GROUP@\nLDFLAGS = @LDFLAGS@\nLIBICONV = @LIBICONV@\nLIBINTL = @LIBINTL@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLTLIBICONV = @LTLIBICONV@\nLTLIBINTL = @LTLIBINTL@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMAKE_HOST = @MAKE_HOST@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nMSGFMT = @MSGFMT@\nMSGMERGE = @MSGMERGE@\nNEED_SETGID = @NEED_SETGID@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPOSUB = @POSUB@\nRANLIB = @RANLIB@\nREMOTE = @REMOTE@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nU = @U@\nUSE_CUSTOMS_FALSE = @USE_CUSTOMS_FALSE@\nUSE_CUSTOMS_TRUE = @USE_CUSTOMS_TRUE@\nUSE_LOCAL_GLOB_FALSE = @USE_LOCAL_GLOB_FALSE@\nUSE_LOCAL_GLOB_TRUE = @USE_LOCAL_GLOB_TRUE@\nUSE_NLS = @USE_NLS@\nVERSION = @VERSION@\nWINDOWSENV_FALSE = @WINDOWSENV_FALSE@\nWINDOWSENV_TRUE = @WINDOWSENV_TRUE@\nXGETTEXT = @XGETTEXT@\nac_ct_CC = @ac_ct_CC@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nEXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 nls.m4 \\\n\t\tintdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 \\\n\t\tisc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \\\n\t\tprogtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 longlong.m4 \\\n\t\tdospaths.m4 po.m4 signed.m4 longdouble.m4 wchar_t.m4 \\\n\t\twint_t.m4 intmax.m4 printf-posix.m4 xsize.m4 size_max.m4\n\nall: all-am\n\n.SUFFIXES:\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  config/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  config/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\nuninstall-info-am:\ntags: TAGS\nTAGS:\n\nctags: CTAGS\nCTAGS:\n\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-generic\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: all all-am check check-am clean clean-generic distclean \\\n\tdistclean-generic distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-exec \\\n\tinstall-exec-am install-info install-info-am install-man \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tmaintainer-clean maintainer-clean-generic mostlyclean \\\n\tmostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \\\n\tuninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/codeset.m4",
    "content": "# codeset.m4 serial AM1 (gettext-0.10.40)\ndnl Copyright (C) 2000-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\nAC_DEFUN([AM_LANGINFO_CODESET],\n[\n  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,\n    [AC_TRY_LINK([#include <langinfo.h>],\n      [char* cs = nl_langinfo(CODESET);],\n      am_cv_langinfo_codeset=yes,\n      am_cv_langinfo_codeset=no)\n    ])\n  if test $am_cv_langinfo_codeset = yes; then\n    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,\n      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/compile",
    "content": "#! /bin/sh\n# Wrapper for compilers which do not understand `-c -o'.\n\nscriptversion=2005-05-14.22\n\n# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.\n# Written by Tom Tromey <tromey@cygnus.com>.\n#\n# This program 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, or (at your option)\n# any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n# This file is maintained in Automake, please report\n# bugs to <bug-automake@gnu.org> or send patches to\n# <automake-patches@gnu.org>.\n\ncase $1 in\n  '')\n     echo \"$0: No command.  Try \\`$0 --help' for more information.\" 1>&2\n     exit 1;\n     ;;\n  -h | --h*)\n    cat <<\\EOF\nUsage: compile [--help] [--version] PROGRAM [ARGS]\n\nWrapper for compilers which do not understand `-c -o'.\nRemove `-o dest.o' from ARGS, run PROGRAM with the remaining\narguments, and rename the output as expected.\n\nIf you are trying to build a whole package this is not the\nright script to run: please start by reading the file `INSTALL'.\n\nReport bugs to <bug-automake@gnu.org>.\nEOF\n    exit $?\n    ;;\n  -v | --v*)\n    echo \"compile $scriptversion\"\n    exit $?\n    ;;\nesac\n\nofile=\ncfile=\neat=\n\nfor arg\ndo\n  if test -n \"$eat\"; then\n    eat=\n  else\n    case $1 in\n      -o)\n\t# configure might choose to run compile as `compile cc -o foo foo.c'.\n\t# So we strip `-o arg' only if arg is an object.\n\teat=1\n\tcase $2 in\n\t  *.o | *.obj)\n\t    ofile=$2\n\t    ;;\n\t  *)\n\t    set x \"$@\" -o \"$2\"\n\t    shift\n\t    ;;\n\tesac\n\t;;\n      *.c)\n\tcfile=$1\n\tset x \"$@\" \"$1\"\n\tshift\n\t;;\n      *)\n\tset x \"$@\" \"$1\"\n\tshift\n\t;;\n    esac\n  fi\n  shift\ndone\n\nif test -z \"$ofile\" || test -z \"$cfile\"; then\n  # If no `-o' option was seen then we might have been invoked from a\n  # pattern rule where we don't need one.  That is ok -- this is a\n  # normal compilation that the losing compiler can handle.  If no\n  # `.c' file was seen then we are probably linking.  That is also\n  # ok.\n  exec \"$@\"\nfi\n\n# Name of file we expect compiler to create.\ncofile=`echo \"$cfile\" | sed -e 's|^.*/||' -e 's/\\.c$/.o/'`\n\n# Create the lock directory.\n# Note: use `[/.-]' here to ensure that we don't use the same name\n# that we are using for the .o file.  Also, base the name on the expected\n# object file name, since that is what matters with a parallel build.\nlockdir=`echo \"$cofile\" | sed -e 's|[/.-]|_|g'`.d\nwhile true; do\n  if mkdir \"$lockdir\" >/dev/null 2>&1; then\n    break\n  fi\n  sleep 1\ndone\n# FIXME: race condition here if user kills between mkdir and trap.\ntrap \"rmdir '$lockdir'; exit 1\" 1 2 15\n\n# Run the compile.\n\"$@\"\nret=$?\n\nif test -f \"$cofile\"; then\n  mv \"$cofile\" \"$ofile\"\nelif test -f \"${cofile}bj\"; then\n  mv \"${cofile}bj\" \"$ofile\"\nfi\n\nrmdir \"$lockdir\"\nexit $ret\n\n# Local Variables:\n# mode: shell-script\n# sh-indentation: 2\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"scriptversion=\"\n# time-stamp-format: \"%:y-%02m-%02d.%02H\"\n# time-stamp-end: \"$\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/config.guess",
    "content": "#! /bin/sh\n# Attempt to guess a canonical system name.\n#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,\n#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,\n#   Inc.\n\ntimestamp='2006-03-13'\n\n# This file is free software; you can redistribute it and/or modify it\n# under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program 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 program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA\n# 02110-1301, USA.\n#\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n\n# Originally written by Per Bothner <per@bothner.com>.\n# Please send patches to <config-patches@gnu.org>.  Submit a context\n# diff and a properly formatted ChangeLog entry.\n#\n# This script attempts to guess a canonical system name similar to\n# config.sub.  If it succeeds, it prints the system name on stdout, and\n# exits with 0.  Otherwise, it exits with 1.\n#\n# The plan is that this can be called by configure scripts if you\n# don't specify an explicit build system type.\n\nme=`echo \"$0\" | sed -e 's,.*/,,'`\n\nusage=\"\\\nUsage: $0 [OPTION]\n\nOutput the configuration name of the system \\`$me' is run on.\n\nOperation modes:\n  -h, --help         print this help, then exit\n  -t, --time-stamp   print date of last modification, then exit\n  -v, --version      print version number, then exit\n\nReport bugs and patches to <config-patches@gnu.org>.\"\n\nversion=\"\\\nGNU config.guess ($timestamp)\n\nOriginally written by Per Bothner.\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005\nFree Software Foundation, Inc.\n\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\"\n\nhelp=\"\nTry \\`$me --help' for more information.\"\n\n# Parse command line\nwhile test $# -gt 0 ; do\n  case $1 in\n    --time-stamp | --time* | -t )\n       echo \"$timestamp\" ; exit ;;\n    --version | -v )\n       echo \"$version\" ; exit ;;\n    --help | --h* | -h )\n       echo \"$usage\"; exit ;;\n    -- )     # Stop option processing\n       shift; break ;;\n    - )\t# Use stdin as input.\n       break ;;\n    -* )\n       echo \"$me: invalid option $1$help\" >&2\n       exit 1 ;;\n    * )\n       break ;;\n  esac\ndone\n\nif test $# != 0; then\n  echo \"$me: too many arguments$help\" >&2\n  exit 1\nfi\n\ntrap 'exit 1' 1 2 15\n\n# CC_FOR_BUILD -- compiler used by this script. Note that the use of a\n# compiler to aid in system detection is discouraged as it requires\n# temporary files to be created and, as you can see below, it is a\n# headache to deal with in a portable fashion.\n\n# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still\n# use `HOST_CC' if defined, but it is deprecated.\n\n# Portable tmp directory creation inspired by the Autoconf team.\n\nset_cc_for_build='\ntrap \"exitcode=\\$?; (rm -f \\$tmpfiles 2>/dev/null; rmdir \\$tmp 2>/dev/null) && exit \\$exitcode\" 0 ;\ntrap \"rm -f \\$tmpfiles 2>/dev/null; rmdir \\$tmp 2>/dev/null; exit 1\" 1 2 13 15 ;\n: ${TMPDIR=/tmp} ;\n { tmp=`(umask 077 && mktemp -d \"$TMPDIR/cgXXXXXX\") 2>/dev/null` && test -n \"$tmp\" && test -d \"$tmp\" ; } ||\n { test -n \"$RANDOM\" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||\n { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo \"Warning: creating insecure temp directory\" >&2 ; } ||\n { echo \"$me: cannot create a temporary directory in $TMPDIR\" >&2 ; exit 1 ; } ;\ndummy=$tmp/dummy ;\ntmpfiles=\"$dummy.c $dummy.o $dummy.rel $dummy\" ;\ncase $CC_FOR_BUILD,$HOST_CC,$CC in\n ,,)    echo \"int x;\" > $dummy.c ;\n\tfor c in cc gcc c89 c99 ; do\n\t  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then\n\t     CC_FOR_BUILD=\"$c\"; break ;\n\t  fi ;\n\tdone ;\n\tif test x\"$CC_FOR_BUILD\" = x ; then\n\t  CC_FOR_BUILD=no_compiler_found ;\n\tfi\n\t;;\n ,,*)   CC_FOR_BUILD=$CC ;;\n ,*,*)  CC_FOR_BUILD=$HOST_CC ;;\nesac ; set_cc_for_build= ;'\n\n# This is needed to find uname on a Pyramid OSx when run in the BSD universe.\n# (ghazi@noc.rutgers.edu 1994-08-24)\nif (test -f /.attbin/uname) >/dev/null 2>&1 ; then\n\tPATH=$PATH:/.attbin ; export PATH\nfi\n\nUNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown\nUNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown\nUNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown\nUNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown\n\n# Note: order is significant - the case branches are not exclusive.\n\ncase \"${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}\" in\n    *:NetBSD:*:*)\n\t# NetBSD (nbsd) targets should (where applicable) match one or\n\t# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,\n\t# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently\n\t# switched to ELF, *-*-netbsd* would select the old\n\t# object file format.  This provides both forward\n\t# compatibility and a consistent mechanism for selecting the\n\t# object file format.\n\t#\n\t# Note: NetBSD doesn't particularly care about the vendor\n\t# portion of the name.  We always set it to \"unknown\".\n\tsysctl=\"sysctl -n hw.machine_arch\"\n\tUNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \\\n\t    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`\n\tcase \"${UNAME_MACHINE_ARCH}\" in\n\t    armeb) machine=armeb-unknown ;;\n\t    arm*) machine=arm-unknown ;;\n\t    sh3el) machine=shl-unknown ;;\n\t    sh3eb) machine=sh-unknown ;;\n\t    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;\n\tesac\n\t# The Operating System including object format, if it has switched\n\t# to ELF recently, or will in the future.\n\tcase \"${UNAME_MACHINE_ARCH}\" in\n\t    arm*|i386|m68k|ns32k|sh3*|sparc|vax)\n\t\teval $set_cc_for_build\n\t\tif echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t\t\t| grep __ELF__ >/dev/null\n\t\tthen\n\t\t    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).\n\t\t    # Return netbsd for either.  FIX?\n\t\t    os=netbsd\n\t\telse\n\t\t    os=netbsdelf\n\t\tfi\n\t\t;;\n\t    *)\n\t        os=netbsd\n\t\t;;\n\tesac\n\t# The OS release\n\t# Debian GNU/NetBSD machines have a different userland, and\n\t# thus, need a distinct triplet. However, they do not need\n\t# kernel version information, so it can be replaced with a\n\t# suitable tag, in the style of linux-gnu.\n\tcase \"${UNAME_VERSION}\" in\n\t    Debian*)\n\t\trelease='-gnu'\n\t\t;;\n\t    *)\n\t\trelease=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\\./'`\n\t\t;;\n\tesac\n\t# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:\n\t# contains redundant information, the shorter form:\n\t# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.\n\techo \"${machine}-${os}${release}\"\n\texit ;;\n    *:OpenBSD:*:*)\n\tUNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`\n\techo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}\n\texit ;;\n    *:ekkoBSD:*:*)\n\techo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}\n\texit ;;\n    *:SolidBSD:*:*)\n\techo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}\n\texit ;;\n    macppc:MirBSD:*:*)\n\techo powerppc-unknown-mirbsd${UNAME_RELEASE}\n\texit ;;\n    *:MirBSD:*:*)\n\techo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}\n\texit ;;\n    alpha:OSF1:*:*)\n\tcase $UNAME_RELEASE in\n\t*4.0)\n\t\tUNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`\n\t\t;;\n\t*5.*)\n\t        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`\n\t\t;;\n\tesac\n\t# According to Compaq, /usr/sbin/psrinfo has been available on\n\t# OSF/1 and Tru64 systems produced since 1995.  I hope that\n\t# covers most systems running today.  This code pipes the CPU\n\t# types through head -n 1, so we only detect the type of CPU 0.\n\tALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \\(.*\\) processor.*$/\\1/p' | head -n 1`\n\tcase \"$ALPHA_CPU_TYPE\" in\n\t    \"EV4 (21064)\")\n\t\tUNAME_MACHINE=\"alpha\" ;;\n\t    \"EV4.5 (21064)\")\n\t\tUNAME_MACHINE=\"alpha\" ;;\n\t    \"LCA4 (21066/21068)\")\n\t\tUNAME_MACHINE=\"alpha\" ;;\n\t    \"EV5 (21164)\")\n\t\tUNAME_MACHINE=\"alphaev5\" ;;\n\t    \"EV5.6 (21164A)\")\n\t\tUNAME_MACHINE=\"alphaev56\" ;;\n\t    \"EV5.6 (21164PC)\")\n\t\tUNAME_MACHINE=\"alphapca56\" ;;\n\t    \"EV5.7 (21164PC)\")\n\t\tUNAME_MACHINE=\"alphapca57\" ;;\n\t    \"EV6 (21264)\")\n\t\tUNAME_MACHINE=\"alphaev6\" ;;\n\t    \"EV6.7 (21264A)\")\n\t\tUNAME_MACHINE=\"alphaev67\" ;;\n\t    \"EV6.8CB (21264C)\")\n\t\tUNAME_MACHINE=\"alphaev68\" ;;\n\t    \"EV6.8AL (21264B)\")\n\t\tUNAME_MACHINE=\"alphaev68\" ;;\n\t    \"EV6.8CX (21264D)\")\n\t\tUNAME_MACHINE=\"alphaev68\" ;;\n\t    \"EV6.9A (21264/EV69A)\")\n\t\tUNAME_MACHINE=\"alphaev69\" ;;\n\t    \"EV7 (21364)\")\n\t\tUNAME_MACHINE=\"alphaev7\" ;;\n\t    \"EV7.9 (21364A)\")\n\t\tUNAME_MACHINE=\"alphaev79\" ;;\n\tesac\n\t# A Pn.n version is a patched version.\n\t# A Vn.n version is a released version.\n\t# A Tn.n version is a released field test version.\n\t# A Xn.n version is an unreleased experimental baselevel.\n\t# 1.2 uses \"1.2\" for uname -r.\n\techo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`\n\texit ;;\n    Alpha\\ *:Windows_NT*:*)\n\t# How do we know it's Interix rather than the generic POSIX subsystem?\n\t# Should we change UNAME_MACHINE based on the output of uname instead\n\t# of the specific Alpha model?\n\techo alpha-pc-interix\n\texit ;;\n    21064:Windows_NT:50:3)\n\techo alpha-dec-winnt3.5\n\texit ;;\n    Amiga*:UNIX_System_V:4.0:*)\n\techo m68k-unknown-sysv4\n\texit ;;\n    *:[Aa]miga[Oo][Ss]:*:*)\n\techo ${UNAME_MACHINE}-unknown-amigaos\n\texit ;;\n    *:[Mm]orph[Oo][Ss]:*:*)\n\techo ${UNAME_MACHINE}-unknown-morphos\n\texit ;;\n    *:OS/390:*:*)\n\techo i370-ibm-openedition\n\texit ;;\n    *:z/VM:*:*)\n\techo s390-ibm-zvmoe\n\texit ;;\n    *:OS400:*:*)\n        echo powerpc-ibm-os400\n\texit ;;\n    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)\n\techo arm-acorn-riscix${UNAME_RELEASE}\n\texit ;;\n    arm:riscos:*:*|arm:RISCOS:*:*)\n\techo arm-unknown-riscos\n\texit ;;\n    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)\n\techo hppa1.1-hitachi-hiuxmpp\n\texit ;;\n    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)\n\t# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.\n\tif test \"`(/bin/universe) 2>/dev/null`\" = att ; then\n\t\techo pyramid-pyramid-sysv3\n\telse\n\t\techo pyramid-pyramid-bsd\n\tfi\n\texit ;;\n    NILE*:*:*:dcosx)\n\techo pyramid-pyramid-svr4\n\texit ;;\n    DRS?6000:unix:4.0:6*)\n\techo sparc-icl-nx6\n\texit ;;\n    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)\n\tcase `/usr/bin/uname -p` in\n\t    sparc) echo sparc-icl-nx7; exit ;;\n\tesac ;;\n    sun4H:SunOS:5.*:*)\n\techo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\n    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)\n\techo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\n    i86pc:SunOS:5.*:*)\n\techo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\n    sun4*:SunOS:6*:*)\n\t# According to config.sub, this is the proper way to canonicalize\n\t# SunOS6.  Hard to guess exactly what SunOS6 will be like, but\n\t# it's likely to be more like Solaris than SunOS4.\n\techo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\n    sun4*:SunOS:*:*)\n\tcase \"`/usr/bin/arch -k`\" in\n\t    Series*|S4*)\n\t\tUNAME_RELEASE=`uname -v`\n\t\t;;\n\tesac\n\t# Japanese Language versions have a version number like `4.1.3-JL'.\n\techo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`\n\texit ;;\n    sun3*:SunOS:*:*)\n\techo m68k-sun-sunos${UNAME_RELEASE}\n\texit ;;\n    sun*:*:4.2BSD:*)\n\tUNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`\n\ttest \"x${UNAME_RELEASE}\" = \"x\" && UNAME_RELEASE=3\n\tcase \"`/bin/arch`\" in\n\t    sun3)\n\t\techo m68k-sun-sunos${UNAME_RELEASE}\n\t\t;;\n\t    sun4)\n\t\techo sparc-sun-sunos${UNAME_RELEASE}\n\t\t;;\n\tesac\n\texit ;;\n    aushp:SunOS:*:*)\n\techo sparc-auspex-sunos${UNAME_RELEASE}\n\texit ;;\n    # The situation for MiNT is a little confusing.  The machine name\n    # can be virtually everything (everything which is not\n    # \"atarist\" or \"atariste\" at least should have a processor\n    # > m68000).  The system name ranges from \"MiNT\" over \"FreeMiNT\"\n    # to the lowercase version \"mint\" (or \"freemint\").  Finally\n    # the system name \"TOS\" denotes a system which is actually not\n    # MiNT.  But MiNT is downward compatible to TOS, so this should\n    # be no problem.\n    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)\n        echo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)\n\techo m68k-atari-mint${UNAME_RELEASE}\n        exit ;;\n    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)\n        echo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)\n        echo m68k-milan-mint${UNAME_RELEASE}\n        exit ;;\n    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)\n        echo m68k-hades-mint${UNAME_RELEASE}\n        exit ;;\n    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)\n        echo m68k-unknown-mint${UNAME_RELEASE}\n        exit ;;\n    m68k:machten:*:*)\n\techo m68k-apple-machten${UNAME_RELEASE}\n\texit ;;\n    powerpc:machten:*:*)\n\techo powerpc-apple-machten${UNAME_RELEASE}\n\texit ;;\n    RISC*:Mach:*:*)\n\techo mips-dec-mach_bsd4.3\n\texit ;;\n    RISC*:ULTRIX:*:*)\n\techo mips-dec-ultrix${UNAME_RELEASE}\n\texit ;;\n    VAX*:ULTRIX*:*:*)\n\techo vax-dec-ultrix${UNAME_RELEASE}\n\texit ;;\n    2020:CLIX:*:* | 2430:CLIX:*:*)\n\techo clipper-intergraph-clix${UNAME_RELEASE}\n\texit ;;\n    mips:*:*:UMIPS | mips:*:*:RISCos)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n#ifdef __cplusplus\n#include <stdio.h>  /* for printf() prototype */\n\tint main (int argc, char *argv[]) {\n#else\n\tint main (argc, argv) int argc; char *argv[]; {\n#endif\n\t#if defined (host_mips) && defined (MIPSEB)\n\t#if defined (SYSTYPE_SYSV)\n\t  printf (\"mips-mips-riscos%ssysv\\n\", argv[1]); exit (0);\n\t#endif\n\t#if defined (SYSTYPE_SVR4)\n\t  printf (\"mips-mips-riscos%ssvr4\\n\", argv[1]); exit (0);\n\t#endif\n\t#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)\n\t  printf (\"mips-mips-riscos%sbsd\\n\", argv[1]); exit (0);\n\t#endif\n\t#endif\n\t  exit (-1);\n\t}\nEOF\n\t$CC_FOR_BUILD -o $dummy $dummy.c &&\n\t  dummyarg=`echo \"${UNAME_RELEASE}\" | sed -n 's/\\([0-9]*\\).*/\\1/p'` &&\n\t  SYSTEM_NAME=`$dummy $dummyarg` &&\n\t    { echo \"$SYSTEM_NAME\"; exit; }\n\techo mips-mips-riscos${UNAME_RELEASE}\n\texit ;;\n    Motorola:PowerMAX_OS:*:*)\n\techo powerpc-motorola-powermax\n\texit ;;\n    Motorola:*:4.3:PL8-*)\n\techo powerpc-harris-powermax\n\texit ;;\n    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)\n\techo powerpc-harris-powermax\n\texit ;;\n    Night_Hawk:Power_UNIX:*:*)\n\techo powerpc-harris-powerunix\n\texit ;;\n    m88k:CX/UX:7*:*)\n\techo m88k-harris-cxux7\n\texit ;;\n    m88k:*:4*:R4*)\n\techo m88k-motorola-sysv4\n\texit ;;\n    m88k:*:3*:R3*)\n\techo m88k-motorola-sysv3\n\texit ;;\n    AViiON:dgux:*:*)\n        # DG/UX returns AViiON for all architectures\n        UNAME_PROCESSOR=`/usr/bin/uname -p`\n\tif [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]\n\tthen\n\t    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \\\n\t       [ ${TARGET_BINARY_INTERFACE}x = x ]\n\t    then\n\t\techo m88k-dg-dgux${UNAME_RELEASE}\n\t    else\n\t\techo m88k-dg-dguxbcs${UNAME_RELEASE}\n\t    fi\n\telse\n\t    echo i586-dg-dgux${UNAME_RELEASE}\n\tfi\n \texit ;;\n    M88*:DolphinOS:*:*)\t# DolphinOS (SVR3)\n\techo m88k-dolphin-sysv3\n\texit ;;\n    M88*:*:R3*:*)\n\t# Delta 88k system running SVR3\n\techo m88k-motorola-sysv3\n\texit ;;\n    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)\n\techo m88k-tektronix-sysv3\n\texit ;;\n    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)\n\techo m68k-tektronix-bsd\n\texit ;;\n    *:IRIX*:*:*)\n\techo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`\n\texit ;;\n    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.\n\techo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id\n\texit ;;               # Note that: echo \"'`uname -s`'\" gives 'AIX '\n    i*86:AIX:*:*)\n\techo i386-ibm-aix\n\texit ;;\n    ia64:AIX:*:*)\n\tif [ -x /usr/bin/oslevel ] ; then\n\t\tIBM_REV=`/usr/bin/oslevel`\n\telse\n\t\tIBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}\n\tfi\n\techo ${UNAME_MACHINE}-ibm-aix${IBM_REV}\n\texit ;;\n    *:AIX:2:3)\n\tif grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then\n\t\teval $set_cc_for_build\n\t\tsed 's/^\t\t//' << EOF >$dummy.c\n\t\t#include <sys/systemcfg.h>\n\n\t\tmain()\n\t\t\t{\n\t\t\tif (!__power_pc())\n\t\t\t\texit(1);\n\t\t\tputs(\"powerpc-ibm-aix3.2.5\");\n\t\t\texit(0);\n\t\t\t}\nEOF\n\t\tif $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`\n\t\tthen\n\t\t\techo \"$SYSTEM_NAME\"\n\t\telse\n\t\t\techo rs6000-ibm-aix3.2.5\n\t\tfi\n\telif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then\n\t\techo rs6000-ibm-aix3.2.4\n\telse\n\t\techo rs6000-ibm-aix3.2\n\tfi\n\texit ;;\n    *:AIX:*:[45])\n\tIBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`\n\tif /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then\n\t\tIBM_ARCH=rs6000\n\telse\n\t\tIBM_ARCH=powerpc\n\tfi\n\tif [ -x /usr/bin/oslevel ] ; then\n\t\tIBM_REV=`/usr/bin/oslevel`\n\telse\n\t\tIBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}\n\tfi\n\techo ${IBM_ARCH}-ibm-aix${IBM_REV}\n\texit ;;\n    *:AIX:*:*)\n\techo rs6000-ibm-aix\n\texit ;;\n    ibmrt:4.4BSD:*|romp-ibm:BSD:*)\n\techo romp-ibm-bsd4.4\n\texit ;;\n    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and\n\techo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to\n\texit ;;                             # report: romp-ibm BSD 4.3\n    *:BOSX:*:*)\n\techo rs6000-bull-bosx\n\texit ;;\n    DPX/2?00:B.O.S.:*:*)\n\techo m68k-bull-sysv3\n\texit ;;\n    9000/[34]??:4.3bsd:1.*:*)\n\techo m68k-hp-bsd\n\texit ;;\n    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)\n\techo m68k-hp-bsd4.4\n\texit ;;\n    9000/[34678]??:HP-UX:*:*)\n\tHPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`\n\tcase \"${UNAME_MACHINE}\" in\n\t    9000/31? )            HP_ARCH=m68000 ;;\n\t    9000/[34]?? )         HP_ARCH=m68k ;;\n\t    9000/[678][0-9][0-9])\n\t\tif [ -x /usr/bin/getconf ]; then\n\t\t    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`\n                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`\n                    case \"${sc_cpu_version}\" in\n                      523) HP_ARCH=\"hppa1.0\" ;; # CPU_PA_RISC1_0\n                      528) HP_ARCH=\"hppa1.1\" ;; # CPU_PA_RISC1_1\n                      532)                      # CPU_PA_RISC2_0\n                        case \"${sc_kernel_bits}\" in\n                          32) HP_ARCH=\"hppa2.0n\" ;;\n                          64) HP_ARCH=\"hppa2.0w\" ;;\n\t\t\t  '') HP_ARCH=\"hppa2.0\" ;;   # HP-UX 10.20\n                        esac ;;\n                    esac\n\t\tfi\n\t\tif [ \"${HP_ARCH}\" = \"\" ]; then\n\t\t    eval $set_cc_for_build\n\t\t    sed 's/^              //' << EOF >$dummy.c\n\n              #define _HPUX_SOURCE\n              #include <stdlib.h>\n              #include <unistd.h>\n\n              int main ()\n              {\n              #if defined(_SC_KERNEL_BITS)\n                  long bits = sysconf(_SC_KERNEL_BITS);\n              #endif\n                  long cpu  = sysconf (_SC_CPU_VERSION);\n\n                  switch (cpu)\n              \t{\n              \tcase CPU_PA_RISC1_0: puts (\"hppa1.0\"); break;\n              \tcase CPU_PA_RISC1_1: puts (\"hppa1.1\"); break;\n              \tcase CPU_PA_RISC2_0:\n              #if defined(_SC_KERNEL_BITS)\n              \t    switch (bits)\n              \t\t{\n              \t\tcase 64: puts (\"hppa2.0w\"); break;\n              \t\tcase 32: puts (\"hppa2.0n\"); break;\n              \t\tdefault: puts (\"hppa2.0\"); break;\n              \t\t} break;\n              #else  /* !defined(_SC_KERNEL_BITS) */\n              \t    puts (\"hppa2.0\"); break;\n              #endif\n              \tdefault: puts (\"hppa1.0\"); break;\n              \t}\n                  exit (0);\n              }\nEOF\n\t\t    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`\n\t\t    test -z \"$HP_ARCH\" && HP_ARCH=hppa\n\t\tfi ;;\n\tesac\n\tif [ ${HP_ARCH} = \"hppa2.0w\" ]\n\tthen\n\t    eval $set_cc_for_build\n\n\t    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating\n\t    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler\n\t    # generating 64-bit code.  GNU and HP use different nomenclature:\n\t    #\n\t    # $ CC_FOR_BUILD=cc ./config.guess\n\t    # => hppa2.0w-hp-hpux11.23\n\t    # $ CC_FOR_BUILD=\"cc +DA2.0w\" ./config.guess\n\t    # => hppa64-hp-hpux11.23\n\n\t    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |\n\t\tgrep __LP64__ >/dev/null\n\t    then\n\t\tHP_ARCH=\"hppa2.0w\"\n\t    else\n\t\tHP_ARCH=\"hppa64\"\n\t    fi\n\tfi\n\techo ${HP_ARCH}-hp-hpux${HPUX_REV}\n\texit ;;\n    ia64:HP-UX:*:*)\n\tHPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`\n\techo ia64-hp-hpux${HPUX_REV}\n\texit ;;\n    3050*:HI-UX:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#include <unistd.h>\n\tint\n\tmain ()\n\t{\n\t  long cpu = sysconf (_SC_CPU_VERSION);\n\t  /* The order matters, because CPU_IS_HP_MC68K erroneously returns\n\t     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct\n\t     results, however.  */\n\t  if (CPU_IS_PA_RISC (cpu))\n\t    {\n\t      switch (cpu)\n\t\t{\n\t\t  case CPU_PA_RISC1_0: puts (\"hppa1.0-hitachi-hiuxwe2\"); break;\n\t\t  case CPU_PA_RISC1_1: puts (\"hppa1.1-hitachi-hiuxwe2\"); break;\n\t\t  case CPU_PA_RISC2_0: puts (\"hppa2.0-hitachi-hiuxwe2\"); break;\n\t\t  default: puts (\"hppa-hitachi-hiuxwe2\"); break;\n\t\t}\n\t    }\n\t  else if (CPU_IS_HP_MC68K (cpu))\n\t    puts (\"m68k-hitachi-hiuxwe2\");\n\t  else puts (\"unknown-hitachi-hiuxwe2\");\n\t  exit (0);\n\t}\nEOF\n\t$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&\n\t\t{ echo \"$SYSTEM_NAME\"; exit; }\n\techo unknown-hitachi-hiuxwe2\n\texit ;;\n    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )\n\techo hppa1.1-hp-bsd\n\texit ;;\n    9000/8??:4.3bsd:*:*)\n\techo hppa1.0-hp-bsd\n\texit ;;\n    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)\n\techo hppa1.0-hp-mpeix\n\texit ;;\n    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )\n\techo hppa1.1-hp-osf\n\texit ;;\n    hp8??:OSF1:*:*)\n\techo hppa1.0-hp-osf\n\texit ;;\n    i*86:OSF1:*:*)\n\tif [ -x /usr/sbin/sysversion ] ; then\n\t    echo ${UNAME_MACHINE}-unknown-osf1mk\n\telse\n\t    echo ${UNAME_MACHINE}-unknown-osf1\n\tfi\n\texit ;;\n    parisc*:Lites*:*:*)\n\techo hppa1.1-hp-lites\n\texit ;;\n    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)\n\techo c1-convex-bsd\n        exit ;;\n    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)\n\tif getsysinfo -f scalar_acc\n\tthen echo c32-convex-bsd\n\telse echo c2-convex-bsd\n\tfi\n        exit ;;\n    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)\n\techo c34-convex-bsd\n        exit ;;\n    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)\n\techo c38-convex-bsd\n        exit ;;\n    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)\n\techo c4-convex-bsd\n        exit ;;\n    CRAY*Y-MP:*:*:*)\n\techo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    CRAY*[A-Z]90:*:*:*)\n\techo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \\\n\t| sed -e 's/CRAY.*\\([A-Z]90\\)/\\1/' \\\n\t      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \\\n\t      -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    CRAY*TS:*:*:*)\n\techo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    CRAY*T3E:*:*:*)\n\techo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    CRAY*SV1:*:*:*)\n\techo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    *:UNICOS/mp:*:*)\n\techo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\\.[^.]*$/.X/'\n\texit ;;\n    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)\n\tFUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`\n        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`\n        echo \"${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}\"\n        exit ;;\n    5000:UNIX_System_V:4.*:*)\n        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`\n        echo \"sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}\"\n\texit ;;\n    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\\ Embedded/OS:*:*)\n\techo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}\n\texit ;;\n    sparc*:BSD/OS:*:*)\n\techo sparc-unknown-bsdi${UNAME_RELEASE}\n\texit ;;\n    *:BSD/OS:*:*)\n\techo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}\n\texit ;;\n    *:FreeBSD:*:*)\n\tcase ${UNAME_MACHINE} in\n\t    pc98)\n\t\techo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\t    *)\n\t\techo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\tesac\n\texit ;;\n    i*:CYGWIN*:*)\n\techo ${UNAME_MACHINE}-pc-cygwin\n\texit ;;\n    i*:MINGW*:*)\n\techo ${UNAME_MACHINE}-pc-mingw32\n\texit ;;\n    i*:windows32*:*)\n    \t# uname -m includes \"-pc\" on this system.\n    \techo ${UNAME_MACHINE}-mingw32\n\texit ;;\n    i*:PW*:*)\n\techo ${UNAME_MACHINE}-pc-pw32\n\texit ;;\n    x86:Interix*:[345]*)\n\techo i586-pc-interix${UNAME_RELEASE}\n\texit ;;\n    EM64T:Interix*:[345]*)\n\techo x86_64-unknown-interix${UNAME_RELEASE}\n\texit ;;\n    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)\n\techo i${UNAME_MACHINE}-pc-mks\n\texit ;;\n    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)\n\t# How do we know it's Interix rather than the generic POSIX subsystem?\n\t# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we\n\t# UNAME_MACHINE based on the output of uname instead of i386?\n\techo i586-pc-interix\n\texit ;;\n    i*:UWIN*:*)\n\techo ${UNAME_MACHINE}-pc-uwin\n\texit ;;\n    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)\n\techo x86_64-unknown-cygwin\n\texit ;;\n    p*:CYGWIN*:*)\n\techo powerpcle-unknown-cygwin\n\texit ;;\n    prep*:SunOS:5.*:*)\n\techo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\n    *:GNU:*:*)\n\t# the GNU system\n\techo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`\n\texit ;;\n    *:GNU/*:*:*)\n\t# other systems with GNU libc and userland\n\techo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu\n\texit ;;\n    i*86:Minix:*:*)\n\techo ${UNAME_MACHINE}-pc-minix\n\texit ;;\n    arm*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    cris:Linux:*:*)\n\techo cris-axis-linux-gnu\n\texit ;;\n    crisv32:Linux:*:*)\n\techo crisv32-axis-linux-gnu\n\texit ;;\n    frv:Linux:*:*)\n    \techo frv-unknown-linux-gnu\n\texit ;;\n    ia64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    m32r*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    m68*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    mips:Linux:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#undef CPU\n\t#undef mips\n\t#undef mipsel\n\t#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)\n\tCPU=mipsel\n\t#else\n\t#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)\n\tCPU=mips\n\t#else\n\tCPU=\n\t#endif\n\t#endif\nEOF\n\teval \"`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '\n\t    /^CPU/{\n\t\ts: ::g\n\t\tp\n\t    }'`\"\n\ttest x\"${CPU}\" != x && { echo \"${CPU}-unknown-linux-gnu\"; exit; }\n\t;;\n    mips64:Linux:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#undef CPU\n\t#undef mips64\n\t#undef mips64el\n\t#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)\n\tCPU=mips64el\n\t#else\n\t#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)\n\tCPU=mips64\n\t#else\n\tCPU=\n\t#endif\n\t#endif\nEOF\n\teval \"`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '\n\t    /^CPU/{\n\t\ts: ::g\n\t\tp\n\t    }'`\"\n\ttest x\"${CPU}\" != x && { echo \"${CPU}-unknown-linux-gnu\"; exit; }\n\t;;\n    or32:Linux:*:*)\n\techo or32-unknown-linux-gnu\n\texit ;;\n    ppc:Linux:*:*)\n\techo powerpc-unknown-linux-gnu\n\texit ;;\n    ppc64:Linux:*:*)\n\techo powerpc64-unknown-linux-gnu\n\texit ;;\n    alpha:Linux:*:*)\n\tcase `sed -n '/^cpu model/s/^.*: \\(.*\\)/\\1/p' < /proc/cpuinfo` in\n\t  EV5)   UNAME_MACHINE=alphaev5 ;;\n\t  EV56)  UNAME_MACHINE=alphaev56 ;;\n\t  PCA56) UNAME_MACHINE=alphapca56 ;;\n\t  PCA57) UNAME_MACHINE=alphapca56 ;;\n\t  EV6)   UNAME_MACHINE=alphaev6 ;;\n\t  EV67)  UNAME_MACHINE=alphaev67 ;;\n\t  EV68*) UNAME_MACHINE=alphaev68 ;;\n        esac\n\tobjdump --private-headers /bin/sh | grep ld.so.1 >/dev/null\n\tif test \"$?\" = 0 ; then LIBC=\"libc1\" ; else LIBC=\"\" ; fi\n\techo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}\n\texit ;;\n    parisc:Linux:*:* | hppa:Linux:*:*)\n\t# Look for CPU level\n\tcase `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in\n\t  PA7*) echo hppa1.1-unknown-linux-gnu ;;\n\t  PA8*) echo hppa2.0-unknown-linux-gnu ;;\n\t  *)    echo hppa-unknown-linux-gnu ;;\n\tesac\n\texit ;;\n    parisc64:Linux:*:* | hppa64:Linux:*:*)\n\techo hppa64-unknown-linux-gnu\n\texit ;;\n    s390:Linux:*:* | s390x:Linux:*:*)\n\techo ${UNAME_MACHINE}-ibm-linux\n\texit ;;\n    sh64*:Linux:*:*)\n    \techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    sh*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    sparc:Linux:*:* | sparc64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\n    vax:Linux:*:*)\n\techo ${UNAME_MACHINE}-dec-linux-gnu\n\texit ;;\n    x86_64:Linux:*:*)\n\techo x86_64-unknown-linux-gnu\n\texit ;;\n    i*86:Linux:*:*)\n\t# The BFD linker knows what the default object file format is, so\n\t# first see if it will tell us. cd to the root directory to prevent\n\t# problems with other programs or directories called `ld' in the path.\n\t# Set LC_ALL=C to ensure ld outputs messages in English.\n\tld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \\\n\t\t\t | sed -ne '/supported targets:/!d\n\t\t\t\t    s/[ \t][ \t]*/ /g\n\t\t\t\t    s/.*supported targets: *//\n\t\t\t\t    s/ .*//\n\t\t\t\t    p'`\n        case \"$ld_supported_targets\" in\n\t  elf32-i386)\n\t\tTENTATIVE=\"${UNAME_MACHINE}-pc-linux-gnu\"\n\t\t;;\n\t  a.out-i386-linux)\n\t\techo \"${UNAME_MACHINE}-pc-linux-gnuaout\"\n\t\texit ;;\n\t  coff-i386)\n\t\techo \"${UNAME_MACHINE}-pc-linux-gnucoff\"\n\t\texit ;;\n\t  \"\")\n\t\t# Either a pre-BFD a.out linker (linux-gnuoldld) or\n\t\t# one that does not give us useful --help.\n\t\techo \"${UNAME_MACHINE}-pc-linux-gnuoldld\"\n\t\texit ;;\n\tesac\n\t# Determine whether the default compiler is a.out or elf\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#include <features.h>\n\t#ifdef __ELF__\n\t# ifdef __GLIBC__\n\t#  if __GLIBC__ >= 2\n\tLIBC=gnu\n\t#  else\n\tLIBC=gnulibc1\n\t#  endif\n\t# else\n\tLIBC=gnulibc1\n\t# endif\n\t#else\n\t#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)\n\tLIBC=gnu\n\t#else\n\tLIBC=gnuaout\n\t#endif\n\t#endif\n\t#ifdef __dietlibc__\n\tLIBC=dietlibc\n\t#endif\nEOF\n\teval \"`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '\n\t    /^LIBC/{\n\t\ts: ::g\n\t\tp\n\t    }'`\"\n\ttest x\"${LIBC}\" != x && {\n\t\techo \"${UNAME_MACHINE}-pc-linux-${LIBC}\"\n\t\texit\n\t}\n\ttest x\"${TENTATIVE}\" != x && { echo \"${TENTATIVE}\"; exit; }\n\t;;\n    i*86:DYNIX/ptx:4*:*)\n\t# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.\n\t# earlier versions are messed up and put the nodename in both\n\t# sysname and nodename.\n\techo i386-sequent-sysv4\n\texit ;;\n    i*86:UNIX_SV:4.2MP:2.*)\n        # Unixware is an offshoot of SVR4, but it has its own version\n        # number series starting with 2...\n        # I am not positive that other SVR4 systems won't match this,\n\t# I just have to hope.  -- rms.\n        # Use sysv4.2uw... so that sysv4* matches it.\n\techo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}\n\texit ;;\n    i*86:OS/2:*:*)\n\t# If we were able to find `uname', then EMX Unix compatibility\n\t# is probably installed.\n\techo ${UNAME_MACHINE}-pc-os2-emx\n\texit ;;\n    i*86:XTS-300:*:STOP)\n\techo ${UNAME_MACHINE}-unknown-stop\n\texit ;;\n    i*86:atheos:*:*)\n\techo ${UNAME_MACHINE}-unknown-atheos\n\texit ;;\n    i*86:syllable:*:*)\n\techo ${UNAME_MACHINE}-pc-syllable\n\texit ;;\n    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)\n\techo i386-unknown-lynxos${UNAME_RELEASE}\n\texit ;;\n    i*86:*DOS:*:*)\n\techo ${UNAME_MACHINE}-pc-msdosdjgpp\n\texit ;;\n    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)\n\tUNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\\/MP$//'`\n\tif grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then\n\t\techo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}\n\telse\n\t\techo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}\n\tfi\n\texit ;;\n    i*86:*:5:[678]*)\n    \t# UnixWare 7.x, OpenUNIX and OpenServer 6.\n\tcase `/bin/uname -X | grep \"^Machine\"` in\n\t    *486*)\t     UNAME_MACHINE=i486 ;;\n\t    *Pentium)\t     UNAME_MACHINE=i586 ;;\n\t    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;\n\tesac\n\techo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}\n\texit ;;\n    i*86:*:3.2:*)\n\tif test -f /usr/options/cb.name; then\n\t\tUNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`\n\t\techo ${UNAME_MACHINE}-pc-isc$UNAME_REL\n\telif /bin/uname -X 2>/dev/null >/dev/null ; then\n\t\tUNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`\n\t\t(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486\n\t\t(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \\\n\t\t\t&& UNAME_MACHINE=i586\n\t\t(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \\\n\t\t\t&& UNAME_MACHINE=i686\n\t\t(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \\\n\t\t\t&& UNAME_MACHINE=i686\n\t\techo ${UNAME_MACHINE}-pc-sco$UNAME_REL\n\telse\n\t\techo ${UNAME_MACHINE}-pc-sysv32\n\tfi\n\texit ;;\n    pc:*:*:*)\n\t# Left here for compatibility:\n        # uname -m prints for DJGPP always 'pc', but it prints nothing about\n        # the processor, so we play safe by assuming i386.\n\techo i386-pc-msdosdjgpp\n        exit ;;\n    Intel:Mach:3*:*)\n\techo i386-pc-mach3\n\texit ;;\n    paragon:*:*:*)\n\techo i860-intel-osf1\n\texit ;;\n    i860:*:4.*:*) # i860-SVR4\n\tif grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then\n\t  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4\n\telse # Add other i860-SVR4 vendors below as they are discovered.\n\t  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4\n\tfi\n\texit ;;\n    mini*:CTIX:SYS*5:*)\n\t# \"miniframe\"\n\techo m68010-convergent-sysv\n\texit ;;\n    mc68k:UNIX:SYSTEM5:3.51m)\n\techo m68k-convergent-sysv\n\texit ;;\n    M680?0:D-NIX:5.3:*)\n\techo m68k-diab-dnix\n\texit ;;\n    M68*:*:R3V[5678]*:*)\n\ttest -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;\n    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)\n\tOS_REL=''\n\ttest -r /etc/.relid \\\n\t&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \\([0-9][0-9]\\).*/\\1/p' < /etc/.relid`\n\t/bin/uname -p 2>/dev/null | grep 86 >/dev/null \\\n\t  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }\n\t/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \\\n\t  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;\n    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)\n        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \\\n          && { echo i486-ncr-sysv4; exit; } ;;\n    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)\n\techo m68k-unknown-lynxos${UNAME_RELEASE}\n\texit ;;\n    mc68030:UNIX_System_V:4.*:*)\n\techo m68k-atari-sysv4\n\texit ;;\n    TSUNAMI:LynxOS:2.*:*)\n\techo sparc-unknown-lynxos${UNAME_RELEASE}\n\texit ;;\n    rs6000:LynxOS:2.*:*)\n\techo rs6000-unknown-lynxos${UNAME_RELEASE}\n\texit ;;\n    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)\n\techo powerpc-unknown-lynxos${UNAME_RELEASE}\n\texit ;;\n    SM[BE]S:UNIX_SV:*:*)\n\techo mips-dde-sysv${UNAME_RELEASE}\n\texit ;;\n    RM*:ReliantUNIX-*:*:*)\n\techo mips-sni-sysv4\n\texit ;;\n    RM*:SINIX-*:*:*)\n\techo mips-sni-sysv4\n\texit ;;\n    *:SINIX-*:*:*)\n\tif uname -p 2>/dev/null >/dev/null ; then\n\t\tUNAME_MACHINE=`(uname -p) 2>/dev/null`\n\t\techo ${UNAME_MACHINE}-sni-sysv4\n\telse\n\t\techo ns32k-sni-sysv\n\tfi\n\texit ;;\n    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort\n                      # says <Richard.M.Bartel@ccMail.Census.GOV>\n        echo i586-unisys-sysv4\n        exit ;;\n    *:UNIX_System_V:4*:FTX*)\n\t# From Gerald Hewes <hewes@openmarket.com>.\n\t# How about differentiating between stratus architectures? -djm\n\techo hppa1.1-stratus-sysv4\n\texit ;;\n    *:*:*:FTX*)\n\t# From seanf@swdc.stratus.com.\n\techo i860-stratus-sysv4\n\texit ;;\n    i*86:VOS:*:*)\n\t# From Paul.Green@stratus.com.\n\techo ${UNAME_MACHINE}-stratus-vos\n\texit ;;\n    *:VOS:*:*)\n\t# From Paul.Green@stratus.com.\n\techo hppa1.1-stratus-vos\n\texit ;;\n    mc68*:A/UX:*:*)\n\techo m68k-apple-aux${UNAME_RELEASE}\n\texit ;;\n    news*:NEWS-OS:6*:*)\n\techo mips-sony-newsos6\n\texit ;;\n    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)\n\tif [ -d /usr/nec ]; then\n\t        echo mips-nec-sysv${UNAME_RELEASE}\n\telse\n\t        echo mips-unknown-sysv${UNAME_RELEASE}\n\tfi\n        exit ;;\n    BeBox:BeOS:*:*)\t# BeOS running on hardware made by Be, PPC only.\n\techo powerpc-be-beos\n\texit ;;\n    BeMac:BeOS:*:*)\t# BeOS running on Mac or Mac clone, PPC only.\n\techo powerpc-apple-beos\n\texit ;;\n    BePC:BeOS:*:*)\t# BeOS running on Intel PC compatible.\n\techo i586-pc-beos\n\texit ;;\n    SX-4:SUPER-UX:*:*)\n\techo sx4-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-5:SUPER-UX:*:*)\n\techo sx5-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-6:SUPER-UX:*:*)\n\techo sx6-nec-superux${UNAME_RELEASE}\n\texit ;;\n    Power*:Rhapsody:*:*)\n\techo powerpc-apple-rhapsody${UNAME_RELEASE}\n\texit ;;\n    *:Rhapsody:*:*)\n\techo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}\n\texit ;;\n    *:Darwin:*:*)\n\tUNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown\n\tcase $UNAME_PROCESSOR in\n\t    unknown) UNAME_PROCESSOR=powerpc ;;\n\tesac\n\techo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}\n\texit ;;\n    *:procnto*:*:* | *:QNX:[0123456789]*:*)\n\tUNAME_PROCESSOR=`uname -p`\n\tif test \"$UNAME_PROCESSOR\" = \"x86\"; then\n\t\tUNAME_PROCESSOR=i386\n\t\tUNAME_MACHINE=pc\n\tfi\n\techo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}\n\texit ;;\n    *:QNX:*:4*)\n\techo i386-pc-qnx\n\texit ;;\n    NSE-?:NONSTOP_KERNEL:*:*)\n\techo nse-tandem-nsk${UNAME_RELEASE}\n\texit ;;\n    NSR-?:NONSTOP_KERNEL:*:*)\n\techo nsr-tandem-nsk${UNAME_RELEASE}\n\texit ;;\n    *:NonStop-UX:*:*)\n\techo mips-compaq-nonstopux\n\texit ;;\n    BS2000:POSIX*:*:*)\n\techo bs2000-siemens-sysv\n\texit ;;\n    DS/*:UNIX_System_V:*:*)\n\techo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}\n\texit ;;\n    *:Plan9:*:*)\n\t# \"uname -m\" is not consistent, so use $cputype instead. 386\n\t# is converted to i386 for consistency with other x86\n\t# operating systems.\n\tif test \"$cputype\" = \"386\"; then\n\t    UNAME_MACHINE=i386\n\telse\n\t    UNAME_MACHINE=\"$cputype\"\n\tfi\n\techo ${UNAME_MACHINE}-unknown-plan9\n\texit ;;\n    *:TOPS-10:*:*)\n\techo pdp10-unknown-tops10\n\texit ;;\n    *:TENEX:*:*)\n\techo pdp10-unknown-tenex\n\texit ;;\n    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)\n\techo pdp10-dec-tops20\n\texit ;;\n    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)\n\techo pdp10-xkl-tops20\n\texit ;;\n    *:TOPS-20:*:*)\n\techo pdp10-unknown-tops20\n\texit ;;\n    *:ITS:*:*)\n\techo pdp10-unknown-its\n\texit ;;\n    SEI:*:*:SEIUX)\n        echo mips-sei-seiux${UNAME_RELEASE}\n\texit ;;\n    *:DragonFly:*:*)\n\techo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`\n\texit ;;\n    *:*VMS:*:*)\n    \tUNAME_MACHINE=`(uname -p) 2>/dev/null`\n\tcase \"${UNAME_MACHINE}\" in\n\t    A*) echo alpha-dec-vms ; exit ;;\n\t    I*) echo ia64-dec-vms ; exit ;;\n\t    V*) echo vax-dec-vms ; exit ;;\n\tesac ;;\n    *:XENIX:*:SysV)\n\techo i386-pc-xenix\n\texit ;;\n    i*86:skyos:*:*)\n\techo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'\n\texit ;;\n    i*86:rdos:*:*)\n\techo ${UNAME_MACHINE}-pc-rdos\n\texit ;;\nesac\n\n#echo '(No uname command or uname output not recognized.)' 1>&2\n#echo \"${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}\" 1>&2\n\neval $set_cc_for_build\ncat >$dummy.c <<EOF\n#ifdef _SEQUENT_\n# include <sys/types.h>\n# include <sys/utsname.h>\n#endif\nmain ()\n{\n#if defined (sony)\n#if defined (MIPSEB)\n  /* BFD wants \"bsd\" instead of \"newsos\".  Perhaps BFD should be changed,\n     I don't know....  */\n  printf (\"mips-sony-bsd\\n\"); exit (0);\n#else\n#include <sys/param.h>\n  printf (\"m68k-sony-newsos%s\\n\",\n#ifdef NEWSOS4\n          \"4\"\n#else\n\t  \"\"\n#endif\n         ); exit (0);\n#endif\n#endif\n\n#if defined (__arm) && defined (__acorn) && defined (__unix)\n  printf (\"arm-acorn-riscix\\n\"); exit (0);\n#endif\n\n#if defined (hp300) && !defined (hpux)\n  printf (\"m68k-hp-bsd\\n\"); exit (0);\n#endif\n\n#if defined (NeXT)\n#if !defined (__ARCHITECTURE__)\n#define __ARCHITECTURE__ \"m68k\"\n#endif\n  int version;\n  version=`(hostinfo | sed -n 's/.*NeXT Mach \\([0-9]*\\).*/\\1/p') 2>/dev/null`;\n  if (version < 4)\n    printf (\"%s-next-nextstep%d\\n\", __ARCHITECTURE__, version);\n  else\n    printf (\"%s-next-openstep%d\\n\", __ARCHITECTURE__, version);\n  exit (0);\n#endif\n\n#if defined (MULTIMAX) || defined (n16)\n#if defined (UMAXV)\n  printf (\"ns32k-encore-sysv\\n\"); exit (0);\n#else\n#if defined (CMU)\n  printf (\"ns32k-encore-mach\\n\"); exit (0);\n#else\n  printf (\"ns32k-encore-bsd\\n\"); exit (0);\n#endif\n#endif\n#endif\n\n#if defined (__386BSD__)\n  printf (\"i386-pc-bsd\\n\"); exit (0);\n#endif\n\n#if defined (sequent)\n#if defined (i386)\n  printf (\"i386-sequent-dynix\\n\"); exit (0);\n#endif\n#if defined (ns32000)\n  printf (\"ns32k-sequent-dynix\\n\"); exit (0);\n#endif\n#endif\n\n#if defined (_SEQUENT_)\n    struct utsname un;\n\n    uname(&un);\n\n    if (strncmp(un.version, \"V2\", 2) == 0) {\n\tprintf (\"i386-sequent-ptx2\\n\"); exit (0);\n    }\n    if (strncmp(un.version, \"V1\", 2) == 0) { /* XXX is V1 correct? */\n\tprintf (\"i386-sequent-ptx1\\n\"); exit (0);\n    }\n    printf (\"i386-sequent-ptx\\n\"); exit (0);\n\n#endif\n\n#if defined (vax)\n# if !defined (ultrix)\n#  include <sys/param.h>\n#  if defined (BSD)\n#   if BSD == 43\n      printf (\"vax-dec-bsd4.3\\n\"); exit (0);\n#   else\n#    if BSD == 199006\n      printf (\"vax-dec-bsd4.3reno\\n\"); exit (0);\n#    else\n      printf (\"vax-dec-bsd\\n\"); exit (0);\n#    endif\n#   endif\n#  else\n    printf (\"vax-dec-bsd\\n\"); exit (0);\n#  endif\n# else\n    printf (\"vax-dec-ultrix\\n\"); exit (0);\n# endif\n#endif\n\n#if defined (alliant) && defined (i860)\n  printf (\"i860-alliant-bsd\\n\"); exit (0);\n#endif\n\n  exit (1);\n}\nEOF\n\n$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&\n\t{ echo \"$SYSTEM_NAME\"; exit; }\n\n# Apollos put the system type in the environment.\n\ntest -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }\n\n# Convex versions that predate uname can use getsysinfo(1)\n\nif [ -x /usr/convex/getsysinfo ]\nthen\n    case `getsysinfo -f cpu_type` in\n    c1*)\n\techo c1-convex-bsd\n\texit ;;\n    c2*)\n\tif getsysinfo -f scalar_acc\n\tthen echo c32-convex-bsd\n\telse echo c2-convex-bsd\n\tfi\n\texit ;;\n    c34*)\n\techo c34-convex-bsd\n\texit ;;\n    c38*)\n\techo c38-convex-bsd\n\texit ;;\n    c4*)\n\techo c4-convex-bsd\n\texit ;;\n    esac\nfi\n\ncat >&2 <<EOF\n$0: unable to guess system type\n\nThis script, last modified $timestamp, has failed to recognize\nthe operating system you are using. It is advised that you\ndownload the most up to date version of the config scripts from\n\n  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess\nand\n  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub\n\nIf the version you run ($0) is already up to date, please\nsend the following data and any information you think might be\npertinent to <config-patches@gnu.org> in order to provide the needed\ninformation to handle your system.\n\nconfig.guess timestamp = $timestamp\n\nuname -m = `(uname -m) 2>/dev/null || echo unknown`\nuname -r = `(uname -r) 2>/dev/null || echo unknown`\nuname -s = `(uname -s) 2>/dev/null || echo unknown`\nuname -v = `(uname -v) 2>/dev/null || echo unknown`\n\n/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`\n/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`\n\nhostinfo               = `(hostinfo) 2>/dev/null`\n/bin/universe          = `(/bin/universe) 2>/dev/null`\n/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`\n/bin/arch              = `(/bin/arch) 2>/dev/null`\n/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`\n/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`\n\nUNAME_MACHINE = ${UNAME_MACHINE}\nUNAME_RELEASE = ${UNAME_RELEASE}\nUNAME_SYSTEM  = ${UNAME_SYSTEM}\nUNAME_VERSION = ${UNAME_VERSION}\nEOF\n\nexit 1\n\n# Local variables:\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"timestamp='\"\n# time-stamp-format: \"%:y-%02m-%02d\"\n# time-stamp-end: \"'\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/config.rpath",
    "content": "#! /bin/sh\n# Output a system dependent set of variables, describing how to set the\n# run time search path of shared libraries in an executable.\n#\n#   Copyright 1996-2003 Free Software Foundation, Inc.\n#   Taken from GNU libtool, 2001\n#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n#\n#   This program 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\n#   (at your option) any later version.\n#\n#   This program 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 program; if not, write to the Free Software\n#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n#\n#   As a special exception to the GNU General Public License, if you\n#   distribute this file as part of a program that contains a\n#   configuration script generated by Autoconf, you may include it under\n#   the same distribution terms that you use for the rest of that program.\n#\n# The first argument passed to this file is the canonical host specification,\n#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM\n# or\n#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM\n# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld\n# should be set by the caller.\n#\n# The set of defined variables is at the end of this script.\n\n# Known limitations:\n# - On IRIX 6.5 with CC=\"cc\", the run time search patch must not be longer\n#   than 256 bytes, otherwise the compiler driver will dump core. The only\n#   known workaround is to choose shorter directory names for the build\n#   directory and/or the installation directory.\n\n# All known linkers require a `.a' archive for static linking (except M$VC,\n# which needs '.lib').\nlibext=a\nshrext=.so\n\nhost=\"$1\"\nhost_cpu=`echo \"$host\" | sed 's/^\\([^-]*\\)-\\([^-]*\\)-\\(.*\\)$/\\1/'`\nhost_vendor=`echo \"$host\" | sed 's/^\\([^-]*\\)-\\([^-]*\\)-\\(.*\\)$/\\2/'`\nhost_os=`echo \"$host\" | sed 's/^\\([^-]*\\)-\\([^-]*\\)-\\(.*\\)$/\\3/'`\n\n# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.\n\nwl=\nif test \"$GCC\" = yes; then\n  wl='-Wl,'\nelse\n  case \"$host_os\" in\n    aix*)\n      wl='-Wl,'\n      ;;\n    mingw* | pw32* | os2*)\n      ;;\n    hpux9* | hpux10* | hpux11*)\n      wl='-Wl,'\n      ;;\n    irix5* | irix6* | nonstopux*)\n      wl='-Wl,'\n      ;;\n    newsos6)\n      ;;\n    linux*)\n      case $CC in\n        icc|ecc)\n          wl='-Wl,'\n          ;;\n        ccc)\n          wl='-Wl,'\n          ;;\n      esac\n      ;;\n    osf3* | osf4* | osf5*)\n      wl='-Wl,'\n      ;;\n    sco3.2v5*)\n      ;;\n    solaris*)\n      wl='-Wl,'\n      ;;\n    sunos4*)\n      wl='-Qoption ld '\n      ;;\n    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n      wl='-Wl,'\n      ;;\n    sysv4*MP*)\n      ;;\n    uts4*)\n      ;;\n  esac\nfi\n\n# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.\n\nhardcode_libdir_flag_spec=\nhardcode_libdir_separator=\nhardcode_direct=no\nhardcode_minus_L=no\n\ncase \"$host_os\" in\n  cygwin* | mingw* | pw32*)\n    # FIXME: the MSVC++ port hasn't been tested in a loooong time\n    # When not using gcc, we currently assume that we are using\n    # Microsoft Visual C++.\n    if test \"$GCC\" != yes; then\n      with_gnu_ld=no\n    fi\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\nesac\n\nld_shlibs=yes\nif test \"$with_gnu_ld\" = yes; then\n  case \"$host_os\" in\n    aix3* | aix4* | aix5*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n        ld_shlibs=no\n      fi\n      ;;\n    amigaos*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports\n      # that the semantics of dynamic libraries on AmigaOS, at least up\n      # to version 4, is to share data among multiple programs linked\n      # with the same dynamic library.  Since this doesn't match the\n      # behavior of shared libraries on other platforms, we can use\n      # them.\n      ld_shlibs=no\n      ;;\n    beos*)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n        :\n      else\n        ld_shlibs=no\n      fi\n      ;;\n    cygwin* | mingw* | pw32*)\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      hardcode_libdir_flag_spec='-L$libdir'\n      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n        :\n      else\n        ld_shlibs=no\n      fi\n      ;;\n    netbsd*)\n      ;;\n    solaris* | sysv5*)\n      if $LD -v 2>&1 | grep 'BFD 2\\.8' > /dev/null; then\n        ld_shlibs=no\n      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n        :\n      else\n        ld_shlibs=no\n      fi\n      ;;\n    sunos4*)\n      hardcode_direct=yes\n      ;;\n    *)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n        :\n      else\n        ld_shlibs=no\n      fi\n      ;;\n  esac\n  if test \"$ld_shlibs\" = yes; then\n    # Unlike libtool, we use -rpath here, not --rpath, since the documented\n    # option of GNU ld is called -rpath, not --rpath.\n    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n  fi\nelse\n  case \"$host_os\" in\n    aix3*)\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      hardcode_minus_L=yes\n      if test \"$GCC\" = yes; then\n        # Neither direct hardcoding nor static linking is supported with a\n        # broken collect2.\n        hardcode_direct=unsupported\n      fi\n      ;;\n    aix4* | aix5*)\n      if test \"$host_cpu\" = ia64; then\n        # On IA64, the linker does run time linking by default, so we don't\n        # have to do anything special.\n        aix_use_runtimelinking=no\n      else\n        aix_use_runtimelinking=no\n        # Test if we are trying to use run time linking or normal\n        # AIX style linking. If -brtl is somewhere in LDFLAGS, we\n        # need to do runtime linking.\n        case $host_os in aix4.[23]|aix4.[23].*|aix5*)\n          for ld_flag in $LDFLAGS; do\n            if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n              aix_use_runtimelinking=yes\n              break\n            fi\n          done\n        esac\n      fi\n      hardcode_direct=yes\n      hardcode_libdir_separator=':'\n      if test \"$GCC\" = yes; then\n        case $host_os in aix4.[012]|aix4.[012].*)\n          collect2name=`${CC} -print-prog-name=collect2`\n          if test -f \"$collect2name\" && \\\n            strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n          then\n            # We have reworked collect2\n            hardcode_direct=yes\n          else\n            # We have old collect2\n            hardcode_direct=unsupported\n            hardcode_minus_L=yes\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_libdir_separator=\n          fi\n        esac\n      fi\n      # Begin _LT_AC_SYS_LIBPATH_AIX.\n      echo 'int main () { return 0; }' > conftest.c\n      ${CC} ${LDFLAGS} conftest.c -o conftest\n      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n      if test -z \"$aix_libpath\"; then\n        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n      fi\n      if test -z \"$aix_libpath\"; then\n        aix_libpath=\"/usr/lib:/lib\"\n      fi\n      rm -f conftest.c conftest\n      # End _LT_AC_SYS_LIBPATH_AIX.\n      if test \"$aix_use_runtimelinking\" = yes; then\n        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n      else\n        if test \"$host_cpu\" = ia64; then\n          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'\n        else\n          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        fi\n      fi\n      ;;\n    amigaos*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      # see comment about different semantics on the GNU ld section\n      ld_shlibs=no\n      ;;\n    bsdi4*)\n      ;;\n    cygwin* | mingw* | pw32*)\n      # When not using gcc, we currently assume that we are using\n      # Microsoft Visual C++.\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      hardcode_libdir_flag_spec=' '\n      libext=lib\n      ;;\n    darwin* | rhapsody*)\n      if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then\n        hardcode_direct=no\n      fi\n      ;;\n    dgux*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      ;;\n    freebsd1*)\n      ld_shlibs=no\n      ;;\n    freebsd2.2*)\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      ;;\n    freebsd2*)\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      ;;\n    freebsd*)\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      ;;\n    hpux9*)\n      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_direct=yes\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      hardcode_minus_L=yes\n      ;;\n    hpux10* | hpux11*)\n      if test \"$with_gnu_ld\" = no; then\n        case \"$host_cpu\" in\n          hppa*64*)\n            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n            hardcode_libdir_separator=:\n            hardcode_direct=no\n            ;;\n          ia64*)\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_direct=no\n            # hardcode_minus_L: Not really in the search PATH,\n            # but as the default location of the library.\n            hardcode_minus_L=yes\n            ;;\n          *)\n            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n            hardcode_libdir_separator=:\n            hardcode_direct=yes\n            # hardcode_minus_L: Not really in the search PATH,\n            # but as the default location of the library.\n            hardcode_minus_L=yes\n            ;;\n        esac\n      fi\n      ;;\n    irix5* | irix6* | nonstopux*)\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n    netbsd*)\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      ;;\n    newsos6)\n      hardcode_direct=yes\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n    openbsd*)\n      hardcode_direct=yes\n      if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n      else\n        case \"$host_os\" in\n          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n            hardcode_libdir_flag_spec='-R$libdir'\n            ;;\n          *)\n            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n            ;;\n        esac\n      fi\n      ;;\n    os2*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      ;;\n    osf3*)\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n    osf4* | osf5*)\n      if test \"$GCC\" = yes; then\n        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      else\n        # Both cc and cxx compiler support -rpath directly\n        hardcode_libdir_flag_spec='-rpath $libdir'\n      fi\n      hardcode_libdir_separator=:\n      ;;\n    sco3.2v5*)\n      ;;\n    solaris*)\n      hardcode_libdir_flag_spec='-R$libdir'\n      ;;\n    sunos4*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      ;;\n    sysv4)\n      case $host_vendor in\n        sni)\n          hardcode_direct=yes # is this really true???\n          ;;\n        siemens)\n          hardcode_direct=no\n          ;;\n        motorola)\n          hardcode_direct=no #Motorola manual says yes, but my tests say they lie\n          ;;\n      esac\n      ;;\n    sysv4.3*)\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n        ld_shlibs=yes\n      fi\n      ;;\n    sysv4.2uw2*)\n      hardcode_direct=yes\n      hardcode_minus_L=no\n      ;;\n    sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)\n      ;;\n    sysv5*)\n      hardcode_libdir_flag_spec=\n      ;;\n    uts4*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      ;;\n    *)\n      ld_shlibs=no\n      ;;\n  esac\nfi\n\n# Check dynamic linker characteristics\n# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.\nlibname_spec='lib$name'\ncase \"$host_os\" in\n  aix3*)\n    ;;\n  aix4* | aix5*)\n    ;;\n  amigaos*)\n    ;;\n  beos*)\n    ;;\n  bsdi4*)\n    ;;\n  cygwin* | mingw* | pw32*)\n    shrext=.dll\n    ;;\n  darwin* | rhapsody*)\n    shrext=.dylib\n    ;;\n  dgux*)\n    ;;\n  freebsd1*)\n    ;;\n  freebsd*)\n    ;;\n  gnu*)\n    ;;\n  hpux9* | hpux10* | hpux11*)\n    case \"$host_cpu\" in\n      ia64*)\n        shrext=.so\n        ;;\n      hppa*64*)\n        shrext=.sl\n        ;;\n      *)\n        shrext=.sl\n        ;;\n    esac\n    ;;\n  irix5* | irix6* | nonstopux*)\n    case \"$host_os\" in\n      irix5* | nonstopux*)\n        libsuff= shlibsuff=\n        ;;\n      *)\n        case $LD in\n          *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \") libsuff= shlibsuff= ;;\n          *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \") libsuff=32 shlibsuff=N32 ;;\n          *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \") libsuff=64 shlibsuff=64 ;;\n          *) libsuff= shlibsuff= ;;\n        esac\n        ;;\n    esac\n    ;;\n  linux*oldld* | linux*aout* | linux*coff*)\n    ;;\n  linux*)\n    ;;\n  netbsd*)\n    ;;\n  newsos6)\n    ;;\n  nto-qnx)\n    ;;\n  openbsd*)\n    ;;\n  os2*)\n    libname_spec='$name'\n    shrext=.dll\n    ;;\n  osf3* | osf4* | osf5*)\n    ;;\n  sco3.2v5*)\n    ;;\n  solaris*)\n    ;;\n  sunos4*)\n    ;;\n  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n    ;;\n  sysv4*MP*)\n    ;;\n  uts4*)\n    ;;\nesac\n\nsed_quote_subst='s/\\([\"`$\\\\]\\)/\\\\\\1/g'\nescaped_wl=`echo \"X$wl\" | sed -e 's/^X//' -e \"$sed_quote_subst\"`\nshlibext=`echo \"$shrext\" | sed -e 's,^\\.,,'`\nescaped_hardcode_libdir_flag_spec=`echo \"X$hardcode_libdir_flag_spec\" | sed -e 's/^X//' -e \"$sed_quote_subst\"`\n\nsed -e 's/^\\([a-zA-Z0-9_]*\\)=/acl_cv_\\1=/' <<EOF\n\n# How to pass a linker flag through the compiler.\nwl=\"$escaped_wl\"\n\n# Static library suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \"so\").\nshlibext=\"$shlibext\"\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=\"$escaped_hardcode_libdir_flag_spec\"\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=\"$hardcode_libdir_separator\"\n\n# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=\"$hardcode_direct\"\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=\"$hardcode_minus_L\"\n\nEOF\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/config.sub",
    "content": "#! /bin/sh\n# Configuration validation subroutine script.\n#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,\n#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,\n#   Inc.\n\ntimestamp='2006-03-07'\n\n# This file is (in principle) common to ALL GNU software.\n# The presence of a machine in this file suggests that SOME GNU software\n# can handle that machine.  It does not imply ALL GNU software can.\n#\n# This file 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\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA\n# 02110-1301, USA.\n#\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n\n# Please send patches to <config-patches@gnu.org>.  Submit a context\n# diff and a properly formatted ChangeLog entry.\n#\n# Configuration subroutine to validate and canonicalize a configuration type.\n# Supply the specified configuration type as an argument.\n# If it is invalid, we print an error message on stderr and exit with code 1.\n# Otherwise, we print the canonical config type on stdout and succeed.\n\n# This file is supposed to be the same for all GNU packages\n# and recognize all the CPU types, system types and aliases\n# that are meaningful with *any* GNU software.\n# Each package is responsible for reporting which valid configurations\n# it does not support.  The user should be able to distinguish\n# a failure to support a valid configuration from a meaningless\n# configuration.\n\n# The goal of this file is to map all the various variations of a given\n# machine specification into a single specification in the form:\n#\tCPU_TYPE-MANUFACTURER-OPERATING_SYSTEM\n# or in some cases, the newer four-part form:\n#\tCPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM\n# It is wrong to echo any other type of specification.\n\nme=`echo \"$0\" | sed -e 's,.*/,,'`\n\nusage=\"\\\nUsage: $0 [OPTION] CPU-MFR-OPSYS\n       $0 [OPTION] ALIAS\n\nCanonicalize a configuration name.\n\nOperation modes:\n  -h, --help         print this help, then exit\n  -t, --time-stamp   print date of last modification, then exit\n  -v, --version      print version number, then exit\n\nReport bugs and patches to <config-patches@gnu.org>.\"\n\nversion=\"\\\nGNU config.sub ($timestamp)\n\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005\nFree Software Foundation, Inc.\n\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\"\n\nhelp=\"\nTry \\`$me --help' for more information.\"\n\n# Parse command line\nwhile test $# -gt 0 ; do\n  case $1 in\n    --time-stamp | --time* | -t )\n       echo \"$timestamp\" ; exit ;;\n    --version | -v )\n       echo \"$version\" ; exit ;;\n    --help | --h* | -h )\n       echo \"$usage\"; exit ;;\n    -- )     # Stop option processing\n       shift; break ;;\n    - )\t# Use stdin as input.\n       break ;;\n    -* )\n       echo \"$me: invalid option $1$help\"\n       exit 1 ;;\n\n    *local*)\n       # First pass through any local machine types.\n       echo $1\n       exit ;;\n\n    * )\n       break ;;\n  esac\ndone\n\ncase $# in\n 0) echo \"$me: missing argument$help\" >&2\n    exit 1;;\n 1) ;;\n *) echo \"$me: too many arguments$help\" >&2\n    exit 1;;\nesac\n\n# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).\n# Here we must recognize all the valid KERNEL-OS combinations.\nmaybe_os=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\2/'`\ncase $maybe_os in\n  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \\\n  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \\\n  storm-chaos* | os2-emx* | rtmk-nova*)\n    os=-$maybe_os\n    basic_machine=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\1/'`\n    ;;\n  *)\n    basic_machine=`echo $1 | sed 's/-[^-]*$//'`\n    if [ $basic_machine != $1 ]\n    then os=`echo $1 | sed 's/.*-/-/'`\n    else os=; fi\n    ;;\nesac\n\n### Let's recognize common machines as not being operating systems so\n### that things like config.sub decstation-3100 work.  We also\n### recognize some manufacturers as not being operating systems, so we\n### can provide default operating systems below.\ncase $os in\n\t-sun*os*)\n\t\t# Prevent following clause from handling this invalid input.\n\t\t;;\n\t-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \\\n\t-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \\\n\t-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \\\n\t-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\\\n\t-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \\\n\t-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \\\n\t-apple | -axis | -knuth | -cray)\n\t\tos=\n\t\tbasic_machine=$1\n\t\t;;\n\t-sim | -cisco | -oki | -wec | -winbond)\n\t\tos=\n\t\tbasic_machine=$1\n\t\t;;\n\t-scout)\n\t\t;;\n\t-wrs)\n\t\tos=-vxworks\n\t\tbasic_machine=$1\n\t\t;;\n\t-chorusos*)\n\t\tos=-chorusos\n\t\tbasic_machine=$1\n\t\t;;\n \t-chorusrdb)\n \t\tos=-chorusrdb\n\t\tbasic_machine=$1\n \t\t;;\n\t-hiux*)\n\t\tos=-hiuxwe2\n\t\t;;\n\t-sco6)\n\t\tos=-sco5v6\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco5)\n\t\tos=-sco3.2v5\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco4)\n\t\tos=-sco3.2v4\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco3.2.[4-9]*)\n\t\tos=`echo $os | sed -e 's/sco3.2./sco3.2v/'`\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco3.2v[4-9]*)\n\t\t# Don't forget version if it is 3.2v4 or newer.\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco5v6*)\n\t\t# Don't forget version if it is 3.2v4 or newer.\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-sco*)\n\t\tos=-sco3.2v2\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-udk*)\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-isc)\n\t\tos=-isc2.2\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-clix*)\n\t\tbasic_machine=clipper-intergraph\n\t\t;;\n\t-isc*)\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`\n\t\t;;\n\t-lynx*)\n\t\tos=-lynxos\n\t\t;;\n\t-ptx*)\n\t\tbasic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`\n\t\t;;\n\t-windowsnt*)\n\t\tos=`echo $os | sed -e 's/windowsnt/winnt/'`\n\t\t;;\n\t-psos*)\n\t\tos=-psos\n\t\t;;\n\t-mint | -mint[0-9]*)\n\t\tbasic_machine=m68k-atari\n\t\tos=-mint\n\t\t;;\nesac\n\n# Decode aliases for certain CPU-COMPANY combinations.\ncase $basic_machine in\n\t# Recognize the basic CPU types without company name.\n\t# Some are omitted here because they have special meanings below.\n\t1750a | 580 \\\n\t| a29k \\\n\t| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \\\n\t| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \\\n\t| am33_2.0 \\\n\t| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \\\n\t| bfin \\\n\t| c4x | clipper \\\n\t| d10v | d30v | dlx | dsp16xx \\\n\t| fr30 | frv \\\n\t| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \\\n\t| i370 | i860 | i960 | ia64 \\\n\t| ip2k | iq2000 \\\n\t| m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \\\n\t| mips | mipsbe | mipseb | mipsel | mipsle \\\n\t| mips16 \\\n\t| mips64 | mips64el \\\n\t| mips64vr | mips64vrel \\\n\t| mips64orion | mips64orionel \\\n\t| mips64vr4100 | mips64vr4100el \\\n\t| mips64vr4300 | mips64vr4300el \\\n\t| mips64vr5000 | mips64vr5000el \\\n\t| mips64vr5900 | mips64vr5900el \\\n\t| mipsisa32 | mipsisa32el \\\n\t| mipsisa32r2 | mipsisa32r2el \\\n\t| mipsisa64 | mipsisa64el \\\n\t| mipsisa64r2 | mipsisa64r2el \\\n\t| mipsisa64sb1 | mipsisa64sb1el \\\n\t| mipsisa64sr71k | mipsisa64sr71kel \\\n\t| mipstx39 | mipstx39el \\\n\t| mn10200 | mn10300 \\\n\t| mt \\\n\t| msp430 \\\n\t| nios | nios2 \\\n\t| ns16k | ns32k \\\n\t| or32 \\\n\t| pdp10 | pdp11 | pj | pjl \\\n\t| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \\\n\t| pyramid \\\n\t| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \\\n\t| sh64 | sh64le \\\n\t| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \\\n\t| sparcv8 | sparcv9 | sparcv9b | sparcv9v \\\n\t| strongarm \\\n\t| tahoe | thumb | tic4x | tic80 | tron \\\n\t| v850 | v850e \\\n\t| we32k \\\n\t| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \\\n\t| z8k)\n\t\tbasic_machine=$basic_machine-unknown\n\t\t;;\n\tm32c)\n\t\tbasic_machine=$basic_machine-unknown\n\t\t;;\n\tm6811 | m68hc11 | m6812 | m68hc12)\n\t\t# Motorola 68HC11/12.\n\t\tbasic_machine=$basic_machine-unknown\n\t\tos=-none\n\t\t;;\n\tm88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)\n\t\t;;\n\tms1)\n\t\tbasic_machine=mt-unknown\n\t\t;;\n\n\t# We use `pc' rather than `unknown'\n\t# because (1) that's what they normally are, and\n\t# (2) the word \"unknown\" tends to confuse beginning users.\n\ti*86 | x86_64)\n\t  basic_machine=$basic_machine-pc\n\t  ;;\n\t# Object if more than one company name word.\n\t*-*-*)\n\t\techo Invalid configuration \\`$1\\': machine \\`$basic_machine\\' not recognized 1>&2\n\t\texit 1\n\t\t;;\n\t# Recognize the basic CPU types with company name.\n\t580-* \\\n\t| a29k-* \\\n\t| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \\\n\t| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \\\n\t| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \\\n\t| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \\\n\t| avr-* \\\n\t| bfin-* | bs2000-* \\\n\t| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \\\n\t| clipper-* | craynv-* | cydra-* \\\n\t| d10v-* | d30v-* | dlx-* \\\n\t| elxsi-* \\\n\t| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \\\n\t| h8300-* | h8500-* \\\n\t| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \\\n\t| i*86-* | i860-* | i960-* | ia64-* \\\n\t| ip2k-* | iq2000-* \\\n\t| m32r-* | m32rle-* \\\n\t| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \\\n\t| m88110-* | m88k-* | maxq-* | mcore-* \\\n\t| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \\\n\t| mips16-* \\\n\t| mips64-* | mips64el-* \\\n\t| mips64vr-* | mips64vrel-* \\\n\t| mips64orion-* | mips64orionel-* \\\n\t| mips64vr4100-* | mips64vr4100el-* \\\n\t| mips64vr4300-* | mips64vr4300el-* \\\n\t| mips64vr5000-* | mips64vr5000el-* \\\n\t| mips64vr5900-* | mips64vr5900el-* \\\n\t| mipsisa32-* | mipsisa32el-* \\\n\t| mipsisa32r2-* | mipsisa32r2el-* \\\n\t| mipsisa64-* | mipsisa64el-* \\\n\t| mipsisa64r2-* | mipsisa64r2el-* \\\n\t| mipsisa64sb1-* | mipsisa64sb1el-* \\\n\t| mipsisa64sr71k-* | mipsisa64sr71kel-* \\\n\t| mipstx39-* | mipstx39el-* \\\n\t| mmix-* \\\n\t| mt-* \\\n\t| msp430-* \\\n\t| nios-* | nios2-* \\\n\t| none-* | np1-* | ns16k-* | ns32k-* \\\n\t| orion-* \\\n\t| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \\\n\t| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \\\n\t| pyramid-* \\\n\t| romp-* | rs6000-* \\\n\t| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \\\n\t| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \\\n\t| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \\\n\t| sparclite-* \\\n\t| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \\\n\t| tahoe-* | thumb-* \\\n\t| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \\\n\t| tron-* \\\n\t| v850-* | v850e-* | vax-* \\\n\t| we32k-* \\\n\t| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \\\n\t| xstormy16-* | xtensa-* \\\n\t| ymp-* \\\n\t| z8k-*)\n\t\t;;\n\tm32c-*)\n\t\t;;\n\t# Recognize the various machine names and aliases which stand\n\t# for a CPU type and a company and sometimes even an OS.\n\t386bsd)\n\t\tbasic_machine=i386-unknown\n\t\tos=-bsd\n\t\t;;\n\t3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)\n\t\tbasic_machine=m68000-att\n\t\t;;\n\t3b*)\n\t\tbasic_machine=we32k-att\n\t\t;;\n\ta29khif)\n\t\tbasic_machine=a29k-amd\n\t\tos=-udi\n\t\t;;\n    \tabacus)\n\t\tbasic_machine=abacus-unknown\n\t\t;;\n\tadobe68k)\n\t\tbasic_machine=m68010-adobe\n\t\tos=-scout\n\t\t;;\n\talliant | fx80)\n\t\tbasic_machine=fx80-alliant\n\t\t;;\n\taltos | altos3068)\n\t\tbasic_machine=m68k-altos\n\t\t;;\n\tam29k)\n\t\tbasic_machine=a29k-none\n\t\tos=-bsd\n\t\t;;\n\tamd64)\n\t\tbasic_machine=x86_64-pc\n\t\t;;\n\tamd64-*)\n\t\tbasic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tamdahl)\n\t\tbasic_machine=580-amdahl\n\t\tos=-sysv\n\t\t;;\n\tamiga | amiga-*)\n\t\tbasic_machine=m68k-unknown\n\t\t;;\n\tamigaos | amigados)\n\t\tbasic_machine=m68k-unknown\n\t\tos=-amigaos\n\t\t;;\n\tamigaunix | amix)\n\t\tbasic_machine=m68k-unknown\n\t\tos=-sysv4\n\t\t;;\n\tapollo68)\n\t\tbasic_machine=m68k-apollo\n\t\tos=-sysv\n\t\t;;\n\tapollo68bsd)\n\t\tbasic_machine=m68k-apollo\n\t\tos=-bsd\n\t\t;;\n\taux)\n\t\tbasic_machine=m68k-apple\n\t\tos=-aux\n\t\t;;\n\tbalance)\n\t\tbasic_machine=ns32k-sequent\n\t\tos=-dynix\n\t\t;;\n\tc90)\n\t\tbasic_machine=c90-cray\n\t\tos=-unicos\n\t\t;;\n\tconvex-c1)\n\t\tbasic_machine=c1-convex\n\t\tos=-bsd\n\t\t;;\n\tconvex-c2)\n\t\tbasic_machine=c2-convex\n\t\tos=-bsd\n\t\t;;\n\tconvex-c32)\n\t\tbasic_machine=c32-convex\n\t\tos=-bsd\n\t\t;;\n\tconvex-c34)\n\t\tbasic_machine=c34-convex\n\t\tos=-bsd\n\t\t;;\n\tconvex-c38)\n\t\tbasic_machine=c38-convex\n\t\tos=-bsd\n\t\t;;\n\tcray | j90)\n\t\tbasic_machine=j90-cray\n\t\tos=-unicos\n\t\t;;\n\tcraynv)\n\t\tbasic_machine=craynv-cray\n\t\tos=-unicosmp\n\t\t;;\n\tcr16c)\n\t\tbasic_machine=cr16c-unknown\n\t\tos=-elf\n\t\t;;\n\tcrds | unos)\n\t\tbasic_machine=m68k-crds\n\t\t;;\n\tcrisv32 | crisv32-* | etraxfs*)\n\t\tbasic_machine=crisv32-axis\n\t\t;;\n\tcris | cris-* | etrax*)\n\t\tbasic_machine=cris-axis\n\t\t;;\n\tcrx)\n\t\tbasic_machine=crx-unknown\n\t\tos=-elf\n\t\t;;\n\tda30 | da30-*)\n\t\tbasic_machine=m68k-da30\n\t\t;;\n\tdecstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)\n\t\tbasic_machine=mips-dec\n\t\t;;\n\tdecsystem10* | dec10*)\n\t\tbasic_machine=pdp10-dec\n\t\tos=-tops10\n\t\t;;\n\tdecsystem20* | dec20*)\n\t\tbasic_machine=pdp10-dec\n\t\tos=-tops20\n\t\t;;\n\tdelta | 3300 | motorola-3300 | motorola-delta \\\n\t      | 3300-motorola | delta-motorola)\n\t\tbasic_machine=m68k-motorola\n\t\t;;\n\tdelta88)\n\t\tbasic_machine=m88k-motorola\n\t\tos=-sysv3\n\t\t;;\n\tdjgpp)\n\t\tbasic_machine=i586-pc\n\t\tos=-msdosdjgpp\n\t\t;;\n\tdpx20 | dpx20-*)\n\t\tbasic_machine=rs6000-bull\n\t\tos=-bosx\n\t\t;;\n\tdpx2* | dpx2*-bull)\n\t\tbasic_machine=m68k-bull\n\t\tos=-sysv3\n\t\t;;\n\tebmon29k)\n\t\tbasic_machine=a29k-amd\n\t\tos=-ebmon\n\t\t;;\n\telxsi)\n\t\tbasic_machine=elxsi-elxsi\n\t\tos=-bsd\n\t\t;;\n\tencore | umax | mmax)\n\t\tbasic_machine=ns32k-encore\n\t\t;;\n\tes1800 | OSE68k | ose68k | ose | OSE)\n\t\tbasic_machine=m68k-ericsson\n\t\tos=-ose\n\t\t;;\n\tfx2800)\n\t\tbasic_machine=i860-alliant\n\t\t;;\n\tgenix)\n\t\tbasic_machine=ns32k-ns\n\t\t;;\n\tgmicro)\n\t\tbasic_machine=tron-gmicro\n\t\tos=-sysv\n\t\t;;\n\tgo32)\n\t\tbasic_machine=i386-pc\n\t\tos=-go32\n\t\t;;\n\th3050r* | hiux*)\n\t\tbasic_machine=hppa1.1-hitachi\n\t\tos=-hiuxwe2\n\t\t;;\n\th8300hms)\n\t\tbasic_machine=h8300-hitachi\n\t\tos=-hms\n\t\t;;\n\th8300xray)\n\t\tbasic_machine=h8300-hitachi\n\t\tos=-xray\n\t\t;;\n\th8500hms)\n\t\tbasic_machine=h8500-hitachi\n\t\tos=-hms\n\t\t;;\n\tharris)\n\t\tbasic_machine=m88k-harris\n\t\tos=-sysv3\n\t\t;;\n\thp300-*)\n\t\tbasic_machine=m68k-hp\n\t\t;;\n\thp300bsd)\n\t\tbasic_machine=m68k-hp\n\t\tos=-bsd\n\t\t;;\n\thp300hpux)\n\t\tbasic_machine=m68k-hp\n\t\tos=-hpux\n\t\t;;\n\thp3k9[0-9][0-9] | hp9[0-9][0-9])\n\t\tbasic_machine=hppa1.0-hp\n\t\t;;\n\thp9k2[0-9][0-9] | hp9k31[0-9])\n\t\tbasic_machine=m68000-hp\n\t\t;;\n\thp9k3[2-9][0-9])\n\t\tbasic_machine=m68k-hp\n\t\t;;\n\thp9k6[0-9][0-9] | hp6[0-9][0-9])\n\t\tbasic_machine=hppa1.0-hp\n\t\t;;\n\thp9k7[0-79][0-9] | hp7[0-79][0-9])\n\t\tbasic_machine=hppa1.1-hp\n\t\t;;\n\thp9k78[0-9] | hp78[0-9])\n\t\t# FIXME: really hppa2.0-hp\n\t\tbasic_machine=hppa1.1-hp\n\t\t;;\n\thp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)\n\t\t# FIXME: really hppa2.0-hp\n\t\tbasic_machine=hppa1.1-hp\n\t\t;;\n\thp9k8[0-9][13679] | hp8[0-9][13679])\n\t\tbasic_machine=hppa1.1-hp\n\t\t;;\n\thp9k8[0-9][0-9] | hp8[0-9][0-9])\n\t\tbasic_machine=hppa1.0-hp\n\t\t;;\n\thppa-next)\n\t\tos=-nextstep3\n\t\t;;\n\thppaosf)\n\t\tbasic_machine=hppa1.1-hp\n\t\tos=-osf\n\t\t;;\n\thppro)\n\t\tbasic_machine=hppa1.1-hp\n\t\tos=-proelf\n\t\t;;\n\ti370-ibm* | ibm*)\n\t\tbasic_machine=i370-ibm\n\t\t;;\n# I'm not sure what \"Sysv32\" means.  Should this be sysv3.2?\n\ti*86v32)\n\t\tbasic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`\n\t\tos=-sysv32\n\t\t;;\n\ti*86v4*)\n\t\tbasic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`\n\t\tos=-sysv4\n\t\t;;\n\ti*86v)\n\t\tbasic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`\n\t\tos=-sysv\n\t\t;;\n\ti*86sol2)\n\t\tbasic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`\n\t\tos=-solaris2\n\t\t;;\n\ti386mach)\n\t\tbasic_machine=i386-mach\n\t\tos=-mach\n\t\t;;\n\ti386-vsta | vsta)\n\t\tbasic_machine=i386-unknown\n\t\tos=-vsta\n\t\t;;\n\tiris | iris4d)\n\t\tbasic_machine=mips-sgi\n\t\tcase $os in\n\t\t    -irix*)\n\t\t\t;;\n\t\t    *)\n\t\t\tos=-irix4\n\t\t\t;;\n\t\tesac\n\t\t;;\n\tisi68 | isi)\n\t\tbasic_machine=m68k-isi\n\t\tos=-sysv\n\t\t;;\n\tm88k-omron*)\n\t\tbasic_machine=m88k-omron\n\t\t;;\n\tmagnum | m3230)\n\t\tbasic_machine=mips-mips\n\t\tos=-sysv\n\t\t;;\n\tmerlin)\n\t\tbasic_machine=ns32k-utek\n\t\tos=-sysv\n\t\t;;\n\tmingw32)\n\t\tbasic_machine=i386-pc\n\t\tos=-mingw32\n\t\t;;\n\tminiframe)\n\t\tbasic_machine=m68000-convergent\n\t\t;;\n\t*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)\n\t\tbasic_machine=m68k-atari\n\t\tos=-mint\n\t\t;;\n\tmips3*-*)\n\t\tbasic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`\n\t\t;;\n\tmips3*)\n\t\tbasic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown\n\t\t;;\n\tmonitor)\n\t\tbasic_machine=m68k-rom68k\n\t\tos=-coff\n\t\t;;\n\tmorphos)\n\t\tbasic_machine=powerpc-unknown\n\t\tos=-morphos\n\t\t;;\n\tmsdos)\n\t\tbasic_machine=i386-pc\n\t\tos=-msdos\n\t\t;;\n\tms1-*)\n\t\tbasic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`\n\t\t;;\n\tmvs)\n\t\tbasic_machine=i370-ibm\n\t\tos=-mvs\n\t\t;;\n\tncr3000)\n\t\tbasic_machine=i486-ncr\n\t\tos=-sysv4\n\t\t;;\n\tnetbsd386)\n\t\tbasic_machine=i386-unknown\n\t\tos=-netbsd\n\t\t;;\n\tnetwinder)\n\t\tbasic_machine=armv4l-rebel\n\t\tos=-linux\n\t\t;;\n\tnews | news700 | news800 | news900)\n\t\tbasic_machine=m68k-sony\n\t\tos=-newsos\n\t\t;;\n\tnews1000)\n\t\tbasic_machine=m68030-sony\n\t\tos=-newsos\n\t\t;;\n\tnews-3600 | risc-news)\n\t\tbasic_machine=mips-sony\n\t\tos=-newsos\n\t\t;;\n\tnecv70)\n\t\tbasic_machine=v70-nec\n\t\tos=-sysv\n\t\t;;\n\tnext | m*-next )\n\t\tbasic_machine=m68k-next\n\t\tcase $os in\n\t\t    -nextstep* )\n\t\t\t;;\n\t\t    -ns2*)\n\t\t      os=-nextstep2\n\t\t\t;;\n\t\t    *)\n\t\t      os=-nextstep3\n\t\t\t;;\n\t\tesac\n\t\t;;\n\tnh3000)\n\t\tbasic_machine=m68k-harris\n\t\tos=-cxux\n\t\t;;\n\tnh[45]000)\n\t\tbasic_machine=m88k-harris\n\t\tos=-cxux\n\t\t;;\n\tnindy960)\n\t\tbasic_machine=i960-intel\n\t\tos=-nindy\n\t\t;;\n\tmon960)\n\t\tbasic_machine=i960-intel\n\t\tos=-mon960\n\t\t;;\n\tnonstopux)\n\t\tbasic_machine=mips-compaq\n\t\tos=-nonstopux\n\t\t;;\n\tnp1)\n\t\tbasic_machine=np1-gould\n\t\t;;\n\tnsr-tandem)\n\t\tbasic_machine=nsr-tandem\n\t\t;;\n\top50n-* | op60c-*)\n\t\tbasic_machine=hppa1.1-oki\n\t\tos=-proelf\n\t\t;;\n\topenrisc | openrisc-*)\n\t\tbasic_machine=or32-unknown\n\t\t;;\n\tos400)\n\t\tbasic_machine=powerpc-ibm\n\t\tos=-os400\n\t\t;;\n\tOSE68000 | ose68000)\n\t\tbasic_machine=m68000-ericsson\n\t\tos=-ose\n\t\t;;\n\tos68k)\n\t\tbasic_machine=m68k-none\n\t\tos=-os68k\n\t\t;;\n\tpa-hitachi)\n\t\tbasic_machine=hppa1.1-hitachi\n\t\tos=-hiuxwe2\n\t\t;;\n\tparagon)\n\t\tbasic_machine=i860-intel\n\t\tos=-osf\n\t\t;;\n\tpbd)\n\t\tbasic_machine=sparc-tti\n\t\t;;\n\tpbb)\n\t\tbasic_machine=m68k-tti\n\t\t;;\n\tpc532 | pc532-*)\n\t\tbasic_machine=ns32k-pc532\n\t\t;;\n\tpc98)\n\t\tbasic_machine=i386-pc\n\t\t;;\n\tpc98-*)\n\t\tbasic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tpentium | p5 | k5 | k6 | nexgen | viac3)\n\t\tbasic_machine=i586-pc\n\t\t;;\n\tpentiumpro | p6 | 6x86 | athlon | athlon_*)\n\t\tbasic_machine=i686-pc\n\t\t;;\n\tpentiumii | pentium2 | pentiumiii | pentium3)\n\t\tbasic_machine=i686-pc\n\t\t;;\n\tpentium4)\n\t\tbasic_machine=i786-pc\n\t\t;;\n\tpentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)\n\t\tbasic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tpentiumpro-* | p6-* | 6x86-* | athlon-*)\n\t\tbasic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tpentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)\n\t\tbasic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tpentium4-*)\n\t\tbasic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tpn)\n\t\tbasic_machine=pn-gould\n\t\t;;\n\tpower)\tbasic_machine=power-ibm\n\t\t;;\n\tppc)\tbasic_machine=powerpc-unknown\n\t\t;;\n\tppc-*)\tbasic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tppcle | powerpclittle | ppc-le | powerpc-little)\n\t\tbasic_machine=powerpcle-unknown\n\t\t;;\n\tppcle-* | powerpclittle-*)\n\t\tbasic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tppc64)\tbasic_machine=powerpc64-unknown\n\t\t;;\n\tppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tppc64le | powerpc64little | ppc64-le | powerpc64-little)\n\t\tbasic_machine=powerpc64le-unknown\n\t\t;;\n\tppc64le-* | powerpc64little-*)\n\t\tbasic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tps2)\n\t\tbasic_machine=i386-ibm\n\t\t;;\n\tpw32)\n\t\tbasic_machine=i586-unknown\n\t\tos=-pw32\n\t\t;;\n\trdos)\n\t\tbasic_machine=i386-pc\n\t\tos=-rdos\n\t\t;;\n\trom68k)\n\t\tbasic_machine=m68k-rom68k\n\t\tos=-coff\n\t\t;;\n\trm[46]00)\n\t\tbasic_machine=mips-siemens\n\t\t;;\n\trtpc | rtpc-*)\n\t\tbasic_machine=romp-ibm\n\t\t;;\n\ts390 | s390-*)\n\t\tbasic_machine=s390-ibm\n\t\t;;\n\ts390x | s390x-*)\n\t\tbasic_machine=s390x-ibm\n\t\t;;\n\tsa29200)\n\t\tbasic_machine=a29k-amd\n\t\tos=-udi\n\t\t;;\n\tsb1)\n\t\tbasic_machine=mipsisa64sb1-unknown\n\t\t;;\n\tsb1el)\n\t\tbasic_machine=mipsisa64sb1el-unknown\n\t\t;;\n\tsei)\n\t\tbasic_machine=mips-sei\n\t\tos=-seiux\n\t\t;;\n\tsequent)\n\t\tbasic_machine=i386-sequent\n\t\t;;\n\tsh)\n\t\tbasic_machine=sh-hitachi\n\t\tos=-hms\n\t\t;;\n\tsh64)\n\t\tbasic_machine=sh64-unknown\n\t\t;;\n\tsparclite-wrs | simso-wrs)\n\t\tbasic_machine=sparclite-wrs\n\t\tos=-vxworks\n\t\t;;\n\tsps7)\n\t\tbasic_machine=m68k-bull\n\t\tos=-sysv2\n\t\t;;\n\tspur)\n\t\tbasic_machine=spur-unknown\n\t\t;;\n\tst2000)\n\t\tbasic_machine=m68k-tandem\n\t\t;;\n\tstratus)\n\t\tbasic_machine=i860-stratus\n\t\tos=-sysv4\n\t\t;;\n\tsun2)\n\t\tbasic_machine=m68000-sun\n\t\t;;\n\tsun2os3)\n\t\tbasic_machine=m68000-sun\n\t\tos=-sunos3\n\t\t;;\n\tsun2os4)\n\t\tbasic_machine=m68000-sun\n\t\tos=-sunos4\n\t\t;;\n\tsun3os3)\n\t\tbasic_machine=m68k-sun\n\t\tos=-sunos3\n\t\t;;\n\tsun3os4)\n\t\tbasic_machine=m68k-sun\n\t\tos=-sunos4\n\t\t;;\n\tsun4os3)\n\t\tbasic_machine=sparc-sun\n\t\tos=-sunos3\n\t\t;;\n\tsun4os4)\n\t\tbasic_machine=sparc-sun\n\t\tos=-sunos4\n\t\t;;\n\tsun4sol2)\n\t\tbasic_machine=sparc-sun\n\t\tos=-solaris2\n\t\t;;\n\tsun3 | sun3-*)\n\t\tbasic_machine=m68k-sun\n\t\t;;\n\tsun4)\n\t\tbasic_machine=sparc-sun\n\t\t;;\n\tsun386 | sun386i | roadrunner)\n\t\tbasic_machine=i386-sun\n\t\t;;\n\tsv1)\n\t\tbasic_machine=sv1-cray\n\t\tos=-unicos\n\t\t;;\n\tsymmetry)\n\t\tbasic_machine=i386-sequent\n\t\tos=-dynix\n\t\t;;\n\tt3e)\n\t\tbasic_machine=alphaev5-cray\n\t\tos=-unicos\n\t\t;;\n\tt90)\n\t\tbasic_machine=t90-cray\n\t\tos=-unicos\n\t\t;;\n\ttic54x | c54x*)\n\t\tbasic_machine=tic54x-unknown\n\t\tos=-coff\n\t\t;;\n\ttic55x | c55x*)\n\t\tbasic_machine=tic55x-unknown\n\t\tos=-coff\n\t\t;;\n\ttic6x | c6x*)\n\t\tbasic_machine=tic6x-unknown\n\t\tos=-coff\n\t\t;;\n\ttx39)\n\t\tbasic_machine=mipstx39-unknown\n\t\t;;\n\ttx39el)\n\t\tbasic_machine=mipstx39el-unknown\n\t\t;;\n\ttoad1)\n\t\tbasic_machine=pdp10-xkl\n\t\tos=-tops20\n\t\t;;\n\ttower | tower-32)\n\t\tbasic_machine=m68k-ncr\n\t\t;;\n\ttpf)\n\t\tbasic_machine=s390x-ibm\n\t\tos=-tpf\n\t\t;;\n\tudi29k)\n\t\tbasic_machine=a29k-amd\n\t\tos=-udi\n\t\t;;\n\tultra3)\n\t\tbasic_machine=a29k-nyu\n\t\tos=-sym1\n\t\t;;\n\tv810 | necv810)\n\t\tbasic_machine=v810-nec\n\t\tos=-none\n\t\t;;\n\tvaxv)\n\t\tbasic_machine=vax-dec\n\t\tos=-sysv\n\t\t;;\n\tvms)\n\t\tbasic_machine=vax-dec\n\t\tos=-vms\n\t\t;;\n\tvpp*|vx|vx-*)\n\t\tbasic_machine=f301-fujitsu\n\t\t;;\n\tvxworks960)\n\t\tbasic_machine=i960-wrs\n\t\tos=-vxworks\n\t\t;;\n\tvxworks68)\n\t\tbasic_machine=m68k-wrs\n\t\tos=-vxworks\n\t\t;;\n\tvxworks29k)\n\t\tbasic_machine=a29k-wrs\n\t\tos=-vxworks\n\t\t;;\n\tw65*)\n\t\tbasic_machine=w65-wdc\n\t\tos=-none\n\t\t;;\n\tw89k-*)\n\t\tbasic_machine=hppa1.1-winbond\n\t\tos=-proelf\n\t\t;;\n\txbox)\n\t\tbasic_machine=i686-pc\n\t\tos=-mingw32\n\t\t;;\n\txps | xps100)\n\t\tbasic_machine=xps100-honeywell\n\t\t;;\n\tymp)\n\t\tbasic_machine=ymp-cray\n\t\tos=-unicos\n\t\t;;\n\tz8k-*-coff)\n\t\tbasic_machine=z8k-unknown\n\t\tos=-sim\n\t\t;;\n\tnone)\n\t\tbasic_machine=none-none\n\t\tos=-none\n\t\t;;\n\n# Here we handle the default manufacturer of certain CPU types.  It is in\n# some cases the only manufacturer, in others, it is the most popular.\n\tw89k)\n\t\tbasic_machine=hppa1.1-winbond\n\t\t;;\n\top50n)\n\t\tbasic_machine=hppa1.1-oki\n\t\t;;\n\top60c)\n\t\tbasic_machine=hppa1.1-oki\n\t\t;;\n\tromp)\n\t\tbasic_machine=romp-ibm\n\t\t;;\n\tmmix)\n\t\tbasic_machine=mmix-knuth\n\t\t;;\n\trs6000)\n\t\tbasic_machine=rs6000-ibm\n\t\t;;\n\tvax)\n\t\tbasic_machine=vax-dec\n\t\t;;\n\tpdp10)\n\t\t# there are many clones, so DEC is not a safe bet\n\t\tbasic_machine=pdp10-unknown\n\t\t;;\n\tpdp11)\n\t\tbasic_machine=pdp11-dec\n\t\t;;\n\twe32k)\n\t\tbasic_machine=we32k-att\n\t\t;;\n\tsh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)\n\t\tbasic_machine=sh-unknown\n\t\t;;\n\tsparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)\n\t\tbasic_machine=sparc-sun\n\t\t;;\n\tcydra)\n\t\tbasic_machine=cydra-cydrome\n\t\t;;\n\torion)\n\t\tbasic_machine=orion-highlevel\n\t\t;;\n\torion105)\n\t\tbasic_machine=clipper-highlevel\n\t\t;;\n\tmac | mpw | mac-mpw)\n\t\tbasic_machine=m68k-apple\n\t\t;;\n\tpmac | pmac-mpw)\n\t\tbasic_machine=powerpc-apple\n\t\t;;\n\t*-unknown)\n\t\t# Make sure to match an already-canonicalized machine name.\n\t\t;;\n\t*)\n\t\techo Invalid configuration \\`$1\\': machine \\`$basic_machine\\' not recognized 1>&2\n\t\texit 1\n\t\t;;\nesac\n\n# Here we canonicalize certain aliases for manufacturers.\ncase $basic_machine in\n\t*-digital*)\n\t\tbasic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`\n\t\t;;\n\t*-commodore*)\n\t\tbasic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`\n\t\t;;\n\t*)\n\t\t;;\nesac\n\n# Decode manufacturer-specific aliases for certain operating systems.\n\nif [ x\"$os\" != x\"\" ]\nthen\ncase $os in\n        # First match some system type aliases\n        # that might get confused with valid system types.\n\t# -solaris* is a basic system type, with this one exception.\n\t-solaris1 | -solaris1.*)\n\t\tos=`echo $os | sed -e 's|solaris1|sunos4|'`\n\t\t;;\n\t-solaris)\n\t\tos=-solaris2\n\t\t;;\n\t-svr4*)\n\t\tos=-sysv4\n\t\t;;\n\t-unixware*)\n\t\tos=-sysv4.2uw\n\t\t;;\n\t-gnu/linux*)\n\t\tos=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`\n\t\t;;\n\t# First accept the basic system types.\n\t# The portable systems comes first.\n\t# Each alternative MUST END IN A *, to match a version number.\n\t# -sysv* is not here because it comes later, after sysvr4.\n\t-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \\\n\t      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\\\n\t      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \\\n\t      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \\\n\t      | -aos* \\\n\t      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \\\n\t      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \\\n\t      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \\\n\t      | -openbsd* | -solidbsd* \\\n\t      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \\\n\t      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \\\n\t      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \\\n\t      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \\\n\t      | -chorusos* | -chorusrdb* \\\n\t      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \\\n\t      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \\\n\t      | -uxpv* | -beos* | -mpeix* | -udk* \\\n\t      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \\\n\t      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \\\n\t      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \\\n\t      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \\\n\t      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \\\n\t      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \\\n\t      | -skyos* | -haiku* | -rdos*)\n\t# Remember, each alternative MUST END IN *, to match a version number.\n\t\t;;\n\t-qnx*)\n\t\tcase $basic_machine in\n\t\t    x86-* | i*86-*)\n\t\t\t;;\n\t\t    *)\n\t\t\tos=-nto$os\n\t\t\t;;\n\t\tesac\n\t\t;;\n\t-nto-qnx*)\n\t\t;;\n\t-nto*)\n\t\tos=`echo $os | sed -e 's|nto|nto-qnx|'`\n\t\t;;\n\t-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \\\n\t      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \\\n\t      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)\n\t\t;;\n\t-mac*)\n\t\tos=`echo $os | sed -e 's|mac|macos|'`\n\t\t;;\n\t-linux-dietlibc)\n\t\tos=-linux-dietlibc\n\t\t;;\n\t-linux*)\n\t\tos=`echo $os | sed -e 's|linux|linux-gnu|'`\n\t\t;;\n\t-sunos5*)\n\t\tos=`echo $os | sed -e 's|sunos5|solaris2|'`\n\t\t;;\n\t-sunos6*)\n\t\tos=`echo $os | sed -e 's|sunos6|solaris3|'`\n\t\t;;\n\t-opened*)\n\t\tos=-openedition\n\t\t;;\n        -os400*)\n\t\tos=-os400\n\t\t;;\n\t-wince*)\n\t\tos=-wince\n\t\t;;\n\t-osfrose*)\n\t\tos=-osfrose\n\t\t;;\n\t-osf*)\n\t\tos=-osf\n\t\t;;\n\t-utek*)\n\t\tos=-bsd\n\t\t;;\n\t-dynix*)\n\t\tos=-bsd\n\t\t;;\n\t-acis*)\n\t\tos=-aos\n\t\t;;\n\t-atheos*)\n\t\tos=-atheos\n\t\t;;\n\t-syllable*)\n\t\tos=-syllable\n\t\t;;\n\t-386bsd)\n\t\tos=-bsd\n\t\t;;\n\t-ctix* | -uts*)\n\t\tos=-sysv\n\t\t;;\n\t-nova*)\n\t\tos=-rtmk-nova\n\t\t;;\n\t-ns2 )\n\t\tos=-nextstep2\n\t\t;;\n\t-nsk*)\n\t\tos=-nsk\n\t\t;;\n\t# Preserve the version number of sinix5.\n\t-sinix5.*)\n\t\tos=`echo $os | sed -e 's|sinix|sysv|'`\n\t\t;;\n\t-sinix*)\n\t\tos=-sysv4\n\t\t;;\n        -tpf*)\n\t\tos=-tpf\n\t\t;;\n\t-triton*)\n\t\tos=-sysv3\n\t\t;;\n\t-oss*)\n\t\tos=-sysv3\n\t\t;;\n\t-svr4)\n\t\tos=-sysv4\n\t\t;;\n\t-svr3)\n\t\tos=-sysv3\n\t\t;;\n\t-sysvr4)\n\t\tos=-sysv4\n\t\t;;\n\t# This must come after -sysvr4.\n\t-sysv*)\n\t\t;;\n\t-ose*)\n\t\tos=-ose\n\t\t;;\n\t-es1800*)\n\t\tos=-ose\n\t\t;;\n\t-xenix)\n\t\tos=-xenix\n\t\t;;\n\t-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)\n\t\tos=-mint\n\t\t;;\n\t-aros*)\n\t\tos=-aros\n\t\t;;\n\t-kaos*)\n\t\tos=-kaos\n\t\t;;\n\t-zvmoe)\n\t\tos=-zvmoe\n\t\t;;\n\t-none)\n\t\t;;\n\t*)\n\t\t# Get rid of the `-' at the beginning of $os.\n\t\tos=`echo $os | sed 's/[^-]*-//'`\n\t\techo Invalid configuration \\`$1\\': system \\`$os\\' not recognized 1>&2\n\t\texit 1\n\t\t;;\nesac\nelse\n\n# Here we handle the default operating systems that come with various machines.\n# The value should be what the vendor currently ships out the door with their\n# machine or put another way, the most popular os provided with the machine.\n\n# Note that if you're going to try to match \"-MANUFACTURER\" here (say,\n# \"-sun\"), then you have to tell the case statement up towards the top\n# that MANUFACTURER isn't an operating system.  Otherwise, code above\n# will signal an error saying that MANUFACTURER isn't an operating\n# system, and we'll never get to this point.\n\ncase $basic_machine in\n\t*-acorn)\n\t\tos=-riscix1.2\n\t\t;;\n\tarm*-rebel)\n\t\tos=-linux\n\t\t;;\n\tarm*-semi)\n\t\tos=-aout\n\t\t;;\n    c4x-* | tic4x-*)\n        os=-coff\n        ;;\n\t# This must come before the *-dec entry.\n\tpdp10-*)\n\t\tos=-tops20\n\t\t;;\n\tpdp11-*)\n\t\tos=-none\n\t\t;;\n\t*-dec | vax-*)\n\t\tos=-ultrix4.2\n\t\t;;\n\tm68*-apollo)\n\t\tos=-domain\n\t\t;;\n\ti386-sun)\n\t\tos=-sunos4.0.2\n\t\t;;\n\tm68000-sun)\n\t\tos=-sunos3\n\t\t# This also exists in the configure program, but was not the\n\t\t# default.\n\t\t# os=-sunos4\n\t\t;;\n\tm68*-cisco)\n\t\tos=-aout\n\t\t;;\n\tmips*-cisco)\n\t\tos=-elf\n\t\t;;\n\tmips*-*)\n\t\tos=-elf\n\t\t;;\n\tor32-*)\n\t\tos=-coff\n\t\t;;\n\t*-tti)\t# must be before sparc entry or we get the wrong os.\n\t\tos=-sysv3\n\t\t;;\n\tsparc-* | *-sun)\n\t\tos=-sunos4.1.1\n\t\t;;\n\t*-be)\n\t\tos=-beos\n\t\t;;\n\t*-haiku)\n\t\tos=-haiku\n\t\t;;\n\t*-ibm)\n\t\tos=-aix\n\t\t;;\n    \t*-knuth)\n\t\tos=-mmixware\n\t\t;;\n\t*-wec)\n\t\tos=-proelf\n\t\t;;\n\t*-winbond)\n\t\tos=-proelf\n\t\t;;\n\t*-oki)\n\t\tos=-proelf\n\t\t;;\n\t*-hp)\n\t\tos=-hpux\n\t\t;;\n\t*-hitachi)\n\t\tos=-hiux\n\t\t;;\n\ti860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)\n\t\tos=-sysv\n\t\t;;\n\t*-cbm)\n\t\tos=-amigaos\n\t\t;;\n\t*-dg)\n\t\tos=-dgux\n\t\t;;\n\t*-dolphin)\n\t\tos=-sysv3\n\t\t;;\n\tm68k-ccur)\n\t\tos=-rtu\n\t\t;;\n\tm88k-omron*)\n\t\tos=-luna\n\t\t;;\n\t*-next )\n\t\tos=-nextstep\n\t\t;;\n\t*-sequent)\n\t\tos=-ptx\n\t\t;;\n\t*-crds)\n\t\tos=-unos\n\t\t;;\n\t*-ns)\n\t\tos=-genix\n\t\t;;\n\ti370-*)\n\t\tos=-mvs\n\t\t;;\n\t*-next)\n\t\tos=-nextstep3\n\t\t;;\n\t*-gould)\n\t\tos=-sysv\n\t\t;;\n\t*-highlevel)\n\t\tos=-bsd\n\t\t;;\n\t*-encore)\n\t\tos=-bsd\n\t\t;;\n\t*-sgi)\n\t\tos=-irix\n\t\t;;\n\t*-siemens)\n\t\tos=-sysv4\n\t\t;;\n\t*-masscomp)\n\t\tos=-rtu\n\t\t;;\n\tf30[01]-fujitsu | f700-fujitsu)\n\t\tos=-uxpv\n\t\t;;\n\t*-rom68k)\n\t\tos=-coff\n\t\t;;\n\t*-*bug)\n\t\tos=-coff\n\t\t;;\n\t*-apple)\n\t\tos=-macos\n\t\t;;\n\t*-atari*)\n\t\tos=-mint\n\t\t;;\n\t*)\n\t\tos=-none\n\t\t;;\nesac\nfi\n\n# Here we handle the case where we know the os, and the CPU type, but not the\n# manufacturer.  We pick the logical manufacturer.\nvendor=unknown\ncase $basic_machine in\n\t*-unknown)\n\t\tcase $os in\n\t\t\t-riscix*)\n\t\t\t\tvendor=acorn\n\t\t\t\t;;\n\t\t\t-sunos*)\n\t\t\t\tvendor=sun\n\t\t\t\t;;\n\t\t\t-aix*)\n\t\t\t\tvendor=ibm\n\t\t\t\t;;\n\t\t\t-beos*)\n\t\t\t\tvendor=be\n\t\t\t\t;;\n\t\t\t-hpux*)\n\t\t\t\tvendor=hp\n\t\t\t\t;;\n\t\t\t-mpeix*)\n\t\t\t\tvendor=hp\n\t\t\t\t;;\n\t\t\t-hiux*)\n\t\t\t\tvendor=hitachi\n\t\t\t\t;;\n\t\t\t-unos*)\n\t\t\t\tvendor=crds\n\t\t\t\t;;\n\t\t\t-dgux*)\n\t\t\t\tvendor=dg\n\t\t\t\t;;\n\t\t\t-luna*)\n\t\t\t\tvendor=omron\n\t\t\t\t;;\n\t\t\t-genix*)\n\t\t\t\tvendor=ns\n\t\t\t\t;;\n\t\t\t-mvs* | -opened*)\n\t\t\t\tvendor=ibm\n\t\t\t\t;;\n\t\t\t-os400*)\n\t\t\t\tvendor=ibm\n\t\t\t\t;;\n\t\t\t-ptx*)\n\t\t\t\tvendor=sequent\n\t\t\t\t;;\n\t\t\t-tpf*)\n\t\t\t\tvendor=ibm\n\t\t\t\t;;\n\t\t\t-vxsim* | -vxworks* | -windiss*)\n\t\t\t\tvendor=wrs\n\t\t\t\t;;\n\t\t\t-aux*)\n\t\t\t\tvendor=apple\n\t\t\t\t;;\n\t\t\t-hms*)\n\t\t\t\tvendor=hitachi\n\t\t\t\t;;\n\t\t\t-mpw* | -macos*)\n\t\t\t\tvendor=apple\n\t\t\t\t;;\n\t\t\t-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)\n\t\t\t\tvendor=atari\n\t\t\t\t;;\n\t\t\t-vos*)\n\t\t\t\tvendor=stratus\n\t\t\t\t;;\n\t\tesac\n\t\tbasic_machine=`echo $basic_machine | sed \"s/unknown/$vendor/\"`\n\t\t;;\nesac\n\necho $basic_machine$os\nexit\n\n# Local variables:\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"timestamp='\"\n# time-stamp-format: \"%:y-%02m-%02d\"\n# time-stamp-end: \"'\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/depcomp",
    "content": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2005-07-09.11\n\n# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.\n\n# This program 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, or (at your option)\n# any later version.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n# 02110-1301, USA.\n\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.\n\ncase $1 in\n  '')\n     echo \"$0: No command.  Try \\`$0 --help' for more information.\" 1>&2\n     exit 1;\n     ;;\n  -h | --h*)\n    cat <<\\EOF\nUsage: depcomp [--help] [--version] PROGRAM [ARGS]\n\nRun PROGRAMS ARGS to compile a file, generating dependencies\nas side-effects.\n\nEnvironment variables:\n  depmode     Dependency tracking mode.\n  source      Source file read by `PROGRAMS ARGS'.\n  object      Object file output by `PROGRAMS ARGS'.\n  DEPDIR      directory where to store dependencies.\n  depfile     Dependency file to output.\n  tmpdepfile  Temporary file to use when outputing dependencies.\n  libtool     Whether libtool is used (yes/no).\n\nReport bugs to <bug-automake@gnu.org>.\nEOF\n    exit $?\n    ;;\n  -v | --v*)\n    echo \"depcomp $scriptversion\"\n    exit $?\n    ;;\nesac\n\nif test -z \"$depmode\" || test -z \"$source\" || test -z \"$object\"; then\n  echo \"depcomp: Variables source, object and depmode must be set\" 1>&2\n  exit 1\nfi\n\n# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.\ndepfile=${depfile-`echo \"$object\" |\n  sed 's|[^\\\\/]*$|'${DEPDIR-.deps}'/&|;s|\\.\\([^.]*\\)$|.P\\1|;s|Pobj$|Po|'`}\ntmpdepfile=${tmpdepfile-`echo \"$depfile\" | sed 's/\\.\\([^.]*\\)$/.T\\1/'`}\n\nrm -f \"$tmpdepfile\"\n\n# Some modes work just like other modes, but use different flags.  We\n# parameterize here, but still list the modes in the big case below,\n# to make depend.m4 easier to write.  Note that we *cannot* use a case\n# here, because this file can only contain one case statement.\nif test \"$depmode\" = hp; then\n  # HP compiler uses -M and no extra arg.\n  gccflag=-M\n  depmode=gcc\nfi\n\nif test \"$depmode\" = dashXmstdout; then\n   # This is just like dashmstdout with a different argument.\n   dashmflag=-xM\n   depmode=dashmstdout\nfi\n\ncase \"$depmode\" in\ngcc3)\n## gcc 3 implements dependency tracking that does exactly what\n## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like\n## it if -MD -MP comes after the -MF stuff.  Hmm.\n  \"$@\" -MT \"$object\" -MD -MP -MF \"$tmpdepfile\"\n  stat=$?\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  mv \"$tmpdepfile\" \"$depfile\"\n  ;;\n\ngcc)\n## There are various ways to get dependency output from gcc.  Here's\n## why we pick this rather obscure method:\n## - Don't want to use -MD because we'd like the dependencies to end\n##   up in a subdir.  Having to rename by hand is ugly.\n##   (We might end up doing this anyway to support other compilers.)\n## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like\n##   -MM, not -M (despite what the docs say).\n## - Using -M directly means running the compiler twice (even worse\n##   than renaming).\n  if test -z \"$gccflag\"; then\n    gccflag=-MD,\n  fi\n  \"$@\" -Wp,\"$gccflag$tmpdepfile\"\n  stat=$?\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n## The second -e expression handles DOS-style file names with drive letters.\n  sed -e 's/^[^:]*: / /' \\\n      -e 's/^['$alpha']:\\/[^:]*: / /' < \"$tmpdepfile\" >> \"$depfile\"\n## This next piece of magic avoids the `deleted header file' problem.\n## The problem is that when a header file which appears in a .P file\n## is deleted, the dependency causes make to die (because there is\n## typically no way to rebuild the header).  We avoid this by adding\n## dummy dependencies for each header file.  Too bad gcc doesn't do\n## this for us directly.\n  tr ' ' '\n' < \"$tmpdepfile\" |\n## Some versions of gcc put a space before the `:'.  On the theory\n## that the space means something, we add a space to the output as\n## well.\n## Some versions of the HPUX 10.20 sed can't process this invocation\n## correctly.  Breaking it into two sed invocations is a workaround.\n    sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nhp)\n  # This case exists only to let depend.m4 do its work.  It works by\n  # looking at the text of this script.  This case will never be run,\n  # since it is checked for above.\n  exit 1\n  ;;\n\nsgi)\n  if test \"$libtool\" = yes; then\n    \"$@\" \"-Wp,-MDupdate,$tmpdepfile\"\n  else\n    \"$@\" -MDupdate \"$tmpdepfile\"\n  fi\n  stat=$?\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n\n  if test -f \"$tmpdepfile\"; then  # yes, the sourcefile depend on other files\n    echo \"$object : \\\\\" > \"$depfile\"\n\n    # Clip off the initial element (the dependent).  Don't try to be\n    # clever and replace this with sed code, as IRIX sed won't handle\n    # lines with more than a fixed number of characters (4096 in\n    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;\n    # the IRIX cc adds comments like `#:fec' to the end of the\n    # dependency line.\n    tr ' ' '\n' < \"$tmpdepfile\" \\\n    | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' | \\\n    tr '\n' ' ' >> $depfile\n    echo >> $depfile\n\n    # The second pass generates a dummy entry for each header file.\n    tr ' ' '\n' < \"$tmpdepfile\" \\\n   | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \\\n   >> $depfile\n  else\n    # The sourcefile does not contain any dependencies, so just\n    # store a dummy comment line, to avoid errors with the Makefile\n    # \"include basename.Plo\" scheme.\n    echo \"#dummy\" > \"$depfile\"\n  fi\n  rm -f \"$tmpdepfile\"\n  ;;\n\naix)\n  # The C for AIX Compiler uses -M and outputs the dependencies\n  # in a .u file.  In older versions, this file always lives in the\n  # current directory.  Also, the AIX compiler puts `$object:' at the\n  # start of each line; $object doesn't have directory information.\n  # Version 6 uses the directory in both cases.\n  stripped=`echo \"$object\" | sed 's/\\(.*\\)\\..*$/\\1/'`\n  tmpdepfile=\"$stripped.u\"\n  if test \"$libtool\" = yes; then\n    \"$@\" -Wc,-M\n  else\n    \"$@\" -M\n  fi\n  stat=$?\n\n  if test -f \"$tmpdepfile\"; then :\n  else\n    stripped=`echo \"$stripped\" | sed 's,^.*/,,'`\n    tmpdepfile=\"$stripped.u\"\n  fi\n\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n\n  if test -f \"$tmpdepfile\"; then\n    outname=\"$stripped.o\"\n    # Each line is of the form `foo.o: dependent.h'.\n    # Do two passes, one to just change these to\n    # `$object: dependent.h' and one to simply `dependent.h:'.\n    sed -e \"s,^$outname:,$object :,\" < \"$tmpdepfile\" > \"$depfile\"\n    sed -e \"s,^$outname: \\(.*\\)$,\\1:,\" < \"$tmpdepfile\" >> \"$depfile\"\n  else\n    # The sourcefile does not contain any dependencies, so just\n    # store a dummy comment line, to avoid errors with the Makefile\n    # \"include basename.Plo\" scheme.\n    echo \"#dummy\" > \"$depfile\"\n  fi\n  rm -f \"$tmpdepfile\"\n  ;;\n\nicc)\n  # Intel's C compiler understands `-MD -MF file'.  However on\n  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c\n  # ICC 7.0 will fill foo.d with something like\n  #    foo.o: sub/foo.c\n  #    foo.o: sub/foo.h\n  # which is wrong.  We want:\n  #    sub/foo.o: sub/foo.c\n  #    sub/foo.o: sub/foo.h\n  #    sub/foo.c:\n  #    sub/foo.h:\n  # ICC 7.1 will output\n  #    foo.o: sub/foo.c sub/foo.h\n  # and will wrap long lines using \\ :\n  #    foo.o: sub/foo.c ... \\\n  #     sub/foo.h ... \\\n  #     ...\n\n  \"$@\" -MD -MF \"$tmpdepfile\"\n  stat=$?\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  # Each line is of the form `foo.o: dependent.h',\n  # or `foo.o: dep1.h dep2.h \\', or ` dep3.h dep4.h \\'.\n  # Do two passes, one to just change these to\n  # `$object: dependent.h' and one to simply `dependent.h:'.\n  sed \"s,^[^:]*:,$object :,\" < \"$tmpdepfile\" > \"$depfile\"\n  # Some versions of the HPUX 10.20 sed can't process this invocation\n  # correctly.  Breaking it into two sed invocations is a workaround.\n  sed 's,^[^:]*: \\(.*\\)$,\\1,;s/^\\\\$//;/^$/d;/:$/d' < \"$tmpdepfile\" |\n    sed -e 's/$/ :/' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\ntru64)\n   # The Tru64 compiler uses -MD to generate dependencies as a side\n   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.\n   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put\n   # dependencies in `foo.d' instead, so we check for that too.\n   # Subdirectories are respected.\n   dir=`echo \"$object\" | sed -e 's|/[^/]*$|/|'`\n   test \"x$dir\" = \"x$object\" && dir=\n   base=`echo \"$object\" | sed -e 's|^.*/||' -e 's/\\.o$//' -e 's/\\.lo$//'`\n\n   if test \"$libtool\" = yes; then\n      # With Tru64 cc, shared objects can also be used to make a\n      # static library.  This mecanism is used in libtool 1.4 series to\n      # handle both shared and static libraries in a single compilation.\n      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.\n      #\n      # With libtool 1.5 this exception was removed, and libtool now\n      # generates 2 separate objects for the 2 libraries.  These two\n      # compilations output dependencies in in $dir.libs/$base.o.d and\n      # in $dir$base.o.d.  We have to check for both files, because\n      # one of the two compilations can be disabled.  We should prefer\n      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is\n      # automatically cleaned when .libs/ is deleted, while ignoring\n      # the former would cause a distcleancheck panic.\n      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4\n      tmpdepfile2=$dir$base.o.d          # libtool 1.5\n      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5\n      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504\n      \"$@\" -Wc,-MD\n   else\n      tmpdepfile1=$dir$base.o.d\n      tmpdepfile2=$dir$base.d\n      tmpdepfile3=$dir$base.d\n      tmpdepfile4=$dir$base.d\n      \"$@\" -MD\n   fi\n\n   stat=$?\n   if test $stat -eq 0; then :\n   else\n      rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\" \"$tmpdepfile4\"\n      exit $stat\n   fi\n\n   for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\" \"$tmpdepfile4\"\n   do\n     test -f \"$tmpdepfile\" && break\n   done\n   if test -f \"$tmpdepfile\"; then\n      sed -e \"s,^.*\\.[a-z]*:,$object:,\" < \"$tmpdepfile\" > \"$depfile\"\n      # That's a tab and a space in the [].\n      sed -e 's,^.*\\.[a-z]*:[\t ]*,,' -e 's,$,:,' < \"$tmpdepfile\" >> \"$depfile\"\n   else\n      echo \"#dummy\" > \"$depfile\"\n   fi\n   rm -f \"$tmpdepfile\"\n   ;;\n\n#nosideeffect)\n  # This comment above is used by automake to tell side-effect\n  # dependency tracking mechanisms from slower ones.\n\ndashmstdout)\n  # Important note: in order to support this mode, a compiler *must*\n  # always write the preprocessed file to stdout, regardless of -o.\n  \"$@\" || exit $?\n\n  # Remove the call to Libtool.\n  if test \"$libtool\" = yes; then\n    while test $1 != '--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n\n  # Remove `-o $object'.\n  IFS=\" \"\n  for arg\n  do\n    case $arg in\n    -o)\n      shift\n      ;;\n    $object)\n      shift\n      ;;\n    *)\n      set fnord \"$@\" \"$arg\"\n      shift # fnord\n      shift # $arg\n      ;;\n    esac\n  done\n\n  test -z \"$dashmflag\" && dashmflag=-M\n  # Require at least two characters before searching for `:'\n  # in the target name.  This is to cope with DOS-style filenames:\n  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.\n  \"$@\" $dashmflag |\n    sed 's:^[  ]*[^: ][^:][^:]*\\:[    ]*:'\"$object\"'\\: :' > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  cat < \"$tmpdepfile\" > \"$depfile\"\n  tr ' ' '\n' < \"$tmpdepfile\" | \\\n## Some versions of the HPUX 10.20 sed can't process this invocation\n## correctly.  Breaking it into two sed invocations is a workaround.\n    sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\ndashXmstdout)\n  # This case only exists to satisfy depend.m4.  It is never actually\n  # run, as this mode is specially recognized in the preamble.\n  exit 1\n  ;;\n\nmakedepend)\n  \"$@\" || exit $?\n  # Remove any Libtool call\n  if test \"$libtool\" = yes; then\n    while test $1 != '--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n  # X makedepend\n  shift\n  cleared=no\n  for arg in \"$@\"; do\n    case $cleared in\n    no)\n      set \"\"; shift\n      cleared=yes ;;\n    esac\n    case \"$arg\" in\n    -D*|-I*)\n      set fnord \"$@\" \"$arg\"; shift ;;\n    # Strip any option that makedepend may not understand.  Remove\n    # the object too, otherwise makedepend will parse it as a source file.\n    -*|$object)\n      ;;\n    *)\n      set fnord \"$@\" \"$arg\"; shift ;;\n    esac\n  done\n  obj_suffix=\"`echo $object | sed 's/^.*\\././'`\"\n  touch \"$tmpdepfile\"\n  ${MAKEDEPEND-makedepend} -o\"$obj_suffix\" -f\"$tmpdepfile\" \"$@\"\n  rm -f \"$depfile\"\n  cat < \"$tmpdepfile\" > \"$depfile\"\n  sed '1,2d' \"$tmpdepfile\" | tr ' ' '\n' | \\\n## Some versions of the HPUX 10.20 sed can't process this invocation\n## correctly.  Breaking it into two sed invocations is a workaround.\n    sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> \"$depfile\"\n  rm -f \"$tmpdepfile\" \"$tmpdepfile\".bak\n  ;;\n\ncpp)\n  # Important note: in order to support this mode, a compiler *must*\n  # always write the preprocessed file to stdout.\n  \"$@\" || exit $?\n\n  # Remove the call to Libtool.\n  if test \"$libtool\" = yes; then\n    while test $1 != '--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n\n  # Remove `-o $object'.\n  IFS=\" \"\n  for arg\n  do\n    case $arg in\n    -o)\n      shift\n      ;;\n    $object)\n      shift\n      ;;\n    *)\n      set fnord \"$@\" \"$arg\"\n      shift # fnord\n      shift # $arg\n      ;;\n    esac\n  done\n\n  \"$@\" -E |\n    sed -n -e '/^# [0-9][0-9]* \"\\([^\"]*\\)\".*/ s:: \\1 \\\\:p' \\\n       -e '/^#line [0-9][0-9]* \"\\([^\"]*\\)\".*/ s:: \\1 \\\\:p' |\n    sed '$ s: \\\\$::' > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  cat < \"$tmpdepfile\" >> \"$depfile\"\n  sed < \"$tmpdepfile\" '/^$/d;s/^ //;s/ \\\\$//;s/$/ :/' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvisualcpp)\n  # Important note: in order to support this mode, a compiler *must*\n  # always write the preprocessed file to stdout, regardless of -o,\n  # because we must use -o when running libtool.\n  \"$@\" || exit $?\n  IFS=\" \"\n  for arg\n  do\n    case \"$arg\" in\n    \"-Gm\"|\"/Gm\"|\"-Gi\"|\"/Gi\"|\"-ZI\"|\"/ZI\")\n\tset fnord \"$@\"\n\tshift\n\tshift\n\t;;\n    *)\n\tset fnord \"$@\" \"$arg\"\n\tshift\n\tshift\n\t;;\n    esac\n  done\n  \"$@\" -E |\n  sed -n '/^#line [0-9][0-9]* \"\\([^\"]*\\)\"/ s::echo \"`cygpath -u \\\\\"\\1\\\\\"`\":p' | sort | uniq > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  . \"$tmpdepfile\" | sed 's% %\\\\ %g' | sed -n '/^\\(.*\\)$/ s::\t\\1 \\\\:p' >> \"$depfile\"\n  echo \"\t\" >> \"$depfile\"\n  . \"$tmpdepfile\" | sed 's% %\\\\ %g' | sed -n '/^\\(.*\\)$/ s::\\1\\::p' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nnone)\n  exec \"$@\"\n  ;;\n\n*)\n  echo \"Unknown depmode $depmode\" 1>&2\n  exit 1\n  ;;\nesac\n\nexit 0\n\n# Local Variables:\n# mode: shell-script\n# sh-indentation: 2\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"scriptversion=\"\n# time-stamp-format: \"%:y-%02m-%02d.%02H\"\n# time-stamp-end: \"$\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/dospaths.m4",
    "content": "# Test if the system uses DOS-style pathnames (drive specs and backslashes)\n# By Paul Smith <psmith@gnu.org>.  Based on dos.m4 by Jim Meyering.\n\n# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAC_DEFUN([pds_AC_DOS_PATHS],\n  [\n    AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths],\n      [\n        AC_COMPILE_IFELSE([\n#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__\nneither MSDOS nor Windows nor OS2\n#endif\n],\n        [ac_cv_dos_paths=yes],\n        [ac_cv_dos_paths=no])\n      ])\n\n    if test x\"$ac_cv_dos_paths\" = xyes; then\n      AC_DEFINE_UNQUOTED([HAVE_DOS_PATHS], 1,\n                         [Define if the system uses DOS-style pathnames.])\n    fi\n  ])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/gettext.m4",
    "content": "# gettext.m4 serial 28 (gettext-0.13)\ndnl Copyright (C) 1995-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\ndnl\ndnl This file can can be used in projects which are not available under\ndnl the GNU General Public License or the GNU Library General Public\ndnl License but which still want to provide support for the GNU gettext\ndnl functionality.\ndnl Please note that the actual code of the GNU gettext library is covered\ndnl by the GNU Library General Public License, and the rest of the GNU\ndnl gettext package package is covered by the GNU General Public License.\ndnl They are *not* in the public domain.\n\ndnl Authors:\ndnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.\ndnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.\n\ndnl Macro to add for using GNU gettext.\n\ndnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).\ndnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The\ndnl    default (if it is not specified or empty) is 'no-libtool'.\ndnl    INTLSYMBOL should be 'external' for packages with no intl directory,\ndnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.\ndnl    If INTLSYMBOL is 'use-libtool', then a libtool library\ndnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,\ndnl    depending on --{enable,disable}-{shared,static} and on the presence of\ndnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library\ndnl    $(top_builddir)/intl/libintl.a will be created.\ndnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext\ndnl    implementations (in libc or libintl) without the ngettext() function\ndnl    will be ignored.  If NEEDSYMBOL is specified and is\ndnl    'need-formatstring-macros', then GNU gettext implementations that don't\ndnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.\ndnl INTLDIR is used to find the intl libraries.  If empty,\ndnl    the value `$(top_builddir)/intl/' is used.\ndnl\ndnl The result of the configuration is one of three cases:\ndnl 1) GNU gettext, as included in the intl subdirectory, will be compiled\ndnl    and used.\ndnl    Catalog format: GNU --> install in $(datadir)\ndnl    Catalog extension: .mo after installation, .gmo in source tree\ndnl 2) GNU gettext has been found in the system's C library.\ndnl    Catalog format: GNU --> install in $(datadir)\ndnl    Catalog extension: .mo after installation, .gmo in source tree\ndnl 3) No internationalization, always use English msgid.\ndnl    Catalog format: none\ndnl    Catalog extension: none\ndnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.\ndnl The use of .gmo is historical (it was needed to avoid overwriting the\ndnl GNU format catalogs when building on a platform with an X/Open gettext),\ndnl but we keep it in order not to force irrelevant filename changes on the\ndnl maintainers.\ndnl\nAC_DEFUN([AM_GNU_GETTEXT],\n[\n  dnl Argument checking.\n  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,\n    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT\n])])])])])\n  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,\n    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT\n])])])])\n  define(gt_included_intl, ifelse([$1], [external], [no], [yes]))\n  define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))\n\n  AC_REQUIRE([AM_PO_SUBDIRS])dnl\n  ifelse(gt_included_intl, yes, [\n    AC_REQUIRE([AM_INTL_SUBDIR])dnl\n  ])\n\n  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n\n  dnl Sometimes libintl requires libiconv, so first search for libiconv.\n  dnl Ideally we would do this search only after the\n  dnl      if test \"$USE_NLS\" = \"yes\"; then\n  dnl        if test \"$gt_cv_func_gnugettext_libc\" != \"yes\"; then\n  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT\n  dnl the configure script would need to contain the same shell code\n  dnl again, outside any 'if'. There are two solutions:\n  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.\n  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.\n  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not\n  dnl documented, we avoid it.\n  ifelse(gt_included_intl, yes, , [\n    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])\n  ])\n\n  dnl Set USE_NLS.\n  AM_NLS\n\n  ifelse(gt_included_intl, yes, [\n    BUILD_INCLUDED_LIBINTL=no\n    USE_INCLUDED_LIBINTL=no\n  ])\n  LIBINTL=\n  LTLIBINTL=\n  POSUB=\n\n  dnl If we use NLS figure out what method\n  if test \"$USE_NLS\" = \"yes\"; then\n    gt_use_preinstalled_gnugettext=no\n    ifelse(gt_included_intl, yes, [\n      AC_MSG_CHECKING([whether included gettext is requested])\n      AC_ARG_WITH(included-gettext,\n        [  --with-included-gettext use the GNU gettext library included here],\n        nls_cv_force_use_gnu_gettext=$withval,\n        nls_cv_force_use_gnu_gettext=no)\n      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)\n\n      nls_cv_use_gnu_gettext=\"$nls_cv_force_use_gnu_gettext\"\n      if test \"$nls_cv_force_use_gnu_gettext\" != \"yes\"; then\n    ])\n        dnl User does not insist on using GNU NLS library.  Figure out what\n        dnl to use.  If GNU gettext is available we use this.  Else we have\n        dnl to fall back to GNU NLS library.\n\n        dnl Add a version number to the cache macros.\n        define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))\n        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])\n        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])\n\n        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,\n         [AC_TRY_LINK([#include <libintl.h>\n]ifelse([$2], [need-formatstring-macros],\n[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION\n#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)\n#endif\nchangequote(,)dnl\ntypedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];\nchangequote([,])dnl\n], [])[extern int _nl_msg_cat_cntr;\nextern int *_nl_domain_bindings;],\n            [bindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\")]ifelse([$2], [need-ngettext], [ + (int) ngettext (\"\", \"\", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],\n            gt_cv_func_gnugettext_libc=yes,\n            gt_cv_func_gnugettext_libc=no)])\n\n        if test \"$gt_cv_func_gnugettext_libc\" != \"yes\"; then\n          dnl Sometimes libintl requires libiconv, so first search for libiconv.\n          ifelse(gt_included_intl, yes, , [\n            AM_ICONV_LINK\n          ])\n          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL\n          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])\n          dnl because that would add \"-liconv\" to LIBINTL and LTLIBINTL\n          dnl even if libiconv doesn't exist.\n          AC_LIB_LINKFLAGS_BODY([intl])\n          AC_CACHE_CHECK([for GNU gettext in libintl],\n            gt_cv_func_gnugettext_libintl,\n           [gt_save_CPPFLAGS=\"$CPPFLAGS\"\n            CPPFLAGS=\"$CPPFLAGS $INCINTL\"\n            gt_save_LIBS=\"$LIBS\"\n            LIBS=\"$LIBS $LIBINTL\"\n            dnl Now see whether libintl exists and does not depend on libiconv.\n            AC_TRY_LINK([#include <libintl.h>\n]ifelse([$2], [need-formatstring-macros],\n[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION\n#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)\n#endif\nchangequote(,)dnl\ntypedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];\nchangequote([,])dnl\n], [])[extern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();],\n              [bindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\")]ifelse([$2], [need-ngettext], [ + (int) ngettext (\"\", \"\", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],\n              gt_cv_func_gnugettext_libintl=yes,\n              gt_cv_func_gnugettext_libintl=no)\n            dnl Now see whether libintl exists and depends on libiconv.\n            if test \"$gt_cv_func_gnugettext_libintl\" != yes && test -n \"$LIBICONV\"; then\n              LIBS=\"$LIBS $LIBICONV\"\n              AC_TRY_LINK([#include <libintl.h>\n]ifelse([$2], [need-formatstring-macros],\n[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION\n#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)\n#endif\nchangequote(,)dnl\ntypedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];\nchangequote([,])dnl\n], [])[extern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();],\n                [bindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\")]ifelse([$2], [need-ngettext], [ + (int) ngettext (\"\", \"\", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],\n               [LIBINTL=\"$LIBINTL $LIBICONV\"\n                LTLIBINTL=\"$LTLIBINTL $LTLIBICONV\"\n                gt_cv_func_gnugettext_libintl=yes\n               ])\n            fi\n            CPPFLAGS=\"$gt_save_CPPFLAGS\"\n            LIBS=\"$gt_save_LIBS\"])\n        fi\n\n        dnl If an already present or preinstalled GNU gettext() is found,\n        dnl use it.  But if this macro is used in GNU gettext, and GNU\n        dnl gettext is already preinstalled in libintl, we update this\n        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)\n        if test \"$gt_cv_func_gnugettext_libc\" = \"yes\" \\\n           || { test \"$gt_cv_func_gnugettext_libintl\" = \"yes\" \\\n                && test \"$PACKAGE\" != gettext-runtime \\\n                && test \"$PACKAGE\" != gettext-tools; }; then\n          gt_use_preinstalled_gnugettext=yes\n        else\n          dnl Reset the values set by searching for libintl.\n          LIBINTL=\n          LTLIBINTL=\n          INCINTL=\n        fi\n\n    ifelse(gt_included_intl, yes, [\n        if test \"$gt_use_preinstalled_gnugettext\" != \"yes\"; then\n          dnl GNU gettext is not found in the C library.\n          dnl Fall back on included GNU gettext library.\n          nls_cv_use_gnu_gettext=yes\n        fi\n      fi\n\n      if test \"$nls_cv_use_gnu_gettext\" = \"yes\"; then\n        dnl Mark actions used to generate GNU NLS library.\n        BUILD_INCLUDED_LIBINTL=yes\n        USE_INCLUDED_LIBINTL=yes\n        LIBINTL=\"ifelse([$3],[],\\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV\"\n        LTLIBINTL=\"ifelse([$3],[],\\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV\"\n        LIBS=`echo \" $LIBS \" | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`\n      fi\n\n      if test \"$gt_use_preinstalled_gnugettext\" = \"yes\" \\\n         || test \"$nls_cv_use_gnu_gettext\" = \"yes\"; then\n        dnl Mark actions to use GNU gettext tools.\n        CATOBJEXT=.gmo\n      fi\n    ])\n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\" \\\n       || test \"$nls_cv_use_gnu_gettext\" = \"yes\"; then\n      AC_DEFINE(ENABLE_NLS, 1,\n        [Define to 1 if translation of program messages to the user's native language\n   is requested.])\n    else\n      USE_NLS=no\n    fi\n  fi\n\n  AC_MSG_CHECKING([whether to use NLS])\n  AC_MSG_RESULT([$USE_NLS])\n  if test \"$USE_NLS\" = \"yes\"; then\n    AC_MSG_CHECKING([where the gettext function comes from])\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext_libintl\" = \"yes\"; then\n        gt_source=\"external libintl\"\n      else\n        gt_source=\"libc\"\n      fi\n    else\n      gt_source=\"included intl directory\"\n    fi\n    AC_MSG_RESULT([$gt_source])\n  fi\n\n  if test \"$USE_NLS\" = \"yes\"; then\n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext_libintl\" = \"yes\"; then\n        AC_MSG_CHECKING([how to link with libintl])\n        AC_MSG_RESULT([$LIBINTL])\n        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])\n      fi\n\n      dnl For backward compatibility. Some packages may be using this.\n      AC_DEFINE(HAVE_GETTEXT, 1,\n       [Define if the GNU gettext() function is already present or preinstalled.])\n      AC_DEFINE(HAVE_DCGETTEXT, 1,\n       [Define if the GNU dcgettext() function is already present or preinstalled.])\n    fi\n\n    dnl We need to process the po/ directory.\n    POSUB=po\n  fi\n\n  ifelse(gt_included_intl, yes, [\n    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL\n    dnl to 'yes' because some of the testsuite requires it.\n    if test \"$PACKAGE\" = gettext-runtime || test \"$PACKAGE\" = gettext-tools; then\n      BUILD_INCLUDED_LIBINTL=yes\n    fi\n\n    dnl Make all variables we use known to autoconf.\n    AC_SUBST(BUILD_INCLUDED_LIBINTL)\n    AC_SUBST(USE_INCLUDED_LIBINTL)\n    AC_SUBST(CATOBJEXT)\n\n    dnl For backward compatibility. Some configure.ins may be using this.\n    nls_cv_header_intl=\n    nls_cv_header_libgt=\n\n    dnl For backward compatibility. Some Makefiles may be using this.\n    DATADIRNAME=share\n    AC_SUBST(DATADIRNAME)\n\n    dnl For backward compatibility. Some Makefiles may be using this.\n    INSTOBJEXT=.mo\n    AC_SUBST(INSTOBJEXT)\n\n    dnl For backward compatibility. Some Makefiles may be using this.\n    GENCAT=gencat\n    AC_SUBST(GENCAT)\n\n    dnl For backward compatibility. Some Makefiles may be using this.\n    if test \"$USE_INCLUDED_LIBINTL\" = yes; then\n      INTLOBJS=\"\\$(GETTOBJS)\"\n    fi\n    AC_SUBST(INTLOBJS)\n\n    dnl Enable libtool support if the surrounding package wishes it.\n    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix\n    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)\n  ])\n\n  dnl For backward compatibility. Some Makefiles may be using this.\n  INTLLIBS=\"$LIBINTL\"\n  AC_SUBST(INTLLIBS)\n\n  dnl Make all documented variables known to autoconf.\n  AC_SUBST(LIBINTL)\n  AC_SUBST(LTLIBINTL)\n  AC_SUBST(POSUB)\n])\n\n\ndnl Checks for all prerequisites of the intl subdirectory,\ndnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,\ndnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.\nAC_DEFUN([AM_INTL_SUBDIR],\n[\n  AC_REQUIRE([AC_PROG_INSTALL])dnl\n  AC_REQUIRE([AM_MKINSTALLDIRS])dnl\n  AC_REQUIRE([AC_PROG_CC])dnl\n  AC_REQUIRE([AC_CANONICAL_HOST])dnl\n  AC_REQUIRE([AC_PROG_RANLIB])dnl\n  AC_REQUIRE([AC_ISC_POSIX])dnl\n  AC_REQUIRE([AC_HEADER_STDC])dnl\n  AC_REQUIRE([AC_C_CONST])dnl\n  AC_REQUIRE([bh_C_SIGNED])dnl\n  AC_REQUIRE([AC_C_INLINE])dnl\n  AC_REQUIRE([AC_TYPE_OFF_T])dnl\n  AC_REQUIRE([AC_TYPE_SIZE_T])dnl\n  AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl\n  AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl\n  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl\n  AC_REQUIRE([gt_TYPE_WINT_T])dnl\n  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])\n  AC_REQUIRE([jm_AC_HEADER_STDINT_H])\n  AC_REQUIRE([gt_TYPE_INTMAX_T])\n  AC_REQUIRE([gt_PRINTF_POSIX])\n  AC_REQUIRE([AC_FUNC_ALLOCA])dnl\n  AC_REQUIRE([AC_FUNC_MMAP])dnl\n  AC_REQUIRE([jm_GLIBC21])dnl\n  AC_REQUIRE([gt_INTDIV0])dnl\n  AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl\n  AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl\n  AC_REQUIRE([gt_INTTYPES_PRI])dnl\n  AC_REQUIRE([gl_XSIZE])dnl\n\n  AC_CHECK_TYPE([ptrdiff_t], ,\n    [AC_DEFINE([ptrdiff_t], [long],\n       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])\n    ])\n  AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \\\nstdlib.h string.h unistd.h sys/param.h])\n  AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \\\nmempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \\\nstrtoul tsearch wcslen __argz_count __argz_stringify __argz_next \\\n__fsetlocking])\n\n  dnl Use the _snprintf function only if it is declared (because on NetBSD it\n  dnl is defined as a weak alias of snprintf; we prefer to use the latter).\n  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])\n  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])\n\n  dnl Use the *_unlocked functions only if they are declared.\n  dnl (because some of them were defined without being declared in Solaris\n  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built\n  dnl on Solaris 2.5.1 to run on Solaris 2.6).\n  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.\n  gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])\n  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])\n  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])\n\n  case $gt_cv_func_printf_posix in\n    *yes) HAVE_POSIX_PRINTF=1 ;;\n    *) HAVE_POSIX_PRINTF=0 ;;\n  esac\n  AC_SUBST([HAVE_POSIX_PRINTF])\n  if test \"$ac_cv_func_asprintf\" = yes; then\n    HAVE_ASPRINTF=1\n  else\n    HAVE_ASPRINTF=0\n  fi\n  AC_SUBST([HAVE_ASPRINTF])\n  if test \"$ac_cv_func_snprintf\" = yes; then\n    HAVE_SNPRINTF=1\n  else\n    HAVE_SNPRINTF=0\n  fi\n  AC_SUBST([HAVE_SNPRINTF])\n  if test \"$ac_cv_func_wprintf\" = yes; then\n    HAVE_WPRINTF=1\n  else\n    HAVE_WPRINTF=0\n  fi\n  AC_SUBST([HAVE_WPRINTF])\n\n  AM_ICONV\n  AM_LANGINFO_CODESET\n  if test $ac_cv_header_locale_h = yes; then\n    AM_LC_MESSAGES\n  fi\n\n  dnl intl/plural.c is generated from intl/plural.y. It requires bison,\n  dnl because plural.y uses bison specific features. It requires at least\n  dnl bison-1.26 because earlier versions generate a plural.c that doesn't\n  dnl compile.\n  dnl bison is only needed for the maintainer (who touches plural.y). But in\n  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put\n  dnl the rule in general Makefile. Now, some people carelessly touch the\n  dnl files or have a broken \"make\" program, hence the plural.c rule will\n  dnl sometimes fire. To avoid an error, defines BISON to \":\" if it is not\n  dnl present or too old.\n  AC_CHECK_PROGS([INTLBISON], [bison])\n  if test -z \"$INTLBISON\"; then\n    ac_verc_fail=yes\n  else\n    dnl Found it, now check the version.\n    AC_MSG_CHECKING([version of bison])\nchangequote(<<,>>)dnl\n    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \\([0-9]*\\.[0-9.]*\\).*$/\\1/p'`\n    case $ac_prog_version in\n      '') ac_prog_version=\"v. ?.??, bad\"; ac_verc_fail=yes;;\n      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)\nchangequote([,])dnl\n         ac_prog_version=\"$ac_prog_version, ok\"; ac_verc_fail=no;;\n      *) ac_prog_version=\"$ac_prog_version, bad\"; ac_verc_fail=yes;;\n    esac\n    AC_MSG_RESULT([$ac_prog_version])\n  fi\n  if test $ac_verc_fail = yes; then\n    INTLBISON=:\n  fi\n])\n\n\ndnl gt_CHECK_DECL(FUNC, INCLUDES)\ndnl Check whether a function is declared.\nAC_DEFUN([gt_CHECK_DECL],\n[\n  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,\n    [AC_TRY_COMPILE([$2], [\n#ifndef $1\n  char *p = (char *) $1;\n#endif\n], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])\n  if test $ac_cv_have_decl_$1 = yes; then\n    gt_value=1\n  else\n    gt_value=0\n  fi\n  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],\n    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])\n])\n\n\ndnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])\nAC_DEFUN([AM_GNU_GETTEXT_VERSION], [])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/glibc21.m4",
    "content": "# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)\ndnl Copyright (C) 2000-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\n# Test for the GNU C Library, version 2.1 or newer.\n# From Bruno Haible.\n\nAC_DEFUN([jm_GLIBC21],\n  [\n    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,\n      ac_cv_gnu_library_2_1,\n      [AC_EGREP_CPP([Lucky GNU user],\n\t[\n#include <features.h>\n#ifdef __GNU_LIBRARY__\n #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)\n  Lucky GNU user\n #endif\n#endif\n\t],\n\tac_cv_gnu_library_2_1=yes,\n\tac_cv_gnu_library_2_1=no)\n      ]\n    )\n    AC_SUBST(GLIBC21)\n    GLIBC21=\"$ac_cv_gnu_library_2_1\"\n  ]\n)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/iconv.m4",
    "content": "# iconv.m4 serial AM4 (gettext-0.11.3)\ndnl Copyright (C) 2000-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\nAC_DEFUN([AM_ICONV_LINKFLAGS_BODY],\n[\n  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n\n  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV\n  dnl accordingly.\n  AC_LIB_LINKFLAGS_BODY([iconv])\n])\n\nAC_DEFUN([AM_ICONV_LINK],\n[\n  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and\n  dnl those with the standalone portable GNU libiconv installed).\n\n  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV\n  dnl accordingly.\n  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])\n\n  dnl Add $INCICONV to CPPFLAGS before performing the following checks,\n  dnl because if the user has installed libiconv and not disabled its use\n  dnl via --without-libiconv-prefix, he wants to use it. The first\n  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.\n  am_save_CPPFLAGS=\"$CPPFLAGS\"\n  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])\n\n  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [\n    am_cv_func_iconv=\"no, consider installing GNU libiconv\"\n    am_cv_lib_iconv=no\n    AC_TRY_LINK([#include <stdlib.h>\n#include <iconv.h>],\n      [iconv_t cd = iconv_open(\"\",\"\");\n       iconv(cd,NULL,NULL,NULL,NULL);\n       iconv_close(cd);],\n      am_cv_func_iconv=yes)\n    if test \"$am_cv_func_iconv\" != yes; then\n      am_save_LIBS=\"$LIBS\"\n      LIBS=\"$LIBS $LIBICONV\"\n      AC_TRY_LINK([#include <stdlib.h>\n#include <iconv.h>],\n        [iconv_t cd = iconv_open(\"\",\"\");\n         iconv(cd,NULL,NULL,NULL,NULL);\n         iconv_close(cd);],\n        am_cv_lib_iconv=yes\n        am_cv_func_iconv=yes)\n      LIBS=\"$am_save_LIBS\"\n    fi\n  ])\n  if test \"$am_cv_func_iconv\" = yes; then\n    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])\n  fi\n  if test \"$am_cv_lib_iconv\" = yes; then\n    AC_MSG_CHECKING([how to link with libiconv])\n    AC_MSG_RESULT([$LIBICONV])\n  else\n    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV\n    dnl either.\n    CPPFLAGS=\"$am_save_CPPFLAGS\"\n    LIBICONV=\n    LTLIBICONV=\n  fi\n  AC_SUBST(LIBICONV)\n  AC_SUBST(LTLIBICONV)\n])\n\nAC_DEFUN([AM_ICONV],\n[\n  AM_ICONV_LINK\n  if test \"$am_cv_func_iconv\" = yes; then\n    AC_MSG_CHECKING([for iconv declaration])\n    AC_CACHE_VAL(am_cv_proto_iconv, [\n      AC_TRY_COMPILE([\n#include <stdlib.h>\n#include <iconv.h>\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\n#if defined(__STDC__) || defined(__cplusplus)\nsize_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);\n#else\nsize_t iconv();\n#endif\n], [], am_cv_proto_iconv_arg1=\"\", am_cv_proto_iconv_arg1=\"const\")\n      am_cv_proto_iconv=\"extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);\"])\n    am_cv_proto_iconv=`echo \"[$]am_cv_proto_iconv\" | tr -s ' ' | sed -e 's/( /(/'`\n    AC_MSG_RESULT([$]{ac_t:-\n         }[$]am_cv_proto_iconv)\n    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,\n      [Define as const if the declaration of iconv() needs const.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/install-sh",
    "content": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2005-05-14.22\n\n# This originates from X11R5 (mit/util/scripts/install.sh), which was\n# later released in X11R6 (xc/config/util/install.sh) with the\n# following copyright and license.\n#\n# Copyright (C) 1994 X Consortium\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to\n# deal in the Software without restriction, including without limitation the\n# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n# sell copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-\n# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n#\n# Except as contained in this notice, the name of the X Consortium shall not\n# be used in advertising or otherwise to promote the sale, use or other deal-\n# ings in this Software without prior written authorization from the X Consor-\n# tium.\n#\n#\n# FSF changes to this file are in the public domain.\n#\n# Calling this script install-sh is preferred over install.sh, to prevent\n# `make' implicit rules from creating a file called install from it\n# when there is no Makefile.\n#\n# This script is compatible with the BSD install script, but was written\n# from scratch.  It can only install one file at a time, a restriction\n# shared with many OS's install programs.\n\n# set DOITPROG to echo to test this script\n\n# Don't use :- since 4.3BSD and earlier shells don't like it.\ndoit=\"${DOITPROG-}\"\n\n# put in absolute paths if you don't have them in your path; or use env. vars.\n\nmvprog=\"${MVPROG-mv}\"\ncpprog=\"${CPPROG-cp}\"\nchmodprog=\"${CHMODPROG-chmod}\"\nchownprog=\"${CHOWNPROG-chown}\"\nchgrpprog=\"${CHGRPPROG-chgrp}\"\nstripprog=\"${STRIPPROG-strip}\"\nrmprog=\"${RMPROG-rm}\"\nmkdirprog=\"${MKDIRPROG-mkdir}\"\n\nchmodcmd=\"$chmodprog 0755\"\nchowncmd=\nchgrpcmd=\nstripcmd=\nrmcmd=\"$rmprog -f\"\nmvcmd=\"$mvprog\"\nsrc=\ndst=\ndir_arg=\ndstarg=\nno_target_directory=\n\nusage=\"Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE\n   or: $0 [OPTION]... SRCFILES... DIRECTORY\n   or: $0 [OPTION]... -t DIRECTORY SRCFILES...\n   or: $0 [OPTION]... -d DIRECTORIES...\n\nIn the 1st form, copy SRCFILE to DSTFILE.\nIn the 2nd and 3rd, copy all SRCFILES to DIRECTORY.\nIn the 4th, create DIRECTORIES.\n\nOptions:\n-c         (ignored)\n-d         create directories instead of installing files.\n-g GROUP   $chgrpprog installed files to GROUP.\n-m MODE    $chmodprog installed files to MODE.\n-o USER    $chownprog installed files to USER.\n-s         $stripprog installed files.\n-t DIRECTORY  install into DIRECTORY.\n-T         report an error if DSTFILE is a directory.\n--help     display this help and exit.\n--version  display version info and exit.\n\nEnvironment variables override the default commands:\n  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG\n\"\n\nwhile test -n \"$1\"; do\n  case $1 in\n    -c) shift\n        continue;;\n\n    -d) dir_arg=true\n        shift\n        continue;;\n\n    -g) chgrpcmd=\"$chgrpprog $2\"\n        shift\n        shift\n        continue;;\n\n    --help) echo \"$usage\"; exit $?;;\n\n    -m) chmodcmd=\"$chmodprog $2\"\n        shift\n        shift\n        continue;;\n\n    -o) chowncmd=\"$chownprog $2\"\n        shift\n        shift\n        continue;;\n\n    -s) stripcmd=$stripprog\n        shift\n        continue;;\n\n    -t) dstarg=$2\n\tshift\n\tshift\n\tcontinue;;\n\n    -T) no_target_directory=true\n\tshift\n\tcontinue;;\n\n    --version) echo \"$0 $scriptversion\"; exit $?;;\n\n    *)  # When -d is used, all remaining arguments are directories to create.\n\t# When -t is used, the destination is already specified.\n\ttest -n \"$dir_arg$dstarg\" && break\n        # Otherwise, the last argument is the destination.  Remove it from $@.\n\tfor arg\n\tdo\n          if test -n \"$dstarg\"; then\n\t    # $@ is not empty: it contains at least $arg.\n\t    set fnord \"$@\" \"$dstarg\"\n\t    shift # fnord\n\t  fi\n\t  shift # arg\n\t  dstarg=$arg\n\tdone\n\tbreak;;\n  esac\ndone\n\nif test -z \"$1\"; then\n  if test -z \"$dir_arg\"; then\n    echo \"$0: no input file specified.\" >&2\n    exit 1\n  fi\n  # It's OK to call `install-sh -d' without argument.\n  # This can happen when creating conditional directories.\n  exit 0\nfi\n\nfor src\ndo\n  # Protect names starting with `-'.\n  case $src in\n    -*) src=./$src ;;\n  esac\n\n  if test -n \"$dir_arg\"; then\n    dst=$src\n    src=\n\n    if test -d \"$dst\"; then\n      mkdircmd=:\n      chmodcmd=\n    else\n      mkdircmd=$mkdirprog\n    fi\n  else\n    # Waiting for this to be detected by the \"$cpprog $src $dsttmp\" command\n    # might cause directories to be created, which would be especially bad\n    # if $src (and thus $dsttmp) contains '*'.\n    if test ! -f \"$src\" && test ! -d \"$src\"; then\n      echo \"$0: $src does not exist.\" >&2\n      exit 1\n    fi\n\n    if test -z \"$dstarg\"; then\n      echo \"$0: no destination specified.\" >&2\n      exit 1\n    fi\n\n    dst=$dstarg\n    # Protect names starting with `-'.\n    case $dst in\n      -*) dst=./$dst ;;\n    esac\n\n    # If destination is a directory, append the input filename; won't work\n    # if double slashes aren't ignored.\n    if test -d \"$dst\"; then\n      if test -n \"$no_target_directory\"; then\n\techo \"$0: $dstarg: Is a directory\" >&2\n\texit 1\n      fi\n      dst=$dst/`basename \"$src\"`\n    fi\n  fi\n\n  # This sed command emulates the dirname command.\n  dstdir=`echo \"$dst\" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`\n\n  # Make sure that the destination directory exists.\n\n  # Skip lots of stat calls in the usual case.\n  if test ! -d \"$dstdir\"; then\n    defaultIFS='\n\t '\n    IFS=\"${IFS-$defaultIFS}\"\n\n    oIFS=$IFS\n    # Some sh's can't handle IFS=/ for some reason.\n    IFS='%'\n    set x `echo \"$dstdir\" | sed -e 's@/@%@g' -e 's@^%@/@'`\n    shift\n    IFS=$oIFS\n\n    pathcomp=\n\n    while test $# -ne 0 ; do\n      pathcomp=$pathcomp$1\n      shift\n      if test ! -d \"$pathcomp\"; then\n        $mkdirprog \"$pathcomp\"\n\t# mkdir can fail with a `File exist' error in case several\n\t# install-sh are creating the directory concurrently.  This\n\t# is OK.\n\ttest -d \"$pathcomp\" || exit\n      fi\n      pathcomp=$pathcomp/\n    done\n  fi\n\n  if test -n \"$dir_arg\"; then\n    $doit $mkdircmd \"$dst\" \\\n      && { test -z \"$chowncmd\" || $doit $chowncmd \"$dst\"; } \\\n      && { test -z \"$chgrpcmd\" || $doit $chgrpcmd \"$dst\"; } \\\n      && { test -z \"$stripcmd\" || $doit $stripcmd \"$dst\"; } \\\n      && { test -z \"$chmodcmd\" || $doit $chmodcmd \"$dst\"; }\n\n  else\n    dstfile=`basename \"$dst\"`\n\n    # Make a couple of temp file names in the proper directory.\n    dsttmp=$dstdir/_inst.$$_\n    rmtmp=$dstdir/_rm.$$_\n\n    # Trap to clean up those temp files at exit.\n    trap 'ret=$?; rm -f \"$dsttmp\" \"$rmtmp\" && exit $ret' 0\n    trap '(exit $?); exit' 1 2 13 15\n\n    # Copy the file name to the temp name.\n    $doit $cpprog \"$src\" \"$dsttmp\" &&\n\n    # and set any options; do chmod last to preserve setuid bits.\n    #\n    # If any of these fail, we abort the whole thing.  If we want to\n    # ignore errors from any of these, just make sure not to ignore\n    # errors from the above \"$doit $cpprog $src $dsttmp\" command.\n    #\n    { test -z \"$chowncmd\" || $doit $chowncmd \"$dsttmp\"; } \\\n      && { test -z \"$chgrpcmd\" || $doit $chgrpcmd \"$dsttmp\"; } \\\n      && { test -z \"$stripcmd\" || $doit $stripcmd \"$dsttmp\"; } \\\n      && { test -z \"$chmodcmd\" || $doit $chmodcmd \"$dsttmp\"; } &&\n\n    # Now rename the file to the real destination.\n    { $doit $mvcmd -f \"$dsttmp\" \"$dstdir/$dstfile\" 2>/dev/null \\\n      || {\n\t   # The rename failed, perhaps because mv can't rename something else\n\t   # to itself, or perhaps because mv is so ancient that it does not\n\t   # support -f.\n\n\t   # Now remove or move aside any old file at destination location.\n\t   # We try this two ways since rm can't unlink itself on some\n\t   # systems and the destination file might be busy for other\n\t   # reasons.  In this case, the final cleanup might fail but the new\n\t   # file should still install successfully.\n\t   {\n\t     if test -f \"$dstdir/$dstfile\"; then\n\t       $doit $rmcmd -f \"$dstdir/$dstfile\" 2>/dev/null \\\n\t       || $doit $mvcmd -f \"$dstdir/$dstfile\" \"$rmtmp\" 2>/dev/null \\\n\t       || {\n\t\t echo \"$0: cannot unlink or rename $dstdir/$dstfile\" >&2\n\t\t (exit 1); exit 1\n\t       }\n\t     else\n\t       :\n\t     fi\n\t   } &&\n\n\t   # Now rename the file to the real destination.\n\t   $doit $mvcmd \"$dsttmp\" \"$dstdir/$dstfile\"\n\t }\n    }\n  fi || { (exit 1); exit 1; }\ndone\n\n# The final little trick to \"correctly\" pass the exit status to the exit trap.\n{\n  (exit 0); exit 0\n}\n\n# Local variables:\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"scriptversion=\"\n# time-stamp-format: \"%:y-%02m-%02d.%02H\"\n# time-stamp-end: \"$\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/intdiv0.m4",
    "content": "# intdiv0.m4 serial 1 (gettext-0.11.3)\ndnl Copyright (C) 2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\nAC_DEFUN([gt_INTDIV0],\n[\n  AC_REQUIRE([AC_PROG_CC])dnl\n  AC_REQUIRE([AC_CANONICAL_HOST])dnl\n\n  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],\n    gt_cv_int_divbyzero_sigfpe,\n    [\n      AC_TRY_RUN([\n#include <stdlib.h>\n#include <signal.h>\n\nstatic void\n#ifdef __cplusplus\nsigfpe_handler (int sig)\n#else\nsigfpe_handler (sig) int sig;\n#endif\n{\n  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */\n  exit (sig != SIGFPE);\n}\n\nint x = 1;\nint y = 0;\nint z;\nint nan;\n\nint main ()\n{\n  signal (SIGFPE, sigfpe_handler);\n/* IRIX and AIX (when \"xlc -qcheck\" is used) yield signal SIGTRAP.  */\n#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)\n  signal (SIGTRAP, sigfpe_handler);\n#endif\n/* Linux/SPARC yields signal SIGILL.  */\n#if defined (__sparc__) && defined (__linux__)\n  signal (SIGILL, sigfpe_handler);\n#endif\n\n  z = x / y;\n  nan = y / y;\n  exit (1);\n}\n], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,\n        [\n          # Guess based on the CPU.\n          case \"$host_cpu\" in\n            alpha* | i[34567]86 | m68k | s390*)\n              gt_cv_int_divbyzero_sigfpe=\"guessing yes\";;\n            *)\n              gt_cv_int_divbyzero_sigfpe=\"guessing no\";;\n          esac\n        ])\n    ])\n  case \"$gt_cv_int_divbyzero_sigfpe\" in\n    *yes) value=1;;\n    *) value=0;;\n  esac\n  AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,\n    [Define if integer division by zero raises signal SIGFPE.])\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/intmax.m4",
    "content": "# intmax.m4 serial 1 (gettext-0.12)\ndnl Copyright (C) 2002-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\ndnl Test whether the system has the 'intmax_t' type, but don't attempt to\ndnl find a replacement if it is lacking.\n\nAC_DEFUN([gt_TYPE_INTMAX_T],\n[\n  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])\n  AC_REQUIRE([jm_AC_HEADER_STDINT_H])\n  AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,\n    [AC_TRY_COMPILE([\n#include <stddef.h> \n#include <stdlib.h>\n#if HAVE_STDINT_H_WITH_UINTMAX\n#include <stdint.h>\n#endif\n#if HAVE_INTTYPES_H_WITH_UINTMAX\n#include <inttypes.h>\n#endif\n], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])\n  if test $gt_cv_c_intmax_t = yes; then\n    AC_DEFINE(HAVE_INTMAX_T, 1,\n      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/inttypes-pri.m4",
    "content": "# inttypes-pri.m4 serial 1 (gettext-0.11.4)\ndnl Copyright (C) 1997-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\n# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*\n# macros to non-string values.  This is the case on AIX 4.3.3.\n\nAC_DEFUN([gt_INTTYPES_PRI],\n[\n  AC_REQUIRE([gt_HEADER_INTTYPES_H])\n  if test $gt_cv_header_inttypes_h = yes; then\n    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],\n      gt_cv_inttypes_pri_broken,\n      [\n        AC_TRY_COMPILE([#include <inttypes.h>\n#ifdef PRId32\nchar *p = PRId32;\n#endif\n], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)\n      ])\n  fi\n  if test \"$gt_cv_inttypes_pri_broken\" = yes; then\n    AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,\n      [Define if <inttypes.h> exists and defines unusable PRI* macros.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/inttypes.m4",
    "content": "# inttypes.m4 serial 1 (gettext-0.11.4)\ndnl Copyright (C) 1997-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\n# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with\n# <sys/types.h>.\n\nAC_DEFUN([gt_HEADER_INTTYPES_H],\n[\n  AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,\n  [\n    AC_TRY_COMPILE(\n      [#include <sys/types.h>\n#include <inttypes.h>],\n      [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)\n  ])\n  if test $gt_cv_header_inttypes_h = yes; then\n    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,\n      [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/inttypes_h.m4",
    "content": "# inttypes_h.m4 serial 5 (gettext-0.12)\ndnl Copyright (C) 1997-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\n# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,\n# doesn't clash with <sys/types.h>, and declares uintmax_t.\n\nAC_DEFUN([jm_AC_HEADER_INTTYPES_H],\n[\n  AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,\n  [AC_TRY_COMPILE(\n    [#include <sys/types.h>\n#include <inttypes.h>],\n    [uintmax_t i = (uintmax_t) -1;],\n    jm_ac_cv_header_inttypes_h=yes,\n    jm_ac_cv_header_inttypes_h=no)])\n  if test $jm_ac_cv_header_inttypes_h = yes; then\n    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,\n      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,\n       and declares uintmax_t. ])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/isc-posix.m4",
    "content": "# isc-posix.m4 serial 2 (gettext-0.11.2)\ndnl Copyright (C) 1995-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\n# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.\n\n# This test replaces the one in autoconf.\n# Currently this macro should have the same name as the autoconf macro\n# because gettext's gettext.m4 (distributed in the automake package)\n# still uses it.  Otherwise, the use in gettext.m4 makes autoheader\n# give these diagnostics:\n#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX\n#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX\n\nundefine([AC_ISC_POSIX])\n\nAC_DEFUN([AC_ISC_POSIX],\n  [\n    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.\n    AC_CHECK_LIB(cposix, strerror, [LIBS=\"$LIBS -lcposix\"])\n  ]\n)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/lcmessage.m4",
    "content": "# lcmessage.m4 serial 3 (gettext-0.11.3)\ndnl Copyright (C) 1995-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\ndnl\ndnl This file can can be used in projects which are not available under\ndnl the GNU General Public License or the GNU Library General Public\ndnl License but which still want to provide support for the GNU gettext\ndnl functionality.\ndnl Please note that the actual code of the GNU gettext library is covered\ndnl by the GNU Library General Public License, and the rest of the GNU\ndnl gettext package package is covered by the GNU General Public License.\ndnl They are *not* in the public domain.\n\ndnl Authors:\ndnl   Ulrich Drepper <drepper@cygnus.com>, 1995.\n\n# Check whether LC_MESSAGES is available in <locale.h>.\n\nAC_DEFUN([AM_LC_MESSAGES],\n[\n  AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,\n    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],\n       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])\n  if test $am_cv_val_LC_MESSAGES = yes; then\n    AC_DEFINE(HAVE_LC_MESSAGES, 1,\n      [Define if your <locale.h> file defines LC_MESSAGES.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/lib-ld.m4",
    "content": "# lib-ld.m4 serial 3 (gettext-0.13)\ndnl Copyright (C) 1996-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl Subroutines of libtool.m4,\ndnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision\ndnl with libtool.m4.\n\ndnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.\nAC_DEFUN([AC_LIB_PROG_LD_GNU],\n[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU ld's only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  acl_cv_prog_gnu_ld=yes ;;\n*)\n  acl_cv_prog_gnu_ld=no ;;\nesac])\nwith_gnu_ld=$acl_cv_prog_gnu_ld\n])\n\ndnl From libtool-1.4. Sets the variable LD.\nAC_DEFUN([AC_LIB_PROG_LD],\n[AC_ARG_WITH(gnu-ld,\n[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],\ntest \"$withval\" = no || with_gnu_ld=yes, with_gnu_ld=no)\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  AC_MSG_CHECKING([for ld used by GCC])\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [[\\\\/]* | [A-Za-z]:[\\\\/]*)]\n      [re_direlt='/[^/][^/]*/\\.\\./']\n      # Canonicalize the path of ld\n      ac_prog=`echo $ac_prog| sed 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| sed \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  AC_MSG_CHECKING([for GNU ld])\nelse\n  AC_MSG_CHECKING([for non-GNU ld])\nfi\nAC_CACHE_VAL(acl_cv_path_LD,\n[if test -z \"$LD\"; then\n  IFS=\"${IFS= \t}\"; ac_save_ifs=\"$IFS\"; IFS=\"${IFS}${PATH_SEPARATOR-:}\"\n  for ac_dir in $PATH; do\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      acl_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some GNU ld's only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$acl_cv_path_LD\" -v 2>&1 < /dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break ;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break ;;\n      esac\n    fi\n  done\n  IFS=\"$ac_save_ifs\"\nelse\n  acl_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$acl_cv_path_LD\"\nif test -n \"$LD\"; then\n  AC_MSG_RESULT($LD)\nelse\n  AC_MSG_RESULT(no)\nfi\ntest -z \"$LD\" && AC_MSG_ERROR([no acceptable ld found in \\$PATH])\nAC_LIB_PROG_LD_GNU\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/lib-link.m4",
    "content": "# lib-link.m4 serial 4 (gettext-0.12)\ndnl Copyright (C) 2001-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\ndnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and\ndnl the libraries corresponding to explicit and implicit dependencies.\ndnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and\ndnl augments the CPPFLAGS variable.\nAC_DEFUN([AC_LIB_LINKFLAGS],\n[\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n  define([Name],[translit([$1],[./-], [___])])\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [\n    AC_LIB_LINKFLAGS_BODY([$1], [$2])\n    ac_cv_lib[]Name[]_libs=\"$LIB[]NAME\"\n    ac_cv_lib[]Name[]_ltlibs=\"$LTLIB[]NAME\"\n    ac_cv_lib[]Name[]_cppflags=\"$INC[]NAME\"\n  ])\n  LIB[]NAME=\"$ac_cv_lib[]Name[]_libs\"\n  LTLIB[]NAME=\"$ac_cv_lib[]Name[]_ltlibs\"\n  INC[]NAME=\"$ac_cv_lib[]Name[]_cppflags\"\n  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)\n  AC_SUBST([LIB]NAME)\n  AC_SUBST([LTLIB]NAME)\n  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the\n  dnl results of this search when this library appears as a dependency.\n  HAVE_LIB[]NAME=yes\n  undefine([Name])\n  undefine([NAME])\n])\n\ndnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)\ndnl searches for libname and the libraries corresponding to explicit and\ndnl implicit dependencies, together with the specified include files and\ndnl the ability to compile and link the specified testcode. If found, it\ndnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and\ndnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and\ndnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs\ndnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.\nAC_DEFUN([AC_LIB_HAVE_LINKFLAGS],\n[\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n  define([Name],[translit([$1],[./-], [___])])\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n\n  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME\n  dnl accordingly.\n  AC_LIB_LINKFLAGS_BODY([$1], [$2])\n\n  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,\n  dnl because if the user has installed lib[]Name and not disabled its use\n  dnl via --without-lib[]Name-prefix, he wants to use it.\n  ac_save_CPPFLAGS=\"$CPPFLAGS\"\n  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)\n\n  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [\n    ac_save_LIBS=\"$LIBS\"\n    LIBS=\"$LIBS $LIB[]NAME\"\n    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])\n    LIBS=\"$ac_save_LIBS\"\n  ])\n  if test \"$ac_cv_lib[]Name\" = yes; then\n    HAVE_LIB[]NAME=yes\n    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])\n    AC_MSG_CHECKING([how to link with lib[]$1])\n    AC_MSG_RESULT([$LIB[]NAME])\n  else\n    HAVE_LIB[]NAME=no\n    dnl If $LIB[]NAME didn't lead to a usable library, we don't need\n    dnl $INC[]NAME either.\n    CPPFLAGS=\"$ac_save_CPPFLAGS\"\n    LIB[]NAME=\n    LTLIB[]NAME=\n  fi\n  AC_SUBST([HAVE_LIB]NAME)\n  AC_SUBST([LIB]NAME)\n  AC_SUBST([LTLIB]NAME)\n  undefine([Name])\n  undefine([NAME])\n])\n\ndnl Determine the platform dependent parameters needed to use rpath:\ndnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,\ndnl hardcode_direct, hardcode_minus_L.\nAC_DEFUN([AC_LIB_RPATH],\n[\n  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS\n  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld\n  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host\n  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir\n  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [\n    CC=\"$CC\" GCC=\"$GCC\" LDFLAGS=\"$LDFLAGS\" LD=\"$LD\" with_gnu_ld=\"$with_gnu_ld\" \\\n    ${CONFIG_SHELL-/bin/sh} \"$ac_aux_dir/config.rpath\" \"$host\" > conftest.sh\n    . ./conftest.sh\n    rm -f ./conftest.sh\n    acl_cv_rpath=done\n  ])\n  wl=\"$acl_cv_wl\"\n  libext=\"$acl_cv_libext\"\n  shlibext=\"$acl_cv_shlibext\"\n  hardcode_libdir_flag_spec=\"$acl_cv_hardcode_libdir_flag_spec\"\n  hardcode_libdir_separator=\"$acl_cv_hardcode_libdir_separator\"\n  hardcode_direct=\"$acl_cv_hardcode_direct\"\n  hardcode_minus_L=\"$acl_cv_hardcode_minus_L\"\n  dnl Determine whether the user wants rpath handling at all.\n  AC_ARG_ENABLE(rpath,\n    [  --disable-rpath         do not hardcode runtime library paths],\n    :, enable_rpath=yes)\n])\n\ndnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and\ndnl the libraries corresponding to explicit and implicit dependencies.\ndnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.\nAC_DEFUN([AC_LIB_LINKFLAGS_BODY],\n[\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n  dnl By default, look in $includedir and $libdir.\n  use_additional=yes\n  AC_LIB_WITH_FINAL_PREFIX([\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  ])\n  AC_LIB_ARG_WITH([lib$1-prefix],\n[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib\n  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],\n[\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        AC_LIB_WITH_FINAL_PREFIX([\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        ])\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n])\n  dnl Search the library and its dependencies in $additional_libdir and\n  dnl $LDFLAGS. Using breadth-first-seach.\n  LIB[]NAME=\n  LTLIB[]NAME=\n  INC[]NAME=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='$1 $2'\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS\n        dnl or AC_LIB_HAVE_LINKFLAGS call.\n        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }$value\"\n          else\n            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined\n            dnl that this library doesn't exist. So just drop it.\n            :\n          fi\n        else\n          dnl Search the library lib$name in $additional_libdir and $LDFLAGS\n          dnl and the already constructed $LIBNAME/$LTLIBNAME.\n          found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIB[]NAME; do\n              AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n            dnl Found the library.\n            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n              dnl Linking with a shared library. We attempt to hardcode its\n              dnl directory into the executable's runpath, unless it's the\n              dnl standard /usr/lib.\n              if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                dnl No hardcoding is needed.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n              else\n                dnl Use an explicit option to hardcode DIR into the resulting\n                dnl binary.\n                dnl Potentially add DIR to ltrpathdirs.\n                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.\n                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                dnl The hardcoding into $LIBNAME is system dependent.\n                if test \"$hardcode_direct\" = yes; then\n                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the\n                  dnl resulting binary.\n                  LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                    dnl Use an explicit option to hardcode DIR into the resulting\n                    dnl binary.\n                    LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                    dnl Potentially add DIR to rpathdirs.\n                    dnl The rpathdirs will be appended to $LIBNAME at the end.\n                    haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                    dnl Rely on \"-L$found_dir\".\n                    dnl But don't add it if it's already contained in the LDFLAGS\n                    dnl or the already constructed $LIBNAME\n                    haveit=\n                    for x in $LDFLAGS $LIB[]NAME; do\n                      AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                      dnl FIXME: Not sure whether we should use\n                      dnl \"-L$found_dir -l$name\" or \"-L$found_dir $found_so\"\n                      dnl here.\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                    else\n                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH\n                      dnl here, because this doesn't fit in flags passed to the\n                      dnl compiler. So give up. No hardcoding. This affects only\n                      dnl very old systems.\n                      dnl FIXME: Not sure whether we should use\n                      dnl \"-L$found_dir -l$name\" or \"-L$found_dir $found_so\"\n                      dnl here.\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                dnl Linking with a static library.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_a\"\n              else\n                dnl We shouldn't come here, but anyway it's good to have a\n                dnl fallback.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name\"\n              fi\n            fi\n            dnl Assume the include files are nearby.\n            additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n              dnl Potentially add $additional_includedir to $INCNAME.\n              dnl But don't add it\n              dnl   1. if it's the standard /usr/include,\n              dnl   2. if it's /usr/local/include and we are using GCC on Linux,\n              dnl   3. if it's already present in $CPPFLAGS or the already\n              dnl      constructed $INCNAME,\n              dnl   4. if it doesn't exist as a directory.\n              if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux*) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INC[]NAME; do\n                    AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                      dnl Really add $additional_includedir to $INCNAME.\n                      INC[]NAME=\"${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n            dnl Look for dependencies.\n            if test -n \"$found_la\"; then\n              dnl Read the .la file. It defines the variables\n              dnl dlname, library_names, old_library, dependency_libs, current,\n              dnl age, revision, installed, dlopen, dlpreopen, libdir.\n              save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n              dnl We use only dependency_libs.\n              for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.\n                    dnl But don't add it\n                    dnl   1. if it's the standard /usr/lib,\n                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,\n                    dnl   3. if it's already present in $LDFLAGS or the already\n                    dnl      constructed $LIBNAME,\n                    dnl   4. if it doesn't exist as a directory.\n                    if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux*) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIB[]NAME; do\n                          AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                            dnl Really add $additional_libdir to $LIBNAME.\n                            LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIB[]NAME; do\n                          AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                            dnl Really add $additional_libdir to $LTLIBNAME.\n                            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                      dnl Potentially add DIR to rpathdirs.\n                      dnl The rpathdirs will be appended to $LIBNAME at the end.\n                      haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                      dnl Potentially add DIR to ltrpathdirs.\n                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.\n                      haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                    dnl Handle this in the next round.\n                    names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                    dnl Handle this in the next round. Throw away the .la's\n                    dnl directory; it is already contained in a preceding -L\n                    dnl option.\n                    names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                    dnl Most likely an immediate library name.\n                    LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$dep\"\n                    LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n            dnl Didn't find the library; assume it is in the system directories\n            dnl known to the linker and runtime loader. (All the system\n            dnl directories known to the linker should also be known to the\n            dnl runtime loader, otherwise the system is severely misconfigured.)\n            LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-l$name\"\n            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n      dnl Weird platform: only the last -rpath option counts, the user must\n      dnl pass all path elements in one option. We can arrange that for a\n      dnl single library, but not when more than one $LIBNAMEs are used.\n      alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.\n      acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$flag\"\n    else\n      dnl The -rpath options are cumulative.\n      for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n    dnl When using libtool, the option that works for both libraries and\n    dnl executables is -R. The -R options are cumulative.\n    for found_dir in $ltrpathdirs; do\n      LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir\"\n    done\n  fi\n])\n\ndnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,\ndnl unless already present in VAR.\ndnl Works only for CPPFLAGS, not for LIB* variables because that sometimes\ndnl contains two or three consecutive elements that belong together.\nAC_DEFUN([AC_LIB_APPENDTOVAR],\n[\n  for element in [$2]; do\n    haveit=\n    for x in $[$1]; do\n      AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      [$1]=\"${[$1]}${[$1]:+ }$element\"\n    fi\n  done\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/lib-prefix.m4",
    "content": "# lib-prefix.m4 serial 3 (gettext-0.13)\ndnl Copyright (C) 2001-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\ndnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and\ndnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't\ndnl require excessive bracketing.\nifdef([AC_HELP_STRING],\n[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],\n[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])\n\ndnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed\ndnl to access previously installed libraries. The basic assumption is that\ndnl a user will want packages to use other packages he previously installed\ndnl with the same --prefix option.\ndnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate\ndnl libraries, but is otherwise very convenient.\nAC_DEFUN([AC_LIB_PREFIX],\n[\n  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])\n  AC_REQUIRE([AC_PROG_CC])\n  AC_REQUIRE([AC_CANONICAL_HOST])\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  dnl By default, look in $includedir and $libdir.\n  use_additional=yes\n  AC_LIB_WITH_FINAL_PREFIX([\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  ])\n  AC_LIB_ARG_WITH([lib-prefix],\n[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib\n  --without-lib-prefix    don't search for libraries in includedir and libdir],\n[\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        AC_LIB_WITH_FINAL_PREFIX([\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        ])\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n])\n  if test $use_additional = yes; then\n    dnl Potentially add $additional_includedir to $CPPFLAGS.\n    dnl But don't add it\n    dnl   1. if it's the standard /usr/include,\n    dnl   2. if it's already present in $CPPFLAGS,\n    dnl   3. if it's /usr/local/include and we are using GCC on Linux,\n    dnl   4. if it doesn't exist as a directory.\n    if test \"X$additional_includedir\" != \"X/usr/include\"; then\n      haveit=\n      for x in $CPPFLAGS; do\n        AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n        if test \"X$x\" = \"X-I$additional_includedir\"; then\n          haveit=yes\n          break\n        fi\n      done\n      if test -z \"$haveit\"; then\n        if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n          if test -n \"$GCC\"; then\n            case $host_os in\n              linux*) haveit=yes;;\n            esac\n          fi\n        fi\n        if test -z \"$haveit\"; then\n          if test -d \"$additional_includedir\"; then\n            dnl Really add $additional_includedir to $CPPFLAGS.\n            CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir\"\n          fi\n        fi\n      fi\n    fi\n    dnl Potentially add $additional_libdir to $LDFLAGS.\n    dnl But don't add it\n    dnl   1. if it's the standard /usr/lib,\n    dnl   2. if it's already present in $LDFLAGS,\n    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,\n    dnl   4. if it doesn't exist as a directory.\n    if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n      haveit=\n      for x in $LDFLAGS; do\n        AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n        if test \"X$x\" = \"X-L$additional_libdir\"; then\n          haveit=yes\n          break\n        fi\n      done\n      if test -z \"$haveit\"; then\n        if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n          if test -n \"$GCC\"; then\n            case $host_os in\n              linux*) haveit=yes;;\n            esac\n          fi\n        fi\n        if test -z \"$haveit\"; then\n          if test -d \"$additional_libdir\"; then\n            dnl Really add $additional_libdir to $LDFLAGS.\n            LDFLAGS=\"${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir\"\n          fi\n        fi\n      fi\n    fi\n  fi\n])\n\ndnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,\ndnl acl_final_exec_prefix, containing the values to which $prefix and\ndnl $exec_prefix will expand at the end of the configure script.\nAC_DEFUN([AC_LIB_PREPARE_PREFIX],\n[\n  dnl Unfortunately, prefix and exec_prefix get only finally determined\n  dnl at the end of configure.\n  if test \"X$prefix\" = \"XNONE\"; then\n    acl_final_prefix=\"$ac_default_prefix\"\n  else\n    acl_final_prefix=\"$prefix\"\n  fi\n  if test \"X$exec_prefix\" = \"XNONE\"; then\n    acl_final_exec_prefix='${prefix}'\n  else\n    acl_final_exec_prefix=\"$exec_prefix\"\n  fi\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  eval acl_final_exec_prefix=\\\"$acl_final_exec_prefix\\\"\n  prefix=\"$acl_save_prefix\"\n])\n\ndnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the\ndnl variables prefix and exec_prefix bound to the values they will have\ndnl at the end of the configure script.\nAC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],\n[\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  $1\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/longdouble.m4",
    "content": "# longdouble.m4 serial 1 (gettext-0.12)\ndnl Copyright (C) 2002-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\ndnl Test whether the compiler supports the 'long double' type.\ndnl Prerequisite: AC_PROG_CC\n\nAC_DEFUN([gt_TYPE_LONGDOUBLE],\n[\n  AC_CACHE_CHECK([for long double], gt_cv_c_long_double,\n    [if test \"$GCC\" = yes; then\n       gt_cv_c_long_double=yes\n     else\n       AC_TRY_COMPILE([\n         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */\n         long double foo = 0.0;\n         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */\n         int array [2*(sizeof(long double) >= sizeof(double)) - 1];\n         ], ,\n         gt_cv_c_long_double=yes, gt_cv_c_long_double=no)\n     fi])\n  if test $gt_cv_c_long_double = yes; then\n    AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/longlong.m4",
    "content": "# longlong.m4 serial 4\ndnl Copyright (C) 1999-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\n# Define HAVE_LONG_LONG if 'long long' works.\n\nAC_DEFUN([jm_AC_TYPE_LONG_LONG],\n[\n  AC_CACHE_CHECK([for long long], ac_cv_type_long_long,\n  [AC_TRY_LINK([long long ll = 1LL; int i = 63;],\n    [long long llmax = (long long) -1;\n     return ll << i | ll >> i | llmax / ll | llmax % ll;],\n    ac_cv_type_long_long=yes,\n    ac_cv_type_long_long=no)])\n  if test $ac_cv_type_long_long = yes; then\n    AC_DEFINE(HAVE_LONG_LONG, 1,\n      [Define if you have the 'long long' type.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/mdate-sh",
    "content": "#!/bin/sh\n# Get modification time of a file or directory and pretty-print it.\n\nscriptversion=2005-06-29.22\n\n# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software\n# Foundation, Inc.\n# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995\n#\n# This program 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, or (at your option)\n# any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software Foundation,\n# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n# This file is maintained in Automake, please report\n# bugs to <bug-automake@gnu.org> or send patches to\n# <automake-patches@gnu.org>.\n\ncase $1 in\n  '')\n     echo \"$0: No file.  Try \\`$0 --help' for more information.\" 1>&2\n     exit 1;\n     ;;\n  -h | --h*)\n    cat <<\\EOF\nUsage: mdate-sh [--help] [--version] FILE\n\nPretty-print the modification time of FILE.\n\nReport bugs to <bug-automake@gnu.org>.\nEOF\n    exit $?\n    ;;\n  -v | --v*)\n    echo \"mdate-sh $scriptversion\"\n    exit $?\n    ;;\nesac\n\n# Prevent date giving response in another language.\nLANG=C\nexport LANG\nLC_ALL=C\nexport LC_ALL\nLC_TIME=C\nexport LC_TIME\n\n# GNU ls changes its time format in response to the TIME_STYLE\n# variable.  Since we cannot assume `unset' works, revert this\n# variable to its documented default.\nif test \"${TIME_STYLE+set}\" = set; then\n  TIME_STYLE=posix-long-iso\n  export TIME_STYLE\nfi\n\nsave_arg1=$1\n\n# Find out how to get the extended ls output of a file or directory.\nif ls -L /dev/null 1>/dev/null 2>&1; then\n  ls_command='ls -L -l -d'\nelse\n  ls_command='ls -l -d'\nfi\n\n# A `ls -l' line looks as follows on OS/2.\n#  drwxrwx---        0 Aug 11  2001 foo\n# This differs from Unix, which adds ownership information.\n#  drwxrwx---   2 root  root      4096 Aug 11  2001 foo\n#\n# To find the date, we split the line on spaces and iterate on words\n# until we find a month.  This cannot work with files whose owner is a\n# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'\n# will be owned by a user whose name is a month.  So we first look at\n# the extended ls output of the root directory to decide how many\n# words should be skipped to get the date.\n\n# On HPUX /bin/sh, \"set\" interprets \"-rw-r--r--\" as options, so the \"x\" below.\nset x`ls -l -d /`\n\n# Find which argument is the month.\nmonth=\ncommand=\nuntil test $month\ndo\n  shift\n  # Add another shift to the command.\n  command=\"$command shift;\"\n  case $1 in\n    Jan) month=January; nummonth=1;;\n    Feb) month=February; nummonth=2;;\n    Mar) month=March; nummonth=3;;\n    Apr) month=April; nummonth=4;;\n    May) month=May; nummonth=5;;\n    Jun) month=June; nummonth=6;;\n    Jul) month=July; nummonth=7;;\n    Aug) month=August; nummonth=8;;\n    Sep) month=September; nummonth=9;;\n    Oct) month=October; nummonth=10;;\n    Nov) month=November; nummonth=11;;\n    Dec) month=December; nummonth=12;;\n  esac\ndone\n\n# Get the extended ls output of the file or directory.\nset dummy x`eval \"$ls_command \\\"\\$save_arg1\\\"\"`\n\n# Remove all preceding arguments\neval $command\n\n# Because of the dummy argument above, month is in $2.\n#\n# On a POSIX system, we should have\n#\n# $# = 5\n# $1 = file size\n# $2 = month\n# $3 = day\n# $4 = year or time\n# $5 = filename\n#\n# On Darwin 7.7.0 and 7.6.0, we have\n#\n# $# = 4\n# $1 = day\n# $2 = month\n# $3 = year or time\n# $4 = filename\n\n# Get the month.\ncase $2 in\n  Jan) month=January; nummonth=1;;\n  Feb) month=February; nummonth=2;;\n  Mar) month=March; nummonth=3;;\n  Apr) month=April; nummonth=4;;\n  May) month=May; nummonth=5;;\n  Jun) month=June; nummonth=6;;\n  Jul) month=July; nummonth=7;;\n  Aug) month=August; nummonth=8;;\n  Sep) month=September; nummonth=9;;\n  Oct) month=October; nummonth=10;;\n  Nov) month=November; nummonth=11;;\n  Dec) month=December; nummonth=12;;\nesac\n\ncase $3 in\n  ???*) day=$1;;\n  *) day=$3; shift;;\nesac\n\n# Here we have to deal with the problem that the ls output gives either\n# the time of day or the year.\ncase $3 in\n  *:*) set `date`; eval year=\\$$#\n       case $2 in\n\t Jan) nummonthtod=1;;\n\t Feb) nummonthtod=2;;\n\t Mar) nummonthtod=3;;\n\t Apr) nummonthtod=4;;\n\t May) nummonthtod=5;;\n\t Jun) nummonthtod=6;;\n\t Jul) nummonthtod=7;;\n\t Aug) nummonthtod=8;;\n\t Sep) nummonthtod=9;;\n\t Oct) nummonthtod=10;;\n\t Nov) nummonthtod=11;;\n\t Dec) nummonthtod=12;;\n       esac\n       # For the first six month of the year the time notation can also\n       # be used for files modified in the last year.\n       if (expr $nummonth \\> $nummonthtod) > /dev/null;\n       then\n\t year=`expr $year - 1`\n       fi;;\n  *) year=$3;;\nesac\n\n# The result.\necho $day $month $year\n\n# Local Variables:\n# mode: shell-script\n# sh-indentation: 2\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"scriptversion=\"\n# time-stamp-format: \"%:y-%02m-%02d.%02H\"\n# time-stamp-end: \"$\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/missing",
    "content": "#! /bin/sh\n# Common stub for a few missing GNU programs while installing.\n\nscriptversion=2005-06-08.21\n\n# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005\n#   Free Software Foundation, Inc.\n# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.\n\n# This program 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, or (at your option)\n# any later version.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n# 02110-1301, USA.\n\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\nif test $# -eq 0; then\n  echo 1>&2 \"Try \\`$0 --help' for more information\"\n  exit 1\nfi\n\nrun=:\n\n# In the cases where this matters, `missing' is being run in the\n# srcdir already.\nif test -f configure.ac; then\n  configure_ac=configure.ac\nelse\n  configure_ac=configure.in\nfi\n\nmsg=\"missing on your system\"\n\ncase \"$1\" in\n--run)\n  # Try to run requested program, and just exit if it succeeds.\n  run=\n  shift\n  \"$@\" && exit 0\n  # Exit code 63 means version mismatch.  This often happens\n  # when the user try to use an ancient version of a tool on\n  # a file that requires a minimum version.  In this case we\n  # we should proceed has if the program had been absent, or\n  # if --run hadn't been passed.\n  if test $? = 63; then\n    run=:\n    msg=\"probably too old\"\n  fi\n  ;;\n\n  -h|--h|--he|--hel|--help)\n    echo \"\\\n$0 [OPTION]... PROGRAM [ARGUMENT]...\n\nHandle \\`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an\nerror status if there is no known handling for PROGRAM.\n\nOptions:\n  -h, --help      display this help and exit\n  -v, --version   output version information and exit\n  --run           try to run the given command, and emulate it if it fails\n\nSupported PROGRAM values:\n  aclocal      touch file \\`aclocal.m4'\n  autoconf     touch file \\`configure'\n  autoheader   touch file \\`config.h.in'\n  automake     touch all \\`Makefile.in' files\n  bison        create \\`y.tab.[ch]', if possible, from existing .[ch]\n  flex         create \\`lex.yy.c', if possible, from existing .c\n  help2man     touch the output file\n  lex          create \\`lex.yy.c', if possible, from existing .c\n  makeinfo     touch the output file\n  tar          try tar, gnutar, gtar, then tar without non-portable flags\n  yacc         create \\`y.tab.[ch]', if possible, from existing .[ch]\n\nSend bug reports to <bug-automake@gnu.org>.\"\n    exit $?\n    ;;\n\n  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)\n    echo \"missing $scriptversion (GNU Automake)\"\n    exit $?\n    ;;\n\n  -*)\n    echo 1>&2 \"$0: Unknown \\`$1' option\"\n    echo 1>&2 \"Try \\`$0 --help' for more information\"\n    exit 1\n    ;;\n\nesac\n\n# Now exit if we have it, but it failed.  Also exit now if we\n# don't have it and --version was passed (most likely to detect\n# the program).\ncase \"$1\" in\n  lex|yacc)\n    # Not GNU programs, they don't have --version.\n    ;;\n\n  tar)\n    if test -n \"$run\"; then\n       echo 1>&2 \"ERROR: \\`tar' requires --run\"\n       exit 1\n    elif test \"x$2\" = \"x--version\" || test \"x$2\" = \"x--help\"; then\n       exit 1\n    fi\n    ;;\n\n  *)\n    if test -z \"$run\" && ($1 --version) > /dev/null 2>&1; then\n       # We have it, but it failed.\n       exit 1\n    elif test \"x$2\" = \"x--version\" || test \"x$2\" = \"x--help\"; then\n       # Could not run --version or --help.  This is probably someone\n       # running `$TOOL --version' or `$TOOL --help' to check whether\n       # $TOOL exists and not knowing $TOOL uses missing.\n       exit 1\n    fi\n    ;;\nesac\n\n# If it does not exist, or fails to run (possibly an outdated version),\n# try to emulate it.\ncase \"$1\" in\n  aclocal*)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified \\`acinclude.m4' or \\`${configure_ac}'.  You might want\n         to install the \\`Automake' and \\`Perl' packages.  Grab them from\n         any GNU archive site.\"\n    touch aclocal.m4\n    ;;\n\n  autoconf)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified \\`${configure_ac}'.  You might want to install the\n         \\`Autoconf' and \\`GNU m4' packages.  Grab them from any GNU\n         archive site.\"\n    touch configure\n    ;;\n\n  autoheader)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified \\`acconfig.h' or \\`${configure_ac}'.  You might want\n         to install the \\`Autoconf' and \\`GNU m4' packages.  Grab them\n         from any GNU archive site.\"\n    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\\([^)]*\\)).*/\\1/p' ${configure_ac}`\n    test -z \"$files\" && files=\"config.h\"\n    touch_files=\n    for f in $files; do\n      case \"$f\" in\n      *:*) touch_files=\"$touch_files \"`echo \"$f\" |\n\t\t\t\t       sed -e 's/^[^:]*://' -e 's/:.*//'`;;\n      *) touch_files=\"$touch_files $f.in\";;\n      esac\n    done\n    touch $touch_files\n    ;;\n\n  automake*)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified \\`Makefile.am', \\`acinclude.m4' or \\`${configure_ac}'.\n         You might want to install the \\`Automake' and \\`Perl' packages.\n         Grab them from any GNU archive site.\"\n    find . -type f -name Makefile.am -print |\n\t   sed 's/\\.am$/.in/' |\n\t   while read f; do touch \"$f\"; done\n    ;;\n\n  autom4te)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is needed, but is $msg.\n         You might have modified some files without having the\n         proper tools for further handling them.\n         You can get \\`$1' as part of \\`Autoconf' from any GNU\n         archive site.\"\n\n    file=`echo \"$*\" | sed -n 's/.*--output[ =]*\\([^ ]*\\).*/\\1/p'`\n    test -z \"$file\" && file=`echo \"$*\" | sed -n 's/.*-o[ ]*\\([^ ]*\\).*/\\1/p'`\n    if test -f \"$file\"; then\n\ttouch $file\n    else\n\ttest -z \"$file\" || exec >$file\n\techo \"#! /bin/sh\"\n\techo \"# Created by GNU Automake missing as a replacement of\"\n\techo \"#  $ $@\"\n\techo \"exit 0\"\n\tchmod +x $file\n\texit 1\n    fi\n    ;;\n\n  bison|yacc)\n    echo 1>&2 \"\\\nWARNING: \\`$1' $msg.  You should only need it if\n         you modified a \\`.y' file.  You may need the \\`Bison' package\n         in order for those modifications to take effect.  You can get\n         \\`Bison' from any GNU archive site.\"\n    rm -f y.tab.c y.tab.h\n    if [ $# -ne 1 ]; then\n        eval LASTARG=\"\\${$#}\"\n\tcase \"$LASTARG\" in\n\t*.y)\n\t    SRCFILE=`echo \"$LASTARG\" | sed 's/y$/c/'`\n\t    if [ -f \"$SRCFILE\" ]; then\n\t         cp \"$SRCFILE\" y.tab.c\n\t    fi\n\t    SRCFILE=`echo \"$LASTARG\" | sed 's/y$/h/'`\n\t    if [ -f \"$SRCFILE\" ]; then\n\t         cp \"$SRCFILE\" y.tab.h\n\t    fi\n\t  ;;\n\tesac\n    fi\n    if [ ! -f y.tab.h ]; then\n\techo >y.tab.h\n    fi\n    if [ ! -f y.tab.c ]; then\n\techo 'main() { return 0; }' >y.tab.c\n    fi\n    ;;\n\n  lex|flex)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified a \\`.l' file.  You may need the \\`Flex' package\n         in order for those modifications to take effect.  You can get\n         \\`Flex' from any GNU archive site.\"\n    rm -f lex.yy.c\n    if [ $# -ne 1 ]; then\n        eval LASTARG=\"\\${$#}\"\n\tcase \"$LASTARG\" in\n\t*.l)\n\t    SRCFILE=`echo \"$LASTARG\" | sed 's/l$/c/'`\n\t    if [ -f \"$SRCFILE\" ]; then\n\t         cp \"$SRCFILE\" lex.yy.c\n\t    fi\n\t  ;;\n\tesac\n    fi\n    if [ ! -f lex.yy.c ]; then\n\techo 'main() { return 0; }' >lex.yy.c\n    fi\n    ;;\n\n  help2man)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n\t you modified a dependency of a manual page.  You may need the\n\t \\`Help2man' package in order for those modifications to take\n\t effect.  You can get \\`Help2man' from any GNU archive site.\"\n\n    file=`echo \"$*\" | sed -n 's/.*-o \\([^ ]*\\).*/\\1/p'`\n    if test -z \"$file\"; then\n\tfile=`echo \"$*\" | sed -n 's/.*--output=\\([^ ]*\\).*/\\1/p'`\n    fi\n    if [ -f \"$file\" ]; then\n\ttouch $file\n    else\n\ttest -z \"$file\" || exec >$file\n\techo \".ab help2man is required to generate this page\"\n\texit 1\n    fi\n    ;;\n\n  makeinfo)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is $msg.  You should only need it if\n         you modified a \\`.texi' or \\`.texinfo' file, or any other file\n         indirectly affecting the aspect of the manual.  The spurious\n         call might also be the consequence of using a buggy \\`make' (AIX,\n         DU, IRIX).  You might want to install the \\`Texinfo' package or\n         the \\`GNU make' package.  Grab either from any GNU archive site.\"\n    # The file to touch is that specified with -o ...\n    file=`echo \"$*\" | sed -n 's/.*-o \\([^ ]*\\).*/\\1/p'`\n    if test -z \"$file\"; then\n      # ... or it is the one specified with @setfilename ...\n      infile=`echo \"$*\" | sed 's/.* \\([^ ]*\\) *$/\\1/'`\n      file=`sed -n '/^@setfilename/ { s/.* \\([^ ]*\\) *$/\\1/; p; q; }' $infile`\n      # ... or it is derived from the source name (dir/f.texi becomes f.info)\n      test -z \"$file\" && file=`echo \"$infile\" | sed 's,.*/,,;s,.[^.]*$,,'`.info\n    fi\n    # If the file does not exist, the user really needs makeinfo;\n    # let's fail without touching anything.\n    test -f $file || exit 1\n    touch $file\n    ;;\n\n  tar)\n    shift\n\n    # We have already tried tar in the generic part.\n    # Look for gnutar/gtar before invocation to avoid ugly error\n    # messages.\n    if (gnutar --version > /dev/null 2>&1); then\n       gnutar \"$@\" && exit 0\n    fi\n    if (gtar --version > /dev/null 2>&1); then\n       gtar \"$@\" && exit 0\n    fi\n    firstarg=\"$1\"\n    if shift; then\n\tcase \"$firstarg\" in\n\t*o*)\n\t    firstarg=`echo \"$firstarg\" | sed s/o//`\n\t    tar \"$firstarg\" \"$@\" && exit 0\n\t    ;;\n\tesac\n\tcase \"$firstarg\" in\n\t*h*)\n\t    firstarg=`echo \"$firstarg\" | sed s/h//`\n\t    tar \"$firstarg\" \"$@\" && exit 0\n\t    ;;\n\tesac\n    fi\n\n    echo 1>&2 \"\\\nWARNING: I can't seem to be able to run \\`tar' with the given arguments.\n         You may want to install GNU tar or Free paxutils, or check the\n         command line arguments.\"\n    exit 1\n    ;;\n\n  *)\n    echo 1>&2 \"\\\nWARNING: \\`$1' is needed, and is $msg.\n         You might have modified some files without having the\n         proper tools for further handling them.  Check the \\`README' file,\n         it often tells you about the needed prerequisites for installing\n         this package.  You may also peek at any GNU archive site, in case\n         some other package would contain this missing \\`$1' program.\"\n    exit 1\n    ;;\nesac\n\nexit 0\n\n# Local variables:\n# eval: (add-hook 'write-file-hooks 'time-stamp)\n# time-stamp-start: \"scriptversion=\"\n# time-stamp-format: \"%:y-%02m-%02d.%02H\"\n# time-stamp-end: \"$\"\n# End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/mkinstalldirs",
    "content": "#! /bin/sh\n# mkinstalldirs --- make directory hierarchy\n# Author: Noah Friedman <friedman@prep.ai.mit.edu>\n# Created: 1993-05-16\n# Public domain\n\nerrstatus=0\ndirmode=\"\"\n\nusage=\"\\\nUsage: mkinstalldirs [-h] [--help] [-m mode] dir ...\"\n\n# process command line arguments\nwhile test $# -gt 0 ; do\n  case $1 in\n    -h | --help | --h*)         # -h for help\n      echo \"$usage\" 1>&2\n      exit 0\n      ;;\n    -m)                         # -m PERM arg\n      shift\n      test $# -eq 0 && { echo \"$usage\" 1>&2; exit 1; }\n      dirmode=$1\n      shift\n      ;;\n    --)                         # stop option processing\n      shift\n      break\n      ;;\n    -*)                         # unknown option\n      echo \"$usage\" 1>&2\n      exit 1\n      ;;\n    *)                          # first non-opt arg\n      break\n      ;;\n  esac\ndone\n\nfor file\ndo\n  if test -d \"$file\"; then\n    shift\n  else\n    break\n  fi\ndone\n\ncase $# in\n  0) exit 0 ;;\nesac\n\ncase $dirmode in\n  '')\n    if mkdir -p -- . 2>/dev/null; then\n      echo \"mkdir -p -- $*\"\n      exec mkdir -p -- \"$@\"\n    fi\n    ;;\n  *)\n    if mkdir -m \"$dirmode\" -p -- . 2>/dev/null; then\n      echo \"mkdir -m $dirmode -p -- $*\"\n      exec mkdir -m \"$dirmode\" -p -- \"$@\"\n    fi\n    ;;\nesac\n\nfor file\ndo\n  set fnord `echo \":$file\" | sed -ne 's/^:\\//#/;s/^://;s/\\// /g;s/^#/\\//;p'`\n  shift\n\n  pathcomp=\n  for d\n  do\n    pathcomp=\"$pathcomp$d\"\n    case $pathcomp in\n      -*) pathcomp=./$pathcomp ;;\n    esac\n\n    if test ! -d \"$pathcomp\"; then\n      echo \"mkdir $pathcomp\"\n\n      mkdir \"$pathcomp\" || lasterr=$?\n\n      if test ! -d \"$pathcomp\"; then\n  \terrstatus=$lasterr\n      else\n  \tif test ! -z \"$dirmode\"; then\n\t  echo \"chmod $dirmode $pathcomp\"\n    \t  lasterr=\"\"\n  \t  chmod \"$dirmode\" \"$pathcomp\" || lasterr=$?\n\n  \t  if test ! -z \"$lasterr\"; then\n  \t    errstatus=$lasterr\n  \t  fi\n  \tfi\n      fi\n    fi\n\n    pathcomp=\"$pathcomp/\"\n  done\ndone\n\nexit $errstatus\n\n# Local Variables:\n# mode: shell-script\n# sh-indentation: 2\n# End:\n# mkinstalldirs ends here\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/nls.m4",
    "content": "# nls.m4 serial 1 (gettext-0.12)\ndnl Copyright (C) 1995-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\ndnl\ndnl This file can can be used in projects which are not available under\ndnl the GNU General Public License or the GNU Library General Public\ndnl License but which still want to provide support for the GNU gettext\ndnl functionality.\ndnl Please note that the actual code of the GNU gettext library is covered\ndnl by the GNU Library General Public License, and the rest of the GNU\ndnl gettext package package is covered by the GNU General Public License.\ndnl They are *not* in the public domain.\n\ndnl Authors:\ndnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.\ndnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.\n\nAC_DEFUN([AM_NLS],\n[\n  AC_MSG_CHECKING([whether NLS is requested])\n  dnl Default is enabled NLS\n  AC_ARG_ENABLE(nls,\n    [  --disable-nls           do not use Native Language Support],\n    USE_NLS=$enableval, USE_NLS=yes)\n  AC_MSG_RESULT($USE_NLS)\n  AC_SUBST(USE_NLS)\n])\n\nAC_DEFUN([AM_MKINSTALLDIRS],\n[\n  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly\n  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).\n  dnl Try to locate it.\n  MKINSTALLDIRS=\n  if test -n \"$ac_aux_dir\"; then\n    case \"$ac_aux_dir\" in\n      /*) MKINSTALLDIRS=\"$ac_aux_dir/mkinstalldirs\" ;;\n      *) MKINSTALLDIRS=\"\\$(top_builddir)/$ac_aux_dir/mkinstalldirs\" ;;\n    esac\n  fi\n  if test -z \"$MKINSTALLDIRS\"; then\n    MKINSTALLDIRS=\"\\$(top_srcdir)/mkinstalldirs\"\n  fi\n  AC_SUBST(MKINSTALLDIRS)\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/po.m4",
    "content": "# po.m4 serial 3 (gettext-0.14)\ndnl Copyright (C) 1995-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\ndnl\ndnl This file can can be used in projects which are not available under\ndnl the GNU General Public License or the GNU Library General Public\ndnl License but which still want to provide support for the GNU gettext\ndnl functionality.\ndnl Please note that the actual code of the GNU gettext library is covered\ndnl by the GNU Library General Public License, and the rest of the GNU\ndnl gettext package package is covered by the GNU General Public License.\ndnl They are *not* in the public domain.\n\ndnl Authors:\ndnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.\ndnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.\n\ndnl Checks for all prerequisites of the po subdirectory.\nAC_DEFUN([AM_PO_SUBDIRS],\n[\n  AC_REQUIRE([AC_PROG_MAKE_SET])dnl\n  AC_REQUIRE([AC_PROG_INSTALL])dnl\n  AC_REQUIRE([AM_MKINSTALLDIRS])dnl\n  AC_REQUIRE([AM_NLS])dnl\n\n  dnl Perform the following tests also if --disable-nls has been given,\n  dnl because they are needed for \"make dist\" to work.\n\n  dnl Search for GNU msgfmt in the PATH.\n  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.\n  dnl The second test excludes FreeBSD msgfmt.\n  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,\n    [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],\n    :)\n  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)\n\n  dnl Search for GNU xgettext 0.12 or newer in the PATH.\n  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.\n  dnl The second test excludes FreeBSD xgettext.\n  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,\n    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],\n    :)\n  dnl Remove leftover from FreeBSD xgettext call.\n  rm -f messages.po\n\n  dnl Search for GNU msgmerge 0.11 or newer in the PATH.\n  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,\n    [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)\n\n  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.\n  dnl Test whether we really found GNU msgfmt.\n  if test \"$GMSGFMT\" != \":\"; then\n    dnl If it is no GNU msgfmt we define it as : so that the\n    dnl Makefiles still can work.\n    if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&\n       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      GMSGFMT=`echo \"$GMSGFMT\" | sed -e 's,^.*/,,'`\n      AC_MSG_RESULT(\n        [found $GMSGFMT program is not GNU msgfmt; ignore it])\n      GMSGFMT=\":\"\n    fi\n  fi\n\n  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.\n  dnl Test whether we really found GNU xgettext.\n  if test \"$XGETTEXT\" != \":\"; then\n    dnl If it is no GNU xgettext we define it as : so that the\n    dnl Makefiles still can work.\n    if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      AC_MSG_RESULT(\n        [found xgettext program is not GNU xgettext; ignore it])\n      XGETTEXT=\":\"\n    fi\n    dnl Remove leftover from FreeBSD xgettext call.\n    rm -f messages.po\n  fi\n\n  AC_OUTPUT_COMMANDS([\n    for ac_file in $CONFIG_FILES; do\n      # Support \"outfile[:infile[:infile...]]\"\n      case \"$ac_file\" in\n        *:*) ac_file=`echo \"$ac_file\"|sed 's%:.*%%'` ;;\n      esac\n      # PO directories have a Makefile.in generated from Makefile.in.in.\n      case \"$ac_file\" in */Makefile.in)\n        # Adjust a relative srcdir.\n        ac_dir=`echo \"$ac_file\"|sed 's%/[^/][^/]*$%%'`\n        ac_dir_suffix=\"/`echo \"$ac_dir\"|sed 's%^\\./%%'`\"\n        ac_dots=`echo \"$ac_dir_suffix\"|sed 's%/[^/]*%../%g'`\n        # In autoconf-2.13 it is called $ac_given_srcdir.\n        # In autoconf-2.50 it is called $srcdir.\n        test -n \"$ac_given_srcdir\" || ac_given_srcdir=\"$srcdir\"\n        case \"$ac_given_srcdir\" in\n          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;\n          /*) top_srcdir=\"$ac_given_srcdir\" ;;\n          *)  top_srcdir=\"$ac_dots$ac_given_srcdir\" ;;\n        esac\n        if test -f \"$ac_given_srcdir/$ac_dir/POTFILES.in\"; then\n          rm -f \"$ac_dir/POTFILES\"\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/POTFILES\" || echo \"creating $ac_dir/POTFILES\"\n          cat \"$ac_given_srcdir/$ac_dir/POTFILES.in\" | sed -e \"/^#/d\" -e \"/^[ \t]*\\$/d\" -e \"s,.*,     $top_srcdir/& \\\\\\\\,\" | sed -e \"\\$s/\\(.*\\) \\\\\\\\/\\1/\" > \"$ac_dir/POTFILES\"\n          POMAKEFILEDEPS=\"POTFILES.in\"\n          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend\n          # on $ac_dir but don't depend on user-specified configuration\n          # parameters.\n          if test -f \"$ac_given_srcdir/$ac_dir/LINGUAS\"; then\n            # The LINGUAS file contains the set of available languages.\n            if test -n \"$OBSOLETE_ALL_LINGUAS\"; then\n              test -n \"$as_me\" && echo \"$as_me: setting ALL_LINGUAS in configure.in is obsolete\" || echo \"setting ALL_LINGUAS in configure.in is obsolete\"\n            fi\n            ALL_LINGUAS_=`sed -e \"/^#/d\" \"$ac_given_srcdir/$ac_dir/LINGUAS\"`\n            # Hide the ALL_LINGUAS assigment from automake.\n            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'\n            POMAKEFILEDEPS=\"$POMAKEFILEDEPS LINGUAS\"\n          else\n            # The set of available languages was given in configure.in.\n            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'\n          fi\n          # Compute POFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)\n          # Compute UPDATEPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)\n          # Compute DUMMYPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)\n          # Compute GMOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)\n          case \"$ac_given_srcdir\" in\n            .) srcdirpre= ;;\n            *) srcdirpre='$(srcdir)/' ;;\n          esac\n          POFILES=\n          UPDATEPOFILES=\n          DUMMYPOFILES=\n          GMOFILES=\n          for lang in $ALL_LINGUAS; do\n            POFILES=\"$POFILES $srcdirpre$lang.po\"\n            UPDATEPOFILES=\"$UPDATEPOFILES $lang.po-update\"\n            DUMMYPOFILES=\"$DUMMYPOFILES $lang.nop\"\n            GMOFILES=\"$GMOFILES $srcdirpre$lang.gmo\"\n          done\n          # CATALOGS depends on both $ac_dir and the user's LINGUAS\n          # environment variable.\n          INST_LINGUAS=\n          if test -n \"$ALL_LINGUAS\"; then\n            for presentlang in $ALL_LINGUAS; do\n              useit=no\n              if test \"%UNSET%\" != \"$LINGUAS\"; then\n                desiredlanguages=\"$LINGUAS\"\n              else\n                desiredlanguages=\"$ALL_LINGUAS\"\n              fi\n              for desiredlang in $desiredlanguages; do\n                # Use the presentlang catalog if desiredlang is\n                #   a. equal to presentlang, or\n                #   b. a variant of presentlang (because in this case,\n                #      presentlang can be used as a fallback for messages\n                #      which are not translated in the desiredlang catalog).\n                case \"$desiredlang\" in\n                  \"$presentlang\"*) useit=yes;;\n                esac\n              done\n              if test $useit = yes; then\n                INST_LINGUAS=\"$INST_LINGUAS $presentlang\"\n              fi\n            done\n          fi\n          CATALOGS=\n          if test -n \"$INST_LINGUAS\"; then\n            for lang in $INST_LINGUAS; do\n              CATALOGS=\"$CATALOGS $lang.gmo\"\n            done\n          fi\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/Makefile\" || echo \"creating $ac_dir/Makefile\"\n          sed -e \"/^POTFILES =/r $ac_dir/POTFILES\" -e \"/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars\" -e \"s|@POFILES@|$POFILES|g\" -e \"s|@UPDATEPOFILES@|$UPDATEPOFILES|g\" -e \"s|@DUMMYPOFILES@|$DUMMYPOFILES|g\" -e \"s|@GMOFILES@|$GMOFILES|g\" -e \"s|@CATALOGS@|$CATALOGS|g\" -e \"s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g\" \"$ac_dir/Makefile.in\" > \"$ac_dir/Makefile\"\n          for f in \"$ac_given_srcdir/$ac_dir\"/Rules-*; do\n            if test -f \"$f\"; then\n              case \"$f\" in\n                *.orig | *.bak | *~) ;;\n                *) cat \"$f\" >> \"$ac_dir/Makefile\" ;;\n              esac\n            fi\n          done\n        fi\n        ;;\n      esac\n    done],\n   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute\n    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it\n    # from automake.\n    eval 'OBSOLETE_ALL_LINGUAS''=\"$ALL_LINGUAS\"'\n    # Capture the value of LINGUAS because we need it to compute CATALOGS.\n    LINGUAS=\"${LINGUAS-%UNSET%}\"\n   ])\n])\n\ndnl Postprocesses a Makefile in a directory containing PO files.\nAC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],\n[\n  # When this code is run, in config.status, two variables have already been\n  # set:\n  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,\n  # - LINGUAS is the value of the environment variable LINGUAS at configure\n  #   time.\n\nchangequote(,)dnl\n  # Adjust a relative srcdir.\n  ac_dir=`echo \"$ac_file\"|sed 's%/[^/][^/]*$%%'`\n  ac_dir_suffix=\"/`echo \"$ac_dir\"|sed 's%^\\./%%'`\"\n  ac_dots=`echo \"$ac_dir_suffix\"|sed 's%/[^/]*%../%g'`\n  # In autoconf-2.13 it is called $ac_given_srcdir.\n  # In autoconf-2.50 it is called $srcdir.\n  test -n \"$ac_given_srcdir\" || ac_given_srcdir=\"$srcdir\"\n  case \"$ac_given_srcdir\" in\n    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;\n    /*) top_srcdir=\"$ac_given_srcdir\" ;;\n    *)  top_srcdir=\"$ac_dots$ac_given_srcdir\" ;;\n  esac\n\n  # Find a way to echo strings without interpreting backslash.\n  if test \"X`(echo '\\t') 2>/dev/null`\" = 'X\\t'; then\n    gt_echo='echo'\n  else\n    if test \"X`(printf '%s\\n' '\\t') 2>/dev/null`\" = 'X\\t'; then\n      gt_echo='printf %s\\n'\n    else\n      echo_func () {\n        cat <<EOT\n$*\nEOT\n      }\n      gt_echo='echo_func'\n    fi\n  fi\n\n  # A sed script that extracts the value of VARIABLE from a Makefile.\n  sed_x_variable='\n# Test if the hold space is empty.\nx\ns/P/P/\nx\nta\n# Yes it was empty. Look if we have the expected variable definition.\n/^[\t ]*VARIABLE[\t ]*=/{\n  # Seen the first line of the variable definition.\n  s/^[\t ]*VARIABLE[\t ]*=//\n  ba\n}\nbd\n:a\n# Here we are processing a line from the variable definition.\n# Remove comment, more precisely replace it with a space.\ns/#.*$/ /\n# See if the line ends in a backslash.\ntb\n:b\ns/\\\\$//\n# Print the line, without the trailing backslash.\np\ntc\n# There was no trailing backslash. The end of the variable definition is\n# reached. Clear the hold space.\ns/^.*$//\nx\nbd\n:c\n# A trailing backslash means that the variable definition continues in the\n# next line. Put a nonempty string into the hold space to indicate this.\ns/^.*$/P/\nx\n:d\n'\nchangequote([,])dnl\n\n  # Set POTFILES to the value of the Makefile variable POTFILES.\n  sed_x_POTFILES=\"`$gt_echo \\\"$sed_x_variable\\\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`\"\n  POTFILES=`sed -n -e \"$sed_x_POTFILES\" < \"$ac_file\"`\n  # Compute POTFILES_DEPS as\n  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))\n  POTFILES_DEPS=\n  for file in $POTFILES; do\n    POTFILES_DEPS=\"$POTFILES_DEPS \"'$(top_srcdir)/'\"$file\"\n  done\n  POMAKEFILEDEPS=\"\"\n\n  if test -n \"$OBSOLETE_ALL_LINGUAS\"; then\n    test -n \"$as_me\" && echo \"$as_me: setting ALL_LINGUAS in configure.in is obsolete\" || echo \"setting ALL_LINGUAS in configure.in is obsolete\"\n  fi\n  if test -f \"$ac_given_srcdir/$ac_dir/LINGUAS\"; then\n    # The LINGUAS file contains the set of available languages.\n    ALL_LINGUAS_=`sed -e \"/^#/d\" \"$ac_given_srcdir/$ac_dir/LINGUAS\"`\n    POMAKEFILEDEPS=\"$POMAKEFILEDEPS LINGUAS\"\n  else\n    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.\n    sed_x_LINGUAS=\"`$gt_echo \\\"$sed_x_variable\\\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`\"\n    ALL_LINGUAS_=`sed -n -e \"$sed_x_LINGUAS\" < \"$ac_file\"`\n  fi\n  # Hide the ALL_LINGUAS assigment from automake.\n  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'\n  # Compute POFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)\n  # Compute UPDATEPOFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)\n  # Compute DUMMYPOFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)\n  # Compute GMOFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)\n  # Compute PROPERTIESFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)\n  # Compute CLASSFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)\n  # Compute QMFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)\n  # Compute MSGFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)\n  # Compute RESOURCESDLLFILES\n  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)\n  case \"$ac_given_srcdir\" in\n    .) srcdirpre= ;;\n    *) srcdirpre='$(srcdir)/' ;;\n  esac\n  POFILES=\n  UPDATEPOFILES=\n  DUMMYPOFILES=\n  GMOFILES=\n  PROPERTIESFILES=\n  CLASSFILES=\n  QMFILES=\n  MSGFILES=\n  RESOURCESDLLFILES=\n  for lang in $ALL_LINGUAS; do\n    POFILES=\"$POFILES $srcdirpre$lang.po\"\n    UPDATEPOFILES=\"$UPDATEPOFILES $lang.po-update\"\n    DUMMYPOFILES=\"$DUMMYPOFILES $lang.nop\"\n    GMOFILES=\"$GMOFILES $srcdirpre$lang.gmo\"\n    PROPERTIESFILES=\"$PROPERTIESFILES \\$(top_srcdir)/\\$(DOMAIN)_$lang.properties\"\n    CLASSFILES=\"$CLASSFILES \\$(top_srcdir)/\\$(DOMAIN)_$lang.class\"\n    QMFILES=\"$QMFILES $srcdirpre$lang.qm\"\n    frobbedlang=`echo $lang | sed -e 's/\\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`\n    MSGFILES=\"$MSGFILES $srcdirpre$frobbedlang.msg\"\n    frobbedlang=`echo $lang | sed -e 's/_/-/g'`\n    RESOURCESDLLFILES=\"$RESOURCESDLLFILES $srcdirpre$frobbedlang/\\$(DOMAIN).resources.dll\"\n  done\n  # CATALOGS depends on both $ac_dir and the user's LINGUAS\n  # environment variable.\n  INST_LINGUAS=\n  if test -n \"$ALL_LINGUAS\"; then\n    for presentlang in $ALL_LINGUAS; do\n      useit=no\n      if test \"%UNSET%\" != \"$LINGUAS\"; then\n        desiredlanguages=\"$LINGUAS\"\n      else\n        desiredlanguages=\"$ALL_LINGUAS\"\n      fi\n      for desiredlang in $desiredlanguages; do\n        # Use the presentlang catalog if desiredlang is\n        #   a. equal to presentlang, or\n        #   b. a variant of presentlang (because in this case,\n        #      presentlang can be used as a fallback for messages\n        #      which are not translated in the desiredlang catalog).\n        case \"$desiredlang\" in\n          \"$presentlang\"*) useit=yes;;\n        esac\n      done\n      if test $useit = yes; then\n        INST_LINGUAS=\"$INST_LINGUAS $presentlang\"\n      fi\n    done\n  fi\n  CATALOGS=\n  JAVACATALOGS=\n  QTCATALOGS=\n  TCLCATALOGS=\n  CSHARPCATALOGS=\n  if test -n \"$INST_LINGUAS\"; then\n    for lang in $INST_LINGUAS; do\n      CATALOGS=\"$CATALOGS $lang.gmo\"\n      JAVACATALOGS=\"$JAVACATALOGS \\$(DOMAIN)_$lang.properties\"\n      QTCATALOGS=\"$QTCATALOGS $lang.qm\"\n      frobbedlang=`echo $lang | sed -e 's/\\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`\n      TCLCATALOGS=\"$TCLCATALOGS $frobbedlang.msg\"\n      frobbedlang=`echo $lang | sed -e 's/_/-/g'`\n      CSHARPCATALOGS=\"$CSHARPCATALOGS $frobbedlang/\\$(DOMAIN).resources.dll\"\n    done\n  fi\n\n  sed -e \"s|@POTFILES_DEPS@|$POTFILES_DEPS|g\" -e \"s|@POFILES@|$POFILES|g\" -e \"s|@UPDATEPOFILES@|$UPDATEPOFILES|g\" -e \"s|@DUMMYPOFILES@|$DUMMYPOFILES|g\" -e \"s|@GMOFILES@|$GMOFILES|g\" -e \"s|@PROPERTIESFILES@|$PROPERTIESFILES|g\" -e \"s|@CLASSFILES@|$CLASSFILES|g\" -e \"s|@QMFILES@|$QMFILES|g\" -e \"s|@MSGFILES@|$MSGFILES|g\" -e \"s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g\" -e \"s|@CATALOGS@|$CATALOGS|g\" -e \"s|@JAVACATALOGS@|$JAVACATALOGS|g\" -e \"s|@QTCATALOGS@|$QTCATALOGS|g\" -e \"s|@TCLCATALOGS@|$TCLCATALOGS|g\" -e \"s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g\" -e 's,^#distdir:,distdir:,' < \"$ac_file\" > \"$ac_file.tmp\"\n  if grep -l '@TCLCATALOGS@' \"$ac_file\" > /dev/null; then\n    # Add dependencies that cannot be formulated as a simple suffix rule.\n    for lang in $ALL_LINGUAS; do\n      frobbedlang=`echo $lang | sed -e 's/\\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`\n      cat >> \"$ac_file.tmp\" <<EOF\n$frobbedlang.msg: $lang.po\n\t@echo \"\\$(MSGFMT) -c --tcl -d \\$(srcdir) -l $lang $srcdirpre$lang.po\"; \\\n\t\\$(MSGFMT) -c --tcl -d \"\\$(srcdir)\" -l $lang $srcdirpre$lang.po || { rm -f \"\\$(srcdir)/$frobbedlang.msg\"; exit 1; }\nEOF\n    done\n  fi\n  if grep -l '@CSHARPCATALOGS@' \"$ac_file\" > /dev/null; then\n    # Add dependencies that cannot be formulated as a simple suffix rule.\n    for lang in $ALL_LINGUAS; do\n      frobbedlang=`echo $lang | sed -e 's/_/-/g'`\n      cat >> \"$ac_file.tmp\" <<EOF\n$frobbedlang/\\$(DOMAIN).resources.dll: $lang.po\n\t@echo \"\\$(MSGFMT) -c --csharp -d \\$(srcdir) -l $lang $srcdirpre$lang.po -r \\$(DOMAIN)\"; \\\n\t\\$(MSGFMT) -c --csharp -d \"\\$(srcdir)\" -l $lang $srcdirpre$lang.po -r \"\\$(DOMAIN)\" || { rm -f \"\\$(srcdir)/$frobbedlang.msg\"; exit 1; }\nEOF\n    done\n  fi\n  if test -n \"$POMAKEFILEDEPS\"; then\n    cat >> \"$ac_file.tmp\" <<EOF\nMakefile: $POMAKEFILEDEPS\nEOF\n  fi\n  mv \"$ac_file.tmp\" \"$ac_file\"\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/printf-posix.m4",
    "content": "# printf-posix.m4 serial 2 (gettext-0.13.1)\ndnl Copyright (C) 2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\ndnl Test whether the printf() function supports POSIX/XSI format strings with\ndnl positions.\n\nAC_DEFUN([gt_PRINTF_POSIX],\n[\n  AC_REQUIRE([AC_PROG_CC])\n  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],\n    gt_cv_func_printf_posix,\n    [\n      AC_TRY_RUN([\n#include <stdio.h>\n#include <string.h>\n/* The string \"%2$d %1$d\", with dollar characters protected from the shell's\n   dollar expansion (possibly an autoconf bug).  */\nstatic char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\\0' };\nstatic char buf[100];\nint main ()\n{\n  sprintf (buf, format, 33, 55);\n  return (strcmp (buf, \"55 33\") != 0);\n}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,\n      [\n        AC_EGREP_CPP(notposix, [\n#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__\n  notposix\n#endif\n        ], gt_cv_func_printf_posix=\"guessing no\",\n           gt_cv_func_printf_posix=\"guessing yes\")\n      ])\n    ])\n  case $gt_cv_func_printf_posix in\n    *yes)\n      AC_DEFINE(HAVE_POSIX_PRINTF, 1,\n        [Define if your printf() function supports format strings with positions.])\n      ;;\n  esac\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/progtest.m4",
    "content": "# progtest.m4 serial 3 (gettext-0.12)\ndnl Copyright (C) 1996-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\ndnl\ndnl This file can can be used in projects which are not available under\ndnl the GNU General Public License or the GNU Library General Public\ndnl License but which still want to provide support for the GNU gettext\ndnl functionality.\ndnl Please note that the actual code of the GNU gettext library is covered\ndnl by the GNU Library General Public License, and the rest of the GNU\ndnl gettext package package is covered by the GNU General Public License.\ndnl They are *not* in the public domain.\n\ndnl Authors:\ndnl   Ulrich Drepper <drepper@cygnus.com>, 1996.\n\n# Search path for a program which passes the given test.\n\ndnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,\ndnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])\nAC_DEFUN([AM_PATH_PROG_WITH_TEST],\n[\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"$2\", so it can be a program name with args.\nset dummy $2; ac_word=[$]2\nAC_MSG_CHECKING([for $ac_word])\nAC_CACHE_VAL(ac_cv_path_$1,\n[case \"[$]$1\" in\n  [[\\\\/]]* | ?:[[\\\\/]]*)\n    ac_cv_path_$1=\"[$]$1\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in ifelse([$5], , $PATH, [$5]); do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if [$3]; then\n            ac_cv_path_$1=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\ndnl If no 4th arg is given, leave the cache variable unset,\ndnl so AC_PATH_PROGS will keep looking.\nifelse([$4], , , [  test -z \"[$]ac_cv_path_$1\" && ac_cv_path_$1=\"$4\"\n])dnl\n    ;;\nesac])dnl\n$1=\"$ac_cv_path_$1\"\nif test ifelse([$4], , [-n \"[$]$1\"], [\"[$]$1\" != \"$4\"]); then\n  AC_MSG_RESULT([$]$1)\nelse\n  AC_MSG_RESULT(no)\nfi\nAC_SUBST($1)dnl\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/signed.m4",
    "content": "# signed.m4 serial 1 (gettext-0.10.40)\ndnl Copyright (C) 2001-2002 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\nAC_DEFUN([bh_C_SIGNED],\n[\n  AC_CACHE_CHECK([for signed], bh_cv_c_signed,\n   [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])\n  if test $bh_cv_c_signed = no; then\n    AC_DEFINE(signed, ,\n              [Define to empty if the C compiler doesn't support this keyword.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/size_max.m4",
    "content": "# size_max.m4 serial 2\ndnl Copyright (C) 2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\n\nAC_DEFUN([gl_SIZE_MAX],\n[\n  AC_CHECK_HEADERS(stdint.h)\n  dnl First test whether the system already has SIZE_MAX.\n  AC_MSG_CHECKING([for SIZE_MAX])\n  result=\n  AC_EGREP_CPP([Found it], [\n#include <limits.h>\n#if HAVE_STDINT_H\n#include <stdint.h>\n#endif\n#ifdef SIZE_MAX\nFound it\n#endif\n], result=yes)\n  if test -z \"$result\"; then\n    dnl Define it ourselves. Here we assume that the type 'size_t' is not wider\n    dnl than the type 'unsigned long'.\n    dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',\n    dnl which is guaranteed to work from LONG_MIN to LONG_MAX.\n    _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,\n      [#include <stddef.h>], result=?)\n    _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,\n      [#include <stddef.h>], result=?)\n    _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,\n      [#include <stddef.h>], result=?)\n    if test \"$fits_in_uint\" = 1; then\n      dnl Even though SIZE_MAX fits in an unsigned int, it must be of type\n      dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.\n      AC_TRY_COMPILE([#include <stddef.h>\n        extern size_t foo;\n        extern unsigned long foo;\n        ], [], fits_in_uint=0)\n    fi\n    if test -z \"$result\"; then\n      if test \"$fits_in_uint\" = 1; then\n        result=\"$res_hi$res_lo\"U\n      else\n        result=\"$res_hi$res_lo\"UL\n      fi\n    else\n      dnl Shouldn't happen, but who knows...\n      result='~(size_t)0'\n    fi\n  fi\n  AC_MSG_RESULT([$result])\n  if test \"$result\" != yes; then\n    AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],\n      [Define as the maximum value of type 'size_t', if the system doesn't define it.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/stdint_h.m4",
    "content": "# stdint_h.m4 serial 3 (gettext-0.12)\ndnl Copyright (C) 1997-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\n# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,\n# doesn't clash with <sys/types.h>, and declares uintmax_t.\n\nAC_DEFUN([jm_AC_HEADER_STDINT_H],\n[\n  AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,\n  [AC_TRY_COMPILE(\n    [#include <sys/types.h>\n#include <stdint.h>],\n    [uintmax_t i = (uintmax_t) -1;],\n    jm_ac_cv_header_stdint_h=yes,\n    jm_ac_cv_header_stdint_h=no)])\n  if test $jm_ac_cv_header_stdint_h = yes; then\n    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,\n      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,\n       and declares uintmax_t. ])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/texinfo.tex",
    "content": "% texinfo.tex -- TeX macros to handle Texinfo files.\n%\n% Load plain if necessary, i.e., if running under initex.\n\\expandafter\\ifx\\csname fmtname\\endcsname\\relax\\input plain\\fi\n%\n\\def\\texinfoversion{2006-03-21.13}\n%\n% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,\n% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free\n% Software Foundation, Inc.\n%\n% This texinfo.tex file is free software; you can redistribute it and/or\n% modify it under the terms of the GNU General Public License as\n% published by the Free Software Foundation; either version 2, or (at\n% your option) any later version.\n%\n% This texinfo.tex file is distributed in the hope that it will be\n% useful, but WITHOUT ANY WARRANTY; without even the implied warranty\n% of 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 texinfo.tex file; see the file COPYING.  If not, write\n% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n% Boston, MA 02110-1301, USA.\n%\n% As a special exception, when this file is read by TeX when processing\n% a Texinfo source document, you may use the result without\n% restriction.  (This has been our intent since Texinfo was invented.)\n%\n% Please try the latest version of texinfo.tex before submitting bug\n% reports; you can get the latest version from:\n%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or\n%   ftp://tug.org/tex/texinfo.tex\n%     (and all CTAN mirrors, see http://www.ctan.org).\n% The texinfo.tex in any given distribution could well be out\n% of date, so if that's what you're using, please check.\n%\n% Send bug reports to bug-texinfo@gnu.org.  Please include including a\n% complete document in each bug report with which we can reproduce the\n% problem.  Patches are, of course, greatly appreciated.\n%\n% To process a Texinfo manual with TeX, it's most reliable to use the\n% texi2dvi shell script that comes with the distribution.  For a simple\n% manual foo.texi, however, you can get away with this:\n%   tex foo.texi\n%   texindex foo.??\n%   tex foo.texi\n%   tex foo.texi\n%   dvips foo.dvi -o  # or whatever; this makes foo.ps.\n% The extra TeX runs get the cross-reference information correct.\n% Sometimes one run after texindex suffices, and sometimes you need more\n% than two; texi2dvi does it as many times as necessary.\n%\n% It is possible to adapt texinfo.tex for other languages, to some\n% extent.  You can get the existing language-specific files from the\n% full Texinfo distribution.\n%\n% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.\n\n\n\\message{Loading texinfo [version \\texinfoversion]:}\n\n% If in a .fmt file, print the version number\n% and turn on active characters that we couldn't do earlier because\n% they might have appeared in the input file name.\n\\everyjob{\\message{[Texinfo version \\texinfoversion]}%\n  \\catcode`+=\\active \\catcode`\\_=\\active}\n\n\\message{Basics,}\n\\chardef\\other=12\n\n% We never want plain's \\outer definition of \\+ in Texinfo.\n% For @tex, we can use \\tabalign.\n\\let\\+ = \\relax\n\n% Save some plain tex macros whose names we will redefine.\n\\let\\ptexb=\\b\n\\let\\ptexbullet=\\bullet\n\\let\\ptexc=\\c\n\\let\\ptexcomma=\\,\n\\let\\ptexdot=\\.\n\\let\\ptexdots=\\dots\n\\let\\ptexend=\\end\n\\let\\ptexequiv=\\equiv\n\\let\\ptexexclam=\\!\n\\let\\ptexfootnote=\\footnote\n\\let\\ptexgtr=>\n\\let\\ptexhat=^\n\\let\\ptexi=\\i\n\\let\\ptexindent=\\indent\n\\let\\ptexinsert=\\insert\n\\let\\ptexlbrace=\\{\n\\let\\ptexless=<\n\\let\\ptexnewwrite\\newwrite\n\\let\\ptexnoindent=\\noindent\n\\let\\ptexplus=+\n\\let\\ptexrbrace=\\}\n\\let\\ptexslash=\\/\n\\let\\ptexstar=\\*\n\\let\\ptext=\\t\n\n% If this character appears in an error message or help string, it\n% starts a new line in the output.\n\\newlinechar = `^^J\n\n% Use TeX 3.0's \\inputlineno to get the line number, for better error\n% messages, but if we're using an old version of TeX, don't do anything.\n%\n\\ifx\\inputlineno\\thisisundefined\n  \\let\\linenumber = \\empty % Pre-3.0.\n\\else\n  \\def\\linenumber{l.\\the\\inputlineno:\\space}\n\\fi\n\n% Set up fixed words for English if not already set.\n\\ifx\\putwordAppendix\\undefined  \\gdef\\putwordAppendix{Appendix}\\fi\n\\ifx\\putwordChapter\\undefined   \\gdef\\putwordChapter{Chapter}\\fi\n\\ifx\\putwordfile\\undefined      \\gdef\\putwordfile{file}\\fi\n\\ifx\\putwordin\\undefined        \\gdef\\putwordin{in}\\fi\n\\ifx\\putwordIndexIsEmpty\\undefined     \\gdef\\putwordIndexIsEmpty{(Index is empty)}\\fi\n\\ifx\\putwordIndexNonexistent\\undefined \\gdef\\putwordIndexNonexistent{(Index is nonexistent)}\\fi\n\\ifx\\putwordInfo\\undefined      \\gdef\\putwordInfo{Info}\\fi\n\\ifx\\putwordInstanceVariableof\\undefined \\gdef\\putwordInstanceVariableof{Instance Variable of}\\fi\n\\ifx\\putwordMethodon\\undefined  \\gdef\\putwordMethodon{Method on}\\fi\n\\ifx\\putwordNoTitle\\undefined   \\gdef\\putwordNoTitle{No Title}\\fi\n\\ifx\\putwordof\\undefined        \\gdef\\putwordof{of}\\fi\n\\ifx\\putwordon\\undefined        \\gdef\\putwordon{on}\\fi\n\\ifx\\putwordpage\\undefined      \\gdef\\putwordpage{page}\\fi\n\\ifx\\putwordsection\\undefined   \\gdef\\putwordsection{section}\\fi\n\\ifx\\putwordSection\\undefined   \\gdef\\putwordSection{Section}\\fi\n\\ifx\\putwordsee\\undefined       \\gdef\\putwordsee{see}\\fi\n\\ifx\\putwordSee\\undefined       \\gdef\\putwordSee{See}\\fi\n\\ifx\\putwordShortTOC\\undefined  \\gdef\\putwordShortTOC{Short Contents}\\fi\n\\ifx\\putwordTOC\\undefined       \\gdef\\putwordTOC{Table of Contents}\\fi\n%\n\\ifx\\putwordMJan\\undefined \\gdef\\putwordMJan{January}\\fi\n\\ifx\\putwordMFeb\\undefined \\gdef\\putwordMFeb{February}\\fi\n\\ifx\\putwordMMar\\undefined \\gdef\\putwordMMar{March}\\fi\n\\ifx\\putwordMApr\\undefined \\gdef\\putwordMApr{April}\\fi\n\\ifx\\putwordMMay\\undefined \\gdef\\putwordMMay{May}\\fi\n\\ifx\\putwordMJun\\undefined \\gdef\\putwordMJun{June}\\fi\n\\ifx\\putwordMJul\\undefined \\gdef\\putwordMJul{July}\\fi\n\\ifx\\putwordMAug\\undefined \\gdef\\putwordMAug{August}\\fi\n\\ifx\\putwordMSep\\undefined \\gdef\\putwordMSep{September}\\fi\n\\ifx\\putwordMOct\\undefined \\gdef\\putwordMOct{October}\\fi\n\\ifx\\putwordMNov\\undefined \\gdef\\putwordMNov{November}\\fi\n\\ifx\\putwordMDec\\undefined \\gdef\\putwordMDec{December}\\fi\n%\n\\ifx\\putwordDefmac\\undefined    \\gdef\\putwordDefmac{Macro}\\fi\n\\ifx\\putwordDefspec\\undefined   \\gdef\\putwordDefspec{Special Form}\\fi\n\\ifx\\putwordDefvar\\undefined    \\gdef\\putwordDefvar{Variable}\\fi\n\\ifx\\putwordDefopt\\undefined    \\gdef\\putwordDefopt{User Option}\\fi\n\\ifx\\putwordDeffunc\\undefined   \\gdef\\putwordDeffunc{Function}\\fi\n\n% Since the category of space is not known, we have to be careful.\n\\chardef\\spacecat = 10\n\\def\\spaceisspace{\\catcode`\\ =\\spacecat}\n\n% Ignore a token.\n%\n\\def\\gobble#1{}\n\n% The following is used inside several \\edef's.\n\\def\\makecsname#1{\\expandafter\\noexpand\\csname#1\\endcsname}\n\n% Hyphenation fixes.\n\\hyphenation{\n  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script\n  ap-pen-dix bit-map bit-maps\n  data-base data-bases eshell fall-ing half-way long-est man-u-script\n  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm\n  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces\n  spell-ing spell-ings\n  stand-alone strong-est time-stamp time-stamps which-ever white-space\n  wide-spread wrap-around\n}\n\n% Margin to add to right of even pages, to left of odd pages.\n\\newdimen\\bindingoffset\n\\newdimen\\normaloffset\n\\newdimen\\pagewidth \\newdimen\\pageheight\n\n% For a final copy, take out the rectangles\n% that mark overfull boxes (in case you have decided\n% that the text looks ok even though it passes the margin).\n%\n\\def\\finalout{\\overfullrule=0pt}\n\n% @| inserts a changebar to the left of the current line.  It should\n% surround any changed text.  This approach does *not* work if the\n% change spans more than two lines of output.  To handle that, we would\n% have adopt a much more difficult approach (putting marks into the main\n% vertical list for the beginning and end of each change).\n%\n\\def\\|{%\n  % \\vadjust can only be used in horizontal mode.\n  \\leavevmode\n  %\n  % Append this vertical mode material after the current line in the output.\n  \\vadjust{%\n    % We want to insert a rule with the height and depth of the current\n    % leading; that is exactly what \\strutbox is supposed to record.\n    \\vskip-\\baselineskip\n    %\n    % \\vadjust-items are inserted at the left edge of the type.  So\n    % the \\llap here moves out into the left-hand margin.\n    \\llap{%\n      %\n      % For a thicker or thinner bar, change the `1pt'.\n      \\vrule height\\baselineskip width1pt\n      %\n      % This is the space between the bar and the text.\n      \\hskip 12pt\n    }%\n  }%\n}\n\n% Sometimes it is convenient to have everything in the transcript file\n% and nothing on the terminal.  We don't just call \\tracingall here,\n% since that produces some useless output on the terminal.  We also make\n% some effort to order the tracing commands to reduce output in the log\n% file; cf. trace.sty in LaTeX.\n%\n\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\loggingall \\endgroup}%\n\\def\\loggingall{%\n  \\tracingstats2\n  \\tracingpages1\n  \\tracinglostchars2  % 2 gives us more in etex\n  \\tracingparagraphs1\n  \\tracingoutput1\n  \\tracingmacros2\n  \\tracingrestores1\n  \\showboxbreadth\\maxdimen \\showboxdepth\\maxdimen\n  \\ifx\\eTeXversion\\undefined\\else % etex gives us more logging\n    \\tracingscantokens1\n    \\tracingifs1\n    \\tracinggroups1\n    \\tracingnesting2\n    \\tracingassigns1\n  \\fi\n  \\tracingcommands3  % 3 gives us more in etex\n  \\errorcontextlines16\n}%\n\n% add check for \\lastpenalty to plain's definitions.  If the last thing\n% we did was a \\nobreak, we don't want to insert more space.\n%\n\\def\\smallbreak{\\ifnum\\lastpenalty<10000\\par\\ifdim\\lastskip<\\smallskipamount\n  \\removelastskip\\penalty-50\\smallskip\\fi\\fi}\n\\def\\medbreak{\\ifnum\\lastpenalty<10000\\par\\ifdim\\lastskip<\\medskipamount\n  \\removelastskip\\penalty-100\\medskip\\fi\\fi}\n\\def\\bigbreak{\\ifnum\\lastpenalty<10000\\par\\ifdim\\lastskip<\\bigskipamount\n  \\removelastskip\\penalty-200\\bigskip\\fi\\fi}\n\n% For @cropmarks command.\n% Do @cropmarks to get crop marks.\n%\n\\newif\\ifcropmarks\n\\let\\cropmarks = \\cropmarkstrue\n%\n% Dimensions to add cropmarks at corners.\n% Added by P. A. MacKay, 12 Nov. 1986\n%\n\\newdimen\\outerhsize \\newdimen\\outervsize % set by the paper size routines\n\\newdimen\\cornerlong  \\cornerlong=1pc\n\\newdimen\\cornerthick \\cornerthick=.3pt\n\\newdimen\\topandbottommargin \\topandbottommargin=.75in\n\n% Main output routine.\n\\chardef\\PAGE = 255\n\\output = {\\onepageout{\\pagecontents\\PAGE}}\n\n\\newbox\\headlinebox\n\\newbox\\footlinebox\n\n% \\onepageout takes a vbox as an argument.  Note that \\pagecontents\n% does insertions, but you have to call it yourself.\n\\def\\onepageout#1{%\n  \\ifcropmarks \\hoffset=0pt \\else \\hoffset=\\normaloffset \\fi\n  %\n  \\ifodd\\pageno  \\advance\\hoffset by \\bindingoffset\n  \\else \\advance\\hoffset by -\\bindingoffset\\fi\n  %\n  % Do this outside of the \\shipout so @code etc. will be expanded in\n  % the headline as they should be, not taken literally (outputting ''code).\n  \\setbox\\headlinebox = \\vbox{\\let\\hsize=\\pagewidth \\makeheadline}%\n  \\setbox\\footlinebox = \\vbox{\\let\\hsize=\\pagewidth \\makefootline}%\n  %\n  {%\n    % Have to do this stuff outside the \\shipout because we want it to\n    % take effect in \\write's, yet the group defined by the \\vbox ends\n    % before the \\shipout runs.\n    %\n    \\indexdummies         % don't expand commands in the output.\n    \\normalturnoffactive  % \\ in index entries must not stay \\, e.g., if\n               % the page break happens to be in the middle of an example.\n               % We don't want .vr (or whatever) entries like this:\n               % \\entry{{\\tt \\indexbackslash }acronym}{32}{\\code {\\acronym}}\n               % \"\\acronym\" won't work when it's read back in;\n               % it needs to be \n               % {\\code {{\\tt \\backslashcurfont }acronym}\n    \\shipout\\vbox{%\n      % Do this early so pdf references go to the beginning of the page.\n      \\ifpdfmakepagedest \\pdfdest name{\\the\\pageno} xyz\\fi\n      %\n      \\ifcropmarks \\vbox to \\outervsize\\bgroup\n        \\hsize = \\outerhsize\n        \\vskip-\\topandbottommargin\n        \\vtop to0pt{%\n          \\line{\\ewtop\\hfil\\ewtop}%\n          \\nointerlineskip\n          \\line{%\n            \\vbox{\\moveleft\\cornerthick\\nstop}%\n            \\hfill\n            \\vbox{\\moveright\\cornerthick\\nstop}%\n          }%\n          \\vss}%\n        \\vskip\\topandbottommargin\n        \\line\\bgroup\n          \\hfil % center the page within the outer (page) hsize.\n          \\ifodd\\pageno\\hskip\\bindingoffset\\fi\n          \\vbox\\bgroup\n      \\fi\n      %\n      \\unvbox\\headlinebox\n      \\pagebody{#1}%\n      \\ifdim\\ht\\footlinebox > 0pt\n        % Only leave this space if the footline is nonempty.\n        % (We lessened \\vsize for it in \\oddfootingxxx.)\n        % The \\baselineskip=24pt in plain's \\makefootline has no effect.\n        \\vskip 2\\baselineskip\n        \\unvbox\\footlinebox\n      \\fi\n      %\n      \\ifcropmarks\n          \\egroup % end of \\vbox\\bgroup\n        \\hfil\\egroup % end of (centering) \\line\\bgroup\n        \\vskip\\topandbottommargin plus1fill minus1fill\n        \\boxmaxdepth = \\cornerthick\n        \\vbox to0pt{\\vss\n          \\line{%\n            \\vbox{\\moveleft\\cornerthick\\nsbot}%\n            \\hfill\n            \\vbox{\\moveright\\cornerthick\\nsbot}%\n          }%\n          \\nointerlineskip\n          \\line{\\ewbot\\hfil\\ewbot}%\n        }%\n      \\egroup % \\vbox from first cropmarks clause\n      \\fi\n    }% end of \\shipout\\vbox\n  }% end of group with \\indexdummies\n  \\advancepageno\n  \\ifnum\\outputpenalty>-20000 \\else\\dosupereject\\fi\n}\n\n\\newinsert\\margin \\dimen\\margin=\\maxdimen\n\n\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\maxdepth #1}}\n{\\catcode`\\@ =11\n\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\topins\\fi\n% marginal hacks, juha@viisa.uucp (Juha Takala)\n\\ifvoid\\margin\\else % marginal info is present\n  \\rlap{\\kern\\hsize\\vbox to\\z@{\\kern1pt\\box\\margin \\vss}}\\fi\n\\dimen@=\\dp#1 \\unvbox#1\n\\ifvoid\\footins\\else\\vskip\\skip\\footins\\footnoterule \\unvbox\\footins\\fi\n\\ifr@ggedbottom \\kern-\\dimen@ \\vfil \\fi}\n}\n\n% Here are the rules for the cropmarks.  Note that they are\n% offset so that the space between them is truly \\outerhsize or \\outervsize\n% (P. A. MacKay, 12 November, 1986)\n%\n\\def\\ewtop{\\vrule height\\cornerthick depth0pt width\\cornerlong}\n\\def\\nstop{\\vbox\n  {\\hrule height\\cornerthick depth\\cornerlong width\\cornerthick}}\n\\def\\ewbot{\\vrule height0pt depth\\cornerthick width\\cornerlong}\n\\def\\nsbot{\\vbox\n  {\\hrule height\\cornerlong depth\\cornerthick width\\cornerthick}}\n\n% Parse an argument, then pass it to #1.  The argument is the rest of\n% the input line (except we remove a trailing comment).  #1 should be a\n% macro which expects an ordinary undelimited TeX argument.\n%\n\\def\\parsearg{\\parseargusing{}}\n\\def\\parseargusing#1#2{%\n  \\def\\argtorun{#2}%\n  \\begingroup\n    \\obeylines\n    \\spaceisspace\n    #1%\n    \\parseargline\\empty% Insert the \\empty token, see \\finishparsearg below.\n}\n\n{\\obeylines %\n  \\gdef\\parseargline#1^^M{%\n    \\endgroup % End of the group started in \\parsearg.\n    \\argremovecomment #1\\comment\\ArgTerm%\n  }%\n}\n\n% First remove any @comment, then any @c comment.\n\\def\\argremovecomment#1\\comment#2\\ArgTerm{\\argremovec #1\\c\\ArgTerm}\n\\def\\argremovec#1\\c#2\\ArgTerm{\\argcheckspaces#1\\^^M\\ArgTerm}\n\n% Each occurence of `\\^^M' or `<space>\\^^M' is replaced by a single space.\n%\n% \\argremovec might leave us with trailing space, e.g.,\n%    @end itemize  @c foo\n% This space token undergoes the same procedure and is eventually removed\n% by \\finishparsearg.\n%\n\\def\\argcheckspaces#1\\^^M{\\argcheckspacesX#1\\^^M \\^^M}\n\\def\\argcheckspacesX#1 \\^^M{\\argcheckspacesY#1\\^^M}\n\\def\\argcheckspacesY#1\\^^M#2\\^^M#3\\ArgTerm{%\n  \\def\\temp{#3}%\n  \\ifx\\temp\\empty\n    % Do not use \\next, perhaps the caller of \\parsearg uses it; reuse \\temp:\n    \\let\\temp\\finishparsearg\n  \\else\n    \\let\\temp\\argcheckspaces\n  \\fi\n  % Put the space token in:\n  \\temp#1 #3\\ArgTerm\n}\n\n% If a _delimited_ argument is enclosed in braces, they get stripped; so\n% to get _exactly_ the rest of the line, we had to prevent such situation.\n% We prepended an \\empty token at the very beginning and we expand it now,\n% just before passing the control to \\argtorun.\n% (Similarily, we have to think about #3 of \\argcheckspacesY above: it is\n% either the null string, or it ends with \\^^M---thus there is no danger\n% that a pair of braces would be stripped.\n%\n% But first, we have to remove the trailing space token.\n%\n\\def\\finishparsearg#1 \\ArgTerm{\\expandafter\\argtorun\\expandafter{#1}}\n\n% \\parseargdef\\foo{...}\n%\tis roughly equivalent to\n% \\def\\foo{\\parsearg\\Xfoo}\n% \\def\\Xfoo#1{...}\n%\n% Actually, I use \\csname\\string\\foo\\endcsname, ie. \\\\foo, as it is my\n% favourite TeX trick.  --kasal, 16nov03\n\n\\def\\parseargdef#1{%\n  \\expandafter \\doparseargdef \\csname\\string#1\\endcsname #1%\n}\n\\def\\doparseargdef#1#2{%\n  \\def#2{\\parsearg#1}%\n  \\def#1##1%\n}\n\n% Several utility definitions with active space:\n{\n  \\obeyspaces\n  \\gdef\\obeyedspace{ }\n\n  % Make each space character in the input produce a normal interword\n  % space in the output.  Don't allow a line break at this space, as this\n  % is used only in environments like @example, where each line of input\n  % should produce a line of output anyway.\n  %\n  \\gdef\\sepspaces{\\obeyspaces\\let =\\tie}\n\n  % If an index command is used in an @example environment, any spaces\n  % therein should become regular spaces in the raw index file, not the\n  % expansion of \\tie (\\leavevmode \\penalty \\@M \\ ).\n  \\gdef\\unsepspaces{\\let =\\space}\n}\n\n\n\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else \\let\\next=\\relax \\fi \\next}\n\n% Define the framework for environments in texinfo.tex.  It's used like this:\n%\n%   \\envdef\\foo{...}\n%   \\def\\Efoo{...}\n%\n% It's the responsibility of \\envdef to insert \\begingroup before the\n% actual body; @end closes the group after calling \\Efoo.  \\envdef also\n% defines \\thisenv, so the current environment is known; @end checks\n% whether the environment name matches.  The \\checkenv macro can also be\n% used to check whether the current environment is the one expected.\n%\n% Non-false conditionals (@iftex, @ifset) don't fit into this, so they\n% are not treated as enviroments; they don't open a group.  (The\n% implementation of @end takes care not to call \\endgroup in this\n% special case.)\n\n\n% At runtime, environments start with this:\n\\def\\startenvironment#1{\\begingroup\\def\\thisenv{#1}}\n% initialize\n\\let\\thisenv\\empty\n\n% ... but they get defined via ``\\envdef\\foo{...}'':\n\\long\\def\\envdef#1#2{\\def#1{\\startenvironment#1#2}}\n\\def\\envparseargdef#1#2{\\parseargdef#1{\\startenvironment#1#2}}\n\n% Check whether we're in the right environment:\n\\def\\checkenv#1{%\n  \\def\\temp{#1}%\n  \\ifx\\thisenv\\temp\n  \\else\n    \\badenverr\n  \\fi\n}\n\n% Evironment mismatch, #1 expected:\n\\def\\badenverr{%\n  \\errhelp = \\EMsimple\n  \\errmessage{This command can appear only \\inenvironment\\temp,\n    not \\inenvironment\\thisenv}%\n}\n\\def\\inenvironment#1{%\n  \\ifx#1\\empty\n    out of any environment%\n  \\else\n    in environment \\expandafter\\string#1%\n  \\fi\n}\n\n% @end foo executes the definition of \\Efoo.\n% But first, it executes a specialized version of \\checkenv\n%\n\\parseargdef\\end{%\n  \\if 1\\csname iscond.#1\\endcsname\n  \\else\n    % The general wording of \\badenverr may not be ideal, but... --kasal, 06nov03\n    \\expandafter\\checkenv\\csname#1\\endcsname\n    \\csname E#1\\endcsname\n    \\endgroup\n  \\fi\n}\n\n\\newhelp\\EMsimple{Press RETURN to continue.}\n\n\n%% Simple single-character @ commands\n\n% @@ prints an @\n% Kludge this until the fonts are right (grr).\n\\def\\@{{\\tt\\char64}}\n\n% This is turned off because it was never documented\n% and you can use @w{...} around a quote to suppress ligatures.\n%% Define @` and @' to be the same as ` and '\n%% but suppressing ligatures.\n%\\def\\`{{`}}\n%\\def\\'{{'}}\n\n% Used to generate quoted braces.\n\\def\\mylbrace {{\\tt\\char123}}\n\\def\\myrbrace {{\\tt\\char125}}\n\\let\\{=\\mylbrace\n\\let\\}=\\myrbrace\n\\begingroup\n  % Definitions to produce \\{ and \\} commands for indices,\n  % and @{ and @} for the aux/toc files.\n  \\catcode`\\{ = \\other \\catcode`\\} = \\other\n  \\catcode`\\[ = 1 \\catcode`\\] = 2\n  \\catcode`\\! = 0 \\catcode`\\\\ = \\other\n  !gdef!lbracecmd[\\{]%\n  !gdef!rbracecmd[\\}]%\n  !gdef!lbraceatcmd[@{]%\n  !gdef!rbraceatcmd[@}]%\n!endgroup\n\n% @comma{} to avoid , parsing problems.\n\\let\\comma = ,\n\n% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent\n% Others are defined by plain TeX: @` @' @\" @^ @~ @= @u @v @H.\n\\let\\, = \\c\n\\let\\dotaccent = \\.\n\\def\\ringaccent#1{{\\accent23 #1}}\n\\let\\tieaccent = \\t\n\\let\\ubaraccent = \\b\n\\let\\udotaccent = \\d\n\n% Other special characters: @questiondown @exclamdown @ordf @ordm\n% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.\n\\def\\questiondown{?`}\n\\def\\exclamdown{!`}\n\\def\\ordf{\\leavevmode\\raise1ex\\hbox{\\selectfonts\\lllsize \\underbar{a}}}\n\\def\\ordm{\\leavevmode\\raise1ex\\hbox{\\selectfonts\\lllsize \\underbar{o}}}\n\n% Dotless i and dotless j, used for accents.\n\\def\\imacro{i}\n\\def\\jmacro{j}\n\\def\\dotless#1{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\imacro \\ptexi\n  \\else\\ifx\\temp\\jmacro \\j\n  \\else \\errmessage{@dotless can be used only with i or j}%\n  \\fi\\fi\n}\n\n% The \\TeX{} logo, as in plain, but resetting the spacing so that a\n% period following counts as ending a sentence.  (Idea found in latex.)\n%\n\\edef\\TeX{\\TeX \\spacefactor=1000 }\n\n% @LaTeX{} logo.  Not quite the same results as the definition in\n% latex.ltx, since we use a different font for the raised A; it's most\n% convenient for us to use an explicitly smaller font, rather than using\n% the \\scriptstyle font (since we don't reset \\scriptstyle and\n% \\scriptscriptstyle).\n%\n\\def\\LaTeX{%\n  L\\kern-.36em\n  {\\setbox0=\\hbox{T}%\n   \\vbox to \\ht0{\\hbox{\\selectfonts\\lllsize A}\\vss}}%\n  \\kern-.15em\n  \\TeX\n}\n\n% Be sure we're in horizontal mode when doing a tie, since we make space\n% equivalent to this in @example-like environments. Otherwise, a space\n% at the beginning of a line will start with \\penalty -- and\n% since \\penalty is valid in vertical mode, we'd end up putting the\n% penalty on the vertical list instead of in the new paragraph.\n{\\catcode`@ = 11\n % Avoid using \\@M directly, because that causes trouble\n % if the definition is written into an index file.\n \\global\\let\\tiepenalty = \\@M\n \\gdef\\tie{\\leavevmode\\penalty\\tiepenalty\\ }\n}\n\n% @: forces normal size whitespace following.\n\\def\\:{\\spacefactor=1000 }\n\n% @* forces a line break.\n\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}\n\n% @/ allows a line break.\n\\let\\/=\\allowbreak\n\n% @. is an end-of-sentence period.\n\\def\\.{.\\spacefactor=\\endofsentencespacefactor\\space}\n\n% @! is an end-of-sentence bang.\n\\def\\!{!\\spacefactor=\\endofsentencespacefactor\\space}\n\n% @? is an end-of-sentence query.\n\\def\\?{?\\spacefactor=\\endofsentencespacefactor\\space}\n\n% @frenchspacing on|off  says whether to put extra space after punctuation.\n% \n\\def\\onword{on}\n\\def\\offword{off}\n%\n\\parseargdef\\frenchspacing{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\onword \\plainfrenchspacing\n  \\else\\ifx\\temp\\offword \\plainnonfrenchspacing\n  \\else\n    \\errhelp = \\EMsimple\n    \\errmessage{Unknown @frenchspacing option `\\temp', must be on/off}%\n  \\fi\\fi\n}\n\n% @w prevents a word break.  Without the \\leavevmode, @w at the\n% beginning of a paragraph, when TeX is still in vertical mode, would\n% produce a whole line of output instead of starting the paragraph.\n\\def\\w#1{\\leavevmode\\hbox{#1}}\n\n% @group ... @end group forces ... to be all on one page, by enclosing\n% it in a TeX vbox.  We use \\vtop instead of \\vbox to construct the box\n% to keep its height that of a normal line.  According to the rules for\n% \\topskip (p.114 of the TeXbook), the glue inserted is\n% max (\\topskip - \\ht (first item), 0).  If that height is large,\n% therefore, no glue is inserted, and the space between the headline and\n% the text is small, which looks bad.\n%\n% Another complication is that the group might be very large.  This can\n% cause the glue on the previous page to be unduly stretched, because it\n% does not have much material.  In this case, it's better to add an\n% explicit \\vfill so that the extra space is at the bottom.  The\n% threshold for doing this is if the group is more than \\vfilllimit\n% percent of a page (\\vfilllimit can be changed inside of @tex).\n%\n\\newbox\\groupbox\n\\def\\vfilllimit{0.7}\n%\n\\envdef\\group{%\n  \\ifnum\\catcode`\\^^M=\\active \\else\n    \\errhelp = \\groupinvalidhelp\n    \\errmessage{@group invalid in context where filling is enabled}%\n  \\fi\n  \\startsavinginserts\n  %\n  \\setbox\\groupbox = \\vtop\\bgroup\n    % Do @comment since we are called inside an environment such as\n    % @example, where each end-of-line in the input causes an\n    % end-of-line in the output.  We don't want the end-of-line after\n    % the `@group' to put extra space in the output.  Since @group\n    % should appear on a line by itself (according to the Texinfo\n    % manual), we don't worry about eating any user text.\n    \\comment\n}\n%\n% The \\vtop produces a box with normal height and large depth; thus, TeX puts\n% \\baselineskip glue before it, and (when the next line of text is done)\n% \\lineskip glue after it.  Thus, space below is not quite equal to space\n% above.  But it's pretty close.\n\\def\\Egroup{%\n    % To get correct interline space between the last line of the group\n    % and the first line afterwards, we have to propagate \\prevdepth.\n    \\endgraf % Not \\par, as it may have been set to \\lisppar.\n    \\global\\dimen1 = \\prevdepth\n  \\egroup           % End the \\vtop.\n  % \\dimen0 is the vertical size of the group's box.\n  \\dimen0 = \\ht\\groupbox  \\advance\\dimen0 by \\dp\\groupbox\n  % \\dimen2 is how much space is left on the page (more or less).\n  \\dimen2 = \\pageheight   \\advance\\dimen2 by -\\pagetotal\n  % if the group doesn't fit on the current page, and it's a big big\n  % group, force a page break.\n  \\ifdim \\dimen0 > \\dimen2\n    \\ifdim \\pagetotal < \\vfilllimit\\pageheight\n      \\page\n    \\fi\n  \\fi\n  \\box\\groupbox\n  \\prevdepth = \\dimen1\n  \\checkinserts\n}\n%\n% TeX puts in an \\escapechar (i.e., `@') at the beginning of the help\n% message, so this ends up printing `@group can only ...'.\n%\n\\newhelp\\groupinvalidhelp{%\ngroup can only be used in environments such as @example,^^J%\nwhere each line of input produces a line of output.}\n\n% @need space-in-mils\n% forces a page break if there is not space-in-mils remaining.\n\n\\newdimen\\mil  \\mil=0.001in\n\n% Old definition--didn't work.\n%\\parseargdef\\need{\\par %\n%% This method tries to make TeX break the page naturally\n%% if the depth of the box does not fit.\n%{\\baselineskip=0pt%\n%\\vtop to #1\\mil{\\vfil}\\kern -#1\\mil\\nobreak\n%\\prevdepth=-1000pt\n%}}\n\n\\parseargdef\\need{%\n  % Ensure vertical mode, so we don't make a big box in the middle of a\n  % paragraph.\n  \\par\n  %\n  % If the @need value is less than one line space, it's useless.\n  \\dimen0 = #1\\mil\n  \\dimen2 = \\ht\\strutbox\n  \\advance\\dimen2 by \\dp\\strutbox\n  \\ifdim\\dimen0 > \\dimen2\n    %\n    % Do a \\strut just to make the height of this box be normal, so the\n    % normal leading is inserted relative to the preceding line.\n    % And a page break here is fine.\n    \\vtop to #1\\mil{\\strut\\vfil}%\n    %\n    % TeX does not even consider page breaks if a penalty added to the\n    % main vertical list is 10000 or more.  But in order to see if the\n    % empty box we just added fits on the page, we must make it consider\n    % page breaks.  On the other hand, we don't want to actually break the\n    % page after the empty box.  So we use a penalty of 9999.\n    %\n    % There is an extremely small chance that TeX will actually break the\n    % page at this \\penalty, if there are no other feasible breakpoints in\n    % sight.  (If the user is using lots of big @group commands, which\n    % almost-but-not-quite fill up a page, TeX will have a hard time doing\n    % good page breaking, for example.)  However, I could not construct an\n    % example where a page broke at this \\penalty; if it happens in a real\n    % document, then we can reconsider our strategy.\n    \\penalty9999\n    %\n    % Back up by the size of the box, whether we did a page break or not.\n    \\kern -#1\\mil\n    %\n    % Do not allow a page break right after this kern.\n    \\nobreak\n  \\fi\n}\n\n% @br   forces paragraph break (and is undocumented).\n\n\\let\\br = \\par\n\n% @page forces the start of a new page.\n%\n\\def\\page{\\par\\vfill\\supereject}\n\n% @exdent text....\n% outputs text on separate line in roman font, starting at standard page margin\n\n% This records the amount of indent in the innermost environment.\n% That's how much \\exdent should take out.\n\\newskip\\exdentamount\n\n% This defn is used inside fill environments such as @defun.\n\\parseargdef\\exdent{\\hfil\\break\\hbox{\\kern -\\exdentamount{\\rm#1}}\\hfil\\break}\n\n% This defn is used inside nofill environments such as @example.\n\\parseargdef\\nofillexdent{{\\advance \\leftskip by -\\exdentamount\n  \\leftline{\\hskip\\leftskip{\\rm#1}}}}\n\n% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current\n% paragraph.  For more general purposes, use the \\margin insertion\n% class.  WHICH is `l' or `r'.\n%\n\\newskip\\inmarginspacing \\inmarginspacing=1cm\n\\def\\strutdepth{\\dp\\strutbox}\n%\n\\def\\doinmargin#1#2{\\strut\\vadjust{%\n  \\nobreak\n  \\kern-\\strutdepth\n  \\vtop to \\strutdepth{%\n    \\baselineskip=\\strutdepth\n    \\vss\n    % if you have multiple lines of stuff to put here, you'll need to\n    % make the vbox yourself of the appropriate size.\n    \\ifx#1l%\n      \\llap{\\ignorespaces #2\\hskip\\inmarginspacing}%\n    \\else\n      \\rlap{\\hskip\\hsize \\hskip\\inmarginspacing \\ignorespaces #2}%\n    \\fi\n    \\null\n  }%\n}}\n\\def\\inleftmargin{\\doinmargin l}\n\\def\\inrightmargin{\\doinmargin r}\n%\n% @inmargin{TEXT [, RIGHT-TEXT]}\n% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;\n% else use TEXT for both).\n%\n\\def\\inmargin#1{\\parseinmargin #1,,\\finish}\n\\def\\parseinmargin#1,#2,#3\\finish{% not perfect, but better than nothing.\n  \\setbox0 = \\hbox{\\ignorespaces #2}%\n  \\ifdim\\wd0 > 0pt\n    \\def\\lefttext{#1}%  have both texts\n    \\def\\righttext{#2}%\n  \\else\n    \\def\\lefttext{#1}%  have only one text\n    \\def\\righttext{#1}%\n  \\fi\n  %\n  \\ifodd\\pageno\n    \\def\\temp{\\inrightmargin\\righttext}% odd page -> outside is right margin\n  \\else\n    \\def\\temp{\\inleftmargin\\lefttext}%\n  \\fi\n  \\temp\n}\n\n% @include file    insert text of that file as input.\n%\n\\def\\include{\\parseargusing\\filenamecatcodes\\includezzz}\n\\def\\includezzz#1{%\n  \\pushthisfilestack\n  \\def\\thisfile{#1}%\n  {%\n    \\makevalueexpandable\n    \\def\\temp{\\input #1 }%\n    \\expandafter\n  }\\temp\n  \\popthisfilestack\n}\n\\def\\filenamecatcodes{%\n  \\catcode`\\\\=\\other\n  \\catcode`~=\\other\n  \\catcode`^=\\other\n  \\catcode`_=\\other\n  \\catcode`|=\\other\n  \\catcode`<=\\other\n  \\catcode`>=\\other\n  \\catcode`+=\\other\n  \\catcode`-=\\other\n}\n\n\\def\\pushthisfilestack{%\n  \\expandafter\\pushthisfilestackX\\popthisfilestack\\StackTerm\n}\n\\def\\pushthisfilestackX{%\n  \\expandafter\\pushthisfilestackY\\thisfile\\StackTerm\n}\n\\def\\pushthisfilestackY #1\\StackTerm #2\\StackTerm {%\n  \\gdef\\popthisfilestack{\\gdef\\thisfile{#1}\\gdef\\popthisfilestack{#2}}%\n}\n\n\\def\\popthisfilestack{\\errthisfilestackempty}\n\\def\\errthisfilestackempty{\\errmessage{Internal error:\n  the stack of filenames is empty.}}\n\n\\def\\thisfile{}\n\n% @center line\n% outputs that line, centered.\n%\n\\parseargdef\\center{%\n  \\ifhmode\n    \\let\\next\\centerH\n  \\else\n    \\let\\next\\centerV\n  \\fi\n  \\next{\\hfil \\ignorespaces#1\\unskip \\hfil}%\n}\n\\def\\centerH#1{%\n  {%\n    \\hfil\\break\n    \\advance\\hsize by -\\leftskip\n    \\advance\\hsize by -\\rightskip\n    \\line{#1}%\n    \\break\n  }%\n}\n\\def\\centerV#1{\\line{\\kern\\leftskip #1\\kern\\rightskip}}\n\n% @sp n   outputs n lines of vertical space\n\n\\parseargdef\\sp{\\vskip #1\\baselineskip}\n\n% @comment ...line which is ignored...\n% @c is the same as @comment\n% @ignore ... @end ignore  is another way to write a comment\n\n\\def\\comment{\\begingroup \\catcode`\\^^M=\\other%\n\\catcode`\\@=\\other \\catcode`\\{=\\other \\catcode`\\}=\\other%\n\\commentxxx}\n{\\catcode`\\^^M=\\other \\gdef\\commentxxx#1^^M{\\endgroup}}\n\n\\let\\c=\\comment\n\n% @paragraphindent NCHARS\n% We'll use ems for NCHARS, close enough.\n% NCHARS can also be the word `asis' or `none'.\n% We cannot feasibly implement @paragraphindent asis, though.\n%\n\\def\\asisword{asis} % no translation, these are keywords\n\\def\\noneword{none}\n%\n\\parseargdef\\paragraphindent{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\asisword\n  \\else\n    \\ifx\\temp\\noneword\n      \\defaultparindent = 0pt\n    \\else\n      \\defaultparindent = #1em\n    \\fi\n  \\fi\n  \\parindent = \\defaultparindent\n}\n\n% @exampleindent NCHARS\n% We'll use ems for NCHARS like @paragraphindent.\n% It seems @exampleindent asis isn't necessary, but\n% I preserve it to make it similar to @paragraphindent.\n\\parseargdef\\exampleindent{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\asisword\n  \\else\n    \\ifx\\temp\\noneword\n      \\lispnarrowing = 0pt\n    \\else\n      \\lispnarrowing = #1em\n    \\fi\n  \\fi\n}\n\n% @firstparagraphindent WORD\n% If WORD is `none', then suppress indentation of the first paragraph\n% after a section heading.  If WORD is `insert', then do indent at such\n% paragraphs.\n%\n% The paragraph indentation is suppressed or not by calling\n% \\suppressfirstparagraphindent, which the sectioning commands do.\n% We switch the definition of this back and forth according to WORD.\n% By default, we suppress indentation.\n%\n\\def\\suppressfirstparagraphindent{\\dosuppressfirstparagraphindent}\n\\def\\insertword{insert}\n%\n\\parseargdef\\firstparagraphindent{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\noneword\n    \\let\\suppressfirstparagraphindent = \\dosuppressfirstparagraphindent\n  \\else\\ifx\\temp\\insertword\n    \\let\\suppressfirstparagraphindent = \\relax\n  \\else\n    \\errhelp = \\EMsimple\n    \\errmessage{Unknown @firstparagraphindent option `\\temp'}%\n  \\fi\\fi\n}\n\n% Here is how we actually suppress indentation.  Redefine \\everypar to\n% \\kern backwards by \\parindent, and then reset itself to empty.\n%\n% We also make \\indent itself not actually do anything until the next\n% paragraph.\n%\n\\gdef\\dosuppressfirstparagraphindent{%\n  \\gdef\\indent{%\n    \\restorefirstparagraphindent\n    \\indent\n  }%\n  \\gdef\\noindent{%\n    \\restorefirstparagraphindent\n    \\noindent\n  }%\n  \\global\\everypar = {%\n    \\kern -\\parindent\n    \\restorefirstparagraphindent\n  }%\n}\n\n\\gdef\\restorefirstparagraphindent{%\n  \\global \\let \\indent = \\ptexindent\n  \\global \\let \\noindent = \\ptexnoindent\n  \\global \\everypar = {}%\n}\n\n\n% @asis just yields its argument.  Used with @table, for example.\n%\n\\def\\asis#1{#1}\n\n% @math outputs its argument in math mode.\n%\n% One complication: _ usually means subscripts, but it could also mean\n% an actual _ character, as in @math{@var{some_variable} + 1}.  So make\n% _ active, and distinguish by seeing if the current family is \\slfam,\n% which is what @var uses.\n{\n  \\catcode`\\_ = \\active\n  \\gdef\\mathunderscore{%\n    \\catcode`\\_=\\active\n    \\def_{\\ifnum\\fam=\\slfam \\_\\else\\sb\\fi}%\n  }\n}\n% Another complication: we want \\\\ (and @\\) to output a \\ character.\n% FYI, plain.tex uses \\\\ as a temporary control sequence (why?), but\n% this is not advertised and we don't care.  Texinfo does not\n% otherwise define @\\.\n%\n% The \\mathchar is class=0=ordinary, family=7=ttfam, position=5C=\\.\n\\def\\mathbackslash{\\ifnum\\fam=\\ttfam \\mathchar\"075C \\else\\backslash \\fi}\n%\n\\def\\math{%\n  \\tex\n  \\mathunderscore\n  \\let\\\\ = \\mathbackslash\n  \\mathactive\n  $\\finishmath\n}\n\\def\\finishmath#1{#1$\\endgroup}  % Close the group opened by \\tex.\n\n% Some active characters (such as <) are spaced differently in math.\n% We have to reset their definitions in case the @math was an argument\n% to a command which sets the catcodes (such as @item or @section).\n%\n{\n  \\catcode`^ = \\active\n  \\catcode`< = \\active\n  \\catcode`> = \\active\n  \\catcode`+ = \\active\n  \\gdef\\mathactive{%\n    \\let^ = \\ptexhat\n    \\let< = \\ptexless\n    \\let> = \\ptexgtr\n    \\let+ = \\ptexplus\n  }\n}\n\n% @bullet and @minus need the same treatment as @math, just above.\n\\def\\bullet{$\\ptexbullet$}\n\\def\\minus{$-$}\n\n% @dots{} outputs an ellipsis using the current font.\n% We do .5em per period so that it has the same spacing in a typewriter\n% font as three actual period characters.\n%\n\\def\\dots{%\n  \\leavevmode\n  \\hbox to 1.5em{%\n    \\hskip 0pt plus 0.25fil\n    .\\hfil.\\hfil.%\n    \\hskip 0pt plus 0.5fil\n  }%\n}\n\n% @enddots{} is an end-of-sentence ellipsis.\n%\n\\def\\enddots{%\n  \\dots\n  \\spacefactor=\\endofsentencespacefactor\n}\n\n% @comma{} is so commas can be inserted into text without messing up\n% Texinfo's parsing.\n%\n\\let\\comma = ,\n\n% @refill is a no-op.\n\\let\\refill=\\relax\n\n% If working on a large document in chapters, it is convenient to\n% be able to disable indexing, cross-referencing, and contents, for test runs.\n% This is done with @novalidate (before @setfilename).\n%\n\\newif\\iflinks \\linkstrue % by default we want the aux files.\n\\let\\novalidate = \\linksfalse\n\n% @setfilename is done at the beginning of every texinfo file.\n% So open here the files we need to have open while reading the input.\n% This makes it possible to make a .fmt file for texinfo.\n\\def\\setfilename{%\n   \\fixbackslash  % Turn off hack to swallow `\\input texinfo'.\n   \\iflinks\n     \\tryauxfile\n     % Open the new aux file.  TeX will close it automatically at exit.\n     \\immediate\\openout\\auxfile=\\jobname.aux\n   \\fi % \\openindices needs to do some work in any case.\n   \\openindices\n   \\let\\setfilename=\\comment % Ignore extra @setfilename cmds.\n   %\n   % If texinfo.cnf is present on the system, read it.\n   % Useful for site-wide @afourpaper, etc.\n   \\openin 1 texinfo.cnf\n   \\ifeof 1 \\else \\input texinfo.cnf \\fi\n   \\closein 1\n   %\n   \\comment % Ignore the actual filename.\n}\n\n% Called from \\setfilename.\n%\n\\def\\openindices{%\n  \\newindex{cp}%\n  \\newcodeindex{fn}%\n  \\newcodeindex{vr}%\n  \\newcodeindex{tp}%\n  \\newcodeindex{ky}%\n  \\newcodeindex{pg}%\n}\n\n% @bye.\n\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptexend}\n\n\n\\message{pdf,}\n% adobe `portable' document format\n\\newcount\\tempnum\n\\newcount\\lnkcount\n\\newtoks\\filename\n\\newcount\\filenamelength\n\\newcount\\pgn\n\\newtoks\\toksA\n\\newtoks\\toksB\n\\newtoks\\toksC\n\\newtoks\\toksD\n\\newbox\\boxA\n\\newcount\\countA\n\\newif\\ifpdf\n\\newif\\ifpdfmakepagedest\n\n% when pdftex is run in dvi mode, \\pdfoutput is defined (so \\pdfoutput=1\n% can be set).  So we test for \\relax and 0 as well as \\undefined,\n% borrowed from ifpdf.sty.\n\\ifx\\pdfoutput\\undefined\n\\else\n  \\ifx\\pdfoutput\\relax\n  \\else\n    \\ifcase\\pdfoutput\n    \\else\n      \\pdftrue\n    \\fi\n  \\fi\n\\fi\n\n% PDF uses PostScript string constants for the names of xref targets,\n% for display in the outlines, and in other places.  Thus, we have to\n% double any backslashes.  Otherwise, a name like \"\\node\" will be\n% interpreted as a newline (\\n), followed by o, d, e.  Not good.\n% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html\n% (and related messages, the final outcome is that it is up to the TeX\n% user to double the backslashes and otherwise make the string valid, so\n% that's what we do).\n\n% double active backslashes.\n% \n{\\catcode`\\@=0 \\catcode`\\\\=\\active\n @gdef@activebackslashdouble{%\n   @catcode`@\\=@active\n   @let\\=@doublebackslash}\n}\n\n% To handle parens, we must adopt a different approach, since parens are\n% not active characters.  hyperref.dtx (which has the same problem as\n% us) handles it with this amazing macro to replace tokens.  I've\n% tinkered with it a little for texinfo, but it's definitely from there.\n% \n% #1 is the tokens to replace.\n% #2 is the replacement.\n% #3 is the control sequence with the string.\n% \n\\def\\HyPsdSubst#1#2#3{%\n  \\def\\HyPsdReplace##1#1##2\\END{%\n    ##1%\n    \\ifx\\\\##2\\\\%\n    \\else\n      #2%\n      \\HyReturnAfterFi{%\n        \\HyPsdReplace##2\\END\n      }%\n    \\fi\n  }%\n  \\xdef#3{\\expandafter\\HyPsdReplace#3#1\\END}%\n}\n\\long\\def\\HyReturnAfterFi#1\\fi{\\fi#1}\n\n% #1 is a control sequence in which to do the replacements.\n\\def\\backslashparens#1{%\n  \\xdef#1{#1}% redefine it as its expansion; the definition is simply\n             % \\lastnode when called from \\setref -> \\pdfmkdest.\n  \\HyPsdSubst{(}{\\realbackslash(}{#1}%\n  \\HyPsdSubst{)}{\\realbackslash)}{#1}%\n}\n\n\\ifpdf\n  \\input pdfcolor\n  \\pdfcatalog{/PageMode /UseOutlines}%\n  \\def\\dopdfimage#1#2#3{%\n    \\def\\imagewidth{#2}%\n    \\def\\imageheight{#3}%\n    % without \\immediate, pdftex seg faults when the same image is\n    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)\n    \\ifnum\\pdftexversion < 14\n      \\immediate\\pdfimage\n    \\else\n      \\immediate\\pdfximage\n    \\fi\n      \\ifx\\empty\\imagewidth\\else width \\imagewidth \\fi\n      \\ifx\\empty\\imageheight\\else height \\imageheight \\fi\n      \\ifnum\\pdftexversion<13\n         #1.pdf%\n       \\else\n         {#1.pdf}%\n       \\fi\n    \\ifnum\\pdftexversion < 14 \\else\n      \\pdfrefximage \\pdflastximage\n    \\fi}\n  \\def\\pdfmkdest#1{{%\n    % We have to set dummies so commands such as @code, and characters\n    % such as \\, aren't expanded when present in a section title.\n    \\atdummies\n    \\activebackslashdouble\n    \\def\\pdfdestname{#1}%\n    \\backslashparens\\pdfdestname\n    \\pdfdest name{\\pdfdestname} xyz%\n  }}%\n  %\n  % used to mark target names; must be expandable.\n  \\def\\pdfmkpgn#1{#1}%\n  %\n  \\let\\linkcolor = \\Blue  % was Cyan, but that seems light?\n  \\def\\endlink{\\Black\\pdfendlink}\n  % Adding outlines to PDF; macros for calculating structure of outlines\n  % come from Petr Olsak\n  \\def\\expnumber#1{\\expandafter\\ifx\\csname#1\\endcsname\\relax 0%\n    \\else \\csname#1\\endcsname \\fi}\n  \\def\\advancenumber#1{\\tempnum=\\expnumber{#1}\\relax\n    \\advance\\tempnum by 1\n    \\expandafter\\xdef\\csname#1\\endcsname{\\the\\tempnum}}\n  %\n  % #1 is the section text, which is what will be displayed in the\n  % outline by the pdf viewer.  #2 is the pdf expression for the number\n  % of subentries (or empty, for subsubsections).  #3 is the node text,\n  % which might be empty if this toc entry had no corresponding node.\n  % #4 is the page number\n  %\n  \\def\\dopdfoutline#1#2#3#4{%\n    % Generate a link to the node text if that exists; else, use the\n    % page number.  We could generate a destination for the section\n    % text in the case where a section has no node, but it doesn't\n    % seem worth the trouble, since most documents are normally structured.\n    \\def\\pdfoutlinedest{#3}%\n    \\ifx\\pdfoutlinedest\\empty\n      \\def\\pdfoutlinedest{#4}%\n    \\else\n      % Doubled backslashes in the name.\n      {\\activebackslashdouble \\xdef\\pdfoutlinedest{#3}%\n       \\backslashparens\\pdfoutlinedest}%\n    \\fi\n    %\n    % Also double the backslashes in the display string.\n    {\\activebackslashdouble \\xdef\\pdfoutlinetext{#1}%\n     \\backslashparens\\pdfoutlinetext}%\n    %\n    \\pdfoutline goto name{\\pdfmkpgn{\\pdfoutlinedest}}#2{\\pdfoutlinetext}%\n  }\n  %\n  \\def\\pdfmakeoutlines{%\n    \\begingroup\n      % Thanh's hack / proper braces in bookmarks\n      \\edef\\mylbrace{\\iftrue \\string{\\else}\\fi}\\let\\{=\\mylbrace\n      \\edef\\myrbrace{\\iffalse{\\else\\string}\\fi}\\let\\}=\\myrbrace\n      %\n      % Read toc silently, to get counts of subentries for \\pdfoutline.\n      \\def\\numchapentry##1##2##3##4{%\n\t\\def\\thischapnum{##2}%\n\t\\def\\thissecnum{0}%\n\t\\def\\thissubsecnum{0}%\n      }%\n      \\def\\numsecentry##1##2##3##4{%\n\t\\advancenumber{chap\\thischapnum}%\n\t\\def\\thissecnum{##2}%\n\t\\def\\thissubsecnum{0}%\n      }%\n      \\def\\numsubsecentry##1##2##3##4{%\n\t\\advancenumber{sec\\thissecnum}%\n\t\\def\\thissubsecnum{##2}%\n      }%\n      \\def\\numsubsubsecentry##1##2##3##4{%\n\t\\advancenumber{subsec\\thissubsecnum}%\n      }%\n      \\def\\thischapnum{0}%\n      \\def\\thissecnum{0}%\n      \\def\\thissubsecnum{0}%\n      %\n      % use \\def rather than \\let here because we redefine \\chapentry et\n      % al. a second time, below.\n      \\def\\appentry{\\numchapentry}%\n      \\def\\appsecentry{\\numsecentry}%\n      \\def\\appsubsecentry{\\numsubsecentry}%\n      \\def\\appsubsubsecentry{\\numsubsubsecentry}%\n      \\def\\unnchapentry{\\numchapentry}%\n      \\def\\unnsecentry{\\numsecentry}%\n      \\def\\unnsubsecentry{\\numsubsecentry}%\n      \\def\\unnsubsubsecentry{\\numsubsubsecentry}%\n      \\readdatafile{toc}%\n      %\n      % Read toc second time, this time actually producing the outlines.\n      % The `-' means take the \\expnumber as the absolute number of\n      % subentries, which we calculated on our first read of the .toc above.\n      %\n      % We use the node names as the destinations.\n      \\def\\numchapentry##1##2##3##4{%\n        \\dopdfoutline{##1}{count-\\expnumber{chap##2}}{##3}{##4}}%\n      \\def\\numsecentry##1##2##3##4{%\n        \\dopdfoutline{##1}{count-\\expnumber{sec##2}}{##3}{##4}}%\n      \\def\\numsubsecentry##1##2##3##4{%\n        \\dopdfoutline{##1}{count-\\expnumber{subsec##2}}{##3}{##4}}%\n      \\def\\numsubsubsecentry##1##2##3##4{% count is always zero\n        \\dopdfoutline{##1}{}{##3}{##4}}%\n      %\n      % PDF outlines are displayed using system fonts, instead of\n      % document fonts.  Therefore we cannot use special characters,\n      % since the encoding is unknown.  For example, the eogonek from\n      % Latin 2 (0xea) gets translated to a | character.  Info from\n      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.\n      %\n      % xx to do this right, we have to translate 8-bit characters to\n      % their \"best\" equivalent, based on the @documentencoding.  Right\n      % now, I guess we'll just let the pdf reader have its way.\n      \\indexnofonts\n      \\setupdatafile\n      \\catcode`\\\\=\\active \\otherbackslash\n      \\input \\jobname.toc\n    \\endgroup\n  }\n  %\n  \\def\\skipspaces#1{\\def\\PP{#1}\\def\\D{|}%\n    \\ifx\\PP\\D\\let\\nextsp\\relax\n    \\else\\let\\nextsp\\skipspaces\n      \\ifx\\p\\space\\else\\addtokens{\\filename}{\\PP}%\n        \\advance\\filenamelength by 1\n      \\fi\n    \\fi\n    \\nextsp}\n  \\def\\getfilename#1{\\filenamelength=0\\expandafter\\skipspaces#1|\\relax}\n  \\ifnum\\pdftexversion < 14\n    \\let \\startlink \\pdfannotlink\n  \\else\n    \\let \\startlink \\pdfstartlink\n  \\fi\n  % make a live url in pdf output.\n  \\def\\pdfurl#1{%\n    \\begingroup\n      % it seems we really need yet another set of dummies; have not\n      % tried to figure out what each command should do in the context\n      % of @url.  for now, just make @/ a no-op, that's the only one\n      % people have actually reported a problem with.\n      % \n      \\normalturnoffactive\n      \\def\\@{@}%\n      \\let\\/=\\empty\n      \\makevalueexpandable\n      \\leavevmode\\Red\n      \\startlink attr{/Border [0 0 0]}%\n        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%\n    \\endgroup}\n  \\def\\pdfgettoks#1.{\\setbox\\boxA=\\hbox{\\toksA={#1.}\\toksB={}\\maketoks}}\n  \\def\\addtokens#1#2{\\edef\\addtoks{\\noexpand#1={\\the#1#2}}\\addtoks}\n  \\def\\adn#1{\\addtokens{\\toksC}{#1}\\global\\countA=1\\let\\next=\\maketoks}\n  \\def\\poptoks#1#2|ENDTOKS|{\\let\\first=#1\\toksD={#1}\\toksA={#2}}\n  \\def\\maketoks{%\n    \\expandafter\\poptoks\\the\\toksA|ENDTOKS|\\relax\n    \\ifx\\first0\\adn0\n    \\else\\ifx\\first1\\adn1 \\else\\ifx\\first2\\adn2 \\else\\ifx\\first3\\adn3\n    \\else\\ifx\\first4\\adn4 \\else\\ifx\\first5\\adn5 \\else\\ifx\\first6\\adn6\n    \\else\\ifx\\first7\\adn7 \\else\\ifx\\first8\\adn8 \\else\\ifx\\first9\\adn9\n    \\else\n      \\ifnum0=\\countA\\else\\makelink\\fi\n      \\ifx\\first.\\let\\next=\\done\\else\n        \\let\\next=\\maketoks\n        \\addtokens{\\toksB}{\\the\\toksD}\n        \\ifx\\first,\\addtokens{\\toksB}{\\space}\\fi\n      \\fi\n    \\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\n    \\next}\n  \\def\\makelink{\\addtokens{\\toksB}%\n    {\\noexpand\\pdflink{\\the\\toksC}}\\toksC={}\\global\\countA=0}\n  \\def\\pdflink#1{%\n    \\startlink attr{/Border [0 0 0]} goto name{\\pdfmkpgn{#1}}\n    \\linkcolor #1\\endlink}\n  \\def\\done{\\edef\\st{\\global\\noexpand\\toksA={\\the\\toksB}}\\st}\n\\else\n  \\let\\pdfmkdest = \\gobble\n  \\let\\pdfurl = \\gobble\n  \\let\\endlink = \\relax\n  \\let\\linkcolor = \\relax\n  \\let\\pdfmakeoutlines = \\relax\n\\fi  % \\ifx\\pdfoutput\n\n\n\\message{fonts,}\n\n% Change the current font style to #1, remembering it in \\curfontstyle.\n% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in\n% italics, not bold italics.\n%\n\\def\\setfontstyle#1{%\n  \\def\\curfontstyle{#1}% not as a control sequence, because we are \\edef'd.\n  \\csname ten#1\\endcsname  % change the current font\n}\n\n% Select #1 fonts with the current style.\n%\n\\def\\selectfonts#1{\\csname #1fonts\\endcsname \\csname\\curfontstyle\\endcsname}\n\n\\def\\rm{\\fam=0 \\setfontstyle{rm}}\n\\def\\it{\\fam=\\itfam \\setfontstyle{it}}\n\\def\\sl{\\fam=\\slfam \\setfontstyle{sl}}\n\\def\\bf{\\fam=\\bffam \\setfontstyle{bf}}\\def\\bfstylename{bf}\n\\def\\tt{\\fam=\\ttfam \\setfontstyle{tt}}\n\n% Texinfo sort of supports the sans serif font style, which plain TeX does not.\n% So we set up a \\sf.\n\\newfam\\sffam\n\\def\\sf{\\fam=\\sffam \\setfontstyle{sf}}\n\\let\\li = \\sf % Sometimes we call it \\li, not \\sf.\n\n% We don't need math for this font style.\n\\def\\ttsl{\\setfontstyle{ttsl}}\n\n% Default leading.\n\\newdimen\\textleading  \\textleading = 13.2pt\n\n% Set the baselineskip to #1, and the lineskip and strut size\n% correspondingly.  There is no deep meaning behind these magic numbers\n% used as factors; they just match (closely enough) what Knuth defined.\n%\n\\def\\lineskipfactor{.08333}\n\\def\\strutheightpercent{.70833}\n\\def\\strutdepthpercent {.29167}\n%\n\\def\\setleading#1{%\n  \\normalbaselineskip = #1\\relax\n  \\normallineskip = \\lineskipfactor\\normalbaselineskip\n  \\normalbaselines\n  \\setbox\\strutbox =\\hbox{%\n    \\vrule width0pt height\\strutheightpercent\\baselineskip\n                    depth \\strutdepthpercent \\baselineskip\n  }%\n}\n\n% Set the font macro #1 to the font named #2, adding on the\n% specified font prefix (normally `cm').\n% #3 is the font's design size, #4 is a scale factor\n\\def\\setfont#1#2#3#4{\\font#1=\\fontprefix#2#3 scaled #4}\n\n% Use cm as the default font prefix.\n% To specify the font prefix, you must define \\fontprefix\n% before you read in texinfo.tex.\n\\ifx\\fontprefix\\undefined\n\\def\\fontprefix{cm}\n\\fi\n% Support font families that don't use the same naming scheme as CM.\n\\def\\rmshape{r}\n\\def\\rmbshape{bx}               %where the normal face is bold\n\\def\\bfshape{b}\n\\def\\bxshape{bx}\n\\def\\ttshape{tt}\n\\def\\ttbshape{tt}\n\\def\\ttslshape{sltt}\n\\def\\itshape{ti}\n\\def\\itbshape{bxti}\n\\def\\slshape{sl}\n\\def\\slbshape{bxsl}\n\\def\\sfshape{ss}\n\\def\\sfbshape{ss}\n\\def\\scshape{csc}\n\\def\\scbshape{csc}\n\n% Text fonts (11.2pt, magstep1).\n\\def\\textnominalsize{11pt}\n\\edef\\mainmagstep{\\magstephalf}\n\\setfont\\textrm\\rmshape{10}{\\mainmagstep}\n\\setfont\\texttt\\ttshape{10}{\\mainmagstep}\n\\setfont\\textbf\\bfshape{10}{\\mainmagstep}\n\\setfont\\textit\\itshape{10}{\\mainmagstep}\n\\setfont\\textsl\\slshape{10}{\\mainmagstep}\n\\setfont\\textsf\\sfshape{10}{\\mainmagstep}\n\\setfont\\textsc\\scshape{10}{\\mainmagstep}\n\\setfont\\textttsl\\ttslshape{10}{\\mainmagstep}\n\\font\\texti=cmmi10 scaled \\mainmagstep\n\\font\\textsy=cmsy10 scaled \\mainmagstep\n\n% A few fonts for @defun names and args.\n\\setfont\\defbf\\bfshape{10}{\\magstep1}\n\\setfont\\deftt\\ttshape{10}{\\magstep1}\n\\setfont\\defttsl\\ttslshape{10}{\\magstep1}\n\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\let\\tenttsl=\\defttsl \\bf}\n\n% Fonts for indices, footnotes, small examples (9pt).\n\\def\\smallnominalsize{9pt}\n\\setfont\\smallrm\\rmshape{9}{1000}\n\\setfont\\smalltt\\ttshape{9}{1000}\n\\setfont\\smallbf\\bfshape{10}{900}\n\\setfont\\smallit\\itshape{9}{1000}\n\\setfont\\smallsl\\slshape{9}{1000}\n\\setfont\\smallsf\\sfshape{9}{1000}\n\\setfont\\smallsc\\scshape{10}{900}\n\\setfont\\smallttsl\\ttslshape{10}{900}\n\\font\\smalli=cmmi9\n\\font\\smallsy=cmsy9\n\n% Fonts for small examples (8pt).\n\\def\\smallernominalsize{8pt}\n\\setfont\\smallerrm\\rmshape{8}{1000}\n\\setfont\\smallertt\\ttshape{8}{1000}\n\\setfont\\smallerbf\\bfshape{10}{800}\n\\setfont\\smallerit\\itshape{8}{1000}\n\\setfont\\smallersl\\slshape{8}{1000}\n\\setfont\\smallersf\\sfshape{8}{1000}\n\\setfont\\smallersc\\scshape{10}{800}\n\\setfont\\smallerttsl\\ttslshape{10}{800}\n\\font\\smalleri=cmmi8\n\\font\\smallersy=cmsy8\n\n% Fonts for title page (20.4pt):\n\\def\\titlenominalsize{20pt}\n\\setfont\\titlerm\\rmbshape{12}{\\magstep3}\n\\setfont\\titleit\\itbshape{10}{\\magstep4}\n\\setfont\\titlesl\\slbshape{10}{\\magstep4}\n\\setfont\\titlett\\ttbshape{12}{\\magstep3}\n\\setfont\\titlettsl\\ttslshape{10}{\\magstep4}\n\\setfont\\titlesf\\sfbshape{17}{\\magstep1}\n\\let\\titlebf=\\titlerm\n\\setfont\\titlesc\\scbshape{10}{\\magstep4}\n\\font\\titlei=cmmi12 scaled \\magstep3\n\\font\\titlesy=cmsy10 scaled \\magstep4\n\\def\\authorrm{\\secrm}\n\\def\\authortt{\\sectt}\n\n% Chapter (and unnumbered) fonts (17.28pt).\n\\def\\chapnominalsize{17pt}\n\\setfont\\chaprm\\rmbshape{12}{\\magstep2}\n\\setfont\\chapit\\itbshape{10}{\\magstep3}\n\\setfont\\chapsl\\slbshape{10}{\\magstep3}\n\\setfont\\chaptt\\ttbshape{12}{\\magstep2}\n\\setfont\\chapttsl\\ttslshape{10}{\\magstep3}\n\\setfont\\chapsf\\sfbshape{17}{1000}\n\\let\\chapbf=\\chaprm\n\\setfont\\chapsc\\scbshape{10}{\\magstep3}\n\\font\\chapi=cmmi12 scaled \\magstep2\n\\font\\chapsy=cmsy10 scaled \\magstep3\n\n% Section fonts (14.4pt).\n\\def\\secnominalsize{14pt}\n\\setfont\\secrm\\rmbshape{12}{\\magstep1}\n\\setfont\\secit\\itbshape{10}{\\magstep2}\n\\setfont\\secsl\\slbshape{10}{\\magstep2}\n\\setfont\\sectt\\ttbshape{12}{\\magstep1}\n\\setfont\\secttsl\\ttslshape{10}{\\magstep2}\n\\setfont\\secsf\\sfbshape{12}{\\magstep1}\n\\let\\secbf\\secrm\n\\setfont\\secsc\\scbshape{10}{\\magstep2}\n\\font\\seci=cmmi12 scaled \\magstep1\n\\font\\secsy=cmsy10 scaled \\magstep2\n\n% Subsection fonts (13.15pt).\n\\def\\ssecnominalsize{13pt}\n\\setfont\\ssecrm\\rmbshape{12}{\\magstephalf}\n\\setfont\\ssecit\\itbshape{10}{1315}\n\\setfont\\ssecsl\\slbshape{10}{1315}\n\\setfont\\ssectt\\ttbshape{12}{\\magstephalf}\n\\setfont\\ssecttsl\\ttslshape{10}{1315}\n\\setfont\\ssecsf\\sfbshape{12}{\\magstephalf}\n\\let\\ssecbf\\ssecrm\n\\setfont\\ssecsc\\scbshape{10}{1315}\n\\font\\sseci=cmmi12 scaled \\magstephalf\n\\font\\ssecsy=cmsy10 scaled 1315\n\n% Reduced fonts for @acro in text (10pt).\n\\def\\reducednominalsize{10pt}\n\\setfont\\reducedrm\\rmshape{10}{1000}\n\\setfont\\reducedtt\\ttshape{10}{1000}\n\\setfont\\reducedbf\\bfshape{10}{1000}\n\\setfont\\reducedit\\itshape{10}{1000}\n\\setfont\\reducedsl\\slshape{10}{1000}\n\\setfont\\reducedsf\\sfshape{10}{1000}\n\\setfont\\reducedsc\\scshape{10}{1000}\n\\setfont\\reducedttsl\\ttslshape{10}{1000}\n\\font\\reducedi=cmmi10\n\\font\\reducedsy=cmsy10\n\n% In order for the font changes to affect most math symbols and letters,\n% we have to define the \\textfont of the standard families.  Since\n% texinfo doesn't allow for producing subscripts and superscripts except\n% in the main text, we don't bother to reset \\scriptfont and\n% \\scriptscriptfont (which would also require loading a lot more fonts).\n%\n\\def\\resetmathfonts{%\n  \\textfont0=\\tenrm \\textfont1=\\teni \\textfont2=\\tensy\n  \\textfont\\itfam=\\tenit \\textfont\\slfam=\\tensl \\textfont\\bffam=\\tenbf\n  \\textfont\\ttfam=\\tentt \\textfont\\sffam=\\tensf\n}\n\n% The font-changing commands redefine the meanings of \\tenSTYLE, instead\n% of just \\STYLE.  We do this because \\STYLE needs to also set the\n% current \\fam for math mode.  Our \\STYLE (e.g., \\rm) commands hardwire\n% \\tenSTYLE to set the current font.\n%\n% Each font-changing command also sets the names \\lsize (one size lower)\n% and \\lllsize (three sizes lower).  These relative commands are used in\n% the LaTeX logo and acronyms.\n%\n% This all needs generalizing, badly.\n%\n\\def\\textfonts{%\n  \\let\\tenrm=\\textrm \\let\\tenit=\\textit \\let\\tensl=\\textsl\n  \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\smallcaps=\\textsc\n  \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\textsy\n  \\let\\tenttsl=\\textttsl\n  \\def\\curfontsize{text}%\n  \\def\\lsize{reduced}\\def\\lllsize{smaller}%\n  \\resetmathfonts \\setleading{\\textleading}}\n\\def\\titlefonts{%\n  \\let\\tenrm=\\titlerm \\let\\tenit=\\titleit \\let\\tensl=\\titlesl\n  \\let\\tenbf=\\titlebf \\let\\tentt=\\titlett \\let\\smallcaps=\\titlesc\n  \\let\\tensf=\\titlesf \\let\\teni=\\titlei \\let\\tensy=\\titlesy\n  \\let\\tenttsl=\\titlettsl\n  \\def\\curfontsize{title}%\n  \\def\\lsize{chap}\\def\\lllsize{subsec}%\n  \\resetmathfonts \\setleading{25pt}}\n\\def\\titlefont#1{{\\titlefonts\\rm #1}}\n\\def\\chapfonts{%\n  \\let\\tenrm=\\chaprm \\let\\tenit=\\chapit \\let\\tensl=\\chapsl\n  \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\smallcaps=\\chapsc\n  \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\chapsy\n  \\let\\tenttsl=\\chapttsl\n  \\def\\curfontsize{chap}%\n  \\def\\lsize{sec}\\def\\lllsize{text}%\n  \\resetmathfonts \\setleading{19pt}}\n\\def\\secfonts{%\n  \\let\\tenrm=\\secrm \\let\\tenit=\\secit \\let\\tensl=\\secsl\n  \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallcaps=\\secsc\n  \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\secsy\n  \\let\\tenttsl=\\secttsl\n  \\def\\curfontsize{sec}%\n  \\def\\lsize{subsec}\\def\\lllsize{reduced}%\n  \\resetmathfonts \\setleading{16pt}}\n\\def\\subsecfonts{%\n  \\let\\tenrm=\\ssecrm \\let\\tenit=\\ssecit \\let\\tensl=\\ssecsl\n  \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\smallcaps=\\ssecsc\n  \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\ssecsy\n  \\let\\tenttsl=\\ssecttsl\n  \\def\\curfontsize{ssec}%\n  \\def\\lsize{text}\\def\\lllsize{small}%\n  \\resetmathfonts \\setleading{15pt}}\n\\let\\subsubsecfonts = \\subsecfonts\n\\def\\reducedfonts{%\n  \\let\\tenrm=\\reducedrm \\let\\tenit=\\reducedit \\let\\tensl=\\reducedsl\n  \\let\\tenbf=\\reducedbf \\let\\tentt=\\reducedtt \\let\\reducedcaps=\\reducedsc\n  \\let\\tensf=\\reducedsf \\let\\teni=\\reducedi \\let\\tensy=\\reducedsy\n  \\let\\tenttsl=\\reducedttsl\n  \\def\\curfontsize{reduced}%\n  \\def\\lsize{small}\\def\\lllsize{smaller}%\n  \\resetmathfonts \\setleading{10.5pt}}\n\\def\\smallfonts{%\n  \\let\\tenrm=\\smallrm \\let\\tenit=\\smallit \\let\\tensl=\\smallsl\n  \\let\\tenbf=\\smallbf \\let\\tentt=\\smalltt \\let\\smallcaps=\\smallsc\n  \\let\\tensf=\\smallsf \\let\\teni=\\smalli \\let\\tensy=\\smallsy\n  \\let\\tenttsl=\\smallttsl\n  \\def\\curfontsize{small}%\n  \\def\\lsize{smaller}\\def\\lllsize{smaller}%\n  \\resetmathfonts \\setleading{10.5pt}}\n\\def\\smallerfonts{%\n  \\let\\tenrm=\\smallerrm \\let\\tenit=\\smallerit \\let\\tensl=\\smallersl\n  \\let\\tenbf=\\smallerbf \\let\\tentt=\\smallertt \\let\\smallcaps=\\smallersc\n  \\let\\tensf=\\smallersf \\let\\teni=\\smalleri \\let\\tensy=\\smallersy\n  \\let\\tenttsl=\\smallerttsl\n  \\def\\curfontsize{smaller}%\n  \\def\\lsize{smaller}\\def\\lllsize{smaller}%\n  \\resetmathfonts \\setleading{9.5pt}}\n\n% Set the fonts to use with the @small... environments.\n\\let\\smallexamplefonts = \\smallfonts\n\n% About \\smallexamplefonts.  If we use \\smallfonts (9pt), @smallexample\n% can fit this many characters:\n%   8.5x11=86   smallbook=72  a4=90  a5=69\n% If we use \\scriptfonts (8pt), then we can fit this many characters:\n%   8.5x11=90+  smallbook=80  a4=90+  a5=77\n% For me, subjectively, the few extra characters that fit aren't worth\n% the additional smallness of 8pt.  So I'm making the default 9pt.\n%\n% By the way, for comparison, here's what fits with @example (10pt):\n%   8.5x11=71  smallbook=60  a4=75  a5=58\n%\n% I wish the USA used A4 paper.\n% --karl, 24jan03.\n\n\n% Set up the default fonts, so we can use them for creating boxes.\n%\n\\textfonts \\rm\n\n% Define these so they can be easily changed for other fonts.\n\\def\\angleleft{$\\langle$}\n\\def\\angleright{$\\rangle$}\n\n% Count depth in font-changes, for error checks\n\\newcount\\fontdepth \\fontdepth=0\n\n% Fonts for short table of contents.\n\\setfont\\shortcontrm\\rmshape{12}{1000}\n\\setfont\\shortcontbf\\bfshape{10}{\\magstep1}  % no cmb12\n\\setfont\\shortcontsl\\slshape{12}{1000}\n\\setfont\\shortconttt\\ttshape{12}{1000}\n\n%% Add scribe-like font environments, plus @l for inline lisp (usually sans\n%% serif) and @ii for TeX italic\n\n% \\smartitalic{ARG} outputs arg in italics, followed by an italic correction\n% unless the following character is such as not to need one.\n\\def\\smartitalicx{\\ifx\\next,\\else\\ifx\\next-\\else\\ifx\\next.\\else\n                    \\ptexslash\\fi\\fi\\fi}\n\\def\\smartslanted#1{{\\ifusingtt\\ttsl\\sl #1}\\futurelet\\next\\smartitalicx}\n\\def\\smartitalic#1{{\\ifusingtt\\ttsl\\it #1}\\futurelet\\next\\smartitalicx}\n\n% like \\smartslanted except unconditionally uses \\ttsl.\n% @var is set to this for defun arguments.\n\\def\\ttslanted#1{{\\ttsl #1}\\futurelet\\next\\smartitalicx}\n\n% like \\smartslanted except unconditionally use \\sl.  We never want\n% ttsl for book titles, do we?\n\\def\\cite#1{{\\sl #1}\\futurelet\\next\\smartitalicx}\n\n\\let\\i=\\smartitalic\n\\let\\slanted=\\smartslanted\n\\let\\var=\\smartslanted\n\\let\\dfn=\\smartslanted\n\\let\\emph=\\smartitalic\n\n% @b, explicit bold.\n\\def\\b#1{{\\bf #1}}\n\\let\\strong=\\b\n\n% @sansserif, explicit sans.\n\\def\\sansserif#1{{\\sf #1}}\n\n% We can't just use \\exhyphenpenalty, because that only has effect at\n% the end of a paragraph.  Restore normal hyphenation at the end of the\n% group within which \\nohyphenation is presumably called.\n%\n\\def\\nohyphenation{\\hyphenchar\\font = -1  \\aftergroup\\restorehyphenation}\n\\def\\restorehyphenation{\\hyphenchar\\font = `- }\n\n% Set sfcode to normal for the chars that usually have another value.\n% Can't use plain's \\frenchspacing because it uses the `\\x notation, and\n% sometimes \\x has an active definition that messes things up.\n%\n\\chardef\\colonChar = `\\:\n\\chardef\\commaChar = `\\,\n\\chardef\\dotChar   = `\\.\n\\chardef\\exclamChar= `\\!\n\\chardef\\questChar = `\\?\n\\chardef\\semiChar  = `\\;\n%\n\\catcode`@=11\n  \\def\\plainfrenchspacing{%\n    \\sfcode\\dotChar  =\\@m \\sfcode\\questChar=\\@m \\sfcode\\exclamChar=\\@m\n    \\sfcode\\colonChar=\\@m \\sfcode\\semiChar =\\@m \\sfcode\\commaChar =\\@m\n    \\def\\endofsentencespacefactor{1000}% for @. and friends\n  }\n  \\def\\plainnonfrenchspacing{%\n    \\sfcode`\\.3000\\sfcode`\\?3000\\sfcode`\\!3000\n    \\sfcode`\\:2000\\sfcode`\\;1500\\sfcode`\\,1250\n    \\def\\endofsentencespacefactor{3000}% for @. and friends\n  }\n\\catcode`@=\\other\n\\def\\endofsentencespacefactor{3000}% default\n\n\\def\\t#1{%\n  {\\tt \\rawbackslash \\plainfrenchspacing #1}%\n  \\null\n}\n\\def\\samp#1{`\\tclose{#1}'\\null}\n\\setfont\\keyrm\\rmshape{8}{1000}\n\\font\\keysy=cmsy9\n\\def\\key#1{{\\keyrm\\textfont2=\\keysy \\leavevmode\\hbox{%\n  \\raise0.4pt\\hbox{\\angleleft}\\kern-.08em\\vtop{%\n    \\vbox{\\hrule\\kern-0.4pt\n     \\hbox{\\raise0.4pt\\hbox{\\vphantom{\\angleleft}}#1}}%\n    \\kern-0.4pt\\hrule}%\n  \\kern-.06em\\raise0.4pt\\hbox{\\angleright}}}}\n% The old definition, with no lozenge:\n%\\def\\key #1{{\\ttsl \\nohyphenation \\uppercase{#1}}\\null}\n\\def\\ctrl #1{{\\tt \\rawbackslash \\hat}#1}\n\n% @file, @option are the same as @samp.\n\\let\\file=\\samp\n\\let\\option=\\samp\n\n% @code is a modification of @t,\n% which makes spaces the same size as normal in the surrounding text.\n\\def\\tclose#1{%\n  {%\n    % Change normal interword space to be same as for the current font.\n    \\spaceskip = \\fontdimen2\\font\n    %\n    % Switch to typewriter.\n    \\tt\n    %\n    % But `\\ ' produces the large typewriter interword space.\n    \\def\\ {{\\spaceskip = 0pt{} }}%\n    %\n    % Turn off hyphenation.\n    \\nohyphenation\n    %\n    \\rawbackslash\n    \\plainfrenchspacing\n    #1%\n  }%\n  \\null\n}\n\n% We *must* turn on hyphenation at `-' and `_' in @code.\n% Otherwise, it is too hard to avoid overfull hboxes\n% in the Emacs manual, the Library manual, etc.\n\n% Unfortunately, TeX uses one parameter (\\hyphenchar) to control\n% both hyphenation at - and hyphenation within words.\n% We must therefore turn them both off (\\tclose does that)\n% and arrange explicitly to hyphenate at a dash.\n%  -- rms.\n{\n  \\catcode`\\-=\\active\n  \\catcode`\\_=\\active\n  %\n  \\global\\def\\code{\\begingroup\n    \\catcode`\\-=\\active  \\catcode`\\_=\\active\n    \\ifallowcodebreaks\n     \\let-\\codedash\n     \\let_\\codeunder\n    \\else\n     \\let-\\realdash\n     \\let_\\realunder\n    \\fi\n    \\codex\n  }\n}\n\n\\def\\realdash{-}\n\\def\\codedash{-\\discretionary{}{}{}}\n\\def\\codeunder{%\n  % this is all so @math{@code{var_name}+1} can work.  In math mode, _\n  % is \"active\" (mathcode\"8000) and \\normalunderscore (or \\char95, etc.)\n  % will therefore expand the active definition of _, which is us\n  % (inside @code that is), therefore an endless loop.\n  \\ifusingtt{\\ifmmode\n               \\mathchar\"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.\n             \\else\\normalunderscore \\fi\n             \\discretionary{}{}{}}%\n            {\\_}%\n}\n\\def\\codex #1{\\tclose{#1}\\endgroup}\n\n% An additional complication: the above will allow breaks after, e.g.,\n% each of the four underscores in __typeof__.  This is undesirable in\n% some manuals, especially if they don't have long identifiers in\n% general.  @allowcodebreaks provides a way to control this.\n% \n\\newif\\ifallowcodebreaks  \\allowcodebreakstrue\n\n\\def\\keywordtrue{true}\n\\def\\keywordfalse{false}\n\n\\parseargdef\\allowcodebreaks{%\n  \\def\\txiarg{#1}%\n  \\ifx\\txiarg\\keywordtrue\n    \\allowcodebreakstrue\n  \\else\\ifx\\txiarg\\keywordfalse\n    \\allowcodebreaksfalse\n  \\else\n    \\errhelp = \\EMsimple\n    \\errmessage{Unknown @allowcodebreaks option `\\txiarg'}%\n  \\fi\\fi\n}\n\n% @kbd is like @code, except that if the argument is just one @key command,\n% then @kbd has no effect.\n\n% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),\n%   `example' (@kbd uses ttsl only inside of @example and friends),\n%   or `code' (@kbd uses normal tty font always).\n\\parseargdef\\kbdinputstyle{%\n  \\def\\txiarg{#1}%\n  \\ifx\\txiarg\\worddistinct\n    \\gdef\\kbdexamplefont{\\ttsl}\\gdef\\kbdfont{\\ttsl}%\n  \\else\\ifx\\txiarg\\wordexample\n    \\gdef\\kbdexamplefont{\\ttsl}\\gdef\\kbdfont{\\tt}%\n  \\else\\ifx\\txiarg\\wordcode\n    \\gdef\\kbdexamplefont{\\tt}\\gdef\\kbdfont{\\tt}%\n  \\else\n    \\errhelp = \\EMsimple\n    \\errmessage{Unknown @kbdinputstyle option `\\txiarg'}%\n  \\fi\\fi\\fi\n}\n\\def\\worddistinct{distinct}\n\\def\\wordexample{example}\n\\def\\wordcode{code}\n\n% Default is `distinct.'\n\\kbdinputstyle distinct\n\n\\def\\xkey{\\key}\n\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\def\\threex{??}%\n\\ifx\\one\\xkey\\ifx\\threex\\three \\key{#2}%\n\\else{\\tclose{\\kbdfont\\look}}\\fi\n\\else{\\tclose{\\kbdfont\\look}}\\fi}\n\n% For @indicateurl, @env, @command quotes seem unnecessary, so use \\code.\n\\let\\indicateurl=\\code\n\\let\\env=\\code\n\\let\\command=\\code\n\n% @uref (abbreviation for `urlref') takes an optional (comma-separated)\n% second argument specifying the text to display and an optional third\n% arg as text to display instead of (rather than in addition to) the url\n% itself.  First (mandatory) arg is the url.  Perhaps eventually put in\n% a hypertex \\special here.\n%\n\\def\\uref#1{\\douref #1,,,\\finish}\n\\def\\douref#1,#2,#3,#4\\finish{\\begingroup\n  \\unsepspaces\n  \\pdfurl{#1}%\n  \\setbox0 = \\hbox{\\ignorespaces #3}%\n  \\ifdim\\wd0 > 0pt\n    \\unhbox0 % third arg given, show only that\n  \\else\n    \\setbox0 = \\hbox{\\ignorespaces #2}%\n    \\ifdim\\wd0 > 0pt\n      \\ifpdf\n        \\unhbox0             % PDF: 2nd arg given, show only it\n      \\else\n        \\unhbox0\\ (\\code{#1})% DVI: 2nd arg given, show both it and url\n      \\fi\n    \\else\n      \\code{#1}% only url given, so show it\n    \\fi\n  \\fi\n  \\endlink\n\\endgroup}\n\n% @url synonym for @uref, since that's how everyone uses it.\n%\n\\let\\url=\\uref\n\n% rms does not like angle brackets --karl, 17may97.\n% So now @email is just like @uref, unless we are pdf.\n%\n%\\def\\email#1{\\angleleft{\\tt #1}\\angleright}\n\\ifpdf\n  \\def\\email#1{\\doemail#1,,\\finish}\n  \\def\\doemail#1,#2,#3\\finish{\\begingroup\n    \\unsepspaces\n    \\pdfurl{mailto:#1}%\n    \\setbox0 = \\hbox{\\ignorespaces #2}%\n    \\ifdim\\wd0>0pt\\unhbox0\\else\\code{#1}\\fi\n    \\endlink\n  \\endgroup}\n\\else\n  \\let\\email=\\uref\n\\fi\n\n% Check if we are currently using a typewriter font.  Since all the\n% Computer Modern typewriter fonts have zero interword stretch (and\n% shrink), and it is reasonable to expect all typewriter fonts to have\n% this property, we can check that font parameter.\n%\n\\def\\ifmonospace{\\ifdim\\fontdimen3\\font=0pt }\n\n% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the\n% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.\n%\n\\def\\dmn#1{\\thinspace #1}\n\n\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??\\par}\n\n% @l was never documented to mean ``switch to the Lisp font'',\n% and it is not used as such in any manual I can find.  We need it for\n% Polish suppressed-l.  --karl, 22sep96.\n%\\def\\l#1{{\\li #1}\\null}\n\n% Explicit font changes: @r, @sc, undocumented @ii.\n\\def\\r#1{{\\rm #1}}              % roman font\n\\def\\sc#1{{\\smallcaps#1}}       % smallcaps font\n\\def\\ii#1{{\\it #1}}             % italic font\n\n% @acronym for \"FBI\", \"NATO\", and the like.\n% We print this one point size smaller, since it's intended for\n% all-uppercase.\n% \n\\def\\acronym#1{\\doacronym #1,,\\finish}\n\\def\\doacronym#1,#2,#3\\finish{%\n  {\\selectfonts\\lsize #1}%\n  \\def\\temp{#2}%\n  \\ifx\\temp\\empty \\else\n    \\space ({\\unsepspaces \\ignorespaces \\temp \\unskip})%\n  \\fi\n}\n\n% @abbr for \"Comput. J.\" and the like.\n% No font change, but don't do end-of-sentence spacing.\n% \n\\def\\abbr#1{\\doabbr #1,,\\finish}\n\\def\\doabbr#1,#2,#3\\finish{%\n  {\\plainfrenchspacing #1}%\n  \\def\\temp{#2}%\n  \\ifx\\temp\\empty \\else\n    \\space ({\\unsepspaces \\ignorespaces \\temp \\unskip})%\n  \\fi\n}\n\n% @pounds{} is a sterling sign, which Knuth put in the CM italic font.\n%\n\\def\\pounds{{\\it\\$}}\n\n% @euro{} comes from a separate font, depending on the current style.\n% We use the free feym* fonts from the eurosym package by Henrik\n% Theiling, which support regular, slanted, bold and bold slanted (and\n% \"outlined\" (blackboard board, sort of) versions, which we don't need).\n% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.\n% \n% Although only regular is the truly official Euro symbol, we ignore\n% that.  The Euro is designed to be slightly taller than the regular\n% font height.\n% \n% feymr - regular\n% feymo - slanted\n% feybr - bold\n% feybo - bold slanted\n% \n% There is no good (free) typewriter version, to my knowledge.\n% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.\n% Hmm.\n% \n% Also doesn't work in math.  Do we need to do math with euro symbols?\n% Hope not.\n% \n% \n\\def\\euro{{\\eurofont e}}\n\\def\\eurofont{%\n  % We set the font at each command, rather than predefining it in\n  % \\textfonts and the other font-switching commands, so that\n  % installations which never need the symbol don't have to have the\n  % font installed.\n  % \n  % There is only one designed size (nominal 10pt), so we always scale\n  % that to the current nominal size.\n  % \n  % By the way, simply using \"at 1em\" works for cmr10 and the like, but\n  % does not work for cmbx10 and other extended/shrunken fonts.\n  % \n  \\def\\eurosize{\\csname\\curfontsize nominalsize\\endcsname}%\n  %\n  \\ifx\\curfontstyle\\bfstylename \n    % bold:\n    \\font\\thiseurofont = \\ifusingit{feybo10}{feybr10} at \\eurosize\n  \\else \n    % regular:\n    \\font\\thiseurofont = \\ifusingit{feymo10}{feymr10} at \\eurosize\n  \\fi\n  \\thiseurofont\n}\n\n% @registeredsymbol - R in a circle.  The font for the R should really\n% be smaller yet, but lllsize is the best we can do for now.\n% Adapted from the plain.tex definition of \\copyright.\n%\n\\def\\registeredsymbol{%\n  $^{{\\ooalign{\\hfil\\raise.07ex\\hbox{\\selectfonts\\lllsize R}%\n               \\hfil\\crcr\\Orb}}%\n    }$%\n}\n\n% Laurent Siebenmann reports \\Orb undefined with:\n%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38\n% so we'll define it if necessary.\n% \n\\ifx\\Orb\\undefined\n\\def\\Orb{\\mathhexbox20D}\n\\fi\n\n\n\\message{page headings,}\n\n\\newskip\\titlepagetopglue \\titlepagetopglue = 1.5in\n\\newskip\\titlepagebottomglue \\titlepagebottomglue = 2pc\n\n% First the title page.  Must do @settitle before @titlepage.\n\\newif\\ifseenauthor\n\\newif\\iffinishedtitlepage\n\n% Do an implicit @contents or @shortcontents after @end titlepage if the\n% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.\n%\n\\newif\\ifsetcontentsaftertitlepage\n \\let\\setcontentsaftertitlepage = \\setcontentsaftertitlepagetrue\n\\newif\\ifsetshortcontentsaftertitlepage\n \\let\\setshortcontentsaftertitlepage = \\setshortcontentsaftertitlepagetrue\n\n\\parseargdef\\shorttitlepage{\\begingroup\\hbox{}\\vskip 1.5in \\chaprm \\centerline{#1}%\n        \\endgroup\\page\\hbox{}\\page}\n\n\\envdef\\titlepage{%\n  % Open one extra group, as we want to close it in the middle of \\Etitlepage.\n  \\begingroup\n    \\parindent=0pt \\textfonts\n    % Leave some space at the very top of the page.\n    \\vglue\\titlepagetopglue\n    % No rule at page bottom unless we print one at the top with @title.\n    \\finishedtitlepagetrue\n    %\n    % Most title ``pages'' are actually two pages long, with space\n    % at the top of the second.  We don't want the ragged left on the second.\n    \\let\\oldpage = \\page\n    \\def\\page{%\n      \\iffinishedtitlepage\\else\n\t \\finishtitlepage\n      \\fi\n      \\let\\page = \\oldpage\n      \\page\n      \\null\n    }%\n}\n\n\\def\\Etitlepage{%\n    \\iffinishedtitlepage\\else\n\t\\finishtitlepage\n    \\fi\n    % It is important to do the page break before ending the group,\n    % because the headline and footline are only empty inside the group.\n    % If we use the new definition of \\page, we always get a blank page\n    % after the title page, which we certainly don't want.\n    \\oldpage\n  \\endgroup\n  %\n  % Need this before the \\...aftertitlepage checks so that if they are\n  % in effect the toc pages will come out with page numbers.\n  \\HEADINGSon\n  %\n  % If they want short, they certainly want long too.\n  \\ifsetshortcontentsaftertitlepage\n    \\shortcontents\n    \\contents\n    \\global\\let\\shortcontents = \\relax\n    \\global\\let\\contents = \\relax\n  \\fi\n  %\n  \\ifsetcontentsaftertitlepage\n    \\contents\n    \\global\\let\\contents = \\relax\n    \\global\\let\\shortcontents = \\relax\n  \\fi\n}\n\n\\def\\finishtitlepage{%\n  \\vskip4pt \\hrule height 2pt width \\hsize\n  \\vskip\\titlepagebottomglue\n  \\finishedtitlepagetrue\n}\n\n%%% Macros to be used within @titlepage:\n\n\\let\\subtitlerm=\\tenrm\n\\def\\subtitlefont{\\subtitlerm \\normalbaselineskip = 13pt \\normalbaselines}\n\n\\def\\authorfont{\\authorrm \\normalbaselineskip = 16pt \\normalbaselines\n\t\t\\let\\tt=\\authortt}\n\n\\parseargdef\\title{%\n  \\checkenv\\titlepage\n  \\leftline{\\titlefonts\\rm #1}\n  % print a rule at the page bottom also.\n  \\finishedtitlepagefalse\n  \\vskip4pt \\hrule height 4pt width \\hsize \\vskip4pt\n}\n\n\\parseargdef\\subtitle{%\n  \\checkenv\\titlepage\n  {\\subtitlefont \\rightline{#1}}%\n}\n\n% @author should come last, but may come many times.\n% It can also be used inside @quotation.\n%\n\\parseargdef\\author{%\n  \\def\\temp{\\quotation}%\n  \\ifx\\thisenv\\temp\n    \\def\\quotationauthor{#1}% printed in \\Equotation.\n  \\else\n    \\checkenv\\titlepage\n    \\ifseenauthor\\else \\vskip 0pt plus 1filll \\seenauthortrue \\fi\n    {\\authorfont \\leftline{#1}}%\n  \\fi\n}\n\n\n%%% Set up page headings and footings.\n\n\\let\\thispage=\\folio\n\n\\newtoks\\evenheadline    % headline on even pages\n\\newtoks\\oddheadline     % headline on odd pages\n\\newtoks\\evenfootline    % footline on even pages\n\\newtoks\\oddfootline     % footline on odd pages\n\n% Now make TeX use those variables\n\\headline={{\\textfonts\\rm \\ifodd\\pageno \\the\\oddheadline\n                            \\else \\the\\evenheadline \\fi}}\n\\footline={{\\textfonts\\rm \\ifodd\\pageno \\the\\oddfootline\n                            \\else \\the\\evenfootline \\fi}\\HEADINGShook}\n\\let\\HEADINGShook=\\relax\n\n% Commands to set those variables.\n% For example, this is what  @headings on  does\n% @evenheading @thistitle|@thispage|@thischapter\n% @oddheading @thischapter|@thispage|@thistitle\n% @evenfooting @thisfile||\n% @oddfooting ||@thisfile\n\n\n\\def\\evenheading{\\parsearg\\evenheadingxxx}\n\\def\\evenheadingxxx #1{\\evenheadingyyy #1\\|\\|\\|\\|\\finish}\n\\def\\evenheadingyyy #1\\|#2\\|#3\\|#4\\finish{%\n\\global\\evenheadline={\\rlap{\\centerline{#2}}\\line{#1\\hfil#3}}}\n\n\\def\\oddheading{\\parsearg\\oddheadingxxx}\n\\def\\oddheadingxxx #1{\\oddheadingyyy #1\\|\\|\\|\\|\\finish}\n\\def\\oddheadingyyy #1\\|#2\\|#3\\|#4\\finish{%\n\\global\\oddheadline={\\rlap{\\centerline{#2}}\\line{#1\\hfil#3}}}\n\n\\parseargdef\\everyheading{\\oddheadingxxx{#1}\\evenheadingxxx{#1}}%\n\n\\def\\evenfooting{\\parsearg\\evenfootingxxx}\n\\def\\evenfootingxxx #1{\\evenfootingyyy #1\\|\\|\\|\\|\\finish}\n\\def\\evenfootingyyy #1\\|#2\\|#3\\|#4\\finish{%\n\\global\\evenfootline={\\rlap{\\centerline{#2}}\\line{#1\\hfil#3}}}\n\n\\def\\oddfooting{\\parsearg\\oddfootingxxx}\n\\def\\oddfootingxxx #1{\\oddfootingyyy #1\\|\\|\\|\\|\\finish}\n\\def\\oddfootingyyy #1\\|#2\\|#3\\|#4\\finish{%\n  \\global\\oddfootline = {\\rlap{\\centerline{#2}}\\line{#1\\hfil#3}}%\n  %\n  % Leave some space for the footline.  Hopefully ok to assume\n  % @evenfooting will not be used by itself.\n  \\global\\advance\\pageheight by -\\baselineskip\n  \\global\\advance\\vsize by -\\baselineskip\n}\n\n\\parseargdef\\everyfooting{\\oddfootingxxx{#1}\\evenfootingxxx{#1}}\n\n\n% @headings double      turns headings on for double-sided printing.\n% @headings single      turns headings on for single-sided printing.\n% @headings off         turns them off.\n% @headings on          same as @headings double, retained for compatibility.\n% @headings after       turns on double-sided headings after this page.\n% @headings doubleafter turns on double-sided headings after this page.\n% @headings singleafter turns on single-sided headings after this page.\n% By default, they are off at the start of a document,\n% and turned `on' after @end titlepage.\n\n\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}\n\n\\def\\HEADINGSoff{%\n\\global\\evenheadline={\\hfil} \\global\\evenfootline={\\hfil}\n\\global\\oddheadline={\\hfil} \\global\\oddfootline={\\hfil}}\n\\HEADINGSoff\n% When we turn headings on, set the page number to 1.\n% For double-sided printing, put current file name in lower left corner,\n% chapter name on inside top of right hand pages, document\n% title on inside top of left hand pages, and page numbers on outside top\n% edge of all pages.\n\\def\\HEADINGSdouble{%\n\\global\\pageno=1\n\\global\\evenfootline={\\hfil}\n\\global\\oddfootline={\\hfil}\n\\global\\evenheadline={\\line{\\folio\\hfil\\thistitle}}\n\\global\\oddheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\let\\contentsalignmacro = \\chapoddpage\n}\n\\let\\contentsalignmacro = \\chappager\n\n% For single-sided printing, chapter title goes across top left of page,\n% page number on top right.\n\\def\\HEADINGSsingle{%\n\\global\\pageno=1\n\\global\\evenfootline={\\hfil}\n\\global\\oddfootline={\\hfil}\n\\global\\evenheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\oddheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\let\\contentsalignmacro = \\chappager\n}\n\\def\\HEADINGSon{\\HEADINGSdouble}\n\n\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoublex}\n\\let\\HEADINGSdoubleafter=\\HEADINGSafter\n\\def\\HEADINGSdoublex{%\n\\global\\evenfootline={\\hfil}\n\\global\\oddfootline={\\hfil}\n\\global\\evenheadline={\\line{\\folio\\hfil\\thistitle}}\n\\global\\oddheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\let\\contentsalignmacro = \\chapoddpage\n}\n\n\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADINGSsinglex}\n\\def\\HEADINGSsinglex{%\n\\global\\evenfootline={\\hfil}\n\\global\\oddfootline={\\hfil}\n\\global\\evenheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\oddheadline={\\line{\\thischapter\\hfil\\folio}}\n\\global\\let\\contentsalignmacro = \\chappager\n}\n\n% Subroutines used in generating headings\n% This produces Day Month Year style of output.\n% Only define if not already defined, in case a txi-??.tex file has set\n% up a different format (e.g., txi-cs.tex does this).\n\\ifx\\today\\undefined\n\\def\\today{%\n  \\number\\day\\space\n  \\ifcase\\month\n  \\or\\putwordMJan\\or\\putwordMFeb\\or\\putwordMMar\\or\\putwordMApr\n  \\or\\putwordMMay\\or\\putwordMJun\\or\\putwordMJul\\or\\putwordMAug\n  \\or\\putwordMSep\\or\\putwordMOct\\or\\putwordMNov\\or\\putwordMDec\n  \\fi\n  \\space\\number\\year}\n\\fi\n\n% @settitle line...  specifies the title of the document, for headings.\n% It generates no output of its own.\n\\def\\thistitle{\\putwordNoTitle}\n\\def\\settitle{\\parsearg{\\gdef\\thistitle}}\n\n\n\\message{tables,}\n% Tables -- @table, @ftable, @vtable, @item(x).\n\n% default indentation of table text\n\\newdimen\\tableindent \\tableindent=.8in\n% default indentation of @itemize and @enumerate text\n\\newdimen\\itemindent  \\itemindent=.3in\n% margin between end of table item and start of table text.\n\\newdimen\\itemmargin  \\itemmargin=.1in\n\n% used internally for \\itemindent minus \\itemmargin\n\\newdimen\\itemmax\n\n% Note @table, @ftable, and @vtable define @item, @itemx, etc., with\n% these defs.\n% They also define \\itemindex\n% to index the item name in whatever manner is desired (perhaps none).\n\n\\newif\\ifitemxneedsnegativevskip\n\n\\def\\itemxpar{\\par\\ifitemxneedsnegativevskip\\nobreak\\vskip-\\parskip\\nobreak\\fi}\n\n\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}\n\\def\\internalBitemx{\\itemxpar \\parsearg\\itemzzz}\n\n\\def\\itemzzz #1{\\begingroup %\n  \\advance\\hsize by -\\rightskip\n  \\advance\\hsize by -\\tableindent\n  \\setbox0=\\hbox{\\itemindicate{#1}}%\n  \\itemindex{#1}%\n  \\nobreak % This prevents a break before @itemx.\n  %\n  % If the item text does not fit in the space we have, put it on a line\n  % by itself, and do not allow a page break either before or after that\n  % line.  We do not start a paragraph here because then if the next\n  % command is, e.g., @kindex, the whatsit would get put into the\n  % horizontal list on a line by itself, resulting in extra blank space.\n  \\ifdim \\wd0>\\itemmax\n    %\n    % Make this a paragraph so we get the \\parskip glue and wrapping,\n    % but leave it ragged-right.\n    \\begingroup\n      \\advance\\leftskip by-\\tableindent\n      \\advance\\hsize by\\tableindent\n      \\advance\\rightskip by0pt plus1fil\n      \\leavevmode\\unhbox0\\par\n    \\endgroup\n    %\n    % We're going to be starting a paragraph, but we don't want the\n    % \\parskip glue -- logically it's part of the @item we just started.\n    \\nobreak \\vskip-\\parskip\n    %\n    % Stop a page break at the \\parskip glue coming up.  However, if\n    % what follows is an environment such as @example, there will be no\n    % \\parskip glue; then the negative vskip we just inserted would\n    % cause the example and the item to crash together.  So we use this\n    % bizarre value of 10001 as a signal to \\aboveenvbreak to insert\n    % \\parskip glue after all.  Section titles are handled this way also.\n    % \n    \\penalty 10001\n    \\endgroup\n    \\itemxneedsnegativevskipfalse\n  \\else\n    % The item text fits into the space.  Start a paragraph, so that the\n    % following text (if any) will end up on the same line.\n    \\noindent\n    % Do this with kerns and \\unhbox so that if there is a footnote in\n    % the item text, it can migrate to the main vertical list and\n    % eventually be printed.\n    \\nobreak\\kern-\\tableindent\n    \\dimen0 = \\itemmax  \\advance\\dimen0 by \\itemmargin \\advance\\dimen0 by -\\wd0\n    \\unhbox0\n    \\nobreak\\kern\\dimen0\n    \\endgroup\n    \\itemxneedsnegativevskiptrue\n  \\fi\n}\n\n\\def\\item{\\errmessage{@item while not in a list environment}}\n\\def\\itemx{\\errmessage{@itemx while not in a list environment}}\n\n% @table, @ftable, @vtable.\n\\envdef\\table{%\n  \\let\\itemindex\\gobble\n  \\tablecheck{table}%\n}\n\\envdef\\ftable{%\n  \\def\\itemindex ##1{\\doind {fn}{\\code{##1}}}%\n  \\tablecheck{ftable}%\n}\n\\envdef\\vtable{%\n  \\def\\itemindex ##1{\\doind {vr}{\\code{##1}}}%\n  \\tablecheck{vtable}%\n}\n\\def\\tablecheck#1{%\n  \\ifnum \\the\\catcode`\\^^M=\\active\n    \\endgroup\n    \\errmessage{This command won't work in this context; perhaps the problem is\n      that we are \\inenvironment\\thisenv}%\n    \\def\\next{\\doignore{#1}}%\n  \\else\n    \\let\\next\\tablex\n  \\fi\n  \\next\n}\n\\def\\tablex#1{%\n  \\def\\itemindicate{#1}%\n  \\parsearg\\tabley\n}\n\\def\\tabley#1{%\n  {%\n    \\makevalueexpandable\n    \\edef\\temp{\\noexpand\\tablez #1\\space\\space\\space}%\n    \\expandafter\n  }\\temp \\endtablez\n}\n\\def\\tablez #1 #2 #3 #4\\endtablez{%\n  \\aboveenvbreak\n  \\ifnum 0#1>0 \\advance \\leftskip by #1\\mil \\fi\n  \\ifnum 0#2>0 \\tableindent=#2\\mil \\fi\n  \\ifnum 0#3>0 \\advance \\rightskip by #3\\mil \\fi\n  \\itemmax=\\tableindent\n  \\advance \\itemmax by -\\itemmargin\n  \\advance \\leftskip by \\tableindent\n  \\exdentamount=\\tableindent\n  \\parindent = 0pt\n  \\parskip = \\smallskipamount\n  \\ifdim \\parskip=0pt \\parskip=2pt \\fi\n  \\let\\item = \\internalBitem\n  \\let\\itemx = \\internalBitemx\n}\n\\def\\Etable{\\endgraf\\afterenvbreak}\n\\let\\Eftable\\Etable\n\\let\\Evtable\\Etable\n\\let\\Eitemize\\Etable\n\\let\\Eenumerate\\Etable\n\n% This is the counter used by @enumerate, which is really @itemize\n\n\\newcount \\itemno\n\n\\envdef\\itemize{\\parsearg\\doitemize}\n\n\\def\\doitemize#1{%\n  \\aboveenvbreak\n  \\itemmax=\\itemindent\n  \\advance\\itemmax by -\\itemmargin\n  \\advance\\leftskip by \\itemindent\n  \\exdentamount=\\itemindent\n  \\parindent=0pt\n  \\parskip=\\smallskipamount\n  \\ifdim\\parskip=0pt \\parskip=2pt \\fi\n  \\def\\itemcontents{#1}%\n  % @itemize with no arg is equivalent to @itemize @bullet.\n  \\ifx\\itemcontents\\empty\\def\\itemcontents{\\bullet}\\fi\n  \\let\\item=\\itemizeitem\n}\n\n% Definition of @item while inside @itemize and @enumerate.\n%\n\\def\\itemizeitem{%\n  \\advance\\itemno by 1  % for enumerations\n  {\\let\\par=\\endgraf \\smallbreak}% reasonable place to break\n  {%\n   % If the document has an @itemize directly after a section title, a\n   % \\nobreak will be last on the list, and \\sectionheading will have\n   % done a \\vskip-\\parskip.  In that case, we don't want to zero\n   % parskip, or the item text will crash with the heading.  On the\n   % other hand, when there is normal text preceding the item (as there\n   % usually is), we do want to zero parskip, or there would be too much\n   % space.  In that case, we won't have a \\nobreak before.  At least\n   % that's the theory.\n   \\ifnum\\lastpenalty<10000 \\parskip=0in \\fi\n   \\noindent\n   \\hbox to 0pt{\\hss \\itemcontents \\kern\\itemmargin}%\n   \\vadjust{\\penalty 1200}}% not good to break after first line of item.\n  \\flushcr\n}\n\n% \\splitoff TOKENS\\endmark defines \\first to be the first token in\n% TOKENS, and \\rest to be the remainder.\n%\n\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{#2}}%\n\n% Allow an optional argument of an uppercase letter, lowercase letter,\n% or number, to specify the first label in the enumerated list.  No\n% argument is the same as `1'.\n%\n\\envparseargdef\\enumerate{\\enumeratey #1  \\endenumeratey}\n\\def\\enumeratey #1 #2\\endenumeratey{%\n  % If we were given no argument, pretend we were given `1'.\n  \\def\\thearg{#1}%\n  \\ifx\\thearg\\empty \\def\\thearg{1}\\fi\n  %\n  % Detect if the argument is a single token.  If so, it might be a\n  % letter.  Otherwise, the only valid thing it can be is a number.\n  % (We will always have one token, because of the test we just made.\n  % This is a good thing, since \\splitoff doesn't work given nothing at\n  % all -- the first parameter is undelimited.)\n  \\expandafter\\splitoff\\thearg\\endmark\n  \\ifx\\rest\\empty\n    % Only one token in the argument.  It could still be anything.\n    % A ``lowercase letter'' is one whose \\lccode is nonzero.\n    % An ``uppercase letter'' is one whose \\lccode is both nonzero, and\n    %   not equal to itself.\n    % Otherwise, we assume it's a number.\n    %\n    % We need the \\relax at the end of the \\ifnum lines to stop TeX from\n    % continuing to look for a <number>.\n    %\n    \\ifnum\\lccode\\expandafter`\\thearg=0\\relax\n      \\numericenumerate % a number (we hope)\n    \\else\n      % It's a letter.\n      \\ifnum\\lccode\\expandafter`\\thearg=\\expandafter`\\thearg\\relax\n        \\lowercaseenumerate % lowercase letter\n      \\else\n        \\uppercaseenumerate % uppercase letter\n      \\fi\n    \\fi\n  \\else\n    % Multiple tokens in the argument.  We hope it's a number.\n    \\numericenumerate\n  \\fi\n}\n\n% An @enumerate whose labels are integers.  The starting integer is\n% given in \\thearg.\n%\n\\def\\numericenumerate{%\n  \\itemno = \\thearg\n  \\startenumeration{\\the\\itemno}%\n}\n\n% The starting (lowercase) letter is in \\thearg.\n\\def\\lowercaseenumerate{%\n  \\itemno = \\expandafter`\\thearg\n  \\startenumeration{%\n    % Be sure we're not beyond the end of the alphabet.\n    \\ifnum\\itemno=0\n      \\errmessage{No more lowercase letters in @enumerate; get a bigger\n                  alphabet}%\n    \\fi\n    \\char\\lccode\\itemno\n  }%\n}\n\n% The starting (uppercase) letter is in \\thearg.\n\\def\\uppercaseenumerate{%\n  \\itemno = \\expandafter`\\thearg\n  \\startenumeration{%\n    % Be sure we're not beyond the end of the alphabet.\n    \\ifnum\\itemno=0\n      \\errmessage{No more uppercase letters in @enumerate; get a bigger\n                  alphabet}\n    \\fi\n    \\char\\uccode\\itemno\n  }%\n}\n\n% Call \\doitemize, adding a period to the first argument and supplying the\n% common last two arguments.  Also subtract one from the initial value in\n% \\itemno, since @item increments \\itemno.\n%\n\\def\\startenumeration#1{%\n  \\advance\\itemno by -1\n  \\doitemize{#1.}\\flushcr\n}\n\n% @alphaenumerate and @capsenumerate are abbreviations for giving an arg\n% to @enumerate.\n%\n\\def\\alphaenumerate{\\enumerate{a}}\n\\def\\capsenumerate{\\enumerate{A}}\n\\def\\Ealphaenumerate{\\Eenumerate}\n\\def\\Ecapsenumerate{\\Eenumerate}\n\n\n% @multitable macros\n% Amy Hendrickson, 8/18/94, 3/6/96\n%\n% @multitable ... @end multitable will make as many columns as desired.\n% Contents of each column will wrap at width given in preamble.  Width\n% can be specified either with sample text given in a template line,\n% or in percent of \\hsize, the current width of text on page.\n\n% Table can continue over pages but will only break between lines.\n\n% To make preamble:\n%\n% Either define widths of columns in terms of percent of \\hsize:\n%   @multitable @columnfractions .25 .3 .45\n%   @item ...\n%\n%   Numbers following @columnfractions are the percent of the total\n%   current hsize to be used for each column. You may use as many\n%   columns as desired.\n\n\n% Or use a template:\n%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}\n%   @item ...\n%   using the widest term desired in each column.\n\n% Each new table line starts with @item, each subsequent new column\n% starts with @tab. Empty columns may be produced by supplying @tab's\n% with nothing between them for as many times as empty columns are needed,\n% ie, @tab@tab@tab will produce two empty columns.\n\n% @item, @tab do not need to be on their own lines, but it will not hurt\n% if they are.\n\n% Sample multitable:\n\n%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}\n%   @item first col stuff @tab second col stuff @tab third col\n%   @item\n%   first col stuff\n%   @tab\n%   second col stuff\n%   @tab\n%   third col\n%   @item first col stuff @tab second col stuff\n%   @tab Many paragraphs of text may be used in any column.\n%\n%         They will wrap at the width determined by the template.\n%   @item@tab@tab This will be in third column.\n%   @end multitable\n\n% Default dimensions may be reset by user.\n% @multitableparskip is vertical space between paragraphs in table.\n% @multitableparindent is paragraph indent in table.\n% @multitablecolmargin is horizontal space to be left between columns.\n% @multitablelinespace is space to leave between table items, baseline\n%                                                            to baseline.\n%   0pt means it depends on current normal line spacing.\n%\n\\newskip\\multitableparskip\n\\newskip\\multitableparindent\n\\newdimen\\multitablecolspace\n\\newskip\\multitablelinespace\n\\multitableparskip=0pt\n\\multitableparindent=6pt\n\\multitablecolspace=12pt\n\\multitablelinespace=0pt\n\n% Macros used to set up halign preamble:\n%\n\\let\\endsetuptable\\relax\n\\def\\xendsetuptable{\\endsetuptable}\n\\let\\columnfractions\\relax\n\\def\\xcolumnfractions{\\columnfractions}\n\\newif\\ifsetpercent\n\n% #1 is the @columnfraction, usually a decimal number like .5, but might\n% be just 1.  We just use it, whatever it is.\n%\n\\def\\pickupwholefraction#1 {%\n  \\global\\advance\\colcount by 1\n  \\expandafter\\xdef\\csname col\\the\\colcount\\endcsname{#1\\hsize}%\n  \\setuptable\n}\n\n\\newcount\\colcount\n\\def\\setuptable#1{%\n  \\def\\firstarg{#1}%\n  \\ifx\\firstarg\\xendsetuptable\n    \\let\\go = \\relax\n  \\else\n    \\ifx\\firstarg\\xcolumnfractions\n      \\global\\setpercenttrue\n    \\else\n      \\ifsetpercent\n         \\let\\go\\pickupwholefraction\n      \\else\n         \\global\\advance\\colcount by 1\n         \\setbox0=\\hbox{#1\\unskip\\space}% Add a normal word space as a\n                   % separator; typically that is always in the input, anyway.\n         \\expandafter\\xdef\\csname col\\the\\colcount\\endcsname{\\the\\wd0}%\n      \\fi\n    \\fi\n    \\ifx\\go\\pickupwholefraction\n      % Put the argument back for the \\pickupwholefraction call, so\n      % we'll always have a period there to be parsed.\n      \\def\\go{\\pickupwholefraction#1}%\n    \\else\n      \\let\\go = \\setuptable\n    \\fi%\n  \\fi\n  \\go\n}\n\n% multitable-only commands.\n%\n% @headitem starts a heading row, which we typeset in bold.\n% Assignments have to be global since we are inside the implicit group\n% of an alignment entry.  Note that \\everycr resets \\everytab.\n\\def\\headitem{\\checkenv\\multitable \\crcr \\global\\everytab={\\bf}\\the\\everytab}%\n%\n% A \\tab used to include \\hskip1sp.  But then the space in a template\n% line is not enough.  That is bad.  So let's go back to just `&' until\n% we encounter the problem it was intended to solve again.\n%\t\t\t\t\t--karl, nathan@acm.org, 20apr99.\n\\def\\tab{\\checkenv\\multitable &\\the\\everytab}%\n\n% @multitable ... @end multitable definitions:\n%\n\\newtoks\\everytab  % insert after every tab.\n%\n\\envdef\\multitable{%\n  \\vskip\\parskip\n  \\startsavinginserts\n  %\n  % @item within a multitable starts a normal row.\n  % We use \\def instead of \\let so that if one of the multitable entries\n  % contains an @itemize, we don't choke on the \\item (seen as \\crcr aka\n  % \\endtemplate) expanding \\doitemize.\n  \\def\\item{\\crcr}%\n  %\n  \\tolerance=9500\n  \\hbadness=9500\n  \\setmultitablespacing\n  \\parskip=\\multitableparskip\n  \\parindent=\\multitableparindent\n  \\overfullrule=0pt\n  \\global\\colcount=0\n  %\n  \\everycr = {%\n    \\noalign{%\n      \\global\\everytab={}%\n      \\global\\colcount=0 % Reset the column counter.\n      % Check for saved footnotes, etc.\n      \\checkinserts\n      % Keeps underfull box messages off when table breaks over pages.\n      %\\filbreak\n\t% Maybe so, but it also creates really weird page breaks when the\n\t% table breaks over pages. Wouldn't \\vfil be better?  Wait until the\n\t% problem manifests itself, so it can be fixed for real --karl.\n    }%\n  }%\n  %\n  \\parsearg\\domultitable\n}\n\\def\\domultitable#1{%\n  % To parse everything between @multitable and @item:\n  \\setuptable#1 \\endsetuptable\n  %\n  % This preamble sets up a generic column definition, which will\n  % be used as many times as user calls for columns.\n  % \\vtop will set a single line and will also let text wrap and\n  % continue for many paragraphs if desired.\n  \\halign\\bgroup &%\n    \\global\\advance\\colcount by 1\n    \\multistrut\n    \\vtop{%\n      % Use the current \\colcount to find the correct column width:\n      \\hsize=\\expandafter\\csname col\\the\\colcount\\endcsname\n      %\n      % In order to keep entries from bumping into each other\n      % we will add a \\leftskip of \\multitablecolspace to all columns after\n      % the first one.\n      %\n      % If a template has been used, we will add \\multitablecolspace\n      % to the width of each template entry.\n      %\n      % If the user has set preamble in terms of percent of \\hsize we will\n      % use that dimension as the width of the column, and the \\leftskip\n      % will keep entries from bumping into each other.  Table will start at\n      % left margin and final column will justify at right margin.\n      %\n      % Make sure we don't inherit \\rightskip from the outer environment.\n      \\rightskip=0pt\n      \\ifnum\\colcount=1\n\t% The first column will be indented with the surrounding text.\n\t\\advance\\hsize by\\leftskip\n      \\else\n\t\\ifsetpercent \\else\n\t  % If user has not set preamble in terms of percent of \\hsize\n\t  % we will advance \\hsize by \\multitablecolspace.\n\t  \\advance\\hsize by \\multitablecolspace\n\t\\fi\n       % In either case we will make \\leftskip=\\multitablecolspace:\n      \\leftskip=\\multitablecolspace\n      \\fi\n      % Ignoring space at the beginning and end avoids an occasional spurious\n      % blank line, when TeX decides to break the line at the space before the\n      % box from the multistrut, so the strut ends up on a line by itself.\n      % For example:\n      % @multitable @columnfractions .11 .89\n      % @item @code{#}\n      % @tab Legal holiday which is valid in major parts of the whole country.\n      % Is automatically provided with highlighting sequences respectively\n      % marking characters.\n      \\noindent\\ignorespaces##\\unskip\\multistrut\n    }\\cr\n}\n\\def\\Emultitable{%\n  \\crcr\n  \\egroup % end the \\halign\n  \\global\\setpercentfalse\n}\n\n\\def\\setmultitablespacing{%\n  \\def\\multistrut{\\strut}% just use the standard line spacing\n  %\n  % Compute \\multitablelinespace (if not defined by user) for use in\n  % \\multitableparskip calculation.  We used define \\multistrut based on\n  % this, but (ironically) that caused the spacing to be off.\n  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.\n\\ifdim\\multitablelinespace=0pt\n\\setbox0=\\vbox{X}\\global\\multitablelinespace=\\the\\baselineskip\n\\global\\advance\\multitablelinespace by-\\ht0\n\\fi\n%% Test to see if parskip is larger than space between lines of\n%% table. If not, do nothing.\n%%        If so, set to same dimension as multitablelinespace.\n\\ifdim\\multitableparskip>\\multitablelinespace\n\\global\\multitableparskip=\\multitablelinespace\n\\global\\advance\\multitableparskip-7pt %% to keep parskip somewhat smaller\n                                      %% than skip between lines in the table.\n\\fi%\n\\ifdim\\multitableparskip=0pt\n\\global\\multitableparskip=\\multitablelinespace\n\\global\\advance\\multitableparskip-7pt %% to keep parskip somewhat smaller\n                                      %% than skip between lines in the table.\n\\fi}\n\n\n\\message{conditionals,}\n\n% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,\n% @ifnotxml always succeed.  They currently do nothing; we don't\n% attempt to check whether the conditionals are properly nested.  But we\n% have to remember that they are conditionals, so that @end doesn't\n% attempt to close an environment group.\n%\n\\def\\makecond#1{%\n  \\expandafter\\let\\csname #1\\endcsname = \\relax\n  \\expandafter\\let\\csname iscond.#1\\endcsname = 1\n}\n\\makecond{iftex}\n\\makecond{ifnotdocbook}\n\\makecond{ifnothtml}\n\\makecond{ifnotinfo}\n\\makecond{ifnotplaintext}\n\\makecond{ifnotxml}\n\n% Ignore @ignore, @ifhtml, @ifinfo, and the like.\n%\n\\def\\direntry{\\doignore{direntry}}\n\\def\\documentdescription{\\doignore{documentdescription}}\n\\def\\docbook{\\doignore{docbook}}\n\\def\\html{\\doignore{html}}\n\\def\\ifdocbook{\\doignore{ifdocbook}}\n\\def\\ifhtml{\\doignore{ifhtml}}\n\\def\\ifinfo{\\doignore{ifinfo}}\n\\def\\ifnottex{\\doignore{ifnottex}}\n\\def\\ifplaintext{\\doignore{ifplaintext}}\n\\def\\ifxml{\\doignore{ifxml}}\n\\def\\ignore{\\doignore{ignore}}\n\\def\\menu{\\doignore{menu}}\n\\def\\xml{\\doignore{xml}}\n\n% Ignore text until a line `@end #1', keeping track of nested conditionals.\n%\n% A count to remember the depth of nesting.\n\\newcount\\doignorecount\n\n\\def\\doignore#1{\\begingroup\n  % Scan in ``verbatim'' mode:\n  \\obeylines\n  \\catcode`\\@ = \\other\n  \\catcode`\\{ = \\other\n  \\catcode`\\} = \\other\n  %\n  % Make sure that spaces turn into tokens that match what \\doignoretext wants.\n  \\spaceisspace\n  %\n  % Count number of #1's that we've seen.\n  \\doignorecount = 0\n  %\n  % Swallow text until we reach the matching `@end #1'.\n  \\dodoignore{#1}%\n}\n\n{ \\catcode`_=11 % We want to use \\_STOP_ which cannot appear in texinfo source.\n  \\obeylines %\n  %\n  \\gdef\\dodoignore#1{%\n    % #1 contains the command name as a string, e.g., `ifinfo'.\n    %\n    % Define a command to find the next `@end #1'.\n    \\long\\def\\doignoretext##1^^M@end #1{%\n      \\doignoretextyyy##1^^M@#1\\_STOP_}%\n    %\n    % And this command to find another #1 command, at the beginning of a\n    % line.  (Otherwise, we would consider a line `@c @ifset', for\n    % example, to count as an @ifset for nesting.)\n    \\long\\def\\doignoretextyyy##1^^M@#1##2\\_STOP_{\\doignoreyyy{##2}\\_STOP_}%\n    %\n    % And now expand that command.\n    \\doignoretext ^^M%\n  }%\n}\n\n\\def\\doignoreyyy#1{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\empty\t\t\t% Nothing found.\n    \\let\\next\\doignoretextzzz\n  \\else\t\t\t\t\t% Found a nested condition, ...\n    \\advance\\doignorecount by 1\n    \\let\\next\\doignoretextyyy\t\t% ..., look for another.\n    % If we're here, #1 ends with ^^M\\ifinfo (for example).\n  \\fi\n  \\next #1% the token \\_STOP_ is present just after this macro.\n}\n\n% We have to swallow the remaining \"\\_STOP_\".\n%\n\\def\\doignoretextzzz#1{%\n  \\ifnum\\doignorecount = 0\t% We have just found the outermost @end.\n    \\let\\next\\enddoignore\n  \\else\t\t\t\t% Still inside a nested condition.\n    \\advance\\doignorecount by -1\n    \\let\\next\\doignoretext      % Look for the next @end.\n  \\fi\n  \\next\n}\n\n% Finish off ignored text.\n{ \\obeylines%\n  % Ignore anything after the last `@end #1'; this matters in verbatim\n  % environments, where otherwise the newline after an ignored conditional\n  % would result in a blank line in the output.\n  \\gdef\\enddoignore#1^^M{\\endgroup\\ignorespaces}%\n}\n\n\n% @set VAR sets the variable VAR to an empty value.\n% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.\n%\n% Since we want to separate VAR from REST-OF-LINE (which might be\n% empty), we can't just use \\parsearg; we have to insert a space of our\n% own to delimit the rest of the line, and then take it out again if we\n% didn't need it.\n% We rely on the fact that \\parsearg sets \\catcode`\\ =10.\n%\n\\parseargdef\\set{\\setyyy#1 \\endsetyyy}\n\\def\\setyyy#1 #2\\endsetyyy{%\n  {%\n    \\makevalueexpandable\n    \\def\\temp{#2}%\n    \\edef\\next{\\gdef\\makecsname{SET#1}}%\n    \\ifx\\temp\\empty\n      \\next{}%\n    \\else\n      \\setzzz#2\\endsetzzz\n    \\fi\n  }%\n}\n% Remove the trailing space \\setxxx inserted.\n\\def\\setzzz#1 \\endsetzzz{\\next{#1}}\n\n% @clear VAR clears (i.e., unsets) the variable VAR.\n%\n\\parseargdef\\clear{%\n  {%\n    \\makevalueexpandable\n    \\global\\expandafter\\let\\csname SET#1\\endcsname=\\relax\n  }%\n}\n\n% @value{foo} gets the text saved in variable foo.\n\\def\\value{\\begingroup\\makevalueexpandable\\valuexxx}\n\\def\\valuexxx#1{\\expandablevalue{#1}\\endgroup}\n{\n  \\catcode`\\- = \\active \\catcode`\\_ = \\active\n  %\n  \\gdef\\makevalueexpandable{%\n    \\let\\value = \\expandablevalue\n    % We don't want these characters active, ...\n    \\catcode`\\-=\\other \\catcode`\\_=\\other\n    % ..., but we might end up with active ones in the argument if\n    % we're called from @code, as @code{@value{foo-bar_}}, though.\n    % So \\let them to their normal equivalents.\n    \\let-\\realdash \\let_\\normalunderscore\n  }\n}\n\n% We have this subroutine so that we can handle at least some @value's\n% properly in indexes (we call \\makevalueexpandable in \\indexdummies).\n% The command has to be fully expandable (if the variable is set), since\n% the result winds up in the index file.  This means that if the\n% variable's value contains other Texinfo commands, it's almost certain\n% it will fail (although perhaps we could fix that with sufficient work\n% to do a one-level expansion on the result, instead of complete).\n%\n\\def\\expandablevalue#1{%\n  \\expandafter\\ifx\\csname SET#1\\endcsname\\relax\n    {[No value for ``#1'']}%\n    \\message{Variable `#1', used in @value, is not set.}%\n  \\else\n    \\csname SET#1\\endcsname\n  \\fi\n}\n\n% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined\n% with @set.\n%\n% To get special treatment of `@end ifset,' call \\makeond and the redefine.\n%\n\\makecond{ifset}\n\\def\\ifset{\\parsearg{\\doifset{\\let\\next=\\ifsetfail}}}\n\\def\\doifset#1#2{%\n  {%\n    \\makevalueexpandable\n    \\let\\next=\\empty\n    \\expandafter\\ifx\\csname SET#2\\endcsname\\relax\n      #1% If not set, redefine \\next.\n    \\fi\n    \\expandafter\n  }\\next\n}\n\\def\\ifsetfail{\\doignore{ifset}}\n\n% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been\n% defined with @set, or has been undefined with @clear.\n%\n% The `\\else' inside the `\\doifset' parameter is a trick to reuse the\n% above code: if the variable is not set, do nothing, if it is set,\n% then redefine \\next to \\ifclearfail.\n%\n\\makecond{ifclear}\n\\def\\ifclear{\\parsearg{\\doifset{\\else \\let\\next=\\ifclearfail}}}\n\\def\\ifclearfail{\\doignore{ifclear}}\n\n% @dircategory CATEGORY  -- specify a category of the dir file\n% which this file should belong to.  Ignore this in TeX.\n\\let\\dircategory=\\comment\n\n% @defininfoenclose.\n\\let\\definfoenclose=\\comment\n\n\n\\message{indexing,}\n% Index generation facilities\n\n% Define \\newwrite to be identical to plain tex's \\newwrite\n% except not \\outer, so it can be used within macros and \\if's.\n\\edef\\newwrite{\\makecsname{ptexnewwrite}}\n\n% \\newindex {foo} defines an index named foo.\n% It automatically defines \\fooindex such that\n% \\fooindex ...rest of line... puts an entry in the index foo.\n% It also defines \\fooindfile to be the number of the output channel for\n% the file that accumulates this index.  The file's extension is foo.\n% The name of an index should be no more than 2 characters long\n% for the sake of vms.\n%\n\\def\\newindex#1{%\n  \\iflinks\n    \\expandafter\\newwrite \\csname#1indfile\\endcsname\n    \\openout \\csname#1indfile\\endcsname \\jobname.#1 % Open the file\n  \\fi\n  \\expandafter\\xdef\\csname#1index\\endcsname{%     % Define @#1index\n    \\noexpand\\doindex{#1}}\n}\n\n% @defindex foo  ==  \\newindex{foo}\n%\n\\def\\defindex{\\parsearg\\newindex}\n\n% Define @defcodeindex, like @defindex except put all entries in @code.\n%\n\\def\\defcodeindex{\\parsearg\\newcodeindex}\n%\n\\def\\newcodeindex#1{%\n  \\iflinks\n    \\expandafter\\newwrite \\csname#1indfile\\endcsname\n    \\openout \\csname#1indfile\\endcsname \\jobname.#1\n  \\fi\n  \\expandafter\\xdef\\csname#1index\\endcsname{%\n    \\noexpand\\docodeindex{#1}}%\n}\n\n\n% @synindex foo bar    makes index foo feed into index bar.\n% Do this instead of @defindex foo if you don't want it as a separate index.\n%\n% @syncodeindex foo bar   similar, but put all entries made for index foo\n% inside @code.\n%\n\\def\\synindex#1 #2 {\\dosynindex\\doindex{#1}{#2}}\n\\def\\syncodeindex#1 #2 {\\dosynindex\\docodeindex{#1}{#2}}\n\n% #1 is \\doindex or \\docodeindex, #2 the index getting redefined (foo),\n% #3 the target index (bar).\n\\def\\dosynindex#1#2#3{%\n  % Only do \\closeout if we haven't already done it, else we'll end up\n  % closing the target index.\n  \\expandafter \\ifx\\csname donesynindex#2\\endcsname \\undefined\n    % The \\closeout helps reduce unnecessary open files; the limit on the\n    % Acorn RISC OS is a mere 16 files.\n    \\expandafter\\closeout\\csname#2indfile\\endcsname\n    \\expandafter\\let\\csname\\donesynindex#2\\endcsname = 1\n  \\fi\n  % redefine \\fooindfile:\n  \\expandafter\\let\\expandafter\\temp\\expandafter=\\csname#3indfile\\endcsname\n  \\expandafter\\let\\csname#2indfile\\endcsname=\\temp\n  % redefine \\fooindex:\n  \\expandafter\\xdef\\csname#2index\\endcsname{\\noexpand#1{#3}}%\n}\n\n% Define \\doindex, the driver for all \\fooindex macros.\n% Argument #1 is generated by the calling \\fooindex macro,\n%  and it is \"foo\", the name of the index.\n\n% \\doindex just uses \\parsearg; it calls \\doind for the actual work.\n% This is because \\doind is more useful to call from other macros.\n\n% There is also \\dosubind {index}{topic}{subtopic}\n% which makes an entry in a two-level index such as the operation index.\n\n\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\singleindexer}\n\\def\\singleindexer #1{\\doind{\\indexname}{#1}}\n\n% like the previous two, but they put @code around the argument.\n\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\singlecodeindexer}\n\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code{#1}}}\n\n% Take care of Texinfo commands that can appear in an index entry.\n% Since there are some commands we want to expand, and others we don't,\n% we have to laboriously prevent expansion for those that we don't.\n%\n\\def\\indexdummies{%\n  \\escapechar = `\\\\     % use backslash in output files.\n  \\def\\@{@}% change to @@ when we switch to @ as escape char in index files.\n  \\def\\ {\\realbackslash\\space }%\n  % Need these in case \\tex is in effect and \\{ is a \\delimiter again.\n  % But can't use \\lbracecmd and \\rbracecmd because texindex assumes\n  % braces and backslashes are used only as delimiters.\n  \\let\\{ = \\mylbrace\n  \\let\\} = \\myrbrace\n  %\n  % Do the redefinitions.\n  \\commondummies\n}\n\n% For the aux and toc files, @ is the escape character.  So we want to\n% redefine everything using @ as the escape character (instead of\n% \\realbackslash, still used for index files).  When everything uses @,\n% this will be simpler.\n%\n\\def\\atdummies{%\n  \\def\\@{@@}%\n  \\def\\ {@ }%\n  \\let\\{ = \\lbraceatcmd\n  \\let\\} = \\rbraceatcmd\n  %\n  % Do the redefinitions.\n  \\commondummies\n  \\otherbackslash\n}\n\n% Called from \\indexdummies and \\atdummies.\n%\n\\def\\commondummies{%\n  %\n  % \\definedummyword defines \\#1 as \\string\\#1\\space, thus effectively\n  % preventing its expansion.  This is used only for control% words,\n  % not control letters, because the \\space would be incorrect for\n  % control characters, but is needed to separate the control word\n  % from whatever follows.\n  %\n  % For control letters, we have \\definedummyletter, which omits the\n  % space.\n  %\n  % These can be used both for control words that take an argument and\n  % those that do not.  If it is followed by {arg} in the input, then\n  % that will dutifully get written to the index (or wherever).\n  %\n  \\def\\definedummyword  ##1{\\def##1{\\string##1\\space}}%\n  \\def\\definedummyletter##1{\\def##1{\\string##1}}%\n  \\let\\definedummyaccent\\definedummyletter\n  %\n  \\commondummiesnofonts\n  %\n  \\definedummyletter\\_%\n  %\n  % Non-English letters.\n  \\definedummyword\\AA\n  \\definedummyword\\AE\n  \\definedummyword\\L\n  \\definedummyword\\OE\n  \\definedummyword\\O\n  \\definedummyword\\aa\n  \\definedummyword\\ae\n  \\definedummyword\\l\n  \\definedummyword\\oe\n  \\definedummyword\\o\n  \\definedummyword\\ss\n  \\definedummyword\\exclamdown\n  \\definedummyword\\questiondown\n  \\definedummyword\\ordf\n  \\definedummyword\\ordm\n  %\n  % Although these internal commands shouldn't show up, sometimes they do.\n  \\definedummyword\\bf\n  \\definedummyword\\gtr\n  \\definedummyword\\hat\n  \\definedummyword\\less\n  \\definedummyword\\sf\n  \\definedummyword\\sl\n  \\definedummyword\\tclose\n  \\definedummyword\\tt\n  %\n  \\definedummyword\\LaTeX\n  \\definedummyword\\TeX\n  %\n  % Assorted special characters.\n  \\definedummyword\\bullet\n  \\definedummyword\\comma\n  \\definedummyword\\copyright\n  \\definedummyword\\registeredsymbol\n  \\definedummyword\\dots\n  \\definedummyword\\enddots\n  \\definedummyword\\equiv\n  \\definedummyword\\error\n  \\definedummyword\\euro\n  \\definedummyword\\expansion\n  \\definedummyword\\minus\n  \\definedummyword\\pounds\n  \\definedummyword\\point\n  \\definedummyword\\print\n  \\definedummyword\\result\n  %\n  % We want to disable all macros so that they are not expanded by \\write.\n  \\macrolist\n  %\n  \\normalturnoffactive\n  %\n  % Handle some cases of @value -- where it does not contain any\n  % (non-fully-expandable) commands.\n  \\makevalueexpandable\n}\n\n% \\commondummiesnofonts: common to \\commondummies and \\indexnofonts.\n%\n\\def\\commondummiesnofonts{%\n  % Control letters and accents.\n  \\definedummyletter\\!%\n  \\definedummyaccent\\\"%\n  \\definedummyaccent\\'%\n  \\definedummyletter\\*%\n  \\definedummyaccent\\,%\n  \\definedummyletter\\.%\n  \\definedummyletter\\/%\n  \\definedummyletter\\:%\n  \\definedummyaccent\\=%\n  \\definedummyletter\\?%\n  \\definedummyaccent\\^%\n  \\definedummyaccent\\`%\n  \\definedummyaccent\\~%\n  \\definedummyword\\u\n  \\definedummyword\\v\n  \\definedummyword\\H\n  \\definedummyword\\dotaccent\n  \\definedummyword\\ringaccent\n  \\definedummyword\\tieaccent\n  \\definedummyword\\ubaraccent\n  \\definedummyword\\udotaccent\n  \\definedummyword\\dotless\n  %\n  % Texinfo font commands.\n  \\definedummyword\\b\n  \\definedummyword\\i\n  \\definedummyword\\r\n  \\definedummyword\\sc\n  \\definedummyword\\t\n  %\n  % Commands that take arguments.\n  \\definedummyword\\acronym\n  \\definedummyword\\cite\n  \\definedummyword\\code\n  \\definedummyword\\command\n  \\definedummyword\\dfn\n  \\definedummyword\\emph\n  \\definedummyword\\env\n  \\definedummyword\\file\n  \\definedummyword\\kbd\n  \\definedummyword\\key\n  \\definedummyword\\math\n  \\definedummyword\\option\n  \\definedummyword\\pxref\n  \\definedummyword\\ref\n  \\definedummyword\\samp\n  \\definedummyword\\strong\n  \\definedummyword\\tie\n  \\definedummyword\\uref\n  \\definedummyword\\url\n  \\definedummyword\\var\n  \\definedummyword\\verb\n  \\definedummyword\\w\n  \\definedummyword\\xref\n}\n\n% \\indexnofonts is used when outputting the strings to sort the index\n% by, and when constructing control sequence names.  It eliminates all\n% control sequences and just writes whatever the best ASCII sort string\n% would be for a given command (usually its argument).\n%\n\\def\\indexnofonts{%\n  % Accent commands should become @asis.\n  \\def\\definedummyaccent##1{\\let##1\\asis}%\n  % We can just ignore other control letters.\n  \\def\\definedummyletter##1{\\let##1\\empty}%\n  % Hopefully, all control words can become @asis.\n  \\let\\definedummyword\\definedummyaccent\n  %\n  \\commondummiesnofonts\n  %\n  % Don't no-op \\tt, since it isn't a user-level command\n  % and is used in the definitions of the active chars like <, >, |, etc.\n  % Likewise with the other plain tex font commands.\n  %\\let\\tt=\\asis\n  %\n  \\def\\ { }%\n  \\def\\@{@}%\n  % how to handle braces?\n  \\def\\_{\\normalunderscore}%\n  %\n  % Non-English letters.\n  \\def\\AA{AA}%\n  \\def\\AE{AE}%\n  \\def\\L{L}%\n  \\def\\OE{OE}%\n  \\def\\O{O}%\n  \\def\\aa{aa}%\n  \\def\\ae{ae}%\n  \\def\\l{l}%\n  \\def\\oe{oe}%\n  \\def\\o{o}%\n  \\def\\ss{ss}%\n  \\def\\exclamdown{!}%\n  \\def\\questiondown{?}%\n  \\def\\ordf{a}%\n  \\def\\ordm{o}%\n  %\n  \\def\\LaTeX{LaTeX}%\n  \\def\\TeX{TeX}%\n  %\n  % Assorted special characters.\n  % (The following {} will end up in the sort string, but that's ok.)\n  \\def\\bullet{bullet}%\n  \\def\\comma{,}%\n  \\def\\copyright{copyright}%\n  \\def\\registeredsymbol{R}%\n  \\def\\dots{...}%\n  \\def\\enddots{...}%\n  \\def\\equiv{==}%\n  \\def\\error{error}%\n  \\def\\euro{euro}%\n  \\def\\expansion{==>}%\n  \\def\\minus{-}%\n  \\def\\pounds{pounds}%\n  \\def\\point{.}%\n  \\def\\print{-|}%\n  \\def\\result{=>}%\n  %\n  % We need to get rid of all macros, leaving only the arguments (if present).\n  % Of course this is not nearly correct, but it is the best we can do for now.\n  % makeinfo does not expand macros in the argument to @deffn, which ends up\n  % writing an index entry, and texindex isn't prepared for an index sort entry\n  % that starts with \\.\n  % \n  % Since macro invocations are followed by braces, we can just redefine them\n  % to take a single TeX argument.  The case of a macro invocation that\n  % goes to end-of-line is not handled.\n  % \n  \\macrolist\n}\n\n\\let\\indexbackslash=0  %overridden during \\printindex.\n\\let\\SETmarginindex=\\relax % put index entries in margin (undocumented)?\n\n% Most index entries go through here, but \\dosubind is the general case.\n% #1 is the index name, #2 is the entry text.\n\\def\\doind#1#2{\\dosubind{#1}{#2}{}}\n\n% Workhorse for all \\fooindexes.\n% #1 is name of index, #2 is stuff to put there, #3 is subentry --\n% empty if called from \\doind, as we usually are (the main exception\n% is with most defuns, which call us directly).\n%\n\\def\\dosubind#1#2#3{%\n  \\iflinks\n  {%\n    % Store the main index entry text (including the third arg).\n    \\toks0 = {#2}%\n    % If third arg is present, precede it with a space.\n    \\def\\thirdarg{#3}%\n    \\ifx\\thirdarg\\empty \\else\n      \\toks0 = \\expandafter{\\the\\toks0 \\space #3}%\n    \\fi\n    %\n    \\edef\\writeto{\\csname#1indfile\\endcsname}%\n    %\n    \\ifvmode\n      \\dosubindsanitize\n    \\else\n      \\dosubindwrite\n    \\fi\n  }%\n  \\fi\n}\n\n% Write the entry in \\toks0 to the index file:\n%\n\\def\\dosubindwrite{%\n  % Put the index entry in the margin if desired.\n  \\ifx\\SETmarginindex\\relax\\else\n    \\insert\\margin{\\hbox{\\vrule height8pt depth3pt width0pt \\the\\toks0}}%\n  \\fi\n  %\n  % Remember, we are within a group.\n  \\indexdummies % Must do this here, since \\bf, etc expand at this stage\n  \\def\\backslashcurfont{\\indexbackslash}% \\indexbackslash isn't defined now\n      % so it will be output as is; and it will print as backslash.\n  %\n  % Process the index entry with all font commands turned off, to\n  % get the string to sort by.\n  {\\indexnofonts\n   \\edef\\temp{\\the\\toks0}% need full expansion\n   \\xdef\\indexsorttmp{\\temp}%\n  }%\n  %\n  % Set up the complete index entry, with both the sort key and\n  % the original text, including any font commands.  We write\n  % three arguments to \\entry to the .?? file (four in the\n  % subentry case), texindex reduces to two when writing the .??s\n  % sorted result.\n  \\edef\\temp{%\n    \\write\\writeto{%\n      \\string\\entry{\\indexsorttmp}{\\noexpand\\folio}{\\the\\toks0}}%\n  }%\n  \\temp\n}\n\n% Take care of unwanted page breaks:\n%\n% If a skip is the last thing on the list now, preserve it\n% by backing up by \\lastskip, doing the \\write, then inserting\n% the skip again.  Otherwise, the whatsit generated by the\n% \\write will make \\lastskip zero.  The result is that sequences\n% like this:\n% @end defun\n% @tindex whatever\n% @defun ...\n% will have extra space inserted, because the \\medbreak in the\n% start of the @defun won't see the skip inserted by the @end of\n% the previous defun.\n%\n% But don't do any of this if we're not in vertical mode.  We\n% don't want to do a \\vskip and prematurely end a paragraph.\n%\n% Avoid page breaks due to these extra skips, too.\n%\n% But wait, there is a catch there:\n% We'll have to check whether \\lastskip is zero skip.  \\ifdim is not\n% sufficient for this purpose, as it ignores stretch and shrink parts\n% of the skip.  The only way seems to be to check the textual\n% representation of the skip.\n%\n% The following is almost like \\def\\zeroskipmacro{0.0pt} except that\n% the ``p'' and ``t'' characters have catcode \\other, not 11 (letter).\n%\n\\edef\\zeroskipmacro{\\expandafter\\the\\csname z@skip\\endcsname}\n%\n% ..., ready, GO:\n%\n\\def\\dosubindsanitize{%\n  % \\lastskip and \\lastpenalty cannot both be nonzero simultaneously.\n  \\skip0 = \\lastskip\n  \\edef\\lastskipmacro{\\the\\lastskip}%\n  \\count255 = \\lastpenalty\n  %\n  % If \\lastskip is nonzero, that means the last item was a\n  % skip.  And since a skip is discardable, that means this\n  % -\\skip0 glue we're inserting is preceded by a\n  % non-discardable item, therefore it is not a potential\n  % breakpoint, therefore no \\nobreak needed.\n  \\ifx\\lastskipmacro\\zeroskipmacro\n  \\else\n    \\vskip-\\skip0\n  \\fi\n  %\n  \\dosubindwrite\n  %\n  \\ifx\\lastskipmacro\\zeroskipmacro\n    % If \\lastskip was zero, perhaps the last item was a penalty, and\n    % perhaps it was >=10000, e.g., a \\nobreak.  In that case, we want\n    % to re-insert the same penalty (values >10000 are used for various\n    % signals); since we just inserted a non-discardable item, any\n    % following glue (such as a \\parskip) would be a breakpoint.  For example:\n    % \n    %   @deffn deffn-whatever\n    %   @vindex index-whatever\n    %   Description.\n    % would allow a break between the index-whatever whatsit\n    % and the \"Description.\" paragraph.\n    \\ifnum\\count255>9999 \\penalty\\count255 \\fi\n  \\else\n    % On the other hand, if we had a nonzero \\lastskip,\n    % this make-up glue would be preceded by a non-discardable item\n    % (the whatsit from the \\write), so we must insert a \\nobreak.\n    \\nobreak\\vskip\\skip0\n  \\fi\n}\n\n% The index entry written in the file actually looks like\n%  \\entry {sortstring}{page}{topic}\n% or\n%  \\entry {sortstring}{page}{topic}{subtopic}\n% The texindex program reads in these files and writes files\n% containing these kinds of lines:\n%  \\initial {c}\n%     before the first topic whose initial is c\n%  \\entry {topic}{pagelist}\n%     for a topic that is used without subtopics\n%  \\primary {topic}\n%     for the beginning of a topic that is used with subtopics\n%  \\secondary {subtopic}{pagelist}\n%     for each subtopic.\n\n% Define the user-accessible indexing commands\n% @findex, @vindex, @kindex, @cindex.\n\n\\def\\findex {\\fnindex}\n\\def\\kindex {\\kyindex}\n\\def\\cindex {\\cpindex}\n\\def\\vindex {\\vrindex}\n\\def\\tindex {\\tpindex}\n\\def\\pindex {\\pgindex}\n\n\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}\n{\\obeylines %\n\\gdef\\cindexsub \"#1\" #2^^M{\\endgroup %\n\\dosubind{cp}{#2}{#1}}}\n\n% Define the macros used in formatting output of the sorted index material.\n\n% @printindex causes a particular index (the ??s file) to get printed.\n% It does not print any chapter heading (usually an @unnumbered).\n%\n\\parseargdef\\printindex{\\begingroup\n  \\dobreak \\chapheadingskip{10000}%\n  %\n  \\smallfonts \\rm\n  \\tolerance = 9500\n  \\everypar = {}% don't want the \\kern\\-parindent from indentation suppression.\n  %\n  % See if the index file exists and is nonempty.\n  % Change catcode of @ here so that if the index file contains\n  % \\initial {@}\n  % as its first line, TeX doesn't complain about mismatched braces\n  % (because it thinks @} is a control sequence).\n  \\catcode`\\@ = 11\n  \\openin 1 \\jobname.#1s\n  \\ifeof 1\n    % \\enddoublecolumns gets confused if there is no text in the index,\n    % and it loses the chapter title and the aux file entries for the\n    % index.  The easiest way to prevent this problem is to make sure\n    % there is some text.\n    \\putwordIndexNonexistent\n  \\else\n    %\n    % If the index file exists but is empty, then \\openin leaves \\ifeof\n    % false.  We have to make TeX try to read something from the file, so\n    % it can discover if there is anything in it.\n    \\read 1 to \\temp\n    \\ifeof 1\n      \\putwordIndexIsEmpty\n    \\else\n      % Index files are almost Texinfo source, but we use \\ as the escape\n      % character.  It would be better to use @, but that's too big a change\n      % to make right now.\n      \\def\\indexbackslash{\\backslashcurfont}%\n      \\catcode`\\\\ = 0\n      \\escapechar = `\\\\\n      \\begindoublecolumns\n      \\input \\jobname.#1s\n      \\enddoublecolumns\n    \\fi\n  \\fi\n  \\closein 1\n\\endgroup}\n\n% These macros are used by the sorted index file itself.\n% Change them to control the appearance of the index.\n\n\\def\\initial#1{{%\n  % Some minor font changes for the special characters.\n  \\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt\n  %\n  % Remove any glue we may have, we'll be inserting our own.\n  \\removelastskip\n  %\n  % We like breaks before the index initials, so insert a bonus.\n  \\nobreak\n  \\vskip 0pt plus 3\\baselineskip\n  \\penalty 0\n  \\vskip 0pt plus -3\\baselineskip\n  %\n  % Typeset the initial.  Making this add up to a whole number of\n  % baselineskips increases the chance of the dots lining up from column\n  % to column.  It still won't often be perfect, because of the stretch\n  % we need before each entry, but it's better.\n  %\n  % No shrink because it confuses \\balancecolumns.\n  \\vskip 1.67\\baselineskip plus .5\\baselineskip\n  \\leftline{\\secbf #1}%\n  % Do our best not to break after the initial.\n  \\nobreak\n  \\vskip .33\\baselineskip plus .1\\baselineskip\n}}\n\n% \\entry typesets a paragraph consisting of the text (#1), dot leaders, and\n% then page number (#2) flushed to the right margin.  It is used for index\n% and table of contents entries.  The paragraph is indented by \\leftskip.\n%\n% A straightforward implementation would start like this:\n%\t\\def\\entry#1#2{...\n% But this frozes the catcodes in the argument, and can cause problems to\n% @code, which sets - active.  This problem was fixed by a kludge---\n% ``-'' was active throughout whole index, but this isn't really right.\n%\n% The right solution is to prevent \\entry from swallowing the whole text.\n%                                 --kasal, 21nov03\n\\def\\entry{%\n  \\begingroup\n    %\n    % Start a new paragraph if necessary, so our assignments below can't\n    % affect previous text.\n    \\par\n    %\n    % Do not fill out the last line with white space.\n    \\parfillskip = 0in\n    %\n    % No extra space above this paragraph.\n    \\parskip = 0in\n    %\n    % Do not prefer a separate line ending with a hyphen to fewer lines.\n    \\finalhyphendemerits = 0\n    %\n    % \\hangindent is only relevant when the entry text and page number\n    % don't both fit on one line.  In that case, bob suggests starting the\n    % dots pretty far over on the line.  Unfortunately, a large\n    % indentation looks wrong when the entry text itself is broken across\n    % lines.  So we use a small indentation and put up with long leaders.\n    %\n    % \\hangafter is reset to 1 (which is the value we want) at the start\n    % of each paragraph, so we need not do anything with that.\n    \\hangindent = 2em\n    %\n    % When the entry text needs to be broken, just fill out the first line\n    % with blank space.\n    \\rightskip = 0pt plus1fil\n    %\n    % A bit of stretch before each entry for the benefit of balancing\n    % columns.\n    \\vskip 0pt plus1pt\n    %\n    % Swallow the left brace of the text (first parameter):\n    \\afterassignment\\doentry\n    \\let\\temp =\n}\n\\def\\doentry{%\n    \\bgroup % Instead of the swallowed brace.\n      \\noindent\n      \\aftergroup\\finishentry\n      % And now comes the text of the entry.\n}\n\\def\\finishentry#1{%\n    % #1 is the page number.\n    %\n    % The following is kludged to not output a line of dots in the index if\n    % there are no page numbers.  The next person who breaks this will be\n    % cursed by a Unix daemon.\n    \\def\\tempa{{\\rm }}%\n    \\def\\tempb{#1}%\n    \\edef\\tempc{\\tempa}%\n    \\edef\\tempd{\\tempb}%\n    \\ifx\\tempc\\tempd\n      \\ %\n    \\else\n      %\n      % If we must, put the page number on a line of its own, and fill out\n      % this line with blank space.  (The \\hfil is overwhelmed with the\n      % fill leaders glue in \\indexdotfill if the page number does fit.)\n      \\hfil\\penalty50\n      \\null\\nobreak\\indexdotfill % Have leaders before the page number.\n      %\n      % The `\\ ' here is removed by the implicit \\unskip that TeX does as\n      % part of (the primitive) \\par.  Without it, a spurious underfull\n      % \\hbox ensues.\n      \\ifpdf\n\t\\pdfgettoks#1.%\n\t\\ \\the\\toksA\n      \\else\n\t\\ #1%\n      \\fi\n    \\fi\n    \\par\n  \\endgroup\n}\n\n% Like \\dotfill except takes at least 1 em.\n\\def\\indexdotfill{\\cleaders\n  \\hbox{$\\mathsurround=0pt \\mkern1.5mu ${\\it .}$ \\mkern1.5mu$}\\hskip 1em plus 1fill}\n\n\\def\\primary #1{\\line{#1\\hfil}}\n\n\\newskip\\secondaryindent \\secondaryindent=0.5cm\n\\def\\secondary#1#2{{%\n  \\parfillskip=0in\n  \\parskip=0in\n  \\hangindent=1in\n  \\hangafter=1\n  \\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotfill\n  \\ifpdf\n    \\pdfgettoks#2.\\ \\the\\toksA % The page number ends the paragraph.\n  \\else\n    #2\n  \\fi\n  \\par\n}}\n\n% Define two-column mode, which we use to typeset indexes.\n% Adapted from the TeXbook, page 416, which is to say,\n% the manmac.tex format used to print the TeXbook itself.\n\\catcode`\\@=11\n\n\\newbox\\partialpage\n\\newdimen\\doublecolumnhsize\n\n\\def\\begindoublecolumns{\\begingroup % ended by \\enddoublecolumns\n  % Grab any single-column material above us.\n  \\output = {%\n    %\n    % Here is a possibility not foreseen in manmac: if we accumulate a\n    % whole lot of material, we might end up calling this \\output\n    % routine twice in a row (see the doublecol-lose test, which is\n    % essentially a couple of indexes with @setchapternewpage off).  In\n    % that case we just ship out what is in \\partialpage with the normal\n    % output routine.  Generally, \\partialpage will be empty when this\n    % runs and this will be a no-op.  See the indexspread.tex test case.\n    \\ifvoid\\partialpage \\else\n      \\onepageout{\\pagecontents\\partialpage}%\n    \\fi\n    %\n    \\global\\setbox\\partialpage = \\vbox{%\n      % Unvbox the main output page.\n      \\unvbox\\PAGE\n      \\kern-\\topskip \\kern\\baselineskip\n    }%\n  }%\n  \\eject % run that output routine to set \\partialpage\n  %\n  % Use the double-column output routine for subsequent pages.\n  \\output = {\\doublecolumnout}%\n  %\n  % Change the page size parameters.  We could do this once outside this\n  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11\n  % format, but then we repeat the same computation.  Repeating a couple\n  % of assignments once per index is clearly meaningless for the\n  % execution time, so we may as well do it in one place.\n  %\n  % First we halve the line length, less a little for the gutter between\n  % the columns.  We compute the gutter based on the line length, so it\n  % changes automatically with the paper format.  The magic constant\n  % below is chosen so that the gutter has the same value (well, +-<1pt)\n  % as it did when we hard-coded it.\n  %\n  % We put the result in a separate register, \\doublecolumhsize, so we\n  % can restore it in \\pagesofar, after \\hsize itself has (potentially)\n  % been clobbered.\n  %\n  \\doublecolumnhsize = \\hsize\n    \\advance\\doublecolumnhsize by -.04154\\hsize\n    \\divide\\doublecolumnhsize by 2\n  \\hsize = \\doublecolumnhsize\n  %\n  % Double the \\vsize as well.  (We don't need a separate register here,\n  % since nobody clobbers \\vsize.)\n  \\vsize = 2\\vsize\n}\n\n% The double-column output routine for all double-column pages except\n% the last.\n%\n\\def\\doublecolumnout{%\n  \\splittopskip=\\topskip \\splitmaxdepth=\\maxdepth\n  % Get the available space for the double columns -- the normal\n  % (undoubled) page height minus any material left over from the\n  % previous page.\n  \\dimen@ = \\vsize\n  \\divide\\dimen@ by 2\n  \\advance\\dimen@ by -\\ht\\partialpage\n  %\n  % box0 will be the left-hand column, box2 the right.\n  \\setbox0=\\vsplit255 to\\dimen@ \\setbox2=\\vsplit255 to\\dimen@\n  \\onepageout\\pagesofar\n  \\unvbox255\n  \\penalty\\outputpenalty\n}\n%\n% Re-output the contents of the output page -- any previous material,\n% followed by the two boxes we just split, in box0 and box2.\n\\def\\pagesofar{%\n  \\unvbox\\partialpage\n  %\n  \\hsize = \\doublecolumnhsize\n  \\wd0=\\hsize \\wd2=\\hsize\n  \\hbox to\\pagewidth{\\box0\\hfil\\box2}%\n}\n%\n% All done with double columns.\n\\def\\enddoublecolumns{%\n  \\output = {%\n    % Split the last of the double-column material.  Leave it on the\n    % current page, no automatic page break.\n    \\balancecolumns\n    %\n    % If we end up splitting too much material for the current page,\n    % though, there will be another page break right after this \\output\n    % invocation ends.  Having called \\balancecolumns once, we do not\n    % want to call it again.  Therefore, reset \\output to its normal\n    % definition right away.  (We hope \\balancecolumns will never be\n    % called on to balance too much material, but if it is, this makes\n    % the output somewhat more palatable.)\n    \\global\\output = {\\onepageout{\\pagecontents\\PAGE}}%\n  }%\n  \\eject\n  \\endgroup % started in \\begindoublecolumns\n  %\n  % \\pagegoal was set to the doubled \\vsize above, since we restarted\n  % the current page.  We're now back to normal single-column\n  % typesetting, so reset \\pagegoal to the normal \\vsize (after the\n  % \\endgroup where \\vsize got restored).\n  \\pagegoal = \\vsize\n}\n%\n% Called at the end of the double column material.\n\\def\\balancecolumns{%\n  \\setbox0 = \\vbox{\\unvbox255}% like \\box255 but more efficient, see p.120.\n  \\dimen@ = \\ht0\n  \\advance\\dimen@ by \\topskip\n  \\advance\\dimen@ by-\\baselineskip\n  \\divide\\dimen@ by 2 % target to split to\n  %debug\\message{final 2-column material height=\\the\\ht0, target=\\the\\dimen@.}%\n  \\splittopskip = \\topskip\n  % Loop until we get a decent breakpoint.\n  {%\n    \\vbadness = 10000\n    \\loop\n      \\global\\setbox3 = \\copy0\n      \\global\\setbox1 = \\vsplit3 to \\dimen@\n    \\ifdim\\ht3>\\dimen@\n      \\global\\advance\\dimen@ by 1pt\n    \\repeat\n  }%\n  %debug\\message{split to \\the\\dimen@, column heights: \\the\\ht1, \\the\\ht3.}%\n  \\setbox0=\\vbox to\\dimen@{\\unvbox1}%\n  \\setbox2=\\vbox to\\dimen@{\\unvbox3}%\n  %\n  \\pagesofar\n}\n\\catcode`\\@ = \\other\n\n\n\\message{sectioning,}\n% Chapters, sections, etc.\n\n% \\unnumberedno is an oxymoron, of course.  But we count the unnumbered\n% sections so that we can refer to them unambiguously in the pdf\n% outlines by their \"section number\".  We avoid collisions with chapter\n% numbers by starting them at 10000.  (If a document ever has 10000\n% chapters, we're in trouble anyway, I'm sure.)\n\\newcount\\unnumberedno \\unnumberedno = 10000\n\\newcount\\chapno\n\\newcount\\secno        \\secno=0\n\\newcount\\subsecno     \\subsecno=0\n\\newcount\\subsubsecno  \\subsubsecno=0\n\n% This counter is funny since it counts through charcodes of letters A, B, ...\n\\newcount\\appendixno  \\appendixno = `\\@\n%\n% \\def\\appendixletter{\\char\\the\\appendixno}\n% We do the following ugly conditional instead of the above simple\n% construct for the sake of pdftex, which needs the actual\n% letter in the expansion, not just typeset.\n%\n\\def\\appendixletter{%\n  \\ifnum\\appendixno=`A A%\n  \\else\\ifnum\\appendixno=`B B%\n  \\else\\ifnum\\appendixno=`C C%\n  \\else\\ifnum\\appendixno=`D D%\n  \\else\\ifnum\\appendixno=`E E%\n  \\else\\ifnum\\appendixno=`F F%\n  \\else\\ifnum\\appendixno=`G G%\n  \\else\\ifnum\\appendixno=`H H%\n  \\else\\ifnum\\appendixno=`I I%\n  \\else\\ifnum\\appendixno=`J J%\n  \\else\\ifnum\\appendixno=`K K%\n  \\else\\ifnum\\appendixno=`L L%\n  \\else\\ifnum\\appendixno=`M M%\n  \\else\\ifnum\\appendixno=`N N%\n  \\else\\ifnum\\appendixno=`O O%\n  \\else\\ifnum\\appendixno=`P P%\n  \\else\\ifnum\\appendixno=`Q Q%\n  \\else\\ifnum\\appendixno=`R R%\n  \\else\\ifnum\\appendixno=`S S%\n  \\else\\ifnum\\appendixno=`T T%\n  \\else\\ifnum\\appendixno=`U U%\n  \\else\\ifnum\\appendixno=`V V%\n  \\else\\ifnum\\appendixno=`W W%\n  \\else\\ifnum\\appendixno=`X X%\n  \\else\\ifnum\\appendixno=`Y Y%\n  \\else\\ifnum\\appendixno=`Z Z%\n  % The \\the is necessary, despite appearances, because \\appendixletter is\n  % expanded while writing the .toc file.  \\char\\appendixno is not\n  % expandable, thus it is written literally, thus all appendixes come out\n  % with the same letter (or @) in the toc without it.\n  \\else\\char\\the\\appendixno\n  \\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\n  \\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi\\fi}\n\n% Each @chapter defines this as the name of the chapter.\n% page headings and footings can use it.  @section does likewise.\n% However, they are not reliable, because we don't use marks.\n\\def\\thischapter{}\n\\def\\thissection{}\n\n\\newcount\\absseclevel % used to calculate proper heading level\n\\newcount\\secbase\\secbase=0 % @raisesections/@lowersections modify this count\n\n% @raisesections: treat @section as chapter, @subsection as section, etc.\n\\def\\raisesections{\\global\\advance\\secbase by -1}\n\\let\\up=\\raisesections % original BFox name\n\n% @lowersections: treat @chapter as section, @section as subsection, etc.\n\\def\\lowersections{\\global\\advance\\secbase by 1}\n\\let\\down=\\lowersections % original BFox name\n\n% we only have subsub.\n\\chardef\\maxseclevel = 3\n%\n% A numbered section within an unnumbered changes to unnumbered too.\n% To achive this, remember the \"biggest\" unnum. sec. we are currently in:\n\\chardef\\unmlevel = \\maxseclevel\n%\n% Trace whether the current chapter is an appendix or not:\n% \\chapheadtype is \"N\" or \"A\", unnumbered chapters are ignored.\n\\def\\chapheadtype{N}\n\n% Choose a heading macro\n% #1 is heading type\n% #2 is heading level\n% #3 is text for heading\n\\def\\genhead#1#2#3{%\n  % Compute the abs. sec. level:\n  \\absseclevel=#2\n  \\advance\\absseclevel by \\secbase\n  % Make sure \\absseclevel doesn't fall outside the range:\n  \\ifnum \\absseclevel < 0\n    \\absseclevel = 0\n  \\else\n    \\ifnum \\absseclevel > 3\n      \\absseclevel = 3\n    \\fi\n  \\fi\n  % The heading type:\n  \\def\\headtype{#1}%\n  \\if \\headtype U%\n    \\ifnum \\absseclevel < \\unmlevel\n      \\chardef\\unmlevel = \\absseclevel\n    \\fi\n  \\else\n    % Check for appendix sections:\n    \\ifnum \\absseclevel = 0\n      \\edef\\chapheadtype{\\headtype}%\n    \\else\n      \\if \\headtype A\\if \\chapheadtype N%\n\t\\errmessage{@appendix... within a non-appendix chapter}%\n      \\fi\\fi\n    \\fi\n    % Check for numbered within unnumbered:\n    \\ifnum \\absseclevel > \\unmlevel\n      \\def\\headtype{U}%\n    \\else\n      \\chardef\\unmlevel = 3\n    \\fi\n  \\fi\n  % Now print the heading:\n  \\if \\headtype U%\n    \\ifcase\\absseclevel\n\t\\unnumberedzzz{#3}%\n    \\or \\unnumberedseczzz{#3}%\n    \\or \\unnumberedsubseczzz{#3}%\n    \\or \\unnumberedsubsubseczzz{#3}%\n    \\fi\n  \\else\n    \\if \\headtype A%\n      \\ifcase\\absseclevel\n\t  \\appendixzzz{#3}%\n      \\or \\appendixsectionzzz{#3}%\n      \\or \\appendixsubseczzz{#3}%\n      \\or \\appendixsubsubseczzz{#3}%\n      \\fi\n    \\else\n      \\ifcase\\absseclevel\n\t  \\chapterzzz{#3}%\n      \\or \\seczzz{#3}%\n      \\or \\numberedsubseczzz{#3}%\n      \\or \\numberedsubsubseczzz{#3}%\n      \\fi\n    \\fi\n  \\fi\n  \\suppressfirstparagraphindent\n}\n\n% an interface:\n\\def\\numhead{\\genhead N}\n\\def\\apphead{\\genhead A}\n\\def\\unnmhead{\\genhead U}\n\n% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset\n% all lower-level sectioning counters to zero.\n%\n% Also set \\chaplevelprefix, which we prepend to @float sequence numbers\n% (e.g., figures), q.v.  By default (before any chapter), that is empty.\n\\let\\chaplevelprefix = \\empty\n%\n\\outer\\parseargdef\\chapter{\\numhead0{#1}} % normally numhead0 calls chapterzzz\n\\def\\chapterzzz#1{%\n  % section resetting is \\global in case the chapter is in a group, such\n  % as an @include file.\n  \\global\\secno=0 \\global\\subsecno=0 \\global\\subsubsecno=0\n    \\global\\advance\\chapno by 1\n  %\n  % Used for \\float.\n  \\gdef\\chaplevelprefix{\\the\\chapno.}%\n  \\resetallfloatnos\n  %\n  \\message{\\putwordChapter\\space \\the\\chapno}%\n  %\n  % Write the actual heading.\n  \\chapmacro{#1}{Ynumbered}{\\the\\chapno}%\n  %\n  % So @section and the like are numbered underneath this chapter.\n  \\global\\let\\section = \\numberedsec\n  \\global\\let\\subsection = \\numberedsubsec\n  \\global\\let\\subsubsection = \\numberedsubsubsec\n}\n\n\\outer\\parseargdef\\appendix{\\apphead0{#1}} % normally apphead0 calls appendixzzz\n\\def\\appendixzzz#1{%\n  \\global\\secno=0 \\global\\subsecno=0 \\global\\subsubsecno=0\n    \\global\\advance\\appendixno by 1\n  \\gdef\\chaplevelprefix{\\appendixletter.}%\n  \\resetallfloatnos\n  %\n  \\def\\appendixnum{\\putwordAppendix\\space \\appendixletter}%\n  \\message{\\appendixnum}%\n  %\n  \\chapmacro{#1}{Yappendix}{\\appendixletter}%\n  %\n  \\global\\let\\section = \\appendixsec\n  \\global\\let\\subsection = \\appendixsubsec\n  \\global\\let\\subsubsection = \\appendixsubsubsec\n}\n\n\\outer\\parseargdef\\unnumbered{\\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz\n\\def\\unnumberedzzz#1{%\n  \\global\\secno=0 \\global\\subsecno=0 \\global\\subsubsecno=0\n    \\global\\advance\\unnumberedno by 1\n  %\n  % Since an unnumbered has no number, no prefix for figures.\n  \\global\\let\\chaplevelprefix = \\empty\n  \\resetallfloatnos\n  %\n  % This used to be simply \\message{#1}, but TeX fully expands the\n  % argument to \\message.  Therefore, if #1 contained @-commands, TeX\n  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX\n  % expanded @cite (which turns out to cause errors because \\cite is meant\n  % to be executed, not expanded).\n  %\n  % Anyway, we don't want the fully-expanded definition of @cite to appear\n  % as a result of the \\message, we just want `@cite' itself.  We use\n  % \\the<toks register> to achieve this: TeX expands \\the<toks> only once,\n  % simply yielding the contents of <toks register>.  (We also do this for\n  % the toc entries.)\n  \\toks0 = {#1}%\n  \\message{(\\the\\toks0)}%\n  %\n  \\chapmacro{#1}{Ynothing}{\\the\\unnumberedno}%\n  %\n  \\global\\let\\section = \\unnumberedsec\n  \\global\\let\\subsection = \\unnumberedsubsec\n  \\global\\let\\subsubsection = \\unnumberedsubsubsec\n}\n\n% @centerchap is like @unnumbered, but the heading is centered.\n\\outer\\parseargdef\\centerchap{%\n  % Well, we could do the following in a group, but that would break\n  % an assumption that \\chapmacro is called at the outermost level.\n  % Thus we are safer this way:\t\t--kasal, 24feb04\n  \\let\\centerparametersmaybe = \\centerparameters\n  \\unnmhead0{#1}%\n  \\let\\centerparametersmaybe = \\relax\n}\n\n% @top is like @unnumbered.\n\\let\\top\\unnumbered\n\n% Sections.\n\\outer\\parseargdef\\numberedsec{\\numhead1{#1}} % normally calls seczzz\n\\def\\seczzz#1{%\n  \\global\\subsecno=0 \\global\\subsubsecno=0  \\global\\advance\\secno by 1\n  \\sectionheading{#1}{sec}{Ynumbered}{\\the\\chapno.\\the\\secno}%\n}\n\n\\outer\\parseargdef\\appendixsection{\\apphead1{#1}} % normally calls appendixsectionzzz\n\\def\\appendixsectionzzz#1{%\n  \\global\\subsecno=0 \\global\\subsubsecno=0  \\global\\advance\\secno by 1\n  \\sectionheading{#1}{sec}{Yappendix}{\\appendixletter.\\the\\secno}%\n}\n\\let\\appendixsec\\appendixsection\n\n\\outer\\parseargdef\\unnumberedsec{\\unnmhead1{#1}} % normally calls unnumberedseczzz\n\\def\\unnumberedseczzz#1{%\n  \\global\\subsecno=0 \\global\\subsubsecno=0  \\global\\advance\\secno by 1\n  \\sectionheading{#1}{sec}{Ynothing}{\\the\\unnumberedno.\\the\\secno}%\n}\n\n% Subsections.\n\\outer\\parseargdef\\numberedsubsec{\\numhead2{#1}} % normally calls numberedsubseczzz\n\\def\\numberedsubseczzz#1{%\n  \\global\\subsubsecno=0  \\global\\advance\\subsecno by 1\n  \\sectionheading{#1}{subsec}{Ynumbered}{\\the\\chapno.\\the\\secno.\\the\\subsecno}%\n}\n\n\\outer\\parseargdef\\appendixsubsec{\\apphead2{#1}} % normally calls appendixsubseczzz\n\\def\\appendixsubseczzz#1{%\n  \\global\\subsubsecno=0  \\global\\advance\\subsecno by 1\n  \\sectionheading{#1}{subsec}{Yappendix}%\n                 {\\appendixletter.\\the\\secno.\\the\\subsecno}%\n}\n\n\\outer\\parseargdef\\unnumberedsubsec{\\unnmhead2{#1}} %normally calls unnumberedsubseczzz\n\\def\\unnumberedsubseczzz#1{%\n  \\global\\subsubsecno=0  \\global\\advance\\subsecno by 1\n  \\sectionheading{#1}{subsec}{Ynothing}%\n                 {\\the\\unnumberedno.\\the\\secno.\\the\\subsecno}%\n}\n\n% Subsubsections.\n\\outer\\parseargdef\\numberedsubsubsec{\\numhead3{#1}} % normally numberedsubsubseczzz\n\\def\\numberedsubsubseczzz#1{%\n  \\global\\advance\\subsubsecno by 1\n  \\sectionheading{#1}{subsubsec}{Ynumbered}%\n                 {\\the\\chapno.\\the\\secno.\\the\\subsecno.\\the\\subsubsecno}%\n}\n\n\\outer\\parseargdef\\appendixsubsubsec{\\apphead3{#1}} % normally appendixsubsubseczzz\n\\def\\appendixsubsubseczzz#1{%\n  \\global\\advance\\subsubsecno by 1\n  \\sectionheading{#1}{subsubsec}{Yappendix}%\n                 {\\appendixletter.\\the\\secno.\\the\\subsecno.\\the\\subsubsecno}%\n}\n\n\\outer\\parseargdef\\unnumberedsubsubsec{\\unnmhead3{#1}} %normally unnumberedsubsubseczzz\n\\def\\unnumberedsubsubseczzz#1{%\n  \\global\\advance\\subsubsecno by 1\n  \\sectionheading{#1}{subsubsec}{Ynothing}%\n                 {\\the\\unnumberedno.\\the\\secno.\\the\\subsecno.\\the\\subsubsecno}%\n}\n\n% These macros control what the section commands do, according\n% to what kind of chapter we are in (ordinary, appendix, or unnumbered).\n% Define them by default for a numbered chapter.\n\\let\\section = \\numberedsec\n\\let\\subsection = \\numberedsubsec\n\\let\\subsubsection = \\numberedsubsubsec\n\n% Define @majorheading, @heading and @subheading\n\n% NOTE on use of \\vbox for chapter headings, section headings, and such:\n%       1) We use \\vbox rather than the earlier \\line to permit\n%          overlong headings to fold.\n%       2) \\hyphenpenalty is set to 10000 because hyphenation in a\n%          heading is obnoxious; this forbids it.\n%       3) Likewise, headings look best if no \\parindent is used, and\n%          if justification is not attempted.  Hence \\raggedright.\n\n\n\\def\\majorheading{%\n  {\\advance\\chapheadingskip by 10pt \\chapbreak }%\n  \\parsearg\\chapheadingzzz\n}\n\n\\def\\chapheading{\\chapbreak \\parsearg\\chapheadingzzz}\n\\def\\chapheadingzzz#1{%\n  {\\chapfonts \\vbox{\\hyphenpenalty=10000\\tolerance=5000\n                    \\parindent=0pt\\raggedright\n                    \\rm #1\\hfill}}%\n  \\bigskip \\par\\penalty 200\\relax\n  \\suppressfirstparagraphindent\n}\n\n% @heading, @subheading, @subsubheading.\n\\parseargdef\\heading{\\sectionheading{#1}{sec}{Yomitfromtoc}{}\n  \\suppressfirstparagraphindent}\n\\parseargdef\\subheading{\\sectionheading{#1}{subsec}{Yomitfromtoc}{}\n  \\suppressfirstparagraphindent}\n\\parseargdef\\subsubheading{\\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}\n  \\suppressfirstparagraphindent}\n\n% These macros generate a chapter, section, etc. heading only\n% (including whitespace, linebreaking, etc. around it),\n% given all the information in convenient, parsed form.\n\n%%% Args are the skip and penalty (usually negative)\n\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelastskip\\penalty#2\\vskip#1\\fi}\n\n%%% Define plain chapter starts, and page on/off switching for it\n% Parameter controlling skip before chapter headings (if needed)\n\n\\newskip\\chapheadingskip\n\n\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}\n\\def\\chappager{\\par\\vfill\\supereject}\n\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\hbox to 0pt{} \\chappager\\fi}\n\n\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcsname}\n\n\\def\\CHAPPAGoff{%\n\\global\\let\\contentsalignmacro = \\chappager\n\\global\\let\\pchapsepmacro=\\chapbreak\n\\global\\let\\pagealignmacro=\\chappager}\n\n\\def\\CHAPPAGon{%\n\\global\\let\\contentsalignmacro = \\chappager\n\\global\\let\\pchapsepmacro=\\chappager\n\\global\\let\\pagealignmacro=\\chappager\n\\global\\def\\HEADINGSon{\\HEADINGSsingle}}\n\n\\def\\CHAPPAGodd{%\n\\global\\let\\contentsalignmacro = \\chapoddpage\n\\global\\let\\pchapsepmacro=\\chapoddpage\n\\global\\let\\pagealignmacro=\\chapoddpage\n\\global\\def\\HEADINGSon{\\HEADINGSdouble}}\n\n\\CHAPPAGon\n\n% Chapter opening.\n%\n% #1 is the text, #2 is the section type (Ynumbered, Ynothing,\n% Yappendix, Yomitfromtoc), #3 the chapter number.\n%\n% To test against our argument.\n\\def\\Ynothingkeyword{Ynothing}\n\\def\\Yomitfromtockeyword{Yomitfromtoc}\n\\def\\Yappendixkeyword{Yappendix}\n%\n\\def\\chapmacro#1#2#3{%\n  \\pchapsepmacro\n  {%\n    \\chapfonts \\rm\n    %\n    % Have to define \\thissection before calling \\donoderef, because the\n    % xref code eventually uses it.  On the other hand, it has to be called\n    % after \\pchapsepmacro, or the headline will change too soon.\n    \\gdef\\thissection{#1}%\n    \\gdef\\thischaptername{#1}%\n    %\n    % Only insert the separating space if we have a chapter/appendix\n    % number, and don't print the unnumbered ``number''.\n    \\def\\temptype{#2}%\n    \\ifx\\temptype\\Ynothingkeyword\n      \\setbox0 = \\hbox{}%\n      \\def\\toctype{unnchap}%\n      \\gdef\\thischapter{#1}%\n    \\else\\ifx\\temptype\\Yomitfromtockeyword\n      \\setbox0 = \\hbox{}% contents like unnumbered, but no toc entry\n      \\def\\toctype{omit}%\n      \\gdef\\thischapter{}%\n    \\else\\ifx\\temptype\\Yappendixkeyword\n      \\setbox0 = \\hbox{\\putwordAppendix{} #3\\enspace}%\n      \\def\\toctype{app}%\n      % We don't substitute the actual chapter name into \\thischapter\n      % because we don't want its macros evaluated now.  And we don't\n      % use \\thissection because that changes with each section.\n      %\n      \\xdef\\thischapter{\\putwordAppendix{} \\appendixletter:\n                        \\noexpand\\thischaptername}%\n    \\else\n      \\setbox0 = \\hbox{#3\\enspace}%\n      \\def\\toctype{numchap}%\n      \\xdef\\thischapter{\\putwordChapter{} \\the\\chapno:\n                        \\noexpand\\thischaptername}%\n    \\fi\\fi\\fi\n    %\n    % Write the toc entry for this chapter.  Must come before the\n    % \\donoderef, because we include the current node name in the toc\n    % entry, and \\donoderef resets it to empty.\n    \\writetocentry{\\toctype}{#1}{#3}%\n    %\n    % For pdftex, we have to write out the node definition (aka, make\n    % the pdfdest) after any page break, but before the actual text has\n    % been typeset.  If the destination for the pdf outline is after the\n    % text, then jumping from the outline may wind up with the text not\n    % being visible, for instance under high magnification.\n    \\donoderef{#2}%\n    %\n    % Typeset the actual heading.\n    \\vbox{\\hyphenpenalty=10000 \\tolerance=5000 \\parindent=0pt \\raggedright\n          \\hangindent=\\wd0 \\centerparametersmaybe\n          \\unhbox0 #1\\par}%\n  }%\n  \\nobreak\\bigskip % no page break after a chapter title\n  \\nobreak\n}\n\n% @centerchap -- centered and unnumbered.\n\\let\\centerparametersmaybe = \\relax\n\\def\\centerparameters{%\n  \\advance\\rightskip by 3\\rightskip\n  \\leftskip = \\rightskip\n  \\parfillskip = 0pt\n}\n\n\n% I don't think this chapter style is supported any more, so I'm not\n% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.\n%\n\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname}\n%\n\\def\\unnchfopen #1{%\n\\chapoddpage {\\chapfonts \\vbox{\\hyphenpenalty=10000\\tolerance=5000\n                       \\parindent=0pt\\raggedright\n                       \\rm #1\\hfill}}\\bigskip \\par\\nobreak\n}\n\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts\n\\vbox to 3in{\\vfil \\hbox to\\hsize{\\hfil #2} \\hbox to\\hsize{\\hfil #1} \\vfil}}%\n\\par\\penalty 5000 %\n}\n\\def\\centerchfopen #1{%\n\\chapoddpage {\\chapfonts \\vbox{\\hyphenpenalty=10000\\tolerance=5000\n                       \\parindent=0pt\n                       \\hfill {\\rm #1}\\hfill}}\\bigskip \\par\\nobreak\n}\n\\def\\CHAPFopen{%\n  \\global\\let\\chapmacro=\\chfopen\n  \\global\\let\\centerchapmacro=\\centerchfopen}\n\n\n% Section titles.  These macros combine the section number parts and\n% call the generic \\sectionheading to do the printing.\n%\n\\newskip\\secheadingskip\n\\def\\secheadingbreak{\\dobreak \\secheadingskip{-1000}}\n\n% Subsection titles.\n\\newskip\\subsecheadingskip\n\\def\\subsecheadingbreak{\\dobreak \\subsecheadingskip{-500}}\n\n% Subsubsection titles.\n\\def\\subsubsecheadingskip{\\subsecheadingskip}\n\\def\\subsubsecheadingbreak{\\subsecheadingbreak}\n\n\n% Print any size, any type, section title.\n%\n% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is\n% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the\n% section number.\n%\n\\def\\sectionheading#1#2#3#4{%\n  {%\n    % Switch to the right set of fonts.\n    \\csname #2fonts\\endcsname \\rm\n    %\n    % Insert space above the heading.\n    \\csname #2headingbreak\\endcsname\n    %\n    % Only insert the space after the number if we have a section number.\n    \\def\\sectionlevel{#2}%\n    \\def\\temptype{#3}%\n    %\n    \\ifx\\temptype\\Ynothingkeyword\n      \\setbox0 = \\hbox{}%\n      \\def\\toctype{unn}%\n      \\gdef\\thissection{#1}%\n    \\else\\ifx\\temptype\\Yomitfromtockeyword\n      % for @headings -- no section number, don't include in toc,\n      % and don't redefine \\thissection.\n      \\setbox0 = \\hbox{}%\n      \\def\\toctype{omit}%\n      \\let\\sectionlevel=\\empty\n    \\else\\ifx\\temptype\\Yappendixkeyword\n      \\setbox0 = \\hbox{#4\\enspace}%\n      \\def\\toctype{app}%\n      \\gdef\\thissection{#1}%\n    \\else\n      \\setbox0 = \\hbox{#4\\enspace}%\n      \\def\\toctype{num}%\n      \\gdef\\thissection{#1}%\n    \\fi\\fi\\fi\n    %\n    % Write the toc entry (before \\donoderef).  See comments in \\chapmacro.\n    \\writetocentry{\\toctype\\sectionlevel}{#1}{#4}%\n    %\n    % Write the node reference (= pdf destination for pdftex).\n    % Again, see comments in \\chapmacro.\n    \\donoderef{#3}%\n    %\n    % Interline glue will be inserted when the vbox is completed.\n    % That glue will be a valid breakpoint for the page, since it'll be\n    % preceded by a whatsit (usually from the \\donoderef, or from the\n    % \\writetocentry if there was no node).  We don't want to allow that\n    % break, since then the whatsits could end up on page n while the\n    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.\n    \\nobreak\n    %\n    % Output the actual section heading.\n    \\vbox{\\hyphenpenalty=10000 \\tolerance=5000 \\parindent=0pt \\raggedright\n          \\hangindent=\\wd0  % zero if no section number\n          \\unhbox0 #1}%\n  }%\n  % Add extra space after the heading -- half of whatever came above it.\n  % Don't allow stretch, though.\n  \\kern .5 \\csname #2headingskip\\endcsname\n  %\n  % Do not let the kern be a potential breakpoint, as it would be if it\n  % was followed by glue.\n  \\nobreak\n  %\n  % We'll almost certainly start a paragraph next, so don't let that\n  % glue accumulate.  (Not a breakpoint because it's preceded by a\n  % discardable item.)\n  \\vskip-\\parskip\n  % \n  % This is purely so the last item on the list is a known \\penalty >\n  % 10000.  This is so \\startdefun can avoid allowing breakpoints after\n  % section headings.  Otherwise, it would insert a valid breakpoint between:\n  % \n  %   @section sec-whatever\n  %   @deffn def-whatever\n  \\penalty 10001\n}\n\n\n\\message{toc,}\n% Table of contents.\n\\newwrite\\tocfile\n\n% Write an entry to the toc file, opening it if necessary.\n% Called from @chapter, etc.\n%\n% Example usage: \\writetocentry{sec}{Section Name}{\\the\\chapno.\\the\\secno}\n% We append the current node name (if any) and page number as additional\n% arguments for the \\{chap,sec,...}entry macros which will eventually\n% read this.  The node name is used in the pdf outlines as the\n% destination to jump to.\n%\n% We open the .toc file for writing here instead of at @setfilename (or\n% any other fixed time) so that @contents can be anywhere in the document.\n% But if #1 is `omit', then we don't do anything.  This is used for the\n% table of contents chapter openings themselves.\n%\n\\newif\\iftocfileopened\n\\def\\omitkeyword{omit}%\n%\n\\def\\writetocentry#1#2#3{%\n  \\edef\\writetoctype{#1}%\n  \\ifx\\writetoctype\\omitkeyword \\else\n    \\iftocfileopened\\else\n      \\immediate\\openout\\tocfile = \\jobname.toc\n      \\global\\tocfileopenedtrue\n    \\fi\n    %\n    \\iflinks\n      {\\atdummies\n       \\edef\\temp{%\n         \\write\\tocfile{@#1entry{#2}{#3}{\\lastnode}{\\noexpand\\folio}}}%\n       \\temp\n      }%\n    \\fi\n  \\fi\n  %\n  % Tell \\shipout to create a pdf destination on each page, if we're\n  % writing pdf.  These are used in the table of contents.  We can't\n  % just write one on every page because the title pages are numbered\n  % 1 and 2 (the page numbers aren't printed), and so are the first\n  % two pages of the document.  Thus, we'd have two destinations named\n  % `1', and two named `2'.\n  \\ifpdf \\global\\pdfmakepagedesttrue \\fi\n}\n\n\n% These characters do not print properly in the Computer Modern roman\n% fonts, so we must take special care.  This is more or less redundant\n% with the Texinfo input format setup at the end of this file.\n% \n\\def\\activecatcodes{%\n  \\catcode`\\\"=\\active\n  \\catcode`\\$=\\active\n  \\catcode`\\<=\\active\n  \\catcode`\\>=\\active\n  \\catcode`\\\\=\\active\n  \\catcode`\\^=\\active\n  \\catcode`\\_=\\active\n  \\catcode`\\|=\\active\n  \\catcode`\\~=\\active\n}\n\n\n% Read the toc file, which is essentially Texinfo input.\n\\def\\readtocfile{%\n  \\setupdatafile\n  \\activecatcodes\n  \\input \\jobname.toc\n}\n\n\\newskip\\contentsrightmargin \\contentsrightmargin=1in\n\\newcount\\savepageno\n\\newcount\\lastnegativepageno \\lastnegativepageno = -1\n\n% Prepare to read what we've written to \\tocfile.\n%\n\\def\\startcontents#1{%\n  % If @setchapternewpage on, and @headings double, the contents should\n  % start on an odd page, unlike chapters.  Thus, we maintain\n  % \\contentsalignmacro in parallel with \\pagealignmacro.\n  % From: Torbjorn Granlund <tege@matematik.su.se>\n  \\contentsalignmacro\n  \\immediate\\closeout\\tocfile\n  %\n  % Don't need to put `Contents' or `Short Contents' in the headline.\n  % It is abundantly clear what they are.\n  \\def\\thischapter{}%\n  \\chapmacro{#1}{Yomitfromtoc}{}%\n  %\n  \\savepageno = \\pageno\n  \\begingroup                  % Set up to handle contents files properly.\n    \\raggedbottom              % Worry more about breakpoints than the bottom.\n    \\advance\\hsize by -\\contentsrightmargin % Don't use the full line length.\n    %\n    % Roman numerals for page numbers.\n    \\ifnum \\pageno>0 \\global\\pageno = \\lastnegativepageno \\fi\n}\n\n\n% Normal (long) toc.\n\\def\\contents{%\n  \\startcontents{\\putwordTOC}%\n    \\openin 1 \\jobname.toc\n    \\ifeof 1 \\else\n      \\readtocfile\n    \\fi\n    \\vfill \\eject\n    \\contentsalignmacro % in case @setchapternewpage odd is in effect\n    \\ifeof 1 \\else\n      \\pdfmakeoutlines\n    \\fi\n    \\closein 1\n  \\endgroup\n  \\lastnegativepageno = \\pageno\n  \\global\\pageno = \\savepageno\n}\n\n% And just the chapters.\n\\def\\summarycontents{%\n  \\startcontents{\\putwordShortTOC}%\n    %\n    \\let\\numchapentry = \\shortchapentry\n    \\let\\appentry = \\shortchapentry\n    \\let\\unnchapentry = \\shortunnchapentry\n    % We want a true roman here for the page numbers.\n    \\secfonts\n    \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf\n    \\let\\sl=\\shortcontsl \\let\\tt=\\shortconttt\n    \\rm\n    \\hyphenpenalty = 10000\n    \\advance\\baselineskip by 1pt % Open it up a little.\n    \\def\\numsecentry##1##2##3##4{}\n    \\let\\appsecentry = \\numsecentry\n    \\let\\unnsecentry = \\numsecentry\n    \\let\\numsubsecentry = \\numsecentry\n    \\let\\appsubsecentry = \\numsecentry\n    \\let\\unnsubsecentry = \\numsecentry\n    \\let\\numsubsubsecentry = \\numsecentry\n    \\let\\appsubsubsecentry = \\numsecentry\n    \\let\\unnsubsubsecentry = \\numsecentry\n    \\openin 1 \\jobname.toc\n    \\ifeof 1 \\else\n      \\readtocfile\n    \\fi\n    \\closein 1\n    \\vfill \\eject\n    \\contentsalignmacro % in case @setchapternewpage odd is in effect\n  \\endgroup\n  \\lastnegativepageno = \\pageno\n  \\global\\pageno = \\savepageno\n}\n\\let\\shortcontents = \\summarycontents\n\n% Typeset the label for a chapter or appendix for the short contents.\n% The arg is, e.g., `A' for an appendix, or `3' for a chapter.\n%\n\\def\\shortchaplabel#1{%\n  % This space should be enough, since a single number is .5em, and the\n  % widest letter (M) is 1em, at least in the Computer Modern fonts.\n  % But use \\hss just in case.\n  % (This space doesn't include the extra space that gets added after\n  % the label; that gets put in by \\shortchapentry above.)\n  %\n  % We'd like to right-justify chapter numbers, but that looks strange\n  % with appendix letters.  And right-justifying numbers and\n  % left-justifying letters looks strange when there is less than 10\n  % chapters.  Have to read the whole toc once to know how many chapters\n  % there are before deciding ...\n  \\hbox to 1em{#1\\hss}%\n}\n\n% These macros generate individual entries in the table of contents.\n% The first argument is the chapter or section name.\n% The last argument is the page number.\n% The arguments in between are the chapter number, section number, ...\n\n% Chapters, in the main contents.\n\\def\\numchapentry#1#2#3#4{\\dochapentry{#2\\labelspace#1}{#4}}\n%\n% Chapters, in the short toc.\n% See comments in \\dochapentry re vbox and related settings.\n\\def\\shortchapentry#1#2#3#4{%\n  \\tocentry{\\shortchaplabel{#2}\\labelspace #1}{\\doshortpageno\\bgroup#4\\egroup}%\n}\n\n% Appendices, in the main contents.\n% Need the word Appendix, and a fixed-size box.\n%\n\\def\\appendixbox#1{%\n  % We use M since it's probably the widest letter.\n  \\setbox0 = \\hbox{\\putwordAppendix{} M}%\n  \\hbox to \\wd0{\\putwordAppendix{} #1\\hss}}\n%\n\\def\\appentry#1#2#3#4{\\dochapentry{\\appendixbox{#2}\\labelspace#1}{#4}}\n\n% Unnumbered chapters.\n\\def\\unnchapentry#1#2#3#4{\\dochapentry{#1}{#4}}\n\\def\\shortunnchapentry#1#2#3#4{\\tocentry{#1}{\\doshortpageno\\bgroup#4\\egroup}}\n\n% Sections.\n\\def\\numsecentry#1#2#3#4{\\dosecentry{#2\\labelspace#1}{#4}}\n\\let\\appsecentry=\\numsecentry\n\\def\\unnsecentry#1#2#3#4{\\dosecentry{#1}{#4}}\n\n% Subsections.\n\\def\\numsubsecentry#1#2#3#4{\\dosubsecentry{#2\\labelspace#1}{#4}}\n\\let\\appsubsecentry=\\numsubsecentry\n\\def\\unnsubsecentry#1#2#3#4{\\dosubsecentry{#1}{#4}}\n\n% And subsubsections.\n\\def\\numsubsubsecentry#1#2#3#4{\\dosubsubsecentry{#2\\labelspace#1}{#4}}\n\\let\\appsubsubsecentry=\\numsubsubsecentry\n\\def\\unnsubsubsecentry#1#2#3#4{\\dosubsubsecentry{#1}{#4}}\n\n% This parameter controls the indentation of the various levels.\n% Same as \\defaultparindent.\n\\newdimen\\tocindent \\tocindent = 15pt\n\n% Now for the actual typesetting. In all these, #1 is the text and #2 is the\n% page number.\n%\n% If the toc has to be broken over pages, we want it to be at chapters\n% if at all possible; hence the \\penalty.\n\\def\\dochapentry#1#2{%\n   \\penalty-300 \\vskip1\\baselineskip plus.33\\baselineskip minus.25\\baselineskip\n   \\begingroup\n     \\chapentryfonts\n     \\tocentry{#1}{\\dopageno\\bgroup#2\\egroup}%\n   \\endgroup\n   \\nobreak\\vskip .25\\baselineskip plus.1\\baselineskip\n}\n\n\\def\\dosecentry#1#2{\\begingroup\n  \\secentryfonts \\leftskip=\\tocindent\n  \\tocentry{#1}{\\dopageno\\bgroup#2\\egroup}%\n\\endgroup}\n\n\\def\\dosubsecentry#1#2{\\begingroup\n  \\subsecentryfonts \\leftskip=2\\tocindent\n  \\tocentry{#1}{\\dopageno\\bgroup#2\\egroup}%\n\\endgroup}\n\n\\def\\dosubsubsecentry#1#2{\\begingroup\n  \\subsubsecentryfonts \\leftskip=3\\tocindent\n  \\tocentry{#1}{\\dopageno\\bgroup#2\\egroup}%\n\\endgroup}\n\n% We use the same \\entry macro as for the index entries.\n\\let\\tocentry = \\entry\n\n% Space between chapter (or whatever) number and the title.\n\\def\\labelspace{\\hskip1em \\relax}\n\n\\def\\dopageno#1{{\\rm #1}}\n\\def\\doshortpageno#1{{\\rm #1}}\n\n\\def\\chapentryfonts{\\secfonts \\rm}\n\\def\\secentryfonts{\\textfonts}\n\\def\\subsecentryfonts{\\textfonts}\n\\def\\subsubsecentryfonts{\\textfonts}\n\n\n\\message{environments,}\n% @foo ... @end foo.\n\n% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.\n%\n% Since these characters are used in examples, it should be an even number of\n% \\tt widths. Each \\tt character is 1en, so two makes it 1em.\n%\n\\def\\point{$\\star$}\n\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hfil$\\Rightarrow$\\hfil}}\n\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\hfil$\\mapsto$\\hfil}}\n\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil$\\dashv$\\hfil}}\n\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil$\\ptexequiv$\\hfil}}\n\n% The @error{} command.\n% Adapted from the TeXbook's \\boxit.\n%\n\\newbox\\errorbox\n%\n{\\tentt \\global\\dimen0 = 3em}% Width of the box.\n\\dimen2 = .55pt % Thickness of rules\n% The text. (`r' is open on the right, `e' somewhat less so on the left.)\n\\setbox0 = \\hbox{\\kern-.75pt \\tensf error\\kern-1.5pt}\n%\n\\setbox\\errorbox=\\hbox to \\dimen0{\\hfil\n   \\hsize = \\dimen0 \\advance\\hsize by -5.8pt % Space to left+right.\n   \\advance\\hsize by -2\\dimen2 % Rules.\n   \\vbox{%\n      \\hrule height\\dimen2\n      \\hbox{\\vrule width\\dimen2 \\kern3pt          % Space to left of text.\n         \\vtop{\\kern2.4pt \\box0 \\kern2.4pt}% Space above/below.\n         \\kern3pt\\vrule width\\dimen2}% Space to right.\n      \\hrule height\\dimen2}\n    \\hfil}\n%\n\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}\n\n% @tex ... @end tex    escapes into raw Tex temporarily.\n% One exception: @ is still an escape character, so that @end tex works.\n% But \\@ or @@ will get a plain tex @ character.\n\n\\envdef\\tex{%\n  \\catcode `\\\\=0 \\catcode `\\{=1 \\catcode `\\}=2\n  \\catcode `\\$=3 \\catcode `\\&=4 \\catcode `\\#=6\n  \\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=\\active \\let~=\\tie\n  \\catcode `\\%=14\n  \\catcode `\\+=\\other\n  \\catcode `\\\"=\\other\n  \\catcode `\\|=\\other\n  \\catcode `\\<=\\other\n  \\catcode `\\>=\\other\n  \\escapechar=`\\\\\n  %\n  \\let\\b=\\ptexb\n  \\let\\bullet=\\ptexbullet\n  \\let\\c=\\ptexc\n  \\let\\,=\\ptexcomma\n  \\let\\.=\\ptexdot\n  \\let\\dots=\\ptexdots\n  \\let\\equiv=\\ptexequiv\n  \\let\\!=\\ptexexclam\n  \\let\\i=\\ptexi\n  \\let\\indent=\\ptexindent\n  \\let\\noindent=\\ptexnoindent\n  \\let\\{=\\ptexlbrace\n  \\let\\+=\\tabalign\n  \\let\\}=\\ptexrbrace\n  \\let\\/=\\ptexslash\n  \\let\\*=\\ptexstar\n  \\let\\t=\\ptext\n  \\let\\frenchspacing=\\plainfrenchspacing\n  %\n  \\def\\endldots{\\mathinner{\\ldots\\ldots\\ldots\\ldots}}%\n  \\def\\enddots{\\relax\\ifmmode\\endldots\\else$\\mathsurround=0pt \\endldots\\,$\\fi}%\n  \\def\\@{@}%\n}\n% There is no need to define \\Etex.\n\n% Define @lisp ... @end lisp.\n% @lisp environment forms a group so it can rebind things,\n% including the definition of @end lisp (which normally is erroneous).\n\n% Amount to narrow the margins by for @lisp.\n\\newskip\\lispnarrowing \\lispnarrowing=0.4in\n\n% This is the definition that ^^M gets inside @lisp, @example, and other\n% such environments.  \\null is better than a space, since it doesn't\n% have any width.\n\\def\\lisppar{\\null\\endgraf}\n\n% This space is always present above and below environments.\n\\newskip\\envskipamount \\envskipamount = 0pt\n\n% Make spacing and below environment symmetrical.  We use \\parskip here\n% to help in doing that, since in @example-like environments \\parskip\n% is reset to zero; thus the \\afterenvbreak inserts no space -- but the\n% start of the next paragraph will insert \\parskip.\n%\n\\def\\aboveenvbreak{{%\n  % =10000 instead of <10000 because of a special case in \\itemzzz and\n  % \\sectionheading, q.v.\n  \\ifnum \\lastpenalty=10000 \\else\n    \\advance\\envskipamount by \\parskip\n    \\endgraf\n    \\ifdim\\lastskip<\\envskipamount\n      \\removelastskip\n      % it's not a good place to break if the last penalty was \\nobreak\n      % or better ...\n      \\ifnum\\lastpenalty<10000 \\penalty-50 \\fi\n      \\vskip\\envskipamount\n    \\fi\n  \\fi\n}}\n\n\\let\\afterenvbreak = \\aboveenvbreak\n\n% \\nonarrowing is a flag.  If \"set\", @lisp etc don't narrow margins; it will\n% also clear it, so that its embedded environments do the narrowing again.\n\\let\\nonarrowing=\\relax\n\n% @cartouche ... @end cartouche: draw rectangle w/rounded corners around\n% environment contents.\n\\font\\circle=lcircle10\n\\newdimen\\circthick\n\\newdimen\\cartouter\\newdimen\\cartinner\n\\newskip\\normbskip\\newskip\\normpskip\\newskip\\normlskip\n\\circthick=\\fontdimen8\\circle\n%\n\\def\\ctl{{\\circle\\char'013\\hskip -6pt}}% 6pt from pl file: 1/2charwidth\n\\def\\ctr{{\\hskip 6pt\\circle\\char'010}}\n\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}\n\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}\n\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip\n        \\ctl\\leaders\\hrule height\\circthick\\hfil\\ctr\n        \\hskip\\rskip}}\n\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip\n        \\cbl\\leaders\\hrule height\\circthick\\hfil\\cbr\n        \\hskip\\rskip}}\n%\n\\newskip\\lskip\\newskip\\rskip\n\n\\envdef\\cartouche{%\n  \\ifhmode\\par\\fi  % can't be in the midst of a paragraph.\n  \\startsavinginserts\n  \\lskip=\\leftskip \\rskip=\\rightskip\n  \\leftskip=0pt\\rightskip=0pt % we want these *outside*.\n  \\cartinner=\\hsize \\advance\\cartinner by-\\lskip\n  \\advance\\cartinner by-\\rskip\n  \\cartouter=\\hsize\n  \\advance\\cartouter by 18.4pt\t% allow for 3pt kerns on either\n\t\t\t\t% side, and for 6pt waste from\n\t\t\t\t% each corner char, and rule thickness\n  \\normbskip=\\baselineskip \\normpskip=\\parskip \\normlskip=\\lineskip\n  % Flag to tell @lisp, etc., not to narrow margin.\n  \\let\\nonarrowing = t%\n  \\vbox\\bgroup\n      \\baselineskip=0pt\\parskip=0pt\\lineskip=0pt\n      \\carttop\n      \\hbox\\bgroup\n\t  \\hskip\\lskip\n\t  \\vrule\\kern3pt\n\t  \\vbox\\bgroup\n\t      \\kern3pt\n\t      \\hsize=\\cartinner\n\t      \\baselineskip=\\normbskip\n\t      \\lineskip=\\normlskip\n\t      \\parskip=\\normpskip\n\t      \\vskip -\\parskip\n\t      \\comment % For explanation, see the end of \\def\\group.\n}\n\\def\\Ecartouche{%\n              \\ifhmode\\par\\fi\n\t      \\kern3pt\n\t  \\egroup\n\t  \\kern3pt\\vrule\n\t  \\hskip\\rskip\n      \\egroup\n      \\cartbot\n  \\egroup\n  \\checkinserts\n}\n\n\n% This macro is called at the beginning of all the @example variants,\n% inside a group.\n\\def\\nonfillstart{%\n  \\aboveenvbreak\n  \\hfuzz = 12pt % Don't be fussy\n  \\sepspaces % Make spaces be word-separators rather than space tokens.\n  \\let\\par = \\lisppar % don't ignore blank lines\n  \\obeylines % each line of input is a line of output\n  \\parskip = 0pt\n  \\parindent = 0pt\n  \\emergencystretch = 0pt % don't try to avoid overfull boxes\n  \\ifx\\nonarrowing\\relax\n    \\advance \\leftskip by \\lispnarrowing\n    \\exdentamount=\\lispnarrowing\n  \\else\n    \\let\\nonarrowing = \\relax\n  \\fi\n  \\let\\exdent=\\nofillexdent\n}\n\n% If you want all examples etc. small: @set dispenvsize small.\n% If you want even small examples the full size: @set dispenvsize nosmall.\n% This affects the following displayed environments:\n%    @example, @display, @format, @lisp\n%\n\\def\\smallword{small}\n\\def\\nosmallword{nosmall}\n\\let\\SETdispenvsize\\relax\n\\def\\setnormaldispenv{%\n  \\ifx\\SETdispenvsize\\smallword\n    \\smallexamplefonts \\rm\n  \\fi\n}\n\\def\\setsmalldispenv{%\n  \\ifx\\SETdispenvsize\\nosmallword\n  \\else\n    \\smallexamplefonts \\rm\n  \\fi\n}\n\n% We often define two environments, @foo and @smallfoo.\n% Let's do it by one command:\n\\def\\makedispenv #1#2{\n  \\expandafter\\envdef\\csname#1\\endcsname {\\setnormaldispenv #2}\n  \\expandafter\\envdef\\csname small#1\\endcsname {\\setsmalldispenv #2}\n  \\expandafter\\let\\csname E#1\\endcsname \\afterenvbreak\n  \\expandafter\\let\\csname Esmall#1\\endcsname \\afterenvbreak\n}\n\n% Define two synonyms:\n\\def\\maketwodispenvs #1#2#3{\n  \\makedispenv{#1}{#3}\n  \\makedispenv{#2}{#3}\n}\n\n% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.\n%\n% @smallexample and @smalllisp: use smaller fonts.\n% Originally contributed by Pavel@xerox.\n%\n\\maketwodispenvs {lisp}{example}{%\n  \\nonfillstart\n  \\tt\n  \\let\\kbdfont = \\kbdexamplefont % Allow @kbd to do something special.\n  \\gobble       % eat return\n}\n\n% @display/@smalldisplay: same as @lisp except keep current font.\n%\n\\makedispenv {display}{%\n  \\nonfillstart\n  \\gobble\n}\n\n% @format/@smallformat: same as @display except don't narrow margins.\n%\n\\makedispenv{format}{%\n  \\let\\nonarrowing = t%\n  \\nonfillstart\n  \\gobble\n}\n\n% @flushleft: same as @format, but doesn't obey \\SETdispenvsize.\n\\envdef\\flushleft{%\n  \\let\\nonarrowing = t%\n  \\nonfillstart\n  \\gobble\n}\n\\let\\Eflushleft = \\afterenvbreak\n\n% @flushright.\n%\n\\envdef\\flushright{%\n  \\let\\nonarrowing = t%\n  \\nonfillstart\n  \\advance\\leftskip by 0pt plus 1fill\n  \\gobble\n}\n\\let\\Eflushright = \\afterenvbreak\n\n\n% @quotation does normal linebreaking (hence we can't use \\nonfillstart)\n% and narrows the margins.  We keep \\parskip nonzero in general, since\n% we're doing normal filling.  So, when using \\aboveenvbreak and\n% \\afterenvbreak, temporarily make \\parskip 0.\n%\n\\envdef\\quotation{%\n  {\\parskip=0pt \\aboveenvbreak}% because \\aboveenvbreak inserts \\parskip\n  \\parindent=0pt\n  %\n  % @cartouche defines \\nonarrowing to inhibit narrowing at next level down.\n  \\ifx\\nonarrowing\\relax\n    \\advance\\leftskip by \\lispnarrowing\n    \\advance\\rightskip by \\lispnarrowing\n    \\exdentamount = \\lispnarrowing\n  \\else\n    \\let\\nonarrowing = \\relax\n  \\fi\n  \\parsearg\\quotationlabel\n}\n\n% We have retained a nonzero parskip for the environment, since we're\n% doing normal filling.\n%\n\\def\\Equotation{%\n  \\par\n  \\ifx\\quotationauthor\\undefined\\else\n    % indent a bit.\n    \\leftline{\\kern 2\\leftskip \\sl ---\\quotationauthor}%\n  \\fi\n  {\\parskip=0pt \\afterenvbreak}%\n}\n\n% If we're given an argument, typeset it in bold with a colon after.\n\\def\\quotationlabel#1{%\n  \\def\\temp{#1}%\n  \\ifx\\temp\\empty \\else\n    {\\bf #1: }%\n  \\fi\n}\n\n\n% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}\n% If we want to allow any <char> as delimiter,\n% we need the curly braces so that makeinfo sees the @verb command, eg:\n% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org\n%\n% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.\n%\n% [Knuth] p.344; only we need to do the other characters Texinfo sets\n% active too.  Otherwise, they get lost as the first character on a\n% verbatim line.\n\\def\\dospecials{%\n  \\do\\ \\do\\\\\\do\\{\\do\\}\\do\\$\\do\\&%\n  \\do\\#\\do\\^\\do\\^^K\\do\\_\\do\\^^A\\do\\%\\do\\~%\n  \\do\\<\\do\\>\\do\\|\\do\\@\\do+\\do\\\"%\n}\n%\n% [Knuth] p. 380\n\\def\\uncatcodespecials{%\n  \\def\\do##1{\\catcode`##1=\\other}\\dospecials}\n%\n% [Knuth] pp. 380,381,391\n% Disable Spanish ligatures ?` and !` of \\tt font\n\\begingroup\n  \\catcode`\\`=\\active\\gdef`{\\relax\\lq}\n\\endgroup\n%\n% Setup for the @verb command.\n%\n% Eight spaces for a tab\n\\begingroup\n  \\catcode`\\^^I=\\active\n  \\gdef\\tabeightspaces{\\catcode`\\^^I=\\active\\def^^I{\\ \\ \\ \\ \\ \\ \\ \\ }}\n\\endgroup\n%\n\\def\\setupverb{%\n  \\tt  % easiest (and conventionally used) font for verbatim\n  \\def\\par{\\leavevmode\\endgraf}%\n  \\catcode`\\`=\\active\n  \\tabeightspaces\n  % Respect line breaks,\n  % print special symbols as themselves, and\n  % make each space count\n  % must do in this order:\n  \\obeylines \\uncatcodespecials \\sepspaces\n}\n\n% Setup for the @verbatim environment\n%\n% Real tab expansion\n\\newdimen\\tabw \\setbox0=\\hbox{\\tt\\space} \\tabw=8\\wd0 % tab amount\n%\n\\def\\starttabbox{\\setbox0=\\hbox\\bgroup}\n\\begingroup\n  \\catcode`\\^^I=\\active\n  \\gdef\\tabexpand{%\n    \\catcode`\\^^I=\\active\n    \\def^^I{\\leavevmode\\egroup\n      \\dimen0=\\wd0 % the width so far, or since the previous tab\n      \\divide\\dimen0 by\\tabw\n      \\multiply\\dimen0 by\\tabw % compute previous multiple of \\tabw\n      \\advance\\dimen0 by\\tabw  % advance to next multiple of \\tabw\n      \\wd0=\\dimen0 \\box0 \\starttabbox\n    }%\n  }\n\\endgroup\n\\def\\setupverbatim{%\n  \\let\\nonarrowing = t%\n  \\nonfillstart\n  % Easiest (and conventionally used) font for verbatim\n  \\tt\n  \\def\\par{\\leavevmode\\egroup\\box0\\endgraf}%\n  \\catcode`\\`=\\active\n  \\tabexpand\n  % Respect line breaks,\n  % print special symbols as themselves, and\n  % make each space count\n  % must do in this order:\n  \\obeylines \\uncatcodespecials \\sepspaces\n  \\everypar{\\starttabbox}%\n}\n\n% Do the @verb magic: verbatim text is quoted by unique\n% delimiter characters.  Before first delimiter expect a\n% right brace, after last delimiter expect closing brace:\n%\n%    \\def\\doverb'{'<char>#1<char>'}'{#1}\n%\n% [Knuth] p. 382; only eat outer {}\n\\begingroup\n  \\catcode`[=1\\catcode`]=2\\catcode`\\{=\\other\\catcode`\\}=\\other\n  \\gdef\\doverb{#1[\\def\\next##1#1}[##1\\endgroup]\\next]\n\\endgroup\n%\n\\def\\verb{\\begingroup\\setupverb\\doverb}\n%\n%\n% Do the @verbatim magic: define the macro \\doverbatim so that\n% the (first) argument ends when '@end verbatim' is reached, ie:\n%\n%     \\def\\doverbatim#1@end verbatim{#1}\n%\n% For Texinfo it's a lot easier than for LaTeX,\n% because texinfo's \\verbatim doesn't stop at '\\end{verbatim}':\n% we need not redefine '\\', '{' and '}'.\n%\n% Inspired by LaTeX's verbatim command set [latex.ltx]\n%\n\\begingroup\n  \\catcode`\\ =\\active\n  \\obeylines %\n  % ignore everything up to the first ^^M, that's the newline at the end\n  % of the @verbatim input line itself.  Otherwise we get an extra blank\n  % line in the output.\n  \\xdef\\doverbatim#1^^M#2@end verbatim{#2\\noexpand\\end\\gobble verbatim}%\n  % We really want {...\\end verbatim} in the body of the macro, but\n  % without the active space; thus we have to use \\xdef and \\gobble.\n\\endgroup\n%\n\\envdef\\verbatim{%\n    \\setupverbatim\\doverbatim\n}\n\\let\\Everbatim = \\afterenvbreak\n\n\n% @verbatiminclude FILE - insert text of file in verbatim environment.\n%\n\\def\\verbatiminclude{\\parseargusing\\filenamecatcodes\\doverbatiminclude}\n%\n\\def\\doverbatiminclude#1{%\n  {%\n    \\makevalueexpandable\n    \\setupverbatim\n    \\input #1\n    \\afterenvbreak\n  }%\n}\n\n% @copying ... @end copying.\n% Save the text away for @insertcopying later.\n%\n% We save the uninterpreted tokens, rather than creating a box.\n% Saving the text in a box would be much easier, but then all the\n% typesetting commands (@smallbook, font changes, etc.) have to be done\n% beforehand -- and a) we want @copying to be done first in the source\n% file; b) letting users define the frontmatter in as flexible order as\n% possible is very desirable.\n%\n\\def\\copying{\\checkenv{}\\begingroup\\scanargctxt\\docopying}\n\\def\\docopying#1@end copying{\\endgroup\\def\\copyingtext{#1}}\n%\n\\def\\insertcopying{%\n  \\begingroup\n    \\parindent = 0pt  % paragraph indentation looks wrong on title page\n    \\scanexp\\copyingtext\n  \\endgroup\n}\n\n\\message{defuns,}\n% @defun etc.\n\n\\newskip\\defbodyindent \\defbodyindent=.4in\n\\newskip\\defargsindent \\defargsindent=50pt\n\\newskip\\deflastargmargin \\deflastargmargin=18pt\n\n% Start the processing of @deffn:\n\\def\\startdefun{%\n  \\ifnum\\lastpenalty<10000\n    \\medbreak\n  \\else\n    % If there are two @def commands in a row, we'll have a \\nobreak,\n    % which is there to keep the function description together with its\n    % header.  But if there's nothing but headers, we need to allow a\n    % break somewhere.  Check specifically for penalty 10002, inserted\n    % by \\defargscommonending, instead of 10000, since the sectioning\n    % commands also insert a nobreak penalty, and we don't want to allow\n    % a break between a section heading and a defun.\n    % \n    \\ifnum\\lastpenalty=10002 \\penalty2000 \\fi\n    %\n    % Similarly, after a section heading, do not allow a break.\n    % But do insert the glue.\n    \\medskip  % preceded by discardable penalty, so not a breakpoint\n  \\fi\n  %\n  \\parindent=0in\n  \\advance\\leftskip by \\defbodyindent\n  \\exdentamount=\\defbodyindent\n}\n\n\\def\\dodefunx#1{%\n  % First, check whether we are in the right environment:\n  \\checkenv#1%\n  %\n  % As above, allow line break if we have multiple x headers in a row.\n  % It's not a great place, though.\n  \\ifnum\\lastpenalty=10002 \\penalty3000 \\fi\n  %\n  % And now, it's time to reuse the body of the original defun:\n  \\expandafter\\gobbledefun#1%\n}\n\\def\\gobbledefun#1\\startdefun{}\n\n% \\printdefunline \\deffnheader{text}\n%\n\\def\\printdefunline#1#2{%\n  \\begingroup\n    % call \\deffnheader:\n    #1#2 \\endheader\n    % common ending:\n    \\interlinepenalty = 10000\n    \\advance\\rightskip by 0pt plus 1fil\n    \\endgraf\n    \\nobreak\\vskip -\\parskip\n    \\penalty 10002  % signal to \\startdefun and \\dodefunx\n    % Some of the @defun-type tags do not enable magic parentheses,\n    % rendering the following check redundant.  But we don't optimize.\n    \\checkparencounts\n  \\endgroup\n}\n\n\\def\\Edefun{\\endgraf\\medbreak}\n\n% \\makedefun{deffn} creates \\deffn, \\deffnx and \\Edeffn;\n% the only thing remainnig is to define \\deffnheader.\n%\n\\def\\makedefun#1{%\n  \\expandafter\\let\\csname E#1\\endcsname = \\Edefun\n  \\edef\\temp{\\noexpand\\domakedefun\n    \\makecsname{#1}\\makecsname{#1x}\\makecsname{#1header}}%\n  \\temp\n}\n\n% \\domakedefun \\deffn \\deffnx \\deffnheader\n%\n% Define \\deffn and \\deffnx, without parameters.\n% \\deffnheader has to be defined explicitly.\n%\n\\def\\domakedefun#1#2#3{%\n  \\envdef#1{%\n    \\startdefun\n    \\parseargusing\\activeparens{\\printdefunline#3}%\n  }%\n  \\def#2{\\dodefunx#1}%\n  \\def#3%\n}\n\n%%% Untyped functions:\n\n% @deffn category name args\n\\makedefun{deffn}{\\deffngeneral{}}\n\n% @deffn category class name args\n\\makedefun{defop}#1 {\\defopon{#1\\ \\putwordon}}\n\n% \\defopon {category on}class name args\n\\def\\defopon#1#2 {\\deffngeneral{\\putwordon\\ \\code{#2}}{#1\\ \\code{#2}} }\n\n% \\deffngeneral {subind}category name args\n%\n\\def\\deffngeneral#1#2 #3 #4\\endheader{%\n  % Remember that \\dosubind{fn}{foo}{} is equivalent to \\doind{fn}{foo}.\n  \\dosubind{fn}{\\code{#3}}{#1}%\n  \\defname{#2}{}{#3}\\magicamp\\defunargs{#4\\unskip}%\n}\n\n%%% Typed functions:\n\n% @deftypefn category type name args\n\\makedefun{deftypefn}{\\deftypefngeneral{}}\n\n% @deftypeop category class type name args\n\\makedefun{deftypeop}#1 {\\deftypeopon{#1\\ \\putwordon}}\n\n% \\deftypeopon {category on}class type name args\n\\def\\deftypeopon#1#2 {\\deftypefngeneral{\\putwordon\\ \\code{#2}}{#1\\ \\code{#2}} }\n\n% \\deftypefngeneral {subind}category type name args\n%\n\\def\\deftypefngeneral#1#2 #3 #4 #5\\endheader{%\n  \\dosubind{fn}{\\code{#4}}{#1}%\n  \\defname{#2}{#3}{#4}\\defunargs{#5\\unskip}%\n}\n\n%%% Typed variables:\n\n% @deftypevr category type var args\n\\makedefun{deftypevr}{\\deftypecvgeneral{}}\n\n% @deftypecv category class type var args\n\\makedefun{deftypecv}#1 {\\deftypecvof{#1\\ \\putwordof}}\n\n% \\deftypecvof {category of}class type var args\n\\def\\deftypecvof#1#2 {\\deftypecvgeneral{\\putwordof\\ \\code{#2}}{#1\\ \\code{#2}} }\n\n% \\deftypecvgeneral {subind}category type var args\n%\n\\def\\deftypecvgeneral#1#2 #3 #4 #5\\endheader{%\n  \\dosubind{vr}{\\code{#4}}{#1}%\n  \\defname{#2}{#3}{#4}\\defunargs{#5\\unskip}%\n}\n\n%%% Untyped variables:\n\n% @defvr category var args\n\\makedefun{defvr}#1 {\\deftypevrheader{#1} {} }\n\n% @defcv category class var args\n\\makedefun{defcv}#1 {\\defcvof{#1\\ \\putwordof}}\n\n% \\defcvof {category of}class var args\n\\def\\defcvof#1#2 {\\deftypecvof{#1}#2 {} }\n\n%%% Type:\n% @deftp category name args\n\\makedefun{deftp}#1 #2 #3\\endheader{%\n  \\doind{tp}{\\code{#2}}%\n  \\defname{#1}{}{#2}\\defunargs{#3\\unskip}%\n}\n\n% Remaining @defun-like shortcuts:\n\\makedefun{defun}{\\deffnheader{\\putwordDeffunc} }\n\\makedefun{defmac}{\\deffnheader{\\putwordDefmac} }\n\\makedefun{defspec}{\\deffnheader{\\putwordDefspec} }\n\\makedefun{deftypefun}{\\deftypefnheader{\\putwordDeffunc} }\n\\makedefun{defvar}{\\defvrheader{\\putwordDefvar} }\n\\makedefun{defopt}{\\defvrheader{\\putwordDefopt} }\n\\makedefun{deftypevar}{\\deftypevrheader{\\putwordDefvar} }\n\\makedefun{defmethod}{\\defopon\\putwordMethodon}\n\\makedefun{deftypemethod}{\\deftypeopon\\putwordMethodon}\n\\makedefun{defivar}{\\defcvof\\putwordInstanceVariableof}\n\\makedefun{deftypeivar}{\\deftypecvof\\putwordInstanceVariableof}\n\n% \\defname, which formats the name of the @def (not the args).\n% #1 is the category, such as \"Function\".\n% #2 is the return type, if any.\n% #3 is the function name.\n%\n% We are followed by (but not passed) the arguments, if any.\n%\n\\def\\defname#1#2#3{%\n  % Get the values of \\leftskip and \\rightskip as they were outside the @def...\n  \\advance\\leftskip by -\\defbodyindent\n  %\n  % How we'll format the type name.  Putting it in brackets helps\n  % distinguish it from the body text that may end up on the next line\n  % just below it.\n  \\def\\temp{#1}%\n  \\setbox0=\\hbox{\\kern\\deflastargmargin \\ifx\\temp\\empty\\else [\\rm\\temp]\\fi}\n  %\n  % Figure out line sizes for the paragraph shape.\n  % The first line needs space for \\box0; but if \\rightskip is nonzero,\n  % we need only space for the part of \\box0 which exceeds it:\n  \\dimen0=\\hsize  \\advance\\dimen0 by -\\wd0  \\advance\\dimen0 by \\rightskip\n  % The continuations:\n  \\dimen2=\\hsize  \\advance\\dimen2 by -\\defargsindent\n  % (plain.tex says that \\dimen1 should be used only as global.)\n  \\parshape 2 0in \\dimen0 \\defargsindent \\dimen2\n  %\n  % Put the type name to the right margin.\n  \\noindent\n  \\hbox to 0pt{%\n    \\hfil\\box0 \\kern-\\hsize\n    % \\hsize has to be shortened this way:\n    \\kern\\leftskip\n    % Intentionally do not respect \\rightskip, since we need the space.\n  }%\n  %\n  % Allow all lines to be underfull without complaint:\n  \\tolerance=10000 \\hbadness=10000\n  \\exdentamount=\\defbodyindent\n  {%\n    % defun fonts. We use typewriter by default (used to be bold) because:\n    % . we're printing identifiers, they should be in tt in principle.\n    % . in languages with many accents, such as Czech or French, it's\n    %   common to leave accents off identifiers.  The result looks ok in\n    %   tt, but exceedingly strange in rm.\n    % . we don't want -- and --- to be treated as ligatures.\n    % . this still does not fix the ?` and !` ligatures, but so far no\n    %   one has made identifiers using them :).\n    \\df \\tt\n    \\def\\temp{#2}% return value type\n    \\ifx\\temp\\empty\\else \\tclose{\\temp} \\fi\n    #3% output function name\n  }%\n  {\\rm\\enskip}% hskip 0.5 em of \\tenrm\n  %\n  \\boldbrax\n  % arguments will be output next, if any.\n}\n\n% Print arguments in slanted roman (not ttsl), inconsistently with using\n% tt for the name.  This is because literal text is sometimes needed in\n% the argument list (groff manual), and ttsl and tt are not very\n% distinguishable.  Prevent hyphenation at `-' chars.\n%\n\\def\\defunargs#1{%\n  % use sl by default (not ttsl),\n  % tt for the names.\n  \\df \\sl \\hyphenchar\\font=0\n  %\n  % On the other hand, if an argument has two dashes (for instance), we\n  % want a way to get ttsl.  Let's try @var for that.\n  \\let\\var=\\ttslanted\n  #1%\n  \\sl\\hyphenchar\\font=45\n}\n\n% We want ()&[] to print specially on the defun line.\n%\n\\def\\activeparens{%\n  \\catcode`\\(=\\active \\catcode`\\)=\\active\n  \\catcode`\\[=\\active \\catcode`\\]=\\active\n  \\catcode`\\&=\\active\n}\n\n% Make control sequences which act like normal parenthesis chars.\n\\let\\lparen = ( \\let\\rparen = )\n\n% Be sure that we always have a definition for `(', etc.  For example,\n% if the fn name has parens in it, \\boldbrax will not be in effect yet,\n% so TeX would otherwise complain about undefined control sequence.\n{\n  \\activeparens\n  \\global\\let(=\\lparen \\global\\let)=\\rparen\n  \\global\\let[=\\lbrack \\global\\let]=\\rbrack\n  \\global\\let& = \\&\n\n  \\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\let]=\\rbrb}\n  \\gdef\\magicamp{\\let&=\\amprm}\n}\n\n\\newcount\\parencount\n\n% If we encounter &foo, then turn on ()-hacking afterwards\n\\newif\\ifampseen\n\\def\\amprm#1 {\\ampseentrue{\\bf\\&#1 }}\n\n\\def\\parenfont{%\n  \\ifampseen\n    % At the first level, print parens in roman,\n    % otherwise use the default font.\n    \\ifnum \\parencount=1 \\rm \\fi\n  \\else\n    % The \\sf parens (in \\boldbrax) actually are a little bolder than\n    % the contained text.  This is especially needed for [ and ] .\n    \\sf\n  \\fi\n}\n\\def\\infirstlevel#1{%\n  \\ifampseen\n    \\ifnum\\parencount=1\n      #1%\n    \\fi\n  \\fi\n}\n\\def\\bfafterword#1 {#1 \\bf}\n\n\\def\\opnr{%\n  \\global\\advance\\parencount by 1\n  {\\parenfont(}%\n  \\infirstlevel \\bfafterword\n}\n\\def\\clnr{%\n  {\\parenfont)}%\n  \\infirstlevel \\sl\n  \\global\\advance\\parencount by -1\n}\n\n\\newcount\\brackcount\n\\def\\lbrb{%\n  \\global\\advance\\brackcount by 1\n  {\\bf[}%\n}\n\\def\\rbrb{%\n  {\\bf]}%\n  \\global\\advance\\brackcount by -1\n}\n\n\\def\\checkparencounts{%\n  \\ifnum\\parencount=0 \\else \\badparencount \\fi\n  \\ifnum\\brackcount=0 \\else \\badbrackcount \\fi\n}\n\\def\\badparencount{%\n  \\errmessage{Unbalanced parentheses in @def}%\n  \\global\\parencount=0\n}\n\\def\\badbrackcount{%\n  \\errmessage{Unbalanced square braces in @def}%\n  \\global\\brackcount=0\n}\n\n\n\\message{macros,}\n% @macro.\n\n% To do this right we need a feature of e-TeX, \\scantokens,\n% which we arrange to emulate with a temporary file in ordinary TeX.\n\\ifx\\eTeXversion\\undefined\n  \\newwrite\\macscribble\n  \\def\\scantokens#1{%\n    \\toks0={#1}%\n    \\immediate\\openout\\macscribble=\\jobname.tmp\n    \\immediate\\write\\macscribble{\\the\\toks0}%\n    \\immediate\\closeout\\macscribble\n    \\input \\jobname.tmp\n  }\n\\fi\n\n\\def\\scanmacro#1{%\n  \\begingroup\n    \\newlinechar`\\^^M\n    \\let\\xeatspaces\\eatspaces\n    % Undo catcode changes of \\startcontents and \\doprintindex\n    % When called from @insertcopying or (short)caption, we need active\n    % backslash to get it printed correctly.  Previously, we had\n    % \\catcode`\\\\=\\other instead.  We'll see whether a problem appears\n    % with macro expansion.\t\t\t\t--kasal, 19aug04\n    \\catcode`\\@=0 \\catcode`\\\\=\\active \\escapechar=`\\@\n    % ... and \\example\n    \\spaceisspace\n    %\n    % Append \\endinput to make sure that TeX does not see the ending newline.\n    %\n    % I've verified that it is necessary both for e-TeX and for ordinary TeX\n    %\t\t\t\t\t\t\t--kasal, 29nov03\n    \\scantokens{#1\\endinput}%\n  \\endgroup\n}\n\n\\def\\scanexp#1{%\n  \\edef\\temp{\\noexpand\\scanmacro{#1}}%\n  \\temp\n}\n\n\\newcount\\paramno   % Count of parameters\n\\newtoks\\macname    % Macro name\n\\newif\\ifrecursive  % Is it recursive?\n\n% List of all defined macros in the form\n%    \\definedummyword\\macro1\\definedummyword\\macro2...\n% Currently is also contains all @aliases; the list can be split\n% if there is a need.\n\\def\\macrolist{}\n\n% Add the macro to \\macrolist\n\\def\\addtomacrolist#1{\\expandafter \\addtomacrolistxxx \\csname#1\\endcsname}\n\\def\\addtomacrolistxxx#1{%\n     \\toks0 = \\expandafter{\\macrolist\\definedummyword#1}%\n     \\xdef\\macrolist{\\the\\toks0}%\n}\n\n% Utility routines.\n% This does \\let #1 = #2, with \\csnames; that is,\n%   \\let \\csname#1\\endcsname = \\csname#2\\endcsname\n% (except of course we have to play expansion games).\n% \n\\def\\cslet#1#2{%\n  \\expandafter\\let\n  \\csname#1\\expandafter\\endcsname\n  \\csname#2\\endcsname\n}\n\n% Trim leading and trailing spaces off a string.\n% Concepts from aro-bend problem 15 (see CTAN).\n{\\catcode`\\@=11\n\\gdef\\eatspaces #1{\\expandafter\\trim@\\expandafter{#1 }}\n\\gdef\\trim@ #1{\\trim@@ @#1 @ #1 @ @@}\n\\gdef\\trim@@ #1@ #2@ #3@@{\\trim@@@\\empty #2 @}\n\\def\\unbrace#1{#1}\n\\unbrace{\\gdef\\trim@@@ #1 } #2@{#1}\n}\n\n% Trim a single trailing ^^M off a string.\n{\\catcode`\\^^M=\\other \\catcode`\\Q=3%\n\\gdef\\eatcr #1{\\eatcra #1Q^^MQ}%\n\\gdef\\eatcra#1^^MQ{\\eatcrb#1Q}%\n\\gdef\\eatcrb#1Q#2Q{#1}%\n}\n\n% Macro bodies are absorbed as an argument in a context where\n% all characters are catcode 10, 11 or 12, except \\ which is active\n% (as in normal texinfo). It is necessary to change the definition of \\.\n\n% It's necessary to have hard CRs when the macro is executed. This is\n% done by  making ^^M (\\endlinechar) catcode 12 when reading the macro\n% body, and then making it the \\newlinechar in \\scanmacro.\n\n\\def\\scanctxt{%\n  \\catcode`\\\"=\\other\n  \\catcode`\\+=\\other\n  \\catcode`\\<=\\other\n  \\catcode`\\>=\\other\n  \\catcode`\\@=\\other\n  \\catcode`\\^=\\other\n  \\catcode`\\_=\\other\n  \\catcode`\\|=\\other\n  \\catcode`\\~=\\other\n}\n\n\\def\\scanargctxt{%\n  \\scanctxt\n  \\catcode`\\\\=\\other\n  \\catcode`\\^^M=\\other\n}\n\n\\def\\macrobodyctxt{%\n  \\scanctxt\n  \\catcode`\\{=\\other\n  \\catcode`\\}=\\other\n  \\catcode`\\^^M=\\other\n  \\usembodybackslash\n}\n\n\\def\\macroargctxt{%\n  \\scanctxt\n  \\catcode`\\\\=\\other\n}\n\n% \\mbodybackslash is the definition of \\ in @macro bodies.\n% It maps \\foo\\ => \\csname macarg.foo\\endcsname => #N\n% where N is the macro parameter number.\n% We define \\csname macarg.\\endcsname to be \\realbackslash, so\n% \\\\ in macro replacement text gets you a backslash.\n\n{\\catcode`@=0 @catcode`@\\=@active\n @gdef@usembodybackslash{@let\\=@mbodybackslash}\n @gdef@mbodybackslash#1\\{@csname macarg.#1@endcsname}\n}\n\\expandafter\\def\\csname macarg.\\endcsname{\\realbackslash}\n\n\\def\\macro{\\recursivefalse\\parsearg\\macroxxx}\n\\def\\rmacro{\\recursivetrue\\parsearg\\macroxxx}\n\n\\def\\macroxxx#1{%\n  \\getargs{#1}%           now \\macname is the macname and \\argl the arglist\n  \\ifx\\argl\\empty       % no arguments\n     \\paramno=0%\n  \\else\n     \\expandafter\\parsemargdef \\argl;%\n  \\fi\n  \\if1\\csname ismacro.\\the\\macname\\endcsname\n     \\message{Warning: redefining \\the\\macname}%\n  \\else\n     \\expandafter\\ifx\\csname \\the\\macname\\endcsname \\relax\n     \\else \\errmessage{Macro name \\the\\macname\\space already defined}\\fi\n     \\global\\cslet{macsave.\\the\\macname}{\\the\\macname}%\n     \\global\\expandafter\\let\\csname ismacro.\\the\\macname\\endcsname=1%\n     \\addtomacrolist{\\the\\macname}%\n  \\fi\n  \\begingroup \\macrobodyctxt\n  \\ifrecursive \\expandafter\\parsermacbody\n  \\else \\expandafter\\parsemacbody\n  \\fi}\n\n\\parseargdef\\unmacro{%\n  \\if1\\csname ismacro.#1\\endcsname\n    \\global\\cslet{#1}{macsave.#1}%\n    \\global\\expandafter\\let \\csname ismacro.#1\\endcsname=0%\n    % Remove the macro name from \\macrolist:\n    \\begingroup\n      \\expandafter\\let\\csname#1\\endcsname \\relax\n      \\let\\definedummyword\\unmacrodo\n      \\xdef\\macrolist{\\macrolist}%\n    \\endgroup\n  \\else\n    \\errmessage{Macro #1 not defined}%\n  \\fi\n}\n\n% Called by \\do from \\dounmacro on each macro.  The idea is to omit any\n% macro definitions that have been changed to \\relax.\n%\n\\def\\unmacrodo#1{%\n  \\ifx #1\\relax\n    % remove this\n  \\else\n    \\noexpand\\definedummyword \\noexpand#1%\n  \\fi\n}\n\n% This makes use of the obscure feature that if the last token of a\n% <parameter list> is #, then the preceding argument is delimited by\n% an opening brace, and that opening brace is not consumed.\n\\def\\getargs#1{\\getargsxxx#1{}}\n\\def\\getargsxxx#1#{\\getmacname #1 \\relax\\getmacargs}\n\\def\\getmacname #1 #2\\relax{\\macname={#1}}\n\\def\\getmacargs#1{\\def\\argl{#1}}\n\n% Parse the optional {params} list.  Set up \\paramno and \\paramlist\n% so \\defmacro knows what to do.  Define \\macarg.blah for each blah\n% in the params list, to be ##N where N is the position in that list.\n% That gets used by \\mbodybackslash (above).\n\n% We need to get `macro parameter char #' into several definitions.\n% The technique used is stolen from LaTeX:  let \\hash be something\n% unexpandable, insert that wherever you need a #, and then redefine\n% it to # just before using the token list produced.\n%\n% The same technique is used to protect \\eatspaces till just before\n% the macro is used.\n\n\\def\\parsemargdef#1;{\\paramno=0\\def\\paramlist{}%\n        \\let\\hash\\relax\\let\\xeatspaces\\relax\\parsemargdefxxx#1,;,}\n\\def\\parsemargdefxxx#1,{%\n  \\if#1;\\let\\next=\\relax\n  \\else \\let\\next=\\parsemargdefxxx\n    \\advance\\paramno by 1%\n    \\expandafter\\edef\\csname macarg.\\eatspaces{#1}\\endcsname\n        {\\xeatspaces{\\hash\\the\\paramno}}%\n    \\edef\\paramlist{\\paramlist\\hash\\the\\paramno,}%\n  \\fi\\next}\n\n% These two commands read recursive and nonrecursive macro bodies.\n% (They're different since rec and nonrec macros end differently.)\n\n\\long\\def\\parsemacbody#1@end macro%\n{\\xdef\\temp{\\eatcr{#1}}\\endgroup\\defmacro}%\n\\long\\def\\parsermacbody#1@end rmacro%\n{\\xdef\\temp{\\eatcr{#1}}\\endgroup\\defmacro}%\n\n% This defines the macro itself. There are six cases: recursive and\n% nonrecursive macros of zero, one, and many arguments.\n% Much magic with \\expandafter here.\n% \\xdef is used so that macro definitions will survive the file\n% they're defined in; @include reads the file inside a group.\n\\def\\defmacro{%\n  \\let\\hash=##% convert placeholders to macro parameter chars\n  \\ifrecursive\n    \\ifcase\\paramno\n    % 0\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n        \\noexpand\\scanmacro{\\temp}}%\n    \\or % 1\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n         \\bgroup\\noexpand\\macroargctxt\n         \\noexpand\\braceorline\n         \\expandafter\\noexpand\\csname\\the\\macname xxx\\endcsname}%\n      \\expandafter\\xdef\\csname\\the\\macname xxx\\endcsname##1{%\n         \\egroup\\noexpand\\scanmacro{\\temp}}%\n    \\else % many\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n         \\bgroup\\noexpand\\macroargctxt\n         \\noexpand\\csname\\the\\macname xx\\endcsname}%\n      \\expandafter\\xdef\\csname\\the\\macname xx\\endcsname##1{%\n          \\expandafter\\noexpand\\csname\\the\\macname xxx\\endcsname ##1,}%\n      \\expandafter\\expandafter\n      \\expandafter\\xdef\n      \\expandafter\\expandafter\n        \\csname\\the\\macname xxx\\endcsname\n          \\paramlist{\\egroup\\noexpand\\scanmacro{\\temp}}%\n    \\fi\n  \\else\n    \\ifcase\\paramno\n    % 0\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n        \\noexpand\\norecurse{\\the\\macname}%\n        \\noexpand\\scanmacro{\\temp}\\egroup}%\n    \\or % 1\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n         \\bgroup\\noexpand\\macroargctxt\n         \\noexpand\\braceorline\n         \\expandafter\\noexpand\\csname\\the\\macname xxx\\endcsname}%\n      \\expandafter\\xdef\\csname\\the\\macname xxx\\endcsname##1{%\n        \\egroup\n        \\noexpand\\norecurse{\\the\\macname}%\n        \\noexpand\\scanmacro{\\temp}\\egroup}%\n    \\else % many\n      \\expandafter\\xdef\\csname\\the\\macname\\endcsname{%\n         \\bgroup\\noexpand\\macroargctxt\n         \\expandafter\\noexpand\\csname\\the\\macname xx\\endcsname}%\n      \\expandafter\\xdef\\csname\\the\\macname xx\\endcsname##1{%\n          \\expandafter\\noexpand\\csname\\the\\macname xxx\\endcsname ##1,}%\n      \\expandafter\\expandafter\n      \\expandafter\\xdef\n      \\expandafter\\expandafter\n      \\csname\\the\\macname xxx\\endcsname\n      \\paramlist{%\n          \\egroup\n          \\noexpand\\norecurse{\\the\\macname}%\n          \\noexpand\\scanmacro{\\temp}\\egroup}%\n    \\fi\n  \\fi}\n\n\\def\\norecurse#1{\\bgroup\\cslet{#1}{macsave.#1}}\n\n% \\braceorline decides whether the next nonwhitespace character is a\n% {.  If so it reads up to the closing }, if not, it reads the whole\n% line.  Whatever was read is then fed to the next control sequence\n% as an argument (by \\parsebrace or \\parsearg)\n\\def\\braceorline#1{\\let\\macnamexxx=#1\\futurelet\\nchar\\braceorlinexxx}\n\\def\\braceorlinexxx{%\n  \\ifx\\nchar\\bgroup\\else\n    \\expandafter\\parsearg\n  \\fi \\macnamexxx}\n\n\n% @alias.\n% We need some trickery to remove the optional spaces around the equal\n% sign.  Just make them active and then expand them all to nothing.\n\\def\\alias{\\parseargusing\\obeyspaces\\aliasxxx}\n\\def\\aliasxxx #1{\\aliasyyy#1\\relax}\n\\def\\aliasyyy #1=#2\\relax{%\n  {%\n    \\expandafter\\let\\obeyedspace=\\empty\n    \\addtomacrolist{#1}%\n    \\xdef\\next{\\global\\let\\makecsname{#1}=\\makecsname{#2}}%\n  }%\n  \\next\n}\n\n\n\\message{cross references,}\n\n\\newwrite\\auxfile\n\n\\newif\\ifhavexrefs    % True if xref values are known.\n\\newif\\ifwarnedxrefs  % True if we warned once that they aren't known.\n\n% @inforef is relatively simple.\n\\def\\inforef #1{\\inforefzzz #1,,,,**}\n\\def\\inforefzzz #1,#2,#3,#4**{\\putwordSee{} \\putwordInfo{} \\putwordfile{} \\file{\\ignorespaces #3{}},\n  node \\samp{\\ignorespaces#1{}}}\n\n% @node's only job in TeX is to define \\lastnode, which is used in\n% cross-references.  The @node line might or might not have commas, and\n% might or might not have spaces before the first comma, like:\n% @node foo , bar , ...\n% We don't want such trailing spaces in the node name.\n%\n\\parseargdef\\node{\\checkenv{}\\donode #1 ,\\finishnodeparse}\n%\n% also remove a trailing comma, in case of something like this:\n% @node Help-Cross,  ,  , Cross-refs\n\\def\\donode#1 ,#2\\finishnodeparse{\\dodonode #1,\\finishnodeparse}\n\\def\\dodonode#1,#2\\finishnodeparse{\\gdef\\lastnode{#1}}\n\n\\let\\nwnode=\\node\n\\let\\lastnode=\\empty\n\n% Write a cross-reference definition for the current node.  #1 is the\n% type (Ynumbered, Yappendix, Ynothing).\n%\n\\def\\donoderef#1{%\n  \\ifx\\lastnode\\empty\\else\n    \\setref{\\lastnode}{#1}%\n    \\global\\let\\lastnode=\\empty\n  \\fi\n}\n\n% @anchor{NAME} -- define xref target at arbitrary point.\n%\n\\newcount\\savesfregister\n%\n\\def\\savesf{\\relax \\ifhmode \\savesfregister=\\spacefactor \\fi}\n\\def\\restoresf{\\relax \\ifhmode \\spacefactor=\\savesfregister \\fi}\n\\def\\anchor#1{\\savesf \\setref{#1}{Ynothing}\\restoresf \\ignorespaces}\n\n% \\setref{NAME}{SNT} defines a cross-reference point NAME (a node or an\n% anchor), which consists of three parts:\n% 1) NAME-title - the current sectioning name taken from \\thissection,\n%                 or the anchor name.\n% 2) NAME-snt   - section number and type, passed as the SNT arg, or\n%                 empty for anchors.\n% 3) NAME-pg    - the page number.\n%\n% This is called from \\donoderef, \\anchor, and \\dofloat.  In the case of\n% floats, there is an additional part, which is not written here:\n% 4) NAME-lof   - the text as it should appear in a @listoffloats.\n%\n\\def\\setref#1#2{%\n  \\pdfmkdest{#1}%\n  \\iflinks\n    {%\n      \\atdummies  % preserve commands, but don't expand them\n      \\edef\\writexrdef##1##2{%\n\t\\write\\auxfile{@xrdef{#1-% #1 of \\setref, expanded by the \\edef\n\t  ##1}{##2}}% these are parameters of \\writexrdef\n      }%\n      \\toks0 = \\expandafter{\\thissection}%\n      \\immediate \\writexrdef{title}{\\the\\toks0 }%\n      \\immediate \\writexrdef{snt}{\\csname #2\\endcsname}% \\Ynumbered etc.\n      \\writexrdef{pg}{\\folio}% will be written later, during \\shipout\n    }%\n  \\fi\n}\n\n% @xref, @pxref, and @ref generate cross-references.  For \\xrefX, #1 is\n% the node name, #2 the name of the Info cross-reference, #3 the printed\n% node name, #4 the name of the Info file, #5 the name of the printed\n% manual.  All but the node name can be omitted.\n%\n\\def\\pxref#1{\\putwordsee{} \\xrefX[#1,,,,,,,]}\n\\def\\xref#1{\\putwordSee{} \\xrefX[#1,,,,,,,]}\n\\def\\ref#1{\\xrefX[#1,,,,,,,]}\n\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup\n  \\unsepspaces\n  \\def\\printedmanual{\\ignorespaces #5}%\n  \\def\\printedrefname{\\ignorespaces #3}%\n  \\setbox1=\\hbox{\\printedmanual\\unskip}%\n  \\setbox0=\\hbox{\\printedrefname\\unskip}%\n  \\ifdim \\wd0 = 0pt\n    % No printed node name was explicitly given.\n    \\expandafter\\ifx\\csname SETxref-automatic-section-title\\endcsname\\relax\n      % Use the node name inside the square brackets.\n      \\def\\printedrefname{\\ignorespaces #1}%\n    \\else\n      % Use the actual chapter/section title appear inside\n      % the square brackets.  Use the real section title if we have it.\n      \\ifdim \\wd1 > 0pt\n        % It is in another manual, so we don't have it.\n        \\def\\printedrefname{\\ignorespaces #1}%\n      \\else\n        \\ifhavexrefs\n          % We know the real title if we have the xref values.\n          \\def\\printedrefname{\\refx{#1-title}{}}%\n        \\else\n          % Otherwise just copy the Info node name.\n          \\def\\printedrefname{\\ignorespaces #1}%\n        \\fi%\n      \\fi\n    \\fi\n  \\fi\n  %\n  % Make link in pdf output.\n  \\ifpdf\n    \\leavevmode\n    \\getfilename{#4}%\n    {\\turnoffactive\n     % See comments at \\activebackslashdouble.\n     {\\activebackslashdouble \\xdef\\pdfxrefdest{#1}%\n      \\backslashparens\\pdfxrefdest}%\n     %\n     \\ifnum\\filenamelength>0\n       \\startlink attr{/Border [0 0 0]}%\n         goto file{\\the\\filename.pdf} name{\\pdfxrefdest}%\n     \\else\n       \\startlink attr{/Border [0 0 0]}%\n         goto name{\\pdfmkpgn{\\pdfxrefdest}}%\n     \\fi\n    }%\n    \\linkcolor\n  \\fi\n  %\n  % Float references are printed completely differently: \"Figure 1.2\"\n  % instead of \"[somenode], p.3\".  We distinguish them by the\n  % LABEL-title being set to a magic string.\n  {%\n    % Have to otherify everything special to allow the \\csname to\n    % include an _ in the xref name, etc.\n    \\indexnofonts\n    \\turnoffactive\n    \\expandafter\\global\\expandafter\\let\\expandafter\\Xthisreftitle\n      \\csname XR#1-title\\endcsname\n  }%\n  \\iffloat\\Xthisreftitle\n    % If the user specified the print name (third arg) to the ref,\n    % print it instead of our usual \"Figure 1.2\".\n    \\ifdim\\wd0 = 0pt\n      \\refx{#1-snt}{}%\n    \\else\n      \\printedrefname\n    \\fi\n    %\n    % if the user also gave the printed manual name (fifth arg), append\n    % \"in MANUALNAME\".\n    \\ifdim \\wd1 > 0pt\n      \\space \\putwordin{} \\cite{\\printedmanual}%\n    \\fi\n  \\else\n    % node/anchor (non-float) references.\n    %\n    % If we use \\unhbox0 and \\unhbox1 to print the node names, TeX does not\n    % insert empty discretionaries after hyphens, which means that it will\n    % not find a line break at a hyphen in a node names.  Since some manuals\n    % are best written with fairly long node names, containing hyphens, this\n    % is a loss.  Therefore, we give the text of the node name again, so it\n    % is as if TeX is seeing it for the first time.\n    \\ifdim \\wd1 > 0pt\n      \\putwordsection{} ``\\printedrefname'' \\putwordin{} \\cite{\\printedmanual}%\n    \\else\n      % _ (for example) has to be the character _ for the purposes of the\n      % control sequence corresponding to the node, but it has to expand\n      % into the usual \\leavevmode...\\vrule stuff for purposes of\n      % printing. So we \\turnoffactive for the \\refx-snt, back on for the\n      % printing, back off for the \\refx-pg.\n      {\\turnoffactive\n       % Only output a following space if the -snt ref is nonempty; for\n       % @unnumbered and @anchor, it won't be.\n       \\setbox2 = \\hbox{\\ignorespaces \\refx{#1-snt}{}}%\n       \\ifdim \\wd2 > 0pt \\refx{#1-snt}\\space\\fi\n      }%\n      % output the `[mynode]' via a macro so it can be overridden.\n      \\xrefprintnodename\\printedrefname\n      %\n      % But we always want a comma and a space:\n      ,\\space\n      %\n      % output the `page 3'.\n      \\turnoffactive \\putwordpage\\tie\\refx{#1-pg}{}%\n    \\fi\n  \\fi\n  \\endlink\n\\endgroup}\n\n% This macro is called from \\xrefX for the `[nodename]' part of xref\n% output.  It's a separate macro only so it can be changed more easily,\n% since square brackets don't work well in some documents.  Particularly\n% one that Bob is working on :).\n%\n\\def\\xrefprintnodename#1{[#1]}\n\n% Things referred to by \\setref.\n%\n\\def\\Ynothing{}\n\\def\\Yomitfromtoc{}\n\\def\\Ynumbered{%\n  \\ifnum\\secno=0\n    \\putwordChapter@tie \\the\\chapno\n  \\else \\ifnum\\subsecno=0\n    \\putwordSection@tie \\the\\chapno.\\the\\secno\n  \\else \\ifnum\\subsubsecno=0\n    \\putwordSection@tie \\the\\chapno.\\the\\secno.\\the\\subsecno\n  \\else\n    \\putwordSection@tie \\the\\chapno.\\the\\secno.\\the\\subsecno.\\the\\subsubsecno\n  \\fi\\fi\\fi\n}\n\\def\\Yappendix{%\n  \\ifnum\\secno=0\n     \\putwordAppendix@tie @char\\the\\appendixno{}%\n  \\else \\ifnum\\subsecno=0\n     \\putwordSection@tie @char\\the\\appendixno.\\the\\secno\n  \\else \\ifnum\\subsubsecno=0\n    \\putwordSection@tie @char\\the\\appendixno.\\the\\secno.\\the\\subsecno\n  \\else\n    \\putwordSection@tie\n      @char\\the\\appendixno.\\the\\secno.\\the\\subsecno.\\the\\subsubsecno\n  \\fi\\fi\\fi\n}\n\n% Define \\refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.\n% If its value is nonempty, SUFFIX is output afterward.\n%\n\\def\\refx#1#2{%\n  {%\n    \\indexnofonts\n    \\otherbackslash\n    \\expandafter\\global\\expandafter\\let\\expandafter\\thisrefX\n      \\csname XR#1\\endcsname\n  }%\n  \\ifx\\thisrefX\\relax\n    % If not defined, say something at least.\n    \\angleleft un\\-de\\-fined\\angleright\n    \\iflinks\n      \\ifhavexrefs\n        \\message{\\linenumber Undefined cross reference `#1'.}%\n      \\else\n        \\ifwarnedxrefs\\else\n          \\global\\warnedxrefstrue\n          \\message{Cross reference values unknown; you must run TeX again.}%\n        \\fi\n      \\fi\n    \\fi\n  \\else\n    % It's defined, so just use it.\n    \\thisrefX\n  \\fi\n  #2% Output the suffix in any case.\n}\n\n% This is the macro invoked by entries in the aux file.  Usually it's\n% just a \\def (we prepend XR to the control sequence name to avoid\n% collisions).  But if this is a float type, we have more work to do.\n%\n\\def\\xrdef#1#2{%\n  \\expandafter\\gdef\\csname XR#1\\endcsname{#2}% remember this xref value.\n  %\n  % Was that xref control sequence that we just defined for a float?\n  \\expandafter\\iffloat\\csname XR#1\\endcsname\n    % it was a float, and we have the (safe) float type in \\iffloattype.\n    \\expandafter\\let\\expandafter\\floatlist\n      \\csname floatlist\\iffloattype\\endcsname\n    %\n    % Is this the first time we've seen this float type?\n    \\expandafter\\ifx\\floatlist\\relax\n      \\toks0 = {\\do}% yes, so just \\do\n    \\else\n      % had it before, so preserve previous elements in list.\n      \\toks0 = \\expandafter{\\floatlist\\do}%\n    \\fi\n    %\n    % Remember this xref in the control sequence \\floatlistFLOATTYPE,\n    % for later use in \\listoffloats.\n    \\expandafter\\xdef\\csname floatlist\\iffloattype\\endcsname{\\the\\toks0{#1}}%\n  \\fi\n}\n\n% Read the last existing aux file, if any.  No error if none exists.\n%\n\\def\\tryauxfile{%\n  \\openin 1 \\jobname.aux\n  \\ifeof 1 \\else\n    \\readdatafile{aux}%\n    \\global\\havexrefstrue\n  \\fi\n  \\closein 1\n}\n\n\\def\\setupdatafile{%\n  \\catcode`\\^^@=\\other\n  \\catcode`\\^^A=\\other\n  \\catcode`\\^^B=\\other\n  \\catcode`\\^^C=\\other\n  \\catcode`\\^^D=\\other\n  \\catcode`\\^^E=\\other\n  \\catcode`\\^^F=\\other\n  \\catcode`\\^^G=\\other\n  \\catcode`\\^^H=\\other\n  \\catcode`\\^^K=\\other\n  \\catcode`\\^^L=\\other\n  \\catcode`\\^^N=\\other\n  \\catcode`\\^^P=\\other\n  \\catcode`\\^^Q=\\other\n  \\catcode`\\^^R=\\other\n  \\catcode`\\^^S=\\other\n  \\catcode`\\^^T=\\other\n  \\catcode`\\^^U=\\other\n  \\catcode`\\^^V=\\other\n  \\catcode`\\^^W=\\other\n  \\catcode`\\^^X=\\other\n  \\catcode`\\^^Z=\\other\n  \\catcode`\\^^[=\\other\n  \\catcode`\\^^\\=\\other\n  \\catcode`\\^^]=\\other\n  \\catcode`\\^^^=\\other\n  \\catcode`\\^^_=\\other\n  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.\n  % in xref tags, i.e., node names.  But since ^^e4 notation isn't\n  % supported in the main text, it doesn't seem desirable.  Furthermore,\n  % that is not enough: for node names that actually contain a ^\n  % character, we would end up writing a line like this: 'xrdef {'hat\n  % b-title}{'hat b} and \\xrdef does a \\csname...\\endcsname on the first\n  % argument, and \\hat is not an expandable control sequence.  It could\n  % all be worked out, but why?  Either we support ^^ or we don't.\n  %\n  % The other change necessary for this was to define \\auxhat:\n  % \\def\\auxhat{\\def^{'hat }}% extra space so ok if followed by letter\n  % and then to call \\auxhat in \\setq.\n  %\n  \\catcode`\\^=\\other\n  %\n  % Special characters.  Should be turned off anyway, but...\n  \\catcode`\\~=\\other\n  \\catcode`\\[=\\other\n  \\catcode`\\]=\\other\n  \\catcode`\\\"=\\other\n  \\catcode`\\_=\\other\n  \\catcode`\\|=\\other\n  \\catcode`\\<=\\other\n  \\catcode`\\>=\\other\n  \\catcode`\\$=\\other\n  \\catcode`\\#=\\other\n  \\catcode`\\&=\\other\n  \\catcode`\\%=\\other\n  \\catcode`+=\\other % avoid \\+ for paranoia even though we've turned it off\n  %\n  % This is to support \\ in node names and titles, since the \\\n  % characters end up in a \\csname.  It's easier than\n  % leaving it active and making its active definition an actual \\\n  % character.  What I don't understand is why it works in the *value*\n  % of the xrdef.  Seems like it should be a catcode12 \\, and that\n  % should not typeset properly.  But it works, so I'm moving on for\n  % now.  --karl, 15jan04.\n  \\catcode`\\\\=\\other\n  %\n  % Make the characters 128-255 be printing characters.\n  {%\n    \\count1=128\n    \\def\\loop{%\n      \\catcode\\count1=\\other\n      \\advance\\count1 by 1\n      \\ifnum \\count1<256 \\loop \\fi\n    }%\n  }%\n  %\n  % @ is our escape character in .aux files, and we need braces.\n  \\catcode`\\{=1\n  \\catcode`\\}=2\n  \\catcode`\\@=0\n}\n\n\\def\\readdatafile#1{%\n\\begingroup\n  \\setupdatafile\n  \\input\\jobname.#1\n\\endgroup}\n\n\\message{insertions,}\n% including footnotes.\n\n\\newcount \\footnoteno\n\n% The trailing space in the following definition for supereject is\n% vital for proper filling; pages come out unaligned when you do a\n% pagealignmacro call if that space before the closing brace is\n% removed. (Generally, numeric constants should always be followed by a\n% space to prevent strange expansion errors.)\n\\def\\supereject{\\par\\penalty -20000\\footnoteno =0 }\n\n% @footnotestyle is meaningful for info output only.\n\\let\\footnotestyle=\\comment\n\n{\\catcode `\\@=11\n%\n% Auto-number footnotes.  Otherwise like plain.\n\\gdef\\footnote{%\n  \\let\\indent=\\ptexindent\n  \\let\\noindent=\\ptexnoindent\n  \\global\\advance\\footnoteno by \\@ne\n  \\edef\\thisfootno{$^{\\the\\footnoteno}$}%\n  %\n  % In case the footnote comes at the end of a sentence, preserve the\n  % extra spacing after we do the footnote number.\n  \\let\\@sf\\empty\n  \\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\ptexslash\\fi\n  %\n  % Remove inadvertent blank space before typesetting the footnote number.\n  \\unskip\n  \\thisfootno\\@sf\n  \\dofootnote\n}%\n\n% Don't bother with the trickery in plain.tex to not require the\n% footnote text as a parameter.  Our footnotes don't need to be so general.\n%\n% Oh yes, they do; otherwise, @ifset (and anything else that uses\n% \\parseargline) fails inside footnotes because the tokens are fixed when\n% the footnote is read.  --karl, 16nov96.\n%\n\\gdef\\dofootnote{%\n  \\insert\\footins\\bgroup\n  % We want to typeset this text as a normal paragraph, even if the\n  % footnote reference occurs in (for example) a display environment.\n  % So reset some parameters.\n  \\hsize=\\pagewidth\n  \\interlinepenalty\\interfootnotelinepenalty\n  \\splittopskip\\ht\\strutbox % top baseline for broken footnotes\n  \\splitmaxdepth\\dp\\strutbox\n  \\floatingpenalty\\@MM\n  \\leftskip\\z@skip\n  \\rightskip\\z@skip\n  \\spaceskip\\z@skip\n  \\xspaceskip\\z@skip\n  \\parindent\\defaultparindent\n  %\n  \\smallfonts \\rm\n  %\n  % Because we use hanging indentation in footnotes, a @noindent appears\n  % to exdent this text, so make it be a no-op.  makeinfo does not use\n  % hanging indentation so @noindent can still be needed within footnote\n  % text after an @example or the like (not that this is good style).\n  \\let\\noindent = \\relax\n  %\n  % Hang the footnote text off the number.  Use \\everypar in case the\n  % footnote extends for more than one paragraph.\n  \\everypar = {\\hang}%\n  \\textindent{\\thisfootno}%\n  %\n  % Don't crash into the line above the footnote text.  Since this\n  % expands into a box, it must come within the paragraph, lest it\n  % provide a place where TeX can split the footnote.\n  \\footstrut\n  \\futurelet\\next\\fo@t\n}\n}%end \\catcode `\\@=11\n\n% In case a @footnote appears in a vbox, save the footnote text and create\n% the real \\insert just after the vbox finished.  Otherwise, the insertion\n% would be lost.\n% Similarily, if a @footnote appears inside an alignment, save the footnote\n% text to a box and make the \\insert when a row of the table is finished.\n% And the same can be done for other insert classes.  --kasal, 16nov03.\n\n% Replace the \\insert primitive by a cheating macro.\n% Deeper inside, just make sure that the saved insertions are not spilled\n% out prematurely.\n%\n\\def\\startsavinginserts{%\n  \\ifx \\insert\\ptexinsert\n    \\let\\insert\\saveinsert\n  \\else\n    \\let\\checkinserts\\relax\n  \\fi\n}\n\n% This \\insert replacement works for both \\insert\\footins{foo} and\n% \\insert\\footins\\bgroup foo\\egroup, but it doesn't work for \\insert27{foo}.\n%\n\\def\\saveinsert#1{%\n  \\edef\\next{\\noexpand\\savetobox \\makeSAVEname#1}%\n  \\afterassignment\\next\n  % swallow the left brace\n  \\let\\temp =\n}\n\\def\\makeSAVEname#1{\\makecsname{SAVE\\expandafter\\gobble\\string#1}}\n\\def\\savetobox#1{\\global\\setbox#1 = \\vbox\\bgroup \\unvbox#1}\n\n\\def\\checksaveins#1{\\ifvoid#1\\else \\placesaveins#1\\fi}\n\n\\def\\placesaveins#1{%\n  \\ptexinsert \\csname\\expandafter\\gobblesave\\string#1\\endcsname\n    {\\box#1}%\n}\n\n% eat @SAVE -- beware, all of them have catcode \\other:\n{\n  \\def\\dospecials{\\do S\\do A\\do V\\do E} \\uncatcodespecials  %  ;-)\n  \\gdef\\gobblesave @SAVE{}\n}\n\n% initialization:\n\\def\\newsaveins #1{%\n  \\edef\\next{\\noexpand\\newsaveinsX \\makeSAVEname#1}%\n  \\next\n}\n\\def\\newsaveinsX #1{%\n  \\csname newbox\\endcsname #1%\n  \\expandafter\\def\\expandafter\\checkinserts\\expandafter{\\checkinserts\n    \\checksaveins #1}%\n}\n\n% initialize:\n\\let\\checkinserts\\empty\n\\newsaveins\\footins\n\\newsaveins\\margin\n\n\n% @image.  We use the macros from epsf.tex to support this.\n% If epsf.tex is not installed and @image is used, we complain.\n%\n% Check for and read epsf.tex up front.  If we read it only at @image\n% time, we might be inside a group, and then its definitions would get\n% undone and the next image would fail.\n\\openin 1 = epsf.tex\n\\ifeof 1 \\else\n  % Do not bother showing banner with epsf.tex v2.7k (available in\n  % doc/epsf.tex and on ctan).\n  \\def\\epsfannounce{\\toks0 = }%\n  \\input epsf.tex\n\\fi\n\\closein 1\n%\n% We will only complain once about lack of epsf.tex.\n\\newif\\ifwarnednoepsf\n\\newhelp\\noepsfhelp{epsf.tex must be installed for images to\n  work.  It is also included in the Texinfo distribution, or you can get\n  it from ftp://tug.org/tex/epsf.tex.}\n%\n\\def\\image#1{%\n  \\ifx\\epsfbox\\undefined\n    \\ifwarnednoepsf \\else\n      \\errhelp = \\noepsfhelp\n      \\errmessage{epsf.tex not found, images will be ignored}%\n      \\global\\warnednoepsftrue\n    \\fi\n  \\else\n    \\imagexxx #1,,,,,\\finish\n  \\fi\n}\n%\n% Arguments to @image:\n% #1 is (mandatory) image filename; we tack on .eps extension.\n% #2 is (optional) width, #3 is (optional) height.\n% #4 is (ignored optional) html alt text.\n% #5 is (ignored optional) extension.\n% #6 is just the usual extra ignored arg for parsing this stuff.\n\\newif\\ifimagevmode\n\\def\\imagexxx#1,#2,#3,#4,#5,#6\\finish{\\begingroup\n  \\catcode`\\^^M = 5     % in case we're inside an example\n  \\normalturnoffactive  % allow _ et al. in names\n  % If the image is by itself, center it.\n  \\ifvmode\n    \\imagevmodetrue\n    \\nobreak\\bigskip\n    % Usually we'll have text after the image which will insert\n    % \\parskip glue, so insert it here too to equalize the space\n    % above and below.\n    \\nobreak\\vskip\\parskip\n    \\nobreak\n    \\line\\bgroup\n  \\fi\n  %\n  % Output the image.\n  \\ifpdf\n    \\dopdfimage{#1}{#2}{#3}%\n  \\else\n    % \\epsfbox itself resets \\epsf?size at each figure.\n    \\setbox0 = \\hbox{\\ignorespaces #2}\\ifdim\\wd0 > 0pt \\epsfxsize=#2\\relax \\fi\n    \\setbox0 = \\hbox{\\ignorespaces #3}\\ifdim\\wd0 > 0pt \\epsfysize=#3\\relax \\fi\n    \\epsfbox{#1.eps}%\n  \\fi\n  %\n  \\ifimagevmode \\egroup \\bigbreak \\fi  % space after the image\n\\endgroup}\n\n\n% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,\n% etc.  We don't actually implement floating yet, we always include the\n% float \"here\".  But it seemed the best name for the future.\n%\n\\envparseargdef\\float{\\eatcommaspace\\eatcommaspace\\dofloat#1, , ,\\finish}\n\n% There may be a space before second and/or third parameter; delete it.\n\\def\\eatcommaspace#1, {#1,}\n\n% #1 is the optional FLOATTYPE, the text label for this float, typically\n% \"Figure\", \"Table\", \"Example\", etc.  Can't contain commas.  If omitted,\n% this float will not be numbered and cannot be referred to.\n%\n% #2 is the optional xref label.  Also must be present for the float to\n% be referable.\n%\n% #3 is the optional positioning argument; for now, it is ignored.  It\n% will somehow specify the positions allowed to float to (here, top, bottom).\n%\n% We keep a separate counter for each FLOATTYPE, which we reset at each\n% chapter-level command.\n\\let\\resetallfloatnos=\\empty\n%\n\\def\\dofloat#1,#2,#3,#4\\finish{%\n  \\let\\thiscaption=\\empty\n  \\let\\thisshortcaption=\\empty\n  %\n  % don't lose footnotes inside @float.\n  %\n  % BEWARE: when the floats start float, we have to issue warning whenever an\n  % insert appears inside a float which could possibly float. --kasal, 26may04\n  %\n  \\startsavinginserts\n  %\n  % We can't be used inside a paragraph.\n  \\par\n  %\n  \\vtop\\bgroup\n    \\def\\floattype{#1}%\n    \\def\\floatlabel{#2}%\n    \\def\\floatloc{#3}% we do nothing with this yet.\n    %\n    \\ifx\\floattype\\empty\n      \\let\\safefloattype=\\empty\n    \\else\n      {%\n        % the floattype might have accents or other special characters,\n        % but we need to use it in a control sequence name.\n        \\indexnofonts\n        \\turnoffactive\n        \\xdef\\safefloattype{\\floattype}%\n      }%\n    \\fi\n    %\n    % If label is given but no type, we handle that as the empty type.\n    \\ifx\\floatlabel\\empty \\else\n      % We want each FLOATTYPE to be numbered separately (Figure 1,\n      % Table 1, Figure 2, ...).  (And if no label, no number.)\n      %\n      \\expandafter\\getfloatno\\csname\\safefloattype floatno\\endcsname\n      \\global\\advance\\floatno by 1\n      %\n      {%\n        % This magic value for \\thissection is output by \\setref as the\n        % XREFLABEL-title value.  \\xrefX uses it to distinguish float\n        % labels (which have a completely different output format) from\n        % node and anchor labels.  And \\xrdef uses it to construct the\n        % lists of floats.\n        %\n        \\edef\\thissection{\\floatmagic=\\safefloattype}%\n        \\setref{\\floatlabel}{Yfloat}%\n      }%\n    \\fi\n    %\n    % start with \\parskip glue, I guess.\n    \\vskip\\parskip\n    %\n    % Don't suppress indentation if a float happens to start a section.\n    \\restorefirstparagraphindent\n}\n\n% we have these possibilities:\n% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap\n% @float Foo,lbl & no caption:    Foo 1.1\n% @float Foo & @caption{Cap}:     Foo: Cap\n% @float Foo & no caption:        Foo\n% @float ,lbl & Caption{Cap}:     1.1: Cap\n% @float ,lbl & no caption:       1.1\n% @float & @caption{Cap}:         Cap\n% @float & no caption:\n%\n\\def\\Efloat{%\n    \\let\\floatident = \\empty\n    %\n    % In all cases, if we have a float type, it comes first.\n    \\ifx\\floattype\\empty \\else \\def\\floatident{\\floattype}\\fi\n    %\n    % If we have an xref label, the number comes next.\n    \\ifx\\floatlabel\\empty \\else\n      \\ifx\\floattype\\empty \\else % if also had float type, need tie first.\n        \\appendtomacro\\floatident{\\tie}%\n      \\fi\n      % the number.\n      \\appendtomacro\\floatident{\\chaplevelprefix\\the\\floatno}%\n    \\fi\n    %\n    % Start the printed caption with what we've constructed in\n    % \\floatident, but keep it separate; we need \\floatident again.\n    \\let\\captionline = \\floatident\n    %\n    \\ifx\\thiscaption\\empty \\else\n      \\ifx\\floatident\\empty \\else\n\t\\appendtomacro\\captionline{: }% had ident, so need a colon between\n      \\fi\n      %\n      % caption text.\n      \\appendtomacro\\captionline{\\scanexp\\thiscaption}%\n    \\fi\n    %\n    % If we have anything to print, print it, with space before.\n    % Eventually this needs to become an \\insert.\n    \\ifx\\captionline\\empty \\else\n      \\vskip.5\\parskip\n      \\captionline\n      %\n      % Space below caption.\n      \\vskip\\parskip\n    \\fi\n    %\n    % If have an xref label, write the list of floats info.  Do this\n    % after the caption, to avoid chance of it being a breakpoint.\n    \\ifx\\floatlabel\\empty \\else\n      % Write the text that goes in the lof to the aux file as\n      % \\floatlabel-lof.  Besides \\floatident, we include the short\n      % caption if specified, else the full caption if specified, else nothing.\n      {%\n        \\atdummies\n        %\n        % since we read the caption text in the macro world, where ^^M\n        % is turned into a normal character, we have to scan it back, so\n        % we don't write the literal three characters \"^^M\" into the aux file.\n\t\\scanexp{%\n\t  \\xdef\\noexpand\\gtemp{%\n\t    \\ifx\\thisshortcaption\\empty\n\t      \\thiscaption\n\t    \\else\n\t      \\thisshortcaption\n\t    \\fi\n\t  }%\n\t}%\n        \\immediate\\write\\auxfile{@xrdef{\\floatlabel-lof}{\\floatident\n\t  \\ifx\\gtemp\\empty \\else : \\gtemp \\fi}}%\n      }%\n    \\fi\n  \\egroup  % end of \\vtop\n  %\n  % place the captured inserts\n  %\n  % BEWARE: when the floats start floating, we have to issue warning\n  % whenever an insert appears inside a float which could possibly\n  % float. --kasal, 26may04\n  %\n  \\checkinserts\n}\n\n% Append the tokens #2 to the definition of macro #1, not expanding either.\n%\n\\def\\appendtomacro#1#2{%\n  \\expandafter\\def\\expandafter#1\\expandafter{#1#2}%\n}\n\n% @caption, @shortcaption\n%\n\\def\\caption{\\docaption\\thiscaption}\n\\def\\shortcaption{\\docaption\\thisshortcaption}\n\\def\\docaption{\\checkenv\\float \\bgroup\\scanargctxt\\defcaption}\n\\def\\defcaption#1#2{\\egroup \\def#1{#2}}\n\n% The parameter is the control sequence identifying the counter we are\n% going to use.  Create it if it doesn't exist and assign it to \\floatno.\n\\def\\getfloatno#1{%\n  \\ifx#1\\relax\n      % Haven't seen this figure type before.\n      \\csname newcount\\endcsname #1%\n      %\n      % Remember to reset this floatno at the next chap.\n      \\expandafter\\gdef\\expandafter\\resetallfloatnos\n        \\expandafter{\\resetallfloatnos #1=0 }%\n  \\fi\n  \\let\\floatno#1%\n}\n\n% \\setref calls this to get the XREFLABEL-snt value.  We want an @xref\n% to the FLOATLABEL to expand to \"Figure 3.1\".  We call \\setref when we\n% first read the @float command.\n%\n\\def\\Yfloat{\\floattype@tie \\chaplevelprefix\\the\\floatno}%\n\n% Magic string used for the XREFLABEL-title value, so \\xrefX can\n% distinguish floats from other xref types.\n\\def\\floatmagic{!!float!!}\n\n% #1 is the control sequence we are passed; we expand into a conditional\n% which is true if #1 represents a float ref.  That is, the magic\n% \\thissection value which we \\setref above.\n%\n\\def\\iffloat#1{\\expandafter\\doiffloat#1==\\finish}\n%\n% #1 is (maybe) the \\floatmagic string.  If so, #2 will be the\n% (safe) float type for this float.  We set \\iffloattype to #2.\n%\n\\def\\doiffloat#1=#2=#3\\finish{%\n  \\def\\temp{#1}%\n  \\def\\iffloattype{#2}%\n  \\ifx\\temp\\floatmagic\n}\n\n% @listoffloats FLOATTYPE - print a list of floats like a table of contents.\n%\n\\parseargdef\\listoffloats{%\n  \\def\\floattype{#1}% floattype\n  {%\n    % the floattype might have accents or other special characters,\n    % but we need to use it in a control sequence name.\n    \\indexnofonts\n    \\turnoffactive\n    \\xdef\\safefloattype{\\floattype}%\n  }%\n  %\n  % \\xrdef saves the floats as a \\do-list in \\floatlistSAFEFLOATTYPE.\n  \\expandafter\\ifx\\csname floatlist\\safefloattype\\endcsname \\relax\n    \\ifhavexrefs\n      % if the user said @listoffloats foo but never @float foo.\n      \\message{\\linenumber No `\\safefloattype' floats to list.}%\n    \\fi\n  \\else\n    \\begingroup\n      \\leftskip=\\tocindent  % indent these entries like a toc\n      \\let\\do=\\listoffloatsdo\n      \\csname floatlist\\safefloattype\\endcsname\n    \\endgroup\n  \\fi\n}\n\n% This is called on each entry in a list of floats.  We're passed the\n% xref label, in the form LABEL-title, which is how we save it in the\n% aux file.  We strip off the -title and look up \\XRLABEL-lof, which\n% has the text we're supposed to typeset here.\n%\n% Figures without xref labels will not be included in the list (since\n% they won't appear in the aux file).\n%\n\\def\\listoffloatsdo#1{\\listoffloatsdoentry#1\\finish}\n\\def\\listoffloatsdoentry#1-title\\finish{{%\n  % Can't fully expand XR#1-lof because it can contain anything.  Just\n  % pass the control sequence.  On the other hand, XR#1-pg is just the\n  % page number, and we want to fully expand that so we can get a link\n  % in pdf output.\n  \\toksA = \\expandafter{\\csname XR#1-lof\\endcsname}%\n  %\n  % use the same \\entry macro we use to generate the TOC and index.\n  \\edef\\writeentry{\\noexpand\\entry{\\the\\toksA}{\\csname XR#1-pg\\endcsname}}%\n  \\writeentry\n}}\n\n\\message{localization,}\n% and i18n.\n\n% @documentlanguage is usually given very early, just after\n% @setfilename.  If done too late, it may not override everything\n% properly.  Single argument is the language abbreviation.\n% It would be nice if we could set up a hyphenation file here.\n%\n\\parseargdef\\documentlanguage{%\n  \\tex % read txi-??.tex file in plain TeX.\n    % Read the file if it exists.\n    \\openin 1 txi-#1.tex\n    \\ifeof 1\n      \\errhelp = \\nolanghelp\n      \\errmessage{Cannot read language file txi-#1.tex}%\n    \\else\n      \\input txi-#1.tex\n    \\fi\n    \\closein 1\n  \\endgroup\n}\n\\newhelp\\nolanghelp{The given language definition file cannot be found or\nis empty.  Maybe you need to install it?  In the current directory\nshould work if nowhere else does.}\n\n\n% @documentencoding should change something in TeX eventually, most\n% likely, but for now just recognize it.\n\\let\\documentencoding = \\comment\n\n\n% Page size parameters.\n%\n\\newdimen\\defaultparindent \\defaultparindent = 15pt\n\n\\chapheadingskip = 15pt plus 4pt minus 2pt\n\\secheadingskip = 12pt plus 3pt minus 2pt\n\\subsecheadingskip = 9pt plus 2pt minus 2pt\n\n% Prevent underfull vbox error messages.\n\\vbadness = 10000\n\n% Don't be so finicky about underfull hboxes, either.\n\\hbadness = 2000\n\n% Following George Bush, just get rid of widows and orphans.\n\\widowpenalty=10000\n\\clubpenalty=10000\n\n% Use TeX 3.0's \\emergencystretch to help line breaking, but if we're\n% using an old version of TeX, don't do anything.  We want the amount of\n% stretch added to depend on the line length, hence the dependence on\n% \\hsize.  We call this whenever the paper size is set.\n%\n\\def\\setemergencystretch{%\n  \\ifx\\emergencystretch\\thisisundefined\n    % Allow us to assign to \\emergencystretch anyway.\n    \\def\\emergencystretch{\\dimen0}%\n  \\else\n    \\emergencystretch = .15\\hsize\n  \\fi\n}\n\n% Parameters in order: 1) textheight; 2) textwidth;\n% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;\n% 7) physical page height; 8) physical page width.\n%\n% We also call \\setleading{\\textleading}, so the caller should define\n% \\textleading.  The caller should also set \\parskip.\n%\n\\def\\internalpagesizes#1#2#3#4#5#6#7#8{%\n  \\voffset = #3\\relax\n  \\topskip = #6\\relax\n  \\splittopskip = \\topskip\n  %\n  \\vsize = #1\\relax\n  \\advance\\vsize by \\topskip\n  \\outervsize = \\vsize\n  \\advance\\outervsize by 2\\topandbottommargin\n  \\pageheight = \\vsize\n  %\n  \\hsize = #2\\relax\n  \\outerhsize = \\hsize\n  \\advance\\outerhsize by 0.5in\n  \\pagewidth = \\hsize\n  %\n  \\normaloffset = #4\\relax\n  \\bindingoffset = #5\\relax\n  %\n  \\ifpdf\n    \\pdfpageheight #7\\relax\n    \\pdfpagewidth #8\\relax\n  \\fi\n  %\n  \\setleading{\\textleading}\n  %\n  \\parindent = \\defaultparindent\n  \\setemergencystretch\n}\n\n% @letterpaper (the default).\n\\def\\letterpaper{{\\globaldefs = 1\n  \\parskip = 3pt plus 2pt minus 1pt\n  \\textleading = 13.2pt\n  %\n  % If page is nothing but text, make it come out even.\n  \\internalpagesizes{46\\baselineskip}{6in}%\n                    {\\voffset}{.25in}%\n                    {\\bindingoffset}{36pt}%\n                    {11in}{8.5in}%\n}}\n\n% Use @smallbook to reset parameters for 7x9.25 trim size.\n\\def\\smallbook{{\\globaldefs = 1\n  \\parskip = 2pt plus 1pt\n  \\textleading = 12pt\n  %\n  \\internalpagesizes{7.5in}{5in}%\n                    {\\voffset}{.25in}%\n                    {\\bindingoffset}{16pt}%\n                    {9.25in}{7in}%\n  %\n  \\lispnarrowing = 0.3in\n  \\tolerance = 700\n  \\hfuzz = 1pt\n  \\contentsrightmargin = 0pt\n  \\defbodyindent = .5cm\n}}\n\n% Use @smallerbook to reset parameters for 6x9 trim size.\n% (Just testing, parameters still in flux.)\n\\def\\smallerbook{{\\globaldefs = 1\n  \\parskip = 1.5pt plus 1pt\n  \\textleading = 12pt\n  %\n  \\internalpagesizes{7.4in}{4.8in}%\n                    {-.2in}{-.4in}%\n                    {0pt}{14pt}%\n                    {9in}{6in}%\n  %\n  \\lispnarrowing = 0.25in\n  \\tolerance = 700\n  \\hfuzz = 1pt\n  \\contentsrightmargin = 0pt\n  \\defbodyindent = .4cm\n}}\n\n% Use @afourpaper to print on European A4 paper.\n\\def\\afourpaper{{\\globaldefs = 1\n  \\parskip = 3pt plus 2pt minus 1pt\n  \\textleading = 13.2pt\n  %\n  % Double-side printing via postscript on Laserjet 4050\n  % prints double-sided nicely when \\bindingoffset=10mm and \\hoffset=-6mm.\n  % To change the settings for a different printer or situation, adjust\n  % \\normaloffset until the front-side and back-side texts align.  Then\n  % do the same for \\bindingoffset.  You can set these for testing in\n  % your texinfo source file like this:\n  % @tex\n  % \\global\\normaloffset = -6mm\n  % \\global\\bindingoffset = 10mm\n  % @end tex\n  \\internalpagesizes{51\\baselineskip}{160mm}\n                    {\\voffset}{\\hoffset}%\n                    {\\bindingoffset}{44pt}%\n                    {297mm}{210mm}%\n  %\n  \\tolerance = 700\n  \\hfuzz = 1pt\n  \\contentsrightmargin = 0pt\n  \\defbodyindent = 5mm\n}}\n\n% Use @afivepaper to print on European A5 paper.\n% From romildo@urano.iceb.ufop.br, 2 July 2000.\n% He also recommends making @example and @lisp be small.\n\\def\\afivepaper{{\\globaldefs = 1\n  \\parskip = 2pt plus 1pt minus 0.1pt\n  \\textleading = 12.5pt\n  %\n  \\internalpagesizes{160mm}{120mm}%\n                    {\\voffset}{\\hoffset}%\n                    {\\bindingoffset}{8pt}%\n                    {210mm}{148mm}%\n  %\n  \\lispnarrowing = 0.2in\n  \\tolerance = 800\n  \\hfuzz = 1.2pt\n  \\contentsrightmargin = 0pt\n  \\defbodyindent = 2mm\n  \\tableindent = 12mm\n}}\n\n% A specific text layout, 24x15cm overall, intended for A4 paper.\n\\def\\afourlatex{{\\globaldefs = 1\n  \\afourpaper\n  \\internalpagesizes{237mm}{150mm}%\n                    {\\voffset}{4.6mm}%\n                    {\\bindingoffset}{7mm}%\n                    {297mm}{210mm}%\n  %\n  % Must explicitly reset to 0 because we call \\afourpaper.\n  \\globaldefs = 0\n}}\n\n% Use @afourwide to print on A4 paper in landscape format.\n\\def\\afourwide{{\\globaldefs = 1\n  \\afourpaper\n  \\internalpagesizes{241mm}{165mm}%\n                    {\\voffset}{-2.95mm}%\n                    {\\bindingoffset}{7mm}%\n                    {297mm}{210mm}%\n  \\globaldefs = 0\n}}\n\n% @pagesizes TEXTHEIGHT[,TEXTWIDTH]\n% Perhaps we should allow setting the margins, \\topskip, \\parskip,\n% and/or leading, also. Or perhaps we should compute them somehow.\n%\n\\parseargdef\\pagesizes{\\pagesizesyyy #1,,\\finish}\n\\def\\pagesizesyyy#1,#2,#3\\finish{{%\n  \\setbox0 = \\hbox{\\ignorespaces #2}\\ifdim\\wd0 > 0pt \\hsize=#2\\relax \\fi\n  \\globaldefs = 1\n  %\n  \\parskip = 3pt plus 2pt minus 1pt\n  \\setleading{\\textleading}%\n  %\n  \\dimen0 = #1\n  \\advance\\dimen0 by \\voffset\n  %\n  \\dimen2 = \\hsize\n  \\advance\\dimen2 by \\normaloffset\n  %\n  \\internalpagesizes{#1}{\\hsize}%\n                    {\\voffset}{\\normaloffset}%\n                    {\\bindingoffset}{44pt}%\n                    {\\dimen0}{\\dimen2}%\n}}\n\n% Set default to letter.\n%\n\\letterpaper\n\n\n\\message{and turning on texinfo input format.}\n\n% Define macros to output various characters with catcode for normal text.\n\\catcode`\\\"=\\other\n\\catcode`\\~=\\other\n\\catcode`\\^=\\other\n\\catcode`\\_=\\other\n\\catcode`\\|=\\other\n\\catcode`\\<=\\other\n\\catcode`\\>=\\other\n\\catcode`\\+=\\other\n\\catcode`\\$=\\other\n\\def\\normaldoublequote{\"}\n\\def\\normaltilde{~}\n\\def\\normalcaret{^}\n\\def\\normalunderscore{_}\n\\def\\normalverticalbar{|}\n\\def\\normalless{<}\n\\def\\normalgreater{>}\n\\def\\normalplus{+}\n\\def\\normaldollar{$}%$ font-lock fix\n\n% This macro is used to make a character print one way in \\tt\n% (where it can probably be output as-is), and another way in other fonts,\n% where something hairier probably needs to be done.\n%\n% #1 is what to print if we are indeed using \\tt; #2 is what to print\n% otherwise.  Since all the Computer Modern typewriter fonts have zero\n% interword stretch (and shrink), and it is reasonable to expect all\n% typewriter fonts to have this, we can check that font parameter.\n%\n\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\font=0pt #1\\else #2\\fi}\n\n% Same as above, but check for italic font.  Actually this also catches\n% non-italic slanted fonts since it is impossible to distinguish them from\n% italic fonts.  But since this is only used by $ and it uses \\sl anyway\n% this is not a problem.\n\\def\\ifusingit#1#2{\\ifdim \\fontdimen1\\font>0pt #1\\else #2\\fi}\n\n% Turn off all special characters except @\n% (and those which the user can use as if they were ordinary).\n% Most of these we simply print from the \\tt font, but for some, we can\n% use math or other variants that look better in normal text.\n\n\\catcode`\\\"=\\active\n\\def\\activedoublequote{{\\tt\\char34}}\n\\let\"=\\activedoublequote\n\\catcode`\\~=\\active\n\\def~{{\\tt\\char126}}\n\\chardef\\hat=`\\^\n\\catcode`\\^=\\active\n\\def^{{\\tt \\hat}}\n\n\\catcode`\\_=\\active\n\\def_{\\ifusingtt\\normalunderscore\\_}\n\\let\\realunder=_\n% Subroutine for the previous macro.\n\\def\\_{\\leavevmode \\kern.07em \\vbox{\\hrule width.3em height.1ex}\\kern .07em }\n\n\\catcode`\\|=\\active\n\\def|{{\\tt\\char124}}\n\\chardef \\less=`\\<\n\\catcode`\\<=\\active\n\\def<{{\\tt \\less}}\n\\chardef \\gtr=`\\>\n\\catcode`\\>=\\active\n\\def>{{\\tt \\gtr}}\n\\catcode`\\+=\\active\n\\def+{{\\tt \\char 43}}\n\\catcode`\\$=\\active\n\\def${\\ifusingit{{\\sl\\$}}\\normaldollar}%$ font-lock fix\n\n% If a .fmt file is being used, characters that might appear in a file\n% name cannot be active until we have parsed the command line.\n% So turn them off again, and have \\everyjob (or @setfilename) turn them on.\n% \\otherifyactive is called near the end of this file.\n\\def\\otherifyactive{\\catcode`+=\\other \\catcode`\\_=\\other}\n\n% Used sometimes to turn off (effectively) the active characters even after\n% parsing them.\n\\def\\turnoffactive{%\n  \\normalturnoffactive\n  \\otherbackslash\n}\n\n\\catcode`\\@=0\n\n% \\backslashcurfont outputs one backslash character in current font,\n% as in \\char`\\\\.\n\\global\\chardef\\backslashcurfont=`\\\\\n\\global\\let\\rawbackslashxx=\\backslashcurfont  % let existing .??s files work\n\n% \\realbackslash is an actual character `\\' with catcode other, and\n% \\doublebackslash is two of them (for the pdf outlines).\n{\\catcode`\\\\=\\other @gdef@realbackslash{\\} @gdef@doublebackslash{\\\\}}\n\n% In texinfo, backslash is an active character; it prints the backslash\n% in fixed width font.\n\\catcode`\\\\=\\active\n@def@normalbackslash{{@tt@backslashcurfont}}\n% On startup, @fixbackslash assigns:\n%  @let \\ = @normalbackslash\n\n% \\rawbackslash defines an active \\ to do \\backslashcurfont.\n% \\otherbackslash defines an active \\ to be a literal `\\' character with\n% catcode other.\n@gdef@rawbackslash{@let\\=@backslashcurfont}\n@gdef@otherbackslash{@let\\=@realbackslash}\n\n% Same as @turnoffactive except outputs \\ as {\\tt\\char`\\\\} instead of\n% the literal character `\\'.\n% \n@def@normalturnoffactive{%\n  @let\\=@normalbackslash\n  @let\"=@normaldoublequote\n  @let~=@normaltilde\n  @let^=@normalcaret\n  @let_=@normalunderscore\n  @let|=@normalverticalbar\n  @let<=@normalless\n  @let>=@normalgreater\n  @let+=@normalplus\n  @let$=@normaldollar %$ font-lock fix\n  @unsepspaces\n}\n\n% Make _ and + \\other characters, temporarily.\n% This is canceled by @fixbackslash.\n@otherifyactive\n\n% If a .fmt file is being used, we don't want the `\\input texinfo' to show up.\n% That is what \\eatinput is for; after that, the `\\' should revert to printing\n% a backslash.\n%\n@gdef@eatinput input texinfo{@fixbackslash}\n@global@let\\ = @eatinput\n\n% On the other hand, perhaps the file did not have a `\\input texinfo'. Then\n% the first `\\' in the file would cause an error. This macro tries to fix\n% that, assuming it is called before the first `\\' could plausibly occur.\n% Also turn back on active characters that might appear in the input\n% file name, in case not using a pre-dumped format.\n%\n@gdef@fixbackslash{%\n  @ifx\\@eatinput @let\\ = @normalbackslash @fi\n  @catcode`+=@active\n  @catcode`@_=@active\n}\n\n% Say @foo, not \\foo, in error messages.\n@escapechar = `@@\n\n% These look ok in all fonts, so just make them not special.\n@catcode`@& = @other\n@catcode`@# = @other\n@catcode`@% = @other\n\n\n@c Local variables:\n@c eval: (add-hook 'write-file-hooks 'time-stamp)\n@c page-delimiter: \"^\\\\\\\\message\"\n@c time-stamp-start: \"def\\\\\\\\texinfoversion{\"\n@c time-stamp-format: \"%:y-%02m-%02d.%02H\"\n@c time-stamp-end: \"}\"\n@c End:\n\n@c vim:sw=2:\n\n@ignore\n   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115\n@end ignore\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/uintmax_t.m4",
    "content": "# uintmax_t.m4 serial 7 (gettext-0.12)\ndnl Copyright (C) 1997-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\nAC_PREREQ(2.13)\n\n# Define uintmax_t to 'unsigned long' or 'unsigned long long'\n# if it is not already defined in <stdint.h> or <inttypes.h>.\n\nAC_DEFUN([jm_AC_TYPE_UINTMAX_T],\n[\n  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])\n  AC_REQUIRE([jm_AC_HEADER_STDINT_H])\n  if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then\n    AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])\n    test $ac_cv_type_unsigned_long_long = yes \\\n      && ac_type='unsigned long long' \\\n      || ac_type='unsigned long'\n    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,\n      [Define to unsigned long or unsigned long long\n       if <stdint.h> and <inttypes.h> don't define.])\n  else\n    AC_DEFINE(HAVE_UINTMAX_T, 1,\n      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/ulonglong.m4",
    "content": "# ulonglong.m4 serial 3\ndnl Copyright (C) 1999-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Paul Eggert.\n\n# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.\n\nAC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],\n[\n  AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,\n  [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],\n    [unsigned long long ullmax = (unsigned long long) -1;\n     return ull << i | ull >> i | ullmax / ull | ullmax % ull;],\n    ac_cv_type_unsigned_long_long=yes,\n    ac_cv_type_unsigned_long_long=no)])\n  if test $ac_cv_type_unsigned_long_long = yes; then\n    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,\n      [Define if you have the 'unsigned long long' type.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/wchar_t.m4",
    "content": "# wchar_t.m4 serial 1 (gettext-0.12)\ndnl Copyright (C) 2002-2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\ndnl Test whether <stddef.h> has the 'wchar_t' type.\ndnl Prerequisite: AC_PROG_CC\n\nAC_DEFUN([gt_TYPE_WCHAR_T],\n[\n  AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,\n    [AC_TRY_COMPILE([#include <stddef.h>\n       wchar_t foo = (wchar_t)'\\0';], ,\n       gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])\n  if test $gt_cv_c_wchar_t = yes; then\n    AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/wint_t.m4",
    "content": "# wint_t.m4 serial 1 (gettext-0.12)\ndnl Copyright (C) 2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\ndnl From Bruno Haible.\ndnl Test whether <wchar.h> has the 'wint_t' type.\ndnl Prerequisite: AC_PROG_CC\n\nAC_DEFUN([gt_TYPE_WINT_T],\n[\n  AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,\n    [AC_TRY_COMPILE([#include <wchar.h>\n       wint_t foo = (wchar_t)'\\0';], ,\n       gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])\n  if test $gt_cv_c_wint_t = yes; then\n    AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])\n  fi\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config/xsize.m4",
    "content": "# xsize.m4 serial 2\ndnl Copyright (C) 2003 Free Software Foundation, Inc.\ndnl This file is free software, distributed under the terms of the GNU\ndnl General Public License.  As a special exception to the GNU General\ndnl Public License, this file may be distributed as part of a program\ndnl that contains a configuration script generated by Autoconf, under\ndnl the same distribution terms as the rest of that program.\n\nAC_DEFUN([gl_XSIZE],\n[\n  dnl Prerequisites of lib/xsize.h.\n  AC_REQUIRE([gl_SIZE_MAX])\n  AC_CHECK_HEADERS(stdint.h)\n])\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config.ami",
    "content": "/* config.h -- hand-massaged for Amiga                                  -*-C-*-\nCopyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Define if on AIX 3.\n   System headers sometimes define this.\n   We just want to avoid a redefinition error message.\t*/\n#ifndef _ALL_SOURCE\n/* #undef _ALL_SOURCE */\n#endif\n\n/* Define if using alloca.c.  */\n#define C_ALLOCA\n\n/* Define if the closedir function returns void instead of int.  */\n/* #undef CLOSEDIR_VOID */\n\n/* Define to empty if the keyword does not work.  */\n/* #undef const */\n\n/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.\n   This function is required for alloca.c support on those systems.  */\n/* #undef CRAY_STACKSEG_END */\n\n/* Define for DGUX with <sys/dg_sys_info.h>.  */\n/* #undef DGUX */\n\n/* Define if the `getloadavg' function needs to be run setuid or setgid.  */\n/* #undef GETLOADAVG_PRIVILEGED */\n\n/* Define to `unsigned long' or `unsigned long long'\n   if <inttypes.h> doesn't define.  */\n#define uintmax_t unsigned long\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n#define gid_t int\n\n/* Define if you have alloca, as a function or macro.  */\n/* #undef HAVE_ALLOCA */\n\n/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */\n/* #undef HAVE_ALLOCA_H */\n\n/* Define if you don't have vprintf but do have _doprnt.  */\n/* #undef HAVE_DOPRNT */\n\n/* Define if your system has a working fnmatch function.  */\n/* #undef HAVE_FNMATCH */\n\n/* Define if your system has its own `getloadavg' function.  */\n/* #undef HAVE_GETLOADAVG */\n\n/* Define if you have the getmntent function.  */\n/* #undef HAVE_GETMNTENT */\n\n/* Define if the `long double' type works.  */\n/* #undef HAVE_LONG_DOUBLE */\n\n/* Define if you support file names longer than 14 characters.\t*/\n#define HAVE_LONG_FILE_NAMES 1\n\n/* Define if you have a working `mmap' system call.  */\n/* #undef HAVE_MMAP */\n\n/* Define if system calls automatically restart after interruption\n   by a signal.  */\n/* #undef HAVE_RESTARTABLE_SYSCALLS */\n\n/* Define if your struct stat has st_blksize.  */\n/* #undef HAVE_ST_BLKSIZE */\n\n/* Define if your struct stat has st_blocks.  */\n/* #undef HAVE_ST_BLOCKS */\n\n/* Define if you have the strcoll function and it is properly defined.\t*/\n#define HAVE_STRCOLL 1\n\n/* Define if your struct stat has st_rdev.  */\n#define HAVE_ST_RDEV 1\n\n/* Define if you have the strftime function.  */\n#define HAVE_STRFTIME 1\n\n/* Define if you have <sys/wait.h> that is POSIX.1 compatible.\t*/\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define if your struct tm has tm_zone.  */\n/* #undef HAVE_TM_ZONE */\n\n/* Define if you don't have tm_zone but do have the external array\n   tzname.  */\n#define HAVE_TZNAME 1\n\n/* Define if you have <unistd.h>.  */\n#define HAVE_UNISTD_H 1\n\n/* Define if utime(file, NULL) sets file's timestamp to the present.  */\n/* #undef HAVE_UTIME_NULL */\n\n/* Define if you have <vfork.h>.  */\n/* #undef HAVE_VFORK_H */\n\n/* Define if you have the vprintf function.  */\n#define HAVE_VPRINTF 1\n\n/* Define if you have the wait3 system call.  */\n/* #undef HAVE_WAIT3 */\n\n/* Define if on MINIX.\t*/\n/* #undef _MINIX */\n\n/* Define if your struct nlist has an n_un member.  */\n/* #undef NLIST_NAME_UNION */\n\n/* Define if you have <nlist.h>.  */\n/* #undef NLIST_STRUCT */\n\n/* Define if your C compiler doesn't accept -c and -o together.  */\n/* #undef NO_MINUS_C_MINUS_O */\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n#define pid_t int\n\n/* Define if the system does not provide POSIX.1 features except\n   with this defined.  */\n/* #undef _POSIX_1_SOURCE */\n\n/* Define if you need to in order for stat and other things to work.  */\n/* #undef _POSIX_SOURCE */\n\n/* Define as the return type of signal handlers (int or void).  */\n#define RETSIGTYPE void\n\n/* Define if the setvbuf function takes the buffering type as its second\n   argument and the buffer pointer as the third, as on System V\n   before release 3.  */\n/* #undef SETVBUF_REVERSED */\n\n/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at run-time.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown\n */\n#define STACK_DIRECTION -1\n\n/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly.  */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define if your compiler conforms to the ANSI C standard. */\n#define HAVE_ANSI_COMPILER 1\n\n/* Define if you have the ANSI C header files.\t*/\n#define STDC_HEADERS\n\n/* Define on System V Release 4.  */\n/* #undef SVR4 */\n\n/* Define if `sys_siglist' is declared by <signal.h>.  */\n/* #undef SYS_SIGLIST_DECLARED */\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n#define uid_t int\n\n/* Define for Encore UMAX.  */\n/* #undef UMAX */\n\n/* Define for Encore UMAX 4.3 that has <inq_status/cpustats.h>\n   instead of <sys/cpustats.h>.  */\n/* #undef UMAX4_3 */\n\n/* Define vfork as fork if vfork does not work.  */\n/* #undef vfork */\n\n/* Name of this package (needed by automake) */\n#define PACKAGE \"make\"\n\n/* Version of this package (needed by automake) */\n#define VERSION \"3.81\"\n\n/* Define to the name of the SCCS `get' command.  */\n#define SCCS_GET \"get\"\n\n/* Define this if the SCCS `get' command understands the `-G<file>' option.  */\n/* #undef SCCS_GET_MINUS_G */\n\n/* Define this to enable job server support in GNU make.  */\n/* #undef MAKE_JOBSERVER */\n\n/* Define to be the nanoseconds member of struct stat's st_mtim,\n   if it exists.  */\n/* #undef ST_MTIM_NSEC */\n\n/* Define this if the C library defines the variable `sys_siglist'.  */\n/* #undef HAVE_SYS_SIGLIST */\n\n/* Define this if the C library defines the variable `_sys_siglist'.  */\n/* #undef HAVE__SYS_SIGLIST */\n\n/* Define this if you have the `union wait' type in <sys/wait.h>.  */\n/* #undef HAVE_UNION_WAIT */\n\n/* Define if you have the dup2 function.  */\n/* #undef HAVE_DUP2 */\n\n/* Define if you have the getcwd function.  */\n#define HAVE_GETCWD 1\n\n/* Define if you have the getgroups function.  */\n/* #undef HAVE_GETGROUPS */\n\n/* Define if you have the gethostbyname function.  */\n/* #undef HAVE_GETHOSTBYNAME */\n\n/* Define if you have the gethostname function.  */\n/* #undef HAVE_GETHOSTNAME */\n\n/* Define if you have the memmove function.  */\n#define HAVE_MEMMOVE 1\n\n/* Define if you have the mktemp function.  */\n#define HAVE_MKTEMP 1\n\n/* Define if you have the psignal function.  */\n/* #undef HAVE_PSIGNAL */\n\n/* Define if you have the pstat_getdynamic function.  */\n/* #undef HAVE_PSTAT_GETDYNAMIC */\n\n/* Define if you have the setegid function.  */\n/* #undef HAVE_SETEGID */\n\n/* Define if you have the seteuid function.  */\n/* #undef HAVE_SETEUID */\n\n/* Define if you have the setlinebuf function.\t*/\n/* #undef HAVE_SETLINEBUF */\n\n/* Define if you have the setregid function.  */\n/* #undef HAVE_SETREGID */\n\n/* Define if you have the setreuid function.  */\n/* #undef HAVE_SETREUID */\n\n/* Define if you have the sigsetmask function.\t*/\n/* #undef HAVE_SIGSETMASK */\n\n/* Define if you have the socket function.  */\n/* #undef HAVE_SOCKET */\n\n/* Define if you have the strcasecmp function.  */\n/* #undef HAVE_STRCASECMP */\n\n/* Define if you have the strerror function.  */\n#define HAVE_STRERROR 1\n\n/* Define if you have the strsignal function.  */\n/* #undef HAVE_STRSIGNAL */\n\n/* Define if you have the wait3 function.  */\n/* #undef HAVE_WAIT3 */\n\n/* Define if you have the waitpid function.  */\n/* #undef HAVE_WAITPID */\n\n/* Define if you have the <dirent.h> header file.  */\n#define HAVE_DIRENT_H 1\n\n/* Define if you have the <fcntl.h> header file.  */\n#define HAVE_FCNTL_H 1\n\n/* Define if you have the <limits.h> header file.  */\n#define HAVE_LIMITS_H 1\n\n/* Define if you have the <mach/mach.h> header file.  */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define if you have the <memory.h> header file.  */\n/* #undef HAVE_MEMORY_H */\n\n/* Define if you have the <ndir.h> header file.  */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <stdarg.h> header file. */\n#define HAVE_STDARG_H 1\n\n/* Define if you have the <stdlib.h> header file.  */\n/* #undef HAVE_STDLIB_H */\n\n/* Define if you have the <string.h> header file.  */\n#define HAVE_STRING_H 1\n\n/* Define if you have the <sys/dir.h> header file.  */\n#define HAVE_SYS_DIR_H 1\n\n/* Define if you have the <sys/ndir.h> header file.  */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define if you have the <sys/param.h> header file.  */\n/* #undef HAVE_SYS_PARAM_H */\n\n/* Define if you have the <sys/timeb.h> header file.  */\n/* #undef HAVE_SYS_TIMEB_H */\n\n/* Define if you have the <sys/wait.h> header file.  */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define if you have the <unistd.h> header file.  */\n#define HAVE_UNISTD_H 1\n\n/* Define if you have the dgc library (-ldgc).  */\n/* #undef HAVE_LIBDGC */\n\n/* Define if you have the kstat library (-lkstat).  */\n/* #undef HAVE_LIBKSTAT */\n\n/* Define if you have the sun library (-lsun).  */\n/* #undef HAVE_LIBSUN */\n\n/* Define for Case Insensitve behavior */\n#define HAVE_CASE_INSENSITIVE_FS\n\n/* Build host information. */\n#define MAKE_HOST \"Amiga\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config.h-vms",
    "content": "/* config.h-vms. Generated by hand by Klaus Kmpf <kkaempf@rmi.de>      -*-C-*-\n\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* config.h.  Generated automatically by configure.  */\n/* config.h.in.  Generated automatically from configure.in by autoheader.  */\n\n/* Define if on AIX 3.\n   System headers sometimes define this.\n   We just want to avoid a redefinition error message.  */\n#ifndef _ALL_SOURCE\n/* #undef _ALL_SOURCE */\n#endif\n\n/* Define to 1 if NLS is requested.  */\n/* #undef ENABLE_NLS */\n\n/* Define as 1 if you have dcgettext.  */\n/* #undef HAVE_DCGETTEXT */\n\n/* Define as 1 if you have gettext and don't want to use GNU gettext.  */\n/* #undef HAVE_GETTEXT */\n\n/* Define if your locale.h file contains LC_MESSAGES.  */\n/* #undef HAVE_LC_MESSAGES */\n\n/* Define to the installation directory for locales.  */\n#define LOCALEDIR \"\"\n\n/* Define as 1 if you have the stpcpy function.  */\n/* #undef HAVE_STPCPY */\n\n/* Define if the closedir function returns void instead of int.  */\n/* #undef CLOSEDIR_VOID */\n\n/* Define to empty if the keyword does not work.  */\n/* #undef const */\n\n/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.\n   This function is required for alloca.c support on those systems.  */\n/* #undef CRAY_STACKSEG_END */\n\n/* Define for DGUX with <sys/dg_sys_info.h>.  */\n/* #undef DGUX */\n\n/* Define if the `getloadavg' function needs to be run setuid or setgid.  */\n/* #undef GETLOADAVG_PRIVILEGED */\n\n/* Define to `unsigned long' or `unsigned long long'\n   if <inttypes.h> doesn't define.  */\n#define uintmax_t unsigned long\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n/* #undef gid_t */\n\n/* Define if you have alloca, as a function or macro.  */\n#define HAVE_ALLOCA 1\n\n/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */\n/* #undef HAVE_ALLOCA_H */\n\n/* Define if you don't have vprintf but do have _doprnt.  */\n/* #undef HAVE_DOPRNT */\n\n/* Define if your system has a working fnmatch function.  */\n/* #undef HAVE_FNMATCH */\n\n/* Define if your system has its own `getloadavg' function.  */\n/* #undef HAVE_GETLOADAVG */\n\n/* Define if you have the getmntent function.  */\n/* #undef HAVE_GETMNTENT */\n\n/* Define if the `long double' type works.  */\n/* #undef HAVE_LONG_DOUBLE */\n\n/* Define if you support file names longer than 14 characters.  */\n#define HAVE_LONG_FILE_NAMES 1\n\n/* Define if you have a working `mmap' system call.  */\n/* #undef HAVE_MMAP */\n\n/* Define if system calls automatically restart after interruption\n   by a signal.  */\n/* #undef HAVE_RESTARTABLE_SYSCALLS */\n\n/* Define if your struct stat has st_blksize.  */\n/* #undef HAVE_ST_BLKSIZE */\n\n/* Define if your struct stat has st_blocks.  */\n/* #undef HAVE_ST_BLOCKS */\n\n/* Define if you have the strcoll function and it is properly defined.  */\n/* #undef HAVE_STRCOLL */\n\n/* Define if your struct stat has st_rdev.  */\n/* #undef HAVE_ST_RDEV */\n\n/* Define if you have the strftime function.  */\n/* #undef HAVE_STRFTIME */\n\n/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define if your struct tm has tm_zone.  */\n/* #undef HAVE_TM_ZONE */\n\n/* Define if you don't have tm_zone but do have the external array\n   tzname.  */\n/* #undef HAVE_TZNAME */\n\n/* Define if you have <unistd.h>.  */\n#ifdef __DECC\n#define HAVE_UNISTD_H 1\n#endif\n\n/* Define if utime(file, NULL) sets file's timestamp to the present.  */\n/* #undef HAVE_UTIME_NULL */\n\n/* Define if you have <vfork.h>.  */\n/* #undef HAVE_VFORK_H */\n\n/* Define if you have the vprintf function.  */\n#define HAVE_VPRINTF 1\n\n/* Define if you have the wait3 system call.  */\n/* #undef HAVE_WAIT3 */\n\n/* Define if on MINIX.  */\n/* #undef _MINIX */\n\n/* Define if your struct nlist has an n_un member.  */\n/* #undef NLIST_NAME_UNION */\n\n/* Define if you have <nlist.h>.  */\n/* #undef NLIST_STRUCT */\n\n/* Define if your C compiler doesn't accept -c and -o together.  */\n/* #undef NO_MINUS_C_MINUS_O */\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n/* I assume types.h is available for all 5.0 cc/cxx compilers */\n#if __DECC_VER < 50090000\n#define pid_t int\n#endif\n\n/* Define if the system does not provide POSIX.1 features except\n   with this defined.  */\n/* #undef _POSIX_1_SOURCE */\n\n/* Define if you need to in order for stat and other things to work.  */\n/* #undef _POSIX_SOURCE */\n\n/* Define as the return type of signal handlers (int or void).  */\n#define RETSIGTYPE void\n\n/* Define if the setvbuf function takes the buffering type as its second\n   argument and the buffer pointer as the third, as on System V\n   before release 3.  */\n/* #undef SETVBUF_REVERSED */\n\n/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at run-time.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown\n */\n/* #undef STACK_DIRECTION */\n\n/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly.  */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define if you have the ANSI C header files.  */\n/* #undef STDC_HEADERS */\n\n/* Define on System V Release 4.  */\n/* #undef SVR4 */\n\n/* Define if `sys_siglist' is declared by <signal.h>.  */\n/* #undef SYS_SIGLIST_DECLARED */\n\n/* Define to `int' if <sys/types.h> doesn't define.  */\n#if __DECC_VER < 50090000\n#define uid_t int\n#endif\n\n/* Define for Encore UMAX.  */\n/* #undef UMAX */\n\n/* Define for Encore UMAX 4.3 that has <inq_status/cpustats.h>\n   instead of <sys/cpustats.h>.  */\n/* #undef UMAX4_3 */\n\n/* Define vfork as fork if vfork does not work.  */\n/* #undef vfork */\n\n/* Name of this package (needed by automake) */\n#define PACKAGE \"make\"\n\n/* Version of this package (needed by automake) */\n#define VERSION \"3.81\"\n\n/* Define to the name of the SCCS `get' command.  */\n/* #undef SCCS_GET */\n\n/* Define this if the SCCS `get' command understands the `-G<file>' option.  */\n/* #undef SCCS_GET_MINUS_G */\n\n/* Define this to enable job server support in GNU make.  */\n/* #undef MAKE_JOBSERVER */\n\n/* Define to be the nanoseconds member of struct stat's st_mtim,\n   if it exists.  */\n/* #undef ST_MTIM_NSEC */\n\n/* Define this if the C library defines the variable `sys_siglist'.  */\n/* #undefine HAVE_SYS_SIGLIST */\n\n/* Define this if the C library defines the variable `_sys_siglist'.  */\n/* #undef HAVE__SYS_SIGLIST */\n\n/* Define this if you have the `union wait' type in <sys/wait.h>.  */\n/* #undef HAVE_UNION_WAIT */\n\n/* Define if you have the dup2 function.  */\n#define HAVE_DUP2 1\n\n/* Define if you have the getcwd function.  */\n#define HAVE_GETCWD 1\n\n/* Define if you have the getgroups function.  */\n/* #undef HAVE_GETGROUPS */\n\n/* Define if you have the gethostbyname function.  */\n/* #undef HAVE_GETHOSTBYNAME */\n\n/* Define if you have the gethostname function.  */\n/* #undef HAVE_GETHOSTNAME */\n\n/* Define if you have the getloadavg function.  */\n/* #undef HAVE_GETLOADAVG */\n\n/* Define if you have the memmove function.  */\n#define HAVE_MEMMOVE 1\n\n/* Define if you have the mktemp function.  */\n#define HAVE_MKTEMP 1\n\n/* Define if you have the psignal function.  */\n/* #undef HAVE_PSIGNAL */\n\n/* Define if you have the pstat_getdynamic function.  */\n/* #undef HAVE_PSTAT_GETDYNAMIC */\n\n/* Define if you have the setegid function.  */\n/* #undef HAVE_SETEGID */\n\n/* Define if you have the seteuid function.  */\n/* #undef HAVE_SETEUID */\n\n/* Define if you have the setlinebuf function.  */\n/* #undef HAVE_SETLINEBUF */\n\n/* Define if you have the setregid function.  */\n/* #undefine HAVE_SETREGID */\n\n/* Define if you have the setreuid function.  */\n/* #define HAVE_SETREUID */\n\n/* Define if you have the sigsetmask function.  */\n#define HAVE_SIGSETMASK 1\n\n/* Define if you have the socket function.  */\n/* #undef HAVE_SOCKET */\n\n/* Define if you have the strcasecmp function.  */\n/* #undef HAVE_STRCASECMP */\n\n/* Define if you have the strerror function.  */\n#define HAVE_STRERROR 1\n\n/* Define if you have the strsignal function.  */\n/* #undef HAVE_STRSIGNAL */\n\n/* Define if you have the wait3 function.  */\n/* #undef HAVE_WAIT3 */\n\n/* Define if you have the waitpid function.  */\n/* #undef HAVE_WAITPID */\n\n/* Define if you have the <dirent.h> header file.  */\n#define HAVE_DIRENT_H 1\n\n/* Define if you have the <fcntl.h> header file.  */\n#ifdef __DECC\n#define HAVE_FCNTL_H 1\n#endif\n\n/* Define if you have the <limits.h> header file.  */\n#define HAVE_LIMITS_H 1\n\n/* Define if you have the <mach/mach.h> header file.  */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define if you have the <memory.h> header file.  */\n/* #undef HAVE_MEMORY_H */\n\n/* Define if you have the <ndir.h> header file.  */\n/* #undef HAVE_NDIR_H */\n\n/* Define if your compiler conforms to the ANSI C standard. */\n#define HAVE_ANSI_COMPILER 1\n\n/* Define to 1 if you have the <stdarg.h> header file. */\n#define HAVE_STDARG_H 1\n\n/* Define if you have the <stdlib.h> header file.  */\n#define HAVE_STDLIB_H 1\n\n/* Define if you have the <string.h> header file.  */\n#define HAVE_STRING_H 1\n\n/* Define if you have the <sys/dir.h> header file.  */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define if you have the <sys/ndir.h> header file.  */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define if you have the <sys/param.h> header file.  */\n/* #undef HAVE_SYS_PARAM_H */\n\n/* Define if you have the <sys/timeb.h> header file.  */\n#ifndef __GNUC__\n#define HAVE_SYS_TIMEB_H 1\n#endif\n\n/* Define if you have the <sys/wait.h> header file.  */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define if you have the dgc library (-ldgc).  */\n/* #undef HAVE_LIBDGC */\n\n/* Define if you have the kstat library (-lkstat).  */\n/* #undef HAVE_LIBKSTAT *\n\n/* Define if you have the sun library (-lsun).  */\n/* #undef HAVE_LIBSUN */\n\n/* Use high resolution file timestamps if nonzero. */\n#define FILE_TIMESTAMP_HI_RES 0\n\n/* Define for case insensitve filenames */\n#define HAVE_CASE_INSENSITIVE_FS 1\n\n/* VMS specific, define it if you want to use case sensitive targets */\n/* #undef WANT_CASE_SENSITIVE_TARGETS */\n\n/* VMS specific, V7.0 has opendir() and friends, so it's undefined */\n/* If you want to use non-VMS code for opendir() etc. on V7.0 and greater\n   define the first or both macros AND change the compile command to get the\n   non-VMS versions linked: (prefix=(all,except=(opendir,...  */\n/* #undef HAVE_VMSDIR_H */\n/* #undef _DIRENT_HAVE_D_NAMLEN */\n\n/* On older systems without 7.0 backport of CRTL the first one is defined */\n#ifdef __CRTL_VER\n# if __CRTL_VER < 70000000\n#  define HAVE_VMSDIR_H 1\n# endif\n#else\n# if __VMS_VER < 70000000\n#  define HAVE_VMSDIR_H 1\n# endif\n#endif\n\n#if defined(HAVE_VMSDIR_H) && defined(HAVE_DIRENT_H)\n#undef HAVE_DIRENT_H\n#endif\n\n#define HAVE_STDLIB_H 1\n#define INCLUDEDIR \"sys$sysroot:[syslib]\"\n#define LIBDIR \"sys$sysroot:[syslib]\"\n\n/* Don't use RTL functions of OpenVMS */\n#ifdef __DECC\n#include <stdio.h>\n#include <unistd.h>\n#define getopt   gnu_getopt\n#define optarg   gnu_optarg\n#define optopt   gnu_optopt\n#define optind   gnu_optind\n#define opterr   gnu_opterr\n#define globfree gnu_globfree\n#define glob     gnu_glob\n#endif\n\n#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)\n#undef  PARAMS\n#define PARAMS(protos)  protos\n#else /* Not C++ or ANSI C.  */\n#undef  PARAMS\n#define PARAMS(protos)  ()\n#endif /* C++ or ANSI C.  */\n\n/* Define if using alloca.c.  */\n/* #undef C_ALLOCA */\n/* maybe this should be placed into make.h */\n#if\tdefined(__VAX) && defined(__DECC)\n#define alloca(n)\t__ALLOCA(n)\n#endif\n\n/* Build host information. */\n#define MAKE_HOST \"VMS\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config.h.W32",
    "content": "/* config.h.W32 -- hand-massaged config.h file for Windows builds       -*-C-*-\n\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Suppress some Visual C++ warnings.\n   Maybe after the code cleanup for ISO C we can remove some/all of these.  */\n#if _MSC_VER > 1000\n# pragma warning(disable:4100) /* unreferenced formal parameter */\n# pragma warning(disable:4102) /* unreferenced label */\n# pragma warning(disable:4127) /* conditional expression is constant */\n# pragma warning(disable:4131) /* uses old-style declarator */\n# pragma warning(disable:4702) /* unreachable code */\n#endif\n\n/* Define to 1 if the `closedir' function returns void instead of `int'. */\n/* #undef CLOSEDIR_VOID */\n\n/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP\n   systems. This function is required for `alloca.c' support on those systems.\n   */\n/* #undef CRAY_STACKSEG_END */\n\n/* Define to 1 if using `alloca.c'. */\n/* #undef C_ALLOCA */\n\n/* Define to 1 if using `getloadavg.c'. */\n/*#define C_GETLOADAVG 1*/\n\n/* Define to 1 for DGUX with <sys/dg_sys_info.h>. */\n/* #undef DGUX */\n\n/* Define to 1 if translation of program messages to the user's native\n   language is requested. */\n/* #undef ENABLE_NLS */\n\n/* Use high resolution file timestamps if nonzero. */\n#define FILE_TIMESTAMP_HI_RES 0\n\n/* Define to 1 if the `getloadavg' function needs to be run setuid or setgid.\n   */\n/* #undef GETLOADAVG_PRIVILEGED */\n\n/* Define to 1 if you have `alloca', as a function or macro. */\n#define HAVE_ALLOCA 1\n\n/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).\n   */\n/* #undef HAVE_ALLOCA_H */\n\n/* Define if your compiler conforms to the ANSI C standard. */\n#define HAVE_ANSI_COMPILER 1\n\n/* Define to 1 if you have the `bsd_signal' function. */\n/* #undef HAVE_BSD_SIGNAL */\n\n/* Use case insensitive file names */\n/* #undef HAVE_CASE_INSENSITIVE_FS */\n\n/* Define if you have the clock_gettime function. */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define if the GNU dcgettext() function is already present or preinstalled.\n   */\n/* #undef HAVE_DCGETTEXT */\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n   */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n/* #undef HAVE_DOPRNT */\n\n/* Use platform specific coding */\n#define HAVE_DOS_PATHS 1\n\n/* Define to 1 if you have the `dup2' function. */\n#define HAVE_DUP2 1\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `fdopen' function. */\n/*#define HAVE_FDOPEN 1*/\n\n/* Define to 1 if you have the `fork' function. */\n/* #undef HAVE_FORK */\n\n/* Define to 1 if you have the `getcwd' function.  */\n#define HAVE_GETCWD 1\n\n/* Define to 1 if you have the `getgroups' function. */\n/* #undef HAVE_GETGROUPS */\n\n/* Define to 1 if you have the `gethostbyname' function. */\n/* #undef HAVE_GETHOSTBYNAME */\n\n/* Define to 1 if you have the `gethostname' function. */\n/* #undef HAVE_GETHOSTNAME */\n\n/* Define to 1 if you have the `getloadavg' function. */\n/* #undef HAVE_GETLOADAVG */\n\n/* Define to 1 if you have the `getrlimit' function. */\n/* #undef HAVE_GETRLIMIT */\n\n/* Define if the GNU gettext() function is already present or preinstalled. */\n/* #undef HAVE_GETTEXT */\n\n/* Define if you have a standard gettimeofday function */\n/* #undef HAVE_GETTIMEOFDAY */\n\n/* Define if you have the iconv() function. */\n/* #undef HAVE_ICONV */\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n/*#define HAVE_INTTYPES_H 1*/\n\n/* Define to 1 if you have the `dgc' library (-ldgc). */\n/* #undef HAVE_LIBDGC */\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n/* #undef HAVE_LIBKSTAT */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <locale.h> header file. */\n/*#define HAVE_LOCALE_H 1*/\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the `mkstemp' function. */\n/* #undef HAVE_MKSTEMP */\n\n/* Define to 1 if you have the `mktemp' function. */\n#define HAVE_MKTEMP 1\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <nlist.h> header file. */\n/* #undef HAVE_NLIST_H */\n\n/* Define to 1 if you have the `pipe' function. */\n/* #undef HAVE_PIPE */\n\n/* Define to 1 if you have the `pstat_getdynamic' function. */\n/* #undef HAVE_PSTAT_GETDYNAMIC */\n\n/* Define to 1 if you have the `realpath' function. */\n/* #undef HAVE_REALPATH */\n\n/* Define if <signal.h> defines the SA_RESTART constant. */\n/* #undef HAVE_SA_RESTART */\n\n/* Define to 1 if you have the `setegid' function. */\n/* #undef HAVE_SETEGID */\n\n/* Define to 1 if you have the `seteuid' function. */\n/* #undef HAVE_SETEUID */\n\n/* Define to 1 if you have the `setlinebuf' function. */\n/* #undef HAVE_SETLINEBUF */\n\n/* Define to 1 if you have the `setlocale' function. */\n/*#define HAVE_SETLOCALE 1*/\n\n/* Define to 1 if you have the `setregid' function. */\n/* #undef HAVE_SETREGID */\n\n/* Define to 1 if you have the `setreuid' function. */\n/* #undef HAVE_SETREUID */\n\n/* Define to 1 if you have the `setrlimit' function. */\n/* #undef HAVE_SETRLIMIT */\n\n/* Define to 1 if you have the `setvbuf' function. */\n/*#define HAVE_SETVBUF 1 */\n\n/* Define to 1 if you have the `sigaction' function. */\n/* #undef HAVE_SIGACTION */\n\n/* Define to 1 if you have the `sigsetmask' function. */\n/* #undef HAVE_SIGSETMASK */\n\n/* Define to 1 if you have the `socket' function. */\n/* #undef HAVE_SOCKET */\n\n/* Define to 1 if you have the <stdarg.h> header file. */\n#define HAVE_STDARG_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n/*#define HAVE_STDINT_H 1*/\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strcasecmp' function. */\n/* #undef HAVE_STRCASECMP */\n\n/* Define to 1 if you have the `strchr' function. */\n#define HAVE_STRCHR 1\n\n/* Define to 1 if you have the `strcoll' function and it is properly defined.\n   */\n#define HAVE_STRCOLL 1\n\n/* Define to 1 if you have the `strdup' function. */\n/* #define HAVE_STRDUP 1*/\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n/* #define HAVE_STRINGS_H 1 */\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strsignal' function. */\n/* #undef HAVE_STRSIGNAL */\n\n/* Define to 1 if `n_un.n_name' is member of `struct nlist'. */\n/* #undef HAVE_STRUCT_NLIST_N_UN_N_NAME */\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n   */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n   */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n/* #define HAVE_SYS_PARAM_H 1 */\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n/* #undef HAVE_SYS_RESOURCE_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n/* #define HAVE_SYS_STAT_H 1 */\n\n/* Define to 1 if you have the <sys/timeb.h> header file. */\n/*#define HAVE_SYS_TIMEB_H 1*/\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n/*#define HAVE_SYS_TIME_H 1*/\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n/*#define HAVE_SYS_TYPES_H 1*/\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define this if you have the \\`union wait' type in <sys/wait.h>. */\n/* #undef HAVE_UNION_WAIT */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n/* #define HAVE_UNISTD_H 1*/\n\n/* Define to 1 if you have the <varargs.h> header file. */\n/* #undef HAVE_VARARGS_H */\n\n/* Define to 1 if you have the `vfork' function. */\n/* #undef HAVE_VFORK */\n\n/* Define to 1 if you have the <vfork.h> header file. */\n/* #undef HAVE_VFORK_H */\n\n/* Define to 1 if you have the `vprintf' function. */\n#define HAVE_VPRINTF 1\n\n\n/* Define to 1 if you have the `wait3' function. */\n/* #undef HAVE_WAIT3 */\n\n/* Define to 1 if you have the `waitpid' function. */\n/* #undef HAVE_WAITPID */\n\n/* Define to 1 if `fork' works. */\n/* #undef HAVE_WORKING_FORK */\n\n/* Define to 1 if `vfork' works. */\n/* #undef HAVE_WORKING_VFORK */\n\n/* Build host information. */\n#define MAKE_HOST \"Windows32\"\n\n/* Define this to enable job server support in GNU make. */\n/* #undef MAKE_JOBSERVER */\n\n/* Define to 1 if your `struct nlist' has an `n_un' member. Obsolete, depend\n   on `HAVE_STRUCT_NLIST_N_UN_N_NAME */\n/* #undef NLIST_NAME_UNION */\n\n/* Define if struct nlist.n_name is a pointer rather than an array. */\n/* #undef NLIST_STRUCT */\n\n/* Define to 1 if your C compiler doesn't accept -c and -o together. */\n/* #undef NO_MINUS_C_MINUS_O */\n\n/* Name of this package (needed by automake) */\n#define PACKAGE \"make\"\n\n/* Define to 1 if the C compiler supports function prototypes. */\n#define PROTOTYPES 1\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define to the name of the SCCS 'get' command. */\n#define SCCS_GET \"echo no sccs get\"\n\n/* Define this if the SCCS 'get' command understands the '-G<file>' option. */\n/* #undef SCCS_GET_MINUS_G */\n\n/* Define to 1 if the `setvbuf' function takes the buffering type as its\n   second argument and the buffer pointer as the third, as on System V before\n   release 3. */\n/* #undef SETVBUF_REVERSED */\n\n/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at run-time.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown */\n/* #undef STACK_DIRECTION */\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Define if struct stat contains a nanoseconds field */\n/* #undef ST_MTIM_NSEC */\n\n/* Define to 1 on System V Release 4. */\n/* #undef SVR4 */\n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n/* #define TIME_WITH_SYS_TIME 1 */\n\n/* Define to 1 for Encore UMAX. */\n/* #undef UMAX */\n\n/* Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of\n   <sys/cpustats.h>. */\n/* #undef UMAX4_3 */\n\n/* Version number of package */\n#define VERSION \"3.81\"\n\n/* Define if using the dmalloc debugging malloc package */\n/* #undef WITH_DMALLOC */\n\n/* Define to 1 if on AIX 3.\n   System headers sometimes define this.\n   We just want to avoid a redefinition error message.  */\n#ifndef _ALL_SOURCE\n/* # undef _ALL_SOURCE */\n#endif\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n/* #undef _FILE_OFFSET_BITS */\n\n/* Define for large files, on AIX-style hosts. */\n/* #undef _LARGE_FILES */\n\n/* Define to 1 if on MINIX. */\n/* #undef _MINIX */\n\n/* Define to 2 if the system does not provide POSIX.1 features except with\n   this defined. */\n/* #undef _POSIX_1_SOURCE */\n\n/* Define to 1 if you need to in order for `stat' and other things to work. */\n#define _POSIX_SOURCE 1\n\n/* Define like PROTOTYPES; this can be used by system headers. */\n/*#define __PROTOTYPES 1*/\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `int' if <sys/types.h> doesn't define. */\n#define gid_t int\n\n/* Define to `int' if <sys/types.h> does not define. */\n#define pid_t int\n\n/* Define to `int' if <sys/types.h> doesn't define. */\n#define uid_t int\n\n/* Define uintmax_t if not defined in <stdint.h> or <inttypes.h>. */\n#define uintmax_t unsigned long\n\n/* Define as `fork' if `vfork' does not work. */\n/*#define vfork fork*/\n\n/* Define to `unsigned long' or `unsigned long long'\n   if <inttypes.h> doesn't define.  */\n#define uintmax_t unsigned long\n\n/* Define if you support file names longer than 14 characters.  */\n#define HAVE_LONG_FILE_NAMES 1\n\n/* Define if your struct stat has st_rdev.  */\n#undef HAVE_ST_RDEV\n#define HAVE_ST_RDEV 1\n\n/* Define if you have the strftime function.  */\n#undef HAVE_STRFTIME\n#define HAVE_STRFTIME 1\n\n/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define if your struct tm has tm_zone.  */\n/* #undef HAVE_TM_ZONE */\n\n/* Define if you don't have tm_zone but do have the external array\n   tzname.  */\n#undef HAVE_TZNAME\n#define HAVE_TZNAME 1\n\n/* Define if utime(file, NULL) sets file's timestamp to the present.  */\n#undef HAVE_UTIME_NULL\n#define HAVE_UTIME_NULL 1\n\n/* Define to the installation directory for locales.  */\n#define LOCALEDIR \"\"\n\n/*\n * Refer to README.W32 for info on the following settings\n */\n\n\n/*\n * If you have a shell that does not grok 'sh -c quoted-command-line'\n * correctly, you need this setting. Please see below for specific\n * shell support.\n */\n/*#define BATCH_MODE_ONLY_SHELL 1 */\n\n/*\n * Define if you have the Cygnus \"Cygwin\" GNU Windows32 tool set.\n * Do NOT define BATCH_MODE_ONLY_SHELL if you define HAVE_CYGWIN_SHELL\n */\n/*#define HAVE_CYGWIN_SHELL 1 */\n\n/*\n * Define if you have the MKS tool set or shell. Do NOT define\n * BATCH_MODE_ONLY_SHELL if you define HAVE_MKS_SHELL\n */\n/*#define HAVE_MKS_SHELL 1 */\n\n/*\n * Enforce the mutual exclusivity restriction.\n */\n#ifdef HAVE_MKS_SHELL\n#undef BATCH_MODE_ONLY_SHELL\n#endif\n\n#ifdef HAVE_CYGWIN_SHELL\n#undef BATCH_MODE_ONLY_SHELL\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config.h.in",
    "content": "/* config.h.in.  Generated from configure.in by autoheader.  */\n\n/* Define to 1 if the `closedir' function returns void instead of `int'. */\n#undef CLOSEDIR_VOID\n\n/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP\n   systems. This function is required for `alloca.c' support on those systems.\n   */\n#undef CRAY_STACKSEG_END\n\n/* Define to 1 if using `alloca.c'. */\n#undef C_ALLOCA\n\n/* Define to 1 if using `getloadavg.c'. */\n#undef C_GETLOADAVG\n\n/* Define to 1 for DGUX with <sys/dg_sys_info.h>. */\n#undef DGUX\n\n/* Define to 1 if translation of program messages to the user's native\n   language is requested. */\n#undef ENABLE_NLS\n\n/* Use high resolution file timestamps if nonzero. */\n#undef FILE_TIMESTAMP_HI_RES\n\n/* Define to 1 if the `getloadavg' function needs to be run setuid or setgid.\n   */\n#undef GETLOADAVG_PRIVILEGED\n\n/* Define to 1 if you have `alloca', as a function or macro. */\n#undef HAVE_ALLOCA\n\n/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).\n   */\n#undef HAVE_ALLOCA_H\n\n/* Define if your compiler conforms to the ANSI C standard. */\n#undef HAVE_ANSI_COMPILER\n\n/* Define to 1 if you have the `atexit' function. */\n#undef HAVE_ATEXIT\n\n/* Define to 1 if you have the `bsd_signal' function. */\n#undef HAVE_BSD_SIGNAL\n\n/* Use case insensitive file names */\n#undef HAVE_CASE_INSENSITIVE_FS\n\n/* Define if you have the clock_gettime function. */\n#undef HAVE_CLOCK_GETTIME\n\n/* Define if the GNU dcgettext() function is already present or preinstalled.\n   */\n#undef HAVE_DCGETTEXT\n\n/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you\n   don't. */\n#undef HAVE_DECL_SYS_SIGLIST\n\n/* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you\n   don't. */\n#undef HAVE_DECL__SYS_SIGLIST\n\n/* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you\n   don't. */\n#undef HAVE_DECL___SYS_SIGLIST\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n   */\n#undef HAVE_DIRENT_H\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n#undef HAVE_DOPRNT\n\n/* Use platform specific coding */\n#undef HAVE_DOS_PATHS\n\n/* Define to 1 if you have the `dup2' function. */\n#undef HAVE_DUP2\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#undef HAVE_FCNTL_H\n\n/* Define to 1 if you have the `fdopen' function. */\n#undef HAVE_FDOPEN\n\n/* Define to 1 if you have the `fork' function. */\n#undef HAVE_FORK\n\n/* Define to 1 if you have the `getcwd' function. */\n#undef HAVE_GETCWD\n\n/* Define to 1 if you have the `getgroups' function. */\n#undef HAVE_GETGROUPS\n\n/* Define to 1 if you have the `gethostbyname' function. */\n#undef HAVE_GETHOSTBYNAME\n\n/* Define to 1 if you have the `gethostname' function. */\n#undef HAVE_GETHOSTNAME\n\n/* Define to 1 if you have the `getloadavg' function. */\n#undef HAVE_GETLOADAVG\n\n/* Define to 1 if you have the `getrlimit' function. */\n#undef HAVE_GETRLIMIT\n\n/* Define if the GNU gettext() function is already present or preinstalled. */\n#undef HAVE_GETTEXT\n\n/* Define if you have a standard gettimeofday function */\n#undef HAVE_GETTIMEOFDAY\n\n/* Define if you have the iconv() function. */\n#undef HAVE_ICONV\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#undef HAVE_INTTYPES_H\n\n/* Define to 1 if you have the `dgc' library (-ldgc). */\n#undef HAVE_LIBDGC\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n#undef HAVE_LIBKSTAT\n\n/* Define to 1 if you have the <limits.h> header file. */\n#undef HAVE_LIMITS_H\n\n/* Define to 1 if you have the <locale.h> header file. */\n#undef HAVE_LOCALE_H\n\n/* Define to 1 if you have the `lstat' function. */\n#undef HAVE_LSTAT\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n#undef HAVE_MACH_MACH_H\n\n/* Define to 1 if you have the `memcpy' function. */\n#undef HAVE_MEMCPY\n\n/* Define to 1 if you have the `memmove' function. */\n#undef HAVE_MEMMOVE\n\n/* Define to 1 if you have the <memory.h> header file. */\n#undef HAVE_MEMORY_H\n\n/* Define to 1 if you have the `mkstemp' function. */\n#undef HAVE_MKSTEMP\n\n/* Define to 1 if you have the `mktemp' function. */\n#undef HAVE_MKTEMP\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n#undef HAVE_NDIR_H\n\n/* Define to 1 if you have the <nlist.h> header file. */\n#undef HAVE_NLIST_H\n\n/* Define to 1 if you have the `pipe' function. */\n#undef HAVE_PIPE\n\n/* Define to 1 if you have the `pstat_getdynamic' function. */\n#undef HAVE_PSTAT_GETDYNAMIC\n\n/* Define to 1 if you have the `readlink' function. */\n#undef HAVE_READLINK\n\n/* Define to 1 if you have the `realpath' function. */\n#undef HAVE_REALPATH\n\n/* Define if <signal.h> defines the SA_RESTART constant. */\n#undef HAVE_SA_RESTART\n\n/* Define to 1 if you have the `setegid' function. */\n#undef HAVE_SETEGID\n\n/* Define to 1 if you have the `seteuid' function. */\n#undef HAVE_SETEUID\n\n/* Define to 1 if you have the `setlinebuf' function. */\n#undef HAVE_SETLINEBUF\n\n/* Define to 1 if you have the `setlocale' function. */\n#undef HAVE_SETLOCALE\n\n/* Define to 1 if you have the `setregid' function. */\n#undef HAVE_SETREGID\n\n/* Define to 1 if you have the `setreuid' function. */\n#undef HAVE_SETREUID\n\n/* Define to 1 if you have the `setrlimit' function. */\n#undef HAVE_SETRLIMIT\n\n/* Define to 1 if you have the `setvbuf' function. */\n#undef HAVE_SETVBUF\n\n/* Define to 1 if you have the `sigaction' function. */\n#undef HAVE_SIGACTION\n\n/* Define to 1 if you have the `sigsetmask' function. */\n#undef HAVE_SIGSETMASK\n\n/* Define to 1 if you have the `socket' function. */\n#undef HAVE_SOCKET\n\n/* Define to 1 if you have the <stdarg.h> header file. */\n#undef HAVE_STDARG_H\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#undef HAVE_STDINT_H\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#undef HAVE_STDLIB_H\n\n/* Define to 1 if you have the `strcasecmp' function. */\n#undef HAVE_STRCASECMP\n\n/* Define to 1 if you have the `strchr' function. */\n#undef HAVE_STRCHR\n\n/* Define to 1 if you have the `strcoll' function and it is properly defined.\n   */\n#undef HAVE_STRCOLL\n\n/* Define to 1 if you have the `strdup' function. */\n#undef HAVE_STRDUP\n\n/* Define to 1 if you have the `strerror' function. */\n#undef HAVE_STRERROR\n\n/* Define to 1 if you have the <strings.h> header file. */\n#undef HAVE_STRINGS_H\n\n/* Define to 1 if you have the <string.h> header file. */\n#undef HAVE_STRING_H\n\n/* Define to 1 if you have the `strsignal' function. */\n#undef HAVE_STRSIGNAL\n\n/* Define to 1 if `n_un.n_name' is a member of `struct nlist'. */\n#undef HAVE_STRUCT_NLIST_N_UN_N_NAME\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n   */\n#undef HAVE_SYS_DIR_H\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n   */\n#undef HAVE_SYS_NDIR_H\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n#undef HAVE_SYS_PARAM_H\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n#undef HAVE_SYS_RESOURCE_H\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#undef HAVE_SYS_STAT_H\n\n/* Define to 1 if you have the <sys/timeb.h> header file. */\n#undef HAVE_SYS_TIMEB_H\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#undef HAVE_SYS_TIME_H\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#undef HAVE_SYS_TYPES_H\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n#undef HAVE_SYS_WAIT_H\n\n/* Define this if you have the \\`union wait' type in <sys/wait.h>. */\n#undef HAVE_UNION_WAIT\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#undef HAVE_UNISTD_H\n\n/* Define to 1 if you have the <varargs.h> header file. */\n#undef HAVE_VARARGS_H\n\n/* Define to 1 if you have the `vfork' function. */\n#undef HAVE_VFORK\n\n/* Define to 1 if you have the <vfork.h> header file. */\n#undef HAVE_VFORK_H\n\n/* Define to 1 if you have the `vprintf' function. */\n#undef HAVE_VPRINTF\n\n/* Define to 1 if you have the `wait3' function. */\n#undef HAVE_WAIT3\n\n/* Define to 1 if you have the `waitpid' function. */\n#undef HAVE_WAITPID\n\n/* Define to 1 if `fork' works. */\n#undef HAVE_WORKING_FORK\n\n/* Define to 1 if `vfork' works. */\n#undef HAVE_WORKING_VFORK\n\n/* Build host information. */\n#undef MAKE_HOST\n\n/* Define this to enable job server support in GNU make. */\n#undef MAKE_JOBSERVER\n\n/* Define this to enable symbolic link timestamp checking. */\n#undef MAKE_SYMLINKS\n\n/* Define to 1 if your `struct nlist' has an `n_un' member. Obsolete, depend\n   on `HAVE_STRUCT_NLIST_N_UN_N_NAME */\n#undef NLIST_NAME_UNION\n\n/* Define if struct nlist.n_name is a pointer rather than an array. */\n#undef NLIST_STRUCT\n\n/* Define to 1 if your C compiler doesn't accept -c and -o together. */\n#undef NO_MINUS_C_MINUS_O\n\n/* Name of package */\n#undef PACKAGE\n\n/* Define to the address where bug reports for this package should be sent. */\n#undef PACKAGE_BUGREPORT\n\n/* Define to the full name of this package. */\n#undef PACKAGE_NAME\n\n/* Define to the full name and version of this package. */\n#undef PACKAGE_STRING\n\n/* Define to the one symbol short name of this package. */\n#undef PACKAGE_TARNAME\n\n/* Define to the home page for this package. */\n#undef PACKAGE_URL\n\n/* Define to the version of this package. */\n#undef PACKAGE_VERSION\n\n/* Define to 1 if the C compiler supports function prototypes. */\n#undef PROTOTYPES\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#undef RETSIGTYPE\n\n/* Define to the name of the SCCS 'get' command. */\n#undef SCCS_GET\n\n/* Define this if the SCCS 'get' command understands the '-G<file>' option. */\n#undef SCCS_GET_MINUS_G\n\n/* If using the C implementation of alloca, define if you know the\n   direction of stack growth for your system; otherwise it will be\n   automatically deduced at runtime.\n\tSTACK_DIRECTION > 0 => grows toward higher addresses\n\tSTACK_DIRECTION < 0 => grows toward lower addresses\n\tSTACK_DIRECTION = 0 => direction of growth unknown */\n#undef STACK_DIRECTION\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n#undef STAT_MACROS_BROKEN\n\n/* Define to 1 if you have the ANSI C header files. */\n#undef STDC_HEADERS\n\n/* Define if struct stat contains a nanoseconds field */\n#undef ST_MTIM_NSEC\n\n/* Define to 1 on System V Release 4. */\n#undef SVR4\n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n#undef TIME_WITH_SYS_TIME\n\n/* Define to 1 for Encore UMAX. */\n#undef UMAX\n\n/* Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of\n   <sys/cpustats.h>. */\n#undef UMAX4_3\n\n/* Enable extensions on AIX 3, Interix.  */\n#ifndef _ALL_SOURCE\n# undef _ALL_SOURCE\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# undef _GNU_SOURCE\n#endif\n/* Enable threading extensions on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# undef _POSIX_PTHREAD_SEMANTICS\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# undef _TANDEM_SOURCE\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# undef __EXTENSIONS__\n#endif\n\n\n/* Version number of package */\n#undef VERSION\n\n/* Use platform specific coding */\n#undef WINDOWS32\n\n/* Define if using the dmalloc debugging malloc package */\n#undef WITH_DMALLOC\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n#undef _FILE_OFFSET_BITS\n\n/* Define for large files, on AIX-style hosts. */\n#undef _LARGE_FILES\n\n/* Define to 1 if on MINIX. */\n#undef _MINIX\n\n/* Define to 2 if the system does not provide POSIX.1 features except with\n   this defined. */\n#undef _POSIX_1_SOURCE\n\n/* Define to 1 if you need to in order for `stat' and other things to work. */\n#undef _POSIX_SOURCE\n\n/* Define like PROTOTYPES; this can be used by system headers. */\n#undef __PROTOTYPES\n\n/* Define to empty if `const' does not conform to ANSI C. */\n#undef const\n\n/* Define to `int' if <sys/types.h> doesn't define. */\n#undef gid_t\n\n/* Define to `int' if <sys/types.h> does not define. */\n#undef pid_t\n\n/* Define to `int' if <sys/types.h> doesn't define. */\n#undef uid_t\n\n/* Define uintmax_t if not defined in <stdint.h> or <inttypes.h>. */\n#undef uintmax_t\n\n/* Define as `fork' if `vfork' does not work. */\n#undef vfork\n"
  },
  {
    "path": "sources/host-tools/make-3.81/config.log",
    "content": "This file contains any messages produced by compilers while\nrunning configure, to aid debugging if configure makes a mistake.\n\nIt was created by GNU make configure 3.81, which was\ngenerated by GNU Autoconf 2.59.  Invocation command line was\n\n  $ ./configure --disable-nls --host=i686-w64-mingw32\n\n## --------- ##\n## Platform. ##\n## --------- ##\n\nhostname = digit-glaptop\nuname -m = x86_64\nuname -r = 2.6.32-31-generic\nuname -s = Linux\nuname -v = #61-Ubuntu SMP Fri Apr 8 18:25:51 UTC 2011\n\n/usr/bin/uname -p = unknown\n/bin/uname -X     = unknown\n\n/bin/arch              = unknown\n/usr/bin/arch -k       = unknown\n/usr/convex/getsysinfo = unknown\nhostinfo               = unknown\n/bin/machine           = unknown\n/usr/bin/oslevel       = unknown\n/bin/universe          = unknown\n\nPATH: /usr/local/sbin\nPATH: /usr/local/bin\nPATH: /usr/sbin\nPATH: /usr/bin\nPATH: /sbin\nPATH: /bin\n\n\n## ----------- ##\n## Core tests. ##\n## ----------- ##\n\nconfigure:1385: checking for a BSD-compatible install\nconfigure:1440: result: /usr/bin/install -c\nconfigure:1451: checking whether build environment is sane\nconfigure:1494: result: yes\nconfigure:1559: checking for gawk\nconfigure:1575: found /usr/bin/gawk\nconfigure:1585: result: gawk\nconfigure:1595: checking whether make sets $(MAKE)\nconfigure:1615: result: yes\nconfigure:1691: checking for i686-w64-mingw32-strip\nconfigure:1720: result: no\nconfigure:1729: checking for strip\nconfigure:1745: found /usr/bin/strip\nconfigure:1756: result: strip\nconfigure:1793: checking for i686-w64-mingw32-gcc\nconfigure:1822: result: no\nconfigure:1831: checking for gcc\nconfigure:1847: found /usr/bin/gcc\nconfigure:1857: result: gcc\nconfigure:2101: checking for C compiler version\nconfigure:2104: gcc --version </dev/null >&5\ngcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3\nCopyright (C) 2009 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\nconfigure:2107: $? = 0\nconfigure:2109: gcc -v </dev/null >&5\nUsing built-in specs.\nTarget: x86_64-linux-gnu\nConfigured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu\nThread model: posix\ngcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) \nconfigure:2112: $? = 0\nconfigure:2114: gcc -V </dev/null >&5\ngcc: '-V' option must have argument\nconfigure:2117: $? = 1\nconfigure:2140: checking for C compiler default output file name\nconfigure:2143: gcc    conftest.c  >&5\nconfigure:2146: $? = 0\nconfigure:2192: result: a.out\nconfigure:2197: checking whether the C compiler works\nconfigure:2203: ./a.out\nconfigure:2206: $? = 0\nconfigure:2223: result: yes\nconfigure:2230: checking whether we are cross compiling\nconfigure:2232: result: no\nconfigure:2235: checking for suffix of executables\nconfigure:2237: gcc -o conftest    conftest.c  >&5\nconfigure:2240: $? = 0\nconfigure:2265: result: \nconfigure:2271: checking for suffix of object files\nconfigure:2292: gcc -c   conftest.c >&5\nconfigure:2295: $? = 0\nconfigure:2317: result: o\nconfigure:2321: checking whether we are using the GNU C compiler\nconfigure:2345: gcc -c   conftest.c >&5\nconfigure:2351: $? = 0\nconfigure:2354: test -z \t\t\t || test ! -s conftest.err\nconfigure:2357: $? = 0\nconfigure:2360: test -s conftest.o\nconfigure:2363: $? = 0\nconfigure:2376: result: yes\nconfigure:2382: checking whether gcc accepts -g\nconfigure:2403: gcc -c -g  conftest.c >&5\nconfigure:2409: $? = 0\nconfigure:2412: test -z \t\t\t || test ! -s conftest.err\nconfigure:2415: $? = 0\nconfigure:2418: test -s conftest.o\nconfigure:2421: $? = 0\nconfigure:2432: result: yes\nconfigure:2449: checking for gcc option to accept ANSI C\nconfigure:2519: gcc  -c -g -O2  conftest.c >&5\nconfigure:2525: $? = 0\nconfigure:2528: test -z \t\t\t || test ! -s conftest.err\nconfigure:2531: $? = 0\nconfigure:2534: test -s conftest.o\nconfigure:2537: $? = 0\nconfigure:2555: result: none needed\nconfigure:2573: gcc -c -g -O2  conftest.c >&5\nconftest.c:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'me'\nconfigure:2579: $? = 1\nconfigure: failed program was:\n| #ifndef __cplusplus\n|   choke me\n| #endif\nconfigure:2720: checking for style of include used by make\nconfigure:2748: result: GNU\nconfigure:2776: checking dependency style of gcc\nconfigure:2866: result: gcc3\nconfigure:2896: checking for a BSD-compatible install\nconfigure:2951: result: /usr/bin/install -c\nconfigure:2965: checking for i686-w64-mingw32-ranlib\nconfigure:2994: result: no\nconfigure:3003: checking for ranlib\nconfigure:3019: found /usr/bin/ranlib\nconfigure:3030: result: ranlib\nconfigure:3047: checking how to run the C preprocessor\nconfigure:3082: gcc -E  conftest.c\nconfigure:3088: $? = 0\nconfigure:3120: gcc -E  conftest.c\nconftest.c:11:28: error: ac_nonexistent.h: No such file or directory\nconfigure:3126: $? = 1\nconfigure: failed program was:\n| /* confdefs.h.  */\n| \n| #define PACKAGE_NAME \"GNU make\"\n| #define PACKAGE_TARNAME \"make\"\n| #define PACKAGE_VERSION \"3.81\"\n| #define PACKAGE_STRING \"GNU make 3.81\"\n| #define PACKAGE_BUGREPORT \"bug-make@gnu.org\"\n| #define PACKAGE \"make\"\n| #define VERSION \"3.81\"\n| /* end confdefs.h.  */\n| #include <ac_nonexistent.h>\nconfigure:3165: result: gcc -E\nconfigure:3189: gcc -E  conftest.c\nconfigure:3195: $? = 0\nconfigure:3227: gcc -E  conftest.c\nconftest.c:11:28: error: ac_nonexistent.h: No such file or directory\nconfigure:3233: $? = 1\nconfigure: failed program was:\n| /* confdefs.h.  */\n| \n| #define PACKAGE_NAME \"GNU make\"\n| #define PACKAGE_TARNAME \"make\"\n| #define PACKAGE_VERSION \"3.81\"\n| #define PACKAGE_STRING \"GNU make 3.81\"\n| #define PACKAGE_BUGREPORT \"bug-make@gnu.org\"\n| #define PACKAGE \"make\"\n| #define VERSION \"3.81\"\n| /* end confdefs.h.  */\n| #include <ac_nonexistent.h>\nconfigure:3278: checking for ar\nconfigure:3294: found /usr/bin/ar\nconfigure:3305: result: ar\nconfigure:3315: checking for perl\nconfigure:3331: found /usr/bin/perl\nconfigure:3342: result: perl\nconfigure:3357: checking build system type\nconfigure:3375: result: x86_64-unknown-linux-gnu\nconfigure:3383: checking host system type\nconfigure:3397: result: i686-w64-mingw32\nconfigure:3407: checking for egrep\nconfigure:3417: result: grep -E\nconfigure:3423: checking for AIX\nconfigure:3445: result: no\nconfigure:3451: checking for library containing strerror\nconfigure:3481: gcc -o conftest -g -O2   conftest.c  >&5\nconfigure:3487: $? = 0\nconfigure:3490: test -z \t\t\t || test ! -s conftest.err\nconfigure:3493: $? = 0\nconfigure:3496: test -s conftest\nconfigure:3499: $? = 0\nconfigure:3568: result: none required\nconfigure:3575: checking for ANSI C header files\nconfigure:3600: gcc -c -g -O2  conftest.c >&5\nconfigure:3606: $? = 0\nconfigure:3609: test -z \t\t\t || test ! -s conftest.err\nconfigure:3612: $? = 0\nconfigure:3615: test -s conftest.o\nconfigure:3618: $? = 0\nconfigure:3707: gcc -o conftest -g -O2   conftest.c  >&5\nconftest.c: In function 'main':\nconftest.c:28: warning: incompatible implicit declaration of built-in function 'exit'\nconfigure:3710: $? = 0\nconfigure:3712: ./conftest\nconfigure:3715: $? = 0\nconfigure:3730: result: yes\nconfigure:3754: checking for sys/types.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for sys/stat.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for stdlib.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for string.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for memory.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for strings.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for inttypes.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for stdint.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3754: checking for unistd.h\nconfigure:3770: gcc -c -g -O2  conftest.c >&5\nconfigure:3776: $? = 0\nconfigure:3779: test -z \t\t\t || test ! -s conftest.err\nconfigure:3782: $? = 0\nconfigure:3785: test -s conftest.o\nconfigure:3788: $? = 0\nconfigure:3799: result: yes\nconfigure:3821: checking minix/config.h usability\nconfigure:3833: gcc -c -g -O2  conftest.c >&5\n\n## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\n\nac_cv_build=x86_64-unknown-linux-gnu\nac_cv_build_alias=x86_64-unknown-linux-gnu\nac_cv_c_compiler_gnu=yes\nac_cv_env_CC_set=\nac_cv_env_CC_value=\nac_cv_env_CFLAGS_set=\nac_cv_env_CFLAGS_value=\nac_cv_env_CPPFLAGS_set=\nac_cv_env_CPPFLAGS_value=\nac_cv_env_CPP_set=\nac_cv_env_CPP_value=\nac_cv_env_LDFLAGS_set=\nac_cv_env_LDFLAGS_value=\nac_cv_env_build_alias_set=\nac_cv_env_build_alias_value=\nac_cv_env_host_alias_set=set\nac_cv_env_host_alias_value=i686-w64-mingw32\nac_cv_env_target_alias_set=\nac_cv_env_target_alias_value=\nac_cv_exeext=\nac_cv_header_inttypes_h=yes\nac_cv_header_memory_h=yes\nac_cv_header_stdc=yes\nac_cv_header_stdint_h=yes\nac_cv_header_stdlib_h=yes\nac_cv_header_string_h=yes\nac_cv_header_strings_h=yes\nac_cv_header_sys_stat_h=yes\nac_cv_header_sys_types_h=yes\nac_cv_header_unistd_h=yes\nac_cv_host=i686-w64-mingw32\nac_cv_host_alias=i686-w64-mingw32\nac_cv_objext=o\nac_cv_path_install='/usr/bin/install -c'\nac_cv_prog_AR=ar\nac_cv_prog_AWK=gawk\nac_cv_prog_CPP='gcc -E'\nac_cv_prog_PERL=perl\nac_cv_prog_ac_ct_CC=gcc\nac_cv_prog_ac_ct_RANLIB=ranlib\nac_cv_prog_ac_ct_STRIP=strip\nac_cv_prog_cc_g=yes\nac_cv_prog_cc_stdc=\nac_cv_prog_egrep='grep -E'\nac_cv_prog_make_make_set=yes\nac_cv_search_strerror='none required'\nam_cv_CC_dependencies_compiler_type=gcc3\n\n## ----------------- ##\n## Output variables. ##\n## ----------------- ##\n\nACLOCAL='${SHELL} /home/digit/sources/make-3.81/config/missing --run aclocal-1.9'\nALLOCA=''\nAMDEPBACKSLASH='\\'\nAMDEP_FALSE='#'\nAMDEP_TRUE=''\nAMTAR='${SHELL} /home/digit/sources/make-3.81/config/missing --run tar'\nANSI2KNR=''\nAR='ar'\nAUTOCONF='${SHELL} /home/digit/sources/make-3.81/config/missing --run autoconf'\nAUTOHEADER='${SHELL} /home/digit/sources/make-3.81/config/missing --run autoheader'\nAUTOMAKE='${SHELL} /home/digit/sources/make-3.81/config/missing --run automake-1.9'\nAWK='gawk'\nCC='gcc'\nCCDEPMODE='depmode=gcc3'\nCFLAGS='-g -O2'\nCPP='gcc -E'\nCPPFLAGS=''\nCYGPATH_W='echo'\nDEFS=''\nDEPDIR='.deps'\nECHO_C=''\nECHO_N='-n'\nECHO_T=''\nEGREP='grep -E'\nEXEEXT=''\nGETLOADAVG_LIBS=''\nGLOBINC=''\nGLOBLIB=''\nGMSGFMT=''\nINSTALL_DATA='${INSTALL} -m 644'\nINSTALL_PROGRAM='${INSTALL}'\nINSTALL_SCRIPT='${INSTALL}'\nINSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'\nINTLLIBS=''\nKMEM_GROUP=''\nLDFLAGS=''\nLIBICONV=''\nLIBINTL=''\nLIBOBJS=''\nLIBS=''\nLTLIBICONV=''\nLTLIBINTL=''\nLTLIBOBJS=''\nMAKEINFO='${SHELL} /home/digit/sources/make-3.81/config/missing --run makeinfo'\nMAKE_HOST=''\nMKINSTALLDIRS=''\nMSGFMT=''\nMSGMERGE=''\nNEED_SETGID=''\nOBJEXT='o'\nPACKAGE='make'\nPACKAGE_BUGREPORT='bug-make@gnu.org'\nPACKAGE_NAME='GNU make'\nPACKAGE_STRING='GNU make 3.81'\nPACKAGE_TARNAME='make'\nPACKAGE_VERSION='3.81'\nPATH_SEPARATOR=':'\nPERL='perl'\nPOSUB=''\nRANLIB='ranlib'\nREMOTE=''\nSET_MAKE=''\nSHELL='/bin/sh'\nSTRIP='strip'\nU=''\nUSE_CUSTOMS_FALSE=''\nUSE_CUSTOMS_TRUE=''\nUSE_LOCAL_GLOB_FALSE=''\nUSE_LOCAL_GLOB_TRUE=''\nUSE_NLS=''\nVERSION='3.81'\nWINDOWSENV_FALSE=''\nWINDOWSENV_TRUE=''\nXGETTEXT=''\nac_ct_CC='gcc'\nac_ct_RANLIB='ranlib'\nac_ct_STRIP='strip'\nam__fastdepCC_FALSE='#'\nam__fastdepCC_TRUE=''\nam__include='include'\nam__leading_dot='.'\nam__quote=''\nam__tar='${AMTAR} chof - \"$$tardir\"'\nam__untar='${AMTAR} xf -'\nbindir='${exec_prefix}/bin'\nbuild='x86_64-unknown-linux-gnu'\nbuild_alias=''\nbuild_cpu='x86_64'\nbuild_os='linux-gnu'\nbuild_vendor='unknown'\ndatadir='${prefix}/share'\nexec_prefix='NONE'\nhost='i686-w64-mingw32'\nhost_alias='i686-w64-mingw32'\nhost_cpu='i686'\nhost_os='mingw32'\nhost_vendor='w64'\nincludedir='${prefix}/include'\ninfodir='${prefix}/info'\ninstall_sh='/home/digit/sources/make-3.81/config/install-sh'\nlibdir='${exec_prefix}/lib'\nlibexecdir='${exec_prefix}/libexec'\nlocalstatedir='${prefix}/var'\nmandir='${prefix}/man'\nmkdir_p='mkdir -p --'\noldincludedir='/usr/include'\nprefix='NONE'\nprogram_transform_name='s,x,x,'\nsbindir='${exec_prefix}/sbin'\nsharedstatedir='${prefix}/com'\nsysconfdir='${prefix}/etc'\ntarget_alias=''\n\n## ------------- ##\n## Output files. ##\n## ------------- ##\n\nMAINT_MAKEFILE=''\n\n## ----------- ##\n## confdefs.h. ##\n## ----------- ##\n\n#define HAVE_INTTYPES_H 1\n#define HAVE_MEMORY_H 1\n#define HAVE_STDINT_H 1\n#define HAVE_STDLIB_H 1\n#define HAVE_STRINGS_H 1\n#define HAVE_STRING_H 1\n#define HAVE_SYS_STAT_H 1\n#define HAVE_SYS_TYPES_H 1\n#define HAVE_UNISTD_H 1\n#define PACKAGE \"make\"\n#define PACKAGE_BUGREPORT \"bug-make@gnu.org\"\n#define PACKAGE_NAME \"GNU make\"\n#define PACKAGE_STRING \"GNU make 3.81\"\n#define PACKAGE_TARNAME \"make\"\n#define PACKAGE_VERSION \"3.81\"\n#define STDC_HEADERS 1\n#define VERSION \"3.81\"\n\nconfigure: caught signal 2\nconfigure: exit 1\n"
  },
  {
    "path": "sources/host-tools/make-3.81/configh.dos",
    "content": "/* configh.dos -- hand-massaged config.h file for MS-DOS builds         -*-C-*-\n\nCopyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,\n2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Many things are defined already by a system header.  */\n#include <sys/config.h>\n\n#if __DJGPP__ > 2 || __DJGPP_MINOR__ > 1\n\n/* Define if `sys_siglist' is declared by <signal.h>.  */\n# define SYS_SIGLIST_DECLARED 1\n\n/* Define this if the C library defines the variable `_sys_siglist'.  */\n# define HAVE_SYS_SIGLIST 1\n\n#else\n\n/* Define NSIG.  */\n# define NSIG SIGMAX\n\n#endif\n\n/* Use high resolution file timestamps if nonzero. */\n#define FILE_TIMESTAMP_HI_RES 0\n\n/* Define to 1 if you have `alloca', as a function or macro. */\n#define HAVE_ALLOCA 1\n\n/* Define if you have the fdopen function.  */\n#define HAVE_FDOPEN 1\n\n/* Define to 1 if you have the `getgroups' function. */\n#define HAVE_GETGROUPS 1\n\n/* Define if you have the <memory.h> header file.  */\n#define HAVE_MEMORY_H 1\n\n/* Define if you have the mkstemp function.  */\n#define HAVE_MKSTEMP 1\n\n/* Define to 1 if you have the `mktemp' function. */\n#define HAVE_MKTEMP 1\n\n/* Define to 1 if you have the `setlinebuf' function. */\n#define HAVE_SETLINEBUF 1\n\n/* Define to 1 if you have the `setvbuf' function. */\n#define HAVE_SETVBUF 1\n\n#define SCCS_GET \"get\"\n\n/* Define to `unsigned long' or `unsigned long long'\n   if <inttypes.h> doesn't define.  */\n#define uintmax_t unsigned long long\n\n/* Define the type of the first arg to select().  */\n#define fd_set_size_t int\n\n/* Define if you have the select function.  */\n#define HAVE_SELECT 1\n\n/* Define if your compiler conforms to the ANSI C standard. */\n#define HAVE_ANSI_COMPILER 1\n\n/* Define to 1 if you have the <stdarg.h> header file. */\n#define HAVE_STDARG_H 1\n\n/* Define if you have the vprintf library function.  */\n#undef HAVE_VPRINTF\n#define HAVE_VPRINTF 1\n\n/* Name of the package */\n#define PACKAGE \"make\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"bug-make@gnu.org\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"GNU make\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"GNU make 3.81\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"make\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"3.81\"\n\n/* Define to 1 if the C compiler supports function prototypes. */\n#define PROTOTYPES 1\n\n/* Define to 1 if `sys_siglist' is declared by <signal.h> or <unistd.h>. */\n#define SYS_SIGLIST_DECLARED 1\n\n/* Version number of package */\n#define VERSION \"3.81\"\n\n/* Build host information. */\n#define MAKE_HOST \"i386-pc-msdosdjgpp\"\n\n/* Grok DOS paths (drive specs and backslash path element separators) */\n#define HAVE_DOS_PATHS\n"
  },
  {
    "path": "sources/host-tools/make-3.81/configure",
    "content": "#! /bin/sh\n# From configure.in Id: configure.in,v 1.142 2006/04/01 06:36:40 psmith Exp .\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.65 for GNU make 3.81.\n#\n# Report bugs to <bug-make@gnu.org>.\n#\n#\n# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,\n# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,\n# Inc.\n#\n#\n# This configure script is free software; the Free Software Foundation\n# gives unlimited permission to copy, distribute and modify it.\n## -------------------- ##\n## M4sh Initialization. ##\n## -------------------- ##\n\n# Be more Bourne compatible\nDUALCASE=1; export DUALCASE # for MKS sh\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in #(\n  *posix*) :\n    set -o posix ;; #(\n  *) :\n     ;;\nesac\nfi\n\n\nas_nl='\n'\nexport as_nl\n# Printing a long string crashes Solaris 7 /usr/bin/printf.\nas_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo\n# Prefer a ksh shell builtin over an external printf program on Solaris,\n# but without wasting forks for bash or zsh.\nif test -z \"$BASH_VERSION$ZSH_VERSION\" \\\n    && (test \"X`print -r -- $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='print -r --'\n  as_echo_n='print -rn --'\nelif (test \"X`printf %s $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='printf %s\\n'\n  as_echo_n='printf %s'\nelse\n  if test \"X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`\" = \"X-n $as_echo\"; then\n    as_echo_body='eval /usr/ucb/echo -n \"$1$as_nl\"'\n    as_echo_n='/usr/ucb/echo -n'\n  else\n    as_echo_body='eval expr \"X$1\" : \"X\\\\(.*\\\\)\"'\n    as_echo_n_body='eval\n      arg=$1;\n      case $arg in #(\n      *\"$as_nl\"*)\n\texpr \"X$arg\" : \"X\\\\(.*\\\\)$as_nl\";\n\targ=`expr \"X$arg\" : \".*$as_nl\\\\(.*\\\\)\"`;;\n      esac;\n      expr \"X$arg\" : \"X\\\\(.*\\\\)\" | tr -d \"$as_nl\"\n    '\n    export as_echo_n_body\n    as_echo_n='sh -c $as_echo_n_body as_echo'\n  fi\n  export as_echo_body\n  as_echo='sh -c $as_echo_body as_echo'\nfi\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  PATH_SEPARATOR=:\n  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {\n    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||\n      PATH_SEPARATOR=';'\n  }\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in #((\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\n  done\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  $as_echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  exit 1\nfi\n\n# Unset variables that we do not need and which cause bugs (e.g. in\n# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the \"|| exit 1\"\n# suppresses any \"Segmentation fault\" message there.  '((' could\n# trigger a bug in pdksh 5.2.14.\nfor as_var in BASH_ENV ENV MAIL MAILPATH\ndo eval test x\\${$as_var+set} = xset \\\n  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nLC_ALL=C\nexport LC_ALL\nLANGUAGE=C\nexport LANGUAGE\n\n# CDPATH.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test \"x$CONFIG_SHELL\" = x; then\n  as_bourne_compatible=\"if test -n \\\"\\${ZSH_VERSION+set}\\\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on \\${1+\\\"\\$@\\\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '\\${1+\\\"\\$@\\\"}'='\\\"\\$@\\\"'\n  setopt NO_GLOB_SUBST\nelse\n  case \\`(set -o) 2>/dev/null\\` in #(\n  *posix*) :\n    set -o posix ;; #(\n  *) :\n     ;;\nesac\nfi\n\"\n  as_required=\"as_fn_return () { (exit \\$1); }\nas_fn_success () { as_fn_return 0; }\nas_fn_failure () { as_fn_return 1; }\nas_fn_ret_success () { return 0; }\nas_fn_ret_failure () { return 1; }\n\nexitcode=0\nas_fn_success || { exitcode=1; echo as_fn_success failed.; }\nas_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }\nas_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }\nas_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }\nif ( set x; as_fn_ret_success y && test x = \\\"\\$1\\\" ); then :\n\nelse\n  exitcode=1; echo positional parameters were not saved.\nfi\ntest x\\$exitcode = x0 || exit 1\"\n  as_suggested=\"  as_lineno_1=\";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested\" as_lineno_1a=\\$LINENO\n  as_lineno_2=\";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested\" as_lineno_2a=\\$LINENO\n  eval 'test \\\"x\\$as_lineno_1'\\$as_run'\\\" != \\\"x\\$as_lineno_2'\\$as_run'\\\" &&\n  test \\\"x\\`expr \\$as_lineno_1'\\$as_run' + 1\\`\\\" = \\\"x\\$as_lineno_2'\\$as_run'\\\"' || exit 1\ntest \\$(( 1 + 1 )) = 2 || exit 1\"\n  if (eval \"$as_required\") 2>/dev/null; then :\n  as_have_required=yes\nelse\n  as_have_required=no\nfi\n  if test x$as_have_required = xyes && (eval \"$as_suggested\") 2>/dev/null; then :\n\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nas_found=false\nfor as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  as_found=:\n  case $as_dir in #(\n\t /*)\n\t   for as_base in sh bash ksh sh5; do\n\t     # Try only shells that exist, to save several forks.\n\t     as_shell=$as_dir/$as_base\n\t     if { test -f \"$as_shell\" || test -f \"$as_shell.exe\"; } &&\n\t\t    { $as_echo \"$as_bourne_compatible\"\"$as_required\" | as_run=a \"$as_shell\"; } 2>/dev/null; then :\n  CONFIG_SHELL=$as_shell as_have_required=yes\n\t\t   if { $as_echo \"$as_bourne_compatible\"\"$as_suggested\" | as_run=a \"$as_shell\"; } 2>/dev/null; then :\n  break 2\nfi\nfi\n\t   done;;\n       esac\n  as_found=false\ndone\n$as_found || { if { test -f \"$SHELL\" || test -f \"$SHELL.exe\"; } &&\n\t      { $as_echo \"$as_bourne_compatible\"\"$as_required\" | as_run=a \"$SHELL\"; } 2>/dev/null; then :\n  CONFIG_SHELL=$SHELL as_have_required=yes\nfi; }\nIFS=$as_save_IFS\n\n\n      if test \"x$CONFIG_SHELL\" != x; then :\n  # We cannot yet assume a decent shell, so we have to provide a\n\t# neutralization value for shells without unset; and this also\n\t# works around shells that cannot unset nonexistent variables.\n\tBASH_ENV=/dev/null\n\tENV=/dev/null\n\t(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\n\texport CONFIG_SHELL\n\texec \"$CONFIG_SHELL\" \"$as_myself\" ${1+\"$@\"}\nfi\n\n    if test x$as_have_required = xno; then :\n  $as_echo \"$0: This script requires a shell more modern than all\"\n  $as_echo \"$0: the shells that I found on your system.\"\n  if test x${ZSH_VERSION+set} = xset ; then\n    $as_echo \"$0: In particular, zsh $ZSH_VERSION has bugs and should\"\n    $as_echo \"$0: be upgraded to zsh 4.3.4 or later.\"\n  else\n    $as_echo \"$0: Please tell bug-autoconf@gnu.org and bug-make@gnu.org\n$0: about your system, including any error possibly output\n$0: before this message. Then install a modern shell, or\n$0: manually run the script under such a shell if you do\n$0: have one.\"\n  fi\n  exit 1\nfi\nfi\nfi\nSHELL=${CONFIG_SHELL-/bin/sh}\nexport SHELL\n# Unset more variables known to interfere with behavior of common tools.\nCLICOLOR_FORCE= GREP_OPTIONS=\nunset CLICOLOR_FORCE GREP_OPTIONS\n\n## --------------------- ##\n## M4sh Shell Functions. ##\n## --------------------- ##\n# as_fn_unset VAR\n# ---------------\n# Portably unset VAR.\nas_fn_unset ()\n{\n  { eval $1=; unset $1;}\n}\nas_unset=as_fn_unset\n\n# as_fn_set_status STATUS\n# -----------------------\n# Set $? to STATUS, without forking.\nas_fn_set_status ()\n{\n  return $1\n} # as_fn_set_status\n\n# as_fn_exit STATUS\n# -----------------\n# Exit the shell with STATUS, even in a \"trap 0\" or \"set -e\" context.\nas_fn_exit ()\n{\n  set +e\n  as_fn_set_status $1\n  exit $1\n} # as_fn_exit\n\n# as_fn_mkdir_p\n# -------------\n# Create \"$as_dir\" as a directory, including parents if necessary.\nas_fn_mkdir_p ()\n{\n\n  case $as_dir in #(\n  -*) as_dir=./$as_dir;;\n  esac\n  test -d \"$as_dir\" || eval $as_mkdir_p || {\n    as_dirs=\n    while :; do\n      case $as_dir in #(\n      *\\'*) as_qdir=`$as_echo \"$as_dir\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; #'(\n      *) as_qdir=$as_dir;;\n      esac\n      as_dirs=\"'$as_qdir' $as_dirs\"\n      as_dir=`$as_dirname -- \"$as_dir\" ||\n$as_expr X\"$as_dir\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_dir\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_dir\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n      test -d \"$as_dir\" && break\n    done\n    test -z \"$as_dirs\" || eval \"mkdir $as_dirs\"\n  } || test -d \"$as_dir\" || as_fn_error \"cannot create directory $as_dir\"\n\n\n} # as_fn_mkdir_p\n# as_fn_append VAR VALUE\n# ----------------------\n# Append the text in VALUE to the end of the definition contained in VAR. Take\n# advantage of any shell optimizations that allow amortized linear growth over\n# repeated appends, instead of the typical quadratic growth present in naive\n# implementations.\nif (eval \"as_var=1; as_var+=2; test x\\$as_var = x12\") 2>/dev/null; then :\n  eval 'as_fn_append ()\n  {\n    eval $1+=\\$2\n  }'\nelse\n  as_fn_append ()\n  {\n    eval $1=\\$$1\\$2\n  }\nfi # as_fn_append\n\n# as_fn_arith ARG...\n# ------------------\n# Perform arithmetic evaluation on the ARGs, and store the result in the\n# global $as_val. Take advantage of shells that can avoid forks. The arguments\n# must be portable across $(()) and expr.\nif (eval \"test \\$(( 1 + 1 )) = 2\") 2>/dev/null; then :\n  eval 'as_fn_arith ()\n  {\n    as_val=$(( $* ))\n  }'\nelse\n  as_fn_arith ()\n  {\n    as_val=`expr \"$@\" || test $? -eq 1`\n  }\nfi # as_fn_arith\n\n\n# as_fn_error ERROR [LINENO LOG_FD]\n# ---------------------------------\n# Output \"`basename $0`: error: ERROR\" to stderr. If LINENO and LOG_FD are\n# provided, also output the error to LOG_FD, referencing LINENO. Then exit the\n# script with status $?, using 1 if that was 0.\nas_fn_error ()\n{\n  as_status=$?; test $as_status -eq 0 && as_status=1\n  if test \"$3\"; then\n    as_lineno=${as_lineno-\"$2\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $1\" >&$3\n  fi\n  $as_echo \"$as_me: error: $1\" >&2\n  as_fn_exit $as_status\n} # as_fn_error\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\nif (as_dir=`dirname -- /` && test \"X$as_dir\" = X/) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\n\n  as_lineno_1=$LINENO as_lineno_1a=$LINENO\n  as_lineno_2=$LINENO as_lineno_2a=$LINENO\n  eval 'test \"x$as_lineno_1'$as_run'\" != \"x$as_lineno_2'$as_run'\" &&\n  test \"x`expr $as_lineno_1'$as_run' + 1`\" = \"x$as_lineno_2'$as_run'\"' || {\n  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)\n  sed -n '\n    p\n    /[$]LINENO/=\n  ' <$as_myself |\n    sed '\n      s/[$]LINENO.*/&-/\n      t lineno\n      b\n      :lineno\n      N\n      :loop\n      s/[$]LINENO\\([^'$as_cr_alnum'_].*\\n\\)\\(.*\\)/\\2\\1\\2/\n      t loop\n      s/-\\n.*//\n    ' >$as_me.lineno &&\n  chmod +x \"$as_me.lineno\" ||\n    { $as_echo \"$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell\" >&2; as_fn_exit 1; }\n\n  # Don't try to exec as it changes $[0], causing all sort of problems\n  # (the dirname of $[0] is not the place where we might find the\n  # original and so on.  Autoconf is especially sensitive to this).\n  . \"./$as_me.lineno\"\n  # Exit status is that of the last command.\n  exit\n}\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in #(((((\n-n*)\n  case `echo 'xy\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  xy)  ECHO_C='\\c';;\n  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null\n       ECHO_T='\t';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir 2>/dev/null\nfi\nif (echo >conf$$.file) 2>/dev/null; then\n  if ln -s conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s='ln -s'\n    # ... but there are two gotchas:\n    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n    # In both cases, we have to default to `cp -p'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -p'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -p'\n  fi\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p='mkdir -p \"$as_dir\"'\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\nif test -x / >/dev/null 2>&1; then\n  as_test_x='test -x'\nelse\n  if ls -dL / >/dev/null 2>&1; then\n    as_ls_L_option=L\n  else\n    as_ls_L_option=\n  fi\n  as_test_x='\n    eval sh -c '\\''\n      if test -d \"$1\"; then\n\ttest -d \"$1/.\";\n      else\n\tcase $1 in #(\n\t-*)set \"./$1\";;\n\tesac;\n\tcase `ls -ld'$as_ls_L_option' \"$1\" 2>/dev/null` in #((\n\t???[sx]*):;;*)false;;esac;fi\n    '\\'' sh\n  '\nfi\nas_executable_p=$as_test_x\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\ntest -n \"$DJDIR\" || exec 7<&0 </dev/null\nexec 6>&1\n\n# Name of the host.\n# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,\n# so uname gets run too.\nac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`\n\n#\n# Initializations.\n#\nac_default_prefix=/usr/local\nac_clean_files=\nac_config_libobj_dir=.\nLIBOBJS=\ncross_compiling=no\nsubdirs=\nMFLAGS=\nMAKEFLAGS=\n\n# Identity of this package.\nPACKAGE_NAME='GNU make'\nPACKAGE_TARNAME='make'\nPACKAGE_VERSION='3.81'\nPACKAGE_STRING='GNU make 3.81'\nPACKAGE_BUGREPORT='bug-make@gnu.org'\nPACKAGE_URL='http://www.gnu.org/software/make/'\n\nac_unique_file=\"vpath.c\"\n# Factoring default headers for most tests.\nac_includes_default=\"\\\n#include <stdio.h>\n#ifdef HAVE_SYS_TYPES_H\n# include <sys/types.h>\n#endif\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef STDC_HEADERS\n# include <stdlib.h>\n# include <stddef.h>\n#else\n# ifdef HAVE_STDLIB_H\n#  include <stdlib.h>\n# endif\n#endif\n#ifdef HAVE_STRING_H\n# if !defined STDC_HEADERS && defined HAVE_MEMORY_H\n#  include <memory.h>\n# endif\n# include <string.h>\n#endif\n#ifdef HAVE_STRINGS_H\n# include <strings.h>\n#endif\n#ifdef HAVE_INTTYPES_H\n# include <inttypes.h>\n#endif\n#ifdef HAVE_STDINT_H\n# include <stdint.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\"\n\nac_subst_vars='LTLIBOBJS\nWINDOWSENV_FALSE\nWINDOWSENV_TRUE\nMAKE_HOST\nUSE_LOCAL_GLOB_FALSE\nUSE_LOCAL_GLOB_TRUE\nGLOBLIB\nGLOBINC\nUSE_CUSTOMS_FALSE\nUSE_CUSTOMS_TRUE\nREMOTE\nGETLOADAVG_LIBS\nKMEM_GROUP\nNEED_SETGID\nLIBOBJS\nALLOCA\nPOSUB\nLTLIBINTL\nLIBINTL\nINTLLIBS\nLTLIBICONV\nLIBICONV\nMSGMERGE\nXGETTEXT\nGMSGFMT\nMSGFMT\nUSE_NLS\nMKINSTALLDIRS\nANSI2KNR\nU\nEGREP\nGREP\nhost_os\nhost_vendor\nhost_cpu\nhost\nbuild_os\nbuild_vendor\nbuild_cpu\nbuild\nPERL\nAR\nCPP\nRANLIB\nam__fastdepCC_FALSE\nam__fastdepCC_TRUE\nCCDEPMODE\nAMDEPBACKSLASH\nAMDEP_FALSE\nAMDEP_TRUE\nam__quote\nam__include\nDEPDIR\nOBJEXT\nEXEEXT\nac_ct_CC\nCPPFLAGS\nLDFLAGS\nCFLAGS\nCC\nam__untar\nam__tar\nAMTAR\nam__leading_dot\nSET_MAKE\nAWK\nmkdir_p\nINSTALL_STRIP_PROGRAM\nSTRIP\ninstall_sh\nMAKEINFO\nAUTOHEADER\nAUTOMAKE\nAUTOCONF\nACLOCAL\nVERSION\nPACKAGE\nCYGPATH_W\nINSTALL_DATA\nINSTALL_SCRIPT\nINSTALL_PROGRAM\ntarget_alias\nhost_alias\nbuild_alias\nLIBS\nECHO_T\nECHO_N\nECHO_C\nDEFS\nmandir\nlocaledir\nlibdir\npsdir\npdfdir\ndvidir\nhtmldir\ninfodir\ndocdir\noldincludedir\nincludedir\nlocalstatedir\nsharedstatedir\nsysconfdir\ndatadir\ndatarootdir\nlibexecdir\nsbindir\nbindir\nprogram_transform_name\nprefix\nexec_prefix\nPACKAGE_URL\nPACKAGE_BUGREPORT\nPACKAGE_STRING\nPACKAGE_VERSION\nPACKAGE_TARNAME\nPACKAGE_NAME\nPATH_SEPARATOR\nSHELL'\nac_subst_files='MAINT_MAKEFILE'\nac_user_opts='\nenable_option_checking\nenable_dependency_tracking\nenable_nls\nwith_gnu_ld\nenable_rpath\nwith_libiconv_prefix\nwith_libintl_prefix\nenable_largefile\nwith_customs\nenable_case_insensitive_file_system\nenable_job_server\nwith_dmalloc\n'\n      ac_precious_vars='build_alias\nhost_alias\ntarget_alias\nCC\nCFLAGS\nLDFLAGS\nLIBS\nCPPFLAGS\nCPP'\n\n\n# Initialize some variables set by options.\nac_init_help=\nac_init_version=false\nac_unrecognized_opts=\nac_unrecognized_sep=\n# The variables have the same names as the options, with\n# dashes changed to underlines.\ncache_file=/dev/null\nexec_prefix=NONE\nno_create=\nno_recursion=\nprefix=NONE\nprogram_prefix=NONE\nprogram_suffix=NONE\nprogram_transform_name=s,x,x,\nsilent=\nsite=\nsrcdir=\nverbose=\nx_includes=NONE\nx_libraries=NONE\n\n# Installation directory options.\n# These are left unexpanded so users can \"make install exec_prefix=/foo\"\n# and all the variables that are supposed to be based on exec_prefix\n# by default will actually change.\n# Use braces instead of parens because sh, perl, etc. also accept them.\n# (The list follows the same order as the GNU Coding Standards.)\nbindir='${exec_prefix}/bin'\nsbindir='${exec_prefix}/sbin'\nlibexecdir='${exec_prefix}/libexec'\ndatarootdir='${prefix}/share'\ndatadir='${datarootdir}'\nsysconfdir='${prefix}/etc'\nsharedstatedir='${prefix}/com'\nlocalstatedir='${prefix}/var'\nincludedir='${prefix}/include'\noldincludedir='/usr/include'\ndocdir='${datarootdir}/doc/${PACKAGE_TARNAME}'\ninfodir='${datarootdir}/info'\nhtmldir='${docdir}'\ndvidir='${docdir}'\npdfdir='${docdir}'\npsdir='${docdir}'\nlibdir='${exec_prefix}/lib'\nlocaledir='${datarootdir}/locale'\nmandir='${datarootdir}/man'\n\nac_prev=\nac_dashdash=\nfor ac_option\ndo\n  # If the previous option needs an argument, assign it.\n  if test -n \"$ac_prev\"; then\n    eval $ac_prev=\\$ac_option\n    ac_prev=\n    continue\n  fi\n\n  case $ac_option in\n  *=*)\tac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *)\tac_optarg=yes ;;\n  esac\n\n  # Accept the important Cygnus configure options, so we can diagnose typos.\n\n  case $ac_dashdash$ac_option in\n  --)\n    ac_dashdash=yes ;;\n\n  -bindir | --bindir | --bindi | --bind | --bin | --bi)\n    ac_prev=bindir ;;\n  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)\n    bindir=$ac_optarg ;;\n\n  -build | --build | --buil | --bui | --bu)\n    ac_prev=build_alias ;;\n  -build=* | --build=* | --buil=* | --bui=* | --bu=*)\n    build_alias=$ac_optarg ;;\n\n  -cache-file | --cache-file | --cache-fil | --cache-fi \\\n  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)\n    ac_prev=cache_file ;;\n  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \\\n  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)\n    cache_file=$ac_optarg ;;\n\n  --config-cache | -C)\n    cache_file=config.cache ;;\n\n  -datadir | --datadir | --datadi | --datad)\n    ac_prev=datadir ;;\n  -datadir=* | --datadir=* | --datadi=* | --datad=*)\n    datadir=$ac_optarg ;;\n\n  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \\\n  | --dataroo | --dataro | --datar)\n    ac_prev=datarootdir ;;\n  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \\\n  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)\n    datarootdir=$ac_optarg ;;\n\n  -disable-* | --disable-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*disable-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid feature name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"enable_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval enable_$ac_useropt=no ;;\n\n  -docdir | --docdir | --docdi | --doc | --do)\n    ac_prev=docdir ;;\n  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)\n    docdir=$ac_optarg ;;\n\n  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)\n    ac_prev=dvidir ;;\n  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)\n    dvidir=$ac_optarg ;;\n\n  -enable-* | --enable-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*enable-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid feature name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"enable_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval enable_$ac_useropt=\\$ac_optarg ;;\n\n  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \\\n  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \\\n  | --exec | --exe | --ex)\n    ac_prev=exec_prefix ;;\n  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \\\n  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \\\n  | --exec=* | --exe=* | --ex=*)\n    exec_prefix=$ac_optarg ;;\n\n  -gas | --gas | --ga | --g)\n    # Obsolete; use --with-gas.\n    with_gas=yes ;;\n\n  -help | --help | --hel | --he | -h)\n    ac_init_help=long ;;\n  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)\n    ac_init_help=recursive ;;\n  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)\n    ac_init_help=short ;;\n\n  -host | --host | --hos | --ho)\n    ac_prev=host_alias ;;\n  -host=* | --host=* | --hos=* | --ho=*)\n    host_alias=$ac_optarg ;;\n\n  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)\n    ac_prev=htmldir ;;\n  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \\\n  | --ht=*)\n    htmldir=$ac_optarg ;;\n\n  -includedir | --includedir | --includedi | --included | --include \\\n  | --includ | --inclu | --incl | --inc)\n    ac_prev=includedir ;;\n  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \\\n  | --includ=* | --inclu=* | --incl=* | --inc=*)\n    includedir=$ac_optarg ;;\n\n  -infodir | --infodir | --infodi | --infod | --info | --inf)\n    ac_prev=infodir ;;\n  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)\n    infodir=$ac_optarg ;;\n\n  -libdir | --libdir | --libdi | --libd)\n    ac_prev=libdir ;;\n  -libdir=* | --libdir=* | --libdi=* | --libd=*)\n    libdir=$ac_optarg ;;\n\n  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \\\n  | --libexe | --libex | --libe)\n    ac_prev=libexecdir ;;\n  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \\\n  | --libexe=* | --libex=* | --libe=*)\n    libexecdir=$ac_optarg ;;\n\n  -localedir | --localedir | --localedi | --localed | --locale)\n    ac_prev=localedir ;;\n  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)\n    localedir=$ac_optarg ;;\n\n  -localstatedir | --localstatedir | --localstatedi | --localstated \\\n  | --localstate | --localstat | --localsta | --localst | --locals)\n    ac_prev=localstatedir ;;\n  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \\\n  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)\n    localstatedir=$ac_optarg ;;\n\n  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)\n    ac_prev=mandir ;;\n  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)\n    mandir=$ac_optarg ;;\n\n  -nfp | --nfp | --nf)\n    # Obsolete; use --without-fp.\n    with_fp=no ;;\n\n  -no-create | --no-create | --no-creat | --no-crea | --no-cre \\\n  | --no-cr | --no-c | -n)\n    no_create=yes ;;\n\n  -no-recursion | --no-recursion | --no-recursio | --no-recursi \\\n  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)\n    no_recursion=yes ;;\n\n  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \\\n  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \\\n  | --oldin | --oldi | --old | --ol | --o)\n    ac_prev=oldincludedir ;;\n  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \\\n  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \\\n  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)\n    oldincludedir=$ac_optarg ;;\n\n  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)\n    ac_prev=prefix ;;\n  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)\n    prefix=$ac_optarg ;;\n\n  -program-prefix | --program-prefix | --program-prefi | --program-pref \\\n  | --program-pre | --program-pr | --program-p)\n    ac_prev=program_prefix ;;\n  -program-prefix=* | --program-prefix=* | --program-prefi=* \\\n  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)\n    program_prefix=$ac_optarg ;;\n\n  -program-suffix | --program-suffix | --program-suffi | --program-suff \\\n  | --program-suf | --program-su | --program-s)\n    ac_prev=program_suffix ;;\n  -program-suffix=* | --program-suffix=* | --program-suffi=* \\\n  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)\n    program_suffix=$ac_optarg ;;\n\n  -program-transform-name | --program-transform-name \\\n  | --program-transform-nam | --program-transform-na \\\n  | --program-transform-n | --program-transform- \\\n  | --program-transform | --program-transfor \\\n  | --program-transfo | --program-transf \\\n  | --program-trans | --program-tran \\\n  | --progr-tra | --program-tr | --program-t)\n    ac_prev=program_transform_name ;;\n  -program-transform-name=* | --program-transform-name=* \\\n  | --program-transform-nam=* | --program-transform-na=* \\\n  | --program-transform-n=* | --program-transform-=* \\\n  | --program-transform=* | --program-transfor=* \\\n  | --program-transfo=* | --program-transf=* \\\n  | --program-trans=* | --program-tran=* \\\n  | --progr-tra=* | --program-tr=* | --program-t=*)\n    program_transform_name=$ac_optarg ;;\n\n  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)\n    ac_prev=pdfdir ;;\n  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)\n    pdfdir=$ac_optarg ;;\n\n  -psdir | --psdir | --psdi | --psd | --ps)\n    ac_prev=psdir ;;\n  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)\n    psdir=$ac_optarg ;;\n\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil)\n    silent=yes ;;\n\n  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)\n    ac_prev=sbindir ;;\n  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \\\n  | --sbi=* | --sb=*)\n    sbindir=$ac_optarg ;;\n\n  -sharedstatedir | --sharedstatedir | --sharedstatedi \\\n  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \\\n  | --sharedst | --shareds | --shared | --share | --shar \\\n  | --sha | --sh)\n    ac_prev=sharedstatedir ;;\n  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \\\n  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \\\n  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \\\n  | --sha=* | --sh=*)\n    sharedstatedir=$ac_optarg ;;\n\n  -site | --site | --sit)\n    ac_prev=site ;;\n  -site=* | --site=* | --sit=*)\n    site=$ac_optarg ;;\n\n  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)\n    ac_prev=srcdir ;;\n  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)\n    srcdir=$ac_optarg ;;\n\n  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \\\n  | --syscon | --sysco | --sysc | --sys | --sy)\n    ac_prev=sysconfdir ;;\n  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \\\n  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)\n    sysconfdir=$ac_optarg ;;\n\n  -target | --target | --targe | --targ | --tar | --ta | --t)\n    ac_prev=target_alias ;;\n  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)\n    target_alias=$ac_optarg ;;\n\n  -v | -verbose | --verbose | --verbos | --verbo | --verb)\n    verbose=yes ;;\n\n  -version | --version | --versio | --versi | --vers | -V)\n    ac_init_version=: ;;\n\n  -with-* | --with-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*with-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid package name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"with_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval with_$ac_useropt=\\$ac_optarg ;;\n\n  -without-* | --without-*)\n    ac_useropt=`expr \"x$ac_option\" : 'x-*without-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_useropt\" : \".*[^-+._$as_cr_alnum]\" >/dev/null &&\n      as_fn_error \"invalid package name: $ac_useropt\"\n    ac_useropt_orig=$ac_useropt\n    ac_useropt=`$as_echo \"$ac_useropt\" | sed 's/[-+.]/_/g'`\n    case $ac_user_opts in\n      *\"\n\"with_$ac_useropt\"\n\"*) ;;\n      *) ac_unrecognized_opts=\"$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig\"\n\t ac_unrecognized_sep=', ';;\n    esac\n    eval with_$ac_useropt=no ;;\n\n  --x)\n    # Obsolete; use --with-x.\n    with_x=yes ;;\n\n  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \\\n  | --x-incl | --x-inc | --x-in | --x-i)\n    ac_prev=x_includes ;;\n  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \\\n  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)\n    x_includes=$ac_optarg ;;\n\n  -x-libraries | --x-libraries | --x-librarie | --x-librari \\\n  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)\n    ac_prev=x_libraries ;;\n  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \\\n  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)\n    x_libraries=$ac_optarg ;;\n\n  -*) as_fn_error \"unrecognized option: \\`$ac_option'\nTry \\`$0 --help' for more information.\"\n    ;;\n\n  *=*)\n    ac_envvar=`expr \"x$ac_option\" : 'x\\([^=]*\\)='`\n    # Reject names that are not valid shell variable names.\n    case $ac_envvar in #(\n      '' | [0-9]* | *[!_$as_cr_alnum]* )\n      as_fn_error \"invalid variable name: \\`$ac_envvar'\" ;;\n    esac\n    eval $ac_envvar=\\$ac_optarg\n    export $ac_envvar ;;\n\n  *)\n    # FIXME: should be removed in autoconf 3.0.\n    $as_echo \"$as_me: WARNING: you should use --build, --host, --target\" >&2\n    expr \"x$ac_option\" : \".*[^-._$as_cr_alnum]\" >/dev/null &&\n      $as_echo \"$as_me: WARNING: invalid host type: $ac_option\" >&2\n    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}\n    ;;\n\n  esac\ndone\n\nif test -n \"$ac_prev\"; then\n  ac_option=--`echo $ac_prev | sed 's/_/-/g'`\n  as_fn_error \"missing argument to $ac_option\"\nfi\n\nif test -n \"$ac_unrecognized_opts\"; then\n  case $enable_option_checking in\n    no) ;;\n    fatal) as_fn_error \"unrecognized options: $ac_unrecognized_opts\" ;;\n    *)     $as_echo \"$as_me: WARNING: unrecognized options: $ac_unrecognized_opts\" >&2 ;;\n  esac\nfi\n\n# Check all directory arguments for consistency.\nfor ac_var in\texec_prefix prefix bindir sbindir libexecdir datarootdir \\\n\t\tdatadir sysconfdir sharedstatedir localstatedir includedir \\\n\t\toldincludedir docdir infodir htmldir dvidir pdfdir psdir \\\n\t\tlibdir localedir mandir\ndo\n  eval ac_val=\\$$ac_var\n  # Remove trailing slashes.\n  case $ac_val in\n    */ )\n      ac_val=`expr \"X$ac_val\" : 'X\\(.*[^/]\\)' \\| \"X$ac_val\" : 'X\\(.*\\)'`\n      eval $ac_var=\\$ac_val;;\n  esac\n  # Be sure to have absolute directory names.\n  case $ac_val in\n    [\\\\/$]* | ?:[\\\\/]* )  continue;;\n    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;\n  esac\n  as_fn_error \"expected an absolute directory name for --$ac_var: $ac_val\"\ndone\n\n# There might be people who depend on the old broken behavior: `$host'\n# used to hold the argument of --host etc.\n# FIXME: To remove some day.\nbuild=$build_alias\nhost=$host_alias\ntarget=$target_alias\n\n# FIXME: To remove some day.\nif test \"x$host_alias\" != x; then\n  if test \"x$build_alias\" = x; then\n    cross_compiling=maybe\n    $as_echo \"$as_me: WARNING: If you wanted to set the --build type, don't use --host.\n    If a cross compiler is detected then cross compile mode will be used.\" >&2\n  elif test \"x$build_alias\" != \"x$host_alias\"; then\n    cross_compiling=yes\n  fi\nfi\n\nac_tool_prefix=\ntest -n \"$host_alias\" && ac_tool_prefix=$host_alias-\n\ntest \"$silent\" = yes && exec 6>/dev/null\n\n\nac_pwd=`pwd` && test -n \"$ac_pwd\" &&\nac_ls_di=`ls -di .` &&\nac_pwd_ls_di=`cd \"$ac_pwd\" && ls -di .` ||\n  as_fn_error \"working directory cannot be determined\"\ntest \"X$ac_ls_di\" = \"X$ac_pwd_ls_di\" ||\n  as_fn_error \"pwd does not report name of working directory\"\n\n\n# Find the source files, if location was not specified.\nif test -z \"$srcdir\"; then\n  ac_srcdir_defaulted=yes\n  # Try the directory containing this script, then the parent directory.\n  ac_confdir=`$as_dirname -- \"$as_myself\" ||\n$as_expr X\"$as_myself\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_myself\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_myself\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_myself\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_myself\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  srcdir=$ac_confdir\n  if test ! -r \"$srcdir/$ac_unique_file\"; then\n    srcdir=..\n  fi\nelse\n  ac_srcdir_defaulted=no\nfi\nif test ! -r \"$srcdir/$ac_unique_file\"; then\n  test \"$ac_srcdir_defaulted\" = yes && srcdir=\"$ac_confdir or ..\"\n  as_fn_error \"cannot find sources ($ac_unique_file) in $srcdir\"\nfi\nac_msg=\"sources are in $srcdir, but \\`cd $srcdir' does not work\"\nac_abs_confdir=`(\n\tcd \"$srcdir\" && test -r \"./$ac_unique_file\" || as_fn_error \"$ac_msg\"\n\tpwd)`\n# When building in place, set srcdir=.\nif test \"$ac_abs_confdir\" = \"$ac_pwd\"; then\n  srcdir=.\nfi\n# Remove unnecessary trailing slashes from srcdir.\n# Double slashes in file names in object file debugging info\n# mess up M-x gdb in Emacs.\ncase $srcdir in\n*/) srcdir=`expr \"X$srcdir\" : 'X\\(.*[^/]\\)' \\| \"X$srcdir\" : 'X\\(.*\\)'`;;\nesac\nfor ac_var in $ac_precious_vars; do\n  eval ac_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_env_${ac_var}_value=\\$${ac_var}\n  eval ac_cv_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_cv_env_${ac_var}_value=\\$${ac_var}\ndone\n\n#\n# Report the --help message.\n#\nif test \"$ac_init_help\" = \"long\"; then\n  # Omit some internal or obsolete options to make the list less imposing.\n  # This message is too long to be a string in the A/UX 3.1 sh.\n  cat <<_ACEOF\n\\`configure' configures GNU make 3.81 to adapt to many kinds of systems.\n\nUsage: $0 [OPTION]... [VAR=VALUE]...\n\nTo assign environment variables (e.g., CC, CFLAGS...), specify them as\nVAR=VALUE.  See below for descriptions of some of the useful variables.\n\nDefaults for the options are specified in brackets.\n\nConfiguration:\n  -h, --help              display this help and exit\n      --help=short        display options specific to this package\n      --help=recursive    display the short help of all the included packages\n  -V, --version           display version information and exit\n  -q, --quiet, --silent   do not print \\`checking...' messages\n      --cache-file=FILE   cache test results in FILE [disabled]\n  -C, --config-cache      alias for \\`--cache-file=config.cache'\n  -n, --no-create         do not create output files\n      --srcdir=DIR        find the sources in DIR [configure dir or \\`..']\n\nInstallation directories:\n  --prefix=PREFIX         install architecture-independent files in PREFIX\n                          [$ac_default_prefix]\n  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX\n                          [PREFIX]\n\nBy default, \\`make install' will install all the files in\n\\`$ac_default_prefix/bin', \\`$ac_default_prefix/lib' etc.  You can specify\nan installation prefix other than \\`$ac_default_prefix' using \\`--prefix',\nfor instance \\`--prefix=\\$HOME'.\n\nFor better control, use the options below.\n\nFine tuning of the installation directories:\n  --bindir=DIR            user executables [EPREFIX/bin]\n  --sbindir=DIR           system admin executables [EPREFIX/sbin]\n  --libexecdir=DIR        program executables [EPREFIX/libexec]\n  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]\n  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]\n  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]\n  --libdir=DIR            object code libraries [EPREFIX/lib]\n  --includedir=DIR        C header files [PREFIX/include]\n  --oldincludedir=DIR     C header files for non-gcc [/usr/include]\n  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]\n  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]\n  --infodir=DIR           info documentation [DATAROOTDIR/info]\n  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]\n  --mandir=DIR            man documentation [DATAROOTDIR/man]\n  --docdir=DIR            documentation root [DATAROOTDIR/doc/make]\n  --htmldir=DIR           html documentation [DOCDIR]\n  --dvidir=DIR            dvi documentation [DOCDIR]\n  --pdfdir=DIR            pdf documentation [DOCDIR]\n  --psdir=DIR             ps documentation [DOCDIR]\n_ACEOF\n\n  cat <<\\_ACEOF\n\nProgram names:\n  --program-prefix=PREFIX            prepend PREFIX to installed program names\n  --program-suffix=SUFFIX            append SUFFIX to installed program names\n  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names\n\nSystem types:\n  --build=BUILD     configure for building on BUILD [guessed]\n  --host=HOST       cross-compile to build programs to run on HOST [BUILD]\n_ACEOF\nfi\n\nif test -n \"$ac_init_help\"; then\n  case $ac_init_help in\n     short | recursive ) echo \"Configuration of GNU make 3.81:\";;\n   esac\n  cat <<\\_ACEOF\n\nOptional Features:\n  --disable-option-checking  ignore unrecognized --enable/--with options\n  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)\n  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]\n  --disable-dependency-tracking  speeds up one-time build\n  --enable-dependency-tracking   do not reject slow dependency extractors\n  --disable-nls           do not use Native Language Support\n  --disable-rpath         do not hardcode runtime library paths\n  --disable-largefile     omit support for large files\n  --enable-case-insensitive-file-system\n                          enable case insensitive file system support\n  --disable-job-server    disallow recursive make communication during -jN\n\nOptional Packages:\n  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]\n  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)\n  --with-gnu-ld           assume the C compiler uses GNU ld default=no\n  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib\n  --without-libiconv-prefix     don't search for libiconv in includedir and libdir\n  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib\n  --without-libintl-prefix     don't search for libintl in includedir and libdir\n  --with-customs=DIR      enable remote jobs via Customs--see README.customs\n  --with-dmalloc          use dmalloc, as in\n\t\t\t  http://www.dmalloc.com/dmalloc.tar.gz\n\nSome influential environment variables:\n  CC          C compiler command\n  CFLAGS      C compiler flags\n  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a\n              nonstandard directory <lib dir>\n  LIBS        libraries to pass to the linker, e.g. -l<library>\n  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if\n              you have headers in a nonstandard directory <include dir>\n  CPP         C preprocessor\n\nUse these variables to override the choices made by `configure' or to help\nit to find libraries and programs with nonstandard names/locations.\n\nReport bugs to <bug-make@gnu.org>.\nGNU make home page: <http://www.gnu.org/software/make/>.\nGeneral help using GNU software: <http://www.gnu.org/gethelp/>.\n_ACEOF\nac_status=$?\nfi\n\nif test \"$ac_init_help\" = \"recursive\"; then\n  # If there are subdirs, report their specific --help.\n  for ac_dir in : $ac_subdirs_all; do test \"x$ac_dir\" = x: && continue\n    test -d \"$ac_dir\" ||\n      { cd \"$srcdir\" && ac_pwd=`pwd` && srcdir=. && test -d \"$ac_dir\"; } ||\n      continue\n    ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`$as_echo \"$ac_dir\" | sed 's|^\\.[\\\\/]||'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`$as_echo \"$ac_dir_suffix\" | sed 's|/[^\\\\/]*|/..|g;s|/||'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n    cd \"$ac_dir\" || { ac_status=$?; continue; }\n    # Check for guested configure.\n    if test -f \"$ac_srcdir/configure.gnu\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure.gnu\" --help=recursive\n    elif test -f \"$ac_srcdir/configure\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure\" --help=recursive\n    else\n      $as_echo \"$as_me: WARNING: no configuration information is in $ac_dir\" >&2\n    fi || ac_status=$?\n    cd \"$ac_pwd\" || { ac_status=$?; break; }\n  done\nfi\n\ntest -n \"$ac_init_help\" && exit $ac_status\nif $ac_init_version; then\n  cat <<\\_ACEOF\nGNU make configure 3.81\ngenerated by GNU Autoconf 2.65\n\nCopyright (C) 2009 Free Software Foundation, Inc.\nThis configure script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\n_ACEOF\n  exit\nfi\n\n## ------------------------ ##\n## Autoconf initialization. ##\n## ------------------------ ##\n\n# ac_fn_c_try_compile LINENO\n# --------------------------\n# Try to compile conftest.$ac_ext, and return whether this succeeded.\nac_fn_c_try_compile ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  rm -f conftest.$ac_objext\n  if { { ac_try=\"$ac_compile\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compile\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && {\n\t test -z \"$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       } && test -s conftest.$ac_objext; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_retval=1\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_compile\n\n# ac_fn_c_try_cpp LINENO\n# ----------------------\n# Try to preprocess conftest.$ac_ext, and return whether this succeeded.\nac_fn_c_try_cpp ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { { ac_try=\"$ac_cpp conftest.$ac_ext\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_cpp conftest.$ac_ext\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } >/dev/null && {\n\t test -z \"$ac_c_preproc_warn_flag$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n    ac_retval=1\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_cpp\n\n# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES\n# -------------------------------------------------------\n# Tests whether HEADER exists, giving a warning if it cannot be compiled using\n# the include files in INCLUDES and setting the cache variable VAR\n# accordingly.\nac_fn_c_check_header_mongrel ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nelse\n  # Is the header compilable?\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking $2 usability\" >&5\n$as_echo_n \"checking $2 usability... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\n#include <$2>\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_header_compiler=yes\nelse\n  ac_header_compiler=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler\" >&5\n$as_echo \"$ac_header_compiler\" >&6; }\n\n# Is the header present?\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking $2 presence\" >&5\n$as_echo_n \"checking $2 presence... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <$2>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  ac_header_preproc=yes\nelse\n  ac_header_preproc=no\nfi\nrm -f conftest.err conftest.$ac_ext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc\" >&5\n$as_echo \"$ac_header_preproc\" >&6; }\n\n# So?  What about this header?\ncase $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((\n  yes:no: )\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!\" >&5\n$as_echo \"$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result\" >&5\n$as_echo \"$as_me: WARNING: $2: proceeding with the compiler's result\" >&2;}\n    ;;\n  no:yes:* )\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled\" >&5\n$as_echo \"$as_me: WARNING: $2: present but cannot be compiled\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?\" >&5\n$as_echo \"$as_me: WARNING: $2:     check for missing prerequisite headers?\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation\" >&5\n$as_echo \"$as_me: WARNING: $2: see the Autoconf documentation\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \\\"Present But Cannot Be Compiled\\\"\" >&5\n$as_echo \"$as_me: WARNING: $2:     section \\\"Present But Cannot Be Compiled\\\"\" >&2;}\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result\" >&5\n$as_echo \"$as_me: WARNING: $2: proceeding with the compiler's result\" >&2;}\n( cat <<\\_ASBOX\n## ------------------------------- ##\n## Report this to bug-make@gnu.org ##\n## ------------------------------- ##\n_ASBOX\n     ) | sed \"s/^/$as_me: WARNING:     /\" >&2\n    ;;\nesac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  eval \"$3=\\$ac_header_compiler\"\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nfi\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_header_mongrel\n\n# ac_fn_c_try_run LINENO\n# ----------------------\n# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes\n# that executables *can* be run.\nac_fn_c_try_run ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  if { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: program exited with status $ac_status\" >&5\n       $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n       ac_retval=$ac_status\nfi\n  rm -rf conftest.dSYM conftest_ipa8_conftest.oo\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_run\n\n# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES\n# -------------------------------------------------------\n# Tests whether HEADER exists and can be compiled using the include files in\n# INCLUDES, setting the cache variable VAR accordingly.\nac_fn_c_check_header_compile ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\n#include <$2>\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_header_compile\n\n# ac_fn_c_try_link LINENO\n# -----------------------\n# Try to link conftest.$ac_ext, and return whether this succeeded.\nac_fn_c_try_link ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  rm -f conftest.$ac_objext conftest$ac_exeext\n  if { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    grep -v '^ *+' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n    mv -f conftest.er1 conftest.err\n  fi\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && {\n\t test -z \"$ac_c_werror_flag\" ||\n\t test ! -s conftest.err\n       } && test -s conftest$ac_exeext && {\n\t test \"$cross_compiling\" = yes ||\n\t $as_test_x conftest$ac_exeext\n       }; then :\n  ac_retval=0\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_retval=1\nfi\n  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information\n  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would\n  # interfere with the next link command; also delete a directory that is\n  # left behind by Apple's compiler.  We do this before executing the actions.\n  rm -rf conftest.dSYM conftest_ipa8_conftest.oo\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_link\n\n# ac_fn_c_check_type LINENO TYPE VAR INCLUDES\n# -------------------------------------------\n# Tests whether TYPE exists after having included INCLUDES, setting cache\n# variable VAR accordingly.\nac_fn_c_check_type ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  eval \"$3=no\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\nif (sizeof ($2))\n\t return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\nif (sizeof (($2)))\n\t    return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n\nelse\n  eval \"$3=yes\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_type\n\n# ac_fn_c_check_func LINENO FUNC VAR\n# ----------------------------------\n# Tests whether FUNC exists, setting the cache variable VAR accordingly\nac_fn_c_check_func ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n/* Define $2 to an innocuous variant, in case <limits.h> declares $2.\n   For example, HP-UX 11i <limits.h> declares gettimeofday.  */\n#define $2 innocuous_$2\n\n/* System header to define __stub macros and hopefully few prototypes,\n    which can conflict with char $2 (); below.\n    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n    <limits.h> exists even on freestanding compilers.  */\n\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\n#undef $2\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar $2 ();\n/* The GNU C library defines this for functions which it implements\n    to always fail with ENOSYS.  Some functions are actually named\n    something starting with __ and the normal name is an alias.  */\n#if defined __stub_$2 || defined __stub___$2\nchoke me\n#endif\n\nint\nmain ()\n{\nreturn $2 ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_func\n\n# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES\n# ----------------------------------------------------\n# Tries to find if the field MEMBER exists in type AGGR, after including\n# INCLUDES, setting cache variable VAR accordingly.\nac_fn_c_check_member ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2.$3\" >&5\n$as_echo_n \"checking for $2.$3... \" >&6; }\nif { as_var=$4; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$5\nint\nmain ()\n{\nstatic $2 ac_aggr;\nif (ac_aggr.$3)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$4=yes\"\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$5\nint\nmain ()\n{\nstatic $2 ac_aggr;\nif (sizeof ac_aggr.$3)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$4=yes\"\nelse\n  eval \"$4=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$4\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_member\n\n# ac_fn_c_check_decl LINENO SYMBOL VAR\n# ------------------------------------\n# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.\nac_fn_c_check_decl ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $2 is declared\" >&5\n$as_echo_n \"checking whether $2 is declared... \" >&6; }\nif { as_var=$3; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$4\nint\nmain ()\n{\n#ifndef $2\n  (void) $2;\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$3=yes\"\nelse\n  eval \"$3=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$3\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\n  eval $as_lineno_stack; test \"x$as_lineno_stack\" = x && { as_lineno=; unset as_lineno;}\n\n} # ac_fn_c_check_decl\ncat >config.log <<_ACEOF\nThis file contains any messages produced by compilers while\nrunning configure, to aid debugging if configure makes a mistake.\n\nIt was created by GNU make $as_me 3.81, which was\ngenerated by GNU Autoconf 2.65.  Invocation command line was\n\n  $ $0 $@\n\n_ACEOF\nexec 5>>config.log\n{\ncat <<_ASUNAME\n## --------- ##\n## Platform. ##\n## --------- ##\n\nhostname = `(hostname || uname -n) 2>/dev/null | sed 1q`\nuname -m = `(uname -m) 2>/dev/null || echo unknown`\nuname -r = `(uname -r) 2>/dev/null || echo unknown`\nuname -s = `(uname -s) 2>/dev/null || echo unknown`\nuname -v = `(uname -v) 2>/dev/null || echo unknown`\n\n/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`\n/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`\n\n/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`\n/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`\n/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`\n/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`\n/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`\n/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`\n/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`\n\n_ASUNAME\n\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    $as_echo \"PATH: $as_dir\"\n  done\nIFS=$as_save_IFS\n\n} >&5\n\ncat >&5 <<_ACEOF\n\n\n## ----------- ##\n## Core tests. ##\n## ----------- ##\n\n_ACEOF\n\n\n# Keep a trace of the command line.\n# Strip out --no-create and --no-recursion so they do not pile up.\n# Strip out --silent because we don't want to record it for future runs.\n# Also quote any args containing shell meta-characters.\n# Make two passes to allow for proper duplicate-argument suppression.\nac_configure_args=\nac_configure_args0=\nac_configure_args1=\nac_must_keep_next=false\nfor ac_pass in 1 2\ndo\n  for ac_arg\n  do\n    case $ac_arg in\n    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;\n    -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n    | -silent | --silent | --silen | --sile | --sil)\n      continue ;;\n    *\\'*)\n      ac_arg=`$as_echo \"$ac_arg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    case $ac_pass in\n    1) as_fn_append ac_configure_args0 \" '$ac_arg'\" ;;\n    2)\n      as_fn_append ac_configure_args1 \" '$ac_arg'\"\n      if test $ac_must_keep_next = true; then\n\tac_must_keep_next=false # Got value, back to normal.\n      else\n\tcase $ac_arg in\n\t  *=* | --config-cache | -C | -disable-* | --disable-* \\\n\t  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \\\n\t  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \\\n\t  | -with-* | --with-* | -without-* | --without-* | --x)\n\t    case \"$ac_configure_args0 \" in\n\t      \"$ac_configure_args1\"*\" '$ac_arg' \"* ) continue ;;\n\t    esac\n\t    ;;\n\t  -* ) ac_must_keep_next=true ;;\n\tesac\n      fi\n      as_fn_append ac_configure_args \" '$ac_arg'\"\n      ;;\n    esac\n  done\ndone\n{ ac_configure_args0=; unset ac_configure_args0;}\n{ ac_configure_args1=; unset ac_configure_args1;}\n\n# When interrupted or exit'd, cleanup temporary files, and complete\n# config.log.  We remove comments because anyway the quotes in there\n# would cause problems or look ugly.\n# WARNING: Use '\\'' to represent an apostrophe within the trap.\n# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.\ntrap 'exit_status=$?\n  # Save into config.log some information that might help in debugging.\n  {\n    echo\n\n    cat <<\\_ASBOX\n## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\n_ASBOX\n    echo\n    # The following way of writing the cache mishandles newlines in values,\n(\n  for ac_var in `(set) 2>&1 | sed -n '\\''s/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'\\''`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline\" >&5\n$as_echo \"$as_me: WARNING: cache variable $ac_var contains a newline\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(\n      *) { eval $ac_var=; unset $ac_var;} ;;\n      esac ;;\n    esac\n  done\n  (set) 2>&1 |\n    case $as_nl`(ac_space='\\'' '\\''; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      sed -n \\\n\t\"s/'\\''/'\\''\\\\\\\\'\\'''\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\''\\\\2'\\''/p\"\n      ;; #(\n    *)\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n)\n    echo\n\n    cat <<\\_ASBOX\n## ----------------- ##\n## Output variables. ##\n## ----------------- ##\n_ASBOX\n    echo\n    for ac_var in $ac_subst_vars\n    do\n      eval ac_val=\\$$ac_var\n      case $ac_val in\n      *\\'\\''*) ac_val=`$as_echo \"$ac_val\" | sed \"s/'\\''/'\\''\\\\\\\\\\\\\\\\'\\'''\\''/g\"`;;\n      esac\n      $as_echo \"$ac_var='\\''$ac_val'\\''\"\n    done | sort\n    echo\n\n    if test -n \"$ac_subst_files\"; then\n      cat <<\\_ASBOX\n## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\n_ASBOX\n      echo\n      for ac_var in $ac_subst_files\n      do\n\teval ac_val=\\$$ac_var\n\tcase $ac_val in\n\t*\\'\\''*) ac_val=`$as_echo \"$ac_val\" | sed \"s/'\\''/'\\''\\\\\\\\\\\\\\\\'\\'''\\''/g\"`;;\n\tesac\n\t$as_echo \"$ac_var='\\''$ac_val'\\''\"\n      done | sort\n      echo\n    fi\n\n    if test -s confdefs.h; then\n      cat <<\\_ASBOX\n## ----------- ##\n## confdefs.h. ##\n## ----------- ##\n_ASBOX\n      echo\n      cat confdefs.h\n      echo\n    fi\n    test \"$ac_signal\" != 0 &&\n      $as_echo \"$as_me: caught signal $ac_signal\"\n    $as_echo \"$as_me: exit $exit_status\"\n  } >&5\n  rm -f core *.core core.conftest.* &&\n    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&\n    exit $exit_status\n' 0\nfor ac_signal in 1 2 13 15; do\n  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal\ndone\nac_signal=0\n\n# confdefs.h avoids OS command line length limits that DEFS can exceed.\nrm -f -r conftest* confdefs.h\n\n$as_echo \"/* confdefs.h */\" > confdefs.h\n\n# Predefined preprocessor variables.\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_NAME \"$PACKAGE_NAME\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_VERSION \"$PACKAGE_VERSION\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_STRING \"$PACKAGE_STRING\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"\n_ACEOF\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_URL \"$PACKAGE_URL\"\n_ACEOF\n\n\n# Let the site file select an alternate cache file if it wants to.\n# Prefer an explicitly selected file to automatically selected ones.\nac_site_file1=NONE\nac_site_file2=NONE\nif test -n \"$CONFIG_SITE\"; then\n  ac_site_file1=$CONFIG_SITE\nelif test \"x$prefix\" != xNONE; then\n  ac_site_file1=$prefix/share/config.site\n  ac_site_file2=$prefix/etc/config.site\nelse\n  ac_site_file1=$ac_default_prefix/share/config.site\n  ac_site_file2=$ac_default_prefix/etc/config.site\nfi\nfor ac_site_file in \"$ac_site_file1\" \"$ac_site_file2\"\ndo\n  test \"x$ac_site_file\" = xNONE && continue\n  if test /dev/null != \"$ac_site_file\" && test -r \"$ac_site_file\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file\" >&5\n$as_echo \"$as_me: loading site script $ac_site_file\" >&6;}\n    sed 's/^/| /' \"$ac_site_file\" >&5\n    . \"$ac_site_file\"\n  fi\ndone\n\nif test -r \"$cache_file\"; then\n  # Some versions of bash will fail to source /dev/null (special files\n  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.\n  if test /dev/null != \"$cache_file\" && test -f \"$cache_file\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: loading cache $cache_file\" >&5\n$as_echo \"$as_me: loading cache $cache_file\" >&6;}\n    case $cache_file in\n      [\\\\/]* | ?:[\\\\/]* ) . \"$cache_file\";;\n      *)                      . \"./$cache_file\";;\n    esac\n  fi\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: creating cache $cache_file\" >&5\n$as_echo \"$as_me: creating cache $cache_file\" >&6;}\n  >$cache_file\nfi\n\n# Check that the precious variables saved in the cache have kept the same\n# value.\nac_cache_corrupted=false\nfor ac_var in $ac_precious_vars; do\n  eval ac_old_set=\\$ac_cv_env_${ac_var}_set\n  eval ac_new_set=\\$ac_env_${ac_var}_set\n  eval ac_old_val=\\$ac_cv_env_${ac_var}_value\n  eval ac_new_val=\\$ac_env_${ac_var}_value\n  case $ac_old_set,$ac_new_set in\n    set,)\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,set)\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' was not set in the previous run\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' was not set in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,);;\n    *)\n      if test \"x$ac_old_val\" != \"x$ac_new_val\"; then\n\t# differences in whitespace do not lead to failure.\n\tac_old_val_w=`echo x $ac_old_val`\n\tac_new_val_w=`echo x $ac_new_val`\n\tif test \"$ac_old_val_w\" != \"$ac_new_val_w\"; then\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: \\`$ac_var' has changed since the previous run:\" >&5\n$as_echo \"$as_me: error: \\`$ac_var' has changed since the previous run:\" >&2;}\n\t  ac_cache_corrupted=:\n\telse\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \\`$ac_var' since the previous run:\" >&5\n$as_echo \"$as_me: warning: ignoring whitespace changes in \\`$ac_var' since the previous run:\" >&2;}\n\t  eval $ac_var=\\$ac_old_val\n\tfi\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}:   former value:  \\`$ac_old_val'\" >&5\n$as_echo \"$as_me:   former value:  \\`$ac_old_val'\" >&2;}\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}:   current value: \\`$ac_new_val'\" >&5\n$as_echo \"$as_me:   current value: \\`$ac_new_val'\" >&2;}\n      fi;;\n  esac\n  # Pass precious variables to config.status.\n  if test \"$ac_new_set\" = set; then\n    case $ac_new_val in\n    *\\'*) ac_arg=$ac_var=`$as_echo \"$ac_new_val\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    *) ac_arg=$ac_var=$ac_new_val ;;\n    esac\n    case \" $ac_configure_args \" in\n      *\" '$ac_arg' \"*) ;; # Avoid dups.  Use of quotes ensures accuracy.\n      *) as_fn_append ac_configure_args \" '$ac_arg'\" ;;\n    esac\n  fi\ndone\nif $ac_cache_corrupted; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build\" >&5\n$as_echo \"$as_me: error: changes in the environment can compromise the build\" >&2;}\n  as_fn_error \"run \\`make distclean' and/or \\`rm $cache_file' and start over\" \"$LINENO\" 5\nfi\n## -------------------- ##\n## Main body of script. ##\n## -------------------- ##\n\nac_ext=c\nac_cpp='$CPP $CFLAGS $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\n\n\n\n\n# Autoconf setup\nac_aux_dir=\nfor ac_dir in config \"$srcdir\"/config; do\n  for ac_t in install-sh install.sh shtool; do\n    if test -f \"$ac_dir/$ac_t\"; then\n      ac_aux_dir=$ac_dir\n      ac_install_sh=\"$ac_aux_dir/$ac_t -c\"\n      break 2\n    fi\n  done\ndone\nif test -z \"$ac_aux_dir\"; then\n  as_fn_error \"cannot find install-sh, install.sh, or shtool in config \\\"$srcdir\\\"/config\" \"$LINENO\" 5\nfi\n\n# These three variables are undocumented and unsupported,\n# and are intended to be withdrawn in a future Autoconf release.\n# They can cause serious problems if a builder's source tree is in a directory\n# whose full name contains unusual characters.\nac_config_guess=\"$SHELL $ac_aux_dir/config.guess\"  # Please don't use this var.\nac_config_sub=\"$SHELL $ac_aux_dir/config.sub\"  # Please don't use this var.\nac_configure=\"$SHELL $ac_aux_dir/configure\"  # Please don't use this var.\n\n\n\nac_config_headers=\"$ac_config_headers config.h\"\n\n\n# Automake setup\nam__api_version=\"1.9\"\n# Find a good install program.  We prefer a C program (faster),\n# so one script is as good as another.  But avoid the broken or\n# incompatible versions:\n# SysV /etc/install, /usr/sbin/install\n# SunOS /usr/etc/install\n# IRIX /sbin/install\n# AIX /bin/install\n# AmigaOS /C/install, which installs bootblocks on floppy discs\n# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag\n# AFS /usr/afsws/bin/install, which mishandles nonexistent args\n# SVR4 /usr/ucb/install, which tries to use the nonexistent group \"staff\"\n# OS/2's system install, which has a completely different semantic\n# ./install, which can be erroneously created by make from ./install.sh.\n# Reject install programs that cannot install multiple files.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install\" >&5\n$as_echo_n \"checking for a BSD-compatible install... \" >&6; }\nif test -z \"$INSTALL\"; then\nif test \"${ac_cv_path_install+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    # Account for people who put trailing slashes in PATH elements.\ncase $as_dir/ in #((\n  ./ | .// | /[cC]/* | \\\n  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \\\n  ?:[\\\\/]os2[\\\\/]install[\\\\/]* | ?:[\\\\/]OS2[\\\\/]INSTALL[\\\\/]* | \\\n  /usr/ucb/* ) ;;\n  *)\n    # OSF1 and SCO ODT 3.0 have their own names for install.\n    # Don't use installbsd from OSF since it installs stuff as root\n    # by default.\n    for ac_prog in ginstall scoinst install; do\n      for ac_exec_ext in '' $ac_executable_extensions; do\n\tif { test -f \"$as_dir/$ac_prog$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_prog$ac_exec_ext\"; }; then\n\t  if test $ac_prog = install &&\n\t    grep dspmsg \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # AIX install.  It has an incompatible calling convention.\n\t    :\n\t  elif test $ac_prog = install &&\n\t    grep pwplus \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # program-specific install script used by HP pwplus--don't use.\n\t    :\n\t  else\n\t    rm -rf conftest.one conftest.two conftest.dir\n\t    echo one > conftest.one\n\t    echo two > conftest.two\n\t    mkdir conftest.dir\n\t    if \"$as_dir/$ac_prog$ac_exec_ext\" -c conftest.one conftest.two \"`pwd`/conftest.dir\" &&\n\t      test -s conftest.one && test -s conftest.two &&\n\t      test -s conftest.dir/conftest.one &&\n\t      test -s conftest.dir/conftest.two\n\t    then\n\t      ac_cv_path_install=\"$as_dir/$ac_prog$ac_exec_ext -c\"\n\t      break 3\n\t    fi\n\t  fi\n\tfi\n      done\n    done\n    ;;\nesac\n\n  done\nIFS=$as_save_IFS\n\nrm -rf conftest.one conftest.two conftest.dir\n\nfi\n  if test \"${ac_cv_path_install+set}\" = set; then\n    INSTALL=$ac_cv_path_install\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for INSTALL within a source directory, because that will\n    # break other packages using the cache if that directory is\n    # removed, or if the value is a relative name.\n    INSTALL=$ac_install_sh\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $INSTALL\" >&5\n$as_echo \"$INSTALL\" >&6; }\n\n# Use test -z because SunOS4 sh mishandles braces in ${var-val}.\n# It thinks the first close brace ends the variable substitution.\ntest -z \"$INSTALL_PROGRAM\" && INSTALL_PROGRAM='${INSTALL}'\n\ntest -z \"$INSTALL_SCRIPT\" && INSTALL_SCRIPT='${INSTALL}'\n\ntest -z \"$INSTALL_DATA\" && INSTALL_DATA='${INSTALL} -m 644'\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether build environment is sane\" >&5\n$as_echo_n \"checking whether build environment is sane... \" >&6; }\n# Just in case\nsleep 1\necho timestamp > conftest.file\n# Do `set' in a subshell so we don't clobber the current shell's\n# arguments.  Must try -L first in case configure is actually a\n# symlink; some systems play weird games with the mod time of symlinks\n# (eg FreeBSD returns the mod time of the symlink's containing\n# directory).\nif (\n   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`\n   if test \"$*\" = \"X\"; then\n      # -L didn't work.\n      set X `ls -t $srcdir/configure conftest.file`\n   fi\n   rm -f conftest.file\n   if test \"$*\" != \"X $srcdir/configure conftest.file\" \\\n      && test \"$*\" != \"X conftest.file $srcdir/configure\"; then\n\n      # If neither matched, then we have a broken ls.  This can happen\n      # if, for instance, CONFIG_SHELL is bash and it inherits a\n      # broken ls alias from the environment.  This has actually\n      # happened.  Such a system could not be considered \"sane\".\n      as_fn_error \"ls -t appears to fail.  Make sure there is not a broken\nalias in your environment\" \"$LINENO\" 5\n   fi\n\n   test \"$2\" = conftest.file\n   )\nthen\n   # Ok.\n   :\nelse\n   as_fn_error \"newly created file is older than distributed files!\nCheck your system clock\" \"$LINENO\" 5\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\ntest \"$program_prefix\" != NONE &&\n  program_transform_name=\"s&^&$program_prefix&;$program_transform_name\"\n# Use a double $ so make ignores it.\ntest \"$program_suffix\" != NONE &&\n  program_transform_name=\"s&\\$&$program_suffix&;$program_transform_name\"\n# Double any \\ or $.\n# By default was `s,x,x', remove it if useless.\nac_script='s/[\\\\$]/&&/g;s/;s,x,x,$//'\nprogram_transform_name=`$as_echo \"$program_transform_name\" | sed \"$ac_script\"`\n\n# expand $ac_aux_dir to an absolute path\nam_aux_dir=`cd $ac_aux_dir && pwd`\n\ntest x\"${MISSING+set}\" = xset || MISSING=\"\\${SHELL} $am_aux_dir/missing\"\n# Use eval to expand $SHELL\nif eval \"$MISSING --run true\"; then\n  am_missing_run=\"$MISSING --run \"\nelse\n  am_missing_run=\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: \\`missing' script is too old or missing\" >&5\n$as_echo \"$as_me: WARNING: \\`missing' script is too old or missing\" >&2;}\nfi\n\nif mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then\n  # We used to keeping the `.' as first argument, in order to\n  # allow $(mkdir_p) to be used without argument.  As in\n  #   $(mkdir_p) $(somedir)\n  # where $(somedir) is conditionally defined.  However this is wrong\n  # for two reasons:\n  #  1. if the package is installed by a user who cannot write `.'\n  #     make install will fail,\n  #  2. the above comment should most certainly read\n  #     $(mkdir_p) $(DESTDIR)$(somedir)\n  #     so it does not work when $(somedir) is undefined and\n  #     $(DESTDIR) is not.\n  #  To support the latter case, we have to write\n  #     test -z \"$(somedir)\" || $(mkdir_p) $(DESTDIR)$(somedir),\n  #  so the `.' trick is pointless.\n  mkdir_p='mkdir -p --'\nelse\n  # On NextStep and OpenStep, the `mkdir' command does not\n  # recognize any option.  It will interpret all options as\n  # directories to create, and then abort because `.' already\n  # exists.\n  for d in ./-p ./--version;\n  do\n    test -d $d && rmdir $d\n  done\n  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.\n  if test -f \"$ac_aux_dir/mkinstalldirs\"; then\n    mkdir_p='$(mkinstalldirs)'\n  else\n    mkdir_p='$(install_sh) -d'\n  fi\nfi\n\nfor ac_prog in gawk mawk nawk awk\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_AWK+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$AWK\"; then\n  ac_cv_prog_AWK=\"$AWK\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_AWK=\"$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nAWK=$ac_cv_prog_AWK\nif test -n \"$AWK\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $AWK\" >&5\n$as_echo \"$AWK\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  test -n \"$AWK\" && break\ndone\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \\$(MAKE)\" >&5\n$as_echo_n \"checking whether ${MAKE-make} sets \\$(MAKE)... \" >&6; }\nset x ${MAKE-make}\nac_make=`$as_echo \"$2\" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`\nif { as_var=ac_cv_prog_make_${ac_make}_set; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat >conftest.make <<\\_ACEOF\nSHELL = /bin/sh\nall:\n\t@echo '@@@%%%=$(MAKE)=@@@%%%'\n_ACEOF\n# GNU make sometimes prints \"make[1]: Entering...\", which would confuse us.\ncase `${MAKE-make} -f conftest.make 2>/dev/null` in\n  *@@@%%%=?*=@@@%%%*)\n    eval ac_cv_prog_make_${ac_make}_set=yes;;\n  *)\n    eval ac_cv_prog_make_${ac_make}_set=no;;\nesac\nrm -f conftest.make\nfi\nif eval test \\$ac_cv_prog_make_${ac_make}_set = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n  SET_MAKE=\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n  SET_MAKE=\"MAKE=${MAKE-make}\"\nfi\n\nrm -rf .tst 2>/dev/null\nmkdir .tst 2>/dev/null\nif test -d .tst; then\n  am__leading_dot=.\nelse\n  am__leading_dot=_\nfi\nrmdir .tst 2>/dev/null\n\n# test to see if srcdir already configured\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\" &&\n   test -f $srcdir/config.status; then\n  as_fn_error \"source directory already configured; run \\\"make distclean\\\" there first\" \"$LINENO\" 5\nfi\n\n# test whether we have cygpath\nif test -z \"$CYGPATH_W\"; then\n  if (cygpath --version) >/dev/null 2>/dev/null; then\n    CYGPATH_W='cygpath -w'\n  else\n    CYGPATH_W=echo\n  fi\nfi\n\n\n# Define the identity of the package.\n PACKAGE='make'\n VERSION='3.81'\n\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE \"$PACKAGE\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define VERSION \"$VERSION\"\n_ACEOF\n\n# Some tools Automake needs.\n\nACLOCAL=${ACLOCAL-\"${am_missing_run}aclocal-${am__api_version}\"}\n\n\nAUTOCONF=${AUTOCONF-\"${am_missing_run}autoconf\"}\n\n\nAUTOMAKE=${AUTOMAKE-\"${am_missing_run}automake-${am__api_version}\"}\n\n\nAUTOHEADER=${AUTOHEADER-\"${am_missing_run}autoheader\"}\n\n\nMAKEINFO=${MAKEINFO-\"${am_missing_run}makeinfo\"}\n\ninstall_sh=${install_sh-\"$am_aux_dir/install-sh\"}\n\n# Installed binaries are usually stripped using `strip' when the user\n# run `make install-strip'.  However `strip' might not be the right\n# tool to use in cross-compilation environments, therefore Automake\n# will honor the `STRIP' environment variable to overrule this program.\nif test \"$cross_compiling\" != no; then\n  if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}strip\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}strip; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_STRIP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$STRIP\"; then\n  ac_cv_prog_STRIP=\"$STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_STRIP=\"${ac_tool_prefix}strip\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nSTRIP=$ac_cv_prog_STRIP\nif test -n \"$STRIP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $STRIP\" >&5\n$as_echo \"$STRIP\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_STRIP\"; then\n  ac_ct_STRIP=$STRIP\n  # Extract the first word of \"strip\", so it can be a program name with args.\nset dummy strip; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_STRIP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_STRIP\"; then\n  ac_cv_prog_ac_ct_STRIP=\"$ac_ct_STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_STRIP=\"strip\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP\nif test -n \"$ac_ct_STRIP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP\" >&5\n$as_echo \"$ac_ct_STRIP\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_STRIP\" = x; then\n    STRIP=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    STRIP=$ac_ct_STRIP\n  fi\nelse\n  STRIP=\"$ac_cv_prog_STRIP\"\nfi\n\nfi\nINSTALL_STRIP_PROGRAM=\"\\${SHELL} \\$(install_sh) -c -s\"\n\n# We need awk for the \"check\" target.  The system \"awk\" is bad on\n# some platforms.\n# Always define AMTAR for backward compatibility.\n\nAMTAR=${AMTAR-\"${am_missing_run}tar\"}\n\nam__tar='${AMTAR} chof - \"$$tardir\"'; am__untar='${AMTAR} xf -'\n\n\n\n\n\n\n# Checks for programs.\nac_ext=c\nac_cpp='$CPP $CFLAGS $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}gcc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}gcc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}gcc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_CC\"; then\n  ac_ct_CC=$CC\n  # Extract the first word of \"gcc\", so it can be a program name with args.\nset dummy gcc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"gcc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC\" >&5\n$as_echo \"$ac_ct_CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nelse\n  CC=\"$ac_cv_prog_CC\"\nfi\n\nif test -z \"$CC\"; then\n          if test -n \"$ac_tool_prefix\"; then\n    # Extract the first word of \"${ac_tool_prefix}cc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}cc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}cc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  fi\nfi\nif test -z \"$CC\"; then\n  # Extract the first word of \"cc\", so it can be a program name with args.\nset dummy cc; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\n  ac_prog_rejected=no\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    if test \"$as_dir/$ac_word$ac_exec_ext\" = \"/usr/ucb/cc\"; then\n       ac_prog_rejected=yes\n       continue\n     fi\n    ac_cv_prog_CC=\"cc\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nif test $ac_prog_rejected = yes; then\n  # We found a bogon in the path, so make sure we never use it.\n  set dummy $ac_cv_prog_CC\n  shift\n  if test $# != 0; then\n    # We chose a different compiler from the bogus one.\n    # However, it has the same basename, so the bogon will be chosen\n    # first if we set CC to just the basename; use the full file name.\n    shift\n    ac_cv_prog_CC=\"$as_dir/$ac_word${1+' '}$@\"\n  fi\nfi\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$CC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in cl.exe\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"$ac_tool_prefix$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CC\" >&5\n$as_echo \"$CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n    test -n \"$CC\" && break\n  done\nfi\nif test -z \"$CC\"; then\n  ac_ct_CC=$CC\n  for ac_prog in cl.exe\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"$ac_prog\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC\" >&5\n$as_echo \"$ac_ct_CC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CC\" && break\ndone\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nfi\n\nfi\n\n\ntest -z \"$CC\" && { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\n\n# Provide some information about the compiler.\n$as_echo \"$as_me:${as_lineno-$LINENO}: checking for C compiler version\" >&5\nset X $ac_compile\nac_compiler=$2\nfor ac_option in --version -v -V -qversion; do\n  { { ac_try=\"$ac_compiler $ac_option >&5\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compiler $ac_option >&5\") 2>conftest.err\n  ac_status=$?\n  if test -s conftest.err; then\n    sed '10a\\\n... rest of stderr output deleted ...\n         10q' conftest.err >conftest.er1\n    cat conftest.er1 >&5\n  fi\n  rm -f conftest.er1 conftest.err\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\ndone\n\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files a.out a.out.dSYM a.exe b.out\"\n# Try to create an executable without -o first, disregard a.out.\n# It will help us diagnose broken compilers, and finding out an intuition\n# of exeext.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the C compiler works\" >&5\n$as_echo_n \"checking whether the C compiler works... \" >&6; }\nac_link_default=`$as_echo \"$ac_link\" | sed 's/ -o *conftest[^ ]*//'`\n\n# The possible output files:\nac_files=\"a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*\"\n\nac_rmfiles=\nfor ac_file in $ac_files\ndo\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;\n    * ) ac_rmfiles=\"$ac_rmfiles $ac_file\";;\n  esac\ndone\nrm -f $ac_rmfiles\n\nif { { ac_try=\"$ac_link_default\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link_default\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.\n# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'\n# in a Makefile.  We should not override ac_cv_exeext if it was cached,\n# so that the user can short-circuit this test for compilers unknown to\n# Autoconf.\nfor ac_file in $ac_files ''\ndo\n  test -f \"$ac_file\" || continue\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )\n\t;;\n    [ab].out )\n\t# We found the default executable, but exeext='' is most\n\t# certainly right.\n\tbreak;;\n    *.* )\n\tif test \"${ac_cv_exeext+set}\" = set && test \"$ac_cv_exeext\" != no;\n\tthen :; else\n\t   ac_cv_exeext=`expr \"$ac_file\" : '[^.]*\\(\\..*\\)'`\n\tfi\n\t# We set ac_cv_exeext here because the later test for it is not\n\t# safe: cross compilers may not add the suffix if given an `-o'\n\t# argument, so we may need to know it at that point already.\n\t# Even if this section looks crufty: it has the advantage of\n\t# actually working.\n\tbreak;;\n    * )\n\tbreak;;\n  esac\ndone\ntest \"$ac_cv_exeext\" = no && ac_cv_exeext=\n\nelse\n  ac_file=''\nfi\nif test -z \"$ac_file\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n$as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\n{ as_fn_set_status 77\nas_fn_error \"C compiler cannot create executables\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name\" >&5\n$as_echo_n \"checking for C compiler default output file name... \" >&6; }\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_file\" >&5\n$as_echo \"$ac_file\" >&6; }\nac_exeext=$ac_cv_exeext\n\nrm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out\nac_clean_files=$ac_clean_files_save\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for suffix of executables\" >&5\n$as_echo_n \"checking for suffix of executables... \" >&6; }\nif { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  # If both `conftest.exe' and `conftest' are `present' (well, observable)\n# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will\n# work properly (i.e., refer to `conftest.exe'), while it won't with\n# `rm'.\nfor ac_file in conftest.exe conftest conftest.*; do\n  test -f \"$ac_file\" || continue\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;\n    *.* ) ac_cv_exeext=`expr \"$ac_file\" : '[^.]*\\(\\..*\\)'`\n\t  break;;\n    * ) break;;\n  esac\ndone\nelse\n  { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot compute suffix of executables: cannot compile and link\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\nrm -f conftest conftest$ac_cv_exeext\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext\" >&5\n$as_echo \"$ac_cv_exeext\" >&6; }\n\nrm -f conftest.$ac_ext\nEXEEXT=$ac_cv_exeext\nac_exeext=$EXEEXT\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nFILE *f = fopen (\"conftest.out\", \"w\");\n return ferror (f) || fclose (f) != 0;\n\n  ;\n  return 0;\n}\n_ACEOF\nac_clean_files=\"$ac_clean_files conftest.out\"\n# Check that the compiler produces executables we can run.  If not, either\n# the compiler is broken, or we cross compile.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling\" >&5\n$as_echo_n \"checking whether we are cross compiling... \" >&6; }\nif test \"$cross_compiling\" != yes; then\n  { { ac_try=\"$ac_link\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_link\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n  if { ac_try='./conftest$ac_cv_exeext'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then\n    cross_compiling=no\n  else\n    if test \"$cross_compiling\" = maybe; then\n\tcross_compiling=yes\n    else\n\t{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot run C compiled programs.\nIf you meant to cross compile, use \\`--host'.\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\n    fi\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $cross_compiling\" >&5\n$as_echo \"$cross_compiling\" >&6; }\n\nrm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out\nac_clean_files=$ac_clean_files_save\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for suffix of object files\" >&5\n$as_echo_n \"checking for suffix of object files... \" >&6; }\nif test \"${ac_cv_objext+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.o conftest.obj\nif { { ac_try=\"$ac_compile\"\ncase \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_compile\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; then :\n  for ac_file in conftest.o conftest.obj conftest.*; do\n  test -f \"$ac_file\" || continue;\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;\n    *) ac_cv_objext=`expr \"$ac_file\" : '.*\\.\\(.*\\)'`\n       break;;\n  esac\ndone\nelse\n  $as_echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"cannot compute suffix of object files: cannot compile\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\nrm -f conftest.$ac_cv_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext\" >&5\n$as_echo \"$ac_cv_objext\" >&6; }\nOBJEXT=$ac_cv_objext\nac_objext=$OBJEXT\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler\" >&5\n$as_echo_n \"checking whether we are using the GNU C compiler... \" >&6; }\nif test \"${ac_cv_c_compiler_gnu+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_compiler_gnu=yes\nelse\n  ac_compiler_gnu=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_c_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu\" >&5\n$as_echo \"$ac_cv_c_compiler_gnu\" >&6; }\nif test $ac_compiler_gnu = yes; then\n  GCC=yes\nelse\n  GCC=\nfi\nac_test_CFLAGS=${CFLAGS+set}\nac_save_CFLAGS=$CFLAGS\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g\" >&5\n$as_echo_n \"checking whether $CC accepts -g... \" >&6; }\nif test \"${ac_cv_prog_cc_g+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_save_c_werror_flag=$ac_c_werror_flag\n   ac_c_werror_flag=yes\n   ac_cv_prog_cc_g=no\n   CFLAGS=\"-g\"\n   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_g=yes\nelse\n  CFLAGS=\"\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n\nelse\n  ac_c_werror_flag=$ac_save_c_werror_flag\n\t CFLAGS=\"-g\"\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_g=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_c_werror_flag=$ac_save_c_werror_flag\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g\" >&5\n$as_echo \"$ac_cv_prog_cc_g\" >&6; }\nif test \"$ac_test_CFLAGS\" = set; then\n  CFLAGS=$ac_save_CFLAGS\nelif test $ac_cv_prog_cc_g = yes; then\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-g -O2\"\n  else\n    CFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-O2\"\n  else\n    CFLAGS=\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89\" >&5\n$as_echo_n \"checking for $CC option to accept ISO C89... \" >&6; }\nif test \"${ac_cv_prog_cc_c89+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_prog_cc_c89=no\nac_save_CC=$CC\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdarg.h>\n#include <stdio.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\nstruct buf { int x; };\nFILE * (*rcsopen) (struct buf *, struct stat *, int);\nstatic char *e (p, i)\n     char **p;\n     int i;\n{\n  return p[i];\n}\nstatic char *f (char * (*g) (char **, int), char **p, ...)\n{\n  char *s;\n  va_list v;\n  va_start (v,p);\n  s = g (p, va_arg (v,int));\n  va_end (v);\n  return s;\n}\n\n/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\n   function prototypes and stuff, but not '\\xHH' hex character constants.\n   These don't provoke an error unfortunately, instead are silently treated\n   as 'x'.  The following induces an error, until -std is added to get\n   proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\n   array size at least.  It's necessary to write '\\x00'==0 to get something\n   that's true only with -std.  */\nint osf4_cc_array ['\\x00' == 0 ? 1 : -1];\n\n/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters\n   inside strings and character constants.  */\n#define FOO(x) 'x'\nint xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];\n\nint test (int i, double x);\nstruct s1 {int (*f) (int a);};\nstruct s2 {int (*f) (double a);};\nint pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\nint argc;\nchar **argv;\nint\nmain ()\n{\nreturn f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \\\n\t-Ae \"-Aa -D_HPUX_SOURCE\" \"-Xc -D__EXTENSIONS__\"\ndo\n  CC=\"$ac_save_CC $ac_arg\"\n  if ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_c89=$ac_arg\nfi\nrm -f core conftest.err conftest.$ac_objext\n  test \"x$ac_cv_prog_cc_c89\" != \"xno\" && break\ndone\nrm -f conftest.$ac_ext\nCC=$ac_save_CC\n\nfi\n# AC_CACHE_VAL\ncase \"x$ac_cv_prog_cc_c89\" in\n  x)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: none needed\" >&5\n$as_echo \"none needed\" >&6; } ;;\n  xno)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: unsupported\" >&5\n$as_echo \"unsupported\" >&6; } ;;\n  *)\n    CC=\"$CC $ac_cv_prog_cc_c89\"\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89\" >&5\n$as_echo \"$ac_cv_prog_cc_c89\" >&6; } ;;\nesac\nif test \"x$ac_cv_prog_cc_c89\" != xno; then :\n\nfi\n\nac_ext=c\nac_cpp='$CPP $CFLAGS $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nDEPDIR=\"${am__leading_dot}deps\"\n\nac_config_commands=\"$ac_config_commands depfiles\"\n\n\nam_make=${MAKE-make}\ncat > confinc << 'END'\nam__doit:\n\t@echo done\n.PHONY: am__doit\nEND\n# If we don't find an include directive, just comment out the code.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make\" >&5\n$as_echo_n \"checking for style of include used by $am_make... \" >&6; }\nam__include=\"#\"\nam__quote=\n_am_result=none\n# First try GNU make style include.\necho \"include confinc\" > confmf\n# We grep out `Entering directory' and `Leaving directory'\n# messages which can occur if `w' ends up in MAKEFLAGS.\n# In particular we don't look at `^make:' because GNU make might\n# be invoked under some other name (usually \"gmake\"), in which\n# case it prints its new name instead of `make'.\nif test \"`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`\" = \"done\"; then\n   am__include=include\n   am__quote=\n   _am_result=GNU\nfi\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   if test \"`$am_make -s -f confmf 2> /dev/null`\" = \"done\"; then\n      am__include=.include\n      am__quote=\"\\\"\"\n      _am_result=BSD\n   fi\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $_am_result\" >&5\n$as_echo \"$_am_result\" >&6; }\nrm -f confinc confmf\n\n# Check whether --enable-dependency-tracking was given.\nif test \"${enable_dependency_tracking+set}\" = set; then :\n  enableval=$enable_dependency_tracking;\nfi\n\nif test \"x$enable_dependency_tracking\" != xno; then\n  am_depcomp=\"$ac_aux_dir/depcomp\"\n  AMDEPBACKSLASH='\\'\nfi\n\n\nif test \"x$enable_dependency_tracking\" != xno; then\n  AMDEP_TRUE=\n  AMDEP_FALSE='#'\nelse\n  AMDEP_TRUE='#'\n  AMDEP_FALSE=\nfi\n\n\n\n\ndepcc=\"$CC\"   am_compiler_list=\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc\" >&5\n$as_echo_n \"checking dependency style of $depcc... \" >&6; }\nif test \"${am_cv_CC_dependencies_compiler_type+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$AMDEP_TRUE\" && test -f \"$am_depcomp\"; then\n  # We make a subdir and do the tests there.  Otherwise we can end up\n  # making bogus files that we don't know about and never remove.  For\n  # instance it was reported that on HP-UX the gcc test will end up\n  # making a dummy file named `D' -- because `-MD' means `put the output\n  # in D'.\n  mkdir conftest.dir\n  # Copy depcomp to subdir because otherwise we won't find it if we're\n  # using a relative directory.\n  cp \"$am_depcomp\" conftest.dir\n  cd conftest.dir\n  # We will build objects and dependencies in a subdirectory because\n  # it helps to detect inapplicable dependency modes.  For instance\n  # both Tru64's cc and ICC support -MD to output dependencies as a\n  # side effect of compilation, but ICC will put the dependencies in\n  # the current directory while Tru64 will put them in the object\n  # directory.\n  mkdir sub\n\n  am_cv_CC_dependencies_compiler_type=none\n  if test \"$am_compiler_list\" = \"\"; then\n     am_compiler_list=`sed -n 's/^#*\\([a-zA-Z0-9]*\\))$/\\1/p' < ./depcomp`\n  fi\n  for depmode in $am_compiler_list; do\n    # Setup a source with many dependencies, because some compilers\n    # like to wrap large dependency lists on column 80 (with \\), and\n    # we should not choose a depcomp mode which is confused by this.\n    #\n    # We need to recreate these files for each test, as the compiler may\n    # overwrite some of them when testing with obscure command lines.\n    # This happens at least with the AIX C compiler.\n    : > sub/conftest.c\n    for i in 1 2 3 4 5 6; do\n      echo '#include \"conftst'$i'.h\"' >> sub/conftest.c\n      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with\n      # Solaris 8's {/usr,}/bin/sh.\n      touch sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\n    case $depmode in\n    nosideeffect)\n      # after this tag, mechanisms are not by side-effect, so they'll\n      # only be used when explicitly requested\n      if test \"x$enable_dependency_tracking\" = xyes; then\n\tcontinue\n      else\n\tbreak\n      fi\n      ;;\n    none) break ;;\n    esac\n    # We check with `-c' and `-o' for the sake of the \"dashmstdout\"\n    # mode.  It turns out that the SunPro C++ compiler does not properly\n    # handle `-M -o', and we need to detect this.\n    if depmode=$depmode \\\n       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&\n       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then\n      # icc doesn't choke on unknown options, it will just issue warnings\n      # or remarks (even with -Werror).  So we grep stderr for any message\n      # that says an option was ignored or not supported.\n      # When given -MP, icc 7.0 and 7.1 complain thusly:\n      #   icc: Command line warning: ignoring option '-M'; no argument required\n      # The diagnosis changed in icc 8.0:\n      #   icc: Command line remark: option '-MP' not supported\n      if (grep 'ignoring option' conftest.err ||\n          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else\n        am_cv_CC_dependencies_compiler_type=$depmode\n        break\n      fi\n    fi\n  done\n\n  cd ..\n  rm -rf conftest.dir\nelse\n  am_cv_CC_dependencies_compiler_type=none\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type\" >&5\n$as_echo \"$am_cv_CC_dependencies_compiler_type\" >&6; }\nCCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type\n\n\n\nif\n  test \"x$enable_dependency_tracking\" != xno \\\n  && test \"$am_cv_CC_dependencies_compiler_type\" = gcc3; then\n  am__fastdepCC_TRUE=\n  am__fastdepCC_FALSE='#'\nelse\n  am__fastdepCC_TRUE='#'\n  am__fastdepCC_FALSE=\nfi\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ranlib\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}ranlib; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_RANLIB+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$RANLIB\"; then\n  ac_cv_prog_RANLIB=\"$RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_RANLIB=\"${ac_tool_prefix}ranlib\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nRANLIB=$ac_cv_prog_RANLIB\nif test -n \"$RANLIB\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $RANLIB\" >&5\n$as_echo \"$RANLIB\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_RANLIB\"; then\n  ac_ct_RANLIB=$RANLIB\n  # Extract the first word of \"ranlib\", so it can be a program name with args.\nset dummy ranlib; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_ac_ct_RANLIB+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_RANLIB\"; then\n  ac_cv_prog_ac_ct_RANLIB=\"$ac_ct_RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_RANLIB=\"ranlib\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB\nif test -n \"$ac_ct_RANLIB\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB\" >&5\n$as_echo \"$ac_ct_RANLIB\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  if test \"x$ac_ct_RANLIB\" = x; then\n    RANLIB=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet\" >&5\n$as_echo \"$as_me: WARNING: using cross tools not prefixed with host triplet\" >&2;}\nac_tool_warned=yes ;;\nesac\n    RANLIB=$ac_ct_RANLIB\n  fi\nelse\n  RANLIB=\"$ac_cv_prog_RANLIB\"\nfi\n\nac_ext=c\nac_cpp='$CPP $CFLAGS $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor\" >&5\n$as_echo_n \"checking how to run the C preprocessor... \" >&6; }\n# On Suns, sometimes $CPP names a directory.\nif test -n \"$CPP\" && test -d \"$CPP\"; then\n  CPP=\nfi\nif test -z \"$CPP\"; then\n  if test \"${ac_cv_prog_CPP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n      # Double quotes because CPP needs to be expanded\n    for CPP in \"$CC -E\" \"$CC -E -traditional-cpp\" \"/lib/cpp\"\n    do\n      ac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n\nelse\n  # Broken: fails on valid input.\ncontinue\nfi\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  # Broken: success on invalid input.\ncontinue\nelse\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then :\n  break\nfi\n\n    done\n    ac_cv_prog_CPP=$CPP\n\nfi\n  CPP=$ac_cv_prog_CPP\nelse\n  ac_cv_prog_CPP=$CPP\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $CPP\" >&5\n$as_echo \"$CPP\" >&6; }\nac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n\nelse\n  # Broken: fails on valid input.\ncontinue\nfi\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif ac_fn_c_try_cpp \"$LINENO\"; then :\n  # Broken: success on invalid input.\ncontinue\nelse\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then :\n\nelse\n  { { $as_echo \"$as_me:${as_lineno-$LINENO}: error: in \\`$ac_pwd':\" >&5\n$as_echo \"$as_me: error: in \\`$ac_pwd':\" >&2;}\nas_fn_error \"C preprocessor \\\"$CPP\\\" fails sanity check\nSee \\`config.log' for more details.\" \"$LINENO\" 5; }\nfi\n\nac_ext=c\nac_cpp='$CPP $CFLAGS $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n# Extract the first word of \"ar\", so it can be a program name with args.\nset dummy ar; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_AR+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$AR\"; then\n  ac_cv_prog_AR=\"$AR\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_AR=\"ar\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_prog_AR\" && ac_cv_prog_AR=\"ar\"\nfi\nfi\nAR=$ac_cv_prog_AR\nif test -n \"$AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $AR\" >&5\n$as_echo \"$AR\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n# Perl is needed for the test suite (only)\n# Extract the first word of \"perl\", so it can be a program name with args.\nset dummy perl; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_prog_PERL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$PERL\"; then\n  ac_cv_prog_PERL=\"$PERL\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_PERL=\"perl\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_prog_PERL\" && ac_cv_prog_PERL=\"perl\"\nfi\nfi\nPERL=$ac_cv_prog_PERL\nif test -n \"$PERL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $PERL\" >&5\n$as_echo \"$PERL\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n# Specialized system macros\n# Make sure we can run config.sub.\n$SHELL \"$ac_aux_dir/config.sub\" sun4 >/dev/null 2>&1 ||\n  as_fn_error \"cannot run $SHELL $ac_aux_dir/config.sub\" \"$LINENO\" 5\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking build system type\" >&5\n$as_echo_n \"checking build system type... \" >&6; }\nif test \"${ac_cv_build+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_build_alias=$build_alias\ntest \"x$ac_build_alias\" = x &&\n  ac_build_alias=`$SHELL \"$ac_aux_dir/config.guess\"`\ntest \"x$ac_build_alias\" = x &&\n  as_fn_error \"cannot guess build type; you must specify one\" \"$LINENO\" 5\nac_cv_build=`$SHELL \"$ac_aux_dir/config.sub\" $ac_build_alias` ||\n  as_fn_error \"$SHELL $ac_aux_dir/config.sub $ac_build_alias failed\" \"$LINENO\" 5\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_build\" >&5\n$as_echo \"$ac_cv_build\" >&6; }\ncase $ac_cv_build in\n*-*-*) ;;\n*) as_fn_error \"invalid value of canonical build\" \"$LINENO\" 5;;\nesac\nbuild=$ac_cv_build\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_build\nshift\nbuild_cpu=$1\nbuild_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nbuild_os=$*\nIFS=$ac_save_IFS\ncase $build_os in *\\ *) build_os=`echo \"$build_os\" | sed 's/ /-/g'`;; esac\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking host system type\" >&5\n$as_echo_n \"checking host system type... \" >&6; }\nif test \"${ac_cv_host+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"x$host_alias\" = x; then\n  ac_cv_host=$ac_cv_build\nelse\n  ac_cv_host=`$SHELL \"$ac_aux_dir/config.sub\" $host_alias` ||\n    as_fn_error \"$SHELL $ac_aux_dir/config.sub $host_alias failed\" \"$LINENO\" 5\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_host\" >&5\n$as_echo \"$ac_cv_host\" >&6; }\ncase $ac_cv_host in\n*-*-*) ;;\n*) as_fn_error \"invalid value of canonical host\" \"$LINENO\" 5;;\nesac\nhost=$ac_cv_host\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_host\nshift\nhost_cpu=$1\nhost_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nhost_os=$*\nIFS=$ac_save_IFS\ncase $host_os in *\\ *) host_os=`echo \"$host_os\" | sed 's/ /-/g'`;; esac\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e\" >&5\n$as_echo_n \"checking for grep that handles long lines and -e... \" >&6; }\nif test \"${ac_cv_path_GREP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$GREP\"; then\n  ac_path_GREP_found=false\n  # Loop through the user's path and test for each of PROGNAME-LIST\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in grep ggrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_GREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_GREP\" && $as_test_x \"$ac_path_GREP\"; } || continue\n# Check for GNU ac_path_GREP and select it if it is found.\n  # Check for GNU $ac_path_GREP\ncase `\"$ac_path_GREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_GREP=\"$ac_path_GREP\" ac_path_GREP_found=:;;\n*)\n  ac_count=0\n  $as_echo_n 0123456789 >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    $as_echo 'GREP' >> \"conftest.nl\"\n    \"$ac_path_GREP\" -e 'GREP$' -e '-(cannot match)-' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    as_fn_arith $ac_count + 1 && ac_count=$as_val\n    if test $ac_count -gt ${ac_path_GREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_GREP=\"$ac_path_GREP\"\n      ac_path_GREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n      $ac_path_GREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_GREP\"; then\n    as_fn_error \"no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_GREP=$GREP\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP\" >&5\n$as_echo \"$ac_cv_path_GREP\" >&6; }\n GREP=\"$ac_cv_path_GREP\"\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for egrep\" >&5\n$as_echo_n \"checking for egrep... \" >&6; }\nif test \"${ac_cv_path_EGREP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1\n   then ac_cv_path_EGREP=\"$GREP -E\"\n   else\n     if test -z \"$EGREP\"; then\n  ac_path_EGREP_found=false\n  # Loop through the user's path and test for each of PROGNAME-LIST\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in egrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_EGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_EGREP\" && $as_test_x \"$ac_path_EGREP\"; } || continue\n# Check for GNU ac_path_EGREP and select it if it is found.\n  # Check for GNU $ac_path_EGREP\ncase `\"$ac_path_EGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_EGREP=\"$ac_path_EGREP\" ac_path_EGREP_found=:;;\n*)\n  ac_count=0\n  $as_echo_n 0123456789 >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    $as_echo 'EGREP' >> \"conftest.nl\"\n    \"$ac_path_EGREP\" 'EGREP$' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    as_fn_arith $ac_count + 1 && ac_count=$as_val\n    if test $ac_count -gt ${ac_path_EGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_EGREP=\"$ac_path_EGREP\"\n      ac_path_EGREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n      $ac_path_EGREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_EGREP\"; then\n    as_fn_error \"no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_EGREP=$EGREP\nfi\n\n   fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP\" >&5\n$as_echo \"$ac_cv_path_EGREP\" >&6; }\n EGREP=\"$ac_cv_path_EGREP\"\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ANSI C header files\" >&5\n$as_echo_n \"checking for ANSI C header files... \" >&6; }\nif test \"${ac_cv_header_stdc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <float.h>\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stdc=yes\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test $ac_cv_header_stdc = yes; then\n  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <string.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"memchr\" >/dev/null 2>&1; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"free\" >/dev/null 2>&1; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.\n  if test \"$cross_compiling\" = yes; then :\n  :\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ctype.h>\n#include <stdlib.h>\n#if ((' ' & 0x0FF) == 0x020)\n# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')\n# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))\n#else\n# define ISLOWER(c) \\\n\t\t   (('a' <= (c) && (c) <= 'i') \\\n\t\t     || ('j' <= (c) && (c) <= 'r') \\\n\t\t     || ('s' <= (c) && (c) <= 'z'))\n# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))\n#endif\n\n#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))\nint\nmain ()\n{\n  int i;\n  for (i = 0; i < 256; i++)\n    if (XOR (islower (i), ISLOWER (i))\n\t|| toupper (i) != TOUPPER (i))\n      return 2;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc\" >&5\n$as_echo \"$ac_cv_header_stdc\" >&6; }\nif test $ac_cv_header_stdc = yes; then\n\n$as_echo \"#define STDC_HEADERS 1\" >>confdefs.h\n\nfi\n\n# On IRIX 5.3, sys/types and inttypes.h are conflicting.\nfor ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \\\n\t\t  inttypes.h stdint.h unistd.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_compile \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\n\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"minix/config.h\" \"ac_cv_header_minix_config_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_minix_config_h\" = x\"\"yes; then :\n  MINIX=yes\nelse\n  MINIX=\nfi\n\n\n  if test \"$MINIX\" = yes; then\n\n$as_echo \"#define _POSIX_SOURCE 1\" >>confdefs.h\n\n\n$as_echo \"#define _POSIX_1_SOURCE 2\" >>confdefs.h\n\n\n$as_echo \"#define _MINIX 1\" >>confdefs.h\n\n  fi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__\" >&5\n$as_echo_n \"checking whether it is safe to define __EXTENSIONS__... \" >&6; }\nif test \"${ac_cv_safe_to_define___extensions__+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#\t  define __EXTENSIONS__ 1\n\t  $ac_includes_default\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_safe_to_define___extensions__=yes\nelse\n  ac_cv_safe_to_define___extensions__=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__\" >&5\n$as_echo \"$ac_cv_safe_to_define___extensions__\" >&6; }\n  test $ac_cv_safe_to_define___extensions__ = yes &&\n    $as_echo \"#define __EXTENSIONS__ 1\" >>confdefs.h\n\n  $as_echo \"#define _ALL_SOURCE 1\" >>confdefs.h\n\n  $as_echo \"#define _GNU_SOURCE 1\" >>confdefs.h\n\n  $as_echo \"#define _POSIX_PTHREAD_SEMANTICS 1\" >>confdefs.h\n\n  $as_echo \"#define _TANDEM_SOURCE 1\" >>confdefs.h\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing strerror\" >&5\n$as_echo_n \"checking for library containing strerror... \" >&6; }\nif test \"${ac_cv_search_strerror+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar strerror ();\nint\nmain ()\n{\nreturn strerror ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' cposix; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_strerror=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_strerror+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_strerror+set}\" = set; then :\n\nelse\n  ac_cv_search_strerror=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror\" >&5\n$as_echo \"$ac_cv_search_strerror\" >&6; }\nac_res=$ac_cv_search_strerror\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nfi\n\n\n\n# Needed for ansi2knr\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for function prototypes\" >&5\n$as_echo_n \"checking for function prototypes... \" >&6; }\nif test \"$ac_cv_prog_cc_c89\" != no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define PROTOTYPES 1\" >>confdefs.h\n\n\n$as_echo \"#define __PROTOTYPES 1\" >>confdefs.h\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n  U= ANSI2KNR=\nelse\n  U=_ ANSI2KNR=./ansi2knr\nfi\n# Ensure some checks needed by ansi2knr itself.\n\nfor ac_header in string.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"string.h\" \"ac_cv_header_string_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_string_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_STRING_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n# Enable gettext, in \"external\" mode.\n\n\n\n        MKINSTALLDIRS=\n  if test -n \"$ac_aux_dir\"; then\n    case \"$ac_aux_dir\" in\n      /*) MKINSTALLDIRS=\"$ac_aux_dir/mkinstalldirs\" ;;\n      *) MKINSTALLDIRS=\"\\$(top_builddir)/$ac_aux_dir/mkinstalldirs\" ;;\n    esac\n  fi\n  if test -z \"$MKINSTALLDIRS\"; then\n    MKINSTALLDIRS=\"\\$(top_srcdir)/mkinstalldirs\"\n  fi\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether NLS is requested\" >&5\n$as_echo_n \"checking whether NLS is requested... \" >&6; }\n    # Check whether --enable-nls was given.\nif test \"${enable_nls+set}\" = set; then :\n  enableval=$enable_nls; USE_NLS=$enableval\nelse\n  USE_NLS=yes\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n\n\n\n\n\n\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"msgfmt\", so it can be a program name with args.\nset dummy msgfmt; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_MSGFMT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$MSGFMT\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_MSGFMT=\"$MSGFMT\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n            ac_cv_path_MSGFMT=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_MSGFMT\" && ac_cv_path_MSGFMT=\":\"\n    ;;\nesac\nfi\nMSGFMT=\"$ac_cv_path_MSGFMT\"\nif test \"$MSGFMT\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MSGFMT\" >&5\n$as_echo \"$MSGFMT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n  # Extract the first word of \"gmsgfmt\", so it can be a program name with args.\nset dummy gmsgfmt; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_GMSGFMT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $GMSGFMT in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_GMSGFMT=\"$GMSGFMT\" # Let the user override the test with a path.\n  ;;\n  *)\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_path_GMSGFMT=\"$as_dir/$ac_word$ac_exec_ext\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\n  done\nIFS=$as_save_IFS\n\n  test -z \"$ac_cv_path_GMSGFMT\" && ac_cv_path_GMSGFMT=\"$MSGFMT\"\n  ;;\nesac\nfi\nGMSGFMT=$ac_cv_path_GMSGFMT\nif test -n \"$GMSGFMT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $GMSGFMT\" >&5\n$as_echo \"$GMSGFMT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"xgettext\", so it can be a program name with args.\nset dummy xgettext; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_XGETTEXT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$XGETTEXT\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_XGETTEXT=\"$XGETTEXT\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n            ac_cv_path_XGETTEXT=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_XGETTEXT\" && ac_cv_path_XGETTEXT=\":\"\n    ;;\nesac\nfi\nXGETTEXT=\"$ac_cv_path_XGETTEXT\"\nif test \"$XGETTEXT\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $XGETTEXT\" >&5\n$as_echo \"$XGETTEXT\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n    rm -f messages.po\n\n\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Find out how to test for executable files. Don't use a zero-byte file,\n# as systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  ac_executable_p=\"test -x\"\nelse\n  ac_executable_p=\"test -f\"\nfi\nrm -f conf$$.file\n\n# Extract the first word of \"msgmerge\", so it can be a program name with args.\nset dummy msgmerge; ac_word=$2\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_word\" >&5\n$as_echo_n \"checking for $ac_word... \" >&6; }\nif test \"${ac_cv_path_MSGMERGE+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case \"$MSGMERGE\" in\n  [\\\\/]* | ?:[\\\\/]*)\n    ac_cv_path_MSGMERGE=\"$MSGMERGE\" # Let the user override the test with a path.\n    ;;\n  *)\n    ac_save_IFS=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH; do\n      IFS=\"$ac_save_IFS\"\n      test -z \"$ac_dir\" && ac_dir=.\n      for ac_exec_ext in '' $ac_executable_extensions; do\n        if $ac_executable_p \"$ac_dir/$ac_word$ac_exec_ext\"; then\n          if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then\n            ac_cv_path_MSGMERGE=\"$ac_dir/$ac_word$ac_exec_ext\"\n            break 2\n          fi\n        fi\n      done\n    done\n    IFS=\"$ac_save_IFS\"\n  test -z \"$ac_cv_path_MSGMERGE\" && ac_cv_path_MSGMERGE=\":\"\n    ;;\nesac\nfi\nMSGMERGE=\"$ac_cv_path_MSGMERGE\"\nif test \"$MSGMERGE\" != \":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MSGMERGE\" >&5\n$as_echo \"$MSGMERGE\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n      if test \"$GMSGFMT\" != \":\"; then\n            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&\n       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      GMSGFMT=`echo \"$GMSGFMT\" | sed -e 's,^.*/,,'`\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it\" >&5\n$as_echo \"found $GMSGFMT program is not GNU msgfmt; ignore it\" >&6; }\n      GMSGFMT=\":\"\n    fi\n  fi\n\n      if test \"$XGETTEXT\" != \":\"; then\n            if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&\n       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then\n      : ;\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it\" >&5\n$as_echo \"found xgettext program is not GNU xgettext; ignore it\" >&6; }\n      XGETTEXT=\":\"\n    fi\n        rm -f messages.po\n  fi\n\n  ac_config_commands=\"$ac_config_commands default-1\"\n\n\n\n      if test \"X$prefix\" = \"XNONE\"; then\n    acl_final_prefix=\"$ac_default_prefix\"\n  else\n    acl_final_prefix=\"$prefix\"\n  fi\n  if test \"X$exec_prefix\" = \"XNONE\"; then\n    acl_final_exec_prefix='${prefix}'\n  else\n    acl_final_exec_prefix=\"$exec_prefix\"\n  fi\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  eval acl_final_exec_prefix=\\\"$acl_final_exec_prefix\\\"\n  prefix=\"$acl_save_prefix\"\n\n\n# Check whether --with-gnu-ld was given.\nif test \"${with_gnu_ld+set}\" = set; then :\n  withval=$with_gnu_ld; test \"$withval\" = no || with_gnu_ld=yes\nelse\n  with_gnu_ld=no\nfi\n\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ld used by GCC\" >&5\n$as_echo_n \"checking for ld used by GCC... \" >&6; }\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [\\\\/]* | [A-Za-z]:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the path of ld\n      ac_prog=`echo $ac_prog| sed 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| sed \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU ld\" >&5\n$as_echo_n \"checking for GNU ld... \" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for non-GNU ld\" >&5\n$as_echo_n \"checking for non-GNU ld... \" >&6; }\nfi\nif test \"${acl_cv_path_LD+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$LD\"; then\n  IFS=\"${IFS= \t}\"; ac_save_ifs=\"$IFS\"; IFS=\"${IFS}${PATH_SEPARATOR-:}\"\n  for ac_dir in $PATH; do\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      acl_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some GNU ld's only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$acl_cv_path_LD\" -v 2>&1 < /dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break ;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break ;;\n      esac\n    fi\n  done\n  IFS=\"$ac_save_ifs\"\nelse\n  acl_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$acl_cv_path_LD\"\nif test -n \"$LD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LD\" >&5\n$as_echo \"$LD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\ntest -z \"$LD\" && as_fn_error \"no acceptable ld found in \\$PATH\" \"$LINENO\" 5\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld\" >&5\n$as_echo_n \"checking if the linker ($LD) is GNU ld... \" >&6; }\nif test \"${acl_cv_prog_gnu_ld+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU ld's only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  acl_cv_prog_gnu_ld=yes ;;\n*)\n  acl_cv_prog_gnu_ld=no ;;\nesac\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld\" >&5\n$as_echo \"$acl_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$acl_cv_prog_gnu_ld\n\n\n\n                                                { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for shared library run path origin\" >&5\n$as_echo_n \"checking for shared library run path origin... \" >&6; }\nif test \"${acl_cv_rpath+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n    CC=\"$CC\" GCC=\"$GCC\" LDFLAGS=\"$LDFLAGS\" LD=\"$LD\" with_gnu_ld=\"$with_gnu_ld\" \\\n    ${CONFIG_SHELL-/bin/sh} \"$ac_aux_dir/config.rpath\" \"$host\" > conftest.sh\n    . ./conftest.sh\n    rm -f ./conftest.sh\n    acl_cv_rpath=done\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath\" >&5\n$as_echo \"$acl_cv_rpath\" >&6; }\n  wl=\"$acl_cv_wl\"\n  libext=\"$acl_cv_libext\"\n  shlibext=\"$acl_cv_shlibext\"\n  hardcode_libdir_flag_spec=\"$acl_cv_hardcode_libdir_flag_spec\"\n  hardcode_libdir_separator=\"$acl_cv_hardcode_libdir_separator\"\n  hardcode_direct=\"$acl_cv_hardcode_direct\"\n  hardcode_minus_L=\"$acl_cv_hardcode_minus_L\"\n    # Check whether --enable-rpath was given.\nif test \"${enable_rpath+set}\" = set; then :\n  enableval=$enable_rpath; :\nelse\n  enable_rpath=yes\nfi\n\n\n\n\n\n\n\n\n    use_additional=yes\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n\n# Check whether --with-libiconv-prefix was given.\nif test \"${with_libiconv_prefix+set}\" = set; then :\n  withval=$with_libiconv_prefix;\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n\nfi\n\n      LIBICONV=\n  LTLIBICONV=\n  INCICONV=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='iconv '\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n                        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIBICONV=\"${LIBICONV}${LIBICONV:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }$value\"\n          else\n                                    :\n          fi\n        else\n                              found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIBICONV; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n                        LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n                                                        if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n              else\n                                                                                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                                if test \"$hardcode_direct\" = yes; then\n                                                      LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                                                            LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                                                            haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                                                                                haveit=\n                    for x in $LDFLAGS $LIBICONV; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                                                                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_so\"\n                    else\n                                                                                                                                                                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }$found_a\"\n              else\n                                                LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name\"\n              fi\n            fi\n                        additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n                                                                                                                if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux*) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INCICONV; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                                            INCICONV=\"${INCICONV}${INCICONV:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n                        if test -n \"$found_la\"; then\n                                                        save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n                            for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                                                                                                                                                                if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux*) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIBICONV; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIBICONV; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                                                                  haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                                                                  haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                                        names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                                                                                names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                                        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$dep\"\n                    LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n                                                            LIBICONV=\"${LIBICONV}${LIBICONV:+ }-l$name\"\n            LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n                        alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n            acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIBICONV=\"${LIBICONV}${LIBICONV:+ }$flag\"\n    else\n            for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIBICONV=\"${LIBICONV}${LIBICONV:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n            for found_dir in $ltrpathdirs; do\n      LTLIBICONV=\"${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir\"\n    done\n  fi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether NLS is requested\" >&5\n$as_echo_n \"checking whether NLS is requested... \" >&6; }\n    # Check whether --enable-nls was given.\nif test \"${enable_nls+set}\" = set; then :\n  enableval=$enable_nls; USE_NLS=$enableval\nelse\n  USE_NLS=yes\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n\n\n\n\n  LIBINTL=\n  LTLIBINTL=\n  POSUB=\n\n    if test \"$USE_NLS\" = \"yes\"; then\n    gt_use_preinstalled_gnugettext=no\n\n\n\n\n\n\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc\" >&5\n$as_echo_n \"checking for GNU gettext in libc... \" >&6; }\nif test \"${gt_cv_func_gnugettext1_libc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern int *_nl_domain_bindings;\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_domain_bindings\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  gt_cv_func_gnugettext1_libc=yes\nelse\n  gt_cv_func_gnugettext1_libc=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc\" >&5\n$as_echo \"$gt_cv_func_gnugettext1_libc\" >&6; }\n\n        if test \"$gt_cv_func_gnugettext1_libc\" != \"yes\"; then\n\n\n\n\n\n          am_save_CPPFLAGS=\"$CPPFLAGS\"\n\n  for element in $INCICONV; do\n    haveit=\n    for x in $CPPFLAGS; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }$element\"\n    fi\n  done\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for iconv\" >&5\n$as_echo_n \"checking for iconv... \" >&6; }\nif test \"${am_cv_func_iconv+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n    am_cv_func_iconv=\"no, consider installing GNU libiconv\"\n    am_cv_lib_iconv=no\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <iconv.h>\nint\nmain ()\n{\niconv_t cd = iconv_open(\"\",\"\");\n       iconv(cd,NULL,NULL,NULL,NULL);\n       iconv_close(cd);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  am_cv_func_iconv=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n    if test \"$am_cv_func_iconv\" != yes; then\n      am_save_LIBS=\"$LIBS\"\n      LIBS=\"$LIBS $LIBICONV\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <iconv.h>\nint\nmain ()\n{\niconv_t cd = iconv_open(\"\",\"\");\n         iconv(cd,NULL,NULL,NULL,NULL);\n         iconv_close(cd);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  am_cv_lib_iconv=yes\n        am_cv_func_iconv=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n      LIBS=\"$am_save_LIBS\"\n    fi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv\" >&5\n$as_echo \"$am_cv_func_iconv\" >&6; }\n  if test \"$am_cv_func_iconv\" = yes; then\n\n$as_echo \"#define HAVE_ICONV 1\" >>confdefs.h\n\n  fi\n  if test \"$am_cv_lib_iconv\" = yes; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to link with libiconv\" >&5\n$as_echo_n \"checking how to link with libiconv... \" >&6; }\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIBICONV\" >&5\n$as_echo \"$LIBICONV\" >&6; }\n  else\n            CPPFLAGS=\"$am_save_CPPFLAGS\"\n    LIBICONV=\n    LTLIBICONV=\n  fi\n\n\n\n\n\n\n    use_additional=yes\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n\n# Check whether --with-libintl-prefix was given.\nif test \"${with_libintl_prefix+set}\" = set; then :\n  withval=$with_libintl_prefix;\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n\nfi\n\n      LIBINTL=\n  LTLIBINTL=\n  INCINTL=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='intl '\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n                        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIBINTL=\"${LIBINTL}${LIBINTL:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }$value\"\n          else\n                                    :\n          fi\n        else\n                              found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIBINTL; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n                        LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n                                                        if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n              else\n                                                                                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                                if test \"$hardcode_direct\" = yes; then\n                                                      LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                                                            LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                                                            haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                                                                                haveit=\n                    for x in $LDFLAGS $LIBINTL; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                                                                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_so\"\n                    else\n                                                                                                                                                                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }$found_a\"\n              else\n                                                LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name\"\n              fi\n            fi\n                        additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n                                                                                                                if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux*) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INCINTL; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                                            INCINTL=\"${INCINTL}${INCINTL:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n                        if test -n \"$found_la\"; then\n                                                        save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n                            for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                                                                                                                                                                if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux*) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIBINTL; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIBINTL; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                                                        LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                                                                  haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                                                                  haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                                        names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                                                                                names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                                        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$dep\"\n                    LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n                                                            LIBINTL=\"${LIBINTL}${LIBINTL:+ }-l$name\"\n            LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n                        alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n            acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIBINTL=\"${LIBINTL}${LIBINTL:+ }$flag\"\n    else\n            for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIBINTL=\"${LIBINTL}${LIBINTL:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n            for found_dir in $ltrpathdirs; do\n      LTLIBINTL=\"${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir\"\n    done\n  fi\n\n          { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl\" >&5\n$as_echo_n \"checking for GNU gettext in libintl... \" >&6; }\nif test \"${gt_cv_func_gnugettext1_libintl+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  gt_save_CPPFLAGS=\"$CPPFLAGS\"\n            CPPFLAGS=\"$CPPFLAGS $INCINTL\"\n            gt_save_LIBS=\"$LIBS\"\n            LIBS=\"$LIBS $LIBINTL\"\n                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_expand_alias (0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  gt_cv_func_gnugettext1_libintl=yes\nelse\n  gt_cv_func_gnugettext1_libintl=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n                        if test \"$gt_cv_func_gnugettext1_libintl\" != yes && test -n \"$LIBICONV\"; then\n              LIBS=\"$LIBS $LIBICONV\"\n              cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <libintl.h>\nextern int _nl_msg_cat_cntr;\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\nconst char *_nl_expand_alias ();\nint\nmain ()\n{\nbindtextdomain (\"\", \"\");\nreturn (int) gettext (\"\") + _nl_msg_cat_cntr + *_nl_expand_alias (0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  LIBINTL=\"$LIBINTL $LIBICONV\"\n                LTLIBINTL=\"$LTLIBINTL $LTLIBICONV\"\n                gt_cv_func_gnugettext1_libintl=yes\n\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n            fi\n            CPPFLAGS=\"$gt_save_CPPFLAGS\"\n            LIBS=\"$gt_save_LIBS\"\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl\" >&5\n$as_echo \"$gt_cv_func_gnugettext1_libintl\" >&6; }\n        fi\n\n                                        if test \"$gt_cv_func_gnugettext1_libc\" = \"yes\" \\\n           || { test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\" \\\n                && test \"$PACKAGE\" != gettext-runtime \\\n                && test \"$PACKAGE\" != gettext-tools; }; then\n          gt_use_preinstalled_gnugettext=yes\n        else\n                    LIBINTL=\n          LTLIBINTL=\n          INCINTL=\n        fi\n\n\n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\" \\\n       || test \"$nls_cv_use_gnu_gettext\" = \"yes\"; then\n\n$as_echo \"#define ENABLE_NLS 1\" >>confdefs.h\n\n    else\n      USE_NLS=no\n    fi\n  fi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to use NLS\" >&5\n$as_echo_n \"checking whether to use NLS... \" >&6; }\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_NLS\" >&5\n$as_echo \"$USE_NLS\" >&6; }\n  if test \"$USE_NLS\" = \"yes\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from\" >&5\n$as_echo_n \"checking where the gettext function comes from... \" >&6; }\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\"; then\n        gt_source=\"external libintl\"\n      else\n        gt_source=\"libc\"\n      fi\n    else\n      gt_source=\"included intl directory\"\n    fi\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gt_source\" >&5\n$as_echo \"$gt_source\" >&6; }\n  fi\n\n  if test \"$USE_NLS\" = \"yes\"; then\n\n    if test \"$gt_use_preinstalled_gnugettext\" = \"yes\"; then\n      if test \"$gt_cv_func_gnugettext1_libintl\" = \"yes\"; then\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to link with libintl\" >&5\n$as_echo_n \"checking how to link with libintl... \" >&6; }\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIBINTL\" >&5\n$as_echo \"$LIBINTL\" >&6; }\n\n  for element in $INCINTL; do\n    haveit=\n    for x in $CPPFLAGS; do\n\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  eval x=\\\"$x\\\"\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }$element\"\n    fi\n  done\n\n      fi\n\n\n$as_echo \"#define HAVE_GETTEXT 1\" >>confdefs.h\n\n\n$as_echo \"#define HAVE_DCGETTEXT 1\" >>confdefs.h\n\n    fi\n\n        POSUB=po\n  fi\n\n\n\n    INTLLIBS=\"$LIBINTL\"\n\n\n\n\n\n\n\n# This test must come as early as possible after the compiler configuration\n# tests, because the choice of the file model can (in principle) affect\n# whether functions and headers are available, whether they work, etc.\n# Check whether --enable-largefile was given.\nif test \"${enable_largefile+set}\" = set; then :\n  enableval=$enable_largefile;\nfi\n\nif test \"$enable_largefile\" != no; then\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files\" >&5\n$as_echo_n \"checking for special C compiler options needed for large files... \" >&6; }\nif test \"${ac_cv_sys_largefile_CC+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_sys_largefile_CC=no\n     if test \"$GCC\" != yes; then\n       ac_save_CC=$CC\n       while :; do\n\t # IRIX 6.2 and later do not support large files by default,\n\t # so use the C compiler's -n32 option if that helps.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\n\t if ac_fn_c_try_compile \"$LINENO\"; then :\n  break\nfi\nrm -f core conftest.err conftest.$ac_objext\n\t CC=\"$CC -n32\"\n\t if ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_largefile_CC=' -n32'; break\nfi\nrm -f core conftest.err conftest.$ac_objext\n\t break\n       done\n       CC=$ac_save_CC\n       rm -f conftest.$ac_ext\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC\" >&5\n$as_echo \"$ac_cv_sys_largefile_CC\" >&6; }\n  if test \"$ac_cv_sys_largefile_CC\" != no; then\n    CC=$CC$ac_cv_sys_largefile_CC\n  fi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files\" >&5\n$as_echo_n \"checking for _FILE_OFFSET_BITS value needed for large files... \" >&6; }\nif test \"${ac_cv_sys_file_offset_bits+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  while :; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_file_offset_bits=no; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#define _FILE_OFFSET_BITS 64\n#include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_file_offset_bits=64; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  ac_cv_sys_file_offset_bits=unknown\n  break\ndone\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits\" >&5\n$as_echo \"$ac_cv_sys_file_offset_bits\" >&6; }\ncase $ac_cv_sys_file_offset_bits in #(\n  no | unknown) ;;\n  *)\ncat >>confdefs.h <<_ACEOF\n#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits\n_ACEOF\n;;\nesac\nrm -rf conftest*\n  if test $ac_cv_sys_file_offset_bits = unknown; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files\" >&5\n$as_echo_n \"checking for _LARGE_FILES value needed for large files... \" >&6; }\nif test \"${ac_cv_sys_large_files+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  while :; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_large_files=no; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#define _LARGE_FILES 1\n#include <sys/types.h>\n /* Check that off_t can represent 2**63 - 1 correctly.\n    We can't simply define LARGE_OFF_T to be 9223372036854775807,\n    since some C++ compilers masquerading as C compilers\n    incorrectly reject 9223372036854775807.  */\n#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))\n  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721\n\t\t       && LARGE_OFF_T % 2147483647 == 1)\n\t\t      ? 1 : -1];\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_sys_large_files=1; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  ac_cv_sys_large_files=unknown\n  break\ndone\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files\" >&5\n$as_echo \"$ac_cv_sys_large_files\" >&6; }\ncase $ac_cv_sys_large_files in #(\n  no | unknown) ;;\n  *)\ncat >>confdefs.h <<_ACEOF\n#define _LARGE_FILES $ac_cv_sys_large_files\n_ACEOF\n;;\nesac\nrm -rf conftest*\n  fi\nfi\n\n\n# Checks for libraries.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing getpwnam\" >&5\n$as_echo_n \"checking for library containing getpwnam... \" >&6; }\nif test \"${ac_cv_search_getpwnam+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getpwnam ();\nint\nmain ()\n{\nreturn getpwnam ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' sun; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_getpwnam=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_getpwnam+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_getpwnam+set}\" = set; then :\n\nelse\n  ac_cv_search_getpwnam=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getpwnam\" >&5\n$as_echo \"$ac_cv_search_getpwnam\" >&6; }\nac_res=$ac_cv_search_getpwnam\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nfi\n\n\n# Checks for header files.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ANSI C header files\" >&5\n$as_echo_n \"checking for ANSI C header files... \" >&6; }\nif test \"${ac_cv_header_stdc+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <float.h>\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stdc=yes\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test $ac_cv_header_stdc = yes; then\n  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <string.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"memchr\" >/dev/null 2>&1; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"free\" >/dev/null 2>&1; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.\n  if test \"$cross_compiling\" = yes; then :\n  :\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <ctype.h>\n#include <stdlib.h>\n#if ((' ' & 0x0FF) == 0x020)\n# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')\n# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))\n#else\n# define ISLOWER(c) \\\n\t\t   (('a' <= (c) && (c) <= 'i') \\\n\t\t     || ('j' <= (c) && (c) <= 'r') \\\n\t\t     || ('s' <= (c) && (c) <= 'z'))\n# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))\n#endif\n\n#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))\nint\nmain ()\n{\n  int i;\n  for (i = 0; i < 256; i++)\n    if (XOR (islower (i), ISLOWER (i))\n\t|| toupper (i) != TOUPPER (i))\n      return 2;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc\" >&5\n$as_echo \"$ac_cv_header_stdc\" >&6; }\nif test $ac_cv_header_stdc = yes; then\n\n$as_echo \"#define STDC_HEADERS 1\" >>confdefs.h\n\nfi\n\nac_header_dirent=no\nfor ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do\n  as_ac_Header=`$as_echo \"ac_cv_header_dirent_$ac_hdr\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR\" >&5\n$as_echo_n \"checking for $ac_hdr that defines DIR... \" >&6; }\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <$ac_hdr>\n\nint\nmain ()\n{\nif ((DIR *) 0)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_ac_Header=yes\"\nelse\n  eval \"$as_ac_Header=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\neval ac_res=\\$$as_ac_Header\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_hdr\" | $as_tr_cpp` 1\n_ACEOF\n\nac_header_dirent=$ac_hdr; break\nfi\n\ndone\n# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.\nif test $ac_header_dirent = dirent.h; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing opendir\" >&5\n$as_echo_n \"checking for library containing opendir... \" >&6; }\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar opendir ();\nint\nmain ()\n{\nreturn opendir ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' dir; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_opendir=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_opendir+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n\nelse\n  ac_cv_search_opendir=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir\" >&5\n$as_echo \"$ac_cv_search_opendir\" >&6; }\nac_res=$ac_cv_search_opendir\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing opendir\" >&5\n$as_echo_n \"checking for library containing opendir... \" >&6; }\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar opendir ();\nint\nmain ()\n{\nreturn opendir ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' x; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_opendir=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_opendir+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_opendir+set}\" = set; then :\n\nelse\n  ac_cv_search_opendir=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir\" >&5\n$as_echo \"$ac_cv_search_opendir\" >&6; }\nac_res=$ac_cv_search_opendir\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nfi\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken\" >&5\n$as_echo_n \"checking whether stat file-mode macros are broken... \" >&6; }\nif test \"${ac_cv_header_stat_broken+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/stat.h>\n\n#if defined S_ISBLK && defined S_IFDIR\nextern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];\n#endif\n\n#if defined S_ISBLK && defined S_IFCHR\nextern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];\n#endif\n\n#if defined S_ISLNK && defined S_IFREG\nextern char c3[S_ISLNK (S_IFREG) ? -1 : 1];\n#endif\n\n#if defined S_ISSOCK && defined S_IFREG\nextern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_stat_broken=no\nelse\n  ac_cv_header_stat_broken=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken\" >&5\n$as_echo \"$ac_cv_header_stat_broken\" >&6; }\nif test $ac_cv_header_stat_broken = yes; then\n\n$as_echo \"#define STAT_MACROS_BROKEN 1\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included\" >&5\n$as_echo_n \"checking whether time.h and sys/time.h may both be included... \" >&6; }\nif test \"${ac_cv_header_time+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/time.h>\n#include <time.h>\n\nint\nmain ()\n{\nif ((struct tm *) 0)\nreturn 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_time=yes\nelse\n  ac_cv_header_time=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time\" >&5\n$as_echo \"$ac_cv_header_time\" >&6; }\nif test $ac_cv_header_time = yes; then\n\n$as_echo \"#define TIME_WITH_SYS_TIME 1\" >>confdefs.h\n\nfi\n\nfor ac_header in stdlib.h locale.h unistd.h limits.h fcntl.h string.h \\\n\t\t memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_mongrel \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\n\ndone\n\n\n# Set a flag if we have an ANSI C compiler\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n\n$as_echo \"#define HAVE_ANSI_COMPILER 1\" >>confdefs.h\n\nfi\n\n\n# Determine what kind of variadic function calls we support\nfor ac_header in stdarg.h varargs.h\ndo :\n  as_ac_Header=`$as_echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nac_fn_c_check_header_mongrel \"$LINENO\" \"$ac_header\" \"$as_ac_Header\" \"$ac_includes_default\"\neval as_val=\\$$as_ac_Header\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n break\nfi\n\ndone\n\n\nif test \"x$CC\" != xcc; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together\" >&5\n$as_echo_n \"checking whether $CC and cc understand -c and -o together... \" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together\" >&5\n$as_echo_n \"checking whether cc understands -c and -o together... \" >&6; }\nfi\nset dummy $CC; ac_cc=`$as_echo \"$2\" |\n\t\t      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`\nif { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\n# Make sure it works both with $CC and with simple cc.\n# We do the test twice because some compilers refuse to overwrite an\n# existing .o file with -o, though they will create one.\nac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'\nrm -f conftest2.*\nif { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } &&\n   test -f conftest2.$ac_objext && { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; };\nthen\n  eval ac_cv_prog_cc_${ac_cc}_c_o=yes\n  if test \"x$CC\" != xcc; then\n    # Test first that cc exists at all.\n    if { ac_try='cc -c conftest.$ac_ext >&5'\n  { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }; }; then\n      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'\n      rm -f conftest2.*\n      if { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } &&\n\t test -f conftest2.$ac_objext && { { case \"(($ac_try\" in\n  *\\\"* | *\\`* | *\\\\*) ac_try_echo=\\$ac_try;;\n  *) ac_try_echo=$ac_try;;\nesac\neval ac_try_echo=\"\\\"\\$as_me:${as_lineno-$LINENO}: $ac_try_echo\\\"\"\n$as_echo \"$ac_try_echo\"; } >&5\n  (eval \"$ac_try\") 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; };\n      then\n\t# cc works too.\n\t:\n      else\n\t# cc exists but doesn't like -o.\n\teval ac_cv_prog_cc_${ac_cc}_c_o=no\n      fi\n    fi\n  fi\nelse\n  eval ac_cv_prog_cc_${ac_cc}_c_o=no\nfi\nrm -f core conftest*\n\nfi\nif eval test \\$ac_cv_prog_cc_${ac_cc}_c_o = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n\n$as_echo \"#define NO_MINUS_C_MINUS_O 1\" >>confdefs.h\n\nfi\n\n# FIXME: we rely on the cache variable name because\n# there is no other way.\nset dummy $CC\nac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`\nif eval \"test \\\"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\\\" != yes\"; then\n   # Losing compiler, so override with the script.\n   # FIXME: It is wrong to rewrite CC.\n   # But if we don't then we get into trouble of one sort or another.\n   # A longer-term fix would be to have automake use am__CC in this case,\n   # and then we could set am__CC=\"\\$(top_srcdir)/compile \\$(CC)\"\n   CC=\"$am_aux_dir/compile $CC\"\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const\" >&5\n$as_echo_n \"checking for an ANSI C-conforming const... \" >&6; }\nif test \"${ac_cv_c_const+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n/* FIXME: Include the comments suggested by Paul. */\n#ifndef __cplusplus\n  /* Ultrix mips cc rejects this.  */\n  typedef int charset[2];\n  const charset cs;\n  /* SunOS 4.1.1 cc rejects this.  */\n  char const *const *pcpcc;\n  char **ppc;\n  /* NEC SVR4.0.2 mips cc rejects this.  */\n  struct point {int x, y;};\n  static struct point const zero = {0,0};\n  /* AIX XL C 1.02.0.0 rejects this.\n     It does not let you subtract one const X* pointer from another in\n     an arm of an if-expression whose if-part is not a constant\n     expression */\n  const char *g = \"string\";\n  pcpcc = &g + (g ? g-g : 0);\n  /* HPUX 7.0 cc rejects these. */\n  ++pcpcc;\n  ppc = (char**) pcpcc;\n  pcpcc = (char const *const *) ppc;\n  { /* SCO 3.2v4 cc rejects this.  */\n    char *t;\n    char const *s = 0 ? (char *) 0 : (char const *) 0;\n\n    *t++ = 0;\n    if (s) return 0;\n  }\n  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */\n    int x[] = {25, 17};\n    const int *foo = &x[0];\n    ++foo;\n  }\n  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */\n    typedef const int *iptr;\n    iptr p = 0;\n    ++p;\n  }\n  { /* AIX XL C 1.02.0.0 rejects this saying\n       \"k.c\", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */\n    struct s { int j; const int *ap[3]; };\n    struct s *b; b->j = 5;\n  }\n  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */\n    const int foo = 10;\n    if (!foo) return 0;\n  }\n  return !cs[0] && !zero.x;\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_const=yes\nelse\n  ac_cv_c_const=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const\" >&5\n$as_echo \"$ac_cv_c_const\" >&6; }\nif test $ac_cv_c_const = no; then\n\n$as_echo \"#define const /**/\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking return type of signal handlers\" >&5\n$as_echo_n \"checking return type of signal handlers... \" >&6; }\nif test \"${ac_cv_type_signal+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <signal.h>\n\nint\nmain ()\n{\nreturn *(signal (0, 0)) (0) == 1;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_type_signal=int\nelse\n  ac_cv_type_signal=void\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal\" >&5\n$as_echo \"$ac_cv_type_signal\" >&6; }\n\ncat >>confdefs.h <<_ACEOF\n#define RETSIGTYPE $ac_cv_type_signal\n_ACEOF\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h\" >&5\n$as_echo_n \"checking for uid_t in sys/types.h... \" >&6; }\nif test \"${ac_cv_type_uid_t+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"uid_t\" >/dev/null 2>&1; then :\n  ac_cv_type_uid_t=yes\nelse\n  ac_cv_type_uid_t=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t\" >&5\n$as_echo \"$ac_cv_type_uid_t\" >&6; }\nif test $ac_cv_type_uid_t = no; then\n\n$as_echo \"#define uid_t int\" >>confdefs.h\n\n\n$as_echo \"#define gid_t int\" >>confdefs.h\n\nfi\n\nac_fn_c_check_type \"$LINENO\" \"pid_t\" \"ac_cv_type_pid_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_pid_t\" = x\"\"yes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define pid_t int\n_ACEOF\n\nfi\n\n\n# Find some definition for uintmax_t\n\nac_fn_c_check_type \"$LINENO\" \"uintmax_t\" \"ac_cv_type_uintmax_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_uintmax_t\" = x\"\"yes; then :\n\nelse\n\n  uintmax_t=\"unsigned long\"\n  ac_fn_c_check_type \"$LINENO\" \"unsigned long long\" \"ac_cv_type_unsigned_long_long\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_unsigned_long_long\" = x\"\"yes; then :\n  uintmax_t=\"unsigned long long\"\nfi\n\n\ncat >>confdefs.h <<_ACEOF\n#define uintmax_t $uintmax_t\n_ACEOF\n\nfi\n\n\n# Find out whether our struct stat returns nanosecond resolution timestamps.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for nanoseconds field of struct stat.st_mtim\" >&5\n$as_echo_n \"checking for nanoseconds field of struct stat.st_mtim... \" >&6; }\nif test \"${ac_cv_struct_st_mtim_nsec+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_save_CPPFLAGS=\"$CPPFLAGS\"\n    ac_cv_struct_st_mtim_nsec=no\n    # tv_nsec -- the usual case\n    # _tv_nsec -- Solaris 2.6, if\n    #\t(defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1\n    #\t && !defined __EXTENSIONS__)\n    # st__tim.tv_nsec -- UnixWare 2.1.2\n    for ac_val in tv_nsec _tv_nsec st__tim.tv_nsec; do\n      CPPFLAGS=\"$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val\"\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/stat.h>\n\nint\nmain ()\n{\nstruct stat s; s.st_mtim.ST_MTIM_NSEC;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_struct_st_mtim_nsec=$ac_val; break\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n    done\n    CPPFLAGS=\"$ac_save_CPPFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_st_mtim_nsec\" >&5\n$as_echo \"$ac_cv_struct_st_mtim_nsec\" >&6; }\n\n  if test $ac_cv_struct_st_mtim_nsec != no; then\n\ncat >>confdefs.h <<_ACEOF\n#define ST_MTIM_NSEC $ac_cv_struct_st_mtim_nsec\n_ACEOF\n\n  fi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to use high resolution file timestamps\" >&5\n$as_echo_n \"checking whether to use high resolution file timestamps... \" >&6; }\nif test \"${make_cv_file_timestamp_hi_res+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  make_cv_file_timestamp_hi_res=no\n  if test \"$ac_cv_struct_st_mtim_nsec\" != no; then\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#\tif HAVE_INTTYPES_H\n#\t include <inttypes.h>\n#\tendif\nint\nmain ()\n{\nchar a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_file_timestamp_hi_res=yes\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  fi\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_file_timestamp_hi_res\" >&5\n$as_echo \"$make_cv_file_timestamp_hi_res\" >&6; }\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  val=1\nelse\n  val=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define FILE_TIMESTAMP_HI_RES $val\n_ACEOF\n\n\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.\n  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime\" >&5\n$as_echo_n \"checking for library containing clock_gettime... \" >&6; }\nif test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_func_search_save_LIBS=$LIBS\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar clock_gettime ();\nint\nmain ()\n{\nreturn clock_gettime ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' rt posix4; do\n  if test -z \"$ac_lib\"; then\n    ac_res=\"none required\"\n  else\n    ac_res=-l$ac_lib\n    LIBS=\"-l$ac_lib  $ac_func_search_save_LIBS\"\n  fi\n  if ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_search_clock_gettime=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n  break\nfi\ndone\nif test \"${ac_cv_search_clock_gettime+set}\" = set; then :\n\nelse\n  ac_cv_search_clock_gettime=no\nfi\nrm conftest.$ac_ext\nLIBS=$ac_func_search_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime\" >&5\n$as_echo \"$ac_cv_search_clock_gettime\" >&6; }\nac_res=$ac_cv_search_clock_gettime\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nfi\n\n  if test \"$ac_cv_search_clock_gettime\" != no; then\n\n$as_echo \"#define HAVE_CLOCK_GETTIME 1\" >>confdefs.h\n\n  fi\nfi\n\n# Check for DOS-style pathnames.\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether system uses MSDOS-style paths\" >&5\n$as_echo_n \"checking whether system uses MSDOS-style paths... \" >&6; }\nif test \"${ac_cv_dos_paths+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__\nneither MSDOS nor Windows nor OS2\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_dos_paths=yes\nelse\n  ac_cv_dos_paths=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_dos_paths\" >&5\n$as_echo \"$ac_cv_dos_paths\" >&6; }\n\n    if test x\"$ac_cv_dos_paths\" = xyes; then\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_DOS_PATHS 1\n_ACEOF\n\n    fi\n\n\n# See if we have a standard version of gettimeofday().  Since actual\n# implementations can differ, just make sure we have the most common\n# one.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for standard gettimeofday\" >&5\n$as_echo_n \"checking for standard gettimeofday... \" >&6; }\nif test \"${ac_cv_func_gettimeofday+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_func_gettimeofday=no\n   if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_gettimeofday=\"no (cross-compiling)\"\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/time.h>\n                  int main ()\n\t          {\n\t\t    struct timeval t; t.tv_sec = -1; t.tv_usec = -1;\n\t\t    exit (gettimeofday (&t, 0) != 0\n\t\t          || t.tv_sec < 0 || t.tv_usec < 0);\n\t          }\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_gettimeofday=yes\nelse\n  ac_cv_func_gettimeofday=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_gettimeofday\" >&5\n$as_echo \"$ac_cv_func_gettimeofday\" >&6; }\nif test \"$ac_cv_func_gettimeofday\" = yes; then\n\n$as_echo \"#define HAVE_GETTIMEOFDAY 1\" >>confdefs.h\n\nfi\n\nfor ac_func in memcpy memmove strchr strdup mkstemp mktemp fdopen \\\n\t        bsd_signal dup2 getcwd realpath sigsetmask sigaction \\\n                getgroups seteuid setegid setlinebuf setreuid setregid \\\n                getrlimit setrlimit setvbuf pipe strerror strsignal \\\n\t\tlstat readlink atexit\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\ndone\n\n\nif test \"${ac_cv_func_setvbuf_reversed+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_func_setvbuf_reversed=no\nfi\n\n\n\n# strcoll() is used by the GNU glob library\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working strcoll\" >&5\n$as_echo_n \"checking for working strcoll... \" >&6; }\nif test \"${ac_cv_func_strcoll_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_strcoll_works=no\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\nreturn (strcoll (\"abc\", \"def\") >= 0 ||\n\t strcoll (\"ABC\", \"DEF\") >= 0 ||\n\t strcoll (\"123\", \"456\") >= 0)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_strcoll_works=yes\nelse\n  ac_cv_func_strcoll_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works\" >&5\n$as_echo \"$ac_cv_func_strcoll_works\" >&6; }\nif test $ac_cv_func_strcoll_works = yes; then\n\n$as_echo \"#define HAVE_STRCOLL 1\" >>confdefs.h\n\nfi\n\n\n# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works\n# for constant arguments.  Useless!\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working alloca.h\" >&5\n$as_echo_n \"checking for working alloca.h... \" >&6; }\nif test \"${ac_cv_working_alloca_h+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <alloca.h>\nint\nmain ()\n{\nchar *p = (char *) alloca (2 * sizeof (int));\n\t\t\t  if (p) return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_working_alloca_h=yes\nelse\n  ac_cv_working_alloca_h=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h\" >&5\n$as_echo \"$ac_cv_working_alloca_h\" >&6; }\nif test $ac_cv_working_alloca_h = yes; then\n\n$as_echo \"#define HAVE_ALLOCA_H 1\" >>confdefs.h\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for alloca\" >&5\n$as_echo_n \"checking for alloca... \" >&6; }\nif test \"${ac_cv_func_alloca_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifdef __GNUC__\n# define alloca __builtin_alloca\n#else\n# ifdef _MSC_VER\n#  include <malloc.h>\n#  define alloca _alloca\n# else\n#  ifdef HAVE_ALLOCA_H\n#   include <alloca.h>\n#  else\n#   ifdef _AIX\n #pragma alloca\n#   else\n#    ifndef alloca /* predefined by HP cc +Olibcalls */\nchar *alloca ();\n#    endif\n#   endif\n#  endif\n# endif\n#endif\n\nint\nmain ()\n{\nchar *p = (char *) alloca (1);\n\t\t\t\t    if (p) return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_func_alloca_works=yes\nelse\n  ac_cv_func_alloca_works=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works\" >&5\n$as_echo \"$ac_cv_func_alloca_works\" >&6; }\n\nif test $ac_cv_func_alloca_works = yes; then\n\n$as_echo \"#define HAVE_ALLOCA 1\" >>confdefs.h\n\nelse\n  # The SVR3 libPW and SVR4 libucb both contain incompatible functions\n# that cause trouble.  Some versions do not even contain alloca or\n# contain a buggy version.  If you still want to use their alloca,\n# use ar to extract alloca.o from them instead of compiling alloca.c.\n\nALLOCA=\\${LIBOBJDIR}alloca.$ac_objext\n\n$as_echo \"#define C_ALLOCA 1\" >>confdefs.h\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether \\`alloca.c' needs Cray hooks\" >&5\n$as_echo_n \"checking whether \\`alloca.c' needs Cray hooks... \" >&6; }\nif test \"${ac_cv_os_cray+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#if defined CRAY && ! defined CRAY2\nwebecray\n#else\nwenotbecray\n#endif\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"webecray\" >/dev/null 2>&1; then :\n  ac_cv_os_cray=yes\nelse\n  ac_cv_os_cray=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray\" >&5\n$as_echo \"$ac_cv_os_cray\" >&6; }\nif test $ac_cv_os_cray = yes; then\n  for ac_func in _getb67 GETB67 getb67; do\n    as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n\ncat >>confdefs.h <<_ACEOF\n#define CRAY_STACKSEG_END $ac_func\n_ACEOF\n\n    break\nfi\n\n  done\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca\" >&5\n$as_echo_n \"checking stack direction for C alloca... \" >&6; }\nif test \"${ac_cv_c_stack_direction+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_c_stack_direction=0\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nfind_stack_direction ()\n{\n  static char *addr = 0;\n  auto char dummy;\n  if (addr == 0)\n    {\n      addr = &dummy;\n      return find_stack_direction ();\n    }\n  else\n    return (&dummy > addr) ? 1 : -1;\n}\n\nint\nmain ()\n{\n  return find_stack_direction () < 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_c_stack_direction=1\nelse\n  ac_cv_c_stack_direction=-1\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction\" >&5\n$as_echo \"$ac_cv_c_stack_direction\" >&6; }\ncat >>confdefs.h <<_ACEOF\n#define STACK_DIRECTION $ac_cv_c_stack_direction\n_ACEOF\n\n\nfi\n\nfor ac_header in vfork.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"vfork.h\" \"ac_cv_header_vfork_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_vfork_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_VFORK_H 1\n_ACEOF\n\nfi\n\ndone\n\nfor ac_func in fork vfork\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\ndone\n\nif test \"x$ac_cv_func_fork\" = xyes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working fork\" >&5\n$as_echo_n \"checking for working fork... \" >&6; }\nif test \"${ac_cv_func_fork_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_fork_works=cross\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\n\n\t  /* By Ruediger Kuhlmann. */\n\t  return fork () < 0;\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_fork_works=yes\nelse\n  ac_cv_func_fork_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works\" >&5\n$as_echo \"$ac_cv_func_fork_works\" >&6; }\n\nelse\n  ac_cv_func_fork_works=$ac_cv_func_fork\nfi\nif test \"x$ac_cv_func_fork_works\" = xcross; then\n  case $host in\n    *-*-amigaos* | *-*-msdosdjgpp*)\n      # Override, as these systems have only a dummy fork() stub\n      ac_cv_func_fork_works=no\n      ;;\n    *)\n      ac_cv_func_fork_works=yes\n      ;;\n  esac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation\" >&5\n$as_echo \"$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation\" >&2;}\nfi\nac_cv_func_vfork_works=$ac_cv_func_vfork\nif test \"x$ac_cv_func_vfork\" = xyes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for working vfork\" >&5\n$as_echo_n \"checking for working vfork... \" >&6; }\nif test \"${ac_cv_func_vfork_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_vfork_works=cross\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n/* Thanks to Paul Eggert for this test.  */\n$ac_includes_default\n#include <sys/wait.h>\n#ifdef HAVE_VFORK_H\n# include <vfork.h>\n#endif\n/* On some sparc systems, changes by the child to local and incoming\n   argument registers are propagated back to the parent.  The compiler\n   is told about this with #include <vfork.h>, but some compilers\n   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a\n   static variable whose address is put into a register that is\n   clobbered by the vfork.  */\nstatic void\n#ifdef __cplusplus\nsparc_address_test (int arg)\n# else\nsparc_address_test (arg) int arg;\n#endif\n{\n  static pid_t child;\n  if (!child) {\n    child = vfork ();\n    if (child < 0) {\n      perror (\"vfork\");\n      _exit(2);\n    }\n    if (!child) {\n      arg = getpid();\n      write(-1, \"\", 0);\n      _exit (arg);\n    }\n  }\n}\n\nint\nmain ()\n{\n  pid_t parent = getpid ();\n  pid_t child;\n\n  sparc_address_test (0);\n\n  child = vfork ();\n\n  if (child == 0) {\n    /* Here is another test for sparc vfork register problems.  This\n       test uses lots of local variables, at least as many local\n       variables as main has allocated so far including compiler\n       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris\n       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should\n       reuse the register of parent for one of the local variables,\n       since it will think that parent can't possibly be used any more\n       in this routine.  Assigning to the local variable will thus\n       munge parent in the parent process.  */\n    pid_t\n      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),\n      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();\n    /* Convince the compiler that p..p7 are live; otherwise, it might\n       use the same hardware register for all 8 local variables.  */\n    if (p != p1 || p != p2 || p != p3 || p != p4\n\t|| p != p5 || p != p6 || p != p7)\n      _exit(1);\n\n    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent\n       from child file descriptors.  If the child closes a descriptor\n       before it execs or exits, this munges the parent's descriptor\n       as well.  Test for this by closing stdout in the child.  */\n    _exit(close(fileno(stdout)) != 0);\n  } else {\n    int status;\n    struct stat st;\n\n    while (wait(&status) != child)\n      ;\n    return (\n\t /* Was there some problem with vforking?  */\n\t child < 0\n\n\t /* Did the child fail?  (This shouldn't happen.)  */\n\t || status\n\n\t /* Did the vfork/compiler bug occur?  */\n\t || parent != getpid()\n\n\t /* Did the file descriptor bug occur?  */\n\t || fstat(fileno(stdout), &st) != 0\n\t );\n  }\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_vfork_works=yes\nelse\n  ac_cv_func_vfork_works=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works\" >&5\n$as_echo \"$ac_cv_func_vfork_works\" >&6; }\n\nfi;\nif test \"x$ac_cv_func_fork_works\" = xcross; then\n  ac_cv_func_vfork_works=$ac_cv_func_vfork\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation\" >&5\n$as_echo \"$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation\" >&2;}\nfi\n\nif test \"x$ac_cv_func_vfork_works\" = xyes; then\n\n$as_echo \"#define HAVE_WORKING_VFORK 1\" >>confdefs.h\n\nelse\n\n$as_echo \"#define vfork fork\" >>confdefs.h\n\nfi\nif test \"x$ac_cv_func_fork_works\" = xyes; then\n\n$as_echo \"#define HAVE_WORKING_FORK 1\" >>confdefs.h\n\nfi\n\nfor ac_func in vprintf\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"vprintf\" \"ac_cv_func_vprintf\"\nif test \"x$ac_cv_func_vprintf\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_VPRINTF 1\n_ACEOF\n\nac_fn_c_check_func \"$LINENO\" \"_doprnt\" \"ac_cv_func__doprnt\"\nif test \"x$ac_cv_func__doprnt\" = x\"\"yes; then :\n\n$as_echo \"#define HAVE_DOPRNT 1\" >>confdefs.h\n\nfi\n\nfi\ndone\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether closedir returns void\" >&5\n$as_echo_n \"checking whether closedir returns void... \" >&6; }\nif test \"${ac_cv_func_closedir_void+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$cross_compiling\" = yes; then :\n  ac_cv_func_closedir_void=yes\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\n#include <$ac_header_dirent>\n#ifndef __cplusplus\nint closedir ();\n#endif\n\nint\nmain ()\n{\nreturn closedir (opendir (\".\")) != 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_func_closedir_void=no\nelse\n  ac_cv_func_closedir_void=yes\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \\\n  conftest.$ac_objext conftest.beam conftest.$ac_ext\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void\" >&5\n$as_echo \"$ac_cv_func_closedir_void\" >&6; }\nif test $ac_cv_func_closedir_void = yes; then\n\n$as_echo \"#define CLOSEDIR_VOID 1\" >>confdefs.h\n\nfi\n\n\nac_have_func=no # yes means we've found a way to get the load average.\n\n# Make sure getloadavg.c is where it belongs, at configure-time.\ntest -f \"$srcdir/$ac_config_libobj_dir/getloadavg.c\" ||\n  as_fn_error \"$srcdir/$ac_config_libobj_dir/getloadavg.c is missing\" \"$LINENO\" 5\n\nac_save_LIBS=$LIBS\n\n# Check for getloadavg, but be sure not to touch the cache variable.\n(ac_fn_c_check_func \"$LINENO\" \"getloadavg\" \"ac_cv_func_getloadavg\"\nif test \"x$ac_cv_func_getloadavg\" = x\"\"yes; then :\n  exit 0\nelse\n  exit 1\nfi\n) && ac_have_func=yes\n\n# On HPUX9, an unprivileged user can get load averages through this function.\nfor ac_func in pstat_getdynamic\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"pstat_getdynamic\" \"ac_cv_func_pstat_getdynamic\"\nif test \"x$ac_cv_func_pstat_getdynamic\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_PSTAT_GETDYNAMIC 1\n_ACEOF\n\nfi\ndone\n\n\n# Solaris has libkstat which does not require root.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat\" >&5\n$as_echo_n \"checking for kstat_open in -lkstat... \" >&6; }\nif test \"${ac_cv_lib_kstat_kstat_open+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lkstat  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar kstat_open ();\nint\nmain ()\n{\nreturn kstat_open ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_kstat_kstat_open=yes\nelse\n  ac_cv_lib_kstat_kstat_open=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open\" >&5\n$as_echo \"$ac_cv_lib_kstat_kstat_open\" >&6; }\nif test \"x$ac_cv_lib_kstat_kstat_open\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_LIBKSTAT 1\n_ACEOF\n\n  LIBS=\"-lkstat $LIBS\"\n\nfi\n\ntest $ac_cv_lib_kstat_kstat_open = yes && ac_have_func=yes\n\n# Some systems with -lutil have (and need) -lkvm as well, some do not.\n# On Solaris, -lkvm requires nlist from -lelf, so check that first\n# to get the right answer into the cache.\n# For kstat on solaris, we need libelf to force the definition of SVR4 below.\nif test $ac_have_func = no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for elf_begin in -lelf\" >&5\n$as_echo_n \"checking for elf_begin in -lelf... \" >&6; }\nif test \"${ac_cv_lib_elf_elf_begin+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lelf  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar elf_begin ();\nint\nmain ()\n{\nreturn elf_begin ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_elf_elf_begin=yes\nelse\n  ac_cv_lib_elf_elf_begin=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_begin\" >&5\n$as_echo \"$ac_cv_lib_elf_elf_begin\" >&6; }\nif test \"x$ac_cv_lib_elf_elf_begin\" = x\"\"yes; then :\n  LIBS=\"-lelf $LIBS\"\nfi\n\nfi\nif test $ac_have_func = no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for kvm_open in -lkvm\" >&5\n$as_echo_n \"checking for kvm_open in -lkvm... \" >&6; }\nif test \"${ac_cv_lib_kvm_kvm_open+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lkvm  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar kvm_open ();\nint\nmain ()\n{\nreturn kvm_open ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_kvm_kvm_open=yes\nelse\n  ac_cv_lib_kvm_kvm_open=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_kvm_open\" >&5\n$as_echo \"$ac_cv_lib_kvm_kvm_open\" >&6; }\nif test \"x$ac_cv_lib_kvm_kvm_open\" = x\"\"yes; then :\n  LIBS=\"-lkvm $LIBS\"\nfi\n\n  # Check for the 4.4BSD definition of getloadavg.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lutil\" >&5\n$as_echo_n \"checking for getloadavg in -lutil... \" >&6; }\nif test \"${ac_cv_lib_util_getloadavg+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lutil  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getloadavg ();\nint\nmain ()\n{\nreturn getloadavg ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_util_getloadavg=yes\nelse\n  ac_cv_lib_util_getloadavg=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_getloadavg\" >&5\n$as_echo \"$ac_cv_lib_util_getloadavg\" >&6; }\nif test \"x$ac_cv_lib_util_getloadavg\" = x\"\"yes; then :\n  LIBS=\"-lutil $LIBS\" ac_have_func=yes ac_cv_func_getloadavg_setgid=yes\nfi\n\nfi\n\nif test $ac_have_func = no; then\n  # There is a commonly available library for RS/6000 AIX.\n  # Since it is not a standard part of AIX, it might be installed locally.\n  ac_getloadavg_LIBS=$LIBS\n  LIBS=\"-L/usr/local/lib $LIBS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lgetloadavg\" >&5\n$as_echo_n \"checking for getloadavg in -lgetloadavg... \" >&6; }\nif test \"${ac_cv_lib_getloadavg_getloadavg+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lgetloadavg  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar getloadavg ();\nint\nmain ()\n{\nreturn getloadavg ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_getloadavg_getloadavg=yes\nelse\n  ac_cv_lib_getloadavg_getloadavg=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_getloadavg_getloadavg\" >&5\n$as_echo \"$ac_cv_lib_getloadavg_getloadavg\" >&6; }\nif test \"x$ac_cv_lib_getloadavg_getloadavg\" = x\"\"yes; then :\n  LIBS=\"-lgetloadavg $LIBS\"\nelse\n  LIBS=$ac_getloadavg_LIBS\nfi\n\nfi\n\n# Make sure it is really in the library, if we think we found it,\n# otherwise set up the replacement function.\nfor ac_func in getloadavg\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"getloadavg\" \"ac_cv_func_getloadavg\"\nif test \"x$ac_cv_func_getloadavg\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_GETLOADAVG 1\n_ACEOF\n\nelse\n  case \" $LIBOBJS \" in\n  *\" getloadavg.$ac_objext \"* ) ;;\n  *) LIBOBJS=\"$LIBOBJS getloadavg.$ac_objext\"\n ;;\nesac\n\n\n$as_echo \"#define C_GETLOADAVG 1\" >>confdefs.h\n\n# Figure out what our getloadavg.c needs.\nac_have_func=no\nac_fn_c_check_header_mongrel \"$LINENO\" \"sys/dg_sys_info.h\" \"ac_cv_header_sys_dg_sys_info_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_dg_sys_info_h\" = x\"\"yes; then :\n  ac_have_func=yes\n\n$as_echo \"#define DGUX 1\" >>confdefs.h\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dg_sys_info in -ldgc\" >&5\n$as_echo_n \"checking for dg_sys_info in -ldgc... \" >&6; }\nif test \"${ac_cv_lib_dgc_dg_sys_info+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldgc  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dg_sys_info ();\nint\nmain ()\n{\nreturn dg_sys_info ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dgc_dg_sys_info=yes\nelse\n  ac_cv_lib_dgc_dg_sys_info=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dgc_dg_sys_info\" >&5\n$as_echo \"$ac_cv_lib_dgc_dg_sys_info\" >&6; }\nif test \"x$ac_cv_lib_dgc_dg_sys_info\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_LIBDGC 1\n_ACEOF\n\n  LIBS=\"-ldgc $LIBS\"\n\nfi\n\nfi\n\n\n\nac_fn_c_check_header_mongrel \"$LINENO\" \"locale.h\" \"ac_cv_header_locale_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_locale_h\" = x\"\"yes; then :\n\nfi\n\n\nfor ac_func in setlocale\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"setlocale\" \"ac_cv_func_setlocale\"\nif test \"x$ac_cv_func_setlocale\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_SETLOCALE 1\n_ACEOF\n\nfi\ndone\n\n\n# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it\n# uses stabs), but it is still SVR4.  We cannot check for <elf.h> because\n# Irix 4.0.5F has the header but not the library.\nif test $ac_have_func = no && test \"$ac_cv_lib_elf_elf_begin\" = yes; then\n  ac_have_func=yes\n\n$as_echo \"#define SVR4 1\" >>confdefs.h\n\nfi\n\nif test $ac_have_func = no; then\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"inq_stats/cpustats.h\" \"ac_cv_header_inq_stats_cpustats_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_inq_stats_cpustats_h\" = x\"\"yes; then :\n  ac_have_func=yes\n\n$as_echo \"#define UMAX 1\" >>confdefs.h\n\n\n$as_echo \"#define UMAX4_3 1\" >>confdefs.h\n\nfi\n\n\nfi\n\nif test $ac_have_func = no; then\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/cpustats.h\" \"ac_cv_header_sys_cpustats_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_cpustats_h\" = x\"\"yes; then :\n  ac_have_func=yes; $as_echo \"#define UMAX 1\" >>confdefs.h\n\nfi\n\n\nfi\n\nif test $ac_have_func = no; then\n  for ac_header in mach/mach.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"mach/mach.h\" \"ac_cv_header_mach_mach_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_mach_mach_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_MACH_MACH_H 1\n_ACEOF\n\nfi\n\ndone\n\nfi\n\nfor ac_header in nlist.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"nlist.h\" \"ac_cv_header_nlist_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_nlist_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_NLIST_H 1\n_ACEOF\n ac_fn_c_check_member \"$LINENO\" \"struct nlist\" \"n_un.n_name\" \"ac_cv_member_struct_nlist_n_un_n_name\" \"#include <nlist.h>\n\"\nif test \"x$ac_cv_member_struct_nlist_n_un_n_name\" = x\"\"yes; then :\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_STRUCT_NLIST_N_UN_N_NAME 1\n_ACEOF\n\n\n$as_echo \"#define NLIST_NAME_UNION 1\" >>confdefs.h\n\nfi\n\n\nfi\n\ndone\n\nfi\ndone\n\n\n# Some definitions of getloadavg require that the program be installed setgid.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether getloadavg requires setgid\" >&5\n$as_echo_n \"checking whether getloadavg requires setgid... \" >&6; }\nif test \"${ac_cv_func_getloadavg_setgid+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include \"$srcdir/$ac_config_libobj_dir/getloadavg.c\"\n#ifdef LDAV_PRIVILEGED\nYowza Am I SETGID yet\n#endif\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"Yowza Am I SETGID yet\" >/dev/null 2>&1; then :\n  ac_cv_func_getloadavg_setgid=yes\nelse\n  ac_cv_func_getloadavg_setgid=no\nfi\nrm -f conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getloadavg_setgid\" >&5\n$as_echo \"$ac_cv_func_getloadavg_setgid\" >&6; }\nif test $ac_cv_func_getloadavg_setgid = yes; then\n  NEED_SETGID=true\n\n$as_echo \"#define GETLOADAVG_PRIVILEGED 1\" >>confdefs.h\n\nelse\n  NEED_SETGID=false\nfi\n\nif test $ac_cv_func_getloadavg_setgid = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking group of /dev/kmem\" >&5\n$as_echo_n \"checking group of /dev/kmem... \" >&6; }\nif test \"${ac_cv_group_kmem+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n   # On Solaris, /dev/kmem is a symlink.  Get info on the real file.\n  ac_ls_output=`ls -lgL /dev/kmem 2>/dev/null`\n  # If we got an error (system does not support symlinks), try without -L.\n  test -z \"$ac_ls_output\" && ac_ls_output=`ls -lg /dev/kmem`\n  ac_cv_group_kmem=`$as_echo \"$ac_ls_output\" \\\n    | sed -ne 's/[\t ][\t ]*/ /g;\n\t       s/^.[sSrwx-]* *[0-9]* *\\([^0-9]*\\)  *.*/\\1/;\n\t       / /s/.* //;p;'`\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_group_kmem\" >&5\n$as_echo \"$ac_cv_group_kmem\" >&6; }\n  KMEM_GROUP=$ac_cv_group_kmem\nfi\nif test \"x$ac_save_LIBS\" = x; then\n  GETLOADAVG_LIBS=$LIBS\nelse\n  GETLOADAVG_LIBS=`$as_echo \"$LIBS\" | sed \"s|$ac_save_LIBS||\"`\nfi\nLIBS=$ac_save_LIBS\n\n\n\n# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it\n# doesn't.  So, we will.\n\nif test \"$ac_cv_header_nlist_h\" = yes; then\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <nlist.h>\nint\nmain ()\n{\nstruct nlist nl;\n          nl.n_name = \"string\";\n          return 0;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_nlist_struct=yes\nelse\n  make_cv_nlist_struct=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  if test \"$make_cv_nlist_struct\" = yes; then\n\n$as_echo \"#define NLIST_STRUCT 1\" >>confdefs.h\n\n  fi\nfi\n\nac_fn_c_check_decl \"$LINENO\" \"sys_siglist\" \"ac_cv_have_decl_sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl_sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_DECL_SYS_SIGLIST $ac_have_decl\n_ACEOF\nac_fn_c_check_decl \"$LINENO\" \"_sys_siglist\" \"ac_cv_have_decl__sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl__sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_DECL__SYS_SIGLIST $ac_have_decl\n_ACEOF\nac_fn_c_check_decl \"$LINENO\" \"__sys_siglist\" \"ac_cv_have_decl___sys_siglist\" \"$ac_includes_default\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\"\nif test \"x$ac_cv_have_decl___sys_siglist\" = x\"\"yes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_DECL___SYS_SIGLIST $ac_have_decl\n_ACEOF\n\n\n\n# Check out the wait reality.\nfor ac_header in sys/wait.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/wait.h\" \"ac_cv_header_sys_wait_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_wait_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_SYS_WAIT_H 1\n_ACEOF\n\nfi\n\ndone\n\nfor ac_func in waitpid wait3\ndo :\n  as_ac_var=`$as_echo \"ac_cv_func_$ac_func\" | $as_tr_sh`\nac_fn_c_check_func \"$LINENO\" \"$ac_func\" \"$as_ac_var\"\neval as_val=\\$$as_ac_var\n   if test \"x$as_val\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\ndone\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for union wait\" >&5\n$as_echo_n \"checking for union wait... \" >&6; }\nif test \"${make_cv_union_wait+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n#include <sys/wait.h>\nint\nmain ()\n{\nunion wait status; int pid; pid = wait (&status);\n#ifdef WEXITSTATUS\n/* Some POSIXoid systems have both the new-style macros and the old\n   union wait type, and they do not work together.  If union wait\n   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */\n        if (WEXITSTATUS (status) != 0) pid = -1;\n#ifdef WTERMSIG\n        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */\n        -- blow chunks here --\n#endif\n#endif\n#ifdef HAVE_WAITPID\n        /* Make sure union wait works with waitpid.  */\n        pid = waitpid (-1, &status, 0);\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  make_cv_union_wait=yes\nelse\n  make_cv_union_wait=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n\nif test \"$make_cv_union_wait\" = yes; then\n\n$as_echo \"#define HAVE_UNION_WAIT 1\" >>confdefs.h\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_union_wait\" >&5\n$as_echo \"$make_cv_union_wait\" >&6; }\n\n\n# If we're building on Windows/DOS/OS/2, add some support for DOS drive specs.\nif test \"$PATH_SEPARATOR\" = ';'; then\n\n$as_echo \"#define HAVE_DOS_PATHS 1\" >>confdefs.h\n\nfi\n\n\n# See if the user wants to use pmake's \"customs\" distributed build capability\n\n REMOTE=stub\nuse_customs=false\n\n# Check whether --with-customs was given.\nif test \"${with_customs+set}\" = set; then :\n  withval=$with_customs; case $withval in\n    n|no) : ;;\n    *) make_cppflags=\"$CPPFLAGS\"\n       case $withval in\n\t y|ye|yes) : ;;\n\t *) CPPFLAGS=\"$CPPFLAGS -I$with_customs/include/customs\"\n\t    make_ldflags=\"$LDFLAGS -L$with_customs/lib\" ;;\n       esac\n\ncf_test_netlibs=no\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for network libraries\" >&5\n$as_echo_n \"checking for network libraries... \" >&6; }\nif test \"${cf_cv_netlibs+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: working...\" >&5\n$as_echo \"working...\" >&6; }\ncf_cv_netlibs=\"\"\ncf_test_netlibs=yes\nfor ac_func in gethostname\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"gethostname\" \"ac_cv_func_gethostname\"\nif test \"x$ac_cv_func_gethostname\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_GETHOSTNAME 1\n_ACEOF\n\nelse\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostname in -lnsl\" >&5\n$as_echo_n \"checking for gethostname in -lnsl... \" >&6; }\nif test \"${ac_cv_lib_nsl_gethostname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lnsl $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostname ();\nint\nmain ()\n{\nreturn gethostname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_nsl_gethostname=yes\nelse\n  ac_cv_lib_nsl_gethostname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostname\" >&5\n$as_echo \"$ac_cv_lib_nsl_gethostname\" >&6; }\nif test \"x$ac_cv_lib_nsl_gethostname\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostname=yes\n\tcf_cv_netlibs=\"-lnsl $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_gethostname=unknown\n\tunset ac_cv_func_gethostname 2>/dev/null\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostname in -lsocket\" >&5\n$as_echo_n \"checking for gethostname in -lsocket... \" >&6; }\nif test \"${ac_cv_lib_socket_gethostname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsocket $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostname ();\nint\nmain ()\n{\nreturn gethostname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_socket_gethostname=yes\nelse\n  ac_cv_lib_socket_gethostname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostname\" >&5\n$as_echo \"$ac_cv_lib_socket_gethostname\" >&6; }\nif test \"x$ac_cv_lib_socket_gethostname\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostname=yes\n\tcf_cv_netlibs=\"-lsocket $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_gethostname=unknown\n\tunset ac_cv_func_gethostname 2>/dev/null\n\nfi\n\n\nfi\n\n\nfi\ndone\n\n#\n# FIXME:  sequent needs this library (i.e., -lsocket -linet -lnsl), but\n# I don't know the entrypoints - 97/7/22 TD\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for main in -linet\" >&5\n$as_echo_n \"checking for main in -linet... \" >&6; }\nif test \"${ac_cv_lib_inet_main+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-linet  $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n\nint\nmain ()\n{\nreturn main ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_inet_main=yes\nelse\n  ac_cv_lib_inet_main=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main\" >&5\n$as_echo \"$ac_cv_lib_inet_main\" >&6; }\nif test \"x$ac_cv_lib_inet_main\" = x\"\"yes; then :\n  cf_cv_netlibs=\"-linet $cf_cv_netlibs\"\nfi\n\n#\nif test \"$ac_cv_func_lsocket\" != no ; then\nfor ac_func in socket\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"socket\" \"ac_cv_func_socket\"\nif test \"x$ac_cv_func_socket\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_SOCKET 1\n_ACEOF\n\nelse\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket\" >&5\n$as_echo_n \"checking for socket in -lsocket... \" >&6; }\nif test \"${ac_cv_lib_socket_socket+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsocket $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar socket ();\nint\nmain ()\n{\nreturn socket ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_socket_socket=yes\nelse\n  ac_cv_lib_socket_socket=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket\" >&5\n$as_echo \"$ac_cv_lib_socket_socket\" >&6; }\nif test \"x$ac_cv_lib_socket_socket\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_socket=yes\n\tcf_cv_netlibs=\"-lsocket $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_socket=unknown\n\tunset ac_cv_func_socket 2>/dev/null\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for socket in -lbsd\" >&5\n$as_echo_n \"checking for socket in -lbsd... \" >&6; }\nif test \"${ac_cv_lib_bsd_socket+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lbsd $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar socket ();\nint\nmain ()\n{\nreturn socket ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_bsd_socket=yes\nelse\n  ac_cv_lib_bsd_socket=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_socket\" >&5\n$as_echo \"$ac_cv_lib_bsd_socket\" >&6; }\nif test \"x$ac_cv_lib_bsd_socket\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_socket=yes\n\tcf_cv_netlibs=\"-lbsd $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_socket=unknown\n\tunset ac_cv_func_socket 2>/dev/null\n\nfi\n\n\nfi\n\n\nfi\ndone\n\nfi\n#\nfor ac_func in gethostbyname\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"gethostbyname\" \"ac_cv_func_gethostbyname\"\nif test \"x$ac_cv_func_gethostbyname\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_GETHOSTBYNAME 1\n_ACEOF\n\nelse\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl\" >&5\n$as_echo_n \"checking for gethostbyname in -lnsl... \" >&6; }\nif test \"${ac_cv_lib_nsl_gethostbyname+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lnsl $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar gethostbyname ();\nint\nmain ()\n{\nreturn gethostbyname ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_nsl_gethostbyname=yes\nelse\n  ac_cv_lib_nsl_gethostbyname=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname\" >&5\n$as_echo \"$ac_cv_lib_nsl_gethostbyname\" >&6; }\nif test \"x$ac_cv_lib_nsl_gethostbyname\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo gethostbyname | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_gethostbyname=yes\n\tcf_cv_netlibs=\"-lnsl $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_gethostbyname=unknown\n\tunset ac_cv_func_gethostbyname 2>/dev/null\n\nfi\n\n\nfi\ndone\n\n#\nfor ac_func in strcasecmp\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"strcasecmp\" \"ac_cv_func_strcasecmp\"\nif test \"x$ac_cv_func_strcasecmp\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_STRCASECMP 1\n_ACEOF\n\nelse\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolv\" >&5\n$as_echo_n \"checking for strcasecmp in -lresolv... \" >&6; }\nif test \"${ac_cv_lib_resolv_strcasecmp+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lresolv $cf_cv_netlibs $LIBS\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar strcasecmp ();\nint\nmain ()\n{\nreturn strcasecmp ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_resolv_strcasecmp=yes\nelse\n  ac_cv_lib_resolv_strcasecmp=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_strcasecmp\" >&5\n$as_echo \"$ac_cv_lib_resolv_strcasecmp\" >&6; }\nif test \"x$ac_cv_lib_resolv_strcasecmp\" = x\"\"yes; then :\n\n\ncf_tr_func=`echo strcasecmp | tr '[a-z]' '[A-Z]'`\n\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_$cf_tr_func 1\n_ACEOF\n\n\tac_cv_func_strcasecmp=yes\n\tcf_cv_netlibs=\"-lresolv $cf_cv_netlibs\"\nelse\n\n\tac_cv_func_strcasecmp=unknown\n\tunset ac_cv_func_strcasecmp 2>/dev/null\n\nfi\n\n\nfi\ndone\n\n\nfi\n\nLIBS=\"$LIBS $cf_cv_netlibs\"\ntest $cf_test_netlibs = no && echo \"$cf_cv_netlibs\" >&6\n\n       ac_fn_c_check_header_mongrel \"$LINENO\" \"customs.h\" \"ac_cv_header_customs_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_customs_h\" = x\"\"yes; then :\n  use_customs=true\n\t\t         REMOTE=cstms\n\t\t\t LIBS=\"$LIBS -lcustoms\" LDFLAGS=\"$make_ldflags\"\nelse\n  with_customs=no\n\t\t\t CPPFLAGS=\"$make_cppflags\" make_badcust=yes\nfi\n\n\n       ;;\n  esac\nfi\n\n# Tell automake about this, so it can include the right .c files.\n\n\nif test \"$use_customs\" = true; then\n  USE_CUSTOMS_TRUE=\n  USE_CUSTOMS_FALSE='#'\nelse\n  USE_CUSTOMS_TRUE='#'\n  USE_CUSTOMS_FALSE=\nfi\n\n\n# See if the user asked to handle case insensitive file systems.\n\n\n# Check whether --enable-case-insensitive-file-system was given.\nif test \"${enable_case_insensitive_file_system+set}\" = set; then :\n  enableval=$enable_case_insensitive_file_system; case_insensitive_fs=\"yes\" $as_echo \"#define HAVE_CASE_INSENSITIVE_FS 1\" >>confdefs.h\n\nelse\n  case_insensitive_fs=\"no\"\nfi\n\n\n# See if we can handle the job server feature, and if the user wants it.\n\n# Check whether --enable-job-server was given.\nif test \"${enable_job_server+set}\" = set; then :\n  enableval=$enable_job_server; make_cv_job_server=\"$enableval\" user_job_server=\"$enableval\"\nelse\n  make_cv_job_server=\"yes\"\nfi\n\n\nhas_wait_nohang=yes\ncase \"$ac_cv_func_waitpid/$ac_cv_func_wait3\" in\n  no/no) has_wait_nohang=no ;;\nesac\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SA_RESTART\" >&5\n$as_echo_n \"checking for SA_RESTART... \" >&6; }\nif test \"${make_cv_sa_restart+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <signal.h>\nint\nmain ()\n{\nreturn SA_RESTART;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  make_cv_sa_restart=yes\nelse\n  make_cv_sa_restart=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_sa_restart\" >&5\n$as_echo \"$make_cv_sa_restart\" >&6; }\n\nif test \"$make_cv_sa_restart\" != no; then\n\n$as_echo \"#define HAVE_SA_RESTART 1\" >>confdefs.h\n\nfi\n\n# enable make_cv_sa_restart for OS/2 so that the jobserver will be enabled,\n# but do it after HAVE_SA_RESTART has been defined.\ncase \"$host_os\" in\n  os2*) make_cv_sa_restart=yes ;;\nesac\n\ncase \"$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/$make_cv_job_server\" in\n  yes/yes/yes/yes/yes)\n\n$as_echo \"#define MAKE_JOBSERVER 1\" >>confdefs.h\n;;\nesac\n\n# if we have both lstat() and readlink() then we can support symlink\n# timechecks.\ncase \"$ac_cv_func_lstat/$ac_cv_func_readlink\" in\n  yes/yes)\n\n$as_echo \"#define MAKE_SYMLINKS 1\" >>confdefs.h\n;;\nesac\n\n# Find the SCCS commands, so we can include them in our default rules.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for location of SCCS get command\" >&5\n$as_echo_n \"checking for location of SCCS get command... \" >&6; }\nif test \"${make_cv_path_sccs_get+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\nif test -f /usr/sccs/get; then\n  make_cv_path_sccs_get=/usr/sccs/get\nelse\n  make_cv_path_sccs_get=get\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_path_sccs_get\" >&5\n$as_echo \"$make_cv_path_sccs_get\" >&6; }\n\ncat >>confdefs.h <<_ACEOF\n#define SCCS_GET \"$make_cv_path_sccs_get\"\n_ACEOF\n\n\nac_clean_files=\"$ac_clean_files s.conftest conftoast\" # Remove these later.\nif ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 &&\n   test -f s.conftest; then\n  # We successfully created an SCCS file.\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if SCCS get command understands -G\" >&5\n$as_echo_n \"checking if SCCS get command understands -G... \" >&6; }\nif test \"${make_cv_sys_get_minus_G+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n    if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 &&\n       test -f conftoast; then\n       make_cv_sys_get_minus_G=yes\n    else\n       make_cv_sys_get_minus_G=no\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $make_cv_sys_get_minus_G\" >&5\n$as_echo \"$make_cv_sys_get_minus_G\" >&6; }\n  case \"$make_cv_sys_get_minus_G\" in\n    yes)\n$as_echo \"#define SCCS_GET_MINUS_G 1\" >>confdefs.h\n;;\n  esac\nfi\nrm -f s.conftest conftoast\n\n# Check the system to see if it provides GNU glob.  If not, use our\n# local version.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if system libc has GNU glob\" >&5\n$as_echo_n \"checking if system libc has GNU glob... \" >&6; }\nif test \"${make_cv_sys_gnu_glob+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <features.h>\n#include <glob.h>\n#include <fnmatch.h>\n\n#define GLOB_INTERFACE_VERSION 1\n#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1\n# include <gnu-versions.h>\n# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION\n   gnu glob\n# endif\n#endif\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"gnu glob\" >/dev/null 2>&1; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nmake_cv_sys_gnu_glob=yes\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no; using local copy\" >&5\n$as_echo \"no; using local copy\" >&6; }\n GLOBINC='-I$(srcdir)/glob'\n GLOBLIB=glob/libglob.a\nmake_cv_sys_gnu_glob=no\nfi\nrm -f conftest*\n\nfi\n\n# Tell automake about this, so it can build the right .c files.\n\n\nif test \"$make_cv_sys_gnu_glob\" = no; then\n  USE_LOCAL_GLOB_TRUE=\n  USE_LOCAL_GLOB_FALSE='#'\nelse\n  USE_LOCAL_GLOB_TRUE='#'\n  USE_LOCAL_GLOB_FALSE=\nfi\n\n\n# Let the makefile know what our build host is\n\n\ncat >>confdefs.h <<_ACEOF\n#define MAKE_HOST \"$host\"\n_ACEOF\n\nMAKE_HOST=\"$host\"\n\n\nw32_target_env=no\n\n\nif false; then\n  WINDOWSENV_TRUE=\n  WINDOWSENV_FALSE='#'\nelse\n  WINDOWSENV_TRUE='#'\n  WINDOWSENV_FALSE=\nfi\n\n\ncase \"$host\" in\n  *-*-mingw32)\n\n\nif true; then\n  WINDOWSENV_TRUE=\n  WINDOWSENV_FALSE='#'\nelse\n  WINDOWSENV_TRUE='#'\n  WINDOWSENV_FALSE=\nfi\n\n    w32_target_env=yes\n\n$as_echo \"#define WINDOWS32 1\" >>confdefs.h\n\n\n$as_echo \"#define HAVE_DOS_PATHS 1\" >>confdefs.h\n\n    ;;\nesac\n\n# Include the Maintainer's Makefile section, if it's here.\n\nMAINT_MAKEFILE=/dev/null\nif test -r \"$srcdir/maintMakefile\"; then\n  MAINT_MAKEFILE=\"$srcdir/maintMakefile\"\nfi\n\n\n# Allow building with dmalloc\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted\" >&5\n$as_echo_n \"checking if malloc debugging is wanted... \" >&6; }\n\n# Check whether --with-dmalloc was given.\nif test \"${with_dmalloc+set}\" = set; then :\n  withval=$with_dmalloc; if test \"$withval\" = yes; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define WITH_DMALLOC 1\" >>confdefs.h\n\n  LIBS=\"$LIBS -ldmalloc\"\n  LDFLAGS=\"$LDFLAGS -g\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n# Forcibly disable SET_MAKE.  If it's set it breaks things like the test\n# scripts, etc.\nSET_MAKE=\n\n# Sanity check and inform the user of what we found\n\ncase \"$make_badcust\" in\n  yes) echo\n       echo \"WARNING: --with-customs specified but no customs.h could be found;\"\n       echo \"         disabling Customs support.\"\n       echo ;;\nesac\n\ncase \"$with_customs\" in\n  \"\"|n|no|y|ye|yes) ;;\n  *) if test -f \"$with_customs/lib/libcustoms.a\"; then\n       :\n     else\n       echo\n       echo \"WARNING: '$with_customs/lib' does not appear to contain the\"\n       echo \"         Customs library.  You must build and install Customs\"\n       echo \"         before compiling GNU make.\"\n       echo\n     fi ;;\nesac\n\ncase \"$has_wait_nohang\" in\n  no) echo\n      echo \"WARNING: Your system has neither waitpid() nor wait3().\"\n      echo \"         Without one of these, signal handling is unreliable.\"\n      echo \"         You should be aware that running GNU make with -j\"\n      echo \"         could result in erratic behavior.\"\n      echo ;;\nesac\n\ncase \"$make_cv_job_server/$user_job_server\" in\n  no/yes) echo\n\t  echo \"WARNING: Make job server requires a POSIX-ish system that\"\n\t  echo \"         supports the pipe(), sigaction(), and either\"\n          echo \"         waitpid() or wait3() functions.  Your system doesn't\"\n\t  echo \"         appear to provide one or more of those.\"\n\t  echo \"         Disabling job server support.\"\n          echo ;;\nesac\n\n\n# Specify what files are to be created.\nac_config_files=\"$ac_config_files Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile w32/Makefile\"\n\n\n# OK, do it!\n\ncat >confcache <<\\_ACEOF\n# This file is a shell script that caches the results of configure\n# tests run on this system so they can be shared between configure\n# scripts and configure runs, see configure's option --config-cache.\n# It is not useful on other systems.  If it contains results you don't\n# want to keep, you may remove or edit it.\n#\n# config.status only pays attention to the cache file if you give it\n# the --recheck option to rerun configure.\n#\n# `ac_cv_env_foo' variables (set or unset) will be overridden when\n# loading this file, other *unset* `ac_cv_foo' will be assigned the\n# following values.\n\n_ACEOF\n\n# The following way of writing the cache mishandles newlines in values,\n# but we know of no workaround that is simple, portable, and efficient.\n# So, we kill variables containing newlines.\n# Ultrix sh set writes to stderr and can't be redirected directly,\n# and sets the high bit in the cache file unless we assign to the vars.\n(\n  for ac_var in `(set) 2>&1 | sed -n 's/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline\" >&5\n$as_echo \"$as_me: WARNING: cache variable $ac_var contains a newline\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(\n      *) { eval $ac_var=; unset $ac_var;} ;;\n      esac ;;\n    esac\n  done\n\n  (set) 2>&1 |\n    case $as_nl`(ac_space=' '; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      # `set' does not quote correctly, so add quotes: double-quote\n      # substitution turns \\\\\\\\ into \\\\, and sed turns \\\\ into \\.\n      sed -n \\\n\t\"s/'/'\\\\\\\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\\\2'/p\"\n      ;; #(\n    *)\n      # `set' quotes correctly as required by POSIX, so do not add quotes.\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n) |\n  sed '\n     /^ac_cv_env_/b end\n     t clear\n     :clear\n     s/^\\([^=]*\\)=\\(.*[{}].*\\)$/test \"${\\1+set}\" = set || &/\n     t end\n     s/^\\([^=]*\\)=\\(.*\\)$/\\1=${\\1=\\2}/\n     :end' >>confcache\nif diff \"$cache_file\" confcache >/dev/null 2>&1; then :; else\n  if test -w \"$cache_file\"; then\n    test \"x$cache_file\" != \"x/dev/null\" &&\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: updating cache $cache_file\" >&5\n$as_echo \"$as_me: updating cache $cache_file\" >&6;}\n    cat confcache >$cache_file\n  else\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file\" >&5\n$as_echo \"$as_me: not updating unwritable cache $cache_file\" >&6;}\n  fi\nfi\nrm -f confcache\n\ntest \"x$prefix\" = xNONE && prefix=$ac_default_prefix\n# Let make expand exec_prefix.\ntest \"x$exec_prefix\" = xNONE && exec_prefix='${prefix}'\n\nDEFS=-DHAVE_CONFIG_H\n\nac_libobjs=\nac_ltlibobjs=\nfor ac_i in : $LIBOBJS; do test \"x$ac_i\" = x: && continue\n  # 1. Remove the extension, and $U if already installed.\n  ac_script='s/\\$U\\././;s/\\.o$//;s/\\.obj$//'\n  ac_i=`$as_echo \"$ac_i\" | sed \"$ac_script\"`\n  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR\n  #    will be set to the directory where LIBOBJS objects are built.\n  as_fn_append ac_libobjs \" \\${LIBOBJDIR}$ac_i\\$U.$ac_objext\"\n  as_fn_append ac_ltlibobjs \" \\${LIBOBJDIR}$ac_i\"'$U.lo'\ndone\nLIBOBJS=$ac_libobjs\n\nLTLIBOBJS=$ac_ltlibobjs\n\n\nif test -z \"${AMDEP_TRUE}\" && test -z \"${AMDEP_FALSE}\"; then\n  as_fn_error \"conditional \\\"AMDEP\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${am__fastdepCC_TRUE}\" && test -z \"${am__fastdepCC_FALSE}\"; then\n  as_fn_error \"conditional \\\"am__fastdepCC\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${USE_CUSTOMS_TRUE}\" && test -z \"${USE_CUSTOMS_FALSE}\"; then\n  as_fn_error \"conditional \\\"USE_CUSTOMS\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${USE_LOCAL_GLOB_TRUE}\" && test -z \"${USE_LOCAL_GLOB_FALSE}\"; then\n  as_fn_error \"conditional \\\"USE_LOCAL_GLOB\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${WINDOWSENV_TRUE}\" && test -z \"${WINDOWSENV_FALSE}\"; then\n  as_fn_error \"conditional \\\"WINDOWSENV\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${WINDOWSENV_TRUE}\" && test -z \"${WINDOWSENV_FALSE}\"; then\n  as_fn_error \"conditional \\\"WINDOWSENV\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\n\n: ${CONFIG_STATUS=./config.status}\nac_write_fail=0\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files $CONFIG_STATUS\"\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS\" >&5\n$as_echo \"$as_me: creating $CONFIG_STATUS\" >&6;}\nas_write_fail=0\ncat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1\n#! $SHELL\n# Generated by $as_me.\n# Run this file to recreate the current configuration.\n# Compiler output produced by configure, useful for debugging\n# configure, is in config.log if it exists.\n\ndebug=false\nac_cs_recheck=false\nac_cs_silent=false\n\nSHELL=\\${CONFIG_SHELL-$SHELL}\nexport SHELL\n_ASEOF\ncat >>$CONFIG_STATUS <<\\_ASEOF || as_write_fail=1\n## -------------------- ##\n## M4sh Initialization. ##\n## -------------------- ##\n\n# Be more Bourne compatible\nDUALCASE=1; export DUALCASE # for MKS sh\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :\n  emulate sh\n  NULLCMD=:\n  # Pre-4.2 versions of Zsh do word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in #(\n  *posix*) :\n    set -o posix ;; #(\n  *) :\n     ;;\nesac\nfi\n\n\nas_nl='\n'\nexport as_nl\n# Printing a long string crashes Solaris 7 /usr/bin/printf.\nas_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo\nas_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo\n# Prefer a ksh shell builtin over an external printf program on Solaris,\n# but without wasting forks for bash or zsh.\nif test -z \"$BASH_VERSION$ZSH_VERSION\" \\\n    && (test \"X`print -r -- $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='print -r --'\n  as_echo_n='print -rn --'\nelif (test \"X`printf %s $as_echo`\" = \"X$as_echo\") 2>/dev/null; then\n  as_echo='printf %s\\n'\n  as_echo_n='printf %s'\nelse\n  if test \"X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`\" = \"X-n $as_echo\"; then\n    as_echo_body='eval /usr/ucb/echo -n \"$1$as_nl\"'\n    as_echo_n='/usr/ucb/echo -n'\n  else\n    as_echo_body='eval expr \"X$1\" : \"X\\\\(.*\\\\)\"'\n    as_echo_n_body='eval\n      arg=$1;\n      case $arg in #(\n      *\"$as_nl\"*)\n\texpr \"X$arg\" : \"X\\\\(.*\\\\)$as_nl\";\n\targ=`expr \"X$arg\" : \".*$as_nl\\\\(.*\\\\)\"`;;\n      esac;\n      expr \"X$arg\" : \"X\\\\(.*\\\\)\" | tr -d \"$as_nl\"\n    '\n    export as_echo_n_body\n    as_echo_n='sh -c $as_echo_n_body as_echo'\n  fi\n  export as_echo_body\n  as_echo='sh -c $as_echo_body as_echo'\nfi\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  PATH_SEPARATOR=:\n  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {\n    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||\n      PATH_SEPARATOR=';'\n  }\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in #((\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\n  done\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  $as_echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  exit 1\nfi\n\n# Unset variables that we do not need and which cause bugs (e.g. in\n# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the \"|| exit 1\"\n# suppresses any \"Segmentation fault\" message there.  '((' could\n# trigger a bug in pdksh 5.2.14.\nfor as_var in BASH_ENV ENV MAIL MAILPATH\ndo eval test x\\${$as_var+set} = xset \\\n  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nLC_ALL=C\nexport LC_ALL\nLANGUAGE=C\nexport LANGUAGE\n\n# CDPATH.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\n\n# as_fn_error ERROR [LINENO LOG_FD]\n# ---------------------------------\n# Output \"`basename $0`: error: ERROR\" to stderr. If LINENO and LOG_FD are\n# provided, also output the error to LOG_FD, referencing LINENO. Then exit the\n# script with status $?, using 1 if that was 0.\nas_fn_error ()\n{\n  as_status=$?; test $as_status -eq 0 && as_status=1\n  if test \"$3\"; then\n    as_lineno=${as_lineno-\"$2\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $1\" >&$3\n  fi\n  $as_echo \"$as_me: error: $1\" >&2\n  as_fn_exit $as_status\n} # as_fn_error\n\n\n# as_fn_set_status STATUS\n# -----------------------\n# Set $? to STATUS, without forking.\nas_fn_set_status ()\n{\n  return $1\n} # as_fn_set_status\n\n# as_fn_exit STATUS\n# -----------------\n# Exit the shell with STATUS, even in a \"trap 0\" or \"set -e\" context.\nas_fn_exit ()\n{\n  set +e\n  as_fn_set_status $1\n  exit $1\n} # as_fn_exit\n\n# as_fn_unset VAR\n# ---------------\n# Portably unset VAR.\nas_fn_unset ()\n{\n  { eval $1=; unset $1;}\n}\nas_unset=as_fn_unset\n# as_fn_append VAR VALUE\n# ----------------------\n# Append the text in VALUE to the end of the definition contained in VAR. Take\n# advantage of any shell optimizations that allow amortized linear growth over\n# repeated appends, instead of the typical quadratic growth present in naive\n# implementations.\nif (eval \"as_var=1; as_var+=2; test x\\$as_var = x12\") 2>/dev/null; then :\n  eval 'as_fn_append ()\n  {\n    eval $1+=\\$2\n  }'\nelse\n  as_fn_append ()\n  {\n    eval $1=\\$$1\\$2\n  }\nfi # as_fn_append\n\n# as_fn_arith ARG...\n# ------------------\n# Perform arithmetic evaluation on the ARGs, and store the result in the\n# global $as_val. Take advantage of shells that can avoid forks. The arguments\n# must be portable across $(()) and expr.\nif (eval \"test \\$(( 1 + 1 )) = 2\") 2>/dev/null; then :\n  eval 'as_fn_arith ()\n  {\n    as_val=$(( $* ))\n  }'\nelse\n  as_fn_arith ()\n  {\n    as_val=`expr \"$@\" || test $? -eq 1`\n  }\nfi # as_fn_arith\n\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\nif (as_dir=`dirname -- /` && test \"X$as_dir\" = X/) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in #(((((\n-n*)\n  case `echo 'xy\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  xy)  ECHO_C='\\c';;\n  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null\n       ECHO_T='\t';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir 2>/dev/null\nfi\nif (echo >conf$$.file) 2>/dev/null; then\n  if ln -s conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s='ln -s'\n    # ... but there are two gotchas:\n    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n    # In both cases, we have to default to `cp -p'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -p'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -p'\n  fi\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\n\n# as_fn_mkdir_p\n# -------------\n# Create \"$as_dir\" as a directory, including parents if necessary.\nas_fn_mkdir_p ()\n{\n\n  case $as_dir in #(\n  -*) as_dir=./$as_dir;;\n  esac\n  test -d \"$as_dir\" || eval $as_mkdir_p || {\n    as_dirs=\n    while :; do\n      case $as_dir in #(\n      *\\'*) as_qdir=`$as_echo \"$as_dir\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; #'(\n      *) as_qdir=$as_dir;;\n      esac\n      as_dirs=\"'$as_qdir' $as_dirs\"\n      as_dir=`$as_dirname -- \"$as_dir\" ||\n$as_expr X\"$as_dir\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_dir\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$as_dir\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n      test -d \"$as_dir\" && break\n    done\n    test -z \"$as_dirs\" || eval \"mkdir $as_dirs\"\n  } || test -d \"$as_dir\" || as_fn_error \"cannot create directory $as_dir\"\n\n\n} # as_fn_mkdir_p\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p='mkdir -p \"$as_dir\"'\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\nif test -x / >/dev/null 2>&1; then\n  as_test_x='test -x'\nelse\n  if ls -dL / >/dev/null 2>&1; then\n    as_ls_L_option=L\n  else\n    as_ls_L_option=\n  fi\n  as_test_x='\n    eval sh -c '\\''\n      if test -d \"$1\"; then\n\ttest -d \"$1/.\";\n      else\n\tcase $1 in #(\n\t-*)set \"./$1\";;\n\tesac;\n\tcase `ls -ld'$as_ls_L_option' \"$1\" 2>/dev/null` in #((\n\t???[sx]*):;;*)false;;esac;fi\n    '\\'' sh\n  '\nfi\nas_executable_p=$as_test_x\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\nexec 6>&1\n## ----------------------------------- ##\n## Main body of $CONFIG_STATUS script. ##\n## ----------------------------------- ##\n_ASEOF\ntest $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# Save the log message, to keep $0 and so on meaningful, and to\n# report actual input values of CONFIG_FILES etc. instead of their\n# values after options handling.\nac_log=\"\nThis file was extended by GNU make $as_me 3.81, which was\ngenerated by GNU Autoconf 2.65.  Invocation command line was\n\n  CONFIG_FILES    = $CONFIG_FILES\n  CONFIG_HEADERS  = $CONFIG_HEADERS\n  CONFIG_LINKS    = $CONFIG_LINKS\n  CONFIG_COMMANDS = $CONFIG_COMMANDS\n  $ $0 $@\n\non `(hostname || uname -n) 2>/dev/null | sed 1q`\n\"\n\n_ACEOF\n\ncase $ac_config_files in *\"\n\"*) set x $ac_config_files; shift; ac_config_files=$*;;\nesac\n\ncase $ac_config_headers in *\"\n\"*) set x $ac_config_headers; shift; ac_config_headers=$*;;\nesac\n\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n# Files that config.status was made for.\nconfig_files=\"$ac_config_files\"\nconfig_headers=\"$ac_config_headers\"\nconfig_commands=\"$ac_config_commands\"\n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nac_cs_usage=\"\\\n\\`$as_me' instantiates files and other configuration actions\nfrom templates according to the current configuration.  Unless the files\nand actions are specified as TAGs, all are instantiated by default.\n\nUsage: $0 [OPTION]... [TAG]...\n\n  -h, --help       print this help, then exit\n  -V, --version    print version number and configuration settings, then exit\n      --config     print configuration, then exit\n  -q, --quiet, --silent\n                   do not print progress messages\n  -d, --debug      don't remove temporary files\n      --recheck    update $as_me by reconfiguring in the same conditions\n      --file=FILE[:TEMPLATE]\n                   instantiate the configuration file FILE\n      --header=FILE[:TEMPLATE]\n                   instantiate the configuration header FILE\n\nConfiguration files:\n$config_files\n\nConfiguration headers:\n$config_headers\n\nConfiguration commands:\n$config_commands\n\nReport bugs to <bug-make@gnu.org>.\nGNU make home page: <http://www.gnu.org/software/make/>.\nGeneral help using GNU software: <http://www.gnu.org/gethelp/>.\"\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nac_cs_config=\"`$as_echo \"$ac_configure_args\" | sed 's/^ //; s/[\\\\\"\"\\`\\$]/\\\\\\\\&/g'`\"\nac_cs_version=\"\\\\\nGNU make config.status 3.81\nconfigured by $0, generated by GNU Autoconf 2.65,\n  with options \\\\\"\\$ac_cs_config\\\\\"\n\nCopyright (C) 2009 Free Software Foundation, Inc.\nThis config.status script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\"\n\nac_pwd='$ac_pwd'\nsrcdir='$srcdir'\nINSTALL='$INSTALL'\nAWK='$AWK'\ntest -n \"\\$AWK\" || AWK=awk\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# The default lists apply if the user does not specify any file.\nac_need_defaults=:\nwhile test $# != 0\ndo\n  case $1 in\n  --*=*)\n    ac_option=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=`expr \"X$1\" : 'X[^=]*=\\(.*\\)'`\n    ac_shift=:\n    ;;\n  *)\n    ac_option=$1\n    ac_optarg=$2\n    ac_shift=shift\n    ;;\n  esac\n\n  case $ac_option in\n  # Handling of the options.\n  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)\n    ac_cs_recheck=: ;;\n  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )\n    $as_echo \"$ac_cs_version\"; exit ;;\n  --config | --confi | --conf | --con | --co | --c )\n    $as_echo \"$ac_cs_config\"; exit ;;\n  --debug | --debu | --deb | --de | --d | -d )\n    debug=: ;;\n  --file | --fil | --fi | --f )\n    $ac_shift\n    case $ac_optarg in\n    *\\'*) ac_optarg=`$as_echo \"$ac_optarg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    as_fn_append CONFIG_FILES \" '$ac_optarg'\"\n    ac_need_defaults=false;;\n  --header | --heade | --head | --hea )\n    $ac_shift\n    case $ac_optarg in\n    *\\'*) ac_optarg=`$as_echo \"$ac_optarg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    as_fn_append CONFIG_HEADERS \" '$ac_optarg'\"\n    ac_need_defaults=false;;\n  --he | --h)\n    # Conflict between --help and --header\n    as_fn_error \"ambiguous option: \\`$1'\nTry \\`$0 --help' for more information.\";;\n  --help | --hel | -h )\n    $as_echo \"$ac_cs_usage\"; exit ;;\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil | --si | --s)\n    ac_cs_silent=: ;;\n\n  # This is an error.\n  -*) as_fn_error \"unrecognized option: \\`$1'\nTry \\`$0 --help' for more information.\" ;;\n\n  *) as_fn_append ac_config_targets \" $1\"\n     ac_need_defaults=false ;;\n\n  esac\n  shift\ndone\n\nac_configure_extra_args=\n\nif $ac_cs_silent; then\n  exec 6>/dev/null\n  ac_configure_extra_args=\"$ac_configure_extra_args --silent\"\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nif \\$ac_cs_recheck; then\n  set X '$SHELL' '$0' $ac_configure_args \\$ac_configure_extra_args --no-create --no-recursion\n  shift\n  \\$as_echo \"running CONFIG_SHELL=$SHELL \\$*\" >&6\n  CONFIG_SHELL='$SHELL'\n  export CONFIG_SHELL\n  exec \"\\$@\"\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nexec 5>>config.log\n{\n  echo\n  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX\n## Running $as_me. ##\n_ASBOX\n  $as_echo \"$ac_log\"\n} >&5\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n#\n# INIT-COMMANDS\n#\nAMDEP_TRUE=\"$AMDEP_TRUE\" ac_aux_dir=\"$ac_aux_dir\"\n# Capture the value of obsolete ALL_LINGUAS because we need it to compute\n    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it\n    # from automake.\n    eval 'OBSOLETE_ALL_LINGUAS''=\"$ALL_LINGUAS\"'\n    # Capture the value of LINGUAS because we need it to compute CATALOGS.\n    LINGUAS=\"${LINGUAS-%UNSET%}\"\n\n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n\n# Handling of arguments.\nfor ac_config_target in $ac_config_targets\ndo\n  case $ac_config_target in\n    \"config.h\") CONFIG_HEADERS=\"$CONFIG_HEADERS config.h\" ;;\n    \"depfiles\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS depfiles\" ;;\n    \"default-1\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS default-1\" ;;\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"glob/Makefile\") CONFIG_FILES=\"$CONFIG_FILES glob/Makefile\" ;;\n    \"po/Makefile.in\") CONFIG_FILES=\"$CONFIG_FILES po/Makefile.in\" ;;\n    \"config/Makefile\") CONFIG_FILES=\"$CONFIG_FILES config/Makefile\" ;;\n    \"doc/Makefile\") CONFIG_FILES=\"$CONFIG_FILES doc/Makefile\" ;;\n    \"w32/Makefile\") CONFIG_FILES=\"$CONFIG_FILES w32/Makefile\" ;;\n\n  *) as_fn_error \"invalid argument: \\`$ac_config_target'\" \"$LINENO\" 5;;\n  esac\ndone\n\n\n# If the user did not use the arguments to specify the items to instantiate,\n# then the envvar interface is used.  Set only those that are not.\n# We use the long form for the default assignment because of an extremely\n# bizarre bug on SunOS 4.1.3.\nif $ac_need_defaults; then\n  test \"${CONFIG_FILES+set}\" = set || CONFIG_FILES=$config_files\n  test \"${CONFIG_HEADERS+set}\" = set || CONFIG_HEADERS=$config_headers\n  test \"${CONFIG_COMMANDS+set}\" = set || CONFIG_COMMANDS=$config_commands\nfi\n\n# Have a temporary directory for convenience.  Make it in the build tree\n# simply because there is no reason against having it here, and in addition,\n# creating and moving files from /tmp can sometimes cause problems.\n# Hook for its removal unless debugging.\n# Note that there is a small window in which the directory will not be cleaned:\n# after its creation but before its name has been assigned to `$tmp'.\n$debug ||\n{\n  tmp=\n  trap 'exit_status=$?\n  { test -z \"$tmp\" || test ! -d \"$tmp\" || rm -fr \"$tmp\"; } && exit $exit_status\n' 0\n  trap 'as_fn_exit 1' 1 2 13 15\n}\n# Create a (secure) tmp directory for tmp files.\n\n{\n  tmp=`(umask 077 && mktemp -d \"./confXXXXXX\") 2>/dev/null` &&\n  test -n \"$tmp\" && test -d \"$tmp\"\n}  ||\n{\n  tmp=./conf$$-$RANDOM\n  (umask 077 && mkdir \"$tmp\")\n} || as_fn_error \"cannot create a temporary directory in .\" \"$LINENO\" 5\n\n# Set up the scripts for CONFIG_FILES section.\n# No need to generate them if there are no CONFIG_FILES.\n# This happens for instance with `./config.status config.h'.\nif test -n \"$CONFIG_FILES\"; then\n\nif $AWK 'BEGIN { getline <\"/dev/null\" }' </dev/null 2>/dev/null; then\n  ac_cs_awk_getline=:\n  ac_cs_awk_pipe_init=\n  ac_cs_awk_read_file='\n      while ((getline aline < (F[key])) > 0)\n\tprint(aline)\n      close(F[key])'\n  ac_cs_awk_pipe_fini=\nelse\n  ac_cs_awk_getline=false\n  ac_cs_awk_pipe_init=\"print \\\"cat <<'|#_!!_#|' &&\\\"\"\n  ac_cs_awk_read_file='\n      print \"|#_!!_#|\"\n      print \"cat \" F[key] \" &&\"\n      '$ac_cs_awk_pipe_init\n  # The final `:' finishes the AND list.\n  ac_cs_awk_pipe_fini='END { print \"|#_!!_#|\"; print \":\" }'\nfi\nac_cr=`echo X | tr X '\\015'`\n# On cygwin, bash can eat \\r inside `` if the user requested igncr.\n# But we know of no other shell where ac_cr would be empty at this\n# point, so we can use a bashism as a fallback.\nif test \"x$ac_cr\" = x; then\n  eval ac_cr=\\$\\'\\\\r\\'\nfi\nac_cs_awk_cr=`$AWK 'BEGIN { print \"a\\rb\" }' </dev/null 2>/dev/null`\nif test \"$ac_cs_awk_cr\" = \"a${ac_cr}b\"; then\n  ac_cs_awk_cr='\\r'\nelse\n  ac_cs_awk_cr=$ac_cr\nfi\n\necho 'BEGIN {' >\"$tmp/subs1.awk\" &&\n_ACEOF\n\n# Create commands to substitute file output variables.\n{\n  echo \"cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\" &&\n  echo 'cat >>\"\\$tmp/subs1.awk\" <<\\\\_ACAWK &&' &&\n  echo \"$ac_subst_files\" | sed 's/.*/F[\"&\"]=\"$&\"/' &&\n  echo \"_ACAWK\" &&\n  echo \"_ACEOF\"\n} >conf$$files.sh &&\n. ./conf$$files.sh ||\n  as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\nrm -f conf$$files.sh\n\n{\n  echo \"cat >conf$$subs.awk <<_ACEOF\" &&\n  echo \"$ac_subst_vars\" | sed 's/.*/&!$&$ac_delim/' &&\n  echo \"_ACEOF\"\n} >conf$$subs.sh ||\n  as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\nac_delim_num=`echo \"$ac_subst_vars\" | grep -c '$'`\nac_delim='%!_!# '\nfor ac_last_try in false false false false false :; do\n  . ./conf$$subs.sh ||\n    as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\n\n  ac_delim_n=`sed -n \"s/.*$ac_delim\\$/X/p\" conf$$subs.awk | grep -c X`\n  if test $ac_delim_n = $ac_delim_num; then\n    break\n  elif $ac_last_try; then\n    as_fn_error \"could not make $CONFIG_STATUS\" \"$LINENO\" 5\n  else\n    ac_delim=\"$ac_delim!$ac_delim _$ac_delim!! \"\n  fi\ndone\nrm -f conf$$subs.sh\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\ncat >>\"\\$tmp/subs1.awk\" <<\\\\_ACAWK &&\n_ACEOF\nsed -n '\nh\ns/^/S[\"/; s/!.*/\"]=/\np\ng\ns/^[^!]*!//\n:repl\nt repl\ns/'\"$ac_delim\"'$//\nt delim\n:nl\nh\ns/\\(.\\{148\\}\\)..*/\\1/\nt more1\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\\\\n\"\\\\/\np\nn\nb repl\n:more1\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"\\\\/\np\ng\ns/.\\{148\\}//\nt nl\n:delim\nh\ns/\\(.\\{148\\}\\)..*/\\1/\nt more2\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"/\np\nb\n:more2\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"\\\\/\np\ng\ns/.\\{148\\}//\nt delim\n' <conf$$subs.awk | sed '\n/^[^\"\"]/{\n  N\n  s/\\n//\n}\n' >>$CONFIG_STATUS || ac_write_fail=1\nrm -f conf$$subs.awk\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n_ACAWK\ncat >>\"\\$tmp/subs1.awk\" <<_ACAWK &&\n  for (key in S) S_is_set[key] = 1\n  FS = \"\u0007\"\n  \\$ac_cs_awk_pipe_init\n}\n{\n  line = $ 0\n  nfields = split(line, field, \"@\")\n  substed = 0\n  len = length(field[1])\n  for (i = 2; i < nfields; i++) {\n    key = field[i]\n    keylen = length(key)\n    if (S_is_set[key]) {\n      value = S[key]\n      line = substr(line, 1, len) \"\" value \"\" substr(line, len + keylen + 3)\n      len += length(value) + length(field[++i])\n      substed = 1\n    } else\n      len += 1 + keylen\n  }\n  if (nfields == 3 && !substed) {\n    key = field[2]\n    if (F[key] != \"\" && line ~ /^[\t ]*@.*@[\t ]*$/) {\n      \\$ac_cs_awk_read_file\n      next\n    }\n  }\n  print line\n}\n\\$ac_cs_awk_pipe_fini\n_ACAWK\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nif sed \"s/$ac_cr//\" < /dev/null > /dev/null 2>&1; then\n  sed \"s/$ac_cr\\$//; s/$ac_cr/$ac_cs_awk_cr/g\"\nelse\n  cat\nfi < \"$tmp/subs1.awk\" > \"$tmp/subs.awk\" \\\n  || as_fn_error \"could not setup config files machinery\" \"$LINENO\" 5\n_ACEOF\n\n# VPATH may cause trouble with some makes, so we remove $(srcdir),\n# ${srcdir} and @srcdir@ from VPATH if srcdir is \".\", strip leading and\n# trailing colons and then remove the whole line if VPATH becomes empty\n# (actually we leave an empty line to preserve line numbers).\nif test \"x$srcdir\" = x.; then\n  ac_vpsub='/^[\t ]*VPATH[\t ]*=/{\ns/:*\\$(srcdir):*/:/\ns/:*\\${srcdir}:*/:/\ns/:*@srcdir@:*/:/\ns/^\\([^=]*=[\t ]*\\):*/\\1/\ns/:*$//\ns/^[^=]*=[\t ]*$//\n}'\nfi\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nfi # test -n \"$CONFIG_FILES\"\n\n# Set up the scripts for CONFIG_HEADERS section.\n# No need to generate them if there are no CONFIG_HEADERS.\n# This happens for instance with `./config.status Makefile'.\nif test -n \"$CONFIG_HEADERS\"; then\ncat >\"$tmp/defines.awk\" <<\\_ACAWK ||\nBEGIN {\n_ACEOF\n\n# Transform confdefs.h into an awk script `defines.awk', embedded as\n# here-document in config.status, that substitutes the proper values into\n# config.h.in to produce config.h.\n\n# Create a delimiter string that does not exist in confdefs.h, to ease\n# handling of long lines.\nac_delim='%!_!# '\nfor ac_last_try in false false :; do\n  ac_t=`sed -n \"/$ac_delim/p\" confdefs.h`\n  if test -z \"$ac_t\"; then\n    break\n  elif $ac_last_try; then\n    as_fn_error \"could not make $CONFIG_HEADERS\" \"$LINENO\" 5\n  else\n    ac_delim=\"$ac_delim!$ac_delim _$ac_delim!! \"\n  fi\ndone\n\n# For the awk script, D is an array of macro values keyed by name,\n# likewise P contains macro parameters if any.  Preserve backslash\n# newline sequences.\n\nac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*\nsed -n '\ns/.\\{148\\}/&'\"$ac_delim\"'/g\nt rset\n:rset\ns/^[\t ]*#[\t ]*define[\t ][\t ]*/ /\nt def\nd\n:def\ns/\\\\$//\nt bsnl\ns/[\"\\\\]/\\\\&/g\ns/^ \\('\"$ac_word_re\"'\\)\\(([^()]*)\\)[\t ]*\\(.*\\)/P[\"\\1\"]=\"\\2\"\\\nD[\"\\1\"]=\" \\3\"/p\ns/^ \\('\"$ac_word_re\"'\\)[\t ]*\\(.*\\)/D[\"\\1\"]=\" \\2\"/p\nd\n:bsnl\ns/[\"\\\\]/\\\\&/g\ns/^ \\('\"$ac_word_re\"'\\)\\(([^()]*)\\)[\t ]*\\(.*\\)/P[\"\\1\"]=\"\\2\"\\\nD[\"\\1\"]=\" \\3\\\\\\\\\\\\n\"\\\\/p\nt cont\ns/^ \\('\"$ac_word_re\"'\\)[\t ]*\\(.*\\)/D[\"\\1\"]=\" \\2\\\\\\\\\\\\n\"\\\\/p\nt cont\nd\n:cont\nn\ns/.\\{148\\}/&'\"$ac_delim\"'/g\nt clear\n:clear\ns/\\\\$//\nt bsnlc\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\"/p\nd\n:bsnlc\ns/[\"\\\\]/\\\\&/g; s/^/\"/; s/$/\\\\\\\\\\\\n\"\\\\/p\nb cont\n' <confdefs.h | sed '\ns/'\"$ac_delim\"'/\"\\\\\\\n\"/g' >>$CONFIG_STATUS || ac_write_fail=1\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n  for (key in D) D_is_set[key] = 1\n  FS = \"\u0007\"\n}\n/^[\\t ]*#[\\t ]*(define|undef)[\\t ]+$ac_word_re([\\t (]|\\$)/ {\n  line = \\$ 0\n  split(line, arg, \" \")\n  if (arg[1] == \"#\") {\n    defundef = arg[2]\n    mac1 = arg[3]\n  } else {\n    defundef = substr(arg[1], 2)\n    mac1 = arg[2]\n  }\n  split(mac1, mac2, \"(\") #)\n  macro = mac2[1]\n  prefix = substr(line, 1, index(line, defundef) - 1)\n  if (D_is_set[macro]) {\n    # Preserve the white space surrounding the \"#\".\n    print prefix \"define\", macro P[macro] D[macro]\n    next\n  } else {\n    # Replace #undef with comments.  This is necessary, for example,\n    # in the case of _POSIX_SOURCE, which is predefined and required\n    # on some systems where configure will not decide to define it.\n    if (defundef == \"undef\") {\n      print \"/*\", prefix defundef, macro, \"*/\"\n      next\n    }\n  }\n}\n{ print }\n_ACAWK\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n  as_fn_error \"could not setup config headers machinery\" \"$LINENO\" 5\nfi # test -n \"$CONFIG_HEADERS\"\n\n\neval set X \"  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS\"\nshift\nfor ac_tag\ndo\n  case $ac_tag in\n  :[FHLC]) ac_mode=$ac_tag; continue;;\n  esac\n  case $ac_mode$ac_tag in\n  :[FHL]*:*);;\n  :L* | :C*:*) as_fn_error \"invalid tag \\`$ac_tag'\" \"$LINENO\" 5;;\n  :[FH]-) ac_tag=-:-;;\n  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;\n  esac\n  ac_save_IFS=$IFS\n  IFS=:\n  set x $ac_tag\n  IFS=$ac_save_IFS\n  shift\n  ac_file=$1\n  shift\n\n  case $ac_mode in\n  :L) ac_source=$1;;\n  :[FH])\n    ac_file_inputs=\n    for ac_f\n    do\n      case $ac_f in\n      -) ac_f=\"$tmp/stdin\";;\n      *) # Look for the file first in the build tree, then in the source tree\n\t # (if the path is not absolute).  The absolute path cannot be DOS-style,\n\t # because $ac_f cannot contain `:'.\n\t test -f \"$ac_f\" ||\n\t   case $ac_f in\n\t   [\\\\/$]*) false;;\n\t   *) test -f \"$srcdir/$ac_f\" && ac_f=\"$srcdir/$ac_f\";;\n\t   esac ||\n\t   as_fn_error \"cannot find input file: \\`$ac_f'\" \"$LINENO\" 5;;\n      esac\n      case $ac_f in *\\'*) ac_f=`$as_echo \"$ac_f\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; esac\n      as_fn_append ac_file_inputs \" '$ac_f'\"\n    done\n\n    # Let's still pretend it is `configure' which instantiates (i.e., don't\n    # use $as_me), people would be surprised to read:\n    #    /* config.h.  Generated by config.status.  */\n    configure_input='Generated from '`\n\t  $as_echo \"$*\" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'\n\t`' by configure.'\n    if test x\"$ac_file\" != x-; then\n      configure_input=\"$ac_file.  $configure_input\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: creating $ac_file\" >&5\n$as_echo \"$as_me: creating $ac_file\" >&6;}\n    fi\n    # Neutralize special characters interpreted by sed in replacement strings.\n    case $configure_input in #(\n    *\\&* | *\\|* | *\\\\* )\n       ac_sed_conf_input=`$as_echo \"$configure_input\" |\n       sed 's/[\\\\\\\\&|]/\\\\\\\\&/g'`;; #(\n    *) ac_sed_conf_input=$configure_input;;\n    esac\n\n    case $ac_tag in\n    *:-:* | *:-) cat >\"$tmp/stdin\" \\\n      || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5 ;;\n    esac\n    ;;\n  esac\n\n  ac_dir=`$as_dirname -- \"$ac_file\" ||\n$as_expr X\"$ac_file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)$' \\| \\\n\t X\"$ac_file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$ac_file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  as_dir=\"$ac_dir\"; as_fn_mkdir_p\n  ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`$as_echo \"$ac_dir\" | sed 's|^\\.[\\\\/]||'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`$as_echo \"$ac_dir_suffix\" | sed 's|/[^\\\\/]*|/..|g;s|/||'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n\n  case $ac_mode in\n  :F)\n  #\n  # CONFIG_FILE\n  #\n\n  case $INSTALL in\n  [\\\\/$]* | ?:[\\\\/]* ) ac_INSTALL=$INSTALL ;;\n  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;\n  esac\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n# If the template does not know about datarootdir, expand it.\n# FIXME: This hack should be removed a few years after 2.60.\nac_datarootdir_hack=; ac_datarootdir_seen=\nac_sed_dataroot='\n/datarootdir/ {\n  p\n  q\n}\n/@datadir@/p\n/@docdir@/p\n/@infodir@/p\n/@localedir@/p\n/@mandir@/p'\ncase `eval \"sed -n \\\"\\$ac_sed_dataroot\\\" $ac_file_inputs\"` in\n*datarootdir*) ac_datarootdir_seen=yes;;\n*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&5\n$as_echo \"$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&2;}\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n  ac_datarootdir_hack='\n  s&@datadir@&$datadir&g\n  s&@docdir@&$docdir&g\n  s&@infodir@&$infodir&g\n  s&@localedir@&$localedir&g\n  s&@mandir@&$mandir&g\n  s&\\\\\\${datarootdir}&$datarootdir&g' ;;\nesac\n_ACEOF\n\n# Neutralize VPATH when `$srcdir' = `.'.\n# Shell code in configure.ac might set extrasub.\n# FIXME: do we really want to maintain this feature?\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\nac_sed_extra=\"$ac_vpsub\n$extrasub\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\n:t\n/@[a-zA-Z_][a-zA-Z_0-9]*@/!b\ns|@configure_input@|$ac_sed_conf_input|;t t\ns&@top_builddir@&$ac_top_builddir_sub&;t t\ns&@top_build_prefix@&$ac_top_build_prefix&;t t\ns&@srcdir@&$ac_srcdir&;t t\ns&@abs_srcdir@&$ac_abs_srcdir&;t t\ns&@top_srcdir@&$ac_top_srcdir&;t t\ns&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t\ns&@builddir@&$ac_builddir&;t t\ns&@abs_builddir@&$ac_abs_builddir&;t t\ns&@abs_top_builddir@&$ac_abs_top_builddir&;t t\ns&@INSTALL@&$ac_INSTALL&;t t\n$ac_datarootdir_hack\n\"\neval sed \\\"\\$ac_sed_extra\\\" \"$ac_file_inputs\" |\nif $ac_cs_awk_getline; then\n  $AWK -f \"$tmp/subs.awk\"\nelse\n  $AWK -f \"$tmp/subs.awk\" | $SHELL\nfi >$tmp/out \\\n  || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n\ntest -z \"$ac_datarootdir_hack$ac_datarootdir_seen\" &&\n  { ac_out=`sed -n '/\\${datarootdir}/p' \"$tmp/out\"`; test -n \"$ac_out\"; } &&\n  { ac_out=`sed -n '/^[\t ]*datarootdir[\t ]*:*=/p' \"$tmp/out\"`; test -z \"$ac_out\"; } &&\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \\`datarootdir'\nwhich seems to be undefined.  Please make sure it is defined.\" >&5\n$as_echo \"$as_me: WARNING: $ac_file contains a reference to the variable \\`datarootdir'\nwhich seems to be undefined.  Please make sure it is defined.\" >&2;}\n\n  rm -f \"$tmp/stdin\"\n  case $ac_file in\n  -) cat \"$tmp/out\" && rm -f \"$tmp/out\";;\n  *) rm -f \"$ac_file\" && mv \"$tmp/out\" \"$ac_file\";;\n  esac \\\n  || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n ;;\n  :H)\n  #\n  # CONFIG_HEADER\n  #\n  if test x\"$ac_file\" != x-; then\n    {\n      $as_echo \"/* $configure_input  */\" \\\n      && eval '$AWK -f \"$tmp/defines.awk\"' \"$ac_file_inputs\"\n    } >\"$tmp/config.h\" \\\n      || as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n    if diff \"$ac_file\" \"$tmp/config.h\" >/dev/null 2>&1; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: $ac_file is unchanged\" >&5\n$as_echo \"$as_me: $ac_file is unchanged\" >&6;}\n    else\n      rm -f \"$ac_file\"\n      mv \"$tmp/config.h\" \"$ac_file\" \\\n\t|| as_fn_error \"could not create $ac_file\" \"$LINENO\" 5\n    fi\n  else\n    $as_echo \"/* $configure_input  */\" \\\n      && eval '$AWK -f \"$tmp/defines.awk\"' \"$ac_file_inputs\" \\\n      || as_fn_error \"could not create -\" \"$LINENO\" 5\n  fi\n# Compute \"$ac_file\"'s index in $config_headers.\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    \"$ac_file\" | \"$ac_file\":* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for \"$ac_file\"\" >`$as_dirname -- \"$ac_file\" ||\n$as_expr X\"$ac_file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)$' \\| \\\n\t X\"$ac_file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$ac_file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`/stamp-h$_am_stamp_count\n ;;\n\n  :C)  { $as_echo \"$as_me:${as_lineno-$LINENO}: executing $ac_file commands\" >&5\n$as_echo \"$as_me: executing $ac_file commands\" >&6;}\n ;;\n  esac\n\n\n  case $ac_file$ac_mode in\n    \"depfiles\":C) test x\"$AMDEP_TRUE\" != x\"\" || for mf in $CONFIG_FILES; do\n  # Strip MF so we end up with the name of the file.\n  mf=`echo \"$mf\" | sed -e 's/:.*$//'`\n  # Check whether this is an Automake generated Makefile or not.\n  # We used to match only the files named `Makefile.in', but\n  # some people rename them; so instead we look at the file content.\n  # Grep'ing the first line is not enough: some people post-process\n  # each Makefile.in and add a new line on top of each file to say so.\n  # So let's grep whole file.\n  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then\n    dirpart=`$as_dirname -- \"$mf\" ||\n$as_expr X\"$mf\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$mf\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$mf\" : 'X\\(//\\)$' \\| \\\n\t X\"$mf\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$mf\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  else\n    continue\n  fi\n  # Extract the definition of DEPDIR, am__include, and am__quote\n  # from the Makefile without running `make'.\n  DEPDIR=`sed -n 's/^DEPDIR = //p' < \"$mf\"`\n  test -z \"$DEPDIR\" && continue\n  am__include=`sed -n 's/^am__include = //p' < \"$mf\"`\n  test -z \"am__include\" && continue\n  am__quote=`sed -n 's/^am__quote = //p' < \"$mf\"`\n  # When using ansi2knr, U may be empty or an underscore; expand it\n  U=`sed -n 's/^U = //p' < \"$mf\"`\n  # Find all dependency output files, they are included files with\n  # $(DEPDIR) in their names.  We invoke sed twice because it is the\n  # simplest approach to changing $(DEPDIR) to its actual value in the\n  # expansion.\n  for file in `sed -n \"\n    s/^$am__include $am__quote\\(.*(DEPDIR).*\\)$am__quote\"'$/\\1/p' <\"$mf\" | \\\n       sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/g' -e 's/\\$U/'\"$U\"'/g'`; do\n    # Make sure the directory exists.\n    test -f \"$dirpart/$file\" && continue\n    fdir=`$as_dirname -- \"$file\" ||\n$as_expr X\"$file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$file\" : 'X\\(//\\)$' \\| \\\n\t X\"$file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n    as_dir=$dirpart/$fdir; as_fn_mkdir_p\n    # echo \"creating $dirpart/$file\"\n    echo '# dummy' > \"$dirpart/$file\"\n  done\ndone\n ;;\n    \"default-1\":C)\n    for ac_file in $CONFIG_FILES; do\n      # Support \"outfile[:infile[:infile...]]\"\n      case \"$ac_file\" in\n        *:*) ac_file=`echo \"$ac_file\"|sed 's%:.*%%'` ;;\n      esac\n      # PO directories have a Makefile.in generated from Makefile.in.in.\n      case \"$ac_file\" in */Makefile.in)\n        # Adjust a relative srcdir.\n        ac_dir=`echo \"$ac_file\"|sed 's%/[^/][^/]*$%%'`\n        ac_dir_suffix=\"/`echo \"$ac_dir\"|sed 's%^\\./%%'`\"\n        ac_dots=`echo \"$ac_dir_suffix\"|sed 's%/[^/]*%../%g'`\n        # In autoconf-2.13 it is called $ac_given_srcdir.\n        # In autoconf-2.50 it is called $srcdir.\n        test -n \"$ac_given_srcdir\" || ac_given_srcdir=\"$srcdir\"\n        case \"$ac_given_srcdir\" in\n          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;\n          /*) top_srcdir=\"$ac_given_srcdir\" ;;\n          *)  top_srcdir=\"$ac_dots$ac_given_srcdir\" ;;\n        esac\n        if test -f \"$ac_given_srcdir/$ac_dir/POTFILES.in\"; then\n          rm -f \"$ac_dir/POTFILES\"\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/POTFILES\" || echo \"creating $ac_dir/POTFILES\"\n          cat \"$ac_given_srcdir/$ac_dir/POTFILES.in\" | sed -e \"/^#/d\" -e \"/^[ \t]*\\$/d\" -e \"s,.*,     $top_srcdir/& \\\\\\\\,\" | sed -e \"\\$s/\\(.*\\) \\\\\\\\/\\1/\" > \"$ac_dir/POTFILES\"\n          POMAKEFILEDEPS=\"POTFILES.in\"\n          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend\n          # on $ac_dir but don't depend on user-specified configuration\n          # parameters.\n          if test -f \"$ac_given_srcdir/$ac_dir/LINGUAS\"; then\n            # The LINGUAS file contains the set of available languages.\n            if test -n \"$OBSOLETE_ALL_LINGUAS\"; then\n              test -n \"$as_me\" && echo \"$as_me: setting ALL_LINGUAS in configure.in is obsolete\" || echo \"setting ALL_LINGUAS in configure.in is obsolete\"\n            fi\n            ALL_LINGUAS_=`sed -e \"/^#/d\" \"$ac_given_srcdir/$ac_dir/LINGUAS\"`\n            # Hide the ALL_LINGUAS assigment from automake.\n            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'\n            POMAKEFILEDEPS=\"$POMAKEFILEDEPS LINGUAS\"\n          else\n            # The set of available languages was given in configure.in.\n            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'\n          fi\n          # Compute POFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)\n          # Compute UPDATEPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)\n          # Compute DUMMYPOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)\n          # Compute GMOFILES\n          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)\n          case \"$ac_given_srcdir\" in\n            .) srcdirpre= ;;\n            *) srcdirpre='$(srcdir)/' ;;\n          esac\n          POFILES=\n          UPDATEPOFILES=\n          DUMMYPOFILES=\n          GMOFILES=\n          for lang in $ALL_LINGUAS; do\n            POFILES=\"$POFILES $srcdirpre$lang.po\"\n            UPDATEPOFILES=\"$UPDATEPOFILES $lang.po-update\"\n            DUMMYPOFILES=\"$DUMMYPOFILES $lang.nop\"\n            GMOFILES=\"$GMOFILES $srcdirpre$lang.gmo\"\n          done\n          # CATALOGS depends on both $ac_dir and the user's LINGUAS\n          # environment variable.\n          INST_LINGUAS=\n          if test -n \"$ALL_LINGUAS\"; then\n            for presentlang in $ALL_LINGUAS; do\n              useit=no\n              if test \"%UNSET%\" != \"$LINGUAS\"; then\n                desiredlanguages=\"$LINGUAS\"\n              else\n                desiredlanguages=\"$ALL_LINGUAS\"\n              fi\n              for desiredlang in $desiredlanguages; do\n                # Use the presentlang catalog if desiredlang is\n                #   a. equal to presentlang, or\n                #   b. a variant of presentlang (because in this case,\n                #      presentlang can be used as a fallback for messages\n                #      which are not translated in the desiredlang catalog).\n                case \"$desiredlang\" in\n                  \"$presentlang\"*) useit=yes;;\n                esac\n              done\n              if test $useit = yes; then\n                INST_LINGUAS=\"$INST_LINGUAS $presentlang\"\n              fi\n            done\n          fi\n          CATALOGS=\n          if test -n \"$INST_LINGUAS\"; then\n            for lang in $INST_LINGUAS; do\n              CATALOGS=\"$CATALOGS $lang.gmo\"\n            done\n          fi\n          test -n \"$as_me\" && echo \"$as_me: creating $ac_dir/Makefile\" || echo \"creating $ac_dir/Makefile\"\n          sed -e \"/^POTFILES =/r $ac_dir/POTFILES\" -e \"/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars\" -e \"s|@POFILES@|$POFILES|g\" -e \"s|@UPDATEPOFILES@|$UPDATEPOFILES|g\" -e \"s|@DUMMYPOFILES@|$DUMMYPOFILES|g\" -e \"s|@GMOFILES@|$GMOFILES|g\" -e \"s|@CATALOGS@|$CATALOGS|g\" -e \"s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g\" \"$ac_dir/Makefile.in\" > \"$ac_dir/Makefile\"\n          for f in \"$ac_given_srcdir/$ac_dir\"/Rules-*; do\n            if test -f \"$f\"; then\n              case \"$f\" in\n                *.orig | *.bak | *~) ;;\n                *) cat \"$f\" >> \"$ac_dir/Makefile\" ;;\n              esac\n            fi\n          done\n        fi\n        ;;\n      esac\n    done ;;\n\n  esac\ndone # for ac_tag\n\n\nas_fn_exit 0\n_ACEOF\nac_clean_files=$ac_clean_files_save\n\ntest $ac_write_fail = 0 ||\n  as_fn_error \"write failure creating $CONFIG_STATUS\" \"$LINENO\" 5\n\n\n# configure is writing to config.log, and then calls config.status.\n# config.status does its own redirection, appending to config.log.\n# Unfortunately, on DOS this fails, as config.log is still kept open\n# by configure, so config.status won't be able to write to it; its\n# output is simply discarded.  So we exec the FD to /dev/null,\n# effectively closing config.log, so it can be properly (re)opened and\n# appended to by config.status.  When coming back to configure, we\n# need to make the FD available again.\nif test \"$no_create\" != yes; then\n  ac_cs_success=:\n  ac_config_status_args=\n  test \"$silent\" = yes &&\n    ac_config_status_args=\"$ac_config_status_args --quiet\"\n  exec 5>/dev/null\n  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false\n  exec 5>>config.log\n  # Use ||, not &&, to avoid exiting from the if with $? = 1, which\n  # would make configure fail if this is the last instruction.\n  $ac_cs_success || as_fn_exit $?\nfi\nif test -n \"$ac_unrecognized_opts\" && test \"$enable_option_checking\" != no; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts\" >&5\n$as_echo \"$as_me: WARNING: unrecognized options: $ac_unrecognized_opts\" >&2;}\nfi\n\n\n# We only generate the build.sh if we have a build.sh.in; we won't have\n# one before we've created a distribution.\nif test -f \"$srcdir/build.sh.in\"; then\n  ./config.status --file build.sh\n  chmod +x build.sh\nfi\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/configure.bat",
    "content": "@echo off\r\nrem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,\r\nrem 2004, 2005, 2006 Free Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under\r\nrem the terms of the GNU General Public License as published by the Free\r\nrem Software Foundation; either version 2, or (at your option) any later\r\nrem version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT\r\nrem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r\nrem FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r\nrem more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along\r\nrem with GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n\r\necho Configuring MAKE for DJGPP\r\n\r\nrem The SmallEnv trick protects against too small environment block,\r\nrem in which case the values will be truncated and the whole thing\r\nrem goes awry.  COMMAND.COM will say \"Out of environment space\", but\r\nrem many people don't care, so we force them to care by refusing to go.\r\n\r\nrem Where is the srcdir?\r\nset XSRC=.\r\nif not \"%XSRC%\"==\".\" goto SmallEnv\r\nif \"%1%\"==\"\" goto SrcDone\r\nset XSRC=%1\r\nif not \"%XSRC%\"==\"%1\" goto SmallEnv\r\n\r\n:SrcDone\r\n\r\nupdate %XSRC%/configh.dos ./config.h\r\n\r\nrem Do they have Make?\r\nredir -o junk.$$$ -eo make -n -f NUL\r\nrem REDIR will return 1 if it cannot run Make.\r\nrem If it can run Make, it will usually return 2,\r\nrem but 0 is also OK with us.\r\nif errorlevel 2 goto MakeOk\r\nif not errorlevel 1 goto MakeOk\r\nif exist junk.$$$ del junk.$$$\r\necho No Make program found--use DOSBUILD.BAT to build Make.\r\ngoto End\r\n\r\nrem They do have Make.\tGenerate the Makefile.\r\n\r\n:MakeOk\r\ndel junk.$$$\r\nupdate %XSRC%/Makefile.DOS ./Makefile\r\necho Done.\r\nif not \"%XSRC%\"==\".\" echo Invoke Make thus: \"make srcdir=%XSRC%\"\r\ngoto End\r\n\r\n:SmallEnv\r\necho Your environment is too small.  Please enlarge it and run me again.\r\n\r\n:End\r\nset XRSC=\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/configure.in",
    "content": "# Process this file with autoconf to produce a configure script.\n#\n# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAC_INIT([GNU make],[3.81],[bug-make@gnu.org])\n\nAC_PREREQ(2.59)\nAC_REVISION([[$Id: configure.in,v 1.142 2006/04/01 06:36:40 psmith Exp $]])\n\n# Autoconf setup\nAC_CONFIG_AUX_DIR(config)\nAC_CONFIG_SRCDIR(vpath.c)\nAC_CONFIG_HEADERS(config.h)\n\n# Automake setup\nAM_INIT_AUTOMAKE([1.9])\n\n# Checks for programs.\nAC_PROG_CC\nAC_PROG_INSTALL\nAC_PROG_RANLIB\nAC_PROG_CPP\nAC_CHECK_PROG(AR, ar, ar, ar)\n# Perl is needed for the test suite (only)\nAC_CHECK_PROG(PERL, perl, perl, perl)\n\n# Specialized system macros\nAC_CANONICAL_HOST\nAC_AIX\nAC_ISC_POSIX\nAC_MINIX\n\n# Needed for ansi2knr\nAM_C_PROTOTYPES\n\n# Enable gettext, in \"external\" mode.\n\nAM_GNU_GETTEXT_VERSION(0.14.1)\nAM_GNU_GETTEXT([external])\n\n# This test must come as early as possible after the compiler configuration\n# tests, because the choice of the file model can (in principle) affect\n# whether functions and headers are available, whether they work, etc.\nAC_SYS_LARGEFILE\n\n# Checks for libraries.\nAC_SEARCH_LIBS(getpwnam, [sun])\n\n# Checks for header files.\nAC_HEADER_STDC\nAC_HEADER_DIRENT\nAC_HEADER_STAT\nAC_HEADER_TIME\nAC_CHECK_HEADERS(stdlib.h locale.h unistd.h limits.h fcntl.h string.h \\\n\t\t memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h)\n\n# Set a flag if we have an ANSI C compiler\nif test \"$ac_cv_prog_cc_stdc\" != no; then\n  AC_DEFINE(HAVE_ANSI_COMPILER, 1,\n\t      [Define if your compiler conforms to the ANSI C standard.])\nfi\n\n\n# Determine what kind of variadic function calls we support\nAC_CHECK_HEADERS(stdarg.h varargs.h, break)\n\nAM_PROG_CC_C_O\nAC_C_CONST\nAC_TYPE_SIGNAL\nAC_TYPE_UID_T\nAC_TYPE_PID_T\n\n# Find some definition for uintmax_t\n\nAC_CHECK_TYPE(uintmax_t,,[\n  uintmax_t=\"unsigned long\"\n  AC_CHECK_TYPE(unsigned long long,[uintmax_t=\"unsigned long long\"])\n  AC_DEFINE_UNQUOTED(uintmax_t,$uintmax_t,\n    [Define uintmax_t if not defined in <stdint.h> or <inttypes.h>.])])\n\n# Find out whether our struct stat returns nanosecond resolution timestamps.\n\nAC_STRUCT_ST_MTIM_NSEC\nAC_MSG_CHECKING([whether to use high resolution file timestamps])\nAC_CACHE_VAL(make_cv_file_timestamp_hi_res, [\n  make_cv_file_timestamp_hi_res=no\n  if test \"$ac_cv_struct_st_mtim_nsec\" != no; then\n    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#\tif HAVE_INTTYPES_H\n#\t include <inttypes.h>\n#\tendif]],\n\t              [[char a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];]])],\n      [make_cv_file_timestamp_hi_res=yes],\n      [])\n  fi])\nAC_MSG_RESULT($make_cv_file_timestamp_hi_res)\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  val=1\nelse\n  val=0\nfi\nAC_DEFINE_UNQUOTED(FILE_TIMESTAMP_HI_RES, $val,\n\t\t   [Use high resolution file timestamps if nonzero.])\n\nif test \"$make_cv_file_timestamp_hi_res\" = yes; then\n  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.\n  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.\n  AC_SEARCH_LIBS(clock_gettime, [rt posix4])\n  if test \"$ac_cv_search_clock_gettime\" != no; then\n    AC_DEFINE(HAVE_CLOCK_GETTIME, 1,\n\t      [Define if you have the clock_gettime function.])\n  fi\nfi\n\n# Check for DOS-style pathnames.\npds_AC_DOS_PATHS\n\n# See if we have a standard version of gettimeofday().  Since actual\n# implementations can differ, just make sure we have the most common\n# one.\nAC_CACHE_CHECK([for standard gettimeofday], ac_cv_func_gettimeofday,\n  [ac_cv_func_gettimeofday=no\n   AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/time.h>\n                  int main ()\n\t          {\n\t\t    struct timeval t; t.tv_sec = -1; t.tv_usec = -1;\n\t\t    exit (gettimeofday (&t, 0) != 0\n\t\t          || t.tv_sec < 0 || t.tv_usec < 0);\n\t          }]])],\n\t\t  [ac_cv_func_gettimeofday=yes],\n\t\t  [ac_cv_func_gettimeofday=no],\n\t\t  [ac_cv_func_gettimeofday=\"no (cross-compiling)\"])])\nif test \"$ac_cv_func_gettimeofday\" = yes; then\n  AC_DEFINE(HAVE_GETTIMEOFDAY, 1,\n\t    [Define if you have a standard gettimeofday function])\nfi\n\nAC_CHECK_FUNCS(\tmemcpy memmove strchr strdup mkstemp mktemp fdopen \\\n\t        bsd_signal dup2 getcwd realpath sigsetmask sigaction \\\n                getgroups seteuid setegid setlinebuf setreuid setregid \\\n                getrlimit setrlimit setvbuf pipe strerror strsignal \\\n\t\tlstat readlink atexit)\n\nAC_FUNC_SETVBUF_REVERSED\n\n# strcoll() is used by the GNU glob library\nAC_FUNC_STRCOLL\n\nAC_FUNC_ALLOCA\nAC_FUNC_FORK([])\nAC_FUNC_VPRINTF\nAC_FUNC_CLOSEDIR_VOID\n\nAC_FUNC_GETLOADAVG\n\n# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it\n# doesn't.  So, we will.\n\nif test \"$ac_cv_header_nlist_h\" = yes; then\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]],\n\t[[struct nlist nl;\n          nl.n_name = \"string\";\n          return 0;]])],\n\t[make_cv_nlist_struct=yes],\n\t[make_cv_nlist_struct=no])\n  if test \"$make_cv_nlist_struct\" = yes; then\n    AC_DEFINE(NLIST_STRUCT, 1,\n       [Define if struct nlist.n_name is a pointer rather than an array.])\n  fi\nfi\n\nAC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , ,\n  [AC_INCLUDES_DEFAULT\n#include <signal.h>\n/* NetBSD declares sys_siglist in unistd.h.  */\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n])\n\n\n# Check out the wait reality.\nAC_CHECK_HEADERS(sys/wait.h)\nAC_CHECK_FUNCS(waitpid wait3)\nAC_MSG_CHECKING(for union wait)\nAC_CACHE_VAL(make_cv_union_wait, [dnl\n    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>\n#include <sys/wait.h>]],\n     [[union wait status; int pid; pid = wait (&status);\n#ifdef WEXITSTATUS\n/* Some POSIXoid systems have both the new-style macros and the old\n   union wait type, and they do not work together.  If union wait\n   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */\n        if (WEXITSTATUS (status) != 0) pid = -1;\n#ifdef WTERMSIG\n        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */\n        -- blow chunks here --\n#endif\n#endif\n#ifdef HAVE_WAITPID\n        /* Make sure union wait works with waitpid.  */\n        pid = waitpid (-1, &status, 0);\n#endif\n      ]])],\n    [make_cv_union_wait=yes],\n    [make_cv_union_wait=no])])\nif test \"$make_cv_union_wait\" = yes; then\n  AC_DEFINE(HAVE_UNION_WAIT, 1,\n            [Define this if you have the \\`union wait' type in <sys/wait.h>.])\nfi\nAC_MSG_RESULT($make_cv_union_wait)\n\n\n# If we're building on Windows/DOS/OS/2, add some support for DOS drive specs.\nif test \"$PATH_SEPARATOR\" = ';'; then\n  AC_DEFINE(HAVE_DOS_PATHS, 1,\n            [Define this if your system requires backslashes or drive specs in pathnames.])\nfi\n\n\n# See if the user wants to use pmake's \"customs\" distributed build capability\n\nAC_SUBST(REMOTE) REMOTE=stub\nuse_customs=false\nAC_ARG_WITH(customs,\n  AC_HELP_STRING([--with-customs=DIR],\n\t\t [enable remote jobs via Customs--see README.customs]),\n  [case $withval in\n    n|no) : ;;\n    *) make_cppflags=\"$CPPFLAGS\"\n       case $withval in\n\t y|ye|yes) : ;;\n\t *) CPPFLAGS=\"$CPPFLAGS -I$with_customs/include/customs\"\n\t    make_ldflags=\"$LDFLAGS -L$with_customs/lib\" ;;\n       esac\n       CF_NETLIBS\n       AC_CHECK_HEADER(customs.h,\n\t\t       [use_customs=true\n\t\t         REMOTE=cstms\n\t\t\t LIBS=\"$LIBS -lcustoms\" LDFLAGS=\"$make_ldflags\"],\n\t\t       [with_customs=no\n\t\t\t CPPFLAGS=\"$make_cppflags\" make_badcust=yes])\n       ;;\n  esac])\n# Tell automake about this, so it can include the right .c files.\nAM_CONDITIONAL(USE_CUSTOMS, test \"$use_customs\" = true)\n\n# See if the user asked to handle case insensitive file systems.\n\nAH_TEMPLATE(HAVE_CASE_INSENSITIVE_FS, [Use case insensitive file names])\nAC_ARG_ENABLE(case-insensitive-file-system,\n  AC_HELP_STRING([--enable-case-insensitive-file-system],\n\t\t [enable case insensitive file system support]),\n  case_insensitive_fs=\"yes\" AC_DEFINE(HAVE_CASE_INSENSITIVE_FS),\n  case_insensitive_fs=\"no\")\n\n# See if we can handle the job server feature, and if the user wants it.\n\nAC_ARG_ENABLE(job-server,\n  AC_HELP_STRING([--disable-job-server],\n                 [disallow recursive make communication during -jN]),\n  [make_cv_job_server=\"$enableval\" user_job_server=\"$enableval\"],\n  [make_cv_job_server=\"yes\"])\n\nhas_wait_nohang=yes\ncase \"$ac_cv_func_waitpid/$ac_cv_func_wait3\" in\n  no/no) has_wait_nohang=no ;;\nesac\n\nAC_CACHE_CHECK(for SA_RESTART, make_cv_sa_restart, [\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <signal.h>]],\n      [[return SA_RESTART;]])],\n    [make_cv_sa_restart=yes],\n    [make_cv_sa_restart=no])])\n\nif test \"$make_cv_sa_restart\" != no; then\n  AC_DEFINE(HAVE_SA_RESTART, 1,\n     [Define if <signal.h> defines the SA_RESTART constant.])\nfi\n\n# enable make_cv_sa_restart for OS/2 so that the jobserver will be enabled,\n# but do it after HAVE_SA_RESTART has been defined.\ncase \"$host_os\" in\n  os2*) make_cv_sa_restart=yes ;;\nesac\n\ncase \"$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/$make_cv_job_server\" in\n  yes/yes/yes/yes/yes)\n    AC_DEFINE(MAKE_JOBSERVER, 1,\n              [Define this to enable job server support in GNU make.]);;\nesac\n\n# if we have both lstat() and readlink() then we can support symlink\n# timechecks.\ncase \"$ac_cv_func_lstat/$ac_cv_func_readlink\" in\n  yes/yes)\n    AC_DEFINE(MAKE_SYMLINKS, 1,\n              [Define this to enable symbolic link timestamp checking.]);;\nesac\n\n# Find the SCCS commands, so we can include them in our default rules.\n\nAC_CACHE_CHECK(for location of SCCS get command, make_cv_path_sccs_get, [\nif test -f /usr/sccs/get; then\n  make_cv_path_sccs_get=/usr/sccs/get\nelse\n  make_cv_path_sccs_get=get\nfi])\nAC_DEFINE_UNQUOTED(SCCS_GET, [\"$make_cv_path_sccs_get\"],\n\t           [Define to the name of the SCCS 'get' command.])\n\nac_clean_files=\"$ac_clean_files s.conftest conftoast\" # Remove these later.\nif ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 &&\n   test -f s.conftest; then\n  # We successfully created an SCCS file.\n  AC_CACHE_CHECK(if SCCS get command understands -G, make_cv_sys_get_minus_G, [\n    if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 &&\n       test -f conftoast; then\n       make_cv_sys_get_minus_G=yes\n    else\n       make_cv_sys_get_minus_G=no\n    fi])\n  case \"$make_cv_sys_get_minus_G\" in\n    yes) AC_DEFINE(SCCS_GET_MINUS_G, 1,\n           [Define this if the SCCS 'get' command understands the '-G<file>' option.]);;\n  esac\nfi\nrm -f s.conftest conftoast\n\n# Check the system to see if it provides GNU glob.  If not, use our\n# local version.\n\nAC_MSG_CHECKING(if system libc has GNU glob)\nAC_CACHE_VAL(make_cv_sys_gnu_glob, [\n AC_EGREP_CPP(gnu glob,[\n#include <features.h>\n#include <glob.h>\n#include <fnmatch.h>\n\n#define GLOB_INTERFACE_VERSION 1\n#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1\n# include <gnu-versions.h>\n# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION\n   gnu glob\n# endif\n#endif\n ], [AC_MSG_RESULT(yes)\nmake_cv_sys_gnu_glob=yes], [AC_MSG_RESULT([no; using local copy])\nAC_SUBST(GLOBINC) GLOBINC='-I$(srcdir)/glob'\nAC_SUBST(GLOBLIB) GLOBLIB=glob/libglob.a\nmake_cv_sys_gnu_glob=no])])\n# Tell automake about this, so it can build the right .c files.\nAM_CONDITIONAL(USE_LOCAL_GLOB, test \"$make_cv_sys_gnu_glob\" = no)\n\n# Let the makefile know what our build host is\n\nAC_DEFINE_UNQUOTED(MAKE_HOST,\"$host\",[Build host information.])\nMAKE_HOST=\"$host\"\nAC_SUBST(MAKE_HOST)\n\nw32_target_env=no\nAM_CONDITIONAL([WINDOWSENV], false)\n\ncase \"$host\" in\n  *-*-mingw32)\n    AM_CONDITIONAL(WINDOWSENV, true)\n    w32_target_env=yes\n    AC_DEFINE([WINDOWS32], [1], [Use platform specific coding])\n    AC_DEFINE([HAVE_DOS_PATHS], [1], [Use platform specific coding])\n    ;;\nesac\n\n# Include the Maintainer's Makefile section, if it's here.\n\nMAINT_MAKEFILE=/dev/null\nif test -r \"$srcdir/maintMakefile\"; then\n  MAINT_MAKEFILE=\"$srcdir/maintMakefile\"\nfi\nAC_SUBST_FILE(MAINT_MAKEFILE)\n\n# Allow building with dmalloc\nAM_WITH_DMALLOC\n\n# Forcibly disable SET_MAKE.  If it's set it breaks things like the test\n# scripts, etc.\nSET_MAKE=\n\n# Sanity check and inform the user of what we found\n\ncase \"$make_badcust\" in\n  yes) echo\n       echo \"WARNING: --with-customs specified but no customs.h could be found;\"\n       echo \"         disabling Customs support.\"\n       echo ;;\nesac\n\ncase \"$with_customs\" in\n  \"\"|n|no|y|ye|yes) ;;\n  *) if test -f \"$with_customs/lib/libcustoms.a\"; then\n       :\n     else\n       echo\n       echo \"WARNING: '$with_customs/lib' does not appear to contain the\"\n       echo \"         Customs library.  You must build and install Customs\"\n       echo \"         before compiling GNU make.\"\n       echo\n     fi ;;\nesac\n\ncase \"$has_wait_nohang\" in\n  no) echo\n      echo \"WARNING: Your system has neither waitpid() nor wait3().\"\n      echo \"         Without one of these, signal handling is unreliable.\"\n      echo \"         You should be aware that running GNU make with -j\"\n      echo \"         could result in erratic behavior.\"\n      echo ;;\nesac\n\ncase \"$make_cv_job_server/$user_job_server\" in\n  no/yes) echo\n\t  echo \"WARNING: Make job server requires a POSIX-ish system that\"\n\t  echo \"         supports the pipe(), sigaction(), and either\"\n          echo \"         waitpid() or wait3() functions.  Your system doesn't\"\n\t  echo \"         appear to provide one or more of those.\"\n\t  echo \"         Disabling job server support.\"\n          echo ;;\nesac\n\n\n# Specify what files are to be created.\nAC_CONFIG_FILES(Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile w32/Makefile)\n\n# OK, do it!\n\nAC_OUTPUT\n\n# We only generate the build.sh if we have a build.sh.in; we won't have\n# one before we've created a distribution.\nif test -f \"$srcdir/build.sh.in\"; then\n  ./config.status --file build.sh\n  chmod +x build.sh\nfi\n\ndnl Local Variables:\ndnl comment-start: \"dnl \"\ndnl comment-end: \"\"\ndnl comment-start-skip: \"\\\\bdnl\\\\b\\\\s *\"\ndnl compile-command: \"make configure config.h.in\"\ndnl End:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/debug.h",
    "content": "/* Debugging macros and interface.\nCopyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#define DB_NONE         (0x000)\n#define DB_BASIC        (0x001)\n#define DB_VERBOSE      (0x002)\n#define DB_JOBS         (0x004)\n#define DB_IMPLICIT     (0x008)\n#define DB_MAKEFILES    (0x100)\n\n#define DB_ALL          (0xfff)\n\nextern int db_level;\n\n#define ISDB(_l)    ((_l)&db_level)\n\n#define DBS(_l,_x)  do{ if(ISDB(_l)) {print_spaces (depth); \\\n                                      printf _x; fflush (stdout);} }while(0)\n\n#define DBF(_l,_x)  do{ if(ISDB(_l)) {print_spaces (depth); \\\n                                      printf (_x, file->name); \\\n                                      fflush (stdout);} }while(0)\n\n#define DB(_l,_x)   do{ if(ISDB(_l)) {printf _x; fflush (stdout);} }while(0)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/default.c",
    "content": "/* Data base of default implicit rules for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"variable.h\"\n#include \"rule.h\"\n#include \"dep.h\"\n#include \"job.h\"\n#include \"commands.h\"\n\n/* Define GCC_IS_NATIVE if gcc is the native development environment on\n   your system (gcc/bison/flex vs cc/yacc/lex).  */\n#if defined(__MSDOS__) || defined(__EMX__)\n# define GCC_IS_NATIVE\n#endif\n\n\n/* This is the default list of suffixes for suffix rules.\n   `.s' must come last, so that a `.o' file will be made from\n   a `.c' or `.p' or ... file rather than from a .s file.  */\n\nstatic char default_suffixes[]\n#ifdef VMS\n  = \".exe .olb .ln .obj .c .cxx .cc .pas .p .for .f .r .y .l .mar \\\n.s .ss .i .ii .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \\\n.w .ch .cweb .web .com .sh .elc .el\";\n#elif defined(__EMX__)\n  = \".out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \\\n.mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \\\n.w .ch .web .sh .elc .el .obj .exe .dll .lib\";\n#else\n  = \".out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \\\n.mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \\\n.w .ch .web .sh .elc .el\";\n#endif\n\nstatic struct pspec default_pattern_rules[] =\n  {\n    { \"(%)\", \"%\",\n\t\"$(AR) $(ARFLAGS) $@ $<\" },\n\n    /* The X.out rules are only in BSD's default set because\n       BSD Make has no null-suffix rules, so `foo.out' and\n       `foo' are the same thing.  */\n#ifdef VMS\n    { \"%.exe\", \"%\",\n        \"copy $< $@\" },\n#else\n    { \"%.out\", \"%\",\n\t\"@rm -f $@ \\n cp $< $@\" },\n#endif\n    /* Syntax is \"ctangle foo.w foo.ch foo.c\".  */\n    { \"%.c\", \"%.w %.ch\",\n\t\"$(CTANGLE) $^ $@\" },\n    { \"%.tex\", \"%.w %.ch\",\n\t\"$(CWEAVE) $^ $@\" },\n\n    { 0, 0, 0 }\n  };\n\nstatic struct pspec default_terminal_rules[] =\n  {\n#ifdef VMS\n    /* RCS.  */\n    { \"%\", \"%$$5lv\", /* Multinet style */\n        \"if f$$search($@) .nes. \\\"\\\" then +$(CHECKOUT,v)\" },\n    { \"%\", \"[.$$rcs]%$$5lv\", /* Multinet style */\n        \"if f$$search($@) .nes. \\\"\\\" then +$(CHECKOUT,v)\" },\n    { \"%\", \"%_v\", /* Normal style */\n        \"if f$$search($@) .nes. \\\"\\\" then +$(CHECKOUT,v)\" },\n    { \"%\", \"[.rcs]%_v\", /* Normal style */\n        \"if f$$search($@) .nes. \\\"\\\" then +$(CHECKOUT,v)\" },\n\n    /* SCCS.  */\n\t/* ain't no SCCS on vms */\n#else\n    /* RCS.  */\n    { \"%\", \"%,v\",\n\t\"$(CHECKOUT,v)\" },\n    { \"%\", \"RCS/%,v\",\n\t\"$(CHECKOUT,v)\" },\n    { \"%\", \"RCS/%\",\n\t\"$(CHECKOUT,v)\" },\n\n    /* SCCS.  */\n    { \"%\", \"s.%\",\n\t\"$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<\" },\n    { \"%\", \"SCCS/s.%\",\n\t\"$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<\" },\n#endif /* !VMS */\n    { 0, 0, 0 }\n  };\n\nstatic char *default_suffix_rules[] =\n  {\n#ifdef VMS\n    \".obj.exe\",\n    \"$(LINK.obj) $^ $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@\",\n    \".mar.exe\",\n    \"$(COMPILE.mar) $^ \\n $(LINK.obj) $(subst .mar,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@\",\n    \".s.exe\",\n    \"$(COMPILE.s) $^ \\n $(LINK.obj) $(subst .s,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@\",\n    \".c.exe\",\n    \"$(COMPILE.c) $^ \\n $(LINK.obj) $(subst .c,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@\",\n    \".cc.exe\",\n#ifdef GCC_IS_NATIVE\n    \"$(COMPILE.cc) $^ \\n $(LINK.obj) $(CXXSTARTUP),sys$$disk:[]$(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@\",\n#else\n    \"$(COMPILE.cc) $^ \\n $(CXXLINK.obj) $(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@\",\n    \".cxx.exe\",\n    \"$(COMPILE.cxx) $^ \\n $(CXXLINK.obj) $(subst .cxx,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@\",\n#endif\n    \".for.exe\",\n    \"$(COMPILE.for) $^ \\n $(LINK.obj) $(subst .for,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@\",\n    \".pas.exe\",\n    \"$(COMPILE.pas) $^ \\n $(LINK.obj) $(subst .pas,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@\",\n\n    \".com\",\n    \"copy $< >$@\",\n\n    \".mar.obj\",\n    \"$(COMPILE.mar) /obj=$@ $<\",\n    \".s.obj\",\n    \"$(COMPILE.s) /obj=$@ $<\",\n    \".ss.obj\",\n    \"$(COMPILE.s) /obj=$@ $<\",\n    \".c.i\",\n    \"$(COMPILE.c)/prep /list=$@ $<\",\n    \".c.s\",\n    \"$(COMPILE.c)/noobj/machine /list=$@ $<\",\n    \".i.s\",\n    \"$(COMPILE.c)/noprep/noobj/machine /list=$@ $<\",\n    \".c.obj\",\n    \"$(COMPILE.c) /obj=$@ $<\",\n    \".cc.ii\",\n    \"$(COMPILE.cc)/prep /list=$@ $<\",\n    \".cc.ss\",\n    \"$(COMPILE.cc)/noobj/machine /list=$@ $<\",\n    \".ii.ss\",\n    \"$(COMPILE.cc)/noprep/noobj/machine /list=$@ $<\",\n    \".cc.obj\",\n    \"$(COMPILE.cc) /obj=$@ $<\",\n    \".cxx.obj\",\n    \"$(COMPILE.cxx) /obj=$@ $<\",\n    \".for.obj\",\n    \"$(COMPILE.for) /obj=$@ $<\",\n    \".pas.obj\",\n    \"$(COMPILE.pas) /obj=$@ $<\",\n\n    \".y.c\",\n    \"$(YACC.y) $< \\n rename y_tab.c $@\",\n    \".l.c\",\n    \"$(LEX.l) $< \\n rename lexyy.c $@\",\n\n    \".texinfo.info\",\n    \"$(MAKEINFO) $<\",\n\n    \".tex.dvi\",\n    \"$(TEX) $<\",\n\n#else /* ! VMS */\n\n    \".o\",\n    \"$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".s\",\n    \"$(LINK.s) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".S\",\n    \"$(LINK.S) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".c\",\n    \"$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".cc\",\n    \"$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".C\",\n    \"$(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".cpp\",\n    \"$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".f\",\n    \"$(LINK.f) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".p\",\n    \"$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".F\",\n    \"$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".r\",\n    \"$(LINK.r) $^ $(LOADLIBES) $(LDLIBS) -o $@\",\n    \".mod\",\n    \"$(COMPILE.mod) -o $@ -e $@ $^\",\n\n    \".def.sym\",\n    \"$(COMPILE.def) -o $@ $<\",\n\n    \".sh\",\n    \"cat $< >$@ \\n chmod a+x $@\",\n\n    \".s.o\",\n    \"$(COMPILE.s) -o $@ $<\",\n    \".S.o\",\n    \"$(COMPILE.S) -o $@ $<\",\n    \".c.o\",\n    \"$(COMPILE.c) $(OUTPUT_OPTION) $<\",\n    \".cc.o\",\n    \"$(COMPILE.cc) $(OUTPUT_OPTION) $<\",\n    \".C.o\",\n    \"$(COMPILE.C) $(OUTPUT_OPTION) $<\",\n    \".cpp.o\",\n    \"$(COMPILE.cpp) $(OUTPUT_OPTION) $<\",\n    \".f.o\",\n    \"$(COMPILE.f) $(OUTPUT_OPTION) $<\",\n    \".p.o\",\n    \"$(COMPILE.p) $(OUTPUT_OPTION) $<\",\n    \".F.o\",\n    \"$(COMPILE.F) $(OUTPUT_OPTION) $<\",\n    \".r.o\",\n    \"$(COMPILE.r) $(OUTPUT_OPTION) $<\",\n    \".mod.o\",\n    \"$(COMPILE.mod) -o $@ $<\",\n\n    \".c.ln\",\n    \"$(LINT.c) -C$* $<\",\n    \".y.ln\",\n#ifndef __MSDOS__\n    \"$(YACC.y) $< \\n $(LINT.c) -C$* y.tab.c \\n $(RM) y.tab.c\",\n#else\n    \"$(YACC.y) $< \\n $(LINT.c) -C$* y_tab.c \\n $(RM) y_tab.c\",\n#endif\n    \".l.ln\",\n    \"@$(RM) $*.c\\n $(LEX.l) $< > $*.c\\n$(LINT.c) -i $*.c -o $@\\n $(RM) $*.c\",\n\n    \".y.c\",\n#ifndef __MSDOS__\n    \"$(YACC.y) $< \\n mv -f y.tab.c $@\",\n#else\n    \"$(YACC.y) $< \\n mv -f y_tab.c $@\",\n#endif\n    \".l.c\",\n    \"@$(RM) $@ \\n $(LEX.l) $< > $@\",\n\n    \".F.f\",\n    \"$(PREPROCESS.F) $(OUTPUT_OPTION) $<\",\n    \".r.f\",\n    \"$(PREPROCESS.r) $(OUTPUT_OPTION) $<\",\n\n    /* This might actually make lex.yy.c if there's no %R%\n       directive in $*.l, but in that case why were you\n       trying to make $*.r anyway?  */\n    \".l.r\",\n    \"$(LEX.l) $< > $@ \\n mv -f lex.yy.r $@\",\n\n    \".S.s\",\n    \"$(PREPROCESS.S) $< > $@\",\n\n    \".texinfo.info\",\n    \"$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@\",\n\n    \".texi.info\",\n    \"$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@\",\n\n    \".txinfo.info\",\n    \"$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@\",\n\n    \".tex.dvi\",\n    \"$(TEX) $<\",\n\n    \".texinfo.dvi\",\n    \"$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<\",\n\n    \".texi.dvi\",\n    \"$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<\",\n\n    \".txinfo.dvi\",\n    \"$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<\",\n\n    \".w.c\",\n    \"$(CTANGLE) $< - $@\",\t/* The `-' says there is no `.ch' file.  */\n\n    \".web.p\",\n    \"$(TANGLE) $<\",\n\n    \".w.tex\",\n    \"$(CWEAVE) $< - $@\",\t/* The `-' says there is no `.ch' file.  */\n\n    \".web.tex\",\n    \"$(WEAVE) $<\",\n\n#endif /* !VMS */\n\n    0, 0,\n  };\n\nstatic char *default_variables[] =\n  {\n#ifdef VMS\n#ifdef __ALPHA\n    \"ARCH\", \"ALPHA\",\n#endif\n#ifdef __ia64\n    \"ARCH\", \"IA64\",\n#endif\n#ifdef __VAX\n    \"ARCH\", \"VAX\",\n#endif\n    \"AR\", \"library/obj\",\n    \"ARFLAGS\", \"/replace\",\n    \"AS\", \"macro\",\n    \"MACRO\", \"macro\",\n#ifdef GCC_IS_NATIVE\n    \"CC\", \"gcc\",\n#else\n    \"CC\", \"cc\",\n#endif\n    \"CD\", \"builtin_cd\",\n    \"MAKE\", \"make\",\n    \"ECHO\", \"write sys$$output \\\"\",\n#ifdef GCC_IS_NATIVE\n    \"C++\", \"gcc/plus\",\n    \"CXX\", \"gcc/plus\",\n#else\n    \"C++\", \"cxx\",\n    \"CXX\", \"cxx\",\n    \"CXXLD\", \"cxxlink\",\n#endif\n    \"CO\", \"co\",\n    \"CPP\", \"$(CC) /preprocess_only\",\n    \"FC\", \"fortran\",\n    /* System V uses these, so explicit rules using them should work.\n       However, there is no way to make implicit rules use them and FC.  */\n    \"F77\", \"$(FC)\",\n    \"F77FLAGS\", \"$(FFLAGS)\",\n    \"LD\", \"link\",\n    \"LEX\", \"lex\",\n    \"PC\", \"pascal\",\n    \"YACC\", \"bison/yacc\",\n    \"YFLAGS\", \"/Define/Verbose\",\n    \"BISON\", \"bison\",\n    \"MAKEINFO\", \"makeinfo\",\n    \"TEX\", \"tex\",\n    \"TEXINDEX\", \"texindex\",\n\n    \"RM\", \"delete/nolog\",\n\n    \"CSTARTUP\", \"\",\n#ifdef GCC_IS_NATIVE\n    \"CRT0\", \",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj\",\n    \"CXXSTARTUP\", \"gnu_cc_library:crtbegin.obj\",\n    \"CXXRT0\", \",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crtend.obj,gnu_cc_library:gxx_main.obj\",\n    \"LXLIBS\", \",gnu_cc_library:libstdcxx.olb/lib,gnu_cc_library:libgccplus.olb/lib\",\n    \"LDLIBS\", \",gnu_cc_library:libgcc.olb/lib\",\n#else\n    \"CRT0\", \"\",\n    \"CXXSTARTUP\", \"\",\n    \"CXXRT0\", \"\",\n    \"LXLIBS\", \"\",\n    \"LDLIBS\", \"\",\n#endif\n\n    \"LINK.obj\", \"$(LD) $(LDFLAGS)\",\n#ifndef GCC_IS_NATIVE\n    \"CXXLINK.obj\", \"$(CXXLD) $(LDFLAGS)\",\n    \"COMPILE.cxx\", \"$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n#endif\n    \"COMPILE.c\", \"$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.cc\", \"$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n    \"YACC.y\", \"$(YACC) $(YFLAGS)\",\n    \"LEX.l\", \"$(LEX) $(LFLAGS)\",\n    \"COMPILE.for\", \"$(FC) $(FFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.pas\", \"$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.mar\", \"$(MACRO) $(MACROFLAGS)\",\n    \"COMPILE.s\", \"$(AS) $(ASFLAGS) $(TARGET_MACH)\",\n    \"LINT.c\", \"$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n\n    \"MV\", \"rename/new_version\",\n    \"CP\", \"copy\",\n\n#else /* !VMS */\n\n    \"AR\", \"ar\",\n    \"ARFLAGS\", \"rv\",\n    \"AS\", \"as\",\n#ifdef GCC_IS_NATIVE\n    \"CC\", \"gcc\",\n# ifdef __MSDOS__\n    \"CXX\", \"gpp\",\t/* g++ is an invalid name on MSDOS */\n# else\n    \"CXX\", \"gcc\",\n# endif /* __MSDOS__ */\n#else\n    \"CC\", \"cc\",\n    \"CXX\", \"g++\",\n#endif\n\n    /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist,\n       and to the empty string if $@ does exist.  */\n    \"CHECKOUT,v\", \"+$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)\",\n    \"CO\", \"co\",\n    \"COFLAGS\", \"\",\n\n    \"CPP\", \"$(CC) -E\",\n#ifdef\tCRAY\n    \"CF77PPFLAGS\", \"-P\",\n    \"CF77PP\", \"/lib/cpp\",\n    \"CFT\", \"cft77\",\n    \"CF\", \"cf77\",\n    \"FC\", \"$(CF)\",\n#else\t/* Not CRAY.  */\n#ifdef\t_IBMR2\n    \"FC\", \"xlf\",\n#else\n#ifdef\t__convex__\n    \"FC\", \"fc\",\n#else\n    \"FC\", \"f77\",\n#endif /* __convex__ */\n#endif /* _IBMR2 */\n    /* System V uses these, so explicit rules using them should work.\n       However, there is no way to make implicit rules use them and FC.  */\n    \"F77\", \"$(FC)\",\n    \"F77FLAGS\", \"$(FFLAGS)\",\n#endif\t/* Cray.  */\n    \"GET\", SCCS_GET,\n    \"LD\", \"ld\",\n#ifdef GCC_IS_NATIVE\n    \"LEX\", \"flex\",\n#else\n    \"LEX\", \"lex\",\n#endif\n    \"LINT\", \"lint\",\n    \"M2C\", \"m2c\",\n#ifdef\tpyr\n    \"PC\", \"pascal\",\n#else\n#ifdef\tCRAY\n    \"PC\", \"PASCAL\",\n    \"SEGLDR\", \"segldr\",\n#else\n    \"PC\", \"pc\",\n#endif\t/* CRAY.  */\n#endif\t/* pyr.  */\n#ifdef GCC_IS_NATIVE\n    \"YACC\", \"bison -y\",\n#else\n    \"YACC\", \"yacc\",\t/* Or \"bison -y\"  */\n#endif\n    \"MAKEINFO\", \"makeinfo\",\n    \"TEX\", \"tex\",\n    \"TEXI2DVI\", \"texi2dvi\",\n    \"WEAVE\", \"weave\",\n    \"CWEAVE\", \"cweave\",\n    \"TANGLE\", \"tangle\",\n    \"CTANGLE\", \"ctangle\",\n\n    \"RM\", \"rm -f\",\n\n    \"LINK.o\", \"$(CC) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.c\", \"$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c\",\n    \"LINK.c\", \"$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.cc\", \"$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c\",\n    \"COMPILE.C\", \"$(COMPILE.cc)\",\n    \"COMPILE.cpp\", \"$(COMPILE.cc)\",\n    \"LINK.cc\", \"$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"LINK.C\", \"$(LINK.cc)\",\n    \"LINK.cpp\", \"$(LINK.cc)\",\n    \"YACC.y\", \"$(YACC) $(YFLAGS)\",\n    \"LEX.l\", \"$(LEX) $(LFLAGS) -t\",\n    \"COMPILE.f\", \"$(FC) $(FFLAGS) $(TARGET_ARCH) -c\",\n    \"LINK.f\", \"$(FC) $(FFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.F\", \"$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c\",\n    \"LINK.F\", \"$(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.r\", \"$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c\",\n    \"LINK.r\", \"$(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.def\", \"$(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.mod\", \"$(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)\",\n    \"COMPILE.p\", \"$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c\",\n    \"LINK.p\", \"$(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)\",\n    \"LINK.s\", \"$(CC) $(ASFLAGS) $(LDFLAGS) $(TARGET_MACH)\",\n    \"COMPILE.s\", \"$(AS) $(ASFLAGS) $(TARGET_MACH)\",\n    \"LINK.S\", \"$(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_MACH)\",\n    \"COMPILE.S\", \"$(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c\",\n    \"PREPROCESS.S\", \"$(CC) -E $(CPPFLAGS)\",\n    \"PREPROCESS.F\", \"$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -F\",\n    \"PREPROCESS.r\", \"$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -F\",\n    \"LINT.c\", \"$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)\",\n\n#ifndef\tNO_MINUS_C_MINUS_O\n    \"OUTPUT_OPTION\", \"-o $@\",\n#endif\n\n#ifdef\tSCCS_GET_MINUS_G\n    \"SCCS_OUTPUT_OPTION\", \"-G$@\",\n#endif\n\n#ifdef _AMIGA\n    \".LIBPATTERNS\", \"%.lib\",\n#else\n#ifdef __MSDOS__\n    \".LIBPATTERNS\", \"lib%.a $(DJDIR)/lib/lib%.a\",\n#else\n    \".LIBPATTERNS\", \"lib%.so lib%.a\",\n#endif\n#endif\n\n#endif /* !VMS */\n    0, 0\n  };\n\f\n/* Set up the default .SUFFIXES list.  */\n\nvoid\nset_default_suffixes (void)\n{\n  suffix_file = enter_file (\".SUFFIXES\");\n\n  if (no_builtin_rules_flag)\n    (void) define_variable (\"SUFFIXES\", 8, \"\", o_default, 0);\n  else\n    {\n      char *p = default_suffixes;\n      suffix_file->deps = (struct dep *)\n\tmulti_glob (parse_file_seq (&p, '\\0', sizeof (struct dep), 1),\n\t\t    sizeof (struct dep));\n      (void) define_variable (\"SUFFIXES\", 8, default_suffixes, o_default, 0);\n    }\n}\n\n/* Enter the default suffix rules as file rules.  This used to be done in\n   install_default_implicit_rules, but that loses because we want the\n   suffix rules installed before reading makefiles, and thee pattern rules\n   installed after.  */\n\nvoid\ninstall_default_suffix_rules (void)\n{\n  register char **s;\n\n  if (no_builtin_rules_flag)\n    return;\n\n for (s = default_suffix_rules; *s != 0; s += 2)\n    {\n      register struct file *f = enter_file (s[0]);\n      /* Don't clobber cmds given in a makefile if there were any.  */\n      if (f->cmds == 0)\n\t{\n\t  f->cmds = (struct commands *) xmalloc (sizeof (struct commands));\n\t  f->cmds->fileinfo.filenm = 0;\n\t  f->cmds->commands = s[1];\n\t  f->cmds->command_lines = 0;\n\t}\n    }\n}\n\n\n/* Install the default pattern rules.  */\n\nvoid\ninstall_default_implicit_rules (void)\n{\n  register struct pspec *p;\n\n  if (no_builtin_rules_flag)\n    return;\n\n  for (p = default_pattern_rules; p->target != 0; ++p)\n    install_pattern_rule (p, 0);\n\n  for (p = default_terminal_rules; p->target != 0; ++p)\n    install_pattern_rule (p, 1);\n}\n\nvoid\ndefine_default_variables (void)\n{\n  register char **s;\n\n  if (no_builtin_variables_flag)\n    return;\n\n  for (s = default_variables; *s != 0; s += 2)\n    (void) define_variable (s[0], strlen (s[0]), s[1], o_default, 1);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/dep.h",
    "content": "/* Definitions of dependency data structures for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Flag bits for the second argument to `read_makefile'.\n   These flags are saved in the `changed' field of each\n   `struct dep' in the chain returned by `read_all_makefiles'.  */\n\n#define RM_NO_DEFAULT_GOAL\t(1 << 0) /* Do not set default goal.  */\n#define RM_INCLUDED\t\t(1 << 1) /* Search makefile search path.  */\n#define RM_DONTCARE\t\t(1 << 2) /* No error if it doesn't exist.  */\n#define RM_NO_TILDE\t\t(1 << 3) /* Don't expand ~ in file name.  */\n#define RM_NOFLAG\t\t0\n\n/* Structure representing one dependency of a file.\n   Each struct file's `deps' points to a chain of these,\n   chained through the `next'. `stem' is the stem for this\n   dep line of static pattern rule or NULL.\n\n   Note that the first two words of this match a struct nameseq.  */\n\nstruct dep\n  {\n    struct dep *next;\n    char *name;\n    char *stem;\n    struct file *file;\n    unsigned int changed : 8;\n    unsigned int ignore_mtime : 1;\n    unsigned int staticpattern : 1;\n    unsigned int need_2nd_expansion : 1;\n  };\n\n\n/* Structure used in chains of names, for parsing and globbing.  */\n\nstruct nameseq\n  {\n    struct nameseq *next;\n    char *name;\n  };\n\n\nextern struct nameseq *multi_glob PARAMS ((struct nameseq *chain, unsigned int size));\n#ifdef VMS\nextern struct nameseq *parse_file_seq ();\n#else\nextern struct nameseq *parse_file_seq PARAMS ((char **stringp, int stopchar, unsigned int size, int strip));\n#endif\nextern char *tilde_expand PARAMS ((char *name));\n\n#ifndef NO_ARCHIVES\nextern struct nameseq *ar_glob PARAMS ((char *arname, char *member_pattern, unsigned int size));\n#endif\n\n#ifndef\tiAPX286\n#define dep_name(d) ((d)->name == 0 ? (d)->file->name : (d)->name)\n#else\n/* Buggy compiler can't hack this.  */\nextern char *dep_name ();\n#endif\n\nextern struct dep *alloc_dep PARAMS ((void));\nextern void free_dep PARAMS ((struct dep *d));\nextern struct dep *copy_dep_chain PARAMS ((const struct dep *d));\nextern void free_dep_chain PARAMS ((struct dep *d));\nextern void free_ns_chain PARAMS ((struct nameseq *n));\nextern struct dep *read_all_makefiles PARAMS ((char **makefiles));\nextern int eval_buffer PARAMS ((char *buffer));\nextern int update_goal_chain PARAMS ((struct dep *goals));\nextern void uniquize_deps PARAMS ((struct dep *));\n"
  },
  {
    "path": "sources/host-tools/make-3.81/dir.c",
    "content": "/* Directory hashing for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"hash.h\"\n\n#ifdef\tHAVE_DIRENT_H\n# include <dirent.h>\n# define NAMLEN(dirent) strlen((dirent)->d_name)\n# ifdef VMS\nextern char *vmsify PARAMS ((char *name, int type));\n# endif\n#else\n# define dirent direct\n# define NAMLEN(dirent) (dirent)->d_namlen\n# ifdef HAVE_SYS_NDIR_H\n#  include <sys/ndir.h>\n# endif\n# ifdef HAVE_SYS_DIR_H\n#  include <sys/dir.h>\n# endif\n# ifdef HAVE_NDIR_H\n#  include <ndir.h>\n# endif\n# ifdef HAVE_VMSDIR_H\n#  include \"vmsdir.h\"\n# endif /* HAVE_VMSDIR_H */\n#endif\n\n/* In GNU systems, <dirent.h> defines this macro for us.  */\n#ifdef _D_NAMLEN\n# undef NAMLEN\n# define NAMLEN(d) _D_NAMLEN(d)\n#endif\n\n#if (defined (POSIX) || defined (VMS) || defined (WINDOWS32)) && !defined (__GNU_LIBRARY__)\n/* Posix does not require that the d_ino field be present, and some\n   systems do not provide it. */\n# define REAL_DIR_ENTRY(dp) 1\n# define FAKE_DIR_ENTRY(dp)\n#else\n# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)\n# define FAKE_DIR_ENTRY(dp) (dp->d_ino = 1)\n#endif /* POSIX */\n\f\n#ifdef __MSDOS__\n#include <ctype.h>\n#include <fcntl.h>\n\n/* If it's MSDOS that doesn't have _USE_LFN, disable LFN support.  */\n#ifndef _USE_LFN\n#define _USE_LFN 0\n#endif\n\nstatic char *\ndosify (char *filename)\n{\n  static char dos_filename[14];\n  char *df;\n  int i;\n\n  if (filename == 0 || _USE_LFN)\n    return filename;\n\n  /* FIXME: what about filenames which violate\n     8+3 constraints, like \"config.h.in\", or \".emacs\"?  */\n  if (strpbrk (filename, \"\\\"*+,;<=>?[\\\\]|\") != 0)\n    return filename;\n\n  df = dos_filename;\n\n  /* First, transform the name part.  */\n  for (i = 0; *filename != '\\0' && i < 8 && *filename != '.'; ++i)\n    *df++ = tolower ((unsigned char)*filename++);\n\n  /* Now skip to the next dot.  */\n  while (*filename != '\\0' && *filename != '.')\n    ++filename;\n  if (*filename != '\\0')\n    {\n      *df++ = *filename++;\n      for (i = 0; *filename != '\\0' && i < 3 && *filename != '.'; ++i)\n\t*df++ = tolower ((unsigned char)*filename++);\n    }\n\n  /* Look for more dots.  */\n  while (*filename != '\\0' && *filename != '.')\n    ++filename;\n  if (*filename == '.')\n    return filename;\n  *df = 0;\n  return dos_filename;\n}\n#endif /* __MSDOS__ */\n\n#ifdef WINDOWS32\n#include \"pathstuff.h\"\n#endif\n\n#ifdef _AMIGA\n#include <ctype.h>\n#endif\n\n#ifdef HAVE_CASE_INSENSITIVE_FS\nstatic char *\ndowncase (char *filename)\n{\n  static PATH_VAR (new_filename);\n  char *df;\n  int i;\n\n  if (filename == 0)\n    return 0;\n\n  df = new_filename;\n\n  /* First, transform the name part.  */\n  for (i = 0; *filename != '\\0'; ++i)\n  {\n    *df++ = tolower ((unsigned char)*filename);\n    ++filename;\n  }\n\n  *df = 0;\n\n  return new_filename;\n}\n#endif /* HAVE_CASE_INSENSITIVE_FS */\n\n#ifdef VMS\n\nstatic int\nvms_hash (char *name)\n{\n  int h = 0;\n  int g;\n\n  while (*name)\n    {\n      unsigned char uc = *name;\n#ifdef HAVE_CASE_INSENSITIVE_FS\n      h = (h << 4) + (isupper (uc) ? tolower (uc) : uc);\n#else\n      h = (h << 4) + uc;\n#endif\n      name++;\n      g = h & 0xf0000000;\n      if (g)\n\t{\n\t  h = h ^ (g >> 24);\n\t  h = h ^ g;\n\t}\n    }\n  return h;\n}\n\n/* fake stat entry for a directory */\nstatic int\nvmsstat_dir (char *name, struct stat *st)\n{\n  char *s;\n  int h;\n  DIR *dir;\n\n  dir = opendir (name);\n  if (dir == 0)\n    return -1;\n  closedir (dir);\n  s = strchr (name, ':');\t/* find device */\n  if (s)\n    {\n      *s++ = 0;\n      st->st_dev = (char *)vms_hash (name);\n      h = vms_hash (s);\n      *(s-1) = ':';\n    }\n  else\n    {\n      st->st_dev = 0;\n      s = name;\n      h = vms_hash (s);\n    }\n\n  st->st_ino[0] = h & 0xff;\n  st->st_ino[1] = h & 0xff00;\n  st->st_ino[2] = h >> 16;\n\n  return 0;\n}\n#endif /* VMS */\n\f\n/* Hash table of directories.  */\n\n#ifndef\tDIRECTORY_BUCKETS\n#define DIRECTORY_BUCKETS 199\n#endif\n\nstruct directory_contents\n  {\n    dev_t dev;\t\t\t/* Device and inode numbers of this dir.  */\n#ifdef WINDOWS32\n    /*\n     * Inode means nothing on WINDOWS32. Even file key information is\n     * unreliable because it is random per file open and undefined\n     * for remote filesystems. The most unique attribute I can\n     * come up with is the fully qualified name of the directory. Beware\n     * though, this is also unreliable. I'm open to suggestion on a better\n     * way to emulate inode.\n     */\n    char *path_key;\n    int   ctime;\n    int   mtime;        /* controls check for stale directory cache */\n    int   fs_flags;     /* FS_FAT, FS_NTFS, ... */\n#define FS_FAT      0x1\n#define FS_NTFS     0x2\n#define FS_UNKNOWN  0x4\n#else\n#ifdef VMS\n    ino_t ino[3];\n#else\n    ino_t ino;\n#endif\n#endif /* WINDOWS32 */\n    struct hash_table dirfiles;\t/* Files in this directory.  */\n    DIR *dirstream;\t\t/* Stream reading this directory.  */\n  };\n\nstatic unsigned long\ndirectory_contents_hash_1 (const void *key_0)\n{\n  struct directory_contents const *key = (struct directory_contents const *) key_0;\n  unsigned long hash;\n\n#ifdef WINDOWS32\n  hash = 0;\n  ISTRING_HASH_1 (key->path_key, hash);\n  hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) key->ctime;\n#else\n# ifdef VMS\n  hash = (((unsigned int) key->dev << 4)\n\t  ^ ((unsigned int) key->ino[0]\n\t     + (unsigned int) key->ino[1]\n\t     + (unsigned int) key->ino[2]));\n# else\n  hash = ((unsigned int) key->dev << 4) ^ (unsigned int) key->ino;\n# endif\n#endif /* WINDOWS32 */\n  return hash;\n}\n\nstatic unsigned long\ndirectory_contents_hash_2 (const void *key_0)\n{\n  struct directory_contents const *key = (struct directory_contents const *) key_0;\n  unsigned long hash;\n\n#ifdef WINDOWS32\n  hash = 0;\n  ISTRING_HASH_2 (key->path_key, hash);\n  hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ctime;\n#else\n# ifdef VMS\n  hash = (((unsigned int) key->dev << 4)\n\t  ^ ~((unsigned int) key->ino[0]\n\t      + (unsigned int) key->ino[1]\n\t      + (unsigned int) key->ino[2]));\n# else\n  hash = ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ino;\n# endif\n#endif /* WINDOWS32 */\n\n  return hash;\n}\n\n/* Sometimes it's OK to use subtraction to get this value:\n     result = X - Y;\n   But, if we're not sure of the type of X and Y they may be too large for an\n   int (on a 64-bit system for example).  So, use ?: instead.\n   See Savannah bug #15534.\n\n   NOTE!  This macro has side-effects!\n*/\n\n#define MAKECMP(_x,_y)  ((_x)<(_y)?-1:((_x)==(_y)?0:1))\n\nstatic int\ndirectory_contents_hash_cmp (const void *xv, const void *yv)\n{\n  struct directory_contents const *x = (struct directory_contents const *) xv;\n  struct directory_contents const *y = (struct directory_contents const *) yv;\n  int result;\n\n#ifdef WINDOWS32\n  ISTRING_COMPARE (x->path_key, y->path_key, result);\n  if (result)\n    return result;\n  result = MAKECMP(x->ctime, y->ctime);\n  if (result)\n    return result;\n#else\n# ifdef VMS\n  result = MAKECMP(x->ino[0], y->ino[0]);\n  if (result)\n    return result;\n  result = MAKECMP(x->ino[1], y->ino[1]);\n  if (result)\n    return result;\n  result = MAKECMP(x->ino[2], y->ino[2]);\n  if (result)\n    return result;\n# else\n  result = MAKECMP(x->ino, y->ino);\n  if (result)\n    return result;\n# endif\n#endif /* WINDOWS32 */\n\n  return MAKECMP(x->dev, y->dev);\n}\n\n/* Table of directory contents hashed by device and inode number.  */\nstatic struct hash_table directory_contents;\n\nstruct directory\n  {\n    char *name;\t\t\t/* Name of the directory.  */\n\n    /* The directory's contents.  This data may be shared by several\n       entries in the hash table, which refer to the same directory\n       (identified uniquely by `dev' and `ino') under different names.  */\n    struct directory_contents *contents;\n  };\n\nstatic unsigned long\ndirectory_hash_1 (const void *key)\n{\n  return_ISTRING_HASH_1 (((struct directory const *) key)->name);\n}\n\nstatic unsigned long\ndirectory_hash_2 (const void *key)\n{\n  return_ISTRING_HASH_2 (((struct directory const *) key)->name);\n}\n\nstatic int\ndirectory_hash_cmp (const void *x, const void *y)\n{\n  return_ISTRING_COMPARE (((struct directory const *) x)->name,\n\t\t\t  ((struct directory const *) y)->name);\n}\n\n/* Table of directories hashed by name.  */\nstatic struct hash_table directories;\n\n/* Never have more than this many directories open at once.  */\n\n#define MAX_OPEN_DIRECTORIES 10\n\nstatic unsigned int open_directories = 0;\n\n\n/* Hash table of files in each directory.  */\n\nstruct dirfile\n  {\n    char *name;\t\t\t/* Name of the file.  */\n    short length;\n    short impossible;\t\t/* This file is impossible.  */\n  };\n\nstatic unsigned long\ndirfile_hash_1 (const void *key)\n{\n  return_ISTRING_HASH_1 (((struct dirfile const *) key)->name);\n}\n\nstatic unsigned long\ndirfile_hash_2 (const void *key)\n{\n  return_ISTRING_HASH_2 (((struct dirfile const *) key)->name);\n}\n\nstatic int\ndirfile_hash_cmp (const void *xv, const void *yv)\n{\n  struct dirfile const *x = ((struct dirfile const *) xv);\n  struct dirfile const *y = ((struct dirfile const *) yv);\n  int result = x->length - y->length;\n  if (result)\n    return result;\n  return_ISTRING_COMPARE (x->name, y->name);\n}\n\n#ifndef\tDIRFILE_BUCKETS\n#define DIRFILE_BUCKETS 107\n#endif\n\f\nstatic int dir_contents_file_exists_p PARAMS ((struct directory_contents *dir, char *filename));\nstatic struct directory *find_directory PARAMS ((char *name));\n\n/* Find the directory named NAME and return its `struct directory'.  */\n\nstatic struct directory *\nfind_directory (char *name)\n{\n  register char *p;\n  register struct directory *dir;\n  register struct directory **dir_slot;\n  struct directory dir_key;\n  int r;\n#ifdef WINDOWS32\n  char* w32_path;\n  char  fs_label[BUFSIZ];\n  char  fs_type[BUFSIZ];\n  unsigned long  fs_serno;\n  unsigned long  fs_flags;\n  unsigned long  fs_len;\n#endif\n#ifdef VMS\n  if ((*name == '.') && (*(name+1) == 0))\n    name = \"[]\";\n  else\n    name = vmsify (name,1);\n#endif\n\n  dir_key.name = name;\n  dir_slot = (struct directory **) hash_find_slot (&directories, &dir_key);\n  dir = *dir_slot;\n\n  if (HASH_VACANT (dir))\n    {\n      struct stat st;\n\n      /* The directory was not found.  Create a new entry for it.  */\n\n      p = name + strlen (name);\n      dir = (struct directory *) xmalloc (sizeof (struct directory));\n      dir->name = savestring (name, p - name);\n      hash_insert_at (&directories, dir, dir_slot);\n      /* The directory is not in the name hash table.\n\t Find its device and inode numbers, and look it up by them.  */\n\n#ifdef WINDOWS32\n      /* Remove any trailing '\\'.  Windows32 stat fails even on valid\n         directories if they end in '\\'. */\n      if (p[-1] == '\\\\')\n        p[-1] = '\\0';\n#endif\n\n#ifdef VMS\n      r = vmsstat_dir (name, &st);\n#else\n      EINTRLOOP (r, stat (name, &st));\n#endif\n\n#ifdef WINDOWS32\n      /* Put back the trailing '\\'.  If we don't, we're permanently\n         truncating the value!  */\n      if (p[-1] == '\\0')\n        p[-1] = '\\\\';\n#endif\n\n      if (r < 0)\n        {\n\t/* Couldn't stat the directory.  Mark this by\n\t   setting the `contents' member to a nil pointer.  */\n\t  dir->contents = 0;\n\t}\n      else\n\t{\n\t  /* Search the contents hash table; device and inode are the key.  */\n\n\t  struct directory_contents *dc;\n\t  struct directory_contents **dc_slot;\n\t  struct directory_contents dc_key;\n\n\t  dc_key.dev = st.st_dev;\n#ifdef WINDOWS32\n\t  dc_key.path_key = w32_path = w32ify (name, 1);\n\t  dc_key.ctime = st.st_ctime;\n#else\n# ifdef VMS\n\t  dc_key.ino[0] = st.st_ino[0];\n\t  dc_key.ino[1] = st.st_ino[1];\n\t  dc_key.ino[2] = st.st_ino[2];\n# else\n\t  dc_key.ino = st.st_ino;\n# endif\n#endif\n\t  dc_slot = (struct directory_contents **) hash_find_slot (&directory_contents, &dc_key);\n\t  dc = *dc_slot;\n\n\t  if (HASH_VACANT (dc))\n\t    {\n\t      /* Nope; this really is a directory we haven't seen before.  */\n\n\t      dc = (struct directory_contents *)\n\t\txmalloc (sizeof (struct directory_contents));\n\n\t      /* Enter it in the contents hash table.  */\n\t      dc->dev = st.st_dev;\n#ifdef WINDOWS32\n              dc->path_key = xstrdup (w32_path);\n\t      dc->ctime = st.st_ctime;\n              dc->mtime = st.st_mtime;\n\n              /*\n               * NTFS is the only WINDOWS32 filesystem that bumps mtime\n               * on a directory when files are added/deleted from\n               * a directory.\n               */\n              w32_path[3] = '\\0';\n              if (GetVolumeInformation(w32_path,\n                     fs_label, sizeof (fs_label),\n                     &fs_serno, &fs_len,\n                     &fs_flags, fs_type, sizeof (fs_type)) == FALSE)\n                dc->fs_flags = FS_UNKNOWN;\n              else if (!strcmp(fs_type, \"FAT\"))\n                dc->fs_flags = FS_FAT;\n              else if (!strcmp(fs_type, \"NTFS\"))\n                dc->fs_flags = FS_NTFS;\n              else\n                dc->fs_flags = FS_UNKNOWN;\n#else\n# ifdef VMS\n\t      dc->ino[0] = st.st_ino[0];\n\t      dc->ino[1] = st.st_ino[1];\n\t      dc->ino[2] = st.st_ino[2];\n# else\n\t      dc->ino = st.st_ino;\n# endif\n#endif /* WINDOWS32 */\n\t      hash_insert_at (&directory_contents, dc, dc_slot);\n\t      ENULLLOOP (dc->dirstream, opendir (name));\n\t      if (dc->dirstream == 0)\n                /* Couldn't open the directory.  Mark this by\n                   setting the `files' member to a nil pointer.  */\n                dc->dirfiles.ht_vec = 0;\n\t      else\n\t\t{\n\t\t  hash_init (&dc->dirfiles, DIRFILE_BUCKETS,\n\t\t\t     dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp);\n\t\t  /* Keep track of how many directories are open.  */\n\t\t  ++open_directories;\n\t\t  if (open_directories == MAX_OPEN_DIRECTORIES)\n\t\t    /* We have too many directories open already.\n\t\t       Read the entire directory and then close it.  */\n\t\t    (void) dir_contents_file_exists_p (dc, (char *) 0);\n\t\t}\n\t    }\n\n\t  /* Point the name-hashed entry for DIR at its contents data.  */\n\t  dir->contents = dc;\n\t}\n    }\n\n  return dir;\n}\n\f\n/* Return 1 if the name FILENAME is entered in DIR's hash table.\n   FILENAME must contain no slashes.  */\n\nstatic int\ndir_contents_file_exists_p (struct directory_contents *dir, char *filename)\n{\n  unsigned int hash;\n  struct dirfile *df;\n  struct dirent *d;\n#ifdef WINDOWS32\n  struct stat st;\n  int rehash = 0;\n#endif\n\n  if (dir == 0 || dir->dirfiles.ht_vec == 0)\n    {\n    /* The directory could not be stat'd or opened.  */\n      return 0;\n    }\n#ifdef __MSDOS__\n  filename = dosify (filename);\n#endif\n\n#ifdef HAVE_CASE_INSENSITIVE_FS\n  filename = downcase (filename);\n#endif\n\n#ifdef __EMX__\n  if (filename != 0)\n    _fnlwr (filename); /* lower case for FAT drives */\n#endif\n\n#ifdef VMS\n  filename = vmsify (filename,0);\n#endif\n\n  hash = 0;\n  if (filename != 0)\n    {\n      struct dirfile dirfile_key;\n\n      if (*filename == '\\0')\n\t{\n\t  /* Checking if the directory exists.  */\n\t  return 1;\n\t}\n      dirfile_key.name = filename;\n      dirfile_key.length = strlen (filename);\n      df = (struct dirfile *) hash_find_item (&dir->dirfiles, &dirfile_key);\n      if (df)\n\t{\n\t  return !df->impossible;\n\t}\n    }\n\n  /* The file was not found in the hashed list.\n     Try to read the directory further.  */\n\n  if (dir->dirstream == 0)\n    {\n#ifdef WINDOWS32\n      /*\n       * Check to see if directory has changed since last read. FAT\n       * filesystems force a rehash always as mtime does not change\n       * on directories (ugh!).\n       */\n      if (dir->path_key)\n\t{\n          if ((dir->fs_flags & FS_FAT) != 0)\n\t    {\n\t      dir->mtime = time ((time_t *) 0);\n\t      rehash = 1;\n\t    }\n\t  else if (stat(dir->path_key, &st) == 0 && st.st_mtime > dir->mtime)\n\t    {\n\t      /* reset date stamp to show most recent re-process.  */\n\t      dir->mtime = st.st_mtime;\n\t      rehash = 1;\n\t    }\n\n          /* If it has been already read in, all done.  */\n\t  if (!rehash)\n\t    return 0;\n\n          /* make sure directory can still be opened; if not return.  */\n          dir->dirstream = opendir(dir->path_key);\n          if (!dir->dirstream)\n            return 0;\n\t}\n      else\n#endif\n\t/* The directory has been all read in.  */\n\treturn 0;\n    }\n\n  while (1)\n    {\n      /* Enter the file in the hash table.  */\n      unsigned int len;\n      struct dirfile dirfile_key;\n      struct dirfile **dirfile_slot;\n\n      ENULLLOOP (d, readdir (dir->dirstream));\n      if (d == 0)\n        break;\n\n#if defined(VMS) && defined(HAVE_DIRENT_H)\n      /* In VMS we get file versions too, which have to be stripped off */\n      {\n        char *p = strrchr (d->d_name, ';');\n        if (p)\n          *p = '\\0';\n      }\n#endif\n      if (!REAL_DIR_ENTRY (d))\n\tcontinue;\n\n      len = NAMLEN (d);\n      dirfile_key.name = d->d_name;\n      dirfile_key.length = len;\n      dirfile_slot = (struct dirfile **) hash_find_slot (&dir->dirfiles, &dirfile_key);\n#ifdef WINDOWS32\n      /*\n       * If re-reading a directory, don't cache files that have\n       * already been discovered.\n       */\n      if (! rehash || HASH_VACANT (*dirfile_slot))\n#endif\n\t{\n\t  df = (struct dirfile *) xmalloc (sizeof (struct dirfile));\n\t  df->name = savestring (d->d_name, len);\n\t  df->length = len;\n\t  df->impossible = 0;\n\t  hash_insert_at (&dir->dirfiles, df, dirfile_slot);\n\t}\n      /* Check if the name matches the one we're searching for.  */\n      if (filename != 0 && strieq (d->d_name, filename))\n\t{\n\t  return 1;\n\t}\n    }\n\n  /* If the directory has been completely read in,\n     close the stream and reset the pointer to nil.  */\n  if (d == 0)\n    {\n      --open_directories;\n      closedir (dir->dirstream);\n      dir->dirstream = 0;\n    }\n  return 0;\n}\n\n/* Return 1 if the name FILENAME in directory DIRNAME\n   is entered in the dir hash table.\n   FILENAME must contain no slashes.  */\n\nint\ndir_file_exists_p (char *dirname, char *filename)\n{\n  return dir_contents_file_exists_p (find_directory (dirname)->contents,\n\t\t\t\t     filename);\n}\n\f\n/* Return 1 if the file named NAME exists.  */\n\nint\nfile_exists_p (char *name)\n{\n  char *dirend;\n  char *dirname;\n  char *slash;\n\n#ifndef\tNO_ARCHIVES\n  if (ar_name (name))\n    return ar_member_date (name) != (time_t) -1;\n#endif\n\n#ifdef VMS\n  dirend = strrchr (name, ']');\n  if (dirend == 0)\n    dirend = strrchr (name, ':');\n  if (dirend == (char *)0)\n    return dir_file_exists_p (\"[]\", name);\n#else /* !VMS */\n  dirend = strrchr (name, '/');\n#ifdef HAVE_DOS_PATHS\n  /* Forward and backslashes might be mixed.  We need the rightmost one.  */\n  {\n    char *bslash = strrchr(name, '\\\\');\n    if (!dirend || bslash > dirend)\n      dirend = bslash;\n    /* The case of \"d:file\".  */\n    if (!dirend && name[0] && name[1] == ':')\n      dirend = name + 1;\n  }\n#endif /* HAVE_DOS_PATHS */\n  if (dirend == 0)\n#ifndef _AMIGA\n    return dir_file_exists_p (\".\", name);\n#else /* !VMS && !AMIGA */\n    return dir_file_exists_p (\"\", name);\n#endif /* AMIGA */\n#endif /* VMS */\n\n  slash = dirend;\n  if (dirend == name)\n    dirname = \"/\";\n  else\n    {\n#ifdef HAVE_DOS_PATHS\n  /* d:/ and d: are *very* different...  */\n      if (dirend < name + 3 && name[1] == ':' &&\n\t  (*dirend == '/' || *dirend == '\\\\' || *dirend == ':'))\n\tdirend++;\n#endif\n      dirname = (char *) alloca (dirend - name + 1);\n      bcopy (name, dirname, dirend - name);\n      dirname[dirend - name] = '\\0';\n    }\n  return dir_file_exists_p (dirname, slash + 1);\n}\n\f\n/* Mark FILENAME as `impossible' for `file_impossible_p'.\n   This means an attempt has been made to search for FILENAME\n   as an intermediate file, and it has failed.  */\n\nvoid\nfile_impossible (char *filename)\n{\n  char *dirend;\n  register char *p = filename;\n  register struct directory *dir;\n  register struct dirfile *new;\n\n#ifdef VMS\n  dirend = strrchr (p, ']');\n  if (dirend == 0)\n    dirend = strrchr (p, ':');\n  dirend++;\n  if (dirend == (char *)1)\n    dir = find_directory (\"[]\");\n#else\n  dirend = strrchr (p, '/');\n# ifdef HAVE_DOS_PATHS\n  /* Forward and backslashes might be mixed.  We need the rightmost one.  */\n  {\n    char *bslash = strrchr(p, '\\\\');\n    if (!dirend || bslash > dirend)\n      dirend = bslash;\n    /* The case of \"d:file\".  */\n    if (!dirend && p[0] && p[1] == ':')\n      dirend = p + 1;\n  }\n# endif /* HAVE_DOS_PATHS */\n  if (dirend == 0)\n# ifdef _AMIGA\n    dir = find_directory (\"\");\n# else /* !VMS && !AMIGA */\n    dir = find_directory (\".\");\n# endif /* AMIGA */\n#endif /* VMS */\n  else\n    {\n      char *dirname;\n      char *slash = dirend;\n      if (dirend == p)\n\tdirname = \"/\";\n      else\n\t{\n#ifdef HAVE_DOS_PATHS\n\t  /* d:/ and d: are *very* different...  */\n\t  if (dirend < p + 3 && p[1] == ':' &&\n\t      (*dirend == '/' || *dirend == '\\\\' || *dirend == ':'))\n\t    dirend++;\n#endif\n\t  dirname = (char *) alloca (dirend - p + 1);\n\t  bcopy (p, dirname, dirend - p);\n\t  dirname[dirend - p] = '\\0';\n\t}\n      dir = find_directory (dirname);\n      filename = p = slash + 1;\n    }\n\n  if (dir->contents == 0)\n    {\n      /* The directory could not be stat'd.  We allocate a contents\n\t structure for it, but leave it out of the contents hash table.  */\n      dir->contents = (struct directory_contents *)\n\txmalloc (sizeof (struct directory_contents));\n      bzero ((char *) dir->contents, sizeof (struct directory_contents));\n    }\n\n  if (dir->contents->dirfiles.ht_vec == 0)\n    {\n      hash_init (&dir->contents->dirfiles, DIRFILE_BUCKETS,\n\t\t dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp);\n    }\n\n  /* Make a new entry and put it in the table.  */\n\n  new = (struct dirfile *) xmalloc (sizeof (struct dirfile));\n  new->name = xstrdup (filename);\n  new->length = strlen (filename);\n  new->impossible = 1;\n  hash_insert (&dir->contents->dirfiles, new);\n}\n\f\n/* Return nonzero if FILENAME has been marked impossible.  */\n\nint\nfile_impossible_p (char *filename)\n{\n  char *dirend;\n  register char *p = filename;\n  register struct directory_contents *dir;\n  register struct dirfile *dirfile;\n  struct dirfile dirfile_key;\n\n#ifdef VMS\n  dirend = strrchr (filename, ']');\n  if (dirend == 0)\n    dir = find_directory (\"[]\")->contents;\n#else\n  dirend = strrchr (filename, '/');\n#ifdef HAVE_DOS_PATHS\n  /* Forward and backslashes might be mixed.  We need the rightmost one.  */\n  {\n    char *bslash = strrchr(filename, '\\\\');\n    if (!dirend || bslash > dirend)\n      dirend = bslash;\n    /* The case of \"d:file\".  */\n    if (!dirend && filename[0] && filename[1] == ':')\n      dirend = filename + 1;\n  }\n#endif /* HAVE_DOS_PATHS */\n  if (dirend == 0)\n#ifdef _AMIGA\n    dir = find_directory (\"\")->contents;\n#else /* !VMS && !AMIGA */\n    dir = find_directory (\".\")->contents;\n#endif /* AMIGA */\n#endif /* VMS */\n  else\n    {\n      char *dirname;\n      char *slash = dirend;\n      if (dirend == filename)\n\tdirname = \"/\";\n      else\n\t{\n#ifdef HAVE_DOS_PATHS\n\t  /* d:/ and d: are *very* different...  */\n\t  if (dirend < filename + 3 && filename[1] == ':' &&\n\t      (*dirend == '/' || *dirend == '\\\\' || *dirend == ':'))\n\t    dirend++;\n#endif\n\t  dirname = (char *) alloca (dirend - filename + 1);\n\t  bcopy (p, dirname, dirend - p);\n\t  dirname[dirend - p] = '\\0';\n\t}\n      dir = find_directory (dirname)->contents;\n      p = filename = slash + 1;\n    }\n\n  if (dir == 0 || dir->dirfiles.ht_vec == 0)\n    /* There are no files entered for this directory.  */\n    return 0;\n\n#ifdef __MSDOS__\n  filename = dosify (p);\n#endif\n#ifdef HAVE_CASE_INSENSITIVE_FS\n  filename = downcase (p);\n#endif\n#ifdef VMS\n  filename = vmsify (p, 1);\n#endif\n\n  dirfile_key.name = filename;\n  dirfile_key.length = strlen (filename);\n  dirfile = (struct dirfile *) hash_find_item (&dir->dirfiles, &dirfile_key);\n  if (dirfile)\n    return dirfile->impossible;\n\n  return 0;\n}\n\f\n/* Return the already allocated name in the\n   directory hash table that matches DIR.  */\n\nchar *\ndir_name (char *dir)\n{\n  return find_directory (dir)->name;\n}\n\f\n/* Print the data base of directories.  */\n\nvoid\nprint_dir_data_base (void)\n{\n  register unsigned int files;\n  register unsigned int impossible;\n  register struct directory **dir_slot;\n  register struct directory **dir_end;\n\n  puts (_(\"\\n# Directories\\n\"));\n\n  files = impossible = 0;\n\n  dir_slot = (struct directory **) directories.ht_vec;\n  dir_end = dir_slot + directories.ht_size;\n  for ( ; dir_slot < dir_end; dir_slot++)\n    {\n      register struct directory *dir = *dir_slot;\n      if (! HASH_VACANT (dir))\n\t{\n\t  if (dir->contents == 0)\n\t    printf (_(\"# %s: could not be stat'd.\\n\"), dir->name);\n\t  else if (dir->contents->dirfiles.ht_vec == 0)\n\t    {\n#ifdef WINDOWS32\n\t      printf (_(\"# %s (key %s, mtime %d): could not be opened.\\n\"),\n\t\t      dir->name, dir->contents->path_key,dir->contents->mtime);\n#else  /* WINDOWS32 */\n#ifdef VMS\n\t      printf (_(\"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"),\n\t\t      dir->name, dir->contents->dev,\n\t\t      dir->contents->ino[0], dir->contents->ino[1],\n\t\t      dir->contents->ino[2]);\n#else\n\t      printf (_(\"# %s (device %ld, inode %ld): could not be opened.\\n\"),\n\t\t      dir->name, (long int) dir->contents->dev,\n\t\t      (long int) dir->contents->ino);\n#endif\n#endif /* WINDOWS32 */\n\t    }\n\t  else\n\t    {\n\t      register unsigned int f = 0;\n\t      register unsigned int im = 0;\n\t      register struct dirfile **files_slot;\n\t      register struct dirfile **files_end;\n\n\t      files_slot = (struct dirfile **) dir->contents->dirfiles.ht_vec;\n\t      files_end = files_slot + dir->contents->dirfiles.ht_size;\n\t      for ( ; files_slot < files_end; files_slot++)\n\t\t{\n\t\t  register struct dirfile *df = *files_slot;\n\t\t  if (! HASH_VACANT (df))\n\t\t    {\n\t\t      if (df->impossible)\n\t\t\t++im;\n\t\t      else\n\t\t\t++f;\n\t\t    }\n\t\t}\n#ifdef WINDOWS32\n\t      printf (_(\"# %s (key %s, mtime %d): \"),\n\t\t      dir->name, dir->contents->path_key, dir->contents->mtime);\n#else  /* WINDOWS32 */\n#ifdef VMS\n\t      printf (_(\"# %s (device %d, inode [%d,%d,%d]): \"),\n\t\t      dir->name, dir->contents->dev,\n\t\t      dir->contents->ino[0], dir->contents->ino[1],\n\t\t      dir->contents->ino[2]);\n#else\n\t      printf (_(\"# %s (device %ld, inode %ld): \"),\n\t\t      dir->name,\n\t\t      (long)dir->contents->dev, (long)dir->contents->ino);\n#endif\n#endif /* WINDOWS32 */\n\t      if (f == 0)\n\t\tfputs (_(\"No\"), stdout);\n\t      else\n\t\tprintf (\"%u\", f);\n\t      fputs (_(\" files, \"), stdout);\n\t      if (im == 0)\n\t\tfputs (_(\"no\"), stdout);\n\t      else\n\t\tprintf (\"%u\", im);\n\t      fputs (_(\" impossibilities\"), stdout);\n\t      if (dir->contents->dirstream == 0)\n\t\tputs (\".\");\n\t      else\n\t\tputs (_(\" so far.\"));\n\t      files += f;\n\t      impossible += im;\n\t    }\n\t}\n    }\n\n  fputs (\"\\n# \", stdout);\n  if (files == 0)\n    fputs (_(\"No\"), stdout);\n  else\n    printf (\"%u\", files);\n  fputs (_(\" files, \"), stdout);\n  if (impossible == 0)\n    fputs (_(\"no\"), stdout);\n  else\n    printf (\"%u\", impossible);\n  printf (_(\" impossibilities in %lu directories.\\n\"), directories.ht_fill);\n}\n\f\n/* Hooks for globbing.  */\n\n#include <glob.h>\n\n/* Structure describing state of iterating through a directory hash table.  */\n\nstruct dirstream\n  {\n    struct directory_contents *contents; /* The directory being read.  */\n    struct dirfile **dirfile_slot; /* Current slot in table.  */\n  };\n\n/* Forward declarations.  */\nstatic __ptr_t open_dirstream PARAMS ((const char *));\nstatic struct dirent *read_dirstream PARAMS ((__ptr_t));\n\nstatic __ptr_t\nopen_dirstream (const char *directory)\n{\n  struct dirstream *new;\n  struct directory *dir = find_directory ((char *)directory);\n\n  if (dir->contents == 0 || dir->contents->dirfiles.ht_vec == 0)\n    /* DIR->contents is nil if the directory could not be stat'd.\n       DIR->contents->dirfiles is nil if it could not be opened.  */\n    return 0;\n\n  /* Read all the contents of the directory now.  There is no benefit\n     in being lazy, since glob will want to see every file anyway.  */\n\n  (void) dir_contents_file_exists_p (dir->contents, (char *) 0);\n\n  new = (struct dirstream *) xmalloc (sizeof (struct dirstream));\n  new->contents = dir->contents;\n  new->dirfile_slot = (struct dirfile **) new->contents->dirfiles.ht_vec;\n\n  return (__ptr_t) new;\n}\n\nstatic struct dirent *\nread_dirstream (__ptr_t stream)\n{\n  struct dirstream *const ds = (struct dirstream *) stream;\n  struct directory_contents *dc = ds->contents;\n  struct dirfile **dirfile_end = (struct dirfile **) dc->dirfiles.ht_vec + dc->dirfiles.ht_size;\n  static char *buf;\n  static unsigned int bufsz;\n\n  while (ds->dirfile_slot < dirfile_end)\n    {\n      register struct dirfile *df = *ds->dirfile_slot++;\n      if (! HASH_VACANT (df) && !df->impossible)\n\t{\n\t  /* The glob interface wants a `struct dirent',\n\t     so mock one up.  */\n\t  struct dirent *d;\n\t  unsigned int len = df->length + 1;\n\t  if (sizeof *d - sizeof d->d_name + len > bufsz)\n\t    {\n\t      if (buf != 0)\n\t\tfree (buf);\n\t      bufsz *= 2;\n\t      if (sizeof *d - sizeof d->d_name + len > bufsz)\n\t\tbufsz = sizeof *d - sizeof d->d_name + len;\n\t      buf = xmalloc (bufsz);\n\t    }\n\t  d = (struct dirent *) buf;\n#ifdef __MINGW32__\n# if __MINGW32_MAJOR_VERSION < 3 || (__MINGW32_MAJOR_VERSION == 3 && \\\n\t\t\t\t     __MINGW32_MINOR_VERSION == 0)\n\t  d->d_name = xmalloc(len);\n# endif\n#endif\n\t  FAKE_DIR_ENTRY (d);\n#ifdef _DIRENT_HAVE_D_NAMLEN\n\t  d->d_namlen = len - 1;\n#endif\n#ifdef _DIRENT_HAVE_D_TYPE\n\t  d->d_type = DT_UNKNOWN;\n#endif\n\t  memcpy (d->d_name, df->name, len);\n\t  return d;\n\t}\n    }\n\n  return 0;\n}\n\nstatic void\nansi_free (void *p)\n{\n  if (p)\n    free(p);\n}\n\n/* On 64 bit ReliantUNIX (5.44 and above) in LFS mode, stat() is actually a\n * macro for stat64().  If stat is a macro, make a local wrapper function to\n * invoke it.\n */\n#ifndef stat\n# ifndef VMS\nextern int stat PARAMS ((const char *path, struct stat *sbuf));\n# endif\n# define local_stat stat\n#else\nstatic int\nlocal_stat (const char *path, struct stat *buf)\n{\n  int e;\n\n  EINTRLOOP (e, stat (path, buf));\n  return e;\n}\n#endif\n\nvoid\ndir_setup_glob (glob_t *gl)\n{\n  /* Bogus sunos4 compiler complains (!) about & before functions.  */\n  gl->gl_opendir = open_dirstream;\n  gl->gl_readdir = read_dirstream;\n  gl->gl_closedir = ansi_free;\n  gl->gl_stat = local_stat;\n  /* We don't bother setting gl_lstat, since glob never calls it.\n     The slot is only there for compatibility with 4.4 BSD.  */\n}\n\nvoid\nhash_init_directories (void)\n{\n  hash_init (&directories, DIRECTORY_BUCKETS,\n\t     directory_hash_1, directory_hash_2, directory_hash_cmp);\n  hash_init (&directory_contents, DIRECTORY_BUCKETS,\n\t     directory_contents_hash_1, directory_contents_hash_2, directory_contents_hash_cmp);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/Makefile.am",
    "content": "# -*-Makefile-*-, or close enough\n# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\n# Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nTEXI2HTML = texi2html\nTEXI2HTML_FLAGS = -split_chapter\n\ninfo_TEXINFOS =\tmake.texi\nmake_TEXINFOS = fdl.texi make-stds.texi\n\nCLEANFILES = make*.html\n\n## ----------------------------- ##\n## Other documentation formats.  ##\n## ----------------------------- ##\n\nhtml: make_1.html\n\nmake_1.html: $(info_TEXINFOS) $(make_TEXINFOS)\n\t$(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/make.texi\n\n.PHONY: html\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n# -*-Makefile-*-, or close enough\n# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\n# Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = ..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nsubdir = doc\nDIST_COMMON = $(make_TEXINFOS) $(srcdir)/Makefile.am \\\n\t$(srcdir)/Makefile.in $(srcdir)/stamp-vti \\\n\t$(srcdir)/version.texi\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nSOURCES =\nDIST_SOURCES =\nINFO_DEPS = $(srcdir)/make.info\nTEXINFO_TEX = $(top_srcdir)/config/texinfo.tex\nam__TEXINFO_TEX_DIR = $(top_srcdir)/config\nDVIS = make.dvi\nPDFS = make.pdf\nPSS = make.ps\nHTMLS = make.html\nTEXINFOS = make.texi\nTEXI2DVI = texi2dvi\nTEXI2PDF = $(TEXI2DVI) --pdf --batch\nMAKEINFOHTML = $(MAKEINFO) --html\nAM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)\nDVIPS = dvips\nam__installdirs = \"$(DESTDIR)$(infodir)\"\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nGETLOADAVG_LIBS = @GETLOADAVG_LIBS@\nGLOBINC = @GLOBINC@\nGLOBLIB = @GLOBLIB@\nGMSGFMT = @GMSGFMT@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nINTLLIBS = @INTLLIBS@\nKMEM_GROUP = @KMEM_GROUP@\nLDFLAGS = @LDFLAGS@\nLIBICONV = @LIBICONV@\nLIBINTL = @LIBINTL@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLTLIBICONV = @LTLIBICONV@\nLTLIBINTL = @LTLIBINTL@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMAKE_HOST = @MAKE_HOST@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nMSGFMT = @MSGFMT@\nMSGMERGE = @MSGMERGE@\nNEED_SETGID = @NEED_SETGID@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPOSUB = @POSUB@\nRANLIB = @RANLIB@\nREMOTE = @REMOTE@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nU = @U@\nUSE_CUSTOMS_FALSE = @USE_CUSTOMS_FALSE@\nUSE_CUSTOMS_TRUE = @USE_CUSTOMS_TRUE@\nUSE_LOCAL_GLOB_FALSE = @USE_LOCAL_GLOB_FALSE@\nUSE_LOCAL_GLOB_TRUE = @USE_LOCAL_GLOB_TRUE@\nUSE_NLS = @USE_NLS@\nVERSION = @VERSION@\nWINDOWSENV_FALSE = @WINDOWSENV_FALSE@\nWINDOWSENV_TRUE = @WINDOWSENV_TRUE@\nXGETTEXT = @XGETTEXT@\nac_ct_CC = @ac_ct_CC@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nTEXI2HTML = texi2html\nTEXI2HTML_FLAGS = -split_chapter\ninfo_TEXINFOS = make.texi\nmake_TEXINFOS = fdl.texi make-stds.texi\nCLEANFILES = make*.html\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .dvi .html .info .pdf .ps .texi\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  doc/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n.texi.info:\n\trestore=: && backupdir=\"$(am__leading_dot)am$$$$\" && \\\n\tam__cwd=`pwd` && cd $(srcdir) && \\\n\trm -rf $$backupdir && mkdir $$backupdir && \\\n\tif ($(MAKEINFO) --version) >/dev/null 2>&1; then \\\n\t  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \\\n\t    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \\\n\t  done; \\\n\telse :; fi && \\\n\tcd \"$$am__cwd\"; \\\n\tif $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \\\n\t -o $@ $<; \\\n\tthen \\\n\t  rc=0; \\\n\t  cd $(srcdir); \\\n\telse \\\n\t  rc=$$?; \\\n\t  cd $(srcdir) && \\\n\t  $$restore $$backupdir/* `echo \"./$@\" | sed 's|[^/]*$$||'`; \\\n\tfi; \\\n\trm -rf $$backupdir; exit $$rc\n\n.texi.dvi:\n\tTEXINPUTS=\"$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS\" \\\n\tMAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \\\n\t$(TEXI2DVI) $<\n\n.texi.pdf:\n\tTEXINPUTS=\"$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS\" \\\n\tMAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \\\n\t$(TEXI2PDF) $<\n\n.texi.html:\n\trm -rf $(@:.html=.htp)\n\tif $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \\\n\t -o $(@:.html=.htp) $<; \\\n\tthen \\\n\t  rm -rf $@; \\\n\t  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \\\n\t    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \\\n\telse \\\n\t  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \\\n\t    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \\\n\t  exit 1; \\\n\tfi\n$(srcdir)/make.info: make.texi $(srcdir)/version.texi $(make_TEXINFOS)\nmake.dvi: make.texi $(srcdir)/version.texi $(make_TEXINFOS)\nmake.pdf: make.texi $(srcdir)/version.texi $(make_TEXINFOS)\nmake.html: make.texi $(srcdir)/version.texi $(make_TEXINFOS)\n$(srcdir)/version.texi:  $(srcdir)/stamp-vti\n$(srcdir)/stamp-vti: make.texi $(top_srcdir)/configure\n\t@(dir=.; test -f ./make.texi || dir=$(srcdir); \\\n\tset `$(SHELL) $(top_srcdir)/config/mdate-sh $$dir/make.texi`; \\\n\techo \"@set UPDATED $$1 $$2 $$3\"; \\\n\techo \"@set UPDATED-MONTH $$2 $$3\"; \\\n\techo \"@set EDITION $(VERSION)\"; \\\n\techo \"@set VERSION $(VERSION)\") > vti.tmp\n\t@cmp -s vti.tmp $(srcdir)/version.texi \\\n\t  || (echo \"Updating $(srcdir)/version.texi\"; \\\n\t      cp vti.tmp $(srcdir)/version.texi)\n\t-@rm -f vti.tmp\n\t@cp $(srcdir)/version.texi $@\n\nmostlyclean-vti:\n\t-rm -f vti.tmp\n\nmaintainer-clean-vti:\n\t-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi\n.dvi.ps:\n\tTEXINPUTS=\"$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS\" \\\n\t$(DVIPS) -o $@ $<\n\nuninstall-info-am:\n\t@$(PRE_UNINSTALL)\n\t@if (install-info --version && \\\n\t     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \\\n\t  list='$(INFO_DEPS)'; \\\n\t  for file in $$list; do \\\n\t    relfile=`echo \"$$file\" | sed 's|^.*/||'`; \\\n\t    echo \" install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'\"; \\\n\t    install-info --info-dir=\"$(DESTDIR)$(infodir)\" --remove \"$(DESTDIR)$(infodir)/$$relfile\"; \\\n\t  done; \\\n\telse :; fi\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(INFO_DEPS)'; \\\n\tfor file in $$list; do \\\n\t  relfile=`echo \"$$file\" | sed 's|^.*/||'`; \\\n\t  relfile_i=`echo \"$$relfile\" | sed 's|\\.info$$||;s|$$|.i|'`; \\\n\t  (if cd \"$(DESTDIR)$(infodir)\"; then \\\n\t     echo \" cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]\"; \\\n\t     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \\\n\t   else :; fi); \\\n\tdone\n\ndist-info: $(INFO_DEPS)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(INFO_DEPS)'; \\\n\tfor base in $$list; do \\\n\t  case $$base in \\\n\t    $(srcdir)/*) base=`echo \"$$base\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t  esac; \\\n\t  if test -f $$base; then d=.; else d=$(srcdir); fi; \\\n\t  for file in $$d/$$base*; do \\\n\t    relfile=`expr \"$$file\" : \"$$d/\\(.*\\)\"`; \\\n\t    test -f $(distdir)/$$relfile || \\\n\t      cp -p $$file $(distdir)/$$relfile; \\\n\t  done; \\\n\tdone\n\nmostlyclean-aminfo:\n\t-rm -rf make.aux make.cp make.cps make.fn make.fns make.ky make.kys make.log \\\n\t  make.pg make.tmp make.toc make.tp make.tps make.vr make.dvi \\\n\t  make.pdf make.ps make.html\n\nmaintainer-clean-aminfo:\n\t@list='$(INFO_DEPS)'; for i in $$list; do \\\n\t  i_i=`echo \"$$i\" | sed 's|\\.info$$||;s|$$|.i|'`; \\\n\t  echo \" rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]\"; \\\n\t  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \\\n\tdone\ntags: TAGS\nTAGS:\n\nctags: CTAGS\nCTAGS:\n\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\n\t$(MAKE) $(AM_MAKEFLAGS) \\\n\t  top_distdir=\"$(top_distdir)\" distdir=\"$(distdir)\" \\\n\t  dist-info\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(INFO_DEPS)\ninstalldirs:\n\tfor dir in \"$(DESTDIR)$(infodir)\"; do \\\n\t  test -z \"$$dir\" || $(mkdir_p) \"$$dir\"; \\\n\tdone\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\t-test -z \"$(CLEANFILES)\" || rm -f $(CLEANFILES)\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic\n\ndvi: dvi-am\n\ndvi-am: $(DVIS)\n\nhtml-am: $(HTMLS)\n\ninfo: info-am\n\ninfo-am: $(INFO_DEPS)\n\ninstall-data-am: install-info-am\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-info-am: $(INFO_DEPS)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(infodir)\" || $(mkdir_p) \"$(DESTDIR)$(infodir)\"\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(INFO_DEPS)'; \\\n\tfor file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t  esac; \\\n\t  if test -f $$file; then d=.; else d=$(srcdir); fi; \\\n\t  file_i=`echo \"$$file\" | sed 's|\\.info$$||;s|$$|.i|'`; \\\n\t  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \\\n                       $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \\\n\t    if test -f $$ifile; then \\\n\t      relfile=`echo \"$$ifile\" | sed 's|^.*/||'`; \\\n\t      echo \" $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'\"; \\\n\t      $(INSTALL_DATA) \"$$ifile\" \"$(DESTDIR)$(infodir)/$$relfile\"; \\\n\t    else : ; fi; \\\n\t  done; \\\n\tdone\n\t@$(POST_INSTALL)\n\t@if (install-info --version && \\\n\t     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \\\n\t  list='$(INFO_DEPS)'; \\\n\t  for file in $$list; do \\\n\t    relfile=`echo \"$$file\" | sed 's|^.*/||'`; \\\n\t    echo \" install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'\";\\\n\t    install-info --info-dir=\"$(DESTDIR)$(infodir)\" \"$(DESTDIR)$(infodir)/$$relfile\" || :;\\\n\t  done; \\\n\telse : ; fi\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-aminfo \\\n\tmaintainer-clean-generic maintainer-clean-vti\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti\n\npdf: pdf-am\n\npdf-am: $(PDFS)\n\nps: ps-am\n\nps-am: $(PSS)\n\nuninstall-am: uninstall-info-am\n\n.PHONY: all all-am check check-am clean clean-generic dist-info \\\n\tdistclean distclean-generic distdir dvi dvi-am html html-am \\\n\tinfo info-am install install-am install-data install-data-am \\\n\tinstall-exec install-exec-am install-info install-info-am \\\n\tinstall-man install-strip installcheck installcheck-am \\\n\tinstalldirs maintainer-clean maintainer-clean-aminfo \\\n\tmaintainer-clean-generic maintainer-clean-vti mostlyclean \\\n\tmostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \\\n\tpdf-am ps ps-am uninstall uninstall-am uninstall-info-am\n\n\nhtml: make_1.html\n\nmake_1.html: $(info_TEXINFOS) $(make_TEXINFOS)\n\t$(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/make.texi\n\n.PHONY: html\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/fdl.texi",
    "content": "\n@node GNU Free Documentation License\n@appendixsec GNU Free Documentation License\n\n@cindex FDL, GNU Free Documentation License\n@center Version 1.2, November 2002\n\n@display\nCopyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.\n51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA\n\nEveryone is permitted to copy and distribute verbatim copies\nof this license document, but changing it is not allowed.\n@end display\n\n@enumerate 0\n@item\nPREAMBLE\n\nThe purpose of this License is to make a manual, textbook, or other\nfunctional and useful document @dfn{free} in the sense of freedom: to\nassure everyone the effective freedom to copy and redistribute it,\nwith or without modifying it, either commercially or noncommercially.\nSecondarily, this License preserves for the author and publisher a way\nto get credit for their work, while not being considered responsible\nfor modifications made by others.\n\nThis License is a kind of ``copyleft'', which means that derivative\nworks of the document must themselves be free in the same sense.  It\ncomplements the GNU General Public License, which is a copyleft\nlicense designed for free software.\n\nWe have designed this License in order to use it for manuals for free\nsoftware, because free software needs free documentation: a free\nprogram should come with manuals providing the same freedoms that the\nsoftware does.  But this License is not limited to software manuals;\nit can be used for any textual work, regardless of subject matter or\nwhether it is published as a printed book.  We recommend this License\nprincipally for works whose purpose is instruction or reference.\n\n@item\nAPPLICABILITY AND DEFINITIONS\n\nThis License applies to any manual or other work, in any medium, that\ncontains a notice placed by the copyright holder saying it can be\ndistributed under the terms of this License.  Such a notice grants a\nworld-wide, royalty-free license, unlimited in duration, to use that\nwork under the conditions stated herein.  The ``Document'', below,\nrefers to any such manual or work.  Any member of the public is a\nlicensee, and is addressed as ``you''.  You accept the license if you\ncopy, modify or distribute the work in a way requiring permission\nunder copyright law.\n\nA ``Modified Version'' of the Document means any work containing the\nDocument or a portion of it, either copied verbatim, or with\nmodifications and/or translated into another language.\n\nA ``Secondary Section'' is a named appendix or a front-matter section\nof the Document that deals exclusively with the relationship of the\npublishers or authors of the Document to the Document's overall\nsubject (or to related matters) and contains nothing that could fall\ndirectly within that overall subject.  (Thus, if the Document is in\npart a textbook of mathematics, a Secondary Section may not explain\nany mathematics.)  The relationship could be a matter of historical\nconnection with the subject or with related matters, or of legal,\ncommercial, philosophical, ethical or political position regarding\nthem.\n\nThe ``Invariant Sections'' are certain Secondary Sections whose titles\nare designated, as being those of Invariant Sections, in the notice\nthat says that the Document is released under this License.  If a\nsection does not fit the above definition of Secondary then it is not\nallowed to be designated as Invariant.  The Document may contain zero\nInvariant Sections.  If the Document does not identify any Invariant\nSections then there are none.\n\nThe ``Cover Texts'' are certain short passages of text that are listed,\nas Front-Cover Texts or Back-Cover Texts, in the notice that says that\nthe Document is released under this License.  A Front-Cover Text may\nbe at most 5 words, and a Back-Cover Text may be at most 25 words.\n\nA ``Transparent'' copy of the Document means a machine-readable copy,\nrepresented in a format whose specification is available to the\ngeneral public, that is suitable for revising the document\nstraightforwardly with generic text editors or (for images composed of\npixels) generic paint programs or (for drawings) some widely available\ndrawing editor, and that is suitable for input to text formatters or\nfor automatic translation to a variety of formats suitable for input\nto text formatters.  A copy made in an otherwise Transparent file\nformat whose markup, or absence of markup, has been arranged to thwart\nor discourage subsequent modification by readers is not Transparent.\nAn image format is not Transparent if used for any substantial amount\nof text.  A copy that is not ``Transparent'' is called ``Opaque''.\n\nExamples of suitable formats for Transparent copies include plain\n@sc{ascii} without markup, Texinfo input format, La@TeX{} input\nformat, @acronym{SGML} or @acronym{XML} using a publicly available\n@acronym{DTD}, and standard-conforming simple @acronym{HTML},\nPostScript or @acronym{PDF} designed for human modification.  Examples\nof transparent image formats include @acronym{PNG}, @acronym{XCF} and\n@acronym{JPG}.  Opaque formats include proprietary formats that can be\nread and edited only by proprietary word processors, @acronym{SGML} or\n@acronym{XML} for which the @acronym{DTD} and/or processing tools are\nnot generally available, and the machine-generated @acronym{HTML},\nPostScript or @acronym{PDF} produced by some word processors for\noutput purposes only.\n\nThe ``Title Page'' means, for a printed book, the title page itself,\nplus such following pages as are needed to hold, legibly, the material\nthis License requires to appear in the title page.  For works in\nformats which do not have any title page as such, ``Title Page'' means\nthe text near the most prominent appearance of the work's title,\npreceding the beginning of the body of the text.\n\nA section ``Entitled XYZ'' means a named subunit of the Document whose\ntitle either is precisely XYZ or contains XYZ in parentheses following\ntext that translates XYZ in another language.  (Here XYZ stands for a\nspecific section name mentioned below, such as ``Acknowledgements'',\n``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''\nof such a section when you modify the Document means that it remains a\nsection ``Entitled XYZ'' according to this definition.\n\nThe Document may include Warranty Disclaimers next to the notice which\nstates that this License applies to the Document.  These Warranty\nDisclaimers are considered to be included by reference in this\nLicense, but only as regards disclaiming warranties: any other\nimplication that these Warranty Disclaimers may have is void and has\nno effect on the meaning of this License.\n\n@item\nVERBATIM COPYING\n\nYou may copy and distribute the Document in any medium, either\ncommercially or noncommercially, provided that this License, the\ncopyright notices, and the license notice saying this License applies\nto the Document are reproduced in all copies, and that you add no other\nconditions whatsoever to those of this License.  You may not use\ntechnical measures to obstruct or control the reading or further\ncopying of the copies you make or distribute.  However, you may accept\ncompensation in exchange for copies.  If you distribute a large enough\nnumber of copies you must also follow the conditions in section 3.\n\nYou may also lend copies, under the same conditions stated above, and\nyou may publicly display copies.\n\n@item\nCOPYING IN QUANTITY\n\nIf you publish printed copies (or copies in media that commonly have\nprinted covers) of the Document, numbering more than 100, and the\nDocument's license notice requires Cover Texts, you must enclose the\ncopies in covers that carry, clearly and legibly, all these Cover\nTexts: Front-Cover Texts on the front cover, and Back-Cover Texts on\nthe back cover.  Both covers must also clearly and legibly identify\nyou as the publisher of these copies.  The front cover must present\nthe full title with all words of the title equally prominent and\nvisible.  You may add other material on the covers in addition.\nCopying with changes limited to the covers, as long as they preserve\nthe title of the Document and satisfy these conditions, can be treated\nas verbatim copying in other respects.\n\nIf the required texts for either cover are too voluminous to fit\nlegibly, you should put the first ones listed (as many as fit\nreasonably) on the actual cover, and continue the rest onto adjacent\npages.\n\nIf you publish or distribute Opaque copies of the Document numbering\nmore than 100, you must either include a machine-readable Transparent\ncopy along with each Opaque copy, or state in or with each Opaque copy\na computer-network location from which the general network-using\npublic has access to download using public-standard network protocols\na complete Transparent copy of the Document, free of added material.\nIf you use the latter option, you must take reasonably prudent steps,\nwhen you begin distribution of Opaque copies in quantity, to ensure\nthat this Transparent copy will remain thus accessible at the stated\nlocation until at least one year after the last time you distribute an\nOpaque copy (directly or through your agents or retailers) of that\nedition to the public.\n\nIt is requested, but not required, that you contact the authors of the\nDocument well before redistributing any large number of copies, to give\nthem a chance to provide you with an updated version of the Document.\n\n@item\nMODIFICATIONS\n\nYou may copy and distribute a Modified Version of the Document under\nthe conditions of sections 2 and 3 above, provided that you release\nthe Modified Version under precisely this License, with the Modified\nVersion filling the role of the Document, thus licensing distribution\nand modification of the Modified Version to whoever possesses a copy\nof it.  In addition, you must do these things in the Modified Version:\n\n@enumerate A\n@item\nUse in the Title Page (and on the covers, if any) a title distinct\nfrom that of the Document, and from those of previous versions\n(which should, if there were any, be listed in the History section\nof the Document).  You may use the same title as a previous version\nif the original publisher of that version gives permission.\n\n@item\nList on the Title Page, as authors, one or more persons or entities\nresponsible for authorship of the modifications in the Modified\nVersion, together with at least five of the principal authors of the\nDocument (all of its principal authors, if it has fewer than five),\nunless they release you from this requirement.\n\n@item\nState on the Title page the name of the publisher of the\nModified Version, as the publisher.\n\n@item\nPreserve all the copyright notices of the Document.\n\n@item\nAdd an appropriate copyright notice for your modifications\nadjacent to the other copyright notices.\n\n@item\nInclude, immediately after the copyright notices, a license notice\ngiving the public permission to use the Modified Version under the\nterms of this License, in the form shown in the Addendum below.\n\n@item\nPreserve in that license notice the full lists of Invariant Sections\nand required Cover Texts given in the Document's license notice.\n\n@item\nInclude an unaltered copy of this License.\n\n@item\nPreserve the section Entitled ``History'', Preserve its Title, and add\nto it an item stating at least the title, year, new authors, and\npublisher of the Modified Version as given on the Title Page.  If\nthere is no section Entitled ``History'' in the Document, create one\nstating the title, year, authors, and publisher of the Document as\ngiven on its Title Page, then add an item describing the Modified\nVersion as stated in the previous sentence.\n\n@item\nPreserve the network location, if any, given in the Document for\npublic access to a Transparent copy of the Document, and likewise\nthe network locations given in the Document for previous versions\nit was based on.  These may be placed in the ``History'' section.\nYou may omit a network location for a work that was published at\nleast four years before the Document itself, or if the original\npublisher of the version it refers to gives permission.\n\n@item\nFor any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve\nthe Title of the section, and preserve in the section all the\nsubstance and tone of each of the contributor acknowledgements and/or\ndedications given therein.\n\n@item\nPreserve all the Invariant Sections of the Document,\nunaltered in their text and in their titles.  Section numbers\nor the equivalent are not considered part of the section titles.\n\n@item\nDelete any section Entitled ``Endorsements''.  Such a section\nmay not be included in the Modified Version.\n\n@item\nDo not retitle any existing section to be Entitled ``Endorsements'' or\nto conflict in title with any Invariant Section.\n\n@item\nPreserve any Warranty Disclaimers.\n@end enumerate\n\nIf the Modified Version includes new front-matter sections or\nappendices that qualify as Secondary Sections and contain no material\ncopied from the Document, you may at your option designate some or all\nof these sections as invariant.  To do this, add their titles to the\nlist of Invariant Sections in the Modified Version's license notice.\nThese titles must be distinct from any other section titles.\n\nYou may add a section Entitled ``Endorsements'', provided it contains\nnothing but endorsements of your Modified Version by various\nparties---for example, statements of peer review or that the text has\nbeen approved by an organization as the authoritative definition of a\nstandard.\n\nYou may add a passage of up to five words as a Front-Cover Text, and a\npassage of up to 25 words as a Back-Cover Text, to the end of the list\nof Cover Texts in the Modified Version.  Only one passage of\nFront-Cover Text and one of Back-Cover Text may be added by (or\nthrough arrangements made by) any one entity.  If the Document already\nincludes a cover text for the same cover, previously added by you or\nby arrangement made by the same entity you are acting on behalf of,\nyou may not add another; but you may replace the old one, on explicit\npermission from the previous publisher that added the old one.\n\nThe author(s) and publisher(s) of the Document do not by this License\ngive permission to use their names for publicity for or to assert or\nimply endorsement of any Modified Version.\n\n@item\nCOMBINING DOCUMENTS\n\nYou may combine the Document with other documents released under this\nLicense, under the terms defined in section 4 above for modified\nversions, provided that you include in the combination all of the\nInvariant Sections of all of the original documents, unmodified, and\nlist them all as Invariant Sections of your combined work in its\nlicense notice, and that you preserve all their Warranty Disclaimers.\n\nThe combined work need only contain one copy of this License, and\nmultiple identical Invariant Sections may be replaced with a single\ncopy.  If there are multiple Invariant Sections with the same name but\ndifferent contents, make the title of each such section unique by\nadding at the end of it, in parentheses, the name of the original\nauthor or publisher of that section if known, or else a unique number.\nMake the same adjustment to the section titles in the list of\nInvariant Sections in the license notice of the combined work.\n\nIn the combination, you must combine any sections Entitled ``History''\nin the various original documents, forming one section Entitled\n``History''; likewise combine any sections Entitled ``Acknowledgements'',\nand any sections Entitled ``Dedications''.  You must delete all\nsections Entitled ``Endorsements.''\n\n@item\nCOLLECTIONS OF DOCUMENTS\n\nYou may make a collection consisting of the Document and other documents\nreleased under this License, and replace the individual copies of this\nLicense in the various documents with a single copy that is included in\nthe collection, provided that you follow the rules of this License for\nverbatim copying of each of the documents in all other respects.\n\nYou may extract a single document from such a collection, and distribute\nit individually under this License, provided you insert a copy of this\nLicense into the extracted document, and follow this License in all\nother respects regarding verbatim copying of that document.\n\n@item\nAGGREGATION WITH INDEPENDENT WORKS\n\nA compilation of the Document or its derivatives with other separate\nand independent documents or works, in or on a volume of a storage or\ndistribution medium, is called an ``aggregate'' if the copyright\nresulting from the compilation is not used to limit the legal rights\nof the compilation's users beyond what the individual works permit.\nWhen the Document is included in an aggregate, this License does not\napply to the other works in the aggregate which are not themselves\nderivative works of the Document.\n\nIf the Cover Text requirement of section 3 is applicable to these\ncopies of the Document, then if the Document is less than one half of\nthe entire aggregate, the Document's Cover Texts may be placed on\ncovers that bracket the Document within the aggregate, or the\nelectronic equivalent of covers if the Document is in electronic form.\nOtherwise they must appear on printed covers that bracket the whole\naggregate.\n\n@item\nTRANSLATION\n\nTranslation is considered a kind of modification, so you may\ndistribute translations of the Document under the terms of section 4.\nReplacing Invariant Sections with translations requires special\npermission from their copyright holders, but you may include\ntranslations of some or all Invariant Sections in addition to the\noriginal versions of these Invariant Sections.  You may include a\ntranslation of this License, and all the license notices in the\nDocument, and any Warranty Disclaimers, provided that you also include\nthe original English version of this License and the original versions\nof those notices and disclaimers.  In case of a disagreement between\nthe translation and the original version of this License or a notice\nor disclaimer, the original version will prevail.\n\nIf a section in the Document is Entitled ``Acknowledgements'',\n``Dedications'', or ``History'', the requirement (section 4) to Preserve\nits Title (section 1) will typically require changing the actual\ntitle.\n\n@item\nTERMINATION\n\nYou may not copy, modify, sublicense, or distribute the Document except\nas expressly provided for under this License.  Any other attempt to\ncopy, modify, sublicense or distribute the Document is void, and will\nautomatically terminate your rights under this License.  However,\nparties who have received copies, or rights, from you under this\nLicense will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n@item\nFUTURE REVISIONS OF THIS LICENSE\n\nThe Free Software Foundation may publish new, revised versions\nof the GNU Free Documentation License from time to time.  Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.  See\n@uref{http://www.gnu.org/copyleft/}.\n\nEach version of the License is given a distinguishing version number.\nIf the Document specifies that a particular numbered version of this\nLicense ``or any later version'' applies to it, you have the option of\nfollowing the terms and conditions either of that specified version or\nof any later version that has been published (not as a draft) by the\nFree Software Foundation.  If the Document does not specify a version\nnumber of this License, you may choose any version ever published (not\nas a draft) by the Free Software Foundation.\n@end enumerate\n\n@page\n@appendixsubsec ADDENDUM: How to use this License for your documents\n\nTo use this License in a document you have written, include a copy of\nthe License in the document and put the following copyright and\nlicense notices just after the title page:\n\n@smallexample\n@group\n  Copyright (C)  @var{year}  @var{your name}.\n  Permission is granted to copy, distribute and/or modify this document\n  under the terms of the GNU Free Documentation License, Version 1.2\n  or any later version published by the Free Software Foundation;\n  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover\n  Texts.  A copy of the license is included in the section entitled ``GNU\n  Free Documentation License''.\n@end group\n@end smallexample\n\nIf you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,\nreplace the ``with...Texts.'' line with this:\n\n@smallexample\n@group\n    with the Invariant Sections being @var{list their titles}, with\n    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts\n    being @var{list}.\n@end group\n@end smallexample\n\nIf you have Invariant Sections without Cover Texts, or some other\ncombination of the three, merge those two alternatives to suit the\nsituation.\n\nIf your document contains nontrivial examples of program code, we\nrecommend releasing these examples in parallel under your choice of\nfree software license, such as the GNU General Public License,\nto permit their use in free software.\n\n@c Local Variables:\n@c ispell-local-pdict: \"ispell-dict\"\n@c End:\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/make-stds.texi",
    "content": "@comment This file is included by both standards.texi and make.texinfo.\n@comment It was broken out of standards.texi on 1/6/93 by roland.\n\n@node Makefile Conventions\n@chapter Makefile Conventions\n@comment standards.texi does not print an index, but make.texinfo does.\n@cindex makefile, conventions for\n@cindex conventions for makefiles\n@cindex standards for makefiles\n\n@c Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,\n@c 2004, 2005 Free Software Foundation, Inc.\n\n@c Permission is granted to copy, distribute and/or modify this document\n@c under the terms of the GNU Free Documentation License, Version 1.1\n@c or any later version published by the Free Software Foundation;\n@c with no Invariant Sections, with no\n@c Front-Cover Texts, and with no Back-Cover Texts.\n@c A copy of the license is included in the section entitled ``GNU\n@c Free Documentation License''.\n\nThis\n@ifinfo\nnode\n@end ifinfo\n@iftex\n@ifset CODESTD\nsection\n@end ifset\n@ifclear CODESTD\nchapter\n@end ifclear\n@end iftex\ndescribes conventions for writing the Makefiles for GNU programs.\nUsing Automake will help you write a Makefile that follows these\nconventions.\n\n@menu\n* Makefile Basics::             General Conventions for Makefiles\n* Utilities in Makefiles::      Utilities in Makefiles\n* Command Variables::           Variables for Specifying Commands\n* Directory Variables::         Variables for Installation Directories\n* Standard Targets::            Standard Targets for Users\n* Install Command Categories::  Three categories of commands in the `install'\n                                  rule: normal, pre-install and post-install.\n@end menu\n\n@node Makefile Basics\n@section General Conventions for Makefiles\n\nEvery Makefile should contain this line:\n\n@example\nSHELL = /bin/sh\n@end example\n\n@noindent\nto avoid trouble on systems where the @code{SHELL} variable might be\ninherited from the environment.  (This is never a problem with GNU\n@code{make}.)\n\nDifferent @code{make} programs have incompatible suffix lists and\nimplicit rules, and this sometimes creates confusion or misbehavior.  So\nit is a good idea to set the suffix list explicitly using only the\nsuffixes you need in the particular Makefile, like this:\n\n@example\n.SUFFIXES:\n.SUFFIXES: .c .o\n@end example\n\n@noindent\nThe first line clears out the suffix list, the second introduces all\nsuffixes which may be subject to implicit rules in this Makefile.\n\nDon't assume that @file{.} is in the path for command execution.  When\nyou need to run programs that are a part of your package during the\nmake, please make sure that it uses @file{./} if the program is built as\npart of the make or @file{$(srcdir)/} if the file is an unchanging part\nof the source code.  Without one of these prefixes, the current search\npath is used.\n\nThe distinction between @file{./} (the @dfn{build directory}) and\n@file{$(srcdir)/} (the @dfn{source directory}) is important because\nusers can build in a separate directory using the @samp{--srcdir} option\nto @file{configure}.  A rule of the form:\n\n@smallexample\nfoo.1 : foo.man sedscript\n        sed -e sedscript foo.man > foo.1\n@end smallexample\n\n@noindent\nwill fail when the build directory is not the source directory, because\n@file{foo.man} and @file{sedscript} are in the source directory.\n\nWhen using GNU @code{make}, relying on @samp{VPATH} to find the source\nfile will work in the case where there is a single dependency file,\nsince the @code{make} automatic variable @samp{$<} will represent the\nsource file wherever it is.  (Many versions of @code{make} set @samp{$<}\nonly in implicit rules.)  A Makefile target like\n\n@smallexample\nfoo.o : bar.c\n        $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o\n@end smallexample\n\n@noindent\nshould instead be written as\n\n@smallexample\nfoo.o : bar.c\n        $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@\n@end smallexample\n\n@noindent\nin order to allow @samp{VPATH} to work correctly.  When the target has\nmultiple dependencies, using an explicit @samp{$(srcdir)} is the easiest\nway to make the rule work well.  For example, the target above for\n@file{foo.1} is best written as:\n\n@smallexample\nfoo.1 : foo.man sedscript\n        sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@\n@end smallexample\n\nGNU distributions usually contain some files which are not source\nfiles---for example, Info files, and the output from Autoconf, Automake,\nBison or Flex.  Since these files normally appear in the source\ndirectory, they should always appear in the source directory, not in the\nbuild directory.  So Makefile rules to update them should put the\nupdated files in the source directory.\n\nHowever, if a file does not appear in the distribution, then the\nMakefile should not put it in the source directory, because building a\nprogram in ordinary circumstances should not modify the source directory\nin any way.\n\nTry to make the build and installation targets, at least (and all their\nsubtargets) work correctly with a parallel @code{make}.\n\n@node Utilities in Makefiles\n@section Utilities in Makefiles\n\nWrite the Makefile commands (and any shell scripts, such as\n@code{configure}) to run in @code{sh}, not in @code{csh}.  Don't use any\nspecial features of @code{ksh} or @code{bash}.\n\nThe @code{configure} script and the Makefile rules for building and\ninstallation should not use any utilities directly except these:\n\n@c dd find\n@c gunzip gzip md5sum\n@c mkfifo mknod tee uname\n\n@example\ncat cmp cp diff echo egrep expr false grep install-info\nln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true\n@end example\n\nThe compression program @code{gzip} can be used in the @code{dist} rule.\n\nStick to the generally supported options for these programs.  For\nexample, don't use @samp{mkdir -p}, convenient as it may be, because\nmost systems don't support it.\n\nIt is a good idea to avoid creating symbolic links in makefiles, since a\nfew systems don't support them.\n\nThe Makefile rules for building and installation can also use compilers\nand related programs, but should do so via @code{make} variables so that the\nuser can substitute alternatives.  Here are some of the programs we\nmean:\n\n@example\nar bison cc flex install ld ldconfig lex\nmake makeinfo ranlib texi2dvi yacc\n@end example\n\nUse the following @code{make} variables to run those programs:\n\n@example\n$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)\n$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)\n@end example\n\nWhen you use @code{ranlib} or @code{ldconfig}, you should make sure\nnothing bad happens if the system does not have the program in question.\nArrange to ignore an error from that command, and print a message before\nthe command to tell the user that failure of this command does not mean\na problem.  (The Autoconf @samp{AC_PROG_RANLIB} macro can help with\nthis.)\n\nIf you use symbolic links, you should implement a fallback for systems\nthat don't have symbolic links.\n\nAdditional utilities that can be used via Make variables are:\n\n@example\nchgrp chmod chown mknod\n@end example\n\nIt is ok to use other utilities in Makefile portions (or scripts)\nintended only for particular systems where you know those utilities\nexist.\n\n@node Command Variables\n@section Variables for Specifying Commands\n\nMakefiles should provide variables for overriding certain commands, options,\nand so on.\n\nIn particular, you should run most utility programs via variables.\nThus, if you use Bison, have a variable named @code{BISON} whose default\nvalue is set with @samp{BISON = bison}, and refer to it with\n@code{$(BISON)} whenever you need to use Bison.\n\nFile management utilities such as @code{ln}, @code{rm}, @code{mv}, and\nso on, need not be referred to through variables in this way, since users\ndon't need to replace them with other programs.\n\nEach program-name variable should come with an options variable that is\nused to supply options to the program.  Append @samp{FLAGS} to the\nprogram-name variable name to get the options variable name---for\nexample, @code{BISONFLAGS}.  (The names @code{CFLAGS} for the C\ncompiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are\nexceptions to this rule, but we keep them because they are standard.)\nUse @code{CPPFLAGS} in any compilation command that runs the\npreprocessor, and use @code{LDFLAGS} in any compilation command that\ndoes linking as well as in any direct use of @code{ld}.\n\nIf there are C compiler options that @emph{must} be used for proper\ncompilation of certain files, do not include them in @code{CFLAGS}.\nUsers expect to be able to specify @code{CFLAGS} freely themselves.\nInstead, arrange to pass the necessary options to the C compiler\nindependently of @code{CFLAGS}, by writing them explicitly in the\ncompilation commands or by defining an implicit rule, like this:\n\n@smallexample\nCFLAGS = -g\nALL_CFLAGS = -I. $(CFLAGS)\n.c.o:\n        $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<\n@end smallexample\n\nDo include the @samp{-g} option in @code{CFLAGS}, because that is not\n@emph{required} for proper compilation.  You can consider it a default\nthat is only recommended.  If the package is set up so that it is\ncompiled with GCC by default, then you might as well include @samp{-O}\nin the default value of @code{CFLAGS} as well.\n\nPut @code{CFLAGS} last in the compilation command, after other variables\ncontaining compiler options, so the user can use @code{CFLAGS} to\noverride the others.\n\n@code{CFLAGS} should be used in every invocation of the C compiler,\nboth those which do compilation and those which do linking.\n\nEvery Makefile should define the variable @code{INSTALL}, which is the\nbasic command for installing a file into the system.\n\nEvery Makefile should also define the variables @code{INSTALL_PROGRAM}\nand @code{INSTALL_DATA}.  (The default for @code{INSTALL_PROGRAM} should\nbe @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be\n@code{$@{INSTALL@} -m 644}.)  Then it should use those variables as the\ncommands for actual installation, for executables and nonexecutables\nrespectively.  Use these variables as follows:\n\n@example\n$(INSTALL_PROGRAM) foo $(bindir)/foo\n$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a\n@end example\n\nOptionally, you may prepend the value of @code{DESTDIR} to the target\nfilename.  Doing this allows the installer to create a snapshot of the\ninstallation to be copied onto the real target filesystem later.  Do not\nset the value of @code{DESTDIR} in your Makefile, and do not include it\nin any installed files.  With support for @code{DESTDIR}, the above\nexamples become:\n\n@example\n$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo\n$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a\n@end example\n\n@noindent\nAlways use a file name, not a directory name, as the second argument of\nthe installation commands.  Use a separate command for each file to be\ninstalled.\n\n@node Directory Variables\n@section Variables for Installation Directories\n\nInstallation directories should always be named by variables, so it is\neasy to install in a nonstandard place.  The standard names for these\nvariables and the values they should have in GNU packages are\ndescribed below.  They are based on a standard filesystem layout;\nvariants of it are used in GNU/Linux and other modern operating\nsystems.\n\nInstallers are expected to override these values when calling\n@command{make} (e.g., @kbd{make prefix=/usr install} or\n@command{configure} (e.g., @kbd{configure --prefix=/usr}).  GNU\npackages should not try to guess which value should be appropriate for\nthese variables on the system they are being installed onto: use the\ndefault settings specified here so that all GNU packages behave\nidentically, allowing the installer to achieve any desired layout.\n\nThese two variables set the root for the installation.  All the other\ninstallation directories should be subdirectories of one of these two,\nand nothing should be directly installed into these two directories.\n\n@table @code\n@item prefix\n@vindex prefix\nA prefix used in constructing the default values of the variables listed\nbelow.  The default value of @code{prefix} should be @file{/usr/local}.\nWhen building the complete GNU system, the prefix will be empty and\n@file{/usr} will be a symbolic link to @file{/}.\n(If you are using Autoconf, write it as @samp{@@prefix@@}.)\n\nRunning @samp{make install} with a different value of @code{prefix} from\nthe one used to build the program should @emph{not} recompile the\nprogram.\n\n@item exec_prefix\n@vindex exec_prefix\nA prefix used in constructing the default values of some of the\nvariables listed below.  The default value of @code{exec_prefix} should\nbe @code{$(prefix)}.\n(If you are using Autoconf, write it as @samp{@@exec_prefix@@}.)\n\nGenerally, @code{$(exec_prefix)} is used for directories that contain\nmachine-specific files (such as executables and subroutine libraries),\nwhile @code{$(prefix)} is used directly for other directories.\n\nRunning @samp{make install} with a different value of @code{exec_prefix}\nfrom the one used to build the program should @emph{not} recompile the\nprogram.\n@end table\n\nExecutable programs are installed in one of the following directories.\n\n@table @code\n@item bindir\n@vindex bindir\nThe directory for installing executable programs that users can run.\nThis should normally be @file{/usr/local/bin}, but write it as\n@file{$(exec_prefix)/bin}.\n(If you are using Autoconf, write it as @samp{@@bindir@@}.)\n\n@item sbindir\n@vindex sbindir\nThe directory for installing executable programs that can be run from\nthe shell, but are only generally useful to system administrators.  This\nshould normally be @file{/usr/local/sbin}, but write it as\n@file{$(exec_prefix)/sbin}.\n(If you are using Autoconf, write it as @samp{@@sbindir@@}.)\n\n@item libexecdir\n@vindex libexecdir\n@comment This paragraph adjusted to avoid overfull hbox --roland 5jul94\nThe directory for installing executable programs to be run by other\nprograms rather than by users.  This directory should normally be\n@file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}.\n(If you are using Autoconf, write it as @samp{@@libexecdir@@}.)\n\nThe definition of @samp{libexecdir} is the same for all packages, so\nyou should install your data in a subdirectory thereof.  Most packages\ninstall their data under @file{$(libexecdir)/@var{package-name}/},\npossibly within additional subdirectories thereof, such as\n@file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}.\n@end table\n\nData files used by the program during its execution are divided into\ncategories in two ways.\n\n@itemize @bullet\n@item\nSome files are normally modified by programs; others are never normally\nmodified (though users may edit some of these).\n\n@item\nSome files are architecture-independent and can be shared by all\nmachines at a site; some are architecture-dependent and can be shared\nonly by machines of the same kind and operating system; others may never\nbe shared between two machines.\n@end itemize\n\nThis makes for six different possibilities.  However, we want to\ndiscourage the use of architecture-dependent files, aside from object\nfiles and libraries.  It is much cleaner to make other data files\narchitecture-independent, and it is generally not hard.\n\nHere are the variables Makefiles should use to specify directories\nto put these various kinds of files in:\n\n@table @samp\n@item datarootdir\nThe root of the directory tree for read-only architecture-independent\ndata files.  This should normally be @file{/usr/local/share}, but\nwrite it as @file{$(prefix)/share}.  (If you are using Autoconf, write\nit as @samp{@@datarootdir@@}.)  @samp{datadir}'s default value is\nbased on this variable; so are @samp{infodir}, @samp{mandir}, and\nothers.\n\n@item datadir\nThe directory for installing idiosyncratic read-only\narchitecture-independent data files for this program.  This is usually\nthe same place as @samp{datarootdir}, but we use the two separate\nvariables so that you can move these program-specific files without\naltering the location for Info files, man pages, etc.\n\nThis should normally be @file{/usr/local/share}, but write it as\n@file{$(datarootdir)}.  (If you are using Autoconf, write it as\n@samp{@@datadir@@}.)\n\nThe definition of @samp{datadir} is the same for all packages, so you\nshould install your data in a subdirectory thereof.  Most packages\ninstall their data under @file{$(datadir)/@var{package-name}/}.\n\n@item sysconfdir\nThe directory for installing read-only data files that pertain to a\nsingle machine--that is to say, files for configuring a host.  Mailer\nand network configuration files, @file{/etc/passwd}, and so forth belong\nhere.  All the files in this directory should be ordinary ASCII text\nfiles.  This directory should normally be @file{/usr/local/etc}, but\nwrite it as @file{$(prefix)/etc}.\n(If you are using Autoconf, write it as @samp{@@sysconfdir@@}.)\n\nDo not install executables here in this directory (they probably belong\nin @file{$(libexecdir)} or @file{$(sbindir)}).  Also do not install\nfiles that are modified in the normal course of their use (programs\nwhose purpose is to change the configuration of the system excluded).\nThose probably belong in @file{$(localstatedir)}.\n\n@item sharedstatedir\nThe directory for installing architecture-independent data files which\nthe programs modify while they run.  This should normally be\n@file{/usr/local/com}, but write it as @file{$(prefix)/com}.\n(If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.)\n\n@item localstatedir\nThe directory for installing data files which the programs modify while\nthey run, and that pertain to one specific machine.  Users should never\nneed to modify files in this directory to configure the package's\noperation; put such configuration information in separate files that go\nin @file{$(datadir)} or @file{$(sysconfdir)}.  @file{$(localstatedir)}\nshould normally be @file{/usr/local/var}, but write it as\n@file{$(prefix)/var}.\n(If you are using Autoconf, write it as @samp{@@localstatedir@@}.)\n@end table\n\nThese variables specify the directory for installing certain specific\ntypes of files, if your program has them.  Every GNU package should\nhave Info files, so every program needs @samp{infodir}, but not all\nneed @samp{libdir} or @samp{lispdir}.\n\n@table @samp\n@item includedir\n@c rewritten to avoid overfull hbox --roland\nThe directory for installing header files to be included by user\nprograms with the C @samp{#include} preprocessor directive.  This\nshould normally be @file{/usr/local/include}, but write it as\n@file{$(prefix)/include}.\n(If you are using Autoconf, write it as @samp{@@includedir@@}.)\n\nMost compilers other than GCC do not look for header files in directory\n@file{/usr/local/include}.  So installing the header files this way is\nonly useful with GCC.  Sometimes this is not a problem because some\nlibraries are only really intended to work with GCC.  But some libraries\nare intended to work with other compilers.  They should install their\nheader files in two places, one specified by @code{includedir} and one\nspecified by @code{oldincludedir}.\n\n@item oldincludedir\nThe directory for installing @samp{#include} header files for use with\ncompilers other than GCC.  This should normally be @file{/usr/include}.\n(If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.)\n\nThe Makefile commands should check whether the value of\n@code{oldincludedir} is empty.  If it is, they should not try to use\nit; they should cancel the second installation of the header files.\n\nA package should not replace an existing header in this directory unless\nthe header came from the same package.  Thus, if your Foo package\nprovides a header file @file{foo.h}, then it should install the header\nfile in the @code{oldincludedir} directory if either (1) there is no\n@file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo\npackage.\n\nTo tell whether @file{foo.h} came from the Foo package, put a magic\nstring in the file---part of a comment---and @code{grep} for that string.\n\n@item docdir\nThe directory for installing documentation files (other than Info) for\nthis package.  By default, it should be\n@file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as\n@file{$(datarootdir)/doc/@var{yourpkg}}.  (If you are using Autoconf,\nwrite it as @samp{@@docdir@@}.)  The @var{yourpkg} subdirectory, which\nmay include a version number, prevents collisions among files with\ncommon names, such as @file{README}.\n\n@item infodir\nThe directory for installing the Info files for this package.  By\ndefault, it should be @file{/usr/local/share/info}, but it should be\nwritten as @file{$(datarootdir)/info}.  (If you are using Autoconf,\nwrite it as @samp{@@infodir@@}.)  @code{infodir} is separate from\n@code{docdir} for compatibility with existing practice.\n\n@item htmldir\n@itemx dvidir\n@itemx pdfdir\n@itemx psdir\nDirectories for installing documentation files in the particular\nformat.  (It is not required to support documentation in all these\nformats.)  They should all be set to @code{$(docdir)} by default.  (If\nyou are using Autoconf, write them as @samp{@@htmldir@@},\n@samp{@@dvidir@@}, etc.)  Packages which supply several translations\nof their documentation should install them in\n@samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where\n@var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}.\n\n@item libdir\nThe directory for object files and libraries of object code.  Do not\ninstall executables here, they probably ought to go in @file{$(libexecdir)}\ninstead.  The value of @code{libdir} should normally be\n@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}.\n(If you are using Autoconf, write it as @samp{@@libdir@@}.)\n\n@item lispdir\nThe directory for installing any Emacs Lisp files in this package.  By\ndefault, it should be @file{/usr/local/share/emacs/site-lisp}, but it\nshould be written as @file{$(datarootdir)/emacs/site-lisp}.\n\nIf you are using Autoconf, write the default as @samp{@@lispdir@@}.\nIn order to make @samp{@@lispdir@@} work, you need the following lines\nin your @file{configure.in} file:\n\n@example\nlispdir='$@{datarootdir@}/emacs/site-lisp'\nAC_SUBST(lispdir)\n@end example\n\n@item localedir\nThe directory for installing locale-specific message catalogs for this\npackage.  By default, it should be @file{/usr/local/share/locale}, but\nit should be written as @file{$(datarootdir)/locale}.  (If you are\nusing Autoconf, write it as @samp{@@localedir@@}.)  This directory\nusually has a subdirectory per locale.\n@end table\n\nUnix-style man pages are installed in one of the following:\n\n@table @samp\n@item mandir\nThe top-level directory for installing the man pages (if any) for this\npackage.  It will normally be @file{/usr/local/share/man}, but you\nshould write it as @file{$(datarootdir)/man}.  (If you are using\nAutoconf, write it as @samp{@@mandir@@}.)\n\n@item man1dir\nThe directory for installing section 1 man pages.  Write it as\n@file{$(mandir)/man1}.\n@item man2dir\nThe directory for installing section 2 man pages.  Write it as\n@file{$(mandir)/man2}\n@item @dots{}\n\n@strong{Don't make the primary documentation for any GNU software be a\nman page.  Write a manual in Texinfo instead.  Man pages are just for\nthe sake of people running GNU software on Unix, which is a secondary\napplication only.}\n\n@item manext\nThe file name extension for the installed man page.  This should contain\na period followed by the appropriate digit; it should normally be @samp{.1}.\n\n@item man1ext\nThe file name extension for installed section 1 man pages.\n@item man2ext\nThe file name extension for installed section 2 man pages.\n@item @dots{}\nUse these names instead of @samp{manext} if the package needs to install man\npages in more than one section of the manual.\n@end table\n\nAnd finally, you should set the following variable:\n\n@table @samp\n@item srcdir\nThe directory for the sources being compiled.  The value of this\nvariable is normally inserted by the @code{configure} shell script.\n(If you are using Autconf, use @samp{srcdir = @@srcdir@@}.)\n@end table\n\nFor example:\n\n@smallexample\n@c I have changed some of the comments here slightly to fix an overfull\n@c hbox, so the make manual can format correctly. --roland\n# Common prefix for installation directories.\n# NOTE: This directory must exist when you start the install.\nprefix = /usr/local\ndatarootdir = $(prefix)/share\ndatadir = $(datarootdir)\nexec_prefix = $(prefix)\n# Where to put the executable for the command `gcc'.\nbindir = $(exec_prefix)/bin\n# Where to put the directories used by the compiler.\nlibexecdir = $(exec_prefix)/libexec\n# Where to put the Info files.\ninfodir = $(datarootdir)/info\n@end smallexample\n\nIf your program installs a large number of files into one of the\nstandard user-specified directories, it might be useful to group them\ninto a subdirectory particular to that program.  If you do this, you\nshould write the @code{install} rule to create these subdirectories.\n\nDo not expect the user to include the subdirectory name in the value of\nany of the variables listed above.  The idea of having a uniform set of\nvariable names for installation directories is to enable the user to\nspecify the exact same values for several different GNU packages.  In\norder for this to be useful, all the packages must be designed so that\nthey will work sensibly when the user does so.\n\n@node Standard Targets\n@section Standard Targets for Users\n\nAll GNU programs should have the following targets in their Makefiles:\n\n@table @samp\n@item all\nCompile the entire program.  This should be the default target.  This\ntarget need not rebuild any documentation files; Info files should\nnormally be included in the distribution, and DVI files should be made\nonly when explicitly asked for.\n\nBy default, the Make rules should compile and link with @samp{-g}, so\nthat executable programs have debugging symbols.  Users who don't mind\nbeing helpless can strip the executables later if they wish.\n\n@item install\nCompile the program and copy the executables, libraries, and so on to\nthe file names where they should reside for actual use.  If there is a\nsimple test to verify that a program is properly installed, this target\nshould run that test.\n\nDo not strip executables when installing them.  Devil-may-care users can\nuse the @code{install-strip} target to do that.\n\nIf possible, write the @code{install} target rule so that it does not\nmodify anything in the directory where the program was built, provided\n@samp{make all} has just been done.  This is convenient for building the\nprogram under one user name and installing it under another.\n\nThe commands should create all the directories in which files are to be\ninstalled, if they don't already exist.  This includes the directories\nspecified as the values of the variables @code{prefix} and\n@code{exec_prefix}, as well as all subdirectories that are needed.\nOne way to do this is by means of an @code{installdirs} target\nas described below.\n\nUse @samp{-} before any command for installing a man page, so that\n@code{make} will ignore any errors.  This is in case there are systems\nthat don't have the Unix man page documentation system installed.\n\nThe way to install Info files is to copy them into @file{$(infodir)}\nwith @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run\nthe @code{install-info} program if it is present.  @code{install-info}\nis a program that edits the Info @file{dir} file to add or update the\nmenu entry for the given Info file; it is part of the Texinfo package.\nHere is a sample rule to install an Info file:\n\n@comment This example has been carefully formatted for the Make manual.\n@comment Please do not reformat it without talking to roland@gnu.ai.mit.edu.\n@smallexample\n$(DESTDIR)$(infodir)/foo.info: foo.info\n        $(POST_INSTALL)\n# There may be a newer info file in . than in srcdir.\n        -if test -f foo.info; then d=.; \\\n         else d=$(srcdir); fi; \\\n        $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@@; \\\n# Run install-info only if it exists.\n# Use `if' instead of just prepending `-' to the\n# line so we notice real errors from install-info.\n# We use `$(SHELL) -c' because some shells do not\n# fail gracefully when there is an unknown command.\n        if $(SHELL) -c 'install-info --version' \\\n           >/dev/null 2>&1; then \\\n          install-info --dir-file=$(DESTDIR)$(infodir)/dir \\\n                       $(DESTDIR)$(infodir)/foo.info; \\\n        else true; fi\n@end smallexample\n\nWhen writing the @code{install} target, you must classify all the\ncommands into three categories: normal ones, @dfn{pre-installation}\ncommands and @dfn{post-installation} commands.  @xref{Install Command\nCategories}.\n\n@item install-html\n@itemx install-dvi\n@itemx install-pdf\n@itemx install-ps\nThese targets install documentation in formats other than Info;\nthey're intended to be called explicitly by the person installing the\npackage, if that format is desired.  GNU prefers Info files, so these\nmust be installed by the @code{install} target.\n\nWhen you have many documentation files to install, we recommend that\nyou avoid collisions and clutter by arranging for these targets to\ninstall in subdirectories of the appropriate installation directory,\nsuch as @code{htmldir}.  As one example, if your package has multiple\nmanuals, and you wish to install HTML documentation with many files\n(such as the ``split'' mode output by @code{makeinfo --html}), you'll\ncertainly want to use subdirectories, or two nodes with the same name\nin different manuals will overwrite each other.\n\n@item uninstall\nDelete all the installed files---the copies that the @samp{install}\nand @samp{install-*} targets create.\n\nThis rule should not modify the directories where compilation is done,\nonly the directories where files are installed.\n\nThe uninstallation commands are divided into three categories, just like\nthe installation commands.  @xref{Install Command Categories}.\n\n@item install-strip\nLike @code{install}, but strip the executable files while installing\nthem.  In simple cases, this target can use the @code{install} target in\na simple way:\n\n@smallexample\ninstall-strip:\n        $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \\\n                install\n@end smallexample\n\nBut if the package installs scripts as well as real executables, the\n@code{install-strip} target can't just refer to the @code{install}\ntarget; it has to strip the executables but not the scripts.\n\n@code{install-strip} should not strip the executables in the build\ndirectory which are being copied for installation.  It should only strip\nthe copies that are installed.\n\nNormally we do not recommend stripping an executable unless you are sure\nthe program has no bugs.  However, it can be reasonable to install a\nstripped executable for actual execution while saving the unstripped\nexecutable elsewhere in case there is a bug.\n\n@comment The gratuitous blank line here is to make the table look better\n@comment in the printed Make manual.  Please leave it in.\n@item clean\n\nDelete all files in the current directory that are normally created by\nbuilding the program.  Also delete files in other directories if they\nare created by this makefile.  However, don't delete the files that\nrecord the configuration.  Also preserve files that could be made by\nbuilding, but normally aren't because the distribution comes with\nthem.  There is no need to delete parent directories that were created\nwith @samp{mkdir -p}, since they could have existed anyway.\n\nDelete @file{.dvi} files here if they are not part of the distribution.\n\n@item distclean\nDelete all files in the current directory (or created by this\nmakefile) that are created by configuring or building the program.  If\nyou have unpacked the source and built the program without creating\nany other files, @samp{make distclean} should leave only the files\nthat were in the distribution.  However, there is no need to delete\nparent directories that were created with @samp{mkdir -p}, since they\ncould have existed anyway.\n\n@item mostlyclean\nLike @samp{clean}, but may refrain from deleting a few files that people\nnormally don't want to recompile.  For example, the @samp{mostlyclean}\ntarget for GCC does not delete @file{libgcc.a}, because recompiling it\nis rarely necessary and takes a lot of time.\n\n@item maintainer-clean\nDelete almost everything that can be reconstructed with this Makefile.\nThis typically includes everything deleted by @code{distclean}, plus\nmore: C source files produced by Bison, tags tables, Info files, and\nso on.\n\nThe reason we say ``almost everything'' is that running the command\n@samp{make maintainer-clean} should not delete @file{configure} even\nif @file{configure} can be remade using a rule in the Makefile.  More\ngenerally, @samp{make maintainer-clean} should not delete anything\nthat needs to exist in order to run @file{configure} and then begin to\nbuild the program.  Also, there is no need to delete parent\ndirectories that were created with @samp{mkdir -p}, since they could\nhave existed anyway.  These are the only exceptions;\n@code{maintainer-clean} should delete everything else that can be\nrebuilt.\n\nThe @samp{maintainer-clean} target is intended to be used by a maintainer of\nthe package, not by ordinary users.  You may need special tools to\nreconstruct some of the files that @samp{make maintainer-clean} deletes.\nSince these files are normally included in the distribution, we don't\ntake care to make them easy to reconstruct.  If you find you need to\nunpack the full distribution again, don't blame us.\n\nTo help make users aware of this, the commands for the special\n@code{maintainer-clean} target should start with these two:\n\n@smallexample\n@@echo 'This command is intended for maintainers to use; it'\n@@echo 'deletes files that may need special tools to rebuild.'\n@end smallexample\n\n@item TAGS\nUpdate a tags table for this program.\n@c ADR: how?\n\n@item info\nGenerate any Info files needed.  The best way to write the rules is as\nfollows:\n\n@smallexample\ninfo: foo.info\n\nfoo.info: foo.texi chap1.texi chap2.texi\n        $(MAKEINFO) $(srcdir)/foo.texi\n@end smallexample\n\n@noindent\nYou must define the variable @code{MAKEINFO} in the Makefile.  It should\nrun the @code{makeinfo} program, which is part of the Texinfo\ndistribution.\n\nNormally a GNU distribution comes with Info files, and that means the\nInfo files are present in the source directory.  Therefore, the Make\nrule for an info file should update it in the source directory.  When\nusers build the package, ordinarily Make will not update the Info files\nbecause they will already be up to date.\n\n@item dvi\n@itemx html\n@itemx pdf\n@itemx ps\nGenerate documentation files in the given format, if possible.\nHere's an example rule for generating DVI files from Texinfo:\n\n@smallexample\ndvi: foo.dvi\n\nfoo.dvi: foo.texi chap1.texi chap2.texi\n        $(TEXI2DVI) $(srcdir)/foo.texi\n@end smallexample\n\n@noindent\nYou must define the variable @code{TEXI2DVI} in the Makefile.  It should\nrun the program @code{texi2dvi}, which is part of the Texinfo\ndistribution.@footnote{@code{texi2dvi} uses @TeX{} to do the real work\nof formatting. @TeX{} is not distributed with Texinfo.}  Alternatively,\nwrite just the dependencies, and allow GNU @code{make} to provide the command.\n\nHere's another example, this one for generating HTML from Texinfo:\n\n@smallexample\nhtml: foo.html\n\nfoo.html: foo.texi chap1.texi chap2.texi\n        $(TEXI2HTML) $(srcdir)/foo.texi\n@end smallexample\n\n@noindent\nAgain, you would define the variable @code{TEXI2HTML} in the Makefile;\nfor example, it might run @code{makeinfo --no-split --html}\n(@command{makeinfo} is part of the Texinfo distribution).\n\n@item dist\nCreate a distribution tar file for this program.  The tar file should be\nset up so that the file names in the tar file start with a subdirectory\nname which is the name of the package it is a distribution for.  This\nname can include the version number.\n\nFor example, the distribution tar file of GCC version 1.40 unpacks into\na subdirectory named @file{gcc-1.40}.\n\nThe easiest way to do this is to create a subdirectory appropriately\nnamed, use @code{ln} or @code{cp} to install the proper files in it, and\nthen @code{tar} that subdirectory.\n\nCompress the tar file with @code{gzip}.  For example, the actual\ndistribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}.\n\nThe @code{dist} target should explicitly depend on all non-source files\nthat are in the distribution, to make sure they are up to date in the\ndistribution.\n@ifset CODESTD\n@xref{Releases, , Making Releases}.\n@end ifset\n@ifclear CODESTD\n@xref{Releases, , Making Releases, standards, GNU Coding Standards}.\n@end ifclear\n\n@item check\nPerform self-tests (if any).  The user must build the program before\nrunning the tests, but need not install the program; you should write\nthe self-tests so that they work when the program is built but not\ninstalled.\n@end table\n\nThe following targets are suggested as conventional names, for programs\nin which they are useful.\n\n@table @code\n@item installcheck\nPerform installation tests (if any).  The user must build and install\nthe program before running the tests.  You should not assume that\n@file{$(bindir)} is in the search path.\n\n@item installdirs\nIt's useful to add a target named @samp{installdirs} to create the\ndirectories where files are installed, and their parent directories.\nThere is a script called @file{mkinstalldirs} which is convenient for\nthis; you can find it in the Texinfo package.\n@c It's in /gd/gnu/lib/mkinstalldirs.\nYou can use a rule like this:\n\n@comment This has been carefully formatted to look decent in the Make manual.\n@comment Please be sure not to make it extend any further to the right.--roland\n@smallexample\n# Make sure all installation directories (e.g. $(bindir))\n# actually exist by making them if necessary.\ninstalldirs: mkinstalldirs\n        $(srcdir)/mkinstalldirs $(bindir) $(datadir) \\\n                                $(libdir) $(infodir) \\\n                                $(mandir)\n@end smallexample\n\n@noindent\nor, if you wish to support @env{DESTDIR},\n\n@smallexample\n# Make sure all installation directories (e.g. $(bindir))\n# actually exist by making them if necessary.\ninstalldirs: mkinstalldirs\n        $(srcdir)/mkinstalldirs \\\n            $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \\\n            $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \\\n            $(DESTDIR)$(mandir)\n@end smallexample\n\nThis rule should not modify the directories where compilation is done.\nIt should do nothing but create installation directories.\n@end table\n\n@node Install Command Categories\n@section Install Command Categories\n\n@cindex pre-installation commands\n@cindex post-installation commands\nWhen writing the @code{install} target, you must classify all the\ncommands into three categories: normal ones, @dfn{pre-installation}\ncommands and @dfn{post-installation} commands.\n\nNormal commands move files into their proper places, and set their\nmodes.  They may not alter any files except the ones that come entirely\nfrom the package they belong to.\n\nPre-installation and post-installation commands may alter other files;\nin particular, they can edit global configuration files or data bases.\n\nPre-installation commands are typically executed before the normal\ncommands, and post-installation commands are typically run after the\nnormal commands.\n\nThe most common use for a post-installation command is to run\n@code{install-info}.  This cannot be done with a normal command, since\nit alters a file (the Info directory) which does not come entirely and\nsolely from the package being installed.  It is a post-installation\ncommand because it needs to be done after the normal command which\ninstalls the package's Info files.\n\nMost programs don't need any pre-installation commands, but we have the\nfeature just in case it is needed.\n\nTo classify the commands in the @code{install} rule into these three\ncategories, insert @dfn{category lines} among them.  A category line\nspecifies the category for the commands that follow.\n\nA category line consists of a tab and a reference to a special Make\nvariable, plus an optional comment at the end.  There are three\nvariables you can use, one for each category; the variable name\nspecifies the category.  Category lines are no-ops in ordinary execution\nbecause these three Make variables are normally undefined (and you\n@emph{should not} define them in the makefile).\n\nHere are the three possible category lines, each with a comment that\nexplains what it means:\n\n@smallexample\n        $(PRE_INSTALL)     # @r{Pre-install commands follow.}\n        $(POST_INSTALL)    # @r{Post-install commands follow.}\n        $(NORMAL_INSTALL)  # @r{Normal commands follow.}\n@end smallexample\n\nIf you don't use a category line at the beginning of the @code{install}\nrule, all the commands are classified as normal until the first category\nline.  If you don't use any category lines, all the commands are\nclassified as normal.\n\nThese are the category lines for @code{uninstall}:\n\n@smallexample\n        $(PRE_UNINSTALL)     # @r{Pre-uninstall commands follow.}\n        $(POST_UNINSTALL)    # @r{Post-uninstall commands follow.}\n        $(NORMAL_UNINSTALL)  # @r{Normal commands follow.}\n@end smallexample\n\nTypically, a pre-uninstall command would be used for deleting entries\nfrom the Info directory.\n\nIf the @code{install} or @code{uninstall} target has any dependencies\nwhich act as subroutines of installation, then you should start\n@emph{each} dependency's commands with a category line, and start the\nmain target's commands with a category line also.  This way, you can\nensure that each command is placed in the right category regardless of\nwhich of the dependencies actually run.\n\nPre-installation and post-installation commands should not run any\nprograms except for these:\n\n@example\n[ basename bash cat chgrp chmod chown cmp cp dd diff echo\negrep expand expr false fgrep find getopt grep gunzip gzip\nhostname install install-info kill ldconfig ln ls md5sum\nmkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee\ntest touch true uname xargs yes\n@end example\n\n@cindex binary packages\nThe reason for distinguishing the commands in this way is for the sake\nof making binary packages.  Typically a binary package contains all the\nexecutables and other files that need to be installed, and has its own\nmethod of installing them---so it does not need to run the normal\ninstallation commands.  But installing the binary package does need to\nexecute the pre-installation and post-installation commands.\n\nPrograms to build binary packages work by extracting the\npre-installation and post-installation commands.  Here is one way of\nextracting the pre-installation commands (the @option{-s} option to\n@command{make} is needed to silence messages about entering\nsubdirectories):\n\n@smallexample\nmake -s -n install -o all \\\n      PRE_INSTALL=pre-install \\\n      POST_INSTALL=post-install \\\n      NORMAL_INSTALL=normal-install \\\n  | gawk -f pre-install.awk\n@end smallexample\n\n@noindent\nwhere the file @file{pre-install.awk} could contain this:\n\n@smallexample\n$0 ~ /^(normal-install|post-install)[ \\t]*$/ @{on = 0@}\non @{print $0@}\n$0 ~ /^pre-install[ \\t]*$/ @{on = 1@}\n@end smallexample\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/make.info",
    "content": "This is\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.info,\nproduced by makeinfo version 4.13 from\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.texi.\n\nThis file documents the GNU `make' utility, which determines\nautomatically which pieces of a large program need to be recompiled,\nand issues the commands to recompile them.\n\n   This is Edition 0.70, last updated 13 October 2011, of `The GNU Make\nManual', for GNU `make' version 3.81.\n\n   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\n     Permission is granted to copy, distribute and/or modify this\n     document under the terms of the GNU Free Documentation License,\n     Version 1.2 or any later version published by the Free Software\n     Foundation; with no Invariant Sections, with the Front-Cover Texts\n     being \"A GNU Manual,\" and with the Back-Cover Texts as in (a)\n     below.  A copy of the license is included in the section entitled\n     \"GNU Free Documentation License.\"\n\n     (a) The FSF's Back-Cover Text is: \"You have freedom to copy and\n     modify this GNU Manual, like GNU software.  Copies published by\n     the Free Software Foundation raise funds for GNU development.\"\n\nINFO-DIR-SECTION GNU Packages\nSTART-INFO-DIR-ENTRY\n* Make: (make).            Remake files automatically.\nEND-INFO-DIR-ENTRY\n\n\u001f\nIndirect:\nmake.info-1: 1452\nmake.info-2: 301423\n\u001f\nTag Table:\n(Indirect)\nNode: Top1452\nNode: Overview14860\nNode: Preparing15870\nNode: Reading16842\nNode: Bugs17769\nNode: Introduction19599\nNode: Rule Introduction21191\nNode: Simple Makefile22935\nNode: How Make Works26564\nNode: Variables Simplify29219\nNode: make Deduces31425\nNode: Combine By Prerequisite33165\nNode: Cleanup34194\nNode: Makefiles35613\nNode: Makefile Contents36579\nNode: Makefile Names39534\nNode: Include41145\nRef: Include-Footnote-144777\nNode: MAKEFILES Variable44911\nNode: MAKEFILE_LIST Variable46421\nNode: Special Variables47689\nNode: Remaking Makefiles51196\nNode: Overriding Makefiles55445\nNode: Reading Makefiles57498\nNode: Secondary Expansion60402\nNode: Rules67836\nNode: Rule Example70508\nNode: Rule Syntax71365\nNode: Prerequisite Types73868\nNode: Wildcards75644\nNode: Wildcard Examples77362\nNode: Wildcard Pitfall78618\nNode: Wildcard Function80407\nNode: Directory Search82191\nNode: General Search83333\nNode: Selective Search85048\nNode: Search Algorithm88036\nNode: Commands/Search90555\nNode: Implicit/Search91901\nNode: Libraries/Search92845\nNode: Phony Targets94937\nNode: Force Targets100023\nNode: Empty Targets101068\nNode: Special Targets102366\nNode: Multiple Targets109540\nNode: Multiple Rules111415\nNode: Static Pattern113651\nNode: Static Usage114303\nNode: Static versus Implicit118024\nNode: Double-Colon119768\nNode: Automatic Prerequisites121425\nNode: Commands125703\nNode: Command Syntax126911\nNode: Splitting Lines128936\nNode: Variables in Commands131917\nNode: Echoing133244\nNode: Execution134536\nRef: Execution-Footnote-1135787\nNode: Choosing the Shell135933\nNode: Parallel139902\nNode: Errors143495\nNode: Interrupts147141\nNode: Recursion148728\nNode: MAKE Variable150822\nNode: Variables/Recursion153089\nNode: Options/Recursion158530\nNode: -w Option163695\nNode: Sequences164690\nNode: Empty Commands167702\nNode: Using Variables168876\nNode: Reference171989\nNode: Flavors173548\nNode: Advanced179286\nNode: Substitution Refs179791\nNode: Computed Names181344\nNode: Values185888\nNode: Setting186801\nNode: Appending188837\nNode: Override Directive192763\nNode: Defining194147\nNode: Environment196611\nNode: Target-specific198860\nNode: Pattern-specific201827\nNode: Conditionals203229\nNode: Conditional Example203939\nNode: Conditional Syntax206516\nNode: Testing Flags212241\nNode: Functions213343\nNode: Syntax of Functions214763\nNode: Text Functions216962\nNode: File Name Functions225533\nNode: Conditional Functions230755\nNode: Foreach Function233129\nNode: Call Function236341\nNode: Value Function239226\nNode: Eval Function240663\nNode: Origin Function242937\nNode: Flavor Function246155\nNode: Shell Function247221\nNode: Make Control Functions248855\nNode: Running250524\nNode: Makefile Arguments252513\nNode: Goals253229\nNode: Instead of Execution257970\nNode: Avoiding Compilation261256\nNode: Overriding263231\nNode: Testing265529\nNode: Options Summary267414\nNode: Implicit Rules277540\nNode: Using Implicit279688\nNode: Catalogue of Rules283227\nNode: Implicit Variables292577\nNode: Chained Rules297412\nNode: Pattern Rules301423\nNode: Pattern Intro302959\nNode: Pattern Examples305856\nNode: Automatic Variables307665\nNode: Pattern Match315036\nNode: Match-Anything Rules316672\nNode: Canceling Rules320547\nNode: Last Resort321263\nNode: Suffix Rules323110\nNode: Implicit Rule Search326839\nNode: Archives330358\nNode: Archive Members331056\nNode: Archive Update332669\nNode: Archive Symbols334583\nNode: Archive Pitfalls335817\nNode: Archive Suffix Rules336540\nNode: Features338087\nNode: Missing346642\nNode: Makefile Conventions350380\nNode: Makefile Basics351166\nNode: Utilities in Makefiles354333\nNode: Command Variables356471\nNode: Directory Variables360041\nNode: Standard Targets374181\nRef: Standard Targets-Footnote-1387300\nNode: Install Command Categories387400\nNode: Quick Reference391926\nNode: Error Messages402622\nNode: Complex Makefile410312\nNode: GNU Free Documentation License419030\nNode: Concept Index441479\nNode: Name Index506668\n\u001f\nEnd Tag Table\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/make.info-1",
    "content": "This is\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.info,\nproduced by makeinfo version 4.13 from\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.texi.\n\nThis file documents the GNU `make' utility, which determines\nautomatically which pieces of a large program need to be recompiled,\nand issues the commands to recompile them.\n\n   This is Edition 0.70, last updated 13 October 2011, of `The GNU Make\nManual', for GNU `make' version 3.81.\n\n   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\n     Permission is granted to copy, distribute and/or modify this\n     document under the terms of the GNU Free Documentation License,\n     Version 1.2 or any later version published by the Free Software\n     Foundation; with no Invariant Sections, with the Front-Cover Texts\n     being \"A GNU Manual,\" and with the Back-Cover Texts as in (a)\n     below.  A copy of the license is included in the section entitled\n     \"GNU Free Documentation License.\"\n\n     (a) The FSF's Back-Cover Text is: \"You have freedom to copy and\n     modify this GNU Manual, like GNU software.  Copies published by\n     the Free Software Foundation raise funds for GNU development.\"\n\nINFO-DIR-SECTION GNU Packages\nSTART-INFO-DIR-ENTRY\n* Make: (make).            Remake files automatically.\nEND-INFO-DIR-ENTRY\n\n\u001f\nFile: make.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)\n\nGNU `make'\n**********\n\nThis file documents the GNU `make' utility, which determines\nautomatically which pieces of a large program need to be recompiled,\nand issues the commands to recompile them.\n\n   This is Edition 0.70, last updated 13 October 2011, of `The GNU Make\nManual', for GNU `make' version 3.81.\n\n   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\n     Permission is granted to copy, distribute and/or modify this\n     document under the terms of the GNU Free Documentation License,\n     Version 1.2 or any later version published by the Free Software\n     Foundation; with no Invariant Sections, with the Front-Cover Texts\n     being \"A GNU Manual,\" and with the Back-Cover Texts as in (a)\n     below.  A copy of the license is included in the section entitled\n     \"GNU Free Documentation License.\"\n\n     (a) The FSF's Back-Cover Text is: \"You have freedom to copy and\n     modify this GNU Manual, like GNU software.  Copies published by\n     the Free Software Foundation raise funds for GNU development.\"\n\n* Menu:\n\n* Overview::                    Overview of `make'.\n* Introduction::                An introduction to `make'.\n* Makefiles::                   Makefiles tell `make' what to do.\n* Rules::                       Rules describe when a file must be remade.\n* Commands::                    Commands say how to remake a file.\n* Using Variables::             You can use variables to avoid repetition.\n* Conditionals::                Use or ignore parts of the makefile based\n                                  on the values of variables.\n* Functions::                   Many powerful ways to manipulate text.\n* Invoking make: Running.       How to invoke `make' on the command line.\n* Implicit Rules::              Use implicit rules to treat many files alike,\n                                  based on their file names.\n* Archives::                    How `make' can update library archives.\n* Features::                    Features GNU `make' has over other `make's.\n* Missing::                     What GNU `make' lacks from other `make's.\n* Makefile Conventions::        Conventions for writing makefiles for\n                                  GNU programs.\n* Quick Reference::             A quick reference for experienced users.\n* Error Messages::              A list of common errors generated by `make'.\n* Complex Makefile::            A real example of a straightforward,\n                                  but nontrivial, makefile.\n\n* GNU Free Documentation License::  License for copying this manual\n* Concept Index::               Index of Concepts\n* Name Index::                  Index of Functions, Variables, & Directives\n\n --- The Detailed Node Listing ---\n\nOverview of `make'\n\n* Preparing::                   Preparing and Running Make\n* Reading::                     On Reading this Text\n* Bugs::                        Problems and Bugs\n\nAn Introduction to Makefiles\n\n* Rule Introduction::           What a rule looks like.\n* Simple Makefile::             A Simple Makefile\n* How Make Works::              How `make' Processes This Makefile\n* Variables Simplify::          Variables Make Makefiles Simpler\n* make Deduces::                Letting `make' Deduce the Commands\n* Combine By Prerequisite::     Another Style of Makefile\n* Cleanup::                     Rules for Cleaning the Directory\n\nWriting Makefiles\n\n* Makefile Contents::           What makefiles contain.\n* Makefile Names::              How to name your makefile.\n* Include::                     How one makefile can use another makefile.\n* MAKEFILES Variable::          The environment can specify extra makefiles.\n* MAKEFILE_LIST Variable::      Discover which makefiles have been read.\n* Special Variables::           Other special variables.\n* Remaking Makefiles::          How makefiles get remade.\n* Overriding Makefiles::        How to override part of one makefile\n                                  with another makefile.\n* Reading Makefiles::           How makefiles are parsed.\n* Secondary Expansion::         How and when secondary expansion is performed.\n\nWriting Rules\n\n* Rule Example::                An example explained.\n* Rule Syntax::                 General syntax explained.\n* Prerequisite Types::          There are two types of prerequisites.\n* Wildcards::                   Using wildcard characters such as `*'.\n* Directory Search::            Searching other directories for source files.\n* Phony Targets::               Using a target that is not a real file's name.\n* Force Targets::               You can use a target without commands\n                                  or prerequisites to mark other targets\n                                  as phony.\n* Empty Targets::               When only the date matters and the\n                                  files are empty.\n* Special Targets::             Targets with special built-in meanings.\n* Multiple Targets::            When to make use of several targets in a rule.\n* Multiple Rules::              How to use several rules with the same target.\n* Static Pattern::              Static pattern rules apply to multiple targets\n                                  and can vary the prerequisites according to\n                                  the target name.\n* Double-Colon::                How to use a special kind of rule to allow\n                                  several independent rules for one target.\n* Automatic Prerequisites::     How to automatically generate rules giving\n                                  prerequisites from source files themselves.\n\nUsing Wildcard Characters in File Names\n\n* Wildcard Examples::           Several examples\n* Wildcard Pitfall::            Problems to avoid.\n* Wildcard Function::           How to cause wildcard expansion where\n                                  it does not normally take place.\n\nSearching Directories for Prerequisites\n\n* General Search::              Specifying a search path that applies\n                                  to every prerequisite.\n* Selective Search::            Specifying a search path\n                                  for a specified class of names.\n* Search Algorithm::            When and how search paths are applied.\n* Commands/Search::             How to write shell commands that work together\n                                  with search paths.\n* Implicit/Search::             How search paths affect implicit rules.\n* Libraries/Search::            Directory search for link libraries.\n\nStatic Pattern Rules\n\n* Static Usage::                The syntax of static pattern rules.\n* Static versus Implicit::      When are they better than implicit rules?\n\nWriting the Commands in Rules\n\n* Command Syntax::              Command syntax features and pitfalls.\n* Echoing::                     How to control when commands are echoed.\n* Execution::                   How commands are executed.\n* Parallel::                    How commands can be executed in parallel.\n* Errors::                      What happens after a command execution error.\n* Interrupts::                  What happens when a command is interrupted.\n* Recursion::                   Invoking `make' from makefiles.\n* Sequences::                   Defining canned sequences of commands.\n* Empty Commands::              Defining useful, do-nothing commands.\n\nCommand Syntax\n\n* Splitting Lines::             Breaking long command lines for readability.\n* Variables in Commands::       Using `make' variables in commands.\n\nCommand Execution\n\n* Choosing the Shell::          How `make' chooses the shell used\n                                  to run commands.\n\nRecursive Use of `make'\n\n* MAKE Variable::               The special effects of using `$(MAKE)'.\n* Variables/Recursion::         How to communicate variables to a sub-`make'.\n* Options/Recursion::           How to communicate options to a sub-`make'.\n* -w Option::                   How the `-w' or `--print-directory' option\n                                  helps debug use of recursive `make' commands.\n\nHow to Use Variables\n\n* Reference::                   How to use the value of a variable.\n* Flavors::                     Variables come in two flavors.\n* Advanced::                    Advanced features for referencing a variable.\n* Values::                      All the ways variables get their values.\n* Setting::                     How to set a variable in the makefile.\n* Appending::                   How to append more text to the old value\n                                  of a variable.\n* Override Directive::          How to set a variable in the makefile even if\n                                  the user has set it with a command argument.\n* Defining::                    An alternate way to set a variable\n                                  to a verbatim string.\n* Environment::                 Variable values can come from the environment.\n* Target-specific::             Variable values can be defined on a per-target\n                                  basis.\n* Pattern-specific::            Target-specific variable values can be applied\n                                  to a group of targets that match a pattern.\n\nAdvanced Features for Reference to Variables\n\n* Substitution Refs::           Referencing a variable with\n                                  substitutions on the value.\n* Computed Names::              Computing the name of the variable to refer to.\n\nConditional Parts of Makefiles\n\n* Conditional Example::         Example of a conditional\n* Conditional Syntax::          The syntax of conditionals.\n* Testing Flags::               Conditionals that test flags.\n\nFunctions for Transforming Text\n\n* Syntax of Functions::         How to write a function call.\n* Text Functions::              General-purpose text manipulation functions.\n* File Name Functions::         Functions for manipulating file names.\n* Conditional Functions::       Functions that implement conditions.\n* Foreach Function::            Repeat some text with controlled variation.\n* Call Function::               Expand a user-defined function.\n* Value Function::              Return the un-expanded value of a variable.\n* Eval Function::               Evaluate the arguments as makefile syntax.\n* Origin Function::             Find where a variable got its value.\n* Flavor Function::             Find out the flavor of a variable.\n* Shell Function::              Substitute the output of a shell command.\n* Make Control Functions::      Functions that control how make runs.\n\nHow to Run `make'\n\n* Makefile Arguments::          How to specify which makefile to use.\n* Goals::                       How to use goal arguments to specify which\n                                  parts of the makefile to use.\n* Instead of Execution::        How to use mode flags to specify what\n                                  kind of thing to do with the commands\n                                  in the makefile other than simply\n                                  execute them.\n* Avoiding Compilation::        How to avoid recompiling certain files.\n* Overriding::                  How to override a variable to specify\n                                  an alternate compiler and other things.\n* Testing::                     How to proceed past some errors, to\n                                  test compilation.\n* Options Summary::             Summary of Options\n\nUsing Implicit Rules\n\n* Using Implicit::              How to use an existing implicit rule\n                                  to get the commands for updating a file.\n* Catalogue of Rules::          A list of built-in implicit rules.\n* Implicit Variables::          How to change what predefined rules do.\n* Chained Rules::               How to use a chain of implicit rules.\n* Pattern Rules::               How to define new implicit rules.\n* Last Resort::                 How to define commands for rules which\n                                  cannot find any.\n* Suffix Rules::                The old-fashioned style of implicit rule.\n* Implicit Rule Search::        The precise algorithm for applying\n                                  implicit rules.\n\nDefining and Redefining Pattern Rules\n\n* Pattern Intro::               An introduction to pattern rules.\n* Pattern Examples::            Examples of pattern rules.\n* Automatic Variables::         How to use automatic variables in the\n                                  commands of implicit rules.\n* Pattern Match::               How patterns match.\n* Match-Anything Rules::        Precautions you should take prior to\n                                  defining rules that can match any\n                                  target file whatever.\n* Canceling Rules::             How to override or cancel built-in rules.\n\nUsing `make' to Update Archive Files\n\n* Archive Members::             Archive members as targets.\n* Archive Update::              The implicit rule for archive member targets.\n* Archive Pitfalls::            Dangers to watch out for when using archives.\n* Archive Suffix Rules::        You can write a special kind of suffix rule\n                                  for updating archives.\n\nImplicit Rule for Archive Member Targets\n\n* Archive Symbols::             How to update archive symbol directories.\n\n\u001f\nFile: make.info,  Node: Overview,  Next: Introduction,  Prev: Top,  Up: Top\n\n1 Overview of `make'\n********************\n\nThe `make' utility automatically determines which pieces of a large\nprogram need to be recompiled, and issues commands to recompile them.\nThis manual describes GNU `make', which was implemented by Richard\nStallman and Roland McGrath.  Development since Version 3.76 has been\nhandled by Paul D. Smith.\n\n   GNU `make' conforms to section 6.2 of `IEEE Standard 1003.2-1992'\n(POSIX.2).  \n\n   Our examples show C programs, since they are most common, but you\ncan use `make' with any programming language whose compiler can be run\nwith a shell command.  Indeed, `make' is not limited to programs.  You\ncan use it to describe any task where some files must be updated\nautomatically from others whenever the others change.\n\n* Menu:\n\n* Preparing::                   Preparing and Running Make\n* Reading::                     On Reading this Text\n* Bugs::                        Problems and Bugs\n\n\u001f\nFile: make.info,  Node: Preparing,  Next: Reading,  Prev: Overview,  Up: Overview\n\nPreparing and Running Make\n==========================\n\n   To prepare to use `make', you must write a file called the\n\"makefile\" that describes the relationships among files in your program\nand provides commands for updating each file.  In a program, typically,\nthe executable file is updated from object files, which are in turn\nmade by compiling source files.\n\n   Once a suitable makefile exists, each time you change some source\nfiles, this simple shell command:\n\n     make\n\nsuffices to perform all necessary recompilations.  The `make' program\nuses the makefile data base and the last-modification times of the\nfiles to decide which of the files need to be updated.  For each of\nthose files, it issues the commands recorded in the data base.\n\n   You can provide command line arguments to `make' to control which\nfiles should be recompiled, or how.  *Note How to Run `make': Running.\n\n\u001f\nFile: make.info,  Node: Reading,  Next: Bugs,  Prev: Preparing,  Up: Overview\n\n1.1 How to Read This Manual\n===========================\n\nIf you are new to `make', or are looking for a general introduction,\nread the first few sections of each chapter, skipping the later\nsections.  In each chapter, the first few sections contain introductory\nor general information and the later sections contain specialized or\ntechnical information.  The exception is the second chapter, *note An\nIntroduction to Makefiles: Introduction, all of which is introductory.\n\n   If you are familiar with other `make' programs, see *note Features\nof GNU `make': Features, which lists the enhancements GNU `make' has,\nand *note Incompatibilities and Missing Features: Missing, which\nexplains the few things GNU `make' lacks that others have.\n\n   For a quick summary, see *note Options Summary::, *note Quick\nReference::, and *note Special Targets::.\n\n\u001f\nFile: make.info,  Node: Bugs,  Prev: Reading,  Up: Overview\n\n1.2 Problems and Bugs\n=====================\n\nIf you have problems with GNU `make' or think you've found a bug,\nplease report it to the developers; we cannot promise to do anything but\nwe might well want to fix it.\n\n   Before reporting a bug, make sure you've actually found a real bug.\nCarefully reread the documentation and see if it really says you can do\nwhat you're trying to do.  If it's not clear whether you should be able\nto do something or not, report that too; it's a bug in the\ndocumentation!\n\n   Before reporting a bug or trying to fix it yourself, try to isolate\nit to the smallest possible makefile that reproduces the problem.  Then\nsend us the makefile and the exact results `make' gave you, including\nany error or warning messages.  Please don't paraphrase these messages:\nit's best to cut and paste them into your report.  When generating this\nsmall makefile, be sure to not use any non-free or unusual tools in\nyour commands: you can almost always emulate what such a tool would do\nwith simple shell commands.  Finally, be sure to explain what you\nexpected to occur; this will help us decide whether the problem was\nreally in the documentation.\n\n   Once you have a precise problem you can report it in one of two ways.\nEither send electronic mail to:\n\n         bug-make@gnu.org\n\nor use our Web-based project management tool, at:\n\n         http://savannah.gnu.org/projects/make/\n\nIn addition to the information above, please be careful to include the\nversion number of `make' you are using.  You can get this information\nwith the command `make --version'.  Be sure also to include the type of\nmachine and operating system you are using.  One way to obtain this\ninformation is by looking at the final lines of output from the command\n`make --help'.\n\n\u001f\nFile: make.info,  Node: Introduction,  Next: Makefiles,  Prev: Overview,  Up: Top\n\n2 An Introduction to Makefiles\n******************************\n\nYou need a file called a \"makefile\" to tell `make' what to do.  Most\noften, the makefile tells `make' how to compile and link a program.  \n\n   In this chapter, we will discuss a simple makefile that describes\nhow to compile and link a text editor which consists of eight C source\nfiles and three header files.  The makefile can also tell `make' how to\nrun miscellaneous commands when explicitly asked (for example, to remove\ncertain files as a clean-up operation).  To see a more complex example\nof a makefile, see *note Complex Makefile::.\n\n   When `make' recompiles the editor, each changed C source file must\nbe recompiled.  If a header file has changed, each C source file that\nincludes the header file must be recompiled to be safe.  Each\ncompilation produces an object file corresponding to the source file.\nFinally, if any source file has been recompiled, all the object files,\nwhether newly made or saved from previous compilations, must be linked\ntogether to produce the new executable editor.  \n\n* Menu:\n\n* Rule Introduction::           What a rule looks like.\n* Simple Makefile::             A Simple Makefile\n* How Make Works::              How `make' Processes This Makefile\n* Variables Simplify::          Variables Make Makefiles Simpler\n* make Deduces::                Letting `make' Deduce the Commands\n* Combine By Prerequisite::     Another Style of Makefile\n* Cleanup::                     Rules for Cleaning the Directory\n\n\u001f\nFile: make.info,  Node: Rule Introduction,  Next: Simple Makefile,  Prev: Introduction,  Up: Introduction\n\n2.1 What a Rule Looks Like\n==========================\n\nA simple makefile consists of \"rules\" with the following shape:\n\n     TARGET ... : PREREQUISITES ...\n             COMMAND\n             ...\n             ...\n\n   A \"target\" is usually the name of a file that is generated by a\nprogram; examples of targets are executable or object files.  A target\ncan also be the name of an action to carry out, such as `clean' (*note\nPhony Targets::).\n\n   A \"prerequisite\" is a file that is used as input to create the\ntarget.  A target often depends on several files.\n\n   A \"command\" is an action that `make' carries out.  A rule may have\nmore than one command, each on its own line.  *Please note:* you need\nto put a tab character at the beginning of every command line!  This is\nan obscurity that catches the unwary.\n\n   Usually a command is in a rule with prerequisites and serves to\ncreate a target file if any of the prerequisites change.  However, the\nrule that specifies commands for the target need not have\nprerequisites.  For example, the rule containing the delete command\nassociated with the target `clean' does not have prerequisites.\n\n   A \"rule\", then, explains how and when to remake certain files which\nare the targets of the particular rule.  `make' carries out the\ncommands on the prerequisites to create or update the target.  A rule\ncan also explain how and when to carry out an action.  *Note Writing\nRules: Rules.\n\n   A makefile may contain other text besides rules, but a simple\nmakefile need only contain rules.  Rules may look somewhat more\ncomplicated than shown in this template, but all fit the pattern more\nor less.\n\n\u001f\nFile: make.info,  Node: Simple Makefile,  Next: How Make Works,  Prev: Rule Introduction,  Up: Introduction\n\n2.2 A Simple Makefile\n=====================\n\nHere is a straightforward makefile that describes the way an executable\nfile called `edit' depends on eight object files which, in turn, depend\non eight C source and three header files.\n\n   In this example, all the C files include `defs.h', but only those\ndefining editing commands include `command.h', and only low level files\nthat change the editor buffer include `buffer.h'.\n\n     edit : main.o kbd.o command.o display.o \\\n            insert.o search.o files.o utils.o\n             cc -o edit main.o kbd.o command.o display.o \\\n                        insert.o search.o files.o utils.o\n\n     main.o : main.c defs.h\n             cc -c main.c\n     kbd.o : kbd.c defs.h command.h\n             cc -c kbd.c\n     command.o : command.c defs.h command.h\n             cc -c command.c\n     display.o : display.c defs.h buffer.h\n             cc -c display.c\n     insert.o : insert.c defs.h buffer.h\n             cc -c insert.c\n     search.o : search.c defs.h buffer.h\n             cc -c search.c\n     files.o : files.c defs.h buffer.h command.h\n             cc -c files.c\n     utils.o : utils.c defs.h\n             cc -c utils.c\n     clean :\n             rm edit main.o kbd.o command.o display.o \\\n                insert.o search.o files.o utils.o\n\nWe split each long line into two lines using backslash-newline; this is\nlike using one long line, but is easier to read.  \n\n   To use this makefile to create the executable file called `edit',\ntype:\n\n     make\n\n   To use this makefile to delete the executable file and all the object\nfiles from the directory, type:\n\n     make clean\n\n   In the example makefile, the targets include the executable file\n`edit', and the object files `main.o' and `kbd.o'.  The prerequisites\nare files such as `main.c' and `defs.h'.  In fact, each `.o' file is\nboth a target and a prerequisite.  Commands include `cc -c main.c' and\n`cc -c kbd.c'.\n\n   When a target is a file, it needs to be recompiled or relinked if any\nof its prerequisites change.  In addition, any prerequisites that are\nthemselves automatically generated should be updated first.  In this\nexample, `edit' depends on each of the eight object files; the object\nfile `main.o' depends on the source file `main.c' and on the header\nfile `defs.h'.\n\n   A shell command follows each line that contains a target and\nprerequisites.  These shell commands say how to update the target file.\nA tab character must come at the beginning of every command line to\ndistinguish command lines from other lines in the makefile.  (Bear in\nmind that `make' does not know anything about how the commands work.\nIt is up to you to supply commands that will update the target file\nproperly.  All `make' does is execute the commands in the rule you have\nspecified when the target file needs to be updated.)  \n\n   The target `clean' is not a file, but merely the name of an action.\nSince you normally do not want to carry out the actions in this rule,\n`clean' is not a prerequisite of any other rule.  Consequently, `make'\nnever does anything with it unless you tell it specifically.  Note that\nthis rule not only is not a prerequisite, it also does not have any\nprerequisites, so the only purpose of the rule is to run the specified\ncommands.  Targets that do not refer to files but are just actions are\ncalled \"phony targets\".  *Note Phony Targets::, for information about\nthis kind of target.  *Note Errors in Commands: Errors, to see how to\ncause `make' to ignore errors from `rm' or any other command.  \n\n\u001f\nFile: make.info,  Node: How Make Works,  Next: Variables Simplify,  Prev: Simple Makefile,  Up: Introduction\n\n2.3 How `make' Processes a Makefile\n===================================\n\nBy default, `make' starts with the first target (not targets whose\nnames start with `.').  This is called the \"default goal\".  (\"Goals\"\nare the targets that `make' strives ultimately to update.    You can\noverride this behavior using the command line (*note Arguments to\nSpecify the Goals: Goals.) or with the `.DEFAULT_GOAL' special variable\n(*note Other Special Variables: Special Variables.).  \n\n   In the simple example of the previous section, the default goal is to\nupdate the executable program `edit'; therefore, we put that rule first.\n\n   Thus, when you give the command:\n\n     make\n\n`make' reads the makefile in the current directory and begins by\nprocessing the first rule.  In the example, this rule is for relinking\n`edit'; but before `make' can fully process this rule, it must process\nthe rules for the files that `edit' depends on, which in this case are\nthe object files.  Each of these files is processed according to its\nown rule.  These rules say to update each `.o' file by compiling its\nsource file.  The recompilation must be done if the source file, or any\nof the header files named as prerequisites, is more recent than the\nobject file, or if the object file does not exist.\n\n   The other rules are processed because their targets appear as\nprerequisites of the goal.  If some other rule is not depended on by the\ngoal (or anything it depends on, etc.), that rule is not processed,\nunless you tell `make' to do so (with a command such as `make clean').\n\n   Before recompiling an object file, `make' considers updating its\nprerequisites, the source file and header files.  This makefile does not\nspecify anything to be done for them--the `.c' and `.h' files are not\nthe targets of any rules--so `make' does nothing for these files.  But\n`make' would update automatically generated C programs, such as those\nmade by Bison or Yacc, by their own rules at this time.\n\n   After recompiling whichever object files need it, `make' decides\nwhether to relink `edit'.  This must be done if the file `edit' does\nnot exist, or if any of the object files are newer than it.  If an\nobject file was just recompiled, it is now newer than `edit', so `edit'\nis relinked.  \n\n   Thus, if we change the file `insert.c' and run `make', `make' will\ncompile that file to update `insert.o', and then link `edit'.  If we\nchange the file `command.h' and run `make', `make' will recompile the\nobject files `kbd.o', `command.o' and `files.o' and then link the file\n`edit'.\n\n\u001f\nFile: make.info,  Node: Variables Simplify,  Next: make Deduces,  Prev: How Make Works,  Up: Introduction\n\n2.4 Variables Make Makefiles Simpler\n====================================\n\nIn our example, we had to list all the object files twice in the rule\nfor `edit' (repeated here):\n\n     edit : main.o kbd.o command.o display.o \\\n                   insert.o search.o files.o utils.o\n             cc -o edit main.o kbd.o command.o display.o \\\n                        insert.o search.o files.o utils.o\n\n   Such duplication is error-prone; if a new object file is added to the\nsystem, we might add it to one list and forget the other.  We can\neliminate the risk and simplify the makefile by using a variable.\n\"Variables\" allow a text string to be defined once and substituted in\nmultiple places later (*note How to Use Variables: Using Variables.).\n\n   It is standard practice for every makefile to have a variable named\n`objects', `OBJECTS', `objs', `OBJS', `obj', or `OBJ' which is a list\nof all object file names.  We would define such a variable `objects'\nwith a line like this in the makefile:\n\n     objects = main.o kbd.o command.o display.o \\\n               insert.o search.o files.o utils.o\n\nThen, each place we want to put a list of the object file names, we can\nsubstitute the variable's value by writing `$(objects)' (*note How to\nUse Variables: Using Variables.).\n\n   Here is how the complete simple makefile looks when you use a\nvariable for the object files:\n\n     objects = main.o kbd.o command.o display.o \\\n               insert.o search.o files.o utils.o\n\n     edit : $(objects)\n             cc -o edit $(objects)\n     main.o : main.c defs.h\n             cc -c main.c\n     kbd.o : kbd.c defs.h command.h\n             cc -c kbd.c\n     command.o : command.c defs.h command.h\n             cc -c command.c\n     display.o : display.c defs.h buffer.h\n             cc -c display.c\n     insert.o : insert.c defs.h buffer.h\n             cc -c insert.c\n     search.o : search.c defs.h buffer.h\n             cc -c search.c\n     files.o : files.c defs.h buffer.h command.h\n             cc -c files.c\n     utils.o : utils.c defs.h\n             cc -c utils.c\n     clean :\n             rm edit $(objects)\n\n\u001f\nFile: make.info,  Node: make Deduces,  Next: Combine By Prerequisite,  Prev: Variables Simplify,  Up: Introduction\n\n2.5 Letting `make' Deduce the Commands\n======================================\n\nIt is not necessary to spell out the commands for compiling the\nindividual C source files, because `make' can figure them out: it has an\n\"implicit rule\" for updating a `.o' file from a correspondingly named\n`.c' file using a `cc -c' command.  For example, it will use the\ncommand `cc -c main.c -o main.o' to compile `main.c' into `main.o'.  We\ncan therefore omit the commands from the rules for the object files.\n*Note Using Implicit Rules: Implicit Rules.\n\n   When a `.c' file is used automatically in this way, it is also\nautomatically added to the list of prerequisites.  We can therefore omit\nthe `.c' files from the prerequisites, provided we omit the commands.\n\n   Here is the entire example, with both of these changes, and a\nvariable `objects' as suggested above:\n\n     objects = main.o kbd.o command.o display.o \\\n               insert.o search.o files.o utils.o\n\n     edit : $(objects)\n             cc -o edit $(objects)\n\n     main.o : defs.h\n     kbd.o : defs.h command.h\n     command.o : defs.h command.h\n     display.o : defs.h buffer.h\n     insert.o : defs.h buffer.h\n     search.o : defs.h buffer.h\n     files.o : defs.h buffer.h command.h\n     utils.o : defs.h\n\n     .PHONY : clean\n     clean :\n             rm edit $(objects)\n\nThis is how we would write the makefile in actual practice.  (The\ncomplications associated with `clean' are described elsewhere.  See\n*note Phony Targets::, and *note Errors in Commands: Errors.)\n\n   Because implicit rules are so convenient, they are important.  You\nwill see them used frequently.\n\n\u001f\nFile: make.info,  Node: Combine By Prerequisite,  Next: Cleanup,  Prev: make Deduces,  Up: Introduction\n\n2.6 Another Style of Makefile\n=============================\n\nWhen the objects of a makefile are created only by implicit rules, an\nalternative style of makefile is possible.  In this style of makefile,\nyou group entries by their prerequisites instead of by their targets.\nHere is what one looks like:\n\n     objects = main.o kbd.o command.o display.o \\\n               insert.o search.o files.o utils.o\n\n     edit : $(objects)\n             cc -o edit $(objects)\n\n     $(objects) : defs.h\n     kbd.o command.o files.o : command.h\n     display.o insert.o search.o files.o : buffer.h\n\nHere `defs.h' is given as a prerequisite of all the object files;\n`command.h' and `buffer.h' are prerequisites of the specific object\nfiles listed for them.\n\n   Whether this is better is a matter of taste: it is more compact, but\nsome people dislike it because they find it clearer to put all the\ninformation about each target in one place.\n\n\u001f\nFile: make.info,  Node: Cleanup,  Prev: Combine By Prerequisite,  Up: Introduction\n\n2.7 Rules for Cleaning the Directory\n====================================\n\nCompiling a program is not the only thing you might want to write rules\nfor.  Makefiles commonly tell how to do a few other things besides\ncompiling a program: for example, how to delete all the object files\nand executables so that the directory is `clean'.\n\n   Here is how we could write a `make' rule for cleaning our example\neditor:\n\n     clean:\n             rm edit $(objects)\n\n   In practice, we might want to write the rule in a somewhat more\ncomplicated manner to handle unanticipated situations.  We would do\nthis:\n\n     .PHONY : clean\n     clean :\n             -rm edit $(objects)\n\nThis prevents `make' from getting confused by an actual file called\n`clean' and causes it to continue in spite of errors from `rm'.  (See\n*note Phony Targets::, and *note Errors in Commands: Errors.)\n\nA rule such as this should not be placed at the beginning of the\nmakefile, because we do not want it to run by default!  Thus, in the\nexample makefile, we want the rule for `edit', which recompiles the\neditor, to remain the default goal.\n\n   Since `clean' is not a prerequisite of `edit', this rule will not\nrun at all if we give the command `make' with no arguments.  In order\nto make the rule run, we have to type `make clean'.  *Note How to Run\n`make': Running.\n\n\u001f\nFile: make.info,  Node: Makefiles,  Next: Rules,  Prev: Introduction,  Up: Top\n\n3 Writing Makefiles\n*******************\n\nThe information that tells `make' how to recompile a system comes from\nreading a data base called the \"makefile\".\n\n* Menu:\n\n* Makefile Contents::           What makefiles contain.\n* Makefile Names::              How to name your makefile.\n* Include::                     How one makefile can use another makefile.\n* MAKEFILES Variable::          The environment can specify extra makefiles.\n* MAKEFILE_LIST Variable::      Discover which makefiles have been read.\n* Special Variables::           Other special variables.\n* Remaking Makefiles::          How makefiles get remade.\n* Overriding Makefiles::        How to override part of one makefile\n                                  with another makefile.\n* Reading Makefiles::           How makefiles are parsed.\n* Secondary Expansion::         How and when secondary expansion is performed.\n\n\u001f\nFile: make.info,  Node: Makefile Contents,  Next: Makefile Names,  Prev: Makefiles,  Up: Makefiles\n\n3.1 What Makefiles Contain\n==========================\n\nMakefiles contain five kinds of things: \"explicit rules\", \"implicit\nrules\", \"variable definitions\", \"directives\", and \"comments\".  Rules,\nvariables, and directives are described at length in later chapters.\n\n   * An \"explicit rule\" says when and how to remake one or more files,\n     called the rule's \"targets\".  It lists the other files that the\n     targets depend on, called the \"prerequisites\" of the target, and\n     may also give commands to use to create or update the targets.\n     *Note Writing Rules: Rules.\n\n   * An \"implicit rule\" says when and how to remake a class of files\n     based on their names.  It describes how a target may depend on a\n     file with a name similar to the target and gives commands to\n     create or update such a target.  *Note Using Implicit Rules:\n     Implicit Rules.\n\n   * A \"variable definition\" is a line that specifies a text string\n     value for a variable that can be substituted into the text later.\n     The simple makefile example shows a variable definition for\n     `objects' as a list of all object files (*note Variables Make\n     Makefiles Simpler: Variables Simplify.).\n\n   * A \"directive\" is a command for `make' to do something special while\n     reading the makefile.  These include:\n\n        * Reading another makefile (*note Including Other Makefiles:\n          Include.).\n\n        * Deciding (based on the values of variables) whether to use or\n          ignore a part of the makefile (*note Conditional Parts of\n          Makefiles: Conditionals.).\n\n        * Defining a variable from a verbatim string containing\n          multiple lines (*note Defining Variables Verbatim: Defining.).\n\n   * `#' in a line of a makefile starts a \"comment\".  It and the rest\n     of the line are ignored, except that a trailing backslash not\n     escaped by another backslash will continue the comment across\n     multiple lines.  A line containing just a comment (with perhaps\n     spaces before it) is effectively blank, and is ignored.  If you\n     want a literal `#', escape it with a backslash (e.g., `\\#').\n     Comments may appear on any line in the makefile, although they are\n     treated specially in certain situations.\n\n     Within a command script (if the line begins with a TAB character)\n     the entire line is passed to the shell, just as with any other\n     line that begins with a TAB.  The shell decides how to interpret\n     the text: whether or not this is a comment is up to the shell.\n\n     Within a `define' directive, comments are not ignored during the\n     definition of the variable, but rather kept intact in the value of\n     the variable.  When the variable is expanded they will either be\n     treated as `make' comments or as command script text, depending on\n     the context in which the variable is evaluated.\n\n\u001f\nFile: make.info,  Node: Makefile Names,  Next: Include,  Prev: Makefile Contents,  Up: Makefiles\n\n3.2 What Name to Give Your Makefile\n===================================\n\nBy default, when `make' looks for the makefile, it tries the following\nnames, in order: `GNUmakefile', `makefile' and `Makefile'.  \n\n   Normally you should call your makefile either `makefile' or\n`Makefile'.  (We recommend `Makefile' because it appears prominently\nnear the beginning of a directory listing, right near other important\nfiles such as `README'.)  The first name checked, `GNUmakefile', is not\nrecommended for most makefiles.  You should use this name if you have a\nmakefile that is specific to GNU `make', and will not be understood by\nother versions of `make'.  Other `make' programs look for `makefile' and\n`Makefile', but not `GNUmakefile'.\n\n   If `make' finds none of these names, it does not use any makefile.\nThen you must specify a goal with a command argument, and `make' will\nattempt to figure out how to remake it using only its built-in implicit\nrules.  *Note Using Implicit Rules: Implicit Rules.\n\n   If you want to use a nonstandard name for your makefile, you can\nspecify the makefile name with the `-f' or `--file' option.  The\narguments `-f NAME' or `--file=NAME' tell `make' to read the file NAME\nas the makefile.  If you use more than one `-f' or `--file' option, you\ncan specify several makefiles.  All the makefiles are effectively\nconcatenated in the order specified.  The default makefile names\n`GNUmakefile', `makefile' and `Makefile' are not checked automatically\nif you specify `-f' or `--file'.  \n\n\u001f\nFile: make.info,  Node: Include,  Next: MAKEFILES Variable,  Prev: Makefile Names,  Up: Makefiles\n\n3.3 Including Other Makefiles\n=============================\n\nThe `include' directive tells `make' to suspend reading the current\nmakefile and read one or more other makefiles before continuing.  The\ndirective is a line in the makefile that looks like this:\n\n     include FILENAMES...\n\nFILENAMES can contain shell file name patterns.  If FILENAMES is empty,\nnothing is included and no error is printed.  \n\n   Extra spaces are allowed and ignored at the beginning of the line,\nbut a tab is not allowed.  (If the line begins with a tab, it will be\nconsidered a command line.)  Whitespace is required between `include'\nand the file names, and between file names; extra whitespace is ignored\nthere and at the end of the directive.  A comment starting with `#' is\nallowed at the end of the line.  If the file names contain any variable\nor function references, they are expanded.  *Note How to Use Variables:\nUsing Variables.\n\n   For example, if you have three `.mk' files, `a.mk', `b.mk', and\n`c.mk', and `$(bar)' expands to `bish bash', then the following\nexpression\n\n     include foo *.mk $(bar)\n\n   is equivalent to\n\n     include foo a.mk b.mk c.mk bish bash\n\n   When `make' processes an `include' directive, it suspends reading of\nthe containing makefile and reads from each listed file in turn.  When\nthat is finished, `make' resumes reading the makefile in which the\ndirective appears.\n\n   One occasion for using `include' directives is when several programs,\nhandled by individual makefiles in various directories, need to use a\ncommon set of variable definitions (*note Setting Variables: Setting.)\nor pattern rules (*note Defining and Redefining Pattern Rules: Pattern\nRules.).\n\n   Another such occasion is when you want to generate prerequisites from\nsource files automatically; the prerequisites can be put in a file that\nis included by the main makefile.  This practice is generally cleaner\nthan that of somehow appending the prerequisites to the end of the main\nmakefile as has been traditionally done with other versions of `make'.\n*Note Automatic Prerequisites::.  \n\n   If the specified name does not start with a slash, and the file is\nnot found in the current directory, several other directories are\nsearched.  First, any directories you have specified with the `-I' or\n`--include-dir' option are searched (*note Summary of Options: Options\nSummary.).  Then the following directories (if they exist) are\nsearched, in this order: `PREFIX/include' (normally `/usr/local/include'\n(1)) `/usr/gnu/include', `/usr/local/include', `/usr/include'.\n\n   If an included makefile cannot be found in any of these directories,\na warning message is generated, but it is not an immediately fatal\nerror; processing of the makefile containing the `include' continues.\nOnce it has finished reading makefiles, `make' will try to remake any\nthat are out of date or don't exist.  *Note How Makefiles Are Remade:\nRemaking Makefiles.  Only after it has tried to find a way to remake a\nmakefile and failed, will `make' diagnose the missing makefile as a\nfatal error.\n\n   If you want `make' to simply ignore a makefile which does not exist\nand cannot be remade, with no error message, use the `-include'\ndirective instead of `include', like this:\n\n     -include FILENAMES...\n\n   This acts like `include' in every way except that there is no error\n(not even a warning) if any of the FILENAMES do not exist.  For\ncompatibility with some other `make' implementations, `sinclude' is\nanother name for `-include'.\n\n   ---------- Footnotes ----------\n\n   (1) GNU Make compiled for MS-DOS and MS-Windows behaves as if PREFIX\nhas been defined to be the root of the DJGPP tree hierarchy.\n\n\u001f\nFile: make.info,  Node: MAKEFILES Variable,  Next: MAKEFILE_LIST Variable,  Prev: Include,  Up: Makefiles\n\n3.4 The Variable `MAKEFILES'\n============================\n\nIf the environment variable `MAKEFILES' is defined, `make' considers\nits value as a list of names (separated by whitespace) of additional\nmakefiles to be read before the others.  This works much like the\n`include' directive: various directories are searched for those files\n(*note Including Other Makefiles: Include.).  In addition, the default\ngoal is never taken from one of these makefiles and it is not an error\nif the files listed in `MAKEFILES' are not found.\n\n   The main use of `MAKEFILES' is in communication between recursive\ninvocations of `make' (*note Recursive Use of `make': Recursion.).  It\nusually is not desirable to set the environment variable before a\ntop-level invocation of `make', because it is usually better not to\nmess with a makefile from outside.  However, if you are running `make'\nwithout a specific makefile, a makefile in `MAKEFILES' can do useful\nthings to help the built-in implicit rules work better, such as\ndefining search paths (*note Directory Search::).\n\n   Some users are tempted to set `MAKEFILES' in the environment\nautomatically on login, and program makefiles to expect this to be done.\nThis is a very bad idea, because such makefiles will fail to work if\nrun by anyone else.  It is much better to write explicit `include'\ndirectives in the makefiles.  *Note Including Other Makefiles: Include.\n\n\u001f\nFile: make.info,  Node: MAKEFILE_LIST Variable,  Next: Special Variables,  Prev: MAKEFILES Variable,  Up: Makefiles\n\n3.5 The Variable `MAKEFILE_LIST'\n================================\n\nAs `make' reads various makefiles, including any obtained from the\n`MAKEFILES' variable, the command line, the default files, or from\n`include' directives, their names will be automatically appended to the\n`MAKEFILE_LIST' variable.  They are added right before `make' begins to\nparse them.\n\n   This means that if the first thing a makefile does is examine the\nlast word in this variable, it will be the name of the current makefile.\nOnce the current makefile has used `include', however, the last word\nwill be the just-included makefile.\n\n   If a makefile named `Makefile' has this content:\n\n     name1 := $(lastword $(MAKEFILE_LIST))\n\n     include inc.mk\n\n     name2 := $(lastword $(MAKEFILE_LIST))\n\n     all:\n             @echo name1 = $(name1)\n             @echo name2 = $(name2)\n\nthen you would expect to see this output:\n\n     name1 = Makefile\n     name2 = inc.mk\n\n   *Note Text Functions::, for more information on the `word' and\n`words' functions used above.  *Note The Two Flavors of Variables:\nFlavors, for more information on simply-expanded (`:=') variable\ndefinitions.\n\n\u001f\nFile: make.info,  Node: Special Variables,  Next: Remaking Makefiles,  Prev: MAKEFILE_LIST Variable,  Up: Makefiles\n\n3.6 Other Special Variables\n===========================\n\nGNU `make' also supports other special variables.  Unless otherwise\ndocumented here, these values lose their special properties if they are\nset by a makefile or on the command line.\n\n`.DEFAULT_GOAL'\n     Sets the default goal to be used if no targets were specified on\n     the command line (*note Arguments to Specify the Goals: Goals.).\n     The `.DEFAULT_GOAL' variable allows you to discover the current\n     default goal, restart the default goal selection algorithm by\n     clearing its value, or to explicitly set the default goal.  The\n     following example illustrates these cases:\n\n          # Query the default goal.\n          ifeq ($(.DEFAULT_GOAL),)\n            $(warning no default goal is set)\n          endif\n\n          .PHONY: foo\n          foo: ; @echo $@\n\n          $(warning default goal is $(.DEFAULT_GOAL))\n\n          # Reset the default goal.\n          .DEFAULT_GOAL :=\n\n          .PHONY: bar\n          bar: ; @echo $@\n\n          $(warning default goal is $(.DEFAULT_GOAL))\n\n          # Set our own.\n          .DEFAULT_GOAL := foo\n\n     This makefile prints:\n\n          no default goal is set\n          default goal is foo\n          default goal is bar\n          foo\n\n     Note that assigning more than one target name to `.DEFAULT_GOAL' is\n     illegal and will result in an error.\n\n`MAKE_RESTARTS'\n     This variable is set only if this instance of `make' has restarted\n     (*note How Makefiles Are Remade: Remaking Makefiles.): it will\n     contain the number of times this instance has restarted.  Note\n     this is not the same as recursion (counted by the `MAKELEVEL'\n     variable).  You should not set, modify, or export this variable.\n\n`.VARIABLES'\n     Expands to a list of the _names_ of all global variables defined\n     so far.  This includes variables which have empty values, as well\n     as built-in variables (*note Variables Used by Implicit Rules:\n     Implicit Variables.), but does not include any variables which are\n     only defined in a target-specific context.  Note that any value\n     you assign to this variable will be ignored; it will always return\n     its special value.\n\n`.FEATURES'\n     Expands to a list of special features supported by this version of\n     `make'.  Possible values include:\n\n    `archives'\n          Supports `ar' (archive) files using special filename syntax.\n          *Note Using `make' to Update Archive Files: Archives.\n\n    `check-symlink'\n          Supports the `-L' (`--check-symlink-times') flag.  *Note\n          Summary of Options: Options Summary.\n\n    `else-if'\n          Supports \"else if\" non-nested conditionals.  *Note Syntax of\n          Conditionals: Conditional Syntax.\n\n    `jobserver'\n          Supports \"job server\" enhanced parallel builds.  *Note\n          Parallel Execution: Parallel.\n\n    `second-expansion'\n          Supports secondary expansion of prerequisite lists.\n\n    `order-only'\n          Supports order-only prerequisites.  *Note Types of\n          Prerequisites: Prerequisite Types.\n\n    `target-specific'\n          Supports target-specific and pattern-specific variable\n          assignments.  *Note Target-specific Variable Values:\n          Target-specific.\n\n\n`.INCLUDE_DIRS'\n     Expands to a list of directories that `make' searches for included\n     makefiles (*note Including Other Makefiles: Include.).\n\n\n\u001f\nFile: make.info,  Node: Remaking Makefiles,  Next: Overriding Makefiles,  Prev: Special Variables,  Up: Makefiles\n\n3.7 How Makefiles Are Remade\n============================\n\nSometimes makefiles can be remade from other files, such as RCS or SCCS\nfiles.  If a makefile can be remade from other files, you probably want\n`make' to get an up-to-date version of the makefile to read in.\n\n   To this end, after reading in all makefiles, `make' will consider\neach as a goal target and attempt to update it.  If a makefile has a\nrule which says how to update it (found either in that very makefile or\nin another one) or if an implicit rule applies to it (*note Using\nImplicit Rules: Implicit Rules.), it will be updated if necessary.\nAfter all makefiles have been checked, if any have actually been\nchanged, `make' starts with a clean slate and reads all the makefiles\nover again.  (It will also attempt to update each of them over again,\nbut normally this will not change them again, since they are already up\nto date.)\n\n   If you know that one or more of your makefiles cannot be remade and\nyou want to keep `make' from performing an implicit rule search on\nthem, perhaps for efficiency reasons, you can use any normal method of\npreventing implicit rule lookup to do so.  For example, you can write an\nexplicit rule with the makefile as the target, and an empty command\nstring (*note Using Empty Commands: Empty Commands.).\n\n   If the makefiles specify a double-colon rule to remake a file with\ncommands but no prerequisites, that file will always be remade (*note\nDouble-Colon::).  In the case of makefiles, a makefile that has a\ndouble-colon rule with commands but no prerequisites will be remade\nevery time `make' is run, and then again after `make' starts over and\nreads the makefiles in again.  This would cause an infinite loop:\n`make' would constantly remake the makefile, and never do anything\nelse.  So, to avoid this, `make' will *not* attempt to remake makefiles\nwhich are specified as targets of a double-colon rule with commands but\nno prerequisites.\n\n   If you do not specify any makefiles to be read with `-f' or `--file'\noptions, `make' will try the default makefile names; *note What Name to\nGive Your Makefile: Makefile Names.  Unlike makefiles explicitly\nrequested with `-f' or `--file' options, `make' is not certain that\nthese makefiles should exist.  However, if a default makefile does not\nexist but can be created by running `make' rules, you probably want the\nrules to be run so that the makefile can be used.\n\n   Therefore, if none of the default makefiles exists, `make' will try\nto make each of them in the same order in which they are searched for\n(*note What Name to Give Your Makefile: Makefile Names.)  until it\nsucceeds in making one, or it runs out of names to try.  Note that it\nis not an error if `make' cannot find or make any makefile; a makefile\nis not always necessary.\n\n   When you use the `-t' or `--touch' option (*note Instead of\nExecuting the Commands: Instead of Execution.), you would not want to\nuse an out-of-date makefile to decide which targets to touch.  So the\n`-t' option has no effect on updating makefiles; they are really\nupdated even if `-t' is specified.  Likewise, `-q' (or `--question')\nand `-n' (or `--just-print') do not prevent updating of makefiles,\nbecause an out-of-date makefile would result in the wrong output for\nother targets.  Thus, `make -f mfile -n foo' will update `mfile', read\nit in, and then print the commands to update `foo' and its prerequisites\nwithout running them.  The commands printed for `foo' will be those\nspecified in the updated contents of `mfile'.\n\n   However, on occasion you might actually wish to prevent updating of\neven the makefiles.  You can do this by specifying the makefiles as\ngoals in the command line as well as specifying them as makefiles.\nWhen the makefile name is specified explicitly as a goal, the options\n`-t' and so on do apply to them.\n\n   Thus, `make -f mfile -n mfile foo' would read the makefile `mfile',\nprint the commands needed to update it without actually running them,\nand then print the commands needed to update `foo' without running\nthem.  The commands for `foo' will be those specified by the existing\ncontents of `mfile'.\n\n\u001f\nFile: make.info,  Node: Overriding Makefiles,  Next: Reading Makefiles,  Prev: Remaking Makefiles,  Up: Makefiles\n\n3.8 Overriding Part of Another Makefile\n=======================================\n\nSometimes it is useful to have a makefile that is mostly just like\nanother makefile.  You can often use the `include' directive to include\none in the other, and add more targets or variable definitions.\nHowever, if the two makefiles give different commands for the same\ntarget, `make' will not let you just do this.  But there is another way.\n\n   In the containing makefile (the one that wants to include the other),\nyou can use a match-anything pattern rule to say that to remake any\ntarget that cannot be made from the information in the containing\nmakefile, `make' should look in another makefile.  *Note Pattern\nRules::, for more information on pattern rules.\n\n   For example, if you have a makefile called `Makefile' that says how\nto make the target `foo' (and other targets), you can write a makefile\ncalled `GNUmakefile' that contains:\n\n     foo:\n             frobnicate > foo\n\n     %: force\n             @$(MAKE) -f Makefile $@\n     force: ;\n\n   If you say `make foo', `make' will find `GNUmakefile', read it, and\nsee that to make `foo', it needs to run the command `frobnicate > foo'.\nIf you say `make bar', `make' will find no way to make `bar' in\n`GNUmakefile', so it will use the commands from the pattern rule: `make\n-f Makefile bar'.  If `Makefile' provides a rule for updating `bar',\n`make' will apply the rule.  And likewise for any other target that\n`GNUmakefile' does not say how to make.\n\n   The way this works is that the pattern rule has a pattern of just\n`%', so it matches any target whatever.  The rule specifies a\nprerequisite `force', to guarantee that the commands will be run even\nif the target file already exists.  We give `force' target empty\ncommands to prevent `make' from searching for an implicit rule to build\nit--otherwise it would apply the same match-anything rule to `force'\nitself and create a prerequisite loop!\n\n\u001f\nFile: make.info,  Node: Reading Makefiles,  Next: Secondary Expansion,  Prev: Overriding Makefiles,  Up: Makefiles\n\n3.9 How `make' Reads a Makefile\n===============================\n\nGNU `make' does its work in two distinct phases.  During the first\nphase it reads all the makefiles, included makefiles, etc. and\ninternalizes all the variables and their values, implicit and explicit\nrules, and constructs a dependency graph of all the targets and their\nprerequisites.  During the second phase, `make' uses these internal\nstructures to determine what targets will need to be rebuilt and to\ninvoke the rules necessary to do so.\n\n   It's important to understand this two-phase approach because it has a\ndirect impact on how variable and function expansion happens; this is\noften a source of some confusion when writing makefiles.  Here we will\npresent a summary of the phases in which expansion happens for different\nconstructs within the makefile.  We say that expansion is \"immediate\"\nif it happens during the first phase: in this case `make' will expand\nany variables or functions in that section of a construct as the\nmakefile is parsed.  We say that expansion is \"deferred\" if expansion\nis not performed immediately.  Expansion of deferred construct is not\nperformed until either the construct appears later in an immediate\ncontext, or until the second phase.\n\n   You may not be familiar with some of these constructs yet.  You can\nreference this section as you become familiar with them, in later\nchapters.\n\nVariable Assignment\n-------------------\n\nVariable definitions are parsed as follows:\n\n     IMMEDIATE = DEFERRED\n     IMMEDIATE ?= DEFERRED\n     IMMEDIATE := IMMEDIATE\n     IMMEDIATE += DEFERRED or IMMEDIATE\n\n     define IMMEDIATE\n       DEFERRED\n     endef\n\n   For the append operator, `+=', the right-hand side is considered\nimmediate if the variable was previously set as a simple variable\n(`:='), and deferred otherwise.\n\nConditional Statements\n----------------------\n\nAll instances of conditional syntax are parsed immediately, in their\nentirety; this includes the `ifdef', `ifeq', `ifndef', and `ifneq'\nforms.  Of course this means that automatic variables cannot be used in\nconditional statements, as automatic variables are not set until the\ncommand script for that rule is invoked.  If you need to use automatic\nvariables in a conditional you _must_ use shell conditional syntax, in\nyour command script proper, for these tests, not `make' conditionals.\n\nRule Definition\n---------------\n\nA rule is always expanded the same way, regardless of the form:\n\n     IMMEDIATE : IMMEDIATE ; DEFERRED\n     \tDEFERRED\n\n   That is, the target and prerequisite sections are expanded\nimmediately, and the commands used to construct the target are always\ndeferred.  This general rule is true for explicit rules, pattern rules,\nsuffix rules, static pattern rules, and simple prerequisite definitions.\n\n\u001f\nFile: make.info,  Node: Secondary Expansion,  Prev: Reading Makefiles,  Up: Makefiles\n\n3.10 Secondary Expansion\n========================\n\nIn the previous section we learned that GNU `make' works in two\ndistinct phases: a read-in phase and a target-update phase (*note How\n`make' Reads a Makefile: Reading Makefiles.).  GNU make also has the\nability to enable a _second expansion_ of the prerequisites (only) for\nsome or all targets defined in the makefile.  In order for this second\nexpansion to occur, the special target `.SECONDEXPANSION' must be\ndefined before the first prerequisite list that makes use of this\nfeature.\n\n   If that special target is defined then in between the two phases\nmentioned above, right at the end of the read-in phase, all the\nprerequisites of the targets defined after the special target are\nexpanded a _second time_.  In most circumstances this secondary\nexpansion will have no effect, since all variable and function\nreferences will have been expanded during the initial parsing of the\nmakefiles.  In order to take advantage of the secondary expansion phase\nof the parser, then, it's necessary to _escape_ the variable or\nfunction reference in the makefile.  In this case the first expansion\nmerely un-escapes the reference but doesn't expand it, and expansion is\nleft to the secondary expansion phase.  For example, consider this\nmakefile:\n\n     .SECONDEXPANSION:\n     ONEVAR = onefile\n     TWOVAR = twofile\n     myfile: $(ONEVAR) $$(TWOVAR)\n\n   After the first expansion phase the prerequisites list of the\n`myfile' target will be `onefile' and `$(TWOVAR)'; the first\n(unescaped) variable reference to ONEVAR is expanded, while the second\n(escaped) variable reference is simply unescaped, without being\nrecognized as a variable reference.  Now during the secondary expansion\nthe first word is expanded again but since it contains no variable or\nfunction references it remains the static value `onefile', while the\nsecond word is now a normal reference to the variable TWOVAR, which is\nexpanded to the value `twofile'.  The final result is that there are\ntwo prerequisites, `onefile' and `twofile'.\n\n   Obviously, this is not a very interesting case since the same result\ncould more easily have been achieved simply by having both variables\nappear, unescaped, in the prerequisites list.  One difference becomes\napparent if the variables are reset; consider this example:\n\n     .SECONDEXPANSION:\n     AVAR = top\n     onefile: $(AVAR)\n     twofile: $$(AVAR)\n     AVAR = bottom\n\n   Here the prerequisite of `onefile' will be expanded immediately, and\nresolve to the value `top', while the prerequisite of `twofile' will\nnot be full expanded until the secondary expansion and yield a value of\n`bottom'.\n\n   This is marginally more exciting, but the true power of this feature\nonly becomes apparent when you discover that secondary expansions\nalways take place within the scope of the automatic variables for that\ntarget.  This means that you can use variables such as `$@', `$*', etc.\nduring the second expansion and they will have their expected values,\njust as in the command script.  All you have to do is defer the\nexpansion by escaping the `$'.  Also, secondary expansion occurs for\nboth explicit and implicit (pattern) rules.  Knowing this, the possible\nuses for this feature increase dramatically.  For example:\n\n     .SECONDEXPANSION:\n     main_OBJS := main.o try.o test.o\n     lib_OBJS := lib.o api.o\n\n     main lib: $$($$@_OBJS)\n\n   Here, after the initial expansion the prerequisites of both the\n`main' and `lib' targets will be `$($@_OBJS)'.  During the secondary\nexpansion, the `$@' variable is set to the name of the target and so\nthe expansion for the `main' target will yield `$(main_OBJS)', or\n`main.o try.o test.o', while the secondary expansion for the `lib'\ntarget will yield `$(lib_OBJS)', or `lib.o api.o'.\n\n   You can also mix functions here, as long as they are properly\nescaped:\n\n     main_SRCS := main.c try.c test.c\n     lib_SRCS := lib.c api.c\n\n     .SECONDEXPANSION:\n     main lib: $$(patsubst %.c,%.o,$$($$@_SRCS))\n\n   This version allows users to specify source files rather than object\nfiles, but gives the same resulting prerequisites list as the previous\nexample.\n\n   Evaluation of automatic variables during the secondary expansion\nphase, especially of the target name variable `$$@', behaves similarly\nto evaluation within command scripts.  However, there are some subtle\ndifferences and \"corner cases\" which come into play for the different\ntypes of rule definitions that `make' understands.  The subtleties of\nusing the different automatic variables are described below.\n\nSecondary Expansion of Explicit Rules\n-------------------------------------\n\nDuring the secondary expansion of explicit rules, `$$@' and `$$%'\nevaluate, respectively, to the file name of the target and, when the\ntarget is an archive member, the target member name.  The `$$<'\nvariable evaluates to the first prerequisite in the first rule for this\ntarget.  `$$^' and `$$+' evaluate to the list of all prerequisites of\nrules _that have already appeared_ for the same target (`$$+' with\nrepetitions and `$$^' without).  The following example will help\nillustrate these behaviors:\n\n     .SECONDEXPANSION:\n\n     foo: foo.1 bar.1 $$< $$^ $$+    # line #1\n\n     foo: foo.2 bar.2 $$< $$^ $$+    # line #2\n\n     foo: foo.3 bar.3 $$< $$^ $$+    # line #3\n\n   In the first prerequisite list, all three variables (`$$<', `$$^',\nand `$$+') expand to the empty string.  In the second, they will have\nvalues `foo.1', `foo.1 bar.1', and `foo.1 bar.1' respectively.  In the\nthird they will have values `foo.1', `foo.1 bar.1 foo.2 bar.2', and\n`foo.1 bar.1 foo.2 bar.2' respectively.\n\n   Rules undergo secondary expansion in makefile order, except that the\nrule with the command script is always evaluated last.\n\n   The variables `$$?' and `$$*' are not available and expand to the\nempty string.\n\nSecondary Expansion of Static Pattern Rules\n-------------------------------------------\n\nRules for secondary expansion of static pattern rules are identical to\nthose for explicit rules, above, with one exception: for static pattern\nrules the `$$*' variable is set to the pattern stem.  As with explicit\nrules, `$$?' is not available and expands to the empty string.\n\nSecondary Expansion of Implicit Rules\n-------------------------------------\n\nAs `make' searches for an implicit rule, it substitutes the stem and\nthen performs secondary expansion for every rule with a matching target\npattern.  The value of the automatic variables is derived in the same\nfashion as for static pattern rules.  As an example:\n\n     .SECONDEXPANSION:\n\n     foo: bar\n\n     foo foz: fo%: bo%\n\n     %oo: $$< $$^ $$+ $$*\n\n   When the implicit rule is tried for target `foo', `$$<' expands to\n`bar', `$$^' expands to `bar boo', `$$+' also expands to `bar boo', and\n`$$*' expands to `f'.\n\n   Note that the directory prefix (D), as described in *note Implicit\nRule Search Algorithm: Implicit Rule Search, is appended (after\nexpansion) to all the patterns in the prerequisites list.  As an\nexample:\n\n     .SECONDEXPANSION:\n\n     /tmp/foo.o:\n\n     %.o: $$(addsuffix /%.c,foo bar) foo.h\n\n   The prerequisite list after the secondary expansion and directory\nprefix reconstruction will be `/tmp/foo/foo.c /tmp/var/bar/foo.c\nfoo.h'.  If you are not interested in this reconstruction, you can use\n`$$*' instead of `%' in the prerequisites list.\n\n\u001f\nFile: make.info,  Node: Rules,  Next: Commands,  Prev: Makefiles,  Up: Top\n\n4 Writing Rules\n***************\n\nA \"rule\" appears in the makefile and says when and how to remake\ncertain files, called the rule's \"targets\" (most often only one per\nrule).  It lists the other files that are the \"prerequisites\" of the\ntarget, and \"commands\" to use to create or update the target.\n\n   The order of rules is not significant, except for determining the\n\"default goal\": the target for `make' to consider, if you do not\notherwise specify one.  The default goal is the target of the first\nrule in the first makefile.  If the first rule has multiple targets,\nonly the first target is taken as the default.  There are two\nexceptions: a target starting with a period is not a default unless it\ncontains one or more slashes, `/', as well; and, a target that defines\na pattern rule has no effect on the default goal.  (*Note Defining and\nRedefining Pattern Rules: Pattern Rules.)\n\n   Therefore, we usually write the makefile so that the first rule is\nthe one for compiling the entire program or all the programs described\nby the makefile (often with a target called `all').  *Note Arguments to\nSpecify the Goals: Goals.\n\n* Menu:\n\n* Rule Example::                An example explained.\n* Rule Syntax::                 General syntax explained.\n* Prerequisite Types::          There are two types of prerequisites.\n* Wildcards::                   Using wildcard characters such as `*'.\n* Directory Search::            Searching other directories for source files.\n* Phony Targets::               Using a target that is not a real file's name.\n* Force Targets::               You can use a target without commands\n                                  or prerequisites to mark other targets\n                                  as phony.\n* Empty Targets::               When only the date matters and the\n                                  files are empty.\n* Special Targets::             Targets with special built-in meanings.\n* Multiple Targets::            When to make use of several targets in a rule.\n* Multiple Rules::              How to use several rules with the same target.\n* Static Pattern::              Static pattern rules apply to multiple targets\n                                  and can vary the prerequisites according to\n                                  the target name.\n* Double-Colon::                How to use a special kind of rule to allow\n                                  several independent rules for one target.\n* Automatic Prerequisites::     How to automatically generate rules giving\n                                  prerequisites from source files themselves.\n\n\u001f\nFile: make.info,  Node: Rule Example,  Next: Rule Syntax,  Prev: Rules,  Up: Rules\n\n4.1 Rule Example\n================\n\nHere is an example of a rule:\n\n     foo.o : foo.c defs.h       # module for twiddling the frobs\n             cc -c -g foo.c\n\n   Its target is `foo.o' and its prerequisites are `foo.c' and\n`defs.h'.  It has one command, which is `cc -c -g foo.c'.  The command\nline starts with a tab to identify it as a command.\n\n   This rule says two things:\n\n   * How to decide whether `foo.o' is out of date: it is out of date if\n     it does not exist, or if either `foo.c' or `defs.h' is more recent\n     than it.\n\n   * How to update the file `foo.o': by running `cc' as stated.  The\n     command does not explicitly mention `defs.h', but we presume that\n     `foo.c' includes it, and that that is why `defs.h' was added to\n     the prerequisites.\n\n\u001f\nFile: make.info,  Node: Rule Syntax,  Next: Prerequisite Types,  Prev: Rule Example,  Up: Rules\n\n4.2 Rule Syntax\n===============\n\nIn general, a rule looks like this:\n\n     TARGETS : PREREQUISITES\n             COMMAND\n             ...\n\nor like this:\n\n     TARGETS : PREREQUISITES ; COMMAND\n             COMMAND\n             ...\n\n   The TARGETS are file names, separated by spaces.  Wildcard\ncharacters may be used (*note Using Wildcard Characters in File Names:\nWildcards.) and a name of the form `A(M)' represents member M in\narchive file A (*note Archive Members as Targets: Archive Members.).\nUsually there is only one target per rule, but occasionally there is a\nreason to have more (*note Multiple Targets in a Rule: Multiple\nTargets.).\n\n   The COMMAND lines start with a tab character.  The first command may\nappear on the line after the prerequisites, with a tab character, or may\nappear on the same line, with a semicolon.  Either way, the effect is\nthe same.  There are other differences in the syntax of command lines.\n*Note Writing the Commands in Rules: Commands.\n\n   Because dollar signs are used to start `make' variable references,\nif you really want a dollar sign in a target or prerequisite you must\nwrite two of them, `$$' (*note How to Use Variables: Using Variables.).\nIf you have enabled secondary expansion (*note Secondary Expansion::)\nand you want a literal dollar sign in the prerequisites lise, you must\nactually write _four_ dollar signs (`$$$$').\n\n   You may split a long line by inserting a backslash followed by a\nnewline, but this is not required, as `make' places no limit on the\nlength of a line in a makefile.\n\n   A rule tells `make' two things: when the targets are out of date,\nand how to update them when necessary.\n\n   The criterion for being out of date is specified in terms of the\nPREREQUISITES, which consist of file names separated by spaces.\n(Wildcards and archive members (*note Archives::) are allowed here too.)\nA target is out of date if it does not exist or if it is older than any\nof the prerequisites (by comparison of last-modification times).  The\nidea is that the contents of the target file are computed based on\ninformation in the prerequisites, so if any of the prerequisites\nchanges, the contents of the existing target file are no longer\nnecessarily valid.\n\n   How to update is specified by COMMANDS.  These are lines to be\nexecuted by the shell (normally `sh'), but with some extra features\n(*note Writing the Commands in Rules: Commands.).\n\n\u001f\nFile: make.info,  Node: Prerequisite Types,  Next: Wildcards,  Prev: Rule Syntax,  Up: Rules\n\n4.3 Types of Prerequisites\n==========================\n\nThere are actually two different types of prerequisites understood by\nGNU `make': normal prerequisites such as described in the previous\nsection, and \"order-only\" prerequisites.  A normal prerequisite makes\ntwo statements: first, it imposes an order of execution of build\ncommands: any commands necessary to build any of a target's\nprerequisites will be fully executed before any commands necessary to\nbuild the target.  Second, it imposes a dependency relationship: if any\nprerequisite is newer than the target, then the target is considered\nout-of-date and must be rebuilt.\n\n   Normally, this is exactly what you want: if a target's prerequisite\nis updated, then the target should also be updated.\n\n   Occasionally, however, you have a situation where you want to impose\na specific ordering on the rules to be invoked _without_ forcing the\ntarget to be updated if one of those rules is executed.  In that case,\nyou want to define \"order-only\" prerequisites.  Order-only\nprerequisites can be specified by placing a pipe symbol (`|') in the\nprerequisites list: any prerequisites to the left of the pipe symbol\nare normal; any prerequisites to the right are order-only:\n\n     TARGETS : NORMAL-PREREQUISITES | ORDER-ONLY-PREREQUISITES\n\n   The normal prerequisites section may of course be empty.  Also, you\nmay still declare multiple lines of prerequisites for the same target:\nthey are appended appropriately.  Note that if you declare the same\nfile to be both a normal and an order-only prerequisite, the normal\nprerequisite takes precedence (since they are a strict superset of the\nbehavior of an order-only prerequisite).\n\n\u001f\nFile: make.info,  Node: Wildcards,  Next: Directory Search,  Prev: Prerequisite Types,  Up: Rules\n\n4.4 Using Wildcard Characters in File Names\n===========================================\n\nA single file name can specify many files using \"wildcard characters\".\nThe wildcard characters in `make' are `*', `?' and `[...]', the same as\nin the Bourne shell.  For example, `*.c' specifies a list of all the\nfiles (in the working directory) whose names end in `.c'.\n\n   The character `~' at the beginning of a file name also has special\nsignificance.  If alone, or followed by a slash, it represents your home\ndirectory.  For example `~/bin' expands to `/home/you/bin'.  If the `~'\nis followed by a word, the string represents the home directory of the\nuser named by that word.  For example `~john/bin' expands to\n`/home/john/bin'.  On systems which don't have a home directory for\neach user (such as MS-DOS or MS-Windows), this functionality can be\nsimulated by setting the environment variable HOME.\n\n   Wildcard expansion is performed by `make' automatically in targets\nand in prerequisites.  In commands the shell is responsible for\nwildcard expansion.  In other contexts, wildcard expansion happens only\nif you request it explicitly with the `wildcard' function.\n\n   The special significance of a wildcard character can be turned off by\npreceding it with a backslash.  Thus, `foo\\*bar' would refer to a\nspecific file whose name consists of `foo', an asterisk, and `bar'.\n\n* Menu:\n\n* Wildcard Examples::           Several examples\n* Wildcard Pitfall::            Problems to avoid.\n* Wildcard Function::           How to cause wildcard expansion where\n                                  it does not normally take place.\n\n\u001f\nFile: make.info,  Node: Wildcard Examples,  Next: Wildcard Pitfall,  Prev: Wildcards,  Up: Wildcards\n\n4.4.1 Wildcard Examples\n-----------------------\n\nWildcards can be used in the commands of a rule, where they are expanded\nby the shell.  For example, here is a rule to delete all the object\nfiles:\n\n     clean:\n             rm -f *.o\n\n   Wildcards are also useful in the prerequisites of a rule.  With the\nfollowing rule in the makefile, `make print' will print all the `.c'\nfiles that have changed since the last time you printed them:\n\n     print: *.c\n             lpr -p $?\n             touch print\n\nThis rule uses `print' as an empty target file; see *note Empty Target\nFiles to Record Events: Empty Targets.  (The automatic variable `$?' is\nused to print only those files that have changed; see *note Automatic\nVariables::.)\n\n   Wildcard expansion does not happen when you define a variable.\nThus, if you write this:\n\n     objects = *.o\n\nthen the value of the variable `objects' is the actual string `*.o'.\nHowever, if you use the value of `objects' in a target, prerequisite or\ncommand, wildcard expansion will take place at that time.  To set\n`objects' to the expansion, instead use:\n\n     objects := $(wildcard *.o)\n\n*Note Wildcard Function::.\n\n\u001f\nFile: make.info,  Node: Wildcard Pitfall,  Next: Wildcard Function,  Prev: Wildcard Examples,  Up: Wildcards\n\n4.4.2 Pitfalls of Using Wildcards\n---------------------------------\n\nNow here is an example of a naive way of using wildcard expansion, that\ndoes not do what you would intend.  Suppose you would like to say that\nthe executable file `foo' is made from all the object files in the\ndirectory, and you write this:\n\n     objects = *.o\n\n     foo : $(objects)\n             cc -o foo $(CFLAGS) $(objects)\n\nThe value of `objects' is the actual string `*.o'.  Wildcard expansion\nhappens in the rule for `foo', so that each _existing_ `.o' file\nbecomes a prerequisite of `foo' and will be recompiled if necessary.\n\n   But what if you delete all the `.o' files?  When a wildcard matches\nno files, it is left as it is, so then `foo' will depend on the\noddly-named file `*.o'.  Since no such file is likely to exist, `make'\nwill give you an error saying it cannot figure out how to make `*.o'.\nThis is not what you want!\n\n   Actually it is possible to obtain the desired result with wildcard\nexpansion, but you need more sophisticated techniques, including the\n`wildcard' function and string substitution.  *Note The Function\n`wildcard': Wildcard Function.\n\n   Microsoft operating systems (MS-DOS and MS-Windows) use backslashes\nto separate directories in pathnames, like so:\n\n       c:\\foo\\bar\\baz.c\n\n   This is equivalent to the Unix-style `c:/foo/bar/baz.c' (the `c:'\npart is the so-called drive letter).  When `make' runs on these\nsystems, it supports backslashes as well as the Unix-style forward\nslashes in pathnames.  However, this support does _not_ include the\nwildcard expansion, where backslash is a quote character.  Therefore,\nyou _must_ use Unix-style slashes in these cases.\n\n\u001f\nFile: make.info,  Node: Wildcard Function,  Prev: Wildcard Pitfall,  Up: Wildcards\n\n4.4.3 The Function `wildcard'\n-----------------------------\n\nWildcard expansion happens automatically in rules.  But wildcard\nexpansion does not normally take place when a variable is set, or\ninside the arguments of a function.  If you want to do wildcard\nexpansion in such places, you need to use the `wildcard' function, like\nthis:\n\n     $(wildcard PATTERN...)\n\nThis string, used anywhere in a makefile, is replaced by a\nspace-separated list of names of existing files that match one of the\ngiven file name patterns.  If no existing file name matches a pattern,\nthen that pattern is omitted from the output of the `wildcard'\nfunction.  Note that this is different from how unmatched wildcards\nbehave in rules, where they are used verbatim rather than ignored\n(*note Wildcard Pitfall::).\n\n   One use of the `wildcard' function is to get a list of all the C\nsource files in a directory, like this:\n\n     $(wildcard *.c)\n\n   We can change the list of C source files into a list of object files\nby replacing the `.c' suffix with `.o' in the result, like this:\n\n     $(patsubst %.c,%.o,$(wildcard *.c))\n\n(Here we have used another function, `patsubst'.  *Note Functions for\nString Substitution and Analysis: Text Functions.)\n\n   Thus, a makefile to compile all C source files in the directory and\nthen link them together could be written as follows:\n\n     objects := $(patsubst %.c,%.o,$(wildcard *.c))\n\n     foo : $(objects)\n             cc -o foo $(objects)\n\n(This takes advantage of the implicit rule for compiling C programs, so\nthere is no need to write explicit rules for compiling the files.\n*Note The Two Flavors of Variables: Flavors, for an explanation of\n`:=', which is a variant of `='.)\n\n\u001f\nFile: make.info,  Node: Directory Search,  Next: Phony Targets,  Prev: Wildcards,  Up: Rules\n\n4.5 Searching Directories for Prerequisites\n===========================================\n\nFor large systems, it is often desirable to put sources in a separate\ndirectory from the binaries.  The \"directory search\" features of `make'\nfacilitate this by searching several directories automatically to find\na prerequisite.  When you redistribute the files among directories, you\ndo not need to change the individual rules, just the search paths.\n\n* Menu:\n\n* General Search::              Specifying a search path that applies\n                                  to every prerequisite.\n* Selective Search::            Specifying a search path\n                                  for a specified class of names.\n* Search Algorithm::            When and how search paths are applied.\n* Commands/Search::             How to write shell commands that work together\n                                  with search paths.\n* Implicit/Search::             How search paths affect implicit rules.\n* Libraries/Search::            Directory search for link libraries.\n\n\u001f\nFile: make.info,  Node: General Search,  Next: Selective Search,  Prev: Directory Search,  Up: Directory Search\n\n4.5.1 `VPATH': Search Path for All Prerequisites\n------------------------------------------------\n\nThe value of the `make' variable `VPATH' specifies a list of\ndirectories that `make' should search.  Most often, the directories are\nexpected to contain prerequisite files that are not in the current\ndirectory; however, `make' uses `VPATH' as a search list for both\nprerequisites and targets of rules.\n\n   Thus, if a file that is listed as a target or prerequisite does not\nexist in the current directory, `make' searches the directories listed\nin `VPATH' for a file with that name.  If a file is found in one of\nthem, that file may become the prerequisite (see below).  Rules may then\nspecify the names of files in the prerequisite list as if they all\nexisted in the current directory.  *Note Writing Shell Commands with\nDirectory Search: Commands/Search.\n\n   In the `VPATH' variable, directory names are separated by colons or\nblanks.  The order in which directories are listed is the order followed\nby `make' in its search.  (On MS-DOS and MS-Windows, semi-colons are\nused as separators of directory names in `VPATH', since the colon can\nbe used in the pathname itself, after the drive letter.)\n\n   For example,\n\n     VPATH = src:../headers\n\nspecifies a path containing two directories, `src' and `../headers',\nwhich `make' searches in that order.\n\n   With this value of `VPATH', the following rule,\n\n     foo.o : foo.c\n\nis interpreted as if it were written like this:\n\n     foo.o : src/foo.c\n\nassuming the file `foo.c' does not exist in the current directory but\nis found in the directory `src'.\n\n\u001f\nFile: make.info,  Node: Selective Search,  Next: Search Algorithm,  Prev: General Search,  Up: Directory Search\n\n4.5.2 The `vpath' Directive\n---------------------------\n\nSimilar to the `VPATH' variable, but more selective, is the `vpath'\ndirective (note lower case), which allows you to specify a search path\nfor a particular class of file names: those that match a particular\npattern.  Thus you can supply certain search directories for one class\nof file names and other directories (or none) for other file names.\n\n   There are three forms of the `vpath' directive:\n\n`vpath PATTERN DIRECTORIES'\n     Specify the search path DIRECTORIES for file names that match\n     PATTERN.\n\n     The search path, DIRECTORIES, is a list of directories to be\n     searched, separated by colons (semi-colons on MS-DOS and\n     MS-Windows) or blanks, just like the search path used in the\n     `VPATH' variable.\n\n`vpath PATTERN'\n     Clear out the search path associated with PATTERN.\n\n`vpath'\n     Clear all search paths previously specified with `vpath'\n     directives.\n\n   A `vpath' pattern is a string containing a `%' character.  The\nstring must match the file name of a prerequisite that is being searched\nfor, the `%' character matching any sequence of zero or more characters\n(as in pattern rules; *note Defining and Redefining Pattern Rules:\nPattern Rules.).  For example, `%.h' matches files that end in `.h'.\n(If there is no `%', the pattern must match the prerequisite exactly,\nwhich is not useful very often.)\n\n   `%' characters in a `vpath' directive's pattern can be quoted with\npreceding backslashes (`\\').  Backslashes that would otherwise quote\n`%' characters can be quoted with more backslashes.  Backslashes that\nquote `%' characters or other backslashes are removed from the pattern\nbefore it is compared to file names.  Backslashes that are not in\ndanger of quoting `%' characters go unmolested.\n\n   When a prerequisite fails to exist in the current directory, if the\nPATTERN in a `vpath' directive matches the name of the prerequisite\nfile, then the DIRECTORIES in that directive are searched just like\n(and before) the directories in the `VPATH' variable.\n\n   For example,\n\n     vpath %.h ../headers\n\ntells `make' to look for any prerequisite whose name ends in `.h' in\nthe directory `../headers' if the file is not found in the current\ndirectory.\n\n   If several `vpath' patterns match the prerequisite file's name, then\n`make' processes each matching `vpath' directive one by one, searching\nall the directories mentioned in each directive.  `make' handles\nmultiple `vpath' directives in the order in which they appear in the\nmakefile; multiple directives with the same pattern are independent of\neach other.\n\n   Thus,\n\n     vpath %.c foo\n     vpath %   blish\n     vpath %.c bar\n\nwill look for a file ending in `.c' in `foo', then `blish', then `bar',\nwhile\n\n     vpath %.c foo:bar\n     vpath %   blish\n\nwill look for a file ending in `.c' in `foo', then `bar', then `blish'.\n\n\u001f\nFile: make.info,  Node: Search Algorithm,  Next: Commands/Search,  Prev: Selective Search,  Up: Directory Search\n\n4.5.3 How Directory Searches are Performed\n------------------------------------------\n\nWhen a prerequisite is found through directory search, regardless of\ntype (general or selective), the pathname located may not be the one\nthat `make' actually provides you in the prerequisite list.  Sometimes\nthe path discovered through directory search is thrown away.\n\n   The algorithm `make' uses to decide whether to keep or abandon a\npath found via directory search is as follows:\n\n  1. If a target file does not exist at the path specified in the\n     makefile, directory search is performed.\n\n  2. If the directory search is successful, that path is kept and this\n     file is tentatively stored as the target.\n\n  3. All prerequisites of this target are examined using this same\n     method.\n\n  4. After processing the prerequisites, the target may or may not need\n     to be rebuilt:\n\n       a. If the target does _not_ need to be rebuilt, the path to the\n          file found during directory search is used for any\n          prerequisite lists which contain this target.  In short, if\n          `make' doesn't need to rebuild the target then you use the\n          path found via directory search.\n\n       b. If the target _does_ need to be rebuilt (is out-of-date), the\n          pathname found during directory search is _thrown away_, and\n          the target is rebuilt using the file name specified in the\n          makefile.  In short, if `make' must rebuild, then the target\n          is rebuilt locally, not in the directory found via directory\n          search.\n\n   This algorithm may seem complex, but in practice it is quite often\nexactly what you want.\n\n   Other versions of `make' use a simpler algorithm: if the file does\nnot exist, and it is found via directory search, then that pathname is\nalways used whether or not the target needs to be built.  Thus, if the\ntarget is rebuilt it is created at the pathname discovered during\ndirectory search.\n\n   If, in fact, this is the behavior you want for some or all of your\ndirectories, you can use the `GPATH' variable to indicate this to\n`make'.\n\n   `GPATH' has the same syntax and format as `VPATH' (that is, a space-\nor colon-delimited list of pathnames).  If an out-of-date target is\nfound by directory search in a directory that also appears in `GPATH',\nthen that pathname is not thrown away.  The target is rebuilt using the\nexpanded path.\n\n\u001f\nFile: make.info,  Node: Commands/Search,  Next: Implicit/Search,  Prev: Search Algorithm,  Up: Directory Search\n\n4.5.4 Writing Shell Commands with Directory Search\n--------------------------------------------------\n\nWhen a prerequisite is found in another directory through directory\nsearch, this cannot change the commands of the rule; they will execute\nas written.  Therefore, you must write the commands with care so that\nthey will look for the prerequisite in the directory where `make' finds\nit.\n\n   This is done with the \"automatic variables\" such as `$^' (*note\nAutomatic Variables::).  For instance, the value of `$^' is a list of\nall the prerequisites of the rule, including the names of the\ndirectories in which they were found, and the value of `$@' is the\ntarget.  Thus:\n\n     foo.o : foo.c\n             cc -c $(CFLAGS) $^ -o $@\n\n(The variable `CFLAGS' exists so you can specify flags for C\ncompilation by implicit rules; we use it here for consistency so it will\naffect all C compilations uniformly; *note Variables Used by Implicit\nRules: Implicit Variables.)\n\n   Often the prerequisites include header files as well, which you do\nnot want to mention in the commands.  The automatic variable `$<' is\njust the first prerequisite:\n\n     VPATH = src:../headers\n     foo.o : foo.c defs.h hack.h\n             cc -c $(CFLAGS) $< -o $@\n\n\u001f\nFile: make.info,  Node: Implicit/Search,  Next: Libraries/Search,  Prev: Commands/Search,  Up: Directory Search\n\n4.5.5 Directory Search and Implicit Rules\n-----------------------------------------\n\nThe search through the directories specified in `VPATH' or with `vpath'\nalso happens during consideration of implicit rules (*note Using\nImplicit Rules: Implicit Rules.).\n\n   For example, when a file `foo.o' has no explicit rule, `make'\nconsiders implicit rules, such as the built-in rule to compile `foo.c'\nif that file exists.  If such a file is lacking in the current\ndirectory, the appropriate directories are searched for it.  If `foo.c'\nexists (or is mentioned in the makefile) in any of the directories, the\nimplicit rule for C compilation is applied.\n\n   The commands of implicit rules normally use automatic variables as a\nmatter of necessity; consequently they will use the file names found by\ndirectory search with no extra effort.\n\n\u001f\nFile: make.info,  Node: Libraries/Search,  Prev: Implicit/Search,  Up: Directory Search\n\n4.5.6 Directory Search for Link Libraries\n-----------------------------------------\n\nDirectory search applies in a special way to libraries used with the\nlinker.  This special feature comes into play when you write a\nprerequisite whose name is of the form `-lNAME'.  (You can tell\nsomething strange is going on here because the prerequisite is normally\nthe name of a file, and the _file name_ of a library generally looks\nlike `libNAME.a', not like `-lNAME'.)\n\n   When a prerequisite's name has the form `-lNAME', `make' handles it\nspecially by searching for the file `libNAME.so' in the current\ndirectory, in directories specified by matching `vpath' search paths\nand the `VPATH' search path, and then in the directories `/lib',\n`/usr/lib', and `PREFIX/lib' (normally `/usr/local/lib', but\nMS-DOS/MS-Windows versions of `make' behave as if PREFIX is defined to\nbe the root of the DJGPP installation tree).\n\n   If that file is not found, then the file `libNAME.a' is searched\nfor, in the same directories as above.\n\n   For example, if there is a `/usr/lib/libcurses.a' library on your\nsystem (and no `/usr/lib/libcurses.so' file), then\n\n     foo : foo.c -lcurses\n             cc $^ -o $@\n\nwould cause the command `cc foo.c /usr/lib/libcurses.a -o foo' to be\nexecuted when `foo' is older than `foo.c' or than\n`/usr/lib/libcurses.a'.\n\n   Although the default set of files to be searched for is `libNAME.so'\nand `libNAME.a', this is customizable via the `.LIBPATTERNS' variable.\nEach word in the value of this variable is a pattern string.  When a\nprerequisite like `-lNAME' is seen, `make' will replace the percent in\neach pattern in the list with NAME and perform the above directory\nsearches using that library filename.  If no library is found, the next\nword in the list will be used.\n\n   The default value for `.LIBPATTERNS' is `lib%.so lib%.a', which\nprovides the default behavior described above.\n\n   You can turn off link library expansion completely by setting this\nvariable to an empty value.\n\n\u001f\nFile: make.info,  Node: Phony Targets,  Next: Force Targets,  Prev: Directory Search,  Up: Rules\n\n4.6 Phony Targets\n=================\n\nA phony target is one that is not really the name of a file.  It is\njust a name for some commands to be executed when you make an explicit\nrequest.  There are two reasons to use a phony target: to avoid a\nconflict with a file of the same name, and to improve performance.\n\n   If you write a rule whose commands will not create the target file,\nthe commands will be executed every time the target comes up for\nremaking.  Here is an example:\n\n     clean:\n             rm *.o temp\n\nBecause the `rm' command does not create a file named `clean', probably\nno such file will ever exist.  Therefore, the `rm' command will be\nexecuted every time you say `make clean'.  \n\n   The phony target will cease to work if anything ever does create a\nfile named `clean' in this directory.  Since it has no prerequisites,\nthe file `clean' would inevitably be considered up to date, and its\ncommands would not be executed.  To avoid this problem, you can\nexplicitly declare the target to be phony, using the special target\n`.PHONY' (*note Special Built-in Target Names: Special Targets.) as\nfollows:\n\n     .PHONY : clean\n\nOnce this is done, `make clean' will run the commands regardless of\nwhether there is a file named `clean'.\n\n   Since it knows that phony targets do not name actual files that\ncould be remade from other files, `make' skips the implicit rule search\nfor phony targets (*note Implicit Rules::).  This is why declaring a\ntarget phony is good for performance, even if you are not worried about\nthe actual file existing.\n\n   Thus, you first write the line that states that `clean' is a phony\ntarget, then you write the rule, like this:\n\n     .PHONY: clean\n     clean:\n             rm *.o temp\n\n   Another example of the usefulness of phony targets is in conjunction\nwith recursive invocations of `make' (for more information, see *note\nRecursive Use of `make': Recursion.).  In this case the makefile will\noften contain a variable which lists a number of subdirectories to be\nbuilt.  One way to handle this is with one rule whose command is a\nshell loop over the subdirectories, like this:\n\n     SUBDIRS = foo bar baz\n\n     subdirs:\n             for dir in $(SUBDIRS); do \\\n               $(MAKE) -C $$dir; \\\n             done\n\n   There are a few problems with this method, however.  First, any error\ndetected in a submake is not noted by this rule, so it will continue to\nbuild the rest of the directories even when one fails.  This can be\novercome by adding shell commands to note the error and exit, but then\nit will do so even if `make' is invoked with the `-k' option, which is\nunfortunate.  Second, and perhaps more importantly, you cannot take\nadvantage of `make''s ability to build targets in parallel (*note\nParallel Execution: Parallel.), since there is only one rule.\n\n   By declaring the subdirectories as phony targets (you must do this as\nthe subdirectory obviously always exists; otherwise it won't be built)\nyou can remove these problems:\n\n     SUBDIRS = foo bar baz\n\n     .PHONY: subdirs $(SUBDIRS)\n\n     subdirs: $(SUBDIRS)\n\n     $(SUBDIRS):\n             $(MAKE) -C $@\n\n     foo: baz\n\n   Here we've also declared that the `foo' subdirectory cannot be built\nuntil after the `baz' subdirectory is complete; this kind of\nrelationship declaration is particularly important when attempting\nparallel builds.\n\n   A phony target should not be a prerequisite of a real target file;\nif it is, its commands are run every time `make' goes to update that\nfile.  As long as a phony target is never a prerequisite of a real\ntarget, the phony target commands will be executed only when the phony\ntarget is a specified goal (*note Arguments to Specify the Goals:\nGoals.).\n\n   Phony targets can have prerequisites.  When one directory contains\nmultiple programs, it is most convenient to describe all of the\nprograms in one makefile `./Makefile'.  Since the target remade by\ndefault will be the first one in the makefile, it is common to make\nthis a phony target named `all' and give it, as prerequisites, all the\nindividual programs.  For example:\n\n     all : prog1 prog2 prog3\n     .PHONY : all\n\n     prog1 : prog1.o utils.o\n             cc -o prog1 prog1.o utils.o\n\n     prog2 : prog2.o\n             cc -o prog2 prog2.o\n\n     prog3 : prog3.o sort.o utils.o\n             cc -o prog3 prog3.o sort.o utils.o\n\nNow you can say just `make' to remake all three programs, or specify as\narguments the ones to remake (as in `make prog1 prog3').  Phoniness is\nnot inherited: the prerequisites of a phony target are not themselves\nphony, unless explicitly declared to be so.\n\n   When one phony target is a prerequisite of another, it serves as a\nsubroutine of the other.  For example, here `make cleanall' will delete\nthe object files, the difference files, and the file `program':\n\n     .PHONY: cleanall cleanobj cleandiff\n\n     cleanall : cleanobj cleandiff\n             rm program\n\n     cleanobj :\n             rm *.o\n\n     cleandiff :\n             rm *.diff\n\n\u001f\nFile: make.info,  Node: Force Targets,  Next: Empty Targets,  Prev: Phony Targets,  Up: Rules\n\n4.7 Rules without Commands or Prerequisites\n===========================================\n\nIf a rule has no prerequisites or commands, and the target of the rule\nis a nonexistent file, then `make' imagines this target to have been\nupdated whenever its rule is run.  This implies that all targets\ndepending on this one will always have their commands run.\n\n   An example will illustrate this:\n\n     clean: FORCE\n             rm $(objects)\n     FORCE:\n\n   Here the target `FORCE' satisfies the special conditions, so the\ntarget `clean' that depends on it is forced to run its commands.  There\nis nothing special about the name `FORCE', but that is one name\ncommonly used this way.\n\n   As you can see, using `FORCE' this way has the same results as using\n`.PHONY: clean'.\n\n   Using `.PHONY' is more explicit and more efficient.  However, other\nversions of `make' do not support `.PHONY'; thus `FORCE' appears in\nmany makefiles.  *Note Phony Targets::.\n\n\u001f\nFile: make.info,  Node: Empty Targets,  Next: Special Targets,  Prev: Force Targets,  Up: Rules\n\n4.8 Empty Target Files to Record Events\n=======================================\n\nThe \"empty target\" is a variant of the phony target; it is used to hold\ncommands for an action that you request explicitly from time to time.\nUnlike a phony target, this target file can really exist; but the file's\ncontents do not matter, and usually are empty.\n\n   The purpose of the empty target file is to record, with its\nlast-modification time, when the rule's commands were last executed.  It\ndoes so because one of the commands is a `touch' command to update the\ntarget file.\n\n   The empty target file should have some prerequisites (otherwise it\ndoesn't make sense).  When you ask to remake the empty target, the\ncommands are executed if any prerequisite is more recent than the\ntarget; in other words, if a prerequisite has changed since the last\ntime you remade the target.  Here is an example:\n\n     print: foo.c bar.c\n             lpr -p $?\n             touch print\n   \nWith this rule, `make print' will execute the `lpr' command if either\nsource file has changed since the last `make print'.  The automatic\nvariable `$?' is used to print only those files that have changed\n(*note Automatic Variables::).\n\n\u001f\nFile: make.info,  Node: Special Targets,  Next: Multiple Targets,  Prev: Empty Targets,  Up: Rules\n\n4.9 Special Built-in Target Names\n=================================\n\nCertain names have special meanings if they appear as targets.\n\n`.PHONY'\n     The prerequisites of the special target `.PHONY' are considered to\n     be phony targets.  When it is time to consider such a target,\n     `make' will run its commands unconditionally, regardless of\n     whether a file with that name exists or what its last-modification\n     time is.  *Note Phony Targets: Phony Targets.\n\n`.SUFFIXES'\n     The prerequisites of the special target `.SUFFIXES' are the list\n     of suffixes to be used in checking for suffix rules.  *Note\n     Old-Fashioned Suffix Rules: Suffix Rules.\n\n`.DEFAULT'\n     The commands specified for `.DEFAULT' are used for any target for\n     which no rules are found (either explicit rules or implicit rules).\n     *Note Last Resort::.  If `.DEFAULT' commands are specified, every\n     file mentioned as a prerequisite, but not as a target in a rule,\n     will have these commands executed on its behalf.  *Note Implicit\n     Rule Search Algorithm: Implicit Rule Search.\n\n`.PRECIOUS'\n     The targets which `.PRECIOUS' depends on are given the following\n     special treatment: if `make' is killed or interrupted during the\n     execution of their commands, the target is not deleted.  *Note\n     Interrupting or Killing `make': Interrupts.  Also, if the target\n     is an intermediate file, it will not be deleted after it is no\n     longer needed, as is normally done.  *Note Chains of Implicit\n     Rules: Chained Rules.  In this latter respect it overlaps with the\n     `.SECONDARY' special target.\n\n     You can also list the target pattern of an implicit rule (such as\n     `%.o') as a prerequisite file of the special target `.PRECIOUS' to\n     preserve intermediate files created by rules whose target patterns\n     match that file's name.\n\n`.INTERMEDIATE'\n     The targets which `.INTERMEDIATE' depends on are treated as\n     intermediate files.  *Note Chains of Implicit Rules: Chained Rules.\n     `.INTERMEDIATE' with no prerequisites has no effect.\n\n`.SECONDARY'\n     The targets which `.SECONDARY' depends on are treated as\n     intermediate files, except that they are never automatically\n     deleted.  *Note Chains of Implicit Rules: Chained Rules.\n\n     `.SECONDARY' with no prerequisites causes all targets to be treated\n     as secondary (i.e., no target is removed because it is considered\n     intermediate).\n\n`.SECONDEXPANSION'\n     If `.SECONDEXPANSION' is mentioned as a target anywhere in the\n     makefile, then all prerequisite lists defined _after_ it appears\n     will be expanded a second time after all makefiles have been read\n     in.  *Note Secondary Expansion: Secondary Expansion.\n\n     The prerequisites of the special target `.SUFFIXES' are the list\n     of suffixes to be used in checking for suffix rules.  *Note\n     Old-Fashioned Suffix Rules: Suffix Rules.\n\n`.DELETE_ON_ERROR'\n     If `.DELETE_ON_ERROR' is mentioned as a target anywhere in the\n     makefile, then `make' will delete the target of a rule if it has\n     changed and its commands exit with a nonzero exit status, just as\n     it does when it receives a signal.  *Note Errors in Commands:\n     Errors.\n\n`.IGNORE'\n     If you specify prerequisites for `.IGNORE', then `make' will\n     ignore errors in execution of the commands run for those particular\n     files.  The commands for `.IGNORE' are not meaningful.\n\n     If mentioned as a target with no prerequisites, `.IGNORE' says to\n     ignore errors in execution of commands for all files.  This usage\n     of `.IGNORE' is supported only for historical compatibility.  Since\n     this affects every command in the makefile, it is not very useful;\n     we recommend you use the more selective ways to ignore errors in\n     specific commands.  *Note Errors in Commands: Errors.\n\n`.LOW_RESOLUTION_TIME'\n     If you specify prerequisites for `.LOW_RESOLUTION_TIME', `make'\n     assumes that these files are created by commands that generate low\n     resolution time stamps.  The commands for `.LOW_RESOLUTION_TIME'\n     are not meaningful.\n\n     The high resolution file time stamps of many modern hosts lessen\n     the chance of `make' incorrectly concluding that a file is up to\n     date.  Unfortunately, these hosts provide no way to set a high\n     resolution file time stamp, so commands like `cp -p' that\n     explicitly set a file's time stamp must discard its subsecond\n     part.  If a file is created by such a command, you should list it\n     as a prerequisite of `.LOW_RESOLUTION_TIME' so that `make' does\n     not mistakenly conclude that the file is out of date.  For example:\n\n          .LOW_RESOLUTION_TIME: dst\n          dst: src\n                  cp -p src dst\n\n     Since `cp -p' discards the subsecond part of `src''s time stamp,\n     `dst' is typically slightly older than `src' even when it is up to\n     date.  The `.LOW_RESOLUTION_TIME' line causes `make' to consider\n     `dst' to be up to date if its time stamp is at the start of the\n     same second that `src''s time stamp is in.\n\n     Due to a limitation of the archive format, archive member time\n     stamps are always low resolution.  You need not list archive\n     members as prerequisites of `.LOW_RESOLUTION_TIME', as `make' does\n     this automatically.\n\n`.SILENT'\n     If you specify prerequisites for `.SILENT', then `make' will not\n     print the commands to remake those particular files before\n     executing them.  The commands for `.SILENT' are not meaningful.\n\n     If mentioned as a target with no prerequisites, `.SILENT' says not\n     to print any commands before executing them.  This usage of\n     `.SILENT' is supported only for historical compatibility.  We\n     recommend you use the more selective ways to silence specific\n     commands.  *Note Command Echoing: Echoing.  If you want to silence\n     all commands for a particular run of `make', use the `-s' or\n     `--silent' option (*note Options Summary::).\n\n`.EXPORT_ALL_VARIABLES'\n     Simply by being mentioned as a target, this tells `make' to export\n     all variables to child processes by default.  *Note Communicating\n     Variables to a Sub-`make': Variables/Recursion.\n\n`.NOTPARALLEL'\n     If `.NOTPARALLEL' is mentioned as a target, then this invocation of\n     `make' will be run serially, even if the `-j' option is given.\n     Any recursively invoked `make' command will still be run in\n     parallel (unless its makefile contains this target).  Any\n     prerequisites on this target are ignored.\n\n   Any defined implicit rule suffix also counts as a special target if\nit appears as a target, and so does the concatenation of two suffixes,\nsuch as `.c.o'.  These targets are suffix rules, an obsolete way of\ndefining implicit rules (but a way still widely used).  In principle,\nany target name could be special in this way if you break it in two and\nadd both pieces to the suffix list.  In practice, suffixes normally\nbegin with `.', so these special target names also begin with `.'.\n*Note Old-Fashioned Suffix Rules: Suffix Rules.\n\n\u001f\nFile: make.info,  Node: Multiple Targets,  Next: Multiple Rules,  Prev: Special Targets,  Up: Rules\n\n4.10 Multiple Targets in a Rule\n===============================\n\nA rule with multiple targets is equivalent to writing many rules, each\nwith one target, and all identical aside from that.  The same commands\napply to all the targets, but their effects may vary because you can\nsubstitute the actual target name into the command using `$@'.  The\nrule contributes the same prerequisites to all the targets also.\n\n   This is useful in two cases.\n\n   * You want just prerequisites, no commands.  For example:\n\n          kbd.o command.o files.o: command.h\n\n     gives an additional prerequisite to each of the three object files\n     mentioned.\n\n   * Similar commands work for all the targets.  The commands do not\n     need to be absolutely identical, since the automatic variable `$@'\n     can be used to substitute the particular target to be remade into\n     the commands (*note Automatic Variables::).  For example:\n\n          bigoutput littleoutput : text.g\n                  generate text.g -$(subst output,,$@) > $@\n     \n     is equivalent to\n\n          bigoutput : text.g\n                  generate text.g -big > bigoutput\n          littleoutput : text.g\n                  generate text.g -little > littleoutput\n\n     Here we assume the hypothetical program `generate' makes two types\n     of output, one if given `-big' and one if given `-little'.  *Note\n     Functions for String Substitution and Analysis: Text Functions,\n     for an explanation of the `subst' function.\n\n   Suppose you would like to vary the prerequisites according to the\ntarget, much as the variable `$@' allows you to vary the commands.  You\ncannot do this with multiple targets in an ordinary rule, but you can\ndo it with a \"static pattern rule\".  *Note Static Pattern Rules: Static\nPattern.\n\n\u001f\nFile: make.info,  Node: Multiple Rules,  Next: Static Pattern,  Prev: Multiple Targets,  Up: Rules\n\n4.11 Multiple Rules for One Target\n==================================\n\nOne file can be the target of several rules.  All the prerequisites\nmentioned in all the rules are merged into one list of prerequisites for\nthe target.  If the target is older than any prerequisite from any rule,\nthe commands are executed.\n\n   There can only be one set of commands to be executed for a file.  If\nmore than one rule gives commands for the same file, `make' uses the\nlast set given and prints an error message.  (As a special case, if the\nfile's name begins with a dot, no error message is printed.  This odd\nbehavior is only for compatibility with other implementations of\n`make'... you should avoid using it).  Occasionally it is useful to\nhave the same target invoke multiple commands which are defined in\ndifferent parts of your makefile; you can use \"double-colon rules\"\n(*note Double-Colon::) for this.\n\n   An extra rule with just prerequisites can be used to give a few extra\nprerequisites to many files at once.  For example, makefiles often have\na variable, such as `objects', containing a list of all the compiler\noutput files in the system being made.  An easy way to say that all of\nthem must be recompiled if `config.h' changes is to write the following:\n\n     objects = foo.o bar.o\n     foo.o : defs.h\n     bar.o : defs.h test.h\n     $(objects) : config.h\n\n   This could be inserted or taken out without changing the rules that\nreally specify how to make the object files, making it a convenient\nform to use if you wish to add the additional prerequisite\nintermittently.\n\n   Another wrinkle is that the additional prerequisites could be\nspecified with a variable that you set with a command argument to `make'\n(*note Overriding Variables: Overriding.).  For example,\n\n     extradeps=\n     $(objects) : $(extradeps)\n\nmeans that the command `make extradeps=foo.h' will consider `foo.h' as\na prerequisite of each object file, but plain `make' will not.\n\n   If none of the explicit rules for a target has commands, then `make'\nsearches for an applicable implicit rule to find some commands *note\nUsing Implicit Rules: Implicit Rules.).\n\n\u001f\nFile: make.info,  Node: Static Pattern,  Next: Double-Colon,  Prev: Multiple Rules,  Up: Rules\n\n4.12 Static Pattern Rules\n=========================\n\n\"Static pattern rules\" are rules which specify multiple targets and\nconstruct the prerequisite names for each target based on the target\nname.  They are more general than ordinary rules with multiple targets\nbecause the targets do not have to have identical prerequisites.  Their\nprerequisites must be _analogous_, but not necessarily _identical_.\n\n* Menu:\n\n* Static Usage::                The syntax of static pattern rules.\n* Static versus Implicit::      When are they better than implicit rules?\n\n\u001f\nFile: make.info,  Node: Static Usage,  Next: Static versus Implicit,  Prev: Static Pattern,  Up: Static Pattern\n\n4.12.1 Syntax of Static Pattern Rules\n-------------------------------------\n\nHere is the syntax of a static pattern rule:\n\n     TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...\n             COMMANDS\n             ...\n\nThe TARGETS list specifies the targets that the rule applies to.  The\ntargets can contain wildcard characters, just like the targets of\nordinary rules (*note Using Wildcard Characters in File Names:\nWildcards.).\n\n   The TARGET-PATTERN and PREREQ-PATTERNS say how to compute the\nprerequisites of each target.  Each target is matched against the\nTARGET-PATTERN to extract a part of the target name, called the \"stem\".\nThis stem is substituted into each of the PREREQ-PATTERNS to make the\nprerequisite names (one from each PREREQ-PATTERN).\n\n   Each pattern normally contains the character `%' just once.  When the\nTARGET-PATTERN matches a target, the `%' can match any part of the\ntarget name; this part is called the \"stem\".  The rest of the pattern\nmust match exactly.  For example, the target `foo.o' matches the\npattern `%.o', with `foo' as the stem.  The targets `foo.c' and\n`foo.out' do not match that pattern.\n\n   The prerequisite names for each target are made by substituting the\nstem for the `%' in each prerequisite pattern.  For example, if one\nprerequisite pattern is `%.c', then substitution of the stem `foo'\ngives the prerequisite name `foo.c'.  It is legitimate to write a\nprerequisite pattern that does not contain `%'; then this prerequisite\nis the same for all targets.\n\n   `%' characters in pattern rules can be quoted with preceding\nbackslashes (`\\').  Backslashes that would otherwise quote `%'\ncharacters can be quoted with more backslashes.  Backslashes that quote\n`%' characters or other backslashes are removed from the pattern before\nit is compared to file names or has a stem substituted into it.\nBackslashes that are not in danger of quoting `%' characters go\nunmolested.  For example, the pattern `the\\%weird\\\\%pattern\\\\' has\n`the%weird\\' preceding the operative `%' character, and `pattern\\\\'\nfollowing it.  The final two backslashes are left alone because they\ncannot affect any `%' character.\n\n   Here is an example, which compiles each of `foo.o' and `bar.o' from\nthe corresponding `.c' file:\n\n     objects = foo.o bar.o\n\n     all: $(objects)\n\n     $(objects): %.o: %.c\n             $(CC) -c $(CFLAGS) $< -o $@\n\nHere `$<' is the automatic variable that holds the name of the\nprerequisite and `$@' is the automatic variable that holds the name of\nthe target; see *note Automatic Variables::.\n\n   Each target specified must match the target pattern; a warning is\nissued for each target that does not.  If you have a list of files,\nonly some of which will match the pattern, you can use the `filter'\nfunction to remove nonmatching file names (*note Functions for String\nSubstitution and Analysis: Text Functions.):\n\n     files = foo.elc bar.o lose.o\n\n     $(filter %.o,$(files)): %.o: %.c\n             $(CC) -c $(CFLAGS) $< -o $@\n     $(filter %.elc,$(files)): %.elc: %.el\n             emacs -f batch-byte-compile $<\n\nIn this example the result of `$(filter %.o,$(files))' is `bar.o\nlose.o', and the first static pattern rule causes each of these object\nfiles to be updated by compiling the corresponding C source file.  The\nresult of `$(filter %.elc,$(files))' is `foo.elc', so that file is made\nfrom `foo.el'.\n\n   Another example shows how to use `$*' in static pattern rules: \n\n     bigoutput littleoutput : %output : text.g\n             generate text.g -$* > $@\n\nWhen the `generate' command is run, `$*' will expand to the stem,\neither `big' or `little'.\n\n\u001f\nFile: make.info,  Node: Static versus Implicit,  Prev: Static Usage,  Up: Static Pattern\n\n4.12.2 Static Pattern Rules versus Implicit Rules\n-------------------------------------------------\n\nA static pattern rule has much in common with an implicit rule defined\nas a pattern rule (*note Defining and Redefining Pattern Rules: Pattern\nRules.).  Both have a pattern for the target and patterns for\nconstructing the names of prerequisites.  The difference is in how\n`make' decides _when_ the rule applies.\n\n   An implicit rule _can_ apply to any target that matches its pattern,\nbut it _does_ apply only when the target has no commands otherwise\nspecified, and only when the prerequisites can be found.  If more than\none implicit rule appears applicable, only one applies; the choice\ndepends on the order of rules.\n\n   By contrast, a static pattern rule applies to the precise list of\ntargets that you specify in the rule.  It cannot apply to any other\ntarget and it invariably does apply to each of the targets specified.\nIf two conflicting rules apply, and both have commands, that's an error.\n\n   The static pattern rule can be better than an implicit rule for these\nreasons:\n\n   * You may wish to override the usual implicit rule for a few files\n     whose names cannot be categorized syntactically but can be given\n     in an explicit list.\n\n   * If you cannot be sure of the precise contents of the directories\n     you are using, you may not be sure which other irrelevant files\n     might lead `make' to use the wrong implicit rule.  The choice\n     might depend on the order in which the implicit rule search is\n     done.  With static pattern rules, there is no uncertainty: each\n     rule applies to precisely the targets specified.\n\n\u001f\nFile: make.info,  Node: Double-Colon,  Next: Automatic Prerequisites,  Prev: Static Pattern,  Up: Rules\n\n4.13 Double-Colon Rules\n=======================\n\n\"Double-colon\" rules are rules written with `::' instead of `:' after\nthe target names.  They are handled differently from ordinary rules\nwhen the same target appears in more than one rule.\n\n   When a target appears in multiple rules, all the rules must be the\nsame type: all ordinary, or all double-colon.  If they are\ndouble-colon, each of them is independent of the others.  Each\ndouble-colon rule's commands are executed if the target is older than\nany prerequisites of that rule.  If there are no prerequisites for that\nrule, its commands are always executed (even if the target already\nexists).  This can result in executing none, any, or all of the\ndouble-colon rules.\n\n   Double-colon rules with the same target are in fact completely\nseparate from one another.  Each double-colon rule is processed\nindividually, just as rules with different targets are processed.\n\n   The double-colon rules for a target are executed in the order they\nappear in the makefile.  However, the cases where double-colon rules\nreally make sense are those where the order of executing the commands\nwould not matter.\n\n   Double-colon rules are somewhat obscure and not often very useful;\nthey provide a mechanism for cases in which the method used to update a\ntarget differs depending on which prerequisite files caused the update,\nand such cases are rare.\n\n   Each double-colon rule should specify commands; if it does not, an\nimplicit rule will be used if one applies.  *Note Using Implicit Rules:\nImplicit Rules.\n\n\u001f\nFile: make.info,  Node: Automatic Prerequisites,  Prev: Double-Colon,  Up: Rules\n\n4.14 Generating Prerequisites Automatically\n===========================================\n\nIn the makefile for a program, many of the rules you need to write often\nsay only that some object file depends on some header file.  For\nexample, if `main.c' uses `defs.h' via an `#include', you would write:\n\n     main.o: defs.h\n\nYou need this rule so that `make' knows that it must remake `main.o'\nwhenever `defs.h' changes.  You can see that for a large program you\nwould have to write dozens of such rules in your makefile.  And, you\nmust always be very careful to update the makefile every time you add\nor remove an `#include'.  \n\n   To avoid this hassle, most modern C compilers can write these rules\nfor you, by looking at the `#include' lines in the source files.\nUsually this is done with the `-M' option to the compiler.  For\nexample, the command:\n\n     cc -M main.c\n\ngenerates the output:\n\n     main.o : main.c defs.h\n\nThus you no longer have to write all those rules yourself.  The\ncompiler will do it for you.\n\n   Note that such a prerequisite constitutes mentioning `main.o' in a\nmakefile, so it can never be considered an intermediate file by implicit\nrule search.  This means that `make' won't ever remove the file after\nusing it; *note Chains of Implicit Rules: Chained Rules.\n\n   With old `make' programs, it was traditional practice to use this\ncompiler feature to generate prerequisites on demand with a command like\n`make depend'.  That command would create a file `depend' containing\nall the automatically-generated prerequisites; then the makefile could\nuse `include' to read them in (*note Include::).\n\n   In GNU `make', the feature of remaking makefiles makes this practice\nobsolete--you need never tell `make' explicitly to regenerate the\nprerequisites, because it always regenerates any makefile that is out\nof date.  *Note Remaking Makefiles::.\n\n   The practice we recommend for automatic prerequisite generation is\nto have one makefile corresponding to each source file.  For each\nsource file `NAME.c' there is a makefile `NAME.d' which lists what\nfiles the object file `NAME.o' depends on.  That way only the source\nfiles that have changed need to be rescanned to produce the new\nprerequisites.\n\n   Here is the pattern rule to generate a file of prerequisites (i.e.,\na makefile) called `NAME.d' from a C source file called `NAME.c':\n\n     %.d: %.c\n             @set -e; rm -f $@; \\\n              $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \\\n              sed 's,\\($*\\)\\.o[ :]*,\\1.o $@ : ,g' < $@.$$$$ > $@; \\\n              rm -f $@.$$$$\n\n*Note Pattern Rules::, for information on defining pattern rules.  The\n`-e' flag to the shell causes it to exit immediately if the `$(CC)'\ncommand (or any other command) fails (exits with a nonzero status).  \n\n   With the GNU C compiler, you may wish to use the `-MM' flag instead\nof `-M'.  This omits prerequisites on system header files.  *Note\nOptions Controlling the Preprocessor: (gcc.info)Preprocessor Options,\nfor details.\n\n   The purpose of the `sed' command is to translate (for example):\n\n     main.o : main.c defs.h\n\ninto:\n\n     main.o main.d : main.c defs.h\n\nThis makes each `.d' file depend on all the source and header files\nthat the corresponding `.o' file depends on.  `make' then knows it must\nregenerate the prerequisites whenever any of the source or header files\nchanges.\n\n   Once you've defined the rule to remake the `.d' files, you then use\nthe `include' directive to read them all in.  *Note Include::.  For\nexample:\n\n     sources = foo.c bar.c\n\n     include $(sources:.c=.d)\n\n(This example uses a substitution variable reference to translate the\nlist of source files `foo.c bar.c' into a list of prerequisite\nmakefiles, `foo.d bar.d'.  *Note Substitution Refs::, for full\ninformation on substitution references.)  Since the `.d' files are\nmakefiles like any others, `make' will remake them as necessary with no\nfurther work from you.  *Note Remaking Makefiles::.\n\n   Note that the `.d' files contain target definitions; you should be\nsure to place the `include' directive _after_ the first, default goal\nin your makefiles or run the risk of having a random object file become\nthe default goal.  *Note How Make Works::.\n\n\u001f\nFile: make.info,  Node: Commands,  Next: Using Variables,  Prev: Rules,  Up: Top\n\n5 Writing the Commands in Rules\n*******************************\n\nThe commands of a rule consist of one or more shell command lines to be\nexecuted, one at a time, in the order they appear.  Typically, the\nresult of executing these commands is that the target of the rule is\nbrought up to date.\n\n   Users use many different shell programs, but commands in makefiles\nare always interpreted by `/bin/sh' unless the makefile specifies\notherwise.  *Note Command Execution: Execution.\n\n* Menu:\n\n* Command Syntax::              Command syntax features and pitfalls.\n* Echoing::                     How to control when commands are echoed.\n* Execution::                   How commands are executed.\n* Parallel::                    How commands can be executed in parallel.\n* Errors::                      What happens after a command execution error.\n* Interrupts::                  What happens when a command is interrupted.\n* Recursion::                   Invoking `make' from makefiles.\n* Sequences::                   Defining canned sequences of commands.\n* Empty Commands::              Defining useful, do-nothing commands.\n\n\u001f\nFile: make.info,  Node: Command Syntax,  Next: Echoing,  Prev: Commands,  Up: Commands\n\n5.1 Command Syntax\n==================\n\nMakefiles have the unusual property that there are really two distinct\nsyntaxes in one file.  Most of the makefile uses `make' syntax (*note\nWriting Makefiles: Makefiles.).  However, commands are meant to be\ninterpreted by the shell and so they are written using shell syntax.\nThe `make' program does not try to understand shell syntax: it performs\nonly a very few specific translations on the content of the command\nbefore handing it to the shell.\n\n   Each command line must start with a tab, except that the first\ncommand line may be attached to the target-and-prerequisites line with a\nsemicolon in between.  _Any_ line in the makefile that begins with a\ntab and appears in a \"rule context\" (that is, after a rule has been\nstarted until another rule or variable definition) will be considered a\ncommand line for that rule.  Blank lines and lines of just comments may\nappear among the command lines; they are ignored.\n\n   Some consequences of these rules include:\n\n   * A blank line that begins with a tab is not blank: it's an empty\n     command (*note Empty Commands::).\n\n   * A comment in a command line is not a `make' comment; it will be\n     passed to the shell as-is.  Whether the shell treats it as a\n     comment or not depends on your shell.\n\n   * A variable definition in a \"rule context\" which is indented by a\n     tab as the first character on the line, will be considered a\n     command line, not a `make' variable definition, and passed to the\n     shell.\n\n   * A conditional expression (`ifdef', `ifeq', etc. *note Syntax of\n     Conditionals: Conditional Syntax.) in a \"rule context\" which is\n     indented by a tab as the first character on the line, will be\n     considered a command line and be passed to the shell.\n\n\n* Menu:\n\n* Splitting Lines::             Breaking long command lines for readability.\n* Variables in Commands::       Using `make' variables in commands.\n\n\u001f\nFile: make.info,  Node: Splitting Lines,  Next: Variables in Commands,  Prev: Command Syntax,  Up: Command Syntax\n\n5.1.1 Splitting Command Lines\n-----------------------------\n\nOne of the few ways in which `make' does interpret command lines is\nchecking for a backslash just before the newline.  As in normal\nmakefile syntax, a single command can be split into multiple lines in\nthe makefile by placing a backslash before each newline.  A sequence of\nlines like this is considered a single command, and one instance of the\nshell will be invoked to run it.\n\n   However, in contrast to how they are treated in other places in a\nmakefile, backslash-newline pairs are _not_ removed from the command.\nBoth the backslash and the newline characters are preserved and passed\nto the shell.  How the backslash-newline is interpreted depends on your\nshell.  If the first character of the next line after the\nbackslash-newline is a tab, then that tab (and only that tab) is\nremoved.  Whitespace is never added to the command.\n\n   For example, this makefile:\n\n     all :\n             @echo no\\\n     space\n             @echo no\\\n             space\n             @echo one \\\n             space\n             @echo one\\\n              space\n\nconsists of four separate shell commands where the output is:\n\n     nospace\n     nospace\n     one space\n     one space\n\n   As a more complex example, this makefile:\n\n     all : ; @echo 'hello \\\n             world' ; echo \"hello \\\n         world\"\n\nwill run one shell with a command script of:\n\n     echo 'hello \\\n     world' ; echo \"hello \\\n         world\"\n\nwhich, according to shell quoting rules, will yield the following\noutput:\n\n     hello \\\n     world\n     hello     world\n\nNotice how the backslash/newline pair was removed inside the string\nquoted with double quotes (`\"...\"'), but not from the string quoted\nwith single quotes (`'...'').  This is the way the default shell\n(`/bin/sh') handles backslash/newline pairs.  If you specify a\ndifferent shell in your makefiles it may treat them differently.\n\n   Sometimes you want to split a long line inside of single quotes, but\nyou don't want the backslash-newline to appear in the quoted content.\nThis is often the case when passing scripts to languages such as Perl,\nwhere extraneous backslashes inside the script can change its meaning\nor even be a syntax error.  One simple way of handling this is to place\nthe quoted string, or even the entire command, into a `make' variable\nthen use the variable in the command.  In this situation the newline\nquoting rules for makefiles will be used, and the backslash-newline\nwill be removed.  If we rewrite our example above using this method:\n\n     HELLO = 'hello \\\n     world'\n\n     all : ; @echo $(HELLO)\n\nwe will get output like this:\n\n     hello world\n\n   If you like, you can also use target-specific variables (*note\nTarget-specific Variable Values: Target-specific.) to obtain a tighter\ncorrespondence between the variable and the command that uses it.\n\n\u001f\nFile: make.info,  Node: Variables in Commands,  Prev: Splitting Lines,  Up: Command Syntax\n\n5.1.2 Using Variables in Commands\n---------------------------------\n\nThe other way in which `make' processes commands is by expanding any\nvariable references in them (*note Basics of Variable References:\nReference.).  This occurs after make has finished reading all the\nmakefiles and the target is determined to be out of date; so, the\ncommands for targets which are not rebuilt are never expanded.\n\n   Variable and function references in commands have identical syntax\nand semantics to references elsewhere in the makefile.  They also have\nthe same quoting rules: if you want a dollar sign to appear in your\ncommand, you must double it (`$$').  For shells like the default shell,\nthat use dollar signs to introduce variables, it's important to keep\nclear in your mind whether the variable you want to reference is a\n`make' variable (use a single dollar sign) or a shell variable (use two\ndollar signs).  For example:\n\n     LIST = one two three\n     all:\n             for i in $(LIST); do \\\n                 echo $$i; \\\n             done\n\nresults in the following command being passed to the shell:\n\n     for i in one two three; do \\\n         echo $i; \\\n     done\n\nwhich generates the expected result:\n\n     one\n     two\n     three\n\n\u001f\nFile: make.info,  Node: Echoing,  Next: Execution,  Prev: Command Syntax,  Up: Commands\n\n5.2 Command Echoing\n===================\n\nNormally `make' prints each command line before it is executed.  We\ncall this \"echoing\" because it gives the appearance that you are typing\nthe commands yourself.\n\n   When a line starts with `@', the echoing of that line is suppressed.\nThe `@' is discarded before the command is passed to the shell.\nTypically you would use this for a command whose only effect is to print\nsomething, such as an `echo' command to indicate progress through the\nmakefile:\n\n     @echo About to make distribution files\n\n   When `make' is given the flag `-n' or `--just-print' it only echoes\ncommands, it won't execute them.  *Note Summary of Options: Options\nSummary.  In this case and only this case, even the commands starting\nwith `@' are printed.  This flag is useful for finding out which\ncommands `make' thinks are necessary without actually doing them.\n\n   The `-s' or `--silent' flag to `make' prevents all echoing, as if\nall commands started with `@'.  A rule in the makefile for the special\ntarget `.SILENT' without prerequisites has the same effect (*note\nSpecial Built-in Target Names: Special Targets.).  `.SILENT' is\nessentially obsolete since `@' is more flexible.\n\n\u001f\nFile: make.info,  Node: Execution,  Next: Parallel,  Prev: Echoing,  Up: Commands\n\n5.3 Command Execution\n=====================\n\nWhen it is time to execute commands to update a target, they are\nexecuted by invoking a new subshell for each command line.  (In\npractice, `make' may take shortcuts that do not affect the results.)\n\n   *Please note:* this implies that setting shell variables and\ninvoking shell commands such as `cd' that set a context local to each\nprocess will not affect the following command lines.(1)  If you want to\nuse `cd' to affect the next statement, put both statements in a single\ncommand line.  Then `make' will invoke one shell to run the entire\nline, and the shell will execute the statements in sequence.  For\nexample:\n\n     foo : bar/lose\n             cd $(@D) && gobble $(@F) > ../$@\n\nHere we use the shell AND operator (`&&') so that if the `cd' command\nfails, the script will fail without trying to invoke the `gobble'\ncommand in the wrong directory, which could cause problems (in this\ncase it would certainly cause `../foo' to be truncated, at least).\n\n* Menu:\n\n* Choosing the Shell::          How `make' chooses the shell used\n                                  to run commands.\n\n   ---------- Footnotes ----------\n\n   (1) On MS-DOS, the value of current working directory is *global*, so\nchanging it _will_ affect the following command lines on those systems.\n\n\u001f\nFile: make.info,  Node: Choosing the Shell,  Prev: Execution,  Up: Execution\n\n5.3.1 Choosing the Shell\n------------------------\n\nThe program used as the shell is taken from the variable `SHELL'.  If\nthis variable is not set in your makefile, the program `/bin/sh' is\nused as the shell.\n\n   Unlike most variables, the variable `SHELL' is never set from the\nenvironment.  This is because the `SHELL' environment variable is used\nto specify your personal choice of shell program for interactive use.\nIt would be very bad for personal choices like this to affect the\nfunctioning of makefiles.  *Note Variables from the Environment:\nEnvironment.\n\n   Furthermore, when you do set `SHELL' in your makefile that value is\n_not_ exported in the environment to commands that `make' invokes.\nInstead, the value inherited from the user's environment, if any, is\nexported.  You can override this behavior by explicitly exporting\n`SHELL' (*note Communicating Variables to a Sub-`make':\nVariables/Recursion.), forcing it to be passed in the environment to\ncommands.\n\n   However, on MS-DOS and MS-Windows the value of `SHELL' in the\nenvironment *is* used, since on those systems most users do not set\nthis variable, and therefore it is most likely set specifically to be\nused by `make'.  On MS-DOS, if the setting of `SHELL' is not suitable\nfor `make', you can set the variable `MAKESHELL' to the shell that\n`make' should use; if set it will be used as the shell instead of the\nvalue of `SHELL'.\n\nChoosing a Shell in DOS and Windows\n...................................\n\nChoosing a shell in MS-DOS and MS-Windows is much more complex than on\nother systems.\n\n   On MS-DOS, if `SHELL' is not set, the value of the variable\n`COMSPEC' (which is always set) is used instead.\n\n   The processing of lines that set the variable `SHELL' in Makefiles\nis different on MS-DOS.  The stock shell, `command.com', is\nridiculously limited in its functionality and many users of `make' tend\nto install a replacement shell.  Therefore, on MS-DOS, `make' examines\nthe value of `SHELL', and changes its behavior based on whether it\npoints to a Unix-style or DOS-style shell.  This allows reasonable\nfunctionality even if `SHELL' points to `command.com'.\n\n   If `SHELL' points to a Unix-style shell, `make' on MS-DOS\nadditionally checks whether that shell can indeed be found; if not, it\nignores the line that sets `SHELL'.  In MS-DOS, GNU `make' searches for\nthe shell in the following places:\n\n  1. In the precise place pointed to by the value of `SHELL'.  For\n     example, if the makefile specifies `SHELL = /bin/sh', `make' will\n     look in the directory `/bin' on the current drive.\n\n  2. In the current directory.\n\n  3. In each of the directories in the `PATH' variable, in order.\n\n\n   In every directory it examines, `make' will first look for the\nspecific file (`sh' in the example above).  If this is not found, it\nwill also look in that directory for that file with one of the known\nextensions which identify executable files.  For example `.exe',\n`.com', `.bat', `.btm', `.sh', and some others.\n\n   If any of these attempts is successful, the value of `SHELL' will be\nset to the full pathname of the shell as found.  However, if none of\nthese is found, the value of `SHELL' will not be changed, and thus the\nline that sets it will be effectively ignored.  This is so `make' will\nonly support features specific to a Unix-style shell if such a shell is\nactually installed on the system where `make' runs.\n\n   Note that this extended search for the shell is limited to the cases\nwhere `SHELL' is set from the Makefile; if it is set in the environment\nor command line, you are expected to set it to the full pathname of the\nshell, exactly as things are on Unix.\n\n   The effect of the above DOS-specific processing is that a Makefile\nthat contains `SHELL = /bin/sh' (as many Unix makefiles do), will work\non MS-DOS unaltered if you have e.g. `sh.exe' installed in some\ndirectory along your `PATH'.\n\n\u001f\nFile: make.info,  Node: Parallel,  Next: Errors,  Prev: Execution,  Up: Commands\n\n5.4 Parallel Execution\n======================\n\nGNU `make' knows how to execute several commands at once.  Normally,\n`make' will execute only one command at a time, waiting for it to\nfinish before executing the next.  However, the `-j' or `--jobs' option\ntells `make' to execute many commands simultaneously.\n\n   On MS-DOS, the `-j' option has no effect, since that system doesn't\nsupport multi-processing.\n\n   If the `-j' option is followed by an integer, this is the number of\ncommands to execute at once; this is called the number of \"job slots\".\nIf there is nothing looking like an integer after the `-j' option,\nthere is no limit on the number of job slots.  The default number of job\nslots is one, which means serial execution (one thing at a time).\n\n   One unpleasant consequence of running several commands\nsimultaneously is that output generated by the commands appears\nwhenever each command sends it, so messages from different commands may\nbe interspersed.\n\n   Another problem is that two processes cannot both take input from the\nsame device; so to make sure that only one command tries to take input\nfrom the terminal at once, `make' will invalidate the standard input\nstreams of all but one running command.  This means that attempting to\nread from standard input will usually be a fatal error (a `Broken pipe'\nsignal) for most child processes if there are several.  \n\n   It is unpredictable which command will have a valid standard input\nstream (which will come from the terminal, or wherever you redirect the\nstandard input of `make').  The first command run will always get it\nfirst, and the first command started after that one finishes will get\nit next, and so on.\n\n   We will change how this aspect of `make' works if we find a better\nalternative.  In the mean time, you should not rely on any command using\nstandard input at all if you are using the parallel execution feature;\nbut if you are not using this feature, then standard input works\nnormally in all commands.\n\n   Finally, handling recursive `make' invocations raises issues.  For\nmore information on this, see *note Communicating Options to a\nSub-`make': Options/Recursion.\n\n   If a command fails (is killed by a signal or exits with a nonzero\nstatus), and errors are not ignored for that command (*note Errors in\nCommands: Errors.), the remaining command lines to remake the same\ntarget will not be run.  If a command fails and the `-k' or\n`--keep-going' option was not given (*note Summary of Options: Options\nSummary.), `make' aborts execution.  If make terminates for any reason\n(including a signal) with child processes running, it waits for them to\nfinish before actually exiting.\n\n   When the system is heavily loaded, you will probably want to run\nfewer jobs than when it is lightly loaded.  You can use the `-l' option\nto tell `make' to limit the number of jobs to run at once, based on the\nload average.  The `-l' or `--max-load' option is followed by a\nfloating-point number.  For example,\n\n     -l 2.5\n\nwill not let `make' start more than one job if the load average is\nabove 2.5.  The `-l' option with no following number removes the load\nlimit, if one was given with a previous `-l' option.\n\n   More precisely, when `make' goes to start up a job, and it already\nhas at least one job running, it checks the current load average; if it\nis not lower than the limit given with `-l', `make' waits until the load\naverage goes below that limit, or until all the other jobs finish.\n\n   By default, there is no load limit.\n\n\u001f\nFile: make.info,  Node: Errors,  Next: Interrupts,  Prev: Parallel,  Up: Commands\n\n5.5 Errors in Commands\n======================\n\nAfter each shell command returns, `make' looks at its exit status.  If\nthe command completed successfully, the next command line is executed\nin a new shell; after the last command line is finished, the rule is\nfinished.\n\n   If there is an error (the exit status is nonzero), `make' gives up on\nthe current rule, and perhaps on all rules.\n\n   Sometimes the failure of a certain command does not indicate a\nproblem.  For example, you may use the `mkdir' command to ensure that a\ndirectory exists.  If the directory already exists, `mkdir' will report\nan error, but you probably want `make' to continue regardless.\n\n   To ignore errors in a command line, write a `-' at the beginning of\nthe line's text (after the initial tab).  The `-' is discarded before\nthe command is passed to the shell for execution.\n\n   For example,\n\n     clean:\n             -rm -f *.o\n\nThis causes `rm' to continue even if it is unable to remove a file.\n\n   When you run `make' with the `-i' or `--ignore-errors' flag, errors\nare ignored in all commands of all rules.  A rule in the makefile for\nthe special target `.IGNORE' has the same effect, if there are no\nprerequisites.  These ways of ignoring errors are obsolete because `-'\nis more flexible.\n\n   When errors are to be ignored, because of either a `-' or the `-i'\nflag, `make' treats an error return just like success, except that it\nprints out a message that tells you the status code the command exited\nwith, and says that the error has been ignored.\n\n   When an error happens that `make' has not been told to ignore, it\nimplies that the current target cannot be correctly remade, and neither\ncan any other that depends on it either directly or indirectly.  No\nfurther commands will be executed for these targets, since their\npreconditions have not been achieved.\n\n   Normally `make' gives up immediately in this circumstance, returning\na nonzero status.  However, if the `-k' or `--keep-going' flag is\nspecified, `make' continues to consider the other prerequisites of the\npending targets, remaking them if necessary, before it gives up and\nreturns nonzero status.  For example, after an error in compiling one\nobject file, `make -k' will continue compiling other object files even\nthough it already knows that linking them will be impossible.  *Note\nSummary of Options: Options Summary.\n\n   The usual behavior assumes that your purpose is to get the specified\ntargets up to date; once `make' learns that this is impossible, it\nmight as well report the failure immediately.  The `-k' option says\nthat the real purpose is to test as many of the changes made in the\nprogram as possible, perhaps to find several independent problems so\nthat you can correct them all before the next attempt to compile.  This\nis why Emacs' `compile' command passes the `-k' flag by default.  \n\n   Usually when a command fails, if it has changed the target file at\nall, the file is corrupted and cannot be used--or at least it is not\ncompletely updated.  Yet the file's time stamp says that it is now up to\ndate, so the next time `make' runs, it will not try to update that\nfile.  The situation is just the same as when the command is killed by a\nsignal; *note Interrupts::.  So generally the right thing to do is to\ndelete the target file if the command fails after beginning to change\nthe file.  `make' will do this if `.DELETE_ON_ERROR' appears as a\ntarget.  This is almost always what you want `make' to do, but it is\nnot historical practice; so for compatibility, you must explicitly\nrequest it.\n\n\u001f\nFile: make.info,  Node: Interrupts,  Next: Recursion,  Prev: Errors,  Up: Commands\n\n5.6 Interrupting or Killing `make'\n==================================\n\nIf `make' gets a fatal signal while a command is executing, it may\ndelete the target file that the command was supposed to update.  This is\ndone if the target file's last-modification time has changed since\n`make' first checked it.\n\n   The purpose of deleting the target is to make sure that it is remade\nfrom scratch when `make' is next run.  Why is this?  Suppose you type\n`Ctrl-c' while a compiler is running, and it has begun to write an\nobject file `foo.o'.  The `Ctrl-c' kills the compiler, resulting in an\nincomplete file whose last-modification time is newer than the source\nfile `foo.c'.  But `make' also receives the `Ctrl-c' signal and deletes\nthis incomplete file.  If `make' did not do this, the next invocation\nof `make' would think that `foo.o' did not require updating--resulting\nin a strange error message from the linker when it tries to link an\nobject file half of which is missing.\n\n   You can prevent the deletion of a target file in this way by making\nthe special target `.PRECIOUS' depend on it.  Before remaking a target,\n`make' checks to see whether it appears on the prerequisites of\n`.PRECIOUS', and thereby decides whether the target should be deleted\nif a signal happens.  Some reasons why you might do this are that the\ntarget is updated in some atomic fashion, or exists only to record a\nmodification-time (its contents do not matter), or must exist at all\ntimes to prevent other sorts of trouble.\n\n\u001f\nFile: make.info,  Node: Recursion,  Next: Sequences,  Prev: Interrupts,  Up: Commands\n\n5.7 Recursive Use of `make'\n===========================\n\nRecursive use of `make' means using `make' as a command in a makefile.\nThis technique is useful when you want separate makefiles for various\nsubsystems that compose a larger system.  For example, suppose you have\na subdirectory `subdir' which has its own makefile, and you would like\nthe containing directory's makefile to run `make' on the subdirectory.\nYou can do it by writing this:\n\n     subsystem:\n             cd subdir && $(MAKE)\n\nor, equivalently, this (*note Summary of Options: Options Summary.):\n\n     subsystem:\n             $(MAKE) -C subdir\n   \n   You can write recursive `make' commands just by copying this example,\nbut there are many things to know about how they work and why, and about\nhow the sub-`make' relates to the top-level `make'.  You may also find\nit useful to declare targets that invoke recursive `make' commands as\n`.PHONY' (for more discussion on when this is useful, see *note Phony\nTargets::).\n\n   For your convenience, when GNU `make' starts (after it has processed\nany `-C' options) it sets the variable `CURDIR' to the pathname of the\ncurrent working directory.  This value is never touched by `make'\nagain: in particular note that if you include files from other\ndirectories the value of `CURDIR' does not change.  The value has the\nsame precedence it would have if it were set in the makefile (by\ndefault, an environment variable `CURDIR' will not override this\nvalue).  Note that setting this variable has no impact on the operation\nof `make' (it does not cause `make' to change its working directory,\nfor example).\n\n* Menu:\n\n* MAKE Variable::               The special effects of using `$(MAKE)'.\n* Variables/Recursion::         How to communicate variables to a sub-`make'.\n* Options/Recursion::           How to communicate options to a sub-`make'.\n* -w Option::                   How the `-w' or `--print-directory' option\n                                  helps debug use of recursive `make' commands.\n\n\u001f\nFile: make.info,  Node: MAKE Variable,  Next: Variables/Recursion,  Prev: Recursion,  Up: Recursion\n\n5.7.1 How the `MAKE' Variable Works\n-----------------------------------\n\nRecursive `make' commands should always use the variable `MAKE', not\nthe explicit command name `make', as shown here:\n\n     subsystem:\n             cd subdir && $(MAKE)\n\n   The value of this variable is the file name with which `make' was\ninvoked.  If this file name was `/bin/make', then the command executed\nis `cd subdir && /bin/make'.  If you use a special version of `make' to\nrun the top-level makefile, the same special version will be executed\nfor recursive invocations.  \n\n   As a special feature, using the variable `MAKE' in the commands of a\nrule alters the effects of the `-t' (`--touch'), `-n' (`--just-print'),\nor `-q' (`--question') option.  Using the `MAKE' variable has the same\neffect as using a `+' character at the beginning of the command line.\n*Note Instead of Executing the Commands: Instead of Execution.  This\nspecial feature is only enabled if the `MAKE' variable appears directly\nin the command script: it does not apply if the `MAKE' variable is\nreferenced through expansion of another variable.  In the latter case\nyou must use the `+' token to get these special effects.\n\n   Consider the command `make -t' in the above example.  (The `-t'\noption marks targets as up to date without actually running any\ncommands; see *note Instead of Execution::.)  Following the usual\ndefinition of `-t', a `make -t' command in the example would create a\nfile named `subsystem' and do nothing else.  What you really want it to\ndo is run `cd subdir && make -t'; but that would require executing the\ncommand, and `-t' says not to execute commands.  \n\n   The special feature makes this do what you want: whenever a command\nline of a rule contains the variable `MAKE', the flags `-t', `-n' and\n`-q' do not apply to that line.  Command lines containing `MAKE' are\nexecuted normally despite the presence of a flag that causes most\ncommands not to be run.  The usual `MAKEFLAGS' mechanism passes the\nflags to the sub-`make' (*note Communicating Options to a Sub-`make':\nOptions/Recursion.), so your request to touch the files, or print the\ncommands, is propagated to the subsystem.\n\n\u001f\nFile: make.info,  Node: Variables/Recursion,  Next: Options/Recursion,  Prev: MAKE Variable,  Up: Recursion\n\n5.7.2 Communicating Variables to a Sub-`make'\n---------------------------------------------\n\nVariable values of the top-level `make' can be passed to the sub-`make'\nthrough the environment by explicit request.  These variables are\ndefined in the sub-`make' as defaults, but do not override what is\nspecified in the makefile used by the sub-`make' makefile unless you\nuse the `-e' switch (*note Summary of Options: Options Summary.).\n\n   To pass down, or \"export\", a variable, `make' adds the variable and\nits value to the environment for running each command.  The sub-`make',\nin turn, uses the environment to initialize its table of variable\nvalues.  *Note Variables from the Environment: Environment.\n\n   Except by explicit request, `make' exports a variable only if it is\neither defined in the environment initially or set on the command line,\nand if its name consists only of letters, numbers, and underscores.\nSome shells cannot cope with environment variable names consisting of\ncharacters other than letters, numbers, and underscores.\n\n   The value of the `make' variable `SHELL' is not exported.  Instead,\nthe value of the `SHELL' variable from the invoking environment is\npassed to the sub-`make'.  You can force `make' to export its value for\n`SHELL' by using the `export' directive, described below.  *Note\nChoosing the Shell::.\n\n   The special variable `MAKEFLAGS' is always exported (unless you\nunexport it).  `MAKEFILES' is exported if you set it to anything.\n\n   `make' automatically passes down variable values that were defined\non the command line, by putting them in the `MAKEFLAGS' variable.\n*Note Options/Recursion::.\n\n   Variables are _not_ normally passed down if they were created by\ndefault by `make' (*note Variables Used by Implicit Rules: Implicit\nVariables.).  The sub-`make' will define these for itself.\n\n   If you want to export specific variables to a sub-`make', use the\n`export' directive, like this:\n\n     export VARIABLE ...\n\nIf you want to _prevent_ a variable from being exported, use the\n`unexport' directive, like this:\n\n     unexport VARIABLE ...\n\nIn both of these forms, the arguments to `export' and `unexport' are\nexpanded, and so could be variables or functions which expand to a\n(list of) variable names to be (un)exported.\n\n   As a convenience, you can define a variable and export it at the same\ntime by doing:\n\n     export VARIABLE = value\n\nhas the same result as:\n\n     VARIABLE = value\n     export VARIABLE\n\nand\n\n     export VARIABLE := value\n\nhas the same result as:\n\n     VARIABLE := value\n     export VARIABLE\n\n   Likewise,\n\n     export VARIABLE += value\n\nis just like:\n\n     VARIABLE += value\n     export VARIABLE\n\n*Note Appending More Text to Variables: Appending.\n\n   You may notice that the `export' and `unexport' directives work in\n`make' in the same way they work in the shell, `sh'.\n\n   If you want all variables to be exported by default, you can use\n`export' by itself:\n\n     export\n\nThis tells `make' that variables which are not explicitly mentioned in\nan `export' or `unexport' directive should be exported.  Any variable\ngiven in an `unexport' directive will still _not_ be exported.  If you\nuse `export' by itself to export variables by default, variables whose\nnames contain characters other than alphanumerics and underscores will\nnot be exported unless specifically mentioned in an `export' directive.\n\n   The behavior elicited by an `export' directive by itself was the\ndefault in older versions of GNU `make'.  If your makefiles depend on\nthis behavior and you want to be compatible with old versions of\n`make', you can write a rule for the special target\n`.EXPORT_ALL_VARIABLES' instead of using the `export' directive.  This\nwill be ignored by old `make's, while the `export' directive will cause\na syntax error.  \n\n   Likewise, you can use `unexport' by itself to tell `make' _not_ to\nexport variables by default.  Since this is the default behavior, you\nwould only need to do this if `export' had been used by itself earlier\n(in an included makefile, perhaps).  You *cannot* use `export' and\n`unexport' by themselves to have variables exported for some commands\nand not for others.  The last `export' or `unexport' directive that\nappears by itself determines the behavior for the entire run of `make'.\n\n   As a special feature, the variable `MAKELEVEL' is changed when it is\npassed down from level to level.  This variable's value is a string\nwhich is the depth of the level as a decimal number.  The value is `0'\nfor the top-level `make'; `1' for a sub-`make', `2' for a\nsub-sub-`make', and so on.  The incrementation happens when `make' sets\nup the environment for a command.\n\n   The main use of `MAKELEVEL' is to test it in a conditional directive\n(*note Conditional Parts of Makefiles: Conditionals.); this way you can\nwrite a makefile that behaves one way if run recursively and another\nway if run directly by you.\n\n   You can use the variable `MAKEFILES' to cause all sub-`make'\ncommands to use additional makefiles.  The value of `MAKEFILES' is a\nwhitespace-separated list of file names.  This variable, if defined in\nthe outer-level makefile, is passed down through the environment; then\nit serves as a list of extra makefiles for the sub-`make' to read\nbefore the usual or specified ones.  *Note The Variable `MAKEFILES':\nMAKEFILES Variable.\n\n\u001f\nFile: make.info,  Node: Options/Recursion,  Next: -w Option,  Prev: Variables/Recursion,  Up: Recursion\n\n5.7.3 Communicating Options to a Sub-`make'\n-------------------------------------------\n\nFlags such as `-s' and `-k' are passed automatically to the sub-`make'\nthrough the variable `MAKEFLAGS'.  This variable is set up\nautomatically by `make' to contain the flag letters that `make'\nreceived.  Thus, if you do `make -ks' then `MAKEFLAGS' gets the value\n`ks'.\n\n   As a consequence, every sub-`make' gets a value for `MAKEFLAGS' in\nits environment.  In response, it takes the flags from that value and\nprocesses them as if they had been given as arguments.  *Note Summary\nof Options: Options Summary.\n\n   Likewise variables defined on the command line are passed to the\nsub-`make' through `MAKEFLAGS'.  Words in the value of `MAKEFLAGS' that\ncontain `=', `make' treats as variable definitions just as if they\nappeared on the command line.  *Note Overriding Variables: Overriding.\n\n   The options `-C', `-f', `-o', and `-W' are not put into `MAKEFLAGS';\nthese options are not passed down.\n\n   The `-j' option is a special case (*note Parallel Execution:\nParallel.).  If you set it to some numeric value `N' and your operating\nsystem supports it (most any UNIX system will; others typically won't),\nthe parent `make' and all the sub-`make's will communicate to ensure\nthat there are only `N' jobs running at the same time between them all.\nNote that any job that is marked recursive (*note Instead of Executing\nthe Commands: Instead of Execution.)  doesn't count against the total\njobs (otherwise we could get `N' sub-`make's running and have no slots\nleft over for any real work!)\n\n   If your operating system doesn't support the above communication,\nthen `-j 1' is always put into `MAKEFLAGS' instead of the value you\nspecified.  This is because if the `-j' option were passed down to\nsub-`make's, you would get many more jobs running in parallel than you\nasked for.  If you give `-j' with no numeric argument, meaning to run\nas many jobs as possible in parallel, this is passed down, since\nmultiple infinities are no more than one.\n\n   If you do not want to pass the other flags down, you must change the\nvalue of `MAKEFLAGS', like this:\n\n     subsystem:\n             cd subdir && $(MAKE) MAKEFLAGS=\n\n   The command line variable definitions really appear in the variable\n`MAKEOVERRIDES', and `MAKEFLAGS' contains a reference to this variable.\nIf you do want to pass flags down normally, but don't want to pass down\nthe command line variable definitions, you can reset `MAKEOVERRIDES' to\nempty, like this:\n\n     MAKEOVERRIDES =\n\nThis is not usually useful to do.  However, some systems have a small\nfixed limit on the size of the environment, and putting so much\ninformation into the value of `MAKEFLAGS' can exceed it.  If you see\nthe error message `Arg list too long', this may be the problem.  (For\nstrict compliance with POSIX.2, changing `MAKEOVERRIDES' does not\naffect `MAKEFLAGS' if the special target `.POSIX' appears in the\nmakefile.  You probably do not care about this.)\n\n   A similar variable `MFLAGS' exists also, for historical\ncompatibility.  It has the same value as `MAKEFLAGS' except that it\ndoes not contain the command line variable definitions, and it always\nbegins with a hyphen unless it is empty (`MAKEFLAGS' begins with a\nhyphen only when it begins with an option that has no single-letter\nversion, such as `--warn-undefined-variables').  `MFLAGS' was\ntraditionally used explicitly in the recursive `make' command, like\nthis:\n\n     subsystem:\n             cd subdir && $(MAKE) $(MFLAGS)\n\nbut now `MAKEFLAGS' makes this usage redundant.  If you want your\nmakefiles to be compatible with old `make' programs, use this\ntechnique; it will work fine with more modern `make' versions too.\n\n   The `MAKEFLAGS' variable can also be useful if you want to have\ncertain options, such as `-k' (*note Summary of Options: Options\nSummary.), set each time you run `make'.  You simply put a value for\n`MAKEFLAGS' in your environment.  You can also set `MAKEFLAGS' in a\nmakefile, to specify additional flags that should also be in effect for\nthat makefile.  (Note that you cannot use `MFLAGS' this way.  That\nvariable is set only for compatibility; `make' does not interpret a\nvalue you set for it in any way.)\n\n   When `make' interprets the value of `MAKEFLAGS' (either from the\nenvironment or from a makefile), it first prepends a hyphen if the value\ndoes not already begin with one.  Then it chops the value into words\nseparated by blanks, and parses these words as if they were options\ngiven on the command line (except that `-C', `-f', `-h', `-o', `-W',\nand their long-named versions are ignored; and there is no error for an\ninvalid option).\n\n   If you do put `MAKEFLAGS' in your environment, you should be sure not\nto include any options that will drastically affect the actions of\n`make' and undermine the purpose of makefiles and of `make' itself.\nFor instance, the `-t', `-n', and `-q' options, if put in one of these\nvariables, could have disastrous consequences and would certainly have\nat least surprising and probably annoying effects.\n\n\u001f\nFile: make.info,  Node: -w Option,  Prev: Options/Recursion,  Up: Recursion\n\n5.7.4 The `--print-directory' Option\n------------------------------------\n\nIf you use several levels of recursive `make' invocations, the `-w' or\n`--print-directory' option can make the output a lot easier to\nunderstand by showing each directory as `make' starts processing it and\nas `make' finishes processing it.  For example, if `make -w' is run in\nthe directory `/u/gnu/make', `make' will print a line of the form:\n\n     make: Entering directory `/u/gnu/make'.\n\nbefore doing anything else, and a line of the form:\n\n     make: Leaving directory `/u/gnu/make'.\n\nwhen processing is completed.\n\n   Normally, you do not need to specify this option because `make' does\nit for you: `-w' is turned on automatically when you use the `-C'\noption, and in sub-`make's.  `make' will not automatically turn on `-w'\nif you also use `-s', which says to be silent, or if you use\n`--no-print-directory' to explicitly disable it.\n\n\u001f\nFile: make.info,  Node: Sequences,  Next: Empty Commands,  Prev: Recursion,  Up: Commands\n\n5.8 Defining Canned Command Sequences\n=====================================\n\nWhen the same sequence of commands is useful in making various targets,\nyou can define it as a canned sequence with the `define' directive, and\nrefer to the canned sequence from the rules for those targets.  The\ncanned sequence is actually a variable, so the name must not conflict\nwith other variable names.\n\n   Here is an example of defining a canned sequence of commands:\n\n     define run-yacc\n     yacc $(firstword $^)\n     mv y.tab.c $@\n     endef\n   \nHere `run-yacc' is the name of the variable being defined; `endef'\nmarks the end of the definition; the lines in between are the commands.\nThe `define' directive does not expand variable references and function\ncalls in the canned sequence; the `$' characters, parentheses, variable\nnames, and so on, all become part of the value of the variable you are\ndefining.  *Note Defining Variables Verbatim: Defining, for a complete\nexplanation of `define'.\n\n   The first command in this example runs Yacc on the first\nprerequisite of whichever rule uses the canned sequence.  The output\nfile from Yacc is always named `y.tab.c'.  The second command moves the\noutput to the rule's target file name.\n\n   To use the canned sequence, substitute the variable into the\ncommands of a rule.  You can substitute it like any other variable\n(*note Basics of Variable References: Reference.).  Because variables\ndefined by `define' are recursively expanded variables, all the\nvariable references you wrote inside the `define' are expanded now.\nFor example:\n\n     foo.c : foo.y\n             $(run-yacc)\n\n`foo.y' will be substituted for the variable `$^' when it occurs in\n`run-yacc''s value, and `foo.c' for `$@'.\n\n   This is a realistic example, but this particular one is not needed in\npractice because `make' has an implicit rule to figure out these\ncommands based on the file names involved (*note Using Implicit Rules:\nImplicit Rules.).\n\n   In command execution, each line of a canned sequence is treated just\nas if the line appeared on its own in the rule, preceded by a tab.  In\nparticular, `make' invokes a separate subshell for each line.  You can\nuse the special prefix characters that affect command lines (`@', `-',\nand `+') on each line of a canned sequence.  *Note Writing the Commands\nin Rules: Commands.  For example, using this canned sequence:\n\n     define frobnicate\n     @echo \"frobnicating target $@\"\n     frob-step-1 $< -o $@-step-1\n     frob-step-2 $@-step-1 -o $@\n     endef\n\n`make' will not echo the first line, the `echo' command.  But it _will_\necho the following two command lines.\n\n   On the other hand, prefix characters on the command line that refers\nto a canned sequence apply to every line in the sequence.  So the rule:\n\n     frob.out: frob.in\n             @$(frobnicate)\n\ndoes not echo _any_ commands.  (*Note Command Echoing: Echoing, for a\nfull explanation of `@'.)\n\n\u001f\nFile: make.info,  Node: Empty Commands,  Prev: Sequences,  Up: Commands\n\n5.9 Using Empty Commands\n========================\n\nIt is sometimes useful to define commands which do nothing.  This is\ndone simply by giving a command that consists of nothing but\nwhitespace.  For example:\n\n     target: ;\n\ndefines an empty command string for `target'.  You could also use a\nline beginning with a tab character to define an empty command string,\nbut this would be confusing because such a line looks empty.\n\n   You may be wondering why you would want to define a command string\nthat does nothing.  The only reason this is useful is to prevent a\ntarget from getting implicit commands (from implicit rules or the\n`.DEFAULT' special target; *note Implicit Rules:: and *note Defining\nLast-Resort Default Rules: Last Resort.).\n\n   You may be inclined to define empty command strings for targets that\nare not actual files, but only exist so that their prerequisites can be\nremade.  However, this is not the best way to do that, because the\nprerequisites may not be remade properly if the target file actually\ndoes exist.  *Note Phony Targets: Phony Targets, for a better way to do\nthis.\n\n\u001f\nFile: make.info,  Node: Using Variables,  Next: Conditionals,  Prev: Commands,  Up: Top\n\n6 How to Use Variables\n**********************\n\nA \"variable\" is a name defined in a makefile to represent a string of\ntext, called the variable's \"value\".  These values are substituted by\nexplicit request into targets, prerequisites, commands, and other parts\nof the makefile.  (In some other versions of `make', variables are\ncalled \"macros\".)  \n\n   Variables and functions in all parts of a makefile are expanded when\nread, except for the shell commands in rules, the right-hand sides of\nvariable definitions using `=', and the bodies of variable definitions\nusing the `define' directive.\n\n   Variables can represent lists of file names, options to pass to\ncompilers, programs to run, directories to look in for source files,\ndirectories to write output in, or anything else you can imagine.\n\n   A variable name may be any sequence of characters not containing `:',\n`#', `=', or leading or trailing whitespace.  However, variable names\ncontaining characters other than letters, numbers, and underscores\nshould be avoided, as they may be given special meanings in the future,\nand with some shells they cannot be passed through the environment to a\nsub-`make' (*note Communicating Variables to a Sub-`make':\nVariables/Recursion.).\n\n   Variable names are case-sensitive.  The names `foo', `FOO', and\n`Foo' all refer to different variables.\n\n   It is traditional to use upper case letters in variable names, but we\nrecommend using lower case letters for variable names that serve\ninternal purposes in the makefile, and reserving upper case for\nparameters that control implicit rules or for parameters that the user\nshould override with command options (*note Overriding Variables:\nOverriding.).\n\n   A few variables have names that are a single punctuation character or\njust a few characters.  These are the \"automatic variables\", and they\nhave particular specialized uses.  *Note Automatic Variables::.\n\n* Menu:\n\n* Reference::                   How to use the value of a variable.\n* Flavors::                     Variables come in two flavors.\n* Advanced::                    Advanced features for referencing a variable.\n* Values::                      All the ways variables get their values.\n* Setting::                     How to set a variable in the makefile.\n* Appending::                   How to append more text to the old value\n                                  of a variable.\n* Override Directive::          How to set a variable in the makefile even if\n                                  the user has set it with a command argument.\n* Defining::                    An alternate way to set a variable\n                                  to a verbatim string.\n* Environment::                 Variable values can come from the environment.\n* Target-specific::             Variable values can be defined on a per-target\n                                  basis.\n* Pattern-specific::            Target-specific variable values can be applied\n                                  to a group of targets that match a pattern.\n\n\u001f\nFile: make.info,  Node: Reference,  Next: Flavors,  Prev: Using Variables,  Up: Using Variables\n\n6.1 Basics of Variable References\n=================================\n\nTo substitute a variable's value, write a dollar sign followed by the\nname of the variable in parentheses or braces: either `$(foo)' or\n`${foo}' is a valid reference to the variable `foo'.  This special\nsignificance of `$' is why you must write `$$' to have the effect of a\nsingle dollar sign in a file name or command.\n\n   Variable references can be used in any context: targets,\nprerequisites, commands, most directives, and new variable values.\nHere is an example of a common case, where a variable holds the names\nof all the object files in a program:\n\n     objects = program.o foo.o utils.o\n     program : $(objects)\n             cc -o program $(objects)\n\n     $(objects) : defs.h\n\n   Variable references work by strict textual substitution.  Thus, the\nrule\n\n     foo = c\n     prog.o : prog.$(foo)\n             $(foo)$(foo) -$(foo) prog.$(foo)\n\ncould be used to compile a C program `prog.c'.  Since spaces before the\nvariable value are ignored in variable assignments, the value of `foo'\nis precisely `c'.  (Don't actually write your makefiles this way!)\n\n   A dollar sign followed by a character other than a dollar sign,\nopen-parenthesis or open-brace treats that single character as the\nvariable name.  Thus, you could reference the variable `x' with `$x'.\nHowever, this practice is strongly discouraged, except in the case of\nthe automatic variables (*note Automatic Variables::).\n\n\u001f\nFile: make.info,  Node: Flavors,  Next: Advanced,  Prev: Reference,  Up: Using Variables\n\n6.2 The Two Flavors of Variables\n================================\n\nThere are two ways that a variable in GNU `make' can have a value; we\ncall them the two \"flavors\" of variables.  The two flavors are\ndistinguished in how they are defined and in what they do when expanded.\n\n   The first flavor of variable is a \"recursively expanded\" variable.\nVariables of this sort are defined by lines using `=' (*note Setting\nVariables: Setting.) or by the `define' directive (*note Defining\nVariables Verbatim: Defining.).  The value you specify is installed\nverbatim; if it contains references to other variables, these\nreferences are expanded whenever this variable is substituted (in the\ncourse of expanding some other string).  When this happens, it is\ncalled \"recursive expansion\".\n\n   For example,\n\n     foo = $(bar)\n     bar = $(ugh)\n     ugh = Huh?\n\n     all:;echo $(foo)\n\nwill echo `Huh?': `$(foo)' expands to `$(bar)' which expands to\n`$(ugh)' which finally expands to `Huh?'.\n\n   This flavor of variable is the only sort supported by other versions\nof `make'.  It has its advantages and its disadvantages.  An advantage\n(most would say) is that:\n\n     CFLAGS = $(include_dirs) -O\n     include_dirs = -Ifoo -Ibar\n\nwill do what was intended: when `CFLAGS' is expanded in a command, it\nwill expand to `-Ifoo -Ibar -O'.  A major disadvantage is that you\ncannot append something on the end of a variable, as in\n\n     CFLAGS = $(CFLAGS) -O\n\nbecause it will cause an infinite loop in the variable expansion.\n(Actually `make' detects the infinite loop and reports an error.)  \n\n   Another disadvantage is that any functions (*note Functions for\nTransforming Text: Functions.)  referenced in the definition will be\nexecuted every time the variable is expanded.  This makes `make' run\nslower; worse, it causes the `wildcard' and `shell' functions to give\nunpredictable results because you cannot easily control when they are\ncalled, or even how many times.\n\n   To avoid all the problems and inconveniences of recursively expanded\nvariables, there is another flavor: simply expanded variables.\n\n   \"Simply expanded variables\" are defined by lines using `:=' (*note\nSetting Variables: Setting.).  The value of a simply expanded variable\nis scanned once and for all, expanding any references to other\nvariables and functions, when the variable is defined.  The actual\nvalue of the simply expanded variable is the result of expanding the\ntext that you write.  It does not contain any references to other\nvariables; it contains their values _as of the time this variable was\ndefined_.  Therefore,\n\n     x := foo\n     y := $(x) bar\n     x := later\n\nis equivalent to\n\n     y := foo bar\n     x := later\n\n   When a simply expanded variable is referenced, its value is\nsubstituted verbatim.\n\n   Here is a somewhat more complicated example, illustrating the use of\n`:=' in conjunction with the `shell' function.  (*Note The `shell'\nFunction: Shell Function.)  This example also shows use of the variable\n`MAKELEVEL', which is changed when it is passed down from level to\nlevel.  (*Note Communicating Variables to a Sub-`make':\nVariables/Recursion, for information about `MAKELEVEL'.)\n\n     ifeq (0,${MAKELEVEL})\n     whoami    := $(shell whoami)\n     host-type := $(shell arch)\n     MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}\n     endif\n\nAn advantage of this use of `:=' is that a typical `descend into a\ndirectory' command then looks like this:\n\n     ${subdirs}:\n             ${MAKE} -C $@ all\n\n   Simply expanded variables generally make complicated makefile\nprogramming more predictable because they work like variables in most\nprogramming languages.  They allow you to redefine a variable using its\nown value (or its value processed in some way by one of the expansion\nfunctions) and to use the expansion functions much more efficiently\n(*note Functions for Transforming Text: Functions.).\n\n   You can also use them to introduce controlled leading whitespace into\nvariable values.  Leading whitespace characters are discarded from your\ninput before substitution of variable references and function calls;\nthis means you can include leading spaces in a variable value by\nprotecting them with variable references, like this:\n\n     nullstring :=\n     space := $(nullstring) # end of the line\n\nHere the value of the variable `space' is precisely one space.  The\ncomment `# end of the line' is included here just for clarity.  Since\ntrailing space characters are _not_ stripped from variable values, just\na space at the end of the line would have the same effect (but be\nrather hard to read).  If you put whitespace at the end of a variable\nvalue, it is a good idea to put a comment like that at the end of the\nline to make your intent clear.  Conversely, if you do _not_ want any\nwhitespace characters at the end of your variable value, you must\nremember not to put a random comment on the end of the line after some\nwhitespace, such as this:\n\n     dir := /foo/bar    # directory to put the frobs in\n\nHere the value of the variable `dir' is `/foo/bar    ' (with four\ntrailing spaces), which was probably not the intention.  (Imagine\nsomething like `$(dir)/file' with this definition!)\n\n   There is another assignment operator for variables, `?='.  This is\ncalled a conditional variable assignment operator, because it only has\nan effect if the variable is not yet defined.  This statement:\n\n     FOO ?= bar\n\nis exactly equivalent to this (*note The `origin' Function: Origin\nFunction.):\n\n     ifeq ($(origin FOO), undefined)\n       FOO = bar\n     endif\n\n   Note that a variable set to an empty value is still defined, so `?='\nwill not set that variable.\n\n\u001f\nFile: make.info,  Node: Advanced,  Next: Values,  Prev: Flavors,  Up: Using Variables\n\n6.3 Advanced Features for Reference to Variables\n================================================\n\nThis section describes some advanced features you can use to reference\nvariables in more flexible ways.\n\n* Menu:\n\n* Substitution Refs::           Referencing a variable with\n                                  substitutions on the value.\n* Computed Names::              Computing the name of the variable to refer to.\n\n\u001f\nFile: make.info,  Node: Substitution Refs,  Next: Computed Names,  Prev: Advanced,  Up: Advanced\n\n6.3.1 Substitution References\n-----------------------------\n\nA \"substitution reference\" substitutes the value of a variable with\nalterations that you specify.  It has the form `$(VAR:A=B)' (or\n`${VAR:A=B}') and its meaning is to take the value of the variable VAR,\nreplace every A at the end of a word with B in that value, and\nsubstitute the resulting string.\n\n   When we say \"at the end of a word\", we mean that A must appear\neither followed by whitespace or at the end of the value in order to be\nreplaced; other occurrences of A in the value are unaltered.  For\nexample:\n\n     foo := a.o b.o c.o\n     bar := $(foo:.o=.c)\n\nsets `bar' to `a.c b.c c.c'.  *Note Setting Variables: Setting.\n\n   A substitution reference is actually an abbreviation for use of the\n`patsubst' expansion function (*note Functions for String Substitution\nand Analysis: Text Functions.).  We provide substitution references as\nwell as `patsubst' for compatibility with other implementations of\n`make'.\n\n   Another type of substitution reference lets you use the full power of\nthe `patsubst' function.  It has the same form `$(VAR:A=B)' described\nabove, except that now A must contain a single `%' character.  This\ncase is equivalent to `$(patsubst A,B,$(VAR))'.  *Note Functions for\nString Substitution and Analysis: Text Functions, for a description of\nthe `patsubst' function.\n\nFor example:\n\n     foo := a.o b.o c.o\n     bar := $(foo:%.o=%.c)\n\nsets `bar' to `a.c b.c c.c'.\n\n\u001f\nFile: make.info,  Node: Computed Names,  Prev: Substitution Refs,  Up: Advanced\n\n6.3.2 Computed Variable Names\n-----------------------------\n\nComputed variable names are a complicated concept needed only for\nsophisticated makefile programming.  For most purposes you need not\nconsider them, except to know that making a variable with a dollar sign\nin its name might have strange results.  However, if you are the type\nthat wants to understand everything, or you are actually interested in\nwhat they do, read on.\n\n   Variables may be referenced inside the name of a variable.  This is\ncalled a \"computed variable name\" or a \"nested variable reference\".\nFor example,\n\n     x = y\n     y = z\n     a := $($(x))\n\ndefines `a' as `z': the `$(x)' inside `$($(x))' expands to `y', so\n`$($(x))' expands to `$(y)' which in turn expands to `z'.  Here the\nname of the variable to reference is not stated explicitly; it is\ncomputed by expansion of `$(x)'.  The reference `$(x)' here is nested\nwithin the outer variable reference.\n\n   The previous example shows two levels of nesting, but any number of\nlevels is possible.  For example, here are three levels:\n\n     x = y\n     y = z\n     z = u\n     a := $($($(x)))\n\nHere the innermost `$(x)' expands to `y', so `$($(x))' expands to\n`$(y)' which in turn expands to `z'; now we have `$(z)', which becomes\n`u'.\n\n   References to recursively-expanded variables within a variable name\nare reexpanded in the usual fashion.  For example:\n\n     x = $(y)\n     y = z\n     z = Hello\n     a := $($(x))\n\ndefines `a' as `Hello': `$($(x))' becomes `$($(y))' which becomes\n`$(z)' which becomes `Hello'.\n\n   Nested variable references can also contain modified references and\nfunction invocations (*note Functions for Transforming Text:\nFunctions.), just like any other reference.  For example, using the\n`subst' function (*note Functions for String Substitution and Analysis:\nText Functions.):\n\n     x = variable1\n     variable2 := Hello\n     y = $(subst 1,2,$(x))\n     z = y\n     a := $($($(z)))\n\neventually defines `a' as `Hello'.  It is doubtful that anyone would\never want to write a nested reference as convoluted as this one, but it\nworks: `$($($(z)))' expands to `$($(y))' which becomes `$($(subst\n1,2,$(x)))'.  This gets the value `variable1' from `x' and changes it\nby substitution to `variable2', so that the entire string becomes\n`$(variable2)', a simple variable reference whose value is `Hello'.\n\n   A computed variable name need not consist entirely of a single\nvariable reference.  It can contain several variable references, as\nwell as some invariant text.  For example,\n\n     a_dirs := dira dirb\n     1_dirs := dir1 dir2\n\n     a_files := filea fileb\n     1_files := file1 file2\n\n     ifeq \"$(use_a)\" \"yes\"\n     a1 := a\n     else\n     a1 := 1\n     endif\n\n     ifeq \"$(use_dirs)\" \"yes\"\n     df := dirs\n     else\n     df := files\n     endif\n\n     dirs := $($(a1)_$(df))\n\nwill give `dirs' the same value as `a_dirs', `1_dirs', `a_files' or\n`1_files' depending on the settings of `use_a' and `use_dirs'.\n\n   Computed variable names can also be used in substitution references:\n\n     a_objects := a.o b.o c.o\n     1_objects := 1.o 2.o 3.o\n\n     sources := $($(a1)_objects:.o=.c)\n\ndefines `sources' as either `a.c b.c c.c' or `1.c 2.c 3.c', depending\non the value of `a1'.\n\n   The only restriction on this sort of use of nested variable\nreferences is that they cannot specify part of the name of a function\nto be called.  This is because the test for a recognized function name\nis done before the expansion of nested references.  For example,\n\n     ifdef do_sort\n     func := sort\n     else\n     func := strip\n     endif\n\n     bar := a d b g q c\n\n     foo := $($(func) $(bar))\n\nattempts to give `foo' the value of the variable `sort a d b g q c' or\n`strip a d b g q c', rather than giving `a d b g q c' as the argument\nto either the `sort' or the `strip' function.  This restriction could\nbe removed in the future if that change is shown to be a good idea.\n\n   You can also use computed variable names in the left-hand side of a\nvariable assignment, or in a `define' directive, as in:\n\n     dir = foo\n     $(dir)_sources := $(wildcard $(dir)/*.c)\n     define $(dir)_print\n     lpr $($(dir)_sources)\n     endef\n\nThis example defines the variables `dir', `foo_sources', and\n`foo_print'.\n\n   Note that \"nested variable references\" are quite different from\n\"recursively expanded variables\" (*note The Two Flavors of Variables:\nFlavors.), though both are used together in complex ways when doing\nmakefile programming.\n\n\u001f\nFile: make.info,  Node: Values,  Next: Setting,  Prev: Advanced,  Up: Using Variables\n\n6.4 How Variables Get Their Values\n==================================\n\nVariables can get values in several different ways:\n\n   * You can specify an overriding value when you run `make'.  *Note\n     Overriding Variables: Overriding.\n\n   * You can specify a value in the makefile, either with an assignment\n     (*note Setting Variables: Setting.) or with a verbatim definition\n     (*note Defining Variables Verbatim: Defining.).\n\n   * Variables in the environment become `make' variables.  *Note\n     Variables from the Environment: Environment.\n\n   * Several \"automatic\" variables are given new values for each rule.\n     Each of these has a single conventional use.  *Note Automatic\n     Variables::.\n\n   * Several variables have constant initial values.  *Note Variables\n     Used by Implicit Rules: Implicit Variables.\n\n\u001f\nFile: make.info,  Node: Setting,  Next: Appending,  Prev: Values,  Up: Using Variables\n\n6.5 Setting Variables\n=====================\n\nTo set a variable from the makefile, write a line starting with the\nvariable name followed by `=' or `:='.  Whatever follows the `=' or\n`:=' on the line becomes the value.  For example,\n\n     objects = main.o foo.o bar.o utils.o\n\ndefines a variable named `objects'.  Whitespace around the variable\nname and immediately after the `=' is ignored.\n\n   Variables defined with `=' are \"recursively expanded\" variables.\nVariables defined with `:=' are \"simply expanded\" variables; these\ndefinitions can contain variable references which will be expanded\nbefore the definition is made.  *Note The Two Flavors of Variables:\nFlavors.\n\n   The variable name may contain function and variable references, which\nare expanded when the line is read to find the actual variable name to\nuse.\n\n   There is no limit on the length of the value of a variable except the\namount of swapping space on the computer.  When a variable definition is\nlong, it is a good idea to break it into several lines by inserting\nbackslash-newline at convenient places in the definition.  This will not\naffect the functioning of `make', but it will make the makefile easier\nto read.\n\n   Most variable names are considered to have the empty string as a\nvalue if you have never set them.  Several variables have built-in\ninitial values that are not empty, but you can set them in the usual\nways (*note Variables Used by Implicit Rules: Implicit Variables.).\nSeveral special variables are set automatically to a new value for each\nrule; these are called the \"automatic\" variables (*note Automatic\nVariables::).\n\n   If you'd like a variable to be set to a value only if it's not\nalready set, then you can use the shorthand operator `?=' instead of\n`='.  These two settings of the variable `FOO' are identical (*note The\n`origin' Function: Origin Function.):\n\n     FOO ?= bar\n\nand\n\n     ifeq ($(origin FOO), undefined)\n     FOO = bar\n     endif\n\n\u001f\nFile: make.info,  Node: Appending,  Next: Override Directive,  Prev: Setting,  Up: Using Variables\n\n6.6 Appending More Text to Variables\n====================================\n\nOften it is useful to add more text to the value of a variable already\ndefined.  You do this with a line containing `+=', like this:\n\n     objects += another.o\n\nThis takes the value of the variable `objects', and adds the text\n`another.o' to it (preceded by a single space).  Thus:\n\n     objects = main.o foo.o bar.o utils.o\n     objects += another.o\n\nsets `objects' to `main.o foo.o bar.o utils.o another.o'.\n\n   Using `+=' is similar to:\n\n     objects = main.o foo.o bar.o utils.o\n     objects := $(objects) another.o\n\nbut differs in ways that become important when you use more complex\nvalues.\n\n   When the variable in question has not been defined before, `+=' acts\njust like normal `=': it defines a recursively-expanded variable.\nHowever, when there _is_ a previous definition, exactly what `+=' does\ndepends on what flavor of variable you defined originally.  *Note The\nTwo Flavors of Variables: Flavors, for an explanation of the two\nflavors of variables.\n\n   When you add to a variable's value with `+=', `make' acts\nessentially as if you had included the extra text in the initial\ndefinition of the variable.  If you defined it first with `:=', making\nit a simply-expanded variable, `+=' adds to that simply-expanded\ndefinition, and expands the new text before appending it to the old\nvalue just as `:=' does (see *note Setting Variables: Setting, for a\nfull explanation of `:=').  In fact,\n\n     variable := value\n     variable += more\n\nis exactly equivalent to:\n\n\n     variable := value\n     variable := $(variable) more\n\n   On the other hand, when you use `+=' with a variable that you defined\nfirst to be recursively-expanded using plain `=', `make' does something\na bit different.  Recall that when you define a recursively-expanded\nvariable, `make' does not expand the value you set for variable and\nfunction references immediately.  Instead it stores the text verbatim,\nand saves these variable and function references to be expanded later,\nwhen you refer to the new variable (*note The Two Flavors of Variables:\nFlavors.).  When you use `+=' on a recursively-expanded variable, it is\nthis unexpanded text to which `make' appends the new text you specify.\n\n     variable = value\n     variable += more\n\nis roughly equivalent to:\n\n     temp = value\n     variable = $(temp) more\n\nexcept that of course it never defines a variable called `temp'.  The\nimportance of this comes when the variable's old value contains\nvariable references.  Take this common example:\n\n     CFLAGS = $(includes) -O\n     ...\n     CFLAGS += -pg # enable profiling\n\nThe first line defines the `CFLAGS' variable with a reference to another\nvariable, `includes'.  (`CFLAGS' is used by the rules for C\ncompilation; *note Catalogue of Implicit Rules: Catalogue of Rules.)\nUsing `=' for the definition makes `CFLAGS' a recursively-expanded\nvariable, meaning `$(includes) -O' is _not_ expanded when `make'\nprocesses the definition of `CFLAGS'.  Thus, `includes' need not be\ndefined yet for its value to take effect.  It only has to be defined\nbefore any reference to `CFLAGS'.  If we tried to append to the value\nof `CFLAGS' without using `+=', we might do it like this:\n\n     CFLAGS := $(CFLAGS) -pg # enable profiling\n\nThis is pretty close, but not quite what we want.  Using `:=' redefines\n`CFLAGS' as a simply-expanded variable; this means `make' expands the\ntext `$(CFLAGS) -pg' before setting the variable.  If `includes' is not\nyet defined, we get ` -O -pg', and a later definition of `includes'\nwill have no effect.  Conversely, by using `+=' we set `CFLAGS' to the\n_unexpanded_ value `$(includes) -O -pg'.  Thus we preserve the\nreference to `includes', so if that variable gets defined at any later\npoint, a reference like `$(CFLAGS)' still uses its value.\n\n\u001f\nFile: make.info,  Node: Override Directive,  Next: Defining,  Prev: Appending,  Up: Using Variables\n\n6.7 The `override' Directive\n============================\n\nIf a variable has been set with a command argument (*note Overriding\nVariables: Overriding.), then ordinary assignments in the makefile are\nignored.  If you want to set the variable in the makefile even though\nit was set with a command argument, you can use an `override'\ndirective, which is a line that looks like this:\n\n     override VARIABLE = VALUE\n\nor\n\n     override VARIABLE := VALUE\n\n   To append more text to a variable defined on the command line, use:\n\n     override VARIABLE += MORE TEXT\n\n*Note Appending More Text to Variables: Appending.\n\n   The `override' directive was not invented for escalation in the war\nbetween makefiles and command arguments.  It was invented so you can\nalter and add to values that the user specifies with command arguments.\n\n   For example, suppose you always want the `-g' switch when you run the\nC compiler, but you would like to allow the user to specify the other\nswitches with a command argument just as usual.  You could use this\n`override' directive:\n\n     override CFLAGS += -g\n\n   You can also use `override' directives with `define' directives.\nThis is done as you might expect:\n\n     override define foo\n     bar\n     endef\n\n*Note Defining Variables Verbatim: Defining.\n\n\u001f\nFile: make.info,  Node: Defining,  Next: Environment,  Prev: Override Directive,  Up: Using Variables\n\n6.8 Defining Variables Verbatim\n===============================\n\nAnother way to set the value of a variable is to use the `define'\ndirective.  This directive has an unusual syntax which allows newline\ncharacters to be included in the value, which is convenient for defining\nboth canned sequences of commands (*note Defining Canned Command\nSequences: Sequences.), and also sections of makefile syntax to use\nwith `eval' (*note Eval Function::).\n\n   The `define' directive is followed on the same line by the name of\nthe variable and nothing more.  The value to give the variable appears\non the following lines.  The end of the value is marked by a line\ncontaining just the word `endef'.  Aside from this difference in\nsyntax, `define' works just like `=': it creates a recursively-expanded\nvariable (*note The Two Flavors of Variables: Flavors.).  The variable\nname may contain function and variable references, which are expanded\nwhen the directive is read to find the actual variable name to use.\n\n   You may nest `define' directives: `make' will keep track of nested\ndirectives and report an error if they are not all properly closed with\n`endef'.  Note that lines beginning with tab characters are considered\npart of a command script, so any `define' or `endef' strings appearing\non such a line will not be considered `make' operators.\n\n     define two-lines\n     echo foo\n     echo $(bar)\n     endef\n\n   The value in an ordinary assignment cannot contain a newline; but the\nnewlines that separate the lines of the value in a `define' become part\nof the variable's value (except for the final newline which precedes\nthe `endef' and is not considered part of the value).\n\n   When used in a command script, the previous example is functionally\nequivalent to this:\n\n     two-lines = echo foo; echo $(bar)\n\nsince two commands separated by semicolon behave much like two separate\nshell commands.  However, note that using two separate lines means\n`make' will invoke the shell twice, running an independent subshell for\neach line.  *Note Command Execution: Execution.\n\n   If you want variable definitions made with `define' to take\nprecedence over command-line variable definitions, you can use the\n`override' directive together with `define':\n\n     override define two-lines\n     foo\n     $(bar)\n     endef\n\n*Note The `override' Directive: Override Directive.\n\n\u001f\nFile: make.info,  Node: Environment,  Next: Target-specific,  Prev: Defining,  Up: Using Variables\n\n6.9 Variables from the Environment\n==================================\n\nVariables in `make' can come from the environment in which `make' is\nrun.  Every environment variable that `make' sees when it starts up is\ntransformed into a `make' variable with the same name and value.\nHowever, an explicit assignment in the makefile, or with a command\nargument, overrides the environment.  (If the `-e' flag is specified,\nthen values from the environment override assignments in the makefile.\n*Note Summary of Options: Options Summary.  But this is not recommended\npractice.)\n\n   Thus, by setting the variable `CFLAGS' in your environment, you can\ncause all C compilations in most makefiles to use the compiler switches\nyou prefer.  This is safe for variables with standard or conventional\nmeanings because you know that no makefile will use them for other\nthings.  (Note this is not totally reliable; some makefiles set\n`CFLAGS' explicitly and therefore are not affected by the value in the\nenvironment.)\n\n   When `make' runs a command script, variables defined in the makefile\nare placed into the environment of that command.  This allows you to\npass values to sub-`make' invocations (*note Recursive Use of `make':\nRecursion.).  By default, only variables that came from the environment\nor the command line are passed to recursive invocations.  You can use\nthe `export' directive to pass other variables.  *Note Communicating\nVariables to a Sub-`make': Variables/Recursion, for full details.\n\n   Other use of variables from the environment is not recommended.  It\nis not wise for makefiles to depend for their functioning on\nenvironment variables set up outside their control, since this would\ncause different users to get different results from the same makefile.\nThis is against the whole purpose of most makefiles.\n\n   Such problems would be especially likely with the variable `SHELL',\nwhich is normally present in the environment to specify the user's\nchoice of interactive shell.  It would be very undesirable for this\nchoice to affect `make'; so, `make' handles the `SHELL' environment\nvariable in a special way; see *note Choosing the Shell::.\n\n\u001f\nFile: make.info,  Node: Target-specific,  Next: Pattern-specific,  Prev: Environment,  Up: Using Variables\n\n6.10 Target-specific Variable Values\n====================================\n\nVariable values in `make' are usually global; that is, they are the\nsame regardless of where they are evaluated (unless they're reset, of\ncourse).  One exception to that is automatic variables (*note Automatic\nVariables::).\n\n   The other exception is \"target-specific variable values\".  This\nfeature allows you to define different values for the same variable,\nbased on the target that `make' is currently building.  As with\nautomatic variables, these values are only available within the context\nof a target's command script (and in other target-specific assignments).\n\n   Set a target-specific variable value like this:\n\n     TARGET ... : VARIABLE-ASSIGNMENT\n\nor like this:\n\n     TARGET ... : override VARIABLE-ASSIGNMENT\n\nor like this:\n\n     TARGET ... : export VARIABLE-ASSIGNMENT\n\n   Multiple TARGET values create a target-specific variable value for\neach member of the target list individually.\n\n   The VARIABLE-ASSIGNMENT can be any valid form of assignment;\nrecursive (`='), static (`:='), appending (`+='), or conditional\n(`?=').  All variables that appear within the VARIABLE-ASSIGNMENT are\nevaluated within the context of the target: thus, any\npreviously-defined target-specific variable values will be in effect.\nNote that this variable is actually distinct from any \"global\" value:\nthe two variables do not have to have the same flavor (recursive vs.\nstatic).\n\n   Target-specific variables have the same priority as any other\nmakefile variable.  Variables provided on the command-line (and in the\nenvironment if the `-e' option is in force) will take precedence.\nSpecifying the `override' directive will allow the target-specific\nvariable value to be preferred.\n\n   There is one more special feature of target-specific variables: when\nyou define a target-specific variable that variable value is also in\neffect for all prerequisites of this target, and all their\nprerequisites, etc. (unless those prerequisites override that variable\nwith their own target-specific variable value).  So, for example, a\nstatement like this:\n\n     prog : CFLAGS = -g\n     prog : prog.o foo.o bar.o\n\nwill set `CFLAGS' to `-g' in the command script for `prog', but it will\nalso set `CFLAGS' to `-g' in the command scripts that create `prog.o',\n`foo.o', and `bar.o', and any command scripts which create their\nprerequisites.\n\n   Be aware that a given prerequisite will only be built once per\ninvocation of make, at most.  If the same file is a prerequisite of\nmultiple targets, and each of those targets has a different value for\nthe same target-specific variable, then the first target to be built\nwill cause that prerequisite to be built and the prerequisite will\ninherit the target-specific value from the first target.  It will\nignore the target-specific values from any other targets.\n\n\u001f\nFile: make.info,  Node: Pattern-specific,  Prev: Target-specific,  Up: Using Variables\n\n6.11 Pattern-specific Variable Values\n=====================================\n\nIn addition to target-specific variable values (*note Target-specific\nVariable Values: Target-specific.), GNU `make' supports\npattern-specific variable values.  In this form, the variable is\ndefined for any target that matches the pattern specified.  If a target\nmatches more than one pattern, all the matching pattern-specific\nvariables are interpreted in the order in which they were defined in\nthe makefile, and collected together into one set.  Variables defined\nin this way are searched after any target-specific variables defined\nexplicitly for that target, and before target-specific variables\ndefined for the parent target.\n\n   Set a pattern-specific variable value like this:\n\n     PATTERN ... : VARIABLE-ASSIGNMENT\n\nor like this:\n\n     PATTERN ... : override VARIABLE-ASSIGNMENT\n\nwhere PATTERN is a %-pattern.  As with target-specific variable values,\nmultiple PATTERN values create a pattern-specific variable value for\neach pattern individually.  The VARIABLE-ASSIGNMENT can be any valid\nform of assignment.  Any command-line variable setting will take\nprecedence, unless `override' is specified.\n\n   For example:\n\n     %.o : CFLAGS = -O\n\nwill assign `CFLAGS' the value of `-O' for all targets matching the\npattern `%.o'.\n\n\u001f\nFile: make.info,  Node: Conditionals,  Next: Functions,  Prev: Using Variables,  Up: Top\n\n7 Conditional Parts of Makefiles\n********************************\n\nA \"conditional\" causes part of a makefile to be obeyed or ignored\ndepending on the values of variables.  Conditionals can compare the\nvalue of one variable to another, or the value of a variable to a\nconstant string.  Conditionals control what `make' actually \"sees\" in\nthe makefile, so they _cannot_ be used to control shell commands at the\ntime of execution.\n\n* Menu:\n\n* Conditional Example::         Example of a conditional\n* Conditional Syntax::          The syntax of conditionals.\n* Testing Flags::               Conditionals that test flags.\n\n\u001f\nFile: make.info,  Node: Conditional Example,  Next: Conditional Syntax,  Prev: Conditionals,  Up: Conditionals\n\n7.1 Example of a Conditional\n============================\n\nThe following example of a conditional tells `make' to use one set of\nlibraries if the `CC' variable is `gcc', and a different set of\nlibraries otherwise.  It works by controlling which of two command\nlines will be used as the command for a rule.  The result is that\n`CC=gcc' as an argument to `make' changes not only which compiler is\nused but also which libraries are linked.\n\n     libs_for_gcc = -lgnu\n     normal_libs =\n\n     foo: $(objects)\n     ifeq ($(CC),gcc)\n             $(CC) -o foo $(objects) $(libs_for_gcc)\n     else\n             $(CC) -o foo $(objects) $(normal_libs)\n     endif\n\n   This conditional uses three directives: one `ifeq', one `else' and\none `endif'.\n\n   The `ifeq' directive begins the conditional, and specifies the\ncondition.  It contains two arguments, separated by a comma and\nsurrounded by parentheses.  Variable substitution is performed on both\narguments and then they are compared.  The lines of the makefile\nfollowing the `ifeq' are obeyed if the two arguments match; otherwise\nthey are ignored.\n\n   The `else' directive causes the following lines to be obeyed if the\nprevious conditional failed.  In the example above, this means that the\nsecond alternative linking command is used whenever the first\nalternative is not used.  It is optional to have an `else' in a\nconditional.\n\n   The `endif' directive ends the conditional.  Every conditional must\nend with an `endif'.  Unconditional makefile text follows.\n\n   As this example illustrates, conditionals work at the textual level:\nthe lines of the conditional are treated as part of the makefile, or\nignored, according to the condition.  This is why the larger syntactic\nunits of the makefile, such as rules, may cross the beginning or the\nend of the conditional.\n\n   When the variable `CC' has the value `gcc', the above example has\nthis effect:\n\n     foo: $(objects)\n             $(CC) -o foo $(objects) $(libs_for_gcc)\n\nWhen the variable `CC' has any other value, the effect is this:\n\n     foo: $(objects)\n             $(CC) -o foo $(objects) $(normal_libs)\n\n   Equivalent results can be obtained in another way by\nconditionalizing a variable assignment and then using the variable\nunconditionally:\n\n     libs_for_gcc = -lgnu\n     normal_libs =\n\n     ifeq ($(CC),gcc)\n       libs=$(libs_for_gcc)\n     else\n       libs=$(normal_libs)\n     endif\n\n     foo: $(objects)\n             $(CC) -o foo $(objects) $(libs)\n\n\u001f\nFile: make.info,  Node: Conditional Syntax,  Next: Testing Flags,  Prev: Conditional Example,  Up: Conditionals\n\n7.2 Syntax of Conditionals\n==========================\n\nThe syntax of a simple conditional with no `else' is as follows:\n\n     CONDITIONAL-DIRECTIVE\n     TEXT-IF-TRUE\n     endif\n\nThe TEXT-IF-TRUE may be any lines of text, to be considered as part of\nthe makefile if the condition is true.  If the condition is false, no\ntext is used instead.\n\n   The syntax of a complex conditional is as follows:\n\n     CONDITIONAL-DIRECTIVE\n     TEXT-IF-TRUE\n     else\n     TEXT-IF-FALSE\n     endif\n\n   or:\n\n     CONDITIONAL-DIRECTIVE\n     TEXT-IF-ONE-IS-TRUE\n     else CONDITIONAL-DIRECTIVE\n     TEXT-IF-TRUE\n     else\n     TEXT-IF-FALSE\n     endif\n\nThere can be as many \"`else' CONDITIONAL-DIRECTIVE\" clauses as\nnecessary.  Once a given condition is true, TEXT-IF-TRUE is used and no\nother clause is used; if no condition is true then TEXT-IF-FALSE is\nused.  The TEXT-IF-TRUE and TEXT-IF-FALSE can be any number of lines of\ntext.\n\n   The syntax of the CONDITIONAL-DIRECTIVE is the same whether the\nconditional is simple or complex; after an `else' or not.  There are\nfour different directives that test different conditions.  Here is a\ntable of them:\n\n`ifeq (ARG1, ARG2)'\n`ifeq 'ARG1' 'ARG2''\n`ifeq \"ARG1\" \"ARG2\"'\n`ifeq \"ARG1\" 'ARG2''\n`ifeq 'ARG1' \"ARG2\"'\n     Expand all variable references in ARG1 and ARG2 and compare them.\n     If they are identical, the TEXT-IF-TRUE is effective; otherwise,\n     the TEXT-IF-FALSE, if any, is effective.\n\n     Often you want to test if a variable has a non-empty value.  When\n     the value results from complex expansions of variables and\n     functions, expansions you would consider empty may actually\n     contain whitespace characters and thus are not seen as empty.\n     However, you can use the `strip' function (*note Text Functions::)\n     to avoid interpreting whitespace as a non-empty value.  For\n     example:\n\n          ifeq ($(strip $(foo)),)\n          TEXT-IF-EMPTY\n          endif\n\n     will evaluate TEXT-IF-EMPTY even if the expansion of `$(foo)'\n     contains whitespace characters.\n\n`ifneq (ARG1, ARG2)'\n`ifneq 'ARG1' 'ARG2''\n`ifneq \"ARG1\" \"ARG2\"'\n`ifneq \"ARG1\" 'ARG2''\n`ifneq 'ARG1' \"ARG2\"'\n     Expand all variable references in ARG1 and ARG2 and compare them.\n     If they are different, the TEXT-IF-TRUE is effective; otherwise,\n     the TEXT-IF-FALSE, if any, is effective.\n\n`ifdef VARIABLE-NAME'\n     The `ifdef' form takes the _name_ of a variable as its argument,\n     not a reference to a variable.  The value of that variable has a\n     non-empty value, the TEXT-IF-TRUE is effective; otherwise, the\n     TEXT-IF-FALSE, if any, is effective.  Variables that have never\n     been defined have an empty value.  The text VARIABLE-NAME is\n     expanded, so it could be a variable or function that expands to\n     the name of a variable.  For example:\n\n          bar = true\n          foo = bar\n          ifdef $(foo)\n          frobozz = yes\n          endif\n\n     The variable reference `$(foo)' is expanded, yielding `bar', which\n     is considered to be the name of a variable.  The variable `bar' is\n     not expanded, but its value is examined to determine if it is\n     non-empty.\n\n     Note that `ifdef' only tests whether a variable has a value.  It\n     does not expand the variable to see if that value is nonempty.\n     Consequently, tests using `ifdef' return true for all definitions\n     except those like `foo ='.  To test for an empty value, use\n     `ifeq ($(foo),)'.  For example,\n\n          bar =\n          foo = $(bar)\n          ifdef foo\n          frobozz = yes\n          else\n          frobozz = no\n          endif\n\n     sets `frobozz' to `yes', while:\n\n          foo =\n          ifdef foo\n          frobozz = yes\n          else\n          frobozz = no\n          endif\n\n     sets `frobozz' to `no'.\n\n`ifndef VARIABLE-NAME'\n     If the variable VARIABLE-NAME has an empty value, the TEXT-IF-TRUE\n     is effective; otherwise, the TEXT-IF-FALSE, if any, is effective.\n     The rules for expansion and testing of VARIABLE-NAME are identical\n     to the `ifdef' directive.\n\n   Extra spaces are allowed and ignored at the beginning of the\nconditional directive line, but a tab is not allowed.  (If the line\nbegins with a tab, it will be considered a command for a rule.)  Aside\nfrom this, extra spaces or tabs may be inserted with no effect anywhere\nexcept within the directive name or within an argument.  A comment\nstarting with `#' may appear at the end of the line.\n\n   The other two directives that play a part in a conditional are `else'\nand `endif'.  Each of these directives is written as one word, with no\narguments.  Extra spaces are allowed and ignored at the beginning of the\nline, and spaces or tabs at the end.  A comment starting with `#' may\nappear at the end of the line.\n\n   Conditionals affect which lines of the makefile `make' uses.  If the\ncondition is true, `make' reads the lines of the TEXT-IF-TRUE as part\nof the makefile; if the condition is false, `make' ignores those lines\ncompletely.  It follows that syntactic units of the makefile, such as\nrules, may safely be split across the beginning or the end of the\nconditional.\n\n   `make' evaluates conditionals when it reads a makefile.\nConsequently, you cannot use automatic variables in the tests of\nconditionals because they are not defined until commands are run (*note\nAutomatic Variables::).\n\n   To prevent intolerable confusion, it is not permitted to start a\nconditional in one makefile and end it in another.  However, you may\nwrite an `include' directive within a conditional, provided you do not\nattempt to terminate the conditional inside the included file.\n\n\u001f\nFile: make.info,  Node: Testing Flags,  Prev: Conditional Syntax,  Up: Conditionals\n\n7.3 Conditionals that Test Flags\n================================\n\nYou can write a conditional that tests `make' command flags such as\n`-t' by using the variable `MAKEFLAGS' together with the `findstring'\nfunction (*note Functions for String Substitution and Analysis: Text\nFunctions.).  This is useful when `touch' is not enough to make a file\nappear up to date.\n\n   The `findstring' function determines whether one string appears as a\nsubstring of another.  If you want to test for the `-t' flag, use `t'\nas the first string and the value of `MAKEFLAGS' as the other.\n\n   For example, here is how to arrange to use `ranlib -t' to finish\nmarking an archive file up to date:\n\n     archive.a: ...\n     ifneq (,$(findstring t,$(MAKEFLAGS)))\n             +touch archive.a\n             +ranlib -t archive.a\n     else\n             ranlib archive.a\n     endif\n\nThe `+' prefix marks those command lines as \"recursive\" so that they\nwill be executed despite use of the `-t' flag.  *Note Recursive Use of\n`make': Recursion.\n\n\u001f\nFile: make.info,  Node: Functions,  Next: Running,  Prev: Conditionals,  Up: Top\n\n8 Functions for Transforming Text\n*********************************\n\n\"Functions\" allow you to do text processing in the makefile to compute\nthe files to operate on or the commands to use.  You use a function in a\n\"function call\", where you give the name of the function and some text\n(the \"arguments\") for the function to operate on.  The result of the\nfunction's processing is substituted into the makefile at the point of\nthe call, just as a variable might be substituted.\n\n* Menu:\n\n* Syntax of Functions::         How to write a function call.\n* Text Functions::              General-purpose text manipulation functions.\n* File Name Functions::         Functions for manipulating file names.\n* Conditional Functions::       Functions that implement conditions.\n* Foreach Function::            Repeat some text with controlled variation.\n* Call Function::               Expand a user-defined function.\n* Value Function::              Return the un-expanded value of a variable.\n* Eval Function::               Evaluate the arguments as makefile syntax.\n* Origin Function::             Find where a variable got its value.\n* Flavor Function::             Find out the flavor of a variable.\n* Shell Function::              Substitute the output of a shell command.\n* Make Control Functions::      Functions that control how make runs.\n\n\u001f\nFile: make.info,  Node: Syntax of Functions,  Next: Text Functions,  Prev: Functions,  Up: Functions\n\n8.1 Function Call Syntax\n========================\n\nA function call resembles a variable reference.  It looks like this:\n\n     $(FUNCTION ARGUMENTS)\n\nor like this:\n\n     ${FUNCTION ARGUMENTS}\n\n   Here FUNCTION is a function name; one of a short list of names that\nare part of `make'.  You can also essentially create your own functions\nby using the `call' builtin function.\n\n   The ARGUMENTS are the arguments of the function.  They are separated\nfrom the function name by one or more spaces or tabs, and if there is\nmore than one argument, then they are separated by commas.  Such\nwhitespace and commas are not part of an argument's value.  The\ndelimiters which you use to surround the function call, whether\nparentheses or braces, can appear in an argument only in matching pairs;\nthe other kind of delimiters may appear singly.  If the arguments\nthemselves contain other function calls or variable references, it is\nwisest to use the same kind of delimiters for all the references; write\n`$(subst a,b,$(x))', not `$(subst a,b,${x})'.  This is because it is\nclearer, and because only one type of delimiter is matched to find the\nend of the reference.\n\n   The text written for each argument is processed by substitution of\nvariables and function calls to produce the argument value, which is\nthe text on which the function acts.  The substitution is done in the\norder in which the arguments appear.\n\n   Commas and unmatched parentheses or braces cannot appear in the text\nof an argument as written; leading spaces cannot appear in the text of\nthe first argument as written.  These characters can be put into the\nargument value by variable substitution.  First define variables\n`comma' and `space' whose values are isolated comma and space\ncharacters, then substitute these variables where such characters are\nwanted, like this:\n\n     comma:= ,\n     empty:=\n     space:= $(empty) $(empty)\n     foo:= a b c\n     bar:= $(subst $(space),$(comma),$(foo))\n     # bar is now `a,b,c'.\n\nHere the `subst' function replaces each space with a comma, through the\nvalue of `foo', and substitutes the result.\n\n\u001f\nFile: make.info,  Node: Text Functions,  Next: File Name Functions,  Prev: Syntax of Functions,  Up: Functions\n\n8.2 Functions for String Substitution and Analysis\n==================================================\n\nHere are some functions that operate on strings:\n\n`$(subst FROM,TO,TEXT)'\n     Performs a textual replacement on the text TEXT: each occurrence\n     of FROM is replaced by TO.  The result is substituted for the\n     function call.  For example,\n\n          $(subst ee,EE,feet on the street)\n\n     substitutes the string `fEEt on the strEEt'.\n\n`$(patsubst PATTERN,REPLACEMENT,TEXT)'\n     Finds whitespace-separated words in TEXT that match PATTERN and\n     replaces them with REPLACEMENT.  Here PATTERN may contain a `%'\n     which acts as a wildcard, matching any number of any characters\n     within a word.  If REPLACEMENT also contains a `%', the `%' is\n     replaced by the text that matched the `%' in PATTERN.  Only the\n     first `%' in the PATTERN and REPLACEMENT is treated this way; any\n     subsequent `%' is unchanged.\n\n     `%' characters in `patsubst' function invocations can be quoted\n     with preceding backslashes (`\\').  Backslashes that would\n     otherwise quote `%' characters can be quoted with more backslashes.\n     Backslashes that quote `%' characters or other backslashes are\n     removed from the pattern before it is compared file names or has a\n     stem substituted into it.  Backslashes that are not in danger of\n     quoting `%' characters go unmolested.  For example, the pattern\n     `the\\%weird\\\\%pattern\\\\' has `the%weird\\' preceding the operative\n     `%' character, and `pattern\\\\' following it.  The final two\n     backslashes are left alone because they cannot affect any `%'\n     character.\n\n     Whitespace between words is folded into single space characters;\n     leading and trailing whitespace is discarded.\n\n     For example,\n\n          $(patsubst %.c,%.o,x.c.c bar.c)\n\n     produces the value `x.c.o bar.o'.\n\n     Substitution references (*note Substitution References:\n     Substitution Refs.) are a simpler way to get the effect of the\n     `patsubst' function:\n\n          $(VAR:PATTERN=REPLACEMENT)\n\n     is equivalent to\n\n          $(patsubst PATTERN,REPLACEMENT,$(VAR))\n\n     The second shorthand simplifies one of the most common uses of\n     `patsubst': replacing the suffix at the end of file names.\n\n          $(VAR:SUFFIX=REPLACEMENT)\n\n     is equivalent to\n\n          $(patsubst %SUFFIX,%REPLACEMENT,$(VAR))\n\n     For example, you might have a list of object files:\n\n          objects = foo.o bar.o baz.o\n\n     To get the list of corresponding source files, you could simply\n     write:\n\n          $(objects:.o=.c)\n\n     instead of using the general form:\n\n          $(patsubst %.o,%.c,$(objects))\n\n`$(strip STRING)'\n     Removes leading and trailing whitespace from STRING and replaces\n     each internal sequence of one or more whitespace characters with a\n     single space.  Thus, `$(strip a b  c )' results in `a b c'.\n\n     The function `strip' can be very useful when used in conjunction\n     with conditionals.  When comparing something with the empty string\n     `' using `ifeq' or `ifneq', you usually want a string of just\n     whitespace to match the empty string (*note Conditionals::).\n\n     Thus, the following may fail to have the desired results:\n\n          .PHONY: all\n          ifneq   \"$(needs_made)\" \"\"\n          all: $(needs_made)\n          else\n          all:;@echo 'Nothing to make!'\n          endif\n\n     Replacing the variable reference `$(needs_made)' with the function\n     call `$(strip $(needs_made))' in the `ifneq' directive would make\n     it more robust.\n\n`$(findstring FIND,IN)'\n     Searches IN for an occurrence of FIND.  If it occurs, the value is\n     FIND; otherwise, the value is empty.  You can use this function in\n     a conditional to test for the presence of a specific substring in\n     a given string.  Thus, the two examples,\n\n          $(findstring a,a b c)\n          $(findstring a,b c)\n\n     produce the values `a' and `' (the empty string), respectively.\n     *Note Testing Flags::, for a practical application of `findstring'.\n\n`$(filter PATTERN...,TEXT)'\n     Returns all whitespace-separated words in TEXT that _do_ match any\n     of the PATTERN words, removing any words that _do not_ match.  The\n     patterns are written using `%', just like the patterns used in the\n     `patsubst' function above.\n\n     The `filter' function can be used to separate out different types\n     of strings (such as file names) in a variable.  For example:\n\n          sources := foo.c bar.c baz.s ugh.h\n          foo: $(sources)\n                  cc $(filter %.c %.s,$(sources)) -o foo\n\n     says that `foo' depends of `foo.c', `bar.c', `baz.s' and `ugh.h'\n     but only `foo.c', `bar.c' and `baz.s' should be specified in the\n     command to the compiler.\n\n`$(filter-out PATTERN...,TEXT)'\n     Returns all whitespace-separated words in TEXT that _do not_ match\n     any of the PATTERN words, removing the words that _do_ match one\n     or more.  This is the exact opposite of the `filter' function.\n\n     For example, given:\n\n          objects=main1.o foo.o main2.o bar.o\n          mains=main1.o main2.o\n\n     the following generates a list which contains all the object files\n     not in `mains':\n\n          $(filter-out $(mains),$(objects))\n\n`$(sort LIST)'\n     Sorts the words of LIST in lexical order, removing duplicate\n     words.  The output is a list of words separated by single spaces.\n     Thus,\n\n          $(sort foo bar lose)\n\n     returns the value `bar foo lose'.\n\n     Incidentally, since `sort' removes duplicate words, you can use it\n     for this purpose even if you don't care about the sort order.\n\n`$(word N,TEXT)'\n     Returns the Nth word of TEXT.  The legitimate values of N start\n     from 1.  If N is bigger than the number of words in TEXT, the\n     value is empty.  For example,\n\n          $(word 2, foo bar baz)\n\n     returns `bar'.\n\n`$(wordlist S,E,TEXT)'\n     Returns the list of words in TEXT starting with word S and ending\n     with word E (inclusive).  The legitimate values of S start from 1;\n     E may start from 0.  If S is bigger than the number of words in\n     TEXT, the value is empty.  If E is bigger than the number of words\n     in TEXT, words up to the end of TEXT are returned.  If S is\n     greater than E, nothing is returned.  For example,\n\n          $(wordlist 2, 3, foo bar baz)\n\n     returns `bar baz'.\n\n`$(words TEXT)'\n     Returns the number of words in TEXT.  Thus, the last word of TEXT\n     is `$(word $(words TEXT),TEXT)'.\n\n`$(firstword NAMES...)'\n     The argument NAMES is regarded as a series of names, separated by\n     whitespace.  The value is the first name in the series.  The rest\n     of the names are ignored.\n\n     For example,\n\n          $(firstword foo bar)\n\n     produces the result `foo'.  Although `$(firstword TEXT)' is the\n     same as `$(word 1,TEXT)', the `firstword' function is retained for\n     its simplicity.\n\n`$(lastword NAMES...)'\n     The argument NAMES is regarded as a series of names, separated by\n     whitespace.  The value is the last name in the series.\n\n     For example,\n\n          $(lastword foo bar)\n\n     produces the result `bar'.  Although `$(lastword TEXT)' is the\n     same as `$(word $(words TEXT),TEXT)', the `lastword' function was\n     added for its simplicity and better performance.\n\n   Here is a realistic example of the use of `subst' and `patsubst'.\nSuppose that a makefile uses the `VPATH' variable to specify a list of\ndirectories that `make' should search for prerequisite files (*note\n`VPATH' Search Path for All Prerequisites: General Search.).  This\nexample shows how to tell the C compiler to search for header files in\nthe same list of directories.\n\n   The value of `VPATH' is a list of directories separated by colons,\nsuch as `src:../headers'.  First, the `subst' function is used to\nchange the colons to spaces:\n\n     $(subst :, ,$(VPATH))\n\nThis produces `src ../headers'.  Then `patsubst' is used to turn each\ndirectory name into a `-I' flag.  These can be added to the value of\nthe variable `CFLAGS', which is passed automatically to the C compiler,\nlike this:\n\n     override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))\n\nThe effect is to append the text `-Isrc -I../headers' to the previously\ngiven value of `CFLAGS'.  The `override' directive is used so that the\nnew value is assigned even if the previous value of `CFLAGS' was\nspecified with a command argument (*note The `override' Directive:\nOverride Directive.).\n\n\u001f\nFile: make.info,  Node: File Name Functions,  Next: Conditional Functions,  Prev: Text Functions,  Up: Functions\n\n8.3 Functions for File Names\n============================\n\nSeveral of the built-in expansion functions relate specifically to\ntaking apart file names or lists of file names.\n\n   Each of the following functions performs a specific transformation\non a file name.  The argument of the function is regarded as a series\nof file names, separated by whitespace.  (Leading and trailing\nwhitespace is ignored.)  Each file name in the series is transformed in\nthe same way and the results are concatenated with single spaces\nbetween them.\n\n`$(dir NAMES...)'\n     Extracts the directory-part of each file name in NAMES.  The\n     directory-part of the file name is everything up through (and\n     including) the last slash in it.  If the file name contains no\n     slash, the directory part is the string `./'.  For example,\n\n          $(dir src/foo.c hacks)\n\n     produces the result `src/ ./'.\n\n`$(notdir NAMES...)'\n     Extracts all but the directory-part of each file name in NAMES.\n     If the file name contains no slash, it is left unchanged.\n     Otherwise, everything through the last slash is removed from it.\n\n     A file name that ends with a slash becomes an empty string.  This\n     is unfortunate, because it means that the result does not always\n     have the same number of whitespace-separated file names as the\n     argument had; but we do not see any other valid alternative.\n\n     For example,\n\n          $(notdir src/foo.c hacks)\n\n     produces the result `foo.c hacks'.\n\n`$(suffix NAMES...)'\n     Extracts the suffix of each file name in NAMES.  If the file name\n     contains a period, the suffix is everything starting with the last\n     period.  Otherwise, the suffix is the empty string.  This\n     frequently means that the result will be empty when NAMES is not,\n     and if NAMES contains multiple file names, the result may contain\n     fewer file names.\n\n     For example,\n\n          $(suffix src/foo.c src-1.0/bar.c hacks)\n\n     produces the result `.c .c'.\n\n`$(basename NAMES...)'\n     Extracts all but the suffix of each file name in NAMES.  If the\n     file name contains a period, the basename is everything starting\n     up to (and not including) the last period.  Periods in the\n     directory part are ignored.  If there is no period, the basename\n     is the entire file name.  For example,\n\n          $(basename src/foo.c src-1.0/bar hacks)\n\n     produces the result `src/foo src-1.0/bar hacks'.\n\n`$(addsuffix SUFFIX,NAMES...)'\n     The argument NAMES is regarded as a series of names, separated by\n     whitespace; SUFFIX is used as a unit.  The value of SUFFIX is\n     appended to the end of each individual name and the resulting\n     larger names are concatenated with single spaces between them.\n     For example,\n\n          $(addsuffix .c,foo bar)\n\n     produces the result `foo.c bar.c'.\n\n`$(addprefix PREFIX,NAMES...)'\n     The argument NAMES is regarded as a series of names, separated by\n     whitespace; PREFIX is used as a unit.  The value of PREFIX is\n     prepended to the front of each individual name and the resulting\n     larger names are concatenated with single spaces between them.\n     For example,\n\n          $(addprefix src/,foo bar)\n\n     produces the result `src/foo src/bar'.\n\n`$(join LIST1,LIST2)'\n     Concatenates the two arguments word by word: the two first words\n     (one from each argument) concatenated form the first word of the\n     result, the two second words form the second word of the result,\n     and so on.  So the Nth word of the result comes from the Nth word\n     of each argument.  If one argument has more words that the other,\n     the extra words are copied unchanged into the result.\n\n     For example, `$(join a b,.c .o)' produces `a.c b.o'.\n\n     Whitespace between the words in the lists is not preserved; it is\n     replaced with a single space.\n\n     This function can merge the results of the `dir' and `notdir'\n     functions, to produce the original list of files which was given\n     to those two functions.\n\n`$(wildcard PATTERN)'\n     The argument PATTERN is a file name pattern, typically containing\n     wildcard characters (as in shell file name patterns).  The result\n     of `wildcard' is a space-separated list of the names of existing\n     files that match the pattern.  *Note Using Wildcard Characters in\n     File Names: Wildcards.\n\n`$(realpath NAMES...)'\n     For each file name in NAMES return the canonical absolute name.  A\n     canonical name does not contain any `.' or `..' components, nor\n     any repeated path separators (`/') or symlinks.  In case of a\n     failure the empty string is returned.  Consult the `realpath(3)'\n     documentation for a list of possible failure causes.\n\n`$(abspath NAMES...)'\n     For each file name in NAMES return an absolute name that does not\n     contain any `.' or `..' components, nor any repeated path\n     separators (`/').  Note that, in contrast to `realpath' function,\n     `abspath' does not resolve symlinks and does not require the file\n     names to refer to an existing file or directory.  Use the\n     `wildcard' function to test for existence.\n\n\u001f\nFile: make.info,  Node: Conditional Functions,  Next: Foreach Function,  Prev: File Name Functions,  Up: Functions\n\n8.4 Functions for Conditionals\n==============================\n\nThere are three functions that provide conditional expansion.  A key\naspect of these functions is that not all of the arguments are expanded\ninitially.  Only those arguments which need to be expanded, will be\nexpanded.\n\n`$(if CONDITION,THEN-PART[,ELSE-PART])'\n     The `if' function provides support for conditional expansion in a\n     functional context (as opposed to the GNU `make' makefile\n     conditionals such as `ifeq' (*note Syntax of Conditionals:\n     Conditional Syntax.).\n\n     The first argument, CONDITION, first has all preceding and\n     trailing whitespace stripped, then is expanded.  If it expands to\n     any non-empty string, then the condition is considered to be true.\n     If it expands to an empty string, the condition is considered to\n     be false.\n\n     If the condition is true then the second argument, THEN-PART, is\n     evaluated and this is used as the result of the evaluation of the\n     entire `if' function.\n\n     If the condition is false then the third argument, ELSE-PART, is\n     evaluated and this is the result of the `if' function.  If there is\n     no third argument, the `if' function evaluates to nothing (the\n     empty string).\n\n     Note that only one of the THEN-PART or the ELSE-PART will be\n     evaluated, never both.  Thus, either can contain side-effects\n     (such as `shell' function calls, etc.)\n\n`$(or CONDITION1[,CONDITION2[,CONDITION3...]])'\n     The `or' function provides a \"short-circuiting\" OR operation.\n     Each argument is expanded, in order.  If an argument expands to a\n     non-empty string the processing stops and the result of the\n     expansion is that string.  If, after all arguments are expanded,\n     all of them are false (empty), then the result of the expansion is\n     the empty string.\n\n`$(and CONDITION1[,CONDITION2[,CONDITION3...]])'\n     The `and' function provides a \"short-circuiting\" AND operation.\n     Each argument is expanded, in order.  If an argument expands to an\n     empty string the processing stops and the result of the expansion\n     is the empty string.  If all arguments expand to a non-empty\n     string then the result of the expansion is the expansion of the\n     last argument.\n\n\n\u001f\nFile: make.info,  Node: Foreach Function,  Next: Call Function,  Prev: Conditional Functions,  Up: Functions\n\n8.5 The `foreach' Function\n==========================\n\nThe `foreach' function is very different from other functions.  It\ncauses one piece of text to be used repeatedly, each time with a\ndifferent substitution performed on it.  It resembles the `for' command\nin the shell `sh' and the `foreach' command in the C-shell `csh'.\n\n   The syntax of the `foreach' function is:\n\n     $(foreach VAR,LIST,TEXT)\n\nThe first two arguments, VAR and LIST, are expanded before anything\nelse is done; note that the last argument, TEXT, is *not* expanded at\nthe same time.  Then for each word of the expanded value of LIST, the\nvariable named by the expanded value of VAR is set to that word, and\nTEXT is expanded.  Presumably TEXT contains references to that\nvariable, so its expansion will be different each time.\n\n   The result is that TEXT is expanded as many times as there are\nwhitespace-separated words in LIST.  The multiple expansions of TEXT\nare concatenated, with spaces between them, to make the result of\n`foreach'.\n\n   This simple example sets the variable `files' to the list of all\nfiles in the directories in the list `dirs':\n\n     dirs := a b c d\n     files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))\n\n   Here TEXT is `$(wildcard $(dir)/*)'.  The first repetition finds the\nvalue `a' for `dir', so it produces the same result as `$(wildcard\na/*)'; the second repetition produces the result of `$(wildcard b/*)';\nand the third, that of `$(wildcard c/*)'.\n\n   This example has the same result (except for setting `dirs') as the\nfollowing example:\n\n     files := $(wildcard a/* b/* c/* d/*)\n\n   When TEXT is complicated, you can improve readability by giving it a\nname, with an additional variable:\n\n     find_files = $(wildcard $(dir)/*)\n     dirs := a b c d\n     files := $(foreach dir,$(dirs),$(find_files))\n\nHere we use the variable `find_files' this way.  We use plain `=' to\ndefine a recursively-expanding variable, so that its value contains an\nactual function call to be reexpanded under the control of `foreach'; a\nsimply-expanded variable would not do, since `wildcard' would be called\nonly once at the time of defining `find_files'.\n\n   The `foreach' function has no permanent effect on the variable VAR;\nits value and flavor after the `foreach' function call are the same as\nthey were beforehand.  The other values which are taken from LIST are\nin effect only temporarily, during the execution of `foreach'.  The\nvariable VAR is a simply-expanded variable during the execution of\n`foreach'.  If VAR was undefined before the `foreach' function call, it\nis undefined after the call.  *Note The Two Flavors of Variables:\nFlavors.\n\n   You must take care when using complex variable expressions that\nresult in variable names because many strange things are valid variable\nnames, but are probably not what you intended.  For example,\n\n     files := $(foreach Esta escrito en espanol!,b c ch,$(find_files))\n\nmight be useful if the value of `find_files' references the variable\nwhose name is `Esta escrito en espanol!' (es un nombre bastante largo,\nno?), but it is more likely to be a mistake.\n\n\u001f\nFile: make.info,  Node: Call Function,  Next: Value Function,  Prev: Foreach Function,  Up: Functions\n\n8.6 The `call' Function\n=======================\n\nThe `call' function is unique in that it can be used to create new\nparameterized functions.  You can write a complex expression as the\nvalue of a variable, then use `call' to expand it with different values.\n\n   The syntax of the `call' function is:\n\n     $(call VARIABLE,PARAM,PARAM,...)\n\n   When `make' expands this function, it assigns each PARAM to\ntemporary variables `$(1)', `$(2)', etc.  The variable `$(0)' will\ncontain VARIABLE.  There is no maximum number of parameter arguments.\nThere is no minimum, either, but it doesn't make sense to use `call'\nwith no parameters.\n\n   Then VARIABLE is expanded as a `make' variable in the context of\nthese temporary assignments.  Thus, any reference to `$(1)' in the\nvalue of VARIABLE will resolve to the first PARAM in the invocation of\n`call'.\n\n   Note that VARIABLE is the _name_ of a variable, not a _reference_ to\nthat variable.  Therefore you would not normally use a `$' or\nparentheses when writing it.  (You can, however, use a variable\nreference in the name if you want the name not to be a constant.)\n\n   If VARIABLE is the name of a builtin function, the builtin function\nis always invoked (even if a `make' variable by that name also exists).\n\n   The `call' function expands the PARAM arguments before assigning\nthem to temporary variables.  This means that VARIABLE values\ncontaining references to builtin functions that have special expansion\nrules, like `foreach' or `if', may not work as you expect.\n\n   Some examples may make this clearer.\n\n   This macro simply reverses its arguments:\n\n     reverse = $(2) $(1)\n\n     foo = $(call reverse,a,b)\n\nHere FOO will contain `b a'.\n\n   This one is slightly more interesting: it defines a macro to search\nfor the first instance of a program in `PATH':\n\n     pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))\n\n     LS := $(call pathsearch,ls)\n\nNow the variable LS contains `/bin/ls' or similar.\n\n   The `call' function can be nested.  Each recursive invocation gets\nits own local values for `$(1)', etc. that mask the values of\nhigher-level `call'.  For example, here is an implementation of a \"map\"\nfunction:\n\n     map = $(foreach a,$(2),$(call $(1),$(a)))\n\n   Now you can MAP a function that normally takes only one argument,\nsuch as `origin', to multiple values in one step:\n\n     o = $(call map,origin,o map MAKE)\n\n   and end up with O containing something like `file file default'.\n\n   A final caution: be careful when adding whitespace to the arguments\nto `call'.  As with other functions, any whitespace contained in the\nsecond and subsequent arguments is kept; this can cause strange\neffects.  It's generally safest to remove all extraneous whitespace when\nproviding parameters to `call'.\n\n\u001f\nFile: make.info,  Node: Value Function,  Next: Eval Function,  Prev: Call Function,  Up: Functions\n\n8.7 The `value' Function\n========================\n\nThe `value' function provides a way for you to use the value of a\nvariable _without_ having it expanded.  Please note that this does not\nundo expansions which have already occurred; for example if you create\na simply expanded variable its value is expanded during the definition;\nin that case the `value' function will return the same result as using\nthe variable directly.\n\n   The syntax of the `value' function is:\n\n     $(value VARIABLE)\n\n   Note that VARIABLE is the _name_ of a variable; not a _reference_ to\nthat variable.  Therefore you would not normally use a `$' or\nparentheses when writing it.  (You can, however, use a variable\nreference in the name if you want the name not to be a constant.)\n\n   The result of this function is a string containing the value of\nVARIABLE, without any expansion occurring.  For example, in this\nmakefile:\n\n     FOO = $PATH\n\n     all:\n             @echo $(FOO)\n             @echo $(value FOO)\n\nThe first output line would be `ATH', since the \"$P\" would be expanded\nas a `make' variable, while the second output line would be the current\nvalue of your `$PATH' environment variable, since the `value' function\navoided the expansion.\n\n   The `value' function is most often used in conjunction with the\n`eval' function (*note Eval Function::).\n\n\u001f\nFile: make.info,  Node: Eval Function,  Next: Origin Function,  Prev: Value Function,  Up: Functions\n\n8.8 The `eval' Function\n=======================\n\nThe `eval' function is very special: it allows you to define new\nmakefile constructs that are not constant; which are the result of\nevaluating other variables and functions.  The argument to the `eval'\nfunction is expanded, then the results of that expansion are parsed as\nmakefile syntax.  The expanded results can define new `make' variables,\ntargets, implicit or explicit rules, etc.\n\n   The result of the `eval' function is always the empty string; thus,\nit can be placed virtually anywhere in a makefile without causing\nsyntax errors.\n\n   It's important to realize that the `eval' argument is expanded\n_twice_; first by the `eval' function, then the results of that\nexpansion are expanded again when they are parsed as makefile syntax.\nThis means you may need to provide extra levels of escaping for \"$\"\ncharacters when using `eval'.  The `value' function (*note Value\nFunction::) can sometimes be useful in these situations, to circumvent\nunwanted expansions.\n\n   Here is an example of how `eval' can be used; this example combines\na number of concepts and other functions.  Although it might seem\noverly complex to use `eval' in this example, rather than just writing\nout the rules, consider two things: first, the template definition (in\n`PROGRAM_template') could need to be much more complex than it is here;\nand second, you might put the complex, \"generic\" part of this example\ninto another makefile, then include it in all the individual makefiles.\nNow your individual makefiles are quite straightforward.\n\n     PROGRAMS    = server client\n\n     server_OBJS = server.o server_priv.o server_access.o\n     server_LIBS = priv protocol\n\n     client_OBJS = client.o client_api.o client_mem.o\n     client_LIBS = protocol\n\n     # Everything after this is generic\n\n     .PHONY: all\n     all: $(PROGRAMS)\n\n     define PROGRAM_template\n      $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)\n      ALL_OBJS   += $$($(1)_OBJS)\n     endef\n\n     $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))\n\n     $(PROGRAMS):\n             $(LINK.o) $^ $(LDLIBS) -o $@\n\n     clean:\n             rm -f $(ALL_OBJS) $(PROGRAMS)\n\n\u001f\nFile: make.info,  Node: Origin Function,  Next: Flavor Function,  Prev: Eval Function,  Up: Functions\n\n8.9 The `origin' Function\n=========================\n\nThe `origin' function is unlike most other functions in that it does\nnot operate on the values of variables; it tells you something _about_\na variable.  Specifically, it tells you where it came from.\n\n   The syntax of the `origin' function is:\n\n     $(origin VARIABLE)\n\n   Note that VARIABLE is the _name_ of a variable to inquire about; not\na _reference_ to that variable.  Therefore you would not normally use a\n`$' or parentheses when writing it.  (You can, however, use a variable\nreference in the name if you want the name not to be a constant.)\n\n   The result of this function is a string telling you how the variable\nVARIABLE was defined:\n\n`undefined'\n     if VARIABLE was never defined.\n\n`default'\n     if VARIABLE has a default definition, as is usual with `CC' and so\n     on.  *Note Variables Used by Implicit Rules: Implicit Variables.\n     Note that if you have redefined a default variable, the `origin'\n     function will return the origin of the later definition.\n\n`environment'\n     if VARIABLE was defined as an environment variable and the `-e'\n     option is _not_ turned on (*note Summary of Options: Options\n     Summary.).\n\n`environment override'\n     if VARIABLE was defined as an environment variable and the `-e'\n     option _is_ turned on (*note Summary of Options: Options Summary.).\n\n`file'\n     if VARIABLE was defined in a makefile.\n\n`command line'\n     if VARIABLE was defined on the command line.\n\n`override'\n     if VARIABLE was defined with an `override' directive in a makefile\n     (*note The `override' Directive: Override Directive.).\n\n`automatic'\n     if VARIABLE is an automatic variable defined for the execution of\n     the commands for each rule (*note Automatic Variables::).\n\n   This information is primarily useful (other than for your curiosity)\nto determine if you want to believe the value of a variable.  For\nexample, suppose you have a makefile `foo' that includes another\nmakefile `bar'.  You want a variable `bletch' to be defined in `bar' if\nyou run the command `make -f bar', even if the environment contains a\ndefinition of `bletch'.  However, if `foo' defined `bletch' before\nincluding `bar', you do not want to override that definition.  This\ncould be done by using an `override' directive in `foo', giving that\ndefinition precedence over the later definition in `bar';\nunfortunately, the `override' directive would also override any command\nline definitions.  So, `bar' could include:\n\n     ifdef bletch\n     ifeq \"$(origin bletch)\" \"environment\"\n     bletch = barf, gag, etc.\n     endif\n     endif\n\nIf `bletch' has been defined from the environment, this will redefine\nit.\n\n   If you want to override a previous definition of `bletch' if it came\nfrom the environment, even under `-e', you could instead write:\n\n     ifneq \"$(findstring environment,$(origin bletch))\" \"\"\n     bletch = barf, gag, etc.\n     endif\n\n   Here the redefinition takes place if `$(origin bletch)' returns\neither `environment' or `environment override'.  *Note Functions for\nString Substitution and Analysis: Text Functions.\n\n\u001f\nFile: make.info,  Node: Flavor Function,  Next: Shell Function,  Prev: Origin Function,  Up: Functions\n\n8.10 The `flavor' Function\n==========================\n\nThe `flavor' function is unlike most other functions (and like `origin'\nfunction) in that it does not operate on the values of variables; it\ntells you something _about_ a variable.  Specifically, it tells you the\nflavor of a variable (*note The Two Flavors of Variables: Flavors.).\n\n   The syntax of the `flavor' function is:\n\n     $(flavor VARIABLE)\n\n   Note that VARIABLE is the _name_ of a variable to inquire about; not\na _reference_ to that variable.  Therefore you would not normally use a\n`$' or parentheses when writing it.  (You can, however, use a variable\nreference in the name if you want the name not to be a constant.)\n\n   The result of this function is a string that identifies the flavor\nof the variable VARIABLE:\n\n`undefined'\n     if VARIABLE was never defined.\n\n`recursive'\n     if VARIABLE is a recursively expanded variable.\n\n`simple'\n     if VARIABLE is a simply expanded variable.\n\n\n\u001f\nFile: make.info,  Node: Shell Function,  Next: Make Control Functions,  Prev: Flavor Function,  Up: Functions\n\n8.11 The `shell' Function\n=========================\n\nThe `shell' function is unlike any other function other than the\n`wildcard' function (*note The Function `wildcard': Wildcard Function.)\nin that it communicates with the world outside of `make'.\n\n   The `shell' function performs the same function that backquotes\n(``') perform in most shells: it does \"command expansion\".  This means\nthat it takes as an argument a shell command and evaluates to the\noutput of the command.  The only processing `make' does on the result\nis to convert each newline (or carriage-return / newline pair) to a\nsingle space.  If there is a trailing (carriage-return and) newline it\nwill simply be removed.\n\n   The commands run by calls to the `shell' function are run when the\nfunction calls are expanded (*note How `make' Reads a Makefile: Reading\nMakefiles.).  Because this function involves spawning a new shell, you\nshould carefully consider the performance implications of using the\n`shell' function within recursively expanded variables vs. simply\nexpanded variables (*note The Two Flavors of Variables: Flavors.).\n\n   Here are some examples of the use of the `shell' function:\n\n     contents := $(shell cat foo)\n\nsets `contents' to the contents of the file `foo', with a space (rather\nthan a newline) separating each line.\n\n     files := $(shell echo *.c)\n\nsets `files' to the expansion of `*.c'.  Unless `make' is using a very\nstrange shell, this has the same result as `$(wildcard *.c)' (as long\nas at least one `.c' file exists).\n\n\u001f\nFile: make.info,  Node: Make Control Functions,  Prev: Shell Function,  Up: Functions\n\n8.12 Functions That Control Make\n================================\n\nThese functions control the way make runs.  Generally, they are used to\nprovide information to the user of the makefile or to cause make to stop\nif some sort of environmental error is detected.\n\n`$(error TEXT...)'\n     Generates a fatal error where the message is TEXT.  Note that the\n     error is generated whenever this function is evaluated.  So, if\n     you put it inside a command script or on the right side of a\n     recursive variable assignment, it won't be evaluated until later.\n     The TEXT will be expanded before the error is generated.\n\n     For example,\n\n          ifdef ERROR1\n          $(error error is $(ERROR1))\n          endif\n\n     will generate a fatal error during the read of the makefile if the\n     `make' variable `ERROR1' is defined.  Or,\n\n          ERR = $(error found an error!)\n\n          .PHONY: err\n          err: ; $(ERR)\n\n     will generate a fatal error while `make' is running, if the `err'\n     target is invoked.\n\n`$(warning TEXT...)'\n     This function works similarly to the `error' function, above,\n     except that `make' doesn't exit.  Instead, TEXT is expanded and\n     the resulting message is displayed, but processing of the makefile\n     continues.\n\n     The result of the expansion of this function is the empty string.\n\n`$(info TEXT...)'\n     This function does nothing more than print its (expanded)\n     argument(s) to standard output.  No makefile name or line number\n     is added.  The result of the expansion of this function is the\n     empty string.\n\n\u001f\nFile: make.info,  Node: Running,  Next: Implicit Rules,  Prev: Functions,  Up: Top\n\n9 How to Run `make'\n*******************\n\nA makefile that says how to recompile a program can be used in more\nthan one way.  The simplest use is to recompile every file that is out\nof date.  Usually, makefiles are written so that if you run `make' with\nno arguments, it does just that.\n\n   But you might want to update only some of the files; you might want\nto use a different compiler or different compiler options; you might\nwant just to find out which files are out of date without changing them.\n\n   By giving arguments when you run `make', you can do any of these\nthings and many others.\n\n   The exit status of `make' is always one of three values:\n`0'\n     The exit status is zero if `make' is successful.\n\n`2'\n     The exit status is two if `make' encounters any errors.  It will\n     print messages describing the particular errors.\n\n`1'\n     The exit status is one if you use the `-q' flag and `make'\n     determines that some target is not already up to date.  *Note\n     Instead of Executing the Commands: Instead of Execution.\n\n* Menu:\n\n* Makefile Arguments::          How to specify which makefile to use.\n* Goals::                       How to use goal arguments to specify which\n                                  parts of the makefile to use.\n* Instead of Execution::        How to use mode flags to specify what\n                                  kind of thing to do with the commands\n                                  in the makefile other than simply\n                                  execute them.\n* Avoiding Compilation::        How to avoid recompiling certain files.\n* Overriding::                  How to override a variable to specify\n                                  an alternate compiler and other things.\n* Testing::                     How to proceed past some errors, to\n                                  test compilation.\n* Options Summary::             Summary of Options\n\n\u001f\nFile: make.info,  Node: Makefile Arguments,  Next: Goals,  Prev: Running,  Up: Running\n\n9.1 Arguments to Specify the Makefile\n=====================================\n\nThe way to specify the name of the makefile is with the `-f' or\n`--file' option (`--makefile' also works).  For example, `-f altmake'\nsays to use the file `altmake' as the makefile.\n\n   If you use the `-f' flag several times and follow each `-f' with an\nargument, all the specified files are used jointly as makefiles.\n\n   If you do not use the `-f' or `--file' flag, the default is to try\n`GNUmakefile', `makefile', and `Makefile', in that order, and use the\nfirst of these three which exists or can be made (*note Writing\nMakefiles: Makefiles.).\n\n\u001f\nFile: make.info,  Node: Goals,  Next: Instead of Execution,  Prev: Makefile Arguments,  Up: Running\n\n9.2 Arguments to Specify the Goals\n==================================\n\nThe \"goals\" are the targets that `make' should strive ultimately to\nupdate.  Other targets are updated as well if they appear as\nprerequisites of goals, or prerequisites of prerequisites of goals, etc.\n\n   By default, the goal is the first target in the makefile (not\ncounting targets that start with a period).  Therefore, makefiles are\nusually written so that the first target is for compiling the entire\nprogram or programs they describe.  If the first rule in the makefile\nhas several targets, only the first target in the rule becomes the\ndefault goal, not the whole list.  You can manage the selection of the\ndefault goal from within your makefile using the `.DEFAULT_GOAL'\nvariable (*note Other Special Variables: Special Variables.).\n\n   You can also specify a different goal or goals with command-line\narguments to `make'.  Use the name of the goal as an argument.  If you\nspecify several goals, `make' processes each of them in turn, in the\norder you name them.\n\n   Any target in the makefile may be specified as a goal (unless it\nstarts with `-' or contains an `=', in which case it will be parsed as\na switch or variable definition, respectively).  Even targets not in\nthe makefile may be specified, if `make' can find implicit rules that\nsay how to make them.\n\n   `Make' will set the special variable `MAKECMDGOALS' to the list of\ngoals you specified on the command line.  If no goals were given on the\ncommand line, this variable is empty.  Note that this variable should\nbe used only in special circumstances.\n\n   An example of appropriate use is to avoid including `.d' files\nduring `clean' rules (*note Automatic Prerequisites::), so `make' won't\ncreate them only to immediately remove them again:\n\n     sources = foo.c bar.c\n\n     ifneq ($(MAKECMDGOALS),clean)\n     include $(sources:.c=.d)\n     endif\n\n   One use of specifying a goal is if you want to compile only a part of\nthe program, or only one of several programs.  Specify as a goal each\nfile that you wish to remake.  For example, consider a directory\ncontaining several programs, with a makefile that starts like this:\n\n     .PHONY: all\n     all: size nm ld ar as\n\n   If you are working on the program `size', you might want to say\n`make size' so that only the files of that program are recompiled.\n\n   Another use of specifying a goal is to make files that are not\nnormally made.  For example, there may be a file of debugging output,\nor a version of the program that is compiled specially for testing,\nwhich has a rule in the makefile but is not a prerequisite of the\ndefault goal.\n\n   Another use of specifying a goal is to run the commands associated\nwith a phony target (*note Phony Targets::) or empty target (*note\nEmpty Target Files to Record Events: Empty Targets.).  Many makefiles\ncontain a phony target named `clean' which deletes everything except\nsource files.  Naturally, this is done only if you request it\nexplicitly with `make clean'.  Following is a list of typical phony and\nempty target names.  *Note Standard Targets::, for a detailed list of\nall the standard target names which GNU software packages use.\n\n`all'\n     Make all the top-level targets the makefile knows about.\n\n`clean'\n     Delete all files that are normally created by running `make'.\n\n`mostlyclean'\n     Like `clean', but may refrain from deleting a few files that people\n     normally don't want to recompile.  For example, the `mostlyclean'\n     target for GCC does not delete `libgcc.a', because recompiling it\n     is rarely necessary and takes a lot of time.\n\n`distclean'\n`realclean'\n`clobber'\n     Any of these targets might be defined to delete _more_ files than\n     `clean' does.  For example, this would delete configuration files\n     or links that you would normally create as preparation for\n     compilation, even if the makefile itself cannot create these files.\n\n`install'\n     Copy the executable file into a directory that users typically\n     search for commands; copy any auxiliary files that the executable\n     uses into the directories where it will look for them.\n\n`print'\n     Print listings of the source files that have changed.\n\n`tar'\n     Create a tar file of the source files.\n\n`shar'\n     Create a shell archive (shar file) of the source files.\n\n`dist'\n     Create a distribution file of the source files.  This might be a\n     tar file, or a shar file, or a compressed version of one of the\n     above, or even more than one of the above.\n\n`TAGS'\n     Update a tags table for this program.\n\n`check'\n`test'\n     Perform self tests on the program this makefile builds.\n\n\u001f\nFile: make.info,  Node: Instead of Execution,  Next: Avoiding Compilation,  Prev: Goals,  Up: Running\n\n9.3 Instead of Executing the Commands\n=====================================\n\nThe makefile tells `make' how to tell whether a target is up to date,\nand how to update each target.  But updating the targets is not always\nwhat you want.  Certain options specify other activities for `make'.\n\n`-n'\n`--just-print'\n`--dry-run'\n`--recon'\n     \"No-op\".  The activity is to print what commands would be used to\n     make the targets up to date, but not actually execute them.\n\n`-t'\n`--touch'\n     \"Touch\".  The activity is to mark the targets as up to date without\n     actually changing them.  In other words, `make' pretends to compile\n     the targets but does not really change their contents.\n\n`-q'\n`--question'\n     \"Question\".  The activity is to find out silently whether the\n     targets are up to date already; but execute no commands in either\n     case.  In other words, neither compilation nor output will occur.\n\n`-W FILE'\n`--what-if=FILE'\n`--assume-new=FILE'\n`--new-file=FILE'\n     \"What if\".  Each `-W' flag is followed by a file name.  The given\n     files' modification times are recorded by `make' as being the\n     present time, although the actual modification times remain the\n     same.  You can use the `-W' flag in conjunction with the `-n' flag\n     to see what would happen if you were to modify specific files.\n\n   With the `-n' flag, `make' prints the commands that it would\nnormally execute but does not execute them.\n\n   With the `-t' flag, `make' ignores the commands in the rules and\nuses (in effect) the command `touch' for each target that needs to be\nremade.  The `touch' command is also printed, unless `-s' or `.SILENT'\nis used.  For speed, `make' does not actually invoke the program\n`touch'.  It does the work directly.\n\n   With the `-q' flag, `make' prints nothing and executes no commands,\nbut the exit status code it returns is zero if and only if the targets\nto be considered are already up to date.  If the exit status is one,\nthen some updating needs to be done.  If `make' encounters an error,\nthe exit status is two, so you can distinguish an error from a target\nthat is not up to date.\n\n   It is an error to use more than one of these three flags in the same\ninvocation of `make'.\n\n   The `-n', `-t', and `-q' options do not affect command lines that\nbegin with `+' characters or contain the strings `$(MAKE)' or\n`${MAKE}'.  Note that only the line containing the `+' character or the\nstrings `$(MAKE)' or `${MAKE}' is run regardless of these options.\nOther lines in the same rule are not run unless they too begin with `+'\nor contain `$(MAKE)' or `${MAKE}' (*Note How the `MAKE' Variable Works:\nMAKE Variable.)\n\n   The `-W' flag provides two features:\n\n   * If you also use the `-n' or `-q' flag, you can see what `make'\n     would do if you were to modify some files.\n\n   * Without the `-n' or `-q' flag, when `make' is actually executing\n     commands, the `-W' flag can direct `make' to act as if some files\n     had been modified, without actually modifying the files.\n\n   Note that the options `-p' and `-v' allow you to obtain other\ninformation about `make' or about the makefiles in use (*note Summary\nof Options: Options Summary.).\n\n\u001f\nFile: make.info,  Node: Avoiding Compilation,  Next: Overriding,  Prev: Instead of Execution,  Up: Running\n\n9.4 Avoiding Recompilation of Some Files\n========================================\n\nSometimes you may have changed a source file but you do not want to\nrecompile all the files that depend on it.  For example, suppose you add\na macro or a declaration to a header file that many other files depend\non.  Being conservative, `make' assumes that any change in the header\nfile requires recompilation of all dependent files, but you know that\nthey do not need to be recompiled and you would rather not waste the\ntime waiting for them to compile.\n\n   If you anticipate the problem before changing the header file, you\ncan use the `-t' flag.  This flag tells `make' not to run the commands\nin the rules, but rather to mark the target up to date by changing its\nlast-modification date.  You would follow this procedure:\n\n  1. Use the command `make' to recompile the source files that really\n     need recompilation, ensuring that the object files are up-to-date\n     before you begin.\n\n  2. Make the changes in the header files.\n\n  3. Use the command `make -t' to mark all the object files as up to\n     date.  The next time you run `make', the changes in the header\n     files will not cause any recompilation.\n\n   If you have already changed the header file at a time when some files\ndo need recompilation, it is too late to do this.  Instead, you can use\nthe `-o FILE' flag, which marks a specified file as \"old\" (*note\nSummary of Options: Options Summary.).  This means that the file itself\nwill not be remade, and nothing else will be remade on its account.\nFollow this procedure:\n\n  1. Recompile the source files that need compilation for reasons\n     independent of the particular header file, with `make -o\n     HEADERFILE'.  If several header files are involved, use a separate\n     `-o' option for each header file.\n\n  2. Touch all the object files with `make -t'.\n\n\u001f\nFile: make.info,  Node: Overriding,  Next: Testing,  Prev: Avoiding Compilation,  Up: Running\n\n9.5 Overriding Variables\n========================\n\nAn argument that contains `=' specifies the value of a variable: `V=X'\nsets the value of the variable V to X.  If you specify a value in this\nway, all ordinary assignments of the same variable in the makefile are\nignored; we say they have been \"overridden\" by the command line\nargument.\n\n   The most common way to use this facility is to pass extra flags to\ncompilers.  For example, in a properly written makefile, the variable\n`CFLAGS' is included in each command that runs the C compiler, so a\nfile `foo.c' would be compiled something like this:\n\n     cc -c $(CFLAGS) foo.c\n\n   Thus, whatever value you set for `CFLAGS' affects each compilation\nthat occurs.  The makefile probably specifies the usual value for\n`CFLAGS', like this:\n\n     CFLAGS=-g\n\n   Each time you run `make', you can override this value if you wish.\nFor example, if you say `make CFLAGS='-g -O'', each C compilation will\nbe done with `cc -c -g -O'.  (This also illustrates how you can use\nquoting in the shell to enclose spaces and other special characters in\nthe value of a variable when you override it.)\n\n   The variable `CFLAGS' is only one of many standard variables that\nexist just so that you can change them this way.  *Note Variables Used\nby Implicit Rules: Implicit Variables, for a complete list.\n\n   You can also program the makefile to look at additional variables of\nyour own, giving the user the ability to control other aspects of how\nthe makefile works by changing the variables.\n\n   When you override a variable with a command argument, you can define\neither a recursively-expanded variable or a simply-expanded variable.\nThe examples shown above make a recursively-expanded variable; to make a\nsimply-expanded variable, write `:=' instead of `='.  But, unless you\nwant to include a variable reference or function call in the _value_\nthat you specify, it makes no difference which kind of variable you\ncreate.\n\n   There is one way that the makefile can change a variable that you\nhave overridden.  This is to use the `override' directive, which is a\nline that looks like this: `override VARIABLE = VALUE' (*note The\n`override' Directive: Override Directive.).\n\n\u001f\nFile: make.info,  Node: Testing,  Next: Options Summary,  Prev: Overriding,  Up: Running\n\n9.6 Testing the Compilation of a Program\n========================================\n\nNormally, when an error happens in executing a shell command, `make'\ngives up immediately, returning a nonzero status.  No further commands\nare executed for any target.  The error implies that the goal cannot be\ncorrectly remade, and `make' reports this as soon as it knows.\n\n   When you are compiling a program that you have just changed, this is\nnot what you want.  Instead, you would rather that `make' try compiling\nevery file that can be tried, to show you as many compilation errors as\npossible.\n\n   On these occasions, you should use the `-k' or `--keep-going' flag.\nThis tells `make' to continue to consider the other prerequisites of\nthe pending targets, remaking them if necessary, before it gives up and\nreturns nonzero status.  For example, after an error in compiling one\nobject file, `make -k' will continue compiling other object files even\nthough it already knows that linking them will be impossible.  In\naddition to continuing after failed shell commands, `make -k' will\ncontinue as much as possible after discovering that it does not know\nhow to make a target or prerequisite file.  This will always cause an\nerror message, but without `-k', it is a fatal error (*note Summary of\nOptions: Options Summary.).\n\n   The usual behavior of `make' assumes that your purpose is to get the\ngoals up to date; once `make' learns that this is impossible, it might\nas well report the failure immediately.  The `-k' flag says that the\nreal purpose is to test as much as possible of the changes made in the\nprogram, perhaps to find several independent problems so that you can\ncorrect them all before the next attempt to compile.  This is why Emacs'\n`M-x compile' command passes the `-k' flag by default.\n\n\u001f\nFile: make.info,  Node: Options Summary,  Prev: Testing,  Up: Running\n\n9.7 Summary of Options\n======================\n\nHere is a table of all the options `make' understands:\n\n`-b'\n`-m'\n     These options are ignored for compatibility with other versions of\n     `make'.\n\n`-B'\n`--always-make'\n     Consider all targets out-of-date.  GNU `make' proceeds to consider\n     targets and their prerequisites using the normal algorithms;\n     however, all targets so considered are always remade regardless of\n     the status of their prerequisites.  To avoid infinite recursion, if\n     `MAKE_RESTARTS' (*note Other Special Variables: Special\n     Variables.) is set to a number greater than 0 this option is\n     disabled when considering whether to remake makefiles (*note How\n     Makefiles Are Remade: Remaking Makefiles.).\n\n`-C DIR'\n`--directory=DIR'\n     Change to directory DIR before reading the makefiles.  If multiple\n     `-C' options are specified, each is interpreted relative to the\n     previous one: `-C / -C etc' is equivalent to `-C /etc'.  This is\n     typically used with recursive invocations of `make' (*note\n     Recursive Use of `make': Recursion.).\n\n`-d'\n     Print debugging information in addition to normal processing.  The\n     debugging information says which files are being considered for\n     remaking, which file-times are being compared and with what\n     results, which files actually need to be remade, which implicit\n     rules are considered and which are applied--everything interesting\n     about how `make' decides what to do.  The `-d' option is\n     equivalent to `--debug=a' (see below).\n\n`--debug[=OPTIONS]'\n     Print debugging information in addition to normal processing.\n     Various levels and types of output can be chosen.  With no\n     arguments, print the \"basic\" level of debugging.  Possible\n     arguments are below; only the first character is considered, and\n     values must be comma- or space-separated.\n\n    `a (all)'\n          All types of debugging output are enabled.  This is\n          equivalent to using `-d'.\n\n    `b (basic)'\n          Basic debugging prints each target that was found to be\n          out-of-date, and whether the build was successful or not.\n\n    `v (verbose)'\n          A level above `basic'; includes messages about which\n          makefiles were parsed, prerequisites that did not need to be\n          rebuilt, etc.  This option also enables `basic' messages.\n\n    `i (implicit)'\n          Prints messages describing the implicit rule searches for\n          each target.  This option also enables `basic' messages.\n\n    `j (jobs)'\n          Prints messages giving details on the invocation of specific\n          subcommands.\n\n    `m (makefile)'\n          By default, the above messages are not enabled while trying\n          to remake the makefiles.  This option enables messages while\n          rebuilding makefiles, too.  Note that the `all' option does\n          enable this option.  This option also enables `basic'\n          messages.\n\n`-e'\n`--environment-overrides'\n     Give variables taken from the environment precedence over\n     variables from makefiles.  *Note Variables from the Environment:\n     Environment.\n\n`-f FILE'\n`--file=FILE'\n`--makefile=FILE'\n     Read the file named FILE as a makefile.  *Note Writing Makefiles:\n     Makefiles.\n\n`-h'\n`--help'\n     Remind you of the options that `make' understands and then exit.\n\n`-i'\n`--ignore-errors'\n     Ignore all errors in commands executed to remake files.  *Note\n     Errors in Commands: Errors.\n\n`-I DIR'\n`--include-dir=DIR'\n     Specifies a directory DIR to search for included makefiles.  *Note\n     Including Other Makefiles: Include.  If several `-I' options are\n     used to specify several directories, the directories are searched\n     in the order specified.\n\n`-j [JOBS]'\n`--jobs[=JOBS]'\n     Specifies the number of jobs (commands) to run simultaneously.\n     With no argument, `make' runs as many jobs simultaneously as\n     possible.  If there is more than one `-j' option, the last one is\n     effective.  *Note Parallel Execution: Parallel, for more\n     information on how commands are run.  Note that this option is\n     ignored on MS-DOS.\n\n`-k'\n`--keep-going'\n     Continue as much as possible after an error.  While the target that\n     failed, and those that depend on it, cannot be remade, the other\n     prerequisites of these targets can be processed all the same.\n     *Note Testing the Compilation of a Program: Testing.\n\n`-l [LOAD]'\n`--load-average[=LOAD]'\n`--max-load[=LOAD]'\n     Specifies that no new jobs (commands) should be started if there\n     are other jobs running and the load average is at least LOAD (a\n     floating-point number).  With no argument, removes a previous load\n     limit.  *Note Parallel Execution: Parallel.\n\n`-L'\n`--check-symlink-times'\n     On systems that support symbolic links, this option causes `make'\n     to consider the timestamps on any symbolic links in addition to the\n     timestamp on the file referenced by those links.  When this option\n     is provided, the most recent timestamp among the file and the\n     symbolic links is taken as the modification time for this target\n     file.\n\n`-n'\n`--just-print'\n`--dry-run'\n`--recon'\n     Print the commands that would be executed, but do not execute them.\n     *Note Instead of Executing the Commands: Instead of Execution.\n\n`-o FILE'\n`--old-file=FILE'\n`--assume-old=FILE'\n     Do not remake the file FILE even if it is older than its\n     prerequisites, and do not remake anything on account of changes in\n     FILE.  Essentially the file is treated as very old and its rules\n     are ignored.  *Note Avoiding Recompilation of Some Files: Avoiding\n     Compilation.\n\n`-p'\n`--print-data-base'\n     Print the data base (rules and variable values) that results from\n     reading the makefiles; then execute as usual or as otherwise\n     specified.  This also prints the version information given by the\n     `-v' switch (see below).  To print the data base without trying to\n     remake any files, use `make -qp'.  To print the data base of\n     predefined rules and variables, use `make -p -f /dev/null'.  The\n     data base output contains filename and linenumber information for\n     command and variable definitions, so it can be a useful debugging\n     tool in complex environments.\n\n`-q'\n`--question'\n     \"Question mode\".  Do not run any commands, or print anything; just\n     return an exit status that is zero if the specified targets are\n     already up to date, one if any remaking is required, or two if an\n     error is encountered.  *Note Instead of Executing the Commands:\n     Instead of Execution.\n\n`-r'\n`--no-builtin-rules'\n     Eliminate use of the built-in implicit rules (*note Using Implicit\n     Rules: Implicit Rules.).  You can still define your own by writing\n     pattern rules (*note Defining and Redefining Pattern Rules:\n     Pattern Rules.).  The `-r' option also clears out the default list\n     of suffixes for suffix rules (*note Old-Fashioned Suffix Rules:\n     Suffix Rules.).  But you can still define your own suffixes with a\n     rule for `.SUFFIXES', and then define your own suffix rules.  Note\n     that only _rules_ are affected by the `-r' option; default\n     variables remain in effect (*note Variables Used by Implicit\n     Rules: Implicit Variables.); see the `-R' option below.\n\n`-R'\n`--no-builtin-variables'\n     Eliminate use of the built-in rule-specific variables (*note\n     Variables Used by Implicit Rules: Implicit Variables.).  You can\n     still define your own, of course.  The `-R' option also\n     automatically enables the `-r' option (see above), since it\n     doesn't make sense to have implicit rules without any definitions\n     for the variables that they use.\n\n`-s'\n`--silent'\n`--quiet'\n     Silent operation; do not print the commands as they are executed.\n     *Note Command Echoing: Echoing.\n\n`-S'\n`--no-keep-going'\n`--stop'\n     Cancel the effect of the `-k' option.  This is never necessary\n     except in a recursive `make' where `-k' might be inherited from\n     the top-level `make' via `MAKEFLAGS' (*note Recursive Use of\n     `make': Recursion.)  or if you set `-k' in `MAKEFLAGS' in your\n     environment.\n\n`-t'\n`--touch'\n     Touch files (mark them up to date without really changing them)\n     instead of running their commands.  This is used to pretend that\n     the commands were done, in order to fool future invocations of\n     `make'.  *Note Instead of Executing the Commands: Instead of\n     Execution.\n\n`-v'\n`--version'\n     Print the version of the `make' program plus a copyright, a list\n     of authors, and a notice that there is no warranty; then exit.\n\n`-w'\n`--print-directory'\n     Print a message containing the working directory both before and\n     after executing the makefile.  This may be useful for tracking\n     down errors from complicated nests of recursive `make' commands.\n     *Note Recursive Use of `make': Recursion.  (In practice, you\n     rarely need to specify this option since `make' does it for you;\n     see *note The `--print-directory' Option: -w Option.)\n\n`--no-print-directory'\n     Disable printing of the working directory under `-w'.  This option\n     is useful when `-w' is turned on automatically, but you do not\n     want to see the extra messages.  *Note The `--print-directory'\n     Option: -w Option.\n\n`-W FILE'\n`--what-if=FILE'\n`--new-file=FILE'\n`--assume-new=FILE'\n     Pretend that the target FILE has just been modified.  When used\n     with the `-n' flag, this shows you what would happen if you were\n     to modify that file.  Without `-n', it is almost the same as\n     running a `touch' command on the given file before running `make',\n     except that the modification time is changed only in the\n     imagination of `make'.  *Note Instead of Executing the Commands:\n     Instead of Execution.\n\n`--warn-undefined-variables'\n     Issue a warning message whenever `make' sees a reference to an\n     undefined variable.  This can be helpful when you are trying to\n     debug makefiles which use variables in complex ways.\n\n\u001f\nFile: make.info,  Node: Implicit Rules,  Next: Archives,  Prev: Running,  Up: Top\n\n10 Using Implicit Rules\n***********************\n\nCertain standard ways of remaking target files are used very often.  For\nexample, one customary way to make an object file is from a C source\nfile using the C compiler, `cc'.\n\n   \"Implicit rules\" tell `make' how to use customary techniques so that\nyou do not have to specify them in detail when you want to use them.\nFor example, there is an implicit rule for C compilation.  File names\ndetermine which implicit rules are run.  For example, C compilation\ntypically takes a `.c' file and makes a `.o' file.  So `make' applies\nthe implicit rule for C compilation when it sees this combination of\nfile name endings.\n\n   A chain of implicit rules can apply in sequence; for example, `make'\nwill remake a `.o' file from a `.y' file by way of a `.c' file.\n\n   The built-in implicit rules use several variables in their commands\nso that, by changing the values of the variables, you can change the\nway the implicit rule works.  For example, the variable `CFLAGS'\ncontrols the flags given to the C compiler by the implicit rule for C\ncompilation.\n\n   You can define your own implicit rules by writing \"pattern rules\".\n\n   \"Suffix rules\" are a more limited way to define implicit rules.\nPattern rules are more general and clearer, but suffix rules are\nretained for compatibility.\n\n* Menu:\n\n* Using Implicit::              How to use an existing implicit rule\n                                  to get the commands for updating a file.\n* Catalogue of Rules::          A list of built-in implicit rules.\n* Implicit Variables::          How to change what predefined rules do.\n* Chained Rules::               How to use a chain of implicit rules.\n* Pattern Rules::               How to define new implicit rules.\n* Last Resort::                 How to define commands for rules which\n                                  cannot find any.\n* Suffix Rules::                The old-fashioned style of implicit rule.\n* Implicit Rule Search::        The precise algorithm for applying\n                                  implicit rules.\n\n\u001f\nFile: make.info,  Node: Using Implicit,  Next: Catalogue of Rules,  Prev: Implicit Rules,  Up: Implicit Rules\n\n10.1 Using Implicit Rules\n=========================\n\nTo allow `make' to find a customary method for updating a target file,\nall you have to do is refrain from specifying commands yourself.  Either\nwrite a rule with no command lines, or don't write a rule at all.  Then\n`make' will figure out which implicit rule to use based on which kind\nof source file exists or can be made.\n\n   For example, suppose the makefile looks like this:\n\n     foo : foo.o bar.o\n             cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)\n\nBecause you mention `foo.o' but do not give a rule for it, `make' will\nautomatically look for an implicit rule that tells how to update it.\nThis happens whether or not the file `foo.o' currently exists.\n\n   If an implicit rule is found, it can supply both commands and one or\nmore prerequisites (the source files).  You would want to write a rule\nfor `foo.o' with no command lines if you need to specify additional\nprerequisites, such as header files, that the implicit rule cannot\nsupply.\n\n   Each implicit rule has a target pattern and prerequisite patterns.\nThere may be many implicit rules with the same target pattern.  For\nexample, numerous rules make `.o' files: one, from a `.c' file with the\nC compiler; another, from a `.p' file with the Pascal compiler; and so\non.  The rule that actually applies is the one whose prerequisites\nexist or can be made.  So, if you have a file `foo.c', `make' will run\nthe C compiler; otherwise, if you have a file `foo.p', `make' will run\nthe Pascal compiler; and so on.\n\n   Of course, when you write the makefile, you know which implicit rule\nyou want `make' to use, and you know it will choose that one because you\nknow which possible prerequisite files are supposed to exist.  *Note\nCatalogue of Implicit Rules: Catalogue of Rules, for a catalogue of all\nthe predefined implicit rules.\n\n   Above, we said an implicit rule applies if the required\nprerequisites \"exist or can be made\".  A file \"can be made\" if it is\nmentioned explicitly in the makefile as a target or a prerequisite, or\nif an implicit rule can be recursively found for how to make it.  When\nan implicit prerequisite is the result of another implicit rule, we say\nthat \"chaining\" is occurring.  *Note Chains of Implicit Rules: Chained\nRules.\n\n   In general, `make' searches for an implicit rule for each target, and\nfor each double-colon rule, that has no commands.  A file that is\nmentioned only as a prerequisite is considered a target whose rule\nspecifies nothing, so implicit rule search happens for it.  *Note\nImplicit Rule Search Algorithm: Implicit Rule Search, for the details\nof how the search is done.\n\n   Note that explicit prerequisites do not influence implicit rule\nsearch.  For example, consider this explicit rule:\n\n     foo.o: foo.p\n\nThe prerequisite on `foo.p' does not necessarily mean that `make' will\nremake `foo.o' according to the implicit rule to make an object file, a\n`.o' file, from a Pascal source file, a `.p' file.  For example, if\n`foo.c' also exists, the implicit rule to make an object file from a C\nsource file is used instead, because it appears before the Pascal rule\nin the list of predefined implicit rules (*note Catalogue of Implicit\nRules: Catalogue of Rules.).\n\n   If you do not want an implicit rule to be used for a target that has\nno commands, you can give that target empty commands by writing a\nsemicolon (*note Defining Empty Commands: Empty Commands.).\n\n\u001f\nFile: make.info,  Node: Catalogue of Rules,  Next: Implicit Variables,  Prev: Using Implicit,  Up: Implicit Rules\n\n10.2 Catalogue of Implicit Rules\n================================\n\nHere is a catalogue of predefined implicit rules which are always\navailable unless the makefile explicitly overrides or cancels them.\n*Note Canceling Implicit Rules: Canceling Rules, for information on\ncanceling or overriding an implicit rule.  The `-r' or\n`--no-builtin-rules' option cancels all predefined rules.\n\n   This manual only documents the default rules available on POSIX-based\noperating systems.  Other operating systems, such as VMS, Windows,\nOS/2, etc. may have different sets of default rules.  To see the full\nlist of default rules and variables available in your version of GNU\n`make', run `make -p' in a directory with no makefile.\n\n   Not all of these rules will always be defined, even when the `-r'\noption is not given.  Many of the predefined implicit rules are\nimplemented in `make' as suffix rules, so which ones will be defined\ndepends on the \"suffix list\" (the list of prerequisites of the special\ntarget `.SUFFIXES').  The default suffix list is: `.out', `.a', `.ln',\n`.o', `.c', `.cc', `.C', `.cpp', `.p', `.f', `.F', `.r', `.y', `.l',\n`.s', `.S', `.mod', `.sym', `.def', `.h', `.info', `.dvi', `.tex',\n`.texinfo', `.texi', `.txinfo', `.w', `.ch' `.web', `.sh', `.elc',\n`.el'.  All of the implicit rules described below whose prerequisites\nhave one of these suffixes are actually suffix rules.  If you modify\nthe suffix list, the only predefined suffix rules in effect will be\nthose named by one or two of the suffixes that are on the list you\nspecify; rules whose suffixes fail to be on the list are disabled.\n*Note Old-Fashioned Suffix Rules: Suffix Rules, for full details on\nsuffix rules.\n\nCompiling C programs\n     `N.o' is made automatically from `N.c' with a command of the form\n     `$(CC) -c $(CPPFLAGS) $(CFLAGS)'.\n\nCompiling C++ programs\n     `N.o' is made automatically from `N.cc', `N.cpp', or `N.C' with a\n     command of the form `$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)'.  We\n     encourage you to use the suffix `.cc' for C++ source files instead\n     of `.C'.\n\nCompiling Pascal programs\n     `N.o' is made automatically from `N.p' with the command `$(PC) -c\n     $(PFLAGS)'.\n\nCompiling Fortran and Ratfor programs\n     `N.o' is made automatically from `N.r', `N.F' or `N.f' by running\n     the Fortran compiler.  The precise command used is as follows:\n\n    `.f'\n          `$(FC) -c $(FFLAGS)'.\n\n    `.F'\n          `$(FC) -c $(FFLAGS) $(CPPFLAGS)'.\n\n    `.r'\n          `$(FC) -c $(FFLAGS) $(RFLAGS)'.\n\nPreprocessing Fortran and Ratfor programs\n     `N.f' is made automatically from `N.r' or `N.F'.  This rule runs\n     just the preprocessor to convert a Ratfor or preprocessable\n     Fortran program into a strict Fortran program.  The precise\n     command used is as follows:\n\n    `.F'\n          `$(FC) -F $(CPPFLAGS) $(FFLAGS)'.\n\n    `.r'\n          `$(FC) -F $(FFLAGS) $(RFLAGS)'.\n\nCompiling Modula-2 programs\n     `N.sym' is made from `N.def' with a command of the form `$(M2C)\n     $(M2FLAGS) $(DEFFLAGS)'.  `N.o' is made from `N.mod'; the form is:\n     `$(M2C) $(M2FLAGS) $(MODFLAGS)'.\n\nAssembling and preprocessing assembler programs\n     `N.o' is made automatically from `N.s' by running the assembler,\n     `as'.  The precise command is `$(AS) $(ASFLAGS)'.\n\n     `N.s' is made automatically from `N.S' by running the C\n     preprocessor, `cpp'.  The precise command is `$(CPP) $(CPPFLAGS)'.\n\nLinking a single object file\n     `N' is made automatically from `N.o' by running the linker\n     (usually called `ld') via the C compiler.  The precise command\n     used is `$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)'.\n\n     This rule does the right thing for a simple program with only one\n     source file.  It will also do the right thing if there are multiple\n     object files (presumably coming from various other source files),\n     one of which has a name matching that of the executable file.\n     Thus,\n\n          x: y.o z.o\n\n     when `x.c', `y.c' and `z.c' all exist will execute:\n\n          cc -c x.c -o x.o\n          cc -c y.c -o y.o\n          cc -c z.c -o z.o\n          cc x.o y.o z.o -o x\n          rm -f x.o\n          rm -f y.o\n          rm -f z.o\n\n     In more complicated cases, such as when there is no object file\n     whose name derives from the executable file name, you must write\n     an explicit command for linking.\n\n     Each kind of file automatically made into `.o' object files will\n     be automatically linked by using the compiler (`$(CC)', `$(FC)' or\n     `$(PC)'; the C compiler `$(CC)' is used to assemble `.s' files)\n     without the `-c' option.  This could be done by using the `.o'\n     object files as intermediates, but it is faster to do the\n     compiling and linking in one step, so that's how it's done.\n\nYacc for C programs\n     `N.c' is made automatically from `N.y' by running Yacc with the\n     command `$(YACC) $(YFLAGS)'.\n\nLex for C programs\n     `N.c' is made automatically from `N.l' by running Lex.  The actual\n     command is `$(LEX) $(LFLAGS)'.\n\nLex for Ratfor programs\n     `N.r' is made automatically from `N.l' by running Lex.  The actual\n     command is `$(LEX) $(LFLAGS)'.\n\n     The convention of using the same suffix `.l' for all Lex files\n     regardless of whether they produce C code or Ratfor code makes it\n     impossible for `make' to determine automatically which of the two\n     languages you are using in any particular case.  If `make' is\n     called upon to remake an object file from a `.l' file, it must\n     guess which compiler to use.  It will guess the C compiler, because\n     that is more common.  If you are using Ratfor, make sure `make'\n     knows this by mentioning `N.r' in the makefile.  Or, if you are\n     using Ratfor exclusively, with no C files, remove `.c' from the\n     list of implicit rule suffixes with:\n\n          .SUFFIXES:\n          .SUFFIXES: .o .r .f .l ...\n\nMaking Lint Libraries from C, Yacc, or Lex programs\n     `N.ln' is made from `N.c' by running `lint'.  The precise command\n     is `$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i'.  The same command is\n     used on the C code produced from `N.y' or `N.l'.\n\nTeX and Web\n     `N.dvi' is made from `N.tex' with the command `$(TEX)'.  `N.tex'\n     is made from `N.web' with `$(WEAVE)', or from `N.w' (and from\n     `N.ch' if it exists or can be made) with `$(CWEAVE)'.  `N.p' is\n     made from `N.web' with `$(TANGLE)' and `N.c' is made from `N.w'\n     (and from `N.ch' if it exists or can be made) with `$(CTANGLE)'.\n\nTexinfo and Info\n     `N.dvi' is made from `N.texinfo', `N.texi', or `N.txinfo', with\n     the command `$(TEXI2DVI) $(TEXI2DVI_FLAGS)'.  `N.info' is made from\n     `N.texinfo', `N.texi', or `N.txinfo', with the command\n     `$(MAKEINFO) $(MAKEINFO_FLAGS)'.\n\nRCS\n     Any file `N' is extracted if necessary from an RCS file named\n     either `N,v' or `RCS/N,v'.  The precise command used is\n     `$(CO) $(COFLAGS)'.  `N' will not be extracted from RCS if it\n     already exists, even if the RCS file is newer.  The rules for RCS\n     are terminal (*note Match-Anything Pattern Rules: Match-Anything\n     Rules.), so RCS files cannot be generated from another source;\n     they must actually exist.\n\nSCCS\n     Any file `N' is extracted if necessary from an SCCS file named\n     either `s.N' or `SCCS/s.N'.  The precise command used is\n     `$(GET) $(GFLAGS)'.  The rules for SCCS are terminal (*note\n     Match-Anything Pattern Rules: Match-Anything Rules.), so SCCS\n     files cannot be generated from another source; they must actually\n     exist.\n\n     For the benefit of SCCS, a file `N' is copied from `N.sh' and made\n     executable (by everyone).  This is for shell scripts that are\n     checked into SCCS.  Since RCS preserves the execution permission\n     of a file, you do not need to use this feature with RCS.\n\n     We recommend that you avoid using of SCCS.  RCS is widely held to\n     be superior, and is also free.  By choosing free software in place\n     of comparable (or inferior) proprietary software, you support the\n     free software movement.\n\n   Usually, you want to change only the variables listed in the table\nabove, which are documented in the following section.\n\n   However, the commands in built-in implicit rules actually use\nvariables such as `COMPILE.c', `LINK.p', and `PREPROCESS.S', whose\nvalues contain the commands listed above.\n\n   `make' follows the convention that the rule to compile a `.X' source\nfile uses the variable `COMPILE.X'.  Similarly, the rule to produce an\nexecutable from a `.X' file uses `LINK.X'; and the rule to preprocess a\n`.X' file uses `PREPROCESS.X'.\n\n   Every rule that produces an object file uses the variable\n`OUTPUT_OPTION'.  `make' defines this variable either to contain `-o\n$@', or to be empty, depending on a compile-time option.  You need the\n`-o' option to ensure that the output goes into the right file when the\nsource file is in a different directory, as when using `VPATH' (*note\nDirectory Search::).  However, compilers on some systems do not accept\na `-o' switch for object files.  If you use such a system, and use\n`VPATH', some compilations will put their output in the wrong place.  A\npossible workaround for this problem is to give `OUTPUT_OPTION' the\nvalue `; mv $*.o $@'.\n\n\u001f\nFile: make.info,  Node: Implicit Variables,  Next: Chained Rules,  Prev: Catalogue of Rules,  Up: Implicit Rules\n\n10.3 Variables Used by Implicit Rules\n=====================================\n\nThe commands in built-in implicit rules make liberal use of certain\npredefined variables.  You can alter the values of these variables in\nthe makefile, with arguments to `make', or in the environment to alter\nhow the implicit rules work without redefining the rules themselves.\nYou can cancel all variables used by implicit rules with the `-R' or\n`--no-builtin-variables' option.\n\n   For example, the command used to compile a C source file actually\nsays `$(CC) -c $(CFLAGS) $(CPPFLAGS)'.  The default values of the\nvariables used are `cc' and nothing, resulting in the command `cc -c'.\nBy redefining `CC' to `ncc', you could cause `ncc' to be used for all C\ncompilations performed by the implicit rule.  By redefining `CFLAGS' to\nbe `-g', you could pass the `-g' option to each compilation.  _All_\nimplicit rules that do C compilation use `$(CC)' to get the program\nname for the compiler and _all_ include `$(CFLAGS)' among the arguments\ngiven to the compiler.\n\n   The variables used in implicit rules fall into two classes: those\nthat are names of programs (like `CC') and those that contain arguments\nfor the programs (like `CFLAGS').  (The \"name of a program\" may also\ncontain some command arguments, but it must start with an actual\nexecutable program name.)  If a variable value contains more than one\nargument, separate them with spaces.\n\n   The following tables describe of some of the more commonly-used\npredefined variables.  This list is not exhaustive, and the default\nvalues shown here may not be what are selected by `make' for your\nenvironment.  To see the complete list of predefined variables for your\ninstance of GNU `make' you can run `make -p' in a directory with no\nmakefiles.\n\n   Here is a table of some of the more common variables used as names of\nprograms in built-in rules: makefiles.\n\n`AR'\n     Archive-maintaining program; default `ar'.  \n\n`AS'\n     Program for compiling assembly files; default `as'.  \n\n`CC'\n     Program for compiling C programs; default `cc'.  \n\n`CO'\n     Program for checking out files from RCS; default `co'.  \n\n`CXX'\n     Program for compiling C++ programs; default `g++'.  \n\n`CO'\n     Program for extracting a file from RCS; default `co'.  \n\n`CPP'\n     Program for running the C preprocessor, with results to standard\n     output; default `$(CC) -E'.\n\n`FC'\n     Program for compiling or preprocessing Fortran and Ratfor programs;\n     default `f77'.  \n\n`GET'\n     Program for extracting a file from SCCS; default `get'.  \n\n`LEX'\n     Program to use to turn Lex grammars into source code; default\n     `lex'.  \n\n`YACC'\n     Program to use to turn Yacc grammars into source code; default\n     `yacc'.  \n\n`LINT'\n     Program to use to run lint on source code; default `lint'.  \n\n`M2C'\n     Program to use to compile Modula-2 source code; default `m2c'.  \n\n`PC'\n     Program for compiling Pascal programs; default `pc'.  \n\n`MAKEINFO'\n     Program to convert a Texinfo source file into an Info file; default\n     `makeinfo'.  \n\n`TEX'\n     Program to make TeX DVI files from TeX source; default `tex'.  \n\n`TEXI2DVI'\n     Program to make TeX DVI files from Texinfo source; default\n     `texi2dvi'.  \n\n`WEAVE'\n     Program to translate Web into TeX; default `weave'.  \n\n`CWEAVE'\n     Program to translate C Web into TeX; default `cweave'.  \n\n`TANGLE'\n     Program to translate Web into Pascal; default `tangle'.  \n\n`CTANGLE'\n     Program to translate C Web into C; default `ctangle'.  \n\n`RM'\n     Command to remove a file; default `rm -f'.  \n\n   Here is a table of variables whose values are additional arguments\nfor the programs above.  The default values for all of these is the\nempty string, unless otherwise noted.\n\n`ARFLAGS'\n     Flags to give the archive-maintaining program; default `rv'.\n\n`ASFLAGS'\n     Extra flags to give to the assembler (when explicitly invoked on a\n     `.s' or `.S' file).\n\n`CFLAGS'\n     Extra flags to give to the C compiler.\n\n`CXXFLAGS'\n     Extra flags to give to the C++ compiler.\n\n`COFLAGS'\n     Extra flags to give to the RCS `co' program.\n\n`CPPFLAGS'\n     Extra flags to give to the C preprocessor and programs that use it\n     (the C and Fortran compilers).\n\n`FFLAGS'\n     Extra flags to give to the Fortran compiler.\n\n`GFLAGS'\n     Extra flags to give to the SCCS `get' program.\n\n`LDFLAGS'\n     Extra flags to give to compilers when they are supposed to invoke\n     the linker, `ld'.\n\n`LFLAGS'\n     Extra flags to give to Lex.\n\n`YFLAGS'\n     Extra flags to give to Yacc.\n\n`PFLAGS'\n     Extra flags to give to the Pascal compiler.\n\n`RFLAGS'\n     Extra flags to give to the Fortran compiler for Ratfor programs.\n\n`LINTFLAGS'\n     Extra flags to give to lint.\n\n\u001f\nFile: make.info,  Node: Chained Rules,  Next: Pattern Rules,  Prev: Implicit Variables,  Up: Implicit Rules\n\n10.4 Chains of Implicit Rules\n=============================\n\nSometimes a file can be made by a sequence of implicit rules.  For\nexample, a file `N.o' could be made from `N.y' by running first Yacc\nand then `cc'.  Such a sequence is called a \"chain\".\n\n   If the file `N.c' exists, or is mentioned in the makefile, no\nspecial searching is required: `make' finds that the object file can be\nmade by C compilation from `N.c'; later on, when considering how to\nmake `N.c', the rule for running Yacc is used.  Ultimately both `N.c'\nand `N.o' are updated.\n\n   However, even if `N.c' does not exist and is not mentioned, `make'\nknows how to envision it as the missing link between `N.o' and `N.y'!\nIn this case, `N.c' is called an \"intermediate file\".  Once `make' has\ndecided to use the intermediate file, it is entered in the data base as\nif it had been mentioned in the makefile, along with the implicit rule\nthat says how to create it.\n\n   Intermediate files are remade using their rules just like all other\nfiles.  But intermediate files are treated differently in two ways.\n\n   The first difference is what happens if the intermediate file does\nnot exist.  If an ordinary file B does not exist, and `make' considers\na target that depends on B, it invariably creates B and then updates\nthe target from B.  But if B is an intermediate file, then `make' can\nleave well enough alone.  It won't bother updating B, or the ultimate\ntarget, unless some prerequisite of B is newer than that target or\nthere is some other reason to update that target.\n\n   The second difference is that if `make' _does_ create B in order to\nupdate something else, it deletes B later on after it is no longer\nneeded.  Therefore, an intermediate file which did not exist before\n`make' also does not exist after `make'.  `make' reports the deletion\nto you by printing a `rm -f' command showing which file it is deleting.\n\n   Ordinarily, a file cannot be intermediate if it is mentioned in the\nmakefile as a target or prerequisite.  However, you can explicitly mark\na file as intermediate by listing it as a prerequisite of the special\ntarget `.INTERMEDIATE'.  This takes effect even if the file is mentioned\nexplicitly in some other way.\n\n   You can prevent automatic deletion of an intermediate file by\nmarking it as a \"secondary\" file.  To do this, list it as a\nprerequisite of the special target `.SECONDARY'.  When a file is\nsecondary, `make' will not create the file merely because it does not\nalready exist, but `make' does not automatically delete the file.\nMarking a file as secondary also marks it as intermediate.\n\n   You can list the target pattern of an implicit rule (such as `%.o')\nas a prerequisite of the special target `.PRECIOUS' to preserve\nintermediate files made by implicit rules whose target patterns match\nthat file's name; see *note Interrupts::.  \n\n   A chain can involve more than two implicit rules.  For example, it is\npossible to make a file `foo' from `RCS/foo.y,v' by running RCS, Yacc\nand `cc'.  Then both `foo.y' and `foo.c' are intermediate files that\nare deleted at the end.\n\n   No single implicit rule can appear more than once in a chain.  This\nmeans that `make' will not even consider such a ridiculous thing as\nmaking `foo' from `foo.o.o' by running the linker twice.  This\nconstraint has the added benefit of preventing any infinite loop in the\nsearch for an implicit rule chain.\n\n   There are some special implicit rules to optimize certain cases that\nwould otherwise be handled by rule chains.  For example, making `foo'\nfrom `foo.c' could be handled by compiling and linking with separate\nchained rules, using `foo.o' as an intermediate file.  But what\nactually happens is that a special rule for this case does the\ncompilation and linking with a single `cc' command.  The optimized rule\nis used in preference to the step-by-step chain because it comes\nearlier in the ordering of rules.\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/make.info-2",
    "content": "This is\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.info,\nproduced by makeinfo version 4.13 from\n/usr/local/google/digit/repo/opensource/ndk/sources/host-tools/make-3.81/doc/make.texi.\n\nThis file documents the GNU `make' utility, which determines\nautomatically which pieces of a large program need to be recompiled,\nand issues the commands to recompile them.\n\n   This is Edition 0.70, last updated 13 October 2011, of `The GNU Make\nManual', for GNU `make' version 3.81.\n\n   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\n     Permission is granted to copy, distribute and/or modify this\n     document under the terms of the GNU Free Documentation License,\n     Version 1.2 or any later version published by the Free Software\n     Foundation; with no Invariant Sections, with the Front-Cover Texts\n     being \"A GNU Manual,\" and with the Back-Cover Texts as in (a)\n     below.  A copy of the license is included in the section entitled\n     \"GNU Free Documentation License.\"\n\n     (a) The FSF's Back-Cover Text is: \"You have freedom to copy and\n     modify this GNU Manual, like GNU software.  Copies published by\n     the Free Software Foundation raise funds for GNU development.\"\n\nINFO-DIR-SECTION GNU Packages\nSTART-INFO-DIR-ENTRY\n* Make: (make).            Remake files automatically.\nEND-INFO-DIR-ENTRY\n\n\u001f\nFile: make.info,  Node: Pattern Rules,  Next: Last Resort,  Prev: Chained Rules,  Up: Implicit Rules\n\n10.5 Defining and Redefining Pattern Rules\n==========================================\n\nYou define an implicit rule by writing a \"pattern rule\".  A pattern\nrule looks like an ordinary rule, except that its target contains the\ncharacter `%' (exactly one of them).  The target is considered a\npattern for matching file names; the `%' can match any nonempty\nsubstring, while other characters match only themselves.  The\nprerequisites likewise use `%' to show how their names relate to the\ntarget name.\n\n   Thus, a pattern rule `%.o : %.c' says how to make any file `STEM.o'\nfrom another file `STEM.c'.\n\n   Note that expansion using `%' in pattern rules occurs *after* any\nvariable or function expansions, which take place when the makefile is\nread.  *Note How to Use Variables: Using Variables, and *note Functions\nfor Transforming Text: Functions.\n\n* Menu:\n\n* Pattern Intro::               An introduction to pattern rules.\n* Pattern Examples::            Examples of pattern rules.\n* Automatic Variables::         How to use automatic variables in the\n                                  commands of implicit rules.\n* Pattern Match::               How patterns match.\n* Match-Anything Rules::        Precautions you should take prior to\n                                  defining rules that can match any\n                                  target file whatever.\n* Canceling Rules::             How to override or cancel built-in rules.\n\n\u001f\nFile: make.info,  Node: Pattern Intro,  Next: Pattern Examples,  Prev: Pattern Rules,  Up: Pattern Rules\n\n10.5.1 Introduction to Pattern Rules\n------------------------------------\n\nA pattern rule contains the character `%' (exactly one of them) in the\ntarget; otherwise, it looks exactly like an ordinary rule.  The target\nis a pattern for matching file names; the `%' matches any nonempty\nsubstring, while other characters match only themselves.  \n\n   For example, `%.c' as a pattern matches any file name that ends in\n`.c'.  `s.%.c' as a pattern matches any file name that starts with\n`s.', ends in `.c' and is at least five characters long.  (There must\nbe at least one character to match the `%'.)  The substring that the\n`%' matches is called the \"stem\".\n\n   `%' in a prerequisite of a pattern rule stands for the same stem\nthat was matched by the `%' in the target.  In order for the pattern\nrule to apply, its target pattern must match the file name under\nconsideration and all of its prerequisites (after pattern substitution)\nmust name files that exist or can be made.  These files become\nprerequisites of the target.  \n\n   Thus, a rule of the form\n\n     %.o : %.c ; COMMAND...\n\nspecifies how to make a file `N.o', with another file `N.c' as its\nprerequisite, provided that `N.c' exists or can be made.\n\n   There may also be prerequisites that do not use `%'; such a\nprerequisite attaches to every file made by this pattern rule.  These\nunvarying prerequisites are useful occasionally.\n\n   A pattern rule need not have any prerequisites that contain `%', or\nin fact any prerequisites at all.  Such a rule is effectively a general\nwildcard.  It provides a way to make any file that matches the target\npattern.  *Note Last Resort::.\n\n   Pattern rules may have more than one target.  Unlike normal rules,\nthis does not act as many different rules with the same prerequisites\nand commands.  If a pattern rule has multiple targets, `make' knows that\nthe rule's commands are responsible for making all of the targets.  The\ncommands are executed only once to make all the targets.  When searching\nfor a pattern rule to match a target, the target patterns of a rule\nother than the one that matches the target in need of a rule are\nincidental: `make' worries only about giving commands and prerequisites\nto the file presently in question.  However, when this file's commands\nare run, the other targets are marked as having been updated themselves.  \n\n   The order in which pattern rules appear in the makefile is important\nsince this is the order in which they are considered.  Of equally\napplicable rules, only the first one found is used.  The rules you\nwrite take precedence over those that are built in.  Note however, that\na rule whose prerequisites actually exist or are mentioned always takes\npriority over a rule with prerequisites that must be made by chaining\nother implicit rules.  \n\n\u001f\nFile: make.info,  Node: Pattern Examples,  Next: Automatic Variables,  Prev: Pattern Intro,  Up: Pattern Rules\n\n10.5.2 Pattern Rule Examples\n----------------------------\n\nHere are some examples of pattern rules actually predefined in `make'.\nFirst, the rule that compiles `.c' files into `.o' files:\n\n     %.o : %.c\n             $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@\n\ndefines a rule that can make any file `X.o' from `X.c'.  The command\nuses the automatic variables `$@' and `$<' to substitute the names of\nthe target file and the source file in each case where the rule applies\n(*note Automatic Variables::).\n\n   Here is a second built-in rule:\n\n     % :: RCS/%,v\n             $(CO) $(COFLAGS) $<\n\ndefines a rule that can make any file `X' whatsoever from a\ncorresponding file `X,v' in the subdirectory `RCS'.  Since the target\nis `%', this rule will apply to any file whatever, provided the\nappropriate prerequisite file exists.  The double colon makes the rule\n\"terminal\", which means that its prerequisite may not be an intermediate\nfile (*note Match-Anything Pattern Rules: Match-Anything Rules.).\n\n   This pattern rule has two targets:\n\n     %.tab.c %.tab.h: %.y\n             bison -d $<\n\nThis tells `make' that the command `bison -d X.y' will make both\n`X.tab.c' and `X.tab.h'.  If the file `foo' depends on the files\n`parse.tab.o' and `scan.o' and the file `scan.o' depends on the file\n`parse.tab.h', when `parse.y' is changed, the command `bison -d parse.y'\nwill be executed only once, and the prerequisites of both `parse.tab.o'\nand `scan.o' will be satisfied.  (Presumably the file `parse.tab.o'\nwill be recompiled from `parse.tab.c' and the file `scan.o' from\n`scan.c', while `foo' is linked from `parse.tab.o', `scan.o', and its\nother prerequisites, and it will execute happily ever after.)\n\n\u001f\nFile: make.info,  Node: Automatic Variables,  Next: Pattern Match,  Prev: Pattern Examples,  Up: Pattern Rules\n\n10.5.3 Automatic Variables\n--------------------------\n\nSuppose you are writing a pattern rule to compile a `.c' file into a\n`.o' file: how do you write the `cc' command so that it operates on the\nright source file name?  You cannot write the name in the command,\nbecause the name is different each time the implicit rule is applied.\n\n   What you do is use a special feature of `make', the \"automatic\nvariables\".  These variables have values computed afresh for each rule\nthat is executed, based on the target and prerequisites of the rule.\nIn this example, you would use `$@' for the object file name and `$<'\nfor the source file name.\n\n   It's very important that you recognize the limited scope in which\nautomatic variable values are available: they only have values within\nthe command script.  In particular, you cannot use them anywhere within\nthe target list of a rule; they have no value there and will expand to\nthe empty string.  Also, they cannot be accessed directly within the\nprerequisite list of a rule.  A common mistake is attempting to use\n`$@' within the prerequisites list; this will not work.  However, there\nis a special feature of GNU `make', secondary expansion (*note\nSecondary Expansion::), which will allow automatic variable values to\nbe used in prerequisite lists.\n\n   Here is a table of automatic variables:\n\n`$@'\n     The file name of the target of the rule.  If the target is an\n     archive member, then `$@' is the name of the archive file.  In a\n     pattern rule that has multiple targets (*note Introduction to\n     Pattern Rules: Pattern Intro.), `$@' is the name of whichever\n     target caused the rule's commands to be run.\n\n`$%'\n     The target member name, when the target is an archive member.\n     *Note Archives::.  For example, if the target is `foo.a(bar.o)'\n     then `$%' is `bar.o' and `$@' is `foo.a'.  `$%' is empty when the\n     target is not an archive member.\n\n`$<'\n     The name of the first prerequisite.  If the target got its\n     commands from an implicit rule, this will be the first\n     prerequisite added by the implicit rule (*note Implicit Rules::).\n\n`$?'\n     The names of all the prerequisites that are newer than the target,\n     with spaces between them.  For prerequisites which are archive\n     members, only the member named is used (*note Archives::).  \n\n`$^'\n     The names of all the prerequisites, with spaces between them.  For\n     prerequisites which are archive members, only the member named is\n     used (*note Archives::).  A target has only one prerequisite on\n     each other file it depends on, no matter how many times each file\n     is listed as a prerequisite.  So if you list a prerequisite more\n     than once for a target, the value of `$^' contains just one copy\n     of the name.  This list does *not* contain any of the order-only\n     prerequisites; for those see the `$|' variable, below.  \n\n`$+'\n     This is like `$^', but prerequisites listed more than once are\n     duplicated in the order they were listed in the makefile.  This is\n     primarily useful for use in linking commands where it is\n     meaningful to repeat library file names in a particular order.\n\n`$|'\n     The names of all the order-only prerequisites, with spaces between\n     them.\n\n`$*'\n     The stem with which an implicit rule matches (*note How Patterns\n     Match: Pattern Match.).  If the target is `dir/a.foo.b' and the\n     target pattern is `a.%.b' then the stem is `dir/foo'.  The stem is\n     useful for constructing names of related files.  \n\n     In a static pattern rule, the stem is part of the file name that\n     matched the `%' in the target pattern.\n\n     In an explicit rule, there is no stem; so `$*' cannot be determined\n     in that way.  Instead, if the target name ends with a recognized\n     suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), `$*' is\n     set to the target name minus the suffix.  For example, if the\n     target name is `foo.c', then `$*' is set to `foo', since `.c' is a\n     suffix.  GNU `make' does this bizarre thing only for compatibility\n     with other implementations of `make'.  You should generally avoid\n     using `$*' except in implicit rules or static pattern rules.\n\n     If the target name in an explicit rule does not end with a\n     recognized suffix, `$*' is set to the empty string for that rule.\n\n   `$?' is useful even in explicit rules when you wish to operate on\nonly the prerequisites that have changed.  For example, suppose that an\narchive named `lib' is supposed to contain copies of several object\nfiles.  This rule copies just the changed object files into the archive:\n\n     lib: foo.o bar.o lose.o win.o\n             ar r lib $?\n\n   Of the variables listed above, four have values that are single file\nnames, and three have values that are lists of file names.  These seven\nhave variants that get just the file's directory name or just the file\nname within the directory.  The variant variables' names are formed by\nappending `D' or `F', respectively.  These variants are semi-obsolete\nin GNU `make' since the functions `dir' and `notdir' can be used to get\na similar effect (*note Functions for File Names: File Name\nFunctions.).  Note, however, that the `D' variants all omit the\ntrailing slash which always appears in the output of the `dir'\nfunction.  Here is a table of the variants:\n\n`$(@D)'\n     The directory part of the file name of the target, with the\n     trailing slash removed.  If the value of `$@' is `dir/foo.o' then\n     `$(@D)' is `dir'.  This value is `.' if `$@' does not contain a\n     slash.\n\n`$(@F)'\n     The file-within-directory part of the file name of the target.  If\n     the value of `$@' is `dir/foo.o' then `$(@F)' is `foo.o'.  `$(@F)'\n     is equivalent to `$(notdir $@)'.\n\n`$(*D)'\n`$(*F)'\n     The directory part and the file-within-directory part of the stem;\n     `dir' and `foo' in this example.\n\n`$(%D)'\n`$(%F)'\n     The directory part and the file-within-directory part of the target\n     archive member name.  This makes sense only for archive member\n     targets of the form `ARCHIVE(MEMBER)' and is useful only when\n     MEMBER may contain a directory name.  (*Note Archive Members as\n     Targets: Archive Members.)\n\n`$(<D)'\n`$(<F)'\n     The directory part and the file-within-directory part of the first\n     prerequisite.\n\n`$(^D)'\n`$(^F)'\n     Lists of the directory parts and the file-within-directory parts\n     of all prerequisites.\n\n`$(+D)'\n`$(+F)'\n     Lists of the directory parts and the file-within-directory parts\n     of all prerequisites, including multiple instances of duplicated\n     prerequisites.\n\n`$(?D)'\n`$(?F)'\n     Lists of the directory parts and the file-within-directory parts of\n     all prerequisites that are newer than the target.\n\n   Note that we use a special stylistic convention when we talk about\nthese automatic variables; we write \"the value of `$<'\", rather than\n\"the variable `<'\" as we would write for ordinary variables such as\n`objects' and `CFLAGS'.  We think this convention looks more natural in\nthis special case.  Please do not assume it has a deep significance;\n`$<' refers to the variable named `<' just as `$(CFLAGS)' refers to the\nvariable named `CFLAGS'.  You could just as well use `$(<)' in place of\n`$<'.\n\n\u001f\nFile: make.info,  Node: Pattern Match,  Next: Match-Anything Rules,  Prev: Automatic Variables,  Up: Pattern Rules\n\n10.5.4 How Patterns Match\n-------------------------\n\nA target pattern is composed of a `%' between a prefix and a suffix,\neither or both of which may be empty.  The pattern matches a file name\nonly if the file name starts with the prefix and ends with the suffix,\nwithout overlap.  The text between the prefix and the suffix is called\nthe \"stem\".  Thus, when the pattern `%.o' matches the file name\n`test.o', the stem is `test'.  The pattern rule prerequisites are\nturned into actual file names by substituting the stem for the character\n`%'.  Thus, if in the same example one of the prerequisites is written\nas `%.c', it expands to `test.c'.\n\n   When the target pattern does not contain a slash (and it usually does\nnot), directory names in the file names are removed from the file name\nbefore it is compared with the target prefix and suffix.  After the\ncomparison of the file name to the target pattern, the directory names,\nalong with the slash that ends them, are added on to the prerequisite\nfile names generated from the pattern rule's prerequisite patterns and\nthe file name.  The directories are ignored only for the purpose of\nfinding an implicit rule to use, not in the application of that rule.\nThus, `e%t' matches the file name `src/eat', with `src/a' as the stem.\nWhen prerequisites are turned into file names, the directories from the\nstem are added at the front, while the rest of the stem is substituted\nfor the `%'.  The stem `src/a' with a prerequisite pattern `c%r' gives\nthe file name `src/car'.\n\n\u001f\nFile: make.info,  Node: Match-Anything Rules,  Next: Canceling Rules,  Prev: Pattern Match,  Up: Pattern Rules\n\n10.5.5 Match-Anything Pattern Rules\n-----------------------------------\n\nWhen a pattern rule's target is just `%', it matches any file name\nwhatever.  We call these rules \"match-anything\" rules.  They are very\nuseful, but it can take a lot of time for `make' to think about them,\nbecause it must consider every such rule for each file name listed\neither as a target or as a prerequisite.\n\n   Suppose the makefile mentions `foo.c'.  For this target, `make'\nwould have to consider making it by linking an object file `foo.c.o',\nor by C compilation-and-linking in one step from `foo.c.c', or by\nPascal compilation-and-linking from `foo.c.p', and many other\npossibilities.\n\n   We know these possibilities are ridiculous since `foo.c' is a C\nsource file, not an executable.  If `make' did consider these\npossibilities, it would ultimately reject them, because files such as\n`foo.c.o' and `foo.c.p' would not exist.  But these possibilities are so\nnumerous that `make' would run very slowly if it had to consider them.\n\n   To gain speed, we have put various constraints on the way `make'\nconsiders match-anything rules.  There are two different constraints\nthat can be applied, and each time you define a match-anything rule you\nmust choose one or the other for that rule.\n\n   One choice is to mark the match-anything rule as \"terminal\" by\ndefining it with a double colon.  When a rule is terminal, it does not\napply unless its prerequisites actually exist.  Prerequisites that\ncould be made with other implicit rules are not good enough.  In other\nwords, no further chaining is allowed beyond a terminal rule.\n\n   For example, the built-in implicit rules for extracting sources from\nRCS and SCCS files are terminal; as a result, if the file `foo.c,v' does\nnot exist, `make' will not even consider trying to make it as an\nintermediate file from `foo.c,v.o' or from `RCS/SCCS/s.foo.c,v'.  RCS\nand SCCS files are generally ultimate source files, which should not be\nremade from any other files; therefore, `make' can save time by not\nlooking for ways to remake them.\n\n   If you do not mark the match-anything rule as terminal, then it is\nnonterminal.  A nonterminal match-anything rule cannot apply to a file\nname that indicates a specific type of data.  A file name indicates a\nspecific type of data if some non-match-anything implicit rule target\nmatches it.\n\n   For example, the file name `foo.c' matches the target for the pattern\nrule `%.c : %.y' (the rule to run Yacc).  Regardless of whether this\nrule is actually applicable (which happens only if there is a file\n`foo.y'), the fact that its target matches is enough to prevent\nconsideration of any nonterminal match-anything rules for the file\n`foo.c'.  Thus, `make' will not even consider trying to make `foo.c' as\nan executable file from `foo.c.o', `foo.c.c', `foo.c.p', etc.\n\n   The motivation for this constraint is that nonterminal match-anything\nrules are used for making files containing specific types of data (such\nas executable files) and a file name with a recognized suffix indicates\nsome other specific type of data (such as a C source file).\n\n   Special built-in dummy pattern rules are provided solely to recognize\ncertain file names so that nonterminal match-anything rules will not be\nconsidered.  These dummy rules have no prerequisites and no commands,\nand they are ignored for all other purposes.  For example, the built-in\nimplicit rule\n\n     %.p :\n\nexists to make sure that Pascal source files such as `foo.p' match a\nspecific target pattern and thereby prevent time from being wasted\nlooking for `foo.p.o' or `foo.p.c'.\n\n   Dummy pattern rules such as the one for `%.p' are made for every\nsuffix listed as valid for use in suffix rules (*note Old-Fashioned\nSuffix Rules: Suffix Rules.).\n\n\u001f\nFile: make.info,  Node: Canceling Rules,  Prev: Match-Anything Rules,  Up: Pattern Rules\n\n10.5.6 Canceling Implicit Rules\n-------------------------------\n\nYou can override a built-in implicit rule (or one you have defined\nyourself) by defining a new pattern rule with the same target and\nprerequisites, but different commands.  When the new rule is defined,\nthe built-in one is replaced.  The new rule's position in the sequence\nof implicit rules is determined by where you write the new rule.\n\n   You can cancel a built-in implicit rule by defining a pattern rule\nwith the same target and prerequisites, but no commands.  For example,\nthe following would cancel the rule that runs the assembler:\n\n     %.o : %.s\n\n\u001f\nFile: make.info,  Node: Last Resort,  Next: Suffix Rules,  Prev: Pattern Rules,  Up: Implicit Rules\n\n10.6 Defining Last-Resort Default Rules\n=======================================\n\nYou can define a last-resort implicit rule by writing a terminal\nmatch-anything pattern rule with no prerequisites (*note Match-Anything\nRules::).  This is just like any other pattern rule; the only thing\nspecial about it is that it will match any target.  So such a rule's\ncommands are used for all targets and prerequisites that have no\ncommands of their own and for which no other implicit rule applies.\n\n   For example, when testing a makefile, you might not care if the\nsource files contain real data, only that they exist.  Then you might\ndo this:\n\n     %::\n             touch $@\n\nto cause all the source files needed (as prerequisites) to be created\nautomatically.\n\n   You can instead define commands to be used for targets for which\nthere are no rules at all, even ones which don't specify commands.  You\ndo this by writing a rule for the target `.DEFAULT'.  Such a rule's\ncommands are used for all prerequisites which do not appear as targets\nin any explicit rule, and for which no implicit rule applies.\nNaturally, there is no `.DEFAULT' rule unless you write one.\n\n   If you use `.DEFAULT' with no commands or prerequisites:\n\n     .DEFAULT:\n\nthe commands previously stored for `.DEFAULT' are cleared.  Then `make'\nacts as if you had never defined `.DEFAULT' at all.\n\n   If you do not want a target to get the commands from a match-anything\npattern rule or `.DEFAULT', but you also do not want any commands to be\nrun for the target, you can give it empty commands (*note Defining\nEmpty Commands: Empty Commands.).\n\n   You can use a last-resort rule to override part of another makefile.\n*Note Overriding Part of Another Makefile: Overriding Makefiles.\n\n\u001f\nFile: make.info,  Node: Suffix Rules,  Next: Implicit Rule Search,  Prev: Last Resort,  Up: Implicit Rules\n\n10.7 Old-Fashioned Suffix Rules\n===============================\n\n\"Suffix rules\" are the old-fashioned way of defining implicit rules for\n`make'.  Suffix rules are obsolete because pattern rules are more\ngeneral and clearer.  They are supported in GNU `make' for\ncompatibility with old makefiles.  They come in two kinds:\n\"double-suffix\" and \"single-suffix\".\n\n   A double-suffix rule is defined by a pair of suffixes: the target\nsuffix and the source suffix.  It matches any file whose name ends with\nthe target suffix.  The corresponding implicit prerequisite is made by\nreplacing the target suffix with the source suffix in the file name.  A\ntwo-suffix rule whose target and source suffixes are `.o' and `.c' is\nequivalent to the pattern rule `%.o : %.c'.\n\n   A single-suffix rule is defined by a single suffix, which is the\nsource suffix.  It matches any file name, and the corresponding implicit\nprerequisite name is made by appending the source suffix.  A\nsingle-suffix rule whose source suffix is `.c' is equivalent to the\npattern rule `% : %.c'.\n\n   Suffix rule definitions are recognized by comparing each rule's\ntarget against a defined list of known suffixes.  When `make' sees a\nrule whose target is a known suffix, this rule is considered a\nsingle-suffix rule.  When `make' sees a rule whose target is two known\nsuffixes concatenated, this rule is taken as a double-suffix rule.\n\n   For example, `.c' and `.o' are both on the default list of known\nsuffixes.  Therefore, if you define a rule whose target is `.c.o',\n`make' takes it to be a double-suffix rule with source suffix `.c' and\ntarget suffix `.o'.  Here is the old-fashioned way to define the rule\nfor compiling a C source file:\n\n     .c.o:\n             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<\n\n   Suffix rules cannot have any prerequisites of their own.  If they\nhave any, they are treated as normal files with funny names, not as\nsuffix rules.  Thus, the rule:\n\n     .c.o: foo.h\n             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<\n\ntells how to make the file `.c.o' from the prerequisite file `foo.h',\nand is not at all like the pattern rule:\n\n     %.o: %.c foo.h\n             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<\n\nwhich tells how to make `.o' files from `.c' files, and makes all `.o'\nfiles using this pattern rule also depend on `foo.h'.\n\n   Suffix rules with no commands are also meaningless.  They do not\nremove previous rules as do pattern rules with no commands (*note\nCanceling Implicit Rules: Canceling Rules.).  They simply enter the\nsuffix or pair of suffixes concatenated as a target in the data base.\n\n   The known suffixes are simply the names of the prerequisites of the\nspecial target `.SUFFIXES'.  You can add your own suffixes by writing a\nrule for `.SUFFIXES' that adds more prerequisites, as in:\n\n     .SUFFIXES: .hack .win\n\nwhich adds `.hack' and `.win' to the end of the list of suffixes.\n\n   If you wish to eliminate the default known suffixes instead of just\nadding to them, write a rule for `.SUFFIXES' with no prerequisites.  By\nspecial dispensation, this eliminates all existing prerequisites of\n`.SUFFIXES'.  You can then write another rule to add the suffixes you\nwant.  For example,\n\n     .SUFFIXES:            # Delete the default suffixes\n     .SUFFIXES: .c .o .h   # Define our suffix list\n\n   The `-r' or `--no-builtin-rules' flag causes the default list of\nsuffixes to be empty.\n\n   The variable `SUFFIXES' is defined to the default list of suffixes\nbefore `make' reads any makefiles.  You can change the list of suffixes\nwith a rule for the special target `.SUFFIXES', but that does not alter\nthis variable.\n\n\u001f\nFile: make.info,  Node: Implicit Rule Search,  Prev: Suffix Rules,  Up: Implicit Rules\n\n10.8 Implicit Rule Search Algorithm\n===================================\n\nHere is the procedure `make' uses for searching for an implicit rule\nfor a target T.  This procedure is followed for each double-colon rule\nwith no commands, for each target of ordinary rules none of which have\ncommands, and for each prerequisite that is not the target of any rule.\nIt is also followed recursively for prerequisites that come from\nimplicit rules, in the search for a chain of rules.\n\n   Suffix rules are not mentioned in this algorithm because suffix\nrules are converted to equivalent pattern rules once the makefiles have\nbeen read in.\n\n   For an archive member target of the form `ARCHIVE(MEMBER)', the\nfollowing algorithm is run twice, first using the entire target name T,\nand second using `(MEMBER)' as the target T if the first run found no\nrule.\n\n  1. Split T into a directory part, called D, and the rest, called N.\n     For example, if T is `src/foo.o', then D is `src/' and N is\n     `foo.o'.\n\n  2. Make a list of all the pattern rules one of whose targets matches\n     T or N.  If the target pattern contains a slash, it is matched\n     against T; otherwise, against N.\n\n  3. If any rule in that list is _not_ a match-anything rule, then\n     remove all nonterminal match-anything rules from the list.\n\n  4. Remove from the list all rules with no commands.\n\n  5. For each pattern rule in the list:\n\n       a. Find the stem S, which is the nonempty part of T or N matched\n          by the `%' in the target pattern.\n\n       b. Compute the prerequisite names by substituting S for `%'; if\n          the target pattern does not contain a slash, append D to the\n          front of each prerequisite name.\n\n       c. Test whether all the prerequisites exist or ought to exist.\n          (If a file name is mentioned in the makefile as a target or\n          as an explicit prerequisite, then we say it ought to exist.)\n\n          If all prerequisites exist or ought to exist, or there are no\n          prerequisites, then this rule applies.\n\n  6. If no pattern rule has been found so far, try harder.  For each\n     pattern rule in the list:\n\n       a. If the rule is terminal, ignore it and go on to the next rule.\n\n       b. Compute the prerequisite names as before.\n\n       c. Test whether all the prerequisites exist or ought to exist.\n\n       d. For each prerequisite that does not exist, follow this\n          algorithm recursively to see if the prerequisite can be made\n          by an implicit rule.\n\n       e. If all prerequisites exist, ought to exist, or can be made by\n          implicit rules, then this rule applies.\n\n  7. If no implicit rule applies, the rule for `.DEFAULT', if any,\n     applies.  In that case, give T the same commands that `.DEFAULT'\n     has.  Otherwise, there are no commands for T.\n\n   Once a rule that applies has been found, for each target pattern of\nthe rule other than the one that matched T or N, the `%' in the pattern\nis replaced with S and the resultant file name is stored until the\ncommands to remake the target file T are executed.  After these\ncommands are executed, each of these stored file names are entered into\nthe data base and marked as having been updated and having the same\nupdate status as the file T.\n\n   When the commands of a pattern rule are executed for T, the automatic\nvariables are set corresponding to the target and prerequisites.  *Note\nAutomatic Variables::.\n\n\u001f\nFile: make.info,  Node: Archives,  Next: Features,  Prev: Implicit Rules,  Up: Top\n\n11 Using `make' to Update Archive Files\n***************************************\n\n\"Archive files\" are files containing named subfiles called \"members\";\nthey are maintained with the program `ar' and their main use is as\nsubroutine libraries for linking.\n\n* Menu:\n\n* Archive Members::             Archive members as targets.\n* Archive Update::              The implicit rule for archive member targets.\n* Archive Pitfalls::            Dangers to watch out for when using archives.\n* Archive Suffix Rules::        You can write a special kind of suffix rule\n                                  for updating archives.\n\n\u001f\nFile: make.info,  Node: Archive Members,  Next: Archive Update,  Prev: Archives,  Up: Archives\n\n11.1 Archive Members as Targets\n===============================\n\nAn individual member of an archive file can be used as a target or\nprerequisite in `make'.  You specify the member named MEMBER in archive\nfile ARCHIVE as follows:\n\n     ARCHIVE(MEMBER)\n\nThis construct is available only in targets and prerequisites, not in\ncommands!  Most programs that you might use in commands do not support\nthis syntax and cannot act directly on archive members.  Only `ar' and\nother programs specifically designed to operate on archives can do so.\nTherefore, valid commands to update an archive member target probably\nmust use `ar'.  For example, this rule says to create a member `hack.o'\nin archive `foolib' by copying the file `hack.o':\n\n     foolib(hack.o) : hack.o\n             ar cr foolib hack.o\n\n   In fact, nearly all archive member targets are updated in just this\nway and there is an implicit rule to do it for you.  *Please note:* The\n`c' flag to `ar' is required if the archive file does not already exist.\n\n   To specify several members in the same archive, you can write all the\nmember names together between the parentheses.  For example:\n\n     foolib(hack.o kludge.o)\n\nis equivalent to:\n\n     foolib(hack.o) foolib(kludge.o)\n\n   You can also use shell-style wildcards in an archive member\nreference.  *Note Using Wildcard Characters in File Names: Wildcards.\nFor example, `foolib(*.o)' expands to all existing members of the\n`foolib' archive whose names end in `.o'; perhaps `foolib(hack.o)\nfoolib(kludge.o)'.\n\n\u001f\nFile: make.info,  Node: Archive Update,  Next: Archive Pitfalls,  Prev: Archive Members,  Up: Archives\n\n11.2 Implicit Rule for Archive Member Targets\n=============================================\n\nRecall that a target that looks like `A(M)' stands for the member named\nM in the archive file A.\n\n   When `make' looks for an implicit rule for such a target, as a\nspecial feature it considers implicit rules that match `(M)', as well as\nthose that match the actual target `A(M)'.\n\n   This causes one special rule whose target is `(%)' to match.  This\nrule updates the target `A(M)' by copying the file M into the archive.\nFor example, it will update the archive member target `foo.a(bar.o)' by\ncopying the _file_ `bar.o' into the archive `foo.a' as a _member_ named\n`bar.o'.\n\n   When this rule is chained with others, the result is very powerful.\nThus, `make \"foo.a(bar.o)\"' (the quotes are needed to protect the `('\nand `)' from being interpreted specially by the shell) in the presence\nof a file `bar.c' is enough to cause the following commands to be run,\neven without a makefile:\n\n     cc -c bar.c -o bar.o\n     ar r foo.a bar.o\n     rm -f bar.o\n\nHere `make' has envisioned the file `bar.o' as an intermediate file.\n*Note Chains of Implicit Rules: Chained Rules.\n\n   Implicit rules such as this one are written using the automatic\nvariable `$%'.  *Note Automatic Variables::.\n\n   An archive member name in an archive cannot contain a directory\nname, but it may be useful in a makefile to pretend that it does.  If\nyou write an archive member target `foo.a(dir/file.o)', `make' will\nperform automatic updating with this command:\n\n     ar r foo.a dir/file.o\n\nwhich has the effect of copying the file `dir/file.o' into a member\nnamed `file.o'.  In connection with such usage, the automatic variables\n`%D' and `%F' may be useful.\n\n* Menu:\n\n* Archive Symbols::             How to update archive symbol directories.\n\n\u001f\nFile: make.info,  Node: Archive Symbols,  Prev: Archive Update,  Up: Archive Update\n\n11.2.1 Updating Archive Symbol Directories\n------------------------------------------\n\nAn archive file that is used as a library usually contains a special\nmember named `__.SYMDEF' that contains a directory of the external\nsymbol names defined by all the other members.  After you update any\nother members, you need to update `__.SYMDEF' so that it will summarize\nthe other members properly.  This is done by running the `ranlib'\nprogram:\n\n     ranlib ARCHIVEFILE\n\n   Normally you would put this command in the rule for the archive file,\nand make all the members of the archive file prerequisites of that rule.\nFor example,\n\n     libfoo.a: libfoo.a(x.o) libfoo.a(y.o) ...\n             ranlib libfoo.a\n\nThe effect of this is to update archive members `x.o', `y.o', etc., and\nthen update the symbol directory member `__.SYMDEF' by running\n`ranlib'.  The rules for updating the members are not shown here; most\nlikely you can omit them and use the implicit rule which copies files\ninto the archive, as described in the preceding section.\n\n   This is not necessary when using the GNU `ar' program, which updates\nthe `__.SYMDEF' member automatically.\n\n\u001f\nFile: make.info,  Node: Archive Pitfalls,  Next: Archive Suffix Rules,  Prev: Archive Update,  Up: Archives\n\n11.3 Dangers When Using Archives\n================================\n\nIt is important to be careful when using parallel execution (the `-j'\nswitch; *note Parallel Execution: Parallel.) and archives.  If multiple\n`ar' commands run at the same time on the same archive file, they will\nnot know about each other and can corrupt the file.\n\n   Possibly a future version of `make' will provide a mechanism to\ncircumvent this problem by serializing all commands that operate on the\nsame archive file.  But for the time being, you must either write your\nmakefiles to avoid this problem in some other way, or not use `-j'.\n\n\u001f\nFile: make.info,  Node: Archive Suffix Rules,  Prev: Archive Pitfalls,  Up: Archives\n\n11.4 Suffix Rules for Archive Files\n===================================\n\nYou can write a special kind of suffix rule for dealing with archive\nfiles.  *Note Suffix Rules::, for a full explanation of suffix rules.\nArchive suffix rules are obsolete in GNU `make', because pattern rules\nfor archives are a more general mechanism (*note Archive Update::).\nBut they are retained for compatibility with other `make's.\n\n   To write a suffix rule for archives, you simply write a suffix rule\nusing the target suffix `.a' (the usual suffix for archive files).  For\nexample, here is the old-fashioned suffix rule to update a library\narchive from C source files:\n\n     .c.a:\n             $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o\n             $(AR) r $@ $*.o\n             $(RM) $*.o\n\nThis works just as if you had written the pattern rule:\n\n     (%.o): %.c\n             $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o\n             $(AR) r $@ $*.o\n             $(RM) $*.o\n\n   In fact, this is just what `make' does when it sees a suffix rule\nwith `.a' as the target suffix.  Any double-suffix rule `.X.a' is\nconverted to a pattern rule with the target pattern `(%.o)' and a\nprerequisite pattern of `%.X'.\n\n   Since you might want to use `.a' as the suffix for some other kind\nof file, `make' also converts archive suffix rules to pattern rules in\nthe normal way (*note Suffix Rules::).  Thus a double-suffix rule\n`.X.a' produces two pattern rules: `(%.o): %.X' and `%.a: %.X'.\n\n\u001f\nFile: make.info,  Node: Features,  Next: Missing,  Prev: Archives,  Up: Top\n\n12 Features of GNU `make'\n*************************\n\nHere is a summary of the features of GNU `make', for comparison with\nand credit to other versions of `make'.  We consider the features of\n`make' in 4.2 BSD systems as a baseline.  If you are concerned with\nwriting portable makefiles, you should not use the features of `make'\nlisted here, nor the ones in *note Missing::.\n\n   Many features come from the version of `make' in System V.\n\n   * The `VPATH' variable and its special meaning.  *Note Searching\n     Directories for Prerequisites: Directory Search.  This feature\n     exists in System V `make', but is undocumented.  It is documented\n     in 4.3 BSD `make' (which says it mimics System V's `VPATH'\n     feature).\n\n   * Included makefiles.  *Note Including Other Makefiles: Include.\n     Allowing multiple files to be included with a single directive is\n     a GNU extension.\n\n   * Variables are read from and communicated via the environment.\n     *Note Variables from the Environment: Environment.\n\n   * Options passed through the variable `MAKEFLAGS' to recursive\n     invocations of `make'.  *Note Communicating Options to a\n     Sub-`make': Options/Recursion.\n\n   * The automatic variable `$%' is set to the member name in an\n     archive reference.  *Note Automatic Variables::.\n\n   * The automatic variables `$@', `$*', `$<', `$%', and `$?' have\n     corresponding forms like `$(@F)' and `$(@D)'.  We have generalized\n     this to `$^' as an obvious extension.  *Note Automatic Variables::.\n\n   * Substitution variable references.  *Note Basics of Variable\n     References: Reference.\n\n   * The command-line options `-b' and `-m', accepted and ignored.  In\n     System V `make', these options actually do something.\n\n   * Execution of recursive commands to run `make' via the variable\n     `MAKE' even if `-n', `-q' or `-t' is specified.  *Note Recursive\n     Use of `make': Recursion.\n\n   * Support for suffix `.a' in suffix rules.  *Note Archive Suffix\n     Rules::.  This feature is obsolete in GNU `make', because the\n     general feature of rule chaining (*note Chains of Implicit Rules:\n     Chained Rules.) allows one pattern rule for installing members in\n     an archive (*note Archive Update::) to be sufficient.\n\n   * The arrangement of lines and backslash-newline combinations in\n     commands is retained when the commands are printed, so they appear\n     as they do in the makefile, except for the stripping of initial\n     whitespace.\n\n   The following features were inspired by various other versions of\n`make'.  In some cases it is unclear exactly which versions inspired\nwhich others.\n\n   * Pattern rules using `%'.  This has been implemented in several\n     versions of `make'.  We're not sure who invented it first, but\n     it's been spread around a bit.  *Note Defining and Redefining\n     Pattern Rules: Pattern Rules.\n\n   * Rule chaining and implicit intermediate files.  This was\n     implemented by Stu Feldman in his version of `make' for AT&T\n     Eighth Edition Research Unix, and later by Andrew Hume of AT&T\n     Bell Labs in his `mk' program (where he terms it \"transitive\n     closure\").  We do not really know if we got this from either of\n     them or thought it up ourselves at the same time.  *Note Chains of\n     Implicit Rules: Chained Rules.\n\n   * The automatic variable `$^' containing a list of all prerequisites\n     of the current target.  We did not invent this, but we have no\n     idea who did.  *Note Automatic Variables::.  The automatic variable\n     `$+' is a simple extension of `$^'.\n\n   * The \"what if\" flag (`-W' in GNU `make') was (as far as we know)\n     invented by Andrew Hume in `mk'.  *Note Instead of Executing the\n     Commands: Instead of Execution.\n\n   * The concept of doing several things at once (parallelism) exists in\n     many incarnations of `make' and similar programs, though not in the\n     System V or BSD implementations.  *Note Command Execution:\n     Execution.\n\n   * Modified variable references using pattern substitution come from\n     SunOS 4.  *Note Basics of Variable References: Reference.  This\n     functionality was provided in GNU `make' by the `patsubst'\n     function before the alternate syntax was implemented for\n     compatibility with SunOS 4.  It is not altogether clear who\n     inspired whom, since GNU `make' had `patsubst' before SunOS 4 was\n     released.\n\n   * The special significance of `+' characters preceding command lines\n     (*note Instead of Executing the Commands: Instead of Execution.) is\n     mandated by `IEEE Standard 1003.2-1992' (POSIX.2).\n\n   * The `+=' syntax to append to the value of a variable comes from\n     SunOS 4 `make'.  *Note Appending More Text to Variables: Appending.\n\n   * The syntax `ARCHIVE(MEM1 MEM2...)' to list multiple members in a\n     single archive file comes from SunOS 4 `make'.  *Note Archive\n     Members::.\n\n   * The `-include' directive to include makefiles with no error for a\n     nonexistent file comes from SunOS 4 `make'.  (But note that SunOS 4\n     `make' does not allow multiple makefiles to be specified in one\n     `-include' directive.)  The same feature appears with the name\n     `sinclude' in SGI `make' and perhaps others.\n\n   The remaining features are inventions new in GNU `make':\n\n   * Use the `-v' or `--version' option to print version and copyright\n     information.\n\n   * Use the `-h' or `--help' option to summarize the options to `make'.\n\n   * Simply-expanded variables.  *Note The Two Flavors of Variables:\n     Flavors.\n\n   * Pass command-line variable assignments automatically through the\n     variable `MAKE' to recursive `make' invocations.  *Note Recursive\n     Use of `make': Recursion.\n\n   * Use the `-C' or `--directory' command option to change directory.\n     *Note Summary of Options: Options Summary.\n\n   * Make verbatim variable definitions with `define'.  *Note Defining\n     Variables Verbatim: Defining.\n\n   * Declare phony targets with the special target `.PHONY'.\n\n     Andrew Hume of AT&T Bell Labs implemented a similar feature with a\n     different syntax in his `mk' program.  This seems to be a case of\n     parallel discovery.  *Note Phony Targets: Phony Targets.\n\n   * Manipulate text by calling functions.  *Note Functions for\n     Transforming Text: Functions.\n\n   * Use the `-o' or `--old-file' option to pretend a file's\n     modification-time is old.  *Note Avoiding Recompilation of Some\n     Files: Avoiding Compilation.\n\n   * Conditional execution.\n\n     This feature has been implemented numerous times in various\n     versions of `make'; it seems a natural extension derived from the\n     features of the C preprocessor and similar macro languages and is\n     not a revolutionary concept.  *Note Conditional Parts of\n     Makefiles: Conditionals.\n\n   * Specify a search path for included makefiles.  *Note Including\n     Other Makefiles: Include.\n\n   * Specify extra makefiles to read with an environment variable.\n     *Note The Variable `MAKEFILES': MAKEFILES Variable.\n\n   * Strip leading sequences of `./' from file names, so that `./FILE'\n     and `FILE' are considered to be the same file.\n\n   * Use a special search method for library prerequisites written in\n     the form `-lNAME'.  *Note Directory Search for Link Libraries:\n     Libraries/Search.\n\n   * Allow suffixes for suffix rules (*note Old-Fashioned Suffix Rules:\n     Suffix Rules.) to contain any characters.  In other versions of\n     `make', they must begin with `.' and not contain any `/'\n     characters.\n\n   * Keep track of the current level of `make' recursion using the\n     variable `MAKELEVEL'.  *Note Recursive Use of `make': Recursion.\n\n   * Provide any goals given on the command line in the variable\n     `MAKECMDGOALS'.  *Note Arguments to Specify the Goals: Goals.\n\n   * Specify static pattern rules.  *Note Static Pattern Rules: Static\n     Pattern.\n\n   * Provide selective `vpath' search.  *Note Searching Directories for\n     Prerequisites: Directory Search.\n\n   * Provide computed variable references.  *Note Basics of Variable\n     References: Reference.\n\n   * Update makefiles.  *Note How Makefiles Are Remade: Remaking\n     Makefiles.  System V `make' has a very, very limited form of this\n     functionality in that it will check out SCCS files for makefiles.\n\n   * Various new built-in implicit rules.  *Note Catalogue of Implicit\n     Rules: Catalogue of Rules.\n\n   * The built-in variable `MAKE_VERSION' gives the version number of\n     `make'.  \n\n\u001f\nFile: make.info,  Node: Missing,  Next: Makefile Conventions,  Prev: Features,  Up: Top\n\n13 Incompatibilities and Missing Features\n*****************************************\n\nThe `make' programs in various other systems support a few features\nthat are not implemented in GNU `make'.  The POSIX.2 standard (`IEEE\nStandard 1003.2-1992') which specifies `make' does not require any of\nthese features.\n\n   * A target of the form `FILE((ENTRY))' stands for a member of\n     archive file FILE.  The member is chosen, not by name, but by\n     being an object file which defines the linker symbol ENTRY.\n\n     This feature was not put into GNU `make' because of the\n     nonmodularity of putting knowledge into `make' of the internal\n     format of archive file symbol tables.  *Note Updating Archive\n     Symbol Directories: Archive Symbols.\n\n   * Suffixes (used in suffix rules) that end with the character `~'\n     have a special meaning to System V `make'; they refer to the SCCS\n     file that corresponds to the file one would get without the `~'.\n     For example, the suffix rule `.c~.o' would make the file `N.o' from\n     the SCCS file `s.N.c'.  For complete coverage, a whole series of\n     such suffix rules is required.  *Note Old-Fashioned Suffix Rules:\n     Suffix Rules.\n\n     In GNU `make', this entire series of cases is handled by two\n     pattern rules for extraction from SCCS, in combination with the\n     general feature of rule chaining.  *Note Chains of Implicit Rules:\n     Chained Rules.\n\n   * In System V and 4.3 BSD `make', files found by `VPATH' search\n     (*note Searching Directories for Prerequisites: Directory Search.)\n     have their names changed inside command strings.  We feel it is\n     much cleaner to always use automatic variables and thus make this\n     feature obsolete.\n\n   * In some Unix `make's, the automatic variable `$*' appearing in the\n     prerequisites of a rule has the amazingly strange \"feature\" of\n     expanding to the full name of the _target of that rule_.  We cannot\n     imagine what went on in the minds of Unix `make' developers to do\n     this; it is utterly inconsistent with the normal definition of\n     `$*'.  \n\n   * In some Unix `make's, implicit rule search (*note Using Implicit\n     Rules: Implicit Rules.) is apparently done for _all_ targets, not\n     just those without commands.  This means you can do:\n\n          foo.o:\n                  cc -c foo.c\n\n     and Unix `make' will intuit that `foo.o' depends on `foo.c'.\n\n     We feel that such usage is broken.  The prerequisite properties of\n     `make' are well-defined (for GNU `make', at least), and doing such\n     a thing simply does not fit the model.\n\n   * GNU `make' does not include any built-in implicit rules for\n     compiling or preprocessing EFL programs.  If we hear of anyone who\n     is using EFL, we will gladly add them.\n\n   * It appears that in SVR4 `make', a suffix rule can be specified with\n     no commands, and it is treated as if it had empty commands (*note\n     Empty Commands::).  For example:\n\n          .c.a:\n\n     will override the built-in `.c.a' suffix rule.\n\n     We feel that it is cleaner for a rule without commands to always\n     simply add to the prerequisite list for the target.  The above\n     example can be easily rewritten to get the desired behavior in GNU\n     `make':\n\n          .c.a: ;\n\n   * Some versions of `make' invoke the shell with the `-e' flag,\n     except under `-k' (*note Testing the Compilation of a Program:\n     Testing.).  The `-e' flag tells the shell to exit as soon as any\n     program it runs returns a nonzero status.  We feel it is cleaner to\n     write each shell command line to stand on its own and not require\n     this special treatment.\n\n\u001f\nFile: make.info,  Node: Makefile Conventions,  Next: Quick Reference,  Prev: Missing,  Up: Top\n\n14 Makefile Conventions\n***********************\n\nThis node describes conventions for writing the Makefiles for GNU\nprograms.  Using Automake will help you write a Makefile that follows\nthese conventions.\n\n* Menu:\n\n* Makefile Basics::             General Conventions for Makefiles\n* Utilities in Makefiles::      Utilities in Makefiles\n* Command Variables::           Variables for Specifying Commands\n* Directory Variables::         Variables for Installation Directories\n* Standard Targets::            Standard Targets for Users\n* Install Command Categories::  Three categories of commands in the `install'\n                                  rule: normal, pre-install and post-install.\n\n\u001f\nFile: make.info,  Node: Makefile Basics,  Next: Utilities in Makefiles,  Up: Makefile Conventions\n\n14.1 General Conventions for Makefiles\n======================================\n\nEvery Makefile should contain this line:\n\n     SHELL = /bin/sh\n\nto avoid trouble on systems where the `SHELL' variable might be\ninherited from the environment.  (This is never a problem with GNU\n`make'.)\n\n   Different `make' programs have incompatible suffix lists and\nimplicit rules, and this sometimes creates confusion or misbehavior.  So\nit is a good idea to set the suffix list explicitly using only the\nsuffixes you need in the particular Makefile, like this:\n\n     .SUFFIXES:\n     .SUFFIXES: .c .o\n\nThe first line clears out the suffix list, the second introduces all\nsuffixes which may be subject to implicit rules in this Makefile.\n\n   Don't assume that `.' is in the path for command execution.  When\nyou need to run programs that are a part of your package during the\nmake, please make sure that it uses `./' if the program is built as\npart of the make or `$(srcdir)/' if the file is an unchanging part of\nthe source code.  Without one of these prefixes, the current search\npath is used.\n\n   The distinction between `./' (the \"build directory\") and\n`$(srcdir)/' (the \"source directory\") is important because users can\nbuild in a separate directory using the `--srcdir' option to\n`configure'.  A rule of the form:\n\n     foo.1 : foo.man sedscript\n             sed -e sedscript foo.man > foo.1\n\nwill fail when the build directory is not the source directory, because\n`foo.man' and `sedscript' are in the source directory.\n\n   When using GNU `make', relying on `VPATH' to find the source file\nwill work in the case where there is a single dependency file, since\nthe `make' automatic variable `$<' will represent the source file\nwherever it is.  (Many versions of `make' set `$<' only in implicit\nrules.)  A Makefile target like\n\n     foo.o : bar.c\n             $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o\n\nshould instead be written as\n\n     foo.o : bar.c\n             $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@\n\nin order to allow `VPATH' to work correctly.  When the target has\nmultiple dependencies, using an explicit `$(srcdir)' is the easiest way\nto make the rule work well.  For example, the target above for `foo.1'\nis best written as:\n\n     foo.1 : foo.man sedscript\n             sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@\n\n   GNU distributions usually contain some files which are not source\nfiles--for example, Info files, and the output from Autoconf, Automake,\nBison or Flex.  Since these files normally appear in the source\ndirectory, they should always appear in the source directory, not in the\nbuild directory.  So Makefile rules to update them should put the\nupdated files in the source directory.\n\n   However, if a file does not appear in the distribution, then the\nMakefile should not put it in the source directory, because building a\nprogram in ordinary circumstances should not modify the source directory\nin any way.\n\n   Try to make the build and installation targets, at least (and all\ntheir subtargets) work correctly with a parallel `make'.\n\n\u001f\nFile: make.info,  Node: Utilities in Makefiles,  Next: Command Variables,  Prev: Makefile Basics,  Up: Makefile Conventions\n\n14.2 Utilities in Makefiles\n===========================\n\nWrite the Makefile commands (and any shell scripts, such as\n`configure') to run in `sh', not in `csh'.  Don't use any special\nfeatures of `ksh' or `bash'.\n\n   The `configure' script and the Makefile rules for building and\ninstallation should not use any utilities directly except these:\n\n     cat cmp cp diff echo egrep expr false grep install-info\n     ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true\n\n   The compression program `gzip' can be used in the `dist' rule.\n\n   Stick to the generally supported options for these programs.  For\nexample, don't use `mkdir -p', convenient as it may be, because most\nsystems don't support it.\n\n   It is a good idea to avoid creating symbolic links in makefiles,\nsince a few systems don't support them.\n\n   The Makefile rules for building and installation can also use\ncompilers and related programs, but should do so via `make' variables\nso that the user can substitute alternatives.  Here are some of the\nprograms we mean:\n\n     ar bison cc flex install ld ldconfig lex\n     make makeinfo ranlib texi2dvi yacc\n\n   Use the following `make' variables to run those programs:\n\n     $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)\n     $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)\n\n   When you use `ranlib' or `ldconfig', you should make sure nothing\nbad happens if the system does not have the program in question.\nArrange to ignore an error from that command, and print a message before\nthe command to tell the user that failure of this command does not mean\na problem.  (The Autoconf `AC_PROG_RANLIB' macro can help with this.)\n\n   If you use symbolic links, you should implement a fallback for\nsystems that don't have symbolic links.\n\n   Additional utilities that can be used via Make variables are:\n\n     chgrp chmod chown mknod\n\n   It is ok to use other utilities in Makefile portions (or scripts)\nintended only for particular systems where you know those utilities\nexist.\n\n\u001f\nFile: make.info,  Node: Command Variables,  Next: Directory Variables,  Prev: Utilities in Makefiles,  Up: Makefile Conventions\n\n14.3 Variables for Specifying Commands\n======================================\n\nMakefiles should provide variables for overriding certain commands,\noptions, and so on.\n\n   In particular, you should run most utility programs via variables.\nThus, if you use Bison, have a variable named `BISON' whose default\nvalue is set with `BISON = bison', and refer to it with `$(BISON)'\nwhenever you need to use Bison.\n\n   File management utilities such as `ln', `rm', `mv', and so on, need\nnot be referred to through variables in this way, since users don't\nneed to replace them with other programs.\n\n   Each program-name variable should come with an options variable that\nis used to supply options to the program.  Append `FLAGS' to the\nprogram-name variable name to get the options variable name--for\nexample, `BISONFLAGS'.  (The names `CFLAGS' for the C compiler,\n`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,\nbut we keep them because they are standard.)  Use `CPPFLAGS' in any\ncompilation command that runs the preprocessor, and use `LDFLAGS' in\nany compilation command that does linking as well as in any direct use\nof `ld'.\n\n   If there are C compiler options that _must_ be used for proper\ncompilation of certain files, do not include them in `CFLAGS'.  Users\nexpect to be able to specify `CFLAGS' freely themselves.  Instead,\narrange to pass the necessary options to the C compiler independently\nof `CFLAGS', by writing them explicitly in the compilation commands or\nby defining an implicit rule, like this:\n\n     CFLAGS = -g\n     ALL_CFLAGS = -I. $(CFLAGS)\n     .c.o:\n             $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<\n\n   Do include the `-g' option in `CFLAGS', because that is not\n_required_ for proper compilation.  You can consider it a default that\nis only recommended.  If the package is set up so that it is compiled\nwith GCC by default, then you might as well include `-O' in the default\nvalue of `CFLAGS' as well.\n\n   Put `CFLAGS' last in the compilation command, after other variables\ncontaining compiler options, so the user can use `CFLAGS' to override\nthe others.\n\n   `CFLAGS' should be used in every invocation of the C compiler, both\nthose which do compilation and those which do linking.\n\n   Every Makefile should define the variable `INSTALL', which is the\nbasic command for installing a file into the system.\n\n   Every Makefile should also define the variables `INSTALL_PROGRAM'\nand `INSTALL_DATA'.  (The default for `INSTALL_PROGRAM' should be\n`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m\n644'.)  Then it should use those variables as the commands for actual\ninstallation, for executables and nonexecutables respectively.  Use\nthese variables as follows:\n\n     $(INSTALL_PROGRAM) foo $(bindir)/foo\n     $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a\n\n   Optionally, you may prepend the value of `DESTDIR' to the target\nfilename.  Doing this allows the installer to create a snapshot of the\ninstallation to be copied onto the real target filesystem later.  Do not\nset the value of `DESTDIR' in your Makefile, and do not include it in\nany installed files.  With support for `DESTDIR', the above examples\nbecome:\n\n     $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo\n     $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a\n\nAlways use a file name, not a directory name, as the second argument of\nthe installation commands.  Use a separate command for each file to be\ninstalled.\n\n\u001f\nFile: make.info,  Node: Directory Variables,  Next: Standard Targets,  Prev: Command Variables,  Up: Makefile Conventions\n\n14.4 Variables for Installation Directories\n===========================================\n\nInstallation directories should always be named by variables, so it is\neasy to install in a nonstandard place.  The standard names for these\nvariables and the values they should have in GNU packages are described\nbelow.  They are based on a standard filesystem layout; variants of it\nare used in GNU/Linux and other modern operating systems.\n\n   Installers are expected to override these values when calling `make'\n(e.g., `make prefix=/usr install' or `configure' (e.g., `configure\n--prefix=/usr').  GNU packages should not try to guess which value\nshould be appropriate for these variables on the system they are being\ninstalled onto: use the default settings specified here so that all GNU\npackages behave identically, allowing the installer to achieve any\ndesired layout.\n\n   These two variables set the root for the installation.  All the other\ninstallation directories should be subdirectories of one of these two,\nand nothing should be directly installed into these two directories.\n\n`prefix'\n     A prefix used in constructing the default values of the variables\n     listed below.  The default value of `prefix' should be\n     `/usr/local'.  When building the complete GNU system, the prefix\n     will be empty and `/usr' will be a symbolic link to `/'.  (If you\n     are using Autoconf, write it as `@prefix@'.)\n\n     Running `make install' with a different value of `prefix' from the\n     one used to build the program should _not_ recompile the program.\n\n`exec_prefix'\n     A prefix used in constructing the default values of some of the\n     variables listed below.  The default value of `exec_prefix' should\n     be `$(prefix)'.  (If you are using Autoconf, write it as\n     `@exec_prefix@'.)\n\n     Generally, `$(exec_prefix)' is used for directories that contain\n     machine-specific files (such as executables and subroutine\n     libraries), while `$(prefix)' is used directly for other\n     directories.\n\n     Running `make install' with a different value of `exec_prefix'\n     from the one used to build the program should _not_ recompile the\n     program.\n\n   Executable programs are installed in one of the following\ndirectories.\n\n`bindir'\n     The directory for installing executable programs that users can\n     run.  This should normally be `/usr/local/bin', but write it as\n     `$(exec_prefix)/bin'.  (If you are using Autoconf, write it as\n     `@bindir@'.)\n\n`sbindir'\n     The directory for installing executable programs that can be run\n     from the shell, but are only generally useful to system\n     administrators.  This should normally be `/usr/local/sbin', but\n     write it as `$(exec_prefix)/sbin'.  (If you are using Autoconf,\n     write it as `@sbindir@'.)\n\n`libexecdir'\n     The directory for installing executable programs to be run by other\n     programs rather than by users.  This directory should normally be\n     `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.\n     (If you are using Autoconf, write it as `@libexecdir@'.)\n\n     The definition of `libexecdir' is the same for all packages, so\n     you should install your data in a subdirectory thereof.  Most\n     packages install their data under `$(libexecdir)/PACKAGE-NAME/',\n     possibly within additional subdirectories thereof, such as\n     `$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'.\n\n   Data files used by the program during its execution are divided into\ncategories in two ways.\n\n   * Some files are normally modified by programs; others are never\n     normally modified (though users may edit some of these).\n\n   * Some files are architecture-independent and can be shared by all\n     machines at a site; some are architecture-dependent and can be\n     shared only by machines of the same kind and operating system;\n     others may never be shared between two machines.\n\n   This makes for six different possibilities.  However, we want to\ndiscourage the use of architecture-dependent files, aside from object\nfiles and libraries.  It is much cleaner to make other data files\narchitecture-independent, and it is generally not hard.\n\n   Here are the variables Makefiles should use to specify directories\nto put these various kinds of files in:\n\n`datarootdir'\n     The root of the directory tree for read-only\n     architecture-independent data files.  This should normally be\n     `/usr/local/share', but write it as `$(prefix)/share'.  (If you\n     are using Autoconf, write it as `@datarootdir@'.)  `datadir''s\n     default value is based on this variable; so are `infodir',\n     `mandir', and others.\n\n`datadir'\n     The directory for installing idiosyncratic read-only\n     architecture-independent data files for this program.  This is\n     usually the same place as `datarootdir', but we use the two\n     separate variables so that you can move these program-specific\n     files without altering the location for Info files, man pages, etc.\n\n     This should normally be `/usr/local/share', but write it as\n     `$(datarootdir)'.  (If you are using Autoconf, write it as\n     `@datadir@'.)\n\n     The definition of `datadir' is the same for all packages, so you\n     should install your data in a subdirectory thereof.  Most packages\n     install their data under `$(datadir)/PACKAGE-NAME/'.\n\n`sysconfdir'\n     The directory for installing read-only data files that pertain to a\n     single machine-that is to say, files for configuring a host.\n     Mailer and network configuration files, `/etc/passwd', and so\n     forth belong here.  All the files in this directory should be\n     ordinary ASCII text files.  This directory should normally be\n     `/usr/local/etc', but write it as `$(prefix)/etc'.  (If you are\n     using Autoconf, write it as `@sysconfdir@'.)\n\n     Do not install executables here in this directory (they probably\n     belong in `$(libexecdir)' or `$(sbindir)').  Also do not install\n     files that are modified in the normal course of their use (programs\n     whose purpose is to change the configuration of the system\n     excluded).  Those probably belong in `$(localstatedir)'.\n\n`sharedstatedir'\n     The directory for installing architecture-independent data files\n     which the programs modify while they run.  This should normally be\n     `/usr/local/com', but write it as `$(prefix)/com'.  (If you are\n     using Autoconf, write it as `@sharedstatedir@'.)\n\n`localstatedir'\n     The directory for installing data files which the programs modify\n     while they run, and that pertain to one specific machine.  Users\n     should never need to modify files in this directory to configure\n     the package's operation; put such configuration information in\n     separate files that go in `$(datadir)' or `$(sysconfdir)'.\n     `$(localstatedir)' should normally be `/usr/local/var', but write\n     it as `$(prefix)/var'.  (If you are using Autoconf, write it as\n     `@localstatedir@'.)\n\n   These variables specify the directory for installing certain specific\ntypes of files, if your program has them.  Every GNU package should\nhave Info files, so every program needs `infodir', but not all need\n`libdir' or `lispdir'.\n\n`includedir'\n     The directory for installing header files to be included by user\n     programs with the C `#include' preprocessor directive.  This\n     should normally be `/usr/local/include', but write it as\n     `$(prefix)/include'.  (If you are using Autoconf, write it as\n     `@includedir@'.)\n\n     Most compilers other than GCC do not look for header files in\n     directory `/usr/local/include'.  So installing the header files\n     this way is only useful with GCC.  Sometimes this is not a problem\n     because some libraries are only really intended to work with GCC.\n     But some libraries are intended to work with other compilers.\n     They should install their header files in two places, one\n     specified by `includedir' and one specified by `oldincludedir'.\n\n`oldincludedir'\n     The directory for installing `#include' header files for use with\n     compilers other than GCC.  This should normally be `/usr/include'.\n     (If you are using Autoconf, you can write it as `@oldincludedir@'.)\n\n     The Makefile commands should check whether the value of\n     `oldincludedir' is empty.  If it is, they should not try to use\n     it; they should cancel the second installation of the header files.\n\n     A package should not replace an existing header in this directory\n     unless the header came from the same package.  Thus, if your Foo\n     package provides a header file `foo.h', then it should install the\n     header file in the `oldincludedir' directory if either (1) there\n     is no `foo.h' there or (2) the `foo.h' that exists came from the\n     Foo package.\n\n     To tell whether `foo.h' came from the Foo package, put a magic\n     string in the file--part of a comment--and `grep' for that string.\n\n`docdir'\n     The directory for installing documentation files (other than Info)\n     for this package.  By default, it should be\n     `/usr/local/share/doc/YOURPKG', but it should be written as\n     `$(datarootdir)/doc/YOURPKG'.  (If you are using Autoconf, write\n     it as `@docdir@'.)  The YOURPKG subdirectory, which may include a\n     version number, prevents collisions among files with common names,\n     such as `README'.\n\n`infodir'\n     The directory for installing the Info files for this package.  By\n     default, it should be `/usr/local/share/info', but it should be\n     written as `$(datarootdir)/info'.  (If you are using Autoconf,\n     write it as `@infodir@'.)  `infodir' is separate from `docdir' for\n     compatibility with existing practice.\n\n`htmldir'\n`dvidir'\n`pdfdir'\n`psdir'\n     Directories for installing documentation files in the particular\n     format.  (It is not required to support documentation in all these\n     formats.)  They should all be set to `$(docdir)' by default.  (If\n     you are using Autoconf, write them as `@htmldir@', `@dvidir@',\n     etc.)  Packages which supply several translations of their\n     documentation should install them in `$(htmldir)/'LL,\n     `$(pdfdir)/'LL, etc. where LL is a locale abbreviation such as\n     `en' or `pt_BR'.\n\n`libdir'\n     The directory for object files and libraries of object code.  Do\n     not install executables here, they probably ought to go in\n     `$(libexecdir)' instead.  The value of `libdir' should normally be\n     `/usr/local/lib', but write it as `$(exec_prefix)/lib'.  (If you\n     are using Autoconf, write it as `@libdir@'.)\n\n`lispdir'\n     The directory for installing any Emacs Lisp files in this package.\n     By default, it should be `/usr/local/share/emacs/site-lisp', but it\n     should be written as `$(datarootdir)/emacs/site-lisp'.\n\n     If you are using Autoconf, write the default as `@lispdir@'.  In\n     order to make `@lispdir@' work, you need the following lines in\n     your `configure.in' file:\n\n          lispdir='${datarootdir}/emacs/site-lisp'\n          AC_SUBST(lispdir)\n\n`localedir'\n     The directory for installing locale-specific message catalogs for\n     this package.  By default, it should be `/usr/local/share/locale',\n     but it should be written as `$(datarootdir)/locale'.  (If you are\n     using Autoconf, write it as `@localedir@'.)  This directory\n     usually has a subdirectory per locale.\n\n   Unix-style man pages are installed in one of the following:\n\n`mandir'\n     The top-level directory for installing the man pages (if any) for\n     this package.  It will normally be `/usr/local/share/man', but you\n     should write it as `$(datarootdir)/man'.  (If you are using\n     Autoconf, write it as `@mandir@'.)\n\n`man1dir'\n     The directory for installing section 1 man pages.  Write it as\n     `$(mandir)/man1'.\n\n`man2dir'\n     The directory for installing section 2 man pages.  Write it as\n     `$(mandir)/man2'\n\n`...'\n     *Don't make the primary documentation for any GNU software be a\n     man page.  Write a manual in Texinfo instead.  Man pages are just\n     for the sake of people running GNU software on Unix, which is a\n     secondary application only.*\n\n`manext'\n     The file name extension for the installed man page.  This should\n     contain a period followed by the appropriate digit; it should\n     normally be `.1'.\n\n`man1ext'\n     The file name extension for installed section 1 man pages.\n\n`man2ext'\n     The file name extension for installed section 2 man pages.\n\n`...'\n     Use these names instead of `manext' if the package needs to\n     install man pages in more than one section of the manual.\n\n   And finally, you should set the following variable:\n\n`srcdir'\n     The directory for the sources being compiled.  The value of this\n     variable is normally inserted by the `configure' shell script.\n     (If you are using Autconf, use `srcdir = @srcdir@'.)\n\n   For example:\n\n     # Common prefix for installation directories.\n     # NOTE: This directory must exist when you start the install.\n     prefix = /usr/local\n     datarootdir = $(prefix)/share\n     datadir = $(datarootdir)\n     exec_prefix = $(prefix)\n     # Where to put the executable for the command `gcc'.\n     bindir = $(exec_prefix)/bin\n     # Where to put the directories used by the compiler.\n     libexecdir = $(exec_prefix)/libexec\n     # Where to put the Info files.\n     infodir = $(datarootdir)/info\n\n   If your program installs a large number of files into one of the\nstandard user-specified directories, it might be useful to group them\ninto a subdirectory particular to that program.  If you do this, you\nshould write the `install' rule to create these subdirectories.\n\n   Do not expect the user to include the subdirectory name in the value\nof any of the variables listed above.  The idea of having a uniform set\nof variable names for installation directories is to enable the user to\nspecify the exact same values for several different GNU packages.  In\norder for this to be useful, all the packages must be designed so that\nthey will work sensibly when the user does so.\n\n\u001f\nFile: make.info,  Node: Standard Targets,  Next: Install Command Categories,  Prev: Directory Variables,  Up: Makefile Conventions\n\n14.5 Standard Targets for Users\n===============================\n\nAll GNU programs should have the following targets in their Makefiles:\n\n`all'\n     Compile the entire program.  This should be the default target.\n     This target need not rebuild any documentation files; Info files\n     should normally be included in the distribution, and DVI files\n     should be made only when explicitly asked for.\n\n     By default, the Make rules should compile and link with `-g', so\n     that executable programs have debugging symbols.  Users who don't\n     mind being helpless can strip the executables later if they wish.\n\n`install'\n     Compile the program and copy the executables, libraries, and so on\n     to the file names where they should reside for actual use.  If\n     there is a simple test to verify that a program is properly\n     installed, this target should run that test.\n\n     Do not strip executables when installing them.  Devil-may-care\n     users can use the `install-strip' target to do that.\n\n     If possible, write the `install' target rule so that it does not\n     modify anything in the directory where the program was built,\n     provided `make all' has just been done.  This is convenient for\n     building the program under one user name and installing it under\n     another.\n\n     The commands should create all the directories in which files are\n     to be installed, if they don't already exist.  This includes the\n     directories specified as the values of the variables `prefix' and\n     `exec_prefix', as well as all subdirectories that are needed.  One\n     way to do this is by means of an `installdirs' target as described\n     below.\n\n     Use `-' before any command for installing a man page, so that\n     `make' will ignore any errors.  This is in case there are systems\n     that don't have the Unix man page documentation system installed.\n\n     The way to install Info files is to copy them into `$(infodir)'\n     with `$(INSTALL_DATA)' (*note Command Variables::), and then run\n     the `install-info' program if it is present.  `install-info' is a\n     program that edits the Info `dir' file to add or update the menu\n     entry for the given Info file; it is part of the Texinfo package.\n     Here is a sample rule to install an Info file:\n\n          $(DESTDIR)$(infodir)/foo.info: foo.info\n                  $(POST_INSTALL)\n          # There may be a newer info file in . than in srcdir.\n                  -if test -f foo.info; then d=.; \\\n                   else d=$(srcdir); fi; \\\n                  $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \\\n          # Run install-info only if it exists.\n          # Use `if' instead of just prepending `-' to the\n          # line so we notice real errors from install-info.\n          # We use `$(SHELL) -c' because some shells do not\n          # fail gracefully when there is an unknown command.\n                  if $(SHELL) -c 'install-info --version' \\\n                     >/dev/null 2>&1; then \\\n                    install-info --dir-file=$(DESTDIR)$(infodir)/dir \\\n                                 $(DESTDIR)$(infodir)/foo.info; \\\n                  else true; fi\n\n     When writing the `install' target, you must classify all the\n     commands into three categories: normal ones, \"pre-installation\"\n     commands and \"post-installation\" commands.  *Note Install Command\n     Categories::.\n\n`install-html'\n`install-dvi'\n`install-pdf'\n`install-ps'\n     These targets install documentation in formats other than Info;\n     they're intended to be called explicitly by the person installing\n     the package, if that format is desired.  GNU prefers Info files,\n     so these must be installed by the `install' target.\n\n     When you have many documentation files to install, we recommend\n     that you avoid collisions and clutter by arranging for these\n     targets to install in subdirectories of the appropriate\n     installation directory, such as `htmldir'.  As one example, if\n     your package has multiple manuals, and you wish to install HTML\n     documentation with many files (such as the \"split\" mode output by\n     `makeinfo --html'), you'll certainly want to use subdirectories,\n     or two nodes with the same name in different manuals will\n     overwrite each other.\n\n`uninstall'\n     Delete all the installed files--the copies that the `install' and\n     `install-*' targets create.\n\n     This rule should not modify the directories where compilation is\n     done, only the directories where files are installed.\n\n     The uninstallation commands are divided into three categories,\n     just like the installation commands.  *Note Install Command\n     Categories::.\n\n`install-strip'\n     Like `install', but strip the executable files while installing\n     them.  In simple cases, this target can use the `install' target in\n     a simple way:\n\n          install-strip:\n                  $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \\\n                          install\n\n     But if the package installs scripts as well as real executables,\n     the `install-strip' target can't just refer to the `install'\n     target; it has to strip the executables but not the scripts.\n\n     `install-strip' should not strip the executables in the build\n     directory which are being copied for installation.  It should only\n     strip the copies that are installed.\n\n     Normally we do not recommend stripping an executable unless you\n     are sure the program has no bugs.  However, it can be reasonable\n     to install a stripped executable for actual execution while saving\n     the unstripped executable elsewhere in case there is a bug.\n\n`clean'\n     Delete all files in the current directory that are normally\n     created by building the program.  Also delete files in other\n     directories if they are created by this makefile.  However, don't\n     delete the files that record the configuration.  Also preserve\n     files that could be made by building, but normally aren't because\n     the distribution comes with them.  There is no need to delete\n     parent directories that were created with `mkdir -p', since they\n     could have existed anyway.\n\n     Delete `.dvi' files here if they are not part of the distribution.\n\n`distclean'\n     Delete all files in the current directory (or created by this\n     makefile) that are created by configuring or building the program.\n     If you have unpacked the source and built the program without\n     creating any other files, `make distclean' should leave only the\n     files that were in the distribution.  However, there is no need to\n     delete parent directories that were created with `mkdir -p', since\n     they could have existed anyway.\n\n`mostlyclean'\n     Like `clean', but may refrain from deleting a few files that people\n     normally don't want to recompile.  For example, the `mostlyclean'\n     target for GCC does not delete `libgcc.a', because recompiling it\n     is rarely necessary and takes a lot of time.\n\n`maintainer-clean'\n     Delete almost everything that can be reconstructed with this\n     Makefile.  This typically includes everything deleted by\n     `distclean', plus more: C source files produced by Bison, tags\n     tables, Info files, and so on.\n\n     The reason we say \"almost everything\" is that running the command\n     `make maintainer-clean' should not delete `configure' even if\n     `configure' can be remade using a rule in the Makefile.  More\n     generally, `make maintainer-clean' should not delete anything that\n     needs to exist in order to run `configure' and then begin to build\n     the program.  Also, there is no need to delete parent directories\n     that were created with `mkdir -p', since they could have existed\n     anyway.  These are the only exceptions; `maintainer-clean' should\n     delete everything else that can be rebuilt.\n\n     The `maintainer-clean' target is intended to be used by a\n     maintainer of the package, not by ordinary users.  You may need\n     special tools to reconstruct some of the files that `make\n     maintainer-clean' deletes.  Since these files are normally\n     included in the distribution, we don't take care to make them easy\n     to reconstruct.  If you find you need to unpack the full\n     distribution again, don't blame us.\n\n     To help make users aware of this, the commands for the special\n     `maintainer-clean' target should start with these two:\n\n          @echo 'This command is intended for maintainers to use; it'\n          @echo 'deletes files that may need special tools to rebuild.'\n\n`TAGS'\n     Update a tags table for this program.\n\n`info'\n     Generate any Info files needed.  The best way to write the rules\n     is as follows:\n\n          info: foo.info\n\n          foo.info: foo.texi chap1.texi chap2.texi\n                  $(MAKEINFO) $(srcdir)/foo.texi\n\n     You must define the variable `MAKEINFO' in the Makefile.  It should\n     run the `makeinfo' program, which is part of the Texinfo\n     distribution.\n\n     Normally a GNU distribution comes with Info files, and that means\n     the Info files are present in the source directory.  Therefore,\n     the Make rule for an info file should update it in the source\n     directory.  When users build the package, ordinarily Make will not\n     update the Info files because they will already be up to date.\n\n`dvi'\n`html'\n`pdf'\n`ps'\n     Generate documentation files in the given format, if possible.\n     Here's an example rule for generating DVI files from Texinfo:\n\n          dvi: foo.dvi\n\n          foo.dvi: foo.texi chap1.texi chap2.texi\n                  $(TEXI2DVI) $(srcdir)/foo.texi\n\n     You must define the variable `TEXI2DVI' in the Makefile.  It should\n     run the program `texi2dvi', which is part of the Texinfo\n     distribution.(1)  Alternatively, write just the dependencies, and\n     allow GNU `make' to provide the command.\n\n     Here's another example, this one for generating HTML from Texinfo:\n\n          html: foo.html\n\n          foo.html: foo.texi chap1.texi chap2.texi\n                  $(TEXI2HTML) $(srcdir)/foo.texi\n\n     Again, you would define the variable `TEXI2HTML' in the Makefile;\n     for example, it might run `makeinfo --no-split --html' (`makeinfo'\n     is part of the Texinfo distribution).\n\n`dist'\n     Create a distribution tar file for this program.  The tar file\n     should be set up so that the file names in the tar file start with\n     a subdirectory name which is the name of the package it is a\n     distribution for.  This name can include the version number.\n\n     For example, the distribution tar file of GCC version 1.40 unpacks\n     into a subdirectory named `gcc-1.40'.\n\n     The easiest way to do this is to create a subdirectory\n     appropriately named, use `ln' or `cp' to install the proper files\n     in it, and then `tar' that subdirectory.\n\n     Compress the tar file with `gzip'.  For example, the actual\n     distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.\n\n     The `dist' target should explicitly depend on all non-source files\n     that are in the distribution, to make sure they are up to date in\n     the distribution.  *Note Making Releases: (standards)Releases.\n\n`check'\n     Perform self-tests (if any).  The user must build the program\n     before running the tests, but need not install the program; you\n     should write the self-tests so that they work when the program is\n     built but not installed.\n\n   The following targets are suggested as conventional names, for\nprograms in which they are useful.\n\n`installcheck'\n     Perform installation tests (if any).  The user must build and\n     install the program before running the tests.  You should not\n     assume that `$(bindir)' is in the search path.\n\n`installdirs'\n     It's useful to add a target named `installdirs' to create the\n     directories where files are installed, and their parent\n     directories.  There is a script called `mkinstalldirs' which is\n     convenient for this; you can find it in the Texinfo package.  You\n     can use a rule like this:\n\n          # Make sure all installation directories (e.g. $(bindir))\n          # actually exist by making them if necessary.\n          installdirs: mkinstalldirs\n                  $(srcdir)/mkinstalldirs $(bindir) $(datadir) \\\n                                          $(libdir) $(infodir) \\\n                                          $(mandir)\n\n     or, if you wish to support `DESTDIR',\n\n          # Make sure all installation directories (e.g. $(bindir))\n          # actually exist by making them if necessary.\n          installdirs: mkinstalldirs\n                  $(srcdir)/mkinstalldirs \\\n                      $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \\\n                      $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \\\n                      $(DESTDIR)$(mandir)\n\n     This rule should not modify the directories where compilation is\n     done.  It should do nothing but create installation directories.\n\n   ---------- Footnotes ----------\n\n   (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is\nnot distributed with Texinfo.\n\n\u001f\nFile: make.info,  Node: Install Command Categories,  Prev: Standard Targets,  Up: Makefile Conventions\n\n14.6 Install Command Categories\n===============================\n\nWhen writing the `install' target, you must classify all the commands\ninto three categories: normal ones, \"pre-installation\" commands and\n\"post-installation\" commands.\n\n   Normal commands move files into their proper places, and set their\nmodes.  They may not alter any files except the ones that come entirely\nfrom the package they belong to.\n\n   Pre-installation and post-installation commands may alter other\nfiles; in particular, they can edit global configuration files or data\nbases.\n\n   Pre-installation commands are typically executed before the normal\ncommands, and post-installation commands are typically run after the\nnormal commands.\n\n   The most common use for a post-installation command is to run\n`install-info'.  This cannot be done with a normal command, since it\nalters a file (the Info directory) which does not come entirely and\nsolely from the package being installed.  It is a post-installation\ncommand because it needs to be done after the normal command which\ninstalls the package's Info files.\n\n   Most programs don't need any pre-installation commands, but we have\nthe feature just in case it is needed.\n\n   To classify the commands in the `install' rule into these three\ncategories, insert \"category lines\" among them.  A category line\nspecifies the category for the commands that follow.\n\n   A category line consists of a tab and a reference to a special Make\nvariable, plus an optional comment at the end.  There are three\nvariables you can use, one for each category; the variable name\nspecifies the category.  Category lines are no-ops in ordinary execution\nbecause these three Make variables are normally undefined (and you\n_should not_ define them in the makefile).\n\n   Here are the three possible category lines, each with a comment that\nexplains what it means:\n\n             $(PRE_INSTALL)     # Pre-install commands follow.\n             $(POST_INSTALL)    # Post-install commands follow.\n             $(NORMAL_INSTALL)  # Normal commands follow.\n\n   If you don't use a category line at the beginning of the `install'\nrule, all the commands are classified as normal until the first category\nline.  If you don't use any category lines, all the commands are\nclassified as normal.\n\n   These are the category lines for `uninstall':\n\n             $(PRE_UNINSTALL)     # Pre-uninstall commands follow.\n             $(POST_UNINSTALL)    # Post-uninstall commands follow.\n             $(NORMAL_UNINSTALL)  # Normal commands follow.\n\n   Typically, a pre-uninstall command would be used for deleting entries\nfrom the Info directory.\n\n   If the `install' or `uninstall' target has any dependencies which\nact as subroutines of installation, then you should start _each_\ndependency's commands with a category line, and start the main target's\ncommands with a category line also.  This way, you can ensure that each\ncommand is placed in the right category regardless of which of the\ndependencies actually run.\n\n   Pre-installation and post-installation commands should not run any\nprograms except for these:\n\n     [ basename bash cat chgrp chmod chown cmp cp dd diff echo\n     egrep expand expr false fgrep find getopt grep gunzip gzip\n     hostname install install-info kill ldconfig ln ls md5sum\n     mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee\n     test touch true uname xargs yes\n\n   The reason for distinguishing the commands in this way is for the\nsake of making binary packages.  Typically a binary package contains\nall the executables and other files that need to be installed, and has\nits own method of installing them--so it does not need to run the normal\ninstallation commands.  But installing the binary package does need to\nexecute the pre-installation and post-installation commands.\n\n   Programs to build binary packages work by extracting the\npre-installation and post-installation commands.  Here is one way of\nextracting the pre-installation commands (the `-s' option to `make' is\nneeded to silence messages about entering subdirectories):\n\n     make -s -n install -o all \\\n           PRE_INSTALL=pre-install \\\n           POST_INSTALL=post-install \\\n           NORMAL_INSTALL=normal-install \\\n       | gawk -f pre-install.awk\n\nwhere the file `pre-install.awk' could contain this:\n\n     $0 ~ /^(normal-install|post-install)[ \\t]*$/ {on = 0}\n     on {print $0}\n     $0 ~ /^pre-install[ \\t]*$/ {on = 1}\n\n\u001f\nFile: make.info,  Node: Quick Reference,  Next: Error Messages,  Prev: Makefile Conventions,  Up: Top\n\nAppendix A Quick Reference\n**************************\n\nThis appendix summarizes the directives, text manipulation functions,\nand special variables which GNU `make' understands.  *Note Special\nTargets::, *note Catalogue of Implicit Rules: Catalogue of Rules, and\n*note Summary of Options: Options Summary, for other summaries.\n\n   Here is a summary of the directives GNU `make' recognizes:\n\n`define VARIABLE'\n`endef'\n     Define a multi-line, recursively-expanded variable.\n     *Note Sequences::.\n\n`ifdef VARIABLE'\n`ifndef VARIABLE'\n`ifeq (A,B)'\n`ifeq \"A\" \"B\"'\n`ifeq 'A' 'B''\n`ifneq (A,B)'\n`ifneq \"A\" \"B\"'\n`ifneq 'A' 'B''\n`else'\n`endif'\n     Conditionally evaluate part of the makefile.\n     *Note Conditionals::.\n\n`include FILE'\n`-include FILE'\n`sinclude FILE'\n     Include another makefile.\n     *Note Including Other Makefiles: Include.\n\n`override VARIABLE = VALUE'\n`override VARIABLE := VALUE'\n`override VARIABLE += VALUE'\n`override VARIABLE ?= VALUE'\n`override define VARIABLE'\n`endef'\n     Define a variable, overriding any previous definition, even one\n     from the command line.\n     *Note The `override' Directive: Override Directive.\n\n`export'\n     Tell `make' to export all variables to child processes by default.\n     *Note Communicating Variables to a Sub-`make': Variables/Recursion.\n\n`export VARIABLE'\n`export VARIABLE = VALUE'\n`export VARIABLE := VALUE'\n`export VARIABLE += VALUE'\n`export VARIABLE ?= VALUE'\n`unexport VARIABLE'\n     Tell `make' whether or not to export a particular variable to child\n     processes.\n     *Note Communicating Variables to a Sub-`make': Variables/Recursion.\n\n`vpath PATTERN PATH'\n     Specify a search path for files matching a `%' pattern.\n     *Note The `vpath' Directive: Selective Search.\n\n`vpath PATTERN'\n     Remove all search paths previously specified for PATTERN.\n\n`vpath'\n     Remove all search paths previously specified in any `vpath'\n     directive.\n\n   Here is a summary of the built-in functions (*note Functions::):\n\n`$(subst FROM,TO,TEXT)'\n     Replace FROM with TO in TEXT.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(patsubst PATTERN,REPLACEMENT,TEXT)'\n     Replace words matching PATTERN with REPLACEMENT in TEXT.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(strip STRING)'\n     Remove excess whitespace characters from STRING.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(findstring FIND,TEXT)'\n     Locate FIND in TEXT.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(filter PATTERN...,TEXT)'\n     Select words in TEXT that match one of the PATTERN words.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(filter-out PATTERN...,TEXT)'\n     Select words in TEXT that _do not_ match any of the PATTERN words.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(sort LIST)'\n     Sort the words in LIST lexicographically, removing duplicates.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(word N,TEXT)'\n     Extract the Nth word (one-origin) of TEXT.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(words TEXT)'\n     Count the number of words in TEXT.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(wordlist S,E,TEXT)'\n     Returns the list of words in TEXT from S to E.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(firstword NAMES...)'\n     Extract the first word of NAMES.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(lastword NAMES...)'\n     Extract the last word of NAMES.\n     *Note Functions for String Substitution and Analysis: Text\n     Functions.\n\n`$(dir NAMES...)'\n     Extract the directory part of each file name.\n     *Note Functions for File Names: File Name Functions.\n\n`$(notdir NAMES...)'\n     Extract the non-directory part of each file name.\n     *Note Functions for File Names: File Name Functions.\n\n`$(suffix NAMES...)'\n     Extract the suffix (the last `.' and following characters) of each\n     file name.\n     *Note Functions for File Names: File Name Functions.\n\n`$(basename NAMES...)'\n     Extract the base name (name without suffix) of each file name.\n     *Note Functions for File Names: File Name Functions.\n\n`$(addsuffix SUFFIX,NAMES...)'\n     Append SUFFIX to each word in NAMES.\n     *Note Functions for File Names: File Name Functions.\n\n`$(addprefix PREFIX,NAMES...)'\n     Prepend PREFIX to each word in NAMES.\n     *Note Functions for File Names: File Name Functions.\n\n`$(join LIST1,LIST2)'\n     Join two parallel lists of words.\n     *Note Functions for File Names: File Name Functions.\n\n`$(wildcard PATTERN...)'\n     Find file names matching a shell file name pattern (_not_ a `%'\n     pattern).\n     *Note The Function `wildcard': Wildcard Function.\n\n`$(realpath NAMES...)'\n     For each file name in NAMES, expand to an absolute name that does\n     not contain any `.', `..', nor symlinks.\n     *Note Functions for File Names: File Name Functions.\n\n`$(abspath NAMES...)'\n     For each file name in NAMES, expand to an absolute name that does\n     not contain any `.' or `..' components, but preserves symlinks.\n     *Note Functions for File Names: File Name Functions.\n\n`$(error TEXT...)'\n     When this function is evaluated, `make' generates a fatal error\n     with the message TEXT.\n     *Note Functions That Control Make: Make Control Functions.\n\n`$(warning TEXT...)'\n     When this function is evaluated, `make' generates a warning with\n     the message TEXT.\n     *Note Functions That Control Make: Make Control Functions.\n\n`$(shell COMMAND)'\n     Execute a shell command and return its output.\n     *Note The `shell' Function: Shell Function.\n\n`$(origin VARIABLE)'\n     Return a string describing how the `make' variable VARIABLE was\n     defined.\n     *Note The `origin' Function: Origin Function.\n\n`$(flavor VARIABLE)'\n     Return a string describing the flavor of the `make' variable\n     VARIABLE.\n     *Note The `flavor' Function: Flavor Function.\n\n`$(foreach VAR,WORDS,TEXT)'\n     Evaluate TEXT with VAR bound to each word in WORDS, and\n     concatenate the results.\n     *Note The `foreach' Function: Foreach Function.\n\n`$(call VAR,PARAM,...)'\n     Evaluate the variable VAR replacing any references to `$(1)',\n     `$(2)' with the first, second, etc. PARAM values.\n     *Note The `call' Function: Call Function.\n\n`$(eval TEXT)'\n     Evaluate TEXT then read the results as makefile commands.  Expands\n     to the empty string.\n     *Note The `eval' Function: Eval Function.\n\n`$(value VAR)'\n     Evaluates to the contents of the variable VAR, with no expansion\n     performed on it.\n     *Note The `value' Function: Value Function.\n\n   Here is a summary of the automatic variables.  *Note Automatic\nVariables::, for full information.\n\n`$@'\n     The file name of the target.\n\n`$%'\n     The target member name, when the target is an archive member.\n\n`$<'\n     The name of the first prerequisite.\n\n`$?'\n     The names of all the prerequisites that are newer than the target,\n     with spaces between them.  For prerequisites which are archive\n     members, only the member named is used (*note Archives::).\n\n`$^'\n`$+'\n     The names of all the prerequisites, with spaces between them.  For\n     prerequisites which are archive members, only the member named is\n     used (*note Archives::).  The value of `$^' omits duplicate\n     prerequisites, while `$+' retains them and preserves their order.\n\n`$*'\n     The stem with which an implicit rule matches (*note How Patterns\n     Match: Pattern Match.).\n\n`$(@D)'\n`$(@F)'\n     The directory part and the file-within-directory part of `$@'.\n\n`$(*D)'\n`$(*F)'\n     The directory part and the file-within-directory part of `$*'.\n\n`$(%D)'\n`$(%F)'\n     The directory part and the file-within-directory part of `$%'.\n\n`$(<D)'\n`$(<F)'\n     The directory part and the file-within-directory part of `$<'.\n\n`$(^D)'\n`$(^F)'\n     The directory part and the file-within-directory part of `$^'.\n\n`$(+D)'\n`$(+F)'\n     The directory part and the file-within-directory part of `$+'.\n\n`$(?D)'\n`$(?F)'\n     The directory part and the file-within-directory part of `$?'.\n\n   These variables are used specially by GNU `make':\n\n`MAKEFILES'\n     Makefiles to be read on every invocation of `make'.\n     *Note The Variable `MAKEFILES': MAKEFILES Variable.\n\n`VPATH'\n     Directory search path for files not found in the current directory.\n     *Note `VPATH' Search Path for All Prerequisites: General Search.\n\n`SHELL'\n     The name of the system default command interpreter, usually\n     `/bin/sh'.  You can set `SHELL' in the makefile to change the\n     shell used to run commands.  *Note Command Execution: Execution.\n     The `SHELL' variable is handled specially when importing from and\n     exporting to the environment.  *Note Choosing the Shell::.\n\n`MAKESHELL'\n     On MS-DOS only, the name of the command interpreter that is to be\n     used by `make'.  This value takes precedence over the value of\n     `SHELL'.  *Note MAKESHELL variable: Execution.\n\n`MAKE'\n     The name with which `make' was invoked.  Using this variable in\n     commands has special meaning.  *Note How the `MAKE' Variable\n     Works: MAKE Variable.\n\n`MAKELEVEL'\n     The number of levels of recursion (sub-`make's).\n     *Note Variables/Recursion::.\n\n`MAKEFLAGS'\n     The flags given to `make'.  You can set this in the environment or\n     a makefile to set flags.\n     *Note Communicating Options to a Sub-`make': Options/Recursion.\n\n     It is _never_ appropriate to use `MAKEFLAGS' directly on a command\n     line: its contents may not be quoted correctly for use in the\n     shell.  Always allow recursive `make''s to obtain these values\n     through the environment from its parent.\n\n`MAKECMDGOALS'\n     The targets given to `make' on the command line.  Setting this\n     variable has no effect on the operation of `make'.\n     *Note Arguments to Specify the Goals: Goals.\n\n`CURDIR'\n     Set to the pathname of the current working directory (after all\n     `-C' options are processed, if any).  Setting this variable has no\n     effect on the operation of `make'.\n     *Note Recursive Use of `make': Recursion.\n\n`SUFFIXES'\n     The default list of suffixes before `make' reads any makefiles.\n\n`.LIBPATTERNS'\n     Defines the naming of the libraries `make' searches for, and their\n     order.\n     *Note Directory Search for Link Libraries: Libraries/Search.\n\n\u001f\nFile: make.info,  Node: Error Messages,  Next: Complex Makefile,  Prev: Quick Reference,  Up: Top\n\nAppendix B Errors Generated by Make\n***********************************\n\nHere is a list of the more common errors you might see generated by\n`make', and some information about what they mean and how to fix them.\n\n   Sometimes `make' errors are not fatal, especially in the presence of\na `-' prefix on a command script line, or the `-k' command line option.\nErrors that are fatal are prefixed with the string `***'.\n\n   Error messages are all either prefixed with the name of the program\n(usually `make'), or, if the error is found in a makefile, the name of\nthe file and linenumber containing the problem.\n\n   In the table below, these common prefixes are left off.\n\n`[FOO] Error NN'\n`[FOO] SIGNAL DESCRIPTION'\n     These errors are not really `make' errors at all.  They mean that a\n     program that `make' invoked as part of a command script returned a\n     non-0 error code (`Error NN'), which `make' interprets as failure,\n     or it exited in some other abnormal fashion (with a signal of some\n     type).  *Note Errors in Commands: Errors.\n\n     If no `***' is attached to the message, then the subprocess failed\n     but the rule in the makefile was prefixed with the `-' special\n     character, so `make' ignored the error.\n\n`missing separator.  Stop.'\n`missing separator (did you mean TAB instead of 8 spaces?).  Stop.'\n     This means that `make' could not understand much of anything about\n     the command line it just read.  GNU `make' looks for various kinds\n     of separators (`:', `=', TAB characters, etc.) to help it decide\n     what kind of commandline it's seeing.  This means it couldn't find\n     a valid one.\n\n     One of the most common reasons for this message is that you (or\n     perhaps your oh-so-helpful editor, as is the case with many\n     MS-Windows editors) have attempted to indent your command scripts\n     with spaces instead of a TAB character.  In this case, `make' will\n     use the second form of the error above.  Remember that every line\n     in the command script must begin with a TAB character.  Eight\n     spaces do not count.  *Note Rule Syntax::.\n\n`commands commence before first target.  Stop.'\n`missing rule before commands.  Stop.'\n     This means the first thing in the makefile seems to be part of a\n     command script: it begins with a TAB character and doesn't appear\n     to be a legal `make' command (such as a variable assignment).\n     Command scripts must always be associated with a target.\n\n     The second form is generated if the line has a semicolon as the\n     first non-whitespace character; `make' interprets this to mean you\n     left out the \"target: prerequisite\" section of a rule.  *Note Rule\n     Syntax::.\n\n`No rule to make target `XXX'.'\n`No rule to make target `XXX', needed by `YYY'.'\n     This means that `make' decided it needed to build a target, but\n     then couldn't find any instructions in the makefile on how to do\n     that, either explicit or implicit (including in the default rules\n     database).\n\n     If you want that file to be built, you will need to add a rule to\n     your makefile describing how that target can be built.  Other\n     possible sources of this problem are typos in the makefile (if\n     that filename is wrong) or a corrupted source tree (if that file\n     is not supposed to be built, but rather only a prerequisite).\n\n`No targets specified and no makefile found.  Stop.'\n`No targets.  Stop.'\n     The former means that you didn't provide any targets to be built\n     on the command line, and `make' couldn't find any makefiles to\n     read in.  The latter means that some makefile was found, but it\n     didn't contain any default goal and none was given on the command\n     line.  GNU `make' has nothing to do in these situations.  *Note\n     Arguments to Specify the Makefile: Makefile Arguments.\n\n`Makefile `XXX' was not found.'\n`Included makefile `XXX' was not found.'\n     A makefile specified on the command line (first form) or included\n     (second form) was not found.\n\n`warning: overriding commands for target `XXX''\n`warning: ignoring old commands for target `XXX''\n     GNU `make' allows commands to be specified only once per target\n     (except for double-colon rules).  If you give commands for a target\n     which already has been defined to have commands, this warning is\n     issued and the second set of commands will overwrite the first set.\n     *Note Multiple Rules for One Target: Multiple Rules.\n\n`Circular XXX <- YYY dependency dropped.'\n     This means that `make' detected a loop in the dependency graph:\n     after tracing the prerequisite YYY of target XXX, and its\n     prerequisites, etc., one of them depended on XXX again.\n\n`Recursive variable `XXX' references itself (eventually).  Stop.'\n     This means you've defined a normal (recursive) `make' variable XXX\n     that, when it's expanded, will refer to itself (XXX).  This is not\n     allowed; either use simply-expanded variables (`:=') or use the\n     append operator (`+=').  *Note How to Use Variables: Using\n     Variables.\n\n`Unterminated variable reference.  Stop.'\n     This means you forgot to provide the proper closing parenthesis or\n     brace in your variable or function reference.\n\n`insufficient arguments to function `XXX'.  Stop.'\n     This means you haven't provided the requisite number of arguments\n     for this function.  See the documentation of the function for a\n     description of its arguments.  *Note Functions for Transforming\n     Text: Functions.\n\n`missing target pattern.  Stop.'\n`multiple target patterns.  Stop.'\n`target pattern contains no `%'.  Stop.'\n`mixed implicit and static pattern rules.  Stop.'\n     These are generated for malformed static pattern rules.  The first\n     means there's no pattern in the target section of the rule; the\n     second means there are multiple patterns in the target section;\n     the third means the target doesn't contain a pattern character\n     (`%'); and the fourth means that all three parts of the static\n     pattern rule contain pattern characters (`%')-only the first two\n     parts should.  *Note Syntax of Static Pattern Rules: Static Usage.\n\n`warning: -jN forced in submake: disabling jobserver mode.'\n     This warning and the next are generated if `make' detects error\n     conditions related to parallel processing on systems where\n     sub-`make's can communicate (*note Communicating Options to a\n     Sub-`make': Options/Recursion.).  This warning is generated if a\n     recursive invocation of a `make' process is forced to have `-jN'\n     in its argument list (where N is greater than one).  This could\n     happen, for example, if you set the `MAKE' environment variable to\n     `make -j2'.  In this case, the sub-`make' doesn't communicate with\n     other `make' processes and will simply pretend it has two jobs of\n     its own.\n\n`warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.'\n     In order for `make' processes to communicate, the parent will pass\n     information to the child.  Since this could result in problems if\n     the child process isn't actually a `make', the parent will only do\n     this if it thinks the child is a `make'.  The parent uses the\n     normal algorithms to determine this (*note How the `MAKE' Variable\n     Works: MAKE Variable.).  If the makefile is constructed such that\n     the parent doesn't know the child is a `make' process, then the\n     child will receive only part of the information necessary.  In\n     this case, the child will generate this warning message and\n     proceed with its build in a sequential manner.\n\n\n\u001f\nFile: make.info,  Node: Complex Makefile,  Next: GNU Free Documentation License,  Prev: Error Messages,  Up: Top\n\nAppendix C Complex Makefile Example\n***********************************\n\nHere is the makefile for the GNU `tar' program.  This is a moderately\ncomplex makefile.\n\n   Because it is the first target, the default goal is `all'.  An\ninteresting feature of this makefile is that `testpad.h' is a source\nfile automatically created by the `testpad' program, itself compiled\nfrom `testpad.c'.\n\n   If you type `make' or `make all', then `make' creates the `tar'\nexecutable, the `rmt' daemon that provides remote tape access, and the\n`tar.info' Info file.\n\n   If you type `make install', then `make' not only creates `tar',\n`rmt', and `tar.info', but also installs them.\n\n   If you type `make clean', then `make' removes the `.o' files, and\nthe `tar', `rmt', `testpad', `testpad.h', and `core' files.\n\n   If you type `make distclean', then `make' not only removes the same\nfiles as does `make clean' but also the `TAGS', `Makefile', and\n`config.status' files.  (Although it is not evident, this makefile (and\n`config.status') is generated by the user with the `configure' program,\nwhich is provided in the `tar' distribution, but is not shown here.)\n\n   If you type `make realclean', then `make' removes the same files as\ndoes `make distclean' and also removes the Info files generated from\n`tar.texinfo'.\n\n   In addition, there are targets `shar' and `dist' that create\ndistribution kits.\n\n     # Generated automatically from Makefile.in by configure.\n     # Un*x Makefile for GNU tar program.\n     # Copyright (C) 1991 Free Software Foundation, Inc.\n\n     # This program is free software; you can redistribute\n     # it and/or modify it under the terms of the GNU\n     # General Public License ...\n     ...\n     ...\n\n     SHELL = /bin/sh\n\n     #### Start of system configuration section. ####\n\n     srcdir = .\n\n     # If you use gcc, you should either run the\n     # fixincludes script that comes with it or else use\n     # gcc with the -traditional option.  Otherwise ioctl\n     # calls will be compiled incorrectly on some systems.\n     CC = gcc -O\n     YACC = bison -y\n     INSTALL = /usr/local/bin/install -c\n     INSTALLDATA = /usr/local/bin/install -c -m 644\n\n     # Things you might add to DEFS:\n     # -DSTDC_HEADERS        If you have ANSI C headers and\n     #                       libraries.\n     # -DPOSIX               If you have POSIX.1 headers and\n     #                       libraries.\n     # -DBSD42               If you have sys/dir.h (unless\n     #                       you use -DPOSIX), sys/file.h,\n     #                       and st_blocks in `struct stat'.\n     # -DUSG                 If you have System V/ANSI C\n     #                       string and memory functions\n     #                       and headers, sys/sysmacros.h,\n     #                       fcntl.h, getcwd, no valloc,\n     #                       and ndir.h (unless\n     #                       you use -DDIRENT).\n     # -DNO_MEMORY_H         If USG or STDC_HEADERS but do not\n     #                       include memory.h.\n     # -DDIRENT              If USG and you have dirent.h\n     #                       instead of ndir.h.\n     # -DSIGTYPE=int         If your signal handlers\n     #                       return int, not void.\n     # -DNO_MTIO             If you lack sys/mtio.h\n     #                       (magtape ioctls).\n     # -DNO_REMOTE           If you do not have a remote shell\n     #                       or rexec.\n     # -DUSE_REXEC           To use rexec for remote tape\n     #                       operations instead of\n     #                       forking rsh or remsh.\n     # -DVPRINTF_MISSING     If you lack vprintf function\n     #                       (but have _doprnt).\n     # -DDOPRNT_MISSING      If you lack _doprnt function.\n     #                       Also need to define\n     #                       -DVPRINTF_MISSING.\n     # -DFTIME_MISSING       If you lack ftime system call.\n     # -DSTRSTR_MISSING      If you lack strstr function.\n     # -DVALLOC_MISSING      If you lack valloc function.\n     # -DMKDIR_MISSING       If you lack mkdir and\n     #                       rmdir system calls.\n     # -DRENAME_MISSING      If you lack rename system call.\n     # -DFTRUNCATE_MISSING   If you lack ftruncate\n     #                       system call.\n     # -DV7                  On Version 7 Unix (not\n     #                       tested in a long time).\n     # -DEMUL_OPEN3          If you lack a 3-argument version\n     #                       of open, and want to emulate it\n     #                       with system calls you do have.\n     # -DNO_OPEN3            If you lack the 3-argument open\n     #                       and want to disable the tar -k\n     #                       option instead of emulating open.\n     # -DXENIX               If you have sys/inode.h\n     #                       and need it 94 to be included.\n\n     DEFS =  -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \\\n             -DVPRINTF_MISSING -DBSD42\n     # Set this to rtapelib.o unless you defined NO_REMOTE,\n     # in which case make it empty.\n     RTAPELIB = rtapelib.o\n     LIBS =\n     DEF_AR_FILE = /dev/rmt8\n     DEFBLOCKING = 20\n\n     CDEBUG = -g\n     CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \\\n             -DDEF_AR_FILE=\\\"$(DEF_AR_FILE)\\\" \\\n             -DDEFBLOCKING=$(DEFBLOCKING)\n     LDFLAGS = -g\n\n     prefix = /usr/local\n     # Prefix for each installed program,\n     # normally empty or `g'.\n     binprefix =\n\n     # The directory to install tar in.\n     bindir = $(prefix)/bin\n\n     # The directory to install the info files in.\n     infodir = $(prefix)/info\n\n     #### End of system configuration section. ####\n\n     SRC1 =  tar.c create.c extract.c buffer.c \\\n             getoldopt.c update.c gnu.c mangle.c\n     SRC2 =  version.c list.c names.c diffarch.c \\\n             port.c wildmat.c getopt.c\n     SRC3 =  getopt1.c regex.c getdate.y\n     SRCS =  $(SRC1) $(SRC2) $(SRC3)\n     OBJ1 =  tar.o create.o extract.o buffer.o \\\n             getoldopt.o update.o gnu.o mangle.o\n     OBJ2 =  version.o list.o names.o diffarch.o \\\n             port.o wildmat.o getopt.o\n     OBJ3 =  getopt1.o regex.o getdate.o $(RTAPELIB)\n     OBJS =  $(OBJ1) $(OBJ2) $(OBJ3)\n     AUX =   README COPYING ChangeLog Makefile.in  \\\n             makefile.pc configure configure.in \\\n             tar.texinfo tar.info* texinfo.tex \\\n             tar.h port.h open3.h getopt.h regex.h \\\n             rmt.h rmt.c rtapelib.c alloca.c \\\n             msd_dir.h msd_dir.c tcexparg.c \\\n             level-0 level-1 backup-specs testpad.c\n\n     .PHONY: all\n     all:    tar rmt tar.info\n\n     .PHONY: tar\n     tar:    $(OBJS)\n             $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)\n\n     rmt:    rmt.c\n             $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c\n\n     tar.info: tar.texinfo\n             makeinfo tar.texinfo\n\n     .PHONY: install\n     install: all\n             $(INSTALL) tar $(bindir)/$(binprefix)tar\n             -test ! -f rmt || $(INSTALL) rmt /etc/rmt\n             $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)\n\n     $(OBJS): tar.h port.h testpad.h\n     regex.o buffer.o tar.o: regex.h\n     # getdate.y has 8 shift/reduce conflicts.\n\n     testpad.h: testpad\n             ./testpad\n\n     testpad: testpad.o\n             $(CC) -o $@ testpad.o\n\n     TAGS:   $(SRCS)\n             etags $(SRCS)\n\n     .PHONY: clean\n     clean:\n             rm -f *.o tar rmt testpad testpad.h core\n\n     .PHONY: distclean\n     distclean: clean\n             rm -f TAGS Makefile config.status\n\n     .PHONY: realclean\n     realclean: distclean\n             rm -f tar.info*\n\n     .PHONY: shar\n     shar: $(SRCS) $(AUX)\n             shar $(SRCS) $(AUX) | compress \\\n               > tar-`sed -e '/version_string/!d' \\\n                          -e 's/[^0-9.]*\\([0-9.]*\\).*/\\1/' \\\n                          -e q\n                          version.c`.shar.Z\n\n     .PHONY: dist\n     dist: $(SRCS) $(AUX)\n             echo tar-`sed \\\n                  -e '/version_string/!d' \\\n                  -e 's/[^0-9.]*\\([0-9.]*\\).*/\\1/' \\\n                  -e q\n                  version.c` > .fname\n             -rm -rf `cat .fname`\n             mkdir `cat .fname`\n             ln $(SRCS) $(AUX) `cat .fname`\n             tar chZf `cat .fname`.tar.Z `cat .fname`\n             -rm -rf `cat .fname` .fname\n\n     tar.zoo: $(SRCS) $(AUX)\n             -rm -rf tmp.dir\n             -mkdir tmp.dir\n             -rm tar.zoo\n             for X in $(SRCS) $(AUX) ; do \\\n                 echo $$X ; \\\n                 sed 's/$$/^M/' $$X \\\n                 > tmp.dir/$$X ; done\n             cd tmp.dir ; zoo aM ../tar.zoo *\n             -rm -rf tmp.dir\n\n\u001f\nFile: make.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Complex Makefile,  Up: Top\n\nAppendix D GNU Free Documentation License\n*****************************************\n\n                      Version 1.2, November 2002\n\n     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.\n     51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA\n\n     Everyone is permitted to copy and distribute verbatim copies\n     of this license document, but changing it is not allowed.\n\n  0. PREAMBLE\n\n     The purpose of this License is to make a manual, textbook, or other\n     functional and useful document \"free\" in the sense of freedom: to\n     assure everyone the effective freedom to copy and redistribute it,\n     with or without modifying it, either commercially or\n     noncommercially.  Secondarily, this License preserves for the\n     author and publisher a way to get credit for their work, while not\n     being considered responsible for modifications made by others.\n\n     This License is a kind of \"copyleft\", which means that derivative\n     works of the document must themselves be free in the same sense.\n     It complements the GNU General Public License, which is a copyleft\n     license designed for free software.\n\n     We have designed this License in order to use it for manuals for\n     free software, because free software needs free documentation: a\n     free program should come with manuals providing the same freedoms\n     that the software does.  But this License is not limited to\n     software manuals; it can be used for any textual work, regardless\n     of subject matter or whether it is published as a printed book.\n     We recommend this License principally for works whose purpose is\n     instruction or reference.\n\n  1. APPLICABILITY AND DEFINITIONS\n\n     This License applies to any manual or other work, in any medium,\n     that contains a notice placed by the copyright holder saying it\n     can be distributed under the terms of this License.  Such a notice\n     grants a world-wide, royalty-free license, unlimited in duration,\n     to use that work under the conditions stated herein.  The\n     \"Document\", below, refers to any such manual or work.  Any member\n     of the public is a licensee, and is addressed as \"you\".  You\n     accept the license if you copy, modify or distribute the work in a\n     way requiring permission under copyright law.\n\n     A \"Modified Version\" of the Document means any work containing the\n     Document or a portion of it, either copied verbatim, or with\n     modifications and/or translated into another language.\n\n     A \"Secondary Section\" is a named appendix or a front-matter section\n     of the Document that deals exclusively with the relationship of the\n     publishers or authors of the Document to the Document's overall\n     subject (or to related matters) and contains nothing that could\n     fall directly within that overall subject.  (Thus, if the Document\n     is in part a textbook of mathematics, a Secondary Section may not\n     explain any mathematics.)  The relationship could be a matter of\n     historical connection with the subject or with related matters, or\n     of legal, commercial, philosophical, ethical or political position\n     regarding them.\n\n     The \"Invariant Sections\" are certain Secondary Sections whose\n     titles are designated, as being those of Invariant Sections, in\n     the notice that says that the Document is released under this\n     License.  If a section does not fit the above definition of\n     Secondary then it is not allowed to be designated as Invariant.\n     The Document may contain zero Invariant Sections.  If the Document\n     does not identify any Invariant Sections then there are none.\n\n     The \"Cover Texts\" are certain short passages of text that are\n     listed, as Front-Cover Texts or Back-Cover Texts, in the notice\n     that says that the Document is released under this License.  A\n     Front-Cover Text may be at most 5 words, and a Back-Cover Text may\n     be at most 25 words.\n\n     A \"Transparent\" copy of the Document means a machine-readable copy,\n     represented in a format whose specification is available to the\n     general public, that is suitable for revising the document\n     straightforwardly with generic text editors or (for images\n     composed of pixels) generic paint programs or (for drawings) some\n     widely available drawing editor, and that is suitable for input to\n     text formatters or for automatic translation to a variety of\n     formats suitable for input to text formatters.  A copy made in an\n     otherwise Transparent file format whose markup, or absence of\n     markup, has been arranged to thwart or discourage subsequent\n     modification by readers is not Transparent.  An image format is\n     not Transparent if used for any substantial amount of text.  A\n     copy that is not \"Transparent\" is called \"Opaque\".\n\n     Examples of suitable formats for Transparent copies include plain\n     ASCII without markup, Texinfo input format, LaTeX input format,\n     SGML or XML using a publicly available DTD, and\n     standard-conforming simple HTML, PostScript or PDF designed for\n     human modification.  Examples of transparent image formats include\n     PNG, XCF and JPG.  Opaque formats include proprietary formats that\n     can be read and edited only by proprietary word processors, SGML or\n     XML for which the DTD and/or processing tools are not generally\n     available, and the machine-generated HTML, PostScript or PDF\n     produced by some word processors for output purposes only.\n\n     The \"Title Page\" means, for a printed book, the title page itself,\n     plus such following pages as are needed to hold, legibly, the\n     material this License requires to appear in the title page.  For\n     works in formats which do not have any title page as such, \"Title\n     Page\" means the text near the most prominent appearance of the\n     work's title, preceding the beginning of the body of the text.\n\n     A section \"Entitled XYZ\" means a named subunit of the Document\n     whose title either is precisely XYZ or contains XYZ in parentheses\n     following text that translates XYZ in another language.  (Here XYZ\n     stands for a specific section name mentioned below, such as\n     \"Acknowledgements\", \"Dedications\", \"Endorsements\", or \"History\".)\n     To \"Preserve the Title\" of such a section when you modify the\n     Document means that it remains a section \"Entitled XYZ\" according\n     to this definition.\n\n     The Document may include Warranty Disclaimers next to the notice\n     which states that this License applies to the Document.  These\n     Warranty Disclaimers are considered to be included by reference in\n     this License, but only as regards disclaiming warranties: any other\n     implication that these Warranty Disclaimers may have is void and\n     has no effect on the meaning of this License.\n\n  2. VERBATIM COPYING\n\n     You may copy and distribute the Document in any medium, either\n     commercially or noncommercially, provided that this License, the\n     copyright notices, and the license notice saying this License\n     applies to the Document are reproduced in all copies, and that you\n     add no other conditions whatsoever to those of this License.  You\n     may not use technical measures to obstruct or control the reading\n     or further copying of the copies you make or distribute.  However,\n     you may accept compensation in exchange for copies.  If you\n     distribute a large enough number of copies you must also follow\n     the conditions in section 3.\n\n     You may also lend copies, under the same conditions stated above,\n     and you may publicly display copies.\n\n  3. COPYING IN QUANTITY\n\n     If you publish printed copies (or copies in media that commonly\n     have printed covers) of the Document, numbering more than 100, and\n     the Document's license notice requires Cover Texts, you must\n     enclose the copies in covers that carry, clearly and legibly, all\n     these Cover Texts: Front-Cover Texts on the front cover, and\n     Back-Cover Texts on the back cover.  Both covers must also clearly\n     and legibly identify you as the publisher of these copies.  The\n     front cover must present the full title with all words of the\n     title equally prominent and visible.  You may add other material\n     on the covers in addition.  Copying with changes limited to the\n     covers, as long as they preserve the title of the Document and\n     satisfy these conditions, can be treated as verbatim copying in\n     other respects.\n\n     If the required texts for either cover are too voluminous to fit\n     legibly, you should put the first ones listed (as many as fit\n     reasonably) on the actual cover, and continue the rest onto\n     adjacent pages.\n\n     If you publish or distribute Opaque copies of the Document\n     numbering more than 100, you must either include a\n     machine-readable Transparent copy along with each Opaque copy, or\n     state in or with each Opaque copy a computer-network location from\n     which the general network-using public has access to download\n     using public-standard network protocols a complete Transparent\n     copy of the Document, free of added material.  If you use the\n     latter option, you must take reasonably prudent steps, when you\n     begin distribution of Opaque copies in quantity, to ensure that\n     this Transparent copy will remain thus accessible at the stated\n     location until at least one year after the last time you\n     distribute an Opaque copy (directly or through your agents or\n     retailers) of that edition to the public.\n\n     It is requested, but not required, that you contact the authors of\n     the Document well before redistributing any large number of\n     copies, to give them a chance to provide you with an updated\n     version of the Document.\n\n  4. MODIFICATIONS\n\n     You may copy and distribute a Modified Version of the Document\n     under the conditions of sections 2 and 3 above, provided that you\n     release the Modified Version under precisely this License, with\n     the Modified Version filling the role of the Document, thus\n     licensing distribution and modification of the Modified Version to\n     whoever possesses a copy of it.  In addition, you must do these\n     things in the Modified Version:\n\n       A. Use in the Title Page (and on the covers, if any) a title\n          distinct from that of the Document, and from those of\n          previous versions (which should, if there were any, be listed\n          in the History section of the Document).  You may use the\n          same title as a previous version if the original publisher of\n          that version gives permission.\n\n       B. List on the Title Page, as authors, one or more persons or\n          entities responsible for authorship of the modifications in\n          the Modified Version, together with at least five of the\n          principal authors of the Document (all of its principal\n          authors, if it has fewer than five), unless they release you\n          from this requirement.\n\n       C. State on the Title page the name of the publisher of the\n          Modified Version, as the publisher.\n\n       D. Preserve all the copyright notices of the Document.\n\n       E. Add an appropriate copyright notice for your modifications\n          adjacent to the other copyright notices.\n\n       F. Include, immediately after the copyright notices, a license\n          notice giving the public permission to use the Modified\n          Version under the terms of this License, in the form shown in\n          the Addendum below.\n\n       G. Preserve in that license notice the full lists of Invariant\n          Sections and required Cover Texts given in the Document's\n          license notice.\n\n       H. Include an unaltered copy of this License.\n\n       I. Preserve the section Entitled \"History\", Preserve its Title,\n          and add to it an item stating at least the title, year, new\n          authors, and publisher of the Modified Version as given on\n          the Title Page.  If there is no section Entitled \"History\" in\n          the Document, create one stating the title, year, authors,\n          and publisher of the Document as given on its Title Page,\n          then add an item describing the Modified Version as stated in\n          the previous sentence.\n\n       J. Preserve the network location, if any, given in the Document\n          for public access to a Transparent copy of the Document, and\n          likewise the network locations given in the Document for\n          previous versions it was based on.  These may be placed in\n          the \"History\" section.  You may omit a network location for a\n          work that was published at least four years before the\n          Document itself, or if the original publisher of the version\n          it refers to gives permission.\n\n       K. For any section Entitled \"Acknowledgements\" or \"Dedications\",\n          Preserve the Title of the section, and preserve in the\n          section all the substance and tone of each of the contributor\n          acknowledgements and/or dedications given therein.\n\n       L. Preserve all the Invariant Sections of the Document,\n          unaltered in their text and in their titles.  Section numbers\n          or the equivalent are not considered part of the section\n          titles.\n\n       M. Delete any section Entitled \"Endorsements\".  Such a section\n          may not be included in the Modified Version.\n\n       N. Do not retitle any existing section to be Entitled\n          \"Endorsements\" or to conflict in title with any Invariant\n          Section.\n\n       O. Preserve any Warranty Disclaimers.\n\n     If the Modified Version includes new front-matter sections or\n     appendices that qualify as Secondary Sections and contain no\n     material copied from the Document, you may at your option\n     designate some or all of these sections as invariant.  To do this,\n     add their titles to the list of Invariant Sections in the Modified\n     Version's license notice.  These titles must be distinct from any\n     other section titles.\n\n     You may add a section Entitled \"Endorsements\", provided it contains\n     nothing but endorsements of your Modified Version by various\n     parties--for example, statements of peer review or that the text\n     has been approved by an organization as the authoritative\n     definition of a standard.\n\n     You may add a passage of up to five words as a Front-Cover Text,\n     and a passage of up to 25 words as a Back-Cover Text, to the end\n     of the list of Cover Texts in the Modified Version.  Only one\n     passage of Front-Cover Text and one of Back-Cover Text may be\n     added by (or through arrangements made by) any one entity.  If the\n     Document already includes a cover text for the same cover,\n     previously added by you or by arrangement made by the same entity\n     you are acting on behalf of, you may not add another; but you may\n     replace the old one, on explicit permission from the previous\n     publisher that added the old one.\n\n     The author(s) and publisher(s) of the Document do not by this\n     License give permission to use their names for publicity for or to\n     assert or imply endorsement of any Modified Version.\n\n  5. COMBINING DOCUMENTS\n\n     You may combine the Document with other documents released under\n     this License, under the terms defined in section 4 above for\n     modified versions, provided that you include in the combination\n     all of the Invariant Sections of all of the original documents,\n     unmodified, and list them all as Invariant Sections of your\n     combined work in its license notice, and that you preserve all\n     their Warranty Disclaimers.\n\n     The combined work need only contain one copy of this License, and\n     multiple identical Invariant Sections may be replaced with a single\n     copy.  If there are multiple Invariant Sections with the same name\n     but different contents, make the title of each such section unique\n     by adding at the end of it, in parentheses, the name of the\n     original author or publisher of that section if known, or else a\n     unique number.  Make the same adjustment to the section titles in\n     the list of Invariant Sections in the license notice of the\n     combined work.\n\n     In the combination, you must combine any sections Entitled\n     \"History\" in the various original documents, forming one section\n     Entitled \"History\"; likewise combine any sections Entitled\n     \"Acknowledgements\", and any sections Entitled \"Dedications\".  You\n     must delete all sections Entitled \"Endorsements.\"\n\n  6. COLLECTIONS OF DOCUMENTS\n\n     You may make a collection consisting of the Document and other\n     documents released under this License, and replace the individual\n     copies of this License in the various documents with a single copy\n     that is included in the collection, provided that you follow the\n     rules of this License for verbatim copying of each of the\n     documents in all other respects.\n\n     You may extract a single document from such a collection, and\n     distribute it individually under this License, provided you insert\n     a copy of this License into the extracted document, and follow\n     this License in all other respects regarding verbatim copying of\n     that document.\n\n  7. AGGREGATION WITH INDEPENDENT WORKS\n\n     A compilation of the Document or its derivatives with other\n     separate and independent documents or works, in or on a volume of\n     a storage or distribution medium, is called an \"aggregate\" if the\n     copyright resulting from the compilation is not used to limit the\n     legal rights of the compilation's users beyond what the individual\n     works permit.  When the Document is included in an aggregate, this\n     License does not apply to the other works in the aggregate which\n     are not themselves derivative works of the Document.\n\n     If the Cover Text requirement of section 3 is applicable to these\n     copies of the Document, then if the Document is less than one half\n     of the entire aggregate, the Document's Cover Texts may be placed\n     on covers that bracket the Document within the aggregate, or the\n     electronic equivalent of covers if the Document is in electronic\n     form.  Otherwise they must appear on printed covers that bracket\n     the whole aggregate.\n\n  8. TRANSLATION\n\n     Translation is considered a kind of modification, so you may\n     distribute translations of the Document under the terms of section\n     4.  Replacing Invariant Sections with translations requires special\n     permission from their copyright holders, but you may include\n     translations of some or all Invariant Sections in addition to the\n     original versions of these Invariant Sections.  You may include a\n     translation of this License, and all the license notices in the\n     Document, and any Warranty Disclaimers, provided that you also\n     include the original English version of this License and the\n     original versions of those notices and disclaimers.  In case of a\n     disagreement between the translation and the original version of\n     this License or a notice or disclaimer, the original version will\n     prevail.\n\n     If a section in the Document is Entitled \"Acknowledgements\",\n     \"Dedications\", or \"History\", the requirement (section 4) to\n     Preserve its Title (section 1) will typically require changing the\n     actual title.\n\n  9. TERMINATION\n\n     You may not copy, modify, sublicense, or distribute the Document\n     except as expressly provided for under this License.  Any other\n     attempt to copy, modify, sublicense or distribute the Document is\n     void, and will automatically terminate your rights under this\n     License.  However, parties who have received copies, or rights,\n     from you under this License will not have their licenses\n     terminated so long as such parties remain in full compliance.\n\n 10. FUTURE REVISIONS OF THIS LICENSE\n\n     The Free Software Foundation may publish new, revised versions of\n     the GNU Free Documentation License from time to time.  Such new\n     versions will be similar in spirit to the present version, but may\n     differ in detail to address new problems or concerns.  See\n     `http://www.gnu.org/copyleft/'.\n\n     Each version of the License is given a distinguishing version\n     number.  If the Document specifies that a particular numbered\n     version of this License \"or any later version\" applies to it, you\n     have the option of following the terms and conditions either of\n     that specified version or of any later version that has been\n     published (not as a draft) by the Free Software Foundation.  If\n     the Document does not specify a version number of this License,\n     you may choose any version ever published (not as a draft) by the\n     Free Software Foundation.\n\nD.1 ADDENDUM: How to use this License for your documents\n========================================================\n\nTo use this License in a document you have written, include a copy of\nthe License in the document and put the following copyright and license\nnotices just after the title page:\n\n       Copyright (C)  YEAR  YOUR NAME.\n       Permission is granted to copy, distribute and/or modify this document\n       under the terms of the GNU Free Documentation License, Version 1.2\n       or any later version published by the Free Software Foundation;\n       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover\n       Texts.  A copy of the license is included in the section entitled ``GNU\n       Free Documentation License''.\n\n   If you have Invariant Sections, Front-Cover Texts and Back-Cover\nTexts, replace the \"with...Texts.\" line with this:\n\n         with the Invariant Sections being LIST THEIR TITLES, with\n         the Front-Cover Texts being LIST, and with the Back-Cover Texts\n         being LIST.\n\n   If you have Invariant Sections without Cover Texts, or some other\ncombination of the three, merge those two alternatives to suit the\nsituation.\n\n   If your document contains nontrivial examples of program code, we\nrecommend releasing these examples in parallel under your choice of\nfree software license, such as the GNU General Public License, to\npermit their use in free software.\n\n\u001f\nFile: make.info,  Node: Concept Index,  Next: Name Index,  Prev: GNU Free Documentation License,  Up: Top\n\nIndex of Concepts\n*****************\n\n\u0000\b[index\u0000\b]\n* Menu:\n\n* # (comments), in commands:             Command Syntax.      (line  27)\n* # (comments), in makefile:             Makefile Contents.   (line  41)\n* #include:                              Automatic Prerequisites.\n                                                              (line  16)\n* $, in function call:                   Syntax of Functions. (line   6)\n* $, in rules:                           Rule Syntax.         (line  32)\n* $, in variable name:                   Computed Names.      (line   6)\n* $, in variable reference:              Reference.           (line   6)\n* %, in pattern rules:                   Pattern Intro.       (line   9)\n* %, quoting in patsubst:                Text Functions.      (line  26)\n* %, quoting in static pattern:          Static Usage.        (line  37)\n* %, quoting in vpath:                   Selective Search.    (line  38)\n* %, quoting with \\ (backslash) <1>:     Text Functions.      (line  26)\n* %, quoting with \\ (backslash) <2>:     Static Usage.        (line  37)\n* %, quoting with \\ (backslash):         Selective Search.    (line  38)\n* * (wildcard character):                Wildcards.           (line   6)\n* +, and command execution:              Instead of Execution.\n                                                              (line  58)\n* +, and commands:                       MAKE Variable.       (line  18)\n* +, and define:                         Sequences.           (line  50)\n* +=:                                    Appending.           (line   6)\n* +=, expansion:                         Reading Makefiles.   (line  33)\n* ,v (RCS file extension):               Catalogue of Rules.  (line 164)\n* - (in commands):                       Errors.              (line  19)\n* -, and define:                         Sequences.           (line  50)\n* --always-make:                         Options Summary.     (line  15)\n* --assume-new <1>:                      Options Summary.     (line 242)\n* --assume-new:                          Instead of Execution.\n                                                              (line  33)\n* --assume-new, and recursion:           Options/Recursion.   (line  22)\n* --assume-old <1>:                      Options Summary.     (line 147)\n* --assume-old:                          Avoiding Compilation.\n                                                              (line   6)\n* --assume-old, and recursion:           Options/Recursion.   (line  22)\n* --check-symlink-times:                 Options Summary.     (line 130)\n* --debug:                               Options Summary.     (line  42)\n* --directory <1>:                       Options Summary.     (line  26)\n* --directory:                           Recursion.           (line  20)\n* --directory, and --print-directory:    -w Option.           (line  20)\n* --directory, and recursion:            Options/Recursion.   (line  22)\n* --dry-run <1>:                         Options Summary.     (line 140)\n* --dry-run <2>:                         Instead of Execution.\n                                                              (line  14)\n* --dry-run:                             Echoing.             (line  18)\n* --environment-overrides:               Options Summary.     (line  78)\n* --file <1>:                            Options Summary.     (line  84)\n* --file <2>:                            Makefile Arguments.  (line   6)\n* --file:                                Makefile Names.      (line  23)\n* --file, and recursion:                 Options/Recursion.   (line  22)\n* --help:                                Options Summary.     (line  90)\n* --ignore-errors <1>:                   Options Summary.     (line  94)\n* --ignore-errors:                       Errors.              (line  30)\n* --include-dir <1>:                     Options Summary.     (line  99)\n* --include-dir:                         Include.             (line  52)\n* --jobs <1>:                            Options Summary.     (line 106)\n* --jobs:                                Parallel.            (line   6)\n* --jobs, and recursion:                 Options/Recursion.   (line  25)\n* --just-print <1>:                      Options Summary.     (line 139)\n* --just-print <2>:                      Instead of Execution.\n                                                              (line  14)\n* --just-print:                          Echoing.             (line  18)\n* --keep-going <1>:                      Options Summary.     (line 115)\n* --keep-going <2>:                      Testing.             (line  16)\n* --keep-going:                          Errors.              (line  47)\n* --load-average <1>:                    Options Summary.     (line 122)\n* --load-average:                        Parallel.            (line  57)\n* --makefile <1>:                        Options Summary.     (line  85)\n* --makefile <2>:                        Makefile Arguments.  (line   6)\n* --makefile:                            Makefile Names.      (line  23)\n* --max-load <1>:                        Options Summary.     (line 123)\n* --max-load:                            Parallel.            (line  57)\n* --new-file <1>:                        Options Summary.     (line 241)\n* --new-file:                            Instead of Execution.\n                                                              (line  33)\n* --new-file, and recursion:             Options/Recursion.   (line  22)\n* --no-builtin-rules:                    Options Summary.     (line 175)\n* --no-builtin-variables:                Options Summary.     (line 188)\n* --no-keep-going:                       Options Summary.     (line 203)\n* --no-print-directory <1>:              Options Summary.     (line 233)\n* --no-print-directory:                  -w Option.           (line  20)\n* --old-file <1>:                        Options Summary.     (line 146)\n* --old-file:                            Avoiding Compilation.\n                                                              (line   6)\n* --old-file, and recursion:             Options/Recursion.   (line  22)\n* --print-data-base:                     Options Summary.     (line 155)\n* --print-directory:                     Options Summary.     (line 225)\n* --print-directory, and --directory:    -w Option.           (line  20)\n* --print-directory, and recursion:      -w Option.           (line  20)\n* --print-directory, disabling:          -w Option.           (line  20)\n* --question <1>:                        Options Summary.     (line 167)\n* --question:                            Instead of Execution.\n                                                              (line  25)\n* --quiet <1>:                           Options Summary.     (line 198)\n* --quiet:                               Echoing.             (line  24)\n* --recon <1>:                           Options Summary.     (line 141)\n* --recon <2>:                           Instead of Execution.\n                                                              (line  14)\n* --recon:                               Echoing.             (line  18)\n* --silent <1>:                          Options Summary.     (line 197)\n* --silent:                              Echoing.             (line  24)\n* --stop:                                Options Summary.     (line 204)\n* --touch <1>:                           Options Summary.     (line 212)\n* --touch:                               Instead of Execution.\n                                                              (line  19)\n* --touch, and recursion:                MAKE Variable.       (line  34)\n* --version:                             Options Summary.     (line 220)\n* --warn-undefined-variables:            Options Summary.     (line 251)\n* --what-if <1>:                         Options Summary.     (line 240)\n* --what-if:                             Instead of Execution.\n                                                              (line  33)\n* -B:                                    Options Summary.     (line  14)\n* -b:                                    Options Summary.     (line   9)\n* -C <1>:                                Options Summary.     (line  25)\n* -C:                                    Recursion.           (line  20)\n* -C, and -w:                            -w Option.           (line  20)\n* -C, and recursion:                     Options/Recursion.   (line  22)\n* -d:                                    Options Summary.     (line  33)\n* -e:                                    Options Summary.     (line  77)\n* -e (shell flag):                       Automatic Prerequisites.\n                                                              (line  66)\n* -f <1>:                                Options Summary.     (line  83)\n* -f <2>:                                Makefile Arguments.  (line   6)\n* -f:                                    Makefile Names.      (line  23)\n* -f, and recursion:                     Options/Recursion.   (line  22)\n* -h:                                    Options Summary.     (line  89)\n* -I:                                    Options Summary.     (line  98)\n* -i <1>:                                Options Summary.     (line  93)\n* -i:                                    Errors.              (line  30)\n* -I:                                    Include.             (line  52)\n* -j <1>:                                Options Summary.     (line 105)\n* -j:                                    Parallel.            (line   6)\n* -j, and archive update:                Archive Pitfalls.    (line   6)\n* -j, and recursion:                     Options/Recursion.   (line  25)\n* -k <1>:                                Options Summary.     (line 114)\n* -k <2>:                                Testing.             (line  16)\n* -k:                                    Errors.              (line  47)\n* -L:                                    Options Summary.     (line 129)\n* -l:                                    Options Summary.     (line 121)\n* -l (library search):                   Libraries/Search.    (line   6)\n* -l (load average):                     Parallel.            (line  57)\n* -m:                                    Options Summary.     (line  10)\n* -M (to compiler):                      Automatic Prerequisites.\n                                                              (line  18)\n* -MM (to GNU compiler):                 Automatic Prerequisites.\n                                                              (line  68)\n* -n <1>:                                Options Summary.     (line 138)\n* -n <2>:                                Instead of Execution.\n                                                              (line  14)\n* -n:                                    Echoing.             (line  18)\n* -o <1>:                                Options Summary.     (line 145)\n* -o:                                    Avoiding Compilation.\n                                                              (line   6)\n* -o, and recursion:                     Options/Recursion.   (line  22)\n* -p:                                    Options Summary.     (line 154)\n* -q <1>:                                Options Summary.     (line 166)\n* -q:                                    Instead of Execution.\n                                                              (line  25)\n* -R:                                    Options Summary.     (line 187)\n* -r:                                    Options Summary.     (line 174)\n* -S:                                    Options Summary.     (line 202)\n* -s <1>:                                Options Summary.     (line 196)\n* -s:                                    Echoing.             (line  24)\n* -t <1>:                                Options Summary.     (line 211)\n* -t:                                    Instead of Execution.\n                                                              (line  19)\n* -t, and recursion:                     MAKE Variable.       (line  34)\n* -v:                                    Options Summary.     (line 219)\n* -W:                                    Options Summary.     (line 239)\n* -w:                                    Options Summary.     (line 224)\n* -W:                                    Instead of Execution.\n                                                              (line  33)\n* -w, and -C:                            -w Option.           (line  20)\n* -w, and recursion:                     -w Option.           (line  20)\n* -W, and recursion:                     Options/Recursion.   (line  22)\n* -w, disabling:                         -w Option.           (line  20)\n* .a (archives):                         Archive Suffix Rules.\n                                                              (line   6)\n* .C:                                    Catalogue of Rules.  (line  39)\n* .c:                                    Catalogue of Rules.  (line  35)\n* .cc:                                   Catalogue of Rules.  (line  39)\n* .ch:                                   Catalogue of Rules.  (line 151)\n* .cpp:                                  Catalogue of Rules.  (line  39)\n* .d:                                    Automatic Prerequisites.\n                                                              (line  81)\n* .def:                                  Catalogue of Rules.  (line  74)\n* .dvi:                                  Catalogue of Rules.  (line 151)\n* .F:                                    Catalogue of Rules.  (line  49)\n* .f:                                    Catalogue of Rules.  (line  49)\n* .info:                                 Catalogue of Rules.  (line 158)\n* .l:                                    Catalogue of Rules.  (line 124)\n* .LIBPATTERNS, and link libraries:      Libraries/Search.    (line   6)\n* .ln:                                   Catalogue of Rules.  (line 146)\n* .mod:                                  Catalogue of Rules.  (line  74)\n* .o:                                    Catalogue of Rules.  (line  35)\n* .p:                                    Catalogue of Rules.  (line  45)\n* .PRECIOUS intermediate files:          Chained Rules.       (line  56)\n* .r:                                    Catalogue of Rules.  (line  49)\n* .S:                                    Catalogue of Rules.  (line  82)\n* .s:                                    Catalogue of Rules.  (line  79)\n* .sh:                                   Catalogue of Rules.  (line 180)\n* .sym:                                  Catalogue of Rules.  (line  74)\n* .tex:                                  Catalogue of Rules.  (line 151)\n* .texi:                                 Catalogue of Rules.  (line 158)\n* .texinfo:                              Catalogue of Rules.  (line 158)\n* .txinfo:                               Catalogue of Rules.  (line 158)\n* .w:                                    Catalogue of Rules.  (line 151)\n* .web:                                  Catalogue of Rules.  (line 151)\n* .y:                                    Catalogue of Rules.  (line 120)\n* :: rules (double-colon):               Double-Colon.        (line   6)\n* := <1>:                                Setting.             (line   6)\n* :=:                                    Flavors.             (line  56)\n* = <1>:                                 Setting.             (line   6)\n* =:                                     Flavors.             (line  10)\n* =, expansion:                          Reading Makefiles.   (line  33)\n* ? (wildcard character):                Wildcards.           (line   6)\n* ?= <1>:                                Setting.             (line   6)\n* ?=:                                    Flavors.             (line 129)\n* ?=, expansion:                         Reading Makefiles.   (line  33)\n* @ (in commands):                       Echoing.             (line   6)\n* @, and define:                         Sequences.           (line  50)\n* [...] (wildcard characters):           Wildcards.           (line   6)\n* \\ (backslash), for continuation lines: Simple Makefile.     (line  40)\n* \\ (backslash), in commands:            Splitting Lines.     (line   6)\n* \\ (backslash), to quote % <1>:         Text Functions.      (line  26)\n* \\ (backslash), to quote % <2>:         Static Usage.        (line  37)\n* \\ (backslash), to quote %:             Selective Search.    (line  38)\n* __.SYMDEF:                             Archive Symbols.     (line   6)\n* abspath:                               File Name Functions. (line 121)\n* algorithm for directory search:        Search Algorithm.    (line   6)\n* all (standard target):                 Goals.               (line  72)\n* appending to variables:                Appending.           (line   6)\n* ar:                                    Implicit Variables.  (line  41)\n* archive:                               Archives.            (line   6)\n* archive member targets:                Archive Members.     (line   6)\n* archive symbol directory updating:     Archive Symbols.     (line   6)\n* archive, and -j:                       Archive Pitfalls.    (line   6)\n* archive, and parallel execution:       Archive Pitfalls.    (line   6)\n* archive, suffix rule for:              Archive Suffix Rules.\n                                                              (line   6)\n* Arg list too long:                     Options/Recursion.   (line  57)\n* arguments of functions:                Syntax of Functions. (line   6)\n* as <1>:                                Implicit Variables.  (line  44)\n* as:                                    Catalogue of Rules.  (line  79)\n* assembly, rule to compile:             Catalogue of Rules.  (line  79)\n* automatic generation of prerequisites <1>: Automatic Prerequisites.\n                                                              (line   6)\n* automatic generation of prerequisites: Include.             (line  50)\n* automatic variables:                   Automatic Variables. (line   6)\n* automatic variables in prerequisites:  Automatic Variables. (line  17)\n* backquotes:                            Shell Function.      (line   6)\n* backslash (\\), for continuation lines: Simple Makefile.     (line  40)\n* backslash (\\), in commands:            Splitting Lines.     (line   6)\n* backslash (\\), to quote % <1>:         Text Functions.      (line  26)\n* backslash (\\), to quote % <2>:         Static Usage.        (line  37)\n* backslash (\\), to quote %:             Selective Search.    (line  38)\n* backslashes in pathnames and wildcard expansion: Wildcard Pitfall.\n                                                              (line  31)\n* basename:                              File Name Functions. (line  57)\n* binary packages:                       Install Command Categories.\n                                                              (line  80)\n* broken pipe:                           Parallel.            (line  30)\n* bugs, reporting:                       Bugs.                (line   6)\n* built-in special targets:              Special Targets.     (line   6)\n* C++, rule to compile:                  Catalogue of Rules.  (line  39)\n* C, rule to compile:                    Catalogue of Rules.  (line  35)\n* cc <1>:                                Implicit Variables.  (line  47)\n* cc:                                    Catalogue of Rules.  (line  35)\n* cd (shell command) <1>:                MAKE Variable.       (line  16)\n* cd (shell command):                    Execution.           (line  10)\n* chains of rules:                       Chained Rules.       (line   6)\n* check (standard target):               Goals.               (line 114)\n* clean (standard target):               Goals.               (line  75)\n* clean target <1>:                      Cleanup.             (line  11)\n* clean target:                          Simple Makefile.     (line  83)\n* cleaning up:                           Cleanup.             (line   6)\n* clobber (standard target):             Goals.               (line  86)\n* co <1>:                                Implicit Variables.  (line  56)\n* co:                                    Catalogue of Rules.  (line 164)\n* combining rules by prerequisite:       Combine By Prerequisite.\n                                                              (line   6)\n* command line variable definitions, and recursion: Options/Recursion.\n                                                              (line  17)\n* command line variables:                Overriding.          (line   6)\n* command syntax:                        Command Syntax.      (line   6)\n* commands:                              Rule Syntax.         (line  26)\n* commands setting shell variables:      Execution.           (line  10)\n* commands, backslash (\\) in:            Splitting Lines.     (line   6)\n* commands, comments in:                 Command Syntax.      (line  27)\n* commands, echoing:                     Echoing.             (line   6)\n* commands, empty:                       Empty Commands.      (line   6)\n* commands, errors in:                   Errors.              (line   6)\n* commands, execution:                   Execution.           (line   6)\n* commands, execution in parallel:       Parallel.            (line   6)\n* commands, expansion:                   Shell Function.      (line   6)\n* commands, how to write:                Commands.            (line   6)\n* commands, instead of executing:        Instead of Execution.\n                                                              (line   6)\n* commands, introduction to:             Rule Introduction.   (line   8)\n* commands, quoting newlines in:         Splitting Lines.     (line   6)\n* commands, sequences of:                Sequences.           (line   6)\n* commands, splitting:                   Splitting Lines.     (line   6)\n* commands, using variables in:          Variables in Commands.\n                                                              (line   6)\n* comments, in commands:                 Command Syntax.      (line  27)\n* comments, in makefile:                 Makefile Contents.   (line  41)\n* compatibility:                         Features.            (line   6)\n* compatibility in exporting:            Variables/Recursion. (line 105)\n* compilation, testing:                  Testing.             (line   6)\n* computed variable name:                Computed Names.      (line   6)\n* conditional expansion:                 Conditional Functions.\n                                                              (line   6)\n* conditional variable assignment:       Flavors.             (line 129)\n* conditionals:                          Conditionals.        (line   6)\n* continuation lines:                    Simple Makefile.     (line  40)\n* controlling make:                      Make Control Functions.\n                                                              (line   6)\n* conventions for makefiles:             Makefile Conventions.\n                                                              (line   6)\n* ctangle <1>:                           Implicit Variables.  (line 107)\n* ctangle:                               Catalogue of Rules.  (line 151)\n* cweave <1>:                            Implicit Variables.  (line 101)\n* cweave:                                Catalogue of Rules.  (line 151)\n* data base of make rules:               Options Summary.     (line 155)\n* deducing commands (implicit rules):    make Deduces.        (line   6)\n* default directories for included makefiles: Include.        (line  52)\n* default goal <1>:                      Rules.               (line  11)\n* default goal:                          How Make Works.      (line  11)\n* default makefile name:                 Makefile Names.      (line   6)\n* default rules, last-resort:            Last Resort.         (line   6)\n* define, expansion:                     Reading Makefiles.   (line  33)\n* defining variables verbatim:           Defining.            (line   6)\n* deletion of target files <1>:          Interrupts.          (line   6)\n* deletion of target files:              Errors.              (line  64)\n* directive:                             Makefile Contents.   (line  28)\n* directories, printing them:            -w Option.           (line   6)\n* directories, updating archive symbol:  Archive Symbols.     (line   6)\n* directory part:                        File Name Functions. (line  17)\n* directory search (VPATH):              Directory Search.    (line   6)\n* directory search (VPATH), and implicit rules: Implicit/Search.\n                                                              (line   6)\n* directory search (VPATH), and link libraries: Libraries/Search.\n                                                              (line   6)\n* directory search (VPATH), and shell commands: Commands/Search.\n                                                              (line   6)\n* directory search algorithm:            Search Algorithm.    (line   6)\n* directory search, traditional (GPATH): Search Algorithm.    (line  42)\n* dist (standard target):                Goals.               (line 106)\n* distclean (standard target):           Goals.               (line  84)\n* dollar sign ($), in function call:     Syntax of Functions. (line   6)\n* dollar sign ($), in rules:             Rule Syntax.         (line  32)\n* dollar sign ($), in variable name:     Computed Names.      (line   6)\n* dollar sign ($), in variable reference: Reference.          (line   6)\n* DOS, choosing a shell in:              Choosing the Shell.  (line  36)\n* double-colon rules:                    Double-Colon.        (line   6)\n* duplicate words, removing:             Text Functions.      (line 155)\n* E2BIG:                                 Options/Recursion.   (line  57)\n* echoing of commands:                   Echoing.             (line   6)\n* editor:                                Introduction.        (line  22)\n* Emacs (M-x compile):                   Errors.              (line  62)\n* empty commands:                        Empty Commands.      (line   6)\n* empty targets:                         Empty Targets.       (line   6)\n* environment:                           Environment.         (line   6)\n* environment, and recursion:            Variables/Recursion. (line   6)\n* environment, SHELL in:                 Choosing the Shell.  (line  10)\n* error, stopping on:                    Make Control Functions.\n                                                              (line  11)\n* errors (in commands):                  Errors.              (line   6)\n* errors with wildcards:                 Wildcard Pitfall.    (line   6)\n* evaluating makefile syntax:            Eval Function.       (line   6)\n* execution, in parallel:                Parallel.            (line   6)\n* execution, instead of:                 Instead of Execution.\n                                                              (line   6)\n* execution, of commands:                Execution.           (line   6)\n* exit status (errors):                  Errors.              (line   6)\n* exit status of make:                   Running.             (line  18)\n* expansion, secondary:                  Secondary Expansion. (line   6)\n* explicit rule, definition of:          Makefile Contents.   (line  10)\n* explicit rule, expansion:              Reading Makefiles.   (line  62)\n* explicit rules, secondary expansion of: Secondary Expansion.\n                                                              (line 106)\n* exporting variables:                   Variables/Recursion. (line   6)\n* f77 <1>:                               Implicit Variables.  (line  64)\n* f77:                                   Catalogue of Rules.  (line  49)\n* FDL, GNU Free Documentation License:   GNU Free Documentation License.\n                                                              (line   6)\n* features of GNU make:                  Features.            (line   6)\n* features, missing:                     Missing.             (line   6)\n* file name functions:                   File Name Functions. (line   6)\n* file name of makefile:                 Makefile Names.      (line   6)\n* file name of makefile, how to specify: Makefile Names.      (line  30)\n* file name prefix, adding:              File Name Functions. (line  79)\n* file name suffix:                      File Name Functions. (line  43)\n* file name suffix, adding:              File Name Functions. (line  68)\n* file name with wildcards:              Wildcards.           (line   6)\n* file name, abspath of:                 File Name Functions. (line 121)\n* file name, basename of:                File Name Functions. (line  57)\n* file name, directory part:             File Name Functions. (line  17)\n* file name, nondirectory part:          File Name Functions. (line  27)\n* file name, realpath of:                File Name Functions. (line 114)\n* files, assuming new:                   Instead of Execution.\n                                                              (line  33)\n* files, assuming old:                   Avoiding Compilation.\n                                                              (line   6)\n* files, avoiding recompilation of:      Avoiding Compilation.\n                                                              (line   6)\n* files, intermediate:                   Chained Rules.       (line  16)\n* filtering out words:                   Text Functions.      (line 132)\n* filtering words:                       Text Functions.      (line 114)\n* finding strings:                       Text Functions.      (line 103)\n* flags:                                 Options Summary.     (line   6)\n* flags for compilers:                   Implicit Variables.  (line   6)\n* flavor of variable:                    Flavor Function.     (line   6)\n* flavors of variables:                  Flavors.             (line   6)\n* FORCE:                                 Force Targets.       (line   6)\n* force targets:                         Force Targets.       (line   6)\n* Fortran, rule to compile:              Catalogue of Rules.  (line  49)\n* functions:                             Functions.           (line   6)\n* functions, for controlling make:       Make Control Functions.\n                                                              (line   6)\n* functions, for file names:             File Name Functions. (line   6)\n* functions, for text:                   Text Functions.      (line   6)\n* functions, syntax of:                  Syntax of Functions. (line   6)\n* functions, user defined:               Call Function.       (line   6)\n* g++ <1>:                               Implicit Variables.  (line  53)\n* g++:                                   Catalogue of Rules.  (line  39)\n* gcc:                                   Catalogue of Rules.  (line  35)\n* generating prerequisites automatically <1>: Automatic Prerequisites.\n                                                              (line   6)\n* generating prerequisites automatically: Include.            (line  50)\n* get <1>:                               Implicit Variables.  (line  67)\n* get:                                   Catalogue of Rules.  (line 173)\n* globbing (wildcards):                  Wildcards.           (line   6)\n* goal:                                  How Make Works.      (line  11)\n* goal, default <1>:                     Rules.               (line  11)\n* goal, default:                         How Make Works.      (line  11)\n* goal, how to specify:                  Goals.               (line   6)\n* home directory:                        Wildcards.           (line  11)\n* IEEE Standard 1003.2:                  Overview.            (line  13)\n* ifdef, expansion:                      Reading Makefiles.   (line  51)\n* ifeq, expansion:                       Reading Makefiles.   (line  51)\n* ifndef, expansion:                     Reading Makefiles.   (line  51)\n* ifneq, expansion:                      Reading Makefiles.   (line  51)\n* implicit rule:                         Implicit Rules.      (line   6)\n* implicit rule, and directory search:   Implicit/Search.     (line   6)\n* implicit rule, and VPATH:              Implicit/Search.     (line   6)\n* implicit rule, definition of:          Makefile Contents.   (line  16)\n* implicit rule, expansion:              Reading Makefiles.   (line  62)\n* implicit rule, how to use:             Using Implicit.      (line   6)\n* implicit rule, introduction to:        make Deduces.        (line   6)\n* implicit rule, predefined:             Catalogue of Rules.  (line   6)\n* implicit rule, search algorithm:       Implicit Rule Search.\n                                                              (line   6)\n* implicit rules, secondary expansion of: Secondary Expansion.\n                                                              (line 146)\n* included makefiles, default directories: Include.           (line  52)\n* including (MAKEFILE_LIST variable):    MAKEFILE_LIST Variable.\n                                                              (line   6)\n* including (MAKEFILES variable):        MAKEFILES Variable.  (line   6)\n* including other makefiles:             Include.             (line   6)\n* incompatibilities:                     Missing.             (line   6)\n* Info, rule to format:                  Catalogue of Rules.  (line 158)\n* install (standard target):             Goals.               (line  92)\n* intermediate files:                    Chained Rules.       (line  16)\n* intermediate files, preserving:        Chained Rules.       (line  46)\n* intermediate targets, explicit:        Special Targets.     (line  44)\n* interrupt:                             Interrupts.          (line   6)\n* job slots:                             Parallel.            (line   6)\n* job slots, and recursion:              Options/Recursion.   (line  25)\n* jobs, limiting based on load:          Parallel.            (line  57)\n* joining lists of words:                File Name Functions. (line  90)\n* killing (interruption):                Interrupts.          (line   6)\n* last-resort default rules:             Last Resort.         (line   6)\n* ld:                                    Catalogue of Rules.  (line  86)\n* lex <1>:                               Implicit Variables.  (line  71)\n* lex:                                   Catalogue of Rules.  (line 124)\n* Lex, rule to run:                      Catalogue of Rules.  (line 124)\n* libraries for linking, directory search: Libraries/Search.  (line   6)\n* library archive, suffix rule for:      Archive Suffix Rules.\n                                                              (line   6)\n* limiting jobs based on load:           Parallel.            (line  57)\n* link libraries, and directory search:  Libraries/Search.    (line   6)\n* link libraries, patterns matching:     Libraries/Search.    (line   6)\n* linking, predefined rule for:          Catalogue of Rules.  (line  86)\n* lint <1>:                              Implicit Variables.  (line  78)\n* lint:                                  Catalogue of Rules.  (line 146)\n* lint, rule to run:                     Catalogue of Rules.  (line 146)\n* list of all prerequisites:             Automatic Variables. (line  61)\n* list of changed prerequisites:         Automatic Variables. (line  51)\n* load average:                          Parallel.            (line  57)\n* loops in variable expansion:           Flavors.             (line  44)\n* lpr (shell command) <1>:               Empty Targets.       (line  25)\n* lpr (shell command):                   Wildcard Examples.   (line  21)\n* m2c <1>:                               Implicit Variables.  (line  81)\n* m2c:                                   Catalogue of Rules.  (line  74)\n* macro:                                 Using Variables.     (line  10)\n* make depend:                           Automatic Prerequisites.\n                                                              (line  37)\n* makefile:                              Introduction.        (line   7)\n* makefile name:                         Makefile Names.      (line   6)\n* makefile name, how to specify:         Makefile Names.      (line  30)\n* makefile rule parts:                   Rule Introduction.   (line   6)\n* makefile syntax, evaluating:           Eval Function.       (line   6)\n* makefile, and MAKEFILES variable:      MAKEFILES Variable.  (line   6)\n* makefile, conventions for:             Makefile Conventions.\n                                                              (line   6)\n* makefile, how make processes:          How Make Works.      (line   6)\n* makefile, how to write:                Makefiles.           (line   6)\n* makefile, including:                   Include.             (line   6)\n* makefile, overriding:                  Overriding Makefiles.\n                                                              (line   6)\n* makefile, parsing:                     Reading Makefiles.   (line   6)\n* makefile, remaking of:                 Remaking Makefiles.  (line   6)\n* makefile, simple:                      Simple Makefile.     (line   6)\n* makefiles, and MAKEFILE_LIST variable: MAKEFILE_LIST Variable.\n                                                              (line   6)\n* makefiles, and special variables:      Special Variables.   (line   6)\n* makeinfo <1>:                          Implicit Variables.  (line  88)\n* makeinfo:                              Catalogue of Rules.  (line 158)\n* match-anything rule:                   Match-Anything Rules.\n                                                              (line   6)\n* match-anything rule, used to override: Overriding Makefiles.\n                                                              (line  12)\n* missing features:                      Missing.             (line   6)\n* mistakes with wildcards:               Wildcard Pitfall.    (line   6)\n* modified variable reference:           Substitution Refs.   (line   6)\n* Modula-2, rule to compile:             Catalogue of Rules.  (line  74)\n* mostlyclean (standard target):         Goals.               (line  78)\n* multiple rules for one target:         Multiple Rules.      (line   6)\n* multiple rules for one target (::):    Double-Colon.        (line   6)\n* multiple targets:                      Multiple Targets.    (line   6)\n* multiple targets, in pattern rule:     Pattern Intro.       (line  49)\n* name of makefile:                      Makefile Names.      (line   6)\n* name of makefile, how to specify:      Makefile Names.      (line  30)\n* nested variable reference:             Computed Names.      (line   6)\n* newline, quoting, in commands:         Splitting Lines.     (line   6)\n* newline, quoting, in makefile:         Simple Makefile.     (line  40)\n* nondirectory part:                     File Name Functions. (line  27)\n* normal prerequisites:                  Prerequisite Types.  (line   6)\n* OBJ:                                   Variables Simplify.  (line  20)\n* obj:                                   Variables Simplify.  (line  20)\n* OBJECTS:                               Variables Simplify.  (line  20)\n* objects:                               Variables Simplify.  (line  14)\n* OBJS:                                  Variables Simplify.  (line  20)\n* objs:                                  Variables Simplify.  (line  20)\n* old-fashioned suffix rules:            Suffix Rules.        (line   6)\n* options:                               Options Summary.     (line   6)\n* options, and recursion:                Options/Recursion.   (line   6)\n* options, setting from environment:     Options/Recursion.   (line  81)\n* options, setting in makefiles:         Options/Recursion.   (line  81)\n* order of pattern rules:                Pattern Intro.       (line  57)\n* order-only prerequisites:              Prerequisite Types.  (line   6)\n* origin of variable:                    Origin Function.     (line   6)\n* overriding makefiles:                  Overriding Makefiles.\n                                                              (line   6)\n* overriding variables with arguments:   Overriding.          (line   6)\n* overriding with override:              Override Directive.  (line   6)\n* parallel execution:                    Parallel.            (line   6)\n* parallel execution, and archive update: Archive Pitfalls.   (line   6)\n* parallel execution, overriding:        Special Targets.     (line 135)\n* parts of makefile rule:                Rule Introduction.   (line   6)\n* Pascal, rule to compile:               Catalogue of Rules.  (line  45)\n* pattern rule:                          Pattern Intro.       (line   6)\n* pattern rule, expansion:               Reading Makefiles.   (line  62)\n* pattern rules, order of:               Pattern Intro.       (line  57)\n* pattern rules, static (not implicit):  Static Pattern.      (line   6)\n* pattern rules, static, syntax of:      Static Usage.        (line   6)\n* pattern-specific variables:            Pattern-specific.    (line   6)\n* pc <1>:                                Implicit Variables.  (line  84)\n* pc:                                    Catalogue of Rules.  (line  45)\n* phony targets:                         Phony Targets.       (line   6)\n* pitfalls of wildcards:                 Wildcard Pitfall.    (line   6)\n* portability:                           Features.            (line   6)\n* POSIX:                                 Overview.            (line  13)\n* POSIX.2:                               Options/Recursion.   (line  60)\n* post-installation commands:            Install Command Categories.\n                                                              (line   6)\n* pre-installation commands:             Install Command Categories.\n                                                              (line   6)\n* precious targets:                      Special Targets.     (line  29)\n* predefined rules and variables, printing: Options Summary.  (line 155)\n* prefix, adding:                        File Name Functions. (line  79)\n* prerequisite:                          Rules.               (line   6)\n* prerequisite pattern, implicit:        Pattern Intro.       (line  22)\n* prerequisite pattern, static (not implicit): Static Usage.  (line  30)\n* prerequisite types:                    Prerequisite Types.  (line   6)\n* prerequisite, expansion:               Reading Makefiles.   (line  62)\n* prerequisites:                         Rule Syntax.         (line  46)\n* prerequisites, and automatic variables: Automatic Variables.\n                                                              (line  17)\n* prerequisites, automatic generation <1>: Automatic Prerequisites.\n                                                              (line   6)\n* prerequisites, automatic generation:   Include.             (line  50)\n* prerequisites, introduction to:        Rule Introduction.   (line   8)\n* prerequisites, list of all:            Automatic Variables. (line  61)\n* prerequisites, list of changed:        Automatic Variables. (line  51)\n* prerequisites, normal:                 Prerequisite Types.  (line   6)\n* prerequisites, order-only:             Prerequisite Types.  (line   6)\n* prerequisites, varying (static pattern): Static Pattern.    (line   6)\n* preserving intermediate files:         Chained Rules.       (line  46)\n* preserving with .PRECIOUS <1>:         Chained Rules.       (line  56)\n* preserving with .PRECIOUS:             Special Targets.     (line  29)\n* preserving with .SECONDARY:            Special Targets.     (line  49)\n* print (standard target):               Goals.               (line  97)\n* print target <1>:                      Empty Targets.       (line  25)\n* print target:                          Wildcard Examples.   (line  21)\n* printing directories:                  -w Option.           (line   6)\n* printing messages:                     Make Control Functions.\n                                                              (line  43)\n* printing of commands:                  Echoing.             (line   6)\n* printing user warnings:                Make Control Functions.\n                                                              (line  35)\n* problems and bugs, reporting:          Bugs.                (line   6)\n* problems with wildcards:               Wildcard Pitfall.    (line   6)\n* processing a makefile:                 How Make Works.      (line   6)\n* question mode:                         Instead of Execution.\n                                                              (line  25)\n* quoting %, in patsubst:                Text Functions.      (line  26)\n* quoting %, in static pattern:          Static Usage.        (line  37)\n* quoting %, in vpath:                   Selective Search.    (line  38)\n* quoting newline, in commands:          Splitting Lines.     (line   6)\n* quoting newline, in makefile:          Simple Makefile.     (line  40)\n* Ratfor, rule to compile:               Catalogue of Rules.  (line  49)\n* RCS, rule to extract from:             Catalogue of Rules.  (line 164)\n* reading makefiles:                     Reading Makefiles.   (line   6)\n* README:                                Makefile Names.      (line   9)\n* realclean (standard target):           Goals.               (line  85)\n* realpath:                              File Name Functions. (line 114)\n* recompilation:                         Introduction.        (line  22)\n* recompilation, avoiding:               Avoiding Compilation.\n                                                              (line   6)\n* recording events with empty targets:   Empty Targets.       (line   6)\n* recursion:                             Recursion.           (line   6)\n* recursion, and -C:                     Options/Recursion.   (line  22)\n* recursion, and -f:                     Options/Recursion.   (line  22)\n* recursion, and -j:                     Options/Recursion.   (line  25)\n* recursion, and -o:                     Options/Recursion.   (line  22)\n* recursion, and -t:                     MAKE Variable.       (line  34)\n* recursion, and -w:                     -w Option.           (line  20)\n* recursion, and -W:                     Options/Recursion.   (line  22)\n* recursion, and command line variable definitions: Options/Recursion.\n                                                              (line  17)\n* recursion, and environment:            Variables/Recursion. (line   6)\n* recursion, and MAKE variable:          MAKE Variable.       (line   6)\n* recursion, and MAKEFILES variable:     MAKEFILES Variable.  (line  14)\n* recursion, and options:                Options/Recursion.   (line   6)\n* recursion, and printing directories:   -w Option.           (line   6)\n* recursion, and variables:              Variables/Recursion. (line   6)\n* recursion, level of:                   Variables/Recursion. (line 115)\n* recursive variable expansion <1>:      Flavors.             (line   6)\n* recursive variable expansion:          Using Variables.     (line   6)\n* recursively expanded variables:        Flavors.             (line   6)\n* reference to variables <1>:            Advanced.            (line   6)\n* reference to variables:                Reference.           (line   6)\n* relinking:                             How Make Works.      (line  46)\n* remaking makefiles:                    Remaking Makefiles.  (line   6)\n* removal of target files <1>:           Interrupts.          (line   6)\n* removal of target files:               Errors.              (line  64)\n* removing duplicate words:              Text Functions.      (line 155)\n* removing targets on failure:           Special Targets.     (line  68)\n* removing, to clean up:                 Cleanup.             (line   6)\n* reporting bugs:                        Bugs.                (line   6)\n* rm:                                    Implicit Variables.  (line 110)\n* rm (shell command) <1>:                Errors.              (line  27)\n* rm (shell command) <2>:                Phony Targets.       (line  20)\n* rm (shell command) <3>:                Wildcard Examples.   (line  12)\n* rm (shell command):                    Simple Makefile.     (line  83)\n* rule commands:                         Commands.            (line   6)\n* rule prerequisites:                    Rule Syntax.         (line  46)\n* rule syntax:                           Rule Syntax.         (line   6)\n* rule targets:                          Rule Syntax.         (line  18)\n* rule, double-colon (::):               Double-Colon.        (line   6)\n* rule, explicit, definition of:         Makefile Contents.   (line  10)\n* rule, how to write:                    Rules.               (line   6)\n* rule, implicit:                        Implicit Rules.      (line   6)\n* rule, implicit, and directory search:  Implicit/Search.     (line   6)\n* rule, implicit, and VPATH:             Implicit/Search.     (line   6)\n* rule, implicit, chains of:             Chained Rules.       (line   6)\n* rule, implicit, definition of:         Makefile Contents.   (line  16)\n* rule, implicit, how to use:            Using Implicit.      (line   6)\n* rule, implicit, introduction to:       make Deduces.        (line   6)\n* rule, implicit, predefined:            Catalogue of Rules.  (line   6)\n* rule, introduction to:                 Rule Introduction.   (line   6)\n* rule, multiple for one target:         Multiple Rules.      (line   6)\n* rule, no commands or prerequisites:    Force Targets.       (line   6)\n* rule, pattern:                         Pattern Intro.       (line   6)\n* rule, static pattern:                  Static Pattern.      (line   6)\n* rule, static pattern versus implicit:  Static versus Implicit.\n                                                              (line   6)\n* rule, with multiple targets:           Multiple Targets.    (line   6)\n* rules, and $:                          Rule Syntax.         (line  32)\n* s. (SCCS file prefix):                 Catalogue of Rules.  (line 173)\n* SCCS, rule to extract from:            Catalogue of Rules.  (line 173)\n* search algorithm, implicit rule:       Implicit Rule Search.\n                                                              (line   6)\n* search path for prerequisites (VPATH): Directory Search.    (line   6)\n* search path for prerequisites (VPATH), and implicit rules: Implicit/Search.\n                                                              (line   6)\n* search path for prerequisites (VPATH), and link libraries: Libraries/Search.\n                                                              (line   6)\n* searching for strings:                 Text Functions.      (line 103)\n* secondary expansion:                   Secondary Expansion. (line   6)\n* secondary expansion and explicit rules: Secondary Expansion.\n                                                              (line 106)\n* secondary expansion and implicit rules: Secondary Expansion.\n                                                              (line 146)\n* secondary expansion and static pattern rules: Secondary Expansion.\n                                                              (line 138)\n* secondary files:                       Chained Rules.       (line  46)\n* secondary targets:                     Special Targets.     (line  49)\n* sed (shell command):                   Automatic Prerequisites.\n                                                              (line  73)\n* selecting a word:                      Text Functions.      (line 159)\n* selecting word lists:                  Text Functions.      (line 168)\n* sequences of commands:                 Sequences.           (line   6)\n* setting options from environment:      Options/Recursion.   (line  81)\n* setting options in makefiles:          Options/Recursion.   (line  81)\n* setting variables:                     Setting.             (line   6)\n* several rules for one target:          Multiple Rules.      (line   6)\n* several targets in a rule:             Multiple Targets.    (line   6)\n* shar (standard target):                Goals.               (line 103)\n* shell command:                         Simple Makefile.     (line  72)\n* shell command, and directory search:   Commands/Search.     (line   6)\n* shell command, execution:              Execution.           (line   6)\n* shell command, function for:           Shell Function.      (line   6)\n* shell file name pattern (in include):  Include.             (line  13)\n* shell variables, setting in commands:  Execution.           (line  10)\n* shell wildcards (in include):          Include.             (line  13)\n* shell, choosing the:                   Choosing the Shell.  (line   6)\n* SHELL, exported value:                 Variables/Recursion. (line  23)\n* SHELL, import from environment:        Environment.         (line  37)\n* shell, in DOS and Windows:             Choosing the Shell.  (line  36)\n* SHELL, MS-DOS specifics:               Choosing the Shell.  (line  42)\n* SHELL, value of:                       Choosing the Shell.  (line   6)\n* signal:                                Interrupts.          (line   6)\n* silent operation:                      Echoing.             (line   6)\n* simple makefile:                       Simple Makefile.     (line   6)\n* simple variable expansion:             Using Variables.     (line   6)\n* simplifying with variables:            Variables Simplify.  (line   6)\n* simply expanded variables:             Flavors.             (line  56)\n* sorting words:                         Text Functions.      (line 146)\n* spaces, in variable values:            Flavors.             (line 103)\n* spaces, stripping:                     Text Functions.      (line  80)\n* special targets:                       Special Targets.     (line   6)\n* special variables:                     Special Variables.   (line   6)\n* specifying makefile name:              Makefile Names.      (line  30)\n* splitting commands:                    Splitting Lines.     (line   6)\n* standard input:                        Parallel.            (line  30)\n* standards conformance:                 Overview.            (line  13)\n* standards for makefiles:               Makefile Conventions.\n                                                              (line   6)\n* static pattern rule:                   Static Pattern.      (line   6)\n* static pattern rule, syntax of:        Static Usage.        (line   6)\n* static pattern rule, versus implicit:  Static versus Implicit.\n                                                              (line   6)\n* static pattern rules, secondary expansion of: Secondary Expansion.\n                                                              (line 138)\n* stem <1>:                              Pattern Match.       (line   6)\n* stem:                                  Static Usage.        (line  17)\n* stem, variable for:                    Automatic Variables. (line  77)\n* stopping make:                         Make Control Functions.\n                                                              (line  11)\n* strings, searching for:                Text Functions.      (line 103)\n* stripping whitespace:                  Text Functions.      (line  80)\n* sub-make:                              Variables/Recursion. (line   6)\n* subdirectories, recursion for:         Recursion.           (line   6)\n* substitution variable reference:       Substitution Refs.   (line   6)\n* suffix rule:                           Suffix Rules.        (line   6)\n* suffix rule, for archive:              Archive Suffix Rules.\n                                                              (line   6)\n* suffix, adding:                        File Name Functions. (line  68)\n* suffix, function to find:              File Name Functions. (line  43)\n* suffix, substituting in variables:     Substitution Refs.   (line   6)\n* switches:                              Options Summary.     (line   6)\n* symbol directories, updating archive:  Archive Symbols.     (line   6)\n* syntax of commands:                    Command Syntax.      (line   6)\n* syntax of rules:                       Rule Syntax.         (line   6)\n* tab character (in commands):           Rule Syntax.         (line  26)\n* tabs in rules:                         Rule Introduction.   (line  21)\n* TAGS (standard target):                Goals.               (line 111)\n* tangle <1>:                            Implicit Variables.  (line 104)\n* tangle:                                Catalogue of Rules.  (line 151)\n* tar (standard target):                 Goals.               (line 100)\n* target:                                Rules.               (line   6)\n* target pattern, implicit:              Pattern Intro.       (line   9)\n* target pattern, static (not implicit): Static Usage.        (line  17)\n* target, deleting on error:             Errors.              (line  64)\n* target, deleting on interrupt:         Interrupts.          (line   6)\n* target, expansion:                     Reading Makefiles.   (line  62)\n* target, multiple in pattern rule:      Pattern Intro.       (line  49)\n* target, multiple rules for one:        Multiple Rules.      (line   6)\n* target, touching:                      Instead of Execution.\n                                                              (line  19)\n* target-specific variables:             Target-specific.     (line   6)\n* targets:                               Rule Syntax.         (line  18)\n* targets without a file:                Phony Targets.       (line   6)\n* targets, built-in special:             Special Targets.     (line   6)\n* targets, empty:                        Empty Targets.       (line   6)\n* targets, force:                        Force Targets.       (line   6)\n* targets, introduction to:              Rule Introduction.   (line   8)\n* targets, multiple:                     Multiple Targets.    (line   6)\n* targets, phony:                        Phony Targets.       (line   6)\n* terminal rule:                         Match-Anything Rules.\n                                                              (line   6)\n* test (standard target):                Goals.               (line 115)\n* testing compilation:                   Testing.             (line   6)\n* tex <1>:                               Implicit Variables.  (line  91)\n* tex:                                   Catalogue of Rules.  (line 151)\n* TeX, rule to run:                      Catalogue of Rules.  (line 151)\n* texi2dvi <1>:                          Implicit Variables.  (line  95)\n* texi2dvi:                              Catalogue of Rules.  (line 158)\n* Texinfo, rule to format:               Catalogue of Rules.  (line 158)\n* tilde (~):                             Wildcards.           (line  11)\n* touch (shell command) <1>:             Empty Targets.       (line  25)\n* touch (shell command):                 Wildcard Examples.   (line  21)\n* touching files:                        Instead of Execution.\n                                                              (line  19)\n* traditional directory search (GPATH):  Search Algorithm.    (line  42)\n* types of prerequisites:                Prerequisite Types.  (line   6)\n* undefined variables, warning message:  Options Summary.     (line 251)\n* updating archive symbol directories:   Archive Symbols.     (line   6)\n* updating makefiles:                    Remaking Makefiles.  (line   6)\n* user defined functions:                Call Function.       (line   6)\n* value:                                 Using Variables.     (line   6)\n* value, how a variable gets it:         Values.              (line   6)\n* variable:                              Using Variables.     (line   6)\n* variable definition:                   Makefile Contents.   (line  22)\n* variable references in commands:       Variables in Commands.\n                                                              (line   6)\n* variables:                             Variables Simplify.  (line   6)\n* variables, $ in name:                  Computed Names.      (line   6)\n* variables, and implicit rule:          Automatic Variables. (line   6)\n* variables, appending to:               Appending.           (line   6)\n* variables, automatic:                  Automatic Variables. (line   6)\n* variables, command line:               Overriding.          (line   6)\n* variables, command line, and recursion: Options/Recursion.  (line  17)\n* variables, computed names:             Computed Names.      (line   6)\n* variables, conditional assignment:     Flavors.             (line 129)\n* variables, defining verbatim:          Defining.            (line   6)\n* variables, environment <1>:            Environment.         (line   6)\n* variables, environment:                Variables/Recursion. (line   6)\n* variables, exporting:                  Variables/Recursion. (line   6)\n* variables, flavor of:                  Flavor Function.     (line   6)\n* variables, flavors:                    Flavors.             (line   6)\n* variables, how they get their values:  Values.              (line   6)\n* variables, how to reference:           Reference.           (line   6)\n* variables, loops in expansion:         Flavors.             (line  44)\n* variables, modified reference:         Substitution Refs.   (line   6)\n* variables, nested references:          Computed Names.      (line   6)\n* variables, origin of:                  Origin Function.     (line   6)\n* variables, overriding:                 Override Directive.  (line   6)\n* variables, overriding with arguments:  Overriding.          (line   6)\n* variables, pattern-specific:           Pattern-specific.    (line   6)\n* variables, recursively expanded:       Flavors.             (line   6)\n* variables, setting:                    Setting.             (line   6)\n* variables, simply expanded:            Flavors.             (line  56)\n* variables, spaces in values:           Flavors.             (line 103)\n* variables, substituting suffix in:     Substitution Refs.   (line   6)\n* variables, substitution reference:     Substitution Refs.   (line   6)\n* variables, target-specific:            Target-specific.     (line   6)\n* variables, unexpanded value:           Value Function.      (line   6)\n* variables, warning for undefined:      Options Summary.     (line 251)\n* varying prerequisites:                 Static Pattern.      (line   6)\n* verbatim variable definition:          Defining.            (line   6)\n* vpath:                                 Directory Search.    (line   6)\n* VPATH, and implicit rules:             Implicit/Search.     (line   6)\n* VPATH, and link libraries:             Libraries/Search.    (line   6)\n* warnings, printing:                    Make Control Functions.\n                                                              (line  35)\n* weave <1>:                             Implicit Variables.  (line  98)\n* weave:                                 Catalogue of Rules.  (line 151)\n* Web, rule to run:                      Catalogue of Rules.  (line 151)\n* what if:                               Instead of Execution.\n                                                              (line  33)\n* whitespace, in variable values:        Flavors.             (line 103)\n* whitespace, stripping:                 Text Functions.      (line  80)\n* wildcard:                              Wildcards.           (line   6)\n* wildcard pitfalls:                     Wildcard Pitfall.    (line   6)\n* wildcard, function:                    File Name Functions. (line 107)\n* wildcard, in archive member:           Archive Members.     (line  36)\n* wildcard, in include:                  Include.             (line  13)\n* wildcards and MS-DOS/MS-Windows backslashes: Wildcard Pitfall.\n                                                              (line  31)\n* Windows, choosing a shell in:          Choosing the Shell.  (line  36)\n* word, selecting a:                     Text Functions.      (line 159)\n* words, extracting first:               Text Functions.      (line 184)\n* words, extracting last:                Text Functions.      (line 197)\n* words, filtering:                      Text Functions.      (line 114)\n* words, filtering out:                  Text Functions.      (line 132)\n* words, finding number:                 Text Functions.      (line 180)\n* words, iterating over:                 Foreach Function.    (line   6)\n* words, joining lists:                  File Name Functions. (line  90)\n* words, removing duplicates:            Text Functions.      (line 155)\n* words, selecting lists of:             Text Functions.      (line 168)\n* writing rule commands:                 Commands.            (line   6)\n* writing rules:                         Rules.               (line   6)\n* yacc <1>:                              Implicit Variables.  (line  75)\n* yacc <2>:                              Catalogue of Rules.  (line 120)\n* yacc:                                  Sequences.           (line  18)\n* Yacc, rule to run:                     Catalogue of Rules.  (line 120)\n* ~ (tilde):                             Wildcards.           (line  11)\n\n\u001f\nFile: make.info,  Node: Name Index,  Prev: Concept Index,  Up: Top\n\nIndex of Functions, Variables, & Directives\n*******************************************\n\n\u0000\b[index\u0000\b]\n* Menu:\n\n* $%:                                    Automatic Variables. (line  37)\n* $(%D):                                 Automatic Variables. (line 129)\n* $(%F):                                 Automatic Variables. (line 130)\n* $(*D):                                 Automatic Variables. (line 124)\n* $(*F):                                 Automatic Variables. (line 125)\n* $(+D):                                 Automatic Variables. (line 147)\n* $(+F):                                 Automatic Variables. (line 148)\n* $(<D):                                 Automatic Variables. (line 137)\n* $(<F):                                 Automatic Variables. (line 138)\n* $(?D):                                 Automatic Variables. (line 153)\n* $(?F):                                 Automatic Variables. (line 154)\n* $(@D):                                 Automatic Variables. (line 113)\n* $(@F):                                 Automatic Variables. (line 119)\n* $(^D):                                 Automatic Variables. (line 142)\n* $(^F):                                 Automatic Variables. (line 143)\n* $*:                                    Automatic Variables. (line  73)\n* $*, and static pattern:                Static Usage.        (line  81)\n* $+:                                    Automatic Variables. (line  63)\n* $<:                                    Automatic Variables. (line  43)\n* $?:                                    Automatic Variables. (line  48)\n* $@:                                    Automatic Variables. (line  30)\n* $^:                                    Automatic Variables. (line  53)\n* $|:                                    Automatic Variables. (line  69)\n* % (automatic variable):                Automatic Variables. (line  37)\n* %D (automatic variable):               Automatic Variables. (line 129)\n* %F (automatic variable):               Automatic Variables. (line 130)\n* * (automatic variable):                Automatic Variables. (line  73)\n* * (automatic variable), unsupported bizarre usage: Missing. (line  44)\n* *D (automatic variable):               Automatic Variables. (line 124)\n* *F (automatic variable):               Automatic Variables. (line 125)\n* + (automatic variable):                Automatic Variables. (line  63)\n* +D (automatic variable):               Automatic Variables. (line 147)\n* +F (automatic variable):               Automatic Variables. (line 148)\n* .DEFAULT <1>:                          Last Resort.         (line  23)\n* .DEFAULT:                              Special Targets.     (line  20)\n* .DEFAULT, and empty commands:          Empty Commands.      (line  16)\n* .DEFAULT_GOAL (define default goal):   Special Variables.   (line  10)\n* .DELETE_ON_ERROR <1>:                  Errors.              (line  64)\n* .DELETE_ON_ERROR:                      Special Targets.     (line  67)\n* .EXPORT_ALL_VARIABLES <1>:             Variables/Recursion. (line  99)\n* .EXPORT_ALL_VARIABLES:                 Special Targets.     (line 129)\n* .FEATURES (list of supported features): Special Variables.  (line  65)\n* .IGNORE <1>:                           Errors.              (line  30)\n* .IGNORE:                               Special Targets.     (line  74)\n* .INCLUDE_DIRS (list of include directories): Special Variables.\n                                                              (line  98)\n* .INTERMEDIATE:                         Special Targets.     (line  43)\n* .LIBPATTERNS:                          Libraries/Search.    (line   6)\n* .LOW_RESOLUTION_TIME:                  Special Targets.     (line  86)\n* .NOTPARALLEL:                          Special Targets.     (line 134)\n* .PHONY <1>:                            Special Targets.     (line   8)\n* .PHONY:                                Phony Targets.       (line  22)\n* .POSIX:                                Options/Recursion.   (line  60)\n* .PRECIOUS <1>:                         Interrupts.          (line  22)\n* .PRECIOUS:                             Special Targets.     (line  28)\n* .SECONDARY:                            Special Targets.     (line  48)\n* .SECONDEXPANSION <1>:                  Special Targets.     (line  57)\n* .SECONDEXPANSION:                      Secondary Expansion. (line   6)\n* .SILENT <1>:                           Echoing.             (line  24)\n* .SILENT:                               Special Targets.     (line 116)\n* .SUFFIXES <1>:                         Suffix Rules.        (line  61)\n* .SUFFIXES:                             Special Targets.     (line  15)\n* .VARIABLES (list of variables):        Special Variables.   (line  56)\n* /usr/gnu/include:                      Include.             (line  52)\n* /usr/include:                          Include.             (line  52)\n* /usr/local/include:                    Include.             (line  52)\n* < (automatic variable):                Automatic Variables. (line  43)\n* <D (automatic variable):               Automatic Variables. (line 137)\n* <F (automatic variable):               Automatic Variables. (line 138)\n* ? (automatic variable):                Automatic Variables. (line  48)\n* ?D (automatic variable):               Automatic Variables. (line 153)\n* ?F (automatic variable):               Automatic Variables. (line 154)\n* @ (automatic variable):                Automatic Variables. (line  30)\n* @D (automatic variable):               Automatic Variables. (line 113)\n* @F (automatic variable):               Automatic Variables. (line 119)\n* ^ (automatic variable):                Automatic Variables. (line  53)\n* ^D (automatic variable):               Automatic Variables. (line 142)\n* ^F (automatic variable):               Automatic Variables. (line 143)\n* abspath:                               File Name Functions. (line 121)\n* addprefix:                             File Name Functions. (line  79)\n* addsuffix:                             File Name Functions. (line  68)\n* and:                                   Conditional Functions.\n                                                              (line  45)\n* AR:                                    Implicit Variables.  (line  41)\n* ARFLAGS:                               Implicit Variables.  (line 117)\n* AS:                                    Implicit Variables.  (line  44)\n* ASFLAGS:                               Implicit Variables.  (line 120)\n* basename:                              File Name Functions. (line  57)\n* bindir:                                Directory Variables. (line  53)\n* call:                                  Call Function.       (line   6)\n* CC:                                    Implicit Variables.  (line  47)\n* CFLAGS:                                Implicit Variables.  (line 124)\n* CO:                                    Implicit Variables.  (line  50)\n* COFLAGS:                               Implicit Variables.  (line 130)\n* COMSPEC:                               Choosing the Shell.  (line  39)\n* CPP:                                   Implicit Variables.  (line  59)\n* CPPFLAGS:                              Implicit Variables.  (line 133)\n* CTANGLE:                               Implicit Variables.  (line 107)\n* CURDIR:                                Recursion.           (line  28)\n* CWEAVE:                                Implicit Variables.  (line 101)\n* CXX:                                   Implicit Variables.  (line  53)\n* CXXFLAGS:                              Implicit Variables.  (line 127)\n* define:                                Defining.            (line   6)\n* dir:                                   File Name Functions. (line  17)\n* else:                                  Conditional Syntax.  (line   6)\n* endef:                                 Defining.            (line   6)\n* endif:                                 Conditional Syntax.  (line   6)\n* error:                                 Make Control Functions.\n                                                              (line  11)\n* eval:                                  Eval Function.       (line   6)\n* exec_prefix:                           Directory Variables. (line  35)\n* export:                                Variables/Recursion. (line  40)\n* FC:                                    Implicit Variables.  (line  63)\n* FFLAGS:                                Implicit Variables.  (line 137)\n* filter:                                Text Functions.      (line 114)\n* filter-out:                            Text Functions.      (line 132)\n* findstring:                            Text Functions.      (line 103)\n* firstword:                             Text Functions.      (line 184)\n* flavor:                                Flavor Function.     (line   6)\n* foreach:                               Foreach Function.    (line   6)\n* GET:                                   Implicit Variables.  (line  67)\n* GFLAGS:                                Implicit Variables.  (line 140)\n* GNUmakefile:                           Makefile Names.      (line   7)\n* GPATH:                                 Search Algorithm.    (line  48)\n* if:                                    Conditional Functions.\n                                                              (line   6)\n* ifdef:                                 Conditional Syntax.  (line   6)\n* ifeq:                                  Conditional Syntax.  (line   6)\n* ifndef:                                Conditional Syntax.  (line   6)\n* ifneq:                                 Conditional Syntax.  (line   6)\n* include:                               Include.             (line   6)\n* info:                                  Make Control Functions.\n                                                              (line  43)\n* join:                                  File Name Functions. (line  90)\n* lastword:                              Text Functions.      (line 197)\n* LDFLAGS:                               Implicit Variables.  (line 143)\n* LEX:                                   Implicit Variables.  (line  70)\n* LFLAGS:                                Implicit Variables.  (line 147)\n* libexecdir:                            Directory Variables. (line  66)\n* LINT:                                  Implicit Variables.  (line  78)\n* LINTFLAGS:                             Implicit Variables.  (line 159)\n* M2C:                                   Implicit Variables.  (line  81)\n* MAKE <1>:                              Flavors.             (line  84)\n* MAKE:                                  MAKE Variable.       (line   6)\n* MAKE_RESTARTS (number of times make has restarted): Special Variables.\n                                                              (line  49)\n* MAKE_VERSION:                          Features.            (line 197)\n* MAKECMDGOALS:                          Goals.               (line  30)\n* makefile:                              Makefile Names.      (line   7)\n* Makefile:                              Makefile Names.      (line   7)\n* MAKEFILE_LIST:                         MAKEFILE_LIST Variable.\n                                                              (line   6)\n* MAKEFILES <1>:                         Variables/Recursion. (line 127)\n* MAKEFILES:                             MAKEFILES Variable.  (line   6)\n* MAKEFLAGS:                             Options/Recursion.   (line   6)\n* MAKEINFO:                              Implicit Variables.  (line  87)\n* MAKELEVEL <1>:                         Flavors.             (line  84)\n* MAKELEVEL:                             Variables/Recursion. (line 115)\n* MAKEOVERRIDES:                         Options/Recursion.   (line  49)\n* MAKESHELL (MS-DOS alternative to SHELL): Choosing the Shell.\n                                                              (line  25)\n* MFLAGS:                                Options/Recursion.   (line  65)\n* notdir:                                File Name Functions. (line  27)\n* or:                                    Conditional Functions.\n                                                              (line  37)\n* origin:                                Origin Function.     (line   6)\n* OUTPUT_OPTION:                         Catalogue of Rules.  (line 202)\n* override:                              Override Directive.  (line   6)\n* patsubst <1>:                          Text Functions.      (line  18)\n* patsubst:                              Substitution Refs.   (line  28)\n* PC:                                    Implicit Variables.  (line  84)\n* PFLAGS:                                Implicit Variables.  (line 153)\n* prefix:                                Directory Variables. (line  25)\n* realpath:                              File Name Functions. (line 114)\n* RFLAGS:                                Implicit Variables.  (line 156)\n* RM:                                    Implicit Variables.  (line 110)\n* sbindir:                               Directory Variables. (line  59)\n* shell:                                 Shell Function.      (line   6)\n* SHELL:                                 Choosing the Shell.  (line   6)\n* SHELL (command execution):             Execution.           (line   6)\n* sort:                                  Text Functions.      (line 146)\n* strip:                                 Text Functions.      (line  80)\n* subst <1>:                             Text Functions.      (line   9)\n* subst:                                 Multiple Targets.    (line  28)\n* suffix:                                File Name Functions. (line  43)\n* SUFFIXES:                              Suffix Rules.        (line  81)\n* TANGLE:                                Implicit Variables.  (line 104)\n* TEX:                                   Implicit Variables.  (line  91)\n* TEXI2DVI:                              Implicit Variables.  (line  94)\n* unexport:                              Variables/Recursion. (line  45)\n* value:                                 Value Function.      (line   6)\n* vpath:                                 Selective Search.    (line   6)\n* VPATH:                                 General Search.      (line   6)\n* vpath:                                 Directory Search.    (line   6)\n* VPATH:                                 Directory Search.    (line   6)\n* warning:                               Make Control Functions.\n                                                              (line  35)\n* WEAVE:                                 Implicit Variables.  (line  98)\n* wildcard <1>:                          File Name Functions. (line 107)\n* wildcard:                              Wildcard Function.   (line   6)\n* word:                                  Text Functions.      (line 159)\n* wordlist:                              Text Functions.      (line 168)\n* words:                                 Text Functions.      (line 180)\n* YACC:                                  Implicit Variables.  (line  74)\n* YFLAGS:                                Implicit Variables.  (line 150)\n* | (automatic variable):                Automatic Variables. (line  69)\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/make.texi",
    "content": "\\input texinfo                @c -*- Texinfo -*-\n@c %**start of header\n@setfilename make.info\n\n@include version.texi\n@set EDITION 0.70\n@set RCSID $Id: make.texi,v 1.45 2006/04/01 06:36:40 psmith Exp $\n\n@settitle GNU @code{make}\n@setchapternewpage odd\n@c Combine the variable and function indices:\n@syncodeindex vr fn\n@c Combine the program and concept indices:\n@syncodeindex pg cp\n@c FSF publishers: format makebook.texi instead of using this file directly.\n@c ISBN provided by Lisa M. Opus Goldstein <opus@gnu.org>, 5 May 2004\n@set ISBN 1-882114-83-5\n@c %**end of header\n\n@copying\nThis file documents the GNU @code{make} utility, which determines\nautomatically which pieces of a large program need to be recompiled,\nand issues the commands to recompile them.\n\nThis is Edition @value{EDITION}, last updated @value{UPDATED},\nof @cite{The GNU Make Manual}, for GNU @code{make} version @value{VERSION}.\n\nCopyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,\n1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006\nFree Software Foundation, Inc.\n\n@quotation\nPermission is granted to copy, distribute and/or modify this document\nunder the terms of the GNU Free Documentation License, Version 1.2 or\nany later version published by the Free Software Foundation; with no\nInvariant Sections, with the Front-Cover Texts being ``A GNU Manual,''\nand with the Back-Cover Texts as in (a) below.  A copy of the\nlicense is included in the section entitled ``GNU Free Documentation\nLicense.''\n\n(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify\nthis GNU Manual, like GNU software.  Copies published by the Free\nSoftware Foundation raise funds for GNU development.''\n@end quotation\n@end copying\n\n@c finalout\n\n@c ISPELL CHECK: done, 10 June 1993 --roland\n@c ISPELL CHECK: done, 2000-06-25 --Martin Buchholz\n\n\n@dircategory GNU Packages\n@direntry\n* Make: (make).            Remake files automatically.\n@end direntry\n\n@iftex\n@shorttitlepage GNU Make\n@end iftex\n@titlepage\n@title GNU Make\n@subtitle A Program for Directing Recompilation\n@subtitle GNU @code{make} Version @value{VERSION}\n@subtitle @value{UPDATED-MONTH}\n@author Richard M. Stallman, Roland McGrath, Paul D. Smith\n@page\n@vskip 0pt plus 1filll\n@insertcopying\n@sp 2\nPublished by the Free Software Foundation @*\n51 Franklin St. -- Fifth Floor @*\nBoston, MA 02110-1301 USA @*\nISBN @value{ISBN} @*\n@sp 2\nCover art by Etienne Suvasa.\n@end titlepage\n\n@summarycontents\n@contents\n\n@ifnottex\n@node Top, Overview, (dir), (dir)\n@top GNU @code{make}\n\n@insertcopying\n@end ifnottex\n\n@menu\n* Overview::                    Overview of @code{make}.\n* Introduction::                An introduction to @code{make}.\n* Makefiles::                   Makefiles tell @code{make} what to do.\n* Rules::                       Rules describe when a file must be remade.\n* Commands::                    Commands say how to remake a file.\n* Using Variables::             You can use variables to avoid repetition.\n* Conditionals::                Use or ignore parts of the makefile based\n                                  on the values of variables.\n* Functions::                   Many powerful ways to manipulate text.\n* Invoking make: Running.       How to invoke @code{make} on the command line.\n* Implicit Rules::              Use implicit rules to treat many files alike,\n                                  based on their file names.\n* Archives::                    How @code{make} can update library archives.\n* Features::                    Features GNU @code{make} has over other @code{make}s.\n* Missing::                     What GNU @code{make} lacks from other @code{make}s.\n* Makefile Conventions::        Conventions for writing makefiles for\n                                  GNU programs.\n* Quick Reference::             A quick reference for experienced users.\n* Error Messages::              A list of common errors generated by @code{make}.\n* Complex Makefile::            A real example of a straightforward,\n                                  but nontrivial, makefile.\n\n* GNU Free Documentation License::  License for copying this manual\n* Concept Index::               Index of Concepts\n* Name Index::                  Index of Functions, Variables, & Directives\n\n@detailmenu\n --- The Detailed Node Listing ---\n\nOverview of @code{make}\n\n* Preparing::                   Preparing and Running Make\n* Reading::                     On Reading this Text\n* Bugs::                        Problems and Bugs\n\nAn Introduction to Makefiles\n\n* Rule Introduction::           What a rule looks like.\n* Simple Makefile::             A Simple Makefile\n* How Make Works::              How @code{make} Processes This Makefile\n* Variables Simplify::          Variables Make Makefiles Simpler\n* make Deduces::                Letting @code{make} Deduce the Commands\n* Combine By Prerequisite::     Another Style of Makefile\n* Cleanup::                     Rules for Cleaning the Directory\n\nWriting Makefiles\n\n* Makefile Contents::           What makefiles contain.\n* Makefile Names::              How to name your makefile.\n* Include::                     How one makefile can use another makefile.\n* MAKEFILES Variable::          The environment can specify extra makefiles.\n* MAKEFILE_LIST Variable::      Discover which makefiles have been read.\n* Special Variables::           Other special variables.\n* Remaking Makefiles::          How makefiles get remade.\n* Overriding Makefiles::        How to override part of one makefile\n                                  with another makefile.\n* Reading Makefiles::           How makefiles are parsed.\n* Secondary Expansion::         How and when secondary expansion is performed.\n\nWriting Rules\n\n* Rule Example::                An example explained.\n* Rule Syntax::                 General syntax explained.\n* Prerequisite Types::          There are two types of prerequisites.\n* Wildcards::                   Using wildcard characters such as `*'.\n* Directory Search::            Searching other directories for source files.\n* Phony Targets::               Using a target that is not a real file's name.\n* Force Targets::               You can use a target without commands\n                                  or prerequisites to mark other targets\n                                  as phony.\n* Empty Targets::               When only the date matters and the\n                                  files are empty.\n* Special Targets::             Targets with special built-in meanings.\n* Multiple Targets::            When to make use of several targets in a rule.\n* Multiple Rules::              How to use several rules with the same target.\n* Static Pattern::              Static pattern rules apply to multiple targets\n                                  and can vary the prerequisites according to\n                                  the target name.\n* Double-Colon::                How to use a special kind of rule to allow\n                                  several independent rules for one target.\n* Automatic Prerequisites::     How to automatically generate rules giving\n                                  prerequisites from source files themselves.\n\nUsing Wildcard Characters in File Names\n\n* Wildcard Examples::           Several examples\n* Wildcard Pitfall::            Problems to avoid.\n* Wildcard Function::           How to cause wildcard expansion where\n                                  it does not normally take place.\n\nSearching Directories for Prerequisites\n\n* General Search::              Specifying a search path that applies\n                                  to every prerequisite.\n* Selective Search::            Specifying a search path\n                                  for a specified class of names.\n* Search Algorithm::            When and how search paths are applied.\n* Commands/Search::             How to write shell commands that work together\n                                  with search paths.\n* Implicit/Search::             How search paths affect implicit rules.\n* Libraries/Search::            Directory search for link libraries.\n\nStatic Pattern Rules\n\n* Static Usage::                The syntax of static pattern rules.\n* Static versus Implicit::      When are they better than implicit rules?\n\nWriting the Commands in Rules\n\n* Command Syntax::              Command syntax features and pitfalls.\n* Echoing::                     How to control when commands are echoed.\n* Execution::                   How commands are executed.\n* Parallel::                    How commands can be executed in parallel.\n* Errors::                      What happens after a command execution error.\n* Interrupts::                  What happens when a command is interrupted.\n* Recursion::                   Invoking @code{make} from makefiles.\n* Sequences::                   Defining canned sequences of commands.\n* Empty Commands::              Defining useful, do-nothing commands.\n\nCommand Syntax\n\n* Splitting Lines::             Breaking long command lines for readability.\n* Variables in Commands::       Using @code{make} variables in commands.\n\nCommand Execution\n\n* Choosing the Shell::          How @code{make} chooses the shell used\n                                  to run commands.\n\nRecursive Use of @code{make}\n\n* MAKE Variable::               The special effects of using @samp{$(MAKE)}.\n* Variables/Recursion::         How to communicate variables to a sub-@code{make}.\n* Options/Recursion::           How to communicate options to a sub-@code{make}.\n* -w Option::                   How the @samp{-w} or @samp{--print-directory} option\n                                  helps debug use of recursive @code{make} commands.\n\nHow to Use Variables\n\n* Reference::                   How to use the value of a variable.\n* Flavors::                     Variables come in two flavors.\n* Advanced::                    Advanced features for referencing a variable.\n* Values::                      All the ways variables get their values.\n* Setting::                     How to set a variable in the makefile.\n* Appending::                   How to append more text to the old value\n                                  of a variable.\n* Override Directive::          How to set a variable in the makefile even if\n                                  the user has set it with a command argument.\n* Defining::                    An alternate way to set a variable\n                                  to a verbatim string.\n* Environment::                 Variable values can come from the environment.\n* Target-specific::             Variable values can be defined on a per-target\n                                  basis.\n* Pattern-specific::            Target-specific variable values can be applied\n                                  to a group of targets that match a pattern.\n\nAdvanced Features for Reference to Variables\n\n* Substitution Refs::           Referencing a variable with\n                                  substitutions on the value.\n* Computed Names::              Computing the name of the variable to refer to.\n\nConditional Parts of Makefiles\n\n* Conditional Example::         Example of a conditional\n* Conditional Syntax::          The syntax of conditionals.\n* Testing Flags::               Conditionals that test flags.\n\nFunctions for Transforming Text\n\n* Syntax of Functions::         How to write a function call.\n* Text Functions::              General-purpose text manipulation functions.\n* File Name Functions::         Functions for manipulating file names.\n* Conditional Functions::       Functions that implement conditions.\n* Foreach Function::            Repeat some text with controlled variation.\n* Call Function::               Expand a user-defined function.\n* Value Function::              Return the un-expanded value of a variable.\n* Eval Function::               Evaluate the arguments as makefile syntax.\n* Origin Function::             Find where a variable got its value.\n* Flavor Function::             Find out the flavor of a variable.\n* Shell Function::              Substitute the output of a shell command.\n* Make Control Functions::      Functions that control how make runs.\n\nHow to Run @code{make}\n\n* Makefile Arguments::          How to specify which makefile to use.\n* Goals::                       How to use goal arguments to specify which\n                                  parts of the makefile to use.\n* Instead of Execution::        How to use mode flags to specify what\n                                  kind of thing to do with the commands\n                                  in the makefile other than simply\n                                  execute them.\n* Avoiding Compilation::        How to avoid recompiling certain files.\n* Overriding::                  How to override a variable to specify\n                                  an alternate compiler and other things.\n* Testing::                     How to proceed past some errors, to\n                                  test compilation.\n* Options Summary::             Summary of Options\n\nUsing Implicit Rules\n\n* Using Implicit::              How to use an existing implicit rule\n                                  to get the commands for updating a file.\n* Catalogue of Rules::          A list of built-in implicit rules.\n* Implicit Variables::          How to change what predefined rules do.\n* Chained Rules::               How to use a chain of implicit rules.\n* Pattern Rules::               How to define new implicit rules.\n* Last Resort::                 How to define commands for rules which\n                                  cannot find any.\n* Suffix Rules::                The old-fashioned style of implicit rule.\n* Implicit Rule Search::        The precise algorithm for applying\n                                  implicit rules.\n\nDefining and Redefining Pattern Rules\n\n* Pattern Intro::               An introduction to pattern rules.\n* Pattern Examples::            Examples of pattern rules.\n* Automatic Variables::         How to use automatic variables in the\n                                  commands of implicit rules.\n* Pattern Match::               How patterns match.\n* Match-Anything Rules::        Precautions you should take prior to\n                                  defining rules that can match any\n                                  target file whatever.\n* Canceling Rules::             How to override or cancel built-in rules.\n\nUsing @code{make} to Update Archive Files\n\n* Archive Members::             Archive members as targets.\n* Archive Update::              The implicit rule for archive member targets.\n* Archive Pitfalls::            Dangers to watch out for when using archives.\n* Archive Suffix Rules::        You can write a special kind of suffix rule\n                                  for updating archives.\n\nImplicit Rule for Archive Member Targets\n\n* Archive Symbols::             How to update archive symbol directories.\n\n@end detailmenu\n@end menu\n\n@node Overview, Introduction, Top, Top\n@comment  node-name,  next,  previous,  up\n@chapter Overview of @code{make}\n\nThe @code{make} utility automatically determines which pieces of a large\nprogram need to be recompiled, and issues commands to recompile them.\nThis manual describes GNU @code{make}, which was implemented by Richard\nStallman and Roland McGrath.  Development since Version 3.76 has been\nhandled by Paul D. Smith.\n\nGNU @code{make} conforms to section 6.2 of @cite{IEEE Standard\n1003.2-1992} (POSIX.2).\n@cindex POSIX\n@cindex IEEE Standard 1003.2\n@cindex standards conformance\n\nOur examples show C programs, since they are most common, but you can use\n@code{make} with any programming language whose compiler can be run with a\nshell command.  Indeed, @code{make} is not limited to programs.  You can\nuse it to describe any task where some files must be updated automatically\nfrom others whenever the others change.\n\n@menu\n* Preparing::                   Preparing and Running Make\n* Reading::                     On Reading this Text\n* Bugs::                        Problems and Bugs\n@end menu\n\n@node Preparing, Reading, Overview, Overview\n@ifnottex\n@heading Preparing and Running Make\n@end ifnottex\n\nTo prepare to use @code{make}, you must write a file called\nthe @dfn{makefile} that describes the relationships among files\nin your program and provides commands for updating each file.\nIn a program, typically, the executable file is updated from object\nfiles, which are in turn made by compiling source files.@refill\n\nOnce a suitable makefile exists, each time you change some source files,\nthis simple shell command:\n\n@example\nmake\n@end example\n\n@noindent\nsuffices to perform all necessary recompilations.  The @code{make} program\nuses the makefile data base and the last-modification times of the files to\ndecide which of the files need to be updated.  For each of those files, it\nissues the commands recorded in the data base.\n\nYou can provide command line arguments to @code{make} to control which\nfiles should be recompiled, or how.  @xref{Running, ,How to Run\n@code{make}}.\n\n@node Reading, Bugs, Preparing, Overview\n@section How to Read This Manual\n\nIf you are new to @code{make}, or are looking for a general\nintroduction, read the first few sections of each chapter, skipping the\nlater sections.  In each chapter, the first few sections contain\nintroductory or general information and the later sections contain\nspecialized or technical information.\n@ifnottex\nThe exception is the second chapter, @ref{Introduction, ,An\nIntroduction to Makefiles}, all of which is introductory.\n@end ifnottex\n@iftex\nThe exception is @ref{Introduction, ,An Introduction to Makefiles},\nall of which is introductory.\n@end iftex\n\nIf you are familiar with other @code{make} programs, see @ref{Features,\n,Features of GNU @code{make}}, which lists the enhancements GNU\n@code{make} has, and @ref{Missing, ,Incompatibilities and Missing\nFeatures}, which explains the few things GNU @code{make} lacks that\nothers have.\n\nFor a quick summary, see @ref{Options Summary}, @ref{Quick Reference},\nand @ref{Special Targets}.\n\n@node Bugs,  , Reading, Overview\n@section Problems and Bugs\n@cindex reporting bugs\n@cindex bugs, reporting\n@cindex problems and bugs, reporting\n\nIf you have problems with GNU @code{make} or think you've found a bug,\nplease report it to the developers; we cannot promise to do anything but\nwe might well want to fix it.\n\nBefore reporting a bug, make sure you've actually found a real bug.\nCarefully reread the documentation and see if it really says you can do\nwhat you're trying to do.  If it's not clear whether you should be able\nto do something or not, report that too; it's a bug in the\ndocumentation!\n\nBefore reporting a bug or trying to fix it yourself, try to isolate it\nto the smallest possible makefile that reproduces the problem.  Then\nsend us the makefile and the exact results @code{make} gave you,\nincluding any error or warning messages.  Please don't paraphrase\nthese messages: it's best to cut and paste them into your report.\nWhen generating this small makefile, be sure to not use any non-free\nor unusual tools in your commands: you can almost always emulate what\nsuch a tool would do with simple shell commands.  Finally, be sure to\nexplain what you expected to occur; this will help us decide whether\nthe problem was really in the documentation.\n\nOnce you have a precise problem you can report it in one of two ways.\nEither send electronic mail to:\n\n@example\n    bug-make@@gnu.org\n@end example\n\n@noindent\nor use our Web-based project management tool, at:\n\n@example\n    http://savannah.gnu.org/projects/make/\n@end example\n\n@noindent\nIn addition to the information above, please be careful to include the\nversion number of @code{make} you are using.  You can get this\ninformation with the command @samp{make --version}.  Be sure also to\ninclude the type of machine and operating system you are using.  One\nway to obtain this information is by looking at the final lines of\noutput from the command @samp{make --help}.\n\n@node Introduction, Makefiles, Overview, Top\n@comment  node-name,  next,  previous,  up\n@chapter An Introduction to Makefiles\n\nYou need a file called a @dfn{makefile} to tell @code{make} what to do.\nMost often, the makefile tells @code{make} how to compile and link a\nprogram.\n@cindex makefile\n\nIn this chapter, we will discuss a simple makefile that describes how to\ncompile and link a text editor which consists of eight C source files\nand three header files.  The makefile can also tell @code{make} how to\nrun miscellaneous commands when explicitly asked (for example, to remove\ncertain files as a clean-up operation).  To see a more complex example\nof a makefile, see @ref{Complex Makefile}.\n\nWhen @code{make} recompiles the editor, each changed C source file\nmust be recompiled.  If a header file has changed, each C source file\nthat includes the header file must be recompiled to be safe.  Each\ncompilation produces an object file corresponding to the source file.\nFinally, if any source file has been recompiled, all the object files,\nwhether newly made or saved from previous compilations, must be linked\ntogether to produce the new executable editor.\n@cindex recompilation\n@cindex editor\n\n@menu\n* Rule Introduction::           What a rule looks like.\n* Simple Makefile::             A Simple Makefile\n* How Make Works::              How @code{make} Processes This Makefile\n* Variables Simplify::          Variables Make Makefiles Simpler\n* make Deduces::                Letting @code{make} Deduce the Commands\n* Combine By Prerequisite::     Another Style of Makefile\n* Cleanup::                     Rules for Cleaning the Directory\n@end menu\n\n@node Rule Introduction, Simple Makefile, Introduction, Introduction\n@comment  node-name,  next,  previous,  up\n@section What a Rule Looks Like\n@cindex rule, introduction to\n@cindex makefile rule parts\n@cindex parts of makefile rule\n\nA simple makefile consists of ``rules'' with the following shape:\n\n@cindex targets, introduction to\n@cindex prerequisites, introduction to\n@cindex commands, introduction to\n@example\n@group\n@var{target} @dots{} : @var{prerequisites} @dots{}\n        @var{command}\n        @dots{}\n        @dots{}\n@end group\n@end example\n\nA @dfn{target} is usually the name of a file that is generated by a\nprogram; examples of targets are executable or object files.  A target\ncan also be the name of an action to carry out, such as @samp{clean}\n(@pxref{Phony Targets}).\n\nA @dfn{prerequisite} is a file that is used as input to create the\ntarget.  A target often depends on several files.\n\n@cindex tabs in rules\nA @dfn{command} is an action that @code{make} carries out.\nA rule may have more than one command, each on its own line.\n@strong{Please note:} you need to put a tab character at the beginning of\nevery command line!  This is an obscurity that catches the unwary.\n\nUsually a command is in a rule with prerequisites and serves to create a\ntarget file if any of the prerequisites change.  However, the rule that\nspecifies commands for the target need not have prerequisites.  For\nexample, the rule containing the delete command associated with the\ntarget @samp{clean} does not have prerequisites.\n\nA @dfn{rule}, then, explains how and when to remake certain files\nwhich are the targets of the particular rule.  @code{make} carries out\nthe commands on the prerequisites to create or update the target.  A\nrule can also explain how and when to carry out an action.\n@xref{Rules, , Writing Rules}.\n\nA makefile may contain other text besides rules, but a simple makefile\nneed only contain rules.  Rules may look somewhat more complicated\nthan shown in this template, but all fit the pattern more or less.\n\n@node Simple Makefile, How Make Works, Rule Introduction, Introduction\n@section A Simple Makefile\n@cindex simple makefile\n@cindex makefile, simple\n\nHere is a straightforward makefile that describes the way an\nexecutable file called @code{edit} depends on eight object files\nwhich, in turn, depend on eight C source and three header files.\n\nIn this example, all the C files include @file{defs.h}, but only those\ndefining editing commands include @file{command.h}, and only low\nlevel files that change the editor buffer include @file{buffer.h}.\n\n@example\n@group\nedit : main.o kbd.o command.o display.o \\\n       insert.o search.o files.o utils.o\n        cc -o edit main.o kbd.o command.o display.o \\\n                   insert.o search.o files.o utils.o\n\nmain.o : main.c defs.h\n        cc -c main.c\nkbd.o : kbd.c defs.h command.h\n        cc -c kbd.c\ncommand.o : command.c defs.h command.h\n        cc -c command.c\ndisplay.o : display.c defs.h buffer.h\n        cc -c display.c\ninsert.o : insert.c defs.h buffer.h\n        cc -c insert.c\nsearch.o : search.c defs.h buffer.h\n        cc -c search.c\nfiles.o : files.c defs.h buffer.h command.h\n        cc -c files.c\nutils.o : utils.c defs.h\n        cc -c utils.c\nclean :\n        rm edit main.o kbd.o command.o display.o \\\n           insert.o search.o files.o utils.o\n@end group\n@end example\n\n@noindent\nWe split each long line into two lines using backslash-newline; this is\nlike using one long line, but is easier to read.\n@cindex continuation lines\n@cindex @code{\\} (backslash), for continuation lines\n@cindex backslash (@code{\\}), for continuation lines\n@cindex quoting newline, in makefile\n@cindex newline, quoting, in makefile\n\nTo use this makefile to create the executable file called @file{edit},\ntype:\n\n@example\nmake\n@end example\n\nTo use this makefile to delete the executable file and all the object\nfiles from the directory, type:\n\n@example\nmake clean\n@end example\n\nIn the example makefile, the targets include the executable file\n@samp{edit}, and the object files @samp{main.o} and @samp{kbd.o}.  The\nprerequisites are files such as @samp{main.c} and @samp{defs.h}.\nIn fact, each @samp{.o} file is both a target and a prerequisite.\nCommands include @w{@samp{cc -c main.c}} and @w{@samp{cc -c kbd.c}}.\n\nWhen a target is a file, it needs to be recompiled or relinked if any\nof its prerequisites change.  In addition, any prerequisites that are\nthemselves automatically generated should be updated first.  In this\nexample, @file{edit} depends on each of the eight object files; the\nobject file @file{main.o} depends on the source file @file{main.c} and\non the header file @file{defs.h}.\n\nA shell command follows each line that contains a target and\nprerequisites.  These shell commands say how to update the target file.\nA tab character must come at the beginning of every command line to\ndistinguish command lines from other lines in the makefile.  (Bear in\nmind that @code{make} does not know anything about how the commands\nwork.  It is up to you to supply commands that will update the target\nfile properly.  All @code{make} does is execute the commands in the rule\nyou have specified when the target file needs to be updated.)\n@cindex shell command\n\nThe target @samp{clean} is not a file, but merely the name of an\naction.  Since you\nnormally\ndo not want to carry out the actions in this rule, @samp{clean} is not a prerequisite of any other rule.\nConsequently, @code{make} never does anything with it unless you tell\nit specifically.  Note that this rule not only is not a prerequisite, it\nalso does not have any prerequisites, so the only purpose of the rule\nis to run the specified commands.  Targets that do not refer to files\nbut are just actions are called @dfn{phony targets}.  @xref{Phony\nTargets}, for information about this kind of target.  @xref{Errors, ,\nErrors in Commands}, to see how to cause @code{make} to ignore errors\nfrom @code{rm} or any other command.\n@cindex @code{clean} target\n@cindex @code{rm} (shell command)\n\n@node How Make Works, Variables Simplify, Simple Makefile, Introduction\n@comment  node-name,  next,  previous,  up\n@section How @code{make} Processes a Makefile\n@cindex processing a makefile\n@cindex makefile, how @code{make} processes\n\nBy default, @code{make} starts with the first target (not targets whose\nnames start with @samp{.}).  This is called the @dfn{default goal}.\n(@dfn{Goals} are the targets that @code{make} strives ultimately to\nupdate.    You can override this behavior using the command line\n(@pxref{Goals, , Arguments to Specify the Goals}) or with the\n@code{.DEFAULT_GOAL} special variable (@pxref{Special Variables, ,\nOther Special Variables}).\n@cindex default goal\n@cindex goal, default\n@cindex goal\n\nIn the simple example of the previous section, the default goal is to\nupdate the executable program @file{edit}; therefore, we put that rule\nfirst.\n\nThus, when you give the command:\n\n@example\nmake\n@end example\n\n@noindent\n@code{make} reads the makefile in the current directory and begins by\nprocessing the first rule.  In the example, this rule is for relinking\n@file{edit}; but before @code{make} can fully process this rule, it\nmust process the rules for the files that @file{edit} depends on,\nwhich in this case are the object files.  Each of these files is\nprocessed according to its own rule.  These rules say to update each\n@samp{.o} file by compiling its source file.  The recompilation must\nbe done if the source file, or any of the header files named as\nprerequisites, is more recent than the object file, or if the object\nfile does not exist.\n\nThe other rules are processed because their targets appear as\nprerequisites of the goal.  If some other rule is not depended on by the\ngoal (or anything it depends on, etc.), that rule is not processed,\nunless you tell @code{make} to do so (with a command such as\n@w{@code{make clean}}).\n\nBefore recompiling an object file, @code{make} considers updating its\nprerequisites, the source file and header files.  This makefile does not\nspecify anything to be done for them---the @samp{.c} and @samp{.h} files\nare not the targets of any rules---so @code{make} does nothing for these\nfiles.  But @code{make} would update automatically generated C programs,\nsuch as those made by Bison or Yacc, by their own rules at this time.\n\nAfter recompiling whichever object files need it, @code{make} decides\nwhether to relink @file{edit}.  This must be done if the file\n@file{edit} does not exist, or if any of the object files are newer than\nit.  If an object file was just recompiled, it is now newer than\n@file{edit}, so @file{edit} is relinked.\n@cindex relinking\n\nThus, if we change the file @file{insert.c} and run @code{make},\n@code{make} will compile that file to update @file{insert.o}, and then\nlink @file{edit}.  If we change the file @file{command.h} and run\n@code{make}, @code{make} will recompile the object files @file{kbd.o},\n@file{command.o} and @file{files.o} and then link the file @file{edit}.\n\n@node Variables Simplify, make Deduces, How Make Works, Introduction\n@section Variables Make Makefiles Simpler\n@cindex variables\n@cindex simplifying with variables\n\nIn our example, we had to list all the object files twice in the rule for\n@file{edit} (repeated here):\n\n@example\n@group\nedit : main.o kbd.o command.o display.o \\\n              insert.o search.o files.o utils.o\n        cc -o edit main.o kbd.o command.o display.o \\\n                   insert.o search.o files.o utils.o\n@end group\n@end example\n\n@cindex @code{objects}\nSuch duplication is error-prone; if a new object file is added to the\nsystem, we might add it to one list and forget the other.  We can eliminate\nthe risk and simplify the makefile by using a variable.  @dfn{Variables}\nallow a text string to be defined once and substituted in multiple places\nlater (@pxref{Using Variables, ,How to Use Variables}).\n\n@cindex @code{OBJECTS}\n@cindex @code{objs}\n@cindex @code{OBJS}\n@cindex @code{obj}\n@cindex @code{OBJ}\nIt is standard practice for every makefile to have a variable named\n@code{objects}, @code{OBJECTS}, @code{objs}, @code{OBJS}, @code{obj},\nor @code{OBJ} which is a list of all object file names.  We would\ndefine such a variable @code{objects} with a line like this in the\nmakefile:@refill\n\n@example\n@group\nobjects = main.o kbd.o command.o display.o \\\n          insert.o search.o files.o utils.o\n@end group\n@end example\n\n@noindent\nThen, each place we want to put a list of the object file names, we can\nsubstitute the variable's value by writing @samp{$(objects)}\n(@pxref{Using Variables, ,How to Use Variables}).\n\nHere is how the complete simple makefile looks when you use a variable\nfor the object files:\n\n@example\n@group\nobjects = main.o kbd.o command.o display.o \\\n          insert.o search.o files.o utils.o\n\nedit : $(objects)\n        cc -o edit $(objects)\nmain.o : main.c defs.h\n        cc -c main.c\nkbd.o : kbd.c defs.h command.h\n        cc -c kbd.c\ncommand.o : command.c defs.h command.h\n        cc -c command.c\ndisplay.o : display.c defs.h buffer.h\n        cc -c display.c\ninsert.o : insert.c defs.h buffer.h\n        cc -c insert.c\nsearch.o : search.c defs.h buffer.h\n        cc -c search.c\nfiles.o : files.c defs.h buffer.h command.h\n        cc -c files.c\nutils.o : utils.c defs.h\n        cc -c utils.c\nclean :\n        rm edit $(objects)\n@end group\n@end example\n\n@node make Deduces, Combine By Prerequisite, Variables Simplify, Introduction\n@section Letting @code{make} Deduce the Commands\n@cindex deducing commands (implicit rules)\n@cindex implicit rule, introduction to\n@cindex rule, implicit, introduction to\n\nIt is not necessary to spell out the commands for compiling the individual\nC source files, because @code{make} can figure them out: it has an\n@dfn{implicit rule} for updating a @samp{.o} file from a correspondingly\nnamed @samp{.c} file using a @samp{cc -c} command.  For example, it will\nuse the command @samp{cc -c main.c -o main.o} to compile @file{main.c} into\n@file{main.o}.  We can therefore omit the commands from the rules for the\nobject files.  @xref{Implicit Rules, ,Using Implicit Rules}.@refill\n\nWhen a @samp{.c} file is used automatically in this way, it is also\nautomatically added to the list of prerequisites.  We can therefore omit\nthe @samp{.c} files from the prerequisites, provided we omit the commands.\n\nHere is the entire example, with both of these changes, and a variable\n@code{objects} as suggested above:\n\n@example\n@group\nobjects = main.o kbd.o command.o display.o \\\n          insert.o search.o files.o utils.o\n\nedit : $(objects)\n        cc -o edit $(objects)\n\nmain.o : defs.h\nkbd.o : defs.h command.h\ncommand.o : defs.h command.h\ndisplay.o : defs.h buffer.h\ninsert.o : defs.h buffer.h\nsearch.o : defs.h buffer.h\nfiles.o : defs.h buffer.h command.h\nutils.o : defs.h\n\n.PHONY : clean\nclean :\n        rm edit $(objects)\n@end group\n@end example\n\n@noindent\nThis is how we would write the makefile in actual practice.  (The\ncomplications associated with @samp{clean} are described elsewhere.\nSee @ref{Phony Targets}, and @ref{Errors, ,Errors in Commands}.)\n\nBecause implicit rules are so convenient, they are important.  You\nwill see them used frequently.@refill\n\n@node Combine By Prerequisite, Cleanup, make Deduces, Introduction\n@section Another Style of Makefile\n@cindex combining rules by prerequisite\n\nWhen the objects of a makefile are created only by implicit rules, an\nalternative style of makefile is possible.  In this style of makefile,\nyou group entries by their prerequisites instead of by their targets.\nHere is what one looks like:\n\n@example\n@group\nobjects = main.o kbd.o command.o display.o \\\n          insert.o search.o files.o utils.o\n\nedit : $(objects)\n        cc -o edit $(objects)\n\n$(objects) : defs.h\nkbd.o command.o files.o : command.h\ndisplay.o insert.o search.o files.o : buffer.h\n@end group\n@end example\n\n@noindent\nHere @file{defs.h} is given as a prerequisite of all the object files;\n@file{command.h} and @file{buffer.h} are prerequisites of the specific\nobject files listed for them.\n\nWhether this is better is a matter of taste: it is more compact, but some\npeople dislike it because they find it clearer to put all the information\nabout each target in one place.\n\n@node Cleanup,  , Combine By Prerequisite, Introduction\n@section Rules for Cleaning the Directory\n@cindex cleaning up\n@cindex removing, to clean up\n\nCompiling a program is not the only thing you might want to write rules\nfor.  Makefiles commonly tell how to do a few other things besides\ncompiling a program: for example, how to delete all the object files\nand executables so that the directory is @samp{clean}.\n\n@cindex @code{clean} target\nHere is how we\ncould write a @code{make} rule for cleaning our example editor:\n\n@example\n@group\nclean:\n        rm edit $(objects)\n@end group\n@end example\n\nIn practice, we might want to write the rule in a somewhat more\ncomplicated manner to handle unanticipated situations.  We would do this:\n\n@example\n@group\n.PHONY : clean\nclean :\n        -rm edit $(objects)\n@end group\n@end example\n\n@noindent\nThis prevents @code{make} from getting confused by an actual file\ncalled @file{clean} and causes it to continue in spite of errors from\n@code{rm}.  (See @ref{Phony Targets}, and @ref{Errors, ,Errors in\nCommands}.)\n\n@noindent\nA rule such as this should not be placed at the beginning of the\nmakefile, because we do not want it to run by default!  Thus, in the\nexample makefile, we want the rule for @code{edit}, which recompiles\nthe editor, to remain the default goal.\n\nSince @code{clean} is not a prerequisite of @code{edit}, this rule will not\nrun at all if we give the command @samp{make} with no arguments.  In\norder to make the rule run, we have to type @samp{make clean}.\n@xref{Running, ,How to Run @code{make}}.\n\n@node Makefiles, Rules, Introduction, Top\n@chapter Writing Makefiles\n\n@cindex makefile, how to write\nThe information that tells @code{make} how to recompile a system comes from\nreading a data base called the @dfn{makefile}.\n\n@menu\n* Makefile Contents::           What makefiles contain.\n* Makefile Names::              How to name your makefile.\n* Include::                     How one makefile can use another makefile.\n* MAKEFILES Variable::          The environment can specify extra makefiles.\n* MAKEFILE_LIST Variable::      Discover which makefiles have been read.\n* Special Variables::           Other special variables.\n* Remaking Makefiles::          How makefiles get remade.\n* Overriding Makefiles::        How to override part of one makefile\n                                  with another makefile.\n* Reading Makefiles::           How makefiles are parsed.\n* Secondary Expansion::         How and when secondary expansion is performed.\n@end menu\n\n@node Makefile Contents, Makefile Names, Makefiles, Makefiles\n@section What Makefiles Contain\n\nMakefiles contain five kinds of things: @dfn{explicit rules},\n@dfn{implicit rules}, @dfn{variable definitions}, @dfn{directives},\nand @dfn{comments}.  Rules, variables, and directives are described at\nlength in later chapters.@refill\n\n@itemize @bullet\n@cindex rule, explicit, definition of\n@cindex explicit rule, definition of\n@item\nAn @dfn{explicit rule} says when and how to remake one or more files,\ncalled the rule's @dfn{targets}.  It lists the other files that the\ntargets depend on, called the @dfn{prerequisites} of the target, and\nmay also give commands to use to create or update the targets.\n@xref{Rules, ,Writing Rules}.\n\n@cindex rule, implicit, definition of\n@cindex implicit rule, definition of\n@item\nAn @dfn{implicit rule} says when and how to remake a class of files\nbased on their names.  It describes how a target may depend on a file\nwith a name similar to the target and gives commands to create or\nupdate such a target.  @xref{Implicit Rules, ,Using Implicit Rules}.\n\n@cindex variable definition\n@item\nA @dfn{variable definition} is a line that specifies a text string\nvalue for a variable that can be substituted into the text later.  The\nsimple makefile example shows a variable definition for @code{objects}\nas a list of all object files (@pxref{Variables Simplify, , Variables\nMake Makefiles Simpler}).\n\n@cindex directive\n@item\nA @dfn{directive} is a command for @code{make} to do something special while\nreading the makefile.  These include:\n\n@itemize @bullet\n@item\nReading another makefile (@pxref{Include, ,Including Other Makefiles}).\n\n@item\nDeciding (based on the values of variables) whether to use or\nignore a part of the makefile (@pxref{Conditionals, ,Conditional Parts of Makefiles}).\n\n@item\nDefining a variable from a verbatim string containing multiple lines\n(@pxref{Defining, ,Defining Variables Verbatim}).\n@end itemize\n\n@cindex comments, in makefile\n@cindex @code{#} (comments), in makefile\n@item\n@samp{#} in a line of a makefile starts a @dfn{comment}.  It and the\nrest of the line are ignored, except that a trailing backslash not\nescaped by another backslash will continue the comment across multiple\nlines.  A line containing just a comment (with perhaps spaces before\nit) is effectively blank, and is ignored.  If you want a literal\n@code{#}, escape it with a backslash (e.g., @code{\\#}).  Comments may\nappear on any line in the makefile, although they are treated\nspecially in certain situations.\n\nWithin a command script (if the line begins with a TAB character) the\nentire line is passed to the shell, just as with any other line that\nbegins with a TAB.  The shell decides how to interpret the text:\nwhether or not this is a comment is up to the shell.\n\nWithin a @code{define} directive, comments are not ignored during the\ndefinition of the variable, but rather kept intact in the value of the\nvariable.  When the variable is expanded they will either be treated\nas @code{make} comments or as command script text, depending on the\ncontext in which the variable is evaluated.\n@end itemize\n\n@node Makefile Names, Include, Makefile Contents, Makefiles\n@section What Name to Give Your Makefile\n@cindex makefile name\n@cindex name of makefile\n@cindex default makefile name\n@cindex file name of makefile\n\n@c following paragraph rewritten to avoid overfull hbox\nBy default, when @code{make} looks for the makefile, it tries the\nfollowing names, in order: @file{GNUmakefile}, @file{makefile}\nand @file{Makefile}.@refill\n@findex Makefile\n@findex GNUmakefile\n@findex makefile\n\n@cindex @code{README}\nNormally you should call your makefile either @file{makefile} or\n@file{Makefile}.  (We recommend @file{Makefile} because it appears\nprominently near the beginning of a directory listing, right near other\nimportant files such as @file{README}.)  The first name checked,\n@file{GNUmakefile}, is not recommended for most makefiles.  You should\nuse this name if you have a makefile that is specific to GNU\n@code{make}, and will not be understood by other versions of\n@code{make}.  Other @code{make} programs look for @file{makefile} and\n@file{Makefile}, but not @file{GNUmakefile}.\n\nIf @code{make} finds none of these names, it does not use any makefile.\nThen you must specify a goal with a command argument, and @code{make}\nwill attempt to figure out how to remake it using only its built-in\nimplicit rules.  @xref{Implicit Rules, ,Using Implicit Rules}.\n\n@cindex @code{-f}\n@cindex @code{--file}\n@cindex @code{--makefile}\nIf you want to use a nonstandard name for your makefile, you can specify\nthe makefile name with the @samp{-f} or @samp{--file} option.  The\narguments @w{@samp{-f @var{name}}} or @w{@samp{--file=@var{name}}} tell\n@code{make} to read the file @var{name} as the makefile.  If you use\nmore than one @samp{-f} or @samp{--file} option, you can specify several\nmakefiles.  All the makefiles are effectively concatenated in the order\nspecified.  The default makefile names @file{GNUmakefile},\n@file{makefile} and @file{Makefile} are not checked automatically if you\nspecify @samp{-f} or @samp{--file}.@refill\n@cindex specifying makefile name\n@cindex makefile name, how to specify\n@cindex name of makefile, how to specify\n@cindex file name of makefile, how to specify\n\n@node Include, MAKEFILES Variable, Makefile Names, Makefiles\n@section Including Other Makefiles\n@cindex including other makefiles\n@cindex makefile, including\n\n@findex include\nThe @code{include} directive tells @code{make} to suspend reading the\ncurrent makefile and read one or more other makefiles before continuing.\nThe directive is a line in the makefile that looks like this:\n\n@example\ninclude @var{filenames}@dots{}\n@end example\n\n@noindent\n@var{filenames} can contain shell file name patterns.  If\n@var{filenames} is empty, nothing is included and no error is printed.\n@cindex shell file name pattern (in @code{include})\n@cindex shell wildcards (in @code{include})\n@cindex wildcard, in @code{include}\n\nExtra spaces are allowed and ignored at the beginning of the line, but\na tab is not allowed.  (If the line begins with a tab, it will be\nconsidered a command line.)  Whitespace is required between\n@code{include} and the file names, and between file names; extra\nwhitespace is ignored there and at the end of the directive.  A\ncomment starting with @samp{#} is allowed at the end of the line.  If\nthe file names contain any variable or function references, they are\nexpanded.  @xref{Using Variables, ,How to Use Variables}.\n\nFor example, if you have three @file{.mk} files, @file{a.mk},\n@file{b.mk}, and @file{c.mk}, and @code{$(bar)} expands to\n@code{bish bash}, then the following expression\n\n@example\ninclude foo *.mk $(bar)\n@end example\n\nis equivalent to\n\n@example\ninclude foo a.mk b.mk c.mk bish bash\n@end example\n\nWhen @code{make} processes an @code{include} directive, it suspends\nreading of the containing makefile and reads from each listed file in\nturn.  When that is finished, @code{make} resumes reading the\nmakefile in which the directive appears.\n\nOne occasion for using @code{include} directives is when several programs,\nhandled by individual makefiles in various directories, need to use a\ncommon set of variable definitions\n(@pxref{Setting, ,Setting Variables}) or pattern rules\n(@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}).\n\nAnother such occasion is when you want to generate prerequisites from\nsource files automatically; the prerequisites can be put in a file that\nis included by the main makefile.  This practice is generally cleaner\nthan that of somehow appending the prerequisites to the end of the main\nmakefile as has been traditionally done with other versions of\n@code{make}.  @xref{Automatic Prerequisites}.\n@cindex prerequisites, automatic generation\n@cindex automatic generation of prerequisites\n@cindex generating prerequisites automatically\n\n@cindex @code{-I}\n@cindex @code{--include-dir}\n@cindex included makefiles, default directories\n@cindex default directories for included makefiles\n@findex /usr/gnu/include\n@findex /usr/local/include\n@findex /usr/include\nIf the specified name does not start with a slash, and the file is not\nfound in the current directory, several other directories are searched.\nFirst, any directories you have specified with the @samp{-I} or\n@samp{--include-dir} option are searched\n(@pxref{Options Summary, ,Summary of Options}).\nThen the following directories (if they exist)\nare searched, in this order:\n@file{@var{prefix}/include} (normally @file{/usr/local/include}\n@footnote{GNU Make compiled for MS-DOS and MS-Windows behaves as if\n@var{prefix} has been defined to be the root of the DJGPP tree\nhierarchy.})\n@file{/usr/gnu/include},\n@file{/usr/local/include}, @file{/usr/include}.\n\nIf an included makefile cannot be found in any of these directories, a\nwarning message is generated, but it is not an immediately fatal error;\nprocessing of the makefile containing the @code{include} continues.\nOnce it has finished reading makefiles, @code{make} will try to remake\nany that are out of date or don't exist.\n@xref{Remaking Makefiles, ,How Makefiles Are Remade}.\nOnly after it has tried to find a way to remake a makefile and failed,\nwill @code{make} diagnose the missing makefile as a fatal error.\n\nIf you want @code{make} to simply ignore a makefile which does not exist\nand cannot be remade, with no error message, use the @w{@code{-include}}\ndirective instead of @code{include}, like this:\n\n@example\n-include @var{filenames}@dots{}\n@end example\n\nThis acts like @code{include} in every way except that there is no\nerror (not even a warning) if any of the @var{filenames} do not exist.\nFor compatibility with some other @code{make} implementations,\n@code{sinclude} is another name for @w{@code{-include}}.\n\n@node MAKEFILES Variable, MAKEFILE_LIST Variable, Include, Makefiles\n@section The Variable @code{MAKEFILES}\n@cindex makefile, and @code{MAKEFILES} variable\n@cindex including (@code{MAKEFILES} variable)\n\n@vindex MAKEFILES\nIf the environment variable @code{MAKEFILES} is defined, @code{make}\nconsiders its value as a list of names (separated by whitespace) of\nadditional makefiles to be read before the others.  This works much like\nthe @code{include} directive: various directories are searched for those\nfiles (@pxref{Include, ,Including Other Makefiles}).  In addition, the\ndefault goal is never taken from one of these makefiles and it is not an\nerror if the files listed in @code{MAKEFILES} are not found.@refill\n\n@cindex recursion, and @code{MAKEFILES} variable\nThe main use of @code{MAKEFILES} is in communication between recursive\ninvocations of @code{make} (@pxref{Recursion, ,Recursive Use of\n@code{make}}).  It usually is not desirable to set the environment\nvariable before a top-level invocation of @code{make}, because it is\nusually better not to mess with a makefile from outside.  However, if\nyou are running @code{make} without a specific makefile, a makefile in\n@code{MAKEFILES} can do useful things to help the built-in implicit\nrules work better, such as defining search paths (@pxref{Directory Search}).\n\nSome users are tempted to set @code{MAKEFILES} in the environment\nautomatically on login, and program makefiles to expect this to be done.\nThis is a very bad idea, because such makefiles will fail to work if run by\nanyone else.  It is much better to write explicit @code{include} directives\nin the makefiles.  @xref{Include, , Including Other Makefiles}.\n\n@node MAKEFILE_LIST Variable, Special Variables, MAKEFILES Variable, Makefiles\n@comment  node-name,  next,  previous,  up\n@section The Variable @code{MAKEFILE_LIST}\n@cindex makefiles, and @code{MAKEFILE_LIST} variable\n@cindex including (@code{MAKEFILE_LIST} variable)\n@vindex MAKEFILE_LIST\n\nAs @code{make} reads various makefiles, including any obtained from the\n@code{MAKEFILES} variable, the command line, the default files, or\nfrom @code{include} directives, their names will be automatically\nappended to the @code{MAKEFILE_LIST} variable.  They are added right\nbefore @code{make} begins to parse them.\n\nThis means that if the first thing a makefile does is examine the last\nword in this variable, it will be the name of the current makefile.\nOnce the current makefile has used @code{include}, however, the last\nword will be the just-included makefile.\n\nIf a makefile named @code{Makefile} has this content:\n\n@example\n@group\nname1 := $(lastword $(MAKEFILE_LIST))\n\ninclude inc.mk\n\nname2 := $(lastword $(MAKEFILE_LIST))\n\nall:\n        @@echo name1 = $(name1)\n        @@echo name2 = $(name2)\n@end group\n@end example\n\n@noindent\nthen you would expect to see this output:\n\n@example\n@group\nname1 = Makefile\nname2 = inc.mk\n@end group\n@end example\n\n@xref{Text Functions}, for more information on the @code{word} and\n@code{words} functions used above.  @xref{Flavors, The Two Flavors of\nVariables}, for more information on simply-expanded (@code{:=})\nvariable definitions.\n\n@node Special Variables, Remaking Makefiles, MAKEFILE_LIST Variable, Makefiles\n@comment  node-name,  next,  previous,  up\n@section Other Special Variables\n@cindex makefiles, and special variables\n@cindex special variables\n\nGNU @code{make} also supports other special variables.  Unless\notherwise documented here, these values lose their special properties\nif they are set by a makefile or on the command line.\n\n@table @code\n\n@vindex .DEFAULT_GOAL @r{(define default goal)}\n@item .DEFAULT_GOAL\nSets the default goal to be used if no targets were specified on the\ncommand line (@pxref{Goals, , Arguments to Specify the Goals}).  The\n@code{.DEFAULT_GOAL} variable allows you to discover the current\ndefault goal, restart the default goal selection algorithm by clearing\nits value, or to explicitly set the default goal.  The following\nexample illustrates these cases:\n\n@example\n@group\n# Query the default goal.\nifeq ($(.DEFAULT_GOAL),)\n  $(warning no default goal is set)\nendif\n\n.PHONY: foo\nfoo: ; @@echo $@@\n\n$(warning default goal is $(.DEFAULT_GOAL))\n\n# Reset the default goal.\n.DEFAULT_GOAL :=\n\n.PHONY: bar\nbar: ; @@echo $@@\n\n$(warning default goal is $(.DEFAULT_GOAL))\n\n# Set our own.\n.DEFAULT_GOAL := foo\n@end group\n@end example\n\nThis makefile prints:\n\n@example\n@group\nno default goal is set\ndefault goal is foo\ndefault goal is bar\nfoo\n@end group\n@end example\n\nNote that assigning more than one target name to @code{.DEFAULT_GOAL} is\nillegal and will result in an error.\n\n@vindex MAKE_RESTARTS @r{(number of times @code{make} has restarted)}\n@item MAKE_RESTARTS\nThis variable is set only if this instance of @code{make} has\nrestarted (@pxref{Remaking Makefiles, , How Makefiles Are Remade}): it\nwill contain the number of times this instance has restarted.  Note\nthis is not the same as recursion (counted by the @code{MAKELEVEL}\nvariable).  You should not set, modify, or export this variable.\n\n@vindex .VARIABLES @r{(list of variables)}\n@item .VARIABLES\nExpands to a list of the @emph{names} of all global variables defined\nso far.  This includes variables which have empty values, as well as\nbuilt-in variables (@pxref{Implicit Variables, , Variables Used by\nImplicit Rules}), but does not include any variables which are only\ndefined in a target-specific context.  Note that any value you assign\nto this variable will be ignored; it will always return its special\nvalue.\n\n@c @vindex .TARGETS @r{(list of targets)}\n@c @item .TARGETS\n@c The second special variable is @code{.TARGETS}.  When expanded, the\n@c value consists of a list of all targets defined in all makefiles read\n@c up until that point.  Note it's not enough for a file to be simply\n@c mentioned in the makefile to be listed in this variable, even if it\n@c would match an implicit rule and become an ``implicit target''.  The\n@c file must appear as a target, on the left-hand side of a ``:'', to be\n@c considered a target for the purposes of this variable.\n\n@vindex .FEATURES @r{(list of supported features)}\n@item .FEATURES\nExpands to a list of special features supported by this version of\n@code{make}.  Possible values include:\n\n@table @samp\n\n@item archives\nSupports @code{ar} (archive) files using special filename syntax.\n@xref{Archives, ,Using @code{make} to Update Archive Files}.\n\n@item check-symlink\nSupports the @code{-L} (@code{--check-symlink-times}) flag.\n@xref{Options Summary, ,Summary of Options}.\n\n@item else-if\nSupports ``else if'' non-nested conditionals.  @xref{Conditional\nSyntax, ,Syntax of Conditionals}.\n\n@item jobserver\nSupports ``job server'' enhanced parallel builds.  @xref{Parallel,\n,Parallel Execution}.\n\n@item second-expansion\nSupports secondary expansion of prerequisite lists.\n\n@item order-only\nSupports order-only prerequisites.  @xref{Prerequisite Types, ,Types\nof Prerequisites}.\n\n@item target-specific\nSupports target-specific and pattern-specific variable assignments.\n@xref{Target-specific, ,Target-specific Variable Values}.\n\n@end table\n\n@vindex .INCLUDE_DIRS @r{(list of include directories)}\n@item .INCLUDE_DIRS\nExpands to a list of directories that @code{make} searches for\nincluded makefiles (@pxref{Include, , Including Other Makefiles}).\n\n@end table\n\n@node Remaking Makefiles, Overriding Makefiles, Special Variables, Makefiles\n@section How Makefiles Are Remade\n\n@cindex updating makefiles\n@cindex remaking makefiles\n@cindex makefile, remaking of\nSometimes makefiles can be remade from other files, such as RCS or SCCS\nfiles.  If a makefile can be remade from other files, you probably want\n@code{make} to get an up-to-date version of the makefile to read in.\n\nTo this end, after reading in all makefiles, @code{make} will consider\neach as a goal target and attempt to update it.  If a makefile has a\nrule which says how to update it (found either in that very makefile or\nin another one) or if an implicit rule applies to it (@pxref{Implicit\nRules, ,Using Implicit Rules}), it will be updated if necessary.  After\nall makefiles have been checked, if any have actually been changed,\n@code{make} starts with a clean slate and reads all the makefiles over\nagain.  (It will also attempt to update each of them over again, but\nnormally this will not change them again, since they are already up to\ndate.)@refill\n\nIf you know that one or more of your makefiles cannot be remade and you\nwant to keep @code{make} from performing an implicit rule search on\nthem, perhaps for efficiency reasons, you can use any normal method of\npreventing implicit rule lookup to do so.  For example, you can write an\nexplicit rule with the makefile as the target, and an empty command\nstring (@pxref{Empty Commands, ,Using Empty Commands}).\n\nIf the makefiles specify a double-colon rule to remake a file with\ncommands but no prerequisites, that file will always be remade\n(@pxref{Double-Colon}).  In the case of makefiles, a makefile that has a\ndouble-colon rule with commands but no prerequisites will be remade every\ntime @code{make} is run, and then again after @code{make} starts over\nand reads the makefiles in again.  This would cause an infinite loop:\n@code{make} would constantly remake the makefile, and never do anything\nelse.  So, to avoid this, @code{make} will @strong{not} attempt to\nremake makefiles which are specified as targets of a double-colon rule\nwith commands but no prerequisites.@refill\n\nIf you do not specify any makefiles to be read with @samp{-f} or\n@samp{--file} options, @code{make} will try the default makefile names;\n@pxref{Makefile Names, ,What Name to Give Your Makefile}.  Unlike\nmakefiles explicitly requested with @samp{-f} or @samp{--file} options,\n@code{make} is not certain that these makefiles should exist.  However,\nif a default makefile does not exist but can be created by running\n@code{make} rules, you probably want the rules to be run so that the\nmakefile can be used.\n\nTherefore, if none of the default makefiles exists, @code{make} will try\nto make each of them in the same order in which they are searched for\n(@pxref{Makefile Names, ,What Name to Give Your Makefile})\nuntil it succeeds in making one, or it runs out of names to try.  Note\nthat it is not an error if @code{make} cannot find or make any makefile;\na makefile is not always necessary.@refill\n\nWhen you use the @samp{-t} or @samp{--touch} option\n(@pxref{Instead of Execution, ,Instead of Executing the Commands}),\nyou would not want to use an out-of-date makefile to decide which\ntargets to touch.  So the @samp{-t} option has no effect on updating\nmakefiles; they are really updated even if @samp{-t} is specified.\nLikewise, @samp{-q} (or @samp{--question}) and @samp{-n} (or\n@samp{--just-print}) do not prevent updating of makefiles, because an\nout-of-date makefile would result in the wrong output for other targets.\nThus, @samp{make -f mfile -n foo} will update @file{mfile}, read it in,\nand then print the commands to update @file{foo} and its prerequisites\nwithout running them.  The commands printed for @file{foo} will be those\nspecified in the updated contents of @file{mfile}.\n\nHowever, on occasion you might actually wish to prevent updating of even\nthe makefiles.  You can do this by specifying the makefiles as goals in\nthe command line as well as specifying them as makefiles.  When the\nmakefile name is specified explicitly as a goal, the options @samp{-t}\nand so on do apply to them.\n\nThus, @samp{make -f mfile -n mfile foo} would read the makefile\n@file{mfile}, print the commands needed to update it without actually\nrunning them, and then print the commands needed to update @file{foo}\nwithout running them.  The commands for @file{foo} will be those\nspecified by the existing contents of @file{mfile}.\n\n@node Overriding Makefiles, Reading Makefiles, Remaking Makefiles, Makefiles\n@section Overriding Part of Another Makefile\n\n@cindex overriding makefiles\n@cindex makefile, overriding\nSometimes it is useful to have a makefile that is mostly just like\nanother makefile.  You can often use the @samp{include} directive to\ninclude one in the other, and add more targets or variable definitions.\nHowever, if the two makefiles give different commands for the same\ntarget, @code{make} will not let you just do this.  But there is another way.\n\n@cindex match-anything rule, used to override\nIn the containing makefile (the one that wants to include the other),\nyou can use a match-anything pattern rule to say that to remake any\ntarget that cannot be made from the information in the containing\nmakefile, @code{make} should look in another makefile.\n@xref{Pattern Rules}, for more information on pattern rules.\n\nFor example, if you have a makefile called @file{Makefile} that says how\nto make the target @samp{foo} (and other targets), you can write a\nmakefile called @file{GNUmakefile} that contains:\n\n@example\nfoo:\n        frobnicate > foo\n\n%: force\n        @@$(MAKE) -f Makefile $@@\nforce: ;\n@end example\n\nIf you say @samp{make foo}, @code{make} will find @file{GNUmakefile},\nread it, and see that to make @file{foo}, it needs to run the command\n@samp{frobnicate > foo}.  If you say @samp{make bar}, @code{make} will\nfind no way to make @file{bar} in @file{GNUmakefile}, so it will use the\ncommands from the pattern rule: @samp{make -f Makefile bar}.  If\n@file{Makefile} provides a rule for updating @file{bar}, @code{make}\nwill apply the rule.  And likewise for any other target that\n@file{GNUmakefile} does not say how to make.\n\nThe way this works is that the pattern rule has a pattern of just\n@samp{%}, so it matches any target whatever.  The rule specifies a\nprerequisite @file{force}, to guarantee that the commands will be run even\nif the target file already exists.  We give @file{force} target empty\ncommands to prevent @code{make} from searching for an implicit rule to\nbuild it---otherwise it would apply the same match-anything rule to\n@file{force} itself and create a prerequisite loop!\n\n@node Reading Makefiles,  Secondary Expansion, Overriding Makefiles, Makefiles\n@section How @code{make} Reads a Makefile\n@cindex reading makefiles\n@cindex makefile, parsing\n\nGNU @code{make} does its work in two distinct phases.  During the first\nphase it reads all the makefiles, included makefiles, etc. and\ninternalizes all the variables and their values, implicit and explicit\nrules, and constructs a dependency graph of all the targets and their\nprerequisites.  During the second phase, @code{make} uses these internal\nstructures to determine what targets will need to be rebuilt and to\ninvoke the rules necessary to do so.\n\nIt's important to understand this two-phase approach because it has a\ndirect impact on how variable and function expansion happens; this is\noften a source of some confusion when writing makefiles.  Here we will\npresent a summary of the phases in which expansion happens for different\nconstructs within the makefile.  We say that expansion is\n@dfn{immediate} if it happens during the first phase: in this case\n@code{make} will expand any variables or functions in that section of a\nconstruct as the makefile is parsed.  We say that expansion is\n@dfn{deferred} if expansion is not performed immediately.  Expansion of\ndeferred construct is not performed until either the construct appears\nlater in an immediate context, or until the second phase.\n\nYou may not be familiar with some of these constructs yet.  You can\nreference this section as you become familiar with them, in later\nchapters.\n\n@subheading Variable Assignment\n@cindex +=, expansion\n@cindex =, expansion\n@cindex ?=, expansion\n@cindex +=, expansion\n@cindex define, expansion\n\nVariable definitions are parsed as follows:\n\n@example\n@var{immediate} = @var{deferred}\n@var{immediate} ?= @var{deferred}\n@var{immediate} := @var{immediate}\n@var{immediate} += @var{deferred} or @var{immediate}\n\ndefine @var{immediate}\n  @var{deferred}\nendef\n@end example\n\nFor the append operator, @samp{+=}, the right-hand side is considered\nimmediate if the variable was previously set as a simple variable\n(@samp{:=}), and deferred otherwise.\n\n@subheading Conditional Statements\n@cindex ifdef, expansion\n@cindex ifeq, expansion\n@cindex ifndef, expansion\n@cindex ifneq, expansion\n\nAll instances of conditional syntax are parsed immediately, in their\nentirety; this includes the @code{ifdef}, @code{ifeq}, @code{ifndef},\nand @code{ifneq} forms.  Of course this means that automatic variables\ncannot be used in conditional statements, as automatic variables are\nnot set until the command script for that rule is invoked.  If you\nneed to use automatic variables in a conditional you @emph{must} use\nshell conditional syntax, in your command script proper, for these\ntests, not @code{make} conditionals.\n\n@subheading Rule Definition\n@cindex target, expansion\n@cindex prerequisite, expansion\n@cindex implicit rule, expansion\n@cindex pattern rule, expansion\n@cindex explicit rule, expansion\n\nA rule is always expanded the same way, regardless of the form:\n\n@example\n@var{immediate} : @var{immediate} ; @var{deferred}\n\t@var{deferred}\n@end example\n\nThat is, the target and prerequisite sections are expanded immediately,\nand the commands used to construct the target are always deferred.  This\ngeneral rule is true for explicit rules, pattern rules, suffix rules,\nstatic pattern rules, and simple prerequisite definitions.\n\n@node Secondary Expansion, , Reading Makefiles, Makefiles\n@section Secondary Expansion\n@cindex secondary expansion\n@cindex expansion, secondary\n\n@findex .SECONDEXPANSION\nIn the previous section we learned that GNU @code{make} works in two\ndistinct phases: a read-in phase and a target-update phase\n(@pxref{Reading Makefiles, , How @code{make} Reads a Makefile}).  GNU\nmake also has the ability to enable a @emph{second expansion} of the\nprerequisites (only) for some or all targets defined in the makefile.\nIn order for this second expansion to occur, the special target\n@code{.SECONDEXPANSION} must be defined before the first prerequisite\nlist that makes use of this feature.\n\nIf that special target is defined then in between the two phases\nmentioned above, right at the end of the read-in phase, all the\nprerequisites of the targets defined after the special target are\nexpanded a @emph{second time}.  In most circumstances this secondary\nexpansion will have no effect, since all variable and function\nreferences will have been expanded during the initial parsing of the\nmakefiles.  In order to take advantage of the secondary expansion\nphase of the parser, then, it's necessary to @emph{escape} the\nvariable or function reference in the makefile.  In this case the\nfirst expansion merely un-escapes the reference but doesn't expand it,\nand expansion is left to the secondary expansion phase.  For example,\nconsider this makefile:\n\n@example\n.SECONDEXPANSION:\nONEVAR = onefile\nTWOVAR = twofile\nmyfile: $(ONEVAR) $$(TWOVAR)\n@end example\n\nAfter the first expansion phase the prerequisites list of the\n@file{myfile} target will be @code{onefile} and @code{$(TWOVAR)}; the\nfirst (unescaped) variable reference to @var{ONEVAR} is expanded,\nwhile the second (escaped) variable reference is simply unescaped,\nwithout being recognized as a variable reference.  Now during the\nsecondary expansion the first word is expanded again but since it\ncontains no variable or function references it remains the static\nvalue @file{onefile}, while the second word is now a normal reference\nto the variable @var{TWOVAR}, which is expanded to the value\n@file{twofile}.  The final result is that there are two prerequisites,\n@file{onefile} and @file{twofile}.\n\nObviously, this is not a very interesting case since the same result\ncould more easily have been achieved simply by having both variables\nappear, unescaped, in the prerequisites list.  One difference becomes\napparent if the variables are reset; consider this example:\n\n@example\n.SECONDEXPANSION:\nAVAR = top\nonefile: $(AVAR)\ntwofile: $$(AVAR)\nAVAR = bottom\n@end example\n\nHere the prerequisite of @file{onefile} will be expanded immediately,\nand resolve to the value @file{top}, while the prerequisite of\n@file{twofile} will not be full expanded until the secondary expansion\nand yield a value of @file{bottom}.\n\nThis is marginally more exciting, but the true power of this feature\nonly becomes apparent when you discover that secondary expansions\nalways take place within the scope of the automatic variables for that\ntarget.  This means that you can use variables such as @code{$@@},\n@code{$*}, etc. during the second expansion and they will have their\nexpected values, just as in the command script.  All you have to do is\ndefer the expansion by escaping the @code{$}.  Also, secondary\nexpansion occurs for both explicit and implicit (pattern) rules.\nKnowing this, the possible uses for this feature increase\ndramatically.  For example:\n\n@example\n.SECONDEXPANSION:\nmain_OBJS := main.o try.o test.o\nlib_OBJS := lib.o api.o\n\nmain lib: $$($$@@_OBJS)\n@end example\n\nHere, after the initial expansion the prerequisites of both the\n@file{main} and @file{lib} targets will be @code{$($@@_OBJS)}.  During\nthe secondary expansion, the @code{$@@} variable is set to the name of\nthe target and so the expansion for the @file{main} target will yield\n@code{$(main_OBJS)}, or @code{main.o try.o test.o}, while the\nsecondary expansion for the @file{lib} target will yield\n@code{$(lib_OBJS)}, or @code{lib.o api.o}.\n\nYou can also mix functions here, as long as they are properly escaped:\n\n@example\nmain_SRCS := main.c try.c test.c\nlib_SRCS := lib.c api.c\n\n.SECONDEXPANSION:\nmain lib: $$(patsubst %.c,%.o,$$($$@@_SRCS))\n@end example\n\nThis version allows users to specify source files rather than object\nfiles, but gives the same resulting prerequisites list as the previous\nexample.\n\nEvaluation of automatic variables during the secondary expansion\nphase, especially of the target name variable @code{$$@@}, behaves\nsimilarly to evaluation within command scripts.  However, there are\nsome subtle differences and ``corner cases'' which come into play for\nthe different types of rule definitions that @code{make} understands.\nThe subtleties of using the different automatic variables are\ndescribed below.\n\n@subheading Secondary Expansion of Explicit Rules\n@cindex secondary expansion and explicit rules\n@cindex explicit rules, secondary expansion of\n\nDuring the secondary expansion of explicit rules, @code{$$@@} and\n@code{$$%} evaluate, respectively, to the file name of the target and,\nwhen the target is an archive member, the target member name.  The\n@code{$$<} variable evaluates to the first prerequisite in the first\nrule for this target.  @code{$$^} and @code{$$+} evaluate to the list\nof all prerequisites of rules @emph{that have already appeared} for\nthe same target (@code{$$+} with repetitions and @code{$$^}\nwithout).  The following example will help illustrate these behaviors:\n\n@example\n.SECONDEXPANSION:\n\nfoo: foo.1 bar.1 $$< $$^ $$+    # line #1\n\nfoo: foo.2 bar.2 $$< $$^ $$+    # line #2\n\nfoo: foo.3 bar.3 $$< $$^ $$+    # line #3\n@end example\n\nIn the first prerequisite list, all three variables (@code{$$<},\n@code{$$^}, and @code{$$+}) expand to the empty string.  In the\nsecond, they will have values @code{foo.1}, @code{foo.1 bar.1}, and\n@code{foo.1 bar.1} respectively.  In the third they will have values\n@code{foo.1}, @code{foo.1 bar.1 foo.2 bar.2}, and @code{foo.1 bar.1\nfoo.2 bar.2} respectively.\n\nRules undergo secondary expansion in makefile order, except that\nthe rule with the command script is always evaluated last.\n\nThe variables @code{$$?} and @code{$$*} are not available and expand\nto the empty string.\n\n@subheading Secondary Expansion of Static Pattern Rules\n@cindex secondary expansion and static pattern rules\n@cindex static pattern rules, secondary expansion of\n\nRules for secondary expansion of static pattern rules are identical to\nthose for explicit rules, above, with one exception: for static\npattern rules the @code{$$*} variable is set to the pattern stem.  As\nwith explicit rules, @code{$$?} is not available and expands to the\nempty string.\n\n@subheading Secondary Expansion of Implicit Rules\n@cindex secondary expansion and implicit rules\n@cindex implicit rules, secondary expansion of\n\nAs @code{make} searches for an implicit rule, it substitutes the stem\nand then performs secondary expansion for every rule with a matching\ntarget pattern.  The value of the automatic variables is derived in\nthe same fashion as for static pattern rules.  As an example:\n\n@example\n.SECONDEXPANSION:\n\nfoo: bar\n\nfoo foz: fo%: bo%\n\n%oo: $$< $$^ $$+ $$*\n@end example\n\nWhen the implicit rule is tried for target @file{foo}, @code{$$<}\nexpands to @file{bar}, @code{$$^} expands to @file{bar boo},\n@code{$$+} also expands to @file{bar boo}, and @code{$$*} expands to\n@file{f}.\n\nNote that the directory prefix (D), as described in @ref{Implicit Rule\nSearch, ,Implicit Rule Search Algorithm}, is appended (after\nexpansion) to all the patterns in the prerequisites list.  As an\nexample:\n\n@example\n.SECONDEXPANSION:\n\n/tmp/foo.o:\n\n%.o: $$(addsuffix /%.c,foo bar) foo.h\n@end example\n\nThe prerequisite list after the secondary expansion and directory\nprefix reconstruction will be @file{/tmp/foo/foo.c /tmp/var/bar/foo.c\nfoo.h}.  If you are not interested in this reconstruction, you can use\n@code{$$*} instead of @code{%} in the prerequisites list.\n\n@node Rules, Commands, Makefiles, Top\n@chapter Writing Rules\n@cindex writing rules\n@cindex rule, how to write\n@cindex target\n@cindex prerequisite\n\nA @dfn{rule} appears in the makefile and says when and how to remake\ncertain files, called the rule's @dfn{targets} (most often only one per rule).\nIt lists the other files that are the @dfn{prerequisites} of the target, and\n@dfn{commands} to use to create or update the target.\n\n@cindex default goal\n@cindex goal, default\nThe order of rules is not significant, except for determining the\n@dfn{default goal}: the target for @code{make} to consider, if you do\nnot otherwise specify one.  The default goal is the target of the first\nrule in the first makefile.  If the first rule has multiple targets,\nonly the first target is taken as the default.  There are two\nexceptions: a target starting with a period is not a default unless it\ncontains one or more slashes, @samp{/}, as well; and, a target that\ndefines a pattern rule has no effect on the default goal.\n(@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.)\n\nTherefore, we usually write the makefile so that the first rule is the\none for compiling the entire program or all the programs described by\nthe makefile (often with a target called @samp{all}).\n@xref{Goals, ,Arguments to Specify the Goals}.\n\n@menu\n* Rule Example::                An example explained.\n* Rule Syntax::                 General syntax explained.\n* Prerequisite Types::          There are two types of prerequisites.\n* Wildcards::                   Using wildcard characters such as `*'.\n* Directory Search::            Searching other directories for source files.\n* Phony Targets::               Using a target that is not a real file's name.\n* Force Targets::               You can use a target without commands\n                                  or prerequisites to mark other targets\n                                  as phony.\n* Empty Targets::               When only the date matters and the\n                                  files are empty.\n* Special Targets::             Targets with special built-in meanings.\n* Multiple Targets::            When to make use of several targets in a rule.\n* Multiple Rules::              How to use several rules with the same target.\n* Static Pattern::              Static pattern rules apply to multiple targets\n                                  and can vary the prerequisites according to\n                                  the target name.\n* Double-Colon::                How to use a special kind of rule to allow\n                                  several independent rules for one target.\n* Automatic Prerequisites::     How to automatically generate rules giving\n                                  prerequisites from source files themselves.\n@end menu\n\n@ifnottex\n@node Rule Example, Rule Syntax, Rules, Rules\n@section Rule Example\n\nHere is an example of a rule:\n\n@example\nfoo.o : foo.c defs.h       # module for twiddling the frobs\n        cc -c -g foo.c\n@end example\n\nIts target is @file{foo.o} and its prerequisites are @file{foo.c} and\n@file{defs.h}.  It has one command, which is @samp{cc -c -g foo.c}.\nThe command line starts with a tab to identify it as a command.\n\nThis rule says two things:\n\n@itemize @bullet\n@item\nHow to decide whether @file{foo.o} is out of date: it is out of date\nif it does not exist, or if either @file{foo.c} or @file{defs.h} is\nmore recent than it.\n\n@item\nHow to update the file @file{foo.o}: by running @code{cc} as stated.\nThe command does not explicitly mention @file{defs.h}, but we presume\nthat @file{foo.c} includes it, and that that is why @file{defs.h} was\nadded to the prerequisites.\n@end itemize\n@end ifnottex\n\n@node Rule Syntax, Prerequisite Types, Rule Example, Rules\n@section Rule Syntax\n\n@cindex rule syntax\n@cindex syntax of rules\nIn general, a rule looks like this:\n\n@example\n@var{targets} : @var{prerequisites}\n        @var{command}\n        @dots{}\n@end example\n\n@noindent\nor like this:\n\n@example\n@var{targets} : @var{prerequisites} ; @var{command}\n        @var{command}\n        @dots{}\n@end example\n\n@cindex targets\n@cindex rule targets\nThe @var{targets} are file names, separated by spaces.  Wildcard\ncharacters may be used (@pxref{Wildcards, ,Using Wildcard Characters\nin File Names}) and a name of the form @file{@var{a}(@var{m})}\nrepresents member @var{m} in archive file @var{a}\n(@pxref{Archive Members, ,Archive Members as Targets}).\nUsually there is only one\ntarget per rule, but occasionally there is a reason to have more\n(@pxref{Multiple Targets, , Multiple Targets in a Rule}).@refill\n\n@cindex commands\n@cindex tab character (in commands)\nThe @var{command} lines start with a tab character.  The first command may\nappear on the line after the prerequisites, with a tab character, or may\nappear on the same line, with a semicolon.  Either way, the effect is the\nsame.  There are other differences in the syntax of command lines.\n@xref{Commands, ,Writing the Commands in Rules}.\n\n@cindex dollar sign (@code{$}), in rules\n@cindex @code{$}, in rules\n@cindex rules, and @code{$}\nBecause dollar signs are used to start @code{make} variable\nreferences, if you really want a dollar sign in a target or\nprerequisite you must write two of them, @samp{$$} (@pxref{Using\nVariables, ,How to Use Variables}).  If you have enabled secondary\nexpansion (@pxref{Secondary Expansion}) and you want a literal dollar\nsign in the prerequisites lise, you must actually write @emph{four}\ndollar signs (@samp{$$$$}).\n\nYou may split a long line by inserting a backslash followed by a\nnewline, but this is not required, as @code{make} places no limit on\nthe length of a line in a makefile.\n\nA rule tells @code{make} two things: when the targets are out of date,\nand how to update them when necessary.\n\n@cindex prerequisites\n@cindex rule prerequisites\nThe criterion for being out of date is specified in terms of the\n@var{prerequisites}, which consist of file names separated by spaces.\n(Wildcards and archive members (@pxref{Archives}) are allowed here too.)\nA target is out of date if it does not exist or if it is older than any\nof the prerequisites (by comparison of last-modification times).  The\nidea is that the contents of the target file are computed based on\ninformation in the prerequisites, so if any of the prerequisites changes,\nthe contents of the existing target file are no longer necessarily\nvalid.\n\nHow to update is specified by @var{commands}.  These are lines to be\nexecuted by the shell (normally @samp{sh}), but with some extra features\n(@pxref{Commands, ,Writing the Commands in Rules}).\n\n@node Prerequisite Types, Wildcards, Rule Syntax, Rules\n@comment  node-name,  next,  previous,  up\n@section Types of Prerequisites\n@cindex prerequisite types\n@cindex types of prerequisites\n\n@cindex prerequisites, normal\n@cindex normal prerequisites\n@cindex prerequisites, order-only\n@cindex order-only prerequisites\nThere are actually two different types of prerequisites understood by\nGNU @code{make}: normal prerequisites such as described in the\nprevious section, and @dfn{order-only} prerequisites.  A normal\nprerequisite makes two statements: first, it imposes an order of\nexecution of build commands: any commands necessary to build any of a\ntarget's prerequisites will be fully executed before any commands\nnecessary to build the target.  Second, it imposes a dependency\nrelationship: if any prerequisite is newer than the target, then the\ntarget is considered out-of-date and must be rebuilt.\n\nNormally, this is exactly what you want: if a target's prerequisite is\nupdated, then the target should also be updated.\n\nOccasionally, however, you have a situation where you want to impose a\nspecific ordering on the rules to be invoked @emph{without} forcing\nthe target to be updated if one of those rules is executed.  In that\ncase, you want to define @dfn{order-only} prerequisites.  Order-only\nprerequisites can be specified by placing a pipe symbol (@code{|})\nin the prerequisites list: any prerequisites to the left of the pipe\nsymbol are normal; any prerequisites to the right are order-only:\n\n@example\n@var{targets} : @var{normal-prerequisites} | @var{order-only-prerequisites}\n@end example\n\nThe normal prerequisites section may of course be empty.  Also, you\nmay still declare multiple lines of prerequisites for the same target:\nthey are appended appropriately.  Note that if you declare the same\nfile to be both a normal and an order-only prerequisite, the normal\nprerequisite takes precedence (since they are a strict superset of the\nbehavior of an order-only prerequisite).\n\n@node Wildcards, Directory Search, Prerequisite Types, Rules\n@section Using Wildcard Characters in File Names\n@cindex wildcard\n@cindex file name with wildcards\n@cindex globbing (wildcards)\n\n@cindex @code{*} (wildcard character)\n@cindex @code{?} (wildcard character)\n@cindex @code{[@dots{}]} (wildcard characters)\nA single file name can specify many files using @dfn{wildcard characters}.\nThe wildcard characters in @code{make} are @samp{*}, @samp{?} and\n@samp{[@dots{}]}, the same as in the Bourne shell.  For example, @file{*.c}\nspecifies a list of all the files (in the working directory) whose names\nend in @samp{.c}.@refill\n\n@cindex @code{~} (tilde)\n@cindex tilde (@code{~})\n@cindex home directory\nThe character @samp{~} at the beginning of a file name also has special\nsignificance.  If alone, or followed by a slash, it represents your home\ndirectory.  For example @file{~/bin} expands to @file{/home/you/bin}.\nIf the @samp{~} is followed by a word, the string represents the home\ndirectory of the user named by that word.  For example @file{~john/bin}\nexpands to @file{/home/john/bin}.  On systems which don't have a home\ndirectory for each user (such as MS-DOS or MS-Windows), this\nfunctionality can be simulated by setting the environment variable\n@var{HOME}.@refill\n\nWildcard expansion is performed by @code{make} automatically in\ntargets and in prerequisites.  In commands the shell is responsible\nfor wildcard expansion.  In other contexts, wildcard expansion happens\nonly if you request it explicitly with the @code{wildcard} function.\n\nThe special significance of a wildcard character can be turned off by\npreceding it with a backslash.  Thus, @file{foo\\*bar} would refer to a\nspecific file whose name consists of @samp{foo}, an asterisk, and\n@samp{bar}.@refill\n\n@menu\n* Wildcard Examples::           Several examples\n* Wildcard Pitfall::            Problems to avoid.\n* Wildcard Function::           How to cause wildcard expansion where\n                                  it does not normally take place.\n@end menu\n\n@node Wildcard Examples, Wildcard Pitfall, Wildcards, Wildcards\n@subsection Wildcard Examples\n\nWildcards can be used in the commands of a rule, where they are expanded\nby the shell.  For example, here is a rule to delete all the object files:\n\n@example\n@group\nclean:\n        rm -f *.o\n@end group\n@end example\n@cindex @code{rm} (shell command)\n\nWildcards are also useful in the prerequisites of a rule.  With the\nfollowing rule in the makefile, @samp{make print} will print all the\n@samp{.c} files that have changed since the last time you printed them:\n\n@example\nprint: *.c\n        lpr -p $?\n        touch print\n@end example\n\n@cindex @code{print} target\n@cindex @code{lpr} (shell command)\n@cindex @code{touch} (shell command)\n@noindent\nThis rule uses @file{print} as an empty target file; see @ref{Empty\nTargets, ,Empty Target Files to Record Events}.  (The automatic variable\n@samp{$?} is used to print only those files that have changed; see\n@ref{Automatic Variables}.)@refill\n\nWildcard expansion does not happen when you define a variable.  Thus, if\nyou write this:\n\n@example\nobjects = *.o\n@end example\n\n@noindent\nthen the value of the variable @code{objects} is the actual string\n@samp{*.o}.  However, if you use the value of @code{objects} in a target,\nprerequisite or command, wildcard expansion will take place at that time.\nTo set @code{objects} to the expansion, instead use:\n\n@example\nobjects := $(wildcard *.o)\n@end example\n\n@noindent\n@xref{Wildcard Function}.\n\n@node Wildcard Pitfall, Wildcard Function, Wildcard Examples, Wildcards\n@subsection Pitfalls of Using Wildcards\n@cindex wildcard pitfalls\n@cindex pitfalls of wildcards\n@cindex mistakes with wildcards\n@cindex errors with wildcards\n@cindex problems with wildcards\n\nNow here is an example of a naive way of using wildcard expansion, that\ndoes not do what you would intend.  Suppose you would like to say that the\nexecutable file @file{foo} is made from all the object files in the\ndirectory, and you write this:\n\n@example\nobjects = *.o\n\nfoo : $(objects)\n        cc -o foo $(CFLAGS) $(objects)\n@end example\n\n@noindent\nThe value of @code{objects} is the actual string @samp{*.o}.  Wildcard\nexpansion happens in the rule for @file{foo}, so that each @emph{existing}\n@samp{.o} file becomes a prerequisite of @file{foo} and will be recompiled if\nnecessary.\n\nBut what if you delete all the @samp{.o} files?  When a wildcard matches\nno files, it is left as it is, so then @file{foo} will depend on the\noddly-named file @file{*.o}.  Since no such file is likely to exist,\n@code{make} will give you an error saying it cannot figure out how to\nmake @file{*.o}.  This is not what you want!\n\nActually it is possible to obtain the desired result with wildcard\nexpansion, but you need more sophisticated techniques, including the\n@code{wildcard} function and string substitution.\n@ifnottex\n@xref{Wildcard Function, ,The Function @code{wildcard}}.\n@end ifnottex\n@iftex\nThese are described in the following section.\n@end iftex\n\n@cindex wildcards and MS-DOS/MS-Windows backslashes\n@cindex backslashes in pathnames and wildcard expansion\n\nMicrosoft operating systems (MS-DOS and MS-Windows) use backslashes to\nseparate directories in pathnames, like so:\n\n@example\n  c:\\foo\\bar\\baz.c\n@end example\n\nThis is equivalent to the Unix-style @file{c:/foo/bar/baz.c} (the\n@file{c:} part is the so-called drive letter).  When @code{make} runs on\nthese systems, it supports backslashes as well as the Unix-style forward\nslashes in pathnames.  However, this support does @emph{not} include the\nwildcard expansion, where backslash is a quote character.  Therefore,\nyou @emph{must} use Unix-style slashes in these cases.\n\n\n@node Wildcard Function,  , Wildcard Pitfall, Wildcards\n@subsection The Function @code{wildcard}\n@findex wildcard\n\nWildcard expansion happens automatically in rules.  But wildcard expansion\ndoes not normally take place when a variable is set, or inside the\narguments of a function.  If you want to do wildcard expansion in such\nplaces, you need to use the @code{wildcard} function, like this:\n\n@example\n$(wildcard @var{pattern}@dots{})\n@end example\n\n@noindent\nThis string, used anywhere in a makefile, is replaced by a\nspace-separated list of names of existing files that match one of the\ngiven file name patterns.  If no existing file name matches a pattern,\nthen that pattern is omitted from the output of the @code{wildcard}\nfunction.  Note that this is different from how unmatched wildcards\nbehave in rules, where they are used verbatim rather than ignored\n(@pxref{Wildcard Pitfall}).\n\nOne use of the @code{wildcard} function is to get a list of all the C source\nfiles in a directory, like this:\n\n@example\n$(wildcard *.c)\n@end example\n\nWe can change the list of C source files into a list of object files by\nreplacing the @samp{.c} suffix with @samp{.o} in the result, like this:\n\n@example\n$(patsubst %.c,%.o,$(wildcard *.c))\n@end example\n\n@noindent\n(Here we have used another function, @code{patsubst}.\n@xref{Text Functions, ,Functions for String Substitution and Analysis}.)@refill\n\nThus, a makefile to compile all C source files in the directory and then\nlink them together could be written as follows:\n\n@example\nobjects := $(patsubst %.c,%.o,$(wildcard *.c))\n\nfoo : $(objects)\n        cc -o foo $(objects)\n@end example\n\n@noindent\n(This takes advantage of the implicit rule for compiling C programs, so\nthere is no need to write explicit rules for compiling the files.\n@xref{Flavors, ,The Two Flavors of Variables}, for an explanation of\n@samp{:=}, which is a variant of @samp{=}.)\n\n@node Directory Search, Phony Targets, Wildcards, Rules\n@section Searching Directories for Prerequisites\n@vindex VPATH\n@findex vpath\n@cindex vpath\n@cindex search path for prerequisites (@code{VPATH})\n@cindex directory search (@code{VPATH})\n\nFor large systems, it is often desirable to put sources in a separate\ndirectory from the binaries.  The @dfn{directory search} features of\n@code{make} facilitate this by searching several directories\nautomatically to find a prerequisite.  When you redistribute the files\namong directories, you do not need to change the individual rules,\njust the search paths.\n\n@menu\n* General Search::              Specifying a search path that applies\n                                  to every prerequisite.\n* Selective Search::            Specifying a search path\n                                  for a specified class of names.\n* Search Algorithm::            When and how search paths are applied.\n* Commands/Search::             How to write shell commands that work together\n                                  with search paths.\n* Implicit/Search::             How search paths affect implicit rules.\n* Libraries/Search::            Directory search for link libraries.\n@end menu\n\n@node General Search, Selective Search, Directory Search, Directory Search\n@subsection @code{VPATH}: Search Path for All Prerequisites\n@vindex VPATH\n\nThe value of the @code{make} variable @code{VPATH} specifies a list of\ndirectories that @code{make} should search.  Most often, the\ndirectories are expected to contain prerequisite files that are not in the\ncurrent directory; however, @code{make} uses @code{VPATH} as a search\nlist for both prerequisites and targets of rules.\n\nThus, if a file that is listed as a target or prerequisite does not exist\nin the current directory, @code{make} searches the directories listed in\n@code{VPATH} for a file with that name.  If a file is found in one of\nthem, that file may become the prerequisite (see below).  Rules may then\nspecify the names of files in the prerequisite list as if they all\nexisted in the current directory.  @xref{Commands/Search, ,Writing Shell\nCommands with Directory Search}.\n\nIn the @code{VPATH} variable, directory names are separated by colons or\nblanks.  The order in which directories are listed is the order followed\nby @code{make} in its search.  (On MS-DOS and MS-Windows, semi-colons\nare used as separators of directory names in @code{VPATH}, since the\ncolon can be used in the pathname itself, after the drive letter.)\n\nFor example,\n\n@example\nVPATH = src:../headers\n@end example\n\n@noindent\nspecifies a path containing two directories, @file{src} and\n@file{../headers}, which @code{make} searches in that order.\n\nWith this value of @code{VPATH}, the following rule,\n\n@example\nfoo.o : foo.c\n@end example\n\n@noindent\nis interpreted as if it were written like this:\n\n@example\nfoo.o : src/foo.c\n@end example\n\n@noindent\nassuming the file @file{foo.c} does not exist in the current directory but\nis found in the directory @file{src}.\n\n@node Selective Search, Search Algorithm, General Search, Directory Search\n@subsection The @code{vpath} Directive\n@findex vpath\n\nSimilar to the @code{VPATH} variable, but more selective, is the\n@code{vpath} directive (note lower case), which allows you to specify a\nsearch path for a particular class of file names: those that match a\nparticular pattern.  Thus you can supply certain search directories for\none class of file names and other directories (or none) for other file\nnames.\n\nThere are three forms of the @code{vpath} directive:\n\n@table @code\n@item vpath @var{pattern} @var{directories}\nSpecify the search path @var{directories} for file names that match\n@var{pattern}.\n\nThe search path, @var{directories}, is a list of directories to be\nsearched, separated by colons (semi-colons on MS-DOS and MS-Windows) or\nblanks, just like the search path used in the @code{VPATH} variable.\n\n@item vpath @var{pattern}\nClear out the search path associated with @var{pattern}.\n\n@c Extra blank line makes sure this gets two lines.\n@item vpath\n\nClear all search paths previously specified with @code{vpath} directives.\n@end table\n\nA @code{vpath} pattern is a string containing a @samp{%} character.  The\nstring must match the file name of a prerequisite that is being searched\nfor, the @samp{%} character matching any sequence of zero or more\ncharacters (as in pattern rules; @pxref{Pattern Rules, ,Defining and\nRedefining Pattern Rules}).  For example, @code{%.h} matches files that\nend in @code{.h}.  (If there is no @samp{%}, the pattern must match the\nprerequisite exactly, which is not useful very often.)\n\n@cindex @code{%}, quoting in @code{vpath}\n@cindex @code{%}, quoting with @code{\\} (backslash)\n@cindex @code{\\} (backslash), to quote @code{%}\n@cindex backslash (@code{\\}), to quote @code{%}\n@cindex quoting @code{%}, in @code{vpath}\n@samp{%} characters in a @code{vpath} directive's pattern can be quoted\nwith preceding backslashes (@samp{\\}).  Backslashes that would otherwise\nquote @samp{%} characters can be quoted with more backslashes.\nBackslashes that quote @samp{%} characters or other backslashes are\nremoved from the pattern before it is compared to file names.  Backslashes\nthat are not in danger of quoting @samp{%} characters go unmolested.@refill\n\nWhen a prerequisite fails to exist in the current directory, if the\n@var{pattern} in a @code{vpath} directive matches the name of the\nprerequisite file, then the @var{directories} in that directive are searched\njust like (and before) the directories in the @code{VPATH} variable.\n\nFor example,\n\n@example\nvpath %.h ../headers\n@end example\n\n@noindent\ntells @code{make} to look for any prerequisite whose name ends in @file{.h}\nin the directory @file{../headers} if the file is not found in the current\ndirectory.\n\nIf several @code{vpath} patterns match the prerequisite file's name, then\n@code{make} processes each matching @code{vpath} directive one by one,\nsearching all the directories mentioned in each directive.  @code{make}\nhandles multiple @code{vpath} directives in the order in which they\nappear in the makefile; multiple directives with the same pattern are\nindependent of each other.\n\n@need 750\nThus,\n\n@example\n@group\nvpath %.c foo\nvpath %   blish\nvpath %.c bar\n@end group\n@end example\n\n@noindent\nwill look for a file ending in @samp{.c} in @file{foo}, then\n@file{blish}, then @file{bar}, while\n\n@example\n@group\nvpath %.c foo:bar\nvpath %   blish\n@end group\n@end example\n\n@noindent\nwill look for a file ending in @samp{.c} in @file{foo}, then\n@file{bar}, then @file{blish}.\n\n@node Search Algorithm, Commands/Search, Selective Search, Directory Search\n@subsection How Directory Searches are Performed\n@cindex algorithm for directory search\n@cindex directory search algorithm\n\nWhen a prerequisite is found through directory search, regardless of type\n(general or selective), the pathname located may not be the one that\n@code{make} actually provides you in the prerequisite list.  Sometimes\nthe path discovered through directory search is thrown away.\n\nThe algorithm @code{make} uses to decide whether to keep or abandon a\npath found via directory search is as follows:\n\n@enumerate\n@item\nIf a target file does not exist at the path specified in the makefile,\ndirectory search is performed.\n\n@item\nIf the directory search is successful, that path is kept and this file\nis tentatively stored as the target.\n\n@item\nAll prerequisites of this target are examined using this same method.\n\n@item\nAfter processing the prerequisites, the target may or may not need to be\nrebuilt:\n\n@enumerate a\n@item\nIf the target does @emph{not} need to be rebuilt, the path to the file\nfound during directory search is used for any prerequisite lists which\ncontain this target.  In short, if @code{make} doesn't need to rebuild\nthe target then you use the path found via directory search.\n\n@item\nIf the target @emph{does} need to be rebuilt (is out-of-date), the\npathname found during directory search is @emph{thrown away}, and the\ntarget is rebuilt using the file name specified in the makefile.  In\nshort, if @code{make} must rebuild, then the target is rebuilt locally,\nnot in the directory found via directory search.\n@end enumerate\n@end enumerate\n\nThis algorithm may seem complex, but in practice it is quite often\nexactly what you want.\n\n@cindex traditional directory search (GPATH)\n@cindex directory search, traditional (GPATH)\nOther versions of @code{make} use a simpler algorithm: if the file does\nnot exist, and it is found via directory search, then that pathname is\nalways used whether or not the target needs to be built.  Thus, if the\ntarget is rebuilt it is created at the pathname discovered during\ndirectory search.\n\n@vindex GPATH\nIf, in fact, this is the behavior you want for some or all of your\ndirectories, you can use the @code{GPATH} variable to indicate this to\n@code{make}.\n\n@code{GPATH} has the same syntax and format as @code{VPATH} (that is, a\nspace- or colon-delimited list of pathnames).  If an out-of-date target\nis found by directory search in a directory that also appears in\n@code{GPATH}, then that pathname is not thrown away.  The target is\nrebuilt using the expanded path.\n\n@node Commands/Search, Implicit/Search, Search Algorithm, Directory Search\n@subsection Writing Shell Commands with Directory Search\n@cindex shell command, and directory search\n@cindex directory search (@code{VPATH}), and shell commands\n\nWhen a prerequisite is found in another directory through directory search,\nthis cannot change the commands of the rule; they will execute as written.\nTherefore, you must write the commands with care so that they will look for\nthe prerequisite in the directory where @code{make} finds it.\n\nThis is done with the @dfn{automatic variables} such as @samp{$^}\n(@pxref{Automatic Variables}).\nFor instance, the value of @samp{$^} is a\nlist of all the prerequisites of the rule, including the names of\nthe directories in which they were found, and the value of\n@samp{$@@} is the target.  Thus:@refill\n\n@example\nfoo.o : foo.c\n        cc -c $(CFLAGS) $^ -o $@@\n@end example\n\n@noindent\n(The variable @code{CFLAGS} exists so you can specify flags for C\ncompilation by implicit rules; we use it here for consistency so it will\naffect all C compilations uniformly;\n@pxref{Implicit Variables, ,Variables Used by Implicit Rules}.)\n\nOften the prerequisites include header files as well, which you do not\nwant to mention in the commands.  The automatic variable @samp{$<} is\njust the first prerequisite:\n\n@example\nVPATH = src:../headers\nfoo.o : foo.c defs.h hack.h\n        cc -c $(CFLAGS) $< -o $@@\n@end example\n\n@node Implicit/Search, Libraries/Search, Commands/Search, Directory Search\n@subsection Directory Search and Implicit Rules\n@cindex @code{VPATH}, and implicit rules\n@cindex directory search (@code{VPATH}), and implicit rules\n@cindex search path for prerequisites (@code{VPATH}), and implicit rules\n@cindex implicit rule, and directory search\n@cindex implicit rule, and @code{VPATH}\n@cindex rule, implicit, and directory search\n@cindex rule, implicit, and @code{VPATH}\n\nThe search through the directories specified in @code{VPATH} or with\n@code{vpath} also happens during consideration of implicit rules\n(@pxref{Implicit Rules, ,Using Implicit Rules}).\n\nFor example, when a file @file{foo.o} has no explicit rule, @code{make}\nconsiders implicit rules, such as the built-in rule to compile\n@file{foo.c} if that file exists.  If such a file is lacking in the\ncurrent directory, the appropriate directories are searched for it.  If\n@file{foo.c} exists (or is mentioned in the makefile) in any of the\ndirectories, the implicit rule for C compilation is applied.\n\nThe commands of implicit rules normally use automatic variables as a\nmatter of necessity; consequently they will use the file names found by\ndirectory search with no extra effort.\n\n@node Libraries/Search,  , Implicit/Search, Directory Search\n@subsection Directory Search for Link Libraries\n@cindex link libraries, and directory search\n@cindex libraries for linking, directory search\n@cindex directory search (@code{VPATH}), and link libraries\n@cindex @code{VPATH}, and link libraries\n@cindex search path for prerequisites (@code{VPATH}), and link libraries\n@cindex @code{-l} (library search)\n@cindex link libraries, patterns matching\n@cindex @code{.LIBPATTERNS}, and link libraries\n@vindex .LIBPATTERNS\n\nDirectory search applies in a special way to libraries used with the\nlinker.  This special feature comes into play when you write a prerequisite\nwhose name is of the form @samp{-l@var{name}}.  (You can tell something\nstrange is going on here because the prerequisite is normally the name of a\nfile, and the @emph{file name} of a library generally looks like\n@file{lib@var{name}.a}, not like @samp{-l@var{name}}.)@refill\n\nWhen a prerequisite's name has the form @samp{-l@var{name}}, @code{make}\nhandles it specially by searching for the file @file{lib@var{name}.so} in\nthe current directory, in directories specified by matching @code{vpath}\nsearch paths and the @code{VPATH} search path, and then in the\ndirectories @file{/lib}, @file{/usr/lib}, and @file{@var{prefix}/lib}\n(normally @file{/usr/local/lib}, but MS-DOS/MS-Windows versions of\n@code{make} behave as if @var{prefix} is defined to be the root of the\nDJGPP installation tree).\n\nIf that file is not found, then the file @file{lib@var{name}.a} is\nsearched for, in the same directories as above.\n\nFor example, if there is a @file{/usr/lib/libcurses.a} library on your\nsystem (and no @file{/usr/lib/libcurses.so} file), then\n\n@example\n@group\nfoo : foo.c -lcurses\n        cc $^ -o $@@\n@end group\n@end example\n\n@noindent\nwould cause the command @samp{cc foo.c /usr/lib/libcurses.a -o foo} to\nbe executed when @file{foo} is older than @file{foo.c} or than\n@file{/usr/lib/libcurses.a}.@refill\n\nAlthough the default set of files to be searched for is\n@file{lib@var{name}.so} and @file{lib@var{name}.a}, this is customizable\nvia the @code{.LIBPATTERNS} variable.  Each word in the value of this\nvariable is a pattern string.  When a prerequisite like\n@samp{-l@var{name}} is seen, @code{make} will replace the percent in\neach pattern in the list with @var{name} and perform the above directory\nsearches using that library filename.  If no library is found, the next\nword in the list will be used.\n\nThe default value for @code{.LIBPATTERNS} is @samp{lib%.so lib%.a},\nwhich provides the default behavior described above.\n\nYou can turn off link library expansion completely by setting this\nvariable to an empty value.\n\n@node Phony Targets, Force Targets, Directory Search, Rules\n@section Phony Targets\n@cindex phony targets\n@cindex targets, phony\n@cindex targets without a file\n\nA phony target is one that is not really the name of a file.  It is just a\nname for some commands to be executed when you make an explicit request.\nThere are two reasons to use a phony target: to avoid a conflict with\na file of the same name, and to improve performance.\n\nIf you write a rule whose commands will not create the target file, the\ncommands will be executed every time the target comes up for remaking.\nHere is an example:\n\n@example\n@group\nclean:\n        rm *.o temp\n@end group\n@end example\n\n@noindent\nBecause the @code{rm} command does not create a file named @file{clean},\nprobably no such file will ever exist.  Therefore, the @code{rm} command\nwill be executed every time you say @samp{make clean}.\n@cindex @code{rm} (shell command)\n\n@findex .PHONY\nThe phony target will cease to work if anything ever does create a file\nnamed @file{clean} in this directory.  Since it has no prerequisites, the\nfile @file{clean} would inevitably be considered up to date, and its\ncommands would not be executed.  To avoid this problem, you can explicitly\ndeclare the target to be phony, using the special target @code{.PHONY}\n(@pxref{Special Targets, ,Special Built-in Target Names}) as follows:\n\n@example\n.PHONY : clean\n@end example\n\n@noindent\nOnce this is done, @samp{make clean} will run the commands regardless of\nwhether there is a file named @file{clean}.\n\nSince it knows that phony targets do not name actual files that could be\nremade from other files, @code{make} skips the implicit rule search for\nphony targets (@pxref{Implicit Rules}).  This is why declaring a target\nphony is good for performance, even if you are not worried about the\nactual file existing.\n\nThus, you first write the line that states that @code{clean} is a\nphony target, then you write the rule, like this:\n\n@example\n@group\n.PHONY: clean\nclean:\n        rm *.o temp\n@end group\n@end example\n\nAnother example of the usefulness of phony targets is in conjunction\nwith recursive invocations of @code{make} (for more information, see\n@ref{Recursion, ,Recursive Use of @code{make}}).  In this case the\nmakefile will often contain a variable which lists a number of\nsubdirectories to be built.  One way to handle this is with one rule\nwhose command is a shell loop over the subdirectories, like this:\n\n@example\n@group\nSUBDIRS = foo bar baz\n\nsubdirs:\n        for dir in $(SUBDIRS); do \\\n          $(MAKE) -C $$dir; \\\n        done\n@end group\n@end example\n\nThere are a few problems with this method, however.  First, any error\ndetected in a submake is not noted by this rule, so it will continue to\nbuild the rest of the directories even when one fails.  This can be\novercome by adding shell commands to note the error and exit, but then\nit will do so even if @code{make} is invoked with the @code{-k} option,\nwhich is unfortunate.  Second, and perhaps more importantly, you cannot\ntake advantage of @code{make}'s ability to build targets in parallel\n(@pxref{Parallel, ,Parallel Execution}), since there is only one rule.\n\nBy declaring the subdirectories as phony targets (you must do this as\nthe subdirectory obviously always exists; otherwise it won't be built)\nyou can remove these problems:\n\n@example\n@group\nSUBDIRS = foo bar baz\n\n.PHONY: subdirs $(SUBDIRS)\n\nsubdirs: $(SUBDIRS)\n\n$(SUBDIRS):\n        $(MAKE) -C $@@\n\nfoo: baz\n@end group\n@end example\n\nHere we've also declared that the @file{foo} subdirectory cannot be\nbuilt until after the @file{baz} subdirectory is complete; this kind of\nrelationship declaration is particularly important when attempting\nparallel builds.\n\nA phony target should not be a prerequisite of a real target file; if it\nis, its commands are run every time @code{make} goes to update that\nfile.  As long as a phony target is never a prerequisite of a real\ntarget, the phony target commands will be executed only when the phony\ntarget is a specified goal (@pxref{Goals, ,Arguments to Specify the\nGoals}).\n\nPhony targets can have prerequisites.  When one directory contains multiple\nprograms, it is most convenient to describe all of the programs in one\nmakefile @file{./Makefile}.  Since the target remade by default will be the\nfirst one in the makefile, it is common to make this a phony target named\n@samp{all} and give it, as prerequisites, all the individual programs.  For\nexample:\n\n@example\nall : prog1 prog2 prog3\n.PHONY : all\n\nprog1 : prog1.o utils.o\n        cc -o prog1 prog1.o utils.o\n\nprog2 : prog2.o\n        cc -o prog2 prog2.o\n\nprog3 : prog3.o sort.o utils.o\n        cc -o prog3 prog3.o sort.o utils.o\n@end example\n\n@noindent\nNow you can say just @samp{make} to remake all three programs, or\nspecify as arguments the ones to remake (as in @samp{make prog1\nprog3}).  Phoniness is not inherited: the prerequisites of a phony\ntarget are not themselves phony, unless explicitly declared to be so.\n\nWhen one phony target is a prerequisite of another, it serves as a subroutine\nof the other.  For example, here @samp{make cleanall} will delete the\nobject files, the difference files, and the file @file{program}:\n\n@example\n.PHONY: cleanall cleanobj cleandiff\n\ncleanall : cleanobj cleandiff\n        rm program\n\ncleanobj :\n        rm *.o\n\ncleandiff :\n        rm *.diff\n@end example\n\n@node Force Targets, Empty Targets, Phony Targets, Rules\n@section Rules without Commands or Prerequisites\n@cindex force targets\n@cindex targets, force\n@cindex @code{FORCE}\n@cindex rule, no commands or prerequisites\n\nIf a rule has no prerequisites or commands, and the target of the rule\nis a nonexistent file, then @code{make} imagines this target to have\nbeen updated whenever its rule is run.  This implies that all targets\ndepending on this one will always have their commands run.\n\nAn example will illustrate this:\n\n@example\n@group\nclean: FORCE\n        rm $(objects)\nFORCE:\n@end group\n@end example\n\nHere the target @samp{FORCE} satisfies the special conditions, so the\ntarget @file{clean} that depends on it is forced to run its commands.\nThere is nothing special about the name @samp{FORCE}, but that is one name\ncommonly used this way.\n\nAs you can see, using @samp{FORCE} this way has the same results as using\n@samp{.PHONY: clean}.\n\nUsing @samp{.PHONY} is more explicit and more efficient.  However,\nother versions of @code{make} do not support @samp{.PHONY}; thus\n@samp{FORCE} appears in many makefiles.  @xref{Phony Targets}.\n\n@node Empty Targets, Special Targets, Force Targets, Rules\n@section Empty Target Files to Record Events\n@cindex empty targets\n@cindex targets, empty\n@cindex recording events with empty targets\n\nThe @dfn{empty target} is a variant of the phony target; it is used to hold\ncommands for an action that you request explicitly from time to time.\nUnlike a phony target, this target file can really exist; but the file's\ncontents do not matter, and usually are empty.\n\nThe purpose of the empty target file is to record, with its\nlast-modification time, when the rule's commands were last executed.  It\ndoes so because one of the commands is a @code{touch} command to update the\ntarget file.\n\nThe empty target file should have some prerequisites (otherwise it\ndoesn't make sense).  When you ask to remake the empty target, the\ncommands are executed if any prerequisite is more recent than the target;\nin other words, if a prerequisite has changed since the last time you\nremade the target.  Here is an example:\n\n@example\nprint: foo.c bar.c\n        lpr -p $?\n        touch print\n@end example\n@cindex @code{print} target\n@cindex @code{lpr} (shell command)\n@cindex @code{touch} (shell command)\n\n@noindent\nWith this rule, @samp{make print} will execute the @code{lpr} command if\neither source file has changed since the last @samp{make print}.  The\nautomatic variable @samp{$?} is used to print only those files that have\nchanged (@pxref{Automatic Variables}).\n\n@node Special Targets, Multiple Targets, Empty Targets, Rules\n@section Special Built-in Target Names\n@cindex special targets\n@cindex built-in special targets\n@cindex targets, built-in special\n\nCertain names have special meanings if they appear as targets.\n\n@table @code\n@findex .PHONY\n@item .PHONY\n\nThe prerequisites of the special target @code{.PHONY} are considered to\nbe phony targets.  When it is time to consider such a target,\n@code{make} will run its commands unconditionally, regardless of\nwhether a file with that name exists or what its last-modification\ntime is.  @xref{Phony Targets, ,Phony Targets}.\n\n@findex .SUFFIXES\n@item .SUFFIXES\n\nThe prerequisites of the special target @code{.SUFFIXES} are the list\nof suffixes to be used in checking for suffix rules.\n@xref{Suffix Rules, , Old-Fashioned Suffix Rules}.\n\n@findex .DEFAULT\n@item .DEFAULT\n\nThe commands specified for @code{.DEFAULT} are used for any target for\nwhich no rules are found (either explicit rules or implicit rules).\n@xref{Last Resort}.  If @code{.DEFAULT} commands are specified, every\nfile mentioned as a prerequisite, but not as a target in a rule, will have\nthese commands executed on its behalf.  @xref{Implicit Rule Search,\n,Implicit Rule Search Algorithm}.\n\n@findex .PRECIOUS\n@item .PRECIOUS\n@cindex precious targets\n@cindex preserving with @code{.PRECIOUS}\n\nThe targets which @code{.PRECIOUS} depends on are given the following\nspecial treatment: if @code{make} is killed or interrupted during the\nexecution of their commands, the target is not deleted.\n@xref{Interrupts, ,Interrupting or Killing @code{make}}.  Also, if the\ntarget is an intermediate file, it will not be deleted after it is no\nlonger needed, as is normally done.  @xref{Chained Rules, ,Chains of\nImplicit Rules}.  In this latter respect it overlaps with the\n@code{.SECONDARY} special target.\n\nYou can also list the target pattern of an implicit rule (such as\n@samp{%.o}) as a prerequisite file of the special target @code{.PRECIOUS}\nto preserve intermediate files created by rules whose target patterns\nmatch that file's name.\n\n@findex .INTERMEDIATE\n@item .INTERMEDIATE\n@cindex intermediate targets, explicit\n\nThe targets which @code{.INTERMEDIATE} depends on are treated as\nintermediate files.  @xref{Chained Rules, ,Chains of Implicit Rules}.\n@code{.INTERMEDIATE} with no prerequisites has no effect.\n\n@findex .SECONDARY\n@item .SECONDARY\n@cindex secondary targets\n@cindex preserving with @code{.SECONDARY}\n\nThe targets which @code{.SECONDARY} depends on are treated as\nintermediate files, except that they are never automatically deleted.\n@xref{Chained Rules, ,Chains of Implicit Rules}.\n\n@code{.SECONDARY} with no prerequisites causes all targets to be treated\nas secondary (i.e., no target is removed because it is considered\nintermediate).\n\n@findex .SECONDEXPANSION\n@item .SECONDEXPANSION\n\nIf @code{.SECONDEXPANSION} is mentioned as a target anywhere in the\nmakefile, then all prerequisite lists defined @emph{after} it appears\nwill be expanded a second time after all makefiles have been read in.\n@xref{Secondary Expansion, ,Secondary Expansion}.\n\nThe prerequisites of the special target @code{.SUFFIXES} are the list\nof suffixes to be used in checking for suffix rules.\n@xref{Suffix Rules, , Old-Fashioned Suffix Rules}.\n\n@findex .DELETE_ON_ERROR\n@item .DELETE_ON_ERROR\n@cindex removing targets on failure\n\nIf @code{.DELETE_ON_ERROR} is mentioned as a target anywhere in the\nmakefile, then @code{make} will delete the target of a rule if it has\nchanged and its commands exit with a nonzero exit status, just as it\ndoes when it receives a signal.  @xref{Errors, ,Errors in Commands}.\n\n@findex .IGNORE\n@item .IGNORE\n\nIf you specify prerequisites for @code{.IGNORE}, then @code{make} will\nignore errors in execution of the commands run for those particular\nfiles.  The commands for @code{.IGNORE} are not meaningful.\n\nIf mentioned as a target with no prerequisites, @code{.IGNORE} says to\nignore errors in execution of commands for all files.  This usage of\n@samp{.IGNORE} is supported only for historical compatibility.  Since\nthis affects every command in the makefile, it is not very useful; we\nrecommend you use the more selective ways to ignore errors in specific\ncommands.  @xref{Errors, ,Errors in Commands}.\n\n@findex .LOW_RESOLUTION_TIME\n@item .LOW_RESOLUTION_TIME\n\nIf you specify prerequisites for @code{.LOW_RESOLUTION_TIME},\n@command{make} assumes that these files are created by commands that\ngenerate low resolution time stamps.  The commands for\n@code{.LOW_RESOLUTION_TIME} are not meaningful.\n\nThe high resolution file time stamps of many modern hosts lessen the\nchance of @command{make} incorrectly concluding that a file is up to\ndate.  Unfortunately, these hosts provide no way to set a high\nresolution file time stamp, so commands like @samp{cp -p} that\nexplicitly set a file's time stamp must discard its subsecond part.  If\na file is created by such a command, you should list it as a\nprerequisite of @code{.LOW_RESOLUTION_TIME} so that @command{make} does\nnot mistakenly conclude that the file is out of date.  For example:\n\n@example\n@group\n.LOW_RESOLUTION_TIME: dst\ndst: src\n        cp -p src dst\n@end group\n@end example\n\nSince @samp{cp -p} discards the subsecond part of @file{src}'s time\nstamp, @file{dst} is typically slightly older than @file{src} even when\nit is up to date.  The @code{.LOW_RESOLUTION_TIME} line causes\n@command{make} to consider @file{dst} to be up to date if its time stamp\nis at the start of the same second that @file{src}'s time stamp is in.\n\nDue to a limitation of the archive format, archive member time stamps\nare always low resolution.  You need not list archive members as\nprerequisites of @code{.LOW_RESOLUTION_TIME}, as @command{make} does this\nautomatically.\n\n@findex .SILENT\n@item .SILENT\n\nIf you specify prerequisites for @code{.SILENT}, then @code{make} will\nnot print the commands to remake those particular files before executing\nthem.  The commands for @code{.SILENT} are not meaningful.\n\nIf mentioned as a target with no prerequisites, @code{.SILENT} says not\nto print any commands before executing them.  This usage of\n@samp{.SILENT} is supported only for historical compatibility.  We\nrecommend you use the more selective ways to silence specific commands.\n@xref{Echoing, ,Command Echoing}.  If you want to silence all commands\nfor a particular run of @code{make}, use the @samp{-s} or\n@w{@samp{--silent}} option (@pxref{Options Summary}).\n\n@findex .EXPORT_ALL_VARIABLES\n@item .EXPORT_ALL_VARIABLES\n\nSimply by being mentioned as a target, this tells @code{make} to\nexport all variables to child processes by default.\n@xref{Variables/Recursion, ,Communicating Variables to a\nSub-@code{make}}.\n\n@findex .NOTPARALLEL\n@item .NOTPARALLEL\n@cindex parallel execution, overriding\n\nIf @code{.NOTPARALLEL} is mentioned as a target, then this invocation of\n@code{make} will be run serially, even if the @samp{-j} option is\ngiven.  Any recursively invoked @code{make} command will still be run in\nparallel (unless its makefile contains this target).  Any prerequisites\non this target are ignored.\n@end table\n\nAny defined implicit rule suffix also counts as a special target if it\nappears as a target, and so does the concatenation of two suffixes, such\nas @samp{.c.o}.  These targets are suffix rules, an obsolete way of\ndefining implicit rules (but a way still widely used).  In principle, any\ntarget name could be special in this way if you break it in two and add\nboth pieces to the suffix list.  In practice, suffixes normally begin with\n@samp{.}, so these special target names also begin with @samp{.}.\n@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}.\n\n@node Multiple Targets, Multiple Rules, Special Targets, Rules\n@section Multiple Targets in a Rule\n@cindex multiple targets\n@cindex several targets in a rule\n@cindex targets, multiple\n@cindex rule, with multiple targets\n\nA rule with multiple targets is equivalent to writing many rules, each with\none target, and all identical aside from that.  The same commands apply to\nall the targets, but their effects may vary because you can substitute the\nactual target name into the command using @samp{$@@}.  The rule contributes\nthe same prerequisites to all the targets also.\n\nThis is useful in two cases.\n\n@itemize @bullet\n@item\nYou want just prerequisites, no commands.  For example:\n\n@example\nkbd.o command.o files.o: command.h\n@end example\n\n@noindent\ngives an additional prerequisite to each of the three object files\nmentioned.\n\n@item\nSimilar commands work for all the targets.  The commands do not need\nto be absolutely identical, since the automatic variable @samp{$@@}\ncan be used to substitute the particular target to be remade into the\ncommands (@pxref{Automatic Variables}).  For example:\n\n@example\n@group\nbigoutput littleoutput : text.g\n        generate text.g -$(subst output,,$@@) > $@@\n@end group\n@end example\n@findex subst\n\n@noindent\nis equivalent to\n\n@example\nbigoutput : text.g\n        generate text.g -big > bigoutput\nlittleoutput : text.g\n        generate text.g -little > littleoutput\n@end example\n\n@noindent\nHere we assume the hypothetical program @code{generate} makes two\ntypes of output, one if given @samp{-big} and one if given\n@samp{-little}.\n@xref{Text Functions, ,Functions for String Substitution and Analysis},\nfor an explanation of the @code{subst} function.\n@end itemize\n\nSuppose you would like to vary the prerequisites according to the target,\nmuch as the variable @samp{$@@} allows you to vary the commands.\nYou cannot do this with multiple targets in an ordinary rule, but you can\ndo it with a @dfn{static pattern rule}.\n@xref{Static Pattern, ,Static Pattern Rules}.\n\n@node Multiple Rules, Static Pattern, Multiple Targets, Rules\n@section Multiple Rules for One Target\n@cindex multiple rules for one target\n@cindex several rules for one target\n@cindex rule, multiple for one target\n@cindex target, multiple rules for one\n\nOne file can be the target of several rules.  All the prerequisites\nmentioned in all the rules are merged into one list of prerequisites for\nthe target.  If the target is older than any prerequisite from any rule,\nthe commands are executed.\n\nThere can only be one set of commands to be executed for a file.  If\nmore than one rule gives commands for the same file, @code{make} uses\nthe last set given and prints an error message.  (As a special case,\nif the file's name begins with a dot, no error message is printed.\nThis odd behavior is only for compatibility with other implementations\nof @code{make}... you should avoid using it).  Occasionally it is\nuseful to have the same target invoke multiple commands which are\ndefined in different parts of your makefile; you can use\n@dfn{double-colon rules} (@pxref{Double-Colon}) for this.\n\nAn extra rule with just prerequisites can be used to give a few extra\nprerequisites to many files at once.  For example, makefiles often\nhave a variable, such as @code{objects}, containing a list of all the\ncompiler output files in the system being made.  An easy way to say\nthat all of them must be recompiled if @file{config.h} changes is to\nwrite the following:\n\n@example\nobjects = foo.o bar.o\nfoo.o : defs.h\nbar.o : defs.h test.h\n$(objects) : config.h\n@end example\n\nThis could be inserted or taken out without changing the rules that really\nspecify how to make the object files, making it a convenient form to use if\nyou wish to add the additional prerequisite intermittently.\n\nAnother wrinkle is that the additional prerequisites could be specified with\na variable that you set with a command argument to @code{make}\n(@pxref{Overriding, ,Overriding Variables}).  For example,\n\n@example\n@group\nextradeps=\n$(objects) : $(extradeps)\n@end group\n@end example\n\n@noindent\nmeans that the command @samp{make extradeps=foo.h} will consider\n@file{foo.h} as a prerequisite of each object file, but plain @samp{make}\nwill not.\n\nIf none of the explicit rules for a target has commands, then @code{make}\nsearches for an applicable implicit rule to find some commands\n@pxref{Implicit Rules, ,Using Implicit Rules}).\n\n@node Static Pattern, Double-Colon, Multiple Rules, Rules\n@section Static Pattern Rules\n@cindex static pattern rule\n@cindex rule, static pattern\n@cindex pattern rules, static (not implicit)\n@cindex varying prerequisites\n@cindex prerequisites, varying (static pattern)\n\n@dfn{Static pattern rules} are rules which specify multiple targets and\nconstruct the prerequisite names for each target based on the target name.\nThey are more general than ordinary rules with multiple targets because the\ntargets do not have to have identical prerequisites.  Their prerequisites must\nbe @emph{analogous}, but not necessarily @emph{identical}.\n\n@menu\n* Static Usage::                The syntax of static pattern rules.\n* Static versus Implicit::      When are they better than implicit rules?\n@end menu\n\n@node Static Usage, Static versus Implicit, Static Pattern, Static Pattern\n@subsection Syntax of Static Pattern Rules\n@cindex static pattern rule, syntax of\n@cindex pattern rules, static, syntax of\n\nHere is the syntax of a static pattern rule:\n\n@example\n@var{targets} @dots{}: @var{target-pattern}: @var{prereq-patterns} @dots{}\n        @var{commands}\n        @dots{}\n@end example\n\n@noindent\nThe @var{targets} list specifies the targets that the rule applies to.\nThe targets can contain wildcard characters, just like the targets of\nordinary rules (@pxref{Wildcards, ,Using Wildcard Characters in File\nNames}).\n\n@cindex target pattern, static (not implicit)\n@cindex stem\nThe @var{target-pattern} and @var{prereq-patterns} say how to compute the\nprerequisites of each target.  Each target is matched against the\n@var{target-pattern} to extract a part of the target name, called the\n@dfn{stem}.  This stem is substituted into each of the @var{prereq-patterns}\nto make the prerequisite names (one from each @var{prereq-pattern}).\n\nEach pattern normally contains the character @samp{%} just once.  When the\n@var{target-pattern} matches a target, the @samp{%} can match any part of\nthe target name; this part is called the @dfn{stem}.  The rest of the\npattern must match exactly.  For example, the target @file{foo.o} matches\nthe pattern @samp{%.o}, with @samp{foo} as the stem.  The targets\n@file{foo.c} and @file{foo.out} do not match that pattern.@refill\n\n@cindex prerequisite pattern, static (not implicit)\nThe prerequisite names for each target are made by substituting the stem\nfor the @samp{%} in each prerequisite pattern.  For example, if one\nprerequisite pattern is @file{%.c}, then substitution of the stem\n@samp{foo} gives the prerequisite name @file{foo.c}.  It is legitimate\nto write a prerequisite pattern that does not contain @samp{%}; then this\nprerequisite is the same for all targets.\n\n@cindex @code{%}, quoting in static pattern\n@cindex @code{%}, quoting with @code{\\} (backslash)\n@cindex @code{\\} (backslash), to quote @code{%}\n@cindex backslash (@code{\\}), to quote @code{%}\n@cindex quoting @code{%}, in static pattern\n@samp{%} characters in pattern rules can be quoted with preceding\nbackslashes (@samp{\\}).  Backslashes that would otherwise quote @samp{%}\ncharacters can be quoted with more backslashes.  Backslashes that quote\n@samp{%} characters or other backslashes are removed from the pattern\nbefore it is compared to file names or has a stem substituted into it.\nBackslashes that are not in danger of quoting @samp{%} characters go\nunmolested.  For example, the pattern @file{the\\%weird\\\\%pattern\\\\} has\n@samp{the%weird\\} preceding the operative @samp{%} character, and\n@samp{pattern\\\\} following it.  The final two backslashes are left alone\nbecause they cannot affect any @samp{%} character.@refill\n\nHere is an example, which compiles each of @file{foo.o} and @file{bar.o}\nfrom the corresponding @file{.c} file:\n\n@example\n@group\nobjects = foo.o bar.o\n\nall: $(objects)\n\n$(objects): %.o: %.c\n        $(CC) -c $(CFLAGS) $< -o $@@\n@end group\n@end example\n\n@noindent\nHere @samp{$<} is the automatic variable that holds the name of the\nprerequisite and @samp{$@@} is the automatic variable that holds the name\nof the target; see @ref{Automatic Variables}.\n\nEach target specified must match the target pattern; a warning is issued\nfor each target that does not.  If you have a list of files, only some of\nwhich will match the pattern, you can use the @code{filter} function to\nremove nonmatching file names (@pxref{Text Functions, ,Functions for String Substitution and Analysis}):\n\n@example\nfiles = foo.elc bar.o lose.o\n\n$(filter %.o,$(files)): %.o: %.c\n        $(CC) -c $(CFLAGS) $< -o $@@\n$(filter %.elc,$(files)): %.elc: %.el\n        emacs -f batch-byte-compile $<\n@end example\n\n@noindent\nIn this example the result of @samp{$(filter %.o,$(files))} is\n@file{bar.o lose.o}, and the first static pattern rule causes each of\nthese object files to be updated by compiling the corresponding C source\nfile.  The result of @w{@samp{$(filter %.elc,$(files))}} is\n@file{foo.elc}, so that file is made from @file{foo.el}.@refill\n\nAnother example shows how to use @code{$*} in static pattern rules:\n@vindex $*@r{, and static pattern}\n\n@example\n@group\nbigoutput littleoutput : %output : text.g\n        generate text.g -$* > $@@\n@end group\n@end example\n\n@noindent\nWhen the @code{generate} command is run, @code{$*} will expand to the\nstem, either @samp{big} or @samp{little}.\n\n@node Static versus Implicit,  , Static Usage, Static Pattern\n@subsection Static Pattern Rules versus Implicit Rules\n@cindex rule, static pattern versus implicit\n@cindex static pattern rule, versus implicit\n\nA static pattern rule has much in common with an implicit rule defined as a\npattern rule (@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}).\nBoth have a pattern for the target and patterns for constructing the\nnames of prerequisites.  The difference is in how @code{make} decides\n@emph{when} the rule applies.\n\nAn implicit rule @emph{can} apply to any target that matches its pattern,\nbut it @emph{does} apply only when the target has no commands otherwise\nspecified, and only when the prerequisites can be found.  If more than one\nimplicit rule appears applicable, only one applies; the choice depends on\nthe order of rules.\n\nBy contrast, a static pattern rule applies to the precise list of targets\nthat you specify in the rule.  It cannot apply to any other target and it\ninvariably does apply to each of the targets specified.  If two conflicting\nrules apply, and both have commands, that's an error.\n\nThe static pattern rule can be better than an implicit rule for these\nreasons:\n\n@itemize @bullet\n@item\nYou may wish to override the usual implicit rule for a few\nfiles whose names cannot be categorized syntactically but\ncan be given in an explicit list.\n\n@item\nIf you cannot be sure of the precise contents of the directories\nyou are using, you may not be sure which other irrelevant files\nmight lead @code{make} to use the wrong implicit rule.  The choice\nmight depend on the order in which the implicit rule search is done.\nWith static pattern rules, there is no uncertainty: each rule applies\nto precisely the targets specified.\n@end itemize\n\n@node Double-Colon, Automatic Prerequisites, Static Pattern, Rules\n@section Double-Colon Rules\n@cindex double-colon rules\n@cindex rule, double-colon (@code{::})\n@cindex multiple rules for one target (@code{::})\n@cindex @code{::} rules (double-colon)\n\n@dfn{Double-colon} rules are rules written with @samp{::} instead of\n@samp{:} after the target names.  They are handled differently from\nordinary rules when the same target appears in more than one rule.\n\nWhen a target appears in multiple rules, all the rules must be the same\ntype: all ordinary, or all double-colon.  If they are double-colon, each\nof them is independent of the others.  Each double-colon rule's commands\nare executed if the target is older than any prerequisites of that rule.\nIf there are no prerequisites for that rule, its commands are always\nexecuted (even if the target already exists).  This can result in\nexecuting none, any, or all of the double-colon rules.\n\nDouble-colon rules with the same target are in fact completely separate\nfrom one another.  Each double-colon rule is processed individually, just\nas rules with different targets are processed.\n\nThe double-colon rules for a target are executed in the order they appear\nin the makefile.  However, the cases where double-colon rules really make\nsense are those where the order of executing the commands would not matter.\n\nDouble-colon rules are somewhat obscure and not often very useful; they\nprovide a mechanism for cases in which the method used to update a target\ndiffers depending on which prerequisite files caused the update, and such\ncases are rare.\n\nEach double-colon rule should specify commands; if it does not, an\nimplicit rule will be used if one applies.\n@xref{Implicit Rules, ,Using Implicit Rules}.\n\n@node Automatic Prerequisites,  , Double-Colon, Rules\n@section Generating Prerequisites Automatically\n@cindex prerequisites, automatic generation\n@cindex automatic generation of prerequisites\n@cindex generating prerequisites automatically\n\nIn the makefile for a program, many of the rules you need to write often\nsay only that some object file depends on some header\nfile.  For example, if @file{main.c} uses @file{defs.h} via an\n@code{#include}, you would write:\n\n@example\nmain.o: defs.h\n@end example\n\n@noindent\nYou need this rule so that @code{make} knows that it must remake\n@file{main.o} whenever @file{defs.h} changes.  You can see that for a\nlarge program you would have to write dozens of such rules in your\nmakefile.  And, you must always be very careful to update the makefile\nevery time you add or remove an @code{#include}.\n@cindex @code{#include}\n\n@cindex @code{-M} (to compiler)\nTo avoid this hassle, most modern C compilers can write these rules for\nyou, by looking at the @code{#include} lines in the source files.\nUsually this is done with the @samp{-M} option to the compiler.\nFor example, the command:\n\n@example\ncc -M main.c\n@end example\n\n@noindent\ngenerates the output:\n\n@example\nmain.o : main.c defs.h\n@end example\n\n@noindent\nThus you no longer have to write all those rules yourself.\nThe compiler will do it for you.\n\nNote that such a prerequisite constitutes mentioning @file{main.o} in a\nmakefile, so it can never be considered an intermediate file by implicit\nrule search.  This means that @code{make} won't ever remove the file\nafter using it; @pxref{Chained Rules, ,Chains of Implicit Rules}.\n\n@cindex @code{make depend}\nWith old @code{make} programs, it was traditional practice to use this\ncompiler feature to generate prerequisites on demand with a command like\n@samp{make depend}.  That command would create a file @file{depend}\ncontaining all the automatically-generated prerequisites; then the\nmakefile could use @code{include} to read them in (@pxref{Include}).\n\nIn GNU @code{make}, the feature of remaking makefiles makes this\npractice obsolete---you need never tell @code{make} explicitly to\nregenerate the prerequisites, because it always regenerates any makefile\nthat is out of date.  @xref{Remaking Makefiles}.\n\nThe practice we recommend for automatic prerequisite generation is to have\none makefile corresponding to each source file.  For each source file\n@file{@var{name}.c} there is a makefile @file{@var{name}.d} which lists\nwhat files the object file @file{@var{name}.o} depends on.  That way\nonly the source files that have changed need to be rescanned to produce\nthe new prerequisites.\n\nHere is the pattern rule to generate a file of prerequisites (i.e., a makefile)\ncalled @file{@var{name}.d} from a C source file called @file{@var{name}.c}:\n\n@smallexample\n@group\n%.d: %.c\n        @@set -e; rm -f $@@; \\\n         $(CC) -M $(CPPFLAGS) $< > $@@.$$$$; \\\n         sed 's,\\($*\\)\\.o[ :]*,\\1.o $@@ : ,g' < $@@.$$$$ > $@@; \\\n         rm -f $@@.$$$$\n@end group\n@end smallexample\n\n@noindent\n@xref{Pattern Rules}, for information on defining pattern rules.  The\n@samp{-e} flag to the shell causes it to exit immediately if the\n@code{$(CC)} command (or any other command) fails (exits with a\nnonzero status).\n@cindex @code{-e} (shell flag)\n\n@cindex @code{-MM} (to GNU compiler)\nWith the GNU C compiler, you may wish to use the @samp{-MM} flag instead\nof @samp{-M}.  This omits prerequisites on system header files.\n@xref{Preprocessor Options, , Options Controlling the Preprocessor,\ngcc.info, Using GNU CC}, for details.\n\n@cindex @code{sed} (shell command)\nThe purpose of the @code{sed} command is to translate (for example):\n\n@example\nmain.o : main.c defs.h\n@end example\n\n@noindent\ninto:\n\n@example\nmain.o main.d : main.c defs.h\n@end example\n\n@noindent\n@cindex @code{.d}\nThis makes each @samp{.d} file depend on all the source and header files\nthat the corresponding @samp{.o} file depends on.  @code{make} then\nknows it must regenerate the prerequisites whenever any of the source or\nheader files changes.\n\nOnce you've defined the rule to remake the @samp{.d} files,\nyou then use the @code{include} directive to read them all in.\n@xref{Include}.  For example:\n\n@example\n@group\nsources = foo.c bar.c\n\ninclude $(sources:.c=.d)\n@end group\n@end example\n\n@noindent\n(This example uses a substitution variable reference to translate the\nlist of source files @samp{foo.c bar.c} into a list of prerequisite\nmakefiles, @samp{foo.d bar.d}.  @xref{Substitution Refs}, for full\ninformation on substitution references.)  Since the @samp{.d} files are\nmakefiles like any others, @code{make} will remake them as necessary\nwith no further work from you.  @xref{Remaking Makefiles}.\n\nNote that the @samp{.d} files contain target definitions; you should\nbe sure to place the @code{include} directive @emph{after} the first,\ndefault goal in your makefiles or run the risk of having a random\nobject file become the default goal.\n@xref{How Make Works}.\n\n@node Commands, Using Variables, Rules, Top\n@chapter Writing the Commands in Rules\n@cindex commands, how to write\n@cindex rule commands\n@cindex writing rule commands\n\nThe commands of a rule consist of one or more shell command lines to\nbe executed, one at a time, in the order they appear.  Typically, the\nresult of executing these commands is that the target of the rule is\nbrought up to date.\n\nUsers use many different shell programs, but commands in makefiles are\nalways interpreted by @file{/bin/sh} unless the makefile specifies\notherwise.  @xref{Execution, ,Command Execution}.\n\n@menu\n* Command Syntax::              Command syntax features and pitfalls.\n* Echoing::                     How to control when commands are echoed.\n* Execution::                   How commands are executed.\n* Parallel::                    How commands can be executed in parallel.\n* Errors::                      What happens after a command execution error.\n* Interrupts::                  What happens when a command is interrupted.\n* Recursion::                   Invoking @code{make} from makefiles.\n* Sequences::                   Defining canned sequences of commands.\n* Empty Commands::              Defining useful, do-nothing commands.\n@end menu\n\n@node Command Syntax, Echoing, Commands, Commands\n@section Command Syntax\n@cindex command syntax\n@cindex syntax of commands\n\nMakefiles have the unusual property that there are really two distinct\nsyntaxes in one file.  Most of the makefile uses @code{make} syntax\n(@pxref{Makefiles, ,Writing Makefiles}).  However, commands are meant to be\ninterpreted by the shell and so they are written using shell syntax.\nThe @code{make} program does not try to understand shell syntax: it\nperforms only a very few specific translations on the content of the\ncommand before handing it to the shell.\n\nEach command line must start with a tab, except that the first command\nline may be attached to the target-and-prerequisites line with a\nsemicolon in between.  @emph{Any} line in the makefile that begins\nwith a tab and appears in a ``rule context'' (that is, after a rule\nhas been started until another rule or variable definition) will be\nconsidered a command line for that rule.  Blank lines and lines of\njust comments may appear among the command lines; they are ignored.\n\nSome consequences of these rules include:\n\n@itemize @bullet\n@item\nA blank line that begins with a tab is not blank: it's an empty\ncommand (@pxref{Empty Commands}).\n\n@cindex comments, in commands\n@cindex commands, comments in\n@cindex @code{#} (comments), in commands\n@item\nA comment in a command line is not a @code{make} comment; it will be\npassed to the shell as-is.  Whether the shell treats it as a comment\nor not depends on your shell.\n\n@item\nA variable definition in a ``rule context'' which is indented by a tab\nas the first character on the line, will be considered a command line,\nnot a @code{make} variable definition, and passed to the shell.\n\n@item\nA conditional expression (@code{ifdef}, @code{ifeq},\netc. @pxref{Conditional Syntax, ,Syntax of Conditionals}) in a ``rule\ncontext'' which is indented by a tab as the first character on the\nline, will be considered a command line and be passed to the shell.\n\n@end itemize\n\n@menu\n* Splitting Lines::             Breaking long command lines for readability.\n* Variables in Commands::       Using @code{make} variables in commands.\n@end menu\n\n@node Splitting Lines, Variables in Commands, Command Syntax, Command Syntax\n@subsection Splitting Command Lines\n@cindex commands, splitting\n@cindex splitting commands\n@cindex commands, backslash (@code{\\}) in\n@cindex commands, quoting newlines in\n@cindex backslash (@code{\\}), in commands\n@cindex @code{\\} (backslash), in commands\n@cindex quoting newline, in commands\n@cindex newline, quoting, in commands\n\nOne of the few ways in which @code{make} does interpret command lines\nis checking for a backslash just before the newline.  As in normal\nmakefile syntax, a single command can be split into multiple lines in\nthe makefile by placing a backslash before each newline.  A sequence\nof lines like this is considered a single command, and one instance of\nthe shell will be invoked to run it.\n\nHowever, in contrast to how they are treated in other places in a\nmakefile, backslash-newline pairs are @emph{not} removed from the\ncommand.  Both the backslash and the newline characters are preserved\nand passed to the shell.  How the backslash-newline is interpreted\ndepends on your shell.  If the first character of the next line\nafter the backslash-newline is a tab, then that tab (and only that\ntab) is removed.  Whitespace is never added to the command.\n\nFor example, this makefile:\n\n@example\n@group\nall :\n        @@echo no\\\nspace\n        @@echo no\\\n        space\n        @@echo one \\\n        space\n        @@echo one\\\n         space\n@end group\n@end example\n\n@noindent\nconsists of four separate shell commands where the output is:\n\n@example\n@group\nnospace\nnospace\none space\none space\n@end group\n@end example\n\nAs a more complex example, this makefile:\n\n@example\n@group\nall : ; @@echo 'hello \\\n        world' ; echo \"hello \\\n    world\"\n@end group\n@end example\n\n@noindent\nwill run one shell with a command script of:\n\n@example\n@group\necho 'hello \\\nworld' ; echo \"hello \\\n    world\"\n@end group\n@end example\n\n@noindent\nwhich, according to shell quoting rules, will yield the following output:\n\n@example\n@group\nhello \\\nworld\nhello     world\n@end group\n@end example\n\n@noindent\nNotice how the backslash/newline pair was removed inside the string quoted\nwith double quotes (@code{\"...\"}), but not from the string quoted with single\nquotes (@code{'...'}).  This is the way the default shell (@file{/bin/sh})\nhandles backslash/newline pairs.  If you specify a different shell in your\nmakefiles it may treat them differently.\n\nSometimes you want to split a long line inside of single quotes, but\nyou don't want the backslash-newline to appear in the quoted content.\nThis is often the case when passing scripts to languages such as Perl,\nwhere extraneous backslashes inside the script can change its meaning\nor even be a syntax error.  One simple way of handling this is to\nplace the quoted string, or even the entire command, into a\n@code{make} variable then use the variable in the command.  In this\nsituation the newline quoting rules for makefiles will be used, and\nthe backslash-newline will be removed.  If we rewrite our example\nabove using this method:\n\n@example\n@group\nHELLO = 'hello \\\nworld'\n\nall : ; @@echo $(HELLO)\n@end group\n@end example\n\n@noindent\nwe will get output like this:\n\n@example\n@group\nhello world\n@end group\n@end example\n\nIf you like, you can also use target-specific variables\n(@pxref{Target-specific, ,Target-specific Variable Values}) to obtain\na tighter correspondence between the variable and the command that\nuses it.\n\n@node Variables in Commands,  , Splitting Lines, Command Syntax\n@subsection Using Variables in Commands\n@cindex variable references in commands\n@cindex commands, using variables in\n\nThe other way in which @code{make} processes commands is by expanding\nany variable references in them (@pxref{Reference,Basics of Variable\nReferences}).  This occurs after make has finished reading all the\nmakefiles and the target is determined to be out of date; so, the\ncommands for targets which are not rebuilt are never expanded.\n\nVariable and function references in commands have identical syntax and\nsemantics to references elsewhere in the makefile.  They also have the\nsame quoting rules: if you want a dollar sign to appear in your\ncommand, you must double it (@samp{$$}).  For shells like the default\nshell, that use dollar signs to introduce variables, it's important to\nkeep clear in your mind whether the variable you want to reference is\na @code{make} variable (use a single dollar sign) or a shell variable\n(use two dollar signs).  For example:\n\n@example\n@group\nLIST = one two three\nall:\n        for i in $(LIST); do \\\n            echo $$i; \\\n        done\n@end group\n@end example\n\n@noindent\nresults in the following command being passed to the shell:\n\n@example\n@group\nfor i in one two three; do \\\n    echo $i; \\\ndone\n@end group\n@end example\n\n@noindent\nwhich generates the expected result:\n\n@example\n@group\none\ntwo\nthree\n@end group\n@end example\n\n@node Echoing, Execution, Command Syntax, Commands\n@section Command Echoing\n@cindex echoing of commands\n@cindex silent operation\n@cindex @code{@@} (in commands)\n@cindex commands, echoing\n@cindex printing of commands\n\nNormally @code{make} prints each command line before it is executed.\nWe call this @dfn{echoing} because it gives the appearance that you\nare typing the commands yourself.\n\nWhen a line starts with @samp{@@}, the echoing of that line is suppressed.\nThe @samp{@@} is discarded before the command is passed to the shell.\nTypically you would use this for a command whose only effect is to print\nsomething, such as an @code{echo} command to indicate progress through\nthe makefile:\n\n@example\n@@echo About to make distribution files\n@end example\n\n@cindex @code{-n}\n@cindex @code{--just-print}\n@cindex @code{--dry-run}\n@cindex @code{--recon}\nWhen @code{make} is given the flag @samp{-n} or @samp{--just-print}\nit only echoes commands, it won't execute them.  @xref{Options Summary,\n,Summary of Options}.  In this case and only this case, even the\ncommands starting with @samp{@@} are printed.  This flag is useful for\nfinding out which commands @code{make} thinks are necessary without\nactually doing them.\n\n@cindex @code{-s}\n@cindex @code{--silent}\n@cindex @code{--quiet}\n@findex .SILENT\nThe @samp{-s} or @samp{--silent}\nflag to @code{make} prevents all echoing, as if all commands\nstarted with @samp{@@}.  A rule in the makefile for the special target\n@code{.SILENT} without prerequisites has the same effect\n(@pxref{Special Targets, ,Special Built-in Target Names}).\n@code{.SILENT} is essentially obsolete since @samp{@@} is more flexible.@refill\n\n@node Execution, Parallel, Echoing, Commands\n@section Command Execution\n@cindex commands, execution\n@cindex execution, of commands\n@cindex shell command, execution\n@vindex @code{SHELL} @r{(command execution)}\n\nWhen it is time to execute commands to update a target, they are\nexecuted by invoking a new subshell for each command line.  (In\npractice, @code{make} may take shortcuts that do not affect the\nresults.)\n\n@cindex @code{cd} (shell command)\n@cindex shell variables, setting in commands\n@cindex commands setting shell variables\n@strong{Please note:} this implies that setting shell variables and\ninvoking shell commands such as @code{cd} that set a context local to\neach process will not affect the following command lines.@footnote{On\nMS-DOS, the value of current working directory is @strong{global}, so\nchanging it @emph{will} affect the following command lines on those\nsystems.}  If you want to use @code{cd} to affect the next statement,\nput both statements in a single command line.  Then @code{make} will\ninvoke one shell to run the entire line, and the shell will execute\nthe statements in sequence.  For example:\n\n@example\nfoo : bar/lose\n        cd $(@@D) && gobble $(@@F) > ../$@@\n@end example\n\n@noindent\nHere we use the shell AND operator (@code{&&}) so that if the\n@code{cd} command fails, the script will fail without trying to invoke\nthe @code{gobble} command in the wrong directory, which could cause\nproblems (in this case it would certainly cause @file{../foo} to be\ntruncated, at least).\n\n@menu\n* Choosing the Shell::          How @code{make} chooses the shell used\n                                  to run commands.\n@end menu\n\n@node Choosing the Shell,  , Execution, Execution\n@subsection Choosing the Shell\n@cindex shell, choosing the\n@cindex @code{SHELL}, value of\n\n@vindex SHELL\nThe program used as the shell is taken from the variable @code{SHELL}.\nIf this variable is not set in your makefile, the program\n@file{/bin/sh} is used as the shell.\n\n@cindex environment, @code{SHELL} in\nUnlike most variables, the variable @code{SHELL} is never set from the\nenvironment.  This is because the @code{SHELL} environment variable is\nused to specify your personal choice of shell program for interactive\nuse.  It would be very bad for personal choices like this to affect the\nfunctioning of makefiles.  @xref{Environment, ,Variables from the\nEnvironment}.\n\nFurthermore, when you do set @code{SHELL} in your makefile that value\nis @emph{not} exported in the environment to commands that @code{make}\ninvokes.  Instead, the value inherited from the user's environment, if\nany, is exported.  You can override this behavior by explicitly\nexporting @code{SHELL} (@pxref{Variables/Recursion, ,Communicating\nVariables to a Sub-@code{make}}), forcing it to be passed in the\nenvironment to commands.\n\n@vindex @code{MAKESHELL} @r{(MS-DOS alternative to @code{SHELL})}\nHowever, on MS-DOS and MS-Windows the value of @code{SHELL} in the\nenvironment @strong{is} used, since on those systems most users do not\nset this variable, and therefore it is most likely set specifically to\nbe used by @code{make}.  On MS-DOS, if the setting of @code{SHELL} is\nnot suitable for @code{make}, you can set the variable\n@code{MAKESHELL} to the shell that @code{make} should use; if set it\nwill be used as the shell instead of the value of @code{SHELL}.\n\n@subsubheading Choosing a Shell in DOS and Windows\n@cindex shell, in DOS and Windows\n@cindex DOS, choosing a shell in\n@cindex Windows, choosing a shell in\n\nChoosing a shell in MS-DOS and MS-Windows is much more complex than on\nother systems.\n\n@vindex COMSPEC\nOn MS-DOS, if @code{SHELL} is not set, the value of the variable\n@code{COMSPEC} (which is always set) is used instead.\n\n@cindex @code{SHELL}, MS-DOS specifics\nThe processing of lines that set the variable @code{SHELL} in Makefiles\nis different on MS-DOS.  The stock shell, @file{command.com}, is\nridiculously limited in its functionality and many users of @code{make}\ntend to install a replacement shell.  Therefore, on MS-DOS, @code{make}\nexamines the value of @code{SHELL}, and changes its behavior based on\nwhether it points to a Unix-style or DOS-style shell.  This allows\nreasonable functionality even if @code{SHELL} points to\n@file{command.com}.\n\nIf @code{SHELL} points to a Unix-style shell, @code{make} on MS-DOS\nadditionally checks whether that shell can indeed be found; if not, it\nignores the line that sets @code{SHELL}.  In MS-DOS, GNU @code{make}\nsearches for the shell in the following places:\n\n@enumerate\n@item\nIn the precise place pointed to by the value of @code{SHELL}.  For\nexample, if the makefile specifies @samp{SHELL = /bin/sh}, @code{make}\nwill look in the directory @file{/bin} on the current drive.\n\n@item\nIn the current directory.\n\n@item\nIn each of the directories in the @code{PATH} variable, in order.\n\n@end enumerate\n\nIn every directory it examines, @code{make} will first look for the\nspecific file (@file{sh} in the example above).  If this is not found,\nit will also look in that directory for that file with one of the known\nextensions which identify executable files.  For example @file{.exe},\n@file{.com}, @file{.bat}, @file{.btm}, @file{.sh}, and some others.\n\nIf any of these attempts is successful, the value of @code{SHELL} will\nbe set to the full pathname of the shell as found.  However, if none of\nthese is found, the value of @code{SHELL} will not be changed, and thus\nthe line that sets it will be effectively ignored.  This is so\n@code{make} will only support features specific to a Unix-style shell if\nsuch a shell is actually installed on the system where @code{make} runs.\n\nNote that this extended search for the shell is limited to the cases\nwhere @code{SHELL} is set from the Makefile; if it is set in the\nenvironment or command line, you are expected to set it to the full\npathname of the shell, exactly as things are on Unix.\n\nThe effect of the above DOS-specific processing is that a Makefile that\ncontains @samp{SHELL = /bin/sh} (as many Unix makefiles do), will work\non MS-DOS unaltered if you have e.g.@: @file{sh.exe} installed in some\ndirectory along your @code{PATH}.\n\n@node Parallel, Errors, Execution, Commands\n@section Parallel Execution\n@cindex commands, execution in parallel\n@cindex parallel execution\n@cindex execution, in parallel\n@cindex job slots\n@cindex @code{-j}\n@cindex @code{--jobs}\n\nGNU @code{make} knows how to execute several commands at once.\nNormally, @code{make} will execute only one command at a time, waiting\nfor it to finish before executing the next.  However, the @samp{-j} or\n@samp{--jobs} option tells @code{make} to execute many commands\nsimultaneously.@refill\n\nOn MS-DOS, the @samp{-j} option has no effect, since that system doesn't\nsupport multi-processing.\n\nIf the @samp{-j} option is followed by an integer, this is the number of\ncommands to execute at once; this is called the number of @dfn{job slots}.\nIf there is nothing looking like an integer after the @samp{-j} option,\nthere is no limit on the number of job slots.  The default number of job\nslots is one, which means serial execution (one thing at a time).\n\nOne unpleasant consequence of running several commands simultaneously is\nthat output generated by the commands appears whenever each command\nsends it, so messages from different commands may be interspersed.\n\nAnother problem is that two processes cannot both take input from the\nsame device; so to make sure that only one command tries to take input\nfrom the terminal at once, @code{make} will invalidate the standard\ninput streams of all but one running command.  This means that\nattempting to read from standard input will usually be a fatal error (a\n@samp{Broken pipe} signal) for most child processes if there are\nseveral.\n@cindex broken pipe\n@cindex standard input\n\nIt is unpredictable which command will have a valid standard input stream\n(which will come from the terminal, or wherever you redirect the standard\ninput of @code{make}).  The first command run will always get it first, and\nthe first command started after that one finishes will get it next, and so\non.\n\nWe will change how this aspect of @code{make} works if we find a better\nalternative.  In the mean time, you should not rely on any command using\nstandard input at all if you are using the parallel execution feature; but\nif you are not using this feature, then standard input works normally in\nall commands.\n\nFinally, handling recursive @code{make} invocations raises issues.  For\nmore information on this, see\n@ref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}.\n\nIf a command fails (is killed by a signal or exits with a nonzero\nstatus), and errors are not ignored for that command\n(@pxref{Errors, ,Errors in Commands}),\nthe remaining command lines to remake the same target will not be run.\nIf a command fails and the @samp{-k} or @samp{--keep-going}\noption was not given\n(@pxref{Options Summary, ,Summary of Options}),\n@code{make} aborts execution.  If make\nterminates for any reason (including a signal) with child processes\nrunning, it waits for them to finish before actually exiting.@refill\n\n@cindex load average\n@cindex limiting jobs based on load\n@cindex jobs, limiting based on load\n@cindex @code{-l} (load average)\n@cindex @code{--max-load}\n@cindex @code{--load-average}\nWhen the system is heavily loaded, you will probably want to run fewer jobs\nthan when it is lightly loaded.  You can use the @samp{-l} option to tell\n@code{make} to limit the number of jobs to run at once, based on the load\naverage.  The @samp{-l} or @samp{--max-load}\noption is followed by a floating-point number.  For\nexample,\n\n@example\n-l 2.5\n@end example\n\n@noindent\nwill not let @code{make} start more than one job if the load average is\nabove 2.5.  The @samp{-l} option with no following number removes the\nload limit, if one was given with a previous @samp{-l} option.@refill\n\nMore precisely, when @code{make} goes to start up a job, and it already has\nat least one job running, it checks the current load average; if it is not\nlower than the limit given with @samp{-l}, @code{make} waits until the load\naverage goes below that limit, or until all the other jobs finish.\n\nBy default, there is no load limit.\n\n@node Errors, Interrupts, Parallel, Commands\n@section Errors in Commands\n@cindex errors (in commands)\n@cindex commands, errors in\n@cindex exit status (errors)\n\nAfter each shell command returns, @code{make} looks at its exit status.\nIf the command completed successfully, the next command line is executed\nin a new shell; after the last command line is finished, the rule is\nfinished.\n\nIf there is an error (the exit status is nonzero), @code{make} gives up on\nthe current rule, and perhaps on all rules.\n\nSometimes the failure of a certain command does not indicate a problem.\nFor example, you may use the @code{mkdir} command to ensure that a\ndirectory exists.  If the directory already exists, @code{mkdir} will\nreport an error, but you probably want @code{make} to continue regardless.\n\n@cindex @code{-} (in commands)\nTo ignore errors in a command line, write a @samp{-} at the beginning of\nthe line's text (after the initial tab).  The @samp{-} is discarded before\nthe command is passed to the shell for execution.\n\nFor example,\n\n@example\n@group\nclean:\n        -rm -f *.o\n@end group\n@end example\n@cindex @code{rm} (shell command)\n\n@noindent\nThis causes @code{rm} to continue even if it is unable to remove a file.\n\n@cindex @code{-i}\n@cindex @code{--ignore-errors}\n@findex .IGNORE\nWhen you run @code{make} with the @samp{-i} or @samp{--ignore-errors}\nflag, errors are ignored in all commands of all rules.  A rule in the\nmakefile for the special target @code{.IGNORE} has the same effect, if\nthere are no prerequisites.  These ways of ignoring errors are obsolete\nbecause @samp{-} is more flexible.\n\nWhen errors are to be ignored, because of either a @samp{-} or the\n@samp{-i} flag, @code{make} treats an error return just like success,\nexcept that it prints out a message that tells you the status code\nthe command exited with, and says that the error has been ignored.\n\nWhen an error happens that @code{make} has not been told to ignore,\nit implies that the current target cannot be correctly remade, and neither\ncan any other that depends on it either directly or indirectly.  No further\ncommands will be executed for these targets, since their preconditions\nhave not been achieved.\n\n\n@cindex @code{-k}\n@cindex @code{--keep-going}\nNormally @code{make} gives up immediately in this circumstance, returning a\nnonzero status.  However, if the @samp{-k} or @samp{--keep-going}\nflag is specified, @code{make}\ncontinues to consider the other prerequisites of the pending targets,\nremaking them if necessary, before it gives up and returns nonzero status.\nFor example, after an error in compiling one object file, @samp{make -k}\nwill continue compiling other object files even though it already knows\nthat linking them will be impossible.  @xref{Options Summary, ,Summary of Options}.\n\nThe usual behavior assumes that your purpose is to get the specified\ntargets up to date; once @code{make} learns that this is impossible, it\nmight as well report the failure immediately.  The @samp{-k} option says\nthat the real purpose is to test as many of the changes made in the\nprogram as possible, perhaps to find several independent problems so\nthat you can correct them all before the next attempt to compile.  This\nis why Emacs' @code{compile} command passes the @samp{-k} flag by\ndefault.\n@cindex Emacs (@code{M-x compile})\n\n@findex .DELETE_ON_ERROR\n@cindex deletion of target files\n@cindex removal of target files\n@cindex target, deleting on error\nUsually when a command fails, if it has changed the target file at all,\nthe file is corrupted and cannot be used---or at least it is not\ncompletely updated.  Yet the file's time stamp says that it is now up to\ndate, so the next time @code{make} runs, it will not try to update that\nfile.  The situation is just the same as when the command is killed by a\nsignal; @pxref{Interrupts}.  So generally the right thing to do is to\ndelete the target file if the command fails after beginning to change\nthe file.  @code{make} will do this if @code{.DELETE_ON_ERROR} appears\nas a target.  This is almost always what you want @code{make} to do, but\nit is not historical practice; so for compatibility, you must explicitly\nrequest it.\n\n@node Interrupts, Recursion, Errors, Commands\n@section Interrupting or Killing @code{make}\n@cindex interrupt\n@cindex signal\n@cindex deletion of target files\n@cindex removal of target files\n@cindex target, deleting on interrupt\n@cindex killing (interruption)\n\nIf @code{make} gets a fatal signal while a command is executing, it may\ndelete the target file that the command was supposed to update.  This is\ndone if the target file's last-modification time has changed since\n@code{make} first checked it.\n\nThe purpose of deleting the target is to make sure that it is remade from\nscratch when @code{make} is next run.  Why is this?  Suppose you type\n@kbd{Ctrl-c} while a compiler is running, and it has begun to write an\nobject file @file{foo.o}.  The @kbd{Ctrl-c} kills the compiler, resulting\nin an incomplete file whose last-modification time is newer than the source\nfile @file{foo.c}.  But @code{make} also receives the @kbd{Ctrl-c} signal\nand deletes this incomplete file.  If @code{make} did not do this, the next\ninvocation of @code{make} would think that @file{foo.o} did not require\nupdating---resulting in a strange error message from the linker when it\ntries to link an object file half of which is missing.\n\n@findex .PRECIOUS\nYou can prevent the deletion of a target file in this way by making the\nspecial target @code{.PRECIOUS} depend on it.  Before remaking a target,\n@code{make} checks to see whether it appears on the prerequisites of\n@code{.PRECIOUS}, and thereby decides whether the target should be deleted\nif a signal happens.  Some reasons why you might do this are that the\ntarget is updated in some atomic fashion, or exists only to record a\nmodification-time (its contents do not matter), or must exist at all\ntimes to prevent other sorts of trouble.\n\n@node Recursion, Sequences, Interrupts, Commands\n@section Recursive Use of @code{make}\n@cindex recursion\n@cindex subdirectories, recursion for\n\nRecursive use of @code{make} means using @code{make} as a command in a\nmakefile.  This technique is useful when you want separate makefiles for\nvarious subsystems that compose a larger system.  For example, suppose you\nhave a subdirectory @file{subdir} which has its own makefile, and you would\nlike the containing directory's makefile to run @code{make} on the\nsubdirectory.  You can do it by writing this:\n\n@example\nsubsystem:\n        cd subdir && $(MAKE)\n@end example\n\n@noindent\nor, equivalently, this (@pxref{Options Summary, ,Summary of Options}):\n\n@example\nsubsystem:\n        $(MAKE) -C subdir\n@end example\n@cindex @code{-C}\n@cindex @code{--directory}\n\nYou can write recursive @code{make} commands just by copying this example,\nbut there are many things to know about how they work and why, and about\nhow the sub-@code{make} relates to the top-level @code{make}.  You may\nalso find it useful to declare targets that invoke recursive\n@code{make} commands as @samp{.PHONY} (for more discussion on when\nthis is useful, see @ref{Phony Targets}).\n\n@vindex @code{CURDIR}\nFor your convenience, when GNU @code{make} starts (after it has\nprocessed any @code{-C} options) it sets the variable @code{CURDIR} to\nthe pathname of the current working directory.  This value is never\ntouched by @code{make} again: in particular note that if you include\nfiles from other directories the value of @code{CURDIR} does not\nchange.  The value has the same precedence it would have if it were\nset in the makefile (by default, an environment variable @code{CURDIR}\nwill not override this value).  Note that setting this variable has no\nimpact on the operation of @code{make} (it does not cause @code{make}\nto change its working directory, for example).\n\n@menu\n* MAKE Variable::               The special effects of using @samp{$(MAKE)}.\n* Variables/Recursion::         How to communicate variables to a sub-@code{make}.\n* Options/Recursion::           How to communicate options to a sub-@code{make}.\n* -w Option::                   How the @samp{-w} or @samp{--print-directory} option\n                                  helps debug use of recursive @code{make} commands.\n@end menu\n\n@node MAKE Variable, Variables/Recursion, Recursion, Recursion\n@subsection How the @code{MAKE} Variable Works\n@vindex MAKE\n@cindex recursion, and @code{MAKE} variable\n\nRecursive @code{make} commands should always use the variable @code{MAKE},\nnot the explicit command name @samp{make}, as shown here:\n\n@example\n@group\nsubsystem:\n        cd subdir && $(MAKE)\n@end group\n@end example\n\nThe value of this variable is the file name with which @code{make} was\ninvoked.  If this file name was @file{/bin/make}, then the command executed\nis @samp{cd subdir && /bin/make}.  If you use a special version of\n@code{make} to run the top-level makefile, the same special version will be\nexecuted for recursive invocations.\n@cindex @code{cd} (shell command)\n\n@cindex +, and commands\nAs a special feature, using the variable @code{MAKE} in the commands of\na rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n}\n(@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option.\nUsing the @code{MAKE} variable has the same effect as using a @samp{+}\ncharacter at the beginning of the command line.  @xref{Instead of\nExecution, ,Instead of Executing the Commands}.  This special feature\nis only enabled if the @code{MAKE} variable appears directly in the\ncommand script: it does not apply if the @code{MAKE} variable is\nreferenced through expansion of another variable.  In the latter case\nyou must use the @samp{+} token to get these special effects.@refill\n\nConsider the command @samp{make -t} in the above example.  (The\n@samp{-t} option marks targets as up to date without actually running\nany commands; see @ref{Instead of Execution}.)  Following the usual\ndefinition of @samp{-t}, a @samp{make -t} command in the example would\ncreate a file named @file{subsystem} and do nothing else.  What you\nreally want it to do is run @samp{@w{cd subdir &&} @w{make -t}}; but that would\nrequire executing the command, and @samp{-t} says not to execute\ncommands.@refill\n@cindex @code{-t}, and recursion\n@cindex recursion, and @code{-t}\n@cindex @code{--touch}, and recursion\n\nThe special feature makes this do what you want: whenever a command\nline of a rule contains the variable @code{MAKE}, the flags @samp{-t},\n@samp{-n} and @samp{-q} do not apply to that line.  Command lines\ncontaining @code{MAKE} are executed normally despite the presence of a\nflag that causes most commands not to be run.  The usual\n@code{MAKEFLAGS} mechanism passes the flags to the sub-@code{make}\n(@pxref{Options/Recursion, ,Communicating Options to a\nSub-@code{make}}), so your request to touch the files, or print the\ncommands, is propagated to the subsystem.@refill\n\n@node Variables/Recursion, Options/Recursion, MAKE Variable, Recursion\n@subsection Communicating Variables to a Sub-@code{make}\n@cindex sub-@code{make}\n@cindex environment, and recursion\n@cindex exporting variables\n@cindex variables, environment\n@cindex variables, exporting\n@cindex recursion, and environment\n@cindex recursion, and variables\n\nVariable values of the top-level @code{make} can be passed to the\nsub-@code{make} through the environment by explicit request.  These\nvariables are defined in the sub-@code{make} as defaults, but do not\noverride what is specified in the makefile used by the sub-@code{make}\nmakefile unless you use the @samp{-e} switch (@pxref{Options Summary,\n,Summary of Options}).@refill\n\nTo pass down, or @dfn{export}, a variable, @code{make} adds the variable\nand its value to the environment for running each command.  The\nsub-@code{make}, in turn, uses the environment to initialize its table\nof variable values.  @xref{Environment, ,Variables from the\nEnvironment}.\n\nExcept by explicit request, @code{make} exports a variable only if it\nis either defined in the environment initially or set on the command\nline, and if its name consists only of letters, numbers, and underscores.\nSome shells cannot cope with environment variable names consisting of\ncharacters other than letters, numbers, and underscores.\n\n@cindex SHELL, exported value\nThe value of the @code{make} variable @code{SHELL} is not exported.\nInstead, the value of the @code{SHELL} variable from the invoking\nenvironment is passed to the sub-@code{make}.  You can force\n@code{make} to export its value for @code{SHELL} by using the\n@code{export} directive, described below.  @xref{Choosing the Shell}.\n\nThe special variable @code{MAKEFLAGS} is always exported (unless you\nunexport it).  @code{MAKEFILES} is exported if you set it to anything.\n\n@code{make} automatically passes down variable values that were defined\non the command line, by putting them in the @code{MAKEFLAGS} variable.\n@iftex\nSee the next section.\n@end iftex\n@ifnottex\n@xref{Options/Recursion}.\n@end ifnottex\n\nVariables are @emph{not} normally passed down if they were created by\ndefault by @code{make} (@pxref{Implicit Variables, ,Variables Used by\nImplicit Rules}).  The sub-@code{make} will define these for\nitself.@refill\n\n@findex export\nIf you want to export specific variables to a sub-@code{make}, use the\n@code{export} directive, like this:\n\n@example\nexport @var{variable} @dots{}\n@end example\n\n@noindent\n@findex unexport\nIf you want to @emph{prevent} a variable from being exported, use the\n@code{unexport} directive, like this:\n\n@example\nunexport @var{variable} @dots{}\n@end example\n\n@noindent\nIn both of these forms, the arguments to @code{export} and\n@code{unexport} are expanded, and so could be variables or functions\nwhich expand to a (list of) variable names to be (un)exported.\n\nAs a convenience, you can define a variable and export it at the same\ntime by doing:\n\n@example\nexport @var{variable} = value\n@end example\n\n@noindent\nhas the same result as:\n\n@example\n@var{variable} = value\nexport @var{variable}\n@end example\n\n@noindent\nand\n\n@example\nexport @var{variable} := value\n@end example\n\n@noindent\nhas the same result as:\n\n@example\n@var{variable} := value\nexport @var{variable}\n@end example\n\nLikewise,\n\n@example\nexport @var{variable} += value\n@end example\n\n@noindent\nis just like:\n\n@example\n@var{variable} += value\nexport @var{variable}\n@end example\n\n@noindent\n@xref{Appending, ,Appending More Text to Variables}.\n\nYou may notice that the @code{export} and @code{unexport} directives\nwork in @code{make} in the same way they work in the shell, @code{sh}.\n\nIf you want all variables to be exported by default, you can use\n@code{export} by itself:\n\n@example\nexport\n@end example\n\n@noindent\nThis tells @code{make} that variables which are not explicitly mentioned\nin an @code{export} or @code{unexport} directive should be exported.\nAny variable given in an @code{unexport} directive will still @emph{not}\nbe exported.  If you use @code{export} by itself to export variables by\ndefault, variables whose names contain characters other than\nalphanumerics and underscores will not be exported unless specifically\nmentioned in an @code{export} directive.@refill\n\n@findex .EXPORT_ALL_VARIABLES\nThe behavior elicited by an @code{export} directive by itself was the\ndefault in older versions of GNU @code{make}.  If your makefiles depend\non this behavior and you want to be compatible with old versions of\n@code{make}, you can write a rule for the special target\n@code{.EXPORT_ALL_VARIABLES} instead of using the @code{export} directive.\nThis will be ignored by old @code{make}s, while the @code{export}\ndirective will cause a syntax error.@refill\n@cindex compatibility in exporting\n\nLikewise, you can use @code{unexport} by itself to tell @code{make}\n@emph{not} to export variables by default.  Since this is the default\nbehavior, you would only need to do this if @code{export} had been used\nby itself earlier (in an included makefile, perhaps).  You\n@strong{cannot} use @code{export} and @code{unexport} by themselves to\nhave variables exported for some commands and not for others.  The last\n@code{export} or @code{unexport} directive that appears by itself\ndetermines the behavior for the entire run of @code{make}.@refill\n\n@vindex MAKELEVEL\n@cindex recursion, level of\nAs a special feature, the variable @code{MAKELEVEL} is changed when it\nis passed down from level to level.  This variable's value is a string\nwhich is the depth of the level as a decimal number.  The value is\n@samp{0} for the top-level @code{make}; @samp{1} for a sub-@code{make},\n@samp{2} for a sub-sub-@code{make}, and so on.  The incrementation\nhappens when @code{make} sets up the environment for a command.@refill\n\nThe main use of @code{MAKELEVEL} is to test it in a conditional\ndirective (@pxref{Conditionals, ,Conditional Parts of Makefiles}); this\nway you can write a makefile that behaves one way if run recursively and\nanother way if run directly by you.@refill\n\n@vindex MAKEFILES\nYou can use the variable @code{MAKEFILES} to cause all sub-@code{make}\ncommands to use additional makefiles.  The value of @code{MAKEFILES} is\na whitespace-separated list of file names.  This variable, if defined in\nthe outer-level makefile, is passed down through the environment; then\nit serves as a list of extra makefiles for the sub-@code{make} to read\nbefore the usual or specified ones.  @xref{MAKEFILES Variable, ,The\nVariable @code{MAKEFILES}}.@refill\n\n@node Options/Recursion, -w Option, Variables/Recursion, Recursion\n@subsection Communicating Options to a Sub-@code{make}\n@cindex options, and recursion\n@cindex recursion, and options\n\n@vindex MAKEFLAGS\nFlags such as @samp{-s} and @samp{-k} are passed automatically to the\nsub-@code{make} through the variable @code{MAKEFLAGS}.  This variable is\nset up automatically by @code{make} to contain the flag letters that\n@code{make} received.  Thus, if you do @w{@samp{make -ks}} then\n@code{MAKEFLAGS} gets the value @samp{ks}.@refill\n\nAs a consequence, every sub-@code{make} gets a value for @code{MAKEFLAGS}\nin its environment.  In response, it takes the flags from that value and\nprocesses them as if they had been given as arguments.\n@xref{Options Summary, ,Summary of Options}.\n\n@cindex command line variable definitions, and recursion\n@cindex variables, command line, and recursion\n@cindex recursion, and command line variable definitions\nLikewise variables defined on the command line are passed to the\nsub-@code{make} through @code{MAKEFLAGS}.  Words in the value of\n@code{MAKEFLAGS} that contain @samp{=}, @code{make} treats as variable\ndefinitions just as if they appeared on the command line.\n@xref{Overriding, ,Overriding Variables}.\n\n@cindex @code{-C}, and recursion\n@cindex @code{-f}, and recursion\n@cindex @code{-o}, and recursion\n@cindex @code{-W}, and recursion\n@cindex @code{--directory}, and recursion\n@cindex @code{--file}, and recursion\n@cindex @code{--old-file}, and recursion\n@cindex @code{--assume-old}, and recursion\n@cindex @code{--assume-new}, and recursion\n@cindex @code{--new-file}, and recursion\n@cindex recursion, and @code{-C}\n@cindex recursion, and @code{-f}\n@cindex recursion, and @code{-o}\n@cindex recursion, and @code{-W}\nThe options @samp{-C}, @samp{-f}, @samp{-o}, and @samp{-W} are not put\ninto @code{MAKEFLAGS}; these options are not passed down.@refill\n\n@cindex @code{-j}, and recursion\n@cindex @code{--jobs}, and recursion\n@cindex recursion, and @code{-j}\n@cindex job slots, and recursion\nThe @samp{-j} option is a special case (@pxref{Parallel, ,Parallel Execution}).\nIf you set it to some numeric value @samp{N} and your operating system\nsupports it (most any UNIX system will; others typically won't), the\nparent @code{make} and all the sub-@code{make}s will communicate to\nensure that there are only @samp{N} jobs running at the same time\nbetween them all.  Note that any job that is marked recursive\n(@pxref{Instead of Execution, ,Instead of Executing the Commands})\ndoesn't count against the total jobs (otherwise we could get @samp{N}\nsub-@code{make}s running and have no slots left over for any real work!)\n\nIf your operating system doesn't support the above communication, then\n@samp{-j 1} is always put into @code{MAKEFLAGS} instead of the value you\nspecified.  This is because if the @w{@samp{-j}} option were passed down\nto sub-@code{make}s, you would get many more jobs running in parallel\nthan you asked for.  If you give @samp{-j} with no numeric argument,\nmeaning to run as many jobs as possible in parallel, this is passed\ndown, since multiple infinities are no more than one.@refill\n\nIf you do not want to pass the other flags down, you must change the\nvalue of @code{MAKEFLAGS}, like this:\n\n@example\nsubsystem:\n        cd subdir && $(MAKE) MAKEFLAGS=\n@end example\n\n@vindex MAKEOVERRIDES\nThe command line variable definitions really appear in the variable\n@code{MAKEOVERRIDES}, and @code{MAKEFLAGS} contains a reference to this\nvariable.  If you do want to pass flags down normally, but don't want to\npass down the command line variable definitions, you can reset\n@code{MAKEOVERRIDES} to empty, like this:\n\n@example\nMAKEOVERRIDES =\n@end example\n\n@noindent\n@cindex Arg list too long\n@cindex E2BIG\nThis is not usually useful to do.  However, some systems have a small\nfixed limit on the size of the environment, and putting so much\ninformation into the value of @code{MAKEFLAGS} can exceed it.  If you\nsee the error message @samp{Arg list too long}, this may be the problem.\n@findex .POSIX\n@cindex POSIX.2\n(For strict compliance with POSIX.2, changing @code{MAKEOVERRIDES} does\nnot affect @code{MAKEFLAGS} if the special target @samp{.POSIX} appears\nin the makefile.  You probably do not care about this.)\n\n@vindex MFLAGS\nA similar variable @code{MFLAGS} exists also, for historical\ncompatibility.  It has the same value as @code{MAKEFLAGS} except that it\ndoes not contain the command line variable definitions, and it always\nbegins with a hyphen unless it is empty (@code{MAKEFLAGS} begins with a\nhyphen only when it begins with an option that has no single-letter\nversion, such as @samp{--warn-undefined-variables}).  @code{MFLAGS} was\ntraditionally used explicitly in the recursive @code{make} command, like\nthis:\n\n@example\nsubsystem:\n        cd subdir && $(MAKE) $(MFLAGS)\n@end example\n\n@noindent\nbut now @code{MAKEFLAGS} makes this usage redundant.  If you want your\nmakefiles to be compatible with old @code{make} programs, use this\ntechnique; it will work fine with more modern @code{make} versions too.\n\n@cindex setting options from environment\n@cindex options, setting from environment\n@cindex setting options in makefiles\n@cindex options, setting in makefiles\nThe @code{MAKEFLAGS} variable can also be useful if you want to have\ncertain options, such as @samp{-k} (@pxref{Options Summary, ,Summary of\nOptions}), set each time you run @code{make}.  You simply put a value for\n@code{MAKEFLAGS} in your environment.  You can also set @code{MAKEFLAGS} in\na makefile, to specify additional flags that should also be in effect for\nthat makefile.  (Note that you cannot use @code{MFLAGS} this way.  That\nvariable is set only for compatibility; @code{make} does not interpret a\nvalue you set for it in any way.)\n\nWhen @code{make} interprets the value of @code{MAKEFLAGS} (either from the\nenvironment or from a makefile), it first prepends a hyphen if the value\ndoes not already begin with one.  Then it chops the value into words\nseparated by blanks, and parses these words as if they were options given\non the command line (except that @samp{-C}, @samp{-f}, @samp{-h},\n@samp{-o}, @samp{-W}, and their long-named versions are ignored; and there\nis no error for an invalid option).\n\nIf you do put @code{MAKEFLAGS} in your environment, you should be sure not\nto include any options that will drastically affect the actions of\n@code{make} and undermine the purpose of makefiles and of @code{make}\nitself.  For instance, the @samp{-t}, @samp{-n}, and @samp{-q} options, if\nput in one of these variables, could have disastrous consequences and would\ncertainly have at least surprising and probably annoying effects.@refill\n\n@node -w Option,  , Options/Recursion, Recursion\n@subsection The @samp{--print-directory} Option\n@cindex directories, printing them\n@cindex printing directories\n@cindex recursion, and printing directories\n\nIf you use several levels of recursive @code{make} invocations, the\n@samp{-w} or @w{@samp{--print-directory}} option can make the output a\nlot easier to understand by showing each directory as @code{make}\nstarts processing it and as @code{make} finishes processing it.  For\nexample, if @samp{make -w} is run in the directory @file{/u/gnu/make},\n@code{make} will print a line of the form:@refill\n\n@example\nmake: Entering directory `/u/gnu/make'.\n@end example\n\n@noindent\nbefore doing anything else, and a line of the form:\n\n@example\nmake: Leaving directory `/u/gnu/make'.\n@end example\n\n@noindent\nwhen processing is completed.\n\n@cindex @code{-C}, and @code{-w}\n@cindex @code{--directory}, and @code{--print-directory}\n@cindex recursion, and @code{-w}\n@cindex @code{-w}, and @code{-C}\n@cindex @code{-w}, and recursion\n@cindex @code{--print-directory}, and @code{--directory}\n@cindex @code{--print-directory}, and recursion\n@cindex @code{--no-print-directory}\n@cindex @code{--print-directory}, disabling\n@cindex @code{-w}, disabling\nNormally, you do not need to specify this option because @samp{make}\ndoes it for you: @samp{-w} is turned on automatically when you use the\n@samp{-C} option, and in sub-@code{make}s.  @code{make} will not\nautomatically turn on @samp{-w} if you also use @samp{-s}, which says to\nbe silent, or if you use @samp{--no-print-directory} to explicitly\ndisable it.\n\n@node Sequences, Empty Commands, Recursion, Commands\n@section Defining Canned Command Sequences\n@cindex sequences of commands\n@cindex commands, sequences of\n\nWhen the same sequence of commands is useful in making various targets, you\ncan define it as a canned sequence with the @code{define} directive, and\nrefer to the canned sequence from the rules for those targets.  The canned\nsequence is actually a variable, so the name must not conflict with other\nvariable names.\n\nHere is an example of defining a canned sequence of commands:\n\n@example\ndefine run-yacc\nyacc $(firstword $^)\nmv y.tab.c $@@\nendef\n@end example\n@cindex @code{yacc}\n\n@noindent\nHere @code{run-yacc} is the name of the variable being defined;\n@code{endef} marks the end of the definition; the lines in between are the\ncommands.  The @code{define} directive does not expand variable references\nand function calls in the canned sequence; the @samp{$} characters,\nparentheses, variable names, and so on, all become part of the value of the\nvariable you are defining.\n@xref{Defining, ,Defining Variables Verbatim},\nfor a complete explanation of @code{define}.\n\nThe first command in this example runs Yacc on the first prerequisite of\nwhichever rule uses the canned sequence.  The output file from Yacc is\nalways named @file{y.tab.c}.  The second command moves the output to the\nrule's target file name.\n\nTo use the canned sequence, substitute the variable into the commands of a\nrule.  You can substitute it like any other variable\n(@pxref{Reference, ,Basics of Variable References}).\nBecause variables defined by @code{define} are recursively expanded\nvariables, all the variable references you wrote inside the @code{define}\nare expanded now.  For example:\n\n@example\nfoo.c : foo.y\n        $(run-yacc)\n@end example\n\n@noindent\n@samp{foo.y} will be substituted for the variable @samp{$^} when it occurs in\n@code{run-yacc}'s value, and @samp{foo.c} for @samp{$@@}.@refill\n\nThis is a realistic example, but this particular one is not needed in\npractice because @code{make} has an implicit rule to figure out these\ncommands based on the file names involved\n(@pxref{Implicit Rules, ,Using Implicit Rules}).\n\n@cindex @@, and @code{define}\n@cindex -, and @code{define}\n@cindex +, and @code{define}\nIn command execution, each line of a canned sequence is treated just as\nif the line appeared on its own in the rule, preceded by a tab.  In\nparticular, @code{make} invokes a separate subshell for each line.  You\ncan use the special prefix characters that affect command lines\n(@samp{@@}, @samp{-}, and @samp{+}) on each line of a canned sequence.\n@xref{Commands, ,Writing the Commands in Rules}.\nFor example, using this canned sequence:\n\n@example\ndefine frobnicate\n@@echo \"frobnicating target $@@\"\nfrob-step-1 $< -o $@@-step-1\nfrob-step-2 $@@-step-1 -o $@@\nendef\n@end example\n\n@noindent\n@code{make} will not echo the first line, the @code{echo} command.\nBut it @emph{will} echo the following two command lines.\n\nOn the other hand, prefix characters on the command line that refers to\na canned sequence apply to every line in the sequence.  So the rule:\n\n@example\nfrob.out: frob.in\n        @@$(frobnicate)\n@end example\n\n@noindent\ndoes not echo @emph{any} commands.\n(@xref{Echoing, ,Command Echoing}, for a full explanation of @samp{@@}.)\n\n@node Empty Commands,  , Sequences, Commands\n@section Using Empty Commands\n@cindex empty commands\n@cindex commands, empty\n\nIt is sometimes useful to define commands which do nothing.  This is done\nsimply by giving a command that consists of nothing but whitespace.  For\nexample:\n\n@example\ntarget: ;\n@end example\n\n@noindent\ndefines an empty command string for @file{target}.  You could also use a\nline beginning with a tab character to define an empty command string,\nbut this would be confusing because such a line looks empty.\n\n@findex .DEFAULT@r{, and empty commands}\nYou may be wondering why you would want to define a command string that\ndoes nothing.  The only reason this is useful is to prevent a target\nfrom getting implicit commands (from implicit rules or the\n@code{.DEFAULT} special target; @pxref{Implicit Rules} and\n@pxref{Last Resort, ,Defining Last-Resort Default Rules}).@refill\n\n@c !!! another reason is for canonical stamp files:\n@ignore\n@example\nfoo: stamp-foo ;\nstamp-foo: foo.in\n        create foo frm foo.in\n        touch $@\n@end example\n@end ignore\n\nYou may be inclined to define empty command strings for targets that are\nnot actual files, but only exist so that their prerequisites can be\nremade.  However, this is not the best way to do that, because the\nprerequisites may not be remade properly if the target file actually does exist.\n@xref{Phony Targets, ,Phony Targets}, for a better way to do this.\n\n@node Using Variables, Conditionals, Commands, Top\n@chapter How to Use Variables\n@cindex variable\n@cindex value\n@cindex recursive variable expansion\n@cindex simple variable expansion\n\nA @dfn{variable} is a name defined in a makefile to represent a string\nof text, called the variable's @dfn{value}.  These values are\nsubstituted by explicit request into targets, prerequisites, commands,\nand other parts of the makefile.  (In some other versions of @code{make},\nvariables are called @dfn{macros}.)\n@cindex macro\n\nVariables and functions in all parts of a makefile are expanded when\nread, except for the shell commands in rules, the right-hand sides of\nvariable definitions using @samp{=}, and the bodies of variable\ndefinitions using the @code{define} directive.@refill\n\nVariables can represent lists of file names, options to pass to compilers,\nprograms to run, directories to look in for source files, directories to\nwrite output in, or anything else you can imagine.\n\nA variable name may be any sequence of characters not containing @samp{:},\n@samp{#}, @samp{=}, or leading or trailing whitespace.  However,\nvariable names containing characters other than letters, numbers, and\nunderscores should be avoided, as they may be given special meanings in the\nfuture, and with some shells they cannot be passed through the environment to a\nsub-@code{make}\n(@pxref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}).\n\nVariable names are case-sensitive.  The names @samp{foo}, @samp{FOO},\nand @samp{Foo} all refer to different variables.\n\nIt is traditional to use upper case letters in variable names, but we\nrecommend using lower case letters for variable names that serve internal\npurposes in the makefile, and reserving upper case for parameters that\ncontrol implicit rules or for parameters that the user should override with\ncommand options (@pxref{Overriding, ,Overriding Variables}).\n\nA few variables have names that are a single punctuation character or\njust a few characters.  These are the @dfn{automatic variables}, and\nthey have particular specialized uses.  @xref{Automatic Variables}.\n\n@menu\n* Reference::                   How to use the value of a variable.\n* Flavors::                     Variables come in two flavors.\n* Advanced::                    Advanced features for referencing a variable.\n* Values::                      All the ways variables get their values.\n* Setting::                     How to set a variable in the makefile.\n* Appending::                   How to append more text to the old value\n                                  of a variable.\n* Override Directive::          How to set a variable in the makefile even if\n                                  the user has set it with a command argument.\n* Defining::                    An alternate way to set a variable\n                                  to a verbatim string.\n* Environment::                 Variable values can come from the environment.\n* Target-specific::             Variable values can be defined on a per-target\n                                  basis.\n* Pattern-specific::            Target-specific variable values can be applied\n                                  to a group of targets that match a pattern.\n@end menu\n\n@node Reference, Flavors, Using Variables, Using Variables\n@section Basics of Variable References\n@cindex variables, how to reference\n@cindex reference to variables\n@cindex @code{$}, in variable reference\n@cindex dollar sign (@code{$}), in variable reference\n\nTo substitute a variable's value, write a dollar sign followed by the name\nof the variable in parentheses or braces: either @samp{$(foo)} or\n@samp{$@{foo@}} is a valid reference to the variable @code{foo}.  This\nspecial significance of @samp{$} is why you must write @samp{$$} to have\nthe effect of a single dollar sign in a file name or command.\n\nVariable references can be used in any context: targets, prerequisites,\ncommands, most directives, and new variable values.  Here is an\nexample of a common case, where a variable holds the names of all the\nobject files in a program:\n\n@example\n@group\nobjects = program.o foo.o utils.o\nprogram : $(objects)\n        cc -o program $(objects)\n\n$(objects) : defs.h\n@end group\n@end example\n\nVariable references work by strict textual substitution.  Thus, the rule\n\n@example\n@group\nfoo = c\nprog.o : prog.$(foo)\n        $(foo)$(foo) -$(foo) prog.$(foo)\n@end group\n@end example\n\n@noindent\ncould be used to compile a C program @file{prog.c}.  Since spaces before\nthe variable value are ignored in variable assignments, the value of\n@code{foo} is precisely @samp{c}.  (Don't actually write your makefiles\nthis way!)\n\nA dollar sign followed by a character other than a dollar sign,\nopen-parenthesis or open-brace treats that single character as the\nvariable name.  Thus, you could reference the variable @code{x} with\n@samp{$x}.  However, this practice is strongly discouraged, except in\nthe case of the automatic variables (@pxref{Automatic Variables}).\n\n@node Flavors, Advanced, Reference, Using Variables\n@section The Two Flavors of Variables\n@cindex flavors of variables\n@cindex recursive variable expansion\n@cindex variables, flavors\n@cindex recursively expanded variables\n@cindex variables, recursively expanded\n\nThere are two ways that a variable in GNU @code{make} can have a value;\nwe call them the two @dfn{flavors} of variables.  The two flavors are\ndistinguished in how they are defined and in what they do when expanded.\n\n@cindex =\nThe first flavor of variable is a @dfn{recursively expanded} variable.\nVariables of this sort are defined by lines using @samp{=}\n(@pxref{Setting, ,Setting Variables}) or by the @code{define} directive\n(@pxref{Defining, ,Defining Variables Verbatim}).  The value you specify\nis installed verbatim; if it contains references to other variables,\nthese references are expanded whenever this variable is substituted (in\nthe course of expanding some other string).  When this happens, it is\ncalled @dfn{recursive expansion}.@refill\n\nFor example,\n\n@example\nfoo = $(bar)\nbar = $(ugh)\nugh = Huh?\n\nall:;echo $(foo)\n@end example\n\n@noindent\nwill echo @samp{Huh?}: @samp{$(foo)} expands to @samp{$(bar)} which\nexpands to @samp{$(ugh)} which finally expands to @samp{Huh?}.@refill\n\nThis flavor of variable is the only sort supported by other versions of\n@code{make}.  It has its advantages and its disadvantages.  An advantage\n(most would say) is that:\n\n@example\nCFLAGS = $(include_dirs) -O\ninclude_dirs = -Ifoo -Ibar\n@end example\n\n@noindent\nwill do what was intended: when @samp{CFLAGS} is expanded in a command,\nit will expand to @samp{-Ifoo -Ibar -O}.  A major disadvantage is that you\ncannot append something on the end of a variable, as in\n\n@example\nCFLAGS = $(CFLAGS) -O\n@end example\n\n@noindent\nbecause it will cause an infinite loop in the variable expansion.\n(Actually @code{make} detects the infinite loop and reports an error.)\n@cindex loops in variable expansion\n@cindex variables, loops in expansion\n\nAnother disadvantage is that any functions\n(@pxref{Functions, ,Functions for Transforming Text})\nreferenced in the definition will be executed every time the variable is\nexpanded.  This makes @code{make} run slower; worse, it causes the\n@code{wildcard} and @code{shell} functions to give unpredictable results\nbecause you cannot easily control when they are called, or even how many\ntimes.\n\nTo avoid all the problems and inconveniences of recursively expanded\nvariables, there is another flavor: simply expanded variables.\n\n@cindex simply expanded variables\n@cindex variables, simply expanded\n@cindex :=\n@dfn{Simply expanded variables} are defined by lines using @samp{:=}\n(@pxref{Setting, ,Setting Variables}).\nThe value of a simply expanded variable is scanned\nonce and for all, expanding any references to other variables and\nfunctions, when the variable is defined.  The actual value of the simply\nexpanded variable is the result of expanding the text that you write.\nIt does not contain any references to other variables; it contains their\nvalues @emph{as of the time this variable was defined}.  Therefore,\n\n@example\nx := foo\ny := $(x) bar\nx := later\n@end example\n\n@noindent\nis equivalent to\n\n@example\ny := foo bar\nx := later\n@end example\n\nWhen a simply expanded variable is referenced, its value is substituted\nverbatim.\n\nHere is a somewhat more complicated example, illustrating the use of\n@samp{:=} in conjunction with the @code{shell} function.\n(@xref{Shell Function, , The @code{shell} Function}.)  This example\nalso shows use of the variable @code{MAKELEVEL}, which is changed\nwhen it is passed down from level to level.\n(@xref{Variables/Recursion, , Communicating Variables to a\nSub-@code{make}}, for information about @code{MAKELEVEL}.)\n\n@vindex MAKELEVEL\n@vindex MAKE\n@example\n@group\nifeq (0,$@{MAKELEVEL@})\nwhoami    := $(shell whoami)\nhost-type := $(shell arch)\nMAKE := $@{MAKE@} host-type=$@{host-type@} whoami=$@{whoami@}\nendif\n@end group\n@end example\n\n@noindent\nAn advantage of this use of @samp{:=} is that a typical\n`descend into a directory' command then looks like this:\n\n@example\n@group\n$@{subdirs@}:\n        $@{MAKE@} -C $@@ all\n@end group\n@end example\n\nSimply expanded variables generally make complicated makefile programming\nmore predictable because they work like variables in most programming\nlanguages.  They allow you to redefine a variable using its own value (or\nits value processed in some way by one of the expansion functions) and to\nuse the expansion functions much more efficiently\n(@pxref{Functions, ,Functions for Transforming Text}).\n\n@cindex spaces, in variable values\n@cindex whitespace, in variable values\n@cindex variables, spaces in values\nYou can also use them to introduce controlled leading whitespace into\nvariable values.  Leading whitespace characters are discarded from your\ninput before substitution of variable references and function calls;\nthis means you can include leading spaces in a variable value by\nprotecting them with variable references, like this:\n\n@example\nnullstring :=\nspace := $(nullstring) # end of the line\n@end example\n\n@noindent\nHere the value of the variable @code{space} is precisely one space.  The\ncomment @w{@samp{# end of the line}} is included here just for clarity.\nSince trailing space characters are @emph{not} stripped from variable\nvalues, just a space at the end of the line would have the same effect\n(but be rather hard to read).  If you put whitespace at the end of a\nvariable value, it is a good idea to put a comment like that at the end\nof the line to make your intent clear.  Conversely, if you do @emph{not}\nwant any whitespace characters at the end of your variable value, you\nmust remember not to put a random comment on the end of the line after\nsome whitespace, such as this:\n\n@example\ndir := /foo/bar    # directory to put the frobs in\n@end example\n\n@noindent\nHere the value of the variable @code{dir} is @w{@samp{/foo/bar    }}\n(with four trailing spaces), which was probably not the intention.\n(Imagine something like @w{@samp{$(dir)/file}} with this definition!)\n\n@cindex conditional variable assignment\n@cindex variables, conditional assignment\n@cindex ?=\nThere is another assignment operator for variables, @samp{?=}.  This\nis called a conditional variable assignment operator, because it only\nhas an effect if the variable is not yet defined.  This statement:\n\n@example\nFOO ?= bar\n@end example\n\n@noindent\nis exactly equivalent to this\n(@pxref{Origin Function, ,The @code{origin} Function}):\n\n@example\nifeq ($(origin FOO), undefined)\n  FOO = bar\nendif\n@end example\n\nNote that a variable set to an empty value is still defined, so\n@samp{?=} will not set that variable.\n\n@node Advanced, Values, Flavors, Using Variables\n@section Advanced Features for Reference to Variables\n@cindex reference to variables\n\nThis section describes some advanced features you can use to reference\nvariables in more flexible ways.\n\n@menu\n* Substitution Refs::           Referencing a variable with\n                                  substitutions on the value.\n* Computed Names::              Computing the name of the variable to refer to.\n@end menu\n\n@node Substitution Refs, Computed Names, Advanced, Advanced\n@subsection Substitution References\n@cindex modified variable reference\n@cindex substitution variable reference\n@cindex variables, modified reference\n@cindex variables, substitution reference\n\n@cindex variables, substituting suffix in\n@cindex suffix, substituting in variables\nA @dfn{substitution reference} substitutes the value of a variable with\nalterations that you specify.  It has the form\n@samp{$(@var{var}:@var{a}=@var{b})} (or\n@samp{$@{@var{var}:@var{a}=@var{b}@}}) and its meaning is to take the value\nof the variable @var{var}, replace every @var{a} at the end of a word with\n@var{b} in that value, and substitute the resulting string.\n\nWhen we say ``at the end of a word'', we mean that @var{a} must appear\neither followed by whitespace or at the end of the value in order to be\nreplaced; other occurrences of @var{a} in the value are unaltered.  For\nexample:@refill\n\n@example\nfoo := a.o b.o c.o\nbar := $(foo:.o=.c)\n@end example\n\n@noindent\nsets @samp{bar} to @samp{a.c b.c c.c}.  @xref{Setting, ,Setting Variables}.\n\nA substitution reference is actually an abbreviation for use of the\n@code{patsubst} expansion function (@pxref{Text Functions, ,Functions for String Substitution and Analysis}).  We provide\nsubstitution references as well as @code{patsubst} for compatibility with\nother implementations of @code{make}.\n\n@findex patsubst\nAnother type of substitution reference lets you use the full power of\nthe @code{patsubst} function.  It has the same form\n@samp{$(@var{var}:@var{a}=@var{b})} described above, except that now\n@var{a} must contain a single @samp{%} character.  This case is\nequivalent to @samp{$(patsubst @var{a},@var{b},$(@var{var}))}.\n@xref{Text Functions, ,Functions for String Substitution and Analysis},\nfor a description of the @code{patsubst} function.@refill\n\n@example\n@group\n@exdent For example:\n\nfoo := a.o b.o c.o\nbar := $(foo:%.o=%.c)\n@end group\n@end example\n\n@noindent\nsets @samp{bar} to @samp{a.c b.c c.c}.\n\n@node Computed Names,  , Substitution Refs, Advanced\n@subsection Computed Variable Names\n@cindex nested variable reference\n@cindex computed variable name\n@cindex variables, computed names\n@cindex variables, nested references\n@cindex variables, @samp{$} in name\n@cindex @code{$}, in variable name\n@cindex dollar sign (@code{$}), in variable name\n\nComputed variable names are a complicated concept needed only for\nsophisticated makefile programming.  For most purposes you need not\nconsider them, except to know that making a variable with a dollar sign\nin its name might have strange results.  However, if you are the type\nthat wants to understand everything, or you are actually interested in\nwhat they do, read on.\n\nVariables may be referenced inside the name of a variable.  This is\ncalled a @dfn{computed variable name} or a @dfn{nested variable\nreference}.  For example,\n\n@example\nx = y\ny = z\na := $($(x))\n@end example\n\n@noindent\ndefines @code{a} as @samp{z}: the @samp{$(x)} inside @samp{$($(x))} expands\nto @samp{y}, so @samp{$($(x))} expands to @samp{$(y)} which in turn expands\nto @samp{z}.  Here the name of the variable to reference is not stated\nexplicitly; it is computed by expansion of @samp{$(x)}.  The reference\n@samp{$(x)} here is nested within the outer variable reference.\n\nThe previous example shows two levels of nesting, but any number of levels\nis possible.  For example, here are three levels:\n\n@example\nx = y\ny = z\nz = u\na := $($($(x)))\n@end example\n\n@noindent\nHere the innermost @samp{$(x)} expands to @samp{y}, so @samp{$($(x))}\nexpands to @samp{$(y)} which in turn expands to @samp{z}; now we have\n@samp{$(z)}, which becomes @samp{u}.\n\nReferences to recursively-expanded variables within a variable name are\nreexpanded in the usual fashion.  For example:\n\n@example\nx = $(y)\ny = z\nz = Hello\na := $($(x))\n@end example\n\n@noindent\ndefines @code{a} as @samp{Hello}: @samp{$($(x))} becomes @samp{$($(y))}\nwhich becomes @samp{$(z)} which becomes @samp{Hello}.\n\nNested variable references can also contain modified references and\nfunction invocations (@pxref{Functions, ,Functions for Transforming Text}),\njust like any other reference.\nFor example, using the @code{subst} function\n(@pxref{Text Functions, ,Functions for String Substitution and Analysis}):\n\n@example\n@group\nx = variable1\nvariable2 := Hello\ny = $(subst 1,2,$(x))\nz = y\na := $($($(z)))\n@end group\n@end example\n\n@noindent\neventually defines @code{a} as @samp{Hello}.  It is doubtful that anyone\nwould ever want to write a nested reference as convoluted as this one, but\nit works: @samp{$($($(z)))} expands to @samp{$($(y))} which becomes\n@samp{$($(subst 1,2,$(x)))}.  This gets the value @samp{variable1} from\n@code{x} and changes it by substitution to @samp{variable2}, so that the\nentire string becomes @samp{$(variable2)}, a simple variable reference\nwhose value is @samp{Hello}.@refill\n\nA computed variable name need not consist entirely of a single variable\nreference.  It can contain several variable references, as well as some\ninvariant text.  For example,\n\n@example\n@group\na_dirs := dira dirb\n1_dirs := dir1 dir2\n@end group\n\n@group\na_files := filea fileb\n1_files := file1 file2\n@end group\n\n@group\nifeq \"$(use_a)\" \"yes\"\na1 := a\nelse\na1 := 1\nendif\n@end group\n\n@group\nifeq \"$(use_dirs)\" \"yes\"\ndf := dirs\nelse\ndf := files\nendif\n\ndirs := $($(a1)_$(df))\n@end group\n@end example\n\n@noindent\nwill give @code{dirs} the same value as @code{a_dirs}, @code{1_dirs},\n@code{a_files} or @code{1_files} depending on the settings of @code{use_a}\nand @code{use_dirs}.@refill\n\nComputed variable names can also be used in substitution references:\n\n@example\n@group\na_objects := a.o b.o c.o\n1_objects := 1.o 2.o 3.o\n\nsources := $($(a1)_objects:.o=.c)\n@end group\n@end example\n\n@noindent\ndefines @code{sources} as either @samp{a.c b.c c.c} or @samp{1.c 2.c 3.c},\ndepending on the value of @code{a1}.\n\nThe only restriction on this sort of use of nested variable references\nis that they cannot specify part of the name of a function to be called.\nThis is because the test for a recognized function name is done before\nthe expansion of nested references.  For example,\n\n@example\n@group\nifdef do_sort\nfunc := sort\nelse\nfunc := strip\nendif\n@end group\n\n@group\nbar := a d b g q c\n@end group\n\n@group\nfoo := $($(func) $(bar))\n@end group\n@end example\n\n@noindent\nattempts to give @samp{foo} the value of the variable @samp{sort a d b g\nq c} or @samp{strip a d b g q c}, rather than giving @samp{a d b g q c}\nas the argument to either the @code{sort} or the @code{strip} function.\nThis restriction could be removed in the future if that change is shown\nto be a good idea.\n\nYou can also use computed variable names in the left-hand side of a\nvariable assignment, or in a @code{define} directive, as in:\n\n@example\ndir = foo\n$(dir)_sources := $(wildcard $(dir)/*.c)\ndefine $(dir)_print\nlpr $($(dir)_sources)\nendef\n@end example\n\n@noindent\nThis example defines the variables @samp{dir}, @samp{foo_sources}, and\n@samp{foo_print}.\n\nNote that @dfn{nested variable references} are quite different from\n@dfn{recursively expanded variables}\n(@pxref{Flavors, ,The Two Flavors of Variables}), though both are\nused together in complex ways when doing makefile programming.@refill\n\n@node Values, Setting, Advanced, Using Variables\n@section How Variables Get Their Values\n@cindex variables, how they get their values\n@cindex value, how a variable gets it\n\nVariables can get values in several different ways:\n\n@itemize @bullet\n@item\nYou can specify an overriding value when you run @code{make}.\n@xref{Overriding, ,Overriding Variables}.\n\n@item\nYou can specify a value in the makefile, either\nwith an assignment (@pxref{Setting, ,Setting Variables}) or with a\nverbatim definition (@pxref{Defining, ,Defining Variables Verbatim}).@refill\n\n@item\nVariables in the environment become @code{make} variables.\n@xref{Environment, ,Variables from the Environment}.\n\n@item\nSeveral @dfn{automatic} variables are given new values for each rule.\nEach of these has a single conventional use.\n@xref{Automatic Variables}.\n\n@item\nSeveral variables have constant initial values.\n@xref{Implicit Variables, ,Variables Used by Implicit Rules}.\n@end itemize\n\n@node Setting, Appending, Values, Using Variables\n@section Setting Variables\n@cindex setting variables\n@cindex variables, setting\n@cindex =\n@cindex :=\n@cindex ?=\n\nTo set a variable from the makefile, write a line starting with the\nvariable name followed by @samp{=} or @samp{:=}.  Whatever follows the\n@samp{=} or @samp{:=} on the line becomes the value.  For example,\n\n@example\nobjects = main.o foo.o bar.o utils.o\n@end example\n\n@noindent\ndefines a variable named @code{objects}.  Whitespace around the variable\nname and immediately after the @samp{=} is ignored.\n\nVariables defined with @samp{=} are @dfn{recursively expanded} variables.\nVariables defined with @samp{:=} are @dfn{simply expanded} variables; these\ndefinitions can contain variable references which will be expanded before\nthe definition is made.  @xref{Flavors, ,The Two Flavors of Variables}.\n\nThe variable name may contain function and variable references, which\nare expanded when the line is read to find the actual variable name to use.\n\nThere is no limit on the length of the value of a variable except the\namount of swapping space on the computer.  When a variable definition is\nlong, it is a good idea to break it into several lines by inserting\nbackslash-newline at convenient places in the definition.  This will not\naffect the functioning of @code{make}, but it will make the makefile easier\nto read.\n\nMost variable names are considered to have the empty string as a value if\nyou have never set them.  Several variables have built-in initial values\nthat are not empty, but you can set them in the usual ways\n(@pxref{Implicit Variables, ,Variables Used by Implicit Rules}).\nSeveral special variables are set\nautomatically to a new value for each rule; these are called the\n@dfn{automatic} variables (@pxref{Automatic Variables}).\n\nIf you'd like a variable to be set to a value only if it's not already\nset, then you can use the shorthand operator @samp{?=} instead of\n@samp{=}.  These two settings of the variable @samp{FOO} are identical\n(@pxref{Origin Function, ,The @code{origin} Function}):\n\n@example\nFOO ?= bar\n@end example\n\n@noindent\nand\n\n@example\nifeq ($(origin FOO), undefined)\nFOO = bar\nendif\n@end example\n\n@node Appending, Override Directive, Setting, Using Variables\n@section Appending More Text to Variables\n@cindex +=\n@cindex appending to variables\n@cindex variables, appending to\n\nOften it is useful to add more text to the value of a variable already defined.\nYou do this with a line containing @samp{+=}, like this:\n\n@example\nobjects += another.o\n@end example\n\n@noindent\nThis takes the value of the variable @code{objects}, and adds the text\n@samp{another.o} to it (preceded by a single space).  Thus:\n\n@example\nobjects = main.o foo.o bar.o utils.o\nobjects += another.o\n@end example\n\n@noindent\nsets @code{objects} to @samp{main.o foo.o bar.o utils.o another.o}.\n\nUsing @samp{+=} is similar to:\n\n@example\nobjects = main.o foo.o bar.o utils.o\nobjects := $(objects) another.o\n@end example\n\n@noindent\nbut differs in ways that become important when you use more complex values.\n\nWhen the variable in question has not been defined before, @samp{+=}\nacts just like normal @samp{=}: it defines a recursively-expanded\nvariable.  However, when there @emph{is} a previous definition, exactly\nwhat @samp{+=} does depends on what flavor of variable you defined\noriginally.  @xref{Flavors, ,The Two Flavors of Variables}, for an\nexplanation of the two flavors of variables.\n\nWhen you add to a variable's value with @samp{+=}, @code{make} acts\nessentially as if you had included the extra text in the initial\ndefinition of the variable.  If you defined it first with @samp{:=},\nmaking it a simply-expanded variable, @samp{+=} adds to that\nsimply-expanded definition, and expands the new text before appending it\nto the old value just as @samp{:=} does\n(see @ref{Setting, ,Setting Variables}, for a full explanation of @samp{:=}).\nIn fact,\n\n@example\nvariable := value\nvariable += more\n@end example\n\n@noindent\nis exactly equivalent to:\n\n@noindent\n@example\nvariable := value\nvariable := $(variable) more\n@end example\n\nOn the other hand, when you use @samp{+=} with a variable that you defined\nfirst to be recursively-expanded using plain @samp{=}, @code{make} does\nsomething a bit different.  Recall that when you define a\nrecursively-expanded variable, @code{make} does not expand the value you set\nfor variable and function references immediately.  Instead it stores the text\nverbatim, and saves these variable and function references to be expanded\nlater, when you refer to the new variable (@pxref{Flavors, ,The Two Flavors\nof Variables}).  When you use @samp{+=} on a recursively-expanded variable,\nit is this unexpanded text to which @code{make} appends the new text you\nspecify.\n\n@example\n@group\nvariable = value\nvariable += more\n@end group\n@end example\n\n@noindent\nis roughly equivalent to:\n\n@example\n@group\ntemp = value\nvariable = $(temp) more\n@end group\n@end example\n\n@noindent\nexcept that of course it never defines a variable called @code{temp}.\nThe importance of this comes when the variable's old value contains\nvariable references.  Take this common example:\n\n@example\nCFLAGS = $(includes) -O\n@dots{}\nCFLAGS += -pg # enable profiling\n@end example\n\n@noindent\nThe first line defines the @code{CFLAGS} variable with a reference to another\nvariable, @code{includes}.  (@code{CFLAGS} is used by the rules for C\ncompilation; @pxref{Catalogue of Rules, ,Catalogue of Implicit Rules}.)\nUsing @samp{=} for the definition makes @code{CFLAGS} a recursively-expanded\nvariable, meaning @w{@samp{$(includes) -O}} is @emph{not} expanded when\n@code{make} processes the definition of @code{CFLAGS}.  Thus, @code{includes}\nneed not be defined yet for its value to take effect.  It only has to be\ndefined before any reference to @code{CFLAGS}.  If we tried to append to the\nvalue of @code{CFLAGS} without using @samp{+=}, we might do it like this:\n\n@example\nCFLAGS := $(CFLAGS) -pg # enable profiling\n@end example\n\n@noindent\nThis is pretty close, but not quite what we want.  Using @samp{:=}\nredefines @code{CFLAGS} as a simply-expanded variable; this means\n@code{make} expands the text @w{@samp{$(CFLAGS) -pg}} before setting the\nvariable.  If @code{includes} is not yet defined, we get @w{@samp{ -O\n-pg}}, and a later definition of @code{includes} will have no effect.\nConversely, by using @samp{+=} we set @code{CFLAGS} to the\n@emph{unexpanded} value @w{@samp{$(includes) -O -pg}}.  Thus we preserve\nthe reference to @code{includes}, so if that variable gets defined at\nany later point, a reference like @samp{$(CFLAGS)} still uses its\nvalue.\n\n@node Override Directive, Defining, Appending, Using Variables\n@section The @code{override} Directive\n@findex override\n@cindex overriding with @code{override}\n@cindex variables, overriding\n\nIf a variable has been set with a command argument\n(@pxref{Overriding, ,Overriding Variables}),\nthen ordinary assignments in the makefile are ignored.  If you want to set\nthe variable in the makefile even though it was set with a command\nargument, you can use an @code{override} directive, which is a line that\nlooks like this:@refill\n\n@example\noverride @var{variable} = @var{value}\n@end example\n\n@noindent\nor\n\n@example\noverride @var{variable} := @var{value}\n@end example\n\nTo append more text to a variable defined on the command line, use:\n\n@example\noverride @var{variable} += @var{more text}\n@end example\n\n@noindent\n@xref{Appending, ,Appending More Text to Variables}.\n\nThe @code{override} directive was not invented for escalation in the war\nbetween makefiles and command arguments.  It was invented so you can alter\nand add to values that the user specifies with command arguments.\n\nFor example, suppose you always want the @samp{-g} switch when you run the\nC compiler, but you would like to allow the user to specify the other\nswitches with a command argument just as usual.  You could use this\n@code{override} directive:\n\n@example\noverride CFLAGS += -g\n@end example\n\nYou can also use @code{override} directives with @code{define} directives.\nThis is done as you might expect:\n\n@example\noverride define foo\nbar\nendef\n@end example\n\n@noindent\n@iftex\nSee the next section for information about @code{define}.\n@end iftex\n@ifnottex\n@xref{Defining, ,Defining Variables Verbatim}.\n@end ifnottex\n\n@node Defining, Environment, Override Directive, Using Variables\n@section Defining Variables Verbatim\n@findex define\n@findex endef\n@cindex verbatim variable definition\n@cindex defining variables verbatim\n@cindex variables, defining verbatim\n\nAnother way to set the value of a variable is to use the @code{define}\ndirective.  This directive has an unusual syntax which allows newline\ncharacters to be included in the value, which is convenient for defining\nboth canned sequences of commands\n(@pxref{Sequences, ,Defining Canned Command Sequences}), and also\nsections of makefile syntax to use with @code{eval} (@pxref{Eval Function}).\n\nThe @code{define} directive is followed on the same line by the name of the\nvariable and nothing more.  The value to give the variable appears on the\nfollowing lines.  The end of the value is marked by a line containing just\nthe word @code{endef}.  Aside from this difference in syntax, @code{define}\nworks just like @samp{=}: it creates a recursively-expanded variable\n(@pxref{Flavors, ,The Two Flavors of Variables}).\nThe variable name may contain function and variable references, which\nare expanded when the directive is read to find the actual variable name\nto use.\n\nYou may nest @code{define} directives: @code{make} will keep track of\nnested directives and report an error if they are not all properly\nclosed with @code{endef}.  Note that lines beginning with tab\ncharacters are considered part of a command script, so any\n@code{define} or @code{endef} strings appearing on such a line will\nnot be considered @code{make} operators.\n\n@example\ndefine two-lines\necho foo\necho $(bar)\nendef\n@end example\n\nThe value in an ordinary assignment cannot contain a newline; but the\nnewlines that separate the lines of the value in a @code{define} become\npart of the variable's value (except for the final newline which precedes\nthe @code{endef} and is not considered part of the value).@refill\n\n@need 800\nWhen used in a command script, the previous example is functionally\nequivalent to this:\n\n@example\ntwo-lines = echo foo; echo $(bar)\n@end example\n\n@noindent\nsince two commands separated by semicolon behave much like two separate\nshell commands.  However, note that using two separate lines means\n@code{make} will invoke the shell twice, running an independent subshell\nfor each line.  @xref{Execution, ,Command Execution}.\n\nIf you want variable definitions made with @code{define} to take\nprecedence over command-line variable definitions, you can use the\n@code{override} directive together with @code{define}:\n\n@example\noverride define two-lines\nfoo\n$(bar)\nendef\n@end example\n\n@noindent\n@xref{Override Directive, ,The @code{override} Directive}.\n\n@node Environment, Target-specific, Defining, Using Variables\n@section Variables from the Environment\n\n@cindex variables, environment\n@cindex environment\nVariables in @code{make} can come from the environment in which\n@code{make} is run.  Every environment variable that @code{make} sees\nwhen it starts up is transformed into a @code{make} variable with the\nsame name and value.  However, an explicit assignment in the makefile,\nor with a command argument, overrides the environment.  (If the\n@samp{-e} flag is specified, then values from the environment override\nassignments in the makefile.  @xref{Options Summary, ,Summary of\nOptions}.  But this is not recommended practice.)\n\nThus, by setting the variable @code{CFLAGS} in your environment, you can\ncause all C compilations in most makefiles to use the compiler switches you\nprefer.  This is safe for variables with standard or conventional meanings\nbecause you know that no makefile will use them for other things.  (Note\nthis is not totally reliable; some makefiles set @code{CFLAGS} explicitly\nand therefore are not affected by the value in the environment.)\n\nWhen @code{make} runs a command script, variables defined in the\nmakefile are placed into the environment of that command.  This allows\nyou to pass values to sub-@code{make} invocations (@pxref{Recursion,\n,Recursive Use of @code{make}}).  By default, only variables that came\nfrom the environment or the command line are passed to recursive\ninvocations.  You can use the @code{export} directive to pass other\nvariables.  @xref{Variables/Recursion, , Communicating Variables to a\nSub-@code{make}}, for full details.\n\nOther use of variables from the environment is not recommended.  It is not\nwise for makefiles to depend for their functioning on environment variables\nset up outside their control, since this would cause different users to get\ndifferent results from the same makefile.  This is against the whole\npurpose of most makefiles.\n\n@cindex SHELL, import from environment\nSuch problems would be especially likely with the variable\n@code{SHELL}, which is normally present in the environment to specify\nthe user's choice of interactive shell.  It would be very undesirable\nfor this choice to affect @code{make}; so, @code{make} handles the\n@code{SHELL} environment variable in a special way; see @ref{Choosing\nthe Shell}.@refill\n\n@node Target-specific, Pattern-specific, Environment, Using Variables\n@section Target-specific Variable Values\n@cindex target-specific variables\n@cindex variables, target-specific\n\nVariable values in @code{make} are usually global; that is, they are the\nsame regardless of where they are evaluated (unless they're reset, of\ncourse).  One exception to that is automatic variables\n(@pxref{Automatic Variables}).\n\nThe other exception is @dfn{target-specific variable values}.  This\nfeature allows you to define different values for the same variable,\nbased on the target that @code{make} is currently building.  As with\nautomatic variables, these values are only available within the context\nof a target's command script (and in other target-specific assignments).\n\nSet a target-specific variable value like this:\n\n@example\n@var{target} @dots{} : @var{variable-assignment}\n@end example\n\n@noindent\nor like this:\n\n@example\n@var{target} @dots{} : override @var{variable-assignment}\n@end example\n\n@noindent\nor like this:\n\n@example\n@var{target} @dots{} : export @var{variable-assignment}\n@end example\n\nMultiple @var{target} values create a target-specific variable value for\neach member of the target list individually.\n\nThe @var{variable-assignment} can be any valid form of assignment;\nrecursive (@samp{=}), static (@samp{:=}), appending (@samp{+=}), or\nconditional (@samp{?=}).  All variables that appear within the\n@var{variable-assignment} are evaluated within the context of the\ntarget: thus, any previously-defined target-specific variable values\nwill be in effect.  Note that this variable is actually distinct from\nany ``global'' value: the two variables do not have to have the same\nflavor (recursive vs.@: static).\n\nTarget-specific variables have the same priority as any other makefile\nvariable.  Variables provided on the command-line (and in the\nenvironment if the @samp{-e} option is in force) will take precedence.\nSpecifying the @code{override} directive will allow the target-specific\nvariable value to be preferred.\n\nThere is one more special feature of target-specific variables: when\nyou define a target-specific variable that variable value is also in\neffect for all prerequisites of this target, and all their\nprerequisites, etc.@: (unless those prerequisites override that variable\nwith their own target-specific variable value).  So, for example, a\nstatement like this:\n\n@example\nprog : CFLAGS = -g\nprog : prog.o foo.o bar.o\n@end example\n\n@noindent\nwill set @code{CFLAGS} to @samp{-g} in the command script for\n@file{prog}, but it will also set @code{CFLAGS} to @samp{-g} in the\ncommand scripts that create @file{prog.o}, @file{foo.o}, and\n@file{bar.o}, and any command scripts which create their\nprerequisites.\n\nBe aware that a given prerequisite will only be built once per\ninvocation of make, at most.  If the same file is a prerequisite of\nmultiple targets, and each of those targets has a different value for\nthe same target-specific variable, then the first target to be built\nwill cause that prerequisite to be built and the prerequisite will\ninherit the target-specific value from the first target.  It will\nignore the target-specific values from any other targets.\n\n@node Pattern-specific,  , Target-specific, Using Variables\n@section Pattern-specific Variable Values\n@cindex pattern-specific variables\n@cindex variables, pattern-specific\n\nIn addition to target-specific variable values\n(@pxref{Target-specific, ,Target-specific Variable Values}), GNU\n@code{make} supports pattern-specific variable values.  In this form,\nthe variable is defined for any target that matches the pattern\nspecified.  If a target matches more than one pattern, all the\nmatching pattern-specific variables are interpreted in the order in\nwhich they were defined in the makefile, and collected together into\none set.  Variables defined in this way are searched after any\ntarget-specific variables defined explicitly for that target, and\nbefore target-specific variables defined for the parent target.\n\nSet a pattern-specific variable value like this:\n\n@example\n@var{pattern} @dots{} : @var{variable-assignment}\n@end example\n\n@noindent\nor like this:\n\n@example\n@var{pattern} @dots{} : override @var{variable-assignment}\n@end example\n\n@noindent\nwhere @var{pattern} is a %-pattern.  As with target-specific variable\nvalues, multiple @var{pattern} values create a pattern-specific variable\nvalue for each pattern individually.  The @var{variable-assignment} can\nbe any valid form of assignment.  Any command-line variable setting will\ntake precedence, unless @code{override} is specified.\n\nFor example:\n\n@example\n%.o : CFLAGS = -O\n@end example\n\n@noindent\nwill assign @code{CFLAGS} the value of @samp{-O} for all targets\nmatching the pattern @code{%.o}.\n\n@node Conditionals, Functions, Using Variables, Top\n@chapter Conditional Parts of Makefiles\n\n@cindex conditionals\nA @dfn{conditional} causes part of a makefile to be obeyed or ignored\ndepending on the values of variables.  Conditionals can compare the\nvalue of one variable to another, or the value of a variable to\na constant string.  Conditionals control what @code{make} actually\n``sees'' in the makefile, so they @emph{cannot} be used to control shell\ncommands at the time of execution.@refill\n\n@menu\n* Conditional Example::         Example of a conditional\n* Conditional Syntax::          The syntax of conditionals.\n* Testing Flags::               Conditionals that test flags.\n@end menu\n\n@node Conditional Example, Conditional Syntax, Conditionals, Conditionals\n@section Example of a Conditional\n\nThe following example of a conditional tells @code{make} to use one set\nof libraries if the @code{CC} variable is @samp{gcc}, and a different\nset of libraries otherwise.  It works by controlling which of two\ncommand lines will be used as the command for a rule.  The result is\nthat @samp{CC=gcc} as an argument to @code{make} changes not only which\ncompiler is used but also which libraries are linked.\n\n@example\nlibs_for_gcc = -lgnu\nnormal_libs =\n\nfoo: $(objects)\nifeq ($(CC),gcc)\n        $(CC) -o foo $(objects) $(libs_for_gcc)\nelse\n        $(CC) -o foo $(objects) $(normal_libs)\nendif\n@end example\n\nThis conditional uses three directives: one @code{ifeq}, one @code{else}\nand one @code{endif}.\n\nThe @code{ifeq} directive begins the conditional, and specifies the\ncondition.  It contains two arguments, separated by a comma and surrounded\nby parentheses.  Variable substitution is performed on both arguments and\nthen they are compared.  The lines of the makefile following the\n@code{ifeq} are obeyed if the two arguments match; otherwise they are\nignored.\n\nThe @code{else} directive causes the following lines to be obeyed if the\nprevious conditional failed.  In the example above, this means that the\nsecond alternative linking command is used whenever the first alternative\nis not used.  It is optional to have an @code{else} in a conditional.\n\nThe @code{endif} directive ends the conditional.  Every conditional must\nend with an @code{endif}.  Unconditional makefile text follows.\n\nAs this example illustrates, conditionals work at the textual level:\nthe lines of the conditional are treated as part of the makefile, or\nignored, according to the condition.  This is why the larger syntactic\nunits of the makefile, such as rules, may cross the beginning or the\nend of the conditional.\n\nWhen the variable @code{CC} has the value @samp{gcc}, the above example has\nthis effect:\n\n@example\nfoo: $(objects)\n        $(CC) -o foo $(objects) $(libs_for_gcc)\n@end example\n\n@noindent\nWhen the variable @code{CC} has any other value, the effect is this:\n\n@example\nfoo: $(objects)\n        $(CC) -o foo $(objects) $(normal_libs)\n@end example\n\nEquivalent results can be obtained in another way by conditionalizing a\nvariable assignment and then using the variable unconditionally:\n\n@example\nlibs_for_gcc = -lgnu\nnormal_libs =\n\nifeq ($(CC),gcc)\n  libs=$(libs_for_gcc)\nelse\n  libs=$(normal_libs)\nendif\n\nfoo: $(objects)\n        $(CC) -o foo $(objects) $(libs)\n@end example\n\n@node Conditional Syntax, Testing Flags, Conditional Example, Conditionals\n@section Syntax of Conditionals\n@findex ifdef\n@findex ifeq\n@findex ifndef\n@findex ifneq\n@findex else\n@findex endif\n\nThe syntax of a simple conditional with no @code{else} is as follows:\n\n@example\n@var{conditional-directive}\n@var{text-if-true}\nendif\n@end example\n\n@noindent\nThe @var{text-if-true} may be any lines of text, to be considered as part\nof the makefile if the condition is true.  If the condition is false, no\ntext is used instead.\n\nThe syntax of a complex conditional is as follows:\n\n@example\n@var{conditional-directive}\n@var{text-if-true}\nelse\n@var{text-if-false}\nendif\n@end example\n\nor:\n\n@example\n@var{conditional-directive}\n@var{text-if-one-is-true}\nelse @var{conditional-directive}\n@var{text-if-true}\nelse\n@var{text-if-false}\nendif\n@end example\n\n@noindent\nThere can be as many ``@code{else} @var{conditional-directive}''\nclauses as necessary.  Once a given condition is true,\n@var{text-if-true} is used and no other clause is used; if no\ncondition is true then @var{text-if-false} is used.  The\n@var{text-if-true} and @var{text-if-false} can be any number of lines\nof text.\n\nThe syntax of the @var{conditional-directive} is the same whether the\nconditional is simple or complex; after an @code{else} or not.  There\nare four different directives that test different conditions.  Here is\na table of them:\n\n@table @code\n@item ifeq (@var{arg1}, @var{arg2})\n@itemx ifeq '@var{arg1}' '@var{arg2}'\n@itemx ifeq \"@var{arg1}\" \"@var{arg2}\"\n@itemx ifeq \"@var{arg1}\" '@var{arg2}'\n@itemx ifeq '@var{arg1}' \"@var{arg2}\"\nExpand all variable references in @var{arg1} and @var{arg2} and\ncompare them.  If they are identical, the @var{text-if-true} is\neffective; otherwise, the @var{text-if-false}, if any, is effective.\n\nOften you want to test if a variable has a non-empty value.  When the\nvalue results from complex expansions of variables and functions,\nexpansions you would consider empty may actually contain whitespace\ncharacters and thus are not seen as empty.  However, you can use the\n@code{strip} function (@pxref{Text Functions}) to avoid interpreting\nwhitespace as a non-empty value.  For example:\n\n@example\n@group\nifeq ($(strip $(foo)),)\n@var{text-if-empty}\nendif\n@end group\n@end example\n\n@noindent\nwill evaluate @var{text-if-empty} even if the expansion of\n@code{$(foo)} contains whitespace characters.\n\n@item ifneq (@var{arg1}, @var{arg2})\n@itemx ifneq '@var{arg1}' '@var{arg2}'\n@itemx ifneq \"@var{arg1}\" \"@var{arg2}\"\n@itemx ifneq \"@var{arg1}\" '@var{arg2}'\n@itemx ifneq '@var{arg1}' \"@var{arg2}\"\nExpand all variable references in @var{arg1} and @var{arg2} and\ncompare them.  If they are different, the @var{text-if-true} is\neffective; otherwise, the @var{text-if-false}, if any, is effective.\n\n@item ifdef @var{variable-name}\nThe @code{ifdef} form takes the @emph{name} of a variable as its\nargument, not a reference to a variable.  The value of that variable\nhas a non-empty value, the @var{text-if-true} is effective; otherwise,\nthe @var{text-if-false}, if any, is effective.  Variables that have\nnever been defined have an empty value.  The text @var{variable-name}\nis expanded, so it could be a variable or function that expands\nto the name of a variable.  For example:\n\n@example\nbar = true\nfoo = bar\nifdef $(foo)\nfrobozz = yes\nendif\n@end example\n\nThe variable reference @code{$(foo)} is expanded, yielding @code{bar},\nwhich is considered to be the name of a variable.  The variable\n@code{bar} is not expanded, but its value is examined to determine if\nit is non-empty.\n\nNote that @code{ifdef} only tests whether a variable has a value.  It\ndoes not expand the variable to see if that value is nonempty.\nConsequently, tests using @code{ifdef} return true for all definitions\nexcept those like @code{foo =}.  To test for an empty value, use\n@w{@code{ifeq ($(foo),)}}.  For example,\n\n@example\nbar =\nfoo = $(bar)\nifdef foo\nfrobozz = yes\nelse\nfrobozz = no\nendif\n@end example\n\n@noindent\nsets @samp{frobozz} to @samp{yes}, while:\n\n@example\nfoo =\nifdef foo\nfrobozz = yes\nelse\nfrobozz = no\nendif\n@end example\n\n@noindent\nsets @samp{frobozz} to @samp{no}.\n\n@item ifndef @var{variable-name}\nIf the variable @var{variable-name} has an empty value, the\n@var{text-if-true} is effective; otherwise, the @var{text-if-false},\nif any, is effective.  The rules for expansion and testing of\n@var{variable-name} are identical to the @code{ifdef} directive.\n@end table\n\nExtra spaces are allowed and ignored at the beginning of the conditional\ndirective line, but a tab is not allowed.  (If the line begins with a tab,\nit will be considered a command for a rule.)  Aside from this, extra spaces\nor tabs may be inserted with no effect anywhere except within the directive\nname or within an argument.  A comment starting with @samp{#} may appear at\nthe end of the line.\n\nThe other two directives that play a part in a conditional are @code{else}\nand @code{endif}.  Each of these directives is written as one word, with no\narguments.  Extra spaces are allowed and ignored at the beginning of the\nline, and spaces or tabs at the end.  A comment starting with @samp{#} may\nappear at the end of the line.\n\nConditionals affect which lines of the makefile @code{make} uses.  If\nthe condition is true, @code{make} reads the lines of the\n@var{text-if-true} as part of the makefile; if the condition is false,\n@code{make} ignores those lines completely.  It follows that syntactic\nunits of the makefile, such as rules, may safely be split across the\nbeginning or the end of the conditional.@refill\n\n@code{make} evaluates conditionals when it reads a makefile.\nConsequently, you cannot use automatic variables in the tests of\nconditionals because they are not defined until commands are run\n(@pxref{Automatic Variables}).\n\nTo prevent intolerable confusion, it is not permitted to start a\nconditional in one makefile and end it in another.  However, you may\nwrite an @code{include} directive within a conditional, provided you do\nnot attempt to terminate the conditional inside the included file.\n\n@node Testing Flags,  , Conditional Syntax, Conditionals\n@section Conditionals that Test Flags\n\nYou can write a conditional that tests @code{make} command flags such as\n@samp{-t} by using the variable @code{MAKEFLAGS} together with the\n@code{findstring} function\n(@pxref{Text Functions, , Functions for String Substitution and Analysis}).\nThis is useful when @code{touch} is not enough to make a file appear up\nto date.\n\nThe @code{findstring} function determines whether one string appears as a\nsubstring of another.  If you want to test for the @samp{-t} flag,\nuse @samp{t} as the first string and the value of @code{MAKEFLAGS} as\nthe other.\n\nFor example, here is how to arrange to use @samp{ranlib -t} to finish\nmarking an archive file up to date:\n\n@example\narchive.a: @dots{}\nifneq (,$(findstring t,$(MAKEFLAGS)))\n        +touch archive.a\n        +ranlib -t archive.a\nelse\n        ranlib archive.a\nendif\n@end example\n\n@noindent\nThe @samp{+} prefix marks those command lines as ``recursive'' so\nthat they will be executed despite use of the @samp{-t} flag.\n@xref{Recursion, ,Recursive Use of @code{make}}.\n\n@node Functions, Running, Conditionals, Top\n@chapter Functions for Transforming Text\n@cindex functions\n\n@dfn{Functions} allow you to do text processing in the makefile to compute\nthe files to operate on or the commands to use.  You use a function in a\n@dfn{function call}, where you give the name of the function and some text\n(the @dfn{arguments}) for the function to operate on.  The result of the\nfunction's processing is substituted into the makefile at the point of the\ncall, just as a variable might be substituted.\n\n@menu\n* Syntax of Functions::         How to write a function call.\n* Text Functions::              General-purpose text manipulation functions.\n* File Name Functions::         Functions for manipulating file names.\n* Conditional Functions::       Functions that implement conditions.\n* Foreach Function::            Repeat some text with controlled variation.\n* Call Function::               Expand a user-defined function.\n* Value Function::              Return the un-expanded value of a variable.\n* Eval Function::               Evaluate the arguments as makefile syntax.\n* Origin Function::             Find where a variable got its value.\n* Flavor Function::             Find out the flavor of a variable.\n* Shell Function::              Substitute the output of a shell command.\n* Make Control Functions::      Functions that control how make runs.\n@end menu\n\n@node Syntax of Functions, Text Functions, Functions, Functions\n@section Function Call Syntax\n@cindex @code{$}, in function call\n@cindex dollar sign (@code{$}), in function call\n@cindex arguments of functions\n@cindex functions, syntax of\n\nA function call resembles a variable reference.  It looks like this:\n\n@example\n$(@var{function} @var{arguments})\n@end example\n\n@noindent\nor like this:\n\n@example\n$@{@var{function} @var{arguments}@}\n@end example\n\nHere @var{function} is a function name; one of a short list of names\nthat are part of @code{make}.  You can also essentially create your own\nfunctions by using the @code{call} builtin function.\n\nThe @var{arguments} are the arguments of the function.  They are\nseparated from the function name by one or more spaces or tabs, and if\nthere is more than one argument, then they are separated by commas.\nSuch whitespace and commas are not part of an argument's value.  The\ndelimiters which you use to surround the function call, whether\nparentheses or braces, can appear in an argument only in matching pairs;\nthe other kind of delimiters may appear singly.  If the arguments\nthemselves contain other function calls or variable references, it is\nwisest to use the same kind of delimiters for all the references; write\n@w{@samp{$(subst a,b,$(x))}}, not @w{@samp{$(subst a,b,$@{x@})}}.  This\nis because it is clearer, and because only one type of delimiter is\nmatched to find the end of the reference.\n\nThe text written for each argument is processed by substitution of\nvariables and function calls to produce the argument value, which\nis the text on which the function acts.  The substitution is done in the\norder in which the arguments appear.\n\nCommas and unmatched parentheses or braces cannot appear in the text of an\nargument as written; leading spaces cannot appear in the text of the first\nargument as written.  These characters can be put into the argument value\nby variable substitution.  First define variables @code{comma} and\n@code{space} whose values are isolated comma and space characters, then\nsubstitute these variables where such characters are wanted, like this:\n\n@example\n@group\ncomma:= ,\nempty:=\nspace:= $(empty) $(empty)\nfoo:= a b c\nbar:= $(subst $(space),$(comma),$(foo))\n# @r{bar is now `a,b,c'.}\n@end group\n@end example\n\n@noindent\nHere the @code{subst} function replaces each space with a comma, through\nthe value of @code{foo}, and substitutes the result.\n\n@node Text Functions, File Name Functions, Syntax of Functions, Functions\n@section Functions for String Substitution and Analysis\n@cindex functions, for text\n\nHere are some functions that operate on strings:\n\n@table @code\n@item $(subst @var{from},@var{to},@var{text})\n@findex subst\nPerforms a textual replacement on the text @var{text}: each occurrence\nof @var{from} is replaced by @var{to}.  The result is substituted for\nthe function call.  For example,\n\n@example\n$(subst ee,EE,feet on the street)\n@end example\n\nsubstitutes the string @samp{fEEt on the strEEt}.\n\n@item $(patsubst @var{pattern},@var{replacement},@var{text})\n@findex patsubst\nFinds whitespace-separated words in @var{text} that match\n@var{pattern} and replaces them with @var{replacement}.  Here\n@var{pattern} may contain a @samp{%} which acts as a wildcard,\nmatching any number of any characters within a word.  If\n@var{replacement} also contains a @samp{%}, the @samp{%} is replaced\nby the text that matched the @samp{%} in @var{pattern}.  Only the first\n@samp{%} in the @var{pattern} and @var{replacement} is treated this\nway; any subsequent @samp{%} is unchanged.@refill\n\n@cindex @code{%}, quoting in @code{patsubst}\n@cindex @code{%}, quoting with @code{\\} (backslash)\n@cindex @code{\\} (backslash), to quote @code{%}\n@cindex backslash (@code{\\}), to quote @code{%}\n@cindex quoting @code{%}, in @code{patsubst}\n@samp{%} characters in @code{patsubst} function invocations can be\nquoted with preceding backslashes (@samp{\\}).  Backslashes that would\notherwise quote @samp{%} characters can be quoted with more backslashes.\nBackslashes that quote @samp{%} characters or other backslashes are\nremoved from the pattern before it is compared file names or has a stem\nsubstituted into it.  Backslashes that are not in danger of quoting\n@samp{%} characters go unmolested.  For example, the pattern\n@file{the\\%weird\\\\%pattern\\\\} has @samp{the%weird\\} preceding the\noperative @samp{%} character, and @samp{pattern\\\\} following it.  The\nfinal two backslashes are left alone because they cannot affect any\n@samp{%} character.@refill\n\nWhitespace between words is folded into single space characters;\nleading and trailing whitespace is discarded.\n\nFor example,\n\n@example\n$(patsubst %.c,%.o,x.c.c bar.c)\n@end example\n\n@noindent\nproduces the value @samp{x.c.o bar.o}.\n\nSubstitution references (@pxref{Substitution Refs, ,Substitution\nReferences}) are a simpler way to get the effect of the @code{patsubst}\nfunction:\n\n@example\n$(@var{var}:@var{pattern}=@var{replacement})\n@end example\n\n@noindent\nis equivalent to\n\n@example\n$(patsubst @var{pattern},@var{replacement},$(@var{var}))\n@end example\n\nThe second shorthand simplifies one of the most common uses of\n@code{patsubst}: replacing the suffix at the end of file names.\n\n@example\n$(@var{var}:@var{suffix}=@var{replacement})\n@end example\n\n@noindent\nis equivalent to\n\n@example\n$(patsubst %@var{suffix},%@var{replacement},$(@var{var}))\n@end example\n\n@noindent\nFor example, you might have a list of object files:\n\n@example\nobjects = foo.o bar.o baz.o\n@end example\n\n@noindent\nTo get the list of corresponding source files, you could simply write:\n\n@example\n$(objects:.o=.c)\n@end example\n\n@noindent\ninstead of using the general form:\n\n@example\n$(patsubst %.o,%.c,$(objects))\n@end example\n\n@item $(strip @var{string})\n@cindex stripping whitespace\n@cindex whitespace, stripping\n@cindex spaces, stripping\n@findex strip\nRemoves leading and trailing whitespace from @var{string} and replaces\neach internal sequence of one or more whitespace characters with a\nsingle space.  Thus, @samp{$(strip a b  c )} results in @w{@samp{a b c}}.\n\nThe function @code{strip} can be very useful when used in conjunction\nwith conditionals.  When comparing something with the empty string\n@samp{} using @code{ifeq} or @code{ifneq}, you usually want a string of\njust whitespace to match the empty string (@pxref{Conditionals}).\n\nThus, the following may fail to have the desired results:\n\n@example\n.PHONY: all\nifneq   \"$(needs_made)\" \"\"\nall: $(needs_made)\nelse\nall:;@@echo 'Nothing to make!'\nendif\n@end example\n\n@noindent\nReplacing the variable reference @w{@samp{$(needs_made)}} with the\nfunction call @w{@samp{$(strip $(needs_made))}} in the @code{ifneq}\ndirective would make it more robust.@refill\n\n@item $(findstring @var{find},@var{in})\n@findex findstring\n@cindex searching for strings\n@cindex finding strings\n@cindex strings, searching for\nSearches @var{in} for an occurrence of @var{find}.  If it occurs, the\nvalue is @var{find}; otherwise, the value is empty.  You can use this\nfunction in a conditional to test for the presence of a specific\nsubstring in a given string.  Thus, the two examples,\n\n@example\n$(findstring a,a b c)\n$(findstring a,b c)\n@end example\n\n@noindent\nproduce the values @samp{a} and @samp{} (the empty string),\nrespectively.  @xref{Testing Flags}, for a practical application of\n@code{findstring}.@refill\n\n@need 750\n@findex filter\n@cindex filtering words\n@cindex words, filtering\n@item $(filter @var{pattern}@dots{},@var{text})\nReturns all whitespace-separated words in @var{text} that @emph{do} match\nany of the @var{pattern} words, removing any words that @emph{do not}\nmatch.  The patterns are written using @samp{%}, just like the patterns\nused in the @code{patsubst} function above.@refill\n\nThe @code{filter} function can be used to separate out different types\nof strings (such as file names) in a variable.  For example:\n\n@example\nsources := foo.c bar.c baz.s ugh.h\nfoo: $(sources)\n        cc $(filter %.c %.s,$(sources)) -o foo\n@end example\n\n@noindent\nsays that @file{foo} depends of @file{foo.c}, @file{bar.c},\n@file{baz.s} and @file{ugh.h} but only @file{foo.c}, @file{bar.c} and\n@file{baz.s} should be specified in the command to the\ncompiler.@refill\n\n@item $(filter-out @var{pattern}@dots{},@var{text})\n@findex filter-out\n@cindex filtering out words\n@cindex words, filtering out\nReturns all whitespace-separated words in @var{text} that @emph{do not}\nmatch any of the @var{pattern} words, removing the words that @emph{do}\nmatch one or more.  This is the exact opposite of the @code{filter}\nfunction.@refill\n\nFor example, given:\n\n@example\n@group\nobjects=main1.o foo.o main2.o bar.o\nmains=main1.o main2.o\n@end group\n@end example\n\n@noindent\nthe following generates a list which contains all the object files not\nin @samp{mains}:\n\n@example\n$(filter-out $(mains),$(objects))\n@end example\n\n@need 1500\n@findex sort\n@cindex sorting words\n@item $(sort @var{list})\nSorts the words of @var{list} in lexical order, removing duplicate\nwords.  The output is a list of words separated by single spaces.\nThus,\n\n@example\n$(sort foo bar lose)\n@end example\n\n@noindent\nreturns the value @samp{bar foo lose}.\n\n@cindex removing duplicate words\n@cindex duplicate words, removing\n@cindex words, removing duplicates\nIncidentally, since @code{sort} removes duplicate words, you can use\nit for this purpose even if you don't care about the sort order.\n\n@item $(word @var{n},@var{text})\n@findex word\n@cindex word, selecting a\n@cindex selecting a word\nReturns the @var{n}th word of @var{text}.  The legitimate values of\n@var{n} start from 1.  If @var{n} is bigger than the number of words\nin @var{text}, the value is empty.  For example,\n\n@example\n$(word 2, foo bar baz)\n@end example\n\n@noindent\nreturns @samp{bar}.\n\n@item $(wordlist @var{s},@var{e},@var{text})\n@findex wordlist\n@cindex words, selecting lists of\n@cindex selecting word lists\nReturns the list of words in @var{text} starting with word @var{s} and\nending with word @var{e} (inclusive).  The legitimate values of @var{s}\nstart from 1; @var{e} may start from 0.  If @var{s} is bigger than the\nnumber of words in @var{text}, the value is empty.  If @var{e} is\nbigger than the number of words in @var{text}, words up to the end of\n@var{text} are returned.  If @var{s} is greater than @var{e}, nothing\nis returned.  For example,\n\n@example\n$(wordlist 2, 3, foo bar baz)\n@end example\n\n@noindent\nreturns @samp{bar baz}.\n\n@c Following item phrased to prevent overfull hbox.  --RJC 17 Jul 92\n@item $(words @var{text})\n@findex words\n@cindex words, finding number\nReturns the number of words in @var{text}.\nThus, the last word of @var{text} is\n@w{@code{$(word $(words @var{text}),@var{text})}}.@refill\n\n@item $(firstword @var{names}@dots{})\n@findex firstword\n@cindex words, extracting first\nThe argument @var{names} is regarded as a series of names, separated\nby whitespace.  The value is the first name in the series.  The rest\nof the names are ignored.\n\nFor example,\n\n@example\n$(firstword foo bar)\n@end example\n\n@noindent\nproduces the result @samp{foo}.  Although @code{$(firstword\n@var{text})} is the same as @code{$(word 1,@var{text})}, the\n@code{firstword} function is retained for its simplicity.@refill\n\n\n@item $(lastword @var{names}@dots{})\n@findex lastword\n@cindex words, extracting last\nThe argument @var{names} is regarded as a series of names, separated\nby whitespace.  The value is the last name in the series.\n\nFor example,\n\n@example\n$(lastword foo bar)\n@end example\n\n@noindent\nproduces the result @samp{bar}.  Although @code{$(lastword\n@var{text})} is the same as @code{$(word $(words @var{text}),@var{text})},\nthe @code{lastword} function was added for its simplicity and better\nperformance.@refill\n@end table\n\n\nHere is a realistic example of the use of @code{subst} and\n@code{patsubst}.  Suppose that a makefile uses the @code{VPATH} variable\nto specify a list of directories that @code{make} should search for\nprerequisite files\n(@pxref{General Search, , @code{VPATH} Search Path for All Prerequisites}).\nThis example shows how to\ntell the C compiler to search for header files in the same list of\ndirectories.@refill\n\nThe value of @code{VPATH} is a list of directories separated by colons,\nsuch as @samp{src:../headers}.  First, the @code{subst} function is used to\nchange the colons to spaces:\n\n@example\n$(subst :, ,$(VPATH))\n@end example\n\n@noindent\nThis produces @samp{src ../headers}.  Then @code{patsubst} is used to turn\neach directory name into a @samp{-I} flag.  These can be added to the\nvalue of the variable @code{CFLAGS}, which is passed automatically to the C\ncompiler, like this:\n\n@example\noverride CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))\n@end example\n\n@noindent\nThe effect is to append the text @samp{-Isrc -I../headers} to the\npreviously given value of @code{CFLAGS}.  The @code{override} directive is\nused so that the new value is assigned even if the previous value of\n@code{CFLAGS} was specified with a command argument (@pxref{Override\nDirective, , The @code{override} Directive}).\n\n@node File Name Functions, Conditional Functions, Text Functions, Functions\n@section Functions for File Names\n@cindex functions, for file names\n@cindex file name functions\n\nSeveral of the built-in expansion functions relate specifically to\ntaking apart file names or lists of file names.\n\nEach of the following functions performs a specific transformation on a\nfile name.  The argument of the function is regarded as a series of file\nnames, separated by whitespace.  (Leading and trailing whitespace is\nignored.)  Each file name in the series is transformed in the same way and\nthe results are concatenated with single spaces between them.\n\n@table @code\n@item $(dir @var{names}@dots{})\n@findex dir\n@cindex directory part\n@cindex file name, directory part\nExtracts the directory-part of each file name in @var{names}.  The\ndirectory-part of the file name is everything up through (and\nincluding) the last slash in it.  If the file name contains no slash,\nthe directory part is the string @samp{./}.  For example,\n\n@example\n$(dir src/foo.c hacks)\n@end example\n\n@noindent\nproduces the result @samp{src/ ./}.\n\n@item $(notdir @var{names}@dots{})\n@findex notdir\n@cindex file name, nondirectory part\n@cindex nondirectory part\nExtracts all but the directory-part of each file name in @var{names}.\nIf the file name contains no slash, it is left unchanged.  Otherwise,\neverything through the last slash is removed from it.\n\nA file name that ends with a slash becomes an empty string.  This is\nunfortunate, because it means that the result does not always have the\nsame number of whitespace-separated file names as the argument had;\nbut we do not see any other valid alternative.\n\nFor example,\n\n@example\n$(notdir src/foo.c hacks)\n@end example\n\n@noindent\nproduces the result @samp{foo.c hacks}.\n\n@item $(suffix @var{names}@dots{})\n@findex suffix\n@cindex suffix, function to find\n@cindex file name suffix\nExtracts the suffix of each file name in @var{names}.  If the file name\ncontains a period, the suffix is everything starting with the last\nperiod.  Otherwise, the suffix is the empty string.  This frequently\nmeans that the result will be empty when @var{names} is not, and if\n@var{names} contains multiple file names, the result may contain fewer\nfile names.\n\nFor example,\n\n@example\n$(suffix src/foo.c src-1.0/bar.c hacks)\n@end example\n\n@noindent\nproduces the result @samp{.c .c}.\n\n@item $(basename @var{names}@dots{})\n@findex basename\n@cindex basename\n@cindex file name, basename of\nExtracts all but the suffix of each file name in @var{names}.  If the\nfile name contains a period, the basename is everything starting up to\n(and not including) the last period.  Periods in the directory part are\nignored.  If there is no period, the basename is the entire file name.\nFor example,\n\n@example\n$(basename src/foo.c src-1.0/bar hacks)\n@end example\n\n@noindent\nproduces the result @samp{src/foo src-1.0/bar hacks}.\n\n@c plural convention with dots (be consistent)\n@item $(addsuffix @var{suffix},@var{names}@dots{})\n@findex addsuffix\n@cindex suffix, adding\n@cindex file name suffix, adding\nThe argument @var{names} is regarded as a series of names, separated\nby whitespace; @var{suffix} is used as a unit.  The value of\n@var{suffix} is appended to the end of each individual name and the\nresulting larger names are concatenated with single spaces between\nthem.  For example,\n\n@example\n$(addsuffix .c,foo bar)\n@end example\n\n@noindent\nproduces the result @samp{foo.c bar.c}.\n\n@item $(addprefix @var{prefix},@var{names}@dots{})\n@findex addprefix\n@cindex prefix, adding\n@cindex file name prefix, adding\nThe argument @var{names} is regarded as a series of names, separated\nby whitespace; @var{prefix} is used as a unit.  The value of\n@var{prefix} is prepended to the front of each individual name and the\nresulting larger names are concatenated with single spaces between\nthem.  For example,\n\n@example\n$(addprefix src/,foo bar)\n@end example\n\n@noindent\nproduces the result @samp{src/foo src/bar}.\n\n@item $(join @var{list1},@var{list2})\n@findex join\n@cindex joining lists of words\n@cindex words, joining lists\nConcatenates the two arguments word by word: the two first words (one\nfrom each argument) concatenated form the first word of the result, the\ntwo second words form the second word of the result, and so on.  So the\n@var{n}th word of the result comes from the @var{n}th word of each\nargument.  If one argument has more words that the other, the extra\nwords are copied unchanged into the result.\n\nFor example, @samp{$(join a b,.c .o)} produces @samp{a.c b.o}.\n\nWhitespace between the words in the lists is not preserved; it is\nreplaced with a single space.\n\nThis function can merge the results of the @code{dir} and\n@code{notdir} functions, to produce the original list of files which\nwas given to those two functions.@refill\n\n@item $(wildcard @var{pattern})\n@findex wildcard\n@cindex wildcard, function\nThe argument @var{pattern} is a file name pattern, typically containing\nwildcard characters (as in shell file name patterns).  The result of\n@code{wildcard} is a space-separated list of the names of existing files\nthat match the pattern.\n@xref{Wildcards, ,Using Wildcard Characters in File Names}.\n\n@item $(realpath @var{names}@dots{})\n@findex realpath\n@cindex realpath\n@cindex file name, realpath of\nFor each file name in @var{names} return the canonical absolute name.\nA canonical name does not contain any @code{.} or @code{..} components,\nnor any repeated path separators (@code{/}) or symlinks.  In case of a\nfailure the empty string is returned.  Consult the @code{realpath(3)}\ndocumentation for a list of possible failure causes.\n\n@item $(abspath @var{names}@dots{})\n@findex abspath\n@cindex abspath\n@cindex file name, abspath of\nFor each file name in @var{names} return an absolute name that does\nnot contain any @code{.} or @code{..} components, nor any repeated path\nseparators (@code{/}).  Note that, in contrast to @code{realpath}\nfunction, @code{abspath} does not resolve symlinks and does not require\nthe file names to refer to an existing file or directory.  Use the\n@code{wildcard} function to test for existence.\n@end table\n\n@node Conditional Functions, Foreach Function, File Name Functions, Functions\n@section Functions for Conditionals\n@findex if\n@cindex conditional expansion\nThere are three functions that provide conditional expansion.  A key\naspect of these functions is that not all of the arguments are\nexpanded initially.  Only those arguments which need to be expanded,\nwill be expanded.\n\n@table @code\n@item $(if @var{condition},@var{then-part}[,@var{else-part}])\n@findex if\nThe @code{if} function provides support for conditional expansion in a\nfunctional context (as opposed to the GNU @code{make} makefile\nconditionals such as @code{ifeq} (@pxref{Conditional Syntax, ,Syntax of\nConditionals}).\n\nThe first argument, @var{condition}, first has all preceding and\ntrailing whitespace stripped, then is expanded.  If it expands to any\nnon-empty string, then the condition is considered to be true.  If it\nexpands to an empty string, the condition is considered to be false.\n\nIf the condition is true then the second argument, @var{then-part}, is\nevaluated and this is used as the result of the evaluation of the entire\n@code{if} function.\n\nIf the condition is false then the third argument, @var{else-part}, is\nevaluated and this is the result of the @code{if} function.  If there is\nno third argument, the @code{if} function evaluates to nothing (the\nempty string).\n\nNote that only one of the @var{then-part} or the @var{else-part} will be\nevaluated, never both.  Thus, either can contain side-effects (such as\n@code{shell} function calls, etc.)\n\n@item $(or @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]])\n@findex or\nThe @code{or} function provides a ``short-circuiting'' OR operation.\nEach argument is expanded, in order.  If an argument expands to a\nnon-empty string the processing stops and the result of the expansion\nis that string.  If, after all arguments are expanded, all of them are\nfalse (empty), then the result of the expansion is the empty string.\n\n@item $(and @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]])\n@findex and\nThe @code{and} function provides a ``short-circuiting'' AND operation.\nEach argument is expanded, in order.  If an argument expands to an\nempty string the processing stops and the result of the expansion is\nthe empty string.  If all arguments expand to a non-empty string then\nthe result of the expansion is the expansion of the last argument.\n\n@end table\n\n@node Foreach Function, Call Function, Conditional Functions, Functions\n@section The @code{foreach} Function\n@findex foreach\n@cindex words, iterating over\n\nThe @code{foreach} function is very different from other functions.  It\ncauses one piece of text to be used repeatedly, each time with a different\nsubstitution performed on it.  It resembles the @code{for} command in the\nshell @code{sh} and the @code{foreach} command in the C-shell @code{csh}.\n\nThe syntax of the @code{foreach} function is:\n\n@example\n$(foreach @var{var},@var{list},@var{text})\n@end example\n\n@noindent\nThe first two arguments, @var{var} and @var{list}, are expanded before\nanything else is done; note that the last argument, @var{text}, is\n@strong{not} expanded at the same time.  Then for each word of the expanded\nvalue of @var{list}, the variable named by the expanded value of @var{var}\nis set to that word, and @var{text} is expanded.  Presumably @var{text}\ncontains references to that variable, so its expansion will be different\neach time.\n\nThe result is that @var{text} is expanded as many times as there are\nwhitespace-separated words in @var{list}.  The multiple expansions of\n@var{text} are concatenated, with spaces between them, to make the result\nof @code{foreach}.\n\nThis simple example sets the variable @samp{files} to the list of all files\nin the directories in the list @samp{dirs}:\n\n@example\ndirs := a b c d\nfiles := $(foreach dir,$(dirs),$(wildcard $(dir)/*))\n@end example\n\nHere @var{text} is @samp{$(wildcard $(dir)/*)}.  The first repetition\nfinds the value @samp{a} for @code{dir}, so it produces the same result\nas @samp{$(wildcard a/*)}; the second repetition produces the result\nof @samp{$(wildcard b/*)}; and the third, that of @samp{$(wildcard c/*)}.\n\nThis example has the same result (except for setting @samp{dirs}) as\nthe following example:\n\n@example\nfiles := $(wildcard a/* b/* c/* d/*)\n@end example\n\nWhen @var{text} is complicated, you can improve readability by giving it\na name, with an additional variable:\n\n@example\nfind_files = $(wildcard $(dir)/*)\ndirs := a b c d\nfiles := $(foreach dir,$(dirs),$(find_files))\n@end example\n\n@noindent\nHere we use the variable @code{find_files} this way.  We use plain @samp{=}\nto define a recursively-expanding variable, so that its value contains an\nactual function call to be reexpanded under the control of @code{foreach};\na simply-expanded variable would not do, since @code{wildcard} would be\ncalled only once at the time of defining @code{find_files}.\n\nThe @code{foreach} function has no permanent effect on the variable\n@var{var}; its value and flavor after the @code{foreach} function call are\nthe same as they were beforehand.  The other values which are taken from\n@var{list} are in effect only temporarily, during the execution of\n@code{foreach}.  The variable @var{var} is a simply-expanded variable\nduring the execution of @code{foreach}.  If @var{var} was undefined\nbefore the @code{foreach} function call, it is undefined after the call.\n@xref{Flavors, ,The Two Flavors of Variables}.@refill\n\nYou must take care when using complex variable expressions that result in\nvariable names because many strange things are valid variable names, but\nare probably not what you intended.  For example,\n\n@smallexample\nfiles := $(foreach Esta escrito en espanol!,b c ch,$(find_files))\n@end smallexample\n\n@noindent\nmight be useful if the value of @code{find_files} references the variable\nwhose name is @samp{Esta escrito en espanol!} (es un nombre bastante largo,\nno?), but it is more likely to be a mistake.\n\n@node Call Function, Value Function, Foreach Function, Functions\n@section The @code{call} Function\n@findex call\n@cindex functions, user defined\n@cindex user defined functions\n\nThe @code{call} function is unique in that it can be used to create new\nparameterized functions.  You can write a complex expression as the\nvalue of a variable, then use @code{call} to expand it with different\nvalues.\n\nThe syntax of the @code{call} function is:\n\n@example\n$(call @var{variable},@var{param},@var{param},@dots{})\n@end example\n\nWhen @code{make} expands this function, it assigns each @var{param} to\ntemporary variables @code{$(1)}, @code{$(2)}, etc.  The variable\n@code{$(0)} will contain @var{variable}.  There is no maximum number of\nparameter arguments.  There is no minimum, either, but it doesn't make\nsense to use @code{call} with no parameters.\n\nThen @var{variable} is expanded as a @code{make} variable in the context\nof these temporary assignments.  Thus, any reference to @code{$(1)} in\nthe value of @var{variable} will resolve to the first @var{param} in the\ninvocation of @code{call}.\n\nNote that @var{variable} is the @emph{name} of a variable, not a\n@emph{reference} to that variable.  Therefore you would not normally use\na @samp{$} or parentheses when writing it.  (You can, however, use a\nvariable reference in the name if you want the name not to be a\nconstant.)\n\nIf @var{variable} is the name of a builtin function, the builtin function\nis always invoked (even if a @code{make} variable by that name also\nexists).\n\nThe @code{call} function expands the @var{param} arguments before\nassigning them to temporary variables.  This means that @var{variable}\nvalues containing references to builtin functions that have special\nexpansion rules, like @code{foreach} or @code{if}, may not work as you\nexpect.\n\nSome examples may make this clearer.\n\nThis macro simply reverses its arguments:\n\n@smallexample\nreverse = $(2) $(1)\n\nfoo = $(call reverse,a,b)\n@end smallexample\n\n@noindent\nHere @var{foo} will contain @samp{b a}.\n\nThis one is slightly more interesting: it defines a macro to search for\nthe first instance of a program in @code{PATH}:\n\n@smallexample\npathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))\n\nLS := $(call pathsearch,ls)\n@end smallexample\n\n@noindent\nNow the variable LS contains @code{/bin/ls} or similar.\n\nThe @code{call} function can be nested.  Each recursive invocation gets\nits own local values for @code{$(1)}, etc.@: that mask the values of\nhigher-level @code{call}.  For example, here is an implementation of a\n@dfn{map} function:\n\n@smallexample\nmap = $(foreach a,$(2),$(call $(1),$(a)))\n@end smallexample\n\nNow you can @var{map} a function that normally takes only one argument,\nsuch as @code{origin}, to multiple values in one step:\n\n@smallexample\no = $(call map,origin,o map MAKE)\n@end smallexample\n\nand end up with @var{o} containing something like @samp{file file default}.\n\nA final caution: be careful when adding whitespace to the arguments to\n@code{call}.  As with other functions, any whitespace contained in the\nsecond and subsequent arguments is kept; this can cause strange\neffects.  It's generally safest to remove all extraneous whitespace when\nproviding parameters to @code{call}.\n\n@node Value Function, Eval Function, Call Function, Functions\n@comment  node-name,  next,  previous,  up\n@section The @code{value} Function\n@findex value\n@cindex variables, unexpanded value\n\nThe @code{value} function provides a way for you to use the value of a\nvariable @emph{without} having it expanded.  Please note that this\ndoes not undo expansions which have already occurred; for example if\nyou create a simply expanded variable its value is expanded during the\ndefinition; in that case the @code{value} function will return the\nsame result as using the variable directly.\n\nThe syntax of the @code{value} function is:\n\n@example\n$(value @var{variable})\n@end example\n\nNote that @var{variable} is the @emph{name} of a variable; not a\n@emph{reference} to that variable.  Therefore you would not normally\nuse a @samp{$} or parentheses when writing it.  (You can, however, use\na variable reference in the name if you want the name not to be a\nconstant.)\n\nThe result of this function is a string containing the value of\n@var{variable}, without any expansion occurring.  For example, in this\nmakefile:\n\n@example\n@group\nFOO = $PATH\n\nall:\n        @@echo $(FOO)\n        @@echo $(value FOO)\n@end group\n@end example\n\n@noindent\nThe first output line would be @code{ATH}, since the ``$P'' would be\nexpanded as a @code{make} variable, while the second output line would\nbe the current value of your @code{$PATH} environment variable, since\nthe @code{value} function avoided the expansion.\n\nThe @code{value} function is most often used in conjunction with the\n@code{eval} function (@pxref{Eval Function}).\n\n@node Eval Function, Origin Function, Value Function, Functions\n@comment  node-name,  next,  previous,  up\n@section The @code{eval} Function\n@findex eval\n@cindex evaluating makefile syntax\n@cindex makefile syntax, evaluating\n\nThe @code{eval} function is very special: it allows you to define new\nmakefile constructs that are not constant; which are the result of\nevaluating other variables and functions.  The argument to the\n@code{eval} function is expanded, then the results of that expansion\nare parsed as makefile syntax.  The expanded results can define new\n@code{make} variables, targets, implicit or explicit rules, etc.\n\nThe result of the @code{eval} function is always the empty string;\nthus, it can be placed virtually anywhere in a makefile without\ncausing syntax errors.\n\nIt's important to realize that the @code{eval} argument is expanded\n@emph{twice}; first by the @code{eval} function, then the results of\nthat expansion are expanded again when they are parsed as makefile\nsyntax.  This means you may need to provide extra levels of escaping\nfor ``$'' characters when using @code{eval}.  The @code{value}\nfunction (@pxref{Value Function}) can sometimes be useful in these\nsituations, to circumvent unwanted expansions.\n\nHere is an example of how @code{eval} can be used; this example\ncombines a number of concepts and other functions.  Although it might\nseem overly complex to use @code{eval} in this example, rather than\njust writing out the rules, consider two things: first, the template\ndefinition (in @code{PROGRAM_template}) could need to be much more\ncomplex than it is here; and second, you might put the complex,\n``generic'' part of this example into another makefile, then include\nit in all the individual makefiles.  Now your individual makefiles are\nquite straightforward.\n\n@example\n@group\nPROGRAMS    = server client\n\nserver_OBJS = server.o server_priv.o server_access.o\nserver_LIBS = priv protocol\n\nclient_OBJS = client.o client_api.o client_mem.o\nclient_LIBS = protocol\n\n# Everything after this is generic\n\n.PHONY: all\nall: $(PROGRAMS)\n\ndefine PROGRAM_template\n $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)\n ALL_OBJS   += $$($(1)_OBJS)\nendef\n\n$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))\n\n$(PROGRAMS):\n        $(LINK.o) $^ $(LDLIBS) -o $@@\n\nclean:\n        rm -f $(ALL_OBJS) $(PROGRAMS)\n@end group\n@end example\n\n@node Origin Function, Flavor Function, Eval Function, Functions\n@section The @code{origin} Function\n@findex origin\n@cindex variables, origin of\n@cindex origin of variable\n\nThe @code{origin} function is unlike most other functions in that it does\nnot operate on the values of variables; it tells you something @emph{about}\na variable.  Specifically, it tells you where it came from.\n\nThe syntax of the @code{origin} function is:\n\n@example\n$(origin @var{variable})\n@end example\n\nNote that @var{variable} is the @emph{name} of a variable to inquire about;\nnot a @emph{reference} to that variable.  Therefore you would not normally\nuse a @samp{$} or parentheses when writing it.  (You can, however, use a\nvariable reference in the name if you want the name not to be a constant.)\n\nThe result of this function is a string telling you how the variable\n@var{variable} was defined:\n\n@table @samp\n@item undefined\n\nif @var{variable} was never defined.\n\n@item default\n\nif @var{variable} has a default definition, as is usual with @code{CC}\nand so on.  @xref{Implicit Variables, ,Variables Used by Implicit Rules}.\nNote that if you have redefined a default variable, the @code{origin}\nfunction will return the origin of the later definition.\n\n@item environment\n\nif @var{variable} was defined as an environment variable and the\n@samp{-e} option is @emph{not} turned on (@pxref{Options Summary, ,Summary of Options}).\n\n@item environment override\n\nif @var{variable} was defined as an environment variable and the\n@w{@samp{-e}} option @emph{is} turned on (@pxref{Options Summary,\n,Summary of Options}).@refill\n\n@item file\n\nif @var{variable} was defined in a makefile.\n\n@item command line\n\nif @var{variable} was defined on the command line.\n\n@item override\n\nif @var{variable} was defined with an @code{override} directive in a\nmakefile (@pxref{Override Directive, ,The @code{override} Directive}).\n\n@item automatic\n\nif @var{variable} is an automatic variable defined for the\nexecution of the commands for each rule\n(@pxref{Automatic Variables}).\n@end table\n\nThis information is primarily useful (other than for your curiosity) to\ndetermine if you want to believe the value of a variable.  For example,\nsuppose you have a makefile @file{foo} that includes another makefile\n@file{bar}.  You want a variable @code{bletch} to be defined in @file{bar}\nif you run the command @w{@samp{make -f bar}}, even if the environment contains\na definition of @code{bletch}.  However, if @file{foo} defined\n@code{bletch} before including @file{bar}, you do not want to override that\ndefinition.  This could be done by using an @code{override} directive in\n@file{foo}, giving that definition precedence over the later definition in\n@file{bar}; unfortunately, the @code{override} directive would also\noverride any command line definitions.  So, @file{bar} could\ninclude:@refill\n\n@example\n@group\nifdef bletch\nifeq \"$(origin bletch)\" \"environment\"\nbletch = barf, gag, etc.\nendif\nendif\n@end group\n@end example\n\n@noindent\nIf @code{bletch} has been defined from the environment, this will redefine\nit.\n\nIf you want to override a previous definition of @code{bletch} if it came\nfrom the environment, even under @samp{-e}, you could instead write:\n\n@example\n@group\nifneq \"$(findstring environment,$(origin bletch))\" \"\"\nbletch = barf, gag, etc.\nendif\n@end group\n@end example\n\nHere the redefinition takes place if @samp{$(origin bletch)} returns either\n@samp{environment} or @samp{environment override}.\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@node Flavor Function, Shell Function, Origin Function, Functions\n@section The @code{flavor} Function\n@findex flavor\n@cindex variables, flavor of\n@cindex flavor of variable\n\nThe @code{flavor} function is unlike most other functions (and like\n@code{origin} function) in that it does not operate on the values of\nvariables; it tells you something @emph{about} a variable.\nSpecifically, it tells you the flavor of a variable (@pxref{Flavors,\n,The Two Flavors of Variables}).\n\nThe syntax of the @code{flavor} function is:\n\n@example\n$(flavor @var{variable})\n@end example\n\nNote that @var{variable} is the @emph{name} of a variable to inquire about;\nnot a @emph{reference} to that variable.  Therefore you would not normally\nuse a @samp{$} or parentheses when writing it.  (You can, however, use a\nvariable reference in the name if you want the name not to be a constant.)\n\nThe result of this function is a string that identifies the flavor of the\nvariable @var{variable}:\n\n@table @samp\n@item undefined\n\nif @var{variable} was never defined.\n\n@item recursive\n\nif @var{variable} is a recursively expanded variable.\n\n@item simple\n\nif @var{variable} is a simply expanded variable.\n\n@end table\n\n\n@node Shell Function, Make Control Functions, Flavor Function, Functions\n@section The @code{shell} Function\n@findex shell\n@cindex commands, expansion\n@cindex backquotes\n@cindex shell command, function for\n\nThe @code{shell} function is unlike any other function other than the\n@code{wildcard} function\n(@pxref{Wildcard Function, ,The Function @code{wildcard}}) in that it\ncommunicates with the world outside of @code{make}.\n\nThe @code{shell} function performs the same function that backquotes\n(@samp{`}) perform in most shells: it does @dfn{command expansion}.\nThis means that it takes as an argument a shell command and evaluates\nto the output of the command.  The only processing @code{make} does on\nthe result is to convert each newline (or carriage-return / newline\npair) to a single space.  If there is a trailing (carriage-return\nand) newline it will simply be removed.@refill\n\nThe commands run by calls to the @code{shell} function are run when the\nfunction calls are expanded (@pxref{Reading Makefiles, , How\n@code{make} Reads a Makefile}).  Because this function involves\nspawning a new shell, you should carefully consider the performance\nimplications of using the @code{shell} function within recursively\nexpanded variables vs.@: simply expanded variables (@pxref{Flavors, ,The\nTwo Flavors of Variables}).\n\nHere are some examples of the use of the @code{shell} function:\n\n@example\ncontents := $(shell cat foo)\n@end example\n\n@noindent\nsets @code{contents} to the contents of the file @file{foo}, with a space\n(rather than a newline) separating each line.\n\n@example\nfiles := $(shell echo *.c)\n@end example\n\n@noindent\nsets @code{files} to the expansion of @samp{*.c}.  Unless @code{make} is\nusing a very strange shell, this has the same result as\n@w{@samp{$(wildcard *.c)}} (as long as at least one @samp{.c} file\nexists).@refill\n\n@node Make Control Functions,  , Shell Function, Functions\n@section Functions That Control Make\n@cindex functions, for controlling make\n@cindex controlling make\n\nThese functions control the way make runs.  Generally, they are used to\nprovide information to the user of the makefile or to cause make to stop\nif some sort of environmental error is detected.\n\n@table @code\n@item $(error @var{text}@dots{})\n@findex error\n@cindex error, stopping on\n@cindex stopping make\nGenerates a fatal error where the message is @var{text}.  Note that the\nerror is generated whenever this function is evaluated.  So, if you put\nit inside a command script or on the right side of a recursive variable\nassignment, it won't be evaluated until later.  The @var{text} will be\nexpanded before the error is generated.\n\nFor example,\n\n@example\nifdef ERROR1\n$(error error is $(ERROR1))\nendif\n@end example\n\n@noindent\nwill generate a fatal error during the read of the makefile if the\n@code{make} variable @code{ERROR1} is defined.  Or,\n\n@example\nERR = $(error found an error!)\n\n.PHONY: err\nerr: ; $(ERR)\n@end example\n\n@noindent\nwill generate a fatal error while @code{make} is running, if the\n@code{err} target is invoked.\n\n@item $(warning @var{text}@dots{})\n@findex warning\n@cindex warnings, printing\n@cindex printing user warnings\nThis function works similarly to the @code{error} function, above,\nexcept that @code{make} doesn't exit.  Instead, @var{text} is expanded\nand the resulting message is displayed, but processing of the makefile\ncontinues.\n\nThe result of the expansion of this function is the empty string.\n\n@item $(info @var{text}@dots{})\n@findex info\n@cindex printing messages\nThis function does nothing more than print its (expanded) argument(s)\nto standard output.  No makefile name or line number is added.  The\nresult of the expansion of this function is the empty string.\n@end table\n\n@node Running, Implicit Rules, Functions, Top\n@chapter How to Run @code{make}\n\nA makefile that says how to recompile a program can be used in more\nthan one way.  The simplest use is to recompile every file that is out\nof date.  Usually, makefiles are written so that if you run\n@code{make} with no arguments, it does just that.\n\nBut you might want to update only some of the files; you might want to use\na different compiler or different compiler options; you might want just to\nfind out which files are out of date without changing them.\n\nBy giving arguments when you run @code{make}, you can do any of these\nthings and many others.\n\n@cindex exit status of make\nThe exit status of @code{make} is always one of three values:\n@table @code\n@item 0\nThe exit status is zero if @code{make} is successful.\n@item 2\nThe exit status is two if @code{make} encounters any errors.\nIt will print messages describing the particular errors.\n@item 1\nThe exit status is one if you use the @samp{-q} flag and @code{make}\ndetermines that some target is not already up to date.\n@xref{Instead of Execution, ,Instead of Executing the Commands}.\n@end table\n\n@menu\n* Makefile Arguments::          How to specify which makefile to use.\n* Goals::                       How to use goal arguments to specify which\n                                  parts of the makefile to use.\n* Instead of Execution::        How to use mode flags to specify what\n                                  kind of thing to do with the commands\n                                  in the makefile other than simply\n                                  execute them.\n* Avoiding Compilation::        How to avoid recompiling certain files.\n* Overriding::                  How to override a variable to specify\n                                  an alternate compiler and other things.\n* Testing::                     How to proceed past some errors, to\n                                  test compilation.\n* Options Summary::             Summary of Options\n@end menu\n\n@node Makefile Arguments, Goals, Running, Running\n@section Arguments to Specify the Makefile\n@cindex @code{--file}\n@cindex @code{--makefile}\n@cindex @code{-f}\n\nThe way to specify the name of the makefile is with the @samp{-f} or\n@samp{--file} option (@samp{--makefile} also works).  For example,\n@samp{-f altmake} says to use the file @file{altmake} as the makefile.\n\nIf you use the @samp{-f} flag several times and follow each @samp{-f}\nwith an argument, all the specified files are used jointly as\nmakefiles.\n\nIf you do not use the @samp{-f} or @samp{--file} flag, the default is\nto try @file{GNUmakefile}, @file{makefile}, and @file{Makefile}, in\nthat order, and use the first of these three which exists or can be made\n(@pxref{Makefiles, ,Writing Makefiles}).@refill\n\n@node Goals, Instead of Execution, Makefile Arguments, Running\n@section Arguments to Specify the Goals\n@cindex goal, how to specify\n\nThe @dfn{goals} are the targets that @code{make} should strive ultimately\nto update.  Other targets are updated as well if they appear as\nprerequisites of goals, or prerequisites of prerequisites of goals, etc.\n\nBy default, the goal is the first target in the makefile (not counting\ntargets that start with a period).  Therefore, makefiles are usually\nwritten so that the first target is for compiling the entire program or\nprograms they describe.  If the first rule in the makefile has several\ntargets, only the first target in the rule becomes the default goal, not\nthe whole list.  You can manage the selection of the default goal from\nwithin your makefile using the @code{.DEFAULT_GOAL} variable\n(@pxref{Special Variables, , Other Special Variables}).\n\nYou can also specify a different goal or goals with command-line\narguments to @code{make}.  Use the name of the goal as an argument.\nIf you specify several goals, @code{make} processes each of them in\nturn, in the order you name them.\n\nAny target in the makefile may be specified as a goal (unless it\nstarts with @samp{-} or contains an @samp{=}, in which case it will be\nparsed as a switch or variable definition, respectively).  Even\ntargets not in the makefile may be specified, if @code{make} can find\nimplicit rules that say how to make them.\n\n@vindex MAKECMDGOALS\n@code{Make} will set the special variable @code{MAKECMDGOALS} to the\nlist of goals you specified on the command line.  If no goals were given\non the command line, this variable is empty.  Note that this variable\nshould be used only in special circumstances.\n\nAn example of appropriate use is to avoid including @file{.d} files\nduring @code{clean} rules (@pxref{Automatic Prerequisites}), so\n@code{make} won't create them only to immediately remove them\nagain:@refill\n\n@example\n@group\nsources = foo.c bar.c\n\nifneq ($(MAKECMDGOALS),clean)\ninclude $(sources:.c=.d)\nendif\n@end group\n@end example\n\nOne use of specifying a goal is if you want to compile only a part of\nthe program, or only one of several programs.  Specify as a goal each\nfile that you wish to remake.  For example, consider a directory containing\nseveral programs, with a makefile that starts like this:\n\n@example\n.PHONY: all\nall: size nm ld ar as\n@end example\n\nIf you are working on the program @code{size}, you might want to say\n@w{@samp{make size}} so that only the files of that program are recompiled.\n\nAnother use of specifying a goal is to make files that are not normally\nmade.  For example, there may be a file of debugging output, or a\nversion of the program that is compiled specially for testing, which has\na rule in the makefile but is not a prerequisite of the default goal.\n\nAnother use of specifying a goal is to run the commands associated with\na phony target (@pxref{Phony Targets}) or empty target (@pxref{Empty\nTargets, ,Empty Target Files to Record Events}).  Many makefiles contain\na phony target named @file{clean} which deletes everything except source\nfiles.  Naturally, this is done only if you request it explicitly with\n@w{@samp{make clean}}.  Following is a list of typical phony and empty\ntarget names.  @xref{Standard Targets}, for a detailed list of all the\nstandard target names which GNU software packages use.\n\n@table @file\n@item all\n@cindex @code{all} @r{(standard target)}\nMake all the top-level targets the makefile knows about.\n\n@item clean\n@cindex @code{clean} @r{(standard target)}\nDelete all files that are normally created by running @code{make}.\n\n@item mostlyclean\n@cindex @code{mostlyclean} @r{(standard target)}\nLike @samp{clean}, but may refrain from deleting a few files that people\nnormally don't want to recompile.  For example, the @samp{mostlyclean}\ntarget for GCC does not delete @file{libgcc.a}, because recompiling it\nis rarely necessary and takes a lot of time.\n\n@item distclean\n@cindex @code{distclean} @r{(standard target)}\n@itemx realclean\n@cindex @code{realclean} @r{(standard target)}\n@itemx clobber\n@cindex @code{clobber} @r{(standard target)}\nAny of these targets might be defined to delete @emph{more} files than\n@samp{clean} does.  For example, this would delete configuration files\nor links that you would normally create as preparation for compilation,\neven if the makefile itself cannot create these files.\n\n@item install\n@cindex @code{install} @r{(standard target)}\nCopy the executable file into a directory that users typically search\nfor commands; copy any auxiliary files that the executable uses into\nthe directories where it will look for them.\n\n@item print\n@cindex @code{print} @r{(standard target)}\nPrint listings of the source files that have changed.\n\n@item tar\n@cindex @code{tar} @r{(standard target)}\nCreate a tar file of the source files.\n\n@item shar\n@cindex @code{shar} @r{(standard target)}\nCreate a shell archive (shar file) of the source files.\n\n@item dist\n@cindex @code{dist} @r{(standard target)}\nCreate a distribution file of the source files.  This might\nbe a tar file, or a shar file, or a compressed version of one of the\nabove, or even more than one of the above.\n\n@item TAGS\n@cindex @code{TAGS} @r{(standard target)}\nUpdate a tags table for this program.\n\n@item check\n@cindex @code{check} @r{(standard target)}\n@itemx test\n@cindex @code{test} @r{(standard target)}\nPerform self tests on the program this makefile builds.\n@end table\n\n@node Instead of Execution, Avoiding Compilation, Goals, Running\n@section Instead of Executing the Commands\n@cindex execution, instead of\n@cindex commands, instead of executing\n\nThe makefile tells @code{make} how to tell whether a target is up to date,\nand how to update each target.  But updating the targets is not always\nwhat you want.  Certain options specify other activities for @code{make}.\n\n@comment Extra blank lines make it print better.\n@table @samp\n@item -n\n@itemx --just-print\n@itemx --dry-run\n@itemx --recon\n@cindex @code{--just-print}\n@cindex @code{--dry-run}\n@cindex @code{--recon}\n@cindex @code{-n}\n\n``No-op''.  The activity is to print what commands would be used to make\nthe targets up to date, but not actually execute them.\n\n@item -t\n@itemx --touch\n@cindex @code{--touch}\n@cindex touching files\n@cindex target, touching\n@cindex @code{-t}\n\n``Touch''.  The activity is to mark the targets as up to date without\nactually changing them.  In other words, @code{make} pretends to compile\nthe targets but does not really change their contents.\n\n@item -q\n@itemx --question\n@cindex @code{--question}\n@cindex @code{-q}\n@cindex question mode\n\n``Question''.  The activity is to find out silently whether the targets\nare up to date already; but execute no commands in either case.  In other\nwords, neither compilation nor output will occur.\n\n@item -W @var{file}\n@itemx --what-if=@var{file}\n@itemx --assume-new=@var{file}\n@itemx --new-file=@var{file}\n@cindex @code{--what-if}\n@cindex @code{-W}\n@cindex @code{--assume-new}\n@cindex @code{--new-file}\n@cindex what if\n@cindex files, assuming new\n\n``What if''.  Each @samp{-W} flag is followed by a file name.  The given\nfiles' modification times are recorded by @code{make} as being the present\ntime, although the actual modification times remain the same.\nYou can use the @samp{-W} flag in conjunction with the @samp{-n} flag\nto see what would happen if you were to modify specific files.@refill\n@end table\n\nWith the @samp{-n} flag, @code{make} prints the commands that it would\nnormally execute but does not execute them.\n\nWith the @samp{-t} flag, @code{make} ignores the commands in the rules\nand uses (in effect) the command @code{touch} for each target that needs to\nbe remade.  The @code{touch} command is also printed, unless @samp{-s} or\n@code{.SILENT} is used.  For speed, @code{make} does not actually invoke\nthe program @code{touch}.  It does the work directly.\n\nWith the @samp{-q} flag, @code{make} prints nothing and executes no\ncommands, but the exit status code it returns is zero if and only if the\ntargets to be considered are already up to date.  If the exit status is\none, then some updating needs to be done.  If @code{make} encounters an\nerror, the exit status is two, so you can distinguish an error from a\ntarget that is not up to date.\n\nIt is an error to use more than one of these three flags in the same\ninvocation of @code{make}.\n\n@cindex +, and command execution\nThe @samp{-n}, @samp{-t}, and @samp{-q} options do not affect command\nlines that begin with @samp{+} characters or contain the strings\n@samp{$(MAKE)} or @samp{$@{MAKE@}}.  Note that only the line containing\nthe @samp{+} character or the strings @samp{$(MAKE)} or @samp{$@{MAKE@}}\nis run regardless of these options.  Other lines in the same rule are\nnot run unless they too begin with @samp{+} or contain @samp{$(MAKE)} or\n@samp{$@{MAKE@}} (@xref{MAKE Variable, ,How the @code{MAKE} Variable Works}.)\n\nThe @samp{-W} flag provides two features:\n\n@itemize @bullet\n@item\nIf you also use the @samp{-n} or @samp{-q} flag, you can see what\n@code{make} would do if you were to modify some files.\n\n@item\nWithout the @samp{-n} or @samp{-q} flag, when @code{make} is actually\nexecuting commands, the @samp{-W} flag can direct @code{make} to act\nas if some files had been modified, without actually modifying the\nfiles.@refill\n@end itemize\n\nNote that the options @samp{-p} and @samp{-v} allow you to obtain other\ninformation about @code{make} or about the makefiles in use\n(@pxref{Options Summary, ,Summary of Options}).@refill\n\n@node Avoiding Compilation, Overriding, Instead of Execution, Running\n@section Avoiding Recompilation of Some Files\n@cindex @code{-o}\n@cindex @code{--old-file}\n@cindex @code{--assume-old}\n@cindex files, assuming old\n@cindex files, avoiding recompilation of\n@cindex recompilation, avoiding\n\nSometimes you may have changed a source file but you do not want to\nrecompile all the files that depend on it.  For example, suppose you add\na macro or a declaration to a header file that many other files depend\non.  Being conservative, @code{make} assumes that any change in the\nheader file requires recompilation of all dependent files, but you know\nthat they do not need to be recompiled and you would rather not waste\nthe time waiting for them to compile.\n\nIf you anticipate the problem before changing the header file, you can\nuse the @samp{-t} flag.  This flag tells @code{make} not to run the\ncommands in the rules, but rather to mark the target up to date by\nchanging its last-modification date.  You would follow this procedure:\n\n@enumerate\n@item\nUse the command @samp{make} to recompile the source files that really\nneed recompilation, ensuring that the object files are up-to-date\nbefore you begin.\n\n@item\nMake the changes in the header files.\n\n@item\nUse the command @samp{make -t} to mark all the object files as\nup to date.  The next time you run @code{make}, the changes in the\nheader files will not cause any recompilation.\n@end enumerate\n\nIf you have already changed the header file at a time when some files\ndo need recompilation, it is too late to do this.  Instead, you can\nuse the @w{@samp{-o @var{file}}} flag, which marks a specified file as\n``old'' (@pxref{Options Summary, ,Summary of Options}).  This means\nthat the file itself will not be remade, and nothing else will be\nremade on its account.  Follow this procedure:\n\n@enumerate\n@item\nRecompile the source files that need compilation for reasons independent\nof the particular header file, with @samp{make -o @var{headerfile}}.\nIf several header files are involved, use a separate @samp{-o} option\nfor each header file.\n\n@item\nTouch all the object files with @samp{make -t}.\n@end enumerate\n\n@node Overriding, Testing, Avoiding Compilation, Running\n@section Overriding Variables\n@cindex overriding variables with arguments\n@cindex variables, overriding with arguments\n@cindex command line variables\n@cindex variables, command line\n\nAn argument that contains @samp{=} specifies the value of a variable:\n@samp{@var{v}=@var{x}} sets the value of the variable @var{v} to @var{x}.\nIf you specify a value in this way, all ordinary assignments of the same\nvariable in the makefile are ignored; we say they have been\n@dfn{overridden} by the command line argument.\n\nThe most common way to use this facility is to pass extra flags to\ncompilers.  For example, in a properly written makefile, the variable\n@code{CFLAGS} is included in each command that runs the C compiler, so a\nfile @file{foo.c} would be compiled something like this:\n\n@example\ncc -c $(CFLAGS) foo.c\n@end example\n\nThus, whatever value you set for @code{CFLAGS} affects each compilation\nthat occurs.  The makefile probably specifies the usual value for\n@code{CFLAGS}, like this:\n\n@example\nCFLAGS=-g\n@end example\n\nEach time you run @code{make}, you can override this value if you\nwish.  For example, if you say @samp{make CFLAGS='-g -O'}, each C\ncompilation will be done with @samp{cc -c -g -O}.  (This also\nillustrates how you can use quoting in the shell to enclose spaces and\nother special characters in the value of a variable when you override\nit.)\n\nThe variable @code{CFLAGS} is only one of many standard variables that\nexist just so that you can change them this way.  @xref{Implicit\nVariables, , Variables Used by Implicit Rules}, for a complete list.\n\nYou can also program the makefile to look at additional variables of your\nown, giving the user the ability to control other aspects of how the\nmakefile works by changing the variables.\n\nWhen you override a variable with a command argument, you can define either\na recursively-expanded variable or a simply-expanded variable.  The\nexamples shown above make a recursively-expanded variable; to make a\nsimply-expanded variable, write @samp{:=} instead of @samp{=}.  But, unless\nyou want to include a variable reference or function call in the\n@emph{value} that you specify, it makes no difference which kind of\nvariable you create.\n\nThere is one way that the makefile can change a variable that you have\noverridden.  This is to use the @code{override} directive, which is a line\nthat looks like this: @samp{override @var{variable} = @var{value}}\n(@pxref{Override Directive, ,The @code{override} Directive}).\n\n@node Testing, Options Summary, Overriding, Running\n@section Testing the Compilation of a Program\n@cindex testing compilation\n@cindex compilation, testing\n\nNormally, when an error happens in executing a shell command, @code{make}\ngives up immediately, returning a nonzero status.  No further commands are\nexecuted for any target.  The error implies that the goal cannot be\ncorrectly remade, and @code{make} reports this as soon as it knows.\n\nWhen you are compiling a program that you have just changed, this is not\nwhat you want.  Instead, you would rather that @code{make} try compiling\nevery file that can be tried, to show you as many compilation errors\nas possible.\n\n@cindex @code{-k}\n@cindex @code{--keep-going}\nOn these occasions, you should use the @samp{-k} or\n@samp{--keep-going} flag.  This tells @code{make} to continue to\nconsider the other prerequisites of the pending targets, remaking them\nif necessary, before it gives up and returns nonzero status.  For\nexample, after an error in compiling one object file, @samp{make -k}\nwill continue compiling other object files even though it already\nknows that linking them will be impossible.  In addition to continuing\nafter failed shell commands, @samp{make -k} will continue as much as\npossible after discovering that it does not know how to make a target\nor prerequisite file.  This will always cause an error message, but\nwithout @samp{-k}, it is a fatal error (@pxref{Options Summary,\n,Summary of Options}).@refill\n\nThe usual behavior of @code{make} assumes that your purpose is to get the\ngoals up to date; once @code{make} learns that this is impossible, it might\nas well report the failure immediately.  The @samp{-k} flag says that the\nreal purpose is to test as much as possible of the changes made in the\nprogram, perhaps to find several independent problems so that you can\ncorrect them all before the next attempt to compile.  This is why Emacs'\n@kbd{M-x compile} command passes the @samp{-k} flag by default.\n\n@node Options Summary,  , Testing, Running\n@section Summary of Options\n@cindex options\n@cindex flags\n@cindex switches\n\nHere is a table of all the options @code{make} understands:\n\n@table @samp\n@item -b\n@cindex @code{-b}\n@itemx -m\n@cindex @code{-m}\nThese options are ignored for compatibility with other versions of @code{make}.\n\n@item -B\n@cindex @code{-B}\n@itemx --always-make\n@cindex @code{--always-make}\nConsider all targets out-of-date.  GNU @code{make} proceeds to\nconsider targets and their prerequisites using the normal algorithms;\nhowever, all targets so considered are always remade regardless of the\nstatus of their prerequisites.  To avoid infinite recursion, if\n@code{MAKE_RESTARTS} (@pxref{Special Variables, , Other Special\nVariables}) is set to a number greater than 0 this option is disabled\nwhen considering whether to remake makefiles (@pxref{Remaking\nMakefiles, , How Makefiles Are Remade}).\n\n@item -C @var{dir}\n@cindex @code{-C}\n@itemx --directory=@var{dir}\n@cindex @code{--directory}\nChange to directory @var{dir} before reading the makefiles.  If multiple\n@samp{-C} options are specified, each is interpreted relative to the\nprevious one: @samp{-C / -C etc} is equivalent to @samp{-C /etc}.\nThis is typically used with recursive invocations of @code{make}\n(@pxref{Recursion, ,Recursive Use of @code{make}}).\n\n@item -d\n@cindex @code{-d}\n@c Extra blank line here makes the table look better.\n\nPrint debugging information in addition to normal processing.  The\ndebugging information says which files are being considered for\nremaking, which file-times are being compared and with what results,\nwhich files actually need to be remade, which implicit rules are\nconsidered and which are applied---everything interesting about how\n@code{make} decides what to do.  The @code{-d} option is equivalent to\n@samp{--debug=a} (see below).\n\n@item --debug[=@var{options}]\n@cindex @code{--debug}\n@c Extra blank line here makes the table look better.\n\nPrint debugging information in addition to normal processing.  Various\nlevels and types of output can be chosen.  With no arguments, print the\n``basic'' level of debugging.  Possible arguments are below; only the\nfirst character is considered, and values must be comma- or\nspace-separated.\n\n@table @code\n@item a (@i{all})\nAll types of debugging output are enabled.  This is equivalent to using\n@samp{-d}.\n\n@item b (@i{basic})\nBasic debugging prints each target that was found to be out-of-date, and\nwhether the build was successful or not.\n\n@item v (@i{verbose})\nA level above @samp{basic}; includes messages about which makefiles were\nparsed, prerequisites that did not need to be rebuilt, etc.  This option\nalso enables @samp{basic} messages.\n\n@item i (@i{implicit})\nPrints messages describing the implicit rule searches for each target.\nThis option also enables @samp{basic} messages.\n\n@item j (@i{jobs})\nPrints messages giving details on the invocation of specific subcommands.\n\n@item m (@i{makefile})\nBy default, the above messages are not enabled while trying to remake\nthe makefiles.  This option enables messages while rebuilding makefiles,\ntoo.  Note that the @samp{all} option does enable this option.  This\noption also enables @samp{basic} messages.\n@end table\n\n@item -e\n@cindex @code{-e}\n@itemx --environment-overrides\n@cindex @code{--environment-overrides}\nGive variables taken from the environment precedence\nover variables from makefiles.\n@xref{Environment, ,Variables from the Environment}.\n\n@item -f @var{file}\n@cindex @code{-f}\n@itemx --file=@var{file}\n@cindex @code{--file}\n@itemx --makefile=@var{file}\n@cindex @code{--makefile}\nRead the file named @var{file} as a makefile.\n@xref{Makefiles, ,Writing Makefiles}.\n\n@item -h\n@cindex @code{-h}\n@itemx --help\n@cindex @code{--help}\n@c Extra blank line here makes the table look better.\n\nRemind you of the options that @code{make} understands and then exit.\n\n@item -i\n@cindex @code{-i}\n@itemx --ignore-errors\n@cindex @code{--ignore-errors}\nIgnore all errors in commands executed to remake files.\n@xref{Errors, ,Errors in Commands}.\n\n@item -I @var{dir}\n@cindex @code{-I}\n@itemx --include-dir=@var{dir}\n@cindex @code{--include-dir}\nSpecifies a directory @var{dir} to search for included makefiles.\n@xref{Include, ,Including Other Makefiles}.  If several @samp{-I}\noptions are used to specify several directories, the directories are\nsearched in the order specified.\n\n@item -j [@var{jobs}]\n@cindex @code{-j}\n@itemx --jobs[=@var{jobs}]\n@cindex @code{--jobs}\nSpecifies the number of jobs (commands) to run simultaneously.  With no\nargument, @code{make} runs as many jobs simultaneously as possible.  If\nthere is more than one @samp{-j} option, the last one is effective.\n@xref{Parallel, ,Parallel Execution},\nfor more information on how commands are run.\nNote that this option is ignored on MS-DOS.\n\n@item -k\n@cindex @code{-k}\n@itemx --keep-going\n@cindex @code{--keep-going}\nContinue as much as possible after an error.  While the target that\nfailed, and those that depend on it, cannot be remade, the other\nprerequisites of these targets can be processed all the same.\n@xref{Testing, ,Testing the Compilation of a Program}.\n\n@item -l [@var{load}]\n@cindex @code{-l}\n@itemx --load-average[=@var{load}]\n@cindex @code{--load-average}\n@itemx --max-load[=@var{load}]\n@cindex @code{--max-load}\nSpecifies that no new jobs (commands) should be started if there are\nother jobs running and the load average is at least @var{load} (a\nfloating-point number).  With no argument, removes a previous load\nlimit.  @xref{Parallel, ,Parallel Execution}.\n\n@item -L\n@cindex @code{-L}\n@itemx --check-symlink-times\n@cindex @code{--check-symlink-times}\nOn systems that support symbolic links, this option causes @code{make}\nto consider the timestamps on any symbolic links in addition to the\ntimestamp on the file referenced by those links.  When this option is\nprovided, the most recent timestamp among the file and the symbolic\nlinks is taken as the modification time for this target file.\n\n@item -n\n@cindex @code{-n}\n@itemx --just-print\n@cindex @code{--just-print}\n@itemx --dry-run\n@cindex @code{--dry-run}\n@itemx --recon\n@cindex @code{--recon}\n@c Extra blank line here makes the table look better.\n\nPrint the commands that would be executed, but do not execute them.\n@xref{Instead of Execution, ,Instead of Executing the Commands}.\n\n@item -o @var{file}\n@cindex @code{-o}\n@itemx --old-file=@var{file}\n@cindex @code{--old-file}\n@itemx --assume-old=@var{file}\n@cindex @code{--assume-old}\nDo not remake the file @var{file} even if it is older than its\nprerequisites, and do not remake anything on account of changes in\n@var{file}.  Essentially the file is treated as very old and its rules\nare ignored.  @xref{Avoiding Compilation, ,Avoiding Recompilation of\nSome Files}.@refill\n\n@item -p\n@cindex @code{-p}\n@itemx --print-data-base\n@cindex @code{--print-data-base}\n@cindex data base of @code{make} rules\n@cindex predefined rules and variables, printing\nPrint the data base (rules and variable values) that results from\nreading the makefiles; then execute as usual or as otherwise specified.\nThis also prints the version information given by the @samp{-v} switch\n(see below).  To print the data base without trying to remake any files,\nuse @w{@samp{make -qp}}.  To print the data base of predefined rules and\nvariables, use @w{@samp{make -p -f /dev/null}}.  The data base output\ncontains filename and linenumber information for command and variable\ndefinitions, so it can be a useful debugging tool in complex environments.\n\n@item -q\n@cindex @code{-q}\n@itemx --question\n@cindex @code{--question}\n``Question mode''.  Do not run any commands, or print anything; just\nreturn an exit status that is zero if the specified targets are already\nup to date, one if any remaking is required, or two if an error is\nencountered.  @xref{Instead of Execution, ,Instead of Executing the\nCommands}.@refill\n\n@item -r\n@cindex @code{-r}\n@itemx --no-builtin-rules\n@cindex @code{--no-builtin-rules}\nEliminate use of the built-in implicit rules (@pxref{Implicit Rules,\n,Using Implicit Rules}).  You can still define your own by writing\npattern rules (@pxref{Pattern Rules, ,Defining and Redefining Pattern\nRules}).  The @samp{-r} option also clears out the default list of\nsuffixes for suffix rules (@pxref{Suffix Rules, ,Old-Fashioned Suffix\nRules}).  But you can still define your own suffixes with a rule for\n@code{.SUFFIXES}, and then define your own suffix rules.  Note that only\n@emph{rules} are affected by the @code{-r} option; default variables\nremain in effect (@pxref{Implicit Variables, ,Variables Used by Implicit\nRules}); see the @samp{-R} option below.\n\n@item -R\n@cindex @code{-R}\n@itemx --no-builtin-variables\n@cindex @code{--no-builtin-variables}\nEliminate use of the built-in rule-specific variables (@pxref{Implicit\nVariables, ,Variables Used by Implicit Rules}).  You can still define\nyour own, of course.  The @samp{-R} option also automatically enables\nthe @samp{-r} option (see above), since it doesn't make sense to have\nimplicit rules without any definitions for the variables that they use.\n\n@item -s\n@cindex @code{-s}\n@itemx --silent\n@cindex @code{--silent}\n@itemx --quiet\n@cindex @code{--quiet}\n@c Extra blank line here makes the table look better.\n\nSilent operation; do not print the commands as they are executed.\n@xref{Echoing, ,Command Echoing}.\n\n@item -S\n@cindex @code{-S}\n@itemx --no-keep-going\n@cindex @code{--no-keep-going}\n@itemx --stop\n@cindex @code{--stop}\n@c Extra blank line here makes the table look better.\n\nCancel the effect of the @samp{-k} option.  This is never necessary\nexcept in a recursive @code{make} where @samp{-k} might be inherited\nfrom the top-level @code{make} via @code{MAKEFLAGS}\n(@pxref{Recursion, ,Recursive Use of @code{make}})\nor if you set @samp{-k} in @code{MAKEFLAGS} in your environment.@refill\n\n@item -t\n@cindex @code{-t}\n@itemx --touch\n@cindex @code{--touch}\n@c Extra blank line here makes the table look better.\n\nTouch files (mark them up to date without really changing them)\ninstead of running their commands.  This is used to pretend that the\ncommands were done, in order to fool future invocations of\n@code{make}.  @xref{Instead of Execution, ,Instead of Executing the Commands}.\n\n@item -v\n@cindex @code{-v}\n@itemx --version\n@cindex @code{--version}\nPrint the version of the @code{make} program plus a copyright, a list\nof authors, and a notice that there is no warranty; then exit.\n\n@item -w\n@cindex @code{-w}\n@itemx --print-directory\n@cindex @code{--print-directory}\nPrint a message containing the working directory both before and after\nexecuting the makefile.  This may be useful for tracking down errors\nfrom complicated nests of recursive @code{make} commands.\n@xref{Recursion, ,Recursive Use of @code{make}}.  (In practice, you\nrarely need to specify this option since @samp{make} does it for you;\nsee @ref{-w Option, ,The @samp{--print-directory} Option}.)\n\n@item --no-print-directory\n@cindex @code{--no-print-directory}\nDisable printing of the working directory under @code{-w}.\nThis option is useful when @code{-w} is turned on automatically,\nbut you do not want to see the extra messages.\n@xref{-w Option, ,The @samp{--print-directory} Option}.\n\n@item -W @var{file}\n@cindex @code{-W}\n@itemx --what-if=@var{file}\n@cindex @code{--what-if}\n@itemx --new-file=@var{file}\n@cindex @code{--new-file}\n@itemx --assume-new=@var{file}\n@cindex @code{--assume-new}\nPretend that the target @var{file} has just been modified.  When used\nwith the @samp{-n} flag, this shows you what would happen if you were\nto modify that file.  Without @samp{-n}, it is almost the same as\nrunning a @code{touch} command on the given file before running\n@code{make}, except that the modification time is changed only in the\nimagination of @code{make}.\n@xref{Instead of Execution, ,Instead of Executing the Commands}.\n\n@item --warn-undefined-variables\n@cindex @code{--warn-undefined-variables}\n@cindex variables, warning for undefined\n@cindex undefined variables, warning message\nIssue a warning message whenever @code{make} sees a reference to an\nundefined variable.  This can be helpful when you are trying to debug\nmakefiles which use variables in complex ways.\n@end table\n\n@node Implicit Rules, Archives, Running, Top\n@chapter Using Implicit Rules\n@cindex implicit rule\n@cindex rule, implicit\n\nCertain standard ways of remaking target files are used very often.  For\nexample, one customary way to make an object file is from a C source file\nusing the C compiler, @code{cc}.\n\n@dfn{Implicit rules} tell @code{make} how to use customary techniques so\nthat you do not have to specify them in detail when you want to use\nthem.  For example, there is an implicit rule for C compilation.  File\nnames determine which implicit rules are run.  For example, C\ncompilation typically takes a @file{.c} file and makes a @file{.o} file.\nSo @code{make} applies the implicit rule for C compilation when it sees\nthis combination of file name endings.@refill\n\nA chain of implicit rules can apply in sequence; for example, @code{make}\nwill remake a @file{.o} file from a @file{.y} file by way of a @file{.c} file.\n@iftex\n@xref{Chained Rules, ,Chains of Implicit Rules}.\n@end iftex\n\nThe built-in implicit rules use several variables in their commands so\nthat, by changing the values of the variables, you can change the way the\nimplicit rule works.  For example, the variable @code{CFLAGS} controls the\nflags given to the C compiler by the implicit rule for C compilation.\n@iftex\n@xref{Implicit Variables, ,Variables Used by Implicit Rules}.\n@end iftex\n\nYou can define your own implicit rules by writing @dfn{pattern rules}.\n@iftex\n@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.\n@end iftex\n\n@dfn{Suffix rules} are a more limited way to define implicit rules.\nPattern rules are more general and clearer, but suffix rules are\nretained for compatibility.\n@iftex\n@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}.\n@end iftex\n\n@menu\n* Using Implicit::              How to use an existing implicit rule\n                                  to get the commands for updating a file.\n* Catalogue of Rules::          A list of built-in implicit rules.\n* Implicit Variables::          How to change what predefined rules do.\n* Chained Rules::               How to use a chain of implicit rules.\n* Pattern Rules::               How to define new implicit rules.\n* Last Resort::                 How to define commands for rules which\n                                  cannot find any.\n* Suffix Rules::                The old-fashioned style of implicit rule.\n* Implicit Rule Search::        The precise algorithm for applying\n                                  implicit rules.\n@end menu\n\n@node Using Implicit, Catalogue of Rules, Implicit Rules, Implicit Rules\n@section Using Implicit Rules\n@cindex implicit rule, how to use\n@cindex rule, implicit, how to use\n\nTo allow @code{make} to find a customary method for updating a target file,\nall you have to do is refrain from specifying commands yourself.  Either\nwrite a rule with no command lines, or don't write a rule at all.  Then\n@code{make} will figure out which implicit rule to use based on which\nkind of source file exists or can be made.\n\nFor example, suppose the makefile looks like this:\n\n@example\nfoo : foo.o bar.o\n        cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)\n@end example\n\n@noindent\nBecause you mention @file{foo.o} but do not give a rule for it, @code{make}\nwill automatically look for an implicit rule that tells how to update it.\nThis happens whether or not the file @file{foo.o} currently exists.\n\nIf an implicit rule is found, it can supply both commands and one or\nmore prerequisites (the source files).  You would want to write a rule\nfor @file{foo.o} with no command lines if you need to specify additional\nprerequisites, such as header files, that the implicit rule cannot\nsupply.\n\nEach implicit rule has a target pattern and prerequisite patterns.  There may\nbe many implicit rules with the same target pattern.  For example, numerous\nrules make @samp{.o} files: one, from a @samp{.c} file with the C compiler;\nanother, from a @samp{.p} file with the Pascal compiler; and so on.  The rule\nthat actually applies is the one whose prerequisites exist or can be made.\nSo, if you have a file @file{foo.c}, @code{make} will run the C compiler;\notherwise, if you have a file @file{foo.p}, @code{make} will run the Pascal\ncompiler; and so on.\n\nOf course, when you write the makefile, you know which implicit rule you\nwant @code{make} to use, and you know it will choose that one because you\nknow which possible prerequisite files are supposed to exist.\n@xref{Catalogue of Rules, ,Catalogue of Implicit Rules},\nfor a catalogue of all the predefined implicit rules.\n\nAbove, we said an implicit rule applies if the required prerequisites ``exist\nor can be made''.  A file ``can be made'' if it is mentioned explicitly in\nthe makefile as a target or a prerequisite, or if an implicit rule can be\nrecursively found for how to make it.  When an implicit prerequisite is the\nresult of another implicit rule, we say that @dfn{chaining} is occurring.\n@xref{Chained Rules, ,Chains of Implicit Rules}.\n\nIn general, @code{make} searches for an implicit rule for each target, and\nfor each double-colon rule, that has no commands.  A file that is mentioned\nonly as a prerequisite is considered a target whose rule specifies nothing,\nso implicit rule search happens for it.  @xref{Implicit Rule Search, ,Implicit Rule Search Algorithm}, for the\ndetails of how the search is done.\n\nNote that explicit prerequisites do not influence implicit rule search.\nFor example, consider this explicit rule:\n\n@example\nfoo.o: foo.p\n@end example\n\n@noindent\nThe prerequisite on @file{foo.p} does not necessarily mean that\n@code{make} will remake @file{foo.o} according to the implicit rule to\nmake an object file, a @file{.o} file, from a Pascal source file, a\n@file{.p} file.  For example, if @file{foo.c} also exists, the implicit\nrule to make an object file from a C source file is used instead,\nbecause it appears before the Pascal rule in the list of predefined\nimplicit rules (@pxref{Catalogue of Rules, , Catalogue of Implicit\nRules}).\n\nIf you do not want an implicit rule to be used for a target that has no\ncommands, you can give that target empty commands by writing a semicolon\n(@pxref{Empty Commands, ,Defining Empty Commands}).\n\n@node Catalogue of Rules, Implicit Variables, Using Implicit, Implicit Rules\n@section Catalogue of Implicit Rules\n@cindex implicit rule, predefined\n@cindex rule, implicit, predefined\n\nHere is a catalogue of predefined implicit rules which are always\navailable unless the makefile explicitly overrides or cancels them.\n@xref{Canceling Rules, ,Canceling Implicit Rules}, for information on\ncanceling or overriding an implicit rule.  The @samp{-r} or\n@samp{--no-builtin-rules} option cancels all predefined rules.\n\nThis manual only documents the default rules available on POSIX-based\noperating systems.  Other operating systems, such as VMS, Windows,\nOS/2, etc. may have different sets of default rules.  To see the full\nlist of default rules and variables available in your version of GNU\n@code{make}, run @samp{make -p} in a directory with no makefile.\n\nNot all of these rules will always be defined, even when the @samp{-r}\noption is not given.  Many of the predefined implicit rules are\nimplemented in @code{make} as suffix rules, so which ones will be\ndefined depends on the @dfn{suffix list} (the list of prerequisites of\nthe special target @code{.SUFFIXES}).  The default suffix list is:\n@code{.out}, @code{.a}, @code{.ln}, @code{.o}, @code{.c}, @code{.cc},\n@code{.C}, @code{.cpp}, @code{.p}, @code{.f}, @code{.F}, @code{.r}, @code{.y},\n@code{.l}, @code{.s}, @code{.S}, @code{.mod}, @code{.sym}, @code{.def},\n@code{.h}, @code{.info}, @code{.dvi}, @code{.tex}, @code{.texinfo},\n@code{.texi}, @code{.txinfo}, @code{.w}, @code{.ch} @code{.web},\n@code{.sh}, @code{.elc}, @code{.el}.  All of the implicit rules\ndescribed below whose prerequisites have one of these suffixes are\nactually suffix rules.  If you modify the suffix list, the only\npredefined suffix rules in effect will be those named by one or two of\nthe suffixes that are on the list you specify; rules whose suffixes fail\nto be on the list are disabled.  @xref{Suffix Rules, ,Old-Fashioned\nSuffix Rules}, for full details on suffix rules.\n\n@table @asis\n@item Compiling C programs\n@cindex C, rule to compile\n@pindex cc\n@pindex gcc\n@pindex .o\n@pindex .c\n@file{@var{n}.o} is made automatically from @file{@var{n}.c} with\na command of the form @samp{$(CC) -c $(CPPFLAGS) $(CFLAGS)}.@refill\n\n@item Compiling C++ programs\n@cindex C++, rule to compile\n@pindex g++\n@pindex .cc\n@pindex .cpp\n@pindex .C\n@file{@var{n}.o} is made automatically from @file{@var{n}.cc},\n@file{@var{n}.cpp}, or @file{@var{n}.C} with a command of the form\n@samp{$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)}.  We encourage you to use the\nsuffix @samp{.cc} for C++ source files instead of @samp{.C}.@refill\n\n@item Compiling Pascal programs\n@cindex Pascal, rule to compile\n@pindex pc\n@pindex .p\n@file{@var{n}.o} is made automatically from @file{@var{n}.p}\nwith the command @samp{$(PC) -c $(PFLAGS)}.@refill\n\n@item Compiling Fortran and Ratfor programs\n@cindex Fortran, rule to compile\n@cindex Ratfor, rule to compile\n@pindex f77\n@pindex .f\n@pindex .r\n@pindex .F\n@file{@var{n}.o} is made automatically from @file{@var{n}.r},\n@file{@var{n}.F} or @file{@var{n}.f} by running the\nFortran compiler.  The precise command used is as follows:@refill\n\n@table @samp\n@item .f\n@samp{$(FC) -c $(FFLAGS)}.\n@item .F\n@samp{$(FC) -c $(FFLAGS) $(CPPFLAGS)}.\n@item .r\n@samp{$(FC) -c $(FFLAGS) $(RFLAGS)}.\n@end table\n\n@item Preprocessing Fortran and Ratfor programs\n@file{@var{n}.f} is made automatically from @file{@var{n}.r} or\n@file{@var{n}.F}.  This rule runs just the preprocessor to convert a\nRatfor or preprocessable Fortran program into a strict Fortran\nprogram.  The precise command used is as follows:@refill\n\n@table @samp\n@item .F\n@samp{$(FC) -F $(CPPFLAGS) $(FFLAGS)}.\n@item .r\n@samp{$(FC) -F $(FFLAGS) $(RFLAGS)}.\n@end table\n\n@item Compiling Modula-2 programs\n@cindex Modula-2, rule to compile\n@pindex m2c\n@pindex .sym\n@pindex .def\n@pindex .mod\n@file{@var{n}.sym} is made from @file{@var{n}.def} with a command\nof the form @samp{$(M2C) $(M2FLAGS) $(DEFFLAGS)}.  @file{@var{n}.o}\nis made from @file{@var{n}.mod}; the form is:\n@w{@samp{$(M2C) $(M2FLAGS) $(MODFLAGS)}}.@refill\n\n@need 1200\n@item Assembling and preprocessing assembler programs\n@cindex assembly, rule to compile\n@pindex as\n@pindex .s\n@file{@var{n}.o} is made automatically from @file{@var{n}.s} by\nrunning the assembler, @code{as}.  The precise command is\n@samp{$(AS) $(ASFLAGS)}.@refill\n\n@pindex .S\n@file{@var{n}.s} is made automatically from @file{@var{n}.S} by\nrunning the C preprocessor, @code{cpp}.  The precise command is\n@w{@samp{$(CPP) $(CPPFLAGS)}}.\n\n@item Linking a single object file\n@cindex linking, predefined rule for\n@pindex ld\n@pindex .o\n@file{@var{n}} is made automatically from @file{@var{n}.o} by running\nthe linker (usually called @code{ld}) via the C compiler.  The precise\ncommand used is @w{@samp{$(CC) $(LDFLAGS) @var{n}.o $(LOADLIBES) $(LDLIBS)}}.\n\nThis rule does the right thing for a simple program with only one\nsource file.  It will also do the right thing if there are multiple\nobject files (presumably coming from various other source files), one\nof which has a name matching that of the executable file.  Thus,\n\n@example\nx: y.o z.o\n@end example\n\n@noindent\nwhen @file{x.c}, @file{y.c} and @file{z.c} all exist will execute:\n\n@example\n@group\ncc -c x.c -o x.o\ncc -c y.c -o y.o\ncc -c z.c -o z.o\ncc x.o y.o z.o -o x\nrm -f x.o\nrm -f y.o\nrm -f z.o\n@end group\n@end example\n\n@noindent\nIn more complicated cases, such as when there is no object file whose\nname derives from the executable file name, you must write an explicit\ncommand for linking.\n\nEach kind of file automatically made into @samp{.o} object files will\nbe automatically linked by using the compiler (@samp{$(CC)},\n@samp{$(FC)} or @samp{$(PC)}; the C compiler @samp{$(CC)} is used to\nassemble @samp{.s} files) without the @samp{-c} option.  This could be\ndone by using the @samp{.o} object files as intermediates, but it is\nfaster to do the compiling and linking in one step, so that's how it's\ndone.@refill\n\n@item Yacc for C programs\n@pindex yacc\n@cindex Yacc, rule to run\n@pindex .y\n@file{@var{n}.c} is made automatically from @file{@var{n}.y} by\nrunning Yacc with the command @samp{$(YACC) $(YFLAGS)}.\n\n@item Lex for C programs\n@pindex lex\n@cindex Lex, rule to run\n@pindex .l\n@file{@var{n}.c} is made automatically from @file{@var{n}.l} by\nrunning Lex.  The actual command is @samp{$(LEX) $(LFLAGS)}.\n\n@item Lex for Ratfor programs\n@file{@var{n}.r} is made automatically from @file{@var{n}.l} by\nrunning Lex.  The actual command is @samp{$(LEX) $(LFLAGS)}.\n\nThe convention of using the same suffix @samp{.l} for all Lex files\nregardless of whether they produce C code or Ratfor code makes it\nimpossible for @code{make} to determine automatically which of the two\nlanguages you are using in any particular case.  If @code{make} is\ncalled upon to remake an object file from a @samp{.l} file, it must\nguess which compiler to use.  It will guess the C compiler, because\nthat is more common.  If you are using Ratfor, make sure @code{make}\nknows this by mentioning @file{@var{n}.r} in the makefile.  Or, if you\nare using Ratfor exclusively, with no C files, remove @samp{.c} from\nthe list of implicit rule suffixes with:@refill\n\n@example\n@group\n.SUFFIXES:\n.SUFFIXES: .o .r .f .l @dots{}\n@end group\n@end example\n\n@item Making Lint Libraries from C, Yacc, or Lex programs\n@pindex lint\n@cindex @code{lint}, rule to run\n@pindex .ln\n@file{@var{n}.ln} is made from @file{@var{n}.c} by running @code{lint}.\nThe precise command is @w{@samp{$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i}}.\nThe same command is used on the C code produced from\n@file{@var{n}.y} or @file{@var{n}.l}.@refill\n\n@item @TeX{} and Web\n@cindex @TeX{}, rule to run\n@cindex Web, rule to run\n@pindex tex\n@pindex cweave\n@pindex weave\n@pindex tangle\n@pindex ctangle\n@pindex .dvi\n@pindex .tex\n@pindex .web\n@pindex .w\n@pindex .ch\n@file{@var{n}.dvi} is made from @file{@var{n}.tex} with the command\n@samp{$(TEX)}.  @file{@var{n}.tex} is made from @file{@var{n}.web} with\n@samp{$(WEAVE)}, or from @file{@var{n}.w} (and from @file{@var{n}.ch} if\nit exists or can be made) with @samp{$(CWEAVE)}.  @file{@var{n}.p} is\nmade from @file{@var{n}.web} with @samp{$(TANGLE)} and @file{@var{n}.c}\nis made from @file{@var{n}.w} (and from @file{@var{n}.ch} if it exists\nor can be made) with @samp{$(CTANGLE)}.@refill\n\n@item Texinfo and Info\n@cindex Texinfo, rule to format\n@cindex Info, rule to format\n@pindex texi2dvi\n@pindex makeinfo\n@pindex .texinfo\n@pindex .info\n@pindex .texi\n@pindex .txinfo\n@file{@var{n}.dvi} is made from @file{@var{n}.texinfo},\n@file{@var{n}.texi}, or @file{@var{n}.txinfo}, with the command\n@w{@samp{$(TEXI2DVI) $(TEXI2DVI_FLAGS)}}.  @file{@var{n}.info} is made from\n@file{@var{n}.texinfo}, @file{@var{n}.texi}, or @file{@var{n}.txinfo}, with\nthe command @w{@samp{$(MAKEINFO) $(MAKEINFO_FLAGS)}}.\n\n@item RCS\n@cindex RCS, rule to extract from\n@pindex co\n@pindex ,v @r{(RCS file extension)}\nAny file @file{@var{n}} is extracted if necessary from an RCS file\nnamed either @file{@var{n},v} or @file{RCS/@var{n},v}.  The precise\ncommand used is @w{@samp{$(CO) $(COFLAGS)}}.  @file{@var{n}} will not be\nextracted from RCS if it already exists, even if the RCS file is\nnewer.  The rules for RCS are terminal\n(@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}),\nso RCS files cannot be generated from another source; they must\nactually exist.@refill\n\n@item SCCS\n@cindex SCCS, rule to extract from\n@pindex get\n@pindex s. @r{(SCCS file prefix)}\nAny file @file{@var{n}} is extracted if necessary from an SCCS file\nnamed either @file{s.@var{n}} or @file{SCCS/s.@var{n}}.  The precise\ncommand used is @w{@samp{$(GET) $(GFLAGS)}}.  The rules for SCCS are\nterminal (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}),\nso SCCS files cannot be generated from another source; they must\nactually exist.@refill\n\n@pindex .sh\nFor the benefit of SCCS, a file @file{@var{n}} is copied from\n@file{@var{n}.sh} and made executable (by everyone).  This is for\nshell scripts that are checked into SCCS.  Since RCS preserves the\nexecution permission of a file, you do not need to use this feature\nwith RCS.@refill\n\nWe recommend that you avoid using of SCCS.  RCS is widely held to be\nsuperior, and is also free.  By choosing free software in place of\ncomparable (or inferior) proprietary software, you support the free\nsoftware movement.\n@end table\n\nUsually, you want to change only the variables listed in the table\nabove, which are documented in the following section.\n\nHowever, the commands in built-in implicit rules actually use\nvariables such as @code{COMPILE.c}, @code{LINK.p}, and\n@code{PREPROCESS.S}, whose values contain the commands listed above.\n\n@code{make} follows the convention that the rule to compile a\n@file{.@var{x}} source file uses the variable @code{COMPILE.@var{x}}.\nSimilarly, the rule to produce an executable from a @file{.@var{x}}\nfile uses @code{LINK.@var{x}}; and the rule to preprocess a\n@file{.@var{x}} file uses @code{PREPROCESS.@var{x}}.\n\n@vindex OUTPUT_OPTION\nEvery rule that produces an object file uses the variable\n@code{OUTPUT_OPTION}.  @code{make} defines this variable either to\ncontain @samp{-o $@@}, or to be empty, depending on a compile-time\noption.  You need the @samp{-o} option to ensure that the output goes\ninto the right file when the source file is in a different directory,\nas when using @code{VPATH} (@pxref{Directory Search}).  However,\ncompilers on some systems do not accept a @samp{-o} switch for object\nfiles.  If you use such a system, and use @code{VPATH}, some\ncompilations will put their output in the wrong place.\nA possible workaround for this problem is to give @code{OUTPUT_OPTION}\nthe value @w{@samp{; mv $*.o $@@}}.\n\n@node Implicit Variables, Chained Rules, Catalogue of Rules, Implicit Rules\n@section Variables Used by Implicit Rules\n@cindex flags for compilers\n\nThe commands in built-in implicit rules make liberal use of certain\npredefined variables.  You can alter the values of these variables in\nthe makefile, with arguments to @code{make}, or in the environment to\nalter how the implicit rules work without redefining the rules\nthemselves.  You can cancel all variables used by implicit rules with\nthe @samp{-R} or @samp{--no-builtin-variables} option.\n\nFor example, the command used to compile a C source file actually says\n@samp{$(CC) -c $(CFLAGS) $(CPPFLAGS)}.  The default values of the variables\nused are @samp{cc} and nothing, resulting in the command @samp{cc -c}.  By\nredefining @samp{CC} to @samp{ncc}, you could cause @samp{ncc} to be\nused for all C compilations performed by the implicit rule.  By redefining\n@samp{CFLAGS} to be @samp{-g}, you could pass the @samp{-g} option to\neach compilation.  @emph{All} implicit rules that do C compilation use\n@samp{$(CC)} to get the program name for the compiler and @emph{all}\ninclude @samp{$(CFLAGS)} among the arguments given to the compiler.@refill\n\nThe variables used in implicit rules fall into two classes: those that are\nnames of programs (like @code{CC}) and those that contain arguments for the\nprograms (like @code{CFLAGS}).  (The ``name of a program'' may also contain\nsome command arguments, but it must start with an actual executable program\nname.)  If a variable value contains more than one argument, separate them\nwith spaces.\n\nThe following tables describe of some of the more commonly-used predefined\nvariables.  This list is not exhaustive, and the default values shown here may\nnot be what are selected by @code{make} for your environment.  To see the\ncomplete list of predefined variables for your instance of GNU @code{make} you\ncan run @samp{make -p} in a directory with no makefiles.\n\nHere is a table of some of the more common variables used as names of\nprograms in built-in rules:\nmakefiles.\n\n@table @code\n@item AR\n@vindex AR\nArchive-maintaining program; default @samp{ar}.\n@pindex ar\n\n@item AS\n@vindex AS\nProgram for compiling assembly files; default @samp{as}.\n@pindex as\n\n@item CC\n@vindex CC\nProgram for compiling C programs; default @samp{cc}.\n@pindex cc\n\n@item CO\n@vindex CO\nProgram for checking out files from RCS; default @samp{co}.\n@pindex cc\n\n@item CXX\n@vindex CXX\nProgram for compiling C++ programs; default @samp{g++}.\n@pindex g++\n\n@item CO\n@vindex CO\nProgram for extracting a file from RCS; default @samp{co}.\n@pindex co\n\n@item CPP\n@vindex CPP\nProgram for running the C preprocessor, with results to standard output;\ndefault @samp{$(CC) -E}.\n\n@item FC\n@vindex FC\nProgram for compiling or preprocessing Fortran and Ratfor programs;\ndefault @samp{f77}.\n@pindex f77\n\n@item GET\n@vindex GET\nProgram for extracting a file from SCCS; default @samp{get}.\n@pindex get\n\n@item LEX\n@vindex LEX\nProgram to use to turn Lex grammars into source code; default @samp{lex}.\n@pindex lex\n\n@item YACC\n@vindex YACC\nProgram to use to turn Yacc grammars into source code; default @samp{yacc}.\n@pindex yacc\n\n@item LINT\n@vindex LINT\nProgram to use to run lint on source code; default @samp{lint}.\n@pindex lint\n\n@item M2C\n@vindex M2C\nProgram to use to compile Modula-2 source code; default @samp{m2c}.\n@pindex m2c\n\n@item PC\n@vindex PC\nProgram for compiling Pascal programs; default @samp{pc}.\n@pindex pc\n\n@item MAKEINFO\n@vindex MAKEINFO\nProgram to convert a Texinfo source file into an Info file; default\n@samp{makeinfo}.\n@pindex makeinfo\n\n@item TEX\n@vindex TEX\nProgram to make @TeX{} @sc{dvi} files from @TeX{} source;\ndefault @samp{tex}.\n@pindex tex\n\n@item TEXI2DVI\n@vindex TEXI2DVI\nProgram to make @TeX{} @sc{dvi} files from Texinfo source;\ndefault @samp{texi2dvi}.\n@pindex texi2dvi\n\n@item WEAVE\n@vindex WEAVE\nProgram to translate Web into @TeX{}; default @samp{weave}.\n@pindex weave\n\n@item CWEAVE\n@vindex CWEAVE\nProgram to translate C Web into @TeX{}; default @samp{cweave}.\n@pindex cweave\n\n@item TANGLE\n@vindex TANGLE\nProgram to translate Web into Pascal; default @samp{tangle}.\n@pindex tangle\n\n@item CTANGLE\n@vindex CTANGLE\nProgram to translate C Web into C; default @samp{ctangle}.\n@pindex ctangle\n\n@item RM\n@vindex RM\nCommand to remove a file; default @samp{rm -f}.\n@pindex rm\n@end table\n\nHere is a table of variables whose values are additional arguments for the\nprograms above.  The default values for all of these is the empty\nstring, unless otherwise noted.\n\n@table @code\n@item ARFLAGS\n@vindex ARFLAGS\nFlags to give the archive-maintaining program; default @samp{rv}.\n\n@item ASFLAGS\n@vindex ASFLAGS\nExtra flags to give to the assembler (when explicitly\ninvoked on a @samp{.s} or @samp{.S} file).\n\n@item CFLAGS\n@vindex CFLAGS\nExtra flags to give to the C compiler.\n\n@item CXXFLAGS\n@vindex CXXFLAGS\nExtra flags to give to the C++ compiler.\n\n@item COFLAGS\n@vindex COFLAGS\nExtra flags to give to the RCS @code{co} program.\n\n@item CPPFLAGS\n@vindex CPPFLAGS\nExtra flags to give to the C preprocessor and programs\nthat use it (the C and Fortran compilers).\n\n@item FFLAGS\n@vindex FFLAGS\nExtra flags to give to the Fortran compiler.\n\n@item GFLAGS\n@vindex GFLAGS\nExtra flags to give to the SCCS @code{get} program.\n\n@item LDFLAGS\n@vindex LDFLAGS\nExtra flags to give to compilers when they are supposed to invoke the linker,\n@samp{ld}.\n\n@item LFLAGS\n@vindex LFLAGS\nExtra flags to give to Lex.\n\n@item YFLAGS\n@vindex YFLAGS\nExtra flags to give to Yacc.\n\n@item PFLAGS\n@vindex PFLAGS\nExtra flags to give to the Pascal compiler.\n\n@item RFLAGS\n@vindex RFLAGS\nExtra flags to give to the Fortran compiler for Ratfor programs.\n\n@item LINTFLAGS\n@vindex LINTFLAGS\nExtra flags to give to lint.\n@end table\n\n@node Chained Rules, Pattern Rules, Implicit Variables, Implicit Rules\n@section Chains of Implicit Rules\n\n@cindex chains of rules\n@cindex rule, implicit, chains of\nSometimes a file can be made by a sequence of implicit rules.  For example,\na file @file{@var{n}.o} could be made from @file{@var{n}.y} by running\nfirst Yacc and then @code{cc}.  Such a sequence is called a @dfn{chain}.\n\nIf the file @file{@var{n}.c} exists, or is mentioned in the makefile, no\nspecial searching is required: @code{make} finds that the object file can\nbe made by C compilation from @file{@var{n}.c}; later on, when considering\nhow to make @file{@var{n}.c}, the rule for running Yacc is\nused.  Ultimately both @file{@var{n}.c} and @file{@var{n}.o} are\nupdated.@refill\n\n@cindex intermediate files\n@cindex files, intermediate\nHowever, even if @file{@var{n}.c} does not exist and is not mentioned,\n@code{make} knows how to envision it as the missing link between\n@file{@var{n}.o} and @file{@var{n}.y}!  In this case, @file{@var{n}.c} is\ncalled an @dfn{intermediate file}.  Once @code{make} has decided to use the\nintermediate file, it is entered in the data base as if it had been\nmentioned in the makefile, along with the implicit rule that says how to\ncreate it.@refill\n\nIntermediate files are remade using their rules just like all other\nfiles.  But intermediate files are treated differently in two ways.\n\nThe first difference is what happens if the intermediate file does not\nexist.  If an ordinary file @var{b} does not exist, and @code{make}\nconsiders a target that depends on @var{b}, it invariably creates\n@var{b} and then updates the target from @var{b}.  But if @var{b} is an\nintermediate file, then @code{make} can leave well enough alone.  It\nwon't bother updating @var{b}, or the ultimate target, unless some\nprerequisite of @var{b} is newer than that target or there is some other\nreason to update that target.\n\nThe second difference is that if @code{make} @emph{does} create @var{b}\nin order to update something else, it deletes @var{b} later on after it\nis no longer needed.  Therefore, an intermediate file which did not\nexist before @code{make} also does not exist after @code{make}.\n@code{make} reports the deletion to you by printing a @samp{rm -f}\ncommand showing which file it is deleting.\n\nOrdinarily, a file cannot be intermediate if it is mentioned in the\nmakefile as a target or prerequisite.  However, you can explicitly mark a\nfile as intermediate by listing it as a prerequisite of the special target\n@code{.INTERMEDIATE}.  This takes effect even if the file is mentioned\nexplicitly in some other way.\n\n@cindex intermediate files, preserving\n@cindex preserving intermediate files\n@cindex secondary files\nYou can prevent automatic deletion of an intermediate file by marking it\nas a @dfn{secondary} file.  To do this, list it as a prerequisite of the\nspecial target @code{.SECONDARY}.  When a file is secondary, @code{make}\nwill not create the file merely because it does not already exist, but\n@code{make} does not automatically delete the file.  Marking a file as\nsecondary also marks it as intermediate.\n\nYou can list the target pattern of an implicit rule (such as @samp{%.o})\nas a prerequisite of the special target @code{.PRECIOUS} to preserve\nintermediate files made by implicit rules whose target patterns match\nthat file's name; see @ref{Interrupts}.@refill\n@cindex preserving with @code{.PRECIOUS}\n@cindex @code{.PRECIOUS} intermediate files\n\nA chain can involve more than two implicit rules.  For example, it is\npossible to make a file @file{foo} from @file{RCS/foo.y,v} by running RCS,\nYacc and @code{cc}.  Then both @file{foo.y} and @file{foo.c} are\nintermediate files that are deleted at the end.@refill\n\nNo single implicit rule can appear more than once in a chain.  This means\nthat @code{make} will not even consider such a ridiculous thing as making\n@file{foo} from @file{foo.o.o} by running the linker twice.  This\nconstraint has the added benefit of preventing any infinite loop in the\nsearch for an implicit rule chain.\n\nThere are some special implicit rules to optimize certain cases that would\notherwise be handled by rule chains.  For example, making @file{foo} from\n@file{foo.c} could be handled by compiling and linking with separate\nchained rules, using @file{foo.o} as an intermediate file.  But what\nactually happens is that a special rule for this case does the compilation\nand linking with a single @code{cc} command.  The optimized rule is used in\npreference to the step-by-step chain because it comes earlier in the\nordering of rules.\n\n@node Pattern Rules, Last Resort, Chained Rules, Implicit Rules\n@section Defining and Redefining Pattern Rules\n\nYou define an implicit rule by writing a @dfn{pattern rule}.  A pattern\nrule looks like an ordinary rule, except that its target contains the\ncharacter @samp{%} (exactly one of them).  The target is considered a\npattern for matching file names; the @samp{%} can match any nonempty\nsubstring, while other characters match only themselves.  The prerequisites\nlikewise use @samp{%} to show how their names relate to the target name.\n\nThus, a pattern rule @samp{%.o : %.c} says how to make any file\n@file{@var{stem}.o} from another file @file{@var{stem}.c}.@refill\n\nNote that expansion using @samp{%} in pattern rules occurs\n@strong{after} any variable or function expansions, which take place\nwhen the makefile is read.  @xref{Using Variables, , How to Use\nVariables}, and @ref{Functions, ,Functions for Transforming Text}.\n\n@menu\n* Pattern Intro::               An introduction to pattern rules.\n* Pattern Examples::            Examples of pattern rules.\n* Automatic Variables::         How to use automatic variables in the\n                                  commands of implicit rules.\n* Pattern Match::               How patterns match.\n* Match-Anything Rules::        Precautions you should take prior to\n                                  defining rules that can match any\n                                  target file whatever.\n* Canceling Rules::             How to override or cancel built-in rules.\n@end menu\n\n@node Pattern Intro, Pattern Examples, Pattern Rules, Pattern Rules\n@subsection Introduction to Pattern Rules\n@cindex pattern rule\n@cindex rule, pattern\n\nA pattern rule contains the character @samp{%} (exactly one of them)\nin the target; otherwise, it looks exactly like an ordinary rule.  The\ntarget is a pattern for matching file names; the @samp{%} matches any\nnonempty substring, while other characters match only themselves.\n@cindex target pattern, implicit\n@cindex @code{%}, in pattern rules\n\nFor example, @samp{%.c} as a pattern matches any file name that ends in\n@samp{.c}.  @samp{s.%.c} as a pattern matches any file name that starts\nwith @samp{s.}, ends in @samp{.c} and is at least five characters long.\n(There must be at least one character to match the @samp{%}.)  The substring\nthat the @samp{%} matches is called the @dfn{stem}.@refill\n\n@samp{%} in a prerequisite of a pattern rule stands for the same stem\nthat was matched by the @samp{%} in the target.  In order for the\npattern rule to apply, its target pattern must match the file name\nunder consideration and all of its prerequisites (after pattern\nsubstitution) must name files that exist or can be made.  These files\nbecome prerequisites of the target.\n@cindex prerequisite pattern, implicit\n\nThus, a rule of the form\n\n@example\n%.o : %.c ; @var{command}@dots{}\n@end example\n\n@noindent\nspecifies how to make a file @file{@var{n}.o}, with another file\n@file{@var{n}.c} as its prerequisite, provided that @file{@var{n}.c}\nexists or can be made.\n\nThere may also be prerequisites that do not use @samp{%}; such a prerequisite\nattaches to every file made by this pattern rule.  These unvarying\nprerequisites are useful occasionally.\n\nA pattern rule need not have any prerequisites that contain @samp{%}, or\nin fact any prerequisites at all.  Such a rule is effectively a general\nwildcard.  It provides a way to make any file that matches the target\npattern.  @xref{Last Resort}.\n\n@c !!! The end of of this paragraph should be rewritten.  --bob\nPattern rules may have more than one target.  Unlike normal rules, this\ndoes not act as many different rules with the same prerequisites and\ncommands.  If a pattern rule has multiple targets, @code{make} knows that\nthe rule's commands are responsible for making all of the targets.  The\ncommands are executed only once to make all the targets.  When searching\nfor a pattern rule to match a target, the target patterns of a rule other\nthan the one that matches the target in need of a rule are incidental:\n@code{make} worries only about giving commands and prerequisites to the file\npresently in question.  However, when this file's commands are run, the\nother targets are marked as having been updated themselves.\n@cindex multiple targets, in pattern rule\n@cindex target, multiple in pattern rule\n\nThe order in which pattern rules appear in the makefile is important\nsince this is the order in which they are considered.\nOf equally applicable\nrules, only the first one found is used.  The rules you write take precedence\nover those that are built in.  Note however, that a rule whose\nprerequisites actually exist or are mentioned always takes priority over a\nrule with prerequisites that must be made by chaining other implicit rules.\n@cindex pattern rules, order of\n@cindex order of pattern rules\n\n@node Pattern Examples, Automatic Variables, Pattern Intro, Pattern Rules\n@subsection Pattern Rule Examples\n\nHere are some examples of pattern rules actually predefined in\n@code{make}.  First, the rule that compiles @samp{.c} files into @samp{.o}\nfiles:@refill\n\n@example\n%.o : %.c\n        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@@\n@end example\n\n@noindent\ndefines a rule that can make any file @file{@var{x}.o} from\n@file{@var{x}.c}.  The command uses the automatic variables @samp{$@@} and\n@samp{$<} to substitute the names of the target file and the source file\nin each case where the rule applies (@pxref{Automatic Variables}).@refill\n\nHere is a second built-in rule:\n\n@example\n% :: RCS/%,v\n        $(CO) $(COFLAGS) $<\n@end example\n\n@noindent\ndefines a rule that can make any file @file{@var{x}} whatsoever from a\ncorresponding file @file{@var{x},v} in the subdirectory @file{RCS}.  Since\nthe target is @samp{%}, this rule will apply to any file whatever, provided\nthe appropriate prerequisite file exists.  The double colon makes the rule\n@dfn{terminal}, which means that its prerequisite may not be an intermediate\nfile (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}).@refill\n\n@need 500\nThis pattern rule has two targets:\n\n@example\n@group\n%.tab.c %.tab.h: %.y\n        bison -d $<\n@end group\n@end example\n\n@noindent\n@c The following paragraph is rewritten to avoid overfull hboxes\nThis tells @code{make} that the command @samp{bison -d @var{x}.y} will\nmake both @file{@var{x}.tab.c} and @file{@var{x}.tab.h}.  If the file\n@file{foo} depends on the files @file{parse.tab.o} and @file{scan.o}\nand the file @file{scan.o} depends on the file @file{parse.tab.h},\nwhen @file{parse.y} is changed, the command @samp{bison -d parse.y}\nwill be executed only once, and the prerequisites of both\n@file{parse.tab.o} and @file{scan.o} will be satisfied.  (Presumably\nthe file @file{parse.tab.o} will be recompiled from @file{parse.tab.c}\nand the file @file{scan.o} from @file{scan.c}, while @file{foo} is\nlinked from @file{parse.tab.o}, @file{scan.o}, and its other\nprerequisites, and it will execute happily ever after.)@refill\n\n@node Automatic Variables, Pattern Match, Pattern Examples, Pattern Rules\n@subsection Automatic Variables\n@cindex automatic variables\n@cindex variables, automatic\n@cindex variables, and implicit rule\n\nSuppose you are writing a pattern rule to compile a @samp{.c} file into a\n@samp{.o} file: how do you write the @samp{cc} command so that it operates\non the right source file name?  You cannot write the name in the command,\nbecause the name is different each time the implicit rule is applied.\n\nWhat you do is use a special feature of @code{make}, the @dfn{automatic\nvariables}.  These variables have values computed afresh for each rule that\nis executed, based on the target and prerequisites of the rule.  In this\nexample, you would use @samp{$@@} for the object file name and @samp{$<}\nfor the source file name.\n\n@cindex automatic variables in prerequisites\n@cindex prerequisites, and automatic variables\nIt's very important that you recognize the limited scope in which\nautomatic variable values are available: they only have values within\nthe command script.  In particular, you cannot use them anywhere\nwithin the target list of a rule; they have no value there and will\nexpand to the empty string.  Also, they cannot be accessed directly\nwithin the prerequisite list of a rule.  A common mistake is\nattempting to use @code{$@@} within the prerequisites list; this will\nnot work.  However, there is a special feature of GNU @code{make},\nsecondary expansion (@pxref{Secondary Expansion}), which will allow\nautomatic variable values to be used in prerequisite lists.\n\nHere is a table of automatic variables:\n\n@table @code\n@vindex $@@\n@vindex @@ @r{(automatic variable)}\n@item $@@\nThe file name of the target of the rule.  If the target is an archive\nmember, then @samp{$@@} is the name of the archive file.  In a pattern\nrule that has multiple targets (@pxref{Pattern Intro, ,Introduction to\nPattern Rules}), @samp{$@@} is the name of whichever target caused the\nrule's commands to be run.\n\n@vindex $%\n@vindex % @r{(automatic variable)}\n@item $%\nThe target member name, when the target is an archive member.\n@xref{Archives}.  For example, if the target is @file{foo.a(bar.o)} then\n@samp{$%} is @file{bar.o} and @samp{$@@} is @file{foo.a}.  @samp{$%} is\nempty when the target is not an archive member.\n\n@vindex $<\n@vindex < @r{(automatic variable)}\n@item $<\nThe name of the first prerequisite.  If the target got its commands from\nan implicit rule, this will be the first prerequisite added by the\nimplicit rule (@pxref{Implicit Rules}).\n\n@vindex $?\n@vindex ? @r{(automatic variable)}\n@item $?\nThe names of all the prerequisites that are newer than the target, with\nspaces between them.  For prerequisites which are archive members, only\nthe member named is used (@pxref{Archives}).\n@cindex prerequisites, list of changed\n@cindex list of changed prerequisites\n\n@vindex $^\n@vindex ^ @r{(automatic variable)}\n@item $^\nThe names of all the prerequisites, with spaces between them.  For\nprerequisites which are archive members, only the member named is used\n(@pxref{Archives}).  A target has only one prerequisite on each other file\nit depends on, no matter how many times each file is listed as a\nprerequisite.  So if you list a prerequisite more than once for a target,\nthe value of @code{$^} contains just one copy of the name.  This list\ndoes @strong{not} contain any of the order-only prerequisites; for those\nsee the @samp{$|} variable, below.\n@cindex prerequisites, list of all\n@cindex list of all prerequisites\n\n@vindex $+\n@vindex + @r{(automatic variable)}\n@item $+\nThis is like @samp{$^}, but prerequisites listed more than once are\nduplicated in the order they were listed in the makefile.  This is\nprimarily useful for use in linking commands where it is meaningful to\nrepeat library file names in a particular order.\n\n@vindex $|\n@vindex | @r{(automatic variable)}\n@item $|\nThe names of all the order-only prerequisites, with spaces between\nthem.\n\n@vindex $*\n@vindex * @r{(automatic variable)}\n@item $*\nThe stem with which an implicit rule matches (@pxref{Pattern Match, ,How\nPatterns Match}).  If the target is @file{dir/a.foo.b} and the target\npattern is @file{a.%.b} then the stem is @file{dir/foo}.  The stem is\nuseful for constructing names of related files.@refill\n@cindex stem, variable for\n\nIn a static pattern rule, the stem is part of the file name that matched\nthe @samp{%} in the target pattern.\n\nIn an explicit rule, there is no stem; so @samp{$*} cannot be determined\nin that way.  Instead, if the target name ends with a recognized suffix\n(@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}), @samp{$*} is set to\nthe target name minus the suffix.  For example, if the target name is\n@samp{foo.c}, then @samp{$*} is set to @samp{foo}, since @samp{.c} is a\nsuffix.  GNU @code{make} does this bizarre thing only for compatibility\nwith other implementations of @code{make}.  You should generally avoid\nusing @samp{$*} except in implicit rules or static pattern rules.@refill\n\nIf the target name in an explicit rule does not end with a recognized\nsuffix, @samp{$*} is set to the empty string for that rule.\n@end table\n\n@samp{$?} is useful even in explicit rules when you wish to operate on only\nthe prerequisites that have changed.  For example, suppose that an archive\nnamed @file{lib} is supposed to contain copies of several object files.\nThis rule copies just the changed object files into the archive:\n\n@example\n@group\nlib: foo.o bar.o lose.o win.o\n        ar r lib $?\n@end group\n@end example\n\nOf the variables listed above, four have values that are single file\nnames, and three have values that are lists of file names.  These seven\nhave variants that get just the file's directory name or just the file\nname within the directory.  The variant variables' names are formed by\nappending @samp{D} or @samp{F}, respectively.  These variants are\nsemi-obsolete in GNU @code{make} since the functions @code{dir} and\n@code{notdir} can be used to get a similar effect (@pxref{File Name\nFunctions, , Functions for File Names}).  Note, however, that the\n@samp{D} variants all omit the trailing slash which always appears in\nthe output of the @code{dir} function.  Here is a table of the variants:\n\n@table @samp\n@vindex $(@@D)\n@vindex @@D @r{(automatic variable)}\n@item $(@@D)\nThe directory part of the file name of the target, with the trailing\nslash removed.  If the value of @samp{$@@} is @file{dir/foo.o} then\n@samp{$(@@D)} is @file{dir}.  This value is @file{.} if @samp{$@@} does\nnot contain a slash.\n\n@vindex $(@@F)\n@vindex @@F @r{(automatic variable)}\n@item $(@@F)\nThe file-within-directory part of the file name of the target.  If the\nvalue of @samp{$@@} is @file{dir/foo.o} then @samp{$(@@F)} is\n@file{foo.o}.  @samp{$(@@F)} is equivalent to @samp{$(notdir $@@)}.\n\n@vindex $(*D)\n@vindex *D @r{(automatic variable)}\n@item $(*D)\n@vindex $(*F)\n@vindex *F @r{(automatic variable)}\n@itemx $(*F)\nThe directory part and the file-within-directory\npart of the stem; @file{dir} and @file{foo} in this example.\n\n@vindex $(%D)\n@vindex %D @r{(automatic variable)}\n@item $(%D)\n@vindex $(%F)\n@vindex %F @r{(automatic variable)}\n@itemx $(%F)\nThe directory part and the file-within-directory part of the target\narchive member name.  This makes sense only for archive member targets\nof the form @file{@var{archive}(@var{member})} and is useful only when\n@var{member} may contain a directory name.  (@xref{Archive Members,\n,Archive Members as Targets}.)\n\n@vindex $(<D)\n@vindex <D @r{(automatic variable)}\n@item $(<D)\n@vindex $(<F)\n@vindex <F @r{(automatic variable)}\n@itemx $(<F)\nThe directory part and the file-within-directory\npart of the first prerequisite.\n\n@vindex $(^D)\n@vindex ^D @r{(automatic variable)}\n@item $(^D)\n@vindex $(^F)\n@vindex ^F @r{(automatic variable)}\n@itemx $(^F)\nLists of the directory parts and the file-within-directory\nparts of all prerequisites.\n\n@vindex $(+D)\n@vindex +D @r{(automatic variable)}\n@item $(+D)\n@vindex $(+F)\n@vindex +F @r{(automatic variable)}\n@itemx $(+F)\nLists of the directory parts and the file-within-directory\nparts of all prerequisites, including multiple instances of duplicated\nprerequisites.\n\n@vindex $(?D)\n@vindex ?D @r{(automatic variable)}\n@item $(?D)\n@vindex $(?F)\n@vindex ?F @r{(automatic variable)}\n@itemx $(?F)\nLists of the directory parts and the file-within-directory parts of\nall prerequisites that are newer than the target.\n@end table\n\nNote that we use a special stylistic convention when we talk about these\nautomatic variables; we write ``the value of @samp{$<}'', rather than\n@w{``the variable @code{<}''} as we would write for ordinary variables\nsuch as @code{objects} and @code{CFLAGS}.  We think this convention\nlooks more natural in this special case.  Please do not assume it has a\ndeep significance; @samp{$<} refers to the variable named @code{<} just\nas @samp{$(CFLAGS)} refers to the variable named @code{CFLAGS}.\nYou could just as well use @samp{$(<)} in place of @samp{$<}.\n\n@node Pattern Match, Match-Anything Rules, Automatic Variables, Pattern Rules\n@subsection How Patterns Match\n\n@cindex stem\nA target pattern is composed of a @samp{%} between a prefix and a suffix,\neither or both of which may be empty.  The pattern matches a file name only\nif the file name starts with the prefix and ends with the suffix, without\noverlap.  The text between the prefix and the suffix is called the\n@dfn{stem}.  Thus, when the pattern @samp{%.o} matches the file name\n@file{test.o}, the stem is @samp{test}.  The pattern rule prerequisites are\nturned into actual file names by substituting the stem for the character\n@samp{%}.  Thus, if in the same example one of the prerequisites is written\nas @samp{%.c}, it expands to @samp{test.c}.@refill\n\nWhen the target pattern does not contain a slash (and it usually does\nnot), directory names in the file names are removed from the file name\nbefore it is compared with the target prefix and suffix.  After the\ncomparison of the file name to the target pattern, the directory\nnames, along with the slash that ends them, are added on to the\nprerequisite file names generated from the pattern rule's prerequisite\npatterns and the file name.  The directories are ignored only for the\npurpose of finding an implicit rule to use, not in the application of\nthat rule.  Thus, @samp{e%t} matches the file name @file{src/eat},\nwith @samp{src/a} as the stem.  When prerequisites are turned into file\nnames, the directories from the stem are added at the front, while the\nrest of the stem is substituted for the @samp{%}.  The stem\n@samp{src/a} with a prerequisite pattern @samp{c%r} gives the file name\n@file{src/car}.@refill\n\n@node Match-Anything Rules, Canceling Rules, Pattern Match, Pattern Rules\n@subsection Match-Anything Pattern Rules\n\n@cindex match-anything rule\n@cindex terminal rule\nWhen a pattern rule's target is just @samp{%}, it matches any file name\nwhatever.  We call these rules @dfn{match-anything} rules.  They are very\nuseful, but it can take a lot of time for @code{make} to think about them,\nbecause it must consider every such rule for each file name listed either\nas a target or as a prerequisite.\n\nSuppose the makefile mentions @file{foo.c}.  For this target, @code{make}\nwould have to consider making it by linking an object file @file{foo.c.o},\nor by C compilation-and-linking in one step from @file{foo.c.c}, or by\nPascal compilation-and-linking from @file{foo.c.p}, and many other\npossibilities.\n\nWe know these possibilities are ridiculous since @file{foo.c} is a C source\nfile, not an executable.  If @code{make} did consider these possibilities,\nit would ultimately reject them, because files such as @file{foo.c.o} and\n@file{foo.c.p} would not exist.  But these possibilities are so\nnumerous that @code{make} would run very slowly if it had to consider\nthem.@refill\n\nTo gain speed, we have put various constraints on the way @code{make}\nconsiders match-anything rules.  There are two different constraints that\ncan be applied, and each time you define a match-anything rule you must\nchoose one or the other for that rule.\n\nOne choice is to mark the match-anything rule as @dfn{terminal} by defining\nit with a double colon.  When a rule is terminal, it does not apply unless\nits prerequisites actually exist.  Prerequisites that could be made with\nother implicit rules are not good enough.  In other words, no further\nchaining is allowed beyond a terminal rule.\n\nFor example, the built-in implicit rules for extracting sources from RCS\nand SCCS files are terminal; as a result, if the file @file{foo.c,v} does\nnot exist, @code{make} will not even consider trying to make it as an\nintermediate file from @file{foo.c,v.o} or from @file{RCS/SCCS/s.foo.c,v}.\nRCS and SCCS files are generally ultimate source files, which should not be\nremade from any other files; therefore, @code{make} can save time by not\nlooking for ways to remake them.@refill\n\nIf you do not mark the match-anything rule as terminal, then it is\nnonterminal.  A nonterminal match-anything rule cannot apply to a file name\nthat indicates a specific type of data.  A file name indicates a specific\ntype of data if some non-match-anything implicit rule target matches it.\n\nFor example, the file name @file{foo.c} matches the target for the pattern\nrule @samp{%.c : %.y} (the rule to run Yacc).  Regardless of whether this\nrule is actually applicable (which happens only if there is a file\n@file{foo.y}), the fact that its target matches is enough to prevent\nconsideration of any nonterminal match-anything rules for the file\n@file{foo.c}.  Thus, @code{make} will not even consider trying to make\n@file{foo.c} as an executable file from @file{foo.c.o}, @file{foo.c.c},\n@file{foo.c.p}, etc.@refill\n\nThe motivation for this constraint is that nonterminal match-anything\nrules are used for making files containing specific types of data (such as\nexecutable files) and a file name with a recognized suffix indicates some\nother specific type of data (such as a C source file).\n\nSpecial built-in dummy pattern rules are provided solely to recognize\ncertain file names so that nonterminal match-anything rules will not be\nconsidered.  These dummy rules have no prerequisites and no commands, and\nthey are ignored for all other purposes.  For example, the built-in\nimplicit rule\n\n@example\n%.p :\n@end example\n\n@noindent\nexists to make sure that Pascal source files such as @file{foo.p} match a\nspecific target pattern and thereby prevent time from being wasted looking\nfor @file{foo.p.o} or @file{foo.p.c}.\n\nDummy pattern rules such as the one for @samp{%.p} are made for every\nsuffix listed as valid for use in suffix rules (@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}).\n\n@node Canceling Rules,  , Match-Anything Rules, Pattern Rules\n@subsection Canceling Implicit Rules\n\nYou can override a built-in implicit rule (or one you have defined\nyourself) by defining a new pattern rule with the same target and\nprerequisites, but different commands.  When the new rule is defined, the\nbuilt-in one is replaced.  The new rule's position in the sequence of\nimplicit rules is determined by where you write the new rule.\n\nYou can cancel a built-in implicit rule by defining a pattern rule with the\nsame target and prerequisites, but no commands.  For example, the following\nwould cancel the rule that runs the assembler:\n\n@example\n%.o : %.s\n@end example\n\n@node Last Resort, Suffix Rules, Pattern Rules, Implicit Rules\n@section Defining Last-Resort Default Rules\n@cindex last-resort default rules\n@cindex default rules, last-resort\n\nYou can define a last-resort implicit rule by writing a terminal\nmatch-anything pattern rule with no prerequisites (@pxref{Match-Anything\nRules}).  This is just like any other pattern rule; the only thing\nspecial about it is that it will match any target.  So such a rule's\ncommands are used for all targets and prerequisites that have no commands\nof their own and for which no other implicit rule applies.\n\nFor example, when testing a makefile, you might not care if the source\nfiles contain real data, only that they exist.  Then you might do this:\n\n@example\n%::\n        touch $@@\n@end example\n\n@noindent\nto cause all the source files needed (as prerequisites) to be created\nautomatically.\n\n@findex .DEFAULT\nYou can instead define commands to be used for targets for which there\nare no rules at all, even ones which don't specify commands.  You do\nthis by writing a rule for the target @code{.DEFAULT}.  Such a rule's\ncommands are used for all prerequisites which do not appear as targets in\nany explicit rule, and for which no implicit rule applies.  Naturally,\nthere is no @code{.DEFAULT} rule unless you write one.\n\nIf you use @code{.DEFAULT} with no commands or prerequisites:\n\n@example\n.DEFAULT:\n@end example\n\n@noindent\nthe commands previously stored for @code{.DEFAULT} are cleared.\nThen @code{make} acts as if you had never defined @code{.DEFAULT} at all.\n\nIf you do not want a target to get the commands from a match-anything\npattern rule or @code{.DEFAULT}, but you also do not want any commands\nto be run for the target, you can give it empty commands (@pxref{Empty\nCommands, ,Defining Empty Commands}).@refill\n\nYou can use a last-resort rule to override part of another makefile.\n@xref{Overriding Makefiles, , Overriding Part of Another Makefile}.\n\n@node Suffix Rules, Implicit Rule Search, Last Resort, Implicit Rules\n@section Old-Fashioned Suffix Rules\n@cindex old-fashioned suffix rules\n@cindex suffix rule\n\n@dfn{Suffix rules} are the old-fashioned way of defining implicit rules for\n@code{make}.  Suffix rules are obsolete because pattern rules are more\ngeneral and clearer.  They are supported in GNU @code{make} for\ncompatibility with old makefiles.  They come in two kinds:\n@dfn{double-suffix} and @dfn{single-suffix}.@refill\n\nA double-suffix rule is defined by a pair of suffixes: the target suffix\nand the source suffix.  It matches any file whose name ends with the\ntarget suffix.  The corresponding implicit prerequisite is made by\nreplacing the target suffix with the source suffix in the file name.  A\ntwo-suffix rule whose target and source suffixes are @samp{.o} and\n@samp{.c} is equivalent to the pattern rule @samp{%.o : %.c}.\n\nA single-suffix rule is defined by a single suffix, which is the source\nsuffix.  It matches any file name, and the corresponding implicit\nprerequisite name is made by appending the source suffix.  A single-suffix\nrule whose source suffix is @samp{.c} is equivalent to the pattern rule\n@samp{% : %.c}.\n\nSuffix rule definitions are recognized by comparing each rule's target\nagainst a defined list of known suffixes.  When @code{make} sees a rule\nwhose target is a known suffix, this rule is considered a single-suffix\nrule.  When @code{make} sees a rule whose target is two known suffixes\nconcatenated, this rule is taken as a double-suffix rule.\n\nFor example, @samp{.c} and @samp{.o} are both on the default list of\nknown suffixes.  Therefore, if you define a rule whose target is\n@samp{.c.o}, @code{make} takes it to be a double-suffix rule with source\nsuffix @samp{.c} and target suffix @samp{.o}.  Here is the old-fashioned\nway to define the rule for compiling a C source file:@refill\n\n@example\n.c.o:\n        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@@ $<\n@end example\n\nSuffix rules cannot have any prerequisites of their own.  If they have any,\nthey are treated as normal files with funny names, not as suffix rules.\nThus, the rule:\n\n@example\n.c.o: foo.h\n        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@@ $<\n@end example\n\n@noindent\ntells how to make the file @file{.c.o} from the prerequisite file\n@file{foo.h}, and is not at all like the pattern rule:\n\n@example\n%.o: %.c foo.h\n        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@@ $<\n@end example\n\n@noindent\nwhich tells how to make @samp{.o} files from @samp{.c} files, and makes all\n@samp{.o} files using this pattern rule also depend on @file{foo.h}.\n\nSuffix rules with no commands are also meaningless.  They do not remove\nprevious rules as do pattern rules with no commands (@pxref{Canceling\nRules, , Canceling Implicit Rules}).  They simply enter the suffix or pair of suffixes concatenated as\na target in the data base.@refill\n\n@findex .SUFFIXES\nThe known suffixes are simply the names of the prerequisites of the special\ntarget @code{.SUFFIXES}.  You can add your own suffixes by writing a rule\nfor @code{.SUFFIXES} that adds more prerequisites, as in:\n\n@example\n.SUFFIXES: .hack .win\n@end example\n\n@noindent\nwhich adds @samp{.hack} and @samp{.win} to the end of the list of suffixes.\n\nIf you wish to eliminate the default known suffixes instead of just adding\nto them, write a rule for @code{.SUFFIXES} with no prerequisites.  By\nspecial dispensation, this eliminates all existing prerequisites of\n@code{.SUFFIXES}.  You can then write another rule to add the suffixes you\nwant.  For example,\n\n@example\n@group\n.SUFFIXES:            # @r{Delete the default suffixes}\n.SUFFIXES: .c .o .h   # @r{Define our suffix list}\n@end group\n@end example\n\nThe @samp{-r} or @samp{--no-builtin-rules} flag causes the default\nlist of suffixes to be empty.\n\n@vindex SUFFIXES\nThe variable @code{SUFFIXES} is defined to the default list of suffixes\nbefore @code{make} reads any makefiles.  You can change the list of suffixes\nwith a rule for the special target @code{.SUFFIXES}, but that does not alter\nthis variable.\n\n@node Implicit Rule Search,  , Suffix Rules, Implicit Rules\n@section Implicit Rule Search Algorithm\n@cindex implicit rule, search algorithm\n@cindex search algorithm, implicit rule\n\nHere is the procedure @code{make} uses for searching for an implicit rule\nfor a target @var{t}.  This procedure is followed for each double-colon\nrule with no commands, for each target of ordinary rules none of which have\ncommands, and for each prerequisite that is not the target of any rule.  It\nis also followed recursively for prerequisites that come from implicit\nrules, in the search for a chain of rules.\n\nSuffix rules are not mentioned in this algorithm because suffix rules are\nconverted to equivalent pattern rules once the makefiles have been read in.\n\nFor an archive member target of the form\n@samp{@var{archive}(@var{member})}, the following algorithm is run\ntwice, first using the entire target name @var{t}, and second using\n@samp{(@var{member})} as the target @var{t} if the first run found no\nrule.@refill\n\n@enumerate\n@item\nSplit @var{t} into a directory part, called @var{d}, and the rest,\ncalled @var{n}.  For example, if @var{t} is @samp{src/foo.o}, then\n@var{d} is @samp{src/} and @var{n} is @samp{foo.o}.@refill\n\n@item\nMake a list of all the pattern rules one of whose targets matches\n@var{t} or @var{n}.  If the target pattern contains a slash, it is\nmatched against @var{t}; otherwise, against @var{n}.\n\n@item\nIf any rule in that list is @emph{not} a match-anything rule, then\nremove all nonterminal match-anything rules from the list.\n\n@item\nRemove from the list all rules with no commands.\n\n@item\nFor each pattern rule in the list:\n\n@enumerate a\n@item\nFind the stem @var{s}, which is the nonempty part of @var{t} or @var{n}\nmatched by the @samp{%} in the target pattern.@refill\n\n@item\nCompute the prerequisite names by substituting @var{s} for @samp{%}; if\nthe target pattern does not contain a slash, append @var{d} to\nthe front of each prerequisite name.@refill\n\n@item\nTest whether all the prerequisites exist or ought to exist.  (If a\nfile name is mentioned in the makefile as a target or as an explicit\nprerequisite, then we say it ought to exist.)\n\nIf all prerequisites exist or ought to exist, or there are no prerequisites,\nthen this rule applies.\n@end enumerate\n\n@item\nIf no pattern rule has been found so far, try harder.\nFor each pattern rule in the list:\n\n@enumerate a\n@item\nIf the rule is terminal, ignore it and go on to the next rule.\n\n@item\nCompute the prerequisite names as before.\n\n@item\nTest whether all the prerequisites exist or ought to exist.\n\n@item\nFor each prerequisite that does not exist, follow this algorithm\nrecursively to see if the prerequisite can be made by an implicit\nrule.\n\n@item\nIf all prerequisites exist, ought to exist, or can be\nmade by implicit rules, then this rule applies.\n@end enumerate\n\n@item\nIf no implicit rule applies, the rule for @code{.DEFAULT}, if any,\napplies.  In that case, give @var{t} the same commands that\n@code{.DEFAULT} has.  Otherwise, there are no commands for @var{t}.\n@end enumerate\n\nOnce a rule that applies has been found, for each target pattern of the\nrule other than the one that matched @var{t} or @var{n}, the @samp{%} in\nthe pattern is replaced with @var{s} and the resultant file name is stored\nuntil the commands to remake the target file @var{t} are executed.  After\nthese commands are executed, each of these stored file names are entered\ninto the data base and marked as having been updated and having the same\nupdate status as the file @var{t}.\n\nWhen the commands of a pattern rule are executed for @var{t}, the automatic\nvariables are set corresponding to the target and prerequisites.\n@xref{Automatic Variables}.\n\n@node Archives, Features, Implicit Rules, Top\n@chapter Using @code{make} to Update Archive Files\n@cindex archive\n\n@dfn{Archive files} are files containing named subfiles called\n@dfn{members}; they are maintained with the program @code{ar} and their\nmain use is as subroutine libraries for linking.\n\n@menu\n* Archive Members::             Archive members as targets.\n* Archive Update::              The implicit rule for archive member targets.\n* Archive Pitfalls::            Dangers to watch out for when using archives.\n* Archive Suffix Rules::        You can write a special kind of suffix rule\n                                  for updating archives.\n@end menu\n\n@node Archive Members, Archive Update, Archives, Archives\n@section Archive Members as Targets\n@cindex archive member targets\n\nAn individual member of an archive file can be used as a target or\nprerequisite in @code{make}.  You specify the member named @var{member} in\narchive file @var{archive} as follows:\n\n@example\n@var{archive}(@var{member})\n@end example\n\n@noindent\nThis construct is available only in targets and prerequisites, not in\ncommands!  Most programs that you might use in commands do not support this\nsyntax and cannot act directly on archive members.  Only @code{ar} and\nother programs specifically designed to operate on archives can do so.\nTherefore, valid commands to update an archive member target probably must\nuse @code{ar}.  For example, this rule says to create a member\n@file{hack.o} in archive @file{foolib} by copying the file @file{hack.o}:\n\n@example\nfoolib(hack.o) : hack.o\n        ar cr foolib hack.o\n@end example\n\nIn fact, nearly all archive member targets are updated in just this way\nand there is an implicit rule to do it for you.  @strong{Please note:} The\n@samp{c} flag to @code{ar} is required if the archive file does not\nalready exist.\n\nTo specify several members in the same archive, you can write all the\nmember names together between the parentheses.  For example:\n\n@example\nfoolib(hack.o kludge.o)\n@end example\n\n@noindent\nis equivalent to:\n\n@example\nfoolib(hack.o) foolib(kludge.o)\n@end example\n\n@cindex wildcard, in archive member\nYou can also use shell-style wildcards in an archive member reference.\n@xref{Wildcards, ,Using Wildcard Characters in File Names}.  For\nexample, @w{@samp{foolib(*.o)}} expands to all existing members of the\n@file{foolib} archive whose names end in @samp{.o}; perhaps\n@samp{@w{foolib(hack.o)} @w{foolib(kludge.o)}}.\n\n@node Archive Update, Archive Pitfalls, Archive Members, Archives\n@section Implicit Rule for Archive Member Targets\n\nRecall that a target that looks like @file{@var{a}(@var{m})} stands for the\nmember named @var{m} in the archive file @var{a}.\n\nWhen @code{make} looks for an implicit rule for such a target, as a special\nfeature it considers implicit rules that match @file{(@var{m})}, as well as\nthose that match the actual target @file{@var{a}(@var{m})}.\n\nThis causes one special rule whose target is @file{(%)} to match.  This\nrule updates the target @file{@var{a}(@var{m})} by copying the file @var{m}\ninto the archive.  For example, it will update the archive member target\n@file{foo.a(bar.o)} by copying the @emph{file} @file{bar.o} into the\narchive @file{foo.a} as a @emph{member} named @file{bar.o}.\n\nWhen this rule is chained with others, the result is very powerful.\nThus, @samp{make \"foo.a(bar.o)\"} (the quotes are needed to protect the\n@samp{(} and @samp{)} from being interpreted specially by the shell) in\nthe presence of a file @file{bar.c} is enough to cause the following\ncommands to be run, even without a makefile:\n\n@example\ncc -c bar.c -o bar.o\nar r foo.a bar.o\nrm -f bar.o\n@end example\n\n@noindent\nHere @code{make} has envisioned the file @file{bar.o} as an intermediate\nfile.  @xref{Chained Rules, ,Chains of Implicit Rules}.\n\nImplicit rules such as this one are written using the automatic variable\n@samp{$%}.  @xref{Automatic Variables}.\n\nAn archive member name in an archive cannot contain a directory name, but\nit may be useful in a makefile to pretend that it does.  If you write an\narchive member target @file{foo.a(dir/file.o)}, @code{make} will perform\nautomatic updating with this command:\n\n@example\nar r foo.a dir/file.o\n@end example\n\n@noindent\nwhich has the effect of copying the file @file{dir/file.o} into a member\nnamed @file{file.o}.  In connection with such usage, the automatic variables\n@code{%D} and @code{%F} may be useful.\n\n@menu\n* Archive Symbols::             How to update archive symbol directories.\n@end menu\n\n@node Archive Symbols,  , Archive Update, Archive Update\n@subsection Updating Archive Symbol Directories\n@cindex @code{__.SYMDEF}\n@cindex updating archive symbol directories\n@cindex archive symbol directory updating\n@cindex symbol directories, updating archive\n@cindex directories, updating archive symbol\n\nAn archive file that is used as a library usually contains a special member\nnamed @file{__.SYMDEF} that contains a directory of the external symbol\nnames defined by all the other members.  After you update any other\nmembers, you need to update @file{__.SYMDEF} so that it will summarize the\nother members properly.  This is done by running the @code{ranlib} program:\n\n@example\nranlib @var{archivefile}\n@end example\n\nNormally you would put this command in the rule for the archive file,\nand make all the members of the archive file prerequisites of that rule.\nFor example,\n\n@example\nlibfoo.a: libfoo.a(x.o) libfoo.a(y.o) @dots{}\n        ranlib libfoo.a\n@end example\n\n@noindent\nThe effect of this is to update archive members @file{x.o}, @file{y.o},\netc., and then update the symbol directory member @file{__.SYMDEF} by\nrunning @code{ranlib}.  The rules for updating the members are not shown\nhere; most likely you can omit them and use the implicit rule which copies\nfiles into the archive, as described in the preceding section.\n\nThis is not necessary when using the GNU @code{ar} program, which\nupdates the @file{__.SYMDEF} member automatically.\n\n@node Archive Pitfalls, Archive Suffix Rules, Archive Update, Archives\n@section Dangers When Using Archives\n@cindex archive, and parallel execution\n@cindex parallel execution, and archive update\n@cindex archive, and @code{-j}\n@cindex @code{-j}, and archive update\n\nIt is important to be careful when using parallel execution (the\n@code{-j} switch; @pxref{Parallel, ,Parallel Execution}) and archives.\nIf multiple @code{ar} commands run at the same time on the same archive\nfile, they will not know about each other and can corrupt the file.\n\nPossibly a future version of @code{make} will provide a mechanism to\ncircumvent this problem by serializing all commands that operate on the\nsame archive file.  But for the time being, you must either write your\nmakefiles to avoid this problem in some other way, or not use @code{-j}.\n\n@node Archive Suffix Rules,  , Archive Pitfalls, Archives\n@section Suffix Rules for Archive Files\n@cindex suffix rule, for archive\n@cindex archive, suffix rule for\n@cindex library archive, suffix rule for\n@cindex @code{.a} (archives)\n\nYou can write a special kind of suffix rule for dealing with archive\nfiles.  @xref{Suffix Rules}, for a full explanation of suffix rules.\nArchive suffix rules are obsolete in GNU @code{make}, because pattern\nrules for archives are a more general mechanism (@pxref{Archive\nUpdate}).  But they are retained for compatibility with other\n@code{make}s.\n\nTo write a suffix rule for archives, you simply write a suffix rule\nusing the target suffix @samp{.a} (the usual suffix for archive files).\nFor example, here is the old-fashioned suffix rule to update a library\narchive from C source files:\n\n@example\n@group\n.c.a:\n        $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o\n        $(AR) r $@@ $*.o\n        $(RM) $*.o\n@end group\n@end example\n\n@noindent\nThis works just as if you had written the pattern rule:\n\n@example\n@group\n(%.o): %.c\n        $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o\n        $(AR) r $@@ $*.o\n        $(RM) $*.o\n@end group\n@end example\n\nIn fact, this is just what @code{make} does when it sees a suffix rule\nwith @samp{.a} as the target suffix.  Any double-suffix rule\n@w{@samp{.@var{x}.a}} is converted to a pattern rule with the target\npattern @samp{(%.o)} and a prerequisite pattern of @samp{%.@var{x}}.\n\nSince you might want to use @samp{.a} as the suffix for some other kind\nof file, @code{make} also converts archive suffix rules to pattern rules\nin the normal way (@pxref{Suffix Rules}).  Thus a double-suffix rule\n@w{@samp{.@var{x}.a}} produces two pattern rules: @samp{@w{(%.o):}\n@w{%.@var{x}}} and @samp{@w{%.a}: @w{%.@var{x}}}.@refill\n\n@node Features, Missing, Archives, Top\n@chapter Features of GNU @code{make}\n@cindex features of GNU @code{make}\n@cindex portability\n@cindex compatibility\n\nHere is a summary of the features of GNU @code{make}, for comparison\nwith and credit to other versions of @code{make}.  We consider the\nfeatures of @code{make} in 4.2 BSD systems as a baseline.  If you are\nconcerned with writing portable makefiles, you should not use the\nfeatures of @code{make} listed here, nor the ones in @ref{Missing}.\n\nMany features come from the version of @code{make} in System V.\n\n@itemize @bullet\n@item\nThe @code{VPATH} variable and its special meaning.\n@xref{Directory Search, , Searching Directories for Prerequisites}.\nThis feature exists in System V @code{make}, but is undocumented.\nIt is documented in 4.3 BSD @code{make} (which says it mimics System V's\n@code{VPATH} feature).@refill\n\n@item\nIncluded makefiles.  @xref{Include, ,Including Other Makefiles}.\nAllowing multiple files to be included with a single directive is a GNU\nextension.\n\n@item\nVariables are read from and communicated via the environment.\n@xref{Environment, ,Variables from the Environment}.\n\n@item\nOptions passed through the variable @code{MAKEFLAGS} to recursive\ninvocations of @code{make}.\n@xref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}.\n\n@item\nThe automatic variable @code{$%} is set to the member name\nin an archive reference.  @xref{Automatic Variables}.\n\n@item\nThe automatic variables @code{$@@}, @code{$*}, @code{$<}, @code{$%},\nand @code{$?} have corresponding forms like @code{$(@@F)} and\n@code{$(@@D)}.  We have generalized this to @code{$^} as an obvious\nextension.  @xref{Automatic Variables}.@refill\n\n@item\nSubstitution variable references.\n@xref{Reference, ,Basics of Variable References}.\n\n@item\nThe command-line options @samp{-b} and @samp{-m}, accepted and\nignored.  In System V @code{make}, these options actually do something.\n\n@item\nExecution of recursive commands to run @code{make} via the variable\n@code{MAKE} even if @samp{-n}, @samp{-q} or @samp{-t} is specified.\n@xref{Recursion, ,Recursive Use of @code{make}}.\n\n@item\nSupport for suffix @samp{.a} in suffix rules.  @xref{Archive Suffix\nRules}.  This feature is obsolete in GNU @code{make}, because the\ngeneral feature of rule chaining (@pxref{Chained Rules, ,Chains of\nImplicit Rules}) allows one pattern rule for installing members in an\narchive (@pxref{Archive Update}) to be sufficient.\n\n@item\nThe arrangement of lines and backslash-newline combinations in\ncommands is retained when the commands are printed, so they appear as\nthey do in the makefile, except for the stripping of initial\nwhitespace.\n@end itemize\n\nThe following features were inspired by various other versions of\n@code{make}.  In some cases it is unclear exactly which versions inspired\nwhich others.\n\n@itemize @bullet\n@item\nPattern rules using @samp{%}.\nThis has been implemented in several versions of @code{make}.\nWe're not sure who invented it first, but it's been spread around a bit.\n@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.@refill\n\n@item\nRule chaining and implicit intermediate files.\nThis was implemented by Stu Feldman in his version of @code{make}\nfor AT&T Eighth Edition Research Unix, and later by Andrew Hume of\nAT&T Bell Labs in his @code{mk} program (where he terms it\n``transitive closure'').  We do not really know if\nwe got this from either of them or thought it up ourselves at the\nsame time.  @xref{Chained Rules, ,Chains of Implicit Rules}.\n\n@item\nThe automatic variable @code{$^} containing a list of all prerequisites\nof the current target.  We did not invent this, but we have no idea who\ndid.  @xref{Automatic Variables}.  The automatic variable\n@code{$+} is a simple extension of @code{$^}.\n\n@item\nThe ``what if'' flag (@samp{-W} in GNU @code{make}) was (as far as we know)\ninvented by Andrew Hume in @code{mk}.\n@xref{Instead of Execution, ,Instead of Executing the Commands}.\n\n@item\nThe concept of doing several things at once (parallelism) exists in\nmany incarnations of @code{make} and similar programs, though not in the\nSystem V or BSD implementations.  @xref{Execution, ,Command Execution}.\n\n@item\nModified variable references using pattern substitution come from\nSunOS 4.  @xref{Reference, ,Basics of Variable References}.\nThis functionality was provided in GNU @code{make} by the\n@code{patsubst} function before the alternate syntax was implemented\nfor compatibility with SunOS 4.  It is not altogether clear who\ninspired whom, since GNU @code{make} had @code{patsubst} before SunOS\n4 was released.@refill\n\n@item\nThe special significance of @samp{+} characters preceding command lines\n(@pxref{Instead of Execution, ,Instead of Executing the Commands}) is\nmandated by\n@cite{IEEE Standard 1003.2-1992} (POSIX.2).\n\n@item\nThe @samp{+=} syntax to append to the value of a variable comes from SunOS\n4 @code{make}.  @xref{Appending, , Appending More Text to Variables}.\n\n@item\nThe syntax @w{@samp{@var{archive}(@var{mem1} @var{mem2}@dots{})}} to list\nmultiple members in a single archive file comes from SunOS 4 @code{make}.\n@xref{Archive Members}.\n\n@item\nThe @code{-include} directive to include makefiles with no error for a\nnonexistent file comes from SunOS 4 @code{make}.  (But note that SunOS 4\n@code{make} does not allow multiple makefiles to be specified in one\n@code{-include} directive.)  The same feature appears with the name\n@code{sinclude} in SGI @code{make} and perhaps others.\n@end itemize\n\nThe remaining features are inventions new in GNU @code{make}:\n\n@itemize @bullet\n@item\nUse the @samp{-v} or @samp{--version} option to print version and\ncopyright information.\n\n@item\nUse the @samp{-h} or @samp{--help} option to summarize the options to\n@code{make}.\n\n@item\nSimply-expanded variables.  @xref{Flavors, ,The Two Flavors of Variables}.\n\n@item\nPass command-line variable assignments automatically through the\nvariable @code{MAKE} to recursive @code{make} invocations.\n@xref{Recursion, ,Recursive Use of @code{make}}.\n\n@item\nUse the @samp{-C} or @samp{--directory} command option to change\ndirectory.  @xref{Options Summary, ,Summary of Options}.\n\n@item\nMake verbatim variable definitions with @code{define}.\n@xref{Defining, ,Defining Variables Verbatim}.\n\n@item\nDeclare phony targets with the special target @code{.PHONY}.\n\nAndrew Hume of AT&T Bell Labs implemented a similar feature with a\ndifferent syntax in his @code{mk} program.  This seems to be a case of\nparallel discovery.  @xref{Phony Targets, ,Phony Targets}.\n\n@item\nManipulate text by calling functions.\n@xref{Functions, ,Functions for Transforming Text}.\n\n@item\nUse the @samp{-o} or @samp{--old-file}\noption to pretend a file's modification-time is old.\n@xref{Avoiding Compilation, ,Avoiding Recompilation of Some Files}.\n\n@item\nConditional execution.\n\nThis feature has been implemented numerous times in various versions\nof @code{make}; it seems a natural extension derived from the features\nof the C preprocessor and similar macro languages and is not a\nrevolutionary concept.  @xref{Conditionals, ,Conditional Parts of Makefiles}.\n\n@item\nSpecify a search path for included makefiles.\n@xref{Include, ,Including Other Makefiles}.\n\n@item\nSpecify extra makefiles to read with an environment variable.\n@xref{MAKEFILES Variable, ,The Variable @code{MAKEFILES}}.\n\n@item\nStrip leading sequences of @samp{./} from file names, so that\n@file{./@var{file}} and @file{@var{file}} are considered to be the\nsame file.@refill\n\n@item\nUse a special search method for library prerequisites written in the\nform @samp{-l@var{name}}.\n@xref{Libraries/Search, ,Directory Search for Link Libraries}.\n\n@item\nAllow suffixes for suffix rules\n(@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}) to contain any\ncharacters.  In other versions of @code{make}, they must begin with\n@samp{.} and not contain any @samp{/} characters.\n\n@item\nKeep track of the current level of @code{make} recursion using the\nvariable @code{MAKELEVEL}.  @xref{Recursion, ,Recursive Use of @code{make}}.\n\n@item\nProvide any goals given on the command line in the variable\n@code{MAKECMDGOALS}.  @xref{Goals, ,Arguments to Specify the Goals}.\n\n@item\nSpecify static pattern rules.  @xref{Static Pattern, ,Static Pattern Rules}.\n\n@item\nProvide selective @code{vpath} search.\n@xref{Directory Search, ,Searching Directories for Prerequisites}.\n\n@item\nProvide computed variable references.\n@xref{Reference, ,Basics of Variable References}.\n\n@item\nUpdate makefiles.  @xref{Remaking Makefiles, ,How Makefiles Are Remade}.\nSystem V @code{make} has a very, very limited form of this\nfunctionality in that it will check out SCCS files for makefiles.\n\n@item\nVarious new built-in implicit rules.\n@xref{Catalogue of Rules, ,Catalogue of Implicit Rules}.\n\n@item\nThe built-in variable @samp{MAKE_VERSION} gives the version number of\n@code{make}.\n@vindex MAKE_VERSION\n@end itemize\n\n@node Missing, Makefile Conventions, Features, Top\n@chapter Incompatibilities and Missing Features\n@cindex incompatibilities\n@cindex missing features\n@cindex features, missing\n\nThe @code{make} programs in various other systems support a few features\nthat are not implemented in GNU @code{make}.  The POSIX.2 standard\n(@cite{IEEE Standard 1003.2-1992}) which specifies @code{make} does not\nrequire any of these features.@refill\n\n@itemize @bullet\n@item\nA target of the form @samp{@var{file}((@var{entry}))} stands for a member\nof archive file @var{file}.  The member is chosen, not by name, but by\nbeing an object file which defines the linker symbol @var{entry}.@refill\n\nThis feature was not put into GNU @code{make} because of the\nnonmodularity of putting knowledge into @code{make} of the internal\nformat of archive file symbol tables.\n@xref{Archive Symbols, ,Updating Archive Symbol Directories}.\n\n@item\nSuffixes (used in suffix rules) that end with the character @samp{~}\nhave a special meaning to System V @code{make};\nthey refer to the SCCS file that corresponds\nto the file one would get without the @samp{~}.  For example, the\nsuffix rule @samp{.c~.o} would make the file @file{@var{n}.o} from\nthe SCCS file @file{s.@var{n}.c}.  For complete coverage, a whole\nseries of such suffix rules is required.\n@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}.\n\nIn GNU @code{make}, this entire series of cases is handled by two\npattern rules for extraction from SCCS, in combination with the\ngeneral feature of rule chaining.\n@xref{Chained Rules, ,Chains of Implicit Rules}.\n\n@item\nIn System V and 4.3 BSD @code{make}, files found by @code{VPATH} search\n(@pxref{Directory Search, ,Searching Directories for Prerequisites}) have their names changed inside command\nstrings.  We feel it is much cleaner to always use automatic variables\nand thus make this feature obsolete.@refill\n\n@item\nIn some Unix @code{make}s, the automatic variable @code{$*} appearing in\nthe prerequisites of a rule has the amazingly strange ``feature'' of\nexpanding to the full name of the @emph{target of that rule}.  We cannot\nimagine what went on in the minds of Unix @code{make} developers to do\nthis; it is utterly inconsistent with the normal definition of @code{$*}.\n@vindex * @r{(automatic variable), unsupported bizarre usage}\n\n@item\nIn some Unix @code{make}s, implicit rule search\n(@pxref{Implicit Rules, ,Using Implicit Rules}) is apparently done for\n@emph{all} targets, not just those without commands.  This means you can\ndo:@refill\n\n@example\n@group\nfoo.o:\n        cc -c foo.c\n@end group\n@end example\n\n@noindent\nand Unix @code{make} will intuit that @file{foo.o} depends on\n@file{foo.c}.@refill\n\nWe feel that such usage is broken.  The prerequisite properties of\n@code{make} are well-defined (for GNU @code{make}, at least),\nand doing such a thing simply does not fit the model.@refill\n\n@item\nGNU @code{make} does not include any built-in implicit rules for\ncompiling or preprocessing EFL programs.  If we hear of anyone who is\nusing EFL, we will gladly add them.\n\n@item\nIt appears that in SVR4 @code{make}, a suffix rule can be specified with\nno commands, and it is treated as if it had empty commands\n(@pxref{Empty Commands}).  For example:\n\n@example\n.c.a:\n@end example\n\n@noindent\nwill override the built-in @file{.c.a} suffix rule.\n\nWe feel that it is cleaner for a rule without commands to always simply\nadd to the prerequisite list for the target.  The above example can be\neasily rewritten to get the desired behavior in GNU @code{make}:\n\n@example\n.c.a: ;\n@end example\n\n@item\nSome versions of @code{make} invoke the shell with the @samp{-e} flag,\nexcept under @samp{-k} (@pxref{Testing, ,Testing the Compilation of a\nProgram}).  The @samp{-e} flag tells the shell to exit as soon as any\nprogram it runs returns a nonzero status.  We feel it is cleaner to\nwrite each shell command line to stand on its own and not require this\nspecial treatment.\n@end itemize\n\n@comment The makefile standards are in a separate file that is also\n@comment included by standards.texi.\n@include make-stds.texi\n\n@node Quick Reference, Error Messages, Makefile Conventions, Top\n@appendix Quick Reference\n\nThis appendix summarizes the directives, text manipulation functions,\nand special variables which GNU @code{make} understands.\n@xref{Special Targets}, @ref{Catalogue of Rules, ,Catalogue of Implicit Rules},\nand @ref{Options Summary, ,Summary of Options},\nfor other summaries.\n\nHere is a summary of the directives GNU @code{make} recognizes:\n\n@table @code\n@item define @var{variable}\n@itemx endef\n\nDefine a multi-line, recursively-expanded variable.@*\n@xref{Sequences}.\n\n@item ifdef @var{variable}\n@itemx ifndef @var{variable}\n@itemx ifeq (@var{a},@var{b})\n@itemx ifeq \"@var{a}\" \"@var{b}\"\n@itemx ifeq '@var{a}' '@var{b}'\n@itemx ifneq (@var{a},@var{b})\n@itemx ifneq \"@var{a}\" \"@var{b}\"\n@itemx ifneq '@var{a}' '@var{b}'\n@itemx else\n@itemx endif\n\nConditionally evaluate part of the makefile.@*\n@xref{Conditionals}.\n\n@item include @var{file}\n@itemx -include @var{file}\n@itemx sinclude @var{file}\n\nInclude another makefile.@*\n@xref{Include, ,Including Other Makefiles}.\n\n@item override @var{variable} = @var{value}\n@itemx override @var{variable} := @var{value}\n@itemx override @var{variable} += @var{value}\n@itemx override @var{variable} ?= @var{value}\n@itemx override define @var{variable}\n@itemx endef\n\nDefine a variable, overriding any previous definition, even one from\nthe command line.@*\n@xref{Override Directive, ,The @code{override} Directive}.\n\n@item export\n\nTell @code{make} to export all variables to child processes by default.@*\n@xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}.\n\n@item export @var{variable}\n@itemx export @var{variable} = @var{value}\n@itemx export @var{variable} := @var{value}\n@itemx export @var{variable} += @var{value}\n@itemx export @var{variable} ?= @var{value}\n@itemx unexport @var{variable}\nTell @code{make} whether or not to export a particular variable to child\nprocesses.@*\n@xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}.\n\n@item vpath @var{pattern} @var{path}\nSpecify a search path for files matching a @samp{%} pattern.@*\n@xref{Selective Search, , The @code{vpath} Directive}.\n\n@item vpath @var{pattern}\nRemove all search paths previously specified for @var{pattern}.\n\n@item vpath\nRemove all search paths previously specified in any @code{vpath}\ndirective.\n@end table\n\nHere is a summary of the built-in functions (@pxref{Functions}):\n\n@table @code\n@item $(subst @var{from},@var{to},@var{text})\nReplace @var{from} with @var{to} in @var{text}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(patsubst @var{pattern},@var{replacement},@var{text})\nReplace words matching @var{pattern} with @var{replacement} in @var{text}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(strip @var{string})\nRemove excess whitespace characters from @var{string}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(findstring @var{find},@var{text})\nLocate @var{find} in @var{text}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(filter @var{pattern}@dots{},@var{text})\nSelect words in @var{text} that match one of the @var{pattern} words.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(filter-out @var{pattern}@dots{},@var{text})\nSelect words in @var{text} that @emph{do not} match any of the @var{pattern} words.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(sort @var{list})\nSort the words in @var{list} lexicographically, removing duplicates.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(word @var{n},@var{text})\nExtract the @var{n}th word (one-origin) of @var{text}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(words @var{text})\nCount the number of words in @var{text}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(wordlist @var{s},@var{e},@var{text})\nReturns the list of words in @var{text} from @var{s} to @var{e}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(firstword @var{names}@dots{})\nExtract the first word of @var{names}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(lastword @var{names}@dots{})\nExtract the last word of @var{names}.@*\n@xref{Text Functions, , Functions for String Substitution and Analysis}.\n\n@item $(dir @var{names}@dots{})\nExtract the directory part of each file name.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(notdir @var{names}@dots{})\nExtract the non-directory part of each file name.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(suffix @var{names}@dots{})\nExtract the suffix (the last @samp{.} and following characters) of each file name.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(basename @var{names}@dots{})\nExtract the base name (name without suffix) of each file name.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(addsuffix @var{suffix},@var{names}@dots{})\nAppend @var{suffix} to each word in @var{names}.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(addprefix @var{prefix},@var{names}@dots{})\nPrepend @var{prefix} to each word in @var{names}.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(join @var{list1},@var{list2})\nJoin two parallel lists of words.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(wildcard @var{pattern}@dots{})\nFind file names matching a shell file name pattern (@emph{not} a\n@samp{%} pattern).@*\n@xref{Wildcard Function, ,The Function @code{wildcard}}.\n\n@item $(realpath @var{names}@dots{})\nFor each file name in @var{names}, expand to an absolute name that\ndoes not contain any @code{.}, @code{..}, nor symlinks.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(abspath @var{names}@dots{})\nFor each file name in @var{names}, expand to an absolute name that\ndoes not contain any @code{.} or @code{..} components, but preserves\nsymlinks.@*\n@xref{File Name Functions, ,Functions for File Names}.\n\n@item $(error @var{text}@dots{})\n\nWhen this function is evaluated, @code{make} generates a fatal error\nwith the message @var{text}.@*\n@xref{Make Control Functions, ,Functions That Control Make}.\n\n@item $(warning @var{text}@dots{})\n\nWhen this function is evaluated, @code{make} generates a warning with\nthe message @var{text}.@*\n@xref{Make Control Functions, ,Functions That Control Make}.\n\n@item $(shell @var{command})\n\nExecute a shell command and return its output.@*\n@xref{Shell Function, , The @code{shell} Function}.\n\n@item $(origin @var{variable})\n\nReturn a string describing how the @code{make} variable @var{variable} was\ndefined.@*\n@xref{Origin Function, , The @code{origin} Function}.\n\n@item $(flavor @var{variable})\n\nReturn a string describing the flavor of the @code{make} variable\n@var{variable}.@*\n@xref{Flavor Function, , The @code{flavor} Function}.\n\n@item $(foreach @var{var},@var{words},@var{text})\n\nEvaluate @var{text} with @var{var} bound to each word in @var{words},\nand concatenate the results.@*\n@xref{Foreach Function, ,The @code{foreach} Function}.\n\n@item $(call @var{var},@var{param},@dots{})\n\nEvaluate the variable @var{var} replacing any references to @code{$(1)},\n@code{$(2)} with the first, second, etc.@: @var{param} values.@*\n@xref{Call Function, ,The @code{call} Function}.\n\n@item $(eval @var{text})\n\nEvaluate @var{text} then read the results as makefile commands.\nExpands to the empty string.@*\n@xref{Eval Function, ,The @code{eval} Function}.\n\n@item $(value @var{var})\n\nEvaluates to the contents of the variable @var{var}, with no expansion\nperformed on it.@*\n@xref{Value Function, ,The @code{value} Function}.\n@end table\n\nHere is a summary of the automatic variables.\n@xref{Automatic Variables},\nfor full information.\n\n@table @code\n@item $@@\nThe file name of the target.\n\n@item $%\nThe target member name, when the target is an archive member.\n\n@item $<\nThe name of the first prerequisite.\n\n@item $?\nThe names of all the prerequisites that are\nnewer than the target, with spaces between them.\nFor prerequisites which are archive members, only\nthe member named is used (@pxref{Archives}).\n\n@item $^\n@itemx $+\nThe names of all the prerequisites, with spaces between them.  For\nprerequisites which are archive members, only the member named is used\n(@pxref{Archives}).  The value of @code{$^} omits duplicate\nprerequisites, while @code{$+} retains them and preserves their order.\n\n@item $*\nThe stem with which an implicit rule matches\n(@pxref{Pattern Match, ,How Patterns Match}).\n\n@item $(@@D)\n@itemx $(@@F)\nThe directory part and the file-within-directory part of @code{$@@}.\n\n@item $(*D)\n@itemx $(*F)\nThe directory part and the file-within-directory part of @code{$*}.\n\n@item $(%D)\n@itemx $(%F)\nThe directory part and the file-within-directory part of @code{$%}.\n\n@item $(<D)\n@itemx $(<F)\nThe directory part and the file-within-directory part of @code{$<}.\n\n@item $(^D)\n@itemx $(^F)\nThe directory part and the file-within-directory part of @code{$^}.\n\n@item $(+D)\n@itemx $(+F)\nThe directory part and the file-within-directory part of @code{$+}.\n\n@item $(?D)\n@itemx $(?F)\nThe directory part and the file-within-directory part of @code{$?}.\n@end table\n\nThese variables are used specially by GNU @code{make}:\n\n@table @code\n@item MAKEFILES\n\nMakefiles to be read on every invocation of @code{make}.@*\n@xref{MAKEFILES Variable, ,The Variable @code{MAKEFILES}}.\n\n@item VPATH\n\nDirectory search path for files not found in the current directory.@*\n@xref{General Search, , @code{VPATH} Search Path for All Prerequisites}.\n\n@item SHELL\n\nThe name of the system default command interpreter, usually @file{/bin/sh}.\nYou can set @code{SHELL} in the makefile to change the shell used to run\ncommands.  @xref{Execution, ,Command Execution}.  The @code{SHELL}\nvariable is handled specially when importing from and exporting to the\nenvironment.  @xref{Choosing the Shell}.\n\n@item MAKESHELL\n\nOn MS-DOS only, the name of the command interpreter that is to be used\nby @code{make}.  This value takes precedence over the value of\n@code{SHELL}.  @xref{Execution, ,MAKESHELL variable}.\n\n@item MAKE\n\nThe name with which @code{make} was invoked.\nUsing this variable in commands has special meaning.\n@xref{MAKE Variable, ,How the @code{MAKE} Variable Works}.\n\n@item MAKELEVEL\n\nThe number of levels of recursion (sub-@code{make}s).@*\n@xref{Variables/Recursion}.\n\n@item MAKEFLAGS\n\nThe flags given to @code{make}.  You can set this in the environment or\na makefile to set flags.@*\n@xref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}.\n\nIt is @emph{never} appropriate to use @code{MAKEFLAGS} directly on a\ncommand line: its contents may not be quoted correctly for use in the\nshell.  Always allow recursive @code{make}'s to obtain these values\nthrough the environment from its parent.\n\n@item MAKECMDGOALS\n\nThe targets given to @code{make} on the command line.  Setting this\nvariable has no effect on the operation of @code{make}.@*\n@xref{Goals, ,Arguments to Specify the Goals}.\n\n@item CURDIR\n\nSet to the pathname of the current working directory (after all\n@code{-C} options are processed, if any).  Setting this variable has no\neffect on the operation of @code{make}.@*\n@xref{Recursion, ,Recursive Use of @code{make}}.\n\n@item SUFFIXES\n\nThe default list of suffixes before @code{make} reads any makefiles.\n\n@item .LIBPATTERNS\nDefines the naming of the libraries @code{make} searches for, and their\norder.@*\n@xref{Libraries/Search, ,Directory Search for Link Libraries}.\n@end table\n\n@node Error Messages, Complex Makefile, Quick Reference, Top\n@comment  node-name,  next,  previous,  up\n@appendix Errors Generated by Make\n\nHere is a list of the more common errors you might see generated by\n@code{make}, and some information about what they mean and how to fix\nthem.\n\nSometimes @code{make} errors are not fatal, especially in the presence\nof a @code{-} prefix on a command script line, or the @code{-k} command\nline option.  Errors that are fatal are prefixed with the string\n@code{***}.\n\nError messages are all either prefixed with the name of the program\n(usually @samp{make}), or, if the error is found in a makefile, the name\nof the file and linenumber containing the problem.\n\nIn the table below, these common prefixes are left off.\n\n@table @samp\n\n@item [@var{foo}] Error @var{NN}\n@itemx [@var{foo}] @var{signal description}\nThese errors are not really @code{make} errors at all.  They mean that a\nprogram that @code{make} invoked as part of a command script returned a\nnon-0 error code (@samp{Error @var{NN}}), which @code{make} interprets\nas failure, or it exited in some other abnormal fashion (with a\nsignal of some type).  @xref{Errors, ,Errors in Commands}.\n\nIf no @code{***} is attached to the message, then the subprocess failed\nbut the rule in the makefile was prefixed with the @code{-} special\ncharacter, so @code{make} ignored the error.\n\n@item missing separator.  Stop.\n@itemx missing separator (did you mean TAB instead of 8 spaces?).  Stop.\nThis means that @code{make} could not understand much of anything about\nthe command line it just read.  GNU @code{make} looks for various kinds\nof separators (@code{:}, @code{=}, TAB characters, etc.) to help it\ndecide what kind of commandline it's seeing.  This means it couldn't\nfind a valid one.\n\nOne of the most common reasons for this message is that you (or perhaps\nyour oh-so-helpful editor, as is the case with many MS-Windows editors)\nhave attempted to indent your command scripts with spaces instead of a\nTAB character.  In this case, @code{make} will use the second form of\nthe error above.  Remember that every line in the command script must\nbegin with a TAB character.  Eight spaces do not count.  @xref{Rule\nSyntax}.\n\n@item commands commence before first target.  Stop.\n@itemx missing rule before commands.  Stop.\nThis means the first thing in the makefile seems to be part of a command\nscript: it begins with a TAB character and doesn't appear to be a legal\n@code{make} command (such as a variable assignment).  Command scripts\nmust always be associated with a target.\n\nThe second form is generated if the line has a semicolon as the first\nnon-whitespace character; @code{make} interprets this to mean you left\nout the \"target: prerequisite\" section of a rule.  @xref{Rule Syntax}.\n\n@item No rule to make target `@var{xxx}'.\n@itemx No rule to make target `@var{xxx}', needed by `@var{yyy}'.\nThis means that @code{make} decided it needed to build a target, but\nthen couldn't find any instructions in the makefile on how to do that,\neither explicit or implicit (including in the default rules database).\n\nIf you want that file to be built, you will need to add a rule to your\nmakefile describing how that target can be built.  Other possible\nsources of this problem are typos in the makefile (if that filename is\nwrong) or a corrupted source tree (if that file is not supposed to be\nbuilt, but rather only a prerequisite).\n\n@item No targets specified and no makefile found.  Stop.\n@itemx No targets.  Stop.\nThe former means that you didn't provide any targets to be built on the\ncommand line, and @code{make} couldn't find any makefiles to read in.\nThe latter means that some makefile was found, but it didn't contain any\ndefault goal and none was given on the command line.  GNU @code{make}\nhas nothing to do in these situations.\n@xref{Makefile Arguments, ,Arguments to Specify the Makefile}.@refill\n\n@item Makefile `@var{xxx}' was not found.\n@itemx Included makefile `@var{xxx}' was not found.\nA makefile specified on the command line (first form) or included\n(second form) was not found.\n\n@item warning: overriding commands for target `@var{xxx}'\n@itemx warning: ignoring old commands for target `@var{xxx}'\nGNU @code{make} allows commands to be specified only once per target\n(except for double-colon rules).  If you give commands for a target\nwhich already has been defined to have commands, this warning is issued\nand the second set of commands will overwrite the first set.\n@xref{Multiple Rules, ,Multiple Rules for One Target}.\n\n@item Circular @var{xxx} <- @var{yyy} dependency dropped.\nThis means that @code{make} detected a loop in the dependency graph:\nafter tracing the prerequisite @var{yyy} of target @var{xxx}, and its\nprerequisites, etc., one of them depended on @var{xxx} again.\n\n@item Recursive variable `@var{xxx}' references itself (eventually).  Stop.\nThis means you've defined a normal (recursive) @code{make} variable\n@var{xxx} that, when it's expanded, will refer to itself (@var{xxx}).\nThis is not allowed; either use simply-expanded variables (@code{:=}) or\nuse the append operator (@code{+=}).  @xref{Using Variables, ,How to Use\nVariables}.\n\n@item Unterminated variable reference.  Stop.\nThis means you forgot to provide the proper closing parenthesis\nor brace in your variable or function reference.\n\n@item insufficient arguments to function `@var{xxx}'.  Stop.\nThis means you haven't provided the requisite number of arguments for\nthis function.  See the documentation of the function for a description\nof its arguments.  @xref{Functions, ,Functions for Transforming Text}.\n\n@item missing target pattern.  Stop.\n@itemx multiple target patterns.  Stop.\n@itemx target pattern contains no `%'.  Stop.\n@itemx mixed implicit and static pattern rules.  Stop.\nThese are generated for malformed static pattern rules.  The first means\nthere's no pattern in the target section of the rule; the second means\nthere are multiple patterns in the target section; the third means\nthe target doesn't contain a pattern character (@code{%}); and the\nfourth means that all three parts of the static pattern rule contain\npattern characters (@code{%})--only the first two parts should.\n@xref{Static Usage, ,Syntax of Static Pattern Rules}.\n\n@item warning: -jN forced in submake: disabling jobserver mode.\nThis warning and the next are generated if @code{make} detects error\nconditions related to parallel processing on systems where\nsub-@code{make}s can communicate (@pxref{Options/Recursion,\n,Communicating Options to a Sub-@code{make}}).  This warning is\ngenerated if a recursive invocation of a @code{make} process is forced\nto have @samp{-j@var{N}} in its argument list (where @var{N} is greater\nthan one).  This could happen, for example, if you set the @code{MAKE}\nenvironment variable to @samp{make -j2}.  In this case, the\nsub-@code{make} doesn't communicate with other @code{make} processes and\nwill simply pretend it has two jobs of its own.\n\n@item warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\nIn order for @code{make} processes to communicate, the parent will pass\ninformation to the child.  Since this could result in problems if the\nchild process isn't actually a @code{make}, the parent will only do this\nif it thinks the child is a @code{make}.  The parent uses the normal\nalgorithms to determine this (@pxref{MAKE Variable, ,How the @code{MAKE}\nVariable Works}).  If the makefile is constructed such that the parent\ndoesn't know the child is a @code{make} process, then the child will\nreceive only part of the information necessary.  In this case, the child\nwill generate this warning message and proceed with its build in a\nsequential manner.\n\n@end table\n\n@node Complex Makefile, GNU Free Documentation License, Error Messages, Top\n@appendix Complex Makefile Example\n\nHere is the makefile for the GNU @code{tar} program.  This is a\nmoderately complex makefile.\n\nBecause it is the first target, the default goal is @samp{all}.  An\ninteresting feature of this makefile is that @file{testpad.h} is a\nsource file automatically created by the @code{testpad} program,\nitself compiled from @file{testpad.c}.\n\nIf you type @samp{make} or @samp{make all}, then @code{make} creates\nthe @file{tar} executable, the @file{rmt} daemon that provides\nremote tape access, and the @file{tar.info} Info file.\n\nIf you type @samp{make install}, then @code{make} not only creates\n@file{tar}, @file{rmt}, and @file{tar.info}, but also installs\nthem.\n\nIf you type @samp{make clean}, then @code{make} removes the @samp{.o}\nfiles, and the @file{tar}, @file{rmt}, @file{testpad},\n@file{testpad.h}, and @file{core} files.\n\nIf you type @samp{make distclean}, then @code{make} not only removes\nthe same files as does @samp{make clean} but also the\n@file{TAGS}, @file{Makefile}, and @file{config.status} files.\n(Although it is not evident, this makefile (and\n@file{config.status}) is generated by the user with the\n@code{configure} program, which is provided in the @code{tar}\ndistribution, but is not shown here.)\n\nIf you type @samp{make realclean}, then @code{make} removes the same\nfiles as does @samp{make distclean} and also removes the Info files\ngenerated from @file{tar.texinfo}.\n\nIn addition, there are targets @code{shar} and @code{dist} that create\ndistribution kits.\n\n@example\n@group\n# Generated automatically from Makefile.in by configure.\n# Un*x Makefile for GNU tar program.\n# Copyright (C) 1991 Free Software Foundation, Inc.\n@end group\n\n@group\n# This program is free software; you can redistribute\n# it and/or modify it under the terms of the GNU\n# General Public License @dots{}\n@dots{}\n@dots{}\n@end group\n\nSHELL = /bin/sh\n\n#### Start of system configuration section. ####\n\nsrcdir = .\n\n@group\n# If you use gcc, you should either run the\n# fixincludes script that comes with it or else use\n# gcc with the -traditional option.  Otherwise ioctl\n# calls will be compiled incorrectly on some systems.\nCC = gcc -O\nYACC = bison -y\nINSTALL = /usr/local/bin/install -c\nINSTALLDATA = /usr/local/bin/install -c -m 644\n@end group\n\n# Things you might add to DEFS:\n# -DSTDC_HEADERS        If you have ANSI C headers and\n#                       libraries.\n# -DPOSIX               If you have POSIX.1 headers and\n#                       libraries.\n# -DBSD42               If you have sys/dir.h (unless\n#                       you use -DPOSIX), sys/file.h,\n#                       and st_blocks in `struct stat'.\n# -DUSG                 If you have System V/ANSI C\n#                       string and memory functions\n#                       and headers, sys/sysmacros.h,\n#                       fcntl.h, getcwd, no valloc,\n#                       and ndir.h (unless\n#                       you use -DDIRENT).\n# -DNO_MEMORY_H         If USG or STDC_HEADERS but do not\n#                       include memory.h.\n# -DDIRENT              If USG and you have dirent.h\n#                       instead of ndir.h.\n# -DSIGTYPE=int         If your signal handlers\n#                       return int, not void.\n# -DNO_MTIO             If you lack sys/mtio.h\n#                       (magtape ioctls).\n# -DNO_REMOTE           If you do not have a remote shell\n#                       or rexec.\n# -DUSE_REXEC           To use rexec for remote tape\n#                       operations instead of\n#                       forking rsh or remsh.\n# -DVPRINTF_MISSING     If you lack vprintf function\n#                       (but have _doprnt).\n# -DDOPRNT_MISSING      If you lack _doprnt function.\n#                       Also need to define\n#                       -DVPRINTF_MISSING.\n# -DFTIME_MISSING       If you lack ftime system call.\n# -DSTRSTR_MISSING      If you lack strstr function.\n# -DVALLOC_MISSING      If you lack valloc function.\n# -DMKDIR_MISSING       If you lack mkdir and\n#                       rmdir system calls.\n# -DRENAME_MISSING      If you lack rename system call.\n# -DFTRUNCATE_MISSING   If you lack ftruncate\n#                       system call.\n# -DV7                  On Version 7 Unix (not\n#                       tested in a long time).\n# -DEMUL_OPEN3          If you lack a 3-argument version\n#                       of open, and want to emulate it\n#                       with system calls you do have.\n# -DNO_OPEN3            If you lack the 3-argument open\n#                       and want to disable the tar -k\n#                       option instead of emulating open.\n# -DXENIX               If you have sys/inode.h\n#                       and need it 94 to be included.\n\nDEFS =  -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \\\n        -DVPRINTF_MISSING -DBSD42\n# Set this to rtapelib.o unless you defined NO_REMOTE,\n# in which case make it empty.\nRTAPELIB = rtapelib.o\nLIBS =\nDEF_AR_FILE = /dev/rmt8\nDEFBLOCKING = 20\n\n@group\nCDEBUG = -g\nCFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \\\n        -DDEF_AR_FILE=\\\"$(DEF_AR_FILE)\\\" \\\n        -DDEFBLOCKING=$(DEFBLOCKING)\nLDFLAGS = -g\n@end group\n\n@group\nprefix = /usr/local\n# Prefix for each installed program,\n# normally empty or `g'.\nbinprefix =\n\n# The directory to install tar in.\nbindir = $(prefix)/bin\n\n# The directory to install the info files in.\ninfodir = $(prefix)/info\n@end group\n\n#### End of system configuration section. ####\n\nSRC1 =  tar.c create.c extract.c buffer.c \\\n        getoldopt.c update.c gnu.c mangle.c\nSRC2 =  version.c list.c names.c diffarch.c \\\n        port.c wildmat.c getopt.c\nSRC3 =  getopt1.c regex.c getdate.y\nSRCS =  $(SRC1) $(SRC2) $(SRC3)\nOBJ1 =  tar.o create.o extract.o buffer.o \\\n        getoldopt.o update.o gnu.o mangle.o\nOBJ2 =  version.o list.o names.o diffarch.o \\\n        port.o wildmat.o getopt.o\nOBJ3 =  getopt1.o regex.o getdate.o $(RTAPELIB)\nOBJS =  $(OBJ1) $(OBJ2) $(OBJ3)\n@group\nAUX =   README COPYING ChangeLog Makefile.in  \\\n        makefile.pc configure configure.in \\\n        tar.texinfo tar.info* texinfo.tex \\\n        tar.h port.h open3.h getopt.h regex.h \\\n        rmt.h rmt.c rtapelib.c alloca.c \\\n        msd_dir.h msd_dir.c tcexparg.c \\\n        level-0 level-1 backup-specs testpad.c\n@end group\n\n.PHONY: all\nall:    tar rmt tar.info\n\n@group\n.PHONY: tar\ntar:    $(OBJS)\n        $(CC) $(LDFLAGS) -o $@@ $(OBJS) $(LIBS)\n@end group\n\n@group\nrmt:    rmt.c\n        $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ rmt.c\n@end group\n\n@group\ntar.info: tar.texinfo\n        makeinfo tar.texinfo\n@end group\n\n@group\n.PHONY: install\ninstall: all\n        $(INSTALL) tar $(bindir)/$(binprefix)tar\n        -test ! -f rmt || $(INSTALL) rmt /etc/rmt\n        $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)\n@end group\n\n@group\n$(OBJS): tar.h port.h testpad.h\nregex.o buffer.o tar.o: regex.h\n# getdate.y has 8 shift/reduce conflicts.\n@end group\n\n@group\ntestpad.h: testpad\n        ./testpad\n@end group\n\n@group\ntestpad: testpad.o\n        $(CC) -o $@@ testpad.o\n@end group\n\n@group\nTAGS:   $(SRCS)\n        etags $(SRCS)\n@end group\n\n@group\n.PHONY: clean\nclean:\n        rm -f *.o tar rmt testpad testpad.h core\n@end group\n\n@group\n.PHONY: distclean\ndistclean: clean\n        rm -f TAGS Makefile config.status\n@end group\n\n@group\n.PHONY: realclean\nrealclean: distclean\n        rm -f tar.info*\n@end group\n\n@group\n.PHONY: shar\nshar: $(SRCS) $(AUX)\n        shar $(SRCS) $(AUX) | compress \\\n          > tar-`sed -e '/version_string/!d' \\\n                     -e 's/[^0-9.]*\\([0-9.]*\\).*/\\1/' \\\n                     -e q\n                     version.c`.shar.Z\n@end group\n\n@group\n.PHONY: dist\ndist: $(SRCS) $(AUX)\n        echo tar-`sed \\\n             -e '/version_string/!d' \\\n             -e 's/[^0-9.]*\\([0-9.]*\\).*/\\1/' \\\n             -e q\n             version.c` > .fname\n        -rm -rf `cat .fname`\n        mkdir `cat .fname`\n        ln $(SRCS) $(AUX) `cat .fname`\n        tar chZf `cat .fname`.tar.Z `cat .fname`\n        -rm -rf `cat .fname` .fname\n@end group\n\n@group\ntar.zoo: $(SRCS) $(AUX)\n        -rm -rf tmp.dir\n        -mkdir tmp.dir\n        -rm tar.zoo\n        for X in $(SRCS) $(AUX) ; do \\\n            echo $$X ; \\\n            sed 's/$$/^M/' $$X \\\n            > tmp.dir/$$X ; done\n        cd tmp.dir ; zoo aM ../tar.zoo *\n        -rm -rf tmp.dir\n@end group\n@end example\n\n@raisesections\n@include fdl.texi\n@lowersections\n\n@node Concept Index, Name Index, GNU Free Documentation License, Top\n@unnumbered Index of Concepts\n\n@printindex cp\n\n@node Name Index,  , Concept Index, Top\n@unnumbered Index of Functions, Variables, & Directives\n\n@printindex fn\n\n@bye\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/stamp-vti",
    "content": "@set UPDATED 13 October 2011\n@set UPDATED-MONTH October 2011\n@set EDITION 3.81\n@set VERSION 3.81\n"
  },
  {
    "path": "sources/host-tools/make-3.81/doc/version.texi",
    "content": "@set UPDATED 13 October 2011\n@set UPDATED-MONTH October 2011\n@set EDITION 3.81\n@set VERSION 3.81\n"
  },
  {
    "path": "sources/host-tools/make-3.81/dosbuild.bat",
    "content": "@echo off\r\nrem Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free\r\nrem Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under the\r\nrem terms of the GNU General Public License as published by the Free Software\r\nrem Foundation; either version 2, or (at your option) any later version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nrem WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nrem A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along with\r\nrem GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n\r\necho Building Make for MSDOS\r\n\r\nrem Echo ON so they will see what is going on.\r\n@echo on\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g commands.c -o commands.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g job.c -o job.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g dir.c -o dir.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g file.c -o file.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g misc.c -o misc.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g main.c -o main.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -DINCLUDEDIR=\\\"c:/djgpp/include\\\" -O2 -g read.c -o read.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -DLIBDIR=\\\"c:/djgpp/lib\\\" -O2 -g remake.c -o remake.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g rule.c -o rule.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g implicit.c -o implicit.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g default.c -o default.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g variable.c -o variable.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g expand.c -o expand.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g function.c -o function.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g vpath.c -o vpath.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g hash.c -o hash.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g strcache.c -o strcache.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g version.c -o version.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g ar.c -o ar.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g arscan.c -o arscan.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g signame.c -o signame.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g remote-stub.c -o remote-stub.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt.c -o getopt.o\r\ngcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt1.c -o getopt1.o\r\n@cd glob\r\n@if exist libglob.a del libglob.a\r\ngcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g glob.c -o glob.o\r\ngcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g fnmatch.c -o fnmatch.o\r\nar rv libglob.a glob.o fnmatch.o\r\n@echo off\r\ncd ..\r\necho commands.o > respf.$$$\r\nfor %%f in (job dir file misc main read remake rule implicit default variable) do echo %%f.o >> respf.$$$\r\nfor %%f in (expand function vpath hash strcache version ar arscan signame remote-stub getopt getopt1) do echo %%f.o >> respf.$$$\r\necho glob/libglob.a >> respf.$$$\r\n@echo Linking...\r\n@echo on\r\ngcc -o make.new @respf.$$$\r\n@if exist make.exe echo Make.exe is now built!\r\n@if not exist make.exe echo Make.exe build failed...\r\n@if exist make.exe del respf.$$$\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/expand.c",
    "content": "/* Variable expansion functions for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"rule.h\"\n\n/* Initially, any errors reported when expanding strings will be reported\n   against the file where the error appears.  */\nconst struct floc **expanding_var = &reading_file;\n\n/* The next two describe the variable output buffer.\n   This buffer is used to hold the variable-expansion of a line of the\n   makefile.  It is made bigger with realloc whenever it is too small.\n   variable_buffer_length is the size currently allocated.\n   variable_buffer is the address of the buffer.\n\n   For efficiency, it's guaranteed that the buffer will always have\n   VARIABLE_BUFFER_ZONE extra bytes allocated.  This allows you to add a few\n   extra chars without having to call a function.  Note you should never use\n   these bytes unless you're _sure_ you have room (you know when the buffer\n   length was last checked.  */\n\n#define VARIABLE_BUFFER_ZONE    5\n\nstatic unsigned int variable_buffer_length;\nchar *variable_buffer;\n\n/* Subroutine of variable_expand and friends:\n   The text to add is LENGTH chars starting at STRING to the variable_buffer.\n   The text is added to the buffer at PTR, and the updated pointer into\n   the buffer is returned as the value.  Thus, the value returned by\n   each call to variable_buffer_output should be the first argument to\n   the following call.  */\n\nchar *\nvariable_buffer_output (char *ptr, char *string, unsigned int length)\n{\n  register unsigned int newlen = length + (ptr - variable_buffer);\n\n  if ((newlen + VARIABLE_BUFFER_ZONE) > variable_buffer_length)\n    {\n      unsigned int offset = ptr - variable_buffer;\n      variable_buffer_length = (newlen + 100 > 2 * variable_buffer_length\n\t\t\t\t? newlen + 100\n\t\t\t\t: 2 * variable_buffer_length);\n      variable_buffer = (char *) xrealloc (variable_buffer,\n\t\t\t\t\t   variable_buffer_length);\n      ptr = variable_buffer + offset;\n    }\n\n  bcopy (string, ptr, length);\n  return ptr + length;\n}\n\n/* Return a pointer to the beginning of the variable buffer.  */\n\nstatic char *\ninitialize_variable_output (void)\n{\n  /* If we don't have a variable output buffer yet, get one.  */\n\n  if (variable_buffer == 0)\n    {\n      variable_buffer_length = 200;\n      variable_buffer = (char *) xmalloc (variable_buffer_length);\n      variable_buffer[0] = '\\0';\n    }\n\n  return variable_buffer;\n}\n\f\n/* Recursively expand V.  The returned string is malloc'd.  */\n\nstatic char *allocated_variable_append PARAMS ((const struct variable *v));\n\nchar *\nrecursively_expand_for_file (struct variable *v, struct file *file)\n{\n  char *value;\n  const struct floc *this_var;\n  const struct floc **saved_varp;\n  struct variable_set_list *save = 0;\n  int set_reading = 0;\n\n  /* Don't install a new location if this location is empty.\n     This can happen for command-line variables, builtin variables, etc.  */\n  saved_varp = expanding_var;\n  if (v->fileinfo.filenm)\n    {\n      this_var = &v->fileinfo;\n      expanding_var = &this_var;\n    }\n\n  /* If we have no other file-reading context, use the variable's context. */\n  if (!reading_file)\n    {\n      set_reading = 1;\n      reading_file = &v->fileinfo;\n    }\n\n  if (v->expanding)\n    {\n      if (!v->exp_count)\n        /* Expanding V causes infinite recursion.  Lose.  */\n        fatal (*expanding_var,\n               _(\"Recursive variable `%s' references itself (eventually)\"),\n               v->name);\n      --v->exp_count;\n    }\n\n  if (file)\n    {\n      save = current_variable_set_list;\n      current_variable_set_list = file->variables;\n    }\n\n  v->expanding = 1;\n  if (v->append)\n    value = allocated_variable_append (v);\n  else\n    value = allocated_variable_expand (v->value);\n  v->expanding = 0;\n\n  if (set_reading)\n    reading_file = 0;\n\n  if (file)\n    current_variable_set_list = save;\n\n  expanding_var = saved_varp;\n\n  return value;\n}\n\n/* Expand a simple reference to variable NAME, which is LENGTH chars long.  */\n\n#ifdef __GNUC__\n__inline\n#endif\nstatic char *\nreference_variable (char *o, char *name, unsigned int length)\n{\n  register struct variable *v;\n  char *value;\n\n  v = lookup_variable (name, length);\n\n  if (v == 0)\n    warn_undefined (name, length);\n\n  /* If there's no variable by that name or it has no value, stop now.  */\n  if (v == 0 || (*v->value == '\\0' && !v->append))\n    return o;\n\n  value = (v->recursive ? recursively_expand (v) : v->value);\n\n  o = variable_buffer_output (o, value, strlen (value));\n\n  if (v->recursive)\n    free (value);\n\n  return o;\n}\n\f\n/* Scan STRING for variable references and expansion-function calls.  Only\n   LENGTH bytes of STRING are actually scanned.  If LENGTH is -1, scan until\n   a null byte is found.\n\n   Write the results to LINE, which must point into `variable_buffer'.  If\n   LINE is NULL, start at the beginning of the buffer.\n   Return a pointer to LINE, or to the beginning of the buffer if LINE is\n   NULL.  */\n\nchar *\nvariable_expand_string (char *line, char *string, long length)\n{\n  register struct variable *v;\n  register char *p, *o, *p1;\n  char save_char = '\\0';\n  unsigned int line_offset;\n\n  if (!line)\n    line = initialize_variable_output();\n\n  p = string;\n  o = line;\n  line_offset = line - variable_buffer;\n\n  if (length >= 0)\n    {\n      save_char = string[length];\n      string[length] = '\\0';\n    }\n\n  while (1)\n    {\n      /* Copy all following uninteresting chars all at once to the\n         variable output buffer, and skip them.  Uninteresting chars end\n\t at the next $ or the end of the input.  */\n\n      p1 = strchr (p, '$');\n\n      o = variable_buffer_output (o, p, p1 != 0 ? (unsigned int)(p1 - p) : strlen (p) + 1);\n\n      if (p1 == 0)\n\tbreak;\n      p = p1 + 1;\n\n      /* Dispatch on the char that follows the $.  */\n\n      switch (*p)\n\t{\n\tcase '$':\n\t  /* $$ seen means output one $ to the variable output buffer.  */\n\t  o = variable_buffer_output (o, p, 1);\n\t  break;\n\n\tcase '(':\n\tcase '{':\n\t  /* $(...) or ${...} is the general case of substitution.  */\n\t  {\n\t    char openparen = *p;\n\t    char closeparen = (openparen == '(') ? ')' : '}';\n\t    register char *beg = p + 1;\n\t    int free_beg = 0;\n\t    char *op, *begp;\n\t    char *end, *colon;\n\n\t    op = o;\n\t    begp = p;\n\t    if (handle_function (&op, &begp))\n\t      {\n\t\to = op;\n\t\tp = begp;\n\t\tbreak;\n\t      }\n\n\t    /* Is there a variable reference inside the parens or braces?\n\t       If so, expand it before expanding the entire reference.  */\n\n\t    end = strchr (beg, closeparen);\n\t    if (end == 0)\n              /* Unterminated variable reference.  */\n              fatal (*expanding_var, _(\"unterminated variable reference\"));\n\t    p1 = lindex (beg, end, '$');\n\t    if (p1 != 0)\n\t      {\n\t\t/* BEG now points past the opening paren or brace.\n\t\t   Count parens or braces until it is matched.  */\n\t\tint count = 0;\n\t\tfor (p = beg; *p != '\\0'; ++p)\n\t\t  {\n\t\t    if (*p == openparen)\n\t\t      ++count;\n\t\t    else if (*p == closeparen && --count < 0)\n\t\t      break;\n\t\t  }\n\t\t/* If COUNT is >= 0, there were unmatched opening parens\n\t\t   or braces, so we go to the simple case of a variable name\n\t\t   such as `$($(a)'.  */\n\t\tif (count < 0)\n\t\t  {\n\t\t    beg = expand_argument (beg, p); /* Expand the name.  */\n\t\t    free_beg = 1; /* Remember to free BEG when finished.  */\n\t\t    end = strchr (beg, '\\0');\n\t\t  }\n\t      }\n\t    else\n\t      /* Advance P to the end of this reference.  After we are\n                 finished expanding this one, P will be incremented to\n                 continue the scan.  */\n\t      p = end;\n\n\t    /* This is not a reference to a built-in function and\n\t       any variable references inside are now expanded.\n\t       Is the resultant text a substitution reference?  */\n\n\t    colon = lindex (beg, end, ':');\n\t    if (colon)\n\t      {\n\t\t/* This looks like a substitution reference: $(FOO:A=B).  */\n\t\tchar *subst_beg, *subst_end, *replace_beg, *replace_end;\n\n\t\tsubst_beg = colon + 1;\n\t\tsubst_end = lindex (subst_beg, end, '=');\n\t\tif (subst_end == 0)\n\t\t  /* There is no = in sight.  Punt on the substitution\n\t\t     reference and treat this as a variable name containing\n\t\t     a colon, in the code below.  */\n\t\t  colon = 0;\n\t\telse\n\t\t  {\n\t\t    replace_beg = subst_end + 1;\n\t\t    replace_end = end;\n\n\t\t    /* Extract the variable name before the colon\n\t\t       and look up that variable.  */\n\t\t    v = lookup_variable (beg, colon - beg);\n\t\t    if (v == 0)\n\t\t      warn_undefined (beg, colon - beg);\n\n                    /* If the variable is not empty, perform the\n                       substitution.  */\n\t\t    if (v != 0 && *v->value != '\\0')\n\t\t      {\n\t\t\tchar *pattern, *replace, *ppercent, *rpercent;\n\t\t\tchar *value = (v->recursive\n                                       ? recursively_expand (v)\n\t\t\t\t       : v->value);\n\n                        /* Copy the pattern and the replacement.  Add in an\n                           extra % at the beginning to use in case there\n                           isn't one in the pattern.  */\n                        pattern = (char *) alloca (subst_end - subst_beg + 2);\n                        *(pattern++) = '%';\n                        bcopy (subst_beg, pattern, subst_end - subst_beg);\n                        pattern[subst_end - subst_beg] = '\\0';\n\n                        replace = (char *) alloca (replace_end\n                                                   - replace_beg + 2);\n                        *(replace++) = '%';\n                        bcopy (replace_beg, replace,\n                               replace_end - replace_beg);\n                        replace[replace_end - replace_beg] = '\\0';\n\n                        /* Look for %.  Set the percent pointers properly\n                           based on whether we find one or not.  */\n\t\t\tppercent = find_percent (pattern);\n\t\t\tif (ppercent)\n                          {\n                            ++ppercent;\n                            rpercent = 0;\n                          }\n\t\t\telse\n                          {\n                            ppercent = pattern;\n                            rpercent = replace;\n                            --pattern;\n                            --replace;\n                          }\n\n                        o = patsubst_expand (o, value, pattern, replace,\n                                             ppercent, rpercent);\n\n\t\t\tif (v->recursive)\n\t\t\t  free (value);\n\t\t      }\n\t\t  }\n\t      }\n\n\t    if (colon == 0)\n\t      /* This is an ordinary variable reference.\n\t\t Look up the value of the variable.  */\n\t\to = reference_variable (o, beg, end - beg);\n\n\t  if (free_beg)\n\t    free (beg);\n\t  }\n\t  break;\n\n\tcase '\\0':\n\t  break;\n\n\tdefault:\n\t  if (isblank ((unsigned char)p[-1]))\n\t    break;\n\n\t  /* A $ followed by a random char is a variable reference:\n\t     $a is equivalent to $(a).  */\n          o = reference_variable (o, p, 1);\n\n\t  break;\n\t}\n\n      if (*p == '\\0')\n\tbreak;\n      else\n\t++p;\n    }\n\n  if (save_char)\n    string[length] = save_char;\n\n  (void)variable_buffer_output (o, \"\", 1);\n  return (variable_buffer + line_offset);\n}\n\f\n/* Scan LINE for variable references and expansion-function calls.\n   Build in `variable_buffer' the result of expanding the references and calls.\n   Return the address of the resulting string, which is null-terminated\n   and is valid only until the next time this function is called.  */\n\nchar *\nvariable_expand (char *line)\n{\n  return variable_expand_string(NULL, line, (long)-1);\n}\n\f\n/* Expand an argument for an expansion function.\n   The text starting at STR and ending at END is variable-expanded\n   into a null-terminated string that is returned as the value.\n   This is done without clobbering `variable_buffer' or the current\n   variable-expansion that is in progress.  */\n\nchar *\nexpand_argument (const char *str, const char *end)\n{\n  char *tmp;\n\n  if (str == end)\n    return xstrdup(\"\");\n\n  if (!end || *end == '\\0')\n    return allocated_variable_expand ((char *)str);\n\n  tmp = (char *) alloca (end - str + 1);\n  bcopy (str, tmp, end - str);\n  tmp[end - str] = '\\0';\n\n  return allocated_variable_expand (tmp);\n}\n\f\n/* Expand LINE for FILE.  Error messages refer to the file and line where\n   FILE's commands were found.  Expansion uses FILE's variable set list.  */\n\nchar *\nvariable_expand_for_file (char *line, struct file *file)\n{\n  char *result;\n  struct variable_set_list *save;\n\n  if (file == 0)\n    return variable_expand (line);\n\n  save = current_variable_set_list;\n  current_variable_set_list = file->variables;\n  if (file->cmds && file->cmds->fileinfo.filenm)\n    reading_file = &file->cmds->fileinfo;\n  else\n    reading_file = 0;\n  result = variable_expand (line);\n  current_variable_set_list = save;\n  reading_file = 0;\n\n  return result;\n}\n\f\n/* Like allocated_variable_expand, but for += target-specific variables.\n   First recursively construct the variable value from its appended parts in\n   any upper variable sets.  Then expand the resulting value.  */\n\nstatic char *\nvariable_append (const char *name, unsigned int length,\n                 const struct variable_set_list *set)\n{\n  const struct variable *v;\n  char *buf = 0;\n\n  /* If there's nothing left to check, return the empty buffer.  */\n  if (!set)\n    return initialize_variable_output ();\n\n  /* Try to find the variable in this variable set.  */\n  v = lookup_variable_in_set (name, length, set->set);\n\n  /* If there isn't one, look to see if there's one in a set above us.  */\n  if (!v)\n    return variable_append (name, length, set->next);\n\n  /* If this variable type is append, first get any upper values.\n     If not, initialize the buffer.  */\n  if (v->append)\n    buf = variable_append (name, length, set->next);\n  else\n    buf = initialize_variable_output ();\n\n  /* Append this value to the buffer, and return it.\n     If we already have a value, first add a space.  */\n  if (buf > variable_buffer)\n    buf = variable_buffer_output (buf, \" \", 1);\n\n  /* Either expand it or copy it, depending.  */\n  if (! v->recursive)\n    return variable_buffer_output (buf, v->value, strlen (v->value));\n\n  buf = variable_expand_string (buf, v->value, strlen (v->value));\n  return (buf + strlen (buf));\n}\n\n\nstatic char *\nallocated_variable_append (const struct variable *v)\n{\n  char *val;\n\n  /* Construct the appended variable value.  */\n\n  char *obuf = variable_buffer;\n  unsigned int olen = variable_buffer_length;\n\n  variable_buffer = 0;\n\n  val = variable_append (v->name, strlen (v->name), current_variable_set_list);\n  variable_buffer_output (val, \"\", 1);\n  val = variable_buffer;\n\n  variable_buffer = obuf;\n  variable_buffer_length = olen;\n\n  return val;\n}\n\n/* Like variable_expand_for_file, but the returned string is malloc'd.\n   This function is called a lot.  It wants to be efficient.  */\n\nchar *\nallocated_variable_expand_for_file (char *line, struct file *file)\n{\n  char *value;\n\n  char *obuf = variable_buffer;\n  unsigned int olen = variable_buffer_length;\n\n  variable_buffer = 0;\n\n  value = variable_expand_for_file (line, file);\n\n#if 0\n  /* Waste a little memory and save time.  */\n  value = xrealloc (value, strlen (value))\n#endif\n\n  variable_buffer = obuf;\n  variable_buffer_length = olen;\n\n  return value;\n}\n\n/* Install a new variable_buffer context, returning the current one for\n   safe-keeping.  */\n\nvoid\ninstall_variable_buffer (char **bufp, unsigned int *lenp)\n{\n  *bufp = variable_buffer;\n  *lenp = variable_buffer_length;\n\n  variable_buffer = 0;\n  initialize_variable_output ();\n}\n\n/* Restore a previously-saved variable_buffer setting (free the current one).\n */\n\nvoid\nrestore_variable_buffer (char *buf, unsigned int len)\n{\n  free (variable_buffer);\n\n  variable_buffer = buf;\n  variable_buffer_length = len;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/file.c",
    "content": "/* Target file management for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"debug.h\"\n#include \"hash.h\"\n\n\n/* Remember whether snap_deps has been invoked: we need this to be sure we\n   don't add new rules (via $(eval ...)) afterwards.  In the future it would\n   be nice to support this, but it means we'd need to re-run snap_deps() or\n   at least its functionality... it might mean changing snap_deps() to be run\n   per-file, so we can invoke it after the eval... or remembering which files\n   in the hash have been snapped (a new boolean flag?) and having snap_deps()\n   only work on files which have not yet been snapped. */\nint snapped_deps = 0;\n\n/* Hash table of files the makefile knows how to make.  */\n\nstatic unsigned long\nfile_hash_1 (const void *key)\n{\n  return_ISTRING_HASH_1 (((struct file const *) key)->hname);\n}\n\nstatic unsigned long\nfile_hash_2 (const void *key)\n{\n  return_ISTRING_HASH_2 (((struct file const *) key)->hname);\n}\n\nstatic int\nfile_hash_cmp (const void *x, const void *y)\n{\n  return_ISTRING_COMPARE (((struct file const *) x)->hname,\n\t\t\t  ((struct file const *) y)->hname);\n}\n\n#ifndef\tFILE_BUCKETS\n#define FILE_BUCKETS\t1007\n#endif\nstatic struct hash_table files;\n\n/* Whether or not .SECONDARY with no prerequisites was given.  */\nstatic int all_secondary = 0;\n\n/* Access the hash table of all file records.\n   lookup_file  given a name, return the struct file * for that name,\n           or nil if there is none.\n   enter_file   similar, but create one if there is none.  */\n\nstruct file *\nlookup_file (char *name)\n{\n  register struct file *f;\n  struct file file_key;\n#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)\n  register char *lname, *ln;\n#endif\n\n  assert (*name != '\\0');\n\n  /* This is also done in parse_file_seq, so this is redundant\n     for names read from makefiles.  It is here for names passed\n     on the command line.  */\n#ifdef VMS\n# ifndef WANT_CASE_SENSITIVE_TARGETS\n  if (*name != '.')\n    {\n      register char *n;\n      lname = (char *) malloc (strlen (name) + 1);\n      for (n = name, ln = lname; *n != '\\0'; ++n, ++ln)\n        *ln = isupper ((unsigned char)*n) ? tolower ((unsigned char)*n) : *n;\n      *ln = '\\0';\n      name = lname;\n    }\n# endif\n\n  while (name[0] == '[' && name[1] == ']' && name[2] != '\\0')\n      name += 2;\n#endif\n  while (name[0] == '.' && name[1] == '/' && name[2] != '\\0')\n    {\n      name += 2;\n      while (*name == '/')\n\t/* Skip following slashes: \".//foo\" is \"foo\", not \"/foo\".  */\n\t++name;\n    }\n\n  if (*name == '\\0')\n    /* It was all slashes after a dot.  */\n#ifdef VMS\n    name = \"[]\";\n#else\n#ifdef _AMIGA\n    name = \"\";\n#else\n    name = \"./\";\n#endif /* AMIGA */\n#endif /* VMS */\n\n  file_key.hname = name;\n  f = (struct file *) hash_find_item (&files, &file_key);\n#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)\n  if (*name != '.')\n    free (lname);\n#endif\n  return f;\n}\n\nstruct file *\nenter_file (char *name)\n{\n  register struct file *f;\n  register struct file *new;\n  register struct file **file_slot;\n  struct file file_key;\n#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)\n  char *lname, *ln;\n#endif\n\n  assert (*name != '\\0');\n\n#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)\n  if (*name != '.')\n    {\n      register char *n;\n      lname = (char *) malloc (strlen (name) + 1);\n      for (n = name, ln = lname; *n != '\\0'; ++n, ++ln)\n        {\n          if (isupper ((unsigned char)*n))\n            *ln = tolower ((unsigned char)*n);\n          else\n            *ln = *n;\n        }\n\n      *ln = 0;\n      /* Creates a possible leak, old value of name is unreachable, but I\n         currently don't know how to fix it. */\n      name = lname;\n    }\n#endif\n\n  file_key.hname = name;\n  file_slot = (struct file **) hash_find_slot (&files, &file_key);\n  f = *file_slot;\n  if (! HASH_VACANT (f) && !f->double_colon)\n    {\n#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)\n      if (*name != '.')\n        free (lname);\n#endif\n      return f;\n    }\n\n  new = (struct file *) xmalloc (sizeof (struct file));\n  bzero ((char *) new, sizeof (struct file));\n  new->name = new->hname = name;\n  new->update_status = -1;\n\n  if (HASH_VACANT (f))\n    {\n      new->last = new;\n      hash_insert_at (&files, new, file_slot);\n    }\n  else\n    {\n      /* There is already a double-colon entry for this file.  */\n      new->double_colon = f;\n      f->last->prev = new;\n      f->last = new;\n    }\n\n  return new;\n}\n\f\n/* Rename FILE to NAME.  This is not as simple as resetting\n   the `name' member, since it must be put in a new hash bucket,\n   and possibly merged with an existing file called NAME.  */\n\nvoid\nrename_file (struct file *from_file, char *to_hname)\n{\n  rehash_file (from_file, to_hname);\n  while (from_file)\n    {\n      from_file->name = from_file->hname;\n      from_file = from_file->prev;\n    }\n}\n\n/* Rehash FILE to NAME.  This is not as simple as resetting\n   the `hname' member, since it must be put in a new hash bucket,\n   and possibly merged with an existing file called NAME.  */\n\nvoid\nrehash_file (struct file *from_file, char *to_hname)\n{\n  struct file file_key;\n  struct file **file_slot;\n  struct file *to_file;\n  struct file *deleted_file;\n  struct file *f;\n\n  file_key.hname = to_hname;\n  if (0 == file_hash_cmp (from_file, &file_key))\n    return;\n\n  file_key.hname = from_file->hname;\n  while (from_file->renamed != 0)\n    from_file = from_file->renamed;\n  if (file_hash_cmp (from_file, &file_key))\n    /* hname changed unexpectedly */\n    abort ();\n\n  deleted_file = hash_delete (&files, from_file);\n  if (deleted_file != from_file)\n    /* from_file isn't the one stored in files */\n    abort ();\n\n  file_key.hname = to_hname;\n  file_slot = (struct file **) hash_find_slot (&files, &file_key);\n  to_file = *file_slot;\n\n  from_file->hname = to_hname;\n  for (f = from_file->double_colon; f != 0; f = f->prev)\n    f->hname = to_hname;\n\n  if (HASH_VACANT (to_file))\n    hash_insert_at (&files, from_file, file_slot);\n  else\n    {\n      /* TO_FILE already exists under TO_HNAME.\n\t We must retain TO_FILE and merge FROM_FILE into it.  */\n\n      if (from_file->cmds != 0)\n\t{\n\t  if (to_file->cmds == 0)\n\t    to_file->cmds = from_file->cmds;\n\t  else if (from_file->cmds != to_file->cmds)\n\t    {\n\t      /* We have two sets of commands.  We will go with the\n\t\t one given in the rule explicitly mentioning this name,\n\t\t but give a message to let the user know what's going on.  */\n\t      if (to_file->cmds->fileinfo.filenm != 0)\n                error (&from_file->cmds->fileinfo,\n\t\t       _(\"Commands were specified for file `%s' at %s:%lu,\"),\n\t\t       from_file->name, to_file->cmds->fileinfo.filenm,\n\t\t       to_file->cmds->fileinfo.lineno);\n\t      else\n\t\terror (&from_file->cmds->fileinfo,\n\t\t       _(\"Commands for file `%s' were found by implicit rule search,\"),\n\t\t       from_file->name);\n\t      error (&from_file->cmds->fileinfo,\n\t\t     _(\"but `%s' is now considered the same file as `%s'.\"),\n\t\t     from_file->name, to_hname);\n\t      error (&from_file->cmds->fileinfo,\n\t\t     _(\"Commands for `%s' will be ignored in favor of those for `%s'.\"),\n\t\t     to_hname, from_file->name);\n\t    }\n\t}\n\n      /* Merge the dependencies of the two files.  */\n\n      if (to_file->deps == 0)\n\tto_file->deps = from_file->deps;\n      else\n\t{\n\t  register struct dep *deps = to_file->deps;\n\t  while (deps->next != 0)\n\t    deps = deps->next;\n\t  deps->next = from_file->deps;\n\t}\n\n      merge_variable_set_lists (&to_file->variables, from_file->variables);\n\n      if (to_file->double_colon && from_file->is_target && !from_file->double_colon)\n\tfatal (NILF, _(\"can't rename single-colon `%s' to double-colon `%s'\"),\n\t       from_file->name, to_hname);\n      if (!to_file->double_colon  && from_file->double_colon)\n\t{\n\t  if (to_file->is_target)\n\t    fatal (NILF, _(\"can't rename double-colon `%s' to single-colon `%s'\"),\n\t\t   from_file->name, to_hname);\n\t  else\n\t    to_file->double_colon = from_file->double_colon;\n\t}\n\n      if (from_file->last_mtime > to_file->last_mtime)\n\t/* %%% Kludge so -W wins on a file that gets vpathized.  */\n\tto_file->last_mtime = from_file->last_mtime;\n\n      to_file->mtime_before_update = from_file->mtime_before_update;\n\n#define MERGE(field) to_file->field |= from_file->field\n      MERGE (precious);\n      MERGE (tried_implicit);\n      MERGE (updating);\n      MERGE (updated);\n      MERGE (is_target);\n      MERGE (cmd_target);\n      MERGE (phony);\n      MERGE (ignore_vpath);\n#undef MERGE\n\n      from_file->renamed = to_file;\n    }\n}\n\f\n/* Remove all nonprecious intermediate files.\n   If SIG is nonzero, this was caused by a fatal signal,\n   meaning that a different message will be printed, and\n   the message will go to stderr rather than stdout.  */\n\nvoid\nremove_intermediates (int sig)\n{\n  register struct file **file_slot;\n  register struct file **file_end;\n  int doneany = 0;\n\n  /* If there's no way we will ever remove anything anyway, punt early.  */\n  if (question_flag || touch_flag || all_secondary)\n    return;\n\n  if (sig && just_print_flag)\n    return;\n\n  file_slot = (struct file **) files.ht_vec;\n  file_end = file_slot + files.ht_size;\n  for ( ; file_slot < file_end; file_slot++)\n    if (! HASH_VACANT (*file_slot))\n      {\n\tregister struct file *f = *file_slot;\n        /* Is this file eligible for automatic deletion?\n           Yes, IFF: it's marked intermediate, it's not secondary, it wasn't\n           given on the command-line, and it's either a -include makefile or\n           it's not precious.  */\n\tif (f->intermediate && (f->dontcare || !f->precious)\n\t    && !f->secondary && !f->cmd_target)\n\t  {\n\t    int status;\n\t    if (f->update_status == -1)\n\t      /* If nothing would have created this file yet,\n\t\t don't print an \"rm\" command for it.  */\n\t      continue;\n\t    if (just_print_flag)\n\t      status = 0;\n\t    else\n\t      {\n\t\tstatus = unlink (f->name);\n\t\tif (status < 0 && errno == ENOENT)\n\t\t  continue;\n\t      }\n\t    if (!f->dontcare)\n\t      {\n\t\tif (sig)\n\t\t  error (NILF, _(\"*** Deleting intermediate file `%s'\"), f->name);\n\t\telse\n\t\t  {\n\t\t    if (! doneany)\n\t\t      DB (DB_BASIC, (_(\"Removing intermediate files...\\n\")));\n\t\t    if (!silent_flag)\n\t\t      {\n\t\t\tif (! doneany)\n\t\t\t  {\n\t\t\t    fputs (\"rm \", stdout);\n\t\t\t    doneany = 1;\n\t\t\t  }\n\t\t\telse\n\t\t\t  putchar (' ');\n\t\t\tfputs (f->name, stdout);\n\t\t\tfflush (stdout);\n\t\t      }\n\t\t  }\n\t\tif (status < 0)\n\t\t  perror_with_name (\"unlink: \", f->name);\n\t      }\n\t  }\n      }\n\n  if (doneany && !sig)\n    {\n      putchar ('\\n');\n      fflush (stdout);\n    }\n}\n\f\nstruct dep *\nparse_prereqs (char *p)\n{\n  struct dep *new = (struct dep *)\n    multi_glob (parse_file_seq (&p, '|', sizeof (struct dep), 1),\n                sizeof (struct dep));\n\n  if (*p)\n    {\n      /* Files that follow '|' are \"order-only\" prerequisites that satisfy the\n         dependency by existing: their modification times are irrelevant.  */\n      struct dep *ood;\n\n      ++p;\n      ood = (struct dep *)\n        multi_glob (parse_file_seq (&p, '\\0', sizeof (struct dep), 1),\n                    sizeof (struct dep));\n\n      if (! new)\n        new = ood;\n      else\n        {\n          struct dep *dp;\n          for (dp = new; dp->next != NULL; dp = dp->next)\n            ;\n          dp->next = ood;\n        }\n\n      for (; ood != NULL; ood = ood->next)\n        ood->ignore_mtime = 1;\n    }\n\n  return new;\n}\n\n\n/* Set the intermediate flag.  */\n\nstatic void\nset_intermediate (const void *item)\n{\n  struct file *f = (struct file *) item;\n  f->intermediate = 1;\n}\n\n/* Expand and parse each dependency line. */\nstatic void\nexpand_deps (struct file *f)\n{\n  struct dep *d;\n  struct dep *old = f->deps;\n  char *file_stem = f->stem;\n  unsigned int last_dep_has_cmds = f->updating;\n  int initialized = 0;\n\n  f->updating = 0;\n  f->deps = 0;\n\n  for (d = old; d != 0; d = d->next)\n    {\n      struct dep *new, *d1;\n      char *p;\n\n      if (! d->name)\n        continue;\n\n      /* Create the dependency list.\n         If we're not doing 2nd expansion, then it's just the name.  */\n      if (! d->need_2nd_expansion)\n        p = d->name;\n      else\n        {\n          /* If it's from a static pattern rule, convert the patterns into\n             \"$*\" so they'll expand properly.  */\n          if (d->staticpattern)\n            {\n              char *o;\n              char *buffer = variable_expand (\"\");\n\n              o = subst_expand (buffer, d->name, \"%\", \"$*\", 1, 2, 0);\n\n              free (d->name);\n              d->name = savestring (buffer, o - buffer);\n              d->staticpattern = 0; /* Clear staticpattern so that we don't\n                                       re-expand %s below. */\n            }\n\n          /* We are going to do second expansion so initialize file variables\n             for the file. Since the stem for static pattern rules comes from\n             individual dep lines, we will temporarily set f->stem to d->stem.\n          */\n          if (!initialized)\n            {\n              initialize_file_variables (f, 0);\n              initialized = 1;\n            }\n\n          if (d->stem != 0)\n            f->stem = d->stem;\n\n          set_file_variables (f);\n\n          p = variable_expand_for_file (d->name, f);\n\n          if (d->stem != 0)\n            f->stem = file_stem;\n        }\n\n      /* Parse the prerequisites.  */\n      new = parse_prereqs (p);\n\n      /* If this dep list was from a static pattern rule, expand the %s.  We\n         use patsubst_expand to translate the prerequisites' patterns into\n         plain prerequisite names.  */\n      if (new && d->staticpattern)\n        {\n          char *pattern = \"%\";\n          char *buffer = variable_expand (\"\");\n          struct dep *dp = new, *dl = 0;\n\n          while (dp != 0)\n            {\n              char *percent = find_percent (dp->name);\n              if (percent)\n                {\n                  /* We have to handle empty stems specially, because that\n                     would be equivalent to $(patsubst %,dp->name,) which\n                     will always be empty.  */\n                  if (d->stem[0] == '\\0')\n                    /* This needs memmove() in ISO C.  */\n                    bcopy (percent+1, percent, strlen (percent));\n                  else\n                    {\n                      char *o = patsubst_expand (buffer, d->stem, pattern,\n                                                 dp->name, pattern+1,\n                                                 percent+1);\n                      if (o == buffer)\n                        dp->name[0] = '\\0';\n                      else\n                        {\n                          free (dp->name);\n                          dp->name = savestring (buffer, o - buffer);\n                        }\n                    }\n\n                  /* If the name expanded to the empty string, ignore it.  */\n                  if (dp->name[0] == '\\0')\n                    {\n                      struct dep *df = dp;\n                      if (dp == new)\n                        dp = new = new->next;\n                      else\n                        dp = dl->next = dp->next;\n                      /* @@ Are we leaking df->name here?  */\n                      df->name = 0;\n                      free_dep (df);\n                      continue;\n                    }\n                }\n              dl = dp;\n              dp = dp->next;\n            }\n        }\n\n      /* Enter them as files. */\n      for (d1 = new; d1 != 0; d1 = d1->next)\n        {\n          d1->file = lookup_file (d1->name);\n          if (d1->file == 0)\n            d1->file = enter_file (d1->name);\n          else\n            free (d1->name);\n          d1->name = 0;\n          d1->staticpattern = 0;\n          d1->need_2nd_expansion = 0;\n        }\n\n      /* Add newly parsed deps to f->deps. If this is the last dependency\n         line and this target has commands then put it in front so the\n         last dependency line (the one with commands) ends up being the\n         first. This is important because people expect $< to hold first\n         prerequisite from the rule with commands. If it is not the last\n         dependency line or the rule does not have commands then link it\n         at the end so it appears in makefile order.  */\n\n      if (new != 0)\n        {\n          if (d->next == 0 && last_dep_has_cmds)\n            {\n              struct dep **d_ptr;\n              for (d_ptr = &new; *d_ptr; d_ptr = &(*d_ptr)->next)\n                ;\n\n              *d_ptr = f->deps;\n              f->deps = new;\n            }\n          else\n            {\n              struct dep **d_ptr;\n              for (d_ptr = &f->deps; *d_ptr; d_ptr = &(*d_ptr)->next)\n                ;\n\n              *d_ptr = new;\n            }\n        }\n    }\n\n  free_dep_chain (old);\n}\n\n/* For each dependency of each file, make the `struct dep' point\n   at the appropriate `struct file' (which may have to be created).\n\n   Also mark the files depended on by .PRECIOUS, .PHONY, .SILENT,\n   and various other special targets.  */\n\nvoid\nsnap_deps (void)\n{\n  struct file *f;\n  struct file *f2;\n  struct dep *d;\n  struct file **file_slot_0;\n  struct file **file_slot;\n  struct file **file_end;\n\n  /* Perform second expansion and enter each dependency\n     name as a file. */\n\n  /* Expand .SUFFIXES first; it's dependencies are used for\n     $$* calculation. */\n  for (f = lookup_file (\".SUFFIXES\"); f != 0; f = f->prev)\n    expand_deps (f);\n\n  /* We must use hash_dump (), because within this loop\n     we might add new files to the table, possibly causing\n     an in-situ table expansion.  */\n  file_slot_0 = (struct file **) hash_dump (&files, 0, 0);\n  file_end = file_slot_0 + files.ht_fill;\n  for (file_slot = file_slot_0; file_slot < file_end; file_slot++)\n    for (f = *file_slot; f != 0; f = f->prev)\n      {\n        if (strcmp (f->name, \".SUFFIXES\") != 0)\n          expand_deps (f);\n      }\n  free (file_slot_0);\n\n  for (f = lookup_file (\".PRECIOUS\"); f != 0; f = f->prev)\n    for (d = f->deps; d != 0; d = d->next)\n      for (f2 = d->file; f2 != 0; f2 = f2->prev)\n\tf2->precious = 1;\n\n  for (f = lookup_file (\".LOW_RESOLUTION_TIME\"); f != 0; f = f->prev)\n    for (d = f->deps; d != 0; d = d->next)\n      for (f2 = d->file; f2 != 0; f2 = f2->prev)\n\tf2->low_resolution_time = 1;\n\n  for (f = lookup_file (\".PHONY\"); f != 0; f = f->prev)\n    for (d = f->deps; d != 0; d = d->next)\n      for (f2 = d->file; f2 != 0; f2 = f2->prev)\n\t{\n\t  /* Mark this file as phony nonexistent target.  */\n\t  f2->phony = 1;\n          f2->is_target = 1;\n\t  f2->last_mtime = NONEXISTENT_MTIME;\n\t  f2->mtime_before_update = NONEXISTENT_MTIME;\n\t}\n\n  for (f = lookup_file (\".INTERMEDIATE\"); f != 0; f = f->prev)\n    {\n      /* .INTERMEDIATE with deps listed\n\t marks those deps as intermediate files.  */\n      for (d = f->deps; d != 0; d = d->next)\n\tfor (f2 = d->file; f2 != 0; f2 = f2->prev)\n\t  f2->intermediate = 1;\n      /* .INTERMEDIATE with no deps does nothing.\n\t Marking all files as intermediates is useless\n\t since the goal targets would be deleted after they are built.  */\n    }\n\n  for (f = lookup_file (\".SECONDARY\"); f != 0; f = f->prev)\n    {\n      /* .SECONDARY with deps listed\n\t marks those deps as intermediate files\n\t in that they don't get rebuilt if not actually needed;\n\t but unlike real intermediate files,\n\t these are not deleted after make finishes.  */\n      if (f->deps)\n        for (d = f->deps; d != 0; d = d->next)\n          for (f2 = d->file; f2 != 0; f2 = f2->prev)\n            f2->intermediate = f2->secondary = 1;\n      /* .SECONDARY with no deps listed marks *all* files that way.  */\n      else\n        {\n          all_secondary = 1;\n          hash_map (&files, set_intermediate);\n        }\n    }\n\n  f = lookup_file (\".EXPORT_ALL_VARIABLES\");\n  if (f != 0 && f->is_target)\n    export_all_variables = 1;\n\n  f = lookup_file (\".IGNORE\");\n  if (f != 0 && f->is_target)\n    {\n      if (f->deps == 0)\n\tignore_errors_flag = 1;\n      else\n\tfor (d = f->deps; d != 0; d = d->next)\n\t  for (f2 = d->file; f2 != 0; f2 = f2->prev)\n\t    f2->command_flags |= COMMANDS_NOERROR;\n    }\n\n  f = lookup_file (\".SILENT\");\n  if (f != 0 && f->is_target)\n    {\n      if (f->deps == 0)\n\tsilent_flag = 1;\n      else\n\tfor (d = f->deps; d != 0; d = d->next)\n\t  for (f2 = d->file; f2 != 0; f2 = f2->prev)\n\t    f2->command_flags |= COMMANDS_SILENT;\n    }\n\n  f = lookup_file (\".NOTPARALLEL\");\n  if (f != 0 && f->is_target)\n    not_parallel = 1;\n\n#ifndef NO_MINUS_C_MINUS_O\n  /* If .POSIX was defined, remove OUTPUT_OPTION to comply.  */\n  /* This needs more work: what if the user sets this in the makefile?\n  if (posix_pedantic)\n    define_variable (STRING_SIZE_TUPLE(\"OUTPUT_OPTION\"), \"\", o_default, 1);\n  */\n#endif\n\n  /* Remember that we've done this. */\n  snapped_deps = 1;\n}\n\f\n/* Set the `command_state' member of FILE and all its `also_make's.  */\n\nvoid\nset_command_state (struct file *file, enum cmd_state state)\n{\n  struct dep *d;\n\n  file->command_state = state;\n\n  for (d = file->also_make; d != 0; d = d->next)\n    d->file->command_state = state;\n}\n\f\n/* Convert an external file timestamp to internal form.  */\n\nFILE_TIMESTAMP\nfile_timestamp_cons (const char *fname, time_t s, int ns)\n{\n  int offset = ORDINARY_MTIME_MIN + (FILE_TIMESTAMP_HI_RES ? ns : 0);\n  FILE_TIMESTAMP product = (FILE_TIMESTAMP) s << FILE_TIMESTAMP_LO_BITS;\n  FILE_TIMESTAMP ts = product + offset;\n\n  if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX)\n\t && product <= ts && ts <= ORDINARY_MTIME_MAX))\n    {\n      char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1];\n      ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX;\n      file_timestamp_sprintf (buf, ts);\n      error (NILF, _(\"%s: Timestamp out of range; substituting %s\"),\n\t     fname ? fname : _(\"Current time\"), buf);\n    }\n\n  return ts;\n}\n\f\n/* Return the current time as a file timestamp, setting *RESOLUTION to\n   its resolution.  */\nFILE_TIMESTAMP\nfile_timestamp_now (int *resolution)\n{\n  int r;\n  time_t s;\n  int ns;\n\n  /* Don't bother with high-resolution clocks if file timestamps have\n     only one-second resolution.  The code below should work, but it's\n     not worth the hassle of debugging it on hosts where it fails.  */\n#if FILE_TIMESTAMP_HI_RES\n# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME\n  {\n    struct timespec timespec;\n    if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)\n      {\n\tr = 1;\n\ts = timespec.tv_sec;\n\tns = timespec.tv_nsec;\n\tgoto got_time;\n      }\n  }\n# endif\n# if HAVE_GETTIMEOFDAY\n  {\n    struct timeval timeval;\n    if (gettimeofday (&timeval, 0) == 0)\n      {\n\tr = 1000;\n\ts = timeval.tv_sec;\n\tns = timeval.tv_usec * 1000;\n\tgoto got_time;\n      }\n  }\n# endif\n#endif\n\n  r = 1000000000;\n  s = time ((time_t *) 0);\n  ns = 0;\n\n#if FILE_TIMESTAMP_HI_RES\n got_time:\n#endif\n  *resolution = r;\n  return file_timestamp_cons (0, s, ns);\n}\n\n/* Place into the buffer P a printable representation of the file\n   timestamp TS.  */\nvoid\nfile_timestamp_sprintf (char *p, FILE_TIMESTAMP ts)\n{\n  time_t t = FILE_TIMESTAMP_S (ts);\n  struct tm *tm = localtime (&t);\n\n  if (tm)\n    sprintf (p, \"%04d-%02d-%02d %02d:%02d:%02d\",\n\t     tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,\n\t     tm->tm_hour, tm->tm_min, tm->tm_sec);\n  else if (t < 0)\n    sprintf (p, \"%ld\", (long) t);\n  else\n    sprintf (p, \"%lu\", (unsigned long) t);\n  p += strlen (p);\n\n  /* Append nanoseconds as a fraction, but remove trailing zeros.\n     We don't know the actual timestamp resolution, since clock_getres\n     applies only to local times, whereas this timestamp might come\n     from a remote filesystem.  So removing trailing zeros is the\n     best guess that we can do.  */\n  sprintf (p, \".%09d\", FILE_TIMESTAMP_NS (ts));\n  p += strlen (p) - 1;\n  while (*p == '0')\n    p--;\n  p += *p != '.';\n\n  *p = '\\0';\n}\n\f\n/* Print the data base of files.  */\n\nstatic void\nprint_file (const void *item)\n{\n  struct file *f = (struct file *) item;\n  struct dep *d;\n  struct dep *ood = 0;\n\n  putchar ('\\n');\n  if (!f->is_target)\n    puts (_(\"# Not a target:\"));\n  printf (\"%s:%s\", f->name, f->double_colon ? \":\" : \"\");\n\n  /* Print all normal dependencies; note any order-only deps.  */\n  for (d = f->deps; d != 0; d = d->next)\n    if (! d->ignore_mtime)\n      printf (\" %s\", dep_name (d));\n    else if (! ood)\n      ood = d;\n\n  /* Print order-only deps, if we have any.  */\n  if (ood)\n    {\n      printf (\" | %s\", dep_name (ood));\n      for (d = ood->next; d != 0; d = d->next)\n        if (d->ignore_mtime)\n          printf (\" %s\", dep_name (d));\n    }\n\n  putchar ('\\n');\n\n  if (f->precious)\n    puts (_(\"#  Precious file (prerequisite of .PRECIOUS).\"));\n  if (f->phony)\n    puts (_(\"#  Phony target (prerequisite of .PHONY).\"));\n  if (f->cmd_target)\n    puts (_(\"#  Command-line target.\"));\n  if (f->dontcare)\n    puts (_(\"#  A default, MAKEFILES, or -include/sinclude makefile.\"));\n  puts (f->tried_implicit\n        ? _(\"#  Implicit rule search has been done.\")\n        : _(\"#  Implicit rule search has not been done.\"));\n  if (f->stem != 0)\n    printf (_(\"#  Implicit/static pattern stem: `%s'\\n\"), f->stem);\n  if (f->intermediate)\n    puts (_(\"#  File is an intermediate prerequisite.\"));\n  if (f->also_make != 0)\n    {\n      fputs (_(\"#  Also makes:\"), stdout);\n      for (d = f->also_make; d != 0; d = d->next)\n\tprintf (\" %s\", dep_name (d));\n      putchar ('\\n');\n    }\n  if (f->last_mtime == UNKNOWN_MTIME)\n    puts (_(\"#  Modification time never checked.\"));\n  else if (f->last_mtime == NONEXISTENT_MTIME)\n    puts (_(\"#  File does not exist.\"));\n  else if (f->last_mtime == OLD_MTIME)\n    puts (_(\"#  File is very old.\"));\n  else\n    {\n      char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1];\n      file_timestamp_sprintf (buf, f->last_mtime);\n      printf (_(\"#  Last modified %s\\n\"), buf);\n    }\n  puts (f->updated\n        ? _(\"#  File has been updated.\") : _(\"#  File has not been updated.\"));\n  switch (f->command_state)\n    {\n    case cs_running:\n      puts (_(\"#  Commands currently running (THIS IS A BUG).\"));\n      break;\n    case cs_deps_running:\n      puts (_(\"#  Dependencies commands running (THIS IS A BUG).\"));\n      break;\n    case cs_not_started:\n    case cs_finished:\n      switch (f->update_status)\n\t{\n\tcase -1:\n\t  break;\n\tcase 0:\n\t  puts (_(\"#  Successfully updated.\"));\n\t  break;\n\tcase 1:\n\t  assert (question_flag);\n\t  puts (_(\"#  Needs to be updated (-q is set).\"));\n\t  break;\n\tcase 2:\n\t  puts (_(\"#  Failed to be updated.\"));\n\t  break;\n\tdefault:\n\t  puts (_(\"#  Invalid value in `update_status' member!\"));\n\t  fflush (stdout);\n\t  fflush (stderr);\n\t  abort ();\n\t}\n      break;\n    default:\n      puts (_(\"#  Invalid value in `command_state' member!\"));\n      fflush (stdout);\n      fflush (stderr);\n      abort ();\n    }\n\n  if (f->variables != 0)\n    print_file_variables (f);\n\n  if (f->cmds != 0)\n    print_commands (f->cmds);\n\n  if (f->prev)\n    print_file ((const void *) f->prev);\n}\n\nvoid\nprint_file_data_base (void)\n{\n  puts (_(\"\\n# Files\"));\n\n  hash_map (&files, print_file);\n\n  fputs (_(\"\\n# files hash-table stats:\\n# \"), stdout);\n  hash_print_stats (&files, stdout);\n}\n\n#define EXPANSION_INCREMENT(_l)  ((((_l) / 500) + 1) * 500)\n\nchar *\nbuild_target_list (char *value)\n{\n  static unsigned long last_targ_count = 0;\n\n  if (files.ht_fill != last_targ_count)\n    {\n      unsigned long max = EXPANSION_INCREMENT (strlen (value));\n      unsigned long len;\n      char *p;\n      struct file **fp = (struct file **) files.ht_vec;\n      struct file **end = &fp[files.ht_size];\n\n      /* Make sure we have at least MAX bytes in the allocated buffer.  */\n      value = xrealloc (value, max);\n\n      p = value;\n      len = 0;\n      for (; fp < end; ++fp)\n        if (!HASH_VACANT (*fp) && (*fp)->is_target)\n          {\n            struct file *f = *fp;\n            int l = strlen (f->name);\n\n            len += l + 1;\n            if (len > max)\n              {\n                unsigned long off = p - value;\n\n                max += EXPANSION_INCREMENT (l + 1);\n                value = xrealloc (value, max);\n                p = &value[off];\n              }\n\n            bcopy (f->name, p, l);\n            p += l;\n            *(p++) = ' ';\n          }\n      *(p-1) = '\\0';\n\n      last_targ_count = files.ht_fill;\n    }\n\n  return value;\n}\n\nvoid\ninit_hash_files (void)\n{\n  hash_init (&files, 1000, file_hash_1, file_hash_2, file_hash_cmp);\n}\n\n/* EOF */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/filedef.h",
    "content": "/* Definition of target file data structures for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n\n/* Structure that represents the info on one file\n   that the makefile says how to make.\n   All of these are chained together through `next'.  */\n\n#include \"hash.h\"\n\nstruct file\n  {\n    char *name;\n    char *hname;                /* Hashed filename */\n    char *vpath;                /* VPATH/vpath pathname */\n    struct dep *deps;\t\t/* all dependencies, including duplicates */\n    struct commands *cmds;\t/* Commands to execute for this target.  */\n    int command_flags;\t\t/* Flags OR'd in for cmds; see commands.h.  */\n    char *stem;\t\t\t/* Implicit stem, if an implicit\n    \t\t\t\t   rule has been used */\n    struct dep *also_make;\t/* Targets that are made by making this.  */\n    FILE_TIMESTAMP last_mtime;\t/* File's modtime, if already known.  */\n    FILE_TIMESTAMP mtime_before_update;\t/* File's modtime before any updating\n                                           has been performed.  */\n    struct file *prev;\t\t/* Previous entry for same file name;\n\t\t\t\t   used when there are multiple double-colon\n\t\t\t\t   entries for the same file.  */\n    struct file *last;          /* Last entry for the same file name.  */\n\n    /* File that this file was renamed to.  After any time that a\n       file could be renamed, call `check_renamed' (below).  */\n    struct file *renamed;\n\n    /* List of variable sets used for this file.  */\n    struct variable_set_list *variables;\n\n    /* Pattern-specific variable reference for this target, or null if there\n       isn't one.  Also see the pat_searched flag, below.  */\n    struct variable_set_list *pat_variables;\n\n    /* Immediate dependent that caused this target to be remade,\n       or nil if there isn't one.  */\n    struct file *parent;\n\n    /* For a double-colon entry, this is the first double-colon entry for\n       the same file.  Otherwise this is null.  */\n    struct file *double_colon;\n\n    short int update_status;\t/* Status of the last attempt to update,\n\t\t\t\t   or -1 if none has been made.  */\n\n    enum cmd_state\t\t/* State of the commands.  */\n      {\t\t/* Note: It is important that cs_not_started be zero.  */\n\tcs_not_started,\t\t/* Not yet started.  */\n\tcs_deps_running,\t/* Dep commands running.  */\n\tcs_running,\t\t/* Commands running.  */\n\tcs_finished\t\t/* Commands finished.  */\n      } command_state ENUM_BITFIELD (2);\n\n    unsigned int precious:1;\t/* Non-0 means don't delete file on quit */\n    unsigned int low_resolution_time:1;\t/* Nonzero if this file's time stamp\n\t\t\t\t\t   has only one-second resolution.  */\n    unsigned int tried_implicit:1; /* Nonzero if have searched\n\t\t\t\t      for implicit rule for making\n\t\t\t\t      this file; don't search again.  */\n    unsigned int updating:1;\t/* Nonzero while updating deps of this file */\n    unsigned int updated:1;\t/* Nonzero if this file has been remade.  */\n    unsigned int is_target:1;\t/* Nonzero if file is described as target.  */\n    unsigned int cmd_target:1;\t/* Nonzero if file was given on cmd line.  */\n    unsigned int phony:1;\t/* Nonzero if this is a phony file\n\t\t\t\t   i.e., a prerequisite of .PHONY.  */\n    unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */\n    unsigned int secondary:1;   /* Nonzero means remove_intermediates should\n                                   not delete it.  */\n    unsigned int dontcare:1;\t/* Nonzero if no complaint is to be made if\n\t\t\t\t   this target cannot be remade.  */\n    unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name.  */\n    unsigned int pat_searched:1;/* Nonzero if we already searched for\n                                   pattern-specific variables.  */\n    unsigned int considered:1;  /* equal to 'considered' if file has been\n                                   considered on current scan of goal chain */\n  };\n\n\nextern struct file *default_goal_file, *suffix_file, *default_file;\nextern char **default_goal_name;\n\n\nextern struct file *lookup_file PARAMS ((char *name));\nextern struct file *enter_file PARAMS ((char *name));\nextern struct dep *parse_prereqs PARAMS ((char *prereqs));\nextern void remove_intermediates PARAMS ((int sig));\nextern void snap_deps PARAMS ((void));\nextern void rename_file PARAMS ((struct file *file, char *name));\nextern void rehash_file PARAMS ((struct file *file, char *name));\nextern void set_command_state PARAMS ((struct file *file, enum cmd_state state));\nextern void notice_finished_file PARAMS ((struct file *file));\nextern void init_hash_files PARAMS ((void));\nextern char *build_target_list PARAMS ((char *old_list));\n\n#if FILE_TIMESTAMP_HI_RES\n# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \\\n    file_timestamp_cons (fname, (st).st_mtime, (st).st_mtim.ST_MTIM_NSEC)\n#else\n# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \\\n    file_timestamp_cons (fname, (st).st_mtime, 0)\n#endif\n\n/* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution.\n   (Multiply by 2**30 instead of by 10**9 to save time at the cost of\n   slightly decreasing the number of available timestamps.)  With\n   64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04\n   UTC, but by then uintmax_t should be larger than 64 bits.  */\n#define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1)\n#define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0)\n\n#define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \\\n\t\t\t      >> FILE_TIMESTAMP_LO_BITS)\n#define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \\\n\t\t\t\t      & ((1 << FILE_TIMESTAMP_LO_BITS) - 1)))\n\n/* Upper bound on length of string \"YYYY-MM-DD HH:MM:SS.NNNNNNNNN\"\n   representing a file timestamp.  The upper bound is not necessarily 19,\n   since the year might be less than -999 or greater than 9999.\n\n   Subtract one for the sign bit if in case file timestamps can be negative;\n   subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many\n   file timestamp bits might affect the year;\n   302 / 1000 is log10 (2) rounded up;\n   add one for integer division truncation;\n   add one more for a minus sign if file timestamps can be negative;\n   add 4 to allow for any 4-digit epoch year (e.g. 1970);\n   add 25 to allow for \"-MM-DD HH:MM:SS.NNNNNNNNN\".  */\n#define FLOOR_LOG2_SECONDS_PER_YEAR 24\n#define FILE_TIMESTAMP_PRINT_LEN_BOUND \\\n  (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \\\n    * 302 / 1000) \\\n   + 1 + 1 + 4 + 25)\n\nextern FILE_TIMESTAMP file_timestamp_cons PARAMS ((char const *,\n\t\t\t\t\t\t   time_t, int));\nextern FILE_TIMESTAMP file_timestamp_now PARAMS ((int *));\nextern void file_timestamp_sprintf PARAMS ((char *p, FILE_TIMESTAMP ts));\n\n/* Return the mtime of file F (a struct file *), caching it.\n   The value is NONEXISTENT_MTIME if the file does not exist.  */\n#define file_mtime(f) file_mtime_1 ((f), 1)\n/* Return the mtime of file F (a struct file *), caching it.\n   Don't search using vpath for the file--if it doesn't actually exist,\n   we don't find it.\n   The value is NONEXISTENT_MTIME if the file does not exist.  */\n#define file_mtime_no_search(f) file_mtime_1 ((f), 0)\nextern FILE_TIMESTAMP f_mtime PARAMS ((struct file *file, int search));\n#define file_mtime_1(f, v) \\\n  ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime)\n\n/* Special timestamp values.  */\n\n/* The file's timestamp is not yet known.  */\n#define UNKNOWN_MTIME 0\n\n/* The file does not exist.  */\n#define NONEXISTENT_MTIME 1\n\n/* The file does not exist, and we assume that it is older than any\n   actual file.  */\n#define OLD_MTIME 2\n\n/* The smallest and largest ordinary timestamps.  */\n#define ORDINARY_MTIME_MIN (OLD_MTIME + 1)\n#define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \\\n\t\t\t     << FILE_TIMESTAMP_LO_BITS) \\\n\t\t\t    + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1)\n\n/* Modtime value to use for `infinitely new'.  We used to get the current time\n   from the system and use that whenever we wanted `new'.  But that causes\n   trouble when the machine running make and the machine holding a file have\n   different ideas about what time it is; and can also lose for `force'\n   targets, which need to be considered newer than anything that depends on\n   them, even if said dependents' modtimes are in the future.  */\n#define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP)\n\n#define check_renamed(file) \\\n  while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */\n\n/* Have we snapped deps yet?  */\nextern int snapped_deps;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/function.c",
    "content": "/* Builtin function expansion for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"variable.h\"\n#include \"dep.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"debug.h\"\n\n#ifdef _AMIGA\n#include \"amiga.h\"\n#endif\n\n\nstruct function_table_entry\n  {\n    const char *name;\n    unsigned char len;\n    unsigned char minimum_args;\n    unsigned char maximum_args;\n    char expand_args;\n    char *(*func_ptr) PARAMS ((char *output, char **argv, const char *fname));\n  };\n\nstatic unsigned long\nfunction_table_entry_hash_1 (const void *keyv)\n{\n  struct function_table_entry const *key = (struct function_table_entry const *) keyv;\n  return_STRING_N_HASH_1 (key->name, key->len);\n}\n\nstatic unsigned long\nfunction_table_entry_hash_2 (const void *keyv)\n{\n  struct function_table_entry const *key = (struct function_table_entry const *) keyv;\n  return_STRING_N_HASH_2 (key->name, key->len);\n}\n\nstatic int\nfunction_table_entry_hash_cmp (const void *xv, const void *yv)\n{\n  struct function_table_entry const *x = (struct function_table_entry const *) xv;\n  struct function_table_entry const *y = (struct function_table_entry const *) yv;\n  int result = x->len - y->len;\n  if (result)\n    return result;\n  return_STRING_N_COMPARE (x->name, y->name, x->len);\n}\n\nstatic struct hash_table function_table;\n\f\n\n/* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing\n   each occurrence of SUBST with REPLACE. TEXT is null-terminated.  SLEN is\n   the length of SUBST and RLEN is the length of REPLACE.  If BY_WORD is\n   nonzero, substitutions are done only on matches which are complete\n   whitespace-delimited words.  */\n\nchar *\nsubst_expand (char *o, char *text, char *subst, char *replace,\n              unsigned int slen, unsigned int rlen, int by_word)\n{\n  char *t = text;\n  char *p;\n\n  if (slen == 0 && !by_word)\n    {\n      /* The first occurrence of \"\" in any string is its end.  */\n      o = variable_buffer_output (o, t, strlen (t));\n      if (rlen > 0)\n\to = variable_buffer_output (o, replace, rlen);\n      return o;\n    }\n\n  do\n    {\n      if (by_word && slen == 0)\n\t/* When matching by words, the empty string should match\n\t   the end of each word, rather than the end of the whole text.  */\n\tp = end_of_token (next_token (t));\n      else\n\t{\n\t  p = strstr (t, subst);\n\t  if (p == 0)\n\t    {\n\t      /* No more matches.  Output everything left on the end.  */\n\t      o = variable_buffer_output (o, t, strlen (t));\n\t      return o;\n\t    }\n\t}\n\n      /* Output everything before this occurrence of the string to replace.  */\n      if (p > t)\n\to = variable_buffer_output (o, t, p - t);\n\n      /* If we're substituting only by fully matched words,\n\t or only at the ends of words, check that this case qualifies.  */\n      if (by_word\n          && ((p > text && !isblank ((unsigned char)p[-1]))\n              || (p[slen] != '\\0' && !isblank ((unsigned char)p[slen]))))\n\t/* Struck out.  Output the rest of the string that is\n\t   no longer to be replaced.  */\n\to = variable_buffer_output (o, subst, slen);\n      else if (rlen > 0)\n\t/* Output the replacement string.  */\n\to = variable_buffer_output (o, replace, rlen);\n\n      /* Advance T past the string to be replaced.  */\n      {\n        char *nt = p + slen;\n        t = nt;\n      }\n    } while (*t != '\\0');\n\n  return o;\n}\n\f\n\n/* Store into VARIABLE_BUFFER at O the result of scanning TEXT\n   and replacing strings matching PATTERN with REPLACE.\n   If PATTERN_PERCENT is not nil, PATTERN has already been\n   run through find_percent, and PATTERN_PERCENT is the result.\n   If REPLACE_PERCENT is not nil, REPLACE has already been\n   run through find_percent, and REPLACE_PERCENT is the result.\n   Note that we expect PATTERN_PERCENT and REPLACE_PERCENT to point to the\n   character _AFTER_ the %, not to the % itself.\n*/\n\nchar *\npatsubst_expand (char *o, char *text, char *pattern, char *replace,\n                 char *pattern_percent, char *replace_percent)\n{\n  unsigned int pattern_prepercent_len, pattern_postpercent_len;\n  unsigned int replace_prepercent_len, replace_postpercent_len;\n  char *t;\n  unsigned int len;\n  int doneany = 0;\n\n  /* We call find_percent on REPLACE before checking PATTERN so that REPLACE\n     will be collapsed before we call subst_expand if PATTERN has no %.  */\n  if (!replace_percent)\n    {\n      replace_percent = find_percent (replace);\n      if (replace_percent)\n        ++replace_percent;\n    }\n\n  /* Record the length of REPLACE before and after the % so we don't have to\n     compute these lengths more than once.  */\n  if (replace_percent)\n    {\n      replace_prepercent_len = replace_percent - replace - 1;\n      replace_postpercent_len = strlen (replace_percent);\n    }\n  else\n    {\n      replace_prepercent_len = strlen (replace);\n      replace_postpercent_len = 0;\n    }\n\n  if (!pattern_percent)\n    {\n      pattern_percent = find_percent (pattern);\n      if (pattern_percent)\n        ++pattern_percent;\n    }\n  if (!pattern_percent)\n    /* With no % in the pattern, this is just a simple substitution.  */\n    return subst_expand (o, text, pattern, replace,\n\t\t\t strlen (pattern), strlen (replace), 1);\n\n  /* Record the length of PATTERN before and after the %\n     so we don't have to compute it more than once.  */\n  pattern_prepercent_len = pattern_percent - pattern - 1;\n  pattern_postpercent_len = strlen (pattern_percent);\n\n  while ((t = find_next_token (&text, &len)) != 0)\n    {\n      int fail = 0;\n\n      /* Is it big enough to match?  */\n      if (len < pattern_prepercent_len + pattern_postpercent_len)\n\tfail = 1;\n\n      /* Does the prefix match? */\n      if (!fail && pattern_prepercent_len > 0\n\t  && (*t != *pattern\n\t      || t[pattern_prepercent_len - 1] != pattern_percent[-2]\n\t      || !strneq (t + 1, pattern + 1, pattern_prepercent_len - 1)))\n\tfail = 1;\n\n      /* Does the suffix match? */\n      if (!fail && pattern_postpercent_len > 0\n\t  && (t[len - 1] != pattern_percent[pattern_postpercent_len - 1]\n\t      || t[len - pattern_postpercent_len] != *pattern_percent\n\t      || !strneq (&t[len - pattern_postpercent_len],\n\t\t\t  pattern_percent, pattern_postpercent_len - 1)))\n\tfail = 1;\n\n      if (fail)\n\t/* It didn't match.  Output the string.  */\n\to = variable_buffer_output (o, t, len);\n      else\n\t{\n\t  /* It matched.  Output the replacement.  */\n\n\t  /* Output the part of the replacement before the %.  */\n\t  o = variable_buffer_output (o, replace, replace_prepercent_len);\n\n\t  if (replace_percent != 0)\n\t    {\n\t      /* Output the part of the matched string that\n\t\t matched the % in the pattern.  */\n\t      o = variable_buffer_output (o, t + pattern_prepercent_len,\n\t\t\t\t\t  len - (pattern_prepercent_len\n\t\t\t\t\t\t + pattern_postpercent_len));\n\t      /* Output the part of the replacement after the %.  */\n\t      o = variable_buffer_output (o, replace_percent,\n\t\t\t\t\t  replace_postpercent_len);\n\t    }\n\t}\n\n      /* Output a space, but not if the replacement is \"\".  */\n      if (fail || replace_prepercent_len > 0\n\t  || (replace_percent != 0 && len + replace_postpercent_len > 0))\n\t{\n\t  o = variable_buffer_output (o, \" \", 1);\n\t  doneany = 1;\n\t}\n    }\n  if (doneany)\n    /* Kill the last space.  */\n    --o;\n\n  return o;\n}\n\f\n\n/* Look up a function by name.  */\n\nstatic const struct function_table_entry *\nlookup_function (const char *s)\n{\n  const char *e = s;\n\n  while (*e && ( (*e >= 'a' && *e <= 'z') || *e == '-'))\n    e++;\n  if (*e == '\\0' || isblank ((unsigned char) *e))\n    {\n      struct function_table_entry function_table_entry_key;\n      function_table_entry_key.name = s;\n      function_table_entry_key.len = e - s;\n\n      return hash_find_item (&function_table, &function_table_entry_key);\n    }\n  return 0;\n}\n\f\n\n/* Return 1 if PATTERN matches STR, 0 if not.  */\n\nint\npattern_matches (char *pattern, char *percent, char *str)\n{\n  unsigned int sfxlen, strlength;\n\n  if (percent == 0)\n    {\n      unsigned int len = strlen (pattern) + 1;\n      char *new_chars = (char *) alloca (len);\n      bcopy (pattern, new_chars, len);\n      pattern = new_chars;\n      percent = find_percent (pattern);\n      if (percent == 0)\n\treturn streq (pattern, str);\n    }\n\n  sfxlen = strlen (percent + 1);\n  strlength = strlen (str);\n\n  if (strlength < (percent - pattern) + sfxlen\n      || !strneq (pattern, str, percent - pattern))\n    return 0;\n\n  return !strcmp (percent + 1, str + (strlength - sfxlen));\n}\n\f\n\n/* Find the next comma or ENDPAREN (counting nested STARTPAREN and\n   ENDPARENtheses), starting at PTR before END.  Return a pointer to\n   next character.\n\n   If no next argument is found, return NULL.\n*/\n\nstatic char *\nfind_next_argument (char startparen, char endparen,\n                    const char *ptr, const char *end)\n{\n  int count = 0;\n\n  for (; ptr < end; ++ptr)\n    if (*ptr == startparen)\n      ++count;\n\n    else if (*ptr == endparen)\n      {\n\t--count;\n\tif (count < 0)\n\t  return NULL;\n      }\n\n    else if (*ptr == ',' && !count)\n      return (char *)ptr;\n\n  /* We didn't find anything.  */\n  return NULL;\n}\n\f\n\n/* Glob-expand LINE.  The returned pointer is\n   only good until the next call to string_glob.  */\n\nstatic char *\nstring_glob (char *line)\n{\n  static char *result = 0;\n  static unsigned int length;\n  register struct nameseq *chain;\n  register unsigned int idx;\n\n  chain = multi_glob (parse_file_seq\n\t\t      (&line, '\\0', sizeof (struct nameseq),\n\t\t       /* We do not want parse_file_seq to strip `./'s.\n\t\t\t  That would break examples like:\n\t\t\t  $(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)).  */\n\t\t       0),\n\t\t      sizeof (struct nameseq));\n\n  if (result == 0)\n    {\n      length = 100;\n      result = (char *) xmalloc (100);\n    }\n\n  idx = 0;\n  while (chain != 0)\n    {\n      register char *name = chain->name;\n      unsigned int len = strlen (name);\n\n      struct nameseq *next = chain->next;\n      free ((char *) chain);\n      chain = next;\n\n      /* multi_glob will pass names without globbing metacharacters\n\t through as is, but we want only files that actually exist.  */\n      if (file_exists_p (name))\n\t{\n\t  if (idx + len + 1 > length)\n\t    {\n\t      length += (len + 1) * 2;\n\t      result = (char *) xrealloc (result, length);\n\t    }\n\t  bcopy (name, &result[idx], len);\n\t  idx += len;\n\t  result[idx++] = ' ';\n\t}\n\n      free (name);\n    }\n\n  /* Kill the last space and terminate the string.  */\n  if (idx == 0)\n    result[0] = '\\0';\n  else\n    result[idx - 1] = '\\0';\n\n  return result;\n}\n\f\n/*\n  Builtin functions\n */\n\nstatic char *\nfunc_patsubst (char *o, char **argv, const char *funcname UNUSED)\n{\n  o = patsubst_expand (o, argv[2], argv[0], argv[1], (char *) 0, (char *) 0);\n  return o;\n}\n\n\nstatic char *\nfunc_join (char *o, char **argv, const char *funcname UNUSED)\n{\n  int doneany = 0;\n\n  /* Write each word of the first argument directly followed\n     by the corresponding word of the second argument.\n     If the two arguments have a different number of words,\n     the excess words are just output separated by blanks.  */\n  register char *tp;\n  register char *pp;\n  char *list1_iterator = argv[0];\n  char *list2_iterator = argv[1];\n  do\n    {\n      unsigned int len1, len2;\n\n      tp = find_next_token (&list1_iterator, &len1);\n      if (tp != 0)\n\to = variable_buffer_output (o, tp, len1);\n\n      pp = find_next_token (&list2_iterator, &len2);\n      if (pp != 0)\n\to = variable_buffer_output (o, pp, len2);\n\n      if (tp != 0 || pp != 0)\n\t{\n\t  o = variable_buffer_output (o, \" \", 1);\n\t  doneany = 1;\n\t}\n    }\n  while (tp != 0 || pp != 0);\n  if (doneany)\n    /* Kill the last blank.  */\n    --o;\n\n  return o;\n}\n\n\nstatic char *\nfunc_origin (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* Expand the argument.  */\n  register struct variable *v = lookup_variable (argv[0], strlen (argv[0]));\n  if (v == 0)\n    o = variable_buffer_output (o, \"undefined\", 9);\n  else\n    switch (v->origin)\n      {\n      default:\n      case o_invalid:\n\tabort ();\n\tbreak;\n      case o_default:\n\to = variable_buffer_output (o, \"default\", 7);\n\tbreak;\n      case o_env:\n\to = variable_buffer_output (o, \"environment\", 11);\n\tbreak;\n      case o_file:\n\to = variable_buffer_output (o, \"file\", 4);\n\tbreak;\n      case o_env_override:\n\to = variable_buffer_output (o, \"environment override\", 20);\n\tbreak;\n      case o_command:\n\to = variable_buffer_output (o, \"command line\", 12);\n\tbreak;\n      case o_override:\n\to = variable_buffer_output (o, \"override\", 8);\n\tbreak;\n      case o_automatic:\n\to = variable_buffer_output (o, \"automatic\", 9);\n\tbreak;\n      }\n\n  return o;\n}\n\nstatic char *\nfunc_flavor (char *o, char **argv, const char *funcname UNUSED)\n{\n  register struct variable *v = lookup_variable (argv[0], strlen (argv[0]));\n\n  if (v == 0)\n    o = variable_buffer_output (o, \"undefined\", 9);\n  else\n    if (v->recursive)\n      o = variable_buffer_output (o, \"recursive\", 9);\n    else\n      o = variable_buffer_output (o, \"simple\", 6);\n\n  return o;\n}\n\n#ifdef VMS\n# define IS_PATHSEP(c) ((c) == ']')\n#else\n# ifdef HAVE_DOS_PATHS\n#  define IS_PATHSEP(c) ((c) == '/' || (c) == '\\\\')\n# else\n#  define IS_PATHSEP(c) ((c) == '/')\n# endif\n#endif\n\n\nstatic char *\nfunc_notdir_suffix (char *o, char **argv, const char *funcname)\n{\n  /* Expand the argument.  */\n  char *list_iterator = argv[0];\n  char *p2 =0;\n  int doneany =0;\n  unsigned int len=0;\n\n  int is_suffix = streq (funcname, \"suffix\");\n  int is_notdir = !is_suffix;\n  while ((p2 = find_next_token (&list_iterator, &len)) != 0)\n    {\n      char *p = p2 + len;\n\n\n      while (p >= p2 && (!is_suffix || *p != '.'))\n\t{\n\t  if (IS_PATHSEP (*p))\n\t    break;\n\t  --p;\n\t}\n\n      if (p >= p2)\n\t{\n\t  if (is_notdir)\n\t    ++p;\n\t  else if (*p != '.')\n\t    continue;\n\t  o = variable_buffer_output (o, p, len - (p - p2));\n\t}\n#ifdef HAVE_DOS_PATHS\n      /* Handle the case of \"d:foo/bar\".  */\n      else if (streq (funcname, \"notdir\") && p2[0] && p2[1] == ':')\n\t{\n\t  p = p2 + 2;\n\t  o = variable_buffer_output (o, p, len - (p - p2));\n\t}\n#endif\n      else if (is_notdir)\n\to = variable_buffer_output (o, p2, len);\n\n      if (is_notdir || p >= p2)\n\t{\n\t  o = variable_buffer_output (o, \" \", 1);\n\t  doneany = 1;\n\t}\n    }\n  if (doneany)\n    /* Kill last space.  */\n    --o;\n\n\n  return o;\n\n}\n\n\nstatic char *\nfunc_basename_dir (char *o, char **argv, const char *funcname)\n{\n  /* Expand the argument.  */\n  char *p3 = argv[0];\n  char *p2=0;\n  int doneany=0;\n  unsigned int len=0;\n  char *p=0;\n  int is_basename= streq (funcname, \"basename\");\n  int is_dir= !is_basename;\n\n  while ((p2 = find_next_token (&p3, &len)) != 0)\n\t{\n\t  p = p2 + len;\n\t  while (p >= p2 && (!is_basename  || *p != '.'))\n\t    {\n\t      if (IS_PATHSEP (*p))\n\t\tbreak;\n\t      \t    --p;\n\t    }\n\n\t  if (p >= p2 && (is_dir))\n\t    o = variable_buffer_output (o, p2, ++p - p2);\n\t  else if (p >= p2 && (*p == '.'))\n\t    o = variable_buffer_output (o, p2, p - p2);\n#ifdef HAVE_DOS_PATHS\n\t/* Handle the \"d:foobar\" case */\n\t  else if (p2[0] && p2[1] == ':' && is_dir)\n\t    o = variable_buffer_output (o, p2, 2);\n#endif\n\t  else if (is_dir)\n#ifdef VMS\n\t    o = variable_buffer_output (o, \"[]\", 2);\n#else\n#ifndef _AMIGA\n\t    o = variable_buffer_output (o, \"./\", 2);\n#else\n\t    ; /* Just a nop...  */\n#endif /* AMIGA */\n#endif /* !VMS */\n\t  else\n\t    /* The entire name is the basename.  */\n\t    o = variable_buffer_output (o, p2, len);\n\n\t  o = variable_buffer_output (o, \" \", 1);\n\t  doneany = 1;\n\t}\n      if (doneany)\n\t/* Kill last space.  */\n\t--o;\n\n\n return o;\n}\n\nstatic char *\nfunc_addsuffix_addprefix (char *o, char **argv, const char *funcname)\n{\n  int fixlen = strlen (argv[0]);\n  char *list_iterator = argv[1];\n  int is_addprefix = streq (funcname, \"addprefix\");\n  int is_addsuffix = !is_addprefix;\n\n  int doneany = 0;\n  char *p;\n  unsigned int len;\n\n  while ((p = find_next_token (&list_iterator, &len)) != 0)\n    {\n      if (is_addprefix)\n\to = variable_buffer_output (o, argv[0], fixlen);\n      o = variable_buffer_output (o, p, len);\n      if (is_addsuffix)\n\to = variable_buffer_output (o, argv[0], fixlen);\n      o = variable_buffer_output (o, \" \", 1);\n      doneany = 1;\n    }\n\n  if (doneany)\n    /* Kill last space.  */\n    --o;\n\n  return o;\n}\n\nstatic char *\nfunc_subst (char *o, char **argv, const char *funcname UNUSED)\n{\n  o = subst_expand (o, argv[2], argv[0], argv[1], strlen (argv[0]),\n\t\t    strlen (argv[1]), 0);\n\n  return o;\n}\n\n\nstatic char *\nfunc_firstword (char *o, char **argv, const char *funcname UNUSED)\n{\n  unsigned int i;\n  char *words = argv[0];    /* Use a temp variable for find_next_token */\n  char *p = find_next_token (&words, &i);\n\n  if (p != 0)\n    o = variable_buffer_output (o, p, i);\n\n  return o;\n}\n\nstatic char *\nfunc_lastword (char *o, char **argv, const char *funcname UNUSED)\n{\n  unsigned int i;\n  char *words = argv[0];    /* Use a temp variable for find_next_token */\n  char *p = 0;\n  char *t;\n\n  while ((t = find_next_token (&words, &i)))\n    p = t;\n\n  if (p != 0)\n    o = variable_buffer_output (o, p, i);\n\n  return o;\n}\n\nstatic char *\nfunc_words (char *o, char **argv, const char *funcname UNUSED)\n{\n  int i = 0;\n  char *word_iterator = argv[0];\n  char buf[20];\n\n  while (find_next_token (&word_iterator, (unsigned int *) 0) != 0)\n    ++i;\n\n  sprintf (buf, \"%d\", i);\n  o = variable_buffer_output (o, buf, strlen (buf));\n\n\n  return o;\n}\n\n/* Set begpp to point to the first non-whitespace character of the string,\n * and endpp to point to the last non-whitespace character of the string.\n * If the string is empty or contains nothing but whitespace, endpp will be\n * begpp-1.\n */\nchar *\nstrip_whitespace (const char **begpp, const char **endpp)\n{\n  while (*begpp <= *endpp && isspace ((unsigned char)**begpp))\n    (*begpp) ++;\n  while (*endpp >= *begpp && isspace ((unsigned char)**endpp))\n    (*endpp) --;\n  return (char *)*begpp;\n}\n\nstatic void\ncheck_numeric (const char *s, const char *message)\n{\n  const char *end = s + strlen (s) - 1;\n  const char *beg = s;\n  strip_whitespace (&s, &end);\n\n  for (; s <= end; ++s)\n    if (!ISDIGIT (*s))  /* ISDIGIT only evals its arg once: see make.h.  */\n      break;\n\n  if (s <= end || end - beg < 0)\n    fatal (*expanding_var, \"%s: '%s'\", message, beg);\n}\n\n\n\nstatic char *\nfunc_word (char *o, char **argv, const char *funcname UNUSED)\n{\n  char *end_p=0;\n  int i=0;\n  char *p=0;\n\n  /* Check the first argument.  */\n  check_numeric (argv[0], _(\"non-numeric first argument to `word' function\"));\n  i =  atoi (argv[0]);\n\n  if (i == 0)\n    fatal (*expanding_var,\n           _(\"first argument to `word' function must be greater than 0\"));\n\n\n  end_p = argv[1];\n  while ((p = find_next_token (&end_p, 0)) != 0)\n    if (--i == 0)\n      break;\n\n  if (i == 0)\n    o = variable_buffer_output (o, p, end_p - p);\n\n  return o;\n}\n\nstatic char *\nfunc_wordlist (char *o, char **argv, const char *funcname UNUSED)\n{\n  int start, count;\n\n  /* Check the arguments.  */\n  check_numeric (argv[0],\n\t\t _(\"non-numeric first argument to `wordlist' function\"));\n  check_numeric (argv[1],\n\t\t _(\"non-numeric second argument to `wordlist' function\"));\n\n  start = atoi (argv[0]);\n  if (start < 1)\n    fatal (*expanding_var,\n           \"invalid first argument to `wordlist' function: `%d'\", start);\n\n  count = atoi (argv[1]) - start + 1;\n\n  if (count > 0)\n    {\n      char *p;\n      char *end_p = argv[2];\n\n      /* Find the beginning of the \"start\"th word.  */\n      while (((p = find_next_token (&end_p, 0)) != 0) && --start)\n        ;\n\n      if (p)\n        {\n          /* Find the end of the \"count\"th word from start.  */\n          while (--count && (find_next_token (&end_p, 0) != 0))\n            ;\n\n          /* Return the stuff in the middle.  */\n          o = variable_buffer_output (o, p, end_p - p);\n        }\n    }\n\n  return o;\n}\n\nstatic char*\nfunc_findstring (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* Find the first occurrence of the first string in the second.  */\n  if (strstr (argv[1], argv[0]) != 0)\n    o = variable_buffer_output (o, argv[0], strlen (argv[0]));\n\n  return o;\n}\n\nstatic char *\nfunc_foreach (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* expand only the first two.  */\n  char *varname = expand_argument (argv[0], NULL);\n  char *list = expand_argument (argv[1], NULL);\n  char *body = argv[2];\n\n  int doneany = 0;\n  char *list_iterator = list;\n  char *p;\n  unsigned int len;\n  register struct variable *var;\n\n  push_new_variable_scope ();\n  var = define_variable (varname, strlen (varname), \"\", o_automatic, 0);\n\n  /* loop through LIST,  put the value in VAR and expand BODY */\n  while ((p = find_next_token (&list_iterator, &len)) != 0)\n    {\n      char *result = 0;\n\n      {\n\tchar save = p[len];\n\n\tp[len] = '\\0';\n\tfree (var->value);\n\tvar->value = (char *) xstrdup ((char*) p);\n\tp[len] = save;\n      }\n\n      result = allocated_variable_expand (body);\n\n      o = variable_buffer_output (o, result, strlen (result));\n      o = variable_buffer_output (o, \" \", 1);\n      doneany = 1;\n      free (result);\n    }\n\n  if (doneany)\n    /* Kill the last space.  */\n    --o;\n\n  pop_variable_scope ();\n  free (varname);\n  free (list);\n\n  return o;\n}\n\nstruct a_word\n{\n  struct a_word *next;\n  struct a_word *chain;\n  char *str;\n  int length;\n  int matched;\n};\n\nstatic unsigned long\na_word_hash_1 (const void *key)\n{\n  return_STRING_HASH_1 (((struct a_word const *) key)->str);\n}\n\nstatic unsigned long\na_word_hash_2 (const void *key)\n{\n  return_STRING_HASH_2 (((struct a_word const *) key)->str);\n}\n\nstatic int\na_word_hash_cmp (const void *x, const void *y)\n{\n  int result = ((struct a_word const *) x)->length - ((struct a_word const *) y)->length;\n  if (result)\n    return result;\n  return_STRING_COMPARE (((struct a_word const *) x)->str,\n\t\t\t ((struct a_word const *) y)->str);\n}\n\nstruct a_pattern\n{\n  struct a_pattern *next;\n  char *str;\n  char *percent;\n  int length;\n  int save_c;\n};\n\nstatic char *\nfunc_filter_filterout (char *o, char **argv, const char *funcname)\n{\n  struct a_word *wordhead;\n  struct a_word **wordtail;\n  struct a_word *wp;\n  struct a_pattern *pathead;\n  struct a_pattern **pattail;\n  struct a_pattern *pp;\n\n  struct hash_table a_word_table;\n  int is_filter = streq (funcname, \"filter\");\n  char *pat_iterator = argv[0];\n  char *word_iterator = argv[1];\n  int literals = 0;\n  int words = 0;\n  int hashing = 0;\n  char *p;\n  unsigned int len;\n\n  /* Chop ARGV[0] up into patterns to match against the words.  */\n\n  pattail = &pathead;\n  while ((p = find_next_token (&pat_iterator, &len)) != 0)\n    {\n      struct a_pattern *pat = (struct a_pattern *) alloca (sizeof (struct a_pattern));\n\n      *pattail = pat;\n      pattail = &pat->next;\n\n      if (*pat_iterator != '\\0')\n\t++pat_iterator;\n\n      pat->str = p;\n      pat->length = len;\n      pat->save_c = p[len];\n      p[len] = '\\0';\n      pat->percent = find_percent (p);\n      if (pat->percent == 0)\n\tliterals++;\n    }\n  *pattail = 0;\n\n  /* Chop ARGV[1] up into words to match against the patterns.  */\n\n  wordtail = &wordhead;\n  while ((p = find_next_token (&word_iterator, &len)) != 0)\n    {\n      struct a_word *word = (struct a_word *) alloca (sizeof (struct a_word));\n\n      *wordtail = word;\n      wordtail = &word->next;\n\n      if (*word_iterator != '\\0')\n\t++word_iterator;\n\n      p[len] = '\\0';\n      word->str = p;\n      word->length = len;\n      word->matched = 0;\n      word->chain = 0;\n      words++;\n    }\n  *wordtail = 0;\n\n  /* Only use a hash table if arg list lengths justifies the cost.  */\n  hashing = (literals >= 2 && (literals * words) >= 10);\n  if (hashing)\n    {\n      hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2, a_word_hash_cmp);\n      for (wp = wordhead; wp != 0; wp = wp->next)\n\t{\n\t  struct a_word *owp = hash_insert (&a_word_table, wp);\n\t  if (owp)\n\t    wp->chain = owp;\n\t}\n    }\n\n  if (words)\n    {\n      int doneany = 0;\n\n      /* Run each pattern through the words, killing words.  */\n      for (pp = pathead; pp != 0; pp = pp->next)\n\t{\n\t  if (pp->percent)\n\t    for (wp = wordhead; wp != 0; wp = wp->next)\n\t      wp->matched |= pattern_matches (pp->str, pp->percent, wp->str);\n\t  else if (hashing)\n\t    {\n\t      struct a_word a_word_key;\n\t      a_word_key.str = pp->str;\n\t      a_word_key.length = pp->length;\n\t      wp = (struct a_word *) hash_find_item (&a_word_table, &a_word_key);\n\t      while (wp)\n\t\t{\n\t\t  wp->matched |= 1;\n\t\t  wp = wp->chain;\n\t\t}\n\t    }\n\t  else\n\t    for (wp = wordhead; wp != 0; wp = wp->next)\n\t      wp->matched |= (wp->length == pp->length\n\t\t\t      && strneq (pp->str, wp->str, wp->length));\n\t}\n\n      /* Output the words that matched (or didn't, for filter-out).  */\n      for (wp = wordhead; wp != 0; wp = wp->next)\n\tif (is_filter ? wp->matched : !wp->matched)\n\t  {\n\t    o = variable_buffer_output (o, wp->str, strlen (wp->str));\n\t    o = variable_buffer_output (o, \" \", 1);\n\t    doneany = 1;\n\t  }\n\n      if (doneany)\n\t/* Kill the last space.  */\n\t--o;\n    }\n\n  for (pp = pathead; pp != 0; pp = pp->next)\n    pp->str[pp->length] = pp->save_c;\n\n  if (hashing)\n    hash_free (&a_word_table, 0);\n\n  return o;\n}\n\n\nstatic char *\nfunc_strip (char *o, char **argv, const char *funcname UNUSED)\n{\n  char *p = argv[0];\n  int doneany =0;\n\n  while (*p != '\\0')\n    {\n      int i=0;\n      char *word_start=0;\n\n      while (isspace ((unsigned char)*p))\n\t++p;\n      word_start = p;\n      for (i=0; *p != '\\0' && !isspace ((unsigned char)*p); ++p, ++i)\n\t{}\n      if (!i)\n\tbreak;\n      o = variable_buffer_output (o, word_start, i);\n      o = variable_buffer_output (o, \" \", 1);\n      doneany = 1;\n    }\n\n  if (doneany)\n    /* Kill the last space.  */\n    --o;\n  return o;\n}\n\n/*\n  Print a warning or fatal message.\n*/\nstatic char *\nfunc_error (char *o, char **argv, const char *funcname)\n{\n  char **argvp;\n  char *msg, *p;\n  int len;\n\n  /* The arguments will be broken on commas.  Rather than create yet\n     another special case where function arguments aren't broken up,\n     just create a format string that puts them back together.  */\n  for (len=0, argvp=argv; *argvp != 0; ++argvp)\n    len += strlen (*argvp) + 2;\n\n  p = msg = (char *) alloca (len + 1);\n\n  for (argvp=argv; argvp[1] != 0; ++argvp)\n    {\n      strcpy (p, *argvp);\n      p += strlen (*argvp);\n      *(p++) = ',';\n      *(p++) = ' ';\n    }\n  strcpy (p, *argvp);\n\n  switch (*funcname) {\n    case 'e':\n      fatal (reading_file, \"%s\", msg);\n\n    case 'w':\n      error (reading_file, \"%s\", msg);\n      break;\n\n    case 'i':\n      printf (\"%s\\n\", msg);\n      fflush(stdout);\n      break;\n\n    default:\n      fatal (*expanding_var, \"Internal error: func_error: '%s'\", funcname);\n  }\n\n  /* The warning function expands to the empty string.  */\n  return o;\n}\n\n\n/*\n  chop argv[0] into words, and sort them.\n */\nstatic char *\nfunc_sort (char *o, char **argv, const char *funcname UNUSED)\n{\n  char **words = 0;\n  int nwords = 0;\n  register int wordi = 0;\n\n  /* Chop ARGV[0] into words and put them in WORDS.  */\n  char *t = argv[0];\n  char *p;\n  unsigned int len;\n  int i;\n\n  while ((p = find_next_token (&t, &len)) != 0)\n    {\n      if (wordi >= nwords - 1)\n\t{\n\t  nwords = (2 * nwords) + 5;\n\t  words = (char **) xrealloc ((char *) words,\n\t\t\t\t      nwords * sizeof (char *));\n\t}\n      words[wordi++] = savestring (p, len);\n    }\n\n  if (!wordi)\n    return o;\n\n  /* Now sort the list of words.  */\n  qsort ((char *) words, wordi, sizeof (char *), alpha_compare);\n\n  /* Now write the sorted list.  */\n  for (i = 0; i < wordi; ++i)\n    {\n      len = strlen (words[i]);\n      if (i == wordi - 1 || strlen (words[i + 1]) != len\n          || strcmp (words[i], words[i + 1]))\n        {\n          o = variable_buffer_output (o, words[i], len);\n          o = variable_buffer_output (o, \" \", 1);\n        }\n      free (words[i]);\n    }\n  /* Kill the last space.  */\n  --o;\n\n  free (words);\n\n  return o;\n}\n\n/*\n  $(if condition,true-part[,false-part])\n\n  CONDITION is false iff it evaluates to an empty string.  White\n  space before and after condition are stripped before evaluation.\n\n  If CONDITION is true, then TRUE-PART is evaluated, otherwise FALSE-PART is\n  evaluated (if it exists).  Because only one of the two PARTs is evaluated,\n  you can use $(if ...) to create side-effects (with $(shell ...), for\n  example).\n*/\n\nstatic char *\nfunc_if (char *o, char **argv, const char *funcname UNUSED)\n{\n  const char *begp = argv[0];\n  const char *endp = begp + strlen (argv[0]) - 1;\n  int result = 0;\n\n  /* Find the result of the condition: if we have a value, and it's not\n     empty, the condition is true.  If we don't have a value, or it's the\n     empty string, then it's false.  */\n\n  strip_whitespace (&begp, &endp);\n\n  if (begp <= endp)\n    {\n      char *expansion = expand_argument (begp, endp+1);\n\n      result = strlen (expansion);\n      free (expansion);\n    }\n\n  /* If the result is true (1) we want to eval the first argument, and if\n     it's false (0) we want to eval the second.  If the argument doesn't\n     exist we do nothing, otherwise expand it and add to the buffer.  */\n\n  argv += 1 + !result;\n\n  if (argv[0])\n    {\n      char *expansion;\n\n      expansion = expand_argument (argv[0], NULL);\n\n      o = variable_buffer_output (o, expansion, strlen (expansion));\n\n      free (expansion);\n    }\n\n  return o;\n}\n\n/*\n  $(or condition1[,condition2[,condition3[...]]])\n\n  A CONDITION is false iff it evaluates to an empty string.  White\n  space before and after CONDITION are stripped before evaluation.\n\n  CONDITION1 is evaluated.  If it's true, then this is the result of\n  expansion.  If it's false, CONDITION2 is evaluated, and so on.  If none of\n  the conditions are true, the expansion is the empty string.\n\n  Once a CONDITION is true no further conditions are evaluated\n  (short-circuiting).\n*/\n\nstatic char *\nfunc_or (char *o, char **argv, const char *funcname UNUSED)\n{\n  for ( ; *argv ; ++argv)\n    {\n      const char *begp = *argv;\n      const char *endp = begp + strlen (*argv) - 1;\n      char *expansion;\n      int result = 0;\n\n      /* Find the result of the condition: if it's false keep going.  */\n\n      strip_whitespace (&begp, &endp);\n\n      if (begp > endp)\n        continue;\n\n      expansion = expand_argument (begp, endp+1);\n      result = strlen (expansion);\n\n      /* If the result is false keep going.  */\n      if (!result)\n        {\n          free (expansion);\n          continue;\n        }\n\n      /* It's true!  Keep this result and return.  */\n      o = variable_buffer_output (o, expansion, result);\n      free (expansion);\n      break;\n    }\n\n  return o;\n}\n\n/*\n  $(and condition1[,condition2[,condition3[...]]])\n\n  A CONDITION is false iff it evaluates to an empty string.  White\n  space before and after CONDITION are stripped before evaluation.\n\n  CONDITION1 is evaluated.  If it's false, then this is the result of\n  expansion.  If it's true, CONDITION2 is evaluated, and so on.  If all of\n  the conditions are true, the expansion is the result of the last condition.\n\n  Once a CONDITION is false no further conditions are evaluated\n  (short-circuiting).\n*/\n\nstatic char *\nfunc_and (char *o, char **argv, const char *funcname UNUSED)\n{\n  char *expansion;\n  int result;\n\n  while (1)\n    {\n      const char *begp = *argv;\n      const char *endp = begp + strlen (*argv) - 1;\n\n      /* An empty condition is always false.  */\n      strip_whitespace (&begp, &endp);\n      if (begp > endp)\n        return o;\n\n      expansion = expand_argument (begp, endp+1);\n      result = strlen (expansion);\n\n      /* If the result is false, stop here: we're done.  */\n      if (!result)\n        break;\n\n      /* Otherwise the result is true.  If this is the last one, keep this\n         result and quit.  Otherwise go on to the next one!  */\n\n      if (*(++argv))\n        free (expansion);\n      else\n        {\n          o = variable_buffer_output (o, expansion, result);\n          break;\n        }\n    }\n\n  free (expansion);\n\n  return o;\n}\n\nstatic char *\nfunc_wildcard (char *o, char **argv, const char *funcname UNUSED)\n{\n\n#ifdef _AMIGA\n   o = wildcard_expansion (argv[0], o);\n#else\n   char *p = string_glob (argv[0]);\n   o = variable_buffer_output (o, p, strlen (p));\n#endif\n   return o;\n}\n\n/*\n  $(eval <makefile string>)\n\n  Always resolves to the empty string.\n\n  Treat the arguments as a segment of makefile, and parse them.\n*/\n\nstatic char *\nfunc_eval (char *o, char **argv, const char *funcname UNUSED)\n{\n  char *buf;\n  unsigned int len;\n\n  /* Eval the buffer.  Pop the current variable buffer setting so that the\n     eval'd code can use its own without conflicting.  */\n\n  install_variable_buffer (&buf, &len);\n\n  eval_buffer (argv[0]);\n\n  restore_variable_buffer (buf, len);\n\n  return o;\n}\n\n\nstatic char *\nfunc_value (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* Look up the variable.  */\n  struct variable *v = lookup_variable (argv[0], strlen (argv[0]));\n\n  /* Copy its value into the output buffer without expanding it.  */\n  if (v)\n    o = variable_buffer_output (o, v->value, strlen(v->value));\n\n  return o;\n}\n\n/*\n  \\r  is replaced on UNIX as well. Is this desirable?\n */\nstatic void\nfold_newlines (char *buffer, unsigned int *length)\n{\n  char *dst = buffer;\n  char *src = buffer;\n  char *last_nonnl = buffer -1;\n  src[*length] = 0;\n  for (; *src != '\\0'; ++src)\n    {\n      if (src[0] == '\\r' && src[1] == '\\n')\n\tcontinue;\n      if (*src == '\\n')\n\t{\n\t  *dst++ = ' ';\n\t}\n      else\n\t{\n\t  last_nonnl = dst;\n\t  *dst++ = *src;\n\t}\n    }\n  *(++last_nonnl) = '\\0';\n  *length = last_nonnl - buffer;\n}\n\n\n\nint shell_function_pid = 0, shell_function_completed;\n\n\n#ifdef WINDOWS32\n/*untested*/\n\n#include <windows.h>\n#include <io.h>\n#include \"sub_proc.h\"\n\n\nvoid\nwindows32_openpipe (int *pipedes, int *pid_p, char **command_argv, char **envp)\n{\n  SECURITY_ATTRIBUTES saAttr;\n  HANDLE hIn;\n  HANDLE hErr;\n  HANDLE hChildOutRd;\n  HANDLE hChildOutWr;\n  HANDLE hProcess;\n\n\n  saAttr.nLength = sizeof (SECURITY_ATTRIBUTES);\n  saAttr.bInheritHandle = TRUE;\n  saAttr.lpSecurityDescriptor = NULL;\n\n  if (DuplicateHandle (GetCurrentProcess(),\n\t\t      GetStdHandle(STD_INPUT_HANDLE),\n\t\t      GetCurrentProcess(),\n\t\t      &hIn,\n\t\t      0,\n\t\t      TRUE,\n\t\t      DUPLICATE_SAME_ACCESS) == FALSE) {\n    fatal (NILF, _(\"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"),\n\t   GetLastError());\n\n  }\n  if (DuplicateHandle(GetCurrentProcess(),\n\t\t      GetStdHandle(STD_ERROR_HANDLE),\n\t\t      GetCurrentProcess(),\n\t\t      &hErr,\n\t\t      0,\n\t\t      TRUE,\n\t\t      DUPLICATE_SAME_ACCESS) == FALSE) {\n    fatal (NILF, _(\"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"),\n\t   GetLastError());\n  }\n\n  if (!CreatePipe(&hChildOutRd, &hChildOutWr, &saAttr, 0))\n    fatal (NILF, _(\"CreatePipe() failed (e=%ld)\\n\"), GetLastError());\n\n  hProcess = process_init_fd(hIn, hChildOutWr, hErr);\n\n  if (!hProcess)\n    fatal (NILF, _(\"windows32_openpipe (): process_init_fd() failed\\n\"));\n\n  /* make sure that CreateProcess() has Path it needs */\n  sync_Path_environment();\n\n  if (!process_begin(hProcess, command_argv, envp, command_argv[0], NULL)) {\n    /* register process for wait */\n    process_register(hProcess);\n\n    /* set the pid for returning to caller */\n    *pid_p = (intptr_t) hProcess;\n\n  /* set up to read data from child */\n  pipedes[0] = _open_osfhandle((intptr_t) hChildOutRd, O_RDONLY);\n\n  /* this will be closed almost right away */\n  pipedes[1] = _open_osfhandle((intptr_t) hChildOutWr, O_APPEND);\n  } else {\n    /* reap/cleanup the failed process */\n\tprocess_cleanup(hProcess);\n\n    /* close handles which were duplicated, they weren't used */\n\tCloseHandle(hIn);\n\tCloseHandle(hErr);\n\n\t/* close pipe handles, they won't be used */\n\tCloseHandle(hChildOutRd);\n\tCloseHandle(hChildOutWr);\n\n    /* set status for return */\n    pipedes[0] = pipedes[1] = -1;\n    *pid_p = -1;\n  }\n}\n#endif\n\n\n#ifdef __MSDOS__\nFILE *\nmsdos_openpipe (int* pipedes, int *pidp, char *text)\n{\n  FILE *fpipe=0;\n  /* MSDOS can't fork, but it has `popen'.  */\n  struct variable *sh = lookup_variable (\"SHELL\", 5);\n  int e;\n  extern int dos_command_running, dos_status;\n\n  /* Make sure not to bother processing an empty line.  */\n  while (isblank ((unsigned char)*text))\n    ++text;\n  if (*text == '\\0')\n    return 0;\n\n  if (sh)\n    {\n      char buf[PATH_MAX + 7];\n      /* This makes sure $SHELL value is used by $(shell), even\n\t though the target environment is not passed to it.  */\n      sprintf (buf, \"SHELL=%s\", sh->value);\n      putenv (buf);\n    }\n\n  e = errno;\n  errno = 0;\n  dos_command_running = 1;\n  dos_status = 0;\n  /* If dos_status becomes non-zero, it means the child process\n     was interrupted by a signal, like SIGINT or SIGQUIT.  See\n     fatal_error_signal in commands.c.  */\n  fpipe = popen (text, \"rt\");\n  dos_command_running = 0;\n  if (!fpipe || dos_status)\n    {\n      pipedes[0] = -1;\n      *pidp = -1;\n      if (dos_status)\n\terrno = EINTR;\n      else if (errno == 0)\n\terrno = ENOMEM;\n      shell_function_completed = -1;\n    }\n  else\n    {\n      pipedes[0] = fileno (fpipe);\n      *pidp = 42; /* Yes, the Meaning of Life, the Universe, and Everything! */\n      errno = e;\n      shell_function_completed = 1;\n    }\n  return fpipe;\n}\n#endif\n\n/*\n  Do shell spawning, with the naughty bits for different OSes.\n */\n\n#ifdef VMS\n\n/* VMS can't do $(shell ...)  */\n#define func_shell 0\n\n#else\n#ifndef _AMIGA\nstatic char *\nfunc_shell (char *o, char **argv, const char *funcname UNUSED)\n{\n  char* batch_filename = NULL;\n\n#ifdef __MSDOS__\n  FILE *fpipe;\n#endif\n  char **command_argv;\n  char *error_prefix;\n  char **envp;\n  int pipedes[2];\n  int pid;\n\n#ifndef __MSDOS__\n  /* Construct the argument list.  */\n  command_argv = construct_command_argv (argv[0],\n\t\t\t\t\t (char **) NULL, (struct file *) 0,\n                                         &batch_filename);\n  if (command_argv == 0)\n    return o;\n#endif\n\n  /* Using a target environment for `shell' loses in cases like:\n     export var = $(shell echo foobie)\n     because target_environment hits a loop trying to expand $(var)\n     to put it in the environment.  This is even more confusing when\n     var was not explicitly exported, but just appeared in the\n     calling environment.\n\n  envp = target_environment (NILF);\n  */\n\n  envp = environ;\n\n  /* For error messages.  */\n  if (reading_file && reading_file->filenm)\n    {\n      error_prefix = (char *) alloca (strlen (reading_file->filenm)+11+4);\n      sprintf (error_prefix,\n\t       \"%s:%lu: \", reading_file->filenm, reading_file->lineno);\n    }\n  else\n    error_prefix = \"\";\n\n#ifdef WINDOWS32\n\n  windows32_openpipe (pipedes, &pid, command_argv, envp);\n\n  if (pipedes[0] < 0) {\n\t/* open of the pipe failed, mark as failed execution */\n    shell_function_completed = -1;\n\n\treturn o;\n  } else\n\n#elif defined(__MSDOS__)\n\n  fpipe = msdos_openpipe (pipedes, &pid, argv[0]);\n  if (pipedes[0] < 0)\n    {\n      perror_with_name (error_prefix, \"pipe\");\n      return o;\n    }\n\n#else\n\n  if (pipe (pipedes) < 0)\n    {\n      perror_with_name (error_prefix, \"pipe\");\n      return o;\n    }\n\n# ifdef __EMX__\n\n  /* close some handles that are unnecessary for the child process */\n  CLOSE_ON_EXEC(pipedes[1]);\n  CLOSE_ON_EXEC(pipedes[0]);\n  /* Never use fork()/exec() here! Use spawn() instead in exec_command() */\n  pid = child_execute_job (0, pipedes[1], command_argv, envp);\n  if (pid < 0)\n    perror_with_name (error_prefix, \"spawn\");\n\n# else /* ! __EMX__ */\n\n  pid = vfork ();\n  if (pid < 0)\n    perror_with_name (error_prefix, \"fork\");\n  else if (pid == 0)\n    child_execute_job (0, pipedes[1], command_argv, envp);\n  else\n\n# endif\n\n#endif\n    {\n      /* We are the parent.  */\n      char *buffer;\n      unsigned int maxlen, i;\n      int cc;\n\n      /* Record the PID for reap_children.  */\n      shell_function_pid = pid;\n#ifndef  __MSDOS__\n      shell_function_completed = 0;\n\n      /* Free the storage only the child needed.  */\n      free (command_argv[0]);\n      free ((char *) command_argv);\n\n      /* Close the write side of the pipe.  */\n      (void) close (pipedes[1]);\n#endif\n\n      /* Set up and read from the pipe.  */\n\n      maxlen = 200;\n      buffer = (char *) xmalloc (maxlen + 1);\n\n      /* Read from the pipe until it gets EOF.  */\n      for (i = 0; ; i += cc)\n\t{\n\t  if (i == maxlen)\n\t    {\n\t      maxlen += 512;\n\t      buffer = (char *) xrealloc (buffer, maxlen + 1);\n\t    }\n\n\t  EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i));\n\t  if (cc <= 0)\n\t    break;\n\t}\n      buffer[i] = '\\0';\n\n      /* Close the read side of the pipe.  */\n#ifdef  __MSDOS__\n      if (fpipe)\n\t(void) pclose (fpipe);\n#else\n      (void) close (pipedes[0]);\n#endif\n\n      /* Loop until child_handler or reap_children()  sets\n         shell_function_completed to the status of our child shell.  */\n      while (shell_function_completed == 0)\n\treap_children (1, 0);\n\n      if (batch_filename) {\n\tDB (DB_VERBOSE, (_(\"Cleaning up temporary batch file %s\\n\"),\n                       batch_filename));\n\tremove (batch_filename);\n\tfree (batch_filename);\n      }\n      shell_function_pid = 0;\n\n      /* The child_handler function will set shell_function_completed\n\t to 1 when the child dies normally, or to -1 if it\n\t dies with status 127, which is most likely an exec fail.  */\n\n      if (shell_function_completed == -1)\n\t{\n\t  /* This likely means that the execvp failed, so we should just\n\t     write the error message in the pipe from the child.  */\n\t  fputs (buffer, stderr);\n\t  fflush (stderr);\n\t}\n      else\n\t{\n\t  /* The child finished normally.  Replace all newlines in its output\n\t     with spaces, and put that in the variable output buffer.  */\n\t  fold_newlines (buffer, &i);\n\t  o = variable_buffer_output (o, buffer, i);\n\t}\n\n      free (buffer);\n    }\n\n  return o;\n}\n\n#else\t/* _AMIGA */\n\n/* Do the Amiga version of func_shell.  */\n\nstatic char *\nfunc_shell (char *o, char **argv, const char *funcname)\n{\n  /* Amiga can't fork nor spawn, but I can start a program with\n     redirection of my choice.  However, this means that we\n     don't have an opportunity to reopen stdout to trap it.  Thus,\n     we save our own stdout onto a new descriptor and dup a temp\n     file's descriptor onto our stdout temporarily.  After we\n     spawn the shell program, we dup our own stdout back to the\n     stdout descriptor.  The buffer reading is the same as above,\n     except that we're now reading from a file.  */\n\n#include <dos/dos.h>\n#include <proto/dos.h>\n\n  BPTR child_stdout;\n  char tmp_output[FILENAME_MAX];\n  unsigned int maxlen = 200, i;\n  int cc;\n  char * buffer, * ptr;\n  char ** aptr;\n  int len = 0;\n  char* batch_filename = NULL;\n\n  /* Construct the argument list.  */\n  command_argv = construct_command_argv (argv[0], (char **) NULL,\n                                         (struct file *) 0, &batch_filename);\n  if (command_argv == 0)\n    return o;\n\n  /* Note the mktemp() is a security hole, but this only runs on Amiga.\n     Ideally we would use main.c:open_tmpfile(), but this uses a special\n     Open(), not fopen(), and I'm not familiar enough with the code to mess\n     with it.  */\n  strcpy (tmp_output, \"t:MakeshXXXXXXXX\");\n  mktemp (tmp_output);\n  child_stdout = Open (tmp_output, MODE_NEWFILE);\n\n  for (aptr=command_argv; *aptr; aptr++)\n    len += strlen (*aptr) + 1;\n\n  buffer = xmalloc (len + 1);\n  ptr = buffer;\n\n  for (aptr=command_argv; *aptr; aptr++)\n    {\n      strcpy (ptr, *aptr);\n      ptr += strlen (ptr) + 1;\n      *ptr ++ = ' ';\n      *ptr = 0;\n    }\n\n  ptr[-1] = '\\n';\n\n  Execute (buffer, NULL, child_stdout);\n  free (buffer);\n\n  Close (child_stdout);\n\n  child_stdout = Open (tmp_output, MODE_OLDFILE);\n\n  buffer = xmalloc (maxlen);\n  i = 0;\n  do\n    {\n      if (i == maxlen)\n\t{\n\t  maxlen += 512;\n\t  buffer = (char *) xrealloc (buffer, maxlen + 1);\n\t}\n\n      cc = Read (child_stdout, &buffer[i], maxlen - i);\n      if (cc > 0)\n\ti += cc;\n    } while (cc > 0);\n\n  Close (child_stdout);\n\n  fold_newlines (buffer, &i);\n  o = variable_buffer_output (o, buffer, i);\n  free (buffer);\n  return o;\n}\n#endif  /* _AMIGA */\n#endif  /* !VMS */\n\n#ifdef EXPERIMENTAL\n\n/*\n  equality. Return is string-boolean, ie, the empty string is false.\n */\nstatic char *\nfunc_eq (char *o, char **argv, char *funcname)\n{\n  int result = ! strcmp (argv[0], argv[1]);\n  o = variable_buffer_output (o,  result ? \"1\" : \"\", result);\n  return o;\n}\n\n\n/*\n  string-boolean not operator.\n */\nstatic char *\nfunc_not (char *o, char **argv, char *funcname)\n{\n  char *s = argv[0];\n  int result = 0;\n  while (isspace ((unsigned char)*s))\n    s++;\n  result = ! (*s);\n  o = variable_buffer_output (o,  result ? \"1\" : \"\", result);\n  return o;\n}\n#endif\n\f\n\n/* Return the absolute name of file NAME which does not contain any `.',\n   `..' components nor any repeated path separators ('/').   */\n\nstatic char *\nabspath (const char *name, char *apath)\n{\n  char *dest;\n  const char *start, *end, *apath_limit;\n\n  if (name[0] == '\\0' || apath == NULL)\n    return NULL;\n\n  apath_limit = apath + GET_PATH_MAX;\n\n  if (name[0] != '/')\n    {\n      /* It is unlikely we would make it until here but just to make sure. */\n      if (!starting_directory)\n\treturn NULL;\n\n      strcpy (apath, starting_directory);\n\n      dest = strchr (apath, '\\0');\n    }\n  else\n    {\n      apath[0] = '/';\n      dest = apath + 1;\n    }\n\n  for (start = end = name; *start != '\\0'; start = end)\n    {\n      unsigned long len;\n\n      /* Skip sequence of multiple path-separators.  */\n      while (*start == '/')\n\t++start;\n\n      /* Find end of path component.  */\n      for (end = start; *end != '\\0' && *end != '/'; ++end)\n        ;\n\n      len = end - start;\n\n      if (len == 0)\n\tbreak;\n      else if (len == 1 && start[0] == '.')\n\t/* nothing */;\n      else if (len == 2 && start[0] == '.' && start[1] == '.')\n\t{\n\t  /* Back up to previous component, ignore if at root already.  */\n\t  if (dest > apath + 1)\n\t    while ((--dest)[-1] != '/');\n\t}\n      else\n\t{\n\t  if (dest[-1] != '/')\n            *dest++ = '/';\n\n\t  if (dest + len >= apath_limit)\n            return NULL;\n\n\t  dest = memcpy (dest, start, len);\n          dest += len;\n\t  *dest = '\\0';\n\t}\n    }\n\n  /* Unless it is root strip trailing separator.  */\n  if (dest > apath + 1 && dest[-1] == '/')\n    --dest;\n\n  *dest = '\\0';\n\n  return apath;\n}\n\n\nstatic char *\nfunc_realpath (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* Expand the argument.  */\n  char *p = argv[0];\n  char *path = 0;\n  int doneany = 0;\n  unsigned int len = 0;\n  PATH_VAR (in);\n  PATH_VAR (out);\n\n  while ((path = find_next_token (&p, &len)) != 0)\n    {\n      if (len < GET_PATH_MAX)\n        {\n          strncpy (in, path, len);\n          in[len] = '\\0';\n\n          if\n          (\n#ifdef HAVE_REALPATH\n            realpath (in, out)\n#else\n            abspath (in, out)\n#endif\n          )\n            {\n              o = variable_buffer_output (o, out, strlen (out));\n              o = variable_buffer_output (o, \" \", 1);\n              doneany = 1;\n            }\n        }\n    }\n\n  /* Kill last space.  */\n  if (doneany)\n    --o;\n\n return o;\n}\n\nstatic char *\nfunc_abspath (char *o, char **argv, const char *funcname UNUSED)\n{\n  /* Expand the argument.  */\n  char *p = argv[0];\n  char *path = 0;\n  int doneany = 0;\n  unsigned int len = 0;\n  PATH_VAR (in);\n  PATH_VAR (out);\n\n  while ((path = find_next_token (&p, &len)) != 0)\n    {\n      if (len < GET_PATH_MAX)\n        {\n          strncpy (in, path, len);\n          in[len] = '\\0';\n\n          if (abspath (in, out))\n            {\n              o = variable_buffer_output (o, out, strlen (out));\n              o = variable_buffer_output (o, \" \", 1);\n              doneany = 1;\n            }\n        }\n    }\n\n  /* Kill last space.  */\n  if (doneany)\n    --o;\n\n return o;\n}\n\n/* Lookup table for builtin functions.\n\n   This doesn't have to be sorted; we use a straight lookup.  We might gain\n   some efficiency by moving most often used functions to the start of the\n   table.\n\n   If MAXIMUM_ARGS is 0, that means there is no maximum and all\n   comma-separated values are treated as arguments.\n\n   EXPAND_ARGS means that all arguments should be expanded before invocation.\n   Functions that do namespace tricks (foreach) don't automatically expand.  */\n\nstatic char *func_call PARAMS ((char *o, char **argv, const char *funcname));\n\n\nstatic struct function_table_entry function_table_init[] =\n{\n /* Name/size */                    /* MIN MAX EXP? Function */\n  { STRING_SIZE_TUPLE(\"abspath\"),       0,  1,  1,  func_abspath},\n  { STRING_SIZE_TUPLE(\"addprefix\"),     2,  2,  1,  func_addsuffix_addprefix},\n  { STRING_SIZE_TUPLE(\"addsuffix\"),     2,  2,  1,  func_addsuffix_addprefix},\n  { STRING_SIZE_TUPLE(\"basename\"),      0,  1,  1,  func_basename_dir},\n  { STRING_SIZE_TUPLE(\"dir\"),           0,  1,  1,  func_basename_dir},\n  { STRING_SIZE_TUPLE(\"notdir\"),        0,  1,  1,  func_notdir_suffix},\n  { STRING_SIZE_TUPLE(\"subst\"),         3,  3,  1,  func_subst},\n  { STRING_SIZE_TUPLE(\"suffix\"),        0,  1,  1,  func_notdir_suffix},\n  { STRING_SIZE_TUPLE(\"filter\"),        2,  2,  1,  func_filter_filterout},\n  { STRING_SIZE_TUPLE(\"filter-out\"),    2,  2,  1,  func_filter_filterout},\n  { STRING_SIZE_TUPLE(\"findstring\"),    2,  2,  1,  func_findstring},\n  { STRING_SIZE_TUPLE(\"firstword\"),     0,  1,  1,  func_firstword},\n  { STRING_SIZE_TUPLE(\"flavor\"),        0,  1,  1,  func_flavor},\n  { STRING_SIZE_TUPLE(\"join\"),          2,  2,  1,  func_join},\n  { STRING_SIZE_TUPLE(\"lastword\"),      0,  1,  1,  func_lastword},\n  { STRING_SIZE_TUPLE(\"patsubst\"),      3,  3,  1,  func_patsubst},\n  { STRING_SIZE_TUPLE(\"realpath\"),      0,  1,  1,  func_realpath},\n  { STRING_SIZE_TUPLE(\"shell\"),         0,  1,  1,  func_shell},\n  { STRING_SIZE_TUPLE(\"sort\"),          0,  1,  1,  func_sort},\n  { STRING_SIZE_TUPLE(\"strip\"),         0,  1,  1,  func_strip},\n  { STRING_SIZE_TUPLE(\"wildcard\"),      0,  1,  1,  func_wildcard},\n  { STRING_SIZE_TUPLE(\"word\"),          2,  2,  1,  func_word},\n  { STRING_SIZE_TUPLE(\"wordlist\"),      3,  3,  1,  func_wordlist},\n  { STRING_SIZE_TUPLE(\"words\"),         0,  1,  1,  func_words},\n  { STRING_SIZE_TUPLE(\"origin\"),        0,  1,  1,  func_origin},\n  { STRING_SIZE_TUPLE(\"foreach\"),       3,  3,  0,  func_foreach},\n  { STRING_SIZE_TUPLE(\"call\"),          1,  0,  1,  func_call},\n  { STRING_SIZE_TUPLE(\"info\"),          0,  1,  1,  func_error},\n  { STRING_SIZE_TUPLE(\"error\"),         0,  1,  1,  func_error},\n  { STRING_SIZE_TUPLE(\"warning\"),       0,  1,  1,  func_error},\n  { STRING_SIZE_TUPLE(\"if\"),            2,  3,  0,  func_if},\n  { STRING_SIZE_TUPLE(\"or\"),            1,  0,  0,  func_or},\n  { STRING_SIZE_TUPLE(\"and\"),           1,  0,  0,  func_and},\n  { STRING_SIZE_TUPLE(\"value\"),         0,  1,  1,  func_value},\n  { STRING_SIZE_TUPLE(\"eval\"),          0,  1,  1,  func_eval},\n#ifdef EXPERIMENTAL\n  { STRING_SIZE_TUPLE(\"eq\"),            2,  2,  1,  func_eq},\n  { STRING_SIZE_TUPLE(\"not\"),           0,  1,  1,  func_not},\n#endif\n};\n\n#define FUNCTION_TABLE_ENTRIES (sizeof (function_table_init) / sizeof (struct function_table_entry))\n\f\n\n/* These must come after the definition of function_table.  */\n\nstatic char *\nexpand_builtin_function (char *o, int argc, char **argv,\n                         const struct function_table_entry *entry_p)\n{\n  if (argc < (int)entry_p->minimum_args)\n    fatal (*expanding_var,\n           _(\"insufficient number of arguments (%d) to function `%s'\"),\n           argc, entry_p->name);\n\n  /* I suppose technically some function could do something with no\n     arguments, but so far none do, so just test it for all functions here\n     rather than in each one.  We can change it later if necessary.  */\n\n  if (!argc)\n    return o;\n\n  if (!entry_p->func_ptr)\n    fatal (*expanding_var,\n           _(\"unimplemented on this platform: function `%s'\"), entry_p->name);\n\n  return entry_p->func_ptr (o, argv, entry_p->name);\n}\n\n/* Check for a function invocation in *STRINGP.  *STRINGP points at the\n   opening ( or { and is not null-terminated.  If a function invocation\n   is found, expand it into the buffer at *OP, updating *OP, incrementing\n   *STRINGP past the reference and returning nonzero.  If not, return zero.  */\n\nint\nhandle_function (char **op, char **stringp)\n{\n  const struct function_table_entry *entry_p;\n  char openparen = (*stringp)[0];\n  char closeparen = openparen == '(' ? ')' : '}';\n  char *beg;\n  char *end;\n  int count = 0;\n  register char *p;\n  char **argv, **argvp;\n  int nargs;\n\n  beg = *stringp + 1;\n\n  entry_p = lookup_function (beg);\n\n  if (!entry_p)\n    return 0;\n\n  /* We found a builtin function.  Find the beginning of its arguments (skip\n     whitespace after the name).  */\n\n  beg = next_token (beg + entry_p->len);\n\n  /* Find the end of the function invocation, counting nested use of\n     whichever kind of parens we use.  Since we're looking, count commas\n     to get a rough estimate of how many arguments we might have.  The\n     count might be high, but it'll never be low.  */\n\n  for (nargs=1, end=beg; *end != '\\0'; ++end)\n    if (*end == ',')\n      ++nargs;\n    else if (*end == openparen)\n      ++count;\n    else if (*end == closeparen && --count < 0)\n      break;\n\n  if (count >= 0)\n    fatal (*expanding_var,\n\t   _(\"unterminated call to function `%s': missing `%c'\"),\n\t   entry_p->name, closeparen);\n\n  *stringp = end;\n\n  /* Get some memory to store the arg pointers.  */\n  argvp = argv = (char **) alloca (sizeof (char *) * (nargs + 2));\n\n  /* Chop the string into arguments, then a nul.  As soon as we hit\n     MAXIMUM_ARGS (if it's >0) assume the rest of the string is part of the\n     last argument.\n\n     If we're expanding, store pointers to the expansion of each one.  If\n     not, make a duplicate of the string and point into that, nul-terminating\n     each argument.  */\n\n  if (!entry_p->expand_args)\n    {\n      int len = end - beg;\n\n      p = xmalloc (len+1);\n      memcpy (p, beg, len);\n      p[len] = '\\0';\n      beg = p;\n      end = beg + len;\n    }\n\n  for (p=beg, nargs=0; p <= end; ++argvp)\n    {\n      char *next;\n\n      ++nargs;\n\n      if (nargs == entry_p->maximum_args\n          || (! (next = find_next_argument (openparen, closeparen, p, end))))\n        next = end;\n\n      if (entry_p->expand_args)\n        *argvp = expand_argument (p, next);\n      else\n        {\n          *argvp = p;\n          *next = '\\0';\n        }\n\n      p = next + 1;\n    }\n  *argvp = NULL;\n\n  /* Finally!  Run the function...  */\n  *op = expand_builtin_function (*op, nargs, argv, entry_p);\n\n  /* Free memory.  */\n  if (entry_p->expand_args)\n    for (argvp=argv; *argvp != 0; ++argvp)\n      free (*argvp);\n  else\n    free (beg);\n\n  return 1;\n}\n\f\n\n/* User-defined functions.  Expand the first argument as either a builtin\n   function or a make variable, in the context of the rest of the arguments\n   assigned to $1, $2, ... $N.  $0 is the name of the function.  */\n\nstatic char *\nfunc_call (char *o, char **argv, const char *funcname UNUSED)\n{\n  static int max_args = 0;\n  char *fname;\n  char *cp;\n  char *body;\n  int flen;\n  int i;\n  int saved_args;\n  const struct function_table_entry *entry_p;\n  struct variable *v;\n\n  /* There is no way to define a variable with a space in the name, so strip\n     leading and trailing whitespace as a favor to the user.  */\n  fname = argv[0];\n  while (*fname != '\\0' && isspace ((unsigned char)*fname))\n    ++fname;\n\n  cp = fname + strlen (fname) - 1;\n  while (cp > fname && isspace ((unsigned char)*cp))\n    --cp;\n  cp[1] = '\\0';\n\n  /* Calling nothing is a no-op */\n  if (*fname == '\\0')\n    return o;\n\n  /* Are we invoking a builtin function?  */\n\n  entry_p = lookup_function (fname);\n\n  if (entry_p)\n    {\n      /* How many arguments do we have?  */\n      for (i=0; argv[i+1]; ++i)\n  \t;\n\n      return expand_builtin_function (o, i, argv+1, entry_p);\n    }\n\n  /* Not a builtin, so the first argument is the name of a variable to be\n     expanded and interpreted as a function.  Find it.  */\n  flen = strlen (fname);\n\n  v = lookup_variable (fname, flen);\n\n  if (v == 0)\n    warn_undefined (fname, flen);\n\n  if (v == 0 || *v->value == '\\0')\n    return o;\n\n  body = (char *) alloca (flen + 4);\n  body[0] = '$';\n  body[1] = '(';\n  memcpy (body + 2, fname, flen);\n  body[flen+2] = ')';\n  body[flen+3] = '\\0';\n\n  /* Set up arguments $(1) .. $(N).  $(0) is the function name.  */\n\n  push_new_variable_scope ();\n\n  for (i=0; *argv; ++i, ++argv)\n    {\n      char num[11];\n\n      sprintf (num, \"%d\", i);\n      define_variable (num, strlen (num), *argv, o_automatic, 0);\n    }\n\n  /* If the number of arguments we have is < max_args, it means we're inside\n     a recursive invocation of $(call ...).  Fill in the remaining arguments\n     in the new scope with the empty value, to hide them from this\n     invocation.  */\n\n  for (; i < max_args; ++i)\n    {\n      char num[11];\n\n      sprintf (num, \"%d\", i);\n      define_variable (num, strlen (num), \"\", o_automatic, 0);\n    }\n\n  /* Expand the body in the context of the arguments, adding the result to\n     the variable buffer.  */\n\n  v->exp_count = EXP_COUNT_MAX;\n\n  saved_args = max_args;\n  max_args = i;\n  o = variable_expand_string (o, body, flen+3);\n  max_args = saved_args;\n\n  v->exp_count = 0;\n\n  pop_variable_scope ();\n\n  return o + strlen (o);\n}\n\nvoid\nhash_init_function_table (void)\n{\n  hash_init (&function_table, FUNCTION_TABLE_ENTRIES * 2,\n\t     function_table_entry_hash_1, function_table_entry_hash_2,\n\t     function_table_entry_hash_cmp);\n  hash_load (&function_table, function_table_init,\n\t     FUNCTION_TABLE_ENTRIES, sizeof (struct function_table_entry));\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/getloadavg.c",
    "content": "/* Get the system load averages.\nCopyright (C) 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,\n1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free\nSoftware Foundation, Inc.\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Compile-time symbols that this file uses:\n\n   HAVE_PSTAT_GETDYNAMIC\tDefine this if your system has the\n                                pstat_getdynamic function.  I think it\n\t\t\t\tis unique to HPUX9.  The best way to get the\n\t\t\t\tdefinition is through the AC_FUNC_GETLOADAVG\n\t\t\t\tmacro that comes with autoconf 2.13 or newer.\n\t\t\t\tIf that isn't an option, then just put\n\t\t\t\tAC_CHECK_FUNCS(pstat_getdynamic) in your\n\t\t\t\tconfigure.in file.\n   FIXUP_KERNEL_SYMBOL_ADDR()\tAdjust address in returned struct nlist.\n   KERNEL_FILE\t\t\tPathname of the kernel to nlist.\n   LDAV_CVT()\t\t\tScale the load average from the kernel.\n\t\t\t\tReturns a double.\n   LDAV_SYMBOL\t\t\tName of kernel symbol giving load average.\n   LOAD_AVE_TYPE\t\tType of the load average array in the kernel.\n\t\t\t\tMust be defined unless one of\n\t\t\t\tapollo, DGUX, NeXT, or UMAX is defined;\n                                or we have libkstat;\n\t\t\t\totherwise, no load average is available.\n   NLIST_STRUCT\t\t\tInclude nlist.h, not a.out.h, and\n\t\t\t\tthe nlist n_name element is a pointer,\n\t\t\t\tnot an array.\n   HAVE_STRUCT_NLIST_N_UN_N_NAME struct nlist has an n_un member, not n_name.\n   LINUX_LDAV_FILE\t\t[__linux__]: File containing load averages.\n\n   Specific system predefines this file uses, aside from setting\n   default values if not emacs:\n\n   apollo\n   BSD\t\t\t\tReal BSD, not just BSD-like.\n   convex\n   DGUX\n   eunice\t\t\tUNIX emulator under VMS.\n   hpux\n   __MSDOS__\t\t\tNo-op for MSDOS.\n   NeXT\n   sgi\n   sequent\t\t\tSequent Dynix 3.x.x (BSD)\n   _SEQUENT_\t\t\tSequent DYNIX/ptx 1.x.x (SYSV)\n   sony_news                    NEWS-OS (works at least for 4.1C)\n   UMAX\n   UMAX4_3\n   VMS\n   WINDOWS32\t\t\tNo-op for Windows95/NT.\n   __linux__\t\t\tLinux: assumes /proc filesystem mounted.\n   \t\t\t\tSupport from Michael K. Johnson.\n   __NetBSD__\t\t\tNetBSD: assumes /kern filesystem mounted.\n\n   In addition, to avoid nesting many #ifdefs, we internally set\n   LDAV_DONE to indicate that the load average has been computed.\n\n   We also #define LDAV_PRIVILEGED if a program will require\n   special installation to be able to call getloadavg.  */\n\n/* This should always be first.  */\n#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n#include <sys/types.h>\n\n/* Both the Emacs and non-Emacs sections want this.  Some\n   configuration files' definitions for the LOAD_AVE_CVT macro (like\n   sparc.h's) use macros like FSCALE, defined here.  */\n#if defined (unix) || defined (__unix)\n# include <sys/param.h>\n#endif\n\n\n/* Exclude all the code except the test program at the end\n   if the system has its own `getloadavg' function.\n\n   The declaration of `errno' is needed by the test program\n   as well as the function itself, so it comes first.  */\n\n#include <errno.h>\n\n#ifndef errno\nextern int errno;\n#endif\n\n#if HAVE_LOCALE_H\n# include <locale.h>\n#endif\n#if !HAVE_SETLOCALE\n# define setlocale(Category, Locale) /* empty */\n#endif\n\n#ifndef HAVE_GETLOADAVG\n\n\n/* The existing Emacs configuration files define a macro called\n   LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and\n   returns the load average multiplied by 100.  What we actually want\n   is a macro called LDAV_CVT, which returns the load average as an\n   unmultiplied double.\n\n   For backwards compatibility, we'll define LDAV_CVT in terms of\n   LOAD_AVE_CVT, but future machine config files should just define\n   LDAV_CVT directly.  */\n\n# if !defined(LDAV_CVT) && defined(LOAD_AVE_CVT)\n#  define LDAV_CVT(n) (LOAD_AVE_CVT (n) / 100.0)\n# endif\n\n# if !defined (BSD) && defined (ultrix)\n/* Ultrix behaves like BSD on Vaxen.  */\n#  define BSD\n# endif\n\n# ifdef NeXT\n/* NeXT in the 2.{0,1,2} releases defines BSD in <sys/param.h>, which\n   conflicts with the definition understood in this file, that this\n   really is BSD. */\n#  undef BSD\n\n/* NeXT defines FSCALE in <sys/param.h>.  However, we take FSCALE being\n   defined to mean that the nlist method should be used, which is not true.  */\n#  undef FSCALE\n# endif\n\n/* Same issues as for NeXT apply to the HURD-based GNU system.  */\n# ifdef __GNU__\n#  undef BSD\n#  undef FSCALE\n# endif /* __GNU__ */\n\n/* Set values that are different from the defaults, which are\n   set a little farther down with #ifndef.  */\n\n\n/* Some shorthands.  */\n\n# if defined (HPUX) && !defined (hpux)\n#  define hpux\n# endif\n\n# if defined (__hpux) && !defined (hpux)\n#  define hpux\n# endif\n\n# if defined (__sun) && !defined (sun)\n#  define sun\n# endif\n\n# if defined(hp300) && !defined(hpux)\n#  define MORE_BSD\n# endif\n\n# if defined(ultrix) && defined(mips)\n#  define decstation\n# endif\n\n# if defined (__SVR4) && !defined (SVR4)\n#  define SVR4\n# endif\n\n# if (defined(sun) && defined(SVR4)) || defined (SOLARIS2)\n#  define SUNOS_5\n# endif\n\n# if defined (__osf__) && (defined (__alpha) || defined (__alpha__))\n#  define OSF_ALPHA\n#  include <sys/mbuf.h>\n#  include <sys/socket.h>\n#  include <net/route.h>\n#  include <sys/table.h>\n# endif\n\n# if defined (__osf__) && (defined (mips) || defined (__mips__))\n#  define OSF_MIPS\n#  include <sys/table.h>\n# endif\n\n/* UTek's /bin/cc on the 4300 has no architecture specific cpp define by\n   default, but _MACH_IND_SYS_TYPES is defined in <sys/types.h>.  Combine\n   that with a couple of other things and we'll have a unique match.  */\n# if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES)\n#  define tek4300\t\t\t/* Define by emacs, but not by other users.  */\n# endif\n\n/* AC_FUNC_GETLOADAVG thinks QNX is SVR4, but it isn't. */\n# if defined(__QNX__)\n#  undef SVR4\n# endif\n\n/* VAX C can't handle multi-line #ifs, or lines longer than 256 chars.  */\n# ifndef LOAD_AVE_TYPE\n\n#  ifdef MORE_BSD\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef sun\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef decstation\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef _SEQUENT_\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef sgi\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef SVR4\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef sony_news\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef sequent\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef OSF_ALPHA\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  if defined (ardent) && defined (titan)\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef tek4300\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  if defined(alliant) && defined(i860) /* Alliant FX/2800 */\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef _AIX\n#   define LOAD_AVE_TYPE long\n#  endif\n\n#  ifdef convex\n#   define LOAD_AVE_TYPE double\n#   ifndef LDAV_CVT\n#    define LDAV_CVT(n) (n)\n#   endif\n#  endif\n\n# endif /* No LOAD_AVE_TYPE.  */\n\n# ifdef OSF_ALPHA\n/* <sys/param.h> defines an incorrect value for FSCALE on Alpha OSF/1,\n   according to ghazi@noc.rutgers.edu.  */\n#  undef FSCALE\n#  define FSCALE 1024.0\n# endif\n\n# if defined(alliant) && defined(i860) /* Alliant FX/2800 */\n/* <sys/param.h> defines an incorrect value for FSCALE on an\n   Alliant FX/2800 Concentrix 2.2, according to ghazi@noc.rutgers.edu.  */\n#  undef FSCALE\n#  define FSCALE 100.0\n# endif\n\n\n# ifndef\tFSCALE\n\n/* SunOS and some others define FSCALE in sys/param.h.  */\n\n#  ifdef MORE_BSD\n#   define FSCALE 2048.0\n#  endif\n\n#  if defined(MIPS) || defined(SVR4) || defined(decstation)\n#   define FSCALE 256\n#  endif\n\n#  if defined (sgi) || defined (sequent)\n/* Sometimes both MIPS and sgi are defined, so FSCALE was just defined\n   above under #ifdef MIPS.  But we want the sgi value.  */\n#   undef FSCALE\n#   define\tFSCALE 1000.0\n#  endif\n\n#  if defined (ardent) && defined (titan)\n#   define FSCALE 65536.0\n#  endif\n\n#  ifdef tek4300\n#   define FSCALE 100.0\n#  endif\n\n#  ifdef _AIX\n#   define FSCALE 65536.0\n#  endif\n\n# endif\t/* Not FSCALE.  */\n\n# if !defined (LDAV_CVT) && defined (FSCALE)\n#  define\tLDAV_CVT(n) (((double) (n)) / FSCALE)\n# endif\n\n\n# if defined(sgi) || (defined(mips) && !defined(BSD))\n#  define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31))\n# endif\n\n\n# if !defined (KERNEL_FILE) && defined (sequent)\n#  define KERNEL_FILE \"/dynix\"\n# endif\n\n# if !defined (KERNEL_FILE) && defined (hpux)\n#  define KERNEL_FILE \"/hp-ux\"\n# endif\n\n# if !defined(KERNEL_FILE) && (defined(_SEQUENT_) || defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || (defined (ardent) && defined (titan)))\n#  define KERNEL_FILE \"/unix\"\n# endif\n\n\n# if !defined (LDAV_SYMBOL) && defined (alliant)\n#  define LDAV_SYMBOL \"_Loadavg\"\n# endif\n\n# if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX))\n#  define LDAV_SYMBOL \"avenrun\"\n# endif\n\n# ifdef HAVE_UNISTD_H\n#  include <unistd.h>\n# endif\n\n# include <stdio.h>\n\n/* LOAD_AVE_TYPE should only get defined if we're going to use the\n   nlist method.  */\n# if !defined(LOAD_AVE_TYPE) && (defined(BSD) || defined(LDAV_CVT) || defined(KERNEL_FILE) || defined(LDAV_SYMBOL)) && !defined(__riscos__)\n#  define LOAD_AVE_TYPE double\n# endif\n\n# ifdef LOAD_AVE_TYPE\n\n#  ifndef VMS\n#   ifndef __linux__\n#    ifdef HAVE_NLIST_H\n#     include <nlist.h>\n#    else\n#     include <a.out.h>\n#    endif\n\n#    ifdef SUNOS_5\n#     include <fcntl.h>\n#     include <kvm.h>\n#     include <kstat.h>\n#    endif\n\n#    if defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC)\n#     include <sys/pstat.h>\n#    endif\n\n#    ifndef KERNEL_FILE\n#     define KERNEL_FILE \"/vmunix\"\n#    endif /* KERNEL_FILE */\n\n#    ifndef LDAV_SYMBOL\n#     define LDAV_SYMBOL \"_avenrun\"\n#    endif /* LDAV_SYMBOL */\n#   endif /* __linux__ */\n\n#  else /* VMS */\n\n#   ifndef eunice\n#    include <iodef.h>\n#    include <descrip.h>\n#   else /* eunice */\n#    include <vms/iodef.h>\n#   endif /* eunice */\n#  endif /* VMS */\n\n#  ifndef LDAV_CVT\n#   define LDAV_CVT(n) ((double) (n))\n#  endif /* !LDAV_CVT */\n\n# endif /* LOAD_AVE_TYPE */\n\n# if defined(__GNU__) && !defined (NeXT)\n/* Note that NeXT Openstep defines __GNU__ even though it should not.  */\n/* GNU system acts much like NeXT, for load average purposes,\n   but not exactly.  */\n#  define NeXT\n#  define host_self mach_host_self\n# endif\n\n# ifdef NeXT\n#  ifdef HAVE_MACH_MACH_H\n#   include <mach/mach.h>\n#  else\n#   include <mach.h>\n#  endif\n# endif /* NeXT */\n\n# ifdef sgi\n#  include <sys/sysmp.h>\n# endif /* sgi */\n\n# ifdef UMAX\n#  include <stdio.h>\n#  include <signal.h>\n#  include <sys/time.h>\n#  include <sys/wait.h>\n#  include <sys/syscall.h>\n\n#  ifdef UMAX_43\n#   include <machine/cpu.h>\n#   include <inq_stats/statistics.h>\n#   include <inq_stats/sysstats.h>\n#   include <inq_stats/cpustats.h>\n#   include <inq_stats/procstats.h>\n#  else /* Not UMAX_43.  */\n#   include <sys/sysdefs.h>\n#   include <sys/statistics.h>\n#   include <sys/sysstats.h>\n#   include <sys/cpudefs.h>\n#   include <sys/cpustats.h>\n#   include <sys/procstats.h>\n#  endif /* Not UMAX_43.  */\n# endif /* UMAX */\n\n# ifdef DGUX\n#  include <sys/dg_sys_info.h>\n# endif\n\n# if defined(HAVE_FCNTL_H) || defined(_POSIX_VERSION)\n#  include <fcntl.h>\n# else\n#  include <sys/file.h>\n# endif\n\f\n\n/* Avoid static vars inside a function since in HPUX they dump as pure.  */\n\n# ifdef NeXT\nstatic processor_set_t default_set;\nstatic int getloadavg_initialized;\n# endif /* NeXT */\n\n# ifdef UMAX\nstatic unsigned int cpus = 0;\nstatic unsigned int samples;\n# endif /* UMAX */\n\n# ifdef DGUX\nstatic struct dg_sys_info_load_info load_info;\t/* what-a-mouthful! */\n# endif /* DGUX */\n\n#if !defined(HAVE_LIBKSTAT) && defined(LOAD_AVE_TYPE)\n/* File descriptor open to /dev/kmem or VMS load ave driver.  */\nstatic int channel;\n/* Nonzero iff channel is valid.  */\nstatic int getloadavg_initialized;\n/* Offset in kmem to seek to read load average, or 0 means invalid.  */\nstatic long offset;\n\n#if !defined(VMS) && !defined(sgi) && !defined(__linux__)\nstatic struct nlist nl[2];\n#endif /* Not VMS or sgi */\n\n#ifdef SUNOS_5\nstatic kvm_t *kd;\n#endif /* SUNOS_5 */\n\n#endif /* LOAD_AVE_TYPE && !HAVE_LIBKSTAT */\n\f\n/* Put the 1 minute, 5 minute and 15 minute load averages\n   into the first NELEM elements of LOADAVG.\n   Return the number written (never more than 3, but may be less than NELEM),\n   or -1 if an error occurred.  */\n\nint\ngetloadavg (double loadavg[], int nelem)\n{\n  int elem = 0;\t\t\t/* Return value.  */\n\n# ifdef NO_GET_LOAD_AVG\n#  define LDAV_DONE\n  /* Set errno to zero to indicate that there was no particular error;\n     this function just can't work at all on this system.  */\n  errno = 0;\n  elem = -1;\n# endif\n\n# if !defined (LDAV_DONE) && defined (HAVE_LIBKSTAT)\n/* Use libkstat because we don't have to be root.  */\n#  define LDAV_DONE\n  kstat_ctl_t *kc;\n  kstat_t *ksp;\n  kstat_named_t *kn;\n\n  kc = kstat_open ();\n  if (kc == 0)\n    return -1;\n  ksp = kstat_lookup (kc, \"unix\", 0, \"system_misc\");\n  if (ksp == 0 )\n    return -1;\n  if (kstat_read (kc, ksp, 0) == -1)\n    return -1;\n\n\n  kn = kstat_data_lookup (ksp, \"avenrun_1min\");\n  if (kn == 0)\n    {\n      /* Return -1 if no load average information is available.  */\n      nelem = 0;\n      elem = -1;\n    }\n\n  if (nelem >= 1)\n    loadavg[elem++] = (double) kn->value.ul/FSCALE;\n\n  if (nelem >= 2)\n    {\n      kn = kstat_data_lookup (ksp, \"avenrun_5min\");\n      if (kn != 0)\n\t{\n\t  loadavg[elem++] = (double) kn->value.ul/FSCALE;\n\n\t  if (nelem >= 3)\n\t    {\n\t      kn = kstat_data_lookup (ksp, \"avenrun_15min\");\n\t      if (kn != 0)\n\t\tloadavg[elem++] = (double) kn->value.ul/FSCALE;\n\t    }\n\t}\n    }\n\n  kstat_close (kc);\n# endif /* HAVE_LIBKSTAT */\n\n# if !defined (LDAV_DONE) && defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC)\n/* Use pstat_getdynamic() because we don't have to be root.  */\n#  define LDAV_DONE\n#  undef LOAD_AVE_TYPE\n\n  struct pst_dynamic dyn_info;\n  if (pstat_getdynamic (&dyn_info, sizeof (dyn_info), 0, 0) < 0)\n    return -1;\n  if (nelem > 0)\n    loadavg[elem++] = dyn_info.psd_avg_1_min;\n  if (nelem > 1)\n    loadavg[elem++] = dyn_info.psd_avg_5_min;\n  if (nelem > 2)\n    loadavg[elem++] = dyn_info.psd_avg_15_min;\n\n# endif /* hpux && HAVE_PSTAT_GETDYNAMIC */\n\n# if !defined (LDAV_DONE) && defined (__linux__)\n#  define LDAV_DONE\n#  undef LOAD_AVE_TYPE\n\n#  ifndef LINUX_LDAV_FILE\n#   define LINUX_LDAV_FILE \"/proc/loadavg\"\n#  endif\n\n  char ldavgbuf[40];\n  double load_ave[3];\n  int fd, count;\n\n  fd = open (LINUX_LDAV_FILE, O_RDONLY);\n  if (fd == -1)\n    return -1;\n  count = read (fd, ldavgbuf, 40);\n  (void) close (fd);\n  if (count <= 0)\n    return -1;\n\n  /* The following sscanf must use the C locale.  */\n  setlocale (LC_NUMERIC, \"C\");\n  count = sscanf (ldavgbuf, \"%lf %lf %lf\",\n\t\t  &load_ave[0], &load_ave[1], &load_ave[2]);\n  setlocale (LC_NUMERIC, \"\");\n  if (count < 1)\n    return -1;\n\n  for (elem = 0; elem < nelem && elem < count; elem++)\n    loadavg[elem] = load_ave[elem];\n\n  return elem;\n\n# endif /* __linux__ */\n\n# if !defined (LDAV_DONE) && defined (__NetBSD__)\n#  define LDAV_DONE\n#  undef LOAD_AVE_TYPE\n\n#  ifndef NETBSD_LDAV_FILE\n#   define NETBSD_LDAV_FILE \"/kern/loadavg\"\n#  endif\n\n  unsigned long int load_ave[3], scale;\n  int count;\n  FILE *fp;\n\n  fp = fopen (NETBSD_LDAV_FILE, \"r\");\n  if (fp == NULL)\n    return -1;\n  count = fscanf (fp, \"%lu %lu %lu %lu\\n\",\n\t\t  &load_ave[0], &load_ave[1], &load_ave[2],\n\t\t  &scale);\n  (void) fclose (fp);\n  if (count != 4)\n    return -1;\n\n  for (elem = 0; elem < nelem; elem++)\n    loadavg[elem] = (double) load_ave[elem] / (double) scale;\n\n  return elem;\n\n# endif /* __NetBSD__ */\n\n# if !defined (LDAV_DONE) && defined (NeXT)\n#  define LDAV_DONE\n  /* The NeXT code was adapted from iscreen 3.2.  */\n\n  host_t host;\n  struct processor_set_basic_info info;\n  unsigned info_count;\n\n  /* We only know how to get the 1-minute average for this system,\n     so even if the caller asks for more than 1, we only return 1.  */\n\n  if (!getloadavg_initialized)\n    {\n      if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS)\n\tgetloadavg_initialized = 1;\n    }\n\n  if (getloadavg_initialized)\n    {\n      info_count = PROCESSOR_SET_BASIC_INFO_COUNT;\n      if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host,\n\t\t\t      (processor_set_info_t) &info, &info_count)\n\t  != KERN_SUCCESS)\n\tgetloadavg_initialized = 0;\n      else\n\t{\n\t  if (nelem > 0)\n\t    loadavg[elem++] = (double) info.load_average / LOAD_SCALE;\n\t}\n    }\n\n  if (!getloadavg_initialized)\n    return -1;\n# endif /* NeXT */\n\n# if !defined (LDAV_DONE) && defined (UMAX)\n#  define LDAV_DONE\n/* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not\n   have a /dev/kmem.  Information about the workings of the running kernel\n   can be gathered with inq_stats system calls.\n   We only know how to get the 1-minute average for this system.  */\n\n  struct proc_summary proc_sum_data;\n  struct stat_descr proc_info;\n  double load;\n  register unsigned int i, j;\n\n  if (cpus == 0)\n    {\n      register unsigned int c, i;\n      struct cpu_config conf;\n      struct stat_descr desc;\n\n      desc.sd_next = 0;\n      desc.sd_subsys = SUBSYS_CPU;\n      desc.sd_type = CPUTYPE_CONFIG;\n      desc.sd_addr = (char *) &conf;\n      desc.sd_size = sizeof conf;\n\n      if (inq_stats (1, &desc))\n\treturn -1;\n\n      c = 0;\n      for (i = 0; i < conf.config_maxclass; ++i)\n\t{\n\t  struct class_stats stats;\n\t  bzero ((char *) &stats, sizeof stats);\n\n\t  desc.sd_type = CPUTYPE_CLASS;\n\t  desc.sd_objid = i;\n\t  desc.sd_addr = (char *) &stats;\n\t  desc.sd_size = sizeof stats;\n\n\t  if (inq_stats (1, &desc))\n\t    return -1;\n\n\t  c += stats.class_numcpus;\n\t}\n      cpus = c;\n      samples = cpus < 2 ? 3 : (2 * cpus / 3);\n    }\n\n  proc_info.sd_next = 0;\n  proc_info.sd_subsys = SUBSYS_PROC;\n  proc_info.sd_type = PROCTYPE_SUMMARY;\n  proc_info.sd_addr = (char *) &proc_sum_data;\n  proc_info.sd_size = sizeof (struct proc_summary);\n  proc_info.sd_sizeused = 0;\n\n  if (inq_stats (1, &proc_info) != 0)\n    return -1;\n\n  load = proc_sum_data.ps_nrunnable;\n  j = 0;\n  for (i = samples - 1; i > 0; --i)\n    {\n      load += proc_sum_data.ps_nrun[j];\n      if (j++ == PS_NRUNSIZE)\n\tj = 0;\n    }\n\n  if (nelem > 0)\n    loadavg[elem++] = load / samples / cpus;\n# endif /* UMAX */\n\n# if !defined (LDAV_DONE) && defined (DGUX)\n#  define LDAV_DONE\n  /* This call can return -1 for an error, but with good args\n     it's not supposed to fail.  The first argument is for no\n     apparent reason of type `long int *'.  */\n  dg_sys_info ((long int *) &load_info,\n\t       DG_SYS_INFO_LOAD_INFO_TYPE,\n\t       DG_SYS_INFO_LOAD_VERSION_0);\n\n  if (nelem > 0)\n    loadavg[elem++] = load_info.one_minute;\n  if (nelem > 1)\n    loadavg[elem++] = load_info.five_minute;\n  if (nelem > 2)\n    loadavg[elem++] = load_info.fifteen_minute;\n# endif /* DGUX */\n\n# if !defined (LDAV_DONE) && defined (apollo)\n#  define LDAV_DONE\n/* Apollo code from lisch@mentorg.com (Ray Lischner).\n\n   This system call is not documented.  The load average is obtained as\n   three long integers, for the load average over the past minute,\n   five minutes, and fifteen minutes.  Each value is a scaled integer,\n   with 16 bits of integer part and 16 bits of fraction part.\n\n   I'm not sure which operating system first supported this system call,\n   but I know that SR10.2 supports it.  */\n\n  extern void proc1_$get_loadav ();\n  unsigned long load_ave[3];\n\n  proc1_$get_loadav (load_ave);\n\n  if (nelem > 0)\n    loadavg[elem++] = load_ave[0] / 65536.0;\n  if (nelem > 1)\n    loadavg[elem++] = load_ave[1] / 65536.0;\n  if (nelem > 2)\n    loadavg[elem++] = load_ave[2] / 65536.0;\n# endif /* apollo */\n\n# if !defined (LDAV_DONE) && defined (OSF_MIPS)\n#  define LDAV_DONE\n\n  struct tbl_loadavg load_ave;\n  table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave));\n  loadavg[elem++]\n    = (load_ave.tl_lscale == 0\n       ? load_ave.tl_avenrun.d[0]\n       : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale));\n# endif\t/* OSF_MIPS */\n\n# if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32))\n#  define LDAV_DONE\n\n  /* A faithful emulation is going to have to be saved for a rainy day.  */\n  for ( ; elem < nelem; elem++)\n    {\n      loadavg[elem] = 0.0;\n    }\n# endif  /* __MSDOS__ || WINDOWS32 */\n\n# if !defined (LDAV_DONE) && defined (OSF_ALPHA)\n#  define LDAV_DONE\n\n  struct tbl_loadavg load_ave;\n  table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave));\n  for (elem = 0; elem < nelem; elem++)\n    loadavg[elem]\n      = (load_ave.tl_lscale == 0\n       ? load_ave.tl_avenrun.d[elem]\n       : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale));\n# endif /* OSF_ALPHA */\n\n# if !defined (LDAV_DONE) && defined (VMS)\n  /* VMS specific code -- read from the Load Ave driver.  */\n\n  LOAD_AVE_TYPE load_ave[3];\n  static int getloadavg_initialized = 0;\n#  ifdef eunice\n  struct\n  {\n    int dsc$w_length;\n    char *dsc$a_pointer;\n  } descriptor;\n#  endif\n\n  /* Ensure that there is a channel open to the load ave device.  */\n  if (!getloadavg_initialized)\n    {\n      /* Attempt to open the channel.  */\n#  ifdef eunice\n      descriptor.dsc$w_length = 18;\n      descriptor.dsc$a_pointer = \"$$VMS_LOAD_AVERAGE\";\n#  else\n      $DESCRIPTOR (descriptor, \"LAV0:\");\n#  endif\n      if (sys$assign (&descriptor, &channel, 0, 0) & 1)\n\tgetloadavg_initialized = 1;\n    }\n\n  /* Read the load average vector.  */\n  if (getloadavg_initialized\n      && !(sys$qiow (0, channel, IO$_READVBLK, 0, 0, 0,\n\t\t     load_ave, 12, 0, 0, 0, 0) & 1))\n    {\n      sys$dassgn (channel);\n      getloadavg_initialized = 0;\n    }\n\n  if (!getloadavg_initialized)\n    return -1;\n# endif /* VMS */\n\n# if !defined (LDAV_DONE) && defined(LOAD_AVE_TYPE) && !defined(VMS)\n\n  /* UNIX-specific code -- read the average from /dev/kmem.  */\n\n#  define LDAV_PRIVILEGED\t\t/* This code requires special installation.  */\n\n  LOAD_AVE_TYPE load_ave[3];\n\n  /* Get the address of LDAV_SYMBOL.  */\n  if (offset == 0)\n    {\n#  ifndef sgi\n#   ifndef NLIST_STRUCT\n      strcpy (nl[0].n_name, LDAV_SYMBOL);\n      strcpy (nl[1].n_name, \"\");\n#   else /* NLIST_STRUCT */\n#    ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME\n      nl[0].n_un.n_name = LDAV_SYMBOL;\n      nl[1].n_un.n_name = 0;\n#    else /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */\n      nl[0].n_name = LDAV_SYMBOL;\n      nl[1].n_name = 0;\n#    endif /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */\n#   endif /* NLIST_STRUCT */\n\n#   ifndef SUNOS_5\n      if (\n#    if !(defined (_AIX) && !defined (ps2))\n\t  nlist (KERNEL_FILE, nl)\n#    else  /* _AIX */\n\t  knlist (nl, 1, sizeof (nl[0]))\n#    endif\n\t  >= 0)\n\t  /* Omit \"&& nl[0].n_type != 0 \" -- it breaks on Sun386i.  */\n\t  {\n#    ifdef FIXUP_KERNEL_SYMBOL_ADDR\n\t    FIXUP_KERNEL_SYMBOL_ADDR (nl);\n#    endif\n\t    offset = nl[0].n_value;\n\t  }\n#   endif /* !SUNOS_5 */\n#  else  /* sgi */\n      int ldav_off;\n\n      ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN);\n      if (ldav_off != -1)\n\toffset = (long) ldav_off & 0x7fffffff;\n#  endif /* sgi */\n    }\n\n  /* Make sure we have /dev/kmem open.  */\n  if (!getloadavg_initialized)\n    {\n#  ifndef SUNOS_5\n      channel = open (\"/dev/kmem\", 0);\n      if (channel >= 0)\n\t{\n\t  /* Set the channel to close on exec, so it does not\n\t     litter any child's descriptor table.  */\n#   ifdef F_SETFD\n#    ifndef FD_CLOEXEC\n#     define FD_CLOEXEC 1\n#    endif\n\t  (void) fcntl (channel, F_SETFD, FD_CLOEXEC);\n#   endif\n\t  getloadavg_initialized = 1;\n\t}\n#  else /* SUNOS_5 */\n      /* We pass 0 for the kernel, corefile, and swapfile names\n\t to use the currently running kernel.  */\n      kd = kvm_open (0, 0, 0, O_RDONLY, 0);\n      if (kd != 0)\n\t{\n\t  /* nlist the currently running kernel.  */\n\t  kvm_nlist (kd, nl);\n\t  offset = nl[0].n_value;\n\t  getloadavg_initialized = 1;\n\t}\n#  endif /* SUNOS_5 */\n    }\n\n  /* If we can, get the load average values.  */\n  if (offset && getloadavg_initialized)\n    {\n      /* Try to read the load.  */\n#  ifndef SUNOS_5\n      if (lseek (channel, offset, 0) == -1L\n\t  || read (channel, (char *) load_ave, sizeof (load_ave))\n\t  != sizeof (load_ave))\n\t{\n\t  close (channel);\n\t  getloadavg_initialized = 0;\n\t}\n#  else  /* SUNOS_5 */\n      if (kvm_read (kd, offset, (char *) load_ave, sizeof (load_ave))\n\t  != sizeof (load_ave))\n        {\n          kvm_close (kd);\n          getloadavg_initialized = 0;\n\t}\n#  endif /* SUNOS_5 */\n    }\n\n  if (offset == 0 || !getloadavg_initialized)\n    return -1;\n# endif /* LOAD_AVE_TYPE and not VMS */\n\n# if !defined (LDAV_DONE) && defined (LOAD_AVE_TYPE) /* Including VMS.  */\n  if (nelem > 0)\n    loadavg[elem++] = LDAV_CVT (load_ave[0]);\n  if (nelem > 1)\n    loadavg[elem++] = LDAV_CVT (load_ave[1]);\n  if (nelem > 2)\n    loadavg[elem++] = LDAV_CVT (load_ave[2]);\n\n#  define LDAV_DONE\n# endif /* !LDAV_DONE && LOAD_AVE_TYPE */\n\n# ifdef LDAV_DONE\n  return elem;\n# else\n  /* Set errno to zero to indicate that there was no particular error;\n     this function just can't work at all on this system.  */\n  errno = 0;\n  return -1;\n# endif\n}\n\n#endif /* ! HAVE_GETLOADAVG */\n\f\n#ifdef TEST\n#include \"make.h\"\n\nint\nmain (int argc, char **argv)\n{\n  int naptime = 0;\n\n  if (argc > 1)\n    naptime = atoi (argv[1]);\n\n  while (1)\n    {\n      double avg[3];\n      int loads;\n\n      errno = 0;\t\t/* Don't be misled if it doesn't set errno.  */\n      loads = getloadavg (avg, 3);\n      if (loads == -1)\n\t{\n\t  perror (\"Error getting load average\");\n\t  exit (1);\n\t}\n      if (loads > 0)\n\tprintf (\"1-minute: %f  \", avg[0]);\n      if (loads > 1)\n\tprintf (\"5-minute: %f  \", avg[1]);\n      if (loads > 2)\n\tprintf (\"15-minute: %f  \", avg[2]);\n      if (loads > 0)\n\tputchar ('\\n');\n\n      if (naptime == 0)\n\tbreak;\n      sleep (naptime);\n    }\n\n  exit (0);\n}\n#endif /* TEST */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/getopt.c",
    "content": "/* Getopt for GNU.\nNOTE: getopt is now part of the C library, so if you don't know what\n\"Keep this file name-space clean\" means, talk to drepper@gnu.org\nbefore changing it!\n\nCopyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\nNOTE: The canonical source of this file is maintained with the GNU C Library.\nBugs can be reported to bug-glibc@gnu.org.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2, or (at your option) any\nlater version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.\n   Ditto for AIX 3.2 and <stdlib.h>.  */\n#ifndef _NO_PROTO\n# define _NO_PROTO\n#endif\n\n#ifdef HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n#if !defined __STDC__ || !__STDC__\n/* This is a separate conditional since some stdc systems\n   reject `defined (const)'.  */\n# ifndef const\n#  define const\n# endif\n#endif\n\n#include <stdio.h>\n\n/* Comment out all this code if we are using the GNU C Library, and are not\n   actually compiling the library itself.  This code is part of the GNU C\n   Library, but also included in many other GNU distributions.  Compiling\n   and linking in this code is a waste when using the GNU C library\n   (especially if it is a shared library).  Rather than having every GNU\n   program understand `configure --with-gnu-libc' and omit the object files,\n   it is simpler to just do this in the source for each such file.  */\n\n#define GETOPT_INTERFACE_VERSION 2\n#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2\n# include <gnu-versions.h>\n# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION\n#  define ELIDE_CODE\n# endif\n#endif\n\n#ifndef ELIDE_CODE\n\n\n/* This needs to come after some library #include\n   to get __GNU_LIBRARY__ defined.  */\n#ifdef\t__GNU_LIBRARY__\n/* Don't include stdlib.h for non-GNU C libraries because some of them\n   contain conflicting prototypes for getopt.  */\n# include <stdlib.h>\n# include <unistd.h>\n#endif\t/* GNU C library.  */\n\n#ifdef VMS\n# include <unixlib.h>\n# if HAVE_STRING_H - 0\n#  include <string.h>\n# endif\n#endif\n\n/* This is for other GNU distributions with internationalized messages.\n   When compiling libc, the _ macro is predefined.  */\n#include \"gettext.h\"\n#define _(msgid)    gettext (msgid)\n\n\n/* This version of `getopt' appears to the caller like standard Unix `getopt'\n   but it behaves differently for the user, since it allows the user\n   to intersperse the options with the other arguments.\n\n   As `getopt' works, it permutes the elements of ARGV so that,\n   when it is done, all the options precede everything else.  Thus\n   all application programs are extended to handle flexible argument order.\n\n   Setting the environment variable POSIXLY_CORRECT disables permutation.\n   Then the behavior is completely standard.\n\n   GNU application programs can use a third alternative mode in which\n   they can distinguish the relative order of options and other arguments.  */\n\n#include \"getopt.h\"\n\n/* For communication from `getopt' to the caller.\n   When `getopt' finds an option that takes an argument,\n   the argument value is returned here.\n   Also, when `ordering' is RETURN_IN_ORDER,\n   each non-option ARGV-element is returned here.  */\n\nchar *optarg = NULL;\n\n/* Index in ARGV of the next element to be scanned.\n   This is used for communication to and from the caller\n   and for communication between successive calls to `getopt'.\n\n   On entry to `getopt', zero means this is the first call; initialize.\n\n   When `getopt' returns -1, this is the index of the first of the\n   non-option elements that the caller should itself scan.\n\n   Otherwise, `optind' communicates from one call to the next\n   how much of ARGV has been scanned so far.  */\n\n/* 1003.2 says this must be 1 before any call.  */\nint optind = 1;\n\n/* Formerly, initialization of getopt depended on optind==0, which\n   causes problems with re-calling getopt as programs generally don't\n   know that. */\n\nint __getopt_initialized = 0;\n\n/* The next char to be scanned in the option-element\n   in which the last option character we returned was found.\n   This allows us to pick up the scan where we left off.\n\n   If this is zero, or a null string, it means resume the scan\n   by advancing to the next ARGV-element.  */\n\nstatic char *nextchar;\n\n/* Callers store zero here to inhibit the error message\n   for unrecognized options.  */\n\nint opterr = 1;\n\n/* Set to an option character which was unrecognized.\n   This must be initialized on some systems to avoid linking in the\n   system's own getopt implementation.  */\n\nint optopt = '?';\n\n/* Describe how to deal with options that follow non-option ARGV-elements.\n\n   If the caller did not specify anything,\n   the default is REQUIRE_ORDER if the environment variable\n   POSIXLY_CORRECT is defined, PERMUTE otherwise.\n\n   REQUIRE_ORDER means don't recognize them as options;\n   stop option processing when the first non-option is seen.\n   This is what Unix does.\n   This mode of operation is selected by either setting the environment\n   variable POSIXLY_CORRECT, or using `+' as the first character\n   of the list of option characters.\n\n   PERMUTE is the default.  We permute the contents of ARGV as we scan,\n   so that eventually all the non-options are at the end.  This allows options\n   to be given in any order, even with programs that were not written to\n   expect this.\n\n   RETURN_IN_ORDER is an option available to programs that were written\n   to expect options and other ARGV-elements in any order and that care about\n   the ordering of the two.  We describe each non-option ARGV-element\n   as if it were the argument of an option with character code 1.\n   Using `-' as the first character of the list of option characters\n   selects this mode of operation.\n\n   The special argument `--' forces an end of option-scanning regardless\n   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only\n   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */\n\nstatic enum\n{\n  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER\n} ordering;\n\n/* Value of POSIXLY_CORRECT environment variable.  */\nstatic char *posixly_correct;\n\f\n#ifdef\t__GNU_LIBRARY__\n/* We want to avoid inclusion of string.h with non-GNU libraries\n   because there are many ways it can cause trouble.\n   On some systems, it contains special magic macros that don't work\n   in GCC.  */\n# include <string.h>\n# define my_index\tstrchr\n#else\n\n# if HAVE_STRING_H\n#  include <string.h>\n# else\n#  include <strings.h>\n# endif\n\n/* Avoid depending on library functions or files\n   whose names are inconsistent.  */\n\n#ifndef getenv\nextern char *getenv ();\n#endif\n\nstatic char *\nmy_index (const char *str, int chr)\n{\n  while (*str)\n    {\n      if (*str == chr)\n\treturn (char *) str;\n      str++;\n    }\n  return 0;\n}\n\n/* If using GCC, we can safely declare strlen this way.\n   If not using GCC, it is ok not to declare it.  */\n#ifdef __GNUC__\n/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.\n   That was relevant to code that was here before.  */\n# if (!defined __STDC__ || !__STDC__) && !defined strlen\n/* gcc with -traditional declares the built-in strlen to return int,\n   and has done so at least since version 2.4.5. -- rms.  */\nextern int strlen (const char *);\n# endif /* not __STDC__ */\n#endif /* __GNUC__ */\n\n#endif /* not __GNU_LIBRARY__ */\n\f\n/* Handle permutation of arguments.  */\n\n/* Describe the part of ARGV that contains non-options that have\n   been skipped.  `first_nonopt' is the index in ARGV of the first of them;\n   `last_nonopt' is the index after the last of them.  */\n\nstatic int first_nonopt;\nstatic int last_nonopt;\n\n#ifdef _LIBC\n/* Bash 2.0 gives us an environment variable containing flags\n   indicating ARGV elements that should not be considered arguments.  */\n\n/* Defined in getopt_init.c  */\nextern char *__getopt_nonoption_flags;\n\nstatic int nonoption_flags_max_len;\nstatic int nonoption_flags_len;\n\nstatic int original_argc;\nstatic char *const *original_argv;\n\n/* Make sure the environment variable bash 2.0 puts in the environment\n   is valid for the getopt call we must make sure that the ARGV passed\n   to getopt is that one passed to the process.  */\nstatic void __attribute__ ((unused))\nstore_args_and_env (int argc, char *const *argv)\n{\n  /* XXX This is no good solution.  We should rather copy the args so\n     that we can compare them later.  But we must not use malloc(3).  */\n  original_argc = argc;\n  original_argv = argv;\n}\n# ifdef text_set_element\ntext_set_element (__libc_subinit, store_args_and_env);\n# endif /* text_set_element */\n\n# define SWAP_FLAGS(ch1, ch2) \\\n  if (nonoption_flags_len > 0)\t\t\t\t\t\t      \\\n    {\t\t\t\t\t\t\t\t\t      \\\n      char __tmp = __getopt_nonoption_flags[ch1];\t\t\t      \\\n      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];\t      \\\n      __getopt_nonoption_flags[ch2] = __tmp;\t\t\t\t      \\\n    }\n#else\t/* !_LIBC */\n# define SWAP_FLAGS(ch1, ch2)\n#endif\t/* _LIBC */\n\n/* Exchange two adjacent subsequences of ARGV.\n   One subsequence is elements [first_nonopt,last_nonopt)\n   which contains all the non-options that have been skipped so far.\n   The other is elements [last_nonopt,optind), which contains all\n   the options processed since those non-options were skipped.\n\n   `first_nonopt' and `last_nonopt' are relocated so that they describe\n   the new indices of the non-options in ARGV after they are moved.  */\n\n#if defined __STDC__ && __STDC__\nstatic void exchange (char **);\n#endif\n\nstatic void\nexchange (char **argv)\n{\n  int bottom = first_nonopt;\n  int middle = last_nonopt;\n  int top = optind;\n  char *tem;\n\n  /* Exchange the shorter segment with the far end of the longer segment.\n     That puts the shorter segment into the right place.\n     It leaves the longer segment in the right place overall,\n     but it consists of two parts that need to be swapped next.  */\n\n#ifdef _LIBC\n  /* First make sure the handling of the `__getopt_nonoption_flags'\n     string can work normally.  Our top argument must be in the range\n     of the string.  */\n  if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)\n    {\n      /* We must extend the array.  The user plays games with us and\n\t presents new arguments.  */\n      char *new_str = malloc (top + 1);\n      if (new_str == NULL)\n\tnonoption_flags_len = nonoption_flags_max_len = 0;\n      else\n\t{\n\t  memset (__mempcpy (new_str, __getopt_nonoption_flags,\n\t\t\t     nonoption_flags_max_len),\n\t\t  '\\0', top + 1 - nonoption_flags_max_len);\n\t  nonoption_flags_max_len = top + 1;\n\t  __getopt_nonoption_flags = new_str;\n\t}\n    }\n#endif\n\n  while (top > middle && middle > bottom)\n    {\n      if (top - middle > middle - bottom)\n\t{\n\t  /* Bottom segment is the short one.  */\n\t  int len = middle - bottom;\n\t  register int i;\n\n\t  /* Swap it with the top part of the top segment.  */\n\t  for (i = 0; i < len; i++)\n\t    {\n\t      tem = argv[bottom + i];\n\t      argv[bottom + i] = argv[top - (middle - bottom) + i];\n\t      argv[top - (middle - bottom) + i] = tem;\n\t      SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);\n\t    }\n\t  /* Exclude the moved bottom segment from further swapping.  */\n\t  top -= len;\n\t}\n      else\n\t{\n\t  /* Top segment is the short one.  */\n\t  int len = top - middle;\n\t  register int i;\n\n\t  /* Swap it with the bottom part of the bottom segment.  */\n\t  for (i = 0; i < len; i++)\n\t    {\n\t      tem = argv[bottom + i];\n\t      argv[bottom + i] = argv[middle + i];\n\t      argv[middle + i] = tem;\n\t      SWAP_FLAGS (bottom + i, middle + i);\n\t    }\n\t  /* Exclude the moved top segment from further swapping.  */\n\t  bottom += len;\n\t}\n    }\n\n  /* Update records for the slots the non-options now occupy.  */\n\n  first_nonopt += (optind - last_nonopt);\n  last_nonopt = optind;\n}\n\n/* Initialize the internal data when the first call is made.  */\n\n#if defined __STDC__ && __STDC__\nstatic const char *_getopt_initialize (int, char *const *, const char *);\n#endif\nstatic const char *\n_getopt_initialize (int argc, char *const *argv, const char *optstring)\n{\n  /* Start processing options with ARGV-element 1 (since ARGV-element 0\n     is the program name); the sequence of previously skipped\n     non-option ARGV-elements is empty.  */\n\n  first_nonopt = last_nonopt = optind;\n\n  nextchar = NULL;\n\n  posixly_correct = getenv (\"POSIXLY_CORRECT\");\n\n  /* Determine how to handle the ordering of options and nonoptions.  */\n\n  if (optstring[0] == '-')\n    {\n      ordering = RETURN_IN_ORDER;\n      ++optstring;\n    }\n  else if (optstring[0] == '+')\n    {\n      ordering = REQUIRE_ORDER;\n      ++optstring;\n    }\n  else if (posixly_correct != NULL)\n    ordering = REQUIRE_ORDER;\n  else\n    ordering = PERMUTE;\n\n#ifdef _LIBC\n  if (posixly_correct == NULL\n      && argc == original_argc && argv == original_argv)\n    {\n      if (nonoption_flags_max_len == 0)\n\t{\n\t  if (__getopt_nonoption_flags == NULL\n\t      || __getopt_nonoption_flags[0] == '\\0')\n\t    nonoption_flags_max_len = -1;\n\t  else\n\t    {\n\t      const char *orig_str = __getopt_nonoption_flags;\n\t      int len = nonoption_flags_max_len = strlen (orig_str);\n\t      if (nonoption_flags_max_len < argc)\n\t\tnonoption_flags_max_len = argc;\n\t      __getopt_nonoption_flags =\n\t\t(char *) malloc (nonoption_flags_max_len);\n\t      if (__getopt_nonoption_flags == NULL)\n\t\tnonoption_flags_max_len = -1;\n\t      else\n\t\tmemset (__mempcpy (__getopt_nonoption_flags, orig_str, len),\n\t\t\t'\\0', nonoption_flags_max_len - len);\n\t    }\n\t}\n      nonoption_flags_len = nonoption_flags_max_len;\n    }\n  else\n    nonoption_flags_len = 0;\n#endif\n\n  return optstring;\n}\n\f\n/* Scan elements of ARGV (whose length is ARGC) for option characters\n   given in OPTSTRING.\n\n   If an element of ARGV starts with '-', and is not exactly \"-\" or \"--\",\n   then it is an option element.  The characters of this element\n   (aside from the initial '-') are option characters.  If `getopt'\n   is called repeatedly, it returns successively each of the option characters\n   from each of the option elements.\n\n   If `getopt' finds another option character, it returns that character,\n   updating `optind' and `nextchar' so that the next call to `getopt' can\n   resume the scan with the following option character or ARGV-element.\n\n   If there are no more option characters, `getopt' returns -1.\n   Then `optind' is the index in ARGV of the first ARGV-element\n   that is not an option.  (The ARGV-elements have been permuted\n   so that those that are not options now come last.)\n\n   OPTSTRING is a string containing the legitimate option characters.\n   If an option character is seen that is not listed in OPTSTRING,\n   return '?' after printing an error message.  If you set `opterr' to\n   zero, the error message is suppressed but we still return '?'.\n\n   If a char in OPTSTRING is followed by a colon, that means it wants an arg,\n   so the following text in the same ARGV-element, or the text of the following\n   ARGV-element, is returned in `optarg'.  Two colons mean an option that\n   wants an optional arg; if there is text in the current ARGV-element,\n   it is returned in `optarg', otherwise `optarg' is set to zero.\n\n   If OPTSTRING starts with `-' or `+', it requests different methods of\n   handling the non-option ARGV-elements.\n   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.\n\n   Long-named options begin with `--' instead of `-'.\n   Their names may be abbreviated as long as the abbreviation is unique\n   or is an exact match for some defined option.  If they have an\n   argument, it follows the option name in the same ARGV-element, separated\n   from the option name by a `=', or else the in next ARGV-element.\n   When `getopt' finds a long-named option, it returns 0 if that option's\n   `flag' field is nonzero, the value of the option's `val' field\n   if the `flag' field is zero.\n\n   The elements of ARGV aren't really const, because we permute them.\n   But we pretend they're const in the prototype to be compatible\n   with other systems.\n\n   LONGOPTS is a vector of `struct option' terminated by an\n   element containing a name which is zero.\n\n   LONGIND returns the index in LONGOPT of the long-named option found.\n   It is only valid when a long-named option has been found by the most\n   recent call.\n\n   If LONG_ONLY is nonzero, '-' as well as '--' can introduce\n   long-named options.  */\n\nint\n_getopt_internal (int argc, char *const *argv, const char *optstring,\n                  const struct option *longopts, int *longind, int long_only)\n{\n  optarg = NULL;\n\n  if (optind == 0 || !__getopt_initialized)\n    {\n      if (optind == 0)\n\toptind = 1;\t/* Don't scan ARGV[0], the program name.  */\n      optstring = _getopt_initialize (argc, argv, optstring);\n      __getopt_initialized = 1;\n    }\n\n  /* Test whether ARGV[optind] points to a non-option argument.\n     Either it does not have option syntax, or there is an environment flag\n     from the shell indicating it is not an option.  The later information\n     is only used when the used in the GNU libc.  */\n#ifdef _LIBC\n# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\\0'\t      \\\n\t\t      || (optind < nonoption_flags_len\t\t\t      \\\n\t\t\t  && __getopt_nonoption_flags[optind] == '1'))\n#else\n# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\\0')\n#endif\n\n  if (nextchar == NULL || *nextchar == '\\0')\n    {\n      /* Advance to the next ARGV-element.  */\n\n      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been\n\t moved back by the user (who may also have changed the arguments).  */\n      if (last_nonopt > optind)\n\tlast_nonopt = optind;\n      if (first_nonopt > optind)\n\tfirst_nonopt = optind;\n\n      if (ordering == PERMUTE)\n\t{\n\t  /* If we have just processed some options following some non-options,\n\t     exchange them so that the options come first.  */\n\n\t  if (first_nonopt != last_nonopt && last_nonopt != optind)\n\t    exchange ((char **) argv);\n\t  else if (last_nonopt != optind)\n\t    first_nonopt = optind;\n\n\t  /* Skip any additional non-options\n\t     and extend the range of non-options previously skipped.  */\n\n\t  while (optind < argc && NONOPTION_P)\n\t    optind++;\n\t  last_nonopt = optind;\n\t}\n\n      /* The special ARGV-element `--' means premature end of options.\n\t Skip it like a null option,\n\t then exchange with previous non-options as if it were an option,\n\t then skip everything else like a non-option.  */\n\n      if (optind != argc && !strcmp (argv[optind], \"--\"))\n\t{\n\t  optind++;\n\n\t  if (first_nonopt != last_nonopt && last_nonopt != optind)\n\t    exchange ((char **) argv);\n\t  else if (first_nonopt == last_nonopt)\n\t    first_nonopt = optind;\n\t  last_nonopt = argc;\n\n\t  optind = argc;\n\t}\n\n      /* If we have done all the ARGV-elements, stop the scan\n\t and back over any non-options that we skipped and permuted.  */\n\n      if (optind == argc)\n\t{\n\t  /* Set the next-arg-index to point at the non-options\n\t     that we previously skipped, so the caller will digest them.  */\n\t  if (first_nonopt != last_nonopt)\n\t    optind = first_nonopt;\n\t  return -1;\n\t}\n\n      /* If we have come to a non-option and did not permute it,\n\t either stop the scan or describe it to the caller and pass it by.  */\n\n      if (NONOPTION_P)\n\t{\n\t  if (ordering == REQUIRE_ORDER)\n\t    return -1;\n\t  optarg = argv[optind++];\n\t  return 1;\n\t}\n\n      /* We have found another option-ARGV-element.\n\t Skip the initial punctuation.  */\n\n      nextchar = (argv[optind] + 1\n\t\t  + (longopts != NULL && argv[optind][1] == '-'));\n    }\n\n  /* Decode the current option-ARGV-element.  */\n\n  /* Check whether the ARGV-element is a long option.\n\n     If long_only and the ARGV-element has the form \"-f\", where f is\n     a valid short option, don't consider it an abbreviated form of\n     a long option that starts with f.  Otherwise there would be no\n     way to give the -f short option.\n\n     On the other hand, if there's a long option \"fubar\" and\n     the ARGV-element is \"-fu\", do consider that an abbreviation of\n     the long option, just like \"--fu\", and not \"-f\" with arg \"u\".\n\n     This distinction seems to be the most useful approach.  */\n\n  if (longopts != NULL\n      && (argv[optind][1] == '-'\n\t  || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))\n    {\n      char *nameend;\n      const struct option *p;\n      const struct option *pfound = NULL;\n      int exact = 0;\n      int ambig = 0;\n      int indfound = -1;\n      int option_index;\n\n      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)\n\t/* Do nothing.  */ ;\n\n      /* Test all long options for either exact match\n\t or abbreviated matches.  */\n      for (p = longopts, option_index = 0; p->name; p++, option_index++)\n\tif (!strncmp (p->name, nextchar, nameend - nextchar))\n\t  {\n\t    if ((unsigned int) (nameend - nextchar)\n\t\t== (unsigned int) strlen (p->name))\n\t      {\n\t\t/* Exact match found.  */\n\t\tpfound = p;\n\t\tindfound = option_index;\n\t\texact = 1;\n\t\tbreak;\n\t      }\n\t    else if (pfound == NULL)\n\t      {\n\t\t/* First nonexact match found.  */\n\t\tpfound = p;\n\t\tindfound = option_index;\n\t      }\n\t    else\n\t      /* Second or later nonexact match found.  */\n\t      ambig = 1;\n\t  }\n\n      if (ambig && !exact)\n\t{\n\t  if (opterr)\n\t    fprintf (stderr, _(\"%s: option `%s' is ambiguous\\n\"),\n\t\t     argv[0], argv[optind]);\n\t  nextchar += strlen (nextchar);\n\t  optind++;\n\t  optopt = 0;\n\t  return '?';\n\t}\n\n      if (pfound != NULL)\n\t{\n\t  option_index = indfound;\n\t  optind++;\n\t  if (*nameend)\n\t    {\n\t      /* Don't test has_arg with >, because some C compilers don't\n\t\t allow it to be used on enums.  */\n\t      if (pfound->has_arg)\n\t\toptarg = nameend + 1;\n\t      else\n\t\t{\n\t\t  if (opterr)\n\t\t   if (argv[optind - 1][1] == '-')\n\t\t    /* --option */\n\t\t    fprintf (stderr,\n\t\t     _(\"%s: option `--%s' doesn't allow an argument\\n\"),\n\t\t     argv[0], pfound->name);\n\t\t   else\n\t\t    /* +option or -option */\n\t\t    fprintf (stderr,\n\t\t     _(\"%s: option `%c%s' doesn't allow an argument\\n\"),\n\t\t     argv[0], argv[optind - 1][0], pfound->name);\n\n\t\t  nextchar += strlen (nextchar);\n\n\t\t  optopt = pfound->val;\n\t\t  return '?';\n\t\t}\n\t    }\n\t  else if (pfound->has_arg == 1)\n\t    {\n\t      if (optind < argc)\n\t\toptarg = argv[optind++];\n\t      else\n\t\t{\n\t\t  if (opterr)\n\t\t    fprintf (stderr,\n\t\t\t   _(\"%s: option `%s' requires an argument\\n\"),\n\t\t\t   argv[0], argv[optind - 1]);\n\t\t  nextchar += strlen (nextchar);\n\t\t  optopt = pfound->val;\n\t\t  return optstring[0] == ':' ? ':' : '?';\n\t\t}\n\t    }\n\t  nextchar += strlen (nextchar);\n\t  if (longind != NULL)\n\t    *longind = option_index;\n\t  if (pfound->flag)\n\t    {\n\t      *(pfound->flag) = pfound->val;\n\t      return 0;\n\t    }\n\t  return pfound->val;\n\t}\n\n      /* Can't find it as a long option.  If this is not getopt_long_only,\n\t or the option starts with '--' or is not a valid short\n\t option, then it's an error.\n\t Otherwise interpret it as a short option.  */\n      if (!long_only || argv[optind][1] == '-'\n\t  || my_index (optstring, *nextchar) == NULL)\n\t{\n\t  if (opterr)\n\t    {\n\t      if (argv[optind][1] == '-')\n\t\t/* --option */\n\t\tfprintf (stderr, _(\"%s: unrecognized option `--%s'\\n\"),\n\t\t\t argv[0], nextchar);\n\t      else\n\t\t/* +option or -option */\n\t\tfprintf (stderr, _(\"%s: unrecognized option `%c%s'\\n\"),\n\t\t\t argv[0], argv[optind][0], nextchar);\n\t    }\n\t  nextchar = (char *) \"\";\n\t  optind++;\n\t  optopt = 0;\n\t  return '?';\n\t}\n    }\n\n  /* Look at and handle the next short option-character.  */\n\n  {\n    char c = *nextchar++;\n    char *temp = my_index (optstring, c);\n\n    /* Increment `optind' when we start to process its last character.  */\n    if (*nextchar == '\\0')\n      ++optind;\n\n    if (temp == NULL || c == ':')\n      {\n\tif (opterr)\n\t  {\n\t    if (posixly_correct)\n\t      /* 1003.2 specifies the format of this message.  */\n\t      fprintf (stderr, _(\"%s: illegal option -- %c\\n\"),\n\t\t       argv[0], c);\n\t    else\n\t      fprintf (stderr, _(\"%s: invalid option -- %c\\n\"),\n\t\t       argv[0], c);\n\t  }\n\toptopt = c;\n\treturn '?';\n      }\n    /* Convenience. Treat POSIX -W foo same as long option --foo */\n    if (temp[0] == 'W' && temp[1] == ';')\n      {\n\tchar *nameend;\n\tconst struct option *p;\n\tconst struct option *pfound = NULL;\n\tint exact = 0;\n\tint ambig = 0;\n\tint indfound = 0;\n\tint option_index;\n\n\t/* This is an option that requires an argument.  */\n\tif (*nextchar != '\\0')\n\t  {\n\t    optarg = nextchar;\n\t    /* If we end this ARGV-element by taking the rest as an arg,\n\t       we must advance to the next element now.  */\n\t    optind++;\n\t  }\n\telse if (optind == argc)\n\t  {\n\t    if (opterr)\n\t      {\n\t\t/* 1003.2 specifies the format of this message.  */\n\t\tfprintf (stderr, _(\"%s: option requires an argument -- %c\\n\"),\n\t\t\t argv[0], c);\n\t      }\n\t    optopt = c;\n\t    if (optstring[0] == ':')\n\t      c = ':';\n\t    else\n\t      c = '?';\n\t    return c;\n\t  }\n\telse\n\t  /* We already incremented `optind' once;\n\t     increment it again when taking next ARGV-elt as argument.  */\n\t  optarg = argv[optind++];\n\n\t/* optarg is now the argument, see if it's in the\n\t   table of longopts.  */\n\n\tfor (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)\n\t  /* Do nothing.  */ ;\n\n\t/* Test all long options for either exact match\n\t   or abbreviated matches.  */\n\tfor (p = longopts, option_index = 0; p->name; p++, option_index++)\n\t  if (!strncmp (p->name, nextchar, nameend - nextchar))\n\t    {\n\t      if ((unsigned int) (nameend - nextchar) == strlen (p->name))\n\t\t{\n\t\t  /* Exact match found.  */\n\t\t  pfound = p;\n\t\t  indfound = option_index;\n\t\t  exact = 1;\n\t\t  break;\n\t\t}\n\t      else if (pfound == NULL)\n\t\t{\n\t\t  /* First nonexact match found.  */\n\t\t  pfound = p;\n\t\t  indfound = option_index;\n\t\t}\n\t      else\n\t\t/* Second or later nonexact match found.  */\n\t\tambig = 1;\n\t    }\n\tif (ambig && !exact)\n\t  {\n\t    if (opterr)\n\t      fprintf (stderr, _(\"%s: option `-W %s' is ambiguous\\n\"),\n\t\t       argv[0], argv[optind]);\n\t    nextchar += strlen (nextchar);\n\t    optind++;\n\t    return '?';\n\t  }\n\tif (pfound != NULL)\n\t  {\n\t    option_index = indfound;\n\t    if (*nameend)\n\t      {\n\t\t/* Don't test has_arg with >, because some C compilers don't\n\t\t   allow it to be used on enums.  */\n\t\tif (pfound->has_arg)\n\t\t  optarg = nameend + 1;\n\t\telse\n\t\t  {\n\t\t    if (opterr)\n\t\t      fprintf (stderr, _(\"\\\n%s: option `-W %s' doesn't allow an argument\\n\"),\n\t\t\t       argv[0], pfound->name);\n\n\t\t    nextchar += strlen (nextchar);\n\t\t    return '?';\n\t\t  }\n\t      }\n\t    else if (pfound->has_arg == 1)\n\t      {\n\t\tif (optind < argc)\n\t\t  optarg = argv[optind++];\n\t\telse\n\t\t  {\n\t\t    if (opterr)\n\t\t      fprintf (stderr,\n\t\t\t       _(\"%s: option `%s' requires an argument\\n\"),\n\t\t\t       argv[0], argv[optind - 1]);\n\t\t    nextchar += strlen (nextchar);\n\t\t    return optstring[0] == ':' ? ':' : '?';\n\t\t  }\n\t      }\n\t    nextchar += strlen (nextchar);\n\t    if (longind != NULL)\n\t      *longind = option_index;\n\t    if (pfound->flag)\n\t      {\n\t\t*(pfound->flag) = pfound->val;\n\t\treturn 0;\n\t      }\n\t    return pfound->val;\n\t  }\n\t  nextchar = NULL;\n\t  return 'W';\t/* Let the application handle it.   */\n      }\n    if (temp[1] == ':')\n      {\n\tif (temp[2] == ':')\n\t  {\n\t    /* This is an option that accepts an argument optionally.  */\n\t    if (*nextchar != '\\0')\n\t      {\n\t\toptarg = nextchar;\n\t\toptind++;\n\t      }\n\t    else\n\t      optarg = NULL;\n\t    nextchar = NULL;\n\t  }\n\telse\n\t  {\n\t    /* This is an option that requires an argument.  */\n\t    if (*nextchar != '\\0')\n\t      {\n\t\toptarg = nextchar;\n\t\t/* If we end this ARGV-element by taking the rest as an arg,\n\t\t   we must advance to the next element now.  */\n\t\toptind++;\n\t      }\n\t    else if (optind == argc)\n\t      {\n\t\tif (opterr)\n\t\t  {\n\t\t    /* 1003.2 specifies the format of this message.  */\n\t\t    fprintf (stderr,\n\t\t\t   _(\"%s: option requires an argument -- %c\\n\"),\n\t\t\t   argv[0], c);\n\t\t  }\n\t\toptopt = c;\n\t\tif (optstring[0] == ':')\n\t\t  c = ':';\n\t\telse\n\t\t  c = '?';\n\t      }\n\t    else\n\t      /* We already incremented `optind' once;\n\t\t increment it again when taking next ARGV-elt as argument.  */\n\t      optarg = argv[optind++];\n\t    nextchar = NULL;\n\t  }\n      }\n    return c;\n  }\n}\n\nint\ngetopt (int argc, char *const *argv, const char *optstring)\n{\n  return _getopt_internal (argc, argv, optstring,\n\t\t\t   (const struct option *) 0,\n\t\t\t   (int *) 0,\n\t\t\t   0);\n}\n\n#endif\t/* Not ELIDE_CODE.  */\n\f\n#ifdef TEST\n\n/* Compile with -DTEST to make an executable for use in testing\n   the above definition of `getopt'.  */\n\nint\nmain (int argc, char **argv)\n{\n  int c;\n  int digit_optind = 0;\n\n  while (1)\n    {\n      int this_option_optind = optind ? optind : 1;\n\n      c = getopt (argc, argv, \"abc:d:0123456789\");\n      if (c == -1)\n\tbreak;\n\n      switch (c)\n\t{\n\tcase '0':\n\tcase '1':\n\tcase '2':\n\tcase '3':\n\tcase '4':\n\tcase '5':\n\tcase '6':\n\tcase '7':\n\tcase '8':\n\tcase '9':\n\t  if (digit_optind != 0 && digit_optind != this_option_optind)\n\t    printf (\"digits occur in two different argv-elements.\\n\");\n\t  digit_optind = this_option_optind;\n\t  printf (\"option %c\\n\", c);\n\t  break;\n\n\tcase 'a':\n\t  printf (\"option a\\n\");\n\t  break;\n\n\tcase 'b':\n\t  printf (\"option b\\n\");\n\t  break;\n\n\tcase 'c':\n\t  printf (\"option c with value `%s'\\n\", optarg);\n\t  break;\n\n\tcase '?':\n\t  break;\n\n\tdefault:\n\t  printf (\"?? getopt returned character code 0%o ??\\n\", c);\n\t}\n    }\n\n  if (optind < argc)\n    {\n      printf (\"non-option ARGV-elements: \");\n      while (optind < argc)\n\tprintf (\"%s \", argv[optind++]);\n      printf (\"\\n\");\n    }\n\n  exit (0);\n}\n\n#endif /* TEST */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/getopt.h",
    "content": "/* Declarations for getopt.\nCopyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,\n1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n\nNOTE: The canonical source of this file is maintained with the GNU C Library.\nBugs can be reported to bug-glibc@gnu.org.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2, or (at your option) any\nlater version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef _GETOPT_H\n#define _GETOPT_H 1\n\n#ifdef\t__cplusplus\nextern \"C\" {\n#endif\n\n/* For communication from `getopt' to the caller.\n   When `getopt' finds an option that takes an argument,\n   the argument value is returned here.\n   Also, when `ordering' is RETURN_IN_ORDER,\n   each non-option ARGV-element is returned here.  */\n\nextern char *optarg;\n\n/* Index in ARGV of the next element to be scanned.\n   This is used for communication to and from the caller\n   and for communication between successive calls to `getopt'.\n\n   On entry to `getopt', zero means this is the first call; initialize.\n\n   When `getopt' returns -1, this is the index of the first of the\n   non-option elements that the caller should itself scan.\n\n   Otherwise, `optind' communicates from one call to the next\n   how much of ARGV has been scanned so far.  */\n\nextern int optind;\n\n/* Callers store zero here to inhibit the error message `getopt' prints\n   for unrecognized options.  */\n\nextern int opterr;\n\n/* Set to an option character which was unrecognized.  */\n\nextern int optopt;\n\n/* Describe the long-named options requested by the application.\n   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector\n   of `struct option' terminated by an element containing a name which is\n   zero.\n\n   The field `has_arg' is:\n   no_argument\t\t(or 0) if the option does not take an argument,\n   required_argument\t(or 1) if the option requires an argument,\n   optional_argument \t(or 2) if the option takes an optional argument.\n\n   If the field `flag' is not NULL, it points to a variable that is set\n   to the value given in the field `val' when the option is found, but\n   left unchanged if the option is not found.\n\n   To have a long-named option do something other than set an `int' to\n   a compiled-in constant, such as set a value from `optarg', set the\n   option's `flag' field to zero and its `val' field to a nonzero\n   value (the equivalent single-letter option character, if there is\n   one).  For long options that have a zero `flag' field, `getopt'\n   returns the contents of the `val' field.  */\n\nstruct option\n{\n#if defined (__STDC__) && __STDC__\n  const char *name;\n#else\n  char *name;\n#endif\n  /* has_arg can't be an enum because some compilers complain about\n     type mismatches in all the code that assumes it is an int.  */\n  int has_arg;\n  int *flag;\n  int val;\n};\n\n/* Names for the values of the `has_arg' field of `struct option'.  */\n\n#define\tno_argument\t\t0\n#define required_argument\t1\n#define optional_argument\t2\n\n#if defined (__STDC__) && __STDC__\n#ifdef __GNU_LIBRARY__\n/* Many other libraries have conflicting prototypes for getopt, with\n   differences in the consts, in stdlib.h.  To avoid compilation\n   errors, only prototype getopt for the GNU C library.  */\nextern int getopt (int argc, char *const *argv, const char *shortopts);\n#else /* not __GNU_LIBRARY__ */\nextern int getopt ();\n#endif /* __GNU_LIBRARY__ */\nextern int getopt_long (int argc, char *const *argv, const char *shortopts,\n\t\t        const struct option *longopts, int *longind);\nextern int getopt_long_only (int argc, char *const *argv,\n\t\t\t     const char *shortopts,\n\t\t             const struct option *longopts, int *longind);\n\n/* Internal only.  Users should not call this directly.  */\nextern int _getopt_internal (int argc, char *const *argv,\n\t\t\t     const char *shortopts,\n\t\t             const struct option *longopts, int *longind,\n\t\t\t     int long_only);\n#else /* not __STDC__ */\nextern int getopt ();\nextern int getopt_long ();\nextern int getopt_long_only ();\n\nextern int _getopt_internal ();\n#endif /* __STDC__ */\n\n#ifdef\t__cplusplus\n}\n#endif\n\n#endif /* getopt.h */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/getopt1.c",
    "content": "/* getopt_long and getopt_long_only entry points for GNU getopt.\nCopyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\n\nNOTE: The canonical source of this file is maintained with the GNU C Library.\nBugs can be reported to bug-glibc@gnu.org.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2, or (at your option) any\nlater version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\f\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include \"getopt.h\"\n\n#if !defined __STDC__ || !__STDC__\n/* This is a separate conditional since some stdc systems\n   reject `defined (const)'.  */\n#ifndef const\n#define const\n#endif\n#endif\n\n#include <stdio.h>\n\n/* Comment out all this code if we are using the GNU C Library, and are not\n   actually compiling the library itself.  This code is part of the GNU C\n   Library, but also included in many other GNU distributions.  Compiling\n   and linking in this code is a waste when using the GNU C library\n   (especially if it is a shared library).  Rather than having every GNU\n   program understand `configure --with-gnu-libc' and omit the object files,\n   it is simpler to just do this in the source for each such file.  */\n\n#define GETOPT_INTERFACE_VERSION 2\n#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2\n#include <gnu-versions.h>\n#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION\n#define ELIDE_CODE\n#endif\n#endif\n\n#ifndef ELIDE_CODE\n\n\n/* This needs to come after some library #include\n   to get __GNU_LIBRARY__ defined.  */\n#ifdef __GNU_LIBRARY__\n#include <stdlib.h>\n#endif\n\n#ifndef\tNULL\n#define NULL 0\n#endif\n\nint\ngetopt_long (int argc, char *const *argv, const char *options,\n             const struct option *long_options, int *opt_index)\n{\n  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);\n}\n\n/* Like getopt_long, but '-' as well as '--' can indicate a long option.\n   If an option that starts with '-' (not '--') doesn't match a long option,\n   but does match a short option, it is parsed as a short option\n   instead.  */\n\nint\ngetopt_long_only (int argc, char *const *argv, const char *options,\n                  const struct option *long_options, int *opt_index)\n{\n  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);\n}\n\n\n#endif\t/* Not ELIDE_CODE.  */\n\f\n#ifdef TEST\n\n#include <stdio.h>\n\nint\nmain (int argc, char **argv)\n{\n  int c;\n  int digit_optind = 0;\n\n  while (1)\n    {\n      int this_option_optind = optind ? optind : 1;\n      int option_index = 0;\n      static struct option long_options[] =\n      {\n\t{\"add\", 1, 0, 0},\n\t{\"append\", 0, 0, 0},\n\t{\"delete\", 1, 0, 0},\n\t{\"verbose\", 0, 0, 0},\n\t{\"create\", 0, 0, 0},\n\t{\"file\", 1, 0, 0},\n\t{0, 0, 0, 0}\n      };\n\n      c = getopt_long (argc, argv, \"abc:d:0123456789\",\n\t\t       long_options, &option_index);\n      if (c == -1)\n\tbreak;\n\n      switch (c)\n\t{\n\tcase 0:\n\t  printf (\"option %s\", long_options[option_index].name);\n\t  if (optarg)\n\t    printf (\" with arg %s\", optarg);\n\t  printf (\"\\n\");\n\t  break;\n\n\tcase '0':\n\tcase '1':\n\tcase '2':\n\tcase '3':\n\tcase '4':\n\tcase '5':\n\tcase '6':\n\tcase '7':\n\tcase '8':\n\tcase '9':\n\t  if (digit_optind != 0 && digit_optind != this_option_optind)\n\t    printf (\"digits occur in two different argv-elements.\\n\");\n\t  digit_optind = this_option_optind;\n\t  printf (\"option %c\\n\", c);\n\t  break;\n\n\tcase 'a':\n\t  printf (\"option a\\n\");\n\t  break;\n\n\tcase 'b':\n\t  printf (\"option b\\n\");\n\t  break;\n\n\tcase 'c':\n\t  printf (\"option c with value `%s'\\n\", optarg);\n\t  break;\n\n\tcase 'd':\n\t  printf (\"option d with value `%s'\\n\", optarg);\n\t  break;\n\n\tcase '?':\n\t  break;\n\n\tdefault:\n\t  printf (\"?? getopt returned character code 0%o ??\\n\", c);\n\t}\n    }\n\n  if (optind < argc)\n    {\n      printf (\"non-option ARGV-elements: \");\n      while (optind < argc)\n\tprintf (\"%s \", argv[optind++]);\n      printf (\"\\n\");\n    }\n\n  exit (0);\n}\n\n#endif /* TEST */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/gettext.h",
    "content": "/* Convenience header for conditional use of GNU <libintl.h>.\nCopyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef _LIBGETTEXT_H\n#define _LIBGETTEXT_H 1\n\n/* NLS can be disabled through the configure --disable-nls option.  */\n#if ENABLE_NLS\n\n/* Get declarations of GNU message catalog functions.  */\n# include <libintl.h>\n\n#else\n\n/* Disabled NLS.\n   The casts to 'const char *' serve the purpose of producing warnings\n   for invalid uses of the value returned from these functions.\n   On pre-ANSI systems without 'const', the config.h file is supposed to\n   contain \"#define const\".  */\n# define gettext(Msgid) ((const char *) (Msgid))\n# define dgettext(Domainname, Msgid) ((const char *) (Msgid))\n# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))\n# define ngettext(Msgid1, Msgid2, N) \\\n    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))\n# define dngettext(Domainname, Msgid1, Msgid2, N) \\\n    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))\n# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \\\n    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))\n# define textdomain(Domainname) ((const char *) (Domainname))\n# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))\n# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))\n\n#endif\n\n/* A pseudo function call that serves as a marker for the automated\n   extraction of messages, but does not call gettext().  The run-time\n   translation is done at a different place in the code.\n   The argument, String, should be a literal string.  Concatenated strings\n   and other string expressions won't work.\n   The macro's expansion is not parenthesized, so that it is suitable as\n   initializer for static 'char[]' or 'const char[]' variables.  */\n#define gettext_noop(String) String\n\n#endif /* _LIBGETTEXT_H */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/COPYING.LIB",
    "content": "\t\t  GNU LIBRARY GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1991 Free Software Foundation, Inc.\n                    675 Mass Ave, Cambridge, MA 02139, USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the library GPL.  It is\n numbered 2 because it goes with version 2 of the ordinary GPL.]\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Library General Public License, applies to some\nspecially designated Free Software Foundation software, and to any\nother libraries whose authors decide to use it.  You can use it for\nyour libraries, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if\nyou distribute copies of the library, or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link a program with the library, you must provide\ncomplete object files to the recipients so that they can relink them\nwith the library, after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  Our method of protecting your rights has two steps: (1) copyright\nthe library, and (2) offer you this license which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  Also, for each distributor's protection, we want to make certain\nthat everyone understands that there is no warranty for this free\nlibrary.  If the library is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original\nversion, so that any problems introduced by others will not reflect on\nthe original authors' reputations.\n\f\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that companies distributing free\nsoftware will individually obtain patent licenses, thus in effect\ntransforming the program into proprietary software.  To prevent this,\nwe have made it clear that any patent must be licensed for everyone's\nfree use or not licensed at all.\n\n  Most GNU software, including some libraries, is covered by the ordinary\nGNU General Public License, which was designed for utility programs.  This\nlicense, the GNU Library General Public License, applies to certain\ndesignated libraries.  This license is quite different from the ordinary\none; be sure to read it in full, and don't assume that anything in it is\nthe same as in the ordinary license.\n\n  The reason we have a separate public license for some libraries is that\nthey blur the distinction we usually make between modifying or adding to a\nprogram and simply using it.  Linking a program with a library, without\nchanging the library, is in some sense simply using the library, and is\nanalogous to running a utility program or application program.  However, in\na textual and legal sense, the linked executable is a combined work, a\nderivative of the original library, and the ordinary General Public License\ntreats it as such.\n\n  Because of this blurred distinction, using the ordinary General\nPublic License for libraries did not effectively promote software\nsharing, because most developers did not use the libraries.  We\nconcluded that weaker conditions might promote sharing better.\n\n  However, unrestricted linking of non-free programs would deprive the\nusers of those programs of all benefit from the free status of the\nlibraries themselves.  This Library General Public License is intended to\npermit developers of non-free programs to use free libraries, while\npreserving your freedom as a user of such programs to change the free\nlibraries that are incorporated in them.  (We have not seen how to achieve\nthis as regards changes in header files, but we have achieved it as regards\nchanges in the actual functions of the Library.)  The hope is that this\nwill lead to faster development of free libraries.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, while the latter only\nworks together with the library.\n\n  Note that it is possible for a library to be covered by the ordinary\nGeneral Public License rather than by this special one.\n\f\n\t\t  GNU LIBRARY GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library which\ncontains a notice placed by the copyright holder or other authorized\nparty saying it may be distributed under the terms of this Library\nGeneral Public License (also called \"this License\").  Each licensee is\naddressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also compile or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    c) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    d) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe source code distributed need not include anything that is normally\ndistributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Library General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n     Appendix: How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Library General Public\n    License as published by the Free Software Foundation; either\n    version 2 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Library General Public License for more details.\n\n    You should have received a copy of the GNU Library General Public\n    License along with this library; if not, write to the Free\n    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/ChangeLog",
    "content": "2006-02-24  Eli Zaretskii  <eliz@gnu.org>\n\n\t* glob.c (my_malloc) [WINDOWS32]: Provide a full ISO C prototype,\n        to avoid compiler warnings.\n\n2005-06-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* fnmatch.h, glob.h [WINDOWS32]: Fix ifdefs in headers.\n\tFixes Savannah bug #13477.\n\n2005-03-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.c (glob_in_dir): Change FNM_CASEFOLD to be enabled if\n\tHAVE_CASE_INSENSITIVE_FS is defined.\n\n2003-01-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.h: Patch for FreeBSD by Mike Barcroft <mike@freebsd.org>\n\tReported by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>.  On\n\tFreeBSD, declare __size_t to simply size_t.\n\n2002-04-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* Makefile.am: Use automake 1.6.\n\tUse new automake condition USE_LOCAL_GLOB to decide whether or not\n\tto build the local GNU glob library or use the system one.\n\n1999-09-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* fnmatch.c: Last GLIBC version wouldn't compile outside of GLIBC\n\t(undefined reference to internal_function).  Update to the latest\n\tversion\n\n1999-09-11  Paul Eggert  <eggert@twinsun.com>\n\n\t* glob.h (glob): If #defining to glob64, do this before\n\tdeclaring it, so that all declarations and uses match, and\n\tdo not declare glob64, to avoid a declaration clash.\n\t(globfree): Likewise with globfree64.\n\n1999-09-08  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* glob.c (prefix_array) [__MSDOS__,WINDOWS32]: Keep the trailing\n\tslash unless DIRNAME is just \"x:/\".\n\n1999-09-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* fnmatch.c: Update to latest version from GLIBC.\n\n1999-07-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.c, glob.h, fnmatch.c, fnmatch.h: Update to latest version\n\tfrom GLIBC.\n\n\t* fnmatch.c (internal_fnmatch): Use K&R definition syntax, not ANSI.\n\t(__strchrnul): This won't exist outside GLIBC, so create one.\n\n\t* glob.c: Move getlogin{,_r} prototypes below glob.h to get __P()\n\tmacro.\n\n1998-08-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: Remove; configuration for glob is handled by the\n\tmake configure.in.\n\n1998-07-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.c, fnmatch.c: New versions from the GLIBC folks (Ulrich\n\tDrepper).  Fixes a bug reported by Eli Zaretski.  Integrates\n\tDOS/Windows32 support.\n\n1998-07-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>\n\n\t* glob.c (glob): Cast away const on assignment of pattern to dirname.\n\tCast the return type of __alloca() for traditional C compilers.\n\n1998-07-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.c, fnmatch.c: New versions of these files from the GLIBC\n\tfolks (Ulrich Drepper).  Had to re-integrate some DOS/Windows\n\tcode.\n\n1998-07-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* glob.c (glob_in_dir): If no meta chars exist in PATTERN and\n\tGLOB_NOCHECK is present, don't look for the file--whether it's\n\tfound or not, we'll always return it, so why bother searching?\n\n\tAlso, if we are searching and there are no meta chars, don't\n\tbother trying fnmatch() if the strcmp() fails.\n\n1998-05-30  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* glob.c (glob) [__MSDOS__, WINDOWS32]: Compute the directory and\n\tfilename parts of the pattern correctly when it includes a drive\n\tspec.  Disallow wildcards in the drive spec.  Prevent recursion\n\twhen dirname is of the form \"d:/\" or \"d:\".\n\t(prefix_array) [__MSDOS__, WINDOWS32]: Don't append a slash to\n\t\"d:/\" and \"d:\".\n\n1998-05-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* SMakefile, Makefile.ami, glob.c, glob.h, fnmatch.c: Updated from\n\tthe latest glibc version.\n\n1998-04-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* configure.in: Create a config.h file instead of setting things\n\ton the compile line.  This is because when build.sh runs it merely\n\tpasses -DHAVE_CONFIG_H to the glob files, just as it does to the\n\tmake files.\n\t* config.h.in: Created by autoheader.\n\nTue Aug 12 10:52:34 1997  Paul D. Smith  <psmith@baynetworks.com>\n\n\t* configure.in: Require autoconf 2.12.\n\n\t* glob: Updates from latest GNU libc glob code.\n\n\t* glob.c,glob.h,fnmatch.h: Change all WIN32 references to WINDOWS32.\n\n\t* glob.h: OSF4 defines macros in such a way that GLOB_ALTDIRFUNC\n\tis not defined.  Added a test to the #if which defines it if\n\t_GNU_SOURCE is defined; that's set by both glob.c and GNU make.\n\n\t* glob.c: SunOS4 w/ cc needs #include <stdio.h>, since assert.h\n\trequires stderr but doesn't include stdio.h :-/.\n\t(next_brace_sub): De-protoize function definition.\n\t(glob): Cast __alloca(); on SunOS4 it uses the default return type\n\tof int.\n\t(glob): Irix defines getlogin_r() to return a char*; move the\n\textern for that into the _LIBC area since it isn't used except in\n\tLIBC anyway.  Likewise, move extern getlogin() into the \"else\".\n\nSat Jul 20 21:55:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>\n\n\tWin32 hacks from <Rob_Tulloh@tivoli.com>.\n\t* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;\n\tuse void * for my_realloc; include <malloc.h> for alloca.\n\t(glob) [WIN32]: Use \"c:/users/default\" for ~ if no HOME variable.\n\t* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].\n\t* posix/glob.h: Likewise.\n\nFri Jul 19 16:56:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>\n\n\t* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]\n\tfor `struct stat;' forward decl.\n\nSat Jun 22 10:44:09 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>\n\n\t* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].\n\nFri Jun 21 00:27:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>\n\n\t* posix/fnmatch.c (fnmatch): Fix \\*[*?]+ case to increment name ptr\n \tonly for ?s, not for *s.  Fix from Chet Ramey.\n\f\n\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/Makefile.am",
    "content": "# -*-Makefile-*-, or close enough\n# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAUTOMAKE_OPTIONS =\tforeign\n\n# Only build the library when the system doesn't already have GNU glob.\nif USE_LOCAL_GLOB\n  noinst_LIBRARIES =\tlibglob.a\nendif\n\nlibglob_a_SOURCES =\tglob.c glob.h fnmatch.c fnmatch.h\n\n\nEXTRA_DIST =\t\tCOPYING.LIB Makefile.ami SCOPTIONS SMakefile \\\n\t\t\tconfigure.bat\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/Makefile.ami",
    "content": "# Makefile for standalone libglob.a (fnmatch, glob).             -*-Makefile-*-\n# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n# Ultrix 2.2 make doesn't expand the value of VPATH.\nVPATH = /glob/\n# This must repeat the value, because configure will remove `VPATH = .'.\nsrcdir = /glob/\n\nCC = sc\nRM = delete\nCPPFLAGS =\nCFLAGS =\n\n# Information determined by configure.\nDEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \\\n\tDefine HAVE_DIRENT_H\n\n# How to invoke ar.\nAR = join\nARFLAGS = as\n\n# How to invoke ranlib.\nRANLIB = ;\n\n.PHONY: all\nall: glob.lib\n\nglob.lib : glob.o fnmatch.o\n\t$(AR) $(ARFLAGS) $@ glob.o fnmatch.o\n\t$(RANLIB) $@\n\n# For some reason, Unix make wants the dependencies on the source files.\n# Otherwise it refuses to use an implicit rule!\n# And, get this: it doesn't work to use $(srcdir)foo.c!!\nglob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c\nfnmatch.o: $(srcdir)fnmatch.h fnmatch.c\n\nOUTPUT_OPTION =\n.c.o:\n\t$(CC) IDir \"\" \\\n\t      $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)\n\n.PHONY: clean realclean glob-clean glob-realclean distclean\nclean glob-clean:\n\t-$(RM) glob.lib \"#?.o\" core\ndistclean glob-realclean: clean\n\t-$(RM) TAGS tags Makefile config.status config.h config.log\nrealcean: distclean\n\n# For inside the C library.\nglob.tar glob.tar.Z:\n\t$(MAKE) -C .. $@\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n# -*-Makefile-*-, or close enough\n# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = ..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nsubdir = glob\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING.LIB \\\n\tChangeLog\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nLIBRARIES = $(noinst_LIBRARIES)\nARFLAGS = cru\nlibglob_a_AR = $(AR) $(ARFLAGS)\nlibglob_a_LIBADD =\nam_libglob_a_OBJECTS = glob.$(OBJEXT) fnmatch.$(OBJEXT)\nlibglob_a_OBJECTS = $(am_libglob_a_OBJECTS)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(libglob_a_SOURCES)\nDIST_SOURCES = $(libglob_a_SOURCES)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nGETLOADAVG_LIBS = @GETLOADAVG_LIBS@\nGLOBINC = @GLOBINC@\nGLOBLIB = @GLOBLIB@\nGMSGFMT = @GMSGFMT@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nINTLLIBS = @INTLLIBS@\nKMEM_GROUP = @KMEM_GROUP@\nLDFLAGS = @LDFLAGS@\nLIBICONV = @LIBICONV@\nLIBINTL = @LIBINTL@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLTLIBICONV = @LTLIBICONV@\nLTLIBINTL = @LTLIBINTL@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMAKE_HOST = @MAKE_HOST@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nMSGFMT = @MSGFMT@\nMSGMERGE = @MSGMERGE@\nNEED_SETGID = @NEED_SETGID@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPOSUB = @POSUB@\nRANLIB = @RANLIB@\nREMOTE = @REMOTE@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nU = @U@\nUSE_CUSTOMS_FALSE = @USE_CUSTOMS_FALSE@\nUSE_CUSTOMS_TRUE = @USE_CUSTOMS_TRUE@\nUSE_LOCAL_GLOB_FALSE = @USE_LOCAL_GLOB_FALSE@\nUSE_LOCAL_GLOB_TRUE = @USE_LOCAL_GLOB_TRUE@\nUSE_NLS = @USE_NLS@\nVERSION = @VERSION@\nWINDOWSENV_FALSE = @WINDOWSENV_FALSE@\nWINDOWSENV_TRUE = @WINDOWSENV_TRUE@\nXGETTEXT = @XGETTEXT@\nac_ct_CC = @ac_ct_CC@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nAUTOMAKE_OPTIONS = foreign\n\n# Only build the library when the system doesn't already have GNU glob.\n@USE_LOCAL_GLOB_TRUE@noinst_LIBRARIES = libglob.a\nlibglob_a_SOURCES = glob.c glob.h fnmatch.c fnmatch.h\nEXTRA_DIST = COPYING.LIB Makefile.ami SCOPTIONS SMakefile \\\n\t\t\tconfigure.bat\n\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .o .obj\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  glob/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign  glob/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\nclean-noinstLIBRARIES:\n\t-test -z \"$(noinst_LIBRARIES)\" || rm -f $(noinst_LIBRARIES)\nlibglob.a: $(libglob_a_OBJECTS) $(libglob_a_DEPENDENCIES) \n\t-rm -f libglob.a\n\t$(libglob_a_AR) libglob.a $(libglob_a_OBJECTS) $(libglob_a_LIBADD)\n\t$(RANLIB) libglob.a\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Po@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\nuninstall-info-am:\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(LIBRARIES)\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-noinstLIBRARIES ctags distclean distclean-compile \\\n\tdistclean-generic distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-exec install-exec-am install-info \\\n\tinstall-info-am install-man install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic pdf pdf-am ps ps-am tags uninstall \\\n\tuninstall-am uninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/SCOPTIONS",
    "content": "ERRORREXX\nOPTIMIZE\nNOVERSION\nOPTIMIZERTIME\nOPTIMIZERALIAS\nDEFINE INCLUDEDIR=\"include:\"\nDEFINE LIBDIR=\"lib:\"\nDEFINE NO_ALLOCA\nDEFINE NO_FLOAT\nDEFINE NO_ARCHIVES\nIGNORE=161\nIGNORE=100\nSTARTUP=cres\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/SMakefile",
    "content": "# Makefile for standalone distribution of libglob.a (fnmatch, glob).\n# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n# Ultrix 2.2 make doesn't expand the value of VPATH.\nVPATH = /glob/\n# This must repeat the value, because configure will remove `VPATH = .'.\nsrcdir = /glob/\n\nCC = sc\nCPPFLAGS =\nCFLAGS =\nMAKE = smake\nRM = delete\n\n# Information determined by configure.\nDEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \\\n\tDefine HAVE_DIRENT_H\n\n# How to invoke ar.\nAR = join\nARFLAGS = as\n\n# How to invoke ranlib.\nRANLIB = ;\n\n.PHONY: all\nall: glob.lib\n\nglob.lib : glob.o fnmatch.o\n\t$(AR) $(ARFLAGS) $@ glob.o fnmatch.o\n\t$(RANLIB) $@\n\n# For some reason, Unix make wants the dependencies on the source files.\n# Otherwise it refuses to use an implicit rule!\n# And, get this: it doesn't work to use $(srcdir)foo.c!!\nglob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c\nfnmatch.o: $(srcdir)fnmatch.h fnmatch.c\n\n.c.o:\n\t$(CC) IDir \"\" \\\n\t      $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)\n\n.PHONY: clean realclean glob-clean glob-realclean distclean\nclean glob-clean:\n\t-$(RM) -f glob.lib *.o core\ndistclean glob-realclean: clean\n\t-$(RM) -f TAGS tags Makefile config.status config.h config.log\nrealcean: distclean\n\n# For inside the C library.\nglob.tar glob.tar.Z:\n\t$(MAKE) -C .. $@\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/configure.bat",
    "content": "@echo off\r\nrem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,\r\nrem 2004, 2005, 2006 Free Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under\r\nrem the terms of the GNU General Public License as published by the Free\r\nrem Software Foundation; either version 2, or (at your option) any later\r\nrem version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT\r\nrem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r\nrem FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r\nrem more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along\r\nrem with GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n\r\necho Configuring glob for DJGPP\r\nrem This batch file assumes a unix-type \"sed\" program\r\n\r\necho # Makefile generated by \"configure.bat\"> Makefile\r\n\r\nif exist config.sed del config.sed\r\n\r\necho \"s/@srcdir@/./\t\t\t\t\t\">> config.sed\r\necho \"s/@CC@/gcc/\t\t\t\t\t\">> config.sed\r\necho \"s/@CFLAGS@/-O2 -g/\t\t\t\t\">> config.sed\r\necho \"s/@CPPFLAGS@/-DHAVE_CONFIG_H -I../\t\t\">> config.sed\r\necho \"s/@AR@/ar/\t\t\t\t\t\">> config.sed\r\necho \"s/@RANLIB@/ranlib/\t\t\t\t\">> config.sed\r\necho \"s/@LDFLAGS@//\t\t\t\t\t\">> config.sed\r\necho \"s/@DEFS@//\t\t\t\t\t\">> config.sed\r\necho \"s/@ALLOCA@//\t\t\t\t\t\">> config.sed\r\necho \"s/@LIBS@//\t\t\t\t\t\">> config.sed\r\necho \"s/@LIBOBJS@//\t\t\t\t\t\">> config.sed\r\necho \"s/^Makefile *:/_Makefile:/\t\t\t\">> config.sed\r\necho \"s/^config.h *:/_config.h:/\t\t\t\">> config.sed\r\n\r\nsed -e \"s/^\\\"//\" -e \"s/\\\"$//\" -e \"s/[ \t]*$//\" config.sed > config2.sed\r\nsed -f config2.sed Makefile.in >> Makefile\r\ndel config.sed\r\ndel config2.sed\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/fnmatch.c",
    "content": "/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.\nThis file is part of the GNU C Library.\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public License as\npublished by the Free Software Foundation; either version 2 of the\nLicense, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public License\nalong with this library; see the file COPYING.LIB.  If not, write to the Free\nSoftware Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301\nUSA.  */\n\n#if HAVE_CONFIG_H\n# include <config.h>\n#endif\n\n/* Enable GNU extensions in fnmatch.h.  */\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE\t1\n#endif\n\n#include <errno.h>\n#include <fnmatch.h>\n#include <ctype.h>\n\n#if HAVE_STRING_H || defined _LIBC\n# include <string.h>\n#else\n# include <strings.h>\n#endif\n\n#if defined STDC_HEADERS || defined _LIBC\n# include <stdlib.h>\n#endif\n\n/* For platform which support the ISO C amendement 1 functionality we\n   support user defined character classes.  */\n#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)\n/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */\n# include <wchar.h>\n# include <wctype.h>\n#endif\n\n/* Comment out all this code if we are using the GNU C Library, and are not\n   actually compiling the library itself.  This code is part of the GNU C\n   Library, but also included in many other GNU distributions.  Compiling\n   and linking in this code is a waste when using the GNU C library\n   (especially if it is a shared library).  Rather than having every GNU\n   program understand `configure --with-gnu-libc' and omit the object files,\n   it is simpler to just do this in the source for each such file.  */\n\n#if defined _LIBC || !defined __GNU_LIBRARY__\n\n\n# if defined STDC_HEADERS || !defined isascii\n#  define ISASCII(c) 1\n# else\n#  define ISASCII(c) isascii(c)\n# endif\n\n# ifdef isblank\n#  define ISBLANK(c) (ISASCII (c) && isblank (c))\n# else\n#  define ISBLANK(c) ((c) == ' ' || (c) == '\\t')\n# endif\n# ifdef isgraph\n#  define ISGRAPH(c) (ISASCII (c) && isgraph (c))\n# else\n#  define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))\n# endif\n\n# define ISPRINT(c) (ISASCII (c) && isprint (c))\n# define ISDIGIT(c) (ISASCII (c) && isdigit (c))\n# define ISALNUM(c) (ISASCII (c) && isalnum (c))\n# define ISALPHA(c) (ISASCII (c) && isalpha (c))\n# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))\n# define ISLOWER(c) (ISASCII (c) && islower (c))\n# define ISPUNCT(c) (ISASCII (c) && ispunct (c))\n# define ISSPACE(c) (ISASCII (c) && isspace (c))\n# define ISUPPER(c) (ISASCII (c) && isupper (c))\n# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))\n\n# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))\n\n# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)\n/* The GNU C library provides support for user-defined character classes\n   and the functions from ISO C amendement 1.  */\n#  ifdef CHARCLASS_NAME_MAX\n#   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX\n#  else\n/* This shouldn't happen but some implementation might still have this\n   problem.  Use a reasonable default value.  */\n#   define CHAR_CLASS_MAX_LENGTH 256\n#  endif\n\n#  ifdef _LIBC\n#   define IS_CHAR_CLASS(string) __wctype (string)\n#  else\n#   define IS_CHAR_CLASS(string) wctype (string)\n#  endif\n# else\n#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */\n\n#  define IS_CHAR_CLASS(string)\t\t\t\t\t\t      \\\n   (STREQ (string, \"alpha\") || STREQ (string, \"upper\")\t\t\t      \\\n    || STREQ (string, \"lower\") || STREQ (string, \"digit\")\t\t      \\\n    || STREQ (string, \"alnum\") || STREQ (string, \"xdigit\")\t\t      \\\n    || STREQ (string, \"space\") || STREQ (string, \"print\")\t\t      \\\n    || STREQ (string, \"punct\") || STREQ (string, \"graph\")\t\t      \\\n    || STREQ (string, \"cntrl\") || STREQ (string, \"blank\"))\n# endif\n\n/* Avoid depending on library functions or files\n   whose names are inconsistent.  */\n\n# if !defined _LIBC && !defined getenv\nextern char *getenv ();\n# endif\n\n# ifndef errno\nextern int errno;\n# endif\n\n/* This function doesn't exist on most systems.  */\n\n# if !defined HAVE___STRCHRNUL && !defined _LIBC\nstatic char *\n__strchrnul (s, c)\n     const char *s;\n     int c;\n{\n  char *result = strchr (s, c);\n  if (result == NULL)\n    result = strchr (s, '\\0');\n  return result;\n}\n# endif\n\n# ifndef internal_function\n/* Inside GNU libc we mark some function in a special way.  In other\n   environments simply ignore the marking.  */\n#  define internal_function\n# endif\n\n/* Match STRING against the filename pattern PATTERN, returning zero if\n   it matches, nonzero if not.  */\nstatic int internal_fnmatch __P ((const char *pattern, const char *string,\n\t\t\t\t  int no_leading_period, int flags))\n     internal_function;\nstatic int\ninternal_function\ninternal_fnmatch (pattern, string, no_leading_period, flags)\n     const char *pattern;\n     const char *string;\n     int no_leading_period;\n     int flags;\n{\n  register const char *p = pattern, *n = string;\n  register unsigned char c;\n\n/* Note that this evaluates C many times.  */\n# ifdef _LIBC\n#  define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))\n# else\n#  define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))\n# endif\n\n  while ((c = *p++) != '\\0')\n    {\n      c = FOLD (c);\n\n      switch (c)\n\t{\n\tcase '?':\n\t  if (*n == '\\0')\n\t    return FNM_NOMATCH;\n\t  else if (*n == '/' && (flags & FNM_FILE_NAME))\n\t    return FNM_NOMATCH;\n\t  else if (*n == '.' && no_leading_period\n\t\t   && (n == string\n\t\t       || (n[-1] == '/' && (flags & FNM_FILE_NAME))))\n\t    return FNM_NOMATCH;\n\t  break;\n\n\tcase '\\\\':\n\t  if (!(flags & FNM_NOESCAPE))\n\t    {\n\t      c = *p++;\n\t      if (c == '\\0')\n\t\t/* Trailing \\ loses.  */\n\t\treturn FNM_NOMATCH;\n\t      c = FOLD (c);\n\t    }\n\t  if (FOLD ((unsigned char) *n) != c)\n\t    return FNM_NOMATCH;\n\t  break;\n\n\tcase '*':\n\t  if (*n == '.' && no_leading_period\n\t      && (n == string\n\t\t  || (n[-1] == '/' && (flags & FNM_FILE_NAME))))\n\t    return FNM_NOMATCH;\n\n\t  for (c = *p++; c == '?' || c == '*'; c = *p++)\n\t    {\n\t      if (*n == '/' && (flags & FNM_FILE_NAME))\n\t\t/* A slash does not match a wildcard under FNM_FILE_NAME.  */\n\t\treturn FNM_NOMATCH;\n\t      else if (c == '?')\n\t\t{\n\t\t  /* A ? needs to match one character.  */\n\t\t  if (*n == '\\0')\n\t\t    /* There isn't another character; no match.  */\n\t\t    return FNM_NOMATCH;\n\t\t  else\n\t\t    /* One character of the string is consumed in matching\n\t\t       this ? wildcard, so *??? won't match if there are\n\t\t       less than three characters.  */\n\t\t    ++n;\n\t\t}\n\t    }\n\n\t  if (c == '\\0')\n\t    /* The wildcard(s) is/are the last element of the pattern.\n\t       If the name is a file name and contains another slash\n\t       this does mean it cannot match.  */\n\t    return ((flags & FNM_FILE_NAME) && strchr (n, '/') != NULL\n\t\t    ? FNM_NOMATCH : 0);\n\t  else\n\t    {\n\t      const char *endp;\n\n\t      endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\\0');\n\n\t      if (c == '[')\n\t\t{\n\t\t  int flags2 = ((flags & FNM_FILE_NAME)\n\t\t\t\t? flags : (flags & ~FNM_PERIOD));\n\n\t\t  for (--p; n < endp; ++n)\n\t\t    if (internal_fnmatch (p, n,\n\t\t\t\t\t  (no_leading_period\n\t\t\t\t\t   && (n == string\n\t\t\t\t\t       || (n[-1] == '/'\n\t\t\t\t\t\t   && (flags\n\t\t\t\t\t\t       & FNM_FILE_NAME)))),\n\t\t\t\t\t  flags2)\n\t\t\t== 0)\n\t\t      return 0;\n\t\t}\n\t      else if (c == '/' && (flags & FNM_FILE_NAME))\n\t\t{\n\t\t  while (*n != '\\0' && *n != '/')\n\t\t    ++n;\n\t\t  if (*n == '/'\n\t\t      && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD,\n\t\t\t\t\t    flags) == 0))\n\t\t    return 0;\n\t\t}\n\t      else\n\t\t{\n\t\t  int flags2 = ((flags & FNM_FILE_NAME)\n\t\t\t\t? flags : (flags & ~FNM_PERIOD));\n\n\t\t  if (c == '\\\\' && !(flags & FNM_NOESCAPE))\n\t\t    c = *p;\n\t\t  c = FOLD (c);\n\t\t  for (--p; n < endp; ++n)\n\t\t    if (FOLD ((unsigned char) *n) == c\n\t\t\t&& (internal_fnmatch (p, n,\n\t\t\t\t\t      (no_leading_period\n\t\t\t\t\t       && (n == string\n\t\t\t\t\t\t   || (n[-1] == '/'\n\t\t\t\t\t\t       && (flags\n\t\t\t\t\t\t\t   & FNM_FILE_NAME)))),\n\t\t\t\t\t      flags2) == 0))\n\t\t      return 0;\n\t\t}\n\t    }\n\n\t  /* If we come here no match is possible with the wildcard.  */\n\t  return FNM_NOMATCH;\n\n\tcase '[':\n\t  {\n\t    /* Nonzero if the sense of the character class is inverted.  */\n\t    static int posixly_correct;\n\t    register int not;\n\t    char cold;\n\n\t    if (posixly_correct == 0)\n\t      posixly_correct = getenv (\"POSIXLY_CORRECT\") != NULL ? 1 : -1;\n\n\t    if (*n == '\\0')\n\t      return FNM_NOMATCH;\n\n\t    if (*n == '.' && no_leading_period && (n == string\n\t\t\t\t\t\t   || (n[-1] == '/'\n\t\t\t\t\t\t       && (flags\n\t\t\t\t\t\t\t   & FNM_FILE_NAME))))\n\t      return FNM_NOMATCH;\n\n\t    if (*n == '/' && (flags & FNM_FILE_NAME))\n\t      /* `/' cannot be matched.  */\n\t      return FNM_NOMATCH;\n\n\t    not = (*p == '!' || (posixly_correct < 0 && *p == '^'));\n\t    if (not)\n\t      ++p;\n\n\t    c = *p++;\n\t    for (;;)\n\t      {\n\t\tunsigned char fn = FOLD ((unsigned char) *n);\n\n\t\tif (!(flags & FNM_NOESCAPE) && c == '\\\\')\n\t\t  {\n\t\t    if (*p == '\\0')\n\t\t      return FNM_NOMATCH;\n\t\t    c = FOLD ((unsigned char) *p);\n\t\t    ++p;\n\n\t\t    if (c == fn)\n\t\t      goto matched;\n\t\t  }\n\t\telse if (c == '[' && *p == ':')\n\t\t  {\n\t\t    /* Leave room for the null.  */\n\t\t    char str[CHAR_CLASS_MAX_LENGTH + 1];\n\t\t    size_t c1 = 0;\n# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)\n\t\t    wctype_t wt;\n# endif\n\t\t    const char *startp = p;\n\n\t\t    for (;;)\n\t\t      {\n\t\t\tif (c1 == CHAR_CLASS_MAX_LENGTH)\n\t\t\t  /* The name is too long and therefore the pattern\n\t\t\t     is ill-formed.  */\n\t\t\t  return FNM_NOMATCH;\n\n\t\t\tc = *++p;\n\t\t\tif (c == ':' && p[1] == ']')\n\t\t\t  {\n\t\t\t    p += 2;\n\t\t\t    break;\n\t\t\t  }\n\t\t\tif (c < 'a' || c >= 'z')\n\t\t\t  {\n\t\t\t    /* This cannot possibly be a character class name.\n\t\t\t       Match it as a normal range.  */\n\t\t\t    p = startp;\n\t\t\t    c = '[';\n\t\t\t    goto normal_bracket;\n\t\t\t  }\n\t\t\tstr[c1++] = c;\n\t\t      }\n\t\t    str[c1] = '\\0';\n\n# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)\n\t\t    wt = IS_CHAR_CLASS (str);\n\t\t    if (wt == 0)\n\t\t      /* Invalid character class name.  */\n\t\t      return FNM_NOMATCH;\n\n\t\t    if (__iswctype (__btowc ((unsigned char) *n), wt))\n\t\t      goto matched;\n# else\n\t\t    if ((STREQ (str, \"alnum\") && ISALNUM ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"alpha\") && ISALPHA ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"blank\") && ISBLANK ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"cntrl\") && ISCNTRL ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"digit\") && ISDIGIT ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"graph\") && ISGRAPH ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"lower\") && ISLOWER ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"print\") && ISPRINT ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"punct\") && ISPUNCT ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"space\") && ISSPACE ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"upper\") && ISUPPER ((unsigned char) *n))\n\t\t\t|| (STREQ (str, \"xdigit\") && ISXDIGIT ((unsigned char) *n)))\n\t\t      goto matched;\n# endif\n\t\t  }\n\t\telse if (c == '\\0')\n\t\t  /* [ (unterminated) loses.  */\n\t\t  return FNM_NOMATCH;\n\t\telse\n\t\t  {\n\t\t  normal_bracket:\n\t\t    if (FOLD (c) == fn)\n\t\t      goto matched;\n\n\t\t    cold = c;\n\t\t    c = *p++;\n\n\t\t    if (c == '-' && *p != ']')\n\t\t      {\n\t\t\t/* It is a range.  */\n\t\t\tunsigned char cend = *p++;\n\t\t\tif (!(flags & FNM_NOESCAPE) && cend == '\\\\')\n\t\t\t  cend = *p++;\n\t\t\tif (cend == '\\0')\n\t\t\t  return FNM_NOMATCH;\n\n\t\t\tif (cold <= fn && fn <= FOLD (cend))\n\t\t\t  goto matched;\n\n\t\t\tc = *p++;\n\t\t      }\n\t\t  }\n\n\t\tif (c == ']')\n\t\t  break;\n\t      }\n\n\t    if (!not)\n\t      return FNM_NOMATCH;\n\t    break;\n\n\t  matched:\n\t    /* Skip the rest of the [...] that already matched.  */\n\t    while (c != ']')\n\t      {\n\t\tif (c == '\\0')\n\t\t  /* [... (unterminated) loses.  */\n\t\t  return FNM_NOMATCH;\n\n\t\tc = *p++;\n\t\tif (!(flags & FNM_NOESCAPE) && c == '\\\\')\n\t\t  {\n\t\t    if (*p == '\\0')\n\t\t      return FNM_NOMATCH;\n\t\t    /* XXX 1003.2d11 is unclear if this is right.  */\n\t\t    ++p;\n\t\t  }\n\t\telse if (c == '[' && *p == ':')\n\t\t  {\n\t\t    do\n\t\t      if (*++p == '\\0')\n\t\t\treturn FNM_NOMATCH;\n\t\t    while (*p != ':' || p[1] == ']');\n\t\t    p += 2;\n\t\t    c = *p;\n\t\t  }\n\t      }\n\t    if (not)\n\t      return FNM_NOMATCH;\n\t  }\n\t  break;\n\n\tdefault:\n\t  if (c != FOLD ((unsigned char) *n))\n\t    return FNM_NOMATCH;\n\t}\n\n      ++n;\n    }\n\n  if (*n == '\\0')\n    return 0;\n\n  if ((flags & FNM_LEADING_DIR) && *n == '/')\n    /* The FNM_LEADING_DIR flag says that \"foo*\" matches \"foobar/frobozz\".  */\n    return 0;\n\n  return FNM_NOMATCH;\n\n# undef FOLD\n}\n\n\nint\nfnmatch (pattern, string, flags)\n     const char *pattern;\n     const char *string;\n     int flags;\n{\n  return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);\n}\n\n#endif\t/* _LIBC or not __GNU_LIBRARY__.  */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/fnmatch.h",
    "content": "/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.\nThis file is part of the GNU C Library.\n\nThe GNU C Library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public License as\npublished by the Free Software Foundation; either version 2 of the\nLicense, or (at your option) any later version.\n\nThe GNU C Library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public License\nalong with this library; see the file COPYING.LIB.  If not, write to the Free\nSoftware Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301\nUSA.  */\n\n#ifndef\t_FNMATCH_H\n#define\t_FNMATCH_H\t1\n\n#ifdef\t__cplusplus\nextern \"C\" {\n#endif\n\n#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32\n# if !defined __GLIBC__\n#  undef\t__P\n#  define __P(protos)\tprotos\n# endif\n#else /* Not C++ or ANSI C.  */\n# undef\t__P\n# define __P(protos)\t()\n/* We can get away without defining `const' here only because in this file\n   it is used only inside the prototype for `fnmatch', which is elided in\n   non-ANSI C where `const' is problematical.  */\n#endif /* C++ or ANSI C.  */\n\n#ifndef const\n# if (defined __STDC__ && __STDC__) || defined __cplusplus || defined WINDOWS32\n#  define __const\tconst\n# else\n#  define __const\n# endif\n#endif\n\n/* We #undef these before defining them because some losing systems\n   (HP-UX A.08.07 for example) define these in <unistd.h>.  */\n#undef\tFNM_PATHNAME\n#undef\tFNM_NOESCAPE\n#undef\tFNM_PERIOD\n\n/* Bits set in the FLAGS argument to `fnmatch'.  */\n#define\tFNM_PATHNAME\t(1 << 0) /* No wildcard can ever match `/'.  */\n#define\tFNM_NOESCAPE\t(1 << 1) /* Backslashes don't quote special chars.  */\n#define\tFNM_PERIOD\t(1 << 2) /* Leading `.' is matched only explicitly.  */\n\n#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE\n# define FNM_FILE_NAME\t FNM_PATHNAME\t/* Preferred GNU name.  */\n# define FNM_LEADING_DIR (1 << 3)\t/* Ignore `/...' after a match.  */\n# define FNM_CASEFOLD\t (1 << 4)\t/* Compare without regard to case.  */\n#endif\n\n/* Value returned by `fnmatch' if STRING does not match PATTERN.  */\n#define\tFNM_NOMATCH\t1\n\n/* This value is returned if the implementation does not support\n   `fnmatch'.  Since this is not the case here it will never be\n   returned but the conformance test suites still require the symbol\n   to be defined.  */\n#ifdef _XOPEN_SOURCE\n# define FNM_NOSYS\t(-1)\n#endif\n\n/* Match NAME against the filename pattern PATTERN,\n   returning zero if it matches, FNM_NOMATCH if not.  */\nextern int fnmatch __P ((__const char *__pattern, __const char *__name,\n\t\t\t int __flags));\n\n#ifdef\t__cplusplus\n}\n#endif\n\n#endif /* fnmatch.h */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/glob.c",
    "content": "/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public License as\npublished by the Free Software Foundation; either version 2 of the\nLicense, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public License\nalong with this library; see the file COPYING.LIB.  If not, write to the Free\nSoftware Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301\nUSA.  */\n\n/* AIX requires this to be the first thing in the file.  */\n#if defined _AIX && !defined __GNUC__\n #pragma alloca\n#endif\n\n#ifdef\tHAVE_CONFIG_H\n# include <config.h>\n#endif\n\n/* Enable GNU extensions in glob.h.  */\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE\t1\n#endif\n\n#include <errno.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n\n/* Outcomment the following line for production quality code.  */\n/* #define NDEBUG 1 */\n#include <assert.h>\n\n#include <stdio.h>\t\t/* Needed on stupid SunOS for assert.  */\n\n\n/* Comment out all this code if we are using the GNU C Library, and are not\n   actually compiling the library itself.  This code is part of the GNU C\n   Library, but also included in many other GNU distributions.  Compiling\n   and linking in this code is a waste when using the GNU C library\n   (especially if it is a shared library).  Rather than having every GNU\n   program understand `configure --with-gnu-libc' and omit the object files,\n   it is simpler to just do this in the source for each such file.  */\n\n#define GLOB_INTERFACE_VERSION 1\n#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1\n# include <gnu-versions.h>\n# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION\n#  define ELIDE_CODE\n# endif\n#endif\n\n#ifndef ELIDE_CODE\n\n#if defined STDC_HEADERS || defined __GNU_LIBRARY__\n# include <stddef.h>\n#endif\n\n#if defined HAVE_UNISTD_H || defined _LIBC\n# include <unistd.h>\n# ifndef POSIX\n#  ifdef _POSIX_VERSION\n#   define POSIX\n#  endif\n# endif\n#endif\n\n#if !defined _AMIGA && !defined VMS && !defined WINDOWS32\n# include <pwd.h>\n#endif\n\n#if !defined __GNU_LIBRARY__ && !defined STDC_HEADERS\nextern int errno;\n#endif\n#ifndef __set_errno\n# define __set_errno(val) errno = (val)\n#endif\n\n#ifndef\tNULL\n# define NULL\t0\n#endif\n\n\n#if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__\n# include <dirent.h>\n# define NAMLEN(dirent) strlen((dirent)->d_name)\n#else\n# define dirent direct\n# define NAMLEN(dirent) (dirent)->d_namlen\n# ifdef HAVE_SYS_NDIR_H\n#  include <sys/ndir.h>\n# endif\n# ifdef HAVE_SYS_DIR_H\n#  include <sys/dir.h>\n# endif\n# ifdef HAVE_NDIR_H\n#  include <ndir.h>\n# endif\n# ifdef HAVE_VMSDIR_H\n#  include \"vmsdir.h\"\n# endif /* HAVE_VMSDIR_H */\n#endif\n\n\n/* In GNU systems, <dirent.h> defines this macro for us.  */\n#ifdef _D_NAMLEN\n# undef NAMLEN\n# define NAMLEN(d) _D_NAMLEN(d)\n#endif\n\n/* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available\n   if the `d_type' member for `struct dirent' is available.  */\n#ifdef _DIRENT_HAVE_D_TYPE\n# define HAVE_D_TYPE\t1\n#endif\n\n\n#if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__\n/* Posix does not require that the d_ino field be present, and some\n   systems do not provide it. */\n# define REAL_DIR_ENTRY(dp) 1\n#else\n# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)\n#endif /* POSIX */\n\n#if defined STDC_HEADERS || defined __GNU_LIBRARY__\n# include <stdlib.h>\n# include <string.h>\n# define\tANSI_STRING\n#else\t/* No standard headers.  */\n\nextern char *getenv ();\n\n# ifdef HAVE_STRING_H\n#  include <string.h>\n#  define ANSI_STRING\n# else\n#  include <strings.h>\n# endif\n# ifdef\tHAVE_MEMORY_H\n#  include <memory.h>\n# endif\n\nextern char *malloc (), *realloc ();\nextern void free ();\n\nextern void qsort ();\nextern void abort (), exit ();\n\n#endif\t/* Standard headers.  */\n\n#ifndef\tANSI_STRING\n\n# ifndef bzero\nextern void bzero ();\n# endif\n# ifndef bcopy\nextern void bcopy ();\n# endif\n\n# define memcpy(d, s, n)\tbcopy ((s), (d), (n))\n# define strrchr\trindex\n/* memset is only used for zero here, but let's be paranoid.  */\n# define memset(s, better_be_zero, n) \\\n  ((void) ((better_be_zero) == 0 ? (bzero((s), (n)), 0) : (abort(), 0)))\n#endif\t/* Not ANSI_STRING.  */\n\n#if !defined HAVE_STRCOLL && !defined _LIBC\n# define strcoll\tstrcmp\n#endif\n\n#if !defined HAVE_MEMPCPY && __GLIBC__ - 0 == 2 && __GLIBC_MINOR__ >= 1\n# define HAVE_MEMPCPY\t1\n# undef  mempcpy\n# define mempcpy(Dest, Src, Len) __mempcpy (Dest, Src, Len)\n#endif\n\n#ifndef\t__GNU_LIBRARY__\n# ifdef\t__GNUC__\n__inline\n# endif\n# ifndef __SASC\n#  ifdef WINDOWS32\nstatic void *\nmy_realloc (void *p, unsigned int n)\n#  else\nstatic char *\nmy_realloc (p, n)\n     char *p;\n     unsigned int n;\n# endif\n{\n  /* These casts are the for sake of the broken Ultrix compiler,\n     which warns of illegal pointer combinations otherwise.  */\n  if (p == NULL)\n    return (char *) malloc (n);\n  return (char *) realloc (p, n);\n}\n# define\trealloc\tmy_realloc\n# endif /* __SASC */\n#endif /* __GNU_LIBRARY__ */\n\n\n#if !defined __alloca && !defined __GNU_LIBRARY__\n\n# ifdef\t__GNUC__\n#  undef alloca\n#  define alloca(n)\t__builtin_alloca (n)\n# else\t/* Not GCC.  */\n#  ifdef HAVE_ALLOCA_H\n#   include <alloca.h>\n#  else\t/* Not HAVE_ALLOCA_H.  */\n#   ifndef _AIX\n#    ifdef WINDOWS32\n#     include <malloc.h>\n#    else\nextern char *alloca ();\n#    endif /* WINDOWS32 */\n#   endif /* Not _AIX.  */\n#  endif /* sparc or HAVE_ALLOCA_H.  */\n# endif\t/* GCC.  */\n\n# define __alloca\talloca\n\n#endif\n\n#ifndef __GNU_LIBRARY__\n# define __stat stat\n# ifdef STAT_MACROS_BROKEN\n#  undef S_ISDIR\n# endif\n# ifndef S_ISDIR\n#  define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)\n# endif\n#endif\n\n#ifdef _LIBC\n# undef strdup\n# define strdup(str) __strdup (str)\n# define sysconf(id) __sysconf (id)\n# define closedir(dir) __closedir (dir)\n# define opendir(name) __opendir (name)\n# define readdir(str) __readdir (str)\n# define getpwnam_r(name, bufp, buf, len, res) \\\n   __getpwnam_r (name, bufp, buf, len, res)\n# ifndef __stat\n#  define __stat(fname, buf) __xstat (_STAT_VER, fname, buf)\n# endif\n#endif\n\n#if !(defined STDC_HEADERS || defined __GNU_LIBRARY__)\n# undef\tsize_t\n# define size_t\tunsigned int\n#endif\n\n/* Some system header files erroneously define these.\n   We want our own definitions from <fnmatch.h> to take precedence.  */\n#ifndef __GNU_LIBRARY__\n# undef\tFNM_PATHNAME\n# undef\tFNM_NOESCAPE\n# undef\tFNM_PERIOD\n#endif\n#include <fnmatch.h>\n\n/* Some system header files erroneously define these.\n   We want our own definitions from <glob.h> to take precedence.  */\n#ifndef __GNU_LIBRARY__\n# undef\tGLOB_ERR\n# undef\tGLOB_MARK\n# undef\tGLOB_NOSORT\n# undef\tGLOB_DOOFFS\n# undef\tGLOB_NOCHECK\n# undef\tGLOB_APPEND\n# undef\tGLOB_NOESCAPE\n# undef\tGLOB_PERIOD\n#endif\n#include <glob.h>\n\n#ifdef HAVE_GETLOGIN_R\nextern int getlogin_r __P ((char *, size_t));\n#else\nextern char *getlogin __P ((void));\n#endif\n\f\nstatic\n#if __GNUC__ - 0 >= 2\ninline\n#endif\nconst char *next_brace_sub __P ((const char *begin));\nstatic int glob_in_dir __P ((const char *pattern, const char *directory,\n\t\t\t     int flags,\n\t\t\t     int (*errfunc) (const char *, int),\n\t\t\t     glob_t *pglob));\nstatic int prefix_array __P ((const char *prefix, char **array, size_t n));\nstatic int collated_compare __P ((const __ptr_t, const __ptr_t));\n\n#if !defined _LIBC || !defined NO_GLOB_PATTERN_P\nint __glob_pattern_p __P ((const char *pattern, int quote));\n#endif\n\n/* Find the end of the sub-pattern in a brace expression.  We define\n   this as an inline function if the compiler permits.  */\nstatic\n#if __GNUC__ - 0 >= 2\ninline\n#endif\nconst char *\nnext_brace_sub (begin)\n     const char *begin;\n{\n  unsigned int depth = 0;\n  const char *cp = begin;\n\n  while (1)\n    {\n      if (depth == 0)\n\t{\n\t  if (*cp != ',' && *cp != '}' && *cp != '\\0')\n\t    {\n\t      if (*cp == '{')\n\t\t++depth;\n\t      ++cp;\n\t      continue;\n\t    }\n\t}\n      else\n\t{\n\t  while (*cp != '\\0' && (*cp != '}' || depth > 0))\n\t    {\n\t      if (*cp == '}')\n\t\t--depth;\n\t      ++cp;\n\t    }\n\t  if (*cp == '\\0')\n\t    /* An incorrectly terminated brace expression.  */\n\t    return NULL;\n\n\t  continue;\n\t}\n      break;\n    }\n\n  return cp;\n}\n\n/* Do glob searching for PATTERN, placing results in PGLOB.\n   The bits defined above may be set in FLAGS.\n   If a directory cannot be opened or read and ERRFUNC is not nil,\n   it is called with the pathname that caused the error, and the\n   `errno' value from the failing call; if it returns non-zero\n   `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored.\n   If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.\n   Otherwise, `glob' returns zero.  */\nint\nglob (pattern, flags, errfunc, pglob)\n     const char *pattern;\n     int flags;\n     int (*errfunc) __P ((const char *, int));\n     glob_t *pglob;\n{\n  const char *filename;\n  const char *dirname;\n  size_t dirlen;\n  int status;\n  int oldcount;\n\n  if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)\n    {\n      __set_errno (EINVAL);\n      return -1;\n    }\n\n  if (flags & GLOB_BRACE)\n    {\n      const char *begin = strchr (pattern, '{');\n      if (begin != NULL)\n\t{\n\t  /* Allocate working buffer large enough for our work.  Note that\n\t    we have at least an opening and closing brace.  */\n\t  int firstc;\n\t  char *alt_start;\n\t  const char *p;\n\t  const char *next;\n\t  const char *rest;\n\t  size_t rest_len;\n#ifdef __GNUC__\n\t  char onealt[strlen (pattern) - 1];\n#else\n\t  char *onealt = (char *) malloc (strlen (pattern) - 1);\n\t  if (onealt == NULL)\n\t    {\n\t      if (!(flags & GLOB_APPEND))\n\t\tglobfree (pglob);\n\t      return GLOB_NOSPACE;\n\t    }\n#endif\n\n\t  /* We know the prefix for all sub-patterns.  */\n#ifdef HAVE_MEMPCPY\n\t  alt_start = mempcpy (onealt, pattern, begin - pattern);\n#else\n\t  memcpy (onealt, pattern, begin - pattern);\n\t  alt_start = &onealt[begin - pattern];\n#endif\n\n\t  /* Find the first sub-pattern and at the same time find the\n\t     rest after the closing brace.  */\n\t  next = next_brace_sub (begin + 1);\n\t  if (next == NULL)\n\t    {\n\t      /* It is an illegal expression.  */\n#ifndef __GNUC__\n\t      free (onealt);\n#endif\n\t      return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);\n\t    }\n\n\t  /* Now find the end of the whole brace expression.  */\n\t  rest = next;\n\t  while (*rest != '}')\n\t    {\n\t      rest = next_brace_sub (rest + 1);\n\t      if (rest == NULL)\n\t\t{\n\t\t  /* It is an illegal expression.  */\n#ifndef __GNUC__\n\t\t  free (onealt);\n#endif\n\t\t  return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);\n\t\t}\n\t    }\n\t  /* Please note that we now can be sure the brace expression\n\t     is well-formed.  */\n\t  rest_len = strlen (++rest) + 1;\n\n\t  /* We have a brace expression.  BEGIN points to the opening {,\n\t     NEXT points past the terminator of the first element, and END\n\t     points past the final }.  We will accumulate result names from\n\t     recursive runs for each brace alternative in the buffer using\n\t     GLOB_APPEND.  */\n\n\t  if (!(flags & GLOB_APPEND))\n\t    {\n\t      /* This call is to set a new vector, so clear out the\n\t\t vector so we can append to it.  */\n\t      pglob->gl_pathc = 0;\n\t      pglob->gl_pathv = NULL;\n\t    }\n\t  firstc = pglob->gl_pathc;\n\n\t  p = begin + 1;\n\t  while (1)\n\t    {\n\t      int result;\n\n\t      /* Construct the new glob expression.  */\n#ifdef HAVE_MEMPCPY\n\t      mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len);\n#else\n\t      memcpy (alt_start, p, next - p);\n\t      memcpy (&alt_start[next - p], rest, rest_len);\n#endif\n\n\t      result = glob (onealt,\n\t\t\t     ((flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC))\n\t\t\t      | GLOB_APPEND), errfunc, pglob);\n\n\t      /* If we got an error, return it.  */\n\t      if (result && result != GLOB_NOMATCH)\n\t\t{\n#ifndef __GNUC__\n\t\t  free (onealt);\n#endif\n\t\t  if (!(flags & GLOB_APPEND))\n\t\t    globfree (pglob);\n\t\t  return result;\n\t\t}\n\n\t      if (*next == '}')\n\t\t/* We saw the last entry.  */\n\t\tbreak;\n\n\t      p = next + 1;\n\t      next = next_brace_sub (p);\n\t      assert (next != NULL);\n\t    }\n\n#ifndef __GNUC__\n\t  free (onealt);\n#endif\n\n\t  if (pglob->gl_pathc != firstc)\n\t    /* We found some entries.  */\n\t    return 0;\n\t  else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))\n\t    return GLOB_NOMATCH;\n\t}\n    }\n\n  /* Find the filename.  */\n  filename = strrchr (pattern, '/');\n#if defined __MSDOS__ || defined WINDOWS32\n  /* The case of \"d:pattern\".  Since `:' is not allowed in\n     file names, we can safely assume that wherever it\n     happens in pattern, it signals the filename part.  This\n     is so we could some day support patterns like \"[a-z]:foo\".  */\n  if (filename == NULL)\n    filename = strchr (pattern, ':');\n#endif /* __MSDOS__ || WINDOWS32 */\n  if (filename == NULL)\n    {\n      /* This can mean two things: a simple name or \"~name\".  The later\n\t case is nothing but a notation for a directory.  */\n      if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~')\n\t{\n\t  dirname = pattern;\n\t  dirlen = strlen (pattern);\n\n\t  /* Set FILENAME to NULL as a special flag.  This is ugly but\n\t     other solutions would require much more code.  We test for\n\t     this special case below.  */\n\t  filename = NULL;\n\t}\n      else\n\t{\n\t  filename = pattern;\n#ifdef _AMIGA\n\t  dirname = \"\";\n#else\n\t  dirname = \".\";\n#endif\n\t  dirlen = 0;\n\t}\n    }\n  else if (filename == pattern)\n    {\n      /* \"/pattern\".  */\n      dirname = \"/\";\n      dirlen = 1;\n      ++filename;\n    }\n  else\n    {\n      char *newp;\n      dirlen = filename - pattern;\n#if defined __MSDOS__ || defined WINDOWS32\n      if (*filename == ':'\n\t  || (filename > pattern + 1 && filename[-1] == ':'))\n\t{\n\t  char *drive_spec;\n\n\t  ++dirlen;\n\t  drive_spec = (char *) __alloca (dirlen + 1);\n#ifdef HAVE_MEMPCPY\n\t  *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\\0';\n#else\n\t  memcpy (drive_spec, pattern, dirlen);\n\t  drive_spec[dirlen] = '\\0';\n#endif\n\t  /* For now, disallow wildcards in the drive spec, to\n\t     prevent infinite recursion in glob.  */\n\t  if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE)))\n\t    return GLOB_NOMATCH;\n\t  /* If this is \"d:pattern\", we need to copy `:' to DIRNAME\n\t     as well.  If it's \"d:/pattern\", don't remove the slash\n\t     from \"d:/\", since \"d:\" and \"d:/\" are not the same.*/\n\t}\n#endif\n      newp = (char *) __alloca (dirlen + 1);\n#ifdef HAVE_MEMPCPY\n      *((char *) mempcpy (newp, pattern, dirlen)) = '\\0';\n#else\n      memcpy (newp, pattern, dirlen);\n      newp[dirlen] = '\\0';\n#endif\n      dirname = newp;\n      ++filename;\n\n      if (filename[0] == '\\0'\n#if defined __MSDOS__ || defined WINDOWS32\n          && dirname[dirlen - 1] != ':'\n\t  && (dirlen < 3 || dirname[dirlen - 2] != ':'\n\t      || dirname[dirlen - 1] != '/')\n#endif\n\t  && dirlen > 1)\n\t/* \"pattern/\".  Expand \"pattern\", appending slashes.  */\n\t{\n\t  int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob);\n\t  if (val == 0)\n\t    pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK)\n\t\t\t       | (flags & GLOB_MARK));\n\t  return val;\n\t}\n    }\n\n  if (!(flags & GLOB_APPEND))\n    {\n      pglob->gl_pathc = 0;\n      pglob->gl_pathv = NULL;\n    }\n\n  oldcount = pglob->gl_pathc;\n\n#ifndef VMS\n  if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')\n    {\n      if (dirname[1] == '\\0' || dirname[1] == '/')\n\t{\n\t  /* Look up home directory.  */\n#ifdef VMS\n/* This isn't obvious, RTLs of DECC and VAXC know about \"HOME\" */\n          const char *home_dir = getenv (\"SYS$LOGIN\");\n#else\n          const char *home_dir = getenv (\"HOME\");\n#endif\n# ifdef _AMIGA\n\t  if (home_dir == NULL || home_dir[0] == '\\0')\n\t    home_dir = \"SYS:\";\n# else\n#  ifdef WINDOWS32\n\t  if (home_dir == NULL || home_dir[0] == '\\0')\n            home_dir = \"c:/users/default\"; /* poor default */\n#  else\n#   ifdef VMS\n/* Again, this isn't obvious, if \"HOME\" isn't known \"SYS$LOGIN\" should be set */\n\t  if (home_dir == NULL || home_dir[0] == '\\0')\n\t    home_dir = \"SYS$DISK:[]\";\n#   else\n\t  if (home_dir == NULL || home_dir[0] == '\\0')\n\t    {\n\t      int success;\n\t      char *name;\n#   if defined HAVE_GETLOGIN_R || defined _LIBC\n\t      size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1;\n\n\t      if (buflen == 0)\n\t\t/* `sysconf' does not support _SC_LOGIN_NAME_MAX.  Try\n\t\t   a moderate value.  */\n\t\tbuflen = 20;\n\t      name = (char *) __alloca (buflen);\n\n\t      success = getlogin_r (name, buflen) >= 0;\n#   else\n\t      success = (name = getlogin ()) != NULL;\n#   endif\n\t      if (success)\n\t\t{\n\t\t  struct passwd *p;\n#   if defined HAVE_GETPWNAM_R || defined _LIBC\n\t\t  size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX);\n\t\t  char *pwtmpbuf;\n\t\t  struct passwd pwbuf;\n\t\t  int save = errno;\n\n\t\t  if (pwbuflen == -1)\n\t\t    /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX.\n\t\t       Try a moderate value.  */\n\t\t    pwbuflen = 1024;\n\t\t  pwtmpbuf = (char *) __alloca (pwbuflen);\n\n\t\t  while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p)\n\t\t\t != 0)\n\t\t    {\n\t\t      if (errno != ERANGE)\n\t\t\t{\n\t\t\t  p = NULL;\n\t\t\t  break;\n\t\t\t}\n\t\t      pwbuflen *= 2;\n\t\t      pwtmpbuf = (char *) __alloca (pwbuflen);\n\t\t      __set_errno (save);\n\t\t    }\n#   else\n\t\t  p = getpwnam (name);\n#   endif\n\t\t  if (p != NULL)\n\t\t    home_dir = p->pw_dir;\n\t\t}\n\t    }\n\t  if (home_dir == NULL || home_dir[0] == '\\0')\n\t    {\n\t      if (flags & GLOB_TILDE_CHECK)\n\t\treturn GLOB_NOMATCH;\n\t      else\n\t\thome_dir = \"~\"; /* No luck.  */\n\t    }\n#   endif /* VMS */\n#  endif /* WINDOWS32 */\n# endif\n\t  /* Now construct the full directory.  */\n\t  if (dirname[1] == '\\0')\n\t    dirname = home_dir;\n\t  else\n\t    {\n\t      char *newp;\n\t      size_t home_len = strlen (home_dir);\n\t      newp = (char *) __alloca (home_len + dirlen);\n# ifdef HAVE_MEMPCPY\n\t      mempcpy (mempcpy (newp, home_dir, home_len),\n\t\t       &dirname[1], dirlen);\n# else\n\t      memcpy (newp, home_dir, home_len);\n\t      memcpy (&newp[home_len], &dirname[1], dirlen);\n# endif\n\t      dirname = newp;\n\t    }\n\t}\n# if !defined _AMIGA && !defined WINDOWS32 && !defined VMS\n      else\n\t{\n\t  char *end_name = strchr (dirname, '/');\n\t  const char *user_name;\n\t  const char *home_dir;\n\n\t  if (end_name == NULL)\n\t    user_name = dirname + 1;\n\t  else\n\t    {\n\t      char *newp;\n\t      newp = (char *) __alloca (end_name - dirname);\n# ifdef HAVE_MEMPCPY\n\t      *((char *) mempcpy (newp, dirname + 1, end_name - dirname))\n\t\t= '\\0';\n# else\n\t      memcpy (newp, dirname + 1, end_name - dirname);\n\t      newp[end_name - dirname - 1] = '\\0';\n# endif\n\t      user_name = newp;\n\t    }\n\n\t  /* Look up specific user's home directory.  */\n\t  {\n\t    struct passwd *p;\n#  if defined HAVE_GETPWNAM_R || defined _LIBC\n\t    size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);\n\t    char *pwtmpbuf;\n\t    struct passwd pwbuf;\n\t    int save = errno;\n\n\t    if (buflen == -1)\n\t      /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX.  Try a\n\t\t moderate value.  */\n\t      buflen = 1024;\n\t    pwtmpbuf = (char *) __alloca (buflen);\n\n\t    while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0)\n\t      {\n\t\tif (errno != ERANGE)\n\t\t  {\n\t\t    p = NULL;\n\t\t    break;\n\t\t  }\n\t\tbuflen *= 2;\n\t\tpwtmpbuf = __alloca (buflen);\n\t\t__set_errno (save);\n\t      }\n#  else\n\t    p = getpwnam (user_name);\n#  endif\n\t    if (p != NULL)\n\t      home_dir = p->pw_dir;\n\t    else\n\t      home_dir = NULL;\n\t  }\n\t  /* If we found a home directory use this.  */\n\t  if (home_dir != NULL)\n\t    {\n\t      char *newp;\n\t      size_t home_len = strlen (home_dir);\n\t      size_t rest_len = end_name == NULL ? 0 : strlen (end_name);\n\t      newp = (char *) __alloca (home_len + rest_len + 1);\n#  ifdef HAVE_MEMPCPY\n\t      *((char *) mempcpy (mempcpy (newp, home_dir, home_len),\n\t\t\t\t  end_name, rest_len)) = '\\0';\n#  else\n\t      memcpy (newp, home_dir, home_len);\n\t      memcpy (&newp[home_len], end_name, rest_len);\n\t      newp[home_len + rest_len] = '\\0';\n#  endif\n\t      dirname = newp;\n\t    }\n\t  else\n\t    if (flags & GLOB_TILDE_CHECK)\n\t      /* We have to regard it as an error if we cannot find the\n\t\t home directory.  */\n\t      return GLOB_NOMATCH;\n\t}\n# endif\t/* Not Amiga && not WINDOWS32 && not VMS.  */\n    }\n#endif\t/* Not VMS.  */\n\n  /* Now test whether we looked for \"~\" or \"~NAME\".  In this case we\n     can give the answer now.  */\n  if (filename == NULL)\n    {\n      struct stat st;\n\n      /* Return the directory if we don't check for error or if it exists.  */\n      if ((flags & GLOB_NOCHECK)\n\t  || (((flags & GLOB_ALTDIRFUNC)\n\t       ? (*pglob->gl_stat) (dirname, &st)\n\t       : __stat (dirname, &st)) == 0\n\t      && S_ISDIR (st.st_mode)))\n\t{\n\t  pglob->gl_pathv\n\t    = (char **) realloc (pglob->gl_pathv,\n\t\t\t\t (pglob->gl_pathc +\n\t\t\t\t  ((flags & GLOB_DOOFFS) ?\n\t\t\t\t   pglob->gl_offs : 0) +\n\t\t\t\t  1 + 1) *\n\t\t\t\t sizeof (char *));\n\t  if (pglob->gl_pathv == NULL)\n\t    return GLOB_NOSPACE;\n\n\t  if (flags & GLOB_DOOFFS)\n\t    while (pglob->gl_pathc < pglob->gl_offs)\n\t      pglob->gl_pathv[pglob->gl_pathc++] = NULL;\n\n#if defined HAVE_STRDUP || defined _LIBC\n\t  pglob->gl_pathv[pglob->gl_pathc] = strdup (dirname);\n#else\n\t  {\n\t    size_t len = strlen (dirname) + 1;\n\t    char *dircopy = malloc (len);\n\t    if (dircopy != NULL)\n\t      pglob->gl_pathv[pglob->gl_pathc] = memcpy (dircopy, dirname,\n\t\t\t\t\t\t\t len);\n\t  }\n#endif\n\t  if (pglob->gl_pathv[pglob->gl_pathc] == NULL)\n\t    {\n\t      free (pglob->gl_pathv);\n\t      return GLOB_NOSPACE;\n\t    }\n\t  pglob->gl_pathv[++pglob->gl_pathc] = NULL;\n\t  pglob->gl_flags = flags;\n\n\t  return 0;\n\t}\n\n      /* Not found.  */\n      return GLOB_NOMATCH;\n    }\n\n  if (__glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE)))\n    {\n      /* The directory name contains metacharacters, so we\n\t have to glob for the directory, and then glob for\n\t the pattern in each directory found.  */\n      glob_t dirs;\n      register int i;\n\n      status = glob (dirname,\n\t\t     ((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE))\n\t\t      | GLOB_NOSORT | GLOB_ONLYDIR),\n\t\t     errfunc, &dirs);\n      if (status != 0)\n\treturn status;\n\n      /* We have successfully globbed the preceding directory name.\n\t For each name we found, call glob_in_dir on it and FILENAME,\n\t appending the results to PGLOB.  */\n      for (i = 0; i < dirs.gl_pathc; ++i)\n\t{\n\t  int old_pathc;\n\n#ifdef\tSHELL\n\t  {\n\t    /* Make globbing interruptible in the bash shell. */\n\t    extern int interrupt_state;\n\n\t    if (interrupt_state)\n\t      {\n\t\tglobfree (&dirs);\n\t\tglobfree (&files);\n\t\treturn GLOB_ABORTED;\n\t      }\n\t  }\n#endif /* SHELL.  */\n\n\t  old_pathc = pglob->gl_pathc;\n\t  status = glob_in_dir (filename, dirs.gl_pathv[i],\n\t\t\t\t((flags | GLOB_APPEND)\n\t\t\t\t & ~(GLOB_NOCHECK | GLOB_ERR)),\n\t\t\t\terrfunc, pglob);\n\t  if (status == GLOB_NOMATCH)\n\t    /* No matches in this directory.  Try the next.  */\n\t    continue;\n\n\t  if (status != 0)\n\t    {\n\t      globfree (&dirs);\n\t      globfree (pglob);\n\t      return status;\n\t    }\n\n\t  /* Stick the directory on the front of each name.  */\n\t  if (prefix_array (dirs.gl_pathv[i],\n\t\t\t    &pglob->gl_pathv[old_pathc],\n\t\t\t    pglob->gl_pathc - old_pathc))\n\t    {\n\t      globfree (&dirs);\n\t      globfree (pglob);\n\t      return GLOB_NOSPACE;\n\t    }\n\t}\n\n      flags |= GLOB_MAGCHAR;\n\n      /* We have ignored the GLOB_NOCHECK flag in the `glob_in_dir' calls.\n\t But if we have not found any matching entry and thie GLOB_NOCHECK\n\t flag was set we must return the list consisting of the disrectory\n\t names followed by the filename.  */\n      if (pglob->gl_pathc == oldcount)\n\t{\n\t  /* No matches.  */\n\t  if (flags & GLOB_NOCHECK)\n\t    {\n\t      size_t filename_len = strlen (filename) + 1;\n\t      char **new_pathv;\n\t      struct stat st;\n\n\t      /* This is an pessimistic guess about the size.  */\n\t      pglob->gl_pathv\n\t\t= (char **) realloc (pglob->gl_pathv,\n\t\t\t\t     (pglob->gl_pathc +\n\t\t\t\t      ((flags & GLOB_DOOFFS) ?\n\t\t\t\t       pglob->gl_offs : 0) +\n\t\t\t\t      dirs.gl_pathc + 1) *\n\t\t\t\t     sizeof (char *));\n\t      if (pglob->gl_pathv == NULL)\n\t\t{\n\t\t  globfree (&dirs);\n\t\t  return GLOB_NOSPACE;\n\t\t}\n\n\t      if (flags & GLOB_DOOFFS)\n\t\twhile (pglob->gl_pathc < pglob->gl_offs)\n\t\t  pglob->gl_pathv[pglob->gl_pathc++] = NULL;\n\n\t      for (i = 0; i < dirs.gl_pathc; ++i)\n\t\t{\n\t\t  const char *dir = dirs.gl_pathv[i];\n\t\t  size_t dir_len = strlen (dir);\n\n\t\t  /* First check whether this really is a directory.  */\n\t\t  if (((flags & GLOB_ALTDIRFUNC)\n\t\t       ? (*pglob->gl_stat) (dir, &st) : __stat (dir, &st)) != 0\n\t\t      || !S_ISDIR (st.st_mode))\n\t\t    /* No directory, ignore this entry.  */\n\t\t    continue;\n\n\t\t  pglob->gl_pathv[pglob->gl_pathc] = malloc (dir_len + 1\n\t\t\t\t\t\t\t     + filename_len);\n\t\t  if (pglob->gl_pathv[pglob->gl_pathc] == NULL)\n\t\t    {\n\t\t      globfree (&dirs);\n\t\t      globfree (pglob);\n\t\t      return GLOB_NOSPACE;\n\t\t    }\n\n#ifdef HAVE_MEMPCPY\n\t\t  mempcpy (mempcpy (mempcpy (pglob->gl_pathv[pglob->gl_pathc],\n\t\t\t\t\t     dir, dir_len),\n\t\t\t\t    \"/\", 1),\n\t\t\t   filename, filename_len);\n#else\n\t\t  memcpy (pglob->gl_pathv[pglob->gl_pathc], dir, dir_len);\n\t\t  pglob->gl_pathv[pglob->gl_pathc][dir_len] = '/';\n\t\t  memcpy (&pglob->gl_pathv[pglob->gl_pathc][dir_len + 1],\n\t\t\t  filename, filename_len);\n#endif\n\t\t  ++pglob->gl_pathc;\n\t\t}\n\n\t      pglob->gl_pathv[pglob->gl_pathc] = NULL;\n\t      pglob->gl_flags = flags;\n\n\t      /* Now we know how large the gl_pathv vector must be.  */\n\t      new_pathv = (char **) realloc (pglob->gl_pathv,\n\t\t\t\t\t     ((pglob->gl_pathc + 1)\n\t\t\t\t\t      * sizeof (char *)));\n\t      if (new_pathv != NULL)\n\t\tpglob->gl_pathv = new_pathv;\n\t    }\n\t  else\n\t    return GLOB_NOMATCH;\n\t}\n\n      globfree (&dirs);\n    }\n  else\n    {\n      status = glob_in_dir (filename, dirname, flags, errfunc, pglob);\n      if (status != 0)\n\treturn status;\n\n      if (dirlen > 0)\n\t{\n\t  /* Stick the directory on the front of each name.  */\n\t  int ignore = oldcount;\n\n\t  if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs)\n\t    ignore = pglob->gl_offs;\n\n\t  if (prefix_array (dirname,\n\t\t\t    &pglob->gl_pathv[ignore],\n\t\t\t    pglob->gl_pathc - ignore))\n\t    {\n\t      globfree (pglob);\n\t      return GLOB_NOSPACE;\n\t    }\n\t}\n    }\n\n  if (flags & GLOB_MARK)\n    {\n      /* Append slashes to directory names.  */\n      int i;\n      struct stat st;\n      for (i = oldcount; i < pglob->gl_pathc; ++i)\n\tif (((flags & GLOB_ALTDIRFUNC)\n\t     ? (*pglob->gl_stat) (pglob->gl_pathv[i], &st)\n\t     : __stat (pglob->gl_pathv[i], &st)) == 0\n\t    && S_ISDIR (st.st_mode))\n\t  {\n \t    size_t len = strlen (pglob->gl_pathv[i]) + 2;\n\t    char *new = realloc (pglob->gl_pathv[i], len);\n \t    if (new == NULL)\n\t      {\n\t\tglobfree (pglob);\n\t\treturn GLOB_NOSPACE;\n\t      }\n\t    strcpy (&new[len - 2], \"/\");\n\t    pglob->gl_pathv[i] = new;\n\t  }\n    }\n\n  if (!(flags & GLOB_NOSORT))\n    {\n      /* Sort the vector.  */\n      int non_sort = oldcount;\n\n      if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount)\n\tnon_sort = pglob->gl_offs;\n\n      qsort ((__ptr_t) &pglob->gl_pathv[non_sort],\n\t     pglob->gl_pathc - non_sort,\n\t     sizeof (char *), collated_compare);\n    }\n\n  return 0;\n}\n\n\n/* Free storage allocated in PGLOB by a previous `glob' call.  */\nvoid\nglobfree (pglob)\n     register glob_t *pglob;\n{\n  if (pglob->gl_pathv != NULL)\n    {\n      register int i;\n      for (i = 0; i < pglob->gl_pathc; ++i)\n\tif (pglob->gl_pathv[i] != NULL)\n\t  free ((__ptr_t) pglob->gl_pathv[i]);\n      free ((__ptr_t) pglob->gl_pathv);\n    }\n}\n\n\n/* Do a collated comparison of A and B.  */\nstatic int\ncollated_compare (a, b)\n     const __ptr_t a;\n     const __ptr_t b;\n{\n  const char *const s1 = *(const char *const * const) a;\n  const char *const s2 = *(const char *const * const) b;\n\n  if (s1 == s2)\n    return 0;\n  if (s1 == NULL)\n    return 1;\n  if (s2 == NULL)\n    return -1;\n  return strcoll (s1, s2);\n}\n\n\n/* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's\n   elements in place.  Return nonzero if out of memory, zero if successful.\n   A slash is inserted between DIRNAME and each elt of ARRAY,\n   unless DIRNAME is just \"/\".  Each old element of ARRAY is freed.  */\nstatic int\nprefix_array (dirname, array, n)\n     const char *dirname;\n     char **array;\n     size_t n;\n{\n  register size_t i;\n  size_t dirlen = strlen (dirname);\n#if defined __MSDOS__ || defined WINDOWS32\n  int sep_char = '/';\n# define DIRSEP_CHAR sep_char\n#else\n# define DIRSEP_CHAR '/'\n#endif\n\n  if (dirlen == 1 && dirname[0] == '/')\n    /* DIRNAME is just \"/\", so normal prepending would get us \"//foo\".\n       We want \"/foo\" instead, so don't prepend any chars from DIRNAME.  */\n    dirlen = 0;\n#if defined __MSDOS__ || defined WINDOWS32\n  else if (dirlen > 1)\n    {\n      if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')\n\t/* DIRNAME is \"d:/\".  Don't prepend the slash from DIRNAME.  */\n\t--dirlen;\n      else if (dirname[dirlen - 1] == ':')\n\t{\n\t  /* DIRNAME is \"d:\".  Use `:' instead of `/'.  */\n\t  --dirlen;\n\t  sep_char = ':';\n\t}\n    }\n#endif\n\n  for (i = 0; i < n; ++i)\n    {\n      size_t eltlen = strlen (array[i]) + 1;\n      char *new = (char *) malloc (dirlen + 1 + eltlen);\n      if (new == NULL)\n\t{\n\t  while (i > 0)\n\t    free ((__ptr_t) array[--i]);\n\t  return 1;\n\t}\n\n#ifdef HAVE_MEMPCPY\n      {\n\tchar *endp = (char *) mempcpy (new, dirname, dirlen);\n\t*endp++ = DIRSEP_CHAR;\n\tmempcpy (endp, array[i], eltlen);\n      }\n#else\n      memcpy (new, dirname, dirlen);\n      new[dirlen] = DIRSEP_CHAR;\n      memcpy (&new[dirlen + 1], array[i], eltlen);\n#endif\n      free ((__ptr_t) array[i]);\n      array[i] = new;\n    }\n\n  return 0;\n}\n\n\n/* We must not compile this function twice.  */\n#if !defined _LIBC || !defined NO_GLOB_PATTERN_P\n/* Return nonzero if PATTERN contains any metacharacters.\n   Metacharacters can be quoted with backslashes if QUOTE is nonzero.  */\nint\n__glob_pattern_p (pattern, quote)\n     const char *pattern;\n     int quote;\n{\n  register const char *p;\n  int open = 0;\n\n  for (p = pattern; *p != '\\0'; ++p)\n    switch (*p)\n      {\n      case '?':\n      case '*':\n\treturn 1;\n\n      case '\\\\':\n\tif (quote && p[1] != '\\0')\n\t  ++p;\n\tbreak;\n\n      case '[':\n\topen = 1;\n\tbreak;\n\n      case ']':\n\tif (open)\n\t  return 1;\n\tbreak;\n      }\n\n  return 0;\n}\n# ifdef _LIBC\nweak_alias (__glob_pattern_p, glob_pattern_p)\n# endif\n#endif\n\n\n/* Like `glob', but PATTERN is a final pathname component,\n   and matches are searched for in DIRECTORY.\n   The GLOB_NOSORT bit in FLAGS is ignored.  No sorting is ever done.\n   The GLOB_APPEND flag is assumed to be set (always appends).  */\nstatic int\nglob_in_dir (pattern, directory, flags, errfunc, pglob)\n     const char *pattern;\n     const char *directory;\n     int flags;\n     int (*errfunc) __P ((const char *, int));\n     glob_t *pglob;\n{\n  __ptr_t stream = NULL;\n\n  struct globlink\n    {\n      struct globlink *next;\n      char *name;\n    };\n  struct globlink *names = NULL;\n  size_t nfound;\n  int meta;\n  int save;\n\n#ifdef VMS\n  if (*directory == 0)\n    directory = \"[]\";\n#endif\n  meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE));\n  if (meta == 0)\n    {\n      if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))\n\t/* We need not do any tests.  The PATTERN contains no meta\n\t   characters and we must not return an error therefore the\n\t   result will always contain exactly one name.  */\n\tflags |= GLOB_NOCHECK;\n      else\n\t{\n\t  /* Since we use the normal file functions we can also use stat()\n\t     to verify the file is there.  */\n\t  struct stat st;\n\t  size_t patlen = strlen (pattern);\n\t  size_t dirlen = strlen (directory);\n\t  char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1);\n\n# ifdef HAVE_MEMPCPY\n\t  mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),\n\t\t\t    \"/\", 1),\n\t\t   pattern, patlen + 1);\n# else\n\t  memcpy (fullname, directory, dirlen);\n\t  fullname[dirlen] = '/';\n\t  memcpy (&fullname[dirlen + 1], pattern, patlen + 1);\n# endif\n\t  if (((flags & GLOB_ALTDIRFUNC)\n\t       ? (*pglob->gl_stat) (fullname, &st)\n\t       : __stat (fullname, &st)) == 0)\n\t    /* We found this file to be existing.  Now tell the rest\n\t       of the function to copy this name into the result.  */\n\t    flags |= GLOB_NOCHECK;\n\t}\n\n      nfound = 0;\n    }\n  else\n    {\n      if (pattern[0] == '\\0')\n\t{\n\t  /* This is a special case for matching directories like in\n\t     \"*a/\".  */\n\t  names = (struct globlink *) __alloca (sizeof (struct globlink));\n\t  names->name = (char *) malloc (1);\n\t  if (names->name == NULL)\n\t    goto memory_error;\n\t  names->name[0] = '\\0';\n\t  names->next = NULL;\n\t  nfound = 1;\n\t  meta = 0;\n\t}\n      else\n\t{\n\t  stream = ((flags & GLOB_ALTDIRFUNC)\n\t\t    ? (*pglob->gl_opendir) (directory)\n\t\t    : (__ptr_t) opendir (directory));\n\t  if (stream == NULL)\n\t    {\n\t      if (errno != ENOTDIR\n\t\t  && ((errfunc != NULL && (*errfunc) (directory, errno))\n\t\t      || (flags & GLOB_ERR)))\n\t\treturn GLOB_ABORTED;\n\t      nfound = 0;\n\t      meta = 0;\n\t    }\n\t  else\n\t    {\n\t      int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)\n\t\t\t       | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)\n#if defined HAVE_CASE_INSENSITIVE_FS\n\t\t\t\t   | FNM_CASEFOLD\n#endif\n\t\t\t\t   );\n\t      nfound = 0;\n\t      flags |= GLOB_MAGCHAR;\n\n\t      while (1)\n\t\t{\n\t\t  const char *name;\n\t\t  size_t len;\n\t\t  struct dirent *d = ((flags & GLOB_ALTDIRFUNC)\n\t\t\t\t      ? (*pglob->gl_readdir) (stream)\n\t\t\t\t      : readdir ((DIR *) stream));\n\t\t  if (d == NULL)\n\t\t    break;\n\t\t  if (! REAL_DIR_ENTRY (d))\n\t\t    continue;\n\n#ifdef HAVE_D_TYPE\n\t\t  /* If we shall match only directories use the information\n\t\t     provided by the dirent call if possible.  */\n\t\t  if ((flags & GLOB_ONLYDIR)\n\t\t      && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)\n\t\t    continue;\n#endif\n\n\t\t  name = d->d_name;\n\n\t\t  if (fnmatch (pattern, name, fnm_flags) == 0)\n\t\t    {\n\t\t      struct globlink *new = (struct globlink *)\n\t\t\t__alloca (sizeof (struct globlink));\n\t\t      len = NAMLEN (d);\n\t\t      new->name = (char *) malloc (len + 1);\n\t\t      if (new->name == NULL)\n\t\t\tgoto memory_error;\n#ifdef HAVE_MEMPCPY\n\t\t      *((char *) mempcpy ((__ptr_t) new->name, name, len))\n\t\t\t= '\\0';\n#else\n\t\t      memcpy ((__ptr_t) new->name, name, len);\n\t\t      new->name[len] = '\\0';\n#endif\n\t\t      new->next = names;\n\t\t      names = new;\n\t\t      ++nfound;\n\t\t    }\n\t\t}\n\t    }\n\t}\n    }\n\n  if (nfound == 0 && (flags & GLOB_NOCHECK))\n    {\n      size_t len = strlen (pattern);\n      nfound = 1;\n      names = (struct globlink *) __alloca (sizeof (struct globlink));\n      names->next = NULL;\n      names->name = (char *) malloc (len + 1);\n      if (names->name == NULL)\n\tgoto memory_error;\n#ifdef HAVE_MEMPCPY\n      *((char *) mempcpy (names->name, pattern, len)) = '\\0';\n#else\n      memcpy (names->name, pattern, len);\n      names->name[len] = '\\0';\n#endif\n    }\n\n  if (nfound != 0)\n    {\n      pglob->gl_pathv\n\t= (char **) realloc (pglob->gl_pathv,\n\t\t\t     (pglob->gl_pathc +\n\t\t\t      ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) +\n\t\t\t      nfound + 1) *\n\t\t\t     sizeof (char *));\n      if (pglob->gl_pathv == NULL)\n\tgoto memory_error;\n\n      if (flags & GLOB_DOOFFS)\n\twhile (pglob->gl_pathc < pglob->gl_offs)\n\t  pglob->gl_pathv[pglob->gl_pathc++] = NULL;\n\n      for (; names != NULL; names = names->next)\n\tpglob->gl_pathv[pglob->gl_pathc++] = names->name;\n      pglob->gl_pathv[pglob->gl_pathc] = NULL;\n\n      pglob->gl_flags = flags;\n    }\n\n  save = errno;\n  if (stream != NULL)\n    {\n      if (flags & GLOB_ALTDIRFUNC)\n\t(*pglob->gl_closedir) (stream);\n      else\n\tclosedir ((DIR *) stream);\n    }\n  __set_errno (save);\n\n  return nfound == 0 ? GLOB_NOMATCH : 0;\n\n memory_error:\n  {\n    int save = errno;\n    if (flags & GLOB_ALTDIRFUNC)\n      (*pglob->gl_closedir) (stream);\n    else\n      closedir ((DIR *) stream);\n    __set_errno (save);\n  }\n  while (names != NULL)\n    {\n      if (names->name != NULL)\n\tfree ((__ptr_t) names->name);\n      names = names->next;\n    }\n  return GLOB_NOSPACE;\n}\n\n#endif\t/* Not ELIDE_CODE.  */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/glob/glob.h",
    "content": "/* Copyright (C) 1991, 92, 95, 96, 97, 98 Free Software Foundation, Inc.\n\nThe GNU C Library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public License as\npublished by the Free Software Foundation; either version 2 of the\nLicense, or (at your option) any later version.\n\nThe GNU C Library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public License\nalong with this library; see the file COPYING.LIB.  If not, write to the Free\nSoftware Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301\nUSA.  */\n\n#ifndef\t_GLOB_H\n#define\t_GLOB_H\t1\n\n#ifdef\t__cplusplus\nextern \"C\" {\n#endif\n\n#undef\t__ptr_t\n#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32\n# if !defined __GLIBC__\n#  undef __P\n#  undef __PMT\n#  define __P(protos)\tprotos\n#  define __PMT(protos)\tprotos\n#  if !defined __GNUC__ || __GNUC__ < 2\n#   undef __const\n#   define __const const\n#  endif\n# endif\n# define __ptr_t\tvoid *\n#else /* Not C++ or ANSI C.  */\n# undef\t__P\n# undef __PMT\n# define __P(protos)\t()\n# define __PMT(protos)\t()\n# undef\t__const\n# define __const\n# define __ptr_t\tchar *\n#endif /* C++ or ANSI C.  */\n\n/* We need `size_t' for the following definitions.  */\n#ifndef __size_t\n# if defined __FreeBSD__\n#  define __size_t size_t\n# else\n#  if defined __GNUC__ && __GNUC__ >= 2\ntypedef __SIZE_TYPE__ __size_t;\n#  else\n/* This is a guess.  */\n/*hb\n *\tConflicts with DECCs aready defined type __size_t.\n *\tDefining an own type with a name beginning with '__' is no good.\n *\tAnyway if DECC is used and __SIZE_T is defined then __size_t is\n *\talready defined (and I hope it's exactly the one we need here).\n */\n#   if !(defined __DECC && defined __SIZE_T)\ntypedef unsigned long int __size_t;\n#   endif\n#  endif\n# endif\n#else\n/* The GNU CC stddef.h version defines __size_t as empty.  We need a real\n   definition.  */\n# undef __size_t\n# define __size_t size_t\n#endif\n\n/* Bits set in the FLAGS argument to `glob'.  */\n#define\tGLOB_ERR\t(1 << 0)/* Return on read errors.  */\n#define\tGLOB_MARK\t(1 << 1)/* Append a slash to each name.  */\n#define\tGLOB_NOSORT\t(1 << 2)/* Don't sort the names.  */\n#define\tGLOB_DOOFFS\t(1 << 3)/* Insert PGLOB->gl_offs NULLs.  */\n#define\tGLOB_NOCHECK\t(1 << 4)/* If nothing matches, return the pattern.  */\n#define\tGLOB_APPEND\t(1 << 5)/* Append to results of a previous call.  */\n#define\tGLOB_NOESCAPE\t(1 << 6)/* Backslashes don't quote metacharacters.  */\n#define\tGLOB_PERIOD\t(1 << 7)/* Leading `.' can be matched by metachars.  */\n\n#if (!defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _BSD_SOURCE \\\n     || defined _GNU_SOURCE)\n# define GLOB_MAGCHAR\t (1 << 8)/* Set in gl_flags if any metachars seen.  */\n# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */\n# define GLOB_BRACE\t (1 << 10)/* Expand \"{a,b}\" to \"a\" \"b\".  */\n# define GLOB_NOMAGIC\t (1 << 11)/* If no magic chars, return the pattern.  */\n# define GLOB_TILDE\t (1 << 12)/* Expand ~user and ~ to home directories. */\n# define GLOB_ONLYDIR\t (1 << 13)/* Match only directories.  */\n# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error\n\t\t\t\t      if the user name is not available.  */\n# define __GLOB_FLAGS\t(GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \\\n\t\t\t GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \\\n\t\t\t GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \\\n\t\t\t GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)\n#else\n# define __GLOB_FLAGS\t(GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \\\n\t\t\t GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \\\n\t\t\t GLOB_PERIOD)\n#endif\n\n/* Error returns from `glob'.  */\n#define\tGLOB_NOSPACE\t1\t/* Ran out of memory.  */\n#define\tGLOB_ABORTED\t2\t/* Read error.  */\n#define\tGLOB_NOMATCH\t3\t/* No matches found.  */\n#define GLOB_NOSYS\t4\t/* Not implemented.  */\n#ifdef _GNU_SOURCE\n/* Previous versions of this file defined GLOB_ABEND instead of\n   GLOB_ABORTED.  Provide a compatibility definition here.  */\n# define GLOB_ABEND GLOB_ABORTED\n#endif\n\n/* Structure describing a globbing run.  */\n#if !defined _AMIGA && !defined VMS /* Buggy compiler.   */\nstruct stat;\n#endif\ntypedef struct\n  {\n    __size_t gl_pathc;\t\t/* Count of paths matched by the pattern.  */\n    char **gl_pathv;\t\t/* List of matched pathnames.  */\n    __size_t gl_offs;\t\t/* Slots to reserve in `gl_pathv'.  */\n    int gl_flags;\t\t/* Set to FLAGS, maybe | GLOB_MAGCHAR.  */\n\n    /* If the GLOB_ALTDIRFUNC flag is set, the following functions\n       are used instead of the normal file access functions.  */\n    void (*gl_closedir) __PMT ((void *));\n    struct dirent *(*gl_readdir) __PMT ((void *));\n    __ptr_t (*gl_opendir) __PMT ((__const char *));\n    int (*gl_lstat) __PMT ((__const char *, struct stat *));\n#if defined(VMS) && defined(__DECC) && !defined(_POSIX_C_SOURCE)\n    int (*gl_stat) __PMT ((__const char *, struct stat *, ...));\n#else\n    int (*gl_stat) __PMT ((__const char *, struct stat *));\n#endif\n  } glob_t;\n\n#ifdef _LARGEFILE64_SOURCE\nstruct stat64;\ntypedef struct\n  {\n    __size_t gl_pathc;\n    char **gl_pathv;\n    __size_t gl_offs;\n    int gl_flags;\n\n    /* If the GLOB_ALTDIRFUNC flag is set, the following functions\n       are used instead of the normal file access functions.  */\n    void (*gl_closedir) __PMT ((void *));\n    struct dirent64 *(*gl_readdir) __PMT ((void *));\n    __ptr_t (*gl_opendir) __PMT ((__const char *));\n    int (*gl_lstat) __PMT ((__const char *, struct stat64 *));\n    int (*gl_stat) __PMT ((__const char *, struct stat64 *));\n  } glob64_t;\n#endif\n\n#if _FILE_OFFSET_BITS == 64 && __GNUC__ < 2\n# define glob glob64\n# define globfree globfree64\n#else\n# ifdef _LARGEFILE64_SOURCE\nextern int glob64 __P ((__const char *__pattern, int __flags,\n\t\t\tint (*__errfunc) (__const char *, int),\n\t\t\tglob64_t *__pglob));\n\nextern void globfree64 __P ((glob64_t *__pglob));\n# endif\n#endif\n\n/* Do glob searching for PATTERN, placing results in PGLOB.\n   The bits defined above may be set in FLAGS.\n   If a directory cannot be opened or read and ERRFUNC is not nil,\n   it is called with the pathname that caused the error, and the\n   `errno' value from the failing call; if it returns non-zero\n   `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.\n   If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.\n   Otherwise, `glob' returns zero.  */\n#if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2\nextern int glob __P ((__const char *__pattern, int __flags,\n\t\t      int (*__errfunc) (__const char *, int),\n\t\t      glob_t *__pglob));\n\n/* Free storage allocated in PGLOB by a previous `glob' call.  */\nextern void globfree __P ((glob_t *__pglob));\n#else\nextern int glob __P ((__const char *__pattern, int __flags,\n\t\t      int (*__errfunc) (__const char *, int),\n\t\t      glob_t *__pglob)) __asm__ (\"glob64\");\n\nextern void globfree __P ((glob_t *__pglob)) __asm__ (\"globfree64\");\n#endif\n\n\n#ifdef _GNU_SOURCE\n/* Return nonzero if PATTERN contains any metacharacters.\n   Metacharacters can be quoted with backslashes if QUOTE is nonzero.\n\n   This function is not part of the interface specified by POSIX.2\n   but several programs want to use it.  */\nextern int glob_pattern_p __P ((__const char *__pattern, int __quote));\n#endif\n\n#ifdef\t__cplusplus\n}\n#endif\n\n#endif /* glob.h  */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/hash.c",
    "content": "/* hash.c -- hash table maintenance\n   Copyright (C) 1995, 1999, 2002 Free Software Foundation, Inc.\n   Written by Greg McGary <gkm@gnu.org> <greg@mcgary.org>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"hash.h\"\n\n#define\tCALLOC(t, n) ((t *) calloc (sizeof (t), (n)))\n#define MALLOC(t, n) ((t *) xmalloc (sizeof (t) * (n)))\n#define REALLOC(o, t, n) ((t *) xrealloc ((o), sizeof (t) * (n)))\n#define CLONE(o, t, n) ((t *) memcpy (MALLOC (t, (n)), (o), sizeof (t) * (n)))\n\nstatic void hash_rehash __P((struct hash_table* ht));\nstatic unsigned long round_up_2 __P((unsigned long rough));\n\n/* Implement double hashing with open addressing.  The table size is\n   always a power of two.  The secondary (`increment') hash function\n   is forced to return an odd-value, in order to be relatively prime\n   to the table size.  This guarantees that the increment can\n   potentially hit every slot in the table during collision\n   resolution.  */\n\nvoid *hash_deleted_item = &hash_deleted_item;\n\n/* Force the table size to be a power of two, possibly rounding up the\n   given size.  */\n\nvoid\nhash_init (struct hash_table *ht, unsigned long size,\n           hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp)\n{\n  ht->ht_size = round_up_2 (size);\n  ht->ht_empty_slots = ht->ht_size;\n  ht->ht_vec = (void**) CALLOC (struct token *, ht->ht_size);\n  if (ht->ht_vec == 0)\n    {\n      fprintf (stderr, _(\"can't allocate %ld bytes for hash table: memory exhausted\"),\n\t       ht->ht_size * sizeof(struct token *));\n      exit (1);\n    }\n\n  ht->ht_capacity = ht->ht_size - (ht->ht_size / 16); /* 93.75% loading factor */\n  ht->ht_fill = 0;\n  ht->ht_collisions = 0;\n  ht->ht_lookups = 0;\n  ht->ht_rehashes = 0;\n  ht->ht_hash_1 = hash_1;\n  ht->ht_hash_2 = hash_2;\n  ht->ht_compare = hash_cmp;\n}\n\n/* Load an array of items into `ht'.  */\n\nvoid\nhash_load (struct hash_table *ht, void *item_table,\n           unsigned long cardinality, unsigned long size)\n{\n  char *items = (char *) item_table;\n  while (cardinality--)\n    {\n      hash_insert (ht, items);\n      items += size;\n    }\n}\n\n/* Returns the address of the table slot matching `key'.  If `key' is\n   not found, return the address of an empty slot suitable for\n   inserting `key'.  The caller is responsible for incrementing\n   ht_fill on insertion.  */\n\nvoid **\nhash_find_slot (struct hash_table *ht, const void *key)\n{\n  void **slot;\n  void **deleted_slot = 0;\n  unsigned int hash_2 = 0;\n  unsigned int hash_1 = (*ht->ht_hash_1) (key);\n\n  ht->ht_lookups++;\n  for (;;)\n    {\n      hash_1 &= (ht->ht_size - 1);\n      slot = &ht->ht_vec[hash_1];\n\n      if (*slot == 0)\n\treturn (deleted_slot ? deleted_slot : slot);\n      if (*slot == hash_deleted_item)\n\t{\n\t  if (deleted_slot == 0)\n\t    deleted_slot = slot;\n\t}\n      else\n\t{\n\t  if (key == *slot)\n\t    return slot;\n\t  if ((*ht->ht_compare) (key, *slot) == 0)\n\t    return slot;\n\t  ht->ht_collisions++;\n\t}\n      if (!hash_2)\n\t  hash_2 = (*ht->ht_hash_2) (key) | 1;\n      hash_1 += hash_2;\n    }\n}\n\nvoid *\nhash_find_item (struct hash_table *ht, const void *key)\n{\n  void **slot = hash_find_slot (ht, key);\n  return ((HASH_VACANT (*slot)) ? 0 : *slot);\n}\n\nvoid *\nhash_insert (struct hash_table *ht, const void *item)\n{\n  void **slot = hash_find_slot (ht, item);\n  const void *old_item = slot ? *slot : 0;\n  hash_insert_at (ht, item, slot);\n  return (void *)((HASH_VACANT (old_item)) ? 0 : old_item);\n}\n\nvoid *\nhash_insert_at (struct hash_table *ht, const void *item, const void *slot)\n{\n  const void *old_item = *(void **) slot;\n  if (HASH_VACANT (old_item))\n    {\n      ht->ht_fill++;\n      if (old_item == 0)\n\tht->ht_empty_slots--;\n      old_item = item;\n    }\n  *(void const **) slot = item;\n  if (ht->ht_empty_slots < ht->ht_size - ht->ht_capacity)\n    {\n      hash_rehash (ht);\n      return (void *) hash_find_slot (ht, item);\n    }\n  else\n    return (void *) slot;\n}\n\nvoid *\nhash_delete (struct hash_table *ht, const void *item)\n{\n  void **slot = hash_find_slot (ht, item);\n  return hash_delete_at (ht, slot);\n}\n\nvoid *\nhash_delete_at (struct hash_table *ht, const void *slot)\n{\n  void *item = *(void **) slot;\n  if (!HASH_VACANT (item))\n    {\n      *(void const **) slot = hash_deleted_item;\n      ht->ht_fill--;\n      return item;\n    }\n  else\n    return 0;\n}\n\nvoid\nhash_free_items (struct hash_table *ht)\n{\n  void **vec = ht->ht_vec;\n  void **end = &vec[ht->ht_size];\n  for (; vec < end; vec++)\n    {\n      void *item = *vec;\n      if (!HASH_VACANT (item))\n\tfree (item);\n      *vec = 0;\n    }\n  ht->ht_fill = 0;\n  ht->ht_empty_slots = ht->ht_size;\n}\n\nvoid\nhash_delete_items (struct hash_table *ht)\n{\n  void **vec = ht->ht_vec;\n  void **end = &vec[ht->ht_size];\n  for (; vec < end; vec++)\n    *vec = 0;\n  ht->ht_fill = 0;\n  ht->ht_collisions = 0;\n  ht->ht_lookups = 0;\n  ht->ht_rehashes = 0;\n  ht->ht_empty_slots = ht->ht_size;\n}\n\nvoid\nhash_free (struct hash_table *ht, int free_items)\n{\n  if (free_items)\n    hash_free_items (ht);\n  else\n    {\n      ht->ht_fill = 0;\n      ht->ht_empty_slots = ht->ht_size;\n    }\n  free (ht->ht_vec);\n  ht->ht_vec = 0;\n  ht->ht_capacity = 0;\n}\n\nvoid\nhash_map (struct hash_table *ht, hash_map_func_t map)\n{\n  void **slot;\n  void **end = &ht->ht_vec[ht->ht_size];\n\n  for (slot = ht->ht_vec; slot < end; slot++)\n    {\n      if (!HASH_VACANT (*slot))\n\t(*map) (*slot);\n    }\n}\n\nvoid\nhash_map_arg (struct hash_table *ht, hash_map_arg_func_t map, void *arg)\n{\n  void **slot;\n  void **end = &ht->ht_vec[ht->ht_size];\n\n  for (slot = ht->ht_vec; slot < end; slot++)\n    {\n      if (!HASH_VACANT (*slot))\n\t(*map) (*slot, arg);\n    }\n}\n\n/* Double the size of the hash table in the event of overflow... */\n\nstatic void\nhash_rehash (struct hash_table *ht)\n{\n  unsigned long old_ht_size = ht->ht_size;\n  void **old_vec = ht->ht_vec;\n  void **ovp;\n\n  if (ht->ht_fill >= ht->ht_capacity)\n    {\n      ht->ht_size *= 2;\n      ht->ht_capacity = ht->ht_size - (ht->ht_size >> 4);\n    }\n  ht->ht_rehashes++;\n  ht->ht_vec = (void **) CALLOC (struct token *, ht->ht_size);\n\n  for (ovp = old_vec; ovp < &old_vec[old_ht_size]; ovp++)\n    {\n      if (! HASH_VACANT (*ovp))\n\t{\n\t  void **slot = hash_find_slot (ht, *ovp);\n\t  *slot = *ovp;\n\t}\n    }\n  ht->ht_empty_slots = ht->ht_size - ht->ht_fill;\n  free (old_vec);\n}\n\nvoid\nhash_print_stats (struct hash_table *ht, FILE *out_FILE)\n{\n  /* GKM FIXME: honor NO_FLOAT */\n  fprintf (out_FILE, _(\"Load=%ld/%ld=%.0f%%, \"), ht->ht_fill, ht->ht_size,\n\t   100.0 * (double) ht->ht_fill / (double) ht->ht_size);\n  fprintf (out_FILE, _(\"Rehash=%d, \"), ht->ht_rehashes);\n  fprintf (out_FILE, _(\"Collisions=%ld/%ld=%.0f%%\"), ht->ht_collisions, ht->ht_lookups,\n\t   (ht->ht_lookups\n\t    ? (100.0 * (double) ht->ht_collisions / (double) ht->ht_lookups)\n\t    : 0));\n}\n\n/* Dump all items into a NULL-terminated vector.  Use the\n   user-supplied vector, or malloc one.  */\n\nvoid **\nhash_dump (struct hash_table *ht, void **vector_0, qsort_cmp_t compare)\n{\n  void **vector;\n  void **slot;\n  void **end = &ht->ht_vec[ht->ht_size];\n\n  if (vector_0 == 0)\n    vector_0 = MALLOC (void *, ht->ht_fill + 1);\n  vector = vector_0;\n\n  for (slot = ht->ht_vec; slot < end; slot++)\n    if (!HASH_VACANT (*slot))\n      *vector++ = *slot;\n  *vector = 0;\n\n  if (compare)\n    qsort (vector_0, ht->ht_fill, sizeof (void *), compare);\n  return vector_0;\n}\n\n/* Round a given number up to the nearest power of 2. */\n\nstatic unsigned long\nround_up_2 (unsigned long n)\n{\n  n |= (n >> 1);\n  n |= (n >> 2);\n  n |= (n >> 4);\n  n |= (n >> 8);\n  n |= (n >> 16);\n\n#if !defined(HAVE_LIMITS_H) || ULONG_MAX > 4294967295\n  /* We only need this on systems where unsigned long is >32 bits.  */\n  n |= (n >> 32);\n#endif\n\n  return n + 1;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/hash.h",
    "content": "/* hash.h -- decls for hash table\nCopyright (C) 1995, 1999, 2002 Free Software Foundation, Inc.\nWritten by Greg McGary <gkm@gnu.org> <greg@mcgary.org>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2, or (at your option)\nany later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nthis program; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef _hash_h_\n#define _hash_h_\n\n#include <stdio.h>\n#include <ctype.h>\n\n#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32\n# if !defined __GLIBC__ || !defined __P\n#  undef\t__P\n#  define __P(protos)\tprotos\n# endif\n#else /* Not C++ or ANSI C.  */\n# undef\t__P\n# define __P(protos)\t()\n/* We can get away without defining `const' here only because in this file\n   it is used only inside the prototype for `fnmatch', which is elided in\n   non-ANSI C where `const' is problematical.  */\n#endif /* C++ or ANSI C.  */\n\ntypedef unsigned long (*hash_func_t) __P((void const *key));\ntypedef int (*hash_cmp_func_t) __P((void const *x, void const *y));\ntypedef void (*hash_map_func_t) __P((void const *item));\ntypedef void (*hash_map_arg_func_t) __P((void const *item, void *arg));\n\nstruct hash_table\n{\n  void **ht_vec;\n  unsigned long ht_size;\t/* total number of slots (power of 2) */\n  unsigned long ht_capacity;\t/* usable slots, limited by loading-factor */\n  unsigned long ht_fill;\t/* items in table */\n  unsigned long ht_empty_slots;\t/* empty slots not including deleted slots */\n  unsigned long ht_collisions;\t/* # of failed calls to comparison function */\n  unsigned long ht_lookups;\t/* # of queries */\n  unsigned int ht_rehashes;\t/* # of times we've expanded table */\n  hash_func_t ht_hash_1;\t/* primary hash function */\n  hash_func_t ht_hash_2;\t/* secondary hash function */\n  hash_cmp_func_t ht_compare;\t/* comparison function */\n};\n\ntypedef int (*qsort_cmp_t) __P((void const *, void const *));\n\nvoid hash_init __P((struct hash_table *ht, unsigned long size,\n\t\t    hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp));\nvoid hash_load __P((struct hash_table *ht, void *item_table,\n\t\t    unsigned long cardinality, unsigned long size));\nvoid **hash_find_slot __P((struct hash_table *ht, void const *key));\nvoid *hash_find_item __P((struct hash_table *ht, void const *key));\nvoid *hash_insert __P((struct hash_table *ht, const void *item));\nvoid *hash_insert_at __P((struct hash_table *ht, const void *item, void const *slot));\nvoid *hash_delete __P((struct hash_table *ht, void const *item));\nvoid *hash_delete_at __P((struct hash_table *ht, void const *slot));\nvoid hash_delete_items __P((struct hash_table *ht));\nvoid hash_free_items __P((struct hash_table *ht));\nvoid hash_free __P((struct hash_table *ht, int free_items));\nvoid hash_map __P((struct hash_table *ht, hash_map_func_t map));\nvoid hash_map_arg __P((struct hash_table *ht, hash_map_arg_func_t map, void *arg));\nvoid hash_print_stats __P((struct hash_table *ht, FILE *out_FILE));\nvoid **hash_dump __P((struct hash_table *ht, void **vector_0, qsort_cmp_t compare));\n\nextern void *hash_deleted_item;\n#define HASH_VACANT(item) ((item) == 0 || (void *) (item) == hash_deleted_item)\n\n\f\n/* hash and comparison macros for case-sensitive string keys. */\n\n#define STRING_HASH_1(KEY, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  while (*++_key_) \\\n    (RESULT) += (*_key_ << (_key_[1] & 0xf)); \\\n} while (0)\n#define return_STRING_HASH_1(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  STRING_HASH_1 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define STRING_HASH_2(KEY, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  while (*++_key_) \\\n    (RESULT) += (*_key_ << (_key_[1] & 0x7)); \\\n} while (0)\n#define return_STRING_HASH_2(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  STRING_HASH_2 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define STRING_COMPARE(X, Y, RESULT) do { \\\n  RESULT = strcmp ((X), (Y)); \\\n} while (0)\n#define return_STRING_COMPARE(X, Y) do { \\\n  return strcmp ((X), (Y)); \\\n} while (0)\n\n\n#define STRING_N_HASH_1(KEY, N, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  int _n_ = (N); \\\n  if (_n_) \\\n    while (--_n_ && *++_key_) \\\n      (RESULT) += (*_key_ << (_key_[1] & 0xf)); \\\n  (RESULT) += *++_key_; \\\n} while (0)\n#define return_STRING_N_HASH_1(KEY, N) do { \\\n  unsigned long _result_ = 0; \\\n  STRING_N_HASH_1 ((KEY), (N), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define STRING_N_HASH_2(KEY, N, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  int _n_ = (N); \\\n  if (_n_) \\\n    while (--_n_ && *++_key_) \\\n      (RESULT) += (*_key_ << (_key_[1] & 0x7)); \\\n  (RESULT) += *++_key_; \\\n} while (0)\n#define return_STRING_N_HASH_2(KEY, N) do { \\\n  unsigned long _result_ = 0; \\\n  STRING_N_HASH_2 ((KEY), (N), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define STRING_N_COMPARE(X, Y, N, RESULT) do { \\\n  RESULT = strncmp ((X), (Y), (N)); \\\n} while (0)\n#define return_STRING_N_COMPARE(X, Y, N) do { \\\n  return strncmp ((X), (Y), (N)); \\\n} while (0)\n\n#ifdef HAVE_CASE_INSENSITIVE_FS\n\n/* hash and comparison macros for case-insensitive string _key_s. */\n\n#define ISTRING_HASH_1(KEY, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  while (*++_key_) \\\n    (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0xf)); \\\n} while (0)\n#define return_ISTRING_HASH_1(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  ISTRING_HASH_1 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define ISTRING_HASH_2(KEY, RESULT) do { \\\n  unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \\\n  while (*++_key_) \\\n    (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0x7)); \\\n} while (0)\n#define return_ISTRING_HASH_2(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  ISTRING_HASH_2 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define ISTRING_COMPARE(X, Y, RESULT) do { \\\n  RESULT = strcmpi ((X), (Y)); \\\n} while (0)\n#define return_ISTRING_COMPARE(X, Y) do { \\\n  return strcmpi ((X), (Y)); \\\n} while (0)\n\n#else\n\n#define ISTRING_HASH_1(KEY, RESULT) STRING_HASH_1 ((KEY), (RESULT))\n#define return_ISTRING_HASH_1(KEY) return_STRING_HASH_1 (KEY)\n\n#define ISTRING_HASH_2(KEY, RESULT) STRING_HASH_2 ((KEY), (RESULT))\n#define return_ISTRING_HASH_2(KEY) return_STRING_HASH_2 (KEY)\n\n#define ISTRING_COMPARE(X, Y, RESULT) STRING_COMPARE ((X), (Y), (RESULT))\n#define return_ISTRING_COMPARE(X, Y) return_STRING_COMPARE ((X), (Y))\n\n#endif\n\n/* hash and comparison macros for integer _key_s. */\n\n#define INTEGER_HASH_1(KEY, RESULT) do { \\\n  (RESULT) += ((unsigned long)(KEY)); \\\n} while (0)\n#define return_INTEGER_HASH_1(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  INTEGER_HASH_1 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define INTEGER_HASH_2(KEY, RESULT) do { \\\n  (RESULT) += ~((unsigned long)(KEY)); \\\n} while (0)\n#define return_INTEGER_HASH_2(KEY) do { \\\n  unsigned long _result_ = 0; \\\n  INTEGER_HASH_2 ((KEY), _result_); \\\n  return _result_; \\\n} while (0)\n\n#define INTEGER_COMPARE(X, Y, RESULT) do { \\\n  (RESULT) = X - Y; \\\n} while (0)\n#define return_INTEGER_COMPARE(X, Y) do { \\\n  int _result_; \\\n  INTEGER_COMPARE (X, Y, _result_); \\\n  return _result_; \\\n} while (0)\n\n/* hash and comparison macros for address keys. */\n\n#define ADDRESS_HASH_1(KEY, RESULT) INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3, (RESULT))\n#define ADDRESS_HASH_2(KEY, RESULT) INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3, (RESULT))\n#define ADDRESS_COMPARE(X, Y, RESULT) INTEGER_COMPARE ((X), (Y), (RESULT))\n#define return_ADDRESS_HASH_1(KEY) return_INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3)\n#define return_ADDRESS_HASH_2(KEY) return_INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3)\n#define return_ADDRESS_COMPARE(X, Y) return_INTEGER_COMPARE ((X), (Y))\n\n#endif /* not _hash_h_ */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/implicit.c",
    "content": "/* Implicit rule searching for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"rule.h\"\n#include \"dep.h\"\n#include \"debug.h\"\n#include \"variable.h\"\n#include \"job.h\"      /* struct child, used inside commands.h */\n#include \"commands.h\" /* set_file_variables */\n\nstatic int\npattern_search PARAMS ((struct file *file, int archive,\n                        unsigned int depth, unsigned int recursions));\n\f\n/* For a FILE which has no commands specified, try to figure out some\n   from the implicit pattern rules.\n   Returns 1 if a suitable implicit rule was found,\n   after modifying FILE to contain the appropriate commands and deps,\n   or returns 0 if no implicit rule was found.  */\n\nint\ntry_implicit_rule (struct file *file, unsigned int depth)\n{\n  DBF (DB_IMPLICIT, _(\"Looking for an implicit rule for `%s'.\\n\"));\n\n  /* The order of these searches was previously reversed.  My logic now is\n     that since the non-archive search uses more information in the target\n     (the archive search omits the archive name), it is more specific and\n     should come first.  */\n\n  if (pattern_search (file, 0, depth, 0))\n    return 1;\n\n#ifndef\tNO_ARCHIVES\n  /* If this is an archive member reference, use just the\n     archive member name to search for implicit rules.  */\n  if (ar_name (file->name))\n    {\n      DBF (DB_IMPLICIT,\n           _(\"Looking for archive-member implicit rule for `%s'.\\n\"));\n      if (pattern_search (file, 1, depth, 0))\n\treturn 1;\n    }\n#endif\n\n  return 0;\n}\n\f\n\n/* Struct idep captures information about implicit prerequisites\n   that come from implicit rules. */\nstruct idep\n{\n  struct idep *next;              /* struct dep -compatible interface */\n  char *name;                     /* name of the prerequisite */\n  struct file *intermediate_file; /* intermediate file, 0 otherwise */\n  char *intermediate_pattern;     /* pattern for intermediate file */\n  unsigned char had_stem;         /* had % substituted with stem */\n  unsigned char ignore_mtime;     /* ignore_mtime flag */\n};\n\nstatic void\nfree_idep_chain (struct idep *p)\n{\n  struct idep *n;\n\n  for (; p != 0; p = n)\n    {\n      n = p->next;\n\n      if (p->name)\n        {\n          struct file *f = p->intermediate_file;\n\n          if (f != 0\n              && (f->stem < f->name || f->stem > f->name + strlen (f->name)))\n            free (f->stem);\n\n          free (p->name);\n        }\n\n      free (p);\n    }\n}\n\n\n/* Scans the BUFFER for the next word with whitespace as a separator.\n   Returns the pointer to the beginning of the word. LENGTH hold the\n   length of the word.  */\n\nstatic char *\nget_next_word (char *buffer, unsigned int *length)\n{\n  char *p = buffer, *beg;\n  char c;\n\n  /* Skip any leading whitespace.  */\n  while (isblank ((unsigned char)*p))\n    ++p;\n\n  beg = p;\n  c = *(p++);\n\n  if (c == '\\0')\n    return 0;\n\n\n  /* We already found the first value of \"c\", above.  */\n  while (1)\n    {\n      char closeparen;\n      int count;\n\n      switch (c)\n        {\n        case '\\0':\n        case ' ':\n        case '\\t':\n          goto done_word;\n\n        case '$':\n          c = *(p++);\n          if (c == '$')\n            break;\n\n          /* This is a variable reference, so read it to the matching\n             close paren.  */\n\n          if (c == '(')\n            closeparen = ')';\n          else if (c == '{')\n            closeparen = '}';\n          else\n            /* This is a single-letter variable reference.  */\n            break;\n\n          for (count = 0; *p != '\\0'; ++p)\n            {\n              if (*p == c)\n                ++count;\n              else if (*p == closeparen && --count < 0)\n                {\n                  ++p;\n                  break;\n                }\n            }\n          break;\n\n        case '|':\n          goto done;\n\n        default:\n          break;\n        }\n\n      c = *(p++);\n    }\n done_word:\n  --p;\n\n done:\n  if (length)\n    *length = p - beg;\n\n  return beg;\n}\n\n/* Search the pattern rules for a rule with an existing dependency to make\n   FILE.  If a rule is found, the appropriate commands and deps are put in FILE\n   and 1 is returned.  If not, 0 is returned.\n\n   If ARCHIVE is nonzero, FILE->name is of the form \"LIB(MEMBER)\".  A rule for\n   \"(MEMBER)\" will be searched for, and \"(MEMBER)\" will not be chopped up into\n   directory and filename parts.\n\n   If an intermediate file is found by pattern search, the intermediate file\n   is set up as a target by the recursive call and is also made a dependency\n   of FILE.\n\n   DEPTH is used for debugging messages.  */\n\nstatic int\npattern_search (struct file *file, int archive,\n                unsigned int depth, unsigned int recursions)\n{\n  /* Filename we are searching for a rule for.  */\n  char *filename = archive ? strchr (file->name, '(') : file->name;\n\n  /* Length of FILENAME.  */\n  unsigned int namelen = strlen (filename);\n\n  /* The last slash in FILENAME (or nil if there is none).  */\n  char *lastslash;\n\n  /* This is a file-object used as an argument in\n     recursive calls.  It never contains any data\n     except during a recursive call.  */\n  struct file *intermediate_file = 0;\n\n  /* This linked list records all the prerequisites actually\n     found for a rule along with some other useful information\n     (see struct idep for details). */\n  struct idep* deps = 0;\n\n  /* 1 if we need to remove explicit prerequisites, 0 otherwise. */\n  unsigned int remove_explicit_deps = 0;\n\n  /* Names of possible dependencies are constructed in this buffer.  */\n  register char *depname = (char *) alloca (namelen + max_pattern_dep_length);\n\n  /* The start and length of the stem of FILENAME for the current rule.  */\n  register char *stem = 0;\n  register unsigned int stemlen = 0;\n  register unsigned int fullstemlen = 0;\n\n  /* Buffer in which we store all the rules that are possibly applicable.  */\n  struct rule **tryrules\n    = (struct rule **) xmalloc (num_pattern_rules * max_pattern_targets\n                                * sizeof (struct rule *));\n\n  /* Number of valid elements in TRYRULES.  */\n  unsigned int nrules;\n\n  /* The numbers of the rule targets of each rule\n     in TRYRULES that matched the target file.  */\n  unsigned int *matches\n    = (unsigned int *) alloca (num_pattern_rules * sizeof (unsigned int));\n\n  /* Each element is nonzero if LASTSLASH was used in\n     matching the corresponding element of TRYRULES.  */\n  char *checked_lastslash\n    = (char *) alloca (num_pattern_rules * sizeof (char));\n\n  /* The index in TRYRULES of the rule we found.  */\n  unsigned int foundrule;\n\n  /* Nonzero if should consider intermediate files as dependencies.  */\n  int intermed_ok;\n\n  /* Nonzero if we have matched a pattern-rule target\n     that is not just `%'.  */\n  int specific_rule_matched = 0;\n\n  unsigned int i = 0;  /* uninit checks OK */\n  struct rule *rule;\n  struct dep *dep, *expl_d;\n\n  char *p, *vname;\n\n  struct idep *d;\n  struct idep **id_ptr;\n  struct dep **d_ptr;\n\n  PATH_VAR (stem_str); /* @@ Need to get rid of stem, stemlen, etc. */\n\n#ifndef\tNO_ARCHIVES\n  if (archive || ar_name (filename))\n    lastslash = 0;\n  else\n#endif\n    {\n      /* Set LASTSLASH to point at the last slash in FILENAME\n\t but not counting any slash at the end.  (foo/bar/ counts as\n\t bar/ in directory foo/, not empty in directory foo/bar/.)  */\n#ifdef VMS\n      lastslash = strrchr (filename, ']');\n      if (lastslash == 0)\n\tlastslash = strrchr (filename, ':');\n#else\n      lastslash = strrchr (filename, '/');\n#ifdef HAVE_DOS_PATHS\n      /* Handle backslashes (possibly mixed with forward slashes)\n\t and the case of \"d:file\".  */\n      {\n\tchar *bslash = strrchr (filename, '\\\\');\n\tif (lastslash == 0 || bslash > lastslash)\n\t  lastslash = bslash;\n\tif (lastslash == 0 && filename[0] && filename[1] == ':')\n\t  lastslash = filename + 1;\n      }\n#endif\n#endif\n      if (lastslash != 0 && lastslash[1] == '\\0')\n\tlastslash = 0;\n    }\n\n  /* First see which pattern rules match this target\n     and may be considered.  Put them in TRYRULES.  */\n\n  nrules = 0;\n  for (rule = pattern_rules; rule != 0; rule = rule->next)\n    {\n      /* If the pattern rule has deps but no commands, ignore it.\n\t Users cancel built-in rules by redefining them without commands.  */\n      if (rule->deps != 0 && rule->cmds == 0)\n\tcontinue;\n\n      /* If this rule is in use by a parent pattern_search,\n\t don't use it here.  */\n      if (rule->in_use)\n\t{\n\t  DBS (DB_IMPLICIT, (_(\"Avoiding implicit rule recursion.\\n\")));\n\t  continue;\n\t}\n\n      for (i = 0; rule->targets[i] != 0; ++i)\n\t{\n\t  char *target = rule->targets[i];\n\t  char *suffix = rule->suffixes[i];\n\t  int check_lastslash;\n\n\t  /* Rules that can match any filename and are not terminal\n\t     are ignored if we're recursing, so that they cannot be\n\t     intermediate files.  */\n\t  if (recursions > 0 && target[1] == '\\0' && !rule->terminal)\n\t    continue;\n\n\t  if (rule->lens[i] > namelen)\n\t    /* It can't possibly match.  */\n\t    continue;\n\n\t  /* From the lengths of the filename and the pattern parts,\n\t     find the stem: the part of the filename that matches the %.  */\n\t  stem = filename + (suffix - target - 1);\n\t  stemlen = namelen - rule->lens[i] + 1;\n\n\t  /* Set CHECK_LASTSLASH if FILENAME contains a directory\n\t     prefix and the target pattern does not contain a slash.  */\n\n          check_lastslash = 0;\n          if (lastslash)\n            {\n#ifdef VMS\n              check_lastslash = (strchr (target, ']') == 0\n                                 && strchr (target, ':') == 0);\n#else\n              check_lastslash = strchr (target, '/') == 0;\n#ifdef HAVE_DOS_PATHS\n              /* Didn't find it yet: check for DOS-type directories.  */\n              if (check_lastslash)\n                {\n                  char *b = strchr (target, '\\\\');\n                  check_lastslash = !(b || (target[0] && target[1] == ':'));\n                }\n#endif\n#endif\n            }\n\t  if (check_lastslash)\n\t    {\n\t      /* If so, don't include the directory prefix in STEM here.  */\n\t      unsigned int difference = lastslash - filename + 1;\n\t      if (difference > stemlen)\n\t\tcontinue;\n\t      stemlen -= difference;\n\t      stem += difference;\n\t    }\n\n\t  /* Check that the rule pattern matches the text before the stem.  */\n\t  if (check_lastslash)\n\t    {\n\t      if (stem > (lastslash + 1)\n\t\t  && !strneq (target, lastslash + 1, stem - lastslash - 1))\n\t\tcontinue;\n\t    }\n\t  else if (stem > filename\n\t\t   && !strneq (target, filename, stem - filename))\n\t    continue;\n\n\t  /* Check that the rule pattern matches the text after the stem.\n\t     We could test simply use streq, but this way we compare the\n\t     first two characters immediately.  This saves time in the very\n\t     common case where the first character matches because it is a\n\t     period.  */\n\t  if (*suffix != stem[stemlen]\n\t      || (*suffix != '\\0' && !streq (&suffix[1], &stem[stemlen + 1])))\n\t    continue;\n\n\t  /* Record if we match a rule that not all filenames will match.  */\n\t  if (target[1] != '\\0')\n\t    specific_rule_matched = 1;\n\n\t  /* A rule with no dependencies and no commands exists solely to set\n\t     specific_rule_matched when it matches.  Don't try to use it.  */\n\t  if (rule->deps == 0 && rule->cmds == 0)\n\t    continue;\n\n\t  /* Record this rule in TRYRULES and the index of the matching\n\t     target in MATCHES.  If several targets of the same rule match,\n\t     that rule will be in TRYRULES more than once.  */\n\t  tryrules[nrules] = rule;\n\t  matches[nrules] = i;\n\t  checked_lastslash[nrules] = check_lastslash;\n\t  ++nrules;\n\t}\n    }\n\n  /* If we have found a matching rule that won't match all filenames,\n     retroactively reject any non-\"terminal\" rules that do always match.  */\n  if (specific_rule_matched)\n    for (i = 0; i < nrules; ++i)\n      if (!tryrules[i]->terminal)\n\t{\n\t  register unsigned int j;\n\t  for (j = 0; tryrules[i]->targets[j] != 0; ++j)\n\t    if (tryrules[i]->targets[j][1] == '\\0')\n\t      break;\n\t  if (tryrules[i]->targets[j] != 0)\n\t    tryrules[i] = 0;\n\t}\n\n  /* We are going to do second expansion so initialize file variables\n     for the rule. */\n  initialize_file_variables (file, 0);\n\n  /* Try each rule once without intermediate files, then once with them.  */\n  for (intermed_ok = 0; intermed_ok == !!intermed_ok; ++intermed_ok)\n    {\n      /* Try each pattern rule till we find one that applies.\n\t If it does, expand its dependencies (as substituted)\n\t and chain them in DEPS.  */\n\n      for (i = 0; i < nrules; i++)\n\t{\n          struct file *f;\n          unsigned int failed = 0;\n\t  int check_lastslash;\n          int file_variables_set = 0;\n\n\t  rule = tryrules[i];\n\n          remove_explicit_deps = 0;\n\n\t  /* RULE is nil when we discover that a rule,\n\t     already placed in TRYRULES, should not be applied.  */\n\t  if (rule == 0)\n\t    continue;\n\n\t  /* Reject any terminal rules if we're\n\t     looking to make intermediate files.  */\n\t  if (intermed_ok && rule->terminal)\n\t    continue;\n\n\t  /* Mark this rule as in use so a recursive\n\t     pattern_search won't try to use it.  */\n\t  rule->in_use = 1;\n\n\t  /* From the lengths of the filename and the matching pattern parts,\n\t     find the stem: the part of the filename that matches the %.  */\n\t  stem = filename\n\t    + (rule->suffixes[matches[i]] - rule->targets[matches[i]]) - 1;\n\t  stemlen = namelen - rule->lens[matches[i]] + 1;\n\t  check_lastslash = checked_lastslash[i];\n\t  if (check_lastslash)\n\t    {\n\t      stem += lastslash - filename + 1;\n\t      stemlen -= (lastslash - filename) + 1;\n\t    }\n\n\t  DBS (DB_IMPLICIT, (_(\"Trying pattern rule with stem `%.*s'.\\n\"),\n                             (int) stemlen, stem));\n\n          strncpy (stem_str, stem, stemlen);\n          stem_str[stemlen] = '\\0';\n\n          /* Temporary assign STEM to file->stem (needed to set file\n             variables below).   */\n          file->stem = stem_str;\n\n\t  /* Try each dependency; see if it \"exists\".  */\n\n\t  for (dep = rule->deps; dep != 0; dep = dep->next)\n\t    {\n              unsigned int len;\n              char *p2;\n              unsigned int order_only = 0; /* Set if '|' was seen. */\n\n              /* In an ideal world we would take the dependency line,\n                 substitute the stem, re-expand the whole line and chop it\n                 into individual prerequisites. Unfortunately this won't work\n                 because of the \"check_lastslash\" twist.  Instead, we will\n                 have to go word by word, taking $()'s into account, for each\n                 word we will substitute the stem, re-expand, chop it up, and,\n                 if check_lastslash != 0, add the directory part to each\n                 resulting prerequisite.  */\n\n              p = get_next_word (dep->name, &len);\n\n              while (1)\n                {\n                  int add_dir = 0;\n                  int had_stem = 0;\n\n                  if (p == 0)\n                    break; /* No more words */\n\n                  /* Is there a pattern in this prerequisite?  */\n\n                  for (p2 = p; p2 < p + len && *p2 != '%'; ++p2)\n                    ;\n\n                  if (dep->need_2nd_expansion)\n                    {\n                      /* If the dependency name has %, substitute the stem.\n\n                         Watch out, we are going to do something tricky\n                         here. If we just replace % with the stem value,\n                         later, when we do the second expansion, we will\n                         re-expand this stem value once again. This is not\n                         good especially if you have certain characters in\n                         your stem (like $).\n\n                         Instead, we will replace % with $* and allow the\n                         second expansion to take care of it for us. This way\n                         (since $* is a simple variable) there won't be\n                         additional re-expansion of the stem.  */\n\n                      if (p2 < p + len)\n                        {\n                          register unsigned int i = p2 - p;\n                          bcopy (p, depname, i);\n                          bcopy (\"$*\", depname + i, 2);\n                          bcopy (p2 + 1, depname + i + 2, len - i - 1);\n                          depname[len + 2 - 1] = '\\0';\n\n                          if (check_lastslash)\n                            add_dir = 1;\n\n                          had_stem = 1;\n                        }\n                      else\n                        {\n                          bcopy (p, depname, len);\n                          depname[len] = '\\0';\n                        }\n\n                      /* Set file variables. Note that we cannot do it once\n                         at the beginning of the function because of the stem\n                         value.  */\n                      if (!file_variables_set)\n                        {\n                          set_file_variables (file);\n                          file_variables_set = 1;\n                        }\n\n                      p2 = variable_expand_for_file (depname, file);\n                    }\n                  else\n                    {\n                       if (p2 < p + len)\n                        {\n                          register unsigned int i = p2 - p;\n                          bcopy (p, depname, i);\n                          bcopy (stem_str, depname + i, stemlen);\n                          bcopy (p2 + 1, depname + i + stemlen, len - i - 1);\n                          depname[len + stemlen - 1] = '\\0';\n\n                          if (check_lastslash)\n                            add_dir = 1;\n\n                          had_stem = 1;\n                        }\n                      else\n                        {\n                          bcopy (p, depname, len);\n                          depname[len] = '\\0';\n                        }\n\n                       p2 = depname;\n                    }\n\n                  /* Parse the dependencies. */\n\n                  while (1)\n                    {\n                      id_ptr = &deps;\n\n                      for (; *id_ptr; id_ptr = &(*id_ptr)->next)\n                        ;\n\n                      *id_ptr = (struct idep *)\n                        multi_glob (\n                          parse_file_seq (&p2,\n                                          order_only ? '\\0' : '|',\n                                          sizeof (struct idep),\n                                          1), sizeof (struct idep));\n\n                      /* @@ It would be nice to teach parse_file_seq or\n                         multi_glob to add prefix. This would save us some\n                         reallocations. */\n\n                      if (order_only || add_dir || had_stem)\n                        {\n                          unsigned long l = lastslash - filename + 1;\n\n                          for (d = *id_ptr; d != 0; d = d->next)\n                            {\n                              if (order_only)\n                                d->ignore_mtime = 1;\n\n                              if (add_dir)\n                                {\n                                  char *p = d->name;\n\n                                  d->name = xmalloc (strlen (p) + l + 1);\n\n                                  bcopy (filename, d->name, l);\n                                  bcopy (p, d->name + l, strlen (p) + 1);\n\n                                  free (p);\n                                }\n\n                              if (had_stem)\n                                d->had_stem = 1;\n                            }\n                        }\n\n                      if (!order_only && *p2)\n                      {\n                        ++p2;\n                        order_only = 1;\n                        continue;\n                      }\n\n                      break;\n                    }\n\n                  p += len;\n                  p = get_next_word (p, &len);\n                }\n\t    }\n\n          /* Reset the stem in FILE. */\n\n          file->stem = 0;\n\n          /* @@ This loop can be combined with the previous one. I do\n             it separately for now for transparency.*/\n\n          for (d = deps; d != 0; d = d->next)\n            {\n              char *name = d->name;\n\n              if (file_impossible_p (name))\n                {\n                  /* If this dependency has already been ruled \"impossible\",\n                     then the rule fails and don't bother trying it on the\n                     second pass either since we know that will fail too.  */\n                  DBS (DB_IMPLICIT,\n                       (d->had_stem\n                        ? _(\"Rejecting impossible implicit prerequisite `%s'.\\n\")\n                        : _(\"Rejecting impossible rule prerequisite `%s'.\\n\"),\n                        name));\n                  tryrules[i] = 0;\n\n                  failed = 1;\n                  break;\n                }\n\n              DBS (DB_IMPLICIT,\n                   (d->had_stem\n                    ? _(\"Trying implicit prerequisite `%s'.\\n\")\n                    : _(\"Trying rule prerequisite `%s'.\\n\"), name));\n\n              /* If this prerequisite also happened to be explicitly mentioned\n                 for FILE skip all the test below since it it has to be built\n                 anyway, no matter which implicit rule we choose. */\n\n              for (expl_d = file->deps; expl_d != 0; expl_d = expl_d->next)\n                if (streq (dep_name (expl_d), name))\n                  break;\n              if (expl_d != 0)\n                continue;\n\n              /* The DEP->changed flag says that this dependency resides in a\n                 nonexistent directory.  So we normally can skip looking for\n                 the file.  However, if CHECK_LASTSLASH is set, then the\n                 dependency file we are actually looking for is in a different\n                 directory (the one gotten by prepending FILENAME's directory),\n                 so it might actually exist.  */\n\n              /* @@ dep->changed check is disabled. */\n              if (((f = lookup_file (name)) != 0 && f->is_target)\n                  /*|| ((!dep->changed || check_lastslash) && */\n                  || file_exists_p (name))\n                continue;\n\n              /* This code, given FILENAME = \"lib/foo.o\", dependency name\n                 \"lib/foo.c\", and VPATH=src, searches for \"src/lib/foo.c\".  */\n              vname = name;\n              if (vpath_search (&vname, (FILE_TIMESTAMP *) 0))\n                {\n                  DBS (DB_IMPLICIT,\n                       (_(\"Found prerequisite `%s' as VPATH `%s'\\n\"),\n                        name,\n                        vname));\n\n                  free (vname);\n                  continue;\n                }\n\n\n              /* We could not find the file in any place we should look.  Try\n                 to make this dependency as an intermediate file, but only on\n                 the second pass.  */\n\n              if (intermed_ok)\n                {\n                  if (intermediate_file == 0)\n                    intermediate_file\n                      = (struct file *) alloca (sizeof (struct file));\n\n                  DBS (DB_IMPLICIT,\n                       (_(\"Looking for a rule with intermediate file `%s'.\\n\"),\n                        name));\n\n                  bzero ((char *) intermediate_file, sizeof (struct file));\n                  intermediate_file->name = name;\n                  if (pattern_search (intermediate_file,\n                                      0,\n                                      depth + 1,\n                                      recursions + 1))\n                    {\n                      d->intermediate_file = intermediate_file;\n                      d->intermediate_pattern = intermediate_file->name;\n\n                      intermediate_file->name = xstrdup (name);\n                      intermediate_file = 0;\n\n                      continue;\n                    }\n\n                  /* If we have tried to find P as an intermediate\n                     file and failed, mark that name as impossible\n                     so we won't go through the search again later.  */\n                  if (intermediate_file->variables)\n                    free_variable_set (intermediate_file->variables);\n                  file_impossible (name);\n                }\n\n              /* A dependency of this rule does not exist. Therefore,\n                 this rule fails.  */\n              failed = 1;\n              break;\n            }\n\n          /* This rule is no longer `in use' for recursive searches.  */\n\t  rule->in_use = 0;\n\n          if (failed)\n            {\n              /* This pattern rule does not apply. If some of its\n                 dependencies succeeded, free the data structure\n                 describing them.  */\n              free_idep_chain (deps);\n              deps = 0;\n            }\n\t  else\n\t    /* This pattern rule does apply.  Stop looking for one.  */\n\t    break;\n\t}\n\n      /* If we found an applicable rule without\n\t intermediate files, don't try with them.  */\n      if (i < nrules)\n\tbreak;\n\n      rule = 0;\n    }\n\n  /* RULE is nil if the loop went all the way\n     through the list and everything failed.  */\n  if (rule == 0)\n    goto done;\n\n  foundrule = i;\n\n  /* If we are recursing, store the pattern that matched\n     FILENAME in FILE->name for use in upper levels.  */\n\n  if (recursions > 0)\n    /* Kludge-o-matic */\n    file->name = rule->targets[matches[foundrule]];\n\n  /* FOUND_FILES lists the dependencies for the rule we found.\n     This includes the intermediate files, if any.\n     Convert them into entries on the deps-chain of FILE.  */\n\n  if (remove_explicit_deps)\n    {\n      /* Remove all the dependencies that didn't come from\n         this implicit rule. */\n\n      dep = file->deps;\n      while (dep != 0)\n        {\n          struct dep *next = dep->next;\n          free_dep (dep);\n          dep = next;\n        }\n      file->deps = 0;\n  }\n\n  expl_d = file->deps; /* We will add them at the end. */\n  d_ptr = &file->deps;\n\n  for (d = deps; d != 0; d = d->next)\n    {\n      register char *s;\n\n      if (d->intermediate_file != 0)\n\t{\n\t  /* If we need to use an intermediate file,\n\t     make sure it is entered as a target, with the info that was\n\t     found for it in the recursive pattern_search call.\n\t     We know that the intermediate file did not already exist as\n\t     a target; therefore we can assume that the deps and cmds\n\t     of F below are null before we change them.  */\n\n\t  struct file *imf = d->intermediate_file;\n\t  register struct file *f = lookup_file (imf->name);\n\n          /* We don't want to delete an intermediate file that happened\n             to be a prerequisite of some (other) target. Mark it as\n             precious.  */\n          if (f != 0)\n            f->precious = 1;\n          else\n            f = enter_file (imf->name);\n\n\t  f->deps = imf->deps;\n\t  f->cmds = imf->cmds;\n\t  f->stem = imf->stem;\n          f->also_make = imf->also_make;\n          f->is_target = 1;\n\n          if (!f->precious)\n            {\n              imf = lookup_file (d->intermediate_pattern);\n              if (imf != 0 && imf->precious)\n                f->precious = 1;\n            }\n\n\t  f->intermediate = 1;\n\t  f->tried_implicit = 1;\n\t  for (dep = f->deps; dep != 0; dep = dep->next)\n\t    {\n\t      dep->file = enter_file (dep->name);\n              /* enter_file uses dep->name _if_ we created a new file.  */\n              if (dep->name != dep->file->name)\n                free (dep->name);\n\t      dep->name = 0;\n\t      dep->file->tried_implicit |= dep->changed;\n\t    }\n\t}\n\n      dep = alloc_dep ();\n      dep->ignore_mtime = d->ignore_mtime;\n      s = d->name; /* Hijacking the name. */\n      d->name = 0;\n      if (recursions == 0)\n\t{\n\t  dep->file = lookup_file (s);\n\t  if (dep->file == 0)\n\t    /* enter_file consumes S's storage.  */\n\t    dep->file = enter_file (s);\n\t  else\n\t    /* A copy of S is already allocated in DEP->file->name.\n\t       So we can free S.  */\n\t    free (s);\n\t}\n      else\n\t{\n\t  dep->name = s;\n\t}\n\n      if (d->intermediate_file == 0 && tryrules[foundrule]->terminal)\n\t{\n\t  /* If the file actually existed (was not an intermediate file),\n\t     and the rule that found it was a terminal one, then we want\n\t     to mark the found file so that it will not have implicit rule\n\t     search done for it.  If we are not entering a `struct file' for\n\t     it now, we indicate this with the `changed' flag.  */\n\t  if (dep->file == 0)\n\t    dep->changed = 1;\n\t  else\n\t    dep->file->tried_implicit = 1;\n\t}\n\n      *d_ptr = dep;\n      d_ptr = &dep->next;\n    }\n\n  *d_ptr = expl_d;\n\n  if (!checked_lastslash[foundrule])\n    {\n      /* Always allocate new storage, since STEM might be\n         on the stack for an intermediate file.  */\n      file->stem = savestring (stem, stemlen);\n      fullstemlen = stemlen;\n    }\n  else\n    {\n      int dirlen = (lastslash + 1) - filename;\n\n      /* We want to prepend the directory from\n\t the original FILENAME onto the stem.  */\n      fullstemlen = dirlen + stemlen;\n      file->stem = (char *) xmalloc (fullstemlen + 1);\n      bcopy (filename, file->stem, dirlen);\n      bcopy (stem, file->stem + dirlen, stemlen);\n      file->stem[fullstemlen] = '\\0';\n    }\n\n  file->cmds = rule->cmds;\n  file->is_target = 1;\n\n  /* Set precious flag. */\n  {\n    struct file *f = lookup_file (rule->targets[matches[foundrule]]);\n    if (f && f->precious)\n      file->precious = 1;\n  }\n\n  /* If this rule builds other targets, too, put the others into FILE's\n     `also_make' member.  */\n\n  if (rule->targets[1] != 0)\n    for (i = 0; rule->targets[i] != 0; ++i)\n      if (i != matches[foundrule])\n\t{\n\t  struct file *f;\n\t  struct dep *new = alloc_dep ();\n\n\t  /* GKM FIMXE: handle '|' here too */\n\t  new->name = p = (char *) xmalloc (rule->lens[i] + fullstemlen + 1);\n\t  bcopy (rule->targets[i], p,\n\t\t rule->suffixes[i] - rule->targets[i] - 1);\n\t  p += rule->suffixes[i] - rule->targets[i] - 1;\n\t  bcopy (file->stem, p, fullstemlen);\n\t  p += fullstemlen;\n\t  bcopy (rule->suffixes[i], p,\n\t\t rule->lens[i] - (rule->suffixes[i] - rule->targets[i]) + 1);\n\t  new->file = enter_file (new->name);\n\t  new->next = file->also_make;\n\n\t  /* Set precious flag. */\n\t  f = lookup_file (rule->targets[i]);\n\t  if (f && f->precious)\n            new->file->precious = 1;\n\n          /* Set the is_target flag so that this file is not treated\n             as intermediate by the pattern rule search algorithm and\n             file_exists_p cannot pick it up yet.  */\n          new->file->is_target = 1;\n\n\t  file->also_make = new;\n\t}\n\n done:\n  free_idep_chain (deps);\n  free (tryrules);\n\n  return rule != 0;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/job.c",
    "content": "/* Job execution and handling for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include \"job.h\"\n#include \"debug.h\"\n#include \"filedef.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"debug.h\"\n\n#include <string.h>\n\n/* Default shell to use.  */\n#ifdef WINDOWS32\n#include <windows.h>\n\nchar *default_shell = \"sh.exe\";\nint no_default_sh_exe = 1;\nint batch_mode_shell = 1;\nHANDLE main_thread;\n\n#elif defined (_AMIGA)\n\nchar default_shell[] = \"\";\nextern int MyExecute (char **);\nint batch_mode_shell = 0;\n\n#elif defined (__MSDOS__)\n\n/* The default shell is a pointer so we can change it if Makefile\n   says so.  It is without an explicit path so we get a chance\n   to search the $PATH for it (since MSDOS doesn't have standard\n   directories we could trust).  */\nchar *default_shell = \"command.com\";\nint batch_mode_shell = 0;\n\n#elif defined (__EMX__)\n\nchar *default_shell = \"/bin/sh\";\nint batch_mode_shell = 0;\n\n#elif defined (VMS)\n\n# include <descrip.h>\nchar default_shell[] = \"\";\nint batch_mode_shell = 0;\n\n#elif defined (__riscos__)\n\nchar default_shell[] = \"\";\nint batch_mode_shell = 0;\n\n#else\n\nchar default_shell[] = \"/bin/sh\";\nint batch_mode_shell = 0;\n\n#endif\n\n#ifdef __MSDOS__\n# include <process.h>\nstatic int execute_by_shell;\nstatic int dos_pid = 123;\nint dos_status;\nint dos_command_running;\n#endif /* __MSDOS__ */\n\n#ifdef _AMIGA\n# include <proto/dos.h>\nstatic int amiga_pid = 123;\nstatic int amiga_status;\nstatic char amiga_bname[32];\nstatic int amiga_batch_file;\n#endif /* Amiga.  */\n\n#ifdef VMS\n# ifndef __GNUC__\n#   include <processes.h>\n# endif\n# include <starlet.h>\n# include <lib$routines.h>\nstatic void vmsWaitForChildren PARAMS ((int *));\n#endif\n\n#ifdef WINDOWS32\n# include <windows.h>\n# include <io.h>\n# include <process.h>\n# include \"sub_proc.h\"\n# include \"w32err.h\"\n# include \"pathstuff.h\"\n#endif /* WINDOWS32 */\n\n#ifdef __EMX__\n# include <process.h>\n#endif\n\n#if defined (HAVE_SYS_WAIT_H) || defined (HAVE_UNION_WAIT)\n# include <sys/wait.h>\n#endif\n\n#ifdef HAVE_WAITPID\n# define WAIT_NOHANG(status)\twaitpid (-1, (status), WNOHANG)\n#else\t/* Don't have waitpid.  */\n# ifdef HAVE_WAIT3\n#  ifndef wait3\nextern int wait3 ();\n#  endif\n#  define WAIT_NOHANG(status)\twait3 ((status), WNOHANG, (struct rusage *) 0)\n# endif /* Have wait3.  */\n#endif /* Have waitpid.  */\n\n#if !defined (wait) && !defined (POSIX)\nextern int wait ();\n#endif\n\n#ifndef\tHAVE_UNION_WAIT\n\n# define WAIT_T int\n\n# ifndef WTERMSIG\n#  define WTERMSIG(x) ((x) & 0x7f)\n# endif\n# ifndef WCOREDUMP\n#  define WCOREDUMP(x) ((x) & 0x80)\n# endif\n# ifndef WEXITSTATUS\n#  define WEXITSTATUS(x) (((x) >> 8) & 0xff)\n# endif\n# ifndef WIFSIGNALED\n#  define WIFSIGNALED(x) (WTERMSIG (x) != 0)\n# endif\n# ifndef WIFEXITED\n#  define WIFEXITED(x) (WTERMSIG (x) == 0)\n# endif\n\n#else\t/* Have `union wait'.  */\n\n# define WAIT_T union wait\n# ifndef WTERMSIG\n#  define WTERMSIG(x) ((x).w_termsig)\n# endif\n# ifndef WCOREDUMP\n#  define WCOREDUMP(x) ((x).w_coredump)\n# endif\n# ifndef WEXITSTATUS\n#  define WEXITSTATUS(x) ((x).w_retcode)\n# endif\n# ifndef WIFSIGNALED\n#  define WIFSIGNALED(x) (WTERMSIG(x) != 0)\n# endif\n# ifndef WIFEXITED\n#  define WIFEXITED(x) (WTERMSIG(x) == 0)\n# endif\n\n#endif\t/* Don't have `union wait'.  */\n\n#ifndef\tHAVE_UNISTD_H\nextern int dup2 ();\nextern int execve ();\nextern void _exit ();\n# ifndef VMS\nextern int geteuid ();\nextern int getegid ();\nextern int setgid ();\nextern int getgid ();\n# endif\n#endif\n\nextern char *allocated_variable_expand_for_file PARAMS ((char *line, struct file *file));\n\nextern int getloadavg PARAMS ((double loadavg[], int nelem));\nextern int start_remote_job PARAMS ((char **argv, char **envp, int stdin_fd,\n\t\tint *is_remote, int *id_ptr, int *used_stdin));\nextern int start_remote_job_p PARAMS ((int));\nextern int remote_status PARAMS ((int *exit_code_ptr, int *signal_ptr,\n\t\tint *coredump_ptr, int block));\n\nRETSIGTYPE child_handler PARAMS ((int));\nstatic void free_child PARAMS ((struct child *));\nstatic void start_job_command PARAMS ((struct child *child));\nstatic int load_too_high PARAMS ((void));\nstatic int job_next_command PARAMS ((struct child *));\nstatic int start_waiting_job PARAMS ((struct child *));\n\f\n/* Chain of all live (or recently deceased) children.  */\n\nstruct child *children = 0;\n\n/* Number of children currently running.  */\n\nunsigned int job_slots_used = 0;\n\n/* Nonzero if the `good' standard input is in use.  */\n\nstatic int good_stdin_used = 0;\n\n/* Chain of children waiting to run until the load average goes down.  */\n\nstatic struct child *waiting_jobs = 0;\n\n/* Non-zero if we use a *real* shell (always so on Unix).  */\n\nint unixy_shell = 1;\n\n/* Number of jobs started in the current second.  */\n\nunsigned long job_counter = 0;\n\n/* Number of jobserver tokens this instance is currently using.  */\n\nunsigned int jobserver_tokens = 0;\n\f\n#ifdef WINDOWS32\n/*\n * The macro which references this function is defined in make.h.\n */\nint\nw32_kill(intptr_t pid, int sig)\n{\n  return ((process_kill((HANDLE)pid, sig) == TRUE) ? 0 : -1);\n}\n\n/* This function creates a temporary file name with an extension specified\n * by the unixy arg.\n * Return an xmalloc'ed string of a newly created temp file and its\n * file descriptor, or die.  */\nstatic char *\ncreate_batch_file (char const *base, int unixy, int *fd)\n{\n  const char *const ext = unixy ? \"sh\" : \"bat\";\n  const char *error = NULL;\n  char temp_path[MAXPATHLEN]; /* need to know its length */\n  unsigned path_size = GetTempPath(sizeof temp_path, temp_path);\n  int path_is_dot = 0;\n  unsigned uniq = 1;\n  const unsigned sizemax = strlen (base) + strlen (ext) + 10;\n\n  if (path_size == 0)\n    {\n      path_size = GetCurrentDirectory (sizeof temp_path, temp_path);\n      path_is_dot = 1;\n    }\n\n  while (path_size > 0 &&\n         path_size + sizemax < sizeof temp_path &&\n         uniq < 0x10000)\n    {\n      unsigned size = sprintf (temp_path + path_size,\n                               \"%s%s-%x.%s\",\n                               temp_path[path_size - 1] == '\\\\' ? \"\" : \"\\\\\",\n                               base, uniq, ext);\n      HANDLE h = CreateFile (temp_path,  /* file name */\n                             GENERIC_READ | GENERIC_WRITE, /* desired access */\n                             0,                            /* no share mode */\n                             NULL,                         /* default security attributes */\n                             CREATE_NEW,                   /* creation disposition */\n                             FILE_ATTRIBUTE_NORMAL |       /* flags and attributes */\n                             FILE_ATTRIBUTE_TEMPORARY,     /* we'll delete it */\n                             NULL);                        /* no template file */\n\n      if (h == INVALID_HANDLE_VALUE)\n        {\n          const DWORD er = GetLastError();\n\n          if (er == ERROR_FILE_EXISTS || er == ERROR_ALREADY_EXISTS)\n            ++uniq;\n\n          /* the temporary path is not guaranteed to exist */\n          else if (path_is_dot == 0)\n            {\n              path_size = GetCurrentDirectory (sizeof temp_path, temp_path);\n              path_is_dot = 1;\n            }\n\n          else\n            {\n              error = map_windows32_error_to_string (er);\n              break;\n            }\n        }\n      else\n        {\n          const unsigned final_size = path_size + size + 1;\n          char *const path = (char *) xmalloc (final_size);\n          memcpy (path, temp_path, final_size);\n          *fd = _open_osfhandle ((intptr_t)h, 0);\n          if (unixy)\n            {\n              char *p;\n              int ch;\n              for (p = path; (ch = *p) != 0; ++p)\n                if (ch == '\\\\')\n                  *p = '/';\n            }\n          return path; /* good return */\n        }\n    }\n\n  *fd = -1;\n  if (error == NULL)\n    error = _(\"Cannot create a temporary file\\n\");\n  fatal (NILF, error);\n\n  /* not reached */\n  return NULL;\n}\n#endif /* WINDOWS32 */\n\n#ifdef __EMX__\n/* returns whether path is assumed to be a unix like shell. */\nint\n_is_unixy_shell (const char *path)\n{\n  /* list of non unix shells */\n  const char *known_os2shells[] = {\n    \"cmd.exe\",\n    \"cmd\",\n    \"4os2.exe\",\n    \"4os2\",\n    \"4dos.exe\",\n    \"4dos\",\n    \"command.com\",\n    \"command\",\n    NULL\n  };\n\n  /* find the rightmost '/' or '\\\\' */\n  const char *name = strrchr (path, '/');\n  const char *p = strrchr (path, '\\\\');\n  unsigned i;\n\n  if (name && p)    /* take the max */\n    name = (name > p) ? name : p;\n  else if (p)       /* name must be 0 */\n    name = p;\n  else if (!name)   /* name and p must be 0 */\n    name = path;\n\n  if (*name == '/' || *name == '\\\\') name++;\n\n  i = 0;\n  while (known_os2shells[i] != NULL) {\n    if (stricmp (name, known_os2shells[i]) == 0) /* strcasecmp() */\n      return 0; /* not a unix shell */\n    i++;\n  }\n\n  /* in doubt assume a unix like shell */\n  return 1;\n}\n#endif /* __EMX__ */\n\n\f\n/* Write an error message describing the exit status given in\n   EXIT_CODE, EXIT_SIG, and COREDUMP, for the target TARGET_NAME.\n   Append \"(ignored)\" if IGNORED is nonzero.  */\n\nstatic void\nchild_error (char *target_name, int exit_code, int exit_sig, int coredump,\n             int ignored)\n{\n  if (ignored && silent_flag)\n    return;\n\n#ifdef VMS\n  if (!(exit_code & 1))\n      error (NILF,\n             (ignored ? _(\"*** [%s] Error 0x%x (ignored)\")\n              : _(\"*** [%s] Error 0x%x\")),\n             target_name, exit_code);\n#else\n  if (exit_sig == 0)\n    error (NILF, ignored ? _(\"[%s] Error %d (ignored)\") :\n\t   _(\"*** [%s] Error %d\"),\n\t   target_name, exit_code);\n  else\n    error (NILF, \"*** [%s] %s%s\",\n\t   target_name, strsignal (exit_sig),\n\t   coredump ? _(\" (core dumped)\") : \"\");\n#endif /* VMS */\n}\n\f\n\n/* Handle a dead child.  This handler may or may not ever be installed.\n\n   If we're using the jobserver feature, we need it.  First, installing it\n   ensures the read will interrupt on SIGCHLD.  Second, we close the dup'd\n   read FD to ensure we don't enter another blocking read without reaping all\n   the dead children.  In this case we don't need the dead_children count.\n\n   If we don't have either waitpid or wait3, then make is unreliable, but we\n   use the dead_children count to reap children as best we can.  */\n\nstatic unsigned int dead_children = 0;\n\nRETSIGTYPE\nchild_handler (int sig UNUSED)\n{\n  ++dead_children;\n\n  if (job_rfd >= 0)\n    {\n      close (job_rfd);\n      job_rfd = -1;\n    }\n\n#ifdef __EMX__\n  /* The signal handler must called only once! */\n  signal (SIGCHLD, SIG_DFL);\n#endif\n\n  /* This causes problems if the SIGCHLD interrupts a printf().\n  DB (DB_JOBS, (_(\"Got a SIGCHLD; %u unreaped children.\\n\"), dead_children));\n  */\n}\n\nextern int shell_function_pid, shell_function_completed;\n\n/* Reap all dead children, storing the returned status and the new command\n   state (`cs_finished') in the `file' member of the `struct child' for the\n   dead child, and removing the child from the chain.  In addition, if BLOCK\n   nonzero, we block in this function until we've reaped at least one\n   complete child, waiting for it to die if necessary.  If ERR is nonzero,\n   print an error message first.  */\n\nvoid\nreap_children (int block, int err)\n{\n#ifndef WINDOWS32\n  WAIT_T status;\n  /* Initially, assume we have some.  */\n  int reap_more = 1;\n#endif\n\n#ifdef WAIT_NOHANG\n# define REAP_MORE reap_more\n#else\n# define REAP_MORE dead_children\n#endif\n\n  /* As long as:\n\n       We have at least one child outstanding OR a shell function in progress,\n         AND\n       We're blocking for a complete child OR there are more children to reap\n\n     we'll keep reaping children.  */\n\n  while ((children != 0 || shell_function_pid != 0)\n         && (block || REAP_MORE))\n    {\n      int remote = 0;\n      pid_t pid;\n      int exit_code, exit_sig, coredump;\n      register struct child *lastc, *c;\n      int child_failed;\n      int any_remote, any_local;\n      int dontcare;\n\n      if (err && block)\n\t{\n          static int printed = 0;\n\n\t  /* We might block for a while, so let the user know why.\n             Only print this message once no matter how many jobs are left.  */\n\t  fflush (stdout);\n          if (!printed)\n            error (NILF, _(\"*** Waiting for unfinished jobs....\"));\n          printed = 1;\n\t}\n\n      /* We have one less dead child to reap.  As noted in\n\t child_handler() above, this count is completely unimportant for\n\t all modern, POSIX-y systems that support wait3() or waitpid().\n\t The rest of this comment below applies only to early, broken\n\t pre-POSIX systems.  We keep the count only because... it's there...\n\n\t The test and decrement are not atomic; if it is compiled into:\n\t \tregister = dead_children - 1;\n\t\tdead_children = register;\n\t a SIGCHLD could come between the two instructions.\n\t child_handler increments dead_children.\n\t The second instruction here would lose that increment.  But the\n\t only effect of dead_children being wrong is that we might wait\n\t longer than necessary to reap a child, and lose some parallelism;\n\t and we might print the \"Waiting for unfinished jobs\" message above\n\t when not necessary.  */\n\n      if (dead_children > 0)\n\t--dead_children;\n\n      any_remote = 0;\n      any_local = shell_function_pid != 0;\n      for (c = children; c != 0; c = c->next)\n\t{\n\t  any_remote |= c->remote;\n\t  any_local |= ! c->remote;\n\t  DB (DB_JOBS, (_(\"Live child %p (%s) PID %ld %s\\n\"),\n                        c, c->file->name,\n                        (long) c->pid, c->remote ? _(\" (remote)\") : \"\"));\n#ifdef VMS\n\t  break;\n#endif\n\t}\n\n      /* First, check for remote children.  */\n      if (any_remote)\n\tpid = remote_status (&exit_code, &exit_sig, &coredump, 0);\n      else\n\tpid = 0;\n\n      if (pid > 0)\n\t/* We got a remote child.  */\n\tremote = 1;\n      else if (pid < 0)\n\t{\n          /* A remote status command failed miserably.  Punt.  */\n\tremote_status_lose:\n\t  pfatal_with_name (\"remote_status\");\n\t}\n      else\n\t{\n\t  /* No remote children.  Check for local children.  */\n#if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32)\n\t  if (any_local)\n\t    {\n#ifdef VMS\n\t      vmsWaitForChildren (&status);\n\t      pid = c->pid;\n#else\n#ifdef WAIT_NOHANG\n\t      if (!block)\n\t\tpid = WAIT_NOHANG (&status);\n\t      else\n#endif\n\t\tpid = wait (&status);\n#endif /* !VMS */\n\t    }\n\t  else\n\t    pid = 0;\n\n\t  if (pid < 0)\n\t    {\n              /* The wait*() failed miserably.  Punt.  */\n\t      pfatal_with_name (\"wait\");\n\t    }\n\t  else if (pid > 0)\n\t    {\n\t      /* We got a child exit; chop the status word up.  */\n\t      exit_code = WEXITSTATUS (status);\n\t      exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0;\n\t      coredump = WCOREDUMP (status);\n\n              /* If we have started jobs in this second, remove one.  */\n              if (job_counter)\n                --job_counter;\n\t    }\n\t  else\n\t    {\n\t      /* No local children are dead.  */\n              reap_more = 0;\n\n\t      if (!block || !any_remote)\n                break;\n\n              /* Now try a blocking wait for a remote child.  */\n              pid = remote_status (&exit_code, &exit_sig, &coredump, 1);\n              if (pid < 0)\n                goto remote_status_lose;\n              else if (pid == 0)\n                /* No remote children either.  Finally give up.  */\n                break;\n\n              /* We got a remote child.  */\n              remote = 1;\n\t    }\n#endif /* !__MSDOS__, !Amiga, !WINDOWS32.  */\n\n#ifdef __MSDOS__\n\t  /* Life is very different on MSDOS.  */\n\t  pid = dos_pid - 1;\n\t  status = dos_status;\n\t  exit_code = WEXITSTATUS (status);\n\t  if (exit_code == 0xff)\n\t    exit_code = -1;\n\t  exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0;\n\t  coredump = 0;\n#endif /* __MSDOS__ */\n#ifdef _AMIGA\n\t  /* Same on Amiga */\n\t  pid = amiga_pid - 1;\n\t  status = amiga_status;\n\t  exit_code = amiga_status;\n\t  exit_sig = 0;\n\t  coredump = 0;\n#endif /* _AMIGA */\n#ifdef WINDOWS32\n          {\n            HANDLE hPID;\n            int werr;\n            HANDLE hcTID, hcPID;\n            exit_code = 0;\n            exit_sig = 0;\n            coredump = 0;\n\n            /* Record the thread ID of the main process, so that we\n               could suspend it in the signal handler.  */\n            if (!main_thread)\n              {\n                hcTID = GetCurrentThread ();\n                hcPID = GetCurrentProcess ();\n                if (!DuplicateHandle (hcPID, hcTID, hcPID, &main_thread, 0,\n                                      FALSE, DUPLICATE_SAME_ACCESS))\n                  {\n                    DWORD e = GetLastError ();\n                    fprintf (stderr,\n                             \"Determine main thread ID (Error %ld: %s)\\n\",\n                             e, map_windows32_error_to_string(e));\n                  }\n                else\n                  DB (DB_VERBOSE, (\"Main thread handle = %p\\n\",\n                                   main_thread));\n              }\n\n            /* wait for anything to finish */\n            hPID = process_wait_for_any();\n            if (hPID)\n              {\n\n                /* was an error found on this process? */\n                werr = process_last_err(hPID);\n\n                /* get exit data */\n                exit_code = process_exit_code(hPID);\n\n                if (werr)\n                  fprintf(stderr, \"make (e=%d): %s\",\n                          exit_code, map_windows32_error_to_string(exit_code));\n\n                /* signal */\n                exit_sig = process_signal(hPID);\n\n                /* cleanup process */\n                process_cleanup(hPID);\n\n                coredump = 0;\n              }\n            pid = (pid_t) hPID;\n          }\n#endif /* WINDOWS32 */\n\t}\n\n      /* Check if this is the child of the `shell' function.  */\n      if (!remote && pid == shell_function_pid)\n\t{\n\t  /* It is.  Leave an indicator for the `shell' function.  */\n\t  if (exit_sig == 0 && exit_code == 127)\n\t    shell_function_completed = -1;\n\t  else\n\t    shell_function_completed = 1;\n\t  break;\n\t}\n\n      child_failed = exit_sig != 0 || exit_code != 0;\n\n      /* Search for a child matching the deceased one.  */\n      lastc = 0;\n      for (c = children; c != 0; lastc = c, c = c->next)\n\tif (c->remote == remote && c->pid == pid)\n\t  break;\n\n      if (c == 0)\n        /* An unknown child died.\n           Ignore it; it was inherited from our invoker.  */\n        continue;\n\n      DB (DB_JOBS, (child_failed\n                    ? _(\"Reaping losing child %p PID %ld %s\\n\")\n                    : _(\"Reaping winning child 0x%08lx PID %ld %s\\n\"),\n                    c, (long) c->pid,\n                    c->remote ? _(\" (remote)\") : \"\"));\n\n      if (c->sh_batch_file) {\n        DB (DB_JOBS, (_(\"Cleaning up temp batch file %s\\n\"),\n                      c->sh_batch_file));\n\n        /* just try and remove, don't care if this fails */\n        remove (c->sh_batch_file);\n\n        /* all done with memory */\n        free (c->sh_batch_file);\n        c->sh_batch_file = NULL;\n      }\n\n      /* If this child had the good stdin, say it is now free.  */\n      if (c->good_stdin)\n        good_stdin_used = 0;\n\n      dontcare = c->dontcare;\n\n      if (child_failed && !c->noerror && !ignore_errors_flag)\n        {\n          /* The commands failed.  Write an error message,\n             delete non-precious targets, and abort.  */\n          static int delete_on_error = -1;\n\n          if (!dontcare)\n            child_error (c->file->name, exit_code, exit_sig, coredump, 0);\n\n          c->file->update_status = 2;\n          if (delete_on_error == -1)\n            {\n              struct file *f = lookup_file (\".DELETE_ON_ERROR\");\n              delete_on_error = f != 0 && f->is_target;\n            }\n          if (exit_sig != 0 || delete_on_error)\n            delete_child_targets (c);\n        }\n      else\n        {\n          if (child_failed)\n            {\n              /* The commands failed, but we don't care.  */\n              child_error (c->file->name,\n                           exit_code, exit_sig, coredump, 1);\n              child_failed = 0;\n            }\n\n          /* If there are more commands to run, try to start them.  */\n          if (job_next_command (c))\n            {\n              if (handling_fatal_signal)\n                {\n                  /* Never start new commands while we are dying.\n                     Since there are more commands that wanted to be run,\n                     the target was not completely remade.  So we treat\n                     this as if a command had failed.  */\n                  c->file->update_status = 2;\n                }\n              else\n                {\n                  /* Check again whether to start remotely.\n                     Whether or not we want to changes over time.\n                     Also, start_remote_job may need state set up\n                     by start_remote_job_p.  */\n                  c->remote = start_remote_job_p (0);\n                  start_job_command (c);\n                  /* Fatal signals are left blocked in case we were\n                     about to put that child on the chain.  But it is\n                     already there, so it is safe for a fatal signal to\n                     arrive now; it will clean up this child's targets.  */\n                  unblock_sigs ();\n                  if (c->file->command_state == cs_running)\n                    /* We successfully started the new command.\n                       Loop to reap more children.  */\n                    continue;\n                }\n\n              if (c->file->update_status != 0)\n                /* We failed to start the commands.  */\n                delete_child_targets (c);\n            }\n          else\n            /* There are no more commands.  We got through them all\n               without an unignored error.  Now the target has been\n               successfully updated.  */\n            c->file->update_status = 0;\n        }\n\n      /* When we get here, all the commands for C->file are finished\n         (or aborted) and C->file->update_status contains 0 or 2.  But\n         C->file->command_state is still cs_running if all the commands\n         ran; notice_finish_file looks for cs_running to tell it that\n         it's interesting to check the file's modtime again now.  */\n\n      if (! handling_fatal_signal)\n        /* Notice if the target of the commands has been changed.\n           This also propagates its values for command_state and\n           update_status to its also_make files.  */\n        notice_finished_file (c->file);\n\n      DB (DB_JOBS, (_(\"Removing child %p PID %ld%s from chain.\\n\"),\n                    c, (long) c->pid,\n                    c->remote ? _(\" (remote)\") : \"\"));\n\n      /* Block fatal signals while frobnicating the list, so that\n         children and job_slots_used are always consistent.  Otherwise\n         a fatal signal arriving after the child is off the chain and\n         before job_slots_used is decremented would believe a child was\n         live and call reap_children again.  */\n      block_sigs ();\n\n      /* There is now another slot open.  */\n      if (job_slots_used > 0)\n        --job_slots_used;\n\n      /* Remove the child from the chain and free it.  */\n      if (lastc == 0)\n        children = c->next;\n      else\n        lastc->next = c->next;\n\n      free_child (c);\n\n      unblock_sigs ();\n\n      /* If the job failed, and the -k flag was not given, die,\n         unless we are already in the process of dying.  */\n      if (!err && child_failed && !dontcare && !keep_going_flag &&\n          /* fatal_error_signal will die with the right signal.  */\n          !handling_fatal_signal)\n        die (2);\n\n      /* Only block for one child.  */\n      block = 0;\n    }\n\n  return;\n}\n\f\n/* Free the storage allocated for CHILD.  */\n\nstatic void\nfree_child (struct child *child)\n{\n  if (!jobserver_tokens)\n    fatal (NILF, \"INTERNAL: Freeing child %p (%s) but no tokens left!\\n\",\n           child, child->file->name);\n\n  /* If we're using the jobserver and this child is not the only outstanding\n     job, put a token back into the pipe for it.  */\n\n  if (job_fds[1] >= 0 && jobserver_tokens > 1)\n    {\n      char token = '+';\n      int r;\n\n      /* Write a job token back to the pipe.  */\n\n      EINTRLOOP (r, write (job_fds[1], &token, 1));\n      if (r != 1)\n\tpfatal_with_name (_(\"write jobserver\"));\n\n      DB (DB_JOBS, (_(\"Released token for child %p (%s).\\n\"),\n                    child, child->file->name));\n    }\n\n  --jobserver_tokens;\n\n  if (handling_fatal_signal) /* Don't bother free'ing if about to die.  */\n    return;\n\n  if (child->command_lines != 0)\n    {\n      register unsigned int i;\n      for (i = 0; i < child->file->cmds->ncommand_lines; ++i)\n\tfree (child->command_lines[i]);\n      free ((char *) child->command_lines);\n    }\n\n  if (child->environment != 0)\n    {\n      register char **ep = child->environment;\n      while (*ep != 0)\n\tfree (*ep++);\n      free ((char *) child->environment);\n    }\n\n  free ((char *) child);\n}\n\f\n#ifdef POSIX\nextern sigset_t fatal_signal_set;\n#endif\n\nvoid\nblock_sigs (void)\n{\n#ifdef POSIX\n  (void) sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0);\n#else\n# ifdef HAVE_SIGSETMASK\n  (void) sigblock (fatal_signal_mask);\n# endif\n#endif\n}\n\n#ifdef POSIX\nvoid\nunblock_sigs (void)\n{\n  sigset_t empty;\n  sigemptyset (&empty);\n  sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0);\n}\n#endif\n\n#ifdef MAKE_JOBSERVER\nRETSIGTYPE\njob_noop (int sig UNUSED)\n{\n}\n/* Set the child handler action flags to FLAGS.  */\nstatic void\nset_child_handler_action_flags (int set_handler, int set_alarm)\n{\n  struct sigaction sa;\n\n#ifdef __EMX__\n  /* The child handler must be turned off here.  */\n  signal (SIGCHLD, SIG_DFL);\n#endif\n\n  bzero ((char *) &sa, sizeof sa);\n  sa.sa_handler = child_handler;\n  sa.sa_flags = set_handler ? 0 : SA_RESTART;\n#if defined SIGCHLD\n  sigaction (SIGCHLD, &sa, NULL);\n#endif\n#if defined SIGCLD && SIGCLD != SIGCHLD\n  sigaction (SIGCLD, &sa, NULL);\n#endif\n#if defined SIGALRM\n  if (set_alarm)\n    {\n      /* If we're about to enter the read(), set an alarm to wake up in a\n         second so we can check if the load has dropped and we can start more\n         work.  On the way out, turn off the alarm and set SIG_DFL.  */\n      alarm (set_handler ? 1 : 0);\n      sa.sa_handler = set_handler ? job_noop : SIG_DFL;\n      sa.sa_flags = 0;\n      sigaction (SIGALRM, &sa, NULL);\n    }\n#endif\n}\n#endif\n\n\n/* Start a job to run the commands specified in CHILD.\n   CHILD is updated to reflect the commands and ID of the child process.\n\n   NOTE: On return fatal signals are blocked!  The caller is responsible\n   for calling `unblock_sigs', once the new child is safely on the chain so\n   it can be cleaned up in the event of a fatal signal.  */\n\nstatic void\nstart_job_command (struct child *child)\n{\n#if !defined(_AMIGA) && !defined(WINDOWS32)\n  static int bad_stdin = -1;\n#endif\n  register char *p;\n  int flags;\n#ifdef VMS\n  char *argv;\n#else\n  char **argv;\n#endif\n\n  /* If we have a completely empty commandset, stop now.  */\n  if (!child->command_ptr)\n    goto next_command;\n\n  /* Combine the flags parsed for the line itself with\n     the flags specified globally for this target.  */\n  flags = (child->file->command_flags\n\t   | child->file->cmds->lines_flags[child->command_line - 1]);\n\n  p = child->command_ptr;\n  child->noerror = ((flags & COMMANDS_NOERROR) != 0);\n\n  while (*p != '\\0')\n    {\n      if (*p == '@')\n\tflags |= COMMANDS_SILENT;\n      else if (*p == '+')\n\tflags |= COMMANDS_RECURSE;\n      else if (*p == '-')\n\tchild->noerror = 1;\n      else if (!isblank ((unsigned char)*p))\n\tbreak;\n      ++p;\n    }\n\n  /* Update the file's command flags with any new ones we found.  We only\n     keep the COMMANDS_RECURSE setting.  Even this isn't 100% correct; we are\n     now marking more commands recursive than should be in the case of\n     multiline define/endef scripts where only one line is marked \"+\".  In\n     order to really fix this, we'll have to keep a lines_flags for every\n     actual line, after expansion.  */\n  child->file->cmds->lines_flags[child->command_line - 1]\n    |= flags & COMMANDS_RECURSE;\n\n  /* Figure out an argument list from this command line.  */\n\n  {\n    char *end = 0;\n#ifdef VMS\n    argv = p;\n#else\n    argv = construct_command_argv (p, &end, child->file, &child->sh_batch_file);\n#endif\n    if (end == NULL)\n      child->command_ptr = NULL;\n    else\n      {\n\t*end++ = '\\0';\n\tchild->command_ptr = end;\n      }\n  }\n\n  /* If -q was given, say that updating `failed' if there was any text on the\n     command line, or `succeeded' otherwise.  The exit status of 1 tells the\n     user that -q is saying `something to do'; the exit status for a random\n     error is 2.  */\n  if (argv != 0 && question_flag && !(flags & COMMANDS_RECURSE))\n    {\n#ifndef VMS\n      free (argv[0]);\n      free ((char *) argv);\n#endif\n      child->file->update_status = 1;\n      notice_finished_file (child->file);\n      return;\n    }\n\n  if (touch_flag && !(flags & COMMANDS_RECURSE))\n    {\n      /* Go on to the next command.  It might be the recursive one.\n\t We construct ARGV only to find the end of the command line.  */\n#ifndef VMS\n      if (argv)\n        {\n          free (argv[0]);\n          free ((char *) argv);\n        }\n#endif\n      argv = 0;\n    }\n\n  if (argv == 0)\n    {\n    next_command:\n#ifdef __MSDOS__\n      execute_by_shell = 0;   /* in case construct_command_argv sets it */\n#endif\n      /* This line has no commands.  Go to the next.  */\n      if (job_next_command (child))\n\tstart_job_command (child);\n      else\n\t{\n\t  /* No more commands.  Make sure we're \"running\"; we might not be if\n             (e.g.) all commands were skipped due to -n.  */\n          set_command_state (child->file, cs_running);\n\t  child->file->update_status = 0;\n\t  notice_finished_file (child->file);\n\t}\n      return;\n    }\n\n  /* Print out the command.  If silent, we call `message' with null so it\n     can log the working directory before the command's own error messages\n     appear.  */\n\n  message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag))\n\t   ? \"%s\" : (char *) 0, p);\n\n  /* Tell update_goal_chain that a command has been started on behalf of\n     this target.  It is important that this happens here and not in\n     reap_children (where we used to do it), because reap_children might be\n     reaping children from a different target.  We want this increment to\n     guaranteedly indicate that a command was started for the dependency\n     chain (i.e., update_file recursion chain) we are processing.  */\n\n  ++commands_started;\n\n  /* Optimize an empty command.  People use this for timestamp rules,\n     so avoid forking a useless shell.  Do this after we increment\n     commands_started so make still treats this special case as if it\n     performed some action (makes a difference as to what messages are\n     printed, etc.  */\n\n#if !defined(VMS) && !defined(_AMIGA)\n  if (\n#if defined __MSDOS__ || defined (__EMX__)\n      unixy_shell\t/* the test is complicated and we already did it */\n#else\n      (argv[0] && !strcmp (argv[0], \"/bin/sh\"))\n#endif\n      && (argv[1]\n          && argv[1][0] == '-' && argv[1][1] == 'c' && argv[1][2] == '\\0')\n      && (argv[2] && argv[2][0] == ':' && argv[2][1] == '\\0')\n      && argv[3] == NULL)\n    {\n      free (argv[0]);\n      free ((char *) argv);\n      goto next_command;\n    }\n#endif  /* !VMS && !_AMIGA */\n\n  /* If -n was given, recurse to get the next line in the sequence.  */\n\n  if (just_print_flag && !(flags & COMMANDS_RECURSE))\n    {\n#ifndef VMS\n      free (argv[0]);\n      free ((char *) argv);\n#endif\n      goto next_command;\n    }\n\n  /* Flush the output streams so they won't have things written twice.  */\n\n  fflush (stdout);\n  fflush (stderr);\n\n#ifndef VMS\n#if !defined(WINDOWS32) && !defined(_AMIGA) && !defined(__MSDOS__)\n\n  /* Set up a bad standard input that reads from a broken pipe.  */\n\n  if (bad_stdin == -1)\n    {\n      /* Make a file descriptor that is the read end of a broken pipe.\n\t This will be used for some children's standard inputs.  */\n      int pd[2];\n      if (pipe (pd) == 0)\n\t{\n\t  /* Close the write side.  */\n\t  (void) close (pd[1]);\n\t  /* Save the read side.  */\n\t  bad_stdin = pd[0];\n\n\t  /* Set the descriptor to close on exec, so it does not litter any\n\t     child's descriptor table.  When it is dup2'd onto descriptor 0,\n\t     that descriptor will not close on exec.  */\n\t  CLOSE_ON_EXEC (bad_stdin);\n\t}\n    }\n\n#endif /* !WINDOWS32 && !_AMIGA && !__MSDOS__ */\n\n  /* Decide whether to give this child the `good' standard input\n     (one that points to the terminal or whatever), or the `bad' one\n     that points to the read side of a broken pipe.  */\n\n  child->good_stdin = !good_stdin_used;\n  if (child->good_stdin)\n    good_stdin_used = 1;\n\n#endif /* !VMS */\n\n  child->deleted = 0;\n\n#ifndef _AMIGA\n  /* Set up the environment for the child.  */\n  if (child->environment == 0)\n    child->environment = target_environment (child->file);\n#endif\n\n#if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32)\n\n#ifndef VMS\n  /* start_waiting_job has set CHILD->remote if we can start a remote job.  */\n  if (child->remote)\n    {\n      int is_remote, id, used_stdin;\n      if (start_remote_job (argv, child->environment,\n\t\t\t    child->good_stdin ? 0 : bad_stdin,\n\t\t\t    &is_remote, &id, &used_stdin))\n        /* Don't give up; remote execution may fail for various reasons.  If\n           so, simply run the job locally.  */\n\tgoto run_local;\n      else\n\t{\n\t  if (child->good_stdin && !used_stdin)\n\t    {\n\t      child->good_stdin = 0;\n\t      good_stdin_used = 0;\n\t    }\n\t  child->remote = is_remote;\n\t  child->pid = id;\n\t}\n    }\n  else\n#endif /* !VMS */\n    {\n      /* Fork the child process.  */\n\n      char **parent_environ;\n\n    run_local:\n      block_sigs ();\n\n      child->remote = 0;\n\n#ifdef VMS\n      if (!child_execute_job (argv, child)) {\n        /* Fork failed!  */\n        perror_with_name (\"vfork\", \"\");\n        goto error;\n      }\n\n#else\n\n      parent_environ = environ;\n\n# ifdef __EMX__\n      /* If we aren't running a recursive command and we have a jobserver\n         pipe, close it before exec'ing.  */\n      if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)\n\t{\n\t  CLOSE_ON_EXEC (job_fds[0]);\n\t  CLOSE_ON_EXEC (job_fds[1]);\n\t}\n      if (job_rfd >= 0)\n\tCLOSE_ON_EXEC (job_rfd);\n\n      /* Never use fork()/exec() here! Use spawn() instead in exec_command() */\n      child->pid = child_execute_job (child->good_stdin ? 0 : bad_stdin, 1,\n                                      argv, child->environment);\n      if (child->pid < 0)\n\t{\n\t  /* spawn failed!  */\n\t  unblock_sigs ();\n\t  perror_with_name (\"spawn\", \"\");\n\t  goto error;\n\t}\n\n      /* undo CLOSE_ON_EXEC() after the child process has been started */\n      if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)\n\t{\n\t  fcntl (job_fds[0], F_SETFD, 0);\n\t  fcntl (job_fds[1], F_SETFD, 0);\n\t}\n      if (job_rfd >= 0)\n\tfcntl (job_rfd, F_SETFD, 0);\n\n#else  /* !__EMX__ */\n\n      child->pid = vfork ();\n      environ = parent_environ;\t/* Restore value child may have clobbered.  */\n      if (child->pid == 0)\n\t{\n\t  /* We are the child side.  */\n\t  unblock_sigs ();\n\n          /* If we aren't running a recursive command and we have a jobserver\n             pipe, close it before exec'ing.  */\n          if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)\n            {\n              close (job_fds[0]);\n              close (job_fds[1]);\n            }\n          if (job_rfd >= 0)\n            close (job_rfd);\n\n\t  child_execute_job (child->good_stdin ? 0 : bad_stdin, 1,\n                             argv, child->environment);\n\t}\n      else if (child->pid < 0)\n\t{\n\t  /* Fork failed!  */\n\t  unblock_sigs ();\n\t  perror_with_name (\"vfork\", \"\");\n\t  goto error;\n\t}\n# endif  /* !__EMX__ */\n#endif /* !VMS */\n    }\n\n#else\t/* __MSDOS__ or Amiga or WINDOWS32 */\n#ifdef __MSDOS__\n  {\n    int proc_return;\n\n    block_sigs ();\n    dos_status = 0;\n\n    /* We call `system' to do the job of the SHELL, since stock DOS\n       shell is too dumb.  Our `system' knows how to handle long\n       command lines even if pipes/redirection is needed; it will only\n       call COMMAND.COM when its internal commands are used.  */\n    if (execute_by_shell)\n      {\n\tchar *cmdline = argv[0];\n\t/* We don't have a way to pass environment to `system',\n\t   so we need to save and restore ours, sigh...  */\n\tchar **parent_environ = environ;\n\n\tenviron = child->environment;\n\n\t/* If we have a *real* shell, tell `system' to call\n\t   it to do everything for us.  */\n\tif (unixy_shell)\n\t  {\n\t    /* A *real* shell on MSDOS may not support long\n\t       command lines the DJGPP way, so we must use `system'.  */\n\t    cmdline = argv[2];\t/* get past \"shell -c\" */\n\t  }\n\n\tdos_command_running = 1;\n\tproc_return = system (cmdline);\n\tenviron = parent_environ;\n\texecute_by_shell = 0;\t/* for the next time */\n      }\n    else\n      {\n\tdos_command_running = 1;\n\tproc_return = spawnvpe (P_WAIT, argv[0], argv, child->environment);\n      }\n\n    /* Need to unblock signals before turning off\n       dos_command_running, so that child's signals\n       will be treated as such (see fatal_error_signal).  */\n    unblock_sigs ();\n    dos_command_running = 0;\n\n    /* If the child got a signal, dos_status has its\n       high 8 bits set, so be careful not to alter them.  */\n    if (proc_return == -1)\n      dos_status |= 0xff;\n    else\n      dos_status |= (proc_return & 0xff);\n    ++dead_children;\n    child->pid = dos_pid++;\n  }\n#endif /* __MSDOS__ */\n#ifdef _AMIGA\n  amiga_status = MyExecute (argv);\n\n  ++dead_children;\n  child->pid = amiga_pid++;\n  if (amiga_batch_file)\n  {\n     amiga_batch_file = 0;\n     DeleteFile (amiga_bname);        /* Ignore errors.  */\n  }\n#endif\t/* Amiga */\n#ifdef WINDOWS32\n  {\n      HANDLE hPID;\n      char* arg0;\n\n      /* make UNC paths safe for CreateProcess -- backslash format */\n      arg0 = argv[0];\n      if (arg0 && arg0[0] == '/' && arg0[1] == '/')\n        for ( ; arg0 && *arg0; arg0++)\n          if (*arg0 == '/')\n            *arg0 = '\\\\';\n\n      /* make sure CreateProcess() has Path it needs */\n      sync_Path_environment();\n\n      hPID = process_easy(argv, child->environment);\n\n      if (hPID != INVALID_HANDLE_VALUE)\n        child->pid = (intptr_t) hPID;\n      else {\n        int i;\n        unblock_sigs();\n        fprintf(stderr,\n                _(\"process_easy() failed to launch process (e=%ld)\\n\"),\n                process_last_err(hPID));\n        for (i = 0; argv[i]; i++)\n          fprintf(stderr, \"%s \", argv[i]);\n        fprintf(stderr, _(\"\\nCounted %d args in failed launch\\n\"), i);\n        goto error;\n      }\n  }\n#endif /* WINDOWS32 */\n#endif\t/* __MSDOS__ or Amiga or WINDOWS32 */\n\n  /* Bump the number of jobs started in this second.  */\n  ++job_counter;\n\n  /* We are the parent side.  Set the state to\n     say the commands are running and return.  */\n\n  set_command_state (child->file, cs_running);\n\n  /* Free the storage used by the child's argument list.  */\n#ifndef VMS\n  free (argv[0]);\n  free ((char *) argv);\n#endif\n\n  return;\n\n error:\n  child->file->update_status = 2;\n  notice_finished_file (child->file);\n  return;\n}\n\n/* Try to start a child running.\n   Returns nonzero if the child was started (and maybe finished), or zero if\n   the load was too high and the child was put on the `waiting_jobs' chain.  */\n\nstatic int\nstart_waiting_job (struct child *c)\n{\n  struct file *f = c->file;\n\n  /* If we can start a job remotely, we always want to, and don't care about\n     the local load average.  We record that the job should be started\n     remotely in C->remote for start_job_command to test.  */\n\n  c->remote = start_remote_job_p (1);\n\n  /* If we are running at least one job already and the load average\n     is too high, make this one wait.  */\n  if (!c->remote\n      && ((job_slots_used > 0 && load_too_high ())\n#ifdef WINDOWS32\n\t  || (process_used_slots () >= MAXIMUM_WAIT_OBJECTS)\n#endif\n\t  ))\n    {\n      /* Put this child on the chain of children waiting for the load average\n         to go down.  */\n      set_command_state (f, cs_running);\n      c->next = waiting_jobs;\n      waiting_jobs = c;\n      return 0;\n    }\n\n  /* Start the first command; reap_children will run later command lines.  */\n  start_job_command (c);\n\n  switch (f->command_state)\n    {\n    case cs_running:\n      c->next = children;\n      DB (DB_JOBS, (_(\"Putting child %p (%s) PID %ld%s on the chain.\\n\"),\n                    c, c->file->name,\n                    (long) c->pid, c->remote ? _(\" (remote)\") : \"\"));\n      children = c;\n      /* One more job slot is in use.  */\n      ++job_slots_used;\n      unblock_sigs ();\n      break;\n\n    case cs_not_started:\n      /* All the command lines turned out to be empty.  */\n      f->update_status = 0;\n      /* FALLTHROUGH */\n\n    case cs_finished:\n      notice_finished_file (f);\n      free_child (c);\n      break;\n\n    default:\n      assert (f->command_state == cs_finished);\n      break;\n    }\n\n  return 1;\n}\n\n/* Create a `struct child' for FILE and start its commands running.  */\n\nvoid\nnew_job (struct file *file)\n{\n  register struct commands *cmds = file->cmds;\n  register struct child *c;\n  char **lines;\n  register unsigned int i;\n\n  /* Let any previously decided-upon jobs that are waiting\n     for the load to go down start before this new one.  */\n  start_waiting_jobs ();\n\n  /* Reap any children that might have finished recently.  */\n  reap_children (0, 0);\n\n  /* Chop the commands up into lines if they aren't already.  */\n  chop_commands (cmds);\n\n  /* Expand the command lines and store the results in LINES.  */\n  lines = (char **) xmalloc (cmds->ncommand_lines * sizeof (char *));\n  for (i = 0; i < cmds->ncommand_lines; ++i)\n    {\n      /* Collapse backslash-newline combinations that are inside variable\n\t or function references.  These are left alone by the parser so\n\t that they will appear in the echoing of commands (where they look\n\t nice); and collapsed by construct_command_argv when it tokenizes.\n\t But letting them survive inside function invocations loses because\n\t we don't want the functions to see them as part of the text.  */\n\n      char *in, *out, *ref;\n\n      /* IN points to where in the line we are scanning.\n\t OUT points to where in the line we are writing.\n\t When we collapse a backslash-newline combination,\n\t IN gets ahead of OUT.  */\n\n      in = out = cmds->command_lines[i];\n      while ((ref = strchr (in, '$')) != 0)\n\t{\n\t  ++ref;\t\t/* Move past the $.  */\n\n\t  if (out != in)\n\t    /* Copy the text between the end of the last chunk\n\t       we processed (where IN points) and the new chunk\n\t       we are about to process (where REF points).  */\n\t    bcopy (in, out, ref - in);\n\n\t  /* Move both pointers past the boring stuff.  */\n\t  out += ref - in;\n\t  in = ref;\n\n\t  if (*ref == '(' || *ref == '{')\n\t    {\n\t      char openparen = *ref;\n\t      char closeparen = openparen == '(' ? ')' : '}';\n\t      int count;\n\t      char *p;\n\n\t      *out++ = *in++;\t/* Copy OPENPAREN.  */\n\t      /* IN now points past the opening paren or brace.\n\t\t Count parens or braces until it is matched.  */\n\t      count = 0;\n\t      while (*in != '\\0')\n\t\t{\n\t\t  if (*in == closeparen && --count < 0)\n\t\t    break;\n\t\t  else if (*in == '\\\\' && in[1] == '\\n')\n\t\t    {\n\t\t      /* We have found a backslash-newline inside a\n\t\t\t variable or function reference.  Eat it and\n\t\t\t any following whitespace.  */\n\n\t\t      int quoted = 0;\n\t\t      for (p = in - 1; p > ref && *p == '\\\\'; --p)\n\t\t\tquoted = !quoted;\n\n\t\t      if (quoted)\n\t\t\t/* There were two or more backslashes, so this is\n\t\t\t   not really a continuation line.  We don't collapse\n\t\t\t   the quoting backslashes here as is done in\n\t\t\t   collapse_continuations, because the line will\n\t\t\t   be collapsed again after expansion.  */\n\t\t\t*out++ = *in++;\n\t\t      else\n\t\t\t{\n\t\t\t  /* Skip the backslash, newline and\n\t\t\t     any following whitespace.  */\n\t\t\t  in = next_token (in + 2);\n\n\t\t\t  /* Discard any preceding whitespace that has\n\t\t\t     already been written to the output.  */\n\t\t\t  while (out > ref\n\t\t\t\t && isblank ((unsigned char)out[-1]))\n\t\t\t    --out;\n\n\t\t\t  /* Replace it all with a single space.  */\n\t\t\t  *out++ = ' ';\n\t\t\t}\n\t\t    }\n\t\t  else\n\t\t    {\n\t\t      if (*in == openparen)\n\t\t\t++count;\n\n\t\t      *out++ = *in++;\n\t\t    }\n\t\t}\n\t    }\n\t}\n\n      /* There are no more references in this line to worry about.\n\t Copy the remaining uninteresting text to the output.  */\n      if (out != in)\n\tstrcpy (out, in);\n\n      /* Finally, expand the line.  */\n      lines[i] = allocated_variable_expand_for_file (cmds->command_lines[i],\n\t\t\t\t\t\t     file);\n    }\n\n  /* Start the command sequence, record it in a new\n     `struct child', and add that to the chain.  */\n\n  c = (struct child *) xmalloc (sizeof (struct child));\n  bzero ((char *)c, sizeof (struct child));\n  c->file = file;\n  c->command_lines = lines;\n  c->sh_batch_file = NULL;\n\n  /* Cache dontcare flag because file->dontcare can be changed once we\n     return. Check dontcare inheritance mechanism for details.  */\n  c->dontcare = file->dontcare;\n\n  /* Fetch the first command line to be run.  */\n  job_next_command (c);\n\n  /* Wait for a job slot to be freed up.  If we allow an infinite number\n     don't bother; also job_slots will == 0 if we're using the jobserver.  */\n\n  if (job_slots != 0)\n    while (job_slots_used == job_slots)\n      reap_children (1, 0);\n\n#ifdef MAKE_JOBSERVER\n  /* If we are controlling multiple jobs make sure we have a token before\n     starting the child. */\n\n  /* This can be inefficient.  There's a decent chance that this job won't\n     actually have to run any subprocesses: the command script may be empty\n     or otherwise optimized away.  It would be nice if we could defer\n     obtaining a token until just before we need it, in start_job_command.\n     To do that we'd need to keep track of whether we'd already obtained a\n     token (since start_job_command is called for each line of the job, not\n     just once).  Also more thought needs to go into the entire algorithm;\n     this is where the old parallel job code waits, so...  */\n\n  else if (job_fds[0] >= 0)\n    while (1)\n      {\n        char token;\n\tint got_token;\n\tint saved_errno;\n\n        DB (DB_JOBS, (\"Need a job token; we %shave children\\n\",\n                      children ? \"\" : \"don't \"));\n\n        /* If we don't already have a job started, use our \"free\" token.  */\n        if (!jobserver_tokens)\n          break;\n\n        /* Read a token.  As long as there's no token available we'll block.\n           We enable interruptible system calls before the read(2) so that if\n           we get a SIGCHLD while we're waiting, we'll return with EINTR and\n           we can process the death(s) and return tokens to the free pool.\n\n           Once we return from the read, we immediately reinstate restartable\n           system calls.  This allows us to not worry about checking for\n           EINTR on all the other system calls in the program.\n\n           There is one other twist: there is a span between the time\n           reap_children() does its last check for dead children and the time\n           the read(2) call is entered, below, where if a child dies we won't\n           notice.  This is extremely serious as it could cause us to\n           deadlock, given the right set of events.\n\n           To avoid this, we do the following: before we reap_children(), we\n           dup(2) the read FD on the jobserver pipe.  The read(2) call below\n           uses that new FD.  In the signal handler, we close that FD.  That\n           way, if a child dies during the section mentioned above, the\n           read(2) will be invoked with an invalid FD and will return\n           immediately with EBADF.  */\n\n        /* Make sure we have a dup'd FD.  */\n        if (job_rfd < 0)\n          {\n            DB (DB_JOBS, (\"Duplicate the job FD\\n\"));\n            job_rfd = dup (job_fds[0]);\n          }\n\n        /* Reap anything that's currently waiting.  */\n        reap_children (0, 0);\n\n        /* Kick off any jobs we have waiting for an opportunity that\n           can run now (ie waiting for load). */\n        start_waiting_jobs ();\n\n        /* If our \"free\" slot has become available, use it; we don't need an\n           actual token.  */\n        if (!jobserver_tokens)\n          break;\n\n        /* There must be at least one child already, or we have no business\n           waiting for a token. */\n        if (!children)\n          fatal (NILF, \"INTERNAL: no children as we go to sleep on read\\n\");\n\n        /* Set interruptible system calls, and read() for a job token.  */\n\tset_child_handler_action_flags (1, waiting_jobs != NULL);\n\tgot_token = read (job_rfd, &token, 1);\n\tsaved_errno = errno;\n\tset_child_handler_action_flags (0, waiting_jobs != NULL);\n\n        /* If we got one, we're done here.  */\n\tif (got_token == 1)\n          {\n            DB (DB_JOBS, (_(\"Obtained token for child 0x%08lx (%s).\\n\"),\n                          (unsigned long int) c, c->file->name));\n            break;\n          }\n\n        /* If the error _wasn't_ expected (EINTR or EBADF), punt.  Otherwise,\n           go back and reap_children(), and try again.  */\n\terrno = saved_errno;\n        if (errno != EINTR && errno != EBADF)\n          pfatal_with_name (_(\"read jobs pipe\"));\n        if (errno == EBADF)\n          DB (DB_JOBS, (\"Read returned EBADF.\\n\"));\n      }\n#endif\n\n  ++jobserver_tokens;\n\n  /* The job is now primed.  Start it running.\n     (This will notice if there are in fact no commands.)  */\n  (void) start_waiting_job (c);\n\n  if (job_slots == 1 || not_parallel)\n    /* Since there is only one job slot, make things run linearly.\n       Wait for the child to die, setting the state to `cs_finished'.  */\n    while (file->command_state == cs_running)\n      reap_children (1, 0);\n\n  return;\n}\n\f\n/* Move CHILD's pointers to the next command for it to execute.\n   Returns nonzero if there is another command.  */\n\nstatic int\njob_next_command (struct child *child)\n{\n  while (child->command_ptr == 0 || *child->command_ptr == '\\0')\n    {\n      /* There are no more lines in the expansion of this line.  */\n      if (child->command_line == child->file->cmds->ncommand_lines)\n\t{\n\t  /* There are no more lines to be expanded.  */\n\t  child->command_ptr = 0;\n\t  return 0;\n\t}\n      else\n\t/* Get the next line to run.  */\n\tchild->command_ptr = child->command_lines[child->command_line++];\n    }\n  return 1;\n}\n\n/* Determine if the load average on the system is too high to start a new job.\n   The real system load average is only recomputed once a second.  However, a\n   very parallel make can easily start tens or even hundreds of jobs in a\n   second, which brings the system to its knees for a while until that first\n   batch of jobs clears out.\n\n   To avoid this we use a weighted algorithm to try to account for jobs which\n   have been started since the last second, and guess what the load average\n   would be now if it were computed.\n\n   This algorithm was provided by Thomas Riedl <thomas.riedl@siemens.com>,\n   who writes:\n\n!      calculate something load-oid and add to the observed sys.load,\n!      so that latter can catch up:\n!      - every job started increases jobctr;\n!      - every dying job decreases a positive jobctr;\n!      - the jobctr value gets zeroed every change of seconds,\n!        after its value*weight_b is stored into the 'backlog' value last_sec\n!      - weight_a times the sum of jobctr and last_sec gets\n!        added to the observed sys.load.\n!\n!      The two weights have been tried out on 24 and 48 proc. Sun Solaris-9\n!      machines, using a several-thousand-jobs-mix of cpp, cc, cxx and smallish\n!      sub-shelled commands (rm, echo, sed...) for tests.\n!      lowering the 'direct influence' factor weight_a (e.g. to 0.1)\n!      resulted in significant excession of the load limit, raising it\n!      (e.g. to 0.5) took bad to small, fast-executing jobs and didn't\n!      reach the limit in most test cases.\n!\n!      lowering the 'history influence' weight_b (e.g. to 0.1) resulted in\n!      exceeding the limit for longer-running stuff (compile jobs in\n!      the .5 to 1.5 sec. range),raising it (e.g. to 0.5) overrepresented\n!      small jobs' effects.\n\n */\n\n#define LOAD_WEIGHT_A           0.25\n#define LOAD_WEIGHT_B           0.25\n\nstatic int\nload_too_high (void)\n{\n#if defined(__MSDOS__) || defined(VMS) || defined(_AMIGA) || defined(__riscos__)\n  return 1;\n#else\n  static double last_sec;\n  static time_t last_now;\n  double load, guess;\n  time_t now;\n\n#ifdef WINDOWS32\n  /* sub_proc.c cannot wait for more than MAXIMUM_WAIT_OBJECTS children */\n  if (process_used_slots () >= MAXIMUM_WAIT_OBJECTS)\n    return 1;\n#endif\n\n  if (max_load_average < 0)\n    return 0;\n\n  /* Find the real system load average.  */\n  make_access ();\n  if (getloadavg (&load, 1) != 1)\n    {\n      static int lossage = -1;\n      /* Complain only once for the same error.  */\n      if (lossage == -1 || errno != lossage)\n\t{\n\t  if (errno == 0)\n\t    /* An errno value of zero means getloadavg is just unsupported.  */\n\t    error (NILF,\n                   _(\"cannot enforce load limits on this operating system\"));\n\t  else\n\t    perror_with_name (_(\"cannot enforce load limit: \"), \"getloadavg\");\n\t}\n      lossage = errno;\n      load = 0;\n    }\n  user_access ();\n\n  /* If we're in a new second zero the counter and correct the backlog\n     value.  Only keep the backlog for one extra second; after that it's 0.  */\n  now = time (NULL);\n  if (last_now < now)\n    {\n      if (last_now == now - 1)\n        last_sec = LOAD_WEIGHT_B * job_counter;\n      else\n        last_sec = 0.0;\n\n      job_counter = 0;\n      last_now = now;\n    }\n\n  /* Try to guess what the load would be right now.  */\n  guess = load + (LOAD_WEIGHT_A * (job_counter + last_sec));\n\n  DB (DB_JOBS, (\"Estimated system load = %f (actual = %f) (max requested = %f)\\n\",\n                guess, load, max_load_average));\n\n  return guess >= max_load_average;\n#endif\n}\n\n/* Start jobs that are waiting for the load to be lower.  */\n\nvoid\nstart_waiting_jobs (void)\n{\n  struct child *job;\n\n  if (waiting_jobs == 0)\n    return;\n\n  do\n    {\n      /* Check for recently deceased descendants.  */\n      reap_children (0, 0);\n\n      /* Take a job off the waiting list.  */\n      job = waiting_jobs;\n      waiting_jobs = job->next;\n\n      /* Try to start that job.  We break out of the loop as soon\n\t as start_waiting_job puts one back on the waiting list.  */\n    }\n  while (start_waiting_job (job) && waiting_jobs != 0);\n\n  return;\n}\n\f\n#ifndef WINDOWS32\n\n/* EMX: Start a child process. This function returns the new pid.  */\n# if defined __MSDOS__ || defined __EMX__\nint\nchild_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp)\n{\n  int pid;\n  /* stdin_fd == 0 means: nothing to do for stdin;\n     stdout_fd == 1 means: nothing to do for stdout */\n  int save_stdin = (stdin_fd != 0) ? dup (0) : 0;\n  int save_stdout = (stdout_fd != 1) ? dup (1): 1;\n\n  /* < 0 only if dup() failed */\n  if (save_stdin < 0)\n    fatal (NILF, _(\"no more file handles: could not duplicate stdin\\n\"));\n  if (save_stdout < 0)\n    fatal (NILF, _(\"no more file handles: could not duplicate stdout\\n\"));\n\n  /* Close unnecessary file handles for the child.  */\n  if (save_stdin != 0)\n    CLOSE_ON_EXEC (save_stdin);\n  if (save_stdout != 1)\n    CLOSE_ON_EXEC (save_stdout);\n\n  /* Connect the pipes to the child process.  */\n  if (stdin_fd != 0)\n    (void) dup2 (stdin_fd, 0);\n  if (stdout_fd != 1)\n    (void) dup2 (stdout_fd, 1);\n\n  /* stdin_fd and stdout_fd must be closed on exit because we are\n     still in the parent process */\n  if (stdin_fd != 0)\n    CLOSE_ON_EXEC (stdin_fd);\n  if (stdout_fd != 1)\n    CLOSE_ON_EXEC (stdout_fd);\n\n  /* Run the command.  */\n  pid = exec_command (argv, envp);\n\n  /* Restore stdout/stdin of the parent and close temporary FDs.  */\n  if (stdin_fd != 0)\n    {\n      if (dup2 (save_stdin, 0) != 0)\n        fatal (NILF, _(\"Could not restore stdin\\n\"));\n      else\n        close (save_stdin);\n    }\n\n  if (stdout_fd != 1)\n    {\n      if (dup2 (save_stdout, 1) != 1)\n        fatal (NILF, _(\"Could not restore stdout\\n\"));\n      else\n        close (save_stdout);\n    }\n\n  return pid;\n}\n\n#elif !defined (_AMIGA) && !defined (__MSDOS__) && !defined (VMS)\n\n/* UNIX:\n   Replace the current process with one executing the command in ARGV.\n   STDIN_FD and STDOUT_FD are used as the process's stdin and stdout; ENVP is\n   the environment of the new program.  This function does not return.  */\nvoid\nchild_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp)\n{\n  if (stdin_fd != 0)\n    (void) dup2 (stdin_fd, 0);\n  if (stdout_fd != 1)\n    (void) dup2 (stdout_fd, 1);\n  if (stdin_fd != 0)\n    (void) close (stdin_fd);\n  if (stdout_fd != 1)\n    (void) close (stdout_fd);\n\n  /* Run the command.  */\n  exec_command (argv, envp);\n}\n#endif /* !AMIGA && !__MSDOS__ && !VMS */\n#endif /* !WINDOWS32 */\n\f\n#ifndef _AMIGA\n/* Replace the current process with one running the command in ARGV,\n   with environment ENVP.  This function does not return.  */\n\n/* EMX: This function returns the pid of the child process.  */\n# ifdef __EMX__\nint\n# else\nvoid\n# endif\nexec_command (char **argv, char **envp)\n{\n#ifdef VMS\n  /* to work around a problem with signals and execve: ignore them */\n#ifdef SIGCHLD\n  signal (SIGCHLD,SIG_IGN);\n#endif\n  /* Run the program.  */\n  execve (argv[0], argv, envp);\n  perror_with_name (\"execve: \", argv[0]);\n  _exit (EXIT_FAILURE);\n#else\n#ifdef WINDOWS32\n  HANDLE hPID;\n  HANDLE hWaitPID;\n  int err = 0;\n  int exit_code = EXIT_FAILURE;\n\n  /* make sure CreateProcess() has Path it needs */\n  sync_Path_environment();\n\n  /* launch command */\n  hPID = process_easy(argv, envp);\n\n  /* make sure launch ok */\n  if (hPID == INVALID_HANDLE_VALUE)\n    {\n      int i;\n      fprintf(stderr,\n              _(\"process_easy() failed failed to launch process (e=%ld)\\n\"),\n              process_last_err(hPID));\n      for (i = 0; argv[i]; i++)\n          fprintf(stderr, \"%s \", argv[i]);\n      fprintf(stderr, _(\"\\nCounted %d args in failed launch\\n\"), i);\n      exit(EXIT_FAILURE);\n    }\n\n  /* wait and reap last child */\n  hWaitPID = process_wait_for_any();\n  while (hWaitPID)\n    {\n      /* was an error found on this process? */\n      err = process_last_err(hWaitPID);\n\n      /* get exit data */\n      exit_code = process_exit_code(hWaitPID);\n\n      if (err)\n          fprintf(stderr, \"make (e=%d, rc=%d): %s\",\n                  err, exit_code, map_windows32_error_to_string(err));\n\n      /* cleanup process */\n      process_cleanup(hWaitPID);\n\n      /* expect to find only last pid, warn about other pids reaped */\n      if (hWaitPID == hPID)\n          break;\n      else\n          fprintf(stderr,\n                  _(\"make reaped child pid %lld, still waiting for pid %lld\\n\"),\n                  (intptr_t)hWaitPID, (intptr_t)hPID);\n    }\n\n  /* return child's exit code as our exit code */\n  exit(exit_code);\n\n#else  /* !WINDOWS32 */\n\n# ifdef __EMX__\n  int pid;\n# endif\n\n  /* Be the user, permanently.  */\n  child_access ();\n\n# ifdef __EMX__\n\n  /* Run the program.  */\n  pid = spawnvpe (P_NOWAIT, argv[0], argv, envp);\n\n  if (pid >= 0)\n    return pid;\n\n  /* the file might have a strange shell extension */\n  if (errno == ENOENT)\n    errno = ENOEXEC;\n\n# else\n\n  /* Run the program.  */\n  environ = envp;\n  execvp (argv[0], argv);\n\n# endif /* !__EMX__ */\n\n  switch (errno)\n    {\n    case ENOENT:\n      error (NILF, _(\"%s: Command not found\"), argv[0]);\n      break;\n    case ENOEXEC:\n      {\n\t/* The file is not executable.  Try it as a shell script.  */\n\textern char *getenv ();\n\tchar *shell;\n\tchar **new_argv;\n\tint argc;\n        int i=1;\n\n# ifdef __EMX__\n        /* Do not use $SHELL from the environment */\n\tstruct variable *p = lookup_variable (\"SHELL\", 5);\n\tif (p)\n\t  shell = p->value;\n        else\n          shell = 0;\n# else\n\tshell = getenv (\"SHELL\");\n# endif\n\tif (shell == 0)\n\t  shell = default_shell;\n\n\targc = 1;\n\twhile (argv[argc] != 0)\n\t  ++argc;\n\n# ifdef __EMX__\n        if (!unixy_shell)\n          ++argc;\n# endif\n\n\tnew_argv = (char **) alloca ((1 + argc + 1) * sizeof (char *));\n\tnew_argv[0] = shell;\n\n# ifdef __EMX__\n        if (!unixy_shell)\n          {\n            new_argv[1] = \"/c\";\n            ++i;\n            --argc;\n          }\n# endif\n\n        new_argv[i] = argv[0];\n\twhile (argc > 0)\n\t  {\n\t    new_argv[i + argc] = argv[argc];\n\t    --argc;\n\t  }\n\n# ifdef __EMX__\n\tpid = spawnvpe (P_NOWAIT, shell, new_argv, envp);\n\tif (pid >= 0)\n          break;\n# else\n\texecvp (shell, new_argv);\n# endif\n\tif (errno == ENOENT)\n\t  error (NILF, _(\"%s: Shell program not found\"), shell);\n\telse\n\t  perror_with_name (\"execvp: \", shell);\n\tbreak;\n      }\n\n# ifdef __EMX__\n    case EINVAL:\n      /* this nasty error was driving me nuts :-( */\n      error (NILF, _(\"spawnvpe: environment space might be exhausted\"));\n      /* FALLTHROUGH */\n# endif\n\n    default:\n      perror_with_name (\"execvp: \", argv[0]);\n      break;\n    }\n\n# ifdef __EMX__\n  return pid;\n# else\n  _exit (127);\n# endif\n#endif /* !WINDOWS32 */\n#endif /* !VMS */\n}\n#else /* On Amiga */\nvoid exec_command (char **argv)\n{\n  MyExecute (argv);\n}\n\nvoid clean_tmp (void)\n{\n  DeleteFile (amiga_bname);\n}\n\n#endif /* On Amiga */\n\f\n#ifndef VMS\n/* Figure out the argument list necessary to run LINE as a command.  Try to\n   avoid using a shell.  This routine handles only ' quoting, and \" quoting\n   when no backslash, $ or ` characters are seen in the quotes.  Starting\n   quotes may be escaped with a backslash.  If any of the characters in\n   sh_chars[] is seen, or any of the builtin commands listed in sh_cmds[]\n   is the first word of a line, the shell is used.\n\n   If RESTP is not NULL, *RESTP is set to point to the first newline in LINE.\n   If *RESTP is NULL, newlines will be ignored.\n\n   SHELL is the shell to use, or nil to use the default shell.\n   IFS is the value of $IFS, or nil (meaning the default).  */\n\nstatic char **\nconstruct_command_argv_internal (char *line, char **restp, char *shell,\n                                 char *ifs, char **batch_filename_ptr)\n{\n#ifdef __MSDOS__\n  /* MSDOS supports both the stock DOS shell and ports of Unixy shells.\n     We call `system' for anything that requires ``slow'' processing,\n     because DOS shells are too dumb.  When $SHELL points to a real\n     (unix-style) shell, `system' just calls it to do everything.  When\n     $SHELL points to a DOS shell, `system' does most of the work\n     internally, calling the shell only for its internal commands.\n     However, it looks on the $PATH first, so you can e.g. have an\n     external command named `mkdir'.\n\n     Since we call `system', certain characters and commands below are\n     actually not specific to COMMAND.COM, but to the DJGPP implementation\n     of `system'.  In particular:\n\n       The shell wildcard characters are in DOS_CHARS because they will\n       not be expanded if we call the child via `spawnXX'.\n\n       The `;' is in DOS_CHARS, because our `system' knows how to run\n       multiple commands on a single line.\n\n       DOS_CHARS also include characters special to 4DOS/NDOS, so we\n       won't have to tell one from another and have one more set of\n       commands and special characters.  */\n  static char sh_chars_dos[] = \"*?[];|<>%^&()\";\n  static char *sh_cmds_dos[] = { \"break\", \"call\", \"cd\", \"chcp\", \"chdir\", \"cls\",\n\t\t\t\t \"copy\", \"ctty\", \"date\", \"del\", \"dir\", \"echo\",\n\t\t\t\t \"erase\", \"exit\", \"for\", \"goto\", \"if\", \"md\",\n\t\t\t\t \"mkdir\", \"path\", \"pause\", \"prompt\", \"rd\",\n\t\t\t\t \"rmdir\", \"rem\", \"ren\", \"rename\", \"set\",\n\t\t\t\t \"shift\", \"time\", \"type\", \"ver\", \"verify\",\n\t\t\t\t \"vol\", \":\", 0 };\n\n  static char sh_chars_sh[]  = \"#;\\\"*?[]&|<>(){}$`^\";\n  static char *sh_cmds_sh[]  = { \"cd\", \"echo\", \"eval\", \"exec\", \"exit\", \"login\",\n\t\t\t\t \"logout\", \"set\", \"umask\", \"wait\", \"while\",\n\t\t\t\t \"for\", \"case\", \"if\", \":\", \".\", \"break\",\n\t\t\t\t \"continue\", \"export\", \"read\", \"readonly\",\n\t\t\t\t \"shift\", \"times\", \"trap\", \"switch\", \"unset\",\n                                 0 };\n\n  char *sh_chars;\n  char **sh_cmds;\n#elif defined (__EMX__)\n  static char sh_chars_dos[] = \"*?[];|<>%^&()\";\n  static char *sh_cmds_dos[] = { \"break\", \"call\", \"cd\", \"chcp\", \"chdir\", \"cls\",\n\t\t\t\t \"copy\", \"ctty\", \"date\", \"del\", \"dir\", \"echo\",\n\t\t\t\t \"erase\", \"exit\", \"for\", \"goto\", \"if\", \"md\",\n\t\t\t\t \"mkdir\", \"path\", \"pause\", \"prompt\", \"rd\",\n\t\t\t\t \"rmdir\", \"rem\", \"ren\", \"rename\", \"set\",\n\t\t\t\t \"shift\", \"time\", \"type\", \"ver\", \"verify\",\n\t\t\t\t \"vol\", \":\", 0 };\n\n  static char sh_chars_os2[] = \"*?[];|<>%^()\\\"'&\";\n  static char *sh_cmds_os2[] = { \"call\", \"cd\", \"chcp\", \"chdir\", \"cls\", \"copy\",\n\t\t\t     \"date\", \"del\", \"detach\", \"dir\", \"echo\",\n\t\t\t     \"endlocal\", \"erase\", \"exit\", \"for\", \"goto\", \"if\",\n\t\t\t     \"keys\", \"md\", \"mkdir\", \"move\", \"path\", \"pause\",\n\t\t\t     \"prompt\", \"rd\", \"rem\", \"ren\", \"rename\", \"rmdir\",\n\t\t\t     \"set\", \"setlocal\", \"shift\", \"start\", \"time\",\n                             \"type\", \"ver\", \"verify\", \"vol\", \":\", 0 };\n\n  static char sh_chars_sh[]  = \"#;\\\"*?[]&|<>(){}$`^~'\";\n  static char *sh_cmds_sh[]  = { \"echo\", \"cd\", \"eval\", \"exec\", \"exit\", \"login\",\n\t\t\t\t \"logout\", \"set\", \"umask\", \"wait\", \"while\",\n\t\t\t\t \"for\", \"case\", \"if\", \":\", \".\", \"break\",\n\t\t\t\t \"continue\", \"export\", \"read\", \"readonly\",\n\t\t\t\t \"shift\", \"times\", \"trap\", \"switch\", \"unset\",\n                                 0 };\n  char *sh_chars;\n  char **sh_cmds;\n\n#elif defined (_AMIGA)\n  static char sh_chars[] = \"#;\\\"|<>()?*$`\";\n  static char *sh_cmds[] = { \"cd\", \"eval\", \"if\", \"delete\", \"echo\", \"copy\",\n\t\t\t     \"rename\", \"set\", \"setenv\", \"date\", \"makedir\",\n\t\t\t     \"skip\", \"else\", \"endif\", \"path\", \"prompt\",\n\t\t\t     \"unset\", \"unsetenv\", \"version\",\n\t\t\t     0 };\n#elif defined (WINDOWS32)\n  static char sh_chars_dos[] = \"\\\"|&<>\";\n  static char *sh_cmds_dos[] = { \"break\", \"call\", \"cd\", \"chcp\", \"chdir\", \"cls\",\n\t\t\t     \"copy\", \"ctty\", \"date\", \"del\", \"dir\", \"echo\",\n\t\t\t     \"erase\", \"exit\", \"for\", \"goto\", \"if\", \"if\", \"md\",\n\t\t\t     \"mkdir\", \"path\", \"pause\", \"prompt\", \"rd\", \"rem\",\n                             \"ren\", \"rename\", \"rmdir\", \"set\", \"shift\", \"time\",\n                             \"type\", \"ver\", \"verify\", \"vol\", \":\", 0 };\n  static char sh_chars_sh[] = \"#;\\\"*?[]&|<>(){}$`^\";\n  static char *sh_cmds_sh[] = { \"cd\", \"eval\", \"exec\", \"exit\", \"login\",\n\t\t\t     \"logout\", \"set\", \"umask\", \"wait\", \"while\", \"for\",\n\t\t\t     \"case\", \"if\", \":\", \".\", \"break\", \"continue\",\n\t\t\t     \"export\", \"read\", \"readonly\", \"shift\", \"times\",\n\t\t\t     \"trap\", \"switch\", \"test\",\n#ifdef BATCH_MODE_ONLY_SHELL\n                 \"echo\",\n#endif\n                 0 };\n  char*  sh_chars;\n  char** sh_cmds;\n#elif defined(__riscos__)\n  static char sh_chars[] = \"\";\n  static char *sh_cmds[] = { 0 };\n#else  /* must be UNIX-ish */\n  static char sh_chars[] = \"#;\\\"*?[]&|<>(){}$`^~!\";\n  static char *sh_cmds[] = { \".\", \":\", \"break\", \"case\", \"cd\", \"continue\",\n                             \"eval\", \"exec\", \"exit\", \"export\", \"for\", \"if\",\n                             \"login\", \"logout\", \"read\", \"readonly\", \"set\",\n                             \"shift\", \"switch\", \"test\", \"times\", \"trap\",\n                             \"umask\", \"wait\", \"while\", 0 };\n#endif\n  register int i;\n  register char *p;\n  register char *ap;\n  char *end;\n  int instring, word_has_equals, seen_nonequals, last_argument_was_empty;\n  char **new_argv = 0;\n  char *argstr = 0;\n#ifdef WINDOWS32\n  int slow_flag = 0;\n\n  if (!unixy_shell) {\n    sh_cmds = sh_cmds_dos;\n    sh_chars = sh_chars_dos;\n  } else {\n    sh_cmds = sh_cmds_sh;\n    sh_chars = sh_chars_sh;\n  }\n#endif /* WINDOWS32 */\n\n  if (restp != NULL)\n    *restp = NULL;\n\n  /* Make sure not to bother processing an empty line.  */\n  while (isblank ((unsigned char)*line))\n    ++line;\n  if (*line == '\\0')\n    return 0;\n\n  /* See if it is safe to parse commands internally.  */\n  if (shell == 0)\n    shell = default_shell;\n#ifdef WINDOWS32\n  else if (strcmp (shell, default_shell))\n  {\n    char *s1 = _fullpath(NULL, shell, 0);\n    char *s2 = _fullpath(NULL, default_shell, 0);\n\n    slow_flag = strcmp((s1 ? s1 : \"\"), (s2 ? s2 : \"\"));\n\n    if (s1)\n      free (s1);\n    if (s2)\n      free (s2);\n  }\n  if (slow_flag)\n    goto slow;\n#else  /* not WINDOWS32 */\n#if defined (__MSDOS__) || defined (__EMX__)\n  else if (stricmp (shell, default_shell))\n    {\n      extern int _is_unixy_shell (const char *_path);\n\n      DB (DB_BASIC, (_(\"$SHELL changed (was `%s', now `%s')\\n\"),\n                     default_shell, shell));\n      unixy_shell = _is_unixy_shell (shell);\n      /* we must allocate a copy of shell: construct_command_argv() will free\n       * shell after this function returns.  */\n      default_shell = xstrdup (shell);\n    }\n  if (unixy_shell)\n    {\n      sh_chars = sh_chars_sh;\n      sh_cmds  = sh_cmds_sh;\n    }\n  else\n    {\n      sh_chars = sh_chars_dos;\n      sh_cmds  = sh_cmds_dos;\n# ifdef __EMX__\n      if (_osmode == OS2_MODE)\n        {\n          sh_chars = sh_chars_os2;\n          sh_cmds = sh_cmds_os2;\n        }\n# endif\n    }\n#else  /* !__MSDOS__ */\n  else if (strcmp (shell, default_shell))\n    goto slow;\n#endif /* !__MSDOS__ && !__EMX__ */\n#endif /* not WINDOWS32 */\n\n  if (ifs != 0)\n    for (ap = ifs; *ap != '\\0'; ++ap)\n      if (*ap != ' ' && *ap != '\\t' && *ap != '\\n')\n\tgoto slow;\n\n  i = strlen (line) + 1;\n\n  /* More than 1 arg per character is impossible.  */\n  new_argv = (char **) xmalloc (i * sizeof (char *));\n\n  /* All the args can fit in a buffer as big as LINE is.   */\n  ap = new_argv[0] = argstr = (char *) xmalloc (i);\n  end = ap + i;\n\n  /* I is how many complete arguments have been found.  */\n  i = 0;\n  instring = word_has_equals = seen_nonequals = last_argument_was_empty = 0;\n  for (p = line; *p != '\\0'; ++p)\n    {\n      assert (ap <= end);\n\n      if (instring)\n\t{\n\t  /* Inside a string, just copy any char except a closing quote\n\t     or a backslash-newline combination.  */\n\t  if (*p == instring)\n\t    {\n\t      instring = 0;\n\t      if (ap == new_argv[0] || *(ap-1) == '\\0')\n\t\tlast_argument_was_empty = 1;\n\t    }\n\t  else if (*p == '\\\\' && p[1] == '\\n')\n            {\n              /* Backslash-newline is handled differently depending on what\n                 kind of string we're in: inside single-quoted strings you\n                 keep them; in double-quoted strings they disappear.\n\t         For DOS/Windows/OS2, if we don't have a POSIX shell,\n\t\t we keep the pre-POSIX behavior of removing the\n\t\t backslash-newline.  */\n              if (instring == '\"'\n#if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32)\n\t\t  || !unixy_shell\n#endif\n\t\t  )\n                ++p;\n              else\n                {\n                  *(ap++) = *(p++);\n                  *(ap++) = *p;\n                }\n              /* If there's a TAB here, skip it.  */\n              if (p[1] == '\\t')\n                ++p;\n            }\n\t  else if (*p == '\\n' && restp != NULL)\n\t    {\n\t      /* End of the command line.  */\n\t      *restp = p;\n\t      goto end_of_line;\n\t    }\n\t  /* Backslash, $, and ` are special inside double quotes.\n\t     If we see any of those, punt.\n\t     But on MSDOS, if we use COMMAND.COM, double and single\n\t     quotes have the same effect.  */\n\t  else if (instring == '\"' && strchr (\"\\\\$`\", *p) != 0 && unixy_shell)\n\t    goto slow;\n\t  else\n\t    *ap++ = *p;\n\t}\n      else if (strchr (sh_chars, *p) != 0)\n\t/* Not inside a string, but it's a special char.  */\n\tgoto slow;\n#ifdef  __MSDOS__\n      else if (*p == '.' && p[1] == '.' && p[2] == '.' && p[3] != '.')\n\t/* `...' is a wildcard in DJGPP.  */\n\tgoto slow;\n#endif\n      else\n\t/* Not a special char.  */\n\tswitch (*p)\n\t  {\n\t  case '=':\n\t    /* Equals is a special character in leading words before the\n\t       first word with no equals sign in it.  This is not the case\n\t       with sh -k, but we never get here when using nonstandard\n\t       shell flags.  */\n\t    if (! seen_nonequals && unixy_shell)\n\t      goto slow;\n\t    word_has_equals = 1;\n\t    *ap++ = '=';\n\t    break;\n\n\t  case '\\\\':\n\t    /* Backslash-newline has special case handling, ref POSIX.\n               We're in the fastpath, so emulate what the shell would do.  */\n\t    if (p[1] == '\\n')\n\t      {\n\t\t/* Throw out the backslash and newline.  */\n                ++p;\n\n\t\t/* If there is a tab after a backslash-newline, remove it.  */\n\t\tif (p[1] == '\\t')\n                  ++p;\n\n                /* If there's nothing in this argument yet, skip any\n                   whitespace before the start of the next word.  */\n                if (ap == new_argv[i])\n                  p = next_token (p + 1) - 1;\n\t      }\n\t    else if (p[1] != '\\0')\n              {\n#ifdef HAVE_DOS_PATHS\n                /* Only remove backslashes before characters special to Unixy\n                   shells.  All other backslashes are copied verbatim, since\n                   they are probably DOS-style directory separators.  This\n                   still leaves a small window for problems, but at least it\n                   should work for the vast majority of naive users.  */\n\n#ifdef __MSDOS__\n                /* A dot is only special as part of the \"...\"\n                   wildcard.  */\n                if (strneq (p + 1, \".\\\\.\\\\.\", 5))\n                  {\n                    *ap++ = '.';\n                    *ap++ = '.';\n                    p += 4;\n                  }\n                else\n#endif\n                  if (p[1] != '\\\\' && p[1] != '\\''\n                      && !isspace ((unsigned char)p[1])\n                      && strchr (sh_chars_sh, p[1]) == 0)\n                    /* back up one notch, to copy the backslash */\n                    --p;\n#endif  /* HAVE_DOS_PATHS */\n\n                /* Copy and skip the following char.  */\n                *ap++ = *++p;\n              }\n\t    break;\n\n\t  case '\\'':\n\t  case '\"':\n\t    instring = *p;\n\t    break;\n\n\t  case '\\n':\n\t    if (restp != NULL)\n\t      {\n\t\t/* End of the command line.  */\n\t\t*restp = p;\n\t\tgoto end_of_line;\n\t      }\n\t    else\n\t      /* Newlines are not special.  */\n\t      *ap++ = '\\n';\n\t    break;\n\n\t  case ' ':\n\t  case '\\t':\n\t    /* We have the end of an argument.\n\t       Terminate the text of the argument.  */\n\t    *ap++ = '\\0';\n\t    new_argv[++i] = ap;\n\t    last_argument_was_empty = 0;\n\n\t    /* Update SEEN_NONEQUALS, which tells us if every word\n\t       heretofore has contained an `='.  */\n\t    seen_nonequals |= ! word_has_equals;\n\t    if (word_has_equals && ! seen_nonequals)\n\t      /* An `=' in a word before the first\n\t\t word without one is magical.  */\n\t      goto slow;\n\t    word_has_equals = 0; /* Prepare for the next word.  */\n\n\t    /* If this argument is the command name,\n\t       see if it is a built-in shell command.\n\t       If so, have the shell handle it.  */\n\t    if (i == 1)\n\t      {\n\t\tregister int j;\n\t\tfor (j = 0; sh_cmds[j] != 0; ++j)\n                  {\n                    if (streq (sh_cmds[j], new_argv[0]))\n                      goto slow;\n# ifdef __EMX__\n                    /* Non-Unix shells are case insensitive.  */\n                    if (!unixy_shell\n                        && strcasecmp (sh_cmds[j], new_argv[0]) == 0)\n                      goto slow;\n# endif\n                  }\n\t      }\n\n\t    /* Ignore multiple whitespace chars.  */\n\t    p = next_token (p) - 1;\n\t    break;\n\n\t  default:\n\t    *ap++ = *p;\n\t    break;\n\t  }\n    }\n end_of_line:\n\n  if (instring)\n    /* Let the shell deal with an unterminated quote.  */\n    goto slow;\n\n  /* Terminate the last argument and the argument list.  */\n\n  *ap = '\\0';\n  if (new_argv[i][0] != '\\0' || last_argument_was_empty)\n    ++i;\n  new_argv[i] = 0;\n\n  if (i == 1)\n    {\n      register int j;\n      for (j = 0; sh_cmds[j] != 0; ++j)\n\tif (streq (sh_cmds[j], new_argv[0]))\n\t  goto slow;\n    }\n\n  if (new_argv[0] == 0)\n    {\n      /* Line was empty.  */\n      free (argstr);\n      free ((char *)new_argv);\n      return 0;\n    }\n\n  return new_argv;\n\n slow:;\n  /* We must use the shell.  */\n\n  if (new_argv != 0)\n    {\n      /* Free the old argument list we were working on.  */\n      free (argstr);\n      free ((char *)new_argv);\n    }\n\n#ifdef __MSDOS__\n  execute_by_shell = 1;\t/* actually, call `system' if shell isn't unixy */\n#endif\n\n#ifdef _AMIGA\n  {\n    char *ptr;\n    char *buffer;\n    char *dptr;\n\n    buffer = (char *)xmalloc (strlen (line)+1);\n\n    ptr = line;\n    for (dptr=buffer; *ptr; )\n    {\n      if (*ptr == '\\\\' && ptr[1] == '\\n')\n\tptr += 2;\n      else if (*ptr == '@') /* Kludge: multiline commands */\n      {\n\tptr += 2;\n\t*dptr++ = '\\n';\n      }\n      else\n\t*dptr++ = *ptr++;\n    }\n    *dptr = 0;\n\n    new_argv = (char **) xmalloc (2 * sizeof (char *));\n    new_argv[0] = buffer;\n    new_argv[1] = 0;\n  }\n#else\t/* Not Amiga  */\n#ifdef WINDOWS32\n  /*\n   * Not eating this whitespace caused things like\n   *\n   *    sh -c \"\\n\"\n   *\n   * which gave the shell fits. I think we have to eat\n   * whitespace here, but this code should be considered\n   * suspicious if things start failing....\n   */\n\n  /* Make sure not to bother processing an empty line.  */\n  while (isspace ((unsigned char)*line))\n    ++line;\n  if (*line == '\\0')\n    return 0;\n#endif /* WINDOWS32 */\n  {\n    /* SHELL may be a multi-word command.  Construct a command line\n       \"SHELL -c LINE\", with all special chars in LINE escaped.\n       Then recurse, expanding this command line to get the final\n       argument list.  */\n\n    unsigned int shell_len = strlen (shell);\n#ifndef VMS\n    static char minus_c[] = \" -c \";\n#else\n    static char minus_c[] = \"\";\n#endif\n    unsigned int line_len = strlen (line);\n\n    char *new_line = (char *) alloca (shell_len + (sizeof (minus_c) - 1)\n\t\t\t\t      + (line_len * 2) + 1);\n    char *command_ptr = NULL; /* used for batch_mode_shell mode */\n\n# ifdef __EMX__ /* is this necessary? */\n    if (!unixy_shell)\n      minus_c[1] = '/'; /* \" /c \" */\n# endif\n\n    ap = new_line;\n    bcopy (shell, ap, shell_len);\n    ap += shell_len;\n    bcopy (minus_c, ap, sizeof (minus_c) - 1);\n    ap += sizeof (minus_c) - 1;\n    command_ptr = ap;\n    for (p = line; *p != '\\0'; ++p)\n      {\n\tif (restp != NULL && *p == '\\n')\n\t  {\n\t    *restp = p;\n\t    break;\n\t  }\n\telse if (*p == '\\\\' && p[1] == '\\n')\n\t  {\n\t    /* POSIX says we keep the backslash-newline, but throw out\n               the next char if it's a TAB.  If we don't have a POSIX\n               shell on DOS/Windows/OS2, mimic the pre-POSIX behavior\n               and remove the backslash/newline.  */\n#if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32)\n# define PRESERVE_BSNL  unixy_shell\n#else\n# define PRESERVE_BSNL  1\n#endif\n\t    if (PRESERVE_BSNL)\n\t      {\n\t\t*(ap++) = '\\\\';\n\t\t*(ap++) = '\\\\';\n\t\t*(ap++) = '\\n';\n\t      }\n\n\t    ++p;\n\t    if (p[1] == '\\t')\n\t      ++p;\n\n\t    continue;\n\t  }\n\n        /* DOS shells don't know about backslash-escaping.  */\n\tif (unixy_shell && !batch_mode_shell &&\n            (*p == '\\\\' || *p == '\\'' || *p == '\"'\n             || isspace ((unsigned char)*p)\n             || strchr (sh_chars, *p) != 0))\n\t  *ap++ = '\\\\';\n#ifdef __MSDOS__\n        else if (unixy_shell && strneq (p, \"...\", 3))\n          {\n            /* The case of `...' wildcard again.  */\n            strcpy (ap, \"\\\\.\\\\.\\\\\");\n            ap += 5;\n            p  += 2;\n          }\n#endif\n\t*ap++ = *p;\n      }\n    if (ap == new_line + shell_len + sizeof (minus_c) - 1)\n      /* Line was empty.  */\n      return 0;\n    *ap = '\\0';\n\n#ifdef WINDOWS32\n    /* Some shells do not work well when invoked as 'sh -c xxx' to run a\n       command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems).  In these\n       cases, run commands via a script file.  */\n    if (just_print_flag) {\n      /* Need to allocate new_argv, although it's unused, because\n        start_job_command will want to free it and its 0'th element.  */\n      new_argv = (char **) xmalloc(2 * sizeof (char *));\n      new_argv[0] = xstrdup (\"\");\n      new_argv[1] = NULL;\n    } else if ((no_default_sh_exe || batch_mode_shell) && batch_filename_ptr) {\n      int temp_fd;\n      FILE* batch = NULL;\n      int id = GetCurrentProcessId();\n      PATH_VAR(fbuf);\n\n      /* create a file name */\n      sprintf(fbuf, \"make%d\", id);\n      *batch_filename_ptr = create_batch_file (fbuf, unixy_shell, &temp_fd);\n\n      DB (DB_JOBS, (_(\"Creating temporary batch file %s\\n\"),\n                    *batch_filename_ptr));\n\n      /* Create a FILE object for the batch file, and write to it the\n\t commands to be executed.  Put the batch file in TEXT mode.  */\n      _setmode (temp_fd, _O_TEXT);\n      batch = _fdopen (temp_fd, \"wt\");\n      if (!unixy_shell)\n        fputs (\"@echo off\\n\", batch);\n      fputs (command_ptr, batch);\n      fputc ('\\n', batch);\n      fclose (batch);\n\n      /* create argv */\n      new_argv = (char **) xmalloc(3 * sizeof (char *));\n      if (unixy_shell) {\n        new_argv[0] = xstrdup (shell);\n        new_argv[1] = *batch_filename_ptr; /* only argv[0] gets freed later */\n      } else {\n        new_argv[0] = xstrdup (*batch_filename_ptr);\n        new_argv[1] = NULL;\n      }\n      new_argv[2] = NULL;\n    } else\n#endif /* WINDOWS32 */\n    if (unixy_shell)\n      new_argv = construct_command_argv_internal (new_line, (char **) NULL,\n                                                  (char *) 0, (char *) 0,\n                                                  (char **) 0);\n#ifdef __EMX__\n    else if (!unixy_shell)\n      {\n\t/* new_line is local, must not be freed therefore\n           We use line here instead of new_line because we run the shell\n           manually.  */\n        size_t line_len = strlen (line);\n        char *p = new_line;\n        char *q = new_line;\n        memcpy (new_line, line, line_len + 1);\n        /* replace all backslash-newline combination and also following tabs */\n        while (*q != '\\0')\n          {\n            if (q[0] == '\\\\' && q[1] == '\\n')\n              {\n                q += 2; /* remove '\\\\' and '\\n' */\n                if (q[0] == '\\t')\n                  q++; /* remove 1st tab in the next line */\n              }\n            else\n              *p++ = *q++;\n          }\n        *p = '\\0';\n\n# ifndef NO_CMD_DEFAULT\n        if (strnicmp (new_line, \"echo\", 4) == 0\n            && (new_line[4] == ' ' || new_line[4] == '\\t'))\n          {\n            /* the builtin echo command: handle it separately */\n            size_t echo_len = line_len - 5;\n            char *echo_line = new_line + 5;\n\n            /* special case: echo 'x=\"y\"'\n               cmd works this way: a string is printed as is, i.e., no quotes\n               are removed. But autoconf uses a command like echo 'x=\"y\"' to\n               determine whether make works. autoconf expects the output x=\"y\"\n               so we will do exactly that.\n               Note: if we do not allow cmd to be the default shell\n               we do not need this kind of voodoo */\n            if (echo_line[0] == '\\''\n                && echo_line[echo_len - 1] == '\\''\n                && strncmp (echo_line + 1, \"ac_maketemp=\",\n                            strlen (\"ac_maketemp=\")) == 0)\n              {\n                /* remove the enclosing quotes */\n                memmove (echo_line, echo_line + 1, echo_len - 2);\n                echo_line[echo_len - 2] = '\\0';\n              }\n          }\n# endif\n\n        {\n          /* Let the shell decide what to do. Put the command line into the\n             2nd command line argument and hope for the best ;-)  */\n          size_t sh_len = strlen (shell);\n\n          /* exactly 3 arguments + NULL */\n          new_argv = (char **) xmalloc (4 * sizeof (char *));\n          /* Exactly strlen(shell) + strlen(\"/c\") + strlen(line) + 3 times\n             the trailing '\\0' */\n          new_argv[0] = (char *) malloc (sh_len + line_len + 5);\n          memcpy (new_argv[0], shell, sh_len + 1);\n          new_argv[1] = new_argv[0] + sh_len + 1;\n          memcpy (new_argv[1], \"/c\", 3);\n          new_argv[2] = new_argv[1] + 3;\n          memcpy (new_argv[2], new_line, line_len + 1);\n          new_argv[3] = NULL;\n        }\n      }\n#elif defined(__MSDOS__)\n    else\n      {\n        /* With MSDOS shells, we must construct the command line here\n           instead of recursively calling ourselves, because we\n           cannot backslash-escape the special characters (see above).  */\n        new_argv = (char **) xmalloc (sizeof (char *));\n        line_len = strlen (new_line) - shell_len - sizeof (minus_c) + 1;\n        new_argv[0] = xmalloc (line_len + 1);\n        strncpy (new_argv[0],\n                 new_line + shell_len + sizeof (minus_c) - 1, line_len);\n        new_argv[0][line_len] = '\\0';\n      }\n#else\n    else\n      fatal (NILF, _(\"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"),\n            __FILE__, __LINE__);\n#endif\n  }\n#endif\t/* ! AMIGA */\n\n  return new_argv;\n}\n#endif /* !VMS */\n\n/* Figure out the argument list necessary to run LINE as a command.  Try to\n   avoid using a shell.  This routine handles only ' quoting, and \" quoting\n   when no backslash, $ or ` characters are seen in the quotes.  Starting\n   quotes may be escaped with a backslash.  If any of the characters in\n   sh_chars[] is seen, or any of the builtin commands listed in sh_cmds[]\n   is the first word of a line, the shell is used.\n\n   If RESTP is not NULL, *RESTP is set to point to the first newline in LINE.\n   If *RESTP is NULL, newlines will be ignored.\n\n   FILE is the target whose commands these are.  It is used for\n   variable expansion for $(SHELL) and $(IFS).  */\n\nchar **\nconstruct_command_argv (char *line, char **restp, struct file *file,\n                        char **batch_filename_ptr)\n{\n  char *shell, *ifs;\n  char **argv;\n\n#ifdef VMS\n  char *cptr;\n  int argc;\n\n  argc = 0;\n  cptr = line;\n  for (;;)\n    {\n      while ((*cptr != 0)\n\t     && (isspace ((unsigned char)*cptr)))\n\tcptr++;\n      if (*cptr == 0)\n\tbreak;\n      while ((*cptr != 0)\n\t     && (!isspace((unsigned char)*cptr)))\n\tcptr++;\n      argc++;\n    }\n\n  argv = (char **)malloc (argc * sizeof (char *));\n  if (argv == 0)\n    abort ();\n\n  cptr = line;\n  argc = 0;\n  for (;;)\n    {\n      while ((*cptr != 0)\n\t     && (isspace ((unsigned char)*cptr)))\n\tcptr++;\n      if (*cptr == 0)\n\tbreak;\n      DB (DB_JOBS, (\"argv[%d] = [%s]\\n\", argc, cptr));\n      argv[argc++] = cptr;\n      while ((*cptr != 0)\n\t     && (!isspace((unsigned char)*cptr)))\n\tcptr++;\n      if (*cptr != 0)\n\t*cptr++ = 0;\n    }\n#else\n  {\n    /* Turn off --warn-undefined-variables while we expand SHELL and IFS.  */\n    int save = warn_undefined_variables_flag;\n    warn_undefined_variables_flag = 0;\n\n    shell = allocated_variable_expand_for_file (\"$(SHELL)\", file);\n#ifdef WINDOWS32\n    /*\n     * Convert to forward slashes so that construct_command_argv_internal()\n     * is not confused.\n     */\n    if (shell) {\n      char *p = w32ify (shell, 0);\n      strcpy (shell, p);\n    }\n#endif\n#ifdef __EMX__\n    {\n      static const char *unixroot = NULL;\n      static const char *last_shell = \"\";\n      static int init = 0;\n      if (init == 0)\n\t{\n\t  unixroot = getenv (\"UNIXROOT\");\n\t  /* unixroot must be NULL or not empty */\n\t  if (unixroot && unixroot[0] == '\\0') unixroot = NULL;\n\t  init = 1;\n\t}\n\n      /* if we have an unixroot drive and if shell is not default_shell\n         (which means it's either cmd.exe or the test has already been\n         performed) and if shell is an absolute path without drive letter,\n         try whether it exists e.g.: if \"/bin/sh\" does not exist use\n         \"$UNIXROOT/bin/sh\" instead.  */\n      if (unixroot && shell && strcmp (shell, last_shell) != 0\n\t  && (shell[0] == '/' || shell[0] == '\\\\'))\n\t{\n\t  /* trying a new shell, check whether it exists */\n\t  size_t size = strlen (shell);\n\t  char *buf = xmalloc (size + 7);\n\t  memcpy (buf, shell, size);\n\t  memcpy (buf + size, \".exe\", 5); /* including the trailing '\\0' */\n          if (access (shell, F_OK) != 0 && access (buf, F_OK) != 0)\n\t    {\n\t      /* try the same for the unixroot drive */\n\t      memmove (buf + 2, buf, size + 5);\n\t      buf[0] = unixroot[0];\n\t      buf[1] = unixroot[1];\n\t      if (access (buf, F_OK) == 0)\n\t\t/* we have found a shell! */\n\t\t/* free(shell); */\n\t\tshell = buf;\n\t      else\n\t\tfree (buf);\n\t    }\n\t  else\n            free (buf);\n\t}\n    }\n#endif /* __EMX__ */\n\n    ifs = allocated_variable_expand_for_file (\"$(IFS)\", file);\n\n    warn_undefined_variables_flag = save;\n  }\n\n  argv = construct_command_argv_internal (line, restp, shell, ifs, batch_filename_ptr);\n\n  free (shell);\n  free (ifs);\n#endif /* !VMS */\n  return argv;\n}\n\f\n#if !defined(HAVE_DUP2) && !defined(_AMIGA)\nint\ndup2 (int old, int new)\n{\n  int fd;\n\n  (void) close (new);\n  fd = dup (old);\n  if (fd != new)\n    {\n      (void) close (fd);\n      errno = EMFILE;\n      return -1;\n    }\n\n  return fd;\n}\n#endif /* !HAPE_DUP2 && !_AMIGA */\n\n/* On VMS systems, include special VMS functions.  */\n\n#ifdef VMS\n#include \"vmsjobs.c\"\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/job.h",
    "content": "/* Definitions for managing subprocesses in GNU Make.\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef SEEN_JOB_H\n#define SEEN_JOB_H\n\n#ifdef HAVE_FCNTL_H\n# include <fcntl.h>\n#else\n# include <sys/file.h>\n#endif\n\n/* How to set close-on-exec for a file descriptor.  */\n\n#if !defined F_SETFD\n# define CLOSE_ON_EXEC(_d)\n#else\n# ifndef FD_CLOEXEC\n#  define FD_CLOEXEC 1\n# endif\n# define CLOSE_ON_EXEC(_d) (void) fcntl ((_d), F_SETFD, FD_CLOEXEC)\n#endif\n\n/* Structure describing a running or dead child process.  */\n\nstruct child\n  {\n    struct child *next;\t\t/* Link in the chain.  */\n\n    struct file *file;\t\t/* File being remade.  */\n\n    char **environment;\t\t/* Environment for commands.  */\n\n    char **command_lines;\t/* Array of variable-expanded cmd lines.  */\n    unsigned int command_line;\t/* Index into above.  */\n    char *command_ptr;\t\t/* Ptr into command_lines[command_line].  */\n\n    intptr_t pid;\t\t/* Child process's ID number.  */\n#ifdef VMS\n    int efn;\t\t\t/* Completion event flag number */\n    int cstatus;\t\t/* Completion status */\n#endif\n    char *sh_batch_file;        /* Script file for shell commands */\n    unsigned int remote:1;\t/* Nonzero if executing remotely.  */\n\n    unsigned int noerror:1;\t/* Nonzero if commands contained a `-'.  */\n\n    unsigned int good_stdin:1;\t/* Nonzero if this child has a good stdin.  */\n    unsigned int deleted:1;\t/* Nonzero if targets have been deleted.  */\n    unsigned int dontcare:1;    /* Saved dontcare flag.  */\n  };\n\nextern struct child *children;\n\nextern void new_job PARAMS ((struct file *file));\nextern void reap_children PARAMS ((int block, int err));\nextern void start_waiting_jobs PARAMS ((void));\n\nextern char **construct_command_argv PARAMS ((char *line, char **restp, struct file *file, char** batch_file));\n#ifdef VMS\nextern int child_execute_job PARAMS ((char *argv, struct child *child));\n#elif defined(__EMX__)\nextern int child_execute_job PARAMS ((int stdin_fd, int stdout_fd, char **argv, char **envp));\n#else\nextern void child_execute_job PARAMS ((int stdin_fd, int stdout_fd, char **argv, char **envp));\n#endif\n#ifdef _AMIGA\nextern void exec_command PARAMS ((char **argv));\n#elif defined(__EMX__)\nextern int exec_command PARAMS ((char **argv, char **envp));\n#else\nextern void exec_command PARAMS ((char **argv, char **envp));\n#endif\n\nextern unsigned int job_slots_used;\n\nextern void block_sigs PARAMS ((void));\n#ifdef POSIX\nextern void unblock_sigs PARAMS ((void));\n#else\n#ifdef\tHAVE_SIGSETMASK\nextern int fatal_signal_mask;\n#define\tunblock_sigs()\tsigsetmask (0)\n#else\n#define\tunblock_sigs()\n#endif\n#endif\n\nextern unsigned int jobserver_tokens;\n\n#endif /* SEEN_JOB_H */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/main.c",
    "content": "/* Argument parsing and main program of GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"variable.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"rule.h\"\n#include \"debug.h\"\n#include \"getopt.h\"\n\n#include <assert.h>\n#ifdef _AMIGA\n# include <dos/dos.h>\n# include <proto/dos.h>\n#endif\n#ifdef WINDOWS32\n#include <windows.h>\n#include <io.h>\n#include \"pathstuff.h\"\n#endif\n#ifdef __EMX__\n# include <sys/types.h>\n# include <sys/wait.h>\n#endif\n#ifdef HAVE_FCNTL_H\n# include <fcntl.h>\n#endif\n\n#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)\n# define SET_STACK_SIZE\n#endif\n\n#ifdef SET_STACK_SIZE\n# include <sys/resource.h>\n#endif\n\n#ifdef _AMIGA\nint __stack = 20000; /* Make sure we have 20K of stack space */\n#endif\n\nextern void init_dir PARAMS ((void));\nextern void remote_setup PARAMS ((void));\nextern void remote_cleanup PARAMS ((void));\nextern RETSIGTYPE fatal_error_signal PARAMS ((int sig));\n\nextern void print_variable_data_base PARAMS ((void));\nextern void print_dir_data_base PARAMS ((void));\nextern void print_rule_data_base PARAMS ((void));\nextern void print_file_data_base PARAMS ((void));\nextern void print_vpath_data_base PARAMS ((void));\n\n#if defined HAVE_WAITPID || defined HAVE_WAIT3\n# define HAVE_WAIT_NOHANG\n#endif\n\n#ifndef\tHAVE_UNISTD_H\nextern int chdir ();\n#endif\n#ifndef\tSTDC_HEADERS\n# ifndef sun\t\t\t/* Sun has an incorrect decl in a header.  */\nextern void exit PARAMS ((int)) __attribute__ ((noreturn));\n# endif\nextern double atof ();\n#endif\n\nstatic void clean_jobserver PARAMS ((int status));\nstatic void print_data_base PARAMS ((void));\nstatic void print_version PARAMS ((void));\nstatic void decode_switches PARAMS ((int argc, char **argv, int env));\nstatic void decode_env_switches PARAMS ((char *envar, unsigned int len));\nstatic void define_makeflags PARAMS ((int all, int makefile));\nstatic char *quote_for_env PARAMS ((char *out, char *in));\nstatic void initialize_global_hash_tables PARAMS ((void));\n\n\f\n/* The structure that describes an accepted command switch.  */\n\nstruct command_switch\n  {\n    int c;\t\t\t/* The switch character.  */\n\n    enum\t\t\t/* Type of the value.  */\n      {\n\tflag,\t\t\t/* Turn int flag on.  */\n\tflag_off,\t\t/* Turn int flag off.  */\n\tstring,\t\t\t/* One string per switch.  */\n\tpositive_int,\t\t/* A positive integer.  */\n\tfloating,\t\t/* A floating-point number (double).  */\n\tignore\t\t\t/* Ignored.  */\n      } type;\n\n    char *value_ptr;\t/* Pointer to the value-holding variable.  */\n\n    unsigned int env:1;\t\t/* Can come from MAKEFLAGS.  */\n    unsigned int toenv:1;\t/* Should be put in MAKEFLAGS.  */\n    unsigned int no_makefile:1;\t/* Don't propagate when remaking makefiles.  */\n\n    char *noarg_value;\t/* Pointer to value used if no argument is given.  */\n    char *default_value;/* Pointer to default value.  */\n\n    char *long_name;\t\t/* Long option name.  */\n  };\n\n/* True if C is a switch value that corresponds to a short option.  */\n\n#define short_option(c) ((c) <= CHAR_MAX)\n\n/* The structure used to hold the list of strings given\n   in command switches of a type that takes string arguments.  */\n\nstruct stringlist\n  {\n    char **list;\t/* Nil-terminated list of strings.  */\n    unsigned int idx;\t/* Index into above.  */\n    unsigned int max;\t/* Number of pointers allocated.  */\n  };\n\n\n/* The recognized command switches.  */\n\n/* Nonzero means do not print commands to be executed (-s).  */\n\nint silent_flag;\n\n/* Nonzero means just touch the files\n   that would appear to need remaking (-t)  */\n\nint touch_flag;\n\n/* Nonzero means just print what commands would need to be executed,\n   don't actually execute them (-n).  */\n\nint just_print_flag;\n\n/* Print debugging info (--debug).  */\n\nstatic struct stringlist *db_flags;\nstatic int debug_flag = 0;\n\nint db_level = 0;\n\n#ifdef WINDOWS32\n/* Suspend make in main for a short time to allow debugger to attach */\n\nint suspend_flag = 0;\n#endif\n\n/* Environment variables override makefile definitions.  */\n\nint env_overrides = 0;\n\n/* Nonzero means ignore status codes returned by commands\n   executed to remake files.  Just treat them all as successful (-i).  */\n\nint ignore_errors_flag = 0;\n\n/* Nonzero means don't remake anything, just print the data base\n   that results from reading the makefile (-p).  */\n\nint print_data_base_flag = 0;\n\n/* Nonzero means don't remake anything; just return a nonzero status\n   if the specified targets are not up to date (-q).  */\n\nint question_flag = 0;\n\n/* Nonzero means do not use any of the builtin rules (-r) / variables (-R).  */\n\nint no_builtin_rules_flag = 0;\nint no_builtin_variables_flag = 0;\n\n/* Nonzero means keep going even if remaking some file fails (-k).  */\n\nint keep_going_flag;\nint default_keep_going_flag = 0;\n\n/* Nonzero means check symlink mtimes.  */\n\nint check_symlink_flag = 0;\n\n/* Nonzero means print directory before starting and when done (-w).  */\n\nint print_directory_flag = 0;\n\n/* Nonzero means ignore print_directory_flag and never print the directory.\n   This is necessary because print_directory_flag is set implicitly.  */\n\nint inhibit_print_directory_flag = 0;\n\n/* Nonzero means print version information.  */\n\nint print_version_flag = 0;\n\n/* List of makefiles given with -f switches.  */\n\nstatic struct stringlist *makefiles = 0;\n\n/* Number of job slots (commands that can be run at once).  */\n\nunsigned int job_slots = 1;\nunsigned int default_job_slots = 1;\nstatic unsigned int master_job_slots = 0;\n\n/* Value of job_slots that means no limit.  */\n\nstatic unsigned int inf_jobs = 0;\n\n/* File descriptors for the jobs pipe.  */\n\nstatic struct stringlist *jobserver_fds = 0;\n\nint job_fds[2] = { -1, -1 };\nint job_rfd = -1;\n\n/* Maximum load average at which multiple jobs will be run.\n   Negative values mean unlimited, while zero means limit to\n   zero load (which could be useful to start infinite jobs remotely\n   but one at a time locally).  */\n#ifndef NO_FLOAT\ndouble max_load_average = -1.0;\ndouble default_load_average = -1.0;\n#else\nint max_load_average = -1;\nint default_load_average = -1;\n#endif\n\n/* List of directories given with -C switches.  */\n\nstatic struct stringlist *directories = 0;\n\n/* List of include directories given with -I switches.  */\n\nstatic struct stringlist *include_directories = 0;\n\n/* List of files given with -o switches.  */\n\nstatic struct stringlist *old_files = 0;\n\n/* List of files given with -W switches.  */\n\nstatic struct stringlist *new_files = 0;\n\n/* If nonzero, we should just print usage and exit.  */\n\nstatic int print_usage_flag = 0;\n\n/* If nonzero, we should print a warning message\n   for each reference to an undefined variable.  */\n\nint warn_undefined_variables_flag;\n\n/* If nonzero, always build all targets, regardless of whether\n   they appear out of date or not.  */\n\nstatic int always_make_set = 0;\nint always_make_flag = 0;\n\n/* If nonzero, we're in the \"try to rebuild makefiles\" phase.  */\n\nint rebuilding_makefiles = 0;\n\n/* Remember the original value of the SHELL variable, from the environment.  */\n\nstruct variable shell_var;\n\n\f\n/* The usage output.  We write it this way to make life easier for the\n   translators, especially those trying to translate to right-to-left\n   languages like Hebrew.  */\n\nstatic const char *const usage[] =\n  {\n    N_(\"Options:\\n\"),\n    N_(\"\\\n  -b, -m                      Ignored for compatibility.\\n\"),\n    N_(\"\\\n  -B, --always-make           Unconditionally make all targets.\\n\"),\n    N_(\"\\\n  -C DIRECTORY, --directory=DIRECTORY\\n\\\n                              Change to DIRECTORY before doing anything.\\n\"),\n    N_(\"\\\n  -d                          Print lots of debugging information.\\n\"),\n    N_(\"\\\n  --debug[=FLAGS]             Print various types of debugging information.\\n\"),\n    N_(\"\\\n  -e, --environment-overrides\\n\\\n                              Environment variables override makefiles.\\n\"),\n    N_(\"\\\n  -f FILE, --file=FILE, --makefile=FILE\\n\\\n                              Read FILE as a makefile.\\n\"),\n    N_(\"\\\n  -h, --help                  Print this message and exit.\\n\"),\n    N_(\"\\\n  -i, --ignore-errors         Ignore errors from commands.\\n\"),\n    N_(\"\\\n  -I DIRECTORY, --include-dir=DIRECTORY\\n\\\n                              Search DIRECTORY for included makefiles.\\n\"),\n    N_(\"\\\n  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no arg.\\n\"),\n    N_(\"\\\n  -k, --keep-going            Keep going when some targets can't be made.\\n\"),\n    N_(\"\\\n  -l [N], --load-average[=N], --max-load[=N]\\n\\\n                              Don't start multiple jobs unless load is below N.\\n\"),\n    N_(\"\\\n  -L, --check-symlink-times   Use the latest mtime between symlinks and target.\\n\"),\n    N_(\"\\\n  -n, --just-print, --dry-run, --recon\\n\\\n                              Don't actually run any commands; just print them.\\n\"),\n    N_(\"\\\n  -o FILE, --old-file=FILE, --assume-old=FILE\\n\\\n                              Consider FILE to be very old and don't remake it.\\n\"),\n    N_(\"\\\n  -p, --print-data-base       Print make's internal database.\\n\"),\n    N_(\"\\\n  -q, --question              Run no commands; exit status says if up to date.\\n\"),\n    N_(\"\\\n  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"),\n    N_(\"\\\n  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"),\n    N_(\"\\\n  -s, --silent, --quiet       Don't echo commands.\\n\"),\n    N_(\"\\\n  -S, --no-keep-going, --stop\\n\\\n                              Turns off -k.\\n\"),\n    N_(\"\\\n  -t, --touch                 Touch targets instead of remaking them.\\n\"),\n    N_(\"\\\n  -v, --version               Print the version number of make and exit.\\n\"),\n    N_(\"\\\n  -w, --print-directory       Print the current directory.\\n\"),\n    N_(\"\\\n  --no-print-directory        Turn off -w, even if it was turned on implicitly.\\n\"),\n    N_(\"\\\n  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\\\n                              Consider FILE to be infinitely new.\\n\"),\n    N_(\"\\\n  --warn-undefined-variables  Warn when an undefined variable is referenced.\\n\"),\n    NULL\n  };\n\n/* The table of command switches.  */\n\nstatic const struct command_switch switches[] =\n  {\n    { 'b', ignore, 0, 0, 0, 0, 0, 0, 0 },\n    { 'B', flag, (char *) &always_make_set, 1, 1, 0, 0, 0, \"always-make\" },\n    { 'C', string, (char *) &directories, 0, 0, 0, 0, 0, \"directory\" },\n    { 'd', flag, (char *) &debug_flag, 1, 1, 0, 0, 0, 0 },\n    { CHAR_MAX+1, string, (char *) &db_flags, 1, 1, 0, \"basic\", 0, \"debug\" },\n#ifdef WINDOWS32\n    { 'D', flag, (char *) &suspend_flag, 1, 1, 0, 0, 0, \"suspend-for-debug\" },\n#endif\n    { 'e', flag, (char *) &env_overrides, 1, 1, 0, 0, 0,\n      \"environment-overrides\", },\n    { 'f', string, (char *) &makefiles, 0, 0, 0, 0, 0, \"file\" },\n    { 'h', flag, (char *) &print_usage_flag, 0, 0, 0, 0, 0, \"help\" },\n    { 'i', flag, (char *) &ignore_errors_flag, 1, 1, 0, 0, 0,\n      \"ignore-errors\" },\n    { 'I', string, (char *) &include_directories, 1, 1, 0, 0, 0,\n      \"include-dir\" },\n    { 'j', positive_int, (char *) &job_slots, 1, 1, 0, (char *) &inf_jobs,\n      (char *) &default_job_slots, \"jobs\" },\n    { CHAR_MAX+2, string, (char *) &jobserver_fds, 1, 1, 0, 0, 0,\n      \"jobserver-fds\" },\n    { 'k', flag, (char *) &keep_going_flag, 1, 1, 0, 0,\n      (char *) &default_keep_going_flag, \"keep-going\" },\n#ifndef NO_FLOAT\n    { 'l', floating, (char *) &max_load_average, 1, 1, 0,\n      (char *) &default_load_average, (char *) &default_load_average,\n      \"load-average\" },\n#else\n    { 'l', positive_int, (char *) &max_load_average, 1, 1, 0,\n      (char *) &default_load_average, (char *) &default_load_average,\n      \"load-average\" },\n#endif\n    { 'L', flag, (char *) &check_symlink_flag, 1, 1, 0, 0, 0,\n      \"check-symlink-times\" },\n    { 'm', ignore, 0, 0, 0, 0, 0, 0, 0 },\n    { 'n', flag, (char *) &just_print_flag, 1, 1, 1, 0, 0, \"just-print\" },\n    { 'o', string, (char *) &old_files, 0, 0, 0, 0, 0, \"old-file\" },\n    { 'p', flag, (char *) &print_data_base_flag, 1, 1, 0, 0, 0,\n      \"print-data-base\" },\n    { 'q', flag, (char *) &question_flag, 1, 1, 1, 0, 0, \"question\" },\n    { 'r', flag, (char *) &no_builtin_rules_flag, 1, 1, 0, 0, 0,\n      \"no-builtin-rules\" },\n    { 'R', flag, (char *) &no_builtin_variables_flag, 1, 1, 0, 0, 0,\n      \"no-builtin-variables\" },\n    { 's', flag, (char *) &silent_flag, 1, 1, 0, 0, 0, \"silent\" },\n    { 'S', flag_off, (char *) &keep_going_flag, 1, 1, 0, 0,\n      (char *) &default_keep_going_flag, \"no-keep-going\" },\n    { 't', flag, (char *) &touch_flag, 1, 1, 1, 0, 0, \"touch\" },\n    { 'v', flag, (char *) &print_version_flag, 1, 1, 0, 0, 0, \"version\" },\n    { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0,\n      \"print-directory\" },\n    { CHAR_MAX+3, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0,\n      \"no-print-directory\" },\n    { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0, \"what-if\" },\n    { CHAR_MAX+4, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0,\n      \"warn-undefined-variables\" },\n    { 0, 0, 0, 0, 0, 0, 0, 0, 0 }\n  };\n\n/* Secondary long names for options.  */\n\nstatic struct option long_option_aliases[] =\n  {\n    { \"quiet\",\t\tno_argument,\t\t0, 's' },\n    { \"stop\",\t\tno_argument,\t\t0, 'S' },\n    { \"new-file\",\trequired_argument,\t0, 'W' },\n    { \"assume-new\",\trequired_argument,\t0, 'W' },\n    { \"assume-old\",\trequired_argument,\t0, 'o' },\n    { \"max-load\",\toptional_argument,\t0, 'l' },\n    { \"dry-run\",\tno_argument,\t\t0, 'n' },\n    { \"recon\",\t\tno_argument,\t\t0, 'n' },\n    { \"makefile\",\trequired_argument,\t0, 'f' },\n  };\n\n/* List of goal targets.  */\n\nstatic struct dep *goals, *lastgoal;\n\n/* List of variables which were defined on the command line\n   (or, equivalently, in MAKEFLAGS).  */\n\nstruct command_variable\n  {\n    struct command_variable *next;\n    struct variable *variable;\n  };\nstatic struct command_variable *command_variables;\n\f\n/* The name we were invoked with.  */\n\nchar *program;\n\n/* Our current directory before processing any -C options.  */\n\nchar *directory_before_chdir;\n\n/* Our current directory after processing all -C options.  */\n\nchar *starting_directory;\n\n/* Value of the MAKELEVEL variable at startup (or 0).  */\n\nunsigned int makelevel;\n\n/* First file defined in the makefile whose name does not\n   start with `.'.  This is the default to remake if the\n   command line does not specify.  */\n\nstruct file *default_goal_file;\n\n/* Pointer to the value of the .DEFAULT_GOAL special\n   variable.  */\nchar ** default_goal_name;\n\n/* Pointer to structure for the file .DEFAULT\n   whose commands are used for any file that has none of its own.\n   This is zero if the makefiles do not define .DEFAULT.  */\n\nstruct file *default_file;\n\n/* Nonzero if we have seen the magic `.POSIX' target.\n   This turns on pedantic compliance with POSIX.2.  */\n\nint posix_pedantic;\n\n/* Nonzero if we have seen the '.SECONDEXPANSION' target.\n   This turns on secondary expansion of prerequisites.  */\n\nint second_expansion;\n\n/* Nonzero if we have seen the `.NOTPARALLEL' target.\n   This turns off parallel builds for this invocation of make.  */\n\nint not_parallel;\n\n/* Nonzero if some rule detected clock skew; we keep track so (a) we only\n   print one warning about it during the run, and (b) we can print a final\n   warning at the end of the run. */\n\nint clock_skew_detected;\n\f\n/* Mask of signals that are being caught with fatal_error_signal.  */\n\n#ifdef\tPOSIX\nsigset_t fatal_signal_set;\n#else\n# ifdef\tHAVE_SIGSETMASK\nint fatal_signal_mask;\n# endif\n#endif\n\n#if !defined HAVE_BSD_SIGNAL && !defined bsd_signal\n# if !defined HAVE_SIGACTION\n#  define bsd_signal signal\n# else\ntypedef RETSIGTYPE (*bsd_signal_ret_t) ();\n\nstatic bsd_signal_ret_t\nbsd_signal (int sig, bsd_signal_ret_t func)\n{\n  struct sigaction act, oact;\n  act.sa_handler = func;\n  act.sa_flags = SA_RESTART;\n  sigemptyset (&act.sa_mask);\n  sigaddset (&act.sa_mask, sig);\n  if (sigaction (sig, &act, &oact) != 0)\n    return SIG_ERR;\n  return oact.sa_handler;\n}\n# endif\n#endif\n\nstatic void\ninitialize_global_hash_tables (void)\n{\n  init_hash_global_variable_set ();\n  strcache_init ();\n  init_hash_files ();\n  hash_init_directories ();\n  hash_init_function_table ();\n}\n\nstatic struct file *\nenter_command_line_file (char *name)\n{\n  if (name[0] == '\\0')\n    fatal (NILF, _(\"empty string invalid as file name\"));\n\n  if (name[0] == '~')\n    {\n      char *expanded = tilde_expand (name);\n      if (expanded != 0)\n\tname = expanded;\t/* Memory leak; I don't care.  */\n    }\n\n  /* This is also done in parse_file_seq, so this is redundant\n     for names read from makefiles.  It is here for names passed\n     on the command line.  */\n  while (name[0] == '.' && name[1] == '/' && name[2] != '\\0')\n    {\n      name += 2;\n      while (*name == '/')\n\t/* Skip following slashes: \".//foo\" is \"foo\", not \"/foo\".  */\n\t++name;\n    }\n\n  if (*name == '\\0')\n    {\n      /* It was all slashes!  Move back to the dot and truncate\n\t it after the first slash, so it becomes just \"./\".  */\n      do\n\t--name;\n      while (name[0] != '.');\n      name[2] = '\\0';\n    }\n\n  return enter_file (xstrdup (name));\n}\n\n/* Toggle -d on receipt of SIGUSR1.  */\n\n#ifdef SIGUSR1\nstatic RETSIGTYPE\ndebug_signal_handler (int sig UNUSED)\n{\n  db_level = db_level ? DB_NONE : DB_BASIC;\n}\n#endif\n\nstatic void\ndecode_debug_flags (void)\n{\n  char **pp;\n\n  if (debug_flag)\n    db_level = DB_ALL;\n\n  if (!db_flags)\n    return;\n\n  for (pp=db_flags->list; *pp; ++pp)\n    {\n      const char *p = *pp;\n\n      while (1)\n        {\n          switch (tolower (p[0]))\n            {\n            case 'a':\n              db_level |= DB_ALL;\n              break;\n            case 'b':\n              db_level |= DB_BASIC;\n              break;\n            case 'i':\n              db_level |= DB_BASIC | DB_IMPLICIT;\n              break;\n            case 'j':\n              db_level |= DB_JOBS;\n              break;\n            case 'm':\n              db_level |= DB_BASIC | DB_MAKEFILES;\n              break;\n            case 'v':\n              db_level |= DB_BASIC | DB_VERBOSE;\n              break;\n            default:\n              fatal (NILF, _(\"unknown debug level specification `%s'\"), p);\n            }\n\n          while (*(++p) != '\\0')\n            if (*p == ',' || *p == ' ')\n              break;\n\n          if (*p == '\\0')\n            break;\n\n          ++p;\n        }\n    }\n}\n\n#ifdef WINDOWS32\n/*\n * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture\n * exception and print it to stderr instead.\n *\n * If ! DB_VERBOSE, just print a simple message and exit.\n * If DB_VERBOSE, print a more verbose message.\n * If compiled for DEBUG, let exception pass through to GUI so that\n *   debuggers can attach.\n */\nLONG WINAPI\nhandle_runtime_exceptions( struct _EXCEPTION_POINTERS *exinfo )\n{\n  PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord;\n  LPSTR cmdline = GetCommandLine();\n  LPSTR prg = strtok(cmdline, \" \");\n  CHAR errmsg[1024];\n#ifdef USE_EVENT_LOG\n  HANDLE hEventSource;\n  LPTSTR lpszStrings[1];\n#endif\n\n  if (! ISDB (DB_VERBOSE))\n    {\n      sprintf(errmsg,\n              _(\"%s: Interrupt/Exception caught (code = 0x%lx, addr = %p)\\n\"),\n              prg, exrec->ExceptionCode, exrec->ExceptionAddress);\n      fprintf(stderr, errmsg);\n      exit(255);\n    }\n\n  sprintf(errmsg,\n          _(\"\\nUnhandled exception filter called from program %s\\nExceptionCode = %lx\\nExceptionFlags = %lx\\nExceptionAddress = %p\\n\"),\n          prg, exrec->ExceptionCode, exrec->ExceptionFlags,\n          exrec->ExceptionAddress);\n\n  if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION\n      && exrec->NumberParameters >= 2)\n    sprintf(&errmsg[strlen(errmsg)],\n            (exrec->ExceptionInformation[0]\n             ? _(\"Access violation: write operation at address %lx\\n\")\n             : _(\"Access violation: read operation at address %lx\\n\")),\n            exrec->ExceptionInformation[1]);\n\n  /* turn this on if we want to put stuff in the event log too */\n#ifdef USE_EVENT_LOG\n  hEventSource = RegisterEventSource(NULL, \"GNU Make\");\n  lpszStrings[0] = errmsg;\n\n  if (hEventSource != NULL)\n    {\n      ReportEvent(hEventSource,         /* handle of event source */\n                  EVENTLOG_ERROR_TYPE,  /* event type */\n                  0,                    /* event category */\n                  0,                    /* event ID */\n                  NULL,                 /* current user's SID */\n                  1,                    /* strings in lpszStrings */\n                  0,                    /* no bytes of raw data */\n                  lpszStrings,          /* array of error strings */\n                  NULL);                /* no raw data */\n\n      (VOID) DeregisterEventSource(hEventSource);\n    }\n#endif\n\n  /* Write the error to stderr too */\n  fprintf(stderr, errmsg);\n\n#ifdef DEBUG\n  return EXCEPTION_CONTINUE_SEARCH;\n#else\n  exit(255);\n  return (255); /* not reached */\n#endif\n}\n\n/*\n * On WIN32 systems we don't have the luxury of a /bin directory that\n * is mapped globally to every drive mounted to the system. Since make could\n * be invoked from any drive, and we don't want to propogate /bin/sh\n * to every single drive. Allow ourselves a chance to search for\n * a value for default shell here (if the default path does not exist).\n */\n\nint\nfind_and_set_default_shell (char *token)\n{\n  int sh_found = 0;\n  char *search_token;\n  char *tokend;\n  PATH_VAR(sh_path);\n  extern char *default_shell;\n\n  if (!token)\n    search_token = default_shell;\n  else\n    search_token = token;\n\n\n  /* If the user explicitly requests the DOS cmd shell, obey that request.\n     However, make sure that's what they really want by requiring the value\n     of SHELL either equal, or have a final path element of, \"cmd\" or\n     \"cmd.exe\" case-insensitive.  */\n  tokend = search_token + strlen (search_token) - 3;\n  if (((tokend == search_token\n        || (tokend > search_token\n            && (tokend[-1] == '/' || tokend[-1] == '\\\\')))\n       && !strcmpi (tokend, \"cmd\"))\n      || ((tokend - 4 == search_token\n           || (tokend - 4 > search_token\n               && (tokend[-5] == '/' || tokend[-5] == '\\\\')))\n          && !strcmpi (tokend - 4, \"cmd.exe\"))) {\n    batch_mode_shell = 1;\n    unixy_shell = 0;\n    sprintf (sh_path, \"%s\", search_token);\n    default_shell = xstrdup (w32ify (sh_path, 0));\n    DB (DB_VERBOSE,\n        (_(\"find_and_set_shell setting default_shell = %s\\n\"), default_shell));\n    sh_found = 1;\n  } else if (!no_default_sh_exe &&\n             (token == NULL || !strcmp (search_token, default_shell))) {\n    /* no new information, path already set or known */\n    sh_found = 1;\n  } else if (file_exists_p(search_token)) {\n    /* search token path was found */\n    sprintf(sh_path, \"%s\", search_token);\n    default_shell = xstrdup(w32ify(sh_path,0));\n    DB (DB_VERBOSE,\n        (_(\"find_and_set_shell setting default_shell = %s\\n\"), default_shell));\n    sh_found = 1;\n  } else {\n    char *p;\n    struct variable *v = lookup_variable (STRING_SIZE_TUPLE (\"PATH\"));\n\n    /* Search Path for shell */\n    if (v && v->value) {\n      char *ep;\n\n      p  = v->value;\n      ep = strchr(p, PATH_SEPARATOR_CHAR);\n\n      while (ep && *ep) {\n        *ep = '\\0';\n\n        if (dir_file_exists_p(p, search_token)) {\n          sprintf(sh_path, \"%s/%s\", p, search_token);\n          default_shell = xstrdup(w32ify(sh_path,0));\n          sh_found = 1;\n          *ep = PATH_SEPARATOR_CHAR;\n\n          /* terminate loop */\n          p += strlen(p);\n        } else {\n          *ep = PATH_SEPARATOR_CHAR;\n           p = ++ep;\n        }\n\n        ep = strchr(p, PATH_SEPARATOR_CHAR);\n      }\n\n      /* be sure to check last element of Path */\n      if (p && *p && dir_file_exists_p(p, search_token)) {\n          sprintf(sh_path, \"%s/%s\", p, search_token);\n          default_shell = xstrdup(w32ify(sh_path,0));\n          sh_found = 1;\n      }\n\n      if (sh_found)\n        DB (DB_VERBOSE,\n            (_(\"find_and_set_shell path search set default_shell = %s\\n\"),\n             default_shell));\n    }\n  }\n\n  /* naive test */\n  if (!unixy_shell && sh_found &&\n      (strstr(default_shell, \"sh\") || strstr(default_shell, \"SH\"))) {\n    unixy_shell = 1;\n    batch_mode_shell = 0;\n  }\n\n#ifdef BATCH_MODE_ONLY_SHELL\n  batch_mode_shell = 1;\n#endif\n\n  return (sh_found);\n}\n#endif  /* WINDOWS32 */\n\n#ifdef  __MSDOS__\n\nstatic void\nmsdos_return_to_initial_directory (void)\n{\n  if (directory_before_chdir)\n    chdir (directory_before_chdir);\n}\n#endif\n\nextern char *mktemp PARAMS ((char *template));\nextern int mkstemp PARAMS ((char *template));\n\nFILE *\nopen_tmpfile(char **name, const char *template)\n{\n#ifdef HAVE_FDOPEN\n  int fd;\n#endif\n\n#if defined HAVE_MKSTEMP || defined HAVE_MKTEMP\n# define TEMPLATE_LEN   strlen (template)\n#else\n# define TEMPLATE_LEN   L_tmpnam\n#endif\n  *name = xmalloc (TEMPLATE_LEN + 1);\n  strcpy (*name, template);\n\n#if defined HAVE_MKSTEMP && defined HAVE_FDOPEN\n  /* It's safest to use mkstemp(), if we can.  */\n  fd = mkstemp (*name);\n  if (fd == -1)\n    return 0;\n  return fdopen (fd, \"w\");\n#else\n# ifdef HAVE_MKTEMP\n  (void) mktemp (*name);\n# else\n  (void) tmpnam (*name);\n# endif\n\n# ifdef HAVE_FDOPEN\n  /* Can't use mkstemp(), but guard against a race condition.  */\n  fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600);\n  if (fd == -1)\n    return 0;\n  return fdopen (fd, \"w\");\n# else\n  /* Not secure, but what can we do?  */\n  return fopen (*name, \"w\");\n# endif\n#endif\n}\n\n\n#ifdef _AMIGA\nint\nmain (int argc, char **argv)\n#else\nint\nmain (int argc, char **argv, char **envp)\n#endif\n{\n  static char *stdin_nm = 0;\n  struct file *f;\n  int i;\n  int makefile_status = MAKE_SUCCESS;\n  char **p;\n  struct dep *read_makefiles;\n  PATH_VAR (current_directory);\n  unsigned int restarts = 0;\n#ifdef WINDOWS32\n  char *unix_path = NULL;\n  char *windows32_path = NULL;\n\n  SetUnhandledExceptionFilter(handle_runtime_exceptions);\n\n  /* start off assuming we have no shell */\n  unixy_shell = 0;\n  no_default_sh_exe = 1;\n#endif\n\n#ifdef SET_STACK_SIZE\n /* Get rid of any avoidable limit on stack size.  */\n  {\n    struct rlimit rlim;\n\n    /* Set the stack limit huge so that alloca does not fail.  */\n    if (getrlimit (RLIMIT_STACK, &rlim) == 0)\n      {\n        rlim.rlim_cur = rlim.rlim_max;\n        setrlimit (RLIMIT_STACK, &rlim);\n      }\n  }\n#endif\n\n#ifdef HAVE_ATEXIT\n  atexit (close_stdout);\n#endif\n\n  /* Needed for OS/2 */\n  initialize_main(&argc, &argv);\n\n  default_goal_file = 0;\n  reading_file = 0;\n\n#if defined (__MSDOS__) && !defined (_POSIX_SOURCE)\n  /* Request the most powerful version of `system', to\n     make up for the dumb default shell.  */\n  __system_flags = (__system_redirect\n\t\t    | __system_use_shell\n\t\t    | __system_allow_multiple_cmds\n\t\t    | __system_allow_long_cmds\n\t\t    | __system_handle_null_commands\n\t\t    | __system_emulate_chdir);\n\n#endif\n\n  /* Set up gettext/internationalization support.  */\n  setlocale (LC_ALL, \"\");\n  bindtextdomain (PACKAGE, LOCALEDIR);\n  textdomain (PACKAGE);\n\n#ifdef\tPOSIX\n  sigemptyset (&fatal_signal_set);\n#define\tADD_SIG(sig)\tsigaddset (&fatal_signal_set, sig)\n#else\n#ifdef\tHAVE_SIGSETMASK\n  fatal_signal_mask = 0;\n#define\tADD_SIG(sig)\tfatal_signal_mask |= sigmask (sig)\n#else\n#define\tADD_SIG(sig)\n#endif\n#endif\n\n#define\tFATAL_SIG(sig)\t\t\t\t\t\t\t      \\\n  if (bsd_signal (sig, fatal_error_signal) == SIG_IGN)\t\t\t      \\\n    bsd_signal (sig, SIG_IGN);\t\t\t\t\t\t      \\\n  else\t\t\t\t\t\t\t\t\t      \\\n    ADD_SIG (sig);\n\n#ifdef SIGHUP\n  FATAL_SIG (SIGHUP);\n#endif\n#ifdef SIGQUIT\n  FATAL_SIG (SIGQUIT);\n#endif\n  FATAL_SIG (SIGINT);\n  FATAL_SIG (SIGTERM);\n\n#ifdef __MSDOS__\n  /* Windows 9X delivers FP exceptions in child programs to their\n     parent!  We don't want Make to die when a child divides by zero,\n     so we work around that lossage by catching SIGFPE.  */\n  FATAL_SIG (SIGFPE);\n#endif\n\n#ifdef\tSIGDANGER\n  FATAL_SIG (SIGDANGER);\n#endif\n#ifdef SIGXCPU\n  FATAL_SIG (SIGXCPU);\n#endif\n#ifdef SIGXFSZ\n  FATAL_SIG (SIGXFSZ);\n#endif\n\n#undef\tFATAL_SIG\n\n  /* Do not ignore the child-death signal.  This must be done before\n     any children could possibly be created; otherwise, the wait\n     functions won't work on systems with the SVR4 ECHILD brain\n     damage, if our invoker is ignoring this signal.  */\n\n#ifdef HAVE_WAIT_NOHANG\n# if defined SIGCHLD\n  (void) bsd_signal (SIGCHLD, SIG_DFL);\n# endif\n# if defined SIGCLD && SIGCLD != SIGCHLD\n  (void) bsd_signal (SIGCLD, SIG_DFL);\n# endif\n#endif\n\n  /* Make sure stdout is line-buffered.  */\n\n#ifdef HAVE_SETVBUF\n# ifdef SETVBUF_REVERSED\n  setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ);\n# else\t/* setvbuf not reversed.  */\n  /* Some buggy systems lose if we pass 0 instead of allocating ourselves.  */\n  setvbuf (stdout, (char *) 0, _IOLBF, BUFSIZ);\n# endif\t/* setvbuf reversed.  */\n#elif HAVE_SETLINEBUF\n  setlinebuf (stdout);\n#endif\t/* setlinebuf missing.  */\n\n  /* Figure out where this program lives.  */\n\n  if (argv[0] == 0)\n    argv[0] = \"\";\n  if (argv[0][0] == '\\0')\n    program = \"make\";\n  else\n    {\n#ifdef VMS\n      program = strrchr (argv[0], ']');\n#else\n      program = strrchr (argv[0], '/');\n#endif\n#if defined(__MSDOS__) || defined(__EMX__)\n      if (program == 0)\n\tprogram = strrchr (argv[0], '\\\\');\n      else\n\t{\n\t  /* Some weird environments might pass us argv[0] with\n\t     both kinds of slashes; we must find the rightmost.  */\n\t  char *p = strrchr (argv[0], '\\\\');\n\t  if (p && p > program)\n\t    program = p;\n\t}\n      if (program == 0 && argv[0][1] == ':')\n\tprogram = argv[0] + 1;\n#endif\n#ifdef WINDOWS32\n      if (program == 0)\n        {\n          /* Extract program from full path */\n          int argv0_len;\n          program = strrchr (argv[0], '\\\\');\n          if (program)\n            {\n              argv0_len = strlen(program);\n              if (argv0_len > 4 && streq (&program[argv0_len - 4], \".exe\"))\n                /* Remove .exe extension */\n                program[argv0_len - 4] = '\\0';\n            }\n        }\n#endif\n      if (program == 0)\n\tprogram = argv[0];\n      else\n\t++program;\n    }\n\n  /* Set up to access user data (files).  */\n  user_access ();\n\n  initialize_global_hash_tables ();\n\n  /* Figure out where we are.  */\n\n#ifdef WINDOWS32\n  if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)\n#else\n  if (getcwd (current_directory, GET_PATH_MAX) == 0)\n#endif\n    {\n#ifdef\tHAVE_GETCWD\n      perror_with_name (\"getcwd\", \"\");\n#else\n      error (NILF, \"getwd: %s\", current_directory);\n#endif\n      current_directory[0] = '\\0';\n      directory_before_chdir = 0;\n    }\n  else\n    directory_before_chdir = xstrdup (current_directory);\n#ifdef  __MSDOS__\n  /* Make sure we will return to the initial directory, come what may.  */\n  atexit (msdos_return_to_initial_directory);\n#endif\n\n  /* Initialize the special variables.  */\n  define_variable (\".VARIABLES\", 10, \"\", o_default, 0)->special = 1;\n  /* define_variable (\".TARGETS\", 8, \"\", o_default, 0)->special = 1; */\n\n  /* Set up .FEATURES */\n  define_variable (\".FEATURES\", 9,\n                   \"target-specific order-only second-expansion else-if\",\n                   o_default, 0);\n#ifndef NO_ARCHIVES\n  do_variable_definition (NILF, \".FEATURES\", \"archives\",\n                          o_default, f_append, 0);\n#endif\n#ifdef MAKE_JOBSERVER\n  do_variable_definition (NILF, \".FEATURES\", \"jobserver\",\n                          o_default, f_append, 0);\n#endif\n#ifdef MAKE_SYMLINKS\n  do_variable_definition (NILF, \".FEATURES\", \"check-symlink\",\n                          o_default, f_append, 0);\n#endif\n\n  /* Read in variables from the environment.  It is important that this be\n     done before $(MAKE) is figured out so its definitions will not be\n     from the environment.  */\n\n#ifndef _AMIGA\n  for (i = 0; envp[i] != 0; ++i)\n    {\n      int do_not_define = 0;\n      char *ep = envp[i];\n\n      while (*ep != '\\0' && *ep != '=')\n        ++ep;\n#ifdef WINDOWS32\n      if (!unix_path && strneq(envp[i], \"PATH=\", 5))\n        unix_path = ep+1;\n      else if (!strnicmp(envp[i], \"Path=\", 5)) {\n        do_not_define = 1; /* it gets defined after loop exits */\n        if (!windows32_path)\n          windows32_path = ep+1;\n      }\n#endif\n      /* The result of pointer arithmetic is cast to unsigned int for\n\t machines where ptrdiff_t is a different size that doesn't widen\n\t the same.  */\n      if (!do_not_define)\n        {\n          struct variable *v;\n\n          v = define_variable (envp[i], (unsigned int) (ep - envp[i]),\n                               ep + 1, o_env, 1);\n          /* Force exportation of every variable culled from the environment.\n             We used to rely on target_environment's v_default code to do this.\n             But that does not work for the case where an environment variable\n             is redefined in a makefile with `override'; it should then still\n             be exported, because it was originally in the environment.  */\n          v->export = v_export;\n\n          /* Another wrinkle is that POSIX says the value of SHELL set in the\n             makefile won't change the value of SHELL given to subprocesses  */\n          if (streq (v->name, \"SHELL\"))\n            {\n#ifndef __MSDOS__\n              v->export = v_noexport;\n#endif\n              shell_var.name = \"SHELL\";\n              shell_var.value = xstrdup (ep + 1);\n            }\n\n          /* If MAKE_RESTARTS is set, remember it but don't export it.  */\n          if (streq (v->name, \"MAKE_RESTARTS\"))\n            {\n              v->export = v_noexport;\n              restarts = (unsigned int) atoi (ep + 1);\n            }\n        }\n    }\n#ifdef WINDOWS32\n    /* If we didn't find a correctly spelled PATH we define PATH as\n     * either the first mispelled value or an empty string\n     */\n    if (!unix_path)\n      define_variable(\"PATH\", 4,\n                      windows32_path ? windows32_path : \"\",\n                      o_env, 1)->export = v_export;\n#endif\n#else /* For Amiga, read the ENV: device, ignoring all dirs */\n    {\n\tBPTR env, file, old;\n\tchar buffer[1024];\n\tint len;\n\t__aligned struct FileInfoBlock fib;\n\n\tenv = Lock (\"ENV:\", ACCESS_READ);\n\tif (env)\n\t{\n\t    old = CurrentDir (DupLock(env));\n\t    Examine (env, &fib);\n\n\t    while (ExNext (env, &fib))\n\t    {\n\t\tif (fib.fib_DirEntryType < 0) /* File */\n\t\t{\n\t\t    /* Define an empty variable. It will be filled in\n\t\t\tvariable_lookup(). Makes startup quite a bit\n\t\t\tfaster. */\n\t\t\tdefine_variable (fib.fib_FileName,\n\t\t\t    strlen (fib.fib_FileName),\n\t\t\t\"\", o_env, 1)->export = v_export;\n\t\t}\n\t    }\n\t    UnLock (env);\n\t    UnLock(CurrentDir(old));\n\t}\n    }\n#endif\n\n  /* Decode the switches.  */\n\n  decode_env_switches (STRING_SIZE_TUPLE (\"MAKEFLAGS\"));\n#if 0\n  /* People write things like:\n     \tMFLAGS=\"CC=gcc -pipe\" \"CFLAGS=-g\"\n     and we set the -p, -i and -e switches.  Doesn't seem quite right.  */\n  decode_env_switches (STRING_SIZE_TUPLE (\"MFLAGS\"));\n#endif\n  decode_switches (argc, argv, 0);\n#ifdef WINDOWS32\n  if (suspend_flag) {\n        fprintf(stderr, \"%s (pid = %ld)\\n\", argv[0], GetCurrentProcessId());\n        fprintf(stderr, _(\"%s is suspending for 30 seconds...\"), argv[0]);\n        Sleep(30 * 1000);\n        fprintf(stderr, _(\"done sleep(30). Continuing.\\n\"));\n  }\n#endif\n\n  decode_debug_flags ();\n\n  /* Set always_make_flag if -B was given and we've not restarted already.  */\n  always_make_flag = always_make_set && (restarts == 0);\n\n  /* Print version information.  */\n  if (print_version_flag || print_data_base_flag || db_level)\n    {\n      print_version ();\n\n      /* `make --version' is supposed to just print the version and exit.  */\n      if (print_version_flag)\n        die (0);\n    }\n\n#ifndef VMS\n  /* Set the \"MAKE_COMMAND\" variable to the name we were invoked with.\n     (If it is a relative pathname with a slash, prepend our directory name\n     so the result will run the same program regardless of the current dir.\n     If it is a name with no slash, we can only hope that PATH did not\n     find it in the current directory.)  */\n#ifdef WINDOWS32\n  /*\n   * Convert from backslashes to forward slashes for\n   * programs like sh which don't like them. Shouldn't\n   * matter if the path is one way or the other for\n   * CreateProcess().\n   */\n  if (strpbrk(argv[0], \"/:\\\\\") ||\n      strstr(argv[0], \"..\") ||\n      strneq(argv[0], \"//\", 2))\n    argv[0] = xstrdup(w32ify(argv[0],1));\n#else /* WINDOWS32 */\n#if defined (__MSDOS__) || defined (__EMX__)\n  if (strchr (argv[0], '\\\\'))\n    {\n      char *p;\n\n      argv[0] = xstrdup (argv[0]);\n      for (p = argv[0]; *p; p++)\n\tif (*p == '\\\\')\n\t  *p = '/';\n    }\n  /* If argv[0] is not in absolute form, prepend the current\n     directory.  This can happen when Make is invoked by another DJGPP\n     program that uses a non-absolute name.  */\n  if (current_directory[0] != '\\0'\n      && argv[0] != 0\n      && (argv[0][0] != '/' && (argv[0][0] == '\\0' || argv[0][1] != ':'))\n#ifdef __EMX__\n      /* do not prepend cwd if argv[0] contains no '/', e.g. \"make\" */\n      && (strchr (argv[0], '/') != 0 || strchr (argv[0], '\\\\') != 0)\n# endif\n      )\n    argv[0] = concat (current_directory, \"/\", argv[0]);\n#else  /* !__MSDOS__ */\n  if (current_directory[0] != '\\0'\n      && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0)\n    argv[0] = concat (current_directory, \"/\", argv[0]);\n#endif /* !__MSDOS__ */\n#endif /* WINDOWS32 */\n#endif\n\n  /* The extra indirection through $(MAKE_COMMAND) is done\n     for hysterical raisins.  */\n  (void) define_variable (\"MAKE_COMMAND\", 12, argv[0], o_default, 0);\n  (void) define_variable (\"MAKE\", 4, \"$(MAKE_COMMAND)\", o_default, 1);\n\n  if (command_variables != 0)\n    {\n      struct command_variable *cv;\n      struct variable *v;\n      unsigned int len = 0;\n      char *value, *p;\n\n      /* Figure out how much space will be taken up by the command-line\n\t variable definitions.  */\n      for (cv = command_variables; cv != 0; cv = cv->next)\n\t{\n\t  v = cv->variable;\n\t  len += 2 * strlen (v->name);\n\t  if (! v->recursive)\n\t    ++len;\n\t  ++len;\n\t  len += 2 * strlen (v->value);\n\t  ++len;\n\t}\n\n      /* Now allocate a buffer big enough and fill it.  */\n      p = value = (char *) alloca (len);\n      for (cv = command_variables; cv != 0; cv = cv->next)\n\t{\n\t  v = cv->variable;\n\t  p = quote_for_env (p, v->name);\n\t  if (! v->recursive)\n\t    *p++ = ':';\n\t  *p++ = '=';\n\t  p = quote_for_env (p, v->value);\n\t  *p++ = ' ';\n\t}\n      p[-1] = '\\0';\t\t/* Kill the final space and terminate.  */\n\n      /* Define an unchangeable variable with a name that no POSIX.2\n\t makefile could validly use for its own variable.  */\n      (void) define_variable (\"-*-command-variables-*-\", 23,\n\t\t\t      value, o_automatic, 0);\n\n      /* Define the variable; this will not override any user definition.\n         Normally a reference to this variable is written into the value of\n         MAKEFLAGS, allowing the user to override this value to affect the\n         exported value of MAKEFLAGS.  In POSIX-pedantic mode, we cannot\n         allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so\n         a reference to this hidden variable is written instead. */\n      (void) define_variable (\"MAKEOVERRIDES\", 13,\n\t\t\t      \"${-*-command-variables-*-}\", o_env, 1);\n    }\n\n  /* If there were -C flags, move ourselves about.  */\n  if (directories != 0)\n    for (i = 0; directories->list[i] != 0; ++i)\n      {\n\tchar *dir = directories->list[i];\n        char *expanded = 0;\n\tif (dir[0] == '~')\n\t  {\n            expanded = tilde_expand (dir);\n\t    if (expanded != 0)\n\t      dir = expanded;\n\t  }\n#ifdef WINDOWS32\n        /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/'\n           But allow -C/ just in case someone wants that.  */\n        {\n          char *p = dir + strlen (dir) - 1;\n          while (p > dir && (p[0] == '/' || p[0] == '\\\\'))\n            --p;\n          p[1] = '\\0';\n        }\n#endif\n\tif (chdir (dir) < 0)\n\t  pfatal_with_name (dir);\n\tif (expanded)\n\t  free (expanded);\n      }\n\n#ifdef WINDOWS32\n  /*\n   * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER\n   * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c.\n   *\n   * The functions in dir.c can incorrectly cache information for \".\"\n   * before we have changed directory and this can cause file\n   * lookups to fail because the current directory (.) was pointing\n   * at the wrong place when it was first evaluated.\n   */\n   no_default_sh_exe = !find_and_set_default_shell(NULL);\n\n#endif /* WINDOWS32 */\n  /* Figure out the level of recursion.  */\n  {\n    struct variable *v = lookup_variable (STRING_SIZE_TUPLE (MAKELEVEL_NAME));\n    if (v != 0 && v->value[0] != '\\0' && v->value[0] != '-')\n      makelevel = (unsigned int) atoi (v->value);\n    else\n      makelevel = 0;\n  }\n\n  /* Except under -s, always do -w in sub-makes and under -C.  */\n  if (!silent_flag && (directories != 0 || makelevel > 0))\n    print_directory_flag = 1;\n\n  /* Let the user disable that with --no-print-directory.  */\n  if (inhibit_print_directory_flag)\n    print_directory_flag = 0;\n\n  /* If -R was given, set -r too (doesn't make sense otherwise!)  */\n  if (no_builtin_variables_flag)\n    no_builtin_rules_flag = 1;\n\n  /* Construct the list of include directories to search.  */\n\n  construct_include_path (include_directories == 0 ? (char **) 0\n\t\t\t  : include_directories->list);\n\n  /* Figure out where we are now, after chdir'ing.  */\n  if (directories == 0)\n    /* We didn't move, so we're still in the same place.  */\n    starting_directory = current_directory;\n  else\n    {\n#ifdef WINDOWS32\n      if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)\n#else\n      if (getcwd (current_directory, GET_PATH_MAX) == 0)\n#endif\n\t{\n#ifdef\tHAVE_GETCWD\n\t  perror_with_name (\"getcwd\", \"\");\n#else\n\t  error (NILF, \"getwd: %s\", current_directory);\n#endif\n\t  starting_directory = 0;\n\t}\n      else\n\tstarting_directory = current_directory;\n    }\n\n  (void) define_variable (\"CURDIR\", 6, current_directory, o_file, 0);\n\n  /* Read any stdin makefiles into temporary files.  */\n\n  if (makefiles != 0)\n    {\n      register unsigned int i;\n      for (i = 0; i < makefiles->idx; ++i)\n\tif (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\\0')\n\t  {\n\t    /* This makefile is standard input.  Since we may re-exec\n\t       and thus re-read the makefiles, we read standard input\n\t       into a temporary file and read from that.  */\n\t    FILE *outfile;\n            char *template, *tmpdir;\n\n            if (stdin_nm)\n              fatal (NILF, _(\"Makefile from standard input specified twice.\"));\n\n#ifdef VMS\n# define DEFAULT_TMPDIR     \"sys$scratch:\"\n#else\n# ifdef P_tmpdir\n#  define DEFAULT_TMPDIR    P_tmpdir\n# else\n#  define DEFAULT_TMPDIR    \"/tmp\"\n# endif\n#endif\n#define DEFAULT_TMPFILE     \"GmXXXXXX\"\n\n\t    if (((tmpdir = getenv (\"TMPDIR\")) == NULL || *tmpdir == '\\0')\n#if defined (__MSDOS__) || defined (WINDOWS32) || defined (__EMX__)\n                /* These are also used commonly on these platforms.  */\n                && ((tmpdir = getenv (\"TEMP\")) == NULL || *tmpdir == '\\0')\n                && ((tmpdir = getenv (\"TMP\")) == NULL || *tmpdir == '\\0')\n#endif\n               )\n\t      tmpdir = DEFAULT_TMPDIR;\n\n            template = (char *) alloca (strlen (tmpdir)\n                                        + sizeof (DEFAULT_TMPFILE) + 1);\n\t    strcpy (template, tmpdir);\n\n#ifdef HAVE_DOS_PATHS\n\t    if (strchr (\"/\\\\\", template[strlen (template) - 1]) == NULL)\n\t      strcat (template, \"/\");\n#else\n# ifndef VMS\n\t    if (template[strlen (template) - 1] != '/')\n\t      strcat (template, \"/\");\n# endif /* !VMS */\n#endif /* !HAVE_DOS_PATHS */\n\n\t    strcat (template, DEFAULT_TMPFILE);\n\t    outfile = open_tmpfile (&stdin_nm, template);\n\t    if (outfile == 0)\n\t      pfatal_with_name (_(\"fopen (temporary file)\"));\n\t    while (!feof (stdin) && ! ferror (stdin))\n\t      {\n\t\tchar buf[2048];\n\t\tunsigned int n = fread (buf, 1, sizeof (buf), stdin);\n\t\tif (n > 0 && fwrite (buf, 1, n, outfile) != n)\n\t\t  pfatal_with_name (_(\"fwrite (temporary file)\"));\n\t      }\n\t    (void) fclose (outfile);\n\n\t    /* Replace the name that read_all_makefiles will\n\t       see with the name of the temporary file.  */\n            makefiles->list[i] = xstrdup (stdin_nm);\n\n\t    /* Make sure the temporary file will not be remade.  */\n\t    f = enter_file (stdin_nm);\n\t    f->updated = 1;\n\t    f->update_status = 0;\n\t    f->command_state = cs_finished;\n \t    /* Can't be intermediate, or it'll be removed too early for\n               make re-exec.  */\n \t    f->intermediate = 0;\n\t    f->dontcare = 0;\n\t  }\n    }\n\n#ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */\n#if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG)\n  /* Set up to handle children dying.  This must be done before\n     reading in the makefiles so that `shell' function calls will work.\n\n     If we don't have a hanging wait we have to fall back to old, broken\n     functionality here and rely on the signal handler and counting\n     children.\n\n     If we're using the jobs pipe we need a signal handler so that\n     SIGCHLD is not ignored; we need it to interrupt the read(2) of the\n     jobserver pipe in job.c if we're waiting for a token.\n\n     If none of these are true, we don't need a signal handler at all.  */\n  {\n    extern RETSIGTYPE child_handler PARAMS ((int sig));\n# if defined SIGCHLD\n    bsd_signal (SIGCHLD, child_handler);\n# endif\n# if defined SIGCLD && SIGCLD != SIGCHLD\n    bsd_signal (SIGCLD, child_handler);\n# endif\n  }\n#endif\n#endif\n\n  /* Let the user send us SIGUSR1 to toggle the -d flag during the run.  */\n#ifdef SIGUSR1\n  bsd_signal (SIGUSR1, debug_signal_handler);\n#endif\n\n  /* Define the initial list of suffixes for old-style rules.  */\n\n  set_default_suffixes ();\n\n  /* Define the file rules for the built-in suffix rules.  These will later\n     be converted into pattern rules.  We used to do this in\n     install_default_implicit_rules, but since that happens after reading\n     makefiles, it results in the built-in pattern rules taking precedence\n     over makefile-specified suffix rules, which is wrong.  */\n\n  install_default_suffix_rules ();\n\n  /* Define some internal and special variables.  */\n\n  define_automatic_variables ();\n\n  /* Set up the MAKEFLAGS and MFLAGS variables\n     so makefiles can look at them.  */\n\n  define_makeflags (0, 0);\n\n  /* Define the default variables.  */\n  define_default_variables ();\n\n  default_file = enter_file (\".DEFAULT\");\n\n  {\n    struct variable *v = define_variable (\".DEFAULT_GOAL\", 13, \"\", o_file, 0);\n    default_goal_name = &v->value;\n  }\n\n  /* Read all the makefiles.  */\n\n  read_makefiles\n    = read_all_makefiles (makefiles == 0 ? (char **) 0 : makefiles->list);\n\n#ifdef WINDOWS32\n  /* look one last time after reading all Makefiles */\n  if (no_default_sh_exe)\n    no_default_sh_exe = !find_and_set_default_shell(NULL);\n#endif /* WINDOWS32 */\n\n#if defined (__MSDOS__) || defined (__EMX__)\n  /* We need to know what kind of shell we will be using.  */\n  {\n    extern int _is_unixy_shell (const char *_path);\n    struct variable *shv = lookup_variable (STRING_SIZE_TUPLE (\"SHELL\"));\n    extern int unixy_shell;\n    extern char *default_shell;\n\n    if (shv && *shv->value)\n      {\n\tchar *shell_path = recursively_expand(shv);\n\n\tif (shell_path && _is_unixy_shell (shell_path))\n\t  unixy_shell = 1;\n\telse\n\t  unixy_shell = 0;\n\tif (shell_path)\n\t  default_shell = shell_path;\n      }\n  }\n#endif /* __MSDOS__ || __EMX__ */\n\n  /* Decode switches again, in case the variables were set by the makefile.  */\n  decode_env_switches (STRING_SIZE_TUPLE (\"MAKEFLAGS\"));\n#if 0\n  decode_env_switches (STRING_SIZE_TUPLE (\"MFLAGS\"));\n#endif\n\n#if defined (__MSDOS__) || defined (__EMX__)\n  if (job_slots != 1\n# ifdef __EMX__\n      && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */\n# endif\n      )\n    {\n      error (NILF,\n             _(\"Parallel jobs (-j) are not supported on this platform.\"));\n      error (NILF, _(\"Resetting to single job (-j1) mode.\"));\n      job_slots = 1;\n    }\n#endif\n\n#ifdef MAKE_JOBSERVER\n  /* If the jobserver-fds option is seen, make sure that -j is reasonable.  */\n\n  if (jobserver_fds)\n  {\n    char *cp;\n    unsigned int ui;\n\n    for (ui=1; ui < jobserver_fds->idx; ++ui)\n      if (!streq (jobserver_fds->list[0], jobserver_fds->list[ui]))\n        fatal (NILF, _(\"internal error: multiple --jobserver-fds options\"));\n\n    /* Now parse the fds string and make sure it has the proper format.  */\n\n    cp = jobserver_fds->list[0];\n\n    if (sscanf (cp, \"%d,%d\", &job_fds[0], &job_fds[1]) != 2)\n      fatal (NILF,\n             _(\"internal error: invalid --jobserver-fds string `%s'\"), cp);\n\n    /* The combination of a pipe + !job_slots means we're using the\n       jobserver.  If !job_slots and we don't have a pipe, we can start\n       infinite jobs.  If we see both a pipe and job_slots >0 that means the\n       user set -j explicitly.  This is broken; in this case obey the user\n       (ignore the jobserver pipe for this make) but print a message.  */\n\n    if (job_slots > 0)\n      error (NILF,\n             _(\"warning: -jN forced in submake: disabling jobserver mode.\"));\n\n    /* Create a duplicate pipe, that will be closed in the SIGCHLD\n       handler.  If this fails with EBADF, the parent has closed the pipe\n       on us because it didn't think we were a submake.  If so, print a\n       warning then default to -j1.  */\n\n    else if ((job_rfd = dup (job_fds[0])) < 0)\n      {\n        if (errno != EBADF)\n          pfatal_with_name (_(\"dup jobserver\"));\n\n        error (NILF,\n               _(\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"));\n        job_slots = 1;\n      }\n\n    if (job_slots > 0)\n      {\n        close (job_fds[0]);\n        close (job_fds[1]);\n        job_fds[0] = job_fds[1] = -1;\n        free (jobserver_fds->list);\n        free (jobserver_fds);\n        jobserver_fds = 0;\n      }\n  }\n\n  /* If we have >1 slot but no jobserver-fds, then we're a top-level make.\n     Set up the pipe and install the fds option for our children.  */\n\n  if (job_slots > 1)\n    {\n      char c = '+';\n\n      if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)\n\tpfatal_with_name (_(\"creating jobs pipe\"));\n\n      /* Every make assumes that it always has one job it can run.  For the\n         submakes it's the token they were given by their parent.  For the\n         top make, we just subtract one from the number the user wants.  We\n         want job_slots to be 0 to indicate we're using the jobserver.  */\n\n      master_job_slots = job_slots;\n\n      while (--job_slots)\n        {\n          int r;\n\n          EINTRLOOP (r, write (job_fds[1], &c, 1));\n          if (r != 1)\n            pfatal_with_name (_(\"init jobserver pipe\"));\n        }\n\n      /* Fill in the jobserver_fds struct for our children.  */\n\n      jobserver_fds = (struct stringlist *)\n                        xmalloc (sizeof (struct stringlist));\n      jobserver_fds->list = (char **) xmalloc (sizeof (char *));\n      jobserver_fds->list[0] = xmalloc ((sizeof (\"1024\")*2)+1);\n\n      sprintf (jobserver_fds->list[0], \"%d,%d\", job_fds[0], job_fds[1]);\n      jobserver_fds->idx = 1;\n      jobserver_fds->max = 1;\n    }\n#endif\n\n#ifndef MAKE_SYMLINKS\n  if (check_symlink_flag)\n    {\n      error (NILF, _(\"Symbolic links not supported: disabling -L.\"));\n      check_symlink_flag = 0;\n    }\n#endif\n\n  /* Set up MAKEFLAGS and MFLAGS again, so they will be right.  */\n\n  define_makeflags (1, 0);\n\n  /* Make each `struct dep' point at the `struct file' for the file\n     depended on.  Also do magic for special targets.  */\n\n  snap_deps ();\n\n  /* Convert old-style suffix rules to pattern rules.  It is important to\n     do this before installing the built-in pattern rules below, so that\n     makefile-specified suffix rules take precedence over built-in pattern\n     rules.  */\n\n  convert_to_pattern ();\n\n  /* Install the default implicit pattern rules.\n     This used to be done before reading the makefiles.\n     But in that case, built-in pattern rules were in the chain\n     before user-defined ones, so they matched first.  */\n\n  install_default_implicit_rules ();\n\n  /* Compute implicit rule limits.  */\n\n  count_implicit_rule_limits ();\n\n  /* Construct the listings of directories in VPATH lists.  */\n\n  build_vpath_lists ();\n\n  /* Mark files given with -o flags as very old and as having been updated\n     already, and files given with -W flags as brand new (time-stamp as far\n     as possible into the future).  If restarts is set we'll do -W later.  */\n\n  if (old_files != 0)\n    for (p = old_files->list; *p != 0; ++p)\n      {\n\tf = enter_command_line_file (*p);\n\tf->last_mtime = f->mtime_before_update = OLD_MTIME;\n\tf->updated = 1;\n\tf->update_status = 0;\n\tf->command_state = cs_finished;\n      }\n\n  if (!restarts && new_files != 0)\n    {\n      for (p = new_files->list; *p != 0; ++p)\n\t{\n\t  f = enter_command_line_file (*p);\n\t  f->last_mtime = f->mtime_before_update = NEW_MTIME;\n\t}\n    }\n\n  /* Initialize the remote job module.  */\n  remote_setup ();\n\n  if (read_makefiles != 0)\n    {\n      /* Update any makefiles if necessary.  */\n\n      FILE_TIMESTAMP *makefile_mtimes = 0;\n      unsigned int mm_idx = 0;\n      char **nargv = argv;\n      int nargc = argc;\n      int orig_db_level = db_level;\n      int status;\n\n      if (! ISDB (DB_MAKEFILES))\n        db_level = DB_NONE;\n\n      DB (DB_BASIC, (_(\"Updating makefiles....\\n\")));\n\n      /* Remove any makefiles we don't want to try to update.\n\t Also record the current modtimes so we can compare them later.  */\n      {\n\tregister struct dep *d, *last;\n\tlast = 0;\n\td = read_makefiles;\n\twhile (d != 0)\n\t  {\n\t    register struct file *f = d->file;\n\t    if (f->double_colon)\n\t      for (f = f->double_colon; f != NULL; f = f->prev)\n\t\t{\n\t\t  if (f->deps == 0 && f->cmds != 0)\n\t\t    {\n\t\t      /* This makefile is a :: target with commands, but\n\t\t\t no dependencies.  So, it will always be remade.\n\t\t\t This might well cause an infinite loop, so don't\n\t\t\t try to remake it.  (This will only happen if\n\t\t\t your makefiles are written exceptionally\n\t\t\t stupidly; but if you work for Athena, that's how\n\t\t\t you write your makefiles.)  */\n\n\t\t      DB (DB_VERBOSE,\n                          (_(\"Makefile `%s' might loop; not remaking it.\\n\"),\n                           f->name));\n\n\t\t      if (last == 0)\n\t\t\tread_makefiles = d->next;\n\t\t      else\n\t\t\tlast->next = d->next;\n\n\t\t      /* Free the storage.  */\n                      free_dep (d);\n\n\t\t      d = last == 0 ? read_makefiles : last->next;\n\n\t\t      break;\n\t\t    }\n\t\t}\n\t    if (f == NULL || !f->double_colon)\n\t      {\n                makefile_mtimes = (FILE_TIMESTAMP *)\n                  xrealloc ((char *) makefile_mtimes,\n                            (mm_idx + 1) * sizeof (FILE_TIMESTAMP));\n\t\tmakefile_mtimes[mm_idx++] = file_mtime_no_search (d->file);\n\t\tlast = d;\n\t\td = d->next;\n\t      }\n\t  }\n      }\n\n      /* Set up `MAKEFLAGS' specially while remaking makefiles.  */\n      define_makeflags (1, 1);\n\n      rebuilding_makefiles = 1;\n      status = update_goal_chain (read_makefiles);\n      rebuilding_makefiles = 0;\n\n      switch (status)\n\t{\n\tcase 1:\n          /* The only way this can happen is if the user specified -q and asked\n           * for one of the makefiles to be remade as a target on the command\n           * line.  Since we're not actually updating anything with -q we can\n           * treat this as \"did nothing\".\n           */\n\n\tcase -1:\n\t  /* Did nothing.  */\n\t  break;\n\n\tcase 2:\n\t  /* Failed to update.  Figure out if we care.  */\n\t  {\n\t    /* Nonzero if any makefile was successfully remade.  */\n\t    int any_remade = 0;\n\t    /* Nonzero if any makefile we care about failed\n\t       in updating or could not be found at all.  */\n\t    int any_failed = 0;\n\t    unsigned int i;\n            struct dep *d;\n\n\t    for (i = 0, d = read_makefiles; d != 0; ++i, d = d->next)\n              {\n                /* Reset the considered flag; we may need to look at the file\n                   again to print an error.  */\n                d->file->considered = 0;\n\n                if (d->file->updated)\n                  {\n                    /* This makefile was updated.  */\n                    if (d->file->update_status == 0)\n                      {\n                        /* It was successfully updated.  */\n                        any_remade |= (file_mtime_no_search (d->file)\n                                       != makefile_mtimes[i]);\n                      }\n                    else if (! (d->changed & RM_DONTCARE))\n                      {\n                        FILE_TIMESTAMP mtime;\n                        /* The update failed and this makefile was not\n                           from the MAKEFILES variable, so we care.  */\n                        error (NILF, _(\"Failed to remake makefile `%s'.\"),\n                               d->file->name);\n                        mtime = file_mtime_no_search (d->file);\n                        any_remade |= (mtime != NONEXISTENT_MTIME\n                                       && mtime != makefile_mtimes[i]);\n                        makefile_status = MAKE_FAILURE;\n                      }\n                  }\n                else\n                  /* This makefile was not found at all.  */\n                  if (! (d->changed & RM_DONTCARE))\n                    {\n                      /* This is a makefile we care about.  See how much.  */\n                      if (d->changed & RM_INCLUDED)\n                        /* An included makefile.  We don't need\n                           to die, but we do want to complain.  */\n                        error (NILF,\n                               _(\"Included makefile `%s' was not found.\"),\n                               dep_name (d));\n                      else\n                        {\n                          /* A normal makefile.  We must die later.  */\n                          error (NILF, _(\"Makefile `%s' was not found\"),\n                                 dep_name (d));\n                          any_failed = 1;\n                        }\n                    }\n              }\n            /* Reset this to empty so we get the right error message below.  */\n            read_makefiles = 0;\n\n\t    if (any_remade)\n\t      goto re_exec;\n\t    if (any_failed)\n\t      die (2);\n            break;\n\t  }\n\n\tcase 0:\n\tre_exec:\n\t  /* Updated successfully.  Re-exec ourselves.  */\n\n\t  remove_intermediates (0);\n\n\t  if (print_data_base_flag)\n\t    print_data_base ();\n\n\t  log_working_directory (0);\n\n          clean_jobserver (0);\n\n\t  if (makefiles != 0)\n\t    {\n\t      /* These names might have changed.  */\n\t      int i, j = 0;\n\t      for (i = 1; i < argc; ++i)\n\t\tif (strneq (argv[i], \"-f\", 2)) /* XXX */\n\t\t  {\n\t\t    char *p = &argv[i][2];\n\t\t    if (*p == '\\0')\n\t\t      argv[++i] = makefiles->list[j];\n\t\t    else\n\t\t      argv[i] = concat (\"-f\", makefiles->list[j], \"\");\n\t\t    ++j;\n\t\t  }\n\t    }\n\n          /* Add -o option for the stdin temporary file, if necessary.  */\n          if (stdin_nm)\n            {\n              nargv = (char **) xmalloc ((nargc + 2) * sizeof (char *));\n              bcopy ((char *) argv, (char *) nargv, argc * sizeof (char *));\n              nargv[nargc++] = concat (\"-o\", stdin_nm, \"\");\n              nargv[nargc] = 0;\n            }\n\n\t  if (directories != 0 && directories->idx > 0)\n\t    {\n\t      char bad;\n\t      if (directory_before_chdir != 0)\n\t\t{\n\t\t  if (chdir (directory_before_chdir) < 0)\n\t\t    {\n\t\t      perror_with_name (\"chdir\", \"\");\n\t\t      bad = 1;\n\t\t    }\n\t\t  else\n\t\t    bad = 0;\n\t\t}\n\t      else\n\t\tbad = 1;\n\t      if (bad)\n\t\tfatal (NILF, _(\"Couldn't change back to original directory.\"));\n\t    }\n\n          ++restarts;\n\n\t  if (ISDB (DB_BASIC))\n\t    {\n\t      char **p;\n\t      printf (_(\"Re-executing[%u]:\"), restarts);\n\t      for (p = nargv; *p != 0; ++p)\n\t\tprintf (\" %s\", *p);\n\t      putchar ('\\n');\n\t    }\n\n#ifndef _AMIGA\n\t  for (p = environ; *p != 0; ++p)\n            {\n              if (strneq (*p, MAKELEVEL_NAME, MAKELEVEL_LENGTH)\n                  && (*p)[MAKELEVEL_LENGTH] == '=')\n                {\n                  /* The SGI compiler apparently can't understand\n                     the concept of storing the result of a function\n                     in something other than a local variable.  */\n                  char *sgi_loses;\n                  sgi_loses = (char *) alloca (40);\n                  *p = sgi_loses;\n                  sprintf (*p, \"%s=%u\", MAKELEVEL_NAME, makelevel);\n                }\n              if (strneq (*p, \"MAKE_RESTARTS=\", 14))\n                {\n                  char *sgi_loses;\n                  sgi_loses = (char *) alloca (40);\n                  *p = sgi_loses;\n                  sprintf (*p, \"MAKE_RESTARTS=%u\", restarts);\n                  restarts = 0;\n                }\n            }\n#else /* AMIGA */\n\t  {\n\t    char buffer[256];\n\n            sprintf (buffer, \"%u\", makelevel);\n            SetVar (MAKELEVEL_NAME, buffer, -1, GVF_GLOBAL_ONLY);\n\n            sprintf (buffer, \"%u\", restarts);\n            SetVar (\"MAKE_RESTARTS\", buffer, -1, GVF_GLOBAL_ONLY);\n            restarts = 0;\n\t  }\n#endif\n\n          /* If we didn't set the restarts variable yet, add it.  */\n          if (restarts)\n            {\n              char *b = alloca (40);\n              sprintf (b, \"MAKE_RESTARTS=%u\", restarts);\n              putenv (b);\n            }\n\n\t  fflush (stdout);\n\t  fflush (stderr);\n\n          /* Close the dup'd jobserver pipe if we opened one.  */\n          if (job_rfd >= 0)\n            close (job_rfd);\n\n#ifdef _AMIGA\n\t  exec_command (nargv);\n\t  exit (0);\n#elif defined (__EMX__)\n\t  {\n\t    /* It is not possible to use execve() here because this\n\t       would cause the parent process to be terminated with\n\t       exit code 0 before the child process has been terminated.\n\t       Therefore it may be the best solution simply to spawn the\n\t       child process including all file handles and to wait for its\n\t       termination. */\n\t    int pid;\n\t    int status;\n\t    pid = child_execute_job (0, 1, nargv, environ);\n\n\t    /* is this loop really necessary? */\n\t    do {\n\t      pid = wait (&status);\n\t    } while (pid <= 0);\n\t    /* use the exit code of the child process */\n\t    exit (WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);\n\t  }\n#else\n\t  exec_command (nargv, environ);\n#endif\n\t  /* NOTREACHED */\n\n\tdefault:\n#define BOGUS_UPDATE_STATUS 0\n\t  assert (BOGUS_UPDATE_STATUS);\n\t  break;\n\t}\n\n      db_level = orig_db_level;\n\n      /* Free the makefile mtimes (if we allocated any).  */\n      if (makefile_mtimes)\n        free ((char *) makefile_mtimes);\n    }\n\n  /* Set up `MAKEFLAGS' again for the normal targets.  */\n  define_makeflags (1, 0);\n\n  /* Set always_make_flag if -B was given.  */\n  always_make_flag = always_make_set;\n\n  /* If restarts is set we haven't set up -W files yet, so do that now.  */\n  if (restarts && new_files != 0)\n    {\n      for (p = new_files->list; *p != 0; ++p)\n\t{\n\t  f = enter_command_line_file (*p);\n\t  f->last_mtime = f->mtime_before_update = NEW_MTIME;\n\t}\n    }\n\n  /* If there is a temp file from reading a makefile from stdin, get rid of\n     it now.  */\n  if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT)\n    perror_with_name (_(\"unlink (temporary file): \"), stdin_nm);\n\n  {\n    int status;\n\n    /* If there were no command-line goals, use the default.  */\n    if (goals == 0)\n      {\n        if (**default_goal_name != '\\0')\n          {\n            if (default_goal_file == 0 ||\n                strcmp (*default_goal_name, default_goal_file->name) != 0)\n              {\n                default_goal_file = lookup_file (*default_goal_name);\n\n                /* In case user set .DEFAULT_GOAL to a non-existent target\n                   name let's just enter this name into the table and let\n                   the standard logic sort it out. */\n                if (default_goal_file == 0)\n                  {\n                    struct nameseq *ns;\n                    char *p = *default_goal_name;\n\n                    ns = multi_glob (\n                      parse_file_seq (&p, '\\0', sizeof (struct nameseq), 1),\n                      sizeof (struct nameseq));\n\n                    /* .DEFAULT_GOAL should contain one target. */\n                    if (ns->next != 0)\n                      fatal (NILF, _(\".DEFAULT_GOAL contains more than one target\"));\n\n                    default_goal_file = enter_file (ns->name);\n\n                    ns->name = 0; /* It was reused by enter_file(). */\n                    free_ns_chain (ns);\n                  }\n              }\n\n            goals = alloc_dep ();\n            goals->file = default_goal_file;\n          }\n      }\n    else\n      lastgoal->next = 0;\n\n\n    if (!goals)\n      {\n        if (read_makefiles == 0)\n          fatal (NILF, _(\"No targets specified and no makefile found\"));\n\n        fatal (NILF, _(\"No targets\"));\n      }\n\n    /* Update the goals.  */\n\n    DB (DB_BASIC, (_(\"Updating goal targets....\\n\")));\n\n    switch (update_goal_chain (goals))\n    {\n      case -1:\n        /* Nothing happened.  */\n      case 0:\n        /* Updated successfully.  */\n        status = makefile_status;\n        break;\n      case 1:\n        /* We are under -q and would run some commands.  */\n        status = MAKE_TROUBLE;\n        break;\n      case 2:\n        /* Updating failed.  POSIX.2 specifies exit status >1 for this;\n           but in VMS, there is only success and failure.  */\n        status = MAKE_FAILURE;\n        break;\n      default:\n        abort ();\n    }\n\n    /* If we detected some clock skew, generate one last warning */\n    if (clock_skew_detected)\n      error (NILF,\n             _(\"warning:  Clock skew detected.  Your build may be incomplete.\"));\n\n    /* Exit.  */\n    die (status);\n  }\n\n  /* NOTREACHED */\n  return 0;\n}\n\f\n/* Parsing of arguments, decoding of switches.  */\n\nstatic char options[1 + sizeof (switches) / sizeof (switches[0]) * 3];\nstatic struct option long_options[(sizeof (switches) / sizeof (switches[0])) +\n\t\t\t\t  (sizeof (long_option_aliases) /\n\t\t\t\t   sizeof (long_option_aliases[0]))];\n\n/* Fill in the string and vector for getopt.  */\nstatic void\ninit_switches (void)\n{\n  char *p;\n  unsigned int c;\n  unsigned int i;\n\n  if (options[0] != '\\0')\n    /* Already done.  */\n    return;\n\n  p = options;\n\n  /* Return switch and non-switch args in order, regardless of\n     POSIXLY_CORRECT.  Non-switch args are returned as option 1.  */\n  *p++ = '-';\n\n  for (i = 0; switches[i].c != '\\0'; ++i)\n    {\n      long_options[i].name = (switches[i].long_name == 0 ? \"\" :\n\t\t\t      switches[i].long_name);\n      long_options[i].flag = 0;\n      long_options[i].val = switches[i].c;\n      if (short_option (switches[i].c))\n\t*p++ = switches[i].c;\n      switch (switches[i].type)\n\t{\n\tcase flag:\n\tcase flag_off:\n\tcase ignore:\n\t  long_options[i].has_arg = no_argument;\n\t  break;\n\n\tcase string:\n\tcase positive_int:\n\tcase floating:\n\t  if (short_option (switches[i].c))\n\t    *p++ = ':';\n\t  if (switches[i].noarg_value != 0)\n\t    {\n\t      if (short_option (switches[i].c))\n\t\t*p++ = ':';\n\t      long_options[i].has_arg = optional_argument;\n\t    }\n\t  else\n\t    long_options[i].has_arg = required_argument;\n\t  break;\n\t}\n    }\n  *p = '\\0';\n  for (c = 0; c < (sizeof (long_option_aliases) /\n\t\t   sizeof (long_option_aliases[0]));\n       ++c)\n    long_options[i++] = long_option_aliases[c];\n  long_options[i].name = 0;\n}\n\nstatic void\nhandle_non_switch_argument (char *arg, int env)\n{\n  /* Non-option argument.  It might be a variable definition.  */\n  struct variable *v;\n  if (arg[0] == '-' && arg[1] == '\\0')\n    /* Ignore plain `-' for compatibility.  */\n    return;\n  v = try_variable_definition (0, arg, o_command, 0);\n  if (v != 0)\n    {\n      /* It is indeed a variable definition.  If we don't already have this\n\t one, record a pointer to the variable for later use in\n\t define_makeflags.  */\n      struct command_variable *cv;\n\n      for (cv = command_variables; cv != 0; cv = cv->next)\n        if (cv->variable == v)\n          break;\n\n      if (! cv) {\n        cv = (struct command_variable *) xmalloc (sizeof (*cv));\n        cv->variable = v;\n        cv->next = command_variables;\n        command_variables = cv;\n      }\n    }\n  else if (! env)\n    {\n      /* Not an option or variable definition; it must be a goal\n\t target!  Enter it as a file and add it to the dep chain of\n\t goals.  */\n      struct file *f = enter_command_line_file (arg);\n      f->cmd_target = 1;\n\n      if (goals == 0)\n\t{\n\t  goals = alloc_dep ();\n\t  lastgoal = goals;\n\t}\n      else\n\t{\n\t  lastgoal->next = alloc_dep ();\n\t  lastgoal = lastgoal->next;\n\t}\n\n      lastgoal->file = f;\n\n      {\n        /* Add this target name to the MAKECMDGOALS variable. */\n        struct variable *v;\n        char *value;\n\n        v = lookup_variable (STRING_SIZE_TUPLE (\"MAKECMDGOALS\"));\n        if (v == 0)\n          value = f->name;\n        else\n          {\n            /* Paste the old and new values together */\n            unsigned int oldlen, newlen;\n\n            oldlen = strlen (v->value);\n            newlen = strlen (f->name);\n            value = (char *) alloca (oldlen + 1 + newlen + 1);\n            bcopy (v->value, value, oldlen);\n            value[oldlen] = ' ';\n            bcopy (f->name, &value[oldlen + 1], newlen + 1);\n          }\n        define_variable (\"MAKECMDGOALS\", 12, value, o_default, 0);\n      }\n    }\n}\n\n/* Print a nice usage method.  */\n\nstatic void\nprint_usage (int bad)\n{\n  const char *const *cpp;\n  FILE *usageto;\n\n  if (print_version_flag)\n    print_version ();\n\n  usageto = bad ? stderr : stdout;\n\n  fprintf (usageto, _(\"Usage: %s [options] [target] ...\\n\"), program);\n\n  for (cpp = usage; *cpp; ++cpp)\n    fputs (_(*cpp), usageto);\n\n  if (!remote_description || *remote_description == '\\0')\n    fprintf (usageto, _(\"\\nThis program built for %s\\n\"), make_host);\n  else\n    fprintf (usageto, _(\"\\nThis program built for %s (%s)\\n\"),\n             make_host, remote_description);\n\n  fprintf (usageto, _(\"Report bugs to <bug-make@gnu.org>\\n\"));\n}\n\n/* Decode switches from ARGC and ARGV.\n   They came from the environment if ENV is nonzero.  */\n\nstatic void\ndecode_switches (int argc, char **argv, int env)\n{\n  int bad = 0;\n  register const struct command_switch *cs;\n  register struct stringlist *sl;\n  register int c;\n\n  /* getopt does most of the parsing for us.\n     First, get its vectors set up.  */\n\n  init_switches ();\n\n  /* Let getopt produce error messages for the command line,\n     but not for options from the environment.  */\n  opterr = !env;\n  /* Reset getopt's state.  */\n  optind = 0;\n\n  while (optind < argc)\n    {\n      /* Parse the next argument.  */\n      c = getopt_long (argc, argv, options, long_options, (int *) 0);\n      if (c == EOF)\n\t/* End of arguments, or \"--\" marker seen.  */\n\tbreak;\n      else if (c == 1)\n\t/* An argument not starting with a dash.  */\n\thandle_non_switch_argument (optarg, env);\n      else if (c == '?')\n\t/* Bad option.  We will print a usage message and die later.\n\t   But continue to parse the other options so the user can\n\t   see all he did wrong.  */\n\tbad = 1;\n      else\n\tfor (cs = switches; cs->c != '\\0'; ++cs)\n\t  if (cs->c == c)\n\t    {\n\t      /* Whether or not we will actually do anything with\n\t\t this switch.  We test this individually inside the\n\t\t switch below rather than just once outside it, so that\n\t\t options which are to be ignored still consume args.  */\n\t      int doit = !env || cs->env;\n\n\t      switch (cs->type)\n\t\t{\n\t\tdefault:\n\t\t  abort ();\n\n\t\tcase ignore:\n\t\t  break;\n\n\t\tcase flag:\n\t\tcase flag_off:\n\t\t  if (doit)\n\t\t    *(int *) cs->value_ptr = cs->type == flag;\n\t\t  break;\n\n\t\tcase string:\n\t\t  if (!doit)\n\t\t    break;\n\n\t\t  if (optarg == 0)\n\t\t    optarg = cs->noarg_value;\n                  else if (*optarg == '\\0')\n                    {\n                      error (NILF, _(\"the `-%c' option requires a non-empty string argument\"),\n                             cs->c);\n                      bad = 1;\n                    }\n\n\t\t  sl = *(struct stringlist **) cs->value_ptr;\n\t\t  if (sl == 0)\n\t\t    {\n\t\t      sl = (struct stringlist *)\n\t\t\txmalloc (sizeof (struct stringlist));\n\t\t      sl->max = 5;\n\t\t      sl->idx = 0;\n\t\t      sl->list = (char **) xmalloc (5 * sizeof (char *));\n\t\t      *(struct stringlist **) cs->value_ptr = sl;\n\t\t    }\n\t\t  else if (sl->idx == sl->max - 1)\n\t\t    {\n\t\t      sl->max += 5;\n\t\t      sl->list = (char **)\n\t\t\txrealloc ((char *) sl->list,\n\t\t\t\t  sl->max * sizeof (char *));\n\t\t    }\n\t\t  sl->list[sl->idx++] = optarg;\n\t\t  sl->list[sl->idx] = 0;\n\t\t  break;\n\n\t\tcase positive_int:\n                  /* See if we have an option argument; if we do require that\n                     it's all digits, not something like \"10foo\".  */\n\t\t  if (optarg == 0 && argc > optind)\n                    {\n                      const char *cp;\n                      for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp)\n                        ;\n                      if (cp[0] == '\\0')\n                        optarg = argv[optind++];\n                    }\n\n\t\t  if (!doit)\n\t\t    break;\n\n\t\t  if (optarg != 0)\n\t\t    {\n\t\t      int i = atoi (optarg);\n                      const char *cp;\n\n                      /* Yes, I realize we're repeating this in some cases.  */\n                      for (cp = optarg; ISDIGIT (cp[0]); ++cp)\n                        ;\n\n\t\t      if (i < 1 || cp[0] != '\\0')\n\t\t\t{\n                          error (NILF, _(\"the `-%c' option requires a positive integral argument\"),\n                                 cs->c);\n\t\t\t  bad = 1;\n\t\t\t}\n\t\t      else\n\t\t\t*(unsigned int *) cs->value_ptr = i;\n\t\t    }\n\t\t  else\n\t\t    *(unsigned int *) cs->value_ptr\n\t\t      = *(unsigned int *) cs->noarg_value;\n\t\t  break;\n\n#ifndef NO_FLOAT\n\t\tcase floating:\n\t\t  if (optarg == 0 && optind < argc\n\t\t      && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.'))\n\t\t    optarg = argv[optind++];\n\n\t\t  if (doit)\n\t\t    *(double *) cs->value_ptr\n\t\t      = (optarg != 0 ? atof (optarg)\n\t\t\t : *(double *) cs->noarg_value);\n\n\t\t  break;\n#endif\n\t\t}\n\n\t      /* We've found the switch.  Stop looking.  */\n\t      break;\n\t    }\n    }\n\n  /* There are no more options according to getting getopt, but there may\n     be some arguments left.  Since we have asked for non-option arguments\n     to be returned in order, this only happens when there is a \"--\"\n     argument to prevent later arguments from being options.  */\n  while (optind < argc)\n    handle_non_switch_argument (argv[optind++], env);\n\n\n  if (!env && (bad || print_usage_flag))\n    {\n      print_usage (bad);\n      die (bad ? 2 : 0);\n    }\n}\n\n/* Decode switches from environment variable ENVAR (which is LEN chars long).\n   We do this by chopping the value into a vector of words, prepending a\n   dash to the first word if it lacks one, and passing the vector to\n   decode_switches.  */\n\nstatic void\ndecode_env_switches (char *envar, unsigned int len)\n{\n  char *varref = (char *) alloca (2 + len + 2);\n  char *value, *p;\n  int argc;\n  char **argv;\n\n  /* Get the variable's value.  */\n  varref[0] = '$';\n  varref[1] = '(';\n  bcopy (envar, &varref[2], len);\n  varref[2 + len] = ')';\n  varref[2 + len + 1] = '\\0';\n  value = variable_expand (varref);\n\n  /* Skip whitespace, and check for an empty value.  */\n  value = next_token (value);\n  len = strlen (value);\n  if (len == 0)\n    return;\n\n  /* Allocate a vector that is definitely big enough.  */\n  argv = (char **) alloca ((1 + len + 1) * sizeof (char *));\n\n  /* Allocate a buffer to copy the value into while we split it into words\n     and unquote it.  We must use permanent storage for this because\n     decode_switches may store pointers into the passed argument words.  */\n  p = (char *) xmalloc (2 * len);\n\n  /* getopt will look at the arguments starting at ARGV[1].\n     Prepend a spacer word.  */\n  argv[0] = 0;\n  argc = 1;\n  argv[argc] = p;\n  while (*value != '\\0')\n    {\n      if (*value == '\\\\' && value[1] != '\\0')\n\t++value;\t\t/* Skip the backslash.  */\n      else if (isblank ((unsigned char)*value))\n\t{\n\t  /* End of the word.  */\n\t  *p++ = '\\0';\n\t  argv[++argc] = p;\n\t  do\n\t    ++value;\n\t  while (isblank ((unsigned char)*value));\n\t  continue;\n\t}\n      *p++ = *value++;\n    }\n  *p = '\\0';\n  argv[++argc] = 0;\n\n  if (argv[1][0] != '-' && strchr (argv[1], '=') == 0)\n    /* The first word doesn't start with a dash and isn't a variable\n       definition.  Add a dash and pass it along to decode_switches.  We\n       need permanent storage for this in case decode_switches saves\n       pointers into the value.  */\n    argv[1] = concat (\"-\", argv[1], \"\");\n\n  /* Parse those words.  */\n  decode_switches (argc, argv, 1);\n}\n\f\n/* Quote the string IN so that it will be interpreted as a single word with\n   no magic by decode_env_switches; also double dollar signs to avoid\n   variable expansion in make itself.  Write the result into OUT, returning\n   the address of the next character to be written.\n   Allocating space for OUT twice the length of IN is always sufficient.  */\n\nstatic char *\nquote_for_env (char *out, char *in)\n{\n  while (*in != '\\0')\n    {\n      if (*in == '$')\n\t*out++ = '$';\n      else if (isblank ((unsigned char)*in) || *in == '\\\\')\n        *out++ = '\\\\';\n      *out++ = *in++;\n    }\n\n  return out;\n}\n\n/* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the\n   command switches.  Include options with args if ALL is nonzero.\n   Don't include options with the `no_makefile' flag set if MAKEFILE.  */\n\nstatic void\ndefine_makeflags (int all, int makefile)\n{\n  static const char ref[] = \"$(MAKEOVERRIDES)\";\n  static const char posixref[] = \"$(-*-command-variables-*-)\";\n  register const struct command_switch *cs;\n  char *flagstring;\n  register char *p;\n  unsigned int words;\n  struct variable *v;\n\n  /* We will construct a linked list of `struct flag's describing\n     all the flags which need to go in MAKEFLAGS.  Then, once we\n     know how many there are and their lengths, we can put them all\n     together in a string.  */\n\n  struct flag\n    {\n      struct flag *next;\n      const struct command_switch *cs;\n      char *arg;\n    };\n  struct flag *flags = 0;\n  unsigned int flagslen = 0;\n#define\tADD_FLAG(ARG, LEN) \\\n  do {\t\t\t\t\t\t\t\t\t      \\\n    struct flag *new = (struct flag *) alloca (sizeof (struct flag));\t      \\\n    new->cs = cs;\t\t\t\t\t\t\t      \\\n    new->arg = (ARG);\t\t\t\t\t\t\t      \\\n    new->next = flags;\t\t\t\t\t\t\t      \\\n    flags = new;\t\t\t\t\t\t\t      \\\n    if (new->arg == 0)\t\t\t\t\t\t\t      \\\n      ++flagslen;\t\t/* Just a single flag letter.  */\t      \\\n    else\t\t\t\t\t\t\t\t      \\\n      flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* \" -x foo\" */\t\t      \\\n    if (!short_option (cs->c))\t\t\t\t\t\t      \\\n      /* This switch has no single-letter version, so we use the long.  */    \\\n      flagslen += 2 + strlen (cs->long_name);\t\t\t\t      \\\n  } while (0)\n\n  for (cs = switches; cs->c != '\\0'; ++cs)\n    if (cs->toenv && (!makefile || !cs->no_makefile))\n      switch (cs->type)\n\t{\n\tdefault:\n\t  abort ();\n\n\tcase ignore:\n\t  break;\n\n\tcase flag:\n\tcase flag_off:\n\t  if (!*(int *) cs->value_ptr == (cs->type == flag_off)\n\t      && (cs->default_value == 0\n\t\t  || *(int *) cs->value_ptr != *(int *) cs->default_value))\n\t    ADD_FLAG (0, 0);\n\t  break;\n\n\tcase positive_int:\n\t  if (all)\n\t    {\n\t      if ((cs->default_value != 0\n\t\t   && (*(unsigned int *) cs->value_ptr\n\t\t       == *(unsigned int *) cs->default_value)))\n\t\tbreak;\n\t      else if (cs->noarg_value != 0\n\t\t       && (*(unsigned int *) cs->value_ptr ==\n\t\t\t   *(unsigned int *) cs->noarg_value))\n\t\tADD_FLAG (\"\", 0); /* Optional value omitted; see below.  */\n\t      else if (cs->c == 'j')\n\t\t/* Special case for `-j'.  */\n\t\tADD_FLAG (\"1\", 1);\n\t      else\n\t\t{\n\t\t  char *buf = (char *) alloca (30);\n\t\t  sprintf (buf, \"%u\", *(unsigned int *) cs->value_ptr);\n\t\t  ADD_FLAG (buf, strlen (buf));\n\t\t}\n\t    }\n\t  break;\n\n#ifndef NO_FLOAT\n\tcase floating:\n\t  if (all)\n\t    {\n\t      if (cs->default_value != 0\n\t\t  && (*(double *) cs->value_ptr\n\t\t      == *(double *) cs->default_value))\n\t\tbreak;\n\t      else if (cs->noarg_value != 0\n\t\t       && (*(double *) cs->value_ptr\n\t\t\t   == *(double *) cs->noarg_value))\n\t\tADD_FLAG (\"\", 0); /* Optional value omitted; see below.  */\n\t      else\n\t\t{\n\t\t  char *buf = (char *) alloca (100);\n\t\t  sprintf (buf, \"%g\", *(double *) cs->value_ptr);\n\t\t  ADD_FLAG (buf, strlen (buf));\n\t\t}\n\t    }\n\t  break;\n#endif\n\n\tcase string:\n\t  if (all)\n\t    {\n\t      struct stringlist *sl = *(struct stringlist **) cs->value_ptr;\n\t      if (sl != 0)\n\t\t{\n\t\t  /* Add the elements in reverse order, because\n\t\t     all the flags get reversed below; and the order\n\t\t     matters for some switches (like -I).  */\n\t\t  register unsigned int i = sl->idx;\n\t\t  while (i-- > 0)\n\t\t    ADD_FLAG (sl->list[i], strlen (sl->list[i]));\n\t\t}\n\t    }\n\t  break;\n\t}\n\n  flagslen += 4 + sizeof posixref; /* Four more for the possible \" -- \".  */\n\n#undef\tADD_FLAG\n\n  /* Construct the value in FLAGSTRING.\n     We allocate enough space for a preceding dash and trailing null.  */\n  flagstring = (char *) alloca (1 + flagslen + 1);\n  bzero (flagstring, 1 + flagslen + 1);\n  p = flagstring;\n  words = 1;\n  *p++ = '-';\n  while (flags != 0)\n    {\n      /* Add the flag letter or name to the string.  */\n      if (short_option (flags->cs->c))\n\t*p++ = flags->cs->c;\n      else\n\t{\n          if (*p != '-')\n            {\n              *p++ = ' ';\n              *p++ = '-';\n            }\n\t  *p++ = '-';\n\t  strcpy (p, flags->cs->long_name);\n\t  p += strlen (p);\n\t}\n      if (flags->arg != 0)\n\t{\n\t  /* A flag that takes an optional argument which in this case is\n\t     omitted is specified by ARG being \"\".  We must distinguish\n\t     because a following flag appended without an intervening \" -\"\n\t     is considered the arg for the first.  */\n\t  if (flags->arg[0] != '\\0')\n\t    {\n\t      /* Add its argument too.  */\n\t      *p++ = !short_option (flags->cs->c) ? '=' : ' ';\n\t      p = quote_for_env (p, flags->arg);\n\t    }\n\t  ++words;\n\t  /* Write a following space and dash, for the next flag.  */\n\t  *p++ = ' ';\n\t  *p++ = '-';\n\t}\n      else if (!short_option (flags->cs->c))\n\t{\n\t  ++words;\n\t  /* Long options must each go in their own word,\n\t     so we write the following space and dash.  */\n\t  *p++ = ' ';\n\t  *p++ = '-';\n\t}\n      flags = flags->next;\n    }\n\n  /* Define MFLAGS before appending variable definitions.  */\n\n  if (p == &flagstring[1])\n    /* No flags.  */\n    flagstring[0] = '\\0';\n  else if (p[-1] == '-')\n    {\n      /* Kill the final space and dash.  */\n      p -= 2;\n      *p = '\\0';\n    }\n  else\n    /* Terminate the string.  */\n    *p = '\\0';\n\n  /* Since MFLAGS is not parsed for flags, there is no reason to\n     override any makefile redefinition.  */\n  (void) define_variable (\"MFLAGS\", 6, flagstring, o_env, 1);\n\n  if (all && command_variables != 0)\n    {\n      /* Now write a reference to $(MAKEOVERRIDES), which contains all the\n\t command-line variable definitions.  */\n\n      if (p == &flagstring[1])\n\t/* No flags written, so elide the leading dash already written.  */\n\tp = flagstring;\n      else\n\t{\n\t  /* Separate the variables from the switches with a \"--\" arg.  */\n\t  if (p[-1] != '-')\n\t    {\n\t      /* We did not already write a trailing \" -\".  */\n\t      *p++ = ' ';\n\t      *p++ = '-';\n\t    }\n\t  /* There is a trailing \" -\"; fill it out to \" -- \".  */\n\t  *p++ = '-';\n\t  *p++ = ' ';\n\t}\n\n      /* Copy in the string.  */\n      if (posix_pedantic)\n\t{\n\t  bcopy (posixref, p, sizeof posixref - 1);\n\t  p += sizeof posixref - 1;\n\t}\n      else\n\t{\n\t  bcopy (ref, p, sizeof ref - 1);\n\t  p += sizeof ref - 1;\n\t}\n    }\n  else if (p == &flagstring[1])\n    {\n      words = 0;\n      --p;\n    }\n  else if (p[-1] == '-')\n    /* Kill the final space and dash.  */\n    p -= 2;\n  /* Terminate the string.  */\n  *p = '\\0';\n\n  v = define_variable (\"MAKEFLAGS\", 9,\n\t\t       /* If there are switches, omit the leading dash\n\t\t\t  unless it is a single long option with two\n\t\t\t  leading dashes.  */\n\t\t       &flagstring[(flagstring[0] == '-'\n\t\t\t\t    && flagstring[1] != '-')\n\t\t\t\t   ? 1 : 0],\n\t\t       /* This used to use o_env, but that lost when a\n\t\t\t  makefile defined MAKEFLAGS.  Makefiles set\n\t\t\t  MAKEFLAGS to add switches, but we still want\n\t\t\t  to redefine its value with the full set of\n\t\t\t  switches.  Of course, an override or command\n\t\t\t  definition will still take precedence.  */\n\t\t       o_file, 1);\n  if (! all)\n    /* The first time we are called, set MAKEFLAGS to always be exported.\n       We should not do this again on the second call, because that is\n       after reading makefiles which might have done `unexport MAKEFLAGS'. */\n    v->export = v_export;\n}\n\f\n/* Print version information.  */\n\nstatic void\nprint_version (void)\n{\n  static int printed_version = 0;\n\n  char *precede = print_data_base_flag ? \"# \" : \"\";\n\n  if (printed_version)\n    /* Do it only once.  */\n    return;\n\n  /* Print this untranslated.  The coding standards recommend translating the\n     (C) to the copyright symbol, but this string is going to change every\n     year, and none of the rest of it should be translated (including the\n     word \"Copyright\", so it hardly seems worth it.  */\n\n  printf (\"%sGNU Make %s\\n\\\n%sCopyright (C) 2006  Free Software Foundation, Inc.\\n\",\n          precede, version_string, precede);\n\n  printf (_(\"%sThis is free software; see the source for copying conditions.\\n\\\n%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\\\n%sPARTICULAR PURPOSE.\\n\"),\n            precede, precede, precede);\n\n  if (!remote_description || *remote_description == '\\0')\n    printf (_(\"\\n%sThis program built for %s\\n\"), precede, make_host);\n  else\n    printf (_(\"\\n%sThis program built for %s (%s)\\n\"),\n            precede, make_host, remote_description);\n\n  printed_version = 1;\n\n  /* Flush stdout so the user doesn't have to wait to see the\n     version information while things are thought about.  */\n  fflush (stdout);\n}\n\n/* Print a bunch of information about this and that.  */\n\nstatic void\nprint_data_base ()\n{\n  time_t when;\n\n  when = time ((time_t *) 0);\n  printf (_(\"\\n# Make data base, printed on %s\"), ctime (&when));\n\n  print_variable_data_base ();\n  print_dir_data_base ();\n  print_rule_data_base ();\n  print_file_data_base ();\n  print_vpath_data_base ();\n  strcache_print_stats (\"#\");\n\n  when = time ((time_t *) 0);\n  printf (_(\"\\n# Finished Make data base on %s\\n\"), ctime (&when));\n}\n\nstatic void\nclean_jobserver (int status)\n{\n  char token = '+';\n\n  /* Sanity: have we written all our jobserver tokens back?  If our\n     exit status is 2 that means some kind of syntax error; we might not\n     have written all our tokens so do that now.  If tokens are left\n     after any other error code, that's bad.  */\n\n  if (job_fds[0] != -1 && jobserver_tokens)\n    {\n      if (status != 2)\n        error (NILF,\n               \"INTERNAL: Exiting with %u jobserver tokens (should be 0)!\",\n               jobserver_tokens);\n      else\n        while (jobserver_tokens--)\n          {\n            int r;\n\n            EINTRLOOP (r, write (job_fds[1], &token, 1));\n            if (r != 1)\n              perror_with_name (\"write\", \"\");\n          }\n    }\n\n\n  /* Sanity: If we're the master, were all the tokens written back?  */\n\n  if (master_job_slots)\n    {\n      /* We didn't write one for ourself, so start at 1.  */\n      unsigned int tcnt = 1;\n\n      /* Close the write side, so the read() won't hang.  */\n      close (job_fds[1]);\n\n      while (read (job_fds[0], &token, 1) == 1)\n        ++tcnt;\n\n      if (tcnt != master_job_slots)\n        error (NILF,\n               \"INTERNAL: Exiting with %u jobserver tokens available; should be %u!\",\n               tcnt, master_job_slots);\n\n      close (job_fds[0]);\n    }\n}\n\f\n/* Exit with STATUS, cleaning up as necessary.  */\n\nvoid\ndie (int status)\n{\n  static char dying = 0;\n\n  if (!dying)\n    {\n      int err;\n\n      dying = 1;\n\n      if (print_version_flag)\n\tprint_version ();\n\n      /* Wait for children to die.  */\n      err = (status != 0);\n      while (job_slots_used > 0)\n\treap_children (1, err);\n\n      /* Let the remote job module clean up its state.  */\n      remote_cleanup ();\n\n      /* Remove the intermediate files.  */\n      remove_intermediates (0);\n\n      if (print_data_base_flag)\n\tprint_data_base ();\n\n      clean_jobserver (status);\n\n      /* Try to move back to the original directory.  This is essential on\n\t MS-DOS (where there is really only one process), and on Unix it\n\t puts core files in the original directory instead of the -C\n\t directory.  Must wait until after remove_intermediates(), or unlinks\n         of relative pathnames fail.  */\n      if (directory_before_chdir != 0)\n\tchdir (directory_before_chdir);\n\n      log_working_directory (0);\n    }\n\n  exit (status);\n}\n\f\n/* Write a message indicating that we've just entered or\n   left (according to ENTERING) the current directory.  */\n\nvoid\nlog_working_directory (int entering)\n{\n  static int entered = 0;\n\n  /* Print nothing without the flag.  Don't print the entering message\n     again if we already have.  Don't print the leaving message if we\n     haven't printed the entering message.  */\n  if (! print_directory_flag || entering == entered)\n    return;\n\n  entered = entering;\n\n  if (print_data_base_flag)\n    fputs (\"# \", stdout);\n\n  /* Use entire sentences to give the translators a fighting chance.  */\n\n  if (makelevel == 0)\n    if (starting_directory == 0)\n      if (entering)\n        printf (_(\"%s: Entering an unknown directory\\n\"), program);\n      else\n        printf (_(\"%s: Leaving an unknown directory\\n\"), program);\n    else\n      if (entering)\n        printf (_(\"%s: Entering directory `%s'\\n\"),\n                program, starting_directory);\n      else\n        printf (_(\"%s: Leaving directory `%s'\\n\"),\n                program, starting_directory);\n  else\n    if (starting_directory == 0)\n      if (entering)\n        printf (_(\"%s[%u]: Entering an unknown directory\\n\"),\n                program, makelevel);\n      else\n        printf (_(\"%s[%u]: Leaving an unknown directory\\n\"),\n                program, makelevel);\n    else\n      if (entering)\n        printf (_(\"%s[%u]: Entering directory `%s'\\n\"),\n                program, makelevel, starting_directory);\n      else\n        printf (_(\"%s[%u]: Leaving directory `%s'\\n\"),\n                program, makelevel, starting_directory);\n\n  /* Flush stdout to be sure this comes before any stderr output.  */\n  fflush (stdout);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/make.1",
    "content": ".TH MAKE 1 \"22 August 1989\" \"GNU\" \"LOCAL USER COMMANDS\"\n.SH NAME\nmake \\- GNU make utility to maintain groups of programs\n.SH SYNOPSIS\n.B \"make \"\n[\n.B \\-f\n.I makefile\n] [ options ] ... [ targets ] ...\n.SH WARNING\nThis man page is an extract of the documentation of GNU\n.IR make .\nIt is updated only occasionally, because the GNU project does not use nroff.\nFor complete, current documentation, refer to the Info file\n.B make.info\nwhich is made from the Texinfo source file\n.BR make.texi .\n.SH DESCRIPTION\n.LP\nThe purpose of the\n.I make\nutility is to determine automatically which\npieces of a large program need to be recompiled, and issue the commands to\nrecompile them.\nThe manual describes the GNU implementation of\n.IR make ,\nwhich was written by Richard Stallman and Roland McGrath, and is\ncurrently maintained by Paul Smith.\nOur examples show C programs, since they are most common, but you can use\n.I make\nwith any programming language whose compiler can be run with a\nshell command.\nIn fact,\n.I make\nis not limited to programs.\nYou can use it to describe any task where some files must be\nupdated automatically from others whenever the others change.\n.LP\nTo prepare to use\n.IR make ,\nyou must write a file called the\n.I makefile\nthat describes the relationships among files in your program, and the\nstates the commands for updating each file.\nIn a program, typically the executable file is updated from object\nfiles, which are in turn made by compiling source files.\n.LP\nOnce a suitable makefile exists, each time you change some source files,\nthis simple shell command:\n.sp 1\n.RS\n.B make\n.RE\n.sp 1\nsuffices to perform all necessary recompilations.\nThe\n.I make\nprogram uses the makefile data base and the last-modification times\nof the files to decide which of the files need to be updated.\nFor each of those files, it issues the commands recorded in the data base.\n.LP\n.I make\nexecutes commands in the\n.I makefile\nto update\none or more target\n.IR names ,\nwhere\n.I name\nis typically a program.\nIf no\n.B \\-f\noption is present,\n.I make\nwill look for the makefiles\n.IR GNUmakefile ,\n.IR makefile ,\nand\n.IR Makefile ,\nin that order.\n.LP\nNormally you should call your makefile either\n.I makefile\nor\n.IR Makefile .\n(We recommend\n.I Makefile\nbecause it appears prominently near the beginning of a directory\nlisting, right near other important files such as\n.IR  README .)\nThe first name checked,\n.IR GNUmakefile ,\nis not recommended for most makefiles.\nYou should use this name if you have a makefile that is specific to GNU\n.IR make ,\nand will not be understood by other versions of\n.IR make .\nIf\n.I makefile\nis `\\-', the standard input is read.\n.LP\n.I make\nupdates a target if it depends on prerequisite files\nthat have been modified since the target was last modified,\nor if the target does not exist.\n.SH OPTIONS\n.sp 1\n.TP 0.5i\n.BR \\-b , \" \\-m\"\nThese options are ignored for compatibility with other versions of\n.IR make .\n.TP 0.5i\n.BR \\-B , \" \\-\\-always\\-make\"\nUnconditionally make all targets.\n.TP 0.5i\n\\fB\\-C\\fR \\fIdir\\fR, \\fB\\-\\-directory\\fR=\\fIdir\\fR\nChange to directory\n.I dir\nbefore reading the makefiles or doing anything else.\nIf multiple\n.B \\-C\noptions are specified, each is interpreted relative to the\nprevious one:\n.BR \"\\-C \" /\n.BR \"\\-C \" etc\nis equivalent to\n.BR \"\\-C \" /etc.\nThis is typically used with recursive invocations of\n.IR make .\n.TP 0.5i\n.B \\-d\nPrint debugging information in addition to normal processing.\nThe debugging information says which files are being considered for\nremaking, which file-times are being compared and with what results,\nwhich files actually need to be remade, which implicit rules are\nconsidered and which are applied---everything interesting about how\n.I make\ndecides what to do.\n.TP 0.5i\n.BI \\-\\-debug \"[=FLAGS]\"\nPrint debugging information in addition to normal processing.\nIf the\n.I FLAGS\nare omitted, then the behavior is the same as if\n.B \\-d\nwas specified.\n.I FLAGS\nmay be\n.I a\nfor all debugging output (same as using\n.BR \\-d ),\n.I b\nfor basic debugging,\n.I v\nfor more verbose basic debugging,\n.I i\nfor showing implicit rules,\n.I j\nfor details on invocation of commands, and\n.I m\nfor debugging while remaking makefiles.\n.TP 0.5i\n.BR \\-e , \" \\-\\-environment\\-overrides\"\nGive variables taken from the environment precedence\nover variables from makefiles.\n.TP 0.5i\n+\\fB\\-f\\fR \\fIfile\\fR, \\fB\\-\\-file\\fR=\\fIfile\\fR, \\fB\\-\\-makefile\\fR=\\fIFILE\\fR\nUse\n.I file\nas a makefile.\n.TP 0.5i\n.BR \\-i , \" \\-\\-ignore\\-errors\"\nIgnore all errors in commands executed to remake files.\n.TP 0.5i\n\\fB\\-I\\fR \\fIdir\\fR, \\fB\\-\\-include\\-dir\\fR=\\fIdir\\fR\nSpecifies a directory\n.I dir\nto search for included makefiles.\nIf several\n.B \\-I\noptions are used to specify several directories, the directories are\nsearched in the order specified.\nUnlike the arguments to other flags of\n.IR make ,\ndirectories given with\n.B \\-I\nflags may come directly after the flag:\n.BI \\-I dir\nis allowed, as well as\n.BI \"\\-I \" dir.\nThis syntax is allowed for compatibility with the C\npreprocessor's\n.B \\-I\nflag.\n.TP 0.5i\n\\fB\\-j\\fR [\\fIjobs\\fR], \\fB\\-\\-jobs\\fR[=\\fIjobs\\fR]\nSpecifies the number of\n.I jobs\n(commands) to run simultaneously.\nIf there is more than one\n.B \\-j\noption, the last one is effective.\nIf the\n.B \\-j\noption is given without an argument,\n.IR make\nwill not limit the number of jobs that can run simultaneously.\n.TP 0.5i\n.BR \\-k , \" \\-\\-keep\\-going\"\nContinue as much as possible after an error.\nWhile the target that failed, and those that depend on it, cannot\nbe remade, the other dependencies of these targets can be processed\nall the same.\n.TP 0.5i\n\\fB\\-l\\fR [\\fIload\\fR], \\fB\\-\\-load\\-average\\fR[=\\fIload\\fR]\nSpecifies that no new jobs (commands) should be started if there are\nothers jobs running and the load average is at least\n.I load\n(a floating-point number).\nWith no argument, removes a previous load limit.\n.TP 0.5i\n.BR \\-L , \" \\-\\-check\\-symlink\\-times\"\nUse the latest mtime between symlinks and target.\n.TP 0.5i\n.BR \\-n , \" \\-\\-just\\-print\" , \" \\-\\-dry\\-run\" , \" \\-\\-recon\"\nPrint the commands that would be executed, but do not execute them.\n.TP 0.5i\n\\fB\\-o\\fR \\fIfile\\fR, \\fB\\-\\-old\\-file\\fR=\\fIfile\\fR, \\fB\\-\\-assume\\-old\\fR=\\fIfile\\fR\nDo not remake the file\n.I file\neven if it is older than its dependencies, and do not remake anything\non account of changes in\n.IR file .\nEssentially the file is treated as very old and its rules are ignored.\n.TP 0.5i\n.BR \\-p , \" \\-\\-print\\-data\\-base\"\nPrint the data base (rules and variable values) that results from\nreading the makefiles; then execute as usual or as otherwise\nspecified.\nThis also prints the version information given by the\n.B \\-v\nswitch (see below).\nTo print the data base without trying to remake any files, use\n.B make\n.B \\-p\n.BI \\-f /dev/null.\n.TP 0.5i\n.BR \\-q , \" \\-\\-question\"\n``Question mode''.\nDo not run any commands, or print anything; just return an exit status\nthat is zero if the specified targets are already up to date, nonzero\notherwise.\n.TP 0.5i\n.BR \\-r , \" \\-\\-no\\-builtin\\-rules\"\nEliminate use of the built\\-in implicit rules.\nAlso clear out the default list of suffixes for suffix rules.\n.TP 0.5i\n.BR \\-R , \" \\-\\-no\\-builtin\\-variables\"\nDon't define any built\\-in variables.\n.TP 0.5i\n.BR \\-s , \" \\-\\-silent\" , \" \\-\\-quiet\"\nSilent operation; do not print the commands as they are executed.\n.TP 0.5i\n.BR \\-S , \" \\-\\-no\\-keep\\-going\" , \" \\-\\-stop\"\nCancel the effect of the\n.B \\-k\noption.\nThis is never necessary except in a recursive\n.I make\nwhere\n.B \\-k\nmight be inherited from the top-level\n.I make\nvia MAKEFLAGS or if you set\n.B \\-k\nin MAKEFLAGS in your environment.\n.TP 0.5i\n.BR \\-t , \" \\-\\-touch\"\nTouch files (mark them up to date without really changing them)\ninstead of running their commands.\nThis is used to pretend that the commands were done, in order to fool\nfuture invocations of\n.IR make .\n.TP 0.5i\n.BR \\-v , \" \\-\\-version\"\nPrint the version of the\n.I make\nprogram plus a copyright, a list of authors and a notice that there\nis no warranty.\n.TP 0.5i\n.BR \\-w , \" \\-\\-print\\-directory\"\nPrint a message containing the working directory\nbefore and after other processing.\nThis may be useful for tracking down errors from complicated nests of\nrecursive\n.I make\ncommands.\n.TP 0.5i\n.B \\-\\-no\\-print\\-directory\nTurn off\n.BR \\-w ,\neven if it was turned on implicitly.\n.TP 0.5i\n\\fB\\-W\\fR \\fIfile\\fR, \\fB\\-\\-what\\-if\\fR=\\fIfile\\fR, \\fB\\-\\-new\\-file\\fR=\\fIfile\\fR, \\fB\\-\\-assume\\-new\\fR=\\fIfile\\fR\nPretend that the target\n.I file\nhas just been modified.\nWhen used with the\n.B \\-n\nflag, this shows you what would happen if you were to modify that file.\nWithout\n.BR \\-n ,\nit is almost the same as running a\n.I touch\ncommand on the given file before running\n.IR make ,\nexcept that the modification time is changed only in the imagination of\n.IR make .\n.TP 0.5i\n.B \\-\\-warn\\-undefined\\-variables\nWarn when an undefined variable is referenced.\n.SH \"EXIT STATUS\"\nGNU\n.I make\nexits with a status of zero if all makefiles were successfully parsed\nand no targets that were built failed.  A status of one will be returned\nif the\n.B \\-q\nflag was used and\n.I make\ndetermines that a target needs to be rebuilt.  A status of two will be\nreturned if any errors were encountered.\n.SH \"SEE ALSO\"\n.I \"The GNU Make Manual\"\n.SH BUGS\nSee the chapter `Problems and Bugs' in\n.IR \"The GNU Make Manual\" .\n.SH AUTHOR\nThis manual page contributed by Dennis Morse of Stanford University.\nIt has been reworked by Roland McGrath.  Further updates contributed by\nMike Frysinger.\n.SH \"COPYRIGHT\"\nCopyright (C) 1992, 1993, 1996, 1999 Free Software Foundation, Inc.\nThis file is part of GNU\n.IR make .\n.LP\nGNU\n.I make\nis free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free\nSoftware Foundation; either version 2, or (at your option) any later\nversion.\n.LP\nGNU\n.I make\nis distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or\nFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n.LP\nYou should have received a copy of the GNU General Public License\nalong with GNU\n.IR make ;\nsee the file COPYING.  If not, write to the Free Software Foundation,\nInc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/make.h",
    "content": "/* Miscellaneous global declarations and portability cruft for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* We use <config.h> instead of \"config.h\" so that a compilation\n   using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h\n   (which it would do because make.h was found in $srcdir).  */\n#include <config.h>\n#undef  HAVE_CONFIG_H\n#define HAVE_CONFIG_H 1\n\n/* AIX requires this to be the first thing in the file.  */\n#ifndef __GNUC__\n# if HAVE_ALLOCA_H\n#  include <alloca.h>\n# else\n#  ifdef _AIX\n #pragma alloca\n#  else\n#   ifndef alloca /* predefined by HP cc +Olibcalls */\nchar *alloca ();\n#   endif\n#  endif\n# endif\n#endif\n\n\n/* Use prototypes if available.  */\n#if defined (__cplusplus) || defined (__STDC__)\n# undef  PARAMS\n# define PARAMS(protos)  protos\n#else /* Not C++ or ANSI C.  */\n# undef  PARAMS\n# define PARAMS(protos)  ()\n#endif /* C++ or ANSI C.  */\n\n/* Specify we want GNU source code.  This must be defined before any\n   system headers are included.  */\n\n#define _GNU_SOURCE 1\n\n\n#ifdef  CRAY\n/* This must happen before #include <signal.h> so\n   that the declaration therein is changed.  */\n# define signal bsdsignal\n#endif\n\n/* If we're compiling for the dmalloc debugger, turn off string inlining.  */\n#if defined(HAVE_DMALLOC_H) && defined(__GNUC__)\n# define __NO_STRING_INLINES\n#endif\n\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <signal.h>\n#include <stdio.h>\n#include <ctype.h>\n#ifdef HAVE_SYS_TIMEB_H\n/* SCO 3.2 \"devsys 4.2\" has a prototype for `ftime' in <time.h> that bombs\n   unless <sys/timeb.h> has been included first.  Does every system have a\n   <sys/timeb.h>?  If any does not, configure should check for it.  */\n# include <sys/timeb.h>\n#endif\n\n#if TIME_WITH_SYS_TIME\n# include <sys/time.h>\n# include <time.h>\n#else\n# if HAVE_SYS_TIME_H\n#  include <sys/time.h>\n# else\n#  include <time.h>\n# endif\n#endif\n\n#include <errno.h>\n\n#ifndef errno\nextern int errno;\n#endif\n\n#ifndef isblank\n# define isblank(c)     ((c) == ' ' || (c) == '\\t')\n#endif\n\n#ifdef  HAVE_UNISTD_H\n# include <unistd.h>\n/* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get\n   POSIX.1 behavior with `cc -YPOSIX', which predefines POSIX itself!  */\n# if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)\n#  define POSIX 1\n# endif\n#endif\n\n/* Some systems define _POSIX_VERSION but are not really POSIX.1.  */\n#if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))\n# undef POSIX\n#endif\n\n#if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)\n# define POSIX 1\n#endif\n\n#ifndef RETSIGTYPE\n# define RETSIGTYPE     void\n#endif\n\n#ifndef sigmask\n# define sigmask(sig)   (1 << ((sig) - 1))\n#endif\n\n#ifndef HAVE_SA_RESTART\n# define SA_RESTART 0\n#endif\n\n#ifdef  HAVE_LIMITS_H\n# include <limits.h>\n#endif\n#ifdef  HAVE_SYS_PARAM_H\n# include <sys/param.h>\n#endif\n\n#ifndef PATH_MAX\n# ifndef POSIX\n#  define PATH_MAX      MAXPATHLEN\n# endif\n#endif\n#ifndef MAXPATHLEN\n# define MAXPATHLEN 1024\n#endif\n\n#ifdef  PATH_MAX\n# define GET_PATH_MAX   PATH_MAX\n# define PATH_VAR(var)  char var[PATH_MAX]\n#else\n# define NEED_GET_PATH_MAX 1\n# define GET_PATH_MAX   (get_path_max ())\n# define PATH_VAR(var)  char *var = (char *) alloca (GET_PATH_MAX)\nextern unsigned int get_path_max PARAMS ((void));\n#endif\n\n#ifndef CHAR_BIT\n# define CHAR_BIT 8\n#endif\n\n/* Nonzero if the integer type T is signed.  */\n#define INTEGER_TYPE_SIGNED(t) ((t) -1 < 0)\n\n/* The minimum and maximum values for the integer type T.\n   Use ~ (t) 0, not -1, for portability to 1's complement hosts.  */\n#define INTEGER_TYPE_MINIMUM(t) \\\n  (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))\n#define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))\n\n#ifndef CHAR_MAX\n# define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)\n#endif\n\n#ifdef STAT_MACROS_BROKEN\n# ifdef S_ISREG\n#  undef S_ISREG\n# endif\n# ifdef S_ISDIR\n#  undef S_ISDIR\n# endif\n#endif  /* STAT_MACROS_BROKEN.  */\n\n#ifndef S_ISREG\n# define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)\n#endif\n#ifndef S_ISDIR\n# define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)\n#endif\n\n#ifdef VMS\n# include <types.h>\n# include <unixlib.h>\n# include <unixio.h>\n# include <perror.h>\n/* Needed to use alloca on VMS.  */\n# include <builtins.h>\n#endif\n\n#ifndef __attribute__\n/* This feature is available in gcc versions 2.5 and later.  */\n# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__\n#  define __attribute__(x)\n# endif\n/* The __-protected variants of `format' and `printf' attributes\n   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */\n# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)\n#  define __format__ format\n#  define __printf__ printf\n# endif\n#endif\n#define UNUSED  __attribute__ ((unused))\n\n#if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)\n# include <stdlib.h>\n# include <string.h>\n# define ANSI_STRING 1\n#else   /* No standard headers.  */\n# ifdef HAVE_STRING_H\n#  include <string.h>\n#  define ANSI_STRING 1\n# else\n#  include <strings.h>\n# endif\n# ifdef HAVE_MEMORY_H\n#  include <memory.h>\n# endif\n# ifdef HAVE_STDLIB_H\n#  include <stdlib.h>\n# else\nextern char *malloc PARAMS ((int));\nextern char *realloc PARAMS ((char *, int));\nextern void free PARAMS ((char *));\n\nextern void abort PARAMS ((void)) __attribute__ ((noreturn));\nextern void exit PARAMS ((int)) __attribute__ ((noreturn));\n# endif /* HAVE_STDLIB_H.  */\n\n#endif /* Standard headers.  */\n\n/* These should be in stdlib.h.  Make sure we have them.  */\n#ifndef EXIT_SUCCESS\n# define EXIT_SUCCESS 0\n#endif\n#ifndef EXIT_FAILURE\n# define EXIT_FAILURE 0\n#endif\n\n#ifdef  ANSI_STRING\n\n# ifndef bcmp\n#  define bcmp(s1, s2, n)   memcmp ((s1), (s2), (n))\n# endif\n# ifndef bzero\n#  define bzero(s, n)       memset ((s), 0, (n))\n# endif\n# if defined(HAVE_MEMMOVE) && !defined(bcopy)\n#  define bcopy(s, d, n)    memmove ((d), (s), (n))\n# endif\n\n#else   /* Not ANSI_STRING.  */\n\n# ifndef HAVE_STRCHR\n#  define strchr(s, c)      index((s), (c))\n#  define strrchr(s, c)     rindex((s), (c))\n# endif\n\n# ifndef bcmp\nextern int bcmp PARAMS ((const char *, const char *, int));\n# endif\n# ifndef bzero\nextern void bzero PARAMS ((char *, int));\n#endif\n# ifndef bcopy\nextern void bcopy PARAMS ((const char *b1, char *b2, int));\n# endif\n\n/* SCO Xenix has a buggy macro definition in <string.h>.  */\n#undef  strerror\n#if !defined(__DECC)\nextern char *strerror PARAMS ((int errnum));\n#endif\n\n#endif  /* !ANSI_STRING.  */\n#undef  ANSI_STRING\n\n#if HAVE_INTTYPES_H\n# include <inttypes.h>\n#endif\n#define FILE_TIMESTAMP uintmax_t\n\n#if !defined(HAVE_STRSIGNAL)\nextern char *strsignal PARAMS ((int signum));\n#endif\n\n/* ISDIGIT offers the following features:\n   - Its arg may be any int or unsigned int; it need not be an unsigned char.\n   - It's guaranteed to evaluate its argument exactly once.\n      NOTE!  Make relies on this behavior, don't change it!\n   - It's typically faster.\n   POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that\n   only '0' through '9' are digits.  Prefer ISDIGIT to isdigit() unless\n   it's important to use the locale's definition of `digit' even when the\n   host does not conform to POSIX.  */\n#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)\n\n#ifndef iAPX286\n# define streq(a, b) \\\n   ((a) == (b) || \\\n    (*(a) == *(b) && (*(a) == '\\0' || !strcmp ((a) + 1, (b) + 1))))\n# ifdef HAVE_CASE_INSENSITIVE_FS\n/* This is only used on Windows/DOS platforms, so we assume strcmpi().  */\n#  define strieq(a, b) \\\n    ((a) == (b) \\\n     || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \\\n         && (*(a) == '\\0' || !strcmpi ((a) + 1, (b) + 1))))\n# else\n#  define strieq(a, b) streq(a, b)\n# endif\n#else\n/* Buggy compiler can't handle this.  */\n# define streq(a, b) (strcmp ((a), (b)) == 0)\n# define strieq(a, b) (strcmp ((a), (b)) == 0)\n#endif\n#define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)\n#ifdef  VMS\nextern int strcmpi (const char *,const char *);\n#endif\n\n#if defined(__GNUC__) || defined(ENUM_BITFIELDS)\n# define ENUM_BITFIELD(bits)    :bits\n#else\n# define ENUM_BITFIELD(bits)\n#endif\n\n/* Handle gettext and locales.  */\n\n#if HAVE_LOCALE_H\n# include <locale.h>\n#else\n# define setlocale(category, locale)\n#endif\n\n#include <gettext.h>\n\n#define _(msgid)            gettext (msgid)\n#define N_(msgid)           gettext_noop (msgid)\n#define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)\n\n/* Handle other OSs.  */\n#if defined(HAVE_DOS_PATHS)\n# define PATH_SEPARATOR_CHAR ';'\n#elif defined(VMS)\n# define PATH_SEPARATOR_CHAR ','\n#else\n# define PATH_SEPARATOR_CHAR ':'\n#endif\n\n/* This is needed for getcwd() and chdir().  */\n#if defined(_MSC_VER) || defined(__BORLANDC__)\n# include <direct.h>\n#endif\n\n#ifdef WINDOWS32\n# include <fcntl.h>\n# include <malloc.h>\n# define pipe(p) _pipe(p, 512, O_BINARY)\n# define kill(pid,sig) w32_kill(pid,sig)\n\nextern void sync_Path_environment(void);\nextern int kill(intptr_t pid, int sig);\nextern char *end_of_token_w32(char *s, char stopchar);\nextern int find_and_set_default_shell(char *token);\n\n/* indicates whether or not we have Bourne shell */\nextern int no_default_sh_exe;\n\n/* is default_shell unixy? */\nextern int unixy_shell;\n#endif  /* WINDOWS32 */\n\nstruct floc\n  {\n    const char *filenm;\n    unsigned long lineno;\n  };\n#define NILF ((struct floc *)0)\n\n#define STRING_SIZE_TUPLE(_s) (_s), (sizeof (_s)-1)\n\n\f\n/* We have to have stdarg.h or varargs.h AND v*printf or doprnt to use\n   variadic versions of these functions.  */\n\n#if HAVE_STDARG_H || HAVE_VARARGS_H\n# if HAVE_VPRINTF || HAVE_DOPRNT\n#  define USE_VARIADIC 1\n# endif\n#endif\n\n#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H\nextern void message (int prefix, const char *fmt, ...)\n                     __attribute__ ((__format__ (__printf__, 2, 3)));\nextern void error (const struct floc *flocp, const char *fmt, ...)\n                   __attribute__ ((__format__ (__printf__, 2, 3)));\nextern void fatal (const struct floc *flocp, const char *fmt, ...)\n                   __attribute__ ((noreturn, __format__ (__printf__, 2, 3)));\n#else\nextern void message ();\nextern void error ();\nextern void fatal ();\n#endif\n\nextern void die PARAMS ((int)) __attribute__ ((noreturn));\nextern void log_working_directory PARAMS ((int));\nextern void pfatal_with_name PARAMS ((const char *)) __attribute__ ((noreturn));\nextern void perror_with_name PARAMS ((const char *, const char *));\nextern char *savestring PARAMS ((const char *, unsigned int));\nextern char *concat PARAMS ((const char *, const char *, const char *));\nextern char *xmalloc PARAMS ((unsigned int));\nextern char *xrealloc PARAMS ((char *, unsigned int));\nextern char *xstrdup PARAMS ((const char *));\nextern char *find_next_token PARAMS ((char **, unsigned int *));\nextern char *next_token PARAMS ((const char *));\nextern char *end_of_token PARAMS ((const char *));\nextern void collapse_continuations PARAMS ((char *));\nextern char *lindex PARAMS ((const char *, const char *, int));\nextern int alpha_compare PARAMS ((const void *, const void *));\nextern void print_spaces PARAMS ((unsigned int));\nextern char *find_percent PARAMS ((char *));\nextern FILE *open_tmpfile PARAMS ((char **, const char *));\n\n#ifndef NO_ARCHIVES\nextern int ar_name PARAMS ((char *));\nextern void ar_parse_name PARAMS ((char *, char **, char **));\nextern int ar_touch PARAMS ((char *));\nextern time_t ar_member_date PARAMS ((char *));\n#endif\n\nextern int dir_file_exists_p PARAMS ((char *, char *));\nextern int file_exists_p PARAMS ((char *));\nextern int file_impossible_p PARAMS ((char *));\nextern void file_impossible PARAMS ((char *));\nextern char *dir_name PARAMS ((char *));\nextern void hash_init_directories PARAMS ((void));\n\nextern void define_default_variables PARAMS ((void));\nextern void set_default_suffixes PARAMS ((void));\nextern void install_default_suffix_rules PARAMS ((void));\nextern void install_default_implicit_rules PARAMS ((void));\n\nextern void build_vpath_lists PARAMS ((void));\nextern void construct_vpath_list PARAMS ((char *pattern, char *dirpath));\nextern int vpath_search PARAMS ((char **file, FILE_TIMESTAMP *mtime_ptr));\nextern int gpath_search PARAMS ((char *file, unsigned int len));\n\nextern void construct_include_path PARAMS ((char **arg_dirs));\n\nextern void user_access PARAMS ((void));\nextern void make_access PARAMS ((void));\nextern void child_access PARAMS ((void));\n\nextern void close_stdout PARAMS ((void));\n\nextern char *strip_whitespace PARAMS ((const char **begpp, const char **endpp));\n\n/* String caching  */\nextern void strcache_init PARAMS ((void));\nextern void strcache_print_stats PARAMS ((const char *prefix));\nextern int strcache_iscached PARAMS ((const char *str));\nextern const char *strcache_add PARAMS ((const char *str));\nextern const char *strcache_add_len PARAMS ((const char *str, int len));\nextern int strcache_setbufsize PARAMS ((int size));\n\n#ifdef  HAVE_VFORK_H\n# include <vfork.h>\n#endif\n\n/* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,\n   because such systems often declare them in header files anyway.  */\n\n#if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)\n\nextern long int atol ();\n# ifndef VMS\nextern long int lseek ();\n# endif\n\n#endif  /* Not GNU C library or POSIX.  */\n\n#ifdef  HAVE_GETCWD\n# if !defined(VMS) && !defined(__DECC)\nextern char *getcwd ();\n# endif\n#else\nextern char *getwd ();\n# define getcwd(buf, len)       getwd (buf)\n#endif\n\nextern const struct floc *reading_file;\nextern const struct floc **expanding_var;\n\nextern char **environ;\n\nextern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;\nextern int print_data_base_flag, question_flag, touch_flag, always_make_flag;\nextern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;\nextern int print_version_flag, print_directory_flag, check_symlink_flag;\nextern int warn_undefined_variables_flag, posix_pedantic, not_parallel;\nextern int second_expansion, clock_skew_detected, rebuilding_makefiles;\n\n/* can we run commands via 'sh -c xxx' or must we use batch files? */\nextern int batch_mode_shell;\n\nextern unsigned int job_slots;\nextern int job_fds[2];\nextern int job_rfd;\n#ifndef NO_FLOAT\nextern double max_load_average;\n#else\nextern int max_load_average;\n#endif\n\nextern char *program;\nextern char *starting_directory;\nextern unsigned int makelevel;\nextern char *version_string, *remote_description, *make_host;\n\nextern unsigned int commands_started;\n\nextern int handling_fatal_signal;\n\n\n#ifndef MIN\n#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))\n#endif\n#ifndef MAX\n#define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))\n#endif\n\n#ifdef VMS\n#  define MAKE_SUCCESS 1\n#  define MAKE_TROUBLE 2\n#  define MAKE_FAILURE 3\n#else\n#  define MAKE_SUCCESS 0\n#  define MAKE_TROUBLE 1\n#  define MAKE_FAILURE 2\n#endif\n\n/* Set up heap debugging library dmalloc.  */\n\n#ifdef HAVE_DMALLOC_H\n#include <dmalloc.h>\n#endif\n\n#ifndef initialize_main\n# ifdef __EMX__\n#  define initialize_main(pargc, pargv) \\\n                          { _wildcard(pargc, pargv); _response(pargc, pargv); }\n# else\n#  define initialize_main(pargc, pargv)\n# endif\n#endif\n\n\n#ifdef __EMX__\n# if !HAVE_STRCASECMP\n#  define strcasecmp stricmp\n# endif\n\n# if !defined chdir\n#  define chdir _chdir2\n# endif\n# if !defined getcwd\n#  define getcwd _getcwd2\n# endif\n\n/* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of\n   chdir() and getcwd(). This avoids some error messages for the\n   make testsuite but restricts the drive letter support. */\n# ifdef NO_CHDIR2\n#  warning NO_CHDIR2: usage of drive letters restricted\n#  undef chdir\n#  undef getcwd\n# endif\n#endif\n\n#ifndef initialize_main\n# define initialize_main(pargc, pargv)\n#endif\n\n\n/* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag\n   properly according to POSIX.  So, we try to wrap common system calls with\n   checks for EINTR.  Note that there are still plenty of system calls that\n   can fail with EINTR but this, reportedly, gets the vast majority of\n   failure cases.  If you still experience failures you'll need to either get\n   a system where SA_RESTART works, or you need to avoid -j.  */\n\n#define EINTRLOOP(_v,_c)   while (((_v)=_c)==-1 && errno==EINTR)\n\n/* While system calls that return integers are pretty consistent about\n   returning -1 on failure and setting errno in that case, functions that\n   return pointers are not always so well behaved.  Sometimes they return\n   NULL for expected behavior: one good example is readdir() which returns\n   NULL at the end of the directory--and _doesn't_ reset errno.  So, we have\n   to do it ourselves here.  */\n\n#define ENULLLOOP(_v,_c)   do{ errno = 0; \\\n                               while (((_v)=_c)==0 && errno==EINTR); }while(0)\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/make.lnk",
    "content": "FROM LIB:cres.o \"commands.o\"+\"job.o\"+\"dir.o\"+\"file.o\"+\"misc.o\"+\"main.o\"+\"read.o\"+\"remake.o\"+\"rule.o\"+\"implicit.o\"+\"default.o\"+\"variable.o\"+\"expand.o\"+\"function.o\"+\"vpath.o\"+\"version.o\"+\"ar.o\"+\"arscan.o\"+\"signame.o\"+\"remote-stub.o\"+\"getopt.o\"+\"getopt1.o\"+\"alloca.o\"+\"amiga.o\"+\"hash.o\"+\"strcache.o\"\nTO \"make.new\"\nLIB glob/glob.lib LIB:sc.lib LIB:amiga.lib\nQUIET\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/make_msvc_net2003.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"make_msvc.net2003\", \"make_msvc_net2003.vcproj\", \"{E96B5060-3240-4723-91C9-E64F1C877A04}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfiguration) = preSolution\r\n\t\tDebug = Debug\r\n\t\tRelease = Release\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfiguration) = postSolution\r\n\t\t{E96B5060-3240-4723-91C9-E64F1C877A04}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{E96B5060-3240-4723-91C9-E64F1C877A04}.Debug.Build.0 = Debug|Win32\r\n\t\t{E96B5060-3240-4723-91C9-E64F1C877A04}.Release.ActiveCfg = Release|Win32\r\n\t\t{E96B5060-3240-4723-91C9-E64F1C877A04}.Release.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityAddIns) = postSolution\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/make_msvc_net2003.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"make_msvc.net2003\"\r\n\tProjectGUID=\"{E96B5060-3240-4723-91C9-E64F1C877A04}\"\r\n\tKeyword=\"Win32Proj\">\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"/>\r\n\t</Platforms>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Debug\"\r\n\t\t\tIntermediateDirectory=\"Debug\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tCharacterSet=\"2\">\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tOptimization=\"0\"\r\n\t\t\t\tAdditionalIncludeDirectories=\".;w32/include;glob\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;HAVE_CONFIG_H=1;WINDOWS32=1\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"1\"\r\n\t\t\t\tForceConformanceInForLoopScope=\"TRUE\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"4\"\r\n\t\t\t\tSuppressStartupBanner=\"TRUE\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"FALSE\"\r\n\t\t\t\tDebugInformationFormat=\"4\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/make_msvc.net2003.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/make_msvc.net2003.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tTargetMachine=\"1\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t\tDescription=\"Copying config.h.W32 to config.h\"\r\n\t\t\t\tCommandLine=\"if not exist config.h copy config.h.W32 config.h\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Release\"\r\n\t\t\tIntermediateDirectory=\"Release\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tCharacterSet=\"2\">\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\".;w32/include;glob\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;HAVE_CONFIG_H=1;WINDOWS32=1\"\r\n\t\t\t\tRuntimeLibrary=\"0\"\r\n\t\t\t\tForceConformanceInForLoopScope=\"TRUE\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"4\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"FALSE\"\r\n\t\t\t\tDebugInformationFormat=\"3\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/make_msvc.net2003.exe\"\r\n\t\t\t\tLinkIncremental=\"1\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tOptimizeReferences=\"2\"\r\n\t\t\t\tEnableCOMDATFolding=\"2\"\r\n\t\t\t\tTargetMachine=\"1\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t\tDescription=\"Copying config.h.W32 to config.h\"\r\n\t\t\t\tCommandLine=\"if not exist config.h copy config.h.W32 config.h\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebDeploymentTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedWrapperGeneratorTool\"/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAuxiliaryManagedWrapperGeneratorTool\"/>\r\n\t\t</Configuration>\r\n\t</Configurations>\r\n\t<References>\r\n\t</References>\r\n\t<Files>\r\n\t\t<Filter\r\n\t\t\tName=\"src\"\r\n\t\t\tFilter=\"cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx\"\r\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\">\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\ar.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\arscan.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\commands.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\default.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\dir.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\expand.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\file.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\function.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\getloadavg.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\getopt.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\getopt1.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\hash.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\strcache.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\implicit.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\job.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\main.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\misc.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\read.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\remake.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\remote-stub.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\rule.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\signame.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\variable.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\version.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\vpath.c\">\r\n\t\t\t</File>\r\n\t\t\t<Filter\r\n\t\t\t\tName=\"w32\"\r\n\t\t\t\tFilter=\"\">\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\compat\\dirent.c\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\subproc\\misc.c\">\r\n\t\t\t\t\t<FileConfiguration\r\n\t\t\t\t\t\tName=\"Debug|Win32\">\r\n\t\t\t\t\t\t<Tool\r\n\t\t\t\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\t\t\t\tObjectFile=\"$(IntDir)/$(InputName)1.obj\"/>\r\n\t\t\t\t\t</FileConfiguration>\r\n\t\t\t\t\t<FileConfiguration\r\n\t\t\t\t\t\tName=\"Release|Win32\">\r\n\t\t\t\t\t\t<Tool\r\n\t\t\t\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\t\t\t\tObjectFile=\"$(IntDir)/$(InputName)1.obj\"/>\r\n\t\t\t\t\t</FileConfiguration>\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\pathstuff.c\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\subproc\\sub_proc.c\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\subproc\\w32err.c\">\r\n\t\t\t\t</File>\r\n\t\t\t</Filter>\r\n\t\t\t<Filter\r\n\t\t\t\tName=\"glob\"\r\n\t\t\t\tFilter=\"\">\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\glob\\fnmatch.c\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\glob\\glob.c\">\r\n\t\t\t\t</File>\r\n\t\t\t</Filter>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"include\"\r\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\r\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\">\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\commands.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\config.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\debug.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\dep.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\filedef.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\getopt.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\gettext.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\hash.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\job.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\make.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\rule.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\variable.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\".\\vmsdir.h\">\r\n\t\t\t</File>\r\n\t\t\t<Filter\r\n\t\t\t\tName=\"w32\"\r\n\t\t\t\tFilter=\"\">\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\include\\dirent.h\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\include\\pathstuff.h\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\subproc\\proc.h\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\include\\sub_proc.h\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\w32\\include\\w32err.h\">\r\n\t\t\t\t</File>\r\n\t\t\t</Filter>\r\n\t\t\t<Filter\r\n\t\t\t\tName=\"glob\"\r\n\t\t\t\tFilter=\"\">\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\glob\\fnmatch.h\">\r\n\t\t\t\t</File>\r\n\t\t\t\t<File\r\n\t\t\t\t\tRelativePath=\".\\glob\\glob.h\">\r\n\t\t\t\t</File>\r\n\t\t\t</Filter>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/makefile.com",
    "content": "$!\n$! Makefile.com - builds GNU Make for VMS\n$!\n$! P1 is non-empty if you want to link with the VAXCRTL library instead\n$!    of the shareable executable\n$! P2 = DEBUG will build an image with debug information\n$! P3 = WALL will enable all warning messages (some are suppressed since\n$!      one macro intentionally causes an error condition)\n$!\n$! In case of problems with the install you might contact me at\n$! zinser@decus.de (preferred) or zinser@sysdev.deutsche-boerse.com\n$\n$! hb\n$! But don't ask Martin Zinser about the lines, I added/changed.\n$! In case of an error do some cleanup\n$ on error then $ goto cleanup\n$! in case somebody set up her/his own symbol for cc\n$ set symbol/scope=(nolocal,noglobal)\n$!\n$! Just some general constants...\n$!\n$ true  = 1\n$ false = 0\n$ tmpnam = \"temp_\" + f$getjpi(\"\",\"pid\")\n$ tt = tmpnam + \".txt\"\n$ tc = tmpnam + \".c\"\n$!\n$! Look for the compiler used\n$!\n$ lval = \"\"\n$ if f$search(\"SYS$SYSTEM:DECC$COMPILER.EXE\").eqs.\"\"\n$  then\n$   if f$trnlnm(\"SYS\").eqs.\"\" then def/nolog sys sys$library:\n$   ccopt = \"\"\n$  else\n$   ccopt = \"/decc/prefix=(all,except=(globfree,glob))\"\n$   if f$trnlnm(\"SYS\").eqs.\"\"\n$    then\n$     if f$trnlnm(\"DECC$LIBRARY_INCLUDE\").nes.\"\"\n$      then\n$       define sys decc$library_include:\n$      else\n$       if f$search(\"SYS$COMMON:[DECC$LIB.REFERENCE]DECC$RTLDEF.DIR\").nes.\"\" -\n           then lval = \"SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF],\"\n$       if f$search(\"SYS$COMMON:[DECC$LIB.REFERENCE]SYS$STARLET_C.DIR\").nes.\"\" -\n           then lval = lval+\"SYS$COMMON:[DECC$LIB.REFERENCE.SYS$STARLET_C],\"\n$       lval=lval+\"SYS$LIBRARY:\"\n$       define sys 'lval\n$      endif\n$   endif\n$ endif\n$!\n$! Should we build a debug image\n$!\n$ if (p2.eqs.\"DEBUG\")\n$  then\n$   ccopt = ccopt + \"/noopt/debug\"\n$   lopt = \"/debug\"\n$ else\n$   lopt = \"\"\n$ endif\n$!\n$! Do we want to see all warnings\n$!\n$ if (p3.nes.\"WALL\")\n$ then\n$   gosub check_cc_qual\n$ endif\n$ filelist = \"alloca ar arscan commands default dir expand file function \" + -\n             \"hash implicit job main misc read remake remote-stub rule \" + -\n\t     \"signame variable version vmsfunctions vmsify vpath \" + -\n\t     \"[.glob]glob [.glob]fnmatch getopt1 getopt strcache\"\n$ copy config.h-vms config.h\n$ n=0\n$ open/write optf make.opt\n$ loop:\n$ cfile = f$elem(n,\" \",filelist)\n$ if cfile .eqs. \" \" then goto linkit\n$ write sys$output \"Compiling ''cfile'...\"\n$ call compileit 'cfile' 'p1'\n$ n = n + 1\n$ goto loop\n$ linkit:\n$ close optf\n$ if p1 .nes. \"\" then goto link_using_library\n$ link/exe=make make.opt/opt'lopt\n$ goto cleanup\n$\n$ link_using_library:\n$ link/exe=make make.opt/opt,sys$library:vaxcrtl/lib'lopt\n$\n$ cleanup:\n$ if f$trnlnm(\"SYS\").nes.\"\" then $ deassign sys\n$ if f$trnlnm(\"OPTF\").nes.\"\" then $ close optf\n$ if f$search(\"make.opt\").nes.\"\" then $ del make.opt;*\n$ exit\n$!\n$!-----------------------------------------------------------------------------\n$!\n$! Check if this is a define relating to the properties of the C/C++\n$! compiler\n$!\n$CHECK_CC_QUAL:\n$ open/write tmpc 'tc\n$ ccqual = \"/warn=(disable=questcompare)\"\n$ write tmpc \"#include <stdio.h>\"\n$ write tmpc \"unsigned int i = 1;\"\n$ write tmpc \"int main(){\"\n$ write tmpc \"if (i < 0){printf(\"\"Mission impossible\\n\"\");}}\"\n$ close tmpc\n$ gosub cc_qual_check\n$ return\n$!\n$!-----------------------------------------------------------------------------\n$!\n$! Check for properties of C/C++ compiler\n$!\n$CC_QUAL_CHECK:\n$ cc_qual = false\n$ set message/nofac/noident/nosever/notext\n$ cc 'ccqual' 'tmpnam'\n$ if $status then cc_qual = true\n$ set message/fac/ident/sever/text\n$ delete/nolog 'tmpnam'.*;*\n$ if cc_qual then ccopt = ccopt + ccqual\n$ return\n$!-----------------------------------------------------------------------------\n$!\n$ compileit : subroutine\n$ ploc = f$locate(\"]\",p1)\n$ filnam = p1\n$ if ploc .lt. f$length(p1) then filnam=f$extract(ploc+1,100,p1)\n$ write optf \"''filnam'\"\n$ cc'ccopt'/include=([],[.glob]) -\n  /define=(\"allocated_variable_expand_for_file=alloc_var_expand_for_file\",\"unlink=remove\",\"HAVE_CONFIG_H\",\"VMS\") -\n  'p1'\n$ exit\n$ endsubroutine : compileit\n$!\n$!-----------------------------------------------------------------------------\n$!Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n$!2006 Free Software Foundation, Inc.\n$!This file is part of GNU Make.\n$!\n$!GNU Make is free software; you can redistribute it and/or modify it under the\n$!terms of the GNU General Public License as published by the Free Software\n$!Foundation; either version 2, or (at your option) any later version.\n$!\n$!GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n$!WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n$!A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n$!\n$!You should have received a copy of the GNU General Public License along with\n$!GNU Make; see the file COPYING.  If not, write to the Free Software\n$!Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/makefile.vms",
    "content": "# -*-Makefile-*- to build GNU make on VMS\n#\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n# 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n# VMS extensions from GNU Make 3.60 imported by\n#  Klaus Kmpf (kkaempf@rmi.de)\n# Modified for version 3.78.1 by Hartmut.Becker@compaq.com.\n# Modified for version 3.80 by zinser@decus.de\n# Modified for version 3.81 by Hartmut Becker\n\nCC = cc\nCP = copy\n\n%.obj: %.c\n\t$(CC) $(CFLAGS)/obj=$@ $<\n#\n#\tMakefile for GNU Make\n#\n\nifeq ($(CC),cc)\nCFLAGS = $(defines) /include=([],[.glob])/prefix=(all,except=(glob,globfree))/standard=relaxed/warn=(disable=questcompare)\nelse\nCFLAGS = $(defines) /include=([],[.glob])\nendif\n#LDFLAGS = /deb\nLDFLAGS =\n\nifeq ($(CC),cc)\ndefines = /define=(\"unlink=remove\",\"HAVE_CONFIG_H\",\"VMS\",\"allocated_variable_expand_for_file=alloc_var_expand_for_file\")\nelse\nifeq ($(ARCH),VAX)\ndefines = /define=(\"HAVE_CONFIG_H\",\"GCC_IS_NATIVE\",\"VAX\")\nelse\ndefines = /define=(\"HAVE_CONFIG_H\",\"GCC_IS_NATIVE\")\nendif\nendif\n\nLOAD_AVG = /define=\"NO_LDAV\"\n\n# If you don't want archive support, comment these out.\nARCHIVES = ,ar.obj,arscan.obj\nARCHIVES_SRC = ar.c arscan.c\n\n# If your system needs extra libraries loaded in, define them here.\n# System V probably need -lPW for alloca.\n# if on vax, uncomment the following line\n#LOADLIBES = ,c.opt/opt\nifeq ($(CC),cc)\n#LOADLIBES =,sys$$library:vaxcrtl.olb/lib\nCRT0 =\nelse\nLOADLIBES =,gnu_cc_library:libgcc.olb/lib\nendif\n\n# If your system doesn't have alloca, or the one provided is bad,\n# get it from the Emacs distribution and define these.\n#ALLOCA = ,alloca.obj\n#ALLOCASRC = alloca.c\n\n# If there are remote execution facilities defined,\n# enable them with switches here (see remote-*.c).\nREMOTE =\n\n# Any extra object files your system needs.\nextras = ,signame.obj,remote-stub.obj,vmsfunctions.obj,vmsify.obj\n#,directory.obj\n# as an alternative:\nglob = ,[.glob]glob.obj,[.glob]fnmatch.obj\ngetopt = ,getopt.obj,getopt1.obj\n# Directory to install `make' in.\nbindir = []\n# Directory to install the man page in.\nmandir = []\n# Number to put on the man page filename.\nmanext = 1\n\nobjs = commands.obj,job.obj,dir.obj,file.obj,misc.obj,hash.obj,\\\n       main.obj,read.obj,remake.obj,rule.obj,implicit.obj,\\\n       default.obj,variable.obj,expand.obj,function.obj,strcache.obj,\\\n       vpath.obj,version.obj$(ARCHIVES)$(ALLOCA)$(extras)$(getopt)$(glob)\nsrcs = commands.c job.c dir.c file.c misc.c  hash.c \\\n\tmain.c read.c remake.c rule.c implicit.c \\\n\tdefault.c variable.c expand.c function.c strcache.c \\\n\tvpath.c version.c vmsfunctions.c vmsify.c $(ARCHIVES_SRC) $(ALLOCASRC) \\\n\tcommands.h dep.h filedef.h job.h make.h rule.h variable.h\n\n\n.PHONY: all doc\nall: config.h make.exe\n\ndoc: make.info make.dvi\n\n\nmake.exe: $(objs)\n\t$(LD)$(LDFLAGS)/exe=$@ $^$(LOADLIBES)$(CRT0)\n\n.PHONY: clean realclean\nclean:\n\t$$ purge [...]\n\t-$(RM) make.exe;,*.obj;\n\t-$(RM) [.glob]*.obj;\n\n# Automatically generated dependencies.\ncommands.obj: commands.c make.h dep.h commands.h filedef.h variable.h job.h\njob.obj: job.c vmsjobs.c make.h commands.h job.h filedef.h variable.h\ndir.obj: dir.c make.h\nfile.obj: file.c make.h commands.h dep.h filedef.h variable.h\nmisc.obj: misc.c make.h dep.h\nhash.obj: hash.c make.h hash.h\nstrcache.obj: strcache.c make.h hash.h\nmain.obj: main.c make.h commands.h dep.h filedef.h variable.h job.h\nread.obj: read.c make.h commands.h dep.h filedef.h variable.h\nremake.obj: remake.c make.h commands.h job.h dep.h filedef.h\nrule.obj: rule.c make.h commands.h dep.h filedef.h variable.h rule.h\nimplicit.obj: implicit.c make.h rule.h dep.h filedef.h\ndefault.obj: default.c make.h rule.h dep.h filedef.h commands.h variable.h\nvariable.obj: variable.c make.h commands.h variable.h dep.h filedef.h\nexpand.obj: expand.c make.h commands.h filedef.h variable.h\nfunction.obj: function.c make.h variable.h dep.h commands.h job.h\nvpath.obj: vpath.c make.h filedef.h variable.h\nversion.obj: version.c config.h\narscan.obj: arscan.c\nar.obj: ar.c make.h filedef.h\nsigname.obj: signame.c\nremote-stub.obj: remote-stub.c\n[.glob]glob.obj: [.glob]glob.c\n[.glob]fnmatch.obj: [.glob]fnmatch.c\ngetopt.obj: getopt.c\ngetopt1.obj: getopt1.c\nvmsfunctions.obj: vmsfunctions.c make.h vmsdir.h\nvmsify.obj: vmsify.c make.h\n\nconfig.h: config.h-vms\n\t$(CP) $< $@\n"
  },
  {
    "path": "sources/host-tools/make-3.81/misc.c",
    "content": "/* Miscellaneous generic support functions for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"dep.h\"\n#include \"debug.h\"\n\n/* Variadic functions.  We go through contortions to allow proper function\n   prototypes for both ANSI and pre-ANSI C compilers, and also for those\n   which support stdarg.h vs. varargs.h, and finally those which have\n   vfprintf(), etc. and those who have _doprnt... or nothing.\n\n   This fancy stuff all came from GNU fileutils, except for the VA_PRINTF and\n   VA_END macros used here since we have multiple print functions.  */\n\n#if USE_VARIADIC\n# if HAVE_STDARG_H\n#  include <stdarg.h>\n#  define VA_START(args, lastarg) va_start(args, lastarg)\n# else\n#  include <varargs.h>\n#  define VA_START(args, lastarg) va_start(args)\n# endif\n# if HAVE_VPRINTF\n#  define VA_PRINTF(fp, lastarg, args) vfprintf((fp), (lastarg), (args))\n# else\n#  define VA_PRINTF(fp, lastarg, args) _doprnt((lastarg), (args), (fp))\n# endif\n# define VA_END(args) va_end(args)\n#else\n/* We can't use any variadic interface! */\n# define va_alist a1, a2, a3, a4, a5, a6, a7, a8\n# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;\n# define VA_START(args, lastarg)\n# define VA_PRINTF(fp, lastarg, args) fprintf((fp), (lastarg), va_alist)\n# define VA_END(args)\n#endif\n\n\n/* Compare strings *S1 and *S2.\n   Return negative if the first is less, positive if it is greater,\n   zero if they are equal.  */\n\nint\nalpha_compare (const void *v1, const void *v2)\n{\n  const char *s1 = *((char **)v1);\n  const char *s2 = *((char **)v2);\n\n  if (*s1 != *s2)\n    return *s1 - *s2;\n  return strcmp (s1, s2);\n}\n\f\n/* Discard each backslash-newline combination from LINE.\n   Backslash-backslash-newline combinations become backslash-newlines.\n   This is done by copying the text at LINE into itself.  */\n\nvoid\ncollapse_continuations (char *line)\n{\n  register char *in, *out, *p;\n  register int backslash;\n  register unsigned int bs_write;\n\n  in = strchr (line, '\\n');\n  if (in == 0)\n    return;\n\n  out = in;\n  while (out > line && out[-1] == '\\\\')\n    --out;\n\n  while (*in != '\\0')\n    {\n      /* BS_WRITE gets the number of quoted backslashes at\n\t the end just before IN, and BACKSLASH gets nonzero\n\t if the next character is quoted.  */\n      backslash = 0;\n      bs_write = 0;\n      for (p = in - 1; p >= line && *p == '\\\\'; --p)\n\t{\n\t  if (backslash)\n\t    ++bs_write;\n\t  backslash = !backslash;\n\n\t  /* It should be impossible to go back this far without exiting,\n\t     but if we do, we can't get the right answer.  */\n\t  if (in == out - 1)\n\t    abort ();\n\t}\n\n      /* Output the appropriate number of backslashes.  */\n      while (bs_write-- > 0)\n\t*out++ = '\\\\';\n\n      /* Skip the newline.  */\n      ++in;\n\n      /* If the newline is quoted, discard following whitespace\n\t and any preceding whitespace; leave just one space.  */\n      if (backslash)\n\t{\n\t  in = next_token (in);\n\t  while (out > line && isblank ((unsigned char)out[-1]))\n\t    --out;\n\t  *out++ = ' ';\n\t}\n      else\n\t/* If the newline isn't quoted, put it in the output.  */\n\t*out++ = '\\n';\n\n      /* Now copy the following line to the output.\n\t Stop when we find backslashes followed by a newline.  */\n      while (*in != '\\0')\n\tif (*in == '\\\\')\n\t  {\n\t    p = in + 1;\n\t    while (*p == '\\\\')\n\t      ++p;\n\t    if (*p == '\\n')\n\t      {\n\t\tin = p;\n\t\tbreak;\n\t      }\n\t    while (in < p)\n\t      *out++ = *in++;\n\t  }\n\telse\n\t  *out++ = *in++;\n    }\n\n  *out = '\\0';\n}\n\f\n/* Print N spaces (used in debug for target-depth).  */\n\nvoid\nprint_spaces (unsigned int n)\n{\n  while (n-- > 0)\n    putchar (' ');\n}\n\n\f\n/* Return a newly-allocated string whose contents\n   concatenate those of s1, s2, s3.  */\n\nchar *\nconcat (const char *s1, const char *s2, const char *s3)\n{\n  unsigned int len1, len2, len3;\n  char *result;\n\n  len1 = *s1 != '\\0' ? strlen (s1) : 0;\n  len2 = *s2 != '\\0' ? strlen (s2) : 0;\n  len3 = *s3 != '\\0' ? strlen (s3) : 0;\n\n  result = (char *) xmalloc (len1 + len2 + len3 + 1);\n\n  if (*s1 != '\\0')\n    bcopy (s1, result, len1);\n  if (*s2 != '\\0')\n    bcopy (s2, result + len1, len2);\n  if (*s3 != '\\0')\n    bcopy (s3, result + len1 + len2, len3);\n  *(result + len1 + len2 + len3) = '\\0';\n\n  return result;\n}\n\f\n/* Print a message on stdout.  */\n\nvoid\n#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H\nmessage (int prefix, const char *fmt, ...)\n#else\nmessage (prefix, fmt, va_alist)\n     int prefix;\n     const char *fmt;\n     va_dcl\n#endif\n{\n#if USE_VARIADIC\n  va_list args;\n#endif\n\n  log_working_directory (1);\n\n  if (fmt != 0)\n    {\n      if (prefix)\n\t{\n\t  if (makelevel == 0)\n\t    printf (\"%s: \", program);\n\t  else\n\t    printf (\"%s[%u]: \", program, makelevel);\n\t}\n      VA_START (args, fmt);\n      VA_PRINTF (stdout, fmt, args);\n      VA_END (args);\n      putchar ('\\n');\n    }\n\n  fflush (stdout);\n}\n\n/* Print an error message.  */\n\nvoid\n#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H\nerror (const struct floc *flocp, const char *fmt, ...)\n#else\nerror (flocp, fmt, va_alist)\n     const struct floc *flocp;\n     const char *fmt;\n     va_dcl\n#endif\n{\n#if USE_VARIADIC\n  va_list args;\n#endif\n\n  log_working_directory (1);\n\n  if (flocp && flocp->filenm)\n    fprintf (stderr, \"%s:%lu: \", flocp->filenm, flocp->lineno);\n  else if (makelevel == 0)\n    fprintf (stderr, \"%s: \", program);\n  else\n    fprintf (stderr, \"%s[%u]: \", program, makelevel);\n\n  VA_START(args, fmt);\n  VA_PRINTF (stderr, fmt, args);\n  VA_END (args);\n\n  putc ('\\n', stderr);\n  fflush (stderr);\n}\n\n/* Print an error message and exit.  */\n\nvoid\n#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H\nfatal (const struct floc *flocp, const char *fmt, ...)\n#else\nfatal (flocp, fmt, va_alist)\n     const struct floc *flocp;\n     const char *fmt;\n     va_dcl\n#endif\n{\n#if USE_VARIADIC\n  va_list args;\n#endif\n\n  log_working_directory (1);\n\n  if (flocp && flocp->filenm)\n    fprintf (stderr, \"%s:%lu: *** \", flocp->filenm, flocp->lineno);\n  else if (makelevel == 0)\n    fprintf (stderr, \"%s: *** \", program);\n  else\n    fprintf (stderr, \"%s[%u]: *** \", program, makelevel);\n\n  VA_START(args, fmt);\n  VA_PRINTF (stderr, fmt, args);\n  VA_END (args);\n\n  fputs (_(\".  Stop.\\n\"), stderr);\n\n  die (2);\n}\n\n#ifndef HAVE_STRERROR\n\n#undef\tstrerror\n\nchar *\nstrerror (int errnum)\n{\n  extern int errno, sys_nerr;\n#ifndef __DECC\n  extern char *sys_errlist[];\n#endif\n  static char buf[] = \"Unknown error 12345678901234567890\";\n\n  if (errno < sys_nerr)\n    return sys_errlist[errnum];\n\n  sprintf (buf, _(\"Unknown error %d\"), errnum);\n  return buf;\n}\n#endif\n\n/* Print an error message from errno.  */\n\nvoid\nperror_with_name (const char *str, const char *name)\n{\n  error (NILF, _(\"%s%s: %s\"), str, name, strerror (errno));\n}\n\n/* Print an error message from errno and exit.  */\n\nvoid\npfatal_with_name (const char *name)\n{\n  fatal (NILF, _(\"%s: %s\"), name, strerror (errno));\n\n  /* NOTREACHED */\n}\n\f\n/* Like malloc but get fatal error if memory is exhausted.  */\n/* Don't bother if we're using dmalloc; it provides these for us.  */\n\n#ifndef HAVE_DMALLOC_H\n\n#undef xmalloc\n#undef xrealloc\n#undef xstrdup\n\nchar *\nxmalloc (unsigned int size)\n{\n  /* Make sure we don't allocate 0, for pre-ANSI libraries.  */\n  char *result = (char *) malloc (size ? size : 1);\n  if (result == 0)\n    fatal (NILF, _(\"virtual memory exhausted\"));\n  return result;\n}\n\n\nchar *\nxrealloc (char *ptr, unsigned int size)\n{\n  char *result;\n\n  /* Some older implementations of realloc() don't conform to ANSI.  */\n  if (! size)\n    size = 1;\n  result = ptr ? realloc (ptr, size) : malloc (size);\n  if (result == 0)\n    fatal (NILF, _(\"virtual memory exhausted\"));\n  return result;\n}\n\n\nchar *\nxstrdup (const char *ptr)\n{\n  char *result;\n\n#ifdef HAVE_STRDUP\n  result = strdup (ptr);\n#else\n  result = (char *) malloc (strlen (ptr) + 1);\n#endif\n\n  if (result == 0)\n    fatal (NILF, _(\"virtual memory exhausted\"));\n\n#ifdef HAVE_STRDUP\n  return result;\n#else\n  return strcpy(result, ptr);\n#endif\n}\n\n#endif  /* HAVE_DMALLOC_H */\n\nchar *\nsavestring (const char *str, unsigned int length)\n{\n  register char *out = (char *) xmalloc (length + 1);\n  if (length > 0)\n    bcopy (str, out, length);\n  out[length] = '\\0';\n  return out;\n}\n\f\n\n/* Limited INDEX:\n   Search through the string STRING, which ends at LIMIT, for the character C.\n   Returns a pointer to the first occurrence, or nil if none is found.\n   Like INDEX except that the string searched ends where specified\n   instead of at the first null.  */\n\nchar *\nlindex (const char *s, const char *limit, int c)\n{\n  while (s < limit)\n    if (*s++ == c)\n      return (char *)(s - 1);\n\n  return 0;\n}\n\f\n/* Return the address of the first whitespace or null in the string S.  */\n\nchar *\nend_of_token (const char *s)\n{\n  while (*s != '\\0' && !isblank ((unsigned char)*s))\n    ++s;\n  return (char *)s;\n}\n\n#ifdef WINDOWS32\n/*\n * Same as end_of_token, but take into account a stop character\n */\nchar *\nend_of_token_w32 (char *s, char stopchar)\n{\n  register char *p = s;\n  register int backslash = 0;\n\n  while (*p != '\\0' && *p != stopchar\n\t && (backslash || !isblank ((unsigned char)*p)))\n    {\n      if (*p++ == '\\\\')\n        {\n          backslash = !backslash;\n          while (*p == '\\\\')\n            {\n              backslash = !backslash;\n              ++p;\n            }\n        }\n      else\n        backslash = 0;\n    }\n\n  return p;\n}\n#endif\n\n/* Return the address of the first nonwhitespace or null in the string S.  */\n\nchar *\nnext_token (const char *s)\n{\n  while (isblank ((unsigned char)*s))\n    ++s;\n  return (char *)s;\n}\n\n/* Find the next token in PTR; return the address of it, and store the\n   length of the token into *LENGTHPTR if LENGTHPTR is not nil.  */\n\nchar *\nfind_next_token (char **ptr, unsigned int *lengthptr)\n{\n  char *p = next_token (*ptr);\n  char *end;\n\n  if (*p == '\\0')\n    return 0;\n\n  *ptr = end = end_of_token (p);\n  if (lengthptr != 0)\n    *lengthptr = end - p;\n  return p;\n}\n\f\n\n/* Allocate a new `struct dep' with all fields initialized to 0.   */\n\nstruct dep *\nalloc_dep ()\n{\n  struct dep *d = (struct dep *) xmalloc (sizeof (struct dep));\n  bzero ((char *) d, sizeof (struct dep));\n  return d;\n}\n\n\n/* Free `struct dep' along with `name' and `stem'.   */\n\nvoid\nfree_dep (struct dep *d)\n{\n  if (d->name != 0)\n    free (d->name);\n\n  if (d->stem != 0)\n    free (d->stem);\n\n  free ((char *)d);\n}\n\n/* Copy a chain of `struct dep', making a new chain\n   with the same contents as the old one.  */\n\nstruct dep *\ncopy_dep_chain (const struct dep *d)\n{\n  register struct dep *c;\n  struct dep *firstnew = 0;\n  struct dep *lastnew = 0;\n\n  while (d != 0)\n    {\n      c = (struct dep *) xmalloc (sizeof (struct dep));\n      bcopy ((char *) d, (char *) c, sizeof (struct dep));\n\n      if (c->name != 0)\n\tc->name = xstrdup (c->name);\n      if (c->stem != 0)\n\tc->stem = xstrdup (c->stem);\n\n      c->next = 0;\n      if (firstnew == 0)\n\tfirstnew = lastnew = c;\n      else\n\tlastnew = lastnew->next = c;\n\n      d = d->next;\n    }\n\n  return firstnew;\n}\n\n/* Free a chain of 'struct dep'.  */\n\nvoid\nfree_dep_chain (struct dep *d)\n{\n  while (d != 0)\n    {\n      struct dep *df = d;\n      d = d->next;\n      free_dep (df);\n    }\n}\n\f\n/* Free a chain of `struct nameseq'. Each nameseq->name is freed\n   as well.  For `struct dep' chains use free_dep_chain.  */\n\nvoid\nfree_ns_chain (struct nameseq *n)\n{\n  register struct nameseq *tmp;\n\n  while (n != 0)\n  {\n    if (n->name != 0)\n      free (n->name);\n\n    tmp = n;\n\n    n = n->next;\n\n    free (tmp);\n  }\n\n}\f\n#ifdef\tiAPX286\n/* The losing compiler on this machine can't handle this macro.  */\n\nchar *\ndep_name (struct dep *dep)\n{\n  return dep->name == 0 ? dep->file->name : dep->name;\n}\n#endif\n\f\n#ifdef\tGETLOADAVG_PRIVILEGED\n\n#ifdef POSIX\n\n/* Hopefully if a system says it's POSIX.1 and has the setuid and setgid\n   functions, they work as POSIX.1 says.  Some systems (Alpha OSF/1 1.2,\n   for example) which claim to be POSIX.1 also have the BSD setreuid and\n   setregid functions, but they don't work as in BSD and only the POSIX.1\n   way works.  */\n\n#undef HAVE_SETREUID\n#undef HAVE_SETREGID\n\n#else\t/* Not POSIX.  */\n\n/* Some POSIX.1 systems have the seteuid and setegid functions.  In a\n   POSIX-like system, they are the best thing to use.  However, some\n   non-POSIX systems have them too but they do not work in the POSIX style\n   and we must use setreuid and setregid instead.  */\n\n#undef HAVE_SETEUID\n#undef HAVE_SETEGID\n\n#endif\t/* POSIX.  */\n\n#ifndef\tHAVE_UNISTD_H\nextern int getuid (), getgid (), geteuid (), getegid ();\nextern int setuid (), setgid ();\n#ifdef HAVE_SETEUID\nextern int seteuid ();\n#else\n#ifdef\tHAVE_SETREUID\nextern int setreuid ();\n#endif\t/* Have setreuid.  */\n#endif\t/* Have seteuid.  */\n#ifdef HAVE_SETEGID\nextern int setegid ();\n#else\n#ifdef\tHAVE_SETREGID\nextern int setregid ();\n#endif\t/* Have setregid.  */\n#endif\t/* Have setegid.  */\n#endif\t/* No <unistd.h>.  */\n\n/* Keep track of the user and group IDs for user- and make- access.  */\nstatic int user_uid = -1, user_gid = -1, make_uid = -1, make_gid = -1;\n#define\taccess_inited\t(user_uid != -1)\nstatic enum { make, user } current_access;\n\n\n/* Under -d, write a message describing the current IDs.  */\n\nstatic void\nlog_access (const char *flavor)\n{\n  if (! ISDB (DB_JOBS))\n    return;\n\n  /* All the other debugging messages go to stdout,\n     but we write this one to stderr because it might be\n     run in a child fork whose stdout is piped.  */\n\n  fprintf (stderr, _(\"%s: user %lu (real %lu), group %lu (real %lu)\\n\"),\n\t   flavor, (unsigned long) geteuid (), (unsigned long) getuid (),\n           (unsigned long) getegid (), (unsigned long) getgid ());\n  fflush (stderr);\n}\n\n\nstatic void\ninit_access (void)\n{\n#ifndef VMS\n  user_uid = getuid ();\n  user_gid = getgid ();\n\n  make_uid = geteuid ();\n  make_gid = getegid ();\n\n  /* Do these ever fail?  */\n  if (user_uid == -1 || user_gid == -1 || make_uid == -1 || make_gid == -1)\n    pfatal_with_name (\"get{e}[gu]id\");\n\n  log_access (_(\"Initialized access\"));\n\n  current_access = make;\n#endif\n}\n\n#endif\t/* GETLOADAVG_PRIVILEGED */\n\n/* Give the process appropriate permissions for access to\n   user data (i.e., to stat files, or to spawn a child process).  */\nvoid\nuser_access (void)\n{\n#ifdef\tGETLOADAVG_PRIVILEGED\n\n  if (!access_inited)\n    init_access ();\n\n  if (current_access == user)\n    return;\n\n  /* We are in \"make access\" mode.  This means that the effective user and\n     group IDs are those of make (if it was installed setuid or setgid).\n     We now want to set the effective user and group IDs to the real IDs,\n     which are the IDs of the process that exec'd make.  */\n\n#ifdef\tHAVE_SETEUID\n\n  /* Modern systems have the seteuid/setegid calls which set only the\n     effective IDs, which is ideal.  */\n\n  if (seteuid (user_uid) < 0)\n    pfatal_with_name (\"user_access: seteuid\");\n\n#else\t/* Not HAVE_SETEUID.  */\n\n#ifndef\tHAVE_SETREUID\n\n  /* System V has only the setuid/setgid calls to set user/group IDs.\n     There is an effective ID, which can be set by setuid/setgid.\n     It can be set (unless you are root) only to either what it already is\n     (returned by geteuid/getegid, now in make_uid/make_gid),\n     the real ID (return by getuid/getgid, now in user_uid/user_gid),\n     or the saved set ID (what the effective ID was before this set-ID\n     executable (make) was exec'd).  */\n\n  if (setuid (user_uid) < 0)\n    pfatal_with_name (\"user_access: setuid\");\n\n#else\t/* HAVE_SETREUID.  */\n\n  /* In 4BSD, the setreuid/setregid calls set both the real and effective IDs.\n     They may be set to themselves or each other.  So you have two alternatives\n     at any one time.  If you use setuid/setgid, the effective will be set to\n     the real, leaving only one alternative.  Using setreuid/setregid, however,\n     you can toggle between your two alternatives by swapping the values in a\n     single setreuid or setregid call.  */\n\n  if (setreuid (make_uid, user_uid) < 0)\n    pfatal_with_name (\"user_access: setreuid\");\n\n#endif\t/* Not HAVE_SETREUID.  */\n#endif\t/* HAVE_SETEUID.  */\n\n#ifdef\tHAVE_SETEGID\n  if (setegid (user_gid) < 0)\n    pfatal_with_name (\"user_access: setegid\");\n#else\n#ifndef\tHAVE_SETREGID\n  if (setgid (user_gid) < 0)\n    pfatal_with_name (\"user_access: setgid\");\n#else\n  if (setregid (make_gid, user_gid) < 0)\n    pfatal_with_name (\"user_access: setregid\");\n#endif\n#endif\n\n  current_access = user;\n\n  log_access (_(\"User access\"));\n\n#endif\t/* GETLOADAVG_PRIVILEGED */\n}\n\n/* Give the process appropriate permissions for access to\n   make data (i.e., the load average).  */\nvoid\nmake_access (void)\n{\n#ifdef\tGETLOADAVG_PRIVILEGED\n\n  if (!access_inited)\n    init_access ();\n\n  if (current_access == make)\n    return;\n\n  /* See comments in user_access, above.  */\n\n#ifdef\tHAVE_SETEUID\n  if (seteuid (make_uid) < 0)\n    pfatal_with_name (\"make_access: seteuid\");\n#else\n#ifndef\tHAVE_SETREUID\n  if (setuid (make_uid) < 0)\n    pfatal_with_name (\"make_access: setuid\");\n#else\n  if (setreuid (user_uid, make_uid) < 0)\n    pfatal_with_name (\"make_access: setreuid\");\n#endif\n#endif\n\n#ifdef\tHAVE_SETEGID\n  if (setegid (make_gid) < 0)\n    pfatal_with_name (\"make_access: setegid\");\n#else\n#ifndef\tHAVE_SETREGID\n  if (setgid (make_gid) < 0)\n    pfatal_with_name (\"make_access: setgid\");\n#else\n  if (setregid (user_gid, make_gid) < 0)\n    pfatal_with_name (\"make_access: setregid\");\n#endif\n#endif\n\n  current_access = make;\n\n  log_access (_(\"Make access\"));\n\n#endif\t/* GETLOADAVG_PRIVILEGED */\n}\n\n/* Give the process appropriate permissions for a child process.\n   This is like user_access, but you can't get back to make_access.  */\nvoid\nchild_access (void)\n{\n#ifdef\tGETLOADAVG_PRIVILEGED\n\n  if (!access_inited)\n    abort ();\n\n  /* Set both the real and effective UID and GID to the user's.\n     They cannot be changed back to make's.  */\n\n#ifndef\tHAVE_SETREUID\n  if (setuid (user_uid) < 0)\n    pfatal_with_name (\"child_access: setuid\");\n#else\n  if (setreuid (user_uid, user_uid) < 0)\n    pfatal_with_name (\"child_access: setreuid\");\n#endif\n\n#ifndef\tHAVE_SETREGID\n  if (setgid (user_gid) < 0)\n    pfatal_with_name (\"child_access: setgid\");\n#else\n  if (setregid (user_gid, user_gid) < 0)\n    pfatal_with_name (\"child_access: setregid\");\n#endif\n\n  log_access (_(\"Child access\"));\n\n#endif\t/* GETLOADAVG_PRIVILEGED */\n}\n\f\n#ifdef NEED_GET_PATH_MAX\nunsigned int\nget_path_max (void)\n{\n  static unsigned int value;\n\n  if (value == 0)\n    {\n      long int x = pathconf (\"/\", _PC_PATH_MAX);\n      if (x > 0)\n\tvalue = x;\n      else\n\treturn MAXPATHLEN;\n    }\n\n  return value;\n}\n#endif\n\f\n\n/* This code is stolen from gnulib.\n   If/when we abandon the requirement to work with K&R compilers, we can\n   remove this (and perhaps other parts of GNU make!) and migrate to using\n   gnulib directly.\n\n   This is called only through atexit(), which means die() has already been\n   invoked.  So, call exit() here directly.  Apparently that works...?\n*/\n\n/* Close standard output, exiting with status 'exit_failure' on failure.\n   If a program writes *anything* to stdout, that program should close\n   stdout and make sure that it succeeds before exiting.  Otherwise,\n   suppose that you go to the extreme of checking the return status\n   of every function that does an explicit write to stdout.  The last\n   printf can succeed in writing to the internal stream buffer, and yet\n   the fclose(stdout) could still fail (due e.g., to a disk full error)\n   when it tries to write out that buffered data.  Thus, you would be\n   left with an incomplete output file and the offending program would\n   exit successfully.  Even calling fflush is not always sufficient,\n   since some file systems (NFS and CODA) buffer written/flushed data\n   until an actual close call.\n\n   Besides, it's wasteful to check the return value from every call\n   that writes to stdout -- just let the internal stream state record\n   the failure.  That's what the ferror test is checking below.\n\n   It's important to detect such failures and exit nonzero because many\n   tools (most notably `make' and other build-management systems) depend\n   on being able to detect failure in other tools via their exit status.  */\n\nvoid\nclose_stdout (void)\n{\n  int prev_fail = ferror (stdout);\n  int fclose_fail = fclose (stdout);\n\n  if (prev_fail || fclose_fail)\n    {\n      if (fclose_fail)\n        error (NILF, _(\"write error: %s\"), strerror (errno));\n      else\n        error (NILF, _(\"write error\"));\n      exit (EXIT_FAILURE);\n    }\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/ChangeLog",
    "content": "2006-01-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added new translation for Vietnamese (vi).\n\n2005-07-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added new translation for Indonesian (id).\n\n2005-05-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* POTFILES.in: Add new file vmsjobs.c.\n\n2005-04-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added a new translation for Kinywarwanda (rw).\n\n2005-02-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added a new translation for Irish (ga).\n\n2005-02-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added a new translation for Finnish (fi).\n\n2003-10-18  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added a new translation for Belarusian (be).\n\n2002-12-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Added a new translation for Ukrainian (uk).\n\n2002-10-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* POTFILES.in: Add variable.h as it has a translatable string.\n\n2002-08-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Add a new translation for Chinese (simplified) (zh_CN).\n\n2002-08-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS: Add a new translation for Swedish (sv).\n\n2002-04-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* LINGUAS, hr.po: Added new translation: Croatian.\n\n\t* da.po, de.po, es.po, fr.po, gl.po, he.po, ja.po, ko.po, nl.po,\n\tpl.po, pt_BR.po, ru.po, tr.po: Moved from i18n to here.\n\t* .cvsignore: Moved from i18n to here.\n\n\t* POTFILES.in, LINGUAS, Makevars: Created.\n\f\nCopyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/LINGUAS",
    "content": "# Set of available languages: 23 languages\n\nbe da de es fi fr ga gl he hr id ja ko nl pl pt_BR ru rw sv tr uk vi zh_CN\n\n# Can't seem to get en@quot and en@boldquot to build properly?\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/Makefile.in.in",
    "content": "# Makefile for PO directory in any package using GNU gettext.\n# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu>\n#\n# This file can be copied and used freely without restrictions.  It can\n# be used in projects which are not available under the GNU General Public\n# License but which still want to provide support for the GNU gettext\n# functionality.\n# Please note that the actual code of GNU gettext is covered by the GNU\n# General Public License and is *not* in the public domain.\n#\n# Origin: gettext-0.14\n\nPACKAGE = @PACKAGE@\nVERSION = @VERSION@\n\nSHELL = /bin/sh\n@SET_MAKE@\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\n\nprefix = @prefix@\nexec_prefix = @exec_prefix@\ndatadir = @datadir@\nlocaledir = $(datadir)/locale\ngettextsrcdir = $(datadir)/gettext/po\n\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nmkinstalldirs = $(SHELL) $(MKINSTALLDIRS)\n\nGMSGFMT = @GMSGFMT@\nMSGFMT = @MSGFMT@\nXGETTEXT = @XGETTEXT@\nMSGMERGE = msgmerge\nMSGMERGE_UPDATE = @MSGMERGE@ --update\nMSGINIT = msginit\nMSGCONV = msgconv\nMSGFILTER = msgfilter\n\nPOFILES = @POFILES@\nGMOFILES = @GMOFILES@\nUPDATEPOFILES = @UPDATEPOFILES@\nDUMMYPOFILES = @DUMMYPOFILES@\nDISTFILES.common = Makefile.in.in remove-potcdate.sin \\\n$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)\nDISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \\\n$(POFILES) $(GMOFILES) \\\n$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)\n\nPOTFILES = \\\n\nCATALOGS = @CATALOGS@\n\n# Makevars gets inserted here. (Don't remove this line!)\n\n.SUFFIXES:\n.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update\n\n.po.mo:\n\t@echo \"$(MSGFMT) -c -o $@ $<\"; \\\n\t$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@\n\n.po.gmo:\n\t@lang=`echo $* | sed -e 's,.*/,,'`; \\\n\ttest \"$(srcdir)\" = . && cdcmd=\"\" || cdcmd=\"cd $(srcdir) && \"; \\\n\techo \"$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po\"; \\\n\tcd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo\n\n.sin.sed:\n\tsed -e '/^#/d' $< > t-$@\n\tmv t-$@ $@\n\n\nall: all-@USE_NLS@\n\nall-yes: stamp-po\nall-no:\n\n# stamp-po is a timestamp denoting the last time at which the CATALOGS have\n# been loosely updated. Its purpose is that when a developer or translator\n# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,\n# \"make\" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent\n# invocations of \"make\" will do nothing. This timestamp would not be necessary\n# if updating the $(CATALOGS) would always touch them; however, the rule for\n# $(POFILES) has been designed to not touch files that don't need to be\n# changed.\nstamp-po: $(srcdir)/$(DOMAIN).pot\n\ttest -z \"$(GMOFILES)\" || $(MAKE) $(GMOFILES)\n\t@echo \"touch stamp-po\"\n\t@echo timestamp > stamp-poT\n\t@mv stamp-poT stamp-po\n\n# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',\n# otherwise packages like GCC can not be built if only parts of the source\n# have been downloaded.\n\n# This target rebuilds $(DOMAIN).pot; it is an expensive operation.\n# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.\n$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed\n\t$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \\\n\t  --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \\\n\t  --files-from=$(srcdir)/POTFILES.in \\\n\t  --copyright-holder='$(COPYRIGHT_HOLDER)' \\\n\t  --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'\n\ttest ! -f $(DOMAIN).po || { \\\n\t  if test -f $(srcdir)/$(DOMAIN).pot; then \\\n\t    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \\\n\t    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \\\n\t    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \\\n\t      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \\\n\t    else \\\n\t      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \\\n\t      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \\\n\t    fi; \\\n\t  else \\\n\t    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \\\n\t  fi; \\\n\t}\n\n# This rule has no dependencies: we don't need to update $(DOMAIN).pot at\n# every \"make\" invocation, only create it when it is missing.\n# Only \"make $(DOMAIN).pot-update\" or \"make dist\" will force an update.\n$(srcdir)/$(DOMAIN).pot:\n\t$(MAKE) $(DOMAIN).pot-update\n\n# This target rebuilds a PO file if $(DOMAIN).pot has changed.\n# Note that a PO file is not touched if it doesn't need to be changed.\n$(POFILES): $(srcdir)/$(DOMAIN).pot\n\t@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\\.po$$//'`; \\\n\tif test -f \"$(srcdir)/$${lang}.po\"; then \\\n\t  test \"$(srcdir)\" = . && cdcmd=\"\" || cdcmd=\"cd $(srcdir) && \"; \\\n\t  echo \"$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot\"; \\\n\t  cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \\\n\telse \\\n\t  $(MAKE) $${lang}.po-create; \\\n\tfi\n\n\ninstall: install-exec install-data\ninstall-exec:\ninstall-data: install-data-@USE_NLS@\n\tif test \"$(PACKAGE)\" = \"gettext-tools\"; then \\\n\t  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \\\n\t  for file in $(DISTFILES.common) Makevars.template; do \\\n\t    $(INSTALL_DATA) $(srcdir)/$$file \\\n\t\t\t    $(DESTDIR)$(gettextsrcdir)/$$file; \\\n\t  done; \\\n\t  for file in Makevars; do \\\n\t    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \\\n\t  done; \\\n\telse \\\n\t  : ; \\\n\tfi\ninstall-data-no: all\ninstall-data-yes: all\n\t$(mkinstalldirs) $(DESTDIR)$(datadir)\n\t@catalogs='$(CATALOGS)'; \\\n\tfor cat in $$catalogs; do \\\n\t  cat=`basename $$cat`; \\\n\t  lang=`echo $$cat | sed -e 's/\\.gmo$$//'`; \\\n\t  dir=$(localedir)/$$lang/LC_MESSAGES; \\\n\t  $(mkinstalldirs) $(DESTDIR)$$dir; \\\n\t  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \\\n\t  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \\\n\t  echo \"installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo\"; \\\n\t  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \\\n\t    if test -n \"$$lc\"; then \\\n\t      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \\\n\t        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \\\n\t        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \\\n\t        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \\\n\t         for file in *; do \\\n\t           if test -f $$file; then \\\n\t             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \\\n\t           fi; \\\n\t         done); \\\n\t        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \\\n\t      else \\\n\t        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \\\n\t          :; \\\n\t        else \\\n\t          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t        fi; \\\n\t      fi; \\\n\t      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \\\n\t      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \\\n\t      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \\\n\t      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \\\n\t      echo \"installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo\"; \\\n\t    fi; \\\n\t  done; \\\n\tdone\n\ninstall-strip: install\n\ninstalldirs: installdirs-exec installdirs-data\ninstalldirs-exec:\ninstalldirs-data: installdirs-data-@USE_NLS@\n\tif test \"$(PACKAGE)\" = \"gettext-tools\"; then \\\n\t  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \\\n\telse \\\n\t  : ; \\\n\tfi\ninstalldirs-data-no:\ninstalldirs-data-yes:\n\t$(mkinstalldirs) $(DESTDIR)$(datadir)\n\t@catalogs='$(CATALOGS)'; \\\n\tfor cat in $$catalogs; do \\\n\t  cat=`basename $$cat`; \\\n\t  lang=`echo $$cat | sed -e 's/\\.gmo$$//'`; \\\n\t  dir=$(localedir)/$$lang/LC_MESSAGES; \\\n\t  $(mkinstalldirs) $(DESTDIR)$$dir; \\\n\t  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \\\n\t    if test -n \"$$lc\"; then \\\n\t      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \\\n\t        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \\\n\t        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \\\n\t        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \\\n\t         for file in *; do \\\n\t           if test -f $$file; then \\\n\t             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \\\n\t           fi; \\\n\t         done); \\\n\t        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \\\n\t      else \\\n\t        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \\\n\t          :; \\\n\t        else \\\n\t          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \\\n\t        fi; \\\n\t      fi; \\\n\t    fi; \\\n\t  done; \\\n\tdone\n\n# Define this as empty until I found a useful application.\ninstallcheck:\n\nuninstall: uninstall-exec uninstall-data\nuninstall-exec:\nuninstall-data: uninstall-data-@USE_NLS@\n\tif test \"$(PACKAGE)\" = \"gettext-tools\"; then \\\n\t  for file in $(DISTFILES.common) Makevars.template; do \\\n\t    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \\\n\t  done; \\\n\telse \\\n\t  : ; \\\n\tfi\nuninstall-data-no:\nuninstall-data-yes:\n\tcatalogs='$(CATALOGS)'; \\\n\tfor cat in $$catalogs; do \\\n\t  cat=`basename $$cat`; \\\n\t  lang=`echo $$cat | sed -e 's/\\.gmo$$//'`; \\\n\t  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \\\n\t    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \\\n\t  done; \\\n\tdone\n\ncheck: all\n\ninfo dvi ps pdf html tags TAGS ctags CTAGS ID:\n\nmostlyclean:\n\trm -f remove-potcdate.sed\n\trm -f stamp-poT\n\trm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po\n\trm -fr *.o\n\nclean: mostlyclean\n\ndistclean: clean\n\trm -f Makefile Makefile.in POTFILES *.mo\n\nmaintainer-clean: distclean\n\t@echo \"This command is intended for maintainers to use;\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\n\trm -f stamp-po $(GMOFILES)\n\ndistdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)\ndist distdir:\n\t$(MAKE) update-po\n\t@$(MAKE) dist2\n# This is a separate target because 'update-po' must be executed before.\ndist2: $(DISTFILES)\n\tdists=\"$(DISTFILES)\"; \\\n\tif test \"$(PACKAGE)\" = \"gettext-tools\"; then \\\n\t  dists=\"$$dists Makevars.template\"; \\\n\tfi; \\\n\tif test -f $(srcdir)/ChangeLog; then \\\n\t  dists=\"$$dists ChangeLog\"; \\\n\tfi; \\\n\tfor i in 0 1 2 3 4 5 6 7 8 9; do \\\n\t  if test -f $(srcdir)/ChangeLog.$$i; then \\\n\t    dists=\"$$dists ChangeLog.$$i\"; \\\n\t  fi; \\\n\tdone; \\\n\tif test -f $(srcdir)/LINGUAS; then dists=\"$$dists LINGUAS\"; fi; \\\n\tfor file in $$dists; do \\\n\t  if test -f $$file; then \\\n\t    cp -p $$file $(distdir); \\\n\t  else \\\n\t    cp -p $(srcdir)/$$file $(distdir); \\\n\t  fi; \\\n\tdone\n\nupdate-po: Makefile\n\t$(MAKE) $(DOMAIN).pot-update\n\ttest -z \"$(UPDATEPOFILES)\" || $(MAKE) $(UPDATEPOFILES)\n\t$(MAKE) update-gmo\n\n# General rule for creating PO files.\n\n.nop.po-create:\n\t@lang=`echo $@ | sed -e 's/\\.po-create$$//'`; \\\n\techo \"File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'.\" 1>&2; \\\n\texit 1\n\n# General rule for updating PO files.\n\n.nop.po-update:\n\t@lang=`echo $@ | sed -e 's/\\.po-update$$//'`; \\\n\tif test \"$(PACKAGE)\" = \"gettext-tools\"; then PATH=`pwd`/../src:$$PATH; fi; \\\n\ttmpdir=`pwd`; \\\n\techo \"$$lang:\"; \\\n\ttest \"$(srcdir)\" = . && cdcmd=\"\" || cdcmd=\"cd $(srcdir) && \"; \\\n\techo \"$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po\"; \\\n\tcd $(srcdir); \\\n\tif $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \\\n\t  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \\\n\t    rm -f $$tmpdir/$$lang.new.po; \\\n\t  else \\\n\t    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \\\n\t      :; \\\n\t    else \\\n\t      echo \"msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po\" 1>&2; \\\n\t      exit 1; \\\n\t    fi; \\\n\t  fi; \\\n\telse \\\n\t  echo \"msgmerge for $$lang.po failed!\" 1>&2; \\\n\t  rm -f $$tmpdir/$$lang.new.po; \\\n\tfi\n\n$(DUMMYPOFILES):\n\nupdate-gmo: Makefile $(GMOFILES)\n\t@:\n\nMakefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@\n\tcd $(top_builddir) \\\n\t  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \\\n\t       $(SHELL) ./config.status\n\nforce:\n\n# Tell versions [3.59,3.63) of GNU make not to export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/Makevars",
    "content": "# This is a -*-Makefile-*-\n# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n\n# Makefile variables for PO directory in any package using GNU gettext.\n\n# Usually the message domain is the same as the package name.\nDOMAIN = $(PACKAGE)\n\n# These two variables depend on the location of this directory.\nsubdir = po\ntop_builddir = ..\n\n# These options get passed to xgettext.\nXGETTEXT_OPTIONS = --keyword=_ --keyword=N_\n\n# This is the copyright holder that gets inserted into the header of the\n# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding\n# package.  (Note that the msgstr strings, extracted from the package's\n# sources, belong to the copyright holder of the package.)  Translators are\n# expected to transfer the copyright for their translations to this person\n# or entity, or to disclaim their copyright.  The empty string stands for\n# the public domain; in this case the translators are expected to disclaim\n# their copyright.\nCOPYRIGHT_HOLDER = Free Software Foundation, Inc.\n\n# This is the email address or URL to which the translators shall report\n# bugs in the untranslated strings:\n# - Strings which are not entire sentences, see the maintainer guidelines\n#   in the GNU gettext documentation, section 'Preparing Strings'.\n# - Strings which use unclear terms or require additional context to be\n#   understood.\n# - Strings which make invalid assumptions about notation of date, time or\n#   money.\n# - Pluralisation problems.\n# - Incorrect English spelling.\n# - Incorrect formatting.\n# It can be your email address, or a mailing list address where translators\n# can write to without being subscribed, or the URL of a web page through\n# which the translators can contact you.\nMSGID_BUGS_ADDRESS = bug-make@gnu.org\n\n# This is the list of locale categories, beyond LC_MESSAGES, for which the\n# message catalogs shall be used.  It is usually empty.\nEXTRA_LOCALE_CATEGORIES =\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/POTFILES.in",
    "content": "# List of source files containing translatable strings.\n# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\n# Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nar.c\narscan.c\ncommands.c\ndir.c\nexpand.c\nfile.c\nfunction.c\ngetopt.c\nhash.c\nimplicit.c\njob.c\nmain.c\nmisc.c\nread.c\nremake.c\nremote-cstms.c\nrule.c\nsigname.c\nstrcache.c\nvariable.c\nvariable.h\nvmsfunctions.c\nvmsjobs.c\nvpath.c\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/Rules-quot",
    "content": "# Special Makefile rules for English message catalogs with quotation marks.\n\nDISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot\n\n.SUFFIXES: .insert-header .po-update-en\n\nen@quot.po-create:\n\t$(MAKE) en@quot.po-update\nen@boldquot.po-create:\n\t$(MAKE) en@boldquot.po-update\n\nen@quot.po-update: en@quot.po-update-en\nen@boldquot.po-update: en@boldquot.po-update-en\n\n.insert-header.po-update-en:\n\t@lang=`echo $@ | sed -e 's/\\.po-update-en$$//'`; \\\n\tif test \"$(PACKAGE)\" = \"gettext\"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \\\n\ttmpdir=`pwd`; \\\n\techo \"$$lang:\"; \\\n\tll=`echo $$lang | sed -e 's/@.*//'`; \\\n\tLC_ALL=C; export LC_ALL; \\\n\tcd $(srcdir); \\\n\tif $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \\\n\t  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \\\n\t    rm -f $$tmpdir/$$lang.new.po; \\\n\t  else \\\n\t    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \\\n\t      :; \\\n\t    else \\\n\t      echo \"creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po\" 1>&2; \\\n\t      exit 1; \\\n\t    fi; \\\n\t  fi; \\\n\telse \\\n\t  echo \"creation of $$lang.po failed!\" 1>&2; \\\n\t  rm -f $$tmpdir/$$lang.new.po; \\\n\tfi\n\nen@quot.insert-header: insert-header.sin\n\tsed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header\n\nen@boldquot.insert-header: insert-header.sin\n\tsed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header\n\nmostlyclean: mostlyclean-quot\nmostlyclean-quot:\n\trm -f *.insert-header\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/be.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2002, 2003 Free Software Foundation, Inc.\n# Ales Nyakhaychyk <nab@mail.by>, 2002, 2003.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2003-10-21 11:50+0300\\n\"\n\"Last-Translator: Ales Nyakhaychyk <nab@mail.by>\\n\"\n\"Language-Team: Belarusian <i18n@mova.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"X-Generator: KBabel 0.9.6\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"спроба выкарыстаць непадтрымліваемую мажлівасьць: \\\"%s\\\"\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"дакрананьне да ўдзельніку архіва недаступна на VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: архіў \\\"%s\\\" ня йснуе\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: \\\"%s\\\" - гэта не рэчаісны архіў\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: удзельнік \\\"%s\\\" ня йснуе ў \\\"%s\\\"\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (назва мусіла быць абрэзана)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Дата %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, рэжым = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Выдаляецца файл \\\"%s\\\"\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Выдаляецца файл \\\"%s\\\"\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  загады для выкананьня\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (убудаваны):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (з\\\"%s\\\", радок %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Тэчкі\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"\"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"\"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Не\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" файлаў, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"не\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" так далёка.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Выдаляюцца прамежкавыя файлы...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: адбітак часу па-за дапушчальнымі межамі, падстаўляецца %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Бягучы час\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Ня мэта:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Так сама робяцца:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Час зьмяненьня ніколі не правяраўся.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Файл ня йснуе.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Файл вельмі стары.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Апошняе зьмяненьне %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Файл быў абноўлены.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Файл ня быў абноўлены.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Загады, што выконваюцца зараз (ГЭТА - ПАМЫЛКА).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Пасьпяхова абноўлены.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Файлы\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"\"\n\n#: function.c:1453\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1464\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"памылка ў CreatePipe() (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): памылка ў process_init_fd()\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"\"\n\n#: function.c:2101\n#, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Ня зроблена для гэтае плятформы: функцыя \\\"%s\\\"\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: выбар \\\"%s\\\" - неадназначы.\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: выбар \\\"--%s\\\" не дазваляе довад.\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: выбар \\\"%c%s\\\" не дазваляе довад.\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: выбар \\\"%s\\\" патрабуе довад.\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: нераспазнаны выбар \\\"--%s\\\".\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: нераспазнаны выбар \\\"%c%s\\\".\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: недапушчальны выбар -- %c.\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: нерэчаісны выбар -- %c.\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: выбар патрабуе довад -- %c.\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: выбар \\\"-W %s\\\" - неадназначын.\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: выбар \\\"-W %s\\\" не дазваляе довад.\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (часовы файл)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Памылка 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Памылка %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \"\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Чакаюцца незавершаныя працы....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \"\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1383\n#, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"\"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:2046\n#, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: загад не адшуканы\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL зьменена (раней \\\"%s\\\", зараз \\\"%s\\\")\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Выбары:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"\"\n\"  -h, --help                  Друкуе гэтае паведамленьне й выходзіць.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base        Друкуе нутраную базу даньняў make.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet        Не адлюстроўваць загады.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                               Выключае -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory        Друкуе бягучую тэчку.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"пусты радок нерэчаісны ў якасьці назвы файла\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"\"\n\n#: main.c:670\n#, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\n#: main.c:677\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\n#: main.c:685\n#, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:686\n#, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s спынена на 30 сэкундаў...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile са стандартнага ўводу зададзены двойчы.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (часовы файл)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (часовы файл)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Паралельня працы (-j) не падтрымліваюцца на гэтае плятхорме.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"ствараецца трубаправод прац\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Абнаўляюцца make-файлы....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefile \\\"%s\\\" ня знойдзен\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (часовы файл): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Няма мэт\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Выкарыстаньне: %s [выбары] [мэта] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Гэта праграма пабудавана для %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Гэта праграма падубавана для %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Паведамляйце пра памылкі на <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"выбар \\\"-%c\\\" патрабуе станоўчы цэлы довад\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"выбар \\\"-%c\\\" патрабуе станоўчы цэлы довад\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%s    Гэта вольнае праграмнае забесьпячэньне; глядзіце зыходны код для\\n\"\n\"%sпагадненьня аб распаўсюджваньні. Ня йснуе НІЯКАЕ гарантыі, нават аб\\n\"\n\"%sмагчымасьці выкарыстньня зь якой небудзь мэтай.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Гэта праграма пабудавана для %s\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Гэта праграма падубавана для %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: уваход у невядомую тэчку\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: выхад зь невядомае тэчкі\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: уваход у тэчку \\\"%s\\\"\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: выхад з тэчкі \\\"%s\\\"\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: уваход у невядомую тэчку\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: выхад зь невядомае тэчкі\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: уваход у тэчку \\\"%s\\\"\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: выхад з тэчкі \\\"%s\\\"\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \"\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Невядомая памылка %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"віртуальная памяць вычарпана\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: карыстальнік %lu (насамрэч %lu), група %lu (насамрэч %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"Памылка шыны\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Чытаюцца make-файлы...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Чытаецца make-файл \\\"%s\\\"\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (няма дапомнае мэты)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (пошук шляху)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \"\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \"\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"нерэчаісная дырэктыва \\\"override\\\"\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"прапушчана правіла перад загадамі\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"прапушчан падзяляльнік %s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (вы маеце на ўвазе TAB замест 8 прагалаў?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"прапушчаны \\\"endif\\\"\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"прапушчаны \\\"endef\\\", незавершаны \\\"define\\\"\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"зьнешні \\\"%s\\\"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Нічога ня было зроблена для \\\"%s\\\".\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"\\\"%s\\\" - састарэл(а).\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sНяма правіла каб зрабіць мэту \\\"%s\\\"%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%s Няма правіла каб зрабіць мэту \\\"%s\\\", патрэбную для \\\"%s\\\"%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Файл \\\"%s\\\" ужо быў разгледжаны.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Усё яшэ абнаўляецца файл \\\"%s\\\".\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Скончана абнаўленьне файла \\\"%s\\\".\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Файл \\\"%s\\\" ня йснуе.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Увага! Файл \\\"%s\\\" мае час зьмяненьня, які шчэ не надышоў.\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Увага! Файл \\\"%s\\\" мае час зьмяненьня %.2g с, які шчэ не надышоў.\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" тэрмінал.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"невядомы сыгнал\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Недапушчальная інструкцыя\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Забіты\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Памылка шыны\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Дрэнны сыстэмны выклік\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Зламаны трубаправод\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Завершаны\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Спынен\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Спынен (tty увод)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Спынен (вывад на tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Спынена (сыгнал)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Акно зьменена\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"магчым У/В\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Сыгнал пагрозы\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Запыт аб зьвестках\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"дапомны\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"асяродзьдзе\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"make-файл\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"загадны радок\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"дырэктыва \\\"override\\\"\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"аўтаматычна\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (з \\\"%s\\\", радок %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Пераменныя\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"Увага! Нявызначаная пераменная \\\"%.*s\\\"\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Невядомы ўбудаваны загад \\\"%s\\\".\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Памылка! Парожні загад.\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Перанакіраваны ўвод з %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Перанакіраваны вывад у %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Не задавайце -j ці --jobs, калі sh.exe недаступны.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"няма назвы файла для \\\"%sinclude\\\"\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Няма файлаў.\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"ТЭЧКА\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"ФАЙЛ\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Чытае ФАЙЛ як make-файл\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Уваход у\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"выхад з\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Няма пераменных.\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/boldquot.sed",
    "content": "s/\"\\([^\"]*\\)\"/“\\1”/g\ns/`\\([^`']*\\)'/‘\\1’/g\ns/ '\\([^`']*\\)' / ‘\\1’ /g\ns/ '\\([^`']*\\)'$/ ‘\\1’/g\ns/^'\\([^`']*\\)' /‘\\1’ /g\ns/“”/\"\"/g\ns/“/“\u001b[1m/g\ns/”/\u001b[0m”/g\ns/‘/‘\u001b[1m/g\ns/’/\u001b[0m’/g\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/da.po",
    "content": "# Danish messages for make\n# Copyright (C) 2001 Free Software Foundation, Inc.\n# Byrial Ole Jensen <byrial@image.dk>, 2001\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-10-05 22:56+0200\\n\"\n\"Last-Translator: Byrial Ole Jensen <byrial@image.dk>\\n\"\n\"Language-Team: Danish <dansk@klid.dk>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=iso-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"forsg p at bruge en ikke understttet facilitet: '%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"'berr arkivmedlem' er ikke tilgngelig p VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"berr: Arkivet '%s' findes ikke\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"berr: '%s' er ikke et gyldigt arkiv\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"berr: Medlemmet '%s' findes ikke i '%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"berr: Forkert returkode fra ar_member_touch p '%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module kunne ikke udtrkke modulinformation, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control fejlede med status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"kan ikke bne biblioteket '%s' for at sge medlemmet '%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Medlem '%s'%s: %ld byte ved %ld (/%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (navnet kan vre forkortet)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Tidsstempel %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, modus = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Afbrydelse.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Arkivmedlemmet '%s' er mske falsk; ikke slettet\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Arkivmedlemmet '%s' er mske falsk; ikke slettet\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Sletter filen '%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Sletter filen '%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  kommandoer at udfre\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (indbyggede):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (fra '%s', linje %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Filkataloger\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: kunne ikke undersges med stat.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (ngle %s, mtime %d): kunne ikke bnes.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (enhed %d, inode [%d,%d,%d]): kunne ikke bnes.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (enhed %ld, inode %ld): kunne ikke bnes.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (ngle %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (enhed %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (enhed %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Ingen\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" filer, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"ingen\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" umuligheder\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" indtil videre.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" umuligheder i %lu kataloger.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Rekursiv variabel '%s' refererer (i sidste ende) til sig selv\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"uafsluttet variabelreference\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Kommandoer var angivet for fil '%s' i %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Kommandoer for fil '%s' blev fundet ved implicit regel-sgning,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"men '%s' bliver nu anset som samme fil som '%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Kommandoer for '%s' vil blive ignoreret til fordel for dem til '%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"kan ikke ndre enkelt-kolon '%s' til dobbelt-kolon '%s'\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"kan ikke ndre dobbelt-kolon '%s' til enkelt-kolon '%s'\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Sletter mellemfil '%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Sletter mellemfiler ...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Tidsstempel i forkert omrde; bruger %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Aktuel tid\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Ikke et ml:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Vrdifuld fil (forudstning for .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Falsk ml (forudstning for .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Kommandolinjeml.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  En uangivet makefil, evt. en fra MAKEFILES.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Der er udfrt implicit regelsgning.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Der er ikke udfrt implicit regelsgning.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Implicit/statisk mnsterstamme: '%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Filen er en mellemfil.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Skaber ogs:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  ndringstid ikke tjekket.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Filen findes ikke.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Filen er meget gammel.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Sidst ndret %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Filen er blevet opdateret.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Filen er ikke blevet opdateret.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Kommandoer udfres nu (DETTE ER EN FEJL).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Kommandoer for afhngigheder udfres nu (DETTE ER EN FEJL).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Opdateret med godt resultat.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Behver opdatering (-q er sat).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Opdatering mislykkedes.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Ugyldig vrdi i 'update_status'-felt!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Ugyldig vrdi i 'command_state'-felt!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Filer\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Statistik for fil-hash-spande:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"ikke-numerisk frste argument til 'word'-funktionen\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"frste argument til 'word'-functionen skal vre strre end 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"ikke-numerisk frste argument til 'wordlist'-funktionen\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"ikke-numerisk andet argument til 'wordlist'-funktionen\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) mislykkedes (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) mislykkedes (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() mislykkedes (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe(): process_init_fd() mislykkedes\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Afrydder midlertidig batchfil %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Utilstrkkeligt antal argumenter (%d) til funktionen '%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Uimplementeret p denne platform: funktion '%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Uafsluttet kald til funktionen '%s'; manglende '%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: tilvalg '%s' er flertydigt\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: tilvalg '--%s' tillader ikke et argument\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: tilvalg '%c%s' tillader ikke et argument\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s tilvalg '%s' krver et argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: ikke genkendt tilvalg '--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: ikke genkendt tilvalg '%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: ulovligt tilvalg -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: ugyldigt tilvalg -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: tilvalg krver et argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: tilvalg '-W %s' er flertydigt\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: tilvalg '-W %s' tillader ikke et argument\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"kan ikke tildele %ld byte til hash-spande: hukommelsen opbrugt\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Fyldning=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Omgrupperinger=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Sammenstd=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Kigger efter en implicit regel for '%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Kigger efter en implicit arkivmedlemsregel for '%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Undgr rekursion i implicitte regler.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Prver mnsterregel med stammen '%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Afviser umulig implicit forudstning '%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Afviser umulig regelforudstning '%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Prver implicit forudstning '%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Prver regelforudstning '%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Fandt forudstning '%s' som VPATH '%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Kigger efter en regel med mellemfil '%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (midlertidig fil)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Fejl 0x%x (ignoreret)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Fejl 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Fejl %d (ignoreret)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Fejl %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (core-fil efterladt)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Venter p uafsluttede job....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Levende barn 0x%08lx (%s), PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (eksternt)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Hster taberbarn 0x%08lx, PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Hster vinderbarn 0x%08lx, PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Afrydder midlertidig jobfil %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Fjerner barn 0x%08lx, PID %ld%s fra kde.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"write jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Frigav symbol for barn 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() fejlede ved igangstning af proces (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Talte %d argumenter i fejlet igangstning\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Stter barn 0x%08lx (%s), PID %ld%s i kden.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Fik symbol for barn 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"read jobs pipe\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"kan ikke gennemtvinge belastningsgrnser p dette styrestystem\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"kan ikke gennemtvinge belastningsgrnse: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() fejlede ved igangstning af proces (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make hstede brne-pid %d, venter endnu p pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Kommando ikke fundet\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s; Skalprogram ikke fundet\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ndret (var '%s', nu '%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Opretter midlertidig jobfil %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (linje %d) Forkert skal-kontekst (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Tilvalg:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Ignoreret af hensyn til kompabilitet.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Skab alle ml betingelseslst.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C KATALOG, --directory=KATALOG\\n\"\n\"                              Skift allerfrst til KATALOG.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d                          Udskriv en masse fejlsgningsinformation.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=FLAG]              Udskriv forskellige slags \"\n\"fejlsgningsinformation.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Miljvariable har forrang for makefiler.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f FIL, --file=FIL, --makefile=FIL\\n\"\n\"                              Ls FIL som en makefil.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Udskriv denne besked og afslut.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Ignorr fejl fra kommandoer.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I KATALOG, --include-dir=KATALOG\\n\"\n\"                              Sg i KATALOG efter inkluderede makefiler.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Tillad N samtidige job; uendelig mange job \"\n\"uden argument.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Fortst selvom nogen ml ikke kan skabes.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Start ikke flere job medmindre belastningen er \"\n\"under N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Udfr ikke nogen kommandoer; udskriv dem \"\n\"bare.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o FIL, --old-file=FIL, --assume-old=FIL\\n\"\n\"                              Anse FIL som vrende meget gammel og genskab \"\n\"den ikke.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       Udskriv makes interne database.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Udfr ingen kommandoer; afslutningskoden \"\n\"fortller status.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Sl de indbyggede implicitte regler fra.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"  -R, --no-builtin-variables  Sl de indbyggede variabelvrdier fra.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Udskriv ikke kommander.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Slr -k fra.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Berr ml i stedet for at genskabe dem.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"  -v, --version               Udskriv makes versionnummer og afslut.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Udskriv det aktuelle katalog.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Sl -w fra, selv hvis det var slet til \"\n\"automatisk.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL\\n\"\n\"                              Anse FIL som vrende nyskabt.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Advar nr en udefineret variabel bruges.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"en tom streng er ugyldig som filnavn\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"ukendt fejlsgningsniveau-specifikation '%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Interrupt/undtagelse fanget (kode = 0x%x, addr = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Uhndteret undtagelsesfilter kaldt fra program %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Adgangskrnkelse: skriveoperation p adresse %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Adgangskrnkelse: lseoperation p adresse %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell stter default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell stisgning stter default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s er standset i 30 sekunder...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"udfrt sleep(30). Fortstter.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefil fra standard-ind er angivet to gange.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (midlertidig fil)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (midlertidig fil)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Parallelle job (-j) er ikke understttet p denne platform.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Stter tilbage til enkelt job-tilstand (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"intern fejl: flere '--jobserver-fds'-tilvalg\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"intern fejl: ugyldig '--jobserver-fds'-streng '%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"advarsel: tvunget -jN i undermake: slr jobserver tilstand fra.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"advarsel: jobserver ikke tilgngelig: bruger -j1. Tilfj '+' til \"\n\"ophavsmakeregel.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"oprettelse af jobledning\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"klargring af jobserver-ledning\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Opdaterer makefiler....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefilen '%s' fr mske make til at g i ring; genskaber den ikke.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Genskabelse af makefilen '%s' mislykkedes.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Inkluderet makefil '%s' blev ikke fundet.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefil '%s' blev ikke fundet.\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Kunne ikke skifte tilbage til det originale katalog.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Udfrer igen:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (midlertidig fil): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Ingen angivne ml og ingen makefil fundet\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Ingen ml\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Opdaterer endeml....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"advarsel: Fejl i urets tid opdaget. Din bygning kan vre ukomplet.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Brug: %s [tilvalg] [ml] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dette program er bygget til %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dette program er bygget til %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Send fejlmeldinger (p engelsk) til <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"'-%c'-tilvalget krver et positivt heltalligt argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"'-%c'-tilvalget krver et positivt heltalligt argument\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sDette er frit programmel; se kildeteksten for kopieringsbetingelser.\\n\"\n\"%sDer er INGEN garanti; end ikke for SALGBARHED eller EGNETHED TIL NOGET\\n\"\n\"%sBESTEMT FORML.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dette program er bygget til %s\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dette program er bygget til %s (%s)\\n\"\n\n# %s giver dato og klokkeslt\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Makedatabase, udskrevet %s\"\n\n# %s giver dato og klokkeslt\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Afsluttet makedatabase %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Gr til et ukendt katalog\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Forlader et ukendt katalog\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Gr til katalog '%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Forlader katalog '%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Gr til et ukendt katalog\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Forlader et ukendt katalog\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Gr til katalog '%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Forlader katalog '%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Stop.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Ukendt fejl %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"virtuel hukommelse opbrugt\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: bruger %lu (reelt %lu), gruppe %lu (reelt %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Indledende adgang\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Brugeradgang\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Make-adgang\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Barneadgang\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Omdirigeret fejl to %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"write jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lser makefiler...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lser makefil '%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (ingen standard-endeml)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (sgesti)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (ikke ndvendig)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (ingen ~-udfoldning)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"Ugyldig syntaks i betingelse\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"fremmed 'endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"tomt variabelnavn\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"tomt 'override'-direktiv\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"ugyldigt 'override'-direktiv\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"kommandoer begynder fr det frste ml\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"manglende regel fr kommandoer\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"manglende adskiller%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (mente du TAB i stedet for 8 mellemrum?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"manglende mlmnster\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"flere mlmnstre\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"mlmnster indeholder ingen '%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"manglende 'endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Fremmed tekst efter 'endef'-direktiv\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"manglende 'endef', uafsluttet 'define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Fremmed tekst efter '%s'-direktiv\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"fremmed '%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"kun n 'else' per betingelse\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Misdannet per-ml variabeldefinition\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"blandede implicitte og statiske mnsterregler\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"blandede implicitte og normale regler\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"ml '%s' passer ikke til mlmnstret\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"mlfil '%s' har bde :- og ::-angivelser\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"target '%s' optrder mere end n gang i samme regel.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"advarsel: tilsidestter kommandoer for ml '%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"advarsel: ignorerer gamle kommadoer for ml '%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"advarsel: NUL-tegn set; resten af linjen ignoreres\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Ingenting at gre for '%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"'%s' er tidssvarende.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Beskrer fil '%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sIngen regel til at skabe ml '%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sIngen regel til at skabe ml '%s' som behves af '%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Overvejer mlfil '%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Opdatering af fil '%s' er forgves prvet for nylig.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Fil '%s' er allerede overvejet.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Opdaterer stadig fil '%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Opdatering af fil '%s' afsluttet.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Filen '%s' findes ikke.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Advarsel: .LOW_RESOLUTION_TIME-fil '%s' har et tidsstempel med hj \"\n\"oplsning\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Fandt en implicit regel for '%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Ingen implicit regel for '%s' fundet.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Bruger standardkommandoer for '%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Cirkulr %s <- %s afhngighed opgivet.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Afsluttet forudstningerne for mlfil '%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Forudstningerne for '%s' er ved at blive skabt.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Opgiver mlfil '%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Mlet '%s' ikke genskabt p grund af fejl.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Forudstningen '%s' angiver kun rkkeflgen ift. mlet '%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Forudstningen '%s' for mlet '%s' findes ikke.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Forudstningen '%s' er nyere end mlet '%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Forudstningen '%s' er ldre end mlet '%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Mlet '%s' er med dobbelt-kolon og har ingen forudstninger.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Ingen kommandoer til '%s' og ingen forudstninger er ndrede.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Skaber '%s' pga. \\\"always-make\\\"-flag.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Ingen grund til at genskabe mlet '%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; bruger VPATH-navnet '%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Skal genskabe mlet '%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \" Ignorerer VPATH-navnet '%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Kommandoer til '%s' er ved at blive udfrt.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Genskabelse af mlfil '%s' mislykkedes.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Mlfil '%s' genskabt.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Med -q trnger mlfilen '%s' til at blive genskabt.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Advarsel: ndringstiden for filen '%s' er i fremtiden\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Advarsel: ndringstiden for filen '%s' er %.2g s i fremtiden\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS-element '%s' er ikke et mnster\"\n\n# \"remote job exportation interface to the Customs daemon\": jeg aner ikke\n# hvad der er tale om. I vrigt ser remote-cstms.c forldet/ubrugt ud, og\n# koden er ikke understttet af GNU...\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs kan ikke eksporteres: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Implicitte regler.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ingen implicitte regler.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u implicitte regler, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminale.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"FEJL: num_pattern_rules forkert! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"ukendt signal\"\n\n# De fleste af signalnavnene fra signame.c er kopieret fra libc.da.po,\n# kun ganske enkelte findes ikke der.\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Lg p\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Afbrudt\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Afslut\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Ulovlig instruktion\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Sporings-/stoppunkts-flde\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Afbrudt\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT_flde\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Emulatorflde\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Undtagelsestilflde ved flydendetals-operation\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Drbt\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Busfejl\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Lagersegmentfejl\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Ugyldigt systemkald\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Rret blev brudt\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarmen gik\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Termineret\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Brugerdefineret signal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Brugerdefineret signal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Barnet afsluttet\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Strmmen gik\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Stoppet\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Stoppet (ville lse fra tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Stoppet (ville skrive til tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Stoppet (signal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Begrnsning af CPU-tid overskredet\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Grnse for filstrrelse overskredet\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtuel tidsgrnse overskredet\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profileringstiden udlb\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Vinduet blev ndret\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Fortsttes\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Kritisk I/O-tilstand\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mulig\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Resurse tabt\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Faresignal\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Informationsforesprgsel\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Flydendetalshjlpeprocessor ikke tilgngelig\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"forvalgt\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"milj\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefil\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"milj med -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"kommandolinje\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"'override'-direktiv\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatisk\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (fra '%s', linje %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# Statistik for variabelst-hash-spande:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variabler\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Mnsterspecifikke variabelvrdier\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ingen mnsterspecifikke variabelvrdier.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u mnsterspecifikke variabelvrdier\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"advarsel: udefineret vaiabel '%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search mislykkedes med %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Advarsel: Tom omdirigering\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"intern fejl: '%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-advarsel, CTRL-Y vil efterlade underproces(ser).\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-advarsel, du kan blive ndt til at genetablere CTRL-Y-behandling fra DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Ukendt indbygget kommando '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Fejl, tom kommando\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Omdirigeret inddata from %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Omdirigeret fejl to %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Omdirigeret uddata til %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Udfrer i stedet %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Fejl ved spawn, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH-sgestier\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Ingen 'vpath'-sgestier\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u 'vpath'-sgestier.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ingen generel ('VPATH'-variabel) sgesti.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Generel ('VPATH'-variabel) sgesti:\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Syntaksfejl, stadig inden i '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Fik et SIGCHLD; %u uhstede brn.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Angiv ikke -j eller --jobs hvis sh.exe ikke er tilgngelig.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Stter make tilbage til enkelt job-tilstand.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"intet filnavn for '%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"ml '%s' efterlader forudstningsmnstret tomt\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Ingen filer.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u filer i %u hash-spande .\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# %.3f filer per spand i gennemsnit, maks. %u filer i en spand.\\n\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Stands proces for at tillade et fejlsgningsprogram at hnge sig p\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Ingen variabler.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# %.1f variabler per spand i gennemsnit, maks. %u i en spand.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# %d.%d variabler per spand i gennemsnit, maks. %u i en spand.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/de.po",
    "content": "# German message translation file for GNU make\n# Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc.\n# Karl Eichwalder <ke@suse.de>, 2002, 2005.\n# Alexander Mader  <aumader@gmx.net>, 2000.\n# Alexander Mader  <mader@wias-berlin.de>, 1997.\n# Jochen Hein <jochen.hein@informatik.tu-clausthal.de>, 1996.\n#\n# Vereinheitlichen:\n# =================\n# command(s) -> Befehl(e)?  (nicht: Kommando(s))\n# target(s)  -> Ziel(e)     (nicht: Target(s))\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-10-20 20:55+0200\\n\"\n\"Last-Translator: Karl Eichwalder <ke@suse.de>\\n\"\n\"Language-Team: German <de@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"Versuch, eine nicht untersttzte Funktionalitt zu verwenden: %s\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"\"\n\"VMS stellt nicht die Mglichkeit einer nderung \\n\"\n\"der Zeitmarken von Archiveintrgen zur Verfgung\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Archiv %s existiert nicht\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: %s ist kein gltiges Archiv\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Eintrag %s existiert nicht in %s\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"\"\n\"touch: Ungnstiger Rckgabewert beim Zugriff \\n\"\n\"von ar_member_touch auf %s\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module konnte keine Modulinformation auslesen; Status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control schlug mit Status = %d fehl\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"\"\n\"Konnte die Bibliothek %s auf der Suche \\n\"\n\"nach dem Eintrag %s nicht ffnen\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"\"\n\"Eintrag %s %s: \\n\"\n\"%ld Byte an Position %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (der Name ist mglicherweise gekrzt)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Datum %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  Nutzer-ID = %d, Gruppen-ID = %d, Modus = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Abbruch.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Archiveintrag %s ist wohl falsch; nicht gelscht\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Archiveintrag %s ist wohl falsch; nicht gelscht\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Datei %s wird gelscht\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Datei %s wird gelscht\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  Auszufhrende Kommandos\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (eingebaut):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (aus %s, Zeile %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Verzeichnisse\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: Konnte den Status nicht feststellen.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"\"\n\"# %s ( Schlssel (key) %s,  letzte nderung (mtime) %d): \\n\"\n\"Konnte nicht geffnet werden.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"\"\n\"# %s (Gert %d, I-Knoten (inode) [%d,%d,%d]): \\n\"\n\"Konnte nicht geffnet werden.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"\"\n\"# %s (Gert %ld, I-Knoten (inode) %ld): \\n\"\n\"Konnte nicht geffnet werden.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (Schlssel (key) %s,  letzte nderung (mtime) %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (Gert %d, I-Knoten (inode) [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (Gert %ld, I-Knoten (inode) %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Keine\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" Dateien, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"keine\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" Unmglichkeiten\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" bisher.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" Unmglichkeiten in %lu Verzeichnissen.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Rekursive Variable %s referenziert sich (schlielich) selbst\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"Nicht abgeschlossene Variablenreferenz\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"\"\n\"Die Kommandos wurden fr die Datei %s angegeben \\n\"\n\"an der Stelle %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Die Kommandos fr die Datei %s wurden aufgrund \\n\"\n\"der Suche nach impliziten Regeln gefunden,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"\"\n\"aber %s wird jetzt als dieselbe Datei \\n\"\n\"wie %s betrachtet.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Die Kommandos fr %s werden ignoriert, \\n\"\n\"die fr %s werden bevorzugt.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"%s mit einfachem Doppelpunkt kann nicht in \\n\"\n\"%s mit doppeltem Doppelpunkt gendert werden\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"%s mit doppeltem Doppelpunkt kann nicht in \\n\"\n\"%s mit einfachem Doppelpunkt gendert werden\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Lschen der Zwischendatei %s\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** Lschen der Zwischendatei %s\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Zeitstempel auerhalb der Reihenfolge; %s wird ersetzt\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Aktuelle Zeit\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Dies ist kein Ziel:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Wertvolle Datei (Voraussetzung von .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Vorgetuschtes Ziel (Voraussetzung von .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Kommandozeilen-Ziel (target).\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Ein Standardwert oder MAKEFILES make-Steuerdatei.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Suche nach impliziten Regeln wurde durchgefhrt.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Suche nach impliziten Regeln wurde nicht durchgefhrt.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Ersetzung fr implizites/statisches Muster: %s\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Datei ist ein Zwischenschritt in den Abhngigkeiten.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Erzeugt auerdem:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Zeit der letzten nderung wurde nicht berprft.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Die Datei existiert nicht.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Datei ist sehr alt.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Zuletzt gendert %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Datei wurde aktualisiert.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Datei wurde nicht aktualisiert.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Derzeit laufende Befehle (DAS IST EIN BUG).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Derzeit laufende Befehle fr Abhngigkeiten (DAS IST EIN BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Erfolgreich aktualisiert.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Eine Aktualisierung ist notwendig (-q ist angegeben).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Aktualisierung fehlgeschlagen.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Ungltiger Wert in update_status-Eintrag!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Ungltiger Wert im command_state-Eintrag!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Dateien\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"Nicht-numerisches erstes Argument zur  word-Funktion\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"Erstes Argument zur  word-Funktion muss grer als 0 sein\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"Nicht-numerisches erstes Argument fr die wordlist-Funktion\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"Nicht-numerisches zweites Argument zur wordlist-Funktion\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) schlug fehl (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) schlug fehl (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() schlug fehl (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() schlug fehl\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Lsche temporre Stapelverarbeitungsdatei %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Zuwenig Argumente (%d) fr die Funktion %s\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Auf dieser Rechnerkonfiguration nicht implementiert: Funktion %s\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Nicht beendeter Aufruf der Funktion %s: %c fehlt\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: Option %s ist mehrdeutig\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: Option --%s erlaubt kein Argument\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: Option %c%s erlaubt kein Argument\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: Option %s erfordert ein Argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: unerkannte Option --%s\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: unerkannte Option %c%s\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: unerlaubte Option -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: ungltige Option -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: Option erfordert ein Argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: Option -W %s ist mehrdeutig\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: Option -W %s erlaubt kein Argument\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Suche nach einer impliziten Regel fr %s.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Suche nach einer impliziten Regel fr Archiveintrge fr %s.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Vermeide Rekursion in den impliziten Regeln.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Versuche Muster-Regel mit Ersetzung %.*s.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Unmgliche implizite Voraussetzung %s abgelehnt.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Unmgliche Voraussetzung %s abgelehnt.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Versuche implizite Voraussetzung %s.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Versuche Voraussetzung %s.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Fand die Voraussetzung %s als VPATH %s\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Suche nach einer Regel mit der Zwischendatei %s.\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"temporre Datei kann nicht erzeugt werden\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Fehler 0x%x (ignoriert)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Fehler 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Fehler %d (ignoriert)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Fehler %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (Speicherauszug erstellt)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Warte auf noch nicht beendete Prozesse...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Aktiver Kindprozess 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (entfernt)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Sammle erfolglosen Kindprozess 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Sammle erfolgreichen Kindprozess 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Lsche temporre Stapelverarbeitungsdatei %s\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Entferne Kindprozess 0x%08lx PID %ld %s aus der Kette.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"Schreibe Job-Server\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Marke des Kindprozesses 0x%08lx PID (%s) freigegeben.\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() konnte den Prozess nicht starten (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%d Argumente gehrten zum fehlgeschlagenen Prozessstart\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Nehme Kindprozess 0x%08lx (%s) PID %ld%s in die Kette auf.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Marke fr den Kindprozess 0x%08lx (%s) erhalten.\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"Lese Pipe fr die Jobs\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\"Auf diesem Betriebssystem kann die Einhaltung\\n\"\n\"der Lastbeschrnkung nicht erzwungen werden\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"Lasteinschrnkung kann nicht erzwungen werden: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() konnte den Prozess nicht starten (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\"make registrierte die Beendigung des Kindprozesses mit ID %d,\\n\"\n\"wartet jedoch noch auf den Prozess mit ID %d.\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Kommando nicht gefunden\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Shell-Programm wurde nicht gefunden\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL gewechselt (war %s, ist %s)\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Erstelle temporre Stapelverarbeitungsdatei %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (Zeile %d) Falscher Shell-Kontext (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Optionen:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Aus Kompatibilittsgrnden ignoriert\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Alle Ziele ohne Bedingungen erstellen\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C VERZEICHNIS, --directory=VERZEICHNIS\\n\"\n\"                              In VERZEICHNIS wechseln, bevor etwas getan \"\n\"wird\\n\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"Viele Informationen zur Fehlersuche ausgeben\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"Verschiedene Arten von Debug-Information ausgeben\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Umgebungsvariablen berschreiben make-\"\n\"Steuerdateien\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f DATEI, --file=DATEI, --makefile=DATEI\\n\"\n\"                              DATEI als make-Steuerdatei lesen\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Diese Meldung ausgeben und beenden\\n\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"Fehler in den Befehlen irgnorieren\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I VERZEICHNIS, --include-dir=VERZEICHNIS\\n\"\n\"                              VERZEICHNIS nach inkludierten\\n\"\n\"                              make-Steuerdateien durchsuchen\\n\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"N Jobs gleichzeitig erlauben; unbegrenzte Anzahl \\n\"\n\"von Jobs ohne Argument\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"Weiterlaufen, auch wenn einige Targets nicht erzeugt werden konnten\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"Die interne Datenbank von make ausgeben\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"Keine Befehle ausfhren; der Exit-Status gibt an, ob die Dateien\\n\"\n\"aktuell sind\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"Die eingebauten impliziten Regeln deaktivieren\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"Die eingebauten Variablenbelegungen deaktivieren\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Befehle nicht ausgeben.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              -k abschalten.\\n\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"Die Targets werden nur als aktualisiert markiert,\\n\"\n\"nicht tatschlich erneuert\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"Die Versionsnummer von make ausgeben und beenden\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"Das aktuelle Verzeichnis ausgeben\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"-w abschalten, selbst wenn es implizit eingeschaltet wurde\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"Eine Warnung ausgeben, wenn eine undefinierte Variable referenziert wird\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"Eine leere Zeichenkette ist als Dateiname ungltig\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"Unbekanntes Debug-Level angegeben %s\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\"%s: bekam Unterbrechung/Ausnahme signalisiert (Kode = 0x%x, Adr = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Das Programm %s rief einen Ausnahmefilter auf, \\n\"\n\"der nicht bearbeitet wurde\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Zugriffsverletzung: Schreiboperation an Adresse %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Zugriffsverletzung: Leseoperation an Adresse %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell setzt default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell Suchpfad gesetzt; default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s setzt fr 30 Sekunden aus...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) ist abgeschlossen. Es geht weiter.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Das Makefile wurde zweimal ber die Standardeingabe angegeben.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (temporre Datei)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (temporre Datei)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"\"\n\"Parallele Abarbeitung (-j) \\n\"\n\"wird auf dieser Plattform nicht untersttzt.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Umstellung auf Einzel-Job-Verarbeitung (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"Interner Fehler: mehrfache --jobserver-fds Optionen\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"Interner Fehler: Falsche --jobserver-fds Angabe %s\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"Warnung: -jN in make-Verarbeitungszweig erzwungen: \\n\"\n\"Jobserver-Modus nicht verfgbar.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"Jobserver verdoppelt\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"Warnung: Kein Jobserver verfgbar: -j1 wird gesetzt. + zur Ursprungsregel\\n\"\n\"hinzufgen.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"ffnen der Pipe fr die Jobs\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"Initialisierung der Pipe fr den jobserver\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Symbolische Links sind nicht untersttzt: -L wird abgeschaltet.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Aktualisiere make-Steuerdateien...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"\"\n\"make-Steuerdatei %s knnte eine Schleife enthalten; \\n\"\n\"es wird nicht neu erzeugt.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Konnte die make-Steuerdatei %s nicht neu erstellen.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Die eingebundene make-Steuerdatei %s wurde nicht gefunden.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Die make-Steuerdatei %s wurde nicht gefunden\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Konnte nicht in das ursprngliche Verzeichnis wechseln.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Erneute Ausfhrung:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (temporre Datei): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL beinhaltet mehr als ein Ziel\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Keine Targets angegeben und keine make-Steuerdatei gefunden\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Keine Targets\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Aktualisieren der Ziele...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"Warnung: Mit der Uhr stimmt etwas nicht. \\n\"\n\"Die Bearbeitung knnte unvollstndig sein.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Syntax: %s [Optionen] [Target] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Fehlermeldungen (auf Englisch) an <bug-make@gnu.org> senden.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"Die Option -%c verlangt eine positive ganze Zahl als Argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"Die Option -%c verlangt eine positive ganze Zahl als Argument\"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\", von Richard Stallman und Roland McGrath.\\n\"\n\"%sErstellt fr %s\\n\"\n\"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%sDies ist Freie Software; siehe die Programmquellen fr \"\n\"Vervielfltigungsbedingungen.\\n\"\n\"%sEs gibt KEINE Gewhrleistung; nicht einmal fr VERMARKTUNG oder \"\n\"NUTZBARKEIT FR EINEN\\n\"\n\"%sBESONDEREN ZWECK.\\n\"\n\"\\n\"\n\"%sFehlermeldungen (auf Englisch) an <bug-make@gnu.org>.\\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-Datenbank; erstellt am: %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-Datenbank; beendet am: %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"ein unbekanntes Verzeichnis\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"ein unbekanntes Verzeichnis\"\n\n# !!! Attention: concatenated with the previous messages!!!\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s\\n\"\n\n# !!! Attention: concatenated with the previous messages!!!\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"ein unbekanntes Verzeichnis\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"ein unbekanntes Verzeichnis\"\n\n# !!! Attention: concatenated with the previous messages!!!\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s\\n\"\n\n# !!! Attention: concatenated with the previous messages!!!\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Schluss.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Unbekannter Fehler %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"Der virtuelle Speicher ist verbraucht\"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: Nutzer %lu (tatschlich %lu), Gruppe %lu (tatschlich %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Initialisierter Zugriff\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"Schreibfehler: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"Schreibfehler\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"make-Steuerdateien werden gelesen...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"make-Steuerdatei %s wird gelesen\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (kein Standard-Ziel)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (Suchpfad)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (macht nichts)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (keine ~-Auflsung)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"Ungltige Syntax in der Bedingung\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"berflssiges endef\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"Leerer Variablenname\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"Leere override-Anweisung\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"Ungltige override-Anweisung\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"Befehle beginnen vor dem ersten Ziel\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"Es fehlt eine Regel vor den Befehlen\"\n\n# Untranslatable because of weird %s usage -ke-\n#: read.c:992\n#, fuzzy, c-format\nmsgid \"missing separator%s\"\nmsgstr \"Fehlendes Trennzeichen%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (Meinten Sie TAB anstelle von 8 Leerzeichen?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"Es fehlt ein Target-Muster\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"Mehrfache Target-Muster\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"Target-Muster enthlt kein %%\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"Fehlendes endif\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"berflssiger Text nach einer endef-Anweisung\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"Fehlendes endef, nicht abgeschlossenes define\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"berflssiger Text nach einer %s-Anweisung\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"berflssiges %s\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"Es ist nur ein else je Verzweigung erlaubt\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Falsche Ziel-bezogene Variablendefinition\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"Implizite und statische Muster-Regel vermischt\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"Implizite und normale Regel vermischt\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"Target %s passt nicht zum Target-Muster\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"Das Ziel %s enthlt sowohl :- als auch ::-Eintrge\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"Das Ziel %s steht mehrfach in derselben Regel.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"Warnung: Die Befehle fr das Ziel %s werden berschrieben\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"Warnung: Alte Befehle fr das Ziel %s werden ignoriert\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"Warnung: NUL-Zeichen gelesen; der Rest der Zeile wird ignoriert\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Fr das Ziel %s ist nichts zu tun.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"%s ist bereits aktualisiert.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Die Datei %s wird \\\"gestutzt\\\" (der Abhngigkeitsgraph).\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sKeine Regel, um %s zu erstellen%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sKeine Regel vorhanden, um das Target %s, \\n\"\n\"  bentigt von %s, zu erstellen%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Betrachte Target-Datei %s.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"\"\n\"Versuchte gerade die Datei %s zu aktualisieren, \\n\"\n\"dies schlug aber fehl.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Die Datei %s wurde bereits betrachtet.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Die Datei %s wird immer noch aktualisiert.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Aktualisierung der Datei %s beendet.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Die Datei %s existiert nicht.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Eine implizite Regel fr %s gefunden.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Keine implizite Regel fr %s gefunden.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Verwende die Standard-Kommandos fr %s.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Zirkulre Datei %s <- %s Abhngigkeit wird nicht verwendet.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Fertig mit den Voraussetzungen fr die Ziel-Datei %s.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Die Voraussetzungen von %s werden fertiggestellt.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Die Arbeit an der Target-Datei %s wurde aufgegeben.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Das Target %s wurde wegen Fehlern nicht aktualisiert.\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Die Datei %s ist lter als das davon abhngige Ziel %s.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"\"\n\"Die Datei %s, Voraussetzung fr das Ziel %s, \\n\"\n\"existiert nicht.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Die Datei %s ist jnger als das davon abhngige Ziel %s.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Die Datei %s ist lter als das davon abhngige Ziel %s.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\"Das Ziel %s hat einen doppelten Doppelpunkt \\n\"\n\"und keine Voraussetzungen.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\"Kein Kommando fr %s und keine Voraussetzung \\n\"\n\"wurde tatschlich verndert.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Es ist nicht notwendig, das Target %s neu zu erzeugen\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; benutze VPATH-Name %s\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Das Target %s muss neu erzeugt werden.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ignoriere VPATH-Name %s.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Die Kommandos von %s werden gerade ausgefhrt.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Fehler beim Aktualisieren der Target-Datei %s.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Die Target-Datei %s wurde erfolgreich aktualisiert.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Target %s muss bei -q aktualisiert werden.\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"*** Warnung: Datei %s hat zuknftige nderungszeit (%s > %s)!\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"*** Warnung: Datei %s hat zuknftige nderungszeit (%s > %s)!\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS Element %s ist kein Muster\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs wird nicht exportieren: %s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Keine impliziten Regeln vorhanden.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Keine impliziten Regeln vorhanden.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u implizite Regeln, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" Terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG: num_pattern_rules falsch!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"Unbekanntes Signal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Aufgelegt\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Abgebrochen (Interrupt)\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Quit\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Illegaler Befehl\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Verfolgen/anhalten abfangen (Trace/breakpoint trap)\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Abgebrochen (Aborted)\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT abfangen (IOT trap)\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT abfangen (EMT trap)\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Gleitkommafehler\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Abgebrochen (Killed)\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Bus-Fehler\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Adressierungsdefekt\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Falscher Systemaufruf\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Zerstrte Pipe\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Wecksignal\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Abgebrochen (Terminated)\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Nutzersignal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Nutzersignal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Kindprozess beendet\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Stromausfall\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Angehalten\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Angehalten (tty input)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Angehalten (tty output)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Angehalten (signal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU-Zeitschranke berschritten\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Dateigrenschranke berschritten\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtueller Timer erloschen\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profiling Timer erloschen\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Fenster hat sich verndert\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Fortgesetzt\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Dringende I/O-Bedingung\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mglich\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Ressource verloren gegangen\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Gefahrensignal\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Informationsanforderung\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Es ist kein Koprozessor fr Fliekommaoperationen vorhanden\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"Standard\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"Umgebung\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"Makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"Umgebung per -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"Kommandozeile\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"override-Anweisung\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatisch\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (aus %s, Zeile %lu):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %u Variablen fr %u hash-Werte.\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variablen\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Musterspezifische Variablenwerte\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Keine musterspezifischen Variablenwerte.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u musterspezifische Variablenwerte\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"Warnung: undefinierte Variable %.*s\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search schlug mit %d fehl\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Warnung: Umleitung ins Leere!\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"Interner Fehler: %s command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-Warnung: STRG-Y wird Unterprozesse briglassen!\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-Warnung: Vielleicht mssen Sie STRG-Y aus DCL wieder ermglichen.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Unbekanntes eingebautes Kommando %s\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Fehler: Leere Anweisung\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Datei %s auf Standardeingabe umgeleitet\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Fehlerausgabe nach %s umgeleitet\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Ausgabe nach %s umgeleitet\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"%s wird stattdessen ausgefhrt\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Fehler beim Starten eines Kindprozesses, %d.\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH-Suchpfade\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Keine vpath-Suchpfade.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u vpath-Suchpfade.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Kein allgemeiner Suchpfad (Variable VPATH).\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Allgemeiner Suchpfad (Variable VPATH):\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"\"\n#~ \"Wenn sh.exe nicht vorhanden ist, \\n\"\n#~ \"sollten Sie nicht -j oder --jobs angeben.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"make wird so umgestellt, dass nur ein Job laufen kann.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u Dateien zu %u hash-Werten.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# durchschnittlich %.3f Dateien je hash-Wert,\\n\"\n#~ \"max. %u Dateien zu einem hash-Wert.\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Syntaxfehler, immer noch in '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Erhielt Signal SIGCHLD; %u unbeendete Kindprozesse.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"VERZEICHNIS\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"In das VERZEICHNIS wechseln, bevor etwas anderes ausgefhrt wird\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"FLAGS\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Prozess aussetzeb, um das Einklinken eines Debuggers zu ermglichen\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Umgebungsvariablen berschreiben make-Steuerdateien\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"DATEI\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"DATEI als make-Steuerdatei lesen\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Das VERZEICHNIS nach eingebundenen make-Steuerdateien durchsuchen\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Nur bei Belastung unterhalb N mehrere Prozesse starten\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"Befehle nur anzeigen, nicht ausfhren\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"DATEI als sehr alt betrachten und sie nicht neu erzeugen\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Die Kommandos nicht ausgeben\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"-k abschalten\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Die DATEI stets als neu betrachten\"\n\n# !!! Attention: concatenated with the following messages!!!\n#~ msgid \"Entering\"\n#~ msgstr \"Wechsel in das Verzeichnis\"\n\n# !!! Attention: concatenated with the following messages!!!\n#~ msgid \"Leaving\"\n#~ msgstr \"Verlassen des Verzeichnisses\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"Kein Dateiname fr %sinclude\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"Target %s lsst Voraussetzungs-Muster leer\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Keine Variablen vorhanden.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# Durchschnittlich %.1f Variablen pro Wert, max %u je Wert.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# Durchschnittlich %d.%d Variablen pro Wert, max %u je Wert.\\n\"\n\n#~ msgid \"the `word' function takes a positive index argument\"\n#~ msgstr \"Die word-Funktion erwartet als Argument einen positiven Index\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/en@boldquot.header",
    "content": "# All this catalog \"translates\" are quotation characters.\n# The msgids must be ASCII and therefore cannot contain real quotation\n# characters, only substitutes like grave accent (0x60), apostrophe (0x27)\n# and double quote (0x22). These substitutes look strange; see\n# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html\n#\n# This catalog translates grave accent (0x60) and apostrophe (0x27) to\n# left single quotation mark (U+2018) and right single quotation mark (U+2019).\n# It also translates pairs of apostrophe (0x27) to\n# left single quotation mark (U+2018) and right single quotation mark (U+2019)\n# and pairs of quotation mark (0x22) to\n# left double quotation mark (U+201C) and right double quotation mark (U+201D).\n#\n# When output to an UTF-8 terminal, the quotation characters appear perfectly.\n# When output to an ISO-8859-1 terminal, the single quotation marks are\n# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to\n# grave/acute accent (by libiconv), and the double quotation marks are\n# transliterated to 0x22.\n# When output to an ASCII terminal, the single quotation marks are\n# transliterated to apostrophes, and the double quotation marks are\n# transliterated to 0x22.\n#\n# This catalog furthermore displays the text between the quotation marks in\n# bold face, assuming the VT100/XTerm escape sequences.\n#\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/en@quot.header",
    "content": "# All this catalog \"translates\" are quotation characters.\n# The msgids must be ASCII and therefore cannot contain real quotation\n# characters, only substitutes like grave accent (0x60), apostrophe (0x27)\n# and double quote (0x22). These substitutes look strange; see\n# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html\n#\n# This catalog translates grave accent (0x60) and apostrophe (0x27) to\n# left single quotation mark (U+2018) and right single quotation mark (U+2019).\n# It also translates pairs of apostrophe (0x27) to\n# left single quotation mark (U+2018) and right single quotation mark (U+2019)\n# and pairs of quotation mark (0x22) to\n# left double quotation mark (U+201C) and right double quotation mark (U+201D).\n#\n# When output to an UTF-8 terminal, the quotation characters appear perfectly.\n# When output to an ISO-8859-1 terminal, the single quotation marks are\n# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to\n# grave/acute accent (by libiconv), and the double quotation marks are\n# transliterated to 0x22.\n# When output to an ASCII terminal, the single quotation marks are\n# transliterated to apostrophes, and the double quotation marks are\n# transliterated to 0x22.\n#\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/es.po",
    "content": "# Mensajes en espaol para GNU make.\n# Copyright (C) 1996, 2001 Free Software Foundation, Inc.\n# Max de Mendizbal <max@upn.mx>, 1996, 2001.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: GNU make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-06-28 19:59-0500\\n\"\n\"Last-Translator: Max de Mendizbal <max@upn.mx>\\n\"\n\"Language-Team: Spanish <es@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8-bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"Se intent utilizar una caracterstica no implementada: `%s'\"\n\n# Sugerencia: touch -> `touch'. sv\n# Ok, aceptada. A falta de cursivas... mm\n# No veo porqu no se ha de usar 'tocar' en vez de touch em+\n# El mensaje adems hace referencia a un touch de un objeto dentro\n# de una librera, y de eso no se dice nada en el mensaje. Creo que\n# hay que tener cuidado con estas cosas.\n# El programa para tocar un miembro de un archivo ... , y ahi estamos\n# ya en problemas con el dichoso archivo/fichero.\n# A ver que se os ocurre em+\n# Enrique: touch es un programa del sistema operativo y sirve para\n# cambiar la fecha de un programa o archivo. Es decir lo \"toca\" y\n# modifica sus atributos. Por eso prefer no traducirlo.\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"El programa para hacer un `touch' no est disponible en VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: El archivo `%s' no existe\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' no es un archivo vlido\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: El miembro `%s' no existe en `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Cdigo de retorno errneo de ar_member_touch en `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\"fallo en lbr$set_module para extraer la informacin del mdulo, estado = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"fallo en lbr$ini_control con estado = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"Error al abrir la biblioteca `%s' para buscar al elemento `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Miembro `%s'%s: %ld bytes en %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (el nombre puede estar truncado)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Fecha %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, modo = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Break.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\"*** [%s] Miembro de archivo `%s' podra estar incorrecto; aunque no se \"\n\"elimina\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\"*** Miembro del archivo `%s' podra estar incorrecto; aunque no se elimina\"\n\n# Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv\n# Ok. mm\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Se borra el archivo `%s'\"\n\n# Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv\n# Ok. mm\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Se borra el archivo `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  comandos para ejecutar\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (interconstruido):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (de `%s', linea %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Directorios\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: podra no estar establecido.\\n\"\n\n# No sobrara el \"posiblemente\"?\n# Propongo dejarlo en \" no se pudo abrir \". sv\n# Ok. Es consistente con otras traducciones. mm\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (llave %s, mtime %d): no se pudo abrir.\\n\"\n\n# En el K & R aparece inode traducido como nodo-i. qu te parece? sv\n# Bien. Me gusta con el guioncito. mm\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"\"\n\"# %s (dispositivo %d, nodo-i [%d,%d,%d]): posiblemente no se pueda abrir.\\n\"\n\n# No sobrara el \"posiblemente\"?\n# Propongo dejarlo en \" no se pudo abrir \". sv\n# Ok. Es consistente con otras traducciones. mm\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (dispositivo %ld, nodo-i %ld): no se pudo abrir.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (llave %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (dispositivo %d, nodo-i [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (dispositivo %ld, nodo-i %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"No\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" archivos, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"no\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" imposibilidades\"\n\n# \"So far\" no era \"hasta ahora\"? (no me hagas mucho caso) sv\n# Si tu traduccin es mejor. Aceptada. mm\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" hasta ahora.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" imposibilidades en %lu directorios.\\n\"\n\n# Creo que eventually sera \"finalmente\" o algo as. sv\n# Si, es finalmente no a veces. Ok. mm\n# referencia me parece que no lleva tilde. sv\n# No, no lleva acento. Me emocion con elos. mm\n# Creeis de veras que tiene sentido 'finalmente'em+\n# yo pondra ser termina autoreferenciando, por\n# ejemplo em+\n# Mejor lo eliminamos. Es de alguna forma reiterativo e innecesario.\n# Lo de `al final' puede ser ms confuso. mm\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"La variable recursiva `%s' se auto-referencia\"\n\n# No me gusta nada ( lo siento )\n#  Qu tal : La referencia a una variable est sin terminar em+\n# Creo que tienes razn la voz pasiva es muy desagradable. mm.\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"la referencia a la variable est sin terminar\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Las instrucciones fueron especificadas para el archivo `%s' en %s:%lu,\"\n\n# Buscando en las legras implcitas em+\n# Utilic por bsqueda en para evitar el gerundio. mm\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Las instrucciones para el archivo `%s' se encontraron por bsqueda en reglas \"\n\"implcitas,\"\n\n# \"now\" es \"ahora\". te lo has comido consciente o inconscientemente? sv\n# inconscientemente. mm\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"pero `%s' se considera ahora como el mismo archivo que `%s'.\"\n\n# Lo repetir una y mil veces... :-)\n# \"To ignore\" *no* es ignorar. sv\n# Propongo \"no sern tenidas en cuenta\" a falta de algo mejor.\n# Ok. Mi necedad sobrepasa el milenio. mm\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Las instrucciones para `%s' no sern tenidas en cuenta en favor de las que \"\n\"estn en `%s'.\"\n\n# Me suena que eso de colon es algo as como punto, dos puntos o punto y coma.\n# Podras comprobarlo? sv\n# Es un punto sencillo (.). A ver si te gusta mi propuesta. mm\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"no se puede cambiar un punto (.) `%s' por dos puntos (:) `%s'\"\n\n# Lo mismo. sv\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"no se pueden cambiar dos puntos (:) `%s' por un punto (.) `%s'\"\n\n# Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv\n# Ok. mm\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Se borra el archivo temporal `%s'\"\n\n# Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv\n# Ok. mm\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** Se borran los archivos temporales...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Fecha fuera de intervalo; sustituyndola %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Hora actual\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# No es un objetivo:\"\n\n# Pondra: es una dependencia de em+\n# Si, tienes razn. mm\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Archivo valioso (es una dependencia de .PRECIOUS).\"\n\n# Lo mismo. Y traducir por falso es poco menos que poco exacto.\n# Los phony target de make son aquellos que se ejecutan siempre\n# sin tener en cuenta si existe un archivo con el nombre del objetivo\n# y de si es actual. Propondra incondicional en vez de falso, ya que\n# explica exactamente qu es un phony target em+\n# No. Incondicional no es una traduccin correcta. Que tal si al rato\n# se les ocurre hacer una nueva instruccin .INCONDITIONAL.\n# Si quieres podramos pensar en otra traduccin como seuelo o algo as. mm\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  objetivo falso (dependencia de .PHONY).\"\n\n# FUZZY\n# Pondria lnea de comandos\n# Y creo que no s exactamente a que se refiere, No creo que haya visto\n# este mensaje nunca en make lo marco con FUZZY em+\n# Estn traduciendo commands como comandos? Son ms bien ordenes o\n# instrucciones. Por mi parte no hay problema, incluso me gusta ms\n# comandos, pero es un anglicismo. mm\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Objetivo de lnea de instrucciones.\"\n\n# Habra que entender esto\n# Creo que esto es lo que significa. El fuente no es demasiado claro. mm\n# Se refiere a que el fichero makefile es uno que encuentra por\n# defecto ( en este orden GNUmakefile, Makefile y makefile ) o uno\n# que est definido en la variable de entorno MAKEFILE em+\n# As pues tu traduccin es completamente equivocada, lo siento.\n# Pondra: Fichero por defecto o definido en la variable MAKEFILE em+\n# Cierto, lo has entendido bien. Arreglo acorde. mm\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Por omisin, MAKEFILES, o -include/sinclude makefile.\"\n\n# Propongo efectuada en lugar de terminada. sv\n# Ok. Es ms literal. mm\n# Atencin ! , es la bsqueda 'de'reglas implcitas em+\n# Ok. Ojo, debo pluralizar regla e implcita. Platicarlo con Ulrich. mm\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  La bsqueda de reglas implcitas ha sido efectuada.\"\n\n# Propongo efectuada en lugar de terminada. sv\n# Ok. Es ms literal. mm\n# Atencin ! , es la bsqueda 'de'reglas implcitas em+\n# Ok. Ojo, debo pluralizar regla e implcita. Platicarlo con Ulrich. mm\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  La bsqueda de reglas implcitas ha sido efectuada.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  rama del patrn implcita/esttica: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  El archivo es una dependencia intermedia.\"\n\n# Sugerencia: \"crea\". sv\n# Ok. Aunque, viendolo bien, que tal \"hace\"? mm.\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Tambin hace:\"\n\n# y \"comprob\"? sv\n# Ok. Mejora. mm\n# No pondra nunca, sino simplemente 'no se comprob 'em+\n# Si, es lo mismo pero es ms espaol. mm\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  La fecha de modificacin no se comprob.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  El archivo no existe.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  El archivo es muy viejo.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  ltima modificacin %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  El archivo ha sido actualizado.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  El archivo ha sido actualizado.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Las instrucciones siguen ejecutndose (ESTO ES UN BUG).\"\n\n# No sera ms bien \"las instrucciones de las dependencias\"? sv\n# Si, que babas soy. Ahora corrijo. mm\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\"#  Las instrucciones de las dependencias siguen ejecutndose (ESTO ES UN \"\n\"BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Actualizado con xito.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Necesita ser actualizado (la opcin -q est activa).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Fallo al ser actualizado.\"\n\n# ## Le he aadido un \"\" con tu permiso.\n# Gracias. No lo puse porque no se como poner ese smbolo con el\n# iso-accents-mode y luego se me olvid. Por cierto, como se hace?\n# tambin tengo duda de la interrogacin abierta.\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Valor invlido en el miembro `update_status'!\"\n\n# ## Lo mismo.\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Valor invlido en el miembro `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Archivos\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# estadsticas de la tabla de hash de los archivos:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"el primer argumento de la funcin `word' no es numrico\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"el primer argumento de la funcin `word' debe ser mayor a 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"el primer argumento de la funcin `wordlist' no es numrico\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"el primer argumento de la funcin `wordlist' no es numrico\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: fallo en DuplicateHandle(In), (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: fallo en DuplicateHandle(Err), (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"Fallo en CreatePipe(), (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): fallo en process_init_fd()\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Limpiando el archivo temporal %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Nmero de argumentos (%d) insuficientes para la funcin `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"No implementado en esta plataforma: funcin `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"la llamada a la funcin `%s' no concluy: falta `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: la opcin `%s' es ambigua\\n\"\n\n# No admite ningn argumento. sv\n# Ok. Y vuelve la burra al trigo. mm\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: la opcin `--%s' no admite ningn argumento\\n\"\n\n# Lo mismo. sv\n# Ok. mm\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: la opcin `%c%s' no admite ningn argumento\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: la opcin `%s' requiere un argumento\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: opcin no reconocida `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: opcin no reconocida `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: opcin invlida -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: opcin invlida -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: la opcin requiere un argumento -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: la opcin `-W %s' es ambigua\\n\"\n\n# No admite ningn argumento. sv\n# Ok. Y vuelve la burra al trigo. mm\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: la opcin `-W %s' no admite ningn argumento\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"no se pueden reservar %ld bytes para la tabla de hash: memoria agotada\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Carga=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Colisiones=%ld/%ld=%.0f%%\"\n\n# Y no sera mejor \"Buscando una regla implcita ...\"\n# Ten en cuenta que este mensaje no parece un mensaje de error, sino ms\n# de \"debug\" o de \"verbose\". sv\n# Cierto. mm\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Buscando una regla implcita para `%s'.\\n\"\n\n# Lo mismo.\n# Buscando una regla impltita para el miembro del archivo  `%s' em+\n# Se me resbal. mm\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Buscando una regla implcita para el miembro del archivo `%s'.\\n\"\n\n# Pues si ilegal le suena a crcel a Enrique, \"evade\" me suena a m a\n# escaparse de la crcel... (fuga de alcatraz :-)\n# te voy a dar yo a t fuga ... em+\n# Qu te parecera \"se evita\"? sv\n# Me gusta evade, pero evita es correcto. Acepto tu sugerencia. mm\n# No me gusta se evita, pondra evitando em+\n# Ok. Pero a mi paranoia de evitar gerundios dnde la dejas? mm\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Evitando la recursin en la regla implcita.\\n\"\n\n# FUZZY\n# Esto me suena fatal. Se a que se refiere, porque lo\n# he visto, pero en cristiano no se si podra entenderlo.\n# se refiere a las reglas del tipo % , lo pongo FUZZY , tendr\n# que pensar un poco en ello em+\n# De momento cambio la regla patron por una regla de patron , y\n# pondra a toda costa gerundio ( intentando ) em+\n# Ok con el gerundio. Pero tambin tengo que meditarlo. mm\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Intentando una regla de patrn con la ramificacin `%.*s'.\\n\"\n\n# ## Corrijo la palabra \"dependencia\". sv\n# Cuando aparezca este mensaje tendr poco menos que sentido\n# testimonial. Date cuenta que los argumentos estan cambiados.\n# Pon el orden correcto, siempre ser ms lgico que lo que vaya a\n# aparecer tal y como est ahora (Se rechaza la dependencia imposible\n#  `%s' `%s )'em+\n# Ok. mm\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Se rechaza la dependencia imposible `%s'.\\n\"\n\n# ## Corrijo la palabra \"dependencia\". sv\n# Cuando aparezca este mensaje tendr poco menos que sentido\n# testimonial. Date cuenta que los argumentos estan cambiados.\n# Pon el orden correcto, siempre ser ms lgico que lo que vaya a\n# aparecer tal y como est ahora (Se rechaza la dependencia imposible\n#  `%s' `%s )'em+\n# Ok. mm\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Se rechaza la regla de dependencia imposible `%s'.\\n\"\n\n# Pues si ilegal le suena a crcel a Enrique, \"evade\" me suena a m a\n# escaparse de la crcel... (fuga de alcatraz :-)\n# te voy a dar yo a t fuga ... em+\n# Qu te parecera \"se evita\"? sv\n# Me gusta evade, pero evita es correcto. Acepto tu sugerencia. mm\n# No me gusta se evita, pondra evitando em+\n# Ok. Pero a mi paranoia de evitar gerundios dnde la dejas? mm\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Probando la dependencia implcita `%s'.\\n\"\n\n# FUZZY\n# Esto me suena fatal. Se a que se refiere, porque lo\n# he visto, pero en cristiano no se si podra entenderlo.\n# se refiere a las reglas del tipo % , lo pongo FUZZY , tendr\n# que pensar un poco en ello em+\n# De momento cambio la regla patron por una regla de patron , y\n# pondra a toda costa gerundio ( intentando ) em+\n# Ok con el gerundio. Pero tambin tengo que meditarlo. mm\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Intentando la regla de dependencia `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Se encontr la dependencia `%s' como la VPATH `%s'.\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Se busca una regla con el archivo intermedio `%s'.\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"No se puede crear un archivo temporal\\n\"\n\n# Lo mismo. sv\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Error 0x%x (no tiene efecto)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Error 0x%x\"\n\n# Lo mismo. sv\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Error %d (no tiene efecto)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Error %d\"\n\n# Sugerencia: \" (volcado de `core')\". sv\n# volcado de `core' no significa nada, que te parece si mejor dejamos\n# el core dumped, o bien volcado del ncleo o algo as. Por el momento\n# no cambio nada. mm\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (core dumped) [Ncleo vaciado a un archivo]\"\n\n# Y job -> trabajos? sv\n# Si, pero no hablas de una computadora multi-trabajos sino multi-tareas.\n# Por eso eleg tareas. Lo platicamos con ms calma? mm\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Se espera a que terminen otras tareas....\"\n\n# De verdad se dice \"vivo\"? Si es un proceso, se me ocurre \"activo\". sv\n# Me gusta lo de activo. mm\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Hijo activo 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (remoto)\"\n\n# Lo mismo, pon Proceso hijo, y quita lo que hay\n# entre parntesis em+\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Se pierde al proceso hijo descarriado 0x%08lx PID %ld %s\\n\"\n\n# Lo mismo, pon Proceso hijo, y quita lo que hay\n# entre parntesis em+\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Se gana al proceso hijo descarriado 0x%08lx PID %ld %s\\n\"\n\n# Give up no es enfocar, es abandonar, o desistir em+\n# Si, met la pata. mm\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Se limpia el archivo temporal %s\\n\"\n\n# Proceso hijo em+\n# Ok.\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Se elimina al proceso hijo 0x%08lx PID %ld%s de la cadena.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"escribir en el servidor de tareas\"\n\n# Lo mismo, pon Proceso hijo, y quita lo que hay\n# entre parntesis em+\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Se libera el token para el proceso hijo 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"fallo en process_easy() al lanzar el proceso (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Se contaron %d argumentos en el lanzamiento fallido\\n\"\n\n# Proceso hijo em+\n# Ok.\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Se pone al proceso hijo 0x%08lx (%s) PID %ld%s en la cadena.\\n\"\n\n# Lo mismo, pon Proceso hijo, y quita lo que hay\n# entre parntesis em+\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Se obtiene el token para el proceso hijo 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"tubera de trabajos ledos\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"no se pueden forzar los lmites de carga en este sistema operativo\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"no se puede forzar la carga lmite: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"no hay ms manejadores de archivos: no se puede duplicar stdin\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"no hay ms manejadores de archivos: no se puede duplicar stdout\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"No se puede restaurar stdin\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"No se puede restaurar stdout\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"fallo en process_easy() al lanzar el proceso (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"hacer un hijo descarriado %d, an esperando el pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: No se encontr el programa\"\n\n# Y \"el programa Shell\"? (a secas) sv\n# Si. Suena mucho mejor. mm\n# Suena, pero no es mejor. Tal y como esta escrito, incluso\n# yo pensaria que me falta un programa en mi sistema que se\n# llame shell. No se ha encontrado el 'shell'em+\n# Es bueno contar con una segunda opinin ... mm\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: No se ha encontrado el `shell'\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: el espacio ambiental podra estar agotado\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ha cambiado (era `%s' y ahora es `%s')\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Se crea el archivo temporal %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"%s (linea %d) Contexto de shell errneo (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opciones:\\n\"\n\n# Lo mismo de arriba con \"ignorar\". sv\n# Ok. mm.\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"\"\n\"  -b, -m                      No se tendr en cuenta por compatibilidad.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           Hace incondicionalmente todos los objetivos.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C DIRECTORIO, --directory=DIRECTORIO\\n\"\n\"                              Se cambia al DIRECTORIO antes de hacer nada.\\n\"\n\n# \"depurado\" o \"depuracin\"? sv\n# Puse de depurado para evitar la cacofona informacin depuracin.\n# Sugerencias bienvenidas. mm\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d          Se imprimirn grandes cantidades de informacin de depurado.\\n\"\n\n# \"depurado\" o \"depuracin\"? sv\n# Puse de depurado para evitar la cacofona informacin depuracin.\n# Sugerencias bienvenidas. mm\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=BANDERAS]    Se imprimirn varios tipos de informacin de \"\n\"depurado.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                Las variables ambientales se imponen a las de los \"\n\"makefiles.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f ARCHIVO, --file=ARCHIVO, --makefile=ARCHIVO\\n\"\n\"                                   Lee al ARCHIVO como un makefile.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Muestra este mensaje y finaliza.\\n\"\n\n# Ojo con ignorar. sv\n# Ok. mm\n# Por favor, si has traducido commands como instrucciones , hazlo aqui\n# tambien.\n# No me gusta este mensaje, preferira: Se ignoran los errores obtenidos\n# en la ejecucin de las instrucciones  em+\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\"  -i, --ignore-errors         No se toman en cuenta los errores provenientes \"\n\"de las instrucciones.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I DIRECTORIO, --include-dir=DIRECTORIO\\n\"\n\"                       Busca dentro del DIRECTORIO los makefiles incluidos.\\n\"\n\n# Yo traducira \"infinite\" por \"infinitos\", no por \"una infinidad\", que\n# parece que son muchos menos... sv\n# Ok. mm\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]      Se permiten N trabajos a la vez; si no se \"\n\"especifica un\\n\"\n\"argumento son infinitos.\\n\"\n\n# No entiendo por qu aqu empleas subjuntivo: \"pudieron\". sv\n# Es incorrecto. Es una de las opciones `k' que dice... mm\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Sigue avanzando an cuando no se puedan crear \"\n\"algunos objetivos.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"      No inicia con trabajos mltiples a menos que la carga est por debajo \"\n\"de N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   Utiliza el ltimo mtime entre los enlaces \"\n\"simblicos y los objetivos.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              No ejecuta ninguna instruccin; slo las \"\n\"muestra.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o ARCHIVO, --old-file=ARCHIVO, --assume-old=ARCHIVO\\n\"\n\"                           Supone que ARCHIVO es muy viejo y no lo \"\n\"reconstruye.\\n\"\n\n# de 'make' em+\n# ok. mm\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base       Se imprime la base de datos interna de \"\n\"`make'.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question                     No se ejecutan las instrucciones; el \"\n\"estado de salida\\n\"\n\"indicar si estn actualizados.\\n\"\n\n# desabilitan o deshabilitan? sv\n# Error de dedo. mm\n#  Por favor ! ,  pero qu es eso de interconstruidas ?\n# Pon almacenadas internamente, que es exactamente lo que son :) em+\n# Bueno, bajo protesta. mm\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Se deshabilitan las reglas implcitas \"\n\"almacenadas internamente.\\n\"\n\n# desabilitan o deshabilitan? sv\n# Error de dedo. mm\n#  Por favor ! ,  pero qu es eso de interconstruidas ?\n# Pon almacenadas internamente, que es exactamente lo que son :) em+\n# Bueno, bajo protesta. mm\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Se deshabilitan los ajustes a las variables \"\n\"almacenadas internamente.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       No muestra las intrucciones.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                    Desactiva la opcin -k.\\n\"\n\n# Se *tocan*, no? sv\n# Si. mm\n#\n# Pues entonces cmbialo arriba tambien em+\n# En donde? mm\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Se tocan los objetivos en vez de \"\n\"reconstruirlos.\\n\"\n\n# Me comera el \"Se\" inicial. \"Muestra la versin...\" sv\n# Ok. mm\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               Muestra la versin del make y finaliza.\\n\"\n\n# Lo mismo. sv\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Muestra el directorio actual.\\n\"\n\n# Lo mismo. sv\n# Turn off , desactiva o deshabilita , pero no apaga em+\n# apaga luz Mari Luz apaga luz ,que yo no puedo vivir con\n# tanta luz ... ( cancin tradicional ) ( no lo pude evitar ) em+\n# Juar, Juar, Juar. Coincido, pero el sentido es el mismo. mm\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Desactiva -w, an cuando haya sido activado \"\n\"implcitamente.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W ARCHIVO, --what-if=ARCHIVO, --new-file=ARCHIVO, --assume-new=ARCHIVO\\n\"\n\"                               Supone que ARCHIVO es infinitamente \"\n\"reciente.\\n\"\n\n# Lo mismo. sv\n# Todas estas parecen descripciones de opciones.\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Advierte cuando se hace una referencia a una \"\n\"variable no definida.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"no se permite que una cadena vaca sea el nombre de un archivo\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"se especific un nivel de depuracin desconocido `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\"%s: Se atrap una interrupcin/excepcin (cdigo = 0x%x, direccin = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Se ha llamado un filtro de excepcin no manejado desde el programa %s\\n\"\n\"Cdigo de excepcin %x\\n\"\n\"Banderas de excepcin %x\\n\"\n\"Direccin de la excepcin %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Violacin de acceso: operacin de escritura en la direccin %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Violacin de acceso: operacin de lectura en la direccin %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"la variable find_and_set_shell puesta como default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\"la ruta de bsqueda find_and_set_shell est puesta como default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s est suspendida por 30 segundos...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"se hizo un sleep(30). Continuando.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"\"\n\"El archivo Makefile ha sido especificado dos veces desde la entrada estndard\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (archivo temporal)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (archivo temporal)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"\"\n\"Los trabajos en paralelo (-j) no estn implementados en esta plataforma.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Reajustando al modo monotarea (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"error interno: hay varias opciones --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"error interno: cadena --jobserver-fds invlida `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"atencin: se fuerza a -jN en el submake: se deshabilita el modo de servidor \"\n\"de tareas.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"servidor de tareas duplicado\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"atencin: el servidor de tareas no est disponible: se utilizar -j1. Aada `\"\n\"+' a la regla padre del make.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"creando una tubera de trabajos\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"se inicializa la tubera al servidor de tareas\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Los enlaces simblicos no estn implementados: se deshabilitan con -L.\"\n\n# Antes pusiste \"makefiles\". Coherencia. sv\n# Cierto. mm\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Actualizando archivos makefiles....\\n\"\n\n# Me comera el \"archivo\" inicial.\n# Ok. mm\n# \"El Makefile `%s' ...\" sv\n# Pondra ( como en un mensaje anterior ) se autoreferencia ... em+\n# He puesto makefile con minsculas , par ser coherentes em+\n# Ok. Es ms breve. mm.\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"El makefile `%s' se autoreferencia; por lo cual no se reconstruye.\\n\"\n\n# Lo mismo. sv\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Fallo al reconstruir el makefile `%s'.\"\n\n# Lo mismo. sv\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"No se encontr el makefile includo `%s'.\"\n\n# Lo mismo. sv\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"No se encontr el Makefile `%s'\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"No se pudo regresar al directorio original.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Re-ejecutando[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (archivo temporal)\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL contien ms de un objetivo\"\n\n# Sugerencia: \"No se especific ningn objetivo ... \" sv\n# Ok. Me gusta. mm\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"No se especific ningn objetivo y no se encontr ningn makefile\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"No hay objetivos\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Actualizando los objetivos finales....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"atencin: Se ha detectado una desviacin en el reloj. La construccin podra \"\n\"estar incompleta.\"\n\n# Y Modo de empleo? sv\n# Soy medio bestia. Debera hacerlo automtico. mm\n# \"target\" es \"objetivo\", no \"objetivos\". Fjate que lleva puntos\n# suspensivos, permitiendo as varios objetivos. sv\n# Ok. mm\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Modo de empleo: %s [opciones] [objetivo] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa fue construido para %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa construido para %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Informe sobre los errores a <bug-make@gnu.org>\\n\"\n\n# Me comera el \"de\" de \"requiere de\" sv\n# Ok. mm\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"la opcin `-%c' requiere un argumento no-vaco de tipo cadena\"\n\n# Me comera el \"de\" de \"requiere de\" sv\n# Ok. mm\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"la opcin `-%c' requiere un argumento positivo y entero\"\n\n# De esto hablaremos otro da. sv\n# Si. Es bastante complicado. mm\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sEste es software libre; consulte en el cdigo fuente las condiciones de \"\n\"copia.\\n\"\n\"%sNO hay garanta; ni siquiera para MERCANTIBILIDAD o EL CUMPLIMIENTO DE\\n\"\n\"%sALGN PROPSITO PARTICULAR.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\" %sEste programa fue construido para %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sEste programa fue construido para %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Base de datos del Make, mostrada en %s\"\n\n# make -> Make. sv\n# Ok. mm\n# Porqu 'del', o pones 'del programa' Make o pones\n# 'de Make' em+\n# Ok. mm\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Se termina la base de datos de Make en %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: se ingresa a un directorio desconocido\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: se sale del directorio desconocido\\n\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: se ingresa al directorio `%s'\\n\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: se sale del directorio `%s'\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: se ingresa a un directorio desconocido\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: se sale del directorio desconocido\\n\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: se ingresa al directorio `%s'\\n\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: se sale del directorio `%s'\\n\"\n\n# Interrumpido (?). sv\n# Mmgmh... El mensaje indica que hubo algn error muy grave y que por\n# eso se detiene el make. Probablemente sea mejor dejarlo as. mm\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Alto.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Error desconocido %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n# Propongo eliminar la palabra virtual. sv\n# Pero si es muy bonita. :) Bueno. Como ya platicamos puede que sea\n# una buena idea pero, por ahora la dejara. mm\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"memoria virtual agotada\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: usuario %lu (real %lu), grupo %lu (real %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Acceso inicializado\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Acceso del usuario\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Acceso del Make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Acceso del hijo\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"error al escribir: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"error al escribir\"\n\n# Sugerencia: eliminar la palabra \"archivo\". sv\n# Ok. Mejora. mm\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Leyendo makefiles...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Leyendo makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (no hay objetivo por defecto)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (ruta de bsqueda)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (no importa)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (no hay expansin del ~)\"\n\n# ## Sintaxis no llevaba tilde.\n# Ok. mm\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"sintaxis no vlida en condicional\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"el `endef' es irrelevante o est mal colocado\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"nombre de variable vaco\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"instruccin `override' vaca\"\n\n# Creo que tendremos un problema con instruccin, comando\n# , programa y directiva . Est claro que aqu es directiva em+\n# Ok, pero no deja de sonar a RoboCop. A ver que te parece como qued. mm\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"directiva de sobreposicin `override' invlida\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"las instrucciones comenzaron antes del primer objetivo\"\n\n# \"falta una regla\". sv\n# (es que extraviada me suena muy raro).\n# Cierto pareciera que se perdi dentro de algn circuito. mm\n# Falta 'la' regla em+\n# No no es la regla sino una regla pues puede ser cualquiera de ellas. mm\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"falta una regla antes de las instrucciones\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"falta un separador%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (Quiere decir TAB en vez de 8 espacios?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"falta un patrn de objetivos\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"hay varios patrones de objetivos\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"el patrn de objetivo no contiene `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"falta un `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"\"\n\"Hay un texto irrelevante o mal colocado despus de la instruccin `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"falta un `endef', no se termin un `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Texto irrelevante o mal colocado despus de la instruccin `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"irrelevante o mal colocado `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"slo se admite un `else' por condicional\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"\"\n\"La definicin de las variables especficas al blanco est mal construida\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"los prerequisitos no pueden ser definidos por guiones de instrucciones\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"las reglas implcitas y las de patrn esttico estn mezcladas\"\n\n# Y 'las' normales  em+\n# Ok. mm\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"las reglas implcitas y las normales estn mezcladas\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"el archivo de objetivos `%s' no coincide con el patrn de objetivos\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"el archivo de objetivos `%s' tiene lneas con : y ::\"\n\n# Cambiara given por 'proporcion' o 'indic' em+\n# Ok. mm\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"el objetivo `%s' se proporcion ms de una vez en la misma regla.\"\n\n# No me gusta esta traduccin de override. Mira a ver\n# si encaja mejor alguna de las dos que se proponen arriba\n# em+\n# Aunque no me acaba de convencer, que te parece sto? mm\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"atencin: se imponen comandos para el objetivo `%s'\"\n\n# Ojo con ignora. sv\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"atencin: se ignoran las instrucciones viejas para el objetivo `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"atencin: hay un carcter NUL; se ignora el resto de la lnea\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"No se hace nada para `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' est actualizado.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Se contina actualizando el archivo `%s'.\\n\"\n\n# Sugerencia: No hay ninguna regla... sv\n# Como una no hay ninguna. mm\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sNo hay ninguna regla para construir el objetivo `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sNo hay ninguna regla para construir el objetivo `%s', necesario para `%s'%s\"\n\n# target file no sera \"archivo objetivo\"? sv\n# Literalmente si pero un archivo make puede tener varios objetivos. mm\n# Max , pero no existe un archivo de objetivos. Esta lnea, que es\n# de las que aparecen al hacer un make con la opcin -d ( debug )\n# se refiere a lo que dice Santiago, es decir, 'archivo objetivo'  em+\n# Ok creo que tienen razn. mm\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Se considera el archivo objetivo `%s'.\\n\"\n\n# Un compaero mo dice que una buena regla es poner siempre que se pueda\n# un nmero par de comas.\n# Es decir: \"Se intent, sin xito, actualizar ...\"\n# o bien \"Se intent sin xito actualizar ...\"\n# Qu te parece? sv\n# Bien y tiene razn. mm\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Se intent, sin xito, actualizar el archivo `%s'.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"El archivo `%s' ya fue considerado.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Se contina actualizando el archivo `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Se termin de actualizar el archivo `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"El archivo `%s' no existe.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Atencin: el archivo .LOW_RESOLUTION_TIME `%s' tiene una resolucin \"\n\"demasiado alta\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Se encontr una regla implcita para `%s'.\\n\"\n\n# Se ha encontrado em+\n# Ok, pero procuro evitar como a la muerte los gerundios. mm\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"No se ha encontrado una regla implcita para `%s'.\\n\"\n\n# Por defecto, como haces arriba em+\n# en efecto, mm\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Se utilizan las instrucciones por defecto para `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Se elimina la dependencia circular %s <- %s.\"\n\n# Lo mismo de antes con \"target file\". sv\n# Estoy de acuerdo con l ( por una vez ;) ) em+\n# Ok. mm\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Se terminaron las dependencias del archivo objetivo `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Se estn construyendo las dependencias de `%s'.\\n\"\n\n# Give up no es enfocar, es abandonar, o desistir em+\n# Si, met la pata. mm\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Se abandona el archivo objetivo `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Debido a los errores, el objetivo `%s' no se reconstruy.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"El prerequisito `%s' es posterior al objetivo `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"La dependencia `%s' del blanco `%s' no existe.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"La dependencia `%s' es ms reciente que el objetivo `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"La dependencia `%s' es posterior al objetivo `%s'.\\n\"\n\n# Ahorra espacio, y pon '::'  en vez de eso :) em+\n# Bueno, no es mala idea. A ver si te gusta lo que puse. mm\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\"El objetivo `%s' es de tipo dos puntos dos veces (::)\\n\"\n\"y no tiene dependencias.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"No hay instrucciones para `%s' y ninguna dependencia cambi.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Haciendo `%s' debido a la bandera always-make.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"No es necesario reconstruir el objetivo `%s'.\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; se usa el nombre del VPATH `%s'\"\n\n# Revisa todo el po con un search, y mira a ver si decides usar\n# regenerar o reconstruir ( prefiero lo ltimo 10000 veces ) em+\n# Ok, buena propuesta. mm\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Se debe reconstruir el objetivo `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Se ignora el nombre del VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Las instrucciones de `%s' se estn ejecutando.\\n\"\n\n# Target file no es archivo de objetivos, sino el archivo objetivo\n# make no tiene ningn archivo de objetivos em+\n# Ok. mm\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Fallo al reconstruir el archivo objetivo `%s'.\\n\"\n\n# Lo mismo em+\n# Ok. mm\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Se reconstruy con xito el archivo objetivo `%s'.\\n\"\n\n# Otra vez em+\n# Ok, no te puedes quejar de falta de consistencia en este caso! mm\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Se necesita reconstruir el archivo objetivo `%s' con la opcin -q.\\n\"\n\n# Ubicada :)) , que tal futura, a secas ? em+\n# Bueno, sonaba como StarTrek, muy chido, pero acepto tu sugerencia. mm\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Atencin: El archivo `%s' tiene una hora de modificacin en el futuro\"\n\n# Ubicada :)) , que tal futura, a secas ? em+\n# Bueno, sonaba como StarTrek, muy chido, pero acepto tu sugerencia. mm\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\"Atencin: El archivo `%s' tiene una hora de modificacin %.2g en el futuro\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"El elemento .LIBPATTERNS `%s' no es un patrn\"\n\n# Las aduanas? sv\n# Si, las aduanas de exportacin de procesos. Suena rarsimo pero\n# revis el cdigo y todo parece apuntar a que as son las cosas.\n# Creo que esto es otra cosa. Custom se refiere a los valores dados\n# por el usuario ( customizables ) , y que no se exportarn se refiere\n# a que al llamar a otros makefiles, no sern pasados como valores\n# que se antepongan ( otro trmino para override ) a los que make\n# tiene por defecto .\n# La traduccin exacta por tanto es, los valores definidos por el usuario\n# no se exportarn em+\n# Muchsimo ms claro (es ms me gusta ms en espaol que en ingls con tu\n# arreglo) mm\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Los valores definidos por el usuario no se exportarn: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Reglas implcitas.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# No hay reglas implcitas.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u reglas implcitas, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n# ## Aado  con tu permiso. sv\n# Gracias. mm\n#  qu tal errneo ? em+\n# Si, suena mejor. mm\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG: num_pattern_rules errneo!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"seal desconocida\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Colgado\"\n\n#  Y por qu no Interrupcin ? em+\n# Porque es una accin. De hecho es un mensaje que se enva a travs\n# del sistema en este caso le enviaras un kill -INT num_proceso para\n# interrumpir al programa. Lo revis contra el fuente. mm\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interrumpir\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Finalizar\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Instruccin no vlida\"\n\n# Los trap los hemos dejado como traps, simplemente. em+\n# Ok. mm\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Trace/breakpoint trap\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Abortado\"\n\n# Ponte de acuerdo con Enrique en cmo se traduce esto.\n# Enrique tiene esta misma frase en glibc. sv\n# Eso es :) IOT trap em+\n# Ok. mm\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT trap\"\n\n# Otra em+\n# Ok. mm\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT trap\"\n\n# Coma flotante, por favor. sv\n# Creeme que aqu lo de coma flotante no vale. Somos pro-yanquis y\n# por eso usamos el punto flotante. Debemos llegar a un acuerdo.\n# Por ahora pongo coma flotante para facilitar las cosas, pero bajo\n# protesta ;-) mm\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Excepcin de coma flotante\"\n\n# \"Terminado por la seal kill\" quedara un poco ms suave ... sv\n# Enrique tiene en glibc \"Terminado (killed)\". sv\n# Bueno, creo que mi traduccin es ms exacta, concisa y clara\n# pero si insisten... Adems recuerda en que estoy en un pas\n# en donde asesinado es palabra de todos los das. mm\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Terminado (killed)\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Error en el bus\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Fallo de segmentacin\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Llamada al sistema errnea\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Tubera rota\"\n\n# Temporizador? (as lo tradujo Enrique en glibc). sv\n# Suena como StarTrek. Mejor lo platico con l. A lo mejor\n# hasta lo convenzo. mm\n# Pues tendrs que darme razones em+\n# Bueno, un alarm clock es una alarma del reloj. No tiene pierde.\n# Temporizador es una bonita palabra pero en donde dice que va a\n# sonar una campana para despertarte? mm\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarma del reloj\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Finalizado\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Seal 1 definida por el usuario\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Seal 2 definida por el usuario\"\n\n# Proceso hijo terminado em+\n# Ok. mm\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Proceso hijo terminado\"\n\n# Fallo. sv\n# Alimentacin elctrico em+\n# Ok. mm\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Falla de alimentacin elctrica\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Detenido\"\n\n# Enrique hizo una preciosa traduccin de este mensaje que, segn l,\n# mejora el original. Era algo as como:\n# \"Detenido (requiere entrada de terminal)\". sv\n# Tiene razn se ve bien. mm\n# Requiere 'de';) , como te vea Santiago que le metes\n# otro 'de' otra vez ... em+\n# Ok. mm\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Detenido (se requiere entrada de terminal)\"\n\n# lo mismo, se requiere entrada de terminal ,  em+\n# Ok. mm\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Detenido (se requiere salida de terminal)\"\n\n# idem em+\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Detenido (se requiere una seal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Se agot el tiempo de CPU permitido\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Se excedi el tamao mximo de archivo permitido\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"El contador de tiempo virtual ha expirado\"\n\n# Nunca me enter de cmo se traduca profile, pero perfil me suena raro.\n# De dnde lo has sacado? sv\n# Es lo que quiere decir, ni modo. Perfil de un avin es plane profile.\n# Por cierto, lo ms probable es que esta \"traduccin\" haya que\n# modificarla para que sea entendible. mm\n# Esto lo tengo en glibc, lo mirare otro da. Estos mensajes no son\n# importantes em+\n# Agregu unas palabras en aras de claridad (espero) mm\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"El contador de tiempo para la generacin del perfil ha expirado\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"La ventana ha cambiado\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Continuado\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Condicin urgente de I/O\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"Posible I/O\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Recurso perdido\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Seal de peligro\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Peticin de informacin\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Coprocesador de punto flotante no disponible\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"por defecto\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"entorno\"\n\n# Sugerencia: No poner archivo. sv\n# Ok. mm\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n# 'bajo -e' = 'con -e activo' em+\n# Ok. Esta inversin en los idiomas sajones se pega. mm\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"con -e activo\"\n\n# Lnea de comandos me parece correcto em+\n# Ver arriba. Estoy de acuerdo si as han traducido en otros lados. mm\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"lnea de instrucciones\"\n\n# Creo que tendremos un problema con instruccin, comando\n# , programa y directiva . Est claro que aqu es directiva em+\n# Ok, pero no deja de sonar a RoboCop. A ver que te parece como qued. mm\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"directiva de sobreposicin `override'\"\n\n# Lo he cmabiado em+\n# Ok. Deberamos platicarlo con Ulrich. mm\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automtica/o\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (de `%s', lnea %lu):\"\n\n# Bueno. Aqu un punto de discusin. Traduzco buckets por cubetas o\n# mejor las dejo tal cual? Opiniones bienvenidas. mm\n# Estos mensajes son para debug, no creo que haga falta usar cubetas ;) em+\n# Tienes razn, si el debugueador no lo entiende pues, ... que se\n# dedique a otra cosa. mm\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# estadsticas del conjunto de variables de la tabla de hash:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variables\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Valores de variables especficas al patrn\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# No hay valores de variables especficas al patrn.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u valores de variables especficas al patrn\"\n\n# Qu te parece \"atencin\"? Lo hemos usado mucho en otros programas. sv\n# Pero que bestia soy. Perdn por el desbarre. mm\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"atencin: la variable `%.*s' no ha sido definida\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"fallo en sys$search con %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Atencin: redireccin vaca\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"error interno: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-atencin, CTRL-Y dejar vivos a los subprocesos.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-atencin, debers rehabilitar el manejo del CTRL-Y desde el DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"INTERCONSTRUIDO [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"CD INTERCONSTRUIDO %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"RM INTERCONSTRUIDO %s\\n\"\n\n# Por defecto, como haces arriba em+\n# en efecto, mm\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Instruccin interconstruida desconocida `%s'.\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Error, comando vaco\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Entrada redirigida desde %s\\n\"\n\n# Probablemente sea aqu donde haya que ponerle el \"el\" para que \"Entering\"\n# concuerde bien con esta frase y con la anterior simultneamente. sv\n# No. Ya revis el fuente y transcribo el trozo pertinente:\n#  char *message = entering ? \"Entering\" : \"Leaving\";\n#  if (makelevel == 0)\n#    printf (\"%s: %s \", program, message);\n#  else\n#    printf (\"%s[%u]: %s \", program, makelevel, message);\n# Como notars lo del directorio va en otro lado.\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Se redirecciona el error a %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Salida redirigida a %s\\n\"\n\n# \"en sustituto\" me suena muy raro. Propongo: \"en su lugar\" en su lugar :-) sv\n# Ok. mm\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"En su lugar, se ejecuta %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Error al lanzar el proceso %d\\n\"\n\n# Y al revs?: Rutas de bsqueda VPATH. sv\n# Mejora\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Rutas de bsqueda VPATH\\n\"\n\n# Rutas creo que queda mejor. sv\n# Ok. Es ms comn. mm\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# No hay rutas de bsqueda `vpath'.\"\n\n# Ah! Aqu si que pones el vpath al final, eh? :-) sv\n# You really got me! mm\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u rutas de bsqueda `vpath'.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# No hay ruta de bsqueda general (variable `VPATH').\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Ruta de bsqueda general (variable `VPATH'):\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"No especifique -j o --jobs si sh.exe no est disponible.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Reajustando a make para el modo monotarea.\"\n\n# Esto habra que revisarlo. sv\n# En efecto, haba que revisarlo, no es nmero de archivos\n# sino que no hay archivos. mm\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# No hay archivos.\"\n\n# Sugerencia: hash buckets -> `hash buckets'\n# (al menos hasta que sepamos lo que es, creo que me sali algo parecido\n# en recode). sv\n# Literalmente un hash bucket es un tonel de trozos. En un proceso de\n# particin por picadillo (hash) se deben definir \"toneles\" o \"cubetas\"\n# para guardar all la informacin \"hasheada\". En otras palabras es el\n# tamao de las entradas de ndice hash. Claro como el lodo?\n# Finalmente, ok. Por ahora no traducimos hasta ponernos de acuerdo.\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u archivos en %u `hash buckets'.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# promedio de %.3f archivos por `bucket', max %u archivos en un \"\n#~ \"`bucket'.\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Error de sintxis, an se est dentro de '\\\"'\\n\"\n\n# Recibida o capturada, pero por Dios , no pongas\n# 'se tiene' . En vez de hijo pon proceso hijo , y quita lo\n# que tienes entre parntesis em+\n# Lo del parntesis era para escoger. mm\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Recib una seal SIGCHLD; %u proceso hijo descarriado.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIRECTORIO\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"\"\n#~ \"Debe desplazarse al directorio DIRECTORY antes de hacer cualquier cosa\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"BANDERAS\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Suspender el proceso para permitir que un depurador se utilice\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Las variables de entorno tienen prioridad sobre los makefiles\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"ARCHIVO\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Se ley el ARCHIVO como makefile\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Se buscan en DIRECTORIO los archivos makefile includos\"\n\n# Esto me suena a descripcin de una opcin, ms que a un mensaje de error.\n# Sugerencia por lo tanto: \"No se lanzan ...\" sv\n# Ests en lo correcto. mm\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"\"\n#~ \"No se lanzan varios trabajos a menos que la carga\\n\"\n#~ \"sea inferior a N\"\n\n# Lo mismo de antes. sv\n# Ok. mm\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"No se ejecutan las instrucciones; slamente se muestran\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Se considera el ARCHIVO demasiado viejo y no se reconstruye\"\n\n#  qu te parece ...\n# No se hace echo de las instrucciones em+\n# No me gusta. Que te parece lo que puse ahora? mm\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Los comandos no se muestran con eco\"\n\n# Corregido error de tecleos ;) em+\n# Ok.\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Se deshabilita -k\"\n\n# Lo mismo. sv\n# Se considera siempre como nuevo em+\n# Ok. Elimino el 'se' porque est describiendo a una opcin. mm\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Considera al ARCHIVO siempre como nuevo\"\n\n# \"Entrando en el\" (fjate que esto lo dice cuando entra en un directorio).\n# Habra que ver cmo queda. sv\n# Ver nota ms adelante. mm\n# Cambiando a , me pareceria mucho mejor em+\n# En efecto. mm\n#~ msgid \"Entering\"\n#~ msgstr \"Cambiando a\"\n\n# \"Dejando el\", \"Abandonando el\". sv\n# Que tal \"saliendo\"? mm\n# Prefiero 'abandonando' , o 'saliendo de' em+\n# Que tal saliendo? mm\n#~ msgid \"Leaving\"\n#~ msgstr \"Saliendo\"\n\n# corregido el efecto indio , aado un 'un'em+\n# Ok. mm\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"no hay un nombre de archivo para `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"El objetivo `%s' deja a los patrones de dependencias vacos\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# No hay variables.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# promedio de %.1f variables por `bucket', mx %u en un `bucket'.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# promedio de %d.%d variables por `bucket', mx %u en un `bucket'.\\n\"\n\n#~ msgid \"Error in lbr$ini_control, %d\\n\"\n#~ msgstr \"Error en lbr$ini_control, %d\\n\"\n\n#~ msgid \"Error looking up module %s in library %s, %d\\n\"\n#~ msgstr \"Error al buscar el mdulo %s en la biblioteca %s, %d\\n\"\n\n#~ msgid \"Error getting module info, %d\\n\"\n#~ msgstr \"Error al intentar obtener la informacin del mdulo, %d\\n\"\n\n#~ msgid \"touch: \"\n#~ msgstr \"touch: \"\n\n#~ msgid \" not\"\n#~ msgstr \" no\"\n\n#~ msgid \"#  Last modified %.24s (%0lx)\\n\"\n#~ msgstr \"#  ltima modificacin %.24s (%0lx)\\n\"\n\n#~ msgid \"undefined\"\n#~ msgstr \"indefinido\"\n\n#~ msgid \"file\"\n#~ msgstr \"archivo\"\n\n#  crees sinceramente que esto lo puede entender alguien ? em+\n#  qu tal ? con preferencia sobre el entorno em+\n# No, est en AIX, ahora lo arreglo. mm\n#~ msgid \"environment override\"\n#~ msgstr \"con preferencia sobre el entorno\"\n\n# Habra que compilar esto inmediatamente e instalar\n# el .po a ver que es esto em+\n# No se puede por ahora pues make no ha sido internacionalizado an.\n# Ser una de las primeras cosas que haga en cuanto se pueda. mm\n#~ msgid \"override\"\n#~ msgstr \"sobreposicin\"\n\n# Sugerencia: Borrar el \"de\" en \"requiere de ...\" sv\n# Perdn, siempre se me v a pesar de haberlo discutido un buen rato. mm\n#~ msgid \"the `word' function takes a one-origin index argument\"\n#~ msgstr \"la funcin `word' requiere un argumento indexado de tipo origen-uno\"\n\n#~ msgid \"implicit\"\n#~ msgstr \"implcita\"\n\n#~ msgid \"rule\"\n#~ msgstr \"regla\"\n\n#~ msgid \"Trying %s dependency `%s'.\\n\"\n#~ msgstr \"Se intenta la dependencia %s `%s'.\\n\"\n\n#~ msgid \"Found dependency as `%s'.%s\\n\"\n#~ msgstr \"Se encuentra la dependencia como `%s'.%s\\n\"\n\n#~ msgid \"intermediate\"\n#~ msgstr \"intermedia\"\n\n# Preferira mil veces \"sin efecto\" o algo parecido. sv\n# Ok. Habamos quedado en `no tiene efecto'. mm\n#~ msgid \" (ignored)\"\n#~ msgstr \" (no tiene efecto)\"\n\n# Protestar al autor. No hay forma de poner trabajo(s) desconocido(s)\n# con coherencia. sv\n# Si, si no tienen identificado a su padre. Ni modo. mm\n# Pongo /s em+\n# Ok. mm\n#~ msgid \"Unknown%s job %d\"\n#~ msgstr \"Trabajo%s desconocido/s %d\"\n\n#~ msgid \" remote\"\n#~ msgstr \" remoto\"\n\n#~ msgid \"%s finished.\"\n#~ msgstr \"%s terminado.\"\n\n#~ msgid \"losing\"\n#~ msgstr \"se pierde\"\n\n#~ msgid \"winning\"\n#~ msgstr \"se gana\"\n\n# No me gusta como queda as.\n# Sugerencia: \"%sGNU Make versin %s\" sv\n# Aceptada. mm\n#~ msgid \"%sGNU Make version %s\"\n#~ msgstr \"%sGNU Make versin %s\"\n\n#~ msgid \"Unknown error 12345678901234567890\"\n#~ msgstr \"Error desconocido 12345678901234567890\"\n\n#~ msgid \"User\"\n#~ msgstr \"Usuario\"\n\n#~ msgid \"Make\"\n#~ msgstr \"Make\"\n\n#~ msgid \"Child\"\n#~ msgstr \"Hijo\"\n\n#~ msgid \"Dependency `%s' does not exist.\\n\"\n#~ msgstr \"La dependencia `%s' no existe.\\n\"\n\n#~ msgid \"newer\"\n#~ msgstr \"ms reciente\"\n\n#~ msgid \"older\"\n#~ msgstr \"ms antigua\"\n\n# Sugerencia: `socket' sv\n# Ok. mm\n#~ msgid \"exporting: Couldn't create return socket.\"\n#~ msgstr \"exportando: No se puede crear el `socket' de regreso.\"\n\n#~ msgid \"exporting: \"\n#~ msgstr \"exportando: \"\n\n#~ msgid \"exporting: %s\"\n#~ msgstr \"exportando: %s\"\n\n#~ msgid \"Job exported to %s ID %u\\n\"\n#~ msgstr \"El trabajo ha sido exportado a %s ID %u\\n\"\n\n#~ msgid \"Error getting load average\"\n#~ msgstr \"Error al obtener la carga promedio\"\n\n#~ msgid \"1-minute: %f  \"\n#~ msgstr \"1-minuto: %f  \"\n\n#~ msgid \"5-minute: %f  \"\n#~ msgstr \"5-minutos: %f  \"\n\n#~ msgid \"15-minute: %f  \"\n#~ msgstr \"15-minutos: %f  \"\n\n# argv-elements -> elementos argv. sv\n# (A poco C que sepas, sabrs lo que es).\n# Algunos si, algunos no. Pero tienes razn. mm\n#~ msgid \"digits occur in two different argv-elements.\\n\"\n#~ msgstr \"los dgitos estn en dos elementos argv distintos.\\n\"\n\n#~ msgid \"option %c\\n\"\n#~ msgstr \"opcin %c\\n\"\n\n#~ msgid \"option a\\n\"\n#~ msgstr \"opcin a\\n\"\n\n#~ msgid \"option b\\n\"\n#~ msgstr \"opcin b\\n\"\n\n# Sugerencia: La opcin c tiene el valor `%s'\n# Hay un mensaje idntico en hello. sv\n# Me gusta mucho. mm\n#~ msgid \"option c with value `%s'\\n\"\n#~ msgstr \"La opcin c tiene el valor `%s'\\n\"\n\n#~ msgid \"?? getopt returned character code 0%o ??\\n\"\n#~ msgstr \"?? getopt() regres un cracter con cdigo 0%o ??\\n\"\n\n# Elementos ARGV que no son opciones: sv\n# Ok. mm.\n# Esto es:\n# Elementos de ARGV 'que' no son opciones:\n# pero tambien es un mensaje de debug del propio make, asi\n# que no me preocupa ( no aparecer a usuarios normales de make ) em+\n# Bueno, pero de todas formas se corrige. mm\n#~ msgid \"non-option ARGV-elements: \"\n#~ msgstr \"los elementos ARGV que no son opciones: \"\n\n#~ msgid \"option d with value `%s'\\n\"\n#~ msgstr \"opcin d con valor `%s'\\n\"\n\n#~ msgid \"%s: unknown signal\"\n#~ msgstr \"%s: seal desconocida\"\n\n#~ msgid \"Signal 12345678901234567890\"\n#~ msgstr \"Seal 12345678901234567890\"\n\n#~ msgid \"Signal %d\"\n#~ msgstr \"Seal %d\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/fi.po",
    "content": "# Finnish messages for make.\n# Copyright (C) 2005 Free Software Foundation, Inc.\n# This file is distributed under the same license as the make package.\n# Lauri Nurmi <lanurmi@iki.fi>, 2005.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-07-06 21:36+0300\\n\"\n\"Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\\n\"\n\"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"yritettiin käyttää ominaisuutta, jolle ei ole tukea: \\\"%s\\\"\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"arkistojäsenten kosketus ei ole mahdollista VMS:ssä\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Arkistoa \\\"%s\\\" ei ole olemassa\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: \\\"%s\\\" ei ole kelvollinen arkisto\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Arkistossa \\\"%1$s\\\" ei ole jäsentä \\\"%2$s\\\"\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: ar_member_touch antoi virheellisen paluuarvon kohteesta \\\"%s\\\"\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module epäonnistui moduulitietojen noutamisessa, tila = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control epäonnistui, tila = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"kirjastoa \\\"%s\\\" ei voi avata jäsenen \\\"%s\\\" etsimiseksi\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Jäsen \\\"%s\\\"%s: %ld tavua kohdassa %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (nimi voi olla typistynyt)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Päiväys %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, oikeudet = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Katkaisu.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Arkistojäsen \\\"%s\\\" voi olla viallinen - ei poisteta\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Arkistojäsen \\\"%s\\\" voi olla viallinen - ei poisteta\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Poistetaan tiedosto \\\"%s\\\"\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Poistetaan tiedosto \\\"%s\\\"\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  käynnisetttävät komennot\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (sisäänrakennettu):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (tiedostosta \\\"%s\\\", rivi %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Hakemistot\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: tilaa ei voitu lukea.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (avain %s, maika %d): ei voitu avata.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (laite %d, i-solmu [%d,%d,%d]): ei voitu avata.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (laite %ld, i-solmu %ld): ei voitu avata.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (avain %s, maika %d: \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (laite %d, i-solmu [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (laite %ld, i-solmu %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Ei\"\n\n# Juuri näin, muodostetaan käännöslause yksittäisistä sanoista...\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" tiedostoa, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"ei\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" mahdottomuutta\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" tähän mennessä.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" mahdottomuutta %lu hakemistossa.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Rekursiivinen muuttuja \\\"%s\\\" viittaa (lopulta) itseensä\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"päättämätön muuttujaviittaus\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Tiedostolle \\\"%s\\\" määriteltiin komentoja paikassa %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Tiedostolle \\\"%s\\\" löytyi komentoja oletussääntöhaussa,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"mutta \\\"%s\\\":n katsotaan nyt olevan sama tiedosto kuin \\\"%s\\\".\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Tiedoston \\\"%s\\\" komentoja ei huomioida, vaan käytetään komentoja \"\n\"tiedostosta \\\"%s\\\".\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Poistetaan aputiedosto \\\"%s\\\"\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Poistetaan aputiedostot...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Aikaleima ei ole sallitulla välillä, korvataan %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Tämänhetkinen aika\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Ei kohde:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Arvokas tiedosto (ennakkoehto .PRECIOUS:ille).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Valekohde (ennakkoehto .PHONY:lle).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Komentorivikohde.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Oletus-, MAKEFILES- tai -include/sinclude -makefile-tiedosto.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Oletussääntöhaku on suoritettu.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Oletussääntöhakua ei ole suoritettu.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Tiedosto on välitason ennakkoehto.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Tuotetaan myös:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Muutosaikaa ei koskaan tarkastettu.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Tiedosto ei ole olemassa.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Tiedosto on hyvin vanha.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Viimeksi muutettu %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Tiedosto on päivitetty.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Tiedostoa ei ole päivitetty.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Ajossa olevat komennot (TÄMÄ ON OHJELMISTOVIKA).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Ajossa olevat riippuvuuskomennot (TÄMÄ ON OHJELMISTOVIKA).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Päivitetty onnistuneesti.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Vaatii päivitystä (-q on asetettu).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Päivitys epäonnistui.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Virheellinen arvo \\\"update_status\\\"-jäsenessä!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Virheellinen arvo \\\"command_state\\\"-jäsenessä!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Tiedostot\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# tilasto tiedostojen hajautustaulusta:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"ei-numeerinen ensimmäinen argumentti \\\"word\\\"-funktiolle\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"\\\"word\\\"-funktion ensimmäisen argumentin on oltava suurempi kuin 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"ei-numeerinen ensimmäinen argumentti \\\"wordlist\\\"-funktiolle\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"ei-numeerinen toinen argumentti \\\"wordlist\\\"-funktiolle\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) epäonnistui (v=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) epäonnistui (v=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() epäonnistui (v=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() epäonnistui\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Siivotaan väliaikainen komentotiedosto %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Liian vähän (%d) argumenttejeja funktiolle \\\"%s\\\"\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Ei toteutettu tällä alustalla: funktio \\\"%s\\\"\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"päättämätön kutsu funktioon \\\"%s\\\": puuttuva \\\"%c\\\"\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: valitsin \\\"%s\\\" on moniselitteinen\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: valitsin \\\"--%s\\\" ei salli argumenttia\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: valitsin \\\"%c%s\\\" ei salli argumenttia\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: valitsin \\\"%s\\\" vaatii argumentin\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: tunnistamaton valitsin \\\"--%s\\\"\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: tunnistamaton valitsin \\\"%c%s\\\"\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: virheellinen valitsin -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: virheellinen valitsin -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: valitsin vaatii argumentin -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: valitsin \\\"-W %s\\\" on moniselitteinen\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: valitsin \\\"-W %s\\\" ei salli argumenttia\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"ei voida varata %ld tavua hajautustaululle: muisti lopussa\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Kuormitus=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Uudelleenhajautus=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Törmäykset=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Etsitään oletussääntöä kohteelle \\\"%s\\\".\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Etsitään arkistojäsenen oletussääntöä kohteelle \\\"%s\\\".\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Vältetään oletussääntörekursio.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Kokeillaan hahmosääntöä rungolla \\\"%.*s\\\".\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Hylätään mahdoton oletusennakkoehto \\\"%s\\\".\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Hylätään mahdoton säännön ennakkoehto \\\"%s\\\".\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Yritetään käyttää oletusennakkoehtoa \\\"%s\\\".\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Yritetään käyttää säännön ennakkoehtoa \\\"%s\\\".\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Löydettiin ennakkoehto \\\"%s\\\", joka on VPATH \\\"%s\\\"\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Etsitään sääntöä aputiedostolla \\\"%s\\\".\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"Väliaikaistiedoston luominen ei onnistu\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Virhe 0x%x (ei huomioida)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Virhe 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Virhe %d (ei huomioida)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Virhe %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (muisti vedostettu)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Odotetaan keskeneräisiä töitä....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (etä)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Siivotaan väliaikainen komentotiedosto %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Poistetaan ketjusta lapsiprosessi 0x%08lx PID %ld%s.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"työpalvelimen kirjoitus\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() epäonnistui prosessin käynnistämisessä (v=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Laskettiin %d argumenttia epäonnistuneessa käynnistyksessä\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Lisätään ketjuun lapsiprosessi 0x%08lx (%s) PID %ld%s.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"työputken luku\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"kuormarajoja ei voi ottaa käyttöön tässä käyttöjärjestelmässä\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"kuormarajaa ei voi ottaa käyttöön: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\"tiedostokahvoja ei ole enempää: vakiosyötteen kahdentaminen ei onnistunut\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\"tiedostokahvoja ei ole enempää: vakiotulosteen kahdentaminen epäonnistui\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Vakiosyötettä ei voitu palauttaa\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Vakiotulostetta ei voitu palauttaa\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() epäonnistui prosessin käynnistämisessä (v=%d)\\n\"\n\n#: job.c:2046\n#, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Komentoa ei löytynyt\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Kuoriohjelmaa ei löytynyt\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: ympäristötila saattaa olla lopussa\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL muuttunut (oli \\\"%s\\\", nyt \\\"%s\\\")\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Luodaan väliaikainen komentotiedosto %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (rivi %d) Väärä kuoriympäristö (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Valitsimet:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"\"\n\"  -b, -m                      Yhteensopivuuden vuoksi jätetään huomiotta.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Tuota kaikki kohteet ehdoitta.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C HAKEMISTO, --directory=HAKEMISTO\\n\"\n\"                              Siirry HAKEMISTOon ennen jatkamista.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -d                          Näytä runsaasti vianetsintätietoja.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"  --debug[=LIPUT]             Näytä monenlaisia vianetsintätietoja.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Ympäristömuuttujat kumoavat makefile-\"\n\"tiedostot.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f TIEDOSTO, --file=TIEDOSTO, --makefile=TIEDOSTO\\n\"\n\"                              Käytä TIEDOSTOa makefile-tiedostona.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Näytä tämä viesti ja poistu.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\"  -i, --ignore-errors         Älä huomioi suoritettujen komentojen \"\n\"virheitä.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I HAKEMISTO, --include-dir=HAKEMISTO\\n\"\n\"                              Etsi sisällytettäviä makefile:ja \"\n\"HAKEMISTOsta.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Salli N yhtäaikaista työtä; ilman N:ää \"\n\"ääretön.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Jatka vaikka joidenkin kohteiden tuottaminen\\n\"\n\"                                epäonnistuisi.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Älä aloita useita töitä ellei kuormitus alle \"\n\"N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   Käytä uusinta mtime-aikaa symlinkkien ja\\n\"\n\"                                kohteen välillä.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Näytä ajettavat komennot, älä käynnistä \"\n\"niitä.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o TIEDOSTO, --old-file=TIEDOSTO, --assume-old=TIEDOSTO\\n\"\n\"                              Käsittele TIEDOSTO vanhana, älä tuota sitä.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       Näytä make:in sisäinen tietokanta.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Älä aja komentoja; paluuarvo kertoo ajan-\\n\"\n\"                                tasaisuuden.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Poista käytöstä sisäiset oletussäännöt.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Poista käytöstä sisäiset muuttuja-asetukset.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Älä kaiuta komentoja.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Kumoaa valitsimen -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"  -t, --touch                 Kosketa kohteita tuottamisen sijaan.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"  -v, --version               Näytä make:in versionumero ja poistu.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Näytä nykyinen hakemisto.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Kumoa -w, vaikka se olisi käytössä \"\n\"oletuksena.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W TIEDOSTO, --what-if=TIEDOSTO, --new-file=TIEDOSTO, --assume-\"\n\"new=TIEDOSTO\\n\"\n\"                              Käsittele TIEDOSTO aina uutena.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Varoita viittauksista määrittelemättömiin\\n\"\n\"                                muuttujiin.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"tyhjä merkkijono ei kelpaa tiedostonimeksi\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"tuntematon vianetsintätason määritys \\\"%s\\\"\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Keskeytys/poikkeus siepattu (koodi = 0x%x, osoite = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ohjelmasta %s kutsuttiin käsittelemätöntä poikkeussuodinta\\n\"\n\"Poikkeuskoodi = %x\\n\"\n\"Poikkeusliput = %x\\n\"\n\"Poikkeusosoite = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Suojausvirhe: kirjoitusoperaatio osoitteeseen %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Suojausvirhe: lukuoperaatio osoitteeseen %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell asettaa default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell: polkuhaku asetti default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s keskeytyy 30 sekunniksi...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) valmis. Jatketaan.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile-tiedosto vakiosyötteestä määritelty kahdesti.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (väliaikaistiedosto)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (väliaikaistiedosto)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Palataan yhden työn (-j1) tilaan.\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"sisäinen virhe: useitan --jobserver-fds -valitsimia\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"sisäinen virhe: virheellinen --jobserver-fds -merkkijono \\\"%s\\\"\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"varoitus: -jN pakotettu ali-make:ssa: poistetaan työpalvelin käytöstä.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"kaksinkertainen työpalvelin\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"varoitus: työpalvelin ei käytettävissä: käytetään -j1. Lisää \\\"+\\\" ylemmän \"\n\"tason make-sääntöön.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"luodaan työputki\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"alustetaan työpalvelimen putki\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Ei tukea symbolisille linkeille: poistetaan -L käytöstä.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Päivitetään makefile-tiedostoja....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"\"\n\"Ei uudelleentuoteta makefile-tiedostoa \\\"%s\\\" - vältetään mahdollinen \"\n\"ikuinen silmukka.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Makefile-tiedoston \\\"%s\\\" uudelleentuottaminen epäonnistui.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Sisällytettyä makefile-tiedostoa \\\"%s\\\" ei löytynyt.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefile-tiedostoa \\\"%s\\\" ei löytynyt\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Ei voitu siirtyä takaisin alkuperäiseen hakemistoon.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Uudelleenkäynnistetään[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (väliaikaistiedosto): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL sisältää yli yhden kohteen\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Kohteita ei ole annettu, eikä makefileä löytynyt\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Ei kohteita\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"varoitus: Havaittu väärä kellonaika. Käännösversio saattaa olla \"\n\"epätäydellinen.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Käyttö: %s [valitsimet] [kohde] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Tämä ohjelma on käännetty järjestelmälle %s.\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Tämä ohjelma on käännetty järjestelmälle %s (%s).\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"Ilmoita ohjelmistovioista (englanniksi) osoitteeseen <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"valitsin \\\"-%c\\\" vaatii ei-tyhjän merkkijonoargumentin\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"valitsin \\\"-%c\\\" vaatii positiivisen kokonaislukuargumentin\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sTämä on vapaa ohjelmisto; katso kopiointiehdot lähdekoodista.\\n\"\n\"%sTakuuta EI ole, ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai\\n\"\n\"%sSOPIVUUDESTA TIETTYYN TARKOITUKSEEN.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTämä ohjelma on käännetty järjestelmälle %s.\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTämä ohjelma on käännetty järjestelmälle %s (%s).\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-tietokanta, tulostettu %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-tietokanta saatu valmiiksi %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Siirrytään tuntemattomaan hakemistoon\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Poistutaan tuntemattomasta hakemistosta\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Siirrytään hakemistoon \\\"%s\\\"\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Poistutaan hakemistosta \\\"%s\\\"\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Siirrytään tuntemattomaan hakemistoon\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Poistutaan tuntemattomasta hakemistosta\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Siirrytään hakemistoon \\\"%s\\\"\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Poistutaan hakemistosta \\\"%s\\\"\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Seis.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Tuntematon virhe %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"virtuaalimuisti lopussa\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: käyttäjä %lu (todellinen %lu), ryhmä %lu (todellinen %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Alkuperäiset käyttöoikeudet\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Käyttäjän käyttöoikeudet\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Make-prosessin käyttöoikeudet\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Lapsiprosessin käyttöoikeudet\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"kirjoitusvirhe: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"kirjoitusvirhe\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Luetaan makefile-tiedostoja...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Luetaan makefile-tiedosto \\\"%s\\\"\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \"\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (hakupolku)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (ei välitetä)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (ei ~-laajennusta)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"virheellinen syntaksi ehtolauseessa\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"ylimääräinen \\\"endef\\\"\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"tyhjä muuttujan nimi\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"tyhjä \\\"override\\\"-toimintaohje\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"virheellinen \\\"override\\\"-toimintaohje\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"komennot alkavat ennen ensimmäistä kohdetta\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"puuttuva sääntö ennen komentoja\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"puuttuva erotin%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (ehkä tarkoitit sarkainta eikä kahdeksaa välilyöntiä?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"puuttuva kohdehahmo\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"useita kohdehahmoja\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"kohdehahmo ei sisällä %%-merkkiä\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"puuttuva \\\"endif\\\"\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Ylimääräistä tekstiä \\\"endef\\\"-toimintaohjeen jälkeen\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"puuttuva \\\"endef\\\", päättämätön \\\"define\\\"\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Ylimääräistä tekstiä \\\"%s\\\"-toimintaohjeen jälkeen\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"ylimääräinen \\\"%s\\\"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"vain yksi \\\"else\\\" ehtolausetta kohden\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Väärin muotoiltu kohdekohtainen muuttujamäärittely\"\n\n# skripti?\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"ennakkoehtoja ei voi määritellä komentoskripteissä\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"kohde \\\"%s\\\" ei täsmää kohdehahmon kanssa\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"kohdetiedostolla \\\"%s\\\" on sekä :- että ::-merkinnät\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"kohde \\\"%s\\\" annettu yli yhden kerran samassa säännössä.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"varoitus: syrjäytetään kohteen \\\"%s\\\" komennot\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"varoitus: ei huomioida vanhoja komentoja kohteelle \\\"%s\\\"\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"varoitus: havaittu NUL-merkki, rivin loppuosaa ei huomioida\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Kohteelle \\\"%s\\\" ei tarvitse tehdä mitään.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"\\\"%s\\\" on ajan tasalla.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Karsitaan tiedosto \\\"%s\\\".\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sKohteen \\\"%s\\\" tuottamiseen ei ole sääntöä%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%1$s\\\"%3$s\\\"-kohteen tarvitseman kohteen \\\"%2$s\\\" tuottamiseen ei ole sääntöä\"\n\"%4$s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Tarkastellaan tiedostoa \\\"%s\\\".\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Tiedoston \\\"%s\\\" päivitysyritys epäonnistui äskettäin.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Tiedostoa \\\"%s\\\" on jo tarkasteltu.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Päivitetään edelleen tiedostoa \\\"%s\\\".\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Tiedosto \\\"%s\\\" päivitetty.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Tiedosto \\\"%s\\\" ei ole olemassa.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Varoitus: .LOW_RESOLUTION_TIME-tiedostolla \\\"%s\\\" on \"\n\"korkearesoluutioinen aikaleima\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Kohteelle \\\"%s\\\" löytyi oletussääntö.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Kohteelle \\\"%s\\\" ei löytynyt oletussääntöä.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Käytetään oletuskomentoja kohteelle \\\"%s\\\".\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Kehäriippuvuus %s <- %s hylätty.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Kohdetiedoston \\\"%s\\\" ennakkoehdot täytetty.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Kohteen \\\"%s\\\" ennakkoehtoja täytetään.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Luovutaan kohdetiedostosta \\\"%s\\\".\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Kohdetta \\\"%s\\\" ei tuotettu uudelleen virheiden vuoksi.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Kohteen \\\"%2$s\\\" ennakkoehto \\\"%1$s\\\" ei ole olemassa.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Ennakkoehto \\\"%s\\\" on uudempi kuin kohde \\\"%s\\\".\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Ennakkoehto \\\"%s\\\" on vanhempi kuin kohde \\\"%s\\\".\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Tuotetaan \\\"%s\\\", koska --always-make -valitsin on käytössä.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Ei tarvetta uudelleentuottaa kohdetta \\\"%s\\\"\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; käytetään VPATH-nimeä \\\"%s\\\"\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Kohde \\\"%s\\\" on tuotettava uudelleen.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ei huomioida VPATH-nimeä \\\"%s\\\".\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Kohdetiedoston \\\"%s\\\" uudelleentuottaminen epäonnistui.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Kohdetiedosto \\\"%s\\\" uudelleentuotettiin onnistuneesti.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Varoitus: Tiedoston \\\"%s\\\" muutosaika on tulevaisuudessa\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Varoitus: Tiedoston \\\"%s\\\" muutosaika on %.2g sekuntia tulevaisuudessa\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS-elementti \\\"%s\\\" ei ole hahmo\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Oletussäännöt\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ei oletussääntöjä.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u oletussääntöä, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \"\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"VIKA: num_pattern_rules väärä! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"tuntematon signaali\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Linjankatkaisu\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Keskeytys\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Lopetettu\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Virheellinen käsky\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Jäljitys/katkaisupisteansa\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Keskeytetty\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT-ansa\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT-ansa\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Liukulukupoikkeus\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Tapettu\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Väylävirhe\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Muistialueen ylitys\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Virheellinen järjestelmäkutsu\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Katkennut putki\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Herätyskello\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Päätetty\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Käyttäjän määrittelemä signaali 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Käyttäjän määrittelemä signaali 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Lapsi lopetti\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Sähkökatko\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Pysäytetty\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Pysäytetty (päätteen syöte)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Pysäytetty (päätteen tuloste)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Pysäytetty (signaali)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Suoritinaikaraja ylittynyt\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Tiedoston kokoraja ylitetty\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtuaaliajastin vanhentunut\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profilointiajastin vanhentunut\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Ikkuna vaihtunut\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Jatkettu\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Kiireellinen I/O-tilanne\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mahdollista\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Resurssi menetetty\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Vaarasignaali\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Tietopyyntö\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Käytettävissä ei ole liukulukusuoritinta\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"oletus\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"ympäristö\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"-e:n alainen ympäristö\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"komentorivi\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"\\\"override\\\"-toimintaohje\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automaattinen\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (tiedostosta \\\"%s\\\", rivi %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# muuttujajoukon hajautustaulutilastot:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Muuttujat\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Hahmokohtaisia muuttujien arvoja\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ei hahmokohtaisia muuttuja-arvoja.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u hahmokohtaista muuttuja-arvoa\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"varoitus: määrittelemätön muuttuja \\\"%.*s\\\"\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search epäonnistui, arvo %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Varoitus: Tyhjä uudelleenohjaus\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"sisäinen virhe: \\\"%s\\\" command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-varoitus, Ctrl-Y jättää aliprosessi(n/t) käyntiin.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-varoitus, Ctrl-Y-käsittely on ehkä otettava uudelleen käyttöön DCL:stä.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"SISÄÄNRAKENNETTU [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"SISÄÄNRAKENNETTU CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"SISÄÄNRAKENNETTU RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Tuntematon sisäänrakennettu komento \\\"%s\\\"\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Virhe, tyhjä komento\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Syöte uudelleenohjattu kohteesta %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Virhetuloste uudelleenohjattu kohteeseen %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Tuloste uudelleenohjattu kohteeseen %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Käynnistetään sen sijaan %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Virhe käynnistyksessä, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH-hakupolut\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Ei \\\"vpath\\\"-hakupolkuja.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u \\\"vpath\\\"-hakupolkua.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ei yleistä (\\\"VPATH\\\"-muuttuja) hakupolkua.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Yleinen (\\\"VPATH\\\"-muuttuja) hakupolku:\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Älä anna -j tai --jobs -valitsinta jos sh.exe ei ole käytettävissä.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Palautetaan make yhden työn tilaan.\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Syntaksivirhe, edelleen \\\":n sisällä\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/fr.po",
    "content": "# Messages franais pour make.\n# Copyright  2004 Free Software Foundation, Inc.\n# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.\n#\n# 30-juillet-2001, n'avons plus de nouvelle de Marc depuis 5 janvier 1997\n# Marc Baudoin <babafou@ensta.fr>, Frdric Lin <line@MicroNet.fr>, 1996.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: GNU make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-06-29 08:00-0500\\n\"\n\"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\\n\"\n\"Language-Team: French <traduc@traduc.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"tentative d'utiliser une caractristique non supporte :  %s \"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"impossible de modifier la date d'un membre d'une archive sur VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: L'archive  %s  n'existe pas\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch:  %s  n'est pas une archive valide\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Le membre  %s  n'existe pas dans  %s \"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Mauvais code de retour de ar_member_touch pour  %s \"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module en chec lors de l'extraction du module info, tat = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control en chec avec l'tat = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"ne peut ouvrir la librairie %s pour y reprer le membre  %s \"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Membre  %s %s: %ld octets a %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (le nom peut tre tronqu)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Date %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Break.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\"*** [%s] membre d'archive  %s  peut tre corrompu; n'a pas t dtruit\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** membre d'archive  %s  peut tre corrompu; n'a pas t dtruit\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Destruction du fichier  %s \"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Destruction du fichier  %s \"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  commandes  excuter\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (commande interne):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (de  %s , ligne %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Rpertoires\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s : statut indisponible.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (cl %s, mtime %d): n'a pu tre ouvert.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (priphrique %d, inode [%d,%d,%d]) : n'a pas pu tre ouvert.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (priphrique %ld, inode %ld) : n'a pas pu tre ouvert.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (priphrique %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (priphrique %d, inode [%d,%d,%d]) : \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (priphrique %ld, inode %ld) : \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Pas de\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" fichiers, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"non\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" impossibilits\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" jusqu'ici.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" impossibilits dans %lu rpertoires.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"La variable rcursive  %s  se rfrence elle-mme (finalement)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"rfrence incomplte  une variable\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Les commandes pour le fichier  %s  ont t spcifies  %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Les commandes pour le fichier  %s  ont t trouves par une recherche de \"\n\"rgle implicite,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"\"\n\"mais  %s  est maintenant considr comme tant le mme fichier que  %s .\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Les commandes pour  %s  seront ignores en faveur de celles pour  %s .\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"impossible de renommer le simple deux-points  %s  en double deux-points  %\"\n\"s \"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"impossible de renommer le double deux-points  %s  en simple deux-points  %\"\n\"s \"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Suppression du fichier intermdiaire  %s \"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Suppression des fichiers intermdiaires...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: tampon date-heure hors limite; substitution par %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Heure courante\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Pas une cible :\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Fichier prcieux (dpendance de .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Cible factice (dpendance de .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Cible provenant de la ligne de commande.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Une valeur par dfaut MAKEFILES ou -include/sinclude makefile.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Recherche de rgle implicite effectue.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Recherche de rgle implicite n'a pas t effectue.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Prfixe de schma implicite/statique :  %s \\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Ce fichier est une dpendance intermdiaire.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Fabrique galement :\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Heure de modification jamais vrifie.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"# Fichier inexistant.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Fichier trs g.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Dernire modification %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Fichier a t mis  jour.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Fichier n'a pas t mis  jour.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Commandes en cours d'excution (CECI EST UN BUG).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Commandes de dpendances en cours d'excution (CECI EST UN BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Mise  jour russie\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  A besoin d'tre mis  jour (l'option -q est active).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  N'a pas pu tre mis  jour.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Valeur non valable dans le membre  update_status  !\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Valeur non valable dans le membre  command_state  !\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Fichiers\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# statistiques des fichiers de la table de hachage:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"premier argument de la fonction  word  non numrique\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"premier argument de la fonction  word  dot tre plus grand que 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"premier argument de la fonction  wordlist  n'est pas numrique\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"premier argument de la fonction  wordlist  n'est pas numrique\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process(): DuplicateHandle(In) en chec (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process(): DuplicateHandle(Err) en chec (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() en chec (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe(): process_init_fd() en chec\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Nettoyage du fichier temporaire %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"nombre insuffisant d'argument (%d) de la fonction  %s \"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Non implant sur cette plate-forme: fonction  %s \"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"appel  la fonction  %s  non termin :  %c  manquant\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s : l'option  %s  est ambigu\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s : l'option  --%s  ne prend pas d'argument\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s : l'option  %c%s  ne prend pas d'argument\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s : l'option  %s  ncessite un argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s : option non reconnue  --%s \\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s : option non reconnue  %c%s \\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s : option illgale -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s : option invalide -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s : l'option ncessite un argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s : l'option  -W %s  est ambigu\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s : l'option  -W %s  ne prend pas d'argument\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"ne peut allouer %ld octets pour la table de hachage: mmoire puise\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Charge=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Refait le hachage=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Collisions=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Recherche d'une rgle implicite pour  %s .\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Recherche d'une rgle implicite de membre d'archive pour  %s .\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"vitement de rcursion dans une rgle implicite.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Essai du schma avec  %.*s  comme prfixe.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Rejet impossible d'une dpendance implicite  %s .\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Rejet impossible d'une dpendance de rgle  %s .\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Essaie de la dpendance implicite  %s .\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Essai de la rgle de dpendance  %s .\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Dpendance trouve  %s  comme VPATH  %s \\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Recherche d'une rgle contenant le fichier intermdaire  %s .\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"Ne peut crer un fichier temporaire\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Erreur 0x%x (ignore)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Erreur 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Erreur %d (ignore)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Erreur %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (vidange mmoire)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Attente des tches non termines....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Processus fils actif 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (distant)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\"Rcupration du statut de sortie du processus fils 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\"Rcupration du statut de sortie du processus fils 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Nettoyage du fichier temporaire %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Suppression du processus fils 0x%08lx PID %ld%s de la chane.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"criture vers le serveur de tches\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Relche du jeton du processus fils 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() en chec du lancement du processus (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dnombr %d arguments lors du lancement en chec\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Ajout du processus fils 0x%08lx (%s) PID %ld%s  la chane.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Obtention d'un jeton pour le processus fils 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"lecture des pipes des processus\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\"impossible d'imposer des limites de charge sur ce systme d'exploitation\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"impossible d'imposer des limites de charge : \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"plus de pointeurs de fichiers: ne peut duplicater stdin\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"plus de pointeurs de fichiers: ne peut duplicater stdout\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Ne peut restaurer stdin\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Ne peut restaurer stdout\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() en chec du lancement du processus (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make a rcupr le processus fils pid %d, en attente du pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s : commande introuvable\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s : interprteur de commandes introuvable\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: l'espace de l'environment peut tre puis\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL a t modifi (tait  %s  et  maintenant est  %s )\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Cration d'un fichier temporaire %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"%s (ligne %d) contexte erron d'interprteur (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Options:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      ignor pour compatibilit\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           traiter toutes les cibles sans condition\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C RPERTOIRE, --directory=RPERTOIRE\\n\"\n\"                              changer de rpertoire avant de faire quoi que \"\n\"ce soit\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d                          afficher beaucoup d'informations de dbugging\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=FANIONS]           afficher divers types d'informations de \"\n\"dbugging\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              les variable d'environment crase celles de \"\n\"makefile\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f FICHIER, --file=FICHIER, --makefile=FICHIER\\n\"\n\"                              lire le FICHIER comme fichier makefile\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  afficher ce message et quitter\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\"  -i, --ignore-errors         ignorer les erreurs d'excution des commandes\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I RPERTOIRE, --include-dir=RPERTOIRE\\n\"\n\"                              RPERTOIRE de recherche pour les fichiers \"\n\"inclus lors du makefile\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          autoriser N tches simultanes ; nombre de \"\n\"tches est infini si utilis sans argument\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            poursuivre mme si certaines cibles n'ont pas \"\n\"pu tre fabriques\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              na pas lancer de multiples tches  moins que \"\n\"la charge soit infrieure  N\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   utiliser le dernier mtime entre les liens \"\n\"symboliques et la cible.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              ne pas excuter aucune commande; seulement les \"\n\"afficher\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o FICHIER, --old-file=FICHIER, --assume-old=FICHIER\\n\"\n\"                              considrer le FICHIER comme tant trs g et \"\n\"ne pas le retraiter\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base       afficher la base de donnes interne de make\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              ne pas excuter de commandes ; le statut de \"\n\"sortie indique si la cible est  jour\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      dsactiver les rgles implicites internes\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  dsactiver les variables d'initialisation des \"\n\"rgles implicites internes\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       ne pas faire l'cho des commandes\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              dsactivier -k\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 assigner l'heure actuelle aux cibles au lieu \"\n\"de les refabriquer\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               afficher le numro de version de make et \"\n\"quitter\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       afficher le rpertoire courant\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        dsactiver l'option -w, mme si elle a t \"\n\"active implicitement\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W FICHIER, --what-if=FICHIER, --new-file=FICHIER, --assume-new=FICHIER\\n\"\n\"                              considrer le FICHIER comme tant toujours \"\n\"nouveau\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  prvenir lorsqu'une variable non dfinie est \"\n\"rfrence\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"une chane vide n'est pas un nom de fichier valable\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"niveau de dbug inconnu  %s \"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\"%s: interception de l'Interruption/Exception (code = 0x%x, addr = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Filtre d'exception  ne pas traiter appel par le programme %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Violation d'accs: opration d'criture  l'adresse %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Violoation d'accs: opration de lecture  l'adresse %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell initialis aux paramtres default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\"find_and_set_shell chemin de recherche initialis aux paramtres \"\n\"default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s est suspendu pour 30 secondes...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sommeil termin(30). Poursuite.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile depuis l'entre stadnard spcifi deux fois.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (fichier temporaire)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (fichier temporaire)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"\"\n\"Les tches en parallle (-j) ne sont pas supportes sur cette plate-forme.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Rinitialisation en mode simple de traitement des tches (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"erreur interne: options multiple de --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"erreur interne: chane  %s  invalide dans --jobserver-fds\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"AVERTISSEMENT: -jN forc dans submake: dsactivation du mode serveur de \"\n\"taches.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"duplication par dup du serveur de tches\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"AVERTISSEMENT: serveur de tches n'est pas disponible: utilisation de -j1. \"\n\"Ajouter  +   la rgle parent du make.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"cration des pipes pour les tches\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"initialisation du pipe du serveur de tches\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Les liens symboliques ne sont pas supportes: dsactivation de -L.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Mise  jour des makefiles....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Le makefile  %s  peut boucler ; pas de refabrication.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"chec de refabrication du makefile  %s .\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Le makefile inclus  %s  n'a pas t trouv.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Le makefile  %s  n'a pas t trouv\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Impossible de revenir dans le rpertoire d'origine.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"R-excution[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (fichier temporaire):\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL conteitn plus d'une cible\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Pas de cibles spcifies et aucun makefile n'a t trouv\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Pas de cibles\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Mise  jour des cibles vises....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"AVERTISSEMENT: changement d'horloge dtect. La construction peut tre \"\n\"incomplte.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Usage : %s [options] [cible] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ce logiciel est construit pour %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ce logiciel est construit pour %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Rapporter toutes anomalies   <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"l'option  -%c  requiert une chane non vide comme argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"l'option  -%c  prend en argument un entier positif\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sCeci est un logiciel libre ; voir le source pour les conditions de copie.\\n\"\n\"%sIl n'y a PAS de garantie ; tant pour une utilisation COMMERCIALE que pour\\n\"\n\"%sRPONDRE  UN BESOIN PARTICULIER.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sCe logiciel est construit pour %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sCe logiciel est construit pour %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Base de donnes de Make, imprime le %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Fin de la base de donnes de Make le %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: entrant dans un rpertoire inconnu\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: quittant un rpertoire inconnu\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: entrant dans le rpertoire  %s \\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: quittant le rpertoire  %s \\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: entrant dans un rpertoire inconnu\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: quittant un rpertoire inconnu\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: entrant dans le rpertoire  %s \\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: quittant le rpertoire  %s \\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Arrt.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Erreur inconnue %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"mmoire virtuelle puise\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: utilisateur %lu (rel %lu), groupe %lu (rel %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Accs initialis\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Accs utilisateur\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Accs de Make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Accs des fils\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"Erreur d'criture: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"erreur d'criture\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lecture des makefiles...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lecture du makefile  %s \"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (pas de cible par dfaut)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (chemin de recherche)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (n'importe pas)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (pas de remplacement du ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"syntaxe invalide dans la condition\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \" endef  superflu\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"nom de variable vide\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"directive  override  vide\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"directive  override  invalide\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"les commandes commencent avant la premire cible\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"rgle manquante avant les commandes\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"sparateur manquant %s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (voulez-vous dire TAB au lieu de 8 blancs d'espacement?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"schma de cible manquant\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"schmas de cible multiples\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"le schma de cible ne contient pas  %% \"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \" endif  manquant\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Texte superflu aprs la directive  endef \"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \" endef  manquant,  define  non termin\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Texte superflu aprs la directive  %s \"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \" %s  superflu\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"un seul  else  par condition\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Dfinition de variable par cible spcifique mal-compose\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"les prrequis ne peuvent tre dfinis dans des scripts de commandes\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"mlange de schmas de rgles implicites et statiques\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"mlange de rgles implicites et normales\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"la cible  %s  ne correspond pas au schma de cible\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"le fichier cible  %s  a  la fois des entres : et ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"la cible  %s  apparat plus d'une fois dans la mme rgle.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"attention : crasement des commandes pour la cible  %s \"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"attention : anciennes commandes ignores pour la cible  %s \"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"attention : caractre NUL dtect ; le reste de la ligne est ignor\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Rien  faire pour  %s .\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \" %s  est  jour.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"lagage du fichier  %s .\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sPas de rgle pour fabriquer la cible  %s %s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sPas de rgle pour fabriquer la cible  %s , ncessaire pour  %s %s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"tude du fichier cible  %s .\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Tentative rcente choue de mettre  jour le fichier  %s .\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Le fichier  %s  a dj t tudi.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Mise  jour du fichier  %s  en cours.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Fin de la mise  jour du fichier  %s .\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Le fichier  %s  n'existe pas.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"AVERTISSEMENT: fichier .LOW_RESOLUTION_TIME  %s  a une date de haute \"\n\"rsolution\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Rgle implicite trouve pour  %s .\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Pas de rgle implicite trouve pour  %s .\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Utilisation des commandes par dfaut pour  %s .\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Dpendance circulaire %s <- %s abandonne.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Fin des dpendances du fichier cible  %s .\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Les dpendances de  %s  ont t fabriques.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Abandon du fichier cible  %s .\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"La cible  %s  n'a pas pu tre refabrique  cause d'erreurs.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Prrequis  %s  est d'ordre seulement pour la cible  %s .\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Le fichier de dpendance  %s  de la cible  %s  n'existe pas.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"La dpendance  %s  est plus rcente que la cile  %s .\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"La dpendance  %s  est vieux que la cible  %s .\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"La cible  %s  est double deux-points et n'a pas de dpendances.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Pas de commandes pour  %s  et aucune dpendance n'a chang.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Traitement de  %s  en raison du fanion de construction permanent.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Inutile de refabriquer la cible  %s .\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; utilisation du nom  %s  du VPATH\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Il faut refabriquer la cible  %s .\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \" Ignorer le nom  %s  du VPATH.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Les commandes de  %s  sont en cours d'excution.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"chec de refabrication du fichier cible  %s .\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Refabrication du fichier cible  %s  russie.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Le fichier cible  %s  a besoin d'tre refabriqu avec l'option -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"AVERTISSEMENT: fichier  %s  a une date de modification dans le futur\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\"AVERTISSEMENT: fichier  %s  a une date de modification %.2g dans le futur\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS: l'lment  %s  n'est pas un modle\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"La douane n'exportera pas : %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Rgles Implicites\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Pas de rgles implicites.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u rgles implicites, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminales.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG : num_pattern_rules est faux !  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"signal inconnu\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Raccroch\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interruption\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Quitte\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Instruction Illgale\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Point de trace/arrt\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Avort\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Appel IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Appel mulateur\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Exception numrique\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Tu\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Erreur de bus\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Erreur de segmentation\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Appel systme invalide\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Tube cass\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarme\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Termin\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Signal utilisateur 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Signal utilisateur 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Fin d'un fils\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Panne de courant\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Arrt\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Arrt (lecture sur tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Arrt (criture sur tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Arrt (signal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Limite du temps CPU atteinte\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Limite de taille de fichier atteinte\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Timer virtuel expir\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Timer de profiling expir\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Changement de taille de la fentre\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Reprise\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Condition d'E/S urgente\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"E/S possible\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Ressource perdue\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Signal de danger\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Demande d'informations\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Co-processeur en virgule flottante n'est pas disponible\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"dfaut\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"environnement\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"environnement avec l'option -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"ligne de commande\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"directive  override \"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatique\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (de  %s , ligne %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# variables initialises dans les statistiques de table de hachage:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variables\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Valeurs de variable avec modle spcifique\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# pas de valeurs de variable avec modle spcifique\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u valeurs de variable avec modle spcifique \"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"attention : variable indfinie  %.*s \"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$serach en chec avec %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"AVERTISSEMENT: redirection vide\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"erreur interne :  %s  command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-warning, CTRL-Y laissera les sous-processsus.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-warning, vous devrez r-activier par CTRL-Y le traitement par DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"Commande interne [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"Commande interne CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"Commande internr RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Utilisation des commandes internes  %s \\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Erreur, commande vide\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Redirection de l'entre de %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Erreur redirige vers %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Redirection de la sortie vers %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Excution de %s  la place\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Erreur de lancement de tche, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Chemins de Recherche VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Pas de chemins de recherche  vpath .\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u chemins de recherche  vpath .\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Pas de chemin de recherche gnral (variable  VPATH ).\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Chemin de recherche gnral (variable  VPATH ) :\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Ne pas spcifier -j ou --jobs si sh.exe n'est pas disponible.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Rinitialisation de make en mode de traitement simple des tches.\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Erreur de syntaxe, toujours  l'intrieur de  \\\" \\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"\"\n#~ \"Rception du signal SIGCHLD ; %u processus fils dont le statut de\\n\"\n#~ \"sortie n'a pas t rcup.\\n\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"pas de nom de fichier pour  %sinclude \"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"la cible  %s  a laiss un schma de dpendance vide\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Pas de fichiers.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u fichiers dans %u tables de hachage.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# moyenne de %.3f fichiers par table, maximum de %u fichiers dans une \"\n#~ \"table.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"RPERTOIRE\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Changer de RPERTOIRE avant de faire quoi que ce soit\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"FANIONS\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Suspension de processus pour permettre au dboggeur de se rattacher\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"\"\n#~ \"Les variables d'environnement crasent celles dfinies dans les makefiles\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FICHIER\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Lit FICHIER en tant que makefile\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Recherche les makefiles inclus dans DIRECTORY\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"N'excute pas de tches multiples si la charge dpasse N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"N'excute pas les commandes ; elles sont juste affiches\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Considre FILE comme tant trs vieux et ne le refabrique pas\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"N'affiche pas les commandes\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Dsactive -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Considre FILE comme tant infiniment rcent\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Entre dans\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Quitte\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Pas de variables.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# moyenne de %.1f variables par table, maximum de %u dans une table.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# moyenne de %d.%d variables par table, maximum de %u dans une table.\\n\"\n\n#~ msgid \"Error in lbr$ini_control, %d\\n\"\n#~ msgstr \"Erreur dans lbr$ini_control, %d\\n\"\n\n#~ msgid \"Error looking up module %s in library %s, %d\\n\"\n#~ msgstr \"Erreur en recherchant le module %s dans la bibliothque %s, %d\\n\"\n\n#~ msgid \"Error getting module info, %d\\n\"\n#~ msgstr \"Erreur lors de l'obtention des informations du module, %d\\n\"\n\n#~ msgid \"touch: \"\n#~ msgstr \"touch: \"\n\n#~ msgid \" not\"\n#~ msgstr \" non\"\n\n#~ msgid \"#  Last modified %.24s (%0lx)\\n\"\n#~ msgstr \"#  Dernire modification %.24s (%0lx)\\n\"\n\n#~ msgid \"undefined\"\n#~ msgstr \"indfini\"\n\n#~ msgid \"file\"\n#~ msgstr \"fichier\"\n\n#~ msgid \"environment override\"\n#~ msgstr \"crasement par l'environnement\"\n\n#~ msgid \"override\"\n#~ msgstr \"crasement\"\n\n#~ msgid \"the `word' function takes a one-origin index argument\"\n#~ msgstr \"la fonction `word' prend un argument d'index  une seule origine\"\n\n#~ msgid \"implicit\"\n#~ msgstr \"dpendance implicite\"\n\n#~ msgid \"rule\"\n#~ msgstr \"rgle de dpendance\"\n\n#~ msgid \"Trying %s dependency `%s'.\\n\"\n#~ msgstr \"Essai de la %s `%s'.\\n\"\n\n#~ msgid \"Found dependency as `%s'.%s\\n\"\n#~ msgstr \"Dpendance trouve en tant que `%s'.%s\\n\"\n\n#~ msgid \"intermediate\"\n#~ msgstr \"intermdiaire\"\n\n#~ msgid \" (ignored)\"\n#~ msgstr \" (ignore)\"\n\n#~ msgid \"Unknown%s job %d\"\n#~ msgstr \"Tche%s inconnue %d\"\n\n#~ msgid \" remote\"\n#~ msgstr \" distante\"\n\n#~ msgid \"%s finished.\"\n#~ msgstr \"%s termine.\"\n\n#~ msgid \"losing\"\n#~ msgstr \"perdant\"\n\n#~ msgid \"winning\"\n#~ msgstr \"gagnant\"\n\n#~ msgid \"%sGNU Make version %s\"\n#~ msgstr \"%sGNU Make version %s\"\n\n#~ msgid \"Unknown error 12345678901234567890\"\n#~ msgstr \"Erreur inconnue 12345678901234567890\"\n\n#~ msgid \"User\"\n#~ msgstr \"utilisateur\"\n\n#~ msgid \"Make\"\n#~ msgstr \"make\"\n\n#~ msgid \"Child\"\n#~ msgstr \"enfant\"\n\n#~ msgid \"Dependency `%s' does not exist.\\n\"\n#~ msgstr \"La dpendance `%s' n'existe pas.\\n\"\n\n#~ msgid \"newer\"\n#~ msgstr \"plus rcente\"\n\n#~ msgid \"older\"\n#~ msgstr \"plus ancienne\"\n\n#~ msgid \"exporting: Couldn't create return socket.\"\n#~ msgstr \"exportation : N'a pas pu crer la socket de retour.\"\n\n#~ msgid \"exporting: \"\n#~ msgstr \"exportation : \"\n\n#~ msgid \"exporting: %s\"\n#~ msgstr \"exportation : %s\"\n\n#~ msgid \"Job exported to %s ID %u\\n\"\n#~ msgstr \"Tche exporte vers %s ID %u\\n\"\n\n#~ msgid \"Error getting load average\"\n#~ msgstr \"Erreur lors de l'obtention de la charge moyenne\"\n\n#~ msgid \"1-minute: %f  \"\n#~ msgstr \"1 minute : %f  \"\n\n#~ msgid \"5-minute: %f  \"\n#~ msgstr \"5 minutes : %f  \"\n\n#~ msgid \"15-minute: %f  \"\n#~ msgstr \"15 minutes : %f  \"\n\n#~ msgid \"digits occur in two different argv-elements.\\n\"\n#~ msgstr \"des chiffres apparaissent dans deux lments diffrents de argv.\\n\"\n\n#~ msgid \"option %c\\n\"\n#~ msgstr \"option %c\\n\"\n\n#~ msgid \"option a\\n\"\n#~ msgstr \"option a\\n\"\n\n#~ msgid \"option b\\n\"\n#~ msgstr \"option b\\n\"\n\n#~ msgid \"option c with value `%s'\\n\"\n#~ msgstr \"option c ayant pour valeur `%s'\\n\"\n\n#~ msgid \"?? getopt returned character code 0%o ??\\n\"\n#~ msgstr \"?? getopt a renvoy le caractre de code 0%o ??\\n\"\n\n#~ msgid \"non-option ARGV-elements: \"\n#~ msgstr \"lments de ARGV qui ne sont pas des options : \"\n\n#~ msgid \"option d with value `%s'\\n\"\n#~ msgstr \"option d ayant pour valeur `%s'\\n\"\n\n#~ msgid \"%s: unknown signal\"\n#~ msgstr \"%s : signal inconnu\"\n\n#~ msgid \"Signal 12345678901234567890\"\n#~ msgstr \"Signal 12345678901234567890\"\n\n#~ msgid \"Signal %d\"\n#~ msgstr \"Signal %d\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/ga.po",
    "content": "# Irish translations for make.\n# Copyright (C) 2005 Free Software Foundation, Inc.\n# This file is distributed under the same license as the make package.\n# Kevin Patrick Scannell <scannell@SLU.EDU>, 2005.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-06-28 10:16-0500\\n\"\n\"Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\\n\"\n\"Language-Team: Irish <ga@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"rinneadh iarracht ar ghn gan tacaocht a sid: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"n fidir ball cartlainne a `touch'il ar VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Nl an chartlann `%s' ann\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: Nl `%s' ina cartlann bhail\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Nl a leithid de bhall `%s' i `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Droch-chd aisfhillidh  ar_member_touch ar `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\"norbh fhidir le lbr$set_module an t-eolas modil a bhaint amach, stdas = %\"\n\"d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"theip ar lbr$ini_control le stdas = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"\"\n\"n fidir leabharlann `%s' a oscailt chun cuardach a dhanamh ar an mball `%\"\n\"s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Ball `%s'%s: %ld beart ag %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (is fidir go bhfuil an t-ainm teasctha)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Dta %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, md = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Briseadh.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Is fidir gur ball brige  `%s'; n scriosadh\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Is fidir gur ball brige  `%s'; n scriosadh\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Comhad `%s'  scriosadh\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Comhad `%s'  scriosadh\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  orduithe le rith\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (insuite):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" ( `%s', lne %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Comhadlanna\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: norbh fhidir  a stat.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (eochair %s, am-m %d): n fidir  a oscailt.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (glas %d, i-nd [%d,%d,%d]): n fidir  a oscailt.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (glas %ld, i-nd %ld): norbh fhidir  a oscailt.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (eochair %s, am-m %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (glas %d, i-nd [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (glas %ld, i-nd %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Nl\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" comhad, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"nl\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" ruda neamhfhideartha\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" go dt seo.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" ruda neamhfhideartha i %lu comhadlann.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Danann an athrg athchrsach `%s' tagairt d fin (sa deireadh)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"tagairt athrige gan chrochn\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Sonraodh orduithe le haghaidh comhaid `%s' ag %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Aimsodh orduithe le haghaidh `%s' tr chuardach ar rialacha intuigthe,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"ach anois is ionann iad na comhaid `%s' agus `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Danfar neamhshuim ar orduithe le haghaidh `%s'; sidfear na cinn le \"\n\"haghaidh `%s' ina n-ionad.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"n fidir idirstad aonair `%s' a athainmnigh le hidirstad dbailte `%s'\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"n fidir idirstad dbailte `%s' a athainmni le hidirstad aonair `%s'\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Comhad idirmhenach `%s'  scriosadh\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Comhaid idirmhenacha  mbaint...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Stampa ama as raon; %s  sid ina ionad\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"An t-am anois\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# N sprioc :\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Comhad luachmhar (ramhriachtanas de .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Sprioc bhrige (ramhriachtanas de .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Sprioc lne na n-orduithe.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Makefile ramhshocraithe, n  MAKEFILES, n -include/sinclude.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Rinneadh cuardach ar rialacha intuigthe.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  N dhearna cuardach ar rialacha intuigthe.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Stoc patrin intuigthe/statach: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  T an comhad ina ramhriachtanas idirmhenach.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Dantar fosta:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Nor seiceladh an t-am mionathraithe riamh.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Nl a leithid de chomhad ann.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Is cianaosta an comhad seo.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Athraithe %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Nuashonraodh an comhad.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Nor nuashonraodh an comhad.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  T orduithe ann at ag rith faoi lthair (IS FABHT  SEO).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  T orduithe splechais ag rith (IS FABHT  SEO).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  D'irigh leis an nuashonr.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  T g le nuashonr (-q ceaptha).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Theip ar nuashonr.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Luach neamhbhail sa bhall `update_status'!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Luach neamhbhail sa bhall `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Comhaid\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# comhaid hais-tbla stait:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"t an chad argint neamhuimhriil leis an fheidhm `word'\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"caithfidh an chad argint leis an fheidhm `word' a bheith deimhneach\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"is neamhuimhriil  an chad argint leis an fheidhm `wordlist'\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"is neamhuimhriil  an dara hargint leis an fheidhm `wordlist'\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: theip ar DuplicateHandle(In) (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: theip ar DuplicateHandle(Err) (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"Theip ar CreatePipe() (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): theip ar process_init_fd()\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Baisc-chomhad sealadach %s  ghlanadh\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Easpa argint (%d) d'fheidhm `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Nl an fheidhm `%s' ar fil ar an chras seo\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"glao ar fheidhm `%s' gan chrochn: `%c' ar iarraidh\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: T an rogha `%s' dbhroch\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: n cheadatear argint i ndiaidh na rogha `--%s'\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: n cheadatear argint i ndiaidh na rogha `%c%s'\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: n folir argint don rogha `%s'\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: rogha anaithnid `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: rogha anaithnid `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: rogha neamhcheadaithe -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: rogha neamhbhail -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: n folir argint don rogha -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: T an rogha `-W %s' dbhroch\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: n cheadatear argint i ndiaidh na rogha `-W %s'\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"n fidir %ld beart a dhileadh le haghaidh hais-tbla: cuimhne dithe\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Ld=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Ath-haiseil=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Tuairteanna haisela=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Ag danamh cuardach ar riail intuigthe le haghaidh `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\"Ag danamh cuardach ar riail intuigthe le haghaidh bhall cartlainne `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Athchrsil de bharr rialacha intuigthe  seachaint.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Ag baint triail as riail phatrin le stoc `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Ramhriachtanas intuigthe neamhfhideartha `%s'  dhilt.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Ramhriachtanas neamhfhideartha rialach `%s'  dhilt.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Ag baint triail as an ramhriachtanas intuigthe `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Ag baint triail as an ramhriachtanas rialach `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Aimsodh ramhriachtanas `%s' mar VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Ag danamh cuardach ar riail le comhad idirmhenach `%s'.\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"N fidir comhad sealadach a chruth\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Earrid 0x%x (rinneadh neamhshuim air)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Earrid 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Earrid %d (rinneadh neamhshuim)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Earrid %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (crdhumpa)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Ag fanacht le jabanna neamhchrochnaithe...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Mac beo 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (cianda)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Mac caillteach  bhaint: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Mac buaiteach  bhaint: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Baisc-chomhad sealadach %s  ghlanadh\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Mac 0x%08lx PID %ld%s  dheal n slabhra.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"scrobh jabfhreastala\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Saoradh ceadchomhartha le haghaidh mac 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"theip ar process_easy(); nor tosaodh priseas (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%d argint sa tos theipthe\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Ag cur mac 0x%08lx (%s) PID %ld%s ar an slabhra.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Fuarthas ceadchomhartha le haghaidh mac 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"ladh popa na jabanna\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"n fidir srianta lid a chur i bhfeidhm ar an chras oibrichin seo\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"n fidir srian lid a chur i bhfeidhm: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"nl aon hanla comhaid le fil: norbh fhidir stdin a chipeil\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"nl aon hanla comhaid le fil: norbh fhidir stdout a chipeil\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Norbh fhidir stdin a athchiri\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Norbh fhidir stdout a athchiri\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"theip ar process_easy(); nor tosaodh priseas (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"ghin make mac le pid %d, ag fanacht le pid %d fs\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: N bhfuarthas an t-ord\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: N bhfuarthas an clr blaoisce\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: is fidir gur dithe  cuimhne na timpeallachta\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"Athraodh $SHELL (ba `%s' , agus is `%s'  anois)\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Baisc-chomhad sealadach %s  chruth\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"%s (lne %d) Droch-chomhthacs blaoisce (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Roghanna:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Dan neamhshuim (comhoirinacht)\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Dan gach sprioc, gan choinnollacha.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C COMHADLANN, --directory=COMHADLANN\\n\"\n\"                              Tigh go COMHADLANN roimh dhanamh aon rud.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -d                          Taispein go leor eolas dfhabhtaithe.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=BRATACHA]          Taispein eolas fabhtaithe de chinelacha \"\n\"agsla.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Sraonn athrga timpeallachta makefileanna.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f COMHAD, --file=COMHAD, --makefile=COMHAD\\n\"\n\"                              Ligh COMHAD mar makefile.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Taispein an chabhair seo agus scoir.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\"  -i, --ignore-errors         Dan neamhshuim ar earrid  orduithe.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I COMHADLANN, --include-dir=COMHADLANN\\n\"\n\"                              Cuardaigh i gCOMHADLANN ar makefileanna \"\n\"breise.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Ceadaigh N jab le chile; igroch mura \"\n\"gceaptar arg.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Lean ar aghaidh fi nach fidir sprioc a \"\n\"dhanamh.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              N tosaigh jabanna iomadla mura bhfuil an ld \"\n\"nos l n N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   sid an t-am modhnaithe is dana, ar an \"\n\"nasc\\n\"\n\"                                 siombalach n ar an sprioc.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              N rith aon ord; taispein tortha mar dhea \"\n\"amhin.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o COMHAD, --old-file=COMHAD, --assume-old=COMHAD\\n\"\n\"                              Caith le COMHAD mar cheann cianaosta; n \"\n\"hathdhan .\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base       Taispein an bunachar sonra inmhenach.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              N rith aon ord; stdas scortha = 0 mura g \"\n\"le nuashonr.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Dchumasaigh na rialacha intuigthe insuite.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"  -R, --no-builtin-variables  Dchumasaigh na hathrga insuite.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       N dan macalla ar orduithe.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Mch -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Teagmhaigh spriocanna in ionad iad a \"\n\"athdhanamh.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               Taispein eolas faoin leagan agus scoir.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Taispein an chomhadlann reatha.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Mch -w, fi m t s i bhfeidhm go \"\n\"hintuigthe.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W COMHAD, --what-if=COMHAD, --new-file=COMHAD, --assume-new=COMHAD\\n\"\n\"                              Caith le COMHAD mar cheann rnua (go \"\n\"higroch).\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Tabhair rabhadh m dhantar tagairt d'athrg \"\n\"gan sainmhni.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"n fidir teaghrn folamh a sid mar ainm comhaid\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"sonr anaithnid `%s' ar an leibhal dfhabhtaithe\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Fuarthas idirbhriseadh/eisceacht (cd = 0x%x, seoladh = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Glaodh scagaire eisceachta gan limhseil n chlr %s\\n\"\n\"CdEisceachta = %x\\n\"\n\"BratachaEisceachta = %x\\n\"\n\"SeoladhEisceachta = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Sr rochtana: oibrocht scrofa ag seoladh %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Sr rochtana: oibrocht limh ag seoladh %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"t find_and_set_shell ag socr default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"shocraigh find_and_set_shell conair chuardaigh default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"cuirfear %s ar fionra ar feadh trimhse 30 soicind...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) crochnaithe. Ag gabhil ar aghaidh.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Sonraodh Makefile n ionchur caighdenach faoi dh.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (comhad sealadach)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (comhad sealadach)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Nl jabanna parailalacha (-j) ar fil ar an gcras seo.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \" athshocr le haghaidh jabanna aonair (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"earrid inmhenach: roghanna --jobserver-fds iomadla\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"earrid inmhenach: teaghrn neamhbhail --jobserver-fds `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"rabhadh: -jN frsilte i bhfo-make: md jabfhreastala  dhchumas.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"jabfhreastala dup\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"rabhadh: nl jabfhreastala ar fil: ag baint sid as -j1.  Cuir `+' leis \"\n\"an mthair-riail.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"popa na jabanna  chruth\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"popa an jabfhreastala  ths\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"n thacatear le naisc shiombalacha: -L  dhchumas.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Makefileanna  nuashonr....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"is fidir go lbfar an Makefile `%s'; n athdhanfar .\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Theip ar athdhanamh an makefile `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Nor aimsodh an makefile `%s' san ireamh.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Nor aimsodh an makefile `%s'\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Norbh fhidir an chomhadlann oibre a athr ar ais.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \" rith ars[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (comhad sealadach): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"t nos m n aon sprioc amhin i .DEFAULT_GOAL\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Nor sonraodh aon sprioc agus nor aimsodh aon makefile\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Nl aon sprioc ann\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Cinn sprice  nuashonr....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"rabhadh:  Clog ar sceabha.  Is fidir go bhfuil an tgil neamhiomln.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"sid: %s [roghanna] [sprioc] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Tgadh an clr seo le haghaidh %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Tgadh an clr seo le haghaidh %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Seol tuairisc fabhtanna chuig <bug-make@gnu.org>\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"caithfidh t teaghrn nach folamh a thabhairt mar argint le `-%c'\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"caithfidh t slnuimhir dheimhneach a thabhairt mar argint le `-%c'\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sIs saorbhogearra an romhchlr seo; fach ar an bhunchd le haghaidh\\n\"\n\"%scoinnollacha cipela.  Nl barnta ar bith ann; go fi nl barnta ann\\n\"\n\"%sd'INDOLTACHT n FEILINACHT DO FHEIDHM AR LEITH.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTgadh an clr seo le haghaidh %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTgadh an clr seo le haghaidh %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Bunachar sonra Make, priontilte ar %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Crochnaodh an bunachar sonra Make seo ar %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Ag dul isteach i gcomhadlann anaithnid\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Ag dul amach as comhadlann anaithnid\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Ag dul isteach sa chomhadlann `%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Ag dul amach as an gcomhadlann `%s'\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Ag dul isteach i gcomhadlann anaithnid\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Ag dul amach as comhadlann anaithnid\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Ag dul isteach sa chomhadlann `%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Ag dul amach as an gcomhadlann `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Stop.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Earrid anaithnid %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"cuimhne fhoril dithe\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: sideoir %lu (for %lu), grpa %lu (for %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Rochtain tsaithe\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Rochtain sideora\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Rochtain make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Rochtain mic\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"earrid sa scrobh: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"earrid sa scrobh\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Makefileanna  lamh...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Makefile `%s'  lamh\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (gan ceann sprice ramhshocraithe)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (conair chuardaigh)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (is cuma)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (n fairsing ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"comhrir neamhbhail i gcoinnollach\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"`endef' breise\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"ainm folamh athrige\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"treoir `override' folamh\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"treoir neamhbhail `override'\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"t orduithe ann roimh an chad sprioc\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"riail ar iarraidh roimh orduithe\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"deighilteoir%s ar iarraidh\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (Ar mhian leat TB in ionad ocht sps?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"patrn sprice ar iarraidh\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"patrin iomadla sprice\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"nl aon `%%' sa phatrn sprice\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"`endif' ar iarraidh\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Tacs gan mhaith i ndiaidh treorach `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"`endef' ar iarraidh, `define' gan chrochn\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Tacs gan mhaith i ndiaidh treorach `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"`%s' breise\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"n cheadatear ach aon `else' amhin le gach coinnollach\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Is mchumtha  an sainmhni athrige (le haghaidh aon sprioc amhin)\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"n fidir ramhriachtanais a shonr i scripteanna ordaithe\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"rialacha intuigthe agus rialacha statacha measctha le chile\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"rialacha intuigthe agus gnthrialacha measctha le chile\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"nl an sprioc `%s' comhoirinach leis an phatrn sprice\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"t iontrlacha : agus :: araon ann don chomhad sprice `%s'\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"t an sprioc `%s' i riail amhin nos m n uair amhin.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"rabhadh: ag sr na n-orduithe le haghaidh na sprice `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"\"\n\"rabhadh: ag danamh neamhshuim ar sheanorduithe le haghaidh sprice `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"\"\n\"rabhadh: chonacthas carachtar NUL; ag danamh neamhshuim ar an chuid eile \"\n\"den lne\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Nl faic le danamh i gcomhair `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"N g le `%s' a nuashonr.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Comhad `%s'  bhearradh.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sNl aon riail chun an sprioc `%s' a dhanamh%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sNl aon riail chun an sprioc `%s' a dhanamh, riachtanach le haghaidh `%s'%\"\n\"s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Comhad sprice `%s' idir lmha.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"\"\n\"Rinneadh iarracht ar an chomhad `%s' a nuashonr le dana, agus theip air.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Rinneadh scrd ar an chomhad `%s' cheana.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Comhad `%s'  nuashonr fs.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Nuashonraodh an comhad `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Nl a leithid de chomhad `%s' ann.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Warning: comhad .LOW_RESOLUTION_TIME `%s' le stampa ama ardtaifeach\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Aimsodh riail intuigthe le haghaidh `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Nor aimsodh aon riail intuigthe le haghaidh `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Ag baint sid as orduithe ramhshocraithe le haghaidh `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Trigeadh an splechas ciorclach %s <- %s.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Crochnaodh na ramhriachtanais den chomhad sprice `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Ramhriachtanais de `%s'  ndanamh anois.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Ag trigean an chomhaid sprice `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"N dhearna an sprioc `%s' ars s rud  go bhfuil earrid ann.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\"Sonraonn an ramhriachtanas `%s' ord rite amhin le haghaidh sprice `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Nl an ramhriachtanas `%s' den sprioc `%s' ann.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"T an ramhriachtanas `%s' nos nua n an sprioc `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"T an ramhriachtanas `%s' nos sine n an sprioc `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"T dh idirstad ag an sprioc `%s' agus nl aon ramhriachtanas aice.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\"Nl aon ord le haghaidh `%s' agus nor athraigh aon ramhriachtanas.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"`%s'  dhanamh de bharr bratach --always-make.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"N g leis an sprioc `%s' a athdhanamh\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; ag baint sid as ainm VPATH `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Caithfidh an sprioc `%s' a athdhanamh.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ag danamh neamhshuim ar ainm VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Orduithe de `%s'  rith.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Theip ar athdhanamh an sprioc-chomhaid `%s'.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"D'irigh le hathdhanamh an sprioc-chomhaid `%s'.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"T g leis an chomhad sprice `%s' a athdhanamh leis an rogha -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Rabhadh: T an t-am mionathraithe den chomhad `%s' sa todhcha\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\"Rabhadh: T an t-am mionathraithe den chomhad `%s' %.2g soicind sa todhcha\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"Nl eilimint .LIBPATTERNS `%s' ina patrn\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"N easprtlfar Customs: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Rialacha Intuigthe\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nl aon riail intuigthe.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u riail intuigthe, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" teirminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"FABHT: num_pattern_rules mcheart!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"comhartha anaithnid\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Croch suas\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Idirbhriseadh\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Scoir\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Treoir Neamhcheadaithe\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Rianaigh/brisphointe\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Tobscortha\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Gaiste IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Gaiste EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Eisceacht snmhphointe\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Maraithe\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Busearrid\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Fabht deighilte\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Drochghlao ar an gcras\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Popa briste\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Clog alraim\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Scortha\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Comhartha saincheaptha 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Comhartha saincheaptha 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Scoir an mhacphriseas\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Cliseadh cumhachta\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Stoptha\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Stoptha (ionchur tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Stoptha (aschur tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Stoptha (comhartha)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Teorainn ama LAP sraithe\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Uasmhid na gcomhad sraithe\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Am foril caite\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Am prifle caite\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Athraodh an fhuinneog\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Leanta\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Staid phrinneach A/I\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"A/I indanta\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Acmhainn caillte\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Comhartha guaise\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Iarratas ar eolas\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Nl comhphrisela snmhphointe ar fil\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"ramhshocraithe\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"timpeallacht\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"timpeallacht le -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"lne na n-orduithe\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"treoir `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"uathoibroch\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" ( `%s', lne %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# athrg tacar hais-tbla stait:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Athrga\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Luachanna Athrige sainiil don phatrn\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nl aon luach athrige at sainiil don phatrn.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u luach athrige at sainiil don phatrn\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"rabhadh: athrg gan sainmhni: `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"Theip ar sys$cuardach le %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Rabhadh: Atreor folamh\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"earrid inmhenach: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-rabhadh, fgfaidh CTRL-Y fo-phrisis gan ghlanadh.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-rabhadh, is fidir gur g duit ionramhil CTRL-Y a athchumas  DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"INSUITE [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"CD INSUITE %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"RM INSUITE %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Ord anaithnid insuite '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Earrid, ord folamh\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Atreoraodh ionchur  %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Atreoraodh earrid go %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Atreoraodh aschur go %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"%s  rith ina it\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Earrid le linn sceitheadh, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH Conair Cuardaigh\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Nl aon chonair chuardaigh `vpath'.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u conair chuardaigh `vpath'.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nl aon chonair ghinearlta cuardaigh (athrg `VPATH').\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Conair ghinearlta cuardaigh (athrg `VPATH'):\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"N sonraigh -j n --jobs mura bhfuil sh.exe le fil.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"make  athshocr le haghaidh jabanna aonair.\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Earrid chomhrire, isteach i '\\\"' fs\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Fuarthas SIGCHLD; %u mac gan bhaint.\\n\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"nl aon ainm comhaid do `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"fgann an sprioc `%s' an patrn ramhriachtanais folamh\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/gl.po",
    "content": "# Galician translation of GNU make.\n# Copyright (C) 2000, 2002 Free Software Foundation, Inc.\n# Jacobo Tarrio <jtarrio@trasno.net>, 2000, 2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-10-05 14:46+0200\\n\"\n\"Last-Translator: Jacobo Tarrio <jtarrio@trasno.net>\\n\"\n\"Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=iso-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"tentouse usar unha caracterstica non soportada: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"a operacin de tocar un membro do arquivo non est dispoible en VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: O arquivo `%s' non existe\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' non  un arquivo vlido\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: O membro `%s' non existe en `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Cdigo de retorno incorrecto de ar_member_touch en `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\"a chamada a lbr$set_module non puido extrae-la informacin do mdulo, status \"\n\"= %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"a chamada a lbr$ini_control fallou con status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"non se pode abri-la biblioteca `%s' para busca-lo membro `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Membro `%s'%s: %ld bytes en %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (o nome pode quedar truncado)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Data %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, modo = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Interrompido.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] O membro do arquivo `%s' pode non ser correcto; non borrado\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** O membro do arquivo `%s' pode non ser correcto; non borrado\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Borrando o ficheiro `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Borrando o ficheiro `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  comandos para executar\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (incluidas):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (de `%s', lia %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Directorios\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: non se puido face-la operacin de stat.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (clave %s, mtime %d): non se puido abrir.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (dispositivo %d, inode [%d,%d,%d]): non se puido abrir.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (dispositivo %ld, inode %ld): non se puido abrir.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (clave %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (dispositivo %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (dispositivo %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Non\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" ficheiros, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"non\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" imposibles\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" ata aqu.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" imposibles en %lu directorios.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"A variable recursiva `%s' fai referencia a si mesma (ao final)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"referencia a variable non rematada\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Especificronse comandos do ficheiro `%s' en %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Atopronse os comandos do ficheiro `%s' por busca de regras implcitas,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"pero agora considrase que `%s'  o mesmo ficheiro que `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Os comandos de `%s' sern ignorados en favor dos de `%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"non se pode renomear `%s' con dous puntos a `%s' con catro puntos\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"non se pode renomear `%s' con catro puntos a `%s' con dous puntos\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Borrando o ficheiro intermedio `%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Borrando os ficheiros intermedios...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Marca de tempo fra de rango; substitundo %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Hora actual\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Non  un obxectivo:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Ficheiro precioso (prerrequisito de .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Obxectivo falso (prerrequisito de .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Obxectivo da lia de comando.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Un ficheiro de make por defecto ou de MAKEFILES.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Fxose a busca de regras implcitas.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Non se fixo a busca de regras implcitas.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Raiz do patrn implcito/esttico: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  O ficheiro  un prerrequisito intermedio.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Tamn se fai:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Nunca se comprobou o tempo de modificacin.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  O ficheiro non existe.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  O ficheiro  moi antigo.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  ltima modificacin: %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  O ficheiro foi actualizado.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  O ficheiro non foi actualizado.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Comandos que se estn a executar agora (ISTO  UN ERRO).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Comandos de dependencias que se estn a executar (ISTO  UN ERRO).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Actualizado con xito.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Ten que ser actualizado (-q est estabrecido).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Non se puido actualizar.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Valor non vlido no membro `update_status'!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Valor non vlido no membro `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Ficheiros\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# estatsticas da tboa hash de ficheiros:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"primeiro argumento da funcin `word' non numrico\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"o primeiro argumento da funcin `word' debe ser maior que 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"primeiro argumento da funcin `wordlist' non numrico\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"segundo argumento da funcin `wordlist' non numrico\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: a chamada a DuplicateHandle(In) fallou (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: a chamada a DuplicateHandle(Err) fallou (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"A chamada a CreatePipe() fallou (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): a chamada a process_init_fd() fallou\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Limpando o ficheiro de lotes temporal %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Nmero de argumentos insuficiente (%d) na chamada  funcin `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Non implementada nesta plataforma: funcin `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"chamada  funcin `%s' non rematada: falla `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: a opcin `%s'  ambigua\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opcin `--%s' non admite un argumento\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opcin `%c%s' non admite un argumento\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: a opcin `%s' precisa dun argumento\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: opcin `--%s' non recoecida\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: opcin `%c%s' non recoecida\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: opcin non vlida -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: opcin non vlida -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: a opcin precisa dun argumento -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: a opcin `-W %s'  ambigua\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opcin `-W %s' non admite un argumento\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"non se poden reservar %ld bytes para a tboa hash: memoria esgotada\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Carga=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Colisins=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Buscando unha regra implcita para `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Buscando unha regra implcita membro do arquivo para `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Evitando a recursin de regras implcitas.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Probando a regra de patrn con raiz `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Rexeitando o prerrequisito implcito imposible `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Rexeitando o prerrequisito imposible `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Probando o prerrequisito implcito `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Probando o prerrequisito `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Atopouse a o prerrequisito `%s' coma VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Buscando unha regra co ficheiro intermedio `%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (ficheiro temporal)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Erro 0x%x (ignorado)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Erro 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Erro %d (ignorado)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Erro %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (memoria envorcada)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Agardando por traballos non rematados....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Proceso fillo vivo 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (remoto)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Colleitando o proceso fillo perdedor 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Colleitando o proceso fillo gaador 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Limpando o ficheiro de lotes temporal %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Eliminando o proceso fillo 0x%08lx PID %ld%s da cadea.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"write jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Liberouse un elemento para o proceso fillo 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() non puido lanza-lo proceso (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Contronse %d argumentos no lanzamento que fallou\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Poendo o proceso fillo 0x%08lx (%s) PID %ld%s na cadea.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Obtvose un elemento para o proceso fillo 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"lectura do cano de traballos\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"non se poden impoer lmites de carga neste sistema operativo\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"non se pode impoer un lmite de carga: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() non puido lanza-lo proceso (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\"make colleitou un proceso fillo de pid %d, ainda se agarda polo pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Comando non atopado\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Intrprete de comandos non atopado\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"O valor de $SHELL cambiou (antes era `%s', agora `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Creando un ficheiro por lotes temporal %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"%s (lia %d) Contexto do intrprete de comandos incorrecto (!unixy && !\"\n\"batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opcins:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Ignorado por compatibilidade.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           Facer tdolos obxectivos incondicionalmente.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C DIRECTORIO, --directory=DIRECTORIO\\n\"\n\"                              Cambiar ao DIRECTORIO antes de facer nada.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d                          Amosar moita informacin de depuracin.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=MODIFICADORES]     Amosar varios tipos de informacin de \"\n\"depuracin.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              As variables de ambiente substiten aos \"\n\"ficheiros\\n\"\n\"                                 de make.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO\\n\"\n\"                              Le-lo FICHEIRO coma ficheiro de make.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Amosar esta mensaxe e sar.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Ignora-los erros dos comandos.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I DIRECTORIO, --include-dir=DIRECTORIO\\n\"\n\"                              Busca-los ficheiros de make includos\\n\"\n\"                                 no directorio.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Admitir N traballos  vez; infinitos sen\\n\"\n\"                                 un argumento.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Continuar cando no se poidan facer\\n\"\n\"                                 algns obxectivos.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Non iniciar varios traballos con carga\\n\"\n\"                                superior a N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Non executar ningn comando; s amosalos.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o FICHEIRO, --old-file=FICHEIRO, --assume-old=FICHEIRO\\n\"\n\"                              Trata-lo FICHEIRO coma moi antigo e non \"\n\"refacelo.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base       Amosa-la base de datos interna de make.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Non executar ningn comando; o estado de\\n\"\n\"                                 sada di se est actualizado.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Desactiva-las regras implcitas incluidas.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Desactiva-los valores das variables \"\n\"incluidos.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet             Non amosa-los comandos.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Desactiva -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Toca-los obxectivos no canto de os refacer.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               Amosa-lo nmero de versin de make e sar.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Amosa-lo directorio actual.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Desactivar -w, incluso se se activou\\n\"\n\"                                 implicitamente.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W FICHEIRO, --what-if=FICHEIRO, --new-file=FICHEIRO, --assume-\"\n\"new=FICHEIRO\\n\"\n\"                              Trata-lo FICHEIRO coma infinitamente novo.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Avisar cando se faga referencia a\\n\"\n\"                                 unha variable non definida.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"a cadea baleira non  vlida coma nome de ficheiro\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"especificacin de nivel de depuracin descoecido `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\"%s: Atrapouse unha Interrupcin/Excepcin (cdigo = 0x%x, enderezo = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Filtro de excepcins non manexadas chamado dende o programa %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Violacin de acceso: operacin de escritura no enderezo %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Violacin de acceso: operacin de lectura no enderezo %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell estabrecendo default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell busca de camios estabrece default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s est suspendido durante 30 segundos...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"rematouse sleep(30). Continuando.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"O ficheiro de make da entrada estndar foi especificado das veces.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (ficheiro temporal)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (ficheiro temporal)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Os traballos en paralelo (-j) non estn soportados nesta plataforma.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Reiniciando para entrar no modo de un traballo (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"erro interno: opcins --jobserver-fds mltiples\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"erro interno: cadea --jobserver-fds non vlida `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"aviso: -jN forzado no submake: desactivando o modo de servidor de traballos.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"aviso: o servidor de traballos non est dispoible: usando -j1. Engada `+'  \"\n\"regra do make pai.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"creando o cano de traballos\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"inicializa-lo cano do servidor de traballos\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Actualizando os ficheiros de make....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"O ficheiro de make `%s' podera causar un lazo; non se refai.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Non se puido reface-lo ficheiro de make `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Non se atopou o ficheiro de make incluido `%s'.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Non se atopou o ficheiro de make `%s'\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Non se puido voltar ao directorio orixinal.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Re-executando:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (ficheiro temporal)\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Non se especificaron obxectivos e non se atopou un ficheiro de make\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Non hai obxectivos\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Actualizando os obxectivos meta....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"aviso: Detectronse inconsistencias de reloxo. A operacin pode quedar \"\n\"incompleta.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Uso: %s [opcins] [obxectivo] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa compilou para %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa compilou para %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"Informe dos erros no programa a <bug-make@gnu.org>.\\n\"\n\"Informe dos erros na traduccin a <proxecto@trasno.net>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"a opcin `-%c' precisa dun argumento integral positivo\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"a opcin `-%c' precisa dun argumento integral positivo\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sIsto  software libre; vexa o cdigo fonte polas condicins de copia.\\n\"\n\"%sNON hai garanta; nin sequera de COMERCIABILIDADE ou APTITUDE PARA\\n\"\n\"%sUN FIN DETERMINADO.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa compilou para %s\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa compilou para %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Base de datos de Make, imprimida en %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Base de datos de Make rematada en %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Entrando nun directorio descoecido\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Sando dun directorio descoecido\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Entrando no directorio `%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Sando do directorio `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Entrando nun directorio descoecido\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Sando dun directorio descoecido\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Entrando no directorio `%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Sando do directorio `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Detido.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Erro %d descoecido\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"memoria virtual esgotada\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: usuario %lu (real %lu), grupo %lu (real %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Acceso inicializado\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Acceso de usuario\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Acceso de make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Acceso de fillo\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Erros redirixidos a %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"write jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lendo os ficheiros de make...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lendo o ficheiro de make `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (non hai un obxectivo por defecto)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (camio de busca)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (non importa)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (non hai expansin de ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"sintaxe non vlida no condicional\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"`endef' superfluo\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"nome de variable baleiro\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"directiva `override' baleira\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"directiva `override' non vlida\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"os comandos comezan antes do primeiro obxectivo\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"falla unha regra antes dos comandos\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"falla un separador%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (se cadra unha tabulacin no canto de oito espacios?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"falla un patrn obxectivo\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"patrns de obxectivo mltiples\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"o patrn obxectivo non contn `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"falla `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Texto superfluo trala directiva `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"falla `endef', `define' sen rematar\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Texto superfluo trala directiva `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"`%s' superfluo\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"s un `else' por condicional\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Definicin dunha variable por obxectivo mal formada\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"regrs de patrn implcitas e estticas mesturadas\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"regras implcitas e normais mesturadas\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"o obxectivo `%s' non coincide co patrn do obxectivo\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"o ficheiro obxectivo `%s' ten entradas : e ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"o obxectivo `%s' aparece mis dunha vez na mesma regra.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"aviso: ignorando os comandos do obxectivo `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"aviso: ignranse os comandos antigos do obxectivo `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"aviso: viuse un carcter NUL; ignrase o resto da lia\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Non hai nada que facer para `%s'\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' est actualizado.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Podando o ficheiro `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sNon hai unha regra para face-lo obxectivo `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sNon hai unha regra para face-lo obxectivo `%s', que precisa `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Considerando o ficheiro obxectivo `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Hai pouco probouse a actualiza-lo ficheiro `%s' e non se puido.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"O ficheiro `%s' xa fora considerado.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Ainda se est actualizando o ficheiro `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Rematouse de actualiza-lo ficheiro `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"O ficheiro `%s' non existe.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Aviso: o ficheiro `%s' de .LOW_RESOLUTION_TIME ten unha marca de tempo \"\n\"de alta resolucin\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Atopouse unha regra implcita de `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Non se atopou unha regra implcita para `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Usando os comandos por defecto para `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"A dependencia circular %s <- %s foi eliminada.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Rematronse os prerrequisitos do ficheiro obxectivo `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Estan a se face-los prerrequisitos de `%s'.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Abandonando no ficheiro obxectivo `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Non se refai o obxectivo `%s' a causa dos erros.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"O prerrequisito `%s'  s-orde para o obxectivo `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"O prerrequisito `%s' do obxectivo `%s' non existe.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"O prerrequisito `%s'  mis novo c obxectivo `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"O prerrequisito `%s'  mis vello c obxectivo `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"O obxectivo `%s' ten catro puntos e non ten prerrequisitos.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Non hai comandos de `%s', e non cambiaron os prerrequisitos.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Facendo `%s' debido  marca de sempre-facer.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Non  preciso reface-lo obxectivo `%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; usando o nome de VPATH `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Debe refacerse o obxectivo `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ignorando o nome VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Estanse a executa-los comandos de `%s'.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Non se puido reface-lo ficheiro obxectivo `%s'.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"O ficheiro obxectivo `%s' foi feito de novo con xito.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"O ficheiro obxectivo `%s' precisa refacerse con -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Aviso: O ficheiro `%s' ten unha data de modificacin no futuro\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Aviso: O ficheiro `%s' ten unha data de modificacin %.2g s. no futuro\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"O elemento de .LIBPATTERNS `%s' non  un patrn\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"A Aduana non exporta: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Regras Implcitas\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Non hai regras implcitas.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u regras implcitas, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"ERRO: num_pattern_rules  incorrecto! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"sinal descoecido\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Colgar\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interrompido\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Sar\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Instruccin Ilegal\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Trampa de trazado/punto de detencin\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Abortado\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Trampa de IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Trampa EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Excepcin de coma flotante\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Matado\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Erro do bus\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Fallo de segmento\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Chamada ao sistema incorrecta\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Cano rompido\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Temporizador\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Rematado\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Sinal definido polo usuario 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Sinal definido polo usuario 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"O proceso fillo rematou\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Fallo de suministro elctrico\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Detido\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Detido (entrada de consola)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Detido (sada de consola)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Detido (sinal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Lmite de tempo de CPU superado\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Lmite de tamao de ficheiros superado\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Temporizador virtual esgotado\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"O temporizador esgotouse\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"A fiestra cambiou\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Continuado\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Condicin de E/S urxente\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"A E/S  posible\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Recurso perdido\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Sinal de perigo\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Peticin de informacin\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"O co-procesador de coma flotante non est dispoible\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"por defecto\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"ambiente\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"ficheiro de make\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"ambiente baixo -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"lia de comandos\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"directiva `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automtico\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (de `%s', lia %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# estatsticas da tboa hash de conxunto de variables:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variables\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Valores de variables especficos do patrn\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Non hai valores especficos do patrn.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u valores de variables especficos do patrn\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"aviso: variable non definida `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"a chamada a sys$search fallou con %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Aviso: Redireccin baleira\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"erro interno: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-aviso, CTRL-Y deixar subprocesos ceibos.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-aviso, pode que tea que reactiva-lo manexo de CTRL-Y dende o DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Comando incluido descoecido '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Erro, comando baleiro\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Entrada redirixida de %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Erros redirixidos a %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Sada redirixida a %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Executando %s no canto\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Erro ao lanzar, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Camios de Busca VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Non hai camios de busca `vpath'\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u camios de busca `vpath'.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Non hai un camio de busca xeral (variable `VPATH').\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Camio de busca xeral (variable `VPATH'):\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Erro de sintaxe, ainda dentro de '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Recibiuse un sinal SIGCHLD; %u procesos fillos non colleitados.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Non especifique -j ou --jobs se sh.exe non est dispoible.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Reiniciando make para entrar no modo de un traballo.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"non hai un home de ficheiro en `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"o obxectivo `%s' deixa o patrn prerrequisito baleiro\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Non hai ficheiros.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u ficheiros en %u baldes hash.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# %.3f ficheiros de media por balde, mximo de %u ficheiros nun balde.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIRECTORIO\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Entrar no DIRECTORIO antes de facer nada\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"MODIFICADORES\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Suspende-lo proceso para poder conectar un depurador\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"\"\n#~ \"As variables de ambiente teen prioridade sobre os ficheiros de make\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FICHEIRO\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Le-lo FICHEIRO coma un ficheiro de make\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Busca-los ficheiros de make incluidos no DIRECTORIO\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Non comezar traballos mltiples se a carga non  inferior a N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"Non executar ningn comando; s amosalos\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Considerar que o FICHEIRO  moi vello, e non o refacer\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Non amosa-los comandos\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Desactiva -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Considerar que o FICHEIRO  infinitamente novo\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Entrando\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Saindo\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Non hai variables.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# %.1f variables de media por balde, mximo de %u nun balde.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# %d.%d variables de media por balde, mximo de %u nun balde.\\n\"\n\n#~ msgid \"the `word' function takes a positive index argument\"\n#~ msgstr \"a funcin `word' toma un argumento ndice positivo\"\n\n#~ msgid \" (ignored)\"\n#~ msgstr \" (ignorado)\"\n\n#~ msgid \" not\"\n#~ msgstr \" non\"\n\n#~ msgid \" remote\"\n#~ msgstr \" remoto\"\n\n#~ msgid \" with arg %s\"\n#~ msgstr \" co argumento %s\"\n\n#~ msgid \"%s finished.\"\n#~ msgstr \"%s rematou.\"\n\n#~ msgid \"%s: unknown signal\"\n#~ msgstr \"%s: sinal descoecido\"\n\n#~ msgid \"%sGNU Make version %s\"\n#~ msgstr \"%sGNU Make versin %s\"\n\n#~ msgid \"1-minute: %f  \"\n#~ msgstr \"1 minuto: %f  \"\n\n#~ msgid \"15-minute: %f  \"\n#~ msgstr \"15 minutos: %f  \"\n\n#~ msgid \"5-minute: %f  \"\n#~ msgstr \"5 minutos: %f  \"\n\n#~ msgid \"?? getopt returned character code 0%o ??\\n\"\n#~ msgstr \"?? getopt devolveu o cdigo do carcter 0%o ??\\n\"\n\n#~ msgid \"Child\"\n#~ msgstr \"Fillo\"\n\n#~ msgid \"Dependency `%s' does not exist.\\n\"\n#~ msgstr \"A dependencia `%s' non existe.\\n\"\n\n#~ msgid \"Error %ld\"\n#~ msgstr \"Erro %ld\"\n\n#~ msgid \"Error getting load average\"\n#~ msgstr \"Erro ao obte-la carga media\"\n\n#~ msgid \"Error mallocing for FAB\\n\"\n#~ msgstr \"Erro ao reservar memoria para FAB\\n\"\n\n#~ msgid \"Error mallocing for NAM\\n\"\n#~ msgstr \"Erro ao reservar memoria para NAM\\n\"\n\n#~ msgid \"Error mallocing for direct\\n\"\n#~ msgstr \"Erro ao reservar memoria para direct\\n\"\n\n#~ msgid \"Error mallocing for searchspec\\n\"\n#~ msgstr \"Erro ao reservar memoria para searchspec\\n\"\n\n#~ msgid \"ExceptionAddress = %x\\\\r\\n\"\n#~ msgstr \"ExceptionAddress = %x\\\\r\\n\"\n\n#~ msgid \"ExceptionCode = %x\\\\r\\n\"\n#~ msgstr \"ExceptionCode = %s\\\\r\\n\"\n\n#~ msgid \"ExceptionFlags = %x\\\\r\\n\"\n#~ msgstr \"ExceptionFlags = %x\\\\r\\n\"\n\n#~ msgid \"Job exported to %s ID %u\\n\"\n#~ msgstr \"Traballo exportado a %s ID %u\\n\"\n\n#~ msgid \"MyExecute: Cannot allocate space for calling a command\"\n#~ msgstr \"MyExecute: Non se pode reservar espacio para chamar un comando\"\n\n#~ msgid \"Trying %s dependency `%s'.\\n\"\n#~ msgstr \"Probando a dependencia %s `%s'.\\n\"\n\n#~ msgid \"Unknown error 12345678901234567890\"\n#~ msgstr \"Erro 12345678901234567890 descoecido\"\n\n#~ msgid \"Unknown%s job %d\"\n#~ msgstr \"Traballo%s %d descoecido\"\n\n#~ msgid \"User\"\n#~ msgstr \"Usuario\"\n\n#~ msgid \"arg with white space or doublequotes: %s\\n\"\n#~ msgstr \"argumento con espacios en branco ou comias dobres: %s\\n\"\n\n#~ msgid \"digits occur in two different argv-elements.\\n\"\n#~ msgstr \"aparecen dxitos en dous elementos de argv distintos.\\n\"\n\n#~ msgid \"empty string arg: %s\\n\"\n#~ msgstr \"argumento de cadea baleiro: %s\\n\"\n\n#~ msgid \"environment override\"\n#~ msgstr \"supli-lo ambiente\"\n\n#~ msgid \"execve: \"\n#~ msgstr \"execve: \"\n\n#~ msgid \"execvp: \"\n#~ msgstr \"execvp: \"\n\n#~ msgid \"expand_function: unable to launch process (e=%d)\\n\"\n#~ msgstr \"expand_function: non se puido lanza-lo proceso (e=%d)\\n\"\n\n#~ msgid \"exporting: \"\n#~ msgstr \"exportando: \"\n\n#~ msgid \"exporting: %s\"\n#~ msgstr \"exportando: %s\"\n\n#~ msgid \"exporting: Couldn't create return socket.\"\n#~ msgstr \"exportando: Non se puido crea-lo socket de retorno.\"\n\n#~ msgid \"getcwd: \"\n#~ msgstr \"getcwd: \"\n\n#~ msgid \"getwd: %s\"\n#~ msgstr \"getwd: %s\"\n\n#~ msgid \"implicit\"\n#~ msgstr \"implcita\"\n\n#~ msgid \"intermediate\"\n#~ msgstr \"intermedia\"\n\n#~ msgid \"losing\"\n#~ msgstr \"que perde\"\n\n#~ msgid \"never\"\n#~ msgstr \"nunca\"\n\n#~ msgid \"newer\"\n#~ msgstr \"mis novo\"\n\n#~ msgid \"non-option ARGV-elements: \"\n#~ msgstr \"elementos ARGV que non son opcins: \"\n\n#~ msgid \"older\"\n#~ msgstr \"mis vello\"\n\n#~ msgid \"option %c\\n\"\n#~ msgstr \"opcin %c\\n\"\n\n#~ msgid \"option %s\"\n#~ msgstr \"opcin %s\"\n\n#~ msgid \"option a\\n\"\n#~ msgstr \"opcin a\\n\"\n\n#~ msgid \"option b\\n\"\n#~ msgstr \"opcin b\\n\"\n\n#~ msgid \"option c with value `%s'\\n\"\n#~ msgstr \"opcin c co valor `%s'\\n\"\n\n#~ msgid \"option d with value `%s'\\n\"\n#~ msgstr \"opcin d co valor `%s'\\n\"\n\n#~ msgid \"original arg: %s\\n\"\n#~ msgstr \"argumento orixinal: %s\\n\"\n\n#~ msgid \"override\"\n#~ msgstr \"suplir\"\n\n#~ msgid \"plain arg: %s\\n\"\n#~ msgstr \"argumento simple: %s\\n\"\n\n#~ msgid \"process_begin: CreateProcess(%s, %s, ...) failed.\\n\"\n#~ msgstr \"process_begin: a chamada a CreateProcess(%s, %s, ...) fallou.\\n\"\n\n#~ msgid \"process_easy: DuplicateHandle(Err) failed (e=%d)\\n\"\n#~ msgstr \"process_easy: a chamada a DuplicateHandle(Err) fallou (e=%d)\\n\"\n\n#~ msgid \"process_easy: DuplicateHandle(In) failed (e=%d)\\n\"\n#~ msgstr \"process_easy: a chamada a DuplicateHandle(In) fallou (e=%d)\\n\"\n\n#~ msgid \"process_easy: DuplicateHandle(Out) failed (e=%d)\\n\"\n#~ msgstr \"process_easy: a chamada a DuplicateHandle(Out) fallou (e=%d)\\n\"\n\n#~ msgid \"read\"\n#~ msgstr \"lectura\"\n\n#~ msgid \"rule\"\n#~ msgstr \"regra\"\n\n#~ msgid \"touch %s\"\n#~ msgstr \"tocar %s\"\n\n#~ msgid \"undefined\"\n#~ msgstr \"non definido\"\n\n#~ msgid \"unlink: \"\n#~ msgstr \"unlink: \"\n\n#~ msgid \"winning\"\n#~ msgstr \"que gaa\"\n\n#~ msgid \"write\"\n#~ msgstr \"escritura\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/he.po",
    "content": "# Hebrew messages for GNU Make\n# Copyright (C) 2002 Free Software Foundation, Inc.\n# Eli Zaretskii <eliz@is.elta.co.il>, 2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.79.1\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-03-30 21:33+0300\\n\"\n\"Last-Translator: Eli Zaretskii <eliz@gnu.org>\\n\"\n\"Language-Team: Hebrew <eliz@gnu.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"  `%s'   \"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"VMS     /   \"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"  `%s'   :touch\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"    `%s' :touch\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"`%s'    `%s'  :touch\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"`%s'  -   ar_member_touch :touch\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"%d  ,lib$rset_module \\\"     \"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"%d    lbr$ini_control\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"(`%s' ) `%s'     \"\n\n#  These are not translated, since they belong to a test program.\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (name might be truncated)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Date %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Break. ***\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s]   ;-   `%s'   ***\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"***   ;-   `%s'   ***\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] `%s'   ***\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** `%s'   ***\"\n\n#  I decided to retain the English text of what Make prints under -p,\n#  since it is notoriously hard to get right in right-to-left languages,\n#  and because its primary use is for programmers who write Makefiles.\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  commands to execute\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (built-in):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (from `%s', line %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Directories\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: could not be stat'd.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (key %s, mtime %d): could not be opened.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (device %ld, inode %ld): could not be opened.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (key %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (device %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"No\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" files, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"no\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" impossibilities\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" so far.\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" impossibilities in %u directories.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"(  )    `%s'  \"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"    \"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \",`%s'     %s  %lu \"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \",-   \\\"  `%s'   \"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \".    `%s'  `%s'  \"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \".`%s'     `%s'  \"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"`%s'   `%s'     \"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"`%s'   `%s'     \"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** `%s'    ***\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** `%s'    ***\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"    ,%s     %s- \"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \" \"\n\n#  See the comment above about translations of text printed under -p.\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Not a target:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Precious file (prerequisite of .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Phony target (prerequisite of .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Command-line target.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  A default or MAKEFILES makefile.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Implicit rule search has been done.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Implicit rule search has not been done.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Implicit/static pattern stem: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  File is an intermediate prerequisite.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Also makes:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Modification time never checked.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  File does not exist.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  File is very old.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Last modified %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  File has been updated.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  File has not been updated.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Commands currently running (THIS IS A BUG).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Dependencies commands running (THIS IS A BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Successfully updated.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Needs to be updated (-q is set).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Failed to be updated.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Invalid value in `update_status' member!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Invalid value in `command_state' member!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Files\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"  `word'   \"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"   `word'   \"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"  `wordlist'   \"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"  `wordlist'   \"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) failed (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) failed (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() failed (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() failed\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"`%s'  batch  \\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"  (%d)     `%s' \"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"    `%s' \"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"`%s'   `%c' \"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s   -  `%s' \\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s      `--%s' \\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s      `%c%s' \\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s     `%s' \\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s   `--%s' - \\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s   `%c%s' - \\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: -  -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s     -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s:    -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s   -  `-W %s' \\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s      `-W %s' \\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \".`%s'  -  \\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \".`%s'    -  \\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \".-  \\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \".`%.*s'     \\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \".-   `%s' -   \\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \".-   `%s'   \\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \".`%s' -   \\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \".`%s'    \\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"`%s'   VPATH `%s' \\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \".`%s'     \\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (temporary file)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] 0x%x   ***\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] 0x%x  ***\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] %d  \"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] %d \"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (core    )\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** ...   \"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \" 0x%08lx (%s) PID=%ld %s -\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \"()\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \" 0x%08lx PID=%ld %s - \\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \" 0x%08lx PID=%ld %s - \\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"`%s'  batch  \\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \".  0x%08lx PID=%ld %s - \\n\"\n\n#  Here and elsewhere leading strings passed to perror are not translated,\n#  since they will be followed by an error message in English.\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"write jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \". 0x%08lx (%s) -  \\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"(e=%d) -   process_easy()\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"    %d\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \".  0x%08lx (%s) PID=%ld %s - \\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \".0x%08lx (%s) -   \\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"read jobs pipe\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"      \"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"cannot enforce load limit: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"(e=%d) -   process_easy()\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \" pid %d - ,pid %d-  \\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"    :%s\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"  shell  :%s\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"(`%s'   ,`%s' )  $SHELL  \"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"`%s'  batch  \\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"(!unixy && !batch_mode_shell) shell-mode   :%s   %d \\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"                                             :\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  \"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"      \"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"       \"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"     \"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"-  \"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"    ;-  N-  \"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"       \"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"Make     \"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"      ;  \"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"-   \"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"    \"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"      \"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"  Make    \"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"   \"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"     -w \"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"      \"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"     \"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"    `%s' - \"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s  (code = 0x%x, addr = 0x%x)   \\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%s       \\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"%x   :  \\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"%x   :  \\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell setting default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell path search set default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \". 30  %s \"\n\n#  Pay attention: this is written to the _right_ of the previous string,\n#  but should look like a single sentence together with it.\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \" \\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \".       Makefile\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (temporary file)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (temporary file)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \".    (-j)  \"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \".(-j1)    \"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \" --jobserver-fds  :  \"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"--jobserver-fds  `%s'   :  \"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"jobserver   ;-jN  Make- :\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\".Make    `+'  .-j1-   ;  jobserver :\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"creating jobs pipe\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"init jobserver pipe\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"...makefile  \\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \".   ;    `%s' Makefile\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \".`%s' makefile  - \"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \".  `%s'  makefile\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"  `%s' Makefile\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \".    \"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Re-executing:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (temporary file): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"makefile      \"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \" \"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"...  \\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \".     .   :\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"%s [] [] ...  : \\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\".<bug-make@gnu.org>-    \\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"    `-%c' \"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"    `-%c' \"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\", by Richard Stallman and Roland McGrath.\\n\"\n\"%s           %s  \\n\"\n\"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%s                     .     ;  \\n\"\n\"%s           ;     \\n\"\n\"%s                                                       . \\n\"\n\"\\n\"\n\"%s                           <bug-make@gnu.org>-    \\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"an unknown directory\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"an unknown directory\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"directory `%s'\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"directory `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"an unknown directory\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"an unknown directory\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"directory `%s'\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"directory `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Stop.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Unknown error %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"  \"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s access: user %lu (real %lu), group %lu (real %lu)\\n\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"Initialized\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"%s-  \\n\"\n\n#  Here and elsewhere leading strings passed to perror are not translated,\n#  since they will be followed by an error message in English.\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"write jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"...makefile  \\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Reading makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (no default goal)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (search path)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (don't care)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (no ~ expansion)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"   \"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \" `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"  \"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \" `override' \"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \" `override' \"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"    \"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"   \"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"%s \"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"(? 8  TAB-  ) \"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"  \"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"  \"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"`%%'   \"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \" `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"`endef'    \"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"  `define'  , `endef'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"`%s'    \"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \" `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"   `else'  \"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"     \"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"-     \"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"-    \"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"     `%s' \"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"::  :     `%s'  \"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \".      `%s' \"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"`%s'     :\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"`%s'      :\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"   ;NUL   :\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \".`%s    \"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \".  `%s'\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \".`%s'    \\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%s`%s'%s    \"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%s    ,`%s'  `%s'%s \"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \".`%s'   \\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \".`%s'      \\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \".-   `%s' \\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \".`%s'   \\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \".`%s'   \\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \".  `%s' \\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \".`%s'  -  \\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \".`%s'  -   \\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \".`%s'     \\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \".%s <- %s   \"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \".`%s'    -  \\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \". `%s'   \\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \".`%s'     \\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \".     `%s' \"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \".`%s'    `%s' \\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \".  `%s'   `%s' \\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \".`%s'    `%s' \\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \".`%s'    `%s' \\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \".       `%s' \\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \".      `%s'   \\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"`%s'     \"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \" (`%s' :VPATH  )\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \".`%s'    \\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  .`%s' VPATH  \\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \".`%s'   \\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \". `%s'   \\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \".`%s'   \\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \".-q    `%s'  \\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"*** `%s'   (%s > %s)      : ***\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"*** `%s'   (%s > %s)      : ***\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"  .LIBPATTERNS  `%s' \"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"%s   Customs\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# No implicit rules.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# No implicit rules.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG: num_pattern_rules wrong!  %u != %u\"\n\n#  It's no use to try to translate the signal names.\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"unknown signal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Hangup\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interrupt\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Quit\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Illegal Instruction\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Trace/breakpoint trap\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Aborted\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT trap\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT trap\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Floating point exception\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Killed\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Bus error\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Segmentation fault\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Bad system call\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Broken pipe\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarm clock\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Terminated\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"User defined signal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"User defined signal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Child exited\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Power failure\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Stopped\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Stopped (tty input)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Stopped (tty output)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Stopped (signal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU time limit exceeded\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"File size limit exceeded\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtual timer expired\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profiling timer expired\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Window changed\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Continued\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Urgent I/O condition\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O possible\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Resource lost\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Danger signal\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Information request\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Floating point co-processor not available\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#  These are printed under -p, so they are left in English.\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"default\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"environment\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"environment under -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"command line\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"`override' directive\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatic\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (from `%s', line %lu):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %u variables in %u hash buckets.\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variables\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Pattern-specific variable values\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"`%.*s' -  :\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"%d   sys$search\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"  :\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"command_state `%s' :  \"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \". -   CTRL-Y :\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \".DCL- CTRL-Y-      :\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"  '%s' \\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"  :\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"%s-  \\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"%s-  \\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"%s-  \\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"%s   \\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"%d :-  \\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# No `vpath' search paths.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"'\\\"'   , \\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \".  - %u ;SIGCHLD \\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIRECTORY\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"   DIRECTORY-  \"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"FLAGS\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"     \"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"makefile-    \"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FILE\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"makefile- FILE \"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"DIRECTORY-  makefile  \"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"N-        \"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"   ;   \"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"    ,    FILE- \"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"   \"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"-k \"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"    FILE  \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \".  sh.exe  --jobs  -j-   \"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \".   \"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Entering\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Leaving\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"   `%sinclude' \"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"      `%s' \"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# No variables.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/hr.po",
    "content": "# Translation of GNU make.\n# Copyright (C) 2002 Free Software Foundation, Inc.\n# Hrvoje Niksic <hniksic@xemacs.org>, 2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2003-10-12 18:01+0200\\n\"\n\"Last-Translator: Hrvoje Niksic <hniksic@xemacs.org>\\n\"\n\"Language-Team: Croatian <lokalizacija@linux.hr>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=iso-8859-2\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"pokuaj koritenja nepodrane mogunosti: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"touch dijela arhive nije rapoloiv na VMS-u\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Arhiva `%s' ne postoji\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' nije valjana arhiva\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: lan `%s' ne postoji u `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Neispravan povratni kod iz ar_member_touch na `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module nije izdvojio informacije o modulu, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control nije uspio sa statusom = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"ne mogu otvoriti biblioteku `%s' da naem lan `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"lan `%s'%s: %ld bajtova na %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (ime je moda odrezano)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Datum %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Prekid.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] lan arhive '%s' mogao bi biti bezvezan; nije obrisan\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** lan arhive '%s' mogao bi biti bezvezan; nije obrisan\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Briem spis `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Briem spis `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  naredbe za izvravanje\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (ugraeno):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (iz `%s', redak %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Direktoriji\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: ne moe se statati.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (tipka %s, mtime %d): nije ga se moglo otvoriti.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): nije ga se moglo otvoriti.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (device %ld, inode %ld): nije ga se moglo otvoriti.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (tipka %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (device %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Nijedan\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" spis, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"nijedna\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" nemogunost\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" do sad.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" nemogunosti u %lu direktorija.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Rekurzivna varijabla `%s' pokazuje (na kraju) na sebe\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"nedovrena referenca na varijablu\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Naredbe su naznaene za spis `%s' na %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Naredbe za spis `%s' naene su implicitnim pretraivanjem propisa,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"ali `%s' se sada smatra istim spisom kao i `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Naredbe za `%s' ignorirat e se u korist onih za `%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"ne mogu preimenovati `%s' s jednom dvotokom u `%s' s dvije dvotoke\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"ne mogu preimenovati `%s' s dvije dvotoke u `%s' s jednom dvotokom\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Briem posredni spis `%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Briem posredne spise...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Vremenska oznaka van granica; zamjenjujem s %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Trenutno vrijeme\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Nije meta:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Vrijedan spis (prerekvizit mete .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Lana meta (prerekvizit mete .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Meta na komandnoj liniji.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Podrazumijevani ili MAKEFILES makefile.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#   Implicitna pretraga propisa je izvrena.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Implicitna pretraga propisa nije izvrena.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Korijen implicitnog/statikog uzorka: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Spis je posredni prerekvizit.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Takoer proizvodi:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Vrijeme promjene nikada nije provjereno.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Spis ne postoji.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Spis je vrlo star.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Zadnja promjena %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Spis je auriran.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Spis nije auriran.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Naredbe koje se trenutno izvravaju (OVO JE BUG).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Ovisnosti izmeu naredbi koje se izvravaju (OVO JE BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Uspjeno auriran.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Treba ga aurirati (-q je postavljen).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Nije ga se auriralo.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Neispravna vrijednost u elementu `update_status'!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Neispravna vrijednost u elementu `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Spisi\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# statistike hash tablice spisa\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"prvi argument funkcije `word' nije broj\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"prvi argument funkcije `word' mora biti vei od 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"drugi argument funkcije `wordllist' nije broj\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"drugi arument funkcije `wordlist' nije broj\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) je zakazao (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) je zakazao (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() je zakazao (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() je zakazao\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"istim privremeni batch spis %s.\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Nedovoljan broj argumenata (%d) funkciji `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Neimplementirano na ovoj platformi: funkcija `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"nedovren poziv funkciji `%s': nedostaje `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: opcija `%s' je vieznana\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: uz opciju `--%s' ne ide argument\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: opcija `%c%s' ne doputa argument\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: opcija `%s' zahtijeva argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: nepoznata opcija `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: nepoznata opcija `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: nedoputena opcija -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: neispravna opcija -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: opcija trai argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: opcija `-W %s' je vieznana\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: opcija `-W %s' ne doputa argument\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"ne mogu alocirati %ld bajtova za hash tablicu; memorija iscrpljena\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Optereenje=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Preraspodjela=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Kolizije=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Traim implicitni propis za `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Traim implicitni propis za `%s' koji pripada elementu arhive.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Izbjegavam rekurziju implicitnog propisa.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Pokuavam propis uzorka s korijenom `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Odbacujem nemogu prerekvizit `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Odbacujem nemogue pravilo prerekvizita `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Pokuavam s implicitnim prerekvizitom `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Pokuavam s propisom prerekvizita `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Naao prerekvizit `%s' kao VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Traim propis s posrednim spisom `%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite(privremeni spis)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Greka 0x%x (ignorirana)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Greka 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Greka %d (ignorirana)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Greka %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (izbaen core)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** ekam na nedovrene poslove....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"ivo dijete 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (udaljen)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"anjem promaeno dijete 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"anjem uspjeno dijete 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"istim privremeni batch spis %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Uklanjam dijete 0x%08lx PID %ld%s iz lanca.\\n\"\n\n# to bi ovdje trebalo ii?\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"write jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Otpustio token za dijete 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() nije uspio pokrenuti proces (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Prebrojao %d argumenata u neuspjelom pokretanju\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Smjetam dijete 0x%08lx (%s) PID %ld%s u lanac.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Preuzeo token za dijete 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"read jobs pipe\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\"ne mogu silom primijeniti ogranienje loada na ovom operativnom sustavu\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"ne mogu silom primijeniti ogranienje loada: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() nije uspio pokrenuti proces (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make je ponjeo dijete pid %d, jo uvijek eka na pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Naredba nije naena\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Ljuskin program nije naen\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL se promijenio (prije `%s', sad `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Stvaram privremeni batch spis %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (redak %d) Lo kontekst ljuske (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opcije:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Ignorira se zbog kompatibilnosti\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Bezuvjetno proizvedi sve mete.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Prijei u DIREKTORIJ prije no to ita \"\n\"obavi.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -d                          Ispii puno podataka za debugiranje.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=FLAGOVI]             Ispii razne vrste informacija za \"\n\"debugiranje.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Varijable iz okoline imaju veu vanost od\\n\"\n\"                              makefileova.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f SPIS, --file=SPIS, --makefile=SPIS\\n\"\n\"                              Proitaj SPIS kao makefile.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Ispii ovu poruku i izai.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Zanemari greke od naredbi.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I DIREKTORIJ, --include-dir=DIREKTORIJ\\n\"\n\"                              Potrai u DIREKTORIJU ukljuene makefileove.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Dopusti N istovremenih poslova; bez argumenta\\n\"\n\"                              ih dopusti beskonano.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Nastavi s radom ako se neke mete ne mogu \"\n\"izraditi.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Ne pokrei viestruke poslove, osim ako pri\\n\"\n\"                              optereenju ispod N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Nemoj zapravo pokrenuti nijednu naredbu;\\n\"\n\"                              samo ih ispii.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o SPIS, --old-file=SPIS, --assume-old=SPIS\\n\"\n\"                              Smatraj da je SPIS vrlo star i nemoj ga\\n\"\n\"                              ponovo napraviti.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       Ispii makeovu internu bazu.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Ne pokrei naredbe; izlazni status oznaava\\n\"\n\"                              je li sve aurirano.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"  -r, --no-builtin-rules      Onemogui ugraene implicitne propise.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Onemogui ugraene vrijednosti varijabli.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Ne ispisuj naredbe.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Iskljuuje -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Dodirni mete umjesto da ih ponovo izrauje.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"  -v, --version               Ispii verziju makea i izai.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Ispii trenutni direktorij.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Iskljui -w, ak i ako je implicitno \"\n\"ukljuen.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W SPIS, --what-if=SPIS, --new-file=SPIS, --assume-new=SPIS\\n\"\n\"                              Smatraj SPIS beskonano novim.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Upozori kad se referencira nedefinirana \"\n\"varijabla.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"prazan string nije valjan naziv spisa\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"nepoznata naznaka nivoa debuga `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Prekid/Iznimka uhvaena (code = 0x%x, addr = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Filter neobraene iznimke pozvan iz programa %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Pristupni prekraj: operacija pisanja na adresi %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Pristupni prekraj: operacija itanja na adresi %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell postavljam default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell pretraga staze postavljam default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s se zaustavlja na 30 sekundi...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"gotov sa sleep(30).  Nastavljam.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile sa standardnog ulaza naveden dvaput.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (privremeni spis)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite(privremeni spis)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Paralelni poslovi (-j) nisu podrani na ovoj platformi.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Resetiram na mod jednog posla (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"interna greja: viestruko pojavljivanje opcije --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"interna greka: neispravan --jobserver-fds string `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"upozorenje: -jN se forsira u pod-makeu: onemoguujem jobserver mod.\"\n\n# Treba li ovo prevesti?\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"upozorenje: jobserver nedostupan: koristim -j1.  Dodaj `+' na roditeljev \"\n\"make propis.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"kreiram pipe za posao\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"prevesti?\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Auriram makefileove....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefile `%s' bi mogao upasti u petlju; ne izgraujem ga ponovo.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Nisam uspio ponovo izgraditi makefile `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Ukljueni makefile `%s' ne moe se nai.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefile `%s' ne moe se nai\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Nisam se mogao vratiti u prvotni direktorij.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Ponovo izvravam:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (privremeni spis): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Nijedna meta nije navedena, niti je ijedan makefile pronaen\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Nema meta\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Auriram ciljne mete....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"upozorenje: uoena je nepravilnost sata.  Izgradnja bi mogla biti nedovrena.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Uporaba: %s [opcije] [meta] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Program sastavljen za %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Program sastavljen za %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Uoene greke prijavite na adresu <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"opcija `-%c' trai pozitivan cjelobrojni argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"opcija `-%c' trai pozitivan cjelobrojni argument\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sOvaj program je slobodan; u izvornom kodu nalaze se uvjeti kopiranja.\\n\"\n\"%sNema NIKAKVOG jamstva, ak ni za PROIZVODNOST ili UPOTREBLJIVOST ZA\\n\"\n\"%sPOJEDINU SVRHU.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Program sastavljen za %s\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Program sastavljen za %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Makeova baza, ispisana na %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Kraj Makeove baze na %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Ulazim u nepoznat direktorij\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Izlazim iz nepoznatog direktorija\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Ulazim u direktorij `%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Izlazim iz direktorija `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Ulazim u nepoznat direktorij\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Izlazim iz nepoznatog direktorija\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Ulazim u direktorij `%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Izlazim iz direktorija `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Zaustavi.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Nepoznata greka %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"prividna memorija potroena\"\n\n# Da prevedem ovo?\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Inicijaliziran pristup\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Korisniki pristup\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Makeov pristup\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Pristup djeteta\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Preusmjerio greke u %s\\n\"\n\n# to bi ovdje trebalo ii?\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"write jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"itam makefileove...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"itam makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (nema podrazumijevanog cilja)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (staza za pretraivanje)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (nije vano)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (bez ekspanzije ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"neispravna sintaksa uvjeta\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"suvian `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"prazno ime varijable\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"prazna direktiva `ovverride'\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"neispravna direktiva `override'\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"naredbe poinju prije prve mete\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"nedostaje propis prije naredbi\"\n\n# Grr, ivjela engleska mnoina!  I to sad da radim s onim %s-om?\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"nedostaju separatori-%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (jeste li mislili na TAB umjesto 8 razmaka?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"nedostaje uzorak mete\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"viestruki uzorci meta\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"uzorak mete ne sadri `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"nedostaje `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Suvian tekst nakon direktive `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"nedostaje `endef', nedovren `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Suvian tekst nakon direktive `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"suvian `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"samo jedan `else' po uvjetu\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Izobliena definicija o meti ovisne varijable\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"pomijeani implicitni i statiki propisi uzorka\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"pomijeani implicitni i normalni propisi\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"meta `%s' ne odgovara uzorku mete\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"spis meta `%s' ima unose i kod : i kod ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"meta `%s' zadan vie nego jednom u istom propisu.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"upozorenje: ponitavam postojee naredbe za metu `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"upozorenje: ignoriram stare naredbe za metu `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"upozorenje: NUL znak uoen; ostatak retka se zanemaruje\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Nita za napraviti za `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' je auriran.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"istim spis `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sNema propisa za izradu mete `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sNema propisa za izradu mete `%s', kojeg trai `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Uzimam u razmatranje spis metu `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Nedavno bezuspjeno pokuao aurirati spis `%s'\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Spis `%s' ve je bio uzet u razmatranje.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Jo uvijek auriram spis `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Zavrio s auriranjem spisa `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Spis `%s' ne postoji.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Upozorenje: .LOW_RESOLUTION_TIME spis `%s' ima vremensku oznaku visoke \"\n\"rezolucije\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Naao implicitni propis za `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Nijedan implicitni propis nisam naao za `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Koristim podrazumijevane naredbe za `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Kruna ovisnost %s <- %s isputena.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Zavreni prerekviziti spisa mete `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Prerekviziti `%s' su u izradi.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Odustajem od spisa mete `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Meta `%s' nije ponovo izraen zbog greaka.\"\n\n# Nisam siguran da sam ovo ispravno shvatio.\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Prerekvizit `%s' slui samo za redosljed pri meti `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Prerekvizit `%s' mete `%s' ne postoji.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Prerekvizit `%s' noviji je od mete `%s':\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Prerekvizit `%s' stariji je od mete `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Meta `%s' je dvotoka, a nema prerekvizita.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Nema naredbi za `%s', a nijedan prerekvizit nije promijenjen.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Proizvodim `%s' zbog opcije always-make.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Nema potrebe ponovo izraditi metu `%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; koristim VPATH imena `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Moram ponovo izgraditi metu `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ignoriram VPATH imena `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Naredbe od `%s' se izvravaju.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Nije uspjela ponovna izrada spisa mete `%s'.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Uspjeno ponovno izradio spis metu `%s'.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Spis meta `%s' treba ponovnu izradu zbog -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Upozorenje: Spis `%s' ima vrijeme promjene u budunosti\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Upozorenje: Spis `%s' ima vrijeme promjene %.2g s u budunosti\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"Element .LIBPATTERNS `%s' nije uzorak\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs nee eksportirati: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Implicitni Propisi\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nema implicitnih propisa.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u implicitnih propisa, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" zavrni.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG: pogrean num_pattern_rules!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"nepoznat signal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Izgubljena veza\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Prekid\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Prestanak\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Nedoputena instrukcija\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Zamka za slijed/prekidnu toku\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Otkazan\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT zamka\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT zamja\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Iznimka floating pointa\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Ubijen\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Sabirnika greka\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Segmentacijska greka\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Nevaljan sistemski poziv\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Prekinut kanal\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Budilica\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Terminiran\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Korisniki definiran signal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Korisniki definiran signal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Dijete izalo\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Nestalo struje\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Zaustavljen\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Zaustavljen (unosom s TTY-ja)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Zaustavljen (outputom s TTY-ja)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Zaustavljen (signalom)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"prekoraeno ogranienje CPU vremena\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Prekoraeno ogranienje veliine spisa\"\n\n# Kako prevesti \"virtual timer\"?\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtualna toperica istekla\"\n\n# Kako prevesti \"profiling timer\"?\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profajlerska toperica istekla\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Promijenjen prozor\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Nastavljen\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Hitno stanje I/O-a\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mogu\"\n\n# Jesu li ova dva signala vic ili to?  U svakom sluaju, ovo su samo\n# descriptioni.  Za svaki sluaj, nisam ih dirao.\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Izgubljen resurs\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Signal za opasnost\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Zahtjev za informacijom\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Aritmetiki koprocesor nije dostupan.\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"podrazumijevano\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"okoli\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"okoli pod -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"komandna linija\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"direktiva `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatsko\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (iz `%s', redak %lu):\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# hash table statistike varijabli:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Varijable\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Uzorcima svojstvene vrijednosti varijabli\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nema uzorcima svojstvenih vrijednosti varijabli.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u uzorcima svojstvenih vrijednosti varijabli\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"upozorenje: nedefinirana varijabla `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search je zatajila s %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Upozorenje: Prazno preusmjeravanje\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"unutranja greka: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-upozorenje, CTRL-Y e ostaviti potproces(e) na ivotu.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-upozorenje, moda ete morati ponovo omoguiti obradu CTRL-Y iz DCL-a.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"UGRAEN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"UGRAEN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"UGRAEN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Nepoznata ugraena naredba `%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Greka, prazna naredba\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Preusmjerio ulaz iz %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Preusmjerio greke u %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Preusmjerio izlaz u %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Umjesto toga, izvravam %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Greka pri pokretanju, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH staze za pretraivanje\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Nema `vpath' staza za pretraivanje.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u `vpath' staza za pretraivanje.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Nema ope (iz varijable `VPATH') staze za pretraivanje.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Opa (iz varijable `VPATH') staza za pretraivanje:\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Greka u sintaksi, jo uvijek unutar '\\\"'\\n\"\n\n# Nepoetene ili neponjete?\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Dobio SIGCHLD; %u nepoetene djece.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Nemojte koristiti -j ili --jobs ako sh.exe nije dostupan.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Resetiram make u mod jednog posla.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"nedostaje naziv spisa za `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"meta `%s' ostavlja prerekvizitni uzorak praznim\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Nijedan spis.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u spisa u %u rasprenih depova.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# prosjeno %.3f spisa po depu, maks. %u spisa u jednom depu.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIREKTORIJ\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Promijeni u DIREKTORIJ prije nego to ita napravi\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"ZASTAVICE\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Zaustavi proces tako da se debugger moe zakaiti\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Varijable iz okolia imaju veu vanost od makefilea\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"SPIS\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Proitaj SPIS kao makefile\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Pretrai DIREKTORIJ za ukljuenim makefileovima\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Ne pokrei viestruke poslove osim ako je optereenje ispod N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"Nemoj zapravo pokrenuti nijednu naredbu; samo ih ispii\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Pretpostavi da je SPIS vrlo star i nemoj ga ponovo napraviti\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Ne ispisuj naredbe\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Iskljuuje -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Smatraj SPIS beskonano novim\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Ulazim u\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Izlazim iz\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Nema varijabli.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# prosjeno %.1f varijabli po depu, maks. %u u jednom depu.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# prosjeno %d.%d varijabli po depu, maks. %u u jednom depu.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/id.po",
    "content": "# Pesan Bahasa Indonesia untuk GNU make\n# Copyright (C) 2005 Free Software Foundation, Inc.\n# This file is distributed under the same license as the GNU make package.\n# Arif E. Nugroho <arif_endro@yahoo.com>, 2005.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: GNU make 3.79\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-07-17 22:00+0700\\n\"\n\"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\\n\"\n\"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"usaha untuk menggunakan feature yang tidak disupport: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"tidak dapat memodifikasi tanggal pada anggota archive pada VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Archive `%s' tidak ada\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' bukan archive yang valid\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Anggota `%s' tidak terdapat dalam `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Kode balik tidak baik dari ar_member_touch pada `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module gagal untuk mengekstrak info module, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control gagal dengan status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"tidak dapat membuka library `%s' untuk melihat anggota `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Anggota `%s'%s: %ld bytes pada %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (nama mungkin akan di potong)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \" Tanggal %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \" uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Berhenti.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Anggota archive `%s' mungkin berupa bogus: tidak dihapus\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Anggota archive `%s' mungkin berupa bogus; tidak dihapus\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Menghapus file `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Menghapus file `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"# perintah dijalankan\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (built-in):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (dari `%s', baris %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Direktori\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: tidak dapat melihat statistik.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (key %s, mtime %d): tidak dapat dibuka.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): tidak dapat dibuka.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (device %ld, inode %ld): tidak dapat dibuka.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (key %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (device %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Tidak\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" files, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"tidak\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" tidak mungkin\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" sejauh ini.\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" tidak mungkin dalam direktori %u.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Variabel rekursif `%s' menunjuk pada dirinya sendiri\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"referensi variabel tidak diselesaikan\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Perintah di spesifikasikan untuk file `%s' pada %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Perintah untuk file `%s' ditemukan dalam pencarian aturan implisit,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"\"\n\"tetapi `%s' sekarang dipertimbangkan sebagai file yang sama dengan `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Perintah untuk `%s' akan diabaikan untuk menghargai `%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"tidak dapat mengubah nama dari satu-colon `%s' ke double-colon `%s'\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"tidak dapat mengubah nama dua-colon `%s' menjadi satu-colon `%s'\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Menghapus file intermediate `%s'\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** Menghapus file intermediate `%s'\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Bukan sebuah target:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  File sebelumnya (dibutuhkan oleh .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Phony target (dibutuhkan oleh .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Command-line target.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"# merupakan sebuah default atau MAKEFILES makefile.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Pencarian aturan implisit sudah selesai.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Pencarian aturan implisit belum selesai.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Pola implisit atau statis stem: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  File merupakan persyaratan perantara (intermediate).\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Juga membuat:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Waktu ubah sudah di check.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  File tidak ada.\"\n\n#: file.c:929\n#, fuzzy\nmsgid \"#  File is very old.\"\nmsgstr \"#  File sudah diupdate.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Terakhir dimodifikasi pada %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  File sudah diupdate.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  File belum di-update.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Perintah sedang berjalan (INI MERUPAKAN SEBUAH BUG).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Perintah dependensi sedang berjalan (INI MERUPAKAN SEBUAH BUG).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Sukses mengupdate.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Perlu untuk diupdate (-q diset).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Gagal untuk mengupdate.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Nilai yang salah dalam anggota `update_status' !\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Nilai yang salah dalam anggota `command_state' !\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Files\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"argumen pertama untuk fungsi `word' bukan numerik\"\n\n#: function.c:764\n#, fuzzy\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"argumen pertama untuk fungsi `word' bukan numerik\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"argumen pertama untuk fungsi `wordlist' bukan numerik\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"argumen kedua dari fungsi `wordlist' bukan numerik\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) gagal (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) gagal (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() gagal (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() gagal\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Membersihkan file batch sementara %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Argumen kurang (%d) untuk fungsi `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Tidak terimplementasi dalam platform ini: fungsi `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"fungsi `%s' tidak diselesaikan: hilang `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: opsi `%s' merupakan ambigu\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: opsi `--%s' tidak memperbolehkan argumen\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: opsi `%c%s' tidak memperbolehkan argumen\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: opsi `%s' membutuhkan sebuah argumen\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: opsi tidak dikenali `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: opsi tidak dikenali `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: opsi illegal -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: opsi tidak valid -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: opsi membutuhkan sebuah argumen -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: opsi `-W %s' merupakan opsi ambigu\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: opsi `-W %s' tidak memperbolehkan sebuah argumen\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Mencari aturan implisit untuk `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Mencari aturan implisit untuk anggota-archive pada `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Menghindari aturan implisit rekursi.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Mencoba aturan pola dengan stem `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Menolak persyaratan implisit yang tidak mungkin `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Menolak persyaratan aturan yang tidak mungkin `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Mencoba persyaratan implisit `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Mencoba persyaratan dari aturan `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Menemukan persyaratan `%s' sebagai VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Mencari aturan dengan file antara `%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (file sementara)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Error 0x%x (diabaikan)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Error 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Error %d (diabaikan)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Error %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (core di-dump)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Menunggu jobs yang belum selesai....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Proses anak yang masih berjalan 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (remote)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Reaping losing child 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Reaping winning child 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Membersihkan file batch sementara %s\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Menghilangkan proses anak 0x%08lx PID %ld%s dari rantai.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"menulis jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Melepaskan token dari proses anak 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() gagal untuk menjalankan proses (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Terhitung %d argumen gagal untuk dijalankan\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Meletakkan proses anak 0x%08lx (%s) PID %ld%s pada rantai proses.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Memperoleh token untuk proses anak 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"membaca jobs pipe\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"tidak dapat memaksa mencapai batas beban pada sistem operasi ini\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"tidak dapat memaksa mencapai batas beban: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() gagal untuk menjalankan proses (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make reaped child pid %d, tetap menunggu untuk pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Perintah tidak ada\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Shell program tidak ditemukan\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL berubah (sebelumnya `%s', sekarang `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Membuat file batch sementara %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (baris %d) shell context tidak baik (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opsi:\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"Diabaikan untuk kompatibilitas.\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"Menampilkan banyak informasi debug\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"Menampilkan berbagai tipe informasi debug.\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"Tampilkan pesan ini dan keluar\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"Abaikan kesalahan dari perintah yang dijalankan\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"Melakukan N jobs secara bersamaan. Jobs tidak terhingga jika tidak diberikan \"\n\"argumen.\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"Tetap jalan ketika target tidak dapat dibuat.\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"Tampilkan make's internal database\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"Tidak menjalankan perintah. Mengeluarkan status saja dan mengatakan up to \"\n\"date\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"Aturan implisit builtin tidak digunakan.\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"Builtin variabel seting tidak digunakan\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"Touch target dari pada membuat kembali\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"Tampilkan versi dari make dan keluar\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"Tampilkan directory saat ini\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"Matikan opsi -w, walaupun opsi ini diaktifkan secara implisit\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"Peringatkan akan adanya variabel yang tidak terdefinisi.\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"`string' kosong tidak valid sebagai nama file\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"spesifikasi level debug tidak diketahui `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Interupsi/Exception diterima (kode = 0x%x, alamat = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Exception filter tidak dapat diatasi dari program %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Akses dilanggar: operasi tulis pada alamat %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Akses dilanggar: operasi baca pada alamat %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell diset pada default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell jalur pencarian di set pada default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s dihentikan selama 30 detik...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"selesai tidur(30). Melanjutkan.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile dari standard input dispesifikasikan dua kali.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (file sementara)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (file sementara)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Parallel jobs (-j) tidak disupport dalam platform ini.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Mereset kembali ke mode satu job (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"internal error: opsi --jobserver-fds lebih dari satu\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"internal error: invalid --jobserver-fds string `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"Peringatan: -jN dipaksakan dalam submake: disabling jobserver mode.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"Peringatan: jobserver tidak ada: menggunakan -j1. Tambahkan `+' pada aturan \"\n\"make paling atas.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"membuat jobs pipe\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"inisiasi jobserver pipe\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Meng-update makefiles....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefile `%s' mungkin berupa loop; tidak membuat lagi.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Gagal membuat lagi target file `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Included makefile `%s' tidak ditemukan.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefile `%s' tidak ditemukan\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Tidak dapat kembali ke direktori asal.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Menjalankan kembali:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (file sementara): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Tidak diberikan target dan tidak ditemukan makefile\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Tidak terdapat targets\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Men-update target akhir....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"Peringatan: Clock skew terdeteksi. Pembuatan anda mungkin tidak sempurna\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Penggunaan: %s [opsi] [target] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Laporkan bugs kepada <bug-make@gnu.org>\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"opsi `-%c' membutuhkan sebuah argument `string' yang tidak kosong\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"opsi `-%c' membutuhkan sebuah argument `string' yang tidak kosong\"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\", oleh Richard Stallman dan Roland McGrath.\\n\"\n\"%sDibuat untuk %s\\n\"\n\"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%sIni adalah free software; lihat kode program untuk syarat mengkopinya.\\n\"\n\"%sTIDAK TERDAPAT GARANSI; bahkan untuk PENJUALAN atau \\n\"\n\"%sKESESUAIAN UNTUK TUJUAN TERTENTU.\\n\"\n\"\\n\"\n\"%sLaporkan bugs kepada <bug-make@gnu.org>\\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make data base, di tampilkan pada %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Selesai membuat Make data base pada %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"sebuah direktori yang tidak diketahui\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"sebuah direktori yang tidak diketahui\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"direktori `%s'\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"direktori `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"sebuah direktori yang tidak diketahui\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"sebuah direktori yang tidak diketahui\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"direktori `%s'\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"direktori `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Berhenti.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Tidak diketahui kesalahan %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"Kehabisan memori virtual\"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: pengguna %lu (nyata %lu), grup %lu (nyata %lu)\\n\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"Terinisialisasi\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Meneruskan error menuju %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"menulis jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Membaca makefiles...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Membaca makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (tidak terdapat goal default)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (jalur pencarian)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (tidak peduli)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (tidak terdapat ekspansi tilde ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"sintak salah dalam kondisional\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"kelebihan `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"nama variabel kosong\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"directive `override' kosong\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"directive `override' tidak valid\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"perintah dijalankan sebelum target pertama\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"hilang aturan sebelum menjalankan perintah\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"pemisah %s hilang\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (apakah yang anda maksud TAB dari pada 8 buah spasi?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"pola target hilang\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"pola target banyak\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"pola target tidak memiliki `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"hilang `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Kelebihan text sesudah `endef' directive\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"hilang syntak `endef', tidak diselesaikan `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Kelebihan text sesudah `%s' directive\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"kelebihan `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"hanya satu `else' dalam setiap kondisi\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Definisi variable target-specific memiliki format salah\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"aturan pola implisit dan static tercampur\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"aturan implisit dan aturan normal tercampur\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"target `%s' tidak cocok dengan pola target\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"target file `%s' keduanya memiliki : dan :: entries\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"target `%s' diberikan lebih dari sekali dalam satu aturan.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"Peringatan: overriding perintah untuk target `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"Peringatan: menghiraukan perintah lama untuk target `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"Peringatan: karakter NUL terlihat; baris selanjutnya dihiraukan\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Tidak ada yang harus dilakukan untuk membuat `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' sudah up to date.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Pruning file `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sTidak terdapat aturan untuk membuat target `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sTidak terdapat aturan untuk membuat target `%s', dibutuhkan oleh `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Mempertimbangkan target file `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Baru saja dicoba dan gagal untuk meng-update file `%s'.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"File `%s' baru saja dipertimbangkan.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Sedang meng-update file `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Selesai meng-update file `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"File `%s' tidak ada.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Ditemukan sebuah aturan implisit untuk `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Tidak terdapat aturan implisit untuk membuat `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Menggunakan perintah default untuk `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Circular %s <- %s ketergantungan dijatuhkan.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Selesai melakukan semua persyaratan dari target file `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Persyaratan untuk membuat `%s' sedang dibuat.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Menyerah untuk membuat target file `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Target `%s' tidak dibuat lagi karena ada kesalahan (errors).\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Persyaratan untuk `%s' lebih tua dari pada target `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Persyaratan untuk `%s' untuk target `%s' tidak ada.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Persyaratan untuk `%s' lebih baru dari pada target `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Persyaratan untuk `%s' lebih tua dari pada target `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Target `%s' merupakan double-colon dan tidak memiliki syarat.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Tidak ada perintah untuk `%s' dan persyaratan tidak berubah.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Tidak perlu membuat lagi target `%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; menggunakan nama VPATH `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Harus membuat lagi target `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \" Mengabaikan nama VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Perintah dari `%s' sedang dijalankan.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Gagal membuat lagi target file `%s'.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Sukses membuat kembali target file `%s'.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Target file `%s' dibutuhkan untuk membuat kembali dengan opsi -q.\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"\"\n\"*** Peringatan: File `%s' memiliki waktu modifikasi lebih baru (%s > %s)\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\"*** Peringatan: File `%s' memiliki waktu modifikasi lebih baru (%s > %s)\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS elemen `%s' bukan merupakan sebuah pattern\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Custom tidak akan men-export: %s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Tidak ada aturan implisit.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Tidak ada aturan implisit.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u aturan implisit, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"BUG: num_pattern_rules salah! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"sinyal tidak diketahui\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Hangup\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interupsi\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Berhenti\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Instruksi Ilegal\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Trace/breakpoint trap\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Dibatalkan\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT trap\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT trap\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Floating point exception\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Dimatikan\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Bus error\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Kesalahan segmentasi memory\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"system call jelek\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"`pipe' rusak\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Jam alarm\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Dimatikan\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Sinyal definisi pengguna 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Sinyal definisi pengguna 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Proses anak berakhir\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Listrik mati\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Dihentikkan\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Dihentikan (masukkan tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Dihentikan (keluaran tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Dihentikan oleh sinyal\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Batas waktu CPU telah terlampaui\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Batas maksimal ukuran file sudah dilampaui\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtual timer sudah lewat\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profiling timer sudah lewat\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Window berubah\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Dilanjutkan\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Kondisi I/O penting\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mungkin\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Resource hilang\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Sinyal bahaya\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Permintaan informasi\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Floating point co-processor tidak ada\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"default\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"environment\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"envirenment dibawah opsi -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"command line\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"`override' directive\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"otomatis\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (dari `%s', baris %lu):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %u variabel dalam %u hash buckets.\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variabel\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Nilai Variabel Pattern-specific\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Tidak terdapat nilai variabel pattern-specific\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u Nilai Variabel Pattern-specific\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"peringatan: variabel `%.*s' tidak terdefinisi\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search gagal dengan kode %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Peringatan: redirection kosong\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"kesalahan internal: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-warning, CTRL-Y akan meninggalkan sub-process(es).\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-warning, kamu mungkin telah mengaktifkan pengontrolan CTRL-Y dari DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Perintah builtin '%s' tidak diketahui\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Error, tidak ada perintah\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Meneruskan input dari %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Meneruskan error menuju %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Meneruskan output menuju %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Menjalankan perintah %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Gagal spawning, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH Jalur Pencarian\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Tidak ada `vpath' dalam jalur pencarian.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u `vpath' jalur pencarian.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Tidak ada (`VPATH' variabel) yang umum dalam jalur pencarian.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Jalur pencarian yang umum untuk variabel `VPATH':\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Tidak terdapat files.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u files dalam %u hash buckets.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# rata - rata %.3f files per bucket, maksimal %u files dalam satu \"\n#~ \"bucket.\\n\"\n\n#~ msgid \"the `word' function takes a positive index argument\"\n#~ msgstr \"fungsi `word' mengambil sebuah argumen index yang positif\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Sintak error, masih didalam '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Mendapat sinyal SIGCHLD; %u unreaped childern.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIREKTORI\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Pindah ke DIRECTORY sebelum melakukan sesuatu.\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"FLAGS\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Proses dihentikan untuk memberikan kesempatan debugger\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Variabel environment digunakan dalam makefiles\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FILE\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Baca FILE sebagai sebuah makefile\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Cari DIREKTORI untuk makefiles yang dibutuhkan\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Tidak melakukan banyak jobs jika beban lebih dari N.\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"\"\n#~ \"Jangan menjalankan perintah apapun. Hanya tampilkan saja apa yang akan \"\n#~ \"dilakukan\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"\"\n#~ \"Anggap FILE sudah sangat tua dan jangan dibuat kembali file tersebut\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Jangan menampilkan perintah yang dijalankan\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Matikan opsi -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Pertimbangkan FILE sebagai file yang baru.\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Jangan menspesifikasi -j atau --jobs jika sh.exe tidak ada.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Mereset kembali make pada mode job tunggal.\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Memasuki\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Meninggalkan\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"tidak terdapat nama file untuk `%s include'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"target `%s' meninggalkan persyaratan pola kosong\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Tidak ada variabel.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# rata - rata dari %.1f variabel per bucket, maksimal %u dalam satu \"\n#~ \"bucket.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# rata - rata dari %d.%d variabel per bucket, maksimal %u dalam satu \"\n#~ \"bucket.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/insert-header.sin",
    "content": "# Sed script that inserts the file called HEADER before the header entry.\n#\n# At each occurrence of a line starting with \"msgid \", we execute the following\n# commands. At the first occurrence, insert the file. At the following\n# occurrences, do nothing. The distinction between the first and the following\n# occurrences is achieved by looking at the hold space.\n/^msgid /{\nx\n# Test if the hold space is empty.\ns/m/m/\nta\n# Yes it was empty. First occurrence. Read the file.\nr HEADER\n# Output the file's contents by reading the next line. But don't lose the\n# current line while doing this.\ng\nN\nbb\n:a\n# The hold space was nonempty. Following occurrences. Do nothing.\nx\n:b\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/ja.po",
    "content": "# Japanese message for make 3.80\n# Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.\n# GOTO Masanori <gotom@debian.or.jp>, 2003-2004.\n# Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 2001.\n#             Thanks to NISHIJIMA Takanori\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2004-05-18 00:47+0900\\n\"\n\"Last-Translator: GOTO Masanori <gotom@debian.or.jp>\\n\"\n\"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=EUC-JP\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"ݡȤƤʤǽȤȤƤޤ: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"VMS ǤϽˤΥФ touch 뵡ǽޤ\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch:  `%s' ޤ\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' ʽˤǤϤޤ\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch:  `%s'  `%s' ˤޤ\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: `%s' ؤ ar_member_touch ۾֤ͤޤ\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module ⥸塼Ф˼Ԥޤ.  = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control Ԥޤ.  = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"饤֥ `%s' 򳫤,  `%s' θǤޤ\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \" `%s'%s: %ld Х at %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (̾ڤͤ줿)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"   %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** .\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] ˥ `%s' ¿ʬʪǤ  ޤǤ\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** ˥ `%s' ¿ʬʪǤ  ޤǤ\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] ե `%s' ޤ\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** ե `%s' ޤ\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  ¹Ԥ륳ޥ\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (ӥȥ):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (`%s', %lu ܤ):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# ǥ쥯ȥ\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: ֤Ĵ٤ޤǤ.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (key %s, mtime %d): ޤǤ.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): ޤǤ.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (device %ld, inode %ld): ޤǤ.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (key %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (device %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (device %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"0\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" ĤΥե, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"0\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" ĤŬǽե̾\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" (ޤǤ).\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" ĤŬǽե̾ (%lu ĤΥǥ쥯ȥ).\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"ƵŪѿ `%s' (ǽŪ)켫Ȥ򻲾ȤƤޤ\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"üΤʤѿ\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"ե `%s' ؤΥޥɤ %s:%lu ǻꤵޤ.\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"ե `%s' ؤΥޥɤϰۥ롼õǸĤޤ,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \" `%s'  `%s' Ʊեȸʤޤ.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"`%s' ؤΥޥɤ, `%s' ֤ȤǺ̵뤵ޤ.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"󥰥륳 `%s' ֥륳 `%s' ̾Ѥޤ\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"֥륳 `%s' 饷󥰥륳 `%s' ̾Ѥޤ\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** ֥ե `%s' ޤ\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"֥եƤޤ...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: ॹפϰϳǤ --  %s Ȥޤ\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"߻\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# åȤǤϤޤ:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  ̰Υե (.PRECIOUS ɬ׾)\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  å (.PHONY ɬ׾)\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  ޥɥ饤󥿡å.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  ǥեȤޤ MAKEFILES ᥤե.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  ۥ롼õԤޤ.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  ۥ롼õϹԤޤǤ.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  /Ūѥ촴: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  եɬ׾Ǥ.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#   make:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  郎å뤳ȤϤޤ.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  ե뤬¸ߤޤ.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  ե뤬˸ŤǤ.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  ǽ %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  եϹƤޤ.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  եϹƤޤ.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  ޥɤ߼¹Ǥ (*ϥХǤ*).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  ¸طޥɤ¹Ǥ (*ϥХǤ*).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  ޤ.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  ɬפǤ (-q åȤƤޤ).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  ˼Ԥޤ.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  `update_status' Ф̵!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  `command_state' Ф̵!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# ե\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# եϥåơ֥ξ:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"ͤ `word' ؿͿޤ\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"`word' ؿؤ 0 礭ʤФʤޤ\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"ͤ `wordlist' ؿͿޤ\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"ͤ `wordlist' ؿͿޤ\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In)  (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err)  (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe()  (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() \\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"ŪʥХåե %s õޤ\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"ο(%d)ؿ `%s' ˤȤäԽʬǤ\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"ΥץåȥեǤϼƤޤ: ؿ `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"üʤؿƤӽФ `%s': `%c' ޤ\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: ץ `%s' ۣǤ\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: ץ `--%s' ϰޤ\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: ץ `%c%s' ϰޤ\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: ץ `%s' ˤϰɬפǤ\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: ǧǤʤץ `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: ǧǤʤץ `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: ʥץ  %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: ̵ʥץ  %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: ץˤϰɬפǤ  %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: ץ `-W %s' ۣǤ\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: ץ `-W %s' ϰޤ\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\"ϥåơ֥ %ld ХȤγƤ˼Ԥޤ: Ȥ̤ޤ\"\n\"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Load=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Collisions=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"`%s' Τΰۥ롼õޤ.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"`%s' Τν˥аۥ롼õޤ.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"ۥ롼κƵ򤷤ޤ.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"촴 `%.*s' ȤΥѥ롼ޤ.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Ŭǽʰۤɬ׾ `%s' Ѳޤ.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Ŭǽʥ롼ɬ׾ `%s' Ѳޤ.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"ۤɬ׾ `%s' ޤ.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"롼ɬ׾ `%s' ޤ.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"VPATH `%2$s' Ȥɬ׾ `%1$s' 򸫤Ĥޤ\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"֥ե `%s' Υ롼õޤ.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (ե)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] 顼 0x%x (̵뤵ޤ)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] 顼 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] 顼 %d (̵뤵ޤ)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] 顼 %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (פޤ)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** ̤λΥ֤ԤäƤޤ....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"¸ҥץ 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (⡼)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"äҥץ 0x%08lx PID %ld %s ޤ\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"ҥץ 0x%08lx PID %ld %s ޤ\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"ŪʥХåե %s դޤ\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"󤫤ҥץ 0x%08lx PID %ld%s ޤ.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"֥Фؤ write\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"ҥץ 0x%08lx (%s) ΰޤ.\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() ԤץưǤޤǤ (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"ưμԤ %d ĤΰȤޤ\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"˻ҥץ 0x%08lx (%s) PID %ld%s ߤޤ.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"ҥץ 0x%08lx (%s) ˰Ĥޤ.\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"֤Υѥפ read\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"Υڥ졼ƥ󥰥ƥǤϥƥ¤äޤ\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"ƥ¤βݤȤǤޤǤ: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() ԤץưǤޤǤ (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make  pid %d λҥץ, pid %d Ԥ³ޤ\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: ޥɤĤޤǤ\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: ץबĤޤǤ\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ѹޤ ( `%s',  `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"ŪʥХåե %s ޤ\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (%d ) ʥ륳ƥ (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"ץ:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      ߴΤΤΤ, ̵뤵.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           ̵åȤ make .\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              make ˥ǥ쥯ȥ DIRECTORY ذư\"\n\".\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -d                          ǥХå̤ɽ.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"  --debug[=FLAGS]             ͡ʥפΥǥХåɽ.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Ķѿ makefile εҤͥ褹\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              FILE  makefile Ȥɤ߹\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Υåɽƽλ.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         ޥɤ֤줿顼̵뤹.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\n\"                              󥯥롼ɤ makefile õ \"\n\"DIRECTORY.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          ٤ N ĤޤǤΥ֤; ̵ȥ\"\n\"¤ʤ.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            륿åȤ make ǤʤƤ¹Ԥ³\"\n\".\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                                N ̤Ǥʤ¤ʣΥ֤򳫻Ϥ\"\n\".\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              ޥɤºݤ˼¹Ԥʤ; ɽΤ.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              FILE ȤƤŤΤȸʤ,  make \"\n\".\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       make ǡ١ɽ.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              ޥɤ¹Ԥʤ; ѤǤ뤫ɤ\"\n\"λơ.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"  -r, --no-builtin-rules      ӥȥΰۥ롼̵ˤ.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"  -R, --no-builtin-variables  ӥȥѿ̵ˤ.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       ޥɽ򥨥ʤ.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              -k ץ򥪥դˤ.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 åȤ make ˥å.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               make ΥСֹɽƽλ.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       ȥǥ쥯ȥɽ.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        -w 򥪥դˤ. ۤͭʾǤ⥪դˤ\"\n\".\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              FILE 򤤤ĤǤǿȤƸʤ.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  ̤ѿȤ줿Ȥ˷ٹȯ.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"ʸϥե̾ȤƤ̵Ǥ\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"ʥǥХå٥ `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: /㳰ªޤ (code = 0x%x, addr = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"ϥɥ뤵ʤä㳰ե륿ץ %s ƤФޤ\\n\"\n\"㳰 = %x\\n\"\n\"㳰ե饰 = %x\\n\"\n\"㳰ɥ쥹 = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"ݸȿ: ɥ쥹 %x Ǥν񤭹\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"ݸȿ: ɥ쥹 %x Ǥɤ߹\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell  default_shell = %s ꤷޤ\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell ѥõ default_shell = %s ˥åȤޤ\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s  30 ôߤޤ...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) ޤ. ³ޤ.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"ɸϤ makefile ꤵޤ.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (ե)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (ե)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"󥸥 (-j) ϤΥץåȥեǥݡȤޤ.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"ñ쥸 (-j1) ⡼ɤ˥ꥻåȤޤ.\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"顼: ʣ --jobserver-fds ץ\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"顼: ̵ --jobserver-fds ʸ `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"ٹ:  make  -jN ꤷޤ: jobserver ⡼ɤ̵ˤޤ.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"ٹ: jobserver Բ: -j1 Ȥ,  make 롼 `+' ɲäޤ礦\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"֥ѥ׺\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"jobserver ѥפν\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"makefile ι....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"makefile `%s' ʺƵΤ   make ޤ.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"makefile `%s' κ make ˼Ԥޤ.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"󥯥롼ɤ makefile `%s' ĤޤǤ.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"makefile `%s' ĤޤǤ\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Υǥ쥯ȥޤǤ.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Ƽ¹Ԥޤ:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (ե): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"åȤꤵƤ餺, makefile ⸫Ĥޤ\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"åȤޤ\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"ǽåȤ򹹿....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"ٹ:  Τ򸡽. Դʥӥɷ̤ˤʤ뤫⤷ޤ.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Ȥ: %s [ץ] [å] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Υץ %s Ѥ˥ӥɤޤ\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Υץ %s (%s) Ѥ˥ӥɤޤ\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"ХݡȤ <bug-make@gnu.org> ޤ.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"`-%c' ץ׵ᤷޤ\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"`-%c' ץ׵ᤷޤ\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sϥե꡼եȥǤ. ѵˤĤƤϥ\\n\"\n\"%s.\\n\"\n\"%sŪؤŬǡ˴ؤ餺, ̵ݾڤǤ.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Υץ %s Ѥ˥ӥɤޤ\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Υץ %s (%s) Ѥ˥ӥɤޤ\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make ǡ١ %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Make ǡ١λ %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: ǥ쥯ȥ(ǥ쥯ȥ̾)ޤ\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: ǥ쥯ȥ(ǥ쥯ȥ̾)Фޤ\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: ǥ쥯ȥ `%s' ޤ\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: ǥ쥯ȥ `%s' Фޤ\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: ǥ쥯ȥ(ǥ쥯ȥ̾)ޤ\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: ǥ쥯ȥ(ǥ쥯ȥ̾)Фޤ\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: ǥ쥯ȥ `%s' ޤ\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: ǥ쥯ȥ `%s' Фޤ\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  .\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"̤ΤΥ顼 %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"ۥȤ̤ޤ\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: 桼 %lu (¸ %lu), 롼 %lu (¸ %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"¤\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"桼\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"make \"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"ҥץ\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"%s إ顼쥯Ȥޤ\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"֥Фؤ write\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"makefile ɤ߹ߤޤ...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"makefile `%s' ɤ߹\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (ǥեȤκǽåȤޤ)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (õѥ)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (ˤʤƤ褤)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (~ Ÿʤ)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"ʸˡ̵Ǥ\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"طΤʤ `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"ѿ̾\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \" `override' ̿\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"̵ `override' ̿\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"ǽΥåȤ˥ޥɤư\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"ޥɤǥ롼뤬ؼƤޤ\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"ʬΥ礤Ƥޤ%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (8 ĤζǤ, TAB ΤĤǤ?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"åȥѥ礤Ƥޤ\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"ʣΥåȥѥǤ\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"åȥѥ `%%' ޤǤޤ\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"`endif' 礤Ƥޤ\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"`endef' ̿θ̵طʸ󤬤ޤ\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"`endef' 礤Ƥ, `define' λޤ\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"`%s' ̿θ̵طʸ󤬤ޤ\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"̵ط `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"ĤξˤĤĤ `else' Ȥޤ\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"åѿ۾Ǥ\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"ۥ롼Ūѥ롼뤬ޤ\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"ۥ롼̾롼뤬ޤ\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"å `%s' ϥåȥѥȰפޤ\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"åȥե `%s'  :  :: ܤξäƤޤ\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"Ʊ롼ǥå `%s' ʣͿޤ.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"ٹ: å `%s' ؤΥޥɤ֤ޤ\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"ٹ: å `%s' ؤθŤޥɤ̵뤵ޤ\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"ٹ: NUL ʸޤ; ԤλĤ̵뤵ޤ\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"`%s' ФƹԤ٤Ϥޤ.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' ϹѤߤǤ\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"ե `%s' ޤ.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%så `%s'  make 롼뤬ޤ%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%1$s`%3$s' ɬפʥå `%2$s'  make 롼뤬ޤ%4$s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"åȥե `%s' θƤԤޤ.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Ƕƹ˼Ԥե `%s'.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"ե `%s' ϸƤѤߤǤ.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"ޤե `%s' ιǤ.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"ե `%s' ιλޤ.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"ե `%s' ¸ߤޤ.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** ٹ: .LOW_RESOLUTION_TIME ե `%s' ٥ॹפä\"\n\"ޤ\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"`%s' Τΰۥ롼򸫤Ĥޤ.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"`%s' Τΰۥ롼뤬ޤ.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"`%s' ѤΥǥեȥޥɤѤޤ.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"۴ %s <- %s ¸ط˴ޤ.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"åȥե `%s' ɬ׾ޤ.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"`%s' ɬ׾ make ޤ.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"åȥե `%s' ޤ.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"å `%s' ϥ顼ˤ make ǤޤǤ.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"ɬ׾ `%s' ϥå `%s' ˤĤƽ̤Τ߹Ԥޤ.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"å `%2$s' ɬ׾ `%1$s' ¸ߤޤ.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"ɬ׾ `%s' ϥå `%s' ⿷.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"ɬ׾ `%s' ϥå `%s' Ť.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"å `%s' ϥ֥륳, ɬ׾ʤ.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"`%s' ΤΥޥɤ̵, ļºݤѹ줿ɬ׾郎ʤ.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"akways-make ե饰äƤΤ `%s'  make ޤ.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"å `%s'  make ɬפϤޤ\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; VPATH ̾ `%s' Ѥޤ\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"å `%s' κ make ɬפǤ.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  VPATH ̾ `%s' ̵뤷ޤ.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"`%s' Υޥɤ¹Ԥޤ.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"åȥե `%s' κ make ˼Ԥޤ.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"åȥե `%s' κ make ޤ.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"åȥե `%s'  -q ץդǤκ make ɬפǤ.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"ٹ: ե `%s' ν郎̤λǤ\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"ٹ: ե `%s' ν郎 %.2g ʬ̤λǤ\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS  `%s' ѥǤϤޤ\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs ݡȤƤޤ: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# ۥ롼\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# ۥ롼ʤ.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u Ĥΰۥ롼, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" ʾ.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"Х: num_pattern_rules ְäƤ!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"̤ΤΥʥ\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"ϥ󥰥å\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"λ\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"ʥϡɥ̿\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"ȥ졼/֥쥤ݥȥȥå\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Abort ޤ\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT ȥå\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT ȥå\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"ư㳰\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Kill ޤ\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Х顼\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"ȿ\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"ʥƥॳ\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"ɤ߼Τʤѥפؤν񤭹\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"顼९å\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"λ\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"桼ʥ 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"桼ʥ 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"ҥץλ\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Ÿ㳲\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \" (tty )\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \" (tty )\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \" (ʥ)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU ֤¤ۤޤ\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"ե륵¤ۤޤ\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"ۥλ\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"ץե륿λ\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"ɥѹ\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Ƴޤ\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"۵ I/O \"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"Ʊ I/O ǽ\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"꥽ޤ\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"ʥ\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"׵\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"ưץåǽ\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"ǥե\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"Ķѿ\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile ѿ\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"-e ץǤδĶѿ\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"ޥɥ饤ѿ\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"`override' ̿\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"ưѿ\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (`%s', %lu ܤ)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# ѿåȤΥϥåơ֥ξ:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# ѿ\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# ѥѿ\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# ѥѿͤʤ.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u ĤΥѥѿ\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"ٹ: ̤ѿ `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search  %d ǼԤޤ\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"ٹ: Υ쥯\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"顼: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-ٹ, CTRL-Y ϻҥץ򻶤餫ޤޤˤǤ礦.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-ٹ, DCL  CTRL-Y Ƥͭˤɬפ뤫Τޤ.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"ӥȥ [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"ӥȥ CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"ӥȥ RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"ʥӥȥ󥳥ޥ '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"顼, Υޥ\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"%s ϥ쥯Ȥޤ\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"%s إ顼쥯Ȥޤ\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"%s ؽϥ쥯Ȥޤ\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \" %s ¹Ԥޤ\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"spawn Υ顼, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH õѥ\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# `vpath' õѥϤޤ\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u Ĥ `vpath' õѥ\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# ̤ (`VPATH' ѿ) õѥʤ.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# ̤ (`VPATH' ѿ) õѥ:\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"ʸˡ顼, '\\\"' ΤޤޤǤ\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"SIGCHLD ȯ; %u Ĥ̤ҥץ.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"sh.exe Ȥʤ֤ -j  --jobs ꤷƤϤޤ.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"ñ쥸֥⡼ɤ make ˥ꥻåȤޤ.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"`%sinclude' ˥ե̾ޤ\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"å `%s' ɬ׾ѥ󤬶ΤޤޤǤ\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# ϥåǤꡢʿ %.3f ġ %u ĤΥե뤬ޤ\\n\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"ǥХå attach 뤿ץΰߤĤ\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# ϥåǤꡢʿ %.1f ġ %u Ĥѿޤ\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# ϥåǤʿ %d.%d ġ %u Ĥѿޤ\\n\"\n\n#~ msgid \"the `word' function takes a positive index argument\"\n#~ msgstr \"`word' ؿΥǥåȤޤ\"\n\n#~ msgid \" (ignored)\"\n#~ msgstr \" (̵뤵ޤ)\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/ko.po",
    "content": "# Korean messages for GNU make.\n# Copyright (C) 1996, 2001 Free Software Foundation, Inc.\n# Bang Jun-Young <bangjy@nownuri.net>, 1996.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: GNU make 3.79.1\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2001-06-08 01:30+0900\\n\"\n\"Last-Translator: Changwoo Ryu <cwryu@debian.org>\\n\"\n\"Language-Team: Korean <ko@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=EUC-KR\\n\"\n\"Content-Transfer-Encoding: 8-bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \" ʴ  Ϸ : `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"ī̺  touch VMS   ϴ\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch:  `%s'  ʽϴ\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s'   ƴմϴ\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch:  `%s' `%s'  ʽϴ\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: `%s' Ͽ ar_member_touch   ڵ\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module  ϴ  ,  = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control  = %d()  \"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \" `%2$s' ϱ  ̺귯 `%1$s'   ϴ\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \" `%s'%s: %ldƮ, %ld (%ld) .\\n\"\n\n# ̹ ߷ ̸ ǥϸ鼭 ̸ ߷   ϶ \n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (̸ ߷  ֽϴ)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  ¥ %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d,  = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** .\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] ī̺  `%s' ¥  ֽϴ;  ʽϴ\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** ī̺  `%s' ¥  ֽϴ;  ʽϴ\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s]  `%s'() Դϴ\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"***  `%s'() ϴ\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#   ɾ\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" ():\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (`%s', %lu° ):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# 丮\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: stat   ϴ.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (Ű %s, ð %d):   ϴ.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (ġ %d, ̳ [%d,%d,%d]):   ϴ.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (ġ %ld, ̳ %ld):   ϴ.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (Ű %s, ð %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (ġ %d, ̳ [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (ġ %ld, ̳ %ld): \"\n\n# ⼭ No \"No files\" δ.  ñ msgid  \n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"0\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" , \"\n\n# ⼭ no \"no impossibilities\" δ.  ñ msgid  \n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"0\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" Ұ\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" ݱ.\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" %u 丮 Ұ.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"  `%s' ڱ ڽ ϰ ֽϴ (ᱹ)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"   \"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \" `%s' %s:%lu ɾ Ǿϴ,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \" `%s'    Ģ Ž ãҽϴ.\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \" `%s'  `%s'  Ϸ ֵ˴ϴ.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"`%s'  ɾ `%s'  ɾ 켱ϹǷ õ˴ϴ..\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \" ݷ `%s'  ݷ `%s' ̸ٲ  ϴ\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \" ݷ `%s'  ݷ `%s' ̸ٲ  ϴ\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** ߰  `%s'() Դϴ\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** ߰  `%s'() Դϴ\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Ÿӽ  ϴ; %s() üմϴ\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \" ð\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Ÿ ƴ:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  þ  (.PRECIOUS ).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#   Ÿ (.PHONY ).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#   Ÿ.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  ⺻ ũ Ȥ MAKEFILES ũ.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#   Ģ Ž ϷǾϴ.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#   Ģ Ž Ϸ ʾҽϴ.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  /  : `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#   ߰ܰ Դϴ.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#   ϴ:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#   ð  ˻ ʾ.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#    ʽϴ.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#   ſ Ǿϴ.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#    %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#   ŵǾϴ.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#   ŵ ʾҽϴ.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#     (̰ Դϴ).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#     (̰ Դϴ).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#   ŵ.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  ŵ ʿ䰡  (-q ).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  ſ .\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  `update_status'   ߸Ǿϴ!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  `command_status'   ߸Ǿϴ!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# \"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"`word' Լ ù° ڰ ڰ ƴմϴ\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"`word' Լ ù° ڴ 0 Ŀ մϴ\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"`wordlist' Լ ù° ڰ ڰ ƴմϴ\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"`wordlist' Լ ι° ڰ ڰ ƴմϴ\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In)  (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err)  (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe()  (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() \\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"ӽ ġ  %s() ϴ\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Լ `%2$s'  (%1$d) մϴ \"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \" ÷  ʾҽϴ: `%s' Լ\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Լ `%s'    ȣ: `%c' \"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: `%s' ָ ɼԴϴ\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: `--%s' ɼ μ  ʽϴ\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: `%c%s' ɼ μ  ʽϴ\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: `%s' ɼ μ ʿմϴ\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: ν   ɼ `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: ν   ɼ `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: ߸ ɼ -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s:  ɼ -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s:  ɼ μ ʿմϴ -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: `-W %s' ɼ ָ ɼԴϴ\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: `-W %s' ɼ μ  ʽϴ\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"`%s'   Ģ ã ֽϴ.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"`%s'  ī̺  Ģ ã ֽϴ.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \" Ģ ͸ .\\n\"\n\n# stem̶  꿡 prefix/suffix   Ѵ.\n#   `%.c' Ͽ `hello.c'  ¾  stem `hello'̴.\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \" `%.*s'  Ģ õ.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Ұ   `%s'() źε˴ϴ.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Ұ Ģ  `%s'() źε˴ϴ.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"  `%s'() õմϴ\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Ģ  `%s'() õմϴ.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"VPATH `%2$s'  `%1$s'() ãҽϴ\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"߰  `%s'   Ģ ã ֽϴ.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (ӽ )\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s]  0x%x (õ)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s]  0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s]  %d (õ)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s]  %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (޸ )\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"***   ۾ ٸ ֽϴ....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"ִ ڽ μ 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" ()\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \" ڽ μ 0x%08lx PID %ld %s() ŵֵԴϴ\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \" ڽ μ 0x%08lx PID %ld %s() ŵֵԴϴ\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"ӽ ġ  %s() ϴ\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"üο ڽμ 0x%08lx PID %ld %s() ϴ.\\n\"\n\n# ???  ޼\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"۾ \"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"ڽμ child 0x%08lx (%s)  ū  ݴϴ.\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() μ ϴ  ߽ϴ (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\" п %d μ\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"ڽμ 0x%08lx (%s) PID %ld%s() üο ֽϴ.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"ڽ μ 0x%08lx (%s) ū ޾ҽϴ.\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"۾  б\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"  ü     ϴ\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"    ϴ: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() μ ϴ  ߽ϴ (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\"ڽμ pid %d ŵֵ̰,  pid %d() ٸ ֽϴ\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s:  ã \"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s:  α׷ ã \"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ٲϴ ( `%s',  `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"ӽ ġ  %s() ϴ\\n\"\n\n# ???   ޼\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (%d° ) ߸  ؽƮ (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"ɼ:\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"ȣȯ  õ\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"    մϴ\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"     մϴ\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \" ޽ ϰ ϴ\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"ɿ ִ  մϴ\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"ÿ N ۾ մϴ; ڰ  Ѵ մϴ\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \" Ÿ     մϴ\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"make  Ÿ̽ մϴ\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"  ʽϴ;  Ȳ  θ  ݴϴ\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"  Ģ  Ұϰ մϴ\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"   ϰ մϴ\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"Ÿ ٽ  ʰ touch մϴ\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"make  ȣ ϰ ϴ\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \" 丮 մϴ\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"  ִ -w ϴ\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"ǵ      ϴ\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \" ڿ  ̸ մϴ\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \" ܰ  `%s'() ߸Ǿϴ\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: ͷƮ/ܰ ߰ߵǾϴ (ڤ = 0x%x, ּ = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"α׷ %s ó  ܰ ߻߽ϴ\\n\"\n\"ڵ = %x\\n\"\n\"÷ = %x\\n\"\n\"ּ = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"ٱ : ּ %x \\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"ٱ : ּ %x б\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell default_shell = %s () մϴ.\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\"find_and_set_shell  Ž default_shell = %s () մϴ.\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s() 30ʵ Ͻ ˴ϴ...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"Ϸ sleep(30). .\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"ǥԷ¿ ޾Ƶ̴ ũ   ̻ Ǿϴ.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (ӽ )\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (ӽ )\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \" ÷  ۾(-j)  ʽϴ.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \" ۾ (-j1)  ưϴ.\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \" :   -jobserver-fds ɼ\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \" : ߸ -jobserver-fds ڿ `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \": Ļ ũ -jN Ǿϴ: ۾ 带 ϴ.\"\n\n# ???   ޼\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup ۾\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\": ۾   ϴ: -j1 մϴ.  θ ũ Ģ `\"\n\"+' ߰մϴ.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"۾  \"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"۾  ʱȭ\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"ũ Ʈϰ ֽϴ....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"ũ `%s'() ݺ  ֽϴ; ٽ  ʽϴ.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"ũ `%s' ٽ µ .\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Ե ũ `%s' ã ߽ϴ.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"ũ `%s' ã ߽ϴ\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \" 丮 ư  ϴ.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \":\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (ӽ ): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Ÿ  ʾҰ ũ ϴ\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Ÿ \"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \" Ÿ մϴ....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\":  ð谡 ߸Ǿ ߰ߵǾϴ.  尡 ҿ  ֽϴ.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \": %s [ɼ] [Ÿ] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\" <bug-make@gnu.org> ˷ ֽʽÿ.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"`-%c' ɼ   μ ʿմϴ\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"`-%c' ɼ   μ ʿմϴ\"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\", Richard Stallman Roland McGrath.\\n\"\n\"%s%s  \\n\"\n\"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%s α׷ ƮԴϴ;  ҽ Ͻʽÿ.\\n\"\n\"%sǰ̳ Ư   ռ Ͽ,    \\n\"\n\"%sʽϴ.\\n\"\n\"\\n\"\n\"%s <bug-make@gnu.org> ˷ֽʽÿ.\\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# ũ Ÿ̽, %s ǥ\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# ũ Ÿ ̽ ħ, %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"   丮\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"   丮\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"`%s' 丮\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"`%s' 丮\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"   丮\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"   丮\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"`%s' 丮\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"`%s' 丮\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  .\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"    %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \" ޸𸮰 \"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s :  %lu ( %lu), ׷ %lu ( %lu)\\n\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"ʱȭ\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \" %s() ̷Ʈմϴ\\n\"\n\n# ???  ޼\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"۾ \"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"ũ а ֽϴ\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"ũ `%s' а ֽϴ\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" ( Ÿ )\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (Ž )\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" ( )\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (~ Ȯ )\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"ǹ   \"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \" `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"  ̸\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \" `override' \"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"߸ `override' \"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"ù° Ÿٺ տ ɾ ۵Ǿϴ\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \" տ Ģ \"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"иȣ %s() \"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (8       ƴϾϱ?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"Ÿ  \"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \" Ÿ \"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"Ÿ Ͽ `%%' ϴ.\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"`endif' \"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"`endef'  ڿ   \"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"`endef' .   `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"`%s'  ڿ   \"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \" `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"  ǿ   `else' ־ մϴ\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Ÿٺ    ƲȽϴ\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"    Ϸ ϴ\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"ȥյ  Ģ Ϲ Ģ\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"Ÿ `%s'() Ÿ Ͽ  ʽϴ\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"Ÿ  `%s'() : :: ׸ ÿ  ֽϴ\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"Ÿ `%s'()  Ģ   ־ϴ\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \": Ÿ `%s'  ɾ ٸ  켱մϴ\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \": Ÿ `%s'   ɾ մϴ\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \": NUL ڰ ߰ߵǾϴ;   õ˴ϴ\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"`%s'    ϴ\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' ̹ ŵǾϴ.\"\n\n# prune truncate ǹΰ ٴ ǹΰ??\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"`%s'  ߶󳻰 ֽϴ.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sŸ `%s'  Ģ %s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%1$s`%3$s' ʿ ϴ  Ÿ `%2$s'  Ģ ϴ%4$s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Ÿ  `%s'() մϴ.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"ֱٿ `%s'  Ϸ õϿ Ͽϴ.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \" `%s' ̹ Ǿϴ.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \" `%s'  ϰ ֽϴ.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"`%s'   ƽϴ.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"`%s'   ʽϴ.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"`%s'   Ģ ãҽϴ.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"`%s'   Ģ ã ߽ϴ.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"`%s'    .\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"%s <- %s ȣ  õ˴ϴ.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Ÿ  `%s'  ƽϴ.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"`%s'   ֽϴ.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Ÿ  `%s'() մϴ.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"  Ÿ `%s' ٽ  ߽ϴ.\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \" `%s'() Ÿ `%s'  ϴ.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Ÿ `%2$s'  %1$s()  ʽϴ.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \" `%s'() Ÿ `%s' ֱٿ ϴ.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \" `%s'() Ÿ `%s'  ϴ.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Ÿ `%s'()   ݷ ٿ  ϴ.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"`%s'  ɾ   ǵ  ʾҽϴ.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Ÿ `%s'() ٽ  ʿ䰡 ϴ.\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; VPATH ̸ `%s'() մϴ\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Ÿ `%s' ٽ  մϴ.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  VPATH ̸ `%s'() մϴ.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"`%s'   Դϴ.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Ÿ  `%s' ٽ   ߽ϴ.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Ÿ  `%s'  ٽ ϴ.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Ÿ  `%s'() -q Ͽ ٽ  մϴ.\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"***  `%s' ̷  ð  ֽϴ (%s > %s)\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"***  `%s' ̷  ð  ֽϴ (%s > %s)\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS  `%s'()  ƴմϴ\"\n\n# ???   ޼ --  ˱ \n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs export  Դϴ: %s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"#  Ģ .\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"#  Ģ .\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u  Ģ, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" ͹̳.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \": num_pattern_rules !  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"   ȣ\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"ͷƮ\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"߸ \"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"/ߴ Ʈ\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"ߴܵ\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT Ʈ\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT Ʈ\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"ε Ҽ \"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"׾\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \" \"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"׸̼ \"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"߸ ý ȣ\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \" \"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"ڸ ð\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"  ȣ 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"  ȣ 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"ڽ Ǿ\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \" ߴ\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \" (tty Է)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \" (tty )\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \" (ñ׳)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU ð  ʰ\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \" ũ  ʰ\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \" Ÿ̸ ð ʰ\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"ϸ Ÿ̸ ð ʰ\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"â ٲ\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"ӵ\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"  Ȳ\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \" \"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"ڿ ս\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \" ȣ\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \" û\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"εҼ  μ ϴ\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"⺻\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"ȯ\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"ũ\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"-e  ȯ\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"`override' \"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"ڵ\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (`%s', %lu° ):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %2$u ؽ Ŷ %1$u .\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# \\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"#    \"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"#     ϴ.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u    \"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \": ǵ   `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search %d ϸ ߽ϴ\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \":  ִ ̷\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \" : `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-, CTRL-Y Ļ μ ״ ܵ Դϴ.\\n\"\n\n# DCL - Digital Command Language, VMS ϴ shell language \n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-, DCL CTRL-Y ٽ 밡ϵ ؾ  Դϴ.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \" [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \" CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \" RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"    ɾ `%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \",  ɾ\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Է %s ̷Ʈմϴ\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \" %s() ̷Ʈմϴ\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \" %s ̷Ʈմϴ\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \" %s \\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \" , %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH Ž \\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# `vpath' Ž ΰ .\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u `vpath' Ž .\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ϲ (`VPATH' ) Ž ΰ .\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Ϲ (`VPATH' ) Ž :\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"#  .\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %2$u ؽ Ŷ %1$u .\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# Ŷ %.3f ,   Ŷ ִ %u .\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \" ,  '\\\"' ȿ ֽϴ\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"\"\n#~ \"SIGCHLD ñ׳ ޾ҽϴ; %u ڽμ  ʾҽϴ.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"<丮>\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \" óϱ   <丮> ̵մϴ\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"<÷>\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Ÿ   ֵ μ Ͻ ߴܽŵϴ\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"ȯ溯 ũϺ 켱մϴ\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"<>\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"<> ũϷ нϴ\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Խų ũ <丮> ãϴ\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"ϰ N     ۾  ʽϴ\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"  ɵ  ʽϴ; ׳ μ⸸ մϴ\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"FILE ſ   ϰ ٽ  ʽϴ\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"  ʽϴ\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"-k ϴ\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"  ο  մϴ\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"sh.exe    -j Ȥ -jobs  ʽϴ\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"make  ۾  մϴ\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"`%sinclude' ̸ ϴ\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"Ÿ `%s'()      ΰ ˴ϴ\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"#  .\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# Ŷ  %.1f ,   Ŷ ִ %u.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# Ŷ  %d.%d ,   Ŷ ִ %u.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/make.pot",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR Free Software Foundation, Inc.\n# This file is distributed under the same license as the PACKAGE package.\n# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n#\n#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: PACKAGE VERSION\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=CHARSET\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \"\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \"\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \"\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"\"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"\"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \"\"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \"\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"\"\n\n#: function.c:1453\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1464\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1469\n#, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"\"\n\n#: function.c:2101\n#, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"\"\n\n#: function.c:2113\n#, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \"\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \"\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1383\n#, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"\"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:2046\n#, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"\"\n\n#: main.c:670\n#, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\n#: main.c:677\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\n#: main.c:685\n#, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:686\n#, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \"\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \"\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \"\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \"\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \"\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \"\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \"\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/nl.po",
    "content": "# Translation of make-3.81-b3 to Dutch.\n# Copyright (C) 2004, 2005 Free Software Foundation, Inc.\n# This file is distributed under the same license as the make package.\n# Benno Schulenberg <benno@nietvergeten.nl>, 2005.\n# Taco Witte <tcwitte@cs.uu.nl>, 2004.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-06-29 22:55+0200\\n\"\n\"Last-Translator: Benno Schulenberg <benno@nietvergeten.nl>\\n\"\n\"Language-Team: Dutch <vertaling@vrijschrift.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"X-Generator: KBabel 1.10.1\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"poging tot gebruik van niet-ondersteunde functie: '%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"het 'touchen' van een archiefonderdeel is niet mogelijk op VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Archief '%s' bestaat niet\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: '%s' is geen geldig archief\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Onderdeel '%s' bestaat niet in '%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: ar_member_touch van '%s' is mislukt\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"uitpakken van module-info door lbr$set_module is mislukt, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control is mislukt, status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"kan bibliotheek '%s' niet openen om onderdeel '%s' op te zoeken\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Onderdeel '%s'%s: %ld bytes bij %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (naam kan afgekapt zijn)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Datum %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, modus = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Afgebroken.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Archiefonderdeel '%s' kan foutief zijn; niet verwijderd\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Archiefonderdeel '%s' kan foutief zijn; niet verwijderd\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Verwijderen van bestand '%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Verwijderen van bestand '%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  uit te voeren opdrachten\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (ingebouwd):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (van '%s', regel %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Mappen\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# kan status van %s niet opvragen.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (sleutel %s, wijzigingstijd %d): kan niet worden geopend.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (apparaat %d, inode [%d,%d,%d]): kan niet worden geopend.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (apparaat %ld, inode %ld): kan niet worden geopend.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (sleutel %s, wijzigingstijd %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (apparaat %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (apparaat %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Geen\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" bestanden, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"geen\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" onmogelijkheden\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" tot nu toe.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" onmogelijkheden in %lu mappen.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Recursieve variabele '%s' verwijst naar zichzelf (uiteindelijk)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"onafgemaakte verwijzing naar variabele\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Opdrachten waren opgegeven voor bestand '%s' bij %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Opdrachten voor bestand '%s' werden gevonden met impliciete regel-\"\n\"zoekopdracht,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"maar '%s' wordt nu als hetzelfde bestand beschouwd als '%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Opdrachten voor '%s' zullen worden genegeerd ten gunste van die voor '%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"kan enkele dubbele punt '%s' niet hernoemen tot dubbele dubbele punt '%s'\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"kan dubbele dubbele punt '%s' niet hernoemen tot enkele dubbele punt '%s'\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Verwijderen van tussentijds bestand '%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Verwijderen van tussentijdse bestanden...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Tijdsstempel ligt buiten bereik; wordt vervangen door %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Huidige tijd\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Geen doel:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Waardevol bestand (vereiste van .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Nepdoel (vereiste van .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Doel afkomstig van opdrachtregel.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Een standaard, of MAKEFILES, of -include/sinclude makefile.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Impliciete regel-zoekopdracht is uitgevoerd.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Impliciete regel-zoekopdracht is niet uitgevoerd.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Impliciete/statische patroonstam: '%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Bestand is een tussentijds vereiste.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Maakt ook:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Wijzigingstijd is nooit gecontroleerd.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Bestand bestaat niet.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Bestand is erg oud.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Laatst gewijzigd %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Bestand is bijgewerkt.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Bestand is niet bijgewerkt.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Op dit moment lopende opdrachten (DIT IS EEN PROGRAMMAFOUT).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\"#  Op dit moment lopende afhankelijkheden-opdrachten (DIT IS EEN \"\n\"PROGRAMMAFOUT).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Succesvol bijgewerkt.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Moet worden bijgewerkt (-q is ingesteld).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Bijwerken is mislukt.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Ongeldige waarde in 'update_status'-onderdeel!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Ongeldige waarde in 'command_state'-onderdeel!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Bestanden\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# hashtabel-statistieken van bestanden:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"niet-numeriek eerste argument van 'word'-functie\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"eerste argument van 'word'-functie moet groter zijn dan 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"niet-numeriek eerste argument van 'wordlist'-functie\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"niet-numeriek tweede argument van 'wordlist'-functie\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) is mislukt (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) is mislukt (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() is mislukt (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() is mislukt\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Opschonen van tijdelijk batch-bestand %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Onvoldoende aantal argumenten (%d) voor functie '%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Niet-geïmplementeerd op dit platform: functie '%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"onafgemaakte aanroep van functie '%s': '%c' ontbreekt\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: optie '%s' is niet eenduidig\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: optie '--%s' staat geen argument toe\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: optie '%c%s' staat geen argument toe\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: optie '%s' vereist een argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: onbekende optie '--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: onbekende optie '%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: ongeldige optie -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: ongeldige optie -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: optie vereist een argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: optie '-W %s' is niet eenduidig\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: optie '-W %s' staat geen argument toe\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"kan geen %ld bytes toewijzen voor hashtabel: onvoldoende geheugen\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Belasting=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Botsingen=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Zoeken naar impliciete regel voor '%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Zoeken naar archiefonderdeel-impliciete regel voor '%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Impliciete regelrecursie wordt ontweken.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Patroonregel wordt geprobeerd met stam '%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Onmogelijke impliciete vereiste '%s' wordt verworpen.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Onmogelijke regelvereiste '%s' wordt verworpen.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Proberen van impliciete vereiste '%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Proberen van regelvereiste '%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Vereiste '%s' gevonden als VPATH '%s'.\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Zoeken naar een regel met tussentijds bestand '%s'.\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"Kan geen tijdelijk bestand aanmaken\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Fout 0x%x (genegeerd)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Fout 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Fout %d (genegeerd)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Fout %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (coredump gemaakt)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Wachten op onvoltooide taken...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Levend kind 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (ginds)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Beëindigen van verliezend kind 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Beëindigen van winnend kind 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Opschonen van tijdelijk batch-bestand %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Verwijderen van kind 0x%08lx PID %ld%s uit ketting.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"schrijven naar taakserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Token losgelaten voor kind 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() kan geen proces starten (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%d argumenten geteld bij mislukte start\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Opname van kind 0x%08lx (%s) PID %ld%s in de ketting.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Token verkregen voor kind 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"lezen van taken-pijp\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"kan belastingsgrenzen niet afdwingen op dit besturingssysteem\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"kan belastingsgrens niet afdwingen: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\"geen bestandshandvatten meer beschikbaar: kan standaardinvoer niet \"\n\"dupliceren\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\"geen bestandshandvatten meer beschikbaar: kan standaarduitvoer niet \"\n\"dupliceren\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Kan standaardinvoer niet herstellen\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Kan standaarduitvoer niet herstellen\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() kan geen proces starten (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"'make' heeft kind met PID %d verwerkt, wacht nog op PID %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Opdracht niet gevonden\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Shell-programma niet gevonden\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: mogelijk geen omgevingsruimte meer beschikbaar\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL is gewijzigd (was '%s', is nu '%s')\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Maken van tijdelijk batch-bestand %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (regel %d) Onjuiste shell-context (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opties:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Genegeerd voor compatibiliteit.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"  -B, --always-make           Onvoorwaardelijk alle doelen maken.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"  -C MAP, --directory=MAP     Naar MAP gaan alvorens iets te doen.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d                          Veel informatie weergeven voor het debuggen.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=VLAGGEN]           Verschillende soorten debuginformatie \"\n\"weergeven.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides Omgevingsvariabelen gaan boven makefiles.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f BESTAND, --file=BESTAND, --makefile=BESTAND\\n\"\n\"                              BESTAND lezen als een makefile.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Dit bericht weergeven en stoppen.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Fouten van opdrachten negeren.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I MAP, --include-dir=MAP   MAP doorzoeken naar ingesloten makefiles.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          N taken tegelijk toestaan; oneindig bij geen \"\n\"argument.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Doorgaan als sommige doelen niet gemaakt \"\n\"kunnen worden.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Niet meerdere taken starten, behalve als \"\n\"systeembelasting lager is dan N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   De laatste mtime tussen symbolische koppeling \"\n\"en doel gebruiken.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Opdrachten niet uitvoeren, alleen weergeven.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o BESTAND, --old-file=BESTAND, --assume-old=BESTAND\\n\"\n\"                              BESTAND als erg oud beschouwen en niet opnieuw \"\n\"maken.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base       Interne gegevensbank van 'make' weergeven.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Geen opdrachten uitvoeren; afsluitstatus geeft \"\n\"aan of alles bijgewerkt is.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Ingebouwde impliciete regels uitzetten.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Ingebouwde variabele-instellingen uitzetten.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Opdrachten niet weergeven.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"  -S, --no-keep-going, --stop Optie -k uitzetten.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Doelen aanraken in plaats van opnieuw maken.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               Versienummer van 'make' weergeven en stoppen.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       De huidige map weergeven.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Optie -w uitzetten, zelfs als het impliciet \"\n\"aangezet was.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W BESTAND, --what-if=BESTAND, --new-file=BESTAND, --assume-new=BESTAND\\n\"\n\"                              BESTAND als oneindig nieuw beschouwen.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Waarschuwen als naar een ongedefinieerde \"\n\"variabele wordt verwezen.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"lege tekenreeks is ongeldig als bestandsnaam\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"onbekende aanduiding '%s' voor debug-niveau\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Onderbreking/uitzondering gekregen (code = 0x%x, adres = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Filter voor onbehandelde uitzondering is aangeroepen vanuit programma %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Toegangsovertreding: schrijfopdracht op adres %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Toegangsovertreding: leesopdracht op adres %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell stelt default_shell = %s in\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell stelt na doorzoeken van pad default_shell = %s in\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s slaapt gedurende 30 seconden...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"klaar met 30 seconden slapen.  Make gaat verder.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile op standaardinvoer is dubbel opgegeven.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (tijdelijk bestand)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (tijdelijk bestand)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Parallele taken (-j) worden op dit platform niet ondersteund.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Opnieuw instellen op enkele-taakmodus (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"interne fout: meerdere opties --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"interne fout: ongeldige tekenreeks '%s' voor --jobserver-fds\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"Waarschuwing: -jN is afgedwongen in een deelproces: taakserver-modus \"\n\"uitgezet.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dubbele taakserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"Waarschuwing: taakserver onbeschikbaar: -j1 wordt gebruikt.  Voeg '+' toe \"\n\"aan de ouderregel.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"maken van taken-pijp\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"initialiseren van taakserver-pijp\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\"Symbolische koppelingen worden niet ondersteund: -L wordt uitgeschakeld.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Bijwerken van makefiles...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefile '%s' bevat mogelijk een lus; wordt niet opnieuw gemaakt.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Opnieuw maken van makefile '%s' is mislukt.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Ingesloten makefile '%s' is niet gevonden.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefile '%s' is niet gevonden.\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Kan niet terugkeren naar oorspronkelijke map.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Opnieuw uitvoeren[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"verwijderen (van tijdelijk bestand): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL bevat meer dan één doel\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Geen doelen opgegeven en geen makefile gevonden\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Geen doelen\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Bijwerken van doelen...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"Waarschuwing:  Klokafwijking geconstateerd.  Het maken is mogelijk \"\n\"onvolledig gebeurd.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Gebruik:  %s [opties] [doel] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dit programma is gemaakt voor %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Dit programma is gemaakt voor %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"Rapporteer programmafouten aan <bug-make@gnu.org>,\\n\"\n\"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"de optie '-%c' vereist een niet-lege tekenreeks als argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"de optie '-%c' vereist een positief, geheel argument\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sDit is vrije programmatuur; zie de brontekst voor de kopieervoorwaarden.\\n\"\n\"%sEr is GEEN garantie; zelfs niet voor VERHANDELBAARHEID of\\n\"\n\"%sGESCHIKTHEID VOOR EEN BEPAALD DOEL.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sDit programma is gemaakt voor %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sDit programma is gemaakt voor %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-gegevensbank, weergegeven op %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-gegevensbank voltooid op %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Een onbekende map wordt binnengegaan\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Een onbekende map wordt verlaten\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Map '%s' wordt binnengegaan\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Map '%s' wordt verlaten\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Een onbekende map wordt binnengegaan\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Een onbekende map wordt verlaten\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Map '%s' wordt binnengegaan\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Map '%s' wordt verlaten\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Gestopt.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Onbekende fout %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"onvoldoende virtueel geheugen\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: gebruiker %lu (echt %lu), groep %lu (echt %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Toegang geïnitialiseerd\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Gebruikerstoegang\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Make-toegang\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Kindtoegang\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"schrijffout: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"schrijffout\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lezen van makefiles...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lezen van makefile '%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (geen standaarddoel)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (zoekpad)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (maakt niet uit)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (geen ~-expansie)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"ongeldige syntaxis in voorwaardelijk deel\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"extra 'endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"lege naam van variabele\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"lege 'override'-opdracht\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"ongeldige 'override'-opdracht\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"opdrachten beginnen voor eerste doel\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"ontbrekende regel voor opdrachten\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"ontbrekend scheidingsteken%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (bedoelde u TAB in plaats van 8 spaties?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"ontbrekend doelpatroon\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"meerdere doelpatronen\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"doelpatroon bevat geen '%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"ontbrekende 'endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Extra tekst na 'endef'-opdracht\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"ontbrekende 'endef', onafgemaakte 'define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Extra tekst na '%s'-opdracht\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"extra '%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"slechts één 'else' per voorwaardelijk deel\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Onjuiste doelspecifieke variabele-definitie\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"vereisten kunnen niet in opdrachtscripts gedefinieerd worden\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"gemengde impliciete en statische patroonregels\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"gemengde impliciete en normale regels\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"doel '%s' komt niet overeen met doelpatroon\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"doelbestand '%s' heeft zowel ':' als '::' ingangen\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"doel '%s' is meerdere keren gegeven in dezelfde regel.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"Waarschuwing: er wordt voorbijgegaan aan opdrachten voor doel '%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"Waarschuwing: oude opdrachten voor doel '%s' worden genegeerd\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"Waarschuwing: NUL-teken gezien; de rest van de regel wordt genegeerd\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Er is niets te doen voor '%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"'%s' is bijgewerkt.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Bijknippen van bestand '%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sEr is geen regel om doel '%s' te maken%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sEr is geen regel om doel '%s' te maken, nodig voor '%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Doelbestand '%s' wordt overwogen.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Bijwerken van bestand '%s' is recent geprobeerd en mislukt.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Bestand '%s' was al overwogen.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Bestand '%s' wordt nog bijgewerkt.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Bijwerken van bestand '%s' is voltooid.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Bestand '%s' bestaat niet.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Waarschuwing: .LOW_RESOLUTION_TIME-bestand '%s' heeft een hoge-resolutie \"\n\"tijdsstempel\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Impliciete regel voor '%s' gevonden.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Geen impliciete regel voor '%s' gevonden.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Standaardopdrachten worden gebruikt voor '%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Circulaire afhankelijkheid %s <- %s is verworpen.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Vereisten van doelbestand '%s' zijn voltooid.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"De vereisten van '%s' worden nu gemaakt.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Pogingen voor doelbestand '%s' worden gestaakt.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Doel '%s' is niet opnieuw gemaakt vanwege fouten.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Vereiste '%s' is alleen-ordenen voor doel '%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Vereiste '%s' van doel '%s' bestaat niet.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Vereiste '%s' is nieuwer dan doel '%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Vereiste '%s' is ouder dan doel '%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Doel '%s' is dubbele dubbele punt en heeft geen vereisten.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\"Er zijn geen opdrachten voor '%s' en geen van de vereisten zijn veranderd.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Maken van '%s' vanwege 'always-make'-vlag.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Doel '%s' hoeft niet opnieuw gemaakt te worden\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; VPATH-naam '%s' wordt gebruikt\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"'%s' moet opnieuw gemaakt worden.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  VPATH-naam '%s' wordt genegeerd.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Opdrachten van '%s' worden nu uitgevoerd.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Opnieuw maken van doelbestand '%s' is mislukt.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Doelbestand '%s' is succesvol opnieuw gemaakt.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Doelbestand '%s' moet opnieuw worden gemaakt onder -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Waarschuwing: bestand '%s' heeft een wijzigingstijd in de toekomst\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"\"\n\"Waarschuwing: bestand '%s' heeft een wijzigingstijd %.2g s in de toekomst\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS-element '%s' is geen patroon\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs kan niet exporteren: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Impliciete regels\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Geen impliciete regels.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u impliciete regels, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"PROGRAMMAFOUT: num_pattern_rules is verkeerd!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"onbekend signaal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Afgebroken (HUP)\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Afgebroken (interrupt)\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Afgesloten\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Onjuiste bewerking\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Breekpunt\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Afgebroken (abort)\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Afgebroken (IOT)\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Ongeïmplementeerde instructie (EMT)\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Drijvende-komma-berekeningsfout\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Afgebroken (killed)\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Busfout\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Segmentatiefout\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Onjuiste systeemaanroep\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Gebroken pijp\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarmklok\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Afgebroken (terminated)\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Door gebruiker gedefinieerd signaal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Door gebruiker gedefinieerd signaal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Kind is afgesloten\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Stroomstoring\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Gestopt\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Gestopt (tty-invoer)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Gestopt (tty-uitvoer)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Gestopt (signaal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Processortijdsgrens is overschreden\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Bestandsgroottegrens is overschreden\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtuele tijdopnemer is verlopen\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profilerende tijdopnemer is verlopen\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Venster is veranderd\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Doorgegaan\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Spoedeisende I/O-omstandigheid\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O mogelijk\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Hulpbron verloren\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Gevaarsignaal\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Verzoek om informatie\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Drijvende-komma-co-processor is niet beschikbaar\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"standaard\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"omgeving\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"omgeving onder -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"opdrachtregel\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"'override'-opdracht\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatisch\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (van '%s', regel %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# variabele verzameling van hashtabel-statistieken:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variabelen\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Patroonspecifieke variabelewaarden\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Geen patroonspecifieke variabelewaarden\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u patroonspecifieke variabelewaarden\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"Waarschuwing: ongedefinieerde variabele '%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search is mislukt met %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Waarschuwing: lege omleiding\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"interne fout: '%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-waarschuwing: CTRL-Y zal subproces(sen) achterlaten.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-waarschuwing: mogelijk dient u CTRL-Y-afhandeling opnieuw aan te zetten \"\n\"vanuit DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"INGEBOUWD [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"INGEBOUWDE CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"INGEBOUWDE RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Onbekende ingebouwde opdracht '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Fout: lege opdracht\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Invoer wordt omgeleid van %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Foutuitvoer wordt omgeleid naar %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Uitvoer wordt omgeleid naar %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"In plaats daarvan wordt %s uitgevoerd\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Fout bij proces-start, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH-zoekpaden\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Geen 'vpath'-zoekpaden.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u 'vpath'-zoekpaden.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Geen algemeen zoekpad ('VPATH'-variabele).\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Algemeen zoekpad ('VPATH'-variabele):\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Geef geen -j of --jobs op als sh.exe niet beschikbaar is.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Make wordt opnieuw ingesteld op enkele-taakmodus.\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/pl.po",
    "content": "# Polish translation for GNU make.\n# Copyright (C) 1996, 2002, 2005 Free Software Foundation, Inc.\n# Pawe Krawczyk <kravietz@ceti.pl>, 1996.\n# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2005.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-06-28 18:41+0200\\n\"\n\"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\\n\"\n\"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-2\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"prba uycia nieistniejcej funkcji: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"element biblioteki `touch' jest niedostpny pod VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Archiwum `%s' nie istnieje\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' nie jest poprawnym archiwum\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: Brak elementu `%s' w `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: Bdny kod powrotu z ar_member_touch w `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\"Uzyskanie informacji o module przez lnr$set_module nie udao si, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control nie powiodo si, status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"bd otwarcia biblioteki `%s' podczas szukania elementu `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Element `%s'%s: %ld bajtw pod %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (nazwa moe zosta okrojona)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Data %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Przerwano.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Element archiwum `%s' moe by faszywy; nie usunity\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Element archiwum `%s' moe by faszywy; nie usunity\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Kasuj plik `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Kasuj plik `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  polecenia do wykonania\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (wbudowane):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (z `%s', linia %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Katalogi\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: stat() zwraca bd.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (klucz %s, czas modyfikacji %d): otwarcie byo niemoliwe.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (urzdzenie %d, i-wze [%d,%d,%d]): otwarcie byo niemoliwe.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (urzdzenie %ld, i-wze %ld): otwarcie byo niemoliwe.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (klucz %s, czas modyfikacji %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (urzdzenie %d, i-wze [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (urzdzenie %ld, i-wze %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Nie\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" pliki, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"nie\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" niemoliwoci\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" jak dotd.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" niemoliwoci w %lu katalogach.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Rekurencyjna zmienna `%s' wskazuje na sam siebie\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"niezakoczone odwoanie do zmiennej\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Polecenia dla pliku `%s' podano w %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Polecenia dla pliku `%s' zostay wyznaczone na podstawie regu standardowych,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"ale `%s' jest teraz uznawany za ten sam plik co `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Polecenia dla `%s' zostay zignorowane na rzecz polece dla `%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"nie mona przemianowa `%s' z pojedynczym dwukropkiem na `%s' z podwjnym\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"nie mona przemianowa `%s' z podwjnym dwukropkiem na `%s' z pojedynczym\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Kasowanie pliku poredniego `%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Kasowanie plikw porednich...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Oznaczenie czasu spoza zakresu; zastpiono %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Aktualny czas\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# To nie jest obiekt:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Cenny plik (zaleno .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Obiekt niejawny (zaleno .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Obiekt podany w linii polece.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Makefile domylny, wymieniony w MAKEFILES lub -include/sinclude.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Szukanie regu domylnych zostao wykonane.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Szukanie regu domylnych nie zostao wykonane.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Ga wzorcw domylnych/statycznych: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Plik jest zalenoci przejciow.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Robi rwnie:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Czas modyfikacji nie by sprawdzany.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Plik nie istnieje.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Plik jest bardzo stary.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Ostatnio modyfikowany %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Plik zosta uaktualniony.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Plik nie zosta uaktualniony.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Aktualnie uruchamiane polecenia (TO JEST PLUSKWA).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Aktualnie uruchamiane polecenia zalenoci (TO JEST PLUSKWA).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Uaktualnienie powiodo si.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Powinien by uaktualniony (-q jest wczone).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Uaktualnianie nie powiodo si.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Bdna warto w elemencie `update_status'!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Bdna warto w elemencie `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Pliki\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# statystyki tablic haszujcych plikw:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"pierwszy argument funkcji `word' nie jest numeryczny\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"pierwszy argument funkcji `word' musi by wikszy od 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"pierwszy argument funkcji `wordlist' nie jest numeryczny\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"drugi argument funkcji `wordlist' nie jest numeryczny\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) nie powiodo si (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) nie powiodo si (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() nie powiodo si (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() nie powiodo si\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Czyszcz tymczasowy plik wsadowy %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Niewystarczajca liczba argumentw (%d) dla funkcji `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Funkcja `%s' nie jest zaimplementowana na tej platformie\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"nie dokoczone wywoanie funkcji `%s': brak `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: opcja `%s' jest niejednoznaczna\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: opcja `--%s' nie przyjmuje argumentw\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: opcja `%c%s' nie przyjmuje argumentw\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: opcja `%s' wymaga argumentu\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: nierozpoznana opcja `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: nierozpoznan opcja `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: niedozwolona opcja -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: bdna opcja -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: opcja wymaga argumentu -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: opcja `-W %s' jest niejednoznaczna\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: opcja `-W %s' nie przyjmuje argumentw\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\"nie mona zaalokowa %ld bajtw na tablic haszujc: pami wyczerpana\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Wypenienie=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Przehaszowania=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Kolizje=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Szukanie standardowej reguy dla `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Szukanie standardowej reguy typu archive-member dla `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Pomijanie rekurencyjnego wywoania reguy standardowej.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Prbowanie reguy wzorcowej z gazi `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Odrzucenie niemoliwej zalenoci domylnej `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Odrzucenie niemoliwej zalenoci reguy `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Prbowanie zalenoci domylnej `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Prbowanie zalenoci reguy `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Znaleziono zaleno `%s' jako VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Szukanie reguy zawierajcej plik przejciowy `%s'.\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"Nie mona utworzy pliku tymczasowego\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Bd 0x%x (zignorowany)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Bd 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Bd %d (zignorowany)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Bd %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (zrzut pamici)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Oczekiwanie na niezakoczone zadania....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"yjcy potomek 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (zdalne)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Zbieranie przegrywajcego potomka 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Zbieranie wygrywajcego potomka 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Czyszczenie tymczasowego pliku wsadowego %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Usuwanie potomka 0x%08lx PID %ld%s z kolejki.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"piszcy serwer zada\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Zwolniony token dla potomka 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() nie mg uruchomi procesu (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Naliczono %d parametrw nieudanego uruchomienia\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Wstawianie potomka 0x%08lx (%s) PID %ld%s do kolejki.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Otrzymano token dla potomka 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"strumie czytajcy zadania\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"niemoliwe wymuszenie limitw obcienia w tym systemie\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"niemoliwe wymuszenie limitu obcienia: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"nie ma wicej uchwytw plikw: nie mona powieli stdin\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"nie ma wicej uchwytw plikw: nie mona powieli stdout\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Nie mona odtworzy stdin\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Nie mona odtworzy stdout\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() nie mg uruchomi procesu (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make usun potomka pid %d, nadal czeka na pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Polecenie nie znalezione\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Nie znaleziono programu powoki\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: mogo zabrakn miejsca na rodowisko\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL si zmieni (by `%s', jest `%s')\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Tworzenie tymczasowego pliku wsadowego %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (linia %d) Zy kontekst powoki (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opcje:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Ignorowane dla kompatybilnoci.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           Bezwarunkowe utworzenie wszystkich obiektw.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C KATALOG, --directory=KATALOG\\n\"\n\"                              Przejcie do KATALOGu przed robieniem\\n\"\n\"                              czegokolwiek.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\"  -d                          Wywietla duo informacji diagnostycznych.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=FLAGI]             Wywietla rne rodzaje informacji\\n\"\n\"                              diagnostycznych.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Zmienne rodowiska przykrywaj makefile.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f PLIK, --file=PLIK, --makefile=PLIK\\n\"\n\"                              Czyta PLIK jako makefile.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"\"\n\"  -h, --help                  Wywietla ten komunikat i koczy dziaanie.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Ignoruje bdy polece.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I KATALOG, --include-dir=KATALOG\\n\"\n\"                              Szuka doczanych makefile w KATALOGu.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Dopuszcza N zada naraz; brak N oznacza brak\\n\"\n\"                              ogranicze.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Kontynuuj jeli nie da si zrobi jakich\\n\"\n\"                              obiektw.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Nie uruchamiaj wielu zada jeli load nie \"\n\"jest\\n\"\n\"                              poniej N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times   Uywanie ostatniego mtime midzy dowizaniem a \"\n\"celem.\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Nie wykonuje polece; jedynie je wywietla.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o PLIK, --old-file=PLIK, --assume-old=PLIK\\n\"\n\"                              Uznanie PLIKu za bardzo stary i nie tworzenie \"\n\"go\\n\"\n\"                              ponownie.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       Wywietla wewntrzn baz danych make.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Nie uruchamia adnych polece; status powrotu\\n\"\n\"                              wskazuje aktualno.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"  -r, --no-builtin-rules      Wycza wbudowane reguy standardowe.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Wycza ustawianie wbudowanych zmiennych.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet       Nie wypisuje polece.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Wycza -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"  -t, --touch                 Uaktualnia obiekty zamiast je robi.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               Wywietla wersj make i koczy dziaanie.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Wywietla aktualny katalog.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Wycza -w, nawet jeli byo ono wczone\\n\"\n\"                              domylnie.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK\\n\"\n\"                              Uznaje PLIK za nieskoczenie nowy.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Ostrzega przy odwoaniach do \"\n\"niezdefiniowanych\\n\"\n\"                              zmiennych.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"pusty acuch nie moe by nazw pliku\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"nieznany poziom diagnostyki `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: zapano Przerwanie/Wyjtek (kod = 0x%x, adres = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Nie obsugiwany filtr wyjtku wywoany z programu %s\\n\"\n\"ExceptionCode = %x\\n\"\n\"ExceptionFlags = %x\\n\"\n\"ExceptionAddress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Naruszenie praw dostpu: zapis pod adresem %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Naruszenie praw dostpu: odczyt spod adresu %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell ustawia default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell ustawia ciek wyszukiwania default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s jest zawieszony na 30 sekund...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"zakoczono sleep(30). Kontynuacja.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile ze standardowego wejcia podano dwukrotnie.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (plik tymczasowy)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (plik tymczasowy)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Rwnolege zadania (-j) nie s obsugiwane na tej platformie\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Przeczanie w tryb jednozadaniowy (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"bd wewntrzny: wiele opcji --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"bd wewntrzny: bdny acuch --jobserver-fds `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"uwaga: -jN wymuszone w podzadaniu: wyczanie trybu serwera zada.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"duplikacja serwera zada\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"uwaga: serwer zada niedostpny: uywanie -j1.  Naley doda `+' do \"\n\"nadrzdnej reguy make.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"tworzenie potoku zada\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"inicjowanie potoku serwera zada\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Dowizania symboliczne nie s obsugiwane: wyczono -L.\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Uaktualnianie plikw makefile....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefile `%s' moe si zaptli; nie przetwarzam go.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Nie udao si zrobi makefile `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Nie znaleziono wczanych makefile `%s'.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Nie znaleziono makefile `%s'\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Niemoliwy powrt do katalogu startowego.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Ponowne uruchamianie[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (plik tymczasowy): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \".DEFAULT_GOAL zawiera wicej ni jeden cel\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Nie podano obiektw i nie znaleziono makefile\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Brak obiektw\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Uaktualnianie obiektw docelowych....\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"uwaga:  Wykryto przestawienie zegara. Budowanie moe by niekompletne.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Skadnia: %s [opcje] [obiekt] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ten program zosta zbudowany dla %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ten program zosta zbudowany dla %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Bdy prosz zgasza na adres <bug-make@gnu.org>\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"opcja `-%c' wymaga niepustego acucha jako argumentu\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"opcja `-%c' wymaga argumentu cakowitego dodatniego\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sTen program jest darmowy; warunki kopiowania s opisane w rdach.\\n\"\n\"%sAutorzy nie daj ADNYCH gwarancji, w tym nawet gwarancji SPRZEDAWALNOCI\\n\"\n\"%slub PRZYDATNOCI DO KONKRETNYCH CELW.\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTen program zosta zbudowany dla %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sTen program zosta zbudowany dla %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Baza danych Make, wywietlana na %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Zakoczono tworzenie bazy danych Make na %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Wejcie do nieznanego katalogu\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Opuszczenie nieznanego katalogu\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Wejcie do katalogu `%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Opuszczenie katalogu `%s'\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Wejcie do nieznanego katalogu\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Opuszczenie nieznanego katalogu\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Wejcie do katalogu `%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Opuszczenie katalogu `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Stop.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Nieznany bd %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"brak pamici wirtualnej\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: uytkownik %lu (rzeczywisty %lu), grupa %lu (rzeczywista %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Zainicjalizowany dostp\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Dostp uytkownika\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Dostp make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Dostp potomka\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"bd zapisu: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"bd zapisu\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Czytanie makefile...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Czytanie makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (brak celu domylnego)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (przeszukiwana cieka)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (niewane)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (brak rozszerzenia ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"bdna skadnia wyraenia warunkowego\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"nie zwizany `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"pusta nazwa zmiennej\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"pusta dyrektywa `override'\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"bdna dyrektywa `override'\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"polecenia zaczynaj si przed pierwszym obiektem\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"brakuje reguy przed poleceniami\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"brakujcy separator%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (czyby mia by TAB zamiast 8 spacji?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"brakujcy wzorzec obiektu\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"wielokrotne wzorce obiektu\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"wzorzec obiektu nie zawiera `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"brakujcy `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Niezwizany tekst po dyrektywie `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"brakujcy `endef', niezakoczone `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Niezwizany tekst po dyrektywie `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"niezwizany `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"tylko jedno `else' w wyraeniu warunkowym\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"le sformuowana definicja zmiennej dla celu\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"wymagania nie mog by definiowane w skryptach polece\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"pomieszane standardowe i statyczne reguy wzorcw\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"pomieszane standardowe i normalne reguy\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"obiekt `%s' nie pasuje do wzorca obiektu\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"plik obiektowy `%s' ma pozycje i : i ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"obiekt `%s' wyspecyfikowany wielokrotnie w tej samej regule\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"uwaga: polecenia zakrywajce dla obiektu `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"uwaga: ignoruj stare polecenia dla obiektu `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"uwaga: napotkaem na znak NUL; reszta linii zignorowana\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Nie ma nic do zrobienia w `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' jest aktualne.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Czyszczenie pliku `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sBrak regu do wykonania obiektu `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sBrak regu do zrobienia obiektu `%s', wymaganego przez `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Przetwarzanie pliku obiektowego `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Ju bez powodzenia prbowaem uaktualni plik `%s'.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Plik `%s' by ju przetwarzany.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Wci uaktualniam plik `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Skoczyem uaktualnia plik `%s'.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Plik `%s' nie istnieje.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Uwaga: plik .LOW_RESOLUTION_TIME `%s' ma du rozdzielczo znacznika \"\n\"czasu\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Znaleziono standardow regu dla `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Brak standardowych regu dla `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Stosowanie standardowych polece dla `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Okrna dyrektywa %s <- %s porzucona.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Zakoczono zalenoci pliku obiektu `%s'.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Zalenoci `%s' s wykonywane.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Zaniechany plik obiektowy `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Obiekt `%s' nie zosta wykonany z powodu bdw.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Zaleno `%s' dotyczy tylko kolejnoci dla obiektu `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Zaleno `%s' obiektu `%s' nie istnieje.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Zaleno `%s' jest nowsza od obiektu `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Zaleno `%s' jest starsza od obiektu `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Obiekt `%s' jest typu double-colon i nie ma adnych zalenoci.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Brak polece dla `%s' i brak zmienionych zalenoci.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Tworzenie `%s' z powodu flagi always-make.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Nie ma potrzeby przerabia obiektu `%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; uyto nazwy VPATH `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Konieczne przerobienie obiektu `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Zignorowano nazw VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Uruchomiono polecenia dla `%s'.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Przerabianie pliku obiektowego `%s' nie powiodo si.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Przerabianie pliku obiektowego `%s' powiodo si.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Plik obiektowy `%s' powinien by przerobiony z opcj -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Uwaga: Plik `%s' ma czas modyfikacji z przyszoci\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Uwaga: Plik `%s' ma czas modyfikacji %.2g s w przyszoci\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"element .LIBPATTERNS `%s' nie jest wzorcem\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Zasady nie eksportowane: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Reguy stadardowe\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Brak standardowych regu.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u standardowych regu, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"PLUSKWA: ze num_pattern_rules! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"nieznany sygna\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Rozczenie\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Przerwanie\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Wyjcie\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Bdna instrukcja\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Puapka ledzenia\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Przerwany\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Puapka IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Puapka EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Wyjtek zmiennoprzecinkowy\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Zabity\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Bd szyny\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Naruszenie ochrony pamici\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Bdne wywoanie systemowe\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Przerwany potok\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Budzik\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Zakoczony\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Sygna uytkownika 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Sygna uytkownika 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Potomek powrci\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Przerwa w zasilaniu\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Zatrzymany\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Zatrzymany (wejcie z tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Zatrzymany (wyjcie na tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Zatrzymany (sygna)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Przekroczony czas CPU\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Przekroczony limit wielkoci pliku\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Wyczerpany stoper wirtualny\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Wyczerpany stoper profilujcy\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Zmienione okno\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Kontynuowany\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Naga sytuacja I/O\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O moliwe\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Zaginione zasoby\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Sygna niebezpieczestwa\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"danie informacji\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Koprocesor oblicze zmiennoprzecinkowych niedostpny\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"domylna\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"rodowiskowa\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"rodowisko pod -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"z linii polece\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"dyrektywa `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatyczna\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (z `%s', linia %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# statystyki tablic haszujcych ustawionych zmiennych:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Zmienne\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Wartoci zmiennych dla wzorca\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Brak wartoci zmiennych dla wzorca.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u wartoci zmiennych dla wzorca\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"uwaga: niezdefiniowana zmienna `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search nie powiodo si - %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Uwaga: Puste przekierowanie\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"bd wewntrzny: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-uwaga, CTRL-Y pozostawi podproces(y).\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-uwaga, bdzie trzeba ponownie umoliwi obsug CTRL-Y z DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"WBUDOWANE [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"WBUDOWANE CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"WBUDOWANE RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Nieznane polecenie wbudowane '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Bd, puste polecenie\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Przekierowane wejcie z %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Przekierowane wyjcie diagnostyczne do %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Przekierowane wyjcie do %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Zamiast tego wykonywanie %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Bd podczas uruchamiania, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# cieki przeszukiwania VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Brak cieek przeszukiwania `vpath'\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u cieek przeszukiwania `vpath'.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Brak oglnej (zmienna `VPATH') cieki przeszukiwania.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Oglna (zmienna `VPATH') cieka przeszukiwania:\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Nie naley podawa -j lub --jobs jeli sh.exe nie jest dostpny.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Przeczanie make w tryb jednozadaniowy.\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/pt_BR.po",
    "content": "# Mensagem do GNU make em Portugus (Brasil)\n# Copyright (C) 2000 Free Software Foundation, Inc.\n# Fbio Henrique F. Silva <fabiohfs@mail.com>, 2000.\n#\n# Caso voc encontre alguma mensagem que no est bem traduzida, por\n# favor me informe dando sua sugesto.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: GNU make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-11-16 17:06+0300\\n\"\n\"Last-Translator: Fbio Henrique F. Silva <fabiohfs@mail.com>\\n\"\n\"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"caracterstica no suportada: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"o touch no est disponvel no VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: Arquivo `%s' no existe\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: `%s' no  um arquivo vlido\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: O membro `%s' no existe em `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: O ar_member_touch retornou um cdigo de erro invlido em `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"o lbr$set_module falhou ao obter informaes do mdulo, estado = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control falhou com estado = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"erro na abertura da biblioteca `%s' para localizar o membro `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Membro `%s'%s: %ld bytes de %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (o nome pode estar truncado)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Data %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, modo = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Quebra.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"** [%s] O arquivo membro `%s' pode ser falso. No foi apagado.\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"** O arquivo membro `%s' pode ser falso. No foi apagado.\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"** [%s] Apagando arquivo `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"** Apagando arquivo `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"# comandos para executar\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (embutido):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (de `%s', linha %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Diretrios\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: no pde ser estabelecido.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (chave %s, mtime %d): no pde ser aberto.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (dispositivo %d, inode [%d,%d,%d]): no pde ser aberto.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (dispositivo %ld, inode %ld): no pde ser aberto.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (chave %s, mtime %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (dispositivo %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (dispositivo %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"No\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" arquivos, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"no\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" impossibilidades\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" at agora.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" impossibilidades em %lu diretrios.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Varivel recursiva `%s' faz referncia a ela mesma (eventualmente)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"referncia a varivel no finalizada\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Comandos especificados para o arquivo `%s' em %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Comandos para o arquivo `%s' encontrados por regra implcita,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"mas `%s'  considerado o mesmo arquivo que `%s'.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Comandos para `%s' sero ignorados em favor daqueles para `%s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"no pde renomear de dois-pontos `%s' para dois-pontos duplos `%s'\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"no pde renomer de dois-pontos duplos `%s' para dois-pontos `%s'\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"** Apagando arquivo intermedirio `%s'\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Apagando arquivo intermedirio...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Data/Hora fora de faixa; substituindo %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Hora atual\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# No  um alvo:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"# Arquivo importante (prerequisito de .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"# Alvo Falso (prerequisito de .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"# Linha de Comando do Alvo.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"# Um Padro ou arquivo MAKEFILES\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"# Pesquisa por regra implcita concluida.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"# Pesquisa por regra implcita no concluida.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"# Derivao padro implcita/esttica: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"# O arquivo  um pr-requisito intermedirio.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"# Tambm faz:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"# O Perodo da modificao nunca foi verificado.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"# O Arquivo no existe.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"# O Arquivo est desatualizado.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"# ltima modificao %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"# O Arquivo foi atualizado.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"# O Arquivo no foi atualizado.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"# Comandos em execuo (ISTO  UMA FALHA).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"# Comandos de dependncias em execuo (ISTO  UMA FALHA).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"# Atualizado com sucesso.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"# Precisa ser atualizado (-q est definido).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"# Problemas com a atualizao.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"# Valor invlido no membro `update_status' !\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"# Valor invlido no membro `command_state' !\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Arquivos\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# tabela hash de arquivos:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"primeiro argumento no numrico para a funo `word'\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"o primeiro argumento para a funo `word' deve ser maior que 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"primeiro argumento no numrico para a funo `wordlist'\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"segundo argumento no numrico para a funo `wordlist'\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) falhou (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) falhou (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() falhou (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() falhou\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Apagando o arquivo de lote temporrio %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"O nmero de argumentos  insuficiente (%d) para a funo `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"A funo `%s' no foi implementada nesta plataforma\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Chamada no terminada para a funo `%s': faltando `%c'\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: a opo `%s'  ambigua\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opo `--%s' no permite um argumento\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opo `%c%s' no permite um argumento\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: a opo `%s' requer um argumento\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: a opo  desconhecida `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: a opo  desconhecida `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: a opo  ilegal -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: a opo  invlida -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: a opo requer um argumento -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: a opo `-W %s'  ambigua\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: a opo `-W %s' no permite um argumento\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"no foi possvel alocar %ld bytes para a tabela hash: memria cheia\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Carga=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Colises=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Procurando por uma regra implcita para `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Procurando por uma regra implcita de arquivo-membro para `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Evitando recurso em regra implcita.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Tentando padro para regra com `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Rejeitando pr-requisitos implcitos `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Rejeitando pr-requisito para regra `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Tentando pr-requisito implcito `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Tentanto pr-requisito para a regra `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Pr-requisito `%s' encontrado como VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Procurando uma regra com o arquivo intermedirio `%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (arquivo temporrio)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Erro 0x%x (ignorado)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Erro 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Erro %d (ignorado)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"** [%s] Erro %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (arquivo core criado)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"** Esperando que outros processos terminem.\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Filho ativo 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (remoto)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Descarregando processo filho 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Descarregando processo filho 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Apagando o arquivo de lote temporrio: %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Removendo o processo filho 0x%08lx PID %ld%s da cadeia.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"gravar jobserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Liberado sinalizador para o processo filho 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() falhou ao executar o processo (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Contados %d args na falha de execuo\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Colocando o processo filho 0x%08lx (%s) PID %ld%s na cadeia.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Obtido o sinalizador para o processo filho 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"tarefas canalizadas lidas\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"no pde forar os limites de carga neste sistema operacional\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"no pde forar a carga limite:\"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() falhou ao executar o processo (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"processo filho descarregado: pid %d, aguardando pelo pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Comando no encontrado\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Interpretador de comandos no encontrado\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL alterado (era `%s' e agora  `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Criando arquivo de lote temporrio %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (linha %d) contexto invlido (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Opes:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \" -b, -m                      Ignorado para compatibilidade.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\" -B, --always-make           Processa todos os alvos incondicionalmente.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\" -C DIRETRIO, --directory=DIRETRIO\\n\"\n\"                              Muda para o DIRETRIO antes de fazer algo.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \" -d                          Imprime muita informao de depurao.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\" --debug[=OPES]            Imprime vrios tipos de informaes de \"\n\"depurao.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\" -e, --environment-overrides\\n\"\n\"                              Assume os valores das variveis de ambiente.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\" -f ARQUIVO, --file=ARQUIVO, --makefile=ARQUIVO\\n\"\n\"                              L o ARQUIVO como se fosse um arquivo make.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \" -h, --help                   Imprime esta mensagem e sai.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \" -i, --ignore-errors         Ignora os erros dos comandos.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\" -I DIRETRIO, --include-dir=DIRETRIO\\n\"\n\"                              Pesquisa o DIRETRIO por arquivos make a \"\n\"incluir.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\" -j [N], --jobs[=N]          Permite N tarefas de uma vez; tarefas infinitas \"\n\"sem argumentos.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\" -k, --keep-going            Continua mesmo que alguns alvos no possam ser \"\n\"processados.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\" -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              No inicia mltiplas tarefas a menos que a \"\n\"carga seja menor que N.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\" -n, --just-print, --dry-run, --recon\\n\"\n\"                              No executa quaisquer comandos; apenas imprime-\"\n\"os.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\" -o ARQUIVO, --old-file=ARQUIVO, --assume-old=ARQUIVO\\n\"\n\"                              Considera o ARQUIVO como muito antigo e no \"\n\"reprocess-o.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\" -p, --print-data-base       Imprime o banco de dados interno do make.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\" -q, --question              No executa os comandos; O cdigo de saida \"\n\"indica se est atualizado.\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \" -r, --no-builtin-rules      Desabilita as regras implcitas.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\" -R, --no-builtin-variables  Desabilita a configurao das variveis \"\n\"embutidas.\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \" -s, --silent, --quiet       No ecoa os comandos.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Desativa a opo -k.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\" -t, --touch                 Executa um `touch' nos alvos ao invs de \"\n\"reprocess-los.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\" -v, --version               Imprime o nmero de verso do make e sai.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \" -w, --print-directory       Imprime o diretrio atual.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\" --no-print-directory        Desativa a opo -w, mesmo que ela esteja \"\n\"implicitamente ativada.\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\" -W ARQUIVO, --what-if=ARQUIVO, --new-file=ARQUIVO, --assume-new=ARQUIVO\\n\"\n\"                              Considera o ARQUIVO infinitamente novo.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\" --warn-undefined-variables  Avisa quando um varivel no definida for \"\n\"referenciada.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"Cadeia de caracteres vazia no  vlida como nome de arquivo\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"nvel de depurao desconhecido: `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Interrupo/Exceo capturada (cdigo = 0x%x, endereo = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"No pde tratar o filtro de exceo chamado por %s\\n\"\n\"CdigoExceo = %x\\n\"\n\"SinalExceo = %x\\n\"\n\"EndereoExceo = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Violao de acesso: operao de escrita no endereo %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Violao de acesso: operao de leitura no endereo %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell definiu o default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell, caminho de pesquisa do default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s est suspenso por 30 segundos...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) concluido. Continuando.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile na entrada padro especificado duas vezes.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (arquivo temporrio)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (arquivo temporrio)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Tarefas paralelas (-j) no so suportadas nesta plataforma.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Reiniciando no modo de tarefa nica (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"erro interno: mltiplas opes --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"erro interno: valor `%s' invlido para --jobserver-fds\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"aviso: -jN forado no submake: desabilitando o modo jobserver.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"aviso: jobserver indisponvel: usando -j1. Inclua `+' na regra pai.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"criando canalizao de tarefas\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"inicializando a canalizao do jobserver\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Atualizando os arquivos makefiles ...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"O arquivo `%s' pode estar em loop; no reprocess-lo.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Problemas ao reprocessar o arquivo `%s'.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Arquivo `%s' incluido no foi encontrado.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"O arquivo `%s' no foi encontrado.\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"No foi possvel voltar ao diretrio original.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Re-executando:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"desvinculado (arquivos temporrio): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Nenhum alvo indicado e nenhum arquivo make encontrado\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Sem alvo\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Atualizando os objetivos finais...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"aviso: O relgio est errado. Sua compilao pode ficar incompleta.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Uso: %s [opes] [alvo] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa foi compilado para %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa foi compilado para %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Informe os problemas para <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"a opo `-%c' requer um argumento inteiro positivo\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"a opo `-%c' requer um argumento inteiro positivo\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sEste  um programa livre; veja o fonte para as condies de cpia.\\n\"\n\"%sNo h garantias; nem mesmo de COMERCIALIZAO OU ATENDIMENTO A UMA\\n\"\n\"%sFUNO EM PARTICULAR.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa foi compilado para %s\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Este programa foi compilado para %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Banco de dados do Make, impresso em %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Banco de dados do Make finalizado em %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Entrando em um diretrio desconhecido\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Saindo de um diretrio desconhecido\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Entrando no diretrio `%s'\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Saindo do diretrio `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Entrando em um diretrio desconhecido\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Saindo de um diretrio desconhecido\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Entrando no diretrio `%s'\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Saindo do diretrio `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Pare.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Erro desconhecido %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"A memria virtual encheu\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: usurio %lu (real %lu), grupo %lu (real %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Acesso inicializado\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Acesso do usurio\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Acesso do make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Acesso filho\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Erro redirecionado para %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"gravar jobserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lendo arquivos makefile ...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lendo arquivos makefile `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (no h objetivo padro)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (caminho de pesquisa)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (sem importncia)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (sem expanso ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"sntaxe invlida na condicional\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"`endef' extranho\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"nome de varivel vazio\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"diretiva `override' vazia\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"diretiva `override' invlida\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"comandos comeam antes do primeiro alvo\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"falta regra antes dos comandos\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"faltando o separador%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (voc pensou em TAB ao invs de 8 espaos?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"faltando o padro dos alvos\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"mltiplos padres para o alvo\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"padro para o alvo no contm `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"faltando `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Texto estranho depois da diretiva `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"faltando `endef', `define' no terminado\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Texto estranho depois da diretiva `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"`%s' estranho\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"use apenas um `else' por condicional\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Definio de varivel por alvo mau formada\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"As regras implcitas e de padro esttico misturadas\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"As regras implcitas e normais misturadas\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"O alvo `%s' no coincide com o padro\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"O arquivo alvo `%s' tem entradas : e ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"O alvo `%s' foi informado mais do que um vez na mesma regra.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"aviso: impondo comandos para o alvo `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"aviso: ignorando comandos antigos para o alvo `%s'\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"aviso: caracter NUL detetado; o resto da linha foi ignorado\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Nada a ser feito para `%s'.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' est atualizado.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Atualizando o arquivo `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sSem regra para processar o alvo `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sSem regra para processar o alvo `%s', necessrio por `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Considerando o arquivo alvo `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Tentativa de atualizar o arquivo `%s' falhou.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"O arquivo `%s' j foi considerado.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Ainda est atualizando o arquivo `%s'.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Atualizao do arquivo `%s' concluida.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"O arquivo `%s' no existe.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Aviso: arquivo .LOW_RESOLUTION_TIME `%s' tem uma etiqueta de tempo de \"\n\"alta resoluo\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Regra implcita encontrada para `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Nenhuma regra implcita encontrada para `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Usando os comandos padres para `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Dependncia circular %s <- %s abandonada.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Pr-requisitos do alvo `%s' concluido.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Pr-requisitos do `%s' esto sendo criados.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Desistindo do arquivo `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"O alvo `%s' no foi reprocessado por causa de erros.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Pr-requisito `%s' est ordenado para o alvo `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Pr-requisitos `%s' do alvo `%s' no existem.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Pr-requisito `%s'  mais novo do que o alvo `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Pr-requisito `%s'  mais antigo do que o alvo `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"O alvo `%s'  dois-pontos duplos e no tem pr-requisitos.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Nenhum comando para `%s' e nenhum pr-requisito foi alterado.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Processando `%s' devido a opo always-make.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"No  necessrio reprocessar o alvo `%s'\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; usando o nome VPATH `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"O alvo `%s' deve ser reprocessado.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Ignorando o nome VPATH `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Os comandos de `%s' esto rodando.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Falha ao reprocessar o alvo `%s'.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Alvo `%s' reprocessado com sucesso.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"O alvo `%s' precisa ser reprocessado sob -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"** Aviso: O arquivo `%s' est com a hora adiantada\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"** Aviso: O arquivo `%s' est com a hora %.2g adiantada\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"O elemento .LIBPATTERNS `%s' no  um padro\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customizaes no exportadas: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Regras implcitas.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Faltam as regras implcitas.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u regras implcitas, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"ERRO: num_pattern_rules errada! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"sinal desconhecido\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Desconectar\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Interrupo\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Sair\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Instruo ilegal\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Aviso Trace/breakpoint\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Abortado\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Aviso IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Aviso EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Exceo de ponto flutuante\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Finalizado\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Erro de barramento\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Falha de segmentao\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Chamada de sistema invlida\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Canalizao interrompida\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Despertador\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Terminado\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Sinal 1 definido pelo usurio\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Sinal 2 definido pelo usurio\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"O Filho saiu\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Falha na Energia Eltrica\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Parado\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Parado (entrada tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Parado (saida tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Parado (sinal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Tempo de CPU excedido\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Tamanho do arquivo excedido\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Temporizador virtual expirou\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Temporizador de perfil expirou\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Janela alterada\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Continuao\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Condio de E/S urgente\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"Possvel E/S\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Recurso perdido\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Sinal perigoso\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Solicitao de informao\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Co-processador aritmtico indisponvel\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"padro\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"ambiente\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"ambiente sob -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"linha de comando\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"diretiva `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automtico\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (de `%s', linha %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# tabela hash do conjunto de varivies:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variveis\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Valores da varivel de padres especficos\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Faltam valores para varivel de padres especficos\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u valores para varivel de padres especficos\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"aviso: varivel indefinida `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search falhou com %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Aviso: Redireo vazia\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"erro interno: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-warning, CTRL-Y sair do(s) subprocesso(s).\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-warning, pode ser preciso reativar o CTRL-Y no DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"EMBUTIDO [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"CD EMBUTIDO %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"RM EMBUTIDO %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Comando embutido desconhecido `%s'.\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Erro, comando vazio\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Entrada de %s redirecionada\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Erro redirecionado para %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Saida redirecionada para %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Executando %s ao invs de\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Erro de execuo, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Caminho VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Sem caminho `vpath'.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u caminhos `vpath'.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Sem caminho genrico (varivel `VPATH').\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Caminho genrico (varivel `VPATH'):\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Erro de sintaxe dentro de '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Recebido um SIGSHLD; %u processos filhos descarregados.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"No especifique -j ou --jobs se o sh.exe no estiver disponvel.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Reiniciando o make para o modo de trabalho nico.\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"sem nome de arquivo para `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"O alvo `%s' deixou pre-requisito padro vazio\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Nenhum arquivo.\"\n\n# No traduzi \"hash buckets\" por no encontrar uma traduo satisfatria.\n# Assim que encontrar farei a atualizao.\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u arquivos em %u hash buckets.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# mdia %.3f arquivos por grupo, max %u arquivos em um grupo.\\n\"\n\n#~ msgid \"the `word' function takes a positive index argument\"\n#~ msgstr \"a funo `word' requer um argumento de ndice positivo.\"\n\n#~ msgid \" (ignored)\"\n#~ msgstr \" (ignorado)\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIRETRIO\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Mudar para o DIRETRIO antes de fazer algo\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Suspende o processo para permiter o uso do depurador\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"\"\n#~ \"As variveis de ambiente tm prioridade em relao aos arquivos make\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"ARQUIVO\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"L o ARQUIVO como um arquivo make\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Pesquisa o DIRETRIO por arquivos make inclusos\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"No inicia mltiplas tarefas a menos que a carga esteja abaixo de N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"No executa quaisquer comandos; apenas imprime-os\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Considera o ARQUIVO muito antigo e no o processa\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"No ecoa os comandos\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Desativa -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Considera o ARQUIVO muito novo\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Entrando no\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Saindo do\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Sem variveis.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# mdia de %.1f variveis por grupo, max %u em um grupo.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# mdia de %d.%d variveis por grupo, max %u em um grupo.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/quot.sed",
    "content": "s/\"\\([^\"]*\\)\"/“\\1”/g\ns/`\\([^`']*\\)'/‘\\1’/g\ns/ '\\([^`']*\\)' / ‘\\1’ /g\ns/ '\\([^`']*\\)'$/ ‘\\1’/g\ns/^'\\([^`']*\\)' /‘\\1’ /g\ns/“”/\"\"/g\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/remove-potcdate.sin",
    "content": "# Sed script that remove the POT-Creation-Date line in the header entry\n# from a POT file.\n#\n# The distinction between the first and the following occurrences of the\n# pattern is achieved by looking at the hold space.\n/^\"POT-Creation-Date: .*\"$/{\nx\n# Test if the hold space is empty.\ns/P/P/\nta\n# Yes it was empty. First occurrence. Remove the line.\ng\nd\nbb\n:a\n# The hold space was nonempty. Following occurrences. Do nothing.\nx\n:b\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/ru.po",
    "content": "#  make\n# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.\n# Oleg S. Tihonov <tihonov@ffke-campus.mipt.ru>, 1998\n# Alexey Mahotkin <alexm@hsys.msk.ru> 2001\n# Denis Perchine <dyp@perchine.com>, 2001, 2002\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.79.1\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-01-07 19:34GMT+06\\n\"\n\"Last-Translator: Denis Perchine <dyp@perchine.com>\\n\"\n\"Language-Team: Russian <ru@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=KOI8-R\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"X-Generator: KBabel 0.9.5\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"   : `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"        VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"  :  `%s'  \"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"  :  : `%s'\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"  :  `%s'    `%s'\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"\"\n\"  :  ar_member_touch \\n\"\n\"   `%s'\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module      ,  = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$init_control    %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"   `%s'    `%s'\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \" `%s'%s: %ld    %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (   )\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"   %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, mode = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** .\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s]   `%s', , ;  \"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"***   `%s', , ;  \"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s]   `%s'\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"***   `%s'\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  ,   \"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" ():\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \"  ( `%s',  %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# \\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s:     stat.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s ( %s,   %d):  .\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s ( %d, inode [%d,%d,%d]):  .\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s ( %ld, inode %ld):  .\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s ( %s,   %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s ( %d, inode [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s ( %ld, inode %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" ,\"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"  \"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \"   .\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"    %u .\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"  `%s'     ( )\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"   \"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"   `%s'    %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"   `%s'     ,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \" `%s'  `%s'       . \"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"  `%s' ,       `%\"\n\"s'.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"  `%s'     `%s'   \"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"  `%s'     `%s'   \"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"***    `%s'\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"***    `%s'\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s:      ;  %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \" \"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"#   :\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#    ( .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#   (  .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  ,    .\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  makefile     MAKEFILES.\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#     \"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#      .\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#      : `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#   --  .\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#   :\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#       .\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#    .\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#   .\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#     %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#    .\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#     .\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#        ( ).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\"#         ( ).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#   .\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#     (  -q).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#    .\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#     `update_status'!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#     `command_state'!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# \"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"    `word'\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"   `word'    \"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"    `wordlist'\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"    `wordlist'\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In)    (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err)    (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe()    (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe(): process_init_fd()   \\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"  ( %d)  `%s'\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"    :  `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"   `%s':  `%c'\"\n\n#  getopt , ..    \n#    ,      make\n#\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s:  `%s'  \\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s:  `--%s'   \\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s:  `%c%s'   \\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s:  `%s'  \\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s:   `--%s'\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s:   `%c%s'\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s:   -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s:   -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s:    -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s:  `-W %s' \\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s:  `-W %s'   \\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"      `%s'.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"    .\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"    ,  `%.*s'.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"  `%s'   VPATH `%s'\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"     `%s'.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite ( )\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s]  0x%x ()\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s]  0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s]  %d ()\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s]  %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (  )\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"***   ...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"  0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" ()\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"    0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"    0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"  0x%08lx PID %ld %s    .\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"   \"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"    0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy()     (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"    %d \\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"\"\n\"  0x%08lx (%s) PID %ld%s    .\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"    0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"   \"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"       \"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"   : \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy()     (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make    pid %d,    pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s:   \"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s:    \"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \" $SHELL  ( '%s',  '%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\"%s ( %d)     (!unixy && !\"\n\"batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \":\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  \"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"   \"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"    \"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"    \"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  \"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"   N ; \\n\"\n\"   ,   \"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\" ,    \\n\"\n\"   \"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"    make\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  ;\\n\"\n\"  ,    \"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"    \"\n\n#   \"variable settings\"?\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"     \"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"     ,\\n\"\n\"   \"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"     \"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  \"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"  -w,      \"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"   \\n\"\n\"  \"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"      \"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"     `%s'\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s:     ( = 0x%x,  = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"    %s\\n\"\n\"  = %x\\n\"\n\"  = %x\\n\"\n\"  = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \" :     %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \" :    %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell  default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell:     default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s   30 ...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) .  .\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile     .\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen ( )\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite ( )\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"  (-j)     .\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"    (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \" :   --jobserver-fds\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \" :   --jobserver-fds: `%s'\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\":  -Makefile   -jN;    \"\n\"\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"   \"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\":   :  -j1.\\n\"\n\" `+'     make.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"  \"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"   \"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \" make-....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Make- `%s', , ,    .\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"  make- `%s' .\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \" make- `%s'  .\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Make- `%s'  \"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"    .\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \" :\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink ( )\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"      make-\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \" \"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"  ...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \":   .     .\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \": %s []... []...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\"     <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \" `-%c'      \"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \" `-%c'      \"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\",  Richard Stallman  Roland McGrath.\\n\"\n\"%s  %s\\n\"\n\"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%s  ;     \\n\"\n\"%s  .     ;  \\n\"\n\"%s     - .\\n\"\n\"\\n\"\n\"%s     <bug-make@gnu.org>.\\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"#   Make,  %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"#    Make  %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"   \"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"   \"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"   `%s'\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"   `%s'\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"   \"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"   \"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"   `%s'\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"   `%s'\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  .\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"  %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"  \"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"\"\n\"   %s:  %lu ( %lu),\\n\"\n\" %lu ( %lu)\\n\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"    %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"   \"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \" make-...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \" make- `%s'\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (   )\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" ( )\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" ( )\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (   `~') \"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"    \"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \" `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"  \"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"  `override'\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"  `override'\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"     \"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"   \"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \" %s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"(      TAB   ?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"  \"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"  \"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"    `%%'\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \" `endif'\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"    `endef'\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \" `endif',  `define'\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"    `%s'\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \" `%s'\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"      `else'\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"     \"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"       \"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"    \"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \" `%s'    \"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"  `%s'     `:',   `::' \"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \" `%s'      \"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \":     `%s'\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \":     `%s' \"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \":   NUL;    \"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \" `%s'    .\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s'   .\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"  `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%s     `%s'%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%s     `%s',   `%s'%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"   `%s'.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"    `%s'  .\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \" `%s'   .\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \" `%s'    .\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"  `%s' .\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \" `%s'  .\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"    `%s'.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"     `%s'.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"     `%s'.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"  %s <- %s .\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \" ,      `%s', .\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \",    `%s',    .\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"     `%s'.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \" `%s'    - .\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \" `%s' ,   `%s'.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \" `%s'  `%s'  .\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \" `%s' ,   `%s'.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \" `%s' ,   `%s'.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \" `%s'        .\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"  `%s'  ,     .\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"    `%s'.\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \";  VPATH- `%s'\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"   `%s'.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"   VPATH- `%s'.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"  `%s'    .\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"    `%s' .\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"  `%s'  .\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"  `%s'     -q.\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"***  `%s'     (%s > %s)\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"***  `%s'     (%s > %s)\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \" .LIBPATTERNS `%s'   \"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"  : %s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"#   .\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"#   .\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"#  : %u, : %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \".\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \":   num_pattern_rules! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \" \"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"  \"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \" \"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \" \"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"   \"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \" IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \" \"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"    \"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"   \"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"    \"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"  \"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \" \"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"  \"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"   1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"   2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"  \"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \" \"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \" (  ) \"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \" (  )\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \" ()\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"   \"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"   \"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"  \"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"  \"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \" \"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"  /\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \" /\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \" \"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \" \"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \" \"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"    \"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \" \"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"  \"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"Make-\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"  -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"   \"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \" `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \"  ( `%s',  %lu):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %u   %u  -.\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# \\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"#     \"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"#      \"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u     \"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \":   `%.*s'\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search    %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \":  \\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \" : `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-,  CTRL-Y  -.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-,     \\n\"\n\" CTRL-Y  DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \" [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \" CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \" RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"   '%s'\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \",  \\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"   %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"  , %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"#   VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"#     `vpath'.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u    `vpath'\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"#    ( `VPATH')  .\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"#  ( `VPATH')  :\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"#  .\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u  in %u  -.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"#   %.3f   , . %u    .\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \" ,    '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"\"\n#~ \"  SIGCHLD; %u    .\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"     \"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \" ,    \"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"\"\n#~ \"   , \\n\"\n#~ \"  make-\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"    make-\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"  make-  \"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"\"\n#~ \"   ,\\n\"\n#~ \"     N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"  ,   \"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"       \"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"   \"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"  -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"   \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"  -j  --jobs,   sh.exe.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"make      .\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"     `%sinclude'\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \" `%s'    \"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"#  .\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"#   %.1f   , . %u   .\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"#   %d.%d   , . %u   .\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/rw.po",
    "content": "# Kinyarwanda translations for make package.\n# Copyright (C) 2005 Free Software Foundation, Inc.\n# This file is distributed under the same license as the make package.\n# Steve Murphy <murf@e-tools.com>, 2005.\n# Steve performed initial rough translation from compendium built from translations provided by the following translators:\n# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.\n# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.\n# Noëlla Mupole <s24211045@tuks.co.za>, 2005.\n# Carole Karema <karemacarole@hotmail.com>, 2005.\n# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.\n# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.\n# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.\n# Antoine Bigirimana <antoine@e-tools.com>, 2005.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2005-04-04 10:55-0700\\n\"\n\"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\\n\"\n\"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, fuzzy, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"Kuri Gukoresha\"\n\n#: ar.c:137\n#, fuzzy\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"ni OYA Bihari ku\"\n\n#: ar.c:168\n#, fuzzy, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"OYA\"\n\n#: ar.c:171\n#, fuzzy, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"ni OYA a Byemewe\"\n\n#: ar.c:178\n#, fuzzy, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"OYA in\"\n\n#: ar.c:185\n#, fuzzy, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"Garuka ITEGEKONGENGA Bivuye ku\"\n\n#: arscan.c:69\n#, fuzzy, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"Byanze Kuri Modire Ibisobanuro Imimerere\"\n\n#: arscan.c:154\n#, fuzzy, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"Byanze Na: Imimerere\"\n\n#: arscan.c:165\n#, fuzzy, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"Kuri Gufungura Isomero Kuri GUSHAKISHA\"\n\n#: arscan.c:825\n#, fuzzy, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Bayite ku\"\n\n#: arscan.c:826\n#, fuzzy\nmsgid \" (name might be truncated)\"\nmsgstr \"(Izina:\"\n\n# svx/source\\items\\svxitems.src:RID_SVXITEMS_DATE_COMPLETE.text\n#: arscan.c:828\n#, fuzzy, c-format\nmsgid \"  Date %s\"\nmsgstr \"Itariki:\"\n\n#: arscan.c:829\n#, fuzzy, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"UID Ubwoko 0\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"\"\n\n#: commands.c:545\n#, fuzzy, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"***[%s]Gicurasi OYA Cyasibwe\"\n\n#: commands.c:548\n#, fuzzy, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"***Gicurasi OYA Cyasibwe\"\n\n#: commands.c:561\n#, fuzzy, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"***[%s]IDOSIYE\"\n\n#: commands.c:563\n#, fuzzy, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"***IDOSIYE\"\n\n#: commands.c:599\n#, fuzzy\nmsgid \"#  commands to execute\"\nmsgstr \"#Amabwiriza Kuri Gukora\"\n\n#: commands.c:602\n#, fuzzy\nmsgid \" (built-in):\"\nmsgstr \"(in\"\n\n#: commands.c:604\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \"(Bivuye Umurongo\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\n#: dir.c:995\n#, fuzzy, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"#%s:OYA\"\n\n#: dir.c:999\n#, fuzzy, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"#%s(Urufunguzo OYA\"\n\n#: dir.c:1003\n#, fuzzy, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"#%s(APAREYE OYA\"\n\n#: dir.c:1008\n#, fuzzy, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"#%s(APAREYE OYA\"\n\n#: dir.c:1035\n#, fuzzy, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"#%s(Urufunguzo\"\n\n#: dir.c:1039\n#, fuzzy, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"#%s(APAREYE\"\n\n#: dir.c:1044\n#, fuzzy, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"#%s(APAREYE\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Oya\"\n\n# scp/source\\office\\dir.lng:STR_DIR_DATEIEN.text\n#: dir.c:1053 dir.c:1074\n#, fuzzy\nmsgid \" files, \"\nmsgstr \"Idosiye\"\n\n#: dir.c:1055 dir.c:1076\n#, fuzzy\nmsgid \"no\"\nmsgstr \"Oya\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \"\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"in ububiko bw'amaderese\"\n\n#: expand.c:128\n#, fuzzy, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"IMPINDURAGACIRO Indango\"\n\n#: expand.c:266\n#, fuzzy\nmsgid \"unterminated variable reference\"\nmsgstr \"IMPINDURAGACIRO Indango\"\n\n#: file.c:270\n#, fuzzy, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"kugirango IDOSIYE ku\"\n\n#: file.c:275\n#, fuzzy, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"kugirango IDOSIYE Byabonetse ku Gushaka\"\n\n#: file.c:278\n#, fuzzy, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"ni NONEAHA i IDOSIYE Nka\"\n\n#: file.c:281\n#, fuzzy, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"kugirango in Bya kugirango\"\n\n#: file.c:301\n#, fuzzy, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"Guhindura izina UMWE Kuri MAHARAKUBIRI\"\n\n#: file.c:306\n#, fuzzy, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"Guhindura izina MAHARAKUBIRI Kuri UMWE\"\n\n#: file.c:381\n#, fuzzy, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"***IDOSIYE\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Idosiye\"\n\n#: file.c:781\n#, fuzzy, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s:Inyuma Bya Urutonde\"\n\n# sfx2/sdi\\sfxslots.src:SID_CURRENTTIME.text\n#: file.c:782\n#, fuzzy\nmsgid \"Current time\"\nmsgstr \"Iki Gihe\"\n\n#: file.c:881\n#, fuzzy\nmsgid \"# Not a target:\"\nmsgstr \"#a Intego\"\n\n#: file.c:903\n#, fuzzy\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#IDOSIYE Bya\"\n\n#: file.c:905\n#, fuzzy\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#Intego Bya\"\n\n#: file.c:907\n#, fuzzy\nmsgid \"#  Command-line target.\"\nmsgstr \"#Umurongo Intego\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#A Mburabuzi Cyangwa\"\n\n#: file.c:911\n#, fuzzy\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#Gushaka Byakozwe\"\n\n#: file.c:912\n#, fuzzy\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#Gushaka OYA Byakozwe\"\n\n#: file.c:914\n#, fuzzy, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#Ishusho\"\n\n#: file.c:916\n#, fuzzy\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#Idosiye ni\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"\"\n\n#: file.c:925\n#, fuzzy\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#Igihe Nta narimwe Ivivuwe\"\n\n#: file.c:927\n#, fuzzy\nmsgid \"#  File does not exist.\"\nmsgstr \"#Idosiye OYA\"\n\n#: file.c:929\n#, fuzzy\nmsgid \"#  File is very old.\"\nmsgstr \"#Idosiye ni ki/ bishaje\"\n\n#: file.c:934\n#, fuzzy, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#Byahinduwe\"\n\n#: file.c:937\n#, fuzzy\nmsgid \"#  File has been updated.\"\nmsgstr \"#Idosiye\"\n\n#: file.c:937\n#, fuzzy\nmsgid \"#  File has not been updated.\"\nmsgstr \"#Idosiye OYA\"\n\n#: file.c:941\n#, fuzzy\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#A\"\n\n#: file.c:944\n#, fuzzy\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#Amabwiriza A\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"\"\n\n#: file.c:957\n#, fuzzy\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#Kuri Q ni Gushyiraho\"\n\n#: file.c:960\n#, fuzzy\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#Kuri\"\n\n#: file.c:963\n#, fuzzy\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#Agaciro in\"\n\n#: file.c:970\n#, fuzzy\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#Agaciro in\"\n\n# LOCALIZATION NOTE (filesFolder):\n#    This is the name of the folder that is created parallel to a HTML file\n#    when it is saved \"With Images\". The %S section is replaced with the\n#    leaf name of the file being saved (minus extension).\n#: file.c:989\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"#files\"\n\n#: file.c:993\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"#Idosiye imbonerahamwe# stats\"\n\n#: function.c:759\n#, fuzzy\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"Bikurikije umubare Itangira Kuri Umumaro\"\n\n#: function.c:764\n#, fuzzy\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"Itangira Kuri Umumaro Biruta 0\"\n\n#: function.c:785\n#, fuzzy\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"Bikurikije umubare Itangira Kuri Umumaro\"\n\n#: function.c:787\n#, fuzzy\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"Bikurikije umubare ISEGONDA Kuri Umumaro\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"Byanze E\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"Byanze E\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"Byanze E\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"\"\n\n#: function.c:1725\n#, fuzzy, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Hejuru By'igihe gito IDOSIYE\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Umubare Bya ingingo Kuri Umumaro\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"ku iyi Umumaro\"\n\n#: function.c:2163\n#, fuzzy, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Kuri Umumaro Ibuze\"\n\n#: getopt.c:663\n#, fuzzy, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s:Ihitamo ni\"\n\n#: getopt.c:687\n#, fuzzy, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s:Ihitamo Kwemerera\"\n\n#: getopt.c:692\n#, fuzzy, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s:Ihitamo Kwemerera\"\n\n#: getopt.c:709 getopt.c:882\n#, fuzzy, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s:Ihitamo\"\n\n#: getopt.c:738\n#, fuzzy, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s:Ihitamo\"\n\n#: getopt.c:742\n#, fuzzy, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s:Ihitamo\"\n\n#: getopt.c:768\n#, fuzzy, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s:Ihitamo\"\n\n#: getopt.c:771\n#, fuzzy, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s:Sibyo Ihitamo\"\n\n#: getopt.c:801 getopt.c:931\n#, fuzzy, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s:Ihitamo\"\n\n#: getopt.c:848\n#, fuzzy, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s:Ihitamo ni\"\n\n#: getopt.c:866\n#, fuzzy, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s:Ihitamo Kwemerera\"\n\n#: hash.c:51\n#, fuzzy, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"Bayite kugirango imbonerahamwe# Ububiko\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, fuzzy, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"kugirango kugirango\"\n\n#: implicit.c:57\n#, fuzzy, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"kugirango kugirango\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"\"\n\n#: implicit.c:476\n#, fuzzy, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Ishusho Na:\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"\"\n\n#: implicit.c:710\n#, fuzzy, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Nka\"\n\n#: implicit.c:730\n#, fuzzy, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"kugirango a Na: IDOSIYE\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"By'igihe gito IDOSIYE\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"\"\n\n# sw/source\\ui\\utlui\\initui.src:RID_SW_SHELLRES.STR_CALC_DEFAULT.text\n#: job.c:394\n#, fuzzy, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"***[%s]Ikosa**\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \"\"\n\n#: job.c:488\n#, fuzzy\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"***kugirango\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \"\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"\"\n\n#: job.c:704\n#, fuzzy, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Hejuru IDOSIYE\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Bivuye\"\n\n#: job.c:862\n#, fuzzy\nmsgid \"write jobserver\"\nmsgstr \"Kwandika\"\n\n#: job.c:864\n#, fuzzy, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"kugirango\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"Byanze Byanze Kuri E\"\n\n#: job.c:1387 job.c:2020\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"in Byanze\"\n\n#: job.c:1455\n#, fuzzy, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"ku i\"\n\n#: job.c:1709\n#, fuzzy, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"kugirango\"\n\n#: job.c:1718\n#, fuzzy\nmsgid \"read jobs pipe\"\nmsgstr \"Gusoma\"\n\n#: job.c:1832\n#, fuzzy\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"Ibirimo Imbibi ku iyi Sisitemu\"\n\n#: job.c:1834\n#, fuzzy\nmsgid \"cannot enforce load limit: \"\nmsgstr \"Ibirimo\"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"Byanze Byanze Kuri E\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"Ubwoko Tegereza kugirango\"\n\n#: job.c:2085\n#, fuzzy, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s:OYA Byabonetse\"\n\n#: job.c:2145\n#, fuzzy, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s:Porogaramu OYA Byabonetse\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$Byahinduwe NONEAHA\"\n\n#: job.c:2789\n#, fuzzy, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"By'igihe gito IDOSIYE\"\n\n#: job.c:2902\n#, fuzzy, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s(Umurongo Igikonoshwa Imvugiro\"\n\n# crashrep/source\\all\\crashrep.lng:%OPTIONS_BUTTON%.text\n#: main.c:291\n#, fuzzy\nmsgid \"Options:\\n\"\nmsgstr \"Amahitamo...\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"-B M kugirango Bihuye neza\"\n\n#: main.c:294\n#, fuzzy\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"-Buri gihe Ubwoko Ubwoko Byose\"\n\n#: main.c:296\n#, fuzzy\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"-C bushyinguro Kuri Mbere\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"-D Bya Ibisobanuro\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"--Kosora amakosa Bya Ibisobanuro\"\n\n#: main.c:303\n#, fuzzy\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"-E Ibihinduka\"\n\n#: main.c:306\n#, fuzzy\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"-F IDOSIYE Nka a\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"-h Ifashayobora iyi Ubutumwa Na Gusohoka\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"-i Kwirengagiza Amakosa Amakosa Bivuye Amabwiriza\"\n\n#: main.c:313\n#, fuzzy\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"-Gushyiramo kugirango\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"-j ku Rimwe Bidashira Na: Oya\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"-K Gumana: Ryari:\"\n\n#: main.c:320\n#, fuzzy\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"-L Ibirimo Impuzandengo KININI Ibirimo Gutangira Igikubo Ibirimo ni munsi\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\n#, fuzzy\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"-N Gucapa Gukoresha Gukoresha Amabwiriza Gucapa\"\n\n#: main.c:328\n#, fuzzy\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"-o ki/ bishaje IDOSIYE ki/ bishaje Kuri ki/ bishaje Na\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"-P Gucapa Ibyatanzwe SHINGIRO By'imbere Ububikoshingiro\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"-Q Oya Amabwiriza Gusohoka Imimerere NIBA Hejuru Kuri Itariki\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"-R Oya i in\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"-Oya Ibihinduka i in IMPINDURAGACIRO Amagenamiterere\"\n\n#: main.c:339\n#, fuzzy\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"-S Amabwiriza\"\n\n#: main.c:341\n#, fuzzy\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"-Oya Gumana: Bidakora K\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"-T Bya\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"-v Verisiyo i Verisiyo Umubare Bya Ubwoko Na Gusohoka\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"-W Gucapa bushyinguro i KIGEZWEHO bushyinguro\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"--Oya Gucapa bushyinguro Bidakora W ATARIIGIHARWE NIBA ku\"\n\n#: main.c:352\n#, fuzzy\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"-NIBA Gishya IDOSIYE Gishya Kuri Gishya\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"--kidasobanuye Ibihinduka Ryari: kidasobanuye IMPINDURAGACIRO ni\"\n\n#: main.c:549\n#, fuzzy\nmsgid \"empty string invalid as file name\"\nmsgstr \"ubusa Ikurikiranyanyuguti Sibyo Nka IDOSIYE Izina:\"\n\n#: main.c:630\n#, fuzzy, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"Kitazwi Kosora amakosa urwego\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s:ITEGEKONGENGA Aderesi\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"Irengayobora(-) Muyunguruzi... Bivuye Porogaramu\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Kwandika ku Aderesi\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Gusoma ku Aderesi\"\n\n#: main.c:762 main.c:773\n#, fuzzy, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"Igenamiterere\"\n\n#: main.c:814\n#, fuzzy, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"Inzira Gushaka Gushyiraho\"\n\n#: main.c:1236\n#, fuzzy, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%sni kugirango amasogonda\"\n\n#: main.c:1238\n#, fuzzy, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"Byakozwe\"\n\n#: main.c:1466\n#, fuzzy\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Bivuye Bisanzwe Iyinjiza\"\n\n#: main.c:1505 vmsjobs.c:486\n#, fuzzy\nmsgid \"fopen (temporary file)\"\nmsgstr \"By'igihe gito IDOSIYE\"\n\n#: main.c:1511\n#, fuzzy\nmsgid \"fwrite (temporary file)\"\nmsgstr \"By'igihe gito IDOSIYE\"\n\n#: main.c:1640\n#, fuzzy\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"j OYA ku iyi\"\n\n#: main.c:1641\n#, fuzzy\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Kuri UMWE Ubwoko\"\n\n#: main.c:1656\n#, fuzzy\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"By'imbere Ikosa Igikubo Amahitamo\"\n\n#: main.c:1664\n#, fuzzy, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"By'imbere Ikosa Sibyo Ikurikiranyanyuguti\"\n\n#: main.c:1674\n#, fuzzy\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"Iburira in Ubwoko\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"\"\n\n#: main.c:1687\n#, fuzzy\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"Iburira ikoresha Kuri Ubwoko\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"\"\n\n#: main.c:1845\n#, fuzzy, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"OYA\"\n\n#: main.c:1924\n#, fuzzy, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Kuri\"\n\n#: main.c:1941\n#, fuzzy, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"OYA Byabonetse\"\n\n#: main.c:1946\n#, fuzzy, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"OYA Byabonetse\"\n\n#: main.c:2016\n#, fuzzy\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Guhindura>> Inyuma Kuri Umwimerere bushyinguro\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Gukora:%s\"\n\n#: main.c:2140\n#, fuzzy\nmsgid \"unlink (temporary file): \"\nmsgstr \"Kureka guhuza By'igihe gito IDOSIYE\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\n#, fuzzy\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Na Oya Byabonetse\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"\"\n\n#: main.c:2222\n#, fuzzy\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"Iburira SKEW Gicurasi\"\n\n#: main.c:2383\n#, fuzzy, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Amahitamo Intego\"\n\n#: main.c:2389\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"Porogaramu kugirango\"\n\n#: main.c:2391\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"Porogaramu kugirango\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Kuri Ubwoko org\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"i Ihitamo a Umubare Wuzuye\"\n\n#: main.c:2518\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"i Ihitamo a Umubare Wuzuye\"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sThisni Kigenga i Inkomoko kugirango ni OYA ATARIIGIHARWE kugirango Cyangwa\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"Porogaramu kugirango\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"Porogaramu kugirango\"\n\n#: main.c:2968\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"#Ibyatanzwe SHINGIRO Byacapwe ku\"\n\n#: main.c:2978\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"#Ibyatanzwe SHINGIRO ku\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s:Kitazwi bushyinguro\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s:Kitazwi bushyinguro\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s:bushyinguro\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s:bushyinguro\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]:Kitazwi bushyinguro\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]:Kitazwi bushyinguro\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]:bushyinguro\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]:bushyinguro\"\n\n#: misc.c:285\n#, fuzzy\nmsgid \".  Stop.\\n\"\nmsgstr \".Hagarara\"\n\n# # @name OTHER\n# # @loc none\n#: misc.c:306\n#, fuzzy, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Ikosa itazwi\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n# desktop/source\\app\\ssodlg.src:DLG_SSOLOGIN.text\n#: misc.c:324\n#, fuzzy, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s:%s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\n#, fuzzy\nmsgid \"virtual memory exhausted\"\nmsgstr \"Kitaboneka Ububiko\"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s:Ukoresha: Itsinda\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Ikosa Kuri\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"Kwandika\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"\"\n\n#: read.c:317\n#, fuzzy, c-format\nmsgid \" (no default goal)\"\nmsgstr \"(Oya Mburabuzi\"\n\n#: read.c:319\n#, fuzzy, c-format\nmsgid \" (search path)\"\nmsgstr \"(Gushaka Inzira\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \"\"\n\n#: read.c:323\n#, fuzzy, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \"(Oya\"\n\n#: read.c:623\n#, fuzzy\nmsgid \"invalid syntax in conditional\"\nmsgstr \"Sibyo in\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"\"\n\n#: read.c:645 read.c:673 variable.c:1316\n#, fuzzy\nmsgid \"empty variable name\"\nmsgstr \"ubusa IMPINDURAGACIRO Izina:\"\n\n#: read.c:662\n#, fuzzy\nmsgid \"empty `override' directive\"\nmsgstr \"ubusa\"\n\n#: read.c:687\n#, fuzzy\nmsgid \"invalid `override' directive\"\nmsgstr \"Sibyo\"\n\n#: read.c:854\n#, fuzzy\nmsgid \"commands commence before first target\"\nmsgstr \"Amabwiriza Mbere Itangira Intego\"\n\n#: read.c:905\n#, fuzzy\nmsgid \"missing rule before commands\"\nmsgstr \"Ibuze Mbere Amabwiriza\"\n\n#: read.c:992\n#, fuzzy, c-format\nmsgid \"missing separator%s\"\nmsgstr \"Ibuze Mutandukanya\"\n\n#: read.c:994\n#, fuzzy\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"(Impuzandengo- Bya 8 Imyanya\"\n\n#: read.c:1152\n#, fuzzy\nmsgid \"missing target pattern\"\nmsgstr \"Ibuze Intego Ishusho\"\n\n#: read.c:1154\n#, fuzzy\nmsgid \"multiple target patterns\"\nmsgstr \"Igikubo Intego\"\n\n#: read.c:1158\n#, fuzzy, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"Intego Ishusho Kirimo Oya\"\n\n#: read.c:1286\n#, fuzzy\nmsgid \"missing `endif'\"\nmsgstr \"Ibuze\"\n\n#: read.c:1377\n#, fuzzy\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Umwandiko Nyuma\"\n\n#: read.c:1411\n#, fuzzy\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"Ibuze\"\n\n#: read.c:1454\n#, fuzzy, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Umwandiko Nyuma\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Intego IMPINDURAGACIRO Insobanuro\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\n#, fuzzy\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"Bivanze Na Ishusho\"\n\n#: read.c:1924\n#, fuzzy\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"Bivanze Na Bisanzwe\"\n\n#: read.c:1954\n#, fuzzy, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"Intego BIHUYE i Intego Ishusho\"\n\n#: read.c:1973 read.c:2074\n#, fuzzy, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"Intego IDOSIYE Byombi Na Ibyinjijwe\"\n\n#: read.c:1979\n#, fuzzy, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"Intego Birenzeho Rimwe in i\"\n\n#: read.c:1988\n#, fuzzy, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"Iburira Amabwiriza kugirango Intego\"\n\n#: read.c:1991\n#, fuzzy, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"Iburira ki/ bishaje Amabwiriza kugirango Intego\"\n\n#: read.c:2575\n#, fuzzy\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"Iburira Inyuguti Bya Umurongo\"\n\n#: remake.c:229\n#, fuzzy, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Kuri Byakozwe kugirango\"\n\n#: remake.c:230\n#, fuzzy, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s'ni Hejuru Kuri Itariki\"\n\n#: remake.c:297\n#, fuzzy, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"IDOSIYE\"\n\n#: remake.c:349\n#, fuzzy, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sNoKuri Ubwoko Intego\"\n\n#: remake.c:351\n#, fuzzy, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sNoKuri Ubwoko Intego ku\"\n\n#: remake.c:378\n#, fuzzy, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Intego IDOSIYE\"\n\n#: remake.c:385\n#, fuzzy, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Na Byanze Kuri Kuvugurura IDOSIYE\"\n\n#: remake.c:400\n#, fuzzy, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Idosiye\"\n\n#: remake.c:410\n#, fuzzy, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Ivugurura IDOSIYE\"\n\n#: remake.c:413\n#, fuzzy, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Ivugurura IDOSIYE\"\n\n#: remake.c:434\n#, fuzzy, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Idosiye OYA\"\n\n#: remake.c:441\n#, fuzzy, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"***IDOSIYE a kirekire Imikemurire Igihe\"\n\n#: remake.c:454 remake.c:962\n#, fuzzy, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"kugirango\"\n\n#: remake.c:456 remake.c:964\n#, fuzzy, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Byabonetse kugirango\"\n\n#: remake.c:462 remake.c:970\n#, fuzzy, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Mburabuzi Amabwiriza kugirango\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"\"\n\n#: remake.c:601\n#, fuzzy, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Bya Intego IDOSIYE\"\n\n#: remake.c:607\n#, fuzzy, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Bya\"\n\n#: remake.c:620\n#, fuzzy, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Hejuru ku Intego IDOSIYE\"\n\n#: remake.c:625\n#, fuzzy, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"OYA Bya Amakosa\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"ni Itondekanya kugirango Intego\"\n\n#: remake.c:682\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Bya Intego OYA\"\n\n#: remake.c:687\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"ni Intego\"\n\n#: remake.c:690\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"ni Intego\"\n\n#: remake.c:708\n#, fuzzy, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"ni MAHARAKUBIRI Na Oya\"\n\n#: remake.c:715\n#, fuzzy, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"Amabwiriza kugirango Na Oya Byahinduwe\"\n\n#: remake.c:720\n#, fuzzy, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Kuri Buri gihe Ubwoko Ibendera\"\n\n#: remake.c:728\n#, fuzzy, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Kuri Intego\"\n\n#: remake.c:730\n#, fuzzy, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \";ikoresha Izina:\"\n\n#: remake.c:750\n#, fuzzy, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Intego\"\n\n#: remake.c:756\n#, fuzzy, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"Kwirengagiza Izina:\"\n\n#: remake.c:765\n#, fuzzy, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Bya Gukoresha\"\n\n#: remake.c:772\n#, fuzzy, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Kuri Intego IDOSIYE\"\n\n#: remake.c:775\n#, fuzzy, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Intego IDOSIYE\"\n\n#: remake.c:778\n#, fuzzy, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"IDOSIYE Q\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Idosiye Igihe in i\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Idosiye Igihe S in i\"\n\n#: remake.c:1511\n#, fuzzy, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"\"\n\".Project- Id- Version: basctl\\n\"\n\"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\\n\"\n\"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\\n\"\n\"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\\n\"\n\"Content- Type: text/ plain; charset= UTF- 8\\n\"\n\"Content- Transfer- Encoding: 8bit\\n\"\n\"X- Generator: KBabel 1. 0\\n\"\n\".\"\n\n#: remote-cstms.c:125\n#, fuzzy, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Kohereza\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \"\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"\"\n\n#: signame.c:85\n#, fuzzy\nmsgid \"unknown signal\"\nmsgstr \"Kitazwi\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Hagarikira aho\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Kuvamo\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"\"\n\n#: signame.c:105\n#, fuzzy\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Aho bahagarara\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"\"\n\n#: signame.c:119\n#, fuzzy\nmsgid \"Floating point exception\"\nmsgstr \"Akadomo Irengayobora(-)\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"\"\n\n#: signame.c:125\n#, fuzzy\nmsgid \"Bus error\"\nmsgstr \"Ikosa\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"\"\n\n#: signame.c:131\n#, fuzzy\nmsgid \"Bad system call\"\nmsgstr \"Sisitemu\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"\"\n\n#: signame.c:143\n#, fuzzy\nmsgid \"User defined signal 1\"\nmsgstr \"1.\"\n\n#: signame.c:146\n#, fuzzy\nmsgid \"User defined signal 2\"\nmsgstr \"2.\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Kyahagariswe\"\n\n#: signame.c:163\n#, fuzzy\nmsgid \"Stopped (tty input)\"\nmsgstr \"Iyinjiza\"\n\n#: signame.c:166\n#, fuzzy\nmsgid \"Stopped (tty output)\"\nmsgstr \"Ibisohoka\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"\"\n\n#: signame.c:172\n#, fuzzy\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Igihe\"\n\n#: signame.c:175\n#, fuzzy\nmsgid \"File size limit exceeded\"\nmsgstr \"Idosiye Ingano\"\n\n#: signame.c:178\n#, fuzzy\nmsgid \"Virtual timer expired\"\nmsgstr \"Byarengeje igihe\"\n\n#: signame.c:181\n#, fuzzy\nmsgid \"Profiling timer expired\"\nmsgstr \"Byarengeje igihe\"\n\n#: signame.c:187\n#, fuzzy\nmsgid \"Window changed\"\nmsgstr \"Byahinduwe\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\n#, fuzzy\nmsgid \"Urgent I/O condition\"\nmsgstr \"Ibisabwa\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"\"\n\n#: signame.c:218\n#, fuzzy\nmsgid \"Information request\"\nmsgstr \"Kubaza...\"\n\n#: signame.c:221\n#, fuzzy\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Akadomo OYA Bihari\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n# Lock column values\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"mburabuzi\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"\"\n\n#: variable.c:1378\n#, fuzzy\nmsgid \"environment under -e\"\nmsgstr \"E\"\n\n#: variable.c:1381\n#, fuzzy\nmsgid \"command line\"\nmsgstr \"Komandi: Umurongo\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"Byikoresha\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \"(Bivuye Umurongo\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"#IMPINDURAGACIRO Gushyiraho imbonerahamwe# stats\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"#IMPINDURAGACIRO Uduciro\"\n\n#: variable.c:1467\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"#Ishusho IMPINDURAGACIRO Uduciro\"\n\n#: variable.c:1469\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"#%uIshusho IMPINDURAGACIRO Uduciro\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"\"\n\n#: vmsfunctions.c:94\n#, fuzzy, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys Gushaka Byanze Na:\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:175\n#, fuzzy, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"By'imbere Ikosa\"\n\n#: vmsjobs.c:268\n#, fuzzy, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-Iburira\"\n\n#: vmsjobs.c:284\n#, fuzzy, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-Iburira Gicurasi Kuri Gushoboza Bivuye\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:457\n#, fuzzy, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Komandi:\"\n\n#: vmsjobs.c:479\n#, fuzzy, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"ubusa\"\n\n#: vmsjobs.c:491\n#, fuzzy, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Iyinjiza Bivuye\"\n\n#: vmsjobs.c:498\n#, fuzzy, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Ikosa Kuri\"\n\n#: vmsjobs.c:505\n#, fuzzy, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Ibisohoka Kuri\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\n#: vpath.c:588\n#, fuzzy\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"#Gushaka Inzira\"\n\n#: vpath.c:590\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"#%u`Gushaka Inzira\"\n\n#: vpath.c:593\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"#Rusange IMPINDURAGACIRO Gushaka Inzira\"\n\n#: vpath.c:599\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"#IMPINDURAGACIRO Gushaka Inzira\"\n\n#, fuzzy\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Ikosa Mo Imbere\"\n\n#, fuzzy\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"a\"\n\n#, fuzzy\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"OYA j Cyangwa NIBA exe ni OYA Bihari\"\n\n#, fuzzy\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Ubwoko kugirango UMWE Ubwoko\"\n\n#, fuzzy\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"Oya IDOSIYE Izina: kugirango\"\n\n#, fuzzy\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"Intego Ibibabi Ishusho ubusa\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/stamp-po",
    "content": "timestamp\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/sv.po",
    "content": "# @(#) Swedish messages v1.15 for make 3.79.1\n# Copyright (C) 2002 Free Software Foundation, Inc.\n# Tomas Gradin <tg@df.lth.se>, 1996-2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.79.1\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-08-02 14:28+0200\\n\"\n\"Last-Translator: Tomas Gradin <tg@df.lth.se>\\n\"\n\"Language-Team: Swedish <sv@li.org>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=iso-8859-1\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"frsk att anvnda en funktion som inte stds: \\\"%s\\\"\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"nydatering av arkivmedlem r inte tillgngligt i VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"nydatera: Arkivet \\\"%s\\\" finns inte\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"nydatera: \\\"%s\\\" r inte ngot giltigt arkiv\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"nydatera: medlemmen \\\"%s\\\" finns inte i \\\"%s\\\"\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"nydatera: Felaktig returkod frn ar_member_touch p \\\"%s\\\"\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\"lbr$set_module misslyckades med att extrahera modulinformation, status = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control misslyckades och gav status = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"kan inte ppna biblioteket \\\"%s\\\" fr att sl upp medlemmen \\\"%s\\\"\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Medlem \\\"%s\\\"%s: %ld byte vid %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (namnet kan vara avkortat)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Datum %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, flaggor = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Avbrott.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Arkivmedlemmen \\\"%s\\\" kan vara felaktig; ej borttagen\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Arkivmedlemmen \\\"%s\\\" kan vara felaktig; ej borttagen\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Tar bort filen \\\"%s\\\"\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Tar bort filen \\\"%s\\\"\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  kommandon att utfra\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (inbyggd):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (frn \\\"%s\\\", rad %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Kataloger\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: kunde inte ta status.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (nyckel %s, mtid %d): kunde inte ppnas.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (enhet %d, inod [%d,%d,%d]): kunde inte ppnas.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (enhet %ld, inod %ld): kunde inte ppnas.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (nyckel %s, mtid %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (enhet %d, inod [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (enhet %ld, inod %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Inga\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" filer, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"inga\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" omjligheter\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" hittills.\"\n\n#: dir.c:1079\n#, fuzzy, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" omjligheter i %u kataloger.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Den rekursiva variabeln \\\"%s\\\" hnvisar till sig sjlv (s smningom)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"oavslutad variabelreferens\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Kommandon angavs fr filen \\\"%s\\\" p %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"Kommandon fr filen \\\"%s\\\" hittades genom skning med implicit regel,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"men \\\"%s\\\" anses nu vara samma fil som \\\"%s\\\".\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\"Kommer att bortse frn kommandon fr \\\"%s\\\" till frmn fr dem som gller \"\n\"\\\"%s\\\".\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"kan inte ndra namn frn enkelkolon \\\"%s\\\" till dubbelkolon \\\"%s\\\"\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"kan inte ndra namn frn dubbelkolon \\\"%s\\\" till enkelkolon \\\"%s\\\"\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Tar bort vergngsfilen \\\"%s\\\"\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** Tar bort vergngsfilen \\\"%s\\\"\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Tidsvrde utanfr grnser; erstter med %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Nuvarande tid\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Inte ett ml:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Vrdefull fil (ndvndig fr .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Ltsasml (ndvndig fr .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Kommandoradsml.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  En standardmakefil (eller enligt MAKEFILES).\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Implicit regelskning har genomfrts.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Implicit regelskning har inte genomfrts.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Implicit/statisk mnsterstam: \\\"%s\\\"\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  Filen r ett vergende beroende.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Skapar ocks:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  ndringstiden har inte kontrollerats.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Filen finns inte.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Filen r mycket gammal.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Senast ndrad %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Filen har uppdaterats.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Filen har inte uppdaterats.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Kommandokrning pgr (DETTA R ETT FEL).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Beroendekommandon krs (DETTA R ETT FEL).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Uppdateringen lyckades.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Behver uppdateras (-q har angivits).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Uppdateringen misslyckades.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  Ogiltigt vrde i medlem av \\\"update_status\\\"!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  Ogiltigt vrde i medlem av \\\"command_state\\\"!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Filer\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"icke-numeriskt frsta argument till funktionen \\\"word\\\"\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"det frsta argumentet till funktionen \\\"word\\\" mste vara strre n 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"icke-numeriskt frsta argument till funktionen \\\"wordlist\\\"\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"icke-numeriskt andra argument till funktionen \\\"wordlist\\\"\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) misslyckades (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Fel) misslyckades (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() misslyckades (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() misslyckades\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Stdar bort tillfllig omgngsfil %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Otillrckligt antal argument (%d) till funktionen \\\"%s\\\"\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Ej implementerat p denna plattform: funktionen \\\"%s\\\"\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"oavslutat funktionsanrop \\\"%s\\\": \\\"%c\\\" saknas\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: flaggan \\\"%s\\\" r tvetydig\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: flaggan \\\"--%s\\\" tar inget argument\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: flaggan \\\"%c%s\\\" tar inget argument\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: flaggan \\\"%s\\\" krver ett argument\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: oknd flagga \\\"--%s\\\"\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: oknd flagga \\\"%c%s\\\"\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: otillten flagga -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: ogiltig flagga -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: flaggan krver ett argument -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: flaggan \\\"-W %s\\\" r tvetydig\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: flaggan \\\"-W %s\\\" tar inget argument\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Letar efter en implicit regel fr \\\"%s\\\".\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Letar efter en implicit regel fr arkivmedlemmen \\\"%s\\\".\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Undviker rekursion orsakad av implicit regel.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Prvar mnsterregel med stammen \\\"%.*s\\\".\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Avvisar det omjliga implicita beroendet \\\"%s\\\".\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Avvisar det omjliga regelbaserade beroendet \\\"%s\\\".\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Prvar det implicita beroendet \\\"%s\\\".\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Prvar det regelbaserade beroendet \\\"%s\\\".\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Hittade den ndvndiga \\\"%s\\\" som VPATH \\\"%s\\\"\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Letar efter en regel med vergngsfilen \\\"%s\\\".\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (tillfllig fil)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Fel 0x%x (ignoreras)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Fel 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Fel %d (ignoreras)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Fel %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (minnesdump)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Invntar oavslutade jobb...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Levande barnprocess 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (fjrr)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Inhstar misslyckad barnprocess: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Inhstar lyckad barnprocess: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Stdar bort tillfllig omgngsfil %s\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Tar bort barnprocessen 0x%08lx PID %ld %s frn kedjan.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"skriver till jobbserver\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Frigjorde symbol fr barnprocessen 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() misslyckades med processtart (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Rknade till %d argument vid misslyckad start\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Fr upp barnprocessen 0x%08lx (%s) PID %ld%s p kedjan.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Erhll symbol fr barnprocessen 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"lser frn jobbledning\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"kan inte upprtthlla lastbegrnsningar i detta operativsystem\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"kan inte upprtthlla lastbegrnsning: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() misslyckades med processtart (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make inhstade barnprocessen pid %d, invntar pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Kommandot hittades inte\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Skalprogrammet hittades inte\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ndrades (var \\\"%s\\\", r nu \\\"%s\\\")\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Skapar tillfllig omgngsfil %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (rad %d) Felaktigt skalsammanhang (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Flaggor:\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"Ignoreras av kompatibilitetsskl\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"Skriv ut massor av felskningsinformation\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"Skriv ut olika sorters felskningsinformation\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"Skriv ut detta meddelande och avsluta\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"Ignorera kommandofel\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"Tillt N samtidiga jobb; ondligt mnga om inget antal anges\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"Fortstt ven om vissa ml inte kan skapas\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"Skriv ut makes interna databas\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"Kr inga kommandon; slutstatus visar frskheten\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"Inaktivera de inbyggda implicita reglerna\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"Inaktivera de inbyggda variabelinstllningarna\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"Nydatera ml i stllet fr att terskapa dem\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"Skriv ut makes versionsnummer och avsluta\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"Skriv ut aktuell katalog\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"Stng av -w, ven om det r implicit pslaget\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"Varna vid anvndning av en odefinierad variabel\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"en tom strng r ett ogiltigt filnamn\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"oknd felskningsniv \\\"%s\\\" angiven\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Avbrott/Undantag fngat (kod = 0x%x, adress = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Ett ohanterat undantagsfilter anropades frn programmet %s\\n\"\n\"Undantagskod = %x\\n\"\n\"Undantagsflaggor = %x\\n\"\n\"Undantagsadress = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"tkomstfrseelse: skrivinstruktion p adressen %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"tkomstfrseelse: lsinstruktion p adressen %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell ger default_shell = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"find_and_set_shell-skvgen gav default_shell = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s suspenderas i 30 sekunder...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"frdig med sleep(30). Fortstter.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefil frn standardinkanalen angavs dubbelt.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (tillfllig fil)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (tillfllig fil)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Parallella jobb (-j) stds inte p denna plattform.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"terstller till enkeljobbslge (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"internt fel: flera \\\"--jobserver-fds\\\"-flaggor\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"internt fel: ogiltig \\\"--jobserver-fds\\\"-strng \\\"%s\\\"\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"varning: -jN framtvingat i del-make: inaktiverar jobbserverlge.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"duplicerar jobbserver\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"varning: jobbserver otillgnglig: anvnder -j1. Lgg till \\\"+\\\" i \"\n\"frldraregeln.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"skapar jobbledning\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"iordningstller ledning till jobbserver\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Uppdaterar makefiler...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefilen \\\"%s\\\" torde loopa; terskapas inte.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Misslyckades med att terskapa makefilen \\\"%s\\\".\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Den inkluderade makefilen \\\"%s\\\" hittades inte.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Makefilen \\\"%s\\\" hittades inte\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Kunde inte terg till ursprungskatalogen.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Utfr p nytt:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"avlnka (tillfllig fil): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Inga ml angavs och ingen makefil hittades\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Inga ml\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Uppdaterar slutml...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"varning:  Klockfrskjutning upptckt.  Bygget kan ha blivit ofullstndigt.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Anvndning: %s [flaggor] [ml] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Anml fel till <bug-make@gnu.org>.\\n\"\n\"Skicka synpunkter p versttningen till <sv@li.org>.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"flaggan \\\"-%c\\\" krver ett positivt heltal som argument\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"flaggan \\\"-%c\\\" krver ett positivt heltal som argument\"\n\n#: main.c:2942\n#, fuzzy, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\", av Richard Stallman och Roland McGrath.\\n\"\n\"%sByggd fr %s\\n\"\n\"%sCopyright  1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n\"%s\\tFree Software Foundation, Inc.\\n\"\n\"%sDetta r fri programvara; se kllkoden fr kopieringsvillkor.\\n\"\n\"%sINGA garantier lmnas, inte ens vid KP eller FR NGOT SPECIFIKT \"\n\"NDAML.\\n\"\n\"\\n\"\n\"%sAnml fel till <bug-make@gnu.org>.\\n\"\n\"%sSkicka synpunkter p versttningen till <sv@li.org>.\\n\"\n\"\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make-databas, utskriven %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Frdigstllde Make-databas %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"en oknd katalog\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"en oknd katalog\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"katalogen \\\"%s\\\"\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"katalogen \\\"%s\\\"\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"en oknd katalog\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"en oknd katalog\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"katalogen \\\"%s\\\"\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"katalogen \\\"%s\\\"\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Stannar.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Oknt fel %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"virtuellt minne uttmt\"\n\n#: misc.c:646\n#, fuzzy, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s tkomst: anvndare %lu (verklig %lu), grupp %lu (verklig %lu)\\n\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"Inledd\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"Felkanal omdirigerad till %s\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"skriver till jobbserver\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Lser makefiler...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Lser makefil \\\"%s\\\"\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (inget standardml)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (skvg)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (oviktigt)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (ingen ~-expansion)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"ogiltig syntax i villkorssats\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"verfldigt \\\"endef\\\"\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"tomt variabelnamn\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"tomt \\\"override\\\"-direktiv\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"ogiltigt \\\"override\\\"-direktiv\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"kommandon inleds fre frsta mlet\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"regel saknas fre kommandon\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"separator saknas%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (var avsikten TAB i stllet fr 8 mellanslag?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"mlmnster saknas\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"flera mlmnster\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"mlmnstret innehller inget \\\"%%\\\"\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"\\\"endif\\\" saknas\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"verfldig text efter direktivet \\\"endef\\\"\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"\\\"endef\\\" saknas, oavslutat \\\"define\\\"\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"verfldig text efter direktivet \\\"%s\\\"\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"verfldigt \\\"%s\\\"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"endast ett \\\"else\\\" per villkor\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Felformad mlberoende variabeldefinition\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"blandade implicita regler och statiska mnsterregler\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"blandade implicita regler och normala regler\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"mlet \\\"%s\\\" motsvarar inte mlmnstret\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"mlfilen \\\"%s\\\" har bde poster med : och ::\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"mlet \\\"%s\\\" anges flera gnger i samma regel.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"varning: sidostter kommandon fr mlet \\\"%s\\\"\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"varning: bortser frn gamla kommandon fr mlet \\\"%s\\\"\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"varning: NUL-tecken upptckt, bortser frn resten av raden\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Inget behver gras fr \\\"%s\\\".\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"\\\"%s\\\" r frsk.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Beskr filen \\\"%s\\\".\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sIngen regel fr att skapa mlet \\\"%s\\\"%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sIngen regel fr att skapa mlet \\\"%s\\\", som behvs till \\\"%s\\\"%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"vervger mlfilen \\\"%s\\\".\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Misslyckades nyligen med att uppdatera filen \\\"%s\\\".\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Filen \\\"%s\\\" har redan vervgts.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Uppdaterar fortfarande filen \\\"%s\\\".\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Slutfrde uppdaterandet av filen \\\"%s\\\".\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Filen \\\"%s\\\" finns inte.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Hittade en implicit regel fr \\\"%s\\\".\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Hittade ingen implicit regel fr \\\"%s\\\".\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Anvnder standardkommandon fr \\\"%s\\\".\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Det cirkulra beroendet %s <- %s slpptes.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Frdigstllde de ndvndiga frutsttningarna fr mlfilen \\\"%s\\\".\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"De ndvndiga frutsttningarna fr \\\"%s\\\" hller p att skapas.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Ger upp med mlfilen \\\"%s\\\".\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Mlet \\\"%s\\\" terskapades inte p grund av fel.\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Den ndvndiga frutsttningen \\\"%s\\\" r ldre n mlet \\\"%s\\\".\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Den ndvndiga frutsttningen \\\"%s\\\" fr mlet \\\"%s\\\" finns inte.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Den ndvndiga frutsttningen \\\"%s\\\" r nyare n mlet \\\"%s\\\".\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Den ndvndiga frutsttningen \\\"%s\\\" r ldre n mlet \\\"%s\\\".\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Mlet \\\"%s\\\" r dubbelkolon och har inga beroenden.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\"Inga kommandon eller ndvndiga frutsttningar fr \\\"%s\\\" har frndrats.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Mlet \\\"%s\\\" behver inte terskapas\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; anvnder VPATH-namnet \\\"%s\\\"\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Mste terskapa mlet \\\"%s\\\".\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Bortser frn VPATH-namnet \\\"%s\\\".\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Kommandon fr \\\"%s\\\" krs.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Misslyckades med att terskapa mlfilen \\\"%s\\\".\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Mlfilen \\\"%s\\\" terskapades.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Mlfilen \\\"%s\\\" behver terskapas med -q.\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"*** Varning: Filen \\\"%s\\\" har ett ndringsdatum i framtiden (%s > %s)\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"*** Varning: Filen \\\"%s\\\" har ett ndringsdatum i framtiden (%s > %s)\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS-elementet \\\"%s\\\" r inte ngot mnster\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Customs kommer inte att exportera %s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Inga implicita regler.\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Inga implicita regler.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u implicita regler, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" slutregler.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"FEL: num_pattern_rules felaktigt!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"oknd signal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Avringd\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Avbrott\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Avslutad\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Otillten instruktion\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Sprningsflla\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Avbruten\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IO-flla\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Emulatorflla\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Flyttalsundantag\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Ddad\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Bussfel\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Segmenteringsfel\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Felaktigt systemanrop\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Ledningsbrott\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarmklocka\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Avslutad\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Anvndarsignal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Anvndarsignal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Barn avslutades\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Strmavbrott\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Stoppades\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Stoppades (tty-lsning)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Stoppades (tty-utskrift)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Stoppades (signal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU-tidsgrns verskreds\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Filstorleksgrns verskreds\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Virtuellt tidur lpte ut\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Profileringstidur lpte ut\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Fnster ndrat\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Fortsatte\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Brdskande I/O-lge\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O-tillflle\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Miste resurs\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Farosignal\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Informationsbegran\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Flyttalsprocessor inte tillgnglig\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"normal\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"milj\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefil\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"milj enligt -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"kommandorad\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"\\\"override\\\"-direktiv\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"automatisk\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (frn \\\"%s\\\", rad %lu):\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# %u variabler i %u hashbehllare.\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Variabler\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Mnsterspecifika variabelvrden\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Inga mnsterspecifika variabelvrden.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u mnsterspecifika variabelvrden\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"varning: odefinierad variabel \\\"%.*s\\\"\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search misslyckades och gav %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Varning: Tom omdirigering\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"internt fel: \\\"%s\\\" command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-varning, CTRL-Y lmnar efter sig underprocess(er).\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"-varning, CTRL-Y-hantering kanske behver terstllas frn DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"INBYGGT [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"INBYGGT CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"INBYGGT RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Oknt inbyggt kommando \\\"%s\\\"\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Fel, tomt kommando\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Inkanal omdirigerad till %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Felkanal omdirigerad till %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Utkanal omdirigerad till %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Utfr %s i stllet\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Fel vid avknoppning, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH-skvgar\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Inga \\\"vpath\\\"-skvgar.\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u \\\"vpath\\\"-skvgar.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Ingen allmn skvg (enligt \\\"VPATH\\\"-variabeln).\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Allmn skvg (enligt \\\"VPATH\\\"-variabeln):\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Inga filer.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u filer i %u hashbehllare.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# i genomsnitt %.3f filer per behllare, hgst %u filer i samma \"\n#~ \"behllare.\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Syntaxfel, r fortfarande innanfr '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"Erhll SIGCHLD; %u kvarvarande barnprocesser.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"KATALOG\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Byt till KATALOG frst\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"FLAGGOR\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Suspendera processen fr att mjliggra anslutning av felskare\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Miljvariabler sidostter makefiler\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FIL\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"Anvnd FIL som makefil\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"Genomsk KATALOG efter inkluderade makefiler\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Pbrja flera jobb endast om lasten understiger N\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"Kr inte kommandona, skriv bara ut dem\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"Betrakta FIL som mycket gammal och terskapa den inte\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"terge inte kommandon\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"Stnger av -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"Betrakta FIL som hur ny som helst\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Ange inte -j eller --jobs om sh.exe inte finns tillgnglig.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"terstller make fr enkeljobbslge.\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"Gr till\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Lmnar\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"inget filnamn till \\\"%sinclude\\\"\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"mlet \\\"%s\\\" har ett tomt beroendemnster\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Inga variabler.\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# i genomsnitt %1.f variabler per behllare, hgst %u i samma behllare.\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"# i genomsnitt %d.%d variabler per behllare, hgst %u i samma \"\n#~ \"behllare.\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/tr.po",
    "content": "# Turkish translations for GNU Make messages.\n# Copyright (C) 2002 Free Software Foundation, Inc.\n# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001-2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-10-05 18:13+0300\\n\"\n\"Last-Translator: Nilgün Belma Bugüner <nilgun@superonline.com>\\n\"\n\"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"X-Generator: KBabel 0.9.6\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"desteklenmeyen özelliği kullanmaya çalışıyor: `%s'\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"VMS'de işe yaramayan arşiv üyesine dokunup geçiyor\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"Dokunulup geçildi: Arşiv `%s' yok\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"Dokunulup geçildi: `%s' geçerli bir arşiv değil\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"Dokunulup geçildi: Üye `%s', `%s' içinde yok\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"Dokunulup geçildi: `%s' deki ar_member_touch'dan dönen kod hatalı\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_module modül bilgisini çıkarırken başarısız oldu, durum = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control durum =%d ile başarısız oldu\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"`%s' kaynakçası `%s' üyesine bakmak için açılamadı\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Üye `%s'%s: %ld bayt  %ld 'de (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \"(isim kırpılmış olmalı)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Tarih %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  Kull-kim = %d, Grup-kim = %d, kip = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Bırakıldı.\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Arşiv üyesi `%s' sahte olabilir; silinmedi\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Arşiv üyesi `%s' sahte olabilir; silinmedi\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] `%s' dosyası siliniyor\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** `%s' dosyası siliniyor\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  çalıştırma komutları\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (paket içinde):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (`%s'den, satır %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Dizin\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: durumlanamadı.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (anahtar (key) %s, değişiklik tarihi (mtime) %d): açılamadı.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (aygıt %d, i-düğüm [%d,%d,%d]): açılamadı.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (aygıt %ld, i-düğüm %ld): açılamadı.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (anahtar (key) %s, değişiklik tarihi (mtime) %d):\"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (aygıt %d, i-düğüm [%d,%d,%d]):\"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (aygıt %ld, i-düğüm %ld):\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Hayır\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" dosyaları,\"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"hayır\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"olanaksızlıklar\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" çok uzak.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" %lu dizinde olanaksızlıklar.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Çevrimsel değişken `%s' tekrar kendine bağıntılı (sonuçta)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"sonlandırılmamış değişken bağıntısı\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"`%s' dosyası için komutlar %s:%lu de belirtildi,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"`%s' dosyası için komutlar örtük kural aramasında bulundu,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"fakat `%s' şimdi `%s' dosyası ile aynı dosya olarak düşünülmeli.\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"`%s' dosyası için komutlar `%s' lehine yoksayılmış olacak.\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"tek-sütun `%s', çift-sütun `%s' olarak yeniden adlandırılamaz\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"çift-sütun `%s', tek-sütun `%s' olarak yeniden adlandırılamaz\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Aracı dosya `%s' siliniyor\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Aracı dosyalar siliniyor...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Tarih damgası kapsamdışı; yerine %s kullanılıyor\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Şu an\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Bir hedef değil:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#  Kıymetli dosya (.PRECIOUS  önceden gerekliliği).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  Sahte hedef (.PHONY önceden gerekliliği).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Komut-satırı hedefi.\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"\"\n\"#  Bir öntanımlı ya da MAKEFILES çevre değişkeni ile atanmış bir make dosyası\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  Örtük kural araştırması yapılmıştı.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  Örtük kural araştırması yapılmamıştı.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  Örtük/değişmeyen kalıp kökü: `%s'\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"\"\n\"#  Orta seviyede önceden gerekli bir dosya (öncelikle gerekli dosyalara \"\n\"aracılık eden dosya)\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Oluştursa da:\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Değişiklik zamanı hiç kontrol edilmedi.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  Dosya yok.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  Dosya çok eski.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#  Son değişiklik tarihi %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  Dosya güncelleştirilmişti.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  Dosya güncelleştirilmemişti.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Komutlar şu an işlemlerini sürdürüyor (BU BİR YAZILIM HATASI).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"\"\n\"#  Bağımlılıkların komutları işlemlerini sürdürüyor (BU BİR YAZILIM HATASI).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#   Tamamen güncellendi.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#   Güncellenmiş olması gerekir (-q verildi).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  Güncellenmiş olamadı.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  `update_status' üyesinde geçersiz değer!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  `command_state' üyesinde geçersiz değer!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Dosyalar\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# dosyaların hash tablosu durumları:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"`word' işlevinde sayısal olmayan ilk argüman\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"`word' işlevinin ilk argümanı sıfırdan büyük olmalı\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"`wordlist' işlevinde sayısal olmayan ilk argüman\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"`wordlist' işlevinde sayısal olmayan ikinci argüman\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(In) başarısız (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"create_child_process: DuplicateHandle(Err) başarısız (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() başarısız (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe (): process_init_fd() başarısız\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Geçici komut-listesi (batch) dosyası %s temizleniyor\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Argüman sayısı (%d) `%s' işlevinde yetersiz\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Bu platformda gerçekleştirilmemiş: işlev `%s'\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"`%s' işlemine çağrı sonlandırılmamış: `%c' kayıp\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: `%s' seçeneği belirsiz\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: `--%s' seçeneği argümansız kullanılır\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: seçenek `%c%s' argümansız kullanılır\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: `%s' seçeneği bir argümanla kullanılır\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: `--%s' seçeneği bilinmiyor\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: `%c%s' seçeneği bilinmiyor\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: kuraldışı seçenek -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: geçersiz seçenek -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: seçenek bir argümanla kullanılır -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: `-W %s' seçeneği belirsiz\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: `-W %s' seçeneği argümansız kullanılır\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"hash tablosu için %ld bayt ayrılamıyor: bellek tükendi\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Yük=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Rehash=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Çakışmalar=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"`%s' için bir örtük kural arıyor.\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"`%s' için arşiv-üyesi örtük kural arıyor.\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Örtük kural çevrimi görmezden geliniyor.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"`%.*s' köküyle kalıp kuralı deneniyor.\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Örtük önceden gereklilik `%s' olanaksız olduğundan reddediliyor.\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Kural önceden gerekliliği `%s' olanaksız olduğundan reddediliyor.\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Örtük önceden gereklilik `%s' deneniyor.\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Kural önceden gerekliliği `%s' deneniyor.\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Önceden gereklilik `%s' VPATH `%s' olarak bulundu.\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Aracı dosya `%s' ile bir kural arıyor.\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (geçici dosya)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Hata 0x%x (yoksayıldı)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Hata 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Hata %d (yoksayıldı)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Hata %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (bellek kopyası - core dosyası - diske yazıldı)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Bitmemiş işler için bekliyor....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Ast dosya işini sürdürüyor: 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (karşıdan)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Kaybeden ast dosya sağlanıyor: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Kazanan ast dosya sağlanıyor: 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Geçici komut-listesi dosyası %s temizleniyor\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Ast 0x%08lx PID %ld%s zincirden kaldırılıyor\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"iş-sunucusu yazıyor\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Ast 0x%08lx (%s) için simge (token) kullanıma sunuldu.\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\"Başarısız olan süreç oluşturma işlemine process_easy() sebep oldu (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Sayılan %d argüman ile başarısız oldu\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Ast 0x%08lx (%s) PID %ld%s zincire konuluyor.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Ast 0x%08lx (%s) için simge (token) sağlandı.\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"görev listesi okunuyor\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"işletim sisteminde yük sınırlarına ulaşılamadı \"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"ulaşılamayan yük sınırı: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\"Başarısız olan süreç oluşturma işlemine process_easy() sebep oldu (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make pid %d ast süreci kaldırdı ama hala pid %d için bekliyor\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Komut bulunamadı\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Kabuk uygulaması bulunamadı\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL değişti (`%s' idi, şimdi `%s')\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"%s geçici komut-liste dosyasını oluşturuyor\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (satır %d) kabuk bağlamı hatalı (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Seçenekler:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Uyumluluk için yoksayıldı.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           Tüm hedefler koşulsuz olarak oluşturulur.\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"  -C DİZİN, --directory=DIZIN Birşey yapmadan önce DİZİNe geçilir.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -b, -m                      Bir sürü hata ayıklama bilgisi basar.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=SEÇENEKLER]        Çeşitli türde hata ayıklama bilgileri basar.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides Ortam değişkenleri makefile'ları değiştirir.\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f DOSYA, --file=DOSYA, --makefile=DOSYA\\n\"\n\"                              DOSYAyı bir makefile olarak okur.\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Bu iletiyi basar ve çıkar.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         Komutların ürettiği hataları yoksayar.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I DİZİN, --include-dir=DİZİN\\n\"\n\"                              Eklenecek makefile'ları DİZİNde arar.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Bir defada N işe izin verir; argumansız iş\\n\"\n\"                              sayısı sınırsızdır.\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            Bazı hedefler yapılmadığında devam eder.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Yük N'den az olmadıkça çoklu işler \"\n\"başlatılmaz.\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Gerçekte komutlar çalıştırılmaz, gösterilir.\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o DOSYA, --old-file=DOSYA, --assume-old=DOSYA\\n\"\n\"                              DOSYAnın çok eski olduğu varsayılır ve\\n\"\n\"                              yeniden işlem yapılmaz.\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"  -p, --print-data-base       make'in içsel veritabanını basar.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question              Komut çalıştırmaz; güncelse çıkışta belirtir\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      Oluşumiçi örtük kuralları etkisizleştirir.\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  Oluşumiçi değişken ayarlarını etkisizleştirir\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"  -s, --silent, --quiet     Komutlar işlenirken gösterilmez.\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop Bazı hedefler yapılmadığında devam etmez.\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Yeniden derlemek yerine hedeflere bakıp \"\n\"geçer.\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"  -v, --version               make sürüm numarasını basar ve çıkar.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       Kullanılan dizini basar.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Dolaylı olarak açılmış olsa bile -w 'yi \"\n\"kapatır\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W DOSYA, --what-if=DOSYA, --new-file=DOSYA, --assume-new=DOSYA\\n\"\n\"                              DOSYA sonsuz yeni varsayılır.\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables  Atanmamış bir değişkene bağıntı yapıldığında\\n\"\n\"                              uyarır.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"dosyaismi olarak boş dizge geçersiz\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"Hata ayıklama düzeyi özelliği `%s' bilinmiyor\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%s: Kesinti/Olağandışı durum saptandı (kod = 0x%x, adres = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"program %s tarafından elde edilmemiş olağandışı-durum süzgeci çağrıldı\\n\"\n\"OlağandışılıkKodu = %x\\n\"\n\"OlağandışılıkBayrakları = %x\\n\"\n\"OlağandışılıkAdresi = %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Erişim uyumsuzluğu: %x adresine yazma işlemi\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Erişim uyumsuzluğu: %x adresinden okuma işlemi\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"find_and_set_shell default_shell = %s olarak belirliyor\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\"find_and_set_shell yol aramasını default_shell = %s olarak belirliyor\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s 30 saniyeliğine askıya alınıyor...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"sleep(30) bitti. Devam ediliyor.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Makefile standart girdiden iki kez belirtildi.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (geçici dosya)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (geçici dosya)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Bu platformda paralel işler (-j) desteklenmiyor.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Tek iş kipi (-j1) için make'i başlatma konumuna alıyor\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"içsel hata: çok sayıda --jobserver-fds seçeneği\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"içsel hata: --jobserver-fds dizgesi `%s' geçersiz\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"uyarı: alt derlemede -jN zorlandı: iş sunucusu kipi kapatılıyor.\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"çift iş sunucusu\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"uyarı: iş sunucusu kullanımdışı: -j1 kullanılıyor. Üst make kuralına `+' \"\n\"ekle.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"işleri yaratıyor\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"işleri hazırlıyor\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"makefile'ları güncelliyor...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"`%s' make dosyası çevrime girdi; yeniden derlenemez.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"`%s' make dosyası yeniden derlenemiyor.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"İçerilen make dosyası `%s' bulunamadı.\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"`%s' make dosyası bulunamadı\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Geriye, özgün dizine geçilemiyor.\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Yeniden çalıştırılıyor:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (geçici dosya): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Hedefler belirtilmediğinden make dosyası yok\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Hedef yok\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Amaçlanan hedefler güncelleniyor...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"uyarı:  Clock skew saptandı. Derleme tamamlanamayabilir.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Kullanım: %s [seçenekler] [hedef] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Bu program %s için kurgulanmış\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Bu program %s için kurgulanmış (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"Yazılım hatalarını <bug-make@gnu.org> adresine,\\n\"\n\"çeviri hatalarını <gnu-tr-u12a@lists.sourceforge.net> adresine bildiriniz.\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"`-%c' seçeneği bir pozitif tümleyici bağımsız değişkenle kullanılır\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"`-%c' seçeneği bir pozitif tümleyici bağımsız değişkenle kullanılır\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sBu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna \"\n\"bakınız.\\n\"\n\"%sHiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA\\n\"\n\"%sUYGUNLUĞU için bile garanti verilmez.\\n\"\n\n#: main.c:2948\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Bu program %s için kurgulanmış\\n\"\n\n#: main.c:2950\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Bu program %s için kurgulanmış (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Make veri tabanı, %s üzerine basıldı\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %s üzerindeki Make veri tabanı tamamlandı\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: bilinmeyen bir dizine giriliyor\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: bilinmeyen dizinden çıkılıyor\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: `%s' dizine giriliyor\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: `%s' dizininden çıkılıyor\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Bilinmeyen bir dizine giriliyor\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Bilinmeyen dizinden çıkılıyor\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]:`%s' dizinine giriliyor\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: `%s' dizininden çıkılıyor\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \". Durdu.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Bilinmeyen hata %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"sanal bellek tükendi\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: kullanıcı %lu (gerçekte %lu), grup %lu (gerçekte %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"İlklendirilmiş erişim\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Kullanıcı erişimi\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Make erişimi\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Asta erişim\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \"%s e yönlendirilmiş hata\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"iş-sunucusu yazıyor\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Makefile'lar okunuyor...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"`%s' make dosyası okunuyor\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (öntanımlı amaç yok)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (arama yolu)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (umurunda değil)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \"( ~ uzantısı yok)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"şartlı ifade de yazılış hatası\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"yersiz `endef'\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"boş değişken ismi\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"boş `override' yönergesi\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"`override' yönergesi geçersiz\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"komutlar ilk hedeften önce başlıyor\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"komutlardan önceki kural kayıp\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"kayıp ayraç%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"(8 boşluğu TAB'mı zannettiniz?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"hedef kalıp kayıp\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"çok sayıda hedef kalıp\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"hedef kalıp `%%' içermiyor\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"`endif' kayıp\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"`endef' yönergesinden sonraki metin yersiz\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"`endef' kayıp, `define' sonlandırılmamış\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"`%s' yönergesinden sonraki metin yersiz\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"`%s' yersiz\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"her şartlı ifade de sadece bir `else'\"\n\n#: read.c:1824\n#, fuzzy\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"per-target değişken ataması bozuk\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"örtük ve durağan kalıp kuralları karışmış\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"örtük ve normal kurallar karışmış\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"hedef `%s' hedef kalıpla eşleşmiyor\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"hedef dosya `%s'hem : hem de :: girdilerine sahip\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"hedef `%s' aynı kuralda birden fazla belirtilmiş.\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"uyarı: hedef `%s' için komutlar geçersiz kılınıyor\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"uyarı: hedef `%s' için eski komutlar yoksayılıyor\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"uyarı: NUL karakteri görüldü; satırın geri kalanı yoksayılıyor\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"`%s' için hiçbir şey yapılmadı.\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"`%s' güncel\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Budanmış dosya `%s'.\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sHedef `%s' i derlemek için  hiçbir kural yok%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"\"\n\"%sHedef `%s' i derlemek için  hiçbir kural yok, `%s' tarafından gereksinim \"\n\"duyuluyor%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"hedef dosya `%s' hesaba katılıyor.\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"En son `%s'dosyasının güncellenmesi denendi ve başarısız oldu.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"`%s' dosyası zaten hesaba katıldı.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"`%s' dosyası hala güncelleniyor.\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"`%s' dosyasının güncellenmesi tamamlandı.\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"`%s' dosyası yok.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Uyarı: .LOW_RESOLUTION_TIME dosyası `%s' yüksek çözünürlüklü bir zaman \"\n\"damgası içeriyor\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"`%s' için bir örtük kural bulundu.\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"`%s' için bir örtük kural yok.\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"`%s' için öntanımlı komutlar kullanılıyor.\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Çevrimsel %s <- %s bağımlılığı iptal edildi.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"`%s' hedef dosyasının önceden gereklilikleri tamamlandı.\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"`%s' için önceden gereklilikler derlenmeye devam ediyor.\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"`%s' hedef dosyasında umut kesiliyor.\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Hedef `%s' hatalardan dolayı yeniden derlenemez.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"Önceden gerekli `%s' hedef `%s' için şart.\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Hedef `%s' in önceden gereklisi `%s' mevcut değil.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Önceden gerekli `%s' hedef `%s' den daha yeni.\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Önceden gerekli `%s' hedef `%s' den daha eski.\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Hedef `%s' çift-sütunlu ve önceden gereklilikler gerektirmiyor.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"`%s' için komutlar ve  önceden gerekliliklerde bir değişiklik yok.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Daima derle seçeneğinden dolayı `%s' derleniyor.\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Hedef `%s' nin yeniden derlenmesine gerek yok\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; VPATH ismi `%s' kullanılıyor\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Hedef `%s' yeniden derlenmeli.\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \" VPATH ismi `%s' yoksayılıyor.\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"`%s' nin komutları çalışmaya devam ediyor.\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Hedef dosya `%s' yeniden derlenirken hata oluştu.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Hedef dosya `%s' yeniden derlenmesi başarıyla tamamlandı.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"`%s' hedef dosyasının -q ile yeniden derlenmesi gerekir.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Uyarı: `%s' dosyası gelecekteki bir değişiklik tarihini içeriyor\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Uyarı: `%s' dosyasının  değişiklik tarihi %.2g s kadar gelecekte\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS elemanı `%s' bir kalıp değil\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Özelleştirilmiş olanlar dışarı aktarılmayacak: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Örtük Kurallar\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Örtük kural yok.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u örtük kural, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" terminal.\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"YAZILIM HATASI: num_pattern_rules yanlış!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"bilinmeyen sinyal\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Tıkanma\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Kesme\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Çık\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Yönergeler uygun değil\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"İzleme/kesmenoktası yakalayıcı\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"İptal edildi\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT tuzağı\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT tuzağı\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Gerçek sayı olağandışı durumu\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Süreç durduruldu\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Veri yolu hatası\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Parçalama arızası\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Sistem çağrısı hatalı\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Veri alınamıyor\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Alarm saati\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Sonlandırıldı\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Kullanıcı tanımlı sinyal 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Kullanıcı tanımlı sinyal 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Ast bıraktı\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Güç kesilmesi\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Durduruldu\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Durduruldu (konsol girdisi)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Durduruldu (konsol çıktısı)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Durduruldu (sinyal)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU zaman sınırı aşıldı\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Dosya uzunluğu sınırı aşıldı\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Sanal süreölçer kullanım süresi doldu\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Tanıtım süreölçer kullanım süresi doldu\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Pencere boyutları değiştirildi\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Devam ediliyor\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Acil G/Ç koşulu\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"G/Ç mümkün\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Kaynak kaybı\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Tehlike sinyali\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Bilgi isteği\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Aritmetik işlemci kullanılabilir değil\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"öntanımlı\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"çevre\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"derleme dosyası\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"çevre -e altında\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"komut satırı\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"`override' yönergesi\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"otomatik\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (`%s'den, satır %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# değişken kümesi hash tablosunun durumu:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Değişkenler\\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Örneğe duyarlı değişken değeri\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Örneğe duyarlı değişken değeri yok.\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u örneğe duyarlı değişken değeri\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"uyarı: `%.*s' değişkeni atanmamış\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search %d ile başarısız\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Uyarı: Boş yönlendirme\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"içsel hata: `%s' command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"-uyarı, CTRL-Y etraftaki alt-süreç(ler)i bıraktıracak.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"-uyarı, DCL den yönetimi almak için CTRL-Y'yi yeniden \"\n\"etkinleştirebilirsiniz.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"OLUŞUMİÇİ [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"OLUŞUMİÇİ CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"OLUŞUMİÇİ RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Oluşumiçi komut '%s' bilinmiyor\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Hata, boş komut\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"%s den yönlendirilmiş girdi\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"%s e yönlendirilmiş hata\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"%s e yönlendirilmiş çıktı\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"%s yerine çalıştırılıyor\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"doğum hatası, %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH Arama yolu\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# `vpath' arama yolları yok\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u `vpath' arama yolu.\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Genel arama yolu (`VPATH' çevre değişkeni) yok.\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Genel (`VPATH' çevre değişkeni) arama yolu:\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"Dosyada hala yazılış hatası var: '\\\"'\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"SIGCHLD sinyali alındı; %u sağlanmamış ast dosya.\\n\"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"sh.exe yoksa -j veya --jobs belirtilemez.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Tek iş kipi için make'i başlatma konumuna alıyor\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"`%sinclude' için dosyaismi yok\"\n\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"hedef `%s' önceden gereklilik kalıbını boş bırakıyor\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# Dosyalar yok.\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u dosya %u hash kümesinde.\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# her tabloda ortalama %.3f dosya, bir tabloda en çok %u dosya.\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DİZİN\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"Hiç bir şey yapmadan DİZİNe geçer\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"BAYRAKLAR\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Bir hata ayıklayıcı eklemeye izin vermek için süreci askıya alır\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"Çevre değişkenleri makefile'ları geçersiz kılıyor\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"DOSYA\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"DOSYAyı bir makefile olarak okur\"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \"İçerilmiş makefile'lar için DİZİNi araştırır\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Yük N'in altında olmadıkça işler başlatılmaz\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"Genellikle hiçbir komut çalıştırılmaz; onları basar\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"DOSYAnın çok eski olduğunu hesaba katarak yeniden derlemez.\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Komutları ekolamaz\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"-k 'yı kapatır\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"DOSYAnın ne kadar yeni olduğundaki belirsizliği hesaba katar.\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"  Dizine girdi:\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"Dizini bıraktı:\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# Değişkenker yok\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# her tabloda %.1f değişken ortalaması, bir tabloda en çok %u\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# her tabloda %d.%d değişken ortalaması, bir tabloda en çok %u\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/uk.po",
    "content": "#  make  .\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.\n# Volodymyr M. Lisivka <lvm@mystery.lviv.net>, 2001-2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.80\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-12-05 20:07+0200\\n\"\n\"Last-Translator: Volodymyr M. Lisivka <lvm@mystery.lviv.net>\\n\"\n\"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=koi8-u\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"  צ,   Цդ: \\\"%s\\\"\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"  ͦ  Ȧ   ͦ VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"  ͦ: Ȧ \\\"%s\\\"  դ\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"  ͦ: צ Ȧ: \\\"%s\\\"\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"  ͦ:  \\\"%s\\\"  ͦ  \\\"%s\\\"\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"\"\n\"  ͦ: æ ar_member_touch \\n\"\n\"  צצĦ  \\\"%s\\\"\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"\"\n\n#: arscan.c:165\n#, fuzzy, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \" צ ¦̦ %s    %s; %d\\n\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" ('   Ӧ)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"   %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s]   \\\"%s\\\"\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"***   \\\"%s\\\"\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#    \"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" ():\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" ( \\\"%s\\\",  %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# \\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s:   æ (stat).\\n\"\n\n#: dir.c:999\n#, fuzzy, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (Ҧ %d,  %d):  צ.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (Ҧ %d,  [%d,%d,%d]):  צ.\\n\"\n\n#: dir.c:1008\n#, fuzzy, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (Ҧ %d,  %d):  צ.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s ( %s,  Ʀæ %d): \"\n\n#: dir.c:1039\n#, fuzzy, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (Ҧ %d,  [%d,%d,%d]):  צ.\\n\"\n\n#: dir.c:1044\n#, fuzzy, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (Ҧ %d,  %d):  צ.\\n\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" ̦, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"Φ\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"  æ\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \"   .\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"  æ  %lu .\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \" ͦ \\\"%s\\\"     ( Ԧ)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"   ͦ\"\n\n#: file.c:270\n#, fuzzy, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"   \\\"%s\\\"  Φ %s:%u,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"   \\\"%s\\\"  Φ   ,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \" \\\"%s\\\"  \\\"%s\\\"        . \"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"  \\\"%s\\\" Φ,  Φ   \\\"%s\\\".\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"  \\\"%s\\\"  Φ   \\\"%s\\\"   \"\n\"\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"  \\\"%s\\\"     \\\"%s\\\"  Φ \"\n\"\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"***  ͦ  \\\"%s\\\"\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \" ͦΦ ...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"#   :\"\n\n#: file.c:903\n#, fuzzy\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"#    (Φ .PRECIOUS).\"\n\n#: file.c:905\n#, fuzzy\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"#  æ (Φ צ .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#    .\"\n\n#: file.c:909\n#, fuzzy\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"#  Makefile     MAKEFILES.\"\n\n#: file.c:911\n#, fuzzy\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#    %s .\\n\"\n\n#: file.c:912\n#, fuzzy\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#    %s .\\n\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#      : \\\"%s\\\"\\n\"\n\n#: file.c:916\n#, fuzzy\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#   -- ͦ Φ.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#   :\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#   ͦ Φ  צ.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#    դ.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#    .\"\n\n#: file.c:934\n#, fuzzy, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#   ϧ ͦ %.24s (%ld)\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#    .\"\n\n#: file.c:937\n#, fuzzy\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  %s .\\n\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  Φ   ( ).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  Φ   ϧ Ԧ ( ).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  Ц .\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#     (  -q).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#    Ц.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  צ   \\\"update_status\\\"!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  צ   \\\"command_state\\\"!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# \"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"     æ \\\"word\\\"\"\n\n#: function.c:764\n#, fuzzy\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"     æ \\\"word\\\"\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"     æ \\\"wordlist\\\"\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"     æ \\\"wordlist\\\"\"\n\n#: function.c:1453\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1464\n#, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1469\n#, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"     æ \\\"word\\\"\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \" ̦  æ ͦ: æ \\\"%s\\\"\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"  æ \\\"%s\\\";  \\\"%c\\\"\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s:  \\\"%s\\\" - \\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s:  \\\"--%s\\\"    Ԧ\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s:  \\\"%c%s\\\"    Ԧ\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s:  \\\"%s\\\" Ȧ \\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s:  Ц  \\\"--%s\\\"\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s:  Ц  \\\"%c%s\\\"\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: צ  -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: צ  -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s:  Ȧ  -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s:  \\\"-W %s\\\" \\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s:  \\\"-W %s\\\"    Ԧ\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"    \\\"%s\\\".\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"     Ȧ \\\"%s\\\".\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"¦    .\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"   ڦ ,  \\\"%.*s\\\".\\n\"\n\n#: implicit.c:667\n#, fuzzy, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \" ϧ %s Ԧ \\\"%s\\\".\\n\"\n\n#: implicit.c:668\n#, fuzzy, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \" ϧ %s Ԧ \\\"%s\\\".\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \" Φ Ԧ \\\"%s\\\".\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \" Φ  \\\"%s\\\".\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"   ͦ  \\\"%s\\\".\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite ( )\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"[%s]  0x%x (Ϧ)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s]  0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s]  %d ()\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s]  %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (  'Ԧ)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** ަ  ...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"  0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (צ)\"\n\n#: job.c:698\n#, fuzzy, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \" Ԧ %s æ  0x%08lx PID %d%s\\n\"\n\n#: job.c:699\n#, fuzzy, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \" Ԧ %s æ  0x%08lx PID %d%s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"    %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"\"\n\n#: job.c:864\n#, fuzzy, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \" Ԧ %s æ  0x%08lx PID %d%s\\n\"\n\n#: job.c:1383\n#, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\n#: job.c:1455\n#, fuzzy, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"  0x%08lx PID %d%s    ˦.\\n\"\n\n#: job.c:1709\n#, fuzzy, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \" Ԧ %s æ  0x%08lx PID %d%s\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"\"\n\" æ   Ѥ    \"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"    : \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\n#: job.c:2046\n#, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s:   \"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s:    \"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL ͦ ( \\\"%s\\\",  \\\"%s\\\")\"\n\n#: job.c:2789\n#, fuzzy, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"fopen ( )\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s ( %d)    (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"ަ:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"Φ    Ԧ Φ \"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"\"\n\n#: main.c:670\n#, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\n#: main.c:677\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\n#: main.c:685\n#, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:686\n#, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen ( )\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite ( )\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \" make-̦...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Make- \\\"%s\\\", , , צ  .\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \" ڦ make- \\\"%s\\\" Ц.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Make- \\\"%s\\\",  ,   .\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Make- \\\"%s\\\"   \"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"   צ .\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \" :\"\n\n#: main.c:2140\n#, fuzzy\nmsgid \"unlink (temporary file): \"\nmsgstr \"fopen ( )\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \" Φ æ̦    make-\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \" æ\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \" æ ...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \": %s []... []...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"צ    <bug-make@gnu.org>\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \" \\\"-%c\\\"    æ  \"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \" \\\"-%c\\\"    æ  \"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"#   Make,  %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"#    Make  %s\\n\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s:   צ \"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s:  צ \"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s:    \\\"%s\\\"\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s:   \\\"%s\\\"\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]:   צ  \"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]:  צ \"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]:    \\\"%s\\\"\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]:   \\\"%s\\\"\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  .\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"צ  %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"צ ' \"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \" \"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \" \\\"%s\\\"\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"  Φ\"\n\n#: read.c:160\n#, fuzzy\nmsgid \"Reading makefiles...\\n\"\nmsgstr \" make-̦...\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \" make- \\\"%s\\\"\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (   )\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" ( )\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" ( )\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (  ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"צ    Φ\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \" \\\"endef\\\"\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"Τ ' ͦϧ\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"  `override'\"\n\n#: read.c:687\n#, fuzzy\nmsgid \"invalid `override' directive\"\nmsgstr \" `override'\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \" ҦԦ    æ̦\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"   \"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \" Ħ%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \"\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"  æ̦\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"   æ̦\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \" æ̦  ͦ \\\"%%\\\"\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \" \\\"endif\\\"\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"  Ц  \\\"endef\\\"\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \" \\\"endif\\\",  \\\"define\\\"\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"  Ц  \\\"%s\\\"\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \" \\\"%s\\\"\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"  ڦ     `else'\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"ͦΦ Φ    ڦ  \"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"ͦΦ Φ  Φ \"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"æ \\\"%s\\\"  צצ  æ\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"æ  \\\"%s\\\"     \\\":\\\",   \\\"::\\\" \"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"æ \\\"%s\\\"  ˦    ̦\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \":    æ̦ \\\"%s\\\"\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \":     æ̦ \\\"%s\\\"\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \": Ҧ  NUL; դ  ˦ \"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \" \\\"%s\\\"    .\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"\\\"%s\\\"   .\"\n\n#: remake.c:297\n#, fuzzy, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"    \\\"%s\\\".\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%s    æ̦ \\\"%s\\\"%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%s    æ̦ \\\"%s\\\", Ȧϧ  \\\"%s\\\"%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \" æ  \\\"%s\\\".\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"    \\\"%s\\\"  Ц.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \" \\\"%s\\\"   .\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"    \\\"%s\\\".\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"  \\\"%s\\\" .\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \" \\\"%s\\\"  դ.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"    \\\"%s\\\".\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"     \\\"%s\\\".\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"     \\\"%s\\\".\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"̦ Φ %s <- %s .\"\n\n#: remake.c:601\n#, fuzzy, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \" æ, צ   æ  \\\"%s\\\", .\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"̦, צ   \\\"%s\\\", .\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Ҧ   æ ̦ \\\"%s\\\".\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \" \\\"%s\\\"   ڦ  .\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:682\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \" \\\"%s\\\"  դ.\\n\"\n\n#: remake.c:687\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \" æ \\\"%s\\\"  %s Φ  צ ŧ \\\"%s\\\".\\n\"\n\n#: remake.c:690\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \" æ \\\"%s\\\"  %s Φ  צ ŧ \\\"%s\\\".\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \" \\\"%s\\\"        .\\n\"\n\n#: remake.c:715\n#, fuzzy, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"  \\\"%s\\\"  Φ,  Ԧ   ͦΦ.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, fuzzy, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \" ȦԦ  æ \\\"%s\\\".\\n\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Ȧ ڦ æ \\\"%s\\\".\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"  \\\"%s\\\"  .\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \" ڦ æ  \\\"%s\\\" Ц.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"  \\\"%s\\\" Ц ڦ.\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"  \\\"%s\\\"  ¦   -q.\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \":  \\\"%s\\\"  Φ  ͦ\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \":  \\\"%s\\\"   ͦ %.2g   \"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"#   .\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"#  : %u, ͦ: %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \".\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \": צ  num_pattern_rules! %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"צ \"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Ȧ\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \" æ\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"    \"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \" IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \" EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \" æ  ,  \"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"  Φ\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"¦ æ\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"  \"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \" \"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"  \"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"   1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"   2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"  \"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"¦ \"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \" (צ  ͦ) \"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \" (צ  ͦ)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \" ()\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"    \"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"  ͦ \"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"  \"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \" Ʀ \"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \" ͦ\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"  /\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \" צ/צ\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \" \"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \" \"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \" æ\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \" \"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"  ݦ\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \" make\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"  -e\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"   \"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \" `override'\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" ( \\\"%s\\\",  %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# ͦΦ\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \":  ͦ \\\"%.*s\\\"\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:175\n#, fuzzy, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"Ҧ : \\\"%s\\\" command_state %d  child_handler\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"צ   \\\"%s\\\".\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:498\n#, fuzzy, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \" \\\"%s\\\"\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"ͦ  դ %s\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"  , %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"#   VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"#     \\\"vpath\\\".\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u \\\"vpath\\\"  .\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"#    (ͦ \\\"VPATH\\\")  .\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"#  (ͦ \\\"VPATH\\\")  :\\n\"\n\"# \"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \" ,   Φ '\\\"'\\n\"\n\n#, fuzzy\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"\"\n#~ \"  SIGCHLD; ˦    %d.\\n\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"  '   \\\"%sinclude\\\"\"\n\n#, fuzzy\n#~ msgid \"target `%s' leaves prerequisite pattern empty\"\n#~ msgstr \"æ \\\"%s\\\"  צצ  æ\"\n\n#~ msgid \" impossibilities in %u directories.\\n\"\n#~ msgstr \"  æ  %u .\\n\"\n\n#~ msgid \"# %u variables in %u hash buckets.\\n\"\n#~ msgstr \"# %u ͦ  %u  -æ.\\n\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# ͦ .\"\n\n#, fuzzy\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"#   %.1f ̦  , . %u ̦   \"\n#~ \".\\n\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"#   %.1f ͦ  , . %u   .\\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"\"\n#~ \"#   %d.%d ͦ  , . %u   .\\n\"\n\n#, fuzzy\n#~ msgid \"%s access: user %lu (real %lu), group %lu (real %lu)\\n\"\n#~ msgstr \"\"\n#~ \"   %s:  %d (Ħ %d),  %d (Ħ %d)\\n\"\n\n#~ msgid \"*** Warning: File `%s' has modification time in the future (%s > %s)\"\n#~ msgstr \"*** :  \\\"%s\\\"   ͦ   (%s > %s)\"\n\n#~ msgid \"\"\n#~ \", by Richard Stallman and Roland McGrath.\\n\"\n#~ \"%sBuilt for %s\\n\"\n#~ \"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n#~ \"%s\\tFree Software Foundation, Inc.\\n\"\n#~ \"%sThis is free software; see the source for copying conditions.\\n\"\n#~ \"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n#~ \"%sPARTICULAR PURPOSE.\\n\"\n#~ \"\\n\"\n#~ \"%sReport bugs to <bug-make@gnu.org>.\\n\"\n#~ \"\\n\"\n#~ msgstr \"\"\n#~ \",  Richard Stallman  Roland McGrath.\\n\"\n#~ \"%s  %s\\n\"\n#~ \"%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\\n\"\n#~ \"%s      Free Software Foundation, Inc.\\n\"\n#~ \"%s צ ; æ    צ\\n\"\n#~ \"%s Ȧ Ԧ.     Ԧ; צ Ԧ\\n\"\n#~ \"%s      .\\n\"\n#~ \"\\n\"\n#~ \"%sצ   <bug-make@gnu.org>.\\n\"\n\n#~ msgid \"Allow N jobs at once; infinite jobs with no arg\"\n#~ msgstr \"\"\n#~ \"    ;    ,\\n\"\n#~ \"    \"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"     æ\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \"   \"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \"       \"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"\"\n\n#~ msgid \"Disable the built-in implicit rules\"\n#~ msgstr \"  Φ Φ \"\n\n#, fuzzy\n#~ msgid \"Disable the built-in variable settings\"\n#~ msgstr \"  Φ Φ \"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"  ,   \"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"  \"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"\"\n#~ \"  Φ       N\"\n\n#~ msgid \"Entering\"\n#~ msgstr \" \"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \"ͦΦ   ͦΦ, Φ  make-̦\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"\"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"\"\n\n#~ msgid \"Ignore errors from commands\"\n#~ msgstr \"  \"\n\n#~ msgid \"Ignored for compatibility\"\n#~ msgstr \"  ͦԦ\"\n\n#~ msgid \"Initialized\"\n#~ msgstr \"Φæ̦\"\n\n#~ msgid \"Keep going when some targets can't be made\"\n#~ msgstr \" , צ  ˦ æ̦  Ԧ\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"\"\n\n#~ msgid \"Print lots of debugging information\"\n#~ msgstr \" צ  צ\"\n\n#~ msgid \"Print make's internal database\"\n#~ msgstr \" Ҧ   make\"\n\n#~ msgid \"Print the current directory\"\n#~ msgstr \"  \"\n\n#~ msgid \"Print the version number of make and exit\"\n#~ msgstr \" æ  Ӧ  \"\n\n#~ msgid \"Print this message and exit\"\n#~ msgstr \"  צ  \"\n\n#, fuzzy\n#~ msgid \"Print various types of debugging information\"\n#~ msgstr \" צ  צ\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \"   make-\"\n\n#, fuzzy\n#~ msgid \"Removing child 0x%08lx PID %ld %s from chain.\\n\"\n#~ msgstr \"  0x%08lx PID %d%s    ˦.\\n\"\n\n#~ msgid \"Run no commands; exit status says if up to date\"\n#~ msgstr \"  ,     \"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \" make-, ˦ Ȧ ,   \"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"   ɤ צ\"\n\n#~ msgid \"Touch targets instead of remaking them\"\n#~ msgstr \"   æ,    \"\n\n#~ msgid \"Turn off -w, even if it was turned on implicitly\"\n#~ msgstr \"ͦ  -w, צ     \"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"ͦ  -k\"\n\n#~ msgid \"Warn when an undefined variable is referenced\"\n#~ msgstr \"   Φ   ͦ\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# %u ̦  %u  -æ.\\n\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# ̦ .\"\n\n#~ msgid \"an unknown directory\"\n#~ msgstr \"צ \"\n\n#~ msgid \"directory `%s'\\n\"\n#~ msgstr \" \\\"%s\\\"\\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/vi.po",
    "content": "# Vietnamese translation for Make.\n# Copyright © 2006 Free Software Foundation, Inc.\n# Clytie Siddall <clytie@riverland.net.au>, 2006.\n# \nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make-3.81-b3\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2006-02-05 19:19+1030\\n\"\n\"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\\n\"\n\"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\"Plural-Forms: nplurals=1; plural=0\\n\"\n\"X-Generator: LocFactoryEditor 1.6b36\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"đã cố sử dụng tính năng không được hỗ trợ « %s »\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"bộ phạn kho touch chưa sẵn sàng trên VMS\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch: kho « %s » không tồn tại\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch: « %s » không phải là một kho hợp lệ\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touch: bộ phạn « %s » không tồn tại trong « %s »\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touch: mới nhận mã trả lại sai từ « ar_member_touch » trên « %s »\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"« lbr$set_module » đã không rút được thông tin mô-đun, trạng thái = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"« lbr$ini_control » bị lỗi với trạng thái = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"không thể mở thư viên « %s » để tra tìm bộ phạn « %s »\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"Bộ phạn « %s »%s: %ld byte với %ld (%ld).\\n\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \"(có lẽ tên bị cụt)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"  Ngày %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %d, gid = %d, chế độ = 0%o.\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** Ngắt\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] Có lẽ bộ phạn « %s » là giả; chưa bị xóa bỏ\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** Có lẽ bộ phạn « %s » là giả; chưa bị xóa bỏ\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] Đang xóa bỏ tập tin « %s »...\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** Đang xóa bỏ tập tin « %s »...\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"# các lệnh cần thi hành\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" (sẵn có):\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (từ « %s », dòng %lu):\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Thư mục\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s: không thể lấy các thông tin về nó.\\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (khóa %s, giờ_m %d): không thể được mở.\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (thiết bị %d, nút thông tin [%d,%d,%d]): không thể được mở.\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (thiết bị %ld, nút thông tin %ld): không thể được mở.\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (khóa %s, giờ_m %d): \"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (thiết bị %d, nút thông tin [%d,%d,%d]): \"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (thiết bị %ld, nút thông tin %ld): \"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"Không\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" tập tin, \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"không\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \" điều không thể\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" cho đến đây.\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \" điều không thể trong %lu thư mục.\\n\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"Biến đệ qui « %s » tham chiếu chính nó (cuối cùng)\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"tham chiếu biến chưa có kết thúc\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"Các lệnh được ghi rõ cho tập tin « %s » vào %s:%lu,\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"\"\n\"Các lệnh cho tập tin « %s » đã được tìm bằng việc tìm kiếm quy tắc ngầm,\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"nhưng « %s » hiện thời được xem là cùng một tập tin với « %s ».\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"Các lệnh cho « %s » sẽ bị bỏ qua để ủng hộ các điều cho « %s ».\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"\"\n\"không thể thay đổi tên dấu hai chấm đơn « %s » thành dấu hai chấm đôi « %s »\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"\"\n\"không thể thay đổi tên dấu hai chấm đôi « %s » thành dấu hai chấm đơn « %s »\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** Đang xóa bỏ tập tin trung cấp « %s »...\"\n\n#: file.c:385\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"Đang gỡ bỏ các tập tin trung cấp...\\n\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%s: Nhãn thời gian ở ngoại phạm vị nên thay thế %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"Giờ hiện thời\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# Không phải là đĩch:\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"# Tập tin qúy (điều kiện tiên quyết của .PRECIOUS).\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"# Đích giả (điều kiện tiên quyết của .PHONY).\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"# Đích dòng lệnh.\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"\"\n\"#  Tập tin tạo (makefile) mặc định, kiểu MAKEFILES, hay kiểu « -include/\"\n\"sinclude ».\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"# Mới tìm kiếm kiểu quy tắc ngầm.\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"# Chưa tìm kiếm kiểu quy tắc ngầm.\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"# Cuống mẫu ngầm/tĩnh: « %s »\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"# Tập tin là điều kiện tiên quyết trung cấp.\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"# Cũng tạo :\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"# Chưa bao giờ kiểm tra giờ sửa đổi.\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"# Tập tin không tồn tại.\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"# Tập tin rất cũ.\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"# Sửa đổi cuối cùng %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"# Tập tin đã được cập nhật.\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"# Tập tin chưa được cập nhật.\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"# Các lệnh đang chạy (ĐÂY LÀ LỖI).\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"# Các lệnh phụ thuộc đang chạy (ĐÂY LÀ LỖI).\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"# Đã được cập nhật.\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"# Cần thiết cập nhật (« -q » đã lập).\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"# Việc cập nhật bị lỗi.\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"\"\n\"#  Giá trị không hợp lệ trong bộ phạn « update_status » (trạng thái cập \"\n\"nhật)!\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"\"\n\"#  Giá trị không hợp lệ trong bộ phạn « command_state » (tính trạng lệnh)!\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# Tập tin\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# thống kê bảng băm các tập tin:\\n\"\n\"# \"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"đối số thứ nhất không dạng số đối với hàm « word » (từ)\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"đối số thứ nhất đối với hàm « word » (từ) phải là lớn hơn 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"đối số thứ nhất không dạng số đối với hàm « wordlist » (danh sách từ)\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"đối số thứ hai không dạng số đối với hàm « wordlist » (danh sách từ)\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"\"\n\"Việc « create_child_process: DuplicateHandle(In) » (tạo tiến trình con: bộ \"\n\"quản lý trùng) bị lỗi (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"\"\n\"Việc « create_child_process: DuplicateHandle(Err) » (tạo tiến trình con: bộ \"\n\"quản lý trùng(lỗi)) bị lỗi (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"Việc « CreatePipe() » (tạo ống dẫn) bị lỗi (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"\"\n\"Việc « windows32_openpipe (): process_init_fd() » (mở ống dẫn windows32: \"\n\"tiến trình sở khởi fd) bị lỗi\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"Đang làm sạch tập tin bó tạm thời %s...\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"Không có đủ đối số (%d) đối với hàm « %s »\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"Chưa được thực hiện trên nền tảng này: hàm « %s »\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"cuộc gọi chưa được kết thúc cho hàm « %s »: thiếu « %c »\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%s: tùy chọn « %s » là mơ hồ\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%s: tùy chọn « --%s » không cho phép đối số\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%s: tùy chọn « %c%s » không cho phép đối số\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%s: tùy chọn « %s » cần đến đối số\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s: không nhận ra tùy chọn « --%s »\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s: không nhận ra tùy chọn « %c%s »\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%s: không cho phép tùy chọn « -- %c »\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%s: tùy chọn không hợp lệ « -- %c »\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%s: tùy chọn cần đến đối số « -- %c »\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%s: tùy chọn « -W %s » là mơ hồ\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%s: tùy chọn « -W %s » không cho phép đối số\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"không thể cấp phát %ld byte cho bảng băm: hết bộ nhớ hoàn toàn\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"Trọng tải=%ld/%ld=%.0f%%, \"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"Băm lại=%d, \"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"Xung đột=%ld/%ld=%.0f%%\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Đang tìm quy tắc nguầm cho « %s ».\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Đang tìm quy tắc ngầm về bộ phạn kho cho « %s ».\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"Đang tránh sự đệ qui quy tắc ngầm.\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"Đang thử quy tắc mẫu với cuống « %.*s ».\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"Đang từ chối điều kiện tiên quyết ngầm không thể « %s ».\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"Đang từ chối điều kiện tiên quyết không thể « %s ».\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"Đang thử điều kiện tiên quyết ngầm « %s ».\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Đang thử điều kiện tiên quyết quy tắc « %s ».\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"Mới tìm điều kiện tiên quyết « %s » dạng VPATH « %s »\\n\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Đang tìm quy tắc với tập tin trung cấp « %s ».\\n\"\n\n#: job.c:321\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"Không thể tạo tên tập tin tạm thời\\n\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s] Lỗi 0x%x (bị bỏ qua)\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s] Lỗi 0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s] Lỗi %d (bị bỏ qua)\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s] Lỗi %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (lõi bị đổ)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** Đang đợi các việc chưa xong...\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Điều con động 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (từ xa)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Đang bắt điều con thua 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"Đang bắt điều con thắng 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"Đang làm sạch tập tin bó tạm thời: %s\\n\"\n\n#: job.c:802\n#, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"Đang gỡ bỏ điều con 0x%08lx PID %ld%s ra dây.\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"ghi trình phục vụ công việc\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Mới nhả hiệu bài cho điều con 0x%08lx (%s).\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\"Việc « process_easy() » (tiến trình dễ) bị lỗi khi cố khởi chạy tiến trình \"\n\"(e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Đã đếm %d đối số trong việc khởi chạy bị lỗi\\n\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"Đang để điều con 0x%08lx (%s) PID %ld%s trên dây.\\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"Đã lấy hiệu bài cho điều con 0x%08lx (%s).\\n\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"đọc ống dẫn của các cộng việc\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"không thể buộc hạn chế trọng tải với hệ điều hành này\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"không thể buộc hạn chế trọng tải: \"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\"không có bộ quản lý tập tin nữa: không thể nhân bản thiết bị nhập chuẩn\\n\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\"không có bộ quản lý tập tin nữa: không thể nhân bản thiết bị xuất chuẩn\\n\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"Không thể phục hồi thiết bị nhập chuẩn\\n\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"Không thể phục hồi thiết bị xuất chuẩn\\n\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"\"\n\"Việc « process_easy() » (tiến trình dễ) bị lỗi khi cố khởi chạy tiến trình \"\n\"(e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"lập điều con đã bắt là PID %d, vẫn còn đợi PID %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%s: Không tìm thấy lệnh.\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%s: Không tìm thấy chương trình hệ vỏ\"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"spawnvpe: có lẽ hết sức chứa môi trường hoàn toàn\"\n\n#: job.c:2363\n#, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL đã thay đổi (đã « %s », là « %s »)\\n\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"Đang tạo tập tin bó tạm thời: %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"%s (dòng %d) Ngữ cảnh hệ vỏ sai (!unixy && !batch_mode_shell)\\n\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"Tùy chọn:\\n\"\n\n#: main.c:292\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"  -b, -m                      Bị bỏ qua để tương thích.\\n\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\"  -B, --always-make           _Luôn luôn tạo_ mọi đích (không điều kiện).\\n\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\"  -C THƯ_MỤC, --directory=THƯ_MỤC\\n\"\n\"                              Chuyển đổi sang thư mục này, trước hết.\\n\"\n\n#: main.c:299\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"  -d                          In ra rất nhiều thông tin _gỡ lỗi_.\\n\"\n\n#: main.c:301\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"\"\n\"  --debug[=CỜ...]             In ra các kiểu thông tin _gỡ lỗi_ khác nhau.\\n\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Các biến _môi trường có quyền cao hơn_\\n\"\n\"\\t\\t\\t\\t\\tcác tập tin tạo (makefile).\\n\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\"  -f TẬP_TIN, --file=TẬP_TIN, --makefile=TẬP_TIN\\n\"\n\"                              Đọc tập tin này dạng tập tin tạo (makefile).\\n\"\n\n#: main.c:309\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"  -h, --help                  Hiển thị _trợ giúp_ này rồi thoát.\\n\"\n\n#: main.c:311\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"  -i, --ignore-errors         _Bỏ qua các lỗi_ từ các lệnh.\\n\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\"  -I THƯ_MỤC, --include-dir=THƯ_MỤC\\n\"\n\"                              Tìm kiếm tập tin tạo (makefile) đã _bao gồm_\\n\"\n\"\\t\\t\\t\\t\\ttrong _thư mục_ này.\\n\"\n\n#: main.c:316\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"\"\n\"  -j [N], --jobs[=N]          Cho phép N (số) _công việc_ đồng thời;\\n\"\n\"\\t\\t\\t\\t\\t\\tvô hạn khi không có đối số\\n\"\n\n#: main.c:318\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"\"\n\"  -k, --keep-going            _Cứ làm_ khi không thể tạo một số đích.\\n\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                       Đừng khởi chạy nhiều công việc, trừ trọng tải dưới N \"\n\"(số).\\n\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\"  -L, --check-symlink-times\\n\"\n\"\\t\\t\\tDùng giờ_m cuối cùng giữa liên kết tượng trưng và đích.\\n\"\n\"\\t(_kiểm tra giờ liên kết tượng trưng_)\\n\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                             Đừng thật chạy lệnh nào, chỉ in ra hết.\\n\"\n\"\\t(_chỉ in, chạy thực hành, sự thăm dò_)\\n\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\"  -o TẬP_TIN, --old-file=TẬP_TIN, --assume-old=TẬP_TIN\\n\"\n\"                             Xem tập tin này là rất cũ nên đừng tạo lại nó.\\n\"\n\"\\t(_cũ, tập tin cũ, giả sử cũ_)\\n\"\n\n#: main.c:331\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"\"\n\"  -p, --print-data-base      _In ra cơ sở dữ liệu_ nội bộ của trình make.\\n\"\n\n#: main.c:333\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"\"\n\"  -q, --question\\n\"\n\"\\tĐừng chạy lệnh nào; trạng thái thoát nói nếu hiện thời hay không.\\n\"\n\"\\t(_câu hỏi_)\\n\"\n\n#: main.c:335\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\"  -r, --no-builtin-rules      \\t\\tTắt các quy tắc ngầm có sẵn.\\n\"\n\"\\t(_không có quy tắc có sẵn_)\\n\"\n\n#: main.c:337\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"\"\n\"  -R, --no-builtin-variables  \\tTắt các thiết lập biến có sẵn.\\n\"\n\"\\t(_không có biến có sẵn_)\\n\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\"  -s, --silent, --quiet       Đừng vọng (hiển thị) lệnh.\\n\"\n\"\\t(_câm, im_)\\n\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\"  -S, --no-keep-going, --stop\\t\\tTắt « -k ».\\n\"\n\"\\t(không cứ làm, dừng)\\n\"\n\n#: main.c:344\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"\"\n\"  -t, --touch                 Touch các đích thay vào tạo lại chúng.\\n\"\n\"\\t(_sờ_)\\n\"\n\n#: main.c:346\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"\"\n\"  -v, --version               In ra số thứ tự _phiên bản_ của trình make, \"\n\"rồi thoát.\\n\"\n\n#: main.c:348\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"  -w, --print-directory       _In ra thư mục_ hiện thời.\\n\"\n\n#: main.c:350\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"\"\n\"  --no-print-directory        Tắt « -w », dù khi nó được bật ngầm\\n\"\n\"\\t(_không in ra thư mục_)\\n\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\"  -W TẬP_TIN\\n\"\n\"  --what-if=TẬP_TIN\\n\"\n\"  --new-file=TẬP_TIN\\n\"\n\"  --assume-new=TẬP_TIN\\n\"\n\"                              \\t\\t\\tXem là tập tin này là mới vô hạn.\\n\"\n\"\\t(_gì nếu, tập tin mới, giả sử mới_)\\n\"\n\n#: main.c:355\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"\"\n\"  --warn-undefined-variables\\n\"\n\"\\t\\t_Cảnh báo_ khi tham chiếu một _biến chưa được định nghĩa_.\\n\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"chuỗi rỗng không hợp lệ dạng tên tập tin\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"không biết đặc tả cấp gỡ lỗi « %s »\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"\"\n\"%s: Mới bắt Interrupt/Exception (ngắt/ngoài lệ) (mã = 0x%x, địa chỉ = 0x%x)\\n\"\n\n#: main.c:677\n#, fuzzy, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Bộ lọc ngoài lệ không được quản lý được gọi từ chương trình %s\\n\"\n\"ExceptionCode \\t\\tmã ngoài lệ\\t       %x\\n\"\n\"ExceptionFlags \\t\\tcác cờ ngoài lệ      %x\\n\"\n\"ExceptionAddress \\t\\tđịa chỉ ngoài lệ     %x\\n\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"Vi phạm truy cập: thao tác ghi tại địa chỉ %x\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"Vi phạm truy cập: thao tác đọc tại địa chỉ %x\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"\"\n\"« find_and_set_shell » (tìm và lập hệ vỏ) đang lập « default_shell » (hệ vỏ \"\n\"mặc định) = %s\\n\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\"Việc tìm kiếm đường dẫn « find_and_set_shell » (tìm và lập hệ vỏ) đang lập « \"\n\"default_shell » (hệ vỏ mặc định) = %s\\n\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s đang ngưng được 30 giây...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"đã ngủ(30). Đang tiếp tục.\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"Tập tin tạo (makefile) từ thiết bị nhập chuẩn đã được ghi rõ hai lần.\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"\"\n\"fopen (tập tin tạm thời)\\n\"\n\"  (_mở tập tin_)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"\"\n\"fwrite (tập tin tạm thời)\\n\"\n\"  (_ghi tập tin_)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"Công việc song song (-j) không được hỗ trợ trên nền tảng này.\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Đang lập lại thành chế độ công việc đơn (-j1).\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"\"\n\"lỗi nội bộ: có nhiều tùy chọn « --jobserver-fds » (trình phục vụ công việc -\"\n\"fds).\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"\"\n\"lỗi nội bộ: gặp chuỗi « --jobserver-fds » (trình phục vụ công việc -fds) \"\n\"không hợp lệ « %s ».\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\"cảnh báo : « -jN » bị buộc trong tiến trình submake: nên tắt chế độ trình \"\n\"phục vụ công việc (jobserver).\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"dup jobserver (sao lục trình phục vụ công việc)\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\"cảnh báo : trình phục vụ công việc không sẵn sàng: nên dùng « -j1 ». Hãy \"\n\"thêm « + » vào quy tắc make mẹ.\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"đang tạo ống dẫn công việc\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"init jobserver pipe (sở khởi ống dẫn trình phục vụ công việc)\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"Không hỗ trợ liên kết tượng trưng: nên tắt « -L ».\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"Đạng cập nhật các tập tin tạo (makefile)...\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"\"\n\"Tập tin tạo (makefile) « %s » có lẽ sẽ vòng lặp; sẽ không tạo lại nó.\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"Việc tạo lại tập tin tạo (makefile) « %s » bị lỗi.\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Không tìm thấy tập tin tạo (makefile) đã bao gồm « %s ».\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Không tìm thấy tập tin tạo (makefile) « %s ».\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"Không thể chuyển đổi về thư mục gốc.\"\n\n#: main.c:2024\n#, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"Đang thực hiện lại[%u]:\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"unlink (bỏ liên kết) (tập tin tạm thời): \"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"« .DEFAULT_GOAL » (đích mặc định) chứa nhiều đích.\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"Chưa ghi rõ đích nào, và không tìm thấy tập tin tạo (makefile) nào\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Không có đích\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"Đạng cập nhật các đích mục tiêu...\\n\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"\"\n\"cảnh báo : mới phát hiện đối xứng lệch đồng hồ. Như thế thì bản xây dụng có \"\n\"lẽ không hoàn toàn.\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"Cách sử dụng: %s [tùy_chọn...] [đích] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Chương trình này đã được xây dụng cho %s\\n\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"Chương trình này đã được xây dụng cho %s (%s)\\n\"\n\n#: main.c:2394\n#, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"Hãy thông báo lỗi cho <bug-make@gnu.org>.\\n\"\n\n#: main.c:2466\n#, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"tùy chọn « -%c » cần đến một đối số dạng chuỗi không rỗng\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"tùy chọn « -%c » cần đến một đối số dạng số nguyên dương\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\"%sPhần mềm này tự do; hãy xem mã nguồn để tìm thấy điều kiện sao chép.\\n\"\n\"%sKhông bảo đảm gì cả, dù khả năng bán hay khả năng làm việc dứt khoát.\\n\"\n\"%s\\n\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sChương trình này đã được xây dụng cho %s\\n\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\"\\n\"\n\"%sChương trình này đã được xây dụng cho %s (%s)\\n\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\"\\n\"\n\"# Cơ sở dữ liệu Make, được in ra vào %s\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Mới xong cơ sở dữ liệu Make vào %s\\n\"\n\n#: main.c:3101\n#, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"%s: Đang vào một thư mục lạ\\n\"\n\n#: main.c:3103\n#, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"%s: Đang rời khỏi một thư mục lạ\\n\"\n\n#: main.c:3106\n#, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"%s: Đang vào thư mục « %s »\\n\"\n\n#: main.c:3109\n#, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"%s: Đang rời khỏi thư mục « %s »\\n\"\n\n#: main.c:3114\n#, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"%s[%u]: Đang vào một thư mục lạ\\n\"\n\n#: main.c:3117\n#, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"%s[%u]: Đang rời khỏi một thư mục lạ\\n\"\n\n#: main.c:3121\n#, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"%s[%u]: Đang vào thư mục « %s »\\n\"\n\n#: main.c:3124\n#, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"%s[%u]: Đang rời khỏi thư mục « %s »\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \".  Dừng.\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"Không biết lỗi: %d\"\n\n# Variable: don't translate / Biến: đừng dịch\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"%s%s: %s\"\n\n# Variable: do not translate/ biến: đừng dịch\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"%s: %s\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"hết bộ nhớ ảo hoàn toàn\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"%s: người dùng %lu (thật %lu), nhóm %lu (thật %lu)\\n\"\n\n#: misc.c:667\nmsgid \"Initialized access\"\nmsgstr \"Truy cấp đã sở khởi\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"Truy cập người dùng\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"Truy cập Make\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"Truy cập điều con\"\n\n#: misc.c:892\n#, c-format\nmsgid \"write error: %s\"\nmsgstr \"lỗi ghi: %s\"\n\n#: misc.c:894\nmsgid \"write error\"\nmsgstr \"lỗi ghi\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"Đạng đọc các tập tin tạo (makefile)...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"Đạng đọc tập tin tạo (makefile) « %s »...\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \" (không có mục tiêu mặc định)\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (đường dẫn tìm kiếm)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \" (cũng được)\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \" (không mở rộng ~)\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"gặp cú pháp không hợp lệ trong đồ điều kiện \"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"gặp « endef » bắt nguồn ở ngoài\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"tên biến rỗng\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"chỉ thị « override » (đè) rỗng\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"chỉ thị « override » (đè) không hợp lệ\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"lệnh bắt đầu trước đích thứ nhất\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"thiếu quy tắc trước các lệnh\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"thiếu bộ phân cách%s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (bạn có muốn dùng TAB thay vào 8 dấu cách chứ?)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"thiếu mẫu đích\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"nhiều mẫu đích\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"mẫu đích không chứa « %% »\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"thiếu « endif »\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"Gặp chuỗi chữ bắt nguồn ở ngoài sau chi thị « endef »\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"thiếu « endef », « define » (định nghĩa) chưa kết thúc\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"Gặp chuỗi chữ bắt nguồn ở ngoài sau chi thị « %s »\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"gặp « %s » bắt nguồn ở ngoài\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"chỉ cho phép một « else » (nếu không thì) cho mỗi đồ điều kiện thôi\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"Lời định nghĩa biến đặc trưng cho đích dạng sai\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"không thể định nghĩa điều kiện tiên quyết trong tập lệnh kiểu lệnh\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"gặp quy tắc mẫu kiểu ngầm và tĩnh được trộn với nhau\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"gặp quy tắc mẫu kiểu ngầm và chuẩn được trộn với nhau\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"đích « %s » không khớp với mẫu đích\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"tập tin đích « %s » có mục nhập kiểu cả « : » lẫn « :: » đều\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"đích « %s » được đưa ra nhiều lần trong cùng một quy tắc\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"cảnh báo : đang đè lên các lệnh cho đích « %s »\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"cảnh báo : đang bỏ qua các lệnh cũ cho đích « %s »\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"cảnh báo : đã xem ký tự NUL (rỗng) nên bỏ qua phần còn lại của dòng đó\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"Không có gì cần làm cho « %s ».\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"« %s » là hiện thời.\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"Đang xén bớt tập tin « %s ».\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sKhông có quy tắc tới đích make « %s »%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%sKhông có quy tắc tới đích make « %s », cần thiết bởi « %s »%s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"Đang suy nghĩ tập tin đích « %s ».\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"Vừa cố cập nhật tập tin « %s » nhưng bị lỗi.\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"Tập tin « %s » đã được suy nghĩ.\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Vẫn còn đang cập nhật tập tin « %s »...\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"Mới cập nhật xong tập tin « %s ».\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"Tập tin « %s » không tồn tại.\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\"*** Cảnh báo : tập tin « .LOW_RESOLUTION_TIME » (thời gian giải pháp thấp) « \"\n\"%s » có nhãn thời gian cao\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"Tìm thấy một quy tắc ngầm cho « %s ».\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Không tìm thấy quy tắc ngầm cho « %s »\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"Đang dùng các lệnh mặc định cho « %s ».\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"Cách phụ thuộc vòng tròn « %s ← %s » bị gỡ bỏ.\"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Mới xong các điều kiện tiên quyết của tập tin đích « %s ».\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"Đang tạo các điều kiện tiên quyết của « %s ».\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Đang chịu thua về tập tin đích « %s ».\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"Đích « %s » không được tạo lại vì gặp lỗi.\"\n\n#: remake.c:677\n#, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"\"\n\"Điều kiện tiên quyết « %s » là order-only (chỉ thứ tự) cho đích « %s ».\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Điều kiện tiên quyết « %s » của đích « %s » không tồn tại.\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"Điều kiện tiên quyết « %s » là mới hơn đích « %s » .\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"Điều kiện tiên quyết « %s » là cũ hơn đích « %s » .\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"\"\n\"Đích « %s » là kiểu dấu hai chấm đôi và không có điều kiện tiên quyết nào.\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"\"\n\"Không có lệnh cho « %s », và chưa thật sự thay đổi điều kiện tiên quyết \"\n\"nào.\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"Đang tạo « %s » vì gặp cờ always-make (luôn luôn tạo).\\n\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Không cần tạo lại đích « %s ».\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"; đang dùng tên VPATH (đường dẫn V) « %s »\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"Phải tạo lại đích « %s ».\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"  Đang bỏ qua tên đường dẫn VPATH « %s ».\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"Đang chạy các lệnh của « %s ».\\n\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"Việc tạo lại tập tin đích « %s » bị lỗi.\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"Mới  tạo lại tập tin đích « %s ».\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Tập tin đích « %s » cần được tạo lại dưới « -q ».\\n\"\n\n#: remake.c:1306\n#, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"Cảnh báo : tập tin « %s » có giờ sửa đổi trong tương lai.\"\n\n#: remake.c:1313\n#, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"Cảnh báo : tập tin « %s » có giờ sửa đổi « %.2g s » trong tương lai.\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \"Yếu tố « .LIBPATTERNS » (các mẫu thư viên) « %s » không phải là mẫu\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"Thuế quan không xuất được: %s\\n\"\n\n#: rule.c:548\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# Quy tắc ngầm\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# Không có quy tắc ngầm.\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u quy tắc ngầm, %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" thiết bị cuối\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"LỖI: « num_pattern_rules » (số quy tắc mẫu) không đúng!  %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"tín hiệu lạ\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"Ngừng nói\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"Ngắt\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"Thoát\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Lệnh cấm\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"Bẫy vết/điểm ngắt\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"Bị hủy bỏ\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"Bẫy IOT\"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"Bẫy EMT\"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"Ngoại lệ điểm phù động\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"Bị buộc kết thúc\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"Lỗi mạch nối\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"Lỗi phân đoạn\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"Cuộc gọi hệ thống sai\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"Ống dẫn bị ngắt\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"Đồng hồ báo động\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"Bị kết thúc\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"Tín hiệu tự định nghĩa 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"Tín hiệu tự định nghĩa 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"Tiến trình con đã thoát\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"Bị cúp điện đột ngột\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"Bị ngừng\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"Bị ngừng (kết nhập tty)\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"Bị ngừng (kết xuất tty)\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"Bị ngừng (tín hiệu)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"Giới hạn thời gian CPU (đơn vị xử lý trung tâm) bị vượt quá\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"Giới hạn kích cỡ tập tin bị vượt quá\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"Bộ đếm thời gian ảo đã mãn hạn\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"Bộ đếm khi theo dõi cách sử dụng tiềm năng hệ thống đã mãn hạn\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Cửa sổ đã thay đổi\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"Đã tiếp tục\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"Tình trạng I/O (nhập/xuất) khẩn cấp\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"I/O (nhập/xuất) có thể\"\n\n# Literal: don't translate / Nghĩa chữ: đừng dịch\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n# Literal: don't translate / Nghĩa chữ: đừng dịch\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Tài nguyên bị mất\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Tín hiệu nguy hiểm\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Yêu cầu thông tin\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Không có sẵn sàng bộ đồng xử lý điểm phù động\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"mặc định\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"môi trường\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"tập tin tạo\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"môi trường dưới « -e »\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"dòng lệnh\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"chỉ thị « override » (đè)\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"tự động\"\n\n#: variable.c:1396\n#, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (từ « %s », dòng %lu)\"\n\n#: variable.c:1438\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"# thống kê bảng băm lập biến:\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Biến\\n\"\n\n#: variable.c:1453\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Giá trị biến đặc trưng cho mẫu\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# Không có giá trị biến đặc trưng cho mẫu\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u giá trị biến đặc trưng cho mẫu\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"cảnh báo : chưa định nghĩa biến « %.*s »\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"việc « search » (tìm kiếm hệ thống) bị lỗi với %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"Cảnh báo : việc chuyển hướng rỗng\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"lỗi nội bộ : tính trạng lệnh « %s »\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"• cảnh báo, CTRL-Y sẽ để một số tiến trình con còn lại.\\n\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\"• cảnh báo, có lẽ bạn sẽ phải bật lại khả năng quản lý bằng CTRL-Y từ DCL.\\n\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"BUILTIN [%s][%s]\\n\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"BUILTIN CD %s\\n\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"BUILTIN RM %s\\n\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"Không biết lệnh builtin (có sẵn) « %s »\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"Lỗi, lệnh rỗng\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \"Kết nhập đã được chuyển hướng từ %s\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \"Lỗi đã được chuyển hướng đến %s\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \"Kết xuất đã được chuyển hướng đến %s\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"Đang thực hiện %s thay thế\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"Gặp lỗi khi tạo và thực hiện (spawn), %d\\n\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Đường dẫn tìm kiếm VPATH\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# Không có đường dẫn tìm kiếm VPATH nào\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u Đường dẫn tìm kiếm « vpath ».\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# Không có đường dẫn tìm kiếm chung (biến « VPATH »).\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# Đường dẫn tìm kiếm chung (biến « VPATH »).\\n\"\n\"# \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \"Đừng ghi rõ « -j » hay « --jobs » nếu <sh.exe> không sẵn sàng.\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \"Đang lập lại trình make cho chế độ công việc đơn.\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/po/zh_CN.po",
    "content": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2002 Free Software Foundation, Inc.\n# This file is distributed under the same license as the make package.\n# Wang Li <charles@linux.net.cn>, 2002.\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: make 3.79.1\\n\"\n\"Report-Msgid-Bugs-To: bug-make@gnu.org\\n\"\n\"POT-Creation-Date: 2006-04-01 01:40-0500\\n\"\n\"PO-Revision-Date: 2002-07-22 15:02+0800\\n\"\n\"Last-Translator: Wang Li <charles@linux.net.cn>\\n\"\n\"Language-Team: Chinese (simplified) <i18n-translation@lists.linux.net.cn>\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=gb2312\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\"\n\n#: ar.c:53\n#, c-format\nmsgid \"attempt to use unsupported feature: `%s'\"\nmsgstr \"ͼʹòֵ֧Ĺܣ%s\"\n\n#: ar.c:137\nmsgid \"touch archive member is not available on VMS\"\nmsgstr \"VMS ϵͳϲ֧ touch 鵵Ա\"\n\n#: ar.c:168\n#, c-format\nmsgid \"touch: Archive `%s' does not exist\"\nmsgstr \"touch鵵ļ%s\"\n\n#: ar.c:171\n#, c-format\nmsgid \"touch: `%s' is not a valid archive\"\nmsgstr \"touch%sǺϷĹ鵵ļ\"\n\n#: ar.c:178\n#, c-format\nmsgid \"touch: Member `%s' does not exist in `%s'\"\nmsgstr \"touchڡ%2$sвڳԱ%1$s\"\n\n#: ar.c:185\n#, c-format\nmsgid \"touch: Bad return code from ar_member_touch on `%s'\"\nmsgstr \"touchԡ%sϵ ar_member_touch Ĵ󷵻\"\n\n#: arscan.c:69\n#, c-format\nmsgid \"lbr$set_module failed to extract module info, status = %d\"\nmsgstr \"lbr$set_modules ȡģϢʧܣ״̬ = %d\"\n\n#: arscan.c:154\n#, c-format\nmsgid \"lbr$ini_control failed with status = %d\"\nmsgstr \"lbr$ini_control ʧܣ״̬ = %d\"\n\n#: arscan.c:165\n#, c-format\nmsgid \"unable to open library `%s' to lookup member `%s'\"\nmsgstr \"޷򿪿⡰%sѰҳԱ%s\"\n\n#: arscan.c:825\n#, c-format\nmsgid \"Member `%s'%s: %ld bytes at %ld (%ld).\\n\"\nmsgstr \"\"\n\n#: arscan.c:826\nmsgid \" (name might be truncated)\"\nmsgstr \" (ƿܱض)\"\n\n#: arscan.c:828\n#, c-format\nmsgid \"  Date %s\"\nmsgstr \"   %s\"\n\n#: arscan.c:829\n#, c-format\nmsgid \"  uid = %d, gid = %d, mode = 0%o.\\n\"\nmsgstr \"  uid = %dgid = %dmode = 0%o\\n\"\n\n#: commands.c:422\nmsgid \"*** Break.\\n\"\nmsgstr \"*** жϡ\\n\"\n\n#: commands.c:545\n#, c-format\nmsgid \"*** [%s] Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** [%s] 鵵Ա%sǼٵģδɾ\"\n\n#: commands.c:548\n#, c-format\nmsgid \"*** Archive member `%s' may be bogus; not deleted\"\nmsgstr \"*** 鵵Ա%sǼٵģδɾ\"\n\n#: commands.c:561\n#, c-format\nmsgid \"*** [%s] Deleting file `%s'\"\nmsgstr \"*** [%s] ɾļ%s\"\n\n#: commands.c:563\n#, c-format\nmsgid \"*** Deleting file `%s'\"\nmsgstr \"*** ɾļ%s\"\n\n#: commands.c:599\nmsgid \"#  commands to execute\"\nmsgstr \"#  Ҫִе\"\n\n#: commands.c:602\nmsgid \" (built-in):\"\nmsgstr \" ()\"\n\n#: commands.c:604\n#, c-format\nmsgid \" (from `%s', line %lu):\\n\"\nmsgstr \" (ӡ%s %lu)\\n\"\n\n#: dir.c:983\nmsgid \"\"\n\"\\n\"\n\"# Directories\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# Ŀ¼\\n\"\n\n#: dir.c:995\n#, c-format\nmsgid \"# %s: could not be stat'd.\\n\"\nmsgstr \"# %s޷ stat \\n\"\n\n#: dir.c:999\n#, c-format\nmsgid \"# %s (key %s, mtime %d): could not be opened.\\n\"\nmsgstr \"# %s (ؼ %s޸ʱ %d)޷򿪡\\n\"\n\n#: dir.c:1003\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): could not be opened.\\n\"\nmsgstr \"# %s (豸 %di-ڵ [%d,%d,%d])޷򿪡\\n\"\n\n#: dir.c:1008\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): could not be opened.\\n\"\nmsgstr \"# %s (豸 %ldi-ڵ %ld)޷򿪡\\n\"\n\n#: dir.c:1035\n#, c-format\nmsgid \"# %s (key %s, mtime %d): \"\nmsgstr \"# %s (ؼ %s޸ʱ %d)\"\n\n#: dir.c:1039\n#, c-format\nmsgid \"# %s (device %d, inode [%d,%d,%d]): \"\nmsgstr \"# %s (豸 %di-ڵ [%d,%d,%d])\"\n\n#: dir.c:1044\n#, c-format\nmsgid \"# %s (device %ld, inode %ld): \"\nmsgstr \"# %s (豸 %ldi-ڵ %ld)\"\n\n#: dir.c:1050 dir.c:1071\nmsgid \"No\"\nmsgstr \"\"\n\n#: dir.c:1053 dir.c:1074\nmsgid \" files, \"\nmsgstr \" ļ \"\n\n#: dir.c:1055 dir.c:1076\nmsgid \"no\"\nmsgstr \"\"\n\n#: dir.c:1058\nmsgid \" impossibilities\"\nmsgstr \"\"\n\n#: dir.c:1062\nmsgid \" so far.\"\nmsgstr \" Ϊֹ\"\n\n#: dir.c:1079\n#, c-format\nmsgid \" impossibilities in %lu directories.\\n\"\nmsgstr \"\"\n\n#: expand.c:128\n#, c-format\nmsgid \"Recursive variable `%s' references itself (eventually)\"\nmsgstr \"\"\n\n#: expand.c:266\nmsgid \"unterminated variable reference\"\nmsgstr \"δֹı\"\n\n#: file.c:270\n#, c-format\nmsgid \"Commands were specified for file `%s' at %s:%lu,\"\nmsgstr \"ļ%s %s:%lu ָ\"\n\n#: file.c:275\n#, c-format\nmsgid \"Commands for file `%s' were found by implicit rule search,\"\nmsgstr \"ļ%sͨҵ\"\n\n#: file.c:278\n#, c-format\nmsgid \"but `%s' is now considered the same file as `%s'.\"\nmsgstr \"%sڱ%sͬһļ\"\n\n#: file.c:281\n#, c-format\nmsgid \"Commands for `%s' will be ignored in favor of those for `%s'.\"\nmsgstr \"\"\n\n#: file.c:301\n#, c-format\nmsgid \"can't rename single-colon `%s' to double-colon `%s'\"\nmsgstr \"޷ðš%sΪ˫ðš%s\"\n\n#: file.c:306\n#, c-format\nmsgid \"can't rename double-colon `%s' to single-colon `%s'\"\nmsgstr \"޷˫ðš%sΪðš%s\"\n\n#: file.c:381\n#, c-format\nmsgid \"*** Deleting intermediate file `%s'\"\nmsgstr \"*** ɾмļ%s\"\n\n#: file.c:385\n#, fuzzy\nmsgid \"Removing intermediate files...\\n\"\nmsgstr \"*** ɾмļ%s\"\n\n#: file.c:781\n#, c-format\nmsgid \"%s: Timestamp out of range; substituting %s\"\nmsgstr \"%sʱǳΧ滻 %s\"\n\n#: file.c:782\nmsgid \"Current time\"\nmsgstr \"ǰʱ\"\n\n#: file.c:881\nmsgid \"# Not a target:\"\nmsgstr \"# һĿ꣺\"\n\n#: file.c:903\nmsgid \"#  Precious file (prerequisite of .PRECIOUS).\"\nmsgstr \"\"\n\n#: file.c:905\nmsgid \"#  Phony target (prerequisite of .PHONY).\"\nmsgstr \"\"\n\n#: file.c:907\nmsgid \"#  Command-line target.\"\nmsgstr \"#  Ŀꡣ\"\n\n#: file.c:909\nmsgid \"#  A default, MAKEFILES, or -include/sinclude makefile.\"\nmsgstr \"\"\n\n#: file.c:911\nmsgid \"#  Implicit rule search has been done.\"\nmsgstr \"#  ɡ\"\n\n#: file.c:912\nmsgid \"#  Implicit rule search has not been done.\"\nmsgstr \"#  δɡ\"\n\n#: file.c:914\n#, c-format\nmsgid \"#  Implicit/static pattern stem: `%s'\\n\"\nmsgstr \"#  /̬ģʽɣ%s\\n\"\n\n#: file.c:916\nmsgid \"#  File is an intermediate prerequisite.\"\nmsgstr \"#  ļһмǰᡣ\"\n\n#: file.c:919\nmsgid \"#  Also makes:\"\nmsgstr \"#  Ҫ\"\n\n#: file.c:925\nmsgid \"#  Modification time never checked.\"\nmsgstr \"#  Ӳ޸ʱ䡣\"\n\n#: file.c:927\nmsgid \"#  File does not exist.\"\nmsgstr \"#  ļڡ\"\n\n#: file.c:929\nmsgid \"#  File is very old.\"\nmsgstr \"#  ļǳ¾ɡ\"\n\n#: file.c:934\n#, c-format\nmsgid \"#  Last modified %s\\n\"\nmsgstr \"#   %s\\n\"\n\n#: file.c:937\nmsgid \"#  File has been updated.\"\nmsgstr \"#  ļѾ¡\"\n\n#: file.c:937\nmsgid \"#  File has not been updated.\"\nmsgstr \"#  ļδ¡\"\n\n#: file.c:941\nmsgid \"#  Commands currently running (THIS IS A BUG).\"\nmsgstr \"#  е (Ǹ)\"\n\n#: file.c:944\nmsgid \"#  Dependencies commands running (THIS IS A BUG).\"\nmsgstr \"#  е (Ǹ)\"\n\n#: file.c:953\nmsgid \"#  Successfully updated.\"\nmsgstr \"#  ³ɹ\"\n\n#: file.c:957\nmsgid \"#  Needs to be updated (-q is set).\"\nmsgstr \"#  Ҫ ( -q 趨)\"\n\n#: file.c:960\nmsgid \"#  Failed to be updated.\"\nmsgstr \"#  ʧܡ\"\n\n#: file.c:963\nmsgid \"#  Invalid value in `update_status' member!\"\nmsgstr \"#  update_statusԱЧֵ\"\n\n#: file.c:970\nmsgid \"#  Invalid value in `command_state' member!\"\nmsgstr \"#  command_stateԱЧֵ\"\n\n#: file.c:989\nmsgid \"\"\n\"\\n\"\n\"# Files\"\nmsgstr \"\"\n\"\\n\"\n\"# ļ\"\n\n#: file.c:993\nmsgid \"\"\n\"\\n\"\n\"# files hash-table stats:\\n\"\n\"# \"\nmsgstr \"\"\n\n#: function.c:759\nmsgid \"non-numeric first argument to `word' function\"\nmsgstr \"wordĵһֵ\"\n\n#: function.c:764\nmsgid \"first argument to `word' function must be greater than 0\"\nmsgstr \"wordĵһ 0\"\n\n#: function.c:785\nmsgid \"non-numeric first argument to `wordlist' function\"\nmsgstr \"wordlistĵһֵ\"\n\n#: function.c:787\nmsgid \"non-numeric second argument to `wordlist' function\"\nmsgstr \"wordlistĵڶֵ\"\n\n#: function.c:1453\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(In) failed (e=%ld)\\n\"\nmsgstr \"ӽ̣ƾ(In)ʧ (e=%d)\\n\"\n\n#: function.c:1464\n#, fuzzy, c-format\nmsgid \"create_child_process: DuplicateHandle(Err) failed (e=%ld)\\n\"\nmsgstr \"ӽ̣ƾ(Err)ʧ (e=%d)\\n\"\n\n#: function.c:1469\n#, fuzzy, c-format\nmsgid \"CreatePipe() failed (e=%ld)\\n\"\nmsgstr \"CreatePipe() ʧ (e=%d)\\n\"\n\n#: function.c:1474\nmsgid \"windows32_openpipe (): process_init_fd() failed\\n\"\nmsgstr \"windows32_openpipe ()process_init_fd() ʧ\\n\"\n\n#: function.c:1725\n#, c-format\nmsgid \"Cleaning up temporary batch file %s\\n\"\nmsgstr \"ʱļ %s\\n\"\n\n#: function.c:2101\n#, fuzzy, c-format\nmsgid \"insufficient number of arguments (%d) to function `%s'\"\nmsgstr \"%2$sĲ (%1$d)\"\n\n#: function.c:2113\n#, fuzzy, c-format\nmsgid \"unimplemented on this platform: function `%s'\"\nmsgstr \"ڱƽ̨δʵ֣%s\"\n\n#: function.c:2163\n#, c-format\nmsgid \"unterminated call to function `%s': missing `%c'\"\nmsgstr \"Ժ%sδֹĵã©%c\"\n\n#: getopt.c:663\n#, c-format\nmsgid \"%s: option `%s' is ambiguous\\n\"\nmsgstr \"%sѡ%s岻\\n\"\n\n#: getopt.c:687\n#, c-format\nmsgid \"%s: option `--%s' doesn't allow an argument\\n\"\nmsgstr \"%sѡ--%sҪ\\n\"\n\n#: getopt.c:692\n#, c-format\nmsgid \"%s: option `%c%s' doesn't allow an argument\\n\"\nmsgstr \"%sѡ%c%sҪ\\n\"\n\n#: getopt.c:709 getopt.c:882\n#, c-format\nmsgid \"%s: option `%s' requires an argument\\n\"\nmsgstr \"%sѡ%sҪһ\\n\"\n\n#: getopt.c:738\n#, c-format\nmsgid \"%s: unrecognized option `--%s'\\n\"\nmsgstr \"%s޷ʶѡ--%s\\n\"\n\n#: getopt.c:742\n#, c-format\nmsgid \"%s: unrecognized option `%c%s'\\n\"\nmsgstr \"%s޷ʶѡ%c%s\\n\"\n\n#: getopt.c:768\n#, c-format\nmsgid \"%s: illegal option -- %c\\n\"\nmsgstr \"%sǷѡ -- %c\\n\"\n\n#: getopt.c:771\n#, c-format\nmsgid \"%s: invalid option -- %c\\n\"\nmsgstr \"%sǷѡ -- %c\\n\"\n\n#: getopt.c:801 getopt.c:931\n#, c-format\nmsgid \"%s: option requires an argument -- %c\\n\"\nmsgstr \"%sѡҪһ -- %c\\n\"\n\n#: getopt.c:848\n#, c-format\nmsgid \"%s: option `-W %s' is ambiguous\\n\"\nmsgstr \"%sѡ-W %s岻\\n\"\n\n#: getopt.c:866\n#, c-format\nmsgid \"%s: option `-W %s' doesn't allow an argument\\n\"\nmsgstr \"%sѡ-W %s\\n\"\n\n#: hash.c:51\n#, c-format\nmsgid \"can't allocate %ld bytes for hash table: memory exhausted\"\nmsgstr \"\"\n\n#: hash.c:282\n#, c-format\nmsgid \"Load=%ld/%ld=%.0f%%, \"\nmsgstr \"\"\n\n#: hash.c:284\n#, c-format\nmsgid \"Rehash=%d, \"\nmsgstr \"\"\n\n#: hash.c:285\n#, c-format\nmsgid \"Collisions=%ld/%ld=%.0f%%\"\nmsgstr \"\"\n\n#: implicit.c:41\n#, c-format\nmsgid \"Looking for an implicit rule for `%s'.\\n\"\nmsgstr \"Ϊ%sѰ\\n\"\n\n#: implicit.c:57\n#, c-format\nmsgid \"Looking for archive-member implicit rule for `%s'.\\n\"\nmsgstr \"Ϊ%sѰҹ鵵Ա\\n\"\n\n#: implicit.c:319\nmsgid \"Avoiding implicit rule recursion.\\n\"\nmsgstr \"ݹ顣\\n\"\n\n#: implicit.c:476\n#, c-format\nmsgid \"Trying pattern rule with stem `%.*s'.\\n\"\nmsgstr \"ɡ%.*sƥģʽ\\n\"\n\n#: implicit.c:667\n#, c-format\nmsgid \"Rejecting impossible implicit prerequisite `%s'.\\n\"\nmsgstr \"ܾܵǰᡰ%s\\n\"\n\n#: implicit.c:668\n#, c-format\nmsgid \"Rejecting impossible rule prerequisite `%s'.\\n\"\nmsgstr \"ܾܵĹǰᡰ%s\\n\"\n\n#: implicit.c:678\n#, c-format\nmsgid \"Trying implicit prerequisite `%s'.\\n\"\nmsgstr \"ǰᡰ%s\\n\"\n\n#: implicit.c:679\n#, c-format\nmsgid \"Trying rule prerequisite `%s'.\\n\"\nmsgstr \"Թǰᡰ%s\\n\"\n\n#: implicit.c:710\n#, c-format\nmsgid \"Found prerequisite `%s' as VPATH `%s'\\n\"\nmsgstr \"\"\n\n#: implicit.c:730\n#, c-format\nmsgid \"Looking for a rule with intermediate file `%s'.\\n\"\nmsgstr \"Ѱʹмļ%sĹ\\n\"\n\n#: job.c:321\n#, fuzzy\nmsgid \"Cannot create a temporary file\\n\"\nmsgstr \"fwrite (ʱļ)\"\n\n#: job.c:388\n#, c-format\nmsgid \"*** [%s] Error 0x%x (ignored)\"\nmsgstr \"*** [%s]  0x%x ()\"\n\n#: job.c:389\n#, c-format\nmsgid \"*** [%s] Error 0x%x\"\nmsgstr \"*** [%s]  0x%x\"\n\n#: job.c:393\n#, c-format\nmsgid \"[%s] Error %d (ignored)\"\nmsgstr \"[%s]  %d ()\"\n\n#: job.c:394\n#, c-format\nmsgid \"*** [%s] Error %d\"\nmsgstr \"*** [%s]  %d\"\n\n#: job.c:399\nmsgid \" (core dumped)\"\nmsgstr \" (core dumped)\"\n\n#: job.c:488\nmsgid \"*** Waiting for unfinished jobs....\"\nmsgstr \"*** ڵȴδɵ....\"\n\n#: job.c:518\n#, c-format\nmsgid \"Live child 0x%08lx (%s) PID %ld %s\\n\"\nmsgstr \"Ծӽ 0x%08lx (%s) PID %ld %s\\n\"\n\n#: job.c:520 job.c:701 job.c:804 job.c:1457\nmsgid \" (remote)\"\nmsgstr \" (Զ)\"\n\n#: job.c:698\n#, c-format\nmsgid \"Reaping losing child 0x%08lx PID %ld %s\\n\"\nmsgstr \"ֹʧܵӽ 0x%08lx PID %ld %s\\n\"\n\n#: job.c:699\n#, c-format\nmsgid \"Reaping winning child 0x%08lx PID %ld %s\\n\"\nmsgstr \"ֹʤӽ 0x%08lx PID %ld %s\\n\"\n\n#: job.c:704\n#, c-format\nmsgid \"Cleaning up temp batch file %s\\n\"\nmsgstr \"ʱļ %s\\n\"\n\n#: job.c:802\n#, fuzzy, c-format\nmsgid \"Removing child 0x%08lx PID %ld%s from chain.\\n\"\nmsgstr \"ɾӽ 0x%08lx PID %ld %s\\n\"\n\n#: job.c:862\nmsgid \"write jobserver\"\nmsgstr \"д\"\n\n#: job.c:864\n#, c-format\nmsgid \"Released token for child 0x%08lx (%s).\\n\"\nmsgstr \"Ϊӽ 0x%08lx (%s) ͷ(token)\\n\"\n\n#: job.c:1383\n#, fuzzy, c-format\nmsgid \"process_easy() failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() ʧ (e=%d)\\n\"\n\n#: job.c:1387 job.c:2020\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Counted %d args in failed launch\\n\"\nmsgstr \"\"\n\n#: job.c:1455\n#, c-format\nmsgid \"Putting child 0x%08lx (%s) PID %ld%s on the chain.\\n\"\nmsgstr \"ӽ 0x%08lx (%s) PID %ld%s \\n\"\n\n#: job.c:1709\n#, c-format\nmsgid \"Obtained token for child 0x%08lx (%s).\\n\"\nmsgstr \"\"\n\n#: job.c:1718\nmsgid \"read jobs pipe\"\nmsgstr \"ȡܵ\"\n\n#: job.c:1832\nmsgid \"cannot enforce load limits on this operating system\"\nmsgstr \"޷ڱϵͳʵʩ\"\n\n#: job.c:1834\nmsgid \"cannot enforce load limit: \"\nmsgstr \"޷ʵʩƣ\"\n\n#: job.c:1907\nmsgid \"no more file handles: could not duplicate stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1909\nmsgid \"no more file handles: could not duplicate stdout\\n\"\nmsgstr \"\"\n\n#: job.c:1937\nmsgid \"Could not restore stdin\\n\"\nmsgstr \"\"\n\n#: job.c:1945\nmsgid \"Could not restore stdout\\n\"\nmsgstr \"\"\n\n#: job.c:2016\n#, fuzzy, c-format\nmsgid \"process_easy() failed failed to launch process (e=%ld)\\n\"\nmsgstr \"process_easy() ʧ (e=%d)\\n\"\n\n#: job.c:2046\n#, fuzzy, c-format\nmsgid \"make reaped child pid %ld, still waiting for pid %ld\\n\"\nmsgstr \"make ֹӽ pid %dڵȴ pid %d\\n\"\n\n#: job.c:2085\n#, c-format\nmsgid \"%s: Command not found\"\nmsgstr \"%sδҵ\"\n\n#: job.c:2145\n#, c-format\nmsgid \"%s: Shell program not found\"\nmsgstr \"%sδҵ shell \"\n\n#: job.c:2154\nmsgid \"spawnvpe: environment space might be exhausted\"\nmsgstr \"\"\n\n#: job.c:2363\n#, fuzzy, c-format\nmsgid \"$SHELL changed (was `%s', now `%s')\\n\"\nmsgstr \"$SHELL Ѹı (ԭΪ%sΪ%s)\"\n\n#: job.c:2789\n#, c-format\nmsgid \"Creating temporary batch file %s\\n\"\nmsgstr \"ڴʱļ %s\\n\"\n\n#: job.c:2902\n#, c-format\nmsgid \"%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\\n\"\nmsgstr \"\"\n\n#: main.c:291\nmsgid \"Options:\\n\"\nmsgstr \"ѡ\\n\"\n\n#: main.c:292\n#, fuzzy\nmsgid \"  -b, -m                      Ignored for compatibility.\\n\"\nmsgstr \"Լ\"\n\n#: main.c:294\nmsgid \"  -B, --always-make           Unconditionally make all targets.\\n\"\nmsgstr \"\"\n\n#: main.c:296\nmsgid \"\"\n\"  -C DIRECTORY, --directory=DIRECTORY\\n\"\n\"                              Change to DIRECTORY before doing anything.\\n\"\nmsgstr \"\"\n\n#: main.c:299\n#, fuzzy\nmsgid \"  -d                          Print lots of debugging information.\\n\"\nmsgstr \"ӡϢ\"\n\n#: main.c:301\n#, fuzzy\nmsgid \"\"\n\"  --debug[=FLAGS]             Print various types of debugging information.\\n\"\nmsgstr \"ӡֵϢ\"\n\n#: main.c:303\nmsgid \"\"\n\"  -e, --environment-overrides\\n\"\n\"                              Environment variables override makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:306\nmsgid \"\"\n\"  -f FILE, --file=FILE, --makefile=FILE\\n\"\n\"                              Read FILE as a makefile.\\n\"\nmsgstr \"\"\n\n#: main.c:309\n#, fuzzy\nmsgid \"  -h, --help                  Print this message and exit.\\n\"\nmsgstr \"ӡϢ˳\"\n\n#: main.c:311\n#, fuzzy\nmsgid \"  -i, --ignore-errors         Ignore errors from commands.\\n\"\nmsgstr \"Ĵ\"\n\n#: main.c:313\nmsgid \"\"\n\"  -I DIRECTORY, --include-dir=DIRECTORY\\n\"\n\"                              Search DIRECTORY for included makefiles.\\n\"\nmsgstr \"\"\n\n#: main.c:316\n#, fuzzy\nmsgid \"\"\n\"  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no \"\n\"arg.\\n\"\nmsgstr \"ͬʱ N ޲޸\"\n\n#: main.c:318\n#, fuzzy\nmsgid \"\"\n\"  -k, --keep-going            Keep going when some targets can't be made.\\n\"\nmsgstr \"ĳЩĿ޷ʱȻ\"\n\n#: main.c:320\nmsgid \"\"\n\"  -l [N], --load-average[=N], --max-load[=N]\\n\"\n\"                              Don't start multiple jobs unless load is below \"\n\"N.\\n\"\nmsgstr \"\"\n\n#: main.c:323\nmsgid \"\"\n\"  -L, --check-symlink-times   Use the latest mtime between symlinks and \"\n\"target.\\n\"\nmsgstr \"\"\n\n#: main.c:325\nmsgid \"\"\n\"  -n, --just-print, --dry-run, --recon\\n\"\n\"                              Don't actually run any commands; just print \"\n\"them.\\n\"\nmsgstr \"\"\n\n#: main.c:328\nmsgid \"\"\n\"  -o FILE, --old-file=FILE, --assume-old=FILE\\n\"\n\"                              Consider FILE to be very old and don't remake \"\n\"it.\\n\"\nmsgstr \"\"\n\n#: main.c:331\n#, fuzzy\nmsgid \"  -p, --print-data-base       Print make's internal database.\\n\"\nmsgstr \"ӡ make ڲݿ\"\n\n#: main.c:333\n#, fuzzy\nmsgid \"\"\n\"  -q, --question              Run no commands; exit status says if up to \"\n\"date.\\n\"\nmsgstr \"κ˳״̬˵Ƿȫ\"\n\n#: main.c:335\n#, fuzzy\nmsgid \"  -r, --no-builtin-rules      Disable the built-in implicit rules.\\n\"\nmsgstr \"\"\n\n#: main.c:337\n#, fuzzy\nmsgid \"  -R, --no-builtin-variables  Disable the built-in variable settings.\\n\"\nmsgstr \"ñ\"\n\n#: main.c:339\nmsgid \"  -s, --silent, --quiet       Don't echo commands.\\n\"\nmsgstr \"\"\n\n#: main.c:341\nmsgid \"\"\n\"  -S, --no-keep-going, --stop\\n\"\n\"                              Turns off -k.\\n\"\nmsgstr \"\"\n\n#: main.c:344\n#, fuzzy\nmsgid \"  -t, --touch                 Touch targets instead of remaking them.\\n\"\nmsgstr \"touch Ŀ´\"\n\n#: main.c:346\n#, fuzzy\nmsgid \"\"\n\"  -v, --version               Print the version number of make and exit.\\n\"\nmsgstr \"ӡ make İ汾Ų˳\"\n\n#: main.c:348\n#, fuzzy\nmsgid \"  -w, --print-directory       Print the current directory.\\n\"\nmsgstr \"ӡǰĿ¼\"\n\n#: main.c:350\n#, fuzzy\nmsgid \"\"\n\"  --no-print-directory        Turn off -w, even if it was turned on \"\n\"implicitly.\\n\"\nmsgstr \"ʹ -w ĬϿҲҪر -w\"\n\n#: main.c:352\nmsgid \"\"\n\"  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\\n\"\n\"                              Consider FILE to be infinitely new.\\n\"\nmsgstr \"\"\n\n#: main.c:355\n#, fuzzy\nmsgid \"\"\n\"  --warn-undefined-variables  Warn when an undefined variable is \"\n\"referenced.\\n\"\nmsgstr \"δʱ򷢳\"\n\n#: main.c:549\nmsgid \"empty string invalid as file name\"\nmsgstr \"ַЧļ\"\n\n#: main.c:630\n#, c-format\nmsgid \"unknown debug level specification `%s'\"\nmsgstr \"δ֪ĵԼ%s\"\n\n#: main.c:670\n#, fuzzy, c-format\nmsgid \"%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%lx)\\n\"\nmsgstr \"%sж/쳣 ( = 0x%x, ַ = 0x%x)\\n\"\n\n#: main.c:677\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"Unhandled exception filter called from program %s\\n\"\n\"ExceptionCode = %lx\\n\"\n\"ExceptionFlags = %lx\\n\"\n\"ExceptionAddress = %lx\\n\"\nmsgstr \"\"\n\n#: main.c:685\n#, fuzzy, c-format\nmsgid \"Access violation: write operation at address %lx\\n\"\nmsgstr \"ʳͻַ %x д\\n\"\n\n#: main.c:686\n#, fuzzy, c-format\nmsgid \"Access violation: read operation at address %lx\\n\"\nmsgstr \"ʳͻַ %xĶ\\n\"\n\n#: main.c:762 main.c:773\n#, c-format\nmsgid \"find_and_set_shell setting default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:814\n#, c-format\nmsgid \"find_and_set_shell path search set default_shell = %s\\n\"\nmsgstr \"\"\n\n#: main.c:1236\n#, c-format\nmsgid \"%s is suspending for 30 seconds...\"\nmsgstr \"%s ڹ 30 ...\"\n\n#: main.c:1238\n#, c-format\nmsgid \"done sleep(30). Continuing.\\n\"\nmsgstr \"˯(30)\\n\"\n\n#: main.c:1466\nmsgid \"Makefile from standard input specified twice.\"\nmsgstr \"ָԱ׼ makefile\"\n\n#: main.c:1505 vmsjobs.c:486\nmsgid \"fopen (temporary file)\"\nmsgstr \"fopen (ʱļ)\"\n\n#: main.c:1511\nmsgid \"fwrite (temporary file)\"\nmsgstr \"fwrite (ʱļ)\"\n\n#: main.c:1640\nmsgid \"Parallel jobs (-j) are not supported on this platform.\"\nmsgstr \"ƽֲ̨֧ (-j)\"\n\n#: main.c:1641\nmsgid \"Resetting to single job (-j1) mode.\"\nmsgstr \"Ϊģʽ (-j1)\"\n\n#: main.c:1656\nmsgid \"internal error: multiple --jobserver-fds options\"\nmsgstr \"ڲ󣺶 --jobserver-fds ѡ\"\n\n#: main.c:1664\n#, c-format\nmsgid \"internal error: invalid --jobserver-fds string `%s'\"\nmsgstr \"ڲ󣺷Ƿ --jobserver-fds ַ%s\"\n\n#: main.c:1674\nmsgid \"warning: -jN forced in submake: disabling jobserver mode.\"\nmsgstr \"\"\n\n#: main.c:1684\nmsgid \"dup jobserver\"\nmsgstr \"\"\n\n#: main.c:1687\nmsgid \"\"\n\"warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.\"\nmsgstr \"\"\n\n#: main.c:1710\nmsgid \"creating jobs pipe\"\nmsgstr \"ڴܵ\"\n\n#: main.c:1725\nmsgid \"init jobserver pipe\"\nmsgstr \"ʼܵ\"\n\n#: main.c:1744\nmsgid \"Symbolic links not supported: disabling -L.\"\nmsgstr \"\"\n\n#: main.c:1820\nmsgid \"Updating makefiles....\\n\"\nmsgstr \"ڸ makefile....\\n\"\n\n#: main.c:1845\n#, c-format\nmsgid \"Makefile `%s' might loop; not remaking it.\\n\"\nmsgstr \"Makefile %sѭ´\\n\"\n\n#: main.c:1924\n#, c-format\nmsgid \"Failed to remake makefile `%s'.\"\nmsgstr \"´ makefile %s ʧܡ\"\n\n#: main.c:1941\n#, c-format\nmsgid \"Included makefile `%s' was not found.\"\nmsgstr \"Ҳ makefile %s\"\n\n#: main.c:1946\n#, c-format\nmsgid \"Makefile `%s' was not found\"\nmsgstr \"Ҳ makefile %s\"\n\n#: main.c:2016\nmsgid \"Couldn't change back to original directory.\"\nmsgstr \"޷صԭʼĿ¼\"\n\n#: main.c:2024\n#, fuzzy, c-format\nmsgid \"Re-executing[%u]:\"\nmsgstr \"ִУ\"\n\n#: main.c:2140\nmsgid \"unlink (temporary file): \"\nmsgstr \"ɾ (ʱļ)\"\n\n#: main.c:2169\nmsgid \".DEFAULT_GOAL contains more than one target\"\nmsgstr \"\"\n\n#: main.c:2189\nmsgid \"No targets specified and no makefile found\"\nmsgstr \"ûָĿ겢Ҳ makefile\"\n\n#: main.c:2191\nmsgid \"No targets\"\nmsgstr \"Ŀ\"\n\n#: main.c:2196\nmsgid \"Updating goal targets....\\n\"\nmsgstr \"\"\n\n#: main.c:2222\nmsgid \"warning:  Clock skew detected.  Your build may be incomplete.\"\nmsgstr \"棺⵽ʱӴĴǲġ\"\n\n#: main.c:2383\n#, c-format\nmsgid \"Usage: %s [options] [target] ...\\n\"\nmsgstr \"÷%s [ѡ] [Ŀ] ...\\n\"\n\n#: main.c:2389\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2391\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"This program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2394\n#, fuzzy, c-format\nmsgid \"Report bugs to <bug-make@gnu.org>\\n\"\nmsgstr \"\"\n\"\\n\"\n\"󱨸浽 <bug-make@gnu.org>\\n\"\n\n#: main.c:2466\n#, fuzzy, c-format\nmsgid \"the `-%c' option requires a non-empty string argument\"\nmsgstr \"-%cѡҪ\"\n\n#: main.c:2518\n#, c-format\nmsgid \"the `-%c' option requires a positive integral argument\"\nmsgstr \"-%cѡҪ\"\n\n#: main.c:2942\n#, c-format\nmsgid \"\"\n\"%sThis is free software; see the source for copying conditions.\\n\"\n\"%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n\"\n\"%sPARTICULAR PURPOSE.\\n\"\nmsgstr \"\"\n\n#: main.c:2948\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s\\n\"\nmsgstr \"\"\n\n#: main.c:2950\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%sThis program built for %s (%s)\\n\"\nmsgstr \"\"\n\n#: main.c:2968\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Make data base, printed on %s\"\nmsgstr \"\"\n\n#: main.c:2978\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# Finished Make data base on %s\\n\"\nmsgstr \"\"\n\n#: main.c:3101\n#, fuzzy, c-format\nmsgid \"%s: Entering an unknown directory\\n\"\nmsgstr \"һδ֪Ŀ¼\"\n\n#: main.c:3103\n#, fuzzy, c-format\nmsgid \"%s: Leaving an unknown directory\\n\"\nmsgstr \"һδ֪Ŀ¼\"\n\n#: main.c:3106\n#, fuzzy, c-format\nmsgid \"%s: Entering directory `%s'\\n\"\nmsgstr \"Ŀ¼%s\\n\"\n\n#: main.c:3109\n#, fuzzy, c-format\nmsgid \"%s: Leaving directory `%s'\\n\"\nmsgstr \"Ŀ¼%s\\n\"\n\n#: main.c:3114\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering an unknown directory\\n\"\nmsgstr \"һδ֪Ŀ¼\"\n\n#: main.c:3117\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving an unknown directory\\n\"\nmsgstr \"һδ֪Ŀ¼\"\n\n#: main.c:3121\n#, fuzzy, c-format\nmsgid \"%s[%u]: Entering directory `%s'\\n\"\nmsgstr \"Ŀ¼%s\\n\"\n\n#: main.c:3124\n#, fuzzy, c-format\nmsgid \"%s[%u]: Leaving directory `%s'\\n\"\nmsgstr \"Ŀ¼%s\\n\"\n\n#: misc.c:285\nmsgid \".  Stop.\\n\"\nmsgstr \" ֹͣ\\n\"\n\n#: misc.c:306\n#, c-format\nmsgid \"Unknown error %d\"\nmsgstr \"δ֪ %d\"\n\n#: misc.c:316\n#, c-format\nmsgid \"%s%s: %s\"\nmsgstr \"\"\n\n#: misc.c:324\n#, c-format\nmsgid \"%s: %s\"\nmsgstr \"\"\n\n#: misc.c:344 misc.c:359 misc.c:376 read.c:3127\nmsgid \"virtual memory exhausted\"\nmsgstr \"ڴľ\"\n\n#: misc.c:646\n#, c-format\nmsgid \"%s: user %lu (real %lu), group %lu (real %lu)\\n\"\nmsgstr \"\"\n\n#: misc.c:667\n#, fuzzy\nmsgid \"Initialized access\"\nmsgstr \"ѳʼ\"\n\n#: misc.c:746\nmsgid \"User access\"\nmsgstr \"\"\n\n#: misc.c:794\nmsgid \"Make access\"\nmsgstr \"\"\n\n#: misc.c:828\nmsgid \"Child access\"\nmsgstr \"\"\n\n#: misc.c:892\n#, fuzzy, c-format\nmsgid \"write error: %s\"\nmsgstr \" %s ض\\n\"\n\n#: misc.c:894\n#, fuzzy\nmsgid \"write error\"\nmsgstr \"д\"\n\n#: read.c:160\nmsgid \"Reading makefiles...\\n\"\nmsgstr \"ڶ makefiles...\\n\"\n\n#: read.c:315\n#, c-format\nmsgid \"Reading makefile `%s'\"\nmsgstr \"ڶ makefile %s\"\n\n#: read.c:317\n#, c-format\nmsgid \" (no default goal)\"\nmsgstr \"\"\n\n#: read.c:319\n#, c-format\nmsgid \" (search path)\"\nmsgstr \" (·)\"\n\n#: read.c:321\n#, c-format\nmsgid \" (don't care)\"\nmsgstr \"\"\n\n#: read.c:323\n#, c-format\nmsgid \" (no ~ expansion)\"\nmsgstr \"\"\n\n#: read.c:623\nmsgid \"invalid syntax in conditional\"\nmsgstr \"кЧ﷨\"\n\n#: read.c:633\nmsgid \"extraneous `endef'\"\nmsgstr \"ڵġendef\"\n\n#: read.c:645 read.c:673 variable.c:1316\nmsgid \"empty variable name\"\nmsgstr \"ձ\"\n\n#: read.c:662\nmsgid \"empty `override' directive\"\nmsgstr \"աoverrideָ\"\n\n#: read.c:687\nmsgid \"invalid `override' directive\"\nmsgstr \"Чġoverrideָ\"\n\n#: read.c:854\nmsgid \"commands commence before first target\"\nmsgstr \"\"\n\n#: read.c:905\nmsgid \"missing rule before commands\"\nmsgstr \"֮ǰ©˹\"\n\n#: read.c:992\n#, c-format\nmsgid \"missing separator%s\"\nmsgstr \"©ָ %s\"\n\n#: read.c:994\nmsgid \" (did you mean TAB instead of 8 spaces?)\"\nmsgstr \" (˼ TAB  8 ո)\"\n\n#: read.c:1152\nmsgid \"missing target pattern\"\nmsgstr \"Ŀƥ\"\n\n#: read.c:1154\nmsgid \"multiple target patterns\"\nmsgstr \"Ŀƥ\"\n\n#: read.c:1158\n#, c-format\nmsgid \"target pattern contains no `%%'\"\nmsgstr \"ĿģʽС%%\"\n\n#: read.c:1286\nmsgid \"missing `endif'\"\nmsgstr \"©endif\"\n\n#: read.c:1377\nmsgid \"Extraneous text after `endef' directive\"\nmsgstr \"endefָвóֵ\"\n\n#: read.c:1411\nmsgid \"missing `endef', unterminated `define'\"\nmsgstr \"©endefδֹġdefine\"\n\n#: read.c:1454\n#, c-format\nmsgid \"Extraneous text after `%s' directive\"\nmsgstr \"ڡ%sָ֮вóֵ\"\n\n#: read.c:1463 read.c:1477\n#, c-format\nmsgid \"extraneous `%s'\"\nmsgstr \"óֵġ%s\"\n\n#: read.c:1482\nmsgid \"only one `else' per conditional\"\nmsgstr \"ÿֻһelse\"\n\n#: read.c:1824\nmsgid \"Malformed target-specific variable definition\"\nmsgstr \"\"\n\n#: read.c:1886\nmsgid \"prerequisites cannot be defined in command scripts\"\nmsgstr \"\"\n\n#: read.c:1921\nmsgid \"mixed implicit and static pattern rules\"\nmsgstr \"͵;̬ģʽ\"\n\n#: read.c:1924\nmsgid \"mixed implicit and normal rules\"\nmsgstr \"͵ͨ\"\n\n#: read.c:1954\n#, c-format\nmsgid \"target `%s' doesn't match the target pattern\"\nmsgstr \"Ŀꡰ%sƥĿģʽ\"\n\n#: read.c:1973 read.c:2074\n#, c-format\nmsgid \"target file `%s' has both : and :: entries\"\nmsgstr \"Ŀļ%s :  :: Ŀ\"\n\n#: read.c:1979\n#, c-format\nmsgid \"target `%s' given more than once in the same rule.\"\nmsgstr \"Ŀꡰ%sͬһи˶Ρ\"\n\n#: read.c:1988\n#, c-format\nmsgid \"warning: overriding commands for target `%s'\"\nmsgstr \"棺ǹĿꡰ%s\"\n\n#: read.c:1991\n#, c-format\nmsgid \"warning: ignoring old commands for target `%s'\"\nmsgstr \"棺ԹĿꡰ%sľ\"\n\n#: read.c:2575\nmsgid \"warning: NUL character seen; rest of line ignored\"\nmsgstr \"棺 NUL ַеʣಿ\"\n\n#: remake.c:229\n#, c-format\nmsgid \"Nothing to be done for `%s'.\"\nmsgstr \"\"\n\n#: remake.c:230\n#, c-format\nmsgid \"`%s' is up to date.\"\nmsgstr \"%sµġ\"\n\n#: remake.c:297\n#, c-format\nmsgid \"Pruning file `%s'.\\n\"\nmsgstr \"ɾļ%s\\n\"\n\n#: remake.c:349\n#, c-format\nmsgid \"%sNo rule to make target `%s'%s\"\nmsgstr \"%sûйԴĿꡰ%s%s\"\n\n#: remake.c:351\n#, c-format\nmsgid \"%sNo rule to make target `%s', needed by `%s'%s\"\nmsgstr \"%1$sûйԴ%3$s%4$sҪĿꡰ%2$s\"\n\n#: remake.c:378\n#, c-format\nmsgid \"Considering target file `%s'.\\n\"\nmsgstr \"ڿĿļ%s\\n\"\n\n#: remake.c:385\n#, c-format\nmsgid \"Recently tried and failed to update file `%s'.\\n\"\nmsgstr \"ѳԹļ%sʧܡ\\n\"\n\n#: remake.c:400\n#, c-format\nmsgid \"File `%s' was considered already.\\n\"\nmsgstr \"ѿǹļ%s\\n\"\n\n#: remake.c:410\n#, c-format\nmsgid \"Still updating file `%s'.\\n\"\nmsgstr \"Ȼڸļ%s\\n\"\n\n#: remake.c:413\n#, c-format\nmsgid \"Finished updating file `%s'.\\n\"\nmsgstr \"ļ%sɡ\\n\"\n\n#: remake.c:434\n#, c-format\nmsgid \"File `%s' does not exist.\\n\"\nmsgstr \"ļ%sڡ\\n\"\n\n#: remake.c:441\n#, c-format\nmsgid \"\"\n\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"\nmsgstr \"\"\n\n#: remake.c:454 remake.c:962\n#, c-format\nmsgid \"Found an implicit rule for `%s'.\\n\"\nmsgstr \"ҵһڡ%s\\n\"\n\n#: remake.c:456 remake.c:964\n#, c-format\nmsgid \"No implicit rule found for `%s'.\\n\"\nmsgstr \"Ҳڡ%s\\n\"\n\n#: remake.c:462 remake.c:970\n#, c-format\nmsgid \"Using default commands for `%s'.\\n\"\nmsgstr \"ʹùڡ%sĬ\\n\"\n\n#: remake.c:484 remake.c:996\n#, c-format\nmsgid \"Circular %s <- %s dependency dropped.\"\nmsgstr \"ѭ %s <- %s \"\n\n#: remake.c:601\n#, c-format\nmsgid \"Finished prerequisites of target file `%s'.\\n\"\nmsgstr \"Ŀļ%sǰɡ\\n\"\n\n#: remake.c:607\n#, c-format\nmsgid \"The prerequisites of `%s' are being made.\\n\"\nmsgstr \"ڴ%sǰᡣ\\n\"\n\n#: remake.c:620\n#, c-format\nmsgid \"Giving up on target file `%s'.\\n\"\nmsgstr \"Ŀļ%s\\n\"\n\n#: remake.c:625\n#, c-format\nmsgid \"Target `%s' not remade because of errors.\"\nmsgstr \"ڴĿꡰ%sδ´\"\n\n#: remake.c:677\n#, fuzzy, c-format\nmsgid \"Prerequisite `%s' is order-only for target `%s'.\\n\"\nmsgstr \"ǰᡰ%sĿꡰ%sɡ\\n\"\n\n#: remake.c:682\n#, c-format\nmsgid \"Prerequisite `%s' of target `%s' does not exist.\\n\"\nmsgstr \"Ŀꡰ%2$sǰᡰ%1$sڡ\\n\"\n\n#: remake.c:687\n#, c-format\nmsgid \"Prerequisite `%s' is newer than target `%s'.\\n\"\nmsgstr \"ǰᡰ%sĿꡰ%s¡\\n\"\n\n#: remake.c:690\n#, c-format\nmsgid \"Prerequisite `%s' is older than target `%s'.\\n\"\nmsgstr \"ǰᡰ%sĿꡰ%sɡ\\n\"\n\n#: remake.c:708\n#, c-format\nmsgid \"Target `%s' is double-colon and has no prerequisites.\\n\"\nmsgstr \"Ŀꡰ%s˫ðĿ겢ûǰᡣ\\n\"\n\n#: remake.c:715\n#, c-format\nmsgid \"No commands for `%s' and no prerequisites actually changed.\\n\"\nmsgstr \"ûйڡ%sʵϸı˵ǰᡣ\\n\"\n\n#: remake.c:720\n#, c-format\nmsgid \"Making `%s' due to always-make flag.\\n\"\nmsgstr \"\"\n\n#: remake.c:728\n#, c-format\nmsgid \"No need to remake target `%s'\"\nmsgstr \"Ҫ´Ŀꡰ%s\"\n\n#: remake.c:730\n#, c-format\nmsgid \"; using VPATH name `%s'\"\nmsgstr \"ʹ VPATH ơ%s\"\n\n#: remake.c:750\n#, c-format\nmsgid \"Must remake target `%s'.\\n\"\nmsgstr \"´Ŀꡰ%s\\n\"\n\n#: remake.c:756\n#, c-format\nmsgid \"  Ignoring VPATH name `%s'.\\n\"\nmsgstr \"   VPATH  `%s'\\n\"\n\n#: remake.c:765\n#, c-format\nmsgid \"Commands of `%s' are being run.\\n\"\nmsgstr \"\"\n\n#: remake.c:772\n#, c-format\nmsgid \"Failed to remake target file `%s'.\\n\"\nmsgstr \"´Ŀļ%sʧܡ\\n\"\n\n#: remake.c:775\n#, c-format\nmsgid \"Successfully remade target file `%s'.\\n\"\nmsgstr \"´Ŀļ%sɹ\\n\"\n\n#: remake.c:778\n#, c-format\nmsgid \"Target file `%s' needs remade under -q.\\n\"\nmsgstr \"Ŀļ%sҪ -q ѡ´\\n\"\n\n#: remake.c:1306\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time in the future\"\nmsgstr \"*** 棺ļ%s޸ʱڽ (%s > %s)\"\n\n#: remake.c:1313\n#, fuzzy, c-format\nmsgid \"Warning: File `%s' has modification time %.2g s in the future\"\nmsgstr \"*** 棺ļ%s޸ʱڽ (%s > %s)\"\n\n#: remake.c:1511\n#, c-format\nmsgid \".LIBPATTERNS element `%s' is not a pattern\"\nmsgstr \".LIBPATTERNS Ԫء%sһģʽ\"\n\n#: remote-cstms.c:125\n#, c-format\nmsgid \"Customs won't export: %s\\n\"\nmsgstr \"ûϣ%s\\n\"\n\n#: rule.c:548\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Implicit Rules\"\nmsgstr \"\"\n\"\\n\"\n\"# û\"\n\n#: rule.c:563\nmsgid \"\"\n\"\\n\"\n\"# No implicit rules.\"\nmsgstr \"\"\n\"\\n\"\n\"# û\"\n\n#: rule.c:566\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u implicit rules, %u\"\nmsgstr \"\"\n\"\\n\"\n\"# %u %u\"\n\n#: rule.c:575\nmsgid \" terminal.\"\nmsgstr \" նˡ\"\n\n#: rule.c:583\n#, c-format\nmsgid \"BUG: num_pattern_rules wrong!  %u != %u\"\nmsgstr \"num_pattern_rules %u != %u\"\n\n#: signame.c:85\nmsgid \"unknown signal\"\nmsgstr \"δ֪ź\"\n\n#: signame.c:93\nmsgid \"Hangup\"\nmsgstr \"\"\n\n#: signame.c:96\nmsgid \"Interrupt\"\nmsgstr \"ж\"\n\n#: signame.c:99\nmsgid \"Quit\"\nmsgstr \"˳\"\n\n#: signame.c:102\nmsgid \"Illegal Instruction\"\nmsgstr \"Ƿָ\"\n\n#: signame.c:105\nmsgid \"Trace/breakpoint trap\"\nmsgstr \"/ϵ\"\n\n#: signame.c:110\nmsgid \"Aborted\"\nmsgstr \"ʧ\"\n\n#: signame.c:113\nmsgid \"IOT trap\"\nmsgstr \"IOT \"\n\n#: signame.c:116\nmsgid \"EMT trap\"\nmsgstr \"EMT \"\n\n#: signame.c:119\nmsgid \"Floating point exception\"\nmsgstr \"쳣\"\n\n#: signame.c:122\nmsgid \"Killed\"\nmsgstr \"ɱ\"\n\n#: signame.c:125\nmsgid \"Bus error\"\nmsgstr \"ߴ\"\n\n#: signame.c:128\nmsgid \"Segmentation fault\"\nmsgstr \"δ\"\n\n#: signame.c:131\nmsgid \"Bad system call\"\nmsgstr \"ϵͳ\"\n\n#: signame.c:134\nmsgid \"Broken pipe\"\nmsgstr \"ϿĹܵ\"\n\n#: signame.c:137\nmsgid \"Alarm clock\"\nmsgstr \"\"\n\n#: signame.c:140\nmsgid \"Terminated\"\nmsgstr \"ֹ\"\n\n#: signame.c:143\nmsgid \"User defined signal 1\"\nmsgstr \"ûź 1\"\n\n#: signame.c:146\nmsgid \"User defined signal 2\"\nmsgstr \"ûź 2\"\n\n#: signame.c:151 signame.c:154\nmsgid \"Child exited\"\nmsgstr \"ӽ˳\"\n\n#: signame.c:157\nmsgid \"Power failure\"\nmsgstr \"ԴʧЧ\"\n\n#: signame.c:160\nmsgid \"Stopped\"\nmsgstr \"ֹͣ\"\n\n#: signame.c:163\nmsgid \"Stopped (tty input)\"\nmsgstr \"ֹͣ (tty )\"\n\n#: signame.c:166\nmsgid \"Stopped (tty output)\"\nmsgstr \"ֹͣ (tty )\"\n\n#: signame.c:169\nmsgid \"Stopped (signal)\"\nmsgstr \"ֹͣ (ź)\"\n\n#: signame.c:172\nmsgid \"CPU time limit exceeded\"\nmsgstr \"CPU ʱ䳬\"\n\n#: signame.c:175\nmsgid \"File size limit exceeded\"\nmsgstr \"ļС\"\n\n#: signame.c:178\nmsgid \"Virtual timer expired\"\nmsgstr \"ʱӳʱ\"\n\n#: signame.c:181\nmsgid \"Profiling timer expired\"\nmsgstr \"\"\n\n#: signame.c:187\nmsgid \"Window changed\"\nmsgstr \"Ѹı\"\n\n#: signame.c:190\nmsgid \"Continued\"\nmsgstr \"\"\n\n#: signame.c:193\nmsgid \"Urgent I/O condition\"\nmsgstr \"\"\n\n#: signame.c:200 signame.c:209\nmsgid \"I/O possible\"\nmsgstr \"\"\n\n#: signame.c:203\nmsgid \"SIGWIND\"\nmsgstr \"SIGWIND\"\n\n#: signame.c:206\nmsgid \"SIGPHONE\"\nmsgstr \"SIGPHONE\"\n\n#: signame.c:212\nmsgid \"Resource lost\"\nmsgstr \"Դʧ\"\n\n#: signame.c:215\nmsgid \"Danger signal\"\nmsgstr \"Σź\"\n\n#: signame.c:218\nmsgid \"Information request\"\nmsgstr \"Ϣ\"\n\n#: signame.c:221\nmsgid \"Floating point co-processor not available\"\nmsgstr \"Э\"\n\n#: strcache.c:210\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"%s # of strings in strcache: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:211\n#, c-format\nmsgid \"%s # of strcache buffers: %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:212\n#, c-format\nmsgid \"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: strcache.c:214\n#, c-format\nmsgid \"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"\nmsgstr \"\"\n\n#: variable.c:1369\nmsgid \"default\"\nmsgstr \"Ĭ\"\n\n#: variable.c:1372\nmsgid \"environment\"\nmsgstr \"\"\n\n#: variable.c:1375\nmsgid \"makefile\"\nmsgstr \"makefile\"\n\n#: variable.c:1378\nmsgid \"environment under -e\"\nmsgstr \"\"\n\n#: variable.c:1381\nmsgid \"command line\"\nmsgstr \"\"\n\n#: variable.c:1384\nmsgid \"`override' directive\"\nmsgstr \"overrideָ\"\n\n#: variable.c:1387\nmsgid \"automatic\"\nmsgstr \"Զ\"\n\n#: variable.c:1396\n#, fuzzy, c-format\nmsgid \" (from `%s', line %lu)\"\nmsgstr \" (ӡ%s %lu)\\n\"\n\n#: variable.c:1438\n#, fuzzy\nmsgid \"# variable set hash-table stats:\\n\"\nmsgstr \"#  %u 洢 %u ӴյԪС\\n\"\n\n#: variable.c:1449\nmsgid \"\"\n\"\\n\"\n\"# Variables\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# \\n\"\n\n#: variable.c:1453\n#, fuzzy\nmsgid \"\"\n\"\\n\"\n\"# Pattern-specific Variable Values\"\nmsgstr \"\"\n\"\\n\"\n\"# Pattern-specific ֵ\"\n\n#: variable.c:1467\nmsgid \"\"\n\"\\n\"\n\"# No pattern-specific variable values.\"\nmsgstr \"\"\n\"\\n\"\n\"# û pattern-specific ֵ\"\n\n#: variable.c:1469\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u pattern-specific variable values\"\nmsgstr \"\"\n\"\\n\"\n\"# %u  pattern-specific ֵ\"\n\n#: variable.h:189\n#, c-format\nmsgid \"warning: undefined variable `%.*s'\"\nmsgstr \"棺δı%.*s\"\n\n#: vmsfunctions.c:94\n#, c-format\nmsgid \"sys$search failed with %d\\n\"\nmsgstr \"sys$search ʧܲ %d\\n\"\n\n#: vmsjobs.c:71\n#, c-format\nmsgid \"Warning: Empty redirection\\n\"\nmsgstr \"棺յض\\n\"\n\n#: vmsjobs.c:175\n#, c-format\nmsgid \"internal error: `%s' command_state\"\nmsgstr \"ڲ󣺡%s command_state\"\n\n#: vmsjobs.c:268\n#, c-format\nmsgid \"-warning, CTRL-Y will leave sub-process(es) around.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:284\n#, c-format\nmsgid \"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:407\n#, c-format\nmsgid \"BUILTIN [%s][%s]\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:418\n#, c-format\nmsgid \"BUILTIN CD %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:436\n#, c-format\nmsgid \"BUILTIN RM %s\\n\"\nmsgstr \"\"\n\n#: vmsjobs.c:457\n#, c-format\nmsgid \"Unknown builtin command '%s'\\n\"\nmsgstr \"δ֪%s\\n\"\n\n#: vmsjobs.c:479\n#, c-format\nmsgid \"Error, empty command\\n\"\nmsgstr \"󣬿\\n\"\n\n#: vmsjobs.c:491\n#, c-format\nmsgid \"Redirected input from %s\\n\"\nmsgstr \" %s ض\\n\"\n\n#: vmsjobs.c:498\n#, c-format\nmsgid \"Redirected error to %s\\n\"\nmsgstr \" %s ض\\n\"\n\n#: vmsjobs.c:505\n#, c-format\nmsgid \"Redirected output to %s\\n\"\nmsgstr \" %s ض\\n\"\n\n#: vmsjobs.c:568\n#, c-format\nmsgid \"Executing %s instead\\n\"\nmsgstr \"ִ %s Ϊ\\n\"\n\n#: vmsjobs.c:668\n#, c-format\nmsgid \"Error spawning, %d\\n\"\nmsgstr \"\"\n\n#: vpath.c:571\nmsgid \"\"\n\"\\n\"\n\"# VPATH Search Paths\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# VPATH ·\\n\"\n\n#: vpath.c:588\nmsgid \"# No `vpath' search paths.\"\nmsgstr \"# ûСvpath·\"\n\n#: vpath.c:590\n#, c-format\nmsgid \"\"\n\"\\n\"\n\"# %u `vpath' search paths.\\n\"\nmsgstr \"\"\n\"\\n\"\n\"# %u vpath·\\n\"\n\n#: vpath.c:593\nmsgid \"\"\n\"\\n\"\n\"# No general (`VPATH' variable) search path.\"\nmsgstr \"\"\n\"\\n\"\n\"# ûͨ·(VPATH)\"\n\n#: vpath.c:599\nmsgid \"\"\n\"\\n\"\n\"# General (`VPATH' variable) search path:\\n\"\n\"# \"\nmsgstr \"\"\n\"\\n\"\n\"# ͨ·(VPATH)\\n\"\n\"# \"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# No files.\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"# ļ\"\n\n#~ msgid \"\"\n#~ \"\\n\"\n#~ \"# %u files in %u hash buckets.\\n\"\n#~ msgstr \"\"\n#~ \"\\n\"\n#~ \"#  %u ļ洢 %u ӴյԪС\\n\"\n\n#~ msgid \"# average %.3f files per bucket, max %u files in one bucket.\\n\"\n#~ msgstr \"# ÿԪƽ %.3f ļһԪຬ %u ļ\\n\"\n\n#~ msgid \"Syntax error, still inside '\\\"'\\n\"\n#~ msgstr \"﷨Ȼڡ\\\"֮\\n\"\n\n#~ msgid \"Got a SIGCHLD; %u unreaped children.\\n\"\n#~ msgstr \"յ SIGCHLD źţ %u ӽ̴ڡ\\n\"\n\n#~ msgid \"DIRECTORY\"\n#~ msgstr \"DIRECTORY\"\n\n#~ msgid \"Change to DIRECTORY before doing anything\"\n#~ msgstr \"κ֮ǰתƵ DIRECTORY \"\n\n#~ msgid \"FLAGS\"\n#~ msgstr \"־\"\n\n#~ msgid \"Suspend process to allow a debugger to attach\"\n#~ msgstr \"Ա\"\n\n#~ msgid \"Environment variables override makefiles\"\n#~ msgstr \" makefile\"\n\n#~ msgid \"FILE\"\n#~ msgstr \"FILE\"\n\n#~ msgid \"Read FILE as a makefile\"\n#~ msgstr \" FILE Ϊ makefile \"\n\n#~ msgid \"Search DIRECTORY for included makefiles\"\n#~ msgstr \" DIRECTORY  makefile\"\n\n#~ msgid \"Don't start multiple jobs unless load is below N\"\n#~ msgstr \"Ǹص N Ͳ\"\n\n#~ msgid \"Don't actually run any commands; just print them\"\n#~ msgstr \"ʵκֻǴӡ\"\n\n#~ msgid \"Consider FILE to be very old and don't remake it\"\n#~ msgstr \" FILE ϶Ϊڳ¾ɶִ\"\n\n#~ msgid \"Don't echo commands\"\n#~ msgstr \"Ҫ\"\n\n#~ msgid \"Turns off -k\"\n#~ msgstr \"ر -k\"\n\n#~ msgid \"Consider FILE to be infinitely new\"\n#~ msgstr \" FILE \"\n\n#~ msgid \"Do not specify -j or --jobs if sh.exe is not available.\"\n#~ msgstr \" sh.exe ãͲҪ -j  --jobs\"\n\n#~ msgid \"Resetting make for single job mode.\"\n#~ msgstr \" make Ϊģʽ\"\n\n#~ msgid \"Entering\"\n#~ msgstr \"ڽ\"\n\n#~ msgid \"Leaving\"\n#~ msgstr \"뿪\"\n\n#~ msgid \"no file name for `%sinclude'\"\n#~ msgstr \"%sinclude ûļ\"\n\n#~ msgid \"# No variables.\"\n#~ msgstr \"# ûб\"\n\n#~ msgid \"# average of %.1f variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# ÿӴյԪƽ洢 %.1f һԪ洢 %u \\n\"\n\n#~ msgid \"# average of %d.%d variables per bucket, max %u in one bucket.\\n\"\n#~ msgstr \"# ÿӴյԪƽ洢 %d.%d һԪ洢 %u \\n\"\n"
  },
  {
    "path": "sources/host-tools/make-3.81/read.c",
    "content": "/* Reading and parsing of makefiles for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include <glob.h>\n\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"rule.h\"\n#include \"debug.h\"\n#include \"hash.h\"\n\n\n#ifndef WINDOWS32\n#ifndef _AMIGA\n#ifndef VMS\n#include <pwd.h>\n#else\nstruct passwd *getpwnam PARAMS ((char *name));\n#endif\n#endif\n#endif /* !WINDOWS32 */\n\n/* A 'struct ebuffer' controls the origin of the makefile we are currently\n   eval'ing.\n*/\n\nstruct ebuffer\n  {\n    char *buffer;       /* Start of the current line in the buffer.  */\n    char *bufnext;      /* Start of the next line in the buffer.  */\n    char *bufstart;     /* Start of the entire buffer.  */\n    unsigned int size;  /* Malloc'd size of buffer. */\n    FILE *fp;           /* File, or NULL if this is an internal buffer.  */\n    struct floc floc;   /* Info on the file in fp (if any).  */\n  };\n\n/* Types of \"words\" that can be read in a makefile.  */\nenum make_word_type\n  {\n     w_bogus, w_eol, w_static, w_variable, w_colon, w_dcolon, w_semicolon,\n     w_varassign\n  };\n\n\n/* A `struct conditionals' contains the information describing\n   all the active conditionals in a makefile.\n\n   The global variable `conditionals' contains the conditionals\n   information for the current makefile.  It is initialized from\n   the static structure `toplevel_conditionals' and is later changed\n   to new structures for included makefiles.  */\n\nstruct conditionals\n  {\n    unsigned int if_cmds;\t/* Depth of conditional nesting.  */\n    unsigned int allocated;\t/* Elts allocated in following arrays.  */\n    char *ignoring;\t\t/* Are we ignoring or interpreting?\n                                   0=interpreting, 1=not yet interpreted,\n                                   2=already interpreted */\n    char *seen_else;\t\t/* Have we already seen an `else'?  */\n  };\n\nstatic struct conditionals toplevel_conditionals;\nstatic struct conditionals *conditionals = &toplevel_conditionals;\n\n\n/* Default directories to search for include files in  */\n\nstatic char *default_include_directories[] =\n  {\n#if defined(WINDOWS32) && !defined(INCLUDEDIR)\n/*\n * This completely up to the user when they install MSVC or other packages.\n * This is defined as a placeholder.\n */\n#define INCLUDEDIR \".\"\n#endif\n    INCLUDEDIR,\n#ifndef _AMIGA\n    \"/usr/gnu/include\",\n    \"/usr/local/include\",\n    \"/usr/include\",\n#endif\n    0\n  };\n\n/* List of directories to search for include files in  */\n\nstatic char **include_directories;\n\n/* Maximum length of an element of the above.  */\n\nstatic unsigned int max_incl_len;\n\n/* The filename and pointer to line number of the\n   makefile currently being read in.  */\n\nconst struct floc *reading_file = 0;\n\n/* The chain of makefiles read by read_makefile.  */\n\nstatic struct dep *read_makefiles = 0;\n\nstatic int eval_makefile PARAMS ((char *filename, int flags));\nstatic int eval PARAMS ((struct ebuffer *buffer, int flags));\n\nstatic long readline PARAMS ((struct ebuffer *ebuf));\nstatic void do_define PARAMS ((char *name, unsigned int namelen,\n                               enum variable_origin origin,\n                               struct ebuffer *ebuf));\nstatic int conditional_line PARAMS ((char *line, int len, const struct floc *flocp));\nstatic void record_files PARAMS ((struct nameseq *filenames, char *pattern, char *pattern_percent,\n\t\t\tstruct dep *deps, unsigned int cmds_started, char *commands,\n\t\t\tunsigned int commands_idx, int two_colon,\n                        const struct floc *flocp));\nstatic void record_target_var PARAMS ((struct nameseq *filenames, char *defn,\n                                       enum variable_origin origin,\n                                       int enabled,\n                                       const struct floc *flocp));\nstatic enum make_word_type get_next_mword PARAMS ((char *buffer, char *delim,\n                        char **startp, unsigned int *length));\nstatic void remove_comments PARAMS ((char *line));\nstatic char *find_char_unquote PARAMS ((char *string, int stop1,\n                                        int stop2, int blank, int ignorevars));\n\f\n/* Read in all the makefiles and return the chain of their names.  */\n\nstruct dep *\nread_all_makefiles (char **makefiles)\n{\n  unsigned int num_makefiles = 0;\n\n  /* Create *_LIST variables, to hold the makefiles, targets, and variables\n     we will be reading. */\n\n  define_variable (\"MAKEFILE_LIST\", sizeof (\"MAKEFILE_LIST\")-1, \"\", o_file, 0);\n\n  DB (DB_BASIC, (_(\"Reading makefiles...\\n\")));\n\n  /* If there's a non-null variable MAKEFILES, its value is a list of\n     files to read first thing.  But don't let it prevent reading the\n     default makefiles and don't let the default goal come from there.  */\n\n  {\n    char *value;\n    char *name, *p;\n    unsigned int length;\n\n    {\n      /* Turn off --warn-undefined-variables while we expand MAKEFILES.  */\n      int save = warn_undefined_variables_flag;\n      warn_undefined_variables_flag = 0;\n\n      value = allocated_variable_expand (\"$(MAKEFILES)\");\n\n      warn_undefined_variables_flag = save;\n    }\n\n    /* Set NAME to the start of next token and LENGTH to its length.\n       MAKEFILES is updated for finding remaining tokens.  */\n    p = value;\n\n    while ((name = find_next_token (&p, &length)) != 0)\n      {\n\tif (*p != '\\0')\n\t  *p++ = '\\0';\n\teval_makefile (name, RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE);\n      }\n\n    free (value);\n  }\n\n  /* Read makefiles specified with -f switches.  */\n\n  if (makefiles != 0)\n    while (*makefiles != 0)\n      {\n\tstruct dep *tail = read_makefiles;\n\tregister struct dep *d;\n\n\tif (! eval_makefile (*makefiles, 0))\n\t  perror_with_name (\"\", *makefiles);\n\n\t/* Find the right element of read_makefiles.  */\n\td = read_makefiles;\n\twhile (d->next != tail)\n\t  d = d->next;\n\n\t/* Use the storage read_makefile allocates.  */\n\t*makefiles = dep_name (d);\n\t++num_makefiles;\n\t++makefiles;\n      }\n\n  /* If there were no -f switches, try the default names.  */\n\n  if (num_makefiles == 0)\n    {\n      static char *default_makefiles[] =\n#ifdef VMS\n\t/* all lower case since readdir() (the vms version) 'lowercasifies' */\n\t{ \"makefile.vms\", \"gnumakefile.\", \"makefile.\", 0 };\n#else\n#ifdef _AMIGA\n\t{ \"GNUmakefile\", \"Makefile\", \"SMakefile\", 0 };\n#else /* !Amiga && !VMS */\n\t{ \"GNUmakefile\", \"makefile\", \"Makefile\", 0 };\n#endif /* AMIGA */\n#endif /* VMS */\n      register char **p = default_makefiles;\n      while (*p != 0 && !file_exists_p (*p))\n\t++p;\n\n      if (*p != 0)\n\t{\n\t  if (! eval_makefile (*p, 0))\n\t    perror_with_name (\"\", *p);\n\t}\n      else\n\t{\n\t  /* No default makefile was found.  Add the default makefiles to the\n\t     `read_makefiles' chain so they will be updated if possible.  */\n\t  struct dep *tail = read_makefiles;\n\t  /* Add them to the tail, after any MAKEFILES variable makefiles.  */\n\t  while (tail != 0 && tail->next != 0)\n\t    tail = tail->next;\n\t  for (p = default_makefiles; *p != 0; ++p)\n\t    {\n\t      struct dep *d = alloc_dep ();\n\t      d->file = enter_file (*p);\n\t      d->file->dontcare = 1;\n\t      /* Tell update_goal_chain to bail out as soon as this file is\n\t\t made, and main not to die if we can't make this file.  */\n\t      d->changed = RM_DONTCARE;\n\t      if (tail == 0)\n\t\tread_makefiles = d;\n\t      else\n\t\ttail->next = d;\n\t      tail = d;\n\t    }\n\t  if (tail != 0)\n\t    tail->next = 0;\n\t}\n    }\n\n  return read_makefiles;\n}\n\f\n/* Install a new conditional and return the previous one.  */\n\nstatic struct conditionals *\ninstall_conditionals (struct conditionals *new)\n{\n  struct conditionals *save = conditionals;\n\n  bzero ((char *) new, sizeof (*new));\n  conditionals = new;\n\n  return save;\n}\n\n/* Free the current conditionals and reinstate a saved one.  */\n\nstatic void\nrestore_conditionals (struct conditionals *saved)\n{\n  /* Free any space allocated by conditional_line.  */\n  if (conditionals->ignoring)\n    free (conditionals->ignoring);\n  if (conditionals->seen_else)\n    free (conditionals->seen_else);\n\n  /* Restore state.  */\n  conditionals = saved;\n}\n\f\nstatic int\neval_makefile (char *filename, int flags)\n{\n  struct dep *deps;\n  struct ebuffer ebuf;\n  const struct floc *curfile;\n  char *expanded = 0;\n  char *included = 0;\n  int makefile_errno;\n  int r;\n\n  ebuf.floc.filenm = strcache_add (filename);\n  ebuf.floc.lineno = 1;\n\n  if (ISDB (DB_VERBOSE))\n    {\n      printf (_(\"Reading makefile `%s'\"), filename);\n      if (flags & RM_NO_DEFAULT_GOAL)\n\tprintf (_(\" (no default goal)\"));\n      if (flags & RM_INCLUDED)\n\tprintf (_(\" (search path)\"));\n      if (flags & RM_DONTCARE)\n\tprintf (_(\" (don't care)\"));\n      if (flags & RM_NO_TILDE)\n\tprintf (_(\" (no ~ expansion)\"));\n      puts (\"...\");\n    }\n\n  /* First, get a stream to read.  */\n\n  /* Expand ~ in FILENAME unless it came from `include',\n     in which case it was already done.  */\n  if (!(flags & RM_NO_TILDE) && filename[0] == '~')\n    {\n      expanded = tilde_expand (filename);\n      if (expanded != 0)\n\tfilename = expanded;\n    }\n\n  ebuf.fp = fopen (filename, \"r\");\n  /* Save the error code so we print the right message later.  */\n  makefile_errno = errno;\n\n  /* If the makefile wasn't found and it's either a makefile from\n     the `MAKEFILES' variable or an included makefile,\n     search the included makefile search path for this makefile.  */\n  if (ebuf.fp == 0 && (flags & RM_INCLUDED) && *filename != '/')\n    {\n      register unsigned int i;\n      for (i = 0; include_directories[i] != 0; ++i)\n\t{\n\t  included = concat (include_directories[i], \"/\", filename);\n\t  ebuf.fp = fopen (included, \"r\");\n\t  if (ebuf.fp)\n\t    {\n\t      filename = included;\n\t      break;\n\t    }\n          free (included);\n\t}\n      /* If we're not using it, we already freed it above.  */\n      if (filename != included)\n        included = 0;\n    }\n\n  /* Add FILENAME to the chain of read makefiles.  */\n  deps = alloc_dep ();\n  deps->next = read_makefiles;\n  read_makefiles = deps;\n  deps->file = lookup_file (filename);\n  if (deps->file == 0)\n    deps->file = enter_file (xstrdup (filename));\n  filename = deps->file->name;\n  deps->changed = flags;\n  if (flags & RM_DONTCARE)\n    deps->file->dontcare = 1;\n\n  if (expanded)\n    free (expanded);\n  if (included)\n    free (included);\n\n  /* If the makefile can't be found at all, give up entirely.  */\n\n  if (ebuf.fp == 0)\n    {\n      /* If we did some searching, errno has the error from the last\n\t attempt, rather from FILENAME itself.  Restore it in case the\n\t caller wants to use it in a message.  */\n      errno = makefile_errno;\n      return 0;\n    }\n\n  /* Add this makefile to the list. */\n  do_variable_definition (&ebuf.floc, \"MAKEFILE_LIST\", filename, o_file,\n                          f_append, 0);\n\n  /* Evaluate the makefile */\n\n  ebuf.size = 200;\n  ebuf.buffer = ebuf.bufnext = ebuf.bufstart = xmalloc (ebuf.size);\n\n  curfile = reading_file;\n  reading_file = &ebuf.floc;\n\n  r = eval (&ebuf, !(flags & RM_NO_DEFAULT_GOAL));\n\n  reading_file = curfile;\n\n  fclose (ebuf.fp);\n\n  free (ebuf.bufstart);\n  alloca (0);\n  return r;\n}\n\nint\neval_buffer (char *buffer)\n{\n  struct ebuffer ebuf;\n  struct conditionals *saved;\n  struct conditionals new;\n  const struct floc *curfile;\n  int r;\n\n  /* Evaluate the buffer */\n\n  ebuf.size = strlen (buffer);\n  ebuf.buffer = ebuf.bufnext = ebuf.bufstart = buffer;\n  ebuf.fp = NULL;\n\n  ebuf.floc = *reading_file;\n\n  curfile = reading_file;\n  reading_file = &ebuf.floc;\n\n  saved = install_conditionals (&new);\n\n  r = eval (&ebuf, 1);\n\n  restore_conditionals (saved);\n\n  reading_file = curfile;\n\n  alloca (0);\n  return r;\n}\n\n\f\n/* Read file FILENAME as a makefile and add its contents to the data base.\n\n   SET_DEFAULT is true if we are allowed to set the default goal.  */\n\n\nstatic int\neval (struct ebuffer *ebuf, int set_default)\n{\n  char *collapsed = 0;\n  unsigned int collapsed_length = 0;\n  unsigned int commands_len = 200;\n  char *commands;\n  unsigned int commands_idx = 0;\n  unsigned int cmds_started, tgts_started;\n  int ignoring = 0, in_ignored_define = 0;\n  int no_targets = 0;\t\t/* Set when reading a rule without targets.  */\n  struct nameseq *filenames = 0;\n  struct dep *deps = 0;\n  long nlines = 0;\n  int two_colon = 0;\n  char *pattern = 0, *pattern_percent;\n  struct floc *fstart;\n  struct floc fi;\n\n#define record_waiting_files()\t\t\t\t\t\t      \\\n  do\t\t\t\t\t\t\t\t\t      \\\n    { \t\t\t\t\t\t\t\t\t      \\\n      if (filenames != 0)\t\t\t\t\t\t      \\\n        {                                                                     \\\n\t  fi.lineno = tgts_started;                                           \\\n\t  record_files (filenames, pattern, pattern_percent, deps,            \\\n                        cmds_started, commands, commands_idx, two_colon,      \\\n                        &fi);                                                 \\\n        }                                                                     \\\n      filenames = 0;\t\t\t\t\t\t\t      \\\n      commands_idx = 0;\t\t\t\t\t\t\t      \\\n      no_targets = 0;                                                         \\\n      if (pattern) { free(pattern); pattern = 0; }                            \\\n    } while (0)\n\n  pattern_percent = 0;\n  cmds_started = tgts_started = 1;\n\n  fstart = &ebuf->floc;\n  fi.filenm = ebuf->floc.filenm;\n\n  /* Loop over lines in the file.\n     The strategy is to accumulate target names in FILENAMES, dependencies\n     in DEPS and commands in COMMANDS.  These are used to define a rule\n     when the start of the next rule (or eof) is encountered.\n\n     When you see a \"continue\" in the loop below, that means we are moving on\n     to the next line _without_ ending any rule that we happen to be working\n     with at the moment.  If you see a \"goto rule_complete\", then the\n     statement we just parsed also finishes the previous rule.  */\n\n  commands = xmalloc (200);\n\n  while (1)\n    {\n      unsigned int linelen;\n      char *line;\n      int len;\n      char *p;\n      char *p2;\n\n      /* Grab the next line to be evaluated */\n      ebuf->floc.lineno += nlines;\n      nlines = readline (ebuf);\n\n      /* If there is nothing left to eval, we're done.  */\n      if (nlines < 0)\n        break;\n\n      /* If this line is empty, skip it.  */\n      line = ebuf->buffer;\n      if (line[0] == '\\0')\n        continue;\n\n      linelen = strlen (line);\n\n      /* Check for a shell command line first.\n\t If it is not one, we can stop treating tab specially.  */\n      if (line[0] == '\\t')\n\t{\n\t  if (no_targets)\n\t    /* Ignore the commands in a rule with no targets.  */\n\t    continue;\n\n\t  /* If there is no preceding rule line, don't treat this line\n\t     as a command, even though it begins with a tab character.\n\t     SunOS 4 make appears to behave this way.  */\n\n\t  if (filenames != 0)\n\t    {\n\t      if (ignoring)\n\t\t/* Yep, this is a shell command, and we don't care.  */\n\t\tcontinue;\n\n\t      /* Append this command line to the line being accumulated.  */\n\t      if (commands_idx == 0)\n\t\tcmds_started = ebuf->floc.lineno;\n\n\t      if (linelen + 1 + commands_idx > commands_len)\n\t\t{\n\t\t  commands_len = (linelen + 1 + commands_idx) * 2;\n\t\t  commands = xrealloc (commands, commands_len);\n\t\t}\n\t      bcopy (line, &commands[commands_idx], linelen);\n\t      commands_idx += linelen;\n\t      commands[commands_idx++] = '\\n';\n\n\t      continue;\n\t    }\n\t}\n\n      /* This line is not a shell command line.  Don't worry about tabs.\n         Get more space if we need it; we don't need to preserve the current\n         contents of the buffer.  */\n\n      if (collapsed_length < linelen+1)\n\t{\n\t  collapsed_length = linelen+1;\n          if (collapsed)\n            free ((char *)collapsed);\n\t  collapsed = (char *) xmalloc (collapsed_length);\n\t}\n      strcpy (collapsed, line);\n      /* Collapse continuation lines.  */\n      collapse_continuations (collapsed);\n      remove_comments (collapsed);\n\n      /* Compare a word, both length and contents. */\n#define\tword1eq(s) \t(len == sizeof(s)-1 && strneq (s, p, sizeof(s)-1))\n      p = collapsed;\n      while (isspace ((unsigned char)*p))\n\t++p;\n\n      if (*p == '\\0')\n\t/* This line is completely empty--ignore it.  */\n\tcontinue;\n\n      /* Find the end of the first token.  Note we don't need to worry about\n       * \":\" here since we compare tokens by length (so \"export\" will never\n       * be equal to \"export:\").\n       */\n      for (p2 = p+1; *p2 != '\\0' && !isspace ((unsigned char)*p2); ++p2)\n        ;\n      len = p2 - p;\n\n      /* Find the start of the second token.  If it looks like a target or\n         variable definition it can't be a preprocessor token so skip\n         them--this allows variables/targets named `ifdef', `export', etc. */\n      while (isspace ((unsigned char)*p2))\n        ++p2;\n\n      if ((p2[0] == ':' || p2[0] == '+' || p2[0] == '=') && p2[1] == '\\0')\n        {\n          /* It can't be a preprocessor token so skip it if we're ignoring */\n          if (ignoring)\n            continue;\n\n          goto skip_conditionals;\n        }\n\n      /* We must first check for conditional and `define' directives before\n\t ignoring anything, since they control what we will do with\n\t following lines.  */\n\n      if (!in_ignored_define)\n\t{\n \t  int i = conditional_line (p, len, fstart);\n          if (i != -2)\n            {\n              if (i == -1)\n                fatal (fstart, _(\"invalid syntax in conditional\"));\n\n              ignoring = i;\n              continue;\n            }\n\t}\n\n      if (word1eq (\"endef\"))\n\t{\n\t  if (!in_ignored_define)\n\t    fatal (fstart, _(\"extraneous `endef'\"));\n          in_ignored_define = 0;\n\t  continue;\n\t}\n\n      if (word1eq (\"define\"))\n\t{\n\t  if (ignoring)\n\t    in_ignored_define = 1;\n\t  else\n\t    {\n              if (*p2 == '\\0')\n                fatal (fstart, _(\"empty variable name\"));\n\n\t      /* Let the variable name be the whole rest of the line,\n\t\t with trailing blanks stripped (comments have already been\n\t\t removed), so it could be a complex variable/function\n\t\t reference that might contain blanks.  */\n\t      p = strchr (p2, '\\0');\n\t      while (isblank ((unsigned char)p[-1]))\n\t\t--p;\n\t      do_define (p2, p - p2, o_file, ebuf);\n\t    }\n\t  continue;\n\t}\n\n      if (word1eq (\"override\"))\n        {\n\t  if (*p2 == '\\0')\n\t    error (fstart, _(\"empty `override' directive\"));\n\n\t  if (strneq (p2, \"define\", 6)\n\t      && (isblank ((unsigned char)p2[6]) || p2[6] == '\\0'))\n\t    {\n\t      if (ignoring)\n\t\tin_ignored_define = 1;\n\t      else\n\t\t{\n\t\t  p2 = next_token (p2 + 6);\n                  if (*p2 == '\\0')\n                    fatal (fstart, _(\"empty variable name\"));\n\n\t\t  /* Let the variable name be the whole rest of the line,\n\t\t     with trailing blanks stripped (comments have already been\n\t\t     removed), so it could be a complex variable/function\n\t\t     reference that might contain blanks.  */\n\t\t  p = strchr (p2, '\\0');\n\t\t  while (isblank ((unsigned char)p[-1]))\n\t\t    --p;\n\t\t  do_define (p2, p - p2, o_override, ebuf);\n\t\t}\n\t    }\n\t  else if (!ignoring\n\t\t   && !try_variable_definition (fstart, p2, o_override, 0))\n\t    error (fstart, _(\"invalid `override' directive\"));\n\n\t  continue;\n\t}\n\n      if (ignoring)\n\t/* Ignore the line.  We continue here so conditionals\n\t   can appear in the middle of a rule.  */\n\tcontinue;\n\n      if (word1eq (\"export\"))\n\t{\n          /* 'export' by itself causes everything to be exported. */\n\t  if (*p2 == '\\0')\n            export_all_variables = 1;\n          else\n            {\n              struct variable *v;\n\n              v = try_variable_definition (fstart, p2, o_file, 0);\n              if (v != 0)\n                v->export = v_export;\n              else\n                {\n                  unsigned int len;\n                  char *ap;\n\n                  /* Expand the line so we can use indirect and constructed\n                     variable names in an export command.  */\n                  p2 = ap = allocated_variable_expand (p2);\n\n                  for (p = find_next_token (&p2, &len); p != 0;\n                       p = find_next_token (&p2, &len))\n                    {\n                      v = lookup_variable (p, len);\n                      if (v == 0)\n                        v = define_variable_loc (p, len, \"\", o_file, 0,\n                                                 fstart);\n                      v->export = v_export;\n                    }\n\n                  free (ap);\n                }\n            }\n          goto rule_complete;\n\t}\n\n      if (word1eq (\"unexport\"))\n\t{\n\t  if (*p2 == '\\0')\n\t    export_all_variables = 0;\n          else\n            {\n              unsigned int len;\n              struct variable *v;\n              char *ap;\n\n              /* Expand the line so we can use indirect and constructed\n                 variable names in an unexport command.  */\n              p2 = ap = allocated_variable_expand (p2);\n\n              for (p = find_next_token (&p2, &len); p != 0;\n                   p = find_next_token (&p2, &len))\n                {\n                  v = lookup_variable (p, len);\n                  if (v == 0)\n                    v = define_variable_loc (p, len, \"\", o_file, 0, fstart);\n\n                  v->export = v_noexport;\n                }\n\n              free (ap);\n            }\n          goto rule_complete;\n\t}\n\n skip_conditionals:\n      if (word1eq (\"vpath\"))\n\t{\n\t  char *pattern;\n\t  unsigned int len;\n\t  p2 = variable_expand (p2);\n\t  p = find_next_token (&p2, &len);\n\t  if (p != 0)\n\t    {\n\t      pattern = savestring (p, len);\n\t      p = find_next_token (&p2, &len);\n\t      /* No searchpath means remove all previous\n\t\t selective VPATH's with the same pattern.  */\n\t    }\n\t  else\n\t    /* No pattern means remove all previous selective VPATH's.  */\n\t    pattern = 0;\n\t  construct_vpath_list (pattern, p);\n\t  if (pattern != 0)\n\t    free (pattern);\n\n          goto rule_complete;\n\t}\n\n      if (word1eq (\"include\") || word1eq (\"-include\") || word1eq (\"sinclude\"))\n\t{\n\t  /* We have found an `include' line specifying a nested\n\t     makefile to be read at this point.  */\n\t  struct conditionals *save;\n          struct conditionals new_conditionals;\n\t  struct nameseq *files;\n\t  /* \"-include\" (vs \"include\") says no error if the file does not\n\t     exist.  \"sinclude\" is an alias for this from SGI.  */\n\t  int noerror = (p[0] != 'i');\n\n\t  p = allocated_variable_expand (p2);\n\n          /* If no filenames, it's a no-op.  */\n\t  if (*p == '\\0')\n            {\n              free (p);\n              continue;\n            }\n\n\t  /* Parse the list of file names.  */\n\t  p2 = p;\n\t  files = multi_glob (parse_file_seq (&p2, '\\0',\n\t\t\t\t\t      sizeof (struct nameseq),\n\t\t\t\t\t      1),\n\t\t\t      sizeof (struct nameseq));\n\t  free (p);\n\n\t  /* Save the state of conditionals and start\n\t     the included makefile with a clean slate.  */\n\t  save = install_conditionals (&new_conditionals);\n\n\t  /* Record the rules that are waiting so they will determine\n\t     the default goal before those in the included makefile.  */\n\t  record_waiting_files ();\n\n\t  /* Read each included makefile.  */\n\t  while (files != 0)\n\t    {\n\t      struct nameseq *next = files->next;\n\t      char *name = files->name;\n              int r;\n\n\t      free ((char *)files);\n\t      files = next;\n\n              r = eval_makefile (name, (RM_INCLUDED | RM_NO_TILDE\n                                        | (noerror ? RM_DONTCARE : 0)));\n\t      if (!r && !noerror)\n                error (fstart, \"%s: %s\", name, strerror (errno));\n              free (name);\n\t    }\n\n\t  /* Restore conditional state.  */\n\t  restore_conditionals (save);\n\n          goto rule_complete;\n\t}\n\n      if (try_variable_definition (fstart, p, o_file, 0))\n\t/* This line has been dealt with.  */\n\tgoto rule_complete;\n\n      /* This line starts with a tab but was not caught above because there\n         was no preceding target, and the line might have been usable as a\n         variable definition.  But now we know it is definitely lossage.  */\n      if (line[0] == '\\t')\n        fatal(fstart, _(\"commands commence before first target\"));\n\n      /* This line describes some target files.  This is complicated by\n         the existence of target-specific variables, because we can't\n         expand the entire line until we know if we have one or not.  So\n         we expand the line word by word until we find the first `:',\n         then check to see if it's a target-specific variable.\n\n         In this algorithm, `lb_next' will point to the beginning of the\n         unexpanded parts of the input buffer, while `p2' points to the\n         parts of the expanded buffer we haven't searched yet. */\n\n      {\n        enum make_word_type wtype;\n        enum variable_origin v_origin;\n        int exported;\n        char *cmdleft, *semip, *lb_next;\n        unsigned int len, plen = 0;\n        char *colonp;\n        const char *end, *beg; /* Helpers for whitespace stripping. */\n\n        /* Record the previous rule.  */\n\n        record_waiting_files ();\n        tgts_started = fstart->lineno;\n\n        /* Search the line for an unquoted ; that is not after an\n           unquoted #.  */\n        cmdleft = find_char_unquote (line, ';', '#', 0, 1);\n        if (cmdleft != 0 && *cmdleft == '#')\n          {\n            /* We found a comment before a semicolon.  */\n            *cmdleft = '\\0';\n            cmdleft = 0;\n          }\n        else if (cmdleft != 0)\n          /* Found one.  Cut the line short there before expanding it.  */\n          *(cmdleft++) = '\\0';\n        semip = cmdleft;\n\n        collapse_continuations (line);\n\n        /* We can't expand the entire line, since if it's a per-target\n           variable we don't want to expand it.  So, walk from the\n           beginning, expanding as we go, and looking for \"interesting\"\n           chars.  The first word is always expandable.  */\n        wtype = get_next_mword(line, NULL, &lb_next, &len);\n        switch (wtype)\n          {\n          case w_eol:\n            if (cmdleft != 0)\n              fatal(fstart, _(\"missing rule before commands\"));\n            /* This line contained something but turned out to be nothing\n               but whitespace (a comment?).  */\n            continue;\n\n          case w_colon:\n          case w_dcolon:\n            /* We accept and ignore rules without targets for\n               compatibility with SunOS 4 make.  */\n            no_targets = 1;\n            continue;\n\n          default:\n            break;\n          }\n\n        p2 = variable_expand_string(NULL, lb_next, len);\n\n        while (1)\n          {\n            lb_next += len;\n            if (cmdleft == 0)\n              {\n                /* Look for a semicolon in the expanded line.  */\n                cmdleft = find_char_unquote (p2, ';', 0, 0, 0);\n\n                if (cmdleft != 0)\n                  {\n                    unsigned long p2_off = p2 - variable_buffer;\n                    unsigned long cmd_off = cmdleft - variable_buffer;\n                    char *pend = p2 + strlen(p2);\n\n                    /* Append any remnants of lb, then cut the line short\n                       at the semicolon.  */\n                    *cmdleft = '\\0';\n\n                    /* One school of thought says that you shouldn't expand\n                       here, but merely copy, since now you're beyond a \";\"\n                       and into a command script.  However, the old parser\n                       expanded the whole line, so we continue that for\n                       backwards-compatiblity.  Also, it wouldn't be\n                       entirely consistent, since we do an unconditional\n                       expand below once we know we don't have a\n                       target-specific variable. */\n                    (void)variable_expand_string(pend, lb_next, (long)-1);\n                    lb_next += strlen(lb_next);\n                    p2 = variable_buffer + p2_off;\n                    cmdleft = variable_buffer + cmd_off + 1;\n                  }\n              }\n\n            colonp = find_char_unquote(p2, ':', 0, 0, 0);\n#ifdef HAVE_DOS_PATHS\n            /* The drive spec brain-damage strikes again...  */\n            /* Note that the only separators of targets in this context\n               are whitespace and a left paren.  If others are possible,\n               they should be added to the string in the call to index.  */\n            while (colonp && (colonp[1] == '/' || colonp[1] == '\\\\') &&\n                   colonp > p2 && isalpha ((unsigned char)colonp[-1]) &&\n                   (colonp == p2 + 1 || strchr (\" \\t(\", colonp[-2]) != 0))\n              colonp = find_char_unquote(colonp + 1, ':', 0, 0, 0);\n#endif\n            if (colonp != 0)\n              break;\n\n            wtype = get_next_mword(lb_next, NULL, &lb_next, &len);\n            if (wtype == w_eol)\n              break;\n\n            p2 += strlen(p2);\n            *(p2++) = ' ';\n            p2 = variable_expand_string(p2, lb_next, len);\n            /* We don't need to worry about cmdleft here, because if it was\n               found in the variable_buffer the entire buffer has already\n               been expanded... we'll never get here.  */\n          }\n\n        p2 = next_token (variable_buffer);\n\n        /* If the word we're looking at is EOL, see if there's _anything_\n           on the line.  If not, a variable expanded to nothing, so ignore\n           it.  If so, we can't parse this line so punt.  */\n        if (wtype == w_eol)\n          {\n            if (*p2 != '\\0')\n              /* There's no need to be ivory-tower about this: check for\n                 one of the most common bugs found in makefiles...  */\n              fatal (fstart, _(\"missing separator%s\"),\n                     !strneq(line, \"        \", 8) ? \"\"\n                     : _(\" (did you mean TAB instead of 8 spaces?)\"));\n            continue;\n          }\n\n        /* Make the colon the end-of-string so we know where to stop\n           looking for targets.  */\n        *colonp = '\\0';\n        filenames = multi_glob (parse_file_seq (&p2, '\\0',\n                                                sizeof (struct nameseq),\n                                                1),\n                                sizeof (struct nameseq));\n        *p2 = ':';\n\n        if (!filenames)\n          {\n            /* We accept and ignore rules without targets for\n               compatibility with SunOS 4 make.  */\n            no_targets = 1;\n            continue;\n          }\n        /* This should never be possible; we handled it above.  */\n        assert (*p2 != '\\0');\n        ++p2;\n\n        /* Is this a one-colon or two-colon entry?  */\n        two_colon = *p2 == ':';\n        if (two_colon)\n          p2++;\n\n        /* Test to see if it's a target-specific variable.  Copy the rest\n           of the buffer over, possibly temporarily (we'll expand it later\n           if it's not a target-specific variable).  PLEN saves the length\n           of the unparsed section of p2, for later.  */\n        if (*lb_next != '\\0')\n          {\n            unsigned int l = p2 - variable_buffer;\n            plen = strlen (p2);\n            (void) variable_buffer_output (p2+plen,\n                                           lb_next, strlen (lb_next)+1);\n            p2 = variable_buffer + l;\n          }\n\n        /* See if it's an \"override\" or \"export\" keyword; if so see if what\n           comes after it looks like a variable definition.  */\n\n        wtype = get_next_mword (p2, NULL, &p, &len);\n\n        v_origin = o_file;\n        exported = 0;\n        if (wtype == w_static)\n          {\n            if (word1eq (\"override\"))\n              {\n                v_origin = o_override;\n                wtype = get_next_mword (p+len, NULL, &p, &len);\n              }\n            else if (word1eq (\"export\"))\n              {\n                exported = 1;\n                wtype = get_next_mword (p+len, NULL, &p, &len);\n              }\n          }\n\n        if (wtype != w_eol)\n          wtype = get_next_mword (p+len, NULL, NULL, NULL);\n\n        if (wtype == w_varassign)\n          {\n            /* If there was a semicolon found, add it back, plus anything\n               after it.  */\n            if (semip)\n              {\n                unsigned int l = p - variable_buffer;\n                *(--semip) = ';';\n                variable_buffer_output (p2 + strlen (p2),\n                                        semip, strlen (semip)+1);\n                p = variable_buffer + l;\n              }\n            record_target_var (filenames, p, v_origin, exported, fstart);\n            filenames = 0;\n            continue;\n          }\n\n        /* This is a normal target, _not_ a target-specific variable.\n           Unquote any = in the dependency list.  */\n        find_char_unquote (lb_next, '=', 0, 0, 0);\n\n        /* We have some targets, so don't ignore the following commands.  */\n        no_targets = 0;\n\n        /* Expand the dependencies, etc.  */\n        if (*lb_next != '\\0')\n          {\n            unsigned int l = p2 - variable_buffer;\n            (void) variable_expand_string (p2 + plen, lb_next, (long)-1);\n            p2 = variable_buffer + l;\n\n            /* Look for a semicolon in the expanded line.  */\n            if (cmdleft == 0)\n              {\n                cmdleft = find_char_unquote (p2, ';', 0, 0, 0);\n                if (cmdleft != 0)\n                  *(cmdleft++) = '\\0';\n              }\n          }\n\n        /* Is this a static pattern rule: `target: %targ: %dep; ...'?  */\n        p = strchr (p2, ':');\n        while (p != 0 && p[-1] == '\\\\')\n          {\n            register char *q = &p[-1];\n            register int backslash = 0;\n            while (*q-- == '\\\\')\n              backslash = !backslash;\n            if (backslash)\n              p = strchr (p + 1, ':');\n            else\n              break;\n          }\n#ifdef _AMIGA\n        /* Here, the situation is quite complicated. Let's have a look\n           at a couple of targets:\n\n           install: dev:make\n\n           dev:make: make\n\n           dev:make:: xyz\n\n           The rule is that it's only a target, if there are TWO :'s\n           OR a space around the :.\n        */\n        if (p && !(isspace ((unsigned char)p[1]) || !p[1]\n                   || isspace ((unsigned char)p[-1])))\n          p = 0;\n#endif\n#ifdef HAVE_DOS_PATHS\n        {\n          int check_again;\n\n          do {\n            check_again = 0;\n            /* For DOS-style paths, skip a \"C:\\...\" or a \"C:/...\" */\n            if (p != 0 && (p[1] == '\\\\' || p[1] == '/') &&\n                isalpha ((unsigned char)p[-1]) &&\n                (p == p2 + 1 || strchr (\" \\t:(\", p[-2]) != 0)) {\n              p = strchr (p + 1, ':');\n              check_again = 1;\n            }\n          } while (check_again);\n        }\n#endif\n        if (p != 0)\n          {\n            struct nameseq *target;\n            target = parse_file_seq (&p2, ':', sizeof (struct nameseq), 1);\n            ++p2;\n            if (target == 0)\n              fatal (fstart, _(\"missing target pattern\"));\n            else if (target->next != 0)\n              fatal (fstart, _(\"multiple target patterns\"));\n            pattern = target->name;\n            pattern_percent = find_percent (pattern);\n            if (pattern_percent == 0)\n              fatal (fstart, _(\"target pattern contains no `%%'\"));\n            free ((char *)target);\n          }\n        else\n          pattern = 0;\n\n        /* Strip leading and trailing whitespaces. */\n        beg = p2;\n        end = beg + strlen (beg) - 1;\n        strip_whitespace (&beg, &end);\n\n        if (beg <= end && *beg != '\\0')\n          {\n            /* Put all the prerequisites here; they'll be parsed later.  */\n            deps = alloc_dep ();\n            deps->name = savestring (beg, end - beg + 1);\n          }\n        else\n          deps = 0;\n\n        commands_idx = 0;\n        if (cmdleft != 0)\n          {\n            /* Semicolon means rest of line is a command.  */\n            unsigned int len = strlen (cmdleft);\n\n            cmds_started = fstart->lineno;\n\n            /* Add this command line to the buffer.  */\n            if (len + 2 > commands_len)\n              {\n                commands_len = (len + 2) * 2;\n                commands = (char *) xrealloc (commands, commands_len);\n              }\n            bcopy (cmdleft, commands, len);\n            commands_idx += len;\n            commands[commands_idx++] = '\\n';\n          }\n\n        /* Determine if this target should be made default. We used to do\n           this in record_files() but because of the delayed target recording\n           and because preprocessor directives are legal in target's commands\n           it is too late. Consider this fragment for example:\n\n           foo:\n\n           ifeq ($(.DEFAULT_GOAL),foo)\n              ...\n           endif\n\n           Because the target is not recorded until after ifeq directive is\n           evaluated the .DEFAULT_GOAL does not contain foo yet as one\n           would expect. Because of this we have to move some of the logic\n           here.  */\n\n        if (**default_goal_name == '\\0' && set_default)\n          {\n            char* name;\n            struct dep *d;\n            struct nameseq *t = filenames;\n\n            for (; t != 0; t = t->next)\n              {\n                int reject = 0;\n                name = t->name;\n\n                /* We have nothing to do if this is an implicit rule. */\n                if (strchr (name, '%') != 0)\n                  break;\n\n                /* See if this target's name does not start with a `.',\n                   unless it contains a slash.  */\n                if (*name == '.' && strchr (name, '/') == 0\n#ifdef HAVE_DOS_PATHS\n                    && strchr (name, '\\\\') == 0\n#endif\n                    )\n                  continue;\n\n\n                /* If this file is a suffix, don't let it be\n                   the default goal file.  */\n                for (d = suffix_file->deps; d != 0; d = d->next)\n                  {\n                    register struct dep *d2;\n                    if (*dep_name (d) != '.' && streq (name, dep_name (d)))\n                      {\n                        reject = 1;\n                        break;\n                      }\n                    for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next)\n                      {\n                        register unsigned int len = strlen (dep_name (d2));\n                        if (!strneq (name, dep_name (d2), len))\n                          continue;\n                        if (streq (name + len, dep_name (d)))\n                          {\n                            reject = 1;\n                            break;\n                          }\n                      }\n\n                    if (reject)\n                      break;\n                  }\n\n                if (!reject)\n                  {\n                    define_variable_global (\".DEFAULT_GOAL\", 13, t->name,\n                                            o_file, 0, NILF);\n                    break;\n                  }\n              }\n          }\n\n        continue;\n      }\n\n      /* We get here except in the case that we just read a rule line.\n\t Record now the last rule we read, so following spurious\n\t commands are properly diagnosed.  */\n rule_complete:\n      record_waiting_files ();\n    }\n\n#undef\tword1eq\n\n  if (conditionals->if_cmds)\n    fatal (fstart, _(\"missing `endif'\"));\n\n  /* At eof, record the last rule.  */\n  record_waiting_files ();\n\n  if (collapsed)\n    free ((char *) collapsed);\n  free ((char *) commands);\n\n  return 1;\n}\n\f\n\n/* Remove comments from LINE.\n   This is done by copying the text at LINE onto itself.  */\n\nstatic void\nremove_comments (char *line)\n{\n  char *comment;\n\n  comment = find_char_unquote (line, '#', 0, 0, 0);\n\n  if (comment != 0)\n    /* Cut off the line at the #.  */\n    *comment = '\\0';\n}\n\n/* Execute a `define' directive.\n   The first line has already been read, and NAME is the name of\n   the variable to be defined.  The following lines remain to be read.  */\n\nstatic void\ndo_define (char *name, unsigned int namelen,\n           enum variable_origin origin, struct ebuffer *ebuf)\n{\n  struct floc defstart;\n  long nlines = 0;\n  int nlevels = 1;\n  unsigned int length = 100;\n  char *definition = (char *) xmalloc (length);\n  unsigned int idx = 0;\n  char *p;\n\n  /* Expand the variable name.  */\n  char *var = (char *) alloca (namelen + 1);\n  bcopy (name, var, namelen);\n  var[namelen] = '\\0';\n  var = variable_expand (var);\n\n  defstart = ebuf->floc;\n\n  while (1)\n    {\n      unsigned int len;\n      char *line;\n\n      nlines = readline (ebuf);\n      ebuf->floc.lineno += nlines;\n\n      /* If there is nothing left to eval, we're done. */\n      if (nlines < 0)\n        break;\n\n      line = ebuf->buffer;\n\n      collapse_continuations (line);\n\n      /* If the line doesn't begin with a tab, test to see if it introduces\n         another define, or ends one.  */\n\n      /* Stop if we find an 'endef' */\n      if (line[0] != '\\t')\n        {\n          p = next_token (line);\n          len = strlen (p);\n\n          /* If this is another 'define', increment the level count.  */\n          if ((len == 6 || (len > 6 && isblank ((unsigned char)p[6])))\n              && strneq (p, \"define\", 6))\n            ++nlevels;\n\n          /* If this is an 'endef', decrement the count.  If it's now 0,\n             we've found the last one.  */\n          else if ((len == 5 || (len > 5 && isblank ((unsigned char)p[5])))\n                   && strneq (p, \"endef\", 5))\n            {\n              p += 5;\n              remove_comments (p);\n              if (*next_token (p) != '\\0')\n                error (&ebuf->floc,\n                       _(\"Extraneous text after `endef' directive\"));\n\n              if (--nlevels == 0)\n                {\n                  /* Define the variable.  */\n                  if (idx == 0)\n                    definition[0] = '\\0';\n                  else\n                    definition[idx - 1] = '\\0';\n\n                  /* Always define these variables in the global set.  */\n                  define_variable_global (var, strlen (var), definition,\n                                          origin, 1, &defstart);\n                  free (definition);\n                  return;\n                }\n            }\n        }\n\n      /* Otherwise add this line to the variable definition.  */\n      len = strlen (line);\n      if (idx + len + 1 > length)\n        {\n          length = (idx + len) * 2;\n          definition = (char *) xrealloc (definition, length + 1);\n        }\n\n      bcopy (line, &definition[idx], len);\n      idx += len;\n      /* Separate lines with a newline.  */\n      definition[idx++] = '\\n';\n    }\n\n  /* No `endef'!!  */\n  fatal (&defstart, _(\"missing `endef', unterminated `define'\"));\n\n  /* NOTREACHED */\n  return;\n}\n\f\n/* Interpret conditional commands \"ifdef\", \"ifndef\", \"ifeq\",\n   \"ifneq\", \"else\" and \"endif\".\n   LINE is the input line, with the command as its first word.\n\n   FILENAME and LINENO are the filename and line number in the\n   current makefile.  They are used for error messages.\n\n   Value is -2 if the line is not a conditional at all,\n   -1 if the line is an invalid conditional,\n   0 if following text should be interpreted,\n   1 if following text should be ignored.  */\n\nstatic int\nconditional_line (char *line, int len, const struct floc *flocp)\n{\n  char *cmdname;\n  enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_else, c_endif } cmdtype;\n  unsigned int i;\n  unsigned int o;\n\n  /* Compare a word, both length and contents. */\n#define\tword1eq(s)      (len == sizeof(s)-1 && strneq (s, line, sizeof(s)-1))\n#define\tchkword(s, t)   if (word1eq (s)) { cmdtype = (t); cmdname = (s); }\n\n  /* Make sure this line is a conditional.  */\n  chkword (\"ifdef\", c_ifdef)\n  else chkword (\"ifndef\", c_ifndef)\n  else chkword (\"ifeq\", c_ifeq)\n  else chkword (\"ifneq\", c_ifneq)\n  else chkword (\"else\", c_else)\n  else chkword (\"endif\", c_endif)\n  else\n    return -2;\n\n  /* Found one: skip past it and any whitespace after it.  */\n  line = next_token (line + len);\n\n#define EXTRANEOUS() error (flocp, _(\"Extraneous text after `%s' directive\"), cmdname)\n\n  /* An 'endif' cannot contain extra text, and reduces the if-depth by 1  */\n  if (cmdtype == c_endif)\n    {\n      if (*line != '\\0')\n\tEXTRANEOUS ();\n\n      if (!conditionals->if_cmds)\n\tfatal (flocp, _(\"extraneous `%s'\"), cmdname);\n\n      --conditionals->if_cmds;\n\n      goto DONE;\n    }\n\n  /* An 'else' statement can either be simple, or it can have another\n     conditional after it.  */\n  if (cmdtype == c_else)\n    {\n      const char *p;\n\n      if (!conditionals->if_cmds)\n\tfatal (flocp, _(\"extraneous `%s'\"), cmdname);\n\n      o = conditionals->if_cmds - 1;\n\n      if (conditionals->seen_else[o])\n        fatal (flocp, _(\"only one `else' per conditional\"));\n\n      /* Change the state of ignorance.  */\n      switch (conditionals->ignoring[o])\n        {\n          case 0:\n            /* We've just been interpreting.  Never do it again.  */\n            conditionals->ignoring[o] = 2;\n            break;\n          case 1:\n            /* We've never interpreted yet.  Maybe this time!  */\n            conditionals->ignoring[o] = 0;\n            break;\n        }\n\n      /* It's a simple 'else'.  */\n      if (*line == '\\0')\n        {\n          conditionals->seen_else[o] = 1;\n          goto DONE;\n        }\n\n      /* The 'else' has extra text.  That text must be another conditional\n         and cannot be an 'else' or 'endif'.  */\n\n      /* Find the length of the next word.  */\n      for (p = line+1; *p != '\\0' && !isspace ((unsigned char)*p); ++p)\n        ;\n      len = p - line;\n\n      /* If it's 'else' or 'endif' or an illegal conditional, fail.  */\n      if (word1eq(\"else\") || word1eq(\"endif\")\n          || conditional_line (line, len, flocp) < 0)\n\tEXTRANEOUS ();\n      else\n        {\n          /* conditional_line() created a new level of conditional.\n             Raise it back to this level.  */\n          if (conditionals->ignoring[o] < 2)\n            conditionals->ignoring[o] = conditionals->ignoring[o+1];\n          --conditionals->if_cmds;\n        }\n\n      goto DONE;\n    }\n\n  if (conditionals->allocated == 0)\n    {\n      conditionals->allocated = 5;\n      conditionals->ignoring = (char *) xmalloc (conditionals->allocated);\n      conditionals->seen_else = (char *) xmalloc (conditionals->allocated);\n    }\n\n  o = conditionals->if_cmds++;\n  if (conditionals->if_cmds > conditionals->allocated)\n    {\n      conditionals->allocated += 5;\n      conditionals->ignoring = (char *)\n\txrealloc (conditionals->ignoring, conditionals->allocated);\n      conditionals->seen_else = (char *)\n\txrealloc (conditionals->seen_else, conditionals->allocated);\n    }\n\n  /* Record that we have seen an `if...' but no `else' so far.  */\n  conditionals->seen_else[o] = 0;\n\n  /* Search through the stack to see if we're already ignoring.  */\n  for (i = 0; i < o; ++i)\n    if (conditionals->ignoring[i])\n      {\n\t/* We are already ignoring, so just push a level to match the next\n\t   \"else\" or \"endif\", and keep ignoring.  We don't want to expand\n\t   variables in the condition.  */\n\tconditionals->ignoring[o] = 1;\n\treturn 1;\n      }\n\n  if (cmdtype == c_ifdef || cmdtype == c_ifndef)\n    {\n      char *var;\n      struct variable *v;\n      char *p;\n\n      /* Expand the thing we're looking up, so we can use indirect and\n         constructed variable names.  */\n      var = allocated_variable_expand (line);\n\n      /* Make sure there's only one variable name to test.  */\n      p = end_of_token (var);\n      i = p - var;\n      p = next_token (p);\n      if (*p != '\\0')\n\treturn -1;\n\n      var[i] = '\\0';\n      v = lookup_variable (var, i);\n\n      conditionals->ignoring[o] =\n        ((v != 0 && *v->value != '\\0') == (cmdtype == c_ifndef));\n\n      free (var);\n    }\n  else\n    {\n      /* \"Ifeq\" or \"ifneq\".  */\n      char *s1, *s2;\n      unsigned int len;\n      char termin = *line == '(' ? ',' : *line;\n\n      if (termin != ',' && termin != '\"' && termin != '\\'')\n\treturn -1;\n\n      s1 = ++line;\n      /* Find the end of the first string.  */\n      if (termin == ',')\n\t{\n\t  int count = 0;\n\t  for (; *line != '\\0'; ++line)\n\t    if (*line == '(')\n\t      ++count;\n\t    else if (*line == ')')\n\t      --count;\n\t    else if (*line == ',' && count <= 0)\n\t      break;\n\t}\n      else\n\twhile (*line != '\\0' && *line != termin)\n\t  ++line;\n\n      if (*line == '\\0')\n\treturn -1;\n\n      if (termin == ',')\n\t{\n\t  /* Strip blanks after the first string.  */\n\t  char *p = line++;\n\t  while (isblank ((unsigned char)p[-1]))\n\t    --p;\n\t  *p = '\\0';\n\t}\n      else\n\t*line++ = '\\0';\n\n      s2 = variable_expand (s1);\n      /* We must allocate a new copy of the expanded string because\n\t variable_expand re-uses the same buffer.  */\n      len = strlen (s2);\n      s1 = (char *) alloca (len + 1);\n      bcopy (s2, s1, len + 1);\n\n      if (termin != ',')\n\t/* Find the start of the second string.  */\n\tline = next_token (line);\n\n      termin = termin == ',' ? ')' : *line;\n      if (termin != ')' && termin != '\"' && termin != '\\'')\n\treturn -1;\n\n      /* Find the end of the second string.  */\n      if (termin == ')')\n\t{\n\t  register int count = 0;\n\t  s2 = next_token (line);\n\t  for (line = s2; *line != '\\0'; ++line)\n\t    {\n\t      if (*line == '(')\n\t\t++count;\n\t      else if (*line == ')')\n\t\t{\n\t\t  if (count <= 0)\n\t\t    break;\n\t\t  else\n\t\t    --count;\n\t\t}\n\t    }\n\t}\n      else\n\t{\n\t  ++line;\n\t  s2 = line;\n\t  while (*line != '\\0' && *line != termin)\n\t    ++line;\n\t}\n\n      if (*line == '\\0')\n\treturn -1;\n\n      *line = '\\0';\n      line = next_token (++line);\n      if (*line != '\\0')\n\tEXTRANEOUS ();\n\n      s2 = variable_expand (s2);\n      conditionals->ignoring[o] = (streq (s1, s2) == (cmdtype == c_ifneq));\n    }\n\n DONE:\n  /* Search through the stack to see if we're ignoring.  */\n  for (i = 0; i < conditionals->if_cmds; ++i)\n    if (conditionals->ignoring[i])\n      return 1;\n  return 0;\n}\n\f\n/* Remove duplicate dependencies in CHAIN.  */\n\nstatic unsigned long\ndep_hash_1 (const void *key)\n{\n  return_STRING_HASH_1 (dep_name ((struct dep const *) key));\n}\n\nstatic unsigned long\ndep_hash_2 (const void *key)\n{\n  return_STRING_HASH_2 (dep_name ((struct dep const *) key));\n}\n\nstatic int\ndep_hash_cmp (const void *x, const void *y)\n{\n  struct dep *dx = (struct dep *) x;\n  struct dep *dy = (struct dep *) y;\n  int cmp = strcmp (dep_name (dx), dep_name (dy));\n\n  /* If the names are the same but ignore_mtimes are not equal, one of these\n     is an order-only prerequisite and one isn't.  That means that we should\n     remove the one that isn't and keep the one that is.  */\n\n  if (!cmp && dx->ignore_mtime != dy->ignore_mtime)\n    dx->ignore_mtime = dy->ignore_mtime = 0;\n\n  return cmp;\n}\n\n\nvoid\nuniquize_deps (struct dep *chain)\n{\n  struct hash_table deps;\n  register struct dep **depp;\n\n  hash_init (&deps, 500, dep_hash_1, dep_hash_2, dep_hash_cmp);\n\n  /* Make sure that no dependencies are repeated.  This does not\n     really matter for the purpose of updating targets, but it\n     might make some names be listed twice for $^ and $?.  */\n\n  depp = &chain;\n  while (*depp)\n    {\n      struct dep *dep = *depp;\n      struct dep **dep_slot = (struct dep **) hash_find_slot (&deps, dep);\n      if (HASH_VACANT (*dep_slot))\n\t{\n\t  hash_insert_at (&deps, dep, dep_slot);\n\t  depp = &dep->next;\n\t}\n      else\n\t{\n\t  /* Don't bother freeing duplicates.\n\t     It's dangerous and little benefit accrues.  */\n\t  *depp = dep->next;\n\t}\n    }\n\n  hash_free (&deps, 0);\n}\n\f\n/* Record target-specific variable values for files FILENAMES.\n   TWO_COLON is nonzero if a double colon was used.\n\n   The links of FILENAMES are freed, and so are any names in it\n   that are not incorporated into other data structures.\n\n   If the target is a pattern, add the variable to the pattern-specific\n   variable value list.  */\n\nstatic void\nrecord_target_var (struct nameseq *filenames, char *defn,\n                   enum variable_origin origin, int exported,\n                   const struct floc *flocp)\n{\n  struct nameseq *nextf;\n  struct variable_set_list *global;\n\n  global = current_variable_set_list;\n\n  /* If the variable is an append version, store that but treat it as a\n     normal recursive variable.  */\n\n  for (; filenames != 0; filenames = nextf)\n    {\n      struct variable *v;\n      register char *name = filenames->name;\n      char *fname;\n      char *percent;\n      struct pattern_var *p;\n\n      nextf = filenames->next;\n      free ((char *) filenames);\n\n      /* If it's a pattern target, then add it to the pattern-specific\n         variable list.  */\n      percent = find_percent (name);\n      if (percent)\n        {\n          /* Get a reference for this pattern-specific variable struct.  */\n          p = create_pattern_var (name, percent);\n          p->variable.fileinfo = *flocp;\n          /* I don't think this can fail since we already determined it was a\n             variable definition.  */\n          v = parse_variable_definition (&p->variable, defn);\n          assert (v != 0);\n\n          if (v->flavor == f_simple)\n            v->value = allocated_variable_expand (v->value);\n          else\n            v->value = xstrdup (v->value);\n\n          fname = p->target;\n        }\n      else\n        {\n          struct file *f;\n\n          /* Get a file reference for this file, and initialize it.\n             We don't want to just call enter_file() because that allocates a\n             new entry if the file is a double-colon, which we don't want in\n             this situation.  */\n          f = lookup_file (name);\n          if (!f)\n            f = enter_file (name);\n          else if (f->double_colon)\n            f = f->double_colon;\n\n          initialize_file_variables (f, 1);\n          fname = f->name;\n\n          current_variable_set_list = f->variables;\n          v = try_variable_definition (flocp, defn, origin, 1);\n          if (!v)\n            error (flocp, _(\"Malformed target-specific variable definition\"));\n          current_variable_set_list = global;\n        }\n\n      /* Set up the variable to be *-specific.  */\n      v->origin = origin;\n      v->per_target = 1;\n      v->export = exported ? v_export : v_default;\n\n      /* If it's not an override, check to see if there was a command-line\n         setting.  If so, reset the value.  */\n      if (origin != o_override)\n        {\n          struct variable *gv;\n          int len = strlen(v->name);\n\n          gv = lookup_variable (v->name, len);\n          if (gv && (gv->origin == o_env_override || gv->origin == o_command))\n            {\n              if (v->value != 0)\n                free (v->value);\n              v->value = xstrdup (gv->value);\n              v->origin = gv->origin;\n              v->recursive = gv->recursive;\n              v->append = 0;\n            }\n        }\n\n      /* Free name if not needed further.  */\n      if (name != fname && (name < fname || name > fname + strlen (fname)))\n        free (name);\n    }\n}\n\f\n/* Record a description line for files FILENAMES,\n   with dependencies DEPS, commands to execute described\n   by COMMANDS and COMMANDS_IDX, coming from FILENAME:COMMANDS_STARTED.\n   TWO_COLON is nonzero if a double colon was used.\n   If not nil, PATTERN is the `%' pattern to make this\n   a static pattern rule, and PATTERN_PERCENT is a pointer\n   to the `%' within it.\n\n   The links of FILENAMES are freed, and so are any names in it\n   that are not incorporated into other data structures.  */\n\nstatic void\nrecord_files (struct nameseq *filenames, char *pattern, char *pattern_percent,\n              struct dep *deps, unsigned int cmds_started, char *commands,\n              unsigned int commands_idx, int two_colon,\n              const struct floc *flocp)\n{\n  struct nameseq *nextf;\n  int implicit = 0;\n  unsigned int max_targets = 0, target_idx = 0;\n  char **targets = 0, **target_percents = 0;\n  struct commands *cmds;\n\n  /* If we've already snapped deps, that means we're in an eval being\n     resolved after the makefiles have been read in.  We can't add more rules\n     at this time, since they won't get snapped and we'll get core dumps.\n     See Savannah bug # 12124.  */\n  if (snapped_deps)\n    fatal (flocp, _(\"prerequisites cannot be defined in command scripts\"));\n\n  if (commands_idx > 0)\n    {\n      cmds = (struct commands *) xmalloc (sizeof (struct commands));\n      cmds->fileinfo.filenm = flocp->filenm;\n      cmds->fileinfo.lineno = cmds_started;\n      cmds->commands = savestring (commands, commands_idx);\n      cmds->command_lines = 0;\n    }\n  else\n    cmds = 0;\n\n  for (; filenames != 0; filenames = nextf)\n    {\n      char *name = filenames->name;\n      struct file *f;\n      struct dep *this = 0;\n      char *implicit_percent;\n\n      nextf = filenames->next;\n      free (filenames);\n\n      /* Check for special targets.  Do it here instead of, say, snap_deps()\n         so that we can immediately use the value.  */\n\n      if (streq (name, \".POSIX\"))\n        posix_pedantic = 1;\n      else if (streq (name, \".SECONDEXPANSION\"))\n        second_expansion = 1;\n\n      implicit_percent = find_percent (name);\n      implicit |= implicit_percent != 0;\n\n      if (implicit && pattern != 0)\n\tfatal (flocp, _(\"mixed implicit and static pattern rules\"));\n\n      if (implicit && implicit_percent == 0)\n\tfatal (flocp, _(\"mixed implicit and normal rules\"));\n\n      if (implicit)\n\t{\n\t  if (targets == 0)\n\t    {\n\t      max_targets = 5;\n\t      targets = (char **) xmalloc (5 * sizeof (char *));\n\t      target_percents = (char **) xmalloc (5 * sizeof (char *));\n\t      target_idx = 0;\n\t    }\n\t  else if (target_idx == max_targets - 1)\n\t    {\n\t      max_targets += 5;\n\t      targets = (char **) xrealloc ((char *) targets,\n\t\t\t\t\t    max_targets * sizeof (char *));\n\t      target_percents\n\t\t= (char **) xrealloc ((char *) target_percents,\n\t\t\t\t      max_targets * sizeof (char *));\n\t    }\n\t  targets[target_idx] = name;\n\t  target_percents[target_idx] = implicit_percent;\n\t  ++target_idx;\n\t  continue;\n\t}\n\n      /* If this is a static pattern rule:\n         `targets: target%pattern: dep%pattern; cmds',\n         make sure the pattern matches this target name.  */\n      if (pattern && !pattern_matches (pattern, pattern_percent, name))\n        error (flocp, _(\"target `%s' doesn't match the target pattern\"), name);\n      else if (deps)\n        {\n          /* If there are multiple filenames, copy the chain DEPS for all but\n             the last one.  It is not safe for the same deps to go in more\n             than one place in the database.  */\n          this = nextf != 0 ? copy_dep_chain (deps) : deps;\n          this->need_2nd_expansion = (second_expansion\n\t\t\t\t      && strchr (this->name, '$'));\n        }\n\n      if (!two_colon)\n\t{\n\t  /* Single-colon.  Combine these dependencies\n\t     with others in file's existing record, if any.  */\n\t  f = enter_file (name);\n\n\t  if (f->double_colon)\n\t    fatal (flocp,\n                   _(\"target file `%s' has both : and :: entries\"), f->name);\n\n\t  /* If CMDS == F->CMDS, this target was listed in this rule\n\t     more than once.  Just give a warning since this is harmless.  */\n\t  if (cmds != 0 && cmds == f->cmds)\n\t    error (flocp,\n                   _(\"target `%s' given more than once in the same rule.\"),\n                   f->name);\n\n\t  /* Check for two single-colon entries both with commands.\n\t     Check is_target so that we don't lose on files such as .c.o\n\t     whose commands were preinitialized.  */\n\t  else if (cmds != 0 && f->cmds != 0 && f->is_target)\n\t    {\n\t      error (&cmds->fileinfo,\n                     _(\"warning: overriding commands for target `%s'\"),\n                     f->name);\n\t      error (&f->cmds->fileinfo,\n                     _(\"warning: ignoring old commands for target `%s'\"),\n                     f->name);\n\t    }\n\n\t  f->is_target = 1;\n\n\t  /* Defining .DEFAULT with no deps or cmds clears it.  */\n\t  if (f == default_file && this == 0 && cmds == 0)\n\t    f->cmds = 0;\n\t  if (cmds != 0)\n\t    f->cmds = cmds;\n\n\t  /* Defining .SUFFIXES with no dependencies clears out the list of\n\t     suffixes.  */\n\t  if (f == suffix_file && this == 0)\n\t    {\n              free_dep_chain (f->deps);\n\t      f->deps = 0;\n\t    }\n          else if (this != 0)\n\t    {\n\t      /* Add the file's old deps and the new ones in THIS together.  */\n\n              if (f->deps != 0)\n                {\n                  struct dep **d_ptr = &f->deps;\n\n                  while ((*d_ptr)->next != 0)\n                    d_ptr = &(*d_ptr)->next;\n\n                  if (cmds != 0)\n                    /* This is the rule with commands, so put its deps\n                       last. The rationale behind this is that $< expands to\n                       the first dep in the chain, and commands use $<\n                       expecting to get the dep that rule specifies.  However\n                       the second expansion algorithm reverses the order thus\n                       we need to make it last here.  */\n                    (*d_ptr)->next = this;\n                  else\n                    {\n                      /* This is the rule without commands. Put its\n                         dependencies at the end but before dependencies from\n                         the rule with commands (if any). This way everything\n                         appears in makefile order.  */\n\n                      if (f->cmds != 0)\n                        {\n                          this->next = *d_ptr;\n                          *d_ptr = this;\n                        }\n                      else\n                        (*d_ptr)->next = this;\n                    }\n                }\n              else\n                f->deps = this;\n\n              /* This is a hack. I need a way to communicate to snap_deps()\n                 that the last dependency line in this file came with commands\n                 (so that logic in snap_deps() can put it in front and all\n                 this $< -logic works). I cannot simply rely on file->cmds\n                 being not 0 because of the cases like the following:\n\n                 foo: bar\n                 foo:\n                     ...\n\n                 I am going to temporarily \"borrow\" UPDATING member in\n                 `struct file' for this.   */\n\n              if (cmds != 0)\n                f->updating = 1;\n\t    }\n\t}\n      else\n\t{\n\t  /* Double-colon.  Make a new record even if there already is one.  */\n\t  f = lookup_file (name);\n\n\t  /* Check for both : and :: rules.  Check is_target so\n\t     we don't lose on default suffix rules or makefiles.  */\n\t  if (f != 0 && f->is_target && !f->double_colon)\n\t    fatal (flocp,\n                   _(\"target file `%s' has both : and :: entries\"), f->name);\n\t  f = enter_file (name);\n\t  /* If there was an existing entry and it was a double-colon entry,\n\t     enter_file will have returned a new one, making it the prev\n\t     pointer of the old one, and setting its double_colon pointer to\n\t     the first one.  */\n\t  if (f->double_colon == 0)\n\t    /* This is the first entry for this name, so we must set its\n\t       double_colon pointer to itself.  */\n\t    f->double_colon = f;\n\t  f->is_target = 1;\n\t  f->deps = this;\n\t  f->cmds = cmds;\n\t}\n\n      /* If this is a static pattern rule, set the stem to the part of its\n         name that matched the `%' in the pattern, so you can use $* in the\n         commands.  */\n      if (pattern)\n        {\n          static char *percent = \"%\";\n          char *buffer = variable_expand (\"\");\n          char *o = patsubst_expand (buffer, name, pattern, percent,\n                                     pattern_percent+1, percent+1);\n          f->stem = savestring (buffer, o - buffer);\n          if (this)\n            {\n              this->staticpattern = 1;\n              this->stem = xstrdup (f->stem);\n            }\n        }\n\n      /* Free name if not needed further.  */\n      if (f != 0 && name != f->name\n\t  && (name < f->name || name > f->name + strlen (f->name)))\n\t{\n\t  free (name);\n\t  name = f->name;\n\t}\n\n      /* If this target is a default target, update DEFAULT_GOAL_FILE.  */\n      if (streq (*default_goal_name, name)\n          && (default_goal_file == 0\n              || ! streq (default_goal_file->name, name)))\n        default_goal_file = f;\n    }\n\n  if (implicit)\n    {\n      targets[target_idx] = 0;\n      target_percents[target_idx] = 0;\n      if (deps)\n        deps->need_2nd_expansion = second_expansion;\n      create_pattern_rule (targets, target_percents, two_colon, deps, cmds, 1);\n      free ((char *) target_percents);\n    }\n}\n\f\n/* Search STRING for an unquoted STOPCHAR or blank (if BLANK is nonzero).\n   Backslashes quote STOPCHAR, blanks if BLANK is nonzero, and backslash.\n   Quoting backslashes are removed from STRING by compacting it into\n   itself.  Returns a pointer to the first unquoted STOPCHAR if there is\n   one, or nil if there are none.  STOPCHARs inside variable references are\n   ignored if IGNOREVARS is true.\n\n   STOPCHAR _cannot_ be '$' if IGNOREVARS is true.  */\n\nstatic char *\nfind_char_unquote (char *string, int stop1, int stop2, int blank,\n                   int ignorevars)\n{\n  unsigned int string_len = 0;\n  register char *p = string;\n\n  if (ignorevars)\n    ignorevars = '$';\n\n  while (1)\n    {\n      if (stop2 && blank)\n\twhile (*p != '\\0' && *p != ignorevars && *p != stop1 && *p != stop2\n\t       && ! isblank ((unsigned char) *p))\n\t  ++p;\n      else if (stop2)\n\twhile (*p != '\\0' && *p != ignorevars && *p != stop1 && *p != stop2)\n\t  ++p;\n      else if (blank)\n\twhile (*p != '\\0' && *p != ignorevars && *p != stop1\n\t       && ! isblank ((unsigned char) *p))\n\t  ++p;\n      else\n\twhile (*p != '\\0' && *p != ignorevars && *p != stop1)\n\t  ++p;\n\n      if (*p == '\\0')\n\tbreak;\n\n      /* If we stopped due to a variable reference, skip over its contents.  */\n      if (*p == ignorevars)\n        {\n          char openparen = p[1];\n\n          p += 2;\n\n          /* Skip the contents of a non-quoted, multi-char variable ref.  */\n          if (openparen == '(' || openparen == '{')\n            {\n              unsigned int pcount = 1;\n              char closeparen = (openparen == '(' ? ')' : '}');\n\n              while (*p)\n                {\n                  if (*p == openparen)\n                    ++pcount;\n                  else if (*p == closeparen)\n                    if (--pcount == 0)\n                      {\n                        ++p;\n                        break;\n                      }\n                  ++p;\n                }\n            }\n\n          /* Skipped the variable reference: look for STOPCHARS again.  */\n          continue;\n        }\n\n      if (p > string && p[-1] == '\\\\')\n\t{\n\t  /* Search for more backslashes.  */\n\t  register int i = -2;\n\t  while (&p[i] >= string && p[i] == '\\\\')\n\t    --i;\n\t  ++i;\n\t  /* Only compute the length if really needed.  */\n\t  if (string_len == 0)\n\t    string_len = strlen (string);\n\t  /* The number of backslashes is now -I.\n\t     Copy P over itself to swallow half of them.  */\n\t  bcopy (&p[i / 2], &p[i], (string_len - (p - string)) - (i / 2) + 1);\n\t  p += i / 2;\n\t  if (i % 2 == 0)\n\t    /* All the backslashes quoted each other; the STOPCHAR was\n\t       unquoted.  */\n\t    return p;\n\n\t  /* The STOPCHAR was quoted by a backslash.  Look for another.  */\n\t}\n      else\n\t/* No backslash in sight.  */\n\treturn p;\n    }\n\n  /* Never hit a STOPCHAR or blank (with BLANK nonzero).  */\n  return 0;\n}\n\n/* Search PATTERN for an unquoted %.  */\n\nchar *\nfind_percent (char *pattern)\n{\n  return find_char_unquote (pattern, '%', 0, 0, 0);\n}\n\f\n/* Parse a string into a sequence of filenames represented as a\n   chain of struct nameseq's in reverse order and return that chain.\n\n   The string is passed as STRINGP, the address of a string pointer.\n   The string pointer is updated to point at the first character\n   not parsed, which either is a null char or equals STOPCHAR.\n\n   SIZE is how big to construct chain elements.\n   This is useful if we want them actually to be other structures\n   that have room for additional info.\n\n   If STRIP is nonzero, strip `./'s off the beginning.  */\n\nstruct nameseq *\nparse_file_seq (char **stringp, int stopchar, unsigned int size, int strip)\n{\n  struct nameseq *new = 0;\n  struct nameseq *new1, *lastnew1;\n  char *p = *stringp;\n  char *q;\n  char *name;\n\n#ifdef VMS\n# define VMS_COMMA ','\n#else\n# define VMS_COMMA 0\n#endif\n\n  while (1)\n    {\n      /* Skip whitespace; see if any more names are left.  */\n      p = next_token (p);\n      if (*p == '\\0')\n\tbreak;\n      if (*p == stopchar)\n\tbreak;\n\n      /* Yes, find end of next name.  */\n      q = p;\n      p = find_char_unquote (q, stopchar, VMS_COMMA, 1, 0);\n#ifdef VMS\n\t/* convert comma separated list to space separated */\n      if (p && *p == ',')\n\t*p =' ';\n#endif\n#ifdef _AMIGA\n      if (stopchar == ':' && p && *p == ':'\n          && !(isspace ((unsigned char)p[1]) || !p[1]\n               || isspace ((unsigned char)p[-1])))\n      {\n\tp = find_char_unquote (p+1, stopchar, VMS_COMMA, 1, 0);\n      }\n#endif\n#ifdef HAVE_DOS_PATHS\n    /* For DOS paths, skip a \"C:\\...\" or a \"C:/...\" until we find the\n       first colon which isn't followed by a slash or a backslash.\n       Note that tokens separated by spaces should be treated as separate\n       tokens since make doesn't allow path names with spaces */\n    if (stopchar == ':')\n      while (p != 0 && !isspace ((unsigned char)*p) &&\n             (p[1] == '\\\\' || p[1] == '/') && isalpha ((unsigned char)p[-1]))\n        p = find_char_unquote (p + 1, stopchar, VMS_COMMA, 1, 0);\n#endif\n      if (p == 0)\n\tp = q + strlen (q);\n\n      if (strip)\n#ifdef VMS\n\t/* Skip leading `[]'s.  */\n\twhile (p - q > 2 && q[0] == '[' && q[1] == ']')\n#else\n\t/* Skip leading `./'s.  */\n\twhile (p - q > 2 && q[0] == '.' && q[1] == '/')\n#endif\n\t  {\n\t    q += 2;\t\t/* Skip \"./\".  */\n\t    while (q < p && *q == '/')\n\t      /* Skip following slashes: \".//foo\" is \"foo\", not \"/foo\".  */\n\t      ++q;\n\t  }\n\n      /* Extract the filename just found, and skip it.  */\n\n      if (q == p)\n\t/* \".///\" was stripped to \"\". */\n#ifdef VMS\n\tcontinue;\n#else\n#ifdef _AMIGA\n\tname = savestring (\"\", 0);\n#else\n\tname = savestring (\"./\", 2);\n#endif\n#endif\n      else\n#ifdef VMS\n/* VMS filenames can have a ':' in them but they have to be '\\'ed but we need\n *  to remove this '\\' before we can use the filename.\n * Savestring called because q may be read-only string constant.\n */\n\t{\n\t  char *qbase = xstrdup (q);\n\t  char *pbase = qbase + (p-q);\n\t  char *q1 = qbase;\n\t  char *q2 = q1;\n\t  char *p1 = pbase;\n\n\t  while (q1 != pbase)\n\t    {\n\t      if (*q1 == '\\\\' && *(q1+1) == ':')\n\t\t{\n\t\t  q1++;\n\t\t  p1--;\n\t\t}\n\t      *q2++ = *q1++;\n\t    }\n\t  name = savestring (qbase, p1 - qbase);\n\t  free (qbase);\n\t}\n#else\n\tname = savestring (q, p - q);\n#endif\n\n      /* Add it to the front of the chain.  */\n      new1 = (struct nameseq *) xmalloc (size);\n      new1->name = name;\n      new1->next = new;\n      new = new1;\n    }\n\n#ifndef NO_ARCHIVES\n\n  /* Look for multi-word archive references.\n     They are indicated by a elt ending with an unmatched `)' and\n     an elt further down the chain (i.e., previous in the file list)\n     with an unmatched `(' (e.g., \"lib(mem\").  */\n\n  new1 = new;\n  lastnew1 = 0;\n  while (new1 != 0)\n    if (new1->name[0] != '('\t/* Don't catch \"(%)\" and suchlike.  */\n\t&& new1->name[strlen (new1->name) - 1] == ')'\n\t&& strchr (new1->name, '(') == 0)\n      {\n\t/* NEW1 ends with a `)' but does not contain a `('.\n\t   Look back for an elt with an opening `(' but no closing `)'.  */\n\n\tstruct nameseq *n = new1->next, *lastn = new1;\n\tchar *paren = 0;\n\twhile (n != 0 && (paren = strchr (n->name, '(')) == 0)\n\t  {\n\t    lastn = n;\n\t    n = n->next;\n\t  }\n\tif (n != 0\n\t    /* Ignore something starting with `(', as that cannot actually\n\t       be an archive-member reference (and treating it as such\n\t       results in an empty file name, which causes much lossage).  */\n\t    && n->name[0] != '(')\n\t  {\n\t    /* N is the first element in the archive group.\n\t       Its name looks like \"lib(mem\" (with no closing `)').  */\n\n\t    char *libname;\n\n\t    /* Copy \"lib(\" into LIBNAME.  */\n\t    ++paren;\n\t    libname = (char *) alloca (paren - n->name + 1);\n\t    bcopy (n->name, libname, paren - n->name);\n\t    libname[paren - n->name] = '\\0';\n\n\t    if (*paren == '\\0')\n\t      {\n\t\t/* N was just \"lib(\", part of something like \"lib( a b)\".\n\t\t   Edit it out of the chain and free its storage.  */\n\t\tlastn->next = n->next;\n\t\tfree (n->name);\n\t\tfree ((char *) n);\n\t\t/* LASTN->next is the new stopping elt for the loop below.  */\n\t\tn = lastn->next;\n\t      }\n\t    else\n\t      {\n\t\t/* Replace N's name with the full archive reference.  */\n\t\tname = concat (libname, paren, \")\");\n\t\tfree (n->name);\n\t\tn->name = name;\n\t      }\n\n\t    if (new1->name[1] == '\\0')\n\t      {\n\t\t/* NEW1 is just \")\", part of something like \"lib(a b )\".\n\t\t   Omit it from the chain and free its storage.  */\n\t\tif (lastnew1 == 0)\n\t\t  new = new1->next;\n\t\telse\n\t\t  lastnew1->next = new1->next;\n\t\tlastn = new1;\n\t\tnew1 = new1->next;\n\t\tfree (lastn->name);\n\t\tfree ((char *) lastn);\n\t      }\n\t    else\n\t      {\n\t\t/* Replace also NEW1->name, which already has closing `)'.  */\n\t\tname = concat (libname, new1->name, \"\");\n\t\tfree (new1->name);\n\t\tnew1->name = name;\n\t\tnew1 = new1->next;\n\t      }\n\n\t    /* Trace back from NEW1 (the end of the list) until N\n\t       (the beginning of the list), rewriting each name\n\t       with the full archive reference.  */\n\n\t    while (new1 != n)\n\t      {\n\t\tname = concat (libname, new1->name, \")\");\n\t\tfree (new1->name);\n\t\tnew1->name = name;\n\t\tlastnew1 = new1;\n\t\tnew1 = new1->next;\n\t      }\n\t  }\n\telse\n\t  {\n\t    /* No frobnication happening.  Just step down the list.  */\n\t    lastnew1 = new1;\n\t    new1 = new1->next;\n\t  }\n      }\n    else\n      {\n\tlastnew1 = new1;\n\tnew1 = new1->next;\n      }\n\n#endif\n\n  *stringp = p;\n  return new;\n}\n\f\n/* Find the next line of text in an eval buffer, combining continuation lines\n   into one line.\n   Return the number of actual lines read (> 1 if continuation lines).\n   Returns -1 if there's nothing left in the buffer.\n\n   After this function, ebuf->buffer points to the first character of the\n   line we just found.\n */\n\n/* Read a line of text from a STRING.\n   Since we aren't really reading from a file, don't bother with linenumbers.\n */\n\nstatic unsigned long\nreadstring (struct ebuffer *ebuf)\n{\n  char *eol;\n\n  /* If there is nothing left in this buffer, return 0.  */\n  if (ebuf->bufnext >= ebuf->bufstart + ebuf->size)\n    return -1;\n\n  /* Set up a new starting point for the buffer, and find the end of the\n     next logical line (taking into account backslash/newline pairs).  */\n\n  eol = ebuf->buffer = ebuf->bufnext;\n\n  while (1)\n    {\n      int backslash = 0;\n      char *bol = eol;\n      char *p;\n\n      /* Find the next newline.  At EOS, stop.  */\n      eol = p = strchr (eol , '\\n');\n      if (!eol)\n        {\n          ebuf->bufnext = ebuf->bufstart + ebuf->size + 1;\n          return 0;\n        }\n\n      /* Found a newline; if it's escaped continue; else we're done.  */\n      while (p > bol && *(--p) == '\\\\')\n        backslash = !backslash;\n      if (!backslash)\n        break;\n      ++eol;\n    }\n\n  /* Overwrite the newline char.  */\n  *eol = '\\0';\n  ebuf->bufnext = eol+1;\n\n  return 0;\n}\n\nstatic long\nreadline (struct ebuffer *ebuf)\n{\n  char *p;\n  char *end;\n  char *start;\n  long nlines = 0;\n\n  /* The behaviors between string and stream buffers are different enough to\n     warrant different functions.  Do the Right Thing.  */\n\n  if (!ebuf->fp)\n    return readstring (ebuf);\n\n  /* When reading from a file, we always start over at the beginning of the\n     buffer for each new line.  */\n\n  p = start = ebuf->bufstart;\n  end = p + ebuf->size;\n  *p = '\\0';\n\n  while (fgets (p, end - p, ebuf->fp) != 0)\n    {\n      char *p2;\n      unsigned long len;\n      int backslash;\n\n      len = strlen (p);\n      if (len == 0)\n\t{\n\t  /* This only happens when the first thing on the line is a '\\0'.\n\t     It is a pretty hopeless case, but (wonder of wonders) Athena\n\t     lossage strikes again!  (xmkmf puts NULs in its makefiles.)\n\t     There is nothing really to be done; we synthesize a newline so\n\t     the following line doesn't appear to be part of this line.  */\n\t  error (&ebuf->floc,\n                 _(\"warning: NUL character seen; rest of line ignored\"));\n\t  p[0] = '\\n';\n\t  len = 1;\n\t}\n\n      /* Jump past the text we just read.  */\n      p += len;\n\n      /* If the last char isn't a newline, the whole line didn't fit into the\n         buffer.  Get some more buffer and try again.  */\n      if (p[-1] != '\\n')\n        goto more_buffer;\n\n      /* We got a newline, so add one to the count of lines.  */\n      ++nlines;\n\n#if !defined(WINDOWS32) && !defined(__MSDOS__) && !defined(__EMX__)\n      /* Check to see if the line was really ended with CRLF; if so ignore\n         the CR.  */\n      if ((p - start) > 1 && p[-2] == '\\r')\n        {\n          --p;\n          p[-1] = '\\n';\n        }\n#endif\n\n      backslash = 0;\n      for (p2 = p - 2; p2 >= start; --p2)\n\t{\n\t  if (*p2 != '\\\\')\n\t    break;\n          backslash = !backslash;\n\t}\n\n      if (!backslash)\n\t{\n\t  p[-1] = '\\0';\n\t  break;\n\t}\n\n      /* It was a backslash/newline combo.  If we have more space, read\n         another line.  */\n      if (end - p >= 80)\n        continue;\n\n      /* We need more space at the end of our buffer, so realloc it.\n         Make sure to preserve the current offset of p.  */\n    more_buffer:\n      {\n        unsigned long off = p - start;\n        ebuf->size *= 2;\n        start = ebuf->buffer = ebuf->bufstart = (char *) xrealloc (start,\n                                                                   ebuf->size);\n        p = start + off;\n        end = start + ebuf->size;\n        *p = '\\0';\n      }\n    }\n\n  if (ferror (ebuf->fp))\n    pfatal_with_name (ebuf->floc.filenm);\n\n  /* If we found some lines, return how many.\n     If we didn't, but we did find _something_, that indicates we read the last\n     line of a file with no final newline; return 1.\n     If we read nothing, we're at EOF; return -1.  */\n\n  return nlines ? nlines : p == ebuf->bufstart ? -1 : 1;\n}\n\f\n/* Parse the next \"makefile word\" from the input buffer, and return info\n   about it.\n\n   A \"makefile word\" is one of:\n\n     w_bogus        Should never happen\n     w_eol          End of input\n     w_static       A static word; cannot be expanded\n     w_variable     A word containing one or more variables/functions\n     w_colon        A colon\n     w_dcolon       A double-colon\n     w_semicolon    A semicolon\n     w_varassign    A variable assignment operator (=, :=, +=, or ?=)\n\n   Note that this function is only used when reading certain parts of the\n   makefile.  Don't use it where special rules hold sway (RHS of a variable,\n   in a command list, etc.)  */\n\nstatic enum make_word_type\nget_next_mword (char *buffer, char *delim, char **startp, unsigned int *length)\n{\n  enum make_word_type wtype = w_bogus;\n  char *p = buffer, *beg;\n  char c;\n\n  /* Skip any leading whitespace.  */\n  while (isblank ((unsigned char)*p))\n    ++p;\n\n  beg = p;\n  c = *(p++);\n  switch (c)\n    {\n    case '\\0':\n      wtype = w_eol;\n      break;\n\n    case ';':\n      wtype = w_semicolon;\n      break;\n\n    case '=':\n      wtype = w_varassign;\n      break;\n\n    case ':':\n      wtype = w_colon;\n      switch (*p)\n        {\n        case ':':\n          ++p;\n          wtype = w_dcolon;\n          break;\n\n        case '=':\n          ++p;\n          wtype = w_varassign;\n          break;\n        }\n      break;\n\n    case '+':\n    case '?':\n      if (*p == '=')\n        {\n          ++p;\n          wtype = w_varassign;\n          break;\n        }\n\n    default:\n      if (delim && strchr (delim, c))\n        wtype = w_static;\n      break;\n    }\n\n  /* Did we find something?  If so, return now.  */\n  if (wtype != w_bogus)\n    goto done;\n\n  /* This is some non-operator word.  A word consists of the longest\n     string of characters that doesn't contain whitespace, one of [:=#],\n     or [?+]=, or one of the chars in the DELIM string.  */\n\n  /* We start out assuming a static word; if we see a variable we'll\n     adjust our assumptions then.  */\n  wtype = w_static;\n\n  /* We already found the first value of \"c\", above.  */\n  while (1)\n    {\n      char closeparen;\n      int count;\n\n      switch (c)\n        {\n        case '\\0':\n        case ' ':\n        case '\\t':\n        case '=':\n          goto done_word;\n\n        case ':':\n#ifdef HAVE_DOS_PATHS\n\t  /* A word CAN include a colon in its drive spec.  The drive\n\t     spec is allowed either at the beginning of a word, or as part\n\t     of the archive member name, like in \"libfoo.a(d:/foo/bar.o)\".  */\n\t  if (!(p - beg >= 2\n\t\t&& (*p == '/' || *p == '\\\\') && isalpha ((unsigned char)p[-2])\n\t\t&& (p - beg == 2 || p[-3] == '(')))\n#endif\n\t  goto done_word;\n\n        case '$':\n          c = *(p++);\n          if (c == '$')\n            break;\n\n          /* This is a variable reference, so note that it's expandable.\n             Then read it to the matching close paren.  */\n          wtype = w_variable;\n\n          if (c == '(')\n            closeparen = ')';\n          else if (c == '{')\n            closeparen = '}';\n          else\n            /* This is a single-letter variable reference.  */\n            break;\n\n          for (count=0; *p != '\\0'; ++p)\n            {\n              if (*p == c)\n                ++count;\n              else if (*p == closeparen && --count < 0)\n                {\n                  ++p;\n                  break;\n                }\n            }\n          break;\n\n        case '?':\n        case '+':\n          if (*p == '=')\n            goto done_word;\n          break;\n\n        case '\\\\':\n          switch (*p)\n            {\n            case ':':\n            case ';':\n            case '=':\n            case '\\\\':\n              ++p;\n              break;\n            }\n          break;\n\n        default:\n          if (delim && strchr (delim, c))\n            goto done_word;\n          break;\n        }\n\n      c = *(p++);\n    }\n done_word:\n  --p;\n\n done:\n  if (startp)\n    *startp = beg;\n  if (length)\n    *length = p - beg;\n  return wtype;\n}\n\f\n/* Construct the list of include directories\n   from the arguments and the default list.  */\n\nvoid\nconstruct_include_path (char **arg_dirs)\n{\n  register unsigned int i;\n#ifdef VAXC\t\t/* just don't ask ... */\n  stat_t stbuf;\n#else\n  struct stat stbuf;\n#endif\n  /* Table to hold the dirs.  */\n\n  register unsigned int defsize = (sizeof (default_include_directories)\n\t\t\t\t   / sizeof (default_include_directories[0]));\n  register unsigned int max = 5;\n  register char **dirs = (char **) xmalloc ((5 + defsize) * sizeof (char *));\n  register unsigned int idx = 0;\n\n#ifdef  __MSDOS__\n  defsize++;\n#endif\n\n  /* First consider any dirs specified with -I switches.\n     Ignore dirs that don't exist.  */\n\n  if (arg_dirs != 0)\n    while (*arg_dirs != 0)\n      {\n\tchar *dir = *arg_dirs++;\n        int e;\n\n\tif (dir[0] == '~')\n\t  {\n\t    char *expanded = tilde_expand (dir);\n\t    if (expanded != 0)\n\t      dir = expanded;\n\t  }\n\n        EINTRLOOP (e, stat (dir, &stbuf));\n\tif (e == 0 && S_ISDIR (stbuf.st_mode))\n\t  {\n\t    if (idx == max - 1)\n\t      {\n\t\tmax += 5;\n\t\tdirs = (char **)\n\t\t  xrealloc ((char *) dirs, (max + defsize) * sizeof (char *));\n\t      }\n\t    dirs[idx++] = dir;\n\t  }\n\telse if (dir != arg_dirs[-1])\n\t  free (dir);\n      }\n\n  /* Now add at the end the standard default dirs.  */\n\n#ifdef  __MSDOS__\n  {\n    /* The environment variable $DJDIR holds the root of the\n       DJGPP directory tree; add ${DJDIR}/include.  */\n    struct variable *djdir = lookup_variable (\"DJDIR\", 5);\n\n    if (djdir)\n      {\n\tchar *defdir = (char *) xmalloc (strlen (djdir->value) + 8 + 1);\n\n\tstrcat (strcpy (defdir, djdir->value), \"/include\");\n\tdirs[idx++] = defdir;\n      }\n  }\n#endif\n\n  for (i = 0; default_include_directories[i] != 0; ++i)\n    {\n      int e;\n\n      EINTRLOOP (e, stat (default_include_directories[i], &stbuf));\n      if (e == 0 && S_ISDIR (stbuf.st_mode))\n        dirs[idx++] = default_include_directories[i];\n    }\n\n  dirs[idx] = 0;\n\n  /* Now compute the maximum length of any name in it. Also add each\n     dir to the .INCLUDE_DIRS variable.  */\n\n  max_incl_len = 0;\n  for (i = 0; i < idx; ++i)\n    {\n      unsigned int len = strlen (dirs[i]);\n      /* If dir name is written with a trailing slash, discard it.  */\n      if (dirs[i][len - 1] == '/')\n\t/* We can't just clobber a null in because it may have come from\n\t   a literal string and literal strings may not be writable.  */\n\tdirs[i] = savestring (dirs[i], len - 1);\n      if (len > max_incl_len)\n\tmax_incl_len = len;\n\n      /* Append to .INCLUDE_DIRS.   */\n      do_variable_definition (NILF, \".INCLUDE_DIRS\", dirs[i],\n                              o_default, f_append, 0);\n    }\n\n  include_directories = dirs;\n}\n\f\n/* Expand ~ or ~USER at the beginning of NAME.\n   Return a newly malloc'd string or 0.  */\n\nchar *\ntilde_expand (char *name)\n{\n#ifndef VMS\n  if (name[1] == '/' || name[1] == '\\0')\n    {\n      extern char *getenv ();\n      char *home_dir;\n      int is_variable;\n\n      {\n\t/* Turn off --warn-undefined-variables while we expand HOME.  */\n\tint save = warn_undefined_variables_flag;\n\twarn_undefined_variables_flag = 0;\n\n\thome_dir = allocated_variable_expand (\"$(HOME)\");\n\n\twarn_undefined_variables_flag = save;\n      }\n\n      is_variable = home_dir[0] != '\\0';\n      if (!is_variable)\n\t{\n\t  free (home_dir);\n\t  home_dir = getenv (\"HOME\");\n\t}\n#if !defined(_AMIGA) && !defined(WINDOWS32)\n      if (home_dir == 0 || home_dir[0] == '\\0')\n\t{\n\t  extern char *getlogin ();\n\t  char *logname = getlogin ();\n\t  home_dir = 0;\n\t  if (logname != 0)\n\t    {\n\t      struct passwd *p = getpwnam (logname);\n\t      if (p != 0)\n\t\thome_dir = p->pw_dir;\n\t    }\n\t}\n#endif /* !AMIGA && !WINDOWS32 */\n      if (home_dir != 0)\n\t{\n\t  char *new = concat (home_dir, \"\", name + 1);\n\t  if (is_variable)\n\t    free (home_dir);\n\t  return new;\n\t}\n    }\n#if !defined(_AMIGA) && !defined(WINDOWS32)\n  else\n    {\n      struct passwd *pwent;\n      char *userend = strchr (name + 1, '/');\n      if (userend != 0)\n\t*userend = '\\0';\n      pwent = getpwnam (name + 1);\n      if (pwent != 0)\n\t{\n\t  if (userend == 0)\n\t    return xstrdup (pwent->pw_dir);\n\t  else\n\t    return concat (pwent->pw_dir, \"/\", userend + 1);\n\t}\n      else if (userend != 0)\n\t*userend = '/';\n    }\n#endif /* !AMIGA && !WINDOWS32 */\n#endif /* !VMS */\n  return 0;\n}\n\n/* Given a chain of struct nameseq's describing a sequence of filenames,\n   in reverse of the intended order, return a new chain describing the\n   result of globbing the filenames.  The new chain is in forward order.\n   The links of the old chain are freed or used in the new chain.\n   Likewise for the names in the old chain.\n\n   SIZE is how big to construct chain elements.\n   This is useful if we want them actually to be other structures\n   that have room for additional info.  */\n\nstruct nameseq *\nmulti_glob (struct nameseq *chain, unsigned int size)\n{\n  extern void dir_setup_glob ();\n  register struct nameseq *new = 0;\n  register struct nameseq *old;\n  struct nameseq *nexto;\n  glob_t gl;\n\n  dir_setup_glob (&gl);\n\n  for (old = chain; old != 0; old = nexto)\n    {\n#ifndef NO_ARCHIVES\n      char *memname;\n#endif\n\n      nexto = old->next;\n\n      if (old->name[0] == '~')\n\t{\n\t  char *newname = tilde_expand (old->name);\n\t  if (newname != 0)\n\t    {\n\t      free (old->name);\n\t      old->name = newname;\n\t    }\n\t}\n\n#ifndef NO_ARCHIVES\n      if (ar_name (old->name))\n\t{\n\t  /* OLD->name is an archive member reference.\n\t     Replace it with the archive file name,\n\t     and save the member name in MEMNAME.\n\t     We will glob on the archive name and then\n\t     reattach MEMNAME later.  */\n\t  char *arname;\n\t  ar_parse_name (old->name, &arname, &memname);\n\t  free (old->name);\n\t  old->name = arname;\n\t}\n      else\n\tmemname = 0;\n#endif /* !NO_ARCHIVES */\n\n      switch (glob (old->name, GLOB_NOCHECK|GLOB_ALTDIRFUNC, NULL, &gl))\n\t{\n\tcase 0:\t\t\t/* Success.  */\n\t  {\n\t    register int i = gl.gl_pathc;\n\t    while (i-- > 0)\n\t      {\n#ifndef NO_ARCHIVES\n\t\tif (memname != 0)\n\t\t  {\n\t\t    /* Try to glob on MEMNAME within the archive.  */\n\t\t    struct nameseq *found\n\t\t      = ar_glob (gl.gl_pathv[i], memname, size);\n\t\t    if (found == 0)\n\t\t      {\n\t\t\t/* No matches.  Use MEMNAME as-is.  */\n\t\t\tunsigned int alen = strlen (gl.gl_pathv[i]);\n\t\t\tunsigned int mlen = strlen (memname);\n\t\t\tstruct nameseq *elt\n\t\t\t  = (struct nameseq *) xmalloc (size);\n                        if (size > sizeof (struct nameseq))\n                          bzero (((char *) elt) + sizeof (struct nameseq),\n                                 size - sizeof (struct nameseq));\n\t\t\telt->name = (char *) xmalloc (alen + 1 + mlen + 2);\n\t\t\tbcopy (gl.gl_pathv[i], elt->name, alen);\n\t\t\telt->name[alen] = '(';\n\t\t\tbcopy (memname, &elt->name[alen + 1], mlen);\n\t\t\telt->name[alen + 1 + mlen] = ')';\n\t\t\telt->name[alen + 1 + mlen + 1] = '\\0';\n\t\t\telt->next = new;\n\t\t\tnew = elt;\n\t\t      }\n\t\t    else\n\t\t      {\n\t\t\t/* Find the end of the FOUND chain.  */\n\t\t\tstruct nameseq *f = found;\n\t\t\twhile (f->next != 0)\n\t\t\t  f = f->next;\n\n\t\t\t/* Attach the chain being built to the end of the FOUND\n\t\t\t   chain, and make FOUND the new NEW chain.  */\n\t\t\tf->next = new;\n\t\t\tnew = found;\n\t\t      }\n\n\t\t    free (memname);\n\t\t  }\n\t\telse\n#endif /* !NO_ARCHIVES */\n\t\t  {\n\t\t    struct nameseq *elt = (struct nameseq *) xmalloc (size);\n                    if (size > sizeof (struct nameseq))\n                      bzero (((char *) elt) + sizeof (struct nameseq),\n                             size - sizeof (struct nameseq));\n\t\t    elt->name = xstrdup (gl.gl_pathv[i]);\n\t\t    elt->next = new;\n\t\t    new = elt;\n\t\t  }\n\t      }\n\t    globfree (&gl);\n\t    free (old->name);\n\t    free ((char *)old);\n\t    break;\n\t  }\n\n\tcase GLOB_NOSPACE:\n\t  fatal (NILF, _(\"virtual memory exhausted\"));\n\t  break;\n\n\tdefault:\n\t  old->next = new;\n\t  new = old;\n\t  break;\n\t}\n    }\n\n  return new;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/readme.vms",
    "content": "This is the VMS version of GNU Make, updated by Hartmut Becker\n\nChanges are based on GNU make 3.80. Latest changes are for OpenVMS/I64\nand new VMS CRTLs.\n\nThis version was tested on OpenVMS/I64 V8.2 (field test) with hp C\nX7.1-024 OpenVMS/Alpha V7.3-2 with Compaq C V6.5-001 and OpenVMS/VAX 7.1\nwith Compaq C V6.2-003 There are still some warning and informational\nmessage issued by the compilers.\n\nBuild instructions\nMake a 1st version\n       $ @makefile.com\n       $ rena make.exe 1st-make.exe\nUse the 1st version to generate a 2nd version\n       $ mc sys$disk:[]1st-make clean\n       $ mc sys$disk:[]1st-make\nVerify your 2nd version\n       $ rena make.exe 2nd-make.exe\n       $ mc sys$disk:[]2nd-make clean\n       $ mc sys$disk:[]2nd-make\n\nChanges:\n\n. In default.c define variable ARCH as IA64 for VMS on Itanium systems.\n\n. In makefile.vms avoid name collision for glob and globfree.\n\nIn newer version of the VMS CRTL there are glob and globfree implemented.\nCompiling and linking may result in\n\n  %ILINK-W-MULDEFLNKG, symbol DECC$GLOBFREE has subsequent linkage definition\n       in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1\n  %ILINK-W-MULDEF, symbol DECC$GLOBFREE multiply defined\n       in module DECC$SHR file SYS$COMMON:[SYSLIB]DECC$SHR.EXE;1\n\nlinker messages (and similar for DECC$GLOB). The messages just say, that\nglobfree is a known CRTL whose name was mapped by the compiler to\nDECC$GLOBFREE.  This is done in glob.c as well, so this name is defined\ntwice. One possible solution is to use the VMS versions of glob and\nglobfree. However, then the build environment needs to figure out if\nthere is a new CRTL supporting these or not. This adds complexity. Even\nmore, these functions return VMS file specifications, which is not\nexpected by the other make sources. There is a switch at run time (a VMS\nlogical DECC$GLOB_UNIX_STYLE), which can be set to get Unix style\nnames. This may conflict with other software. The recommended solution\nfor this is to set this switch just prior to calling main: in an\ninitialization routine. This adds more complexity and more VMS specific\ncode. It is easier to tell the compiler NOT to map the routine names\nwith a simple change in makefile.vms.\n\nSome notes on case sensitive names in rules and on the disk. In the VMS\ntemplate for CONFIG.H case sensitive rules can be enabled with defining\nWANT_CASE_SENSITIVE_TARGETS. For recent version of VMS there is a case\nsensitive file system: ODS5. To make use of that, additionally un-defining\nthe HAVE_CASE_INSENSITIVE_FS is required. As these are C macros, different\nversions of make need to be built to have any case sensitivity for VMS\nworking. Unfortunately, for ODS5 disks that's not all.\n\n- Usually DCL upcases command line tokens (except strings) and usually the\n  file system is case blind (similar to how Windows systems work)\n\t$ set proc/parse=extended/case=sensitive\n  preserves lower and UPPER on the command line and (for this process and all\n  sub-processes) enables case sensitivity in the file system\n\n- Usually the CRTL tries to reverse what DCL did with command line tokens, it\n  lowercases all tokens (except strings)\n\t$ define DECC$ARGV_PARSE_STYLE enable\n  passes (the now preserved) lower and UPPER from the command line to main()\n\n- Usually the CRTL upcases the arguments to open() and friends\n\t$ define DECC$EFS_CASE_PRESERVE enable\n  preserves the names as is.\n\nIt is important to know that not all VMS tools are ready for case sensitivity.\nWith this setup some tools may not work as expected. The setup should not\nblindly be applied for all users in default login procedures.\n\nExample? The poor coding gives a compiler message, showing that there are\ndifferent files:\n\n$ dir\n\nDirectory ODS5DISK[HB]\n\nA.c;1               B.c;1               c.c;1               X.c;1\nx.c;1\n\nTotal of 5 files.\n$ ods5make x.obj\ncc    /obj=x.obj x.c\n\nfoo(){lowercase_x();}\n......^\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"lowercase_x\" is implicitly declared as a function.\nat line number 1 in file ODS5DISK[HB]x.c;1\n$ mc SYS$SYSDEVICE:[HARTMUT.MAKE_3_80P]ods5make X.obj\ncc    /obj=X.obj X.c\n\nfoo() {UPPERCASE_X();}\n.......^\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"UPPERCASE_X\" is implicitly declared as a function.\nat line number 1 in file ODS5DISK[HB]X.c;1\n$ dir\n\nDirectory ODS5DISK[HB]\n\nA.c;1               B.c;1               c.c;1               X.c;1\nx.c;1               X.obj;1             x.obj;1\n\nTotal of 7 files.\n$\n\f\nThis is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.\n\nIt is based on the specific version 3.77k and on 3.78.1. 3.77k was done\nby Klaus Kmpf <kkaempf@rmi.de>, the code was based on the VMS port of\nGNU Make 3.60 by Mike Moretti.\n\nIt was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and\ntested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different\nversions of DECC were used. VAXC was tried: it fails; but it doesn't\nseem worth to get it working. There are still some PTRMISMATCH warnings\nduring the compile. Although perl is working on VMS the test scripts\ndon't work. The function $shell is still missing.\n\nThere is a known bug in some of the VMS CRTLs. It is in the shipped\nversions of VMS V7.2 and V7.2-1 and in the currently (October 1999)\navailable ECOs for VMS V7.1 and newer versions. It is fixed in versions\nshipped with newer VMS versions and all ECO kits after October 1999. It\nonly shows up during the daylight saving time period (DST): stat()\nreturns a modification time 1 hour ahead. This results in GNU make\nwarning messages. For a just created source you will see:\n\n $ gmake x.exe\n gmake.exe;1: *** Warning: File `x.c' has modification time in the future (940582863 > 940579269)\n cc    /obj=x.obj x.c\n link  x.obj    /exe=x.exe\n gmake.exe;1: *** Warning:  Clock skew detected.  Your build may be incomplete.\n\n\nNew in 3.78.1:\n\nFix a problem with automatically remaking makefiles. GNU make uses an\nexecve to restart itself after a successful remake of the makefile. On\nUNIX systems execve replaces the running program with a new one and\nresets all signal handling to the default. On VMS execve creates a child\nprocess, signal and exit handlers of the parent are still active, and,\nunfortunately, corrupt the exit code from the child. Fix in job.c:\nignore SIGCHLD.\n\nAdded some switches to reflect latest features of DECC. Modifications in\nmakefile.vms.\n\nSet some definitions to reflect latest features of DECC. Modifications in\nconfig.h-vms (which is copied to config.h).\n\nAdded extern strcmpi declaration to avoid 'implicitly declared' messages.\nModification in make.h.\n\nDefault rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/\nCompaq c/c++ compilers. Modifications in default.c.\n\nUsage of opendir() and friends, suppress file version. Modifications in dir.c.\n\nAdded VMS specific code to handle ctrl+c and ctrl+y to abort make.\nModifications in job.c.\n\nAdded support to have case sensitive targets and dependencies but to\nstill use case blind file names. This is especially useful for Java\nmakefiles on VMS:\n\n\t.SUFFIXES :\n\t.SUFFIXES :\t.class .java\n\t.java.class :\n\t\tjavac \"$<\n\tHelloWorld.class :      HelloWorld.java\n\nA new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.\nIt needs to be enabled to get this feature; default is disabled.  The\nmacro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.\nModifications in file.c and config.h-vms.\n\nBootstrap make to start building make is still makefile.com, but make\nneeds to be re-made with a make to make a correct version: ignore all\npossible warnings, delete all objects, rename make.exe to a different\nname and run it.\n\nMade some minor modifications to the bootstrap build makefile.com.\n\f\nThis is the VMS port of GNU Make.\n\nIt is based on the VMS port of GNU Make 3.60 by Mike Moretti.\n\nThis port was done by Klaus Kmpf <kkaempf@rmi.de>\n\nThere is first-level support available from proGIS Software, Germany.\nVisit their web-site at http://www.progis.de to get information\nabout other vms software and forthcoming updates to gnu make.\n\nNew for 3.77:\n\n/bin/sh style I/O redirection is supported. You can now write lines like\n\tmcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt\n\nMakefile variables are looked up in the current environment. You can set\nsymbols or logicals in DCL and evaluate them in the Makefile via\n$(<name-of-symbol-or-logical>).  Variables defined in the Makefile\noverride VMS symbols/logicals !\n\nFunctions for file names are working now. See the GNU Make manual for\n$(dir ...)  and $(wildcard ...).  Unix-style and VMS-style names are\nsupported as arguments.\n\nThe default rules are set up for GNU C. Building an executable from a\nsingle source file is as easy as 'make file.exe'.\n\nThe variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for\ndifferent VMS systems can now be written by checking $(ARCH) as in\n  ifeq ($(ARCH),ALPHA)\n    $(ECHO) \"On the Alpha\"\n  else\n    $(ECHO) \"On the VAX\"\n  endif\n\nCommand lines of excessive length are correctly broken and written to a\nbatch file in sys$scratch for later execution. There's no limit to the\nlengths of commands (and no need for .opt files :-) any more.\n\nEmpty commands are handled correctly and don't end in a new DCL process.\n\n\nNew for 3.76:\n\nJohn W. Eaton has updated the VMS port to support libraries and VPATH.\n\n\nTo build Make, simply type @makefile.  This should compile all the\nnecessary files and link Make.  There is also a file called\nmakefile.vms.  If you already have GNU Make built you can just use\nMake with this makefile to rebuild.\n\nHere are some notes about GNU Make for VMS:\n\nThe cd command is supported if it's called as $(CD). This invokes\nthe 'builtin_cd' command which changes the directory.\nCalling 'set def' doesn't do the trick, since a sub-shell is\nspawned for this command, the directory is changed *in this sub-shell*\nand the sub-shell ends.\n\nLibraries are not supported. They were in GNU Make 3.60 but somehow I\ndidn't care porting the code. If there is enough interest, I'll do it at\nsome later time.\n\nThe variable $^ separates files with commas instead of spaces (It's the\nnatural thing to do for VMS).\n\nSee defaults.c for VMS default suffixes and my definitions for default\nrules and variables.\n\nThe shell function is not implemented yet.\n\nLoad average routines haven't been implemented for VMS yet.\n\nThe default include directory for including other makefiles is\nSYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use\nSYS$LIBRARY: instead; maybe it wouldn't work that way).\n\nThe default makefiles make looks for are: makefile.vms, gnumakefile,\nmakefile., and gnumakefile. .\n\nThe stat() function and handling of time stamps in VMS is broken, so I\nreplaced it with a hack in vmsfunctions.c. I will provide a full rewrite\nsomewhere in the future. Be warned, the time resolution inside make is\nless than what vms provides. This might be a problem on the faster Alphas.\n\nYou can use a : in a filename only if you preceed it with a backslash ('\\').\nE.g.- hobbes\\:[bogas.files]\n\nMake ignores success, informational, or warning errors (-S-, -I-, or\n-W-).  But it will stop on -E- and -F- errors. (unless you do something\nto override this in your makefile, or whatever).\n\nRemote stuff isn't implemented yet.\n\nMultiple line DCL commands, such as \"if\" statements, must be put inside\ncommand files.  You can run a command file by using \\@.\n\n\nVMS changes made for 3.74.3\n\nLots of default settings are adapted for VMS. See default.c.\n\nLong command lines are now converted to command files.\n\nComma (',') as a separator is now allowed. See makefile.vms for an example.\n\n-------------------------------------------------------------------------------\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/remake.c",
    "content": "/* Basic dependency engine for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"dep.h\"\n#include \"variable.h\"\n#include \"debug.h\"\n\n#include <assert.h>\n\n#ifdef HAVE_FCNTL_H\n#include <fcntl.h>\n#else\n#include <sys/file.h>\n#endif\n\n#ifdef VMS\n#include <starlet.h>\n#endif\n#ifdef WINDOWS32\n#include <io.h>\n#endif\n\nextern int try_implicit_rule PARAMS ((struct file *file, unsigned int depth));\n\n\n/* The test for circular dependencies is based on the 'updating' bit in\n   `struct file'.  However, double colon targets have seperate `struct\n   file's; make sure we always use the base of the double colon chain. */\n\n#define start_updating(_f)  (((_f)->double_colon ? (_f)->double_colon : (_f))\\\n                             ->updating = 1)\n#define finish_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\\\n                             ->updating = 0)\n#define is_updating(_f)     (((_f)->double_colon ? (_f)->double_colon : (_f))\\\n                             ->updating)\n\n\n/* Incremented when a command is started (under -n, when one would be).  */\nunsigned int commands_started = 0;\n\n/* Current value for pruning the scan of the goal chain (toggle 0/1).  */\nstatic unsigned int considered;\n\nstatic int update_file PARAMS ((struct file *file, unsigned int depth));\nstatic int update_file_1 PARAMS ((struct file *file, unsigned int depth));\nstatic int check_dep PARAMS ((struct file *file, unsigned int depth, FILE_TIMESTAMP this_mtime, int *must_make_ptr));\nstatic int touch_file PARAMS ((struct file *file));\nstatic void remake_file PARAMS ((struct file *file));\nstatic FILE_TIMESTAMP name_mtime PARAMS ((char *name));\nstatic int library_search PARAMS ((char **lib, FILE_TIMESTAMP *mtime_ptr));\n\n\f\n/* Remake all the goals in the `struct dep' chain GOALS.  Return -1 if nothing\n   was done, 0 if all goals were updated successfully, or 1 if a goal failed.\n\n   If rebuilding_makefiles is nonzero, these goals are makefiles, so -t, -q,\n   and -n should be disabled for them unless they were also command-line\n   targets, and we should only make one goal at a time and return as soon as\n   one goal whose `changed' member is nonzero is successfully made.  */\n\nint\nupdate_goal_chain (struct dep *goals)\n{\n  int t = touch_flag, q = question_flag, n = just_print_flag;\n  unsigned int j = job_slots;\n  int status = -1;\n\n#define\tMTIME(file) (rebuilding_makefiles ? file_mtime_no_search (file) \\\n\t\t     : file_mtime (file))\n\n  /* Duplicate the chain so we can remove things from it.  */\n\n  goals = copy_dep_chain (goals);\n\n  {\n    /* Clear the `changed' flag of each goal in the chain.\n       We will use the flag below to notice when any commands\n       have actually been run for a target.  When no commands\n       have been run, we give an \"up to date\" diagnostic.  */\n\n    struct dep *g;\n    for (g = goals; g != 0; g = g->next)\n      g->changed = 0;\n  }\n\n  /* All files start with the considered bit 0, so the global value is 1.  */\n  considered = 1;\n\n  /* Update all the goals until they are all finished.  */\n\n  while (goals != 0)\n    {\n      register struct dep *g, *lastgoal;\n\n      /* Start jobs that are waiting for the load to go down.  */\n\n      start_waiting_jobs ();\n\n      /* Wait for a child to die.  */\n\n      reap_children (1, 0);\n\n      lastgoal = 0;\n      g = goals;\n      while (g != 0)\n\t{\n\t  /* Iterate over all double-colon entries for this file.  */\n\t  struct file *file;\n\t  int stop = 0, any_not_updated = 0;\n\n\t  for (file = g->file->double_colon ? g->file->double_colon : g->file;\n\t       file != NULL;\n\t       file = file->prev)\n\t    {\n\t      unsigned int ocommands_started;\n\t      int x;\n\t      check_renamed (file);\n\t      if (rebuilding_makefiles)\n\t\t{\n\t\t  if (file->cmd_target)\n\t\t    {\n\t\t      touch_flag = t;\n\t\t      question_flag = q;\n\t\t      just_print_flag = n;\n\t\t    }\n\t\t  else\n\t\t    touch_flag = question_flag = just_print_flag = 0;\n\t\t}\n\n\t      /* Save the old value of `commands_started' so we can compare\n\t\t later.  It will be incremented when any commands are\n\t\t actually run.  */\n\t      ocommands_started = commands_started;\n\n\t      x = update_file (file, rebuilding_makefiles ? 1 : 0);\n\t      check_renamed (file);\n\n\t      /* Set the goal's `changed' flag if any commands were started\n\t\t by calling update_file above.  We check this flag below to\n\t\t decide when to give an \"up to date\" diagnostic.  */\n              if (commands_started > ocommands_started)\n                g->changed = 1;\n\n              /* If we updated a file and STATUS was not already 1, set it to\n                 1 if updating failed, or to 0 if updating succeeded.  Leave\n                 STATUS as it is if no updating was done.  */\n\n\t      stop = 0;\n\t      if ((x != 0 || file->updated) && status < 1)\n                {\n                  if (file->update_status != 0)\n                    {\n                      /* Updating failed, or -q triggered.  The STATUS value\n                         tells our caller which.  */\n                      status = file->update_status;\n                      /* If -q just triggered, stop immediately.  It doesn't\n                         matter how much more we run, since we already know\n                         the answer to return.  */\n                      stop = (question_flag && !keep_going_flag\n                              && !rebuilding_makefiles);\n                    }\n                  else\n                    {\n                      FILE_TIMESTAMP mtime = MTIME (file);\n                      check_renamed (file);\n\n                      if (file->updated && g->changed &&\n                           mtime != file->mtime_before_update)\n                        {\n                          /* Updating was done.  If this is a makefile and\n                             just_print_flag or question_flag is set (meaning\n                             -n or -q was given and this file was specified\n                             as a command-line target), don't change STATUS.\n                             If STATUS is changed, we will get re-exec'd, and\n                             enter an infinite loop.  */\n                          if (!rebuilding_makefiles\n                              || (!just_print_flag && !question_flag))\n                            status = 0;\n                          if (rebuilding_makefiles && file->dontcare)\n                            /* This is a default makefile; stop remaking.  */\n                            stop = 1;\n                        }\n                    }\n                }\n\n\t      /* Keep track if any double-colon entry is not finished.\n                 When they are all finished, the goal is finished.  */\n\t      any_not_updated |= !file->updated;\n\n\t      if (stop)\n\t\tbreak;\n\t    }\n\n\t  /* Reset FILE since it is null at the end of the loop.  */\n\t  file = g->file;\n\n\t  if (stop || !any_not_updated)\n\t    {\n\t      /* If we have found nothing whatever to do for the goal,\n\t\t print a message saying nothing needs doing.  */\n\n\t      if (!rebuilding_makefiles\n\t\t  /* If the update_status is zero, we updated successfully\n\t\t     or not at all.  G->changed will have been set above if\n\t\t     any commands were actually started for this goal.  */\n\t\t  && file->update_status == 0 && !g->changed\n\t\t  /* Never give a message under -s or -q.  */\n\t\t  && !silent_flag && !question_flag)\n\t\tmessage (1, ((file->phony || file->cmds == 0)\n\t\t\t     ? _(\"Nothing to be done for `%s'.\")\n\t\t\t     : _(\"`%s' is up to date.\")),\n\t\t\t file->name);\n\n\t      /* This goal is finished.  Remove it from the chain.  */\n\t      if (lastgoal == 0)\n\t\tgoals = g->next;\n\t      else\n\t\tlastgoal->next = g->next;\n\n\t      /* Free the storage.  */\n\t      free ((char *) g);\n\n\t      g = lastgoal == 0 ? goals : lastgoal->next;\n\n\t      if (stop)\n\t\tbreak;\n\t    }\n\t  else\n\t    {\n\t      lastgoal = g;\n\t      g = g->next;\n\t    }\n\t}\n\n      /* If we reached the end of the dependency graph toggle the considered\n         flag for the next pass.  */\n      if (g == 0)\n        considered = !considered;\n    }\n\n  if (rebuilding_makefiles)\n    {\n      touch_flag = t;\n      question_flag = q;\n      just_print_flag = n;\n      job_slots = j;\n    }\n\n  return status;\n}\n\f\n/* If FILE is not up to date, execute the commands for it.\n   Return 0 if successful, 1 if unsuccessful;\n   but with some flag settings, just call `exit' if unsuccessful.\n\n   DEPTH is the depth in recursions of this function.\n   We increment it during the consideration of our dependencies,\n   then decrement it again after finding out whether this file\n   is out of date.\n\n   If there are multiple double-colon entries for FILE,\n   each is considered in turn.  */\n\nstatic int\nupdate_file (struct file *file, unsigned int depth)\n{\n  register int status = 0;\n  register struct file *f;\n\n  f = file->double_colon ? file->double_colon : file;\n\n  /* Prune the dependency graph: if we've already been here on _this_\n     pass through the dependency graph, we don't have to go any further.\n     We won't reap_children until we start the next pass, so no state\n     change is possible below here until then.  */\n  if (f->considered == considered)\n    {\n      DBF (DB_VERBOSE, _(\"Pruning file `%s'.\\n\"));\n      return f->command_state == cs_finished ? f->update_status : 0;\n    }\n\n  /* This loop runs until we start commands for a double colon rule, or until\n     the chain is exhausted. */\n  for (; f != 0; f = f->prev)\n    {\n      f->considered = considered;\n\n      status |= update_file_1 (f, depth);\n      check_renamed (f);\n\n      /* Clean up any alloca() used during the update.  */\n      alloca (0);\n\n      /* If we got an error, don't bother with double_colon etc.  */\n      if (status != 0 && !keep_going_flag)\n\treturn status;\n\n      if (f->command_state == cs_running\n          || f->command_state == cs_deps_running)\n        {\n\t  /* Don't run the other :: rules for this\n\t     file until this rule is finished.  */\n          status = 0;\n          break;\n        }\n    }\n\n  /* Process the remaining rules in the double colon chain so they're marked\n     considered.  Start their prerequisites, too.  */\n  if (file->double_colon)\n    for (; f != 0 ; f = f->prev)\n      {\n        struct dep *d;\n\n        f->considered = considered;\n\n        for (d = f->deps; d != 0; d = d->next)\n          status |= update_file (d->file, depth + 1);\n      }\n\n  return status;\n}\n\f\n/* Show a message stating the target failed to build.  */\n\nstatic void\ncomplain (const struct file *file)\n{\n  const char *msg_noparent\n    = _(\"%sNo rule to make target `%s'%s\");\n  const char *msg_parent\n    = _(\"%sNo rule to make target `%s', needed by `%s'%s\");\n\n  if (!keep_going_flag)\n    {\n      if (file->parent == 0)\n        fatal (NILF, msg_noparent, \"\", file->name, \"\");\n\n      fatal (NILF, msg_parent, \"\", file->name, file->parent->name, \"\");\n    }\n\n  if (file->parent == 0)\n    error (NILF, msg_noparent, \"*** \", file->name, \".\");\n  else\n    error (NILF, msg_parent, \"*** \", file->name, file->parent->name, \".\");\n}\n\n/* Consider a single `struct file' and update it as appropriate.  */\n\nstatic int\nupdate_file_1 (struct file *file, unsigned int depth)\n{\n  register FILE_TIMESTAMP this_mtime;\n  int noexist, must_make, deps_changed;\n  int dep_status = 0;\n  register struct dep *d, *lastd;\n  int running = 0;\n\n  DBF (DB_VERBOSE, _(\"Considering target file `%s'.\\n\"));\n\n  if (file->updated)\n    {\n      if (file->update_status > 0)\n\t{\n\t  DBF (DB_VERBOSE,\n               _(\"Recently tried and failed to update file `%s'.\\n\"));\n\n          /* If the file we tried to make is marked dontcare then no message\n             was printed about it when it failed during the makefile rebuild.\n             If we're trying to build it again in the normal rebuild, print a\n             message now.  */\n          if (file->dontcare && !rebuilding_makefiles)\n            {\n              file->dontcare = 0;\n              complain (file);\n            }\n\n\t  return file->update_status;\n\t}\n\n      DBF (DB_VERBOSE, _(\"File `%s' was considered already.\\n\"));\n      return 0;\n    }\n\n  switch (file->command_state)\n    {\n    case cs_not_started:\n    case cs_deps_running:\n      break;\n    case cs_running:\n      DBF (DB_VERBOSE, _(\"Still updating file `%s'.\\n\"));\n      return 0;\n    case cs_finished:\n      DBF (DB_VERBOSE, _(\"Finished updating file `%s'.\\n\"));\n      return file->update_status;\n    default:\n      abort ();\n    }\n\n  ++depth;\n\n  /* Notice recursive update of the same file.  */\n  start_updating (file);\n\n  /* Looking at the file's modtime beforehand allows the possibility\n     that its name may be changed by a VPATH search, and thus it may\n     not need an implicit rule.  If this were not done, the file\n     might get implicit commands that apply to its initial name, only\n     to have that name replaced with another found by VPATH search.  */\n\n  this_mtime = file_mtime (file);\n  check_renamed (file);\n  noexist = this_mtime == NONEXISTENT_MTIME;\n  if (noexist)\n    DBF (DB_BASIC, _(\"File `%s' does not exist.\\n\"));\n  else if (ORDINARY_MTIME_MIN <= this_mtime && this_mtime <= ORDINARY_MTIME_MAX\n\t   && file->low_resolution_time)\n    {\n      /* Avoid spurious rebuilds due to low resolution time stamps.  */\n      int ns = FILE_TIMESTAMP_NS (this_mtime);\n      if (ns != 0)\n\terror (NILF, _(\"*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp\"),\n\t       file->name);\n      this_mtime += FILE_TIMESTAMPS_PER_S - 1 - ns;\n    }\n\n  must_make = noexist;\n\n  /* If file was specified as a target with no commands,\n     come up with some default commands.  */\n\n  if (!file->phony && file->cmds == 0 && !file->tried_implicit)\n    {\n      if (try_implicit_rule (file, depth))\n\tDBF (DB_IMPLICIT, _(\"Found an implicit rule for `%s'.\\n\"));\n      else\n\tDBF (DB_IMPLICIT, _(\"No implicit rule found for `%s'.\\n\"));\n      file->tried_implicit = 1;\n    }\n  if (file->cmds == 0 && !file->is_target\n      && default_file != 0 && default_file->cmds != 0)\n    {\n      DBF (DB_IMPLICIT, _(\"Using default commands for `%s'.\\n\"));\n      file->cmds = default_file->cmds;\n    }\n\n  /* Update all non-intermediate files we depend on, if necessary,\n     and see whether any of them is more recent than this file.  */\n\n  lastd = 0;\n  d = file->deps;\n  while (d != 0)\n    {\n      FILE_TIMESTAMP mtime;\n      int maybe_make;\n      int dontcare = 0;\n\n      check_renamed (d->file);\n\n      mtime = file_mtime (d->file);\n      check_renamed (d->file);\n\n      if (is_updating (d->file))\n\t{\n\t  error (NILF, _(\"Circular %s <- %s dependency dropped.\"),\n\t\t file->name, d->file->name);\n\t  /* We cannot free D here because our the caller will still have\n\t     a reference to it when we were called recursively via\n\t     check_dep below.  */\n\t  if (lastd == 0)\n\t    file->deps = d->next;\n\t  else\n\t    lastd->next = d->next;\n\t  d = d->next;\n\t  continue;\n\t}\n\n      d->file->parent = file;\n      maybe_make = must_make;\n\n      /* Inherit dontcare flag from our parent. */\n      if (rebuilding_makefiles)\n        {\n          dontcare = d->file->dontcare;\n          d->file->dontcare = file->dontcare;\n        }\n\n\n      dep_status |= check_dep (d->file, depth, this_mtime, &maybe_make);\n\n      /* Restore original dontcare flag. */\n      if (rebuilding_makefiles)\n        d->file->dontcare = dontcare;\n\n      if (! d->ignore_mtime)\n        must_make = maybe_make;\n\n      check_renamed (d->file);\n\n      {\n\tregister struct file *f = d->file;\n\tif (f->double_colon)\n\t  f = f->double_colon;\n\tdo\n\t  {\n\t    running |= (f->command_state == cs_running\n\t\t\t|| f->command_state == cs_deps_running);\n\t    f = f->prev;\n\t  }\n\twhile (f != 0);\n      }\n\n      if (dep_status != 0 && !keep_going_flag)\n\tbreak;\n\n      if (!running)\n        /* The prereq is considered changed if the timestamp has changed while\n           it was built, OR it doesn't exist.\n\t   This causes the Linux kernel build to break.  We'll defer this\n\t   fix until GNU make 3.82 to give them time to update.  */\n\td->changed = ((file_mtime (d->file) != mtime)\n                      /* || (mtime == NONEXISTENT_MTIME) */);\n\n      lastd = d;\n      d = d->next;\n    }\n\n  /* Now we know whether this target needs updating.\n     If it does, update all the intermediate files we depend on.  */\n\n  if (must_make || always_make_flag)\n    {\n      for (d = file->deps; d != 0; d = d->next)\n\tif (d->file->intermediate)\n\t  {\n            int dontcare = 0;\n\n\t    FILE_TIMESTAMP mtime = file_mtime (d->file);\n\t    check_renamed (d->file);\n\t    d->file->parent = file;\n\n            /* Inherit dontcare flag from our parent. */\n            if (rebuilding_makefiles)\n              {\n                dontcare = d->file->dontcare;\n                d->file->dontcare = file->dontcare;\n              }\n\n\n\t    dep_status |= update_file (d->file, depth);\n\n            /* Restore original dontcare flag. */\n            if (rebuilding_makefiles)\n              d->file->dontcare = dontcare;\n\n\t    check_renamed (d->file);\n\n\t    {\n\t      register struct file *f = d->file;\n\t      if (f->double_colon)\n\t\tf = f->double_colon;\n\t      do\n\t\t{\n\t\t  running |= (f->command_state == cs_running\n\t\t\t      || f->command_state == cs_deps_running);\n\t\t  f = f->prev;\n\t\t}\n\t      while (f != 0);\n\t    }\n\n\t    if (dep_status != 0 && !keep_going_flag)\n\t      break;\n\n\t    if (!running)\n\t      d->changed = ((file->phony && file->cmds != 0)\n\t\t\t    || file_mtime (d->file) != mtime);\n\t  }\n    }\n\n  finish_updating (file);\n\n  DBF (DB_VERBOSE, _(\"Finished prerequisites of target file `%s'.\\n\"));\n\n  if (running)\n    {\n      set_command_state (file, cs_deps_running);\n      --depth;\n      DBF (DB_VERBOSE, _(\"The prerequisites of `%s' are being made.\\n\"));\n      return 0;\n    }\n\n  /* If any dependency failed, give up now.  */\n\n  if (dep_status != 0)\n    {\n      file->update_status = dep_status;\n      notice_finished_file (file);\n\n      --depth;\n\n      DBF (DB_VERBOSE, _(\"Giving up on target file `%s'.\\n\"));\n\n      if (depth == 0 && keep_going_flag\n\t  && !just_print_flag && !question_flag)\n\terror (NILF,\n               _(\"Target `%s' not remade because of errors.\"), file->name);\n\n      return dep_status;\n    }\n\n  if (file->command_state == cs_deps_running)\n    /* The commands for some deps were running on the last iteration, but\n       they have finished now.  Reset the command_state to not_started to\n       simplify later bookkeeping.  It is important that we do this only\n       when the prior state was cs_deps_running, because that prior state\n       was definitely propagated to FILE's also_make's by set_command_state\n       (called above), but in another state an also_make may have\n       independently changed to finished state, and we would confuse that\n       file's bookkeeping (updated, but not_started is bogus state).  */\n    set_command_state (file, cs_not_started);\n\n  /* Now record which prerequisites are more\n     recent than this file, so we can define $?.  */\n\n  deps_changed = 0;\n  for (d = file->deps; d != 0; d = d->next)\n    {\n      FILE_TIMESTAMP d_mtime = file_mtime (d->file);\n      check_renamed (d->file);\n\n      if (! d->ignore_mtime)\n        {\n#if 1\n          /* %%% In version 4, remove this code completely to\n\t   implement not remaking deps if their deps are newer\n\t   than their parents.  */\n          if (d_mtime == NONEXISTENT_MTIME && !d->file->intermediate)\n            /* We must remake if this dep does not\n               exist and is not intermediate.  */\n            must_make = 1;\n#endif\n\n          /* Set DEPS_CHANGED if this dep actually changed.  */\n          deps_changed |= d->changed;\n        }\n\n      /* Set D->changed if either this dep actually changed,\n\t or its dependent, FILE, is older or does not exist.  */\n      d->changed |= noexist || d_mtime > this_mtime;\n\n      if (!noexist && ISDB (DB_BASIC|DB_VERBOSE))\n\t{\n          const char *fmt = 0;\n\n          if (d->ignore_mtime)\n            {\n              if (ISDB (DB_VERBOSE))\n                fmt = _(\"Prerequisite `%s' is order-only for target `%s'.\\n\");\n            }\n          else if (d_mtime == NONEXISTENT_MTIME)\n            {\n              if (ISDB (DB_BASIC))\n                fmt = _(\"Prerequisite `%s' of target `%s' does not exist.\\n\");\n            }\n\t  else if (d->changed)\n            {\n              if (ISDB (DB_BASIC))\n                fmt = _(\"Prerequisite `%s' is newer than target `%s'.\\n\");\n            }\n          else if (ISDB (DB_VERBOSE))\n            fmt = _(\"Prerequisite `%s' is older than target `%s'.\\n\");\n\n          if (fmt)\n            {\n              print_spaces (depth);\n              printf (fmt, dep_name (d), file->name);\n              fflush (stdout);\n            }\n\t}\n    }\n\n  /* Here depth returns to the value it had when we were called.  */\n  depth--;\n\n  if (file->double_colon && file->deps == 0)\n    {\n      must_make = 1;\n      DBF (DB_BASIC,\n           _(\"Target `%s' is double-colon and has no prerequisites.\\n\"));\n    }\n  else if (!noexist && file->is_target && !deps_changed && file->cmds == 0\n           && !always_make_flag)\n    {\n      must_make = 0;\n      DBF (DB_VERBOSE,\n           _(\"No commands for `%s' and no prerequisites actually changed.\\n\"));\n    }\n  else if (!must_make && file->cmds != 0 && always_make_flag)\n    {\n      must_make = 1;\n      DBF (DB_VERBOSE, _(\"Making `%s' due to always-make flag.\\n\"));\n    }\n\n  if (!must_make)\n    {\n      if (ISDB (DB_VERBOSE))\n        {\n          print_spaces (depth);\n          printf (_(\"No need to remake target `%s'\"), file->name);\n          if (!streq (file->name, file->hname))\n              printf (_(\"; using VPATH name `%s'\"), file->hname);\n          puts (\".\");\n          fflush (stdout);\n        }\n\n      notice_finished_file (file);\n\n      /* Since we don't need to remake the file, convert it to use the\n         VPATH filename if we found one.  hfile will be either the\n         local name if no VPATH or the VPATH name if one was found.  */\n\n      while (file)\n        {\n          file->name = file->hname;\n          file = file->prev;\n        }\n\n      return 0;\n    }\n\n  DBF (DB_BASIC, _(\"Must remake target `%s'.\\n\"));\n\n  /* It needs to be remade.  If it's VPATH and not reset via GPATH, toss the\n     VPATH.  */\n  if (!streq(file->name, file->hname))\n    {\n      DB (DB_BASIC, (_(\"  Ignoring VPATH name `%s'.\\n\"), file->hname));\n      file->ignore_vpath = 1;\n    }\n\n  /* Now, take appropriate actions to remake the file.  */\n  remake_file (file);\n\n  if (file->command_state != cs_finished)\n    {\n      DBF (DB_VERBOSE, _(\"Commands of `%s' are being run.\\n\"));\n      return 0;\n    }\n\n  switch (file->update_status)\n    {\n    case 2:\n      DBF (DB_BASIC, _(\"Failed to remake target file `%s'.\\n\"));\n      break;\n    case 0:\n      DBF (DB_BASIC, _(\"Successfully remade target file `%s'.\\n\"));\n      break;\n    case 1:\n      DBF (DB_BASIC, _(\"Target file `%s' needs remade under -q.\\n\"));\n      break;\n    default:\n      assert (file->update_status >= 0 && file->update_status <= 2);\n      break;\n    }\n\n  file->updated = 1;\n  return file->update_status;\n}\n\f\n/* Set FILE's `updated' flag and re-check its mtime and the mtime's of all\n   files listed in its `also_make' member.  Under -t, this function also\n   touches FILE.\n\n   On return, FILE->update_status will no longer be -1 if it was.  */\n\nvoid\nnotice_finished_file (struct file *file)\n{\n  struct dep *d;\n  int ran = file->command_state == cs_running;\n  int touched = 0;\n\n  file->command_state = cs_finished;\n  file->updated = 1;\n\n  if (touch_flag\n      /* The update status will be:\n\t \t-1\tif this target was not remade;\n\t\t0\tif 0 or more commands (+ or ${MAKE}) were run and won;\n\t\t1\tif some commands were run and lost.\n\t We touch the target if it has commands which either were not run\n\t or won when they ran (i.e. status is 0).  */\n      && file->update_status == 0)\n    {\n      if (file->cmds != 0 && file->cmds->any_recurse)\n\t{\n\t  /* If all the command lines were recursive,\n\t     we don't want to do the touching.  */\n\t  unsigned int i;\n\t  for (i = 0; i < file->cmds->ncommand_lines; ++i)\n\t    if (!(file->cmds->lines_flags[i] & COMMANDS_RECURSE))\n\t      goto have_nonrecursing;\n\t}\n      else\n\t{\n\thave_nonrecursing:\n\t  if (file->phony)\n\t    file->update_status = 0;\n          /* According to POSIX, -t doesn't affect targets with no cmds.  */\n\t  else if (file->cmds != 0)\n            {\n              /* Should set file's modification date and do nothing else.  */\n              file->update_status = touch_file (file);\n\n              /* Pretend we ran a real touch command, to suppress the\n                 \"`foo' is up to date\" message.  */\n              commands_started++;\n\n              /* Request for the timestamp to be updated (and distributed\n                 to the double-colon entries). Simply setting ran=1 would\n                 almost have done the trick, but messes up with the also_make\n                 updating logic below.  */\n              touched = 1;\n            }\n\t}\n    }\n\n  if (file->mtime_before_update == UNKNOWN_MTIME)\n    file->mtime_before_update = file->last_mtime;\n\n  if ((ran && !file->phony) || touched)\n    {\n      int i = 0;\n\n      /* If -n, -t, or -q and all the commands are recursive, we ran them so\n         really check the target's mtime again.  Otherwise, assume the target\n         would have been updated. */\n\n      if (question_flag || just_print_flag || touch_flag)\n        {\n          for (i = file->cmds->ncommand_lines; i > 0; --i)\n            if (! (file->cmds->lines_flags[i-1] & COMMANDS_RECURSE))\n              break;\n        }\n\n      /* If there were no commands at all, it's always new. */\n\n      else if (file->is_target && file->cmds == 0)\n\ti = 1;\n\n      file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME;\n    }\n\n  if (file->double_colon)\n    {\n      /* If this is a double colon rule and it is the last one to be\n         updated, propagate the change of modification time to all the\n         double-colon entries for this file.\n\n         We do it on the last update because it is important to handle\n         individual entries as separate rules with separate timestamps\n         while they are treated as targets and then as one rule with the\n         unified timestamp when they are considered as a prerequisite\n         of some target.  */\n\n      struct file *f;\n      FILE_TIMESTAMP max_mtime = file->last_mtime;\n\n      /* Check that all rules were updated and at the same time find\n         the max timestamp.  We assume UNKNOWN_MTIME is newer then\n         any other value.  */\n      for (f = file->double_colon; f != 0 && f->updated; f = f->prev)\n        if (max_mtime != UNKNOWN_MTIME\n            && (f->last_mtime == UNKNOWN_MTIME || f->last_mtime > max_mtime))\n          max_mtime = f->last_mtime;\n\n      if (f == 0)\n        for (f = file->double_colon; f != 0; f = f->prev)\n          f->last_mtime = max_mtime;\n    }\n\n  if (ran && file->update_status != -1)\n    /* We actually tried to update FILE, which has\n       updated its also_make's as well (if it worked).\n       If it didn't work, it wouldn't work again for them.\n       So mark them as updated with the same status.  */\n    for (d = file->also_make; d != 0; d = d->next)\n      {\n\td->file->command_state = cs_finished;\n\td->file->updated = 1;\n\td->file->update_status = file->update_status;\n\n\tif (ran && !d->file->phony)\n\t  /* Fetch the new modification time.\n\t     We do this instead of just invalidating the cached time\n\t     so that a vpath_search can happen.  Otherwise, it would\n\t     never be done because the target is already updated.  */\n\t  (void) f_mtime (d->file, 0);\n      }\n  else if (file->update_status == -1)\n    /* Nothing was done for FILE, but it needed nothing done.\n       So mark it now as \"succeeded\".  */\n    file->update_status = 0;\n}\n\f\n/* Check whether another file (whose mtime is THIS_MTIME)\n   needs updating on account of a dependency which is file FILE.\n   If it does, store 1 in *MUST_MAKE_PTR.\n   In the process, update any non-intermediate files\n   that FILE depends on (including FILE itself).\n   Return nonzero if any updating failed.  */\n\nstatic int\ncheck_dep (struct file *file, unsigned int depth,\n           FILE_TIMESTAMP this_mtime, int *must_make_ptr)\n{\n  struct dep *d;\n  int dep_status = 0;\n\n  ++depth;\n  start_updating (file);\n\n  if (file->phony || !file->intermediate)\n    {\n      /* If this is a non-intermediate file, update it and record\n         whether it is newer than THIS_MTIME.  */\n      FILE_TIMESTAMP mtime;\n      dep_status = update_file (file, depth);\n      check_renamed (file);\n      mtime = file_mtime (file);\n      check_renamed (file);\n      if (mtime == NONEXISTENT_MTIME || mtime > this_mtime)\n\t*must_make_ptr = 1;\n    }\n  else\n    {\n      /* FILE is an intermediate file.  */\n      FILE_TIMESTAMP mtime;\n\n      if (!file->phony && file->cmds == 0 && !file->tried_implicit)\n\t{\n\t  if (try_implicit_rule (file, depth))\n\t    DBF (DB_IMPLICIT, _(\"Found an implicit rule for `%s'.\\n\"));\n\t  else\n\t    DBF (DB_IMPLICIT, _(\"No implicit rule found for `%s'.\\n\"));\n\t  file->tried_implicit = 1;\n\t}\n      if (file->cmds == 0 && !file->is_target\n\t  && default_file != 0 && default_file->cmds != 0)\n\t{\n\t  DBF (DB_IMPLICIT, _(\"Using default commands for `%s'.\\n\"));\n\t  file->cmds = default_file->cmds;\n\t}\n\n      /* If the intermediate file actually exists\n\t and is newer, then we should remake from it.  */\n      check_renamed (file);\n      mtime = file_mtime (file);\n      check_renamed (file);\n      if (mtime != NONEXISTENT_MTIME && mtime > this_mtime)\n\t*must_make_ptr = 1;\n\t  /* Otherwise, update all non-intermediate files we depend on,\n\t     if necessary, and see whether any of them is more\n\t     recent than the file on whose behalf we are checking.  */\n      else\n\t{\n\t  struct dep *lastd;\n\n\t  lastd = 0;\n\t  d = file->deps;\n\t  while (d != 0)\n\t    {\n              int maybe_make;\n\n\t      if (is_updating (d->file))\n\t\t{\n\t\t  error (NILF, _(\"Circular %s <- %s dependency dropped.\"),\n\t\t\t file->name, d->file->name);\n\t\t  if (lastd == 0)\n\t\t    {\n\t\t      file->deps = d->next;\n                      free_dep (d);\n\t\t      d = file->deps;\n\t\t    }\n\t\t  else\n\t\t    {\n\t\t      lastd->next = d->next;\n                      free_dep (d);\n\t\t      d = lastd->next;\n\t\t    }\n\t\t  continue;\n\t\t}\n\n\t      d->file->parent = file;\n              maybe_make = *must_make_ptr;\n\t      dep_status |= check_dep (d->file, depth, this_mtime,\n                                       &maybe_make);\n              if (! d->ignore_mtime)\n                *must_make_ptr = maybe_make;\n\t      check_renamed (d->file);\n\t      if (dep_status != 0 && !keep_going_flag)\n\t\tbreak;\n\n\t      if (d->file->command_state == cs_running\n\t\t  || d->file->command_state == cs_deps_running)\n\t\t/* Record that some of FILE's deps are still being made.\n\t\t   This tells the upper levels to wait on processing it until\n\t\t   the commands are finished.  */\n\t\tset_command_state (file, cs_deps_running);\n\n\t      lastd = d;\n\t      d = d->next;\n\t    }\n\t}\n    }\n\n  finish_updating (file);\n  return dep_status;\n}\n\f\n/* Touch FILE.  Return zero if successful, one if not.  */\n\n#define TOUCH_ERROR(call) return (perror_with_name (call, file->name), 1)\n\nstatic int\ntouch_file (struct file *file)\n{\n  if (!silent_flag)\n    message (0, \"touch %s\", file->name);\n\n#ifndef\tNO_ARCHIVES\n  if (ar_name (file->name))\n    return ar_touch (file->name);\n  else\n#endif\n    {\n      int fd = open (file->name, O_RDWR | O_CREAT, 0666);\n\n      if (fd < 0)\n\tTOUCH_ERROR (\"touch: open: \");\n      else\n\t{\n\t  struct stat statbuf;\n\t  char buf;\n          int e;\n\n          EINTRLOOP (e, fstat (fd, &statbuf));\n\t  if (e < 0)\n\t    TOUCH_ERROR (\"touch: fstat: \");\n\t  /* Rewrite character 0 same as it already is.  */\n\t  if (read (fd, &buf, 1) < 0)\n\t    TOUCH_ERROR (\"touch: read: \");\n\t  if (lseek (fd, 0L, 0) < 0L)\n\t    TOUCH_ERROR (\"touch: lseek: \");\n\t  if (write (fd, &buf, 1) < 0)\n\t    TOUCH_ERROR (\"touch: write: \");\n\t  /* If file length was 0, we just\n\t     changed it, so change it back.  */\n\t  if (statbuf.st_size == 0)\n\t    {\n\t      (void) close (fd);\n\t      fd = open (file->name, O_RDWR | O_TRUNC, 0666);\n\t      if (fd < 0)\n\t\tTOUCH_ERROR (\"touch: open: \");\n\t    }\n\t  (void) close (fd);\n\t}\n    }\n\n  return 0;\n}\n\f\n/* Having checked and updated the dependencies of FILE,\n   do whatever is appropriate to remake FILE itself.\n   Return the status from executing FILE's commands.  */\n\nstatic void\nremake_file (struct file *file)\n{\n  if (file->cmds == 0)\n    {\n      if (file->phony)\n\t/* Phony target.  Pretend it succeeded.  */\n\tfile->update_status = 0;\n      else if (file->is_target)\n\t/* This is a nonexistent target file we cannot make.\n\t   Pretend it was successfully remade.  */\n\tfile->update_status = 0;\n      else\n        {\n          /* This is a dependency file we cannot remake.  Fail.  */\n          if (!rebuilding_makefiles || !file->dontcare)\n            complain (file);\n          file->update_status = 2;\n        }\n    }\n  else\n    {\n      chop_commands (file->cmds);\n\n      /* The normal case: start some commands.  */\n      if (!touch_flag || file->cmds->any_recurse)\n\t{\n\t  execute_file_commands (file);\n\t  return;\n\t}\n\n      /* This tells notice_finished_file it is ok to touch the file.  */\n      file->update_status = 0;\n    }\n\n  /* This does the touching under -t.  */\n  notice_finished_file (file);\n}\n\f\n/* Return the mtime of a file, given a `struct file'.\n   Caches the time in the struct file to avoid excess stat calls.\n\n   If the file is not found, and SEARCH is nonzero, VPATH searching and\n   replacement is done.  If that fails, a library (-lLIBNAME) is tried and\n   the library's actual name (/lib/libLIBNAME.a, etc.) is substituted into\n   FILE.  */\n\nFILE_TIMESTAMP\nf_mtime (struct file *file, int search)\n{\n  FILE_TIMESTAMP mtime;\n\n  /* File's mtime is not known; must get it from the system.  */\n\n#ifndef\tNO_ARCHIVES\n  if (ar_name (file->name))\n    {\n      /* This file is an archive-member reference.  */\n\n      char *arname, *memname;\n      struct file *arfile;\n      int arname_used = 0;\n      time_t member_date;\n\n      /* Find the archive's name.  */\n      ar_parse_name (file->name, &arname, &memname);\n\n      /* Find the modification time of the archive itself.\n\t Also allow for its name to be changed via VPATH search.  */\n      arfile = lookup_file (arname);\n      if (arfile == 0)\n\t{\n\t  arfile = enter_file (arname);\n\t  arname_used = 1;\n\t}\n      mtime = f_mtime (arfile, search);\n      check_renamed (arfile);\n      if (search && strcmp (arfile->hname, arname))\n\t{\n\t  /* The archive's name has changed.\n\t     Change the archive-member reference accordingly.  */\n\n          char *name;\n\t  unsigned int arlen, memlen;\n\n\t  if (!arname_used)\n\t    {\n\t      free (arname);\n\t      arname_used = 1;\n\t    }\n\n\t  arname = arfile->hname;\n\t  arlen = strlen (arname);\n\t  memlen = strlen (memname);\n\n\t  /* free (file->name); */\n\n\t  name = (char *) xmalloc (arlen + 1 + memlen + 2);\n\t  bcopy (arname, name, arlen);\n\t  name[arlen] = '(';\n\t  bcopy (memname, name + arlen + 1, memlen);\n\t  name[arlen + 1 + memlen] = ')';\n\t  name[arlen + 1 + memlen + 1] = '\\0';\n\n          /* If the archive was found with GPATH, make the change permanent;\n             otherwise defer it until later.  */\n          if (arfile->name == arfile->hname)\n            rename_file (file, name);\n          else\n            rehash_file (file, name);\n          check_renamed (file);\n\t}\n\n      if (!arname_used)\n\tfree (arname);\n      free (memname);\n\n      file->low_resolution_time = 1;\n\n      if (mtime == NONEXISTENT_MTIME)\n\t/* The archive doesn't exist, so its members don't exist either.  */\n\treturn NONEXISTENT_MTIME;\n\n      member_date = ar_member_date (file->hname);\n      mtime = (member_date == (time_t) -1\n               ? NONEXISTENT_MTIME\n               : file_timestamp_cons (file->hname, member_date, 0));\n    }\n  else\n#endif\n    {\n      mtime = name_mtime (file->name);\n\n      if (mtime == NONEXISTENT_MTIME && search && !file->ignore_vpath)\n\t{\n\t  /* If name_mtime failed, search VPATH.  */\n\t  char *name = file->name;\n\t  if (vpath_search (&name, &mtime)\n\t      /* Last resort, is it a library (-lxxx)?  */\n\t      || (name[0] == '-' && name[1] == 'l'\n\t\t  && library_search (&name, &mtime)))\n\t    {\n\t      if (mtime != UNKNOWN_MTIME)\n\t\t/* vpath_search and library_search store UNKNOWN_MTIME\n\t\t   if they didn't need to do a stat call for their work.  */\n\t\tfile->last_mtime = mtime;\n\n              /* If we found it in VPATH, see if it's in GPATH too; if so,\n                 change the name right now; if not, defer until after the\n                 dependencies are updated. */\n              if (gpath_search (name, strlen(name) - strlen(file->name) - 1))\n                {\n                  rename_file (file, name);\n                  check_renamed (file);\n                  return file_mtime (file);\n                }\n\n\t      rehash_file (file, name);\n\t      check_renamed (file);\n              /* If the result of a vpath search is -o or -W, preserve it.\n                 Otherwise, find the mtime of the resulting file.  */\n              if (mtime != OLD_MTIME && mtime != NEW_MTIME)\n                mtime = name_mtime (name);\n\t    }\n\t}\n    }\n\n  /* Files can have bogus timestamps that nothing newly made will be\n     \"newer\" than.  Updating their dependents could just result in loops.\n     So notify the user of the anomaly with a warning.\n\n     We only need to do this once, for now. */\n\n  if (!clock_skew_detected\n      && mtime != NONEXISTENT_MTIME && mtime != NEW_MTIME\n      && !file->updated)\n    {\n      static FILE_TIMESTAMP adjusted_now;\n\n      FILE_TIMESTAMP adjusted_mtime = mtime;\n\n#if defined(WINDOWS32) || defined(__MSDOS__)\n      /* Experimentation has shown that FAT filesystems can set file times\n         up to 3 seconds into the future!  Play it safe.  */\n\n#define FAT_ADJ_OFFSET  (FILE_TIMESTAMP) 3\n\n      FILE_TIMESTAMP adjustment = FAT_ADJ_OFFSET << FILE_TIMESTAMP_LO_BITS;\n      if (ORDINARY_MTIME_MIN + adjustment <= adjusted_mtime)\n        adjusted_mtime -= adjustment;\n#elif defined(__EMX__)\n      /* FAT filesystems round time to the nearest even second!\n         Allow for any file (NTFS or FAT) to perhaps suffer from this\n         brain damage.  */\n      FILE_TIMESTAMP adjustment = (((FILE_TIMESTAMP_S (adjusted_mtime) & 1) == 0\n                     && FILE_TIMESTAMP_NS (adjusted_mtime) == 0)\n                    ? (FILE_TIMESTAMP) 1 << FILE_TIMESTAMP_LO_BITS\n                    : 0);\n#endif\n\n      /* If the file's time appears to be in the future, update our\n         concept of the present and try once more.  */\n      if (adjusted_now < adjusted_mtime)\n        {\n          int resolution;\n          FILE_TIMESTAMP now = file_timestamp_now (&resolution);\n          adjusted_now = now + (resolution - 1);\n          if (adjusted_now < adjusted_mtime)\n            {\n#ifdef NO_FLOAT\n              error (NILF, _(\"Warning: File `%s' has modification time in the future\"),\n                     file->name);\n#else\n              double from_now =\n                (FILE_TIMESTAMP_S (mtime) - FILE_TIMESTAMP_S (now)\n                 + ((FILE_TIMESTAMP_NS (mtime) - FILE_TIMESTAMP_NS (now))\n                    / 1e9));\n              error (NILF, _(\"Warning: File `%s' has modification time %.2g s in the future\"),\n                     file->name, from_now);\n#endif\n              clock_skew_detected = 1;\n            }\n        }\n    }\n\n  /* Store the mtime into all the entries for this file.  */\n  if (file->double_colon)\n    file = file->double_colon;\n\n  do\n    {\n      /* If this file is not implicit but it is intermediate then it was\n\t made so by the .INTERMEDIATE target.  If this file has never\n\t been built by us but was found now, it existed before make\n\t started.  So, turn off the intermediate bit so make doesn't\n\t delete it, since it didn't create it.  */\n      if (mtime != NONEXISTENT_MTIME && file->command_state == cs_not_started\n\t  && file->command_state == cs_not_started\n\t  && !file->tried_implicit && file->intermediate)\n\tfile->intermediate = 0;\n\n      file->last_mtime = mtime;\n      file = file->prev;\n    }\n  while (file != 0);\n\n  return mtime;\n}\n\n\n/* Return the mtime of the file or archive-member reference NAME.  */\n\n/* First, we check with stat().  If the file does not exist, then we return\n   NONEXISTENT_MTIME.  If it does, and the symlink check flag is set, then\n   examine each indirection of the symlink and find the newest mtime.\n   This causes one duplicate stat() when -L is being used, but the code is\n   much cleaner.  */\n\nstatic FILE_TIMESTAMP\nname_mtime (char *name)\n{\n  FILE_TIMESTAMP mtime;\n  struct stat st;\n  int e;\n\n  EINTRLOOP (e, stat (name, &st));\n  if (e == 0)\n    mtime = FILE_TIMESTAMP_STAT_MODTIME (name, st);\n  else if (errno == ENOENT || errno == ENOTDIR)\n    mtime = NONEXISTENT_MTIME;\n  else\n    {\n      perror_with_name (\"stat: \", name);\n      return NONEXISTENT_MTIME;\n    }\n\n  /* If we get here we either found it, or it doesn't exist.\n     If it doesn't exist see if we can use a symlink mtime instead.  */\n\n#ifdef MAKE_SYMLINKS\n#ifndef S_ISLNK\n# define S_ISLNK(_m)     (((_m)&S_IFMT)==S_IFLNK)\n#endif\n  if (check_symlink_flag)\n    {\n      PATH_VAR (lpath);\n\n      /* Check each symbolic link segment (if any).  Find the latest mtime\n         amongst all of them (and the target file of course).\n         Note that we have already successfully dereferenced all the links\n         above.  So, if we run into any error trying to lstat(), or\n         readlink(), or whatever, something bizarre-o happened.  Just give up\n         and use whatever mtime we've already computed at that point.  */\n      strcpy (lpath, name);\n      while (1)\n        {\n          FILE_TIMESTAMP ltime;\n          PATH_VAR (lbuf);\n          long llen;\n          char *p;\n\n          EINTRLOOP (e, lstat (lpath, &st));\n          if (e)\n            {\n              /* Just take what we have so far.  */\n              if (errno != ENOENT && errno != ENOTDIR)\n                perror_with_name (\"lstat: \", lpath);\n              break;\n            }\n\n          /* If this is not a symlink, we're done (we started with the real\n             file's mtime so we don't need to test it again).  */\n          if (!S_ISLNK (st.st_mode))\n            break;\n\n          /* If this mtime is newer than what we had, keep the new one.  */\n          ltime = FILE_TIMESTAMP_STAT_MODTIME (lpath, st);\n          if (ltime > mtime)\n            mtime = ltime;\n\n          /* Set up to check the file pointed to by this link.  */\n          EINTRLOOP (llen, readlink (lpath, lbuf, GET_PATH_MAX));\n          if (llen < 0)\n            {\n              /* Eh?  Just take what we have.  */\n              perror_with_name (\"readlink: \", lpath);\n              break;\n            }\n          lbuf[llen] = '\\0';\n\n          /* If the target is fully-qualified or the source is just a\n             filename, then the new path is the target.  Otherwise it's the\n             source directory plus the target.  */\n          if (lbuf[0] == '/' || (p = strrchr (lpath, '/')) == NULL)\n            strcpy (lpath, lbuf);\n          else if ((p - lpath) + llen + 2 > GET_PATH_MAX)\n            /* Eh?  Path too long!  Again, just go with what we have.  */\n            break;\n          else\n            /* Create the next step in the symlink chain.  */\n            strcpy (p+1, lbuf);\n        }\n    }\n#endif\n\n  return mtime;\n}\n\n\n/* Search for a library file specified as -lLIBNAME, searching for a\n   suitable library file in the system library directories and the VPATH\n   directories.  */\n\nstatic int\nlibrary_search (char **lib, FILE_TIMESTAMP *mtime_ptr)\n{\n  static char *dirs[] =\n    {\n#ifndef _AMIGA\n      \"/lib\",\n      \"/usr/lib\",\n#endif\n#if defined(WINDOWS32) && !defined(LIBDIR)\n/*\n * This is completely up to the user at product install time. Just define\n * a placeholder.\n */\n#define LIBDIR \".\"\n#endif\n      LIBDIR,\t\t\t/* Defined by configuration.  */\n      0\n    };\n\n  static char *libpatterns = NULL;\n\n  char *libname = &(*lib)[2];\t/* Name without the `-l'.  */\n  FILE_TIMESTAMP mtime;\n\n  /* Loop variables for the libpatterns value.  */\n  char *p, *p2;\n  unsigned int len;\n\n  char *file, **dp;\n\n  /* If we don't have libpatterns, get it.  */\n  if (!libpatterns)\n    {\n      int save = warn_undefined_variables_flag;\n      warn_undefined_variables_flag = 0;\n\n      libpatterns = xstrdup (variable_expand (\"$(strip $(.LIBPATTERNS))\"));\n\n      warn_undefined_variables_flag = save;\n    }\n\n  /* Loop through all the patterns in .LIBPATTERNS, and search on each one.  */\n  p2 = libpatterns;\n  while ((p = find_next_token (&p2, &len)) != 0)\n    {\n      static char *buf = NULL;\n      static unsigned int buflen = 0;\n      static int libdir_maxlen = -1;\n      char *libbuf = variable_expand (\"\");\n\n      /* Expand the pattern using LIBNAME as a replacement.  */\n      {\n\tchar c = p[len];\n\tchar *p3, *p4;\n\n\tp[len] = '\\0';\n\tp3 = find_percent (p);\n\tif (!p3)\n\t  {\n\t    /* Give a warning if there is no pattern, then remove the\n\t       pattern so it's ignored next time.  */\n\t    error (NILF, _(\".LIBPATTERNS element `%s' is not a pattern\"), p);\n\t    for (; len; --len, ++p)\n\t      *p = ' ';\n\t    *p = c;\n\t    continue;\n\t  }\n\tp4 = variable_buffer_output (libbuf, p, p3-p);\n\tp4 = variable_buffer_output (p4, libname, strlen (libname));\n\tp4 = variable_buffer_output (p4, p3+1, len - (p3-p));\n\tp[len] = c;\n      }\n\n      /* Look first for `libNAME.a' in the current directory.  */\n      mtime = name_mtime (libbuf);\n      if (mtime != NONEXISTENT_MTIME)\n\t{\n\t  *lib = xstrdup (libbuf);\n\t  if (mtime_ptr != 0)\n\t    *mtime_ptr = mtime;\n\t  return 1;\n\t}\n\n      /* Now try VPATH search on that.  */\n\n      file = libbuf;\n      if (vpath_search (&file, mtime_ptr))\n\t{\n\t  *lib = file;\n\t  return 1;\n\t}\n\n      /* Now try the standard set of directories.  */\n\n      if (!buflen)\n\t{\n\t  for (dp = dirs; *dp != 0; ++dp)\n\t    {\n\t      int l = strlen (*dp);\n\t      if (l > libdir_maxlen)\n\t\tlibdir_maxlen = l;\n\t    }\n\t  buflen = strlen (libbuf);\n\t  buf = xmalloc(libdir_maxlen + buflen + 2);\n\t}\n      else if (buflen < strlen (libbuf))\n\t{\n\t  buflen = strlen (libbuf);\n\t  buf = xrealloc (buf, libdir_maxlen + buflen + 2);\n\t}\n\n      for (dp = dirs; *dp != 0; ++dp)\n\t{\n\t  sprintf (buf, \"%s/%s\", *dp, libbuf);\n\t  mtime = name_mtime (buf);\n\t  if (mtime != NONEXISTENT_MTIME)\n\t    {\n\t      *lib = xstrdup (buf);\n\t      if (mtime_ptr != 0)\n\t\t*mtime_ptr = mtime;\n\t      return 1;\n\t    }\n\t}\n    }\n\n  return 0;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/remote-cstms.c",
    "content": "/* GNU Make remote job exportation interface to the Customs daemon.\n   THIS CODE IS NOT SUPPORTED BY THE GNU PROJECT.\n   Please do not send bug reports or questions about it to\n   the Make maintainers.\n\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"job.h\"\n#include \"filedef.h\"\n#include \"commands.h\"\n#include \"job.h\"\n#include \"debug.h\"\n\n#include <sys/time.h>\n#include <netdb.h>\n\n#include \"customs.h\"\n\nchar *remote_description = \"Customs\";\n\n/* File name of the Customs `export' client command.\n   A full path name can be used to avoid some path-searching overhead.  */\n#define\tEXPORT_COMMAND\t\"/usr/local/bin/export\"\n\n/* ExportPermit gotten by start_remote_job_p, and used by start_remote_job.  */\nstatic ExportPermit permit;\n\n/* Normalized path name of the current directory.  */\nstatic char *normalized_cwd;\n\n/* Call once at startup even if no commands are run.  */\n\nvoid\nremote_setup (void)\n{\n}\n\n/* Called before exit.  */\n\nvoid\nremote_cleanup (void)\n{\n}\n\f\n/* Return nonzero if the next job should be done remotely.  */\n\nint\nstart_remote_job_p (int first_p)\n{\n  static int inited = 0;\n  int status;\n  int njobs;\n\n  if (!inited)\n    {\n      /* Allow the user to turn off job exportation (useful while he is\n         debugging Customs, for example).  */\n      if (getenv (\"GNU_MAKE_NO_CUSTOMS\") != 0)\n        {\n          inited = -1;\n          return 0;\n        }\n\n      /* For secure Customs, make is installed setuid root and\n\t Customs requires a privileged source port be used.  */\n      make_access ();\n\n      if (ISDB (DB_JOBS))\n        Rpc_Debug(1);\n\n      /* Ping the daemon once to see if it is there.  */\n      inited = Customs_Ping () == RPC_SUCCESS ? 1 : -1;\n\n      /* Return to normal user access.  */\n      user_access ();\n\n      if (starting_directory == 0)\n\t/* main couldn't figure it out.  */\n\tinited = -1;\n      else\n\t{\n\t  /* Normalize the current directory path name to something\n\t     that should work on all machines exported to.  */\n\n\t  normalized_cwd = (char *) xmalloc (GET_PATH_MAX);\n\t  strcpy (normalized_cwd, starting_directory);\n\t  if (Customs_NormPath (normalized_cwd, GET_PATH_MAX) < 0)\n\t    /* Path normalization failure means using Customs\n\t       won't work, but it's not really an error.  */\n\t    inited = -1;\n\t}\n    }\n\n  if (inited < 0)\n    return 0;\n\n  njobs = job_slots_used;\n  if (!first_p)\n    njobs -= 1;\t\t/* correction for being called from reap_children() */\n\n  /* the first job should run locally, or, if the -l flag is given, we use\n     that as clue as to how many local jobs should be scheduled locally */\n  if (max_load_average < 0 && njobs == 0 || njobs < max_load_average)\n     return 0;\n\n  status = Customs_Host (EXPORT_SAME, &permit);\n  if (status != RPC_SUCCESS)\n    {\n      DB (DB_JOBS, (_(\"Customs won't export: %s\\n\"),\n                    Rpc_ErrorMessage (status)));\n      return 0;\n    }\n\n  return !CUSTOMS_FAIL (&permit.addr);\n}\n\f\n/* Start a remote job running the command in ARGV, with environment from\n   ENVP.  It gets standard input from STDIN_FD.  On failure, return\n   nonzero.  On success, return zero, and set *USED_STDIN to nonzero if it\n   will actually use STDIN_FD, zero if not, set *ID_PTR to a unique\n   identification, and set *IS_REMOTE to nonzero if the job is remote, zero\n   if it is local (meaning *ID_PTR is a process ID).  */\n\nint\nstart_remote_job (char **argv, char **envp, int stdin_fd,\n                  int *is_remote, int *id_ptr, int *used_stdin)\n{\n  char waybill[MAX_DATA_SIZE], msg[128];\n  struct hostent *host;\n  struct timeval timeout;\n  struct sockaddr_in sin;\n  int len;\n  int retsock, retport, sock;\n  Rpc_Stat status;\n  int pid;\n\n  /* Create the return socket.  */\n  retsock = Rpc_UdpCreate (True, 0);\n  if (retsock < 0)\n    {\n      error (NILF, \"exporting: Couldn't create return socket.\");\n      return 1;\n    }\n\n  /* Get the return socket's port number.  */\n  len = sizeof (sin);\n  if (getsockname (retsock, (struct sockaddr *) &sin, &len) < 0)\n    {\n      (void) close (retsock);\n      perror_with_name (\"exporting: \", \"getsockname\");\n      return 1;\n    }\n  retport = sin.sin_port;\n\n  /* Create the TCP socket for talking to the remote child.  */\n  sock = Rpc_TcpCreate (False, 0);\n\n  /* Create a WayBill to give to the server.  */\n  len = Customs_MakeWayBill (&permit, normalized_cwd, argv[0], argv,\n\t\t\t     envp, retport, waybill);\n\n  /* Modify the waybill as if the remote child had done `child_access ()'.  */\n  {\n    WayBill *wb = (WayBill *) waybill;\n    wb->ruid = wb->euid;\n    wb->rgid = wb->egid;\n  }\n\n  /* Send the request to the server, timing out in 20 seconds.  */\n  timeout.tv_usec = 0;\n  timeout.tv_sec = 20;\n  sin.sin_family = AF_INET;\n  sin.sin_port = htons (Customs_Port ());\n  sin.sin_addr = permit.addr;\n  status = Rpc_Call (sock, &sin, (Rpc_Proc) CUSTOMS_IMPORT,\n\t\t     len, (Rpc_Opaque) waybill,\n\t\t     sizeof(msg), (Rpc_Opaque) msg,\n\t\t     1, &timeout);\n\n  host = gethostbyaddr((char *)&permit.addr, sizeof(permit.addr), AF_INET);\n\n  if (status != RPC_SUCCESS)\n    {\n      (void) close (retsock);\n      (void) close (sock);\n      error (NILF, \"exporting to %s: %s\",\n             host ? host->h_name : inet_ntoa (permit.addr),\n             Rpc_ErrorMessage (status));\n      return 1;\n    }\n  else if (msg[0] != 'O' || msg[1] != 'k' || msg[2] != '\\0')\n    {\n      (void) close (retsock);\n      (void) close (sock);\n      error (NILF, \"exporting to %s: %s\",\n             host ? host->h_name : inet_ntoa (permit.addr),\n             msg);\n      return 1;\n    }\n  else\n    {\n      error (NILF, \"*** exported to %s (id %u)\",\n\t      host ? host->h_name : inet_ntoa (permit.addr),\n\t      permit.id);\n    }\n\n  fflush (stdout);\n  fflush (stderr);\n\n  pid = vfork ();\n  if (pid < 0)\n    {\n      /* The fork failed!  */\n      perror_with_name (\"vfork\", \"\");\n      return 1;\n    }\n  else if (pid == 0)\n    {\n      /* Child side.  Run `export' to handle the connection.  */\n      static char sock_buf[20], retsock_buf[20], id_buf[20];\n      static char *new_argv[6] =\n\t{ EXPORT_COMMAND, \"-id\", sock_buf, retsock_buf, id_buf, 0 };\n\n      /* Set up the arguments.  */\n      (void) sprintf (sock_buf, \"%d\", sock);\n      (void) sprintf (retsock_buf, \"%d\", retsock);\n      (void) sprintf (id_buf, \"%x\", permit.id);\n\n      /* Get the right stdin.  */\n      if (stdin_fd != 0)\n\t(void) dup2 (stdin_fd, 0);\n\n      /* Unblock signals in the child.  */\n      unblock_sigs ();\n\n      /* Run the command.  */\n      exec_command (new_argv, envp);\n    }\n\n  /* Parent side.  Return the `export' process's ID.  */\n  (void) close (retsock);\n  (void) close (sock);\n  *is_remote = 0;\n  *id_ptr = pid;\n  *used_stdin = 1;\n  return 0;\n}\n\f\n/* Get the status of a dead remote child.  Block waiting for one to die\n   if BLOCK is nonzero.  Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR\n   to the termination signal or zero if it exited normally, and *COREDUMP_PTR\n   nonzero if it dumped core.  Return the ID of the child that died,\n   0 if we would have to block and !BLOCK, or < 0 if there were none.  */\n\nint\nremote_status (int *exit_code_ptr, int *signal_ptr, int *coredump_ptr,\n               int block)\n{\n  return -1;\n}\n\n/* Block asynchronous notification of remote child death.\n   If this notification is done by raising the child termination\n   signal, do not block that signal.  */\nvoid\nblock_remote_children (void)\n{\n  return;\n}\n\n/* Restore asynchronous notification of remote child death.\n   If this is done by raising the child termination signal,\n   do not unblock that signal.  */\nvoid\nunblock_remote_children (void)\n{\n  return;\n}\n\n/* Send signal SIG to child ID.  Return 0 if successful, -1 if not.  */\nint\nremote_kill (int id, int sig)\n{\n  return -1;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/remote-stub.c",
    "content": "/* Template for the remote job exportation interface to GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n\n\nchar *remote_description = 0;\n\n/* Call once at startup even if no commands are run.  */\n\nvoid\nremote_setup (void)\n{\n}\n\n/* Called before exit.  */\n\nvoid\nremote_cleanup (void)\n{\n}\n\f\n/* Return nonzero if the next job should be done remotely.  */\n\nint\nstart_remote_job_p (int first_p UNUSED)\n{\n  return 0;\n}\n\f\n/* Start a remote job running the command in ARGV,\n   with environment from ENVP.  It gets standard input from STDIN_FD.  On\n   failure, return nonzero.  On success, return zero, and set *USED_STDIN\n   to nonzero if it will actually use STDIN_FD, zero if not, set *ID_PTR to\n   a unique identification, and set *IS_REMOTE to zero if the job is local,\n   nonzero if it is remote (meaning *ID_PTR is a process ID).  */\n\nint\nstart_remote_job (char **argv UNUSED, char **envp UNUSED, int stdin_fd UNUSED,\n                  int *is_remote UNUSED, int *id_ptr UNUSED,\n                  int *used_stdin UNUSED)\n{\n  return -1;\n}\n\f\n/* Get the status of a dead remote child.  Block waiting for one to die\n   if BLOCK is nonzero.  Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR\n   to the termination signal or zero if it exited normally, and *COREDUMP_PTR\n   nonzero if it dumped core.  Return the ID of the child that died,\n   0 if we would have to block and !BLOCK, or < 0 if there were none.  */\n\nint\nremote_status (int *exit_code_ptr UNUSED, int *signal_ptr UNUSED,\n               int *coredump_ptr UNUSED, int block UNUSED)\n{\n  errno = ECHILD;\n  return -1;\n}\n\n/* Block asynchronous notification of remote child death.\n   If this notification is done by raising the child termination\n   signal, do not block that signal.  */\nvoid\nblock_remote_children (void)\n{\n  return;\n}\n\n/* Restore asynchronous notification of remote child death.\n   If this is done by raising the child termination signal,\n   do not unblock that signal.  */\nvoid\nunblock_remote_children (void)\n{\n  return;\n}\n\n/* Send signal SIG to child ID.  Return 0 if successful, -1 if not.  */\nint\nremote_kill (int id UNUSED, int sig UNUSED)\n{\n  return -1;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/rule.c",
    "content": "/* Pattern and suffix rule internals for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"rule.h\"\n\nstatic void freerule PARAMS ((struct rule *rule, struct rule *lastrule));\n\f\n/* Chain of all pattern rules.  */\n\nstruct rule *pattern_rules;\n\n/* Pointer to last rule in the chain, so we can add onto the end.  */\n\nstruct rule *last_pattern_rule;\n\n/* Number of rules in the chain.  */\n\nunsigned int num_pattern_rules;\n\n/* Maximum number of target patterns of any pattern rule.  */\n\nunsigned int max_pattern_targets;\n\n/* Maximum number of dependencies of any pattern rule.  */\n\nunsigned int max_pattern_deps;\n\n/* Maximum length of the name of a dependencies of any pattern rule.  */\n\nunsigned int max_pattern_dep_length;\n\n/* Pointer to structure for the file .SUFFIXES\n   whose dependencies are the suffixes to be searched.  */\n\nstruct file *suffix_file;\n\n/* Maximum length of a suffix.  */\n\nunsigned int maxsuffix;\n\f\n/* Compute the maximum dependency length and maximum number of\n   dependencies of all implicit rules.  Also sets the subdir\n   flag for a rule when appropriate, possibly removing the rule\n   completely when appropriate.  */\n\nvoid\ncount_implicit_rule_limits (void)\n{\n  char *name;\n  int namelen;\n  register struct rule *rule, *lastrule;\n\n  num_pattern_rules = max_pattern_targets = max_pattern_deps = 0;\n  max_pattern_dep_length = 0;\n\n  name = 0;\n  namelen = 0;\n  rule = pattern_rules;\n  lastrule = 0;\n  while (rule != 0)\n    {\n      unsigned int ndeps = 0;\n      register struct dep *dep;\n      struct rule *next = rule->next;\n      unsigned int ntargets;\n\n      ++num_pattern_rules;\n\n      ntargets = 0;\n      while (rule->targets[ntargets] != 0)\n\t++ntargets;\n\n      if (ntargets > max_pattern_targets)\n\tmax_pattern_targets = ntargets;\n\n      for (dep = rule->deps; dep != 0; dep = dep->next)\n\t{\n\t  unsigned int len = strlen (dep->name);\n\n#ifdef VMS\n\t  char *p = strrchr (dep->name, ']');\n          char *p2;\n          if (p == 0)\n            p = strrchr (dep->name, ':');\n          p2 = p != 0 ? strchr (dep->name, '%') : 0;\n#else\n\t  char *p = strrchr (dep->name, '/');\n\t  char *p2 = p != 0 ? strchr (dep->name, '%') : 0;\n#endif\n\t  ndeps++;\n\n\t  if (len > max_pattern_dep_length)\n\t    max_pattern_dep_length = len;\n\n\t  if (p != 0 && p2 > p)\n\t    {\n\t      /* There is a slash before the % in the dep name.\n\t\t Extract the directory name.  */\n\t      if (p == dep->name)\n\t\t++p;\n\t      if (p - dep->name > namelen)\n\t\t{\n\t\t  if (name != 0)\n\t\t    free (name);\n\t\t  namelen = p - dep->name;\n\t\t  name = (char *) xmalloc (namelen + 1);\n\t\t}\n\t      bcopy (dep->name, name, p - dep->name);\n\t      name[p - dep->name] = '\\0';\n\n\t      /* In the deps of an implicit rule the `changed' flag\n\t\t actually indicates that the dependency is in a\n\t\t nonexistent subdirectory.  */\n\n\t      dep->changed = !dir_file_exists_p (name, \"\");\n\t    }\n\t  else\n\t    /* This dependency does not reside in a subdirectory.  */\n\t    dep->changed = 0;\n\t}\n\n      if (ndeps > max_pattern_deps)\n\tmax_pattern_deps = ndeps;\n\n      lastrule = rule;\n      rule = next;\n    }\n\n  if (name != 0)\n    free (name);\n}\n\f\n/* Create a pattern rule from a suffix rule.\n   TARGET is the target suffix; SOURCE is the source suffix.\n   CMDS are the commands.\n   If TARGET is nil, it means the target pattern should be `(%.o)'.\n   If SOURCE is nil, it means there should be no deps.  */\n\nstatic void\nconvert_suffix_rule (char *target, char *source, struct commands *cmds)\n{\n  char *targname, *targpercent, *depname;\n  char **names, **percents;\n  struct dep *deps;\n  unsigned int len;\n\n  if (target == 0)\n    /* Special case: TARGET being nil means we are defining a\n       `.X.a' suffix rule; the target pattern is always `(%.o)'.  */\n    {\n#ifdef VMS\n      targname = savestring (\"(%.obj)\", 7);\n#else\n      targname = savestring (\"(%.o)\", 5);\n#endif\n      targpercent = targname + 1;\n    }\n  else\n    {\n      /* Construct the target name.  */\n      len = strlen (target);\n      targname = xmalloc (1 + len + 1);\n      targname[0] = '%';\n      bcopy (target, targname + 1, len + 1);\n      targpercent = targname;\n    }\n\n  names = (char **) xmalloc (2 * sizeof (char *));\n  percents = (char **) alloca (2 * sizeof (char *));\n  names[0] = targname;\n  percents[0] = targpercent;\n  names[1] = percents[1] = 0;\n\n  if (source == 0)\n    deps = 0;\n  else\n    {\n      /* Construct the dependency name.  */\n      len = strlen (source);\n      depname = xmalloc (1 + len + 1);\n      depname[0] = '%';\n      bcopy (source, depname + 1, len + 1);\n      deps = alloc_dep ();\n      deps->name = depname;\n    }\n\n  create_pattern_rule (names, percents, 0, deps, cmds, 0);\n}\n\n/* Convert old-style suffix rules to pattern rules.\n   All rules for the suffixes on the .SUFFIXES list\n   are converted and added to the chain of pattern rules.  */\n\nvoid\nconvert_to_pattern (void)\n{\n  register struct dep *d, *d2;\n  register struct file *f;\n  register char *rulename;\n  register unsigned int slen, s2len;\n\n  /* Compute maximum length of all the suffixes.  */\n\n  maxsuffix = 0;\n  for (d = suffix_file->deps; d != 0; d = d->next)\n    {\n      register unsigned int namelen = strlen (dep_name (d));\n      if (namelen > maxsuffix)\n\tmaxsuffix = namelen;\n    }\n\n  rulename = (char *) alloca ((maxsuffix * 2) + 1);\n\n  for (d = suffix_file->deps; d != 0; d = d->next)\n    {\n      /* Make a rule that is just the suffix, with no deps or commands.\n\t This rule exists solely to disqualify match-anything rules.  */\n      convert_suffix_rule (dep_name (d), (char *) 0, (struct commands *) 0);\n\n      f = d->file;\n      if (f->cmds != 0)\n\t/* Record a pattern for this suffix's null-suffix rule.  */\n\tconvert_suffix_rule (\"\", dep_name (d), f->cmds);\n\n      /* Record a pattern for each of this suffix's two-suffix rules.  */\n      slen = strlen (dep_name (d));\n      bcopy (dep_name (d), rulename, slen);\n      for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next)\n\t{\n\t  s2len = strlen (dep_name (d2));\n\n\t  if (slen == s2len && streq (dep_name (d), dep_name (d2)))\n\t    continue;\n\n\t  bcopy (dep_name (d2), rulename + slen, s2len + 1);\n\t  f = lookup_file (rulename);\n\t  if (f == 0 || f->cmds == 0)\n\t    continue;\n\n\t  if (s2len == 2 && rulename[slen] == '.' && rulename[slen + 1] == 'a')\n\t    /* A suffix rule `.X.a:' generates the pattern rule `(%.o): %.X'.\n\t       It also generates a normal `%.a: %.X' rule below.  */\n\t    convert_suffix_rule ((char *) 0, /* Indicates `(%.o)'.  */\n\t\t\t\t dep_name (d),\n\t\t\t\t f->cmds);\n\n\t  /* The suffix rule `.X.Y:' is converted\n\t     to the pattern rule `%.Y: %.X'.  */\n\t  convert_suffix_rule (dep_name (d2), dep_name (d), f->cmds);\n\t}\n    }\n}\n\n\n/* Install the pattern rule RULE (whose fields have been filled in)\n   at the end of the list (so that any rules previously defined\n   will take precedence).  If this rule duplicates a previous one\n   (identical target and dependencies), the old one is replaced\n   if OVERRIDE is nonzero, otherwise this new one is thrown out.\n   When an old rule is replaced, the new one is put at the end of the\n   list.  Return nonzero if RULE is used; zero if not.  */\n\nint\nnew_pattern_rule (struct rule *rule, int override)\n{\n  register struct rule *r, *lastrule;\n  register unsigned int i, j;\n\n  rule->in_use = 0;\n  rule->terminal = 0;\n\n  rule->next = 0;\n\n  /* Search for an identical rule.  */\n  lastrule = 0;\n  for (r = pattern_rules; r != 0; lastrule = r, r = r->next)\n    for (i = 0; rule->targets[i] != 0; ++i)\n      {\n\tfor (j = 0; r->targets[j] != 0; ++j)\n\t  if (!streq (rule->targets[i], r->targets[j]))\n\t    break;\n\tif (r->targets[j] == 0)\n\t  /* All the targets matched.  */\n\t  {\n\t    register struct dep *d, *d2;\n\t    for (d = rule->deps, d2 = r->deps;\n\t\t d != 0 && d2 != 0; d = d->next, d2 = d2->next)\n\t      if (!streq (dep_name (d), dep_name (d2)))\n\t\tbreak;\n\t    if (d == 0 && d2 == 0)\n\t      {\n\t\t/* All the dependencies matched.  */\n\t\tif (override)\n\t\t  {\n\t\t    /* Remove the old rule.  */\n\t\t    freerule (r, lastrule);\n\t\t    /* Install the new one.  */\n\t\t    if (pattern_rules == 0)\n\t\t      pattern_rules = rule;\n\t\t    else\n\t\t      last_pattern_rule->next = rule;\n\t\t    last_pattern_rule = rule;\n\n\t\t    /* We got one.  Stop looking.  */\n\t\t    goto matched;\n\t\t  }\n\t\telse\n\t\t  {\n\t\t    /* The old rule stays intact.  Destroy the new one.  */\n\t\t    freerule (rule, (struct rule *) 0);\n\t\t    return 0;\n\t\t  }\n\t      }\n\t  }\n      }\n\n matched:;\n\n  if (r == 0)\n    {\n      /* There was no rule to replace.  */\n      if (pattern_rules == 0)\n\tpattern_rules = rule;\n      else\n\tlast_pattern_rule->next = rule;\n      last_pattern_rule = rule;\n    }\n\n  return 1;\n}\n\n\n/* Install an implicit pattern rule based on the three text strings\n   in the structure P points to.  These strings come from one of\n   the arrays of default implicit pattern rules.\n   TERMINAL specifies what the `terminal' field of the rule should be.  */\n\nvoid\ninstall_pattern_rule (struct pspec *p, int terminal)\n{\n  register struct rule *r;\n  char *ptr;\n\n  r = (struct rule *) xmalloc (sizeof (struct rule));\n\n  r->targets = (char **) xmalloc (2 * sizeof (char *));\n  r->suffixes = (char **) xmalloc (2 * sizeof (char *));\n  r->lens = (unsigned int *) xmalloc (2 * sizeof (unsigned int));\n\n  r->targets[1] = 0;\n  r->suffixes[1] = 0;\n  r->lens[1] = 0;\n\n  r->lens[0] = strlen (p->target);\n  /* These will all be string literals, but we malloc space for\n     them anyway because somebody might want to free them later on.  */\n  r->targets[0] = savestring (p->target, r->lens[0]);\n  r->suffixes[0] = find_percent (r->targets[0]);\n  if (r->suffixes[0] == 0)\n    /* Programmer-out-to-lunch error.  */\n    abort ();\n  else\n    ++r->suffixes[0];\n\n  ptr = p->dep;\n  r->deps = (struct dep *) multi_glob (parse_file_seq (&ptr, '\\0',\n                                                       sizeof (struct dep), 1),\n\t\t\t\t       sizeof (struct dep));\n\n  if (new_pattern_rule (r, 0))\n    {\n      r->terminal = terminal;\n      r->cmds = (struct commands *) xmalloc (sizeof (struct commands));\n      r->cmds->fileinfo.filenm = 0;\n      r->cmds->fileinfo.lineno = 0;\n      /* These will all be string literals, but we malloc space for them\n\t anyway because somebody might want to free them later.  */\n      r->cmds->commands = xstrdup (p->commands);\n      r->cmds->command_lines = 0;\n    }\n}\n\n\n/* Free all the storage used in RULE and take it out of the\n   pattern_rules chain.  LASTRULE is the rule whose next pointer\n   points to RULE.  */\n\nstatic void\nfreerule (struct rule *rule, struct rule *lastrule)\n{\n  struct rule *next = rule->next;\n  register unsigned int i;\n  register struct dep *dep;\n\n  for (i = 0; rule->targets[i] != 0; ++i)\n    free (rule->targets[i]);\n\n  dep = rule->deps;\n  while (dep)\n    {\n      struct dep *t;\n\n      t = dep->next;\n      /* We might leak dep->name here, but I'm not sure how to fix this: I\n         think that pointer might be shared (e.g., in the file hash?)  */\n      dep->name = 0; /* Make sure free_dep does not free name.  */\n      free_dep (dep);\n      dep = t;\n    }\n\n  free ((char *) rule->targets);\n  free ((char *) rule->suffixes);\n  free ((char *) rule->lens);\n\n  /* We can't free the storage for the commands because there\n     are ways that they could be in more than one place:\n       * If the commands came from a suffix rule, they could also be in\n       the `struct file's for other suffix rules or plain targets given\n       on the same makefile line.\n       * If two suffixes that together make a two-suffix rule were each\n       given twice in the .SUFFIXES list, and in the proper order, two\n       identical pattern rules would be created and the second one would\n       be discarded here, but both would contain the same `struct commands'\n       pointer from the `struct file' for the suffix rule.  */\n\n  free ((char *) rule);\n\n  if (pattern_rules == rule)\n    if (lastrule != 0)\n      abort ();\n    else\n      pattern_rules = next;\n  else if (lastrule != 0)\n    lastrule->next = next;\n  if (last_pattern_rule == rule)\n    last_pattern_rule = lastrule;\n}\n\f\n/* Create a new pattern rule with the targets in the nil-terminated\n   array TARGETS.  If TARGET_PERCENTS is not nil, it is an array of\n   pointers into the elements of TARGETS, where the `%'s are.\n   The new rule has dependencies DEPS and commands from COMMANDS.\n   It is a terminal rule if TERMINAL is nonzero.  This rule overrides\n   identical rules with different commands if OVERRIDE is nonzero.\n\n   The storage for TARGETS and its elements is used and must not be freed\n   until the rule is destroyed.  The storage for TARGET_PERCENTS is not used;\n   it may be freed.  */\n\nvoid\ncreate_pattern_rule (char **targets, char **target_percents,\n\t\t     int terminal, struct dep *deps,\n                     struct commands *commands, int override)\n{\n  unsigned int max_targets, i;\n  struct rule *r = (struct rule *) xmalloc (sizeof (struct rule));\n\n  r->cmds = commands;\n  r->deps = deps;\n  r->targets = targets;\n\n  max_targets = 2;\n  r->lens = (unsigned int *) xmalloc (2 * sizeof (unsigned int));\n  r->suffixes = (char **) xmalloc (2 * sizeof (char *));\n  for (i = 0; targets[i] != 0; ++i)\n    {\n      if (i == max_targets - 1)\n\t{\n\t  max_targets += 5;\n\t  r->lens = (unsigned int *)\n\t    xrealloc ((char *) r->lens, max_targets * sizeof (unsigned int));\n\t  r->suffixes = (char **)\n\t    xrealloc ((char *) r->suffixes, max_targets * sizeof (char *));\n\t}\n      r->lens[i] = strlen (targets[i]);\n      r->suffixes[i] = (target_percents == 0 ? find_percent (targets[i])\n\t\t\t: target_percents[i]) + 1;\n      if (r->suffixes[i] == 0)\n\tabort ();\n    }\n\n  if (i < max_targets - 1)\n    {\n      r->lens = (unsigned int *) xrealloc ((char *) r->lens,\n\t\t\t\t\t   (i + 1) * sizeof (unsigned int));\n      r->suffixes = (char **) xrealloc ((char *) r->suffixes,\n\t\t\t\t\t(i + 1) * sizeof (char *));\n    }\n\n  if (new_pattern_rule (r, override))\n    r->terminal = terminal;\n}\n\f\n/* Print the data base of rules.  */\n\nstatic void\t\t\t/* Useful to call from gdb.  */\nprint_rule (struct rule *r)\n{\n  register unsigned int i;\n  register struct dep *d;\n\n  for (i = 0; r->targets[i] != 0; ++i)\n    {\n      fputs (r->targets[i], stdout);\n      if (r->targets[i + 1] != 0)\n\tputchar (' ');\n      else\n\tputchar (':');\n    }\n  if (r->terminal)\n    putchar (':');\n\n  for (d = r->deps; d != 0; d = d->next)\n    printf (\" %s\", dep_name (d));\n  putchar ('\\n');\n\n  if (r->cmds != 0)\n    print_commands (r->cmds);\n}\n\nvoid\nprint_rule_data_base (void)\n{\n  register unsigned int rules, terminal;\n  register struct rule *r;\n\n  puts (_(\"\\n# Implicit Rules\"));\n\n  rules = terminal = 0;\n  for (r = pattern_rules; r != 0; r = r->next)\n    {\n      ++rules;\n\n      putchar ('\\n');\n      print_rule (r);\n\n      if (r->terminal)\n\t++terminal;\n    }\n\n  if (rules == 0)\n    puts (_(\"\\n# No implicit rules.\"));\n  else\n    {\n      printf (_(\"\\n# %u implicit rules, %u\"), rules, terminal);\n#ifndef\tNO_FLOAT\n      printf (\" (%.1f%%)\", (double) terminal / (double) rules * 100.0);\n#else\n      {\n\tint f = (terminal * 1000 + 5) / rules;\n\tprintf (\" (%d.%d%%)\", f/10, f%10);\n      }\n#endif\n      puts (_(\" terminal.\"));\n    }\n\n  if (num_pattern_rules != rules)\n    {\n      /* This can happen if a fatal error was detected while reading the\n         makefiles and thus count_implicit_rule_limits wasn't called yet.  */\n      if (num_pattern_rules != 0)\n        fatal (NILF, _(\"BUG: num_pattern_rules wrong!  %u != %u\"),\n               num_pattern_rules, rules);\n    }\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/rule.h",
    "content": "/* Definitions for using pattern rules in GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Structure used for pattern rules.  */\n\nstruct rule\n  {\n    struct rule *next;\n    char **targets;\t\t/* Targets of the rule.  */\n    unsigned int *lens;\t\t/* Lengths of each target.  */\n    char **suffixes;\t\t/* Suffixes (after `%') of each target.  */\n    struct dep *deps;\t\t/* Dependencies of the rule.  */\n    struct commands *cmds;\t/* Commands to execute.  */\n    char terminal;\t\t/* If terminal (double-colon).  */\n    char in_use;\t\t/* If in use by a parent pattern_search.  */\n  };\n\n/* For calling install_pattern_rule.  */\nstruct pspec\n  {\n    char *target, *dep, *commands;\n  };\n\n\nextern struct rule *pattern_rules;\nextern struct rule *last_pattern_rule;\nextern unsigned int num_pattern_rules;\n\nextern unsigned int max_pattern_deps;\nextern unsigned int max_pattern_targets;\nextern unsigned int max_pattern_dep_length;\n\nextern struct file *suffix_file;\nextern unsigned int maxsuffix;\n\n\nextern void install_pattern_rule PARAMS ((struct pspec *p, int terminal));\nextern int new_pattern_rule PARAMS ((struct rule *rule, int override));\nextern void count_implicit_rule_limits PARAMS ((void));\nextern void convert_to_pattern PARAMS ((void));\nextern void create_pattern_rule PARAMS ((char **targets,\n                                         char **target_percents, int terminal,\n                                         struct dep *deps,\n                                         struct commands *commands,\n                                         int override));\n"
  },
  {
    "path": "sources/host-tools/make-3.81/signame.c",
    "content": "/* Convert between signal names and numbers.\nCopyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,\n2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n/* If the system provides strsignal, we don't need it. */\n\n#if !HAVE_STRSIGNAL\n\n/* If the system provides sys_siglist, we'll use that.\n   Otherwise create our own.\n */\n\n#if !HAVE_DECL_SYS_SIGLIST\n\n/* Some systems do not define NSIG in <signal.h>.  */\n#ifndef\tNSIG\n#ifdef\t_NSIG\n#define\tNSIG\t_NSIG\n#else\n#define\tNSIG\t32\n#endif\n#endif\n\n/* There is too much variation in Sys V signal numbers and names, so\n   we must initialize them at runtime.  */\n\nstatic const char *undoc;\n\nstatic const char *sys_siglist[NSIG];\n\n/* Table of abbreviations for signals.  Note:  A given number can\n   appear more than once with different abbreviations.  */\n#define SIG_TABLE_SIZE  (NSIG*2)\n\ntypedef struct\n  {\n    int number;\n    const char *abbrev;\n  } num_abbrev;\n\nstatic num_abbrev sig_table[SIG_TABLE_SIZE];\n\n/* Number of elements of sig_table used.  */\nstatic int sig_table_nelts = 0;\n\n/* Enter signal number NUMBER into the tables with ABBREV and NAME.  */\n\nstatic void\ninit_sig (int number, const char *abbrev, const char *name)\n{\n  /* If this value is ever greater than NSIG it seems like it'd be a bug in\n     the system headers, but... better safe than sorry.  We know, for\n     example, that this isn't always true on VMS.  */\n\n  if (number >= 0 && number < NSIG)\n    sys_siglist[number] = name;\n\n  if (sig_table_nelts < SIG_TABLE_SIZE)\n    {\n      sig_table[sig_table_nelts].number = number;\n      sig_table[sig_table_nelts++].abbrev = abbrev;\n    }\n}\n\nstatic int\nsigname_init (void)\n{\n  int i;\n\n  undoc = xstrdup (_(\"unknown signal\"));\n\n  /* Initialize signal names.  */\n  for (i = 0; i < NSIG; i++)\n    sys_siglist[i] = undoc;\n\n  /* Initialize signal names.  */\n#if defined (SIGHUP)\n  init_sig (SIGHUP, \"HUP\", _(\"Hangup\"));\n#endif\n#if defined (SIGINT)\n  init_sig (SIGINT, \"INT\", _(\"Interrupt\"));\n#endif\n#if defined (SIGQUIT)\n  init_sig (SIGQUIT, \"QUIT\", _(\"Quit\"));\n#endif\n#if defined (SIGILL)\n  init_sig (SIGILL, \"ILL\", _(\"Illegal Instruction\"));\n#endif\n#if defined (SIGTRAP)\n  init_sig (SIGTRAP, \"TRAP\", _(\"Trace/breakpoint trap\"));\n#endif\n  /* If SIGIOT == SIGABRT, we want to print it as SIGABRT because\n     SIGABRT is in ANSI and POSIX.1 and SIGIOT isn't.  */\n#if defined (SIGABRT)\n  init_sig (SIGABRT, \"ABRT\", _(\"Aborted\"));\n#endif\n#if defined (SIGIOT)\n  init_sig (SIGIOT, \"IOT\", _(\"IOT trap\"));\n#endif\n#if defined (SIGEMT)\n  init_sig (SIGEMT, \"EMT\", _(\"EMT trap\"));\n#endif\n#if defined (SIGFPE)\n  init_sig (SIGFPE, \"FPE\", _(\"Floating point exception\"));\n#endif\n#if defined (SIGKILL)\n  init_sig (SIGKILL, \"KILL\", _(\"Killed\"));\n#endif\n#if defined (SIGBUS)\n  init_sig (SIGBUS, \"BUS\", _(\"Bus error\"));\n#endif\n#if defined (SIGSEGV)\n  init_sig (SIGSEGV, \"SEGV\", _(\"Segmentation fault\"));\n#endif\n#if defined (SIGSYS)\n  init_sig (SIGSYS, \"SYS\", _(\"Bad system call\"));\n#endif\n#if defined (SIGPIPE)\n  init_sig (SIGPIPE, \"PIPE\", _(\"Broken pipe\"));\n#endif\n#if defined (SIGALRM)\n  init_sig (SIGALRM, \"ALRM\", _(\"Alarm clock\"));\n#endif\n#if defined (SIGTERM)\n  init_sig (SIGTERM, \"TERM\", _(\"Terminated\"));\n#endif\n#if defined (SIGUSR1)\n  init_sig (SIGUSR1, \"USR1\", _(\"User defined signal 1\"));\n#endif\n#if defined (SIGUSR2)\n  init_sig (SIGUSR2, \"USR2\", _(\"User defined signal 2\"));\n#endif\n  /* If SIGCLD == SIGCHLD, we want to print it as SIGCHLD because that\n     is what is in POSIX.1.  */\n#if defined (SIGCHLD)\n  init_sig (SIGCHLD, \"CHLD\", _(\"Child exited\"));\n#endif\n#if defined (SIGCLD)\n  init_sig (SIGCLD, \"CLD\", _(\"Child exited\"));\n#endif\n#if defined (SIGPWR)\n  init_sig (SIGPWR, \"PWR\", _(\"Power failure\"));\n#endif\n#if defined (SIGTSTP)\n  init_sig (SIGTSTP, \"TSTP\", _(\"Stopped\"));\n#endif\n#if defined (SIGTTIN)\n  init_sig (SIGTTIN, \"TTIN\", _(\"Stopped (tty input)\"));\n#endif\n#if defined (SIGTTOU)\n  init_sig (SIGTTOU, \"TTOU\", _(\"Stopped (tty output)\"));\n#endif\n#if defined (SIGSTOP)\n  init_sig (SIGSTOP, \"STOP\", _(\"Stopped (signal)\"));\n#endif\n#if defined (SIGXCPU)\n  init_sig (SIGXCPU, \"XCPU\", _(\"CPU time limit exceeded\"));\n#endif\n#if defined (SIGXFSZ)\n  init_sig (SIGXFSZ, \"XFSZ\", _(\"File size limit exceeded\"));\n#endif\n#if defined (SIGVTALRM)\n  init_sig (SIGVTALRM, \"VTALRM\", _(\"Virtual timer expired\"));\n#endif\n#if defined (SIGPROF)\n  init_sig (SIGPROF, \"PROF\", _(\"Profiling timer expired\"));\n#endif\n#if defined (SIGWINCH)\n  /* \"Window size changed\" might be more accurate, but even if that\n     is all that it means now, perhaps in the future it will be\n     extended to cover other kinds of window changes.  */\n  init_sig (SIGWINCH, \"WINCH\", _(\"Window changed\"));\n#endif\n#if defined (SIGCONT)\n  init_sig (SIGCONT, \"CONT\", _(\"Continued\"));\n#endif\n#if defined (SIGURG)\n  init_sig (SIGURG, \"URG\", _(\"Urgent I/O condition\"));\n#endif\n#if defined (SIGIO)\n  /* \"I/O pending\" has also been suggested.  A disadvantage is\n     that signal only happens when the process has\n     asked for it, not everytime I/O is pending.  Another disadvantage\n     is the confusion from giving it a different name than under Unix.  */\n  init_sig (SIGIO, \"IO\", _(\"I/O possible\"));\n#endif\n#if defined (SIGWIND)\n  init_sig (SIGWIND, \"WIND\", _(\"SIGWIND\"));\n#endif\n#if defined (SIGPHONE)\n  init_sig (SIGPHONE, \"PHONE\", _(\"SIGPHONE\"));\n#endif\n#if defined (SIGPOLL)\n  init_sig (SIGPOLL, \"POLL\", _(\"I/O possible\"));\n#endif\n#if defined (SIGLOST)\n  init_sig (SIGLOST, \"LOST\", _(\"Resource lost\"));\n#endif\n#if defined (SIGDANGER)\n  init_sig (SIGDANGER, \"DANGER\", _(\"Danger signal\"));\n#endif\n#if defined (SIGINFO)\n  init_sig (SIGINFO, \"INFO\", _(\"Information request\"));\n#endif\n#if defined (SIGNOFP)\n  init_sig (SIGNOFP, \"NOFP\", _(\"Floating point co-processor not available\"));\n#endif\n\n  return 1;\n}\n\n#endif  /* HAVE_DECL_SYS_SIGLIST */\n\n\nchar *\nstrsignal (int signal)\n{\n  static char buf[] = \"Signal 12345678901234567890\";\n\n#if ! HAVE_DECL_SYS_SIGLIST\n# if HAVE_DECL__SYS_SIGLIST\n#  define sys_siglist _sys_siglist\n# elif HAVE_DECL___SYS_SIGLIST\n#  define sys_siglist __sys_siglist\n# else\n  static char sig_initted = 0;\n\n  if (!sig_initted)\n    sig_initted = signame_init ();\n# endif\n#endif\n\n  if (signal > 0 || signal < NSIG)\n    return (char *) sys_siglist[signal];\n\n  sprintf (buf, \"Signal %d\", signal);\n  return buf;\n}\n\n#endif  /* HAVE_STRSIGNAL */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/strcache.c",
    "content": "/* Constant string caching for GNU Make.\nCopyright (C) 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include \"hash.h\"\n\n/* The size (in bytes) of each cache buffer.  */\n#define CACHE_BUFFER_SIZE   (4096)\n\n\n/* A string cached here will never be freed, so we don't need to worry about\n   reference counting.  We just store the string, and then remember it in a\n   hash so it can be looked up again. */\n\nstruct strcache {\n  struct strcache *next;    /* The next block of strings.  */\n  char *end;                /* Pointer to the beginning of the free space.  */\n  int count;                /* # of strings in this buffer (for stats).  */\n  int bytesfree;            /* The amount of the buffer that is free.  */\n  char buffer[1];           /* The buffer comes after this.  */\n};\n\nstatic int bufsize = CACHE_BUFFER_SIZE;\nstatic struct strcache *strcache = NULL;\n\nstatic struct strcache *\nnew_cache()\n{\n  struct strcache *new;\n  new = (struct strcache *) xmalloc (sizeof (*new) + bufsize);\n  new->end = new->buffer;\n  new->count = 0;\n  new->bytesfree = bufsize;\n\n  new->next = strcache;\n  strcache = new;\n\n  return new;\n}\n\nstatic const char *\nadd_string(const char *str, int len)\n{\n  struct strcache *best = NULL;\n  struct strcache *sp;\n  const char *res;\n\n  /* If the string we want is too large to fit into a single buffer, then we're\n     screwed; nothing will ever fit!  Change the maximum size of the cache to\n     be big enough.  */\n  if (len > bufsize)\n    bufsize = len * 2;\n\n  /* First, find a cache with enough free space.  We always look through all\n     the blocks and choose the one with the best fit (the one that leaves the\n     least amount of space free).  */\n  for (sp = strcache; sp != NULL; sp = sp->next)\n    if (sp->bytesfree > len && (!best || best->bytesfree > sp->bytesfree))\n      best = sp;\n\n  /* If nothing is big enough, make a new cache.  */\n  if (!best)\n    best = new_cache();\n\n  assert (best->bytesfree > len);\n\n  /* Add the string to the best cache.  */\n  res = best->end;\n  memcpy (best->end, str, len);\n  best->end += len;\n  *(best->end++) = '\\0';\n  best->bytesfree -= len + 1;\n  ++best->count;\n\n  return res;\n}\n\n\n/* Hash table of strings in the cache.  */\n\nstatic unsigned long\nstr_hash_1 (const void *key)\n{\n  return_ISTRING_HASH_1 ((const char *) key);\n}\n\nstatic unsigned long\nstr_hash_2 (const void *key)\n{\n  return_ISTRING_HASH_2 ((const char *) key);\n}\n\nstatic int\nstr_hash_cmp (const void *x, const void *y)\n{\n  return_ISTRING_COMPARE ((const char *) x, (const char *) y);\n}\n\nstatic struct hash_table strings;\n\nstatic const char *\nadd_hash (const char *str, int len)\n{\n  /* Look up the string in the hash.  If it's there, return it.  */\n  char **slot = (char **) hash_find_slot (&strings, str);\n  const char *key = *slot;\n\n  if (!HASH_VACANT (key))\n    return key;\n\n  /* Not there yet so add it to a buffer, then into the hash table.  */\n  key = add_string (str, len);\n  hash_insert_at (&strings, key, slot);\n  return key;\n}\n\n/* Returns true if the string is in the cache; false if not.  */\nint\nstrcache_iscached (const char *str)\n{\n  struct strcache *sp;\n\n  for (sp = strcache; sp != 0; sp = sp->next)\n    if (str >= sp->buffer && str < sp->end)\n      return 1;\n\n  return 0;\n}\n\n/* If the string is already in the cache, return a pointer to the cached\n   version.  If not, add it then return a pointer to the cached version.\n   Note we do NOT take control of the string passed in.  */\nconst char *\nstrcache_add (const char *str)\n{\n  return add_hash (str, strlen (str));\n}\n\nconst char *\nstrcache_add_len (const char *str, int len)\n{\n  char *key = alloca (len + 1);\n  memcpy (key, str, len);\n  key[len] = '\\0';\n\n  return add_hash (key, len);\n}\n\nint\nstrcache_setbufsize(int size)\n{\n  if (size > bufsize)\n    bufsize = size;\n  return bufsize;\n}\n\nvoid\nstrcache_init (void)\n{\n  hash_init (&strings, 1000, str_hash_1, str_hash_2, str_hash_cmp);\n}\n\n\n/* Generate some stats output.  */\n\nvoid\nstrcache_print_stats (const char *prefix)\n{\n  int numbuffs = 0, numstrs = 0;\n  int totsize = 0, avgsize, maxsize = 0, minsize = bufsize;\n  int totfree = 0, avgfree, maxfree = 0, minfree = bufsize;\n  const struct strcache *sp;\n\n  for (sp = strcache; sp != NULL; sp = sp->next)\n    {\n      int bf = sp->bytesfree;\n      int sz = (sp->end - sp->buffer) + bf;\n\n      ++numbuffs;\n      numstrs += sp->count;\n\n      totsize += sz;\n      maxsize = (sz > maxsize ? sz : maxsize);\n      minsize = (sz < minsize ? sz : minsize);\n\n      totfree += bf;\n      maxfree = (bf > maxfree ? bf : maxfree);\n      minfree = (bf < minfree ? bf : minfree);\n    }\n\n  avgsize = numbuffs ? (int)(totsize / numbuffs) : 0;\n  avgfree = numbuffs ? (int)(totfree / numbuffs) : 0;\n\n  printf (_(\"\\n%s # of strings in strcache: %d\\n\"), prefix, numstrs);\n  printf (_(\"%s # of strcache buffers: %d\\n\"), prefix, numbuffs);\n  printf (_(\"%s strcache size: total = %d / max = %d / min = %d / avg = %d\\n\"),\n          prefix, totsize, maxsize, minsize, avgsize);\n  printf (_(\"%s strcache free: total = %d / max = %d / min = %d / avg = %d\\n\"),\n          prefix, totfree, maxfree, minfree, avgfree);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/subproc.bat",
    "content": "@echo off\r\nrem Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\r\nrem 2005, 2006 Free Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under\r\nrem the terms of the GNU General Public License as published by the Free\r\nrem Software Foundation; either version 2, or (at your option) any later\r\nrem version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT\r\nrem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r\nrem FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r\nrem more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along\r\nrem with GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n\r\ncd w32\\subproc\r\nset MAKE=%2\r\nset MAKEFILE=%1\r\nif x%2 == x set MAKE=nmake\r\n%MAKE% /f %MAKEFILE%\r\ncd ..\\..\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n                          675 Mass Ave, Cambridge, MA 02139, USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\tAppendix: How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) 19yy  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) 19yy name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/ChangeLog",
    "content": "2006-04-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/realpath: Don't run tests with multiple\n\tinitial slashes on Windows: those paths mean something different.\n\n2006-03-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/parallelism: Test that the jobserver is\n\tproperly managed when we have to re-exec the master instance of\n\tmake.\n\n2006-03-17  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/statipattrules: Add tests for bug #16053.\n\n2006-03-09  Paul Smith  <psmith@gnu.org>\n\n\t* scripts/features/escape: Use \"pre:\" not \"p:\" to avoid conflicts\n\twith DOS drive letters.  Fixes Savannah bug #15947.\n\n\t* test_driver.pl (run_each_test): Set the status properly even\n\twhen a test fails to execute.  Fixes Savannah bug #15942.\n\n\t* scripts/functions/foreach: Use a different environment variable\n\tother than PATH to avoid differences with Windows platforms.\n\tFixes Savannah bug #15938.\n\n2006-03-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (set_more_defaults): Add CYGWIN_NT as a port\n\ttype W32.  Fixed Savannah bug #15937.\n\n\t* scripts/features/default_names: Don't call error() when the test\n\tfails.  Fixes Savannah bug #15941.\n\n2006-02-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Test a complex construction which\n\tguarantees that we have to merge variable lists of different\n\tsizes.  Tests for Savannah bug #15757.\n\n2006-02-15  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/error: Make sure filename/lineno information\n\tis related to where the error is expanded, not where it's set.\n\t* scripts/functions/warning: Ditto.\n\t* scripts/functions/foreach: Check for different error conditions.\n\t* scripts/functions/word: Ditto.\n\t* scripts/variables/negative: Test some variable reference failure\n\tconditions.\n\t* scripts/options/warn-undefined-variables: Test the\n\t--warn-undefined-variables flag.\n\n2006-02-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (set_more_defaults): Update valgrind support\n\tfor newer versions.\n\t* test_driver.pl (toplevel): Skip all hidden files/directories (ones\n\tbeginning with \".\").\n\n\t* scripts/functions/andor: Tests for $(and ..) and $(or ...)\n\tfunctions.\n\n2006-02-08  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/parallelism: Add a test for bug #15641.\n\n2006-02-06  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-W: Add a test for bug #15341.\n\n2006-01-03  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/automatic: Add a test for bug #8154.\n\n\t* README: Update to reflect the current state of the test suite.\n\n2005-12-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/parallelism, scripts/functions/wildcard,\n\tscripts/targets/FORCE, scripts/targets/PHONY,\n\tscripts/targets/SILENT: Use the default setting for\n\t$delete_command.  Fixes bug #15085.\n\n\t* run_make_tests.pl (get_this_pwd) [VMS]: Use -no_ask with delete_file.\n\n2005-12-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/misc/general4: Test implicit rules with '$' in the\n\tprereq list & prereq patterns.\n\t* scripts/features/se_implicit: Add in .SECONDEXPANSION settings.\n\n2005-12-09  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/patternrules: Add a test for bug #13022.\n\n2005-12-07  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/double_colon: Add a test for bug #14334.\n\n2005-11-17  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/functions/flavor: Add a test for the flavor function.\n\n2005-11-14  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/variables/INCLUDE_DIRS: Add a test for the .INCLUDE_DIRS\n\tspecial variable.\n\n2005-10-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/misc/general4: Test '$$' in prerequisites list.\n\t* scripts/features/statipattrules: Rewrite to use run_make_test().\n\tAdd various static pattern info.\n\t* scripts/features/se_statpat: Enable .SECONDEXPANSION target.\n\t* scripts/features/se_explicit: Add tests for handling '$$' in\n\tprerequisite lists with and without setting .SECONDEXPANSION.\n\t* scripts/features/order_only: Convert to run_make_test().\n\t* run_make_tests.pl (set_more_defaults): If we can't get the value\n\tof $(MAKE) from make, then fatal immediately.\n\n2005-08-31  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (get_this_pwd): Require the POSIX module (in\n\tan eval to trap errors) and if it exists, use POSIX::getcwd to\n\tfind the working directory.  If it doesn't exist, go back to the\n\tprevious methods.  This tries to be more accurate on Windows\n\tsystems.\n\n2005-08-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/abspath: Add some text to the error messages\n\tto get a better idea of what's wrong.  Make warnings instead of\n\terrors.\n\n\t* scripts/features/patspecific_vars: Don't use \"test\", which is\n\tUNIX specific.  Print the values and let the test script match\n\tthem.\n\n2005-08-25  Paul Smith  <psmith@gnu.org>\n\n\t* scripts/variables/SHELL: Use a /./ prefix instead of //: the\n\tformer works better with non-UNIX environments.  Fixes Savannah\n\tbug #14129.\n\n2005-08-13  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/functions/wildcard: Wrap calls to $(wildcard ) with\n\t$(sort) so that the resulting order is no longer filesystem-\n\tdependant.\n\n2005-08-10  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/statipattrules: Add a test for Savannah bug #13881.\n\n2005-08-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/parallelism: Add a test for a bug reported by\n\tMichael Matz (matz@suse.de) in which make exits without waiting\n\tfor all its children in some situations during parallel builds.\n\n2005-07-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl: Reset the environment to a clean value every\n\ttime before we invoke make.  I'm suspicious that the environment\n\tisn't handled the same way in Windows as it is in UNIX, and some\n\tvariables are leaking out beyond the tests they are intended for.\n\tCreate an %extraENV hash tests can set to add more env. vars.\n\t* tests/scripts/features/export: Change to use %extraENV.\n\t* tests/scripts/functions/eval: Ditto.\n\t* tests/scripts/functions/origin: Ditto.\n\t* tests/scripts/options/dash-e: Ditto.\n\t* tests/scripts/variables/SHELL: Ditto.\n\n2005-06-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-W: Use 'echo >>' instead of touch to update\n\tfiles.\n\t* scripts/features/reinvoke: Rewrite to be safer on systems with\n\tsubsecond timestamps.\n\t* scripts/features/patternrules: False exits with different error\n\tcodes on different systems (for example, Linux => 1, Solaris => 255).\n\n\t* scripts/options/dash-W: Set the timestamp to foo.x in the future,\n\tto be sure it will be considered updated when it's remade.\n\n2005-06-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/shell: New test suite for the shell function.\n\n2005-06-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/include: Test include/-include/sinclude with no\n\targuments.  Tests fix for Savannah bug #1761.\n\n\t* scripts/misc/general3: Implement comprehensive testing of\n\tbackslash-newline behavior in command scripts: various types of\n\tquoting, fast path / slow path, etc.\n\tTests fix for Savannah bug #1332.\n\n\t* scripts/options/symlinks: Test symlinks to non-existent files.\n\tTests fix for Savannah bug #13280.\n\n\t* scripts/misc/general3: Test semicolons in variable references.\n\tTests fix for Savannah bug #1454.\n\n\t* scripts/variables/MAKE_RESTARTS: New file: test the\n\tMAKE_RESTARTS variable.\n\t* scripts/options/dash-B: Test re-exec doesn't loop infinitely.\n\tTests fix for Savannah bug #7566.\n\t* scripts/options/dash-W: New file: test the -W flag, including\n\tre-exec infinite looping.\n\n2005-06-12  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/misc/close_stdout: Add a test for Savannah bug #1328.\n\tThis test only works on systems that have /dev/full (e.g., Linux).\n\n2005-06-09  Paul D. Smith  <psmith@gnu.org>\n\n        * scripts/functions/foreach: Add a test for Savannah bug #11913.\n\n2005-05-31  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/include: Add a test for Savannah bug #13216.\n\t* scripts/features/patternrules: Add a test for Savannah bug #13218.\n\n2005-05-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/conditionals: Add tests for the new if... else\n\tif... endif syntax.\n\n2005-05-03  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/DEFAULT_GOAL: Rename DEFAULT_TARGET to\n\tDEFAULT_GOAL.\n\n2005-05-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/parallelism: Add a test for exporting recursive\n\tvariables containing $(shell ) calls.  Rewrite this script to use\n\trun_make_test() everywhere.\n\n2005-04-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/targets/SECONDARY: Add a test for Savannah bug #12331.\n\n2005-03-15  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/variables/automatic: Add a test for Savannah bug #12320.\n\n2005-03-10  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/patternrules: Add a test for Savannah bug #12267.\n\n2005-03-09  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/variables/DEFAULT_TARGET: Add a test for Savannah\n\tbug #12266.\n\n2005-03-04  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/patternrules: Add a test for Savannah bug #12202.\n\n2005-03-03  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/se_implicit: Add a test for stem\n\ttermination bug. Add a test for stem triple-expansion bug.\n\n\t* scripts/features/se_statpat: Add a test for stem\n\ttriple-expansion bug.\n\n\t* scripts/features/statipattrules: Change test #4 to reflect\n\tnew way empty prerequisite list is handled.\n\n\n2005-03-01  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/statipattrules: Add a test for\n\tSavannah bug #12180.\n\n2005-02-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-q: Add a test for Savannah bug # 7144.\n\n\t* scripts/options/symlinks: New file to test checking of symlink\n\ttimestamps.  Can't use filename dash-L because it conflicts with\n\tdash-l on case-insensitive filesystems.\n\n\t* scripts/variables/MAKEFILE_LIST, scripts/variables/MFILE_LIST:\n\tRename MAKEFILE_LIST test to MFILE_LIST, for systems that need 8.3\n\tunique filenames.\n\n2005-02-28  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/variables/DEFAULT_TARGET: Test the .DEFAULT_TARGET\n\tspecial variable.\n\n2005-02-27  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/se_explicit: Test the second expansion in\n\texplicit rules.\n\t* scripts/features/se_implicit: Test the second expansion in\n\timplicit rules.\n\t* scripts/features/se_statpat: Test the second expansion in\n\tstatic pattern rules.\n\t* scripts/variables/automatic: Fix to work with the second\n\texpansion.\n\n\t* scripts/misc/general4: Add a test for bug #12091.\n\n2005-02-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/eval: Check that eval of targets within\n\tcommand scripts fails.  See Savannah bug # 12124.\n\n2005-02-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (compare_output): If a basic comparison of the\n\tlog and answer doesn't match, try harder: change all backslashes\n\tto slashes and all CRLF to LF.  This helps on DOS/Windows systems.\n\n2005-02-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/recursion: Test command line variable settings:\n\tonly one instance of a given variable should be provided.\n\n2004-11-30  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* tests/scripts/functions/abspath: New file: test `abspath'\n\tbuilt-in function.\n\n\t* tests/scripts/functions/realpath: New file: test `realpath'\n\tbuilt-in function.\n\n2004-11-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-C [WINDOWS32]: Add a test for bug #10252;\n\tthis doesn't really test anything useful in UNIX but...\n\n\t* scripts/variables/SHELL: New file: test proper handling of SHELL\n\taccording to POSIX rules.  Fixes bug #1276.\n\n2004-10-21  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/functions/word: Test $(firstword ) and $(lastword ).\n\n2004-10-05  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/patspecific_vars: Test simple/recursive\n\tvariable expansion.\n\n2004-09-28  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/include: Test dontcare flag inheritance\n\twhen rebuilding makefiles.\n\n2004-09-27  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* scripts/features/patspecific_vars: Test exported variables.\n\n2004-09-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (run_make_test): Don't add newlines to the\n\tmakestring or answer if they are completely empty.\n\n\t* scripts/features/patternrules: Rename from implicit_prereq_eval.\n\n\t* scripts/test_template: Rework the template.\n\n2004-09-21  Boris Kolpackov  <boris@kolpackov.net>\n\n\t* run_make_tests.pl: Change `#!/usr/local/bin/perl' to be\n\t`#!/usr/bin/env perl'.\n\n\t* scripts/features/implicit_prereq_eval: Test implicit rule\n\tprerequisite evaluation code.\n\n2004-09-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (run_make_test): Enhance to allow the make\n\tstring to be undef: in that case it reuses the previous make\n\tstring.  Allows multiple tests on the same makefile.\n\n\t* scripts/variables/flavors: Add some tests for prefix characters\n\tinteracting with define/endef variables.\n\n2004-09-20  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/substitution: Rewrite to use run_make_test()\n\tinterface, and add test for substitution failures reported by\n\tMarkus Mauhart <qwe123@chello.at>.\n\n2004-03-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (run_each_test, toplevel, compare_output): Change\n\tto track both the testing categories _AND_ the number of\n\tindividual tests, and report both sets of numbers.\n\n2004-02-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/origin: Set our own environment variable\n\trather than relying on $HOME.\n\n2004-01-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/conditionals: Test arguments to ifn?def which\n\tcontain whitespace (such as a function that is evaluated).  Bug\n\t#7257.\n\n2004-01-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/order_only: Test order-only prerequisites in\n\tpattern rules (patch #2349).\n\n2003-11-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/if: Test if on conditionals with trailing\n\twhitespace--bug #5798.\n\n\t* scripts/functions/eval: Test eval in a non-file context--bug #6195.\n\n2003-04-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/patspecific_vars: Test multiple patterns\n\tmatching the same target--Bug #1405.\n\n2003-04-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (set_more_defaults): A new $port_type of\n\t'OS/2' for (surprise!) OS/2.  Also choose a wait time of 2 seconds\n\tfor OS/2.\n\n2003-03-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/targets/SECONDARY: Test the \"global\" .SECONDARY (with\n\tnot prerequisites)--Bug #2515.\n\n2003-01-30  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Test very long target-specific\n\tvariable definition lines (longer than the default make buffer\n\tlength).  Tests patch # 1022.\n\n\t* scripts/functions/eval: Test very recursive $(eval ...) calls\n\twith simple variable expansion (bug #2238).\n\n\t* scripts/functions/word: Test error handling for word and\n\twordlist functions (bug #2407).\n\n2003-01-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/call: Test recursive argument masking (bug\n\t#1744).\n\n2002-10-25  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/eval: Test using $(eval ...) inside\n\tconditionals (Bug #1516).\n\n2002-10-14  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-t: Add a test for handling -t on targets\n\twith no commands (Bug #1418).\n\n2002-10-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Add a test for exporting\n\ttarget-specific vars (Bug #1391).\n\n2002-10-05  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/automatic: Add tests for $$(@), $${@}, $${@D},\n\tand $${@F}.\n\n2002-09-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/escape: Test handling of escaped comment\n\tcharacters in targets and prerequisites.\n\n2002-09-18  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/export: Test export/unexport of multiple\n\tvariables in a single command.\n\n2002-09-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Tests for Bug #940: test\n\ttarget-specific and pattern-specific variables in conjunction with\n\tdouble-colon targets.\n\n2002-09-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (compare_output): Match the new format for time\n\tskew error messages.\n\n\t* scripts/features/export: Created.  Add tests for export/unexport\n\tcapabilities, including exporting/unexporting expanded variables.\n\n\t* scripts/features/conditionals: Add a test for expanded variables\n\tin ifdef conditionals.\n\n2002-09-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/reinvoke: Change touch/sleep combos to utouch\n\tinvocations.\n\t* scripts/features/vpathgpath: Ditto.\n\t* scripts/features/vpathplus: Ditto.\n\t* scripts/options/dash-n: Ditto.\n\t* scripts/targets/INTERMEDIATE: Ditto.\n\t* scripts/targets/SECONDARY: Ditto.\n\n\t* scripts/options/dash-t: Added a test for the -t bug fixed by\n\tHenning Makholm.  This test was also contributed by Henning.\n\n\t* scripts/misc/general4: Add a test suite for obscure algorithmic\n\tfeatures of make.  First test: make sure creation subdirectories\n\tas prerequisites of targets works properly.\n\n\t* scripts/misc/version: Remove this bogus test.\n\n2002-08-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/misc/general3: Add a test for makefiles that don't end\n\tin newlines.\n\n\t* scripts/variables/special: Create tests for the special\n\tvariables (.VARIABLES and .TARGETS).  Comment out .TARGETS test\n\tfor now as it's not yet supported.\n\n2002-08-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-B: Add a test for the new -B option.\n\n2002-07-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (valid_option): Add support for Valgrind.  Use\n\t-valgrind option to the test suite.\n\t(set_more_defaults): Set up the file descriptor to capture\n\tValgrind output.  We have to unset its close-on-exec flag; we\n\thardcode the value for F_SETFD (2) rather than load it; hopefully\n\tthis will help us avoid breaking the Windows/DOS test suite.\n\n2002-07-10  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/automatic: Add some tests for $$@, $$(@D), and\n\t$$(@F).\n\n\t* test_driver.pl (utouch): Create a new function that creates a\n\tfile with a specific timestamp offset.  Use of this function will\n\tlet us avoid lots of annoying sleep() invocations in the tests\n\tjust to get proper timestamping, which will make the tests run a\n\tlot faster.  So far it's only used in the automatic test suite.\n\n2002-07-09  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/automatic: Create a test for automatic variables.\n\n2002-07-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/order_only: Test new order-only prerequisites.\n\n2002-07-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/eval: Test new function.\n\t* scripts/functions/value: Test new function.\n\t* scripts/variables/MAKEFILE_LIST: Test new variable.\n\n2002-04-28  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/call: New test: transitive closure\n\timplementation using $(call ...) to test variable recursion.\n\n2002-04-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (compare_dir_tree): Ignore CVS and RCS\n\tdirectories in the script directories.\n\n2001-05-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/flavors: Test define/endef scripts where only\n\tone of the command lines is quiet.\n\n2000-06-22  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-q: New file; test the -q option.  Includes\n\ta test for PR/1780.\n\n2000-06-21  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Added a test for PR/1709: allowing\n\tsemicolons in target-specific variable values.\n\n2000-06-19  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/addsuffix: Test for an empty final argument.\n\tActually this bug might have happened for any function, but this\n\tone was handy.\n\n2000-06-17  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* scripts/options/general: If parallel jobs are not supported,\n\texpect a warning message from Make.\n\n2000-06-15  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* scripts/options/general: Don't try -jN with N != 1 if parallel\n\tjobs are not supported.\n\n2000-05-24  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/general: Test general option processing (PR/1716).\n\n2000-04-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/strip: Test empty value to strip (PR/1689).\n\n2000-04-08  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* scripts/features/reinvoke: Sleep before updating the target\n\tfiles in the first test, to ensure its time stamp really gets\n\tnewer; otherwise Make might re-exec more than once.\n\n2000-04-07  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* scripts/features/double_colon: Don't run the parallel tests if\n\tparallel jobs aren't supported.\n\n2000-04-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/word: wordlist doesn't swap arguments anymore.\n\n2000-03-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/statipattrules: Test that static pattern rules\n\twhose prerequisite patterns resolve to empty strings throw an\n\terror (instead of dumping core).  Fixes PR/1670.\n\n\t* scripts/features/reinvoke: Make more robust by touching \"b\"\n\tfirst, to ensure it's not newer than \"a\".\n\tReported by Marco Franzen <Marco.Franzen@Thyron.com>.\n\t* scripts/options/dash-n: Ditto.\n\n\t* scripts/functions/call: Whoops.  The fix to PR/1527 caused\n\trecursive invocations of $(call ...) to break.  I can't come up\n\twith any way to get both working at the same time, so I backed out\n\tthe fix to 1527 and added a test case for recursive calls.  This\n\talso tests the fix for PR/1610.\n\n\t* scripts/features/double_colon: Test that circular dependencies\n\tin double-colon rule sets are detected correctly (PR/1671).\n\n2000-03-26  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/targets/INTERMEDIATE: Test that make doesn't remove\n\t.INTERMEDIATE files when given on the command line (PR/1669).\n\n2000-03-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-k: Add a test for error detection by\n\tmultiple targets depending on the same prerequisite with -k.\n\tFor PR/1634.\n\n2000-02-07  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/escape: Add a test for backslash-escaped spaces\n\tin a target name (PR/1586).\n\n2000-02-04  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/patspecific_vars: Add a test for pattern-specific\n\ttarget variables inherited from the parent target (PR/1407).\n\n2000-02-02  Paul D. Smith  <psmith@gnu.org>\n\n\t* run_make_tests.pl (set_more_defaults): Hard-code the LANG to C\n\tto make sure sorting order, etc. is predictable.\n\tReported by Andreas Jaeger <aj@suse.de>.\n\n\t* run_make_tests.pl (set_more_defaults): Set the $wtime variable\n\tdepending on the OS.  Eli Zaretskii <eliz@is.elta.co.il> reports\n\tthis seems to need to be *4* on DOS/Windows, not just 2.  Keep it\n\t1 for other systems.\n\t* scripts/features/vpathplus (touchfiles): Use the $wtime value\n\tinstead of hardcoding 2.\n\t* scripts/targets/SECONDARY: Ditto.\n\t* scripts/targets/INTERMEDIATE: Ditto.\n\n2000-01-27  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (toplevel): Don't try to run test scripts which\n\tare really directories.\n\n2000-01-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/include: Remove a check; the fix caused more\n\tproblems than the error, so I removed it and removed the test for\n\tit.\n\n2000-01-11  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/call: Add a test for PR/1517 and PR/1527: make\n\tsure $(call ...) doesn't eval its arguments and that you can\n\tinvoke foreach from it without looping forever.\n\n1999-12-15  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/targets/INTERMEDIATE: Add a test for PR/1423: make sure\n\t.INTERMEDIATE settings on files don't disable them as implicit\n\tintermediate possibilities.\n\n1999-12-01  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/double_colon: Add a test for PR/1476: Try\n\tdouble-colon rules as non-goal targets and during parallel builds\n\tto make sure they're handled serially.\n\n1999-11-17  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/functions/if: Add a test for PR/1429: put some text\n\tafter an if-statement to make sure it works.\n\n\t* scripts/features/targetvars: Add a test for PR/1380: handling +=\n\tin target-specific variable definitions correctly.\n\n1999-10-15  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/variables/MAKEFILES: This was really broken: it didn't\n\ttest anything at all, really.  Rewrote it, plus added a test for\n\tPR/1394.\n\n1999-10-13  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/options/dash-n: Add a test for PR/1379: \"-n doesn't\n\tbehave properly when used with recursive targets\".\n\n1999-10-08  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/targetvars: Add a check for PR/1378:\n\t\"Target-specific vars don't inherit correctly\"\n\n1999-09-29  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (get_osname): Change $fancy_file_names to\n\t$short_filenames and reverse the logic.\n\t(run_each_test): Change test of non-existent $port_host to use\n\t$short_filenames--problem reported by Eli Zaretskii.\n\n1999-09-23  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/parallelism: Add a check to ensure that the\n\tjobserver works when we re-invoke.  Also cleaned up the tests a\n\tlittle, reducing the number of rules we use so the test won't need\n\tas many \"sleep\" commands.\n\n1999-09-16  Paul D. Smith  <psmith@gnu.org>\n\n\t* scripts/features/reinvoke: Remove invocations of \"touch\" in\n\tmakefiles.  See the comments on the touch function rewrite below.\n\tNote that UNIX touch behaves the same way if the file already\n\texists: it sets the time to the _local_ time.  We don't want\n\tthis.  This is probably a good tip for makefile writers in\n\tgeneral, actually... where practical.\n\t* scripts/options/dash-l: Ditto.\n\t* scripts/options/dash-n: Ditto.\n\n\t* test_driver.pl (run_each_test): In retrospect, I don't like the\n\t.lN/.bN/.dN postfix required by DOS.  So, for non-DOS systems I\n\tchanged it back to use .log, .base, and .diff.\n\n\t* run_make_tests.pl (set_more_defaults): Move the check for the\n\tmake pathname to here from set_defaults (that's too early since it\n\thappens before the command line processing).\n\tCreate a new variable $port_type, calculated from $osname, to\n\tspecify what kind of system we're running on.  We should integrate\n\tthe VOS stuff here, too.\n\t(valid_option): Comment out the workdir/-work stuff so people\n\twon't be fooled into thinking it works... someone needs to fix\n\tthis, though!\n\n\t* scripts/functions/origin: Use $port_type instead of $osname.\n\t* scripts/functions/foreach: Ditto.\n\t* scripts/features/default_names: Ditto.\n\n1999-09-15  Paul D. Smith  <psmith@gnu.org>\n\n\t* test_driver.pl (touch): Rewrite this function.  Previously it\n\tused to use utime() to hard-set the time based on the current\n\tlocal clock, or, if the file didn't exist, it merely created it.\n\tThis mirrors exactly what real UNIX touch does, but it fails badly\n\ton networked filesystems where the FS server clock is skewed from\n\tthe local clock: normally modifying a file causes it to get a mod\n\ttime based on the _server's_ clock.  Hard-setting it based on the\n\t_local_ clock causes gratuitous errors and makes the tests\n\tunreliable except on local filesystems.  The new function will\n\tsimply modify the file, allowing the filesystem to set the mod\n\ttime as it sees fit.\n\n\t* scripts/features/parallelism: The second test output could\n\tchange depending on how fast some scripts completed; use \"sleep\"\n\tto force the order we want.\n\n\t* test_driver.pl (toplevel): A bug in Perl 5.000 to Perl 5.004\n\tmeans that \"%ENV = ();\" doesn't do the right thing.  This worked\n\tin Perl 4 and was fixed in Perl 5.004_01, but use a loop to delete\n\tthe environment rather than require specific versions.\n\n\t* run_make_tests.pl (set_more_defaults): Don't use Perl 5 s///\n\tmodifier \"s\", so the tests will run with Perl 4.\n\t(set_more_defaults): Set $pure_log to empty if there's no -logfile\n\toption in PURIFYOPTIONS.\n\t(setup_for_test): Don't remove any logs unless $pure_log is set.\n\n1999-09-15  Eli Zaretskii  <eliz@is.elta.co.il>\n\n\t* scripts/features/reinvoke: Put the SHELL definition in the right\n\ttest makefile.\n\n1999-09-15  Paul D. Smith  <psmith@gnu.org>\n\n\tChangeLog file for the test suite created.\n\f\n\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/NEWS",
    "content": "Changes from 0.4.9 to 3.78 (Sep 6, 1999):\n\n    Lots of new tests.  Renamed to follow the GNU make scheme.  Also\n    added some support for using Purify with make.\n\n    Rob Tulloh contributed some changes to get the test suite running on\n    NT; I tweaked them a bit (hopefully I didn't break anything!)  Note\n    that NT doesn't grok the self-exec funkiness that Unix shells use,\n    so instead I broke that out into a separate shell script\n    \"run_make_tests\" that invokes perl with the (renamed) script\n    run_make_tests.pl.\n\n    Eli Zaretski contributed changes to get the test suite running on\n    DOS with DJGPP.  I also meddled in these somewhat.\n\n    If you're on DOS or NT you should run \"perl.exe run_make_tests.pl ...\"\n    If you're on Unix, you can continue to run \"./run_make_tests ...\" as\n    before.\n\nChanges from 0.4.8 to 0.4.9 (May 14, 1998):\n\n    Release by Paul D. Smith <psmith@baynetworks.com>; I'm the one to\n    blame for problems in this version :).\n\n    Add some perl to test_driver.pl to strip out GNU make clock skew\n    warning messages from the output before comparing it to the\n    known-good output.\n\n    A new test for escaped :'s in filenames (someone on VMS found this\n    didn't work anymore in 3.77): scripts/features/escape.\n\nChanges from 0.4.7 to 0.4.8 (May 14, 1998):\n\n    Release by Paul D. Smith <psmith@baynetworks.com>; I'm the one to\n    blame for problems in this version :).\n\n    New tests for features to be included in GNU make 3.77.\n\nChanges from 0.4.6 to 0.4.7 (August 18, 1997):\n\n    Release by Paul D. Smith <psmith@baynetworks.com>; I'm the one to\n    blame for problems in this version :).\n\n    Reworked some tests to make sure they all work with both perl4 and perl5.\n\n    Work around a bug in perl 5.004 which doesn't clean the environment\n    correctly in all cases (fixed in at least 5.004_02).\n\n    Updated functions/strip to test for newline stripping.\n\n    Keep a $PURIFYOPTIONS env variable if present.\n\nChanges from 0.4.5 to 0.4.6 (April 07, 1997):\n\n    Release by Paul D. Smith <psmith@baynetworks.com>; I'm the one to\n    blame for problems in this version :).\n\n    Updated to work with GNU make 3.76 (and pretests).\n\n    Added new tests and updated existing ones.  Note that the new tests\n    weren't tested with perl 4, however I think they should work.\n\n    Ignore any tests whose filenames end in \"~\", so that Emacs backup\n    files aren't run.\n\nChanges from 0.4.4 to 0.4.5 (April 29, 1995):\n\n    Updated to be compatible with perl 5.001 as well as 4.036.\n\n    Note: the test suite still won't work on 14-char filesystems\n    (sorry, Kaveh), but I will get to it.\n\n    Also, some tests and stuff still haven't made it in because I\n    haven't had time to write the test scripts for them.  But they,\n    too, will get in eventually.  Contributions of scripts (ie, tests\n    that I can just drop in) are particularly welcome and will be\n    incorporated immediately.\n\nChanges from 0.4.3 to 0.4.4 (March 1995):\n\n    Updated for changes in make 3.72.12, and to ignore CVS directories\n    (thanks go to Jim Meyering for the patches for this).\n\n    Fixed uname call to not make a mess on BSD/OS 2.0 (whose uname -a\n    is very verbose).  Let me know if this doesn't work correctly on\n    your system.\n\n    Changed to display test name while it is running, not just when it\n    finishes.\n\n    Note: the test suite still won't work on 14-char filesystems\n    (sorry, Kaveh), but I will get to it.\n\n    Also, some tests and stuff still haven't made it in because I\n    haven't had time to write the test scripts for them.  But they,\n    too, will get in eventually.\n\nChanges from 0.4 to 0.4.3 (October 1994):\n\n    Fixed bugs (like dependencies on environment variables).\n\n    Caught up with changes in make.\n\n    The load_limit test should now silently ignore a failure due to\n    make not being able to read /dev/kmem.\n\n    Reorganized tests into subdirs and renamed lots of things so that\n    those poor souls who still have to deal with 14-char filename\n    limits won't hate me any more.  Thanks very much to Kaveh R. Ghazi\n    <ghazi@noc.rutgers.edu> for helping me with the implementation and\n    testing of these changes, and for putting up with all my whining\n    about it...\n\n    Added a $| = 1 so that systems that don't seem to automatically\n    flush their output for some reason will still print all the\n    output.  I'd hate for someone to miss out on the smiley that\n    you're supposed to get when all the tests pass... :-)\n\nChanges from 0.3 to 0.4 (August 1993):\n\n    Lost in the mists of time (and my hurry to get it out before I\n    left my job).\n\nChanges from 0.2 to 0.3 (9-30-92):\n\n    Several tests fixed to match the fact that MAKELEVEL > 0 or -C now\n    imply -w.\n\n    parallel_execution test fixed to not use double colon rules any\n    more since their behavior has changed.\n\n    errors_in_commands test fixed to handle different error messages\n    and return codes from rm.\n\n    Several tests fixed to handle -make_path with a relative path\n    and/or a name other than \"make\" for make.\n\n    dash-e-option test fixed to use $PATH instead of $USER (since the\n    latter does not exist on some System V systems).  This also\n    removes the dependency on getlogin (which fails under certain\n    weird conditions).\n\n    test_driver_core changed so that you can give a test name like\n    scripts/errors_in_commands and it will be handled correctly (handy\n    if you have a shell with filename completion).\n\nChanges from 0.1 to 0.2 (5-4-92):\n\n    README corrected to require perl 4.019, not 4.010.\n\n    -make_path replaces -old.\n\n    errors_in_commands test updated for change in format introduced in\n    make 3.62.6.\n\n    test_driver_core now uses a better way of figuring what OS it is\n    running on (thanks to meyering@cs.utexas.edu (Jim Meyering) for\n    suggesting this, as well as discovering the hard way that the old\n    way (testing for /mnt) fails on his machine).\n\n    Some new tests were added.\n\n\f\n-------------------------------------------------------------------------------\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/README",
    "content": "The test suite was originally written by Steve McGee and Chris Arthur.\nIt is covered by the GNU General Public License (Version 2), described\nin the file COPYING.  It has been maintained as part of GNU make proper\nsince GNU make 3.78.\n\nThis entire test suite, including all test files, are copyright and\ndistributed under the following terms:\n\n -----------------------------------------------------------------------------\n Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n This file is part of GNU Make.\n\n GNU Make is free software; you can redistribute it and/or modify it under the\n terms of the GNU General Public License as published by the Free Software\n Foundation; either version 2, or (at your option) any later version.\n\n GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License along with\n GNU Make; see the file COPYING.  If not, write to the Free Software\n Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n -----------------------------------------------------------------------------\n\nThe test suite requires Perl.  These days, you should have at least Perl\n5.004 (available from ftp.gnu.org, and portable to many machines).  It\nused to work with Perl 4.036 but official support for Perl 4.x was\nabandoned a long time ago, due to lack of testbeds, as well as interest.\n\nThe test suite assumes that the first \"diff\" it finds on your PATH is\nGNU diff, but that only matters if a test fails.\n\nTo run the test suite on a UNIX system, use \"perl ./run_make_tests\"\n(or just \"./run_make_tests\" if you have a perl on your PATH).\n\nTo run the test suite on Windows NT or DOS systems, use\n\"perl.exe ./run_make-tests.pl\".\n\nBy default, the test engine picks up the first executable called \"make\"\nthat it finds in your path.  You may use the -make_path option (ie,\n\"perl run_make_tests -make_path /usr/local/src/make-3.78/make\") if\nyou want to run a particular copy.  This now works correctly with\nrelative paths and when make is called something other than \"make\" (like\n\"gmake\").\n\nTests cannot end with a \"~\" character, as the test suite will ignore any\nthat do (I was tired of having it run my Emacs backup files as tests :))\n\nAlso, sometimes the tests may behave strangely on networked\nfilesystems.  You can use mkshadow to create a copy of the test suite in\n/tmp or similar, and try again.  If the error disappears, it's an issue\nwith your network or file server, not GNU make (I believe).  This\nshouldn't happen very often anymore: I've done a lot of work on the\ntests to reduce the impacts of this situation.\n\nThe options/dash-l test will not really test anything if the copy of\nmake you are using can't obtain the system load.  Some systems require\nmake to be setgid sys or kmem for this; if you don't want to install\nmake just to test it, make it setgid to kmem or whatever group /dev/kmem\nis (ie, \"chgrp kmem make;chmod g+s make\" as root).  In any case, the\noptions/dash-l test should no longer *fail* because make can't read\n/dev/kmem.\n\nA directory named \"work\" will be created when the tests are run which\nwill contain any makefiles and \"diff\" files of tests that fail so that\nyou may look at them afterward to see the output of make and the\nexpected result.\n\nThere is a -help option which will give you more information about the\nother possible options for the test suite.\n\n\nOpen Issues\n-----------\n\nThe test suite has a number of problems which should be addressed.  One\nVERY serious one is that there is no real documentation.  You just have\nto see the existing tests.  Use the newer tests: many of the tests\nhaven't been updated to use the latest/greatest test methods.  See the\nChangeLog in the tests directory for pointers.\n\nThe second serious problem is that it's not parallelizable: it scribbles\nall over its installation directory and so can only test one make at a\ntime.  The third serious problem is that it's not relocatable: the only\nway it works when you build out of the source tree is to create\nsymlinks, which doesn't work on every system and is bogus to boot.  The\nfourth serious problem is that it doesn't create its own sandbox when\nrunning tests, so that if a test forgets to clean up after itself that\ncan impact future tests.\n\n\nBugs\n----\n\nAny complaints/suggestions/bugs/etc. for the test suite itself (as\nopposed to problems in make that the suite finds) should be handled the\nsame way as normal GNU make bugs/problems (see the README for GNU make).\n\n\n                                                Paul D. Smith\n\t\t\t\t\t\tChris Arthur\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/mkshadow",
    "content": "#!/bin/sh\n#\n# Simple script to make a \"shadow\" test directory, using symbolic links.\n# Typically you'd put the shadow in /tmp or another local disk\n#\n# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\ncase \"$1\" in\n  \"\") echo 'Usage: mkshadow <destdir>'; exit 1 ;;\nesac\n\ndest=\"$1\"\n\nif [ ! -d \"$dest\" ]; then\n  echo \"Destination directory \\`$dest' must exist!\"\n  exit 1\nfi\n\nif [ ! -f run_make_tests ]; then\n  echo \"The current directory doesn't appear to contain the test suite!\"\n  exit 1\nfi\n\nsuite=`pwd | sed 's%^/tmp_mnt%%'`\nname=`basename \"$suite\"`\n\nfiles=`echo *`\n\nset -e\n\nmkdir \"$dest/$name\"\ncd \"$dest/$name\"\n\nln -s \"$suite\" .testdir\n\nfor f in $files; do\n  ln -s .testdir/$f .\ndone\n\nrm -rf work\n\necho \"Shadow test suite created in \\`$dest/$name'.\"\nexit 0\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/run_make_tests",
    "content": "#!/bin/sh\nexec perl $0.pl ${1+\"$@\"}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/run_make_tests.pl",
    "content": "#!/usr/bin/env perl\n# -*-perl-*-\n\n# Test driver for the Make test suite\n\n# Usage:  run_make_tests  [testname]\n#                         [-debug]\n#                         [-help]\n#                         [-verbose]\n#                         [-keep]\n#                         [-make <make prog>]\n#                        (and others)\n\n# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,\n# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n$valgrind = 0;              # invoke make with valgrind\n$valgrind_args = '--num-callers=15 --tool=memcheck --leak-check=full';\n$pure_log = undef;\n\nrequire \"test_driver.pl\";\n\n# Some target systems might not have the POSIX module...\n$has_POSIX = eval { require \"POSIX.pm\" };\n\n#$SIG{INT} = sub { print STDERR \"Caught a signal!\\n\"; die @_; };\n\nsub valid_option\n{\n   local($option) = @_;\n\n   if ($option =~ /^-make([-_]?path)?$/)\n   {\n      $make_path = shift @argv;\n      if (!-f $make_path)\n      {\n\t print \"$option $make_path: Not found.\\n\";\n\t exit 0;\n      }\n      return 1;\n   }\n\n   if ($option =~ /^-valgrind$/i) {\n     $valgrind = 1;\n     return 1;\n   }\n\n# This doesn't work--it _should_!  Someone badly needs to fix this.\n#\n#   elsif ($option =~ /^-work([-_]?dir)?$/)\n#   {\n#      $workdir = shift @argv;\n#      return 1;\n#   }\n\n   return 0;\n}\n\n\n# This is an \"all-in-one\" function.  Arguments are as follows:\n#\n#  [0] (string):  The makefile to be tested.  undef means use the last one.\n#  [1] (string):  Arguments to pass to make.\n#  [2] (string):  Answer we should get back.\n#  [3] (integer): Exit code we expect.  A missing code means 0 (success)\n\n$old_makefile = undef;\n\nsub run_make_test\n{\n  local ($makestring, $options, $answer, $err_code) = @_;\n\n  # If the user specified a makefile string, create a new makefile to contain\n  # it.  If the first value is not defined, use the last one (if there is\n  # one).\n\n  if (! defined $makestring) {\n    defined $old_makefile\n      || die \"run_make_test(undef) invoked before run_make_test('...')\\n\";\n    $makefile = $old_makefile;\n  } else {\n    if (! defined($makefile)) {\n      $makefile = &get_tmpfile();\n    }\n\n    # Make sure it ends in a newline.\n    $makestring && $makestring !~ /\\n$/s and $makestring .= \"\\n\";\n\n    # Replace @MAKEFILE@ with the makefile name and @MAKE@ with the path to\n    # make\n    $makestring =~ s/#MAKEFILE#/$makefile/g;\n    $makestring =~ s/#MAKEPATH#/$mkpath/g;\n    $makestring =~ s/#MAKE#/$make_name/g;\n    $makestring =~ s/#PWD#/$pwd/g;\n\n    # Populate the makefile!\n    open(MAKEFILE, \"> $makefile\") || die \"Failed to open $makefile: $!\\n\";\n    print MAKEFILE $makestring;\n    close(MAKEFILE) || die \"Failed to write $makefile: $!\\n\";\n  }\n\n  # Do the same processing on $answer as we did on $makestring.\n\n  $answer && $answer !~ /\\n$/s and $answer .= \"\\n\";\n  $answer =~ s/#MAKEFILE#/$makefile/g;\n  $answer =~ s/#MAKEPATH#/$mkpath/g;\n  $answer =~ s/#MAKE#/$make_name/g;\n  $answer =~ s/#PWD#/$pwd/g;\n\n  &run_make_with_options($makefile, $options, &get_logfile(0), $err_code);\n  &compare_output($answer, &get_logfile(1));\n\n  $old_makefile = $makefile;\n  $makefile = undef;\n}\n\n# The old-fashioned way...\nsub run_make_with_options {\n  local ($filename,$options,$logname,$expected_code) = @_;\n  local($code);\n  local($command) = $make_path;\n\n  $expected_code = 0 unless defined($expected_code);\n\n  # Reset to reflect this one test.\n  $test_passed = 1;\n\n  if ($filename) {\n    $command .= \" -f $filename\";\n  }\n\n  if ($options) {\n    $command .= \" $options\";\n  }\n\n  if ($valgrind) {\n    print VALGRIND \"\\n\\nExecuting: $command\\n\";\n  }\n\n  $code = &run_command_with_output($logname,$command);\n\n  # Check to see if we have Purify errors.  If so, keep the logfile.\n  # For this to work you need to build with the Purify flag -exit-status=yes\n\n  if ($pure_log && -f $pure_log) {\n    if ($code & 0x7000) {\n      $code &= ~0x7000;\n\n      # If we have a purify log, save it\n      $tn = $pure_testname . ($num_of_logfiles ? \".$num_of_logfiles\" : \"\");\n      print(\"Renaming purify log file to $tn\\n\") if $debug;\n      rename($pure_log, \"$tn\")\n        || die \"Can't rename $log to $tn: $!\\n\";\n      ++$purify_errors;\n    } else {\n      unlink($pure_log);\n    }\n  }\n\n  if ($code != $expected_code) {\n    print \"Error running $make_path (expected $expected_code; got $code): $command\\n\";\n    $test_passed = 0;\n    # If it's a SIGINT, stop here\n    if ($code & 127) {\n      print STDERR \"\\nCaught signal \".($code & 127).\"!\\n\";\n      exit($code);\n    }\n    return 0;\n  }\n\n  if ($profile & $vos) {\n    system \"add_profile $make_path\";\n  }\n\n  1;\n}\n\nsub print_usage\n{\n   &print_standard_usage (\"run_make_tests\", \"[-make_path make_pathname]\");\n}\n\nsub print_help\n{\n   &print_standard_help (\"-make_path\",\n          \"\\tYou may specify the pathname of the copy of make to run.\");\n}\n\nsub get_this_pwd {\n  $delete_command = 'rm -f';\n  if ($has_POSIX) {\n    $__pwd = POSIX::getcwd();\n  } elsif ($vos) {\n    $delete_command = \"delete_file -no_ask\";\n    $__pwd = `++(current_dir)`;\n  } else {\n    # No idea... just try using pwd as a last resort.\n    chop ($__pwd = `pwd`);\n  }\n\n  return $__pwd;\n}\n\nsub set_defaults\n{\n   # $profile = 1;\n   $testee = \"GNU make\";\n   $make_path = \"make\";\n   $tmpfilesuffix = \"mk\";\n   $pwd = &get_this_pwd;\n}\n\nsub set_more_defaults\n{\n   local($string);\n   local($index);\n\n   # Make sure we're in the C locale for those systems that support it,\n   # so sorting, etc. is predictable.\n   #\n   $ENV{LANG} = 'C';\n\n   # find the type of the port.  We do this up front to have a single\n   # point of change if it needs to be tweaked.\n   #\n   # This is probably not specific enough.\n   #\n   if ($osname =~ /Windows/i || $osname =~ /MINGW32/i || $osname =~ /CYGWIN_NT/i) {\n     $port_type = 'W32';\n   }\n   # Bleah, the osname is so variable on DOS.  This kind of bites.\n   # Well, as far as I can tell if we check for some text at the\n   # beginning of the line with either no spaces or a single space, then\n   # a D, then either \"OS\", \"os\", or \"ev\" and a space.  That should\n   # match and be pretty specific.\n   elsif ($osname =~ /^([^ ]*|[^ ]* [^ ]*)D(OS|os|ev) /) {\n     $port_type = 'DOS';\n   }\n   # Check for OS/2\n   elsif ($osname =~ m%OS/2%) {\n     $port_type = 'OS/2';\n   }\n   # Everything else, right now, is UNIX.  Note that we should integrate\n   # the VOS support into this as well and get rid of $vos; we'll do\n   # that next time.\n   else {\n     $port_type = 'UNIX';\n   }\n\n   # On DOS/Windows system the filesystem apparently can't track\n   # timestamps with second granularity (!!).  Change the sleep time\n   # needed to force a file to be considered \"old\".\n   $wtime = $port_type eq 'UNIX' ? 1 : $port_type eq 'OS/2' ? 2 : 4;\n\n   print \"Port type: $port_type\\n\" if $debug;\n   print \"Make path: $make_path\\n\" if $debug;\n\n   # Find the full pathname of Make.  For DOS systems this is more\n   # complicated, so we ask make itself.\n   my $mk = `sh -c 'echo \"all:;\\@echo \\\\\\$(MAKE)\" | $make_path -f-'`;\n   chop $mk;\n   $mk or die \"FATAL ERROR: Cannot determine the value of \\$(MAKE):\\n\n'echo \\\"all:;\\@echo \\\\\\$(MAKE)\\\" | $make_path -f-' failed!\\n\";\n   $make_path = $mk;\n   print \"Make\\t= `$make_path'\\n\" if $debug;\n\n   $string = `$make_path -v -f /dev/null 2> /dev/null`;\n\n   $string =~ /^(GNU Make [^,\\n]*)/;\n   $testee_version = \"$1\\n\";\n\n   $string = `sh -c \"$make_path -f /dev/null 2>&1\"`;\n   if ($string =~ /(.*): \\*\\*\\* No targets\\.  Stop\\./) {\n     $make_name = $1;\n   }\n   else {\n     if ($make_path =~ /$pathsep([^\\n$pathsep]*)$/) {\n       $make_name = $1;\n     }\n     else {\n       $make_name = $make_path;\n     }\n   }\n\n   # prepend pwd if this is a relative path (ie, does not\n   # start with a slash, but contains one).  Thanks for the\n   # clue, Roland.\n\n   if (index ($make_path, \":\") != 1 && index ($make_path, \"/\") > 0)\n   {\n      $mkpath = \"$pwd$pathsep$make_path\";\n   }\n   else\n   {\n      $mkpath = $make_path;\n   }\n\n   # Get Purify log info--if any.\n\n   if (exists $ENV{PURIFYOPTIONS}\n       && $ENV{PURIFYOPTIONS} =~ /.*-logfile=([^ ]+)/) {\n     $pure_log = $1 || '';\n     $pure_log =~ s/%v/$make_name/;\n     $purify_errors = 0;\n   }\n\n   $string = `sh -c \"$make_path -j 2 -f /dev/null 2>&1\"`;\n   if ($string =~ /not supported/) {\n     $parallel_jobs = 0;\n   }\n   else {\n     $parallel_jobs = 1;\n   }\n\n   # Set up for valgrind, if requested.\n\n   if ($valgrind) {\n     open(VALGRIND, \"> valgrind.out\")\n       || die \"Cannot open valgrind.out: $!\\n\";\n     #  -q --leak-check=yes\n     exists $ENV{VALGRIND_ARGS} and $valgrind_args = $ENV{VALGRIND_ARGS};\n     $make_path = \"valgrind --log-fd=\".fileno(VALGRIND).\" $valgrind_args $make_path\";\n     # F_SETFD is 2\n     fcntl(VALGRIND, 2, 0) or die \"fcntl(setfd) failed: $!\\n\";\n     system(\"echo Starting on `date` 1>&\".fileno(VALGRIND));\n     print \"Enabled valgrind support.\\n\";\n   }\n}\n\nsub setup_for_test\n{\n  $makefile = &get_tmpfile;\n  if (-f $makefile) {\n    unlink $makefile;\n  }\n\n  # Get rid of any Purify logs.\n  if ($pure_log) {\n    ($pure_testname = $testname) =~ tr,/,_,;\n    $pure_testname = \"$pure_log.$pure_testname\";\n    system(\"rm -f $pure_testname*\");\n    print(\"Purify testfiles are: $pure_testname*\\n\") if $debug;\n  }\n}\n\nexit !&toplevel;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/comments",
    "content": "$description = \"The following test creates a makefile to test comments\\n\"\n              .\"and comment continuation to the next line using a \\n\"\n              .\"backslash within makefiles.\";\n\n$details = \"To test comments within a makefile, a semi-colon was placed \\n\"\n          .\"after a comment was started.  This should not be reported as\\n\"\n          .\"an error since it is within a comment.  We then continue the \\n\"\n          .\"comment to the next line using a backslash.  To test whether\\n\"\n          .\"the comment really continued, we place an echo command with some\\n\"\n          .\"text on the line which should never execute since it should be \\n\"\n          .\"within a comment\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<\\EOF;\n# Test comment vs semicolon parsing and line continuation\ntarget: # this ; is just a comment \\\n\t@echo This is within a comment. \n\t@echo There should be no errors for this makefile.\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"There should be no errors for this makefile.\\n\";\n\n# COMPARE RESULTS\n\n&compare_output($answer,&get_logfile(1))\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/conditionals",
    "content": "#                                                                    -*-perl-*-\n$description = \"Check GNU make conditionals.\";\n\n$details = \"Attempt various different flavors of GNU make conditionals.\";\n\nrun_make_test('\narg1 = first\narg2 = second\narg3 = third\narg4 = cc\narg5 = second\n\nall:\nifeq ($(arg1),$(arg2))\n\t@echo arg1 equals arg2\nelse\n\t@echo arg1 NOT equal arg2\nendif\n\nifeq \\'$(arg2)\\' \"$(arg5)\"\n\t@echo arg2 equals arg5\nelse\n\t@echo arg2 NOT equal arg5\nendif\n\nifneq \\'$(arg3)\\' \\'$(arg4)\\'\n\t@echo arg3 NOT equal arg4\nelse\n\t@echo arg3 equal arg4\nendif\n\nifndef undefined\n\t@echo variable is undefined\nelse\n\t@echo variable undefined is defined\nendif\nifdef arg4\n\t@echo arg4 is defined\nelse\n\t@echo arg4 is NOT defined\nendif',\n              '',\n              'arg1 NOT equal arg2\narg2 equals arg5\narg3 NOT equal arg4\nvariable is undefined\narg4 is defined');\n\n\n# Test expansion of variables inside ifdef.\n\nrun_make_test('\nfoo = 1\n\nFOO = foo\nF = f\n\nDEF = no\nDEF2 = no\n\nifdef $(FOO)\nDEF = yes\nendif\n\nifdef $(F)oo\nDEF2 = yes\nendif\n\n\nDEF3 = no\nFUNC = $1\nifdef $(call FUNC,DEF)3\n  DEF3 = yes\nendif\n\nall:; @echo DEF=$(DEF) DEF2=$(DEF2) DEF3=$(DEF3)',\n              '',\n              'DEF=yes DEF2=yes DEF3=yes');\n\n\n# Test all the different \"else if...\" constructs\n\nrun_make_test('\narg1 = first\narg2 = second\narg3 = third\narg4 = cc\narg5 = fifth\n\nresult =\n\nifeq ($(arg1),$(arg2))\n  result += arg1 equals arg2\nelse ifeq \\'$(arg2)\\' \"$(arg5)\"\n  result += arg2 equals arg5\nelse ifneq \\'$(arg3)\\' \\'$(arg3)\\'\n  result += arg3 NOT equal arg4\nelse ifndef arg5\n  result += variable is undefined\nelse ifdef undefined\n  result += arg4 is defined\nelse\n  result += success\nendif\n\n\nall: ; @echo $(result)',\n              '',\n              'success');\n\n\n# Test some random \"else if...\" construct nesting\n\nrun_make_test('\narg1 = first\narg2 = second\narg3 = third\narg4 = cc\narg5 = second\n\nifeq ($(arg1),$(arg2))\n  $(info failed 1)\nelse ifeq \\'$(arg2)\\' \"$(arg2)\"\n  ifdef undefined\n    $(info failed 2)\n  else\n    $(info success)\n  endif\nelse ifneq \\'$(arg3)\\' \\'$(arg3)\\'\n  $(info failed 3)\nelse ifdef arg5\n  $(info failed 4)\nelse ifdef undefined\n  $(info failed 5)\nelse\n  $(info failed 6)\nendif\n\n.PHONY: all\nall: ; @:',\n              '',\n              'success');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/default_names",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"This script tests to make sure that Make looks for\ndefault makefiles in the correct order (GNUmakefile,makefile,Makefile)\";\n\n# Create a makefile called \"GNUmakefile\"\n$makefile = \"GNUmakefile\";\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE \"FIRST: ; \\@echo It chose GNUmakefile\\n\";\nclose(MAKEFILE);\n\n# DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile.\n# Just test what we can here (avoid Makefile versus makefile test).\n\nif ($port_type eq 'UNIX') {\n  # Create another makefile called \"makefile\"\n  open(MAKEFILE,\"> makefile\");\n  print MAKEFILE \"SECOND: ; \\@echo It chose makefile\\n\";\n  close(MAKEFILE);\n}\n\n# Create another makefile called \"Makefile\"\nopen(MAKEFILE,\"> Makefile\");\nprint MAKEFILE \"THIRD: ; \\@echo It chose Makefile\\n\";\nclose(MAKEFILE);\n\n\n&run_make_with_options(\"\",\"\",&get_logfile);\n&compare_output(\"It chose GNUmakefile\\n\",&get_logfile(1));\nunlink $makefile;\n\nif ($port_type eq 'UNIX') {\n  &run_make_with_options(\"\",\"\",&get_logfile);\n  &compare_output(\"It chose makefile\\n\",&get_logfile(1));\n  unlink \"makefile\";\n}\n\n&run_make_with_options(\"\",\"\",&get_logfile);\n&compare_output(\"It chose Makefile\\n\",&get_logfile(1));\nunlink \"Makefile\";\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/double_colon",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test handling of double-colon rules.\";\n\n$details = \"\\\nWe test these features:\n\n  - Multiple commands for the same (double-colon) target\n  - Different prerequisites for targets: only out-of-date\n    ones are rebuilt.\n  - Double-colon targets that aren't the goal target.\n\nThen we do the same thing for parallel builds: double-colon\ntargets should always be built serially.\";\n\n# The Contents of the MAKEFILE ...\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\n\nall: baz\n\nfoo:: f1.h ; @echo foo FIRST\nfoo:: f2.h ; @echo foo SECOND\n\nbar:: ; @echo aaa; sleep 1; echo aaa done\nbar:: ; @echo bbb\n\nbaz:: ; @echo aaa\nbaz:: ; @echo bbb\n\nbiz:: ; @echo aaa\nbiz:: two ; @echo bbb\n\ntwo: ; @echo two\n\nf1.h f2.h: ; @echo $@\n\nd :: ; @echo ok\nd :: d ; @echo oops\n\nEOF\n\nclose(MAKEFILE);\n\n# TEST 0: A simple double-colon rule that isn't the goal target.\n\n&run_make_with_options($makefile, \"all\", &get_logfile, 0);\n$answer = \"aaa\\nbbb\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 1: As above, in parallel\n\nif ($parallel_jobs) {\n  &run_make_with_options($makefile, \"-j10 all\", &get_logfile, 0);\n  $answer = \"aaa\\nbbb\\n\";\n  &compare_output($answer, &get_logfile(1));\n}\n\n# TEST 2: A simple double-colon rule that is the goal target\n\n&run_make_with_options($makefile, \"bar\", &get_logfile, 0);\n$answer = \"aaa\\naaa done\\nbbb\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 3: As above, in parallel\n\nif ($parallel_jobs) {\n  &run_make_with_options($makefile, \"-j10 bar\", &get_logfile, 0);\n  $answer = \"aaa\\naaa done\\nbbb\\n\";\n  &compare_output($answer, &get_logfile(1));\n}\n\n# TEST 4: Each double-colon rule is supposed to be run individually\n\n&utouch(-5, 'f2.h');\n&touch('foo');\n\n&run_make_with_options($makefile, \"foo\", &get_logfile, 0);\n$answer = \"f1.h\\nfoo FIRST\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 5: Again, in parallel.\n\nif ($parallel_jobs) {\n  &run_make_with_options($makefile, \"-j10 foo\", &get_logfile, 0);\n  $answer = \"f1.h\\nfoo FIRST\\n\";\n  &compare_output($answer, &get_logfile(1));\n}\n\n# TEST 6: Each double-colon rule is supposed to be run individually\n\n&utouch(-5, 'f1.h');\nunlink('f2.h');\n&touch('foo');\n\n&run_make_with_options($makefile, \"foo\", &get_logfile, 0);\n$answer = \"f2.h\\nfoo SECOND\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 7: Again, in parallel.\n\nif ($parallel_jobs) {\n  &run_make_with_options($makefile, \"-j10 foo\", &get_logfile, 0);\n  $answer = \"f2.h\\nfoo SECOND\\n\";\n  &compare_output($answer, &get_logfile(1));\n}\n\n# TEST 8: Test circular dependency check; PR/1671\n\n&run_make_with_options($makefile, \"d\", &get_logfile, 0);\n$answer = \"ok\\n$make_name: Circular d <- d dependency dropped.\\noops\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 8: I don't grok why this is different than the above, but it is...\n#\n# Hmm... further testing indicates this might be timing-dependent?\n#\n#if ($parallel_jobs) {\n#  &run_make_with_options($makefile, \"-j10 biz\", &get_logfile, 0);\n#  $answer = \"aaa\\ntwo\\nbbb\\n\";\n#  &compare_output($answer, &get_logfile(1));\n#}\n\nunlink('foo','f1.h','f2.h');\n\n\n# TEST 9: make sure all rules in s double colon family get executed\n#         (Savannah bug #14334).\n#\n\n&touch('one');\n&touch('two');\n\nrun_make_test('\n.PHONY: all\nall: result\n\nresult:: one\n\t@echo $^ >>$@\n\t@echo $^\n\nresult:: two\n\t@echo $^ >>$@\n\t@echo $^\n\n',\n'',\n'one\ntwo');\n\nunlink('result','one','two');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/echoing",
    "content": "$description = \"The following test creates a makefile to test command \\n\"\n              .\"echoing.  It tests that when a command line starts with \\n\"\n              .\"a '\\@', the echoing of that line is suppressed.  It also \\n\"\n              .\"tests the -n option which tells make to ONLY echo the  \\n\"\n              .\"commands and no execution happens.  In this case, even \\n\"\n              .\"the commands with '\\@' are printed. Lastly, it tests the \\n\"\n              .\"-s flag which tells make to prevent all echoing, as if \\n\"\n              .\"all commands started with a '\\@'.\";\n\n$details = \"This test is similar to the 'clean' test except that a '\\@' has\\n\"\n          .\"been placed in front of the delete command line.  Four tests \\n\"\n          .\"are run here.  First, make is run normally and the first echo\\n\"\n          .\"command should be executed.  In this case there is no '\\@' so \\n\"\n          .\"we should expect make to display the command AND display the \\n\"\n          .\"echoed message.  Secondly, make is run with the clean target, \\n\"\n          .\"but since there is a '\\@' at the beginning of the command, we\\n\"\n          .\"expect no output; just the deletion of a file which we check \\n\"\n          .\"for.  Third, we give the clean target again except this time\\n\"\n          .\"we give make the -n option.  We now expect the command to be \\n\"\n          .\"displayed but not to be executed.  In this case we need only \\n\"\n          .\"to check the output since an error message would be displayed\\n\"\n          .\"if it actually tried to run the delete command again and the \\n\"\n          .\"file didn't exist. Lastly, we run the first test again with \\n\"\n          .\"the -s option and check that make did not echo the echo \\n\"\n          .\"command before printing the message.\";\n\n$example = \"EXAMPLE_FILE\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"all: \\n\";\nprint MAKEFILE \"\\techo This makefile did not clean the dir... good\\n\";\nprint MAKEFILE \"clean: \\n\";\nprint MAKEFILE \"\\t\\@$delete_command $example\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch($example);\n\n# TEST #1\n# -------\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n$answer = \"echo This makefile did not clean the dir... good\\n\"\n         .\"This makefile did not clean the dir... good\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #2\n# -------\n\n&run_make_with_options($makefile,\"clean\",&get_logfile,0);\nif (-f $example) {\n  $test_passed = 0;\n}\n&compare_output('',&get_logfile(1));\n\n# TEST #3\n# -------\n\n&run_make_with_options($makefile,\"-n clean\",&get_logfile,0);\n$answer = \"$delete_command $example\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #4\n# -------\n\n&run_make_with_options($makefile,\"-s\",&get_logfile,0);\n$answer = \"This makefile did not clean the dir... good\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/errors",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following tests the -i option and the '-' in front of \\n\"\n              .\"commands to test that make ignores errors in these commands\\n\"\n              .\"and continues processing.\";\n\n$details = \"This test runs two makes.  The first runs on a target with a \\n\"\n          .\"command that has a '-' in front of it (and a command that is \\n\"\n          .\"intended to fail) and then a delete command after that is \\n\"\n          .\"intended to succeed.  If make ignores the failure of the first\\n\"\n          .\"command as it is supposed to, then the second command should \\n\"\n          .\"delete a file and this is what we check for.  The second make\\n\"\n          .\"that is run in this test is identical except that the make \\n\"\n          .\"command is given with the -i option instead of the '-' in \\n\"\n          .\"front of the command.  They should run the same. \";\n\nif ($vos)\n{\n   $rm_command = \"delete_file\";\n}\nelse\n{\n   $rm_command = \"rm\";\n}\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"clean:\\n\"\n              .\"\\t-$rm_command cleanit\\n\"\n              .\"\\t$rm_command foo\\n\"\n\t      .\"clean2: \\n\"\n              .\"\\t$rm_command cleanit\\n\"\n              .\"\\t$rm_command foo\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch(\"foo\");\n\nunlink(\"cleanit\");\n$cleanit_error = `sh -c \"$rm_command cleanit 2>&1\"`;\n$delete_error_code = $? >> 8;\n\n# TEST #1\n# -------\n\n$answer = \"$rm_command cleanit\\n\"\n         . $cleanit_error\n         .\"$make_name: [clean] Error $delete_error_code (ignored)\\n\"\n         .\"$rm_command foo\\n\";\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# If make acted as planned, it should ignore the error from the first\n# command in the target and execute the second which deletes the file \"foo\"\n# This file, therefore, should not exist if the test PASSES.\nif (-f \"foo\") {\n  $test_passed = 0;\n}\n\n# The output for this on VOS is too hard to replicate, so we only check it\n# on unix.\nif (!$vos)\n{\n   &compare_output($answer,&get_logfile(1));\n}\n\n\n&touch(\"foo\");\n\n# TEST #2\n# -------\n\n$answer = \"$rm_command cleanit\\n\"\n         . $cleanit_error\n         .\"$make_name: [clean2] Error $delete_error_code (ignored)\\n\"\n         .\"$rm_command foo\\n\";\n\n&run_make_with_options($makefile,\"clean2 -i\",&get_logfile);\n\nif (-f \"foo\") {\n  $test_passed = 0;\n}\n\nif (!$vos) {\n   &compare_output($answer,&get_logfile(1));\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/escape",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test various types of escaping in makefiles.\";\n\n$details = \"\\\nMake sure that escaping of `:' works in target names.\nMake sure escaping of whitespace works in target names.\nMake sure that escaping of '#' works.\";\n\n\nclose(MAKEFILE);\n\n\n# TEST 1\n\nrun_make_test('\n$(path)foo : ; @echo \"touch ($@)\"\n\nfoo\\ bar: ; @echo \"touch ($@)\"\n\nsharp: foo\\#bar.ext\nfoo\\#bar.ext: ; @echo \"foo#bar.ext = ($@)\"',\n\t      '',\n\t      'touch (foo)');\n\n# TEST 2: This one should fail, since the \":\" is unquoted.\n\nrun_make_test(undef,\n\t      'path=pre:',\n\t      \"#MAKEFILE#:2: *** target pattern contains no `%'.  Stop.\",\n\t      512);\n\n# TEST 3: This one should work, since we escape the \":\".\n\nrun_make_test(undef,\n\t      \"'path=pre\\\\:'\",\n\t      'touch (pre:foo)');\n\n# TEST 4: This one should fail, since the escape char is escaped.\n\nrun_make_test(undef,\n\t      \"'path=pre\\\\\\\\:'\",\n\t      \"#MAKEFILE#:2: *** target pattern contains no `%'.  Stop.\",\n\t      512);\n\n# TEST 5: This one should work\n\nrun_make_test(undef,\n\t      \"'foo bar'\",\n\t      'touch (foo bar)');\n\n# TEST 6: Test escaped comments\n\nrun_make_test(undef,\n\t      'sharp',\n\t      'foo#bar.ext = (foo#bar.ext)');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/export",
    "content": "#                                                                    -*-perl-*-\n$description = \"Check GNU make export/unexport commands.\";\n\n$details = \"\";\n\n# The test driver cleans out our environment for us so we don't have to worry\n# about that here.\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOMAKE';\n\nFOO = foo\nBAR = bar\nBOZ = boz\n\nexport BAZ = baz\nexport BOZ\n\nBITZ = bitz\nBOTZ = botz\n\nexport BITZ BOTZ\nunexport BOTZ\n\nifdef EXPORT_ALL\nexport\nendif\n\nifdef UNEXPORT_ALL\nunexport\nendif\n\nifdef EXPORT_ALL_PSEUDO\n.EXPORT_ALL_VARIABLES:\nendif\n\nall:\n\t@echo \"FOO=$(FOO) BAR=$(BAR) BAZ=$(BAZ) BOZ=$(BOZ) BITZ=$(BITZ) BOTZ=$(BOTZ)\"\n\t@echo \"FOO=$$FOO BAR=$$BAR BAZ=$$BAZ BOZ=$$BOZ BITZ=$$BITZ BOTZ=$$BOTZ\"\n\nEOMAKE\n\nclose(MAKEFILE);\n\n# TEST 0: basics\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# TEST 1: make sure vars inherited from the parent are exported\n\n$extraENV{FOO} = 1;\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO=foo BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# TEST 2: global export.  Explicit unexport takes precedence.\n\n&run_make_with_options($makefile,\"EXPORT_ALL=1\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# TEST 3: global unexport.  Explicit export takes precedence.\n\n&run_make_with_options($makefile,\"UNEXPORT_ALL=1\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# TEST 4: both: in the above makefile the unexport comes last so that rules.\n\n&run_make_with_options($makefile,\"EXPORT_ALL=1 UNEXPORT_ALL=1\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# TEST 5: test the pseudo target.\n\n&run_make_with_options($makefile,\"EXPORT_ALL_PSEUDO=1\",&get_logfile,0);\n\n$answer = \"FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz\nFOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST 6: Test the expansion of variables inside export\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\n\nfoo = f-ok\nbar = b-ok\n\nFOO = foo\nF = f\n\nBAR = bar\nB = b\n\nexport $(FOO)\nexport $(B)ar\n\nall:\n\t@echo foo=$(foo) bar=$(bar)\n\t@echo foo=$$foo bar=$$bar\n\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2,\"\",&get_logfile,0);\n$answer = \"foo=f-ok bar=b-ok\\nfoo=f-ok bar=b-ok\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST 7: Test the expansion of variables inside unexport\n\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile3\");\n\nprint MAKEFILE <<'EOF';\n\nfoo = f-ok\nbar = b-ok\n\nFOO = foo\nF = f\n\nBAR = bar\nB = b\n\nexport foo bar\n\nunexport $(FOO)\nunexport $(B)ar\n\nall:\n\t@echo foo=$(foo) bar=$(bar)\n\t@echo foo=$$foo bar=$$bar\n\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile3,\"\",&get_logfile,0);\n$answer = \"foo=f-ok bar=b-ok\\nfoo= bar=\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST 7: Test exporting multiple variables on the same line\n\n$makefile4 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile4\");\n\nprint MAKEFILE <<'EOF';\n\nA = a\nB = b\nC = c\nD = d\nE = e\nF = f\nG = g\nH = h\nI = i\nJ = j\n\nSOME = A B C\n\nexport F G H I J\n\nexport D E $(SOME)\n\nall: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile4,\"\",&get_logfile,0);\n$answer = \"A=a B=b C=c D=d E=e F=f G=g H=h I=i J=j\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST 8: Test unexporting multiple variables on the same line\n\n$makefile5 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile5\");\n\nprint MAKEFILE <<'EOF';\n\nA = a\nB = b\nC = c\nD = d\nE = e\nF = f\nG = g\nH = h\nI = i\nJ = j\n\nSOME = A B C\n\nunexport F G H I J\n\nunexport D E $(SOME)\n\nall: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J\nEOF\n\nclose(MAKEFILE);\n\n@extraENV{qw(A B C D E F G H I J)} = qw(1 2 3 4 5 6 7 8 9 10);\n\n&run_make_with_options($makefile5,\"\",&get_logfile,0);\n$answer = \"A= B= C= D= E= F= G= H= I= J=\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/include",
    "content": "#                                     -*-mode: perl; rm-trailing-spaces: nil-*-\n\n$description = \"Test various forms of the GNU make `include' command.\";\n\n$details = \"\\\nTest include, -include, sinclude and various regressions involving them.\nTest extra whitespace at the end of the include, multiple -includes and\nsincludes (should not give an error) and make sure that errors are reported\nfor targets that were also -included.\";\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The contents of the Makefile ...\n\nprint MAKEFILE <<EOF;\n\\#Extra space at the end of the following file name\ninclude $makefile2\nall: ; \\@echo There should be no errors for this makefile.\n\n-include nonexistent.mk\n-include nonexistent.mk\nsinclude nonexistent.mk\nsinclude nonexistent-2.mk\n-include makeit.mk\nsinclude makeit.mk\n\nerror: makeit.mk\nEOF\n\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile2\");\n\nprint MAKEFILE \"ANOTHER: ; \\@echo This is another included makefile\\n\";\n\nclose(MAKEFILE);\n\n# Create the answer to what should be produced by this Makefile\n&run_make_with_options($makefile, \"all\", &get_logfile);\n$answer = \"There should be no errors for this makefile.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n&run_make_with_options($makefile, \"ANOTHER\", &get_logfile);\n$answer = \"This is another included makefile\\n\";\n&compare_output($answer, &get_logfile(1));\n\n$makefile = undef;\n\n# Try to build the \"error\" target; this will fail since we don't know\n# how to create makeit.mk, but we should also get a message (even though\n# the -include suppressed it during the makefile read phase, we should\n# see one during the makefile run phase).\n\nrun_make_test\n  ('\n-include foo.mk\nerror: foo.mk ; @echo $@\n',\n   '',\n   \"#MAKE#: *** No rule to make target `foo.mk', needed by `error'.  Stop.\\n\",\n   512\n  );\n\n# Make sure that target-specific variables don't impact things.  This could\n# happen because a file record is created when a target-specific variable is\n# set.\n\nrun_make_test\n  ('\nbar.mk: foo := baz\n-include bar.mk\nhello: ; @echo hello\n',\n   '',\n   \"hello\\n\"\n  );\n\n\n# Test inheritance of dontcare flag when rebuilding makefiles.\n#\nrun_make_test('\n.PHONY: all\nall: ; @:\n\n-include foo\n\nfoo: bar; @:\n', '', '');\n\n1;\n\n\n# Make sure that we don't die when the command fails but we dontcare.\n# (Savannah bug #13216).\n#\nrun_make_test('\n.PHONY: all\nall:; @:\n\n-include foo\n\nfoo: bar; @:\n\nbar:; @exit 1\n', '', '');\n\n# Check include, sinclude, -include with no filenames.\n# (Savannah bug #1761).\n\nrun_make_test('\n.PHONY: all\nall:; @:\ninclude\n-include\nsinclude', '', '');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/mult_rules",
    "content": "$description = \"\\\nThe following test creates a makefile to test the presence\nof multiple rules for one target.  One file can be the\ntarget of several rules if at most one rule has commands;\nthe other rules can only have dependencies.\";\n\n$details = \"\\\nThe makefile created in this test contains two hardcoded rules\nfor foo.o and bar.o.  It then gives another multiple target rule\nwith the same names as above but adding more dependencies.\nAdditionally, another variable extradeps is listed as a\ndependency but is defined to be null.  It can however be defined\non the make command line as extradeps=extra.h which adds yet\nanother dependency to the targets.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<EOF;\nobjects = foo.o bar.o\nfoo.o : defs.h\nbar.o : defs.h test.h\nextradeps = \n\\$(objects) : config.h \\$(extradeps) \n\\t\\@echo EXTRA EXTRA\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch(\"defs.h\",\"test.h\",\"config.h\");\n\nif ($vos)\n{\n   $error_code = 3307;\n}\nelse \n{\n   $error_code = 512;\n}\n\n&run_make_with_options($makefile,\n                       \"extradeps=extra.h\",\n                       &get_logfile,\n                       $error_code);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"$make_name: *** No rule to make target `extra.h', needed by `foo.o'.  Stop.\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #2\n# -------\n\n&touch(\"extra.h\");\n\n&run_make_with_options($makefile,\n                       \"extradeps=extra.h\",\n                       &get_logfile,\n                       0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"EXTRA EXTRA\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\nunlink(\"defs.h\",\"test.h\",\"config.h\",\"extra.h\");\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/mult_targets",
    "content": "$description = \"The following test creates a makefile to test that a \\n \"\n              .\"rule with multiple targets is equivalent to writing \\n\"\n              .\"many rules, each with one target, and all identical aside\\n\"\n              .\"from that.\";\n\n$details = \"A makefile is created with one rule and two targets.  Make \\n\"\n          .\"is called twice, once for each target, and the output which \\n\"\n          .\"contains the target name with \\$@ is looked at for the changes.\\n\"\n          .\"This test also tests the substitute function by replacing \\n\"\n          .\"the word output with nothing in the target name giving either\\n\"\n          .\"an output of \\\"I am little\\\" or \\\"I am big\\\"\";  \n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"bigoutput littleoutput: test.h\\n\";\nprint MAKEFILE \"\\t\\@echo I am \\$(subst output,,\\$@)\\n\";  \n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch(\"test.h\");\n\n&run_make_with_options($makefile,\"bigoutput\",&get_logfile);\n\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"I am big\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n&run_make_with_options($makefile,\"littleoutput\",&get_logfile);\n$answer = \"I am little\\n\";\n&compare_output($answer,&get_logfile(1));\n\nunlink \"test.h\";\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/order_only",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test order-only prerequisites.\";\n\n$details = \"\\\nCreate makefiles with various combinations of normal and order-only\nprerequisites and ensure they behave properly.  Test the \\$| variable.\";\n\n# TEST #0 -- Basics\n\nrun_make_test('\n%r: | baz ; @echo $< $^ $|\nbar: foo\nfoo:;@:\nbaz:;@:',\n              '', \"foo foo baz\\n\");\n\n# TEST #1 -- First try: the order-only prereqs need to be built.\n\nrun_make_test(q!\nfoo: bar | baz\n\t@echo '$$^ = $^'\n\t@echo '$$| = $|'\n\ttouch $@\n\n.PHONY: baz\n\nbar baz:\n\ttouch $@!,\n              '', \"touch bar\\ntouch baz\\n\\$^ = bar\\n\\$| = baz\\ntouch foo\\n\");\n\n\n# TEST #2 -- now we do it again: baz is PHONY but foo should _NOT_ be updated\n\nrun_make_test(undef, '', \"touch baz\\n\");\n\nunlink(qw(foo bar baz));\n\n# TEST #3 -- Make sure the order-only prereq was promoted to normal.\n\nrun_make_test(q!\nfoo: bar | baz\n\t@echo '$$^ = $^'\n\t@echo '$$| = $|'\n\ttouch $@\n\nfoo: baz\n\n.PHONY: baz\n\nbar baz:\n\ttouch $@!,\n              '', \"touch bar\\ntouch baz\\n\\$^ = bar baz\\n\\$| = \\ntouch foo\\n\");\n\n\n# TEST #4 -- now we do it again\n\nrun_make_test(undef, '', \"touch baz\\n\\$^ = bar baz\\n\\$| = \\ntouch foo\\n\");\n\nunlink(qw(foo bar baz));\n\n# Test empty normal prereqs\n\n# TEST #5 -- make sure the parser was correct.\n\nrun_make_test(q!\nfoo:| baz\n\t@echo '$$^ = $^'\n\t@echo '$$| = $|'\n\ttouch $@\n\n.PHONY: baz\n\nbaz:\n\ttouch $@!,\n              '', \"touch baz\\n\\$^ = \\n\\$| = baz\\ntouch foo\\n\");\n\n# TEST #6 -- now we do it again: this time foo won't be built\n\nrun_make_test(undef, '', \"touch baz\\n\");\n\nunlink(qw(foo baz));\n\n# Test order-only in pattern rules\n\n# TEST #7 -- make sure the parser was correct.\n\nrun_make_test(q!\n%.w : %.x | baz\n\t@echo '$$^ = $^'\n\t@echo '$$| = $|'\n\ttouch $@\n\nall: foo.w\n\n.PHONY: baz\nfoo.x baz:\n\ttouch $@!,\n              '',\n              \"touch foo.x\\ntouch baz\\n\\$^ = foo.x\\n\\$| = baz\\ntouch foo.w\\n\");\n\n# TEST #8 -- now we do it again: this time foo.w won't be built\n\nrun_make_test(undef, '', \"touch baz\\n\");\n\nunlink(qw(foo.w foo.x baz));\n\n# TEST #9 -- make sure that $< is set correctly in the face of order-only\n# prerequisites in pattern rules.\n\nrun_make_test('\n%r: | baz ; @echo $< $^ $|\nbar: foo\nfoo:;@:\nbaz:;@:',\n              '', \"foo foo baz\\n\");\n\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/override",
    "content": "$description = \"The following test creates a makefile to ...\";\n\n$details = \"\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"override define foo\\n\"\n              .\"\\@echo First comes the definition.\\n\"\n              .\"\\@echo Then comes the override.\\n\"\n              .\"endef\\n\"\n              .\"all: \\n\"\n              .\"\\t\\$(foo)\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"foo=Hello\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"First comes the definition.\\n\"\n         .\"Then comes the override.\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/parallelism",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test parallelism (-j) option.\";\n\n\n$details = \"This test creates a makefile with two double-colon default\nrules.  The first rule has a series of sleep and echo commands\nintended to run in series.  The second and third have just an\necho statement.  When make is called in this test, it is given\nthe -j option with a value of 4.  This tells make that it may\nstart up to four jobs simultaneously.  In this case, since the\nfirst command is a sleep command, the output of the second\nand third commands will appear before the first if indeed\nmake is running all of these commands in parallel.\";\n\nif (!$parallel_jobs) {\n  return -1;\n}\n\nif ($vos) {\n  $sleep_command = \"sleep -seconds\";\n}\nelse {\n  $sleep_command = \"sleep\";\n}\n\n\nrun_make_test(\"\nall : def_1 def_2 def_3\ndef_1 : ; \\@echo ONE; $sleep_command 3 ; echo TWO\ndef_2 : ; \\@$sleep_command 2 ; echo THREE\ndef_3 : ; \\@$sleep_command 1 ; echo FOUR\",\n              '-j4', \"ONE\\nFOUR\\nTHREE\\nTWO\");\n\n# Test parallelism with included files.  Here we sleep/echo while\n# building the included files, to test that they are being built in\n# parallel.\nrun_make_test(\"\nall: 1 2; \\@echo success\n-include 1.inc 2.inc\n1.inc: ; \\@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \\@echo ONE; $sleep_command 2; echo TWO' > \\$\\@\n2.inc: ; \\@$sleep_command 1; echo THREE.inc; echo '2: ; \\@$sleep_command 1; echo THREE' > \\$\\@\",\n              \"-j4\",\n              \"ONE.inc\\nTHREE.inc\\nTWO.inc\\nONE\\nTHREE\\nTWO\\nsuccess\\n\");\n\nunlink('1.inc', '2.inc');\n\n\n# Test parallelism with included files--this time recurse first and make\n# sure the jobserver works.\nrun_make_test(\"\nrecurse: ; \\@\\$(MAKE) --no-print-directory -f #MAKEFILE# INC=yes all\nall: 1 2; \\@echo success\n\nINC = no\nifeq (\\$(INC),yes)\n-include 1.inc 2.inc\nendif\n\n1.inc: ; \\@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \\@echo ONE; $sleep_command 2; echo TWO' > \\$\\@\n2.inc: ; \\@$sleep_command 1; echo THREE.inc; echo '2: ; \\@$sleep_command 1; echo THREE' > \\$\\@\",\n              \"-j4\",\n              \"ONE.inc\\nTHREE.inc\\nTWO.inc\\nONE\\nTHREE\\nTWO\\nsuccess\\n\");\n\nunlink('1.inc', '2.inc');\n\n# Grant Taylor reports a problem where tokens can be lost (not written back\n# to the pipe when they should be): this happened when there is a $(shell ...)\n# function in an exported recursive variable.  I added some code to check\n# for this situation and print a message if it occurred.  This test used\n# to trigger this code when I added it but no longer does after the fix.\n\nrun_make_test(\"\nexport HI = \\$(shell \\$(\\$\\@.CMD))\nfirst.CMD = echo hi\nsecond.CMD = $sleep_command 4; echo hi\n\n.PHONY: all first second\nall: first second\n\nfirst second: ; \\@echo \\$\\@; $sleep_command 1; echo \\$\\@\",\n              '-j2', \"first\\nfirst\\nsecond\\nsecond\");\n\n# Michael Matz <matz@suse.de> reported a bug where if make is running in\n# parallel without -k and two jobs die in a row, but not too close to each\n# other, then make will quit without waiting for the rest of the jobs to die.\n\nrun_make_test(\"\n.PHONY: all fail.1 fail.2 fail.3 ok\nall: fail.1 ok fail.2 fail.3\n\nfail.1 fail.2 fail.3:\n\t\\@sleep \\$(patsubst fail.%,%,\\$\\@)\n\t\\@echo Fail\n\t\\@exit 1\n\nok:\n\t\\@sleep 4\n\t\\@echo Ok done\",\n              '-rR -j5', 'Fail\n#MAKE#: *** [fail.1] Error 1\n#MAKE#: *** Waiting for unfinished jobs....\nFail\n#MAKE#: *** [fail.2] Error 1\nFail\n#MAKE#: *** [fail.3] Error 1\nOk done',\n             512);\n\n\n# Test for Savannah bug #15641.\n#\nrun_make_test('\n.PHONY: all\nall:; @:\n\n-include foo.d\n\nfoo.d: comp\n\t@echo building $@\n\ncomp: mod_a.o mod_b.o; @:\n\nmod_a.o mod_b.o:\n\t@exit 1\n', '-j2', '');\n\n\n# Make sure that all jobserver FDs are closed if we need to re-exec the\n# master copy.\n#\n# First, find the \"default\" file descriptors we normally use\n# Then make sure they're still used.\n#\n# Right now we don't have a way to run a makefile and capture the output\n# without checking it, so we can't really write this test.\n\n# run_make_test('\n# submake: ; @$(MAKE) --no-print-directory -f #MAKEFILE# fdprint 5>output\n\n# dependfile: ; @echo FOO=bar > $@\n\n# INCL := true\n\n# FOO=foo\n# ifeq ($(INCL),true)\n# -include dependfile\n# endif\n\n# fdprint: ; @echo $(filter --jobserver%,$(MAKEFLAGS))\n\n# recurse: ; @$(MAKE) --no-print-directory -f #MAKEFILE# submake INCL=true',\n#               '-j2 INCL=false fdprint',\n#               'bar');\n\n# unlink('dependfile', 'output');\n\n\n# # Do it again, this time where the include is done by the non-master make.\n# run_make_test(undef, '-j2 recurse INCL=false', 'bar');\n\n# unlink('dependfile', 'output');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/patspecific_vars",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test pattern-specific variable settings.\";\n\n$details = \"\\\nCreate a makefile containing various flavors of pattern-specific variable\nsettings, override and non-override, and using various variable expansion\nrules, semicolon interference, etc.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nall: one.x two.x three.x\nFOO = foo\nBAR = bar\nBAZ = baz\none.x: override FOO = one\n%.x: BAR = two\nt%.x: BAR = four\nthr% : override BAZ = three\none.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)\nfour.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)\nbaz: ; @echo $@: $(FOO) $(BAR) $(BAZ)\n\n# test matching multiple patterns\na%: AAA = aaa\n%b: BBB = ccc\na%: BBB += ddd\n%b: AAA ?= xxx\n%b: AAA += bbb\n.PHONY: ab\nab: ; @echo $(AAA); echo $(BBB)\nEOF\n\nclose(MAKEFILE);\n\n\n# TEST #1 -- basics\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"one.x: one two baz\\ntwo.x: foo four baz\\nthree.x: foo four three\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #2 -- try the override feature\n\n&run_make_with_options($makefile, \"BAZ=five\", &get_logfile);\n$answer = \"one.x: one two five\\ntwo.x: foo four five\\nthree.x: foo four three\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #3 -- make sure patterns are inherited properly\n\n&run_make_with_options($makefile, \"four.x\", &get_logfile);\n$answer = \"baz: foo two baz\\nfour.x: foo two baz\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #4 -- test multiple patterns matching the same target\n\n&run_make_with_options($makefile, \"ab\", &get_logfile);\n$answer = \"aaa bbb\\nccc ddd\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #5 -- test pattern-specific exported variables\n#\nrun_make_test('\n/%: export foo := foo\n\n/bar:\n\t@echo $(foo) $$foo\n', '', 'foo foo');\n\n\n# TEST #6 -- test expansion of pattern-specific simple variables\n#\nrun_make_test('\n.PHONY: all\n\nall: inherit := good $$t\nall: bar baz\n\nb%: pattern := good $$t\n\nglobal := orginal $$t\n\n\n# normal target\n#\nifdef rec\nbar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)\nelse\nbar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)\nendif\n\nbar: ; @echo \\'normal: $a;\\'\n\n\n# pattern target\n#\nifdef rec\n%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)\nelse\n%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)\nendif\n\n%z: ; @echo \\'pattrn: $a;\\'\n\n\nglobal := new $$t\n',\n'',\n'normal: global: orginal $t pattern:  inherit: ;\npattrn: global: orginal $t pattern:  inherit: ;');\n\n\n# TEST #7 -- test expansion of pattern-specific recursive variables\n#\nrun_make_test(undef, # reuse previous makefile\n'rec=1',\n'normal: global: new $t pattern: good $t inherit: good $t;\npattrn: global: new $t pattern: good $t inherit: good $t;');\n\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/patternrules",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test pattern rules.\";\n\n$details = \"\";\n\nuse Cwd;\n\n$dir = cwd;\n$dir =~ s,.*/([^/]+)$,../$1,;\n\n\n#  TEST #1: Make sure that multiple patterns where the same target\n#           can be built are searched even if the first one fails\n#           to match properly.\n#\n\nrun_make_test('\n.PHONY: all\n\nall: case.1 case.2 case.3\na: void\n\n# 1 - existing file\n%.1: void\n\t@exit 1\n%.1: #MAKEFILE#\n\t@exit 0\n\n# 2 - phony\n%.2: void\n\t@exit 1\n%.2: 2.phony\n\t@exit 0\n.PHONY: 2.phony\n\n# 3 - implicit-phony\n%.3: void\n\t@exit 1\n%.3: 3.implicit-phony\n\t@exit 0\n\n3.implicit-phony:\n',\n'',\n'');\n\n# TEST #2: make sure files that are built via implicit rules are marked\n#          as targets (Savannah bug #12202).\n#\nrun_make_test('\nTARGETS := foo foo.out\n\n.PHONY: all foo.in\n\nall: $(TARGETS)\n\n%: %.in\n\t@echo $@\n\n%.out: %\n\t@echo $@\n\nfoo.in: ; @:\n\n',\n'',\n'foo\nfoo.out');\n\n\n# TEST #3: make sure intermidite files that also happened to be\n#          prerequisites are not removed (Savannah bug #12267).\n#\nrun_make_test('\n$(dir)/foo.o:\n\n$(dir)/foo.y:\n\t@echo $@\n\n%.c: %.y\n\ttouch $@\n\n%.o: %.c\n\t@echo $@\n\n.PHONY: install\ninstall: $(dir)/foo.c\n\n',\n\"dir=$dir\",\n\"$dir/foo.y\ntouch $dir/foo.c\n$dir/foo.o\");\n\nunlink(\"$dir/foo.c\");\n\n\n# TEST #4: make sure precious flag is set properly for targets\n#          that are built via implicit rules (Savannah bug #13218).\n#\nrun_make_test('\n.DELETE_ON_ERROR:\n\n.PRECIOUS: %.bar\n\n%.bar:; @touch $@ && exit 1\n\n$(dir)/foo.bar:\n\n',\n\"dir=$dir\",\n\"#MAKE#: *** [$dir/foo.bar] Error 1\",\n512);\n\nunlink(\"$dir/foo.bar\");\n\n\n# TEST #5: make sure targets of a macthed implicit pattern rule never\n#          never considered intermediate (Savannah bug #13022).\n#\nrun_make_test('\n.PHONY: all\nall: foo.c foo.o\n\n%.h %.c: %.in\n\ttouch $*.h\n\ttouch $*.c\n\n%.o: %.c %.h\n\techo $+ >$@\n\n%.o: %.c\n\t@echo wrong rule\n\nfoo.in:\n\ttouch $@\n\n',\n'',\n'touch foo.in\ntouch foo.h\ntouch foo.c\necho foo.c foo.h >foo.o');\n\nunlink('foo.in', 'foo.h', 'foo.c', 'foo.o');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/quoting",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to test using \\n\" .\n               \"quotes within makefiles.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOM';\nSHELL = /bin/sh\nTEXFONTS = NICEFONT\nDEFINES = -DDEFAULT_TFM_PATH=\\\".:$(TEXFONTS)\\\"\ntest: ; @\"echo\" 'DEFINES = $(DEFINES)'\nEOM\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n\n# Create the answer to what should be produced by this Makefile\n$answer = 'DEFINES = -DDEFAULT_TFM_PATH=\\\".:NICEFONT\\\"' . \"\\n\";\n\n# COMPARE RESULTS\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/recursion",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test recursion.\";\n\n$details = \"DETAILS\";\n\n# Test some basic recursion.\nrun_make_test('\nall:\n\t$(MAKE) -f #MAKEFILE# foo\nfoo:\n\t@echo $(MAKE)\n\t@echo MAKELEVEL = $(MAKELEVEL)\n\t$(MAKE) -f #MAKEFILE# last\nlast:\n\t@echo $(MAKE)\n\t@echo MAKELEVEL = $(MAKELEVEL)\n\t@echo THE END\n',\n              ('CFLAGS=-O -w' . ($parallel_jobs ? '-j 2' : '')),\n              ($vos\n               ? \"#MAKE#: Entering directory `#PWD#'\nmake 'CFLAGS=-O' -f #MAKEFILE# foo\nmake CFLAGS=-O\nMAKELEVEL = 0\nmake 'CFLAGS=-O' -f #MAKEFILE# last\nmake CFLAGS=-O\nMAKELEVEL = 0\nTHE END\n#MAKE#: Leaving directory `#PWD#'\"\n               : \"#MAKE#: Entering directory `#PWD#'\n#MAKEPATH# -f #MAKEFILE# foo\n#MAKE#[1]: Entering directory `#PWD#'\n#MAKEPATH#\nMAKELEVEL = 1\n#MAKEPATH# -f #MAKEFILE# last\n#MAKE#[2]: Entering directory `#PWD#'\n#MAKEPATH#\nMAKELEVEL = 2\nTHE END\n#MAKE#[2]: Leaving directory `#PWD#'\n#MAKE#[1]: Leaving directory `#PWD#'\n#MAKE#: Leaving directory `#PWD#'\"));\n\n\n# Test command line overrides.\nrun_make_test('\nrecur: all ; @$(MAKE) --no-print-directory -f #MAKEFILE# a=AA all\nall: ; @echo \"MAKEOVERRIDES = $(MAKEOVERRIDES)\"\n',\n              'a=ZZ',\n              'MAKEOVERRIDES = a=ZZ\nMAKEOVERRIDES = a=AA\n');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/reinvoke",
    "content": "#                                                              -*-mode: perl-*-\n\n$description = \"Test GNU make's auto-reinvocation feature.\";\n\n$details = \"\\\nIf the makefile or one it includes can be rebuilt then it is, and make\nis reinvoked.  We create a rule to rebuild the makefile from a temp\nfile, then touch the temp file to make it newer than the makefile.\";\n\n$omkfile = $makefile;\n\n&utouch(-600, 'incl.mk');\n# For some reason if we don't do this then the test fails for systems\n# with sub-second timestamps, maybe + NFS?  Not sure.\n&utouch(-1, 'incl-1.mk');\n\nrun_make_test('\nall: ; @echo running rules.\n\n#MAKEFILE# incl.mk: incl-1.mk\n\t@echo rebuilding $@\n\t@echo >> $@\n\ninclude incl.mk',\n              '', \"rebuilding incl.mk\\nrunning rules.\\n\");\n\n# Make sure updating the makefile itself also works\n\n&utouch(-600, $omkfile);\n\nrun_make_test(undef, '', \"rebuilding #MAKEFILE#\\nrunning rules.\\n\");\n\n&rmfiles('incl.mk', 'incl-1.mk');\n\n\n# In this test we create an included file that's out-of-date, but then\n# the rule doesn't update it.  Make shouldn't re-exec.\n\n&utouch(-600, 'b','a');\n#&utouch(-10, 'a');\n&touch('c');\n\nrun_make_test('\nSHELL = /bin/sh\n\nall: ; @echo hello\n\na : b ; echo >> $@\n\nb : c ; [ -f $@ ] || echo >> $@\n\nc: ; echo >> $@\n\ninclude $(F)',\n              'F=a', \"[ -f b ] || echo >> b\\nhello\\n\");\n\n# Now try with the file we're not updating being the actual file we're\n# including: this and the previous one test different parts of the code.\n\nrun_make_test(undef, \"F=b\", \"[ -f b ] || echo >> b\\nhello\\n\")\n\n&rmfiles('a','b','c');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/se_explicit",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test second expansion in ordinary rules.\";\n\n$details = \"\";\n\n# TEST #0: Test handing of '$' in prerequisites with and without second\n# expansion.\n\nrun_make_test(q!\nifdef SE\n  .SECONDEXPANSION:\nendif\nfoo$$bar: bar$$baz bar$$biz ; @echo '$@ : $^'\nPRE = one two\nbar$$baz: $$(PRE)\nbaraz: $$(PRE)\nPRE = three four\n.DEFAULT: ; @echo '$@'\n!,\n              '',\n              \"\\$\\nbar\\$biz\\nfoo\\$bar : bar\\$baz bar\\$biz\");\n\nrun_make_test(undef, 'SE=1', \"three\\nfour\\nbariz\\nfoo\\$bar : baraz bariz\");\n\n# TEST #1: automatic variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nfoo: bar baz\n\nfoo: biz | buz\n\nfoo: $$@.1 \\\n     $$<.2 \\\n     $$(addsuffix .3,$$^) \\\n     $$(addsuffix .4,$$+) \\\n     $$|.5 \\\n     $$*.6\n\n',\n'',\n'bar\nbaz\nbiz\nbuz\nfoo.1\nbar.2\nbar.3\nbaz.3\nbiz.3\nbar.4\nbaz.4\nbiz.4\nbuz.5\n.6\n');\n\n\n# Test #2: target/pattern -specific variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nfoo.x: $$a $$b\n\nfoo.x: a := bar\n\n%.x: b := baz\n\n',\n'',\n'bar\nbaz\n');\n\n\n# Test #3: order of prerequisites.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nall: foo bar baz\n\n# Subtest #1\n#\nfoo: foo.1; @:\n\nfoo: foo.2\n\nfoo: foo.3\n\n\n# Subtest #2\n#\nbar: bar.2\n\nbar: bar.1; @:\n\nbar: bar.3\n\n\n# Subtest #3\n#\nbaz: baz.1\n\nbaz: baz.2\n\nbaz: ; @:\n\n',\n'',\n'foo.1\nfoo.2\nfoo.3\nbar.1\nbar.2\nbar.3\nbaz.1\nbaz.2\n');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/se_implicit",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test second expansion in ordinary rules.\";\n\n$details = \"\";\n\nuse Cwd;\n\n$dir = cwd;\n$dir =~ s,.*/([^/]+)$,../$1,;\n\n\n# Test #1: automatic variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nfoo.a: bar baz\n\nfoo.a: biz | buz\n\nfoo.%: 1.$$@ \\\n       2.$$< \\\n       $$(addprefix 3.,$$^) \\\n       $$(addprefix 4.,$$+) \\\n       5.$$| \\\n       6.$$*\n\t@:\n\n1.foo.a \\\n2.bar \\\n3.bar \\\n3.baz \\\n3.biz \\\n4.bar \\\n4.baz \\\n4.biz \\\n5.buz \\\n6.a:\n\t@echo $@\n\n',\n'',\n'1.foo.a\n2.bar\n3.bar\n3.baz\n3.biz\n4.bar\n4.baz\n4.biz\n5.buz\n6.a\nbar\nbaz\nbiz\nbuz\n');\n\n\n# Test #2: target/pattern -specific variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\nfoo.x:\n\nfoo.%: $$(%_a) $$(%_b) bar\n\t@:\n\nfoo.x: x_a := bar\n\n%.x: x_b := baz\n\nbar baz: ; @echo $@\n\n',\n'',\n'bar\nbaz\n');\n\n\n# Test #3: order of prerequisites.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nall: foo bar baz\n\n\n# Subtest #1\n#\n%oo: %oo.1; @:\n\nfoo: foo.2\n\nfoo: foo.3\n\nfoo.1: ; @echo $@\n\n\n# Subtest #2\n#\nbar: bar.2\n\n%ar: %ar.1; @:\n\nbar: bar.3\n\nbar.1: ; @echo $@\n\n\n# Subtest #3\n#\nbaz: baz.1\n\nbaz: baz.2\n\n%az: ; @:\n\n',\n'',\n'foo.1\nfoo.2\nfoo.3\nbar.1\nbar.2\nbar.3\nbaz.1\nbaz.2\n');\n\n\n# Test #4: stem splitting logic.\n#\nrun_make_test('\n.SECONDEXPANSION:\n$(dir)/tmp/bar.o:\n\n$(dir)/tmp/foo/bar.c: ; @echo $@\n$(dir)/tmp/bar/bar.c: ; @echo $@\nfoo.h: ; @echo $@\n\n%.o: $$(addsuffix /%.c,foo bar) foo.h\n\t@echo $@: {$<} $^\n\n',\n\"dir=$dir\",\n\"$dir/tmp/foo/bar.c\n$dir/tmp/bar/bar.c\nfoo.h\n$dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h\n\");\n\n\n# Test #5: stem splitting logic and order-only prerequisites.\n#\nrun_make_test('\n.SECONDEXPANSION:\n$(dir)/tmp/foo.o: $(dir)/tmp/foo.c\n$(dir)/tmp/foo.c: ; @echo $@\nbar.h: ; @echo $@\n\n%.o: %.c|bar.h\n\t@echo $@: {$<} {$|} $^\n\n',\n\"dir=$dir\",\n\"$dir/tmp/foo.c\nbar.h\n$dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c\n\");\n\n\n# Test #6: lack of implicit prerequisites.\n#\nrun_make_test('\n.SECONDEXPANSION:\nfoo.o: foo.c\nfoo.c: ; @echo $@\n\n%.o:\n\t@echo $@: {$<} $^\n\n',\n'',\n'foo.c\nfoo.o: {foo.c} foo.c\n');\n\n# Test #7: Test stem from the middle of the name.\n#\nrun_make_test('\n.SECONDEXPANSION:\nfoobarbaz:\n\nfoo%baz: % $$*.1\n\t@echo $*\n\nbar bar.1:\n\t@echo $@\n\n',\n'',\n'bar\nbar.1\nbar\n');\n\n# Test #8: Make sure stem triple-expansion does not happen.\n#\nrun_make_test('\n.SECONDEXPANSION:\nfoo$$bar:\n\nf%r: % $$*.1\n\t@echo \\'$*\\'\n\noo$$ba oo$$ba.1:\n\t@echo \\'$@\\'\n\n',\n'',\n'oo$ba\noo$ba.1\noo$ba\n');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/se_statpat",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test second expansion in static pattern rules.\";\n\n$details = \"\";\n\n# Test #1: automatic variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nfoo.a foo.b: foo.%: bar.% baz.%\n\nfoo.a foo.b: foo.%: biz.% | buz.%\n\nfoo.a foo.b: foo.%: $$@.1 \\\n                    $$<.2 \\\n                    $$(addsuffix .3,$$^) \\\n                    $$(addsuffix .4,$$+) \\\n                    $$|.5 \\\n                    $$*.6\n\n',\n'',\n'bar.a\nbaz.a\nbiz.a\nbuz.a\nfoo.a.1\nbar.a.2\nbar.a.3\nbaz.a.3\nbiz.a.3\nbar.a.4\nbaz.a.4\nbiz.a.4\nbuz.a.5\na.6\n');\n\n\n# Test #2: target/pattern -specific variables.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nfoo.x foo.y: foo.%: $$(%_a) $$($$*_b)\n\nfoo.x: x_a := bar\n\n%.x: x_b := baz\n\n\n',\n'',\n'bar\nbaz\n');\n\n\n# Test #3: order of prerequisites.\n#\nrun_make_test('\n.SECONDEXPANSION:\n.DEFAULT: ; @echo $@\n\nall: foo.a bar.a baz.a\n\n# Subtest #1\n#\nfoo.a foo.b: foo.%: foo.%.1; @:\n\nfoo.a foo.b: foo.%: foo.%.2\n\nfoo.a foo.b: foo.%: foo.%.3\n\n\n# Subtest #2\n#\nbar.a bar.b: bar.%: bar.%.2\n\nbar.a bar.b: bar.%: bar.%.1; @:\n\nbar.a bar.b: bar.%: bar.%.3\n\n\n# Subtest #3\n#\nbaz.a baz.b: baz.%: baz.%.1\n\nbaz.a baz.b: baz.%: baz.%.2\n\nbaz.a baz.b: ; @:\n\n',\n'',\n'foo.a.1\nfoo.a.2\nfoo.a.3\nbar.a.1\nbar.a.2\nbar.a.3\nbaz.a.1\nbaz.a.2\n');\n\n\n# Test #4: Make sure stem triple-expansion does not happen.\n#\nrun_make_test('\n.SECONDEXPANSION:\nfoo$$bar: f%r: % $$*.1\n\t@echo \\'$*\\'\n\noo$$ba oo$$ba.1:\n\t@echo \\'$@\\'\n\n',\n'',\n'oo$ba\noo$ba.1\noo$ba\n');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/statipattrules",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test handling of static pattern rules.\";\n\n$details = \"\\\nThe makefile created in this test has three targets.  The\nfilter command is used to get those target names ending in\n.o and statically creates a compile command with the target\nname and the target name with .c.  It also does the same thing\nfor another target filtered with .elc and creates a command\nto emacs a .el file\";\n\n&touch('bar.c', 'lose.c');\n\n#   TEST #0\n#   -------\n\nrun_make_test('\nfiles = foo.elc bar.o lose.o\n\n$(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@\n\n$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<\n',\n              '',\n              'CC -c bar.c -o bar.o');\n\n#  TEST #1\n#  -------\n\nrun_make_test(undef, 'lose.o', 'CC -c lose.c -o lose.o');\n\n\n#   TEST #2\n#   -------\n&touch(\"foo.el\");\n\nrun_make_test(undef, 'foo.elc', 'emacs foo.el');\n\n# Clean up after the first tests.\nunlink('foo.el', 'bar.c', 'lose.c');\n\n\n# TEST #3 -- PR/1670: don't core dump on invalid static pattern rules\n# -------\n\nrun_make_test('\n.DEFAULT: ; @echo $@\nfoo: foo%: % %.x % % % y.% % ; @echo $@\n',\n              '', \".x\\ny.\\nfoo\");\n\n\n# TEST #4 -- bug #12180: core dump on a stat pattern rule with an empty\n#                        prerequisite list.\nrun_make_test('\nfoo.x bar.x: %.x : ; @echo $@\n\n',\n              '', 'foo.x');\n\n\n# TEST #5 -- bug #13881: double colon static pattern rule does not\n#                        substitute %.\nrun_make_test('\nfoo.bar:: %.bar: %.baz\nfoo.baz: ;@:\n',\n              '', '');\n\n\n# TEST #6: make sure the second stem does not overwrite the first\n#          perprerequisite's stem (Savannah bug #16053).\n#\nrun_make_test('\nall.foo.bar: %.foo.bar: %.one\n\nall.foo.bar: %.bar: %.two\n\nall.foo.bar:\n\t@echo $*\n\t@echo $^\n\n.DEFAULT:;@:\n',\n'',\n'all.foo\nall.one all.foo.two');\n\n\n# TEST #7: make sure the second stem does not overwrite the first\n#          perprerequisite's stem when second expansion is enabled\n#          (Savannah bug #16053).\n#\nrun_make_test('\n.SECONDEXPANSION:\n\nall.foo.bar: %.foo.bar: %.one $$*-one\n\nall.foo.bar: %.bar: %.two $$*-two\n\nall.foo.bar:\n\t@echo $*\n\t@echo $^\n\n.DEFAULT:;@:\n',\n'',\n'all.foo\nall.one all-one all.foo.two all.foo-two');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/targetvars",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test target-specific variable settings.\";\n\n$details = \"\\\nCreate a makefile containing various flavors of target-specific variable\nvalues, override and non-override, and using various variable expansion\nrules, semicolon interference, etc.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nSHELL = /bin/sh\nexport FOO = foo\nexport BAR = bar\none: override FOO = one\none two: ; @echo $(FOO) $(BAR)\ntwo: BAR = two\nthree: ; BAR=1000\n\t@echo $(FOO) $(BAR)\n# Some things that shouldn't be target vars\nfunk : override\nfunk : override adelic\nadelic override : ; echo $@\n# Test per-target recursive variables\nfour:FOO=x\nfour:VAR$(FOO)=ok\nfour: ; @echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx)'\nfive:FOO=x\nfive six : VAR$(FOO)=good\nfive six: ;@echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx) $(VARfoo)'\n# Test per-target variable inheritance\nseven: eight\nseven eight: ; @echo $@: $(FOO) $(BAR)\nseven: BAR = seven\nseven: FOO = seven\neight: BAR = eight\n# Test the export keyword with per-target variables\nnine: ; @echo $(FOO) $(BAR) $$FOO $$BAR\nnine: FOO = wallace\nnine-a: export BAZ = baz\nnine-a: ; @echo $$BAZ\n# Test = escaping\nEQ = =\nten: one\\=two\nten: one \\= two\nten one$(EQ)two $(EQ):;@echo $@\n.PHONY: one two three four five six seven eight nine ten $(EQ) one$(EQ)two\n# Test target-specific vars with pattern/suffix rules\nQVAR = qvar\nRVAR = =\n%.q : ; @echo $(QVAR) $(RVAR)\nfoo.q : RVAR += rvar\n# Target-specific vars with multiple LHS pattern rules\n%.r %.s %.t: ; @echo $(QVAR) $(RVAR) $(SVAR) $(TVAR)\nfoo.r : RVAR += rvar\nfoo.t : TVAR := $(QVAR)\nEOF\n\nclose(MAKEFILE);\n\n# TEST #1\n\n&run_make_with_options($makefile, \"one two three\", &get_logfile);\n$answer = \"one bar\\nfoo two\\nBAR=1000\\nfoo bar\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #2\n\n&run_make_with_options($makefile, \"one two FOO=1 BAR=2\", &get_logfile);\n$answer = \"one 2\\n1 2\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #3\n\n&run_make_with_options($makefile, \"four\", &get_logfile);\n$answer = \"x ok  ok\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #4\n\n&run_make_with_options($makefile, \"seven\", &get_logfile);\n$answer = \"eight: seven eight\\nseven: seven seven\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #5\n\n&run_make_with_options($makefile, \"nine\", &get_logfile);\n$answer = \"wallace bar wallace bar\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #5-a\n\n&run_make_with_options($makefile, \"nine-a\", &get_logfile);\n$answer = \"baz\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #6\n\n&run_make_with_options($makefile, \"ten\", &get_logfile);\n$answer = \"one=two\\none bar\\n=\\nfoo two\\nten\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #6\n\n&run_make_with_options($makefile, \"foo.q bar.q\", &get_logfile);\n$answer = \"qvar = rvar\\nqvar =\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #7\n\n&run_make_with_options($makefile, \"foo.t bar.s\", &get_logfile);\n$answer = \"qvar = qvar\\nqvar =\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #8\n# For PR/1378: Target-specific vars don't inherit correctly\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile2\");\nprint MAKEFILE <<'EOF';\nfoo: FOO = foo\nbar: BAR = bar\nfoo: bar\nbar: baz\nbaz: ; @echo $(FOO) $(BAR)\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile2\", \"\", &get_logfile);\n$answer = \"foo bar\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #9\n# For PR/1380: Using += assignment in target-specific variables sometimes fails\n# Also PR/1831\n\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile3\");\nprint MAKEFILE <<'EOF';\n.PHONY: all one\nall: FOO += baz\nall: one; @echo $(FOO)\n\nFOO = bar\n\none: FOO += biz\none: FOO += boz\none: ; @echo $(FOO)\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile3\", \"\", &get_logfile);\n$answer = \"bar baz biz boz\\nbar baz\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #10\n\n&run_make_with_options(\"$makefile3\", \"one\", &get_logfile);\n$answer = \"bar biz boz\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #11\n# PR/1709: Test semicolons in target-specific variable values\n\n$makefile4 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile4\");\nprint MAKEFILE <<'EOF';\nfoo : FOO = ; ok\nfoo : ; @echo '$(FOO)'\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile4\", \"\", &get_logfile);\n$answer = \"; ok\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #12\n# PR/2020: More hassles with += target-specific vars.  I _really_ think\n# I nailed it this time :-/.\n\n$makefile5 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile5\");\nprint MAKEFILE <<'EOF';\n.PHONY: a\n\nBLAH := foo\nCOMMAND = echo $(BLAH)\n\na: ; @$(COMMAND)\n\na: BLAH := bar\na: COMMAND += snafu $(BLAH)\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile5\", \"\", &get_logfile);\n$answer = \"bar snafu bar\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #13\n# Test double-colon rules with target-specific variable values\n\n$makefile6 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile6\");\nprint MAKEFILE <<'EOF';\nW = bad\nX = bad\nfoo: W = ok\nfoo:: ; @echo $(W) $(X) $(Y) $(Z)\nfoo:: ; @echo $(W) $(X) $(Y) $(Z)\nfoo: X = ok\n\nY = foo\nbar: foo\nbar: Y = bar\n\nZ = nopat\nifdef PATTERN\n  fo% : Z = pat\nendif\n\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile6\", \"foo\", &get_logfile);\n$answer = \"ok ok foo nopat\\nok ok foo nopat\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #14\n# Test double-colon rules with target-specific variable values and\n# inheritance\n\n&run_make_with_options(\"$makefile6\", \"bar\", &get_logfile);\n$answer = \"ok ok bar nopat\\nok ok bar nopat\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Test #15\n# Test double-colon rules with pattern-specific variable values\n\n&run_make_with_options(\"$makefile6\", \"foo PATTERN=yes\", &get_logfile);\n$answer = \"ok ok foo pat\\nok ok foo pat\\n\";\n&compare_output($answer, &get_logfile(1));\n\n\n# Test #16\n# Test target-specific variables with very long command line\n# (> make default buffer length)\n\n$makefile7 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile7\");\nprint MAKEFILE <<'EOF';\nbase_metals_fmd_reports.sun5 base_metals_fmd_reports CreateRealPositions        CreateMarginFunds deals_changed_since : BUILD_OBJ=$(shell if [ -f               \"build_information.generate\" ]; then echo \"$(OBJ_DIR)/build_information.o\"; else echo \"no build information\"; fi  )\n\ndeals_changed_since: ; @echo $(BUILD_OBJ)\n\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options(\"$makefile7\", '', &get_logfile);\n$answer = \"no build information\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #17\n\n# Test a merge of set_lists for files, where one list is much longer\n# than the other.  See Savannah bug #15757.\n\nmkdir('t1', 0777);\ntouch('t1/rules.mk');\n\nrun_make_test('\nVPATH = t1\ninclude rules.mk\n.PHONY: all\nall: foo.x\nfoo.x : rules.mk ; @echo MYVAR=$(MYVAR) FOOVAR=$(FOOVAR) ALLVAR=$(ALLVAR)\nall: ALLVAR = xxx\nfoo.x: FOOVAR = bar\nrules.mk : MYVAR = foo\n.INTERMEDIATE: foo.x rules.mk\n',\n              '-I t1',\n              'MYVAR= FOOVAR=bar ALLVAR=xxx');\n\nrmfiles('t1/rules.mk');\nrmdir('t1');\n\n# TEST #18\n\n# Test appending to a simple variable containing a \"$\": avoid a\n# double-expansion.  See Savannah bug #15913.\n\nrun_make_test(\"\nVAR := \\$\\$FOO\nfoo: VAR += BAR\nfoo: ; \\@echo '\\$(VAR)'\",\n              '',\n              '$FOO BAR');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/varnesting",
    "content": "$description = \"The following test creates a makefile to ...\";\n\n$details = \"\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"x = variable1\\n\"\n              .\"variable2 := Hello\\n\"\n              .\"y = \\$(subst 1,2,\\$(x))\\n\"\n              .\"z = y\\n\"\n              .\"a := \\$(\\$(\\$(z)))\\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(a)\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"Hello\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/vpath",
    "content": "$description = \"The following test creates a makefile to test the \\n\"\n              .\"vpath directive which allows you to specify a search \\n\"\n              .\"path for a particular class of filenames, those that\\n\"\n              .\"match a particular pattern.\";\n\n$details = \"This tests the vpath directive by specifying search directories\\n\"\n         .\"for one class of filenames with the form: vpath pattern directories\"\n         .\"\\nIn this test, we specify the working directory for all files\\n\"\n         .\"that end in c or h.  We also test the variables $@ (which gives\\n\"\n         .\"target name) and $^ (which is a list of all dependencies \\n\"\n         .\"including the directories in which they were found).  It also\\n\"\n         .\"uses the function firstword used to extract just the first\\n\"\n         .\"dependency from the entire list.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"vpath %.c foo\\n\";\nprint MAKEFILE \"vpath %.c $workdir\\n\";\nprint MAKEFILE \"vpath %.h $workdir\\n\";\nprint MAKEFILE \"objects = main.o kbd.o commands.o display.o insert.o\\n\";\nprint MAKEFILE \"edit:  \\$(objects)\\n\";\nprint MAKEFILE \"\\t\\@echo cc -o \\$@ \\$^\\n\";\nprint MAKEFILE \"main.o : main.c defs.h\\n\";\nprint MAKEFILE \"\\t\\@echo cc -c \\$(firstword \\$^)\\n\";\nprint MAKEFILE \"kbd.o : kbd.c defs.h command.h\\n\";\nprint MAKEFILE \"\\t\\@echo cc -c kbd.c\\n\";\nprint MAKEFILE \"commands.o : command.c defs.h command.h\\n\";\nprint MAKEFILE \"\\t\\@echo cc -c commands.c\\n\";\nprint MAKEFILE \"display.o : display.c defs.h buffer.h\\n\";\nprint MAKEFILE \"\\t\\@echo cc -c display.c\\n\";\nprint MAKEFILE \"insert.o : insert.c defs.h buffer.h\\n\";\nprint MAKEFILE \"\\t\\@echo cc -c insert.c\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\n@files_to_touch = (\"$workdir${pathsep}main.c\",\"$workdir${pathsep}defs.h\",\n               \"$workdir${pathsep}kbd.c\",\"$workdir${pathsep}command.h\",\n               \"$workdir${pathsep}commands.c\",\"$workdir${pathsep}display.c\",\n               \"$workdir${pathsep}buffer.h\",\"$workdir${pathsep}insert.c\",\n\t       \"$workdir${pathsep}command.c\");\n\n&touch(@files_to_touch);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"cc -c $workdir${pathsep}main.c\\ncc -c kbd.c\\ncc -c commands.c\\n\"\n         .\"cc -c display.c\\n\"\n         .\"cc -c insert.c\\ncc -o edit main.o kbd.o commands.o display.o \"\n         .\"insert.o\\n\";\n\nif (&compare_output($answer,&get_logfile(1)))\n{\n  unlink @files_to_touch;\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/vpath2",
    "content": "$description = \"This is part 2 in a series to test the vpath directive\\n\"\n              .\"It tests the three forms of the directive:\\n\"\n              .\"     vpath pattern directive\\n\"\n              .\"     vpath pattern  (clears path associated with pattern)\\n\"\n              .\"     vpath          (clears all paths specified with vpath)\\n\";\n\n$details = \"This test simply adds many search paths using various vpath\\n\"\n          .\"directive forms and clears them afterwards.  It has a simple\\n\"\n          .\"rule to print a message at the end to confirm that the makefile\\n\"\n          .\"ran with no errors.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"VPATH = $workdir:$sourcedir\\n\";\nprint MAKEFILE \"vpath %.c foo\\n\";\nprint MAKEFILE \"vpath %.c $workdir\\n\";\nprint MAKEFILE \"vpath %.c $sourcedir\\n\";\nprint MAKEFILE \"vpath %.h $workdir\\n\";\nprint MAKEFILE \"vpath %.c\\n\";\nprint MAKEFILE \"vpath\\n\";\nprint MAKEFILE \"all:\\n\";\nprint MAKEFILE \"\\t\\@echo ALL IS WELL\\n\";\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"ALL IS WELL\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/vpathgpath",
    "content": "#                                                                    -*-perl-*-\n$description = \"Tests VPATH+/GPATH functionality.\";\n\n$details = \"\";\n\n$VP = \"$workdir$pathsep\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"VPATH = $VP\\n\";\n\nprint MAKEFILE <<'EOMAKE';\n\nGPATH = $(VPATH)\n\n.SUFFIXES: .a .b .c .d\n.PHONY: general rename notarget intermediate\n\n%.a:\n%.b:\n%.c:\n%.d:\n\n%.a : %.b ; cat $^ > $@\n%.b : %.c ; cat $^ > $@\n%.c :: %.d ; cat $^ > $@\n\n# General testing info:\n\ngeneral: foo.b\nfoo.b: foo.c bar.c\n\nEOMAKE\n\nclose(MAKEFILE);\n\n@touchedfiles = ();\n\n$off = -500;\n\nsub touchfiles {\n  foreach (@_) {\n    ($f = $_) =~ s,VP/,$VP,g;\n    &utouch($off, $f);\n    $off += 10;\n    push(@touchedfiles, $f);\n  }\n}\n\n# Run the general-case test\n\n&touchfiles(\"VP/foo.d\", \"VP/bar.d\", \"VP/foo.c\", \"VP/bar.c\", \"foo.b\", \"bar.d\");\n\n&run_make_with_options($makefile,\"general\",&get_logfile());\n\npush(@touchedfiles, \"bar.c\");\n\n$answer = \"$make_name: Nothing to be done for `general'.\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\nunlink(@touchedfiles) unless $keep;\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/features/vpathplus",
    "content": "#                                                                    -*-perl-*-\n$description = \"Tests the new VPATH+ functionality added in 3.76.\";\n\n$details = \"\";\n\n$VP = \"$workdir$pathsep\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"VPATH = $VP\\n\";\n\nprint MAKEFILE <<'EOMAKE';\n\nSHELL = /bin/sh\n\n.SUFFIXES: .a .b .c .d\n.PHONY: general rename notarget intermediate\n\n%.a:\n%.b:\n%.c:\n%.d:\n\n%.a : %.b\n\tcat $^ > $@\n%.b : %.c\n\tcat $^ > $@ 2>/dev/null || exit 1\n%.c :: %.d\n\tcat $^ > $@\n\n# General testing info:\n\ngeneral: foo.b\nfoo.b: foo.c bar.c\n\n# Rename testing info:\n\nrename: $(VPATH)/foo.c foo.d\n\n# Target not made testing info:\n\nnotarget: notarget.b\nnotarget.c: notarget.d\n\t-@echo \"not creating $@ from $^\"\n\n# Intermediate files:\n\nintermediate: inter.a\n\nEOMAKE\n\nclose(MAKEFILE);\n\n@touchedfiles = ();\n\n$off = -500;\n\nsub touchfiles {\n  foreach (@_) {\n    &utouch($off, $_);\n    $off += 10;\n    push(@touchedfiles, $_);\n  }\n}\n\n# Run the general-case test\n\n&touchfiles(\"$VP/foo.d\", \"$VP/bar.d\", \"$VP/foo.c\", \"$VP/bar.c\", \"foo.b\", \"bar.d\");\n\n&run_make_with_options($makefile,\"general\",&get_logfile);\n\npush(@touchedfiles, \"bar.c\");\n\n$answer = \"cat bar.d > bar.c\ncat ${VP}foo.c bar.c > foo.b 2>/dev/null || exit 1\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test rules that don't make the target correctly\n\n&touchfiles(\"$VP/notarget.c\", \"notarget.b\", \"notarget.d\");\n\n&run_make_with_options($makefile,\"notarget\",&get_logfile,512);\n\n$answer = \"not creating notarget.c from notarget.d\ncat notarget.c > notarget.b 2>/dev/null || exit 1\n$make_name: *** [notarget.b] Error 1\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# Test intermediate file handling (part 1)\n\n&touchfiles(\"$VP/inter.d\");\n\n&run_make_with_options($makefile,\"intermediate\",&get_logfile);\n\npush(@touchedfiles, \"inter.a\", \"inter.b\");\n\n$answer = \"cat ${VP}inter.d > inter.c\ncat inter.c > inter.b 2>/dev/null || exit 1\ncat inter.b > inter.a\nrm inter.b inter.c\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test intermediate file handling (part 2)\n\n&utouch(-20, \"inter.a\");\n&utouch(-10, \"$VP/inter.b\");\n&touch(\"$VP/inter.d\");\n\npush(@touchedfiles, \"$VP/inter.b\", \"$VP/inter.d\");\n\n&run_make_with_options($makefile,\"intermediate\",&get_logfile);\n\n$answer = \"cat ${VP}inter.d > inter.c\ncat inter.c > inter.b 2>/dev/null || exit 1\ncat inter.b > inter.a\nrm inter.c\n\";\n&compare_output($answer,&get_logfile(1));\n\nunlink @touchedfiles unless $keep;\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/abspath",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the abspath functions.\";\n\n$details = \"\";\n\nrun_make_test('\nifneq ($(realpath $(abspath .)),$(CURDIR))\n  $(warning .: abs=\"$(abspath .)\" real=\"$(realpath $(abspath .))\" curdir=\"$(CURDIR)\")\nendif\n\nifneq ($(realpath $(abspath ./)),$(CURDIR))\n  $(warning ./: abs=\"$(abspath ./)\" real=\"$(realpath $(abspath ./))\" curdir=\"$(CURDIR)\")\nendif\n\nifneq ($(realpath $(abspath .///)),$(CURDIR))\n  $(warning .///: abs=\"$(abspath .///)\" real=\"$(realpath $(abspath .///))\" curdir=\"$(CURDIR)\")\nendif\n\nifneq ($(abspath /),/)\n  $(warning /: abspath=\"$(abspath /)\")\nendif\n\nifneq ($(abspath ///),/)\n  $(warning ///: abspath=\"$(abspath ///)\")\nendif\n\nifneq ($(abspath /.),/)\n  $(warning /.: abspath=\"$(abspath /.)\")\nendif\n\nifneq ($(abspath ///.),/)\n  $(warning ///.: abspath=\"$(abspath ///.)\")\nendif\n\nifneq ($(abspath /./),/)\n  $(warning /./: abspath=\"$(abspath /./)\")\nendif\n\nifneq ($(abspath /.///),/)\n  $(warning /.///: abspath=\"$(abspath /.///)\")\nendif\n\nifneq ($(abspath /..),/)\n  $(warning /..: abspath=\"$(abspath /..)\")\nendif\n\nifneq ($(abspath ///..),/)\n  $(warning ///..: abspath=\"$(abspath ///..)\")\nendif\n\nifneq ($(abspath /../),/)\n  $(warning /../: abspath=\"$(abspath /../)\")\nendif\n\nifneq ($(abspath /..///),/)\n  $(warning /..///: abspath=\"$(abspath /..///)\")\nendif\n\n\nifneq ($(abspath /foo/bar/..),/foo)\n  $(warning /foo/bar/..: abspath=\"$(abspath /foo/bar/..)\")\nendif\n\nifneq ($(abspath /foo/bar/../../../baz),/baz)\n  $(warning /foo/bar/../../../baz: abspath=\"$(abspath /foo/bar/../../../baz)\")\nendif\n\nifneq ($(abspath /foo/bar/../ /..),/foo /)\n  $(warning /foo/bar/../ /..: abspath=\"$(abspath /foo/bar/../ /..)\")\nendif\n\n\n.PHONY: all\nall: ; @:\n',\n'',\n'');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/addprefix",
    "content": "$description = \"The following test creates a makefile to test the addprefix \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(addprefix src${pathsep},a.b.z.foo hacks) \\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"src${pathsep}a.b.z.foo src${pathsep}hacks\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/addsuffix",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the addsuffix function.\";\n\n$details = \"\";\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<EOMAKE;\nstring := \\$(addsuffix .c,src${pathsep}a.b.z.foo hacks)\none: ; \\@echo \\$(string)\n\ntwo: ; \\@echo \\$(addsuffix foo,)\nEOMAKE\n\nclose(MAKEFILE);\n\n\n# TEST 0\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"src${pathsep}a.b.z.foo.c hacks.c\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST 1\n\n&run_make_with_options($makefile, \"two\", &get_logfile);\n$answer = \"\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/andor",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the and & or functions.\\n\";\n\n$details = \"Try various uses of and & or to ensure they all give the correct\nresults.\\n\";\n\n# TEST #0\n# For $(and ...), it will either be empty or the last value\nrun_make_test('\nNEQ = $(subst $1,,$2)\nf =\nt = true\n\nall:\n\t@echo 1 $(and    ,$t)\n\t@echo 2 $(and $t)\n\t@echo 3 $(and $t,)\n\t@echo 4 $(and z,true,$f,false)\n\t@echo 5 $(and $t,$f,$(info bad short-circuit))\n\t@echo 6 $(and $(call NEQ,a,b),true)\n\t@echo 7 $(and $(call NEQ,a,a),true)\n\t@echo 8 $(and z,true,fal,se) hi\n\t@echo 9 $(and ,true,fal,se)there\n\t@echo 10 $(and   $(e) ,$t)',\n              '',\n              \"1\\n2 true\\n3\\n4\\n5\\n6 true\\n7\\n8 se hi\\n9 there\\n10\\n\");\n\n# TEST #1\n# For $(or ...), it will either be empty or the first true value\nrun_make_test('\nNEQ = $(subst $1,,$2)\nf =\nt = true\n\nall:\n\t@echo 1 $(or    ,    )\n\t@echo 2 $(or $t)\n\t@echo 3 $(or ,$t)\n\t@echo 4 $(or z,true,$f,false)\n\t@echo 5 $(or $t,$(info bad short-circuit))\n\t@echo 6 $(or $(info short-circuit),$t)\n\t@echo 7 $(or $(call NEQ,a,b),true)\n\t@echo 8 $(or $(call NEQ,a,a),true)\n\t@echo 9 $(or z,true,fal,se) hi\n\t@echo 10 $(or ,true,fal,se)there\n\t@echo 11 $(or   $(e) ,$f)',\n              '',\n              \"short-circuit\\n1\\n2 true\\n3 true\\n4 z\\n5 true\\n6 true\\n7 b\\n8 true\\n9 z hi\\n10 truethere\\n11\\n\");\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/basename",
    "content": "$description = \"The following test creates a makefile to test the suffix \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(basename src${pathsep}a.b.z.foo.c src${pathsep}hacks src.bar${pathsep}a.b.z.foo.c src.bar${pathsep}hacks hacks) \\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"src${pathsep}a.b.z.foo src${pathsep}hacks src.bar${pathsep}a.b.z.foo src.bar${pathsep}hacks hacks\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/call",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the call function.\\n\";\n\n$details = \"Try various uses of call and ensure they all give the correct\nresults.\\n\";\n\nopen(MAKEFILE, \"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOMAKE';\n# Simple, just reverse two things\n#\nreverse = $2 $1\n\n# A complex `map' function, using recursive `call'.\n#\nmap = $(foreach a,$2,$(call $1,$a))\n\n# Test using a builtin; this is silly as it's simpler to do without call\n#\nmy-notdir = $(call notdir,$(1))\n\n# Test using non-expanded builtins\n#\nmy-foreach = $(foreach $(1),$(2),$(3))\nmy-if      = $(if $(1),$(2),$(3))\n\n# Test recursive invocations of call with different arguments\n#\none = $(1) $(2) $(3)\ntwo = $(call one,$(1),foo,$(2))\n\n# Test recursion on the user-defined function.  As a special case make\n# won't error due to this.\n# Implement transitive closure using $(call ...)\n#\nDEP_foo = bar baz quux\nDEP_baz = quux blarp\nrest = $(wordlist 2,$(words ${1}),${1})\ntclose = $(if $1,$(firstword $1) \\\n\t\t$(call tclose,$(sort ${DEP_$(firstword $1)} $(call rest,$1))))\n\nall: ; @echo '$(call reverse,bar,foo)'; \\\n        echo '$(call map,origin,MAKE reverse map)'; \\\n        echo '$(call my-notdir,a/b   c/d      e/f)'; \\\n        echo '$(call my-foreach)'; \\\n        echo '$(call my-foreach,a,,,)'; \\\n        echo '$(call my-if,a,b,c)'; \\\n        echo '$(call two,bar,baz)'; \\\n\techo '$(call tclose,foo)'\n\n\n\nEOMAKE\n\n# These won't work until/unless PR/1527 is resolved.\n#        echo '$(call my-foreach,a,x y z,$(a)$(a))'; \\\n#        echo '$(call my-if,,$(warning don't print this),ok)'\n#\n# $answer = \"xx yy zz\\nok\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"foo bar\\ndefault file file\\nb d f\\n\\n\\nb\\nbar foo baz\\nfoo bar baz blarp quux \\n\";\n&compare_output($answer, &get_logfile(1));\n\n\n# TEST eclipsing of arguments when invoking sub-calls\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\n\nall = $1 $2 $3 $4 $5 $6 $7 $8 $9\n\nlevel1 = $(call all,$1,$2,$3,$4,$5)\nlevel2 = $(call level1,$1,$2,$3)\nlevel3 = $(call level2,$1,$2,$3,$4,$5)\n\nall:\n\t@echo $(call all,1,2,3,4,5,6,7,8,9,10,11)\n\t@echo $(call level1,1,2,3,4,5,6,7,8)\n\t@echo $(call level2,1,2,3,4,5,6,7,8)\n\t@echo $(call level3,1,2,3,4,5,6,7,8)\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, \"\", &get_logfile);\n$answer = \"1 2 3 4 5 6 7 8 9\\n1 2 3 4 5\\n1 2 3\\n1 2 3\\n\";\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/dir",
    "content": "$description = \"The following test creates a makefile to test the dir \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(dir src${pathsep}foo.c hacks) \\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"src${pathsep} .${pathsep}\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/error",
    "content": "#                                                                    -*-Perl-*-\n\n$description = \"\\\nThe following test creates a makefile to test the error function.\";\n\n$details = \"\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE 'err = $(error Error found!)\n\nifdef ERROR1\n$(error error is $(ERROR1))\nendif\n\nifdef ERROR2\n$(error error is $(ERROR2))\nendif\n\nifdef ERROR3\nall: some; @echo $(error error is $(ERROR3))\nendif\n\nifdef ERROR4\nall: some; @echo error is $(ERROR4)\n\t@echo $(error error is $(ERROR4))\nendif\n\nsome: ; @echo Some stuff\n\ntestvar: ; @: $(err)\n';\n\nclose(MAKEFILE);\n\n# Test #1\n\n&run_make_with_options($makefile, \"ERROR1=yes\", &get_logfile, 512);\n$answer = \"$makefile:4: *** error is yes.  Stop.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #2\n\n&run_make_with_options($makefile, \"ERROR2=no\", &get_logfile, 512);\n$answer = \"$makefile:8: *** error is no.  Stop.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #3\n\n&run_make_with_options($makefile, \"ERROR3=maybe\", &get_logfile, 512);\n$answer = \"Some stuff\\n$makefile:12: *** error is maybe.  Stop.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #4\n\n&run_make_with_options($makefile, \"ERROR4=definitely\", &get_logfile, 512);\n$answer = \"Some stuff\\n$makefile:16: *** error is definitely.  Stop.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #5\n\n&run_make_with_options($makefile, \"testvar\", &get_logfile, 512);\n$answer = \"$makefile:22: *** Error found!.  Stop.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/eval",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the eval function.\";\n\n$details = \"This is a test of the eval function in GNU make.\nThis function will evaluate inline makefile syntax and incorporate the\nresults into its internal database.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\ndefine Y\n  all:: ; @echo $AA\n  A = B\nendef\n\nX = $(eval $(value Y))\n\n$(eval $(shell echo A = A))\n$(eval $(Y))\n$(eval A = C)\n$(eval $(X))\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"AA\\nBA\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# Test to make sure defining variables when we have extra scope pushed works\n# as expected.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\nVARS = A B\n\nVARSET = $(1) = $(2)\n\n$(foreach v,$(VARS),$(eval $(call VARSET,$v,$v)))\n\nall: ; @echo A = $(A) B = $(B)\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, \"\", &get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"A = A B = B\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n# Test to make sure eval'ing inside conditionals works properly\n\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile3\");\n\nprint MAKEFILE <<'EOF';\nFOO = foo\n\nall:: ; @echo it\n\ndefine Y\n  all:: ; @echo worked\nendef\n\nifdef BAR\n$(eval $(Y))\nendif\n\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile3, \"\", &get_logfile);\n$answer = \"it\\n\";\n&compare_output($answer,&get_logfile(1));\n\n&run_make_with_options($makefile3, \"BAR=1\", &get_logfile);\n$answer = \"it\\nworked\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST very recursive invocation of eval\n\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile3\");\n\nprint MAKEFILE <<'EOF';\n..9 := 0 1 2 3 4 5 6 7 8 9\nrev=$(eval res:=)$(foreach word,$1,$(eval res:=${word} ${res}))${res}\na:=$(call rev,${..9})\nall: ; @echo '[$(a)]'\n\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile3, \"\", &get_logfile);\n$answer = \"[         9 8 7 6 5 4 3 2 1 0 ]\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST eval with no filename context.\n# The trick here is that because EVAR is taken from the environment, it must\n# be evaluated before every command is invoked.  Make sure that works, when\n# we have no file context for reading_file (bug # 6195)\n\n$makefile4 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile4\");\n\nprint MAKEFILE <<'EOF';\nEVAR = $(eval FOBAR = 1)\nall: ; @echo \"OK\"\n\nEOF\n\nclose(MAKEFILE);\n\n$extraENV{EVAR} = '1';\n&run_make_with_options($makefile4, \"\", &get_logfile);\n$answer = \"OK\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# Clean out previous information to allow new run_make_test() interface.\n# If we ever convert all the above to run_make_test() we can remove this line.\n$makefile = undef;\n\n# Test handling of backslashes in strings to be evaled.\n\nrun_make_test('\ndefine FOO\nall: ; @echo hello \\\nworld\nendef\n$(eval $(FOO))\n', '', 'hello world');\n\nrun_make_test('\ndefine FOO\nall: ; @echo '.\"'\".'he\\llo'.\"'\".'\n\t@echo world\nendef\n$(eval $(FOO))\n', '', 'he\\llo\nworld');\n\n\n# We don't allow new target/prerequisite relationships to be defined within a\n# command script, because these are evaluated after snap_deps() and that\n# causes lots of problems (like core dumps!)\n# See Savannah bug # 12124.\n\nrun_make_test('deps: ; $(eval deps: foo)', '',\n              '#MAKEFILE#:1: *** prerequisites cannot be defined in command scripts.  Stop.',\n              512);\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/filter-out",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the filter-out function.\";\n\n$details = \"The makefile created in this test has two variables.  The\nfilter-out function is first used to discard names ending in\n.o with a single simple pattern.  The second filter-out function\naugments the simple pattern with three literal names, which are\nalso added to the text argument.  This tests an internal hash table\nwhich is only used if there are multiple literals present in both\nthe pattern and text arguments.  The result of both filter-out\nfunctions is the same single .elc name.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nfiles1 := $(filter-out %.o, foo.elc bar.o lose.o)\nfiles2 := $(filter-out foo.i bar.i lose.i %.o, foo.i bar.i lose.i foo.elc bar.o lose.o)\nall: ; @echo $(files1) $(files2)\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile, 0);\n$answer = \"foo.elc foo.elc\\n\";\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/findstring",
    "content": "$description = \"The following test creates a makefile to test the findstring \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(findstring port, reporter)\\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\n                       \"\",\n                       &get_logfile,\n                       0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"port\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/flavor",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the flavor function.\";\n\n$details = \"\";\n\n\n# Test #1: Test general logic.\n#\nrun_make_test('\ns := s\nr = r\n\n$(info u $(flavor u))\n$(info s $(flavor s))\n$(info r $(flavor r))\n\nra += ra\nrc ?= rc\n\n$(info ra $(flavor ra))\n$(info rc $(flavor rc))\n\ns += s\nr += r\n\n$(info s $(flavor s))\n$(info r $(flavor r))\n\n\n.PHONY: all\nall:;@:\n',\n'',\n'u undefined\ns simple\nr recursive\nra recursive\nrc recursive\ns simple\nr recursive');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/foreach",
    "content": "#                                                                    -*-perl-*-\n# $Id: foreach,v 1.5 2006/03/10 02:20:46 psmith Exp $\n\n$description = \"Test the foreach function.\";\n\n$details = \"This is a test of the foreach function in gnu make.\nThis function starts with a space separated list of\nnames and a variable. Each name in the list is subsituted\ninto the variable and the given text evaluated. The general\nform of the command is $(foreach var,$list,$text). Several\ntypes of foreach loops are tested\\n\";\n\n\n# TEST 0\n\n# Set an environment variable that we can test in the makefile.\n$extraENV{FOOFOO} = 'foo foo';\n\nrun_make_test(\"space = ' '\".'\nnull :=\nauto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ <\nfoo = bletch null @ garf\nav = $(foreach var, $(auto_var), $(origin $(var)) )\noverride WHITE := BLACK\nfor_var = $(addsuffix .c,foo $(null) $(foo) $(space) $(av) )\nfe = $(foreach var2, $(for_var),$(subst .c,.o, $(var2) ) )\nall: auto for2\nauto : ; @echo $(av)\nfor2: ; @echo $(fe)',\n              '-e WHITE=WHITE CFLAGS=',\n              \"undefined file default file environment default file command line override automatic automatic\nfoo.o bletch.o null.o @.o garf.o .o    .o undefined.o file.o default.o file.o environment.o default.o file.o command.o line.o override.o automatic.o automatic.o\");\n\ndelete $extraENV{FOOFOO};\n\n# TEST 1: Test that foreach variables take precedence over global\n# variables in a global scope (like inside an eval).  Tests bug #11913\n\nrun_make_test('\n.PHONY: all target\nall: target\n\nx := BAD\n\ndefine mktarget\ntarget: x := $(x)\ntarget: ; @echo \"$(x)\"\nendef\n\nx := GLOBAL\n\n$(foreach x,FOREACH,$(eval $(value mktarget)))',\n              '',\n              'FOREACH');\n\n\n# TEST 2: Check some error conditions.\n\nrun_make_test('\nx = $(foreach )\ny = $x\n\nall: ; @echo $y',\n              '',\n              \"#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'.  Stop.\",\n              512);\n\nrun_make_test('\nx = $(foreach )\ny := $x\n\nall: ; @echo $y',\n              '',\n              \"#MAKEFILE#:2: *** insufficient number of arguments (1) to function `foreach'.  Stop.\",\n              512);\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/if",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the if function.\\n\";\n\n$details = \"Try various uses of if and ensure they all give the correct\nresults.\\n\";\n\nopen(MAKEFILE, \"> $makefile\");\n\nprint MAKEFILE <<EOMAKE;\nNEQ = \\$(subst \\$1,,\\$2)\ne =\n\nall:\n\\t\\@echo 1 \\$(if    ,true,false)\n\\t\\@echo 2 \\$(if ,true,)\n\\t\\@echo 3 \\$(if ,true)\n\\t\\@echo 4 \\$(if z,true,false)\n\\t\\@echo 5 \\$(if z,true,\\$(shell echo hi))\n\\t\\@echo 6 \\$(if ,\\$(shell echo hi),false)\n\\t\\@echo 7 \\$(if \\$(call NEQ,a,b),true,false)\n\\t\\@echo 8 \\$(if \\$(call NEQ,a,a),true,false)\n\\t\\@echo 9 \\$(if z,true,fal,se) hi\n\\t\\@echo 10 \\$(if ,true,fal,se)there\n\\t\\@echo 11 \\$(if \\$(e) ,true,false)\nEOMAKE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"1 false\\n2\\n3\\n4 true\\n5 true\\n6 false\\n7 true\\n8 false\\n9 true hi\\n10 fal,sethere\\n11 false\\n\";\n&compare_output($answer, &get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/join",
    "content": "$description = \"The following test creates a makefile to test the join \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(join a b c,foo      hacks .pl1) \\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"afoo bhacks c.pl1\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/notdir",
    "content": "$description = \"The following test creates a makefile to test the notdir \"\n              .\"function.\";\n\n$details = \"\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string := \\$(notdir ${pathsep}src${pathsep}foo.c hacks) \\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(string) \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"foo.c hacks\\n\";\n\n# COMPARE RESULTS\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/origin",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the origin function.\";\n\n$details = \"This is a test of the origin function in gnu make.\nThis function will report on where a variable was\ndefined per the following list:\n\n'undefined'            never defined\n'default'              default definition\n'environment'          environment var without -e\n'environment override' environment var with    -e\n'file'                 defined in makefile\n'command line'         defined on the command line\n'override'             defined by override in makefile\n'automatic'            Automatic variable\\n\";\n\n# Set an environment variable\n$extraENV{MAKETEST} = 1;\n\nrun_make_test('\nfoo := bletch garf\nauto_var = undefined CC MAKETEST MAKE foo CFLAGS WHITE @\nav = $(foreach var, $(auto_var), $(origin $(var)) )\noverride WHITE := BLACK\nall: auto\n\t@echo $(origin undefined)\n\t@echo $(origin CC)\n\t@echo $(origin MAKETEST)\n\t@echo $(origin MAKE)\n\t@echo $(origin foo)\n\t@echo $(origin CFLAGS)\n\t@echo $(origin WHITE)\n\t@echo $(origin @)\nauto :\n\t@echo $(av)',\n\t      '-e WHITE=WHITE CFLAGS=',\n\t      'undefined default environment default file command line override automatic\nundefined\ndefault\nenvironment\ndefault\nfile\ncommand line\noverride\nautomatic');\n\n# Reset an environment variable\ndelete $extraENV{MAKETEST};\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/realpath",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the realpath functions.\";\n\n$details = \"\";\n\nrun_make_test('\nifneq ($(realpath .),$(CURDIR))\n  $(error )\nendif\n\nifneq ($(realpath ./),$(CURDIR))\n  $(error )\nendif\n\nifneq ($(realpath .///),$(CURDIR))\n  $(error )\nendif\n\nifneq ($(realpath /),/)\n  $(error )\nendif\n\nifneq ($(realpath /.),/)\n  $(error )\nendif\n\nifneq ($(realpath /./),/)\n  $(error )\nendif\n\nifneq ($(realpath /.///),/)\n  $(error )\nendif\n\nifneq ($(realpath /..),/)\n  $(error )\nendif\n\nifneq ($(realpath /../),/)\n  $(error )\nendif\n\nifneq ($(realpath /..///),/)\n  $(error )\nendif\n\nifneq ($(realpath . /..),$(CURDIR) /)\n  $(error )\nendif\n\n.PHONY: all\nall: ; @:\n',\n              '',\n              '');\n\n# On Windows platforms, \"//\" means something special.  So, don't do these\n# tests there.\n\nif ($port_type ne 'W32') {\n  run_make_test('\nifneq ($(realpath ///),/)\n  $(error )\nendif\n\nifneq ($(realpath ///.),/)\n  $(error )\nendif\n\nifneq ($(realpath ///..),/)\n  $(error )\nendif\n\n.PHONY: all\nall: ; @:',\n                '',\n                '');\n}\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/shell",
    "content": "#                                                                    -*-perl-*-\n\n$description = 'Test the $(shell ...) function.';\n\n$details = '';\n\n\n# Test shells inside rules.\nrun_make_test('.PHONY: all\nall: ; @echo $(shell echo hi)\n','','hi');\n\n\n# Test shells inside exported environment variables.\n# This is the test that fails if we try to put make exported variables into\n# the environment for a $(shell ...) call.\nrun_make_test('\nexport HI = $(shell echo hi)\n.PHONY: all\nall: ; @echo $$HI\n','','hi');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/sort",
    "content": "$description = \"The following test creates a makefile to verify\\n\"\n              .\"the ability of make to sort lists of object. Sort\\n\"\n              .\"will also remove any duplicate entries. This will also\\n\"\n              .\"be tested.\";\n\n$details = \"The make file is built with a list of object in a random order\\n\"\n          .\"and includes some duplicates. Make should sort all of the elements\\n\"\n          .\"remove all duplicates\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"foo := moon_light days \\n\"\n              .\"foo1:= jazz\\n\"\n              .\"bar := captured \\n\"\n              .\"bar2 = boy end, has rise A midnight \\n\"\n              .\"bar3:= \\$(foo)\\n\"\n              .\"s1  := _by\\n\"\n              .\"s2  := _and_a\\n\"\n              .\"t1  := \\$(addsuffix \\$(s1), \\$(bar) )\\n\"\n              .\"t2  := \\$(addsuffix \\$(s2), \\$(foo1) )\\n\" \n              .\"t3  := \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\$(t2) \\n\"\n              .\"t4  := \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\$(t3) \\n\"\n              .\"t5  := \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\$(t4) \\n\"\n              .\"t6  := \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\$(t5) \\n\"\n              .\"t7  := \\$(t6) \\$(t6) \\$(t6) \\n\"\n              .\"p1  := \\$(addprefix \\$(foo1), \\$(s2) )\\n\"\n              .\"blank:= \\n\"\n              .\"all:\\n\"\n              .\"\\t\\@echo \\$(sort \\$(bar2) \\$(foo)  \\$(addsuffix \\$(s1), \\$(bar) ) \\$(t2) \\$(bar2) \\$(bar3))\\n\"\n              .\"\\t\\@echo \\$(sort \\$(blank) \\$(foo) \\$(bar2) \\$(t1) \\$(p1) )\\n\"\n              .\"\\t\\@echo \\$(sort \\$(foo) \\$(bar2) \\$(t1) \\$(t4) \\$(t5) \\$(t7) \\$(t6) )\\n\";\n\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"A boy captured_by days end, has jazz_and_a midnight moon_light rise\\n\"\n         .\"A boy captured_by days end, has jazz_and_a midnight moon_light rise\\n\"\n         .\"A boy captured_by days end, has jazz_and_a midnight moon_light rise\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/strip",
    "content": "#                                                                    -*-perl-*-\n$description = \"The following test creates a makefile to verify\nthe ability of make to strip white space from lists of object.\\n\";\n\n\n$details = \"The make file is built with a list of objects that contain white space\nThese are then run through the strip command to remove it. This is then\nverified by echoing the result.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOMAKE';\nTEST1 := \"Is this TERMINAL fun?                                                               What makes you believe is this terminal fun?                                                                                                                                               JAPAN is a WONDERFUL planet -- I wonder if we will ever reach                                         their level of COMPARATIVE SHOPPING...\"\nE :=\nTEST2 := $E   try this     and\t\tthis     \t$E\n\ndefine TEST3\n\nand these\t        test out\n\n\nsome\nblank lines\n\n\n\nendef\n\n.PHONY: all\nall:\n\t@echo '$(strip  $(TEST1) )'\n\t@echo '$(strip  $(TEST2) )'\n\t@echo '$(strip  $(TEST3) )'\n\nspace: ; @echo '$(strip ) $(strip  \t   )'\n\nEOMAKE\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n$answer = \"\\\"Is this TERMINAL fun? What makes you believe is this terminal fun? JAPAN is a WONDERFUL planet -- I wonder if we will ever reach their level of COMPARATIVE SHOPPING...\\\"\ntry this and this\nand these test out some blank lines\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n&run_make_with_options($makefile,\"space\",&get_logfile);\n$answer = \" \\n\";\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/substitution",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the subst and patsubst functions\";\n\n$details = \"\";\n\n# Generic patsubst test: test both the function and variable form.\n\nrun_make_test('\nfoo := a.o b.o c.o\nbar := $(foo:.o=.c)\nbar2:= $(foo:%.o=%.c)\nbar3:= $(patsubst %.c,%.o,x.c.c bar.c)\nall:;@echo $(bar); echo $(bar2); echo $(bar3)',\n'',\n'a.c b.c c.c\na.c b.c c.c\nx.c.o bar.o');\n\n# Patsubst without '%'--shouldn't match because the whole word has to match\n# in patsubst.  Based on a bug report by Markus Mauhart <qwe123@chello.at>\n\nrun_make_test('all:;@echo $(patsubst Foo,Repl,FooFoo)', '', 'FooFoo');\n\n# Variable subst where a pattern matches multiple times in a single word.\n# Based on a bug report by Markus Mauhart <qwe123@chello.at>\n\nrun_make_test('\nA := fooBARfooBARfoo\nall:;@echo $(A:fooBARfoo=REPL)', '', 'fooBARREPL');\n\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/suffix",
    "content": "$description = \"The following test creates a makefile to test the suffix\\n\"\n              .\"function. \\n\";\n\n$details = \"The suffix function will return the string following the last _._\\n\"\n          .\"the list provided. It will provide all of the unique suffixes found\\n\"\n          .\"in the list. The long strings are sorted to remove duplicates.\\n\";\n\n# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET\n# THE NAME OF THE MAKEFILE.  THIS INSURES CONSISTENCY AND KEEPS TRACK OF\n# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END.\n# EXAMPLE: $makefile2 = &get_tmpfile;\n\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"string  := word.pl general_test2.pl1 FORCE.pl word.pl3 generic_test.perl /tmp.c/bar foo.baz/bar.c MAKEFILES_variable.c\\n\"\n              .\"string2 := \\$(string) \\$(string) \\$(string) \\$(string) \\$(string) \\$(string) \\$(string)\\n\"\n              .\"string3 := \\$(string2) \\$(string2) \\$(string2) \\$(string2) \\$(string2) \\$(string2) \\$(string2)\\n\"\n              .\"string4 := \\$(string3) \\$(string3) \\$(string3) \\$(string3) \\$(string3) \\$(string3) \\$(string3)\\n\"\n              .\"all: \\n\"\n              .\"\\t\\@echo \\$(suffix \\$(string)) \\n\"\n              .\"\\t\\@echo \\$(sort \\$(suffix \\$(string4))) \\n\"\n              .\"\\t\\@echo \\$(suffix \\$(string) a.out) \\n\"\n              .\"\\t\\@echo \\$(sort \\$(suffix \\$(string3))) \\n\";\n\n\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n\n# COMPARE RESULTS\n$answer = \".pl .pl1 .pl .pl3 .perl .c .c\\n\"\n         .\".c .perl .pl .pl1 .pl3\\n\"\n         .\".pl .pl1 .pl .pl3 .perl .c .c .out\\n\"\n         .\".c .perl .pl .pl1 .pl3\\n\";\n\n# In this call to compare output, you should use the call &get_logfile(1)\n# to send the name of the last logfile created.  You may also use\n# the special call &get_logfile(1) which returns the same as &get_logfile(1).\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/value",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the value function.\";\n\n$details = \"This is a test of the value function in GNU make.\nThis function will evaluate to the value of the named variable with no\nfurther expansion performed on it.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nexport FOO = foo\n\nrecurse = FOO = $FOO\nstatic := FOO = $(value FOO)\n\nall: ; @echo $(recurse) $(value recurse) $(static) $(value static)\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"FOO = OO FOO = foo FOO = foo FOO = foo\\n\";\n\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/warning",
    "content": "#                                                                    -*-Perl-*-\n\n$description = \"\\\nThe following test creates a makefile to test the warning function.\";\n\n$details = \"\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nifdef WARNING1\n$(warning warning is $(WARNING1))\nendif\n\nifdef WARNING2\n$(warning warning is $(WARNING2))\nendif\n\nifdef WARNING3\nall: some; @echo hi $(warning warning is $(WARNING3))\nendif\n\nifdef WARNING4\nall: some; @echo hi\n\t@echo there $(warning warning is $(WARNING4))\nendif\n\nsome: ; @echo Some stuff\n\nEOF\n\nclose(MAKEFILE);\n\n# Test #1\n\n&run_make_with_options($makefile, \"WARNING1=yes\", &get_logfile, 0);\n$answer = \"$makefile:2: warning is yes\\nSome stuff\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #2\n\n&run_make_with_options($makefile, \"WARNING2=no\", &get_logfile, 0);\n$answer = \"$makefile:6: warning is no\\nSome stuff\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #3\n\n&run_make_with_options($makefile, \"WARNING3=maybe\", &get_logfile, 0);\n$answer = \"Some stuff\\n$makefile:10: warning is maybe\\nhi\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# Test #4\n\n&run_make_with_options($makefile, \"WARNING4=definitely\", &get_logfile, 0);\n$answer = \"Some stuff\\n$makefile:14: warning is definitely\\nhi\\nthere\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/wildcard",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to test wildcard\nexpansions and the ability to put a command on the same\nline as the target name separated by a semi-colon.\";\n\n$details = \"\\\nThis test creates 4 files by the names of 1.example,\ntwo.example and 3.example.  We execute three tests.  The first\nexecutes the print1 target which tests the '*' wildcard by\nechoing all filenames by the name of '*.example'.  The second\ntest echo's all files which match '?.example' and\n[a-z0-9].example.  Lastly we clean up all of the files using\nthe '*' wildcard as in the first test\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<EOM;\n.PHONY: print1 print2 clean\nprint1: ;\\@echo \\$(sort \\$(wildcard example.*))\nprint2:\n\\t\\@echo \\$(sort \\$(wildcard example.?))\n\\t\\@echo \\$(sort \\$(wildcard example.[a-z0-9]))\n\\t\\@echo \\$(sort \\$(wildcard example.[!A-Za-z_\\\\!]))\nclean:\n\\t$delete_command \\$(sort \\$(wildcard example.*))\nEOM\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch(\"example.1\");\n&touch(\"example.two\");\n&touch(\"example.3\");\n&touch(\"example.for\");\n&touch(\"example._\");\n\n# TEST #1\n# -------\n\n$answer = \"example.1 example.3 example._ example.for example.two\\n\";\n\n&run_make_with_options($makefile,\"print1\",&get_logfile);\n\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #2\n# -------\n\n$answer = \"example.1 example.3 example._\\n\"\n         .\"example.1 example.3\\n\"\n         .\"example.1 example.3\\n\";\n\n&run_make_with_options($makefile,\"print2\",&get_logfile);\n\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #3\n# -------\n\n$answer = \"$delete_command example.1 example.3 example._ example.for example.two\";\nif ($vos)\n{\n   $answer .= \" \\n\";\n}\nelse\n{\n   $answer .= \"\\n\";\n}\n\n&run_make_with_options($makefile,\"clean\",&get_logfile);\n\nif ((-f \"example.1\")||(-f \"example.two\")||(-f \"example.3\")||(-f \"example.for\")) {\n   $test_passed = 0;\n}\n\n&compare_output($answer,&get_logfile(1));\n\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/functions/word",
    "content": "#                                                                    -*-perl-*-\n$description = \"\\\nTest the word, words, wordlist, firstword, and lastword functions.\\n\";\n\n$details = \"\\\nProduce a variable with a large number of words in it,\ndetermine the number of words, and then read each one back.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE <<'EOF';\nstring  := word.pl general_test2.pl   FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl\nstring2 := $(string) $(string) $(string) $(string) $(string) $(string) $(string)\nstring3 := $(string2) $(string2) $(string2) $(string2) $(string2) $(string2) $(string2)\nstring4 := $(string3) $(string3) $(string3) $(string3) $(string3) $(string3) $(string3)\nall:\n\t@echo $(words $(string))\n\t@echo $(words $(string4))\n\t@echo $(word 1, $(string))\n\t@echo $(word 100, $(string))\n\t@echo $(word 1, $(string))\n\t@echo $(word 1000, $(string3))\n\t@echo $(wordlist 3, 4, $(string))\n\t@echo $(wordlist 4, 3, $(string))\n\t@echo $(wordlist 1, 6, $(string))\n\t@echo $(wordlist 5, 7, $(string))\n\t@echo $(wordlist 100, 110, $(string))\n\t@echo $(wordlist 7, 10, $(string2))\nEOF\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"6\\n\"\n         .\"2058\\n\"\n         .\"word.pl\\n\"\n         .\"\\n\"\n         .\"word.pl\\n\"\n         .\"\\n\"\n\t .\"FORCE.pl word.pl\\n\"\n\t .\"\\n\"\n\t .\"word.pl general_test2.pl FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl\\n\"\n\t .\"generic_test.perl MAKEFILES_variable.pl\\n\"\n\t .\"\\n\"\n\t .\"word.pl general_test2.pl FORCE.pl word.pl\\n\";\n&compare_output($answer, &get_logfile(1));\n\n\n# Test error conditions\n\nrun_make_test('FOO = foo bar biz baz\n\nword-e1: ; @echo $(word ,$(FOO))\nword-e2: ; @echo $(word abc ,$(FOO))\nword-e3: ; @echo $(word 1a,$(FOO))\n\nwordlist-e1: ; @echo $(wordlist ,,$(FOO))\nwordlist-e2: ; @echo $(wordlist abc ,,$(FOO))\nwordlist-e3: ; @echo $(wordlist 1, 12a ,$(FOO))',\n              'word-e1',\n              \"#MAKEFILE#:3: *** non-numeric first argument to `word' function: ''.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'word-e2',\n              \"#MAKEFILE#:4: *** non-numeric first argument to `word' function: 'abc '.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'word-e3',\n              \"#MAKEFILE#:5: *** non-numeric first argument to `word' function: '1a'.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e1',\n              \"#MAKEFILE#:7: *** non-numeric first argument to `wordlist' function: ''.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e2',\n              \"#MAKEFILE#:8: *** non-numeric first argument to `wordlist' function: 'abc '.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e3',\n              \"#MAKEFILE#:9: *** non-numeric second argument to `wordlist' function: ' 12a '.  Stop.\",\n              512);\n\n# Test error conditions again, but this time in a variable reference\n\nrun_make_test('FOO = foo bar biz baz\n\nW = $(word $x,$(FOO))\nWL = $(wordlist $s,$e,$(FOO))\n\nword-e: ; @echo $(W)\nwordlist-e: ; @echo $(WL)',\n              'word-e x=',\n              \"#MAKEFILE#:3: *** non-numeric first argument to `word' function: ''.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'word-e x=abc',\n              \"#MAKEFILE#:3: *** non-numeric first argument to `word' function: 'abc'.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'word-e x=0',\n              \"#MAKEFILE#:3: *** first argument to `word' function must be greater than 0.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e s= e=',\n              \"#MAKEFILE#:4: *** non-numeric first argument to `wordlist' function: ''.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e s=abc e=',\n              \"#MAKEFILE#:4: *** non-numeric first argument to `wordlist' function: 'abc'.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e s=4 e=12a',\n              \"#MAKEFILE#:4: *** non-numeric second argument to `wordlist' function: '12a'.  Stop.\",\n              512);\n\nrun_make_test(undef,\n              'wordlist-e s=0 e=12',\n              \"#MAKEFILE#:4: *** invalid first argument to `wordlist' function: `0'.  Stop.\",\n              512);\n\n\n# TEST #8 -- test $(firstword )\n#\nrun_make_test('\nvoid :=\nlist := $(void) foo bar baz #\n\na := $(word 1,$(list))\nb := $(firstword $(list))\n\n.PHONY: all\n\nall:\n\t@test \"$a\" = \"$b\" && echo $a\n',\n'',\n'foo');\n\n\n# TEST #9 -- test $(lastword )\n#\nrun_make_test('\nvoid :=\nlist := $(void) foo bar baz #\n\na := $(word $(words $(list)),$(list))\nb := $(lastword $(list))\n\n.PHONY: all\n\nall:\n\t@test \"$a\" = \"$b\" && echo $a\n',\n'',\n'baz');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/misc/close_stdout",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Make sure make exits with an error if stdout is full.\";\n\nif (-e '/dev/full') {\n  run_make_test('', '-v > /dev/full', '#MAKE#: write error', 256);\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/misc/general1",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to test the\nsimple functionality of make.  It mimics the\nrebuilding of a product with dependencies.\nIt also tests the simple definition of VPATH.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<EOF;\nVPATH = $workdir\nedit:  main.o kbd.o commands.o display.o \\\\\n       insert.o\n\\t\\@echo cc -o edit main.o kbd.o commands.o display.o \\\\\n                  insert.o\nmain.o : main.c defs.h\n\\t\\@echo cc -c main.c\nkbd.o : kbd.c defs.h command.h\n\\t\\@echo cc -c kbd.c\ncommands.o : command.c defs.h command.h\n\\t\\@echo cc -c commands.c\ndisplay.o : display.c defs.h buffer.h\n\\t\\@echo cc -c display.c\ninsert.o : insert.c defs.h buffer.h\n\\t\\@echo cc -c insert.c\nEOF\n\nclose(MAKEFILE);\n\n\n@files_to_touch = (\"$workdir${pathsep}main.c\",\"$workdir${pathsep}defs.h\",\n               \"$workdir${pathsep}kbd.c\",\"$workdir${pathsep}command.h\",\n               \"$workdir${pathsep}commands.c\",\"$workdir${pathsep}display.c\",\n               \"$workdir${pathsep}buffer.h\",\"$workdir${pathsep}insert.c\",\n\t       \"$workdir${pathsep}command.c\");\n\n&touch(@files_to_touch);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"cc -c main.c\\ncc -c kbd.c\\ncc -c commands.c\\ncc -c display.c\ncc -c insert.c\\ncc -o edit main.o kbd.o commands.o display.o insert.o\\n\";\n\n# COMPARE RESULTS\n\nif (&compare_output($answer,&get_logfile(1))) {\n  unlink @files_to_touch;\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/misc/general2",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to test the\nsimple functionality of make.  It is the same as\ngeneral_test1 except that this one tests the\ndefinition of a variable to hold the object filenames.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The contents of the Makefile ...\n\nprint MAKEFILE <<EOF;\nVPATH = $workdir\nobjects = main.o kbd.o commands.o display.o insert.o\nedit:  \\$(objects)\n\\t\\@echo cc -o edit \\$(objects)\nmain.o : main.c defs.h\n\\t\\@echo cc -c main.c\nkbd.o : kbd.c defs.h command.h\n\\t\\@echo cc -c kbd.c\ncommands.o : command.c defs.h command.h\n\\t\\@echo cc -c commands.c\ndisplay.o : display.c defs.h buffer.h\n\\t\\@echo cc -c display.c\ninsert.o : insert.c defs.h buffer.h\n\\t\\@echo cc -c insert.c\nEOF\n\nclose(MAKEFILE);\n\n\n@files_to_touch = (\"$workdir${pathsep}main.c\",\"$workdir${pathsep}defs.h\",\n               \"$workdir${pathsep}kbd.c\",\"$workdir${pathsep}command.h\",\n               \"$workdir${pathsep}commands.c\",\"$workdir${pathsep}display.c\",\n               \"$workdir${pathsep}buffer.h\",\"$workdir${pathsep}insert.c\",\n\t       \"$workdir${pathsep}command.c\");\n\n&touch(@files_to_touch);\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"cc -c main.c\\ncc -c kbd.c\\ncc -c commands.c\\ncc -c display.c\ncc -c insert.c\\ncc -o edit main.o kbd.o commands.o display.o insert.o\\n\";\n\nif (&compare_output($answer,&get_logfile(1))) {\n  unlink @files_to_touch;\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/misc/general3",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"\\\nThis tests random features of the parser that need to be supported, and\nwhich have either broken at some point in the past or seem likely to\nbreak.\";\n\nrun_make_test(\"\n# We want to allow both empty commands _and_ commands that resolve to empty.\nEMPTY =\n\n.PHONY: all a1 a2 a3 a4\nall: a1 a2 a3 a4\n\na1:;\na2:\n\\t\na3:;\\$(EMPTY)\na4:\n\\t\\$(EMPTY)\n\n\\# Non-empty lines that expand to nothing should also be ignored.\nSTR =     \\# Some spaces\nTAB =   \\t  \\# A TAB and some spaces\n\n\\$(STR)\n\n\\$(STR) \\$(TAB)\",\n              '', \"#MAKE#: Nothing to be done for `all'.\");\n\n# TEST 2\n\n# Make sure files without trailing newlines are handled properly.\n# Have to use the old style invocation to test this.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\nprint MAKEFILE \"all:;\\@echo FOO = \\$(FOO)\\nFOO = foo\";\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2,\"\",&get_logfile);\n$answer = \"FOO = foo\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST 3\n\n# Check semicolons in variable references\n\nrun_make_test('\n$(if true,$(info true; true))\nall: ; @:\n',\n              '', 'true; true');\n\n# TEST 4\n\n# Check that backslashes in command scripts are handled according to POSIX.\n# Checks Savannah bug # 1332.\n\n# Test the fastpath / no quotes\nrun_make_test('\nall:\n\t@echo foo\\\nbar\n\t@echo foo\\\n\tbar\n\t@echo foo\\\n    bar\n\t@echo foo\\\n\t    bar\n\t@echo foo \\\nbar\n\t@echo foo \\\n\tbar\n\t@echo foo \\\n    bar\n\t@echo foo \\\n\t    bar\n',\n              '', 'foobar\nfoobar\nfoo bar\nfoo bar\nfoo bar\nfoo bar\nfoo bar\nfoo bar');\n\n# Test the fastpath / single quotes\nrun_make_test(\"\nall:\n\t\\@echo 'foo\\\\\nbar'\n\t\\@echo 'foo\\\\\n\tbar'\n\t\\@echo 'foo\\\\\n    bar'\n\t\\@echo 'foo\\\\\n\t    bar'\n\t\\@echo 'foo \\\\\nbar'\n\t\\@echo 'foo \\\\\n\tbar'\n\t\\@echo 'foo \\\\\n    bar'\n\t\\@echo 'foo \\\\\n\t    bar'\n\",\n              '', 'foo\\\nbar\nfoo\\\nbar\nfoo\\\n    bar\nfoo\\\n    bar\nfoo \\\nbar\nfoo \\\nbar\nfoo \\\n    bar\nfoo \\\n    bar');\n\n# Test the fastpath / double quotes\nrun_make_test('\nall:\n\t@echo \"foo\\\nbar\"\n\t@echo \"foo\\\n\tbar\"\n\t@echo \"foo\\\n    bar\"\n\t@echo \"foo\\\n\t    bar\"\n\t@echo \"foo \\\nbar\"\n\t@echo \"foo \\\n\tbar\"\n\t@echo \"foo \\\n    bar\"\n\t@echo \"foo \\\n\t    bar\"\n',\n              '', 'foobar\nfoobar\nfoo    bar\nfoo    bar\nfoo bar\nfoo bar\nfoo     bar\nfoo     bar');\n\n# Test the slow path / no quotes\nrun_make_test('\nall:\n\t@echo hi; echo foo\\\nbar\n\t@echo hi; echo foo\\\n\tbar\n\t@echo hi; echo foo\\\n bar\n\t@echo hi; echo foo\\\n\t bar\n\t@echo hi; echo foo \\\nbar\n\t@echo hi; echo foo \\\n\tbar\n\t@echo hi; echo foo \\\n bar\n\t@echo hi; echo foo \\\n\t bar\n',\n              '', 'hi\nfoobar\nhi\nfoobar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar');\n\n# Test the slow path / no quotes.  This time we put the slow path\n# determination _after_ the backslash-newline handling.\nrun_make_test('\nall:\n\t@echo foo\\\nbar; echo hi\n\t@echo foo\\\n\tbar; echo hi\n\t@echo foo\\\n bar; echo hi\n\t@echo foo\\\n\t bar; echo hi\n\t@echo foo \\\nbar; echo hi\n\t@echo foo \\\n\tbar; echo hi\n\t@echo foo \\\n bar; echo hi\n\t@echo foo \\\n\t bar; echo hi\n',\n              '', 'foobar\nhi\nfoobar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo bar\nhi');\n\n# Test the slow path / single quotes\nrun_make_test(\"\nall:\n\t\\@echo hi; echo 'foo\\\\\nbar'\n\t\\@echo hi; echo 'foo\\\\\n\tbar'\n\t\\@echo hi; echo 'foo\\\\\n    bar'\n\t\\@echo hi; echo 'foo\\\\\n\t    bar'\n\t\\@echo hi; echo 'foo \\\\\nbar'\n\t\\@echo hi; echo 'foo \\\\\n\tbar'\n\t\\@echo hi; echo 'foo \\\\\n    bar'\n\t\\@echo hi; echo 'foo \\\\\n\t    bar'\n\",\n              '', 'hi\nfoo\\\nbar\nhi\nfoo\\\nbar\nhi\nfoo\\\n    bar\nhi\nfoo\\\n    bar\nhi\nfoo \\\nbar\nhi\nfoo \\\nbar\nhi\nfoo \\\n    bar\nhi\nfoo \\\n    bar');\n\n# Test the slow path / double quotes\nrun_make_test('\nall:\n\t@echo hi; echo \"foo\\\nbar\"\n\t@echo hi; echo \"foo\\\n\tbar\"\n\t@echo hi; echo \"foo\\\n    bar\"\n\t@echo hi; echo \"foo\\\n\t    bar\"\n\t@echo hi; echo \"foo \\\nbar\"\n\t@echo hi; echo \"foo \\\n\tbar\"\n\t@echo hi; echo \"foo \\\n    bar\"\n\t@echo hi; echo \"foo \\\n\t    bar\"\n',\n              '', 'hi\nfoobar\nhi\nfoobar\nhi\nfoo    bar\nhi\nfoo    bar\nhi\nfoo bar\nhi\nfoo bar\nhi\nfoo     bar\nhi\nfoo     bar');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/misc/general4",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"\\\nThis tests random features of make's algorithms, often somewhat obscure,\nwhich have either broken at some point in the past or seem likely to\nbreak.\";\n\nrun_make_test('\n# Make sure that subdirectories built as prerequisites are actually handled\n# properly.\n\nall: dir/subdir/file.a\n\ndir/subdir: ; @echo mkdir -p dir/subdir\n\ndir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b\n\ndir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@',\n              '', \"mkdir -p dir/subdir\\ntouch dir/subdir/file.b\\ncp dir/subdir/file.b dir/subdir/file.a\\n\");\n\n# Test implicit rules\n\n&touch('foo.c');\nrun_make_test('foo: foo.o',\n              'CC=\"@echo cc\" OUTPUT_OPTION=',\n              'cc -c foo.c\ncc foo.o -o foo');\nunlink('foo.c');\n\n\n# Test other implicit rule searching\n\n&touch('bar');\nrun_make_test('\ntest.foo:\n%.foo : baz ; @echo done $<\n%.foo : bar ; @echo done $<\nfox: baz\n',\n              '',\n              'done bar');\nunlink('bar');\n\n\n# Test implicit rules with '$' in the name (see se_implicit)\n\nrun_make_test(q!\n%.foo : baz$$bar ; @echo 'done $<'\n%.foo : bar$$baz ; @echo 'done $<'\ntest.foo:\nbaz$$bar bar$$baz: ; @echo '$@'\n!,\n              '',\n              \"baz\\$bar\\ndone baz\\$bar\");\n\n\n# Test implicit rules with '$' in the name (see se_implicit)\n# Use the '$' in the pattern.\n\nrun_make_test(q!\n%.foo : %$$bar ; @echo 'done $<'\ntest.foo:\ntest$$bar: ; @echo '$@'\n!,\n              '',\n              \"test\\$bar\\ndone test\\$bar\");\n\n# Make sure that subdirectories built as prerequisites are actually handled\n# properly... this time with '$'\n\nrun_make_test(q!\n\nall: dir/subdir/file.$$a\n\ndir/subdir: ; @echo mkdir -p '$@'\n\ndir/subdir/file.$$b: dir/subdir ; @echo touch '$@'\n\ndir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@'\n!,\n              '', \"mkdir -p dir/subdir\\ntouch dir/subdir/file.\\$b\\ncp dir/subdir/file.\\$b dir/subdir/file.\\$a\\n\");\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-B",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test make -B (always remake) option.\\n\";\n\n$details = \"\\\nConstruct a simple makefile that builds a target.\nInvoke make once, so it builds everything.  Invoke it again and verify\nthat nothing is built.  Then invoke it with -B and verify that everything\nis built again.\";\n\n&touch('bar.x');\n\nrun_make_test('\n.SUFFIXES:\n\n.PHONY: all\nall: foo\n\nfoo: bar.x\n\t@echo cp $< $@\n\t@echo \"\" > $@\n',\n              '', 'cp bar.x foo');\n\nrun_make_test(undef, '', \"#MAKE#: Nothing to be done for `all'.\");\nrun_make_test(undef, '-B', 'cp bar.x foo');\n\n# Put the timestamp for foo into the future; it should still be remade.\n\nutouch(1000, 'foo');\nrun_make_test(undef, '', \"#MAKE#: Nothing to be done for `all'.\");\nrun_make_test(undef, '-B', 'cp bar.x foo');\n\n# Clean up\n\nrmfiles('bar.x', 'foo');\n\n# Test -B with the re-exec feature: we don't want to re-exec forever\n# Savannah bug # 7566\n\nrun_make_test('\nall: ; @:\n$(info MAKE_RESTARTS=$(MAKE_RESTARTS))\ninclude foo.x\nfoo.x: ; @touch $@\n',\n              '-B', 'MAKE_RESTARTS=\n#MAKEFILE#:4: foo.x: No such file or directory\nMAKE_RESTARTS=1');\n\nrmfiles('foo.x');\n\n# Test -B with the re-exec feature: we DO want -B in the \"normal\" part of the\n# makefile.\n\n&touch('blah.x');\n\nrun_make_test('\nall: blah.x ; @echo $@\n$(info MAKE_RESTARTS=$(MAKE_RESTARTS))\ninclude foo.x\nfoo.x: ; @touch $@\nblah.x: ; @echo $@\n',\n              '-B', 'MAKE_RESTARTS=\n#MAKEFILE#:4: foo.x: No such file or directory\nMAKE_RESTARTS=1\nblah.x\nall');\n\nrmfiles('foo.x', 'blah.x');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-C",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the -C option to GNU make.\";\n\n$details = \"\\\nThis test is similar to the clean test except that this test creates the file\nto delete in the work directory instead of the current directory.  Make is\ncalled from another directory using the -C workdir option so that it can both\nfind the makefile and the file to delete in the work directory.\";\n\n$example = $workdir . $pathsep . \"EXAMPLE\";\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE <<EOF;\nall: ; \\@echo This makefile did not clean the dir ... good\nclean: ; $delete_command EXAMPLE\\$(ext)\nEOF\nclose(MAKEFILE);\n\n# TEST #1\n# -------\n&touch($example);\n\n&run_make_with_options(\"${testname}.mk\",\n\t               \"-C $workdir clean\",\n\t\t       &get_logfile);\n\nchdir $workdir;\n$wpath = &get_this_pwd;\nchdir $pwd;\n\nif (-f $example) {\n  $test_passed = 0;\n}\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"$make_name: Entering directory `$wpath'\\n\"\n        . \"$delete_command EXAMPLE\\n\"\n        . \"$make_name: Leaving directory `$wpath'\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #2\n# -------\n# Do it again with trailing \"/\"; this should work the same\n\n$example .= \"slash\";\n\n&touch($example);\n\n&run_make_with_options(\"${testname}.mk\",\n\t               \"-C $workdir/ clean ext=slash\",\n\t\t       &get_logfile);\n\nchdir $workdir;\n$wpath = &get_this_pwd;\nchdir $pwd;\n\nif (-f $example) {\n  $test_passed = 0;\n}\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"$make_name: Entering directory `$wpath'\\n\"\n        . \"$delete_command EXAMPLEslash\\n\"\n        . \"$make_name: Leaving directory `$wpath'\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-I",
    "content": "#                                                                    -*-perl-*-\n\n$description =\"The following test creates a makefile to test the -I option.\";\n\n$details = \"\\\nThis test tests the -I option by including a filename in\nanother directory and giving make that directory name\nunder -I in the command line.  Without this option, the make\nwould fail to find the included file.  It also checks to make\nsure that the -I option gets passed to recursive makes.\";\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\n$mf2 = substr ($makefile2, index ($makefile2, $pathsep) + 1);\nprint MAKEFILE <<EOF;\ninclude $mf2\nall:\n\\t\\@echo There should be no errors for this makefile.\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile2\");\n\nprint MAKEFILE <<EOF;\nANOTHER:\n\\t\\@echo This is another included makefile\nrecurse:\n\\t\\$(MAKE) ANOTHER -f $makefile\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,\"-I $workdir all\",&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"There should be no errors for this makefile.\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n$answer = \"This is another included makefile\\n\";\n&run_make_with_options($makefile,\"-I $workdir ANOTHER\",&get_logfile);\n&compare_output($answer,&get_logfile(1));\n\n\n$answer = \"$mkpath ANOTHER -f $makefile\n${make_name}[1]: Entering directory `$pwd'\nThis is another included makefile\n${make_name}[1]: Leaving directory `$pwd'\\n\";\n\n&run_make_with_options($makefile,\"-I $workdir recurse\",&get_logfile);\n&compare_output($answer,&get_logfile(1));\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-W",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test make -W (what if) option.\\n\";\n\n# Basic build\n\nrun_make_test('\na.x: b.x\na.x b.x: ; echo >> $@\n',\n              '', \"echo >> b.x\\necho >> a.x\");\n\n# Run it again: nothing should happen\n\nrun_make_test(undef, '', \"#MAKE#: `a.x' is up to date.\");\n\n# Now run it with -W b.x: should rebuild a.x\n\nrun_make_test(undef, '-W b.x', 'echo >> a.x');\n\n# Put the timestamp for a.x into the future; it should still be remade.\n\nutouch(1000, 'a.x');\nrun_make_test(undef, '', \"#MAKE#: `a.x' is up to date.\");\nrun_make_test(undef, '-W b.x', 'echo >> a.x');\n\n# Clean up\n\nrmfiles('a.x', 'b.x');\n\n# Test -W with the re-exec feature: we don't want to re-exec forever\n# Savannah bug # 7566\n\n# First set it up with a normal build\n\nrun_make_test('\nall: baz.x ; @:\ninclude foo.x\nfoo.x: bar.x\n\t@echo \"\\$$(info restarts=\\$$(MAKE_RESTARTS))\" > $@\n\t@echo \"touch $@\"\nbar.x: ; echo >> $@\nbaz.x: bar.x ; @echo \"touch $@\"\n',\n              '', '#MAKEFILE#:3: foo.x: No such file or directory\necho >> bar.x\ntouch foo.x\nrestarts=1\ntouch baz.x');\n\n# Now run with -W bar.x\n\n# Tweak foo.x's timestamp so the update will change it.\n&utouch(1000, 'foo.x');\n\nrun_make_test(undef, '-W bar.x', \"restarts=\\ntouch foo.x\\nrestarts=1\\ntouch baz.x\");\n\nrmfiles('foo.x', 'bar.x');\n\n# Test -W on vpath-found files: it should take effect.\n# Savannah bug # 15341\n\nmkdir('x-dir', 0777);\nutouch(-20, 'x-dir/x');\ntouch('y');\n\nrun_make_test('\ny: x ; @echo cp $< $@\n',\n              '-W x-dir/x VPATH=x-dir',\n              'cp x-dir/x y');\n\n# Make sure ./ stripping doesn't interfere with the match.\n\nrun_make_test('\ny: x ; @echo cp $< $@\n',\n              '-W ./x-dir/x VPATH=x-dir',\n              'cp x-dir/x y');\n\nrun_make_test(undef,\n              '-W x-dir/x VPATH=./x-dir',\n              'cp ./x-dir/x y');\n\nunlink(qw(y x-dir/x));\nrmdir('x-dir');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-e",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to ...\";\n\n$details = \"\";\n\n$extraENV{GOOGLE} = 'boggle';\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\nGOOGLE = bazzle\nall:; @echo \"$(GOOGLE)\"\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile, '-e' ,&get_logfile);\n\n$answer = \"boggle\\n\";\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-f",
    "content": "$description = \"The following test tests that if you specify greater \\n\"\n              .\"than one '-f makefilename' on the command line, \\n\"\n              .\"that make concatenates them.  This test creates three \\n\"\n              .\"makefiles and specifies all of them with the -f option \\n\"\n              .\"on the command line.  To make sure they were concatenated, \\n\"\n              .\"we then call make with the rules from the concatenated \\n\"\n              .\"makefiles one at a time.  Finally, it calls all three \\n\"\n              .\"rules in one call to make and checks that the output\\n\"\n              .\"is in the correct order.\";\n\n$makefile2 = &get_tmpfile;\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"all: \\n\";\nprint MAKEFILE \"\\t\\@echo This is the output from the original makefile\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n# Create a second makefile\nopen(MAKEFILE,\"> $makefile2\");\nprint MAKEFILE \"TWO: \\n\";\nprint MAKEFILE \"\\t\\@echo This is the output from makefile 2\\n\";\nclose(MAKEFILE);\n\n# Create a third makefile\nopen(MAKEFILE,\"> $makefile3\");\nprint MAKEFILE \"THREE: \\n\";\nprint MAKEFILE \"\\t\\@echo This is the output from makefile 3\\n\";\nclose(MAKEFILE);\n\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"This is the output from the original makefile\\n\";\n\n# Run make to catch the default rule\n&run_make_with_options($makefile,\"-f $makefile2 -f $makefile3\",&get_logfile,0);\n\n&compare_output($answer,&get_logfile(1));\n\n\n# Run Make again with the rule from the second makefile: TWO\n$answer = \"This is the output from makefile 2\\n\";\n\n&run_make_with_options($makefile,\"-f $makefile2 -f $makefile3 TWO\",&get_logfile,0);\n\n&compare_output($answer,&get_logfile(1));\n     \n\n# Run Make again with the rule from the third makefile: THREE\n\n$answer = \"This is the output from makefile 3\\n\";\n&run_make_with_options($makefile,\n                       \"-f $makefile2 -f $makefile3 THREE\",\n                       &get_logfile,\n                       0);\n&compare_output($answer,&get_logfile(1));\n\n\n# Run Make again with ALL three rules in the order 2 1 3 to make sure\n# that all rules are executed in the proper order\n\n$answer = \"This is the output from makefile 2\\n\";\n$answer .= \"This is the output from the original makefile\\n\";\n$answer .= \"This is the output from makefile 3\\n\";\n&run_make_with_options($makefile,\n                       \"-f $makefile2 -f $makefile3 TWO all THREE\",\n\t\t       &get_logfile,\n                       0);\n&compare_output($answer,&get_logfile(1));\n       \n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-k",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the make -k (don't stop on error) option.\\n\";\n\n$details = \"\\\nThe makefile created in this test is a simulation of building\na small product.  However, the trick to this one is that one\nof the dependencies of the main target does not exist.\nWithout the -k option, make would fail immediately and not\nbuild any part of the target.  What we are looking for here,\nis that make builds the rest of the dependencies even though\nit knows that at the end it will fail to rebuild the main target.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<EOF;\nVPATH = $workdir\nedit:  main.o kbd.o commands.o display.o\n\\t\\@echo cc -o edit main.o kbd.o commands.o display.o\n\nmain.o : main.c defs.h\n\\t\\@echo cc -c main.c\n\nkbd.o : kbd.c defs.h command.h\n\\t\\@echo cc -c kbd.c\n\ncommands.o : command.c defs.h command.h\n\\t\\@echo cc -c commands.c\n\ndisplay.o : display.c defs.h buffer.h\n\\t\\@echo cc -c display.c\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\n@files_to_touch = (\"$workdir${pathsep}main.c\",\"$workdir${pathsep}defs.h\",\n               \"$workdir${pathsep}command.h\",\n               \"$workdir${pathsep}commands.c\",\"$workdir${pathsep}display.c\",\n               \"$workdir${pathsep}buffer.h\",\n\t       \"$workdir${pathsep}command.c\");\n\n&touch(@files_to_touch);\n\nif ($vos) {\n  $error_code = 3307;\n}\nelse {\n  $error_code = 512;\n}\n\n&run_make_with_options($makefile, \"-k\", &get_logfile, $error_code);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"cc -c main.c\n$make_name: *** No rule to make target `kbd.c', needed by `kbd.o'.\ncc -c commands.c\ncc -c display.c\n$make_name: Target `edit' not remade because of errors.\\n\";\n\n# COMPARE RESULTS\n\n&compare_output($answer, &get_logfile(1));\n\nunlink(@files_to_touch) unless $keep;\n\n\n# TEST 1: Make sure that top-level targets that depend on targets that\n# previously failed to build, aren't attempted.  Regression for PR/1634.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\nprint MAKEFILE <<'EOF';\n.SUFFIXES:\n\nall: exe1 exe2; @echo making $@\n\nexe1 exe2: lib; @echo cp $^ $@\n\nlib: foo.o; @echo cp $^ $@\n\nfoo.o: ; exit 1\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, \"-k\", &get_logfile, $error_code);\n\n$answer = \"exit 1\n$make_name: *** [foo.o] Error 1\n$make_name: Target `all' not remade because of errors.\\n\";\n\n&compare_output($answer, &get_logfile(1));\n\n# TEST -- make sure we keep the error code if we can't create an included\n# makefile.\n\nrun_make_test('all: ; @echo hi\ninclude ifile\nifile: no-such-file; @false\n',\n              '-k',\n              \"#MAKEFILE#:2: ifile: No such file or directory\n#MAKE#: *** No rule to make target `no-such-file', needed by `ifile'.\n#MAKE#: Failed to remake makefile `ifile'.\nhi\\n\",\n              512);\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-l",
    "content": "#                                                                    -*-perl-*-\n# Date: Tue, 11 Aug 1992 09:34:26 -0400\n# From: pds@lemming.webo.dg.com (Paul D. Smith)\n\n$description = \"Test load balancing (-l) option.\";\n\n$details = \"\\\nThis test creates a makefile where all depends on three rules\nwhich contain the same body.  Each rule checks for the existence\nof a temporary file; if it exists an error is generated.  If it\ndoesn't exist then it is created, the rule sleeps, then deletes\nthe temp file again.  Thus if any of the rules are run in\nparallel the test will fail.  When make is called in this test,\nit is given the -l option with a value of 0.0001.  This ensures\nthat the load will be above this number and make will therefore\ndecide that it cannot run more than one job even though -j 4 was\nalso specified on the command line.\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOF';\nSHELL = /bin/sh\n\ndefine test\nif [ ! -f test-file ]; then \\\n  echo >> test-file; sleep 2; rm -f test-file; \\\nelse \\\n  echo $@ FAILED; \\\nfi\nendef\n\nall : ONE TWO THREE\nONE : ; @$(test)\nTWO : ; @$(test)\nTHREE : ; @$(test)\nEOF\n\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n$mkoptions = \"-l 0.0001\";\n$mkoptions .= \" -j 4\" if ($parallel_jobs);\n\n&run_make_with_options($makefile, $mkoptions, &get_logfile);\n\n$slurp = &read_file_into_string (&get_logfile(1));\nif ($slurp !~ /cannot enforce load limit/) {\n  &compare_output(\"\", &get_logfile(1));\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-n",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the -n option.\\n\";\n\n$details = \"Try various uses of -n and ensure they all give the correct results.\\n\";\n\nopen(MAKEFILE, \"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOMAKE';\n\nfinal: intermediate ; echo >> $@\nintermediate: orig ; echo >> $@\n\nEOMAKE\n\nclose(MAKEFILE);\n\n&touch('orig');\n\n# TEST 0\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"echo >> intermediate\\necho >> final\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 1\n\n&run_make_with_options($makefile, \"-Worig -n\", &get_logfile);\n$answer = \"echo >> intermediate\\necho >> final\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('orig', 'intermediate', 'final');\n\n# We consider the actual updated timestamp of targets with all\n# recursive commands, even with -n.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\n.SUFFIXES:\nBAR =     # nothing\nFOO = +$(BAR)\na: b; echo > $@\nb: c; $(FOO)\nEOF\n\nclose(MAKEFILE);\n\n&utouch(-20, 'b');\n&utouch(-10, 'a');\n&touch('c');\n\n# TEST 2\n\n&run_make_with_options($makefile2, \"\", &get_logfile);\n$answer = \"$make_name: `a' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST 3\n\n&run_make_with_options($makefile2, \"-n\", &get_logfile);\n$answer = \"$make_name: `a' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('a', 'b', 'c');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-q",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the -q option.\\n\";\n\n$details = \"Try various uses of -q and ensure they all give the correct results.\\n\";\n\n# TEST 0\n\nrun_make_test('\none:\ntwo: ;\nthree: ; :\nfour: ; $(.XY)\nfive: ; \\\n $(.XY)\nsix: ; \\\n $(.XY)\n\t$(.XY)\nseven: ; \\\n $(.XY)\n\t: foo\n\t$(.XY)\n',\n              '-q one', '');\n\n# TEST 1\n\nrun_make_test(undef, '-q two', '');\n\n# TEST 2\n\nrun_make_test(undef, '-q three', '', 256);\n\n# TEST 3\n\nrun_make_test(undef, '-q four', '');\n\n# TEST 4\n\nrun_make_test(undef, '-q five', '');\n\n# TEST 5\n\nrun_make_test(undef, '-q six', '');\n\n# TEST 6\n\nrun_make_test(undef, '-q seven', '', 256);\n\n# TEST 7 : Savannah bug # 7144\n\nrun_make_test('\none:: ; @echo one\none:: ; @echo two\n',\n              '-q', '', 256);\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/dash-t",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the -t option.\\n\";\n\n$details = \"Look out for regressions of prior bugs related to -t.\\n\";\n# That means, nobody has even tried to make the tests below comprehensive\n\n# TEST 0\n# bug reported by Henning Makholm <henning@makholm.net> on 2001-11-03:\n#   make 3.79.1 touches only interm-[ab] but reports final-[a] as\n#   'up to date' without touching them.\n# The 'obvious' fix didn't work for double-colon rules, so pay special\n# attention to them.\n\nopen(MAKEFILE, \"> $makefile\");\nprint MAKEFILE <<'EOMAKE';\nfinal-a: interm-a ; echo >> $@\nfinal-b: interm-b ; echo >> $@\ninterm-a:: orig1-a ; echo >> $@\ninterm-a:: orig2-a ; echo >> $@\ninterm-b:: orig1-b ; echo >> $@\ninterm-b:: orig2-b ; echo >> $@\nEOMAKE\nclose(MAKEFILE);\n\n&utouch(-30, 'orig1-a','orig2-b');\n&utouch(-20, 'interm-a','interm-b');\n&utouch(-10, 'final-a','final-b');\n&touch('orig2-a','orig1-b');\n\n&run_make_with_options($makefile, \"-t final-a final-b\", &get_logfile);\n$answer = \"touch interm-a\\ntouch final-a\\ntouch interm-b\\ntouch final-b\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('orig1-a', 'orig2-a', 'interm-a', 'final-a');\nunlink('orig1-b', 'orig2-b', 'interm-b', 'final-b');\n\n# TEST 1\n# -t should not touch files with no commands.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\nprint MAKEFILE <<'EOMAKE';\n\nPHOOEY: xxx\nxxx: ; @:\n\nEOMAKE\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, \"-t\", &get_logfile);\n$answer = \"touch xxx\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('xxx');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/general",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test generic option processing.\\n\";\n\nopen(MAKEFILE, \"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"foo 1foo: ; \\@echo \\$\\@\\n\";\n\nclose(MAKEFILE);\n\n# TEST 0\n\n&run_make_with_options($makefile, \"-j 1foo\", &get_logfile);\nif (!$parallel_jobs) {\n  $answer = \"$make_name: Parallel jobs (-j) are not supported on this platform.\\n$make_name: Resetting to single job (-j1) mode.\\n1foo\\n\";\n}\nelse {\n  $answer = \"1foo\\n\";\n}\n\n# TEST 1\n\n# This test prints the usage string; I don't really know a good way to\n# test it.  I guess I could invoke make with a known-bad option to see\n# what the usage looks like, then compare it to what I get here... :(\n\n# If I were always on UNIX, I could invoke it with 2>/dev/null, then\n# just check the error code.\n\n&run_make_with_options($makefile, \"-j1foo 2>/dev/null\", &get_logfile, 512);\n$answer = \"\";\n&compare_output($answer, &get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/symlinks",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the -L option.\";\n\n$details = \"Verify that symlink handling with and without -L works properly.\";\n\n# Only run these tests if the system sypports symlinks\n\n# Apparently the Windows port of Perl reports that it does support symlinks\n# (in that the symlink() function doesn't fail) but it really doesn't, so\n# check for it explicitly.\n\nif ($port_type eq 'W32' || !( eval { symlink(\"\",\"\"); 1 })) {\n  # This test is N/A \n  -1;\n} else {\n\n  # Set up a symlink sym -> dep\n  # We'll make both dep and targ older than sym\n  $pwd =~ m%/([^/]+)$%;\n  $dirnm = $1;\n  &utouch(-10, 'dep');\n  &utouch(-5, 'targ');\n  symlink(\"../$dirnm/dep\", 'sym');\n\n  # Without -L, nothing should happen\n  # With -L, it should update targ\n  run_make_test('targ: sym ; @echo make $@ from $<', '',\n                \"#MAKE#: `targ' is up to date.\");\n  run_make_test(undef, '-L', \"make targ from sym\");\n\n  # Now update dep; in all cases targ should be out of date.\n  &touch('dep');\n  run_make_test(undef, '', \"make targ from sym\");\n  run_make_test(undef, '-L', \"make targ from sym\");\n\n  # Now update targ; in all cases targ should be up to date.\n  &touch('targ');\n  run_make_test(undef, '', \"#MAKE#: `targ' is up to date.\");\n  run_make_test(undef, '-L', \"#MAKE#: `targ' is up to date.\");\n\n  # Add in a new link between sym and dep.  Be sure it's newer than targ.\n  sleep(1);\n  rename('dep', 'dep1');\n  symlink('dep1', 'dep');\n\n  # Without -L, nothing should happen\n  # With -L, it should update targ\n  run_make_test(undef, '', \"#MAKE#: `targ' is up to date.\");\n  run_make_test(undef, '-L', \"make targ from sym\");\n\n  rmfiles('targ', 'dep', 'sym', 'dep1');\n\n  # Check handling when symlinks point to non-existent files.  Without -L we\n  # should get an error: with -L we should use the timestamp of the symlink.\n\n  symlink(\"../$dirname/dep\", 'sym');\n  run_make_test('targ: sym ; @echo make $@ from $<', '',\n                \"#MAKE#: *** No rule to make target `sym', needed by `targ'.  Stop.\", 512);\n\n  run_make_test('targ: sym ; @echo make $@ from $<', '-L',\n                'make targ from sym');\n\n\n  rmfiles('targ', 'sym');\n\n  1;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/options/warn-undefined-variables",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the --warn-undefined-variables option.\";\n\n$details = \"Verify that warnings are printed for referencing undefined variables.\";\n\n# Without --warn-undefined-variables, nothing should happen\nrun_make_test('\nEMPTY =\nEREF = $(EMPTY)\nUREF = $(UNDEFINED)\n\nSEREF := $(EREF)\nSUREF := $(UREF)\n\nall: ; @echo ref $(EREF) $(UREF)',\n              '', 'ref');\n\n# With --warn-undefined-variables, it should warn me\nrun_make_test(undef, '--warn-undefined-variables',\n              \"#MAKEFILE#:7: warning: undefined variable `UNDEFINED'\n#MAKEFILE#:9: warning: undefined variable `UNDEFINED'\nref\");\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/DEFAULT",
    "content": "$description = \"The following test creates a makefile to override part\\n\"\n              .\"of one Makefile with Another Makefile with the .DEFAULT\\n\"\n              .\"rule.\";\n\n$details = \"This tests the use of the .DEFAULT special target to say that \\n\"\n          .\"to remake any target that cannot be made fram the information\\n\"\n          .\"in the containing makefile, make should look in another makefile\\n\"\n          .\"This test gives this makefile the target bar which is not \\n\"\n          .\"defined here but passes the target bar on to another makefile\\n\"\n          .\"which does have the target bar defined.\\n\";\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"foo:\\n\";\nprint MAKEFILE \"\\t\\@echo Executing rule FOO\\n\\n\";\nprint MAKEFILE \".DEFAULT:\\n\";\nprint MAKEFILE \"\\t\\@\\$(MAKE) -f $makefile2 \\$\\@ \\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile2\");\n\nprint MAKEFILE \"bar:\\n\";\nprint MAKEFILE \"\\t\\@echo Executing rule BAR\\n\\n\";\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile,'bar',&get_logfile);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"${make_name}[1]: Entering directory `$pwd'\\n\"\n        . \"Executing rule BAR\\n\"\n        . \"${make_name}[1]: Leaving directory `$pwd'\\n\";\n\n# COMPARE RESULTS\n\n&compare_output($answer,&get_logfile(1));\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/FORCE",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following tests rules without Commands or Dependencies.\";\n\n$details = \"If the rule ...\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \".IGNORE :\\n\";\nprint MAKEFILE \"clean: FORCE\\n\";\nprint MAKEFILE \"\\t$delete_command clean\\n\";\nprint MAKEFILE \"FORCE:\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n\n# Create a file named \"clean\".  This is the same name as the target clean\n# and tricks the target into thinking that it is up to date.  (Unless you\n# use the .PHONY target.\n&touch(\"clean\");\n\n$answer = \"$delete_command clean\\n\";\n&run_make_with_options($makefile,\"clean\",&get_logfile);\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/INTERMEDIATE",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the behaviour of the .INTERMEDIATE target.\";\n\n$details = \"\\\nTest the behavior of the .INTERMEDIATE special target.\nCreate a makefile where a file would not normally be considered\nintermediate, then specify it as .INTERMEDIATE.  Build and ensure it's\ndeleted properly.  Rebuild to ensure that it's not created if it doesn't\nexist but doesn't need to be built.  Change the original and ensure\nthat the intermediate file and the ultimate target are both rebuilt, and\nthat the intermediate file is again deleted.\n\nTry this with implicit rules and explicit rules: both should work.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\n\n.INTERMEDIATE: foo.e bar.e\n\n# Implicit rule test\n%.d : %.e ; cp $< $@\n%.e : %.f ; cp $< $@\n\nfoo.d: foo.e\n\n# Explicit rule test\nfoo.c: foo.e bar.e; cat $^ > $@\nEOF\n\nclose(MAKEFILE);\n\n# TEST #0\n\n&utouch(-20, 'foo.f', 'bar.f');\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp foo.e foo.d\\nrm foo.e\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #1\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"$make_name: `foo.d' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #2\n\n&utouch(-10, 'foo.d');\n&touch('foo.f');\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp foo.e foo.d\\nrm foo.e\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #3\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp bar.f bar.e\\ncat foo.e bar.e > foo.c\\nrm bar.e foo.e\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #4\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"$make_name: `foo.c' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #5\n\n&utouch(-10, 'foo.c');\n&touch('foo.f');\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp bar.f bar.e\\ncat foo.e bar.e > foo.c\\nrm bar.e foo.e\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line.\n\n&run_make_with_options($makefile,'foo.e',&get_logfile);\n$answer = \"cp foo.f foo.e\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c');\n\n# TEST #7 -- added for PR/1423\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\nall: foo\nfoo.a: ; touch $@\n%: %.a ; touch $@\n.INTERMEDIATE: foo.a\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, '-R', &get_logfile);\n$answer = \"touch foo.a\\ntouch foo\\nrm foo.a\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('foo');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/PHONY",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following tests the use of a PHONY target.  It makes\\n\"\n              .\"sure that the rules under a target get executed even if\\n\"\n              .\"a filename of the same name of the target exists in the\\n\"\n              .\"directory.\\n\";\n\n$details = \"This makefile in this test declares the target clean to be a \\n\"\n          .\"PHONY target.  We then create a file named \\\"clean\\\" in the \\n\"\n          .\"directory.  Although this file exists, the rule under the target\\n\"\n          .\"clean should still execute because of it's phony status.\";\n\n$example = \"EXAMPLE_FILE\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \".PHONY : clean \\n\";\nprint MAKEFILE \"all: \\n\";\nprint MAKEFILE \"\\t\\@echo This makefile did not clean the dir ... good\\n\";\nprint MAKEFILE \"clean: \\n\";\nprint MAKEFILE \"\\t$delete_command $example clean\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch($example);\n\n# Create a file named \"clean\".  This is the same name as the target clean\n# and tricks the target into thinking that it is up to date.  (Unless you\n# use the .PHONY target.\n&touch(\"clean\");\n\n$answer = \"$delete_command $example clean\\n\";\n&run_make_with_options($makefile,\"clean\",&get_logfile);\n\nif (-f $example) {\n  $test_passed = 0;\n}\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/SECONDARY",
    "content": "#! -*-perl-*-\n\n$description = \"Test the behaviour of the .SECONDARY target.\";\n\n$details = \"\\\nTest the behavior of the .SECONDARY special target.\nCreate a makefile where a file would not normally be considered\nintermediate, then specify it as .SECONDARY.  Build and note that it's\nnot automatically deleted.  Delete the file.  Rebuild to ensure that\nit's not created if it doesn't exist but doesn't need to be built.\nChange the original and ensure that the secondary file and the ultimate\ntarget are both rebuilt, and that the secondary file is not deleted.\n\nTry this with implicit rules and explicit rules: both should work.\\n\";\n\nopen(MAKEFILE,\"> $makefile\");\n\nprint MAKEFILE <<'EOF';\n\n.SECONDARY: foo.e\n\n# Implicit rule test\n%.d : %.e ; cp $< $@\n%.e : %.f ; cp $< $@\n\nfoo.d: foo.e\n\n# Explicit rule test\nfoo.c: foo.e ; cp $< $@\nEOF\n\nclose(MAKEFILE);\n\n# TEST #1\n\n&utouch(-20, 'foo.f');\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp foo.e foo.d\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #2\n\nunlink('foo.e');\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"$make_name: `foo.d' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #3\n\n&utouch(-10, 'foo.d');\n&touch('foo.f');\n\n&run_make_with_options($makefile,'foo.d',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp foo.e foo.d\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #4\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"cp foo.e foo.c\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #5\n\nunlink('foo.e');\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"$make_name: `foo.c' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #6\n\n&utouch(-10, 'foo.c');\n&touch('foo.f');\n\n&run_make_with_options($makefile,'foo.c',&get_logfile);\n$answer = \"cp foo.f foo.e\\ncp foo.e foo.c\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('foo.f', 'foo.e', 'foo.d', 'foo.c');\n\n# TEST #7 -- test the \"global\" .SECONDARY, with no targets.\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\n\nprint MAKEFILE <<'EOF';\n.SECONDARY:\n\nfinal: intermediate\nintermediate: source\n\nfinal intermediate source:\n\techo $< > $@\nEOF\n\nclose(MAKEFILE);\n\n&utouch(-10, 'source');\ntouch('final');\n\n&run_make_with_options($makefile2, '', &get_logfile);\n$answer = \"$make_name: `final' is up to date.\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink('source', 'final', 'intermediate');\n\n\n# TEST #8 -- test the \"global\" .SECONDARY, with .PHONY.\n\ntouch('version2');\nrun_make_test('\n.PHONY: version\n.SECONDARY:\nversion2: version ; @echo GOOD\nall: version2',\n              'all', 'GOOD');\n\nunlink('version2');\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/SILENT",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following tests the special target .SILENT.  By simply\\n\"\n              .\"mentioning this as a target, it tells make not to print\\n\"\n              .\"commands before executing them.\";\n\n$details = \"This test is the same as the clean test except that it should\\n\"\n          .\"not echo its command before deleting the specified file.\\n\";\n\n$example = \"EXAMPLE_FILE\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \".SILENT : clean\\n\";\nprint MAKEFILE \"clean: \\n\";\nprint MAKEFILE \"\\t$delete_command EXAMPLE_FILE\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch($example);\n\n$answer = \"\";\n&run_make_with_options($makefile,\"clean\",&get_logfile,0);\nif (-f $example) {\n  $test_passed = 0;\n}\n&compare_output($answer,&get_logfile(1));\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/targets/clean",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to delete a \\n\"\n              .\"file in the directory.  It tests to see if make will \\n\"\n              .\"NOT execute the command unless the rule is given in \\n\"\n              .\"the make command line.\";\n\n$example = \"EXAMPLE_FILE\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"all: \\n\";\nprint MAKEFILE \"\\t\\@echo This makefile did not clean the dir... good\\n\";\nprint MAKEFILE \"clean: \\n\";\nprint MAKEFILE \"\\t$delete_command EXAMPLE_FILE\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n&touch($example);\n\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"This makefile did not clean the dir... good\\n\";\n\n&compare_output($answer,&get_logfile(1)) || &error (\"abort\");\n\n\n$answer = \"$delete_command $example\\n\";\n&run_make_with_options($makefile,\"clean\",&get_logfile,0);\nif (-f $example) {\n  $test_passed = 0;\n}\n&compare_output($answer,&get_logfile(1)) || &error (\"abort\");\n\n1;\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/test_template",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"<FILL IN SHORT DESCRIPTION HERE>\";\n$details = \"<FILL IN DETAILS OF HOW YOU TEST WHAT YOU SAY YOU ARE TESTING>\";\n\n# Run a make test.  See the documentation of run_make_test() in\n# run_make_tests.pl, but briefly the first argument is a string with the\n# contents of a makefile to be tested, the second is a string containing the\n# arguments to be passed to the make invocation, the third is a string\n# containing the expected output.  The fourth is the expected exit code for\n# make.  If not specified, it's assumed that the make program should succeed\n# (exit with 0).\n\nrun_make_test('Your test makefile goes here',\n              'Arguments to pass to make go here',\n              'Expected output from the invocation goes here');\n\n# There are various special tokens, options, etc.  See the full documentation\n# in run_make_tests.pl.\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/CURDIR",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"This tests the CURDIR varaible.\";\n\n$details = \"Echo CURDIR both with and without -C.  Also ensure overrides work.\";\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE \"all: ; \\@echo \\$(CURDIR)\\n\";\nclose(MAKEFILE);\n\n\n# TEST #1\n# -------\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n$answer = \"$pwd\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/DEFAULT_GOAL",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the .DEFAULT_GOAL special variable.\";\n\n$details = \"\";\n\n\n# Test #1: basic logic.\n#\nrun_make_test('\n# Basics.\n#\nfoo: ; @:\n\nifneq ($(.DEFAULT_GOAL),foo)\n$(error )\nendif\n\n# Reset to empty.\n#\n.DEFAULT_GOAL :=\n\nbar: ; @:\n\nifneq ($(.DEFAULT_GOAL),bar)\n$(error )\nendif\n\n# Change to a different goal.\n#\n\n.DEFAULT_GOAL := baz\n\nbaz: ; @echo $@\n',\n'',\n'baz');\n\n\n# Test #2: unknown goal.\n#\nrun_make_test('\n.DEFAULT_GOAL = foo\n',\n'',\n'#MAKE#: *** No rule to make target `foo\\'.  Stop.',\n512);\n\n\n# Test #3: more than one goal.\n#\nrun_make_test('\n.DEFAULT_GOAL := foo bar\n',\n'',\n'#MAKE#: *** .DEFAULT_GOAL contains more than one target.  Stop.',\n512);\n\n\n# Test #4: Savannah bug #12226.\n#\nrun_make_test('\ndefine rule\nfoo: ; @echo $$@\nendef\n\ndefine make-rule\n$(eval $(rule))\nendef\n\n$(call make-rule)\n\n',\n'',\n'foo');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/INCLUDE_DIRS",
    "content": "#                                                                    -*-perl-*-\n$description = \"Test the .INCLUDE_DIRS special variable.\";\n\n$details = \"\";\n\nuse Cwd;\n\n$dir = cwd;\n$dir =~ s,.*/([^/]+)$,../$1,;\n\n# Test #1: The content of .INCLUDE_DIRS depends on the platform for which\n#          make was built. What we know for sure is that it shouldn't be\n#          empty.\n#\nrun_make_test('\nifeq ($(.INCLUDE_DIRS),)\n$(warning .INCLUDE_DIRS is empty)\nendif\n\n.PHONY: all\nall:;@:\n',\n'',\n'');\n\n\n# Test #2: Make sure -I paths end up in .INCLUDE_DIRS.\n#\nrun_make_test('\nifeq ($(dir),)\n$(warning dir is empty)\nendif\n\nifeq ($(filter $(dir),$(.INCLUDE_DIRS)),)\n$(warning .INCLUDE_DIRS does not contain $(dir))\nendif\n\n.PHONY: all\nall:;@:\n',\n\"-I$dir dir=$dir\",\n'');\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MAKE",
    "content": "#\t\t\t\t\t\t\t\t     -*-perl-*-\n\n$description = \"The following test creates a makefile to test MAKE \\n\"\n              .\"(very generic)\";\n\n$details = \"DETAILS\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE \"TMP  := \\$(MAKE)\\n\";\nprint MAKEFILE \"MAKE := \\$(subst X=\\$(X),,\\$(MAKE))\\n\\n\";\nprint MAKEFILE \"all:\\n\";\nprint MAKEFILE \"\\t\\@echo \\$(TMP)\\n\";\nprint MAKEFILE \"\\t\\$(MAKE) -f $makefile foo\\n\\n\";\nprint MAKEFILE \"foo:\\n\";\nprint MAKEFILE \"\\t\\@echo \\$(MAKE)\\n\";\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n# Create the answer to what should be produced by this Makefile\n$answer = \"$mkpath\\n$mkpath -f $makefile foo\\n\"\n\t. \"${make_name}[1]: Entering directory `$pwd'\\n\"\n\t. \"$mkpath\\n${make_name}[1]: Leaving directory `$pwd'\\n\";\n\n&run_make_with_options($makefile,\"\",&get_logfile,0);\n\n&rmfiles(\"foo\");\n# COMPARE RESULTS\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MAKECMDGOALS",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the MAKECMDGOALS variable.\";\n\n$details = \"\\\nWe construct a makefile with various targets, all of which print out\n\\$(MAKECMDGOALS), then call it different ways.\";\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE \"\\\n.DEFAULT all:\n\t\\@echo \\$(MAKECMDGOALS)\n\";\nclose(MAKEFILE);\n\n# TEST #1\n\n&run_make_with_options($makefile,\n                       \"\",\n                       &get_logfile,\n                       0);\n$answer = \"\\n\";\n&compare_output($answer,&get_logfile(1));\n\n# TEST #2\n\n&run_make_with_options($makefile,\n                       \"all\",\n                       &get_logfile,\n                       0);\n$answer = \"all\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# TEST #3\n\n&run_make_with_options($makefile,\n                       \"foo bar baz yaz\",\n                       &get_logfile,\n                       0);\n$answer = \"foo bar baz yaz\\nfoo bar baz yaz\\nfoo bar baz yaz\\nfoo bar baz yaz\\n\";\n&compare_output($answer,&get_logfile(1));\n\n\n# This tells the test driver that the perl test script executed properly.\n1;\n\n\n\n\n\n\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MAKEFILES",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the MAKEFILES variable.\";\n\n$makefile2 = &get_tmpfile;\n$makefile3 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE 'all: ; @echo DEFAULT RULE: M2=$(M2) M3=$(M3)', \"\\n\";\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile2\");\nprint MAKEFILE <<EOF;\nM2 = m2\nNDEF: ; \\@echo RULE FROM MAKEFILE 2\nEOF\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile3\");\nprint MAKEFILE <<EOF;\nM3 = m3\nNDEF3: ; \\@echo RULE FROM MAKEFILE 3\nEOF\nclose(MAKEFILE);\n\n\n&run_make_with_options($makefile, \"MAKEFILES='$makefile2 $makefile3'\",\n                       &get_logfile);\n$answer = \"DEFAULT RULE: M2=m2 M3=m3\\n\";\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MAKELEVEL",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"The following test creates a makefile to test\nmakelevels in Make. It prints \\$(MAKELEVEL) and then\nprints the environment variable MAKELEVEL\";\n\nopen(MAKEFILE,\"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<EOF;\nall:\n\\t\\@echo MAKELEVEL is \\$(MAKELEVEL)\n\\techo \\$\\$MAKELEVEL\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n# RUN MAKE\n\n&run_make_with_options($makefile,\"\",&get_logfile);\n\n# SET ANSWER\n\n$answer = \"MAKELEVEL is 0\\necho \\$MAKELEVEL\\n1\\n\";\n\n# COMPARE RESULTS\n\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MAKE_RESTARTS",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the MAKE_RESTARTS variable.\";\n\n# Test basic capability\n\nrun_make_test('\nall: ; @:\n$(info MAKE_RESTARTS=$(MAKE_RESTARTS))\ninclude foo.x\nfoo.x: ; @touch $@\n',\n              '', 'MAKE_RESTARTS=\n#MAKEFILE#:4: foo.x: No such file or directory\nMAKE_RESTARTS=1');\n\nrmfiles('foo.x');\n\n# Test multiple restarts\n\nrun_make_test('\nall: ; @:\n$(info MAKE_RESTARTS=$(MAKE_RESTARTS))\ninclude foo.x\nfoo.x: ; @echo \"include bar.x\" > $@\nbar.x: ; @touch $@\n',\n              '', 'MAKE_RESTARTS=\n#MAKEFILE#:4: foo.x: No such file or directory\nMAKE_RESTARTS=1\nfoo.x:1: bar.x: No such file or directory\nMAKE_RESTARTS=2');\n\nrmfiles('foo.x', 'bar.x');\n\n# Test multiple restarts and make sure the variable is cleaned up\n\nrun_make_test('\nrecurse:\n\t@echo recurse MAKE_RESTARTS=$$MAKE_RESTARTS\n\t@$(MAKE) -f #MAKEFILE# all\nall:\n\t@echo all MAKE_RESTARTS=$$MAKE_RESTARTS\n$(info MAKE_RESTARTS=$(MAKE_RESTARTS))\ninclude foo.x\nfoo.x: ; @echo \"include bar.x\" > $@\nbar.x: ; @touch $@\n',\n              '', \"MAKE_RESTARTS=\n#MAKEFILE#:8: foo.x: No such file or directory\nMAKE_RESTARTS=1\nfoo.x:1: bar.x: No such file or directory\nMAKE_RESTARTS=2\nrecurse MAKE_RESTARTS=\nMAKE_RESTARTS=\n#MAKE#[1]: Entering directory `#PWD#'\nall MAKE_RESTARTS=\n#MAKE#[1]: Leaving directory `#PWD#'\");\n\nrmfiles('foo.x', 'bar.x');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/MFILE_LIST",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test the MAKEFILE_LIST variable.\";\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE,\"> $makefile\");\nprint MAKEFILE <<EOF;\nm1 := \\$(MAKEFILE_LIST)\ninclude $makefile2\nm3 := \\$(MAKEFILE_LIST)\n\nall:\n\\t\\@echo \\$(m1)\n\\t\\@echo \\$(m2)\n\\t\\@echo \\$(m3)\nEOF\nclose(MAKEFILE);\n\n\nopen(MAKEFILE,\"> $makefile2\");\nprint MAKEFILE \"m2 := \\$(MAKEFILE_LIST)\\n\";\nclose(MAKEFILE);\n\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"$makefile\\n$makefile $makefile2\\n$makefile $makefile2\\n\";\n&compare_output($answer,&get_logfile(1));\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/SHELL",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test proper handling of SHELL.\";\n\n# Find the default value when SHELL is not set.  On UNIX it will be /bin/sh,\n# but on other platforms who knows?\nresetENV();\ndelete $ENV{SHELL};\n$mshell = `echo 'all:;\\@echo \\$(SHELL)' | $make_path -f-`;\nchop $mshell;\n\n# According to POSIX, the value of SHELL in the environment has no impact on\n# the value in the makefile.\n# Note %extraENV takes precedence over the default value for the shell.\n\n$extraENV{SHELL} = '/dev/null';\nrun_make_test('all:;@echo \"$(SHELL)\"', '', $mshell);\n\n# According to POSIX, any value of SHELL set in the makefile should _NOT_ be\n# exported to the subshell!  I wanted to set SHELL to be $^X (perl) in the\n# makefile, but make runs $(SHELL) -c 'commandline' and that doesn't work at\n# all when $(SHELL) is perl :-/.  So, we just add an extra initial /./ which\n# works well on UNIX and seems to work OK on at least some non-UNIX systems.\n\n$extraENV{SHELL} = $mshell;\n\nrun_make_test(\"SHELL := /./$mshell\\n\".'\nall:;@echo \"$(SHELL) $$SHELL\"\n', '', \"/./$mshell $mshell\");\n\n# As a GNU make extension, if make's SHELL variable is explicitly exported,\n# then we really _DO_ export it.\n\n$extraENV{SHELL} = $mshell;\n\nrun_make_test(\"export SHELL := /./$mshell\\n\".'\nall:;@echo \"$(SHELL) $$SHELL\"\n', '', \"/./$mshell /./$mshell\");\n\n\n# Test out setting of SHELL, both exported and not, as a target-specific\n# variable.\n\n$extraENV{SHELL} = $mshell;\n\nrun_make_test(\"all: SHELL := /./$mshell\\n\".'\nall:;@echo \"$(SHELL) $$SHELL\"\n', '', \"/./$mshell $mshell\");\n\n$extraENV{SHELL} = $mshell;\n\nrun_make_test(\"all: export SHELL := /./$mshell\\n\".'\nall:;@echo \"$(SHELL) $$SHELL\"\n', '', \"/./$mshell $mshell\");\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/automatic",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test automatic variable setting.\";\n\n$details = \"\";\n\nuse Cwd;\n\n$dir = cwd;\n$dir =~ s,.*/([^/]+)$,../$1,;\n\nopen(MAKEFILE, \"> $makefile\");\nprint MAKEFILE \"dir = $dir\\n\";\nprint MAKEFILE <<'EOF';\n.SUFFIXES:\n.SUFFIXES: .x .y .z\n$(dir)/foo.x : baz.z $(dir)/bar.y baz.z\n\t@echo '$$@ = $@, $$(@D) = $(@D), $$(@F) = $(@F)'\n\t@echo '$$* = $*, $$(*D) = $(*D), $$(*F) = $(*F)'\n\t@echo '$$< = $<, $$(<D) = $(<D), $$(<F) = $(<F)'\n\t@echo '$$^ = $^, $$(^D) = $(^D), $$(^F) = $(^F)'\n\t@echo '$$+ = $+, $$(+D) = $(+D), $$(+F) = $(+F)'\n\t@echo '$$? = $?, $$(?D) = $(?D), $$(?F) = $(?F)'\n\ttouch $@\n\n$(dir)/bar.y baz.z : ; touch $@\nEOF\nclose(MAKEFILE);\n\n# TEST #0 -- simple test\n# -------\n\n# Touch these into the past\n&utouch(-10, qw(foo.x baz.z));\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"touch $dir/bar.y\n\\$\\@ = $dir/foo.x, \\$(\\@D) = $dir, \\$(\\@F) = foo.x\n\\$* = $dir/foo, \\$(*D) = $dir, \\$(*F) = foo\n\\$< = baz.z, \\$(<D) = ., \\$(<F) = baz.z\n\\$^ = baz.z $dir/bar.y, \\$(^D) = . $dir, \\$(^F) = baz.z bar.y\n\\$+ = baz.z $dir/bar.y baz.z, \\$(+D) = . $dir ., \\$(+F) = baz.z bar.y baz.z\n\\$? = $dir/bar.y, \\$(?D) = $dir, \\$(?F) = bar.y\ntouch $dir/foo.x\\n\";\n&compare_output($answer, &get_logfile(1));\n\nunlink(qw(foo.x bar.y baz.z));\n\n# TEST #1 -- test the SysV emulation of $$@ etc.\n# -------\n\n$makefile2 = &get_tmpfile;\n\nopen(MAKEFILE, \"> $makefile2\");\nprint MAKEFILE \"dir = $dir\\n\";\nprint MAKEFILE <<'EOF';\n.SECONDEXPANSION:\n.SUFFIXES:\n.DEFAULT: ; @echo '$@'\n\n$(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x\n\n$(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).%\n\n$(dir)/biz: $$(@).x $${@}.x $${@D}.x $${@F}.x\nEOF\n\nclose(MAKEFILE);\n\n&run_make_with_options($makefile2, \"$dir/foo $dir/bar\", &get_logfile);\n$answer = \".x\\n$dir/foo.x\\nx\\n\\$@.x\\n$dir.x\\nfoo.x\\n$dir/bar.x\\nbar.x\\n\";\n&compare_output($answer, &get_logfile(1));\n\n&run_make_with_options($makefile2, \"$dir/x.z $dir/y.z\", &get_logfile);\n$answer = \".x\\n$dir/x.z.x\\nx\\n\\$@.x\\n$dir.x\\nx.z.x\\n.y\\n$dir/y.z.y\\n\\y\\n\\$@.y\\n$dir.y\\ny.z.y\\n\";\n&compare_output($answer, &get_logfile(1));\n\n&run_make_with_options($makefile2, \"$dir/biz\", &get_logfile);\n$answer = \"$dir/biz.x\\n$dir.x\\nbiz.x\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #2 -- test for Savannah bug #12320.\n#\nrun_make_test('\n.SUFFIXES: .b .src\n\nmbr.b: mbr.src\n\t@echo $*\n\nmbr.src: ; @:',\n              '',\n              'mbr');\n\n# TEST #3 -- test for Savannah bug #8154\n# Make sure that nonexistent prerequisites are listed in $?, since they are\n# considered reasons for the target to be rebuilt.\n#\n# This was undone due to Savannah bug #16002.  We'll re-do it in the next\n# release.  See Savannah bug #16051.\n\n#touch('foo');\n#\n#run_make_test('\n#foo: bar ; @echo \"\\$$? = $?\"\n#bar: ;',\n#              '',\n#              '$? = bar');\n#\n#unlink('foo');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/flavors",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test various flavors of make variable setting.\";\n\n$details = \"\";\n\nopen(MAKEFILE, \"> $makefile\");\n\n# The Contents of the MAKEFILE ...\n\nprint MAKEFILE <<'EOF';\nfoo = $(bar)\nbar = ${ugh}\nugh = Hello\n\nall: multi ; @echo $(foo)\n\nmulti: ; $(multi)\n\nx := foo\ny := $(x) bar\nx := later\n\nnullstring :=\nspace := $(nullstring) $(nullstring)\n\nnext: ; @echo $x$(space)$y\n\ndefine multi\n@echo hi\necho there\nendef\n\nifdef BOGUS\ndefine\n@echo error\nendef\nendif\n\ndefine outer\n define inner\n  A = B\n endef\nendef\n\n$(eval $(outer))\n\nouter: ; @echo $(inner)\n\nEOF\n\n# END of Contents of MAKEFILE\n\nclose(MAKEFILE);\n\n# TEST #1\n# -------\n\n&run_make_with_options($makefile, \"\", &get_logfile);\n$answer = \"hi\\necho there\\nthere\\nHello\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #2\n# -------\n\n&run_make_with_options($makefile, \"next\", &get_logfile);\n$answer = \"later foo bar\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #3\n# -------\n\n&run_make_with_options($makefile, \"BOGUS=true\", &get_logfile, 512);\n$answer = \"$makefile:24: *** empty variable name.  Stop.\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# TEST #4\n# -------\n\n&run_make_with_options($makefile, \"outer\", &get_logfile);\n$answer = \"A = B\\n\";\n&compare_output($answer, &get_logfile(1));\n\n# Clean up from \"old style\" testing.  If all the above tests are converted to\n# run_make_test() syntax than this line can be removed.\n$makefile = undef;\n\n# -------------------------\n# Make sure that prefix characters apply properly to define/endef values.\n#\n# There's a bit of oddness here if you try to use a variable to hold the\n# prefix character for a define.  Even though something like this:\n#\n#       define foo\n#       echo bar\n#       endef\n#\n#       all: ; $(V)$(foo)\n#\n# (where V=@) can be seen by the user to be obviously different than this:\n#\n#       define foo\n#       $(V)echo bar\n#       endef\n#\n#       all: ; $(foo)\n#\n# and the user thinks it should behave the same as when the \"@\" is literal\n# instead of in a variable, that can't happen because by the time make\n# expands the variables for the command line and sees it begins with a \"@\" it\n# can't know anymore whether the prefix character came before the variable\n# reference or was included in the first line of the variable reference.\n\n# TEST #5\n# -------\n\nrun_make_test('\ndefine FOO\n$(V1)echo hello\n$(V2)echo world\nendef\nall: ; @$(FOO)\n', '', 'hello\nworld');\n\n# TEST #6\n# -------\n\nrun_make_test(undef, 'V1=@ V2=@', 'hello\nworld');\n\n# TEST #7\n# -------\n\nrun_make_test('\ndefine FOO\n$(V1)echo hello\n$(V2)echo world\nendef\nall: ; $(FOO)\n', 'V1=@', 'hello\necho world\nworld');\n\n# TEST #8\n# -------\n\nrun_make_test(undef, 'V2=@', 'echo hello\nhello\nworld');\n\n# TEST #9\n# -------\n\nrun_make_test(undef, 'V1=@ V2=@', 'hello\nworld');\n\n# TEST #10\n# -------\n# Test the basics; a \"@\" internally to the variable applies to only one line.\n# A \"@\" before the variable applies to the entire variable.\n\nrun_make_test('\ndefine FOO\n@echo hello\necho world\nendef\ndefine BAR\necho hello\necho world\nendef\n\nall: foo bar\nfoo: ; $(FOO)\nbar: ; @$(BAR)\n', '', 'hello\necho world\nworld\nhello\nworld\n');\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/negative",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Run some negative tests (things that should fail).\";\n\n# TEST #0\n# Check that non-terminated variable references are detected (and\n# reported using the best filename/lineno info\nrun_make_test('\nfoo = bar\nx = $(foo\ny = $x\n\nall: ; @echo $y\n',\n              '', '#MAKEFILE#:3: *** unterminated variable reference.  Stop.',\n              512);\n\n# TEST #1\n# Bogus variable value passed on the command line.\nrun_make_test(undef,\n              'x=\\$\\(other',\n              '#MAKEFILE#:4: *** unterminated variable reference.  Stop.',\n              512);\n\n# TEST #2\n# Again, but this time while reading the makefile.\nrun_make_test('\nfoo = bar\nx = $(foo\ny = $x\n\nz := $y\n\nall: ; @echo $y\n',\n              '', '#MAKEFILE#:3: *** unterminated variable reference.  Stop.',\n              512);\n\n# TEST #3\n# Bogus variable value passed on the command line.\nrun_make_test(undef,\n              'x=\\$\\(other',\n              '#MAKEFILE#:4: *** unterminated variable reference.  Stop.',\n              512);\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/scripts/variables/special",
    "content": "#                                                                    -*-perl-*-\n\n$description = \"Test special GNU make variables.\";\n\n$details = \"\";\n\n&run_make_test('\n\nX1 := $(sort $(filter FOO BAR,$(.VARIABLES)))\n\nFOO := foo\n\nX2 := $(sort $(filter FOO BAR,$(.VARIABLES)))\n\nBAR := bar\n\nall:\n\t@echo X1 = $(X1)\n\t@echo X2 = $(X2)\n\t@echo LAST = $(sort $(filter FOO BAR,$(.VARIABLES)))\n',\n               '', \"X1 =\\nX2 = FOO\\nLAST = BAR FOO\\n\");\n\n\n\n# $makefile2 = &get_tmpfile;\n# open(MAKEFILE, \"> $makefile2\");\n\n# print MAKEFILE <<'EOF';\n\n# X1 := $(sort $(.TARGETS))\n\n# all: foo\n# \t@echo X1 = $(X1)\n# \t@echo X2 = $(X2)\n# \t@echo LAST = $(sort $(.TARGETS))\n\n# X2 := $(sort $(.TARGETS))\n\n# foo:\n\n# EOF\n\n# close(MAKEFILE);\n\n# # TEST #2\n# # -------\n\n# &run_make_with_options($makefile2, \"\", &get_logfile);\n# $answer = \"X1 =\\nX2 = all\\nLAST = all foo\\n\";\n# &compare_output($answer, &get_logfile(1));\n\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/tests/test_driver.pl",
    "content": "#!/usr/bin/perl\n# -*-perl-*-\n#\n# Modification history:\n# Written 91-12-02 through 92-01-01 by Stephen McGee.\n# Modified 92-02-11 through 92-02-22 by Chris Arthur to further generalize.\n#\n# Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,\n# 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n\n# Test driver routines used by a number of test suites, including\n# those for SCS, make, roll_dir, and scan_deps (?).\n#\n# this routine controls the whole mess; each test suite sets up a few\n# variables and then calls &toplevel, which does all the real work.\n\n# $Id: test_driver.pl,v 1.19 2006/03/10 02:20:45 psmith Exp $\n\n\n# The number of test categories we've run\n$categories_run = 0;\n# The number of test categroies that have passed\n$categories_passed = 0;\n# The total number of individual tests that have been run\n$total_tests_run = 0;\n# The total number of individual tests that have passed\n$total_tests_passed = 0;\n# The number of tests in this category that have been run\n$tests_run = 0;\n# The number of tests in this category that have passed\n$tests_passed = 0;\n\n\n# Yeesh.  This whole test environment is such a hack!\n$test_passed = 1;\n\n\n# %makeENV is the cleaned-out environment.\n%makeENV = ();\n\n# %extraENV are any extra environment variables the tests might want to set.\n# These are RESET AFTER EVERY TEST!\n%extraENV = ();\n\n# %origENV is the caller's original environment\n%origENV = %ENV;\n\nsub resetENV\n{\n  # We used to say \"%ENV = ();\" but this doesn't work in Perl 5.000\n  # through Perl 5.004.  It was fixed in Perl 5.004_01, but we don't\n  # want to require that here, so just delete each one individually.\n  foreach $v (keys %ENV) {\n    delete $ENV{$v};\n  }\n\n  %ENV = %makeENV;\n  foreach $v (keys %extraENV) {\n    $ENV{$v} = $extraENV{$v};\n    delete $extraENV{$v};\n  }\n}\n\nsub toplevel\n{\n  # Pull in benign variables from the user's environment\n  #\n  foreach (# UNIX-specific things\n           'TZ', 'LANG', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH',\n           # Purify things\n           'PURIFYOPTIONS',\n           # Windows NT-specific stuff\n           'Path', 'SystemRoot',\n           # DJGPP-specific stuff\n           'DJDIR', 'DJGPP', 'SHELL', 'COMSPEC', 'HOSTNAME', 'LFN',\n           'FNCASE', '387', 'EMU387', 'GROUP'\n          ) {\n    $makeENV{$_} = $ENV{$_} if $ENV{$_};\n  }\n\n  # Replace the environment with the new one\n  #\n  %origENV = %ENV;\n\n  resetENV();\n\n  $| = 1;                     # unbuffered output\n\n  $debug = 0;                 # debug flag\n  $profile = 0;               # profiling flag\n  $verbose = 0;               # verbose mode flag\n  $detail = 0;                # detailed verbosity\n  $keep = 0;                  # keep temp files around\n  $workdir = \"work\";          # The directory where the test will start running\n  $scriptdir = \"scripts\";     # The directory where we find the test scripts\n  $tmpfilesuffix = \"t\";       # the suffix used on tmpfiles\n  $default_output_stack_level = 0;  # used by attach_default_output, etc.\n  $default_input_stack_level = 0;   # used by attach_default_input, etc.\n  $cwd = \".\";                 # don't we wish we knew\n  $cwdslash = \"\";             # $cwd . $pathsep, but \"\" rather than \"./\"\n\n  &get_osname;  # sets $osname, $vos, $pathsep, and $short_filenames\n\n  &set_defaults;  # suite-defined\n\n  &parse_command_line (@ARGV);\n\n  print \"OS name = `$osname'\\n\" if $debug;\n\n  $workpath = \"$cwdslash$workdir\";\n  $scriptpath = \"$cwdslash$scriptdir\";\n\n  &set_more_defaults;  # suite-defined\n\n  &print_banner;\n\n  if (-d $workpath)\n  {\n    print \"Clearing $workpath...\\n\";\n    &remove_directory_tree(\"$workpath/\")\n          || &error (\"Couldn't wipe out $workpath\\n\");\n  }\n  else\n  {\n    mkdir ($workpath, 0777) || &error (\"Couldn't mkdir $workpath: $!\\n\");\n  }\n\n  if (!-d $scriptpath)\n  {\n    &error (\"Failed to find $scriptpath containing perl test scripts.\\n\");\n  }\n\n  if (@TESTS)\n  {\n    print \"Making work dirs...\\n\";\n    foreach $test (@TESTS)\n    {\n      if ($test =~ /^([^\\/]+)\\//)\n      {\n        $dir = $1;\n        push (@rmdirs, $dir);\n        -d \"$workpath/$dir\"\n\t   || mkdir (\"$workpath/$dir\", 0777)\n           || &error (\"Couldn't mkdir $workpath/$dir: $!\\n\");\n      }\n    }\n  }\n  else\n  {\n    print \"Finding tests...\\n\";\n    opendir (SCRIPTDIR, $scriptpath)\n\t|| &error (\"Couldn't opendir $scriptpath: $!\\n\");\n    @dirs = grep (!/^(\\..*|CVS|RCS)$/, readdir (SCRIPTDIR) );\n    closedir (SCRIPTDIR);\n    foreach $dir (@dirs)\n    {\n      next if ($dir =~ /^(\\..*|CVS|RCS)$/ || ! -d \"$scriptpath/$dir\");\n      push (@rmdirs, $dir);\n      mkdir (\"$workpath/$dir\", 0777)\n           || &error (\"Couldn't mkdir $workpath/$dir: $!\\n\");\n      opendir (SCRIPTDIR, \"$scriptpath/$dir\")\n\t  || &error (\"Couldn't opendir $scriptpath/$dir: $!\\n\");\n      @files = grep (!/^(\\..*|CVS|RCS|.*~)$/, readdir (SCRIPTDIR) );\n      closedir (SCRIPTDIR);\n      foreach $test (@files)\n      {\n        -d $test and next;\n\tpush (@TESTS, \"$dir/$test\");\n      }\n    }\n  }\n\n  if (@TESTS == 0)\n  {\n    &error (\"\\nNo tests in $scriptpath, and none were specified.\\n\");\n  }\n\n  print \"\\n\";\n\n  &run_each_test;\n\n  foreach $dir (@rmdirs)\n  {\n    rmdir (\"$workpath/$dir\");\n  }\n\n  $| = 1;\n\n  $categories_failed = $categories_run - $categories_passed;\n  $total_tests_failed = $total_tests_run - $total_tests_passed;\n\n  if ($total_tests_failed)\n  {\n    print \"\\n$total_tests_failed Test\";\n    print \"s\" unless $total_tests_failed == 1;\n    print \" in $categories_failed Categor\";\n    print ($categories_failed == 1 ? \"y\" : \"ies\");\n    print \" Failed (See .$diffext files in $workdir dir for details) :-(\\n\\n\";\n    return 0;\n  }\n  else\n  {\n    print \"\\n$total_tests_passed Test\";\n    print \"s\" unless $total_tests_passed == 1;\n    print \" in $categories_passed Categor\";\n    print ($categories_passed == 1 ? \"y\" : \"ies\");\n    print \" Complete ... No Failures :-)\\n\\n\";\n    return 1;\n  }\n}\n\nsub get_osname\n{\n  # Set up an initial value.  In perl5 we can do it the easy way.\n  #\n  $osname = defined($^O) ? $^O : '';\n\n  # See if the filesystem supports long file names with multiple\n  # dots.  DOS doesn't.\n  $short_filenames = 0;\n  (open (TOUCHFD, \"> fancy.file.name\") && close (TOUCHFD))\n      || ($short_filenames = 1);\n  unlink (\"fancy.file.name\") || ($short_filenames = 1);\n\n  if (! $short_filenames) {\n    # Thanks go to meyering@cs.utexas.edu (Jim Meyering) for suggesting a\n    # better way of doing this.  (We used to test for existence of a /mnt\n    # dir, but that apparently fails on an SGI Indigo (whatever that is).)\n    # Because perl on VOS translates /'s to >'s, we need to test for\n    # VOSness rather than testing for Unixness (ie, try > instead of /).\n\n    mkdir (\".ostest\", 0777) || &error (\"Couldn't create .ostest: $!\\n\", 1);\n    open (TOUCHFD, \"> .ostest>ick\") && close (TOUCHFD);\n    chdir (\".ostest\") || &error (\"Couldn't chdir to .ostest: $!\\n\", 1);\n  }\n\n  if (! $short_filenames && -f \"ick\")\n  {\n    $osname = \"vos\";\n    $vos = 1;\n    $pathsep = \">\";\n  }\n  else\n  {\n    # the following is regrettably knarly, but it seems to be the only way\n    # to not get ugly error messages if uname can't be found.\n    # Hmmm, BSD/OS 2.0's uname -a is excessively verbose.  Let's try it\n    # with switches first.\n    eval \"chop (\\$osname = `sh -c 'uname -nmsr 2>&1'`)\";\n    if ($osname =~ /not found/i)\n    {\n\t$osname = \"(something unixy with no uname)\";\n    }\n    elsif ($@ ne \"\" || $?)\n    {\n        eval \"chop (\\$osname = `sh -c 'uname -a 2>&1'`)\";\n        if ($@ ne \"\" || $?)\n        {\n\t    $osname = \"(something unixy)\";\n\t}\n    }\n    $vos = 0;\n    $pathsep = \"/\";\n  }\n\n  if (! $short_filenames) {\n    chdir (\"..\") || &error (\"Couldn't chdir to ..: $!\\n\", 1);\n    unlink (\".ostest>ick\");\n    rmdir (\".ostest\") || &error (\"Couldn't rmdir .ostest: $!\\n\", 1);\n  }\n}\n\nsub parse_command_line\n{\n  @argv = @_;\n\n  # use @ARGV if no args were passed in\n\n  if (@argv == 0)\n  {\n    @argv = @ARGV;\n  }\n\n  # look at each option; if we don't recognize it, maybe the suite-specific\n  # command line parsing code will...\n\n  while (@argv)\n  {\n    $option = shift @argv;\n    if ($option =~ /^-debug$/i)\n    {\n      print \"\\nDEBUG ON\\n\";\n      $debug = 1;\n    }\n    elsif ($option =~ /^-usage$/i)\n    {\n      &print_usage;\n      exit 0;\n    }\n    elsif ($option =~ /^-(h|help)$/i)\n    {\n      &print_help;\n      exit 0;\n    }\n    elsif ($option =~ /^-profile$/i)\n    {\n      $profile = 1;\n    }\n    elsif ($option =~ /^-verbose$/i)\n    {\n      $verbose = 1;\n    }\n    elsif ($option =~ /^-detail$/i)\n    {\n      $detail = 1;\n      $verbose = 1;\n    }\n    elsif ($option =~ /^-keep$/i)\n    {\n      $keep = 1;\n    }\n    elsif (&valid_option($option))\n    {\n      # The suite-defined subroutine takes care of the option\n    }\n    elsif ($option =~ /^-/)\n    {\n      print \"Invalid option: $option\\n\";\n      &print_usage;\n      exit 0;\n    }\n    else # must be the name of a test\n    {\n      $option =~ s/\\.pl$//;\n      push(@TESTS,$option);\n    }\n  }\n}\n\nsub max\n{\n  local($num) = shift @_;\n  local($newnum);\n\n  while (@_)\n  {\n    $newnum = shift @_;\n    if ($newnum > $num)\n    {\n      $num = $newnum;\n    }\n  }\n\n  return $num;\n}\n\nsub print_centered\n{\n  local($width, $string) = @_;\n  local($pad);\n\n  if (length ($string))\n  {\n    $pad = \" \" x ( ($width - length ($string) + 1) / 2);\n    print \"$pad$string\";\n  }\n}\n\nsub print_banner\n{\n  local($info);\n  local($line);\n  local($len);\n\n  $info = \"Running tests for $testee on $osname\\n\";  # $testee is suite-defined\n  $len = &max (length ($line), length ($testee_version),\n               length ($banner_info), 73) + 5;\n  $line = (\"-\" x $len) . \"\\n\";\n  if ($len < 78)\n  {\n    $len = 78;\n  }\n\n  &print_centered ($len, $line);\n  &print_centered ($len, $info);\n  &print_centered ($len, $testee_version);  # suite-defined\n  &print_centered ($len, $banner_info);     # suite-defined\n  &print_centered ($len, $line);\n  print \"\\n\";\n}\n\nsub run_each_test\n{\n  $categories_run = 0;\n\n  foreach $testname (sort @TESTS)\n  {\n    ++$categories_run;\n    $suite_passed = 1;       # reset by test on failure\n    $num_of_logfiles = 0;\n    $num_of_tmpfiles = 0;\n    $description = \"\";\n    $details = \"\";\n    $old_makefile = undef;\n    $testname =~ s/^$scriptpath$pathsep//;\n    $perl_testname = \"$scriptpath$pathsep$testname\";\n    $testname =~ s/(\\.pl|\\.perl)$//;\n    $testpath = \"$workpath$pathsep$testname\";\n    # Leave enough space in the extensions to append a number, even\n    # though it needs to fit into 8+3 limits.\n    if ($short_filenames) {\n      $logext = 'l';\n      $diffext = 'd';\n      $baseext = 'b';\n      $extext = '';\n    } else {\n      $logext = 'log';\n      $diffext = 'diff';\n      $baseext = 'base';\n      $extext = '.';\n    }\n    $log_filename = \"$testpath.$logext\";\n    $diff_filename = \"$testpath.$diffext\";\n    $base_filename = \"$testpath.$baseext\";\n    $tmp_filename = \"$testpath.$tmpfilesuffix\";\n\n    &setup_for_test;          # suite-defined\n\n    $output = \"........................................................ \";\n\n    substr($output,0,length($testname)) = \"$testname \";\n\n    print $output;\n\n    # Run the actual test!\n    $tests_run = 0;\n    $tests_passed = 0;\n    $code = do $perl_testname;\n\n    $total_tests_run += $tests_run;\n    $total_tests_passed += $tests_passed;\n\n    # How did it go?\n    if (!defined($code))\n    {\n      $suite_passed = 0;\n      if (length ($@)) {\n        warn \"\\n*** Test died ($testname): $@\\n\";\n      } else {\n        warn \"\\n*** Couldn't run $perl_testname\\n\";\n      }\n    }\n    elsif ($code == -1) {\n      $suite_passed = 0;\n    }\n    elsif ($code != 1 && $code != -1) {\n      $suite_passed = 0;\n      warn \"\\n*** Test returned $code\\n\";\n    }\n\n    if ($suite_passed) {\n      ++$categories_passed;\n      $status = \"ok     ($tests_passed passed)\";\n      for ($i = $num_of_tmpfiles; $i; $i--)\n      {\n        &rmfiles ($tmp_filename . &num_suffix ($i) );\n      }\n\n      for ($i = $num_of_logfiles ? $num_of_logfiles : 1; $i; $i--)\n      {\n        &rmfiles ($log_filename . &num_suffix ($i) );\n        &rmfiles ($base_filename . &num_suffix ($i) );\n      }\n    }\n    elsif (!defined $code || $code > 0) {\n      $status = \"FAILED ($tests_passed/$tests_run passed)\";\n    }\n    elsif ($code < 0) {\n      $status = \"N/A\";\n      --$categories_run;\n    }\n\n    # If the verbose option has been specified, then a short description\n    # of each test is printed before displaying the results of each test\n    # describing WHAT is being tested.\n\n    if ($verbose)\n    {\n      if ($detail)\n      {\n        print \"\\nWHAT IS BEING TESTED\\n\";\n        print \"--------------------\";\n      }\n      print \"\\n\\n$description\\n\\n\";\n    }\n\n    # If the detail option has been specified, then the details of HOW\n    # the test is testing what it says it is testing in the verbose output\n    # will be displayed here before the results of the test are displayed.\n\n    if ($detail)\n    {\n      print \"\\nHOW IT IS TESTED\\n\";\n      print \"----------------\";\n      print \"\\n\\n$details\\n\\n\";\n    }\n\n    print \"$status\\n\";\n  }\n}\n\n# If the keep flag is not set, this subroutine deletes all filenames that\n# are sent to it.\n\nsub rmfiles\n{\n  local(@files) = @_;\n\n  if (!$keep)\n  {\n    return (unlink @files);\n  }\n\n  return 1;\n}\n\nsub print_standard_usage\n{\n  local($plname,@moreusage) = @_;\n  local($line);\n\n  print \"Usage:  perl $plname [testname] [-verbose] [-detail] [-keep]\\n\";\n  print \"                               [-profile] [-usage] [-help] \"\n      . \"[-debug]\\n\";\n  foreach $line (@moreusage)\n  {\n    print \"                               $line\\n\";\n  }\n}\n\nsub print_standard_help\n{\n  local(@morehelp) = @_;\n  local($line);\n  local($tline);\n  local($t) = \"      \";\n\n  $line = \"Test Driver For $testee\";\n  print \"$line\\n\";\n  $line = \"=\" x length ($line);\n  print \"$line\\n\";\n\n  &print_usage;\n\n  print \"\\ntestname\\n\"\n      . \"${t}You may, if you wish, run only ONE test if you know the name\\n\"\n      . \"${t}of that test and specify this name anywhere on the command\\n\"\n      . \"${t}line.  Otherwise ALL existing tests in the scripts directory\\n\"\n      . \"${t}will be run.\\n\"\n      . \"-verbose\\n\"\n      . \"${t}If this option is given, a description of every test is\\n\"\n      . \"${t}displayed before the test is run. (Not all tests may have\\n\"\n      . \"${t}descriptions at this time)\\n\"\n      . \"-detail\\n\"\n      . \"${t}If this option is given, a detailed description of every\\n\"\n      . \"${t}test is displayed before the test is run. (Not all tests\\n\"\n      . \"${t}have descriptions at this time)\\n\"\n      . \"-profile\\n\"\n      . \"${t}If this option is given, then the profile file\\n\"\n      . \"${t}is added to other profiles every time $testee is run.\\n\"\n      . \"${t}This option only works on VOS at this time.\\n\"\n      . \"-keep\\n\"\n      . \"${t}You may give this option if you DO NOT want ANY\\n\"\n      . \"${t}of the files generated by the tests to be deleted. \\n\"\n      . \"${t}Without this option, all files generated by the test will\\n\"\n      . \"${t}be deleted IF THE TEST PASSES.\\n\"\n      . \"-debug\\n\"\n      . \"${t}Use this option if you would like to see all of the system\\n\"\n      . \"${t}calls issued and their return status while running the tests\\n\"\n      . \"${t}This can be helpful if you're having a problem adding a test\\n\"\n      . \"${t}to the suite, or if the test fails!\\n\";\n\n  foreach $line (@morehelp)\n  {\n    $tline = $line;\n    if (substr ($tline, 0, 1) eq \"\\t\")\n    {\n      substr ($tline, 0, 1) = $t;\n    }\n    print \"$tline\\n\";\n  }\n}\n\n#######################################################################\n###########         Generic Test Driver Subroutines         ###########\n#######################################################################\n\nsub get_caller\n{\n  local($depth);\n  local($package);\n  local($filename);\n  local($linenum);\n\n  $depth = defined ($_[0]) ? $_[0] : 1;\n  ($package, $filename, $linenum) = caller ($depth + 1);\n  return \"$filename: $linenum\";\n}\n\nsub error\n{\n  local($message) = $_[0];\n  local($caller) = &get_caller (1);\n\n  if (defined ($_[1]))\n  {\n    $caller = &get_caller ($_[1] + 1) . \" -> $caller\";\n  }\n\n  die \"$caller: $message\";\n}\n\nsub compare_output\n{\n  local($answer,$logfile) = @_;\n  local($slurp, $answer_matched) = ('', 0);\n\n  print \"Comparing Output ........ \" if $debug;\n\n  $slurp = &read_file_into_string ($logfile);\n\n  # For make, get rid of any time skew error before comparing--too bad this\n  # has to go into the \"generic\" driver code :-/\n  $slurp =~ s/^.*modification time .*in the future.*\\n//gm;\n  $slurp =~ s/^.*Clock skew detected.*\\n//gm;\n\n  ++$tests_run;\n\n  if ($slurp eq $answer) {\n    $answer_matched = 1;\n  } else {\n    # See if it is a slash or CRLF problem\n    local ($answer_mod) = $answer;\n\n    $answer_mod =~ tr,\\\\,/,;\n    $answer_mod =~ s,\\r\\n,\\n,gs;\n\n    $slurp =~ tr,\\\\,/,;\n    $slurp =~ s,\\r\\n,\\n,gs;\n\n    $answer_matched = ($slurp eq $answer_mod);\n  }\n\n  if ($answer_matched && $test_passed)\n  {\n    print \"ok\\n\" if $debug;\n    ++$tests_passed;\n    return 1;\n  }\n\n  if (! $answer_matched) {\n    print \"DIFFERENT OUTPUT\\n\" if $debug;\n\n    &create_file (&get_basefile, $answer);\n\n    print \"\\nCreating Difference File ...\\n\" if $debug;\n\n    # Create the difference file\n\n    local($command) = \"diff -c \" . &get_basefile . \" \" . $logfile;\n    &run_command_with_output(&get_difffile,$command);\n  }\n\n  $suite_passed = 0;\n  return 0;\n}\n\nsub read_file_into_string\n{\n  local($filename) = @_;\n  local($oldslash) = $/;\n\n  undef $/;\n\n  open (RFISFILE, $filename) || return \"\";\n  local ($slurp) = <RFISFILE>;\n  close (RFISFILE);\n\n  $/ = $oldslash;\n\n  return $slurp;\n}\n\nsub attach_default_output\n{\n  local ($filename) = @_;\n  local ($code);\n\n  if ($vos)\n  {\n    $code = system \"++attach_default_output_hack $filename\";\n    $code == -2 || &error (\"adoh death\\n\", 1);\n    return 1;\n  }\n\n  open (\"SAVEDOS\" . $default_output_stack_level . \"out\", \">&STDOUT\")\n        || &error (\"ado: $! duping STDOUT\\n\", 1);\n  open (\"SAVEDOS\" . $default_output_stack_level . \"err\", \">&STDERR\")\n        || &error (\"ado: $! duping STDERR\\n\", 1);\n\n  open (STDOUT, \"> \" . $filename)\n        || &error (\"ado: $filename: $!\\n\", 1);\n  open (STDERR, \">&STDOUT\")\n        || &error (\"ado: $filename: $!\\n\", 1);\n\n  $default_output_stack_level++;\n}\n\n# close the current stdout/stderr, and restore the previous ones from\n# the \"stack.\"\n\nsub detach_default_output\n{\n  local ($code);\n\n  if ($vos)\n  {\n    $code = system \"++detach_default_output_hack\";\n    $code == -2 || &error (\"ddoh death\\n\", 1);\n    return 1;\n  }\n\n  if (--$default_output_stack_level < 0)\n  {\n    &error (\"default output stack has flown under!\\n\", 1);\n  }\n\n  close (STDOUT);\n  close (STDERR);\n\n  open (STDOUT, \">&SAVEDOS\" . $default_output_stack_level . \"out\")\n        || &error (\"ddo: $! duping STDOUT\\n\", 1);\n  open (STDERR, \">&SAVEDOS\" . $default_output_stack_level . \"err\")\n        || &error (\"ddo: $! duping STDERR\\n\", 1);\n\n  close (\"SAVEDOS\" . $default_output_stack_level . \"out\")\n        || &error (\"ddo: $! closing SCSDOSout\\n\", 1);\n  close (\"SAVEDOS\" . $default_output_stack_level . \"err\")\n         || &error (\"ddo: $! closing SAVEDOSerr\\n\", 1);\n}\n\n# run one command (passed as a list of arg 0 - n), returning 0 on success\n# and nonzero on failure.\n\nsub run_command\n{\n  local ($code);\n\n  # We reset this before every invocation.  On Windows I think there is only\n  # one environment, not one per process, so I think that variables set in\n  # test scripts might leak into subsequent tests if this isn't reset--???\n  resetENV();\n\n  print \"\\nrun_command: @_\\n\" if $debug;\n  $code = system @_;\n  print \"run_command: \\\"@_\\\" returned $code.\\n\" if $debug;\n\n  return $code;\n}\n\n# run one command (passed as a list of arg 0 - n, with arg 0 being the\n# second arg to this routine), returning 0 on success and non-zero on failure.\n# The first arg to this routine is a filename to connect to the stdout\n# & stderr of the child process.\n\nsub run_command_with_output\n{\n  local ($filename) = shift;\n  local ($code);\n\n  # We reset this before every invocation.  On Windows I think there is only\n  # one environment, not one per process, so I think that variables set in\n  # test scripts might leak into subsequent tests if this isn't reset--???\n  resetENV();\n\n  &attach_default_output ($filename);\n  $code = system @_;\n  &detach_default_output;\n\n  print \"run_command_with_output: '@_' returned $code.\\n\" if $debug;\n\n  return $code;\n}\n\n# performs the equivalent of an \"rm -rf\" on the first argument.  Like\n# rm, if the path ends in /, leaves the (now empty) directory; otherwise\n# deletes it, too.\n\nsub remove_directory_tree\n{\n  local ($targetdir) = @_;\n  local ($nuketop) = 1;\n  local ($ch);\n\n  $ch = substr ($targetdir, length ($targetdir) - 1);\n  if ($ch eq \"/\" || $ch eq $pathsep)\n  {\n    $targetdir = substr ($targetdir, 0, length ($targetdir) - 1);\n    $nuketop = 0;\n  }\n\n  if (! -e $targetdir)\n  {\n    return 1;\n  }\n\n  &remove_directory_tree_inner (\"RDT00\", $targetdir) || return 0;\n  if ($nuketop)\n  {\n    rmdir $targetdir || return 0;\n  }\n\n  return 1;\n}\n\nsub remove_directory_tree_inner\n{\n  local ($dirhandle, $targetdir) = @_;\n  local ($object);\n  local ($subdirhandle);\n\n  opendir ($dirhandle, $targetdir) || return 0;\n  $subdirhandle = $dirhandle;\n  $subdirhandle++;\n  while ($object = readdir ($dirhandle))\n  {\n    if ($object =~ /^(\\.\\.?|CVS|RCS)$/)\n    {\n      next;\n    }\n\n    $object = \"$targetdir$pathsep$object\";\n    lstat ($object);\n\n    if (-d _ && &remove_directory_tree_inner ($subdirhandle, $object))\n    {\n      rmdir $object || return 0;\n    }\n    else\n    {\n      unlink $object || return 0;\n    }\n  }\n  closedir ($dirhandle);\n  return 1;\n}\n\n# We used to use this behavior for this function:\n#\n#sub touch\n#{\n#  local (@filenames) = @_;\n#  local ($now) = time;\n#  local ($file);\n#\n#  foreach $file (@filenames)\n#  {\n#    utime ($now, $now, $file)\n#          || (open (TOUCHFD, \">> $file\") && close (TOUCHFD))\n#               || &error (\"Couldn't touch $file: $!\\n\", 1);\n#  }\n#  return 1;\n#}\n#\n# But this behaves badly on networked filesystems where the time is\n# skewed, because it sets the time of the file based on the _local_\n# host.  Normally when you modify a file, it's the _remote_ host that\n# determines the modtime, based on _its_ clock.  So, instead, now we open\n# the file and write something into it to force the remote host to set\n# the modtime correctly according to its clock.\n#\n\nsub touch\n{\n  local ($file);\n\n  foreach $file (@_) {\n    (open(T, \">> $file\") && print(T \"\\n\") && close(T))\n\t|| &error(\"Couldn't touch $file: $!\\n\", 1);\n  }\n}\n\n# Touch with a time offset.  To DTRT, call touch() then use stat() to get the\n# access/mod time for each file and apply the offset.\n\nsub utouch\n{\n  local ($off) = shift;\n  local ($file);\n\n  &touch(@_);\n\n  local (@s) = stat($_[0]);\n\n  utime($s[8]+$off, $s[9]+$off, @_);\n}\n\n# open a file, write some stuff to it, and close it.\n\nsub create_file\n{\n  local ($filename, @lines) = @_;\n\n  open (CF, \"> $filename\") || &error (\"Couldn't open $filename: $!\\n\", 1);\n  foreach $line (@lines)\n  {\n    print CF $line;\n  }\n  close (CF);\n}\n\n# create a directory tree described by an associative array, wherein each\n# key is a relative pathname (using slashes) and its associated value is\n# one of:\n#    DIR            indicates a directory\n#    FILE:contents  indicates a file, which should contain contents +\\n\n#    LINK:target    indicates a symlink, pointing to $basedir/target\n# The first argument is the dir under which the structure will be created\n# (the dir will be made and/or cleaned if necessary); the second argument\n# is the associative array.\n\nsub create_dir_tree\n{\n  local ($basedir, %dirtree) = @_;\n  local ($path);\n\n  &remove_directory_tree (\"$basedir\");\n  mkdir ($basedir, 0777) || &error (\"Couldn't mkdir $basedir: $!\\n\", 1);\n\n  foreach $path (sort keys (%dirtree))\n  {\n    if ($dirtree {$path} =~ /^DIR$/)\n    {\n      mkdir (\"$basedir/$path\", 0777)\n               || &error (\"Couldn't mkdir $basedir/$path: $!\\n\", 1);\n    }\n    elsif ($dirtree {$path} =~ /^FILE:(.*)$/)\n    {\n      &create_file (\"$basedir/$path\", $1 . \"\\n\");\n    }\n    elsif ($dirtree {$path} =~ /^LINK:(.*)$/)\n    {\n      symlink (\"$basedir/$1\", \"$basedir/$path\")\n        || &error (\"Couldn't symlink $basedir/$path -> $basedir/$1: $!\\n\", 1);\n    }\n    else\n    {\n      &error (\"Bogus dirtree type: \\\"$dirtree{$path}\\\"\\n\", 1);\n    }\n  }\n  if ($just_setup_tree)\n  {\n    die \"Tree is setup...\\n\";\n  }\n}\n\n# compare a directory tree with an associative array in the format used\n# by create_dir_tree, above.\n# The first argument is the dir under which the structure should be found;\n# the second argument is the associative array.\n\nsub compare_dir_tree\n{\n  local ($basedir, %dirtree) = @_;\n  local ($path);\n  local ($i);\n  local ($bogus) = 0;\n  local ($contents);\n  local ($target);\n  local ($fulltarget);\n  local ($found);\n  local (@files);\n  local (@allfiles);\n\n  opendir (DIR, $basedir) || &error (\"Couldn't open $basedir: $!\\n\", 1);\n  @allfiles = grep (!/^(\\.\\.?|CVS|RCS)$/, readdir (DIR) );\n  closedir (DIR);\n  if ($debug)\n  {\n    print \"dirtree: (%dirtree)\\n$basedir: (@allfiles)\\n\";\n  }\n\n  foreach $path (sort keys (%dirtree))\n  {\n    if ($debug)\n    {\n      print \"Checking $path ($dirtree{$path}).\\n\";\n    }\n\n    $found = 0;\n    foreach $i (0 .. $#allfiles)\n    {\n      if ($allfiles[$i] eq $path)\n      {\n        splice (@allfiles, $i, 1);  # delete it\n        if ($debug)\n        {\n          print \"     Zapped $path; files now (@allfiles).\\n\";\n        }\n        lstat (\"$basedir/$path\");\n        $found = 1;\n        last;\n      }\n    }\n\n    if (!$found)\n    {\n      print \"compare_dir_tree: $path does not exist.\\n\";\n      $bogus = 1;\n      next;\n    }\n\n    if ($dirtree {$path} =~ /^DIR$/)\n    {\n      if (-d _ && opendir (DIR, \"$basedir/$path\") )\n      {\n        @files = readdir (DIR);\n        closedir (DIR);\n        @files = grep (!/^(\\.\\.?|CVS|RCS)$/ && ($_ = \"$path/$_\"), @files);\n        push (@allfiles, @files);\n        if ($debug)\n        {\n          print \"     Read in $path; new files (@files).\\n\";\n        }\n      }\n      else\n      {\n        print \"compare_dir_tree: $path is not a dir.\\n\";\n        $bogus = 1;\n      }\n    }\n    elsif ($dirtree {$path} =~ /^FILE:(.*)$/)\n    {\n      if (-l _ || !-f _)\n      {\n        print \"compare_dir_tree: $path is not a file.\\n\";\n        $bogus = 1;\n        next;\n      }\n\n      if ($1 ne \"*\")\n      {\n        $contents = &read_file_into_string (\"$basedir/$path\");\n        if ($contents ne \"$1\\n\")\n        {\n          print \"compare_dir_tree: $path contains wrong stuff.\"\n              . \"  Is:\\n$contentsShould be:\\n$1\\n\";\n          $bogus = 1;\n        }\n      }\n    }\n    elsif ($dirtree {$path} =~ /^LINK:(.*)$/)\n    {\n      $target = $1;\n      if (!-l _)\n      {\n        print \"compare_dir_tree: $path is not a link.\\n\";\n        $bogus = 1;\n        next;\n      }\n\n      $contents = readlink (\"$basedir/$path\");\n      $contents =~ tr/>/\\//;\n      $fulltarget = \"$basedir/$target\";\n      $fulltarget =~ tr/>/\\//;\n      if (!($contents =~ /$fulltarget$/))\n      {\n        if ($debug)\n        {\n          $target = $fulltarget;\n        }\n        print \"compare_dir_tree: $path should be link to $target, \"\n            . \"not $contents.\\n\";\n        $bogus = 1;\n      }\n    }\n    else\n    {\n      &error (\"Bogus dirtree type: \\\"$dirtree{$path}\\\"\\n\", 1);\n    }\n  }\n\n  if ($debug)\n  {\n    print \"leftovers: (@allfiles).\\n\";\n  }\n\n  foreach $file (@allfiles)\n  {\n    print \"compare_dir_tree: $file should not exist.\\n\";\n    $bogus = 1;\n  }\n\n  return !$bogus;\n}\n\n# this subroutine generates the numeric suffix used to keep tmp filenames,\n# log filenames, etc., unique.  If the number passed in is 1, then a null\n# string is returned; otherwise, we return \".n\", where n + 1 is the number\n# we were given.\n\nsub num_suffix\n{\n  local($num) = @_;\n\n  if (--$num > 0) {\n    return \"$extext$num\";\n  }\n\n  return \"\";\n}\n\n# This subroutine returns a log filename with a number appended to\n# the end corresponding to how many logfiles have been created in the\n# current running test.  An optional parameter may be passed (0 or 1).\n# If a 1 is passed, then it does NOT increment the logfile counter\n# and returns the name of the latest logfile.  If either no parameter\n# is passed at all or a 0 is passed, then the logfile counter is\n# incremented and the new name is returned.\n\nsub get_logfile\n{\n  local($no_increment) = @_;\n\n  $num_of_logfiles += !$no_increment;\n\n  return ($log_filename . &num_suffix ($num_of_logfiles));\n}\n\n# This subroutine returns a base (answer) filename with a number\n# appended to the end corresponding to how many logfiles (and thus\n# base files) have been created in the current running test.\n# NO PARAMETERS ARE PASSED TO THIS SUBROUTINE.\n\nsub get_basefile\n{\n  return ($base_filename . &num_suffix ($num_of_logfiles));\n}\n\n# This subroutine returns a difference filename with a number appended\n# to the end corresponding to how many logfiles (and thus diff files)\n# have been created in the current running test.\n\nsub get_difffile\n{\n  return ($diff_filename . &num_suffix ($num_of_logfiles));\n}\n\n# just like logfile, only a generic tmp filename for use by the test.\n# they are automatically cleaned up unless -keep was used, or the test fails.\n# Pass an argument of 1 to return the same filename as the previous call.\n\nsub get_tmpfile\n{\n  local($no_increment) = @_;\n\n  $num_of_tmpfiles += !$no_increment;\n\n  return ($tmp_filename . &num_suffix ($num_of_tmpfiles));\n}\n\n1;\n"
  },
  {
    "path": "sources/host-tools/make-3.81/variable.c",
    "content": "/* Internals of variables for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n\n#include <assert.h>\n\n#include \"dep.h\"\n#include \"filedef.h\"\n#include \"job.h\"\n#include \"commands.h\"\n#include \"variable.h\"\n#include \"rule.h\"\n#ifdef WINDOWS32\n#include \"pathstuff.h\"\n#endif\n#include \"hash.h\"\n\n/* Chain of all pattern-specific variables.  */\n\nstatic struct pattern_var *pattern_vars;\n\n/* Pointer to last struct in the chain, so we can add onto the end.  */\n\nstatic struct pattern_var *last_pattern_var;\n\n/* Create a new pattern-specific variable struct.  */\n\nstruct pattern_var *\ncreate_pattern_var (char *target, char *suffix)\n{\n  register struct pattern_var *p\n    = (struct pattern_var *) xmalloc (sizeof (struct pattern_var));\n\n  if (last_pattern_var != 0)\n    last_pattern_var->next = p;\n  else\n    pattern_vars = p;\n  last_pattern_var = p;\n  p->next = 0;\n\n  p->target = target;\n  p->len = strlen (target);\n  p->suffix = suffix + 1;\n\n  return p;\n}\n\n/* Look up a target in the pattern-specific variable list.  */\n\nstatic struct pattern_var *\nlookup_pattern_var (struct pattern_var *start, char *target)\n{\n  struct pattern_var *p;\n  unsigned int targlen = strlen(target);\n\n  for (p = start ? start->next : pattern_vars; p != 0; p = p->next)\n    {\n      char *stem;\n      unsigned int stemlen;\n\n      if (p->len > targlen)\n        /* It can't possibly match.  */\n        continue;\n\n      /* From the lengths of the filename and the pattern parts,\n         find the stem: the part of the filename that matches the %.  */\n      stem = target + (p->suffix - p->target - 1);\n      stemlen = targlen - p->len + 1;\n\n      /* Compare the text in the pattern before the stem, if any.  */\n      if (stem > target && !strneq (p->target, target, stem - target))\n        continue;\n\n      /* Compare the text in the pattern after the stem, if any.\n         We could test simply using streq, but this way we compare the\n         first two characters immediately.  This saves time in the very\n         common case where the first character matches because it is a\n         period.  */\n      if (*p->suffix == stem[stemlen]\n          && (*p->suffix == '\\0' || streq (&p->suffix[1], &stem[stemlen+1])))\n        break;\n    }\n\n  return p;\n}\n\f\n/* Hash table of all global variable definitions.  */\n\nstatic unsigned long\nvariable_hash_1 (const void *keyv)\n{\n  struct variable const *key = (struct variable const *) keyv;\n  return_STRING_N_HASH_1 (key->name, key->length);\n}\n\nstatic unsigned long\nvariable_hash_2 (const void *keyv)\n{\n  struct variable const *key = (struct variable const *) keyv;\n  return_STRING_N_HASH_2 (key->name, key->length);\n}\n\nstatic int\nvariable_hash_cmp (const void *xv, const void *yv)\n{\n  struct variable const *x = (struct variable const *) xv;\n  struct variable const *y = (struct variable const *) yv;\n  int result = x->length - y->length;\n  if (result)\n    return result;\n  return_STRING_N_COMPARE (x->name, y->name, x->length);\n}\n\n#ifndef\tVARIABLE_BUCKETS\n#define VARIABLE_BUCKETS\t\t523\n#endif\n#ifndef\tPERFILE_VARIABLE_BUCKETS\n#define\tPERFILE_VARIABLE_BUCKETS\t23\n#endif\n#ifndef\tSMALL_SCOPE_VARIABLE_BUCKETS\n#define\tSMALL_SCOPE_VARIABLE_BUCKETS\t13\n#endif\n\nstatic struct variable_set global_variable_set;\nstatic struct variable_set_list global_setlist\n  = { 0, &global_variable_set };\nstruct variable_set_list *current_variable_set_list = &global_setlist;\n\f\n/* Implement variables.  */\n\nvoid\ninit_hash_global_variable_set (void)\n{\n  hash_init (&global_variable_set.table, VARIABLE_BUCKETS,\n\t     variable_hash_1, variable_hash_2, variable_hash_cmp);\n}\n\n/* Define variable named NAME with value VALUE in SET.  VALUE is copied.\n   LENGTH is the length of NAME, which does not need to be null-terminated.\n   ORIGIN specifies the origin of the variable (makefile, command line\n   or environment).\n   If RECURSIVE is nonzero a flag is set in the variable saying\n   that it should be recursively re-expanded.  */\n\nstruct variable *\ndefine_variable_in_set (const char *name, unsigned int length,\n                        char *value, enum variable_origin origin,\n                        int recursive, struct variable_set *set,\n                        const struct floc *flocp)\n{\n  struct variable *v;\n  struct variable **var_slot;\n  struct variable var_key;\n\n  if (set == NULL)\n    set = &global_variable_set;\n\n  var_key.name = (char *) name;\n  var_key.length = length;\n  var_slot = (struct variable **) hash_find_slot (&set->table, &var_key);\n\n  if (env_overrides && origin == o_env)\n    origin = o_env_override;\n\n  v = *var_slot;\n  if (! HASH_VACANT (v))\n    {\n      if (env_overrides && v->origin == o_env)\n\t/* V came from in the environment.  Since it was defined\n\t   before the switches were parsed, it wasn't affected by -e.  */\n\tv->origin = o_env_override;\n\n      /* A variable of this name is already defined.\n\t If the old definition is from a stronger source\n\t than this one, don't redefine it.  */\n      if ((int) origin >= (int) v->origin)\n\t{\n\t  if (v->value != 0)\n\t    free (v->value);\n\t  v->value = xstrdup (value);\n          if (flocp != 0)\n            v->fileinfo = *flocp;\n          else\n            v->fileinfo.filenm = 0;\n\t  v->origin = origin;\n\t  v->recursive = recursive;\n\t}\n      return v;\n    }\n\n  /* Create a new variable definition and add it to the hash table.  */\n\n  v = (struct variable *) xmalloc (sizeof (struct variable));\n  v->name = savestring (name, length);\n  v->length = length;\n  hash_insert_at (&set->table, v, var_slot);\n  v->value = xstrdup (value);\n  if (flocp != 0)\n    v->fileinfo = *flocp;\n  else\n    v->fileinfo.filenm = 0;\n  v->origin = origin;\n  v->recursive = recursive;\n  v->special = 0;\n  v->expanding = 0;\n  v->exp_count = 0;\n  v->per_target = 0;\n  v->append = 0;\n  v->export = v_default;\n\n  v->exportable = 1;\n  if (*name != '_' && (*name < 'A' || *name > 'Z')\n      && (*name < 'a' || *name > 'z'))\n    v->exportable = 0;\n  else\n    {\n      for (++name; *name != '\\0'; ++name)\n        if (*name != '_' && (*name < 'a' || *name > 'z')\n            && (*name < 'A' || *name > 'Z') && !ISDIGIT(*name))\n          break;\n\n      if (*name != '\\0')\n        v->exportable = 0;\n    }\n\n  return v;\n}\n\f\n/* If the variable passed in is \"special\", handle its special nature.\n   Currently there are two such variables, both used for introspection:\n   .VARIABLES expands to a list of all the variables defined in this instance\n   of make.\n   .TARGETS expands to a list of all the targets defined in this\n   instance of make.\n   Returns the variable reference passed in.  */\n\n#define EXPANSION_INCREMENT(_l)  ((((_l) / 500) + 1) * 500)\n\nstatic struct variable *\nhandle_special_var (struct variable *var)\n{\n  static unsigned long last_var_count = 0;\n\n\n  /* This one actually turns out to be very hard, due to the way the parser\n     records targets.  The way it works is that target information is collected\n     internally until make knows the target is completely specified.  It unitl\n     it sees that some new construct (a new target or variable) is defined that\n     it knows the previous one is done.  In short, this means that if you do\n     this:\n\n       all:\n\n       TARGS := $(.TARGETS)\n\n     then $(TARGS) won't contain \"all\", because it's not until after the\n     variable is created that the previous target is completed.\n\n     Changing this would be a major pain.  I think a less complex way to do it\n     would be to pre-define the target files as soon as the first line is\n     parsed, then come back and do the rest of the definition as now.  That\n     would allow $(.TARGETS) to be correct without a major change to the way\n     the parser works.\n\n  if (streq (var->name, \".TARGETS\"))\n    var->value = build_target_list (var->value);\n  else\n  */\n\n  if (streq (var->name, \".VARIABLES\")\n      && global_variable_set.table.ht_fill != last_var_count)\n    {\n      unsigned long max = EXPANSION_INCREMENT (strlen (var->value));\n      unsigned long len;\n      char *p;\n      struct variable **vp = (struct variable **) global_variable_set.table.ht_vec;\n      struct variable **end = &vp[global_variable_set.table.ht_size];\n\n      /* Make sure we have at least MAX bytes in the allocated buffer.  */\n      var->value = xrealloc (var->value, max);\n\n      /* Walk through the hash of variables, constructing a list of names.  */\n      p = var->value;\n      len = 0;\n      for (; vp < end; ++vp)\n        if (!HASH_VACANT (*vp))\n          {\n            struct variable *v = *vp;\n            int l = v->length;\n\n            len += l + 1;\n            if (len > max)\n              {\n                unsigned long off = p - var->value;\n\n                max += EXPANSION_INCREMENT (l + 1);\n                var->value = xrealloc (var->value, max);\n                p = &var->value[off];\n              }\n\n            bcopy (v->name, p, l);\n            p += l;\n            *(p++) = ' ';\n          }\n      *(p-1) = '\\0';\n\n      /* Remember how many variables are in our current count.  Since we never\n         remove variables from the list, this is a reliable way to know whether\n         the list is up to date or needs to be recomputed.  */\n\n      last_var_count = global_variable_set.table.ht_fill;\n    }\n\n  return var;\n}\n\n\f\n/* Lookup a variable whose name is a string starting at NAME\n   and with LENGTH chars.  NAME need not be null-terminated.\n   Returns address of the `struct variable' containing all info\n   on the variable, or nil if no such variable is defined.  */\n\nstruct variable *\nlookup_variable (const char *name, unsigned int length)\n{\n  const struct variable_set_list *setlist;\n  struct variable var_key;\n\n  var_key.name = (char *) name;\n  var_key.length = length;\n\n  for (setlist = current_variable_set_list;\n       setlist != 0; setlist = setlist->next)\n    {\n      const struct variable_set *set = setlist->set;\n      struct variable *v;\n\n      v = (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key);\n      if (v)\n\treturn v->special ? handle_special_var (v) : v;\n    }\n\n#ifdef VMS\n  /* since we don't read envp[] on startup, try to get the\n     variable via getenv() here.  */\n  {\n    char *vname = alloca (length + 1);\n    char *value;\n    strncpy (vname, name, length);\n    vname[length] = 0;\n    value = getenv (vname);\n    if (value != 0)\n      {\n        char *sptr;\n        int scnt;\n\n        sptr = value;\n        scnt = 0;\n\n        while ((sptr = strchr (sptr, '$')))\n          {\n            scnt++;\n            sptr++;\n          }\n\n        if (scnt > 0)\n          {\n            char *nvalue;\n            char *nptr;\n\n            nvalue = alloca (strlen (value) + scnt + 1);\n            sptr = value;\n            nptr = nvalue;\n\n            while (*sptr)\n              {\n                if (*sptr == '$')\n                  {\n                    *nptr++ = '$';\n                    *nptr++ = '$';\n                  }\n                else\n                  {\n                    *nptr++ = *sptr;\n                  }\n                sptr++;\n              }\n\n            *nptr = '\\0';\n            return define_variable (vname, length, nvalue, o_env, 1);\n\n          }\n\n        return define_variable (vname, length, value, o_env, 1);\n      }\n  }\n#endif /* VMS */\n\n  return 0;\n}\n\f\n/* Lookup a variable whose name is a string starting at NAME\n   and with LENGTH chars in set SET.  NAME need not be null-terminated.\n   Returns address of the `struct variable' containing all info\n   on the variable, or nil if no such variable is defined.  */\n\nstruct variable *\nlookup_variable_in_set (const char *name, unsigned int length,\n                        const struct variable_set *set)\n{\n  struct variable var_key;\n\n  var_key.name = (char *) name;\n  var_key.length = length;\n\n  return (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key);\n}\n\f\n/* Initialize FILE's variable set list.  If FILE already has a variable set\n   list, the topmost variable set is left intact, but the the rest of the\n   chain is replaced with FILE->parent's setlist.  If FILE is a double-colon\n   rule, then we will use the \"root\" double-colon target's variable set as the\n   parent of FILE's variable set.\n\n   If we're READing a makefile, don't do the pattern variable search now,\n   since the pattern variable might not have been defined yet.  */\n\nvoid\ninitialize_file_variables (struct file *file, int reading)\n{\n  struct variable_set_list *l = file->variables;\n\n  if (l == 0)\n    {\n      l = (struct variable_set_list *)\n\txmalloc (sizeof (struct variable_set_list));\n      l->set = (struct variable_set *) xmalloc (sizeof (struct variable_set));\n      hash_init (&l->set->table, PERFILE_VARIABLE_BUCKETS,\n                 variable_hash_1, variable_hash_2, variable_hash_cmp);\n      file->variables = l;\n    }\n\n  /* If this is a double-colon, then our \"parent\" is the \"root\" target for\n     this double-colon rule.  Since that rule has the same name, parent,\n     etc. we can just use its variables as the \"next\" for ours.  */\n\n  if (file->double_colon && file->double_colon != file)\n    {\n      initialize_file_variables (file->double_colon, reading);\n      l->next = file->double_colon->variables;\n      return;\n    }\n\n  if (file->parent == 0)\n    l->next = &global_setlist;\n  else\n    {\n      initialize_file_variables (file->parent, reading);\n      l->next = file->parent->variables;\n    }\n\n  /* If we're not reading makefiles and we haven't looked yet, see if\n     we can find pattern variables for this target.  */\n\n  if (!reading && !file->pat_searched)\n    {\n      struct pattern_var *p;\n\n      p = lookup_pattern_var (0, file->name);\n      if (p != 0)\n        {\n          struct variable_set_list *global = current_variable_set_list;\n\n          /* We found at least one.  Set up a new variable set to accumulate\n             all the pattern variables that match this target.  */\n\n          file->pat_variables = create_new_variable_set ();\n          current_variable_set_list = file->pat_variables;\n\n          do\n            {\n              /* We found one, so insert it into the set.  */\n\n              struct variable *v;\n\n              if (p->variable.flavor == f_simple)\n                {\n                  v = define_variable_loc (\n                    p->variable.name, strlen (p->variable.name),\n                    p->variable.value, p->variable.origin,\n                    0, &p->variable.fileinfo);\n\n                  v->flavor = f_simple;\n                }\n              else\n                {\n                  v = do_variable_definition (\n                    &p->variable.fileinfo, p->variable.name,\n                    p->variable.value, p->variable.origin,\n                    p->variable.flavor, 1);\n                }\n\n              /* Also mark it as a per-target and copy export status. */\n              v->per_target = p->variable.per_target;\n              v->export = p->variable.export;\n            }\n          while ((p = lookup_pattern_var (p, file->name)) != 0);\n\n          current_variable_set_list = global;\n        }\n      file->pat_searched = 1;\n    }\n\n  /* If we have a pattern variable match, set it up.  */\n\n  if (file->pat_variables != 0)\n    {\n      file->pat_variables->next = l->next;\n      l->next = file->pat_variables;\n    }\n}\n\f\n/* Pop the top set off the current variable set list,\n   and free all its storage.  */\n\nstruct variable_set_list *\ncreate_new_variable_set (void)\n{\n  register struct variable_set_list *setlist;\n  register struct variable_set *set;\n\n  set = (struct variable_set *) xmalloc (sizeof (struct variable_set));\n  hash_init (&set->table, SMALL_SCOPE_VARIABLE_BUCKETS,\n\t     variable_hash_1, variable_hash_2, variable_hash_cmp);\n\n  setlist = (struct variable_set_list *)\n    xmalloc (sizeof (struct variable_set_list));\n  setlist->set = set;\n  setlist->next = current_variable_set_list;\n\n  return setlist;\n}\n\nstatic void\nfree_variable_name_and_value (const void *item)\n{\n  struct variable *v = (struct variable *) item;\n  free (v->name);\n  free (v->value);\n}\n\nvoid\nfree_variable_set (struct variable_set_list *list)\n{\n  hash_map (&list->set->table, free_variable_name_and_value);\n  hash_free (&list->set->table, 1);\n  free ((char *) list->set);\n  free ((char *) list);\n}\n\n/* Create a new variable set and push it on the current setlist.\n   If we're pushing a global scope (that is, the current scope is the global\n   scope) then we need to \"push\" it the other way: file variable sets point\n   directly to the global_setlist so we need to replace that with the new one.\n */\n\nstruct variable_set_list *\npush_new_variable_scope (void)\n{\n  current_variable_set_list = create_new_variable_set();\n  if (current_variable_set_list->next == &global_setlist)\n    {\n      /* It was the global, so instead of new -> &global we want to replace\n         &global with the new one and have &global -> new, with current still\n         pointing to &global  */\n      struct variable_set *set = current_variable_set_list->set;\n      current_variable_set_list->set = global_setlist.set;\n      global_setlist.set = set;\n      current_variable_set_list->next = global_setlist.next;\n      global_setlist.next = current_variable_set_list;\n      current_variable_set_list = &global_setlist;\n    }\n  return (current_variable_set_list);\n}\n\nvoid\npop_variable_scope (void)\n{\n  struct variable_set_list *setlist;\n  struct variable_set *set;\n\n  /* Can't call this if there's no scope to pop!  */\n  assert(current_variable_set_list->next != NULL);\n\n  if (current_variable_set_list != &global_setlist)\n    {\n      /* We're not pointing to the global setlist, so pop this one.  */\n      setlist = current_variable_set_list;\n      set = setlist->set;\n      current_variable_set_list = setlist->next;\n    }\n  else\n    {\n      /* This set is the one in the global_setlist, but there is another global\n         set beyond that.  We want to copy that set to global_setlist, then\n         delete what used to be in global_setlist.  */\n      setlist = global_setlist.next;\n      set = global_setlist.set;\n      global_setlist.set = setlist->set;\n      global_setlist.next = setlist->next;\n    }\n\n  /* Free the one we no longer need.  */\n  free ((char *) setlist);\n  hash_map (&set->table, free_variable_name_and_value);\n  hash_free (&set->table, 1);\n  free ((char *) set);\n}\n\f\n/* Merge FROM_SET into TO_SET, freeing unused storage in FROM_SET.  */\n\nstatic void\nmerge_variable_sets (struct variable_set *to_set,\n                     struct variable_set *from_set)\n{\n  struct variable **from_var_slot = (struct variable **) from_set->table.ht_vec;\n  struct variable **from_var_end = from_var_slot + from_set->table.ht_size;\n\n  for ( ; from_var_slot < from_var_end; from_var_slot++)\n    if (! HASH_VACANT (*from_var_slot))\n      {\n\tstruct variable *from_var = *from_var_slot;\n\tstruct variable **to_var_slot\n\t  = (struct variable **) hash_find_slot (&to_set->table, *from_var_slot);\n\tif (HASH_VACANT (*to_var_slot))\n\t  hash_insert_at (&to_set->table, from_var, to_var_slot);\n\telse\n\t  {\n\t    /* GKM FIXME: delete in from_set->table */\n\t    free (from_var->value);\n\t    free (from_var);\n\t  }\n      }\n}\n\n/* Merge SETLIST1 into SETLIST0, freeing unused storage in SETLIST1.  */\n\nvoid\nmerge_variable_set_lists (struct variable_set_list **setlist0,\n                          struct variable_set_list *setlist1)\n{\n  struct variable_set_list *to = *setlist0;\n  struct variable_set_list *last0 = 0;\n\n  /* If there's nothing to merge, stop now.  */\n  if (!setlist1)\n    return;\n\n  /* This loop relies on the fact that all setlists terminate with the global\n     setlist (before NULL).  If that's not true, arguably we SHOULD die.  */\n  if (to)\n    while (setlist1 != &global_setlist && to != &global_setlist)\n      {\n        struct variable_set_list *from = setlist1;\n        setlist1 = setlist1->next;\n\n        merge_variable_sets (to->set, from->set);\n\n        last0 = to;\n        to = to->next;\n      }\n\n  if (setlist1 != &global_setlist)\n    {\n      if (last0 == 0)\n\t*setlist0 = setlist1;\n      else\n\tlast0->next = setlist1;\n    }\n}\n\f\n/* Define the automatic variables, and record the addresses\n   of their structures so we can change their values quickly.  */\n\nvoid\ndefine_automatic_variables (void)\n{\n#if defined(WINDOWS32) || defined(__EMX__)\n  extern char* default_shell;\n#else\n  extern char default_shell[];\n#endif\n  register struct variable *v;\n  char buf[200];\n\n  sprintf (buf, \"%u\", makelevel);\n  (void) define_variable (MAKELEVEL_NAME, MAKELEVEL_LENGTH, buf, o_env, 0);\n\n  sprintf (buf, \"%s%s%s\",\n\t   version_string,\n\t   (remote_description == 0 || remote_description[0] == '\\0')\n\t   ? \"\" : \"-\",\n\t   (remote_description == 0 || remote_description[0] == '\\0')\n\t   ? \"\" : remote_description);\n  (void) define_variable (\"MAKE_VERSION\", 12, buf, o_default, 0);\n\n#ifdef  __MSDOS__\n  /* Allow to specify a special shell just for Make,\n     and use $COMSPEC as the default $SHELL when appropriate.  */\n  {\n    static char shell_str[] = \"SHELL\";\n    const int shlen = sizeof (shell_str) - 1;\n    struct variable *mshp = lookup_variable (\"MAKESHELL\", 9);\n    struct variable *comp = lookup_variable (\"COMSPEC\", 7);\n\n    /* Make $MAKESHELL override $SHELL even if -e is in effect.  */\n    if (mshp)\n      (void) define_variable (shell_str, shlen,\n\t\t\t      mshp->value, o_env_override, 0);\n    else if (comp)\n      {\n\t/* $COMSPEC shouldn't override $SHELL.  */\n\tstruct variable *shp = lookup_variable (shell_str, shlen);\n\n\tif (!shp)\n\t  (void) define_variable (shell_str, shlen, comp->value, o_env, 0);\n      }\n  }\n#elif defined(__EMX__)\n  {\n    static char shell_str[] = \"SHELL\";\n    const int shlen = sizeof (shell_str) - 1;\n    struct variable *shell = lookup_variable (shell_str, shlen);\n    struct variable *replace = lookup_variable (\"MAKESHELL\", 9);\n\n    /* if $MAKESHELL is defined in the environment assume o_env_override */\n    if (replace && *replace->value && replace->origin == o_env)\n      replace->origin = o_env_override;\n\n    /* if $MAKESHELL is not defined use $SHELL but only if the variable\n       did not come from the environment */\n    if (!replace || !*replace->value)\n      if (shell && *shell->value && (shell->origin == o_env\n\t  || shell->origin == o_env_override))\n\t{\n\t  /* overwrite whatever we got from the environment */\n\t  free(shell->value);\n\t  shell->value = xstrdup (default_shell);\n\t  shell->origin = o_default;\n\t}\n\n    /* Some people do not like cmd to be used as the default\n       if $SHELL is not defined in the Makefile.\n       With -DNO_CMD_DEFAULT you can turn off this behaviour */\n# ifndef NO_CMD_DEFAULT\n    /* otherwise use $COMSPEC */\n    if (!replace || !*replace->value)\n      replace = lookup_variable (\"COMSPEC\", 7);\n\n    /* otherwise use $OS2_SHELL */\n    if (!replace || !*replace->value)\n      replace = lookup_variable (\"OS2_SHELL\", 9);\n# else\n#   warning NO_CMD_DEFAULT: GNU make will not use CMD.EXE as default shell\n# endif\n\n    if (replace && *replace->value)\n      /* overwrite $SHELL */\n      (void) define_variable (shell_str, shlen, replace->value,\n\t\t\t      replace->origin, 0);\n    else\n      /* provide a definition if there is none */\n      (void) define_variable (shell_str, shlen, default_shell,\n\t\t\t      o_default, 0);\n  }\n\n#endif\n\n  /* This won't override any definition, but it will provide one if there\n     isn't one there.  */\n  v = define_variable (\"SHELL\", 5, default_shell, o_default, 0);\n\n  /* On MSDOS we do use SHELL from environment, since it isn't a standard\n     environment variable on MSDOS, so whoever sets it, does that on purpose.\n     On OS/2 we do not use SHELL from environment but we have already handled\n     that problem above. */\n#if !defined(__MSDOS__) && !defined(__EMX__)\n  /* Don't let SHELL come from the environment.  */\n  if (*v->value == '\\0' || v->origin == o_env || v->origin == o_env_override)\n    {\n      free (v->value);\n      v->origin = o_file;\n      v->value = xstrdup (default_shell);\n    }\n#endif\n\n  /* Make sure MAKEFILES gets exported if it is set.  */\n  v = define_variable (\"MAKEFILES\", 9, \"\", o_default, 0);\n  v->export = v_ifset;\n\n  /* Define the magic D and F variables in terms of\n     the automatic variables they are variations of.  */\n\n#ifdef VMS\n  define_variable (\"@D\", 2, \"$(dir $@)\", o_automatic, 1);\n  define_variable (\"%D\", 2, \"$(dir $%)\", o_automatic, 1);\n  define_variable (\"*D\", 2, \"$(dir $*)\", o_automatic, 1);\n  define_variable (\"<D\", 2, \"$(dir $<)\", o_automatic, 1);\n  define_variable (\"?D\", 2, \"$(dir $?)\", o_automatic, 1);\n  define_variable (\"^D\", 2, \"$(dir $^)\", o_automatic, 1);\n  define_variable (\"+D\", 2, \"$(dir $+)\", o_automatic, 1);\n#else\n  define_variable (\"@D\", 2, \"$(patsubst %/,%,$(dir $@))\", o_automatic, 1);\n  define_variable (\"%D\", 2, \"$(patsubst %/,%,$(dir $%))\", o_automatic, 1);\n  define_variable (\"*D\", 2, \"$(patsubst %/,%,$(dir $*))\", o_automatic, 1);\n  define_variable (\"<D\", 2, \"$(patsubst %/,%,$(dir $<))\", o_automatic, 1);\n  define_variable (\"?D\", 2, \"$(patsubst %/,%,$(dir $?))\", o_automatic, 1);\n  define_variable (\"^D\", 2, \"$(patsubst %/,%,$(dir $^))\", o_automatic, 1);\n  define_variable (\"+D\", 2, \"$(patsubst %/,%,$(dir $+))\", o_automatic, 1);\n#endif\n  define_variable (\"@F\", 2, \"$(notdir $@)\", o_automatic, 1);\n  define_variable (\"%F\", 2, \"$(notdir $%)\", o_automatic, 1);\n  define_variable (\"*F\", 2, \"$(notdir $*)\", o_automatic, 1);\n  define_variable (\"<F\", 2, \"$(notdir $<)\", o_automatic, 1);\n  define_variable (\"?F\", 2, \"$(notdir $?)\", o_automatic, 1);\n  define_variable (\"^F\", 2, \"$(notdir $^)\", o_automatic, 1);\n  define_variable (\"+F\", 2, \"$(notdir $+)\", o_automatic, 1);\n}\n\f\nint export_all_variables;\n\n/* Create a new environment for FILE's commands.\n   If FILE is nil, this is for the `shell' function.\n   The child's MAKELEVEL variable is incremented.  */\n\nchar **\ntarget_environment (struct file *file)\n{\n  struct variable_set_list *set_list;\n  register struct variable_set_list *s;\n  struct hash_table table;\n  struct variable **v_slot;\n  struct variable **v_end;\n  struct variable makelevel_key;\n  char **result_0;\n  char **result;\n\n  if (file == 0)\n    set_list = current_variable_set_list;\n  else\n    set_list = file->variables;\n\n  hash_init (&table, VARIABLE_BUCKETS,\n\t     variable_hash_1, variable_hash_2, variable_hash_cmp);\n\n  /* Run through all the variable sets in the list,\n     accumulating variables in TABLE.  */\n  for (s = set_list; s != 0; s = s->next)\n    {\n      struct variable_set *set = s->set;\n      v_slot = (struct variable **) set->table.ht_vec;\n      v_end = v_slot + set->table.ht_size;\n      for ( ; v_slot < v_end; v_slot++)\n\tif (! HASH_VACANT (*v_slot))\n\t  {\n\t    struct variable **new_slot;\n\t    struct variable *v = *v_slot;\n\n\t    /* If this is a per-target variable and it hasn't been touched\n\t       already then look up the global version and take its export\n\t       value.  */\n\t    if (v->per_target && v->export == v_default)\n\t      {\n\t\tstruct variable *gv;\n\n\t\tgv = lookup_variable_in_set (v->name, strlen(v->name),\n                                             &global_variable_set);\n\t\tif (gv)\n\t\t  v->export = gv->export;\n\t      }\n\n\t    switch (v->export)\n\t      {\n\t      case v_default:\n\t\tif (v->origin == o_default || v->origin == o_automatic)\n\t\t  /* Only export default variables by explicit request.  */\n\t\t  continue;\n\n                /* The variable doesn't have a name that can be exported.  */\n                if (! v->exportable)\n                  continue;\n\n\t\tif (! export_all_variables\n\t\t    && v->origin != o_command\n\t\t    && v->origin != o_env && v->origin != o_env_override)\n\t\t  continue;\n\t\tbreak;\n\n\t      case v_export:\n\t\tbreak;\n\n\t      case v_noexport:\n                /* If this is the SHELL variable and it's not exported, then\n                   add the value from our original environment.  */\n                if (streq (v->name, \"SHELL\"))\n                  {\n                    extern struct variable shell_var;\n                    v = &shell_var;\n                    break;\n                  }\n                continue;\n\n\t      case v_ifset:\n\t\tif (v->origin == o_default)\n\t\t  continue;\n\t\tbreak;\n\t      }\n\n\t    new_slot = (struct variable **) hash_find_slot (&table, v);\n\t    if (HASH_VACANT (*new_slot))\n\t      hash_insert_at (&table, v, new_slot);\n\t  }\n    }\n\n  makelevel_key.name = MAKELEVEL_NAME;\n  makelevel_key.length = MAKELEVEL_LENGTH;\n  hash_delete (&table, &makelevel_key);\n\n  result = result_0 = (char **) xmalloc ((table.ht_fill + 2) * sizeof (char *));\n\n  v_slot = (struct variable **) table.ht_vec;\n  v_end = v_slot + table.ht_size;\n  for ( ; v_slot < v_end; v_slot++)\n    if (! HASH_VACANT (*v_slot))\n      {\n\tstruct variable *v = *v_slot;\n\n\t/* If V is recursively expanded and didn't come from the environment,\n\t   expand its value.  If it came from the environment, it should\n\t   go back into the environment unchanged.  */\n\tif (v->recursive\n\t    && v->origin != o_env && v->origin != o_env_override)\n\t  {\n\t    char *value = recursively_expand_for_file (v, file);\n#ifdef WINDOWS32\n\t    if (strcmp(v->name, \"Path\") == 0 ||\n\t\tstrcmp(v->name, \"PATH\") == 0)\n\t      convert_Path_to_windows32(value, ';');\n#endif\n\t    *result++ = concat (v->name, \"=\", value);\n\t    free (value);\n\t  }\n\telse\n\t  {\n#ifdef WINDOWS32\n            if (strcmp(v->name, \"Path\") == 0 ||\n                strcmp(v->name, \"PATH\") == 0)\n              convert_Path_to_windows32(v->value, ';');\n#endif\n\t    *result++ = concat (v->name, \"=\", v->value);\n\t  }\n      }\n\n  *result = (char *) xmalloc (100);\n  (void) sprintf (*result, \"%s=%u\", MAKELEVEL_NAME, makelevel + 1);\n  *++result = 0;\n\n  hash_free (&table, 0);\n\n  return result_0;\n}\n\f\n/* Given a variable, a value, and a flavor, define the variable.\n   See the try_variable_definition() function for details on the parameters. */\n\nstruct variable *\ndo_variable_definition (const struct floc *flocp, const char *varname,\n                        char *value, enum variable_origin origin,\n                        enum variable_flavor flavor, int target_var)\n{\n  char *p, *alloc_value = NULL;\n  struct variable *v;\n  int append = 0;\n  int conditional = 0;\n\n  /* Calculate the variable's new value in VALUE.  */\n\n  switch (flavor)\n    {\n    default:\n    case f_bogus:\n      /* Should not be possible.  */\n      abort ();\n    case f_simple:\n      /* A simple variable definition \"var := value\".  Expand the value.\n         We have to allocate memory since otherwise it'll clobber the\n\t variable buffer, and we may still need that if we're looking at a\n         target-specific variable.  */\n      p = alloc_value = allocated_variable_expand (value);\n      break;\n    case f_conditional:\n      /* A conditional variable definition \"var ?= value\".\n         The value is set IFF the variable is not defined yet. */\n      v = lookup_variable (varname, strlen (varname));\n      if (v)\n        return v;\n\n      conditional = 1;\n      flavor = f_recursive;\n      /* FALLTHROUGH */\n    case f_recursive:\n      /* A recursive variable definition \"var = value\".\n\t The value is used verbatim.  */\n      p = value;\n      break;\n    case f_append:\n      {\n        /* If we have += but we're in a target variable context, we want to\n           append only with other variables in the context of this target.  */\n        if (target_var)\n          {\n            append = 1;\n            v = lookup_variable_in_set (varname, strlen (varname),\n                                        current_variable_set_list->set);\n\n            /* Don't append from the global set if a previous non-appending\n               target-specific variable definition exists. */\n            if (v && !v->append)\n              append = 0;\n          }\n        else\n          v = lookup_variable (varname, strlen (varname));\n\n        if (v == 0)\n          {\n            /* There was no old value.\n               This becomes a normal recursive definition.  */\n            p = value;\n            flavor = f_recursive;\n          }\n        else\n          {\n            /* Paste the old and new values together in VALUE.  */\n\n            unsigned int oldlen, vallen;\n            char *val;\n\n            val = value;\n            if (v->recursive)\n              /* The previous definition of the variable was recursive.\n                 The new value is the unexpanded old and new values. */\n              flavor = f_recursive;\n            else\n              /* The previous definition of the variable was simple.\n                 The new value comes from the old value, which was expanded\n                 when it was set; and from the expanded new value.  Allocate\n                 memory for the expansion as we may still need the rest of the\n                 buffer if we're looking at a target-specific variable.  */\n              val = alloc_value = allocated_variable_expand (val);\n\n            oldlen = strlen (v->value);\n            vallen = strlen (val);\n            p = (char *) alloca (oldlen + 1 + vallen + 1);\n            bcopy (v->value, p, oldlen);\n            p[oldlen] = ' ';\n            bcopy (val, &p[oldlen + 1], vallen + 1);\n          }\n      }\n    }\n\n#ifdef __MSDOS__\n  /* Many Unix Makefiles include a line saying \"SHELL=/bin/sh\", but\n     non-Unix systems don't conform to this default configuration (in\n     fact, most of them don't even have `/bin').  On the other hand,\n     $SHELL in the environment, if set, points to the real pathname of\n     the shell.\n     Therefore, we generally won't let lines like \"SHELL=/bin/sh\" from\n     the Makefile override $SHELL from the environment.  But first, we\n     look for the basename of the shell in the directory where SHELL=\n     points, and along the $PATH; if it is found in any of these places,\n     we define $SHELL to be the actual pathname of the shell.  Thus, if\n     you have bash.exe installed as d:/unix/bash.exe, and d:/unix is on\n     your $PATH, then SHELL=/usr/local/bin/bash will have the effect of\n     defining SHELL to be \"d:/unix/bash.exe\".  */\n  if ((origin == o_file || origin == o_override)\n      && strcmp (varname, \"SHELL\") == 0)\n    {\n      PATH_VAR (shellpath);\n      extern char * __dosexec_find_on_path (const char *, char *[], char *);\n\n      /* See if we can find \"/bin/sh.exe\", \"/bin/sh.com\", etc.  */\n      if (__dosexec_find_on_path (p, (char **)0, shellpath))\n\t{\n\t  char *p;\n\n\t  for (p = shellpath; *p; p++)\n\t    {\n\t      if (*p == '\\\\')\n\t\t*p = '/';\n\t    }\n\t  v = define_variable_loc (varname, strlen (varname),\n                                   shellpath, origin, flavor == f_recursive,\n                                   flocp);\n\t}\n      else\n\t{\n\t  char *shellbase, *bslash;\n\t  struct variable *pathv = lookup_variable (\"PATH\", 4);\n\t  char *path_string;\n\t  char *fake_env[2];\n\t  size_t pathlen = 0;\n\n\t  shellbase = strrchr (p, '/');\n\t  bslash = strrchr (p, '\\\\');\n\t  if (!shellbase || bslash > shellbase)\n\t    shellbase = bslash;\n\t  if (!shellbase && p[1] == ':')\n\t    shellbase = p + 1;\n\t  if (shellbase)\n\t    shellbase++;\n\t  else\n\t    shellbase = p;\n\n\t  /* Search for the basename of the shell (with standard\n\t     executable extensions) along the $PATH.  */\n\t  if (pathv)\n\t    pathlen = strlen (pathv->value);\n\t  path_string = (char *)xmalloc (5 + pathlen + 2 + 1);\n\t  /* On MSDOS, current directory is considered as part of $PATH.  */\n\t  sprintf (path_string, \"PATH=.;%s\", pathv ? pathv->value : \"\");\n\t  fake_env[0] = path_string;\n\t  fake_env[1] = (char *)0;\n\t  if (__dosexec_find_on_path (shellbase, fake_env, shellpath))\n\t    {\n\t      char *p;\n\n\t      for (p = shellpath; *p; p++)\n\t\t{\n\t\t  if (*p == '\\\\')\n\t\t    *p = '/';\n\t\t}\n\t      v = define_variable_loc (varname, strlen (varname),\n                                       shellpath, origin,\n                                       flavor == f_recursive, flocp);\n\t    }\n\t  else\n\t    v = lookup_variable (varname, strlen (varname));\n\n\t  free (path_string);\n\t}\n    }\n  else\n#endif /* __MSDOS__ */\n#ifdef WINDOWS32\n  if ((origin == o_file || origin == o_override || origin == o_command)\n      && streq (varname, \"SHELL\"))\n    {\n      extern char *default_shell;\n\n      /* Call shell locator function. If it returns TRUE, then\n\t set no_default_sh_exe to indicate sh was found and\n         set new value for SHELL variable.  */\n\n      if (find_and_set_default_shell (p))\n        {\n          v = define_variable_in_set (varname, strlen (varname), default_shell,\n                                      origin, flavor == f_recursive,\n                                      (target_var\n                                       ? current_variable_set_list->set\n                                       : NULL),\n                                      flocp);\n          no_default_sh_exe = 0;\n        }\n      else\n        v = lookup_variable (varname, strlen (varname));\n    }\n  else\n#endif\n\n  /* If we are defining variables inside an $(eval ...), we might have a\n     different variable context pushed, not the global context (maybe we're\n     inside a $(call ...) or something.  Since this function is only ever\n     invoked in places where we want to define globally visible variables,\n     make sure we define this variable in the global set.  */\n\n  v = define_variable_in_set (varname, strlen (varname), p,\n                              origin, flavor == f_recursive,\n                              (target_var\n                               ? current_variable_set_list->set : NULL),\n                              flocp);\n  v->append = append;\n  v->conditional = conditional;\n\n  if (alloc_value)\n    free (alloc_value);\n\n  return v;\n}\n\f\n/* Try to interpret LINE (a null-terminated string) as a variable definition.\n\n   ORIGIN may be o_file, o_override, o_env, o_env_override,\n   or o_command specifying that the variable definition comes\n   from a makefile, an override directive, the environment with\n   or without the -e switch, or the command line.\n\n   See the comments for parse_variable_definition().\n\n   If LINE was recognized as a variable definition, a pointer to its `struct\n   variable' is returned.  If LINE is not a variable definition, NULL is\n   returned.  */\n\nstruct variable *\nparse_variable_definition (struct variable *v, char *line)\n{\n  register int c;\n  register char *p = line;\n  register char *beg;\n  register char *end;\n  enum variable_flavor flavor = f_bogus;\n  char *name;\n\n  while (1)\n    {\n      c = *p++;\n      if (c == '\\0' || c == '#')\n\treturn 0;\n      if (c == '=')\n\t{\n\t  end = p - 1;\n\t  flavor = f_recursive;\n\t  break;\n\t}\n      else if (c == ':')\n\tif (*p == '=')\n\t  {\n\t    end = p++ - 1;\n\t    flavor = f_simple;\n\t    break;\n\t  }\n\telse\n\t  /* A colon other than := is a rule line, not a variable defn.  */\n\t  return 0;\n      else if (c == '+' && *p == '=')\n\t{\n\t  end = p++ - 1;\n\t  flavor = f_append;\n\t  break;\n\t}\n      else if (c == '?' && *p == '=')\n        {\n          end = p++ - 1;\n          flavor = f_conditional;\n          break;\n        }\n      else if (c == '$')\n\t{\n\t  /* This might begin a variable expansion reference.  Make sure we\n\t     don't misrecognize chars inside the reference as =, := or +=.  */\n\t  char closeparen;\n\t  int count;\n\t  c = *p++;\n\t  if (c == '(')\n\t    closeparen = ')';\n\t  else if (c == '{')\n\t    closeparen = '}';\n\t  else\n\t    continue;\t\t/* Nope.  */\n\n\t  /* P now points past the opening paren or brace.\n\t     Count parens or braces until it is matched.  */\n\t  count = 0;\n\t  for (; *p != '\\0'; ++p)\n\t    {\n\t      if (*p == c)\n\t\t++count;\n\t      else if (*p == closeparen && --count < 0)\n\t\t{\n\t\t  ++p;\n\t\t  break;\n\t\t}\n\t    }\n\t}\n    }\n  v->flavor = flavor;\n\n  beg = next_token (line);\n  while (end > beg && isblank ((unsigned char)end[-1]))\n    --end;\n  p = next_token (p);\n  v->value = p;\n\n  /* Expand the name, so \"$(foo)bar = baz\" works.  */\n  name = (char *) alloca (end - beg + 1);\n  bcopy (beg, name, end - beg);\n  name[end - beg] = '\\0';\n  v->name = allocated_variable_expand (name);\n\n  if (v->name[0] == '\\0')\n    fatal (&v->fileinfo, _(\"empty variable name\"));\n\n  return v;\n}\n\f\n/* Try to interpret LINE (a null-terminated string) as a variable definition.\n\n   ORIGIN may be o_file, o_override, o_env, o_env_override,\n   or o_command specifying that the variable definition comes\n   from a makefile, an override directive, the environment with\n   or without the -e switch, or the command line.\n\n   See the comments for parse_variable_definition().\n\n   If LINE was recognized as a variable definition, a pointer to its `struct\n   variable' is returned.  If LINE is not a variable definition, NULL is\n   returned.  */\n\nstruct variable *\ntry_variable_definition (const struct floc *flocp, char *line,\n                         enum variable_origin origin, int target_var)\n{\n  struct variable v;\n  struct variable *vp;\n\n  if (flocp != 0)\n    v.fileinfo = *flocp;\n  else\n    v.fileinfo.filenm = 0;\n\n  if (!parse_variable_definition (&v, line))\n    return 0;\n\n  vp = do_variable_definition (flocp, v.name, v.value,\n                               origin, v.flavor, target_var);\n\n  free (v.name);\n\n  return vp;\n}\n\f\n/* Print information for variable V, prefixing it with PREFIX.  */\n\nstatic void\nprint_variable (const void *item, void *arg)\n{\n  const struct variable *v = (struct variable *) item;\n  const char *prefix = (char *) arg;\n  const char *origin;\n\n  switch (v->origin)\n    {\n    case o_default:\n      origin = _(\"default\");\n      break;\n    case o_env:\n      origin = _(\"environment\");\n      break;\n    case o_file:\n      origin = _(\"makefile\");\n      break;\n    case o_env_override:\n      origin = _(\"environment under -e\");\n      break;\n    case o_command:\n      origin = _(\"command line\");\n      break;\n    case o_override:\n      origin = _(\"`override' directive\");\n      break;\n    case o_automatic:\n      origin = _(\"automatic\");\n      break;\n    case o_invalid:\n    default:\n      abort ();\n    }\n  fputs (\"# \", stdout);\n  fputs (origin, stdout);\n  if (v->fileinfo.filenm)\n    printf (_(\" (from `%s', line %lu)\"),\n            v->fileinfo.filenm, v->fileinfo.lineno);\n  putchar ('\\n');\n  fputs (prefix, stdout);\n\n  /* Is this a `define'?  */\n  if (v->recursive && strchr (v->value, '\\n') != 0)\n    printf (\"define %s\\n%s\\nendef\\n\", v->name, v->value);\n  else\n    {\n      register char *p;\n\n      printf (\"%s %s= \", v->name, v->recursive ? v->append ? \"+\" : \"\" : \":\");\n\n      /* Check if the value is just whitespace.  */\n      p = next_token (v->value);\n      if (p != v->value && *p == '\\0')\n\t/* All whitespace.  */\n\tprintf (\"$(subst ,,%s)\", v->value);\n      else if (v->recursive)\n\tfputs (v->value, stdout);\n      else\n\t/* Double up dollar signs.  */\n\tfor (p = v->value; *p != '\\0'; ++p)\n\t  {\n\t    if (*p == '$')\n\t      putchar ('$');\n\t    putchar (*p);\n\t  }\n      putchar ('\\n');\n    }\n}\n\n\n/* Print all the variables in SET.  PREFIX is printed before\n   the actual variable definitions (everything else is comments).  */\n\nvoid\nprint_variable_set (struct variable_set *set, char *prefix)\n{\n  hash_map_arg (&set->table, print_variable, prefix);\n\n  fputs (_(\"# variable set hash-table stats:\\n\"), stdout);\n  fputs (\"# \", stdout);\n  hash_print_stats (&set->table, stdout);\n  putc ('\\n', stdout);\n}\n\n/* Print the data base of variables.  */\n\nvoid\nprint_variable_data_base (void)\n{\n  puts (_(\"\\n# Variables\\n\"));\n\n  print_variable_set (&global_variable_set, \"\");\n\n  puts (_(\"\\n# Pattern-specific Variable Values\"));\n\n  {\n    struct pattern_var *p;\n    int rules = 0;\n\n    for (p = pattern_vars; p != 0; p = p->next)\n      {\n        ++rules;\n        printf (\"\\n%s :\\n\", p->target);\n        print_variable (&p->variable, \"# \");\n      }\n\n    if (rules == 0)\n      puts (_(\"\\n# No pattern-specific variable values.\"));\n    else\n      printf (_(\"\\n# %u pattern-specific variable values\"), rules);\n  }\n}\n\n\n/* Print all the local variables of FILE.  */\n\nvoid\nprint_file_variables (struct file *file)\n{\n  if (file->variables != 0)\n    print_variable_set (file->variables->set, \"# \");\n}\n\n#ifdef WINDOWS32\nvoid\nsync_Path_environment (void)\n{\n  char *path = allocated_variable_expand (\"$(PATH)\");\n  static char *environ_path = NULL;\n\n  if (!path)\n    return;\n\n  /*\n   * If done this before, don't leak memory unnecessarily.\n   * Free the previous entry before allocating new one.\n   */\n  if (environ_path)\n    free (environ_path);\n\n  /*\n   * Create something WINDOWS32 world can grok\n   */\n  convert_Path_to_windows32 (path, ';');\n  environ_path = concat (\"PATH\", \"=\", path);\n  putenv (environ_path);\n  free (path);\n}\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/variable.h",
    "content": "/* Definitions for using variables in GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"hash.h\"\n\n/* Codes in a variable definition saying where the definition came from.\n   Increasing numeric values signify less-overridable definitions.  */\nenum variable_origin\n  {\n    o_default,\t\t/* Variable from the default set.  */\n    o_env,\t\t/* Variable from environment.  */\n    o_file,\t\t/* Variable given in a makefile.  */\n    o_env_override,\t/* Variable from environment, if -e.  */\n    o_command,\t\t/* Variable given by user.  */\n    o_override, \t/* Variable from an `override' directive.  */\n    o_automatic,\t/* Automatic variable -- cannot be set.  */\n    o_invalid\t\t/* Core dump time.  */\n  };\n\nenum variable_flavor\n  {\n    f_bogus,            /* Bogus (error) */\n    f_simple,           /* Simple definition (:=) */\n    f_recursive,        /* Recursive definition (=) */\n    f_append,           /* Appending definition (+=) */\n    f_conditional       /* Conditional definition (?=) */\n  };\n\n/* Structure that represents one variable definition.\n   Each bucket of the hash table is a chain of these,\n   chained through `next'.  */\n\n#define EXP_COUNT_BITS  15      /* This gets all the bitfields into 32 bits */\n#define EXP_COUNT_MAX   ((1<<EXP_COUNT_BITS)-1)\n\nstruct variable\n  {\n    char *name;\t\t\t/* Variable name.  */\n    int length;\t\t\t/* strlen (name) */\n    char *value;\t\t/* Variable value.  */\n    struct floc fileinfo;       /* Where the variable was defined.  */\n    unsigned int recursive:1;\t/* Gets recursively re-evaluated.  */\n    unsigned int append:1;\t/* Nonzero if an appending target-specific\n                                   variable.  */\n    unsigned int conditional:1; /* Nonzero if set with a ?=. */\n    unsigned int per_target:1;\t/* Nonzero if a target-specific variable.  */\n    unsigned int special:1;     /* Nonzero if this is a special variable. */\n    unsigned int exportable:1;  /* Nonzero if the variable _could_ be\n                                   exported.  */\n    unsigned int expanding:1;\t/* Nonzero if currently being expanded.  */\n    unsigned int exp_count:EXP_COUNT_BITS;\n                                /* If >1, allow this many self-referential\n                                   expansions.  */\n    enum variable_flavor\n      flavor ENUM_BITFIELD (3);\t/* Variable flavor.  */\n    enum variable_origin\n      origin ENUM_BITFIELD (3);\t/* Variable origin.  */\n    enum variable_export\n      {\n\tv_export,\t\t/* Export this variable.  */\n\tv_noexport,\t\t/* Don't export this variable.  */\n\tv_ifset,\t\t/* Export it if it has a non-default value.  */\n\tv_default\t\t/* Decide in target_environment.  */\n      } export ENUM_BITFIELD (2);\n  };\n\n/* Structure that represents a variable set.  */\n\nstruct variable_set\n  {\n    struct hash_table table;\t/* Hash table of variables.  */\n  };\n\n/* Structure that represents a list of variable sets.  */\n\nstruct variable_set_list\n  {\n    struct variable_set_list *next;\t/* Link in the chain.  */\n    struct variable_set *set;\t\t/* Variable set.  */\n  };\n\n/* Structure used for pattern-specific variables.  */\n\nstruct pattern_var\n  {\n    struct pattern_var *next;\n    char *target;\n    unsigned int len;\n    char *suffix;\n    struct variable variable;\n  };\n\nextern char *variable_buffer;\nextern struct variable_set_list *current_variable_set_list;\n\n/* expand.c */\nextern char *variable_buffer_output PARAMS ((char *ptr, char *string, unsigned int length));\nextern char *variable_expand PARAMS ((char *line));\nextern char *variable_expand_for_file PARAMS ((char *line, struct file *file));\nextern char *allocated_variable_expand_for_file PARAMS ((char *line, struct file *file));\n#define\tallocated_variable_expand(line) \\\n  allocated_variable_expand_for_file (line, (struct file *) 0)\nextern char *expand_argument PARAMS ((const char *str, const char *end));\nextern char *variable_expand_string PARAMS ((char *line, char *string,\n                                             long length));\nextern void install_variable_buffer PARAMS ((char **bufp, unsigned int *lenp));\nextern void restore_variable_buffer PARAMS ((char *buf, unsigned int len));\n\n/* function.c */\nextern int handle_function PARAMS ((char **op, char **stringp));\nextern int pattern_matches PARAMS ((char *pattern, char *percent, char *str));\nextern char *subst_expand PARAMS ((char *o, char *text, char *subst, char *replace,\n\t\tunsigned int slen, unsigned int rlen, int by_word));\nextern char *patsubst_expand PARAMS ((char *o, char *text, char *pattern, char *replace,\n\t\tchar *pattern_percent, char *replace_percent));\n\n/* expand.c */\nextern char *recursively_expand_for_file PARAMS ((struct variable *v,\n                                                  struct file *file));\n#define recursively_expand(v)   recursively_expand_for_file (v, NULL)\n\n/* variable.c */\nextern struct variable_set_list *create_new_variable_set PARAMS ((void));\nextern void free_variable_set PARAMS ((struct variable_set_list *));\nextern struct variable_set_list *push_new_variable_scope PARAMS ((void));\nextern void pop_variable_scope PARAMS ((void));\nextern void define_automatic_variables PARAMS ((void));\nextern void initialize_file_variables PARAMS ((struct file *file, int read));\nextern void print_file_variables PARAMS ((struct file *file));\nextern void print_variable_set PARAMS ((struct variable_set *set, char *prefix));\nextern void merge_variable_set_lists PARAMS ((struct variable_set_list **to_list, struct variable_set_list *from_list));\nextern struct variable *do_variable_definition PARAMS ((const struct floc *flocp, const char *name, char *value, enum variable_origin origin, enum variable_flavor flavor, int target_var));\nextern struct variable *parse_variable_definition PARAMS ((struct variable *v, char *line));\nextern struct variable *try_variable_definition PARAMS ((const struct floc *flocp, char *line, enum variable_origin origin, int target_var));\nextern void init_hash_global_variable_set PARAMS ((void));\nextern void hash_init_function_table PARAMS ((void));\nextern struct variable *lookup_variable PARAMS ((const char *name, unsigned int length));\nextern struct variable *lookup_variable_in_set PARAMS ((const char *name,\n                                                        unsigned int length,\n                                                        const struct variable_set *set));\n\nextern struct variable *define_variable_in_set\n    PARAMS ((const char *name, unsigned int length, char *value,\n             enum variable_origin origin, int recursive,\n             struct variable_set *set, const struct floc *flocp));\n\n/* Define a variable in the current variable set.  */\n\n#define define_variable(n,l,v,o,r) \\\n          define_variable_in_set((n),(l),(v),(o),(r),\\\n                                 current_variable_set_list->set,NILF)\n\n/* Define a variable with a location in the current variable set.  */\n\n#define define_variable_loc(n,l,v,o,r,f) \\\n          define_variable_in_set((n),(l),(v),(o),(r),\\\n                                 current_variable_set_list->set,(f))\n\n/* Define a variable with a location in the global variable set.  */\n\n#define define_variable_global(n,l,v,o,r,f) \\\n          define_variable_in_set((n),(l),(v),(o),(r),NULL,(f))\n\n/* Define a variable in FILE's variable set.  */\n\n#define define_variable_for_file(n,l,v,o,r,f) \\\n          define_variable_in_set((n),(l),(v),(o),(r),(f)->variables->set,NILF)\n\n/* Warn that NAME is an undefined variable.  */\n\n#define warn_undefined(n,l) do{\\\n                              if (warn_undefined_variables_flag) \\\n                                error (reading_file, \\\n                                       _(\"warning: undefined variable `%.*s'\"), \\\n                                (int)(l), (n)); \\\n                              }while(0)\n\nextern char **target_environment PARAMS ((struct file *file));\n\nextern struct pattern_var *create_pattern_var PARAMS ((char *target, char *suffix));\n\nextern int export_all_variables;\n\n#define MAKELEVEL_NAME \"MAKELEVEL\"\n#define MAKELEVEL_LENGTH (sizeof (MAKELEVEL_NAME) - 1)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/version.c",
    "content": "/* Record version and build host architecture for GNU make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* We use <config.h> instead of \"config.h\" so that a compilation\n   using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h\n   (which it would do because make.h was found in $srcdir).  */\n#include <config.h>\n\n#ifndef MAKE_HOST\n# define MAKE_HOST \"unknown\"\n#endif\n\nchar *version_string = VERSION;\nchar *make_host = MAKE_HOST;\n\f\n/*\n  Local variables:\n  version-control: never\n  End:\n */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/vmsdir.h",
    "content": "/* dirent.h for vms\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef VMSDIR_H\n#define VMSDIR_H\n\n#include <rms.h>\n\n#define\tMAXNAMLEN\t255\n\n#ifndef __DECC\n#if !defined (__GNUC__) && !defined (__ALPHA)\ntypedef unsigned long u_long;\ntypedef unsigned short u_short;\n#endif\n#endif\n\nstruct direct\n{\n  off_t d_off;\n  u_long d_fileno;\n  u_short d_reclen;\n  u_short d_namlen;\n  char d_name[MAXNAMLEN + 1];\n};\n\n#undef DIRSIZ\n#define DIRSIZ(dp)\t\t\\\n  (((sizeof (struct direct)\t\\\n     - (MAXNAMLEN+1)\t\t\\\n     + ((dp)->d_namlen+1))\t\\\n    + 3) & ~3)\n\n#define d_ino\td_fileno\t\t/* compatability */\n\n\n/*\n * Definitions for library routines operating on directories.\n */\n\ntypedef struct DIR\n{\n  struct direct dir;\n  char d_result[MAXNAMLEN + 1];\n#if defined (__ALPHA) || defined (__DECC)\n  struct FAB fab;\n#else\n  struct fabdef fab;\n#endif\n} DIR;\n\n#ifndef NULL\n#define NULL 0\n#endif\n\nextern\tDIR *opendir PARAMS (());\nextern\tstruct direct *readdir PARAMS ((DIR *dfd));\n#define rewinddir(dirp)\tseekdir((dirp), (long)0)\nextern\tint closedir PARAMS ((DIR *dfd));\nextern char *vmsify PARAMS ((char *name, int type));\n\n#endif /* VMSDIR_H */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/vmsfunctions.c",
    "content": "/* VMS functions\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"debug.h\"\n#include \"job.h\"\n\n#ifdef __DECC\n#include <starlet.h>\n#endif\n#include <descrip.h>\n#include <rms.h>\n#include <iodef.h>\n#include <atrdef.h>\n#include <fibdef.h>\n#include \"vmsdir.h\"\n\n#ifdef HAVE_VMSDIR_H\n\nDIR *\nopendir (char *dspec)\n{\n  struct DIR *dir  = (struct DIR *)xmalloc (sizeof (struct DIR));\n  struct NAM *dnam = (struct NAM *)xmalloc (sizeof (struct NAM));\n  struct FAB *dfab = &dir->fab;\n  char *searchspec = (char *)xmalloc (MAXNAMLEN + 1);\n\n  memset (dir, 0, sizeof *dir);\n\n  *dfab = cc$rms_fab;\n  *dnam = cc$rms_nam;\n  sprintf (searchspec, \"%s*.*;\", dspec);\n\n  dfab->fab$l_fna = searchspec;\n  dfab->fab$b_fns = strlen (searchspec);\n  dfab->fab$l_nam = dnam;\n\n  *dnam = cc$rms_nam;\n  dnam->nam$l_esa = searchspec;\n  dnam->nam$b_ess = MAXNAMLEN;\n\n  if (! (sys$parse (dfab) & 1))\n    {\n      free (dir);\n      free (dnam);\n      free (searchspec);\n      return (NULL);\n    }\n\n  return dir;\n}\n\n#define uppercasify(str) \\\n  do \\\n    { \\\n      char *tmp; \\\n      for (tmp = (str); *tmp != '\\0'; tmp++) \\\n        if (islower ((unsigned char)*tmp)) \\\n          *tmp = toupper ((unsigned char)*tmp); \\\n    } \\\n  while (0)\n\nstruct direct *\nreaddir (DIR *dir)\n{\n  struct FAB *dfab = &dir->fab;\n  struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam);\n  struct direct *dentry = &dir->dir;\n  int i;\n\n  memset (dentry, 0, sizeof *dentry);\n\n  dnam->nam$l_rsa = dir->d_result;\n  dnam->nam$b_rss = MAXNAMLEN;\n\n  DB (DB_VERBOSE, (\".\"));\n\n  if (!((i = sys$search (dfab)) & 1))\n    {\n      DB (DB_VERBOSE, (_(\"sys$search failed with %d\\n\"), i));\n      return (NULL);\n    }\n\n  dentry->d_off = 0;\n  if (dnam->nam$w_fid == 0)\n    dentry->d_fileno = 1;\n  else\n    dentry->d_fileno = dnam->nam$w_fid[0] + (dnam->nam$w_fid[1] << 16);\n\n  dentry->d_reclen = sizeof (struct direct);\n  dentry->d_namlen = dnam->nam$b_name + dnam->nam$b_type;\n  strncpy (dentry->d_name, dnam->nam$l_name, dentry->d_namlen);\n  dentry->d_name[dentry->d_namlen] = '\\0';\n\n#ifdef HAVE_CASE_INSENSITIVE_FS\n  uppercasify (dentry->d_name);\n#endif\n\n  return (dentry);\n}\n\nint\nclosedir (DIR *dir)\n{\n  if (dir != NULL)\n    {\n      struct FAB *dfab = &dir->fab;\n      struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam);\n      if (dnam != NULL)\n\tfree (dnam->nam$l_esa);\n      free (dnam);\n      free (dir);\n    }\n\n  return 0;\n}\n#endif /* compiled for OpenVMS prior to V7.x */\n\nchar *\ngetwd (char *cwd)\n{\n  static char buf[512];\n\n  if (cwd)\n    return (getcwd (cwd, 512));\n  else\n    return (getcwd (buf, 512));\n}\n\nint\nvms_stat (char *name, struct stat *buf)\n{\n  int status;\n  int i;\n\n  static struct FAB Fab;\n  static struct NAM Nam;\n  static struct fibdef Fib;\t/* short fib */\n  static struct dsc$descriptor FibDesc =\n  { sizeof (Fib), DSC$K_DTYPE_Z, DSC$K_CLASS_S, (char *) &Fib };\n  static struct dsc$descriptor_s DevDesc =\n  { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, &Nam.nam$t_dvi[1] };\n  static char EName[NAM$C_MAXRSS];\n  static char RName[NAM$C_MAXRSS];\n  static struct dsc$descriptor_s FileName =\n  { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0 };\n  static struct dsc$descriptor_s string =\n  { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0 };\n  static unsigned long Rdate[2];\n  static unsigned long Cdate[2];\n  static struct atrdef Atr[] =\n  {\n#if defined(VAX)\n    /* Revision date */\n    { sizeof (Rdate), ATR$C_REVDATE, (unsigned int) &Rdate[0] },\n    /* Creation date */\n    { sizeof (Cdate), ATR$C_CREDATE, (unsigned int) &Cdate[0] },\n#else\n    /* Revision date */\n    { sizeof (Rdate), ATR$C_REVDATE, &Rdate[0] },\n    /* Creation date */\n    { sizeof (Cdate), ATR$C_CREDATE, &Cdate[0]},\n#endif\n    { 0, 0, 0 }\n  };\n  static short int DevChan;\n  static short int iosb[4];\n\n  name = vmsify (name, 0);\n\n  /* initialize RMS structures, we need a NAM to retrieve the FID */\n  Fab = cc$rms_fab;\n  Fab.fab$l_fna = name;\t\t/* name of file */\n  Fab.fab$b_fns = strlen (name);\n  Fab.fab$l_nam = &Nam;\t\t/* FAB has an associated NAM */\n\n  Nam = cc$rms_nam;\n  Nam.nam$l_esa = EName;\t/* expanded filename */\n  Nam.nam$b_ess = sizeof (EName);\n  Nam.nam$l_rsa = RName;\t/* resultant filename */\n  Nam.nam$b_rss = sizeof (RName);\n\n  /* do $PARSE and $SEARCH here */\n  status = sys$parse (&Fab);\n  if (!(status & 1))\n    return -1;\n\n  DevDesc.dsc$w_length = Nam.nam$t_dvi[0];\n  status = sys$assign (&DevDesc, &DevChan, 0, 0);\n  if (!(status & 1))\n    return -1;\n\n  FileName.dsc$a_pointer = Nam.nam$l_name;\n  FileName.dsc$w_length = Nam.nam$b_name + Nam.nam$b_type + Nam.nam$b_ver;\n\n  /* Initialize the FIB */\n  for (i = 0; i < 3; i++)\n    {\n#ifndef __VAXC\n      Fib.fib$w_fid[i] = Nam.nam$w_fid[i];\n      Fib.fib$w_did[i] = Nam.nam$w_did[i];\n#else\n      Fib.fib$r_fid_overlay.fib$w_fid[i] = Nam.nam$w_fid[i];\n      Fib.fib$r_did_overlay.fib$w_did[i] = Nam.nam$w_did[i];\n#endif\n    }\n\n  status = sys$qiow (0, DevChan, IO$_ACCESS, &iosb, 0, 0,\n\t\t     &FibDesc, &FileName, 0, 0, &Atr, 0);\n  sys$dassgn (DevChan);\n  if (!(status & 1))\n    return -1;\n  status = iosb[0];\n  if (!(status & 1))\n    return -1;\n\n  status = stat (name, buf);\n  if (status)\n    return -1;\n\n  buf->st_mtime = ((Rdate[0] >> 24) & 0xff) + ((Rdate[1] << 8) & 0xffffff00);\n  buf->st_ctime = ((Cdate[0] >> 24) & 0xff) + ((Cdate[1] << 8) & 0xffffff00);\n\n  return 0;\n}\n\nchar *\ncvt_time (unsigned long tval)\n{\n  static long int date[2];\n  static char str[27];\n  static struct dsc$descriptor date_str =\n  { 26, DSC$K_DTYPE_T, DSC$K_CLASS_S, str };\n\n  date[0] = (tval & 0xff) << 24;\n  date[1] = ((tval >> 8) & 0xffffff);\n\n  if ((date[0] == 0) && (date[1] == 0))\n    return (\"never\");\n\n  sys$asctim (0, &date_str, date, 0);\n  str[26] = '\\0';\n\n  return (str);\n}\n\nint\nstrcmpi (const char *s1, const char *s2)\n{\n  while (*s1 != '\\0' && toupper(*s1) == toupper(*s2))\n    {\n      s1++;\n      s2++;\n    }\n\n  return toupper(*(unsigned char *) s1) - toupper(*(unsigned char *) s2);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/vmsify.c",
    "content": "/* vmsify.c -- Module for vms <-> unix file name conversion\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n/* Written by Klaus Kmpf (kkaempf@progis.de)\n   of proGIS Software, Aachen, Germany */\n\n\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n\n#if VMS\n#include <unixlib.h>\n#include <stdlib.h>\n#include <jpidef.h>\n#include <descrip.h>\n#include <uaidef.h>\n#include <ssdef.h>\n#include <starlet.h>\n#include <lib$routines.h>\n/* Initialize a string descriptor (struct dsc$descriptor_s) for an\n   arbitrary string.   ADDR is a pointer to the first character\n   of the string, and LEN is the length of the string. */\n\n#define INIT_DSC_S(dsc, addr, len) do { \\\n  (dsc).dsc$b_dtype = DSC$K_DTYPE_T;    \\\n  (dsc).dsc$b_class = DSC$K_CLASS_S;    \\\n  (dsc).dsc$w_length = (len);           \\\n  (dsc).dsc$a_pointer = (addr);         \\\n} while (0)\n\n/* Initialize a string descriptor (struct dsc$descriptor_s) for a\n   NUL-terminated string.  S is a pointer to the string; the length\n   is determined by calling strlen(). */\n\n#define INIT_DSC_CSTRING(dsc, s) INIT_DSC_S(dsc, s, strlen(s))\n#endif\n\n/*\n  copy 'from' to 'to' up to but not including 'upto'\n  return 0 if eos on from\n  return 1 if upto found\n\n  return 'to' at last char + 1\n  return 'from' at match + 1 or eos if no match\n\n  if as_dir == 1, change all '.' to '_'\n  else change all '.' but the last to '_'\n*/\n\nstatic int\ncopyto (char **to, char **from, char upto, int as_dir)\n{\n  char *s;\n\n  s = strrchr (*from, '.');\n\n  while (**from)\n    {\n      if (**from == upto)\n\t{\n\t  do\n\t    {\n\t      (*from)++;\n\t    }\n\t  while (**from == upto);\n\t  return 1;\n\t}\n      if (**from == '.')\n\t{\n\t  if ((as_dir == 1)\n\t      || (*from != s))\n\t    **to = '_';\n\t  else\n\t    **to = '.';\n\t}\n      else\n\t{\n#ifdef HAVE_CASE_INSENSITIVE_FS\n\t  if (isupper ((unsigned char)**from))\n\t    **to = tolower ((unsigned char)**from);\n\t  else\n#endif\n\t    **to = **from;\n\t}\n      (*to)++;\n      (*from)++;\n    }\n\n  return 0;\n}\n\n\n/*\n  get translation of logical name\n\n*/\n\nstatic char *\ntrnlog (char *name)\n{\n  int stat;\n  static char reslt[1024];\n  $DESCRIPTOR (reslt_dsc, reslt);\n  short resltlen;\n  struct dsc$descriptor_s name_dsc;\n  char *s;\n\n  INIT_DSC_CSTRING (name_dsc, name);\n\n  stat = lib$sys_trnlog (&name_dsc, &resltlen, &reslt_dsc);\n\n  if ((stat&1) == 0)\n    {\n      return \"\";\n    }\n  if (stat == SS$_NOTRAN)\n    {\n      return \"\";\n    }\n  reslt[resltlen] = '\\0';\n\n  s = (char *)malloc (resltlen+1);\n  if (s == 0)\n    return \"\";\n  strcpy (s, reslt);\n  return s;\n}\n\nstatic char *\nshowall (char *s)\n{\n  static char t[512];\n  char *pt;\n\n  pt = t;\n  if (strchr (s, '\\\\') == 0)\n    return s;\n  while (*s)\n    {\n      if (*s == '\\\\')\n\t{\n\t  *pt++ = *s;\n\t}\n      *pt++ = *s++;\n    }\n  return pt;\n}\n\n\nenum namestate { N_START, N_DEVICE, N_OPEN, N_DOT, N_CLOSED, N_DONE };\n\n/*\n  convert unix style name to vms style\n  type = 0 -> name is a full name (directory and filename part)\n  type = 1 -> name is a directory\n  type = 2 -> name is a filename without directory\n\n  The following conversions are applied\n\t\t\t(0)\t\t(1)\t\t\t(2)\n\tinput\t\tfull name\tdir name\t\tfile name\n\n1\t./\t\t<cwd>\t\t[]\t\t\t<current directory>.dir\n2\t../\t\t<home of cwd>\t<home of cwd>\t\t<home of cwd>.dir\n\n3\t//\t\t<dev of cwd>:\t<dev of cwd>:[000000]\t<dev of cwd>:000000.dir\n4\t//a\t\ta:\t\ta:\t\t\ta:\n5\t//a/\t\ta:\t\ta:\t\t\ta:000000.dir\n\n9\t/\t\t[000000]\t[000000]\t\t000000.dir\n10\t/a\t\t[000000]a\t[a]\t\t\t[000000]a\n11\t/a/\t\t[a]\t\t[a]\t\t\t[000000]a.dir\n12\t/a/b\t\t[a]b\t\t[a.b]\t\t\t[a]b\n13\t/a/b/\t\t[a.b]\t\t[a.b]\t\t\t[a]b.dir\n14\t/a/b/c\t\t[a.b]c\t\t[a.b.c]\t\t\t[a.b]c\n15\t/a/b/c/\t\t[a.b.c]\t\t[a.b.c]\t\t\t[a.b]c.dir\n\n16\ta\t\ta\t\t[.a]\t\t\ta\n17\ta/\t\t[.a]\t\t[.a]\t\t\ta.dir\n18\ta/b\t\t[.a]b\t\t[.a.b]\t\t\t[.a]b\n19\ta/b/\t\t[.a.b]\t\t[.a.b]\t\t\t[.a]b.dir\n20\ta/b/c\t\t[.a.b]c\t\t[.a.b.c]\t\t[.a.b]c\n21\ta/b/c/\t\t[.a.b.c]\t[.a.b.c]\t\t[.a.b]c.dir\n\n22\ta.b.c\t\ta_b.c\t\t[.a_b_c]\t\ta_b_c.dir\n\n23\t[x][y]z\t\t[x.y]z\t\t[x.y]z\t\t\t[x.y]z\n24\t[x][.y]z\t[x.y]z\t\t[x.y]z\t\t\t[x.y]z\n\n25  filenames with '$'  are left unchanged if they contain no '/'\n25  filenames with ':' are left unchanged\n26  filenames with a single pair of '[' ']' are left unchanged\n\n  the input string is not written to\n*/\n\nchar *\nvmsify (char *name, int type)\n{\n/* max 255 device\n   max 39 directory\n   max 39 filename\n   max 39 filetype\n   max 5 version\n*/\n#define MAXPATHLEN 512\n\n  enum namestate nstate;\n  static char vmsname[MAXPATHLEN+1];\n  char *fptr;\n  char *vptr;\n  char *s,*s1;\n  int as_dir;\n  int count;\n\n  if (name == 0)\n    return 0;\n  fptr = name;\n  vptr = vmsname;\n  nstate = N_START;\n\n  /* case 25a */\n\n  s = strpbrk (name, \"$:\");\n  if (s != 0)\n    {\n      char *s1;\n      char *s2;\n\n      if (type == 1)\n\t{\n\t  s1 = strchr (s+1, '[');\n\t  s2 = strchr (s+1, ']');\n\t}\n\n      if (*s == '$')\n\t{\n\t  if (strchr (name, '/') == 0)\n\t    {\n\t      if ((type == 1) && (s1 != 0) && (s2 == 0))\n\t\t{\n\t\t  strcpy (vmsname, name);\n\t\t  strcat (vmsname, \"]\");\n\t\t  return vmsname;\n\t\t}\n\t      else\n\t\treturn name;\n\t    }\n\t}\n      else\n\t{\n\t  if ((type == 1) && (s1 != 0) && (s2 == 0))\n\t    {\n\t      strcpy (vmsname, name);\n\t      strcat (vmsname, \"]\");\n\t      return vmsname;\n\t    }\n\t  else\n\t    return name;\n\t}\n    }\n\n  /* case 26 */\n\n  s = strchr (name, '[');\n\n  if (s != 0)\n    {\n      s1 = strchr (s+1, '[');\n      if (s1 == 0)\n\t{\n\t  if ((type == 1)\n\t       && (strchr (s+1, ']') == 0))\n\t    {\n\t      strcpy (vmsname, name);\n\t      strcat (vmsname, \"]\");\n\t      return vmsname;\n\t    }\n\t  else\n\t    return name;\t\t\t/* single [, keep unchanged */\n\t}\n      s1--;\n      if (*s1 != ']')\n\t{\n\t  return name;\t\t\t/* not ][, keep unchanged */\n\t}\n\n      /* we have ][ */\n\n      s = name;\n\n      /* s  -> starting char\n\t s1 -> ending ']'  */\n\n      do\n\t{\n\t  strncpy (vptr, s, s1-s);\t/* copy up to but not including ']' */\n\t  vptr += s1-s;\n\t  if (*s1 == 0)\n\t    break;\n\t  s = s1 + 1;\t\t\t/* s -> char behind ']' */\n\t  if (*s != '[')\t\t/* was '][' ? */\n\t    break;\t\t\t/* no, last ] found, exit */\n\t  s++;\n\t  if (*s != '.')\n\t    *vptr++ = '.';\n\t  s1 = strchr (s, ']');\n\t  if (s1 == 0)\t\t\t/* no closing ] */\n\t    s1 = s + strlen (s);\n\t}\n      while (1);\n\n      *vptr++ = ']';\n\n      fptr = s;\n\n    }\n\n  else\t\t/* no [ in name */\n\n    {\n\n      int state;\n      int rooted = 1;\t/* flag if logical is rooted, else insert [000000] */\n\n      state = 0;\n\n      do\n\t{\n\n      switch (state)\n\t{\n\t  case 0:\t\t\t\t/* start of loop */\n\t    if (*fptr == '/')\n\t      {\n\t\tfptr++;\n\t\tstate = 1;\n\t      }\n\t    else if (*fptr == '.')\n\t      {\n\t\tfptr++;\n\t\tstate = 10;\n\t      }\n\t    else\n\t      state = 2;\n\t    break;\n\n\t  case 1:\t\t\t\t/* '/' at start */\n\t    if (*fptr == '/')\n\t      {\n\t\tfptr++;\n\t\tstate = 3;\n\t      }\n\t    else\n\t      state = 4;\n\t    break;\n\n\t  case 2:\t\t\t\t/* no '/' at start */\n\t    s = strchr (fptr, '/');\n\t    if (s == 0)\t\t\t/* no '/' (16) */\n\t      {\n\t\tif (type == 1)\n\t\t  {\n\t\t    strcpy (vptr, \"[.\");\n\t\t    vptr += 2;\n\t\t  }\n\t\tcopyto (&vptr, &fptr, 0, (type==1));\n\t\tif (type == 1)\n\t\t  *vptr++ = ']';\n\t\tstate = -1;\n\t      }\n\t    else\t\t\t/* found '/' (17..21) */\n\t      {\n\t\tif ((type == 2)\n\t\t    && (*(s+1) == 0))\t/* 17(2) */\n\t\t  {\n\t\t    copyto (&vptr, &fptr, '/', 1);\n\t\t    state = 7;\n\t\t  }\n\t\telse\n\t\t  {\n\t\t    strcpy (vptr, \"[.\");\n\t\t    vptr += 2;\n\t\t    copyto (&vptr, &fptr, '/', 1);\n\t\t    nstate = N_OPEN;\n\t\t    state = 9;\n\t\t  }\n\t      }\n\t    break;\n\n\t  case 3:\t\t\t\t/* '//' at start */\n\t    while (*fptr == '/')\t/* collapse all '/' */\n\t      fptr++;\n\t    if (*fptr == 0)\t\t/* just // */\n\t      {\n\t\tchar cwdbuf[MAXPATHLEN+1];\n\n\t\ts1 = getcwd(cwdbuf, MAXPATHLEN);\n\t\tif (s1 == 0)\n\t\t  {\n\t\t    return \"\";\t\t/* FIXME, err getcwd */\n\t\t  }\n\t\ts = strchr (s1, ':');\n\t\tif (s == 0)\n\t\t  {\n\t\t    return \"\";\t\t/* FIXME, err no device */\n\t\t  }\n\t\tstrncpy (vptr, s1, s-s1+1);\n\t\tvptr += s-s1+1;\n\t\tstate = -1;\n\t\tbreak;\n\t      }\n\n\t    s = vptr;\n\n\t    if (copyto (&vptr, &fptr, '/', 1) == 0)\t/* copy device part */\n\t      {\n\t\t*vptr++ = ':';\n\t\tstate = -1;\n\t\tbreak;\n\t      }\n\t    *vptr = ':';\n\t    nstate = N_DEVICE;\n\t    if (*fptr == 0)\t/* just '//a/' */\n\t      {\n\t\tstrcpy (vptr+1, \"[000000]\");\n\t\tvptr += 9;\n\t\tstate = -1;\n\t\tbreak;\n\t      }\n\t    *vptr = 0;\n\t\t\t\t/* check logical for [000000] insertion */\n\t    s1 = trnlog (s);\n\t    if (*s1 != 0)\n\t      {\t\t\t/* found translation */\n\t\tchar *s2;\n\t\tfor (;;)\t/* loop over all nested logicals */\n\t\t  {\n\t\t    s2 = s1 + strlen (s1) - 1;\n\t\t    if (*s2 == ':')\t/* translation ends in ':' */\n\t\t      {\n\t\t\ts2 = trnlog (s1);\n\t\t\tfree (s1);\n\t\t\tif (*s2 == 0)\n\t\t\t  {\n\t\t\t    rooted = 0;\n\t\t\t    break;\n\t\t\t  }\n\t\t\ts1 = s2;\n\t\t\tcontinue;\t/* next iteration */\n\t\t      }\n\t\t    if (*s2 == ']')\t/* translation ends in ']' */\n\t\t      {\n\t\t\tif (*(s2-1) == '.')\t/* ends in '.]' */\n\t\t\t  {\n\t\t\t    if (strncmp (fptr, \"000000\", 6) != 0)\n\t\t\t      rooted = 0;\n\t\t\t  }\n\t\t\telse\n\t\t\t  {\n\t\t\t    strcpy (vmsname, s1);\n\t\t\t    s = strchr (vmsname, ']');\n\t\t\t    *s = '.';\n\t\t\t    nstate = N_DOT;\n\t\t\t    vptr = s;\n\t\t\t  }\n\t\t      }\n\t\t    break;\n\t\t  }\n\t\tfree (s1);\n\t      }\n\t    else\n\t      rooted = 0;\n\n\t    if (*vptr == 0)\n\t      {\n\t\tnstate = N_DEVICE;\n\t        *vptr++ = ':';\n\t      }\n\t    else\n\t      vptr++;\n\n\t    if (rooted == 0)\n\t      {\n\t        strcpy (vptr, \"[000000.\");\n\t\tvptr += 8;\n\t\ts1 = vptr-1;\n\t\tnstate = N_DOT;\n\t      }\n\t    else\n\t      s1 = 0;\n\n\t/* s1-> '.' after 000000 or NULL */\n\n\t    s = strchr (fptr, '/');\n\t    if (s == 0)\n\t      {\t\t\t\t/* no next '/' */\n\t\tif (*(vptr-1) == '.')\n\t\t  *(vptr-1) = ']';\n\t\telse if (rooted == 0)\n\t\t  *vptr++ = ']';\n\t\tcopyto (&vptr, &fptr, 0, (type == 1));\n\t\tstate = -1;\n\t\tbreak;\n\t      }\n\t    else\n\t      {\n\t\twhile (*(s+1) == '/')\t/* skip multiple '/' */\n\t\t  s++;\n\t      }\n\n\t    if ((rooted != 0)\n\t        && (*(vptr-1) != '.'))\n\t      {\n\t\t*vptr++ = '[';\n\t\tnstate = N_DOT;\n\t      }\n\t    else\n\t      if ((nstate == N_DOT)\n\t\t && (s1 != 0)\n\t\t && (*(s+1) == 0))\n\t\t{\n\t\t  if (type == 2)\n\t\t    {\n\t\t      *s1 = ']';\n\t\t      nstate = N_CLOSED;\n\t\t    }\n\t\t}\n\t    state = 9;\n\t    break;\n\n\t  case 4:\t\t\t\t/* single '/' at start (9..15) */\n\t    if (*fptr == 0)\n\t      state = 5;\n\t    else\n\t      state = 6;\n\t    break;\n\n\t  case 5:\t\t\t\t/* just '/' at start (9) */\n\t    if (type != 2)\n\t      {\n\t        *vptr++ = '[';\n\t\tnstate = N_OPEN;\n\t      }\n\t    strcpy (vptr, \"000000\");\n\t    vptr += 6;\n\t    if (type == 2)\n\t      state = 7;\n\t    else\n\t      state = 8;\n\t    break;\n\n\t  case 6:\t\t\t\t/* chars following '/' at start 10..15 */\n\t    *vptr++ = '[';\n\t    nstate = N_OPEN;\n\t    s = strchr (fptr, '/');\n\t    if (s == 0)\t\t\t/* 10 */\n\t      {\n\t\tif (type != 1)\n\t\t  {\n\t\t    strcpy (vptr, \"000000]\");\n\t\t    vptr += 7;\n\t\t  }\n\t\tcopyto (&vptr, &fptr, 0, (type == 1));\n\t\tif (type == 1)\n\t\t  {\n\t\t    *vptr++ = ']';\n\t\t  }\n\t\tstate = -1;\n\t      }\n\t    else\t\t\t/* 11..15 */\n\t      {\n\t\tif ( (type == 2)\n\t\t   && (*(s+1) == 0))\t/* 11(2) */\n\t\t  {\n\t\t    strcpy (vptr, \"000000]\");\n\t\t    nstate = N_CLOSED;\n\t\t    vptr += 7;\n\t\t  }\n\t\tcopyto (&vptr, &fptr, '/', (*(vptr-1) != ']'));\n\t\tstate = 9;\n\t      }\n\t    break;\n\n\t  case 7:\t\t\t\t/* add '.dir' and exit */\n\t    if ((nstate == N_OPEN)\n\t\t|| (nstate == N_DOT))\n\t      {\n\t\ts = vptr-1;\n\t\twhile (s > vmsname)\n\t\t  {\n\t\t    if (*s == ']')\n\t\t      {\n\t\t\tbreak;\n\t\t      }\n\t\t    if (*s == '.')\n\t\t      {\n\t\t\t*s = ']';\n\t\t\tbreak;\n\t\t      }\n\t\t    s--;\n\t\t  }\n\t      }\n\t    strcpy (vptr, \".dir\");\n\t    vptr += 4;\n\t    state = -1;\n\t    break;\n\n\t  case 8:\t\t\t\t/* add ']' and exit */\n\t    *vptr++ = ']';\n\t    state = -1;\n\t    break;\n\n\t  case 9:\t\t\t\t/* 17..21, fptr -> 1st '/' + 1 */\n\t    if (*fptr == 0)\n\t      {\n\t\tif (type == 2)\n\t\t  {\n\t\t    state = 7;\n\t\t  }\n\t\telse\n\t\t  state = 8;\n\t\tbreak;\n\t      }\n\t    s = strchr (fptr, '/');\n\t    if (s == 0)\n\t      {\n\t\tif (type != 1)\n\t\t  {\n\t\t    if (nstate == N_OPEN)\n\t\t      {\n\t\t\t*vptr++ = ']';\n\t\t\tnstate = N_CLOSED;\n\t\t      }\n\t\t    as_dir = 0;\n\t\t  }\n\t\telse\n\t\t  {\n\t\t    if (nstate == N_OPEN)\n\t\t      {\n\t\t\t*vptr++ = '.';\n\t\t\tnstate = N_DOT;\n\t\t      }\n\t\t    as_dir = 1;\n\t\t  }\n\t      }\n\t    else\n\t      {\n\t\twhile (*(s+1) == '/')\n\t\t  s++;\n\t\tif ( (type == 2)\n\t\t    && (*(s+1) == 0))\t\t/* 19(2), 21(2)*/\n\t\t  {\n\t\t    if (nstate != N_CLOSED)\n\t\t      {\n\t\t\t*vptr++ = ']';\n\t\t\tnstate = N_CLOSED;\n\t\t      }\n\t\t    as_dir = 1;\n\t\t  }\n\t\telse\n\t\t  {\n\t\t    if (nstate == N_OPEN)\n\t\t      {\n\t\t\t*vptr++ = '.';\n\t\t\tnstate = N_DOT;\n\t\t      }\n\t\t    as_dir = 1;\n\t\t  }\n\t      }\n\t    if ( (*fptr == '.')\t\t\t/* check for '..' or '../' */\n\t\t&& (*(fptr+1) == '.')\n\t\t&& ((*(fptr+2) == '/')\n\t\t    || (*(fptr+2) == 0)) )\n\t      {\n\t\tfptr += 2;\n\t\tif (*fptr == '/')\n\t\t  {\n\t\t    do\n\t\t      {\n\t\t\tfptr++;\n\t\t      }\n\t\t    while (*fptr == '/');\n\t\t  }\n\t\telse if (*fptr == 0)\n\t\t  type = 1;\n\t\tvptr--;\t\t\t\t/* vptr -> '.' or ']' */\n\t\ts1 = vptr;\n\t\tfor (;;)\n\t\t  {\n\t\t    s1--;\n\t\t    if (*s1 == '.')\t\t/* one back */\n\t\t      {\n\t\t\tvptr = s1;\n\t\t\tnstate = N_OPEN;\n\t\t\tbreak;\n\t\t      }\n\t\t    if (*s1 == '[')\t\t/* top level reached */\n\t\t      {\n\t\t\tif (*fptr == 0)\n\t\t\t  {\n\t\t\t    strcpy (s1, \"[000000]\");\n\t\t\t    vptr = s1 + 8;\n\t\t\t    nstate = N_CLOSED;\n\t\t\t    s = 0;\n\t\t\t    break;\n\t\t\t  }\n\t\t\telse\n\t\t\t  {\n\t\t\t    vptr = s1+1;\n\t\t\t    nstate = N_OPEN;\n\t\t\t    break;\n\t\t\t  }\n\t\t      }\n\t\t  }\n\t      }\n\t    else\n\t      {\n\t\tcopyto (&vptr, &fptr, '/', as_dir);\n\t\tif (nstate == N_DOT)\n\t\t  nstate = N_OPEN;\n\t      }\n\t    if (s == 0)\n\t      {\t\t\t\t\t/* 18,20 */\n\t\tif (type == 1)\n\t\t  *vptr++ = ']';\n\t\tstate = -1;\n\t      }\n\t    else\n\t      {\n\t\tif (*(s+1) == 0)\n\t\t  {\n\t\t    if (type == 2)\t\t/* 19,21 */\n\t\t      {\n\t\t        state = 7;\n\t\t      }\n\t\t    else\n\t\t      {\n\t\t\t*vptr++ = ']';\n\t\t\tstate = -1;\n\t\t      }\n\t\t  }\n\t      }\n\t    break;\n\n\t  case 10:\t\t\t\t/* 1,2 first is '.' */\n\t    if (*fptr == '.')\n\t      {\n\t\tfptr++;\n\t\tstate = 11;\n\t      }\n\t    else\n\t      state = 12;\n\t    break;\n\n\t  case 11:\t\t\t\t/* 2, '..' at start */\n\t    count = 1;\n\t    if (*fptr != 0)\n\t      {\n\t\tif (*fptr != '/')\t\t/* got ..xxx */\n\t\t  {\n\t\t    return name;\n\t\t  }\n\t\tdo\t\t\t\t/* got ../ */\n\t\t  {\n\t\t    fptr++;\n\t\t    while (*fptr == '/') fptr++;\n\t\t    if (*fptr != '.')\n\t\t      break;\n\t\t    if (*(fptr+1) != '.')\n\t\t      break;\n\t\t    fptr += 2;\n\t\t    if ((*fptr == 0)\n\t\t\t|| (*fptr == '/'))\n\t\t      count++;\n\t\t  }\n\t\twhile (*fptr == '/');\n\t      }\n\t    {\t\t\t\t\t/* got '..' or '../' */\n\t      char cwdbuf[MAXPATHLEN+1];\n\n\t      s1 = getcwd(cwdbuf, MAXPATHLEN);\n\t      if (s1 == 0)\n\t\t{\n\t\t  return \"\";\t    /* FIXME, err getcwd */\n\t\t}\n\t      strcpy (vptr, s1);\n\t      s = strchr (vptr, ']');\n\t      if (s != 0)\n\t\t{\n\t\t  nstate = N_OPEN;\n\t\t  while (s > vptr)\n\t\t    {\n\t\t      s--;\n\t\t      if (*s == '[')\n\t\t\t{\n\t\t\t  s++;\n\t\t\t  strcpy (s, \"000000]\");\n\t\t\t  state = -1;\n\t\t\t  break;\n\t\t\t}\n\t\t      else if (*s == '.')\n\t\t\t{\n\t\t\t  if (--count == 0)\n\t\t\t    {\n\t\t\t      if (*fptr == 0)\t/* had '..' or '../' */\n\t\t\t\t{\n\t\t\t\t  *s++ = ']';\n\t\t\t\t  state = -1;\n\t\t\t\t}\n\t\t\t      else\t\t\t/* had '../xxx' */\n\t\t\t\t{\n\t\t\t\t  state = 9;\n\t\t\t\t}\n\t\t\t      *s = 0;\n\t\t\t      break;\n\t\t\t    }\n\t\t\t}\n\t\t    }\n\t\t}\n\t      vptr += strlen (vptr);\n\t    }\n\t    break;\n\n\t  case 12:\t\t\t\t/* 1, '.' at start */\n\t    if (*fptr != 0)\n\t      {\n\t\tif (*fptr != '/')\n\t\t  {\n\t\t    return name;\n\t\t  }\n\t\twhile (*fptr == '/')\n\t\t  fptr++;\n\t      }\n\n\t    {\n\t      char cwdbuf[MAXPATHLEN+1];\n\n\t      s1 = getcwd(cwdbuf, MAXPATHLEN);\n\t      if (s1 == 0)\n\t\t{\n\t\t  return \"\";\t    /*FIXME, err getcwd */\n\t\t}\n\t      strcpy (vptr, s1);\n\t      if (*fptr == 0)\n\t\t{\n\t\t  state = -1;\n\t\t  break;\n\t\t}\n\t      else\n\t\t{\n\t\t  s = strchr (vptr, ']');\n\t\t  if (s == 0)\n\t\t    {\n\t\t      state = -1;\n\t\t      break;\n\t\t    }\n\t\t  *s = 0;\n\t\t  nstate = N_OPEN;\n\t\t  vptr += strlen (vptr);\n\t\t  state = 9;\n\t\t}\n\t    }\n\t    break;\n\t}\n\n\t}\n      while (state > 0);\n\n\n    }\n\n\n  /* directory conversion done\n     fptr -> filename part of input string\n     vptr -> free space in vmsname\n  */\n\n  *vptr++ = 0;\n\n  return vmsname;\n}\n\n\n\n/*\n  convert from vms-style to unix-style\n\n  dev:[dir1.dir2]\t//dev/dir1/dir2/\n*/\n\nchar *\nunixify (char *name)\n{\n  static char piece[512];\n  char *s, *p;\n\n  if (strchr (name, '/') != 0)\t\t/* already in unix style */\n    return name;\n\n  p = piece;\n  *p = 0;\n\n  /* device part */\n\n  s = strchr (name, ':');\n\n  if (s != 0)\n    {\n      *s = 0;\n      *p++ = '/';\n      *p++ = '/';\n      strcpy (p, name);\n      p += strlen (p);\n      *s = ':';\n    }\n\n  /* directory part */\n\n  *p++ = '/';\n  s = strchr (name, '[');\n\n  if (s != 0)\n    {\n      s++;\n      switch (*s)\n        {\n\t  case ']':\t\t/* [] */\n\t    strcat (p, \"./\");\n\t    break;\n\t  case '-':\t\t/* [- */\n\t    strcat (p, \"../\");\n\t    break;\n\t  case '.':\n\t    strcat (p, \"./\");\t/* [. */\n\t    break;\n\t  default:\n\t    s--;\n\t    break;\n        }\n      s++;\n      while (*s)\n        {\n\t  if (*s == '.')\n\t    *p++ = '/';\n\t  else\n\t    *p++ = *s;\n\t  s++;\n\t  if (*s == ']')\n\t    {\n\t      s++;\n\t      break;\n\t    }\n        }\n      if (*s != 0)\t\t/* more after ']' ?? */\n        {\n\t  if (*(p-1) != '/')\n\t    *p++ = '/';\n\t  strcpy (p, s);\t\t/* copy it anyway */\n        }\n    }\n\n  else\t\t/* no '[' anywhere */\n\n    {\n      *p++ = 0;\n    }\n\n  /* force end with '/' */\n\n  if (*(p-1) != '/')\n    *p++ = '/';\n  *p = 0;\n\n  return piece;\n}\n\n/* EOF */\n"
  },
  {
    "path": "sources/host-tools/make-3.81/vmsjobs.c",
    "content": "/* --------------- Moved here from job.c ---------------\n   This file must be #included in job.c, as it accesses static functions.\n\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include <string.h>\n#include <descrip.h>\n#include <clidef.h>\n\nextern char *vmsify PARAMS ((char *name, int type));\n\nstatic int vms_jobsefnmask = 0;\n\n/* Wait for nchildren children to terminate */\nstatic void\nvmsWaitForChildren(int *status)\n{\n  while (1)\n    {\n      if (!vms_jobsefnmask)\n\t{\n\t  *status = 0;\n\t  return;\n\t}\n\n      *status = sys$wflor (32, vms_jobsefnmask);\n    }\n  return;\n}\n\n/* Set up IO redirection.  */\n\nchar *\nvms_redirect (struct dsc$descriptor_s *desc, char *fname, char *ibuf)\n{\n  char *fptr;\n\n  ibuf++;\n  while (isspace ((unsigned char)*ibuf))\n    ibuf++;\n  fptr = ibuf;\n  while (*ibuf && !isspace ((unsigned char)*ibuf))\n    ibuf++;\n  *ibuf = 0;\n  if (strcmp (fptr, \"/dev/null\") != 0)\n    {\n      strcpy (fname, vmsify (fptr, 0));\n      if (strchr (fname, '.') == 0)\n\tstrcat (fname, \".\");\n    }\n  desc->dsc$w_length = strlen(fname);\n  desc->dsc$a_pointer = fname;\n  desc->dsc$b_dtype = DSC$K_DTYPE_T;\n  desc->dsc$b_class = DSC$K_CLASS_S;\n\n  if (*fname == 0)\n    printf (_(\"Warning: Empty redirection\\n\"));\n  return ibuf;\n}\n\n\n/* found apostrophe at (p-1)\n   inc p until after closing apostrophe.\n */\n\nchar *\nvms_handle_apos (char *p)\n{\n  int alast;\n\n#define SEPCHARS \",/()= \"\n\n  alast = 0;\n\n  while (*p != 0)\n    {\n      if (*p == '\"')\n\t{\n          if (alast)\n            {\n              alast = 0;\n              p++;\n\t    }\n\t  else\n\t    {\n\t      p++;\n\t      if (strchr (SEPCHARS, *p))\n\t\tbreak;\n\t      alast = 1;\n\t    }\n\t}\n      else\n\tp++;\n    }\n\n  return p;\n}\n\n/* This is called as an AST when a child process dies (it won't get\n   interrupted by anything except a higher level AST).\n*/\nint\nvmsHandleChildTerm(struct child *child)\n{\n    int status;\n    register struct child *lastc, *c;\n    int child_failed;\n\n    vms_jobsefnmask &= ~(1 << (child->efn - 32));\n\n    lib$free_ef(&child->efn);\n\n    (void) sigblock (fatal_signal_mask);\n\n    child_failed = !(child->cstatus & 1 || ((child->cstatus & 7) == 0));\n\n    /* Search for a child matching the deceased one.  */\n    lastc = 0;\n#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */\n    for (c = children; c != 0 && c != child; lastc = c, c = c->next)\n      ;\n#else\n    c = child;\n#endif\n\n    if (child_failed && !c->noerror && !ignore_errors_flag)\n      {\n\t/* The commands failed.  Write an error message,\n\t   delete non-precious targets, and abort.  */\n\tchild_error (c->file->name, c->cstatus, 0, 0, 0);\n\tc->file->update_status = 1;\n\tdelete_child_targets (c);\n      }\n    else\n      {\n\tif (child_failed)\n\t  {\n\t    /* The commands failed, but we don't care.  */\n\t    child_error (c->file->name, c->cstatus, 0, 0, 1);\n\t    child_failed = 0;\n\t  }\n\n#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */\n\t/* If there are more commands to run, try to start them.  */\n\tstart_job (c);\n\n\tswitch (c->file->command_state)\n\t  {\n\t  case cs_running:\n\t    /* Successfully started.  */\n\t    break;\n\n\t  case cs_finished:\n\t    if (c->file->update_status != 0) {\n\t\t/* We failed to start the commands.  */\n\t\tdelete_child_targets (c);\n\t    }\n\t    break;\n\n\t  default:\n\t    error (NILF, _(\"internal error: `%s' command_state\"),\n                   c->file->name);\n\t    abort ();\n\t    break;\n\t  }\n#endif /* RECURSIVEJOBS */\n      }\n\n    /* Set the state flag to say the commands have finished.  */\n    c->file->command_state = cs_finished;\n    notice_finished_file (c->file);\n\n#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */\n    /* Remove the child from the chain and free it.  */\n    if (lastc == 0)\n      children = c->next;\n    else\n      lastc->next = c->next;\n    free_child (c);\n#endif /* RECURSIVEJOBS */\n\n    /* There is now another slot open.  */\n    if (job_slots_used > 0)\n      --job_slots_used;\n\n    /* If the job failed, and the -k flag was not given, die.  */\n    if (child_failed && !keep_going_flag)\n      die (EXIT_FAILURE);\n\n    (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask));\n\n    return 1;\n}\n\n/* VMS:\n   Spawn a process executing the command in ARGV and return its pid. */\n\n#define MAXCMDLEN 200\n\n/* local helpers to make ctrl+c and ctrl+y working, see below */\n#include <iodef.h>\n#include <libclidef.h>\n#include <ssdef.h>\n\nstatic int ctrlMask= LIB$M_CLI_CTRLY;\nstatic int oldCtrlMask;\nstatic int setupYAstTried= 0;\nstatic int pidToAbort= 0;\nstatic int chan= 0;\n\nstatic void\nreEnableAst(void)\n{\n\tlib$enable_ctrl (&oldCtrlMask,0);\n}\n\nstatic void\nastHandler (void)\n{\n\tif (pidToAbort) {\n\t\tsys$forcex (&pidToAbort, 0, SS$_ABORT);\n\t\tpidToAbort= 0;\n\t}\n\tkill (getpid(),SIGQUIT);\n}\n\nstatic void\ntryToSetupYAst(void)\n{\n\t$DESCRIPTOR(inputDsc,\"SYS$COMMAND\");\n\tint\tstatus;\n\tstruct {\n\t\tshort int\tstatus, count;\n\t\tint\tdvi;\n\t} iosb;\n\n\tsetupYAstTried++;\n\n\tif (!chan) {\n\t\tstatus= sys$assign(&inputDsc,&chan,0,0);\n\t\tif (!(status&SS$_NORMAL)) {\n\t\t\tlib$signal(status);\n\t\t\treturn;\n\t\t}\n\t}\n\tstatus= sys$qiow (0, chan, IO$_SETMODE|IO$M_CTRLYAST,&iosb,0,0,\n\t\tastHandler,0,0,0,0,0);\n\tif (status==SS$_NORMAL)\n\t\tstatus= iosb.status;\n        if (status==SS$_ILLIOFUNC || status==SS$_NOPRIV) {\n\t\tsys$dassgn(chan);\n#ifdef\tCTRLY_ENABLED_ANYWAY\n\t\tfprintf (stderr,\n                         _(\"-warning, CTRL-Y will leave sub-process(es) around.\\n\"));\n#else\n\t\treturn;\n#endif\n\t}\n\telse if (!(status&SS$_NORMAL)) {\n\t\tsys$dassgn(chan);\n\t\tlib$signal(status);\n\t\treturn;\n\t}\n\n\t/* called from AST handler ? */\n\tif (setupYAstTried>1)\n\t\treturn;\n\tif (atexit(reEnableAst))\n\t\tfprintf (stderr,\n                         _(\"-warning, you may have to re-enable CTRL-Y handling from DCL.\\n\"));\n\tstatus= lib$disable_ctrl (&ctrlMask, &oldCtrlMask);\n\tif (!(status&SS$_NORMAL)) {\n\t\tlib$signal(status);\n\t\treturn;\n\t}\n}\n\nint\nchild_execute_job (char *argv, struct child *child)\n{\n  int i;\n  static struct dsc$descriptor_s cmddsc;\n  static struct dsc$descriptor_s pnamedsc;\n  static struct dsc$descriptor_s ifiledsc;\n  static struct dsc$descriptor_s ofiledsc;\n  static struct dsc$descriptor_s efiledsc;\n  int have_redirection = 0;\n  int have_newline = 0;\n\n  int spflags = CLI$M_NOWAIT;\n  int status;\n  char *cmd = alloca (strlen (argv) + 512), *p, *q;\n  char ifile[256], ofile[256], efile[256];\n  char *comname = 0;\n  char procname[100];\n  int in_string;\n\n  /* Parse IO redirection.  */\n\n  ifile[0] = 0;\n  ofile[0] = 0;\n  efile[0] = 0;\n\n  DB (DB_JOBS, (\"child_execute_job (%s)\\n\", argv));\n\n  while (isspace ((unsigned char)*argv))\n    argv++;\n\n  if (*argv == 0)\n    return 0;\n\n  sprintf (procname, \"GMAKE_%05x\", getpid () & 0xfffff);\n  pnamedsc.dsc$w_length = strlen(procname);\n  pnamedsc.dsc$a_pointer = procname;\n  pnamedsc.dsc$b_dtype = DSC$K_DTYPE_T;\n  pnamedsc.dsc$b_class = DSC$K_CLASS_S;\n\n  in_string = 0;\n  /* Handle comments and redirection. */\n  for (p = argv, q = cmd; *p; p++, q++)\n    {\n      if (*p == '\"')\n        in_string = !in_string;\n      if (in_string)\n        {\n          *q = *p;\n          continue;\n        }\n      switch (*p)\n\t{\n\t  case '#':\n\t    *p-- = 0;\n\t    *q-- = 0;\n\t    break;\n\t  case '\\\\':\n\t    p++;\n\t    if (*p == '\\n')\n\t      p++;\n\t    if (isspace ((unsigned char)*p))\n\t      {\n\t\tdo { p++; } while (isspace ((unsigned char)*p));\n\t\tp--;\n\t      }\n\t    *q = *p;\n\t    break;\n\t  case '<':\n\t    p = vms_redirect (&ifiledsc, ifile, p);\n\t    *q = ' ';\n\t    have_redirection = 1;\n\t    break;\n\t  case '>':\n\t    have_redirection = 1;\n\t    if (*(p-1) == '2')\n\t      {\n\t\tq--;\n\t\tif (strncmp (p, \">&1\", 3) == 0)\n\t\t  {\n\t\t    p += 3;\n\t\t    strcpy (efile, \"sys$output\");\n\t\t    efiledsc.dsc$w_length = strlen(efile);\n\t\t    efiledsc.dsc$a_pointer = efile;\n\t\t    efiledsc.dsc$b_dtype = DSC$K_DTYPE_T;\n\t\t    efiledsc.dsc$b_class = DSC$K_CLASS_S;\n\t\t  }\n\t\telse\n\t\t  {\n\t\t    p = vms_redirect (&efiledsc, efile, p);\n\t\t  }\n\t      }\n\t    else\n\t      {\n\t\tp = vms_redirect (&ofiledsc, ofile, p);\n\t      }\n\t    *q = ' ';\n\t    break;\n\t  case '\\n':\n\t    have_newline = 1;\n\t  default:\n\t    *q = *p;\n\t    break;\n\t}\n    }\n  *q = *p;\n  while (isspace ((unsigned char)*--q))\n    *q = '\\0';\n\n  if (strncmp (cmd, \"builtin_\", 8) == 0)\n    {\n      child->pid = 270163;\n      child->efn = 0;\n      child->cstatus = 1;\n\n      DB (DB_JOBS, (_(\"BUILTIN [%s][%s]\\n\"), cmd, cmd+8));\n\n      p = cmd + 8;\n\n      if ((*(p) == 'c')\n\t  && (*(p+1) == 'd')\n\t  && ((*(p+2) == ' ') || (*(p+2) == '\\t')))\n\t{\n\t  p += 3;\n\t  while ((*p == ' ') || (*p == '\\t'))\n\t    p++;\n\t  DB (DB_JOBS, (_(\"BUILTIN CD %s\\n\"), p));\n\t  if (chdir (p))\n\t    return 0;\n\t  else\n\t    return 1;\n\t}\n      else if ((*(p) == 'r')\n\t  && (*(p+1) == 'm')\n\t  && ((*(p+2) == ' ') || (*(p+2) == '\\t')))\n\t{\n\t  int in_arg;\n\n\t  /* rm  */\n\t  p += 3;\n\t  while ((*p == ' ') || (*p == '\\t'))\n\t    p++;\n\t  in_arg = 1;\n\n\t  DB (DB_JOBS, (_(\"BUILTIN RM %s\\n\"), p));\n\t  while (*p)\n\t    {\n\t      switch (*p)\n\t\t{\n\t\t  case ' ':\n\t\t  case '\\t':\n\t\t    if (in_arg)\n\t\t      {\n\t\t\t*p++ = ';';\n\t\t\tin_arg = 0;\n\t\t      }\n\t\t    break;\n\t\t  default:\n\t\t    break;\n\t\t}\n\t      p++;\n\t    }\n\t}\n      else\n\t{\n\t  printf(_(\"Unknown builtin command '%s'\\n\"), cmd);\n\t  fflush(stdout);\n\t  return 0;\n\t}\n    }\n\n  /* Create a *.com file if either the command is too long for\n     lib$spawn, or the command contains a newline, or if redirection\n     is desired. Forcing commands with newlines into DCLs allows to\n     store search lists on user mode logicals.  */\n\n  if (strlen (cmd) > MAXCMDLEN\n      || (have_redirection != 0)\n      || (have_newline != 0))\n    {\n      FILE *outfile;\n      char c;\n      char *sep;\n      int alevel = 0;\t/* apostrophe level */\n\n      if (strlen (cmd) == 0)\n\t{\n\t  printf (_(\"Error, empty command\\n\"));\n\t  fflush (stdout);\n\t  return 0;\n\t}\n\n      outfile = open_tmpfile (&comname, \"sys$scratch:CMDXXXXXX.COM\");\n      if (outfile == 0)\n\tpfatal_with_name (_(\"fopen (temporary file)\"));\n\n      if (ifile[0])\n\t{\n\t  fprintf (outfile, \"$ assign/user %s sys$input\\n\", ifile);\n          DB (DB_JOBS, (_(\"Redirected input from %s\\n\"), ifile));\n\t  ifiledsc.dsc$w_length = 0;\n\t}\n\n      if (efile[0])\n\t{\n\t  fprintf (outfile, \"$ define sys$error %s\\n\", efile);\n          DB (DB_JOBS, (_(\"Redirected error to %s\\n\"), efile));\n\t  efiledsc.dsc$w_length = 0;\n\t}\n\n      if (ofile[0])\n\t{\n\t  fprintf (outfile, \"$ define sys$output %s\\n\", ofile);\n\t  DB (DB_JOBS, (_(\"Redirected output to %s\\n\"), ofile));\n\t  ofiledsc.dsc$w_length = 0;\n\t}\n\n      p = sep = q = cmd;\n      for (c = '\\n'; c; c = *q++)\n\t{\n\t  switch (c)\n\t    {\n            case '\\n':\n              /* At a newline, skip any whitespace around a leading $\n                 from the command and issue exactly one $ into the DCL. */\n              while (isspace ((unsigned char)*p))\n                p++;\n              if (*p == '$')\n                p++;\n              while (isspace ((unsigned char)*p))\n                p++;\n              fwrite (p, 1, q - p, outfile);\n              fputc ('$', outfile);\n              fputc (' ', outfile);\n              /* Reset variables. */\n              p = sep = q;\n              break;\n\n\t      /* Nice places for line breaks are after strings, after\n\t\t comma or space and before slash. */\n            case '\"':\n              q = vms_handle_apos (q);\n              sep = q;\n              break;\n            case ',':\n            case ' ':\n              sep = q;\n              break;\n            case '/':\n            case '\\0':\n              sep = q - 1;\n              break;\n            default:\n              break;\n\t    }\n\t  if (sep - p > 78)\n\t    {\n\t      /* Enough stuff for a line. */\n\t      fwrite (p, 1, sep - p, outfile);\n\t      p = sep;\n\t      if (*sep)\n\t\t{\n\t\t  /* The command continues.  */\n\t\t  fputc ('-', outfile);\n\t\t}\n\t      fputc ('\\n', outfile);\n\t    }\n  \t}\n\n      fwrite (p, 1, q - p, outfile);\n      fputc ('\\n', outfile);\n\n      fclose (outfile);\n\n      sprintf (cmd, \"$ @%s\", comname);\n\n      DB (DB_JOBS, (_(\"Executing %s instead\\n\"), cmd));\n    }\n\n  cmddsc.dsc$w_length = strlen(cmd);\n  cmddsc.dsc$a_pointer = cmd;\n  cmddsc.dsc$b_dtype = DSC$K_DTYPE_T;\n  cmddsc.dsc$b_class = DSC$K_CLASS_S;\n\n  child->efn = 0;\n  while (child->efn < 32 || child->efn > 63)\n    {\n      status = lib$get_ef ((unsigned long *)&child->efn);\n      if (!(status & 1))\n\treturn 0;\n    }\n\n  sys$clref (child->efn);\n\n  vms_jobsefnmask |= (1 << (child->efn - 32));\n\n/*\n             LIB$SPAWN  [command-string]\n\t\t\t[,input-file]\n\t\t\t[,output-file]\n\t\t\t[,flags]\n\t\t\t[,process-name]\n\t\t\t[,process-id] [,completion-status-address] [,byte-integer-event-flag-num]\n\t\t\t[,AST-address] [,varying-AST-argument]\n\t\t\t[,prompt-string] [,cli] [,table]\n*/\n\n#ifndef DONTWAITFORCHILD\n/*\n *\tCode to make ctrl+c and ctrl+y working.\n *\tThe problem starts with the synchronous case where after lib$spawn is\n *\tcalled any input will go to the child. But with input re-directed,\n *\tboth control characters won't make it to any of the programs, neither\n *\tthe spawning nor to the spawned one. Hence the caller needs to spawn\n *\twith CLI$M_NOWAIT to NOT give up the input focus. A sys$waitfr\n *\thas to follow to simulate the wanted synchronous behaviour.\n *\tThe next problem is ctrl+y which isn't caught by the crtl and\n *\ttherefore isn't converted to SIGQUIT (for a signal handler which is\n *\talready established). The only way to catch ctrl+y, is an AST\n *\tassigned to the input channel. But ctrl+y handling of DCL needs to be\n *\tdisabled, otherwise it will handle it. Not to mention the previous\n *\tctrl+y handling of DCL needs to be re-established before make exits.\n *\tOne more: At the time of LIB$SPAWN signals are blocked. SIGQUIT will\n *\tmake it to the signal handler after the child \"normally\" terminates.\n *\tThis isn't enough. It seems reasonable for simple command lines like\n *\ta 'cc foobar.c' spawned in a subprocess but it is unacceptable for\n *\tspawning make. Therefore we need to abort the process in the AST.\n *\n *\tPrior to the spawn it is checked if an AST is already set up for\n *\tctrl+y, if not one is set up for a channel to SYS$COMMAND. In general\n *\tthis will work except if make is run in a batch environment, but there\n *\tnobody can press ctrl+y. During the setup the DCL handling of ctrl+y\n *\tis disabled and an exit handler is established to re-enable it.\n *\tIf the user interrupts with ctrl+y, the assigned AST will fire, force\n *\tan abort to the subprocess and signal SIGQUIT, which will be caught by\n *\tthe already established handler and will bring us back to common code.\n *\tAfter the spawn (now /nowait) a sys$waitfr simulates the /wait and\n *\tenables the ctrl+y be delivered to this code. And the ctrl+c too,\n *\twhich the crtl converts to SIGINT and which is caught by the common\n *\tsignal handler. Because signals were blocked before entering this code\n *\tsys$waitfr will always complete and the SIGQUIT will be processed after\n *\tit (after termination of the current block, somewhere in common code).\n *\tAnd SIGINT too will be delayed. That is ctrl+c can only abort when the\n *\tcurrent command completes. Anyway it's better than nothing :-)\n */\n\n  if (!setupYAstTried)\n    tryToSetupYAst();\n  status = lib$spawn (&cmddsc,\t\t\t\t\t/* cmd-string  */\n\t\t      (ifiledsc.dsc$w_length == 0)?0:&ifiledsc, /* input-file  */\n\t\t      (ofiledsc.dsc$w_length == 0)?0:&ofiledsc, /* output-file */\n\t\t      &spflags,\t\t\t\t\t/* flags  */\n\t\t      &pnamedsc,\t\t\t\t/* proc name  */\n\t\t      &child->pid, &child->cstatus, &child->efn,\n\t\t      0, 0,\n\t\t      0, 0, 0);\n  if (status & 1)\n    {\n      pidToAbort= child->pid;\n      status= sys$waitfr (child->efn);\n      pidToAbort= 0;\n      vmsHandleChildTerm(child);\n    }\n#else\n  status = lib$spawn (&cmddsc,\n\t\t      (ifiledsc.dsc$w_length == 0)?0:&ifiledsc,\n\t\t      (ofiledsc.dsc$w_length == 0)?0:&ofiledsc,\n\t\t      &spflags,\n\t\t      &pnamedsc,\n\t\t      &child->pid, &child->cstatus, &child->efn,\n\t\t      vmsHandleChildTerm, child,\n\t\t      0, 0, 0);\n#endif\n\n  if (!(status & 1))\n    {\n      printf (_(\"Error spawning, %d\\n\") ,status);\n      fflush (stdout);\n      switch (status)\n        {\n        case 0x1c:\n          errno = EPROCLIM;\n          break;\n        default:\n          errno = EFAIL;\n        }\n    }\n\n  if (comname && !ISDB (DB_JOBS))\n    unlink (comname);\n\n  return (status & 1);\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/vpath.c",
    "content": "/* Implementation of pattern-matching file search paths for GNU Make.\nCopyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,\n1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software\nFoundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include \"make.h\"\n#include \"filedef.h\"\n#include \"variable.h\"\n#ifdef WINDOWS32\n#include \"pathstuff.h\"\n#endif\n\n\n/* Structure used to represent a selective VPATH searchpath.  */\n\nstruct vpath\n  {\n    struct vpath *next;\t/* Pointer to next struct in the linked list.  */\n    char *pattern;\t/* The pattern to match.  */\n    char *percent;\t/* Pointer into `pattern' where the `%' is.  */\n    unsigned int patlen;/* Length of the pattern.  */\n    char **searchpath;\t/* Null-terminated list of directories.  */\n    unsigned int maxlen;/* Maximum length of any entry in the list.  */\n  };\n\n/* Linked-list of all selective VPATHs.  */\n\nstatic struct vpath *vpaths;\n\n/* Structure for the general VPATH given in the variable.  */\n\nstatic struct vpath *general_vpath;\n\n/* Structure for GPATH given in the variable.  */\n\nstatic struct vpath *gpaths;\n\f\nstatic int selective_vpath_search PARAMS ((struct vpath *path, char **file, FILE_TIMESTAMP *mtime_ptr));\n\n/* Reverse the chain of selective VPATH lists so they\n   will be searched in the order given in the makefiles\n   and construct the list from the VPATH variable.  */\n\nvoid\nbuild_vpath_lists ()\n{\n  register struct vpath *new = 0;\n  register struct vpath *old, *nexto;\n  register char *p;\n\n  /* Reverse the chain.  */\n  for (old = vpaths; old != 0; old = nexto)\n    {\n      nexto = old->next;\n      old->next = new;\n      new = old;\n    }\n\n  vpaths = new;\n\n  /* If there is a VPATH variable with a nonnull value, construct the\n     general VPATH list from it.  We use variable_expand rather than just\n     calling lookup_variable so that it will be recursively expanded.  */\n\n  {\n    /* Turn off --warn-undefined-variables while we expand SHELL and IFS.  */\n    int save = warn_undefined_variables_flag;\n    warn_undefined_variables_flag = 0;\n\n    p = variable_expand (\"$(strip $(VPATH))\");\n\n    warn_undefined_variables_flag = save;\n  }\n\n  if (*p != '\\0')\n    {\n      /* Save the list of vpaths.  */\n      struct vpath *save_vpaths = vpaths;\n\n      /* Empty `vpaths' so the new one will have no next, and `vpaths'\n\t will still be nil if P contains no existing directories.  */\n      vpaths = 0;\n\n      /* Parse P.  */\n      construct_vpath_list (\"%\", p);\n\n      /* Store the created path as the general path,\n\t and restore the old list of vpaths.  */\n      general_vpath = vpaths;\n      vpaths = save_vpaths;\n    }\n\n  /* If there is a GPATH variable with a nonnull value, construct the\n     GPATH list from it.  We use variable_expand rather than just\n     calling lookup_variable so that it will be recursively expanded.  */\n\n  {\n    /* Turn off --warn-undefined-variables while we expand SHELL and IFS.  */\n    int save = warn_undefined_variables_flag;\n    warn_undefined_variables_flag = 0;\n\n    p = variable_expand (\"$(strip $(GPATH))\");\n\n    warn_undefined_variables_flag = save;\n  }\n\n  if (*p != '\\0')\n    {\n      /* Save the list of vpaths.  */\n      struct vpath *save_vpaths = vpaths;\n\n      /* Empty `vpaths' so the new one will have no next, and `vpaths'\n\t will still be nil if P contains no existing directories.  */\n      vpaths = 0;\n\n      /* Parse P.  */\n      construct_vpath_list (\"%\", p);\n\n      /* Store the created path as the GPATH,\n\t and restore the old list of vpaths.  */\n      gpaths = vpaths;\n      vpaths = save_vpaths;\n    }\n}\n\f\n/* Construct the VPATH listing for the pattern and searchpath given.\n\n   This function is called to generate selective VPATH lists and also for\n   the general VPATH list (which is in fact just a selective VPATH that\n   is applied to everything).  The returned pointer is either put in the\n   linked list of all selective VPATH lists or in the GENERAL_VPATH\n   variable.\n\n   If SEARCHPATH is nil, remove all previous listings with the same\n   pattern.  If PATTERN is nil, remove all VPATH listings.  Existing\n   and readable directories that are not \".\" given in the searchpath\n   separated by the path element separator (defined in make.h) are\n   loaded into the directory hash table if they are not there already\n   and put in the VPATH searchpath for the given pattern with trailing\n   slashes stripped off if present (and if the directory is not the\n   root, \"/\").  The length of the longest entry in the list is put in\n   the structure as well.  The new entry will be at the head of the\n   VPATHS chain.  */\n\nvoid\nconstruct_vpath_list (char *pattern, char *dirpath)\n{\n  register unsigned int elem;\n  register char *p;\n  register char **vpath;\n  register unsigned int maxvpath;\n  unsigned int maxelem;\n  char *percent = NULL;\n\n  if (pattern != 0)\n    {\n      pattern = xstrdup (pattern);\n      percent = find_percent (pattern);\n    }\n\n  if (dirpath == 0)\n    {\n      /* Remove matching listings.  */\n      register struct vpath *path, *lastpath;\n\n      lastpath = 0;\n      path = vpaths;\n      while (path != 0)\n\t{\n\t  struct vpath *next = path->next;\n\n\t  if (pattern == 0\n\t      || (((percent == 0 && path->percent == 0)\n\t\t   || (percent - pattern == path->percent - path->pattern))\n\t\t  && streq (pattern, path->pattern)))\n\t    {\n\t      /* Remove it from the linked list.  */\n\t      if (lastpath == 0)\n\t\tvpaths = path->next;\n\t      else\n\t\tlastpath->next = next;\n\n\t      /* Free its unused storage.  */\n\t      free (path->pattern);\n\t      free ((char *) path->searchpath);\n\t      free ((char *) path);\n\t    }\n\t  else\n\t    lastpath = path;\n\n\t  path = next;\n\t}\n\n      if (pattern != 0)\n\tfree (pattern);\n      return;\n    }\n\n#ifdef WINDOWS32\n    convert_vpath_to_windows32(dirpath, ';');\n#endif\n\n  /* Figure out the maximum number of VPATH entries and put it in\n     MAXELEM.  We start with 2, one before the first separator and one\n     nil (the list terminator) and increment our estimated number for\n     each separator or blank we find.  */\n  maxelem = 2;\n  p = dirpath;\n  while (*p != '\\0')\n    if (*p++ == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p))\n      ++maxelem;\n\n  vpath = (char **) xmalloc (maxelem * sizeof (char *));\n  maxvpath = 0;\n\n  /* Skip over any initial separators and blanks.  */\n  p = dirpath;\n  while (*p == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p))\n    ++p;\n\n  elem = 0;\n  while (*p != '\\0')\n    {\n      char *v;\n      unsigned int len;\n\n      /* Find the end of this entry.  */\n      v = p;\n      while (*p != '\\0' && *p != PATH_SEPARATOR_CHAR\n\t     && !isblank ((unsigned char)*p))\n\t++p;\n\n      len = p - v;\n      /* Make sure there's no trailing slash,\n\t but still allow \"/\" as a directory.  */\n#if defined(__MSDOS__) || defined(__EMX__)\n      /* We need also to leave alone a trailing slash in \"d:/\".  */\n      if (len > 3 || (len > 1 && v[1] != ':'))\n#endif\n      if (len > 1 && p[-1] == '/')\n\t--len;\n\n      if (len > 1 || *v != '.')\n\t{\n\t  v = savestring (v, len);\n\n\t  /* Verify that the directory actually exists.  */\n\n\t  if (dir_file_exists_p (v, \"\"))\n\t    {\n\t      /* It does.  Put it in the list.  */\n\t      vpath[elem++] = dir_name (v);\n\t      free (v);\n\t      if (len > maxvpath)\n\t\tmaxvpath = len;\n\t    }\n\t  else\n\t    /* The directory does not exist.  Omit from the list.  */\n\t    free (v);\n\t}\n\n      /* Skip over separators and blanks between entries.  */\n      while (*p == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p))\n\t++p;\n    }\n\n  if (elem > 0)\n    {\n      struct vpath *path;\n      /* ELEM is now incremented one element past the last\n\t entry, to where the nil-pointer terminator goes.\n\t Usually this is maxelem - 1.  If not, shrink down.  */\n      if (elem < (maxelem - 1))\n\tvpath = (char **) xrealloc ((char *) vpath,\n\t\t\t\t    (elem + 1) * sizeof (char *));\n\n      /* Put the nil-pointer terminator on the end of the VPATH list.  */\n      vpath[elem] = 0;\n\n      /* Construct the vpath structure and put it into the linked list.  */\n      path = (struct vpath *) xmalloc (sizeof (struct vpath));\n      path->searchpath = vpath;\n      path->maxlen = maxvpath;\n      path->next = vpaths;\n      vpaths = path;\n\n      /* Set up the members.  */\n      path->pattern = pattern;\n      path->percent = percent;\n      path->patlen = strlen (pattern);\n    }\n  else\n    {\n      /* There were no entries, so free whatever space we allocated.  */\n      free ((char *) vpath);\n      if (pattern != 0)\n\tfree (pattern);\n    }\n}\n\f\n/* Search the GPATH list for a pathname string that matches the one passed\n   in.  If it is found, return 1.  Otherwise we return 0.  */\n\nint\ngpath_search (char *file, unsigned int len)\n{\n  char **gp;\n\n  if (gpaths && (len <= gpaths->maxlen))\n    for (gp = gpaths->searchpath; *gp != NULL; ++gp)\n      if (strneq (*gp, file, len) && (*gp)[len] == '\\0')\n        return 1;\n\n  return 0;\n}\n\f\n/* Search the VPATH list whose pattern matches *FILE for a directory\n   where the name pointed to by FILE exists.  If it is found, we set *FILE to\n   the newly malloc'd name of the existing file, *MTIME_PTR (if MTIME_PTR is\n   not NULL) to its modtime (or zero if no stat call was done), and return 1.\n   Otherwise we return 0.  */\n\nint\nvpath_search (char **file, FILE_TIMESTAMP *mtime_ptr)\n{\n  register struct vpath *v;\n\n  /* If there are no VPATH entries or FILENAME starts at the root,\n     there is nothing we can do.  */\n\n  if (**file == '/'\n#ifdef HAVE_DOS_PATHS\n      || **file == '\\\\'\n      || (*file)[1] == ':'\n#endif\n      || (vpaths == 0 && general_vpath == 0))\n    return 0;\n\n  for (v = vpaths; v != 0; v = v->next)\n    if (pattern_matches (v->pattern, v->percent, *file))\n      if (selective_vpath_search (v, file, mtime_ptr))\n\treturn 1;\n\n  if (general_vpath != 0\n      && selective_vpath_search (general_vpath, file, mtime_ptr))\n    return 1;\n\n  return 0;\n}\n\n\n/* Search the given VPATH list for a directory where the name pointed\n   to by FILE exists.  If it is found, we set *FILE to the newly malloc'd\n   name of the existing file, *MTIME_PTR (if MTIME_PTR is not NULL) to\n   its modtime (or zero if no stat call was done), and we return 1.\n   Otherwise we return 0.  */\n\nstatic int\nselective_vpath_search (struct vpath *path, char **file,\n                        FILE_TIMESTAMP *mtime_ptr)\n{\n  int not_target;\n  char *name, *n;\n  char *filename;\n  register char **vpath = path->searchpath;\n  unsigned int maxvpath = path->maxlen;\n  register unsigned int i;\n  unsigned int flen, vlen, name_dplen;\n  int exists = 0;\n\n  /* Find out if *FILE is a target.\n     If and only if it is NOT a target, we will accept prospective\n     files that don't exist but are mentioned in a makefile.  */\n  {\n    struct file *f = lookup_file (*file);\n    not_target = f == 0 || !f->is_target;\n  }\n\n  flen = strlen (*file);\n\n  /* Split *FILE into a directory prefix and a name-within-directory.\n     NAME_DPLEN gets the length of the prefix; FILENAME gets the\n     pointer to the name-within-directory and FLEN is its length.  */\n\n  n = strrchr (*file, '/');\n#ifdef HAVE_DOS_PATHS\n  /* We need the rightmost slash or backslash.  */\n  {\n    char *bslash = strrchr(*file, '\\\\');\n    if (!n || bslash > n)\n      n = bslash;\n  }\n#endif\n  name_dplen = n != 0 ? n - *file : 0;\n  filename = name_dplen > 0 ? n + 1 : *file;\n  if (name_dplen > 0)\n    flen -= name_dplen + 1;\n\n  /* Allocate enough space for the biggest VPATH entry,\n     a slash, the directory prefix that came with *FILE,\n     another slash (although this one may not always be\n     necessary), the filename, and a null terminator.  */\n  name = (char *) xmalloc (maxvpath + 1 + name_dplen + 1 + flen + 1);\n\n  /* Try each VPATH entry.  */\n  for (i = 0; vpath[i] != 0; ++i)\n    {\n      int exists_in_cache = 0;\n\n      n = name;\n\n      /* Put the next VPATH entry into NAME at N and increment N past it.  */\n      vlen = strlen (vpath[i]);\n      bcopy (vpath[i], n, vlen);\n      n += vlen;\n\n      /* Add the directory prefix already in *FILE.  */\n      if (name_dplen > 0)\n\t{\n#ifndef VMS\n\t  *n++ = '/';\n#endif\n\t  bcopy (*file, n, name_dplen);\n\t  n += name_dplen;\n\t}\n\n#ifdef HAVE_DOS_PATHS\n      /* Cause the next if to treat backslash and slash alike.  */\n      if (n != name && n[-1] == '\\\\' )\n\tn[-1] = '/';\n#endif\n      /* Now add the name-within-directory at the end of NAME.  */\n#ifndef VMS\n      if (n != name && n[-1] != '/')\n\t{\n\t  *n = '/';\n\t  bcopy (filename, n + 1, flen + 1);\n\t}\n      else\n#endif\n\tbcopy (filename, n, flen + 1);\n\n      /* Check if the file is mentioned in a makefile.  If *FILE is not\n\t a target, that is enough for us to decide this file exists.\n\t If *FILE is a target, then the file must be mentioned in the\n\t makefile also as a target to be chosen.\n\n\t The restriction that *FILE must not be a target for a\n\t makefile-mentioned file to be chosen was added by an\n\t inadequately commented change in July 1990; I am not sure off\n\t hand what problem it fixes.\n\n\t In December 1993 I loosened this restriction to allow a file\n\t to be chosen if it is mentioned as a target in a makefile.  This\n\t seem logical.\n\n         Special handling for -W / -o: make sure we preserve the special\n         values here.  Actually this whole thing is a little bogus: I think\n         we should ditch the name/hname thing and look into the renamed\n         capability that already exists for files: that is, have a new struct\n         file* entry for the VPATH-found file, and set the renamed field if\n         we use it.\n      */\n      {\n\tstruct file *f = lookup_file (name);\n\tif (f != 0)\n          {\n            exists = not_target || f->is_target;\n            if (exists && mtime_ptr\n                && (f->last_mtime == OLD_MTIME || f->last_mtime == NEW_MTIME))\n              {\n                *mtime_ptr = f->last_mtime;\n                mtime_ptr = 0;\n              }\n          }\n      }\n\n      if (!exists)\n\t{\n\t  /* That file wasn't mentioned in the makefile.\n\t     See if it actually exists.  */\n\n#ifdef VMS\n\t  exists_in_cache = exists = dir_file_exists_p (vpath[i], filename);\n#else\n\t  /* Clobber a null into the name at the last slash.\n\t     Now NAME is the name of the directory to look in.  */\n\t  *n = '\\0';\n\n\t  /* We know the directory is in the hash table now because either\n\t     construct_vpath_list or the code just above put it there.\n\t     Does the file we seek exist in it?  */\n\t  exists_in_cache = exists = dir_file_exists_p (name, filename);\n#endif\n\t}\n\n      if (exists)\n\t{\n\t  /* The file is in the directory cache.\n\t     Now check that it actually exists in the filesystem.\n\t     The cache may be out of date.  When vpath thinks a file\n\t     exists, but stat fails for it, confusion results in the\n\t     higher levels.  */\n\n\t  struct stat st;\n\n#ifndef VMS\n\t  /* Put the slash back in NAME.  */\n\t  *n = '/';\n#endif\n\n\t  if (exists_in_cache)\t/* Makefile-mentioned file need not exist.  */\n\t    {\n              int e;\n\n              EINTRLOOP (e, stat (name, &st)); /* Does it really exist?  */\n              if (e != 0)\n                {\n                  exists = 0;\n                  continue;\n                }\n\n              /* Store the modtime into *MTIME_PTR for the caller.  */\n              if (mtime_ptr != 0)\n                {\n                  *mtime_ptr = FILE_TIMESTAMP_STAT_MODTIME (name, st);\n                  mtime_ptr = 0;\n                }\n            }\n\n          /* We have found a file.\n             Store the name we found into *FILE for the caller.  */\n\n          *file = savestring (name, (n + 1 - name) + flen);\n\n          /* If we get here and mtime_ptr hasn't been set, record\n             UNKNOWN_MTIME to indicate this.  */\n          if (mtime_ptr != 0)\n            *mtime_ptr = UNKNOWN_MTIME;\n\n          free (name);\n          return 1;\n\t}\n    }\n\n  free (name);\n  return 0;\n}\n\f\n/* Print the data base of VPATH search paths.  */\n\nvoid\nprint_vpath_data_base (void)\n{\n  register unsigned int nvpaths;\n  register struct vpath *v;\n\n  puts (_(\"\\n# VPATH Search Paths\\n\"));\n\n  nvpaths = 0;\n  for (v = vpaths; v != 0; v = v->next)\n    {\n      register unsigned int i;\n\n      ++nvpaths;\n\n      printf (\"vpath %s \", v->pattern);\n\n      for (i = 0; v->searchpath[i] != 0; ++i)\n\tprintf (\"%s%c\", v->searchpath[i],\n\t\tv->searchpath[i + 1] == 0 ? '\\n' : PATH_SEPARATOR_CHAR);\n    }\n\n  if (vpaths == 0)\n    puts (_(\"# No `vpath' search paths.\"));\n  else\n    printf (_(\"\\n# %u `vpath' search paths.\\n\"), nvpaths);\n\n  if (general_vpath == 0)\n    puts (_(\"\\n# No general (`VPATH' variable) search path.\"));\n  else\n    {\n      register char **path = general_vpath->searchpath;\n      register unsigned int i;\n\n      fputs (_(\"\\n# General (`VPATH' variable) search path:\\n# \"), stdout);\n\n      for (i = 0; path[i] != 0; ++i)\n\tprintf (\"%s%c\", path[i],\n\t\tpath[i + 1] == 0 ? '\\n' : PATH_SEPARATOR_CHAR);\n    }\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/.deps/libw32_a-misc.Po",
    "content": "# dummy\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/.deps/libw32_a-pathstuff.Po",
    "content": "# dummy\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/.deps/libw32_a-sub_proc.Po",
    "content": "# dummy\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/.deps/libw32_a-w32err.Po",
    "content": "# dummy\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/Makefile",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# w32/Makefile.  Generated from Makefile.in by configure.\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n\n\n# Makefile.am to create libw32.a for mingw32 host.\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\n# Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nsrcdir = .\ntop_srcdir = ..\n\npkgdatadir = $(datadir)/make\npkglibdir = $(libdir)/make\npkgincludedir = $(includedir)/make\ntop_builddir = ..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = /usr/bin/install -c\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = i686-pc-linux-gnu\nhost_triplet = i686-pc-linux-gnu\nsubdir = w32\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nLIBRARIES = $(noinst_LIBRARIES)\nARFLAGS = cru\nlibw32_a_AR = $(AR) $(ARFLAGS)\nlibw32_a_LIBADD =\nam_libw32_a_OBJECTS = libw32_a-misc.$(OBJEXT) \\\n\tlibw32_a-sub_proc.$(OBJEXT) libw32_a-w32err.$(OBJEXT) \\\n\tlibw32_a-pathstuff.$(OBJEXT)\nlibw32_a_OBJECTS = $(am_libw32_a_OBJECTS)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(libw32_a_SOURCES)\nDIST_SOURCES = $(libw32_a_SOURCES)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = ${SHELL} /opt/src/make/make-release/config/missing --run aclocal-1.9\nALLOCA = \nAMDEP_FALSE = #\nAMDEP_TRUE = \nAMTAR = ${SHELL} /opt/src/make/make-release/config/missing --run tar\nAR = ar\nAUTOCONF = ${SHELL} /opt/src/make/make-release/config/missing --run autoconf\nAUTOHEADER = ${SHELL} /opt/src/make/make-release/config/missing --run autoheader\nAUTOMAKE = ${SHELL} /opt/src/make/make-release/config/missing --run automake-1.9\nAWK = gawk\nCC = gcc\nCCDEPMODE = depmode=gcc3\nCFLAGS = -g -O2\nCPP = gcc -E\nCPPFLAGS = \nCYGPATH_W = echo\nDEFS = -DHAVE_CONFIG_H\nDEPDIR = .deps\nECHO_C = \nECHO_N = -n\nECHO_T = \nEGREP = grep -E\nEXEEXT = \nGETLOADAVG_LIBS = \nGLOBINC = \nGLOBLIB = \nGMSGFMT = /usr/bin/msgfmt\nINSTALL_DATA = ${INSTALL} -m 644\nINSTALL_PROGRAM = ${INSTALL}\nINSTALL_SCRIPT = ${INSTALL}\nINSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s\nINTLLIBS = \nKMEM_GROUP = \nLDFLAGS = \nLIBICONV = -liconv\nLIBINTL = \nLIBOBJS = \nLIBS = -lrt \nLTLIBICONV = -liconv\nLTLIBINTL = \nLTLIBOBJS = \nMAKEINFO = ${SHELL} /opt/src/make/make-release/config/missing --run makeinfo\nMAKE_HOST = i686-pc-linux-gnu\nMKINSTALLDIRS = $(top_builddir)/config/mkinstalldirs\nMSGFMT = /usr/bin/msgfmt\nMSGMERGE = /usr/bin/msgmerge\nNEED_SETGID = false\nOBJEXT = o\nPACKAGE = make\nPACKAGE_BUGREPORT = bug-make@gnu.org\nPACKAGE_NAME = GNU make\nPACKAGE_STRING = GNU make 3.81\nPACKAGE_TARNAME = make\nPACKAGE_VERSION = 3.81\nPATH_SEPARATOR = :\nPERL = perl\nPOSUB = po\nRANLIB = ranlib\nREMOTE = stub\nSET_MAKE = \nSHELL = /bin/sh\nSTRIP = \nU = \nUSE_CUSTOMS_FALSE = \nUSE_CUSTOMS_TRUE = #\nUSE_LOCAL_GLOB_FALSE = \nUSE_LOCAL_GLOB_TRUE = #\nUSE_NLS = yes\nVERSION = 3.81\nWINDOWSENV_FALSE = \nWINDOWSENV_TRUE = #\nXGETTEXT = /usr/bin/xgettext\nac_ct_CC = gcc\nac_ct_RANLIB = ranlib\nac_ct_STRIP = \nam__fastdepCC_FALSE = #\nam__fastdepCC_TRUE = \nam__include = include\nam__leading_dot = .\nam__quote = \nam__tar = ${AMTAR} chof - \"$$tardir\"\nam__untar = ${AMTAR} xf -\nbindir = ${exec_prefix}/bin\nbuild = i686-pc-linux-gnu\nbuild_alias = \nbuild_cpu = i686\nbuild_os = linux-gnu\nbuild_vendor = pc\ndatadir = ${prefix}/share\nexec_prefix = ${prefix}\nhost = i686-pc-linux-gnu\nhost_alias = \nhost_cpu = i686\nhost_os = linux-gnu\nhost_vendor = pc\nincludedir = ${prefix}/include\ninfodir = ${prefix}/info\ninstall_sh = /opt/src/make/make-release/config/install-sh\nlibdir = ${exec_prefix}/lib\nlibexecdir = ${exec_prefix}/libexec\nlocalstatedir = ${prefix}/var\nmandir = ${prefix}/man\nmkdir_p = mkdir -p --\noldincludedir = /usr/include\nprefix = /usr/local\nprogram_transform_name = s,x,x,\nsbindir = ${exec_prefix}/sbin\nsharedstatedir = ${prefix}/com\nsysconfdir = ${prefix}/etc\ntarget_alias = \nnoinst_LIBRARIES = libw32.a\nlibw32_a_SOURCES = subproc/misc.c subproc/sub_proc.c subproc/w32err.c \\\n\t\t    pathstuff.c\n\nlibw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .o .obj\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  w32/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  w32/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\nclean-noinstLIBRARIES:\n\t-test -z \"$(noinst_LIBRARIES)\" || rm -f $(noinst_LIBRARIES)\nlibw32.a: $(libw32_a_OBJECTS) $(libw32_a_DEPENDENCIES) \n\t-rm -f libw32.a\n\t$(libw32_a_AR) libw32.a $(libw32_a_OBJECTS) $(libw32_a_LIBADD)\n\t$(RANLIB) libw32.a\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\ninclude ./$(DEPDIR)/libw32_a-misc.Po\ninclude ./$(DEPDIR)/libw32_a-pathstuff.Po\ninclude ./$(DEPDIR)/libw32_a-sub_proc.Po\ninclude ./$(DEPDIR)/libw32_a-w32err.Po\n\n.c.o:\n\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n#\tsource='$<' object='$@' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(COMPILE) -c $<\n\n.c.obj:\n\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n#\tsource='$<' object='$@' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\n\nlibw32_a-misc.o: subproc/misc.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-misc.o -MD -MP -MF \"$(DEPDIR)/libw32_a-misc.Tpo\" -c -o libw32_a-misc.o `test -f 'subproc/misc.c' || echo '$(srcdir)/'`subproc/misc.c; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-misc.Tpo\" \"$(DEPDIR)/libw32_a-misc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-misc.Tpo\"; exit 1; fi\n#\tsource='subproc/misc.c' object='libw32_a-misc.o' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-misc.o `test -f 'subproc/misc.c' || echo '$(srcdir)/'`subproc/misc.c\n\nlibw32_a-misc.obj: subproc/misc.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-misc.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-misc.Tpo\" -c -o libw32_a-misc.obj `if test -f 'subproc/misc.c'; then $(CYGPATH_W) 'subproc/misc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/misc.c'; fi`; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-misc.Tpo\" \"$(DEPDIR)/libw32_a-misc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-misc.Tpo\"; exit 1; fi\n#\tsource='subproc/misc.c' object='libw32_a-misc.obj' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-misc.obj `if test -f 'subproc/misc.c'; then $(CYGPATH_W) 'subproc/misc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/misc.c'; fi`\n\nlibw32_a-sub_proc.o: subproc/sub_proc.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-sub_proc.o -MD -MP -MF \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" -c -o libw32_a-sub_proc.o `test -f 'subproc/sub_proc.c' || echo '$(srcdir)/'`subproc/sub_proc.c; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" \"$(DEPDIR)/libw32_a-sub_proc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\"; exit 1; fi\n#\tsource='subproc/sub_proc.c' object='libw32_a-sub_proc.o' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-sub_proc.o `test -f 'subproc/sub_proc.c' || echo '$(srcdir)/'`subproc/sub_proc.c\n\nlibw32_a-sub_proc.obj: subproc/sub_proc.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-sub_proc.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" -c -o libw32_a-sub_proc.obj `if test -f 'subproc/sub_proc.c'; then $(CYGPATH_W) 'subproc/sub_proc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/sub_proc.c'; fi`; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" \"$(DEPDIR)/libw32_a-sub_proc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\"; exit 1; fi\n#\tsource='subproc/sub_proc.c' object='libw32_a-sub_proc.obj' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-sub_proc.obj `if test -f 'subproc/sub_proc.c'; then $(CYGPATH_W) 'subproc/sub_proc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/sub_proc.c'; fi`\n\nlibw32_a-w32err.o: subproc/w32err.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32err.o -MD -MP -MF \"$(DEPDIR)/libw32_a-w32err.Tpo\" -c -o libw32_a-w32err.o `test -f 'subproc/w32err.c' || echo '$(srcdir)/'`subproc/w32err.c; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-w32err.Tpo\" \"$(DEPDIR)/libw32_a-w32err.Po\"; else rm -f \"$(DEPDIR)/libw32_a-w32err.Tpo\"; exit 1; fi\n#\tsource='subproc/w32err.c' object='libw32_a-w32err.o' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32err.o `test -f 'subproc/w32err.c' || echo '$(srcdir)/'`subproc/w32err.c\n\nlibw32_a-w32err.obj: subproc/w32err.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32err.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-w32err.Tpo\" -c -o libw32_a-w32err.obj `if test -f 'subproc/w32err.c'; then $(CYGPATH_W) 'subproc/w32err.c'; else $(CYGPATH_W) '$(srcdir)/subproc/w32err.c'; fi`; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-w32err.Tpo\" \"$(DEPDIR)/libw32_a-w32err.Po\"; else rm -f \"$(DEPDIR)/libw32_a-w32err.Tpo\"; exit 1; fi\n#\tsource='subproc/w32err.c' object='libw32_a-w32err.obj' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32err.obj `if test -f 'subproc/w32err.c'; then $(CYGPATH_W) 'subproc/w32err.c'; else $(CYGPATH_W) '$(srcdir)/subproc/w32err.c'; fi`\n\nlibw32_a-pathstuff.o: pathstuff.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-pathstuff.o -MD -MP -MF \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" -c -o libw32_a-pathstuff.o `test -f 'pathstuff.c' || echo '$(srcdir)/'`pathstuff.c; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" \"$(DEPDIR)/libw32_a-pathstuff.Po\"; else rm -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\"; exit 1; fi\n#\tsource='pathstuff.c' object='libw32_a-pathstuff.o' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-pathstuff.o `test -f 'pathstuff.c' || echo '$(srcdir)/'`pathstuff.c\n\nlibw32_a-pathstuff.obj: pathstuff.c\n\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-pathstuff.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" -c -o libw32_a-pathstuff.obj `if test -f 'pathstuff.c'; then $(CYGPATH_W) 'pathstuff.c'; else $(CYGPATH_W) '$(srcdir)/pathstuff.c'; fi`; \\\n\tthen mv -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" \"$(DEPDIR)/libw32_a-pathstuff.Po\"; else rm -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\"; exit 1; fi\n#\tsource='pathstuff.c' object='libw32_a-pathstuff.obj' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-pathstuff.obj `if test -f 'pathstuff.c'; then $(CYGPATH_W) 'pathstuff.c'; else $(CYGPATH_W) '$(srcdir)/pathstuff.c'; fi`\nuninstall-info-am:\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(LIBRARIES)\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-noinstLIBRARIES ctags distclean distclean-compile \\\n\tdistclean-generic distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-exec install-exec-am install-info \\\n\tinstall-info-am install-man install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic pdf pdf-am ps ps-am tags uninstall \\\n\tuninstall-am uninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/Makefile.am",
    "content": "# Makefile.am to create libw32.a for mingw32 host.\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\n# Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nnoinst_LIBRARIES = libw32.a\n\nlibw32_a_SOURCES =  subproc/misc.c subproc/sub_proc.c subproc/w32err.c \\\n\t\t    pathstuff.c\n\nlibw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.6 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n# Makefile.am to create libw32.a for mingw32 host.\n# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006\n# Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = ..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nsubdir = w32\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/config/dospaths.m4 \\\n\t$(top_srcdir)/config/gettext.m4 $(top_srcdir)/config/iconv.m4 \\\n\t$(top_srcdir)/config/lib-ld.m4 \\\n\t$(top_srcdir)/config/lib-link.m4 \\\n\t$(top_srcdir)/config/lib-prefix.m4 $(top_srcdir)/config/nls.m4 \\\n\t$(top_srcdir)/config/po.m4 $(top_srcdir)/config/progtest.m4 \\\n\t$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nLIBRARIES = $(noinst_LIBRARIES)\nARFLAGS = cru\nlibw32_a_AR = $(AR) $(ARFLAGS)\nlibw32_a_LIBADD =\nam_libw32_a_OBJECTS = libw32_a-misc.$(OBJEXT) \\\n\tlibw32_a-sub_proc.$(OBJEXT) libw32_a-w32err.$(OBJEXT) \\\n\tlibw32_a-pathstuff.$(OBJEXT)\nlibw32_a_OBJECTS = $(am_libw32_a_OBJECTS)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(libw32_a_SOURCES)\nDIST_SOURCES = $(libw32_a_SOURCES)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nGETLOADAVG_LIBS = @GETLOADAVG_LIBS@\nGLOBINC = @GLOBINC@\nGLOBLIB = @GLOBLIB@\nGMSGFMT = @GMSGFMT@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nINTLLIBS = @INTLLIBS@\nKMEM_GROUP = @KMEM_GROUP@\nLDFLAGS = @LDFLAGS@\nLIBICONV = @LIBICONV@\nLIBINTL = @LIBINTL@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLTLIBICONV = @LTLIBICONV@\nLTLIBINTL = @LTLIBINTL@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMAKE_HOST = @MAKE_HOST@\nMKINSTALLDIRS = @MKINSTALLDIRS@\nMSGFMT = @MSGFMT@\nMSGMERGE = @MSGMERGE@\nNEED_SETGID = @NEED_SETGID@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPOSUB = @POSUB@\nRANLIB = @RANLIB@\nREMOTE = @REMOTE@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nU = @U@\nUSE_CUSTOMS_FALSE = @USE_CUSTOMS_FALSE@\nUSE_CUSTOMS_TRUE = @USE_CUSTOMS_TRUE@\nUSE_LOCAL_GLOB_FALSE = @USE_LOCAL_GLOB_FALSE@\nUSE_LOCAL_GLOB_TRUE = @USE_LOCAL_GLOB_TRUE@\nUSE_NLS = @USE_NLS@\nVERSION = @VERSION@\nWINDOWSENV_FALSE = @WINDOWSENV_FALSE@\nWINDOWSENV_TRUE = @WINDOWSENV_TRUE@\nXGETTEXT = @XGETTEXT@\nac_ct_CC = @ac_ct_CC@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nnoinst_LIBRARIES = libw32.a\nlibw32_a_SOURCES = subproc/misc.c subproc/sub_proc.c subproc/w32err.c \\\n\t\t    pathstuff.c\n\nlibw32_a_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/subproc -I$(top_srcdir)\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .o .obj\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  w32/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  w32/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\nclean-noinstLIBRARIES:\n\t-test -z \"$(noinst_LIBRARIES)\" || rm -f $(noinst_LIBRARIES)\nlibw32.a: $(libw32_a_OBJECTS) $(libw32_a_DEPENDENCIES) \n\t-rm -f libw32.a\n\t$(libw32_a_AR) libw32.a $(libw32_a_OBJECTS) $(libw32_a_LIBADD)\n\t$(RANLIB) libw32.a\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-misc.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-pathstuff.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-sub_proc.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libw32_a-w32err.Po@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\n\nlibw32_a-misc.o: subproc/misc.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-misc.o -MD -MP -MF \"$(DEPDIR)/libw32_a-misc.Tpo\" -c -o libw32_a-misc.o `test -f 'subproc/misc.c' || echo '$(srcdir)/'`subproc/misc.c; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-misc.Tpo\" \"$(DEPDIR)/libw32_a-misc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-misc.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/misc.c' object='libw32_a-misc.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-misc.o `test -f 'subproc/misc.c' || echo '$(srcdir)/'`subproc/misc.c\n\nlibw32_a-misc.obj: subproc/misc.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-misc.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-misc.Tpo\" -c -o libw32_a-misc.obj `if test -f 'subproc/misc.c'; then $(CYGPATH_W) 'subproc/misc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/misc.c'; fi`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-misc.Tpo\" \"$(DEPDIR)/libw32_a-misc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-misc.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/misc.c' object='libw32_a-misc.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-misc.obj `if test -f 'subproc/misc.c'; then $(CYGPATH_W) 'subproc/misc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/misc.c'; fi`\n\nlibw32_a-sub_proc.o: subproc/sub_proc.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-sub_proc.o -MD -MP -MF \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" -c -o libw32_a-sub_proc.o `test -f 'subproc/sub_proc.c' || echo '$(srcdir)/'`subproc/sub_proc.c; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" \"$(DEPDIR)/libw32_a-sub_proc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/sub_proc.c' object='libw32_a-sub_proc.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-sub_proc.o `test -f 'subproc/sub_proc.c' || echo '$(srcdir)/'`subproc/sub_proc.c\n\nlibw32_a-sub_proc.obj: subproc/sub_proc.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-sub_proc.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" -c -o libw32_a-sub_proc.obj `if test -f 'subproc/sub_proc.c'; then $(CYGPATH_W) 'subproc/sub_proc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/sub_proc.c'; fi`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\" \"$(DEPDIR)/libw32_a-sub_proc.Po\"; else rm -f \"$(DEPDIR)/libw32_a-sub_proc.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/sub_proc.c' object='libw32_a-sub_proc.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-sub_proc.obj `if test -f 'subproc/sub_proc.c'; then $(CYGPATH_W) 'subproc/sub_proc.c'; else $(CYGPATH_W) '$(srcdir)/subproc/sub_proc.c'; fi`\n\nlibw32_a-w32err.o: subproc/w32err.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32err.o -MD -MP -MF \"$(DEPDIR)/libw32_a-w32err.Tpo\" -c -o libw32_a-w32err.o `test -f 'subproc/w32err.c' || echo '$(srcdir)/'`subproc/w32err.c; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-w32err.Tpo\" \"$(DEPDIR)/libw32_a-w32err.Po\"; else rm -f \"$(DEPDIR)/libw32_a-w32err.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/w32err.c' object='libw32_a-w32err.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32err.o `test -f 'subproc/w32err.c' || echo '$(srcdir)/'`subproc/w32err.c\n\nlibw32_a-w32err.obj: subproc/w32err.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-w32err.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-w32err.Tpo\" -c -o libw32_a-w32err.obj `if test -f 'subproc/w32err.c'; then $(CYGPATH_W) 'subproc/w32err.c'; else $(CYGPATH_W) '$(srcdir)/subproc/w32err.c'; fi`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-w32err.Tpo\" \"$(DEPDIR)/libw32_a-w32err.Po\"; else rm -f \"$(DEPDIR)/libw32_a-w32err.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='subproc/w32err.c' object='libw32_a-w32err.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-w32err.obj `if test -f 'subproc/w32err.c'; then $(CYGPATH_W) 'subproc/w32err.c'; else $(CYGPATH_W) '$(srcdir)/subproc/w32err.c'; fi`\n\nlibw32_a-pathstuff.o: pathstuff.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-pathstuff.o -MD -MP -MF \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" -c -o libw32_a-pathstuff.o `test -f 'pathstuff.c' || echo '$(srcdir)/'`pathstuff.c; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" \"$(DEPDIR)/libw32_a-pathstuff.Po\"; else rm -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='pathstuff.c' object='libw32_a-pathstuff.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-pathstuff.o `test -f 'pathstuff.c' || echo '$(srcdir)/'`pathstuff.c\n\nlibw32_a-pathstuff.obj: pathstuff.c\n@am__fastdepCC_TRUE@\tif $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libw32_a-pathstuff.obj -MD -MP -MF \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" -c -o libw32_a-pathstuff.obj `if test -f 'pathstuff.c'; then $(CYGPATH_W) 'pathstuff.c'; else $(CYGPATH_W) '$(srcdir)/pathstuff.c'; fi`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\" \"$(DEPDIR)/libw32_a-pathstuff.Po\"; else rm -f \"$(DEPDIR)/libw32_a-pathstuff.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='pathstuff.c' object='libw32_a-pathstuff.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libw32_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libw32_a-pathstuff.obj `if test -f 'pathstuff.c'; then $(CYGPATH_W) 'pathstuff.c'; else $(CYGPATH_W) '$(srcdir)/pathstuff.c'; fi`\nuninstall-info-am:\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(LIBRARIES)\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-noinstLIBRARIES ctags distclean distclean-compile \\\n\tdistclean-generic distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-exec install-exec-am install-info \\\n\tinstall-info-am install-man install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic pdf pdf-am ps ps-am tags uninstall \\\n\tuninstall-am uninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/compat/dirent.c",
    "content": "/* Directory entry code for Window platforms.\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n\r\n#include <sys/types.h>\r\n#include <sys/stat.h>\r\n#include <errno.h>\r\n#include <string.h>\r\n#include <stdlib.h>\r\n#include \"dirent.h\"\r\n\r\n\r\nDIR*\r\nopendir(const char* pDirName)\r\n{\r\n\tstruct stat sb;\r\n\tDIR*\tpDir;\r\n\tchar*\tpEndDirName;\r\n\tint\tnBufferLen;\r\n\r\n\t/* sanity checks */\r\n\tif (!pDirName) {\r\n\t\terrno = EINVAL;\r\n\t\treturn NULL;\r\n\t}\r\n\tif (stat(pDirName, &sb) != 0) {\r\n\t\terrno = ENOENT;\r\n\t\treturn NULL;\r\n\t}\r\n\tif ((sb.st_mode & S_IFMT) != S_IFDIR) {\r\n\t\terrno = ENOTDIR;\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\t/* allocate a DIR structure to return */\r\n\tpDir = (DIR *) malloc(sizeof (DIR));\r\n\r\n\tif (!pDir)\r\n\t\treturn NULL;\r\n\r\n\t/* input directory name length */\r\n\tnBufferLen = strlen(pDirName);\r\n\r\n\t/* copy input directory name to DIR buffer */\r\n\tstrcpy(pDir->dir_pDirectoryName, pDirName);\r\n\r\n\t/* point to end of the copied directory name */\r\n\tpEndDirName = &pDir->dir_pDirectoryName[nBufferLen - 1];\r\n\r\n\t/* if directory name did not end in '/' or '\\', add '/' */\r\n\tif ((*pEndDirName != '/') && (*pEndDirName != '\\\\')) {\r\n\t\tpEndDirName++;\r\n\t\t*pEndDirName = '/';\r\n\t}\r\n\r\n\t/* now append the wildcard character to the buffer */\r\n\tpEndDirName++;\r\n\t*pEndDirName = '*';\r\n\tpEndDirName++;\r\n\t*pEndDirName = '\\0';\r\n\r\n\t/* other values defaulted */\r\n\tpDir->dir_nNumFiles = 0;\r\n\tpDir->dir_hDirHandle = INVALID_HANDLE_VALUE;\r\n\tpDir->dir_ulCookie = __DIRENT_COOKIE;\r\n\r\n\treturn pDir;\r\n}\r\n\r\nvoid\r\nclosedir(DIR *pDir)\r\n{\r\n\t/* got a valid pointer? */\r\n\tif (!pDir) {\r\n\t\terrno = EINVAL;\r\n\t\treturn;\r\n\t}\r\n\r\n\t/* sanity check that this is a DIR pointer */\r\n\tif (pDir->dir_ulCookie != __DIRENT_COOKIE) {\r\n\t\terrno = EINVAL;\r\n\t\treturn;\r\n\t}\r\n\r\n\t/* close the WINDOWS32 directory handle */\r\n\tif (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE)\r\n\t\tFindClose(pDir->dir_hDirHandle);\r\n\r\n\tfree(pDir);\r\n\r\n\treturn;\r\n}\r\n\r\nstruct dirent *\r\nreaddir(DIR* pDir)\r\n{\r\n\tWIN32_FIND_DATA wfdFindData;\r\n\r\n\tif (!pDir) {\r\n\t\terrno = EINVAL;\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\t/* sanity check that this is a DIR pointer */\r\n\tif (pDir->dir_ulCookie != __DIRENT_COOKIE) {\r\n\t\terrno = EINVAL;\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\tif (pDir->dir_nNumFiles == 0) {\r\n\t\tpDir->dir_hDirHandle = FindFirstFile(pDir->dir_pDirectoryName, &wfdFindData);\r\n\t\tif (pDir->dir_hDirHandle == INVALID_HANDLE_VALUE)\r\n\t\t\treturn NULL;\r\n\t} else if (!FindNextFile(pDir->dir_hDirHandle, &wfdFindData))\r\n\t\t\treturn NULL;\r\n\r\n\t/* bump count for next call to readdir() or telldir() */\r\n\tpDir->dir_nNumFiles++;\r\n\r\n\t/* fill in struct dirent values */\r\n\tpDir->dir_sdReturn.d_ino = -1;\r\n\tstrcpy(pDir->dir_sdReturn.d_name, wfdFindData.cFileName);\r\n\r\n\treturn &pDir->dir_sdReturn;\r\n}\r\n\r\nvoid\r\nrewinddir(DIR* pDir)\r\n{\r\n\tif (!pDir) {\r\n\t\terrno = EINVAL;\r\n\t\treturn;\r\n\t}\r\n\r\n\t/* sanity check that this is a DIR pointer */\r\n\tif (pDir->dir_ulCookie != __DIRENT_COOKIE) {\r\n\t\terrno = EINVAL;\r\n\t\treturn;\r\n\t}\r\n\r\n\t/* close the WINDOWS32 directory handle */\r\n\tif (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE)\r\n\t\tif (!FindClose(pDir->dir_hDirHandle))\r\n\t\t\terrno = EBADF;\r\n\r\n\t/* reset members which control readdir() */\r\n\tpDir->dir_hDirHandle = INVALID_HANDLE_VALUE;\r\n\tpDir->dir_nNumFiles = 0;\r\n\r\n\treturn;\r\n}\r\n\r\nint\r\ntelldir(DIR* pDir)\r\n{\r\n\tif (!pDir) {\r\n\t\terrno = EINVAL;\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/* sanity check that this is a DIR pointer */\r\n\tif (pDir->dir_ulCookie != __DIRENT_COOKIE) {\r\n\t\terrno = EINVAL;\r\n\t\treturn -1;\r\n\t}\r\n\r\n\t/* return number of times readdir() called */\r\n\treturn pDir->dir_nNumFiles;\r\n}\r\n\r\nvoid\r\nseekdir(DIR* pDir, long nPosition)\r\n{\r\n\tif (!pDir)\r\n\t\treturn;\r\n\r\n\t/* sanity check that this is a DIR pointer */\r\n\tif (pDir->dir_ulCookie != __DIRENT_COOKIE)\r\n\t\treturn;\r\n\r\n\t/* go back to beginning of directory */\r\n\trewinddir(pDir);\r\n\r\n\t/* loop until we have found position we care about */\r\n\tfor (--nPosition; nPosition && readdir(pDir); nPosition--);\r\n\r\n\t/* flag invalid nPosition value */\r\n\tif (nPosition)\r\n\t\terrno = EINVAL;\r\n\r\n\treturn;\r\n}\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/include/dirent.h",
    "content": "/* Windows version of dirent.h\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef _DIRENT_H\n#define _DIRENT_H\n\n#ifdef __MINGW32__\n# include <windows.h>\n# include_next <dirent.h>\n#else\n\n#include <stdlib.h>\n#include <windows.h>\n#include <limits.h>\n#include <sys/types.h>\n\n#ifndef NAME_MAX\n#define NAME_MAX 255\n#endif\n\n#define __DIRENT_COOKIE 0xfefeabab\n\n\nstruct dirent\n{\n  ino_t d_ino; \t\t\t/* unused - no equivalent on WINDOWS32 */\n  char d_name[NAME_MAX+1];\n};\n\ntypedef struct dir_struct {\n\tULONG\tdir_ulCookie;\n\tHANDLE\tdir_hDirHandle;\n\tDWORD\tdir_nNumFiles;\n\tchar\tdir_pDirectoryName[NAME_MAX+1];\n\tstruct dirent dir_sdReturn;\n} DIR;\n\nDIR *opendir(const char *);\nstruct dirent *readdir(DIR *);\nvoid rewinddir(DIR *);\nvoid closedir(DIR *);\nint telldir(DIR *);\nvoid seekdir(DIR *, long);\n\n#endif  /* !__MINGW32__ */\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/include/pathstuff.h",
    "content": "/* Definitions for Windows path manipulation.\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#ifndef _PATHSTUFF_H\n#define _PATHSTUFF_H\n\nextern char * convert_Path_to_windows32(char *Path, char to_delim);\nextern char * convert_vpath_to_windows32(char *Path, char to_delim);\nextern char * w32ify(char *file, int resolve);\nextern char * getcwd_fs(char *buf, int len);\n\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/include/sub_proc.h",
    "content": "/* Definitions for Windows process invocation.\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n#ifndef SUB_PROC_H\r\n#define SUB_PROC_H\r\n\r\n/*\r\n * Component Name:\r\n *\r\n * $Date: 2006/02/11 22:16:05 $\r\n *\r\n * $Source: /sources/make/make/w32/include/sub_proc.h,v $\r\n *\r\n * $Id: sub_proc.h,v 1.8 2006/02/11 22:16:05 psmith Exp $\r\n */\r\n\r\n#define EXTERN_DECL(entry, args) extern entry args\r\n#define VOID_DECL void\r\n\r\nEXTERN_DECL(HANDLE process_init, (VOID_DECL));\r\nEXTERN_DECL(HANDLE process_init_fd, (HANDLE stdinh, HANDLE stdouth,\r\n\tHANDLE stderrh));\r\nEXTERN_DECL(long process_begin, (HANDLE proc, char **argv, char **envp,\r\n\tchar *exec_path, char *as_user));\r\nEXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data,\r\n\tint stdin_data_len));\r\nEXTERN_DECL(long process_file_io, (HANDLE proc));\r\nEXTERN_DECL(void process_cleanup, (HANDLE proc));\r\nEXTERN_DECL(HANDLE process_wait_for_any, (VOID_DECL));\r\nEXTERN_DECL(void process_register, (HANDLE proc));\r\nEXTERN_DECL(HANDLE process_easy, (char** argv, char** env));\r\nEXTERN_DECL(BOOL process_kill, (HANDLE proc, int signal));\r\nEXTERN_DECL(int process_used_slots, (VOID_DECL));\r\n\r\n/* support routines */\r\nEXTERN_DECL(long process_errno, (HANDLE proc));\r\nEXTERN_DECL(long process_last_err, (HANDLE proc));\r\nEXTERN_DECL(long process_exit_code, (HANDLE proc));\r\nEXTERN_DECL(long process_signal, (HANDLE proc));\r\nEXTERN_DECL(char * process_outbuf, (HANDLE proc));\r\nEXTERN_DECL(char * process_errbuf, (HANDLE proc));\r\nEXTERN_DECL(int process_outcnt, (HANDLE proc));\r\nEXTERN_DECL(int process_errcnt, (HANDLE proc));\r\nEXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3]));\r\n\r\n#endif\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/include/w32err.h",
    "content": "/* Definitions for Windows error handling.\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n#ifndef _W32ERR_H_\r\n#define _W32ERR_H_\r\n\r\n#ifndef EXTERN_DECL\r\n#define EXTERN_DECL(entry, args) entry args\r\n#endif\r\n\r\nEXTERN_DECL(char * map_windows32_error_to_string, (DWORD error));\r\n\r\n#endif /* !_W32ERR_H */\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/pathstuff.c",
    "content": "/* Path conversion for Windows pathnames.\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include <string.h>\n#include <stdlib.h>\n#include \"make.h\"\n#include \"pathstuff.h\"\n\n/*\n * Convert delimiter separated vpath to Canonical format.\n */\nchar *\nconvert_vpath_to_windows32(char *Path, char to_delim)\n{\n    char *etok;            /* token separator for old Path */\n\n\t/*\n\t * Convert all spaces to delimiters. Note that pathnames which\n\t * contain blanks get trounced here. Use 8.3 format as a workaround.\n\t */\n\tfor (etok = Path; etok && *etok; etok++)\n\t\tif (isblank ((unsigned char) *etok))\n\t\t\t*etok = to_delim;\n\n\treturn (convert_Path_to_windows32(Path, to_delim));\n}\n\n/*\n * Convert delimiter separated path to Canonical format.\n */\nchar *\nconvert_Path_to_windows32(char *Path, char to_delim)\n{\n    char *etok;            /* token separator for old Path */\n    char *p;            /* points to element of old Path */\n\n    /* is this a multi-element Path ? */\n    for (p = Path, etok = strpbrk(p, \":;\");\n         etok;\n         etok = strpbrk(p, \":;\"))\n        if ((etok - p) == 1) {\n            if (*(etok - 1) == ';' ||\n                *(etok - 1) == ':') {\n                etok[-1] = to_delim;\n                etok[0] = to_delim;\n                p = ++etok;\n                continue;    /* ignore empty bucket */\n            } else if (!isalpha ((unsigned char) *p)) {\n                /* found one to count, handle things like '.' */\n                *etok = to_delim;\n                p = ++etok;\n            } else if ((*etok == ':') && (etok = strpbrk(etok+1, \":;\"))) {\n                /* found one to count, handle drive letter */\n                *etok = to_delim;\n                p = ++etok;\n            } else\n                /* all finished, force abort */\n                p += strlen(p);\n        } else {\n            /* found another one, no drive letter */\n            *etok = to_delim;\n            p = ++etok;\n\t}\n\n    return Path;\n}\n\n/*\n * Convert to forward slashes. Resolve to full pathname optionally\n */\nchar *\nw32ify(char *filename, int resolve)\n{\n    static char w32_path[FILENAME_MAX];\n    char *p;\n\n    if (resolve)\n        _fullpath(w32_path, filename, sizeof (w32_path));\n    else\n        strncpy(w32_path, filename, sizeof (w32_path));\n\n    for (p = w32_path; p && *p; p++)\n        if (*p == '\\\\')\n            *p = '/';\n\n    return w32_path;\n}\n\nchar *\ngetcwd_fs(char* buf, int len)\n{\n\tchar *p = getcwd(buf, len);\n\n\tif (p) {\n\t\tchar *q = w32ify(buf, 0);\n\t\tstrncpy(buf, q, len);\n\t}\n\n\treturn p;\n}\n\n#ifdef unused\n/*\n * Convert delimiter separated pathnames (e.g. PATH) or single file pathname\n * (e.g. c:/foo, c:\\bar) to NutC format. If we are handed a string that\n * _NutPathToNutc() fails to convert, just return the path we were handed\n * and assume the caller will know what to do with it (It was probably\n * a mistake to try and convert it anyway due to some of the bizarre things\n * that might look like pathnames in makefiles).\n */\nchar *\nconvert_path_to_nutc(char *path)\n{\n    int  count;            /* count of path elements */\n    char *nutc_path;     /* new NutC path */\n    int  nutc_path_len;    /* length of buffer to allocate for new path */\n    char *pathp;        /* pointer to nutc_path used to build it */\n    char *etok;            /* token separator for old path */\n    char *p;            /* points to element of old path */\n    char sep;            /* what flavor of separator used in old path */\n    char *rval;\n\n    /* is this a multi-element path ? */\n    for (p = path, etok = strpbrk(p, \":;\"), count = 0;\n         etok;\n         etok = strpbrk(p, \":;\"))\n        if ((etok - p) == 1) {\n            if (*(etok - 1) == ';' ||\n                *(etok - 1) == ':') {\n                p = ++etok;\n                continue;    /* ignore empty bucket */\n            } else if (etok = strpbrk(etok+1, \":;\"))\n                /* found one to count, handle drive letter */\n                p = ++etok, count++;\n            else\n                /* all finished, force abort */\n                p += strlen(p);\n        } else\n            /* found another one, no drive letter */\n            p = ++etok, count++;\n\n    if (count) {\n        count++;    /* x1;x2;x3 <- need to count x3 */\n\n        /*\n         * Hazard a guess on how big the buffer needs to be.\n         * We have to convert things like c:/foo to /c=/foo.\n         */\n        nutc_path_len = strlen(path) + (count*2) + 1;\n        nutc_path = xmalloc(nutc_path_len);\n        pathp = nutc_path;\n        *pathp = '\\0';\n\n        /*\n         * Loop through PATH and convert one elemnt of the path at at\n         * a time. Single file pathnames will fail this and fall\n         * to the logic below loop.\n         */\n        for (p = path, etok = strpbrk(p, \":;\");\n             etok;\n             etok = strpbrk(p, \":;\")) {\n\n            /* don't trip up on device specifiers or empty path slots */\n            if ((etok - p) == 1)\n                if (*(etok - 1) == ';' ||\n                    *(etok - 1) == ':') {\n                    p = ++etok;\n                    continue;\n                } else if ((etok = strpbrk(etok+1, \":;\")) == NULL)\n                    break;    /* thing found was a WINDOWS32 pathname */\n\n            /* save separator */\n            sep = *etok;\n\n            /* terminate the current path element -- temporarily */\n            *etok = '\\0';\n\n#ifdef __NUTC__\n            /* convert to NutC format */\n            if (_NutPathToNutc(p, pathp, 0) == FALSE) {\n                free(nutc_path);\n                rval = savestring(path, strlen(path));\n                return rval;\n            }\n#else\n            *pathp++ = '/';\n            *pathp++ = p[0];\n            *pathp++ = '=';\n            *pathp++ = '/';\n            strcpy(pathp, &p[2]);\n#endif\n\n            pathp += strlen(pathp);\n            *pathp++ = ':';     /* use Unix style path separtor for new path */\n            *pathp   = '\\0'; /* make sure we are null terminaed */\n\n            /* restore path separator */\n            *etok = sep;\n\n            /* point p to first char of next path element */\n            p = ++etok;\n\n        }\n    } else {\n        nutc_path_len = strlen(path) + 3;\n        nutc_path = xmalloc(nutc_path_len);\n        pathp = nutc_path;\n        *pathp = '\\0';\n        p = path;\n    }\n\n    /*\n      * OK, here we handle the last element in PATH (e.g. c of a;b;c)\n     * or the path was a single filename and will be converted\n     * here. Note, testing p here assures that we don't trip up\n     * on paths like a;b; which have trailing delimiter followed by\n     * nothing.\n     */\n    if (*p != '\\0') {\n#ifdef __NUTC__\n        if (_NutPathToNutc(p, pathp, 0) == FALSE) {\n            free(nutc_path);\n            rval = savestring(path, strlen(path));\n            return rval;\n        }\n#else\n        *pathp++ = '/';\n        *pathp++ = p[0];\n        *pathp++ = '=';\n        *pathp++ = '/';\n        strcpy(pathp, &p[2]);\n#endif\n    } else\n        *(pathp-1) = '\\0'; /* we're already done, don't leave trailing : */\n\n    rval = savestring(nutc_path, strlen(nutc_path));\n    free(nutc_path);\n    return rval;\n}\n\n#endif\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/NMakefile",
    "content": "# NOTE: If you have no `make' program at all to process this makefile, run\n# `build.bat' instead.\n#\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n# 2006 Free Software Foundation, Inc.\n# This file is part of GNU Make.\n#\n# GNU Make is free software; you can redistribute it and/or modify it under the\n# terms of the GNU General Public License as published by the Free Software\n# Foundation; either version 2, or (at your option) any later version.\n#\n# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along with\n# GNU Make; see the file COPYING.  If not, write to the Free Software\n# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n\n#\n#       NMakefile for GNU Make (subproc library)\n#\nLIB = lib\nCC = cl\nMAKE = nmake\n\nOUTDIR=.\nMAKEFILE=NMakefile\n\nCFLAGS_any = /nologo /MT /W4 /GX /Z7 /YX /D WIN32 /D WINDOWS32 /D _WINDOWS  -I. -I../include -I../../\nCFLAGS_debug = $(CFLAGS_any) /Od /D _DEBUG /FR.\\WinDebug\\ /Fp.\\WinDebug\\subproc.pch /Fo.\\WinDebug/\nCFLAGS_release = $(CFLAGS_any) /O2 /FR.\\WinRel\\ /Fp.\\WinRel\\subproc.pch /Fo.\\WinRel/\n\nall: Release Debug\n\nRelease:\n\t$(MAKE) /f $(MAKEFILE) OUTDIR=WinRel CFLAGS=\"$(CFLAGS_release)\" WinRel/subproc.lib\nDebug:\n\t$(MAKE) /f $(MAKEFILE) OUTDIR=WinDebug CFLAGS=\"$(CFLAGS_debug)\" WinDebug/subproc.lib\n\nclean:\n\trmdir /s /q WinRel WinDebug\n\terase *.pdb\n\n$(OUTDIR):\n\tif not exist .\\$@\\nul mkdir .\\$@\n\nOBJS = $(OUTDIR)/misc.obj $(OUTDIR)/w32err.obj $(OUTDIR)/sub_proc.obj\n\n$(OUTDIR)/subproc.lib: $(OUTDIR) $(OBJS)\n\t$(LIB) -out:$@ @<<\n\t\t$(OBJS)\n<<\n\n.c{$(OUTDIR)}.obj:\n\t$(CC) $(CFLAGS) /c $<\n\n$(OUTDIR)/misc.obj: misc.c proc.h\n$(OUTDIR)/sub_proc.obj: sub_proc.c  ../include/sub_proc.h ../include/w32err.h proc.h\n$(OUTDIR)/w32err.obj: w32err.c ../include/w32err.h\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/build.bat",
    "content": "@if \"%1\" == \"gcc\" GoTo GCCBuild\r\nif not exist .\\WinDebug\\nul mkdir .\\WinDebug\r\ncl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\\WinDebug/ /Fp.\\WinDebug/subproc.pch /Fo.\\WinDebug/ /c misc.c\r\ncl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\\WinDebug/ /Fp.\\WinDebug/subproc.pch /Fo.\\WinDebug/ /c sub_proc.c\r\ncl.exe /nologo /MT /W4 /GX /Z7 /YX /Od /I .. /I . /I ../include /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\\WinDebug/ /Fp.\\WinDebug/subproc.pch /Fo.\\WinDebug/ /c w32err.c\r\nlib.exe /NOLOGO /OUT:.\\WinDebug\\subproc.lib  .\\WinDebug/misc.obj  .\\WinDebug/sub_proc.obj  .\\WinDebug/w32err.obj\r\nif not exist .\\WinRel\\nul mkdir .\\WinRel\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I ../include /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\\WinRel/ /Fp.\\WinRel/subproc.pch /Fo.\\WinRel/ /c misc.c\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\\WinRel/ /Fp.\\WinRel/subproc.pch /Fo.\\WinRel/ /c sub_proc.c\r\ncl.exe /nologo /MT /W4 /GX /YX /O2 /I ../include /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\\WinRel/ /Fp.\\WinRel/subproc.pch /Fo.\\WinRel/ /c w32err.c\r\nlib.exe /NOLOGO /OUT:.\\WinRel\\subproc.lib  .\\WinRel/misc.obj  .\\WinRel/sub_proc.obj  .\\WinRel/w32err.obj\r\nGoTo BuildEnd\r\n:GCCBuild\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I.. -I. -I../include -I../.. -DWINDOWS32 -c misc.c -o ../../w32_misc.o\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I.. -I. -I../include -I../.. -DWINDOWS32 -c sub_proc.c -o ../../sub_proc.o\r\ngcc -mthreads -Wall -gstabs+ -ggdb3 -O2 -I.. -I. -I../include -I../.. -DWINDOWS32 -c w32err.c -o ../../w32err.o\r\n:BuildEnd\r\n\r\n@echo off\r\nrem Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\r\nrem 2005, 2006 Free Software Foundation, Inc.\r\nrem This file is part of GNU Make.\r\n\r\nrem GNU Make is free software; you can redistribute it and/or modify it under the\r\nrem terms of the GNU General Public License as published by the Free Software\r\nrem Foundation; either version 2, or (at your option) any later version.\r\n\r\nrem GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nrem WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nrem A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nrem You should have received a copy of the GNU General Public License along with\r\nrem GNU Make; see the file COPYING.  If not, write to the Free Software\r\nrem Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/misc.c",
    "content": "/* Process handling for Windows\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n#include <stddef.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n#include <windows.h>\r\n#include \"proc.h\"\r\n\r\n\r\n/*\r\n * Description:  Convert a NULL string terminated UNIX environment block to\r\n *\t\tan environment block suitable for a windows32 system call\r\n *\r\n * Returns:  TRUE= success, FALSE=fail\r\n *\r\n * Notes/Dependencies:  the environment block is sorted in case-insensitive\r\n *\torder, is double-null terminated, and is a char *, not a char **\r\n */\r\nint _cdecl compare(const void *a1, const void *a2)\r\n{\r\n\treturn _stricoll(*((char**)a1),*((char**)a2));\r\n}\r\nbool_t\r\narr2envblk(char **arr, char **envblk_out)\r\n{\r\n\tchar **tmp;\r\n\tint size_needed;\r\n\tint arrcnt;\r\n\tchar *ptr;\r\n\r\n\tarrcnt = 0;\r\n\twhile (arr[arrcnt]) {\r\n\t\tarrcnt++;\r\n\t}\r\n\r\n\ttmp = (char**) calloc(arrcnt + 1, sizeof(char *));\r\n\tif (!tmp) {\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tarrcnt = 0;\r\n\tsize_needed = 0;\r\n\twhile (arr[arrcnt]) {\r\n\t\ttmp[arrcnt] = arr[arrcnt];\r\n\t\tsize_needed += strlen(arr[arrcnt]) + 1;\r\n\t\tarrcnt++;\r\n\t}\r\n\tsize_needed++;\r\n\r\n\tqsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare);\r\n\r\n\tptr = *envblk_out = calloc(size_needed, 1);\r\n\tif (!ptr) {\r\n\t\tfree(tmp);\r\n\t\treturn FALSE;\r\n\t}\r\n\r\n\tarrcnt = 0;\r\n\twhile (tmp[arrcnt]) {\r\n\t\tstrcpy(ptr, tmp[arrcnt]);\r\n\t\tptr += strlen(tmp[arrcnt]) + 1;\r\n\t\tarrcnt++;\r\n\t}\r\n\r\n        free(tmp);\r\n\treturn TRUE;\r\n}\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/proc.h",
    "content": "/* Definitions for Windows\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n#ifndef  _PROC_H\r\n#define _PROC_H\r\n\r\ntypedef int bool_t;\r\n\r\n#define E_SCALL\t\t101\r\n#define E_IO\t\t102\r\n#define E_NO_MEM\t103\r\n#define E_FORK\t\t104\r\n\r\nextern bool_t arr2envblk(char **arr, char **envblk_out);\r\n\r\n#endif\r\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/sub_proc.c",
    "content": "/* Process handling for Windows.\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\n2006 Free Software Foundation, Inc.\nThis file is part of GNU Make.\n\nGNU Make is free software; you can redistribute it and/or modify it under the\nterms of the GNU General Public License as published by the Free Software\nFoundation; either version 2, or (at your option) any later version.\n\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with\nGNU Make; see the file COPYING.  If not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <process.h>  /* for msvc _beginthreadex, _endthreadex */\n#include <signal.h>\n#include <windows.h>\n\n#include \"sub_proc.h\"\n#include \"proc.h\"\n#include \"w32err.h\"\n#include \"config.h\"\n#include \"debug.h\"\n\nstatic char *make_command_line(char *shell_name, char *exec_path, char **argv);\n\ntypedef struct sub_process_t {\n\tintptr_t sv_stdin[2];\n\tintptr_t sv_stdout[2];\n\tintptr_t sv_stderr[2];\n\tint using_pipes;\n\tchar *inp;\n\tDWORD incnt;\n\tchar * volatile outp;\n\tvolatile DWORD outcnt;\n\tchar * volatile errp;\n\tvolatile DWORD errcnt;\n\tintptr_t pid;\n\tint exit_code;\n\tint signal;\n\tlong last_err;\n\tlong lerrno;\n} sub_process;\n\n/* keep track of children so we can implement a waitpid-like routine */\nstatic sub_process *proc_array[MAXIMUM_WAIT_OBJECTS];\nstatic int proc_index = 0;\nstatic int fake_exits_pending = 0;\n\n/*\n * When a process has been waited for, adjust the wait state\n * array so that we don't wait for it again\n */\nstatic void\nprocess_adjust_wait_state(sub_process* pproc)\n{\n\tint i;\n\n\tif (!proc_index)\n\t\treturn;\n\n\tfor (i = 0; i < proc_index; i++)\n\t\tif (proc_array[i]->pid == pproc->pid)\n\t\t\tbreak;\n\n\tif (i < proc_index) {\n\t\tproc_index--;\n\t\tif (i != proc_index)\n\t\t\tmemmove(&proc_array[i], &proc_array[i+1],\n\t\t\t\t(proc_index-i) * sizeof(sub_process*));\n\t\tproc_array[proc_index] = NULL;\n\t}\n}\n\n/*\n * Waits for any of the registered child processes to finish.\n */\nstatic sub_process *\nprocess_wait_for_any_private(void)\n{\n\tHANDLE handles[MAXIMUM_WAIT_OBJECTS];\n\tDWORD retval, which;\n\tint i;\n\n\tif (!proc_index)\n\t\treturn NULL;\n\n\t/* build array of handles to wait for */\n\tfor (i = 0; i < proc_index; i++) {\n\t\thandles[i] = (HANDLE) proc_array[i]->pid;\n\n\t\tif (fake_exits_pending && proc_array[i]->exit_code)\n\t\t\tbreak;\n\t}\n\n\t/* wait for someone to exit */\n\tif (!fake_exits_pending) {\n\t\tretval = WaitForMultipleObjects(proc_index, handles, FALSE, INFINITE);\n\t\twhich = retval - WAIT_OBJECT_0;\n\t} else {\n\t\tfake_exits_pending--;\n\t\tretval = !WAIT_FAILED;\n\t\twhich = i;\n\t}\n\n\t/* return pointer to process */\n\tif (retval != WAIT_FAILED) {\n\t\tsub_process* pproc = proc_array[which];\n\t\tprocess_adjust_wait_state(pproc);\n\t\treturn pproc;\n\t} else\n\t\treturn NULL;\n}\n\n/*\n * Terminate a process.\n */\nBOOL\nprocess_kill(HANDLE proc, int signal)\n{\n\tsub_process* pproc = (sub_process*) proc;\n\tpproc->signal = signal;\n\treturn (TerminateProcess((HANDLE) pproc->pid, signal));\n}\n\n/*\n * Use this function to register processes you wish to wait for by\n * calling process_file_io(NULL) or process_wait_any(). This must be done\n * because it is possible for callers of this library to reuse the same\n * handle for multiple processes launches :-(\n */\nvoid\nprocess_register(HANDLE proc)\n{\n\tif (proc_index < MAXIMUM_WAIT_OBJECTS)\n\t\tproc_array[proc_index++] = (sub_process *) proc;\n}\n\n/*\n * Return the number of processes that we are still waiting for.\n */\nint\nprocess_used_slots(void)\n{\n\treturn proc_index;\n}\n\n/*\n * Public function which works kind of like waitpid(). Wait for any\n * of the children to die and return results. To call this function,\n * you must do 1 of things:\n *\n * \tx = process_easy(...);\n *\n * or\n *\n *\tx = process_init_fd();\n *\tprocess_register(x);\n *\n * or\n *\n *\tx = process_init();\n *\tprocess_register(x);\n *\n * You must NOT then call process_pipe_io() because this function is\n * not capable of handling automatic notification of any child\n * death.\n */\n\nHANDLE\nprocess_wait_for_any(void)\n{\n\tsub_process* pproc = process_wait_for_any_private();\n\n\tif (!pproc)\n\t\treturn NULL;\n\telse {\n\t\t/*\n\t\t * Ouch! can't tell caller if this fails directly. Caller\n\t\t * will have to use process_last_err()\n                 */\n\t\t(void) process_file_io(pproc);\n\t\treturn ((HANDLE) pproc);\n\t}\n}\n\nlong\nprocess_signal(HANDLE proc)\n{\n        if (proc == INVALID_HANDLE_VALUE) return 0;\n        return (((sub_process *)proc)->signal);\n}\n\nlong\nprocess_last_err(HANDLE proc)\n{\n        if (proc == INVALID_HANDLE_VALUE) return ERROR_INVALID_HANDLE;\n\treturn (((sub_process *)proc)->last_err);\n}\n\nlong\nprocess_exit_code(HANDLE proc)\n{\n        if (proc == INVALID_HANDLE_VALUE) return EXIT_FAILURE;\n\treturn (((sub_process *)proc)->exit_code);\n}\n\n/*\n2006-02:\nAll the following functions are currently unused.\nAll of them would crash gmake if called with argument INVALID_HANDLE_VALUE.\nHence whoever wants to use one of this functions must invent and implement\na reasonable error handling for this function.\n\nchar *\nprocess_outbuf(HANDLE proc)\n{\n\treturn (((sub_process *)proc)->outp);\n}\n\nchar *\nprocess_errbuf(HANDLE proc)\n{\n\treturn (((sub_process *)proc)->errp);\n}\n\nint\nprocess_outcnt(HANDLE proc)\n{\n\treturn (((sub_process *)proc)->outcnt);\n}\n\nint\nprocess_errcnt(HANDLE proc)\n{\n\treturn (((sub_process *)proc)->errcnt);\n}\n\nvoid\nprocess_pipes(HANDLE proc, int pipes[3])\n{\n\tpipes[0] = ((sub_process *)proc)->sv_stdin[0];\n\tpipes[1] = ((sub_process *)proc)->sv_stdout[0];\n\tpipes[2] = ((sub_process *)proc)->sv_stderr[0];\n\treturn;\n}\n*/\n\n\tHANDLE\nprocess_init()\n{\n\tsub_process *pproc;\n\t/*\n\t * open file descriptors for attaching stdin/stdout/sterr\n\t */\n\tHANDLE stdin_pipes[2];\n\tHANDLE stdout_pipes[2];\n\tHANDLE stderr_pipes[2];\n\tSECURITY_ATTRIBUTES inherit;\n\tBYTE sd[SECURITY_DESCRIPTOR_MIN_LENGTH];\n\n\tpproc = malloc(sizeof(*pproc));\n\tmemset(pproc, 0, sizeof(*pproc));\n\n\t/* We can't use NULL for lpSecurityDescriptor because that\n\t   uses the default security descriptor of the calling process.\n\t   Instead we use a security descriptor with no DACL.  This\n\t   allows nonrestricted access to the associated objects. */\n\n\tif (!InitializeSecurityDescriptor((PSECURITY_DESCRIPTOR)(&sd),\n\t\t\t\t\t  SECURITY_DESCRIPTOR_REVISION)) {\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t\treturn((HANDLE)pproc);\n\t}\n\n\tinherit.nLength = sizeof(inherit);\n\tinherit.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)(&sd);\n\tinherit.bInheritHandle = TRUE;\n\n\t// By convention, parent gets pipe[0], and child gets pipe[1]\n\t// This means the READ side of stdin pipe goes into pipe[1]\n\t// and the WRITE side of the stdout and stderr pipes go into pipe[1]\n\tif (CreatePipe( &stdin_pipes[1], &stdin_pipes[0], &inherit, 0) == FALSE ||\n\tCreatePipe( &stdout_pipes[0], &stdout_pipes[1], &inherit, 0) == FALSE ||\n\tCreatePipe( &stderr_pipes[0], &stderr_pipes[1], &inherit, 0) == FALSE) {\n\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t\treturn((HANDLE)pproc);\n\t}\n\n\t//\n\t// Mark the parent sides of the pipes as non-inheritable\n\t//\n\tif (SetHandleInformation(stdin_pipes[0],\n\t\t\t\tHANDLE_FLAG_INHERIT, 0) == FALSE ||\n\t\tSetHandleInformation(stdout_pipes[0],\n\t\t\t\tHANDLE_FLAG_INHERIT, 0) == FALSE ||\n\t\tSetHandleInformation(stderr_pipes[0],\n\t\t\t\tHANDLE_FLAG_INHERIT, 0) == FALSE) {\n\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t\treturn((HANDLE)pproc);\n\t}\n\tpproc->sv_stdin[0]  = (intptr_t) stdin_pipes[0];\n\tpproc->sv_stdin[1]  = (intptr_t) stdin_pipes[1];\n\tpproc->sv_stdout[0] = (intptr_t) stdout_pipes[0];\n\tpproc->sv_stdout[1] = (intptr_t) stdout_pipes[1];\n\tpproc->sv_stderr[0] = (intptr_t) stderr_pipes[0];\n\tpproc->sv_stderr[1] = (intptr_t) stderr_pipes[1];\n\n\tpproc->using_pipes = 1;\n\n\tpproc->lerrno = 0;\n\n\treturn((HANDLE)pproc);\n}\n\n\n\tHANDLE\nprocess_init_fd(HANDLE stdinh, HANDLE stdouth, HANDLE stderrh)\n{\n\tsub_process *pproc;\n\n\tpproc = malloc(sizeof(*pproc));\n\tmemset(pproc, 0, sizeof(*pproc));\n\n\t/*\n\t * Just pass the provided file handles to the 'child side' of the\n\t * pipe, bypassing pipes altogether.\n\t */\n\tpproc->sv_stdin[1]  = (intptr_t) stdinh;\n\tpproc->sv_stdout[1] = (intptr_t) stdouth;\n\tpproc->sv_stderr[1] = (intptr_t) stderrh;\n\n\tpproc->last_err = pproc->lerrno = 0;\n\n\treturn((HANDLE)pproc);\n}\n\n\nstatic HANDLE\nfind_file(char *exec_path, LPOFSTRUCT file_info)\n{\n\tHANDLE exec_handle;\n\tchar *fname;\n\tchar *ext;\n\n\tfname = malloc(strlen(exec_path) + 5);\n\tstrcpy(fname, exec_path);\n\text = fname + strlen(fname);\n\n\tstrcpy(ext, \".exe\");\n\tif ((exec_handle = (HANDLE)(intptr_t)OpenFile(fname, file_info,\n\t\t\tOF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) {\n\t\tfree(fname);\n\t\treturn(exec_handle);\n\t}\n\n\tstrcpy(ext, \".cmd\");\n\tif ((exec_handle = (HANDLE)(intptr_t)OpenFile(fname, file_info,\n\t\t\tOF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) {\n\t\tfree(fname);\n\t\treturn(exec_handle);\n\t}\n\n\tstrcpy(ext, \".bat\");\n\tif ((exec_handle = (HANDLE)(intptr_t)OpenFile(fname, file_info,\n\t\t\tOF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) {\n\t\tfree(fname);\n\t\treturn(exec_handle);\n\t}\n\n\t/* should .com come before this case? */\n\tif ((exec_handle = (HANDLE)(intptr_t)OpenFile(exec_path, file_info,\n\t\t\tOF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) {\n\t\tfree(fname);\n\t\treturn(exec_handle);\n\t}\n\n\tstrcpy(ext, \".com\");\n\tif ((exec_handle = (HANDLE)(intptr_t)OpenFile(fname, file_info,\n\t\t\tOF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) {\n\t\tfree(fname);\n\t\treturn(exec_handle);\n\t}\n\n\tfree(fname);\n\treturn(exec_handle);\n}\n\n\n/*\n * Description:   Create the child process to be helped\n *\n * Returns: success <=> 0\n *\n * Notes/Dependencies:\n */\nlong\nprocess_begin(\n\tHANDLE proc,\n\tchar **argv,\n\tchar **envp,\n\tchar *exec_path,\n\tchar *as_user)\n{\n\tsub_process *pproc = (sub_process *)proc;\n\tchar *shell_name = 0;\n\tint file_not_found=0;\n\tHANDLE exec_handle;\n\tchar buf[256];\n\tDWORD bytes_returned;\n\tDWORD flags;\n\tchar *command_line;\n\tSTARTUPINFO startInfo;\n\tPROCESS_INFORMATION procInfo;\n\tchar *envblk=NULL;\n\tOFSTRUCT file_info;\n\n\n\t/*\n\t *  Shell script detection...  if the exec_path starts with #! then\n\t *  we want to exec shell-script-name exec-path, not just exec-path\n\t *  NT doesn't recognize #!/bin/sh or #!/etc/Tivoli/bin/perl.  We do not\n\t *  hard-code the path to the shell or perl or whatever:  Instead, we\n\t *  assume it's in the path somewhere (generally, the NT tools\n\t *  bin directory)\n\t *  We use OpenFile here because it is capable of searching the Path.\n\t */\n\n\texec_handle = find_file(exec_path, &file_info);\n\n\t/*\n\t * If we couldn't open the file, just assume that Windows32 will be able\n\t * to find and execute it.\n\t */\n\tif (exec_handle == (HANDLE)HFILE_ERROR) {\n\t\tfile_not_found++;\n\t}\n\telse {\n\t\t/* Attempt to read the first line of the file */\n\t\tif (ReadFile( exec_handle,\n\t\t\t\tbuf, sizeof(buf) - 1, /* leave room for trailing NULL */\n\t\t\t\t&bytes_returned, 0) == FALSE || bytes_returned < 2) {\n\n\t\t\tpproc->last_err = GetLastError();\n\t\t\tpproc->lerrno = E_IO;\n\t\t\tCloseHandle(exec_handle);\n\t\t\treturn(-1);\n\t\t}\n\t\tif (buf[0] == '#' && buf[1] == '!') {\n\t\t\t/*\n\t\t\t *  This is a shell script...  Change the command line from\n\t\t\t *\texec_path args to shell_name exec_path args\n\t\t\t */\n\t\t\tchar *p;\n\n\t\t\t/*  Make sure buf is NULL terminated */\n\t\t\tbuf[bytes_returned] = 0;\n\t\t\t/*\n\t\t\t * Depending on the file system type, etc. the first line\n\t\t\t * of the shell script may end with newline or newline-carriage-return\n\t\t\t * Whatever it ends with, cut it off.\n\t\t\t */\n\t\t\tp= strchr(buf, '\\n');\n\t\t\tif (p)\n\t\t\t\t*p = 0;\n\t\t\tp = strchr(buf, '\\r');\n\t\t\tif (p)\n\t\t\t\t*p = 0;\n\n\t\t\t/*\n\t\t\t *  Find base name of shell\n\t\t\t */\n\t\t\tshell_name = strrchr( buf, '/');\n\t\t\tif (shell_name) {\n\t\t\t\tshell_name++;\n\t\t\t} else {\n\t\t\t\tshell_name = &buf[2];/* skipping \"#!\" */\n\t\t\t}\n\n\t\t}\n\t\tCloseHandle(exec_handle);\n\t}\n\n\tflags = 0;\n\n\tif (file_not_found)\n\t\tcommand_line = make_command_line( shell_name, exec_path, argv);\n\telse\n\t\tcommand_line = make_command_line( shell_name, file_info.szPathName,\n\t\t\t\t argv);\n\n\tif ( command_line == NULL ) {\n\t\tpproc->last_err = 0;\n\t\tpproc->lerrno = E_NO_MEM;\n\t\treturn(-1);\n\t}\n\n\tif (envp) {\n\t\tif (arr2envblk(envp, &envblk) ==FALSE) {\n\t\t\tpproc->last_err = 0;\n\t\t\tpproc->lerrno = E_NO_MEM;\n\t\t\tfree( command_line );\n\t\t\treturn(-1);\n\t\t}\n\t}\n\n\tif ((shell_name) || (file_not_found)) {\n\t\texec_path = 0;\t/* Search for the program in %Path% */\n\t} else {\n\t\texec_path = file_info.szPathName;\n\t}\n\n\t/*\n\t *  Set up inherited stdin, stdout, stderr for child\n\t */\n\tGetStartupInfo(&startInfo);\n\tstartInfo.dwFlags = STARTF_USESTDHANDLES;\n\tstartInfo.lpReserved = 0;\n\tstartInfo.cbReserved2 = 0;\n\tstartInfo.lpReserved2 = 0;\n\tstartInfo.lpTitle = shell_name ? shell_name : exec_path;\n\tstartInfo.hStdInput = (HANDLE)pproc->sv_stdin[1];\n\tstartInfo.hStdOutput = (HANDLE)pproc->sv_stdout[1];\n\tstartInfo.hStdError = (HANDLE)pproc->sv_stderr[1];\n\n\tif (as_user) {\n\t\tif (envblk) free(envblk);\n\t\treturn -1;\n\t} else {\n\t\tDB (DB_JOBS, (\"CreateProcess(%s,%s,...)\\n\",\n\t\t\texec_path ? exec_path : \"NULL\",\n\t\t\tcommand_line ? command_line : \"NULL\"));\n\t\tif (CreateProcess(\n\t\t\texec_path,\n\t\t\tcommand_line,\n\t\t\tNULL,\n\t\t\t0, /* default security attributes for thread */\n\t\t\tTRUE, /* inherit handles (e.g. helper pipes, oserv socket) */\n\t\t\tflags,\n\t\t\tenvblk,\n\t\t\t0, /* default starting directory */\n\t\t\t&startInfo,\n\t\t\t&procInfo) == FALSE) {\n\n\t\t\tpproc->last_err = GetLastError();\n\t\t\tpproc->lerrno = E_FORK;\n\t\t\tfprintf(stderr, \"process_begin: CreateProcess(%s, %s, ...) failed.\\n\",\n                                exec_path ? exec_path : \"NULL\", command_line);\n\t\t\tif (envblk) free(envblk);\n\t\t\tfree( command_line );\n\t\t\treturn(-1);\n\t\t}\n\t}\n\n\tpproc->pid = (intptr_t)procInfo.hProcess;\n\t/* Close the thread handle -- we'll just watch the process */\n\tCloseHandle(procInfo.hThread);\n\n\t/* Close the halves of the pipes we don't need */\n        CloseHandle((HANDLE)pproc->sv_stdin[1]);\n        CloseHandle((HANDLE)pproc->sv_stdout[1]);\n        CloseHandle((HANDLE)pproc->sv_stderr[1]);\n        pproc->sv_stdin[1] = 0;\n        pproc->sv_stdout[1] = 0;\n        pproc->sv_stderr[1] = 0;\n\n\tfree( command_line );\n\tif (envblk) free(envblk);\n\tpproc->lerrno=0;\n\treturn 0;\n}\n\n\n\nstatic DWORD\nproc_stdin_thread(sub_process *pproc)\n{\n\tDWORD in_done;\n\tfor (;;) {\n\t\tif (WriteFile( (HANDLE) pproc->sv_stdin[0], pproc->inp, pproc->incnt,\n\t\t\t\t\t &in_done, NULL) == FALSE)\n\t\t\t_endthreadex(0);\n\t\t// This if should never be true for anonymous pipes, but gives\n\t\t// us a chance to change I/O mechanisms later\n\t\tif (in_done < pproc->incnt) {\n\t\t\tpproc->incnt -= in_done;\n\t\t\tpproc->inp += in_done;\n\t\t} else {\n\t\t\t_endthreadex(0);\n\t\t}\n\t}\n\treturn 0; // for compiler warnings only.. not reached\n}\n\nstatic DWORD\nproc_stdout_thread(sub_process *pproc)\n{\n\tDWORD bufsize = 1024;\n\tchar c;\n\tDWORD nread;\n\tpproc->outp = malloc(bufsize);\n\tif (pproc->outp == NULL)\n\t\t_endthreadex(0);\n\tpproc->outcnt = 0;\n\n\tfor (;;) {\n\t\tif (ReadFile( (HANDLE)pproc->sv_stdout[0], &c, 1, &nread, NULL)\n\t\t\t\t\t== FALSE) {\n/*\t\t\tmap_windows32_error_to_string(GetLastError());*/\n\t\t\t_endthreadex(0);\n\t\t}\n\t\tif (nread == 0)\n\t\t\t_endthreadex(0);\n\t\tif (pproc->outcnt + nread > bufsize) {\n\t\t\tbufsize += nread + 512;\n\t\t\tpproc->outp = realloc(pproc->outp, bufsize);\n\t\t\tif (pproc->outp == NULL) {\n\t\t\t\tpproc->outcnt = 0;\n\t\t\t\t_endthreadex(0);\n\t\t\t}\n\t\t}\n\t\tpproc->outp[pproc->outcnt++] = c;\n\t}\n\treturn 0;\n}\n\nstatic DWORD\nproc_stderr_thread(sub_process *pproc)\n{\n\tDWORD bufsize = 1024;\n\tchar c;\n\tDWORD nread;\n\tpproc->errp = malloc(bufsize);\n\tif (pproc->errp == NULL)\n\t\t_endthreadex(0);\n\tpproc->errcnt = 0;\n\n\tfor (;;) {\n\t\tif (ReadFile( (HANDLE)pproc->sv_stderr[0], &c, 1, &nread, NULL) == FALSE) {\n\t\t\tmap_windows32_error_to_string(GetLastError());\n\t\t\t_endthreadex(0);\n\t\t}\n\t\tif (nread == 0)\n\t\t\t_endthreadex(0);\n\t\tif (pproc->errcnt + nread > bufsize) {\n\t\t\tbufsize += nread + 512;\n\t\t\tpproc->errp = realloc(pproc->errp, bufsize);\n\t\t\tif (pproc->errp == NULL) {\n\t\t\t\tpproc->errcnt = 0;\n\t\t\t\t_endthreadex(0);\n\t\t\t}\n\t\t}\n\t\tpproc->errp[pproc->errcnt++] = c;\n\t}\n\treturn 0;\n}\n\n\n/*\n * Purpose: collects output from child process and returns results\n *\n * Description:\n *\n * Returns:\n *\n * Notes/Dependencies:\n */\n\tlong\nprocess_pipe_io(\n\tHANDLE proc,\n\tchar *stdin_data,\n\tint stdin_data_len)\n{\n\tsub_process *pproc = (sub_process *)proc;\n\tbool_t stdin_eof = FALSE, stdout_eof = FALSE, stderr_eof = FALSE;\n\tHANDLE childhand = (HANDLE) pproc->pid;\n\tHANDLE tStdin = NULL, tStdout = NULL, tStderr = NULL;\n\tunsigned int dwStdin, dwStdout, dwStderr;\n\tHANDLE wait_list[4];\n\tDWORD wait_count;\n\tDWORD wait_return;\n\tHANDLE ready_hand;\n\tbool_t child_dead = FALSE;\n\tBOOL GetExitCodeResult;\n\n\t/*\n\t *  Create stdin thread, if needed\n\t */\n\tpproc->inp = stdin_data;\n\tpproc->incnt = stdin_data_len;\n\tif (!pproc->inp) {\n\t\tstdin_eof = TRUE;\n\t\tCloseHandle((HANDLE)pproc->sv_stdin[0]);\n\t\tpproc->sv_stdin[0] = 0;\n\t} else {\n\t\ttStdin = (HANDLE) _beginthreadex( 0, 1024,\n\t\t\t(unsigned (__stdcall *) (void *))proc_stdin_thread,\n\t\t\t\t\t\t  pproc, 0, &dwStdin);\n\t\tif (tStdin == 0) {\n\t\t\tpproc->last_err = GetLastError();\n\t\t\tpproc->lerrno = E_SCALL;\n\t\t\tgoto done;\n\t\t}\n\t}\n\n\t/*\n\t *   Assume child will produce stdout and stderr\n\t */\n\ttStdout = (HANDLE) _beginthreadex( 0, 1024,\n\t\t(unsigned (__stdcall *) (void *))proc_stdout_thread, pproc, 0,\n\t\t&dwStdout);\n\ttStderr = (HANDLE) _beginthreadex( 0, 1024,\n\t\t(unsigned (__stdcall *) (void *))proc_stderr_thread, pproc, 0,\n\t\t&dwStderr);\n\n\tif (tStdout == 0 || tStderr == 0) {\n\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t\tgoto done;\n\t}\n\n\n\t/*\n\t *  Wait for all I/O to finish and for the child process to exit\n\t */\n\n\twhile (!stdin_eof || !stdout_eof || !stderr_eof || !child_dead) {\n\t\twait_count = 0;\n\t\tif (!stdin_eof) {\n\t\t\twait_list[wait_count++] = tStdin;\n\t\t}\n\t\tif (!stdout_eof) {\n\t\t\twait_list[wait_count++] = tStdout;\n\t\t}\n\t\tif (!stderr_eof) {\n\t\t\twait_list[wait_count++] = tStderr;\n\t\t}\n\t\tif (!child_dead) {\n\t\t\twait_list[wait_count++] = childhand;\n\t\t}\n\n\t\twait_return = WaitForMultipleObjects(wait_count, wait_list,\n\t\t\t FALSE, /* don't wait for all: one ready will do */\n\t\t\t child_dead? 1000 :INFINITE); /* after the child dies, subthreads have\n\t\t\t \tone second to collect all remaining output */\n\n\t\tif (wait_return == WAIT_FAILED) {\n/*\t\t\tmap_windows32_error_to_string(GetLastError());*/\n\t\t\tpproc->last_err = GetLastError();\n\t\t\tpproc->lerrno = E_SCALL;\n\t\t\tgoto done;\n\t\t}\n\n\t\tready_hand = wait_list[wait_return - WAIT_OBJECT_0];\n\n\t\tif (ready_hand == tStdin) {\n\t\t\tCloseHandle((HANDLE)pproc->sv_stdin[0]);\n\t\t\tpproc->sv_stdin[0] = 0;\n\t\t\tCloseHandle(tStdin);\n\t\t\ttStdin = 0;\n\t\t\tstdin_eof = TRUE;\n\n\t\t} else if (ready_hand == tStdout) {\n\n\t\t  \tCloseHandle((HANDLE)pproc->sv_stdout[0]);\n\t\t\tpproc->sv_stdout[0] = 0;\n\t\t\tCloseHandle(tStdout);\n\t\t\ttStdout = 0;\n\t\t  \tstdout_eof = TRUE;\n\n\t\t} else if (ready_hand == tStderr) {\n\n\t\t\tCloseHandle((HANDLE)pproc->sv_stderr[0]);\n\t\t\tpproc->sv_stderr[0] = 0;\n\t\t\tCloseHandle(tStderr);\n\t\t\ttStderr = 0;\n\t\t\tstderr_eof = TRUE;\n\n\t\t} else if (ready_hand == childhand) {\n\n\t\t\tDWORD ierr;\n\t\t\tGetExitCodeResult = GetExitCodeProcess(childhand, &ierr);\n\t\t\tif (ierr == CONTROL_C_EXIT) {\n\t\t\t\tpproc->signal = SIGINT;\n\t\t\t} else {\n\t\t\t\tpproc->exit_code = ierr;\n\t\t\t}\n\t\t\tif (GetExitCodeResult == FALSE) {\n\t\t\t\tpproc->last_err = GetLastError();\n\t\t\t\tpproc->lerrno = E_SCALL;\n\t\t\t\tgoto done;\n\t\t\t}\n\t\t\tchild_dead = TRUE;\n\n\t\t} else {\n\n\t\t\t/* ?? Got back a handle we didn't query ?? */\n\t\t\tpproc->last_err = 0;\n\t\t\tpproc->lerrno = E_FAIL;\n\t\t\tgoto done;\n\t\t}\n\t}\n\n done:\n\tif (tStdin != 0)\n\t\tCloseHandle(tStdin);\n\tif (tStdout != 0)\n\t\tCloseHandle(tStdout);\n\tif (tStderr != 0)\n\t\tCloseHandle(tStderr);\n\n\tif (pproc->lerrno)\n\t\treturn(-1);\n\telse\n\t\treturn(0);\n\n}\n\n/*\n * Purpose: collects output from child process and returns results\n *\n * Description:\n *\n * Returns:\n *\n * Notes/Dependencies:\n */\n\tlong\nprocess_file_io(\n\tHANDLE proc)\n{\n\tsub_process *pproc;\n\tHANDLE childhand;\n\tDWORD wait_return;\n\tBOOL GetExitCodeResult;\n        DWORD ierr;\n\n\tif (proc == NULL)\n\t\tpproc = process_wait_for_any_private();\n\telse\n\t\tpproc = (sub_process *)proc;\n\n\t/* some sort of internal error */\n\tif (!pproc)\n\t\treturn -1;\n\n\tchildhand = (HANDLE) pproc->pid;\n\n\t/*\n\t * This function is poorly named, and could also be used just to wait\n\t * for child death if you're doing your own pipe I/O.  If that is\n\t * the case, close the pipe handles here.\n\t */\n\tif (pproc->sv_stdin[0]) {\n\t\tCloseHandle((HANDLE)pproc->sv_stdin[0]);\n\t\tpproc->sv_stdin[0] = 0;\n\t}\n\tif (pproc->sv_stdout[0]) {\n\t\tCloseHandle((HANDLE)pproc->sv_stdout[0]);\n\t\tpproc->sv_stdout[0] = 0;\n\t}\n\tif (pproc->sv_stderr[0]) {\n\t\tCloseHandle((HANDLE)pproc->sv_stderr[0]);\n\t\tpproc->sv_stderr[0] = 0;\n\t}\n\n\t/*\n\t *  Wait for the child process to exit\n\t */\n\n\twait_return = WaitForSingleObject(childhand, INFINITE);\n\n\tif (wait_return != WAIT_OBJECT_0) {\n/*\t\tmap_windows32_error_to_string(GetLastError());*/\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t\tgoto done2;\n\t}\n\n\tGetExitCodeResult = GetExitCodeProcess(childhand, &ierr);\n\tif (ierr == CONTROL_C_EXIT) {\n\t\tpproc->signal = SIGINT;\n\t} else {\n\t\tpproc->exit_code = ierr;\n\t}\n\tif (GetExitCodeResult == FALSE) {\n\t\tpproc->last_err = GetLastError();\n\t\tpproc->lerrno = E_SCALL;\n\t}\n\ndone2:\n\tif (pproc->lerrno)\n\t\treturn(-1);\n\telse\n\t\treturn(0);\n\n}\n\n/*\n * Description:  Clean up any leftover handles, etc.  It is up to the\n * caller to manage and free the input, ouput, and stderr buffers.\n */\n\tvoid\nprocess_cleanup(\n\tHANDLE proc)\n{\n\tsub_process *pproc = (sub_process *)proc;\n\tint i;\n\n\tif (pproc->using_pipes) {\n\t\tfor (i= 0; i <= 1; i++) {\n\t\t\tif ((HANDLE)pproc->sv_stdin[i])\n\t\t\t\tCloseHandle((HANDLE)pproc->sv_stdin[i]);\n\t\t\tif ((HANDLE)pproc->sv_stdout[i])\n\t\t\t\tCloseHandle((HANDLE)pproc->sv_stdout[i]);\n\t\t\tif ((HANDLE)pproc->sv_stderr[i])\n\t\t\t\tCloseHandle((HANDLE)pproc->sv_stderr[i]);\n\t\t}\n\t}\n\tif ((HANDLE)pproc->pid)\n\t\tCloseHandle((HANDLE)pproc->pid);\n\n\tfree(pproc);\n}\n\n\n/*\n * Description:\n *\t Create a command line buffer to pass to CreateProcess\n *\n * Returns:  the buffer or NULL for failure\n *\tShell case:  sh_name a:/full/path/to/script argv[1] argv[2] ...\n *  Otherwise:   argv[0] argv[1] argv[2] ...\n *\n * Notes/Dependencies:\n *   CreateProcess does not take an argv, so this command creates a\n *   command line for the executable.\n */\n\nstatic char *\nmake_command_line( char *shell_name, char *full_exec_path, char **argv)\n{\n\tint\t\targc = 0;\n\tchar**\t\targvi;\n\tint*\t\tenclose_in_quotes = NULL;\n\tint*\t\tenclose_in_quotes_i;\n\tunsigned int\tbytes_required = 0;\n\tchar*\t\tcommand_line;\n\tchar*\t\tcommand_line_i;\n\tint  cygwin_mode = 0; /* HAVE_CYGWIN_SHELL */\n\tint have_sh = 0; /* HAVE_CYGWIN_SHELL */\n\n#ifdef HAVE_CYGWIN_SHELL\n\thave_sh = (shell_name != NULL || strstr(full_exec_path, \"sh.exe\"));\n\tcygwin_mode = 1;\n#endif\n\n\tif (shell_name && full_exec_path) {\n\t\tbytes_required\n\t\t  = strlen(shell_name) + 1 + strlen(full_exec_path);\n\t\t/*\n\t\t * Skip argv[0] if any, when shell_name is given.\n\t\t */\n\t\tif (*argv) argv++;\n\t\t/*\n\t\t * Add one for the intervening space.\n\t\t */\n\t\tif (*argv) bytes_required++;\n\t}\n\n\targvi = argv;\n\twhile (*(argvi++)) argc++;\n\n\tif (argc) {\n\t\tenclose_in_quotes = (int*) calloc(1, argc * sizeof(int));\n\n\t\tif (!enclose_in_quotes) {\n\t\t\treturn NULL;\n\t\t}\n\t}\n\n\t/* We have to make one pass through each argv[i] to see if we need\n\t * to enclose it in \", so we might as well figure out how much\n\t * memory we'll need on the same pass.\n\t */\n\n\targvi = argv;\n\tenclose_in_quotes_i = enclose_in_quotes;\n\twhile(*argvi) {\n\t\tchar* p = *argvi;\n\t\tunsigned int backslash_count = 0;\n\n\t\t/*\n\t\t * We have to enclose empty arguments in \".\n\t\t */\n\t\tif (!(*p)) *enclose_in_quotes_i = 1;\n\n\t\twhile(*p) {\n\t\t\tswitch (*p) {\n\t\t\tcase '\\\"':\n\t\t\t\t/*\n\t\t\t\t * We have to insert a backslash for each \"\n\t\t\t\t * and each \\ that precedes the \".\n\t\t\t\t */\n\t\t\t\tbytes_required += (backslash_count + 1);\n\t\t\t\tbackslash_count = 0;\n\t\t\t\tbreak;\n\n#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL)\n\t\t\tcase '\\\\':\n\t\t\t\tbackslash_count++;\n\t\t\t\tbreak;\n#endif\n\t/*\n\t * At one time we set *enclose_in_quotes_i for '*' or '?' to suppress\n\t * wildcard expansion in programs linked with MSVC's SETARGV.OBJ so\n\t * that argv in always equals argv out. This was removed.  Say you have\n\t * such a program named glob.exe.  You enter\n\t * glob '*'\n\t * at the sh command prompt.  Obviously the intent is to make glob do the\n\t * wildcarding instead of sh.  If we set *enclose_in_quotes_i for '*' or '?',\n\t * then the command line that glob would see would be\n\t * glob \"*\"\n\t * and the _setargv in SETARGV.OBJ would _not_ expand the *.\n\t */\n\t\t\tcase ' ':\n\t\t\tcase '\\t':\n\t\t\t\t*enclose_in_quotes_i = 1;\n\t\t\t\t/* fall through */\n\n\t\t\tdefault:\n\t\t\t\tbackslash_count = 0;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Add one for each character in argv[i].\n\t\t\t */\n\t\t\tbytes_required++;\n\n\t\t\tp++;\n\t\t}\n\n\t\tif (*enclose_in_quotes_i) {\n\t\t\t/*\n\t\t\t * Add one for each enclosing \",\n\t\t\t * and one for each \\ that precedes the\n\t\t\t * closing \".\n\t\t\t */\n\t\t\tbytes_required += (backslash_count + 2);\n\t\t}\n\n\t\t/*\n\t\t * Add one for the intervening space.\n\t\t */\n\t\tif (*(++argvi)) bytes_required++;\n\t\tenclose_in_quotes_i++;\n\t}\n\n\t/*\n\t * Add one for the terminating NULL.\n\t */\n\tbytes_required++;\n\n\tcommand_line = (char*) malloc(bytes_required);\n\n\tif (!command_line) {\n\t\tif (enclose_in_quotes) free(enclose_in_quotes);\n\t\treturn NULL;\n\t}\n\n\tcommand_line_i = command_line;\n\n\tif (shell_name && full_exec_path) {\n\t\twhile(*shell_name) {\n\t\t\t*(command_line_i++) = *(shell_name++);\n\t\t}\n\n\t\t*(command_line_i++) = ' ';\n\n\t\twhile(*full_exec_path) {\n\t\t\t*(command_line_i++) = *(full_exec_path++);\n\t\t}\n\n\t\tif (*argv) {\n\t\t\t*(command_line_i++) = ' ';\n\t\t}\n\t}\n\n\targvi = argv;\n\tenclose_in_quotes_i = enclose_in_quotes;\n\n\twhile(*argvi) {\n\t\tchar* p = *argvi;\n\t\tunsigned int backslash_count = 0;\n\n\t\tif (*enclose_in_quotes_i) {\n\t\t\t*(command_line_i++) = '\\\"';\n\t\t}\n\n\t\twhile(*p) {\n\t\t\tif (*p == '\\\"') {\n\t\t\t\tif (cygwin_mode && have_sh) { /* HAVE_CYGWIN_SHELL */\n\t\t\t\t\t/* instead of a \\\", cygwin likes \"\" */\n\t\t\t\t\t*(command_line_i++) = '\\\"';\n\t\t\t\t} else {\n\n\t\t\t\t/*\n\t\t\t\t * We have to insert a backslash for the \"\n\t\t\t\t * and each \\ that precedes the \".\n\t\t\t\t */\n\t\t\t\tbackslash_count++;\n\n\t\t\t\twhile(backslash_count) {\n\t\t\t\t\t*(command_line_i++) = '\\\\';\n\t\t\t\t\tbackslash_count--;\n\t\t\t\t};\n\t\t\t\t}\n#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL)\n\t\t\t} else if (*p == '\\\\') {\n\t\t\t\tbackslash_count++;\n\t\t\t} else {\n\t\t\t\tbackslash_count = 0;\n#endif\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Copy the character.\n\t\t\t */\n\t\t\t*(command_line_i++) = *(p++);\n\t\t}\n\n\t\tif (*enclose_in_quotes_i) {\n#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL)\n\t\t\t/*\n\t\t\t * Add one \\ for each \\ that precedes the\n\t\t\t * closing \".\n\t\t\t */\n\t\t\twhile(backslash_count--) {\n\t\t\t\t*(command_line_i++) = '\\\\';\n\t\t\t};\n#endif\n\t\t\t*(command_line_i++) = '\\\"';\n\t\t}\n\n\t\t/*\n\t\t * Append an intervening space.\n\t\t */\n\t\tif (*(++argvi)) {\n\t\t\t*(command_line_i++) = ' ';\n\t\t}\n\n\t\tenclose_in_quotes_i++;\n\t}\n\n\t/*\n\t * Append the terminating NULL.\n\t */\n\t*command_line_i = '\\0';\n\n\tif (enclose_in_quotes) free(enclose_in_quotes);\n\treturn command_line;\n}\n\n/*\n * Description: Given an argv and optional envp, launch the process\n *              using the default stdin, stdout, and stderr handles.\n *              Also, register process so that process_wait_for_any_private()\n *\t\tcan be used via process_file_io(NULL) or\n *\t\tprocess_wait_for_any().\n *\n * Returns:\n *\n * Notes/Dependencies:\n */\nHANDLE\nprocess_easy(\n\tchar **argv,\n\tchar **envp)\n{\n  HANDLE hIn;\n  HANDLE hOut;\n  HANDLE hErr;\n  HANDLE hProcess;\n\n  if (proc_index >= MAXIMUM_WAIT_OBJECTS) {\n\tDB (DB_JOBS, (\"process_easy: All process slots used up\\n\"));\n\treturn INVALID_HANDLE_VALUE;\n  }\n  if (DuplicateHandle(GetCurrentProcess(),\n                      GetStdHandle(STD_INPUT_HANDLE),\n                      GetCurrentProcess(),\n                      &hIn,\n                      0,\n                      TRUE,\n                      DUPLICATE_SAME_ACCESS) == FALSE) {\n    fprintf(stderr,\n            \"process_easy: DuplicateHandle(In) failed (e=%ld)\\n\",\n            GetLastError());\n    return INVALID_HANDLE_VALUE;\n  }\n  if (DuplicateHandle(GetCurrentProcess(),\n                      GetStdHandle(STD_OUTPUT_HANDLE),\n                      GetCurrentProcess(),\n                      &hOut,\n                      0,\n                      TRUE,\n                      DUPLICATE_SAME_ACCESS) == FALSE) {\n    fprintf(stderr,\n           \"process_easy: DuplicateHandle(Out) failed (e=%ld)\\n\",\n           GetLastError());\n    return INVALID_HANDLE_VALUE;\n  }\n  if (DuplicateHandle(GetCurrentProcess(),\n                      GetStdHandle(STD_ERROR_HANDLE),\n                      GetCurrentProcess(),\n                      &hErr,\n                      0,\n                      TRUE,\n                      DUPLICATE_SAME_ACCESS) == FALSE) {\n    fprintf(stderr,\n            \"process_easy: DuplicateHandle(Err) failed (e=%ld)\\n\",\n            GetLastError());\n    return INVALID_HANDLE_VALUE;\n  }\n\n  hProcess = process_init_fd(hIn, hOut, hErr);\n\n  if (process_begin(hProcess, argv, envp, argv[0], NULL)) {\n    fake_exits_pending++;\n    /* process_begin() failed: make a note of that.  */\n    if (!((sub_process*) hProcess)->last_err)\n      ((sub_process*) hProcess)->last_err = -1;\n    ((sub_process*) hProcess)->exit_code = process_last_err(hProcess);\n\n    /* close up unused handles */\n    CloseHandle(hIn);\n    CloseHandle(hOut);\n    CloseHandle(hErr);\n  }\n\n  process_register(hProcess);\n\n  return hProcess;\n}\n"
  },
  {
    "path": "sources/host-tools/make-3.81/w32/subproc/w32err.c",
    "content": "/* Error handling for Windows\r\nCopyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,\r\n2006 Free Software Foundation, Inc.\r\nThis file is part of GNU Make.\r\n\r\nGNU Make is free software; you can redistribute it and/or modify it under the\r\nterms of the GNU General Public License as published by the Free Software\r\nFoundation; either version 2, or (at your option) any later version.\r\n\r\nGNU Make is distributed in the hope that it will be useful, but WITHOUT ANY\r\nWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r\nA PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with\r\nGNU Make; see the file COPYING.  If not, write to the Free Software\r\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */\r\n\r\n#include <windows.h>\r\n#include \"w32err.h\"\r\n\r\n/*\r\n * Description: the windows32 version of perror()\r\n *\r\n * Returns:  a pointer to a static error\r\n *\r\n * Notes/Dependencies:  I got this from\r\n *      comp.os.ms-windows.programmer.win32\r\n */\r\nchar *\r\nmap_windows32_error_to_string (DWORD ercode) {\r\n/* __declspec (thread) necessary if you will use multiple threads on MSVC */\r\n#ifdef _MSC_VER\r\n__declspec (thread) static char szMessageBuffer[128];\r\n#else\r\nstatic char szMessageBuffer[128];\r\n#endif\r\n\t/* Fill message buffer with a default message in\r\n\t * case FormatMessage fails\r\n\t */\r\n    wsprintf (szMessageBuffer, \"Error %ld\\n\", ercode);\r\n\r\n\t/*\r\n\t *  Special code for winsock error handling.\r\n\t */\r\n\tif (ercode > WSABASEERR) {\r\n\t\tHMODULE hModule = GetModuleHandle(\"wsock32\");\r\n\t\tif (hModule != NULL) {\r\n\t\t\tFormatMessage(FORMAT_MESSAGE_FROM_HMODULE,\r\n\t\t\t\thModule,\r\n\t\t\t\tercode,\r\n\t\t\t\tLANG_NEUTRAL,\r\n\t\t\t\tszMessageBuffer,\r\n\t\t\t\tsizeof(szMessageBuffer),\r\n\t\t\t\tNULL);\r\n\t\t\tFreeLibrary(hModule);\r\n\t\t}\r\n\t} else {\r\n\t\t/*\r\n\t\t *  Default system message handling\r\n\t\t */\r\n    \tFormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,\r\n                  NULL,\r\n                  ercode,\r\n                  LANG_NEUTRAL,\r\n                  szMessageBuffer,\r\n                  sizeof(szMessageBuffer),\r\n                  NULL);\r\n\t}\r\n    return szMessageBuffer;\r\n}\r\n\r\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/FIXES",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\nThis file lists all bug fixes, changes, etc., made since the AWK book\nwas sent to the printers in August, 1987.\n\nOct 23, 2007:\n\tminor fix in lib.c: increase inputFS to 100, change malloc\n\tfor fields to n+1.  \n\n\tfixed memory fault caused by out of order test in setsval.\n\n\tthanks to david o'brien, freebsd, for both fixes.\n\nMay 1, 2007:\n\tfiddle in makefile to fix for BSD make; thanks to igor sobrado.\n\nMar 31, 2007:\n\tfixed some null pointer refs calling adjbuf.\n\nFeb 21, 2007:\n\tfixed a bug in matching the null RE in sub and gsub.  thanks to al aho\n\twho actually did the fix (in b.c), and to wolfgang seeberg for finding\n\tit and providing a very compact test case.\n\n\tfixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante\n\tProject.\n\n\tremoved some no-effect asserts in run.c.\n\n\tfiddled maketab.c to not complain about bison-generated values.\n\n\tremoved the obsolete -V argument; fixed --version to print the\n\tversion and exit.\n\n\tfixed wording and an outright error in the usage message; thanks to igor\n\tsobrado and jason mcintyre.\n\n\tfixed a bug in -d that caused core dump if no program followed.\n\nJan 1, 2007:\n\tdropped mac.code from makefile; there are few non-MacOSX\n\tmac's these days.\n\nJan 17, 2006:\n\tsystem() not flagged as unsafe in the unadvertised -safe option.\n\tfound it while enhancing tests before shipping the ;login: article.\n\tpractice what you preach.\n\n\tremoved the 9-years-obsolete -mr and -mf flags.\n\n\tadded -version and --version options.\n\n\tcore dump on linux with BEGIN {nextfile}, now fixed.\n\n\tremoved some #ifdef's in run.c and lex.c that appear to no \n\tlonger be necessary.\n\nApr 24, 2005:\n\tmodified lib.c so that values of $0 et al are preserved in the END\n\tblock, apparently as required by posix.  thanks to havard eidnes\n\tfor the report and code.\n\nJan 14, 2005:\n\tfixed infinite loop in parsing, originally found by brian tsang.\n\tthanks to arnold robbins for a suggestion that started me\n\trethinking it.\n\nDec 31, 2004:\n\tprevent overflow of -f array in main, head off potential error in \n\tcall of SYNTAX(), test malloc return in lib.c, all with thanks to \n\ttodd miller.\n\nDec 22, 2004:\n\tcranked up size of NCHARS; coverity thinks it can be overrun with\n\tsmaller size, and i think that's right.  added some assertions to b.c\n\tto catch places where it might overrun.  the RE code is still fragile.\n\nDec 5, 2004:\n\tfixed a couple of overflow problems with ridiculous field numbers:\n\te.g., print $(2^32-1).  thanks to ruslan ermilov, giorgos keramidas\n\tand david o'brien at freebsd.org for patches.  this really should\n\tbe re-done from scratch.\n\nNov 21, 2004:\n\tfixed another 25-year-old RE bug, in split.  it's another failure\n\tto (re-)initialize.  thanks to steve fisher for spotting this and\n\tproviding a good test case.\n\nNov 22, 2003:\n\tfixed a bug in regular expressions that dates (so help me) from 1977;\n\tit's been there from the beginning.  an anchored longest match that\n\twas longer than the number of states triggered a failure to initialize\n\tthe machine properly.  many thanks to moinak ghosh for not only finding\n\tthis one but for providing a fix, in some of the most mysterious\n\tcode known to man.\n\n\tfixed a storage leak in call() that appears to have been there since\n\t1983 or so -- a function without an explicit return that assigns a \n\tstring to a parameter leaked a Cell.  thanks to moinak ghosh for \n\tspotting this very subtle one.\n\nJul 31, 2003:\n\tfixed, thanks to andrey chernov and ruslan ermilov, a bug in lex.c\n\tthat mis-handled the character 255 in input.  (it was being compared\n\tto EOF with a signed comparison.)\n\nJul 29, 2003:\n\tfixed (i think) the long-standing botch that included the beginning of\n\tline state ^ for RE's in the set of valid characters; this led to a\n\tvariety of odd problems, including failure to properly match certain\n\tregular expressions in non-US locales.  thanks to ruslan for keeping\n\tat this one.\n\nJul 28, 2003:\n\tn-th try at getting internationalization right, with thanks to volker\n\tkiefel, arnold robbins and ruslan ermilov for advice, though they\n\tshould not be blamed for the outcome.  according to posix, \".\"  is the\n\tradix character in programs and command line arguments regardless of\n\tthe locale; otherwise, the locale should prevail for input and output\n\tof numbers.  so it's intended to work that way.\n\t\n\ti have rescinded the attempt to use strcoll in expanding shorthands in\n\tregular expressions (cclenter).  its properties are much too\n\tsurprising; for example [a-c] matches aAbBc in locale en_US but abBcC\n\tin locale fr_CA.  i can see how this might arise by implementation\n\tbut i cannot explain it to a human user.  (this behavior can be seen\n\tin gawk as well; we're leaning on the same library.)\n\n\tthe issue appears to be that strcoll is meant for sorting, where\n\tmerging upper and lower case may make sense (though note that unix\n\tsort does not do this by default either).  it is not appropriate\n\tfor regular expressions, where the goal is to match specific\n\tpatterns of characters.  in any case, the notations [:lower:], etc.,\n\tare available in awk, and they are more likely to work correctly in\n\tmost locales.\n\n\ta moratorium is hereby declared on internationalization changes.\n\ti apologize to friends and colleagues in other parts of the world.\n\ti would truly like to get this \"right\", but i don't know what\n\tthat is, and i do not want to keep making changes until it's clear.\n\nJul 4, 2003:\n\tfixed bug that permitted non-terminated RE, as in \"awk /x\".\n\nJun 1, 2003:\n\tsubtle change to split: if source is empty, number of elems\n\tis always 0 and the array is not set.\n\nMar 21, 2003:\n\tadded some parens to isblank, in another attempt to make things\n\tinternationally portable.\n\nMar 14, 2003:\n\tthe internationalization changes, somewhat modified, are now\n\treinstated.  in theory awk will now do character comparisons\n\tand case conversions in national language, but \".\" will always\n\tbe the decimal point separator on input and output regardless\n\tof national language.  isblank(){} has an #ifndef.\n\n\tthis no longer compiles on windows: LC_MESSAGES isn't defined\n\tin vc6++.\n\n\tfixed subtle behavior in field and record splitting: if FS is\n\ta single character and RS is not empty, \\n is NOT a separator.\n\tthis tortuous reading is found in the awk book; behavior now\n\tmatches gawk and mawk.\n\nDec 13, 2002:\n\tfor the moment, the internationalization changes of nov 29 are\n\trolled back -- programs like x = 1.2 don't work in some locales,\n\tbecause the parser is expecting x = 1,2.  until i understand this\n\tbetter, this will have to wait.\n\nNov 29, 2002:\n\tmodified b.c (with tiny changes in main and run) to support\n\tlocales, using strcoll and iswhatever tests for posix character\n\tclasses.  thanks to ruslan ermilov (ru@freebsd.org) for code.\n\tthe function isblank doesn't seem to have propagated to any\n\theader file near me, so it's there explicitly.  not properly\n\ttested on non-ascii character sets by me.\n\nJun 28, 2002:\n\tmodified run/format() and tran/getsval() to do a slightly better\n\tjob on using OFMT for output from print and CONVFMT for other\n\tnumber->string conversions, as promised by posix and done by \n\tgawk and mawk.  there are still places where it doesn't work\n\tright if CONVFMT is changed; by then the STR attribute of the\n\tvariable has been irrevocably set.  thanks to arnold robbins for\n\tcode and examples.\n\n\tfixed subtle bug in format that could get core dump.  thanks to\n\tJaromir Dolecek <jdolecek@NetBSD.org> for finding and fixing.\n\tminor cleanup in run.c / format() at the same time.\n\n\tadded some tests for null pointers to debugging printf's, which\n\twere never intended for external consumption.  thanks to dave\n\tkerns (dkerns@lucent.com) for pointing this out.\n\n\tGNU compatibility: an empty regexp matches anything (thanks to\n\tdag-erling smorgrav, des@ofug.org).  subject to reversion if\n\tthis does more harm than good.\n\n\tpervasive small changes to make things more const-correct, as\n\treported by gcc's -Wwrite-strings.  as it says in the gcc manual,\n\tthis may be more nuisance than useful.  provoked by a suggestion\n\tand code from arnaud desitter, arnaud@nimbus.geog.ox.ac.uk\n\n\tminor documentation changes to note that this now compiles out\n\tof the box on Mac OS X.\n\nFeb 10, 2002:\n\tchanged types in posix chars structure to quiet solaris cc.\n\nJan 1, 2002:\n\tfflush() or fflush(\"\") flushes all files and pipes.\n\n\tlength(arrayname) returns number of elements; thanks to \n\tarnold robbins for suggestion.\n\n\tadded a makefile.win to make it easier to build on windows.\n\tbased on dan allen's buildwin.bat.\n\nNov 16, 2001:\n\tadded support for posix character class names like [:digit:],\n\twhich are not exactly shorter than [0-9] and perhaps no more\n\tportable.  thanks to dag-erling smorgrav for code.\n\nFeb 16, 2001:\n\tremoved -m option; no longer needed, and it was actually\n\tbroken (noted thanks to volker kiefel).\n\nFeb 10, 2001:\n\tfixed an appalling bug in gettok: any sequence of digits, +,-, E, e,\n\tand period was accepted as a valid number if it started with a period.\n\tthis would never have happened with the lex version.\n\n\tother 1-character botches, now fixed, include a bare $ and a\n\tbare \" at the end of the input.\n\nFeb 7, 2001:\n\tmore (const char *) casts in b.c and tran.c to silence warnings.\n\nNov 15, 2000:\n\tfixed a bug introduced in august 1997 that caused expressions\n\tlike $f[1] to be syntax errors.  thanks to arnold robbins for\n\tnoticing this and providing a fix.\n\nOct 30, 2000:\n\tfixed some nextfile bugs: not handling all cases.  thanks to\n\tarnold robbins for pointing this out.  new regressions added.\n\n\tclose() is now a function.  it returns whatever the library\n\tfclose returns, and -1 for closing a file or pipe that wasn't\n\topened.\n\nSep 24, 2000:\n\tpermit \\n explicitly in character classes; won't work right\n\tif comes in as \"[\\n]\" but ok as /[\\n]/, because of multiple\n\tprocessing of \\'s.  thanks to arnold robbins.\n\nJuly 5, 2000:\n\tminor fiddles in tran.c to keep compilers happy about uschar.\n\tthanks to norman wilson.\n\nMay 25, 2000:\n\tyet another attempt at making 8-bit input work, with another\n\tband-aid in b.c (member()), and some (uschar) casts to head \n\toff potential errors in subscripts (like isdigit).  also\n\tchanged HAT to NCHARS-2.  thanks again to santiago vila.\n\n\tchanged maketab.c to ignore apparently out of range definitions\n\tinstead of halting; new freeBSD generates one.  thanks to\n\tjon snader <jsnader@ix.netcom.com> for pointing out the problem.\n\nMay 2, 2000:\n\tfixed an 8-bit problem in b.c by making several char*'s into\n\tunsigned char*'s.  not clear i have them all yet.  thanks to\n\tSantiago Vila <sanvila@unex.es> for the bug report.\n\nApr 21, 2000:\n\tfinally found and fixed a memory leak in function call; it's\n\tbeen there since functions were added ~1983.  thanks to\n\tjon bentley for the test case that found it.\n\n\tadded test in envinit to catch environment \"variables\" with\n\tnames beginning with '='; thanks to Berend Hasselman.\n\nJul 28, 1999:\n\tadded test in defn() to catch function foo(foo), which\n\totherwise recurses until core dump.  thanks to arnold\n\trobbins for noticing this.\n\nJun 20, 1999:\n\tadded *bp in gettok in lex.c; appears possible to exit function\n\twithout terminating the string.  thanks to russ cox.\n\nJun 2, 1999:\n\tadded function stdinit() to run to initialize files[] array,\n\tin case stdin, etc., are not constants; some compilers care.\n\nMay 10, 1999:\n\treplaced the ERROR ... FATAL, etc., macros with functions\n\tbased on vprintf, to avoid problems caused by overrunning\n\tfixed-size errbuf array.  thanks to ralph corderoy for the\n\timpetus, and for pointing out a string termination bug in\n\tqstring as well.\n\nApr 21, 1999:\n\tfixed bug that caused occasional core dumps with commandline\n\tvariable with value ending in \\.  (thanks to nelson beebe for\n\tthe test case.)\n\nApr 16, 1999:\n\twith code kindly provided by Bruce Lilly, awk now parses \n\t/=/ and similar constructs more sensibly in more places.\n\tBruce also provided some helpful test cases.\n\nApr 5, 1999:\n\tchanged true/false to True/False in run.c to make it\n\teasier to compile with C++.  Added some casts on malloc\n\tand realloc to be honest about casts; ditto.  changed\n\tltype int to long in struct rrow to reduce some 64-bit\n\tcomplaints; other changes scattered throughout for the\n\tsame purpose.  thanks to Nelson Beebe for these portability\n\timprovements.\n\n\tremoved some horrible pointer-int casting in b.c and elsewhere\n\tby adding ptoi and itonp to localize the casts, which are\n\tall benign.  fixed one incipient bug that showed up on sgi\n\tin 64-bit mode.\n\n\treset lineno for new source file; include filename in error\n\tmessage.  also fixed line number error in continuation lines.\n\t(thanks to Nelson Beebe for both of these.)\n\nMar 24, 1999:\n\tNelson Beebe notes that irix 5.3 yacc dies with a bogus\n\terror; use a newer version or switch to bison, since sgi\n\tis unlikely to fix it.\n\nMar 5, 1999:\n\tchanged isnumber to is_number to avoid the problem caused by\n\tversions of ctype.h that include the name isnumber.\n\n\tdistribution now includes a script for building on a Mac,\n\tthanks to Dan Allen.\n\nFeb 20, 1999:\n\tfixed memory leaks in run.c (call) and tran.c (setfval).\n\tthanks to Stephen Nutt for finding these and providing the fixes.\n\nJan 13, 1999:\n\treplaced srand argument by (unsigned int) in run.c;\n\tavoids problem on Mac and potentially on Unix & Windows.\n\tthanks to Dan Allen.\n\n\tadded a few (int) casts to silence useless compiler warnings.\n\te.g., errorflag= in run.c jump().\n\n\tadded proctab.c to the bundle outout; one less thing\n\tto have to compile out of the box.\n\n\tadded calls to _popen and _pclose to the win95 stub for\n\tpipes (thanks to Steve Adams for this helpful suggestion).\n\tseems to work, though properties are not well understood\n\tby me, and it appears that under some circumstances the\n\tpipe output is truncated.  Be careful.\n\nOct 19, 1998:\n\tfixed a couple of bugs in getrec: could fail to update $0\n\tafter a getline var; because inputFS wasn't initialized, \n\tcould split $0 on every character, a misleading diversion.\n\n\tfixed caching bug in makedfa: LRU was actually removing\n\tleast often used.\n\n\tthanks to ross ridge for finding these, and for providing\n\tgreat bug reports.\n\nMay 12, 1998:\n\tfixed potential bug in readrec: might fail to update record\n\tpointer after growing.  thanks to dan levy for spotting this\n\tand suggesting the fix.\n\nMar 12, 1998:\n\tadded -V to print version number and die.\n\nFeb 11, 1998:\n\tsubtle silent bug in lex.c: if the program ended with a number\n\tlonger than 1 digit, part of the input would be pushed back and\n\tparsed again because token buffer wasn't terminated right.\n\texample:  awk 'length($0) > 10'.  blush.  at least i found it\n\tmyself.\n\nAug 31, 1997:\n\ts/adelete/awkdelete/: SGI uses this in malloc.h.\n\tthanks to nelson beebe for pointing this one out.\n\nAug 21, 1997:\n\tfixed some bugs in sub and gsub when replacement includes \\\\.\n\tthis is a dark, horrible corner, but at least now i believe that\n\tthe behavior is the same as gawk and the intended posix standard.\n\tthanks to arnold robbins for advice here.\n\nAug 9, 1997:\n\tsomewhat regretfully, replaced the ancient lex-based lexical\n\tanalyzer with one written in C.  it's longer, generates less code,\n\tand more portable; the old one depended too much on mysterious\n\tproperties of lex that were not preserved in other environments.\n\tin theory these recognize the same language.\n\n\tnow using strtod to test whether a string is a number, instead of\n\tthe convoluted original function.  should be more portable and\n\treliable if strtod is implemented right.\n\n\tremoved now-pointless optimization in makefile that tries to avoid\n\trecompilation when awkgram.y is changed but symbols are not.\n\n\tremoved most fixed-size arrays, though a handful remain, some\n\tof which are unchecked.  you have been warned.\n\nAug 4, 1997:\n\twith some trepidation, replaced the ancient code that managed\n\tfields and $0 in fixed-size arrays with arrays that grow on\n\tdemand.  there is still some tension between trying to make this\n\trun fast and making it clean; not sure it's right yet.\n\n\tthe ill-conceived -mr and -mf arguments are now useful only\n\tfor debugging.  previous dynamic string code removed.\n\n\tnumerous other minor cleanups along the way.\n\nJul 30, 1997:\n\tusing code provided by dan levy (to whom profuse thanks), replaced\n\tfixed-size arrays and awkward kludges by a fairly uniform mechanism\n\tto grow arrays as needed for printf, sub, gsub, etc.\n\nJul 23, 1997:\n\tfalling off the end of a function returns \"\" and 0, not 0.\n\tthanks to arnold robbins.\n\nJun 17, 1997:\n\treplaced several fixed-size arrays by dynamically-created ones\n\tin run.c; added overflow tests to some previously unchecked cases.\n\tgetline, toupper, tolower.\n\n\tgetline code is still broken in that recursive calls may wind\n\tup using the same space.  [fixed later]\n\n\tincreased RECSIZE to 8192 to push problems further over the horizon.\n\n\tadded \\r to \\n as input line separator for programs, not data.\n\tdamn CRLFs.\n\n\tmodified format() to permit explicit printf(\"%c\", 0) to include\n\ta null byte in output.  thanks to ken stailey for the fix.\n\n\tadded a \"-safe\" argument that disables file output (print >,\n\tprint >>), process creation (cmd|getline, print |, system), and\n\taccess to the environment (ENVIRON).  this is a first approximation\n\tto a \"safe\" version of awk, but don't rely on it too much.  thanks\n\tto joan feigenbaum and matt blaze for the inspiration long ago.\n\nJul 8, 1996:\n\tfixed long-standing bug in sub, gsub(/a/, \"\\\\\\\\&\"); thanks to\n\tralph corderoy.\n\nJun 29, 1996:\n\tfixed awful bug in new field splitting; didn't get all the places\n\twhere input was done.\n\nJun 28, 1996:\n\tchanged field-splitting to conform to posix definition: fields are\n\tsplit using the value of FS at the time of input; it used to be\n\tthe value when the field or NF was first referred to, a much less\n\tpredictable definition.  thanks to arnold robbins for encouragement\n\tto do the right thing.\n\nMay 28, 1996:\n\tfixed appalling but apparently unimportant bug in parsing octal\n\tnumbers in reg exprs.\n\n\texplicit hex in reg exprs now limited to 2 chars: \\xa, \\xaa.\n\nMay 27, 1996:\n\tcleaned up some declarations so gcc -Wall is now almost silent.\n\n\tmakefile now includes backup copies of ytab.c and lexyy.c in case\n\tone makes before looking; it also avoids recreating lexyy.c unless\n\treally needed.\n\n\ts/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes\n\twith unwisely-written header files.\n\n\tthanks to jeffrey friedl for several of these.\n\nMay 26, 1996:\n\tan attempt to rationalize the (unsigned) char issue.  almost all\n\tinstances of unsigned char have been removed; the handful of places\n\tin b.c where chars are used as table indices have been hand-crafted.\n\tadded some latin-1 tests to the regression, but i'm not confident;\n\tnone of my compilers seem to care much.  thanks to nelson beebe for\n\tpointing out some others that do care.\n\nMay 2, 1996:\n\tremoved all register declarations.\n\n\tenhanced split(), as in gawk, etc:  split(s, a, \"\") splits s into\n\ta[1]...a[length(s)] with each character a single element.\n\n\tmade the same changes for field-splitting if FS is \"\".\n\n\tadded nextfile, as in gawk: causes immediate advance to next\n\tinput file. (thanks to arnold robbins for inspiration and code).\n\n\tsmall fixes to regexpr code:  can now handle []], [[], and\n\tvariants;  [] is now a syntax error, rather than matching \n\teverything;  [z-a] is now empty, not z.  far from complete\n\tor correct, however.  (thanks to jeffrey friedl for pointing out\n\tsome awful behaviors.)\n\nApr 29, 1996:\n\treplaced uchar by uschar everywhere; apparently some compilers\n\tusurp this name and this causes conflicts.\n\n\tfixed call to time in run.c (bltin); arg is time_t *.\n\n\treplaced horrible pointer/long punning in b.c by a legitimate\n\tunion.  should be safer on 64-bit machines and cleaner everywhere.\n\t(thanks to nelson beebe for pointing out some of these problems.)\n\n\treplaced nested comments by #if 0...#endif in run.c, lib.c.\n\n\tremoved getsval, setsval, execute macros from run.c and lib.c.\n\tmachines are 100x faster than they were when these macros were\n\tfirst used.\n\n\trevised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,\n\ty.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of\n\tportability to nameless systems.\n\n\t\"make bundle\" now includes yacc and lex output files for recipients\n\twho don't have yacc or lex.\n\nAug 15, 1995:\n\tinitialized Cells in setsymtab more carefully; some fields\n\twere not set.  (thanks to purify, all of whose complaints i\n\tthink i now understand.)\n\n\tfixed at least one error in gsub that looked at -1-th element\n\tof an array when substituting for a null match (e.g., $).\n\n\tdelete arrayname is now legal; it clears the elements but leaves\n\tthe array, which may not be the right behavior.\n\n\tmodified makefile: my current make can't cope with the test used\n\tto avoid unnecessary yacc invocations.\n\nJul 17, 1995:\n\tadded dynamically growing strings to awk.lx.l and b.c\n\tto permit regular expressions to be much bigger.\n\tthe state arrays can still overflow.\n\nAug 24, 1994:\n\tdetect duplicate arguments in function definitions (mdm).\n\nMay 11, 1994:\n\ttrivial fix to printf to limit string size in sub().\n\nApr 22, 1994:\n\tfixed yet another subtle self-assignment problem:\n\t$1 = $2; $1 = $1 clobbered $1.\n\n\tRegression tests now use private echo, to avoid quoting problems.\n\nFeb 2, 1994:\n\tchanged error() to print line number as %d, not %g.\n\nJul 23, 1993:\n\tcosmetic changes: increased sizes of some arrays,\n\treworded some error messages.\n\n\tadded CONVFMT as in posix (just replaced OFMT in getsval)\n\n\tFILENAME is now \"\" until the first thing that causes a file\n\tto be opened.\n\nNov 28, 1992:\n\tdeleted yyunput and yyoutput from proto.h;\n\tdifferent versions of lex give these different declarations.\n\nMay 31, 1992:\n\tadded -mr N and -mf N options: more record and fields.\n\tthese really ought to adjust automatically.\n\n\tcleaned up some error messages; \"out of space\" now means\n\tmalloc returned NULL in all cases.\n\n\tchanged rehash so that if it runs out, it just returns;\n\tthings will continue to run slow, but maybe a bit longer.\n\nApr 24, 1992:\n\tremove redundant close of stdin when using -f -.\n\n\tgot rid of core dump with -d; awk -d just prints date.\n\nApr 12, 1992:\n\tadded explicit check for /dev/std(in,out,err) in redirection.\n\tunlike gawk, no /dev/fd/n yet.\n\n\tadded (file/pipe) builtin.  hard to test satisfactorily.\n\tnot posix.\n\nFeb 20, 1992:\n\trecompile after abortive changes;  should be unchanged.\n\nDec 2, 1991:\n\tdie-casting time:  converted to ansi C, installed that.\n\nNov 30, 1991:\n\tfixed storage leak in freefa, failing to recover [N]CCL.\n\tthanks to Bill Jones (jones@cs.usask.ca)\n\nNov 19, 1991:\n\tuse RAND_MAX instead of literal in builtin().\n\nNov 12, 1991:\n\tcranked up some fixed-size arrays in b.c, and added a test for\n\toverflow in penter.  thanks to mark larsen.\n\nSep 24, 1991:\n\tincreased buffer in gsub.  a very crude fix to a general problem.\n\tand again on Sep 26.\n\nAug 18, 1991:\n\tenforce variable name syntax for commandline variables: has to\n\tstart with letter or _.\n\nJul 27, 1991:\n\tallow newline after ; in for statements.\n\nJul 21, 1991:\n\tfixed so that in self-assignment like $1=$1, side effects\n\tlike recomputing $0 take place.  (this is getting subtle.)\n\nJun 30, 1991:\n\tbetter test for detecting too-long output record.\n\nJun 2, 1991:\n\tbetter defense against very long printf strings.\n\tmade break and continue illegal outside of loops.\n\nMay 13, 1991:\n\tremoved extra arg on gettemp, tempfree.  minor error message rewording.\n\nMay 6, 1991:\n\tfixed silly bug in hex parsing in hexstr().\n\tremoved an apparently unnecessary test in isnumber().\n\twarn about weird printf conversions.\n\tfixed unchecked array overwrite in relex().\n\n\tchanged for (i in array) to access elements in sorted order.\n\tthen unchanged it -- it really does run slower in too many cases.\n\tleft the code in place, commented out.\n\nFeb 10, 1991:\n\tcheck error status on all writes, to avoid banging on full disks.\n\nJan 28, 1991:\n\tawk -f - reads the program from stdin.\n\nJan 11, 1991:\n\tfailed to set numeric state on $0 in cmd|getline context in run.c.\n\nNov 2, 1990:\n\tfixed sleazy test for integrality in getsval;  use modf.\n\nOct 29, 1990:\n\tfixed sleazy buggy code in lib.c that looked (incorrectly) for\n\ttoo long input lines.\n\nOct 14, 1990:\n\tfixed the bug on p. 198 in which it couldn't deduce that an\n\targument was an array in some contexts.  replaced the error\n\tmessage in intest() by code that damn well makes it an array.\n\nOct 8, 1990:\n\tfixed horrible bug:  types and values were not preserved in\n\tsome kinds of self-assignment. (in assign().)\n\nAug 24, 1990:\n\tchanged NCHARS to 256 to handle 8-bit characters in strings\n\tpresented to match(), etc.\n\nJun 26, 1990:\n\tchanged struct rrow (awk.h) to use long instead of int for lval,\n\tsince cfoll() stores a pointer in it.  now works better when int's\n\tare smaller than pointers!\n\nMay 6, 1990:\n\tAVA fixed the grammar so that ! is uniformly of the same precedence as\n\tunary + and -.  This renders illegal some constructs like !x=y, which\n\tnow has to be parenthesized as !(x=y), and makes others work properly:\n\t!x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.\n\t(These problems were pointed out by Bob Lenk of Posix.)\n\n\tAdded \\x to regular expressions (already in strings).\n\tLimited octal to octal digits; \\8 and \\9 are not octal.\n\tCentralized the code for parsing escapes in regular expressions.\n\tAdded a bunch of tests to T.re and T.sub to verify some of this.\n\nFeb 9, 1990:\n\tfixed null pointer dereference bug in main.c:  -F[nothing].  sigh.\n\n\trestored srand behavior:  it returns the current seed.\n\nJan 18, 1990:\n\tsrand now returns previous seed value (0 to start).\n\nJan 5, 1990:\n\tfix potential problem in tran.c -- something was freed,\n\tthen used in freesymtab.\n\nOct 18, 1989:\n\tanother try to get the max number of open files set with\n\trelatively machine-independent code.\n\n\tsmall fix to input() in case of multiple reads after EOF.\n\nOct 11, 1989:\n\tFILENAME is now defined in the BEGIN block -- too many old\n\tprograms broke.\n\n\t\"-\" means stdin in getline as well as on the commandline.\n\n\tadded a bunch of casts to the code to tell the truth about\n\tchar * vs. unsigned char *, a right royal pain.  added a\n\tsetlocale call to the front of main, though probably no one\n\thas it usefully implemented yet.\n\nAug 24, 1989:\n\tremoved redundant relational tests against nullnode if parse\n\ttree already had a relational at that point.\n\nAug 11, 1989:\n\tfixed bug:  commandline variable assignment has to look like\n\tvar=something.  (consider the man page for =, in file =.1)\n\n\tchanged number of arguments to functions to static arrays\n\tto avoid repeated malloc calls.\n\nAug 2, 1989:\n\trestored -F (space) separator\n\nJul 30, 1989:\n\tadded -v x=1 y=2 ... for immediate commandline variable assignment;\n\tdone before the BEGIN block for sure.  they have to precede the\n\tprogram if the program is on the commandline.\n\tModified Aug 2 to require a separate -v for each assignment.\n\nJul 10, 1989:\n\tfixed ref-thru-zero bug in environment code in tran.c\n\nJun 23, 1989:\n\tadd newline to usage message.\n\nJun 14, 1989:\n\tadded some missing ansi printf conversion letters: %i %X %E %G.\n\tno sensible meaning for h or L, so they may not do what one expects.\n\n\tmade %* conversions work.\n\n\tchanged x^y so that if n is a positive integer, it's done\n\tby explicit multiplication, thus achieving maximum accuracy.\n\t(this should be done by pow() but it seems not to be locally.)\n\tdone to x ^= y as well.\n\nJun 4, 1989:\n\tENVIRON array contains environment: if shell variable V=thing,\n\t\tENVIRON[\"V\"] is \"thing\"\n\n\tmultiple -f arguments permitted.  error reporting is naive.\n\t(they were permitted before, but only the last was used.)\n\n\tfixed a really stupid botch in the debugging macro dprintf\n\n\tfixed order of evaluation of commandline assignments to match\n\twhat the book claims:  an argument of the form x=e is evaluated\n\tat the time it would have been opened if it were a filename (p 63).\n\tthis invalidates the suggested answer to ex 4-1 (p 195).\n\n\tremoved some code that permitted -F (space) fieldseparator,\n\tsince it didn't quite work right anyway.  (restored aug 2)\n\nApr 27, 1989:\n\tLine number now accumulated correctly for comment lines.\n\nApr 26, 1989:\n\tDebugging output now includes a version date,\n\tif one compiles it into the source each time.\n\nApr 9, 1989:\n\tChanged grammar to prohibit constants as 3rd arg of sub and gsub;\n\tprevents class of overwriting-a-constant errors.  (Last one?)\n\tThis invalidates the \"banana\" example on page 43 of the book.\n\n\tAdded \\a (\"alert\"), \\v (vertical tab), \\xhhh (hexadecimal),\n\tas in ANSI, for strings.  Rescinded the sloppiness that permitted\n\tnon-octal digits in \\ooo.  Warning:  not all compilers and libraries\n\twill be able to deal with \\x correctly.\n\nJan 9, 1989:\n\tFixed bug that caused tempcell list to contain a duplicate.\n\tThe fix is kludgy.\n\nDec 17, 1988:\n\tCatches some more commandline errors in main.\n\tRemoved redundant decl of modf in run.c (confuses some compilers).\n\tWarning:  there's no single declaration of malloc, etc., in awk.h\n\tthat seems to satisfy all compilers.\n\nDec 7, 1988:\n\tAdded a bit of code to error printing to avoid printing nulls.\n\t(Not clear that it actually would.)\n\nNov 27, 1988:\n\tWith fear and trembling, modified the grammar to permit\n\tmultiple pattern-action statements on one line without\n\tan explicit separator.  By definition, this capitulation\n\tto the ghost of ancient implementations remains undefined\n\tand thus subject to change without notice or apology.\n\tDO NOT COUNT ON IT.\n\nOct 30, 1988:\n\tFixed bug in call() that failed to recover storage.\n\n\tA warning is now generated if there are more arguments\n\tin the call than in the definition (in lieu of fixing\n\tanother storage leak).\n\nOct 20, 1988:\n\tFixed %c:  if expr is numeric, use numeric value;\n\totherwise print 1st char of string value.  still\n\tdoesn't work if the value is 0 -- won't print \\0.\n\n\tAdded a few more checks for running out of malloc.\n\nOct 12, 1988:\n\tFixed bug in call() that freed local arrays twice.\n\n\tFixed to handle deletion of non-existent array right;\n\tcomplains about attempt to delete non-array element.\n\nSep 30, 1988:\n\tNow guarantees to evaluate all arguments of built-in\n\tfunctions, as in C;  the appearance is that arguments\n\tare evaluated before the function is called.  Places\n\taffected are sub (gsub was ok), substr, printf, and\n\tall the built-in arithmetic functions in bltin().\n\tA warning is generated if a bltin() is called with\n\tthe wrong number of arguments.\n\n\tThis requires changing makeprof on p167 of the book.\n\nAug 23, 1988:\n\tsetting FILENAME in BEGIN caused core dump, apparently\n\tbecause it was freeing space not allocated by malloc.\n\nJuly 24, 1988:\n\tfixed egregious error in toupper/tolower functions.\n\tstill subject to rescinding, however.\n\nJuly 2, 1988:\n\tflush stdout before opening file or pipe\n\nJuly 2, 1988:\n\tperformance bug in b.c/cgoto(): not freeing some sets of states.\n\tpartial fix only right now, and the number of states increased\n\tto make it less obvious.\n\nJune 1, 1988:\n\tcheck error status on close\n\nMay 28, 1988:\n\tsrand returns seed value it's using.\n\tsee 1/18/90\n\nMay 22, 1988:\n\tRemoved limit on depth of function calls.\n\nMay 10, 1988:\n\tFixed lib.c to permit _ in commandline variable names.\n\nMar 25, 1988:\n\tmain.c fixed to recognize -- as terminator of command-\n\tline options.  Illegal options flagged.\n\tError reporting slightly cleaned up.\n\nDec 2, 1987:\n\tNewer C compilers apply a strict scope rule to extern\n\tdeclarations within functions.  Two extern declarations in\n\tlib.c and tran.c have been moved to obviate this problem.\n\nOct xx, 1987:\n\tReluctantly added toupper and tolower functions.\n\tSubject to rescinding without notice.\n\nSep 17, 1987:\n\tError-message printer had printf(s) instead of\n\tprintf(\"%s\",s);  got core dumps when the message\n\tincluded a %.\n\nSep 12, 1987:\n\tVery long printf strings caused core dump;\n\tfixed aprintf, asprintf, format to catch them.\n\tCan still get a core dump in printf itself.\n\n\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/GNUmakefile",
    "content": "# Custom GNUMakefile to rebuild nawk for the Android NDK\n# (C) 2011 The Android Open Source Project\n# yada yda yada Apache 2.0 License....\n\nBUILD_DIR ?= /tmp/ndk-$(USER)/build-awk\n\n\nCC       := $(HOST_CC)\nCFLAGS   := $(CFLAGS) -O2 -I$(BUILD_DIR) -I.\nLDFLAGS  := $(LDFLAGS) -Wl,-s\nBISON    := bison\n\n# NATIVE_CC is to build maketab which needs to run in order\n# to generate proctab.c from ytab.h.  Set it to host native\n# cc if host can run windows binary (MINGW=yes) or darwin binary\n# (DARWIN=yes)\nNATIVE_CC       ?= $(CC)\nNATIVE_CFLAGS   ?= $(CFLAGS)\nNATIVE_LDFLAGS  ?= $(LDFLAGS)\n\nMINGW := $(strip $(WIN32))\nTRY64 := $(strip $(TRY64))\n\nifeq ($(V),1)\nhide :=\nelse\nhide := @\nendif\n\nSOURCES := \\\n    lex.c \\\n    b.c \\\n    main.c \\\n    parse.c \\\n    lib.c \\\n    run.c \\\n    tran.c \\\n\nEXE :=\n\nifdef MINGW\nifdef TRY64\nCC      := x86_64-pc-mingw32msvc-gcc\nelse\nCC      := i586-pc-mingw32msvc-gcc\nendif\nEXE     := .exe\nendif\n\nPROGRAM := $(BUILD_DIR)/ndk-awk$(EXE)\n\nall: $(PROGRAM)\n\nOBJECTS :=\n\nYTAB_H := $(BUILD_DIR)/ytab.h\nYTAB_C := $(BUILD_DIR)/ytab.c\nYTAB_O := $(YTAB_C:.c=.o)\n$(YTAB_C): awkgram.y\n\t@echo \"Bison: ytab.c\"\n\t$(hide)$(BISON) -o $@ --defines=$(YTAB_H) awkgram.y\n\n$(YTAB_H): $(YTAB_C) awkgram.y\n\nOBJECTS += $(YTAB_O)\n\n# $1: source file\n# $2: object file\ndefine build-c-file\nOBJECTS += $2\n$2: $1 $(YTAB_H)\n\t@echo \"Compile: $1\"\n\t$$(hide)mkdir -p $$(dir $$@)\n\t$$(hide)$$(CC) $$(CFLAGS) -c -o $$@ $$<\nendef\n\n$(foreach src,$(filter %.c,$(SOURCES)),\\\n    $(eval $(call build-c-file,$(src),$(BUILD_DIR)/$(src:%.c=%.o)))\\\n)\n\nMAKETAB := $(BUILD_DIR)/maketab$(EXE)\n$(MAKETAB): maketab.c $(BUILD_DIR)/ytab.h\n\t@echo \"Native Executable: $(notdir $@)\"\n\t$(hide)$(NATIVE_CC) $(NATIVE_CFLAGS) $(NATIVE_LDFLAGS) maketab.c -o $@\n\nPROCTAB_C := $(BUILD_DIR)/proctab.c\nPROCTAB_O := $(PROCTAB_C:%.c=%.o)\n\n$(eval $(call build-c-file,$(PROCTAB_C),$(PROCTAB_O)))\n\n$(PROCTAB_C): $(MAKETAB) $(YTAB_H)\n\t@echo \"Gen: $(notdir $@)\"\n\t$(hide)$(MAKETAB) $(YTAB_H) > $@\n\n\n$(PROGRAM): $(OBJECTS)\n\t@echo \"Link: $(notdir $@)\"\n\t$(hide)$(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lm\n\nclean:\n\t$(hide)rm -f $(OBJECTS) $(PROGRAM) $(MAKETAB) $(YTAB_C) $(YTAB_H) $(PROGTAB_C)\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/NOTICE",
    "content": "Copyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/README",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\nThis is the version of awk described in \"The AWK Programming Language\",\nby Al Aho, Brian Kernighan, and Peter Weinberger\n(Addison-Wesley, 1988, ISBN 0-201-07981-X).\n\nChanges, mostly bug fixes and occasional enhancements, are listed\nin FIXES.  If you distribute this code further, please please please\ndistribute FIXES with it.  If you find errors, please report them\nto bwk@bell-labs.com.  Thanks.\n\nThe program itself is created by\n\tmake\nwhich should produce a sequence of messages roughly like this:\n\n\tyacc -d awkgram.y\n\nconflicts: 43 shift/reduce, 85 reduce/reduce\n\tmv y.tab.c ytab.c\n\tmv y.tab.h ytab.h\n\tcc -c ytab.c\n\tcc -c b.c\n\tcc -c main.c\n\tcc -c parse.c\n\tcc maketab.c -o maketab\n\t./maketab >proctab.c\n\tcc -c proctab.c\n\tcc -c tran.c\n\tcc -c lib.c\n\tcc -c run.c\n\tcc -c lex.c\n\tcc ytab.o b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o -lm\n\nThis produces an executable a.out; you will eventually want to\nmove this to some place like /usr/bin/awk.\n\nIf your system does not have yacc or bison (the GNU\nequivalent), you must compile the pieces manually.  We have\nincluded yacc output in ytab.c and ytab.h, and backup copies in\ncase you overwrite them.  We have also included a copy of\nproctab.c so you do not need to run maketab.\n\nNOTE: This version uses ANSI C, as you should also.  We have\ncompiled this without any changes using gcc -Wall and/or local C\ncompilers on a variety of systems, but new systems or compilers\nmay raise some new complaint; reports of difficulties are\nwelcome.\n\nThis also compiles with Visual C++ on all flavors of Windows,\n*if* you provide versions of popen and pclose.  The file\nmissing95.c contains versions that can be used to get started\nwith, though the underlying support has mysterious properties,\nthe symptom of which can be truncated pipe output.  Beware.  The\nfile makefile.win gives hints on how to proceed; if you run\nvcvars32.bat, it will set up necessary paths and parameters so\nyou can subsequently run nmake -f makefile.win.  Beware also that\nwhen running on Windows under command.com, various quoting\nconventions are different from Unix systems: single quotes won't\nwork around arguments, and various characters like % are\ninterpreted within double quotes.\n\nThis compiles without change on Macintosh OS X using gcc and\nthe standard developer tools.\n\nThis is also said to compile on Macintosh OS 9 systems, using the\nfile \"buildmac\" provided by Dan Allen (danallen@microsoft.com),\nto whom many thanks.\n\nThe version of malloc that comes with some systems is sometimes\nastonishly slow.  If awk seems slow, you might try fixing that.\nMore generally, turning on optimization can significantly improve\nawk's speed, perhaps by 1/3 for highest levels.\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/awk.h",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#include <assert.h>\n\ntypedef double\tAwkfloat;\n\n/* unsigned char is more trouble than it's worth */\n\ntypedef\tunsigned char uschar;\n\n#define\txfree(a)\t{ if ((a) != NULL) { free((void *) (a)); (a) = NULL; } }\n\n#define\tNN(p)\t((p) ? (p) : \"(null)\")\t/* guaranteed non-null for dprintf \n*/\n#define\tDEBUG\n#ifdef\tDEBUG\n\t\t\t/* uses have to be doubly parenthesized */\n#\tdefine\tdprintf(x)\tif (dbg) printf x\n#else\n#\tdefine\tdprintf(x)\n#endif\n\nextern int\tcompile_time;\t/* 1 if compiling, 0 if running */\nextern int\tsafe;\t\t/* 0 => unsafe, 1 => safe */\n\n#define\tRECSIZE\t(8 * 1024)\t/* sets limit on records, fields, etc., etc. */\nextern int\trecsize;\t/* size of current record, orig RECSIZE */\n\nextern char\t**FS;\nextern char\t**RS;\nextern char\t**ORS;\nextern char\t**OFS;\nextern char\t**OFMT;\nextern Awkfloat *NR;\nextern Awkfloat *FNR;\nextern Awkfloat *NF;\nextern char\t**FILENAME;\nextern char\t**SUBSEP;\nextern Awkfloat *RSTART;\nextern Awkfloat *RLENGTH;\n\nextern char\t*record;\t/* points to $0 */\nextern int\tlineno;\t\t/* line number in awk program */\nextern int\terrorflag;\t/* 1 if error has occurred */\nextern int\tdonefld;\t/* 1 if record broken into fields */\nextern int\tdonerec;\t/* 1 if record is valid (no fld has changed */\nextern char\tinputFS[];\t/* FS at time of input, for field splitting */\n\nextern int\tdbg;\n\nextern\tchar\t*patbeg;\t/* beginning of pattern matched */\nextern\tint\tpatlen;\t\t/* length of pattern matched.  set in b.c */\n\n/* Cell:  all information about a variable or constant */\n\ntypedef struct Cell {\n\tuschar\tctype;\t\t/* OCELL, OBOOL, OJUMP, etc. */\n\tuschar\tcsub;\t\t/* CCON, CTEMP, CFLD, etc. */\n\tchar\t*nval;\t\t/* name, for variables only */\n\tchar\t*sval;\t\t/* string value */\n\tAwkfloat fval;\t\t/* value as number */\n\tint\t tval;\t\t/* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */\n\tstruct Cell *cnext;\t/* ptr to next if chained */\n} Cell;\n\ntypedef struct Array {\t\t/* symbol table array */\n\tint\tnelem;\t\t/* elements in table right now */\n\tint\tsize;\t\t/* size of tab */\n\tCell\t**tab;\t\t/* hash table pointers */\n} Array;\n\n#define\tNSYMTAB\t50\t/* initial size of a symbol table */\nextern Array\t*symtab;\n\nextern Cell\t*nrloc;\t\t/* NR */\nextern Cell\t*fnrloc;\t/* FNR */\nextern Cell\t*nfloc;\t\t/* NF */\nextern Cell\t*rstartloc;\t/* RSTART */\nextern Cell\t*rlengthloc;\t/* RLENGTH */\n\n/* Cell.tval values: */\n#define\tNUM\t01\t/* number value is valid */\n#define\tSTR\t02\t/* string value is valid */\n#define DONTFREE 04\t/* string space is not freeable */\n#define\tCON\t010\t/* this is a constant */\n#define\tARR\t020\t/* this is an array */\n#define\tFCN\t040\t/* this is a function name */\n#define FLD\t0100\t/* this is a field $1, $2, ... */\n#define\tREC\t0200\t/* this is $0 */\n\n\n/* function types */\n#define\tFLENGTH\t1\n#define\tFSQRT\t2\n#define\tFEXP\t3\n#define\tFLOG\t4\n#define\tFINT\t5\n#define\tFSYSTEM\t6\n#define\tFRAND\t7\n#define\tFSRAND\t8\n#define\tFSIN\t9\n#define\tFCOS\t10\n#define\tFATAN\t11\n#define\tFTOUPPER 12\n#define\tFTOLOWER 13\n#define\tFFLUSH\t14\n\n/* Node:  parse tree is made of nodes, with Cell's at bottom */\n\ntypedef struct Node {\n\tint\tntype;\n\tstruct\tNode *nnext;\n\tint\tlineno;\n\tint\tnobj;\n\tstruct\tNode *narg[1];\t/* variable: actual size set by calling malloc */\n} Node;\n\n#define\tNIL\t((Node *) 0)\n\nextern Node\t*winner;\nextern Node\t*nullstat;\nextern Node\t*nullnode;\n\n/* ctypes */\n#define OCELL\t1\n#define OBOOL\t2\n#define OJUMP\t3\n\n/* Cell subtypes: csub */\n#define\tCFREE\t7\n#define CCOPY\t6\n#define CCON\t5\n#define CTEMP\t4\n#define CNAME\t3 \n#define CVAR\t2\n#define CFLD\t1\n#define\tCUNK\t0\n\n/* bool subtypes */\n#define BTRUE\t11\n#define BFALSE\t12\n\n/* jump subtypes */\n#define JEXIT\t21\n#define JNEXT\t22\n#define\tJBREAK\t23\n#define\tJCONT\t24\n#define\tJRET\t25\n#define\tJNEXTFILE\t26\n\n/* node types */\n#define NVALUE\t1\n#define NSTAT\t2\n#define NEXPR\t3\n\n\nextern\tint\tpairstack[], paircnt;\n\n#define notlegal(n)\t(n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc)\n#define isvalue(n)\t((n)->ntype == NVALUE)\n#define isexpr(n)\t((n)->ntype == NEXPR)\n#define isjump(n)\t((n)->ctype == OJUMP)\n#define isexit(n)\t((n)->csub == JEXIT)\n#define\tisbreak(n)\t((n)->csub == JBREAK)\n#define\tiscont(n)\t((n)->csub == JCONT)\n#define\tisnext(n)\t((n)->csub == JNEXT || (n)->csub == JNEXTFILE)\n#define\tisret(n)\t((n)->csub == JRET)\n#define isrec(n)\t((n)->tval & REC)\n#define isfld(n)\t((n)->tval & FLD)\n#define isstr(n)\t((n)->tval & STR)\n#define isnum(n)\t((n)->tval & NUM)\n#define isarr(n)\t((n)->tval & ARR)\n#define isfcn(n)\t((n)->tval & FCN)\n#define istrue(n)\t((n)->csub == BTRUE)\n#define istemp(n)\t((n)->csub == CTEMP)\n#define\tisargument(n)\t((n)->nobj == ARG)\n/* #define freeable(p)\t(!((p)->tval & DONTFREE)) */\n#define freeable(p)\t( ((p)->tval & (STR|DONTFREE)) == STR )\n\n/* structures used by regular expression matching machinery, mostly b.c: */\n\n#define NCHARS\t(256+3)\t\t/* 256 handles 8-bit chars; 128 does 7-bit */\n\t\t\t\t/* watch out in match(), etc. */\n#define NSTATES\t32\n\ntypedef struct rrow {\n\tlong\tltype;\t/* long avoids pointer warnings on 64-bit */\n\tunion {\n\t\tint i;\n\t\tNode *np;\n\t\tuschar *up;\n\t} lval;\t\t/* because Al stores a pointer in it! */\n\tint\t*lfollow;\n} rrow;\n\ntypedef struct fa {\n\tuschar\tgototab[NSTATES][NCHARS];\n\tuschar\tout[NSTATES];\n\tuschar\t*restr;\n\tint\t*posns[NSTATES];\n\tint\tanchor;\n\tint\tuse;\n\tint\tinitstat;\n\tint\tcurstat;\n\tint\taccept;\n\tint\treset;\n\tstruct\trrow re[1];\t/* variable: actual size set by calling malloc */\n} fa;\n\n\n#include \"proto.h\"\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/awkgram.y",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n%{\n#include <stdio.h>\n#include <string.h>\n#include \"awk.h\"\n\nvoid checkdup(Node *list, Cell *item);\nint yywrap(void) { return(1); }\n\nNode\t*beginloc = 0;\nNode\t*endloc = 0;\nint\tinfunc\t= 0;\t/* = 1 if in arglist or body of func */\nint\tinloop\t= 0;\t/* = 1 if in while, for, do */\nchar\t*curfname = 0;\t/* current function name */\nNode\t*arglist = 0;\t/* list of args for current function */\n%}\n\n%union {\n\tNode\t*p;\n\tCell\t*cp;\n\tint\ti;\n\tchar\t*s;\n}\n\n%token\t<i>\tFIRSTTOKEN\t/* must be first */\n%token\t<p>\tPROGRAM PASTAT PASTAT2 XBEGIN XEND\n%token\t<i>\tNL ',' '{' '(' '|' ';' '/' ')' '}' '[' ']'\n%token\t<i>\tARRAY\n%token\t<i>\tMATCH NOTMATCH MATCHOP\n%token\t<i>\tFINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE\n%token\t<i>\tAND BOR APPEND EQ GE GT LE LT NE IN\n%token\t<i>\tARG BLTIN BREAK CLOSE CONTINUE DELETE DO EXIT FOR FUNC \n%token\t<i>\tSUB GSUB IF INDEX LSUBSTR MATCHFCN NEXT NEXTFILE\n%token\t<i>\tADD MINUS MULT DIVIDE MOD\n%token\t<i>\tASSIGN ASGNOP ADDEQ SUBEQ MULTEQ DIVEQ MODEQ POWEQ\n%token\t<i>\tPRINT PRINTF SPRINTF\n%token\t<p>\tELSE INTEST CONDEXPR\n%token\t<i>\tPOSTINCR PREINCR POSTDECR PREDECR\n%token\t<cp>\tVAR IVAR VARNF CALL NUMBER STRING\n%token\t<s>\tREGEXPR\n\n%type\t<p>\tpas pattern ppattern plist pplist patlist prarg term re\n%type\t<p>\tpa_pat pa_stat pa_stats\n%type\t<s>\treg_expr\n%type\t<p>\tsimple_stmt opt_simple_stmt stmt stmtlist\n%type\t<p>\tvar varname funcname varlist\n%type\t<p>\tfor if else while\n%type\t<i>\tdo st\n%type\t<i>\tpst opt_pst lbrace rbrace rparen comma nl opt_nl and bor\n%type\t<i>\tsubop print\n\n%right\tASGNOP\n%right\t'?'\n%right\t':'\n%left\tBOR\n%left\tAND\n%left\tGETLINE\n%nonassoc APPEND EQ GE GT LE LT NE MATCHOP IN '|'\n%left\tARG BLTIN BREAK CALL CLOSE CONTINUE DELETE DO EXIT FOR FUNC \n%left\tGSUB IF INDEX LSUBSTR MATCHFCN NEXT NUMBER\n%left\tPRINT PRINTF RETURN SPLIT SPRINTF STRING SUB SUBSTR\n%left\tREGEXPR VAR VARNF IVAR WHILE '('\n%left\tCAT\n%left\t'+' '-'\n%left\t'*' '/' '%'\n%left\tNOT UMINUS\n%right\tPOWER\n%right\tDECR INCR\n%left\tINDIRECT\n%token\tLASTTOKEN\t/* must be last */\n\n%%\n\nprogram:\n\t  pas\t{ if (errorflag==0)\n\t\t\twinner = (Node *)stat3(PROGRAM, beginloc, $1, endloc); }\n\t| error\t{ yyclearin; bracecheck(); SYNTAX(\"bailing out\"); }\n\t;\n\nand:\n\t  AND | and NL\n\t;\n\nbor:\n\t  BOR | bor NL\n\t;\n\ncomma:\n\t  ',' | comma NL\n\t;\n\ndo:\n\t  DO | do NL\n\t;\n\nelse:\n\t  ELSE | else NL\n\t;\n\nfor:\n\t  FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen {inloop++;} stmt\n\t\t{ --inloop; $$ = stat4(FOR, $3, notnull($6), $9, $12); }\n\t| FOR '(' opt_simple_stmt ';'  ';' opt_nl opt_simple_stmt rparen {inloop++;} stmt\n\t\t{ --inloop; $$ = stat4(FOR, $3, NIL, $7, $10); }\n\t| FOR '(' varname IN varname rparen {inloop++;} stmt\n\t\t{ --inloop; $$ = stat3(IN, $3, makearr($5), $8); }\n\t;\n\nfuncname:\n\t  VAR\t{ setfname($1); }\n\t| CALL\t{ setfname($1); }\n\t;\n\nif:\n\t  IF '(' pattern rparen\t\t{ $$ = notnull($3); }\n\t;\n\nlbrace:\n\t  '{' | lbrace NL\n\t;\n\nnl:\n\t  NL | nl NL\n\t;\n\nopt_nl:\n\t  /* empty */\t{ $$ = 0; }\n\t| nl\n\t;\n\nopt_pst:\n\t  /* empty */\t{ $$ = 0; }\n\t| pst\n\t;\n\n\nopt_simple_stmt:\n\t  /* empty */\t\t\t{ $$ = 0; }\n\t| simple_stmt\n\t;\n\npas:\n\t  opt_pst\t\t\t{ $$ = 0; }\n\t| opt_pst pa_stats opt_pst\t{ $$ = $2; }\n\t;\n\npa_pat:\n\t  pattern\t{ $$ = notnull($1); }\n\t;\n\npa_stat:\n\t  pa_pat\t\t\t{ $$ = stat2(PASTAT, $1, stat2(PRINT, rectonode(), NIL)); }\n\t| pa_pat lbrace stmtlist '}'\t{ $$ = stat2(PASTAT, $1, $3); }\n\t| pa_pat ',' pa_pat\t\t{ $$ = pa2stat($1, $3, stat2(PRINT, rectonode(), NIL)); }\n\t| pa_pat ',' pa_pat lbrace stmtlist '}'\t{ $$ = pa2stat($1, $3, $5); }\n\t| lbrace stmtlist '}'\t\t{ $$ = stat2(PASTAT, NIL, $2); }\n\t| XBEGIN lbrace stmtlist '}'\n\t\t{ beginloc = linkum(beginloc, $3); $$ = 0; }\n\t| XEND lbrace stmtlist '}'\n\t\t{ endloc = linkum(endloc, $3); $$ = 0; }\n\t| FUNC funcname '(' varlist rparen {infunc++;} lbrace stmtlist '}'\n\t\t{ infunc--; curfname=0; defn((Cell *)$2, $4, $8); $$ = 0; }\n\t;\n\npa_stats:\n\t  pa_stat\n\t| pa_stats opt_pst pa_stat\t{ $$ = linkum($1, $3); }\n\t;\n\npatlist:\n\t  pattern\n\t| patlist comma pattern\t\t{ $$ = linkum($1, $3); }\n\t;\n\nppattern:\n\t  var ASGNOP ppattern\t\t{ $$ = op2($2, $1, $3); }\n\t| ppattern '?' ppattern ':' ppattern %prec '?'\n\t \t{ $$ = op3(CONDEXPR, notnull($1), $3, $5); }\n\t| ppattern bor ppattern %prec BOR\n\t\t{ $$ = op2(BOR, notnull($1), notnull($3)); }\n\t| ppattern and ppattern %prec AND\n\t\t{ $$ = op2(AND, notnull($1), notnull($3)); }\n\t| ppattern MATCHOP reg_expr\t{ $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); }\n\t| ppattern MATCHOP ppattern\n\t\t{ if (constnode($3))\n\t\t\t$$ = op3($2, NIL, $1, (Node*)makedfa(strnode($3), 0));\n\t\t  else\n\t\t\t$$ = op3($2, (Node *)1, $1, $3); }\n\t| ppattern IN varname\t\t{ $$ = op2(INTEST, $1, makearr($3)); }\n\t| '(' plist ')' IN varname\t{ $$ = op2(INTEST, $2, makearr($5)); }\n\t| ppattern term %prec CAT\t{ $$ = op2(CAT, $1, $2); }\n\t| re\n\t| term\n\t;\n\npattern:\n\t  var ASGNOP pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern '?' pattern ':' pattern %prec '?'\n\t \t{ $$ = op3(CONDEXPR, notnull($1), $3, $5); }\n\t| pattern bor pattern %prec BOR\n\t\t{ $$ = op2(BOR, notnull($1), notnull($3)); }\n\t| pattern and pattern %prec AND\n\t\t{ $$ = op2(AND, notnull($1), notnull($3)); }\n\t| pattern EQ pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern GE pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern GT pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern LE pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern LT pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern NE pattern\t\t{ $$ = op2($2, $1, $3); }\n\t| pattern MATCHOP reg_expr\t{ $$ = op3($2, NIL, $1, (Node*)makedfa($3, 0)); }\n\t| pattern MATCHOP pattern\n\t\t{ if (constnode($3))\n\t\t\t$$ = op3($2, NIL, $1, (Node*)makedfa(strnode($3), 0));\n\t\t  else\n\t\t\t$$ = op3($2, (Node *)1, $1, $3); }\n\t| pattern IN varname\t\t{ $$ = op2(INTEST, $1, makearr($3)); }\n\t| '(' plist ')' IN varname\t{ $$ = op2(INTEST, $2, makearr($5)); }\n\t| pattern '|' GETLINE var\t{ \n\t\t\tif (safe) SYNTAX(\"cmd | getline is unsafe\");\n\t\t\telse $$ = op3(GETLINE, $4, itonp($2), $1); }\n\t| pattern '|' GETLINE\t\t{ \n\t\t\tif (safe) SYNTAX(\"cmd | getline is unsafe\");\n\t\t\telse $$ = op3(GETLINE, (Node*)0, itonp($2), $1); }\n\t| pattern term %prec CAT\t{ $$ = op2(CAT, $1, $2); }\n\t| re\n\t| term\n\t;\n\nplist:\n\t  pattern comma pattern\t\t{ $$ = linkum($1, $3); }\n\t| plist comma pattern\t\t{ $$ = linkum($1, $3); }\n\t;\n\npplist:\n\t  ppattern\n\t| pplist comma ppattern\t\t{ $$ = linkum($1, $3); }\n\t;\n\nprarg:\n\t  /* empty */\t\t\t{ $$ = rectonode(); }\n\t| pplist\n\t| '(' plist ')'\t\t\t{ $$ = $2; }\n\t;\n\nprint:\n\t  PRINT | PRINTF\n\t;\n\npst:\n\t  NL | ';' | pst NL | pst ';'\n\t;\n\nrbrace:\n\t  '}' | rbrace NL\n\t;\n\nre:\n\t   reg_expr\n\t\t{ $$ = op3(MATCH, NIL, rectonode(), (Node*)makedfa($1, 0)); }\n\t| NOT re\t{ $$ = op1(NOT, notnull($2)); }\n\t;\n\nreg_expr:\n\t  '/' {startreg();} REGEXPR '/'\t\t{ $$ = $3; }\n\t;\n\nrparen:\n\t  ')' | rparen NL\n\t;\n\nsimple_stmt:\n\t  print prarg '|' term\t\t{ \n\t\t\tif (safe) SYNTAX(\"print | is unsafe\");\n\t\t\telse $$ = stat3($1, $2, itonp($3), $4); }\n\t| print prarg APPEND term\t{\n\t\t\tif (safe) SYNTAX(\"print >> is unsafe\");\n\t\t\telse $$ = stat3($1, $2, itonp($3), $4); }\n\t| print prarg GT term\t\t{\n\t\t\tif (safe) SYNTAX(\"print > is unsafe\");\n\t\t\telse $$ = stat3($1, $2, itonp($3), $4); }\n\t| print prarg\t\t\t{ $$ = stat3($1, $2, NIL, NIL); }\n\t| DELETE varname '[' patlist ']' { $$ = stat2(DELETE, makearr($2), $4); }\n\t| DELETE varname\t\t { $$ = stat2(DELETE, makearr($2), 0); }\n\t| pattern\t\t\t{ $$ = exptostat($1); }\n\t| error\t\t\t\t{ yyclearin; SYNTAX(\"illegal statement\"); }\n\t;\n\nst:\n\t  nl\n\t| ';' opt_nl\n\t;\n\nstmt:\n\t  BREAK st\t\t{ if (!inloop) SYNTAX(\"break illegal outside of loops\");\n\t\t\t\t  $$ = stat1(BREAK, NIL); }\n\t| CONTINUE st\t\t{  if (!inloop) SYNTAX(\"continue illegal outside of loops\");\n\t\t\t\t  $$ = stat1(CONTINUE, NIL); }\n\t| do {inloop++;} stmt {--inloop;} WHILE '(' pattern ')' st\n\t\t{ $$ = stat2(DO, $3, notnull($7)); }\n\t| EXIT pattern st\t{ $$ = stat1(EXIT, $2); }\n\t| EXIT st\t\t{ $$ = stat1(EXIT, NIL); }\n\t| for\n\t| if stmt else stmt\t{ $$ = stat3(IF, $1, $2, $4); }\n\t| if stmt\t\t{ $$ = stat3(IF, $1, $2, NIL); }\n\t| lbrace stmtlist rbrace { $$ = $2; }\n\t| NEXT st\t{ if (infunc)\n\t\t\t\tSYNTAX(\"next is illegal inside a function\");\n\t\t\t  $$ = stat1(NEXT, NIL); }\n\t| NEXTFILE st\t{ if (infunc)\n\t\t\t\tSYNTAX(\"nextfile is illegal inside a function\");\n\t\t\t  $$ = stat1(NEXTFILE, NIL); }\n\t| RETURN pattern st\t{ $$ = stat1(RETURN, $2); }\n\t| RETURN st\t\t{ $$ = stat1(RETURN, NIL); }\n\t| simple_stmt st\n\t| while {inloop++;} stmt\t{ --inloop; $$ = stat2(WHILE, $1, $3); }\n\t| ';' opt_nl\t\t{ $$ = 0; }\n\t;\n\nstmtlist:\n\t  stmt\n\t| stmtlist stmt\t\t{ $$ = linkum($1, $2); }\n\t;\n\nsubop:\n\t  SUB | GSUB\n\t;\n\nterm:\n \t  term '/' ASGNOP term\t\t{ $$ = op2(DIVEQ, $1, $4); }\n \t| term '+' term\t\t\t{ $$ = op2(ADD, $1, $3); }\n\t| term '-' term\t\t\t{ $$ = op2(MINUS, $1, $3); }\n\t| term '*' term\t\t\t{ $$ = op2(MULT, $1, $3); }\n\t| term '/' term\t\t\t{ $$ = op2(DIVIDE, $1, $3); }\n\t| term '%' term\t\t\t{ $$ = op2(MOD, $1, $3); }\n\t| term POWER term\t\t{ $$ = op2(POWER, $1, $3); }\n\t| '-' term %prec UMINUS\t\t{ $$ = op1(UMINUS, $2); }\n\t| '+' term %prec UMINUS\t\t{ $$ = $2; }\n\t| NOT term %prec UMINUS\t\t{ $$ = op1(NOT, notnull($2)); }\n\t| BLTIN '(' ')'\t\t\t{ $$ = op2(BLTIN, itonp($1), rectonode()); }\n\t| BLTIN '(' patlist ')'\t\t{ $$ = op2(BLTIN, itonp($1), $3); }\n\t| BLTIN\t\t\t\t{ $$ = op2(BLTIN, itonp($1), rectonode()); }\n\t| CALL '(' ')'\t\t\t{ $$ = op2(CALL, celltonode($1,CVAR), NIL); }\n\t| CALL '(' patlist ')'\t\t{ $$ = op2(CALL, celltonode($1,CVAR), $3); }\n\t| CLOSE term\t\t\t{ $$ = op1(CLOSE, $2); }\n\t| DECR var\t\t\t{ $$ = op1(PREDECR, $2); }\n\t| INCR var\t\t\t{ $$ = op1(PREINCR, $2); }\n\t| var DECR\t\t\t{ $$ = op1(POSTDECR, $1); }\n\t| var INCR\t\t\t{ $$ = op1(POSTINCR, $1); }\n\t| GETLINE var LT term\t\t{ $$ = op3(GETLINE, $2, itonp($3), $4); }\n\t| GETLINE LT term\t\t{ $$ = op3(GETLINE, NIL, itonp($2), $3); }\n\t| GETLINE var\t\t\t{ $$ = op3(GETLINE, $2, NIL, NIL); }\n\t| GETLINE\t\t\t{ $$ = op3(GETLINE, NIL, NIL, NIL); }\n\t| INDEX '(' pattern comma pattern ')'\n\t\t{ $$ = op2(INDEX, $3, $5); }\n\t| INDEX '(' pattern comma reg_expr ')'\n\t\t{ SYNTAX(\"index() doesn't permit regular expressions\");\n\t\t  $$ = op2(INDEX, $3, (Node*)$5); }\n\t| '(' pattern ')'\t\t{ $$ = $2; }\n\t| MATCHFCN '(' pattern comma reg_expr ')'\n\t\t{ $$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa($5, 1)); }\n\t| MATCHFCN '(' pattern comma pattern ')'\n\t\t{ if (constnode($5))\n\t\t\t$$ = op3(MATCHFCN, NIL, $3, (Node*)makedfa(strnode($5), 1));\n\t\t  else\n\t\t\t$$ = op3(MATCHFCN, (Node *)1, $3, $5); }\n\t| NUMBER\t\t\t{ $$ = celltonode($1, CCON); }\n\t| SPLIT '(' pattern comma varname comma pattern ')'     /* string */\n\t\t{ $$ = op4(SPLIT, $3, makearr($5), $7, (Node*)STRING); }\n\t| SPLIT '(' pattern comma varname comma reg_expr ')'    /* const /regexp/ */\n\t\t{ $$ = op4(SPLIT, $3, makearr($5), (Node*)makedfa($7, 1), (Node *)REGEXPR); }\n\t| SPLIT '(' pattern comma varname ')'\n\t\t{ $$ = op4(SPLIT, $3, makearr($5), NIL, (Node*)STRING); }  /* default */\n\t| SPRINTF '(' patlist ')'\t{ $$ = op1($1, $3); }\n\t| STRING\t \t\t{ $$ = celltonode($1, CCON); }\n\t| subop '(' reg_expr comma pattern ')'\n\t\t{ $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, rectonode()); }\n\t| subop '(' pattern comma pattern ')'\n\t\t{ if (constnode($3))\n\t\t\t$$ = op4($1, NIL, (Node*)makedfa(strnode($3), 1), $5, rectonode());\n\t\t  else\n\t\t\t$$ = op4($1, (Node *)1, $3, $5, rectonode()); }\n\t| subop '(' reg_expr comma pattern comma var ')'\n\t\t{ $$ = op4($1, NIL, (Node*)makedfa($3, 1), $5, $7); }\n\t| subop '(' pattern comma pattern comma var ')'\n\t\t{ if (constnode($3))\n\t\t\t$$ = op4($1, NIL, (Node*)makedfa(strnode($3), 1), $5, $7);\n\t\t  else\n\t\t\t$$ = op4($1, (Node *)1, $3, $5, $7); }\n\t| SUBSTR '(' pattern comma pattern comma pattern ')'\n\t\t{ $$ = op3(SUBSTR, $3, $5, $7); }\n\t| SUBSTR '(' pattern comma pattern ')'\n\t\t{ $$ = op3(SUBSTR, $3, $5, NIL); }\n\t| var\n\t;\n\nvar:\n\t  varname\n\t| varname '[' patlist ']'\t{ $$ = op2(ARRAY, makearr($1), $3); }\n\t| IVAR\t\t\t\t{ $$ = op1(INDIRECT, celltonode($1, CVAR)); }\n\t| INDIRECT term\t \t\t{ $$ = op1(INDIRECT, $2); }\n\t;\t\n\nvarlist:\n\t  /* nothing */\t\t{ arglist = $$ = 0; }\n\t| VAR\t\t\t{ arglist = $$ = celltonode($1,CVAR); }\n\t| varlist comma VAR\t{\n\t\t\tcheckdup($1, $3);\n\t\t\targlist = $$ = linkum($1,celltonode($3,CVAR)); }\n\t;\n\nvarname:\n\t  VAR\t\t\t{ $$ = celltonode($1, CVAR); }\n\t| ARG \t\t\t{ $$ = op1(ARG, itonp($1)); }\n\t| VARNF\t\t\t{ $$ = op1(VARNF, (Node *) $1); }\n\t;\n\n\nwhile:\n\t  WHILE '(' pattern rparen\t{ $$ = notnull($3); }\n\t;\n\n%%\n\nvoid setfname(Cell *p)\n{\n\tif (isarr(p))\n\t\tSYNTAX(\"%s is an array, not a function\", p->nval);\n\telse if (isfcn(p))\n\t\tSYNTAX(\"you can't define function %s more than once\", p->nval);\n\tcurfname = p->nval;\n}\n\nint constnode(Node *p)\n{\n\treturn isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;\n}\n\nchar *strnode(Node *p)\n{\n\treturn ((Cell *)(p->narg[0]))->sval;\n}\n\nNode *notnull(Node *n)\n{\n\tswitch (n->nobj) {\n\tcase LE: case LT: case EQ: case NE: case GT: case GE:\n\tcase BOR: case AND: case NOT:\n\t\treturn n;\n\tdefault:\n\t\treturn op2(NE, n, nullnode);\n\t}\n}\n\nvoid checkdup(Node *vl, Cell *cp)\t/* check if name already in list */\n{\n\tchar *s = cp->nval;\n\tfor ( ; vl; vl = vl->nnext) {\n\t\tif (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) {\n\t\t\tSYNTAX(\"duplicate argument %s\", s);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/b.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n/* lasciate ogne speranza, voi ch'intrate. */\n\n#define\tDEBUG\n\n#include <ctype.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\n#define\tHAT\t(NCHARS+2)\t/* matches ^ in regular expr */\n\t\t\t\t/* NCHARS is 2**n */\n#define MAXLIN 22\n\n#define type(v)\t\t(v)->nobj\t/* badly overloaded here */\n#define info(v)\t\t(v)->ntype\t/* badly overloaded here */\n#define left(v)\t\t(v)->narg[0]\n#define right(v)\t(v)->narg[1]\n#define parent(v)\t(v)->nnext\n\n#define LEAF\tcase CCL: case NCCL: case CHAR: case DOT: case FINAL: case ALL:\n#define ELEAF\tcase EMPTYRE:\t\t/* empty string in regexp */\n#define UNARY\tcase STAR: case PLUS: case QUEST:\n\n/* encoding in tree Nodes:\n\tleaf (CCL, NCCL, CHAR, DOT, FINAL, ALL, EMPTYRE):\n\t\tleft is index, right contains value or pointer to value\n\tunary (STAR, PLUS, QUEST): left is child, right is null\n\tbinary (CAT, OR): left and right are children\n\tparent contains pointer to parent\n*/\n\n\nint\t*setvec;\nint\t*tmpset;\nint\tmaxsetvec = 0;\n\nint\trtok;\t\t/* next token in current re */\nint\trlxval;\nstatic uschar\t*rlxstr;\nstatic uschar\t*prestr;\t/* current position in current re */\nstatic uschar\t*lastre;\t/* origin of last re */\n\nstatic\tint setcnt;\nstatic\tint poscnt;\n\nchar\t*patbeg;\nint\tpatlen;\n\n#define\tNFA\t20\t/* cache this many dynamic fa's */\nfa\t*fatab[NFA];\nint\tnfatab\t= 0;\t/* entries in fatab */\n\nfa *makedfa(const char *s, int anchor)\t/* returns dfa for reg expr s */\n{\n\tint i, use, nuse;\n\tfa *pfa;\n\tstatic int now = 1;\n\n\tif (setvec == 0) {\t/* first time through any RE */\n\t\tmaxsetvec = MAXLIN;\n\t\tsetvec = (int *) malloc(maxsetvec * sizeof(int));\n\t\ttmpset = (int *) malloc(maxsetvec * sizeof(int));\n\t\tif (setvec == 0 || tmpset == 0)\n\t\t\toverflo(\"out of space initializing makedfa\");\n\t}\n\n\tif (compile_time)\t/* a constant for sure */\n\t\treturn mkdfa(s, anchor);\n\tfor (i = 0; i < nfatab; i++)\t/* is it there already? */\n\t\tif (fatab[i]->anchor == anchor\n\t\t  && strcmp((const char *) fatab[i]->restr, s) == 0) {\n\t\t\tfatab[i]->use = now++;\n\t\t\treturn fatab[i];\n\t\t}\n\tpfa = mkdfa(s, anchor);\n\tif (nfatab < NFA) {\t/* room for another */\n\t\tfatab[nfatab] = pfa;\n\t\tfatab[nfatab]->use = now++;\n\t\tnfatab++;\n\t\treturn pfa;\n\t}\n\tuse = fatab[0]->use;\t/* replace least-recently used */\n\tnuse = 0;\n\tfor (i = 1; i < nfatab; i++)\n\t\tif (fatab[i]->use < use) {\n\t\t\tuse = fatab[i]->use;\n\t\t\tnuse = i;\n\t\t}\n\tfreefa(fatab[nuse]);\n\tfatab[nuse] = pfa;\n\tpfa->use = now++;\n\treturn pfa;\n}\n\nfa *mkdfa(const char *s, int anchor)\t/* does the real work of making a dfa */\n\t\t\t\t/* anchor = 1 for anchored matches, else 0 */\n{\n\tNode *p, *p1;\n\tfa *f;\n\n\tp = reparse(s);\n\tp1 = op2(CAT, op2(STAR, op2(ALL, NIL, NIL), NIL), p);\n\t\t/* put ALL STAR in front of reg.  exp. */\n\tp1 = op2(CAT, p1, op2(FINAL, NIL, NIL));\n\t\t/* put FINAL after reg.  exp. */\n\n\tposcnt = 0;\n\tpenter(p1);\t/* enter parent pointers and leaf indices */\n\tif ((f = (fa *) calloc(1, sizeof(fa) + poscnt*sizeof(rrow))) == NULL)\n\t\toverflo(\"out of space for fa\");\n\tf->accept = poscnt-1;\t/* penter has computed number of positions in re */\n\tcfoll(f, p1);\t/* set up follow sets */\n\tfreetr(p1);\n\tif ((f->posns[0] = (int *) calloc(1, *(f->re[0].lfollow)*sizeof(int))) == NULL)\n\t\t\toverflo(\"out of space in makedfa\");\n\tif ((f->posns[1] = (int *) calloc(1, sizeof(int))) == NULL)\n\t\toverflo(\"out of space in makedfa\");\n\t*f->posns[1] = 0;\n\tf->initstat = makeinit(f, anchor);\n\tf->anchor = anchor;\n\tf->restr = (uschar *) tostring(s);\n\treturn f;\n}\n\nint makeinit(fa *f, int anchor)\n{\n\tint i, k;\n\n\tf->curstat = 2;\n\tf->out[2] = 0;\n\tf->reset = 0;\n\tk = *(f->re[0].lfollow);\n\txfree(f->posns[2]);\t\t\t\n\tif ((f->posns[2] = (int *) calloc(1, (k+1)*sizeof(int))) == NULL)\n\t\toverflo(\"out of space in makeinit\");\n\tfor (i=0; i <= k; i++) {\n\t\t(f->posns[2])[i] = (f->re[0].lfollow)[i];\n\t}\n\tif ((f->posns[2])[1] == f->accept)\n\t\tf->out[2] = 1;\n\tfor (i=0; i < NCHARS; i++)\n\t\tf->gototab[2][i] = 0;\n\tf->curstat = cgoto(f, 2, HAT);\n\tif (anchor) {\n\t\t*f->posns[2] = k-1;\t/* leave out position 0 */\n\t\tfor (i=0; i < k; i++) {\n\t\t\t(f->posns[0])[i] = (f->posns[2])[i];\n\t\t}\n\n\t\tf->out[0] = f->out[2];\n\t\tif (f->curstat != 2)\n\t\t\t--(*f->posns[f->curstat]);\n\t}\n\treturn f->curstat;\n}\n\nvoid penter(Node *p)\t/* set up parent pointers and leaf indices */\n{\n\tswitch (type(p)) {\n\tELEAF\n\tLEAF\n\t\tinfo(p) = poscnt;\n\t\tposcnt++;\n\t\tbreak;\n\tUNARY\n\t\tpenter(left(p));\n\t\tparent(left(p)) = p;\n\t\tbreak;\n\tcase CAT:\n\tcase OR:\n\t\tpenter(left(p));\n\t\tpenter(right(p));\n\t\tparent(left(p)) = p;\n\t\tparent(right(p)) = p;\n\t\tbreak;\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"can't happen: unknown type %d in penter\", type(p));\n\t\tbreak;\n\t}\n}\n\nvoid freetr(Node *p)\t/* free parse tree */\n{\n\tswitch (type(p)) {\n\tELEAF\n\tLEAF\n\t\txfree(p);\n\t\tbreak;\n\tUNARY\n\t\tfreetr(left(p));\n\t\txfree(p);\n\t\tbreak;\n\tcase CAT:\n\tcase OR:\n\t\tfreetr(left(p));\n\t\tfreetr(right(p));\n\t\txfree(p);\n\t\tbreak;\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"can't happen: unknown type %d in freetr\", type(p));\n\t\tbreak;\n\t}\n}\n\n/* in the parsing of regular expressions, metacharacters like . have */\n/* to be seen literally;  \\056 is not a metacharacter. */\n\nint hexstr(char **pp)\t/* find and eval hex string at pp, return new p */\n{\t\t\t/* only pick up one 8-bit byte (2 chars) */\n\tuschar *p;\n\tint n = 0;\n\tint i;\n\n\tfor (i = 0, p = (uschar *) *pp; i < 2 && isxdigit(*p); i++, p++) {\n\t\tif (isdigit(*p))\n\t\t\tn = 16 * n + *p - '0';\n\t\telse if (*p >= 'a' && *p <= 'f')\n\t\t\tn = 16 * n + *p - 'a' + 10;\n\t\telse if (*p >= 'A' && *p <= 'F')\n\t\t\tn = 16 * n + *p - 'A' + 10;\n\t}\n\t*pp = (char *) p;\n\treturn n;\n}\n\n#define isoctdigit(c) ((c) >= '0' && (c) <= '7')\t/* multiple use of arg */\n\nint quoted(char **pp)\t/* pick up next thing after a \\\\ */\n\t\t\t/* and increment *pp */\n{\n\tchar *p = *pp;\n\tint c;\n\n\tif ((c = *p++) == 't')\n\t\tc = '\\t';\n\telse if (c == 'n')\n\t\tc = '\\n';\n\telse if (c == 'f')\n\t\tc = '\\f';\n\telse if (c == 'r')\n\t\tc = '\\r';\n\telse if (c == 'b')\n\t\tc = '\\b';\n\telse if (c == '\\\\')\n\t\tc = '\\\\';\n\telse if (c == 'x') {\t/* hexadecimal goo follows */\n\t\tc = hexstr(&p);\t/* this adds a null if number is invalid */\n\t} else if (isoctdigit(c)) {\t/* \\d \\dd \\ddd */\n\t\tint n = c - '0';\n\t\tif (isoctdigit(*p)) {\n\t\t\tn = 8 * n + *p++ - '0';\n\t\t\tif (isoctdigit(*p))\n\t\t\t\tn = 8 * n + *p++ - '0';\n\t\t}\n\t\tc = n;\n\t} /* else */\n\t\t/* c = c; */\n\t*pp = p;\n\treturn c;\n}\n\nchar *cclenter(const char *argp)\t/* add a character class */\n{\n\tint i, c, c2;\n\tuschar *p = (uschar *) argp;\n\tuschar *op, *bp;\n\tstatic uschar *buf = 0;\n\tstatic int bufsz = 100;\n\n\top = p;\n\tif (buf == 0 && (buf = (uschar *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of space for character class [%.10s...] 1\", p);\n\tbp = buf;\n\tfor (i = 0; (c = *p++) != 0; ) {\n\t\tif (c == '\\\\') {\n\t\t\tc = quoted((char **) &p);\n\t\t} else if (c == '-' && i > 0 && bp[-1] != 0) {\n\t\t\tif (*p != 0) {\n\t\t\t\tc = bp[-1];\n\t\t\t\tc2 = *p++;\n\t\t\t\tif (c2 == '\\\\')\n\t\t\t\t\tc2 = quoted((char **) &p);\n\t\t\t\tif (c > c2) {\t/* empty; ignore */\n\t\t\t\t\tbp--;\n\t\t\t\t\ti--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\twhile (c < c2) {\n\t\t\t\t\tif (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, \"cclenter1\"))\n\t\t\t\t\t\tFATAL(\"out of space for character class [%.10s...] 2\", p);\n\t\t\t\t\t*bp++ = ++c;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, \"cclenter2\"))\n\t\t\tFATAL(\"out of space for character class [%.10s...] 3\", p);\n\t\t*bp++ = c;\n\t\ti++;\n\t}\n\t*bp = 0;\n\tdprintf( (\"cclenter: in = |%s|, out = |%s|\\n\", op, buf) );\n\txfree(op);\n\treturn (char *) tostring((char *) buf);\n}\n\nvoid overflo(const char *s)\n{\n\tFATAL(\"regular expression too big: %.30s...\", s);\n}\n\nvoid cfoll(fa *f, Node *v)\t/* enter follow set of each leaf of vertex v into lfollow[leaf] */\n{\n\tint i;\n\tint *p;\n\n\tswitch (type(v)) {\n\tELEAF\n\tLEAF\n\t\tf->re[info(v)].ltype = type(v);\n\t\tf->re[info(v)].lval.np = right(v);\n\t\twhile (f->accept >= maxsetvec) {\t/* guessing here! */\n\t\t\tmaxsetvec *= 4;\n\t\t\tsetvec = (int *) realloc(setvec, maxsetvec * sizeof(int));\n\t\t\ttmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int));\n\t\t\tif (setvec == 0 || tmpset == 0)\n\t\t\t\toverflo(\"out of space in cfoll()\");\n\t\t}\n\t\tfor (i = 0; i <= f->accept; i++)\n\t\t\tsetvec[i] = 0;\n\t\tsetcnt = 0;\n\t\tfollow(v);\t/* computes setvec and setcnt */\n\t\tif ((p = (int *) calloc(1, (setcnt+1)*sizeof(int))) == NULL)\n\t\t\toverflo(\"out of space building follow set\");\n\t\tf->re[info(v)].lfollow = p;\n\t\t*p = setcnt;\n\t\tfor (i = f->accept; i >= 0; i--)\n\t\t\tif (setvec[i] == 1)\n\t\t\t\t*++p = i;\n\t\tbreak;\n\tUNARY\n\t\tcfoll(f,left(v));\n\t\tbreak;\n\tcase CAT:\n\tcase OR:\n\t\tcfoll(f,left(v));\n\t\tcfoll(f,right(v));\n\t\tbreak;\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"can't happen: unknown type %d in cfoll\", type(v));\n\t}\n}\n\nint first(Node *p)\t/* collects initially active leaves of p into setvec */\n\t\t\t/* returns 0 if p matches empty string */\n{\n\tint b, lp;\n\n\tswitch (type(p)) {\n\tELEAF\n\tLEAF\n\t\tlp = info(p);\t/* look for high-water mark of subscripts */\n\t\twhile (setcnt >= maxsetvec || lp >= maxsetvec) {\t/* guessing here! */\n\t\t\tmaxsetvec *= 4;\n\t\t\tsetvec = (int *) realloc(setvec, maxsetvec * sizeof(int));\n\t\t\ttmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int));\n\t\t\tif (setvec == 0 || tmpset == 0)\n\t\t\t\toverflo(\"out of space in first()\");\n\t\t}\n\t\tif (type(p) == EMPTYRE) {\n\t\t\tsetvec[lp] = 0;\n\t\t\treturn(0);\n\t\t}\n\t\tif (setvec[lp] != 1) {\n\t\t\tsetvec[lp] = 1;\n\t\t\tsetcnt++;\n\t\t}\n\t\tif (type(p) == CCL && (*(char *) right(p)) == '\\0')\n\t\t\treturn(0);\t\t/* empty CCL */\n\t\telse return(1);\n\tcase PLUS:\n\t\tif (first(left(p)) == 0) return(0);\n\t\treturn(1);\n\tcase STAR:\n\tcase QUEST:\n\t\tfirst(left(p));\n\t\treturn(0);\n\tcase CAT:\n\t\tif (first(left(p)) == 0 && first(right(p)) == 0) return(0);\n\t\treturn(1);\n\tcase OR:\n\t\tb = first(right(p));\n\t\tif (first(left(p)) == 0 || b == 0) return(0);\n\t\treturn(1);\n\t}\n\tFATAL(\"can't happen: unknown type %d in first\", type(p));\t/* can't happen */\n\treturn(-1);\n}\n\nvoid follow(Node *v)\t/* collects leaves that can follow v into setvec */\n{\n\tNode *p;\n\n\tif (type(v) == FINAL)\n\t\treturn;\n\tp = parent(v);\n\tswitch (type(p)) {\n\tcase STAR:\n\tcase PLUS:\n\t\tfirst(v);\n\t\tfollow(p);\n\t\treturn;\n\n\tcase OR:\n\tcase QUEST:\n\t\tfollow(p);\n\t\treturn;\n\n\tcase CAT:\n\t\tif (v == left(p)) {\t/* v is left child of p */\n\t\t\tif (first(right(p)) == 0) {\n\t\t\t\tfollow(p);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else\t\t/* v is right child */\n\t\t\tfollow(p);\n\t\treturn;\n\t}\n}\n\nint member(int c, const char *sarg)\t/* is c in s? */\n{\n\tuschar *s = (uschar *) sarg;\n\n\twhile (*s)\n\t\tif (c == *s++)\n\t\t\treturn(1);\n\treturn(0);\n}\n\nint match(fa *f, const char *p0)\t/* shortest match ? */\n{\n\tint s, ns;\n\tuschar *p = (uschar *) p0;\n\n\ts = f->reset ? makeinit(f,0) : f->initstat;\n\tif (f->out[s])\n\t\treturn(1);\n\tdo {\n\t\t/* assert(*p < NCHARS); */\n\t\tif ((ns = f->gototab[s][*p]) != 0)\n\t\t\ts = ns;\n\t\telse\n\t\t\ts = cgoto(f, s, *p);\n\t\tif (f->out[s])\n\t\t\treturn(1);\n\t} while (*p++ != 0);\n\treturn(0);\n}\n\nint pmatch(fa *f, const char *p0)\t/* longest match, for sub */\n{\n\tint s, ns;\n\tuschar *p = (uschar *) p0;\n\tuschar *q;\n\tint i, k;\n\n\t/* s = f->reset ? makeinit(f,1) : f->initstat; */\n\tif (f->reset) {\n\t\tf->initstat = s = makeinit(f,1);\n\t} else {\n\t\ts = f->initstat;\n\t}\n\tpatbeg = (char *) p;\n\tpatlen = -1;\n\tdo {\n\t\tq = p;\n\t\tdo {\n\t\t\tif (f->out[s])\t\t/* final state */\n\t\t\t\tpatlen = q-p;\n\t\t\t/* assert(*q < NCHARS); */\n\t\t\tif ((ns = f->gototab[s][*q]) != 0)\n\t\t\t\ts = ns;\n\t\t\telse\n\t\t\t\ts = cgoto(f, s, *q);\n\t\t\tif (s == 1) {\t/* no transition */\n\t\t\t\tif (patlen >= 0) {\n\t\t\t\t\tpatbeg = (char *) p;\n\t\t\t\t\treturn(1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tgoto nextin;\t/* no match */\n\t\t\t}\n\t\t} while (*q++ != 0);\n\t\tif (f->out[s])\n\t\t\tpatlen = q-p-1;\t/* don't count $ */\n\t\tif (patlen >= 0) {\n\t\t\tpatbeg = (char *) p;\n\t\t\treturn(1);\n\t\t}\n\tnextin:\n\t\ts = 2;\n\t\tif (f->reset) {\n\t\t\tfor (i = 2; i <= f->curstat; i++)\n\t\t\t\txfree(f->posns[i]);\n\t\t\tk = *f->posns[0];\t\t\t\n\t\t\tif ((f->posns[2] = (int *) calloc(1, (k+1)*sizeof(int))) == NULL)\n\t\t\t\toverflo(\"out of space in pmatch\");\n\t\t\tfor (i = 0; i <= k; i++)\n\t\t\t\t(f->posns[2])[i] = (f->posns[0])[i];\n\t\t\tf->initstat = f->curstat = 2;\n\t\t\tf->out[2] = f->out[0];\n\t\t\tfor (i = 0; i < NCHARS; i++)\n\t\t\t\tf->gototab[2][i] = 0;\n\t\t}\n\t} while (*p++ != 0);\n\treturn (0);\n}\n\nint nematch(fa *f, const char *p0)\t/* non-empty match, for sub */\n{\n\tint s, ns;\n\tuschar *p = (uschar *) p0;\n\tuschar *q;\n\tint i, k;\n\n\t/* s = f->reset ? makeinit(f,1) : f->initstat; */\n\tif (f->reset) {\n\t\tf->initstat = s = makeinit(f,1);\n\t} else {\n\t\ts = f->initstat;\n\t}\n\tpatlen = -1;\n\twhile (*p) {\n\t\tq = p;\n\t\tdo {\n\t\t\tif (f->out[s])\t\t/* final state */\n\t\t\t\tpatlen = q-p;\n\t\t\t/* assert(*q < NCHARS); */\n\t\t\tif ((ns = f->gototab[s][*q]) != 0)\n\t\t\t\ts = ns;\n\t\t\telse\n\t\t\t\ts = cgoto(f, s, *q);\n\t\t\tif (s == 1) {\t/* no transition */\n\t\t\t\tif (patlen > 0) {\n\t\t\t\t\tpatbeg = (char *) p;\n\t\t\t\t\treturn(1);\n\t\t\t\t} else\n\t\t\t\t\tgoto nnextin;\t/* no nonempty match */\n\t\t\t}\n\t\t} while (*q++ != 0);\n\t\tif (f->out[s])\n\t\t\tpatlen = q-p-1;\t/* don't count $ */\n\t\tif (patlen > 0 ) {\n\t\t\tpatbeg = (char *) p;\n\t\t\treturn(1);\n\t\t}\n\tnnextin:\n\t\ts = 2;\n\t\tif (f->reset) {\n\t\t\tfor (i = 2; i <= f->curstat; i++)\n\t\t\t\txfree(f->posns[i]);\n\t\t\tk = *f->posns[0];\t\t\t\n\t\t\tif ((f->posns[2] = (int *) calloc(1, (k+1)*sizeof(int))) == NULL)\n\t\t\t\toverflo(\"out of state space\");\n\t\t\tfor (i = 0; i <= k; i++)\n\t\t\t\t(f->posns[2])[i] = (f->posns[0])[i];\n\t\t\tf->initstat = f->curstat = 2;\n\t\t\tf->out[2] = f->out[0];\n\t\t\tfor (i = 0; i < NCHARS; i++)\n\t\t\t\tf->gototab[2][i] = 0;\n\t\t}\n\t\tp++;\n\t}\n\treturn (0);\n}\n\nNode *reparse(const char *p)\t/* parses regular expression pointed to by p */\n{\t\t\t/* uses relex() to scan regular expression */\n\tNode *np;\n\n\tdprintf( (\"reparse <%s>\\n\", p) );\n\tlastre = prestr = (uschar *) p;\t/* prestr points to string to be parsed */\n\trtok = relex();\n\t/* GNU compatibility: an empty regexp matches anything */\n\tif (rtok == '\\0') {\n\t\t/* FATAL(\"empty regular expression\"); previous */\n\t\treturn(op2(EMPTYRE, NIL, NIL));\n\t}\n\tnp = regexp();\n\tif (rtok != '\\0')\n\t\tFATAL(\"syntax error in regular expression %s at %s\", lastre, prestr);\n\treturn(np);\n}\n\nNode *regexp(void)\t/* top-level parse of reg expr */\n{\n\treturn (alt(concat(primary())));\n}\n\nNode *primary(void)\n{\n\tNode *np;\n\n\tswitch (rtok) {\n\tcase CHAR:\n\t\tnp = op2(CHAR, NIL, itonp(rlxval));\n\t\trtok = relex();\n\t\treturn (unary(np));\n\tcase ALL:\n\t\trtok = relex();\n\t\treturn (unary(op2(ALL, NIL, NIL)));\n\tcase EMPTYRE:\n\t\trtok = relex();\n\t\treturn (unary(op2(ALL, NIL, NIL)));\n\tcase DOT:\n\t\trtok = relex();\n\t\treturn (unary(op2(DOT, NIL, NIL)));\n\tcase CCL:\n\t\tnp = op2(CCL, NIL, (Node*) cclenter((char *) rlxstr));\n\t\trtok = relex();\n\t\treturn (unary(np));\n\tcase NCCL:\n\t\tnp = op2(NCCL, NIL, (Node *) cclenter((char *) rlxstr));\n\t\trtok = relex();\n\t\treturn (unary(np));\n\tcase '^':\n\t\trtok = relex();\n\t\treturn (unary(op2(CHAR, NIL, itonp(HAT))));\n\tcase '$':\n\t\trtok = relex();\n\t\treturn (unary(op2(CHAR, NIL, NIL)));\n\tcase '(':\n\t\trtok = relex();\n\t\tif (rtok == ')') {\t/* special pleading for () */\n\t\t\trtok = relex();\n\t\t\treturn unary(op2(CCL, NIL, (Node *) tostring(\"\")));\n\t\t}\n\t\tnp = regexp();\n\t\tif (rtok == ')') {\n\t\t\trtok = relex();\n\t\t\treturn (unary(np));\n\t\t}\n\t\telse\n\t\t\tFATAL(\"syntax error in regular expression %s at %s\", lastre, prestr);\n\tdefault:\n\t\tFATAL(\"illegal primary in regular expression %s at %s\", lastre, prestr);\n\t}\n\treturn 0;\t/*NOTREACHED*/\n}\n\nNode *concat(Node *np)\n{\n\tswitch (rtok) {\n\tcase CHAR: case DOT: case ALL: case EMPTYRE: case CCL: case NCCL: case '$': case '(':\n\t\treturn (concat(op2(CAT, np, primary())));\n\t}\n\treturn (np);\n}\n\nNode *alt(Node *np)\n{\n\tif (rtok == OR) {\n\t\trtok = relex();\n\t\treturn (alt(op2(OR, np, concat(primary()))));\n\t}\n\treturn (np);\n}\n\nNode *unary(Node *np)\n{\n\tswitch (rtok) {\n\tcase STAR:\n\t\trtok = relex();\n\t\treturn (unary(op2(STAR, np, NIL)));\n\tcase PLUS:\n\t\trtok = relex();\n\t\treturn (unary(op2(PLUS, np, NIL)));\n\tcase QUEST:\n\t\trtok = relex();\n\t\treturn (unary(op2(QUEST, np, NIL)));\n\tdefault:\n\t\treturn (np);\n\t}\n}\n\n/*\n * Character class definitions conformant to the POSIX locale as\n * defined in IEEE P1003.1 draft 7 of June 2001, assuming the source\n * and operating character sets are both ASCII (ISO646) or supersets\n * thereof.\n *\n * Note that to avoid overflowing the temporary buffer used in\n * relex(), the expanded character class (prior to range expansion)\n * must be less than twice the size of their full name.\n */\n\n/* Because isblank doesn't show up in any of the header files on any\n * system i use, it's defined here.  if some other locale has a richer\n * definition of \"blank\", define HAS_ISBLANK and provide your own\n * version.\n * the parentheses here are an attempt to find a path through the maze\n * of macro definition and/or function and/or version provided.  thanks\n * to nelson beebe for the suggestion; let's see if it works everywhere.\n */\n\n#ifndef HAS_ISBLANK\n\nint (my_isblank)(int c)\n{\n\treturn c==' ' || c=='\\t';\n}\n#undef  my_isblank\n#define isblank my_isblank\n\n#endif\n\nstruct charclass {\n\tconst char *cc_name;\n\tint cc_namelen;\n\tint (*cc_func)(int);\n} charclasses[] = {\n\t{ \"alnum\",\t5,\tisalnum },\n\t{ \"alpha\",\t5,\tisalpha },\n\t{ \"blank\",\t5,\tisblank },\n\t{ \"cntrl\",\t5,\tiscntrl },\n\t{ \"digit\",\t5,\tisdigit },\n\t{ \"graph\",\t5,\tisgraph },\n\t{ \"lower\",\t5,\tislower },\n\t{ \"print\",\t5,\tisprint },\n\t{ \"punct\",\t5,\tispunct },\n\t{ \"space\",\t5,\tisspace },\n\t{ \"upper\",\t5,\tisupper },\n\t{ \"xdigit\",\t6,\tisxdigit },\n\t{ NULL,\t\t0,\tNULL },\n};\n\n\nint relex(void)\t\t/* lexical analyzer for reparse */\n{\n\tint c, n;\n\tint cflag;\n\tstatic uschar *buf = 0;\n\tstatic int bufsz = 100;\n\tuschar *bp;\n\tstruct charclass *cc;\n\tint i;\n\n\tswitch (c = *prestr++) {\n\tcase '|': return OR;\n\tcase '*': return STAR;\n\tcase '+': return PLUS;\n\tcase '?': return QUEST;\n\tcase '.': return DOT;\n\tcase '\\0': prestr--; return '\\0';\n\tcase '^':\n\tcase '$':\n\tcase '(':\n\tcase ')':\n\t\treturn c;\n\tcase '\\\\':\n\t\trlxval = quoted((char **) &prestr);\n\t\treturn CHAR;\n\tdefault:\n\t\trlxval = c;\n\t\treturn CHAR;\n\tcase '[': \n\t\tif (buf == 0 && (buf = (uschar *) malloc(bufsz)) == NULL)\n\t\t\tFATAL(\"out of space in reg expr %.10s..\", lastre);\n\t\tbp = buf;\n\t\tif (*prestr == '^') {\n\t\t\tcflag = 1;\n\t\t\tprestr++;\n\t\t}\n\t\telse\n\t\t\tcflag = 0;\n\t\tn = 2 * strlen((const char *) prestr)+1;\n\t\tif (!adjbuf((char **) &buf, &bufsz, n, n, (char **) &bp, \"relex1\"))\n\t\t\tFATAL(\"out of space for reg expr %.10s...\", lastre);\n\t\tfor (; ; ) {\n\t\t\tif ((c = *prestr++) == '\\\\') {\n\t\t\t\t*bp++ = '\\\\';\n\t\t\t\tif ((c = *prestr++) == '\\0')\n\t\t\t\t\tFATAL(\"nonterminated character class %.20s...\", lastre);\n\t\t\t\t*bp++ = c;\n\t\t\t/* } else if (c == '\\n') { */\n\t\t\t/* \tFATAL(\"newline in character class %.20s...\", lastre); */\n\t\t\t} else if (c == '[' && *prestr == ':') {\n\t\t\t\t/* POSIX char class names, Dag-Erling Smorgrav, des@ofug.org */\n\t\t\t\tfor (cc = charclasses; cc->cc_name; cc++)\n\t\t\t\t\tif (strncmp((const char *) prestr + 1, (const char *) cc->cc_name, cc->cc_namelen) == 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\tif (cc->cc_name != NULL && prestr[1 + cc->cc_namelen] == ':' &&\n\t\t\t\t    prestr[2 + cc->cc_namelen] == ']') {\n\t\t\t\t\tprestr += cc->cc_namelen + 3;\n\t\t\t\t\tfor (i = 0; i < NCHARS; i++) {\n\t\t\t\t\t\tif (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, \"relex2\"))\n\t\t\t\t\t\t    FATAL(\"out of space for reg expr %.10s...\", lastre);\n\t\t\t\t\t\tif (cc->cc_func(i)) {\n\t\t\t\t\t\t\t*bp++ = i;\n\t\t\t\t\t\t\tn++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\t*bp++ = c;\n\t\t\t} else if (c == '\\0') {\n\t\t\t\tFATAL(\"nonterminated character class %.20s\", lastre);\n\t\t\t} else if (bp == buf) {\t/* 1st char is special */\n\t\t\t\t*bp++ = c;\n\t\t\t} else if (c == ']') {\n\t\t\t\t*bp++ = 0;\n\t\t\t\trlxstr = (uschar *) tostring((char *) buf);\n\t\t\t\tif (cflag == 0)\n\t\t\t\t\treturn CCL;\n\t\t\t\telse\n\t\t\t\t\treturn NCCL;\n\t\t\t} else\n\t\t\t\t*bp++ = c;\n\t\t}\n\t}\n}\n\nint cgoto(fa *f, int s, int c)\n{\n\tint i, j, k;\n\tint *p, *q;\n\n\tassert(c == HAT || c < NCHARS);\n\twhile (f->accept >= maxsetvec) {\t/* guessing here! */\n\t\tmaxsetvec *= 4;\n\t\tsetvec = (int *) realloc(setvec, maxsetvec * sizeof(int));\n\t\ttmpset = (int *) realloc(tmpset, maxsetvec * sizeof(int));\n\t\tif (setvec == 0 || tmpset == 0)\n\t\t\toverflo(\"out of space in cgoto()\");\n\t}\n\tfor (i = 0; i <= f->accept; i++)\n\t\tsetvec[i] = 0;\n\tsetcnt = 0;\n\t/* compute positions of gototab[s,c] into setvec */\n\tp = f->posns[s];\n\tfor (i = 1; i <= *p; i++) {\n\t\tif ((k = f->re[p[i]].ltype) != FINAL) {\n\t\t\tif ((k == CHAR && c == ptoi(f->re[p[i]].lval.np))\n\t\t\t || (k == DOT && c != 0 && c != HAT)\n\t\t\t || (k == ALL && c != 0)\n\t\t\t || (k == EMPTYRE && c != 0)\n\t\t\t || (k == CCL && member(c, (char *) f->re[p[i]].lval.up))\n\t\t\t || (k == NCCL && !member(c, (char *) f->re[p[i]].lval.up) && c != 0 && c != HAT)) {\n\t\t\t\tq = f->re[p[i]].lfollow;\n\t\t\t\tfor (j = 1; j <= *q; j++) {\n\t\t\t\t\tif (q[j] >= maxsetvec) {\n\t\t\t\t\t\tmaxsetvec *= 4;\n\t\t\t\t\t\tsetvec = (int *) realloc(setvec, maxsetvec * sizeof(int));\n\t\t\t\t\t\ttmpset = (int *) realloc(setvec, maxsetvec * sizeof(int));\n\t\t\t\t\t\tif (setvec == 0 || tmpset == 0)\n\t\t\t\t\t\t\toverflo(\"cgoto overflow\");\n\t\t\t\t\t}\n\t\t\t\t\tif (setvec[q[j]] == 0) {\n\t\t\t\t\t\tsetcnt++;\n\t\t\t\t\t\tsetvec[q[j]] = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t/* determine if setvec is a previous state */\n\ttmpset[0] = setcnt;\n\tj = 1;\n\tfor (i = f->accept; i >= 0; i--)\n\t\tif (setvec[i]) {\n\t\t\ttmpset[j++] = i;\n\t\t}\n\t/* tmpset == previous state? */\n\tfor (i = 1; i <= f->curstat; i++) {\n\t\tp = f->posns[i];\n\t\tif ((k = tmpset[0]) != p[0])\n\t\t\tgoto different;\n\t\tfor (j = 1; j <= k; j++)\n\t\t\tif (tmpset[j] != p[j])\n\t\t\t\tgoto different;\n\t\t/* setvec is state i */\n\t\tf->gototab[s][c] = i;\n\t\treturn i;\n\t  different:;\n\t}\n\n\t/* add tmpset to current set of states */\n\tif (f->curstat >= NSTATES-1) {\n\t\tf->curstat = 2;\n\t\tf->reset = 1;\n\t\tfor (i = 2; i < NSTATES; i++)\n\t\t\txfree(f->posns[i]);\n\t} else\n\t\t++(f->curstat);\n\tfor (i = 0; i < NCHARS; i++)\n\t\tf->gototab[f->curstat][i] = 0;\n\txfree(f->posns[f->curstat]);\n\tif ((p = (int *) calloc(1, (setcnt+1)*sizeof(int))) == NULL)\n\t\toverflo(\"out of space in cgoto\");\n\n\tf->posns[f->curstat] = p;\n\tf->gototab[s][c] = f->curstat;\n\tfor (i = 0; i <= setcnt; i++)\n\t\tp[i] = tmpset[i];\n\tif (setvec[f->accept])\n\t\tf->out[f->curstat] = 1;\n\telse\n\t\tf->out[f->curstat] = 0;\n\treturn f->curstat;\n}\n\n\nvoid freefa(fa *f)\t/* free a finite automaton */\n{\n\tint i;\n\n\tif (f == NULL)\n\t\treturn;\n\tfor (i = 0; i <= f->curstat; i++)\n\t\txfree(f->posns[i]);\n\tfor (i = 0; i <= f->accept; i++) {\n\t\txfree(f->re[i].lfollow);\n\t\tif (f->re[i].ltype == CCL || f->re[i].ltype == NCCL)\n\t\t\txfree((f->re[i].lval.np));\n\t}\n\txfree(f->restr);\n\txfree(f);\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/build-awk.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Build the host version of the awk executable and place it\n# at the right location\n\nPROGDIR=$(dirname $0)\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the host awk tool used by the NDK.\"\n\nregister_try64_option\nregister_canadian_option\nregister_jobs_option\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK install directory\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive to package directory\"\n\nGNUMAKE=make\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program\"\n\nextract_parameters \"$@\"\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=ndk-awk-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nSUBDIR=$(get_prebuilt_host_exec awk)\nOUT=$NDK_DIR/$SUBDIR\n\nAWK_VERSION=20071023\nAWK_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/nawk-$AWK_VERSION\nif [ ! -d \"$AWK_SRCDIR\" ]; then\n    echo \"ERROR: Can't find nawk-$AWK_VERSION source tree: $AWK_SRCDIR\"\n    exit 1\nfi\n\nlog \"Using sources from: $AWK_SRCDIR\"\n\nprepare_host_build\n\nBUILD_DIR=$NDK_TMPDIR\nBUILD_MINGW=\nif [ \"$MINGW\" = \"yes\" ]; then\n  BUILD_MINGW=yes\nfi\nif [ \"$TRY64\" = \"yes\" ]; then\n  BUILD_TRY64=yes\nfi\n\nlog \"Configuring the build\"\nmkdir -p $BUILD_DIR && rm -rf $BUILD_DIR/*\nprepare_canadian_toolchain $BUILD_DIR\nlog \"Building $HOST_TAG awk\"\nexport HOST_CC=\"$CC\" &&\nexport CFLAGS=$HOST_CFLAGS\" -O2 -s\" &&\nexport LDFLAGS=$HOST_LDFLAGS &&\nexport NATIVE_CC=\"gcc\" &&\nexport NATIVE_CFLAGS=\" -O2 -s -I$BUILD_DIR -I.\" &&\nexport NATIVE_LDFLAGS= &&\nrun $GNUMAKE \\\n    -C \"$AWK_SRCDIR\" \\\n    -j $NUM_JOBS \\\n    BUILD_DIR=\"$BUILD_DIR\" \\\n    MINGW=\"$BUILD_MINGW\" \\\n    TRY64=\"$BUILD_TRY64\" \\\n    V=1\nfail_panic \"Failed to build the awk-$AWK_VERSION executable!\"\n\nlog \"Copying executable to prebuilt location\"\nrun mkdir -p $(dirname \"$OUT\") && cp \"$BUILD_DIR/$(get_host_exec_name ndk-awk)\" \"$OUT\"\nfail_panic \"Could not copy executable to: $OUT\"\n\nif [ \"$PACKAGE_DIR\" ]; then\n    assert_cache_host_tag\n    dump \"Packaging: $ARCHIVE\"\n    mkdir -p \"$PACKAGE_DIR\" &&\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR\"\n    fail_panic \"Could not package archive: $PACKAGE_DIR/$ARCHIVE\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nlog \"Cleaning up\"\nrm -rf $BUILD_DIR\n\nlog \"Done.\"\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds awk for the NDK.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef main(args):\n    build_cmd = [\n        'bash', 'build-awk.sh',\n    ]\n\n    if args.host in ('windows', 'windows64'):\n        build_cmd.append('--mingw')\n\n    if args.host != 'windows':\n        build_cmd.append('--try-64')\n\n    build_support.build(build_cmd, args, intermediate_package=True)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/lex.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\nextern YYSTYPE\tyylval;\nextern int\tinfunc;\n\nint\tlineno\t= 1;\nint\tbracecnt = 0;\nint\tbrackcnt  = 0;\nint\tparencnt = 0;\n\ntypedef struct Keyword {\n\tconst char *word;\n\tint\tsub;\n\tint\ttype;\n} Keyword;\n\nKeyword keywords[] ={\t/* keep sorted: binary searched */\n\t{ \"BEGIN\",\tXBEGIN,\t\tXBEGIN },\n\t{ \"END\",\tXEND,\t\tXEND },\n\t{ \"NF\",\t\tVARNF,\t\tVARNF },\n\t{ \"atan2\",\tFATAN,\t\tBLTIN },\n\t{ \"break\",\tBREAK,\t\tBREAK },\n\t{ \"close\",\tCLOSE,\t\tCLOSE },\n\t{ \"continue\",\tCONTINUE,\tCONTINUE },\n\t{ \"cos\",\tFCOS,\t\tBLTIN },\n\t{ \"delete\",\tDELETE,\t\tDELETE },\n\t{ \"do\",\t\tDO,\t\tDO },\n\t{ \"else\",\tELSE,\t\tELSE },\n\t{ \"exit\",\tEXIT,\t\tEXIT },\n\t{ \"exp\",\tFEXP,\t\tBLTIN },\n\t{ \"fflush\",\tFFLUSH,\t\tBLTIN },\n\t{ \"for\",\tFOR,\t\tFOR },\n\t{ \"func\",\tFUNC,\t\tFUNC },\n\t{ \"function\",\tFUNC,\t\tFUNC },\n\t{ \"getline\",\tGETLINE,\tGETLINE },\n\t{ \"gsub\",\tGSUB,\t\tGSUB },\n\t{ \"if\",\t\tIF,\t\tIF },\n\t{ \"in\",\t\tIN,\t\tIN },\n\t{ \"index\",\tINDEX,\t\tINDEX },\n\t{ \"int\",\tFINT,\t\tBLTIN },\n\t{ \"length\",\tFLENGTH,\tBLTIN },\n\t{ \"log\",\tFLOG,\t\tBLTIN },\n\t{ \"match\",\tMATCHFCN,\tMATCHFCN },\n\t{ \"next\",\tNEXT,\t\tNEXT },\n\t{ \"nextfile\",\tNEXTFILE,\tNEXTFILE },\n\t{ \"print\",\tPRINT,\t\tPRINT },\n\t{ \"printf\",\tPRINTF,\t\tPRINTF },\n\t{ \"rand\",\tFRAND,\t\tBLTIN },\n\t{ \"return\",\tRETURN,\t\tRETURN },\n\t{ \"sin\",\tFSIN,\t\tBLTIN },\n\t{ \"split\",\tSPLIT,\t\tSPLIT },\n\t{ \"sprintf\",\tSPRINTF,\tSPRINTF },\n\t{ \"sqrt\",\tFSQRT,\t\tBLTIN },\n\t{ \"srand\",\tFSRAND,\t\tBLTIN },\n\t{ \"sub\",\tSUB,\t\tSUB },\n\t{ \"substr\",\tSUBSTR,\t\tSUBSTR },\n\t{ \"system\",\tFSYSTEM,\tBLTIN },\n\t{ \"tolower\",\tFTOLOWER,\tBLTIN },\n\t{ \"toupper\",\tFTOUPPER,\tBLTIN },\n\t{ \"while\",\tWHILE,\t\tWHILE },\n};\n\n#define\tRET(x)\t{ if(dbg)printf(\"lex %s\\n\", tokname(x)); return(x); }\n\nint peek(void)\n{\n\tint c = input();\n\tunput(c);\n\treturn c;\n}\n\nint gettok(char **pbuf, int *psz)\t/* get next input token */\n{\n\tint c, retc;\n\tchar *buf = *pbuf;\n\tint sz = *psz;\n\tchar *bp = buf;\n\n\tc = input();\n\tif (c == 0)\n\t\treturn 0;\n\tbuf[0] = c;\n\tbuf[1] = 0;\n\tif (!isalnum(c) && c != '.' && c != '_')\n\t\treturn c;\n\n\t*bp++ = c;\n\tif (isalpha(c) || c == '_') {\t/* it's a varname */\n\t\tfor ( ; (c = input()) != 0; ) {\n\t\t\tif (bp-buf >= sz)\n\t\t\t\tif (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, \"gettok\"))\n\t\t\t\t\tFATAL( \"out of space for name %.10s...\", buf );\n\t\t\tif (isalnum(c) || c == '_')\n\t\t\t\t*bp++ = c;\n\t\t\telse {\n\t\t\t\t*bp = 0;\n\t\t\t\tunput(c);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t*bp = 0;\n\t\tretc = 'a';\t/* alphanumeric */\n\t} else {\t/* maybe it's a number, but could be . */\n\t\tchar *rem;\n\t\t/* read input until can't be a number */\n\t\tfor ( ; (c = input()) != 0; ) {\n\t\t\tif (bp-buf >= sz)\n\t\t\t\tif (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, \"gettok\"))\n\t\t\t\t\tFATAL( \"out of space for number %.10s...\", buf );\n\t\t\tif (isdigit(c) || c == 'e' || c == 'E' \n\t\t\t  || c == '.' || c == '+' || c == '-')\n\t\t\t\t*bp++ = c;\n\t\t\telse {\n\t\t\t\tunput(c);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t*bp = 0;\n\t\tstrtod(buf, &rem);\t/* parse the number */\n\t\tif (rem == buf) {\t/* it wasn't a valid number at all */\n\t\t\tbuf[1] = 0;\t/* return one character as token */\n\t\t\tretc = buf[0];\t/* character is its own type */\n\t\t\tunputstr(rem+1); /* put rest back for later */\n\t\t} else {\t/* some prefix was a number */\n\t\t\tunputstr(rem);\t/* put rest back for later */\n\t\t\trem[0] = 0;\t/* truncate buf after number part */\n\t\t\tretc = '0';\t/* type is number */\n\t\t}\n\t}\n\t*pbuf = buf;\n\t*psz = sz;\n\treturn retc;\n}\n\nint\tword(char *);\nint\tstring(void);\nint\tregexpr(void);\nint\tsc\t= 0;\t/* 1 => return a } right now */\nint\treg\t= 0;\t/* 1 => return a REGEXPR now */\n\nint yylex(void)\n{\n\tint c;\n\tstatic char *buf = 0;\n\tstatic int bufsize = 5; /* BUG: setting this small causes core dump! */\n\n\tif (buf == 0 && (buf = (char *) malloc(bufsize)) == NULL)\n\t\tFATAL( \"out of space in yylex\" );\n\tif (sc) {\n\t\tsc = 0;\n\t\tRET('}');\n\t}\n\tif (reg) {\n\t\treg = 0;\n\t\treturn regexpr();\n\t}\n\tfor (;;) {\n\t\tc = gettok(&buf, &bufsize);\n\t\tif (c == 0)\n\t\t\treturn 0;\n\t\tif (isalpha(c) || c == '_')\n\t\t\treturn word(buf);\n\t\tif (isdigit(c)) {\n\t\t\tyylval.cp = setsymtab(buf, tostring(buf), atof(buf), CON|NUM, symtab);\n\t\t\t/* should this also have STR set? */\n\t\t\tRET(NUMBER);\n\t\t}\n\t\n\t\tyylval.i = c;\n\t\tswitch (c) {\n\t\tcase '\\n':\t/* {EOL} */\n\t\t\tRET(NL);\n\t\tcase '\\r':\t/* assume \\n is coming */\n\t\tcase ' ':\t/* {WS}+ */\n\t\tcase '\\t':\n\t\t\tbreak;\n\t\tcase '#':\t/* #.* strip comments */\n\t\t\twhile ((c = input()) != '\\n' && c != 0)\n\t\t\t\t;\n\t\t\tunput(c);\n\t\t\tbreak;\n\t\tcase ';':\n\t\t\tRET(';');\n\t\tcase '\\\\':\n\t\t\tif (peek() == '\\n') {\n\t\t\t\tinput();\n\t\t\t} else if (peek() == '\\r') {\n\t\t\t\tinput(); input();\t/* \\n */\n\t\t\t\tlineno++;\n\t\t\t} else {\n\t\t\t\tRET(c);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '&':\n\t\t\tif (peek() == '&') {\n\t\t\t\tinput(); RET(AND);\n\t\t\t} else \n\t\t\t\tRET('&');\n\t\tcase '|':\n\t\t\tif (peek() == '|') {\n\t\t\t\tinput(); RET(BOR);\n\t\t\t} else\n\t\t\t\tRET('|');\n\t\tcase '!':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = NE; RET(NE);\n\t\t\t} else if (peek() == '~') {\n\t\t\t\tinput(); yylval.i = NOTMATCH; RET(MATCHOP);\n\t\t\t} else\n\t\t\t\tRET(NOT);\n\t\tcase '~':\n\t\t\tyylval.i = MATCH;\n\t\t\tRET(MATCHOP);\n\t\tcase '<':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = LE; RET(LE);\n\t\t\t} else {\n\t\t\t\tyylval.i = LT; RET(LT);\n\t\t\t}\n\t\tcase '=':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = EQ; RET(EQ);\n\t\t\t} else {\n\t\t\t\tyylval.i = ASSIGN; RET(ASGNOP);\n\t\t\t}\n\t\tcase '>':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = GE; RET(GE);\n\t\t\t} else if (peek() == '>') {\n\t\t\t\tinput(); yylval.i = APPEND; RET(APPEND);\n\t\t\t} else {\n\t\t\t\tyylval.i = GT; RET(GT);\n\t\t\t}\n\t\tcase '+':\n\t\t\tif (peek() == '+') {\n\t\t\t\tinput(); yylval.i = INCR; RET(INCR);\n\t\t\t} else if (peek() == '=') {\n\t\t\t\tinput(); yylval.i = ADDEQ; RET(ASGNOP);\n\t\t\t} else\n\t\t\t\tRET('+');\n\t\tcase '-':\n\t\t\tif (peek() == '-') {\n\t\t\t\tinput(); yylval.i = DECR; RET(DECR);\n\t\t\t} else if (peek() == '=') {\n\t\t\t\tinput(); yylval.i = SUBEQ; RET(ASGNOP);\n\t\t\t} else\n\t\t\t\tRET('-');\n\t\tcase '*':\n\t\t\tif (peek() == '=') {\t/* *= */\n\t\t\t\tinput(); yylval.i = MULTEQ; RET(ASGNOP);\n\t\t\t} else if (peek() == '*') {\t/* ** or **= */\n\t\t\t\tinput();\t/* eat 2nd * */\n\t\t\t\tif (peek() == '=') {\n\t\t\t\t\tinput(); yylval.i = POWEQ; RET(ASGNOP);\n\t\t\t\t} else {\n\t\t\t\t\tRET(POWER);\n\t\t\t\t}\n\t\t\t} else\n\t\t\t\tRET('*');\n\t\tcase '/':\n\t\t\tRET('/');\n\t\tcase '%':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = MODEQ; RET(ASGNOP);\n\t\t\t} else\n\t\t\t\tRET('%');\n\t\tcase '^':\n\t\t\tif (peek() == '=') {\n\t\t\t\tinput(); yylval.i = POWEQ; RET(ASGNOP);\n\t\t\t} else\n\t\t\t\tRET(POWER);\n\n\t\tcase '$':\n\t\t\t/* BUG: awkward, if not wrong */\n\t\t\tc = gettok(&buf, &bufsize);\n\t\t\tif (isalpha(c)) {\n\t\t\t\tif (strcmp(buf, \"NF\") == 0) {\t/* very special */\n\t\t\t\t\tunputstr(\"(NF)\");\n\t\t\t\t\tRET(INDIRECT);\n\t\t\t\t}\n\t\t\t\tc = peek();\n\t\t\t\tif (c == '(' || c == '[' || (infunc && isarg(buf) >= 0)) {\n\t\t\t\t\tunputstr(buf);\n\t\t\t\t\tRET(INDIRECT);\n\t\t\t\t}\n\t\t\t\tyylval.cp = setsymtab(buf, \"\", 0.0, STR|NUM, symtab);\n\t\t\t\tRET(IVAR);\n\t\t\t} else if (c == 0) {\t/*  */\n\t\t\t\tSYNTAX( \"unexpected end of input after $\" );\n\t\t\t\tRET(';');\n\t\t\t} else {\n\t\t\t\tunputstr(buf);\n\t\t\t\tRET(INDIRECT);\n\t\t\t}\n\t\n\t\tcase '}':\n\t\t\tif (--bracecnt < 0)\n\t\t\t\tSYNTAX( \"extra }\" );\n\t\t\tsc = 1;\n\t\t\tRET(';');\n\t\tcase ']':\n\t\t\tif (--brackcnt < 0)\n\t\t\t\tSYNTAX( \"extra ]\" );\n\t\t\tRET(']');\n\t\tcase ')':\n\t\t\tif (--parencnt < 0)\n\t\t\t\tSYNTAX( \"extra )\" );\n\t\t\tRET(')');\n\t\tcase '{':\n\t\t\tbracecnt++;\n\t\t\tRET('{');\n\t\tcase '[':\n\t\t\tbrackcnt++;\n\t\t\tRET('[');\n\t\tcase '(':\n\t\t\tparencnt++;\n\t\t\tRET('(');\n\t\n\t\tcase '\"':\n\t\t\treturn string();\t/* BUG: should be like tran.c ? */\n\t\n\t\tdefault:\n\t\t\tRET(c);\n\t\t}\n\t}\n}\n\nint string(void)\n{\n\tint c, n;\n\tchar *s, *bp;\n\tstatic char *buf = 0;\n\tstatic int bufsz = 500;\n\n\tif (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of space for strings\");\n\tfor (bp = buf; (c = input()) != '\"'; ) {\n\t\tif (!adjbuf(&buf, &bufsz, bp-buf+2, 500, &bp, \"string\"))\n\t\t\tFATAL(\"out of space for string %.10s...\", buf);\n\t\tswitch (c) {\n\t\tcase '\\n':\n\t\tcase '\\r':\n\t\tcase 0:\n\t\t\tSYNTAX( \"non-terminated string %.10s...\", buf );\n\t\t\tlineno++;\n\t\t\tif (c == 0)\t/* hopeless */\n\t\t\t\tFATAL( \"giving up\" );\n\t\t\tbreak;\n\t\tcase '\\\\':\n\t\t\tc = input();\n\t\t\tswitch (c) {\n\t\t\tcase '\"': *bp++ = '\"'; break;\n\t\t\tcase 'n': *bp++ = '\\n'; break;\t\n\t\t\tcase 't': *bp++ = '\\t'; break;\n\t\t\tcase 'f': *bp++ = '\\f'; break;\n\t\t\tcase 'r': *bp++ = '\\r'; break;\n\t\t\tcase 'b': *bp++ = '\\b'; break;\n\t\t\tcase 'v': *bp++ = '\\v'; break;\n\t\t\tcase 'a': *bp++ = '\\007'; break;\n\t\t\tcase '\\\\': *bp++ = '\\\\'; break;\n\n\t\t\tcase '0': case '1': case '2': /* octal: \\d \\dd \\ddd */\n\t\t\tcase '3': case '4': case '5': case '6': case '7':\n\t\t\t\tn = c - '0';\n\t\t\t\tif ((c = peek()) >= '0' && c < '8') {\n\t\t\t\t\tn = 8 * n + input() - '0';\n\t\t\t\t\tif ((c = peek()) >= '0' && c < '8')\n\t\t\t\t\t\tn = 8 * n + input() - '0';\n\t\t\t\t}\n\t\t\t\t*bp++ = n;\n\t\t\t\tbreak;\n\n\t\t\tcase 'x':\t/* hex  \\x0-9a-fA-F + */\n\t\t\t    {\tchar xbuf[100], *px;\n\t\t\t\tfor (px = xbuf; (c = input()) != 0 && px-xbuf < 100-2; ) {\n\t\t\t\t\tif (isdigit(c)\n\t\t\t\t\t || (c >= 'a' && c <= 'f')\n\t\t\t\t\t || (c >= 'A' && c <= 'F'))\n\t\t\t\t\t\t*px++ = c;\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t*px = 0;\n\t\t\t\tunput(c);\n\t  \t\t\tsscanf(xbuf, \"%x\", &n);\n\t\t\t\t*bp++ = n;\n\t\t\t\tbreak;\n\t\t\t    }\n\n\t\t\tdefault: \n\t\t\t\t*bp++ = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t*bp++ = c;\n\t\t\tbreak;\n\t\t}\n\t}\n\t*bp = 0; \n\ts = tostring(buf);\n\t*bp++ = ' '; *bp++ = 0;\n\tyylval.cp = setsymtab(buf, s, 0.0, CON|STR|DONTFREE, symtab);\n\tRET(STRING);\n}\n\n\nint binsearch(char *w, Keyword *kp, int n)\n{\n\tint cond, low, mid, high;\n\n\tlow = 0;\n\thigh = n - 1;\n\twhile (low <= high) {\n\t\tmid = (low + high) / 2;\n\t\tif ((cond = strcmp(w, kp[mid].word)) < 0)\n\t\t\thigh = mid - 1;\n\t\telse if (cond > 0)\n\t\t\tlow = mid + 1;\n\t\telse\n\t\t\treturn mid;\n\t}\n\treturn -1;\n}\n\nint word(char *w) \n{\n\tKeyword *kp;\n\tint c, n;\n\n\tn = binsearch(w, keywords, sizeof(keywords)/sizeof(keywords[0]));\n/* BUG: this ought to be inside the if; in theory could fault (daniel barrett) */\n\tkp = keywords + n;\n\tif (n != -1) {\t/* found in table */\n\t\tyylval.i = kp->sub;\n\t\tswitch (kp->type) {\t/* special handling */\n\t\tcase BLTIN:\n\t\t\tif (kp->sub == FSYSTEM && safe)\n\t\t\t\tSYNTAX( \"system is unsafe\" );\n\t\t\tRET(kp->type);\n\t\tcase FUNC:\n\t\t\tif (infunc)\n\t\t\t\tSYNTAX( \"illegal nested function\" );\n\t\t\tRET(kp->type);\n\t\tcase RETURN:\n\t\t\tif (!infunc)\n\t\t\t\tSYNTAX( \"return not in function\" );\n\t\t\tRET(kp->type);\n\t\tcase VARNF:\n\t\t\tyylval.cp = setsymtab(\"NF\", \"\", 0.0, NUM, symtab);\n\t\t\tRET(VARNF);\n\t\tdefault:\n\t\t\tRET(kp->type);\n\t\t}\n\t}\n\tc = peek();\t/* look for '(' */\n\tif (c != '(' && infunc && (n=isarg(w)) >= 0) {\n\t\tyylval.i = n;\n\t\tRET(ARG);\n\t} else {\n\t\tyylval.cp = setsymtab(w, \"\", 0.0, STR|NUM|DONTFREE, symtab);\n\t\tif (c == '(') {\n\t\t\tRET(CALL);\n\t\t} else {\n\t\t\tRET(VAR);\n\t\t}\n\t}\n}\n\nvoid startreg(void)\t/* next call to yylex will return a regular expression */\n{\n\treg = 1;\n}\n\nint regexpr(void)\n{\n\tint c;\n\tstatic char *buf = 0;\n\tstatic int bufsz = 500;\n\tchar *bp;\n\n\tif (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of space for rex expr\");\n\tbp = buf;\n\tfor ( ; (c = input()) != '/' && c != 0; ) {\n\t\tif (!adjbuf(&buf, &bufsz, bp-buf+3, 500, &bp, \"regexpr\"))\n\t\t\tFATAL(\"out of space for reg expr %.10s...\", buf);\n\t\tif (c == '\\n') {\n\t\t\tSYNTAX( \"newline in regular expression %.10s...\", buf ); \n\t\t\tunput('\\n');\n\t\t\tbreak;\n\t\t} else if (c == '\\\\') {\n\t\t\t*bp++ = '\\\\'; \n\t\t\t*bp++ = input();\n\t\t} else {\n\t\t\t*bp++ = c;\n\t\t}\n\t}\n\t*bp = 0;\n\tif (c == 0)\n\t\tSYNTAX(\"non-terminated regular expression %.10s...\", buf);\n\tyylval.s = tostring(buf);\n\tunput('/');\n\tRET(REGEXPR);\n}\n\n/* low-level lexical stuff, sort of inherited from lex */\n\nchar\tebuf[300];\nchar\t*ep = ebuf;\nchar\tyysbuf[100];\t/* pushback buffer */\nchar\t*yysptr = yysbuf;\nFILE\t*yyin = 0;\n\nint input(void)\t/* get next lexical input character */\n{\n\tint c;\n\textern char *lexprog;\n\n\tif (yysptr > yysbuf)\n\t\tc = (uschar)*--yysptr;\n\telse if (lexprog != NULL) {\t/* awk '...' */\n\t\tif ((c = (uschar)*lexprog) != 0)\n\t\t\tlexprog++;\n\t} else\t\t\t\t/* awk -f ... */\n\t\tc = pgetc();\n\tif (c == '\\n')\n\t\tlineno++;\n\telse if (c == EOF)\n\t\tc = 0;\n\tif (ep >= ebuf + sizeof ebuf)\n\t\tep = ebuf;\n\treturn *ep++ = c;\n}\n\nvoid unput(int c)\t/* put lexical character back on input */\n{\n\tif (c == '\\n')\n\t\tlineno--;\n\tif (yysptr >= yysbuf + sizeof(yysbuf))\n\t\tFATAL(\"pushed back too much: %.20s...\", yysbuf);\n\t*yysptr++ = c;\n\tif (--ep < ebuf)\n\t\tep = ebuf + sizeof(ebuf) - 1;\n}\n\nvoid unputstr(const char *s)\t/* put a string back on input */\n{\n\tint i;\n\n\tfor (i = strlen(s)-1; i >= 0; i--)\n\t\tunput(s[i]);\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/lib.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#define DEBUG\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\nFILE\t*infile\t= NULL;\nchar\t*file\t= \"\";\nchar\t*record;\nint\trecsize\t= RECSIZE;\nchar\t*fields;\nint\tfieldssize = RECSIZE;\n\nCell\t**fldtab;\t/* pointers to Cells */\nchar\tinputFS[100] = \" \";\n\n#define\tMAXFLD\t2\nint\tnfields\t= MAXFLD;\t/* last allocated slot for $i */\n\nint\tdonefld;\t/* 1 = implies rec broken into fields */\nint\tdonerec;\t/* 1 = record is valid (no flds have changed) */\n\nint\tlastfld\t= 0;\t/* last used field */\nint\targno\t= 1;\t/* current input argument number */\nextern\tAwkfloat *ARGC;\n\nstatic Cell dollar0 = { OCELL, CFLD, NULL, \"\", 0.0, REC|STR|DONTFREE };\nstatic Cell dollar1 = { OCELL, CFLD, NULL, \"\", 0.0, FLD|STR|DONTFREE };\n\nvoid recinit(unsigned int n)\n{\n\tif ( (record = (char *) malloc(n)) == NULL\n\t  || (fields = (char *) malloc(n+1)) == NULL\n\t  || (fldtab = (Cell **) malloc((nfields+1) * sizeof(Cell *))) == NULL\n\t  || (fldtab[0] = (Cell *) malloc(sizeof(Cell))) == NULL )\n\t\tFATAL(\"out of space for $0 and fields\");\n\t*fldtab[0] = dollar0;\n\tfldtab[0]->sval = record;\n\tfldtab[0]->nval = tostring(\"0\");\n\tmakefields(1, nfields);\n}\n\nvoid makefields(int n1, int n2)\t\t/* create $n1..$n2 inclusive */\n{\n\tchar temp[50];\n\tint i;\n\n\tfor (i = n1; i <= n2; i++) {\n\t\tfldtab[i] = (Cell *) malloc(sizeof (struct Cell));\n\t\tif (fldtab[i] == NULL)\n\t\t\tFATAL(\"out of space in makefields %d\", i);\n\t\t*fldtab[i] = dollar1;\n\t\tsprintf(temp, \"%d\", i);\n\t\tfldtab[i]->nval = tostring(temp);\n\t}\n}\n\nvoid initgetrec(void)\n{\n\tint i;\n\tchar *p;\n\n\tfor (i = 1; i < *ARGC; i++) {\n\t\tif (!isclvar(p = getargv(i))) {\t/* find 1st real filename */\n\t\t\tsetsval(lookup(\"FILENAME\", symtab), getargv(i));\n\t\t\treturn;\n\t\t}\n\t\tsetclvar(p);\t/* a commandline assignment before filename */\n\t\targno++;\n\t}\n\tinfile = stdin;\t\t/* no filenames, so use stdin */\n}\n\nstatic int firsttime = 1;\n\nint getrec(char **pbuf, int *pbufsize, int isrecord)\t/* get next input record */\n{\t\t\t/* note: cares whether buf == record */\n\tint c;\n\tchar *buf = *pbuf;\n\tuschar saveb0;\n\tint bufsize = *pbufsize, savebufsize = bufsize;\n\n\tif (firsttime) {\n\t\tfirsttime = 0;\n\t\tinitgetrec();\n\t}\n\t   dprintf( (\"RS=<%s>, FS=<%s>, ARGC=%g, FILENAME=%s\\n\",\n\t\t*RS, *FS, *ARGC, *FILENAME) );\n\tif (isrecord) {\n\t\tdonefld = 0;\n\t\tdonerec = 1;\n\t}\n\tsaveb0 = buf[0];\n\tbuf[0] = 0;\n\twhile (argno < *ARGC || infile == stdin) {\n\t\t   dprintf( (\"argno=%d, file=|%s|\\n\", argno, file) );\n\t\tif (infile == NULL) {\t/* have to open a new file */\n\t\t\tfile = getargv(argno);\n\t\t\tif (*file == '\\0') {\t/* it's been zapped */\n\t\t\t\targno++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isclvar(file)) {\t/* a var=value arg */\n\t\t\t\tsetclvar(file);\n\t\t\t\targno++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t*FILENAME = file;\n\t\t\t   dprintf( (\"opening file %s\\n\", file) );\n\t\t\tif (*file == '-' && *(file+1) == '\\0')\n\t\t\t\tinfile = stdin;\n\t\t\telse if ((infile = fopen(file, \"r\")) == NULL)\n\t\t\t\tFATAL(\"can't open file %s\", file);\n\t\t\tsetfval(fnrloc, 0.0);\n\t\t}\n\t\tc = readrec(&buf, &bufsize, infile);\n\t\tif (c != 0 || buf[0] != '\\0') {\t/* normal record */\n\t\t\tif (isrecord) {\n\t\t\t\tif (freeable(fldtab[0]))\n\t\t\t\t\txfree(fldtab[0]->sval);\n\t\t\t\tfldtab[0]->sval = buf;\t/* buf == record */\n\t\t\t\tfldtab[0]->tval = REC | STR | DONTFREE;\n\t\t\t\tif (is_number(fldtab[0]->sval)) {\n\t\t\t\t\tfldtab[0]->fval = atof(fldtab[0]->sval);\n\t\t\t\t\tfldtab[0]->tval |= NUM;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetfval(nrloc, nrloc->fval+1);\n\t\t\tsetfval(fnrloc, fnrloc->fval+1);\n\t\t\t*pbuf = buf;\n\t\t\t*pbufsize = bufsize;\n\t\t\treturn 1;\n\t\t}\n\t\t/* EOF arrived on this file; set up next */\n\t\tif (infile != stdin)\n\t\t\tfclose(infile);\n\t\tinfile = NULL;\n\t\targno++;\n\t}\n\tbuf[0] = saveb0;\n\t*pbuf = buf;\n\t*pbufsize = savebufsize;\n\treturn 0;\t/* true end of file */\n}\n\nvoid nextfile(void)\n{\n\tif (infile != NULL && infile != stdin)\n\t\tfclose(infile);\n\tinfile = NULL;\n\targno++;\n}\n\nint readrec(char **pbuf, int *pbufsize, FILE *inf)\t/* read one record into buf */\n{\n\tint sep, c;\n\tchar *rr, *buf = *pbuf;\n\tint bufsize = *pbufsize;\n\n\tif (strlen(*FS) >= sizeof(inputFS))\n\t\tFATAL(\"field separator %.10s... is too long\", *FS);\n\tstrcpy(inputFS, *FS);\t/* for subsequent field splitting */\n\tif ((sep = **RS) == 0) {\n\t\tsep = '\\n';\n\t\twhile ((c=getc(inf)) == '\\n' && c != EOF)\t/* skip leading \\n's */\n\t\t\t;\n\t\tif (c != EOF)\n\t\t\tungetc(c, inf);\n\t}\n\tfor (rr = buf; ; ) {\n\t\tfor (; (c=getc(inf)) != sep && c != EOF; ) {\n\t\t\tif (rr-buf+1 > bufsize)\n\t\t\t\tif (!adjbuf(&buf, &bufsize, 1+rr-buf, recsize, &rr, \"readrec 1\"))\n\t\t\t\t\tFATAL(\"input record `%.30s...' too long\", buf);\n\t\t\t*rr++ = c;\n\t\t}\n\t\tif (**RS == sep || c == EOF)\n\t\t\tbreak;\n\t\tif ((c = getc(inf)) == '\\n' || c == EOF) /* 2 in a row */\n\t\t\tbreak;\n\t\tif (!adjbuf(&buf, &bufsize, 2+rr-buf, recsize, &rr, \"readrec 2\"))\n\t\t\tFATAL(\"input record `%.30s...' too long\", buf);\n\t\t*rr++ = '\\n';\n\t\t*rr++ = c;\n\t}\n\tif (!adjbuf(&buf, &bufsize, 1+rr-buf, recsize, &rr, \"readrec 3\"))\n\t\tFATAL(\"input record `%.30s...' too long\", buf);\n\t*rr = 0;\n\t   dprintf( (\"readrec saw <%s>, returns %d\\n\", buf, c == EOF && rr == buf ? 0 : 1) );\n\t*pbuf = buf;\n\t*pbufsize = bufsize;\n\treturn c == EOF && rr == buf ? 0 : 1;\n}\n\nchar *getargv(int n)\t/* get ARGV[n] */\n{\n\tCell *x;\n\tchar *s, temp[50];\n\textern Array *ARGVtab;\n\n\tsprintf(temp, \"%d\", n);\n\tx = setsymtab(temp, \"\", 0.0, STR, ARGVtab);\n\ts = getsval(x);\n\t   dprintf( (\"getargv(%d) returns |%s|\\n\", n, s) );\n\treturn s;\n}\n\nvoid setclvar(char *s)\t/* set var=value from s */\n{\n\tchar *p;\n\tCell *q;\n\n\tfor (p=s; *p != '='; p++)\n\t\t;\n\t*p++ = 0;\n\tp = qstring(p, '\\0');\n\tq = setsymtab(s, p, 0.0, STR, symtab);\n\tsetsval(q, p);\n\tif (is_number(q->sval)) {\n\t\tq->fval = atof(q->sval);\n\t\tq->tval |= NUM;\n\t}\n\t   dprintf( (\"command line set %s to |%s|\\n\", s, p) );\n}\n\n\nvoid fldbld(void)\t/* create fields from current record */\n{\n\t/* this relies on having fields[] the same length as $0 */\n\t/* the fields are all stored in this one array with \\0's */\n\tchar *r, *fr, sep;\n\tCell *p;\n\tint i, j, n;\n\n\tif (donefld)\n\t\treturn;\n\tif (!isstr(fldtab[0]))\n\t\tgetsval(fldtab[0]);\n\tr = fldtab[0]->sval;\n\tn = strlen(r);\n\tif (n > fieldssize) {\n\t\txfree(fields);\n\t\tif ((fields = (char *) malloc(n+1)) == NULL)\n\t\t\tFATAL(\"out of space for fields in fldbld %d\", n);\n\t\tfieldssize = n;\n\t}\n\tfr = fields;\n\ti = 0;\t/* number of fields accumulated here */\n\tif (strlen(inputFS) > 1) {\t/* it's a regular expression */\n\t\ti = refldbld(r, inputFS);\n\t} else if ((sep = *inputFS) == ' ') {\t/* default whitespace */\n\t\tfor (i = 0; ; ) {\n\t\t\twhile (*r == ' ' || *r == '\\t' || *r == '\\n')\n\t\t\t\tr++;\n\t\t\tif (*r == 0)\n\t\t\t\tbreak;\n\t\t\ti++;\n\t\t\tif (i > nfields)\n\t\t\t\tgrowfldtab(i);\n\t\t\tif (freeable(fldtab[i]))\n\t\t\t\txfree(fldtab[i]->sval);\n\t\t\tfldtab[i]->sval = fr;\n\t\t\tfldtab[i]->tval = FLD | STR | DONTFREE;\n\t\t\tdo\n\t\t\t\t*fr++ = *r++;\n\t\t\twhile (*r != ' ' && *r != '\\t' && *r != '\\n' && *r != '\\0');\n\t\t\t*fr++ = 0;\n\t\t}\n\t\t*fr = 0;\n\t} else if ((sep = *inputFS) == 0) {\t\t/* new: FS=\"\" => 1 char/field */\n\t\tfor (i = 0; *r != 0; r++) {\n\t\t\tchar buf[2];\n\t\t\ti++;\n\t\t\tif (i > nfields)\n\t\t\t\tgrowfldtab(i);\n\t\t\tif (freeable(fldtab[i]))\n\t\t\t\txfree(fldtab[i]->sval);\n\t\t\tbuf[0] = *r;\n\t\t\tbuf[1] = 0;\n\t\t\tfldtab[i]->sval = tostring(buf);\n\t\t\tfldtab[i]->tval = FLD | STR;\n\t\t}\n\t\t*fr = 0;\n\t} else if (*r != 0) {\t/* if 0, it's a null field */\n\t\t/* subtlecase : if length(FS) == 1 && length(RS > 0)\n\t\t * \\n is NOT a field separator (cf awk book 61,84).\n\t\t * this variable is tested in the inner while loop.\n\t\t */\n\t\tint rtest = '\\n';  /* normal case */\n\t\tif (strlen(*RS) > 0)\n\t\t\trtest = '\\0';\n\t\tfor (;;) {\n\t\t\ti++;\n\t\t\tif (i > nfields)\n\t\t\t\tgrowfldtab(i);\n\t\t\tif (freeable(fldtab[i]))\n\t\t\t\txfree(fldtab[i]->sval);\n\t\t\tfldtab[i]->sval = fr;\n\t\t\tfldtab[i]->tval = FLD | STR | DONTFREE;\n\t\t\twhile (*r != sep && *r != rtest && *r != '\\0')\t/* \\n is always a separator */\n\t\t\t\t*fr++ = *r++;\n\t\t\t*fr++ = 0;\n\t\t\tif (*r++ == 0)\n\t\t\t\tbreak;\n\t\t}\n\t\t*fr = 0;\n\t}\n\tif (i > nfields)\n\t\tFATAL(\"record `%.30s...' has too many fields; can't happen\", r);\n\tcleanfld(i+1, lastfld);\t/* clean out junk from previous record */\n\tlastfld = i;\n\tdonefld = 1;\n\tfor (j = 1; j <= lastfld; j++) {\n\t\tp = fldtab[j];\n\t\tif(is_number(p->sval)) {\n\t\t\tp->fval = atof(p->sval);\n\t\t\tp->tval |= NUM;\n\t\t}\n\t}\n\tsetfval(nfloc, (Awkfloat) lastfld);\n\tif (dbg) {\n\t\tfor (j = 0; j <= lastfld; j++) {\n\t\t\tp = fldtab[j];\n\t\t\tprintf(\"field %d (%s): |%s|\\n\", j, p->nval, p->sval);\n\t\t}\n\t}\n}\n\nvoid cleanfld(int n1, int n2)\t/* clean out fields n1 .. n2 inclusive */\n{\t\t\t\t/* nvals remain intact */\n\tCell *p;\n\tint i;\n\n\tfor (i = n1; i <= n2; i++) {\n\t\tp = fldtab[i];\n\t\tif (freeable(p))\n\t\t\txfree(p->sval);\n\t\tp->sval = \"\";\n\t\tp->tval = FLD | STR | DONTFREE;\n\t}\n}\n\nvoid newfld(int n)\t/* add field n after end of existing lastfld */\n{\n\tif (n > nfields)\n\t\tgrowfldtab(n);\n\tcleanfld(lastfld+1, n);\n\tlastfld = n;\n\tsetfval(nfloc, (Awkfloat) n);\n}\n\nCell *fieldadr(int n)\t/* get nth field */\n{\n\tif (n < 0)\n\t\tFATAL(\"trying to access out of range field %d\", n);\n\tif (n > nfields)\t/* fields after NF are empty */\n\t\tgrowfldtab(n);\t/* but does not increase NF */\n\treturn(fldtab[n]);\n}\n\nvoid growfldtab(int n)\t/* make new fields up to at least $n */\n{\n\tint nf = 2 * nfields;\n\tsize_t s;\n\n\tif (n > nf)\n\t\tnf = n;\n\ts = (nf+1) * (sizeof (struct Cell *));  /* freebsd: how much do we need? */\n\tif (s / sizeof(struct Cell *) - 1 == nf) /* didn't overflow */\n\t\tfldtab = (Cell **) realloc(fldtab, s);\n\telse\t\t\t\t\t/* overflow sizeof int */\n\t\txfree(fldtab);\t/* make it null */\n\tif (fldtab == NULL)\n\t\tFATAL(\"out of space creating %d fields\", nf);\n\tmakefields(nfields+1, nf);\n\tnfields = nf;\n}\n\nint refldbld(const char *rec, const char *fs)\t/* build fields from reg expr in FS */\n{\n\t/* this relies on having fields[] the same length as $0 */\n\t/* the fields are all stored in this one array with \\0's */\n\tchar *fr;\n\tint i, tempstat, n;\n\tfa *pfa;\n\n\tn = strlen(rec);\n\tif (n > fieldssize) {\n\t\txfree(fields);\n\t\tif ((fields = (char *) malloc(n+1)) == NULL)\n\t\t\tFATAL(\"out of space for fields in refldbld %d\", n);\n\t\tfieldssize = n;\n\t}\n\tfr = fields;\n\t*fr = '\\0';\n\tif (*rec == '\\0')\n\t\treturn 0;\n\tpfa = makedfa(fs, 1);\n\t   dprintf( (\"into refldbld, rec = <%s>, pat = <%s>\\n\", rec, fs) );\n\ttempstat = pfa->initstat;\n\tfor (i = 1; ; i++) {\n\t\tif (i > nfields)\n\t\t\tgrowfldtab(i);\n\t\tif (freeable(fldtab[i]))\n\t\t\txfree(fldtab[i]->sval);\n\t\tfldtab[i]->tval = FLD | STR | DONTFREE;\n\t\tfldtab[i]->sval = fr;\n\t\t   dprintf( (\"refldbld: i=%d\\n\", i) );\n\t\tif (nematch(pfa, rec)) {\n\t\t\tpfa->initstat = 2;\t/* horrible coupling to b.c */\n\t\t\t   dprintf( (\"match %s (%d chars)\\n\", patbeg, patlen) );\n\t\t\tstrncpy(fr, rec, patbeg-rec);\n\t\t\tfr += patbeg - rec + 1;\n\t\t\t*(fr-1) = '\\0';\n\t\t\trec = patbeg + patlen;\n\t\t} else {\n\t\t\t   dprintf( (\"no match %s\\n\", rec) );\n\t\t\tstrcpy(fr, rec);\n\t\t\tpfa->initstat = tempstat;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn i;\t\t\n}\n\nvoid recbld(void)\t/* create $0 from $1..$NF if necessary */\n{\n\tint i;\n\tchar *r, *p;\n\n\tif (donerec == 1)\n\t\treturn;\n\tr = record;\n\tfor (i = 1; i <= *NF; i++) {\n\t\tp = getsval(fldtab[i]);\n\t\tif (!adjbuf(&record, &recsize, 1+strlen(p)+r-record, recsize, &r, \"recbld 1\"))\n\t\t\tFATAL(\"created $0 `%.30s...' too long\", record);\n\t\twhile ((*r = *p++) != 0)\n\t\t\tr++;\n\t\tif (i < *NF) {\n\t\t\tif (!adjbuf(&record, &recsize, 2+strlen(*OFS)+r-record, recsize, &r, \"recbld 2\"))\n\t\t\t\tFATAL(\"created $0 `%.30s...' too long\", record);\n\t\t\tfor (p = *OFS; (*r = *p++) != 0; )\n\t\t\t\tr++;\n\t\t}\n\t}\n\tif (!adjbuf(&record, &recsize, 2+r-record, recsize, &r, \"recbld 3\"))\n\t\tFATAL(\"built giant record `%.30s...'\", record);\n\t*r = '\\0';\n\t   dprintf( (\"in recbld inputFS=%s, fldtab[0]=%p\\n\", inputFS, fldtab[0]) );\n\n\tif (freeable(fldtab[0]))\n\t\txfree(fldtab[0]->sval);\n\tfldtab[0]->tval = REC | STR | DONTFREE;\n\tfldtab[0]->sval = record;\n\n\t   dprintf( (\"in recbld inputFS=%s, fldtab[0]=%p\\n\", inputFS, fldtab[0]) );\n\t   dprintf( (\"recbld = |%s|\\n\", record) );\n\tdonerec = 1;\n}\n\nint\terrorflag\t= 0;\n\nvoid yyerror(const char *s)\n{\n\tSYNTAX(\"%s\", s);\n}\n\nvoid SYNTAX(const char *fmt, ...)\n{\n\textern char *cmdname, *curfname;\n\tstatic int been_here = 0;\n\tva_list varg;\n\n\tif (been_here++ > 2)\n\t\treturn;\n\tfprintf(stderr, \"%s: \", cmdname);\n\tva_start(varg, fmt);\n\tvfprintf(stderr, fmt, varg);\n\tva_end(varg);\n\tfprintf(stderr, \" at source line %d\", lineno);\n\tif (curfname != NULL)\n\t\tfprintf(stderr, \" in function %s\", curfname);\n\tif (compile_time == 1 && cursource() != NULL)\n\t\tfprintf(stderr, \" source file %s\", cursource());\n\tfprintf(stderr, \"\\n\");\n\terrorflag = 2;\n\teprint();\n}\n\nvoid fpecatch(int n)\n{\n\tFATAL(\"floating point exception %d\", n);\n}\n\nextern int bracecnt, brackcnt, parencnt;\n\nvoid bracecheck(void)\n{\n\tint c;\n\tstatic int beenhere = 0;\n\n\tif (beenhere++)\n\t\treturn;\n\twhile ((c = input()) != EOF && c != '\\0')\n\t\tbclass(c);\n\tbcheck2(bracecnt, '{', '}');\n\tbcheck2(brackcnt, '[', ']');\n\tbcheck2(parencnt, '(', ')');\n}\n\nvoid bcheck2(int n, int c1, int c2)\n{\n\tif (n == 1)\n\t\tfprintf(stderr, \"\\tmissing %c\\n\", c2);\n\telse if (n > 1)\n\t\tfprintf(stderr, \"\\t%d missing %c's\\n\", n, c2);\n\telse if (n == -1)\n\t\tfprintf(stderr, \"\\textra %c\\n\", c2);\n\telse if (n < -1)\n\t\tfprintf(stderr, \"\\t%d extra %c's\\n\", -n, c2);\n}\n\nvoid FATAL(const char *fmt, ...)\n{\n\textern char *cmdname;\n\tva_list varg;\n\n\tfflush(stdout);\n\tfprintf(stderr, \"%s: \", cmdname);\n\tva_start(varg, fmt);\n\tvfprintf(stderr, fmt, varg);\n\tva_end(varg);\n\terror();\n\tif (dbg > 1)\t\t/* core dump if serious debugging on */\n\t\tabort();\n\texit(2);\n}\n\nvoid WARNING(const char *fmt, ...)\n{\n\textern char *cmdname;\n\tva_list varg;\n\n\tfflush(stdout);\n\tfprintf(stderr, \"%s: \", cmdname);\n\tva_start(varg, fmt);\n\tvfprintf(stderr, fmt, varg);\n\tva_end(varg);\n\terror();\n}\n\nvoid error()\n{\n\textern Node *curnode;\n\n\tfprintf(stderr, \"\\n\");\n\tif (compile_time != 2 && NR && *NR > 0) {\n\t\tfprintf(stderr, \" input record number %d\", (int) (*FNR));\n\t\tif (strcmp(*FILENAME, \"-\") != 0)\n\t\t\tfprintf(stderr, \", file %s\", *FILENAME);\n\t\tfprintf(stderr, \"\\n\");\n\t}\n\tif (compile_time != 2 && curnode)\n\t\tfprintf(stderr, \" source line number %d\", curnode->lineno);\n\telse if (compile_time != 2 && lineno)\n\t\tfprintf(stderr, \" source line number %d\", lineno);\n\tif (compile_time == 1 && cursource() != NULL)\n\t\tfprintf(stderr, \" source file %s\", cursource());\n\tfprintf(stderr, \"\\n\");\n\teprint();\n}\n\nvoid eprint(void)\t/* try to print context around error */\n{\n\tchar *p, *q;\n\tint c;\n\tstatic int been_here = 0;\n\textern char ebuf[], *ep;\n\n\tif (compile_time == 2 || compile_time == 0 || been_here++ > 0)\n\t\treturn;\n\tp = ep - 1;\n\tif (p > ebuf && *p == '\\n')\n\t\tp--;\n\tfor ( ; p > ebuf && *p != '\\n' && *p != '\\0'; p--)\n\t\t;\n\twhile (*p == '\\n')\n\t\tp++;\n\tfprintf(stderr, \" context is\\n\\t\");\n\tfor (q=ep-1; q>=p && *q!=' ' && *q!='\\t' && *q!='\\n'; q--)\n\t\t;\n\tfor ( ; p < q; p++)\n\t\tif (*p)\n\t\t\tputc(*p, stderr);\n\tfprintf(stderr, \" >>> \");\n\tfor ( ; p < ep; p++)\n\t\tif (*p)\n\t\t\tputc(*p, stderr);\n\tfprintf(stderr, \" <<< \");\n\tif (*ep)\n\t\twhile ((c = input()) != '\\n' && c != '\\0' && c != EOF) {\n\t\t\tputc(c, stderr);\n\t\t\tbclass(c);\n\t\t}\n\tputc('\\n', stderr);\n\tep = ebuf;\n}\n\nvoid bclass(int c)\n{\n\tswitch (c) {\n\tcase '{': bracecnt++; break;\n\tcase '}': bracecnt--; break;\n\tcase '[': brackcnt++; break;\n\tcase ']': brackcnt--; break;\n\tcase '(': parencnt++; break;\n\tcase ')': parencnt--; break;\n\t}\n}\n\ndouble errcheck(double x, const char *s)\n{\n\n\tif (errno == EDOM) {\n\t\terrno = 0;\n\t\tWARNING(\"%s argument out of domain\", s);\n\t\tx = 1;\n\t} else if (errno == ERANGE) {\n\t\terrno = 0;\n\t\tWARNING(\"%s result out of range\", s);\n\t\tx = 1;\n\t}\n\treturn x;\n}\n\nint isclvar(const char *s)\t/* is s of form var=something ? */\n{\n\tconst char *os = s;\n\n\tif (!isalpha((uschar) *s) && *s != '_')\n\t\treturn 0;\n\tfor ( ; *s; s++)\n\t\tif (!(isalnum((uschar) *s) || *s == '_'))\n\t\t\tbreak;\n\treturn *s == '=' && s > os && *(s+1) != '=';\n}\n\n/* strtod is supposed to be a proper test of what's a valid number */\n/* appears to be broken in gcc on linux: thinks 0x123 is a valid FP number */\n/* wrong: violates 4.10.1.4 of ansi C standard */\n\n#include <math.h>\nint is_number(const char *s)\n{\n\tdouble r;\n\tchar *ep;\n\terrno = 0;\n\tr = strtod(s, &ep);\n\tif (ep == s || r == HUGE_VAL || errno == ERANGE)\n\t\treturn 0;\n\twhile (*ep == ' ' || *ep == '\\t' || *ep == '\\n')\n\t\tep++;\n\tif (*ep == '\\0')\n\t\treturn 1;\n\telse\n\t\treturn 0;\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/main.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\nconst char\t*version = \"version 20070501\";\n\n#define DEBUG\n#include <stdio.h>\n#include <ctype.h>\n#include <locale.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\nextern\tchar\t**environ;\nextern\tint\tnfields;\n\nint\tdbg\t= 0;\nchar\t*cmdname;\t/* gets argv[0] for error messages */\nextern\tFILE\t*yyin;\t/* lex input file */\nchar\t*lexprog;\t/* points to program argument if it exists */\nextern\tint errorflag;\t/* non-zero if any syntax errors; set by yyerror */\nint\tcompile_time = 2;\t/* for error printing: */\n\t\t\t\t/* 2 = cmdline, 1 = compile, 0 = running */\n\n#define\tMAX_PFILE\t20\t/* max number of -f's */\n\nchar\t*pfile[MAX_PFILE];\t/* program filenames from -f's */\nint\tnpfile = 0;\t/* number of filenames */\nint\tcurpfile = 0;\t/* current filename */\n\nint\tsafe\t= 0;\t/* 1 => \"safe\" mode */\n\nint main(int argc, char *argv[])\n{\n\tconst char *fs = NULL;\n\n\tsetlocale(LC_CTYPE, \"\");\n\tsetlocale(LC_NUMERIC, \"C\"); /* for parsing cmdline & prog */\n\tcmdname = argv[0];\n\tif (argc == 1) {\n\t\tfprintf(stderr, \n\t\t  \"usage: %s [-F fs] [-v var=value] [-f progfile | 'prog'] [file ...]\\n\", \n\t\t  cmdname);\n\t\texit(1);\n\t}\n\tsignal(SIGFPE, fpecatch);\n\tyyin = NULL;\n\tsymtab = makesymtab(NSYMTAB/NSYMTAB);\n\twhile (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\\0') {\n\t\tif (strcmp(argv[1],\"-version\") == 0 || strcmp(argv[1],\"--version\") == 0) {\n\t\t\tprintf(\"awk %s\\n\", version);\n\t\t\texit(0);\n\t\t\tbreak;\n\t\t}\n\t\tif (strncmp(argv[1], \"--\", 2) == 0) {\t/* explicit end of args */\n\t\t\targc--;\n\t\t\targv++;\n\t\t\tbreak;\n\t\t}\n\t\tswitch (argv[1][1]) {\n\t\tcase 's':\n\t\t\tif (strcmp(argv[1], \"-safe\") == 0)\n\t\t\t\tsafe = 1;\n\t\t\tbreak;\n\t\tcase 'f':\t/* next argument is program filename */\n\t\t\targc--;\n\t\t\targv++;\n\t\t\tif (argc <= 1)\n\t\t\t\tFATAL(\"no program filename\");\n\t\t\tif (npfile >= MAX_PFILE - 1)\n\t\t\t\tFATAL(\"too many -f options\"); \n\t\t\tpfile[npfile++] = argv[1];\n\t\t\tbreak;\n\t\tcase 'F':\t/* set field separator */\n\t\t\tif (argv[1][2] != 0) {\t/* arg is -Fsomething */\n\t\t\t\tif (argv[1][2] == 't' && argv[1][3] == 0)\t/* wart: t=>\\t */\n\t\t\t\t\tfs = \"\\t\";\n\t\t\t\telse if (argv[1][2] != 0)\n\t\t\t\t\tfs = &argv[1][2];\n\t\t\t} else {\t\t/* arg is -F something */\n\t\t\t\targc--; argv++;\n\t\t\t\tif (argc > 1 && argv[1][0] == 't' && argv[1][1] == 0)\t/* wart: t=>\\t */\n\t\t\t\t\tfs = \"\\t\";\n\t\t\t\telse if (argc > 1 && argv[1][0] != 0)\n\t\t\t\t\tfs = &argv[1][0];\n\t\t\t}\n\t\t\tif (fs == NULL || *fs == '\\0')\n\t\t\t\tWARNING(\"field separator FS is empty\");\n\t\t\tbreak;\n\t\tcase 'v':\t/* -v a=1 to be done NOW.  one -v for each */\n\t\t\tif (argv[1][2] == '\\0' && --argc > 1 && isclvar((++argv)[1]))\n\t\t\t\tsetclvar(argv[1]);\n\t\t\tbreak;\n\t\tcase 'd':\n\t\t\tdbg = atoi(&argv[1][2]);\n\t\t\tif (dbg == 0)\n\t\t\t\tdbg = 1;\n\t\t\tprintf(\"awk %s\\n\", version);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tWARNING(\"unknown option %s ignored\", argv[1]);\n\t\t\tbreak;\n\t\t}\n\t\targc--;\n\t\targv++;\n\t}\n\t/* argv[1] is now the first argument */\n\tif (npfile == 0) {\t/* no -f; first argument is program */\n\t\tif (argc <= 1) {\n\t\t\tif (dbg)\n\t\t\t\texit(0);\n\t\t\tFATAL(\"no program given\");\n\t\t}\n\t\t   dprintf( (\"program = |%s|\\n\", argv[1]) );\n\t\tlexprog = argv[1];\n\t\targc--;\n\t\targv++;\n\t}\n\trecinit(recsize);\n\tsyminit();\n\tcompile_time = 1;\n\targv[0] = cmdname;\t/* put prog name at front of arglist */\n\t   dprintf( (\"argc=%d, argv[0]=%s\\n\", argc, argv[0]) );\n\targinit(argc, argv);\n\tif (!safe)\n\t\tenvinit(environ);\n\tyyparse();\n\tsetlocale(LC_NUMERIC, \"\"); /* back to whatever it is locally */\n\tif (fs)\n\t\t*FS = qstring(fs, '\\0');\n\t   dprintf( (\"errorflag=%d\\n\", errorflag) );\n\tif (errorflag == 0) {\n\t\tcompile_time = 0;\n\t\trun(winner);\n\t} else\n\t\tbracecheck();\n\treturn(errorflag);\n}\n\nint pgetc(void)\t\t/* get 1 character from awk program */\n{\n\tint c;\n\n\tfor (;;) {\n\t\tif (yyin == NULL) {\n\t\t\tif (curpfile >= npfile)\n\t\t\t\treturn EOF;\n\t\t\tif (strcmp(pfile[curpfile], \"-\") == 0)\n\t\t\t\tyyin = stdin;\n\t\t\telse if ((yyin = fopen(pfile[curpfile], \"r\")) == NULL)\n\t\t\t\tFATAL(\"can't open file %s\", pfile[curpfile]);\n\t\t\tlineno = 1;\n\t\t}\n\t\tif ((c = getc(yyin)) != EOF)\n\t\t\treturn c;\n\t\tif (yyin != stdin)\n\t\t\tfclose(yyin);\n\t\tyyin = NULL;\n\t\tcurpfile++;\n\t}\n}\n\nchar *cursource(void)\t/* current source file name */\n{\n\tif (npfile > 0)\n\t\treturn pfile[curpfile];\n\telse\n\t\treturn NULL;\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/maketab.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n/*\n * this program makes the table to link function names\n * and type indices that is used by execute() in run.c.\n * it finds the indices in ytab.h, produced by yacc.\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\nstruct xx\n{\tint token;\n\tconst char *name;\n\tconst char *pname;\n} proc[] = {\n\t{ PROGRAM, \"program\", NULL },\n\t{ BOR, \"boolop\", \" || \" },\n\t{ AND, \"boolop\", \" && \" },\n\t{ NOT, \"boolop\", \" !\" },\n\t{ NE, \"relop\", \" != \" },\n\t{ EQ, \"relop\", \" == \" },\n\t{ LE, \"relop\", \" <= \" },\n\t{ LT, \"relop\", \" < \" },\n\t{ GE, \"relop\", \" >= \" },\n\t{ GT, \"relop\", \" > \" },\n\t{ ARRAY, \"array\", NULL },\n\t{ INDIRECT, \"indirect\", \"$(\" },\n\t{ SUBSTR, \"substr\", \"substr\" },\n\t{ SUB, \"sub\", \"sub\" },\n\t{ GSUB, \"gsub\", \"gsub\" },\n\t{ INDEX, \"sindex\", \"sindex\" },\n\t{ SPRINTF, \"awksprintf\", \"sprintf \" },\n\t{ ADD, \"arith\", \" + \" },\n\t{ MINUS, \"arith\", \" - \" },\n\t{ MULT, \"arith\", \" * \" },\n\t{ DIVIDE, \"arith\", \" / \" },\n\t{ MOD, \"arith\", \" % \" },\n\t{ UMINUS, \"arith\", \" -\" },\n\t{ POWER, \"arith\", \" **\" },\n\t{ PREINCR, \"incrdecr\", \"++\" },\n\t{ POSTINCR, \"incrdecr\", \"++\" },\n\t{ PREDECR, \"incrdecr\", \"--\" },\n\t{ POSTDECR, \"incrdecr\", \"--\" },\n\t{ CAT, \"cat\", \" \" },\n\t{ PASTAT, \"pastat\", NULL },\n\t{ PASTAT2, \"dopa2\", NULL },\n\t{ MATCH, \"matchop\", \" ~ \" },\n\t{ NOTMATCH, \"matchop\", \" !~ \" },\n\t{ MATCHFCN, \"matchop\", \"matchop\" },\n\t{ INTEST, \"intest\", \"intest\" },\n\t{ PRINTF, \"awkprintf\", \"printf\" },\n\t{ PRINT, \"printstat\", \"print\" },\n\t{ CLOSE, \"closefile\", \"closefile\" },\n\t{ DELETE, \"awkdelete\", \"awkdelete\" },\n\t{ SPLIT, \"split\", \"split\" },\n\t{ ASSIGN, \"assign\", \" = \" },\n\t{ ADDEQ, \"assign\", \" += \" },\n\t{ SUBEQ, \"assign\", \" -= \" },\n\t{ MULTEQ, \"assign\", \" *= \" },\n\t{ DIVEQ, \"assign\", \" /= \" },\n\t{ MODEQ, \"assign\", \" %= \" },\n\t{ POWEQ, \"assign\", \" ^= \" },\n\t{ CONDEXPR, \"condexpr\", \" ?: \" },\n\t{ IF, \"ifstat\", \"if(\" },\n\t{ WHILE, \"whilestat\", \"while(\" },\n\t{ FOR, \"forstat\", \"for(\" },\n\t{ DO, \"dostat\", \"do\" },\n\t{ IN, \"instat\", \"instat\" },\n\t{ NEXT, \"jump\", \"next\" },\n\t{ NEXTFILE, \"jump\", \"nextfile\" },\n\t{ EXIT, \"jump\", \"exit\" },\n\t{ BREAK, \"jump\", \"break\" },\n\t{ CONTINUE, \"jump\", \"continue\" },\n\t{ RETURN, \"jump\", \"ret\" },\n\t{ BLTIN, \"bltin\", \"bltin\" },\n\t{ CALL, \"call\", \"call\" },\n\t{ ARG, \"arg\", \"arg\" },\n\t{ VARNF, \"getnf\", \"NF\" },\n\t{ GETLINE, \"getline\", \"getline\" },\n\t{ 0, \"\", \"\" },\n};\n\n#define SIZE\t(LASTTOKEN - FIRSTTOKEN + 1)\nconst char *table[SIZE];\nchar *names[SIZE];\n\nint main(int argc, char *argv[])\n{\n\tconst struct xx *p;\n\tint i, n, tok;\n\tchar c;\n\tFILE *fp;\n        const char* input;\n\tchar buf[200], name[200], def[200];\n\n\tprintf(\"#include <stdio.h>\\n\");\n\tprintf(\"#include \\\"awk.h\\\"\\n\");\n\tprintf(\"#include \\\"ytab.h\\\"\\n\\n\");\n\tfor (i = SIZE; --i >= 0; )\n\t\tnames[i] = \"\";\n\n        input = \"ytab.h\";\n        if (argc > 1) {\n            input = argv[1];\n            if (!strcmp(input,\"-\"))\n                input = NULL;\n        }\n        if (input == NULL) {\n            fp = stdin;\n        } else {\n            if ((fp = fopen(input, \"rt\")) == NULL) {\n                    fprintf(stderr, \"maketab can't open %s!\\n\", input);\n                    exit(1);\n            }\n        }\n\tprintf(\"static char *printname[%d] = {\\n\", SIZE);\n\ti = 0;\n\twhile (fgets(buf, sizeof buf, fp) != NULL) {\n\t\tn = sscanf(buf, \"%1c %s %s %d\", &c, def, name, &tok);\n\t\tif (c != '#' || (n != 4 && strcmp(def,\"define\") != 0))\t/* not a valid #define */\n\t\t\tcontinue;\n\t\tif (tok < FIRSTTOKEN || tok > LASTTOKEN) {\n\t\t\t/* fprintf(stderr, \"maketab funny token %d %s ignored\\n\", tok, buf); */\n\t\t\tcontinue;\n\t\t}\n\t\tnames[tok-FIRSTTOKEN] = (char *) malloc(strlen(name)+1);\n\t\tstrcpy(names[tok-FIRSTTOKEN], name);\n\t\tprintf(\"\\t(char *) \\\"%s\\\",\\t/* %d */\\n\", name, tok);\n\t\ti++;\n\t}\n\tprintf(\"};\\n\\n\");\n\n\tfor (p=proc; p->token!=0; p++)\n\t\ttable[p->token-FIRSTTOKEN] = p->name;\n\tprintf(\"\\nCell *(*proctab[%d])(Node **, int) = {\\n\", SIZE);\n\tfor (i=0; i<SIZE; i++)\n\t\tif (table[i]==0)\n\t\t\tprintf(\"\\tnullproc,\\t/* %s */\\n\", names[i]);\n\t\telse\n\t\t\tprintf(\"\\t%s,\\t/* %s */\\n\", table[i], names[i]);\n\tprintf(\"};\\n\\n\");\n\n\tprintf(\"char *tokname(int n)\\n\");\t/* print a tokname() function */\n\tprintf(\"{\\n\");\n\tprintf(\"\tstatic char buf[100];\\n\\n\");\n\tprintf(\"\tif (n < FIRSTTOKEN || n > LASTTOKEN) {\\n\");\n\tprintf(\"\t\tsprintf(buf, \\\"token %%d\\\", n);\\n\");\n\tprintf(\"\t\treturn buf;\\n\");\n\tprintf(\"\t}\\n\");\n\tprintf(\"\treturn printname[n-FIRSTTOKEN];\\n\");\n\tprintf(\"}\\n\");\n\treturn 0;\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/parse.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#define DEBUG\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\nNode *nodealloc(int n)\n{\n\tNode *x;\n\n\tx = (Node *) malloc(sizeof(Node) + (n-1)*sizeof(Node *));\n\tif (x == NULL)\n\t\tFATAL(\"out of space in nodealloc\");\n\tx->nnext = NULL;\n\tx->lineno = lineno;\n\treturn(x);\n}\n\nNode *exptostat(Node *a)\n{\n\ta->ntype = NSTAT;\n\treturn(a);\n}\n\nNode *node1(int a, Node *b)\n{\n\tNode *x;\n\n\tx = nodealloc(1);\n\tx->nobj = a;\n\tx->narg[0]=b;\n\treturn(x);\n}\n\nNode *node2(int a, Node *b, Node *c)\n{\n\tNode *x;\n\n\tx = nodealloc(2);\n\tx->nobj = a;\n\tx->narg[0] = b;\n\tx->narg[1] = c;\n\treturn(x);\n}\n\nNode *node3(int a, Node *b, Node *c, Node *d)\n{\n\tNode *x;\n\n\tx = nodealloc(3);\n\tx->nobj = a;\n\tx->narg[0] = b;\n\tx->narg[1] = c;\n\tx->narg[2] = d;\n\treturn(x);\n}\n\nNode *node4(int a, Node *b, Node *c, Node *d, Node *e)\n{\n\tNode *x;\n\n\tx = nodealloc(4);\n\tx->nobj = a;\n\tx->narg[0] = b;\n\tx->narg[1] = c;\n\tx->narg[2] = d;\n\tx->narg[3] = e;\n\treturn(x);\n}\n\nNode *stat1(int a, Node *b)\n{\n\tNode *x;\n\n\tx = node1(a,b);\n\tx->ntype = NSTAT;\n\treturn(x);\n}\n\nNode *stat2(int a, Node *b, Node *c)\n{\n\tNode *x;\n\n\tx = node2(a,b,c);\n\tx->ntype = NSTAT;\n\treturn(x);\n}\n\nNode *stat3(int a, Node *b, Node *c, Node *d)\n{\n\tNode *x;\n\n\tx = node3(a,b,c,d);\n\tx->ntype = NSTAT;\n\treturn(x);\n}\n\nNode *stat4(int a, Node *b, Node *c, Node *d, Node *e)\n{\n\tNode *x;\n\n\tx = node4(a,b,c,d,e);\n\tx->ntype = NSTAT;\n\treturn(x);\n}\n\nNode *op1(int a, Node *b)\n{\n\tNode *x;\n\n\tx = node1(a,b);\n\tx->ntype = NEXPR;\n\treturn(x);\n}\n\nNode *op2(int a, Node *b, Node *c)\n{\n\tNode *x;\n\n\tx = node2(a,b,c);\n\tx->ntype = NEXPR;\n\treturn(x);\n}\n\nNode *op3(int a, Node *b, Node *c, Node *d)\n{\n\tNode *x;\n\n\tx = node3(a,b,c,d);\n\tx->ntype = NEXPR;\n\treturn(x);\n}\n\nNode *op4(int a, Node *b, Node *c, Node *d, Node *e)\n{\n\tNode *x;\n\n\tx = node4(a,b,c,d,e);\n\tx->ntype = NEXPR;\n\treturn(x);\n}\n\nNode *celltonode(Cell *a, int b)\n{\n\tNode *x;\n\n\ta->ctype = OCELL;\n\ta->csub = b;\n\tx = node1(0, (Node *) a);\n\tx->ntype = NVALUE;\n\treturn(x);\n}\n\nNode *rectonode(void)\t/* make $0 into a Node */\n{\n\textern Cell *literal0;\n\treturn op1(INDIRECT, celltonode(literal0, CUNK));\n}\n\nNode *makearr(Node *p)\n{\n\tCell *cp;\n\n\tif (isvalue(p)) {\n\t\tcp = (Cell *) (p->narg[0]);\n\t\tif (isfcn(cp))\n\t\t\tSYNTAX( \"%s is a function, not an array\", cp->nval );\n\t\telse if (!isarr(cp)) {\n\t\t\txfree(cp->sval);\n\t\t\tcp->sval = (char *) makesymtab(NSYMTAB);\n\t\t\tcp->tval = ARR;\n\t\t}\n\t}\n\treturn p;\n}\n\n#define PA2NUM\t50\t/* max number of pat,pat patterns allowed */\nint\tpaircnt;\t\t/* number of them in use */\nint\tpairstack[PA2NUM];\t/* state of each pat,pat */\n\nNode *pa2stat(Node *a, Node *b, Node *c)\t/* pat, pat {...} */\n{\n\tNode *x;\n\n\tx = node4(PASTAT2, a, b, c, itonp(paircnt));\n\tif (paircnt++ >= PA2NUM)\n\t\tSYNTAX( \"limited to %d pat,pat statements\", PA2NUM );\n\tx->ntype = NSTAT;\n\treturn(x);\n}\n\nNode *linkum(Node *a, Node *b)\n{\n\tNode *c;\n\n\tif (errorflag)\t/* don't link things that are wrong */\n\t\treturn a;\n\tif (a == NULL)\n\t\treturn(b);\n\telse if (b == NULL)\n\t\treturn(a);\n\tfor (c = a; c->nnext != NULL; c = c->nnext)\n\t\t;\n\tc->nnext = b;\n\treturn(a);\n}\n\nvoid defn(Cell *v, Node *vl, Node *st)\t/* turn on FCN bit in definition, */\n{\t\t\t\t\t/*   body of function, arglist */\n\tNode *p;\n\tint n;\n\n\tif (isarr(v)) {\n\t\tSYNTAX( \"`%s' is an array name and a function name\", v->nval );\n\t\treturn;\n\t}\n\tif (isarg(v->nval) != -1) {\n\t\tSYNTAX( \"`%s' is both function name and argument name\", v->nval );\n\t\treturn;\n\t}\n\n\tv->tval = FCN;\n\tv->sval = (char *) st;\n\tn = 0;\t/* count arguments */\n\tfor (p = vl; p; p = p->nnext)\n\t\tn++;\n\tv->fval = n;\n\tdprintf( (\"defining func %s (%d args)\\n\", v->nval, n) );\n}\n\nint isarg(const char *s)\t\t/* is s in argument list for current function? */\n{\t\t\t/* return -1 if not, otherwise arg # */\n\textern Node *arglist;\n\tNode *p = arglist;\n\tint n;\n\n\tfor (n = 0; p != 0; p = p->nnext, n++)\n\t\tif (strcmp(((Cell *)(p->narg[0]))->nval, s) == 0)\n\t\t\treturn n;\n\treturn -1;\n}\n\nintptr_t ptoi(void *p)\t/* convert pointer to integer */\n{\n\treturn (intptr_t) p;\n}\n\nNode *itonp(intptr_t i)\t/* and vice versa */\n{\n\treturn (Node *) i;\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/proto.h",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n/* To avoid conflicts with <stdio.h> getline declaration on Linux */\n#define getline awk_getline\n\n#include <stdint.h>\n\nextern\tint\tyywrap(void);\nextern\tvoid\tsetfname(Cell *);\nextern\tint\tconstnode(Node *);\nextern\tchar\t*strnode(Node *);\nextern\tNode\t*notnull(Node *);\nextern\tint\tyyparse(void);\n\nextern\tint\tyylex(void);\nextern\tvoid\tstartreg(void);\nextern\tint\tinput(void);\nextern\tvoid\tunput(int);\nextern\tvoid\tunputstr(const char *);\nextern\tint\tyylook(void);\nextern\tint\tyyback(int *, int);\nextern\tint\tyyinput(void);\n\nextern\tfa\t*makedfa(const char *, int);\nextern\tfa\t*mkdfa(const char *, int);\nextern\tint\tmakeinit(fa *, int);\nextern\tvoid\tpenter(Node *);\nextern\tvoid\tfreetr(Node *);\nextern\tint\thexstr(char **);\nextern\tint\tquoted(char **);\nextern\tchar\t*cclenter(const char *);\nextern\tvoid\toverflo(const char *);\nextern\tvoid\tcfoll(fa *, Node *);\nextern\tint\tfirst(Node *);\nextern\tvoid\tfollow(Node *);\nextern\tint\tmember(int, const char *);\nextern\tint\tmatch(fa *, const char *);\nextern\tint\tpmatch(fa *, const char *);\nextern\tint\tnematch(fa *, const char *);\nextern\tNode\t*reparse(const char *);\nextern\tNode\t*regexp(void);\nextern\tNode\t*primary(void);\nextern\tNode\t*concat(Node *);\nextern\tNode\t*alt(Node *);\nextern\tNode\t*unary(Node *);\nextern\tint\trelex(void);\nextern\tint\tcgoto(fa *, int, int);\nextern\tvoid\tfreefa(fa *);\n\nextern\tint\tpgetc(void);\nextern\tchar\t*cursource(void);\n\nextern\tNode\t*nodealloc(int);\nextern\tNode\t*exptostat(Node *);\nextern\tNode\t*node1(int, Node *);\nextern\tNode\t*node2(int, Node *, Node *);\nextern\tNode\t*node3(int, Node *, Node *, Node *);\nextern\tNode\t*node4(int, Node *, Node *, Node *, Node *);\nextern\tNode\t*stat3(int, Node *, Node *, Node *);\nextern\tNode\t*op2(int, Node *, Node *);\nextern\tNode\t*op1(int, Node *);\nextern\tNode\t*stat1(int, Node *);\nextern\tNode\t*op3(int, Node *, Node *, Node *);\nextern\tNode\t*op4(int, Node *, Node *, Node *, Node *);\nextern\tNode\t*stat2(int, Node *, Node *);\nextern\tNode\t*stat4(int, Node *, Node *, Node *, Node *);\nextern\tNode\t*celltonode(Cell *, int);\nextern\tNode\t*rectonode(void);\nextern\tNode\t*makearr(Node *);\nextern\tNode\t*pa2stat(Node *, Node *, Node *);\nextern\tNode\t*linkum(Node *, Node *);\nextern\tvoid\tdefn(Cell *, Node *, Node *);\nextern\tint\tisarg(const char *);\nextern\tchar\t*tokname(int);\nextern\tCell\t*(*proctab[])(Node **, int);\nextern\tintptr_t ptoi(void *);\nextern\tNode\t*itonp(intptr_t);\n\nextern\tvoid\tsyminit(void);\nextern\tvoid\targinit(int, char **);\nextern\tvoid\tenvinit(char **);\nextern\tArray\t*makesymtab(int);\nextern\tvoid\tfreesymtab(Cell *);\nextern\tvoid\tfreeelem(Cell *, const char *);\nextern\tCell\t*setsymtab(const char *, const char *, double, unsigned int, Array *);\nextern\tint\thash(const char *, int);\nextern\tvoid\trehash(Array *);\nextern\tCell\t*lookup(const char *, Array *);\nextern\tdouble\tsetfval(Cell *, double);\nextern\tvoid\tfunnyvar(Cell *, const char *);\nextern\tchar\t*setsval(Cell *, const char *);\nextern\tdouble\tgetfval(Cell *);\nextern\tchar\t*getsval(Cell *);\nextern\tchar\t*getpssval(Cell *);     /* for print */\nextern\tchar\t*tostring(const char *);\nextern\tchar\t*qstring(const char *, int);\n\nextern\tvoid\trecinit(unsigned int);\nextern\tvoid\tinitgetrec(void);\nextern\tvoid\tmakefields(int, int);\nextern\tvoid\tgrowfldtab(int n);\nextern\tint\tgetrec(char **, int *, int);\nextern\tvoid\tnextfile(void);\nextern\tint\treadrec(char **buf, int *bufsize, FILE *inf);\nextern\tchar\t*getargv(int);\nextern\tvoid\tsetclvar(char *);\nextern\tvoid\tfldbld(void);\nextern\tvoid\tcleanfld(int, int);\nextern\tvoid\tnewfld(int);\nextern\tint\trefldbld(const char *, const char *);\nextern\tvoid\trecbld(void);\nextern\tCell\t*fieldadr(int);\nextern\tvoid\tyyerror(const char *);\nextern\tvoid\tfpecatch(int);\nextern\tvoid\tbracecheck(void);\nextern\tvoid\tbcheck2(int, int, int);\nextern\tvoid\tSYNTAX(const char *, ...);\nextern\tvoid\tFATAL(const char *, ...);\nextern\tvoid\tWARNING(const char *, ...);\nextern\tvoid\terror(void);\nextern\tvoid\teprint(void);\nextern\tvoid\tbclass(int);\nextern\tdouble\terrcheck(double, const char *);\nextern\tint\tisclvar(const char *);\nextern\tint\tis_number(const char *);\n\nextern\tint\tadjbuf(char **pb, int *sz, int min, int q, char **pbp, const char *what);\nextern\tvoid\trun(Node *);\nextern\tCell\t*execute(Node *);\nextern\tCell\t*program(Node **, int);\nextern\tCell\t*call(Node **, int);\nextern\tCell\t*copycell(Cell *);\nextern\tCell\t*arg(Node **, int);\nextern\tCell\t*jump(Node **, int);\nextern\tCell\t*getline(Node **, int);\nextern\tCell\t*getnf(Node **, int);\nextern\tCell\t*array(Node **, int);\nextern\tCell\t*awkdelete(Node **, int);\nextern\tCell\t*intest(Node **, int);\nextern\tCell\t*matchop(Node **, int);\nextern\tCell\t*boolop(Node **, int);\nextern\tCell\t*relop(Node **, int);\nextern\tvoid\ttfree(Cell *);\nextern\tCell\t*gettemp(void);\nextern\tCell\t*field(Node **, int);\nextern\tCell\t*indirect(Node **, int);\nextern\tCell\t*substr(Node **, int);\nextern\tCell\t*sindex(Node **, int);\nextern\tint\tformat(char **, int *, const char *, Node *);\nextern\tCell\t*awksprintf(Node **, int);\nextern\tCell\t*awkprintf(Node **, int);\nextern\tCell\t*arith(Node **, int);\nextern\tdouble\tipow(double, int);\nextern\tCell\t*incrdecr(Node **, int);\nextern\tCell\t*assign(Node **, int);\nextern\tCell\t*cat(Node **, int);\nextern\tCell\t*pastat(Node **, int);\nextern\tCell\t*dopa2(Node **, int);\nextern\tCell\t*split(Node **, int);\nextern\tCell\t*condexpr(Node **, int);\nextern\tCell\t*ifstat(Node **, int);\nextern\tCell\t*whilestat(Node **, int);\nextern\tCell\t*dostat(Node **, int);\nextern\tCell\t*forstat(Node **, int);\nextern\tCell\t*instat(Node **, int);\nextern\tCell\t*bltin(Node **, int);\nextern\tCell\t*printstat(Node **, int);\nextern\tCell\t*nullproc(Node **, int);\nextern\tFILE\t*redirect(int, Node *);\nextern\tFILE\t*openfile(int, const char *);\nextern\tconst char\t*filename(FILE *);\nextern\tCell\t*closefile(Node **, int);\nextern\tvoid\tcloseall(void);\nextern\tCell\t*sub(Node **, int);\nextern\tCell\t*gsub(Node **, int);\n\n#if !defined(_WIN32)\n/* In mingw, the following are defined with dllimport attributes.\n  Redefining here will only get warning reads:\n\n  ... redeclared without dllimport attribute: previous dllimport ignored\n */\nextern\tFILE\t*popen(const char *, const char *);\nextern\tint\tpclose(FILE *);\n#endif"
  },
  {
    "path": "sources/host-tools/nawk-20071023/run.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#define DEBUG\n#include <stdio.h>\n#include <ctype.h>\n#include <setjmp.h>\n#include <limits.h>\n#include <math.h>\n#include <string.h>\n#include <stdlib.h>\n#include <time.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\n#define tempfree(x)\tif (istemp(x)) tfree(x); else\n\n/*\n#undef tempfree\n\nvoid tempfree(Cell *p) {\n\tif (p->ctype == OCELL && (p->csub < CUNK || p->csub > CFREE)) {\n\t\tWARNING(\"bad csub %d in Cell %d %s\",\n\t\t\tp->csub, p->ctype, p->sval);\n\t}\n\tif (istemp(p))\n\t\ttfree(p);\n}\n*/\n\n/* do we really need these? */\n/* #ifdef _NFILE */\n/* #ifndef FOPEN_MAX */\n/* #define FOPEN_MAX _NFILE */\n/* #endif */\n/* #endif */\n/*  */\n/* #ifndef\tFOPEN_MAX */\n/* #define\tFOPEN_MAX\t40 */\t/* max number of open files */\n/* #endif */\n/*  */\n/* #ifndef RAND_MAX */\n/* #define RAND_MAX\t32767 */\t/* all that ansi guarantees */\n/* #endif */\n\njmp_buf env;\nextern\tint\tpairstack[];\n\nNode\t*winner = NULL;\t/* root of parse tree */\nCell\t*tmps;\t\t/* free temporary cells for execution */\n\nstatic Cell\ttruecell\t={ OBOOL, BTRUE, 0, 0, 1.0, NUM };\nCell\t*True\t= &truecell;\nstatic Cell\tfalsecell\t={ OBOOL, BFALSE, 0, 0, 0.0, NUM };\nCell\t*False\t= &falsecell;\nstatic Cell\tbreakcell\t={ OJUMP, JBREAK, 0, 0, 0.0, NUM };\nCell\t*jbreak\t= &breakcell;\nstatic Cell\tcontcell\t={ OJUMP, JCONT, 0, 0, 0.0, NUM };\nCell\t*jcont\t= &contcell;\nstatic Cell\tnextcell\t={ OJUMP, JNEXT, 0, 0, 0.0, NUM };\nCell\t*jnext\t= &nextcell;\nstatic Cell\tnextfilecell\t={ OJUMP, JNEXTFILE, 0, 0, 0.0, NUM };\nCell\t*jnextfile\t= &nextfilecell;\nstatic Cell\texitcell\t={ OJUMP, JEXIT, 0, 0, 0.0, NUM };\nCell\t*jexit\t= &exitcell;\nstatic Cell\tretcell\t\t={ OJUMP, JRET, 0, 0, 0.0, NUM };\nCell\t*jret\t= &retcell;\nstatic Cell\ttempcell\t={ OCELL, CTEMP, 0, \"\", 0.0, NUM|STR|DONTFREE };\n\nNode\t*curnode = NULL;\t/* the node being executed, for debugging */\n\n/* buffer memory management */\nint adjbuf(char **pbuf, int *psiz, int minlen, int quantum, char **pbptr,\n\tconst char *whatrtn)\n/* pbuf:    address of pointer to buffer being managed\n * psiz:    address of buffer size variable\n * minlen:  minimum length of buffer needed\n * quantum: buffer size quantum\n * pbptr:   address of movable pointer into buffer, or 0 if none\n * whatrtn: name of the calling routine if failure should cause fatal error\n *\n * return   0 for realloc failure, !=0 for success\n */\n{\n\tif (minlen > *psiz) {\n\t\tchar *tbuf;\n\t\tint rminlen = quantum ? minlen % quantum : 0;\n\t\tint boff = pbptr ? *pbptr - *pbuf : 0;\n\t\t/* round up to next multiple of quantum */\n\t\tif (rminlen)\n\t\t\tminlen += quantum - rminlen;\n\t\ttbuf = (char *) realloc(*pbuf, minlen);\n\t\tdprintf( (\"adjbuf %s: %d %d (pbuf=%p, tbuf=%p)\\n\", whatrtn, *psiz, minlen, *pbuf, tbuf) );\n\t\tif (tbuf == NULL) {\n\t\t\tif (whatrtn)\n\t\t\t\tFATAL(\"out of memory in %s\", whatrtn);\n\t\t\treturn 0;\n\t\t}\n\t\t*pbuf = tbuf;\n\t\t*psiz = minlen;\n\t\tif (pbptr)\n\t\t\t*pbptr = tbuf + boff;\n\t}\n\treturn 1;\n}\n\nvoid run(Node *a)\t/* execution of parse tree starts here */\n{\n\textern void stdinit(void);\n\n\tstdinit();\n\texecute(a);\n\tcloseall();\n}\n\nCell *execute(Node *u)\t/* execute a node of the parse tree */\n{\n\tCell *(*proc)(Node **, int);\n\tCell *x;\n\tNode *a;\n\n\tif (u == NULL)\n\t\treturn(True);\n\tfor (a = u; ; a = a->nnext) {\n\t\tcurnode = a;\n\t\tif (isvalue(a)) {\n\t\t\tx = (Cell *) (a->narg[0]);\n\t\t\tif (isfld(x) && !donefld)\n\t\t\t\tfldbld();\n\t\t\telse if (isrec(x) && !donerec)\n\t\t\t\trecbld();\n\t\t\treturn(x);\n\t\t}\n\t\tif (notlegal(a->nobj))\t/* probably a Cell* but too risky to print */\n\t\t\tFATAL(\"illegal statement\");\n\t\tproc = proctab[a->nobj-FIRSTTOKEN];\n\t\tx = (*proc)(a->narg, a->nobj);\n\t\tif (isfld(x) && !donefld)\n\t\t\tfldbld();\n\t\telse if (isrec(x) && !donerec)\n\t\t\trecbld();\n\t\tif (isexpr(a))\n\t\t\treturn(x);\n\t\tif (isjump(x))\n\t\t\treturn(x);\n\t\tif (a->nnext == NULL)\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t}\n}\n\n\nCell *program(Node **a, int n)\t/* execute an awk program */\n{\t\t\t\t/* a[0] = BEGIN, a[1] = body, a[2] = END */\n\tCell *x;\n\n\tif (setjmp(env) != 0)\n\t\tgoto ex;\n\tif (a[0]) {\t\t/* BEGIN */\n\t\tx = execute(a[0]);\n\t\tif (isexit(x))\n\t\t\treturn(True);\n\t\tif (isjump(x))\n\t\t\tFATAL(\"illegal break, continue, next or nextfile from BEGIN\");\n\t\ttempfree(x);\n\t}\n\tif (a[1] || a[2])\n\t\twhile (getrec(&record, &recsize, 1) > 0) {\n\t\t\tx = execute(a[1]);\n\t\t\tif (isexit(x))\n\t\t\t\tbreak;\n\t\t\ttempfree(x);\n\t\t}\n  ex:\n\tif (setjmp(env) != 0)\t/* handles exit within END */\n\t\tgoto ex1;\n\tif (a[2]) {\t\t/* END */\n\t\tx = execute(a[2]);\n\t\tif (isbreak(x) || isnext(x) || iscont(x))\n\t\t\tFATAL(\"illegal break, continue, next or nextfile from END\");\n\t\ttempfree(x);\n\t}\n  ex1:\n\treturn(True);\n}\n\nstruct Frame {\t/* stack frame for awk function calls */\n\tint nargs;\t/* number of arguments in this call */\n\tCell *fcncell;\t/* pointer to Cell for function */\n\tCell **args;\t/* pointer to array of arguments after execute */\n\tCell *retval;\t/* return value */\n};\n\n#define\tNARGS\t50\t/* max args in a call */\n\nstruct Frame *frame = NULL;\t/* base of stack frames; dynamically allocated */\nint\tnframe = 0;\t\t/* number of frames allocated */\nstruct Frame *fp = NULL;\t/* frame pointer. bottom level unused */\n\nCell *call(Node **a, int n)\t/* function call.  very kludgy and fragile */\n{\n\tstatic Cell newcopycell = { OCELL, CCOPY, 0, \"\", 0.0, NUM|STR|DONTFREE };\n\tint i, ncall, ndef;\n\tint freed = 0; /* handles potential double freeing when fcn & param share a tempcell */\n\tNode *x;\n\tCell *args[NARGS], *oargs[NARGS];\t/* BUG: fixed size arrays */\n\tCell *y, *z, *fcn;\n\tchar *s;\n\n\tfcn = execute(a[0]);\t/* the function itself */\n\ts = fcn->nval;\n\tif (!isfcn(fcn))\n\t\tFATAL(\"calling undefined function %s\", s);\n\tif (frame == NULL) {\n\t\tfp = frame = (struct Frame *) calloc(nframe += 100, sizeof(struct Frame));\n\t\tif (frame == NULL)\n\t\t\tFATAL(\"out of space for stack frames calling %s\", s);\n\t}\n\tfor (ncall = 0, x = a[1]; x != NULL; x = x->nnext)\t/* args in call */\n\t\tncall++;\n\tndef = (int) fcn->fval;\t\t\t/* args in defn */\n\t   dprintf( (\"calling %s, %d args (%d in defn), fp=%d\\n\", s, ncall, ndef, (int) (fp-frame)) );\n\tif (ncall > ndef)\n\t\tWARNING(\"function %s called with %d args, uses only %d\",\n\t\t\ts, ncall, ndef);\n\tif (ncall + ndef > NARGS)\n\t\tFATAL(\"function %s has %d arguments, limit %d\", s, ncall+ndef, NARGS);\n\tfor (i = 0, x = a[1]; x != NULL; i++, x = x->nnext) {\t/* get call args */\n\t\t   dprintf( (\"evaluate args[%d], fp=%d:\\n\", i, (int) (fp-frame)) );\n\t\ty = execute(x);\n\t\toargs[i] = y;\n\t\t   dprintf( (\"args[%d]: %s %f <%s>, t=%o\\n\",\n\t\t\t   i, NN(y->nval), y->fval, isarr(y) ? \"(array)\" : NN(y->sval), y->tval) );\n\t\tif (isfcn(y))\n\t\t\tFATAL(\"can't use function %s as argument in %s\", y->nval, s);\n\t\tif (isarr(y))\n\t\t\targs[i] = y;\t/* arrays by ref */\n\t\telse\n\t\t\targs[i] = copycell(y);\n\t\ttempfree(y);\n\t}\n\tfor ( ; i < ndef; i++) {\t/* add null args for ones not provided */\n\t\targs[i] = gettemp();\n\t\t*args[i] = newcopycell;\n\t}\n\tfp++;\t/* now ok to up frame */\n\tif (fp >= frame + nframe) {\n\t\tint dfp = fp - frame;\t/* old index */\n\t\tframe = (struct Frame *)\n\t\t\trealloc((char *) frame, (nframe += 100) * sizeof(struct Frame));\n\t\tif (frame == NULL)\n\t\t\tFATAL(\"out of space for stack frames in %s\", s);\n\t\tfp = frame + dfp;\n\t}\n\tfp->fcncell = fcn;\n\tfp->args = args;\n\tfp->nargs = ndef;\t/* number defined with (excess are locals) */\n\tfp->retval = gettemp();\n\n\t   dprintf( (\"start exec of %s, fp=%d\\n\", s, (int) (fp-frame)) );\n\ty = execute((Node *)(fcn->sval));\t/* execute body */\n\t   dprintf( (\"finished exec of %s, fp=%d\\n\", s, (int) (fp-frame)) );\n\n\tfor (i = 0; i < ndef; i++) {\n\t\tCell *t = fp->args[i];\n\t\tif (isarr(t)) {\n\t\t\tif (t->csub == CCOPY) {\n\t\t\t\tif (i >= ncall) {\n\t\t\t\t\tfreesymtab(t);\n\t\t\t\t\tt->csub = CTEMP;\n\t\t\t\t\ttempfree(t);\n\t\t\t\t} else {\n\t\t\t\t\toargs[i]->tval = t->tval;\n\t\t\t\t\toargs[i]->tval &= ~(STR|NUM|DONTFREE);\n\t\t\t\t\toargs[i]->sval = t->sval;\n\t\t\t\t\ttempfree(t);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (t != y) {\t/* kludge to prevent freeing twice */\n\t\t\tt->csub = CTEMP;\n\t\t\ttempfree(t);\n\t\t} else if (t == y && t->csub == CCOPY) {\n\t\t\tt->csub = CTEMP;\n\t\t\ttempfree(t);\n\t\t\tfreed = 1;\n\t\t}\n\t}\n\ttempfree(fcn);\n\tif (isexit(y) || isnext(y))\n\t\treturn y;\n\tif (freed == 0) {\n\t\ttempfree(y);\t/* don't free twice! */\n\t}\n\tz = fp->retval;\t\t\t/* return value */\n\t   dprintf( (\"%s returns %g |%s| %o\\n\", s, getfval(z), getsval(z), z->tval) );\n\tfp--;\n\treturn(z);\n}\n\nCell *copycell(Cell *x)\t/* make a copy of a cell in a temp */\n{\n\tCell *y;\n\n\ty = gettemp();\n\ty->csub = CCOPY;\t/* prevents freeing until call is over */\n\ty->nval = x->nval;\t/* BUG? */\n\tif (isstr(x))\n\t\ty->sval = tostring(x->sval);\n\ty->fval = x->fval;\n\ty->tval = x->tval & ~(CON|FLD|REC|DONTFREE);\t/* copy is not constant or field */\n\t\t\t\t\t\t\t/* is DONTFREE right? */\n\treturn y;\n}\n\nCell *arg(Node **a, int n)\t/* nth argument of a function */\n{\n\n\tn = ptoi(a[0]);\t/* argument number, counting from 0 */\n\t   dprintf( (\"arg(%d), fp->nargs=%d\\n\", n, fp->nargs) );\n\tif (n+1 > fp->nargs)\n\t\tFATAL(\"argument #%d of function %s was not supplied\",\n\t\t\tn+1, fp->fcncell->nval);\n\treturn fp->args[n];\n}\n\nCell *jump(Node **a, int n)\t/* break, continue, next, nextfile, return */\n{\n\tCell *y;\n\n\tswitch (n) {\n\tcase EXIT:\n\t\tif (a[0] != NULL) {\n\t\t\ty = execute(a[0]);\n\t\t\terrorflag = (int) getfval(y);\n\t\t\ttempfree(y);\n\t\t}\n\t\tlongjmp(env, 1);\n\tcase RETURN:\n\t\tif (a[0] != NULL) {\n\t\t\ty = execute(a[0]);\n\t\t\tif ((y->tval & (STR|NUM)) == (STR|NUM)) {\n\t\t\t\tsetsval(fp->retval, getsval(y));\n\t\t\t\tfp->retval->fval = getfval(y);\n\t\t\t\tfp->retval->tval |= NUM;\n\t\t\t}\n\t\t\telse if (y->tval & STR)\n\t\t\t\tsetsval(fp->retval, getsval(y));\n\t\t\telse if (y->tval & NUM)\n\t\t\t\tsetfval(fp->retval, getfval(y));\n\t\t\telse\t\t/* can't happen */\n\t\t\t\tFATAL(\"bad type variable %d\", y->tval);\n\t\t\ttempfree(y);\n\t\t}\n\t\treturn(jret);\n\tcase NEXT:\n\t\treturn(jnext);\n\tcase NEXTFILE:\n\t\tnextfile();\n\t\treturn(jnextfile);\n\tcase BREAK:\n\t\treturn(jbreak);\n\tcase CONTINUE:\n\t\treturn(jcont);\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"illegal jump type %d\", n);\n\t}\n\treturn 0;\t/* not reached */\n}\n\nCell *getline(Node **a, int n)\t/* get next line from specific input */\n{\t\t/* a[0] is variable, a[1] is operator, a[2] is filename */\n\tCell *r, *x;\n\textern Cell **fldtab;\n\tFILE *fp;\n\tchar *buf;\n\tint bufsize = recsize;\n\tint mode;\n\n\tif ((buf = (char *) malloc(bufsize)) == NULL)\n\t\tFATAL(\"out of memory in getline\");\n\n\tfflush(stdout);\t/* in case someone is waiting for a prompt */\n\tr = gettemp();\n\tif (a[1] != NULL) {\t\t/* getline < file */\n\t\tx = execute(a[2]);\t\t/* filename */\n\t\tmode = ptoi(a[1]);\n\t\tif (mode == '|')\t\t/* input pipe */\n\t\t\tmode = LE;\t/* arbitrary flag */\n\t\tfp = openfile(mode, getsval(x));\n\t\ttempfree(x);\n\t\tif (fp == NULL)\n\t\t\tn = -1;\n\t\telse\n\t\t\tn = readrec(&buf, &bufsize, fp);\n\t\tif (n <= 0) {\n\t\t\t;\n\t\t} else if (a[0] != NULL) {\t/* getline var <file */\n\t\t\tx = execute(a[0]);\n\t\t\tsetsval(x, buf);\n\t\t\ttempfree(x);\n\t\t} else {\t\t\t/* getline <file */\n\t\t\tsetsval(fldtab[0], buf);\n\t\t\tif (is_number(fldtab[0]->sval)) {\n\t\t\t\tfldtab[0]->fval = atof(fldtab[0]->sval);\n\t\t\t\tfldtab[0]->tval |= NUM;\n\t\t\t}\n\t\t}\n\t} else {\t\t\t/* bare getline; use current input */\n\t\tif (a[0] == NULL)\t/* getline */\n\t\t\tn = getrec(&record, &recsize, 1);\n\t\telse {\t\t\t/* getline var */\n\t\t\tn = getrec(&buf, &bufsize, 0);\n\t\t\tx = execute(a[0]);\n\t\t\tsetsval(x, buf);\n\t\t\ttempfree(x);\n\t\t}\n\t}\n\tsetfval(r, (Awkfloat) n);\n\tfree(buf);\n\treturn r;\n}\n\nCell *getnf(Node **a, int n)\t/* get NF */\n{\n\tif (donefld == 0)\n\t\tfldbld();\n\treturn (Cell *) a[0];\n}\n\nCell *array(Node **a, int n)\t/* a[0] is symtab, a[1] is list of subscripts */\n{\n\tCell *x, *y, *z;\n\tchar *s;\n\tNode *np;\n\tchar *buf;\n\tint bufsz = recsize;\n\tint nsub = strlen(*SUBSEP);\n\n\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of memory in array\");\n\n\tx = execute(a[0]);\t/* Cell* for symbol table */\n\tbuf[0] = 0;\n\tfor (np = a[1]; np; np = np->nnext) {\n\t\ty = execute(np);\t/* subscript */\n\t\ts = getsval(y);\n\t\tif (!adjbuf(&buf, &bufsz, strlen(buf)+strlen(s)+nsub+1, recsize, 0, \"array\"))\n\t\t\tFATAL(\"out of memory for %s[%s...]\", x->nval, buf);\n\t\tstrcat(buf, s);\n\t\tif (np->nnext)\n\t\t\tstrcat(buf, *SUBSEP);\n\t\ttempfree(y);\n\t}\n\tif (!isarr(x)) {\n\t\t   dprintf( (\"making %s into an array\\n\", NN(x->nval)) );\n\t\tif (freeable(x))\n\t\t\txfree(x->sval);\n\t\tx->tval &= ~(STR|NUM|DONTFREE);\n\t\tx->tval |= ARR;\n\t\tx->sval = (char *) makesymtab(NSYMTAB);\n\t}\n\tz = setsymtab(buf, \"\", 0.0, STR|NUM, (Array *) x->sval);\n\tz->ctype = OCELL;\n\tz->csub = CVAR;\n\ttempfree(x);\n\tfree(buf);\n\treturn(z);\n}\n\nCell *awkdelete(Node **a, int n)\t/* a[0] is symtab, a[1] is list of subscripts */\n{\n\tCell *x, *y;\n\tNode *np;\n\tchar *s;\n\tint nsub = strlen(*SUBSEP);\n\n\tx = execute(a[0]);\t/* Cell* for symbol table */\n\tif (!isarr(x))\n\t\treturn True;\n\tif (a[1] == 0) {\t/* delete the elements, not the table */\n\t\tfreesymtab(x);\n\t\tx->tval &= ~STR;\n\t\tx->tval |= ARR;\n\t\tx->sval = (char *) makesymtab(NSYMTAB);\n\t} else {\n\t\tint bufsz = recsize;\n\t\tchar *buf;\n\t\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\t\tFATAL(\"out of memory in adelete\");\n\t\tbuf[0] = 0;\n\t\tfor (np = a[1]; np; np = np->nnext) {\n\t\t\ty = execute(np);\t/* subscript */\n\t\t\ts = getsval(y);\n\t\t\tif (!adjbuf(&buf, &bufsz, strlen(buf)+strlen(s)+nsub+1, recsize, 0, \"awkdelete\"))\n\t\t\t\tFATAL(\"out of memory deleting %s[%s...]\", x->nval, buf);\n\t\t\tstrcat(buf, s);\t\n\t\t\tif (np->nnext)\n\t\t\t\tstrcat(buf, *SUBSEP);\n\t\t\ttempfree(y);\n\t\t}\n\t\tfreeelem(x, buf);\n\t\tfree(buf);\n\t}\n\ttempfree(x);\n\treturn True;\n}\n\nCell *intest(Node **a, int n)\t/* a[0] is index (list), a[1] is symtab */\n{\n\tCell *x, *ap, *k;\n\tNode *p;\n\tchar *buf;\n\tchar *s;\n\tint bufsz = recsize;\n\tint nsub = strlen(*SUBSEP);\n\n\tap = execute(a[1]);\t/* array name */\n\tif (!isarr(ap)) {\n\t\t   dprintf( (\"making %s into an array\\n\", ap->nval) );\n\t\tif (freeable(ap))\n\t\t\txfree(ap->sval);\n\t\tap->tval &= ~(STR|NUM|DONTFREE);\n\t\tap->tval |= ARR;\n\t\tap->sval = (char *) makesymtab(NSYMTAB);\n\t}\n\tif ((buf = (char *) malloc(bufsz)) == NULL) {\n\t\tFATAL(\"out of memory in intest\");\n\t}\n\tbuf[0] = 0;\n\tfor (p = a[0]; p; p = p->nnext) {\n\t\tx = execute(p);\t/* expr */\n\t\ts = getsval(x);\n\t\tif (!adjbuf(&buf, &bufsz, strlen(buf)+strlen(s)+nsub+1, recsize, 0, \"intest\"))\n\t\t\tFATAL(\"out of memory deleting %s[%s...]\", x->nval, buf);\n\t\tstrcat(buf, s);\n\t\ttempfree(x);\n\t\tif (p->nnext)\n\t\t\tstrcat(buf, *SUBSEP);\n\t}\n\tk = lookup(buf, (Array *) ap->sval);\n\ttempfree(ap);\n\tfree(buf);\n\tif (k == NULL)\n\t\treturn(False);\n\telse\n\t\treturn(True);\n}\n\n\nCell *matchop(Node **a, int n)\t/* ~ and match() */\n{\n\tCell *x, *y;\n\tchar *s, *t;\n\tint i;\n\tfa *pfa;\n\tint (*mf)(fa *, const char *) = match, mode = 0;\n\n\tif (n == MATCHFCN) {\n\t\tmf = pmatch;\n\t\tmode = 1;\n\t}\n\tx = execute(a[1]);\t/* a[1] = target text */\n\ts = getsval(x);\n\tif (a[0] == 0)\t\t/* a[1] == 0: already-compiled reg expr */\n\t\ti = (*mf)((fa *) a[2], s);\n\telse {\n\t\ty = execute(a[2]);\t/* a[2] = regular expr */\n\t\tt = getsval(y);\n\t\tpfa = makedfa(t, mode);\n\t\ti = (*mf)(pfa, s);\n\t\ttempfree(y);\n\t}\n\ttempfree(x);\n\tif (n == MATCHFCN) {\n\t\tint start = patbeg - s + 1;\n\t\tif (patlen < 0)\n\t\t\tstart = 0;\n\t\tsetfval(rstartloc, (Awkfloat) start);\n\t\tsetfval(rlengthloc, (Awkfloat) patlen);\n\t\tx = gettemp();\n\t\tx->tval = NUM;\n\t\tx->fval = start;\n\t\treturn x;\n\t} else if ((n == MATCH && i == 1) || (n == NOTMATCH && i == 0))\n\t\treturn(True);\n\telse\n\t\treturn(False);\n}\n\n\nCell *boolop(Node **a, int n)\t/* a[0] || a[1], a[0] && a[1], !a[0] */\n{\n\tCell *x, *y;\n\tint i;\n\n\tx = execute(a[0]);\n\ti = istrue(x);\n\ttempfree(x);\n\tswitch (n) {\n\tcase BOR:\n\t\tif (i) return(True);\n\t\ty = execute(a[1]);\n\t\ti = istrue(y);\n\t\ttempfree(y);\n\t\tif (i) return(True);\n\t\telse return(False);\n\tcase AND:\n\t\tif ( !i ) return(False);\n\t\ty = execute(a[1]);\n\t\ti = istrue(y);\n\t\ttempfree(y);\n\t\tif (i) return(True);\n\t\telse return(False);\n\tcase NOT:\n\t\tif (i) return(False);\n\t\telse return(True);\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"unknown boolean operator %d\", n);\n\t}\n\treturn 0;\t/*NOTREACHED*/\n}\n\nCell *relop(Node **a, int n)\t/* a[0 < a[1], etc. */\n{\n\tint i;\n\tCell *x, *y;\n\tAwkfloat j;\n\n\tx = execute(a[0]);\n\ty = execute(a[1]);\n\tif (x->tval&NUM && y->tval&NUM) {\n\t\tj = x->fval - y->fval;\n\t\ti = j<0? -1: (j>0? 1: 0);\n\t} else {\n\t\ti = strcmp(getsval(x), getsval(y));\n\t}\n\ttempfree(x);\n\ttempfree(y);\n\tswitch (n) {\n\tcase LT:\tif (i<0) return(True);\n\t\t\telse return(False);\n\tcase LE:\tif (i<=0) return(True);\n\t\t\telse return(False);\n\tcase NE:\tif (i!=0) return(True);\n\t\t\telse return(False);\n\tcase EQ:\tif (i == 0) return(True);\n\t\t\telse return(False);\n\tcase GE:\tif (i>=0) return(True);\n\t\t\telse return(False);\n\tcase GT:\tif (i>0) return(True);\n\t\t\telse return(False);\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"unknown relational operator %d\", n);\n\t}\n\treturn 0;\t/*NOTREACHED*/\n}\n\nvoid tfree(Cell *a)\t/* free a tempcell */\n{\n\tif (freeable(a)) {\n\t\t   dprintf( (\"freeing %s %s %o\\n\", NN(a->nval), NN(a->sval), a->tval) );\n\t\txfree(a->sval);\n\t}\n\tif (a == tmps)\n\t\tFATAL(\"tempcell list is curdled\");\n\ta->cnext = tmps;\n\ttmps = a;\n}\n\nCell *gettemp(void)\t/* get a tempcell */\n{\tint i;\n\tCell *x;\n\n\tif (!tmps) {\n\t\ttmps = (Cell *) calloc(100, sizeof(Cell));\n\t\tif (!tmps)\n\t\t\tFATAL(\"out of space for temporaries\");\n\t\tfor(i = 1; i < 100; i++)\n\t\t\ttmps[i-1].cnext = &tmps[i];\n\t\ttmps[i-1].cnext = 0;\n\t}\n\tx = tmps;\n\ttmps = x->cnext;\n\t*x = tempcell;\n\treturn(x);\n}\n\nCell *indirect(Node **a, int n)\t/* $( a[0] ) */\n{\n\tAwkfloat val;\n\tCell *x;\n\tint m;\n\tchar *s;\n\n\tx = execute(a[0]);\n\tval = getfval(x);\t/* freebsd: defend against super large field numbers */\n\tif ((Awkfloat)INT_MAX < val)\n\t\tFATAL(\"trying to access out of range field %s\", x->nval);\n\tm = (int) val;\n\tif (m == 0 && !is_number(s = getsval(x)))\t/* suspicion! */\n\t\tFATAL(\"illegal field $(%s), name \\\"%s\\\"\", s, x->nval);\n\t\t/* BUG: can x->nval ever be null??? */\n\ttempfree(x);\n\tx = fieldadr(m);\n\tx->ctype = OCELL;\t/* BUG?  why are these needed? */\n\tx->csub = CFLD;\n\treturn(x);\n}\n\nCell *substr(Node **a, int nnn)\t\t/* substr(a[0], a[1], a[2]) */\n{\n\tint k, m, n;\n\tchar *s;\n\tint temp;\n\tCell *x, *y, *z = 0;\n\n\tx = execute(a[0]);\n\ty = execute(a[1]);\n\tif (a[2] != 0)\n\t\tz = execute(a[2]);\n\ts = getsval(x);\n\tk = strlen(s) + 1;\n\tif (k <= 1) {\n\t\ttempfree(x);\n\t\ttempfree(y);\n\t\tif (a[2] != 0) {\n\t\t\ttempfree(z);\n\t\t}\n\t\tx = gettemp();\n\t\tsetsval(x, \"\");\n\t\treturn(x);\n\t}\n\tm = (int) getfval(y);\n\tif (m <= 0)\n\t\tm = 1;\n\telse if (m > k)\n\t\tm = k;\n\ttempfree(y);\n\tif (a[2] != 0) {\n\t\tn = (int) getfval(z);\n\t\ttempfree(z);\n\t} else\n\t\tn = k - 1;\n\tif (n < 0)\n\t\tn = 0;\n\telse if (n > k - m)\n\t\tn = k - m;\n\t   dprintf( (\"substr: m=%d, n=%d, s=%s\\n\", m, n, s) );\n\ty = gettemp();\n\ttemp = s[n+m-1];\t/* with thanks to John Linderman */\n\ts[n+m-1] = '\\0';\n\tsetsval(y, s + m - 1);\n\ts[n+m-1] = temp;\n\ttempfree(x);\n\treturn(y);\n}\n\nCell *sindex(Node **a, int nnn)\t\t/* index(a[0], a[1]) */\n{\n\tCell *x, *y, *z;\n\tchar *s1, *s2, *p1, *p2, *q;\n\tAwkfloat v = 0.0;\n\n\tx = execute(a[0]);\n\ts1 = getsval(x);\n\ty = execute(a[1]);\n\ts2 = getsval(y);\n\n\tz = gettemp();\n\tfor (p1 = s1; *p1 != '\\0'; p1++) {\n\t\tfor (q=p1, p2=s2; *p2 != '\\0' && *q == *p2; q++, p2++)\n\t\t\t;\n\t\tif (*p2 == '\\0') {\n\t\t\tv = (Awkfloat) (p1 - s1 + 1);\t/* origin 1 */\n\t\t\tbreak;\n\t\t}\n\t}\n\ttempfree(x);\n\ttempfree(y);\n\tsetfval(z, v);\n\treturn(z);\n}\n\n#define\tMAXNUMSIZE\t50\n\nint format(char **pbuf, int *pbufsize, const char *s, Node *a)\t/* printf-like conversions */\n{\n\tchar *fmt;\n\tchar *p, *t;\n\tconst char *os;\n\tCell *x;\n\tint flag = 0, n;\n\tint fmtwd; /* format width */\n\tint fmtsz = recsize;\n\tchar *buf = *pbuf;\n\tint bufsize = *pbufsize;\n\n\tos = s;\n\tp = buf;\n\tif ((fmt = (char *) malloc(fmtsz)) == NULL)\n\t\tFATAL(\"out of memory in format()\");\n\twhile (*s) {\n\t\tadjbuf(&buf, &bufsize, MAXNUMSIZE+1+p-buf, recsize, &p, \"format1\");\n\t\tif (*s != '%') {\n\t\t\t*p++ = *s++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (*(s+1) == '%') {\n\t\t\t*p++ = '%';\n\t\t\ts += 2;\n\t\t\tcontinue;\n\t\t}\n\t\t/* have to be real careful in case this is a huge number, eg, %100000d */\n\t\tfmtwd = atoi(s+1);\n\t\tif (fmtwd < 0)\n\t\t\tfmtwd = -fmtwd;\n\t\tadjbuf(&buf, &bufsize, fmtwd+1+p-buf, recsize, &p, \"format2\");\n\t\tfor (t = fmt; (*t++ = *s) != '\\0'; s++) {\n\t\t\tif (!adjbuf(&fmt, &fmtsz, MAXNUMSIZE+1+t-fmt, recsize, &t, \"format3\"))\n\t\t\t\tFATAL(\"format item %.30s... ran format() out of memory\", os);\n\t\t\tif (isalpha((uschar)*s) && *s != 'l' && *s != 'h' && *s != 'L')\n\t\t\t\tbreak;\t/* the ansi panoply */\n\t\t\tif (*s == '*') {\n\t\t\t\tx = execute(a);\n\t\t\t\ta = a->nnext;\n\t\t\t\tsprintf(t-1, \"%d\", fmtwd=(int) getfval(x));\n\t\t\t\tif (fmtwd < 0)\n\t\t\t\t\tfmtwd = -fmtwd;\n\t\t\t\tadjbuf(&buf, &bufsize, fmtwd+1+p-buf, recsize, &p, \"format\");\n\t\t\t\tt = fmt + strlen(fmt);\n\t\t\t\ttempfree(x);\n\t\t\t}\n\t\t}\n\t\t*t = '\\0';\n\t\tif (fmtwd < 0)\n\t\t\tfmtwd = -fmtwd;\n\t\tadjbuf(&buf, &bufsize, fmtwd+1+p-buf, recsize, &p, \"format4\");\n\n\t\tswitch (*s) {\n\t\tcase 'f': case 'e': case 'g': case 'E': case 'G':\n\t\t\tflag = 'f';\n\t\t\tbreak;\n\t\tcase 'd': case 'i':\n\t\t\tflag = 'd';\n\t\t\tif(*(s-1) == 'l') break;\n\t\t\t*(t-1) = 'l';\n\t\t\t*t = 'd';\n\t\t\t*++t = '\\0';\n\t\t\tbreak;\n\t\tcase 'o': case 'x': case 'X': case 'u':\n\t\t\tflag = *(s-1) == 'l' ? 'd' : 'u';\n\t\t\tbreak;\n\t\tcase 's':\n\t\t\tflag = 's';\n\t\t\tbreak;\n\t\tcase 'c':\n\t\t\tflag = 'c';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tWARNING(\"weird printf conversion %s\", fmt);\n\t\t\tflag = '?';\n\t\t\tbreak;\n\t\t}\n\t\tif (a == NULL)\n\t\t\tFATAL(\"not enough args in printf(%s)\", os);\n\t\tx = execute(a);\n\t\ta = a->nnext;\n\t\tn = MAXNUMSIZE;\n\t\tif (fmtwd > n)\n\t\t\tn = fmtwd;\n\t\tadjbuf(&buf, &bufsize, 1+n+p-buf, recsize, &p, \"format5\");\n\t\tswitch (flag) {\n\t\tcase '?':\tsprintf(p, \"%s\", fmt);\t/* unknown, so dump it too */\n\t\t\tt = getsval(x);\n\t\t\tn = strlen(t);\n\t\t\tif (fmtwd > n)\n\t\t\t\tn = fmtwd;\n\t\t\tadjbuf(&buf, &bufsize, 1+strlen(p)+n+p-buf, recsize, &p, \"format6\");\n\t\t\tp += strlen(p);\n\t\t\tsprintf(p, \"%s\", t);\n\t\t\tbreak;\n\t\tcase 'f':\tsprintf(p, fmt, getfval(x)); break;\n\t\tcase 'd':\tsprintf(p, fmt, (long) getfval(x)); break;\n\t\tcase 'u':\tsprintf(p, fmt, (int) getfval(x)); break;\n\t\tcase 's':\n\t\t\tt = getsval(x);\n\t\t\tn = strlen(t);\n\t\t\tif (fmtwd > n)\n\t\t\t\tn = fmtwd;\n\t\t\tif (!adjbuf(&buf, &bufsize, 1+n+p-buf, recsize, &p, \"format7\"))\n\t\t\t\tFATAL(\"huge string/format (%d chars) in printf %.30s... ran format() out of memory\", n, t);\n\t\t\tsprintf(p, fmt, t);\n\t\t\tbreak;\n\t\tcase 'c':\n\t\t\tif (isnum(x)) {\n\t\t\t\tif (getfval(x))\n\t\t\t\t\tsprintf(p, fmt, (int) getfval(x));\n\t\t\t\telse {\n\t\t\t\t\t*p++ = '\\0'; /* explicit null byte */\n\t\t\t\t\t*p = '\\0';   /* next output will start here */\n\t\t\t\t}\n\t\t\t} else\n\t\t\t\tsprintf(p, fmt, getsval(x)[0]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tFATAL(\"can't happen: bad conversion %c in format()\", flag);\n\t\t}\n\t\ttempfree(x);\n\t\tp += strlen(p);\n\t\ts++;\n\t}\n\t*p = '\\0';\n\tfree(fmt);\n\tfor ( ; a; a = a->nnext)\t\t/* evaluate any remaining args */\n\t\texecute(a);\n\t*pbuf = buf;\n\t*pbufsize = bufsize;\n\treturn p - buf;\n}\n\nCell *awksprintf(Node **a, int n)\t\t/* sprintf(a[0]) */\n{\n\tCell *x;\n\tNode *y;\n\tchar *buf;\n\tint bufsz=3*recsize;\n\n\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of memory in awksprintf\");\n\ty = a[0]->nnext;\n\tx = execute(a[0]);\n\tif (format(&buf, &bufsz, getsval(x), y) == -1)\n\t\tFATAL(\"sprintf string %.30s... too long.  can't happen.\", buf);\n\ttempfree(x);\n\tx = gettemp();\n\tx->sval = buf;\n\tx->tval = STR;\n\treturn(x);\n}\n\nCell *awkprintf(Node **a, int n)\t\t/* printf */\n{\t/* a[0] is list of args, starting with format string */\n\t/* a[1] is redirection operator, a[2] is redirection file */\n\tFILE *fp;\n\tCell *x;\n\tNode *y;\n\tchar *buf;\n\tint len;\n\tint bufsz=3*recsize;\n\n\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of memory in awkprintf\");\n\ty = a[0]->nnext;\n\tx = execute(a[0]);\n\tif ((len = format(&buf, &bufsz, getsval(x), y)) == -1)\n\t\tFATAL(\"printf string %.30s... too long.  can't happen.\", buf);\n\ttempfree(x);\n\tif (a[1] == NULL) {\n\t\t/* fputs(buf, stdout); */\n\t\tfwrite(buf, len, 1, stdout);\n\t\tif (ferror(stdout))\n\t\t\tFATAL(\"write error on stdout\");\n\t} else {\n\t\tfp = redirect(ptoi(a[1]), a[2]);\n\t\t/* fputs(buf, fp); */\n\t\tfwrite(buf, len, 1, fp);\n\t\tfflush(fp);\n\t\tif (ferror(fp))\n\t\t\tFATAL(\"write error on %s\", filename(fp));\n\t}\n\tfree(buf);\n\treturn(True);\n}\n\nCell *arith(Node **a, int n)\t/* a[0] + a[1], etc.  also -a[0] */\n{\n\tAwkfloat i, j = 0;\n\tdouble v;\n\tCell *x, *y, *z;\n\n\tx = execute(a[0]);\n\ti = getfval(x);\n\ttempfree(x);\n\tif (n != UMINUS) {\n\t\ty = execute(a[1]);\n\t\tj = getfval(y);\n\t\ttempfree(y);\n\t}\n\tz = gettemp();\n\tswitch (n) {\n\tcase ADD:\n\t\ti += j;\n\t\tbreak;\n\tcase MINUS:\n\t\ti -= j;\n\t\tbreak;\n\tcase MULT:\n\t\ti *= j;\n\t\tbreak;\n\tcase DIVIDE:\n\t\tif (j == 0)\n\t\t\tFATAL(\"division by zero\");\n\t\ti /= j;\n\t\tbreak;\n\tcase MOD:\n\t\tif (j == 0)\n\t\t\tFATAL(\"division by zero in mod\");\n\t\tmodf(i/j, &v);\n\t\ti = i - j * v;\n\t\tbreak;\n\tcase UMINUS:\n\t\ti = -i;\n\t\tbreak;\n\tcase POWER:\n\t\tif (j >= 0 && modf(j, &v) == 0.0)\t/* pos integer exponent */\n\t\t\ti = ipow(i, (int) j);\n\t\telse\n\t\t\ti = errcheck(pow(i, j), \"pow\");\n\t\tbreak;\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"illegal arithmetic operator %d\", n);\n\t}\n\tsetfval(z, i);\n\treturn(z);\n}\n\ndouble ipow(double x, int n)\t/* x**n.  ought to be done by pow, but isn't always */\n{\n\tdouble v;\n\n\tif (n <= 0)\n\t\treturn 1;\n\tv = ipow(x, n/2);\n\tif (n % 2 == 0)\n\t\treturn v * v;\n\telse\n\t\treturn x * v * v;\n}\n\nCell *incrdecr(Node **a, int n)\t\t/* a[0]++, etc. */\n{\n\tCell *x, *z;\n\tint k;\n\tAwkfloat xf;\n\n\tx = execute(a[0]);\n\txf = getfval(x);\n\tk = (n == PREINCR || n == POSTINCR) ? 1 : -1;\n\tif (n == PREINCR || n == PREDECR) {\n\t\tsetfval(x, xf + k);\n\t\treturn(x);\n\t}\n\tz = gettemp();\n\tsetfval(z, xf);\n\tsetfval(x, xf + k);\n\ttempfree(x);\n\treturn(z);\n}\n\nCell *assign(Node **a, int n)\t/* a[0] = a[1], a[0] += a[1], etc. */\n{\t\t/* this is subtle; don't muck with it. */\n\tCell *x, *y;\n\tAwkfloat xf, yf;\n\tdouble v;\n\n\ty = execute(a[1]);\n\tx = execute(a[0]);\n\tif (n == ASSIGN) {\t/* ordinary assignment */\n\t\tif (x == y && !(x->tval & (FLD|REC)))\t/* self-assignment: */\n\t\t\t;\t\t/* leave alone unless it's a field */\n\t\telse if ((y->tval & (STR|NUM)) == (STR|NUM)) {\n\t\t\tsetsval(x, getsval(y));\n\t\t\tx->fval = getfval(y);\n\t\t\tx->tval |= NUM;\n\t\t}\n\t\telse if (isstr(y))\n\t\t\tsetsval(x, getsval(y));\n\t\telse if (isnum(y))\n\t\t\tsetfval(x, getfval(y));\n\t\telse\n\t\t\tfunnyvar(y, \"read value of\");\n\t\ttempfree(y);\n\t\treturn(x);\n\t}\n\txf = getfval(x);\n\tyf = getfval(y);\n\tswitch (n) {\n\tcase ADDEQ:\n\t\txf += yf;\n\t\tbreak;\n\tcase SUBEQ:\n\t\txf -= yf;\n\t\tbreak;\n\tcase MULTEQ:\n\t\txf *= yf;\n\t\tbreak;\n\tcase DIVEQ:\n\t\tif (yf == 0)\n\t\t\tFATAL(\"division by zero in /=\");\n\t\txf /= yf;\n\t\tbreak;\n\tcase MODEQ:\n\t\tif (yf == 0)\n\t\t\tFATAL(\"division by zero in %%=\");\n\t\tmodf(xf/yf, &v);\n\t\txf = xf - yf * v;\n\t\tbreak;\n\tcase POWEQ:\n\t\tif (yf >= 0 && modf(yf, &v) == 0.0)\t/* pos integer exponent */\n\t\t\txf = ipow(xf, (int) yf);\n\t\telse\n\t\t\txf = errcheck(pow(xf, yf), \"pow\");\n\t\tbreak;\n\tdefault:\n\t\tFATAL(\"illegal assignment operator %d\", n);\n\t\tbreak;\n\t}\n\ttempfree(y);\n\tsetfval(x, xf);\n\treturn(x);\n}\n\nCell *cat(Node **a, int q)\t/* a[0] cat a[1] */\n{\n\tCell *x, *y, *z;\n\tint n1, n2;\n\tchar *s;\n\n\tx = execute(a[0]);\n\ty = execute(a[1]);\n\tgetsval(x);\n\tgetsval(y);\n\tn1 = strlen(x->sval);\n\tn2 = strlen(y->sval);\n\ts = (char *) malloc(n1 + n2 + 1);\n\tif (s == NULL)\n\t\tFATAL(\"out of space concatenating %.15s... and %.15s...\",\n\t\t\tx->sval, y->sval);\n\tstrcpy(s, x->sval);\n\tstrcpy(s+n1, y->sval);\n\ttempfree(y);\n\tz = gettemp();\n\tz->sval = s;\n\tz->tval = STR;\n\ttempfree(x);\n\treturn(z);\n}\n\nCell *pastat(Node **a, int n)\t/* a[0] { a[1] } */\n{\n\tCell *x;\n\n\tif (a[0] == 0)\n\t\tx = execute(a[1]);\n\telse {\n\t\tx = execute(a[0]);\n\t\tif (istrue(x)) {\n\t\t\ttempfree(x);\n\t\t\tx = execute(a[1]);\n\t\t}\n\t}\n\treturn x;\n}\n\nCell *dopa2(Node **a, int n)\t/* a[0], a[1] { a[2] } */\n{\n\tCell *x;\n\tint pair;\n\n\tpair = ptoi(a[3]);\n\tif (pairstack[pair] == 0) {\n\t\tx = execute(a[0]);\n\t\tif (istrue(x))\n\t\t\tpairstack[pair] = 1;\n\t\ttempfree(x);\n\t}\n\tif (pairstack[pair] == 1) {\n\t\tx = execute(a[1]);\n\t\tif (istrue(x))\n\t\t\tpairstack[pair] = 0;\n\t\ttempfree(x);\n\t\tx = execute(a[2]);\n\t\treturn(x);\n\t}\n\treturn(False);\n}\n\nCell *split(Node **a, int nnn)\t/* split(a[0], a[1], a[2]); a[3] is type */\n{\n\tCell *x = 0, *y, *ap;\n\tchar *s;\n\tint sep;\n\tchar *t, temp, num[50], *fs = 0;\n\tint n, tempstat, arg3type;\n\n\ty = execute(a[0]);\t/* source string */\n\ts = getsval(y);\n\targ3type = ptoi(a[3]);\n\tif (a[2] == 0)\t\t/* fs string */\n\t\tfs = *FS;\n\telse if (arg3type == STRING) {\t/* split(str,arr,\"string\") */\n\t\tx = execute(a[2]);\n\t\tfs = getsval(x);\n\t} else if (arg3type == REGEXPR)\n\t\tfs = \"(regexpr)\";\t/* split(str,arr,/regexpr/) */\n\telse\n\t\tFATAL(\"illegal type of split\");\n\tsep = *fs;\n\tap = execute(a[1]);\t/* array name */\n\tfreesymtab(ap);\n\t   dprintf( (\"split: s=|%s|, a=%s, sep=|%s|\\n\", s, NN(ap->nval), fs) );\n\tap->tval &= ~STR;\n\tap->tval |= ARR;\n\tap->sval = (char *) makesymtab(NSYMTAB);\n\n\tn = 0;\n\tif (*s != '\\0' && (strlen(fs) > 1 || arg3type == REGEXPR)) {\t/* reg expr */\n\t\tfa *pfa;\n\t\tif (arg3type == REGEXPR) {\t/* it's ready already */\n\t\t\tpfa = (fa *) a[2];\n\t\t} else {\n\t\t\tpfa = makedfa(fs, 1);\n\t\t}\n\t\tif (nematch(pfa,s)) {\n\t\t\ttempstat = pfa->initstat;\n\t\t\tpfa->initstat = 2;\n\t\t\tdo {\n\t\t\t\tn++;\n\t\t\t\tsprintf(num, \"%d\", n);\n\t\t\t\ttemp = *patbeg;\n\t\t\t\t*patbeg = '\\0';\n\t\t\t\tif (is_number(s))\n\t\t\t\t\tsetsymtab(num, s, atof(s), STR|NUM, (Array *) ap->sval);\n\t\t\t\telse\n\t\t\t\t\tsetsymtab(num, s, 0.0, STR, (Array *) ap->sval);\n\t\t\t\t*patbeg = temp;\n\t\t\t\ts = patbeg + patlen;\n\t\t\t\tif (*(patbeg+patlen-1) == 0 || *s == 0) {\n\t\t\t\t\tn++;\n\t\t\t\t\tsprintf(num, \"%d\", n);\n\t\t\t\t\tsetsymtab(num, \"\", 0.0, STR, (Array *) ap->sval);\n\t\t\t\t\tpfa->initstat = tempstat;\n\t\t\t\t\tgoto spdone;\n\t\t\t\t}\n\t\t\t} while (nematch(pfa,s));\n\t\t\tpfa->initstat = tempstat; \t/* bwk: has to be here to reset */\n\t\t\t\t\t\t\t/* cf gsub and refldbld */\n\t\t}\n\t\tn++;\n\t\tsprintf(num, \"%d\", n);\n\t\tif (is_number(s))\n\t\t\tsetsymtab(num, s, atof(s), STR|NUM, (Array *) ap->sval);\n\t\telse\n\t\t\tsetsymtab(num, s, 0.0, STR, (Array *) ap->sval);\n  spdone:\n\t\tpfa = NULL;\n\t} else if (sep == ' ') {\n\t\tfor (n = 0; ; ) {\n\t\t\twhile (*s == ' ' || *s == '\\t' || *s == '\\n')\n\t\t\t\ts++;\n\t\t\tif (*s == 0)\n\t\t\t\tbreak;\n\t\t\tn++;\n\t\t\tt = s;\n\t\t\tdo\n\t\t\t\ts++;\n\t\t\twhile (*s!=' ' && *s!='\\t' && *s!='\\n' && *s!='\\0');\n\t\t\ttemp = *s;\n\t\t\t*s = '\\0';\n\t\t\tsprintf(num, \"%d\", n);\n\t\t\tif (is_number(t))\n\t\t\t\tsetsymtab(num, t, atof(t), STR|NUM, (Array *) ap->sval);\n\t\t\telse\n\t\t\t\tsetsymtab(num, t, 0.0, STR, (Array *) ap->sval);\n\t\t\t*s = temp;\n\t\t\tif (*s != 0)\n\t\t\t\ts++;\n\t\t}\n\t} else if (sep == 0) {\t/* new: split(s, a, \"\") => 1 char/elem */\n\t\tfor (n = 0; *s != 0; s++) {\n\t\t\tchar buf[2];\n\t\t\tn++;\n\t\t\tsprintf(num, \"%d\", n);\n\t\t\tbuf[0] = *s;\n\t\t\tbuf[1] = 0;\n\t\t\tif (isdigit((uschar)buf[0]))\n\t\t\t\tsetsymtab(num, buf, atof(buf), STR|NUM, (Array *) ap->sval);\n\t\t\telse\n\t\t\t\tsetsymtab(num, buf, 0.0, STR, (Array *) ap->sval);\n\t\t}\n\t} else if (*s != 0) {\n\t\tfor (;;) {\n\t\t\tn++;\n\t\t\tt = s;\n\t\t\twhile (*s != sep && *s != '\\n' && *s != '\\0')\n\t\t\t\ts++;\n\t\t\ttemp = *s;\n\t\t\t*s = '\\0';\n\t\t\tsprintf(num, \"%d\", n);\n\t\t\tif (is_number(t))\n\t\t\t\tsetsymtab(num, t, atof(t), STR|NUM, (Array *) ap->sval);\n\t\t\telse\n\t\t\t\tsetsymtab(num, t, 0.0, STR, (Array *) ap->sval);\n\t\t\t*s = temp;\n\t\t\tif (*s++ == 0)\n\t\t\t\tbreak;\n\t\t}\n\t}\n\ttempfree(ap);\n\ttempfree(y);\n\tif (a[2] != 0 && arg3type == STRING) {\n\t\ttempfree(x);\n\t}\n\tx = gettemp();\n\tx->tval = NUM;\n\tx->fval = n;\n\treturn(x);\n}\n\nCell *condexpr(Node **a, int n)\t/* a[0] ? a[1] : a[2] */\n{\n\tCell *x;\n\n\tx = execute(a[0]);\n\tif (istrue(x)) {\n\t\ttempfree(x);\n\t\tx = execute(a[1]);\n\t} else {\n\t\ttempfree(x);\n\t\tx = execute(a[2]);\n\t}\n\treturn(x);\n}\n\nCell *ifstat(Node **a, int n)\t/* if (a[0]) a[1]; else a[2] */\n{\n\tCell *x;\n\n\tx = execute(a[0]);\n\tif (istrue(x)) {\n\t\ttempfree(x);\n\t\tx = execute(a[1]);\n\t} else if (a[2] != 0) {\n\t\ttempfree(x);\n\t\tx = execute(a[2]);\n\t}\n\treturn(x);\n}\n\nCell *whilestat(Node **a, int n)\t/* while (a[0]) a[1] */\n{\n\tCell *x;\n\n\tfor (;;) {\n\t\tx = execute(a[0]);\n\t\tif (!istrue(x))\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t\tx = execute(a[1]);\n\t\tif (isbreak(x)) {\n\t\t\tx = True;\n\t\t\treturn(x);\n\t\t}\n\t\tif (isnext(x) || isexit(x) || isret(x))\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t}\n}\n\nCell *dostat(Node **a, int n)\t/* do a[0]; while(a[1]) */\n{\n\tCell *x;\n\n\tfor (;;) {\n\t\tx = execute(a[0]);\n\t\tif (isbreak(x))\n\t\t\treturn True;\n\t\tif (isnext(x) || isexit(x) || isret(x))\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t\tx = execute(a[1]);\n\t\tif (!istrue(x))\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t}\n}\n\nCell *forstat(Node **a, int n)\t/* for (a[0]; a[1]; a[2]) a[3] */\n{\n\tCell *x;\n\n\tx = execute(a[0]);\n\ttempfree(x);\n\tfor (;;) {\n\t\tif (a[1]!=0) {\n\t\t\tx = execute(a[1]);\n\t\t\tif (!istrue(x)) return(x);\n\t\t\telse tempfree(x);\n\t\t}\n\t\tx = execute(a[3]);\n\t\tif (isbreak(x))\t\t/* turn off break */\n\t\t\treturn True;\n\t\tif (isnext(x) || isexit(x) || isret(x))\n\t\t\treturn(x);\n\t\ttempfree(x);\n\t\tx = execute(a[2]);\n\t\ttempfree(x);\n\t}\n}\n\nCell *instat(Node **a, int n)\t/* for (a[0] in a[1]) a[2] */\n{\n\tCell *x, *vp, *arrayp, *cp, *ncp;\n\tArray *tp;\n\tint i;\n\n\tvp = execute(a[0]);\n\tarrayp = execute(a[1]);\n\tif (!isarr(arrayp)) {\n\t\treturn True;\n\t}\n\ttp = (Array *) arrayp->sval;\n\ttempfree(arrayp);\n\tfor (i = 0; i < tp->size; i++) {\t/* this routine knows too much */\n\t\tfor (cp = tp->tab[i]; cp != NULL; cp = ncp) {\n\t\t\tsetsval(vp, cp->nval);\n\t\t\tncp = cp->cnext;\n\t\t\tx = execute(a[2]);\n\t\t\tif (isbreak(x)) {\n\t\t\t\ttempfree(vp);\n\t\t\t\treturn True;\n\t\t\t}\n\t\t\tif (isnext(x) || isexit(x) || isret(x)) {\n\t\t\t\ttempfree(vp);\n\t\t\t\treturn(x);\n\t\t\t}\n\t\t\ttempfree(x);\n\t\t}\n\t}\n\treturn True;\n}\n\nCell *bltin(Node **a, int n)\t/* builtin functions. a[0] is type, a[1] is arg list */\n{\n\tCell *x, *y;\n\tAwkfloat u;\n\tint t;\n\tchar *p, *buf;\n\tNode *nextarg;\n\tFILE *fp;\n\tvoid flush_all(void);\n\n\tt = ptoi(a[0]);\n\tx = execute(a[1]);\n\tnextarg = a[1]->nnext;\n\tswitch (t) {\n\tcase FLENGTH:\n\t\tif (isarr(x))\n\t\t\tu = ((Array *) x->sval)->nelem;\t/* GROT.  should be function*/\n\t\telse\n\t\t\tu = strlen(getsval(x));\n\t\tbreak;\n\tcase FLOG:\n\t\tu = errcheck(log(getfval(x)), \"log\"); break;\n\tcase FINT:\n\t\tmodf(getfval(x), &u); break;\n\tcase FEXP:\n\t\tu = errcheck(exp(getfval(x)), \"exp\"); break;\n\tcase FSQRT:\n\t\tu = errcheck(sqrt(getfval(x)), \"sqrt\"); break;\n\tcase FSIN:\n\t\tu = sin(getfval(x)); break;\n\tcase FCOS:\n\t\tu = cos(getfval(x)); break;\n\tcase FATAN:\n\t\tif (nextarg == 0) {\n\t\t\tWARNING(\"atan2 requires two arguments; returning 1.0\");\n\t\t\tu = 1.0;\n\t\t} else {\n\t\t\ty = execute(a[1]->nnext);\n\t\t\tu = atan2(getfval(x), getfval(y));\n\t\t\ttempfree(y);\n\t\t\tnextarg = nextarg->nnext;\n\t\t}\n\t\tbreak;\n\tcase FSYSTEM:\n\t\tfflush(stdout);\t\t/* in case something is buffered already */\n\t\tu = (Awkfloat) system(getsval(x)) / 256;   /* 256 is unix-dep */\n\t\tbreak;\n\tcase FRAND:\n\t\t/* in principle, rand() returns something in 0..RAND_MAX */\n\t\tu = (Awkfloat) (rand() % RAND_MAX) / RAND_MAX;\n\t\tbreak;\n\tcase FSRAND:\n\t\tif (isrec(x))\t/* no argument provided */\n\t\t\tu = time((time_t *)0);\n\t\telse\n\t\t\tu = getfval(x);\n\t\tsrand((unsigned int) u);\n\t\tbreak;\n\tcase FTOUPPER:\n\tcase FTOLOWER:\n\t\tbuf = tostring(getsval(x));\n\t\tif (t == FTOUPPER) {\n\t\t\tfor (p = buf; *p; p++)\n\t\t\t\tif (islower((uschar) *p))\n\t\t\t\t\t*p = toupper((uschar)*p);\n\t\t} else {\n\t\t\tfor (p = buf; *p; p++)\n\t\t\t\tif (isupper((uschar) *p))\n\t\t\t\t\t*p = tolower((uschar)*p);\n\t\t}\n\t\ttempfree(x);\n\t\tx = gettemp();\n\t\tsetsval(x, buf);\n\t\tfree(buf);\n\t\treturn x;\n\tcase FFLUSH:\n\t\tif (isrec(x) || strlen(getsval(x)) == 0) {\n\t\t\tflush_all();\t/* fflush() or fflush(\"\") -> all */\n\t\t\tu = 0;\n\t\t} else if ((fp = openfile(FFLUSH, getsval(x))) == NULL)\n\t\t\tu = EOF;\n\t\telse\n\t\t\tu = fflush(fp);\n\t\tbreak;\n\tdefault:\t/* can't happen */\n\t\tFATAL(\"illegal function type %d\", t);\n\t\tbreak;\n\t}\n\ttempfree(x);\n\tx = gettemp();\n\tsetfval(x, u);\n\tif (nextarg != 0) {\n\t\tWARNING(\"warning: function has too many arguments\");\n\t\tfor ( ; nextarg; nextarg = nextarg->nnext)\n\t\t\texecute(nextarg);\n\t}\n\treturn(x);\n}\n\nCell *printstat(Node **a, int n)\t/* print a[0] */\n{\n\tNode *x;\n\tCell *y;\n\tFILE *fp;\n\n\tif (a[1] == 0)\t/* a[1] is redirection operator, a[2] is file */\n\t\tfp = stdout;\n\telse\n\t\tfp = redirect(ptoi(a[1]), a[2]);\n\tfor (x = a[0]; x != NULL; x = x->nnext) {\n\t\ty = execute(x);\n\t\tfputs(getpssval(y), fp);\n\t\ttempfree(y);\n\t\tif (x->nnext == NULL)\n\t\t\tfputs(*ORS, fp);\n\t\telse\n\t\t\tfputs(*OFS, fp);\n\t}\n\tif (a[1] != 0)\n\t\tfflush(fp);\n\tif (ferror(fp))\n\t\tFATAL(\"write error on %s\", filename(fp));\n\treturn(True);\n}\n\nCell *nullproc(Node **a, int n)\n{\n\tn = n;\n\ta = a;\n\treturn 0;\n}\n\n\nFILE *redirect(int a, Node *b)\t/* set up all i/o redirections */\n{\n\tFILE *fp;\n\tCell *x;\n\tchar *fname;\n\n\tx = execute(b);\n\tfname = getsval(x);\n\tfp = openfile(a, fname);\n\tif (fp == NULL)\n\t\tFATAL(\"can't open file %s\", fname);\n\ttempfree(x);\n\treturn fp;\n}\n\nstruct files {\n\tFILE\t*fp;\n\tconst char\t*fname;\n\tint\tmode;\t/* '|', 'a', 'w' => LE/LT, GT */\n} files[FOPEN_MAX] ={\n\t{ NULL,  \"/dev/stdin\",  LT },\t/* watch out: don't free this! */\n\t{ NULL, \"/dev/stdout\", GT },\n\t{ NULL, \"/dev/stderr\", GT }\n};\n\nvoid stdinit(void)\t/* in case stdin, etc., are not constants */\n{\n\tfiles[0].fp = stdin;\n\tfiles[1].fp = stdout;\n\tfiles[2].fp = stderr;\n}\n\nFILE *openfile(int a, const char *us)\n{\n\tconst char *s = us;\n\tint i, m;\n\tFILE *fp = 0;\n\n\tif (*s == '\\0')\n\t\tFATAL(\"null file name in print or getline\");\n\tfor (i=0; i < FOPEN_MAX; i++)\n\t\tif (files[i].fname && strcmp(s, files[i].fname) == 0) {\n\t\t\tif (a == files[i].mode || (a==APPEND && files[i].mode==GT))\n\t\t\t\treturn files[i].fp;\n\t\t\tif (a == FFLUSH)\n\t\t\t\treturn files[i].fp;\n\t\t}\n\tif (a == FFLUSH)\t/* didn't find it, so don't create it! */\n\t\treturn NULL;\n\n\tfor (i=0; i < FOPEN_MAX; i++)\n\t\tif (files[i].fp == 0)\n\t\t\tbreak;\n\tif (i >= FOPEN_MAX)\n\t\tFATAL(\"%s makes too many open files\", s);\n\tfflush(stdout);\t/* force a semblance of order */\n\tm = a;\n\tif (a == GT) {\n\t\tfp = fopen(s, \"w\");\n\t} else if (a == APPEND) {\n\t\tfp = fopen(s, \"a\");\n\t\tm = GT;\t/* so can mix > and >> */\n\t} else if (a == '|') {\t/* output pipe */\n\t\tfp = popen(s, \"w\");\n\t} else if (a == LE) {\t/* input pipe */\n\t\tfp = popen(s, \"r\");\n\t} else if (a == LT) {\t/* getline <file */\n\t\tfp = strcmp(s, \"-\") == 0 ? stdin : fopen(s, \"r\");\t/* \"-\" is stdin */\n\t} else\t/* can't happen */\n\t\tFATAL(\"illegal redirection %d\", a);\n\tif (fp != NULL) {\n\t\tfiles[i].fname = tostring(s);\n\t\tfiles[i].fp = fp;\n\t\tfiles[i].mode = m;\n\t}\n\treturn fp;\n}\n\nconst char *filename(FILE *fp)\n{\n\tint i;\n\n\tfor (i = 0; i < FOPEN_MAX; i++)\n\t\tif (fp == files[i].fp)\n\t\t\treturn files[i].fname;\n\treturn \"???\";\n}\n\nCell *closefile(Node **a, int n)\n{\n\tCell *x;\n\tint i, stat;\n\n\tn = n;\n\tx = execute(a[0]);\n\tgetsval(x);\n\tstat = -1;\n\tfor (i = 0; i < FOPEN_MAX; i++) {\n\t\tif (files[i].fname && strcmp(x->sval, files[i].fname) == 0) {\n\t\t\tif (ferror(files[i].fp))\n\t\t\t\tWARNING( \"i/o error occurred on %s\", files[i].fname );\n\t\t\tif (files[i].mode == '|' || files[i].mode == LE)\n\t\t\t\tstat = pclose(files[i].fp);\n\t\t\telse\n\t\t\t\tstat = fclose(files[i].fp);\n\t\t\tif (stat == EOF)\n\t\t\t\tWARNING( \"i/o error occurred closing %s\", files[i].fname );\n\t\t\tif (i > 2)\t/* don't do /dev/std... */\n\t\t\t\txfree(files[i].fname);\n\t\t\tfiles[i].fname = NULL;\t/* watch out for ref thru this */\n\t\t\tfiles[i].fp = NULL;\n\t\t}\n\t}\n\ttempfree(x);\n\tx = gettemp();\n\tsetfval(x, (Awkfloat) stat);\n\treturn(x);\n}\n\nvoid closeall(void)\n{\n\tint i, stat;\n\n\tfor (i = 0; i < FOPEN_MAX; i++) {\n\t\tif (files[i].fp) {\n\t\t\tif (ferror(files[i].fp))\n\t\t\t\tWARNING( \"i/o error occurred on %s\", files[i].fname );\n\t\t\tif (files[i].mode == '|' || files[i].mode == LE)\n\t\t\t\tstat = pclose(files[i].fp);\n\t\t\telse\n\t\t\t\tstat = fclose(files[i].fp);\n\t\t\tif (stat == EOF)\n\t\t\t\tWARNING( \"i/o error occurred while closing %s\", files[i].fname );\n\t\t}\n\t}\n}\n\nvoid flush_all(void)\n{\n\tint i;\n\n\tfor (i = 0; i < FOPEN_MAX; i++)\n\t\tif (files[i].fp)\n\t\t\tfflush(files[i].fp);\n}\n\nvoid backsub(char **pb_ptr, char **sptr_ptr);\n\nCell *sub(Node **a, int nnn)\t/* substitute command */\n{\n\tchar *sptr, *pb, *q;\n\tCell *x, *y, *result;\n\tchar *t, *buf;\n\tfa *pfa;\n\tint bufsz = recsize;\n\n\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of memory in sub\");\n\tx = execute(a[3]);\t/* target string */\n\tt = getsval(x);\n\tif (a[0] == 0)\t\t/* 0 => a[1] is already-compiled regexpr */\n\t\tpfa = (fa *) a[1];\t/* regular expression */\n\telse {\n\t\ty = execute(a[1]);\n\t\tpfa = makedfa(getsval(y), 1);\n\t\ttempfree(y);\n\t}\n\ty = execute(a[2]);\t/* replacement string */\n\tresult = False;\n\tif (pmatch(pfa, t)) {\n\t\tsptr = t;\n\t\tadjbuf(&buf, &bufsz, 1+patbeg-sptr, recsize, 0, \"sub\");\n\t\tpb = buf;\n\t\twhile (sptr < patbeg)\n\t\t\t*pb++ = *sptr++;\n\t\tsptr = getsval(y);\n\t\twhile (*sptr != 0) {\n\t\t\tadjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, \"sub\");\n\t\t\tif (*sptr == '\\\\') {\n\t\t\t\tbacksub(&pb, &sptr);\n\t\t\t} else if (*sptr == '&') {\n\t\t\t\tsptr++;\n\t\t\t\tadjbuf(&buf, &bufsz, 1+patlen+pb-buf, recsize, &pb, \"sub\");\n\t\t\t\tfor (q = patbeg; q < patbeg+patlen; )\n\t\t\t\t\t*pb++ = *q++;\n\t\t\t} else\n\t\t\t\t*pb++ = *sptr++;\n\t\t}\n\t\t*pb = '\\0';\n\t\tif (pb > buf + bufsz)\n\t\t\tFATAL(\"sub result1 %.30s too big; can't happen\", buf);\n\t\tsptr = patbeg + patlen;\n\t\tif ((patlen == 0 && *patbeg) || (patlen && *(sptr-1))) {\n\t\t\tadjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, \"sub\");\n\t\t\twhile ((*pb++ = *sptr++) != 0)\n\t\t\t\t;\n\t\t}\n\t\tif (pb > buf + bufsz)\n\t\t\tFATAL(\"sub result2 %.30s too big; can't happen\", buf);\n\t\tsetsval(x, buf);\t/* BUG: should be able to avoid copy */\n\t\tresult = True;;\n\t}\n\ttempfree(x);\n\ttempfree(y);\n\tfree(buf);\n\treturn result;\n}\n\nCell *gsub(Node **a, int nnn)\t/* global substitute */\n{\n\tCell *x, *y;\n\tchar *rptr, *sptr, *t, *pb, *q;\n\tchar *buf;\n\tfa *pfa;\n\tint mflag, tempstat, num;\n\tint bufsz = recsize;\n\n\tif ((buf = (char *) malloc(bufsz)) == NULL)\n\t\tFATAL(\"out of memory in gsub\");\n\tmflag = 0;\t/* if mflag == 0, can replace empty string */\n\tnum = 0;\n\tx = execute(a[3]);\t/* target string */\n\tt = getsval(x);\n\tif (a[0] == 0)\t\t/* 0 => a[1] is already-compiled regexpr */\n\t\tpfa = (fa *) a[1];\t/* regular expression */\n\telse {\n\t\ty = execute(a[1]);\n\t\tpfa = makedfa(getsval(y), 1);\n\t\ttempfree(y);\n\t}\n\ty = execute(a[2]);\t/* replacement string */\n\tif (pmatch(pfa, t)) {\n\t\ttempstat = pfa->initstat;\n\t\tpfa->initstat = 2;\n\t\tpb = buf;\n\t\trptr = getsval(y);\n\t\tdo {\n\t\t\tif (patlen == 0 && *patbeg != 0) {\t/* matched empty string */\n\t\t\t\tif (mflag == 0) {\t/* can replace empty */\n\t\t\t\t\tnum++;\n\t\t\t\t\tsptr = rptr;\n\t\t\t\t\twhile (*sptr != 0) {\n\t\t\t\t\t\tadjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\t\t\tif (*sptr == '\\\\') {\n\t\t\t\t\t\t\tbacksub(&pb, &sptr);\n\t\t\t\t\t\t} else if (*sptr == '&') {\n\t\t\t\t\t\t\tsptr++;\n\t\t\t\t\t\t\tadjbuf(&buf, &bufsz, 1+patlen+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\t\t\t\tfor (q = patbeg; q < patbeg+patlen; )\n\t\t\t\t\t\t\t\t*pb++ = *q++;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t*pb++ = *sptr++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (*t == 0)\t/* at end */\n\t\t\t\t\tgoto done;\n\t\t\t\tadjbuf(&buf, &bufsz, 2+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\t*pb++ = *t++;\n\t\t\t\tif (pb > buf + bufsz)\t/* BUG: not sure of this test */\n\t\t\t\t\tFATAL(\"gsub result0 %.30s too big; can't happen\", buf);\n\t\t\t\tmflag = 0;\n\t\t\t}\n\t\t\telse {\t/* matched nonempty string */\n\t\t\t\tnum++;\n\t\t\t\tsptr = t;\n\t\t\t\tadjbuf(&buf, &bufsz, 1+(patbeg-sptr)+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\twhile (sptr < patbeg)\n\t\t\t\t\t*pb++ = *sptr++;\n\t\t\t\tsptr = rptr;\n\t\t\t\twhile (*sptr != 0) {\n\t\t\t\t\tadjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\t\tif (*sptr == '\\\\') {\n\t\t\t\t\t\tbacksub(&pb, &sptr);\n\t\t\t\t\t} else if (*sptr == '&') {\n\t\t\t\t\t\tsptr++;\n\t\t\t\t\t\tadjbuf(&buf, &bufsz, 1+patlen+pb-buf, recsize, &pb, \"gsub\");\n\t\t\t\t\t\tfor (q = patbeg; q < patbeg+patlen; )\n\t\t\t\t\t\t\t*pb++ = *q++;\n\t\t\t\t\t} else\n\t\t\t\t\t\t*pb++ = *sptr++;\n\t\t\t\t}\n\t\t\t\tt = patbeg + patlen;\n\t\t\t\tif (patlen == 0 || *t == 0 || *(t-1) == 0)\n\t\t\t\t\tgoto done;\n\t\t\t\tif (pb > buf + bufsz)\n\t\t\t\t\tFATAL(\"gsub result1 %.30s too big; can't happen\", buf);\n\t\t\t\tmflag = 1;\n\t\t\t}\n\t\t} while (pmatch(pfa,t));\n\t\tsptr = t;\n\t\tadjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, \"gsub\");\n\t\twhile ((*pb++ = *sptr++) != 0)\n\t\t\t;\n\tdone:\tif (pb > buf + bufsz)\n\t\t\tFATAL(\"gsub result2 %.30s too big; can't happen\", buf);\n\t\t*pb = '\\0';\n\t\tsetsval(x, buf);\t/* BUG: should be able to avoid copy + free */\n\t\tpfa->initstat = tempstat;\n\t}\n\ttempfree(x);\n\ttempfree(y);\n\tx = gettemp();\n\tx->tval = NUM;\n\tx->fval = num;\n\tfree(buf);\n\treturn(x);\n}\n\nvoid backsub(char **pb_ptr, char **sptr_ptr)\t/* handle \\\\& variations */\n{\t\t\t\t\t\t/* sptr[0] == '\\\\' */\n\tchar *pb = *pb_ptr, *sptr = *sptr_ptr;\n\n\tif (sptr[1] == '\\\\') {\n\t\tif (sptr[2] == '\\\\' && sptr[3] == '&') { /* \\\\\\& -> \\& */\n\t\t\t*pb++ = '\\\\';\n\t\t\t*pb++ = '&';\n\t\t\tsptr += 4;\n\t\t} else if (sptr[2] == '&') {\t/* \\\\& -> \\ + matched */\n\t\t\t*pb++ = '\\\\';\n\t\t\tsptr += 2;\n\t\t} else {\t\t\t/* \\\\x -> \\\\x */\n\t\t\t*pb++ = *sptr++;\n\t\t\t*pb++ = *sptr++;\n\t\t}\n\t} else if (sptr[1] == '&') {\t/* literal & */\n\t\tsptr++;\n\t\t*pb++ = *sptr++;\n\t} else\t\t\t\t/* literal \\ */\n\t\t*pb++ = *sptr++;\n\n\t*pb_ptr = pb;\n\t*sptr_ptr = sptr;\n}\n"
  },
  {
    "path": "sources/host-tools/nawk-20071023/tran.c",
    "content": "/****************************************************************\nCopyright (C) Lucent Technologies 1997\nAll Rights Reserved\n\nPermission to use, copy, modify, and distribute this software and\nits documentation for any purpose and without fee is hereby\ngranted, provided that the above copyright notice appear in all\ncopies and that both that the copyright notice and this\npermission notice and warranty disclaimer appear in supporting\ndocumentation, and that the name Lucent Technologies or any of\nits entities not be used in advertising or publicity pertaining\nto distribution of the software without specific, written prior\npermission.\n\nLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\nINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.\nIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY\nSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER\nIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n****************************************************************/\n\n#define\tDEBUG\n#include <stdio.h>\n#include <math.h>\n#include <ctype.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"awk.h\"\n#include \"ytab.h\"\n\n#define\tFULLTAB\t2\t/* rehash when table gets this x full */\n#define\tGROWTAB 4\t/* grow table by this factor */\n\nArray\t*symtab;\t/* main symbol table */\n\nchar\t**FS;\t\t/* initial field sep */\nchar\t**RS;\t\t/* initial record sep */\nchar\t**OFS;\t\t/* output field sep */\nchar\t**ORS;\t\t/* output record sep */\nchar\t**OFMT;\t\t/* output format for numbers */\nchar\t**CONVFMT;\t/* format for conversions in getsval */\nAwkfloat *NF;\t\t/* number of fields in current record */\nAwkfloat *NR;\t\t/* number of current record */\nAwkfloat *FNR;\t\t/* number of current record in current file */\nchar\t**FILENAME;\t/* current filename argument */\nAwkfloat *ARGC;\t\t/* number of arguments from command line */\nchar\t**SUBSEP;\t/* subscript separator for a[i,j,k]; default \\034 */\nAwkfloat *RSTART;\t/* start of re matched with ~; origin 1 (!) */\nAwkfloat *RLENGTH;\t/* length of same */\n\nCell\t*fsloc;\t\t/* FS */\nCell\t*nrloc;\t\t/* NR */\nCell\t*nfloc;\t\t/* NF */\nCell\t*fnrloc;\t/* FNR */\nArray\t*ARGVtab;\t/* symbol table containing ARGV[...] */\nArray\t*ENVtab;\t/* symbol table containing ENVIRON[...] */\nCell\t*rstartloc;\t/* RSTART */\nCell\t*rlengthloc;\t/* RLENGTH */\nCell\t*symtabloc;\t/* SYMTAB */\n\nCell\t*nullloc;\t/* a guaranteed empty cell */\nNode\t*nullnode;\t/* zero&null, converted into a node for comparisons */\nCell\t*literal0;\n\nextern Cell **fldtab;\n\nvoid syminit(void)\t/* initialize symbol table with builtin vars */\n{\n\tliteral0 = setsymtab(\"0\", \"0\", 0.0, NUM|STR|CON|DONTFREE, symtab);\n\t/* this is used for if(x)... tests: */\n\tnullloc = setsymtab(\"$zero&null\", \"\", 0.0, NUM|STR|CON|DONTFREE, symtab);\n\tnullnode = celltonode(nullloc, CCON);\n\n\tfsloc = setsymtab(\"FS\", \" \", 0.0, STR|DONTFREE, symtab);\n\tFS = &fsloc->sval;\n\tRS = &setsymtab(\"RS\", \"\\n\", 0.0, STR|DONTFREE, symtab)->sval;\n\tOFS = &setsymtab(\"OFS\", \" \", 0.0, STR|DONTFREE, symtab)->sval;\n\tORS = &setsymtab(\"ORS\", \"\\n\", 0.0, STR|DONTFREE, symtab)->sval;\n\tOFMT = &setsymtab(\"OFMT\", \"%.6g\", 0.0, STR|DONTFREE, symtab)->sval;\n\tCONVFMT = &setsymtab(\"CONVFMT\", \"%.6g\", 0.0, STR|DONTFREE, symtab)->sval;\n\tFILENAME = &setsymtab(\"FILENAME\", \"\", 0.0, STR|DONTFREE, symtab)->sval;\n\tnfloc = setsymtab(\"NF\", \"\", 0.0, NUM, symtab);\n\tNF = &nfloc->fval;\n\tnrloc = setsymtab(\"NR\", \"\", 0.0, NUM, symtab);\n\tNR = &nrloc->fval;\n\tfnrloc = setsymtab(\"FNR\", \"\", 0.0, NUM, symtab);\n\tFNR = &fnrloc->fval;\n\tSUBSEP = &setsymtab(\"SUBSEP\", \"\\034\", 0.0, STR|DONTFREE, symtab)->sval;\n\trstartloc = setsymtab(\"RSTART\", \"\", 0.0, NUM, symtab);\n\tRSTART = &rstartloc->fval;\n\trlengthloc = setsymtab(\"RLENGTH\", \"\", 0.0, NUM, symtab);\n\tRLENGTH = &rlengthloc->fval;\n\tsymtabloc = setsymtab(\"SYMTAB\", \"\", 0.0, ARR, symtab);\n\tsymtabloc->sval = (char *) symtab;\n}\n\nvoid arginit(int ac, char **av)\t/* set up ARGV and ARGC */\n{\n\tCell *cp;\n\tint i;\n\tchar temp[50];\n\n\tARGC = &setsymtab(\"ARGC\", \"\", (Awkfloat) ac, NUM, symtab)->fval;\n\tcp = setsymtab(\"ARGV\", \"\", 0.0, ARR, symtab);\n\tARGVtab = makesymtab(NSYMTAB);\t/* could be (int) ARGC as well */\n\tcp->sval = (char *) ARGVtab;\n\tfor (i = 0; i < ac; i++) {\n\t\tsprintf(temp, \"%d\", i);\n\t\tif (is_number(*av))\n\t\t\tsetsymtab(temp, *av, atof(*av), STR|NUM, ARGVtab);\n\t\telse\n\t\t\tsetsymtab(temp, *av, 0.0, STR, ARGVtab);\n\t\tav++;\n\t}\n}\n\nvoid envinit(char **envp)\t/* set up ENVIRON variable */\n{\n\tCell *cp;\n\tchar *p;\n\n\tcp = setsymtab(\"ENVIRON\", \"\", 0.0, ARR, symtab);\n\tENVtab = makesymtab(NSYMTAB);\n\tcp->sval = (char *) ENVtab;\n\tfor ( ; *envp; envp++) {\n\t\tif ((p = strchr(*envp, '=')) == NULL)\n\t\t\tcontinue;\n\t\tif( p == *envp ) /* no left hand side name in env string */\n\t\t\tcontinue;\n\t\t*p++ = 0;\t/* split into two strings at = */\n\t\tif (is_number(p))\n\t\t\tsetsymtab(*envp, p, atof(p), STR|NUM, ENVtab);\n\t\telse\n\t\t\tsetsymtab(*envp, p, 0.0, STR, ENVtab);\n\t\tp[-1] = '=';\t/* restore in case env is passed down to a shell */\n\t}\n}\n\nArray *makesymtab(int n)\t/* make a new symbol table */\n{\n\tArray *ap;\n\tCell **tp;\n\n\tap = (Array *) malloc(sizeof(Array));\n\ttp = (Cell **) calloc(n, sizeof(Cell *));\n\tif (ap == NULL || tp == NULL)\n\t\tFATAL(\"out of space in makesymtab\");\n\tap->nelem = 0;\n\tap->size = n;\n\tap->tab = tp;\n\treturn(ap);\n}\n\nvoid freesymtab(Cell *ap)\t/* free a symbol table */\n{\n\tCell *cp, *temp;\n\tArray *tp;\n\tint i;\n\n\tif (!isarr(ap))\n\t\treturn;\n\ttp = (Array *) ap->sval;\n\tif (tp == NULL)\n\t\treturn;\n\tfor (i = 0; i < tp->size; i++) {\n\t\tfor (cp = tp->tab[i]; cp != NULL; cp = temp) {\n\t\t\txfree(cp->nval);\n\t\t\tif (freeable(cp))\n\t\t\t\txfree(cp->sval);\n\t\t\ttemp = cp->cnext;\t/* avoids freeing then using */\n\t\t\tfree(cp); \n\t\t\ttp->nelem--;\n\t\t}\n\t\ttp->tab[i] = 0;\n\t}\n\tif (tp->nelem != 0)\n\t\tWARNING(\"can't happen: inconsistent element count freeing %s\", ap->nval);\n\tfree(tp->tab);\n\tfree(tp);\n}\n\nvoid freeelem(Cell *ap, const char *s)\t/* free elem s from ap (i.e., ap[\"s\"] */\n{\n\tArray *tp;\n\tCell *p, *prev = NULL;\n\tint h;\n\t\n\ttp = (Array *) ap->sval;\n\th = hash(s, tp->size);\n\tfor (p = tp->tab[h]; p != NULL; prev = p, p = p->cnext)\n\t\tif (strcmp(s, p->nval) == 0) {\n\t\t\tif (prev == NULL)\t/* 1st one */\n\t\t\t\ttp->tab[h] = p->cnext;\n\t\t\telse\t\t\t/* middle somewhere */\n\t\t\t\tprev->cnext = p->cnext;\n\t\t\tif (freeable(p))\n\t\t\t\txfree(p->sval);\n\t\t\tfree(p->nval);\n\t\t\tfree(p);\n\t\t\ttp->nelem--;\n\t\t\treturn;\n\t\t}\n}\n\nCell *setsymtab(const char *n, const char *s, Awkfloat f, unsigned t, Array *tp)\n{\n\tint h;\n\tCell *p;\n\n\tif (n != NULL && (p = lookup(n, tp)) != NULL) {\n\t\t   dprintf( (\"setsymtab found %p: n=%s s=\\\"%s\\\" f=%g t=%o\\n\",\n\t\t\tp, NN(p->nval), NN(p->sval), p->fval, p->tval) );\n\t\treturn(p);\n\t}\n\tp = (Cell *) malloc(sizeof(Cell));\n\tif (p == NULL)\n\t\tFATAL(\"out of space for symbol table at %s\", n);\n\tp->nval = tostring(n);\n\tp->sval = s ? tostring(s) : tostring(\"\");\n\tp->fval = f;\n\tp->tval = t;\n\tp->csub = CUNK;\n\tp->ctype = OCELL;\n\ttp->nelem++;\n\tif (tp->nelem > FULLTAB * tp->size)\n\t\trehash(tp);\n\th = hash(n, tp->size);\n\tp->cnext = tp->tab[h];\n\ttp->tab[h] = p;\n\t   dprintf( (\"setsymtab set %p: n=%s s=\\\"%s\\\" f=%g t=%o\\n\",\n\t\tp, p->nval, p->sval, p->fval, p->tval) );\n\treturn(p);\n}\n\nint hash(const char *s, int n)\t/* form hash value for string s */\n{\n\tunsigned hashval;\n\n\tfor (hashval = 0; *s != '\\0'; s++)\n\t\thashval = (*s + 31 * hashval);\n\treturn hashval % n;\n}\n\nvoid rehash(Array *tp)\t/* rehash items in small table into big one */\n{\n\tint i, nh, nsz;\n\tCell *cp, *op, **np;\n\n\tnsz = GROWTAB * tp->size;\n\tnp = (Cell **) calloc(nsz, sizeof(Cell *));\n\tif (np == NULL)\t\t/* can't do it, but can keep running. */\n\t\treturn;\t\t/* someone else will run out later. */\n\tfor (i = 0; i < tp->size; i++) {\n\t\tfor (cp = tp->tab[i]; cp; cp = op) {\n\t\t\top = cp->cnext;\n\t\t\tnh = hash(cp->nval, nsz);\n\t\t\tcp->cnext = np[nh];\n\t\t\tnp[nh] = cp;\n\t\t}\n\t}\n\tfree(tp->tab);\n\ttp->tab = np;\n\ttp->size = nsz;\n}\n\nCell *lookup(const char *s, Array *tp)\t/* look for s in tp */\n{\n\tCell *p;\n\tint h;\n\n\th = hash(s, tp->size);\n\tfor (p = tp->tab[h]; p != NULL; p = p->cnext)\n\t\tif (strcmp(s, p->nval) == 0)\n\t\t\treturn(p);\t/* found it */\n\treturn(NULL);\t\t\t/* not found */\n}\n\nAwkfloat setfval(Cell *vp, Awkfloat f)\t/* set float val of a Cell */\n{\n\tint fldno;\n\n\tif ((vp->tval & (NUM | STR)) == 0) \n\t\tfunnyvar(vp, \"assign to\");\n\tif (isfld(vp)) {\n\t\tdonerec = 0;\t/* mark $0 invalid */\n\t\tfldno = atoi(vp->nval);\n\t\tif (fldno > *NF)\n\t\t\tnewfld(fldno);\n\t\t   dprintf( (\"setting field %d to %g\\n\", fldno, f) );\n\t} else if (isrec(vp)) {\n\t\tdonefld = 0;\t/* mark $1... invalid */\n\t\tdonerec = 1;\n\t}\n\tif (freeable(vp))\n\t\txfree(vp->sval); /* free any previous string */\n\tvp->tval &= ~STR;\t/* mark string invalid */\n\tvp->tval |= NUM;\t/* mark number ok */\n\t   dprintf( (\"setfval %p: %s = %g, t=%o\\n\", vp, NN(vp->nval), f, vp->tval) );\n\treturn vp->fval = f;\n}\n\nvoid funnyvar(Cell *vp, const char *rw)\n{\n\tif (isarr(vp))\n\t\tFATAL(\"can't %s %s; it's an array name.\", rw, vp->nval);\n\tif (vp->tval & FCN)\n\t\tFATAL(\"can't %s %s; it's a function.\", rw, vp->nval);\n\tWARNING(\"funny variable %p: n=%s s=\\\"%s\\\" f=%g t=%o\",\n\t\tvp, vp->nval, vp->sval, vp->fval, vp->tval);\n}\n\nchar *setsval(Cell *vp, const char *s)\t/* set string val of a Cell */\n{\n\tchar *t;\n\tint fldno;\n\n\t   dprintf( (\"starting setsval %p: %s = \\\"%s\\\", t=%o, r,f=%d,%d\\n\", \n\t\tvp, NN(vp->nval), s, vp->tval, donerec, donefld) );\n\tif ((vp->tval & (NUM | STR)) == 0)\n\t\tfunnyvar(vp, \"assign to\");\n\tif (isfld(vp)) {\n\t\tdonerec = 0;\t/* mark $0 invalid */\n\t\tfldno = atoi(vp->nval);\n\t\tif (fldno > *NF)\n\t\t\tnewfld(fldno);\n\t\t   dprintf( (\"setting field %d to %s (%p)\\n\", fldno, s, s) );\n\t} else if (isrec(vp)) {\n\t\tdonefld = 0;\t/* mark $1... invalid */\n\t\tdonerec = 1;\n\t}\n\tt = tostring(s);\t/* in case it's self-assign */\n\tif (freeable(vp))\n\t\txfree(vp->sval);\n\tvp->tval &= ~NUM;\n\tvp->tval |= STR;\n\tvp->tval &= ~DONTFREE;\n\t   dprintf( (\"setsval %p: %s = \\\"%s (%p) \\\", t=%o r,f=%d,%d\\n\", \n\t\tvp, NN(vp->nval), t,t, vp->tval, donerec, donefld) );\n\treturn(vp->sval = t);\n}\n\nAwkfloat getfval(Cell *vp)\t/* get float val of a Cell */\n{\n\tif ((vp->tval & (NUM | STR)) == 0)\n\t\tfunnyvar(vp, \"read value of\");\n\tif (isfld(vp) && donefld == 0)\n\t\tfldbld();\n\telse if (isrec(vp) && donerec == 0)\n\t\trecbld();\n\tif (!isnum(vp)) {\t/* not a number */\n\t\tvp->fval = atof(vp->sval);\t/* best guess */\n\t\tif (is_number(vp->sval) && !(vp->tval&CON))\n\t\t\tvp->tval |= NUM;\t/* make NUM only sparingly */\n\t}\n\t   dprintf( (\"getfval %p: %s = %g, t=%o\\n\", vp, NN(vp->nval), vp->fval, vp->tval) );\n\treturn(vp->fval);\n}\n\nstatic char *get_str_val(Cell *vp, char **fmt)        /* get string val of a Cell */\n{\n\tchar s[100];\t/* BUG: unchecked */\n\tdouble dtemp;\n\n\tif ((vp->tval & (NUM | STR)) == 0)\n\t\tfunnyvar(vp, \"read value of\");\n\tif (isfld(vp) && donefld == 0)\n\t\tfldbld();\n\telse if (isrec(vp) && donerec == 0)\n\t\trecbld();\n\tif (isstr(vp) == 0) {\n\t\tif (freeable(vp))\n\t\t\txfree(vp->sval);\n\t\tif (modf(vp->fval, &dtemp) == 0)\t/* it's integral */\n\t\t\tsprintf(s, \"%.30g\", vp->fval);\n\t\telse\n\t\t\tsprintf(s, *fmt, vp->fval);\n\t\tvp->sval = tostring(s);\n\t\tvp->tval &= ~DONTFREE;\n\t\tvp->tval |= STR;\n\t}\n\t   dprintf( (\"getsval %p: %s = \\\"%s (%p)\\\", t=%o\\n\", vp, NN(vp->nval), vp->sval, vp->sval, vp->tval) );\n\treturn(vp->sval);\n}\n\nchar *getsval(Cell *vp)       /* get string val of a Cell */\n{\n      return get_str_val(vp, CONVFMT);\n}\n\nchar *getpssval(Cell *vp)     /* get string val of a Cell for print */\n{\n      return get_str_val(vp, OFMT);\n}\n\n\nchar *tostring(const char *s)\t/* make a copy of string s */\n{\n\tchar *p;\n\n\tp = (char *) malloc(strlen(s)+1);\n\tif (p == NULL)\n\t\tFATAL(\"out of space in tostring on %s\", s);\n\tstrcpy(p, s);\n\treturn(p);\n}\n\nchar *qstring(const char *is, int delim)\t/* collect string up to next delim */\n{\n\tconst char *os = is;\n\tint c, n;\n\tuschar *s = (uschar *) is;\n\tuschar *buf, *bp;\n\n\tif ((buf = (uschar *) malloc(strlen(is)+3)) == NULL)\n\t\tFATAL( \"out of space in qstring(%s)\", s);\n\tfor (bp = buf; (c = *s) != delim; s++) {\n\t\tif (c == '\\n')\n\t\t\tSYNTAX( \"newline in string %.20s...\", os );\n\t\telse if (c != '\\\\')\n\t\t\t*bp++ = c;\n\t\telse {\t/* \\something */\n\t\t\tc = *++s;\n\t\t\tif (c == 0) {\t/* \\ at end */\n\t\t\t\t*bp++ = '\\\\';\n\t\t\t\tbreak;\t/* for loop */\n\t\t\t}\t\n\t\t\tswitch (c) {\n\t\t\tcase '\\\\':\t*bp++ = '\\\\'; break;\n\t\t\tcase 'n':\t*bp++ = '\\n'; break;\n\t\t\tcase 't':\t*bp++ = '\\t'; break;\n\t\t\tcase 'b':\t*bp++ = '\\b'; break;\n\t\t\tcase 'f':\t*bp++ = '\\f'; break;\n\t\t\tcase 'r':\t*bp++ = '\\r'; break;\n\t\t\tdefault:\n\t\t\t\tif (!isdigit(c)) {\n\t\t\t\t\t*bp++ = c;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tn = c - '0';\n\t\t\t\tif (isdigit(s[1])) {\n\t\t\t\t\tn = 8 * n + *++s - '0';\n\t\t\t\t\tif (isdigit(s[1]))\n\t\t\t\t\t\tn = 8 * n + *++s - '0';\n\t\t\t\t}\n\t\t\t\t*bp++ = n;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t*bp++ = 0;\n\treturn (char *) buf;\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-depends/GNUmakefile",
    "content": "# Copyright (C) 2013, 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# The following variables can be over-ridden by the caller\nCC        := gcc\nCXX       := g++\nSTRIP     := strip\nBUILD_DIR := /tmp/ndk-$(USER)/build/build-ndk-depends\nPROGNAME  := /tmp/ndk-$(USER)/ndk-depends\n\nEXECUTABLE := $(PROGNAME)\n\nall: $(EXECUTABLE)\n\n# The rest should be left alone\nEXTRA_CFLAGS := -Wall -Werror -fno-exceptions -fno-rtti\nEXTRA_LDFLAGS := -lstdc++\n\nifneq (,$(strip $(DEBUG)))\n  CFLAGS += -O0 -g\n  hide = @\n  strip-cmd =\nelse\n  CFLAGS += -O2\n  hide =\n  strip-cmd = $(STRIP) $1\nendif\n\nSOURCES := ndk-depends.cc\n\nOBJECTS=\n\ndefine build-c-object\nOBJECTS += $1\n$1: $2\n\tmkdir -p $$(dir $1)\n\t$$(CC) $$(CFLAGS) $$(EXTRA_CFLAGS) -c -o $1 $2\nendef\n\ndefine build-cxx-object\nOBJECTS += $1\n$1: $2\n\tmkdir -p $$(dir $1)\n\t$$(CXX) $$(CFLAGS) $$(EXTRA_CFLAGS) -c -o $1 $2\nendef\n\n$(foreach src,$(filter %.c,$(SOURCES)),\\\n    $(eval $(call build-c-object,$(BUILD_DIR)/$(src:%.c=%.o),$(src)))\\\n)\n\n$(foreach src,$(filter %.cc,$(SOURCES)),\\\n    $(eval $(call build-cxx-object,$(BUILD_DIR)/$(src:%.cc=%.o),$(src)))\\\n)\n\nclean:\n\trm -f $(EXECUTABLE)\n\n$(EXECUTABLE): $(OBJECTS)\n\t$(CXX) $(LDFLAGS) $(OBJECTS) -o $@ $(EXTRA_LDFLAGS)\n\t$(call strip-cmd,$@)\n"
  },
  {
    "path": "sources/host-tools/ndk-depends/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "sources/host-tools/ndk-depends/build-ndk-depends.sh",
    "content": "#!/bin/sh\n#\n# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to rebuild the host 'ndk-depends' tool.\n#\n# Note: The tool is installed under prebuilt/$HOST_TAG/bin/ndk-depends\n#       by default.\n#\nPROGDIR=$(dirname $0)\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to rebuild the host ndk-depends binary program.\"\n\nregister_jobs_option\n\nOPTION_BUILD_DIR=\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Specify build directory\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Place binary in NDK installation path\"\n\nGNUMAKE=\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program\"\n\nDEBUG=\nregister_var_option \"--debug\" DEBUG \"Build debug version\"\n\nSRC_DIR=\nregister_var_option \"--src-dir=<path>\" SRC_DIR \"Specify binutils source dir.  Must be set for --with-libbfd\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\nprepare_abi_configure_build\nprepare_host_build\n\n# Choose a build directory if not specified by --build-dir\nif [ -z \"$BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-ndk-depends\n    log \"Auto-config: --build-dir=$BUILD_DIR\"\nelse\n    OPTION_BUILD_DIR=\"yes\"\nfi\n\nrm -rf $BUILD_DIR\nmkdir -p $BUILD_DIR\n\nprepare_canadian_toolchain $BUILD_DIR\n\nCFLAGS=$HOST_CFLAGS\" -O2 -s -ffunction-sections -fdata-sections\"\nLDFLAGS=$HOST_LDFLAGS\nEXTRA_CONFIG=\n\nif [ \"$HOST_OS\" != \"darwin\" -a \"$DARWIN\" != \"yes\" ]; then\n    LDFLAGS=$LDFLAGS\" -Wl,-gc-sections\"\nelse\n    # In darwin libbfd has to be built with some *linux* target or it won't understand ELF\n    EXTRA_CONFIG=\"-target=arm-linux-androideabi\"\nfi\n\nNAME=$(get_host_exec_name ndk-depends)\nINSTALL_ROOT=$(mktemp -d $NDK_TMPDIR/ndk-depends-XXXXXX)\nINSTALL_SUBDIR=host-tools/bin\nINSTALL_PATH=$INSTALL_ROOT/$INSTALL_SUBDIR\nOUT=$INSTALL_PATH/$NAME\nmkdir $INSTALL_PATH\n\n# GNU Make\nif [ -z \"$GNUMAKE\" ]; then\n    GNUMAKE=make\n    log \"Auto-config: --make=$GNUMAKE\"\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\n# Create output directory\nmkdir -p $(dirname $OUT)\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not create output directory: $(dirname $OUT)\"\n    exit 1\nfi\n\nSRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/ndk-depends\n\nexport CFLAGS LDFLAGS\nrun $GNUMAKE -C $SRCDIR -f $SRCDIR/GNUmakefile \\\n    -B -j$NUM_JOBS \\\n    PROGNAME=\"$OUT\" \\\n    BUILD_DIR=\"$BUILD_DIR\" \\\n    CC=\"$CC\" CXX=\"$CXX\" \\\n    STRIP=\"$STRIP\" \\\n    DEBUG=$DEBUG\n\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not build host program!\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    ARCHIVE=ndk-depends-$HOST_TAG.tar.bz2\n    dump \"Packaging: $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$INSTALL_ROOT\" \"$INSTALL_SUBDIR\"\n    fail_panic \"Could not create package: $PACKAGE_DIR/$ARCHIVE from $OUT\"\nfi\n\nif [ \"$OPTION_BUILD_DIR\" != \"yes\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "sources/host-tools/ndk-depends/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds ndk-stack.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef main(args):\n    src_dir_arg = '--src-dir={}'.format(build_support.toolchain_path())\n\n    build_cmd = [\n        'bash', 'build-ndk-depends.sh', src_dir_arg,\n    ]\n\n    if args.host in ('windows', 'windows64'):\n        build_cmd.append('--mingw')\n\n    if args.host != 'windows':\n        build_cmd.append('--try-64')\n\n    build_support.build(build_cmd, args, intermediate_package=True)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "sources/host-tools/ndk-depends/ndk-depends.cc",
    "content": "//\n// Copyright (C) 2013 The Android Open Source Project\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n//  * Redistributions of source code must retain the above copyright\n//    notice, this list of conditions and the following disclaimer.\n//  * Redistributions in binary form must reproduce the above copyright\n//    notice, this list of conditions and the following disclaimer in\n//    the documentation and/or other materials provided with the\n//    distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n// SUCH DAMAGE.\n//\n\n// A small portable program used to dump the dynamic dependencies of a\n// shared library. Requirements:\n//   - Must support both 32-bit and 64-bit ELF binaries.\n//   - Must support both little and big endian binaries.\n//   - Must be compiled as a Unicode program on Windows.\n//   - Follows Chromium coding-style guide.\n//   - Single source file to make it easier to build anywhere.\n\n//\n// Work-around Windows Unicode support.\n//\n\n// Enable Windows Unicode support by default. Override this by\n// setting WINDOWS_UNICODE at build time.\n#if !defined(WINDOWS_UNICODE) && defined(_WIN32)\n#define WINDOWS_UNICODE 1\n#endif\n\n#ifdef _WIN32\n#undef UNICODE\n#undef _UNICODE\n#ifdef WINDOWS_UNICODE\n#define UNICODE 1\n#define _UNICODE 1\n#endif\n#include <windows.h>\n#include <tchar.h>\n#else\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#endif\n\n#include <string>\n\n// Define String as a typedef for either std::string or std::wstring\n// depending on the platform.\n#if WINDOWS_UNICODE\ntypedef std::wstring String;\n#else\ntypedef std::string String;\n#endif\n\n// Use the following functions instead of their standard library equivalent.\n#if !WINDOWS_UNICODE\n#define TCHAR char\n#define _T(x) x\n#define _tgetenv   getenv\n#define _tcslen    strlen\n#define _tcschr    strchr\n#define _tcscmp    strcmp\n#define _tcsncmp   strncmp\n#define _tfopen    fopen\n#define _tprintf   printf\n#define _vftprintf vfprintf\n#define _ftprintf  fprintf\n#define _tstat     stat\n#define _vtprintf  vprintf\n#define _stat      stat\n#endif\n\n// Use TO_STRING(xxx) to convert a C-string into the equivalent String.\n#if WINDOWS_UNICODE == 1\nstatic inline std::wstring __s2ws(const std::string& s) {\n    int s_len = static_cast<int>(s.length() + 1);\n    int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), s_len, 0, 0);\n    std::wstring result(len, L'\\0');\n    MultiByteToWideChar(CP_ACP, 0, s.c_str(), s_len, &result[0], len);\n    return result;\n}\n#define TO_STRING(x) __s2ws(x)\n#else\n#define TO_STRING(x)  (x)\n#endif\n\n// Use TO_CONST_TCHAR(xxx) to convert a const char* to a const char/wchar*\n#if WINDOWS_UNICODE == 1\n#define TO_CONST_TCHAR(x) TO_STRING(x).c_str()\n#else\n#define TO_CONST_TCHAR(x)  (x)\n#endif\n\n\n//\n// Start the real program now\n//\n\n#include <errno.h>\n#ifdef __linux__\n#include <glob.h>\n#endif\n#include <limits.h>\n#include <stdarg.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <sys/stat.h>\n\n#include <algorithm>\n#include <list>\n#include <map>\n#include <string>\n#include <vector>\n\nnamespace {\n\n// Utility functions.\n\nenum {\n  MESSAGE_FLAG_PANIC = (1 << 0),\n  MESSAGE_FLAG_ERRNO = (1 << 1),\n};\n\nvoid vmessage(int flags, const TCHAR* fmt, va_list args) {\n  int old_errno = errno;\n  if (flags & MESSAGE_FLAG_PANIC)\n    fprintf(stderr, \"ERROR: \");\n\n  _vftprintf(stderr, fmt, args);\n  if (flags & MESSAGE_FLAG_ERRNO) {\n    fprintf(stderr, \": %s\", strerror(old_errno));\n  }\n  fprintf(stderr, \"\\n\");\n\n  if (flags & MESSAGE_FLAG_PANIC)\n    exit(1);\n\n  errno = old_errno;\n}\n\nvoid panic(const TCHAR* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n  vmessage(MESSAGE_FLAG_PANIC, fmt, args);\n  va_end(args);\n}\n\nint g_verbose = 0;\n\nvoid log_n(int n, const TCHAR* fmt, ...) {\n  if (g_verbose >= n) {\n    va_list args;\n    va_start(args, fmt);\n    _vtprintf(fmt, args);\n    va_end(args);\n  }\n}\n\n#define LOG_N(level,...) \\\n  ({ if (g_verbose >= (level)) log_n((level), __VA_ARGS__); })\n\n#define LOG(...)  LOG_N(1,__VA_ARGS__)\n#define LOG2(...) LOG_N(2,__VA_ARGS__)\n\n#ifndef DEBUG\n#define DEBUG 0\n#endif\n\n#if DEBUG\n#define DLOG(...) _tprintf(__VA_ARGS__)\n#else\n#define DLOG(...) ((void)0)\n#endif\n\n// Path utilites\n\n// Return the position of the last directory separator in a path,\n// or std::string::npos if none is found.\nsize_t path_last_dirsep(const String& filepath) {\n#ifdef _WIN32\n  size_t sep_slash = filepath.rfind(_T('/'));\n  size_t sep_backslash = filepath.rfind(_T('\\\\'));\n  size_t sep;\n  if (sep_slash == std::string::npos)\n    sep = sep_backslash;\n  else if (sep_backslash == std::string::npos)\n    sep = sep_slash;\n  else\n    sep = std::max(sep_slash, sep_backslash);\n#else\n  size_t sep = filepath.rfind(_T('/'));\n#endif\n  return sep;\n}\n\n// Return the directory name of a given path.\nString path_dirname(const String& filepath) {\n  size_t sep = path_last_dirsep(filepath);\n  if (sep == std::string::npos)\n    return String(_T(\".\"));\n  else if (sep == 0)\n    return String(_T(\"/\"));\n  else\n    return filepath.substr(0, sep);\n}\n\n// Return the basename of a given path.\nString path_basename(const String& filepath) {\n  size_t sep = path_last_dirsep(filepath);\n  if (sep == std::string::npos)\n    return filepath;\n  else\n    return filepath.substr(sep + 1);\n}\n\n\n// Reading utilities.\n\nuint16_t get_u16_le(const uint8_t* bytes) {\n  return static_cast<uint16_t>(bytes[0] | (bytes[1] << 8));\n}\n\nuint32_t get_u32_le(const uint8_t* bytes) {\n  return static_cast<uint32_t>(\n      bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24));\n}\n\nuint64_t get_u64_le(const uint8_t* bytes) {\n  uint64_t lo = static_cast<uint64_t>(get_u32_le(bytes));\n  uint64_t hi = static_cast<uint64_t>(get_u32_le(bytes + 4));\n  return lo | (hi << 32);\n}\n\nuint16_t get_u16_be(const uint8_t* bytes) {\n  return static_cast<uint16_t>((bytes[0] << 8) | bytes[1]);\n}\n\nuint32_t get_u32_be(const uint8_t* bytes) {\n  return static_cast<uint32_t>(\n      (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]);\n}\n\nuint64_t get_u64_be(const uint8_t* bytes) {\n  uint64_t hi = static_cast<uint64_t>(get_u32_be(bytes));\n  uint64_t lo = static_cast<uint64_t>(get_u32_be(bytes + 4));\n  return lo | (hi << 32);\n}\n\n// FileReader utility classes\n\nclass Reader {\npublic:\n  Reader() {}\n\n  virtual const uint8_t* GetBytesAt(off_t pos, size_t size) = 0;\n  virtual uint16_t GetU16At(off_t pos) = 0;\n  virtual uint32_t GetU32At(off_t pos) = 0;\n  virtual uint64_t GetU64At(off_t pos) = 0;\n\n  virtual ~Reader() {}\n};\n\nclass FileReader : public Reader {\npublic:\n  FileReader(FILE* file) : file_(file) {}\n\n  virtual const uint8_t* GetBytesAt(off_t pos, size_t size) {\n    if (size < kMaxBytes &&\n        fseek(file_, pos, SEEK_SET) == 0 &&\n        fread(buffer_, size, 1, file_) == 1) {\n      return buffer_;\n    } else\n      return NULL;\n  }\n\nprivate:\n  static const size_t kMaxBytes = 32;\n  FILE* file_;\n  uint8_t buffer_[kMaxBytes];\n};\n\nclass FileLittleEndianReader : public FileReader {\npublic:\n  FileLittleEndianReader(FILE* file) : FileReader(file) {}\n\n  virtual uint16_t GetU16At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 2);\n    return (buf != NULL) ? get_u16_le(buf) : 0;\n  }\n\n  virtual uint32_t GetU32At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 4);\n    return (buf != NULL) ? get_u32_le(buf) : 0;\n  }\n\n  virtual uint64_t GetU64At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 8);\n    return (buf != NULL) ? get_u64_le(buf) : 0ULL;\n  }\n};\n\nclass FileBigEndianReader : public FileReader {\npublic:\n  FileBigEndianReader(FILE* file) : FileReader(file) {}\n\n  virtual uint16_t GetU16At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 2);\n    return (buf != NULL) ? get_u16_be(buf) : 0;\n  }\n\n  virtual uint32_t GetU32At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 4);\n    return (buf != NULL) ? get_u32_be(buf) : 0;\n  }\n\n  virtual uint64_t GetU64At(off_t pos) {\n    const uint8_t* buf = GetBytesAt(pos, 8);\n    return (buf != NULL) ? get_u64_be(buf) : 0ULL;\n  }\n};\n\n// ELF utility functions.\n\n// The first 16 common bytes.\n#define EI_NIDENT 16\n\n#define EI_CLASS   4\n#define ELFCLASS32 1\n#define ELFCLASS64 2\n\n#define EI_DATA     5\n#define ELFDATA2LSB 1\n#define ELFDATA2MSB 2\n\nbool elf_ident_is_elf(const uint8_t* ident) {\n  return ident[0] == 0x7f &&\n         ident[1] == 'E' &&\n         ident[2] == 'L' &&\n         ident[3] == 'F';\n}\n\nbool elf_ident_is_big_endian(const uint8_t* ident) {\n  return ident[EI_DATA] == ELFDATA2MSB;\n}\n\nbool elf_ident_is_64bits(const uint8_t* ident) {\n  return ident[EI_CLASS] == ELFCLASS64;\n}\n\n#define SHT_STRTAB  3\n#define SHT_DYNAMIC 6\n\n// 32-bit ELF definitions.\n\nclass Elf32 {\npublic:\n  typedef uint16_t Half;\n  typedef uint32_t Word;\n  typedef uint32_t Off;\n  typedef uint32_t Addr;\n  typedef int32_t Sword;\n\n  struct Header {\n    uint8_t e_ident[EI_NIDENT];\n    Half    e_type;\n    Half    e_machine;\n    Word    e_version;\n    Addr    e_entry;\n    Off     e_phoff;\n    Off     e_shoff;\n    Word    e_flags;\n    Half    e_shsize;\n    Half    e_phentsize;\n    Half    e_phnum;\n    Half    e_shentsize;\n    Half    e_shnum;\n    Half    e_shstrndx;\n  };\n\n  struct Shdr {\n    Word sh_name;\n    Word sh_type;\n    Word sh_flags;\n    Addr sh_addr;\n    Off  sh_offset;\n    Word sh_size;\n    Word sh_link;\n    Word sh_info;\n    Word sh_addralign;\n    Word sh_entsize;\n  };\n};\n\nclass Elf64 {\npublic:\n  typedef uint16_t Half;\n  typedef uint64_t Off;\n  typedef uint64_t Addr;\n  typedef int32_t  Sword;\n  typedef uint32_t Word;\n  typedef uint64_t Xword;\n  typedef int64_t Sxword;\n\n  struct Header {\n    uint8_t e_ident[EI_NIDENT];\n    Half    e_type;\n    Half    e_machine;\n    Word    e_version;\n    Addr    e_entry;\n    Off     e_phoff;\n    Off     e_shoff;\n    Word    e_flags;\n    Half    e_shsize;\n    Half    e_phentsize;\n    Half    e_phnum;\n    Half    e_shentsize;\n    Half    e_shnum;\n    Half    e_shstrndx;\n  };\n\n  struct Shdr {\n    Word  sh_name;\n    Word  sh_type;\n    Xword sh_flags;\n    Addr  sh_addr;\n    Off   sh_offset;\n    Xword sh_size;\n    Word  sh_link;\n    Word  sh_info;\n    Xword sh_addralign;\n    Xword sh_entsize;\n  };\n};\n\ntemplate <class ELF>\nclass ElfParser {\npublic:\n  ElfParser(Reader& reader) : reader_(reader) {}\n\n  typedef typename ELF::Word Word;\n  typedef typename ELF::Sword Sword;\n  typedef typename ELF::Addr Addr;\n  typedef typename ELF::Off Off;\n  typedef typename ELF::Half Half;\n  typedef typename ELF::Header ElfHeader;\n  typedef typename ELF::Shdr Shdr;\n\n  // Read an ELF::Word at a given position.\n  Word GetWordAt(off_t pos) {\n    return reader_.GetU32At(pos);\n  }\n\n  // Read an ELF::Half at a given position.\n  Half GetHalfAt(off_t pos) {\n    return reader_.GetU16At(pos);\n  }\n\n  // Read an ELF::Sword at a given position.\n  Sword GetSwordAt(off_t pos) {\n    return static_cast<Sword>(GetWordAt(pos));\n  }\n\n  // Read an ELF::Addr at a given position.\n  Addr GetAddrAt(off_t pos);\n\n  // Read an ELF::Off at a given position.\n  Off GetOffAt(off_t pos) {\n    return static_cast<Off>(GetAddrAt(pos));\n  }\n\n  // Helper class to iterate over the section table.\n  class SectionIterator {\n  public:\n    explicit SectionIterator(ElfParser& parser)\n      : parser_(parser) {\n      table_offset_ = parser_.GetOffAt(offsetof(ElfHeader, e_shoff));\n      table_count_ = parser_.GetHalfAt(offsetof(ElfHeader, e_shnum));\n      table_entry_size_ = parser_.GetHalfAt(offsetof(ElfHeader, e_shentsize));\n      if (table_entry_size_ < static_cast<Half>(sizeof(Shdr))) {\n        // malformed binary. Ignore all sections.\n        table_count_ = 0;\n      }\n    }\n\n    Off NextOffset() {\n      if (table_count_ == 0)\n        return 0;\n      Off result = table_offset_;\n      table_offset_ += table_entry_size_;\n      table_count_ -= 1;\n      return result;\n    }\n\n    void Skip(int count) {\n      while (count > 0 && table_count_ > 0) {\n        table_offset_ += table_entry_size_;\n        table_count_--;\n        count--;\n      }\n    }\n\n  private:\n    ElfParser& parser_;\n    Off table_offset_;\n    Half table_count_;\n    Half table_entry_size_;\n  };\n\n  // Return the offset of the first section of a given type, or 0 if not\n  // found. |*size| will be set to the section size in bytes in case of\n  // success.\n  Off GetSectionOffsetByType(int table_type, Off* size) {\n    SectionIterator iter(*this);\n    for (;;) {\n      Off table_offset = iter.NextOffset();\n      if (table_offset == 0)\n        break;\n      Word sh_type = GetWordAt(table_offset + offsetof(Shdr, sh_type));\n      if (sh_type == static_cast<Word>(table_type)) {\n        *size = GetOffAt(table_offset + offsetof(Shdr, sh_size));\n        return GetOffAt(table_offset + offsetof(Shdr, sh_offset));\n      }\n    }\n    return 0;\n  }\n\n  // Return the index of the string table for the dynamic section\n  // in this ELF binary. Or 0 if not found.\n  int GetDynamicStringTableIndex() {\n    SectionIterator iter(*this);\n    for (;;) {\n      Off table_offset = iter.NextOffset();\n      if (table_offset == 0)\n        break;\n      Word sh_type = GetWordAt(table_offset + offsetof(Shdr, sh_type));\n      if (sh_type == SHT_DYNAMIC)\n        return GetWordAt(table_offset + offsetof(Shdr, sh_link));\n    }\n    return 0;\n  }\n\n  // Return the offset of a section identified by its index, or 0 in case\n  // of error (bad index).\n  Off GetSectionOffsetByIndex(int sec_index, Off* size) {\n    SectionIterator iter(*this);\n    iter.Skip(sec_index);\n    Off table_offset = iter.NextOffset();\n    if (table_offset != 0) {\n      *size = GetOffAt(table_offset + offsetof(Shdr, sh_size));\n      return GetOffAt(table_offset + offsetof(Shdr, sh_offset));\n    }\n    return 0;\n  }\n\n  // Return a string identified by its index and its string table\n  // Address. Returns an empty string in case of error.\n  String GetStringByIndex(Off str_index, int str_table_index) {\n    String result;\n\n    if (str_table_index != 0) {\n      Off str_table_size = 0;\n      Off str_table = GetSectionOffsetByIndex(str_table_index,\n                                              &str_table_size);\n      if (str_table != 0 && str_index < str_table_size) {\n        str_table += str_index;\n        str_table_size -= str_index;\n        while (str_table_size > 0) {\n          const uint8_t* p = reader_.GetBytesAt(str_table, 1);\n          if (p == NULL || *p == '\\0')\n            break;\n          result.append(1, static_cast<const char>(*p));\n          str_table += 1;\n          str_table_size -= 1;\n        }\n      }\n    }\n    return result;\n  }\n\nprivate:\n  Reader& reader_;\n};\n\ntemplate <>\nElf32::Addr ElfParser<Elf32>::GetAddrAt(off_t pos) {\n  return reader_.GetU32At(pos);\n}\n\ntemplate <>\nElf64::Addr ElfParser<Elf64>::GetAddrAt(off_t pos) {\n  return reader_.GetU64At(pos);\n}\n\n// Helper class to iterate over items of a given type in the dynamic\n// section. A type of 0 (SHT_NULL) means iterate over all items.\n//\n// Examples:\n//    // Iterate over all entries in the table, find the SHT_NEEDED ones.\n//    DynamicIterator<Elf32> iter(parser);\n//    while (iter.GetNext()) {\n//      if (iter.GetTag() == SHT_NEEDED) {\n//         Elf32::Off value = iter.GetValue();\n//         ...\n//      }\n//    }\ntemplate <class ELF>\nclass DynamicIterator {\npublic:\n  explicit DynamicIterator(ElfParser<ELF>& parser)\n    : parser_(parser),\n      dyn_size_(0),\n      dyn_offset_(0),\n      started_(false) {\n    dyn_offset_ = parser_.GetSectionOffsetByType(SHT_DYNAMIC, &dyn_size_);\n    started_ = (dyn_size_ < kEntrySize);\n  }\n\n  bool GetNext() {\n    if (!started_)\n      started_ = true;\n    else {\n      if (dyn_size_ < kEntrySize)\n        return false;\n      dyn_offset_ += kEntrySize;\n      dyn_size_ -= kEntrySize;\n    }\n    return true;\n  }\n\n  typename ELF::Off GetTag() {\n    return parser_.GetOffAt(dyn_offset_);\n  }\n\n  typename ELF::Off GetValue() {\n    return parser_.GetOffAt(dyn_offset_ + kTagSize);\n  }\n\nprivate:\n  typedef typename ELF::Off Off;\n  static const Off kTagSize = static_cast<Off>(sizeof(Off));\n  static const Off kValueSize = kTagSize;\n  static const Off kEntrySize = kTagSize + kValueSize;\n\n  ElfParser<ELF>& parser_;\n  Off dyn_size_;\n  Off dyn_offset_;\n  bool started_;\n};\n\n#define DT_NEEDED 1\n#define DT_SONAME 14\n\ntemplate <class ELF>\nString GetLibNameT(Reader& reader) {\n  ElfParser<ELF> parser(reader);\n  int str_table_index = parser.GetDynamicStringTableIndex();\n  DynamicIterator<ELF> iter(parser);\n  while (iter.GetNext()) {\n    if (iter.GetTag() == DT_SONAME) {\n      typename ELF::Off str_index = iter.GetValue();\n      return parser.GetStringByIndex(str_index, str_table_index);\n    }\n  }\n  return String();\n}\n\ntemplate <class ELF>\nint GetNeededLibsT(Reader& reader, std::vector<String>* result) {\n  ElfParser<ELF> parser(reader);\n  int str_table_index = parser.GetDynamicStringTableIndex();\n  DynamicIterator<ELF> iter(parser);\n  int count = 0;\n  while (iter.GetNext()) {\n    if (iter.GetTag() == DT_NEEDED) {\n      typename ELF::Off str_index = iter.GetValue();\n      String lib_name = parser.GetStringByIndex(str_index, str_table_index);\n      if (!lib_name.empty()) {\n        result->push_back(lib_name);\n        count++;\n      }\n    }\n  }\n  return count;\n}\n\nclass ElfFile {\npublic:\n  ElfFile()\n    : file_(NULL), big_endian_(false), is_64bits_(false), reader_(NULL) {}\n\n  virtual ~ElfFile() {\n    delete reader_;\n    Close();\n  }\n\n  bool Open(const TCHAR* path, String* error) {\n    Close();\n    file_ = _tfopen(path, _T(\"rb\"));\n    if (file_ == NULL) {\n      error->assign(TO_STRING(strerror(errno)));\n      return false;\n    }\n    uint8_t ident[EI_NIDENT];\n    if (fread(ident, sizeof(ident), 1, file_) != 1) {\n      error->assign(TO_STRING(strerror(errno)));\n      Close();\n      return false;\n    }\n    if (!elf_ident_is_elf(ident)) {\n      *error = _T(\"Not an ELF binary file\");\n      Close();\n      return false;\n    }\n    big_endian_ = elf_ident_is_big_endian(ident);\n    is_64bits_ = elf_ident_is_64bits(ident);\n\n    if (big_endian_) {\n      reader_ = new FileBigEndianReader(file_);\n    } else {\n      reader_ = new FileLittleEndianReader(file_);\n    }\n    return true;\n  }\n\n  bool IsOk() { return file_ != NULL; }\n\n  bool IsBigEndian() { return big_endian_; }\n\n  const Reader& GetReader() { return *reader_; };\n\n  // Returns the embedded library name, extracted from the dynamic table.\n  String GetLibName() {\n    if (is_64bits_)\n      return GetLibNameT<Elf64>(*reader_);\n    else\n      return GetLibNameT<Elf32>(*reader_);\n  }\n\n  // Gets the list of needed libraries and appends them to |result|.\n  // Returns the number of library names appended.\n  int GetNeededLibs(std::vector<String>* result) {\n    if (is_64bits_)\n      return GetNeededLibsT<Elf64>(*reader_, result);\n    else\n      return GetNeededLibsT<Elf32>(*reader_, result);\n  }\n\nprotected:\n  void Close() {\n    if (file_ != NULL) {\n      fclose(file_);\n      file_ = NULL;\n    }\n  }\n\n  FILE* file_;\n  bool big_endian_;\n  bool is_64bits_;\n  Reader* reader_;\n};\n\n#ifdef __linux__\nstatic bool IsLdSoConfSeparator(char ch) {\n  // The ldconfig manpage indicates that /etc/ld.so.conf contains a list\n  // of colon, space, tab newline or comma separated directories.\n  return (ch == ' ' || ch == '\\t' || ch == '\\r' ||\n          ch == '\\n' || ch == ',' || ch == ':');\n}\n\n// Parse the content of /etc/ld.so.conf, it contains according to the\n// documentation a 'comma, space, newline, tab separated list of\n// directories'. In practice, it can also include comments, and an\n// include directive and glob patterns, as in:\n//  'include /etc/ld.so.conf.d/*.conf'\nvoid AddHostLdSoConfPaths(const char* ld_so_conf_path,\n                          std::vector<String>* lib_search_path) {\n  FILE* file = fopen(ld_so_conf_path, \"rb\");\n  if (!file)\n    return;\n\n  char line[1024];\n  while (fgets(line, sizeof(line), file) != NULL) {\n    const char* begin = line;\n    const char* end = line + strlen(line);\n    while (end > begin && end[-1] == '\\n')\n      end--;\n\n    bool prev_is_include = false;\n    while (begin < end) {\n      // Skip over separators\n      while (begin < end && IsLdSoConfSeparator(*begin))\n        begin++;\n\n      if (begin == end || begin[0] == '#') {\n        // Skip empty lines and comments.\n        break;\n      }\n      // Find end of current item\n      const char* next_pos = begin;\n      while (next_pos < end &&\n          !IsLdSoConfSeparator(*next_pos) &&\n          *next_pos != '#')\n        next_pos++;\n\n      size_t len = static_cast<size_t>(next_pos - begin);\n      if (prev_is_include) {\n        // If previous token was an 'include', treat this as a glob\n        // pattern and try to process all matching files.\n        prev_is_include = false;\n        if (len == 0) {\n          // Ignore stand-alone 'include' in a single line.\n          break;\n        }\n        String pattern(begin, len);\n        DLOG(\"%s: processing include '%s'\\n\",\n             __FUNCTION__,\n             pattern.c_str());\n\n        glob_t the_glob;\n        memset(&the_glob, 0, sizeof(the_glob));\n        int ret = ::glob(pattern.c_str(), 0, NULL, &the_glob);\n        if (ret == 0) {\n          // Iterate / include all matching files.\n          String filepath;\n          for (size_t n = 0; n < the_glob.gl_pathc; ++n) {\n            filepath.assign(the_glob.gl_pathv[n]);\n            DLOG(\"%s: Including %s\\n\", __FUNCTION__, filepath.c_str());\n            AddHostLdSoConfPaths(filepath.c_str(), lib_search_path);\n          }\n        }\n        globfree(&the_glob);\n      } else {\n        // The previous token was not an 'include'. But is the current one?\n        static const char kInclude[] = \"include\";\n        const size_t kIncludeLen = sizeof(kInclude) - 1;\n        if (len == kIncludeLen && !memcmp(begin, kInclude, len)) {\n          prev_is_include = true;\n        } else if (len > 0) {\n          // No, it must be a directory name.\n          String dirpath(begin, len);\n          struct stat st;\n          if (::stat(dirpath.c_str(), &st) != 0) {\n            LOG(\"Could not stat(): %s: %s\\n\", dirpath.c_str(), strerror(errno));\n          } else if (!S_ISDIR(st.st_mode)) {\n            LOG(\"Not a directory: %s\\n\", dirpath.c_str());\n          } else {\n            DLOG(\"%s: Adding %s\\n\", __FUNCTION__, dirpath.c_str());\n            lib_search_path->push_back(dirpath);\n          }\n        }\n      }\n      // switch to next item in line.\n      begin = next_pos;\n    }\n  }\n  fclose(file);\n}\n#endif  // __linux__\n\n// Add host shared library search path to |lib_search_path|\nvoid AddHostLibraryPaths(std::vector<String>* lib_search_path) {\n  // Only add libraries form LD_LIBRARY_PATH on ELF-based systems.\n#if defined(__ELF__)\n  // If LD_LIBRARY_PATH is defined, process it\n  const TCHAR* env = _tgetenv(_T(\"LD_LIBRARY_PATH\"));\n  if (env != NULL) {\n    const TCHAR* pos = env;\n    while (*pos) {\n      size_t path_len;\n      const TCHAR* next_pos = _tcschr(pos, ':');\n      if (next_pos == NULL) {\n        path_len = _tcslen(pos);\n        next_pos = pos + path_len;\n      } else {\n        path_len = next_pos - pos;\n        next_pos += 1;\n      }\n\n      if (path_len == 0) {\n        // Per POSIX convention, an empty path item means \"current path\".\n        // Not that this is generally a very bad idea, security-wise.\n        lib_search_path->push_back(_T(\".\"));\n      } else {\n        lib_search_path->push_back(String(pos, path_len));\n      }\n\n      pos = next_pos;\n    }\n  }\n#ifdef __linux__\n  AddHostLdSoConfPaths(\"/etc/ld.so.conf\", lib_search_path);\n#endif\n  // TODO(digit): What about BSD systems?\n#endif\n}\n\n// Returns true if |libname| is the name of an Android system library.\nbool IsAndroidSystemLib(const String& libname) {\n  static const TCHAR* const kAndroidSystemLibs[] = {\n    _T(\"libc.so\"),\n    _T(\"libdl.so\"),\n    _T(\"liblog.so\"),\n    _T(\"libm.so\"),\n    _T(\"libstdc++.so\"),\n    _T(\"libz.so\"),\n    _T(\"libandroid.so\"),\n    _T(\"libjnigraphics.so\"),\n    _T(\"libEGL.so\"),\n    _T(\"libGLESv1_CM.so\"),\n    _T(\"libGLESv2.so\"),\n    _T(\"libOpenSLES.so\"),\n    _T(\"libOpenMAXAL.so\"),\n    NULL\n  };\n  for (size_t n = 0; kAndroidSystemLibs[n] != NULL; ++n) {\n    if (!libname.compare(kAndroidSystemLibs[n]))\n      return true;\n  }\n  return false;\n}\n\n// Returns true if |libname| is the name of an NDK-compatible shared\n// library. This means its must begin with \"lib\" and end with \"so\"\n// (without any version numbers).\nbool IsAndroidNdkCompatibleLib(const String& libname) {\n  return libname.size() > 6 &&\n         !libname.compare(0, 3, _T(\"lib\")) &&\n         !libname.compare(libname.size() - 3, 3, _T(\".so\"));\n}\n\n// Try to find a library named |libname| in |search_paths|\n// Returns true on success, and sets |result| to the full library path,\n// false otherwise.\nbool FindLibraryPath(const String& libname,\n                     const std::vector<String>& search_paths,\n                     String* result) {\n  // Check in the search paths.\n  LOG2(_T(\"  looking for library: %s\\n\"), libname.c_str());\n  for (size_t n = 0; n < search_paths.size(); ++n) {\n    String file_path = search_paths[n];\n    if (file_path.empty())\n      continue;\n    if (file_path[file_path.size() - 1] != _T('/') &&\n        file_path[file_path.size() - 1] != _T('\\\\')) {\n      file_path.append(_T(\"/\"));\n    }\n    file_path.append(libname);\n\n    LOG2(_T(\"    in %s: \"), file_path.c_str());\n    struct _stat st;\n    if (_tstat(file_path.c_str(), &st) < 0) {\n      LOG2(_T(\"%s\\n\"), TO_CONST_TCHAR(strerror(errno)));\n      continue;\n    }\n    if (!S_ISREG(st.st_mode)) {\n      LOG2(_T(\"Not a regular file!\\n\"));\n      continue;\n    }\n    // Found the library file.\n    LOG2(_T(\"OK\\n\"));\n    result->assign(file_path);\n    return true;\n  }\n\n  return false;\n}\n\n// Recursive support\n\nstruct LibNode {\n  // An enumeration listing possible node types, which are:\n  enum Type {\n    NODE_NONE,   // No type yet.\n    NODE_PATH,   // Valid ELF library, |value| is file path.\n    NODE_ERROR,  // Invalid library name, |value| is error string.\n    NODE_SYSTEM, // Android system library, |value| is library name.\n  };\n\n  Type type;\n  String value;\n  std::vector<String> needed_libs;\n\n  LibNode() : type(NODE_NONE), value(), needed_libs() {}\n\n  explicit LibNode(const String& path)\n    : type(NODE_PATH), value(path), needed_libs() {}\n\n  void Set(Type type_p, const String& value_p) {\n    type = type_p;\n    value = value_p;\n  }\n};\n\ntypedef std::map<String, LibNode> DependencyGraph;\ntypedef std::list<String> WorkQueue;\n\n// Used internally by BuildDependencyGraph().\nvoid UpdateDependencies(\n    const String& libname,\n    const String& libpath,\n    DependencyGraph& deps,\n    WorkQueue& queue) {\n  DLOG(_T(\"UPDATE libname=%s path=%s\\n\"), libname.c_str(), libpath.c_str());\n  // Sanity check: find if the library is already in the graph.\n  if (!libname.empty() && deps.find(libname) != deps.end()) {\n    // Should not happen.\n    panic(_T(\"INTERNAL: Library already in graph: %s\"), libname.c_str());\n  }\n\n  LibNode node;\n  ElfFile libfile;\n  String error;\n  String soname = libname;\n  if (!libfile.Open(libpath.c_str(), &error)) {\n    node.Set(LibNode::NODE_ERROR, error);\n  } else {\n    String soname = libfile.GetLibName();\n    if (soname.empty())\n      soname = libname;\n    else if (soname != libname) {\n      _ftprintf(stderr,\n                _T(\"WARNING: Library has invalid soname ('%s'): %s\\n\"),\n                soname.c_str(),\n                libpath.c_str());\n    }\n    // Discovered a new library, get its dependent libraries.\n    node.Set(LibNode::NODE_PATH, libpath);\n    libfile.GetNeededLibs(&node.needed_libs);\n\n    LOG(_T(\"%s depends on:\"), soname.c_str());\n\n    // Add them to the work queue.\n    for (size_t n = 0; n < node.needed_libs.size(); ++n) {\n      LOG(_T(\" %s\"), node.needed_libs[n].c_str());\n      queue.push_back(node.needed_libs[n]);\n    }\n    LOG(_T(\"\\n\"));\n  }\n  deps[soname] = node;\n}\n\n// Build the full dependency graph.\n// |root_libpath| is the path of the root library.\n// |lib_search_path| is the list of library search paths.\n// Returns a new dependency graph object.\nDependencyGraph BuildDependencyGraph(\n    const String& root_libpath,\n    const std::vector<String>& lib_search_path) {\n  DependencyGraph deps;\n  std::list<String> queue;\n\n  // As a first step, build the full dependency graph, starting with the\n  // root library. This records errors in the graph too.\n  UpdateDependencies(path_basename(root_libpath),\n                     root_libpath,\n                     deps, queue);\n\n  while (!queue.empty()) {\n    // Pop first item from queue.\n    String libname = queue.front();\n    queue.pop_front();\n\n    // Is the library already in the graph?\n    DependencyGraph::iterator iter = deps.find(libname);\n    if (iter != deps.end()) {\n      // Library already found, skip it.\n      continue;\n    }\n\n    // Find the library in the current search path.\n    String libpath;\n    if (FindLibraryPath(libname, lib_search_path, &libpath)) {\n      UpdateDependencies(libname, libpath, deps, queue);\n      continue;\n    }\n\n    if (IsAndroidSystemLib(libname)) {\n      LOG(_T(\"Android system library: %s\\n\"), libname.c_str());\n      LibNode node;\n      node.Set(LibNode::NODE_SYSTEM, libname);\n      deps[libname] = node;\n      continue;\n    }\n\n    _ftprintf(stderr,\n              _T(\"WARNING: Could not find library: %s\\n\"),\n              libname.c_str());\n    LibNode node;\n    node.Set(LibNode::NODE_ERROR, _T(\"Could not find library\"));\n    deps[libname] = node;\n  }\n\n  return deps;\n}\n\n// Print the dependency graph in a human-readable format to stdout.\nvoid DumpDependencyGraph(const DependencyGraph& deps) {\n  _tprintf(_T(\"Dependency graph:\\n\"));\n  DependencyGraph::const_iterator iter = deps.begin();\n  for ( ; iter != deps.end(); ++iter ) {\n    const String& libname = iter->first;\n    const LibNode& node = iter->second;\n    String node_type;\n    switch (node.type) {\n      case LibNode::NODE_NONE:  // should not happen.\n        node_type = _T(\"NONE??\");\n        break;\n      case LibNode::NODE_PATH:\n        node_type = _T(\"PATH\");\n        break;\n      case LibNode::NODE_ERROR:\n        node_type = _T(\"ERROR\");\n        break;\n      case LibNode::NODE_SYSTEM:\n        node_type = _T(\"SYSTEM\");\n    }\n    _tprintf(\n        _T(\"[%s] %s %s\\n\"),\n        libname.c_str(),\n        node_type.c_str(),\n        node.value.c_str());\n\n    if (node.type == LibNode::NODE_PATH) {\n      for (size_t n = 0; n < node.needed_libs.size(); ++n) {\n        _tprintf(_T(\"    %s\\n\"), node.needed_libs[n].c_str());\n      }\n    }\n  }\n}\n\n// Return the sorted list of libraries from a dependency graph.\n// They are topologically ordered, i.e. a library appears always\n// before any other library it depends on.\nvoid GetTopologicalSortedLibraries(\n    DependencyGraph& deps,\n    std::vector<String>* result) {\n  result->clear();\n  // First: Compute the number of visitors per library in the graph.\n  typedef std::map<String, int> VisitorMap;\n  VisitorMap visitors;\n  for (DependencyGraph::const_iterator iter = deps.begin();\n      iter != deps.end();\n      ++iter) {\n    if (visitors.find(iter->first) == visitors.end()) {\n      visitors[iter->first] = 0;\n    }\n\n    const std::vector<String>& needed_libs = iter->second.needed_libs;\n    for (size_t n = 0; n < needed_libs.size(); ++n) {\n      const String& libname = needed_libs[n];\n      VisitorMap::iterator lib_iter = visitors.find(libname);\n      if (lib_iter != visitors.end())\n        lib_iter->second += 1;\n      else\n        visitors[libname] = 1;\n    }\n  }\n\n#if DEBUG\n  {\n    VisitorMap::const_iterator iter_end = visitors.end();\n    VisitorMap::const_iterator iter = visitors.begin();\n    for ( ; iter != iter_end; ++iter ) {\n      _tprintf(_T(\"-- %s %d\\n\"), iter->first.c_str(), iter->second);\n    }\n  }\n#endif\n\n  while (!visitors.empty()) {\n    // Find the library with the smallest number of visitors.\n    // The value should be 0, unless there are circular dependencies.\n    VisitorMap::const_iterator iter_end = visitors.end();\n    VisitorMap::const_iterator iter;\n    int min_visitors = INT_MAX;\n    String min_libname;\n    for (iter = visitors.begin(); iter != iter_end; ++iter) {\n      // Note: Uses <= instead of < to ensure better diagnostics in\n      // case of circular dependencies. This shall return the latest\n      // node in the cycle, i.e. the first one where a 'back' edge\n      // exists.\n      if (iter->second <= min_visitors) {\n        min_libname = iter->first;\n        min_visitors = iter->second;\n      }\n    }\n\n    if (min_visitors == INT_MAX) {\n      // Should not happen.\n      panic(_T(\"INTERNAL: Could not find minimum visited node!\"));\n    }\n\n    // min_visitors should be 0, unless there are circular dependencies.\n    if (min_visitors != 0) {\n      // Warn about circular dependencies\n      _ftprintf(stderr,\n                _T(\"WARNING: Circular dependency found from: %s\\n\"),\n                min_libname.c_str());\n    }\n\n    // Remove minimum node from the graph, and decrement the visitor\n    // count of all its needed libraries. This also breaks dependency\n    // cycles.\n    result->push_back(min_libname);\n    const LibNode& node = deps[min_libname];\n    const std::vector<String> needed_libs = node.needed_libs;\n    visitors.erase(min_libname);\n\n    for (size_t n = 0; n < needed_libs.size(); ++n)\n      visitors[needed_libs[n]]--;\n  }\n}\n\n// Main function\n\n#define PROGNAME \"ndk-depends\"\n\nvoid print_usage(int exit_code) {\n  printf(\n    \"Usage: %s [options] <elf-file>\\n\\n\"\n\n    \"This program is used to print the dependencies of a given ELF\\n\"\n    \"binary (shared library or executable). It supports any architecture,\\n\"\n    \"endianess and bitness.\\n\\n\"\n\n    \"By default, all dependencies are printed in topological order,\\n\"\n    \"which means that each item always appear before other items\\n\"\n    \"it depends on. Except in case of circular dependencies, which will\\n\"\n    \"print a warning to stderr.\\n\\n\"\n\n    \"The tool will try to find other libraries in the same directory\\n\"\n    \"as the input ELF file. It is possible however to provide\\n\"\n    \"additional search paths with the -L<path>, which adds an explicit path\\n\"\n    \"or --host-libs which adds host-specific library paths, on ELF-based systems\\n\"\n    \"only.\\n\\n\"\n\n    \"Use --print-paths to print the path of each ELF binary.\\n\\n\"\n\n    \"Use --print-direct to only print the direct dependencies\\n\"\n    \"of the input ELF binary. All other options except --verbose will be ignored.\\n\\n\"\n\n    \"Use --print-java to print a Java source fragment that loads the\\n\"\n    \"libraries with System.loadLibrary() in the correct order. This can\\n\"\n    \"be useful when copied into your application's Java source code.\\n\\n\"\n\n    \"Use --print-dot to print the dependency graph as a .dot file that can be\\n\"\n    \"parsed by the GraphViz tool. For example, to generate a PNG image of the\\n\"\n    \"graph, use something like:\\n\\n\"\n\n    \"  ndk-depends /path/to/libfoo.so --print-dot | dot -Tpng -o /tmp/graph.png\\n\\n\"\n\n    \"The --verbose option prints debugging information, which can be useful\\n\"\n    \"to diagnose problems with malformed ELF binaries.\\n\\n\"\n\n    \"Valid options:\\n\"\n    \"  --help|-h|-?    Print this message.\\n\"\n    \"  --verbose       Increase verbosity.\\n\"\n    \"  --print-direct  Only print direct dependencies.\\n\"\n    \"  -L<path>        Append <path> to the library search path.\\n\"\n    \"  --host-libs     Append host library search path.\\n\"\n    \"  --print-paths   Print full paths of all libraries.\\n\"\n    \"  --print-java    Print Java library load sequence.\\n\"\n    \"  --print-dot     Print the dependency graph as a Graphviz .dot file.\\n\"\n    \"\\n\", PROGNAME);\n\n  exit(exit_code);\n}\n\n}  // namespace\n\n\n#ifdef _WIN32\nint main(void) {\n  int argc = 0;\n  TCHAR** argv = CommandLineToArgvW(GetCommandLine(), &argc);\n#else\nint main(int argc, const char** argv) {\n#endif\n\n  enum PrintFormat {\n    PRINT_DEFAULT = 0,\n    PRINT_DIRECT,\n    PRINT_PATHS,\n    PRINT_JAVA,\n    PRINT_DOT_FILE,\n  };\n\n  bool do_help = false;\n  PrintFormat print_format = PRINT_DEFAULT;\n  std::vector<String> lib_search_path;\n  std::vector<String> params;\n\n  // Process options.\n  while (argc > 1) {\n    if (argv[1][0] == _T('-')) {\n      const TCHAR* arg = argv[1];\n      if (!_tcscmp(arg, _T(\"--help\")) ||\n          !_tcscmp(arg, _T(\"-h\")) ||\n          !_tcscmp(arg, _T(\"-?\")))\n        do_help = true;\n      else if (!_tcscmp(arg, _T(\"--print-direct\"))) {\n        print_format = PRINT_DIRECT;\n      } else if (!_tcscmp(arg, _T(\"-L\"))) {\n        if (argc < 3)\n          panic(_T(\"Option -L requires an argument.\"));\n        lib_search_path.push_back(String(argv[2]));\n        argc--;\n        argv++;\n      } else if (!_tcsncmp(arg, _T(\"-L\"), 2)) {\n        lib_search_path.push_back(String(arg+2));\n      } else if (!_tcscmp(arg, _T(\"--host-libs\"))) {\n        AddHostLibraryPaths(&lib_search_path);\n      } else if (!_tcscmp(arg, _T(\"--print-java\"))) {\n        print_format = PRINT_JAVA;\n      } else if (!_tcscmp(arg, _T(\"--print-paths\"))) {\n        print_format = PRINT_PATHS;\n      } else if (!_tcscmp(arg, _T(\"--print-dot\"))) {\n        print_format = PRINT_DOT_FILE;\n      } else if (!_tcscmp(arg, _T(\"--verbose\"))) {\n        g_verbose++;\n      } else {\n        panic(_T(\"Unsupported option '%s', see --help.\"), arg);\n      }\n    } else {\n      params.push_back(String(argv[1]));\n    }\n    argc--;\n    argv++;\n  }\n\n  if (do_help)\n    print_usage(0);\n\n  if (params.empty())\n    panic(_T(\"Please provide the path of an ELF shared library or executable.\"\n             \"\\nSee --help for usage details.\"));\n\n  // Insert ELF file directory at the head of the search path.\n  lib_search_path.insert(lib_search_path.begin(), path_dirname(params[0]));\n\n  if (g_verbose >= 1) {\n    _tprintf(_T(\"Current library search path:\\n\"));\n    for (size_t n = 0; n < lib_search_path.size(); ++n)\n      _tprintf(_T(\"  %s\\n\"), lib_search_path[n].c_str());\n    _tprintf(_T(\"\\n\"));\n  }\n\n  // Open main input file.\n  const TCHAR* libfile_path = params[0].c_str();\n\n  ElfFile libfile;\n  String error;\n  if (!libfile.Open(libfile_path, &error)) {\n    panic(_T(\"Could not open file '%s': %s\"), libfile_path, error.c_str());\n  }\n\n  if (print_format == PRINT_DIRECT) {\n    // Simple dump, one line per dependency. No frills, no recursion.\n    std::vector<String> needed_libs;\n    libfile.GetNeededLibs(&needed_libs);\n\n    for (size_t i = 0; i < needed_libs.size(); ++i)\n      _tprintf(_T(\"%s\\n\"), needed_libs[i].c_str());\n\n    return 0;\n  }\n\n  // Topological sort of all dependencies.\n  LOG(_T(\"Building dependency graph...\\n\"));\n  DependencyGraph deps = BuildDependencyGraph(\n      libfile_path, lib_search_path);\n\n  if (g_verbose >= 2)\n    DumpDependencyGraph(deps);\n\n  LOG(_T(\"Building sorted list of binaries:\\n\"));\n  std::vector<String> needed_libs;\n  GetTopologicalSortedLibraries(deps, &needed_libs);\n\n  if (print_format == PRINT_JAVA) {\n    // Print Java libraries in reverse order.\n    std::reverse(needed_libs.begin(), needed_libs.end());\n    for (size_t i = 0; i < needed_libs.size(); ++i) {\n      const String& lib = needed_libs[i];\n      if (IsAndroidSystemLib(lib)) {\n        // Skip system libraries.\n        continue;\n      }\n      if (!IsAndroidNdkCompatibleLib(lib)) {\n        _ftprintf(\n            stderr,\n            _T(\"WARNING: Non-compatible library name ignored: %s\\n\"),\n            lib.c_str());\n        continue;\n      }\n      _tprintf(_T(\"System.loadLibrary(%s);\\n\"),\n                lib.substr(3, lib.size() - 6).c_str());\n    }\n    return 0;\n  }\n\n  if (print_format == PRINT_DOT_FILE) {\n    // Using the topological order helps generates a more human-friendly\n    // directed graph.\n    _tprintf(_T(\"digraph {\\n\"));\n    for (size_t i = 0; i < needed_libs.size(); ++i) {\n      const String& libname = needed_libs[i];\n      const std::vector<String>& libdeps = deps[libname].needed_libs;\n      for (size_t n = 0; n < libdeps.size(); ++n) {\n        // Note: Use quoting to deal with special characters like -\n        // which are not normally part of DOT 'id' tokens.\n        _tprintf(_T(\"  \\\"%s\\\" -> \\\"%s\\\"\\n\"), libname.c_str(), libdeps[n].c_str());\n      }\n    }\n    _tprintf(_T(\"}\\n\"));\n    return 0;\n  }\n\n  if (print_format == PRINT_PATHS) {\n    // Print libraries with path.\n    for (size_t i = 0; i < needed_libs.size(); ++i) {\n      const String& lib = needed_libs[i];\n      LibNode& node = deps[lib];\n      const TCHAR* format;\n      switch (node.type) {\n        case LibNode::NODE_PATH:\n          format = _T(\"%s -> %s\\n\");\n          break;\n        case LibNode::NODE_SYSTEM:\n          format = _T(\"%s -> $ /system/lib/%s\\n\");\n          break;\n        default:\n          format = _T(\"%s -> !! %s\\n\");\n      }\n      _tprintf(format, lib.c_str(), deps[lib].value.c_str());\n    }\n    return 0;\n  }\n\n  // Print simple library names.\n  for (size_t i = 0; i < needed_libs.size(); ++i) {\n    const String& lib = needed_libs[i];\n    _tprintf(_T(\"%s\\n\"), lib.c_str());\n  }\n  return 0;\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/GNUmakefile",
    "content": "# Copyright (C) 2011 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# The following variables can be over-ridden by the caller\nCC        := gcc\nCXX       := g++\nSTRIP     := strip\nBUILD_DIR := /tmp/ndk-$(USER)/build/build-ndk-stack\nPROGNAME  := /tmp/ndk-$(USER)/ndk-stack\n\nEXECUTABLE := $(PROGNAME)\n\nall: $(EXECUTABLE)\n\n# The rest should be left alone\nEXTRA_CFLAGS := -Wall\nEXTRA_LDFLAGS := -lstdc++\n\nifneq (,$(strip $(DEBUG)))\n  CFLAGS += -O0 -g\n  hide = @\n  strip-cmd =\nelse\n  CFLAGS += -O2 -s\n  hide =\n  strip-cmd = $(STRIP) $1\nendif\n\nBINUTILS_SOURCES := binutils/addr2line.c\n\nREGEX_SOURCES := regex/regcomp.c \\\n                 regex/regerror.c \\\n                 regex/regexec.c \\\n                 regex/regfree.c\n\nNDK_STACK_SOURCES := ndk-stack.c \\\n                     ndk-stack-parser.c\n\nSOURCES := $(NDK_STACK_SOURCES) $(BINUTILS_SOURCES) $(REGEX_SOURCES)\n\nOBJECTS=\n\ndefine build-c-object\nOBJECTS += $1\n$1: $2\n\tmkdir -p $$(dir $1)\n\t$$(CC) $$(CFLAGS) $$(EXTRA_CFLAGS) -c -o $1 $2\nendef\n\ndefine build-cxx-object\nOBJECTS += $1\n$1: $2\n\tmkdir -p $$(dir $1)\n\t$$(CXX) $$(CFLAGS) $$(EXTRA_CFLAGS) -c -o $1 $2\nendef\n\n$(foreach src,$(filter %.c,$(SOURCES)),\\\n    $(eval $(call build-c-object,$(BUILD_DIR)/$(src:%.c=%.o),$(src)))\\\n)\n\n$(foreach src,$(filter %.cc,$(SOURCES)),\\\n    $(eval $(call build-cxx-object,$(BUILD_DIR)/$(src:%.cc=%.o),$(src)))\\\n)\n\nclean:\n\trm -f $(EXECUTABLE)\n\n$(EXECUTABLE): $(OBJECTS)\n\t$(CXX) $(OBJECTS) $(LDFLAGS) -o $@ $(EXTRA_LDFLAGS)\n\t$(call strip-cmd,$@)\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/NOTICE",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year  name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/binutils/COPYING3",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/binutils/addr2line.c",
    "content": "/* addr2line.c -- convert addresses to line number and function name\n   Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,\n   2007, 2009  Free Software Foundation, Inc.\n   Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de>\n\n   This file is part of GNU Binutils.\n\n   This program 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 3, or (at your option)\n   any later version.\n\n   This program is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n   GNU General Public License for more details.\n\n   You should have received a copy of the GNU General Public License\n   along with this program; if not, write to the Free Software\n   Foundation, 51 Franklin Street - Fifth Floor, Boston,\n   MA 02110-1301, USA.  */\n\n\n/* Derived from objdump.c and nm.c by Ulrich.Lauther@mchp.siemens.de\n\n   Usage:\n   addr2line [options] addr addr ...\n   or\n   addr2line [options]\n\n   both forms write results to stdout, the second form reads addresses\n   to be converted from stdin.  */\n\n#include \"sysdep.h\"\n#include \"bfd.h\"\n#include \"getopt.h\"\n#include \"libiberty.h\"\n#include \"demangle.h\"\n#include \"bucomm.h\"\n#include \"elf-bfd.h\"\n\nstatic bfd_boolean unwind_inlines;\t/* -i, unwind inlined functions. */\nstatic bfd_boolean with_addresses;\t/* -a, show addresses.  */\nstatic bfd_boolean with_functions;\t/* -f, show function names.  */\nstatic bfd_boolean do_demangle;\t\t/* -C, demangle names.  */\nstatic bfd_boolean pretty_print;\t/* -p, print on one line.  */\nstatic bfd_boolean base_names;\t\t/* -s, strip directory names.  */\n\nstatic int naddr;\t\t/* Number of addresses to process.  */\nstatic char **addr;\t\t/* Hex addresses to process.  */\n\nstatic asymbol **syms;\t\t/* Symbol table.  */\n\nstatic struct option long_options[] =\n{\n  {\"addresses\", no_argument, NULL, 'a'},\n  {\"basenames\", no_argument, NULL, 's'},\n  {\"demangle\", optional_argument, NULL, 'C'},\n  {\"exe\", required_argument, NULL, 'e'},\n  {\"functions\", no_argument, NULL, 'f'},\n  {\"inlines\", no_argument, NULL, 'i'},\n  {\"pretty-print\", no_argument, NULL, 'p'},\n  {\"section\", required_argument, NULL, 'j'},\n  {\"target\", required_argument, NULL, 'b'},\n  {\"help\", no_argument, NULL, 'H'},\n  {\"version\", no_argument, NULL, 'V'},\n  {0, no_argument, 0, 0}\n};\n\nstatic void usage (FILE *, int);\nstatic void slurp_symtab (bfd *);\nstatic void find_address_in_section (bfd *, asection *, void *);\nstatic void find_offset_in_section (bfd *, asection *);\nstatic void translate_addresses (bfd *, asection *);\n\f\n/* Print a usage message to STREAM and exit with STATUS.  */\n\nstatic void\nusage (FILE *stream, int status)\n{\n  fprintf (stream, _(\"Usage: %s [option(s)] [addr(s)]\\n\"), program_name);\n  fprintf (stream, _(\" Convert addresses into line number/file name pairs.\\n\"));\n  fprintf (stream, _(\" If no addresses are specified on the command line, they will be read from stdin\\n\"));\n  fprintf (stream, _(\" The options are:\\n\\\n  @<file>                Read options from <file>\\n\\\n  -a --addresses         Show addresses\\n\\\n  -b --target=<bfdname>  Set the binary file format\\n\\\n  -e --exe=<executable>  Set the input file name (default is a.out)\\n\\\n  -i --inlines           Unwind inlined functions\\n\\\n  -j --section=<name>    Read section-relative offsets instead of addresses\\n\\\n  -p --pretty-print      Make the output easier to read for humans\\n\\\n  -s --basenames         Strip directory names\\n\\\n  -f --functions         Show function names\\n\\\n  -C --demangle[=style]  Demangle function names\\n\\\n  -h --help              Display this information\\n\\\n  -v --version           Display the program's version\\n\\\n\\n\"));\n\n  list_supported_targets (program_name, stream);\n  if (REPORT_BUGS_TO[0] && status == 0)\n    fprintf (stream, _(\"Report bugs to %s\\n\"), REPORT_BUGS_TO);\n  exit (status);\n}\n\f\n/* Read in the symbol table.  */\n\nstatic void\nslurp_symtab (bfd *abfd)\n{\n  long storage;\n  long symcount;\n  bfd_boolean dynamic = FALSE;\n\n  if ((bfd_get_file_flags (abfd) & HAS_SYMS) == 0)\n    return;\n\n  storage = bfd_get_symtab_upper_bound (abfd);\n  if (storage == 0)\n    {\n      storage = bfd_get_dynamic_symtab_upper_bound (abfd);\n      dynamic = TRUE;\n    }\n  if (storage < 0)\n    bfd_fatal (bfd_get_filename (abfd));\n\n  syms = (asymbol **) xmalloc (storage);\n  if (dynamic)\n    symcount = bfd_canonicalize_dynamic_symtab (abfd, syms);\n  else\n    symcount = bfd_canonicalize_symtab (abfd, syms);\n  if (symcount < 0)\n    bfd_fatal (bfd_get_filename (abfd));\n}\n\f\n/* These global variables are used to pass information between\n   translate_addresses and find_address_in_section.  */\n\nstatic bfd_vma pc;\nstatic const char *filename;\nstatic const char *functionname;\nstatic unsigned int line;\nstatic unsigned int discriminator;\nstatic bfd_boolean found;\n\n/* Look for an address in a section.  This is called via\n   bfd_map_over_sections.  */\n\nstatic void\nfind_address_in_section (bfd *abfd, asection *section,\n\t\t\t void *data ATTRIBUTE_UNUSED)\n{\n  bfd_vma vma;\n  bfd_size_type size;\n\n  if (found)\n    return;\n\n  if ((bfd_get_section_flags (abfd, section) & SEC_ALLOC) == 0)\n    return;\n\n  vma = bfd_get_section_vma (abfd, section);\n  if (pc < vma)\n    return;\n\n  size = bfd_get_section_size (section);\n  if (pc >= vma + size)\n    return;\n\n  found = bfd_find_nearest_line_discriminator (abfd, section, syms, pc - vma,\n                                               &filename, &functionname,\n                                               &line, &discriminator);\n}\n\n/* Look for an offset in a section.  This is directly called.  */\n\nstatic void\nfind_offset_in_section (bfd *abfd, asection *section)\n{\n  bfd_size_type size;\n\n  if (found)\n    return;\n\n  if ((bfd_get_section_flags (abfd, section) & SEC_ALLOC) == 0)\n    return;\n\n  size = bfd_get_section_size (section);\n  if (pc >= size)\n    return;\n\n  found = bfd_find_nearest_line_discriminator (abfd, section, syms, pc,\n                                               &filename, &functionname,\n                                               &line, &discriminator);\n}\n\n/* Read hexadecimal addresses from stdin, translate into\n   file_name:line_number and optionally function name.  */\n\nstatic void\ntranslate_addresses (bfd *abfd, asection *section)\n{\n  int read_stdin = (naddr == 0);\n\n  for (;;)\n    {\n      if (read_stdin)\n\t{\n\t  char addr_hex[100];\n\n\t  if (fgets (addr_hex, sizeof addr_hex, stdin) == NULL)\n\t    break;\n\t  pc = bfd_scan_vma (addr_hex, NULL, 16);\n\t}\n      else\n\t{\n\t  if (naddr <= 0)\n\t    break;\n\t  --naddr;\n\t  pc = bfd_scan_vma (*addr++, NULL, 16);\n\t}\n\n      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)\n\t{\n\t  const struct elf_backend_data *bed = get_elf_backend_data (abfd);\n\t  bfd_vma sign = (bfd_vma) 1 << (bed->s->arch_size - 1);\n\n\t  pc &= (sign << 1) - 1;\n\t  if (bed->sign_extend_vma)\n\t    pc = (pc ^ sign) - sign;\n\t}\n\n      if (with_addresses)\n        {\n          printf (\"0x\");\n          bfd_printf_vma (abfd, pc);\n\n          if (pretty_print)\n            printf (\": \");\n          else\n            printf (\"\\n\");\n        }\n\n      found = FALSE;\n      if (section)\n\tfind_offset_in_section (abfd, section);\n      else\n\tbfd_map_over_sections (abfd, find_address_in_section, NULL);\n\n      if (! found)\n\t{\n\t  if (with_functions)\n\t    printf (\"??\\n\");\n\t  printf (\"??:0\\n\");\n\t}\n      else\n\t{\n\t  while (1)\n            {\n              if (with_functions)\n                {\n                  const char *name;\n                  char *alloc = NULL;\n\n                  name = functionname;\n                  if (name == NULL || *name == '\\0')\n                    name = \"??\";\n                  else if (do_demangle)\n                    {\n                      alloc = bfd_demangle (abfd, name, DMGL_ANSI | DMGL_PARAMS);\n                      if (alloc != NULL)\n                        name = alloc;\n                    }\n\n                  printf (\"%s\", name);\n                  if (pretty_print)\n\t\t    /* Note for translators:  This printf is used to join the\n\t\t       function name just printed above to the line number/\n\t\t       file name pair that is about to be printed below.  Eg:\n\n\t\t         foo at 123:bar.c  */\n                    printf (_(\" at \"));\n                  else\n                    printf (\"\\n\");\n\n                  if (alloc != NULL)\n                    free (alloc);\n                }\n\n              if (base_names && filename != NULL)\n                {\n                  char *h;\n\n                  h = strrchr (filename, '/');\n                  if (h != NULL)\n                    filename = h + 1;\n                }\n\n              printf (\"%s:\", filename ? filename : \"??\");\n\t      if (line != 0)\n                {\n                  if (discriminator != 0)\n                    printf (\"%u (discriminator %u)\\n\", line, discriminator);\n                  else\n                    printf (\"%u\\n\", line);\n                }\n\t      else\n\t\tprintf (\"?\\n\");\n              if (!unwind_inlines)\n                found = FALSE;\n              else\n                found = bfd_find_inliner_info (abfd, &filename, &functionname,\n\t\t\t\t\t       &line);\n              if (! found)\n                break;\n              if (pretty_print)\n\t\t/* Note for translators: This printf is used to join the\n\t\t   line number/file name pair that has just been printed with\n\t\t   the line number/file name pair that is going to be printed\n\t\t   by the next iteration of the while loop.  Eg:\n\n\t\t     123:bar.c (inlined by) 456:main.c  */\n                printf (_(\" (inlined by) \"));\n            }\n\t}\n\n      /* fflush() is essential for using this command as a server\n         child process that reads addresses from a pipe and responds\n         with line number information, processing one address at a\n         time.  */\n      fflush (stdout);\n    }\n}\n\n/* Process a file.  Returns an exit value for main().  */\n\nstatic int\nprocess_file (const char *file_name, const char *section_name,\n\t      const char *target)\n{\n  bfd *abfd;\n  asection *section;\n  char **matching;\n\n  if (get_file_size (file_name) < 1)\n    return 1;\n\n  abfd = bfd_openr (file_name, target);\n  if (abfd == NULL)\n    bfd_fatal (file_name);\n\n  /* Decompress sections.  */\n  abfd->flags |= BFD_DECOMPRESS;\n\n  if (bfd_check_format (abfd, bfd_archive))\n    fatal (_(\"%s: cannot get addresses from archive\"), file_name);\n\n  if (! bfd_check_format_matches (abfd, bfd_object, &matching))\n    {\n      bfd_nonfatal (bfd_get_filename (abfd));\n      if (bfd_get_error () == bfd_error_file_ambiguously_recognized)\n\t{\n\t  list_matching_formats (matching);\n\t  free (matching);\n\t}\n      xexit (1);\n    }\n\n  if (section_name != NULL)\n    {\n      section = bfd_get_section_by_name (abfd, section_name);\n      if (section == NULL)\n\tfatal (_(\"%s: cannot find section %s\"), file_name, section_name);\n    }\n  else\n    section = NULL;\n\n  slurp_symtab (abfd);\n\n  translate_addresses (abfd, section);\n\n  if (syms != NULL)\n    {\n      free (syms);\n      syms = NULL;\n    }\n\n  bfd_close (abfd);\n\n  return 0;\n}\n\f\nint\naddr2line_main (int argc, char **argv) // Android changed.\n{\n  const char *file_name;\n  const char *section_name;\n  char *target;\n  int c;\n\n#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)\n  setlocale (LC_MESSAGES, \"\");\n#endif\n#if defined (HAVE_SETLOCALE)\n  setlocale (LC_CTYPE, \"\");\n#endif\n  bindtextdomain (PACKAGE, LOCALEDIR);\n  textdomain (PACKAGE);\n\n  program_name = *argv;\n  xmalloc_set_program_name (program_name);\n\n  expandargv (&argc, &argv);\n\n  bfd_init ();\n  set_default_bfd_target ();\n\n  file_name = NULL;\n  section_name = NULL;\n  target = NULL;\n  optind = 1; /* make getopt_* reentrant */\n  while ((c = getopt_long (argc, argv, \"ab:Ce:sfHhij:pVv\", long_options, (int *) 0))\n\t != EOF)\n    {\n      switch (c)\n\t{\n\tcase 0:\n\t  break;\t\t/* We've been given a long option.  */\n\tcase 'a':\n\t  with_addresses = TRUE;\n\t  break;\n\tcase 'b':\n\t  target = optarg;\n\t  break;\n\tcase 'C':\n\t  do_demangle = TRUE;\n\t  if (optarg != NULL)\n\t    {\n\t      enum demangling_styles style;\n\n\t      style = cplus_demangle_name_to_style (optarg);\n\t      if (style == unknown_demangling)\n\t\tfatal (_(\"unknown demangling style `%s'\"),\n\t\t       optarg);\n\n\t      cplus_demangle_set_style (style);\n\t    }\n\t  break;\n\tcase 'e':\n\t  file_name = optarg;\n\t  break;\n\tcase 's':\n\t  base_names = TRUE;\n\t  break;\n\tcase 'f':\n\t  with_functions = TRUE;\n\t  break;\n        case 'p':\n          pretty_print = TRUE;\n          break;\n\tcase 'v':\n\tcase 'V':\n\t  print_version (\"addr2line\");\n\t  break;\n\tcase 'h':\n\tcase 'H':\n\t  usage (stdout, 0);\n\t  break;\n\tcase 'i':\n\t  unwind_inlines = TRUE;\n\t  break;\n\tcase 'j':\n\t  section_name = optarg;\n\t  break;\n\tdefault:\n\t  usage (stderr, 1);\n\t  break;\n\t}\n    }\n\n  if (file_name == NULL)\n    file_name = \"a.out\";\n\n  addr = argv + optind;\n  naddr = argc - optind;\n\n  return process_file (file_name, section_name, target);\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/build-ndk-stack.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This script is used to rebuild the host 'ndk-stack' tool.\n#\n# Note: The tool is installed under prebuilt/$HOST_TAG/bin/ndk-stack\n#       by default.\n#\nPROGDIR=$(dirname $0)\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n\nPROGRAM_PARAMETERS=\"\"\nPROGRAM_DESCRIPTION=\\\n\"This script is used to rebuild the host ndk-stack binary program.\"\n\nregister_jobs_option\n\nOPTION_BUILD_DIR=\nBUILD_DIR=\nregister_var_option \"--build-dir=<path>\" BUILD_DIR \"Specify build directory\"\n\nNDK_DIR=$ANDROID_NDK_ROOT\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Place binary in NDK installation path\"\n\nGNUMAKE=\nregister_var_option \"--make=<path>\" GNUMAKE \"Specify GNU Make program\"\n\nDEBUG=\nregister_var_option \"--debug\" DEBUG \"Build debug version\"\n\nSRC_DIR=\nregister_var_option \"--src-dir=<path>\" SRC_DIR \"Specify binutils source dir.  Must be set for --with-libbfd\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binary into specific directory\"\n\nregister_canadian_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\nif [ -z \"$SRC_DIR\" ]; then\n    echo \"ERROR: Missing source directory parameter. See --help for details.\"\n    exit 1\nfi\n\n#\n# Try cached package\n#\nset_cache_host_tag\nARCHIVE=$PROGNAME-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\nprepare_abi_configure_build\nprepare_host_build\n\n# Choose a build directory if not specified by --build-dir\nif [ -z \"$BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-ndk-stack\n    log \"Auto-config: --build-dir=$BUILD_DIR\"\nelse\n    OPTION_BUILD_DIR=\"yes\"\nfi\n\nrm -rf $BUILD_DIR\nmkdir -p $BUILD_DIR\n\nprepare_canadian_toolchain $BUILD_DIR\n\nCFLAGS=$HOST_CFLAGS\" -O2 -s -ffunction-sections -fdata-sections\"\nLDFLAGS=$HOST_LDFLAGS\nEXTRA_CONFIG=\n\nif [ \"$HOST_OS\" != \"darwin\" -a \"$DARWIN\" != \"yes\" ]; then\n    LDFLAGS=$LDFLAGS\" -Wl,-gc-sections\"\nelse\n    # In darwin libbfd has to be built with some *linux* target or it won't understand ELF\n    # Disable -Werror because binutils uses deprecated functions (e.g. sbrk).\n    EXTRA_CONFIG=\"-target=arm-linux-androideabi --disable-werror\"\nfi\n\nBINUTILS_BUILD_DIR=$BUILD_DIR/binutils\nBINUTILS_SRC_DIR=$SRC_DIR/binutils/binutils-$DEFAULT_BINUTILS_VERSION\n\n# build binutils first\nif [ -z \"$ABI_CONFIGURE_HOST\" ]; then\n    ABI_CONFIGURE_HOST=$ABI_CONFIGURE_BUILD\nfi\nrun mkdir -p $BINUTILS_BUILD_DIR\nrun export CC CFLAGS LDFLAGS\nrun cd $BINUTILS_BUILD_DIR && \\\nrun $BINUTILS_SRC_DIR/configure \\\n    --host=$ABI_CONFIGURE_HOST \\\n    --build=$ABI_CONFIGURE_BUILD \\\n    --disable-nls \\\n    --with-bug-report-url=$DEFAULT_ISSUE_TRACKER_URL \\\n$EXTRA_CONFIG\nfail_panic \"Can't configure $BINUTILS_SRC_DIR\"\nrun make -j$NUM_JOBS\nfail_panic \"Can't build $BINUTILS_SRC_DIR\"\n\nNAME=$(get_host_exec_name ndk-stack)\nINSTALL_ROOT=$(mktemp -d $NDK_TMPDIR/ndk-stack-XXXXXX)\nINSTALL_SUBDIR=host-tools/bin\nINSTALL_PATH=$INSTALL_ROOT/$INSTALL_SUBDIR\nOUT=$INSTALL_PATH/$NAME\nmkdir $INSTALL_PATH\n\n# GNU Make\nif [ -z \"$GNUMAKE\" ]; then\n    GNUMAKE=make\n    log \"Auto-config: --make=$GNUMAKE\"\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    mkdir -p \"$PACKAGE_DIR\"\n    fail_panic \"Could not create package directory: $PACKAGE_DIR\"\nfi\n\n# Create output directory\nmkdir -p $(dirname $OUT)\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not create output directory: $(dirname $OUT)\"\n    exit 1\nfi\n\nSRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/ndk-stack\n\n# Let's roll\nCFLAGS=\"$CFLAGS \\\n   -DHAVE_CONFIG_H \\\n   -I$BINUTILS_BUILD_DIR/binutils \\\n   -I$BINUTILS_SRC_DIR/binutils \\\n   -I$BINUTILS_BUILD_DIR/bfd \\\n   -I$BINUTILS_SRC_DIR/bfd \\\n   -I$BINUTILS_SRC_DIR/include \\\n   \"\nLDFLAGS=\"$LDFLAGS \\\n   $BINUTILS_BUILD_DIR/binutils/bucomm.o \\\n   $BINUTILS_BUILD_DIR/binutils/version.o \\\n   $BINUTILS_BUILD_DIR/binutils/filemode.o \\\n   $BINUTILS_BUILD_DIR/bfd/libbfd.a \\\n   $BINUTILS_BUILD_DIR/libiberty/libiberty.a \\\n   \"\nif [ \"$MINGW\" != \"yes\" ]; then\n    LDFLAGS=\"$LDFLAGS -ldl -lz\"\nfi\n\nexport CFLAGS LDFLAGS\nrun $GNUMAKE -C $SRCDIR -f $SRCDIR/GNUmakefile \\\n    -B -j$NUM_JOBS \\\n    PROGNAME=\"$OUT\" \\\n    BUILD_DIR=\"$BUILD_DIR\" \\\n    CC=\"$CC\" CXX=\"$CXX\" \\\n    STRIP=\"$STRIP\" \\\n    DEBUG=$DEBUG\n\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not build host program!\"\n    exit 1\nfi\n\nif [ \"$PACKAGE_DIR\" ]; then\n    ARCHIVE=ndk-stack-$HOST_TAG.tar.bz2\n    dump \"Packaging: $ARCHIVE\"\n    pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$INSTALL_ROOT\" \"$INSTALL_SUBDIR\"\n    fail_panic \"Could not create package: $PACKAGE_DIR/$ARCHIVE from $OUT\"\n    cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\nif [ \"$OPTION_BUILD_DIR\" != \"yes\" ]; then\n    log \"Cleaning up...\"\n    rm -rf $BUILD_DIR\nelse\n    log \"Don't forget to cleanup: $BUILD_DIR\"\nfi\n\nlog \"Done!\"\nexit 0\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds ndk-stack.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef main(args):\n    src_dir_arg = '--src-dir={}'.format(build_support.toolchain_path())\n\n    build_cmd = [\n        'bash', 'build-ndk-stack.sh', src_dir_arg,\n    ]\n\n    if args.host in ('windows', 'windows64'):\n        build_cmd.append('--mingw')\n\n    if args.host != 'windows':\n        build_cmd.append('--try-64')\n\n    build_support.build(build_cmd, args, intermediate_package=True)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/ndk-stack-parser.c",
    "content": "/* Copyright (C) 2007-2011 The Android Open Source Project\n**\n** This software is licensed under the terms of the GNU General Public\n** License version 2, as published by the Free Software Foundation, and\n** may be copied, distributed, and modified under those terms.\n**\n** This program is distributed in the hope that it will be useful,\n** but WITHOUT ANY WARRANTY; without even the implied warranty of\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n** GNU General Public License for more details.\n*/\n\n/*\n * Contains implementation of a class DumpFile of routines that implements\n * access to a log file.\n */\n\n#include <inttypes.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include \"regex/regex.h\"\n\n#include \"ndk-stack-parser.h\"\n\n/* Enumerates states of the crash parser.\n */\ntypedef enum NDK_CRASH_PARSER_STATE {\n  /* Parser expects the beginning of the crash dump. */\n  EXPECTS_CRASH_DUMP,\n  /* Parser expects the build fingerprint, or process and thread information. */\n  EXPECTS_BUILD_FINGREPRINT_OR_PID,\n  /* Parser expects the process and thread information. */\n  EXPECTS_PID,\n  /* Parser expects the signal information, or the first crash frame. */\n  EXPECTS_SIGNAL_OR_FRAME,\n  /* Parser expects a crash frame. */\n  EXPECTS_FRAME,\n} NDK_CRASH_PARSER_STATE;\n\n/* Crash parser descriptor.\n */\nstruct NdkCrashParser {\n  /* Handle to the stream where to print the output. */\n  FILE*                 out_handle;\n\n  /* Path to the root folder where symbols are stored. */\n  char*                 sym_root;\n\n  /* Current state of the parser. */\n  NDK_CRASH_PARSER_STATE state;\n\n  /* Compiled regular expressions */\n  regex_t     re_pid_header;\n  regex_t     re_sig_header;\n  regex_t     re_frame_header;\n};\n\n/* Crash dumps begin with a string containing this substring. */\nstatic const char _crash_dump_header[] =\n  \"*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\";\n\n/* Build fingerprint contains this substring. */\nstatic const char _build_fingerprint_header[] = \"Build fingerprint:\";\n\n/* Regular expression for the process ID information line. */\nstatic const char _pid_header[] = \"pid: [0-9]+, tid: [0-9]+.*\";\n\n/* Regular expression for the signal information line. */\nstatic const char _sig_header[] = \"signal*[ \\t][0-9]+\";\n\n/* Regular expression for the frame information line. */\nstatic const char _frame_header[] = \"\\\\#[0-9]+[ |\\t]+[pc|eip]+:*[ |\\t]+([0-9a-f]{8})*\";\n\n#ifndef min\n#define min(a,b) (((a) < (b)) ? a : b)\n#endif\n\n/* Parses a line representing a crash frame.\n * This routine will try to obtain source file / line information for the\n * frame's address, and print that information to the specified output handle.\n * Param:\n *  parser - NdkCrashParser descriptor, created and initialized with a call to\n *    NdkCrashParser routine.\n *  frame - Line containing crash frame.\n * Return:\n *  0 If source file information has been found and printed, or -1 if that\n *  information was not available.\n */\nstatic int ParseFrame(NdkCrashParser* parser, const char* frame);\n\n/* Matches a string against a regular expression.\n * Param:\n *  line - String to matches against the regular expression.\n *  regex - Regular expression to match the string against.\n *  match - Upon successful match contains information about the part of the\n *    string that matches the regular expression.\n * Return:\n *  Boolean: 1 if a match has been found, or 0 if match has not been found in\n *  the string.\n */\nstatic int MatchRegex(const char* line, const regex_t* regex, regmatch_t* match);\n\n/* Returns pointer to the next separator (a space, or a tab) in the string. */\nstatic const char* next_separator(const char* str);\n\n/* Returns pointer to the next token (a character other than space, or a tab)\n * in the string.\n */\nstatic const char* next_token(const char* str);\n\n/* Gets next token from the string.\n * param:\n *  str - String where to get the next token from. Note that if string begins\n *    with a separator, this routine will return first token after that\n *    separator. If string begins with a token, this routine will return next\n *    token after that.\n *  token - Upon success contains a copy of the next token in the string.\n *  size - Size of the 'token' buffer.\n * Return:\n *  Beginning of the returned token in the string.\n */\nstatic const char* get_next_token(const char* str, char* token, size_t size);\n\n/* Return pointer to first word \"pc\", \"eip\", or \"ip\" in string \"frame\"\n * param:\n *  frame - a line from dump\n * Return:\n *  The first occurrence of \"pc\", \"eip\", or \"ip\"\n */\nstatic const char* find_pc(const char *frame);\n\nNdkCrashParser*\nCreateNdkCrashParser(FILE* out_handle, const char* sym_root)\n{\n  NdkCrashParser* parser;\n\n  parser = (NdkCrashParser*)calloc(sizeof(*parser), 1);\n  if (parser == NULL)\n      return NULL;\n\n  parser->out_handle = out_handle;\n  parser->state      = EXPECTS_CRASH_DUMP;\n\n  parser->sym_root = strdup(sym_root);\n  if (!parser->sym_root)\n      goto BAD_INIT;\n\n  if (regcomp(&parser->re_pid_header, _pid_header, REG_EXTENDED | REG_NEWLINE) ||\n      regcomp(&parser->re_sig_header, _sig_header, REG_EXTENDED | REG_NEWLINE) ||\n      regcomp(&parser->re_frame_header, _frame_header, REG_EXTENDED | REG_NEWLINE))\n      goto BAD_INIT;\n\n  return parser;\n\nBAD_INIT:\n  DestroyNdkCrashParser(parser);\n  return NULL;\n}\n\nvoid\nDestroyNdkCrashParser(NdkCrashParser* parser)\n{\n  if (parser != NULL) {\n    /* Release compiled regular expressions */\n    regfree(&parser->re_frame_header);\n    regfree(&parser->re_sig_header);\n    regfree(&parser->re_pid_header);\n    /* Release symbol path */\n    free(parser->sym_root);\n    /* Release parser itself */\n    free(parser);\n  }\n}\n\nint\nParseLine(NdkCrashParser* parser, const char* line)\n{\n  regmatch_t match;\n  int found = 0;\n\n  if (line == NULL || *line == '\\0') {\n    // Nothing to parse.\n    return 1;\n  }\n\n  // Lets see if this is the beginning of a crash dump.\n  if (strstr(line, _crash_dump_header) != NULL) {\n    if (parser->state != EXPECTS_CRASH_DUMP) {\n      // Printing another crash dump was in progress. Mark the end of it.\n      fprintf(parser->out_handle, \"Crash dump is completed\\n\\n\");\n    }\n\n    // New crash dump begins.\n    fprintf(parser->out_handle, \"********** Crash dump: **********\\n\");\n    parser->state = EXPECTS_BUILD_FINGREPRINT_OR_PID;\n\n    return 0;\n  }\n\n  switch (parser->state) {\n    case EXPECTS_BUILD_FINGREPRINT_OR_PID:\n      if (strstr(line, _build_fingerprint_header) != NULL) {\n        fprintf(parser->out_handle, \"%s\\n\",\n                strstr(line, _build_fingerprint_header));\n        parser->state = EXPECTS_PID;\n        found = 1;\n      }\n      // Let it fall through to the EXPECTS_PID, in case the dump doesn't\n      // contain build fingerprint.\n    case EXPECTS_PID:\n      if (MatchRegex(line, &parser->re_pid_header, &match)) {\n        fprintf(parser->out_handle, \"%s\\n\", line + match.rm_so);\n        parser->state = EXPECTS_SIGNAL_OR_FRAME;\n        return 0;\n      } else {\n        return !found;\n      }\n\n    case EXPECTS_SIGNAL_OR_FRAME:\n      if (MatchRegex(line, &parser->re_sig_header, &match)) {\n        fprintf(parser->out_handle, \"%s\\n\", line + match.rm_so);\n        parser->state = EXPECTS_FRAME;\n        found = 1;\n      }\n      // Let it fall through to the EXPECTS_FRAME, in case the dump doesn't\n      // contain signal fingerprint.\n    case EXPECTS_FRAME:\n      if (!MatchRegex(line, &parser->re_frame_header, &match))\n        return !found;\n      // Regex generated by x86_64-w64-mingw32 compiler erroneously match\n      // frame line with #[0-9]+ in \"stack:\" section even when the line has\n      //  no word \"pc\", \"eip\", or \"ip\" in it.\n      //\n      //   stack:\n      //      I/DEBUG   ( 1151):     #00  5f09db68  401f01c4  /system/lib/libc.so\n      //\n      // To workaround, let's double check if pc is found!\n      //\n      if (!(find_pc(line)))\n        return !found;\n\n      parser->state = EXPECTS_FRAME;\n      return ParseFrame(parser, line + match.rm_so);\n\n    default:\n      return 1;\n  }\n}\n\nstatic int\nMatchRegex(const char* line, const regex_t* regex, regmatch_t* match)\n{\n  int err = regexec(regex, line, 1, match, 0x00400/*REG_TRACE*/);\n#if 0\n  char rerr[4096];\n  if (err) {\n    regerror(err, regex, rerr, sizeof(rerr));\n    fprintf(stderr, \"regexec(%s, %s) has failed: %s\\n\", line, regex, rerr);\n  }\n#endif\n\n  return err == 0;\n}\n\nstatic const char*\nnext_separator(const char* str)\n{\n  return str + strcspn(str, \" \\t\");\n}\n\nstatic const char*\nnext_token(const char* str)\n{\n  str = next_separator(str);\n  return str + strspn(str, \" \\t\");\n}\n\nstatic const char*\nget_next_token(const char* str, char* token, size_t size)\n{\n  const char* start = next_token(str);\n  const char* end = next_separator(start);\n  if (start != end) {\n    const size_t to_copy = min((size_t)(end - start), (size - 1));\n    memcpy(token, start, to_copy);\n    token[to_copy] = '\\0';\n    return start;\n  } else {\n    return NULL;\n  }\n}\n\nstatic const char *\nfind_pc(const char *frame)\n{\n  const char *pcstrs[] = { \"pc\", \"eip\", \"ip\" };\n  int i;\n  for (i=0; i<sizeof(pcstrs)/sizeof(pcstrs[0]); i++) {\n    const char *p = strstr(frame, pcstrs[i]);\n    // check it's a word, not part of filename or something\n    if (p && p!=frame) {\n      char l = p[-1];\n      char r = p[strlen(pcstrs[i])];\n      if ((l==' ' || l=='\\t') && (r==' ' || r=='\\t'))\n        return p;\n    }\n  }\n  return NULL;\n}\n\nint\nParseFrame(NdkCrashParser* parser, const char* frame)\n{\n  uint64_t address;\n  const char* wrk;\n  char* eptr;\n  char pc_address[17];\n  char module_path[2048];\n  char* module_name;\n  char sym_file[2048];\n  const int ac = 5;\n  char *av[ac];\n  FILE *f;\n\n  fprintf(parser->out_handle, \"Stack frame %s\", frame);\n\n  // Advance to the instruction pointer token.\n  if ((wrk=find_pc(frame)) == NULL) {\n    fprintf(parser->out_handle,\n            \"Parser is unable to locate instruction pointer token.\\n\");\n    return -1;\n  }\n\n  // Next token after the instruction pointer token is its address.\n  wrk = get_next_token(wrk, pc_address, sizeof(pc_address));\n  // PC address is a hex value. Get it.\n  eptr = pc_address + strlen(pc_address);\n  address = strtoul(pc_address, &eptr, 16);\n\n  // Next token is module path.\n  get_next_token(wrk, module_path, sizeof(module_path));\n\n  // Extract basename of module, we should not care about its path\n  // on the device.\n  module_name = strrchr(module_path,'/');\n  if (module_name == NULL)\n      module_name = module_path;\n  else {\n      module_name += 1;\n      if (*module_name == '\\0') {\n          /* Trailing slash in the module path, this should not happen */\n          /* Back-off with the full module-path */\n          module_name = module_path;\n      }\n  }\n\n  // Build path to the symbol file.\n  snprintf(sym_file, sizeof(sym_file), \"%s/%s\", parser->sym_root, module_name);\n\n  if ((f=fopen(sym_file, \"r\")) == NULL) {\n    if (errno == ENOENT) {\n        printf(\"\\n\");\n    } else {\n        printf(\": Unable to open symbol file %s. Error (%d): %s\\n\",\n                sym_file, errno, strerror(errno));\n    }\n    return -1;\n  }\n\n  // call addr2line if sym_file exist\n  extern int addr2line_main (int argc, char **argv);\n\n  av[0] = \"ndk-stack\";\n  av[1] = \"-fpC\";  // f:function, p:pretty-print, C:demangle\n  av[2] = \"-e\";    // e:exe-filename\n  av[3] = sym_file;\n  av[4] = pc_address;\n  (void)address;\n\n  printf(\": Routine \");\n  return addr2line_main(ac, av);\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/ndk-stack-parser.h",
    "content": "/* Copyright (C) 2007-2011 The Android Open Source Project\n**\n** This software is licensed under the terms of the GNU General Public\n** License version 2, as published by the Free Software Foundation, and\n** may be copied, distributed, and modified under those terms.\n**\n** This program is distributed in the hope that it will be useful,\n** but WITHOUT ANY WARRANTY; without even the implied warranty of\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n** GNU General Public License for more details.\n*/\n\n#ifndef NDK_CRASH_PARSER_H_\n#define NDK_CRASH_PARSER_H_\n\n/*\n * Contains declaration of structures and routines that are used to parse ADB\n * log output, filtering out and printing references related to the crash dump.\n */\n\n/* Crash parser descriptor. */\ntypedef struct NdkCrashParser NdkCrashParser;\n\n/* Creates and initializes NdkCrashParser descriptor.\n * Param:\n *  out_handle - Handle to the stream where to print the parser's output.\n *    Typically, the handle is is stdout.\n *  sym_root - Path to the root directory where symbols are stored. Note that\n *    symbol tree starting with that root must match the tree of execuatable\n *    modules in the device. I.e. symbols for /path/to/module must be located in\n *    <sym_root>/path/to/module\n * Return:\n *  Pointer to the initialized NdkCrashParser descriptor on success, or NULL on\n *  failure.\n */\nNdkCrashParser* CreateNdkCrashParser(FILE* out_handle, const char* sym_root);\n\n/* Destroys an NdkCrashParser descriptor.\n * Param:\n *  parser - NdkCrashParser descriptor, created and initialized with a call to\n *    NdkCrashParser routine.\n */\nvoid DestroyNdkCrashParser(NdkCrashParser* parser);\n\n/* Parses a line from the ADB log output.\n * Param:\n *  parser - NdkCrashParser descriptor, created and initialized with a call to\n *    NdkCrashParser routine.\n *  line - ADB log output line to parse. The line must be zero-terminated, and\n *    must not contain \\r, or \\n in it.\n * Return:\n *  0 If the line has been part of the crash dump.\n *  1 If the line has not been part of the crash dump.\n *  -1 If there was an error when parsing the line.\n *\n*/\nint ParseLine(NdkCrashParser* parser, const char* line);\n\n#endif  // NDK_CRASH_PARSER_H_\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/ndk-stack.c",
    "content": "/* Copyright (C) 2007-2011 The Android Open Source Project\n**\n** This software is licensed under the terms of the GNU General Public\n** License version 2, as published by the Free Software Foundation, and\n** may be copied, distributed, and modified under those terms.\n**\n** This program is distributed in the hope that it will be useful,\n** but WITHOUT ANY WARRANTY; without even the implied warranty of\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n** GNU General Public License for more details.\n*/\n\n/*\n * Contains implementation of main routine for ndk-stack utility.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n\n#include \"ndk-stack-parser.h\"\n\n/* Usage string. */\nstatic const char* _usage_str =\n\"Usage:\\n\"\n\"   ndk-stack -sym <path> [-dump <path>]\\n\\n\"\n\"      -sym  Contains full path to the root directory for symbols.\\n\"\n\"      -dump Contains full path to the file containing the crash dump.\\n\"\n\"            This is an optional parameter. If ommited, ndk-stack will\\n\"\n\"            read input data from stdin\\n\"\n\"\\n\"\n\"   See docs/NDK-STACK.html in your NDK installation tree for more details.\\n\\n\";\n\nint main(int argc, char **argv, char **envp)\n{\n    const char* dump_file = NULL;\n    const char* sym_path = NULL;\n    int use_stdin = 0;\n\n    /* Parse command line. */\n    {\n        int n;\n        for (n = 1; n < argc; n++) {\n            if (!strcmp(argv[n], \"-dump\")) {\n                n++;\n                if (n < argc) {\n                    dump_file = argv[n];\n                }\n            } else if (!strcmp(argv[n], \"-sym\")) {\n                n++;\n                if (n < argc) {\n                    sym_path = argv[n];\n                }\n            } else {\n                fprintf(stdout, \"%s\", _usage_str);\n                return -1;\n            }\n        }\n        if (sym_path == NULL) {\n            fprintf(stdout, \"%s\", _usage_str);\n            return -1;\n        }\n        if (dump_file == NULL) {\n            use_stdin = 1;\n        }\n    }\n\n    /* Create crash dump parser, open dump file, and parse it line by line. */\n    NdkCrashParser* parser = CreateNdkCrashParser(stdout, sym_path);\n    if (parser != NULL) {\n        FILE* handle = use_stdin ? stdin : fopen(dump_file, \"r\");\n        if (handle != NULL) {\n            char str[2048];\n            while (fgets(str, sizeof(str), handle)) {\n                /* ParseLine requires that there are no \\r, or \\n symbols in the\n                 * string. */\n                str[strcspn(str, \"\\r\\n\")] = '\\0';\n                ParseLine(parser, str);\n            }\n            fclose(handle);\n        } else {\n            fprintf(stderr, \"Unable to open dump file %s: %s\\n\",\n                    dump_file, strerror(errno));\n        }\n        DestroyNdkCrashParser(parser);\n    } else {\n        fprintf(stderr, \"Unable to create NDK stack parser: %s\\n\",\n                strerror(errno));\n    }\n    return 0;\n}\n\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/cclass.h",
    "content": "/*\t$OpenBSD: cclass.h,v 1.5 2003/06/02 20:18:36 millert Exp $\t*/\n\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)cclass.h\t8.3 (Berkeley) 3/20/94\n */\n\n/* character-class table */\nstatic const struct cclass {\n\tconst char *name;\n\tconst char *chars;\n\tconst char *multis;\n} cclasses[] = {\n\t{ \"alnum\",\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\\\n0123456789\",\t\t\t\t\"\"} ,\n\t{ \"alpha\",\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n\t\t\t\t\t\"\"} ,\n\t{ \"blank\",\t\" \\t\",\t\t\"\"} ,\n\t{ \"cntrl\",\t\"\\007\\b\\t\\n\\v\\f\\r\\1\\2\\3\\4\\5\\6\\16\\17\\20\\21\\22\\23\\24\\\n\\25\\26\\27\\30\\31\\32\\33\\34\\35\\36\\37\\177\",\t\"\"} ,\n\t{ \"digit\",\t\"0123456789\",\t\"\"} ,\n\t{ \"graph\",\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\\\n0123456789!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\",\n\t\t\t\t\t\"\"} ,\n\t{ \"lower\",\t\"abcdefghijklmnopqrstuvwxyz\",\n\t\t\t\t\t\"\"} ,\n\t{ \"print\",\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\\\n0123456789!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~ \",\n\t\t\t\t\t\"\"} ,\n\t{ \"punct\",\t\"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\",\n\t\t\t\t\t\"\"} ,\n\t{ \"space\",\t\"\\t\\n\\v\\f\\r \",\t\"\"} ,\n\t{ \"upper\",\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n\t\t\t\t\t\"\"} ,\n\t{ \"xdigit\",\t\"0123456789ABCDEFabcdef\",\n\t\t\t\t\t\"\"} ,\n\t{ NULL,\t\t0,\t\t\"\" }\n};\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/cname.h",
    "content": "/*\t$OpenBSD: cname.h,v 1.5 2003/06/02 20:18:36 millert Exp $\t*/\n\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)cname.h\t8.3 (Berkeley) 3/20/94\n */\n\n/* character-name table */\nstatic const struct cname {\n\tconst char *name;\n\tchar code;\n} cnames[] = {\n\t{ \"NUL\",\t\t\t'\\0' },\n\t{ \"SOH\",\t\t\t'\\001' },\n\t{ \"STX\",\t\t\t'\\002' },\n\t{ \"ETX\",\t\t\t'\\003' },\n\t{ \"EOT\",\t\t\t'\\004' },\n\t{ \"ENQ\",\t\t\t'\\005' },\n\t{ \"ACK\",\t\t\t'\\006' },\n\t{ \"BEL\",\t\t\t'\\007' },\n\t{ \"alert\",\t\t\t'\\007' },\n\t{ \"BS\",\t\t\t\t'\\010' },\n\t{ \"backspace\",\t\t\t'\\b' },\n\t{ \"HT\",\t\t\t\t'\\011' },\n\t{ \"tab\",\t\t\t'\\t' },\n\t{ \"LF\",\t\t\t\t'\\012' },\n\t{ \"newline\",\t\t\t'\\n' },\n\t{ \"VT\",\t\t\t\t'\\013' },\n\t{ \"vertical-tab\",\t\t'\\v' },\n\t{ \"FF\",\t\t\t\t'\\014' },\n\t{ \"form-feed\",\t\t\t'\\f' },\n\t{ \"CR\",\t\t\t\t'\\015' },\n\t{ \"carriage-return\",\t\t'\\r' },\n\t{ \"SO\",\t\t\t\t'\\016' },\n\t{ \"SI\",\t\t\t\t'\\017' },\n\t{ \"DLE\",\t\t\t'\\020' },\n\t{ \"DC1\",\t\t\t'\\021' },\n\t{ \"DC2\",\t\t\t'\\022' },\n\t{ \"DC3\",\t\t\t'\\023' },\n\t{ \"DC4\",\t\t\t'\\024' },\n\t{ \"NAK\",\t\t\t'\\025' },\n\t{ \"SYN\",\t\t\t'\\026' },\n\t{ \"ETB\",\t\t\t'\\027' },\n\t{ \"CAN\",\t\t\t'\\030' },\n\t{ \"EM\",\t\t\t\t'\\031' },\n\t{ \"SUB\",\t\t\t'\\032' },\n\t{ \"ESC\",\t\t\t'\\033' },\n\t{ \"IS4\",\t\t\t'\\034' },\n\t{ \"FS\",\t\t\t\t'\\034' },\n\t{ \"IS3\",\t\t\t'\\035' },\n\t{ \"GS\",\t\t\t\t'\\035' },\n\t{ \"IS2\",\t\t\t'\\036' },\n\t{ \"RS\",\t\t\t\t'\\036' },\n\t{ \"IS1\",\t\t\t'\\037' },\n\t{ \"US\",\t\t\t\t'\\037' },\n\t{ \"space\",\t\t\t' ' },\n\t{ \"exclamation-mark\",\t\t'!' },\n\t{ \"quotation-mark\",\t\t'\"' },\n\t{ \"number-sign\",\t\t'#' },\n\t{ \"dollar-sign\",\t\t'$' },\n\t{ \"percent-sign\",\t\t'%' },\n\t{ \"ampersand\",\t\t\t'&' },\n\t{ \"apostrophe\",\t\t\t'\\'' },\n\t{ \"left-parenthesis\",\t\t'(' },\n\t{ \"right-parenthesis\",\t\t')' },\n\t{ \"asterisk\",\t\t\t'*' },\n\t{ \"plus-sign\",\t\t\t'+' },\n\t{ \"comma\",\t\t\t',' },\n\t{ \"hyphen\",\t\t\t'-' },\n\t{ \"hyphen-minus\",\t\t'-' },\n\t{ \"period\",\t\t\t'.' },\n\t{ \"full-stop\",\t\t\t'.' },\n\t{ \"slash\",\t\t\t'/' },\n\t{ \"solidus\",\t\t\t'/' },\n\t{ \"zero\",\t\t\t'0' },\n\t{ \"one\",\t\t\t'1' },\n\t{ \"two\",\t\t\t'2' },\n\t{ \"three\",\t\t\t'3' },\n\t{ \"four\",\t\t\t'4' },\n\t{ \"five\",\t\t\t'5' },\n\t{ \"six\",\t\t\t'6' },\n\t{ \"seven\",\t\t\t'7' },\n\t{ \"eight\",\t\t\t'8' },\n\t{ \"nine\",\t\t\t'9' },\n\t{ \"colon\",\t\t\t':' },\n\t{ \"semicolon\",\t\t\t';' },\n\t{ \"less-than-sign\",\t\t'<' },\n\t{ \"equals-sign\",\t\t'=' },\n\t{ \"greater-than-sign\",\t\t'>' },\n\t{ \"question-mark\",\t\t'?' },\n\t{ \"commercial-at\",\t\t'@' },\n\t{ \"left-square-bracket\",\t'[' },\n\t{ \"backslash\",\t\t\t'\\\\' },\n\t{ \"reverse-solidus\",\t\t'\\\\' },\n\t{ \"right-square-bracket\",\t']' },\n\t{ \"circumflex\",\t\t\t'^' },\n\t{ \"circumflex-accent\",\t\t'^' },\n\t{ \"underscore\",\t\t\t'_' },\n\t{ \"low-line\",\t\t\t'_' },\n\t{ \"grave-accent\",\t\t'`' },\n\t{ \"left-brace\",\t\t\t'{' },\n\t{ \"left-curly-bracket\",\t\t'{' },\n\t{ \"vertical-line\",\t\t'|' },\n\t{ \"right-brace\",\t\t'}' },\n\t{ \"right-curly-bracket\",\t'}' },\n\t{ \"tilde\",\t\t\t'~' },\n\t{ \"DEL\",\t\t\t'\\177' },\n\t{ NULL,\t\t\t\t0 }\n};\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/engine.c",
    "content": "/*\t$OpenBSD: engine.c,v 1.15 2005/08/05 13:03:00 espie Exp $\t*/\n\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)engine.c\t8.5 (Berkeley) 3/20/94\n */\n\n/*\n * The matching engine and friends.  This file is #included by regexec.c\n * after suitable #defines of a variety of macros used herein, so that\n * different state representations can be used without duplicating masses\n * of code.\n */\n\n#ifdef SNAMES\n#define\tmatcher\tsmatcher\n#define\tfast\tsfast\n#define\tslow\tsslow\n#define\tdissect\tsdissect\n#define\tbackref\tsbackref\n#define\tstep\tsstep\n#define\tprint\tsprint\n#define\tat\tsat\n#define\tmatch\tsmat\n#define\tnope\tsnope\n#endif\n#ifdef LNAMES\n#define\tmatcher\tlmatcher\n#define\tfast\tlfast\n#define\tslow\tlslow\n#define\tdissect\tldissect\n#define\tbackref\tlbackref\n#define\tstep\tlstep\n#define\tprint\tlprint\n#define\tat\tlat\n#define\tmatch\tlmat\n#define\tnope\tlnope\n#endif\n\n/* another structure passed up and down to avoid zillions of parameters */\nstruct match {\n\tstruct re_guts *g;\n\tint eflags;\n\tregmatch_t *pmatch;\t/* [nsub+1] (0 element unused) */\n\tchar *offp;\t\t/* offsets work from here */\n\tchar *beginp;\t\t/* start of string -- virtual NUL precedes */\n\tchar *endp;\t\t/* end of string -- virtual NUL here */\n\tchar *coldp;\t\t/* can be no match starting before here */\n\tchar **lastpos;\t\t/* [nplus+1] */\n\tSTATEVARS;\n\tstates st;\t\t/* current states */\n\tstates fresh;\t\t/* states for a fresh start */\n\tstates tmp;\t\t/* temporary */\n\tstates empty;\t\t/* empty set of states */\n};\n\nstatic int matcher(struct re_guts *, char *, size_t, regmatch_t[], int);\nstatic char *dissect(struct match *, char *, char *, sopno, sopno);\nstatic char *backref(struct match *, char *, char *, sopno, sopno, sopno, int);\nstatic char *fast(struct match *, char *, char *, sopno, sopno);\nstatic char *slow(struct match *, char *, char *, sopno, sopno);\nstatic states step(struct re_guts *, sopno, sopno, states, int, states);\n#define MAX_RECURSION\t100\n#define\tBOL\t(OUT+1)\n#define\tEOL\t(BOL+1)\n#define\tBOLEOL\t(BOL+2)\n#define\tNOTHING\t(BOL+3)\n#define\tBOW\t(BOL+4)\n#define\tEOW\t(BOL+5)\n#define\tCODEMAX\t(BOL+5)\t\t/* highest code used */\n#define\tNONCHAR(c)\t((c) > CHAR_MAX)\n#define\tNNONCHAR\t(CODEMAX-CHAR_MAX)\n#ifdef REDEBUG\nstatic void print(struct match *, char *, states, int, FILE *);\n#endif\n#ifdef REDEBUG\nstatic void at(struct match *, char *, char *, char *, sopno, sopno);\n#endif\n#ifdef REDEBUG\nstatic char *pchar(int);\n#endif\n\n#ifdef REDEBUG\n#define\tSP(t, s, c)\tprint(m, t, s, c, stdout)\n#define\tAT(t, p1, p2, s1, s2)\tat(m, t, p1, p2, s1, s2)\n#define\tNOTE(str)\t{ if (m->eflags&REG_TRACE) (void)printf(\"=%s\\n\", (str)); }\nstatic int nope = 0;\n#else\n#define\tSP(t, s, c)\t/* nothing */\n#define\tAT(t, p1, p2, s1, s2)\t/* nothing */\n#define\tNOTE(s)\t/* nothing */\n#endif\n\n/*\n - matcher - the actual matching engine\n */\nstatic int\t\t\t/* 0 success, REG_NOMATCH failure */\nmatcher(struct re_guts *g, char *string, size_t nmatch, regmatch_t pmatch[],\n    int eflags)\n{\n\tchar *endp;\n\tint i;\n\tstruct match mv;\n\tstruct match *m = &mv;\n\tchar *dp;\n\tconst sopno gf = g->firststate+1;\t/* +1 for OEND */\n\tconst sopno gl = g->laststate;\n\tchar *start;\n\tchar *stop;\n\n\t/* simplify the situation where possible */\n\tif (g->cflags&REG_NOSUB)\n\t\tnmatch = 0;\n\tif (eflags&REG_STARTEND) {\n\t\tstart = string + pmatch[0].rm_so;\n\t\tstop = string + pmatch[0].rm_eo;\n\t} else {\n\t\tstart = string;\n\t\tstop = start + strlen(start);\n\t}\n\tif (stop < start)\n\t\treturn(REG_INVARG);\n\n\t/* prescreening; this does wonders for this rather slow code */\n\tif (g->must != NULL) {\n\t\tfor (dp = start; dp < stop; dp++)\n\t\t\tif (*dp == g->must[0] && stop - dp >= g->mlen &&\n\t\t\t\tmemcmp(dp, g->must, (size_t)g->mlen) == 0)\n\t\t\t\tbreak;\n\t\tif (dp == stop)\t\t/* we didn't find g->must */\n\t\t\treturn(REG_NOMATCH);\n\t}\n\n\t/* match struct setup */\n\tm->g = g;\n\tm->eflags = eflags;\n\tm->pmatch = NULL;\n\tm->lastpos = NULL;\n\tm->offp = string;\n\tm->beginp = start;\n\tm->endp = (char*)stop;\n\tSTATESETUP(m, 4);\n\tSETUP(m->st);\n\tSETUP(m->fresh);\n\tSETUP(m->tmp);\n\tSETUP(m->empty);\n\tCLEAR(m->empty);\n\n\t/* this loop does only one repetition except for backrefs */\n\tfor (;;) {\n\t\tendp = fast(m, start, stop, gf, gl);\n\t\tif (endp == NULL) {\t\t/* a miss */\n\t\t\tfree(m->pmatch);\n\t\t\tfree(m->lastpos);\n\t\t\tSTATETEARDOWN(m);\n\t\t\treturn(REG_NOMATCH);\n\t\t}\n\t\tif (nmatch == 0 && !g->backrefs)\n\t\t\tbreak;\t\t/* no further info needed */\n\n\t\t/* where? */\n\t\tassert(m->coldp != NULL);\n\t\tfor (;;) {\n\t\t\tNOTE(\"finding start\");\n\t\t\tendp = slow(m, m->coldp, stop, gf, gl);\n\t\t\tif (endp != NULL)\n\t\t\t\tbreak;\n\t\t\tassert(m->coldp < m->endp);\n\t\t\tm->coldp++;\n\t\t}\n\t\tif (nmatch == 1 && !g->backrefs)\n\t\t\tbreak;\t\t/* no further info needed */\n\n\t\t/* oh my, he wants the subexpressions... */\n\t\tif (m->pmatch == NULL)\n\t\t\tm->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *\n\t\t\t\t\t\t\tsizeof(regmatch_t));\n\t\tif (m->pmatch == NULL) {\n\t\t\tSTATETEARDOWN(m);\n\t\t\treturn(REG_ESPACE);\n\t\t}\n\t\tfor (i = 1; i <= (int)m->g->nsub; i++)\n\t\t\tm->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1;\n\t\tif (!g->backrefs && !(m->eflags&REG_BACKR)) {\n\t\t\tNOTE(\"dissecting\");\n\t\t\tdp = dissect(m, m->coldp, endp, gf, gl);\n\t\t} else {\n\t\t\tif (g->nplus > 0 && m->lastpos == NULL)\n\t\t\t\tm->lastpos = (char **)malloc((g->nplus+1) *\n\t\t\t\t\t\t\tsizeof(char *));\n\t\t\tif (g->nplus > 0 && m->lastpos == NULL) {\n\t\t\t\tfree(m->pmatch);\n\t\t\t\tSTATETEARDOWN(m);\n\t\t\t\treturn(REG_ESPACE);\n\t\t\t}\n\t\t\tNOTE(\"backref dissect\");\n\t\t\tdp = backref(m, m->coldp, endp, gf, gl, (sopno)0, 0);\n\t\t}\n\t\tif (dp != NULL)\n\t\t\tbreak;\n\n\t\t/* uh-oh... we couldn't find a subexpression-level match */\n\t\tassert(g->backrefs);\t/* must be back references doing it */\n\t\tassert(g->nplus == 0 || m->lastpos != NULL);\n\t\tfor (;;) {\n\t\t\tif (dp != NULL || endp <= m->coldp)\n\t\t\t\tbreak;\t\t/* defeat */\n\t\t\tNOTE(\"backoff\");\n\t\t\tendp = slow(m, m->coldp, endp-1, gf, gl);\n\t\t\tif (endp == NULL)\n\t\t\t\tbreak;\t\t/* defeat */\n\t\t\t/* try it on a shorter possibility */\n#ifndef NDEBUG\n\t\t\tfor (i = 1; i <= m->g->nsub; i++) {\n\t\t\t\tassert(m->pmatch[i].rm_so == -1);\n\t\t\t\tassert(m->pmatch[i].rm_eo == -1);\n\t\t\t}\n#endif\n\t\t\tNOTE(\"backoff dissect\");\n\t\t\tdp = backref(m, m->coldp, endp, gf, gl, (sopno)0, 0);\n\t\t}\n\t\tassert(dp == NULL || dp == endp);\n\t\tif (dp != NULL)\t\t/* found a shorter one */\n\t\t\tbreak;\n\n\t\t/* despite initial appearances, there is no match here */\n\t\tNOTE(\"false alarm\");\n\t\tif (m->coldp == stop)\n\t\t\tbreak;\n\t\tstart = m->coldp + 1;\t/* recycle starting later */\n\t}\n\n\t/* fill in the details if requested */\n\tif (nmatch > 0) {\n\t\tpmatch[0].rm_so = m->coldp - m->offp;\n\t\tpmatch[0].rm_eo = endp - m->offp;\n\t}\n\tif (nmatch > 1) {\n\t\tassert(m->pmatch != NULL);\n\t\tfor (i = 1; i < (ssize_t)nmatch; i++)\n\t\t\tif (i <= (int)m->g->nsub)\n\t\t\t\tpmatch[i] = m->pmatch[i];\n\t\t\telse {\n\t\t\t\tpmatch[i].rm_so = -1;\n\t\t\t\tpmatch[i].rm_eo = -1;\n\t\t\t}\n\t}\n\n\tif (m->pmatch != NULL)\n\t\tfree((char *)m->pmatch);\n\tif (m->lastpos != NULL)\n\t\tfree((char *)m->lastpos);\n\tSTATETEARDOWN(m);\n\treturn(0);\n}\n\n/*\n - dissect - figure out what matched what, no back references\n */\nstatic char *\t\t\t/* == stop (success) always */\ndissect(struct match *m, char *start, char *stop, sopno startst, sopno stopst)\n{\n\tint i;\n\tsopno ss;\t/* start sop of current subRE */\n\tsopno es;\t/* end sop of current subRE */\n\tchar *sp;\t/* start of string matched by it */\n\tchar *stp;\t/* string matched by it cannot pass here */\n\tchar *rest;\t/* start of rest of string */\n\tchar *tail;\t/* string unmatched by rest of RE */\n\tsopno ssub;\t/* start sop of subsubRE */\n\tsopno esub;\t/* end sop of subsubRE */\n\tchar *ssp;\t/* start of string matched by subsubRE */\n\tchar *sep;\t/* end of string matched by subsubRE */\n\tchar *oldssp;\t/* previous ssp */\n\n\tAT(\"diss\", start, stop, startst, stopst);\n\tsp = start;\n\tfor (ss = startst; ss < stopst; ss = es) {\n\t\t/* identify end of subRE */\n\t\tes = ss;\n\t\tswitch (OP(m->g->strip[es])) {\n\t\tcase OPLUS_:\n\t\tcase OQUEST_:\n\t\t\tes += OPND(m->g->strip[es]);\n\t\t\tbreak;\n\t\tcase OCH_:\n\t\t\twhile (OP(m->g->strip[es]) != O_CH)\n\t\t\t\tes += OPND(m->g->strip[es]);\n\t\t\tbreak;\n\t\t}\n\t\tes++;\n\n\t\t/* figure out what it matched */\n\t\tswitch (OP(m->g->strip[ss])) {\n\t\tcase OEND:\n\t\t\tassert(nope);\n\t\t\tbreak;\n\t\tcase OCHAR:\n\t\t\tsp++;\n\t\t\tbreak;\n\t\tcase OBOL:\n\t\tcase OEOL:\n\t\tcase OBOW:\n\t\tcase OEOW:\n\t\t\tbreak;\n\t\tcase OANY:\n\t\tcase OANYOF:\n\t\t\tsp++;\n\t\t\tbreak;\n\t\tcase OBACK_:\n\t\tcase O_BACK:\n\t\t\tassert(nope);\n\t\t\tbreak;\n\t\t/* cases where length of match is hard to find */\n\t\tcase OQUEST_:\n\t\t\tstp = stop;\n\t\t\tfor (;;) {\n\t\t\t\t/* how long could this one be? */\n\t\t\t\trest = slow(m, sp, stp, ss, es);\n\t\t\t\tassert(rest != NULL);\t/* it did match */\n\t\t\t\t/* could the rest match the rest? */\n\t\t\t\ttail = slow(m, rest, stop, es, stopst);\n\t\t\t\tif (tail == stop)\n\t\t\t\t\tbreak;\t\t/* yes! */\n\t\t\t\t/* no -- try a shorter match for this one */\n\t\t\t\tstp = rest - 1;\n\t\t\t\tassert(stp >= sp);\t/* it did work */\n\t\t\t}\n\t\t\tssub = ss + 1;\n\t\t\tesub = es - 1;\n\t\t\t/* did innards match? */\n\t\t\tif (slow(m, sp, rest, ssub, esub) != NULL) {\n\t\t\t\tif (dissect(m, sp, rest, ssub, esub) != rest) {\n\t\t\t\t\tassert(0 && \"dissect(...) should return rest\");\n\t\t\t\t}\n\t\t\t} else\t\t/* no */\n\t\t\t\tassert(sp == rest);\n\t\t\tsp = rest;\n\t\t\tbreak;\n\t\tcase OPLUS_:\n\t\t\tstp = stop;\n\t\t\tfor (;;) {\n\t\t\t\t/* how long could this one be? */\n\t\t\t\trest = slow(m, sp, stp, ss, es);\n\t\t\t\tassert(rest != NULL);\t/* it did match */\n\t\t\t\t/* could the rest match the rest? */\n\t\t\t\ttail = slow(m, rest, stop, es, stopst);\n\t\t\t\tif (tail == stop)\n\t\t\t\t\tbreak;\t\t/* yes! */\n\t\t\t\t/* no -- try a shorter match for this one */\n\t\t\t\tstp = rest - 1;\n\t\t\t\tassert(stp >= sp);\t/* it did work */\n\t\t\t}\n\t\t\tssub = ss + 1;\n\t\t\tesub = es - 1;\n\t\t\tssp = sp;\n\t\t\toldssp = ssp;\n\t\t\tfor (;;) {\t/* find last match of innards */\n\t\t\t\tsep = slow(m, ssp, rest, ssub, esub);\n\t\t\t\tif (sep == NULL || sep == ssp)\n\t\t\t\t\tbreak;\t/* failed or matched null */\n\t\t\t\toldssp = ssp;\t/* on to next try */\n\t\t\t\tssp = sep;\n\t\t\t}\n\t\t\tif (sep == NULL) {\n\t\t\t\t/* last successful match */\n\t\t\t\tsep = ssp;\n\t\t\t\tssp = oldssp;\n\t\t\t}\n\t\t\tassert(sep == rest);\t/* must exhaust substring */\n\t\t\tassert(slow(m, ssp, sep, ssub, esub) == rest);\n\t\t\tif (dissect(m, ssp, sep, ssub, esub) != sep) {\n\t\t\t\tassert(0 && \"dissect(...) should return sep\");\n\t\t\t}\n\t\t\tsp = rest;\n\t\t\tbreak;\n\t\tcase OCH_:\n\t\t\tstp = stop;\n\t\t\tfor (;;) {\n\t\t\t\t/* how long could this one be? */\n\t\t\t\trest = slow(m, sp, stp, ss, es);\n\t\t\t\tassert(rest != NULL);\t/* it did match */\n\t\t\t\t/* could the rest match the rest? */\n\t\t\t\ttail = slow(m, rest, stop, es, stopst);\n\t\t\t\tif (tail == stop)\n\t\t\t\t\tbreak;\t\t/* yes! */\n\t\t\t\t/* no -- try a shorter match for this one */\n\t\t\t\tstp = rest - 1;\n\t\t\t\tassert(stp >= sp);\t/* it did work */\n\t\t\t}\n\t\t\tssub = ss + 1;\n\t\t\tesub = ss + OPND(m->g->strip[ss]) - 1;\n\t\t\tassert(OP(m->g->strip[esub]) == OOR1);\n\t\t\tfor (;;) {\t/* find first matching branch */\n\t\t\t\tif (slow(m, sp, rest, ssub, esub) == rest)\n\t\t\t\t\tbreak;\t/* it matched all of it */\n\t\t\t\t/* that one missed, try next one */\n\t\t\t\tassert(OP(m->g->strip[esub]) == OOR1);\n\t\t\t\tesub++;\n\t\t\t\tassert(OP(m->g->strip[esub]) == OOR2);\n\t\t\t\tssub = esub + 1;\n\t\t\t\tesub += OPND(m->g->strip[esub]);\n\t\t\t\tif (OP(m->g->strip[esub]) == OOR2)\n\t\t\t\t\tesub--;\n\t\t\t\telse\n\t\t\t\t\tassert(OP(m->g->strip[esub]) == O_CH);\n\t\t\t}\n\t\t\tif (dissect(m, sp, rest, ssub, esub) != rest) {\n\t\t\t\tassert(0 && \"dissect(...) should return rest\");\n\t\t\t}\n\t\t\tsp = rest;\n\t\t\tbreak;\n\t\tcase O_PLUS:\n\t\tcase O_QUEST:\n\t\tcase OOR1:\n\t\tcase OOR2:\n\t\tcase O_CH:\n\t\t\tassert(nope);\n\t\t\tbreak;\n\t\tcase OLPAREN:\n\t\t\ti = OPND(m->g->strip[ss]);\n\t\t\tassert(0 < i && i <= m->g->nsub);\n\t\t\tm->pmatch[i].rm_so = sp - m->offp;\n\t\t\tbreak;\n\t\tcase ORPAREN:\n\t\t\ti = OPND(m->g->strip[ss]);\n\t\t\tassert(0 < i && i <= m->g->nsub);\n\t\t\tm->pmatch[i].rm_eo = sp - m->offp;\n\t\t\tbreak;\n\t\tdefault:\t\t/* uh oh */\n\t\t\tassert(nope);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tassert(sp == stop);\n\treturn(sp);\n}\n\n/*\n - backref - figure out what matched what, figuring in back references\n */\nstatic char *\t\t\t/* == stop (success) or NULL (failure) */\nbackref(struct match *m, char *start, char *stop, sopno startst, sopno stopst,\n    sopno lev, int rec)\t\t\t/* PLUS nesting level */\n{\n\tint i;\n\tsopno ss;\t/* start sop of current subRE */\n\tchar *sp;\t/* start of string matched by it */\n\tsopno ssub;\t/* start sop of subsubRE */\n\tsopno esub;\t/* end sop of subsubRE */\n\tchar *ssp;\t/* start of string matched by subsubRE */\n\tchar *dp;\n\tsize_t len;\n\tint hard;\n\tsop s;\n\tregoff_t offsave;\n\tcset *cs;\n\n\tAT(\"back\", start, stop, startst, stopst);\n\tsp = start;\n\n\t/* get as far as we can with easy stuff */\n\thard = 0;\n\tfor (ss = startst; !hard && ss < stopst; ss++)\n\t\tswitch (OP(s = m->g->strip[ss])) {\n\t\tcase OCHAR:\n\t\t\tif (sp == stop || *sp++ != (char)OPND(s))\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase OANY:\n\t\t\tif (sp == stop)\n\t\t\t\treturn(NULL);\n\t\t\tsp++;\n\t\t\tbreak;\n\t\tcase OANYOF:\n\t\t\tcs = &m->g->sets[OPND(s)];\n\t\t\tif (sp == stop || !CHIN(cs, *sp++))\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase OBOL:\n\t\t\tif ( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||\n\t\t\t\t\t(sp < m->endp && *(sp-1) == '\\n' &&\n\t\t\t\t\t\t(m->g->cflags&REG_NEWLINE)) )\n\t\t\t\t{ /* yes */ }\n\t\t\telse\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase OEOL:\n\t\t\tif ( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||\n\t\t\t\t\t(sp < m->endp && *sp == '\\n' &&\n\t\t\t\t\t\t(m->g->cflags&REG_NEWLINE)) )\n\t\t\t\t{ /* yes */ }\n\t\t\telse\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase OBOW:\n\t\t\tif (( (sp == m->beginp && !(m->eflags&REG_NOTBOL)) ||\n\t\t\t\t\t(sp < m->endp && *(sp-1) == '\\n' &&\n\t\t\t\t\t\t(m->g->cflags&REG_NEWLINE)) ||\n\t\t\t\t\t(sp > m->beginp &&\n\t\t\t\t\t\t\t!ISWORD(*(sp-1))) ) &&\n\t\t\t\t\t(sp < m->endp && ISWORD(*sp)) )\n\t\t\t\t{ /* yes */ }\n\t\t\telse\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase OEOW:\n\t\t\tif (( (sp == m->endp && !(m->eflags&REG_NOTEOL)) ||\n\t\t\t\t\t(sp < m->endp && *sp == '\\n' &&\n\t\t\t\t\t\t(m->g->cflags&REG_NEWLINE)) ||\n\t\t\t\t\t(sp < m->endp && !ISWORD(*sp)) ) &&\n\t\t\t\t\t(sp > m->beginp && ISWORD(*(sp-1))) )\n\t\t\t\t{ /* yes */ }\n\t\t\telse\n\t\t\t\treturn(NULL);\n\t\t\tbreak;\n\t\tcase O_QUEST:\n\t\t\tbreak;\n\t\tcase OOR1:\t/* matches null but needs to skip */\n\t\t\tss++;\n\t\t\ts = m->g->strip[ss];\n\t\t\tdo {\n\t\t\t\tassert(OP(s) == OOR2);\n\t\t\t\tss += OPND(s);\n\t\t\t} while (OP(s = m->g->strip[ss]) != O_CH);\n\t\t\t/* note that the ss++ gets us past the O_CH */\n\t\t\tbreak;\n\t\tdefault:\t/* have to make a choice */\n\t\t\thard = 1;\n\t\t\tbreak;\n\t\t}\n\tif (!hard) {\t\t/* that was it! */\n\t\tif (sp != stop)\n\t\t\treturn(NULL);\n\t\treturn(sp);\n\t}\n\tss--;\t\t\t/* adjust for the for's final increment */\n\n\t/* the hard stuff */\n\tAT(\"hard\", sp, stop, ss, stopst);\n\ts = m->g->strip[ss];\n\tswitch (OP(s)) {\n\tcase OBACK_:\t\t/* the vilest depths */\n\t\ti = OPND(s);\n\t\tassert(0 < i && i <= m->g->nsub);\n\t\tif (m->pmatch[i].rm_eo == -1)\n\t\t\treturn(NULL);\n\t\tassert(m->pmatch[i].rm_so != -1);\n\t\tlen = m->pmatch[i].rm_eo - m->pmatch[i].rm_so;\n\t\tif (len == 0 && rec++ > MAX_RECURSION)\n\t\t\treturn(NULL);\n\t\tassert(stop - m->beginp >= len);\n\t\tif (sp > stop - len)\n\t\t\treturn(NULL);\t/* not enough left to match */\n\t\tssp = m->offp + m->pmatch[i].rm_so;\n\t\tif (memcmp(sp, ssp, len) != 0)\n\t\t\treturn(NULL);\n\t\twhile (m->g->strip[ss] != SOP(O_BACK, i))\n\t\t\tss++;\n\t\treturn(backref(m, sp+len, stop, ss+1, stopst, lev, rec));\n\t\tbreak;\n\tcase OQUEST_:\t\t/* to null or not */\n\t\tdp = backref(m, sp, stop, ss+1, stopst, lev, rec);\n\t\tif (dp != NULL)\n\t\t\treturn(dp);\t/* not */\n\t\treturn(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev, rec));\n\t\tbreak;\n\tcase OPLUS_:\n\t\tassert(m->lastpos != NULL);\n\t\tassert(lev+1 <= m->g->nplus);\n\t\tm->lastpos[lev+1] = sp;\n\t\treturn(backref(m, sp, stop, ss+1, stopst, lev+1, rec));\n\t\tbreak;\n\tcase O_PLUS:\n\t\tif (sp == m->lastpos[lev])\t/* last pass matched null */\n\t\t\treturn(backref(m, sp, stop, ss+1, stopst, lev-1, rec));\n\t\t/* try another pass */\n\t\tm->lastpos[lev] = sp;\n\t\tdp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev, rec);\n\t\tif (dp == NULL)\n\t\t\treturn(backref(m, sp, stop, ss+1, stopst, lev-1, rec));\n\t\telse\n\t\t\treturn(dp);\n\t\tbreak;\n\tcase OCH_:\t\t/* find the right one, if any */\n\t\tssub = ss + 1;\n\t\tesub = ss + OPND(s) - 1;\n\t\tassert(OP(m->g->strip[esub]) == OOR1);\n\t\tfor (;;) {\t/* find first matching branch */\n\t\t\tdp = backref(m, sp, stop, ssub, esub, lev, rec);\n\t\t\tif (dp != NULL)\n\t\t\t\treturn(dp);\n\t\t\t/* that one missed, try next one */\n\t\t\tif (OP(m->g->strip[esub]) == O_CH)\n\t\t\t\treturn(NULL);\t/* there is none */\n\t\t\tesub++;\n\t\t\tassert(OP(m->g->strip[esub]) == OOR2);\n\t\t\tssub = esub + 1;\n\t\t\tesub += OPND(m->g->strip[esub]);\n\t\t\tif (OP(m->g->strip[esub]) == OOR2)\n\t\t\t\tesub--;\n\t\t\telse\n\t\t\t\tassert(OP(m->g->strip[esub]) == O_CH);\n\t\t}\n\t\tbreak;\n\tcase OLPAREN:\t\t/* must undo assignment if rest fails */\n\t\ti = OPND(s);\n\t\tassert(0 < i && i <= m->g->nsub);\n\t\toffsave = m->pmatch[i].rm_so;\n\t\tm->pmatch[i].rm_so = sp - m->offp;\n\t\tdp = backref(m, sp, stop, ss+1, stopst, lev, rec);\n\t\tif (dp != NULL)\n\t\t\treturn(dp);\n\t\tm->pmatch[i].rm_so = offsave;\n\t\treturn(NULL);\n\t\tbreak;\n\tcase ORPAREN:\t\t/* must undo assignment if rest fails */\n\t\ti = OPND(s);\n\t\tassert(0 < i && i <= m->g->nsub);\n\t\toffsave = m->pmatch[i].rm_eo;\n\t\tm->pmatch[i].rm_eo = sp - m->offp;\n\t\tdp = backref(m, sp, stop, ss+1, stopst, lev, rec);\n\t\tif (dp != NULL)\n\t\t\treturn(dp);\n\t\tm->pmatch[i].rm_eo = offsave;\n\t\treturn(NULL);\n\t\tbreak;\n\tdefault:\t\t/* uh oh */\n\t\tassert(nope);\n\t\tbreak;\n\t}\n\n\t/* \"can't happen\" */\n\tassert(nope);\n\t/* NOTREACHED */\n\treturn 0;\n}\n\n/*\n - fast - step through the string at top speed\n */\nstatic char *\t\t\t/* where tentative match ended, or NULL */\nfast(struct match *m, char *start, char *stop, sopno startst, sopno stopst)\n{\n\tstates st = m->st;\n\tstates fresh = m->fresh;\n\tstates tmp = m->tmp;\n\tchar *p = start;\n\tint c = (start == m->beginp) ? OUT : *(start-1);\n\tint lastc;\t/* previous c */\n\tint flagch;\n\tint i;\n\tchar *coldp;\t/* last p after which no match was underway */\n\n\tCLEAR(st);\n\tSET1(st, startst);\n\tst = step(m->g, startst, stopst, st, NOTHING, st);\n\tASSIGN(fresh, st);\n\tSP(\"start\", st, *p);\n\tcoldp = NULL;\n\tfor (;;) {\n\t\t/* next character */\n\t\tlastc = c;\n\t\tc = (p == m->endp) ? OUT : *p;\n\t\tif (EQ(st, fresh))\n\t\t\tcoldp = p;\n\n\t\t/* is there an EOL and/or BOL between lastc and c? */\n\t\tflagch = '\\0';\n\t\ti = 0;\n\t\tif ( (lastc == '\\n' && m->g->cflags&REG_NEWLINE) ||\n\t\t\t\t(lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {\n\t\t\tflagch = BOL;\n\t\t\ti = m->g->nbol;\n\t\t}\n\t\tif ( (c == '\\n' && m->g->cflags&REG_NEWLINE) ||\n\t\t\t\t(c == OUT && !(m->eflags&REG_NOTEOL)) ) {\n\t\t\tflagch = (flagch == BOL) ? BOLEOL : EOL;\n\t\t\ti += m->g->neol;\n\t\t}\n\t\tif (i != 0) {\n\t\t\tfor (; i > 0; i--)\n\t\t\t\tst = step(m->g, startst, stopst, st, flagch, st);\n\t\t\tSP(\"boleol\", st, c);\n\t\t}\n\n\t\t/* how about a word boundary? */\n\t\tif ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&\n\t\t\t\t\t(c != OUT && ISWORD(c)) ) {\n\t\t\tflagch = BOW;\n\t\t}\n\t\tif ( (lastc != OUT && ISWORD(lastc)) &&\n\t\t\t\t(flagch == EOL || (c != OUT && !ISWORD(c))) ) {\n\t\t\tflagch = EOW;\n\t\t}\n\t\tif (flagch == BOW || flagch == EOW) {\n\t\t\tst = step(m->g, startst, stopst, st, flagch, st);\n\t\t\tSP(\"boweow\", st, c);\n\t\t}\n\n\t\t/* are we done? */\n\t\tif (ISSET(st, stopst) || p == stop)\n\t\t\tbreak;\t\t/* NOTE BREAK OUT */\n\n\t\t/* no, we must deal with this character */\n\t\tASSIGN(tmp, st);\n\t\tASSIGN(st, fresh);\n\t\tassert(c != OUT);\n\t\tst = step(m->g, startst, stopst, tmp, c, st);\n\t\tSP(\"aft\", st, c);\n\t\tassert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));\n\t\tp++;\n\t}\n\n\tassert(coldp != NULL);\n\tm->coldp = coldp;\n\tif (ISSET(st, stopst))\n\t\treturn(p+1);\n\telse\n\t\treturn(NULL);\n}\n\n/*\n - slow - step through the string more deliberately\n */\nstatic char *\t\t\t/* where it ended */\nslow(struct match *m, char *start, char *stop, sopno startst, sopno stopst)\n{\n\tstates st = m->st;\n\tstates empty = m->empty;\n\tstates tmp = m->tmp;\n\tchar *p = start;\n\tint c = (start == m->beginp) ? OUT : *(start-1);\n\tint lastc;\t/* previous c */\n\tint flagch;\n\tint i;\n\tchar *matchp;\t/* last p at which a match ended */\n\n\tAT(\"slow\", start, stop, startst, stopst);\n\tCLEAR(st);\n\tSET1(st, startst);\n\tSP(\"sstart\", st, *p);\n\tst = step(m->g, startst, stopst, st, NOTHING, st);\n\tmatchp = NULL;\n\tfor (;;) {\n\t\t/* next character */\n\t\tlastc = c;\n\t\tc = (p == m->endp) ? OUT : *p;\n\n\t\t/* is there an EOL and/or BOL between lastc and c? */\n\t\tflagch = '\\0';\n\t\ti = 0;\n\t\tif ( (lastc == '\\n' && m->g->cflags&REG_NEWLINE) ||\n\t\t\t\t(lastc == OUT && !(m->eflags&REG_NOTBOL)) ) {\n\t\t\tflagch = BOL;\n\t\t\ti = m->g->nbol;\n\t\t}\n\t\tif ( (c == '\\n' && m->g->cflags&REG_NEWLINE) ||\n\t\t\t\t(c == OUT && !(m->eflags&REG_NOTEOL)) ) {\n\t\t\tflagch = (flagch == BOL) ? BOLEOL : EOL;\n\t\t\ti += m->g->neol;\n\t\t}\n\t\tif (i != 0) {\n\t\t\tfor (; i > 0; i--)\n\t\t\t\tst = step(m->g, startst, stopst, st, flagch, st);\n\t\t\tSP(\"sboleol\", st, c);\n\t\t}\n\n\t\t/* how about a word boundary? */\n\t\tif ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) &&\n\t\t\t\t\t(c != OUT && ISWORD(c)) ) {\n\t\t\tflagch = BOW;\n\t\t}\n\t\tif ( (lastc != OUT && ISWORD(lastc)) &&\n\t\t\t\t(flagch == EOL || (c != OUT && !ISWORD(c))) ) {\n\t\t\tflagch = EOW;\n\t\t}\n\t\tif (flagch == BOW || flagch == EOW) {\n\t\t\tst = step(m->g, startst, stopst, st, flagch, st);\n\t\t\tSP(\"sboweow\", st, c);\n\t\t}\n\n\t\t/* are we done? */\n\t\tif (ISSET(st, stopst))\n\t\t\tmatchp = p;\n\t\tif (EQ(st, empty) || p == stop)\n\t\t\tbreak;\t\t/* NOTE BREAK OUT */\n\n\t\t/* no, we must deal with this character */\n\t\tASSIGN(tmp, st);\n\t\tASSIGN(st, empty);\n\t\tassert(c != OUT);\n\t\tst = step(m->g, startst, stopst, tmp, c, st);\n\t\tSP(\"saft\", st, c);\n\t\tassert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st));\n\t\tp++;\n\t}\n\n\treturn(matchp);\n}\n\n\n/*\n - step - map set of states reachable before char to set reachable after\n */\nstatic states\nstep(struct re_guts *g,\n    sopno start,\t\t/* start state within strip */\n    sopno stop,\t\t\t/* state after stop state within strip */\n    states bef,\t\t\t/* states reachable before */\n    int ch,\t\t\t/* character or NONCHAR code */\n    states aft)\t\t\t/* states already known reachable after */\n{\n\tcset *cs;\n\tsop s;\n\tsopno pc;\n\tonestate here;\t\t/* note, macros know this name */\n\tsopno look;\n\tint i;\n\n\tfor (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) {\n\t\ts = g->strip[pc];\n\t\tswitch (OP(s)) {\n\t\tcase OEND:\n\t\t\tassert(pc == stop-1);\n\t\t\tbreak;\n\t\tcase OCHAR:\n\t\t\t/* only characters can match */\n\t\t\tassert(!NONCHAR(ch) || ch != (char)OPND(s));\n\t\t\tif (ch == (char)OPND(s))\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OBOL:\n\t\t\tif (ch == BOL || ch == BOLEOL)\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OEOL:\n\t\t\tif (ch == EOL || ch == BOLEOL)\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OBOW:\n\t\t\tif (ch == BOW)\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OEOW:\n\t\t\tif (ch == EOW)\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OANY:\n\t\t\tif (!NONCHAR(ch))\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OANYOF:\n\t\t\tcs = &g->sets[OPND(s)];\n\t\t\tif (!NONCHAR(ch) && CHIN(cs, ch))\n\t\t\t\tFWD(aft, bef, 1);\n\t\t\tbreak;\n\t\tcase OBACK_:\t\t/* ignored here */\n\t\tcase O_BACK:\n\t\t\tFWD(aft, aft, 1);\n\t\t\tbreak;\n\t\tcase OPLUS_:\t\t/* forward, this is just an empty */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tbreak;\n\t\tcase O_PLUS:\t\t/* both forward and back */\n\t\t\tFWD(aft, aft, 1);\n\t\t\ti = ISSETBACK(aft, OPND(s));\n\t\t\tBACK(aft, aft, OPND(s));\n\t\t\tif (!i && ISSETBACK(aft, OPND(s))) {\n\t\t\t\t/* oho, must reconsider loop body */\n\t\t\t\tpc -= OPND(s) + 1;\n\t\t\t\tINIT(here, pc);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase OQUEST_:\t\t/* two branches, both forward */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tFWD(aft, aft, OPND(s));\n\t\t\tbreak;\n\t\tcase O_QUEST:\t\t/* just an empty */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tbreak;\n\t\tcase OLPAREN:\t\t/* not significant here */\n\t\tcase ORPAREN:\n\t\t\tFWD(aft, aft, 1);\n\t\t\tbreak;\n\t\tcase OCH_:\t\t/* mark the first two branches */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tassert(OP(g->strip[pc+OPND(s)]) == OOR2);\n\t\t\tFWD(aft, aft, OPND(s));\n\t\t\tbreak;\n\t\tcase OOR1:\t\t/* done a branch, find the O_CH */\n\t\t\tif (ISSTATEIN(aft, here)) {\n\t\t\t\tfor (look = 1;\n\t\t\t\t\t\tOP(s = g->strip[pc+look]) != O_CH;\n\t\t\t\t\t\tlook += OPND(s))\n\t\t\t\t\tassert(OP(s) == OOR2);\n\t\t\t\tFWD(aft, aft, look);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase OOR2:\t\t/* propagate OCH_'s marking */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tif (OP(g->strip[pc+OPND(s)]) != O_CH) {\n\t\t\t\tassert(OP(g->strip[pc+OPND(s)]) == OOR2);\n\t\t\t\tFWD(aft, aft, OPND(s));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase O_CH:\t\t/* just empty */\n\t\t\tFWD(aft, aft, 1);\n\t\t\tbreak;\n\t\tdefault:\t\t/* ooooops... */\n\t\t\tassert(nope);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn(aft);\n}\n\n#ifdef REDEBUG\n/*\n - print - print a set of states\n */\nstatic void\nprint(struct match *m, char *caption, states st, int ch, FILE *d)\n{\n\tstruct re_guts *g = m->g;\n\tint i;\n\tint first = 1;\n\n\tif (!(m->eflags&REG_TRACE))\n\t\treturn;\n\n\t(void)fprintf(d, \"%s\", caption);\n\tif (ch != '\\0')\n\t\t(void)fprintf(d, \" %s\", pchar(ch));\n\tfor (i = 0; i < g->nstates; i++)\n\t\tif (ISSET(st, i)) {\n\t\t\t(void)fprintf(d, \"%s%d\", (first) ? \"\\t\" : \", \", i);\n\t\t\tfirst = 0;\n\t\t}\n\t(void)fprintf(d, \"\\n\");\n}\n\n/*\n - at - print current situation\n */\nstatic void\nat(struct match *m, char *title, char *start, char *stop, sopno startst,\n    sopno stopst)\n{\n\tif (!(m->eflags&REG_TRACE))\n\t\treturn;\n\n\t(void)printf(\"%s %s-\", title, pchar(*start));\n\t(void)printf(\"%s \", pchar(*stop));\n\t(void)printf(\"%ld-%ld\\n\", (long)startst, (long)stopst);\n}\n\n#ifndef PCHARDONE\n#define\tPCHARDONE\t/* never again */\n/*\n - pchar - make a character printable\n *\n * Is this identical to regchar() over in debug.c?  Well, yes.  But a\n * duplicate here avoids having a debugging-capable regexec.o tied to\n * a matching debug.o, and this is convenient.  It all disappears in\n * the non-debug compilation anyway, so it doesn't matter much.\n */\nstatic char *\t\t\t/* -> representation */\npchar(int ch)\n{\n\tstatic char pbuf[10];\n\n\tif (isprint(ch) || ch == ' ')\n\t\t(void)_snprintf(pbuf, sizeof pbuf, \"%c\", ch);\n\telse\n\t\t(void)_snprintf(pbuf, sizeof pbuf, \"\\\\%o\", ch);\n\treturn(pbuf);\n}\n#endif\n#endif\n\n#undef\tmatcher\n#undef\tfast\n#undef\tslow\n#undef\tdissect\n#undef\tbackref\n#undef\tstep\n#undef\tprint\n#undef\tat\n#undef\tmatch\n#undef\tnope\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regcomp.c",
    "content": "/*\t$OpenBSD: regcomp.c,v 1.19 2008/02/23 08:13:07 otto Exp $ */\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regcomp.c\t8.5 (Berkeley) 3/20/94\n */\n\n#include <sys/types.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <limits.h>\n#include <stdlib.h>\n#include \"./regex.h\"\n\n#include \"utils.h\"\n#include \"./regex2.h\"\n\n#include \"cclass.h\"\n#include \"cname.h\"\n\n/*\n * parse structure, passed up and down to avoid global variables and\n * other clumsinesses\n */\nstruct parse {\n\tchar *next;\t\t/* next character in RE */\n\tchar *end;\t\t/* end of string (-> NUL normally) */\n\tint error;\t\t/* has an error been seen? */\n\tsop *strip;\t\t/* malloced strip */\n\tsopno ssize;\t\t/* malloced strip size (allocated) */\n\tsopno slen;\t\t/* malloced strip length (used) */\n\tint ncsalloc;\t\t/* number of csets allocated */\n\tstruct re_guts *g;\n#\tdefine\tNPAREN\t10\t/* we need to remember () 1-9 for back refs */\n\tsopno pbegin[NPAREN];\t/* -> ( ([0] unused) */\n\tsopno pend[NPAREN];\t/* -> ) ([0] unused) */\n};\n\nstatic void p_ere(struct parse *, int);\nstatic void p_ere_exp(struct parse *);\nstatic void p_str(struct parse *);\nstatic void p_bre(struct parse *, int, int);\nstatic int p_simp_re(struct parse *, int);\nstatic int p_count(struct parse *);\nstatic void p_bracket(struct parse *);\nstatic void p_b_term(struct parse *, cset *);\nstatic void p_b_cclass(struct parse *, cset *);\nstatic void p_b_eclass(struct parse *, cset *);\nstatic char p_b_symbol(struct parse *);\nstatic char p_b_coll_elem(struct parse *, int);\nstatic char othercase(int);\nstatic void bothcases(struct parse *, int);\nstatic void ordinary(struct parse *, int);\nstatic void nonnewline(struct parse *);\nstatic void repeat(struct parse *, sopno, int, int);\nstatic int seterr(struct parse *, int);\nstatic cset *allocset(struct parse *);\nstatic void freeset(struct parse *, cset *);\nstatic int freezeset(struct parse *, cset *);\nstatic int firstch(struct parse *, cset *);\nstatic int nch(struct parse *, cset *);\nstatic void mcadd(struct parse *, cset *, const char *);\nstatic void mcinvert(struct parse *, cset *);\nstatic void mccase(struct parse *, cset *);\nstatic int isinsets(struct re_guts *, int);\nstatic int samesets(struct re_guts *, int, int);\nstatic void categorize(struct parse *, struct re_guts *);\nstatic sopno dupl(struct parse *, sopno, sopno);\nstatic void doemit(struct parse *, sop, size_t);\nstatic void doinsert(struct parse *, sop, size_t, sopno);\nstatic void dofwd(struct parse *, sopno, sop);\nstatic void enlarge(struct parse *, sopno);\nstatic void stripsnug(struct parse *, struct re_guts *);\nstatic void findmust(struct parse *, struct re_guts *);\nstatic sopno pluscount(struct parse *, struct re_guts *);\n\nstatic char nuls[10];\t\t/* place to point scanner in event of error */\n\n/*\n * macros for use with parse structure\n * BEWARE:  these know that the parse structure is named `p' !!!\n */\n#define\tPEEK()\t(*p->next)\n#define\tPEEK2()\t(*(p->next+1))\n#define\tMORE()\t(p->next < p->end)\n#define\tMORE2()\t(p->next+1 < p->end)\n#define\tSEE(c)\t(MORE() && PEEK() == (c))\n#define\tSEETWO(a, b)\t(MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b))\n#define\tEAT(c)\t((SEE(c)) ? (NEXT(), 1) : 0)\n#define\tEATTWO(a, b)\t((SEETWO(a, b)) ? (NEXT2(), 1) : 0)\n#define\tNEXT()\t(p->next++)\n#define\tNEXT2()\t(p->next += 2)\n#define\tNEXTn(n)\t(p->next += (n))\n#define\tGETNEXT()\t(*p->next++)\n#define\tSETERROR(e)\tseterr(p, (e))\n#define\tREQUIRE(co, e)\tif (!(co)) { SETERROR(e); }\n#define\tMUSTSEE(c, e)\tREQUIRE(MORE() && PEEK() == (c), e)\n#define\tMUSTEAT(c, e)\tREQUIRE(MORE() && GETNEXT() == (c), e)\n#define\tMUSTNOTSEE(c, e)\tREQUIRE(!MORE() || PEEK() != (c), e)\n#define\tEMIT(op, sopnd)\tdoemit(p, (sop)(op), (size_t)(sopnd))\n#define\tINSERT(op, pos)\tdoinsert(p, (sop)(op), HERE()-(pos)+1, pos)\n#define\tAHEAD(pos)\t\tdofwd(p, pos, HERE()-(pos))\n#define\tASTERN(sop, pos)\tEMIT(sop, HERE()-pos)\n#define\tHERE()\t\t(p->slen)\n#define\tTHERE()\t\t(p->slen - 1)\n#define\tTHERETHERE()\t(p->slen - 2)\n#define\tDROP(n)\t(p->slen -= (n))\n\n#ifndef NDEBUG\nstatic int never = 0;\t\t/* for use in asserts; shuts lint up */\n#else\n#define\tnever\t0\t\t/* some <assert.h>s have bugs too */\n#endif\n\n/*\n - regcomp - interface for parser and compilation\n */\nint\t\t\t\t/* 0 success, otherwise REG_something */\nregcomp(regex_t *preg, const char *pattern, int cflags)\n{\n\tstruct parse pa;\n\tstruct re_guts *g;\n\tstruct parse *p = &pa;\n\tint i;\n\tsize_t len;\n#ifdef REDEBUG\n#\tdefine\tGOODFLAGS(f)\t(f)\n#else\n#\tdefine\tGOODFLAGS(f)\t((f)&~REG_DUMP)\n#endif\n\n\tcflags = GOODFLAGS(cflags);\n\tif ((cflags&REG_EXTENDED) && (cflags&REG_NOSPEC))\n\t\treturn(REG_INVARG);\n\n\tif (cflags&REG_PEND) {\n\t\tif (preg->re_endp < pattern)\n\t\t\treturn(REG_INVARG);\n\t\tlen = preg->re_endp - pattern;\n\t} else\n\t\tlen = strlen((char *)pattern);\n\n\t/* do the mallocs early so failure handling is easy */\n\tg = (struct re_guts *)malloc(sizeof(struct re_guts) +\n\t\t\t\t\t\t\t(NC-1)*sizeof(cat_t));\n\tif (g == NULL)\n\t\treturn(REG_ESPACE);\n\tp->ssize = len/(size_t)2*(size_t)3 + (size_t)1;\t/* ugh */\n\tp->strip = (sop *)calloc(p->ssize, sizeof(sop));\n\tp->slen = 0;\n\tif (p->strip == NULL) {\n\t\tfree((char *)g);\n\t\treturn(REG_ESPACE);\n\t}\n\n\t/* set things up */\n\tp->g = g;\n\tp->next = (char *)pattern;\t/* convenience; we do not modify it */\n\tp->end = p->next + len;\n\tp->error = 0;\n\tp->ncsalloc = 0;\n\tfor (i = 0; i < NPAREN; i++) {\n\t\tp->pbegin[i] = 0;\n\t\tp->pend[i] = 0;\n\t}\n\tg->csetsize = NC;\n\tg->sets = NULL;\n\tg->setbits = NULL;\n\tg->ncsets = 0;\n\tg->cflags = cflags;\n\tg->iflags = 0;\n\tg->nbol = 0;\n\tg->neol = 0;\n\tg->must = NULL;\n\tg->mlen = 0;\n\tg->nsub = 0;\n\tg->ncategories = 1;\t/* category 0 is \"everything else\" */\n\tg->categories = &g->catspace[-(CHAR_MIN)];\n\t(void) memset((char *)g->catspace, 0, NC*sizeof(cat_t));\n\tg->backrefs = 0;\n\n\t/* do it */\n\tEMIT(OEND, 0);\n\tg->firststate = THERE();\n\tif (cflags&REG_EXTENDED)\n\t\tp_ere(p, OUT);\n\telse if (cflags&REG_NOSPEC)\n\t\tp_str(p);\n\telse\n\t\tp_bre(p, OUT, OUT);\n\tEMIT(OEND, 0);\n\tg->laststate = THERE();\n\n\t/* tidy up loose ends and fill things in */\n\tcategorize(p, g);\n\tstripsnug(p, g);\n\tfindmust(p, g);\n\tg->nplus = pluscount(p, g);\n\tg->magic = MAGIC2;\n\tpreg->re_nsub = g->nsub;\n\tpreg->re_g = g;\n\tpreg->re_magic = MAGIC1;\n#ifndef REDEBUG\n\t/* not debugging, so can't rely on the assert() in regexec() */\n\tif (g->iflags&BAD)\n\t\tSETERROR(REG_ASSERT);\n#endif\n\n\t/* win or lose, we're done */\n\tif (p->error != 0)\t/* lose */\n\t\tregfree(preg);\n\treturn(p->error);\n}\n\n/*\n - p_ere - ERE parser top level, concatenation and alternation\n */\nstatic void\np_ere(struct parse *p, int stop)\t/* character this ERE should end at */\n{\n\tchar c;\n\tsopno prevback = 0;\n\tsopno prevfwd = 0;\n\tsopno conc;\n\tint first = 1;\t\t/* is this the first alternative? */\n\n\tfor (;;) {\n\t\t/* do a bunch of concatenated expressions */\n\t\tconc = HERE();\n\t\twhile (MORE() && (c = PEEK()) != '|' && c != stop)\n\t\t\tp_ere_exp(p);\n\t\tREQUIRE(HERE() != conc, REG_EMPTY);\t/* require nonempty */\n\n\t\tif (!EAT('|'))\n\t\t\tbreak;\t\t/* NOTE BREAK OUT */\n\n\t\tif (first) {\n\t\t\tINSERT(OCH_, conc);\t/* offset is wrong */\n\t\t\tprevfwd = conc;\n\t\t\tprevback = conc;\n\t\t\tfirst = 0;\n\t\t}\n\t\tASTERN(OOR1, prevback);\n\t\tprevback = THERE();\n\t\tAHEAD(prevfwd);\t\t\t/* fix previous offset */\n\t\tprevfwd = HERE();\n\t\tEMIT(OOR2, 0);\t\t\t/* offset is very wrong */\n\t}\n\n\tif (!first) {\t\t/* tail-end fixups */\n\t\tAHEAD(prevfwd);\n\t\tASTERN(O_CH, prevback);\n\t}\n\n\tassert(!MORE() || SEE(stop));\n}\n\n/*\n - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op\n */\nstatic void\np_ere_exp(struct parse *p)\n{\n\tchar c;\n\tsopno pos;\n\tint count;\n\tint count2;\n\tsopno subno;\n\tint wascaret = 0;\n\n\tassert(MORE());\t\t/* caller should have ensured this */\n\tc = GETNEXT();\n\n\tpos = HERE();\n\tswitch (c) {\n\tcase '(':\n\t\tREQUIRE(MORE(), REG_EPAREN);\n\t\tp->g->nsub++;\n\t\tsubno = p->g->nsub;\n\t\tif (subno < NPAREN)\n\t\t\tp->pbegin[subno] = HERE();\n\t\tEMIT(OLPAREN, subno);\n\t\tif (!SEE(')'))\n\t\t\tp_ere(p, ')');\n\t\tif (subno < NPAREN) {\n\t\t\tp->pend[subno] = HERE();\n\t\t\tassert(p->pend[subno] != 0);\n\t\t}\n\t\tEMIT(ORPAREN, subno);\n\t\tMUSTEAT(')', REG_EPAREN);\n\t\tbreak;\n#ifndef POSIX_MISTAKE\n\tcase ')':\t\t/* happens only if no current unmatched ( */\n\t\t/*\n\t\t * You may ask, why the ifndef?  Because I didn't notice\n\t\t * this until slightly too late for 1003.2, and none of the\n\t\t * other 1003.2 regular-expression reviewers noticed it at\n\t\t * all.  So an unmatched ) is legal POSIX, at least until\n\t\t * we can get it fixed.\n\t\t */\n\t\tSETERROR(REG_EPAREN);\n\t\tbreak;\n#endif\n\tcase '^':\n\t\tEMIT(OBOL, 0);\n\t\tp->g->iflags |= USEBOL;\n\t\tp->g->nbol++;\n\t\twascaret = 1;\n\t\tbreak;\n\tcase '$':\n\t\tEMIT(OEOL, 0);\n\t\tp->g->iflags |= USEEOL;\n\t\tp->g->neol++;\n\t\tbreak;\n\tcase '|':\n\t\tSETERROR(REG_EMPTY);\n\t\tbreak;\n\tcase '*':\n\tcase '+':\n\tcase '?':\n\t\tSETERROR(REG_BADRPT);\n\t\tbreak;\n\tcase '.':\n\t\tif (p->g->cflags&REG_NEWLINE)\n\t\t\tnonnewline(p);\n\t\telse\n\t\t\tEMIT(OANY, 0);\n\t\tbreak;\n\tcase '[':\n\t\tp_bracket(p);\n\t\tbreak;\n\tcase '\\\\':\n\t\tREQUIRE(MORE(), REG_EESCAPE);\n\t\tc = GETNEXT();\n\t\tordinary(p, c);\n\t\tbreak;\n\tcase '{':\t\t/* okay as ordinary except if digit follows */\n\t\tREQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT);\n\t\t/* FALLTHROUGH */\n\tdefault:\n\t\tordinary(p, c);\n\t\tbreak;\n\t}\n\n\tif (!MORE())\n\t\treturn;\n\tc = PEEK();\n\t/* we call { a repetition if followed by a digit */\n\tif (!( c == '*' || c == '+' || c == '?' ||\n\t\t\t\t(c == '{' && MORE2() && isdigit((uch)PEEK2())) ))\n\t\treturn;\t\t/* no repetition, we're done */\n\tNEXT();\n\n\tREQUIRE(!wascaret, REG_BADRPT);\n\tswitch (c) {\n\tcase '*':\t/* implemented as +? */\n\t\t/* this case does not require the (y|) trick, noKLUDGE */\n\t\tINSERT(OPLUS_, pos);\n\t\tASTERN(O_PLUS, pos);\n\t\tINSERT(OQUEST_, pos);\n\t\tASTERN(O_QUEST, pos);\n\t\tbreak;\n\tcase '+':\n\t\tINSERT(OPLUS_, pos);\n\t\tASTERN(O_PLUS, pos);\n\t\tbreak;\n\tcase '?':\n\t\t/* KLUDGE: emit y? as (y|) until subtle bug gets fixed */\n\t\tINSERT(OCH_, pos);\t\t/* offset slightly wrong */\n\t\tASTERN(OOR1, pos);\t\t/* this one's right */\n\t\tAHEAD(pos);\t\t\t/* fix the OCH_ */\n\t\tEMIT(OOR2, 0);\t\t\t/* offset very wrong... */\n\t\tAHEAD(THERE());\t\t\t/* ...so fix it */\n\t\tASTERN(O_CH, THERETHERE());\n\t\tbreak;\n\tcase '{':\n\t\tcount = p_count(p);\n\t\tif (EAT(',')) {\n\t\t\tif (isdigit((uch)PEEK())) {\n\t\t\t\tcount2 = p_count(p);\n\t\t\t\tREQUIRE(count <= count2, REG_BADBR);\n\t\t\t} else\t\t/* single number with comma */\n\t\t\t\tcount2 = INFINITY;\n\t\t} else\t\t/* just a single number */\n\t\t\tcount2 = count;\n\t\trepeat(p, pos, count, count2);\n\t\tif (!EAT('}')) {\t/* error heuristics */\n\t\t\twhile (MORE() && PEEK() != '}')\n\t\t\t\tNEXT();\n\t\t\tREQUIRE(MORE(), REG_EBRACE);\n\t\t\tSETERROR(REG_BADBR);\n\t\t}\n\t\tbreak;\n\t}\n\n\tif (!MORE())\n\t\treturn;\n\tc = PEEK();\n\tif (!( c == '*' || c == '+' || c == '?' ||\n\t\t\t\t(c == '{' && MORE2() && isdigit((uch)PEEK2())) ) )\n\t\treturn;\n\tSETERROR(REG_BADRPT);\n}\n\n/*\n - p_str - string (no metacharacters) \"parser\"\n */\nstatic void\np_str(struct parse *p)\n{\n\tREQUIRE(MORE(), REG_EMPTY);\n\twhile (MORE())\n\t\tordinary(p, GETNEXT());\n}\n\n/*\n - p_bre - BRE parser top level, anchoring and concatenation\n * Giving end1 as OUT essentially eliminates the end1/end2 check.\n *\n * This implementation is a bit of a kludge, in that a trailing $ is first\n * taken as an ordinary character and then revised to be an anchor.  The\n * only undesirable side effect is that '$' gets included as a character\n * category in such cases.  This is fairly harmless; not worth fixing.\n * The amount of lookahead needed to avoid this kludge is excessive.\n */\nstatic void\np_bre(struct parse *p,\n    int end1,\t\t/* first terminating character */\n    int end2)\t\t/* second terminating character */\n{\n\tsopno start = HERE();\n\tint first = 1;\t\t\t/* first subexpression? */\n\tint wasdollar = 0;\n\n\tif (EAT('^')) {\n\t\tEMIT(OBOL, 0);\n\t\tp->g->iflags |= USEBOL;\n\t\tp->g->nbol++;\n\t}\n\twhile (MORE() && !SEETWO(end1, end2)) {\n\t\twasdollar = p_simp_re(p, first);\n\t\tfirst = 0;\n\t}\n\tif (wasdollar) {\t/* oops, that was a trailing anchor */\n\t\tDROP(1);\n\t\tEMIT(OEOL, 0);\n\t\tp->g->iflags |= USEEOL;\n\t\tp->g->neol++;\n\t}\n\n\tREQUIRE(HERE() != start, REG_EMPTY);\t/* require nonempty */\n}\n\n/*\n - p_simp_re - parse a simple RE, an atom possibly followed by a repetition\n */\nstatic int\t\t\t/* was the simple RE an unbackslashed $? */\np_simp_re(struct parse *p,\n    int starordinary)\t\t/* is a leading * an ordinary character? */\n{\n\tint c;\n\tint count;\n\tint count2;\n\tsopno pos;\n\tint i;\n\tsopno subno;\n#\tdefine\tBACKSL\t(1<<CHAR_BIT)\n\n\tpos = HERE();\t\t/* repetion op, if any, covers from here */\n\n\tassert(MORE());\t\t/* caller should have ensured this */\n\tc = GETNEXT();\n\tif (c == '\\\\') {\n\t\tREQUIRE(MORE(), REG_EESCAPE);\n\t\tc = BACKSL | GETNEXT();\n\t}\n\tswitch (c) {\n\tcase '.':\n\t\tif (p->g->cflags&REG_NEWLINE)\n\t\t\tnonnewline(p);\n\t\telse\n\t\t\tEMIT(OANY, 0);\n\t\tbreak;\n\tcase '[':\n\t\tp_bracket(p);\n\t\tbreak;\n\tcase BACKSL|'{':\n\t\tSETERROR(REG_BADRPT);\n\t\tbreak;\n\tcase BACKSL|'(':\n\t\tp->g->nsub++;\n\t\tsubno = p->g->nsub;\n\t\tif (subno < NPAREN)\n\t\t\tp->pbegin[subno] = HERE();\n\t\tEMIT(OLPAREN, subno);\n\t\t/* the MORE here is an error heuristic */\n\t\tif (MORE() && !SEETWO('\\\\', ')'))\n\t\t\tp_bre(p, '\\\\', ')');\n\t\tif (subno < NPAREN) {\n\t\t\tp->pend[subno] = HERE();\n\t\t\tassert(p->pend[subno] != 0);\n\t\t}\n\t\tEMIT(ORPAREN, subno);\n\t\tREQUIRE(EATTWO('\\\\', ')'), REG_EPAREN);\n\t\tbreak;\n\tcase BACKSL|')':\t/* should not get here -- must be user */\n\tcase BACKSL|'}':\n\t\tSETERROR(REG_EPAREN);\n\t\tbreak;\n\tcase BACKSL|'1':\n\tcase BACKSL|'2':\n\tcase BACKSL|'3':\n\tcase BACKSL|'4':\n\tcase BACKSL|'5':\n\tcase BACKSL|'6':\n\tcase BACKSL|'7':\n\tcase BACKSL|'8':\n\tcase BACKSL|'9':\n\t\ti = (c&~BACKSL) - '0';\n\t\tassert(i < NPAREN);\n\t\tif (p->pend[i] != 0) {\n\t\t\tassert(i <= p->g->nsub);\n\t\t\tEMIT(OBACK_, i);\n\t\t\tassert(p->pbegin[i] != 0);\n\t\t\tassert(OP(p->strip[p->pbegin[i]]) == OLPAREN);\n\t\t\tassert(OP(p->strip[p->pend[i]]) == ORPAREN);\n\t\t\t(void) dupl(p, p->pbegin[i]+1, p->pend[i]);\n\t\t\tEMIT(O_BACK, i);\n\t\t} else\n\t\t\tSETERROR(REG_ESUBREG);\n\t\tp->g->backrefs = 1;\n\t\tbreak;\n\tcase '*':\n\t\tREQUIRE(starordinary, REG_BADRPT);\n\t\t/* FALLTHROUGH */\n\tdefault:\n\t\tordinary(p, (char)c);\n\t\tbreak;\n\t}\n\n\tif (EAT('*')) {\t\t/* implemented as +? */\n\t\t/* this case does not require the (y|) trick, noKLUDGE */\n\t\tINSERT(OPLUS_, pos);\n\t\tASTERN(O_PLUS, pos);\n\t\tINSERT(OQUEST_, pos);\n\t\tASTERN(O_QUEST, pos);\n\t} else if (EATTWO('\\\\', '{')) {\n\t\tcount = p_count(p);\n\t\tif (EAT(',')) {\n\t\t\tif (MORE() && isdigit((uch)PEEK())) {\n\t\t\t\tcount2 = p_count(p);\n\t\t\t\tREQUIRE(count <= count2, REG_BADBR);\n\t\t\t} else\t\t/* single number with comma */\n\t\t\t\tcount2 = INFINITY;\n\t\t} else\t\t/* just a single number */\n\t\t\tcount2 = count;\n\t\trepeat(p, pos, count, count2);\n\t\tif (!EATTWO('\\\\', '}')) {\t/* error heuristics */\n\t\t\twhile (MORE() && !SEETWO('\\\\', '}'))\n\t\t\t\tNEXT();\n\t\t\tREQUIRE(MORE(), REG_EBRACE);\n\t\t\tSETERROR(REG_BADBR);\n\t\t}\n\t} else if (c == '$')\t/* $ (but not \\$) ends it */\n\t\treturn(1);\n\n\treturn(0);\n}\n\n/*\n - p_count - parse a repetition count\n */\nstatic int\t\t\t/* the value */\np_count(struct parse *p)\n{\n\tint count = 0;\n\tint ndigits = 0;\n\n\twhile (MORE() && isdigit((uch)PEEK()) && count <= DUPMAX) {\n\t\tcount = count*10 + (GETNEXT() - '0');\n\t\tndigits++;\n\t}\n\n\tREQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR);\n\treturn(count);\n}\n\n/*\n - p_bracket - parse a bracketed character list\n *\n * Note a significant property of this code:  if the allocset() did SETERROR,\n * no set operations are done.\n */\nstatic void\np_bracket(struct parse *p)\n{\n\tcset *cs;\n\tint invert = 0;\n\n\t/* Dept of Truly Sickening Special-Case Kludges */\n\tif (p->next + 5 < p->end && strncmp(p->next, \"[:<:]]\", 6) == 0) {\n\t\tEMIT(OBOW, 0);\n\t\tNEXTn(6);\n\t\treturn;\n\t}\n\tif (p->next + 5 < p->end && strncmp(p->next, \"[:>:]]\", 6) == 0) {\n\t\tEMIT(OEOW, 0);\n\t\tNEXTn(6);\n\t\treturn;\n\t}\n\n\tif ((cs = allocset(p)) == NULL) {\n\t\t/* allocset did set error status in p */\n\t\treturn;\n\t}\n\n\tif (EAT('^'))\n\t\tinvert++;\t/* make note to invert set at end */\n\tif (EAT(']'))\n\t\tCHadd(cs, ']');\n\telse if (EAT('-'))\n\t\tCHadd(cs, '-');\n\twhile (MORE() && PEEK() != ']' && !SEETWO('-', ']'))\n\t\tp_b_term(p, cs);\n\tif (EAT('-'))\n\t\tCHadd(cs, '-');\n\tMUSTEAT(']', REG_EBRACK);\n\n\tif (p->error != 0) {\t/* don't mess things up further */\n\t\tfreeset(p, cs);\n\t\treturn;\n\t}\n\n\tif (p->g->cflags&REG_ICASE) {\n\t\tint i;\n\t\tint ci;\n\n\t\tfor (i = p->g->csetsize - 1; i >= 0; i--)\n\t\t\tif (CHIN(cs, i) && isalpha(i)) {\n\t\t\t\tci = othercase(i);\n\t\t\t\tif (ci != i)\n\t\t\t\t\tCHadd(cs, ci);\n\t\t\t}\n\t\tif (cs->multis != NULL)\n\t\t\tmccase(p, cs);\n\t}\n\tif (invert) {\n\t\tint i;\n\n\t\tfor (i = p->g->csetsize - 1; i >= 0; i--)\n\t\t\tif (CHIN(cs, i))\n\t\t\t\tCHsub(cs, i);\n\t\t\telse\n\t\t\t\tCHadd(cs, i);\n\t\tif (p->g->cflags&REG_NEWLINE)\n\t\t\tCHsub(cs, '\\n');\n\t\tif (cs->multis != NULL)\n\t\t\tmcinvert(p, cs);\n\t}\n\n\tassert(cs->multis == NULL);\t\t/* xxx */\n\n\tif (nch(p, cs) == 1) {\t\t/* optimize singleton sets */\n\t\tordinary(p, firstch(p, cs));\n\t\tfreeset(p, cs);\n\t} else\n\t\tEMIT(OANYOF, freezeset(p, cs));\n}\n\n/*\n - p_b_term - parse one term of a bracketed character list\n */\nstatic void\np_b_term(struct parse *p, cset *cs)\n{\n\tchar c;\n\tchar start, finish;\n\tint i;\n\n\t/* classify what we've got */\n\tswitch ((MORE()) ? PEEK() : '\\0') {\n\tcase '[':\n\t\tc = (MORE2()) ? PEEK2() : '\\0';\n\t\tbreak;\n\tcase '-':\n\t\tSETERROR(REG_ERANGE);\n\t\treturn;\t\t\t/* NOTE RETURN */\n\t\tbreak;\n\tdefault:\n\t\tc = '\\0';\n\t\tbreak;\n\t}\n\n\tswitch (c) {\n\tcase ':':\t\t/* character class */\n\t\tNEXT2();\n\t\tREQUIRE(MORE(), REG_EBRACK);\n\t\tc = PEEK();\n\t\tREQUIRE(c != '-' && c != ']', REG_ECTYPE);\n\t\tp_b_cclass(p, cs);\n\t\tREQUIRE(MORE(), REG_EBRACK);\n\t\tREQUIRE(EATTWO(':', ']'), REG_ECTYPE);\n\t\tbreak;\n\tcase '=':\t\t/* equivalence class */\n\t\tNEXT2();\n\t\tREQUIRE(MORE(), REG_EBRACK);\n\t\tc = PEEK();\n\t\tREQUIRE(c != '-' && c != ']', REG_ECOLLATE);\n\t\tp_b_eclass(p, cs);\n\t\tREQUIRE(MORE(), REG_EBRACK);\n\t\tREQUIRE(EATTWO('=', ']'), REG_ECOLLATE);\n\t\tbreak;\n\tdefault:\t\t/* symbol, ordinary character, or range */\n/* xxx revision needed for multichar stuff */\n\t\tstart = p_b_symbol(p);\n\t\tif (SEE('-') && MORE2() && PEEK2() != ']') {\n\t\t\t/* range */\n\t\t\tNEXT();\n\t\t\tif (EAT('-'))\n\t\t\t\tfinish = '-';\n\t\t\telse\n\t\t\t\tfinish = p_b_symbol(p);\n\t\t} else\n\t\t\tfinish = start;\n/* xxx what about signed chars here... */\n\t\tREQUIRE(start <= finish, REG_ERANGE);\n\t\tfor (i = start; i <= finish; i++)\n\t\t\tCHadd(cs, i);\n\t\tbreak;\n\t}\n}\n\n/*\n - p_b_cclass - parse a character-class name and deal with it\n */\nstatic void\np_b_cclass(struct parse *p, cset *cs)\n{\n\tchar *sp = p->next;\n\tconst struct cclass *cp;\n\tsize_t len;\n\tconst char *u;\n\tchar c;\n\n\twhile (MORE() && isalpha(PEEK()))\n\t\tNEXT();\n\tlen = p->next - sp;\n\tfor (cp = cclasses; cp->name != NULL; cp++)\n\t\tif (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\\0')\n\t\t\tbreak;\n\tif (cp->name == NULL) {\n\t\t/* oops, didn't find it */\n\t\tSETERROR(REG_ECTYPE);\n\t\treturn;\n\t}\n\n\tu = cp->chars;\n\twhile ((c = *u++) != '\\0')\n\t\tCHadd(cs, c);\n\tfor (u = cp->multis; *u != '\\0'; u += strlen(u) + 1)\n\t\tMCadd(p, cs, u);\n}\n\n/*\n - p_b_eclass - parse an equivalence-class name and deal with it\n *\n * This implementation is incomplete. xxx\n */\nstatic void\np_b_eclass(struct parse *p, cset *cs)\n{\n\tchar c;\n\n\tc = p_b_coll_elem(p, '=');\n\tCHadd(cs, c);\n}\n\n/*\n - p_b_symbol - parse a character or [..]ed multicharacter collating symbol\n */\nstatic char\t\t\t/* value of symbol */\np_b_symbol(struct parse *p)\n{\n\tchar value;\n\n\tREQUIRE(MORE(), REG_EBRACK);\n\tif (!EATTWO('[', '.'))\n\t\treturn(GETNEXT());\n\n\t/* collating symbol */\n\tvalue = p_b_coll_elem(p, '.');\n\tREQUIRE(EATTWO('.', ']'), REG_ECOLLATE);\n\treturn(value);\n}\n\n/*\n - p_b_coll_elem - parse a collating-element name and look it up\n */\nstatic char\t\t\t/* value of collating element */\np_b_coll_elem(struct parse *p,\n    int endc)\t\t\t/* name ended by endc,']' */\n{\n\tchar *sp = p->next;\n\tconst struct cname *cp;\n\tint len;\n\n\twhile (MORE() && !SEETWO(endc, ']'))\n\t\tNEXT();\n\tif (!MORE()) {\n\t\tSETERROR(REG_EBRACK);\n\t\treturn(0);\n\t}\n\tlen = p->next - sp;\n\tfor (cp = cnames; cp->name != NULL; cp++)\n\t\tif (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\\0')\n\t\t\treturn(cp->code);\t/* known name */\n\tif (len == 1)\n\t\treturn(*sp);\t/* single character */\n\tSETERROR(REG_ECOLLATE);\t\t\t/* neither */\n\treturn(0);\n}\n\n/*\n - othercase - return the case counterpart of an alphabetic\n */\nstatic char\t\t\t/* if no counterpart, return ch */\nothercase(int ch)\n{\n\tch = (uch)ch;\n\tassert(isalpha(ch));\n\tif (isupper(ch))\n\t\treturn ((uch)tolower(ch));\n\telse if (islower(ch))\n\t\treturn ((uch)toupper(ch));\n\telse\t\t\t/* peculiar, but could happen */\n\t\treturn(ch);\n}\n\n/*\n - bothcases - emit a dualcase version of a two-case character\n *\n * Boy, is this implementation ever a kludge...\n */\nstatic void\nbothcases(struct parse *p, int ch)\n{\n\tchar *oldnext = p->next;\n\tchar *oldend = p->end;\n\tchar bracket[3];\n\n\tch = (uch)ch;\n\tassert(othercase(ch) != ch);\t/* p_bracket() would recurse */\n\tp->next = bracket;\n\tp->end = bracket+2;\n\tbracket[0] = ch;\n\tbracket[1] = ']';\n\tbracket[2] = '\\0';\n\tp_bracket(p);\n\tassert(p->next == bracket+2);\n\tp->next = oldnext;\n\tp->end = oldend;\n}\n\n/*\n - ordinary - emit an ordinary character\n */\nstatic void\nordinary(struct parse *p, int ch)\n{\n\tcat_t *cap = p->g->categories;\n\n\tif ((p->g->cflags&REG_ICASE) && isalpha((uch)ch) && othercase(ch) != ch)\n\t\tbothcases(p, ch);\n\telse {\n\t\tEMIT(OCHAR, (uch)ch);\n\t\tif (cap[ch] == 0)\n\t\t\tcap[ch] = p->g->ncategories++;\n\t}\n}\n\n/*\n - nonnewline - emit REG_NEWLINE version of OANY\n *\n * Boy, is this implementation ever a kludge...\n */\nstatic void\nnonnewline(struct parse *p)\n{\n\tchar *oldnext = p->next;\n\tchar *oldend = p->end;\n\tchar bracket[4];\n\n\tp->next = bracket;\n\tp->end = bracket+3;\n\tbracket[0] = '^';\n\tbracket[1] = '\\n';\n\tbracket[2] = ']';\n\tbracket[3] = '\\0';\n\tp_bracket(p);\n\tassert(p->next == bracket+3);\n\tp->next = oldnext;\n\tp->end = oldend;\n}\n\n/*\n - repeat - generate code for a bounded repetition, recursively if needed\n */\nstatic void\nrepeat(struct parse *p,\n    sopno start,\t\t/* operand from here to end of strip */\n    int from,\t\t\t/* repeated from this number */\n    int to)\t\t\t/* to this number of times (maybe INFINITY) */\n{\n\tsopno finish = HERE();\n#\tdefine\tN\t2\n#\tdefine\tINF\t3\n#\tdefine\tREP(f, t)\t((f)*8 + (t))\n#\tdefine\tMAP(n)\t(((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)\n\tsopno copy;\n\n\tif (p->error != 0)\t/* head off possible runaway recursion */\n\t\treturn;\n\n\tassert(from <= to);\n\n\tswitch (REP(MAP(from), MAP(to))) {\n\tcase REP(0, 0):\t\t\t/* must be user doing this */\n\t\tDROP(finish-start);\t/* drop the operand */\n\t\tbreak;\n\tcase REP(0, 1):\t\t\t/* as x{1,1}? */\n\tcase REP(0, N):\t\t\t/* as x{1,n}? */\n\tcase REP(0, INF):\t\t/* as x{1,}? */\n\t\t/* KLUDGE: emit y? as (y|) until subtle bug gets fixed */\n\t\tINSERT(OCH_, start);\t\t/* offset is wrong... */\n\t\trepeat(p, start+1, 1, to);\n\t\tASTERN(OOR1, start);\n\t\tAHEAD(start);\t\t\t/* ... fix it */\n\t\tEMIT(OOR2, 0);\n\t\tAHEAD(THERE());\n\t\tASTERN(O_CH, THERETHERE());\n\t\tbreak;\n\tcase REP(1, 1):\t\t\t/* trivial case */\n\t\t/* done */\n\t\tbreak;\n\tcase REP(1, N):\t\t\t/* as x?x{1,n-1} */\n\t\t/* KLUDGE: emit y? as (y|) until subtle bug gets fixed */\n\t\tINSERT(OCH_, start);\n\t\tASTERN(OOR1, start);\n\t\tAHEAD(start);\n\t\tEMIT(OOR2, 0);\t\t\t/* offset very wrong... */\n\t\tAHEAD(THERE());\t\t\t/* ...so fix it */\n\t\tASTERN(O_CH, THERETHERE());\n\t\tcopy = dupl(p, start+1, finish+1);\n\t\tassert(copy == finish+4);\n\t\trepeat(p, copy, 1, to-1);\n\t\tbreak;\n\tcase REP(1, INF):\t\t/* as x+ */\n\t\tINSERT(OPLUS_, start);\n\t\tASTERN(O_PLUS, start);\n\t\tbreak;\n\tcase REP(N, N):\t\t\t/* as xx{m-1,n-1} */\n\t\tcopy = dupl(p, start, finish);\n\t\trepeat(p, copy, from-1, to-1);\n\t\tbreak;\n\tcase REP(N, INF):\t\t/* as xx{n-1,INF} */\n\t\tcopy = dupl(p, start, finish);\n\t\trepeat(p, copy, from-1, to);\n\t\tbreak;\n\tdefault:\t\t\t/* \"can't happen\" */\n\t\tSETERROR(REG_ASSERT);\t/* just in case */\n\t\tbreak;\n\t}\n}\n\n/*\n - seterr - set an error condition\n */\nstatic int\t\t\t/* useless but makes type checking happy */\nseterr(struct parse *p, int e)\n{\n\tif (p->error == 0)\t/* keep earliest error condition */\n\t\tp->error = e;\n\tp->next = nuls;\t\t/* try to bring things to a halt */\n\tp->end = nuls;\n\treturn(0);\t\t/* make the return value well-defined */\n}\n\n/*\n - allocset - allocate a set of characters for []\n */\nstatic cset *\nallocset(struct parse *p)\n{\n\tint no = p->g->ncsets++;\n\tsize_t nc;\n\tsize_t nbytes;\n\tcset *cs;\n\tsize_t css = (size_t)p->g->csetsize;\n\tint i;\n\n\tif (no >= p->ncsalloc) {\t/* need another column of space */\n\t\tvoid *ptr;\n\n\t\tp->ncsalloc += CHAR_BIT;\n\t\tnc = p->ncsalloc;\n\t\tassert(nc % CHAR_BIT == 0);\n\t\tnbytes = nc / CHAR_BIT * css;\n\n\t\tptr = (cset *)realloc((char *)p->g->sets, nc * sizeof(cset));\n\t\tif (ptr == NULL)\n\t\t\tgoto nomem;\n\t\tp->g->sets = (cset*)ptr;\n\n\t\tptr = (uch *)realloc((char *)p->g->setbits, nbytes);\n\t\tif (ptr == NULL)\n\t\t\tgoto nomem;\n\t\tp->g->setbits = (uch*)ptr;\n\n\t\tfor (i = 0; i < no; i++)\n\t\t\tp->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT);\n\n\t\t(void) memset((char *)p->g->setbits + (nbytes - css), 0, css);\n\t}\n\t/* XXX should not happen */\n\tif (p->g->sets == NULL || p->g->setbits == NULL)\n\t\tgoto nomem;\n\n\tcs = &p->g->sets[no];\n\tcs->ptr = p->g->setbits + css*((no)/CHAR_BIT);\n\tcs->mask = 1 << ((no) % CHAR_BIT);\n\tcs->hash = 0;\n\tcs->smultis = 0;\n\tcs->multis = NULL;\n\n\treturn(cs);\nnomem:\n\tfree(p->g->sets);\n\tp->g->sets = NULL;\n\tfree(p->g->setbits);\n\tp->g->setbits = NULL;\n\n\tSETERROR(REG_ESPACE);\n\t/* caller's responsibility not to do set ops */\n\treturn(NULL);\n}\n\n/*\n - freeset - free a now-unused set\n */\nstatic void\nfreeset(struct parse *p, cset *cs)\n{\n\tint i;\n\tcset *top = &p->g->sets[p->g->ncsets];\n\tsize_t css = (size_t)p->g->csetsize;\n\n\tfor (i = 0; i < (ssize_t)css; i++)\n\t\tCHsub(cs, i);\n\tif (cs == top-1)\t/* recover only the easy case */\n\t\tp->g->ncsets--;\n}\n\n/*\n - freezeset - final processing on a set of characters\n *\n * The main task here is merging identical sets.  This is usually a waste\n * of time (although the hash code minimizes the overhead), but can win\n * big if REG_ICASE is being used.  REG_ICASE, by the way, is why the hash\n * is done using addition rather than xor -- all ASCII [aA] sets xor to\n * the same value!\n */\nstatic int\t\t\t/* set number */\nfreezeset(struct parse *p, cset *cs)\n{\n\tuch h = cs->hash;\n\tint i;\n\tcset *top = &p->g->sets[p->g->ncsets];\n\tcset *cs2;\n\tsize_t css = (size_t)p->g->csetsize;\n\n\t/* look for an earlier one which is the same */\n\tfor (cs2 = &p->g->sets[0]; cs2 < top; cs2++)\n\t\tif (cs2->hash == h && cs2 != cs) {\n\t\t\t/* maybe */\n\t\t\tfor (i = 0; i < (ssize_t)css; i++)\n\t\t\t\tif (!!CHIN(cs2, i) != !!CHIN(cs, i))\n\t\t\t\t\tbreak;\t\t/* no */\n\t\t\tif (i == (ssize_t)css)\n\t\t\t\tbreak;\t\t\t/* yes */\n\t\t}\n\n\tif (cs2 < top) {\t/* found one */\n\t\tfreeset(p, cs);\n\t\tcs = cs2;\n\t}\n\n\treturn((int)(cs - p->g->sets));\n}\n\n/*\n - firstch - return first character in a set (which must have at least one)\n */\nstatic int\t\t\t/* character; there is no \"none\" value */\nfirstch(struct parse *p, cset *cs)\n{\n\tint i;\n\tsize_t css = (size_t)p->g->csetsize;\n\n\tfor (i = 0; i < (ssize_t)css; i++)\n\t\tif (CHIN(cs, i))\n\t\t\treturn((char)i);\n\tassert(never);\n\treturn(0);\t\t/* arbitrary */\n}\n\n/*\n - nch - number of characters in a set\n */\nstatic int\nnch(struct parse *p, cset *cs)\n{\n\tint i;\n\tsize_t css = (size_t)p->g->csetsize;\n\tint n = 0;\n\n\tfor (i = 0; i < (ssize_t)css; i++)\n\t\tif (CHIN(cs, i))\n\t\t\tn++;\n\treturn(n);\n}\n\n/*\n - mcadd - add a collating element to a cset\n */\nstatic void\nmcadd( struct parse *p, cset *cs, const char *cp)\n{\n\tsize_t oldend = cs->smultis;\n\tvoid *np;\n\n\tcs->smultis += strlen(cp) + 1;\n\tnp = realloc(cs->multis, cs->smultis);\n\tif (np == NULL) {\n\t\tif (cs->multis)\n\t\t\tfree(cs->multis);\n\t\tcs->multis = NULL;\n\t\tSETERROR(REG_ESPACE);\n\t\treturn;\n\t}\n\tcs->multis = (char*)np;\n\n\tstrncpy(cs->multis + oldend - 1, cp, cs->smultis - oldend + 1);\n}\n\n/*\n - mcinvert - invert the list of collating elements in a cset\n *\n * This would have to know the set of possibilities.  Implementation\n * is deferred.\n */\n/* ARGSUSED */\nstatic void\nmcinvert(struct parse *p, cset *cs)\n{\n\tassert(cs->multis == NULL);\t/* xxx */\n}\n\n/*\n - mccase - add case counterparts of the list of collating elements in a cset\n *\n * This would have to know the set of possibilities.  Implementation\n * is deferred.\n */\n/* ARGSUSED */\nstatic void\nmccase(struct parse *p, cset *cs)\n{\n\tassert(cs->multis == NULL);\t/* xxx */\n}\n\n/*\n - isinsets - is this character in any sets?\n */\nstatic int\t\t\t/* predicate */\nisinsets(struct re_guts *g, int c)\n{\n\tuch *col;\n\tint i;\n\tint ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;\n\tunsigned uc = (uch)c;\n\n\tfor (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)\n\t\tif (col[uc] != 0)\n\t\t\treturn(1);\n\treturn(0);\n}\n\n/*\n - samesets - are these two characters in exactly the same sets?\n */\nstatic int\t\t\t/* predicate */\nsamesets(struct re_guts *g, int c1, int c2)\n{\n\tuch *col;\n\tint i;\n\tint ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;\n\tunsigned uc1 = (uch)c1;\n\tunsigned uc2 = (uch)c2;\n\n\tfor (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)\n\t\tif (col[uc1] != col[uc2])\n\t\t\treturn(0);\n\treturn(1);\n}\n\n/*\n - categorize - sort out character categories\n */\nstatic void\ncategorize(struct parse *p, struct re_guts *g)\n{\n\tcat_t *cats = g->categories;\n\tint c;\n\tint c2;\n\tcat_t cat;\n\n\t/* avoid making error situations worse */\n\tif (p->error != 0)\n\t\treturn;\n\n\tfor (c = CHAR_MIN; c <= CHAR_MAX; c++)\n\t\tif (cats[c] == 0 && isinsets(g, c)) {\n\t\t\tcat = g->ncategories++;\n\t\t\tcats[c] = cat;\n\t\t\tfor (c2 = c+1; c2 <= CHAR_MAX; c2++)\n\t\t\t\tif (cats[c2] == 0 && samesets(g, c, c2))\n\t\t\t\t\tcats[c2] = cat;\n\t\t}\n}\n\n/*\n - dupl - emit a duplicate of a bunch of sops\n */\nstatic sopno\t\t\t/* start of duplicate */\ndupl(struct parse *p,\n    sopno start,\t\t/* from here */\n    sopno finish)\t\t/* to this less one */\n{\n\tsopno ret = HERE();\n\tsopno len = finish - start;\n\n\tassert(finish >= start);\n\tif (len == 0)\n\t\treturn(ret);\n\tenlarge(p, p->ssize + len);\t/* this many unexpected additions */\n\tassert(p->ssize >= p->slen + len);\n\t(void) memcpy((char *)(p->strip + p->slen),\n\t\t(char *)(p->strip + start), (size_t)len*sizeof(sop));\n\tp->slen += len;\n\treturn(ret);\n}\n\n/*\n - doemit - emit a strip operator\n *\n * It might seem better to implement this as a macro with a function as\n * hard-case backup, but it's just too big and messy unless there are\n * some changes to the data structures.  Maybe later.\n */\nstatic void\ndoemit(struct parse *p, sop op, size_t opnd)\n{\n\t/* avoid making error situations worse */\n\tif (p->error != 0)\n\t\treturn;\n\n\t/* deal with oversize operands (\"can't happen\", more or less) */\n\tassert(opnd < 1<<OPSHIFT);\n\n\t/* deal with undersized strip */\n\tif (p->slen >= p->ssize)\n\t\tenlarge(p, (p->ssize+1) / 2 * 3);\t/* +50% */\n\tassert(p->slen < p->ssize);\n\n\t/* finally, it's all reduced to the easy case */\n\tp->strip[p->slen++] = SOP(op, opnd);\n}\n\n/*\n - doinsert - insert a sop into the strip\n */\nstatic void\ndoinsert(struct parse *p, sop op, size_t opnd, sopno pos)\n{\n\tsopno sn;\n\tsop s;\n\tint i;\n\n\t/* avoid making error situations worse */\n\tif (p->error != 0)\n\t\treturn;\n\n\tsn = HERE();\n\tEMIT(op, opnd);\t\t/* do checks, ensure space */\n\tassert(HERE() == sn+1);\n\ts = p->strip[sn];\n\n\t/* adjust paren pointers */\n\tassert(pos > 0);\n\tfor (i = 1; i < NPAREN; i++) {\n\t\tif (p->pbegin[i] >= pos) {\n\t\t\tp->pbegin[i]++;\n\t\t}\n\t\tif (p->pend[i] >= pos) {\n\t\t\tp->pend[i]++;\n\t\t}\n\t}\n\n\tmemmove((char *)&p->strip[pos+1], (char *)&p->strip[pos],\n\t\t\t\t\t\t(HERE()-pos-1)*sizeof(sop));\n\tp->strip[pos] = s;\n}\n\n/*\n - dofwd - complete a forward reference\n */\nstatic void\ndofwd(struct parse *p, sopno pos, sop value)\n{\n\t/* avoid making error situations worse */\n\tif (p->error != 0)\n\t\treturn;\n\n\tassert(value < 1<<OPSHIFT);\n\tp->strip[pos] = OP(p->strip[pos]) | value;\n}\n\n/*\n - enlarge - enlarge the strip\n */\nstatic void\nenlarge(struct parse *p, sopno size)\n{\n\tsop *sp;\n\n\tif (p->ssize >= size)\n\t\treturn;\n\n\tsp = (sop *)realloc(p->strip, size*sizeof(sop));\n\tif (sp == NULL) {\n\t\tSETERROR(REG_ESPACE);\n\t\treturn;\n\t}\n\tp->strip = sp;\n\tp->ssize = size;\n}\n\n/*\n - stripsnug - compact the strip\n */\nstatic void\nstripsnug(struct parse *p, struct re_guts *g)\n{\n\tg->nstates = p->slen;\n\tg->strip = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop));\n\tif (g->strip == NULL) {\n\t\tSETERROR(REG_ESPACE);\n\t\tg->strip = p->strip;\n\t}\n}\n\n/*\n - findmust - fill in must and mlen with longest mandatory literal string\n *\n * This algorithm could do fancy things like analyzing the operands of |\n * for common subsequences.  Someday.  This code is simple and finds most\n * of the interesting cases.\n *\n * Note that must and mlen got initialized during setup.\n */\nstatic void\nfindmust(struct parse *p, struct re_guts *g)\n{\n\tsop *scan;\n\tsop *start = NULL;    /* start initialized in the default case, after that */\n\tsop *newstart = NULL; /* newstart was initialized in the OCHAR case */\n\tsopno newlen;\n\tsop s;\n\tchar *cp;\n\tsopno i;\n\n\t/* avoid making error situations worse */\n\tif (p->error != 0)\n\t\treturn;\n\n\t/* find the longest OCHAR sequence in strip */\n\tnewlen = 0;\n\tscan = g->strip + 1;\n\tdo {\n\t\ts = *scan++;\n\t\tswitch (OP(s)) {\n\t\tcase OCHAR:\t\t/* sequence member */\n\t\t\tif (newlen == 0)\t\t/* new sequence */\n\t\t\t\tnewstart = scan - 1;\n\t\t\tnewlen++;\n\t\t\tbreak;\n\t\tcase OPLUS_:\t\t/* things that don't break one */\n\t\tcase OLPAREN:\n\t\tcase ORPAREN:\n\t\t\tbreak;\n\t\tcase OQUEST_:\t\t/* things that must be skipped */\n\t\tcase OCH_:\n\t\t\tscan--;\n\t\t\tdo {\n\t\t\t\tscan += OPND(s);\n\t\t\t\ts = *scan;\n\t\t\t\t/* assert() interferes w debug printouts */\n\t\t\t\tif (OP(s) != O_QUEST && OP(s) != O_CH &&\n\t\t\t\t\t\t\tOP(s) != OOR2) {\n\t\t\t\t\tg->iflags |= BAD;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (OP(s) != O_QUEST && OP(s) != O_CH);\n\t\t\t/* fallthrough */\n\t\tdefault:\t\t/* things that break a sequence */\n\t\t\tif (newlen > g->mlen) {\t\t/* ends one */\n\t\t\t\tstart = newstart;\n\t\t\t\tg->mlen = newlen;\n\t\t\t}\n\t\t\tnewlen = 0;\n\t\t\tbreak;\n\t\t}\n\t} while (OP(s) != OEND);\n\n\tif (g->mlen == 0)\t\t/* there isn't one */\n\t\treturn;\n\n\t/* turn it into a character string */\n\tg->must = (char*)malloc((size_t)g->mlen + 1);\n\tif (g->must == NULL) {\t\t/* argh; just forget it */\n\t\tg->mlen = 0;\n\t\treturn;\n\t}\n\tcp = g->must;\n\tscan = start;\n\tfor (i = g->mlen; i > 0; i--) {\n\t\twhile (OP(s = *scan++) != OCHAR)\n\t\t\tcontinue;\n\t\tassert(cp < g->must + g->mlen);\n\t\t*cp++ = (char)OPND(s);\n\t}\n\tassert(cp == g->must + g->mlen);\n\t*cp++ = '\\0';\t\t/* just on general principles */\n}\n\n/*\n - pluscount - count + nesting\n */\nstatic sopno\t\t\t/* nesting depth */\npluscount(struct parse *p, struct re_guts *g)\n{\n\tsop *scan;\n\tsop s;\n\tsopno plusnest = 0;\n\tsopno maxnest = 0;\n\n\tif (p->error != 0)\n\t\treturn(0);\t/* there may not be an OEND */\n\n\tscan = g->strip + 1;\n\tdo {\n\t\ts = *scan++;\n\t\tswitch (OP(s)) {\n\t\tcase OPLUS_:\n\t\t\tplusnest++;\n\t\t\tbreak;\n\t\tcase O_PLUS:\n\t\t\tif (plusnest > maxnest)\n\t\t\t\tmaxnest = plusnest;\n\t\t\tplusnest--;\n\t\t\tbreak;\n\t\t}\n\t} while (OP(s) != OEND);\n\tif (plusnest != 0)\n\t\tg->iflags |= BAD;\n\treturn(maxnest);\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regerror.c",
    "content": "/*\t$OpenBSD: regerror.c,v 1.13 2005/08/05 13:03:00 espie Exp $ */\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regerror.c\t8.4 (Berkeley) 3/20/94\n */\n\n#include <sys/types.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <limits.h>\n#include <stdlib.h>\n#include \"./regex.h\"\n\n#include \"utils.h\"\n\nstatic const char *regatoi(const regex_t *, char *, int);\n\nstatic const struct rerr {\n\tint code;\n\tconst char *name;\n\tconst char *explain;\n} rerrs[] = {\n\t{ REG_NOMATCH,\t\"REG_NOMATCH\",\t\"regexec() failed to match\" },\n\t{ REG_BADPAT,\t\"REG_BADPAT\",\t\"invalid regular expression\" },\n\t{ REG_ECOLLATE,\t\"REG_ECOLLATE\",\t\"invalid collating element\" },\n\t{ REG_ECTYPE,\t\"REG_ECTYPE\",\t\"invalid character class\" },\n\t{ REG_EESCAPE,\t\"REG_EESCAPE\",\t\"trailing backslash (\\\\)\" },\n\t{ REG_ESUBREG,\t\"REG_ESUBREG\",\t\"invalid backreference number\" },\n\t{ REG_EBRACK,\t\"REG_EBRACK\",\t\"brackets ([ ]) not balanced\" },\n\t{ REG_EPAREN,\t\"REG_EPAREN\",\t\"parentheses not balanced\" },\n\t{ REG_EBRACE,\t\"REG_EBRACE\",\t\"braces not balanced\" },\n\t{ REG_BADBR,\t\"REG_BADBR\",\t\"invalid repetition count(s)\" },\n\t{ REG_ERANGE,\t\"REG_ERANGE\",\t\"invalid character range\" },\n\t{ REG_ESPACE,\t\"REG_ESPACE\",\t\"out of memory\" },\n\t{ REG_BADRPT,\t\"REG_BADRPT\",\t\"repetition-operator operand invalid\" },\n\t{ REG_EMPTY,\t\"REG_EMPTY\",\t\"empty (sub)expression\" },\n\t{ REG_ASSERT,\t\"REG_ASSERT\",\t\"\\\"can't happen\\\" -- you found a bug\" },\n\t{ REG_INVARG,\t\"REG_INVARG\",\t\"invalid argument to regex routine\" },\n\t{ 0,\t\t\"\",\t\t\"*** unknown regexp error code ***\" }\n};\n\n/*\n - regerror - the interface to error numbers\n = extern size_t regerror(int, const regex_t *, char *, size_t);\n */\n/* ARGSUSED */\nsize_t\nregerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)\n{\n\tconst struct rerr *r;\n\tsize_t len;\n\tint target = errcode &~ REG_ITOA;\n\tconst char *s;\n\tchar convbuf[50];\n\n\tif (errcode == REG_ATOI)\n\t\ts = regatoi(preg, convbuf, sizeof convbuf);\n\telse {\n\t\tfor (r = rerrs; r->code != 0; r++)\n\t\t\tif (r->code == target)\n\t\t\t\tbreak;\n\n\t\tif (errcode&REG_ITOA) {\n\t\t\tif (r->code != 0) {\n\t\t\t\tassert(strlen(r->name) < sizeof(convbuf));\n\t\t\t\t(void) strncpy(convbuf, r->name, sizeof convbuf);\n\t\t\t} else\n\t\t\t\t(void)snprintf(convbuf, sizeof convbuf,\n\t\t\t\t    \"REG_0x%x\", target);\n\t\t\ts = convbuf;\n\t\t} else\n\t\t\ts = r->explain;\n\t}\n\n\tlen = strlen(s) + 1;\n\tif (errbuf_size > 0) {\n\t\tstrncpy(errbuf, s, errbuf_size);\n\t}\n\n\treturn(len);\n}\n\n/*\n - regatoi - internal routine to implement REG_ATOI\n */\nstatic const char *\nregatoi(const regex_t *preg, char *localbuf, int localbufsize)\n{\n\tconst struct rerr *r;\n\n\tfor (r = rerrs; r->code != 0; r++)\n\t\tif (strcmp(r->name, preg->re_endp) == 0)\n\t\t\tbreak;\n\tif (r->code == 0)\n\t\treturn(\"0\");\n\n\t(void)snprintf(localbuf, localbufsize, \"%d\", r->code);\n\treturn(localbuf);\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regex.h",
    "content": "/*\t$OpenBSD: regex.h,v 1.6 2003/06/02 19:34:12 millert Exp $\t*/\n/*\t$NetBSD: regex.h,v 1.4.6.1 1996/06/10 18:57:07 explorer Exp $\t*/\n\n/*-\n * Copyright (c) 1992 Henry Spencer.\n * Copyright (c) 1992, 1993\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer of the University of Toronto.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regex.h\t8.1 (Berkeley) 6/2/93\n */\n\n#ifndef _REGEX_H_\n#define\t_REGEX_H_\n\n#if 0\n#include <sys/cdefs.h>\n#include <sys/types.h>\n#else\n#include <sys/types.h>\n#endif\n\n/* types */\ntypedef off_t regoff_t;\n\ntypedef struct {\n\tint re_magic;\n\tsize_t re_nsub;\t\t/* number of parenthesized subexpressions */\n\tconst char *re_endp;\t/* end pointer for REG_PEND */\n\tstruct re_guts *re_g;\t/* none of your business :-) */\n} regex_t;\n\ntypedef struct {\n\tregoff_t rm_so;\t\t/* start of match */\n\tregoff_t rm_eo;\t\t/* end of match */\n} regmatch_t;\n\n/* regcomp() flags */\n#define\tREG_BASIC\t0000\n#define\tREG_EXTENDED\t0001\n#define\tREG_ICASE\t0002\n#define\tREG_NOSUB\t0004\n#define\tREG_NEWLINE\t0010\n#define\tREG_NOSPEC\t0020\n#define\tREG_PEND\t0040\n#define\tREG_DUMP\t0200\n\n/* regerror() flags */\n#define\tREG_NOMATCH\t 1\n#define\tREG_BADPAT\t 2\n#define\tREG_ECOLLATE\t 3\n#define\tREG_ECTYPE\t 4\n#define\tREG_EESCAPE\t 5\n#define\tREG_ESUBREG\t 6\n#define\tREG_EBRACK\t 7\n#define\tREG_EPAREN\t 8\n#define\tREG_EBRACE\t 9\n#define\tREG_BADBR\t10\n#define\tREG_ERANGE\t11\n#define\tREG_ESPACE\t12\n#define\tREG_BADRPT\t13\n#define\tREG_EMPTY\t14\n#define\tREG_ASSERT\t15\n#define\tREG_INVARG\t16\n#define\tREG_ATOI\t255\t/* convert name to number (!) */\n#define\tREG_ITOA\t0400\t/* convert number to name (!) */\n\n/* regexec() flags */\n#define\tREG_NOTBOL\t00001\n#define\tREG_NOTEOL\t00002\n#define\tREG_STARTEND\t00004\n#define\tREG_TRACE\t00400\t/* tracing of execution */\n#define\tREG_LARGE\t01000\t/* force large representation */\n#define\tREG_BACKR\t02000\t/* force use of backref code */\n\n// __BEGIN_DECLS\nint\tregcomp(regex_t *, const char *, int);\nsize_t\tregerror(int, const regex_t *, char *, size_t);\nint\tregexec(const regex_t *, const char *, size_t, regmatch_t [], int);\nvoid\tregfree(regex_t *);\n// __END_DECLS\n\n#endif /* !_REGEX_H_ */\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regex2.h",
    "content": "/*\t$OpenBSD: regex2.h,v 1.7 2004/11/30 17:04:23 otto Exp $\t*/\n\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regex2.h\t8.4 (Berkeley) 3/20/94\n */\n\n/*\n * internals of regex_t\n */\n#define\tMAGIC1\t((('r'^0200)<<8) | 'e')\n\n/*\n * The internal representation is a *strip*, a sequence of\n * operators ending with an endmarker.  (Some terminology etc. is a\n * historical relic of earlier versions which used multiple strips.)\n * Certain oddities in the representation are there to permit running\n * the machinery backwards; in particular, any deviation from sequential\n * flow must be marked at both its source and its destination.  Some\n * fine points:\n *\n * - OPLUS_ and O_PLUS are *inside* the loop they create.\n * - OQUEST_ and O_QUEST are *outside* the bypass they create.\n * - OCH_ and O_CH are *outside* the multi-way branch they create, while\n *   OOR1 and OOR2 are respectively the end and the beginning of one of\n *   the branches.  Note that there is an implicit OOR2 following OCH_\n *   and an implicit OOR1 preceding O_CH.\n *\n * In state representations, an operator's bit is on to signify a state\n * immediately *preceding* \"execution\" of that operator.\n */\ntypedef unsigned long sop;\t/* strip operator */\ntypedef long sopno;\n#define\tOPRMASK\t0xf8000000LU\n#define\tOPDMASK\t0x07ffffffLU\n#define\tOPSHIFT\t((unsigned)27)\n#define\tOP(n)\t((n)&OPRMASK)\n#define\tOPND(n)\t((n)&OPDMASK)\n#define\tSOP(op, opnd)\t((op)|(opnd))\n/* operators\t\t\t   meaning\toperand\t\t\t*/\n/*\t\t\t\t\t\t(back, fwd are offsets)\t*/\n#define\tOEND\t(1LU<<OPSHIFT)\t/* endmarker\t-\t\t\t*/\n#define\tOCHAR\t(2LU<<OPSHIFT)\t/* character\tunsigned char\t\t*/\n#define\tOBOL\t(3LU<<OPSHIFT)\t/* left anchor\t-\t\t\t*/\n#define\tOEOL\t(4LU<<OPSHIFT)\t/* right anchor\t-\t\t\t*/\n#define\tOANY\t(5LU<<OPSHIFT)\t/* .\t\t-\t\t\t*/\n#define\tOANYOF\t(6LU<<OPSHIFT)\t/* [...]\tset number\t\t*/\n#define\tOBACK_\t(7LU<<OPSHIFT)\t/* begin \\d\tparen number\t\t*/\n#define\tO_BACK\t(8LU<<OPSHIFT)\t/* end \\d\tparen number\t\t*/\n#define\tOPLUS_\t(9LU<<OPSHIFT)\t/* + prefix\tfwd to suffix\t\t*/\n#define\tO_PLUS\t(10LU<<OPSHIFT)\t/* + suffix\tback to prefix\t\t*/\n#define\tOQUEST_\t(11LU<<OPSHIFT)\t/* ? prefix\tfwd to suffix\t\t*/\n#define\tO_QUEST\t(12LU<<OPSHIFT)\t/* ? suffix\tback to prefix\t\t*/\n#define\tOLPAREN\t(13LU<<OPSHIFT)\t/* (\t\tfwd to )\t\t*/\n#define\tORPAREN\t(14LU<<OPSHIFT)\t/* )\t\tback to (\t\t*/\n#define\tOCH_\t(15LU<<OPSHIFT)\t/* begin choice\tfwd to OOR2\t\t*/\n#define\tOOR1\t(16LU<<OPSHIFT)\t/* | pt. 1\tback to OOR1 or OCH_\t*/\n#define\tOOR2\t(17LU<<OPSHIFT)\t/* | pt. 2\tfwd to OOR2 or O_CH\t*/\n#define\tO_CH\t(18LU<<OPSHIFT)\t/* end choice\tback to OOR1\t\t*/\n#define\tOBOW\t(19LU<<OPSHIFT)\t/* begin word\t-\t\t\t*/\n#define\tOEOW\t(20LU<<OPSHIFT)\t/* end word\t-\t\t\t*/\n\n/*\n * Structure for [] character-set representation.  Character sets are\n * done as bit vectors, grouped 8 to a byte vector for compactness.\n * The individual set therefore has both a pointer to the byte vector\n * and a mask to pick out the relevant bit of each byte.  A hash code\n * simplifies testing whether two sets could be identical.\n *\n * This will get trickier for multicharacter collating elements.  As\n * preliminary hooks for dealing with such things, we also carry along\n * a string of multi-character elements, and decide the size of the\n * vectors at run time.\n */\ntypedef struct {\n\tuch *ptr;\t\t/* -> uch [csetsize] */\n\tuch mask;\t\t/* bit within array */\n\tuch hash;\t\t/* hash code */\n\tsize_t smultis;\n\tchar *multis;\t\t/* -> char[smulti]  ab\\0cd\\0ef\\0\\0 */\n} cset;\n/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */\n#define\tCHadd(cs, c)\t((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c))\n#define\tCHsub(cs, c)\t((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c))\n#define\tCHIN(cs, c)\t((cs)->ptr[(uch)(c)] & (cs)->mask)\n#define\tMCadd(p, cs, cp)\tmcadd(p, cs, cp)\t/* regcomp() internal fns */\n#define\tMCsub(p, cs, cp)\tmcsub(p, cs, cp)\n#define\tMCin(p, cs, cp)\tmcin(p, cs, cp)\n\n/* stuff for character categories */\ntypedef unsigned char cat_t;\n\n/*\n * main compiled-expression structure\n */\nstruct re_guts {\n\tint magic;\n#\t\tdefine\tMAGIC2\t((('R'^0200)<<8)|'E')\n\tsop *strip;\t\t/* malloced area for strip */\n\tint csetsize;\t\t/* number of bits in a cset vector */\n\tint ncsets;\t\t/* number of csets in use */\n\tcset *sets;\t\t/* -> cset [ncsets] */\n\tuch *setbits;\t\t/* -> uch[csetsize][ncsets/CHAR_BIT] */\n\tint cflags;\t\t/* copy of regcomp() cflags argument */\n\tsopno nstates;\t\t/* = number of sops */\n\tsopno firststate;\t/* the initial OEND (normally 0) */\n\tsopno laststate;\t/* the final OEND */\n\tint iflags;\t\t/* internal flags */\n#\t\tdefine\tUSEBOL\t01\t/* used ^ */\n#\t\tdefine\tUSEEOL\t02\t/* used $ */\n#\t\tdefine\tBAD\t04\t/* something wrong */\n\tint nbol;\t\t/* number of ^ used */\n\tint neol;\t\t/* number of $ used */\n\tint ncategories;\t/* how many character categories */\n\tcat_t *categories;\t/* ->catspace[-CHAR_MIN] */\n\tchar *must;\t\t/* match must contain this string */\n\tint mlen;\t\t/* length of must */\n\tsize_t nsub;\t\t/* copy of re_nsub */\n\tint backrefs;\t\t/* does it use back references? */\n\tsopno nplus;\t\t/* how deep does it nest +s? */\n\t/* catspace must be last */\n\tcat_t catspace[1];\t/* actually [NC] */\n};\n\n/* misc utilities */\n#define\tOUT\t(CHAR_MAX+1)\t/* a non-character value */\n#define\tISWORD(c)\t(isalnum(c) || (c) == '_')\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regexec.c",
    "content": "/*\t$OpenBSD: regexec.c,v 1.11 2005/08/05 13:03:00 espie Exp $ */\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regexec.c\t8.3 (Berkeley) 3/20/94\n */\n\n/*\n * the outer shell of regexec()\n *\n * This file includes engine.c *twice*, after muchos fiddling with the\n * macros that code uses.  This lets the same code operate on two different\n * representations for state sets.\n */\n#include <sys/types.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <limits.h>\n#include <ctype.h>\n#include \"./regex.h\"\n\n#include \"utils.h\"\n#include \"./regex2.h\"\n\n/* macros for manipulating states, small version */\n#define\tstates\tlong\n#define\tstates1\tstates\t\t/* for later use in regexec() decision */\n#define\tCLEAR(v)\t((v) = 0)\n#define\tSET0(v, n)\t((v) &= ~((unsigned long)1 << (n)))\n#define\tSET1(v, n)\t((v) |= (unsigned long)1 << (n))\n#define\tISSET(v, n)\t(((v) & ((unsigned long)1 << (n))) != 0)\n#define\tASSIGN(d, s)\t((d) = (s))\n#define\tEQ(a, b)\t((a) == (b))\n#define\tSTATEVARS\tlong dummy\t/* dummy version */\n#define\tSTATESETUP(m, n)\t/* nothing */\n#define\tSTATETEARDOWN(m)\t/* nothing */\n#define\tSETUP(v)\t((v) = 0)\n#define\tonestate\tlong\n#define\tINIT(o, n)\t((o) = (unsigned long)1 << (n))\n#define\tINC(o)\t\t((o) <<= 1)\n#define\tISSTATEIN(v, o)\t(((v) & (o)) != 0)\n/* some abbreviations; note that some of these know variable names! */\n/* do \"if I'm here, I can also be there\" etc without branches */\n#define\tFWD(dst, src, n)\t((dst) |= ((unsigned long)(src)&(here)) << (n))\n#define\tBACK(dst, src, n)\t((dst) |= ((unsigned long)(src)&(here)) >> (n))\n#define\tISSETBACK(v, n)\t\t(((v) & ((unsigned long)here >> (n))) != 0)\n/* function names */\n#define SNAMES\t\t\t/* engine.c looks after details */\n\n#include \"engine.c\"\n\n/* now undo things */\n#undef\tstates\n#undef\tCLEAR\n#undef\tSET0\n#undef\tSET1\n#undef\tISSET\n#undef\tASSIGN\n#undef\tEQ\n#undef\tSTATEVARS\n#undef\tSTATESETUP\n#undef\tSTATETEARDOWN\n#undef\tSETUP\n#undef\tonestate\n#undef\tINIT\n#undef\tINC\n#undef\tISSTATEIN\n#undef\tFWD\n#undef\tBACK\n#undef\tISSETBACK\n#undef\tSNAMES\n\n/* macros for manipulating states, large version */\n#define\tstates\tchar *\n#define\tCLEAR(v)\tmemset(v, 0, m->g->nstates)\n#define\tSET0(v, n)\t((v)[n] = 0)\n#define\tSET1(v, n)\t((v)[n] = 1)\n#define\tISSET(v, n)\t((v)[n])\n#define\tASSIGN(d, s)\tmemcpy(d, s, m->g->nstates)\n#define\tEQ(a, b)\t(memcmp(a, b, m->g->nstates) == 0)\n#define\tSTATEVARS\tlong vn; char *space\n#define\tSTATESETUP(m, nv)\t{ (m)->space = (char*)malloc((nv)*(m)->g->nstates); \\\n\t\t\t\tif ((m)->space == NULL) return(REG_ESPACE); \\\n\t\t\t\t(m)->vn = 0; }\n#define\tSTATETEARDOWN(m)\t{ free((m)->space); }\n#define\tSETUP(v)\t((v) = &m->space[m->vn++ * m->g->nstates])\n#define\tonestate\tlong\n#define\tINIT(o, n)\t((o) = (n))\n#define\tINC(o)\t((o)++)\n#define\tISSTATEIN(v, o)\t((v)[o])\n/* some abbreviations; note that some of these know variable names! */\n/* do \"if I'm here, I can also be there\" etc without branches */\n#define\tFWD(dst, src, n)\t((dst)[here+(n)] |= (src)[here])\n#define\tBACK(dst, src, n)\t((dst)[here-(n)] |= (src)[here])\n#define\tISSETBACK(v, n)\t((v)[here - (n)])\n/* function names */\n#define\tLNAMES\t\t\t/* flag */\n\n#include \"engine.c\"\n\n/*\n - regexec - interface for matching\n *\n * We put this here so we can exploit knowledge of the state representation\n * when choosing which matcher to call.  Also, by this point the matchers\n * have been prototyped.\n */\nint\t\t\t\t/* 0 success, REG_NOMATCH failure */\nregexec(const regex_t *preg, const char *string, size_t nmatch,\n    regmatch_t pmatch[], int eflags)\n{\n\tstruct re_guts *g = preg->re_g;\n#ifdef REDEBUG\n#\tdefine\tGOODFLAGS(f)\t(f)\n#else\n#\tdefine\tGOODFLAGS(f)\t((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND))\n#endif\n\n\tif (preg->re_magic != MAGIC1 || g->magic != MAGIC2)\n\t\treturn(REG_BADPAT);\n\tassert(!(g->iflags&BAD));\n\tif (g->iflags&BAD)\t\t/* backstop for no-debug case */\n\t\treturn(REG_BADPAT);\n\teflags = GOODFLAGS(eflags);\n\n\tif (g->nstates <= (int)(CHAR_BIT*sizeof(states1)) && !(eflags&REG_LARGE))\n\t\treturn(smatcher(g, (char *)string, nmatch, pmatch, eflags));\n\telse\n\t\treturn(lmatcher(g, (char *)string, nmatch, pmatch, eflags));\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/regfree.c",
    "content": "/*\t$OpenBSD: regfree.c,v 1.7 2005/08/05 13:03:00 espie Exp $ */\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)regfree.c\t8.3 (Berkeley) 3/20/94\n */\n\n#include <sys/types.h>\n#include <stdio.h>\n#include <stdlib.h>\n// #include <regex.h>\n#include \"./regex.h\"\n\n#include \"utils.h\"\n// #include \"regex2.h\"\n#include \"./regex2.h\"\n\n/*\n - regfree - free everything\n */\nvoid\nregfree(regex_t *preg)\n{\n\tstruct re_guts *g;\n\n\tif (preg->re_magic != MAGIC1)\t/* oops */\n\t\treturn;\t\t\t/* nice to complain, but hard */\n\n\tg = preg->re_g;\n\tif (g == NULL || g->magic != MAGIC2)\t/* oops again */\n\t\treturn;\n\tpreg->re_magic = 0;\t\t/* mark it invalid */\n\tg->magic = 0;\t\t\t/* mark it invalid */\n\n\tif (g->strip != NULL)\n\t\tfree((char *)g->strip);\n\tif (g->sets != NULL)\n\t\tfree((char *)g->sets);\n\tif (g->setbits != NULL)\n\t\tfree((char *)g->setbits);\n\tif (g->must != NULL)\n\t\tfree(g->must);\n\tfree((char *)g);\n}\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/targetver.h",
    "content": "#pragma once\r\n\r\n// The following macros define the minimum required platform.  The minimum required platform\r\n// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run \r\n// your application.  The macros work by enabling all features available on platform versions up to and \r\n// including the version specified.\r\n\r\n// Modify the following defines if you have to target a platform prior to the ones specified below.\r\n// Refer to MSDN for the latest info on corresponding values for different platforms.\r\n#ifndef _WIN32_WINNT            // Specifies that the minimum required platform is Windows Vista.\r\n#define _WIN32_WINNT 0x0600     // Change this to the appropriate value to target other versions of Windows.\r\n#endif\r\n\r\n"
  },
  {
    "path": "sources/host-tools/ndk-stack/regex/utils.h",
    "content": "/*\t$OpenBSD: utils.h,v 1.4 2003/06/02 20:18:36 millert Exp $\t*/\n\n/*-\n * Copyright (c) 1992, 1993, 1994 Henry Spencer.\n * Copyright (c) 1992, 1993, 1994\n *\tThe Regents of the University of California.  All rights reserved.\n *\n * This code is derived from software contributed to Berkeley by\n * Henry Spencer.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n *\t@(#)utils.h\t8.3 (Berkeley) 3/20/94\n */\n\n/* utility definitions */\n#define\tDUPMAX\t\t255\n#define\tINFINITY\t(DUPMAX + 1)\n#define\tNC\t\t(CHAR_MAX - CHAR_MIN + 1)\ntypedef unsigned char uch;\n\n/* switch off assertions (if not already off) if no REDEBUG */\n#ifndef REDEBUG\n#ifndef NDEBUG\n#define\tNDEBUG\t/* no assertions please */\n#endif\n#endif\n#include <assert.h>\n\n/* for old systems with bcopy() but no memmove() */\n#ifdef USEBCOPY\n#define\tmemmove(d, s, c)\tbcopy(s, d, c)\n#endif\n"
  },
  {
    "path": "sources/host-tools/toolbox/NOTICE",
    "content": "Copyright (C) 2016 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "sources/host-tools/toolbox/build-toolbox.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2011, 2014 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n#  This shell script is used to rebuild the toolbox programs which sources\n#  are under $NDK/sources/host-tools/toolbox\n#\n\n# include common function and variable definitions\n. $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\n. $NDK_BUILDTOOLS_PATH/builder-funcs.sh\n\nPROGRAM_PARAMETERS=\"\"\n\nPROGRAM_DESCRIPTION=\\\n\"Rebuild the prebuilt host toolbox binaries for the Android NDK.\n\nThese are simple command-line programs used by the NDK build script.\n\nBy default, this will try to place the binaries inside the current NDK\ndirectory, unless you use the --ndk-dir=<path> option.\n\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Put prebuilt tarballs into <path>.\"\n\nNDK_DIR=\nregister_var_option \"--ndk-dir=<path>\" NDK_DIR \"Specify NDK root path for the build.\"\n\nBUILD_DIR=\nOPTION_BUILD_DIR=\nregister_var_option \"--build-dir=<path>\" OPTION_BUILD_DIR \"Specify temporary build dir.\"\n\nNO_MAKEFILE=\nregister_var_option \"--no-makefile\" NO_MAKEFILE \"Do not use makefile to speed-up build\"\n\nPACKAGE_DIR=\nregister_var_option \"--package-dir=<path>\" PACKAGE_DIR \"Archive binaries into package directory\"\n\nregister_jobs_option\nregister_try64_option\n\nextract_parameters \"$@\"\n\n#\n# Try cached package\n#\n# This script is run only for windows* systems.\n# Since MINGW is not set here the 'set_cache_tag function works incorrectly.\n# Hence we're setting cache host tag directly.\n#\nif [ \"$TRY64\" = \"yes\" ]; then\n    CACHE_HOST_TAG=windows-x86_64\nelse\n    CACHE_HOST_TAG=windows\nfi\nARCHIVE=toolbox-$CACHE_HOST_TAG.tar.xz\nif [ \"$PACKAGE_DIR\" ]; then\n    # will exit if cached package found\n    try_cached_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\nfi\n\n#\n# Rebuild from scratch\n#\n\n# Handle NDK_DIR\nif [ -z \"$NDK_DIR\" ] ; then\n    NDK_DIR=$ANDROID_NDK_ROOT\n    log \"Auto-config: --ndk-dir=$NDK_DIR\"\nelse\n    if [ ! -d \"$NDK_DIR\" ] ; then\n        echo \"ERROR: NDK directory does not exists: $NDK_DIR\"\n        exit 1\n    fi\nfi\n\nif [ -z \"$OPTION_BUILD_DIR\" ]; then\n    BUILD_DIR=$NDK_TMPDIR/build-toolbox\n    log \"Auto-config: --build-dir=$BUILD_DIR\"\n    rm -rf $BUILD_DIR/* && mkdir -p $BUILD_DIR\nelse\n    BUILD_DIR=$OPTION_BUILD_DIR\nfi\nmkdir -p \"$BUILD_DIR\"\nfail_panic \"Could not create build directory: $BUILD_DIR\"\n\nif [ -z \"$NO_MAKEFILE\" ]; then\n    MAKEFILE=$BUILD_DIR/Makefile\nelse\n    MAKEFILE=\nfi\n\nTOOLBOX_SRCDIR=$ANDROID_NDK_ROOT/sources/host-tools/toolbox\n\nBUILD_WINDOWS_SOURCES=yes\n\nif [ \"$BUILD_WINDOWS_SOURCES\" ]; then\n    ORIGINAL_HOST_TAG=$HOST_TAG\n    MINGW=yes\n    handle_canadian_build\n    prepare_canadian_toolchain $BUILD_DIR\n\n    SUBDIR=$(get_prebuilt_install_prefix $HOST_TAG)/bin\n    DSTDIR=$NDK_DIR/$SUBDIR\n    mkdir -p \"$DSTDIR\"\n    fail_panic \"Could not create destination directory: $DSTDIR\"\n\n    # Build echo.exe\n    HOST_TAG=$ORIGINAL_HOST_TAG\n    builder_begin_host \"$BUILD_DIR\" \"$MAKEFILE\"\n    builder_set_srcdir \"$TOOLBOX_SRCDIR\"\n    builder_set_dstdir \"$DSTDIR\"\n    builder_sources echo_win.c\n    builder_host_executable echo\n    builder_end\n\n    # Build cmp.exe\n    HOST_TAG=$ORIGINAL_HOST_TAG\n    builder_begin_host \"$BUILD_DIR\" \"$MAKEFILE\"\n    builder_set_srcdir \"$TOOLBOX_SRCDIR\"\n    builder_set_dstdir \"$DSTDIR\"\n    builder_sources cmp_win.c\n    builder_host_executable cmp\n    builder_end\n\n    if [ \"$PACKAGE_DIR\" ]; then\n        assert_cache_host_tag\n        dump \"Packaging : $ARCHIVE\"\n        pack_archive \"$PACKAGE_DIR/$ARCHIVE\" \"$NDK_DIR\" \"$SUBDIR/echo.exe\" \"$SUBDIR/cmp.exe\"\n        fail_panic \"Could not package toolbox binaires\"\n        cache_package \"$PACKAGE_DIR\" \"$ARCHIVE\"\n    fi\nfi\n"
  },
  {
    "path": "sources/host-tools/toolbox/build.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Builds NDK toolbox.\n\nToolbox is just a POSIX compatible cmp.exe and echo.exe for Windows.\n\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport site\nimport sys\n\nsite.addsitedir(os.path.join(os.path.dirname(__file__), '../../../build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef main(args):\n    if args.host not in ('windows', 'windows64'):\n        sys.exit('Toolbox is only for Windows hosts.')\n\n    build_cmd = [\n        'bash', 'build-toolbox.sh',\n    ]\n\n    if args.host != 'windows':\n        build_cmd.append('--try-64')\n\n    build_support.build(build_cmd, args, intermediate_package=True)\n\nif __name__ == '__main__':\n    build_support.run(main)\n"
  },
  {
    "path": "sources/host-tools/toolbox/cmp_win.c",
    "content": "/*\n * Copyright (C) 2011 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/* To avoid many issues, always build this as a Unicode program */\n#define UNICODE 1\n#define _UNICODE 1\n#include <windows.h>\n#include <tchar.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n/* A brain-dead 'cmp' toolbox program for Windows, because comp.exe\n * can't be silenced and doesn't return meaningful status code\n */\n\nint main(void)\n{\n    int argc;\n    TCHAR** argv = CommandLineToArgvW(GetCommandLine(), &argc);\n\n    /* IMPORTANT: cmp only accepts optional -s as the first option, followed by two file\n     *            name.  Note that regardless \"-s\" this cmp always operate in silent mode\n     */\n    if (argc > 1 && argv[1][0] == L'-' && argv[1][1] == L's' && argv[1][2] == L'\\0') {\n        argc--;\n        argv++;\n    }\n    if (argc != 3) {\n        _tprintf(L\"Usage: cmp [-s] file1 file2\\n\");\n        exit(1);\n    }\n    FILE *f1 = _tfopen(argv[1], L\"rb\");\n    if (!f1) {\n        _tprintf(L\"ERROR: can't open file %s\\n\", argv[1]);\n        exit(1);\n    }\n    FILE *f2 = _tfopen(argv[2], L\"rb\");\n    if (!f2) {\n        _tprintf(L\"ERROR: can't open file %s\\n\", argv[2]);\n        fclose(f1);\n        exit(1);\n    }\n    #define BUFSIZE 4096\n    char buf1[BUFSIZE], buf2[BUFSIZE];\n    int n1, n2, ret = 0;\n    do {\n        n1 = fread(buf1, 1, BUFSIZE, f1);\n        n2 = fread(buf2, 1, BUFSIZE, f2);\n        ret = (n1 != n2) || memcmp(buf1, buf2, n1) != 0;\n    } while (!ret && n1 == BUFSIZE);\n    fclose(f1);\n    fclose(f2);\n\n    return ret;\n}\n"
  },
  {
    "path": "sources/host-tools/toolbox/echo_win.c",
    "content": "/*\n * Copyright (C) 2011 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/* To avoid many issues, always build this as a Unicode program */\n#define UNICODE 1\n#define _UNICODE 1\n#include <windows.h>\n#include <tchar.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n/* A brain-dead 'echo' toolbox program for Windows, because the cmd.exe\n * 'echo' command is too weird to be usable with the NDK.\n */\n\nint main(void)\n{\n    int flagNoNewline = 0;\n    int argc;\n    TCHAR** argv = CommandLineToArgvW(GetCommandLine(), &argc);\n\n    int nn;\n\n    /* IMPORTANT: echo should only accept -n as a first option, everything\n     * else must be treated as part of the input string.\n     */\n    if (argc > 1 && argv[1][0] == L'-' && argv[1][1] == L'n' && argv[1][2] == L'\\0') {\n        flagNoNewline = 1;\n        argc--;\n        argv++;\n    }\n\n    const TCHAR* comma = L\"\";\n    while (argc > 1) {\n        _tprintf(L\"%s%s\", comma, argv[1]);\n        comma = L\" \";\n        argc--;\n        argv++;\n    }\n\n    if (!flagNoNewline)\n        _tprintf(L\"\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "sources/objc/cocotron/0.1.0/.gitignore",
    "content": "frameworks/*/*.framework\n"
  },
  {
    "path": "sources/objc/cocotron/0.1.0/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ndefine add-framework\nifneq (,$(filter $(2),$(TARGET_ARCH_ABI)))\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := $(1)\nLOCAL_SRC_FILES := frameworks/$(TARGET_ARCH_ABI)/$(1).framework/Versions/Current/lib$(1).so\nLOCAL_EXPORT_CFLAGS := -F$(LOCAL_PATH)/frameworks/$(TARGET_ARCH_ABI) -framework $(1)\nsinclude $(LOCAL_PATH)/frameworks/$(TARGET_ARCH_ABI)/$(1).framework/deps.mk\nLOCAL_SHARED_LIBRARIES += objc2rt_shared\nLOCAL_EXPORT_LDLIBS := -llog -lGLESv2\ninclude $(PREBUILT_SHARED_LIBRARY)\nendif\nendef\n\n$(foreach __abi,\\\n    $(foreach __dir,$(wildcard $(LOCAL_PATH)/frameworks/*),$(notdir $(__dir)) ),\\\n    $(foreach __f,$(wildcard $(LOCAL_PATH)/frameworks/$(__abi)/*.framework),\\\n        $(eval $(call add-framework,$(patsubst %.framework,%,$(notdir $(__f))),$(__abi)))\\\n    )\\\n)\n\n$(call import-module,objc/gnustep-libobjc2)\n"
  },
  {
    "path": "sources/objc/gnustep-libobjc2/.gitignore",
    "content": "include/\nlibs/\n"
  },
  {
    "path": "sources/objc/gnustep-libobjc2/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n#include $(CLEAR_VARS)\n#LOCAL_MODULE := objc2rt_static\n#LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libobjc.a\n#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include\n#include $(PREBUILT_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := objc2rt_shared\nLOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libobjc.so\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include\ninclude $(PREBUILT_SHARED_LIBRARY)\n"
  },
  {
    "path": "sources/objc/none/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libobjcnone\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/.gitignore",
    "content": "include/\nshared/\nstatic/\n"
  },
  {
    "path": "sources/python/2.7/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_shared\nLOCAL_SRC_FILES := shared/$(TARGET_ARCH_ABI)/libs/libpython2.7.so\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/python\ninclude $(PREBUILT_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_static\nLOCAL_SRC_FILES := static/libs/$(TARGET_ARCH_ABI)/libpython2.7.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/python\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/_ctypes/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__ctypes\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7__ctypes.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/_multiprocessing/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__multiprocessing\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7__multiprocessing.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/_socket/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__socket\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7__socket.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/_sqlite3/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__sqlite3\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7__sqlite3.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/_ssl/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__ssl\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7__ssl.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/pyexpat/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_pyexpat\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7_pyexpat.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/select/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_select\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7_select.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/stdlib/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_stdlib_static\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7_stdlib.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/2.7/frozen/unicodedata/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_unicodedata\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython2.7_unicodedata.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/.gitignore",
    "content": "include/\nshared/\nstatic/\n"
  },
  {
    "path": "sources/python/3.5/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_shared\nLOCAL_SRC_FILES := shared/$(TARGET_ARCH_ABI)/libs/libpython3.5m.so\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/python\ninclude $(PREBUILT_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_static\nLOCAL_SRC_FILES := static/libs/$(TARGET_ARCH_ABI)/libpython3.5m.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/python\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/_ctypes/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__ctypes\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5__ctypes.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/_multiprocessing/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__multiprocessing\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5__multiprocessing.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/_socket/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__socket\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5__socket.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/_sqlite3/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__sqlite3\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5__sqlite3.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/_ssl/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module__ssl\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5__ssl.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/pyexpat/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_pyexpat\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5_pyexpat.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/select/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_select\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5_select.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/stdlib/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_stdlib_static\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5_stdlib.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/python/3.5/frozen/unicodedata/Android.mk",
    "content": "# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := python_module_unicodedata\nLOCAL_SRC_FILES := ../../static/libs/$(TARGET_ARCH_ABI)/libpython3.5_unicodedata.a\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/python $(LOCAL_PATH)/../../include/frozen\ninclude $(PREBUILT_STATIC_LIBRARY)\n"
  },
  {
    "path": "sources/third_party/googletest/Android.mk",
    "content": "# Copyright (C) 2013 The Android Open Source Project\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nLOCAL_PATH := $(call my-dir)/googletest\n\n# Common definitions\n\ngoogletest_includes := $(LOCAL_PATH)/include\n\ngoogletest_sources := \\\n  src/gtest-death-test.cc \\\n  src/gtest-filepath.cc \\\n  src/gtest-port.cc \\\n  src/gtest-printers.cc \\\n  src/gtest-test-part.cc \\\n  src/gtest-typed-test.cc \\\n  src/gtest.cc\n\ngoogletest_main_sources := \\\n  src/gtest_main.cc\n\n# GoogleTest library modules.\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_static\nLOCAL_SRC_FILES := $(googletest_sources)\nLOCAL_C_INCLUDES := $(googletest_includes)\nLOCAL_EXPORT_C_INCLUDES := $(googletest_includes)\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_shared\nLOCAL_SRC_FILES := $(googletest_sources)\nLOCAL_C_INCLUDES := $(googletest_includes)\nLOCAL_CFLAGS := -DGTEST_CREATE_SHARED_LIBRARY\nLOCAL_EXPORT_C_INCLUDES := $(googletest_includes)\ninclude $(BUILD_SHARED_LIBRARY)\n\n# GoogleTest 'main' helper modules.\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_main\nLOCAL_SRC_FILES := $(googletest_main_sources)\nLOCAL_STATIC_LIBRARIES := googletest_static\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_main_shared\nLOCAL_SRC_FILES := $(googletest_main_sources)\nLOCAL_SHARED_LIBRARIES := googletest_shared\ninclude $(BUILD_STATIC_LIBRARY)\n\n# The GoogleTest test programs.\n#\n\n# The unit test suite itself.\n# This excludes tests that require a Python wrapper to run properly.\n# Note that this is _very_ slow to compile :)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_unittest\n\n# IMPORTANT: The test looks at the name of its executable and expects\n# the following. Otherwise OutputFileHelpersTest.GetCurrentExecutableName\n# will FAIL.\n#\nLOCAL_MODULE_FILENAME := gtest_all_test\nLOCAL_SRC_FILES := \\\n    test/gtest-filepath_test.cc \\\n    test/gtest-linked_ptr_test.cc \\\n    test/gtest-message_test.cc \\\n    test/gtest-options_test.cc \\\n    test/gtest-port_test.cc \\\n    test/gtest_pred_impl_unittest.cc \\\n    test/gtest_prod_test.cc \\\n    test/gtest-test-part_test.cc \\\n    test/gtest-typed-test_test.cc \\\n    test/gtest-typed-test2_test.cc \\\n    test/gtest_unittest.cc \\\n    test/production.cc\nLOCAL_STATIC_LIBRARIES := googletest_main\ninclude $(BUILD_EXECUTABLE)\n\n# The GoogleTest samples.\n# These are much quicker to build and run.\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_1\nLOCAL_SRC_FILES := \\\n    samples/sample1.cc \\\n    samples/sample1_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_2\nLOCAL_SRC_FILES := \\\n    samples/sample2.cc \\\n    samples/sample2_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_3\nLOCAL_SRC_FILES := \\\n    samples/sample3_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_4\nLOCAL_SRC_FILES := \\\n    samples/sample4.cc \\\n    samples/sample4_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_5\nLOCAL_SRC_FILES := \\\n    samples/sample1.cc \\\n    samples/sample5_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_6\nLOCAL_SRC_FILES := \\\n    samples/sample6_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_7\nLOCAL_SRC_FILES := \\\n    samples/sample7_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_8\nLOCAL_SRC_FILES := \\\n    samples/sample8_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := googletest_sample_9\nLOCAL_SRC_FILES := \\\n    samples/sample9_unittest.cc\nLOCAL_STATIC_LIBRARIES := googletest_main_shared\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "sources/third_party/googletest/README.NDK",
    "content": "This is a working copy of GoogleTest for the Android NDK.\n\nProject: https://code.google.com/p/googletest/\nCheckout: svn checkout http://googletest.googlecode.com/svn/trunk@653\nPatches: See patches.ndk/\nLicensing: 3-clause BSD. See googletest/LICENSE file.\n\nNote that the latest official release to date (1.6.0) doesn't work\ntoo well with Android. This is based on a more recent revision that\nincludes many needed bugfixes.\n\nUsage:\n------\n\nThis directory contains several module definitions that can be imported\ninto your project by using the following at the end of your Android.mk:\n\n  $(call import-module,third_party/googletest)\n\nThe GoogleTest modules are the following:\n\n  googletest_static:\n    GoogleTest as a static library.\n\n  googletest_shared:\n    GoogleTest as a shared library.\n\n  googletest_main:\n    A small helper static library that provides a main() implementation\n    that starts all the GoogleTest tests. This also links against\n    googletest_static.\n\n  googletest_main_shared:\n    Same as googletest_main, but links against googletest_shared.\n\nIn your source code, use #include <gtest/gtest.h> as usual after ensuring\nyour module depends on one of the modules above.\n\nHere's an fictuous example:\n\njni/Android.mk:\n  LOCAL_PATH := $(call my-dir)\n\n  include $(CLEAR_VARS)\n  LOCAL_MODULE := foo\n  LOCAL_SRC_FILES := foo.cpp\n  include $(BUILD_SHARED_LIBRARY)\n\n  include $(CLEAR_VARS)\n  LOCAL_MODULE := foo_unittest\n  LOCAL_SRC_FILES := foo_unittest.cpp\n  LOCAL_SHARED_LIBRARIES := foo\n  LOCAL_STATIC_LIBRARIES := googletest_main\n  include $(BUILD_EXECUTABLE)\n\n  $(call import-module,third_party/googletest)\n\njni/Application.mk:\n  APP_STL := gnustl_shared\n\njni/foo.cpp:\n  int foo(int x, int y) {\n    return x + y;\n  }\n\njni/foo.h:\n  extern int foo(int x, int y);\n\njni/foo_unittest.cc:\n  #include <gtest/gtest.h>\n\n  #include \"foo.h\"\n\n  TEST(FooTest,ZeroZero) {\n    EXPECT_EQ(0, foo(0, 0));\n  }\n\n  TEST(FooTest,OneOne) {\n    EXPECT_EQ(2, foo(1, 1));\n  }\n\nInvoking 'ndk-build' will build both 'libfoo.so' and 'foo_unittest' under\n$PROJECT/libs/$ABI/. After this, to run the unit test program push it to\nthe device and execute it with ADB, e.g.:\n\n  adb push libs/armeabi/libfoo.so /data/local/tmp/\n  adb push libs/armeabi/libgnustl_shared.so /data/local/tmp/\n  adb push libs/armeabi/foo_unittest /data/local/tmp/\n  adb shell chmod 775 /data/local/tmp/foo_unittest\n  adb shell \"LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/foo_unittest\"\n\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/CHANGES",
    "content": "Changes for 1.7.0:\n\n* New feature: death tests are supported on OpenBSD and in iOS\n  simulator now.\n* New feature: Test::RecordProperty() can now be used outside of the\n  lifespan of a test method, in which case it will be attributed to\n  the current test case or the test program in the XML report.\n* New feature (potentially breaking): --gtest_list_tests now prints\n  the type parameters and value parameters for each test.\n* Improvement: char pointers and char arrays are now escaped properly\n  in failure messages.\n* Improvement: failure summary in XML reports now includes file and\n  line information.\n* Improvement: the <testsuites> XML element now has a timestamp attribute.\n* Fixed the bug where long --gtest_filter flag values are truncated in\n  death tests.\n* Potentially breaking change: RUN_ALL_TESTS() is now implemented as a\n  function instead of a macro in order to work better with Clang.\n* Compatibility fixes with C++ 11 and various platforms.\n* Bug/warning fixes.\n\nChanges for 1.6.0:\n\n* New feature: ADD_FAILURE_AT() for reporting a test failure at the\n  given source location -- useful for writing testing utilities.\n* New feature: the universal value printer is moved from Google Mock\n  to Google Test.\n* New feature: type parameters and value parameters are reported in\n  the XML report now.\n* A gtest_disable_pthreads CMake option.\n* Colored output works in GNU Screen sessions now.\n* Parameters of value-parameterized tests are now printed in the\n  textual output.\n* Failures from ad hoc test assertions run before RUN_ALL_TESTS() are\n  now correctly reported.\n* Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to\n  ostream.\n* More complete handling of exceptions.\n* GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter\n  name is already used by another library.\n* --gtest_catch_exceptions is now true by default, allowing a test\n  program to continue after an exception is thrown.\n* Value-parameterized test fixtures can now derive from Test and\n  WithParamInterface<T> separately, easing conversion of legacy tests.\n* Death test messages are clearly marked to make them more\n  distinguishable from other messages.\n* Compatibility fixes for Android, Google Native Client, MinGW, HP UX,\n  PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear),\n  IBM XL C++ (Visual Age C++), and C++0x.\n* Bug fixes and implementation clean-ups.\n* Potentially incompatible changes: disables the harmful 'make install'\n  command in autotools.\n\nChanges for 1.5.0:\n\n * New feature: assertions can be safely called in multiple threads\n   where the pthreads library is available.\n * New feature: predicates used inside EXPECT_TRUE() and friends\n   can now generate custom failure messages.\n * New feature: Google Test can now be compiled as a DLL.\n * New feature: fused source files are included.\n * New feature: prints help when encountering unrecognized Google Test flags.\n * Experimental feature: CMake build script (requires CMake 2.6.4+).\n * Experimental feature: the Pump script for meta programming.\n * double values streamed to an assertion are printed with enough precision\n   to differentiate any two different values.\n * Google Test now works on Solaris and AIX.\n * Build and test script improvements.\n * Bug fixes and implementation clean-ups.\n\n Potentially breaking changes:\n\n * Stopped supporting VC++ 7.1 with exceptions disabled.\n * Dropped support for 'make install'.\n\nChanges for 1.4.0:\n\n * New feature: the event listener API\n * New feature: test shuffling\n * New feature: the XML report format is closer to junitreport and can\n   be parsed by Hudson now.\n * New feature: when a test runs under Visual Studio, its failures are\n   integrated in the IDE.\n * New feature: /MD(d) versions of VC++ projects.\n * New feature: elapsed time for the tests is printed by default.\n * New feature: comes with a TR1 tuple implementation such that Boost\n   is no longer needed for Combine().\n * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.\n * New feature: the Xcode project can now produce static gtest\n   libraries in addition to a framework.\n * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile,\n   Symbian, gcc, and C++Builder.\n * Bug fixes and implementation clean-ups.\n\nChanges for 1.3.0:\n\n * New feature: death tests on Windows, Cygwin, and Mac.\n * New feature: ability to use Google Test assertions in other testing\n   frameworks.\n * New feature: ability to run disabled test via\n   --gtest_also_run_disabled_tests.\n * New feature: the --help flag for printing the usage.\n * New feature: access to Google Test flag values in user code.\n * New feature: a script that packs Google Test into one .h and one\n   .cc file for easy deployment.\n * New feature: support for distributing test functions to multiple\n   machines (requires support from the test runner).\n * Bug fixes and implementation clean-ups.\n\nChanges for 1.2.1:\n\n * Compatibility fixes for Linux IA-64 and IBM z/OS.\n * Added support for using Boost and other TR1 implementations.\n * Changes to the build scripts to support upcoming release of Google C++\n   Mocking Framework.\n * Added Makefile to the distribution package.\n * Improved build instructions in README.\n\nChanges for 1.2.0:\n\n * New feature: value-parameterized tests.\n * New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS)\n   macros.\n * Changed the XML report format to match JUnit/Ant's.\n * Added tests to the Xcode project.\n * Added scons/SConscript for building with SCons.\n * Added src/gtest-all.cc for building Google Test from a single file.\n * Fixed compatibility with Solaris and z/OS.\n * Enabled running Python tests on systems with python 2.3 installed,\n   e.g. Mac OS X 10.4.\n * Bug fixes.\n\nChanges for 1.1.0:\n\n * New feature: type-parameterized tests.\n * New feature: exception assertions.\n * New feature: printing elapsed time of tests.\n * Improved the robustness of death tests.\n * Added an Xcode project and samples.\n * Adjusted the output format on Windows to be understandable by Visual Studio.\n * Minor bug fixes.\n\nChanges for 1.0.1:\n\n * Added project files for Visual Studio 7.1.\n * Fixed issues with compiling on Mac OS X.\n * Fixed issues with compiling on Cygwin.\n\nChanges for 1.0.0:\n\n * Initial Open Source release of Google Test\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/LICENSE",
    "content": "Copyright 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/README",
    "content": "Google C++ Testing Framework\n============================\n\nhttp://code.google.com/p/googletest/\n\nOverview\n--------\n\nGoogle's framework for writing C++ tests on a variety of platforms\n(Linux, Mac OS X, Windows, Windows CE, Symbian, etc).  Based on the\nxUnit architecture.  Supports automatic test discovery, a rich set of\nassertions, user-defined assertions, death tests, fatal and non-fatal\nfailures, various options for running the tests, and XML test report\ngeneration.\n\nPlease see the project page above for more information as well as the\nmailing list for questions, discussions, and development.  There is\nalso an IRC channel on OFTC (irc.oftc.net) #gtest available.  Please\njoin us!\n\nRequirements for End Users\n--------------------------\n\nGoogle Test is designed to have fairly minimal requirements to build\nand use with your projects, but there are some.  Currently, we support\nLinux, Windows, Mac OS X, and Cygwin.  We will also make our best\neffort to support other platforms (e.g. Solaris, AIX, and z/OS).\nHowever, since core members of the Google Test project have no access\nto these platforms, Google Test may have outstanding issues there.  If\nyou notice any problems on your platform, please notify\ngoogletestframework@googlegroups.com.  Patches for fixing them are\neven more welcome!\n\n### Linux Requirements ###\n\nThese are the base requirements to build and use Google Test from a source\npackage (as described below):\n  * GNU-compatible Make or gmake\n  * POSIX-standard shell\n  * POSIX(-2) Regular Expressions (regex.h)\n  * A C++98-standard-compliant compiler\n\n### Windows Requirements ###\n\n  * Microsoft Visual C++ 7.1 or newer\n\n### Cygwin Requirements ###\n\n  * Cygwin 1.5.25-14 or newer\n\n### Mac OS X Requirements ###\n\n  * Mac OS X 10.4 Tiger or newer\n  * Developer Tools Installed\n\nAlso, you'll need CMake 2.6.4 or higher if you want to build the\nsamples using the provided CMake script, regardless of the platform.\n\nRequirements for Contributors\n-----------------------------\n\nWe welcome patches.  If you plan to contribute a patch, you need to\nbuild Google Test and its own tests from an SVN checkout (described\nbelow), which has further requirements:\n\n  * Python version 2.3 or newer (for running some of the tests and\n    re-generating certain source files from templates)\n  * CMake 2.6.4 or newer\n\nGetting the Source\n------------------\n\nThere are two primary ways of getting Google Test's source code: you\ncan download a stable source release in your preferred archive format,\nor directly check out the source from our Subversion (SVN) repositary.\nThe SVN checkout requires a few extra steps and some extra software\npackages on your system, but lets you track the latest development and\nmake patches much more easily, so we highly encourage it.\n\n### Source Package ###\n\nGoogle Test is released in versioned source packages which can be\ndownloaded from the download page [1].  Several different archive\nformats are provided, but the only difference is the tools used to\nmanipulate them, and the size of the resulting file.  Download\nwhichever you are most comfortable with.\n\n  [1] http://code.google.com/p/googletest/downloads/list\n\nOnce the package is downloaded, expand it using whichever tools you\nprefer for that type.  This will result in a new directory with the\nname \"gtest-X.Y.Z\" which contains all of the source code.  Here are\nsome examples on Linux:\n\n  tar -xvzf gtest-X.Y.Z.tar.gz\n  tar -xvjf gtest-X.Y.Z.tar.bz2\n  unzip gtest-X.Y.Z.zip\n\n### SVN Checkout ###\n\nTo check out the main branch (also known as the \"trunk\") of Google\nTest, run the following Subversion command:\n\n  svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn\n\nSetting up the Build\n--------------------\n\nTo build Google Test and your tests that use it, you need to tell your\nbuild system where to find its headers and source files.  The exact\nway to do it depends on which build system you use, and is usually\nstraightforward.\n\n### Generic Build Instructions ###\n\nSuppose you put Google Test in directory ${GTEST_DIR}.  To build it,\ncreate a library build target (or a project as called by Visual Studio\nand Xcode) to compile\n\n  ${GTEST_DIR}/src/gtest-all.cc\n\nwith ${GTEST_DIR}/include in the system header search path and ${GTEST_DIR}\nin the normal header search path.  Assuming a Linux-like system and gcc,\nsomething like the following will do:\n\n  g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \\\n      -pthread -c ${GTEST_DIR}/src/gtest-all.cc\n  ar -rv libgtest.a gtest-all.o\n\n(We need -pthread as Google Test uses threads.)\n\nNext, you should compile your test source file with\n${GTEST_DIR}/include in the system header search path, and link it\nwith gtest and any other necessary libraries:\n\n  g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \\\n      -o your_test\n\nAs an example, the make/ directory contains a Makefile that you can\nuse to build Google Test on systems where GNU make is available\n(e.g. Linux, Mac OS X, and Cygwin).  It doesn't try to build Google\nTest's own tests.  Instead, it just builds the Google Test library and\na sample test.  You can use it as a starting point for your own build\nscript.\n\nIf the default settings are correct for your environment, the\nfollowing commands should succeed:\n\n  cd ${GTEST_DIR}/make\n  make\n  ./sample1_unittest\n\nIf you see errors, try to tweak the contents of make/Makefile to make\nthem go away.  There are instructions in make/Makefile on how to do\nit.\n\n### Using CMake ###\n\nGoogle Test comes with a CMake build script (CMakeLists.txt) that can\nbe used on a wide range of platforms (\"C\" stands for cross-platofrm.).\nIf you don't have CMake installed already, you can download it for\nfree from http://www.cmake.org/.\n\nCMake works by generating native makefiles or build projects that can\nbe used in the compiler environment of your choice.  The typical\nworkflow starts with:\n\n  mkdir mybuild       # Create a directory to hold the build output.\n  cd mybuild\n  cmake ${GTEST_DIR}  # Generate native build scripts.\n\nIf you want to build Google Test's samples, you should replace the\nlast command with\n\n  cmake -Dgtest_build_samples=ON ${GTEST_DIR}\n\nIf you are on a *nix system, you should now see a Makefile in the\ncurrent directory.  Just type 'make' to build gtest.\n\nIf you use Windows and have Vistual Studio installed, a gtest.sln file\nand several .vcproj files will be created.  You can then build them\nusing Visual Studio.\n\nOn Mac OS X with Xcode installed, a .xcodeproj file will be generated.\n\n### Legacy Build Scripts ###\n\nBefore settling on CMake, we have been providing hand-maintained build\nprojects/scripts for Visual Studio, Xcode, and Autotools.  While we\ncontinue to provide them for convenience, they are not actively\nmaintained any more.  We highly recommend that you follow the\ninstructions in the previous two sections to integrate Google Test\nwith your existing build system.\n\nIf you still need to use the legacy build scripts, here's how:\n\nThe msvc\\ folder contains two solutions with Visual C++ projects.\nOpen the gtest.sln or gtest-md.sln file using Visual Studio, and you\nare ready to build Google Test the same way you build any Visual\nStudio project.  Files that have names ending with -md use DLL\nversions of Microsoft runtime libraries (the /MD or the /MDd compiler\noption).  Files without that suffix use static versions of the runtime\nlibraries (the /MT or the /MTd option).  Please note that one must use\nthe same option to compile both gtest and the test code.  If you use\nVisual Studio 2005 or above, we recommend the -md version as /MD is\nthe default for new projects in these versions of Visual Studio.\n\nOn Mac OS X, open the gtest.xcodeproj in the xcode/ folder using\nXcode.  Build the \"gtest\" target.  The universal binary framework will\nend up in your selected build directory (selected in the Xcode\n\"Preferences...\" -> \"Building\" pane and defaults to xcode/build).\nAlternatively, at the command line, enter:\n\n  xcodebuild\n\nThis will build the \"Release\" configuration of gtest.framework in your\ndefault build location.  See the \"xcodebuild\" man page for more\ninformation about building different configurations and building in\ndifferent locations.\n\nIf you wish to use the Google Test Xcode project with Xcode 4.x and\nabove, you need to either:\n * update the SDK configuration options in xcode/Config/General.xconfig.\n   Comment options SDKROOT, MACOS_DEPLOYMENT_TARGET, and GCC_VERSION. If\n   you choose this route you lose the ability to target earlier versions\n   of MacOS X.\n * Install an SDK for an earlier version. This doesn't appear to be\n   supported by Apple, but has been reported to work\n   (http://stackoverflow.com/questions/5378518).\n\nTweaking Google Test\n--------------------\n\nGoogle Test can be used in diverse environments.  The default\nconfiguration may not work (or may not work well) out of the box in\nsome environments.  However, you can easily tweak Google Test by\ndefining control macros on the compiler command line.  Generally,\nthese macros are named like GTEST_XYZ and you define them to either 1\nor 0 to enable or disable a certain feature.\n\nWe list the most frequently used macros below.  For a complete list,\nsee file include/gtest/internal/gtest-port.h.\n\n### Choosing a TR1 Tuple Library ###\n\nSome Google Test features require the C++ Technical Report 1 (TR1)\ntuple library, which is not yet available with all compilers.  The\ngood news is that Google Test implements a subset of TR1 tuple that's\nenough for its own need, and will automatically use this when the\ncompiler doesn't provide TR1 tuple.\n\nUsually you don't need to care about which tuple library Google Test\nuses.  However, if your project already uses TR1 tuple, you need to\ntell Google Test to use the same TR1 tuple library the rest of your\nproject uses, or the two tuple implementations will clash.  To do\nthat, add\n\n  -DGTEST_USE_OWN_TR1_TUPLE=0\n\nto the compiler flags while compiling Google Test and your tests.  If\nyou want to force Google Test to use its own tuple library, just add\n\n  -DGTEST_USE_OWN_TR1_TUPLE=1\n\nto the compiler flags instead.\n\nIf you don't want Google Test to use tuple at all, add\n\n  -DGTEST_HAS_TR1_TUPLE=0\n\nand all features using tuple will be disabled.\n\n### Multi-threaded Tests ###\n\nGoogle Test is thread-safe where the pthread library is available.\nAfter #include \"gtest/gtest.h\", you can check the GTEST_IS_THREADSAFE\nmacro to see whether this is the case (yes if the macro is #defined to\n1, no if it's undefined.).\n\nIf Google Test doesn't correctly detect whether pthread is available\nin your environment, you can force it with\n\n  -DGTEST_HAS_PTHREAD=1\n\nor\n\n  -DGTEST_HAS_PTHREAD=0\n\nWhen Google Test uses pthread, you may need to add flags to your\ncompiler and/or linker to select the pthread library, or you'll get\nlink errors.  If you use the CMake script or the deprecated Autotools\nscript, this is taken care of for you.  If you use your own build\nscript, you'll need to read your compiler and linker's manual to\nfigure out what flags to add.\n\n### As a Shared Library (DLL) ###\n\nGoogle Test is compact, so most users can build and link it as a\nstatic library for the simplicity.  You can choose to use Google Test\nas a shared library (known as a DLL on Windows) if you prefer.\n\nTo compile *gtest* as a shared library, add\n\n  -DGTEST_CREATE_SHARED_LIBRARY=1\n\nto the compiler flags.  You'll also need to tell the linker to produce\na shared library instead - consult your linker's manual for how to do\nit.\n\nTo compile your *tests* that use the gtest shared library, add\n\n  -DGTEST_LINKED_AS_SHARED_LIBRARY=1\n\nto the compiler flags.\n\nNote: while the above steps aren't technically necessary today when\nusing some compilers (e.g. GCC), they may become necessary in the\nfuture, if we decide to improve the speed of loading the library (see\nhttp://gcc.gnu.org/wiki/Visibility for details).  Therefore you are\nrecommended to always add the above flags when using Google Test as a\nshared library.  Otherwise a future release of Google Test may break\nyour build script.\n\n### Avoiding Macro Name Clashes ###\n\nIn C++, macros don't obey namespaces.  Therefore two libraries that\nboth define a macro of the same name will clash if you #include both\ndefinitions.  In case a Google Test macro clashes with another\nlibrary, you can force Google Test to rename its macro to avoid the\nconflict.\n\nSpecifically, if both Google Test and some other code define macro\nFOO, you can add\n\n  -DGTEST_DONT_DEFINE_FOO=1\n\nto the compiler flags to tell Google Test to change the macro's name\nfrom FOO to GTEST_FOO.  Currently FOO can be FAIL, SUCCEED, or TEST.\nFor example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write\n\n  GTEST_TEST(SomeTest, DoesThis) { ... }\n\ninstead of\n\n  TEST(SomeTest, DoesThis) { ... }\n\nin order to define a test.\n\nUpgrating from an Earlier Version\n---------------------------------\n\nWe strive to keep Google Test releases backward compatible.\nSometimes, though, we have to make some breaking changes for the\nusers' long-term benefits.  This section describes what you'll need to\ndo if you are upgrading from an earlier version of Google Test.\n\n### Upgrading from 1.3.0 or Earlier ###\n\nYou may need to explicitly enable or disable Google Test's own TR1\ntuple library.  See the instructions in section \"Choosing a TR1 Tuple\nLibrary\".\n\n### Upgrading from 1.4.0 or Earlier ###\n\nThe Autotools build script (configure + make) is no longer officially\nsupportted.  You are encouraged to migrate to your own build system or\nuse CMake.  If you still need to use Autotools, you can find\ninstructions in the README file from Google Test 1.4.0.\n\nOn platforms where the pthread library is available, Google Test uses\nit in order to be thread-safe.  See the \"Multi-threaded Tests\" section\nfor what this means to your build script.\n\nIf you use Microsoft Visual C++ 7.1 with exceptions disabled, Google\nTest will no longer compile.  This should affect very few people, as a\nlarge portion of STL (including <string>) doesn't compile in this mode\nanyway.  We decided to stop supporting it in order to greatly simplify\nGoogle Test's implementation.\n\nDeveloping Google Test\n----------------------\n\nThis section discusses how to make your own changes to Google Test.\n\n### Testing Google Test Itself ###\n\nTo make sure your changes work as intended and don't break existing\nfunctionality, you'll want to compile and run Google Test's own tests.\nFor that you can use CMake:\n\n  mkdir mybuild\n  cd mybuild\n  cmake -Dgtest_build_tests=ON ${GTEST_DIR}\n\nMake sure you have Python installed, as some of Google Test's tests\nare written in Python.  If the cmake command complains about not being\nable to find Python (\"Could NOT find PythonInterp (missing:\nPYTHON_EXECUTABLE)\"), try telling it explicitly where your Python\nexecutable can be found:\n\n  cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR}\n\nNext, you can build Google Test and all of its own tests.  On *nix,\nthis is usually done by 'make'.  To run the tests, do\n\n  make test\n\nAll tests should pass.\n\n### Regenerating Source Files ###\n\nSome of Google Test's source files are generated from templates (not\nin the C++ sense) using a script.  A template file is named FOO.pump,\nwhere FOO is the name of the file it will generate.  For example, the\nfile include/gtest/internal/gtest-type-util.h.pump is used to generate\ngtest-type-util.h in the same directory.\n\nNormally you don't need to worry about regenerating the source files,\nunless you need to modify them.  In that case, you should modify the\ncorresponding .pump files instead and run the pump.py Python script to\nregenerate them.  You can find pump.py in the scripts/ directory.\nRead the Pump manual [2] for how to use it.\n\n  [2] http://code.google.com/p/googletest/wiki/PumpManual\n\n### Contributing a Patch ###\n\nWe welcome patches.  Please read the Google Test developer's guide [3]\nfor how you can contribute.  In particular, make sure you have signed\nthe Contributor License Agreement, or we won't be able to accept the\npatch.\n\n  [3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide\n\nHappy testing!\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-death-test.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file defines the public API for death tests.  It is\n// #included by gtest.h so a user doesn't need to include this\n// directly.\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n\n#include \"gtest/internal/gtest-death-test-internal.h\"\n\nnamespace testing {\n\n// This flag controls the style of death tests.  Valid values are \"threadsafe\",\n// meaning that the death test child process will re-execute the test binary\n// from the start, running only a single death test, or \"fast\",\n// meaning that the child process will execute the test logic immediately\n// after forking.\nGTEST_DECLARE_string_(death_test_style);\n\n#if GTEST_HAS_DEATH_TEST\n\nnamespace internal {\n\n// Returns a Boolean value indicating whether the caller is currently\n// executing in the context of the death test child process.  Tools such as\n// Valgrind heap checkers may need this to modify their behavior in death\n// tests.  IMPORTANT: This is an internal utility.  Using it may break the\n// implementation of death tests.  User code MUST NOT use it.\nGTEST_API_ bool InDeathTestChild();\n\n}  // namespace internal\n\n// The following macros are useful for writing death tests.\n\n// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is\n// executed:\n//\n//   1. It generates a warning if there is more than one active\n//   thread.  This is because it's safe to fork() or clone() only\n//   when there is a single thread.\n//\n//   2. The parent process clone()s a sub-process and runs the death\n//   test in it; the sub-process exits with code 0 at the end of the\n//   death test, if it hasn't exited already.\n//\n//   3. The parent process waits for the sub-process to terminate.\n//\n//   4. The parent process checks the exit code and error message of\n//   the sub-process.\n//\n// Examples:\n//\n//   ASSERT_DEATH(server.SendMessage(56, \"Hello\"), \"Invalid port number\");\n//   for (int i = 0; i < 5; i++) {\n//     EXPECT_DEATH(server.ProcessRequest(i),\n//                  \"Invalid request .* in ProcessRequest()\")\n//                  << \"Failed to die on request \" << i;\n//   }\n//\n//   ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), \"Exiting\");\n//\n//   bool KilledBySIGHUP(int exit_code) {\n//     return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP;\n//   }\n//\n//   ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, \"Hanging up!\");\n//\n// On the regular expressions used in death tests:\n//\n//   On POSIX-compliant systems (*nix), we use the <regex.h> library,\n//   which uses the POSIX extended regex syntax.\n//\n//   On other platforms (e.g. Windows), we only support a simple regex\n//   syntax implemented as part of Google Test.  This limited\n//   implementation should be enough most of the time when writing\n//   death tests; though it lacks many features you can find in PCRE\n//   or POSIX extended regex syntax.  For example, we don't support\n//   union (\"x|y\"), grouping (\"(xy)\"), brackets (\"[xy]\"), and\n//   repetition count (\"x{5,7}\"), among others.\n//\n//   Below is the syntax that we do support.  We chose it to be a\n//   subset of both PCRE and POSIX extended regex, so it's easy to\n//   learn wherever you come from.  In the following: 'A' denotes a\n//   literal character, period (.), or a single \\\\ escape sequence;\n//   'x' and 'y' denote regular expressions; 'm' and 'n' are for\n//   natural numbers.\n//\n//     c     matches any literal character c\n//     \\\\d   matches any decimal digit\n//     \\\\D   matches any character that's not a decimal digit\n//     \\\\f   matches \\f\n//     \\\\n   matches \\n\n//     \\\\r   matches \\r\n//     \\\\s   matches any ASCII whitespace, including \\n\n//     \\\\S   matches any character that's not a whitespace\n//     \\\\t   matches \\t\n//     \\\\v   matches \\v\n//     \\\\w   matches any letter, _, or decimal digit\n//     \\\\W   matches any character that \\\\w doesn't match\n//     \\\\c   matches any literal character c, which must be a punctuation\n//     .     matches any single character except \\n\n//     A?    matches 0 or 1 occurrences of A\n//     A*    matches 0 or many occurrences of A\n//     A+    matches 1 or many occurrences of A\n//     ^     matches the beginning of a string (not that of each line)\n//     $     matches the end of a string (not that of each line)\n//     xy    matches x followed by y\n//\n//   If you accidentally use PCRE or POSIX extended regex features\n//   not implemented by us, you will get a run-time failure.  In that\n//   case, please try to rewrite your regular expression within the\n//   above syntax.\n//\n//   This implementation is *not* meant to be as highly tuned or robust\n//   as a compiled regex library, but should perform well enough for a\n//   death test, which already incurs significant overhead by launching\n//   a child process.\n//\n// Known caveats:\n//\n//   A \"threadsafe\" style death test obtains the path to the test\n//   program from argv[0] and re-executes it in the sub-process.  For\n//   simplicity, the current implementation doesn't search the PATH\n//   when launching the sub-process.  This means that the user must\n//   invoke the test program via a path that contains at least one\n//   path separator (e.g. path/to/foo_test and\n//   /absolute/path/to/bar_test are fine, but foo_test is not).  This\n//   is rarely a problem as people usually don't put the test binary\n//   directory in PATH.\n//\n// TODO(wan@google.com): make thread-safe death tests search the PATH.\n\n// Asserts that a given statement causes the program to exit, with an\n// integer exit status that satisfies predicate, and emitting error output\n// that matches regex.\n# define ASSERT_EXIT(statement, predicate, regex) \\\n    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)\n\n// Like ASSERT_EXIT, but continues on to successive tests in the\n// test case, if any:\n# define EXPECT_EXIT(statement, predicate, regex) \\\n    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)\n\n// Asserts that a given statement causes the program to exit, either by\n// explicitly exiting with a nonzero exit code or being killed by a\n// signal, and emitting error output that matches regex.\n# define ASSERT_DEATH(statement, regex) \\\n    ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)\n\n// Like ASSERT_DEATH, but continues on to successive tests in the\n// test case, if any:\n# define EXPECT_DEATH(statement, regex) \\\n    EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)\n\n// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*:\n\n// Tests that an exit code describes a normal exit with a given exit code.\nclass GTEST_API_ ExitedWithCode {\n public:\n  explicit ExitedWithCode(int exit_code);\n  bool operator()(int exit_status) const;\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ExitedWithCode& other);\n\n  const int exit_code_;\n};\n\n# if !GTEST_OS_WINDOWS\n// Tests that an exit code describes an exit due to termination by a\n// given signal.\nclass GTEST_API_ KilledBySignal {\n public:\n  explicit KilledBySignal(int signum);\n  bool operator()(int exit_status) const;\n private:\n  const int signum_;\n};\n# endif  // !GTEST_OS_WINDOWS\n\n// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode.\n// The death testing framework causes this to have interesting semantics,\n// since the sideeffects of the call are only visible in opt mode, and not\n// in debug mode.\n//\n// In practice, this can be used to test functions that utilize the\n// LOG(DFATAL) macro using the following style:\n//\n// int DieInDebugOr12(int* sideeffect) {\n//   if (sideeffect) {\n//     *sideeffect = 12;\n//   }\n//   LOG(DFATAL) << \"death\";\n//   return 12;\n// }\n//\n// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) {\n//   int sideeffect = 0;\n//   // Only asserts in dbg.\n//   EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), \"death\");\n//\n// #ifdef NDEBUG\n//   // opt-mode has sideeffect visible.\n//   EXPECT_EQ(12, sideeffect);\n// #else\n//   // dbg-mode no visible sideeffect.\n//   EXPECT_EQ(0, sideeffect);\n// #endif\n// }\n//\n// This will assert that DieInDebugReturn12InOpt() crashes in debug\n// mode, usually due to a DCHECK or LOG(DFATAL), but returns the\n// appropriate fallback value (12 in this case) in opt mode. If you\n// need to test that a function has appropriate side-effects in opt\n// mode, include assertions against the side-effects.  A general\n// pattern for this is:\n//\n// EXPECT_DEBUG_DEATH({\n//   // Side-effects here will have an effect after this statement in\n//   // opt mode, but none in debug mode.\n//   EXPECT_EQ(12, DieInDebugOr12(&sideeffect));\n// }, \"death\");\n//\n# ifdef NDEBUG\n\n#  define EXPECT_DEBUG_DEATH(statement, regex) \\\n  GTEST_EXECUTE_STATEMENT_(statement, regex)\n\n#  define ASSERT_DEBUG_DEATH(statement, regex) \\\n  GTEST_EXECUTE_STATEMENT_(statement, regex)\n\n# else\n\n#  define EXPECT_DEBUG_DEATH(statement, regex) \\\n  EXPECT_DEATH(statement, regex)\n\n#  define ASSERT_DEBUG_DEATH(statement, regex) \\\n  ASSERT_DEATH(statement, regex)\n\n# endif  // NDEBUG for EXPECT_DEBUG_DEATH\n#endif  // GTEST_HAS_DEATH_TEST\n\n// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and\n// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if\n// death tests are supported; otherwise they just issue a warning.  This is\n// useful when you are combining death test assertions with normal test\n// assertions in one test.\n#if GTEST_HAS_DEATH_TEST\n# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \\\n    EXPECT_DEATH(statement, regex)\n# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \\\n    ASSERT_DEATH(statement, regex)\n#else\n# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \\\n    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )\n# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \\\n    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)\n#endif\n\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-message.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file defines the Message class.\n//\n// IMPORTANT NOTE: Due to limitation of the C++ language, we have to\n// leave some internal implementation details in this header file.\n// They are clearly marked by comments like this:\n//\n//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n//\n// Such code is NOT meant to be used by a user directly, and is subject\n// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user\n// program!\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n\n#include <limits>\n\n#include \"gtest/internal/gtest-port.h\"\n\n// Ensures that there is at least one operator<< in the global namespace.\n// See Message& operator<<(...) below for why.\nvoid operator<<(const testing::internal::Secret&, int);\n\nnamespace testing {\n\n// The Message class works like an ostream repeater.\n//\n// Typical usage:\n//\n//   1. You stream a bunch of values to a Message object.\n//      It will remember the text in a stringstream.\n//   2. Then you stream the Message object to an ostream.\n//      This causes the text in the Message to be streamed\n//      to the ostream.\n//\n// For example;\n//\n//   testing::Message foo;\n//   foo << 1 << \" != \" << 2;\n//   std::cout << foo;\n//\n// will print \"1 != 2\".\n//\n// Message is not intended to be inherited from.  In particular, its\n// destructor is not virtual.\n//\n// Note that stringstream behaves differently in gcc and in MSVC.  You\n// can stream a NULL char pointer to it in the former, but not in the\n// latter (it causes an access violation if you do).  The Message\n// class hides this difference by treating a NULL char pointer as\n// \"(null)\".\nclass GTEST_API_ Message {\n private:\n  // The type of basic IO manipulators (endl, ends, and flush) for\n  // narrow streams.\n  typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);\n\n public:\n  // Constructs an empty Message.\n  Message();\n\n  // Copy constructor.\n  Message(const Message& msg) : ss_(new ::std::stringstream) {  // NOLINT\n    *ss_ << msg.GetString();\n  }\n\n  // Constructs a Message from a C-string.\n  explicit Message(const char* str) : ss_(new ::std::stringstream) {\n    *ss_ << str;\n  }\n\n#if GTEST_OS_SYMBIAN\n  // Streams a value (either a pointer or not) to this object.\n  template <typename T>\n  inline Message& operator <<(const T& value) {\n    StreamHelper(typename internal::is_pointer<T>::type(), value);\n    return *this;\n  }\n#else\n  // Streams a non-pointer value to this object.\n  template <typename T>\n  inline Message& operator <<(const T& val) {\n    // Some libraries overload << for STL containers.  These\n    // overloads are defined in the global namespace instead of ::std.\n    //\n    // C++'s symbol lookup rule (i.e. Koenig lookup) says that these\n    // overloads are visible in either the std namespace or the global\n    // namespace, but not other namespaces, including the testing\n    // namespace which Google Test's Message class is in.\n    //\n    // To allow STL containers (and other types that has a << operator\n    // defined in the global namespace) to be used in Google Test\n    // assertions, testing::Message must access the custom << operator\n    // from the global namespace.  With this using declaration,\n    // overloads of << defined in the global namespace and those\n    // visible via Koenig lookup are both exposed in this function.\n    using ::operator <<;\n    *ss_ << val;\n    return *this;\n  }\n\n  // Streams a pointer value to this object.\n  //\n  // This function is an overload of the previous one.  When you\n  // stream a pointer to a Message, this definition will be used as it\n  // is more specialized.  (The C++ Standard, section\n  // [temp.func.order].)  If you stream a non-pointer, then the\n  // previous definition will be used.\n  //\n  // The reason for this overload is that streaming a NULL pointer to\n  // ostream is undefined behavior.  Depending on the compiler, you\n  // may get \"0\", \"(nil)\", \"(null)\", or an access violation.  To\n  // ensure consistent result across compilers, we always treat NULL\n  // as \"(null)\".\n  template <typename T>\n  inline Message& operator <<(T* const& pointer) {  // NOLINT\n    if (pointer == NULL) {\n      *ss_ << \"(null)\";\n    } else {\n      *ss_ << pointer;\n    }\n    return *this;\n  }\n#endif  // GTEST_OS_SYMBIAN\n\n  // Since the basic IO manipulators are overloaded for both narrow\n  // and wide streams, we have to provide this specialized definition\n  // of operator <<, even though its body is the same as the\n  // templatized version above.  Without this definition, streaming\n  // endl or other basic IO manipulators to Message will confuse the\n  // compiler.\n  Message& operator <<(BasicNarrowIoManip val) {\n    *ss_ << val;\n    return *this;\n  }\n\n  // Instead of 1/0, we want to see true/false for bool values.\n  Message& operator <<(bool b) {\n    return *this << (b ? \"true\" : \"false\");\n  }\n\n  // These two overloads allow streaming a wide C string to a Message\n  // using the UTF-8 encoding.\n  Message& operator <<(const wchar_t* wide_c_str);\n  Message& operator <<(wchar_t* wide_c_str);\n\n#if GTEST_HAS_STD_WSTRING\n  // Converts the given wide string to a narrow string using the UTF-8\n  // encoding, and streams the result to this Message object.\n  Message& operator <<(const ::std::wstring& wstr);\n#endif  // GTEST_HAS_STD_WSTRING\n\n#if GTEST_HAS_GLOBAL_WSTRING\n  // Converts the given wide string to a narrow string using the UTF-8\n  // encoding, and streams the result to this Message object.\n  Message& operator <<(const ::wstring& wstr);\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n  // Gets the text streamed to this object so far as an std::string.\n  // Each '\\0' character in the buffer is replaced with \"\\\\0\".\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  std::string GetString() const;\n\n private:\n\n#if GTEST_OS_SYMBIAN\n  // These are needed as the Nokia Symbian Compiler cannot decide between\n  // const T& and const T* in a function template. The Nokia compiler _can_\n  // decide between class template specializations for T and T*, so a\n  // tr1::type_traits-like is_pointer works, and we can overload on that.\n  template <typename T>\n  inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) {\n    if (pointer == NULL) {\n      *ss_ << \"(null)\";\n    } else {\n      *ss_ << pointer;\n    }\n  }\n  template <typename T>\n  inline void StreamHelper(internal::false_type /*is_pointer*/,\n                           const T& value) {\n    // See the comments in Message& operator <<(const T&) above for why\n    // we need this using statement.\n    using ::operator <<;\n    *ss_ << value;\n  }\n#endif  // GTEST_OS_SYMBIAN\n\n  // We'll hold the text streamed to this object here.\n  const internal::scoped_ptr< ::std::stringstream> ss_;\n\n  // We declare (but don't implement) this to prevent the compiler\n  // from implementing the assignment operator.\n  void operator=(const Message&);\n};\n\n// Streams a Message to an ostream.\ninline std::ostream& operator <<(std::ostream& os, const Message& sb) {\n  return os << sb.GetString();\n}\n\nnamespace internal {\n\n// Converts a streamable value to an std::string.  A NULL pointer is\n// converted to \"(null)\".  When the input value is a ::string,\n// ::std::string, ::wstring, or ::std::wstring object, each NUL\n// character in it is replaced with \"\\\\0\".\ntemplate <typename T>\nstd::string StreamableToString(const T& streamable) {\n  return (Message() << streamable).GetString();\n}\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-param-test.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-param-test.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: vladl@google.com (Vlad Losev)\n//\n// Macros and functions for implementing parameterized tests\n// in Google C++ Testing Framework (Google Test)\n//\n// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n\n\n// Value-parameterized tests allow you to test your code with different\n// parameters without writing multiple copies of the same test.\n//\n// Here is how you use value-parameterized tests:\n\n#if 0\n\n// To write value-parameterized tests, first you should define a fixture\n// class. It is usually derived from testing::TestWithParam<T> (see below for\n// another inheritance scheme that's sometimes useful in more complicated\n// class hierarchies), where the type of your parameter values.\n// TestWithParam<T> is itself derived from testing::Test. T can be any\n// copyable type. If it's a raw pointer, you are responsible for managing the\n// lifespan of the pointed values.\n\nclass FooTest : public ::testing::TestWithParam<const char*> {\n  // You can implement all the usual class fixture members here.\n};\n\n// Then, use the TEST_P macro to define as many parameterized tests\n// for this fixture as you want. The _P suffix is for \"parameterized\"\n// or \"pattern\", whichever you prefer to think.\n\nTEST_P(FooTest, DoesBlah) {\n  // Inside a test, access the test parameter with the GetParam() method\n  // of the TestWithParam<T> class:\n  EXPECT_TRUE(foo.Blah(GetParam()));\n  ...\n}\n\nTEST_P(FooTest, HasBlahBlah) {\n  ...\n}\n\n// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test\n// case with any set of parameters you want. Google Test defines a number\n// of functions for generating test parameters. They return what we call\n// (surprise!) parameter generators. Here is a  summary of them, which\n// are all in the testing namespace:\n//\n//\n//  Range(begin, end [, step]) - Yields values {begin, begin+step,\n//                               begin+step+step, ...}. The values do not\n//                               include end. step defaults to 1.\n//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.\n//  ValuesIn(container)        - Yields values from a C-style array, an STL\n//  ValuesIn(begin,end)          container, or an iterator range [begin, end).\n//  Bool()                     - Yields sequence {false, true}.\n//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product\n//                               for the math savvy) of the values generated\n//                               by the N generators.\n//\n// For more details, see comments at the definitions of these functions below\n// in this file.\n//\n// The following statement will instantiate tests from the FooTest test case\n// each with parameter values \"meeny\", \"miny\", and \"moe\".\n\nINSTANTIATE_TEST_CASE_P(InstantiationName,\n                        FooTest,\n                        Values(\"meeny\", \"miny\", \"moe\"));\n\n// To distinguish different instances of the pattern, (yes, you\n// can instantiate it more then once) the first argument to the\n// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the\n// actual test case name. Remember to pick unique prefixes for different\n// instantiations. The tests from the instantiation above will have\n// these names:\n//\n//    * InstantiationName/FooTest.DoesBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.DoesBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.DoesBlah/2 for \"moe\"\n//    * InstantiationName/FooTest.HasBlahBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.HasBlahBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.HasBlahBlah/2 for \"moe\"\n//\n// You can use these names in --gtest_filter.\n//\n// This statement will instantiate all tests from FooTest again, each\n// with parameter values \"cat\" and \"dog\":\n\nconst char* pets[] = {\"cat\", \"dog\"};\nINSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));\n\n// The tests from the instantiation above will have these names:\n//\n//    * AnotherInstantiationName/FooTest.DoesBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.DoesBlah/1 for \"dog\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for \"dog\"\n//\n// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests\n// in the given test case, whether their definitions come before or\n// AFTER the INSTANTIATE_TEST_CASE_P statement.\n//\n// Please also note that generator expressions (including parameters to the\n// generators) are evaluated in InitGoogleTest(), after main() has started.\n// This allows the user on one hand, to adjust generator parameters in order\n// to dynamically determine a set of tests to run and on the other hand,\n// give the user a chance to inspect the generated tests with Google Test\n// reflection API before RUN_ALL_TESTS() is executed.\n//\n// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc\n// for more examples.\n//\n// In the future, we plan to publish the API for defining new parameter\n// generators. But for now this interface remains part of the internal\n// implementation and is subject to change.\n//\n//\n// A parameterized test fixture must be derived from testing::Test and from\n// testing::WithParamInterface<T>, where T is the type of the parameter\n// values. Inheriting from TestWithParam<T> satisfies that requirement because\n// TestWithParam<T> inherits from both Test and WithParamInterface. In more\n// complicated hierarchies, however, it is occasionally useful to inherit\n// separately from Test and WithParamInterface. For example:\n\nclass BaseTest : public ::testing::Test {\n  // You can inherit all the usual members for a non-parameterized test\n  // fixture here.\n};\n\nclass DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {\n  // The usual test fixture members go here too.\n};\n\nTEST_F(BaseTest, HasFoo) {\n  // This is an ordinary non-parameterized test.\n}\n\nTEST_P(DerivedTest, DoesBlah) {\n  // GetParam works just the same here as if you inherit from TestWithParam.\n  EXPECT_TRUE(foo.Blah(GetParam()));\n}\n\n#endif  // 0\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if !GTEST_OS_SYMBIAN\n# include <utility>\n#endif\n\n// scripts/fuse_gtest.py depends on gtest's own header being #included\n// *unconditionally*.  Therefore these #includes cannot be moved\n// inside #if GTEST_HAS_PARAM_TEST.\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-param-util-generated.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nnamespace testing {\n\n// Functions producing parameter generators.\n//\n// Google Test uses these generators to produce parameters for value-\n// parameterized tests. When a parameterized test case is instantiated\n// with a particular generator, Google Test creates and runs tests\n// for each element in the sequence produced by the generator.\n//\n// In the following sample, tests from test case FooTest are instantiated\n// each three times with parameter values 3, 5, and 8:\n//\n// class FooTest : public TestWithParam<int> { ... };\n//\n// TEST_P(FooTest, TestThis) {\n// }\n// TEST_P(FooTest, TestThat) {\n// }\n// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));\n//\n\n// Range() returns generators providing sequences of values in a range.\n//\n// Synopsis:\n// Range(start, end)\n//   - returns a generator producing a sequence of values {start, start+1,\n//     start+2, ..., }.\n// Range(start, end, step)\n//   - returns a generator producing a sequence of values {start, start+step,\n//     start+step+step, ..., }.\n// Notes:\n//   * The generated sequences never include end. For example, Range(1, 5)\n//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)\n//     returns a generator producing {1, 3, 5, 7}.\n//   * start and end must have the same type. That type may be any integral or\n//     floating-point type or a user defined type satisfying these conditions:\n//     * It must be assignable (have operator=() defined).\n//     * It must have operator+() (operator+(int-compatible type) for\n//       two-operand version).\n//     * It must have operator<() defined.\n//     Elements in the resulting sequences will also have that type.\n//   * Condition start < end must be satisfied in order for resulting sequences\n//     to contain any elements.\n//\ntemplate <typename T, typename IncrementT>\ninternal::ParamGenerator<T> Range(T start, T end, IncrementT step) {\n  return internal::ParamGenerator<T>(\n      new internal::RangeGenerator<T, IncrementT>(start, end, step));\n}\n\ntemplate <typename T>\ninternal::ParamGenerator<T> Range(T start, T end) {\n  return Range(start, end, 1);\n}\n\n// ValuesIn() function allows generation of tests with parameters coming from\n// a container.\n//\n// Synopsis:\n// ValuesIn(const T (&array)[N])\n//   - returns a generator producing sequences with elements from\n//     a C-style array.\n// ValuesIn(const Container& container)\n//   - returns a generator producing sequences with elements from\n//     an STL-style container.\n// ValuesIn(Iterator begin, Iterator end)\n//   - returns a generator producing sequences with elements from\n//     a range [begin, end) defined by a pair of STL-style iterators. These\n//     iterators can also be plain C pointers.\n//\n// Please note that ValuesIn copies the values from the containers\n// passed in and keeps them to generate tests in RUN_ALL_TESTS().\n//\n// Examples:\n//\n// This instantiates tests from test case StringTest\n// each with C-string values of \"foo\", \"bar\", and \"baz\":\n//\n// const char* strings[] = {\"foo\", \"bar\", \"baz\"};\n// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));\n//\n// This instantiates tests from test case StlStringTest\n// each with STL strings with values \"a\" and \"b\":\n//\n// ::std::vector< ::std::string> GetParameterStrings() {\n//   ::std::vector< ::std::string> v;\n//   v.push_back(\"a\");\n//   v.push_back(\"b\");\n//   return v;\n// }\n//\n// INSTANTIATE_TEST_CASE_P(CharSequence,\n//                         StlStringTest,\n//                         ValuesIn(GetParameterStrings()));\n//\n//\n// This will also instantiate tests from CharTest\n// each with parameter values 'a' and 'b':\n//\n// ::std::list<char> GetParameterChars() {\n//   ::std::list<char> list;\n//   list.push_back('a');\n//   list.push_back('b');\n//   return list;\n// }\n// ::std::list<char> l = GetParameterChars();\n// INSTANTIATE_TEST_CASE_P(CharSequence2,\n//                         CharTest,\n//                         ValuesIn(l.begin(), l.end()));\n//\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end) {\n  typedef typename ::testing::internal::IteratorTraits<ForwardIterator>\n      ::value_type ParamType;\n  return internal::ParamGenerator<ParamType>(\n      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));\n}\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {\n  return ValuesIn(array, array + N);\n}\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container) {\n  return ValuesIn(container.begin(), container.end());\n}\n\n// Values() allows generating tests from explicitly specified list of\n// parameters.\n//\n// Synopsis:\n// Values(T v1, T v2, ..., T vN)\n//   - returns a generator producing sequences with elements v1, v2, ..., vN.\n//\n// For example, this instantiates tests from test case BarTest each\n// with values \"one\", \"two\", and \"three\":\n//\n// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values(\"one\", \"two\", \"three\"));\n//\n// This instantiates tests from test case BazTest each with values 1, 2, 3.5.\n// The exact type of values will depend on the type of parameter in BazTest.\n//\n// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));\n//\n// Currently, Values() supports from 1 to 50 parameters.\n//\ntemplate <typename T1>\ninternal::ValueArray1<T1> Values(T1 v1) {\n  return internal::ValueArray1<T1>(v1);\n}\n\ntemplate <typename T1, typename T2>\ninternal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {\n  return internal::ValueArray2<T1, T2>(v1, v2);\n}\n\ntemplate <typename T1, typename T2, typename T3>\ninternal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {\n  return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\ninternal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {\n  return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\ninternal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5) {\n  return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\ninternal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3,\n    T4 v4, T5 v5, T6 v6) {\n  return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\ninternal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3,\n    T4 v4, T5 v5, T6 v6, T7 v7) {\n  return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,\n      v6, v7);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\ninternal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {\n  return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,\n      v5, v6, v7, v8);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\ninternal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {\n  return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,\n      v4, v5, v6, v7, v8, v9);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\ninternal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,\n    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {\n  return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,\n      v2, v3, v4, v5, v6, v7, v8, v9, v10);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11>\ninternal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,\n    T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11) {\n  return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,\n      T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12>\ninternal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n    T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12) {\n  return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13>\ninternal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n    T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13) {\n  return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14>\ninternal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {\n  return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,\n      v14);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15>\ninternal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,\n    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {\n  return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,\n      v13, v14, v15);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16>\ninternal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16) {\n  return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,\n      v12, v13, v14, v15, v16);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17>\ninternal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17) {\n  return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,\n      v11, v12, v13, v14, v15, v16, v17);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18>\ninternal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,\n    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18) {\n  return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,\n      v10, v11, v12, v13, v14, v15, v16, v17, v18);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19>\ninternal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,\n    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,\n    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {\n  return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,\n      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20>\ninternal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,\n    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {\n  return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,\n      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21>\ninternal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,\n    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {\n  return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,\n      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22>\ninternal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3,\n    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22) {\n  return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,\n      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,\n      v20, v21, v22);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23>\ninternal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22, T23 v23) {\n  return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,\n      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,\n      v20, v21, v22, v23);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24>\ninternal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22, T23 v23, T24 v24) {\n  return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,\n      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,\n      v19, v20, v21, v22, v23, v24);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25>\ninternal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1,\n    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,\n    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,\n    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {\n  return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,\n      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,\n      v18, v19, v20, v21, v22, v23, v24, v25);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26>\ninternal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n    T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26) {\n  return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,\n      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27>\ninternal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n    T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27) {\n  return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,\n      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28>\ninternal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n    T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28) {\n  return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,\n      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,\n      v28);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29>\ninternal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28, T29 v29) {\n  return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,\n      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,\n      v27, v28, v29);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30>\ninternal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,\n    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,\n    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,\n    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {\n  return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,\n      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,\n      v26, v27, v28, v29, v30);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31>\ninternal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {\n  return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,\n      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,\n      v25, v26, v27, v28, v29, v30, v31);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32>\ninternal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,\n    T32 v32) {\n  return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,\n      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,\n      v24, v25, v26, v27, v28, v29, v30, v31, v32);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33>\ninternal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,\n    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,\n    T32 v32, T33 v33) {\n  return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,\n      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,\n      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34>\ninternal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,\n    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,\n    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,\n    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,\n    T31 v31, T32 v32, T33 v33, T34 v34) {\n  return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,\n      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,\n      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35>\ninternal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,\n    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,\n    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,\n    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {\n  return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,\n      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,\n      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36>\ninternal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,\n    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,\n    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,\n    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {\n  return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,\n      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,\n      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,\n      v34, v35, v36);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37>\ninternal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3,\n    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,\n    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,\n    T37 v37) {\n  return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,\n      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,\n      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,\n      v34, v35, v36, v37);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38>\ninternal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,\n    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,\n    T37 v37, T38 v38) {\n  return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,\n      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,\n      v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,\n      v33, v34, v35, v36, v37, v38);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39>\ninternal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2,\n    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,\n    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,\n    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,\n    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,\n    T37 v37, T38 v38, T39 v39) {\n  return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,\n      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,\n      v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,\n      v32, v33, v34, v35, v36, v37, v38, v39);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40>\ninternal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1,\n    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,\n    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,\n    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,\n    T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,\n    T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {\n  return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,\n      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,\n      v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41>\ninternal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n    T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {\n  return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,\n      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,\n      v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42>\ninternal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n    T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n    T42 v42) {\n  return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,\n      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,\n      v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,\n      v42);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43>\ninternal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n    T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n    T42 v42, T43 v43) {\n  return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,\n      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,\n      v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,\n      v41, v42, v43);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44>\ninternal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n    T42 v42, T43 v43, T44 v44) {\n  return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,\n      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,\n      v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,\n      v40, v41, v42, v43, v44);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45>\ninternal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,\n    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,\n    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,\n    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,\n    T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,\n    T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {\n  return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,\n      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,\n      v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,\n      v39, v40, v41, v42, v43, v44, v45);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46>\ninternal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,\n    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,\n    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {\n  return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,\n      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,\n      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,\n      v38, v39, v40, v41, v42, v43, v44, v45, v46);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47>\ninternal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,\n    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,\n    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {\n  return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,\n      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,\n      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,\n      v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48>\ninternal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,\n    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,\n    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,\n    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,\n    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,\n    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,\n    T48 v48) {\n  return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,\n      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,\n      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,\n      v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49>\ninternal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,\n    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,\n    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,\n    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,\n    T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,\n    T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,\n    T47 v47, T48 v48, T49 v49) {\n  return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,\n      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,\n      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,\n      v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49, typename T50>\ninternal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,\n    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,\n    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,\n    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,\n    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,\n    T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,\n    T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {\n  return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,\n      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,\n      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,\n      v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,\n      v48, v49, v50);\n}\n\n// Bool() allows generating tests with parameters in a set of (false, true).\n//\n// Synopsis:\n// Bool()\n//   - returns a generator producing sequences with elements {false, true}.\n//\n// It is useful when testing code that depends on Boolean flags. Combinations\n// of multiple flags can be tested when several Bool()'s are combined using\n// Combine() function.\n//\n// In the following example all tests in the test case FlagDependentTest\n// will be instantiated twice with parameters false and true.\n//\n// class FlagDependentTest : public testing::TestWithParam<bool> {\n//   virtual void SetUp() {\n//     external_flag = GetParam();\n//   }\n// }\n// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());\n//\ninline internal::ParamGenerator<bool> Bool() {\n  return Values(false, true);\n}\n\n# if GTEST_HAS_COMBINE\n// Combine() allows the user to combine two or more sequences to produce\n// values of a Cartesian product of those sequences' elements.\n//\n// Synopsis:\n// Combine(gen1, gen2, ..., genN)\n//   - returns a generator producing sequences with elements coming from\n//     the Cartesian product of elements from the sequences generated by\n//     gen1, gen2, ..., genN. The sequence elements will have a type of\n//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types\n//     of elements from sequences produces by gen1, gen2, ..., genN.\n//\n// Combine can have up to 10 arguments. This number is currently limited\n// by the maximum number of elements in the tuple implementation used by Google\n// Test.\n//\n// Example:\n//\n// This will instantiate tests in test case AnimalTest each one with\n// the parameter values tuple(\"cat\", BLACK), tuple(\"cat\", WHITE),\n// tuple(\"dog\", BLACK), and tuple(\"dog\", WHITE):\n//\n// enum Color { BLACK, GRAY, WHITE };\n// class AnimalTest\n//     : public testing::TestWithParam<tuple<const char*, Color> > {...};\n//\n// TEST_P(AnimalTest, AnimalLooksNice) {...}\n//\n// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,\n//                         Combine(Values(\"cat\", \"dog\"),\n//                                 Values(BLACK, WHITE)));\n//\n// This will instantiate tests in FlagDependentTest with all variations of two\n// Boolean flags:\n//\n// class FlagDependentTest\n//     : public testing::TestWithParam<tuple<bool, bool> > {\n//   virtual void SetUp() {\n//     // Assigns external_flag_1 and external_flag_2 values from the tuple.\n//     tie(external_flag_1, external_flag_2) = GetParam();\n//   }\n// };\n//\n// TEST_P(FlagDependentTest, TestFeature1) {\n//   // Test your code using external_flag_1 and external_flag_2 here.\n// }\n// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,\n//                         Combine(Bool(), Bool()));\n//\ntemplate <typename Generator1, typename Generator2>\ninternal::CartesianProductHolder2<Generator1, Generator2> Combine(\n    const Generator1& g1, const Generator2& g2) {\n  return internal::CartesianProductHolder2<Generator1, Generator2>(\n      g1, g2);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3>\ninternal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3) {\n  return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(\n      g1, g2, g3);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4>\ninternal::CartesianProductHolder4<Generator1, Generator2, Generator3,\n    Generator4> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4) {\n  return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,\n      Generator4>(\n      g1, g2, g3, g4);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5>\ninternal::CartesianProductHolder5<Generator1, Generator2, Generator3,\n    Generator4, Generator5> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5) {\n  return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,\n      Generator4, Generator5>(\n      g1, g2, g3, g4, g5);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5, typename Generator6>\ninternal::CartesianProductHolder6<Generator1, Generator2, Generator3,\n    Generator4, Generator5, Generator6> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5, const Generator6& g6) {\n  return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,\n      Generator4, Generator5, Generator6>(\n      g1, g2, g3, g4, g5, g6);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5, typename Generator6,\n    typename Generator7>\ninternal::CartesianProductHolder7<Generator1, Generator2, Generator3,\n    Generator4, Generator5, Generator6, Generator7> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5, const Generator6& g6,\n        const Generator7& g7) {\n  return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,\n      Generator4, Generator5, Generator6, Generator7>(\n      g1, g2, g3, g4, g5, g6, g7);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5, typename Generator6,\n    typename Generator7, typename Generator8>\ninternal::CartesianProductHolder8<Generator1, Generator2, Generator3,\n    Generator4, Generator5, Generator6, Generator7, Generator8> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5, const Generator6& g6,\n        const Generator7& g7, const Generator8& g8) {\n  return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,\n      Generator4, Generator5, Generator6, Generator7, Generator8>(\n      g1, g2, g3, g4, g5, g6, g7, g8);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5, typename Generator6,\n    typename Generator7, typename Generator8, typename Generator9>\ninternal::CartesianProductHolder9<Generator1, Generator2, Generator3,\n    Generator4, Generator5, Generator6, Generator7, Generator8,\n    Generator9> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5, const Generator6& g6,\n        const Generator7& g7, const Generator8& g8, const Generator9& g9) {\n  return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,\n      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(\n      g1, g2, g3, g4, g5, g6, g7, g8, g9);\n}\n\ntemplate <typename Generator1, typename Generator2, typename Generator3,\n    typename Generator4, typename Generator5, typename Generator6,\n    typename Generator7, typename Generator8, typename Generator9,\n    typename Generator10>\ninternal::CartesianProductHolder10<Generator1, Generator2, Generator3,\n    Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,\n    Generator10> Combine(\n    const Generator1& g1, const Generator2& g2, const Generator3& g3,\n        const Generator4& g4, const Generator5& g5, const Generator6& g6,\n        const Generator7& g7, const Generator8& g8, const Generator9& g9,\n        const Generator10& g10) {\n  return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,\n      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,\n      Generator10>(\n      g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);\n}\n# endif  // GTEST_HAS_COMBINE\n\n\n\n# define TEST_P(test_case_name, test_name) \\\n  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \\\n      : public test_case_name { \\\n   public: \\\n    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \\\n    virtual void TestBody(); \\\n   private: \\\n    static int AddToRegistry() { \\\n      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \\\n          GetTestCasePatternHolder<test_case_name>(\\\n              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\\\n                  #test_case_name, \\\n                  #test_name, \\\n                  new ::testing::internal::TestMetaFactory< \\\n                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \\\n      return 0; \\\n    } \\\n    static int gtest_registering_dummy_; \\\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(\\\n        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \\\n  }; \\\n  int GTEST_TEST_CLASS_NAME_(test_case_name, \\\n                             test_name)::gtest_registering_dummy_ = \\\n      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \\\n  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()\n\n# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \\\n  ::testing::internal::ParamGenerator<test_case_name::ParamType> \\\n      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \\\n  int gtest_##prefix##test_case_name##_dummy_ = \\\n      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \\\n          GetTestCasePatternHolder<test_case_name>(\\\n              #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\\\n                  #prefix, \\\n                  &gtest_##prefix##test_case_name##_EvalGenerator_, \\\n                  __FILE__, __LINE__)\n\n}  // namespace testing\n\n#endif  // GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-param-test.h.pump",
    "content": "$$ -*- mode: c++; -*-\n$var n = 50  $$ Maximum length of Values arguments we want to support.\n$var maxtuple = 10  $$ Maximum number of Combine arguments we want to support.\n// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: vladl@google.com (Vlad Losev)\n//\n// Macros and functions for implementing parameterized tests\n// in Google C++ Testing Framework (Google Test)\n//\n// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n\n\n// Value-parameterized tests allow you to test your code with different\n// parameters without writing multiple copies of the same test.\n//\n// Here is how you use value-parameterized tests:\n\n#if 0\n\n// To write value-parameterized tests, first you should define a fixture\n// class. It is usually derived from testing::TestWithParam<T> (see below for\n// another inheritance scheme that's sometimes useful in more complicated\n// class hierarchies), where the type of your parameter values.\n// TestWithParam<T> is itself derived from testing::Test. T can be any\n// copyable type. If it's a raw pointer, you are responsible for managing the\n// lifespan of the pointed values.\n\nclass FooTest : public ::testing::TestWithParam<const char*> {\n  // You can implement all the usual class fixture members here.\n};\n\n// Then, use the TEST_P macro to define as many parameterized tests\n// for this fixture as you want. The _P suffix is for \"parameterized\"\n// or \"pattern\", whichever you prefer to think.\n\nTEST_P(FooTest, DoesBlah) {\n  // Inside a test, access the test parameter with the GetParam() method\n  // of the TestWithParam<T> class:\n  EXPECT_TRUE(foo.Blah(GetParam()));\n  ...\n}\n\nTEST_P(FooTest, HasBlahBlah) {\n  ...\n}\n\n// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test\n// case with any set of parameters you want. Google Test defines a number\n// of functions for generating test parameters. They return what we call\n// (surprise!) parameter generators. Here is a  summary of them, which\n// are all in the testing namespace:\n//\n//\n//  Range(begin, end [, step]) - Yields values {begin, begin+step,\n//                               begin+step+step, ...}. The values do not\n//                               include end. step defaults to 1.\n//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.\n//  ValuesIn(container)        - Yields values from a C-style array, an STL\n//  ValuesIn(begin,end)          container, or an iterator range [begin, end).\n//  Bool()                     - Yields sequence {false, true}.\n//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product\n//                               for the math savvy) of the values generated\n//                               by the N generators.\n//\n// For more details, see comments at the definitions of these functions below\n// in this file.\n//\n// The following statement will instantiate tests from the FooTest test case\n// each with parameter values \"meeny\", \"miny\", and \"moe\".\n\nINSTANTIATE_TEST_CASE_P(InstantiationName,\n                        FooTest,\n                        Values(\"meeny\", \"miny\", \"moe\"));\n\n// To distinguish different instances of the pattern, (yes, you\n// can instantiate it more then once) the first argument to the\n// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the\n// actual test case name. Remember to pick unique prefixes for different\n// instantiations. The tests from the instantiation above will have\n// these names:\n//\n//    * InstantiationName/FooTest.DoesBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.DoesBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.DoesBlah/2 for \"moe\"\n//    * InstantiationName/FooTest.HasBlahBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.HasBlahBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.HasBlahBlah/2 for \"moe\"\n//\n// You can use these names in --gtest_filter.\n//\n// This statement will instantiate all tests from FooTest again, each\n// with parameter values \"cat\" and \"dog\":\n\nconst char* pets[] = {\"cat\", \"dog\"};\nINSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));\n\n// The tests from the instantiation above will have these names:\n//\n//    * AnotherInstantiationName/FooTest.DoesBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.DoesBlah/1 for \"dog\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for \"dog\"\n//\n// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests\n// in the given test case, whether their definitions come before or\n// AFTER the INSTANTIATE_TEST_CASE_P statement.\n//\n// Please also note that generator expressions (including parameters to the\n// generators) are evaluated in InitGoogleTest(), after main() has started.\n// This allows the user on one hand, to adjust generator parameters in order\n// to dynamically determine a set of tests to run and on the other hand,\n// give the user a chance to inspect the generated tests with Google Test\n// reflection API before RUN_ALL_TESTS() is executed.\n//\n// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc\n// for more examples.\n//\n// In the future, we plan to publish the API for defining new parameter\n// generators. But for now this interface remains part of the internal\n// implementation and is subject to change.\n//\n//\n// A parameterized test fixture must be derived from testing::Test and from\n// testing::WithParamInterface<T>, where T is the type of the parameter\n// values. Inheriting from TestWithParam<T> satisfies that requirement because\n// TestWithParam<T> inherits from both Test and WithParamInterface. In more\n// complicated hierarchies, however, it is occasionally useful to inherit\n// separately from Test and WithParamInterface. For example:\n\nclass BaseTest : public ::testing::Test {\n  // You can inherit all the usual members for a non-parameterized test\n  // fixture here.\n};\n\nclass DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {\n  // The usual test fixture members go here too.\n};\n\nTEST_F(BaseTest, HasFoo) {\n  // This is an ordinary non-parameterized test.\n}\n\nTEST_P(DerivedTest, DoesBlah) {\n  // GetParam works just the same here as if you inherit from TestWithParam.\n  EXPECT_TRUE(foo.Blah(GetParam()));\n}\n\n#endif  // 0\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if !GTEST_OS_SYMBIAN\n# include <utility>\n#endif\n\n// scripts/fuse_gtest.py depends on gtest's own header being #included\n// *unconditionally*.  Therefore these #includes cannot be moved\n// inside #if GTEST_HAS_PARAM_TEST.\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-param-util-generated.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nnamespace testing {\n\n// Functions producing parameter generators.\n//\n// Google Test uses these generators to produce parameters for value-\n// parameterized tests. When a parameterized test case is instantiated\n// with a particular generator, Google Test creates and runs tests\n// for each element in the sequence produced by the generator.\n//\n// In the following sample, tests from test case FooTest are instantiated\n// each three times with parameter values 3, 5, and 8:\n//\n// class FooTest : public TestWithParam<int> { ... };\n//\n// TEST_P(FooTest, TestThis) {\n// }\n// TEST_P(FooTest, TestThat) {\n// }\n// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));\n//\n\n// Range() returns generators providing sequences of values in a range.\n//\n// Synopsis:\n// Range(start, end)\n//   - returns a generator producing a sequence of values {start, start+1,\n//     start+2, ..., }.\n// Range(start, end, step)\n//   - returns a generator producing a sequence of values {start, start+step,\n//     start+step+step, ..., }.\n// Notes:\n//   * The generated sequences never include end. For example, Range(1, 5)\n//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)\n//     returns a generator producing {1, 3, 5, 7}.\n//   * start and end must have the same type. That type may be any integral or\n//     floating-point type or a user defined type satisfying these conditions:\n//     * It must be assignable (have operator=() defined).\n//     * It must have operator+() (operator+(int-compatible type) for\n//       two-operand version).\n//     * It must have operator<() defined.\n//     Elements in the resulting sequences will also have that type.\n//   * Condition start < end must be satisfied in order for resulting sequences\n//     to contain any elements.\n//\ntemplate <typename T, typename IncrementT>\ninternal::ParamGenerator<T> Range(T start, T end, IncrementT step) {\n  return internal::ParamGenerator<T>(\n      new internal::RangeGenerator<T, IncrementT>(start, end, step));\n}\n\ntemplate <typename T>\ninternal::ParamGenerator<T> Range(T start, T end) {\n  return Range(start, end, 1);\n}\n\n// ValuesIn() function allows generation of tests with parameters coming from\n// a container.\n//\n// Synopsis:\n// ValuesIn(const T (&array)[N])\n//   - returns a generator producing sequences with elements from\n//     a C-style array.\n// ValuesIn(const Container& container)\n//   - returns a generator producing sequences with elements from\n//     an STL-style container.\n// ValuesIn(Iterator begin, Iterator end)\n//   - returns a generator producing sequences with elements from\n//     a range [begin, end) defined by a pair of STL-style iterators. These\n//     iterators can also be plain C pointers.\n//\n// Please note that ValuesIn copies the values from the containers\n// passed in and keeps them to generate tests in RUN_ALL_TESTS().\n//\n// Examples:\n//\n// This instantiates tests from test case StringTest\n// each with C-string values of \"foo\", \"bar\", and \"baz\":\n//\n// const char* strings[] = {\"foo\", \"bar\", \"baz\"};\n// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));\n//\n// This instantiates tests from test case StlStringTest\n// each with STL strings with values \"a\" and \"b\":\n//\n// ::std::vector< ::std::string> GetParameterStrings() {\n//   ::std::vector< ::std::string> v;\n//   v.push_back(\"a\");\n//   v.push_back(\"b\");\n//   return v;\n// }\n//\n// INSTANTIATE_TEST_CASE_P(CharSequence,\n//                         StlStringTest,\n//                         ValuesIn(GetParameterStrings()));\n//\n//\n// This will also instantiate tests from CharTest\n// each with parameter values 'a' and 'b':\n//\n// ::std::list<char> GetParameterChars() {\n//   ::std::list<char> list;\n//   list.push_back('a');\n//   list.push_back('b');\n//   return list;\n// }\n// ::std::list<char> l = GetParameterChars();\n// INSTANTIATE_TEST_CASE_P(CharSequence2,\n//                         CharTest,\n//                         ValuesIn(l.begin(), l.end()));\n//\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end) {\n  typedef typename ::testing::internal::IteratorTraits<ForwardIterator>\n      ::value_type ParamType;\n  return internal::ParamGenerator<ParamType>(\n      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));\n}\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {\n  return ValuesIn(array, array + N);\n}\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container) {\n  return ValuesIn(container.begin(), container.end());\n}\n\n// Values() allows generating tests from explicitly specified list of\n// parameters.\n//\n// Synopsis:\n// Values(T v1, T v2, ..., T vN)\n//   - returns a generator producing sequences with elements v1, v2, ..., vN.\n//\n// For example, this instantiates tests from test case BarTest each\n// with values \"one\", \"two\", and \"three\":\n//\n// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values(\"one\", \"two\", \"three\"));\n//\n// This instantiates tests from test case BazTest each with values 1, 2, 3.5.\n// The exact type of values will depend on the type of parameter in BazTest.\n//\n// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));\n//\n// Currently, Values() supports from 1 to $n parameters.\n//\n$range i 1..n\n$for i [[\n$range j 1..i\n\ntemplate <$for j, [[typename T$j]]>\ninternal::ValueArray$i<$for j, [[T$j]]> Values($for j, [[T$j v$j]]) {\n  return internal::ValueArray$i<$for j, [[T$j]]>($for j, [[v$j]]);\n}\n\n]]\n\n// Bool() allows generating tests with parameters in a set of (false, true).\n//\n// Synopsis:\n// Bool()\n//   - returns a generator producing sequences with elements {false, true}.\n//\n// It is useful when testing code that depends on Boolean flags. Combinations\n// of multiple flags can be tested when several Bool()'s are combined using\n// Combine() function.\n//\n// In the following example all tests in the test case FlagDependentTest\n// will be instantiated twice with parameters false and true.\n//\n// class FlagDependentTest : public testing::TestWithParam<bool> {\n//   virtual void SetUp() {\n//     external_flag = GetParam();\n//   }\n// }\n// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());\n//\ninline internal::ParamGenerator<bool> Bool() {\n  return Values(false, true);\n}\n\n# if GTEST_HAS_COMBINE\n// Combine() allows the user to combine two or more sequences to produce\n// values of a Cartesian product of those sequences' elements.\n//\n// Synopsis:\n// Combine(gen1, gen2, ..., genN)\n//   - returns a generator producing sequences with elements coming from\n//     the Cartesian product of elements from the sequences generated by\n//     gen1, gen2, ..., genN. The sequence elements will have a type of\n//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types\n//     of elements from sequences produces by gen1, gen2, ..., genN.\n//\n// Combine can have up to $maxtuple arguments. This number is currently limited\n// by the maximum number of elements in the tuple implementation used by Google\n// Test.\n//\n// Example:\n//\n// This will instantiate tests in test case AnimalTest each one with\n// the parameter values tuple(\"cat\", BLACK), tuple(\"cat\", WHITE),\n// tuple(\"dog\", BLACK), and tuple(\"dog\", WHITE):\n//\n// enum Color { BLACK, GRAY, WHITE };\n// class AnimalTest\n//     : public testing::TestWithParam<tuple<const char*, Color> > {...};\n//\n// TEST_P(AnimalTest, AnimalLooksNice) {...}\n//\n// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,\n//                         Combine(Values(\"cat\", \"dog\"),\n//                                 Values(BLACK, WHITE)));\n//\n// This will instantiate tests in FlagDependentTest with all variations of two\n// Boolean flags:\n//\n// class FlagDependentTest\n//     : public testing::TestWithParam<tuple<bool, bool> > {\n//   virtual void SetUp() {\n//     // Assigns external_flag_1 and external_flag_2 values from the tuple.\n//     tie(external_flag_1, external_flag_2) = GetParam();\n//   }\n// };\n//\n// TEST_P(FlagDependentTest, TestFeature1) {\n//   // Test your code using external_flag_1 and external_flag_2 here.\n// }\n// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,\n//                         Combine(Bool(), Bool()));\n//\n$range i 2..maxtuple\n$for i [[\n$range j 1..i\n\ntemplate <$for j, [[typename Generator$j]]>\ninternal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(\n    $for j, [[const Generator$j& g$j]]) {\n  return internal::CartesianProductHolder$i<$for j, [[Generator$j]]>(\n      $for j, [[g$j]]);\n}\n\n]]\n# endif  // GTEST_HAS_COMBINE\n\n\n\n# define TEST_P(test_case_name, test_name) \\\n  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \\\n      : public test_case_name { \\\n   public: \\\n    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \\\n    virtual void TestBody(); \\\n   private: \\\n    static int AddToRegistry() { \\\n      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \\\n          GetTestCasePatternHolder<test_case_name>(\\\n              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\\\n                  #test_case_name, \\\n                  #test_name, \\\n                  new ::testing::internal::TestMetaFactory< \\\n                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \\\n      return 0; \\\n    } \\\n    static int gtest_registering_dummy_; \\\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(\\\n        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \\\n  }; \\\n  int GTEST_TEST_CLASS_NAME_(test_case_name, \\\n                             test_name)::gtest_registering_dummy_ = \\\n      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \\\n  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()\n\n# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \\\n  ::testing::internal::ParamGenerator<test_case_name::ParamType> \\\n      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \\\n  int gtest_##prefix##test_case_name##_dummy_ = \\\n      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \\\n          GetTestCasePatternHolder<test_case_name>(\\\n              #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\\\n                  #prefix, \\\n                  &gtest_##prefix##test_case_name##_EvalGenerator_, \\\n                  __FILE__, __LINE__)\n\n}  // namespace testing\n\n#endif  // GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-printers.h",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Google Test - The Google C++ Testing Framework\n//\n// This file implements a universal value printer that can print a\n// value of any type T:\n//\n//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);\n//\n// A user can teach this function how to print a class type T by\n// defining either operator<<() or PrintTo() in the namespace that\n// defines T.  More specifically, the FIRST defined function in the\n// following list will be used (assuming T is defined in namespace\n// foo):\n//\n//   1. foo::PrintTo(const T&, ostream*)\n//   2. operator<<(ostream&, const T&) defined in either foo or the\n//      global namespace.\n//\n// If none of the above is defined, it will print the debug string of\n// the value if it is a protocol buffer, or print the raw bytes in the\n// value otherwise.\n//\n// To aid debugging: when T is a reference type, the address of the\n// value is also printed; when T is a (const) char pointer, both the\n// pointer value and the NUL-terminated string it points to are\n// printed.\n//\n// We also provide some convenient wrappers:\n//\n//   // Prints a value to a string.  For a (const or not) char\n//   // pointer, the NUL-terminated string (but not the pointer) is\n//   // printed.\n//   std::string ::testing::PrintToString(const T& value);\n//\n//   // Prints a value tersely: for a reference type, the referenced\n//   // value (but not the address) is printed; for a (const or not) char\n//   // pointer, the NUL-terminated string (but not the pointer) is\n//   // printed.\n//   void ::testing::internal::UniversalTersePrint(const T& value, ostream*);\n//\n//   // Prints value using the type inferred by the compiler.  The difference\n//   // from UniversalTersePrint() is that this function prints both the\n//   // pointer and the NUL-terminated string for a (const or not) char pointer.\n//   void ::testing::internal::UniversalPrint(const T& value, ostream*);\n//\n//   // Prints the fields of a tuple tersely to a string vector, one\n//   // element for each field. Tuple support must be enabled in\n//   // gtest-port.h.\n//   std::vector<string> UniversalTersePrintTupleFieldsToStrings(\n//       const Tuple& value);\n//\n// Known limitation:\n//\n// The print primitives print the elements of an STL-style container\n// using the compiler-inferred type of *iter where iter is a\n// const_iterator of the container.  When const_iterator is an input\n// iterator but not a forward iterator, this inferred type may not\n// match value_type, and the print output may be incorrect.  In\n// practice, this is rarely a problem as for most containers\n// const_iterator is a forward iterator.  We'll fix this if there's an\n// actual need for it.  Note that this fix cannot rely on value_type\n// being defined as many user-defined container types don't have\n// value_type.\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n\n#include <ostream>  // NOLINT\n#include <sstream>\n#include <string>\n#include <utility>\n#include <vector>\n#include \"gtest/internal/gtest-port.h\"\n#include \"gtest/internal/gtest-internal.h\"\n\nnamespace testing {\n\n// Definitions in the 'internal' and 'internal2' name spaces are\n// subject to change without notice.  DO NOT USE THEM IN USER CODE!\nnamespace internal2 {\n\n// Prints the given number of bytes in the given object to the given\n// ostream.\nGTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes,\n                                     size_t count,\n                                     ::std::ostream* os);\n\n// For selecting which printer to use when a given type has neither <<\n// nor PrintTo().\nenum TypeKind {\n  kProtobuf,              // a protobuf type\n  kConvertibleToInteger,  // a type implicitly convertible to BiggestInt\n                          // (e.g. a named or unnamed enum type)\n  kOtherType              // anything else\n};\n\n// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called\n// by the universal printer to print a value of type T when neither\n// operator<< nor PrintTo() is defined for T, where kTypeKind is the\n// \"kind\" of T as defined by enum TypeKind.\ntemplate <typename T, TypeKind kTypeKind>\nclass TypeWithoutFormatter {\n public:\n  // This default version is called when kTypeKind is kOtherType.\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    PrintBytesInObjectTo(reinterpret_cast<const unsigned char*>(&value),\n                         sizeof(value), os);\n  }\n};\n\n// We print a protobuf using its ShortDebugString() when the string\n// doesn't exceed this many characters; otherwise we print it using\n// DebugString() for better readability.\nconst size_t kProtobufOneLinerMaxLength = 50;\n\ntemplate <typename T>\nclass TypeWithoutFormatter<T, kProtobuf> {\n public:\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    const ::testing::internal::string short_str = value.ShortDebugString();\n    const ::testing::internal::string pretty_str =\n        short_str.length() <= kProtobufOneLinerMaxLength ?\n        short_str : (\"\\n\" + value.DebugString());\n    *os << (\"<\" + pretty_str + \">\");\n  }\n};\n\ntemplate <typename T>\nclass TypeWithoutFormatter<T, kConvertibleToInteger> {\n public:\n  // Since T has no << operator or PrintTo() but can be implicitly\n  // converted to BiggestInt, we print it as a BiggestInt.\n  //\n  // Most likely T is an enum type (either named or unnamed), in which\n  // case printing it as an integer is the desired behavior.  In case\n  // T is not an enum, printing it as an integer is the best we can do\n  // given that it has no user-defined printer.\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    const internal::BiggestInt kBigInt = value;\n    *os << kBigInt;\n  }\n};\n\n// Prints the given value to the given ostream.  If the value is a\n// protocol message, its debug string is printed; if it's an enum or\n// of a type implicitly convertible to BiggestInt, it's printed as an\n// integer; otherwise the bytes in the value are printed.  This is\n// what UniversalPrinter<T>::Print() does when it knows nothing about\n// type T and T has neither << operator nor PrintTo().\n//\n// A user can override this behavior for a class type Foo by defining\n// a << operator in the namespace where Foo is defined.\n//\n// We put this operator in namespace 'internal2' instead of 'internal'\n// to simplify the implementation, as much code in 'internal' needs to\n// use << in STL, which would conflict with our own << were it defined\n// in 'internal'.\n//\n// Note that this operator<< takes a generic std::basic_ostream<Char,\n// CharTraits> type instead of the more restricted std::ostream.  If\n// we define it to take an std::ostream instead, we'll get an\n// \"ambiguous overloads\" compiler error when trying to print a type\n// Foo that supports streaming to std::basic_ostream<Char,\n// CharTraits>, as the compiler cannot tell whether\n// operator<<(std::ostream&, const T&) or\n// operator<<(std::basic_stream<Char, CharTraits>, const Foo&) is more\n// specific.\ntemplate <typename Char, typename CharTraits, typename T>\n::std::basic_ostream<Char, CharTraits>& operator<<(\n    ::std::basic_ostream<Char, CharTraits>& os, const T& x) {\n  TypeWithoutFormatter<T,\n      (internal::IsAProtocolMessage<T>::value ? kProtobuf :\n       internal::ImplicitlyConvertible<const T&, internal::BiggestInt>::value ?\n       kConvertibleToInteger : kOtherType)>::PrintValue(x, &os);\n  return os;\n}\n\n}  // namespace internal2\n}  // namespace testing\n\n// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up\n// magic needed for implementing UniversalPrinter won't work.\nnamespace testing_internal {\n\n// Used to print a value that is not an STL-style container when the\n// user doesn't define PrintTo() for it.\ntemplate <typename T>\nvoid DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) {\n  // With the following statement, during unqualified name lookup,\n  // testing::internal2::operator<< appears as if it was declared in\n  // the nearest enclosing namespace that contains both\n  // ::testing_internal and ::testing::internal2, i.e. the global\n  // namespace.  For more details, refer to the C++ Standard section\n  // 7.3.4-1 [namespace.udir].  This allows us to fall back onto\n  // testing::internal2::operator<< in case T doesn't come with a <<\n  // operator.\n  //\n  // We cannot write 'using ::testing::internal2::operator<<;', which\n  // gcc 3.3 fails to compile due to a compiler bug.\n  using namespace ::testing::internal2;  // NOLINT\n\n  // Assuming T is defined in namespace foo, in the next statement,\n  // the compiler will consider all of:\n  //\n  //   1. foo::operator<< (thanks to Koenig look-up),\n  //   2. ::operator<< (as the current namespace is enclosed in ::),\n  //   3. testing::internal2::operator<< (thanks to the using statement above).\n  //\n  // The operator<< whose type matches T best will be picked.\n  //\n  // We deliberately allow #2 to be a candidate, as sometimes it's\n  // impossible to define #1 (e.g. when foo is ::std, defining\n  // anything in it is undefined behavior unless you are a compiler\n  // vendor.).\n  *os << value;\n}\n\n}  // namespace testing_internal\n\nnamespace testing {\nnamespace internal {\n\n// UniversalPrinter<T>::Print(value, ostream_ptr) prints the given\n// value to the given ostream.  The caller must ensure that\n// 'ostream_ptr' is not NULL, or the behavior is undefined.\n//\n// We define UniversalPrinter as a class template (as opposed to a\n// function template), as we need to partially specialize it for\n// reference types, which cannot be done with function templates.\ntemplate <typename T>\nclass UniversalPrinter;\n\ntemplate <typename T>\nvoid UniversalPrint(const T& value, ::std::ostream* os);\n\n// Used to print an STL-style container when the user doesn't define\n// a PrintTo() for it.\ntemplate <typename C>\nvoid DefaultPrintTo(IsContainer /* dummy */,\n                    false_type /* is not a pointer */,\n                    const C& container, ::std::ostream* os) {\n  const size_t kMaxCount = 32;  // The maximum number of elements to print.\n  *os << '{';\n  size_t count = 0;\n  for (typename C::const_iterator it = container.begin();\n       it != container.end(); ++it, ++count) {\n    if (count > 0) {\n      *os << ',';\n      if (count == kMaxCount) {  // Enough has been printed.\n        *os << \" ...\";\n        break;\n      }\n    }\n    *os << ' ';\n    // We cannot call PrintTo(*it, os) here as PrintTo() doesn't\n    // handle *it being a native array.\n    internal::UniversalPrint(*it, os);\n  }\n\n  if (count > 0) {\n    *os << ' ';\n  }\n  *os << '}';\n}\n\n// Used to print a pointer that is neither a char pointer nor a member\n// pointer, when the user doesn't define PrintTo() for it.  (A member\n// variable pointer or member function pointer doesn't really point to\n// a location in the address space.  Their representation is\n// implementation-defined.  Therefore they will be printed as raw\n// bytes.)\ntemplate <typename T>\nvoid DefaultPrintTo(IsNotContainer /* dummy */,\n                    true_type /* is a pointer */,\n                    T* p, ::std::ostream* os) {\n  if (p == NULL) {\n    *os << \"NULL\";\n  } else {\n    // C++ doesn't allow casting from a function pointer to any object\n    // pointer.\n    //\n    // IsTrue() silences warnings: \"Condition is always true\",\n    // \"unreachable code\".\n    if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {\n      // T is not a function type.  We just call << to print p,\n      // relying on ADL to pick up user-defined << for their pointer\n      // types, if any.\n      *os << p;\n    } else {\n      // T is a function type, so '*os << p' doesn't do what we want\n      // (it just prints p as bool).  We want to print p as a const\n      // void*.  However, we cannot cast it to const void* directly,\n      // even using reinterpret_cast, as earlier versions of gcc\n      // (e.g. 3.4.5) cannot compile the cast when p is a function\n      // pointer.  Casting to UInt64 first solves the problem.\n      *os << reinterpret_cast<const void*>(\n          reinterpret_cast<internal::UInt64>(p));\n    }\n  }\n}\n\n// Used to print a non-container, non-pointer value when the user\n// doesn't define PrintTo() for it.\ntemplate <typename T>\nvoid DefaultPrintTo(IsNotContainer /* dummy */,\n                    false_type /* is not a pointer */,\n                    const T& value, ::std::ostream* os) {\n  ::testing_internal::DefaultPrintNonContainerTo(value, os);\n}\n\n// Prints the given value using the << operator if it has one;\n// otherwise prints the bytes in it.  This is what\n// UniversalPrinter<T>::Print() does when PrintTo() is not specialized\n// or overloaded for type T.\n//\n// A user can override this behavior for a class type Foo by defining\n// an overload of PrintTo() in the namespace where Foo is defined.  We\n// give the user this option as sometimes defining a << operator for\n// Foo is not desirable (e.g. the coding style may prevent doing it,\n// or there is already a << operator but it doesn't do what the user\n// wants).\ntemplate <typename T>\nvoid PrintTo(const T& value, ::std::ostream* os) {\n  // DefaultPrintTo() is overloaded.  The type of its first two\n  // arguments determine which version will be picked.  If T is an\n  // STL-style container, the version for container will be called; if\n  // T is a pointer, the pointer version will be called; otherwise the\n  // generic version will be called.\n  //\n  // Note that we check for container types here, prior to we check\n  // for protocol message types in our operator<<.  The rationale is:\n  //\n  // For protocol messages, we want to give people a chance to\n  // override Google Mock's format by defining a PrintTo() or\n  // operator<<.  For STL containers, other formats can be\n  // incompatible with Google Mock's format for the container\n  // elements; therefore we check for container types here to ensure\n  // that our format is used.\n  //\n  // The second argument of DefaultPrintTo() is needed to bypass a bug\n  // in Symbian's C++ compiler that prevents it from picking the right\n  // overload between:\n  //\n  //   PrintTo(const T& x, ...);\n  //   PrintTo(T* x, ...);\n  DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os);\n}\n\n// The following list of PrintTo() overloads tells\n// UniversalPrinter<T>::Print() how to print standard types (built-in\n// types, strings, plain arrays, and pointers).\n\n// Overloads for various char types.\nGTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os);\nGTEST_API_ void PrintTo(signed char c, ::std::ostream* os);\ninline void PrintTo(char c, ::std::ostream* os) {\n  // When printing a plain char, we always treat it as unsigned.  This\n  // way, the output won't be affected by whether the compiler thinks\n  // char is signed or not.\n  PrintTo(static_cast<unsigned char>(c), os);\n}\n\n// Overloads for other simple built-in types.\ninline void PrintTo(bool x, ::std::ostream* os) {\n  *os << (x ? \"true\" : \"false\");\n}\n\n// Overload for wchar_t type.\n// Prints a wchar_t as a symbol if it is printable or as its internal\n// code otherwise and also as its decimal code (except for L'\\0').\n// The L'\\0' char is printed as \"L'\\\\0'\". The decimal code is printed\n// as signed integer when wchar_t is implemented by the compiler\n// as a signed type and is printed as an unsigned integer when wchar_t\n// is implemented as an unsigned type.\nGTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os);\n\n// Overloads for C strings.\nGTEST_API_ void PrintTo(const char* s, ::std::ostream* os);\ninline void PrintTo(char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const char*>(s), os);\n}\n\n// signed/unsigned char is often used for representing binary data, so\n// we print pointers to it as void* to be safe.\ninline void PrintTo(const signed char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(signed char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(const unsigned char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(unsigned char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\n\n// MSVC can be configured to define wchar_t as a typedef of unsigned\n// short.  It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native\n// type.  When wchar_t is a typedef, defining an overload for const\n// wchar_t* would cause unsigned short* be printed as a wide string,\n// possibly causing invalid memory accesses.\n#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)\n// Overloads for wide C strings\nGTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os);\ninline void PrintTo(wchar_t* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const wchar_t*>(s), os);\n}\n#endif\n\n// Overload for C arrays.  Multi-dimensional arrays are printed\n// properly.\n\n// Prints the given number of elements in an array, without printing\n// the curly braces.\ntemplate <typename T>\nvoid PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) {\n  UniversalPrint(a[0], os);\n  for (size_t i = 1; i != count; i++) {\n    *os << \", \";\n    UniversalPrint(a[i], os);\n  }\n}\n\n// Overloads for ::string and ::std::string.\n#if GTEST_HAS_GLOBAL_STRING\nGTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os);\ninline void PrintTo(const ::string& s, ::std::ostream* os) {\n  PrintStringTo(s, os);\n}\n#endif  // GTEST_HAS_GLOBAL_STRING\n\nGTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os);\ninline void PrintTo(const ::std::string& s, ::std::ostream* os) {\n  PrintStringTo(s, os);\n}\n\n// Overloads for ::wstring and ::std::wstring.\n#if GTEST_HAS_GLOBAL_WSTRING\nGTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os);\ninline void PrintTo(const ::wstring& s, ::std::ostream* os) {\n  PrintWideStringTo(s, os);\n}\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n#if GTEST_HAS_STD_WSTRING\nGTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os);\ninline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {\n  PrintWideStringTo(s, os);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n#if GTEST_HAS_TR1_TUPLE\n// Overload for ::std::tr1::tuple.  Needed for printing function arguments,\n// which are packed as tuples.\n\n// Helper function for printing a tuple.  T must be instantiated with\n// a tuple type.\ntemplate <typename T>\nvoid PrintTupleTo(const T& t, ::std::ostream* os);\n\n// Overloaded PrintTo() for tuples of various arities.  We support\n// tuples of up-to 10 fields.  The following implementation works\n// regardless of whether tr1::tuple is implemented using the\n// non-standard variadic template feature or not.\n\ninline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1>\nvoid PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,\n             ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,\n             ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6, typename T7>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,\n             ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6, typename T7, typename T8>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,\n             ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6, typename T7, typename T8, typename T9>\nvoid PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,\n             ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6, typename T7, typename T8, typename T9, typename T10>\nvoid PrintTo(\n    const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,\n    ::std::ostream* os) {\n  PrintTupleTo(t, os);\n}\n#endif  // GTEST_HAS_TR1_TUPLE\n\n// Overload for std::pair.\ntemplate <typename T1, typename T2>\nvoid PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {\n  *os << '(';\n  // We cannot use UniversalPrint(value.first, os) here, as T1 may be\n  // a reference type.  The same for printing value.second.\n  UniversalPrinter<T1>::Print(value.first, os);\n  *os << \", \";\n  UniversalPrinter<T2>::Print(value.second, os);\n  *os << ')';\n}\n\n// Implements printing a non-reference type T by letting the compiler\n// pick the right overload of PrintTo() for T.\ntemplate <typename T>\nclass UniversalPrinter {\n public:\n  // MSVC warns about adding const to a function type, so we want to\n  // disable the warning.\n#ifdef _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4180)  // Temporarily disables warning 4180.\n#endif  // _MSC_VER\n\n  // Note: we deliberately don't call this PrintTo(), as that name\n  // conflicts with ::testing::internal::PrintTo in the body of the\n  // function.\n  static void Print(const T& value, ::std::ostream* os) {\n    // By default, ::testing::internal::PrintTo() is used for printing\n    // the value.\n    //\n    // Thanks to Koenig look-up, if T is a class and has its own\n    // PrintTo() function defined in its namespace, that function will\n    // be visible here.  Since it is more specific than the generic ones\n    // in ::testing::internal, it will be picked by the compiler in the\n    // following statement - exactly what we want.\n    PrintTo(value, os);\n  }\n\n#ifdef _MSC_VER\n# pragma warning(pop)           // Restores the warning state.\n#endif  // _MSC_VER\n};\n\n// UniversalPrintArray(begin, len, os) prints an array of 'len'\n// elements, starting at address 'begin'.\ntemplate <typename T>\nvoid UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {\n  if (len == 0) {\n    *os << \"{}\";\n  } else {\n    *os << \"{ \";\n    const size_t kThreshold = 18;\n    const size_t kChunkSize = 8;\n    // If the array has more than kThreshold elements, we'll have to\n    // omit some details by printing only the first and the last\n    // kChunkSize elements.\n    // TODO(wan@google.com): let the user control the threshold using a flag.\n    if (len <= kThreshold) {\n      PrintRawArrayTo(begin, len, os);\n    } else {\n      PrintRawArrayTo(begin, kChunkSize, os);\n      *os << \", ..., \";\n      PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os);\n    }\n    *os << \" }\";\n  }\n}\n// This overload prints a (const) char array compactly.\nGTEST_API_ void UniversalPrintArray(\n    const char* begin, size_t len, ::std::ostream* os);\n\n// This overload prints a (const) wchar_t array compactly.\nGTEST_API_ void UniversalPrintArray(\n    const wchar_t* begin, size_t len, ::std::ostream* os);\n\n// Implements printing an array type T[N].\ntemplate <typename T, size_t N>\nclass UniversalPrinter<T[N]> {\n public:\n  // Prints the given array, omitting some elements when there are too\n  // many.\n  static void Print(const T (&a)[N], ::std::ostream* os) {\n    UniversalPrintArray(a, N, os);\n  }\n};\n\n// Implements printing a reference type T&.\ntemplate <typename T>\nclass UniversalPrinter<T&> {\n public:\n  // MSVC warns about adding const to a function type, so we want to\n  // disable the warning.\n#ifdef _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4180)  // Temporarily disables warning 4180.\n#endif  // _MSC_VER\n\n  static void Print(const T& value, ::std::ostream* os) {\n    // Prints the address of the value.  We use reinterpret_cast here\n    // as static_cast doesn't compile when T is a function type.\n    *os << \"@\" << reinterpret_cast<const void*>(&value) << \" \";\n\n    // Then prints the value itself.\n    UniversalPrint(value, os);\n  }\n\n#ifdef _MSC_VER\n# pragma warning(pop)           // Restores the warning state.\n#endif  // _MSC_VER\n};\n\n// Prints a value tersely: for a reference type, the referenced value\n// (but not the address) is printed; for a (const) char pointer, the\n// NUL-terminated string (but not the pointer) is printed.\n\ntemplate <typename T>\nclass UniversalTersePrinter {\n public:\n  static void Print(const T& value, ::std::ostream* os) {\n    UniversalPrint(value, os);\n  }\n};\ntemplate <typename T>\nclass UniversalTersePrinter<T&> {\n public:\n  static void Print(const T& value, ::std::ostream* os) {\n    UniversalPrint(value, os);\n  }\n};\ntemplate <typename T, size_t N>\nclass UniversalTersePrinter<T[N]> {\n public:\n  static void Print(const T (&value)[N], ::std::ostream* os) {\n    UniversalPrinter<T[N]>::Print(value, os);\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<const char*> {\n public:\n  static void Print(const char* str, ::std::ostream* os) {\n    if (str == NULL) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(string(str), os);\n    }\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<char*> {\n public:\n  static void Print(char* str, ::std::ostream* os) {\n    UniversalTersePrinter<const char*>::Print(str, os);\n  }\n};\n\n#if GTEST_HAS_STD_WSTRING\ntemplate <>\nclass UniversalTersePrinter<const wchar_t*> {\n public:\n  static void Print(const wchar_t* str, ::std::ostream* os) {\n    if (str == NULL) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(::std::wstring(str), os);\n    }\n  }\n};\n#endif\n\ntemplate <>\nclass UniversalTersePrinter<wchar_t*> {\n public:\n  static void Print(wchar_t* str, ::std::ostream* os) {\n    UniversalTersePrinter<const wchar_t*>::Print(str, os);\n  }\n};\n\ntemplate <typename T>\nvoid UniversalTersePrint(const T& value, ::std::ostream* os) {\n  UniversalTersePrinter<T>::Print(value, os);\n}\n\n// Prints a value using the type inferred by the compiler.  The\n// difference between this and UniversalTersePrint() is that for a\n// (const) char pointer, this prints both the pointer and the\n// NUL-terminated string.\ntemplate <typename T>\nvoid UniversalPrint(const T& value, ::std::ostream* os) {\n  // A workarond for the bug in VC++ 7.1 that prevents us from instantiating\n  // UniversalPrinter with T directly.\n  typedef T T1;\n  UniversalPrinter<T1>::Print(value, os);\n}\n\n#if GTEST_HAS_TR1_TUPLE\ntypedef ::std::vector<string> Strings;\n\n// This helper template allows PrintTo() for tuples and\n// UniversalTersePrintTupleFieldsToStrings() to be defined by\n// induction on the number of tuple fields.  The idea is that\n// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N\n// fields in tuple t, and can be defined in terms of\n// TuplePrefixPrinter<N - 1>.\n\n// The inductive case.\ntemplate <size_t N>\nstruct TuplePrefixPrinter {\n  // Prints the first N fields of a tuple.\n  template <typename Tuple>\n  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {\n    TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os);\n    *os << \", \";\n    UniversalPrinter<typename ::std::tr1::tuple_element<N - 1, Tuple>::type>\n        ::Print(::std::tr1::get<N - 1>(t), os);\n  }\n\n  // Tersely prints the first N fields of a tuple to a string vector,\n  // one element for each field.\n  template <typename Tuple>\n  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {\n    TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings);\n    ::std::stringstream ss;\n    UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss);\n    strings->push_back(ss.str());\n  }\n};\n\n// Base cases.\ntemplate <>\nstruct TuplePrefixPrinter<0> {\n  template <typename Tuple>\n  static void PrintPrefixTo(const Tuple&, ::std::ostream*) {}\n\n  template <typename Tuple>\n  static void TersePrintPrefixToStrings(const Tuple&, Strings*) {}\n};\n// We have to specialize the entire TuplePrefixPrinter<> class\n// template here, even though the definition of\n// TersePrintPrefixToStrings() is the same as the generic version, as\n// Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't\n// support specializing a method template of a class template.\ntemplate <>\nstruct TuplePrefixPrinter<1> {\n  template <typename Tuple>\n  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {\n    UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>::\n        Print(::std::tr1::get<0>(t), os);\n  }\n\n  template <typename Tuple>\n  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {\n    ::std::stringstream ss;\n    UniversalTersePrint(::std::tr1::get<0>(t), &ss);\n    strings->push_back(ss.str());\n  }\n};\n\n// Helper function for printing a tuple.  T must be instantiated with\n// a tuple type.\ntemplate <typename T>\nvoid PrintTupleTo(const T& t, ::std::ostream* os) {\n  *os << \"(\";\n  TuplePrefixPrinter< ::std::tr1::tuple_size<T>::value>::\n      PrintPrefixTo(t, os);\n  *os << \")\";\n}\n\n// Prints the fields of a tuple tersely to a string vector, one\n// element for each field.  See the comment before\n// UniversalTersePrint() for how we define \"tersely\".\ntemplate <typename Tuple>\nStrings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {\n  Strings result;\n  TuplePrefixPrinter< ::std::tr1::tuple_size<Tuple>::value>::\n      TersePrintPrefixToStrings(value, &result);\n  return result;\n}\n#endif  // GTEST_HAS_TR1_TUPLE\n\n}  // namespace internal\n\ntemplate <typename T>\n::std::string PrintToString(const T& value) {\n  ::std::stringstream ss;\n  internal::UniversalTersePrinter<T>::Print(value, &ss);\n  return ss.str();\n}\n\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-spi.h",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Utilities for testing Google Test itself and code that uses Google Test\n// (e.g. frameworks built on top of Google Test).\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_\n#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_\n\n#include \"gtest/gtest.h\"\n\nnamespace testing {\n\n// This helper class can be used to mock out Google Test failure reporting\n// so that we can test Google Test or code that builds on Google Test.\n//\n// An object of this class appends a TestPartResult object to the\n// TestPartResultArray object given in the constructor whenever a Google Test\n// failure is reported. It can either intercept only failures that are\n// generated in the same thread that created this object or it can intercept\n// all generated failures. The scope of this mock object can be controlled with\n// the second argument to the two arguments constructor.\nclass GTEST_API_ ScopedFakeTestPartResultReporter\n    : public TestPartResultReporterInterface {\n public:\n  // The two possible mocking modes of this object.\n  enum InterceptMode {\n    INTERCEPT_ONLY_CURRENT_THREAD,  // Intercepts only thread local failures.\n    INTERCEPT_ALL_THREADS           // Intercepts all failures.\n  };\n\n  // The c'tor sets this object as the test part result reporter used\n  // by Google Test.  The 'result' parameter specifies where to report the\n  // results. This reporter will only catch failures generated in the current\n  // thread. DEPRECATED\n  explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result);\n\n  // Same as above, but you can choose the interception scope of this object.\n  ScopedFakeTestPartResultReporter(InterceptMode intercept_mode,\n                                   TestPartResultArray* result);\n\n  // The d'tor restores the previous test part result reporter.\n  virtual ~ScopedFakeTestPartResultReporter();\n\n  // Appends the TestPartResult object to the TestPartResultArray\n  // received in the constructor.\n  //\n  // This method is from the TestPartResultReporterInterface\n  // interface.\n  virtual void ReportTestPartResult(const TestPartResult& result);\n private:\n  void Init();\n\n  const InterceptMode intercept_mode_;\n  TestPartResultReporterInterface* old_reporter_;\n  TestPartResultArray* const result_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter);\n};\n\nnamespace internal {\n\n// A helper class for implementing EXPECT_FATAL_FAILURE() and\n// EXPECT_NONFATAL_FAILURE().  Its destructor verifies that the given\n// TestPartResultArray contains exactly one failure that has the given\n// type and contains the given substring.  If that's not the case, a\n// non-fatal failure will be generated.\nclass GTEST_API_ SingleFailureChecker {\n public:\n  // The constructor remembers the arguments.\n  SingleFailureChecker(const TestPartResultArray* results,\n                       TestPartResult::Type type,\n                       const string& substr);\n  ~SingleFailureChecker();\n private:\n  const TestPartResultArray* const results_;\n  const TestPartResult::Type type_;\n  const string substr_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker);\n};\n\n}  // namespace internal\n\n}  // namespace testing\n\n// A set of macros for testing Google Test assertions or code that's expected\n// to generate Google Test fatal failures.  It verifies that the given\n// statement will cause exactly one fatal Google Test failure with 'substr'\n// being part of the failure message.\n//\n// There are two different versions of this macro. EXPECT_FATAL_FAILURE only\n// affects and considers failures generated in the current thread and\n// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.\n//\n// The verification of the assertion is done correctly even when the statement\n// throws an exception or aborts the current function.\n//\n// Known restrictions:\n//   - 'statement' cannot reference local non-static variables or\n//     non-static members of the current object.\n//   - 'statement' cannot return a value.\n//   - You cannot stream a failure message to this macro.\n//\n// Note that even though the implementations of the following two\n// macros are much alike, we cannot refactor them to use a common\n// helper macro, due to some peculiarity in how the preprocessor\n// works.  The AcceptsMacroThatExpandsToUnprotectedComma test in\n// gtest_unittest.cc will fail to compile if we do that.\n#define EXPECT_FATAL_FAILURE(statement, substr) \\\n  do { \\\n    class GTestExpectFatalFailureHelper {\\\n     public:\\\n      static void Execute() { statement; }\\\n    };\\\n    ::testing::TestPartResultArray gtest_failures;\\\n    ::testing::internal::SingleFailureChecker gtest_checker(\\\n        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\\\n    {\\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\\\n          ::testing::ScopedFakeTestPartResultReporter:: \\\n          INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\\\n      GTestExpectFatalFailureHelper::Execute();\\\n    }\\\n  } while (::testing::internal::AlwaysFalse())\n\n#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \\\n  do { \\\n    class GTestExpectFatalFailureHelper {\\\n     public:\\\n      static void Execute() { statement; }\\\n    };\\\n    ::testing::TestPartResultArray gtest_failures;\\\n    ::testing::internal::SingleFailureChecker gtest_checker(\\\n        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\\\n    {\\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\\\n          ::testing::ScopedFakeTestPartResultReporter:: \\\n          INTERCEPT_ALL_THREADS, &gtest_failures);\\\n      GTestExpectFatalFailureHelper::Execute();\\\n    }\\\n  } while (::testing::internal::AlwaysFalse())\n\n// A macro for testing Google Test assertions or code that's expected to\n// generate Google Test non-fatal failures.  It asserts that the given\n// statement will cause exactly one non-fatal Google Test failure with 'substr'\n// being part of the failure message.\n//\n// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only\n// affects and considers failures generated in the current thread and\n// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.\n//\n// 'statement' is allowed to reference local variables and members of\n// the current object.\n//\n// The verification of the assertion is done correctly even when the statement\n// throws an exception or aborts the current function.\n//\n// Known restrictions:\n//   - You cannot stream a failure message to this macro.\n//\n// Note that even though the implementations of the following two\n// macros are much alike, we cannot refactor them to use a common\n// helper macro, due to some peculiarity in how the preprocessor\n// works.  If we do that, the code won't compile when the user gives\n// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that\n// expands to code containing an unprotected comma.  The\n// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc\n// catches that.\n//\n// For the same reason, we have to write\n//   if (::testing::internal::AlwaysTrue()) { statement; }\n// instead of\n//   GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)\n// to avoid an MSVC warning on unreachable code.\n#define EXPECT_NONFATAL_FAILURE(statement, substr) \\\n  do {\\\n    ::testing::TestPartResultArray gtest_failures;\\\n    ::testing::internal::SingleFailureChecker gtest_checker(\\\n        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \\\n        (substr));\\\n    {\\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\\\n          ::testing::ScopedFakeTestPartResultReporter:: \\\n          INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\\\n      if (::testing::internal::AlwaysTrue()) { statement; }\\\n    }\\\n  } while (::testing::internal::AlwaysFalse())\n\n#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \\\n  do {\\\n    ::testing::TestPartResultArray gtest_failures;\\\n    ::testing::internal::SingleFailureChecker gtest_checker(\\\n        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \\\n        (substr));\\\n    {\\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\\\n          ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \\\n          &gtest_failures);\\\n      if (::testing::internal::AlwaysTrue()) { statement; }\\\n    }\\\n  } while (::testing::internal::AlwaysFalse())\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_SPI_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-test-part.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: mheule@google.com (Markus Heule)\n//\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n\n#include <iosfwd>\n#include <vector>\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n\nnamespace testing {\n\n// A copyable object representing the result of a test part (i.e. an\n// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).\n//\n// Don't inherit from TestPartResult as its destructor is not virtual.\nclass GTEST_API_ TestPartResult {\n public:\n  // The possible outcomes of a test part (i.e. an assertion or an\n  // explicit SUCCEED(), FAIL(), or ADD_FAILURE()).\n  enum Type {\n    kSuccess,          // Succeeded.\n    kNonFatalFailure,  // Failed but the test can continue.\n    kFatalFailure      // Failed and the test should be terminated.\n  };\n\n  // C'tor.  TestPartResult does NOT have a default constructor.\n  // Always use this constructor (with parameters) to create a\n  // TestPartResult object.\n  TestPartResult(Type a_type,\n                 const char* a_file_name,\n                 int a_line_number,\n                 const char* a_message)\n      : type_(a_type),\n        file_name_(a_file_name == NULL ? \"\" : a_file_name),\n        line_number_(a_line_number),\n        summary_(ExtractSummary(a_message)),\n        message_(a_message) {\n  }\n\n  // Gets the outcome of the test part.\n  Type type() const { return type_; }\n\n  // Gets the name of the source file where the test part took place, or\n  // NULL if it's unknown.\n  const char* file_name() const {\n    return file_name_.empty() ? NULL : file_name_.c_str();\n  }\n\n  // Gets the line in the source file where the test part took place,\n  // or -1 if it's unknown.\n  int line_number() const { return line_number_; }\n\n  // Gets the summary of the failure message.\n  const char* summary() const { return summary_.c_str(); }\n\n  // Gets the message associated with the test part.\n  const char* message() const { return message_.c_str(); }\n\n  // Returns true iff the test part passed.\n  bool passed() const { return type_ == kSuccess; }\n\n  // Returns true iff the test part failed.\n  bool failed() const { return type_ != kSuccess; }\n\n  // Returns true iff the test part non-fatally failed.\n  bool nonfatally_failed() const { return type_ == kNonFatalFailure; }\n\n  // Returns true iff the test part fatally failed.\n  bool fatally_failed() const { return type_ == kFatalFailure; }\n\n private:\n  Type type_;\n\n  // Gets the summary of the failure message by omitting the stack\n  // trace in it.\n  static std::string ExtractSummary(const char* message);\n\n  // The name of the source file where the test part took place, or\n  // \"\" if the source file is unknown.\n  std::string file_name_;\n  // The line in the source file where the test part took place, or -1\n  // if the line number is unknown.\n  int line_number_;\n  std::string summary_;  // The test failure summary.\n  std::string message_;  // The test failure message.\n};\n\n// Prints a TestPartResult object.\nstd::ostream& operator<<(std::ostream& os, const TestPartResult& result);\n\n// An array of TestPartResult objects.\n//\n// Don't inherit from TestPartResultArray as its destructor is not\n// virtual.\nclass GTEST_API_ TestPartResultArray {\n public:\n  TestPartResultArray() {}\n\n  // Appends the given TestPartResult to the array.\n  void Append(const TestPartResult& result);\n\n  // Returns the TestPartResult at the given index (0-based).\n  const TestPartResult& GetTestPartResult(int index) const;\n\n  // Returns the number of TestPartResult objects in the array.\n  int size() const;\n\n private:\n  std::vector<TestPartResult> array_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray);\n};\n\n// This interface knows how to report a test part result.\nclass TestPartResultReporterInterface {\n public:\n  virtual ~TestPartResultReporterInterface() {}\n\n  virtual void ReportTestPartResult(const TestPartResult& result) = 0;\n};\n\nnamespace internal {\n\n// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a\n// statement generates new fatal failures. To do so it registers itself as the\n// current test part result reporter. Besides checking if fatal failures were\n// reported, it only delegates the reporting to the former result reporter.\n// The original result reporter is restored in the destructor.\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nclass GTEST_API_ HasNewFatalFailureHelper\n    : public TestPartResultReporterInterface {\n public:\n  HasNewFatalFailureHelper();\n  virtual ~HasNewFatalFailureHelper();\n  virtual void ReportTestPartResult(const TestPartResult& result);\n  bool has_new_fatal_failure() const { return has_new_fatal_failure_; }\n private:\n  bool has_new_fatal_failure_;\n  TestPartResultReporterInterface* original_reporter_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper);\n};\n\n}  // namespace internal\n\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest-typed-test.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n\n// This header implements typed tests and type-parameterized tests.\n\n// Typed (aka type-driven) tests repeat the same test for types in a\n// list.  You must know which types you want to test with when writing\n// typed tests. Here's how you do it:\n\n#if 0\n\n// First, define a fixture class template.  It should be parameterized\n// by a type.  Remember to derive it from testing::Test.\ntemplate <typename T>\nclass FooTest : public testing::Test {\n public:\n  ...\n  typedef std::list<T> List;\n  static T shared_;\n  T value_;\n};\n\n// Next, associate a list of types with the test case, which will be\n// repeated for each type in the list.  The typedef is necessary for\n// the macro to parse correctly.\ntypedef testing::Types<char, int, unsigned int> MyTypes;\nTYPED_TEST_CASE(FooTest, MyTypes);\n\n// If the type list contains only one type, you can write that type\n// directly without Types<...>:\n//   TYPED_TEST_CASE(FooTest, int);\n\n// Then, use TYPED_TEST() instead of TEST_F() to define as many typed\n// tests for this test case as you want.\nTYPED_TEST(FooTest, DoesBlah) {\n  // Inside a test, refer to TypeParam to get the type parameter.\n  // Since we are inside a derived class template, C++ requires use to\n  // visit the members of FooTest via 'this'.\n  TypeParam n = this->value_;\n\n  // To visit static members of the fixture, add the TestFixture::\n  // prefix.\n  n += TestFixture::shared_;\n\n  // To refer to typedefs in the fixture, add the \"typename\n  // TestFixture::\" prefix.\n  typename TestFixture::List values;\n  values.push_back(n);\n  ...\n}\n\nTYPED_TEST(FooTest, HasPropertyA) { ... }\n\n#endif  // 0\n\n// Type-parameterized tests are abstract test patterns parameterized\n// by a type.  Compared with typed tests, type-parameterized tests\n// allow you to define the test pattern without knowing what the type\n// parameters are.  The defined pattern can be instantiated with\n// different types any number of times, in any number of translation\n// units.\n//\n// If you are designing an interface or concept, you can define a\n// suite of type-parameterized tests to verify properties that any\n// valid implementation of the interface/concept should have.  Then,\n// each implementation can easily instantiate the test suite to verify\n// that it conforms to the requirements, without having to write\n// similar tests repeatedly.  Here's an example:\n\n#if 0\n\n// First, define a fixture class template.  It should be parameterized\n// by a type.  Remember to derive it from testing::Test.\ntemplate <typename T>\nclass FooTest : public testing::Test {\n  ...\n};\n\n// Next, declare that you will define a type-parameterized test case\n// (the _P suffix is for \"parameterized\" or \"pattern\", whichever you\n// prefer):\nTYPED_TEST_CASE_P(FooTest);\n\n// Then, use TYPED_TEST_P() to define as many type-parameterized tests\n// for this type-parameterized test case as you want.\nTYPED_TEST_P(FooTest, DoesBlah) {\n  // Inside a test, refer to TypeParam to get the type parameter.\n  TypeParam n = 0;\n  ...\n}\n\nTYPED_TEST_P(FooTest, HasPropertyA) { ... }\n\n// Now the tricky part: you need to register all test patterns before\n// you can instantiate them.  The first argument of the macro is the\n// test case name; the rest are the names of the tests in this test\n// case.\nREGISTER_TYPED_TEST_CASE_P(FooTest,\n                           DoesBlah, HasPropertyA);\n\n// Finally, you are free to instantiate the pattern with the types you\n// want.  If you put the above code in a header file, you can #include\n// it in multiple C++ source files and instantiate it multiple times.\n//\n// To distinguish different instances of the pattern, the first\n// argument to the INSTANTIATE_* macro is a prefix that will be added\n// to the actual test case name.  Remember to pick unique prefixes for\n// different instances.\ntypedef testing::Types<char, int, unsigned int> MyTypes;\nINSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);\n\n// If the type list contains only one type, you can write that type\n// directly without Types<...>:\n//   INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int);\n\n#endif  // 0\n\n#include \"gtest/internal/gtest-port.h\"\n#include \"gtest/internal/gtest-type-util.h\"\n\n// Implements typed tests.\n\n#if GTEST_HAS_TYPED_TEST\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the name of the typedef for the type parameters of the\n// given test case.\n# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_\n\n// The 'Types' template argument below must have spaces around it\n// since some compilers may choke on '>>' when passing a template\n// instance (e.g. Types<int>)\n# define TYPED_TEST_CASE(CaseName, Types) \\\n  typedef ::testing::internal::TypeList< Types >::type \\\n      GTEST_TYPE_PARAMS_(CaseName)\n\n# define TYPED_TEST(CaseName, TestName) \\\n  template <typename gtest_TypeParam_> \\\n  class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \\\n      : public CaseName<gtest_TypeParam_> { \\\n   private: \\\n    typedef CaseName<gtest_TypeParam_> TestFixture; \\\n    typedef gtest_TypeParam_ TypeParam; \\\n    virtual void TestBody(); \\\n  }; \\\n  bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \\\n      ::testing::internal::TypeParameterizedTest< \\\n          CaseName, \\\n          ::testing::internal::TemplateSel< \\\n              GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \\\n          GTEST_TYPE_PARAMS_(CaseName)>::Register(\\\n              \"\", #CaseName, #TestName, 0); \\\n  template <typename gtest_TypeParam_> \\\n  void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody()\n\n#endif  // GTEST_HAS_TYPED_TEST\n\n// Implements type-parameterized tests.\n\n#if GTEST_HAS_TYPED_TEST_P\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the namespace name that the type-parameterized tests for\n// the given type-parameterized test case are defined in.  The exact\n// name of the namespace is subject to change without notice.\n# define GTEST_CASE_NAMESPACE_(TestCaseName) \\\n  gtest_case_##TestCaseName##_\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the name of the variable used to remember the names of\n// the defined tests in the given test case.\n# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \\\n  gtest_typed_test_case_p_state_##TestCaseName##_\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY.\n//\n// Expands to the name of the variable used to remember the names of\n// the registered tests in the given test case.\n# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \\\n  gtest_registered_test_names_##TestCaseName##_\n\n// The variables defined in the type-parameterized test macros are\n// static as typically these macros are used in a .h file that can be\n// #included in multiple translation units linked together.\n# define TYPED_TEST_CASE_P(CaseName) \\\n  static ::testing::internal::TypedTestCasePState \\\n      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName)\n\n# define TYPED_TEST_P(CaseName, TestName) \\\n  namespace GTEST_CASE_NAMESPACE_(CaseName) { \\\n  template <typename gtest_TypeParam_> \\\n  class TestName : public CaseName<gtest_TypeParam_> { \\\n   private: \\\n    typedef CaseName<gtest_TypeParam_> TestFixture; \\\n    typedef gtest_TypeParam_ TypeParam; \\\n    virtual void TestBody(); \\\n  }; \\\n  static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \\\n      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\\\n          __FILE__, __LINE__, #CaseName, #TestName); \\\n  } \\\n  template <typename gtest_TypeParam_> \\\n  void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody()\n\n# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \\\n  namespace GTEST_CASE_NAMESPACE_(CaseName) { \\\n  typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \\\n  } \\\n  static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \\\n      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\\\n          __FILE__, __LINE__, #__VA_ARGS__)\n\n// The 'Types' template argument below must have spaces around it\n// since some compilers may choke on '>>' when passing a template\n// instance (e.g. Types<int>)\n# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \\\n  bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \\\n      ::testing::internal::TypeParameterizedTestCase<CaseName, \\\n          GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \\\n          ::testing::internal::TypeList< Types >::type>::Register(\\\n              #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName))\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file defines the public API for Google Test.  It should be\n// included by any test program that uses Google Test.\n//\n// IMPORTANT NOTE: Due to limitation of the C++ language, we have to\n// leave some internal implementation details in this header file.\n// They are clearly marked by comments like this:\n//\n//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n//\n// Such code is NOT meant to be used by a user directly, and is subject\n// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user\n// program!\n//\n// Acknowledgment: Google Test borrowed the idea of automatic test\n// registration from Barthelemy Dagenais' (barthelemy@prologique.com)\n// easyUnit framework.\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_H_\n#define GTEST_INCLUDE_GTEST_GTEST_H_\n\n#include <limits>\n#include <ostream>\n#include <vector>\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n#include \"gtest/gtest-death-test.h\"\n#include \"gtest/gtest-message.h\"\n#include \"gtest/gtest-param-test.h\"\n#include \"gtest/gtest-printers.h\"\n#include \"gtest/gtest_prod.h\"\n#include \"gtest/gtest-test-part.h\"\n#include \"gtest/gtest-typed-test.h\"\n\n// Depending on the platform, different string classes are available.\n// On Linux, in addition to ::std::string, Google also makes use of\n// class ::string, which has the same interface as ::std::string, but\n// has a different implementation.\n//\n// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that\n// ::string is available AND is a distinct type to ::std::string, or\n// define it to 0 to indicate otherwise.\n//\n// If the user's ::std::string and ::string are the same class due to\n// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0.\n//\n// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined\n// heuristically.\n\nnamespace testing {\n\n// Declares the flags.\n\n// This flag temporary enables the disabled tests.\nGTEST_DECLARE_bool_(also_run_disabled_tests);\n\n// This flag brings the debugger on an assertion failure.\nGTEST_DECLARE_bool_(break_on_failure);\n\n// This flag controls whether Google Test catches all test-thrown exceptions\n// and logs them as failures.\nGTEST_DECLARE_bool_(catch_exceptions);\n\n// This flag enables using colors in terminal output. Available values are\n// \"yes\" to enable colors, \"no\" (disable colors), or \"auto\" (the default)\n// to let Google Test decide.\nGTEST_DECLARE_string_(color);\n\n// This flag sets up the filter to select by name using a glob pattern\n// the tests to run. If the filter is not given all tests are executed.\nGTEST_DECLARE_string_(filter);\n\n// This flag causes the Google Test to list tests. None of the tests listed\n// are actually run if the flag is provided.\nGTEST_DECLARE_bool_(list_tests);\n\n// This flag controls whether Google Test emits a detailed XML report to a file\n// in addition to its normal textual output.\nGTEST_DECLARE_string_(output);\n\n// This flags control whether Google Test prints the elapsed time for each\n// test.\nGTEST_DECLARE_bool_(print_time);\n\n// This flag specifies the random number seed.\nGTEST_DECLARE_int32_(random_seed);\n\n// This flag sets how many times the tests are repeated. The default value\n// is 1. If the value is -1 the tests are repeating forever.\nGTEST_DECLARE_int32_(repeat);\n\n// This flag controls whether Google Test includes Google Test internal\n// stack frames in failure stack traces.\nGTEST_DECLARE_bool_(show_internal_stack_frames);\n\n// When this flag is specified, tests' order is randomized on every iteration.\nGTEST_DECLARE_bool_(shuffle);\n\n// This flag specifies the maximum number of stack frames to be\n// printed in a failure message.\nGTEST_DECLARE_int32_(stack_trace_depth);\n\n// When this flag is specified, a failed assertion will throw an\n// exception if exceptions are enabled, or exit the program with a\n// non-zero code otherwise.\nGTEST_DECLARE_bool_(throw_on_failure);\n\n// When this flag is set with a \"host:port\" string, on supported\n// platforms test results are streamed to the specified port on\n// the specified host machine.\nGTEST_DECLARE_string_(stream_result_to);\n\n// The upper limit for valid stack trace depths.\nconst int kMaxStackTraceDepth = 100;\n\nnamespace internal {\n\nclass AssertHelper;\nclass DefaultGlobalTestPartResultReporter;\nclass ExecDeathTest;\nclass NoExecDeathTest;\nclass FinalSuccessChecker;\nclass GTestFlagSaver;\nclass StreamingListenerTest;\nclass TestResultAccessor;\nclass TestEventListenersAccessor;\nclass TestEventRepeater;\nclass UnitTestRecordPropertyTestHelper;\nclass WindowsDeathTest;\nclass UnitTestImpl* GetUnitTestImpl();\nvoid ReportFailureInUnknownLocation(TestPartResult::Type result_type,\n                                    const std::string& message);\n\n}  // namespace internal\n\n// The friend relationship of some of these classes is cyclic.\n// If we don't forward declare them the compiler might confuse the classes\n// in friendship clauses with same named classes on the scope.\nclass Test;\nclass TestCase;\nclass TestInfo;\nclass UnitTest;\n\n// A class for indicating whether an assertion was successful.  When\n// the assertion wasn't successful, the AssertionResult object\n// remembers a non-empty message that describes how it failed.\n//\n// To create an instance of this class, use one of the factory functions\n// (AssertionSuccess() and AssertionFailure()).\n//\n// This class is useful for two purposes:\n//   1. Defining predicate functions to be used with Boolean test assertions\n//      EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts\n//   2. Defining predicate-format functions to be\n//      used with predicate assertions (ASSERT_PRED_FORMAT*, etc).\n//\n// For example, if you define IsEven predicate:\n//\n//   testing::AssertionResult IsEven(int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess();\n//     else\n//       return testing::AssertionFailure() << n << \" is odd\";\n//   }\n//\n// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5)))\n// will print the message\n//\n//   Value of: IsEven(Fib(5))\n//     Actual: false (5 is odd)\n//   Expected: true\n//\n// instead of a more opaque\n//\n//   Value of: IsEven(Fib(5))\n//     Actual: false\n//   Expected: true\n//\n// in case IsEven is a simple Boolean predicate.\n//\n// If you expect your predicate to be reused and want to support informative\n// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up\n// about half as often as positive ones in our tests), supply messages for\n// both success and failure cases:\n//\n//   testing::AssertionResult IsEven(int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess() << n << \" is even\";\n//     else\n//       return testing::AssertionFailure() << n << \" is odd\";\n//   }\n//\n// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print\n//\n//   Value of: IsEven(Fib(6))\n//     Actual: true (8 is even)\n//   Expected: false\n//\n// NB: Predicates that support negative Boolean assertions have reduced\n// performance in positive ones so be careful not to use them in tests\n// that have lots (tens of thousands) of positive Boolean assertions.\n//\n// To use this class with EXPECT_PRED_FORMAT assertions such as:\n//\n//   // Verifies that Foo() returns an even number.\n//   EXPECT_PRED_FORMAT1(IsEven, Foo());\n//\n// you need to define:\n//\n//   testing::AssertionResult IsEven(const char* expr, int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess();\n//     else\n//       return testing::AssertionFailure()\n//         << \"Expected: \" << expr << \" is even\\n  Actual: it's \" << n;\n//   }\n//\n// If Foo() returns 5, you will see the following message:\n//\n//   Expected: Foo() is even\n//     Actual: it's 5\n//\nclass GTEST_API_ AssertionResult {\n public:\n  // Copy constructor.\n  // Used in EXPECT_TRUE/FALSE(assertion_result).\n  AssertionResult(const AssertionResult& other);\n  // Used in the EXPECT_TRUE/FALSE(bool_expression).\n  explicit AssertionResult(bool success) : success_(success) {}\n\n  // Returns true iff the assertion succeeded.\n  operator bool() const { return success_; }  // NOLINT\n\n  // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.\n  AssertionResult operator!() const;\n\n  // Returns the text streamed into this AssertionResult. Test assertions\n  // use it when they fail (i.e., the predicate's outcome doesn't match the\n  // assertion's expectation). When nothing has been streamed into the\n  // object, returns an empty string.\n  const char* message() const {\n    return message_.get() != NULL ?  message_->c_str() : \"\";\n  }\n  // TODO(vladl@google.com): Remove this after making sure no clients use it.\n  // Deprecated; please use message() instead.\n  const char* failure_message() const { return message(); }\n\n  // Streams a custom failure message into this object.\n  template <typename T> AssertionResult& operator<<(const T& value) {\n    AppendMessage(Message() << value);\n    return *this;\n  }\n\n  // Allows streaming basic output manipulators such as endl or flush into\n  // this object.\n  AssertionResult& operator<<(\n      ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {\n    AppendMessage(Message() << basic_manipulator);\n    return *this;\n  }\n\n private:\n  // Appends the contents of message to message_.\n  void AppendMessage(const Message& a_message) {\n    if (message_.get() == NULL)\n      message_.reset(new ::std::string);\n    message_->append(a_message.GetString().c_str());\n  }\n\n  // Stores result of the assertion predicate.\n  bool success_;\n  // Stores the message describing the condition in case the expectation\n  // construct is not satisfied with the predicate's outcome.\n  // Referenced via a pointer to avoid taking too much stack frame space\n  // with test assertions.\n  internal::scoped_ptr< ::std::string> message_;\n\n  GTEST_DISALLOW_ASSIGN_(AssertionResult);\n};\n\n// Makes a successful assertion result.\nGTEST_API_ AssertionResult AssertionSuccess();\n\n// Makes a failed assertion result.\nGTEST_API_ AssertionResult AssertionFailure();\n\n// Makes a failed assertion result with the given failure message.\n// Deprecated; use AssertionFailure() << msg.\nGTEST_API_ AssertionResult AssertionFailure(const Message& msg);\n\n// The abstract class that all tests inherit from.\n//\n// In Google Test, a unit test program contains one or many TestCases, and\n// each TestCase contains one or many Tests.\n//\n// When you define a test using the TEST macro, you don't need to\n// explicitly derive from Test - the TEST macro automatically does\n// this for you.\n//\n// The only time you derive from Test is when defining a test fixture\n// to be used a TEST_F.  For example:\n//\n//   class FooTest : public testing::Test {\n//    protected:\n//     virtual void SetUp() { ... }\n//     virtual void TearDown() { ... }\n//     ...\n//   };\n//\n//   TEST_F(FooTest, Bar) { ... }\n//   TEST_F(FooTest, Baz) { ... }\n//\n// Test is not copyable.\nclass GTEST_API_ Test {\n public:\n  friend class TestInfo;\n\n  // Defines types for pointers to functions that set up and tear down\n  // a test case.\n  typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc;\n  typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc;\n\n  // The d'tor is virtual as we intend to inherit from Test.\n  virtual ~Test();\n\n  // Sets up the stuff shared by all tests in this test case.\n  //\n  // Google Test will call Foo::SetUpTestCase() before running the first\n  // test in test case Foo.  Hence a sub-class can define its own\n  // SetUpTestCase() method to shadow the one defined in the super\n  // class.\n  static void SetUpTestCase() {}\n\n  // Tears down the stuff shared by all tests in this test case.\n  //\n  // Google Test will call Foo::TearDownTestCase() after running the last\n  // test in test case Foo.  Hence a sub-class can define its own\n  // TearDownTestCase() method to shadow the one defined in the super\n  // class.\n  static void TearDownTestCase() {}\n\n  // Returns true iff the current test has a fatal failure.\n  static bool HasFatalFailure();\n\n  // Returns true iff the current test has a non-fatal failure.\n  static bool HasNonfatalFailure();\n\n  // Returns true iff the current test has a (either fatal or\n  // non-fatal) failure.\n  static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }\n\n  // Logs a property for the current test, test case, or for the entire\n  // invocation of the test program when used outside of the context of a\n  // test case.  Only the last value for a given key is remembered.  These\n  // are public static so they can be called from utility functions that are\n  // not members of the test fixture.  Calls to RecordProperty made during\n  // lifespan of the test (from the moment its constructor starts to the\n  // moment its destructor finishes) will be output in XML as attributes of\n  // the <testcase> element.  Properties recorded from fixture's\n  // SetUpTestCase or TearDownTestCase are logged as attributes of the\n  // corresponding <testsuite> element.  Calls to RecordProperty made in the\n  // global context (before or after invocation of RUN_ALL_TESTS and from\n  // SetUp/TearDown method of Environment objects registered with Google\n  // Test) will be output as attributes of the <testsuites> element.\n  static void RecordProperty(const std::string& key, const std::string& value);\n  static void RecordProperty(const std::string& key, int value);\n\n protected:\n  // Creates a Test object.\n  Test();\n\n  // Sets up the test fixture.\n  virtual void SetUp();\n\n  // Tears down the test fixture.\n  virtual void TearDown();\n\n private:\n  // Returns true iff the current test has the same fixture class as\n  // the first test in the current test case.\n  static bool HasSameFixtureClass();\n\n  // Runs the test after the test fixture has been set up.\n  //\n  // A sub-class must implement this to define the test logic.\n  //\n  // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM.\n  // Instead, use the TEST or TEST_F macro.\n  virtual void TestBody() = 0;\n\n  // Sets up, executes, and tears down the test.\n  void Run();\n\n  // Deletes self.  We deliberately pick an unusual name for this\n  // internal method to avoid clashing with names used in user TESTs.\n  void DeleteSelf_() { delete this; }\n\n  // Uses a GTestFlagSaver to save and restore all Google Test flags.\n  const internal::GTestFlagSaver* const gtest_flag_saver_;\n\n  // Often a user mis-spells SetUp() as Setup() and spends a long time\n  // wondering why it is never called by Google Test.  The declaration of\n  // the following method is solely for catching such an error at\n  // compile time:\n  //\n  //   - The return type is deliberately chosen to be not void, so it\n  //   will be a conflict if a user declares void Setup() in his test\n  //   fixture.\n  //\n  //   - This method is private, so it will be another compiler error\n  //   if a user calls it from his test fixture.\n  //\n  // DO NOT OVERRIDE THIS FUNCTION.\n  //\n  // If you see an error about overriding the following function or\n  // about it being private, you have mis-spelled SetUp() as Setup().\n  struct Setup_should_be_spelled_SetUp {};\n  virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }\n\n  // We disallow copying Tests.\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(Test);\n};\n\ntypedef internal::TimeInMillis TimeInMillis;\n\n// A copyable object representing a user specified test property which can be\n// output as a key/value string pair.\n//\n// Don't inherit from TestProperty as its destructor is not virtual.\nclass TestProperty {\n public:\n  // C'tor.  TestProperty does NOT have a default constructor.\n  // Always use this constructor (with parameters) to create a\n  // TestProperty object.\n  TestProperty(const std::string& a_key, const std::string& a_value) :\n    key_(a_key), value_(a_value) {\n  }\n\n  // Gets the user supplied key.\n  const char* key() const {\n    return key_.c_str();\n  }\n\n  // Gets the user supplied value.\n  const char* value() const {\n    return value_.c_str();\n  }\n\n  // Sets a new value, overriding the one supplied in the constructor.\n  void SetValue(const std::string& new_value) {\n    value_ = new_value;\n  }\n\n private:\n  // The key supplied by the user.\n  std::string key_;\n  // The value supplied by the user.\n  std::string value_;\n};\n\n// The result of a single Test.  This includes a list of\n// TestPartResults, a list of TestProperties, a count of how many\n// death tests there are in the Test, and how much time it took to run\n// the Test.\n//\n// TestResult is not copyable.\nclass GTEST_API_ TestResult {\n public:\n  // Creates an empty TestResult.\n  TestResult();\n\n  // D'tor.  Do not inherit from TestResult.\n  ~TestResult();\n\n  // Gets the number of all test parts.  This is the sum of the number\n  // of successful test parts and the number of failed test parts.\n  int total_part_count() const;\n\n  // Returns the number of the test properties.\n  int test_property_count() const;\n\n  // Returns true iff the test passed (i.e. no test part failed).\n  bool Passed() const { return !Failed(); }\n\n  // Returns true iff the test failed.\n  bool Failed() const;\n\n  // Returns true iff the test fatally failed.\n  bool HasFatalFailure() const;\n\n  // Returns true iff the test has a non-fatal failure.\n  bool HasNonfatalFailure() const;\n\n  // Returns the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Returns the i-th test part result among all the results. i can range\n  // from 0 to test_property_count() - 1. If i is not in that range, aborts\n  // the program.\n  const TestPartResult& GetTestPartResult(int i) const;\n\n  // Returns the i-th test property. i can range from 0 to\n  // test_property_count() - 1. If i is not in that range, aborts the\n  // program.\n  const TestProperty& GetTestProperty(int i) const;\n\n private:\n  friend class TestInfo;\n  friend class TestCase;\n  friend class UnitTest;\n  friend class internal::DefaultGlobalTestPartResultReporter;\n  friend class internal::ExecDeathTest;\n  friend class internal::TestResultAccessor;\n  friend class internal::UnitTestImpl;\n  friend class internal::WindowsDeathTest;\n\n  // Gets the vector of TestPartResults.\n  const std::vector<TestPartResult>& test_part_results() const {\n    return test_part_results_;\n  }\n\n  // Gets the vector of TestProperties.\n  const std::vector<TestProperty>& test_properties() const {\n    return test_properties_;\n  }\n\n  // Sets the elapsed time.\n  void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }\n\n  // Adds a test property to the list. The property is validated and may add\n  // a non-fatal failure if invalid (e.g., if it conflicts with reserved\n  // key names). If a property is already recorded for the same key, the\n  // value will be updated, rather than storing multiple values for the same\n  // key.  xml_element specifies the element for which the property is being\n  // recorded and is used for validation.\n  void RecordProperty(const std::string& xml_element,\n                      const TestProperty& test_property);\n\n  // Adds a failure if the key is a reserved attribute of Google Test\n  // testcase tags.  Returns true if the property is valid.\n  // TODO(russr): Validate attribute names are legal and human readable.\n  static bool ValidateTestProperty(const std::string& xml_element,\n                                   const TestProperty& test_property);\n\n  // Adds a test part result to the list.\n  void AddTestPartResult(const TestPartResult& test_part_result);\n\n  // Returns the death test count.\n  int death_test_count() const { return death_test_count_; }\n\n  // Increments the death test count, returning the new count.\n  int increment_death_test_count() { return ++death_test_count_; }\n\n  // Clears the test part results.\n  void ClearTestPartResults();\n\n  // Clears the object.\n  void Clear();\n\n  // Protects mutable state of the property vector and of owned\n  // properties, whose values may be updated.\n  internal::Mutex test_properites_mutex_;\n\n  // The vector of TestPartResults\n  std::vector<TestPartResult> test_part_results_;\n  // The vector of TestProperties\n  std::vector<TestProperty> test_properties_;\n  // Running count of death tests.\n  int death_test_count_;\n  // The elapsed time, in milliseconds.\n  TimeInMillis elapsed_time_;\n\n  // We disallow copying TestResult.\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult);\n};  // class TestResult\n\n// A TestInfo object stores the following information about a test:\n//\n//   Test case name\n//   Test name\n//   Whether the test should be run\n//   A function pointer that creates the test object when invoked\n//   Test result\n//\n// The constructor of TestInfo registers itself with the UnitTest\n// singleton such that the RUN_ALL_TESTS() macro knows which tests to\n// run.\nclass GTEST_API_ TestInfo {\n public:\n  // Destructs a TestInfo object.  This function is not virtual, so\n  // don't inherit from TestInfo.\n  ~TestInfo();\n\n  // Returns the test case name.\n  const char* test_case_name() const { return test_case_name_.c_str(); }\n\n  // Returns the test name.\n  const char* name() const { return name_.c_str(); }\n\n  // Returns the name of the parameter type, or NULL if this is not a typed\n  // or a type-parameterized test.\n  const char* type_param() const {\n    if (type_param_.get() != NULL)\n      return type_param_->c_str();\n    return NULL;\n  }\n\n  // Returns the text representation of the value parameter, or NULL if this\n  // is not a value-parameterized test.\n  const char* value_param() const {\n    if (value_param_.get() != NULL)\n      return value_param_->c_str();\n    return NULL;\n  }\n\n  // Returns true if this test should run, that is if the test is not disabled\n  // (or it is disabled but the also_run_disabled_tests flag has been specified)\n  // and its full name matches the user-specified filter.\n  //\n  // Google Test allows the user to filter the tests by their full names.\n  // The full name of a test Bar in test case Foo is defined as\n  // \"Foo.Bar\".  Only the tests that match the filter will run.\n  //\n  // A filter is a colon-separated list of glob (not regex) patterns,\n  // optionally followed by a '-' and a colon-separated list of\n  // negative patterns (tests to exclude).  A test is run if it\n  // matches one of the positive patterns and does not match any of\n  // the negative patterns.\n  //\n  // For example, *A*:Foo.* is a filter that matches any string that\n  // contains the character 'A' or starts with \"Foo.\".\n  bool should_run() const { return should_run_; }\n\n  // Returns the result of the test.\n  const TestResult* result() const { return &result_; }\n\n private:\n#if GTEST_HAS_DEATH_TEST\n  friend class internal::DefaultDeathTestFactory;\n#endif  // GTEST_HAS_DEATH_TEST\n  friend class Test;\n  friend class TestCase;\n  friend class internal::UnitTestImpl;\n  friend class internal::StreamingListenerTest;\n  friend TestInfo* internal::MakeAndRegisterTestInfo(\n      const char* test_case_name,\n      const char* name,\n      const char* type_param,\n      const char* value_param,\n      internal::TypeId fixture_class_id,\n      Test::SetUpTestCaseFunc set_up_tc,\n      Test::TearDownTestCaseFunc tear_down_tc,\n      internal::TestFactoryBase* factory);\n\n  // Constructs a TestInfo object. The newly constructed instance assumes\n  // ownership of the factory object.\n  TestInfo(const std::string& test_case_name,\n           const std::string& name,\n           const char* a_type_param,   // NULL if not a type-parameterized test\n           const char* a_value_param,  // NULL if not a value-parameterized test\n           internal::TypeId fixture_class_id,\n           internal::TestFactoryBase* factory);\n\n  // Increments the number of death tests encountered in this test so\n  // far.\n  int increment_death_test_count() {\n    return result_.increment_death_test_count();\n  }\n\n  // Creates the test object, runs it, records its result, and then\n  // deletes it.\n  void Run();\n\n  static void ClearTestResult(TestInfo* test_info) {\n    test_info->result_.Clear();\n  }\n\n  // These fields are immutable properties of the test.\n  const std::string test_case_name_;     // Test case name\n  const std::string name_;               // Test name\n  // Name of the parameter type, or NULL if this is not a typed or a\n  // type-parameterized test.\n  const internal::scoped_ptr<const ::std::string> type_param_;\n  // Text representation of the value parameter, or NULL if this is not a\n  // value-parameterized test.\n  const internal::scoped_ptr<const ::std::string> value_param_;\n  const internal::TypeId fixture_class_id_;   // ID of the test fixture class\n  bool should_run_;                 // True iff this test should run\n  bool is_disabled_;                // True iff this test is disabled\n  bool matches_filter_;             // True if this test matches the\n                                    // user-specified filter.\n  internal::TestFactoryBase* const factory_;  // The factory that creates\n                                              // the test object\n\n  // This field is mutable and needs to be reset before running the\n  // test for the second time.\n  TestResult result_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo);\n};\n\n// A test case, which consists of a vector of TestInfos.\n//\n// TestCase is not copyable.\nclass GTEST_API_ TestCase {\n public:\n  // Creates a TestCase with the given name.\n  //\n  // TestCase does NOT have a default constructor.  Always use this\n  // constructor to create a TestCase object.\n  //\n  // Arguments:\n  //\n  //   name:         name of the test case\n  //   a_type_param: the name of the test's type parameter, or NULL if\n  //                 this is not a type-parameterized test.\n  //   set_up_tc:    pointer to the function that sets up the test case\n  //   tear_down_tc: pointer to the function that tears down the test case\n  TestCase(const char* name, const char* a_type_param,\n           Test::SetUpTestCaseFunc set_up_tc,\n           Test::TearDownTestCaseFunc tear_down_tc);\n\n  // Destructor of TestCase.\n  virtual ~TestCase();\n\n  // Gets the name of the TestCase.\n  const char* name() const { return name_.c_str(); }\n\n  // Returns the name of the parameter type, or NULL if this is not a\n  // type-parameterized test case.\n  const char* type_param() const {\n    if (type_param_.get() != NULL)\n      return type_param_->c_str();\n    return NULL;\n  }\n\n  // Returns true if any test in this test case should run.\n  bool should_run() const { return should_run_; }\n\n  // Gets the number of successful tests in this test case.\n  int successful_test_count() const;\n\n  // Gets the number of failed tests in this test case.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests in this test case.\n  int disabled_test_count() const;\n\n  // Get the number of tests in this test case that should run.\n  int test_to_run_count() const;\n\n  // Gets the number of all tests in this test case.\n  int total_test_count() const;\n\n  // Returns true iff the test case passed.\n  bool Passed() const { return !Failed(); }\n\n  // Returns true iff the test case failed.\n  bool Failed() const { return failed_test_count() > 0; }\n\n  // Returns the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Returns the i-th test among all the tests. i can range from 0 to\n  // total_test_count() - 1. If i is not in that range, returns NULL.\n  const TestInfo* GetTestInfo(int i) const;\n\n  // Returns the TestResult that holds test properties recorded during\n  // execution of SetUpTestCase and TearDownTestCase.\n  const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; }\n\n private:\n  friend class Test;\n  friend class internal::UnitTestImpl;\n\n  // Gets the (mutable) vector of TestInfos in this TestCase.\n  std::vector<TestInfo*>& test_info_list() { return test_info_list_; }\n\n  // Gets the (immutable) vector of TestInfos in this TestCase.\n  const std::vector<TestInfo*>& test_info_list() const {\n    return test_info_list_;\n  }\n\n  // Returns the i-th test among all the tests. i can range from 0 to\n  // total_test_count() - 1. If i is not in that range, returns NULL.\n  TestInfo* GetMutableTestInfo(int i);\n\n  // Sets the should_run member.\n  void set_should_run(bool should) { should_run_ = should; }\n\n  // Adds a TestInfo to this test case.  Will delete the TestInfo upon\n  // destruction of the TestCase object.\n  void AddTestInfo(TestInfo * test_info);\n\n  // Clears the results of all tests in this test case.\n  void ClearResult();\n\n  // Clears the results of all tests in the given test case.\n  static void ClearTestCaseResult(TestCase* test_case) {\n    test_case->ClearResult();\n  }\n\n  // Runs every test in this TestCase.\n  void Run();\n\n  // Runs SetUpTestCase() for this TestCase.  This wrapper is needed\n  // for catching exceptions thrown from SetUpTestCase().\n  void RunSetUpTestCase() { (*set_up_tc_)(); }\n\n  // Runs TearDownTestCase() for this TestCase.  This wrapper is\n  // needed for catching exceptions thrown from TearDownTestCase().\n  void RunTearDownTestCase() { (*tear_down_tc_)(); }\n\n  // Returns true iff test passed.\n  static bool TestPassed(const TestInfo* test_info) {\n    return test_info->should_run() && test_info->result()->Passed();\n  }\n\n  // Returns true iff test failed.\n  static bool TestFailed(const TestInfo* test_info) {\n    return test_info->should_run() && test_info->result()->Failed();\n  }\n\n  // Returns true iff test is disabled.\n  static bool TestDisabled(const TestInfo* test_info) {\n    return test_info->is_disabled_;\n  }\n\n  // Returns true if the given test should run.\n  static bool ShouldRunTest(const TestInfo* test_info) {\n    return test_info->should_run();\n  }\n\n  // Shuffles the tests in this test case.\n  void ShuffleTests(internal::Random* random);\n\n  // Restores the test order to before the first shuffle.\n  void UnshuffleTests();\n\n  // Name of the test case.\n  std::string name_;\n  // Name of the parameter type, or NULL if this is not a typed or a\n  // type-parameterized test.\n  const internal::scoped_ptr<const ::std::string> type_param_;\n  // The vector of TestInfos in their original order.  It owns the\n  // elements in the vector.\n  std::vector<TestInfo*> test_info_list_;\n  // Provides a level of indirection for the test list to allow easy\n  // shuffling and restoring the test order.  The i-th element in this\n  // vector is the index of the i-th test in the shuffled test list.\n  std::vector<int> test_indices_;\n  // Pointer to the function that sets up the test case.\n  Test::SetUpTestCaseFunc set_up_tc_;\n  // Pointer to the function that tears down the test case.\n  Test::TearDownTestCaseFunc tear_down_tc_;\n  // True iff any test in this test case should run.\n  bool should_run_;\n  // Elapsed time, in milliseconds.\n  TimeInMillis elapsed_time_;\n  // Holds test properties recorded during execution of SetUpTestCase and\n  // TearDownTestCase.\n  TestResult ad_hoc_test_result_;\n\n  // We disallow copying TestCases.\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);\n};\n\n// An Environment object is capable of setting up and tearing down an\n// environment.  The user should subclass this to define his own\n// environment(s).\n//\n// An Environment object does the set-up and tear-down in virtual\n// methods SetUp() and TearDown() instead of the constructor and the\n// destructor, as:\n//\n//   1. You cannot safely throw from a destructor.  This is a problem\n//      as in some cases Google Test is used where exceptions are enabled, and\n//      we may want to implement ASSERT_* using exceptions where they are\n//      available.\n//   2. You cannot use ASSERT_* directly in a constructor or\n//      destructor.\nclass Environment {\n public:\n  // The d'tor is virtual as we need to subclass Environment.\n  virtual ~Environment() {}\n\n  // Override this to define how to set up the environment.\n  virtual void SetUp() {}\n\n  // Override this to define how to tear down the environment.\n  virtual void TearDown() {}\n private:\n  // If you see an error about overriding the following function or\n  // about it being private, you have mis-spelled SetUp() as Setup().\n  struct Setup_should_be_spelled_SetUp {};\n  virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }\n};\n\n// The interface for tracing execution of tests. The methods are organized in\n// the order the corresponding events are fired.\nclass TestEventListener {\n public:\n  virtual ~TestEventListener() {}\n\n  // Fired before any test activity starts.\n  virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;\n\n  // Fired before each iteration of tests starts.  There may be more than\n  // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration\n  // index, starting from 0.\n  virtual void OnTestIterationStart(const UnitTest& unit_test,\n                                    int iteration) = 0;\n\n  // Fired before environment set-up for each iteration of tests starts.\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0;\n\n  // Fired after environment set-up for each iteration of tests ends.\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0;\n\n  // Fired before the test case starts.\n  virtual void OnTestCaseStart(const TestCase& test_case) = 0;\n\n  // Fired before the test starts.\n  virtual void OnTestStart(const TestInfo& test_info) = 0;\n\n  // Fired after a failed assertion or a SUCCEED() invocation.\n  virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0;\n\n  // Fired after the test ends.\n  virtual void OnTestEnd(const TestInfo& test_info) = 0;\n\n  // Fired after the test case ends.\n  virtual void OnTestCaseEnd(const TestCase& test_case) = 0;\n\n  // Fired before environment tear-down for each iteration of tests starts.\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0;\n\n  // Fired after environment tear-down for each iteration of tests ends.\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0;\n\n  // Fired after each iteration of tests finishes.\n  virtual void OnTestIterationEnd(const UnitTest& unit_test,\n                                  int iteration) = 0;\n\n  // Fired after all test activities have ended.\n  virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0;\n};\n\n// The convenience class for users who need to override just one or two\n// methods and are not concerned that a possible change to a signature of\n// the methods they override will not be caught during the build.  For\n// comments about each method please see the definition of TestEventListener\n// above.\nclass EmptyTestEventListener : public TestEventListener {\n public:\n  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,\n                                    int /*iteration*/) {}\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {}\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}\n  virtual void OnTestStart(const TestInfo& /*test_info*/) {}\n  virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {}\n  virtual void OnTestEnd(const TestInfo& /*test_info*/) {}\n  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {}\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {}\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,\n                                  int /*iteration*/) {}\n  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}\n};\n\n// TestEventListeners lets users add listeners to track events in Google Test.\nclass GTEST_API_ TestEventListeners {\n public:\n  TestEventListeners();\n  ~TestEventListeners();\n\n  // Appends an event listener to the end of the list. Google Test assumes\n  // the ownership of the listener (i.e. it will delete the listener when\n  // the test program finishes).\n  void Append(TestEventListener* listener);\n\n  // Removes the given event listener from the list and returns it.  It then\n  // becomes the caller's responsibility to delete the listener. Returns\n  // NULL if the listener is not found in the list.\n  TestEventListener* Release(TestEventListener* listener);\n\n  // Returns the standard listener responsible for the default console\n  // output.  Can be removed from the listeners list to shut down default\n  // console output.  Note that removing this object from the listener list\n  // with Release transfers its ownership to the caller and makes this\n  // function return NULL the next time.\n  TestEventListener* default_result_printer() const {\n    return default_result_printer_;\n  }\n\n  // Returns the standard listener responsible for the default XML output\n  // controlled by the --gtest_output=xml flag.  Can be removed from the\n  // listeners list by users who want to shut down the default XML output\n  // controlled by this flag and substitute it with custom one.  Note that\n  // removing this object from the listener list with Release transfers its\n  // ownership to the caller and makes this function return NULL the next\n  // time.\n  TestEventListener* default_xml_generator() const {\n    return default_xml_generator_;\n  }\n\n private:\n  friend class TestCase;\n  friend class TestInfo;\n  friend class internal::DefaultGlobalTestPartResultReporter;\n  friend class internal::NoExecDeathTest;\n  friend class internal::TestEventListenersAccessor;\n  friend class internal::UnitTestImpl;\n\n  // Returns repeater that broadcasts the TestEventListener events to all\n  // subscribers.\n  TestEventListener* repeater();\n\n  // Sets the default_result_printer attribute to the provided listener.\n  // The listener is also added to the listener list and previous\n  // default_result_printer is removed from it and deleted. The listener can\n  // also be NULL in which case it will not be added to the list. Does\n  // nothing if the previous and the current listener objects are the same.\n  void SetDefaultResultPrinter(TestEventListener* listener);\n\n  // Sets the default_xml_generator attribute to the provided listener.  The\n  // listener is also added to the listener list and previous\n  // default_xml_generator is removed from it and deleted. The listener can\n  // also be NULL in which case it will not be added to the list. Does\n  // nothing if the previous and the current listener objects are the same.\n  void SetDefaultXmlGenerator(TestEventListener* listener);\n\n  // Controls whether events will be forwarded by the repeater to the\n  // listeners in the list.\n  bool EventForwardingEnabled() const;\n  void SuppressEventForwarding();\n\n  // The actual list of listeners.\n  internal::TestEventRepeater* repeater_;\n  // Listener responsible for the standard result output.\n  TestEventListener* default_result_printer_;\n  // Listener responsible for the creation of the XML output file.\n  TestEventListener* default_xml_generator_;\n\n  // We disallow copying TestEventListeners.\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners);\n};\n\n// A UnitTest consists of a vector of TestCases.\n//\n// This is a singleton class.  The only instance of UnitTest is\n// created when UnitTest::GetInstance() is first called.  This\n// instance is never deleted.\n//\n// UnitTest is not copyable.\n//\n// This class is thread-safe as long as the methods are called\n// according to their specification.\nclass GTEST_API_ UnitTest {\n public:\n  // Gets the singleton UnitTest object.  The first time this method\n  // is called, a UnitTest object is constructed and returned.\n  // Consecutive calls will return the same object.\n  static UnitTest* GetInstance();\n\n  // Runs all tests in this UnitTest object and prints the result.\n  // Returns 0 if successful, or 1 otherwise.\n  //\n  // This method can only be called from the main thread.\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  int Run() GTEST_MUST_USE_RESULT_;\n\n  // Returns the working directory when the first TEST() or TEST_F()\n  // was executed.  The UnitTest object owns the string.\n  const char* original_working_dir() const;\n\n  // Returns the TestCase object for the test that's currently running,\n  // or NULL if no test is running.\n  const TestCase* current_test_case() const\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Returns the TestInfo object for the test that's currently running,\n  // or NULL if no test is running.\n  const TestInfo* current_test_info() const\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Returns the random seed used at the start of the current test run.\n  int random_seed() const;\n\n#if GTEST_HAS_PARAM_TEST\n  // Returns the ParameterizedTestCaseRegistry object used to keep track of\n  // value-parameterized tests and instantiate and register them.\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  internal::ParameterizedTestCaseRegistry& parameterized_test_registry()\n      GTEST_LOCK_EXCLUDED_(mutex_);\n#endif  // GTEST_HAS_PARAM_TEST\n\n  // Gets the number of successful test cases.\n  int successful_test_case_count() const;\n\n  // Gets the number of failed test cases.\n  int failed_test_case_count() const;\n\n  // Gets the number of all test cases.\n  int total_test_case_count() const;\n\n  // Gets the number of all test cases that contain at least one test\n  // that should run.\n  int test_case_to_run_count() const;\n\n  // Gets the number of successful tests.\n  int successful_test_count() const;\n\n  // Gets the number of failed tests.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests.\n  int disabled_test_count() const;\n\n  // Gets the number of all tests.\n  int total_test_count() const;\n\n  // Gets the number of tests that should run.\n  int test_to_run_count() const;\n\n  // Gets the time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const;\n\n  // Gets the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const;\n\n  // Returns true iff the unit test passed (i.e. all test cases passed).\n  bool Passed() const;\n\n  // Returns true iff the unit test failed (i.e. some test case failed\n  // or something outside of all tests failed).\n  bool Failed() const;\n\n  // Gets the i-th test case among all the test cases. i can range from 0 to\n  // total_test_case_count() - 1. If i is not in that range, returns NULL.\n  const TestCase* GetTestCase(int i) const;\n\n  // Returns the TestResult containing information on test failures and\n  // properties logged outside of individual test cases.\n  const TestResult& ad_hoc_test_result() const;\n\n  // Returns the list of event listeners that can be used to track events\n  // inside Google Test.\n  TestEventListeners& listeners();\n\n private:\n  // Registers and returns a global test environment.  When a test\n  // program is run, all global test environments will be set-up in\n  // the order they were registered.  After all tests in the program\n  // have finished, all global test environments will be torn-down in\n  // the *reverse* order they were registered.\n  //\n  // The UnitTest object takes ownership of the given environment.\n  //\n  // This method can only be called from the main thread.\n  Environment* AddEnvironment(Environment* env);\n\n  // Adds a TestPartResult to the current TestResult object.  All\n  // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)\n  // eventually call this to report their results.  The user code\n  // should use the assertion macros instead of calling this directly.\n  void AddTestPartResult(TestPartResult::Type result_type,\n                         const char* file_name,\n                         int line_number,\n                         const std::string& message,\n                         const std::string& os_stack_trace)\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Adds a TestProperty to the current TestResult object when invoked from\n  // inside a test, to current TestCase's ad_hoc_test_result_ when invoked\n  // from SetUpTestCase or TearDownTestCase, or to the global property set\n  // when invoked elsewhere.  If the result already contains a property with\n  // the same key, the value will be updated.\n  void RecordProperty(const std::string& key, const std::string& value);\n\n  // Gets the i-th test case among all the test cases. i can range from 0 to\n  // total_test_case_count() - 1. If i is not in that range, returns NULL.\n  TestCase* GetMutableTestCase(int i);\n\n  // Accessors for the implementation object.\n  internal::UnitTestImpl* impl() { return impl_; }\n  const internal::UnitTestImpl* impl() const { return impl_; }\n\n  // These classes and funcions are friends as they need to access private\n  // members of UnitTest.\n  friend class Test;\n  friend class internal::AssertHelper;\n  friend class internal::ScopedTrace;\n  friend class internal::StreamingListenerTest;\n  friend class internal::UnitTestRecordPropertyTestHelper;\n  friend Environment* AddGlobalTestEnvironment(Environment* env);\n  friend internal::UnitTestImpl* internal::GetUnitTestImpl();\n  friend void internal::ReportFailureInUnknownLocation(\n      TestPartResult::Type result_type,\n      const std::string& message);\n\n  // Creates an empty UnitTest.\n  UnitTest();\n\n  // D'tor\n  virtual ~UnitTest();\n\n  // Pushes a trace defined by SCOPED_TRACE() on to the per-thread\n  // Google Test trace stack.\n  void PushGTestTrace(const internal::TraceInfo& trace)\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Pops a trace from the per-thread Google Test trace stack.\n  void PopGTestTrace()\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Protects mutable state in *impl_.  This is mutable as some const\n  // methods need to lock it too.\n  mutable internal::Mutex mutex_;\n\n  // Opaque implementation object.  This field is never changed once\n  // the object is constructed.  We don't mark it as const here, as\n  // doing so will cause a warning in the constructor of UnitTest.\n  // Mutable state in *impl_ is protected by mutex_.\n  internal::UnitTestImpl* impl_;\n\n  // We disallow copying UnitTest.\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest);\n};\n\n// A convenient wrapper for adding an environment for the test\n// program.\n//\n// You should call this before RUN_ALL_TESTS() is called, probably in\n// main().  If you use gtest_main, you need to call this before main()\n// starts for it to take effect.  For example, you can define a global\n// variable like this:\n//\n//   testing::Environment* const foo_env =\n//       testing::AddGlobalTestEnvironment(new FooEnvironment);\n//\n// However, we strongly recommend you to write your own main() and\n// call AddGlobalTestEnvironment() there, as relying on initialization\n// of global variables makes the code harder to read and may cause\n// problems when you register multiple environments from different\n// translation units and the environments have dependencies among them\n// (remember that the compiler doesn't guarantee the order in which\n// global variables from different translation units are initialized).\ninline Environment* AddGlobalTestEnvironment(Environment* env) {\n  return UnitTest::GetInstance()->AddEnvironment(env);\n}\n\n// Initializes Google Test.  This must be called before calling\n// RUN_ALL_TESTS().  In particular, it parses a command line for the\n// flags that Google Test recognizes.  Whenever a Google Test flag is\n// seen, it is removed from argv, and *argc is decremented.\n//\n// No value is returned.  Instead, the Google Test flag variables are\n// updated.\n//\n// Calling the function for the second time has no user-visible effect.\nGTEST_API_ void InitGoogleTest(int* argc, char** argv);\n\n// This overloaded version can be used in Windows programs compiled in\n// UNICODE mode.\nGTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv);\n\nnamespace internal {\n\n// FormatForComparison<ToPrint, OtherOperand>::Format(value) formats a\n// value of type ToPrint that is an operand of a comparison assertion\n// (e.g. ASSERT_EQ).  OtherOperand is the type of the other operand in\n// the comparison, and is used to help determine the best way to\n// format the value.  In particular, when the value is a C string\n// (char pointer) and the other operand is an STL string object, we\n// want to format the C string as a string, since we know it is\n// compared by value with the string object.  If the value is a char\n// pointer but the other operand is not an STL string object, we don't\n// know whether the pointer is supposed to point to a NUL-terminated\n// string, and thus want to print it as a pointer to be safe.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n\n// The default case.\ntemplate <typename ToPrint, typename OtherOperand>\nclass FormatForComparison {\n public:\n  static ::std::string Format(const ToPrint& value) {\n    return ::testing::PrintToString(value);\n  }\n};\n\n// Array.\ntemplate <typename ToPrint, size_t N, typename OtherOperand>\nclass FormatForComparison<ToPrint[N], OtherOperand> {\n public:\n  static ::std::string Format(const ToPrint* value) {\n    return FormatForComparison<const ToPrint*, OtherOperand>::Format(value);\n  }\n};\n\n// By default, print C string as pointers to be safe, as we don't know\n// whether they actually point to a NUL-terminated string.\n\n#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType)                \\\n  template <typename OtherOperand>                                      \\\n  class FormatForComparison<CharType*, OtherOperand> {                  \\\n   public:                                                              \\\n    static ::std::string Format(CharType* value) {                      \\\n      return ::testing::PrintToString(static_cast<const void*>(value)); \\\n    }                                                                   \\\n  }\n\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t);\n\n#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_\n\n// If a C string is compared with an STL string object, we know it's meant\n// to point to a NUL-terminated string, and thus can print it as a string.\n\n#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \\\n  template <>                                                           \\\n  class FormatForComparison<CharType*, OtherStringType> {               \\\n   public:                                                              \\\n    static ::std::string Format(CharType* value) {                      \\\n      return ::testing::PrintToString(value);                           \\\n    }                                                                   \\\n  }\n\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string);\n\n#if GTEST_HAS_GLOBAL_STRING\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string);\n#endif\n\n#if GTEST_HAS_GLOBAL_WSTRING\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring);\n#endif\n\n#if GTEST_HAS_STD_WSTRING\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring);\n#endif\n\n#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_\n\n// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)\n// operand to be used in a failure message.  The type (but not value)\n// of the other operand may affect the format.  This allows us to\n// print a char* as a raw pointer when it is compared against another\n// char* or void*, and print it as a C string when it is compared\n// against an std::string object, for example.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\ntemplate <typename T1, typename T2>\nstd::string FormatForComparisonFailureMessage(\n    const T1& value, const T2& /* other_operand */) {\n  return FormatForComparison<T1, T2>::Format(value);\n}\n\n// The helper function for {ASSERT|EXPECT}_EQ.\ntemplate <typename T1, typename T2>\nAssertionResult CmpHelperEQ(const char* expected_expression,\n                            const char* actual_expression,\n                            const T1& expected,\n                            const T2& actual) {\n#ifdef _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4389)  // Temporarily disables warning on\n                                // signed/unsigned mismatch.\n#endif\n\n  if (expected == actual) {\n    return AssertionSuccess();\n  }\n\n#ifdef _MSC_VER\n# pragma warning(pop)          // Restores the warning state.\n#endif\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   FormatForComparisonFailureMessage(expected, actual),\n                   FormatForComparisonFailureMessage(actual, expected),\n                   false);\n}\n\n// With this overloaded version, we allow anonymous enums to be used\n// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums\n// can be implicitly cast to BiggestInt.\nGTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression,\n                                       const char* actual_expression,\n                                       BiggestInt expected,\n                                       BiggestInt actual);\n\n// The helper class for {ASSERT|EXPECT}_EQ.  The template argument\n// lhs_is_null_literal is true iff the first argument to ASSERT_EQ()\n// is a null pointer literal.  The following default implementation is\n// for lhs_is_null_literal being false.\ntemplate <bool lhs_is_null_literal>\nclass EqHelper {\n public:\n  // This templatized version is for the general case.\n  template <typename T1, typename T2>\n  static AssertionResult Compare(const char* expected_expression,\n                                 const char* actual_expression,\n                                 const T1& expected,\n                                 const T2& actual) {\n    return CmpHelperEQ(expected_expression, actual_expression, expected,\n                       actual);\n  }\n\n  // With this overloaded version, we allow anonymous enums to be used\n  // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous\n  // enums can be implicitly cast to BiggestInt.\n  //\n  // Even though its body looks the same as the above version, we\n  // cannot merge the two, as it will make anonymous enums unhappy.\n  static AssertionResult Compare(const char* expected_expression,\n                                 const char* actual_expression,\n                                 BiggestInt expected,\n                                 BiggestInt actual) {\n    return CmpHelperEQ(expected_expression, actual_expression, expected,\n                       actual);\n  }\n};\n\n// This specialization is used when the first argument to ASSERT_EQ()\n// is a null pointer literal, like NULL, false, or 0.\ntemplate <>\nclass EqHelper<true> {\n public:\n  // We define two overloaded versions of Compare().  The first\n  // version will be picked when the second argument to ASSERT_EQ() is\n  // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or\n  // EXPECT_EQ(false, a_bool).\n  template <typename T1, typename T2>\n  static AssertionResult Compare(\n      const char* expected_expression,\n      const char* actual_expression,\n      const T1& expected,\n      const T2& actual,\n      // The following line prevents this overload from being considered if T2\n      // is not a pointer type.  We need this because ASSERT_EQ(NULL, my_ptr)\n      // expands to Compare(\"\", \"\", NULL, my_ptr), which requires a conversion\n      // to match the Secret* in the other overload, which would otherwise make\n      // this template match better.\n      typename EnableIf<!is_pointer<T2>::value>::type* = 0) {\n    return CmpHelperEQ(expected_expression, actual_expression, expected,\n                       actual);\n  }\n\n  // This version will be picked when the second argument to ASSERT_EQ() is a\n  // pointer, e.g. ASSERT_EQ(NULL, a_pointer).\n  template <typename T>\n  static AssertionResult Compare(\n      const char* expected_expression,\n      const char* actual_expression,\n      // We used to have a second template parameter instead of Secret*.  That\n      // template parameter would deduce to 'long', making this a better match\n      // than the first overload even without the first overload's EnableIf.\n      // Unfortunately, gcc with -Wconversion-null warns when \"passing NULL to\n      // non-pointer argument\" (even a deduced integral argument), so the old\n      // implementation caused warnings in user code.\n      Secret* /* expected (NULL) */,\n      T* actual) {\n    // We already know that 'expected' is a null pointer.\n    return CmpHelperEQ(expected_expression, actual_expression,\n                       static_cast<T*>(NULL), actual);\n  }\n};\n\n// A macro for implementing the helper functions needed to implement\n// ASSERT_?? and EXPECT_??.  It is here just to avoid copy-and-paste\n// of similar code.\n//\n// For each templatized helper function, we also define an overloaded\n// version for BiggestInt in order to reduce code bloat and allow\n// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled\n// with gcc 4.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n#define GTEST_IMPL_CMP_HELPER_(op_name, op)\\\ntemplate <typename T1, typename T2>\\\nAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \\\n                                   const T1& val1, const T2& val2) {\\\n  if (val1 op val2) {\\\n    return AssertionSuccess();\\\n  } else {\\\n    return AssertionFailure() \\\n        << \"Expected: (\" << expr1 << \") \" #op \" (\" << expr2\\\n        << \"), actual: \" << FormatForComparisonFailureMessage(val1, val2)\\\n        << \" vs \" << FormatForComparisonFailureMessage(val2, val1);\\\n  }\\\n}\\\nGTEST_API_ AssertionResult CmpHelper##op_name(\\\n    const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n\n// Implements the helper function for {ASSERT|EXPECT}_NE\nGTEST_IMPL_CMP_HELPER_(NE, !=);\n// Implements the helper function for {ASSERT|EXPECT}_LE\nGTEST_IMPL_CMP_HELPER_(LE, <=);\n// Implements the helper function for {ASSERT|EXPECT}_LT\nGTEST_IMPL_CMP_HELPER_(LT, <);\n// Implements the helper function for {ASSERT|EXPECT}_GE\nGTEST_IMPL_CMP_HELPER_(GE, >=);\n// Implements the helper function for {ASSERT|EXPECT}_GT\nGTEST_IMPL_CMP_HELPER_(GT, >);\n\n#undef GTEST_IMPL_CMP_HELPER_\n\n// The helper function for {ASSERT|EXPECT}_STREQ.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,\n                                          const char* actual_expression,\n                                          const char* expected,\n                                          const char* actual);\n\n// The helper function for {ASSERT|EXPECT}_STRCASEEQ.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,\n                                              const char* actual_expression,\n                                              const char* expected,\n                                              const char* actual);\n\n// The helper function for {ASSERT|EXPECT}_STRNE.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const char* s1,\n                                          const char* s2);\n\n// The helper function for {ASSERT|EXPECT}_STRCASENE.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression,\n                                              const char* s2_expression,\n                                              const char* s1,\n                                              const char* s2);\n\n\n// Helper function for *_STREQ on wide strings.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,\n                                          const char* actual_expression,\n                                          const wchar_t* expected,\n                                          const wchar_t* actual);\n\n// Helper function for *_STRNE on wide strings.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const wchar_t* s1,\n                                          const wchar_t* s2);\n\n}  // namespace internal\n\n// IsSubstring() and IsNotSubstring() are intended to be used as the\n// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by\n// themselves.  They check whether needle is a substring of haystack\n// (NULL is considered a substring of itself only), and return an\n// appropriate error message when they fail.\n//\n// The {needle,haystack}_expr arguments are the stringified\n// expressions that generated the two real arguments.\nGTEST_API_ AssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const char* needle, const char* haystack);\nGTEST_API_ AssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const wchar_t* needle, const wchar_t* haystack);\nGTEST_API_ AssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const char* needle, const char* haystack);\nGTEST_API_ AssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const wchar_t* needle, const wchar_t* haystack);\nGTEST_API_ AssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::string& needle, const ::std::string& haystack);\nGTEST_API_ AssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::string& needle, const ::std::string& haystack);\n\n#if GTEST_HAS_STD_WSTRING\nGTEST_API_ AssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::wstring& needle, const ::std::wstring& haystack);\nGTEST_API_ AssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::wstring& needle, const ::std::wstring& haystack);\n#endif  // GTEST_HAS_STD_WSTRING\n\nnamespace internal {\n\n// Helper template function for comparing floating-points.\n//\n// Template parameter:\n//\n//   RawType: the raw floating-point type (either float or double)\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\ntemplate <typename RawType>\nAssertionResult CmpHelperFloatingPointEQ(const char* expected_expression,\n                                         const char* actual_expression,\n                                         RawType expected,\n                                         RawType actual) {\n  const FloatingPoint<RawType> lhs(expected), rhs(actual);\n\n  if (lhs.AlmostEquals(rhs)) {\n    return AssertionSuccess();\n  }\n\n  ::std::stringstream expected_ss;\n  expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n              << expected;\n\n  ::std::stringstream actual_ss;\n  actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n            << actual;\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   StringStreamToString(&expected_ss),\n                   StringStreamToString(&actual_ss),\n                   false);\n}\n\n// Helper function for implementing ASSERT_NEAR.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1,\n                                                const char* expr2,\n                                                const char* abs_error_expr,\n                                                double val1,\n                                                double val2,\n                                                double abs_error);\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n// A class that enables one to stream messages to assertion macros\nclass GTEST_API_ AssertHelper {\n public:\n  // Constructor.\n  AssertHelper(TestPartResult::Type type,\n               const char* file,\n               int line,\n               const char* message);\n  ~AssertHelper();\n\n  // Message assignment is a semantic trick to enable assertion\n  // streaming; see the GTEST_MESSAGE_ macro below.\n  void operator=(const Message& message) const;\n\n private:\n  // We put our data in a struct so that the size of the AssertHelper class can\n  // be as small as possible.  This is important because gcc is incapable of\n  // re-using stack space even for temporary variables, so every EXPECT_EQ\n  // reserves stack space for another AssertHelper.\n  struct AssertHelperData {\n    AssertHelperData(TestPartResult::Type t,\n                     const char* srcfile,\n                     int line_num,\n                     const char* msg)\n        : type(t), file(srcfile), line(line_num), message(msg) { }\n\n    TestPartResult::Type const type;\n    const char* const file;\n    int const line;\n    std::string const message;\n\n   private:\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);\n  };\n\n  AssertHelperData* const data_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper);\n};\n\n}  // namespace internal\n\n#if GTEST_HAS_PARAM_TEST\n// The pure interface class that all value-parameterized tests inherit from.\n// A value-parameterized class must inherit from both ::testing::Test and\n// ::testing::WithParamInterface. In most cases that just means inheriting\n// from ::testing::TestWithParam, but more complicated test hierarchies\n// may need to inherit from Test and WithParamInterface at different levels.\n//\n// This interface has support for accessing the test parameter value via\n// the GetParam() method.\n//\n// Use it with one of the parameter generator defining functions, like Range(),\n// Values(), ValuesIn(), Bool(), and Combine().\n//\n// class FooTest : public ::testing::TestWithParam<int> {\n//  protected:\n//   FooTest() {\n//     // Can use GetParam() here.\n//   }\n//   virtual ~FooTest() {\n//     // Can use GetParam() here.\n//   }\n//   virtual void SetUp() {\n//     // Can use GetParam() here.\n//   }\n//   virtual void TearDown {\n//     // Can use GetParam() here.\n//   }\n// };\n// TEST_P(FooTest, DoesBar) {\n//   // Can use GetParam() method here.\n//   Foo foo;\n//   ASSERT_TRUE(foo.DoesBar(GetParam()));\n// }\n// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));\n\ntemplate <typename T>\nclass WithParamInterface {\n public:\n  typedef T ParamType;\n  virtual ~WithParamInterface() {}\n\n  // The current parameter value. Is also available in the test fixture's\n  // constructor. This member function is non-static, even though it only\n  // references static data, to reduce the opportunity for incorrect uses\n  // like writing 'WithParamInterface<bool>::GetParam()' for a test that\n  // uses a fixture whose parameter type is int.\n  const ParamType& GetParam() const {\n    GTEST_CHECK_(parameter_ != NULL)\n        << \"GetParam() can only be called inside a value-parameterized test \"\n        << \"-- did you intend to write TEST_P instead of TEST_F?\";\n    return *parameter_;\n  }\n\n private:\n  // Sets parameter value. The caller is responsible for making sure the value\n  // remains alive and unchanged throughout the current test.\n  static void SetParam(const ParamType* parameter) {\n    parameter_ = parameter;\n  }\n\n  // Static value used for accessing parameter during a test lifetime.\n  static const ParamType* parameter_;\n\n  // TestClass must be a subclass of WithParamInterface<T> and Test.\n  template <class TestClass> friend class internal::ParameterizedTestFactory;\n};\n\ntemplate <typename T>\nconst T* WithParamInterface<T>::parameter_ = NULL;\n\n// Most value-parameterized classes can ignore the existence of\n// WithParamInterface, and can just inherit from ::testing::TestWithParam.\n\ntemplate <typename T>\nclass TestWithParam : public Test, public WithParamInterface<T> {\n};\n\n#endif  // GTEST_HAS_PARAM_TEST\n\n// Macros for indicating success/failure in test code.\n\n// ADD_FAILURE unconditionally adds a failure to the current test.\n// SUCCEED generates a success - it doesn't automatically make the\n// current test successful, as a test is only successful when it has\n// no failure.\n//\n// EXPECT_* verifies that a certain condition is satisfied.  If not,\n// it behaves like ADD_FAILURE.  In particular:\n//\n//   EXPECT_TRUE  verifies that a Boolean condition is true.\n//   EXPECT_FALSE verifies that a Boolean condition is false.\n//\n// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except\n// that they will also abort the current function on failure.  People\n// usually want the fail-fast behavior of FAIL and ASSERT_*, but those\n// writing data-driven tests often find themselves using ADD_FAILURE\n// and EXPECT_* more.\n\n// Generates a nonfatal failure with a generic message.\n#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_(\"Failed\")\n\n// Generates a nonfatal failure at the given source file location with\n// a generic message.\n#define ADD_FAILURE_AT(file, line) \\\n  GTEST_MESSAGE_AT_(file, line, \"Failed\", \\\n                    ::testing::TestPartResult::kNonFatalFailure)\n\n// Generates a fatal failure with a generic message.\n#define GTEST_FAIL() GTEST_FATAL_FAILURE_(\"Failed\")\n\n// Define this macro to 1 to omit the definition of FAIL(), which is a\n// generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_FAIL\n# define FAIL() GTEST_FAIL()\n#endif\n\n// Generates a success with a generic message.\n#define GTEST_SUCCEED() GTEST_SUCCESS_(\"Succeeded\")\n\n// Define this macro to 1 to omit the definition of SUCCEED(), which\n// is a generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_SUCCEED\n# define SUCCEED() GTEST_SUCCEED()\n#endif\n\n// Macros for testing exceptions.\n//\n//    * {ASSERT|EXPECT}_THROW(statement, expected_exception):\n//         Tests that the statement throws the expected exception.\n//    * {ASSERT|EXPECT}_NO_THROW(statement):\n//         Tests that the statement doesn't throw any exception.\n//    * {ASSERT|EXPECT}_ANY_THROW(statement):\n//         Tests that the statement throws an exception.\n\n#define EXPECT_THROW(statement, expected_exception) \\\n  GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_NO_THROW(statement) \\\n  GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_ANY_THROW(statement) \\\n  GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_THROW(statement, expected_exception) \\\n  GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)\n#define ASSERT_NO_THROW(statement) \\\n  GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)\n#define ASSERT_ANY_THROW(statement) \\\n  GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)\n\n// Boolean assertions. Condition can be either a Boolean expression or an\n// AssertionResult. For more information on how to use AssertionResult with\n// these macros see comments on that class.\n#define EXPECT_TRUE(condition) \\\n  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \\\n                      GTEST_NONFATAL_FAILURE_)\n#define EXPECT_FALSE(condition) \\\n  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \\\n                      GTEST_NONFATAL_FAILURE_)\n#define ASSERT_TRUE(condition) \\\n  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \\\n                      GTEST_FATAL_FAILURE_)\n#define ASSERT_FALSE(condition) \\\n  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \\\n                      GTEST_FATAL_FAILURE_)\n\n// Includes the auto-generated header that implements a family of\n// generic predicate assertion macros.\n#include \"gtest/gtest_pred_impl.h\"\n\n// Macros for testing equalities and inequalities.\n//\n//    * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual\n//    * {ASSERT|EXPECT}_NE(v1, v2):           Tests that v1 != v2\n//    * {ASSERT|EXPECT}_LT(v1, v2):           Tests that v1 < v2\n//    * {ASSERT|EXPECT}_LE(v1, v2):           Tests that v1 <= v2\n//    * {ASSERT|EXPECT}_GT(v1, v2):           Tests that v1 > v2\n//    * {ASSERT|EXPECT}_GE(v1, v2):           Tests that v1 >= v2\n//\n// When they are not, Google Test prints both the tested expressions and\n// their actual values.  The values must be compatible built-in types,\n// or you will get a compiler error.  By \"compatible\" we mean that the\n// values can be compared by the respective operator.\n//\n// Note:\n//\n//   1. It is possible to make a user-defined type work with\n//   {ASSERT|EXPECT}_??(), but that requires overloading the\n//   comparison operators and is thus discouraged by the Google C++\n//   Usage Guide.  Therefore, you are advised to use the\n//   {ASSERT|EXPECT}_TRUE() macro to assert that two objects are\n//   equal.\n//\n//   2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on\n//   pointers (in particular, C strings).  Therefore, if you use it\n//   with two C strings, you are testing how their locations in memory\n//   are related, not how their content is related.  To compare two C\n//   strings by content, use {ASSERT|EXPECT}_STR*().\n//\n//   3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to\n//   {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you\n//   what the actual value is when it fails, and similarly for the\n//   other comparisons.\n//\n//   4. Do not depend on the order in which {ASSERT|EXPECT}_??()\n//   evaluate their arguments, which is undefined.\n//\n//   5. These macros evaluate their arguments exactly once.\n//\n// Examples:\n//\n//   EXPECT_NE(5, Foo());\n//   EXPECT_EQ(NULL, a_pointer);\n//   ASSERT_LT(i, array_size);\n//   ASSERT_GT(records.size(), 0) << \"There is no record left.\";\n\n#define EXPECT_EQ(expected, actual) \\\n  EXPECT_PRED_FORMAT2(::testing::internal:: \\\n                      EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \\\n                      expected, actual)\n#define EXPECT_NE(expected, actual) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual)\n#define EXPECT_LE(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)\n#define EXPECT_LT(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)\n#define EXPECT_GE(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)\n#define EXPECT_GT(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)\n\n#define GTEST_ASSERT_EQ(expected, actual) \\\n  ASSERT_PRED_FORMAT2(::testing::internal:: \\\n                      EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \\\n                      expected, actual)\n#define GTEST_ASSERT_NE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)\n#define GTEST_ASSERT_LE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)\n#define GTEST_ASSERT_LT(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)\n#define GTEST_ASSERT_GE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)\n#define GTEST_ASSERT_GT(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)\n\n// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of\n// ASSERT_XY(), which clashes with some users' own code.\n\n#if !GTEST_DONT_DEFINE_ASSERT_EQ\n# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_NE\n# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_LE\n# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_LT\n# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_GE\n# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_GT\n# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)\n#endif\n\n// C-string Comparisons.  All tests treat NULL and any non-NULL string\n// as different.  Two NULLs are equal.\n//\n//    * {ASSERT|EXPECT}_STREQ(s1, s2):     Tests that s1 == s2\n//    * {ASSERT|EXPECT}_STRNE(s1, s2):     Tests that s1 != s2\n//    * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case\n//    * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case\n//\n// For wide or narrow string objects, you can use the\n// {ASSERT|EXPECT}_??() macros.\n//\n// Don't depend on the order in which the arguments are evaluated,\n// which is undefined.\n//\n// These macros evaluate their arguments exactly once.\n\n#define EXPECT_STREQ(expected, actual) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)\n#define EXPECT_STRNE(s1, s2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)\n#define EXPECT_STRCASEEQ(expected, actual) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)\n#define EXPECT_STRCASENE(s1, s2)\\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)\n\n#define ASSERT_STREQ(expected, actual) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)\n#define ASSERT_STRNE(s1, s2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)\n#define ASSERT_STRCASEEQ(expected, actual) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)\n#define ASSERT_STRCASENE(s1, s2)\\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)\n\n// Macros for comparing floating-point numbers.\n//\n//    * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual):\n//         Tests that two float values are almost equal.\n//    * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual):\n//         Tests that two double values are almost equal.\n//    * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):\n//         Tests that v1 and v2 are within the given distance to each other.\n//\n// Google Test uses ULP-based comparison to automatically pick a default\n// error bound that is appropriate for the operands.  See the\n// FloatingPoint template class in gtest-internal.h if you are\n// interested in the implementation details.\n\n#define EXPECT_FLOAT_EQ(expected, actual)\\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \\\n                      expected, actual)\n\n#define EXPECT_DOUBLE_EQ(expected, actual)\\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \\\n                      expected, actual)\n\n#define ASSERT_FLOAT_EQ(expected, actual)\\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \\\n                      expected, actual)\n\n#define ASSERT_DOUBLE_EQ(expected, actual)\\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \\\n                      expected, actual)\n\n#define EXPECT_NEAR(val1, val2, abs_error)\\\n  EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \\\n                      val1, val2, abs_error)\n\n#define ASSERT_NEAR(val1, val2, abs_error)\\\n  ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \\\n                      val1, val2, abs_error)\n\n// These predicate format functions work on floating-point values, and\n// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g.\n//\n//   EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0);\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nGTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2,\n                                   float val1, float val2);\nGTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,\n                                    double val1, double val2);\n\n\n#if GTEST_OS_WINDOWS\n\n// Macros that test for HRESULT failure and success, these are only useful\n// on Windows, and rely on Windows SDK macros and APIs to compile.\n//\n//    * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr)\n//\n// When expr unexpectedly fails or succeeds, Google Test prints the\n// expected result and the actual result with both a human-readable\n// string representation of the error, if available, as well as the\n// hex result code.\n# define EXPECT_HRESULT_SUCCEEDED(expr) \\\n    EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))\n\n# define ASSERT_HRESULT_SUCCEEDED(expr) \\\n    ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))\n\n# define EXPECT_HRESULT_FAILED(expr) \\\n    EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))\n\n# define ASSERT_HRESULT_FAILED(expr) \\\n    ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))\n\n#endif  // GTEST_OS_WINDOWS\n\n// Macros that execute statement and check that it doesn't generate new fatal\n// failures in the current thread.\n//\n//   * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement);\n//\n// Examples:\n//\n//   EXPECT_NO_FATAL_FAILURE(Process());\n//   ASSERT_NO_FATAL_FAILURE(Process()) << \"Process() failed\";\n//\n#define ASSERT_NO_FATAL_FAILURE(statement) \\\n    GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)\n#define EXPECT_NO_FATAL_FAILURE(statement) \\\n    GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)\n\n// Causes a trace (including the source file path, the current line\n// number, and the given message) to be included in every test failure\n// message generated by code in the current scope.  The effect is\n// undone when the control leaves the current scope.\n//\n// The message argument can be anything streamable to std::ostream.\n//\n// In the implementation, we include the current line number as part\n// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s\n// to appear in the same block - as long as they are on different\n// lines.\n#define SCOPED_TRACE(message) \\\n  ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\\\n    __FILE__, __LINE__, ::testing::Message() << (message))\n\n// Compile-time assertion for type equality.\n// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are\n// the same type.  The value it returns is not interesting.\n//\n// Instead of making StaticAssertTypeEq a class template, we make it a\n// function template that invokes a helper class template.  This\n// prevents a user from misusing StaticAssertTypeEq<T1, T2> by\n// defining objects of that type.\n//\n// CAVEAT:\n//\n// When used inside a method of a class template,\n// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is\n// instantiated.  For example, given:\n//\n//   template <typename T> class Foo {\n//    public:\n//     void Bar() { testing::StaticAssertTypeEq<int, T>(); }\n//   };\n//\n// the code:\n//\n//   void Test1() { Foo<bool> foo; }\n//\n// will NOT generate a compiler error, as Foo<bool>::Bar() is never\n// actually instantiated.  Instead, you need:\n//\n//   void Test2() { Foo<bool> foo; foo.Bar(); }\n//\n// to cause a compiler error.\ntemplate <typename T1, typename T2>\nbool StaticAssertTypeEq() {\n  (void)internal::StaticAssertTypeEqHelper<T1, T2>();\n  return true;\n}\n\n// Defines a test.\n//\n// The first parameter is the name of the test case, and the second\n// parameter is the name of the test within the test case.\n//\n// The convention is to end the test case name with \"Test\".  For\n// example, a test case for the Foo class can be named FooTest.\n//\n// The user should put his test code between braces after using this\n// macro.  Example:\n//\n//   TEST(FooTest, InitializesCorrectly) {\n//     Foo foo;\n//     EXPECT_TRUE(foo.StatusIsOK());\n//   }\n\n// Note that we call GetTestTypeId() instead of GetTypeId<\n// ::testing::Test>() here to get the type ID of testing::Test.  This\n// is to work around a suspected linker bug when using Google Test as\n// a framework on Mac OS X.  The bug causes GetTypeId<\n// ::testing::Test>() to return different values depending on whether\n// the call is from the Google Test framework itself or from user test\n// code.  GetTestTypeId() is guaranteed to always return the same\n// value, as it always calls GetTypeId<>() from the Google Test\n// framework.\n#define GTEST_TEST(test_case_name, test_name)\\\n  GTEST_TEST_(test_case_name, test_name, \\\n              ::testing::Test, ::testing::internal::GetTestTypeId())\n\n// Define this macro to 1 to omit the definition of TEST(), which\n// is a generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_TEST\n# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)\n#endif\n\n// Defines a test that uses a test fixture.\n//\n// The first parameter is the name of the test fixture class, which\n// also doubles as the test case name.  The second parameter is the\n// name of the test within the test case.\n//\n// A test fixture class must be declared earlier.  The user should put\n// his test code between braces after using this macro.  Example:\n//\n//   class FooTest : public testing::Test {\n//    protected:\n//     virtual void SetUp() { b_.AddElement(3); }\n//\n//     Foo a_;\n//     Foo b_;\n//   };\n//\n//   TEST_F(FooTest, InitializesCorrectly) {\n//     EXPECT_TRUE(a_.StatusIsOK());\n//   }\n//\n//   TEST_F(FooTest, ReturnsElementCountCorrectly) {\n//     EXPECT_EQ(0, a_.size());\n//     EXPECT_EQ(1, b_.size());\n//   }\n\n#define TEST_F(test_fixture, test_name)\\\n  GTEST_TEST_(test_fixture, test_name, test_fixture, \\\n              ::testing::internal::GetTypeId<test_fixture>())\n\n}  // namespace testing\n\n// Use this function in main() to run all tests.  It returns 0 if all\n// tests are successful, or 1 otherwise.\n//\n// RUN_ALL_TESTS() should be invoked after the command line has been\n// parsed by InitGoogleTest().\n//\n// This function was formerly a macro; thus, it is in the global\n// namespace and has an all-caps name.\nint RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;\n\ninline int RUN_ALL_TESTS() {\n  return ::testing::UnitTest::GetInstance()->Run();\n}\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest_pred_impl.h",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command\n// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!\n//\n// Implements a family of generic predicate assertion macros.\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n\n// Makes sure this header is not included before gtest.h.\n#ifndef GTEST_INCLUDE_GTEST_GTEST_H_\n# error Do not include gtest_pred_impl.h directly.  Include gtest.h instead.\n#endif  // GTEST_INCLUDE_GTEST_GTEST_H_\n\n// This header implements a family of generic predicate assertion\n// macros:\n//\n//   ASSERT_PRED_FORMAT1(pred_format, v1)\n//   ASSERT_PRED_FORMAT2(pred_format, v1, v2)\n//   ...\n//\n// where pred_format is a function or functor that takes n (in the\n// case of ASSERT_PRED_FORMATn) values and their source expression\n// text, and returns a testing::AssertionResult.  See the definition\n// of ASSERT_EQ in gtest.h for an example.\n//\n// If you don't care about formatting, you can use the more\n// restrictive version:\n//\n//   ASSERT_PRED1(pred, v1)\n//   ASSERT_PRED2(pred, v1, v2)\n//   ...\n//\n// where pred is an n-ary function or functor that returns bool,\n// and the values v1, v2, ..., must support the << operator for\n// streaming to std::ostream.\n//\n// We also define the EXPECT_* variations.\n//\n// For now we only support predicates whose arity is at most 5.\n// Please email googletestframework@googlegroups.com if you need\n// support for higher arities.\n\n// GTEST_ASSERT_ is the basic statement to which all of the assertions\n// in this file reduce.  Don't use this in your code.\n\n#define GTEST_ASSERT_(expression, on_failure) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (const ::testing::AssertionResult gtest_ar = (expression)) \\\n    ; \\\n  else \\\n    on_failure(gtest_ar.failure_message())\n\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use\n// this in your code.\ntemplate <typename Pred,\n          typename T1>\nAssertionResult AssertPred1Helper(const char* pred_text,\n                                  const char* e1,\n                                  Pred pred,\n                                  const T1& v1) {\n  if (pred(v1)) return AssertionSuccess();\n\n  return AssertionFailure() << pred_text << \"(\"\n                            << e1 << \") evaluates to false, where\"\n                            << \"\\n\" << e1 << \" evaluates to \" << v1;\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\\\n  GTEST_ASSERT_(pred_format(#v1, v1), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use\n// this in your code.\n#define GTEST_PRED1_(pred, v1, on_failure)\\\n  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \\\n                                             #v1, \\\n                                             pred, \\\n                                             v1), on_failure)\n\n// Unary predicate assertion macros.\n#define EXPECT_PRED_FORMAT1(pred_format, v1) \\\n  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED1(pred, v1) \\\n  GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT1(pred_format, v1) \\\n  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED1(pred, v1) \\\n  GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)\n\n\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use\n// this in your code.\ntemplate <typename Pred,\n          typename T1,\n          typename T2>\nAssertionResult AssertPred2Helper(const char* pred_text,\n                                  const char* e1,\n                                  const char* e2,\n                                  Pred pred,\n                                  const T1& v1,\n                                  const T2& v2) {\n  if (pred(v1, v2)) return AssertionSuccess();\n\n  return AssertionFailure() << pred_text << \"(\"\n                            << e1 << \", \"\n                            << e2 << \") evaluates to false, where\"\n                            << \"\\n\" << e1 << \" evaluates to \" << v1\n                            << \"\\n\" << e2 << \" evaluates to \" << v2;\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\\\n  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use\n// this in your code.\n#define GTEST_PRED2_(pred, v1, v2, on_failure)\\\n  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \\\n                                             #v1, \\\n                                             #v2, \\\n                                             pred, \\\n                                             v1, \\\n                                             v2), on_failure)\n\n// Binary predicate assertion macros.\n#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \\\n  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED2(pred, v1, v2) \\\n  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \\\n  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED2(pred, v1, v2) \\\n  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)\n\n\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use\n// this in your code.\ntemplate <typename Pred,\n          typename T1,\n          typename T2,\n          typename T3>\nAssertionResult AssertPred3Helper(const char* pred_text,\n                                  const char* e1,\n                                  const char* e2,\n                                  const char* e3,\n                                  Pred pred,\n                                  const T1& v1,\n                                  const T2& v2,\n                                  const T3& v3) {\n  if (pred(v1, v2, v3)) return AssertionSuccess();\n\n  return AssertionFailure() << pred_text << \"(\"\n                            << e1 << \", \"\n                            << e2 << \", \"\n                            << e3 << \") evaluates to false, where\"\n                            << \"\\n\" << e1 << \" evaluates to \" << v1\n                            << \"\\n\" << e2 << \" evaluates to \" << v2\n                            << \"\\n\" << e3 << \" evaluates to \" << v3;\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use\n// this in your code.\n#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\\\n  GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \\\n                                             #v1, \\\n                                             #v2, \\\n                                             #v3, \\\n                                             pred, \\\n                                             v1, \\\n                                             v2, \\\n                                             v3), on_failure)\n\n// Ternary predicate assertion macros.\n#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \\\n  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED3(pred, v1, v2, v3) \\\n  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \\\n  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED3(pred, v1, v2, v3) \\\n  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)\n\n\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use\n// this in your code.\ntemplate <typename Pred,\n          typename T1,\n          typename T2,\n          typename T3,\n          typename T4>\nAssertionResult AssertPred4Helper(const char* pred_text,\n                                  const char* e1,\n                                  const char* e2,\n                                  const char* e3,\n                                  const char* e4,\n                                  Pred pred,\n                                  const T1& v1,\n                                  const T2& v2,\n                                  const T3& v3,\n                                  const T4& v4) {\n  if (pred(v1, v2, v3, v4)) return AssertionSuccess();\n\n  return AssertionFailure() << pred_text << \"(\"\n                            << e1 << \", \"\n                            << e2 << \", \"\n                            << e3 << \", \"\n                            << e4 << \") evaluates to false, where\"\n                            << \"\\n\" << e1 << \" evaluates to \" << v1\n                            << \"\\n\" << e2 << \" evaluates to \" << v2\n                            << \"\\n\" << e3 << \" evaluates to \" << v3\n                            << \"\\n\" << e4 << \" evaluates to \" << v4;\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use\n// this in your code.\n#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\\\n  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \\\n                                             #v1, \\\n                                             #v2, \\\n                                             #v3, \\\n                                             #v4, \\\n                                             pred, \\\n                                             v1, \\\n                                             v2, \\\n                                             v3, \\\n                                             v4), on_failure)\n\n// 4-ary predicate assertion macros.\n#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \\\n  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED4(pred, v1, v2, v3, v4) \\\n  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \\\n  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED4(pred, v1, v2, v3, v4) \\\n  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)\n\n\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use\n// this in your code.\ntemplate <typename Pred,\n          typename T1,\n          typename T2,\n          typename T3,\n          typename T4,\n          typename T5>\nAssertionResult AssertPred5Helper(const char* pred_text,\n                                  const char* e1,\n                                  const char* e2,\n                                  const char* e3,\n                                  const char* e4,\n                                  const char* e5,\n                                  Pred pred,\n                                  const T1& v1,\n                                  const T2& v2,\n                                  const T3& v3,\n                                  const T4& v4,\n                                  const T5& v5) {\n  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();\n\n  return AssertionFailure() << pred_text << \"(\"\n                            << e1 << \", \"\n                            << e2 << \", \"\n                            << e3 << \", \"\n                            << e4 << \", \"\n                            << e5 << \") evaluates to false, where\"\n                            << \"\\n\" << e1 << \" evaluates to \" << v1\n                            << \"\\n\" << e2 << \" evaluates to \" << v2\n                            << \"\\n\" << e3 << \" evaluates to \" << v3\n                            << \"\\n\" << e4 << \" evaluates to \" << v4\n                            << \"\\n\" << e5 << \" evaluates to \" << v5;\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use\n// this in your code.\n#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\\\n  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \\\n                                             #v1, \\\n                                             #v2, \\\n                                             #v3, \\\n                                             #v4, \\\n                                             #v5, \\\n                                             pred, \\\n                                             v1, \\\n                                             v2, \\\n                                             v3, \\\n                                             v4, \\\n                                             v5), on_failure)\n\n// 5-ary predicate assertion macros.\n#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \\\n  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \\\n  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \\\n  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \\\n  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)\n\n\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/gtest_prod.h",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Google C++ Testing Framework definitions useful in production code.\n\n#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_\n#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_\n\n// When you need to test the private or protected members of a class,\n// use the FRIEND_TEST macro to declare your tests as friends of the\n// class.  For example:\n//\n// class MyClass {\n//  private:\n//   void MyMethod();\n//   FRIEND_TEST(MyClassTest, MyMethod);\n// };\n//\n// class MyClassTest : public testing::Test {\n//   // ...\n// };\n//\n// TEST_F(MyClassTest, MyMethod) {\n//   // Can call MyClass::MyMethod() here.\n// }\n\n#define FRIEND_TEST(test_case_name, test_name)\\\nfriend class test_case_name##_##test_name##_Test\n\n#endif  // GTEST_INCLUDE_GTEST_GTEST_PROD_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file defines internal utilities needed for implementing\n// death tests.  They are subject to change without notice.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n\n#include \"gtest/internal/gtest-internal.h\"\n\n#include <stdio.h>\n\nnamespace testing {\nnamespace internal {\n\nGTEST_DECLARE_string_(internal_run_death_test);\n\n// Names of the flags (needed for parsing Google Test flags).\nconst char kDeathTestStyleFlag[] = \"death_test_style\";\nconst char kDeathTestUseFork[] = \"death_test_use_fork\";\nconst char kInternalRunDeathTestFlag[] = \"internal_run_death_test\";\n\n#if GTEST_HAS_DEATH_TEST\n\n// DeathTest is a class that hides much of the complexity of the\n// GTEST_DEATH_TEST_ macro.  It is abstract; its static Create method\n// returns a concrete class that depends on the prevailing death test\n// style, as defined by the --gtest_death_test_style and/or\n// --gtest_internal_run_death_test flags.\n\n// In describing the results of death tests, these terms are used with\n// the corresponding definitions:\n//\n// exit status:  The integer exit information in the format specified\n//               by wait(2)\n// exit code:    The integer code passed to exit(3), _exit(2), or\n//               returned from main()\nclass GTEST_API_ DeathTest {\n public:\n  // Create returns false if there was an error determining the\n  // appropriate action to take for the current death test; for example,\n  // if the gtest_death_test_style flag is set to an invalid value.\n  // The LastMessage method will return a more detailed message in that\n  // case.  Otherwise, the DeathTest pointer pointed to by the \"test\"\n  // argument is set.  If the death test should be skipped, the pointer\n  // is set to NULL; otherwise, it is set to the address of a new concrete\n  // DeathTest object that controls the execution of the current test.\n  static bool Create(const char* statement, const RE* regex,\n                     const char* file, int line, DeathTest** test);\n  DeathTest();\n  virtual ~DeathTest() { }\n\n  // A helper class that aborts a death test when it's deleted.\n  class ReturnSentinel {\n   public:\n    explicit ReturnSentinel(DeathTest* test) : test_(test) { }\n    ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }\n   private:\n    DeathTest* const test_;\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel);\n  } GTEST_ATTRIBUTE_UNUSED_;\n\n  // An enumeration of possible roles that may be taken when a death\n  // test is encountered.  EXECUTE means that the death test logic should\n  // be executed immediately.  OVERSEE means that the program should prepare\n  // the appropriate environment for a child process to execute the death\n  // test, then wait for it to complete.\n  enum TestRole { OVERSEE_TEST, EXECUTE_TEST };\n\n  // An enumeration of the three reasons that a test might be aborted.\n  enum AbortReason {\n    TEST_ENCOUNTERED_RETURN_STATEMENT,\n    TEST_THREW_EXCEPTION,\n    TEST_DID_NOT_DIE\n  };\n\n  // Assumes one of the above roles.\n  virtual TestRole AssumeRole() = 0;\n\n  // Waits for the death test to finish and returns its status.\n  virtual int Wait() = 0;\n\n  // Returns true if the death test passed; that is, the test process\n  // exited during the test, its exit status matches a user-supplied\n  // predicate, and its stderr output matches a user-supplied regular\n  // expression.\n  // The user-supplied predicate may be a macro expression rather\n  // than a function pointer or functor, or else Wait and Passed could\n  // be combined.\n  virtual bool Passed(bool exit_status_ok) = 0;\n\n  // Signals that the death test did not die as expected.\n  virtual void Abort(AbortReason reason) = 0;\n\n  // Returns a human-readable outcome message regarding the outcome of\n  // the last death test.\n  static const char* LastMessage();\n\n  static void set_last_death_test_message(const std::string& message);\n\n private:\n  // A string containing a description of the outcome of the last death test.\n  static std::string last_death_test_message_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);\n};\n\n// Factory interface for death tests.  May be mocked out for testing.\nclass DeathTestFactory {\n public:\n  virtual ~DeathTestFactory() { }\n  virtual bool Create(const char* statement, const RE* regex,\n                      const char* file, int line, DeathTest** test) = 0;\n};\n\n// A concrete DeathTestFactory implementation for normal use.\nclass DefaultDeathTestFactory : public DeathTestFactory {\n public:\n  virtual bool Create(const char* statement, const RE* regex,\n                      const char* file, int line, DeathTest** test);\n};\n\n// Returns true if exit_status describes a process that was terminated\n// by a signal, or exited normally with a nonzero exit code.\nGTEST_API_ bool ExitedUnsuccessfully(int exit_status);\n\n// Traps C++ exceptions escaping statement and reports them as test\n// failures. Note that trapping SEH exceptions is not implemented here.\n# if GTEST_HAS_EXCEPTIONS\n#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \\\n  try { \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n  } catch (const ::std::exception& gtest_exception) { \\\n    fprintf(\\\n        stderr, \\\n        \"\\n%s: Caught std::exception-derived exception escaping the \" \\\n        \"death test statement. Exception message: %s\\n\", \\\n        ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \\\n        gtest_exception.what()); \\\n    fflush(stderr); \\\n    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \\\n  } catch (...) { \\\n    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \\\n  }\n\n# else\n#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \\\n  GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)\n\n# endif\n\n// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,\n// ASSERT_EXIT*, and EXPECT_EXIT*.\n# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::AlwaysTrue()) { \\\n    const ::testing::internal::RE& gtest_regex = (regex); \\\n    ::testing::internal::DeathTest* gtest_dt; \\\n    if (!::testing::internal::DeathTest::Create(#statement, &gtest_regex, \\\n        __FILE__, __LINE__, &gtest_dt)) { \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \\\n    } \\\n    if (gtest_dt != NULL) { \\\n      ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \\\n          gtest_dt_ptr(gtest_dt); \\\n      switch (gtest_dt->AssumeRole()) { \\\n        case ::testing::internal::DeathTest::OVERSEE_TEST: \\\n          if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \\\n            goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \\\n          } \\\n          break; \\\n        case ::testing::internal::DeathTest::EXECUTE_TEST: { \\\n          ::testing::internal::DeathTest::ReturnSentinel \\\n              gtest_sentinel(gtest_dt); \\\n          GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \\\n          gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \\\n          break; \\\n        } \\\n        default: \\\n          break; \\\n      } \\\n    } \\\n  } else \\\n    GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \\\n      fail(::testing::internal::DeathTest::LastMessage())\n// The symbol \"fail\" here expands to something into which a message\n// can be streamed.\n\n// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in\n// NDEBUG mode. In this case we need the statements to be executed, the regex is\n// ignored, and the macro must accept a streamed message even though the message\n// is never printed.\n# define GTEST_EXECUTE_STATEMENT_(statement, regex) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::AlwaysTrue()) { \\\n     GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n  } else \\\n    ::testing::Message()\n\n// A class representing the parsed contents of the\n// --gtest_internal_run_death_test flag, as it existed when\n// RUN_ALL_TESTS was called.\nclass InternalRunDeathTestFlag {\n public:\n  InternalRunDeathTestFlag(const std::string& a_file,\n                           int a_line,\n                           int an_index,\n                           int a_write_fd)\n      : file_(a_file), line_(a_line), index_(an_index),\n        write_fd_(a_write_fd) {}\n\n  ~InternalRunDeathTestFlag() {\n    if (write_fd_ >= 0)\n      posix::Close(write_fd_);\n  }\n\n  const std::string& file() const { return file_; }\n  int line() const { return line_; }\n  int index() const { return index_; }\n  int write_fd() const { return write_fd_; }\n\n private:\n  std::string file_;\n  int line_;\n  int index_;\n  int write_fd_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag);\n};\n\n// Returns a newly created InternalRunDeathTestFlag object with fields\n// initialized from the GTEST_FLAG(internal_run_death_test) flag if\n// the flag is specified; otherwise returns NULL.\nInternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();\n\n#else  // GTEST_HAS_DEATH_TEST\n\n// This macro is used for implementing macros such as\n// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where\n// death tests are not supported. Those macros must compile on such systems\n// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on\n// systems that support death tests. This allows one to write such a macro\n// on a system that does not support death tests and be sure that it will\n// compile on a death-test supporting system.\n//\n// Parameters:\n//   statement -  A statement that a macro such as EXPECT_DEATH would test\n//                for program termination. This macro has to make sure this\n//                statement is compiled but not executed, to ensure that\n//                EXPECT_DEATH_IF_SUPPORTED compiles with a certain\n//                parameter iff EXPECT_DEATH compiles with it.\n//   regex     -  A regex that a macro such as EXPECT_DEATH would use to test\n//                the output of statement.  This parameter has to be\n//                compiled but not evaluated by this macro, to ensure that\n//                this macro only accepts expressions that a macro such as\n//                EXPECT_DEATH would accept.\n//   terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED\n//                and a return statement for ASSERT_DEATH_IF_SUPPORTED.\n//                This ensures that ASSERT_DEATH_IF_SUPPORTED will not\n//                compile inside functions where ASSERT_DEATH doesn't\n//                compile.\n//\n//  The branch that has an always false condition is used to ensure that\n//  statement and regex are compiled (and thus syntactically correct) but\n//  never executed. The unreachable code macro protects the terminator\n//  statement from generating an 'unreachable code' warning in case\n//  statement unconditionally returns or throws. The Message constructor at\n//  the end allows the syntax of streaming additional messages into the\n//  macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.\n# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \\\n    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n    if (::testing::internal::AlwaysTrue()) { \\\n      GTEST_LOG_(WARNING) \\\n          << \"Death tests are not supported on this platform.\\n\" \\\n          << \"Statement '\" #statement \"' cannot be verified.\"; \\\n    } else if (::testing::internal::AlwaysFalse()) { \\\n      ::testing::internal::RE::PartialMatch(\".*\", (regex)); \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n      terminator; \\\n    } else \\\n      ::testing::Message()\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-filepath.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: keith.ray@gmail.com (Keith Ray)\n//\n// Google Test filepath utilities\n//\n// This header file declares classes and functions used internally by\n// Google Test.  They are subject to change without notice.\n//\n// This file is #included in <gtest/internal/gtest-internal.h>.\n// Do not include this header file separately!\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n\n#include \"gtest/internal/gtest-string.h\"\n\nnamespace testing {\nnamespace internal {\n\n// FilePath - a class for file and directory pathname manipulation which\n// handles platform-specific conventions (like the pathname separator).\n// Used for helper functions for naming files in a directory for xml output.\n// Except for Set methods, all methods are const or static, which provides an\n// \"immutable value object\" -- useful for peace of mind.\n// A FilePath with a value ending in a path separator (\"like/this/\") represents\n// a directory, otherwise it is assumed to represent a file. In either case,\n// it may or may not represent an actual file or directory in the file system.\n// Names are NOT checked for syntax correctness -- no checking for illegal\n// characters, malformed paths, etc.\n\nclass GTEST_API_ FilePath {\n public:\n  FilePath() : pathname_(\"\") { }\n  FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { }\n\n  explicit FilePath(const std::string& pathname) : pathname_(pathname) {\n    Normalize();\n  }\n\n  FilePath& operator=(const FilePath& rhs) {\n    Set(rhs);\n    return *this;\n  }\n\n  void Set(const FilePath& rhs) {\n    pathname_ = rhs.pathname_;\n  }\n\n  const std::string& string() const { return pathname_; }\n  const char* c_str() const { return pathname_.c_str(); }\n\n  // Returns the current working directory, or \"\" if unsuccessful.\n  static FilePath GetCurrentDir();\n\n  // Given directory = \"dir\", base_name = \"test\", number = 0,\n  // extension = \"xml\", returns \"dir/test.xml\". If number is greater\n  // than zero (e.g., 12), returns \"dir/test_12.xml\".\n  // On Windows platform, uses \\ as the separator rather than /.\n  static FilePath MakeFileName(const FilePath& directory,\n                               const FilePath& base_name,\n                               int number,\n                               const char* extension);\n\n  // Given directory = \"dir\", relative_path = \"test.xml\",\n  // returns \"dir/test.xml\".\n  // On Windows, uses \\ as the separator rather than /.\n  static FilePath ConcatPaths(const FilePath& directory,\n                              const FilePath& relative_path);\n\n  // Returns a pathname for a file that does not currently exist. The pathname\n  // will be directory/base_name.extension or\n  // directory/base_name_<number>.extension if directory/base_name.extension\n  // already exists. The number will be incremented until a pathname is found\n  // that does not already exist.\n  // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.\n  // There could be a race condition if two or more processes are calling this\n  // function at the same time -- they could both pick the same filename.\n  static FilePath GenerateUniqueFileName(const FilePath& directory,\n                                         const FilePath& base_name,\n                                         const char* extension);\n\n  // Returns true iff the path is \"\".\n  bool IsEmpty() const { return pathname_.empty(); }\n\n  // If input name has a trailing separator character, removes it and returns\n  // the name, otherwise return the name string unmodified.\n  // On Windows platform, uses \\ as the separator, other platforms use /.\n  FilePath RemoveTrailingPathSeparator() const;\n\n  // Returns a copy of the FilePath with the directory part removed.\n  // Example: FilePath(\"path/to/file\").RemoveDirectoryName() returns\n  // FilePath(\"file\"). If there is no directory part (\"just_a_file\"), it returns\n  // the FilePath unmodified. If there is no file part (\"just_a_dir/\") it\n  // returns an empty FilePath (\"\").\n  // On Windows platform, '\\' is the path separator, otherwise it is '/'.\n  FilePath RemoveDirectoryName() const;\n\n  // RemoveFileName returns the directory path with the filename removed.\n  // Example: FilePath(\"path/to/file\").RemoveFileName() returns \"path/to/\".\n  // If the FilePath is \"a_file\" or \"/a_file\", RemoveFileName returns\n  // FilePath(\"./\") or, on Windows, FilePath(\".\\\\\"). If the filepath does\n  // not have a file, like \"just/a/dir/\", it returns the FilePath unmodified.\n  // On Windows platform, '\\' is the path separator, otherwise it is '/'.\n  FilePath RemoveFileName() const;\n\n  // Returns a copy of the FilePath with the case-insensitive extension removed.\n  // Example: FilePath(\"dir/file.exe\").RemoveExtension(\"EXE\") returns\n  // FilePath(\"dir/file\"). If a case-insensitive extension is not\n  // found, returns a copy of the original FilePath.\n  FilePath RemoveExtension(const char* extension) const;\n\n  // Creates directories so that path exists. Returns true if successful or if\n  // the directories already exist; returns false if unable to create\n  // directories for any reason. Will also return false if the FilePath does\n  // not represent a directory (that is, it doesn't end with a path separator).\n  bool CreateDirectoriesRecursively() const;\n\n  // Create the directory so that path exists. Returns true if successful or\n  // if the directory already exists; returns false if unable to create the\n  // directory for any reason, including if the parent directory does not\n  // exist. Not named \"CreateDirectory\" because that's a macro on Windows.\n  bool CreateFolder() const;\n\n  // Returns true if FilePath describes something in the file-system,\n  // either a file, directory, or whatever, and that something exists.\n  bool FileOrDirectoryExists() const;\n\n  // Returns true if pathname describes a directory in the file-system\n  // that exists.\n  bool DirectoryExists() const;\n\n  // Returns true if FilePath ends with a path separator, which indicates that\n  // it is intended to represent a directory. Returns false otherwise.\n  // This does NOT check that a directory (or file) actually exists.\n  bool IsDirectory() const;\n\n  // Returns true if pathname describes a root directory. (Windows has one\n  // root directory per disk drive.)\n  bool IsRootDirectory() const;\n\n  // Returns true if pathname describes an absolute path.\n  bool IsAbsolutePath() const;\n\n private:\n  // Replaces multiple consecutive separators with a single separator.\n  // For example, \"bar///foo\" becomes \"bar/foo\". Does not eliminate other\n  // redundancies that might be in a pathname involving \".\" or \"..\".\n  //\n  // A pathname with multiple consecutive separators may occur either through\n  // user error or as a result of some scripts or APIs that generate a pathname\n  // with a trailing separator. On other platforms the same API or script\n  // may NOT generate a pathname with a trailing \"/\". Then elsewhere that\n  // pathname may have another \"/\" and pathname components added to it,\n  // without checking for the separator already being there.\n  // The script language and operating system may allow paths like \"foo//bar\"\n  // but some of the functions in FilePath will not handle that correctly. In\n  // particular, RemoveTrailingPathSeparator() only removes one separator, and\n  // it is called in CreateDirectoriesRecursively() assuming that it will change\n  // a pathname from directory syntax (trailing separator) to filename syntax.\n  //\n  // On Windows this method also replaces the alternate path separator '/' with\n  // the primary path separator '\\\\', so that for example \"bar\\\\/\\\\foo\" becomes\n  // \"bar\\\\foo\".\n\n  void Normalize();\n\n  // Returns a pointer to the last occurence of a valid path separator in\n  // the FilePath. On Windows, for example, both '/' and '\\' are valid path\n  // separators. Returns NULL if no path separator was found.\n  const char* FindLastPathSeparator() const;\n\n  std::string pathname_;\n};  // class FilePath\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-internal.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file declares functions and macros used internally by\n// Google Test.  They are subject to change without notice.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_OS_LINUX\n# include <stdlib.h>\n# include <sys/types.h>\n# include <sys/wait.h>\n# include <unistd.h>\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_HAS_EXCEPTIONS\n# include <stdexcept>\n#endif\n\n#include <ctype.h>\n#include <string.h>\n#include <iomanip>\n#include <limits>\n#include <set>\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-string.h\"\n#include \"gtest/internal/gtest-filepath.h\"\n#include \"gtest/internal/gtest-type-util.h\"\n\n// Due to C++ preprocessor weirdness, we need double indirection to\n// concatenate two tokens when one of them is __LINE__.  Writing\n//\n//   foo ## __LINE__\n//\n// will result in the token foo__LINE__, instead of foo followed by\n// the current line number.  For more details, see\n// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6\n#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)\n#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar\n\nclass ProtocolMessage;\nnamespace proto2 { class Message; }\n\nnamespace testing {\n\n// Forward declarations.\n\nclass AssertionResult;                 // Result of an assertion.\nclass Message;                         // Represents a failure message.\nclass Test;                            // Represents a test.\nclass TestInfo;                        // Information about a test.\nclass TestPartResult;                  // Result of a test part.\nclass UnitTest;                        // A collection of test cases.\n\ntemplate <typename T>\n::std::string PrintToString(const T& value);\n\nnamespace internal {\n\nstruct TraceInfo;                      // Information about a trace point.\nclass ScopedTrace;                     // Implements scoped trace.\nclass TestInfoImpl;                    // Opaque implementation of TestInfo\nclass UnitTestImpl;                    // Opaque implementation of UnitTest\n\n// How many times InitGoogleTest() has been called.\nGTEST_API_ extern int g_init_gtest_count;\n\n// The text used in failure messages to indicate the start of the\n// stack trace.\nGTEST_API_ extern const char kStackTraceMarker[];\n\n// Two overloaded helpers for checking at compile time whether an\n// expression is a null pointer literal (i.e. NULL or any 0-valued\n// compile-time integral constant).  Their return values have\n// different sizes, so we can use sizeof() to test which version is\n// picked by the compiler.  These helpers have no implementations, as\n// we only need their signatures.\n//\n// Given IsNullLiteralHelper(x), the compiler will pick the first\n// version if x can be implicitly converted to Secret*, and pick the\n// second version otherwise.  Since Secret is a secret and incomplete\n// type, the only expression a user can write that has type Secret* is\n// a null pointer literal.  Therefore, we know that x is a null\n// pointer literal if and only if the first version is picked by the\n// compiler.\nchar IsNullLiteralHelper(Secret* p);\nchar (&IsNullLiteralHelper(...))[2];  // NOLINT\n\n// A compile-time bool constant that is true if and only if x is a\n// null pointer literal (i.e. NULL or any 0-valued compile-time\n// integral constant).\n#ifdef GTEST_ELLIPSIS_NEEDS_POD_\n// We lose support for NULL detection where the compiler doesn't like\n// passing non-POD classes through ellipsis (...).\n# define GTEST_IS_NULL_LITERAL_(x) false\n#else\n# define GTEST_IS_NULL_LITERAL_(x) \\\n    (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)\n#endif  // GTEST_ELLIPSIS_NEEDS_POD_\n\n// Appends the user-supplied message to the Google-Test-generated message.\nGTEST_API_ std::string AppendUserMessage(\n    const std::string& gtest_msg, const Message& user_msg);\n\n#if GTEST_HAS_EXCEPTIONS\n\n// This exception is thrown by (and only by) a failed Google Test\n// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions\n// are enabled).  We derive it from std::runtime_error, which is for\n// errors presumably detectable only at run time.  Since\n// std::runtime_error inherits from std::exception, many testing\n// frameworks know how to extract and print the message inside it.\nclass GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {\n public:\n  explicit GoogleTestFailureException(const TestPartResult& failure);\n};\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// A helper class for creating scoped traces in user programs.\nclass GTEST_API_ ScopedTrace {\n public:\n  // The c'tor pushes the given source file location and message onto\n  // a trace stack maintained by Google Test.\n  ScopedTrace(const char* file, int line, const Message& message);\n\n  // The d'tor pops the info pushed by the c'tor.\n  //\n  // Note that the d'tor is not virtual in order to be efficient.\n  // Don't inherit from ScopedTrace!\n  ~ScopedTrace();\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace);\n} GTEST_ATTRIBUTE_UNUSED_;  // A ScopedTrace object does its job in its\n                            // c'tor and d'tor.  Therefore it doesn't\n                            // need to be used otherwise.\n\n// Constructs and returns the message for an equality assertion\n// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.\n//\n// The first four parameters are the expressions used in the assertion\n// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)\n// where foo is 5 and bar is 6, we have:\n//\n//   expected_expression: \"foo\"\n//   actual_expression:   \"bar\"\n//   expected_value:      \"5\"\n//   actual_value:        \"6\"\n//\n// The ignoring_case parameter is true iff the assertion is a\n// *_STRCASEEQ*.  When it's true, the string \" (ignoring case)\" will\n// be inserted into the message.\nGTEST_API_ AssertionResult EqFailure(const char* expected_expression,\n                                     const char* actual_expression,\n                                     const std::string& expected_value,\n                                     const std::string& actual_value,\n                                     bool ignoring_case);\n\n// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.\nGTEST_API_ std::string GetBoolAssertionFailureMessage(\n    const AssertionResult& assertion_result,\n    const char* expression_text,\n    const char* actual_predicate_value,\n    const char* expected_predicate_value);\n\n// This template class represents an IEEE floating-point number\n// (either single-precision or double-precision, depending on the\n// template parameters).\n//\n// The purpose of this class is to do more sophisticated number\n// comparison.  (Due to round-off error, etc, it's very unlikely that\n// two floating-points will be equal exactly.  Hence a naive\n// comparison by the == operation often doesn't work.)\n//\n// Format of IEEE floating-point:\n//\n//   The most-significant bit being the leftmost, an IEEE\n//   floating-point looks like\n//\n//     sign_bit exponent_bits fraction_bits\n//\n//   Here, sign_bit is a single bit that designates the sign of the\n//   number.\n//\n//   For float, there are 8 exponent bits and 23 fraction bits.\n//\n//   For double, there are 11 exponent bits and 52 fraction bits.\n//\n//   More details can be found at\n//   http://en.wikipedia.org/wiki/IEEE_floating-point_standard.\n//\n// Template parameter:\n//\n//   RawType: the raw floating-point type (either float or double)\ntemplate <typename RawType>\nclass FloatingPoint {\n public:\n  // Defines the unsigned integer type that has the same size as the\n  // floating point number.\n  typedef typename TypeWithSize<sizeof(RawType)>::UInt Bits;\n\n  // Constants.\n\n  // # of bits in a number.\n  static const size_t kBitCount = 8*sizeof(RawType);\n\n  // # of fraction bits in a number.\n  static const size_t kFractionBitCount =\n    std::numeric_limits<RawType>::digits - 1;\n\n  // # of exponent bits in a number.\n  static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;\n\n  // The mask for the sign bit.\n  static const Bits kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1);\n\n  // The mask for the fraction bits.\n  static const Bits kFractionBitMask =\n    ~static_cast<Bits>(0) >> (kExponentBitCount + 1);\n\n  // The mask for the exponent bits.\n  static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);\n\n  // How many ULP's (Units in the Last Place) we want to tolerate when\n  // comparing two numbers.  The larger the value, the more error we\n  // allow.  A 0 value means that two numbers must be exactly the same\n  // to be considered equal.\n  //\n  // The maximum error of a single floating-point operation is 0.5\n  // units in the last place.  On Intel CPU's, all floating-point\n  // calculations are done with 80-bit precision, while double has 64\n  // bits.  Therefore, 4 should be enough for ordinary use.\n  //\n  // See the following article for more details on ULP:\n  // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/\n  static const size_t kMaxUlps = 4;\n\n  // Constructs a FloatingPoint from a raw floating-point number.\n  //\n  // On an Intel CPU, passing a non-normalized NAN (Not a Number)\n  // around may change its bits, although the new value is guaranteed\n  // to be also a NAN.  Therefore, don't expect this constructor to\n  // preserve the bits in x when x is a NAN.\n  explicit FloatingPoint(const RawType& x) { u_.value_ = x; }\n\n  // Static methods\n\n  // Reinterprets a bit pattern as a floating-point number.\n  //\n  // This function is needed to test the AlmostEquals() method.\n  static RawType ReinterpretBits(const Bits bits) {\n    FloatingPoint fp(0);\n    fp.u_.bits_ = bits;\n    return fp.u_.value_;\n  }\n\n  // Returns the floating-point number that represent positive infinity.\n  static RawType Infinity() {\n    return ReinterpretBits(kExponentBitMask);\n  }\n\n  // Non-static methods\n\n  // Returns the bits that represents this number.\n  const Bits &bits() const { return u_.bits_; }\n\n  // Returns the exponent bits of this number.\n  Bits exponent_bits() const { return kExponentBitMask & u_.bits_; }\n\n  // Returns the fraction bits of this number.\n  Bits fraction_bits() const { return kFractionBitMask & u_.bits_; }\n\n  // Returns the sign bit of this number.\n  Bits sign_bit() const { return kSignBitMask & u_.bits_; }\n\n  // Returns true iff this is NAN (not a number).\n  bool is_nan() const {\n    // It's a NAN if the exponent bits are all ones and the fraction\n    // bits are not entirely zeros.\n    return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);\n  }\n\n  // Returns true iff this number is at most kMaxUlps ULP's away from\n  // rhs.  In particular, this function:\n  //\n  //   - returns false if either number is (or both are) NAN.\n  //   - treats really large numbers as almost equal to infinity.\n  //   - thinks +0.0 and -0.0 are 0 DLP's apart.\n  bool AlmostEquals(const FloatingPoint& rhs) const {\n    // The IEEE standard says that any comparison operation involving\n    // a NAN must return false.\n    if (is_nan() || rhs.is_nan()) return false;\n\n    return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)\n        <= kMaxUlps;\n  }\n\n private:\n  // The data type used to store the actual floating-point number.\n  union FloatingPointUnion {\n    RawType value_;  // The raw floating-point number.\n    Bits bits_;      // The bits that represent the number.\n  };\n\n  // Converts an integer from the sign-and-magnitude representation to\n  // the biased representation.  More precisely, let N be 2 to the\n  // power of (kBitCount - 1), an integer x is represented by the\n  // unsigned number x + N.\n  //\n  // For instance,\n  //\n  //   -N + 1 (the most negative number representable using\n  //          sign-and-magnitude) is represented by 1;\n  //   0      is represented by N; and\n  //   N - 1  (the biggest number representable using\n  //          sign-and-magnitude) is represented by 2N - 1.\n  //\n  // Read http://en.wikipedia.org/wiki/Signed_number_representations\n  // for more details on signed number representations.\n  static Bits SignAndMagnitudeToBiased(const Bits &sam) {\n    if (kSignBitMask & sam) {\n      // sam represents a negative number.\n      return ~sam + 1;\n    } else {\n      // sam represents a positive number.\n      return kSignBitMask | sam;\n    }\n  }\n\n  // Given two numbers in the sign-and-magnitude representation,\n  // returns the distance between them as an unsigned number.\n  static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1,\n                                                     const Bits &sam2) {\n    const Bits biased1 = SignAndMagnitudeToBiased(sam1);\n    const Bits biased2 = SignAndMagnitudeToBiased(sam2);\n    return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);\n  }\n\n  FloatingPointUnion u_;\n};\n\n// Typedefs the instances of the FloatingPoint template class that we\n// care to use.\ntypedef FloatingPoint<float> Float;\ntypedef FloatingPoint<double> Double;\n\n// In order to catch the mistake of putting tests that use different\n// test fixture classes in the same test case, we need to assign\n// unique IDs to fixture classes and compare them.  The TypeId type is\n// used to hold such IDs.  The user should treat TypeId as an opaque\n// type: the only operation allowed on TypeId values is to compare\n// them for equality using the == operator.\ntypedef const void* TypeId;\n\ntemplate <typename T>\nclass TypeIdHelper {\n public:\n  // dummy_ must not have a const type.  Otherwise an overly eager\n  // compiler (e.g. MSVC 7.1 & 8.0) may try to merge\n  // TypeIdHelper<T>::dummy_ for different Ts as an \"optimization\".\n  static bool dummy_;\n};\n\ntemplate <typename T>\nbool TypeIdHelper<T>::dummy_ = false;\n\n// GetTypeId<T>() returns the ID of type T.  Different values will be\n// returned for different types.  Calling the function twice with the\n// same type argument is guaranteed to return the same ID.\ntemplate <typename T>\nTypeId GetTypeId() {\n  // The compiler is required to allocate a different\n  // TypeIdHelper<T>::dummy_ variable for each T used to instantiate\n  // the template.  Therefore, the address of dummy_ is guaranteed to\n  // be unique.\n  return &(TypeIdHelper<T>::dummy_);\n}\n\n// Returns the type ID of ::testing::Test.  Always call this instead\n// of GetTypeId< ::testing::Test>() to get the type ID of\n// ::testing::Test, as the latter may give the wrong result due to a\n// suspected linker bug when compiling Google Test as a Mac OS X\n// framework.\nGTEST_API_ TypeId GetTestTypeId();\n\n// Defines the abstract factory interface that creates instances\n// of a Test object.\nclass TestFactoryBase {\n public:\n  virtual ~TestFactoryBase() {}\n\n  // Creates a test instance to run. The instance is both created and destroyed\n  // within TestInfoImpl::Run()\n  virtual Test* CreateTest() = 0;\n\n protected:\n  TestFactoryBase() {}\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase);\n};\n\n// This class provides implementation of TeastFactoryBase interface.\n// It is used in TEST and TEST_F macros.\ntemplate <class TestClass>\nclass TestFactoryImpl : public TestFactoryBase {\n public:\n  virtual Test* CreateTest() { return new TestClass; }\n};\n\n#if GTEST_OS_WINDOWS\n\n// Predicate-formatters for implementing the HRESULT checking macros\n// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}\n// We pass a long instead of HRESULT to avoid causing an\n// include dependency for the HRESULT type.\nGTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr,\n                                            long hr);  // NOLINT\nGTEST_API_ AssertionResult IsHRESULTFailure(const char* expr,\n                                            long hr);  // NOLINT\n\n#endif  // GTEST_OS_WINDOWS\n\n// Types of SetUpTestCase() and TearDownTestCase() functions.\ntypedef void (*SetUpTestCaseFunc)();\ntypedef void (*TearDownTestCaseFunc)();\n\n// Creates a new TestInfo object and registers it with Google Test;\n// returns the created object.\n//\n// Arguments:\n//\n//   test_case_name:   name of the test case\n//   name:             name of the test\n//   type_param        the name of the test's type parameter, or NULL if\n//                     this is not a typed or a type-parameterized test.\n//   value_param       text representation of the test's value parameter,\n//                     or NULL if this is not a type-parameterized test.\n//   fixture_class_id: ID of the test fixture class\n//   set_up_tc:        pointer to the function that sets up the test case\n//   tear_down_tc:     pointer to the function that tears down the test case\n//   factory:          pointer to the factory that creates a test object.\n//                     The newly created TestInfo instance will assume\n//                     ownership of the factory object.\nGTEST_API_ TestInfo* MakeAndRegisterTestInfo(\n    const char* test_case_name,\n    const char* name,\n    const char* type_param,\n    const char* value_param,\n    TypeId fixture_class_id,\n    SetUpTestCaseFunc set_up_tc,\n    TearDownTestCaseFunc tear_down_tc,\n    TestFactoryBase* factory);\n\n// If *pstr starts with the given prefix, modifies *pstr to be right\n// past the prefix and returns true; otherwise leaves *pstr unchanged\n// and returns false.  None of pstr, *pstr, and prefix can be NULL.\nGTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr);\n\n#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n// State of the definition of a type-parameterized test case.\nclass GTEST_API_ TypedTestCasePState {\n public:\n  TypedTestCasePState() : registered_(false) {}\n\n  // Adds the given test name to defined_test_names_ and return true\n  // if the test case hasn't been registered; otherwise aborts the\n  // program.\n  bool AddTestName(const char* file, int line, const char* case_name,\n                   const char* test_name) {\n    if (registered_) {\n      fprintf(stderr, \"%s Test %s must be defined before \"\n              \"REGISTER_TYPED_TEST_CASE_P(%s, ...).\\n\",\n              FormatFileLocation(file, line).c_str(), test_name, case_name);\n      fflush(stderr);\n      posix::Abort();\n    }\n    defined_test_names_.insert(test_name);\n    return true;\n  }\n\n  // Verifies that registered_tests match the test names in\n  // defined_test_names_; returns registered_tests if successful, or\n  // aborts the program otherwise.\n  const char* VerifyRegisteredTestNames(\n      const char* file, int line, const char* registered_tests);\n\n private:\n  bool registered_;\n  ::std::set<const char*> defined_test_names_;\n};\n\n// Skips to the first non-space char after the first comma in 'str';\n// returns NULL if no comma is found in 'str'.\ninline const char* SkipComma(const char* str) {\n  const char* comma = strchr(str, ',');\n  if (comma == NULL) {\n    return NULL;\n  }\n  while (IsSpace(*(++comma))) {}\n  return comma;\n}\n\n// Returns the prefix of 'str' before the first comma in it; returns\n// the entire string if it contains no comma.\ninline std::string GetPrefixUntilComma(const char* str) {\n  const char* comma = strchr(str, ',');\n  return comma == NULL ? str : std::string(str, comma);\n}\n\n// TypeParameterizedTest<Fixture, TestSel, Types>::Register()\n// registers a list of type-parameterized tests with Google Test.  The\n// return value is insignificant - we just need to return something\n// such that we can call this function in a namespace scope.\n//\n// Implementation note: The GTEST_TEMPLATE_ macro declares a template\n// template parameter.  It's defined in gtest-type-util.h.\ntemplate <GTEST_TEMPLATE_ Fixture, class TestSel, typename Types>\nclass TypeParameterizedTest {\n public:\n  // 'index' is the index of the test in the type list 'Types'\n  // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase,\n  // Types).  Valid values for 'index' are [0, N - 1] where N is the\n  // length of Types.\n  static bool Register(const char* prefix, const char* case_name,\n                       const char* test_names, int index) {\n    typedef typename Types::Head Type;\n    typedef Fixture<Type> FixtureClass;\n    typedef typename GTEST_BIND_(TestSel, Type) TestClass;\n\n    // First, registers the first type-parameterized test in the type\n    // list.\n    MakeAndRegisterTestInfo(\n        (std::string(prefix) + (prefix[0] == '\\0' ? \"\" : \"/\") + case_name + \"/\"\n         + StreamableToString(index)).c_str(),\n        GetPrefixUntilComma(test_names).c_str(),\n        GetTypeName<Type>().c_str(),\n        NULL,  // No value parameter.\n        GetTypeId<FixtureClass>(),\n        TestClass::SetUpTestCase,\n        TestClass::TearDownTestCase,\n        new TestFactoryImpl<TestClass>);\n\n    // Next, recurses (at compile time) with the tail of the type list.\n    return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail>\n        ::Register(prefix, case_name, test_names, index + 1);\n  }\n};\n\n// The base case for the compile time recursion.\ntemplate <GTEST_TEMPLATE_ Fixture, class TestSel>\nclass TypeParameterizedTest<Fixture, TestSel, Types0> {\n public:\n  static bool Register(const char* /*prefix*/, const char* /*case_name*/,\n                       const char* /*test_names*/, int /*index*/) {\n    return true;\n  }\n};\n\n// TypeParameterizedTestCase<Fixture, Tests, Types>::Register()\n// registers *all combinations* of 'Tests' and 'Types' with Google\n// Test.  The return value is insignificant - we just need to return\n// something such that we can call this function in a namespace scope.\ntemplate <GTEST_TEMPLATE_ Fixture, typename Tests, typename Types>\nclass TypeParameterizedTestCase {\n public:\n  static bool Register(const char* prefix, const char* case_name,\n                       const char* test_names) {\n    typedef typename Tests::Head Head;\n\n    // First, register the first test in 'Test' for each type in 'Types'.\n    TypeParameterizedTest<Fixture, Head, Types>::Register(\n        prefix, case_name, test_names, 0);\n\n    // Next, recurses (at compile time) with the tail of the test list.\n    return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types>\n        ::Register(prefix, case_name, SkipComma(test_names));\n  }\n};\n\n// The base case for the compile time recursion.\ntemplate <GTEST_TEMPLATE_ Fixture, typename Types>\nclass TypeParameterizedTestCase<Fixture, Templates0, Types> {\n public:\n  static bool Register(const char* /*prefix*/, const char* /*case_name*/,\n                       const char* /*test_names*/) {\n    return true;\n  }\n};\n\n#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in\n// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.\nGTEST_API_ std::string GetCurrentOsStackTraceExceptTop(\n    UnitTest* unit_test, int skip_count);\n\n// Helpers for suppressing warnings on unreachable code or constant\n// condition.\n\n// Always returns true.\nGTEST_API_ bool AlwaysTrue();\n\n// Always returns false.\ninline bool AlwaysFalse() { return !AlwaysTrue(); }\n\n// Helper for suppressing false warning from Clang on a const char*\n// variable declared in a conditional expression always being NULL in\n// the else branch.\nstruct GTEST_API_ ConstCharPtr {\n  ConstCharPtr(const char* str) : value(str) {}\n  operator bool() const { return true; }\n  const char* value;\n};\n\n// A simple Linear Congruential Generator for generating random\n// numbers with a uniform distribution.  Unlike rand() and srand(), it\n// doesn't use global state (and therefore can't interfere with user\n// code).  Unlike rand_r(), it's portable.  An LCG isn't very random,\n// but it's good enough for our purposes.\nclass GTEST_API_ Random {\n public:\n  static const UInt32 kMaxRange = 1u << 31;\n\n  explicit Random(UInt32 seed) : state_(seed) {}\n\n  void Reseed(UInt32 seed) { state_ = seed; }\n\n  // Generates a random number from [0, range).  Crashes if 'range' is\n  // 0 or greater than kMaxRange.\n  UInt32 Generate(UInt32 range);\n\n private:\n  UInt32 state_;\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);\n};\n\n// Defining a variable of type CompileAssertTypesEqual<T1, T2> will cause a\n// compiler error iff T1 and T2 are different types.\ntemplate <typename T1, typename T2>\nstruct CompileAssertTypesEqual;\n\ntemplate <typename T>\nstruct CompileAssertTypesEqual<T, T> {\n};\n\n// Removes the reference from a type if it is a reference type,\n// otherwise leaves it unchanged.  This is the same as\n// tr1::remove_reference, which is not widely available yet.\ntemplate <typename T>\nstruct RemoveReference { typedef T type; };  // NOLINT\ntemplate <typename T>\nstruct RemoveReference<T&> { typedef T type; };  // NOLINT\n\n// A handy wrapper around RemoveReference that works when the argument\n// T depends on template parameters.\n#define GTEST_REMOVE_REFERENCE_(T) \\\n    typename ::testing::internal::RemoveReference<T>::type\n\n// Removes const from a type if it is a const type, otherwise leaves\n// it unchanged.  This is the same as tr1::remove_const, which is not\n// widely available yet.\ntemplate <typename T>\nstruct RemoveConst { typedef T type; };  // NOLINT\ntemplate <typename T>\nstruct RemoveConst<const T> { typedef T type; };  // NOLINT\n\n// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above\n// definition to fail to remove the const in 'const int[3]' and 'const\n// char[3][4]'.  The following specialization works around the bug.\ntemplate <typename T, size_t N>\nstruct RemoveConst<const T[N]> {\n  typedef typename RemoveConst<T>::type type[N];\n};\n\n#if defined(_MSC_VER) && _MSC_VER < 1400\n// This is the only specialization that allows VC++ 7.1 to remove const in\n// 'const int[3] and 'const int[3][4]'.  However, it causes trouble with GCC\n// and thus needs to be conditionally compiled.\ntemplate <typename T, size_t N>\nstruct RemoveConst<T[N]> {\n  typedef typename RemoveConst<T>::type type[N];\n};\n#endif\n\n// A handy wrapper around RemoveConst that works when the argument\n// T depends on template parameters.\n#define GTEST_REMOVE_CONST_(T) \\\n    typename ::testing::internal::RemoveConst<T>::type\n\n// Turns const U&, U&, const U, and U all into U.\n#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \\\n    GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))\n\n// Adds reference to a type if it is not a reference type,\n// otherwise leaves it unchanged.  This is the same as\n// tr1::add_reference, which is not widely available yet.\ntemplate <typename T>\nstruct AddReference { typedef T& type; };  // NOLINT\ntemplate <typename T>\nstruct AddReference<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper around AddReference that works when the argument T\n// depends on template parameters.\n#define GTEST_ADD_REFERENCE_(T) \\\n    typename ::testing::internal::AddReference<T>::type\n\n// Adds a reference to const on top of T as necessary.  For example,\n// it transforms\n//\n//   char         ==> const char&\n//   const char   ==> const char&\n//   char&        ==> const char&\n//   const char&  ==> const char&\n//\n// The argument T must depend on some template parameters.\n#define GTEST_REFERENCE_TO_CONST_(T) \\\n    GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))\n\n// ImplicitlyConvertible<From, To>::value is a compile-time bool\n// constant that's true iff type From can be implicitly converted to\n// type To.\ntemplate <typename From, typename To>\nclass ImplicitlyConvertible {\n private:\n  // We need the following helper functions only for their types.\n  // They have no implementations.\n\n  // MakeFrom() is an expression whose type is From.  We cannot simply\n  // use From(), as the type From may not have a public default\n  // constructor.\n  static From MakeFrom();\n\n  // These two functions are overloaded.  Given an expression\n  // Helper(x), the compiler will pick the first version if x can be\n  // implicitly converted to type To; otherwise it will pick the\n  // second version.\n  //\n  // The first version returns a value of size 1, and the second\n  // version returns a value of size 2.  Therefore, by checking the\n  // size of Helper(x), which can be done at compile time, we can tell\n  // which version of Helper() is used, and hence whether x can be\n  // implicitly converted to type To.\n  static char Helper(To);\n  static char (&Helper(...))[2];  // NOLINT\n\n  // We have to put the 'public' section after the 'private' section,\n  // or MSVC refuses to compile the code.\n public:\n  // MSVC warns about implicitly converting from double to int for\n  // possible loss of data, so we need to temporarily disable the\n  // warning.\n#ifdef _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4244)  // Temporarily disables warning 4244.\n\n  static const bool value =\n      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;\n# pragma warning(pop)           // Restores the warning state.\n#elif defined(__BORLANDC__)\n  // C++Builder cannot use member overload resolution during template\n  // instantiation.  The simplest workaround is to use its C++0x type traits\n  // functions (C++Builder 2009 and above only).\n  static const bool value = __is_convertible(From, To);\n#else\n  static const bool value =\n      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;\n#endif  // _MSV_VER\n};\ntemplate <typename From, typename To>\nconst bool ImplicitlyConvertible<From, To>::value;\n\n// IsAProtocolMessage<T>::value is a compile-time bool constant that's\n// true iff T is type ProtocolMessage, proto2::Message, or a subclass\n// of those.\ntemplate <typename T>\nstruct IsAProtocolMessage\n    : public bool_constant<\n  ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||\n  ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {\n};\n\n// When the compiler sees expression IsContainerTest<C>(0), if C is an\n// STL-style container class, the first overload of IsContainerTest\n// will be viable (since both C::iterator* and C::const_iterator* are\n// valid types and NULL can be implicitly converted to them).  It will\n// be picked over the second overload as 'int' is a perfect match for\n// the type of argument 0.  If C::iterator or C::const_iterator is not\n// a valid type, the first overload is not viable, and the second\n// overload will be picked.  Therefore, we can determine whether C is\n// a container class by checking the type of IsContainerTest<C>(0).\n// The value of the expression is insignificant.\n//\n// Note that we look for both C::iterator and C::const_iterator.  The\n// reason is that C++ injects the name of a class as a member of the\n// class itself (e.g. you can refer to class iterator as either\n// 'iterator' or 'iterator::iterator').  If we look for C::iterator\n// only, for example, we would mistakenly think that a class named\n// iterator is an STL container.\n//\n// Also note that the simpler approach of overloading\n// IsContainerTest(typename C::const_iterator*) and\n// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.\ntypedef int IsContainer;\ntemplate <class C>\nIsContainer IsContainerTest(int /* dummy */,\n                            typename C::iterator* /* it */ = NULL,\n                            typename C::const_iterator* /* const_it */ = NULL) {\n  return 0;\n}\n\ntypedef char IsNotContainer;\ntemplate <class C>\nIsNotContainer IsContainerTest(long /* dummy */) { return '\\0'; }\n\n// EnableIf<condition>::type is void when 'Cond' is true, and\n// undefined when 'Cond' is false.  To use SFINAE to make a function\n// overload only apply when a particular expression is true, add\n// \"typename EnableIf<expression>::type* = 0\" as the last parameter.\ntemplate<bool> struct EnableIf;\ntemplate<> struct EnableIf<true> { typedef void type; };  // NOLINT\n\n// Utilities for native arrays.\n\n// ArrayEq() compares two k-dimensional native arrays using the\n// elements' operator==, where k can be any integer >= 0.  When k is\n// 0, ArrayEq() degenerates into comparing a single pair of values.\n\ntemplate <typename T, typename U>\nbool ArrayEq(const T* lhs, size_t size, const U* rhs);\n\n// This generic version is used when k is 0.\ntemplate <typename T, typename U>\ninline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; }\n\n// This overload is used when k >= 1.\ntemplate <typename T, typename U, size_t N>\ninline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) {\n  return internal::ArrayEq(lhs, N, rhs);\n}\n\n// This helper reduces code bloat.  If we instead put its logic inside\n// the previous ArrayEq() function, arrays with different sizes would\n// lead to different copies of the template code.\ntemplate <typename T, typename U>\nbool ArrayEq(const T* lhs, size_t size, const U* rhs) {\n  for (size_t i = 0; i != size; i++) {\n    if (!internal::ArrayEq(lhs[i], rhs[i]))\n      return false;\n  }\n  return true;\n}\n\n// Finds the first element in the iterator range [begin, end) that\n// equals elem.  Element may be a native array type itself.\ntemplate <typename Iter, typename Element>\nIter ArrayAwareFind(Iter begin, Iter end, const Element& elem) {\n  for (Iter it = begin; it != end; ++it) {\n    if (internal::ArrayEq(*it, elem))\n      return it;\n  }\n  return end;\n}\n\n// CopyArray() copies a k-dimensional native array using the elements'\n// operator=, where k can be any integer >= 0.  When k is 0,\n// CopyArray() degenerates into copying a single value.\n\ntemplate <typename T, typename U>\nvoid CopyArray(const T* from, size_t size, U* to);\n\n// This generic version is used when k is 0.\ntemplate <typename T, typename U>\ninline void CopyArray(const T& from, U* to) { *to = from; }\n\n// This overload is used when k >= 1.\ntemplate <typename T, typename U, size_t N>\ninline void CopyArray(const T(&from)[N], U(*to)[N]) {\n  internal::CopyArray(from, N, *to);\n}\n\n// This helper reduces code bloat.  If we instead put its logic inside\n// the previous CopyArray() function, arrays with different sizes\n// would lead to different copies of the template code.\ntemplate <typename T, typename U>\nvoid CopyArray(const T* from, size_t size, U* to) {\n  for (size_t i = 0; i != size; i++) {\n    internal::CopyArray(from[i], to + i);\n  }\n}\n\n// The relation between an NativeArray object (see below) and the\n// native array it represents.\nenum RelationToSource {\n  kReference,  // The NativeArray references the native array.\n  kCopy        // The NativeArray makes a copy of the native array and\n               // owns the copy.\n};\n\n// Adapts a native array to a read-only STL-style container.  Instead\n// of the complete STL container concept, this adaptor only implements\n// members useful for Google Mock's container matchers.  New members\n// should be added as needed.  To simplify the implementation, we only\n// support Element being a raw type (i.e. having no top-level const or\n// reference modifier).  It's the client's responsibility to satisfy\n// this requirement.  Element can be an array type itself (hence\n// multi-dimensional arrays are supported).\ntemplate <typename Element>\nclass NativeArray {\n public:\n  // STL-style container typedefs.\n  typedef Element value_type;\n  typedef Element* iterator;\n  typedef const Element* const_iterator;\n\n  // Constructs from a native array.\n  NativeArray(const Element* array, size_t count, RelationToSource relation) {\n    Init(array, count, relation);\n  }\n\n  // Copy constructor.\n  NativeArray(const NativeArray& rhs) {\n    Init(rhs.array_, rhs.size_, rhs.relation_to_source_);\n  }\n\n  ~NativeArray() {\n    // Ensures that the user doesn't instantiate NativeArray with a\n    // const or reference type.\n    static_cast<void>(StaticAssertTypeEqHelper<Element,\n        GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>());\n    if (relation_to_source_ == kCopy)\n      delete[] array_;\n  }\n\n  // STL-style container methods.\n  size_t size() const { return size_; }\n  const_iterator begin() const { return array_; }\n  const_iterator end() const { return array_ + size_; }\n  bool operator==(const NativeArray& rhs) const {\n    return size() == rhs.size() &&\n        ArrayEq(begin(), size(), rhs.begin());\n  }\n\n private:\n  // Initializes this object; makes a copy of the input array if\n  // 'relation' is kCopy.\n  void Init(const Element* array, size_t a_size, RelationToSource relation) {\n    if (relation == kReference) {\n      array_ = array;\n    } else {\n      Element* const copy = new Element[a_size];\n      CopyArray(array, a_size, copy);\n      array_ = copy;\n    }\n    size_ = a_size;\n    relation_to_source_ = relation;\n  }\n\n  const Element* array_;\n  size_t size_;\n  RelationToSource relation_to_source_;\n\n  GTEST_DISALLOW_ASSIGN_(NativeArray);\n};\n\n}  // namespace internal\n}  // namespace testing\n\n#define GTEST_MESSAGE_AT_(file, line, message, result_type) \\\n  ::testing::internal::AssertHelper(result_type, file, line, message) \\\n    = ::testing::Message()\n\n#define GTEST_MESSAGE_(message, result_type) \\\n  GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)\n\n#define GTEST_FATAL_FAILURE_(message) \\\n  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)\n\n#define GTEST_NONFATAL_FAILURE_(message) \\\n  GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)\n\n#define GTEST_SUCCESS_(message) \\\n  GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)\n\n// Suppresses MSVC warnings 4072 (unreachable code) for the code following\n// statement if it returns or throws (or doesn't return or throw in some\n// situations).\n#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \\\n  if (::testing::internal::AlwaysTrue()) { statement; }\n\n#define GTEST_TEST_THROW_(statement, expected_exception, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::ConstCharPtr gtest_msg = \"\") { \\\n    bool gtest_caught_expected = false; \\\n    try { \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n    } \\\n    catch (expected_exception const&) { \\\n      gtest_caught_expected = true; \\\n    } \\\n    catch (...) { \\\n      gtest_msg.value = \\\n          \"Expected: \" #statement \" throws an exception of type \" \\\n          #expected_exception \".\\n  Actual: it throws a different type.\"; \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \\\n    } \\\n    if (!gtest_caught_expected) { \\\n      gtest_msg.value = \\\n          \"Expected: \" #statement \" throws an exception of type \" \\\n          #expected_exception \".\\n  Actual: it throws nothing.\"; \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \\\n    } \\\n  } else \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \\\n      fail(gtest_msg.value)\n\n#define GTEST_TEST_NO_THROW_(statement, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::AlwaysTrue()) { \\\n    try { \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n    } \\\n    catch (...) { \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \\\n    } \\\n  } else \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \\\n      fail(\"Expected: \" #statement \" doesn't throw an exception.\\n\" \\\n           \"  Actual: it throws.\")\n\n#define GTEST_TEST_ANY_THROW_(statement, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::AlwaysTrue()) { \\\n    bool gtest_caught_any = false; \\\n    try { \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n    } \\\n    catch (...) { \\\n      gtest_caught_any = true; \\\n    } \\\n    if (!gtest_caught_any) { \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \\\n    } \\\n  } else \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \\\n      fail(\"Expected: \" #statement \" throws an exception.\\n\" \\\n           \"  Actual: it doesn't.\")\n\n\n// Implements Boolean test assertions such as EXPECT_TRUE. expression can be\n// either a boolean expression or an AssertionResult. text is a textual\n// represenation of expression as it was passed into the EXPECT_TRUE.\n#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (const ::testing::AssertionResult gtest_ar_ = \\\n      ::testing::AssertionResult(expression)) \\\n    ; \\\n  else \\\n    fail(::testing::internal::GetBoolAssertionFailureMessage(\\\n        gtest_ar_, text, #actual, #expected).c_str())\n\n#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  if (::testing::internal::AlwaysTrue()) { \\\n    ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \\\n    if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \\\n    } \\\n  } else \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \\\n      fail(\"Expected: \" #statement \" doesn't generate new fatal \" \\\n           \"failures in the current thread.\\n\" \\\n           \"  Actual: it does.\")\n\n// Expands to the name of the class that implements the given test.\n#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \\\n  test_case_name##_##test_name##_Test\n\n// Helper macro for defining tests.\n#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\\\nclass GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\\\n public:\\\n  GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\\\n private:\\\n  virtual void TestBody();\\\n  static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\\\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(\\\n      GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\\\n};\\\n\\\n::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\\\n  ::test_info_ =\\\n    ::testing::internal::MakeAndRegisterTestInfo(\\\n        #test_case_name, #test_name, NULL, NULL, \\\n        (parent_id), \\\n        parent_class::SetUpTestCase, \\\n        parent_class::TearDownTestCase, \\\n        new ::testing::internal::TestFactoryImpl<\\\n            GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\\\nvoid GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-linked_ptr.h",
    "content": "// Copyright 2003 Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: Dan Egnor (egnor@google.com)\n//\n// A \"smart\" pointer type with reference tracking.  Every pointer to a\n// particular object is kept on a circular linked list.  When the last pointer\n// to an object is destroyed or reassigned, the object is deleted.\n//\n// Used properly, this deletes the object when the last reference goes away.\n// There are several caveats:\n// - Like all reference counting schemes, cycles lead to leaks.\n// - Each smart pointer is actually two pointers (8 bytes instead of 4).\n// - Every time a pointer is assigned, the entire list of pointers to that\n//   object is traversed.  This class is therefore NOT SUITABLE when there\n//   will often be more than two or three pointers to a particular object.\n// - References are only tracked as long as linked_ptr<> objects are copied.\n//   If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS\n//   will happen (double deletion).\n//\n// A good use of this class is storing object references in STL containers.\n// You can safely put linked_ptr<> in a vector<>.\n// Other uses may not be as good.\n//\n// Note: If you use an incomplete type with linked_ptr<>, the class\n// *containing* linked_ptr<> must have a constructor and destructor (even\n// if they do nothing!).\n//\n// Bill Gibbons suggested we use something like this.\n//\n// Thread Safety:\n//   Unlike other linked_ptr implementations, in this implementation\n//   a linked_ptr object is thread-safe in the sense that:\n//     - it's safe to copy linked_ptr objects concurrently,\n//     - it's safe to copy *from* a linked_ptr and read its underlying\n//       raw pointer (e.g. via get()) concurrently, and\n//     - it's safe to write to two linked_ptrs that point to the same\n//       shared object concurrently.\n// TODO(wan@google.com): rename this to safe_linked_ptr to avoid\n// confusion with normal linked_ptr.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n\n#include <stdlib.h>\n#include <assert.h>\n\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\nnamespace internal {\n\n// Protects copying of all linked_ptr objects.\nGTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);\n\n// This is used internally by all instances of linked_ptr<>.  It needs to be\n// a non-template class because different types of linked_ptr<> can refer to\n// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).\n// So, it needs to be possible for different types of linked_ptr to participate\n// in the same circular linked list, so we need a single class type here.\n//\n// DO NOT USE THIS CLASS DIRECTLY YOURSELF.  Use linked_ptr<T>.\nclass linked_ptr_internal {\n public:\n  // Create a new circle that includes only this instance.\n  void join_new() {\n    next_ = this;\n  }\n\n  // Many linked_ptr operations may change p.link_ for some linked_ptr\n  // variable p in the same circle as this object.  Therefore we need\n  // to prevent two such operations from occurring concurrently.\n  //\n  // Note that different types of linked_ptr objects can coexist in a\n  // circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and\n  // linked_ptr<Derived2>).  Therefore we must use a single mutex to\n  // protect all linked_ptr objects.  This can create serious\n  // contention in production code, but is acceptable in a testing\n  // framework.\n\n  // Join an existing circle.\n  void join(linked_ptr_internal const* ptr)\n      GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {\n    MutexLock lock(&g_linked_ptr_mutex);\n\n    linked_ptr_internal const* p = ptr;\n    while (p->next_ != ptr) p = p->next_;\n    p->next_ = this;\n    next_ = ptr;\n  }\n\n  // Leave whatever circle we're part of.  Returns true if we were the\n  // last member of the circle.  Once this is done, you can join() another.\n  bool depart()\n      GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {\n    MutexLock lock(&g_linked_ptr_mutex);\n\n    if (next_ == this) return true;\n    linked_ptr_internal const* p = next_;\n    while (p->next_ != this) p = p->next_;\n    p->next_ = next_;\n    return false;\n  }\n\n private:\n  mutable linked_ptr_internal const* next_;\n};\n\ntemplate <typename T>\nclass linked_ptr {\n public:\n  typedef T element_type;\n\n  // Take over ownership of a raw pointer.  This should happen as soon as\n  // possible after the object is created.\n  explicit linked_ptr(T* ptr = NULL) { capture(ptr); }\n  ~linked_ptr() { depart(); }\n\n  // Copy an existing linked_ptr<>, adding ourselves to the list of references.\n  template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); }\n  linked_ptr(linked_ptr const& ptr) {  // NOLINT\n    assert(&ptr != this);\n    copy(&ptr);\n  }\n\n  // Assignment releases the old value and acquires the new.\n  template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) {\n    depart();\n    copy(&ptr);\n    return *this;\n  }\n\n  linked_ptr& operator=(linked_ptr const& ptr) {\n    if (&ptr != this) {\n      depart();\n      copy(&ptr);\n    }\n    return *this;\n  }\n\n  // Smart pointer members.\n  void reset(T* ptr = NULL) {\n    depart();\n    capture(ptr);\n  }\n  T* get() const { return value_; }\n  T* operator->() const { return value_; }\n  T& operator*() const { return *value_; }\n\n  bool operator==(T* p) const { return value_ == p; }\n  bool operator!=(T* p) const { return value_ != p; }\n  template <typename U>\n  bool operator==(linked_ptr<U> const& ptr) const {\n    return value_ == ptr.get();\n  }\n  template <typename U>\n  bool operator!=(linked_ptr<U> const& ptr) const {\n    return value_ != ptr.get();\n  }\n\n private:\n  template <typename U>\n  friend class linked_ptr;\n\n  T* value_;\n  linked_ptr_internal link_;\n\n  void depart() {\n    if (link_.depart()) delete value_;\n  }\n\n  void capture(T* ptr) {\n    value_ = ptr;\n    link_.join_new();\n  }\n\n  template <typename U> void copy(linked_ptr<U> const* ptr) {\n    value_ = ptr->get();\n    if (value_)\n      link_.join(&ptr->link_);\n    else\n      link_.join_new();\n  }\n};\n\ntemplate<typename T> inline\nbool operator==(T* ptr, const linked_ptr<T>& x) {\n  return ptr == x.get();\n}\n\ntemplate<typename T> inline\nbool operator!=(T* ptr, const linked_ptr<T>& x) {\n  return ptr != x.get();\n}\n\n// A function to convert T* into linked_ptr<T>\n// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation\n// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))\ntemplate <typename T>\nlinked_ptr<T> make_linked_ptr(T* ptr) {\n  return linked_ptr<T>(ptr);\n}\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-param-util-generated.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// Type and function utilities for implementing parameterized tests.\n// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n// Currently Google Test supports at most 50 arguments in Values,\n// and at most 10 arguments in Combine. Please contact\n// googletestframework@googlegroups.com if you need more.\n// Please note that the number of arguments to Combine is limited\n// by the maximum arity of the implementation of tr1::tuple which is\n// currently set at 10.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n\n// scripts/fuse_gtest.py depends on gtest's own header being #included\n// *unconditionally*.  Therefore these #includes cannot be moved\n// inside #if GTEST_HAS_PARAM_TEST.\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nnamespace testing {\n\n// Forward declarations of ValuesIn(), which is implemented in\n// include/gtest/gtest-param-test.h.\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end);\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]);\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container);\n\nnamespace internal {\n\n// Used in the Values() function to provide polymorphic capabilities.\ntemplate <typename T1>\nclass ValueArray1 {\n public:\n  explicit ValueArray1(T1 v1) : v1_(v1) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray1& other);\n\n  const T1 v1_;\n};\n\ntemplate <typename T1, typename T2>\nclass ValueArray2 {\n public:\n  ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray2& other);\n\n  const T1 v1_;\n  const T2 v2_;\n};\n\ntemplate <typename T1, typename T2, typename T3>\nclass ValueArray3 {\n public:\n  ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray3& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nclass ValueArray4 {\n public:\n  ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray4& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nclass ValueArray5 {\n public:\n  ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray5& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nclass ValueArray6 {\n public:\n  ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray6& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nclass ValueArray7 {\n public:\n  ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray7& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nclass ValueArray8 {\n public:\n  ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n      T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray8& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nclass ValueArray9 {\n public:\n  ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,\n      T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray9& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nclass ValueArray10 {\n public:\n  ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray10& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11>\nclass ValueArray11 {\n public:\n  ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray11& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12>\nclass ValueArray12 {\n public:\n  ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray12& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13>\nclass ValueArray13 {\n public:\n  ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray13& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14>\nclass ValueArray14 {\n public:\n  ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray14& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15>\nclass ValueArray15 {\n public:\n  ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray15& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16>\nclass ValueArray16 {\n public:\n  ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray16& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17>\nclass ValueArray17 {\n public:\n  ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,\n      T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray17& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18>\nclass ValueArray18 {\n public:\n  ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray18& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19>\nclass ValueArray19 {\n public:\n  ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray19& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20>\nclass ValueArray20 {\n public:\n  ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray20& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21>\nclass ValueArray21 {\n public:\n  ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray21& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22>\nclass ValueArray22 {\n public:\n  ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray22& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23>\nclass ValueArray23 {\n public:\n  ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray23& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24>\nclass ValueArray24 {\n public:\n  ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray24& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25>\nclass ValueArray25 {\n public:\n  ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,\n      T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray25& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26>\nclass ValueArray26 {\n public:\n  ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray26& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27>\nclass ValueArray27 {\n public:\n  ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray27& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28>\nclass ValueArray28 {\n public:\n  ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray28& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29>\nclass ValueArray29 {\n public:\n  ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray29& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30>\nclass ValueArray30 {\n public:\n  ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray30& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31>\nclass ValueArray31 {\n public:\n  ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray31& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32>\nclass ValueArray32 {\n public:\n  ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray32& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33>\nclass ValueArray33 {\n public:\n  ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,\n      T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray33& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34>\nclass ValueArray34 {\n public:\n  ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray34& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35>\nclass ValueArray35 {\n public:\n  ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),\n      v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray35& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36>\nclass ValueArray36 {\n public:\n  ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),\n      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray36& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37>\nclass ValueArray37 {\n public:\n  ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),\n      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),\n      v36_(v36), v37_(v37) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray37& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38>\nclass ValueArray38 {\n public:\n  ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray38& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39>\nclass ValueArray39 {\n public:\n  ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray39& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40>\nclass ValueArray40 {\n public:\n  ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),\n      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),\n      v40_(v40) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray40& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41>\nclass ValueArray41 {\n public:\n  ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,\n      T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray41& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42>\nclass ValueArray42 {\n public:\n  ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray42& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43>\nclass ValueArray43 {\n public:\n  ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),\n      v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),\n      v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray43& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44>\nclass ValueArray44 {\n public:\n  ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),\n      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),\n      v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),\n      v43_(v43), v44_(v44) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray44& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45>\nclass ValueArray45 {\n public:\n  ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),\n      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),\n      v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),\n      v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray45& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46>\nclass ValueArray46 {\n public:\n  ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),\n      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray46& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47>\nclass ValueArray47 {\n public:\n  ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),\n      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),\n      v47_(v47) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray47& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48>\nclass ValueArray48 {\n public:\n  ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),\n      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),\n      v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),\n      v46_(v46), v47_(v47), v48_(v48) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray48& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49>\nclass ValueArray49 {\n public:\n  ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,\n      T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),\n      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_), static_cast<T>(v49_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray49& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n  const T49 v49_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49, typename T50>\nclass ValueArray50 {\n public:\n  ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,\n      T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),\n      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray50& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n  const T49 v49_;\n  const T50 v50_;\n};\n\n# if GTEST_HAS_COMBINE\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Generates values from the Cartesian product of values produced\n// by the argument generators.\n//\ntemplate <typename T1, typename T2>\nclass CartesianProductGenerator2\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2> ParamType;\n\n  CartesianProductGenerator2(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2)\n      : g1_(g1), g2_(g2) {}\n  virtual ~CartesianProductGenerator2() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current2_;\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator2::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator2& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n};  // class CartesianProductGenerator2\n\n\ntemplate <typename T1, typename T2, typename T3>\nclass CartesianProductGenerator3\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3> ParamType;\n\n  CartesianProductGenerator3(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)\n      : g1_(g1), g2_(g2), g3_(g3) {}\n  virtual ~CartesianProductGenerator3() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current3_;\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator3::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator3& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n};  // class CartesianProductGenerator3\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nclass CartesianProductGenerator4\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;\n\n  CartesianProductGenerator4(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}\n  virtual ~CartesianProductGenerator4() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current4_;\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator4::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator4& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n};  // class CartesianProductGenerator4\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nclass CartesianProductGenerator5\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;\n\n  CartesianProductGenerator5(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}\n  virtual ~CartesianProductGenerator5() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current5_;\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator5::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator5& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n};  // class CartesianProductGenerator5\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nclass CartesianProductGenerator6\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,\n        T6> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;\n\n  CartesianProductGenerator6(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}\n  virtual ~CartesianProductGenerator6() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current6_;\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator6::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator6& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n};  // class CartesianProductGenerator6\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nclass CartesianProductGenerator7\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,\n        T7> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;\n\n  CartesianProductGenerator7(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}\n  virtual ~CartesianProductGenerator7() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current7_;\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator7::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator7& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n};  // class CartesianProductGenerator7\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nclass CartesianProductGenerator8\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;\n\n  CartesianProductGenerator8(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),\n          g8_(g8) {}\n  virtual ~CartesianProductGenerator8() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current8_;\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator8::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator8& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n};  // class CartesianProductGenerator8\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nclass CartesianProductGenerator9\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8, T9> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;\n\n  CartesianProductGenerator9(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9) {}\n  virtual ~CartesianProductGenerator9() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end(), g9_, g9_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8,\n      const ParamGenerator<T9>& g9,\n      const typename ParamGenerator<T9>::iterator& current9)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),\n          begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current9_;\n      if (current9_ == end9_) {\n        current9_ = begin9_;\n        ++current8_;\n      }\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_ &&\n          current9_ == typed_other->current9_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_),\n        begin9_(other.begin9_),\n        end9_(other.end9_),\n        current9_(other.current9_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_,\n            *current9_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_ ||\n          current9_ == end9_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    const typename ParamGenerator<T9>::iterator begin9_;\n    const typename ParamGenerator<T9>::iterator end9_;\n    typename ParamGenerator<T9>::iterator current9_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator9::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator9& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n  const ParamGenerator<T9> g9_;\n};  // class CartesianProductGenerator9\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nclass CartesianProductGenerator10\n    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8, T9, T10> > {\n public:\n  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;\n\n  CartesianProductGenerator10(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,\n      const ParamGenerator<T10>& g10)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9), g10_(g10) {}\n  virtual ~CartesianProductGenerator10() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end(), g9_, g9_.end(), g10_, g10_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8,\n      const ParamGenerator<T9>& g9,\n      const typename ParamGenerator<T9>::iterator& current9,\n      const ParamGenerator<T10>& g10,\n      const typename ParamGenerator<T10>::iterator& current10)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),\n          begin9_(g9.begin()), end9_(g9.end()), current9_(current9),\n          begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current10_;\n      if (current10_ == end10_) {\n        current10_ = begin10_;\n        ++current9_;\n      }\n      if (current9_ == end9_) {\n        current9_ = begin9_;\n        ++current8_;\n      }\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_ &&\n          current9_ == typed_other->current9_ &&\n          current10_ == typed_other->current10_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_),\n        begin9_(other.begin9_),\n        end9_(other.end9_),\n        current9_(other.current9_),\n        begin10_(other.begin10_),\n        end10_(other.end10_),\n        current10_(other.current10_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_,\n            *current9_, *current10_);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_ ||\n          current9_ == end9_ ||\n          current10_ == end10_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    const typename ParamGenerator<T9>::iterator begin9_;\n    const typename ParamGenerator<T9>::iterator end9_;\n    typename ParamGenerator<T9>::iterator current9_;\n    const typename ParamGenerator<T10>::iterator begin10_;\n    const typename ParamGenerator<T10>::iterator end10_;\n    typename ParamGenerator<T10>::iterator current10_;\n    ParamType current_value_;\n  };  // class CartesianProductGenerator10::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator10& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n  const ParamGenerator<T9> g9_;\n  const ParamGenerator<T10> g10_;\n};  // class CartesianProductGenerator10\n\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Helper classes providing Combine() with polymorphic features. They allow\n// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is\n// convertible to U.\n//\ntemplate <class Generator1, class Generator2>\nclass CartesianProductHolder2 {\n public:\nCartesianProductHolder2(const Generator1& g1, const Generator2& g2)\n      : g1_(g1), g2_(g2) {}\n  template <typename T1, typename T2>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2> >(\n        new CartesianProductGenerator2<T1, T2>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder2& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n};  // class CartesianProductHolder2\n\ntemplate <class Generator1, class Generator2, class Generator3>\nclass CartesianProductHolder3 {\n public:\nCartesianProductHolder3(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3)\n      : g1_(g1), g2_(g2), g3_(g3) {}\n  template <typename T1, typename T2, typename T3>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(\n        new CartesianProductGenerator3<T1, T2, T3>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder3& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n};  // class CartesianProductHolder3\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4>\nclass CartesianProductHolder4 {\n public:\nCartesianProductHolder4(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}\n  template <typename T1, typename T2, typename T3, typename T4>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(\n        new CartesianProductGenerator4<T1, T2, T3, T4>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder4& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n};  // class CartesianProductHolder4\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5>\nclass CartesianProductHolder5 {\n public:\nCartesianProductHolder5(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(\n        new CartesianProductGenerator5<T1, T2, T3, T4, T5>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder5& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n};  // class CartesianProductHolder5\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6>\nclass CartesianProductHolder6 {\n public:\nCartesianProductHolder6(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(\n        new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder6& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n};  // class CartesianProductHolder6\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7>\nclass CartesianProductHolder7 {\n public:\nCartesianProductHolder7(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,\n      T7> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(\n        new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder7& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n};  // class CartesianProductHolder7\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8>\nclass CartesianProductHolder8 {\n public:\nCartesianProductHolder8(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),\n          g8_(g8) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,\n      T8> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(\n        new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder8& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n};  // class CartesianProductHolder8\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8, class Generator9>\nclass CartesianProductHolder9 {\n public:\nCartesianProductHolder9(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8,\n    const Generator9& g9)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8, typename T9>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n      T9> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n        T9> >(\n        new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_),\n        static_cast<ParamGenerator<T9> >(g9_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder9& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n  const Generator9 g9_;\n};  // class CartesianProductHolder9\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8, class Generator9, class Generator10>\nclass CartesianProductHolder10 {\n public:\nCartesianProductHolder10(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8,\n    const Generator9& g9, const Generator10& g10)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9), g10_(g10) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8, typename T9, typename T10>\n  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n      T9, T10> >() const {\n    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n        T9, T10> >(\n        new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,\n            T10>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_),\n        static_cast<ParamGenerator<T9> >(g9_),\n        static_cast<ParamGenerator<T10> >(g10_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder10& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n  const Generator9 g9_;\n  const Generator10 g10_;\n};  // class CartesianProductHolder10\n\n# endif  // GTEST_HAS_COMBINE\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  //  GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump",
    "content": "$$ -*- mode: c++; -*-\n$var n = 50  $$ Maximum length of Values arguments we want to support.\n$var maxtuple = 10  $$ Maximum number of Combine arguments we want to support.\n// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// Type and function utilities for implementing parameterized tests.\n// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n// Currently Google Test supports at most $n arguments in Values,\n// and at most $maxtuple arguments in Combine. Please contact\n// googletestframework@googlegroups.com if you need more.\n// Please note that the number of arguments to Combine is limited\n// by the maximum arity of the implementation of tr1::tuple which is\n// currently set at $maxtuple.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n\n// scripts/fuse_gtest.py depends on gtest's own header being #included\n// *unconditionally*.  Therefore these #includes cannot be moved\n// inside #if GTEST_HAS_PARAM_TEST.\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nnamespace testing {\n\n// Forward declarations of ValuesIn(), which is implemented in\n// include/gtest/gtest-param-test.h.\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end);\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]);\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container);\n\nnamespace internal {\n\n// Used in the Values() function to provide polymorphic capabilities.\ntemplate <typename T1>\nclass ValueArray1 {\n public:\n  explicit ValueArray1(T1 v1) : v1_(v1) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray1& other);\n\n  const T1 v1_;\n};\n\n$range i 2..n\n$for i [[\n$range j 1..i\n\ntemplate <$for j, [[typename T$j]]>\nclass ValueArray$i {\n public:\n  ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {$for j, [[static_cast<T>(v$(j)_)]]};\n    return ValuesIn(array);\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray$i& other);\n\n$for j [[\n\n  const T$j v$(j)_;\n]]\n\n};\n\n]]\n\n# if GTEST_HAS_COMBINE\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Generates values from the Cartesian product of values produced\n// by the argument generators.\n//\n$range i 2..maxtuple\n$for i [[\n$range j 1..i\n$range k 2..i\n\ntemplate <$for j, [[typename T$j]]>\nclass CartesianProductGenerator$i\n    : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > {\n public:\n  typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType;\n\n  CartesianProductGenerator$i($for j, [[const ParamGenerator<T$j>& g$j]])\n      : $for j, [[g$(j)_(g$j)]] {}\n  virtual ~CartesianProductGenerator$i() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]);\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]);\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base, $for j, [[\n\n      const ParamGenerator<T$j>& g$j,\n      const typename ParamGenerator<T$j>::iterator& current$(j)]])\n        : base_(base),\n$for j, [[\n\n          begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j)\n]]    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current$(i)_;\n\n$for k [[\n      if (current$(i+2-k)_ == end$(i+2-k)_) {\n        current$(i+2-k)_ = begin$(i+2-k)_;\n        ++current$(i+2-k-1)_;\n      }\n\n]]\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return &current_value_; }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         ($for j  && [[\n\n          current$(j)_ == typed_other->current$(j)_\n]]);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_), $for j, [[\n\n        begin$(j)_(other.begin$(j)_),\n        end$(j)_(other.end$(j)_),\n        current$(j)_(other.current$(j)_)\n]] {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = ParamType($for j, [[*current$(j)_]]);\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n$for j  || [[\n\n          current$(j)_ == end$(j)_\n]];\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n$for j [[\n\n    const typename ParamGenerator<T$j>::iterator begin$(j)_;\n    const typename ParamGenerator<T$j>::iterator end$(j)_;\n    typename ParamGenerator<T$j>::iterator current$(j)_;\n]]\n\n    ParamType current_value_;\n  };  // class CartesianProductGenerator$i::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator$i& other);\n\n\n$for j [[\n  const ParamGenerator<T$j> g$(j)_;\n\n]]\n};  // class CartesianProductGenerator$i\n\n\n]]\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Helper classes providing Combine() with polymorphic features. They allow\n// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is\n// convertible to U.\n//\n$range i 2..maxtuple\n$for i [[\n$range j 1..i\n\ntemplate <$for j, [[class Generator$j]]>\nclass CartesianProductHolder$i {\n public:\nCartesianProductHolder$i($for j, [[const Generator$j& g$j]])\n      : $for j, [[g$(j)_(g$j)]] {}\n  template <$for j, [[typename T$j]]>\n  operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const {\n    return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >(\n        new CartesianProductGenerator$i<$for j, [[T$j]]>(\n$for j,[[\n\n        static_cast<ParamGenerator<T$j> >(g$(j)_)\n]]));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder$i& other);\n\n\n$for j [[\n  const Generator$j g$(j)_;\n\n]]\n};  // class CartesianProductHolder$i\n\n]]\n\n# endif  // GTEST_HAS_COMBINE\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  //  GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-param-util.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// Type and function utilities for implementing parameterized tests.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n\n#include <iterator>\n#include <utility>\n#include <vector>\n\n// scripts/fuse_gtest.py depends on gtest's own header being #included\n// *unconditionally*.  Therefore these #includes cannot be moved\n// inside #if GTEST_HAS_PARAM_TEST.\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-linked_ptr.h\"\n#include \"gtest/internal/gtest-port.h\"\n#include \"gtest/gtest-printers.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nnamespace testing {\nnamespace internal {\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Outputs a message explaining invalid registration of different\n// fixture class for the same test case. This may happen when\n// TEST_P macro is used to define two tests with the same name\n// but in different namespaces.\nGTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name,\n                                          const char* file, int line);\n\ntemplate <typename> class ParamGeneratorInterface;\ntemplate <typename> class ParamGenerator;\n\n// Interface for iterating over elements provided by an implementation\n// of ParamGeneratorInterface<T>.\ntemplate <typename T>\nclass ParamIteratorInterface {\n public:\n  virtual ~ParamIteratorInterface() {}\n  // A pointer to the base generator instance.\n  // Used only for the purposes of iterator comparison\n  // to make sure that two iterators belong to the same generator.\n  virtual const ParamGeneratorInterface<T>* BaseGenerator() const = 0;\n  // Advances iterator to point to the next element\n  // provided by the generator. The caller is responsible\n  // for not calling Advance() on an iterator equal to\n  // BaseGenerator()->End().\n  virtual void Advance() = 0;\n  // Clones the iterator object. Used for implementing copy semantics\n  // of ParamIterator<T>.\n  virtual ParamIteratorInterface* Clone() const = 0;\n  // Dereferences the current iterator and provides (read-only) access\n  // to the pointed value. It is the caller's responsibility not to call\n  // Current() on an iterator equal to BaseGenerator()->End().\n  // Used for implementing ParamGenerator<T>::operator*().\n  virtual const T* Current() const = 0;\n  // Determines whether the given iterator and other point to the same\n  // element in the sequence generated by the generator.\n  // Used for implementing ParamGenerator<T>::operator==().\n  virtual bool Equals(const ParamIteratorInterface& other) const = 0;\n};\n\n// Class iterating over elements provided by an implementation of\n// ParamGeneratorInterface<T>. It wraps ParamIteratorInterface<T>\n// and implements the const forward iterator concept.\ntemplate <typename T>\nclass ParamIterator {\n public:\n  typedef T value_type;\n  typedef const T& reference;\n  typedef ptrdiff_t difference_type;\n\n  // ParamIterator assumes ownership of the impl_ pointer.\n  ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {}\n  ParamIterator& operator=(const ParamIterator& other) {\n    if (this != &other)\n      impl_.reset(other.impl_->Clone());\n    return *this;\n  }\n\n  const T& operator*() const { return *impl_->Current(); }\n  const T* operator->() const { return impl_->Current(); }\n  // Prefix version of operator++.\n  ParamIterator& operator++() {\n    impl_->Advance();\n    return *this;\n  }\n  // Postfix version of operator++.\n  ParamIterator operator++(int /*unused*/) {\n    ParamIteratorInterface<T>* clone = impl_->Clone();\n    impl_->Advance();\n    return ParamIterator(clone);\n  }\n  bool operator==(const ParamIterator& other) const {\n    return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);\n  }\n  bool operator!=(const ParamIterator& other) const {\n    return !(*this == other);\n  }\n\n private:\n  friend class ParamGenerator<T>;\n  explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {}\n  scoped_ptr<ParamIteratorInterface<T> > impl_;\n};\n\n// ParamGeneratorInterface<T> is the binary interface to access generators\n// defined in other translation units.\ntemplate <typename T>\nclass ParamGeneratorInterface {\n public:\n  typedef T ParamType;\n\n  virtual ~ParamGeneratorInterface() {}\n\n  // Generator interface definition\n  virtual ParamIteratorInterface<T>* Begin() const = 0;\n  virtual ParamIteratorInterface<T>* End() const = 0;\n};\n\n// Wraps ParamGeneratorInterface<T> and provides general generator syntax\n// compatible with the STL Container concept.\n// This class implements copy initialization semantics and the contained\n// ParamGeneratorInterface<T> instance is shared among all copies\n// of the original object. This is possible because that instance is immutable.\ntemplate<typename T>\nclass ParamGenerator {\n public:\n  typedef ParamIterator<T> iterator;\n\n  explicit ParamGenerator(ParamGeneratorInterface<T>* impl) : impl_(impl) {}\n  ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {}\n\n  ParamGenerator& operator=(const ParamGenerator& other) {\n    impl_ = other.impl_;\n    return *this;\n  }\n\n  iterator begin() const { return iterator(impl_->Begin()); }\n  iterator end() const { return iterator(impl_->End()); }\n\n private:\n  linked_ptr<const ParamGeneratorInterface<T> > impl_;\n};\n\n// Generates values from a range of two comparable values. Can be used to\n// generate sequences of user-defined types that implement operator+() and\n// operator<().\n// This class is used in the Range() function.\ntemplate <typename T, typename IncrementT>\nclass RangeGenerator : public ParamGeneratorInterface<T> {\n public:\n  RangeGenerator(T begin, T end, IncrementT step)\n      : begin_(begin), end_(end),\n        step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}\n  virtual ~RangeGenerator() {}\n\n  virtual ParamIteratorInterface<T>* Begin() const {\n    return new Iterator(this, begin_, 0, step_);\n  }\n  virtual ParamIteratorInterface<T>* End() const {\n    return new Iterator(this, end_, end_index_, step_);\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<T> {\n   public:\n    Iterator(const ParamGeneratorInterface<T>* base, T value, int index,\n             IncrementT step)\n        : base_(base), value_(value), index_(index), step_(step) {}\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {\n      return base_;\n    }\n    virtual void Advance() {\n      value_ = value_ + step_;\n      index_++;\n    }\n    virtual ParamIteratorInterface<T>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const T* Current() const { return &value_; }\n    virtual bool Equals(const ParamIteratorInterface<T>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const int other_index =\n          CheckedDowncastToActualType<const Iterator>(&other)->index_;\n      return index_ == other_index;\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : ParamIteratorInterface<T>(),\n          base_(other.base_), value_(other.value_), index_(other.index_),\n          step_(other.step_) {}\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<T>* const base_;\n    T value_;\n    int index_;\n    const IncrementT step_;\n  };  // class RangeGenerator::Iterator\n\n  static int CalculateEndIndex(const T& begin,\n                               const T& end,\n                               const IncrementT& step) {\n    int end_index = 0;\n    for (T i = begin; i < end; i = i + step)\n      end_index++;\n    return end_index;\n  }\n\n  // No implementation - assignment is unsupported.\n  void operator=(const RangeGenerator& other);\n\n  const T begin_;\n  const T end_;\n  const IncrementT step_;\n  // The index for the end() iterator. All the elements in the generated\n  // sequence are indexed (0-based) to aid iterator comparison.\n  const int end_index_;\n};  // class RangeGenerator\n\n\n// Generates values from a pair of STL-style iterators. Used in the\n// ValuesIn() function. The elements are copied from the source range\n// since the source can be located on the stack, and the generator\n// is likely to persist beyond that stack frame.\ntemplate <typename T>\nclass ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {\n public:\n  template <typename ForwardIterator>\n  ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)\n      : container_(begin, end) {}\n  virtual ~ValuesInIteratorRangeGenerator() {}\n\n  virtual ParamIteratorInterface<T>* Begin() const {\n    return new Iterator(this, container_.begin());\n  }\n  virtual ParamIteratorInterface<T>* End() const {\n    return new Iterator(this, container_.end());\n  }\n\n private:\n  typedef typename ::std::vector<T> ContainerType;\n\n  class Iterator : public ParamIteratorInterface<T> {\n   public:\n    Iterator(const ParamGeneratorInterface<T>* base,\n             typename ContainerType::const_iterator iterator)\n        : base_(base), iterator_(iterator) {}\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {\n      return base_;\n    }\n    virtual void Advance() {\n      ++iterator_;\n      value_.reset();\n    }\n    virtual ParamIteratorInterface<T>* Clone() const {\n      return new Iterator(*this);\n    }\n    // We need to use cached value referenced by iterator_ because *iterator_\n    // can return a temporary object (and of type other then T), so just\n    // having \"return &*iterator_;\" doesn't work.\n    // value_ is updated here and not in Advance() because Advance()\n    // can advance iterator_ beyond the end of the range, and we cannot\n    // detect that fact. The client code, on the other hand, is\n    // responsible for not calling Current() on an out-of-range iterator.\n    virtual const T* Current() const {\n      if (value_.get() == NULL)\n        value_.reset(new T(*iterator_));\n      return value_.get();\n    }\n    virtual bool Equals(const ParamIteratorInterface<T>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      return iterator_ ==\n          CheckedDowncastToActualType<const Iterator>(&other)->iterator_;\n    }\n\n   private:\n    Iterator(const Iterator& other)\n          // The explicit constructor call suppresses a false warning\n          // emitted by gcc when supplied with the -Wextra option.\n        : ParamIteratorInterface<T>(),\n          base_(other.base_),\n          iterator_(other.iterator_) {}\n\n    const ParamGeneratorInterface<T>* const base_;\n    typename ContainerType::const_iterator iterator_;\n    // A cached value of *iterator_. We keep it here to allow access by\n    // pointer in the wrapping iterator's operator->().\n    // value_ needs to be mutable to be accessed in Current().\n    // Use of scoped_ptr helps manage cached value's lifetime,\n    // which is bound by the lifespan of the iterator itself.\n    mutable scoped_ptr<const T> value_;\n  };  // class ValuesInIteratorRangeGenerator::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const ValuesInIteratorRangeGenerator& other);\n\n  const ContainerType container_;\n};  // class ValuesInIteratorRangeGenerator\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Stores a parameter value and later creates tests parameterized with that\n// value.\ntemplate <class TestClass>\nclass ParameterizedTestFactory : public TestFactoryBase {\n public:\n  typedef typename TestClass::ParamType ParamType;\n  explicit ParameterizedTestFactory(ParamType parameter) :\n      parameter_(parameter) {}\n  virtual Test* CreateTest() {\n    TestClass::SetParam(&parameter_);\n    return new TestClass();\n  }\n\n private:\n  const ParamType parameter_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory);\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// TestMetaFactoryBase is a base class for meta-factories that create\n// test factories for passing into MakeAndRegisterTestInfo function.\ntemplate <class ParamType>\nclass TestMetaFactoryBase {\n public:\n  virtual ~TestMetaFactoryBase() {}\n\n  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0;\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// TestMetaFactory creates test factories for passing into\n// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives\n// ownership of test factory pointer, same factory object cannot be passed\n// into that method twice. But ParameterizedTestCaseInfo is going to call\n// it for each Test/Parameter value combination. Thus it needs meta factory\n// creator class.\ntemplate <class TestCase>\nclass TestMetaFactory\n    : public TestMetaFactoryBase<typename TestCase::ParamType> {\n public:\n  typedef typename TestCase::ParamType ParamType;\n\n  TestMetaFactory() {}\n\n  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) {\n    return new ParameterizedTestFactory<TestCase>(parameter);\n  }\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory);\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestCaseInfoBase is a generic interface\n// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase\n// accumulates test information provided by TEST_P macro invocations\n// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations\n// and uses that information to register all resulting test instances\n// in RegisterTests method. The ParameterizeTestCaseRegistry class holds\n// a collection of pointers to the ParameterizedTestCaseInfo objects\n// and calls RegisterTests() on each of them when asked.\nclass ParameterizedTestCaseInfoBase {\n public:\n  virtual ~ParameterizedTestCaseInfoBase() {}\n\n  // Base part of test case name for display purposes.\n  virtual const string& GetTestCaseName() const = 0;\n  // Test case id to verify identity.\n  virtual TypeId GetTestCaseTypeId() const = 0;\n  // UnitTest class invokes this method to register tests in this\n  // test case right before running them in RUN_ALL_TESTS macro.\n  // This method should not be called more then once on any single\n  // instance of a ParameterizedTestCaseInfoBase derived class.\n  virtual void RegisterTests() = 0;\n\n protected:\n  ParameterizedTestCaseInfoBase() {}\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase);\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P\n// macro invocations for a particular test case and generators\n// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that\n// test case. It registers tests with all values generated by all\n// generators when asked.\ntemplate <class TestCase>\nclass ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {\n public:\n  // ParamType and GeneratorCreationFunc are private types but are required\n  // for declarations of public methods AddTestPattern() and\n  // AddTestCaseInstantiation().\n  typedef typename TestCase::ParamType ParamType;\n  // A function that returns an instance of appropriate generator type.\n  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();\n\n  explicit ParameterizedTestCaseInfo(const char* name)\n      : test_case_name_(name) {}\n\n  // Test case base name for display purposes.\n  virtual const string& GetTestCaseName() const { return test_case_name_; }\n  // Test case id to verify identity.\n  virtual TypeId GetTestCaseTypeId() const { return GetTypeId<TestCase>(); }\n  // TEST_P macro uses AddTestPattern() to record information\n  // about a single test in a LocalTestInfo structure.\n  // test_case_name is the base name of the test case (without invocation\n  // prefix). test_base_name is the name of an individual test without\n  // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is\n  // test case base name and DoBar is test base name.\n  void AddTestPattern(const char* test_case_name,\n                      const char* test_base_name,\n                      TestMetaFactoryBase<ParamType>* meta_factory) {\n    tests_.push_back(linked_ptr<TestInfo>(new TestInfo(test_case_name,\n                                                       test_base_name,\n                                                       meta_factory)));\n  }\n  // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information\n  // about a generator.\n  int AddTestCaseInstantiation(const string& instantiation_name,\n                               GeneratorCreationFunc* func,\n                               const char* /* file */,\n                               int /* line */) {\n    instantiations_.push_back(::std::make_pair(instantiation_name, func));\n    return 0;  // Return value used only to run this method in namespace scope.\n  }\n  // UnitTest class invokes this method to register tests in this test case\n  // test cases right before running tests in RUN_ALL_TESTS macro.\n  // This method should not be called more then once on any single\n  // instance of a ParameterizedTestCaseInfoBase derived class.\n  // UnitTest has a guard to prevent from calling this method more then once.\n  virtual void RegisterTests() {\n    for (typename TestInfoContainer::iterator test_it = tests_.begin();\n         test_it != tests_.end(); ++test_it) {\n      linked_ptr<TestInfo> test_info = *test_it;\n      for (typename InstantiationContainer::iterator gen_it =\n               instantiations_.begin(); gen_it != instantiations_.end();\n               ++gen_it) {\n        const string& instantiation_name = gen_it->first;\n        ParamGenerator<ParamType> generator((*gen_it->second)());\n\n        string test_case_name;\n        if ( !instantiation_name.empty() )\n          test_case_name = instantiation_name + \"/\";\n        test_case_name += test_info->test_case_base_name;\n\n        int i = 0;\n        for (typename ParamGenerator<ParamType>::iterator param_it =\n                 generator.begin();\n             param_it != generator.end(); ++param_it, ++i) {\n          Message test_name_stream;\n          test_name_stream << test_info->test_base_name << \"/\" << i;\n          MakeAndRegisterTestInfo(\n              test_case_name.c_str(),\n              test_name_stream.GetString().c_str(),\n              NULL,  // No type parameter.\n              PrintToString(*param_it).c_str(),\n              GetTestCaseTypeId(),\n              TestCase::SetUpTestCase,\n              TestCase::TearDownTestCase,\n              test_info->test_meta_factory->CreateTestFactory(*param_it));\n        }  // for param_it\n      }  // for gen_it\n    }  // for test_it\n  }  // RegisterTests\n\n private:\n  // LocalTestInfo structure keeps information about a single test registered\n  // with TEST_P macro.\n  struct TestInfo {\n    TestInfo(const char* a_test_case_base_name,\n             const char* a_test_base_name,\n             TestMetaFactoryBase<ParamType>* a_test_meta_factory) :\n        test_case_base_name(a_test_case_base_name),\n        test_base_name(a_test_base_name),\n        test_meta_factory(a_test_meta_factory) {}\n\n    const string test_case_base_name;\n    const string test_base_name;\n    const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;\n  };\n  typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer;\n  // Keeps pairs of <Instantiation name, Sequence generator creation function>\n  // received from INSTANTIATE_TEST_CASE_P macros.\n  typedef ::std::vector<std::pair<string, GeneratorCreationFunc*> >\n      InstantiationContainer;\n\n  const string test_case_name_;\n  TestInfoContainer tests_;\n  InstantiationContainer instantiations_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo);\n};  // class ParameterizedTestCaseInfo\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase\n// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P\n// macros use it to locate their corresponding ParameterizedTestCaseInfo\n// descriptors.\nclass ParameterizedTestCaseRegistry {\n public:\n  ParameterizedTestCaseRegistry() {}\n  ~ParameterizedTestCaseRegistry() {\n    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();\n         it != test_case_infos_.end(); ++it) {\n      delete *it;\n    }\n  }\n\n  // Looks up or creates and returns a structure containing information about\n  // tests and instantiations of a particular test case.\n  template <class TestCase>\n  ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder(\n      const char* test_case_name,\n      const char* file,\n      int line) {\n    ParameterizedTestCaseInfo<TestCase>* typed_test_info = NULL;\n    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();\n         it != test_case_infos_.end(); ++it) {\n      if ((*it)->GetTestCaseName() == test_case_name) {\n        if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {\n          // Complain about incorrect usage of Google Test facilities\n          // and terminate the program since we cannot guaranty correct\n          // test case setup and tear-down in this case.\n          ReportInvalidTestCaseType(test_case_name,  file, line);\n          posix::Abort();\n        } else {\n          // At this point we are sure that the object we found is of the same\n          // type we are looking for, so we downcast it to that type\n          // without further checks.\n          typed_test_info = CheckedDowncastToActualType<\n              ParameterizedTestCaseInfo<TestCase> >(*it);\n        }\n        break;\n      }\n    }\n    if (typed_test_info == NULL) {\n      typed_test_info = new ParameterizedTestCaseInfo<TestCase>(test_case_name);\n      test_case_infos_.push_back(typed_test_info);\n    }\n    return typed_test_info;\n  }\n  void RegisterTests() {\n    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();\n         it != test_case_infos_.end(); ++it) {\n      (*it)->RegisterTests();\n    }\n  }\n\n private:\n  typedef ::std::vector<ParameterizedTestCaseInfoBase*> TestCaseInfoContainer;\n\n  TestCaseInfoContainer test_case_infos_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry);\n};\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  //  GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-port.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: wan@google.com (Zhanyong Wan)\n//\n// Low-level types and utilities for porting Google Test to various\n// platforms.  They are subject to change without notice.  DO NOT USE\n// THEM IN USER CODE.\n//\n// This file is fundamental to Google Test.  All other Google Test source\n// files are expected to #include this.  Therefore, it cannot #include\n// any other Google Test header.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n\n// The user can define the following macros in the build script to\n// control Google Test's behavior.  If the user doesn't define a macro\n// in this list, Google Test will define it.\n//\n//   GTEST_HAS_CLONE          - Define it to 1/0 to indicate that clone(2)\n//                              is/isn't available.\n//   GTEST_HAS_EXCEPTIONS     - Define it to 1/0 to indicate that exceptions\n//                              are enabled.\n//   GTEST_HAS_GLOBAL_STRING  - Define it to 1/0 to indicate that ::string\n//                              is/isn't available (some systems define\n//                              ::string, which is different to std::string).\n//   GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string\n//                              is/isn't available (some systems define\n//                              ::wstring, which is different to std::wstring).\n//   GTEST_HAS_POSIX_RE       - Define it to 1/0 to indicate that POSIX regular\n//                              expressions are/aren't available.\n//   GTEST_HAS_PTHREAD        - Define it to 1/0 to indicate that <pthread.h>\n//                              is/isn't available.\n//   GTEST_HAS_RTTI           - Define it to 1/0 to indicate that RTTI is/isn't\n//                              enabled.\n//   GTEST_HAS_STD_WSTRING    - Define it to 1/0 to indicate that\n//                              std::wstring does/doesn't work (Google Test can\n//                              be used where std::wstring is unavailable).\n//   GTEST_HAS_TR1_TUPLE      - Define it to 1/0 to indicate tr1::tuple\n//                              is/isn't available.\n//   GTEST_HAS_SEH            - Define it to 1/0 to indicate whether the\n//                              compiler supports Microsoft's \"Structured\n//                              Exception Handling\".\n//   GTEST_HAS_STREAM_REDIRECTION\n//                            - Define it to 1/0 to indicate whether the\n//                              platform supports I/O stream redirection using\n//                              dup() and dup2().\n//   GTEST_USE_OWN_TR1_TUPLE  - Define it to 1/0 to indicate whether Google\n//                              Test's own tr1 tuple implementation should be\n//                              used.  Unused when the user sets\n//                              GTEST_HAS_TR1_TUPLE to 0.\n//   GTEST_LANG_CXX11         - Define it to 1/0 to indicate that Google Test\n//                              is building in C++11/C++98 mode.\n//   GTEST_LINKED_AS_SHARED_LIBRARY\n//                            - Define to 1 when compiling tests that use\n//                              Google Test as a shared library (known as\n//                              DLL on Windows).\n//   GTEST_CREATE_SHARED_LIBRARY\n//                            - Define to 1 when compiling Google Test itself\n//                              as a shared library.\n\n// This header defines the following utilities:\n//\n// Macros indicating the current platform (defined to 1 if compiled on\n// the given platform; otherwise undefined):\n//   GTEST_OS_AIX      - IBM AIX\n//   GTEST_OS_CYGWIN   - Cygwin\n//   GTEST_OS_HPUX     - HP-UX\n//   GTEST_OS_LINUX    - Linux\n//     GTEST_OS_LINUX_ANDROID - Google Android\n//   GTEST_OS_MAC      - Mac OS X\n//     GTEST_OS_IOS    - iOS\n//       GTEST_OS_IOS_SIMULATOR - iOS simulator\n//   GTEST_OS_NACL     - Google Native Client (NaCl)\n//   GTEST_OS_OPENBSD  - OpenBSD\n//   GTEST_OS_QNX      - QNX\n//   GTEST_OS_SOLARIS  - Sun Solaris\n//   GTEST_OS_SYMBIAN  - Symbian\n//   GTEST_OS_WINDOWS  - Windows (Desktop, MinGW, or Mobile)\n//     GTEST_OS_WINDOWS_DESKTOP  - Windows Desktop\n//     GTEST_OS_WINDOWS_MINGW    - MinGW\n//     GTEST_OS_WINDOWS_MOBILE   - Windows Mobile\n//   GTEST_OS_ZOS      - z/OS\n//\n// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the\n// most stable support.  Since core members of the Google Test project\n// don't have access to other platforms, support for them may be less\n// stable.  If you notice any problems on your platform, please notify\n// googletestframework@googlegroups.com (patches for fixing them are\n// even more welcome!).\n//\n// Note that it is possible that none of the GTEST_OS_* macros are defined.\n//\n// Macros indicating available Google Test features (defined to 1 if\n// the corresponding feature is supported; otherwise undefined):\n//   GTEST_HAS_COMBINE      - the Combine() function (for value-parameterized\n//                            tests)\n//   GTEST_HAS_DEATH_TEST   - death tests\n//   GTEST_HAS_PARAM_TEST   - value-parameterized tests\n//   GTEST_HAS_TYPED_TEST   - typed tests\n//   GTEST_HAS_TYPED_TEST_P - type-parameterized tests\n//   GTEST_USES_POSIX_RE    - enhanced POSIX regex is used. Do not confuse with\n//                            GTEST_HAS_POSIX_RE (see above) which users can\n//                            define themselves.\n//   GTEST_USES_SIMPLE_RE   - our own simple regex is used;\n//                            the above two are mutually exclusive.\n//   GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ().\n//\n// Macros for basic C++ coding:\n//   GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.\n//   GTEST_ATTRIBUTE_UNUSED_  - declares that a class' instances or a\n//                              variable don't have to be used.\n//   GTEST_DISALLOW_ASSIGN_   - disables operator=.\n//   GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.\n//   GTEST_MUST_USE_RESULT_   - declares that a function's result must be used.\n//\n// Synchronization:\n//   Mutex, MutexLock, ThreadLocal, GetThreadCount()\n//                  - synchronization primitives.\n//   GTEST_IS_THREADSAFE - defined to 1 to indicate that the above\n//                         synchronization primitives have real implementations\n//                         and Google Test is thread-safe; or 0 otherwise.\n//\n// Template meta programming:\n//   is_pointer     - as in TR1; needed on Symbian and IBM XL C/C++ only.\n//   IteratorTraits - partial implementation of std::iterator_traits, which\n//                    is not available in libCstd when compiled with Sun C++.\n//\n// Smart pointers:\n//   scoped_ptr     - as in TR2.\n//\n// Regular expressions:\n//   RE             - a simple regular expression class using the POSIX\n//                    Extended Regular Expression syntax on UNIX-like\n//                    platforms, or a reduced regular exception syntax on\n//                    other platforms, including Windows.\n//\n// Logging:\n//   GTEST_LOG_()   - logs messages at the specified severity level.\n//   LogToStderr()  - directs all log messages to stderr.\n//   FlushInfoLog() - flushes informational log messages.\n//\n// Stdout and stderr capturing:\n//   CaptureStdout()     - starts capturing stdout.\n//   GetCapturedStdout() - stops capturing stdout and returns the captured\n//                         string.\n//   CaptureStderr()     - starts capturing stderr.\n//   GetCapturedStderr() - stops capturing stderr and returns the captured\n//                         string.\n//\n// Integer types:\n//   TypeWithSize   - maps an integer to a int type.\n//   Int32, UInt32, Int64, UInt64, TimeInMillis\n//                  - integers of known sizes.\n//   BiggestInt     - the biggest signed integer type.\n//\n// Command-line utilities:\n//   GTEST_FLAG()       - references a flag.\n//   GTEST_DECLARE_*()  - declares a flag.\n//   GTEST_DEFINE_*()   - defines a flag.\n//   GetInjectableArgvs() - returns the command line as a vector of strings.\n//\n// Environment variable utilities:\n//   GetEnv()             - gets the value of an environment variable.\n//   BoolFromGTestEnv()   - parses a bool environment variable.\n//   Int32FromGTestEnv()  - parses an Int32 environment variable.\n//   StringFromGTestEnv() - parses a string environment variable.\n\n#include <ctype.h>   // for isspace, etc\n#include <stddef.h>  // for ptrdiff_t\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#ifndef _WIN32_WCE\n# include <sys/types.h>\n# include <sys/stat.h>\n#endif  // !_WIN32_WCE\n\n#if defined __APPLE__\n# include <AvailabilityMacros.h>\n# include <TargetConditionals.h>\n#endif\n\n#include <iostream>  // NOLINT\n#include <sstream>  // NOLINT\n#include <string>  // NOLINT\n\n#define GTEST_DEV_EMAIL_ \"googletestframework@@googlegroups.com\"\n#define GTEST_FLAG_PREFIX_ \"gtest_\"\n#define GTEST_FLAG_PREFIX_DASH_ \"gtest-\"\n#define GTEST_FLAG_PREFIX_UPPER_ \"GTEST_\"\n#define GTEST_NAME_ \"Google Test\"\n#define GTEST_PROJECT_URL_ \"http://code.google.com/p/googletest/\"\n\n// Determines the version of gcc that is used to compile this.\n#ifdef __GNUC__\n// 40302 means version 4.3.2.\n# define GTEST_GCC_VER_ \\\n    (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)\n#endif  // __GNUC__\n\n// Determines the platform on which Google Test is compiled.\n#ifdef __CYGWIN__\n# define GTEST_OS_CYGWIN 1\n#elif defined __SYMBIAN32__\n# define GTEST_OS_SYMBIAN 1\n#elif defined _WIN32\n# define GTEST_OS_WINDOWS 1\n# ifdef _WIN32_WCE\n#  define GTEST_OS_WINDOWS_MOBILE 1\n# elif defined(__MINGW__) || defined(__MINGW32__)\n#  define GTEST_OS_WINDOWS_MINGW 1\n# else\n#  define GTEST_OS_WINDOWS_DESKTOP 1\n# endif  // _WIN32_WCE\n#elif defined __APPLE__\n# define GTEST_OS_MAC 1\n# if TARGET_OS_IPHONE\n#  define GTEST_OS_IOS 1\n#  if TARGET_IPHONE_SIMULATOR\n#   define GTEST_OS_IOS_SIMULATOR 1\n#  endif\n# endif\n#elif defined __linux__\n# define GTEST_OS_LINUX 1\n# if defined __ANDROID__\n#  define GTEST_OS_LINUX_ANDROID 1\n# endif\n#elif defined __MVS__\n# define GTEST_OS_ZOS 1\n#elif defined(__sun) && defined(__SVR4)\n# define GTEST_OS_SOLARIS 1\n#elif defined(_AIX)\n# define GTEST_OS_AIX 1\n#elif defined(__hpux)\n# define GTEST_OS_HPUX 1\n#elif defined __native_client__\n# define GTEST_OS_NACL 1\n#elif defined __OpenBSD__\n# define GTEST_OS_OPENBSD 1\n#elif defined __QNX__\n# define GTEST_OS_QNX 1\n#endif  // __CYGWIN__\n\n#ifndef GTEST_LANG_CXX11\n// gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when\n// -std={c,gnu}++{0x,11} is passed.  The C++11 standard specifies a\n// value for __cplusplus, and recent versions of clang, gcc, and\n// probably other compilers set that too in C++11 mode.\n# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L\n// Compiling in at least C++11 mode.\n#  define GTEST_LANG_CXX11 1\n# else\n#  define GTEST_LANG_CXX11 0\n# endif\n#endif\n\n// Brings in definitions for functions used in the testing::internal::posix\n// namespace (read, write, close, chdir, isatty, stat). We do not currently\n// use them on Windows Mobile.\n#if !GTEST_OS_WINDOWS\n// This assumes that non-Windows OSes provide unistd.h. For OSes where this\n// is not the case, we need to include headers that provide the functions\n// mentioned above.\n# include <unistd.h>\n# include <strings.h>\n#elif !GTEST_OS_WINDOWS_MOBILE\n# include <direct.h>\n# include <io.h>\n#endif\n\n#if GTEST_OS_LINUX_ANDROID\n// Used to define __ANDROID_API__ matching the target NDK API level.\n#  include <android/api-level.h>  // NOLINT\n#endif\n\n// Defines this to true iff Google Test can use POSIX regular expressions.\n#ifndef GTEST_HAS_POSIX_RE\n# if GTEST_OS_LINUX_ANDROID\n// On Android, <regex.h> is only available starting with Gingerbread.\n#  define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)\n# else\n#  define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)\n# endif\n#endif\n\n#if GTEST_HAS_POSIX_RE\n\n// On some platforms, <regex.h> needs someone to define size_t, and\n// won't compile otherwise.  We can #include it here as we already\n// included <stdlib.h>, which is guaranteed to define size_t through\n// <stddef.h>.\n# include <regex.h>  // NOLINT\n\n# define GTEST_USES_POSIX_RE 1\n\n#elif GTEST_OS_WINDOWS\n\n// <regex.h> is not available on Windows.  Use our own simple regex\n// implementation instead.\n# define GTEST_USES_SIMPLE_RE 1\n\n#else\n\n// <regex.h> may not be available on this platform.  Use our own\n// simple regex implementation instead.\n# define GTEST_USES_SIMPLE_RE 1\n\n#endif  // GTEST_HAS_POSIX_RE\n\n#ifndef GTEST_HAS_EXCEPTIONS\n// The user didn't tell us whether exceptions are enabled, so we need\n// to figure it out.\n# if defined(_MSC_VER) || defined(__BORLANDC__)\n// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS\n// macro to enable exceptions, so we'll do the same.\n// Assumes that exceptions are enabled by default.\n#  ifndef _HAS_EXCEPTIONS\n#   define _HAS_EXCEPTIONS 1\n#  endif  // _HAS_EXCEPTIONS\n#  define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS\n# elif defined(__GNUC__) && __EXCEPTIONS\n// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled.\n#  define GTEST_HAS_EXCEPTIONS 1\n# elif defined(__SUNPRO_CC)\n// Sun Pro CC supports exceptions.  However, there is no compile-time way of\n// detecting whether they are enabled or not.  Therefore, we assume that\n// they are enabled unless the user tells us otherwise.\n#  define GTEST_HAS_EXCEPTIONS 1\n# elif defined(__IBMCPP__) && __EXCEPTIONS\n// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled.\n#  define GTEST_HAS_EXCEPTIONS 1\n# elif defined(__HP_aCC)\n// Exception handling is in effect by default in HP aCC compiler. It has to\n// be turned of by +noeh compiler option if desired.\n#  define GTEST_HAS_EXCEPTIONS 1\n# else\n// For other compilers, we assume exceptions are disabled to be\n// conservative.\n#  define GTEST_HAS_EXCEPTIONS 0\n# endif  // defined(_MSC_VER) || defined(__BORLANDC__)\n#endif  // GTEST_HAS_EXCEPTIONS\n\n#if !defined(GTEST_HAS_STD_STRING)\n// Even though we don't use this macro any longer, we keep it in case\n// some clients still depend on it.\n# define GTEST_HAS_STD_STRING 1\n#elif !GTEST_HAS_STD_STRING\n// The user told us that ::std::string isn't available.\n# error \"Google Test cannot be used where ::std::string isn't available.\"\n#endif  // !defined(GTEST_HAS_STD_STRING)\n\n#ifndef GTEST_HAS_GLOBAL_STRING\n// The user didn't tell us whether ::string is available, so we need\n// to figure it out.\n\n# define GTEST_HAS_GLOBAL_STRING 0\n\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n#ifndef GTEST_HAS_STD_WSTRING\n// The user didn't tell us whether ::std::wstring is available, so we need\n// to figure it out.\n// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring\n//   is available.\n\n// Cygwin 1.7 and below doesn't support ::std::wstring.\n// Solaris' libc++ doesn't support it either.  Android has\n// no support for it at least as recent as Froyo (2.2).\n# define GTEST_HAS_STD_WSTRING \\\n    (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS))\n\n#endif  // GTEST_HAS_STD_WSTRING\n\n#ifndef GTEST_HAS_GLOBAL_WSTRING\n// The user didn't tell us whether ::wstring is available, so we need\n// to figure it out.\n# define GTEST_HAS_GLOBAL_WSTRING \\\n    (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING)\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n// Determines whether RTTI is available.\n#ifndef GTEST_HAS_RTTI\n// The user didn't tell us whether RTTI is enabled, so we need to\n// figure it out.\n\n# ifdef _MSC_VER\n\n#  ifdef _CPPRTTI  // MSVC defines this macro iff RTTI is enabled.\n#   define GTEST_HAS_RTTI 1\n#  else\n#   define GTEST_HAS_RTTI 0\n#  endif\n\n// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled.\n# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)\n\n#  ifdef __GXX_RTTI\n// When building against STLport with the Android NDK and with\n// -frtti -fno-exceptions, the build fails at link time with undefined\n// references to __cxa_bad_typeid. Note sure if STL or toolchain bug,\n// so disable RTTI when detected.\n#   if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \\\n       !defined(__EXCEPTIONS)\n#    define GTEST_HAS_RTTI 0\n#   else\n#    define GTEST_HAS_RTTI 1\n#   endif  // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS\n#  else\n#   define GTEST_HAS_RTTI 0\n#  endif  // __GXX_RTTI\n\n// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends\n// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the\n// first version with C++ support.\n# elif defined(__clang__)\n\n#  define GTEST_HAS_RTTI __has_feature(cxx_rtti)\n\n// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if\n// both the typeid and dynamic_cast features are present.\n# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)\n\n#  ifdef __RTTI_ALL__\n#   define GTEST_HAS_RTTI 1\n#  else\n#   define GTEST_HAS_RTTI 0\n#  endif\n\n# else\n\n// For all other compilers, we assume RTTI is enabled.\n#  define GTEST_HAS_RTTI 1\n\n# endif  // _MSC_VER\n\n#endif  // GTEST_HAS_RTTI\n\n// It's this header's responsibility to #include <typeinfo> when RTTI\n// is enabled.\n#if GTEST_HAS_RTTI\n# include <typeinfo>\n#endif\n\n// Determines whether Google Test can use the pthreads library.\n#ifndef GTEST_HAS_PTHREAD\n// The user didn't tell us explicitly, so we assume pthreads support is\n// available on Linux and Mac.\n//\n// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0\n// to your compiler flags.\n# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX \\\n    || GTEST_OS_QNX)\n#endif  // GTEST_HAS_PTHREAD\n\n#if GTEST_HAS_PTHREAD\n// gtest-port.h guarantees to #include <pthread.h> when GTEST_HAS_PTHREAD is\n// true.\n# include <pthread.h>  // NOLINT\n\n// For timespec and nanosleep, used below.\n# include <time.h>  // NOLINT\n#endif\n\n// Determines whether Google Test can use tr1/tuple.  You can define\n// this macro to 0 to prevent Google Test from using tuple (any\n// feature depending on tuple with be disabled in this mode).\n#ifndef GTEST_HAS_TR1_TUPLE\n# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR)\n// STLport, provided with the Android NDK, has neither <tr1/tuple> or <tuple>.\n#  define GTEST_HAS_TR1_TUPLE 0\n# else\n// The user didn't tell us not to do it, so we assume it's OK.\n#  define GTEST_HAS_TR1_TUPLE 1\n# endif\n#endif  // GTEST_HAS_TR1_TUPLE\n\n// Determines whether Google Test's own tr1 tuple implementation\n// should be used.\n#ifndef GTEST_USE_OWN_TR1_TUPLE\n// The user didn't tell us, so we need to figure it out.\n\n// We use our own TR1 tuple if we aren't sure the user has an\n// implementation of it already.  At this time, libstdc++ 4.0.0+ and\n// MSVC 2010 are the only mainstream standard libraries that come\n// with a TR1 tuple implementation.  NVIDIA's CUDA NVCC compiler\n// pretends to be GCC by defining __GNUC__ and friends, but cannot\n// compile GCC's tuple implementation.  MSVC 2008 (9.0) provides TR1\n// tuple in a 323 MB Feature Pack download, which we cannot assume the\n// user has.  QNX's QCC compiler is a modified GCC but it doesn't\n// support TR1 tuple.  libc++ only provides std::tuple, in C++11 mode,\n// and it can be used with some compilers that define __GNUC__.\n# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \\\n      && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600\n#  define GTEST_ENV_HAS_TR1_TUPLE_ 1\n# endif\n\n// C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used\n// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6\n// can build with clang but need to use gcc4.2's libstdc++).\n# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325)\n#  define GTEST_ENV_HAS_STD_TUPLE_ 1\n# endif\n\n# if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_\n#  define GTEST_USE_OWN_TR1_TUPLE 0\n# else\n#  define GTEST_USE_OWN_TR1_TUPLE 1\n# endif\n\n#endif  // GTEST_USE_OWN_TR1_TUPLE\n\n// To avoid conditional compilation everywhere, we make it\n// gtest-port.h's responsibility to #include the header implementing\n// tr1/tuple.\n#if GTEST_HAS_TR1_TUPLE\n\n# if GTEST_USE_OWN_TR1_TUPLE\n#  include \"gtest/internal/gtest-tuple.h\"\n# elif GTEST_ENV_HAS_STD_TUPLE_\n#  include <tuple>\n// C++11 puts its tuple into the ::std namespace rather than\n// ::std::tr1.  gtest expects tuple to live in ::std::tr1, so put it there.\n// This causes undefined behavior, but supported compilers react in\n// the way we intend.\nnamespace std {\nnamespace tr1 {\nusing ::std::get;\nusing ::std::make_tuple;\nusing ::std::tuple;\nusing ::std::tuple_element;\nusing ::std::tuple_size;\n}\n}\n\n# elif GTEST_OS_SYMBIAN\n\n// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to\n// use STLport's tuple implementation, which unfortunately doesn't\n// work as the copy of STLport distributed with Symbian is incomplete.\n// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to\n// use its own tuple implementation.\n#  ifdef BOOST_HAS_TR1_TUPLE\n#   undef BOOST_HAS_TR1_TUPLE\n#  endif  // BOOST_HAS_TR1_TUPLE\n\n// This prevents <boost/tr1/detail/config.hpp>, which defines\n// BOOST_HAS_TR1_TUPLE, from being #included by Boost's <tuple>.\n#  define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED\n#  include <tuple>\n\n# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000)\n// GCC 4.0+ implements tr1/tuple in the <tr1/tuple> header.  This does\n// not conform to the TR1 spec, which requires the header to be <tuple>.\n\n#  if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302\n// Until version 4.3.2, gcc has a bug that causes <tr1/functional>,\n// which is #included by <tr1/tuple>, to not compile when RTTI is\n// disabled.  _TR1_FUNCTIONAL is the header guard for\n// <tr1/functional>.  Hence the following #define is a hack to prevent\n// <tr1/functional> from being included.\n#   define _TR1_FUNCTIONAL 1\n#   include <tr1/tuple>\n#   undef _TR1_FUNCTIONAL  // Allows the user to #include\n                        // <tr1/functional> if he chooses to.\n#  else\n#   include <tr1/tuple>  // NOLINT\n#  endif  // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302\n\n# else\n// If the compiler is not GCC 4.0+, we assume the user is using a\n// spec-conforming TR1 implementation.\n#  include <tuple>  // NOLINT\n# endif  // GTEST_USE_OWN_TR1_TUPLE\n\n#endif  // GTEST_HAS_TR1_TUPLE\n\n// Determines whether clone(2) is supported.\n// Usually it will only be available on Linux, excluding\n// Linux on the Itanium architecture.\n// Also see http://linux.die.net/man/2/clone.\n#ifndef GTEST_HAS_CLONE\n// The user didn't tell us, so we need to figure it out.\n\n# if GTEST_OS_LINUX && !defined(__ia64__)\n#  if GTEST_OS_LINUX_ANDROID\n// On Android, clone() is only available starting with Gingerbread.\n#    if __ANDROID_API__ >= 9\n#     define GTEST_HAS_CLONE 1\n#    else\n#     define GTEST_HAS_CLONE 0\n#    endif\n#  else\n#   define GTEST_HAS_CLONE 1\n#  endif\n# else\n#  define GTEST_HAS_CLONE 0\n# endif  // GTEST_OS_LINUX && !defined(__ia64__)\n\n#endif  // GTEST_HAS_CLONE\n\n// Determines whether to support stream redirection. This is used to test\n// output correctness and to implement death tests.\n#ifndef GTEST_HAS_STREAM_REDIRECTION\n// By default, we assume that stream redirection is supported on all\n// platforms except known mobile ones.\n# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN\n#  define GTEST_HAS_STREAM_REDIRECTION 0\n# else\n#  define GTEST_HAS_STREAM_REDIRECTION 1\n# endif  // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\n// Determines whether to support death tests.\n// Google Test does not support death tests for VC 7.1 and earlier as\n// abort() in a VC 7.1 application compiled as GUI in debug config\n// pops up a dialog window that cannot be suppressed programmatically.\n#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \\\n     (GTEST_OS_MAC && !GTEST_OS_IOS) || GTEST_OS_IOS_SIMULATOR || \\\n     (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \\\n     GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \\\n     GTEST_OS_OPENBSD || GTEST_OS_QNX)\n# define GTEST_HAS_DEATH_TEST 1\n# include <vector>  // NOLINT\n#endif\n\n// We don't support MSVC 7.1 with exceptions disabled now.  Therefore\n// all the compilers we care about are adequate for supporting\n// value-parameterized tests.\n#define GTEST_HAS_PARAM_TEST 1\n\n// Determines whether to support type-driven tests.\n\n// Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0,\n// Sun Pro CC, IBM Visual Age, and HP aCC support.\n#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \\\n    defined(__IBMCPP__) || defined(__HP_aCC)\n# define GTEST_HAS_TYPED_TEST 1\n# define GTEST_HAS_TYPED_TEST_P 1\n#endif\n\n// Determines whether to support Combine(). This only makes sense when\n// value-parameterized tests are enabled.  The implementation doesn't\n// work on Sun Studio since it doesn't understand templated conversion\n// operators.\n#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC)\n# define GTEST_HAS_COMBINE 1\n#endif\n\n// Determines whether the system compiler uses UTF-16 for encoding wide strings.\n#define GTEST_WIDE_STRING_USES_UTF16_ \\\n    (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX)\n\n// Determines whether test results can be streamed to a socket.\n#if GTEST_OS_LINUX\n# define GTEST_CAN_STREAM_RESULTS_ 1\n#endif\n\n// Defines some utility macros.\n\n// The GNU compiler emits a warning if nested \"if\" statements are followed by\n// an \"else\" statement and braces are not used to explicitly disambiguate the\n// \"else\" binding.  This leads to problems with code like:\n//\n//   if (gate)\n//     ASSERT_*(condition) << \"Some message\";\n//\n// The \"switch (0) case 0:\" idiom is used to suppress this.\n#ifdef __INTEL_COMPILER\n# define GTEST_AMBIGUOUS_ELSE_BLOCKER_\n#else\n# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default:  // NOLINT\n#endif\n\n// Use this annotation at the end of a struct/class definition to\n// prevent the compiler from optimizing away instances that are never\n// used.  This is useful when all interesting logic happens inside the\n// c'tor and / or d'tor.  Example:\n//\n//   struct Foo {\n//     Foo() { ... }\n//   } GTEST_ATTRIBUTE_UNUSED_;\n//\n// Also use it after a variable or parameter declaration to tell the\n// compiler the variable/parameter does not have to be used.\n#if defined(__GNUC__) && !defined(COMPILER_ICC)\n# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))\n#else\n# define GTEST_ATTRIBUTE_UNUSED_\n#endif\n\n// A macro to disallow operator=\n// This should be used in the private: declarations for a class.\n#define GTEST_DISALLOW_ASSIGN_(type)\\\n  void operator=(type const &)\n\n// A macro to disallow copy constructor and operator=\n// This should be used in the private: declarations for a class.\n#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\\\n  type(type const &);\\\n  GTEST_DISALLOW_ASSIGN_(type)\n\n// Tell the compiler to warn about unused return values for functions declared\n// with this macro.  The macro should be used on function declarations\n// following the argument list:\n//\n//   Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_;\n#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC)\n# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))\n#else\n# define GTEST_MUST_USE_RESULT_\n#endif  // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC\n\n// Determine whether the compiler supports Microsoft's Structured Exception\n// Handling.  This is supported by several Windows compilers but generally\n// does not exist on any other system.\n#ifndef GTEST_HAS_SEH\n// The user didn't tell us, so we need to figure it out.\n\n# if defined(_MSC_VER) || defined(__BORLANDC__)\n// These two compilers are known to support SEH.\n#  define GTEST_HAS_SEH 1\n# else\n// Assume no SEH.\n#  define GTEST_HAS_SEH 0\n# endif\n\n#endif  // GTEST_HAS_SEH\n\n#ifdef _MSC_VER\n\n# if GTEST_LINKED_AS_SHARED_LIBRARY\n#  define GTEST_API_ __declspec(dllimport)\n# elif GTEST_CREATE_SHARED_LIBRARY\n#  define GTEST_API_ __declspec(dllexport)\n# endif\n\n#endif  // _MSC_VER\n\n#ifndef GTEST_API_\n# define GTEST_API_\n#endif\n\n#ifdef __GNUC__\n// Ask the compiler to never inline a given function.\n# define GTEST_NO_INLINE_ __attribute__((noinline))\n#else\n# define GTEST_NO_INLINE_\n#endif\n\n// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project.\n#if defined(__GLIBCXX__) || defined(_LIBCPP_VERSION)\n# define GTEST_HAS_CXXABI_H_ 1\n#else\n# define GTEST_HAS_CXXABI_H_ 0\n#endif\n\nnamespace testing {\n\nclass Message;\n\nnamespace internal {\n\n// A secret type that Google Test users don't know about.  It has no\n// definition on purpose.  Therefore it's impossible to create a\n// Secret object, which is what we want.\nclass Secret;\n\n// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time\n// expression is true. For example, you could use it to verify the\n// size of a static array:\n//\n//   GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES,\n//                         content_type_names_incorrect_size);\n//\n// or to make sure a struct is smaller than a certain size:\n//\n//   GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large);\n//\n// The second argument to the macro is the name of the variable. If\n// the expression is false, most compilers will issue a warning/error\n// containing the name of the variable.\n\ntemplate <bool>\nstruct CompileAssert {\n};\n\n#define GTEST_COMPILE_ASSERT_(expr, msg) \\\n  typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \\\n      msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_\n\n// Implementation details of GTEST_COMPILE_ASSERT_:\n//\n// - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1\n//   elements (and thus is invalid) when the expression is false.\n//\n// - The simpler definition\n//\n//    #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1]\n//\n//   does not work, as gcc supports variable-length arrays whose sizes\n//   are determined at run-time (this is gcc's extension and not part\n//   of the C++ standard).  As a result, gcc fails to reject the\n//   following code with the simple definition:\n//\n//     int foo;\n//     GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is\n//                                      // not a compile-time constant.\n//\n// - By using the type CompileAssert<(bool(expr))>, we ensures that\n//   expr is a compile-time constant.  (Template arguments must be\n//   determined at compile-time.)\n//\n// - The outter parentheses in CompileAssert<(bool(expr))> are necessary\n//   to work around a bug in gcc 3.4.4 and 4.0.1.  If we had written\n//\n//     CompileAssert<bool(expr)>\n//\n//   instead, these compilers will refuse to compile\n//\n//     GTEST_COMPILE_ASSERT_(5 > 0, some_message);\n//\n//   (They seem to think the \">\" in \"5 > 0\" marks the end of the\n//   template argument list.)\n//\n// - The array size is (bool(expr) ? 1 : -1), instead of simply\n//\n//     ((expr) ? 1 : -1).\n//\n//   This is to avoid running into a bug in MS VC 7.1, which\n//   causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1.\n\n// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h.\n//\n// This template is declared, but intentionally undefined.\ntemplate <typename T1, typename T2>\nstruct StaticAssertTypeEqHelper;\n\ntemplate <typename T>\nstruct StaticAssertTypeEqHelper<T, T> {};\n\n#if GTEST_HAS_GLOBAL_STRING\ntypedef ::string string;\n#else\ntypedef ::std::string string;\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n#if GTEST_HAS_GLOBAL_WSTRING\ntypedef ::wstring wstring;\n#elif GTEST_HAS_STD_WSTRING\ntypedef ::std::wstring wstring;\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n// A helper for suppressing warnings on constant condition.  It just\n// returns 'condition'.\nGTEST_API_ bool IsTrue(bool condition);\n\n// Defines scoped_ptr.\n\n// This implementation of scoped_ptr is PARTIAL - it only contains\n// enough stuff to satisfy Google Test's need.\ntemplate <typename T>\nclass scoped_ptr {\n public:\n  typedef T element_type;\n\n  explicit scoped_ptr(T* p = NULL) : ptr_(p) {}\n  ~scoped_ptr() { reset(); }\n\n  T& operator*() const { return *ptr_; }\n  T* operator->() const { return ptr_; }\n  T* get() const { return ptr_; }\n\n  T* release() {\n    T* const ptr = ptr_;\n    ptr_ = NULL;\n    return ptr;\n  }\n\n  void reset(T* p = NULL) {\n    if (p != ptr_) {\n      if (IsTrue(sizeof(T) > 0)) {  // Makes sure T is a complete type.\n        delete ptr_;\n      }\n      ptr_ = p;\n    }\n  }\n\n private:\n  T* ptr_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr);\n};\n\n// Defines RE.\n\n// A simple C++ wrapper for <regex.h>.  It uses the POSIX Extended\n// Regular Expression syntax.\nclass GTEST_API_ RE {\n public:\n  // A copy constructor is required by the Standard to initialize object\n  // references from r-values.\n  RE(const RE& other) { Init(other.pattern()); }\n\n  // Constructs an RE from a string.\n  RE(const ::std::string& regex) { Init(regex.c_str()); }  // NOLINT\n\n#if GTEST_HAS_GLOBAL_STRING\n\n  RE(const ::string& regex) { Init(regex.c_str()); }  // NOLINT\n\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n  RE(const char* regex) { Init(regex); }  // NOLINT\n  ~RE();\n\n  // Returns the string representation of the regex.\n  const char* pattern() const { return pattern_; }\n\n  // FullMatch(str, re) returns true iff regular expression re matches\n  // the entire str.\n  // PartialMatch(str, re) returns true iff regular expression re\n  // matches a substring of str (including str itself).\n  //\n  // TODO(wan@google.com): make FullMatch() and PartialMatch() work\n  // when str contains NUL characters.\n  static bool FullMatch(const ::std::string& str, const RE& re) {\n    return FullMatch(str.c_str(), re);\n  }\n  static bool PartialMatch(const ::std::string& str, const RE& re) {\n    return PartialMatch(str.c_str(), re);\n  }\n\n#if GTEST_HAS_GLOBAL_STRING\n\n  static bool FullMatch(const ::string& str, const RE& re) {\n    return FullMatch(str.c_str(), re);\n  }\n  static bool PartialMatch(const ::string& str, const RE& re) {\n    return PartialMatch(str.c_str(), re);\n  }\n\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n  static bool FullMatch(const char* str, const RE& re);\n  static bool PartialMatch(const char* str, const RE& re);\n\n private:\n  void Init(const char* regex);\n\n  // We use a const char* instead of an std::string, as Google Test used to be\n  // used where std::string is not available.  TODO(wan@google.com): change to\n  // std::string.\n  const char* pattern_;\n  bool is_valid_;\n\n#if GTEST_USES_POSIX_RE\n\n  regex_t full_regex_;     // For FullMatch().\n  regex_t partial_regex_;  // For PartialMatch().\n\n#else  // GTEST_USES_SIMPLE_RE\n\n  const char* full_pattern_;  // For FullMatch();\n\n#endif\n\n  GTEST_DISALLOW_ASSIGN_(RE);\n};\n\n// Formats a source file path and a line number as they would appear\n// in an error message from the compiler used to compile this code.\nGTEST_API_ ::std::string FormatFileLocation(const char* file, int line);\n\n// Formats a file location for compiler-independent XML output.\n// Although this function is not platform dependent, we put it next to\n// FormatFileLocation in order to contrast the two functions.\nGTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file,\n                                                               int line);\n\n// Defines logging utilities:\n//   GTEST_LOG_(severity) - logs messages at the specified severity level. The\n//                          message itself is streamed into the macro.\n//   LogToStderr()  - directs all log messages to stderr.\n//   FlushInfoLog() - flushes informational log messages.\n\nenum GTestLogSeverity {\n  GTEST_INFO,\n  GTEST_WARNING,\n  GTEST_ERROR,\n  GTEST_FATAL\n};\n\n// Formats log entry severity, provides a stream object for streaming the\n// log message, and terminates the message with a newline when going out of\n// scope.\nclass GTEST_API_ GTestLog {\n public:\n  GTestLog(GTestLogSeverity severity, const char* file, int line);\n\n  // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.\n  ~GTestLog();\n\n  ::std::ostream& GetStream() { return ::std::cerr; }\n\n private:\n  const GTestLogSeverity severity_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog);\n};\n\n#define GTEST_LOG_(severity) \\\n    ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \\\n                                  __FILE__, __LINE__).GetStream()\n\ninline void LogToStderr() {}\ninline void FlushInfoLog() { fflush(NULL); }\n\n// INTERNAL IMPLEMENTATION - DO NOT USE.\n//\n// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition\n// is not satisfied.\n//  Synopsys:\n//    GTEST_CHECK_(boolean_condition);\n//     or\n//    GTEST_CHECK_(boolean_condition) << \"Additional message\";\n//\n//    This checks the condition and if the condition is not satisfied\n//    it prints message about the condition violation, including the\n//    condition itself, plus additional message streamed into it, if any,\n//    and then it aborts the program. It aborts the program irrespective of\n//    whether it is built in the debug mode or not.\n#define GTEST_CHECK_(condition) \\\n    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n    if (::testing::internal::IsTrue(condition)) \\\n      ; \\\n    else \\\n      GTEST_LOG_(FATAL) << \"Condition \" #condition \" failed. \"\n\n// An all-mode assert to verify that the given POSIX-style function\n// call returns 0 (indicating success).  Known limitation: this\n// doesn't expand to a balanced 'if' statement, so enclose the macro\n// in {} if you need to use it as the only statement in an 'if'\n// branch.\n#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \\\n  if (const int gtest_error = (posix_call)) \\\n    GTEST_LOG_(FATAL) << #posix_call << \"failed with error \" \\\n                      << gtest_error\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Use ImplicitCast_ as a safe version of static_cast for upcasting in\n// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a\n// const Foo*).  When you use ImplicitCast_, the compiler checks that\n// the cast is safe.  Such explicit ImplicitCast_s are necessary in\n// surprisingly many situations where C++ demands an exact type match\n// instead of an argument type convertable to a target type.\n//\n// The syntax for using ImplicitCast_ is the same as for static_cast:\n//\n//   ImplicitCast_<ToType>(expr)\n//\n// ImplicitCast_ would have been part of the C++ standard library,\n// but the proposal was submitted too late.  It will probably make\n// its way into the language in the future.\n//\n// This relatively ugly name is intentional. It prevents clashes with\n// similar functions users may have (e.g., implicit_cast). The internal\n// namespace alone is not enough because the function can be found by ADL.\ntemplate<typename To>\ninline To ImplicitCast_(To x) { return x; }\n\n// When you upcast (that is, cast a pointer from type Foo to type\n// SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts\n// always succeed.  When you downcast (that is, cast a pointer from\n// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because\n// how do you know the pointer is really of type SubclassOfFoo?  It\n// could be a bare Foo, or of type DifferentSubclassOfFoo.  Thus,\n// when you downcast, you should use this macro.  In debug mode, we\n// use dynamic_cast<> to double-check the downcast is legal (we die\n// if it's not).  In normal mode, we do the efficient static_cast<>\n// instead.  Thus, it's important to test in debug mode to make sure\n// the cast is legal!\n//    This is the only place in the code we should use dynamic_cast<>.\n// In particular, you SHOULDN'T be using dynamic_cast<> in order to\n// do RTTI (eg code like this:\n//    if (dynamic_cast<Subclass1>(foo)) HandleASubclass1Object(foo);\n//    if (dynamic_cast<Subclass2>(foo)) HandleASubclass2Object(foo);\n// You should design the code some other way not to need this.\n//\n// This relatively ugly name is intentional. It prevents clashes with\n// similar functions users may have (e.g., down_cast). The internal\n// namespace alone is not enough because the function can be found by ADL.\ntemplate<typename To, typename From>  // use like this: DownCast_<T*>(foo);\ninline To DownCast_(From* f) {  // so we only accept pointers\n  // Ensures that To is a sub-type of From *.  This test is here only\n  // for compile-time type checking, and has no overhead in an\n  // optimized build at run-time, as it will be optimized away\n  // completely.\n  if (false) {\n    const To to = NULL;\n    ::testing::internal::ImplicitCast_<From*>(to);\n  }\n\n#if GTEST_HAS_RTTI\n  // RTTI: debug mode only!\n  GTEST_CHECK_(f == NULL || dynamic_cast<To>(f) != NULL);\n#endif\n  return static_cast<To>(f);\n}\n\n// Downcasts the pointer of type Base to Derived.\n// Derived must be a subclass of Base. The parameter MUST\n// point to a class of type Derived, not any subclass of it.\n// When RTTI is available, the function performs a runtime\n// check to enforce this.\ntemplate <class Derived, class Base>\nDerived* CheckedDowncastToActualType(Base* base) {\n#if GTEST_HAS_RTTI\n  GTEST_CHECK_(typeid(*base) == typeid(Derived));\n  return dynamic_cast<Derived*>(base);  // NOLINT\n#else\n  return static_cast<Derived*>(base);  // Poor man's downcast.\n#endif\n}\n\n#if GTEST_HAS_STREAM_REDIRECTION\n\n// Defines the stderr capturer:\n//   CaptureStdout     - starts capturing stdout.\n//   GetCapturedStdout - stops capturing stdout and returns the captured string.\n//   CaptureStderr     - starts capturing stderr.\n//   GetCapturedStderr - stops capturing stderr and returns the captured string.\n//\nGTEST_API_ void CaptureStdout();\nGTEST_API_ std::string GetCapturedStdout();\nGTEST_API_ void CaptureStderr();\nGTEST_API_ std::string GetCapturedStderr();\n\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\n\n#if GTEST_HAS_DEATH_TEST\n\nconst ::std::vector<testing::internal::string>& GetInjectableArgvs();\nvoid SetInjectableArgvs(const ::std::vector<testing::internal::string>*\n                             new_argvs);\n\n// A copy of all command line arguments.  Set by InitGoogleTest().\nextern ::std::vector<testing::internal::string> g_argvs;\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Defines synchronization primitives.\n\n#if GTEST_HAS_PTHREAD\n\n// Sleeps for (roughly) n milli-seconds.  This function is only for\n// testing Google Test's own constructs.  Don't use it in user tests,\n// either directly or indirectly.\ninline void SleepMilliseconds(int n) {\n  const timespec time = {\n    0,                  // 0 seconds.\n    n * 1000L * 1000L,  // And n ms.\n  };\n  nanosleep(&time, NULL);\n}\n\n// Allows a controller thread to pause execution of newly created\n// threads until notified.  Instances of this class must be created\n// and destroyed in the controller thread.\n//\n// This class is only for testing Google Test's own constructs. Do not\n// use it in user tests, either directly or indirectly.\nclass Notification {\n public:\n  Notification() : notified_(false) {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));\n  }\n  ~Notification() {\n    pthread_mutex_destroy(&mutex_);\n  }\n\n  // Notifies all threads created with this notification to start. Must\n  // be called from the controller thread.\n  void Notify() {\n    pthread_mutex_lock(&mutex_);\n    notified_ = true;\n    pthread_mutex_unlock(&mutex_);\n  }\n\n  // Blocks until the controller thread notifies. Must be called from a test\n  // thread.\n  void WaitForNotification() {\n    for (;;) {\n      pthread_mutex_lock(&mutex_);\n      const bool notified = notified_;\n      pthread_mutex_unlock(&mutex_);\n      if (notified)\n        break;\n      SleepMilliseconds(10);\n    }\n  }\n\n private:\n  pthread_mutex_t mutex_;\n  bool notified_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);\n};\n\n// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.\n// Consequently, it cannot select a correct instantiation of ThreadWithParam\n// in order to call its Run(). Introducing ThreadWithParamBase as a\n// non-templated base class for ThreadWithParam allows us to bypass this\n// problem.\nclass ThreadWithParamBase {\n public:\n  virtual ~ThreadWithParamBase() {}\n  virtual void Run() = 0;\n};\n\n// pthread_create() accepts a pointer to a function type with the C linkage.\n// According to the Standard (7.5/1), function types with different linkages\n// are different even if they are otherwise identical.  Some compilers (for\n// example, SunStudio) treat them as different types.  Since class methods\n// cannot be defined with C-linkage we need to define a free C-function to\n// pass into pthread_create().\nextern \"C\" inline void* ThreadFuncWithCLinkage(void* thread) {\n  static_cast<ThreadWithParamBase*>(thread)->Run();\n  return NULL;\n}\n\n// Helper class for testing Google Test's multi-threading constructs.\n// To use it, write:\n//\n//   void ThreadFunc(int param) { /* Do things with param */ }\n//   Notification thread_can_start;\n//   ...\n//   // The thread_can_start parameter is optional; you can supply NULL.\n//   ThreadWithParam<int> thread(&ThreadFunc, 5, &thread_can_start);\n//   thread_can_start.Notify();\n//\n// These classes are only for testing Google Test's own constructs. Do\n// not use them in user tests, either directly or indirectly.\ntemplate <typename T>\nclass ThreadWithParam : public ThreadWithParamBase {\n public:\n  typedef void (*UserThreadFunc)(T);\n\n  ThreadWithParam(\n      UserThreadFunc func, T param, Notification* thread_can_start)\n      : func_(func),\n        param_(param),\n        thread_can_start_(thread_can_start),\n        finished_(false) {\n    ThreadWithParamBase* const base = this;\n    // The thread can be created only after all fields except thread_\n    // have been initialized.\n    GTEST_CHECK_POSIX_SUCCESS_(\n        pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base));\n  }\n  ~ThreadWithParam() { Join(); }\n\n  void Join() {\n    if (!finished_) {\n      GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0));\n      finished_ = true;\n    }\n  }\n\n  virtual void Run() {\n    if (thread_can_start_ != NULL)\n      thread_can_start_->WaitForNotification();\n    func_(param_);\n  }\n\n private:\n  const UserThreadFunc func_;  // User-supplied thread function.\n  const T param_;  // User-supplied parameter to the thread function.\n  // When non-NULL, used to block execution until the controller thread\n  // notifies.\n  Notification* const thread_can_start_;\n  bool finished_;  // true iff we know that the thread function has finished.\n  pthread_t thread_;  // The native thread object.\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam);\n};\n\n// MutexBase and Mutex implement mutex on pthreads-based platforms. They\n// are used in conjunction with class MutexLock:\n//\n//   Mutex mutex;\n//   ...\n//   MutexLock lock(&mutex);  // Acquires the mutex and releases it at the end\n//                            // of the current scope.\n//\n// MutexBase implements behavior for both statically and dynamically\n// allocated mutexes.  Do not use MutexBase directly.  Instead, write\n// the following to define a static mutex:\n//\n//   GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex);\n//\n// You can forward declare a static mutex like this:\n//\n//   GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex);\n//\n// To create a dynamic mutex, just define an object of type Mutex.\nclass MutexBase {\n public:\n  // Acquires this mutex.\n  void Lock() {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));\n    owner_ = pthread_self();\n    has_owner_ = true;\n  }\n\n  // Releases this mutex.\n  void Unlock() {\n    // Since the lock is being released the owner_ field should no longer be\n    // considered valid. We don't protect writing to has_owner_ here, as it's\n    // the caller's responsibility to ensure that the current thread holds the\n    // mutex when this is called.\n    has_owner_ = false;\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));\n  }\n\n  // Does nothing if the current thread holds the mutex. Otherwise, crashes\n  // with high probability.\n  void AssertHeld() const {\n    GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))\n        << \"The current thread is not holding the mutex @\" << this;\n  }\n\n  // A static mutex may be used before main() is entered.  It may even\n  // be used before the dynamic initialization stage.  Therefore we\n  // must be able to initialize a static mutex object at link time.\n  // This means MutexBase has to be a POD and its member variables\n  // have to be public.\n public:\n  pthread_mutex_t mutex_;  // The underlying pthread mutex.\n  // has_owner_ indicates whether the owner_ field below contains a valid thread\n  // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All\n  // accesses to the owner_ field should be protected by a check of this field.\n  // An alternative might be to memset() owner_ to all zeros, but there's no\n  // guarantee that a zero'd pthread_t is necessarily invalid or even different\n  // from pthread_self().\n  bool has_owner_;\n  pthread_t owner_;  // The thread holding the mutex.\n};\n\n// Forward-declares a static mutex.\n# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \\\n    extern ::testing::internal::MutexBase mutex\n\n// Defines and statically (i.e. at link time) initializes a static mutex.\n// The initialization list here does not explicitly initialize each field,\n// instead relying on default initialization for the unspecified fields. In\n// particular, the owner_ field (a pthread_t) is not explicitly initialized.\n// This allows initialization to work whether pthread_t is a scalar or struct.\n// The flag -Wmissing-field-initializers must not be specified for this to work.\n# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \\\n    ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false }\n\n// The Mutex class can only be used for mutexes created at runtime. It\n// shares its API with MutexBase otherwise.\nclass Mutex : public MutexBase {\n public:\n  Mutex() {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));\n    has_owner_ = false;\n  }\n  ~Mutex() {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));\n  }\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);\n};\n\n// We cannot name this class MutexLock as the ctor declaration would\n// conflict with a macro named MutexLock, which is defined on some\n// platforms.  Hence the typedef trick below.\nclass GTestMutexLock {\n public:\n  explicit GTestMutexLock(MutexBase* mutex)\n      : mutex_(mutex) { mutex_->Lock(); }\n\n  ~GTestMutexLock() { mutex_->Unlock(); }\n\n private:\n  MutexBase* const mutex_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock);\n};\n\ntypedef GTestMutexLock MutexLock;\n\n// Helpers for ThreadLocal.\n\n// pthread_key_create() requires DeleteThreadLocalValue() to have\n// C-linkage.  Therefore it cannot be templatized to access\n// ThreadLocal<T>.  Hence the need for class\n// ThreadLocalValueHolderBase.\nclass ThreadLocalValueHolderBase {\n public:\n  virtual ~ThreadLocalValueHolderBase() {}\n};\n\n// Called by pthread to delete thread-local data stored by\n// pthread_setspecific().\nextern \"C\" inline void DeleteThreadLocalValue(void* value_holder) {\n  delete static_cast<ThreadLocalValueHolderBase*>(value_holder);\n}\n\n// Implements thread-local storage on pthreads-based systems.\n//\n//   // Thread 1\n//   ThreadLocal<int> tl(100);  // 100 is the default value for each thread.\n//\n//   // Thread 2\n//   tl.set(150);  // Changes the value for thread 2 only.\n//   EXPECT_EQ(150, tl.get());\n//\n//   // Thread 1\n//   EXPECT_EQ(100, tl.get());  // In thread 1, tl has the original value.\n//   tl.set(200);\n//   EXPECT_EQ(200, tl.get());\n//\n// The template type argument T must have a public copy constructor.\n// In addition, the default ThreadLocal constructor requires T to have\n// a public default constructor.\n//\n// An object managed for a thread by a ThreadLocal instance is deleted\n// when the thread exits.  Or, if the ThreadLocal instance dies in\n// that thread, when the ThreadLocal dies.  It's the user's\n// responsibility to ensure that all other threads using a ThreadLocal\n// have exited when it dies, or the per-thread objects for those\n// threads will not be deleted.\n//\n// Google Test only uses global ThreadLocal objects.  That means they\n// will die after main() has returned.  Therefore, no per-thread\n// object managed by Google Test will be leaked as long as all threads\n// using Google Test have exited when main() returns.\ntemplate <typename T>\nclass ThreadLocal {\n public:\n  ThreadLocal() : key_(CreateKey()),\n                  default_() {}\n  explicit ThreadLocal(const T& value) : key_(CreateKey()),\n                                         default_(value) {}\n\n  ~ThreadLocal() {\n    // Destroys the managed object for the current thread, if any.\n    DeleteThreadLocalValue(pthread_getspecific(key_));\n\n    // Releases resources associated with the key.  This will *not*\n    // delete managed objects for other threads.\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_));\n  }\n\n  T* pointer() { return GetOrCreateValue(); }\n  const T* pointer() const { return GetOrCreateValue(); }\n  const T& get() const { return *pointer(); }\n  void set(const T& value) { *pointer() = value; }\n\n private:\n  // Holds a value of type T.\n  class ValueHolder : public ThreadLocalValueHolderBase {\n   public:\n    explicit ValueHolder(const T& value) : value_(value) {}\n\n    T* pointer() { return &value_; }\n\n   private:\n    T value_;\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);\n  };\n\n  static pthread_key_t CreateKey() {\n    pthread_key_t key;\n    // When a thread exits, DeleteThreadLocalValue() will be called on\n    // the object managed for that thread.\n    GTEST_CHECK_POSIX_SUCCESS_(\n        pthread_key_create(&key, &DeleteThreadLocalValue));\n    return key;\n  }\n\n  T* GetOrCreateValue() const {\n    ThreadLocalValueHolderBase* const holder =\n        static_cast<ThreadLocalValueHolderBase*>(pthread_getspecific(key_));\n    if (holder != NULL) {\n      return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();\n    }\n\n    ValueHolder* const new_holder = new ValueHolder(default_);\n    ThreadLocalValueHolderBase* const holder_base = new_holder;\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base));\n    return new_holder->pointer();\n  }\n\n  // A key pthreads uses for looking up per-thread values.\n  const pthread_key_t key_;\n  const T default_;  // The default value for each thread.\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);\n};\n\n# define GTEST_IS_THREADSAFE 1\n\n#else  // GTEST_HAS_PTHREAD\n\n// A dummy implementation of synchronization primitives (mutex, lock,\n// and thread-local variable).  Necessary for compiling Google Test where\n// mutex is not supported - using Google Test in multiple threads is not\n// supported on such platforms.\n\nclass Mutex {\n public:\n  Mutex() {}\n  void Lock() {}\n  void Unlock() {}\n  void AssertHeld() const {}\n};\n\n# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \\\n  extern ::testing::internal::Mutex mutex\n\n# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex\n\nclass GTestMutexLock {\n public:\n  explicit GTestMutexLock(Mutex*) {}  // NOLINT\n};\n\ntypedef GTestMutexLock MutexLock;\n\ntemplate <typename T>\nclass ThreadLocal {\n public:\n  ThreadLocal() : value_() {}\n  explicit ThreadLocal(const T& value) : value_(value) {}\n  T* pointer() { return &value_; }\n  const T* pointer() const { return &value_; }\n  const T& get() const { return value_; }\n  void set(const T& value) { value_ = value; }\n private:\n  T value_;\n};\n\n// The above synchronization primitives have dummy implementations.\n// Therefore Google Test is not thread-safe.\n# define GTEST_IS_THREADSAFE 0\n\n#endif  // GTEST_HAS_PTHREAD\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nGTEST_API_ size_t GetThreadCount();\n\n// Passing non-POD classes through ellipsis (...) crashes the ARM\n// compiler and generates a warning in Sun Studio.  The Nokia Symbian\n// and the IBM XL C/C++ compiler try to instantiate a copy constructor\n// for objects passed through ellipsis (...), failing for uncopyable\n// objects.  We define this to ensure that only POD is passed through\n// ellipsis on these systems.\n#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)\n// We lose support for NULL detection where the compiler doesn't like\n// passing non-POD classes through ellipsis (...).\n# define GTEST_ELLIPSIS_NEEDS_POD_ 1\n#else\n# define GTEST_CAN_COMPARE_NULL 1\n#endif\n\n// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between\n// const T& and const T* in a function template.  These compilers\n// _can_ decide between class template specializations for T and T*,\n// so a tr1::type_traits-like is_pointer works.\n#if defined(__SYMBIAN32__) || defined(__IBMCPP__)\n# define GTEST_NEEDS_IS_POINTER_ 1\n#endif\n\ntemplate <bool bool_value>\nstruct bool_constant {\n  typedef bool_constant<bool_value> type;\n  static const bool value = bool_value;\n};\ntemplate <bool bool_value> const bool bool_constant<bool_value>::value;\n\ntypedef bool_constant<false> false_type;\ntypedef bool_constant<true> true_type;\n\ntemplate <typename T>\nstruct is_pointer : public false_type {};\n\ntemplate <typename T>\nstruct is_pointer<T*> : public true_type {};\n\ntemplate <typename Iterator>\nstruct IteratorTraits {\n  typedef typename Iterator::value_type value_type;\n};\n\ntemplate <typename T>\nstruct IteratorTraits<T*> {\n  typedef T value_type;\n};\n\ntemplate <typename T>\nstruct IteratorTraits<const T*> {\n  typedef T value_type;\n};\n\n#if GTEST_OS_WINDOWS\n# define GTEST_PATH_SEP_ \"\\\\\"\n# define GTEST_HAS_ALT_PATH_SEP_ 1\n// The biggest signed integer type the compiler supports.\ntypedef __int64 BiggestInt;\n#else\n# define GTEST_PATH_SEP_ \"/\"\n# define GTEST_HAS_ALT_PATH_SEP_ 0\ntypedef long long BiggestInt;  // NOLINT\n#endif  // GTEST_OS_WINDOWS\n\n// Utilities for char.\n\n// isspace(int ch) and friends accept an unsigned char or EOF.  char\n// may be signed, depending on the compiler (or compiler flags).\n// Therefore we need to cast a char to unsigned char before calling\n// isspace(), etc.\n\ninline bool IsAlpha(char ch) {\n  return isalpha(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsAlNum(char ch) {\n  return isalnum(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsDigit(char ch) {\n  return isdigit(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsLower(char ch) {\n  return islower(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsSpace(char ch) {\n  return isspace(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsUpper(char ch) {\n  return isupper(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsXDigit(char ch) {\n  return isxdigit(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsXDigit(wchar_t ch) {\n  const unsigned char low_byte = static_cast<unsigned char>(ch);\n  return ch == low_byte && isxdigit(low_byte) != 0;\n}\n\ninline char ToLower(char ch) {\n  return static_cast<char>(tolower(static_cast<unsigned char>(ch)));\n}\ninline char ToUpper(char ch) {\n  return static_cast<char>(toupper(static_cast<unsigned char>(ch)));\n}\n\n// The testing::internal::posix namespace holds wrappers for common\n// POSIX functions.  These wrappers hide the differences between\n// Windows/MSVC and POSIX systems.  Since some compilers define these\n// standard functions as macros, the wrapper cannot have the same name\n// as the wrapped function.\n\nnamespace posix {\n\n// Functions with a different name on Windows.\n\n#if GTEST_OS_WINDOWS\n\ntypedef struct _stat StatStruct;\n\n# ifdef __BORLANDC__\ninline int IsATTY(int fd) { return isatty(fd); }\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return stricmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return strdup(src); }\n# else  // !__BORLANDC__\n#  if GTEST_OS_WINDOWS_MOBILE\ninline int IsATTY(int /* fd */) { return 0; }\n#  else\ninline int IsATTY(int fd) { return _isatty(fd); }\n#  endif  // GTEST_OS_WINDOWS_MOBILE\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return _stricmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return _strdup(src); }\n# endif  // __BORLANDC__\n\n# if GTEST_OS_WINDOWS_MOBILE\ninline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); }\n// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this\n// time and thus not defined there.\n# else\ninline int FileNo(FILE* file) { return _fileno(file); }\ninline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); }\ninline int RmDir(const char* dir) { return _rmdir(dir); }\ninline bool IsDir(const StatStruct& st) {\n  return (_S_IFDIR & st.st_mode) != 0;\n}\n# endif  // GTEST_OS_WINDOWS_MOBILE\n\n#else\n\ntypedef struct stat StatStruct;\n\ninline int FileNo(FILE* file) { return fileno(file); }\ninline int IsATTY(int fd) { return isatty(fd); }\ninline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); }\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return strcasecmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return strdup(src); }\ninline int RmDir(const char* dir) { return rmdir(dir); }\ninline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }\n\n#endif  // GTEST_OS_WINDOWS\n\n// Functions deprecated by MSVC 8.0.\n\n#ifdef _MSC_VER\n// Temporarily disable warning 4996 (deprecated function).\n# pragma warning(push)\n# pragma warning(disable:4996)\n#endif\n\ninline const char* StrNCpy(char* dest, const char* src, size_t n) {\n  return strncpy(dest, src, n);\n}\n\n// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and\n// StrError() aren't needed on Windows CE at this time and thus not\n// defined there.\n\n#if !GTEST_OS_WINDOWS_MOBILE\ninline int ChDir(const char* dir) { return chdir(dir); }\n#endif\ninline FILE* FOpen(const char* path, const char* mode) {\n  return fopen(path, mode);\n}\n#if !GTEST_OS_WINDOWS_MOBILE\ninline FILE *FReopen(const char* path, const char* mode, FILE* stream) {\n  return freopen(path, mode, stream);\n}\ninline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); }\n#endif\ninline int FClose(FILE* fp) { return fclose(fp); }\n#if !GTEST_OS_WINDOWS_MOBILE\ninline int Read(int fd, void* buf, unsigned int count) {\n  return static_cast<int>(read(fd, buf, count));\n}\ninline int Write(int fd, const void* buf, unsigned int count) {\n  return static_cast<int>(write(fd, buf, count));\n}\ninline int Close(int fd) { return close(fd); }\ninline const char* StrError(int errnum) { return strerror(errnum); }\n#endif\ninline const char* GetEnv(const char* name) {\n#if GTEST_OS_WINDOWS_MOBILE\n  // We are on Windows CE, which has no environment variables.\n  return NULL;\n#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)\n  // Environment variables which we programmatically clear will be set to the\n  // empty string rather than unset (NULL).  Handle that case.\n  const char* const env = getenv(name);\n  return (env != NULL && env[0] != '\\0') ? env : NULL;\n#else\n  return getenv(name);\n#endif\n}\n\n#ifdef _MSC_VER\n# pragma warning(pop)  // Restores the warning state.\n#endif\n\n#if GTEST_OS_WINDOWS_MOBILE\n// Windows CE has no C library. The abort() function is used in\n// several places in Google Test. This implementation provides a reasonable\n// imitation of standard behaviour.\nvoid Abort();\n#elif defined(__ANDROID__) && defined(__mips__)\n// Work-around broken abort() on Android/MIPS\ninline void Abort() { fflush(NULL); exit(1); }\n#else\ninline void Abort() { abort(); }\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n}  // namespace posix\n\n// MSVC \"deprecates\" snprintf and issues warnings wherever it is used.  In\n// order to avoid these warnings, we need to use _snprintf or _snprintf_s on\n// MSVC-based platforms.  We map the GTEST_SNPRINTF_ macro to the appropriate\n// function in order to achieve that.  We use macro definition here because\n// snprintf is a variadic function.\n#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE\n// MSVC 2005 and above support variadic macros.\n# define GTEST_SNPRINTF_(buffer, size, format, ...) \\\n     _snprintf_s(buffer, size, size, format, __VA_ARGS__)\n#elif defined(_MSC_VER)\n// Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't\n// complain about _snprintf.\n# define GTEST_SNPRINTF_ _snprintf\n#else\n# define GTEST_SNPRINTF_ snprintf\n#endif\n\n// The maximum number a BiggestInt can represent.  This definition\n// works no matter BiggestInt is represented in one's complement or\n// two's complement.\n//\n// We cannot rely on numeric_limits in STL, as __int64 and long long\n// are not part of standard C++ and numeric_limits doesn't need to be\n// defined for them.\nconst BiggestInt kMaxBiggestInt =\n    ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1));\n\n// This template class serves as a compile-time function from size to\n// type.  It maps a size in bytes to a primitive type with that\n// size. e.g.\n//\n//   TypeWithSize<4>::UInt\n//\n// is typedef-ed to be unsigned int (unsigned integer made up of 4\n// bytes).\n//\n// Such functionality should belong to STL, but I cannot find it\n// there.\n//\n// Google Test uses this class in the implementation of floating-point\n// comparison.\n//\n// For now it only handles UInt (unsigned int) as that's all Google Test\n// needs.  Other types can be easily added in the future if need\n// arises.\ntemplate <size_t size>\nclass TypeWithSize {\n public:\n  // This prevents the user from using TypeWithSize<N> with incorrect\n  // values of N.\n  typedef void UInt;\n};\n\n// The specialization for size 4.\ntemplate <>\nclass TypeWithSize<4> {\n public:\n  // unsigned int has size 4 in both gcc and MSVC.\n  //\n  // As base/basictypes.h doesn't compile on Windows, we cannot use\n  // uint32, uint64, and etc here.\n  typedef int Int;\n  typedef unsigned int UInt;\n};\n\n// The specialization for size 8.\ntemplate <>\nclass TypeWithSize<8> {\n public:\n#if GTEST_OS_WINDOWS\n  typedef __int64 Int;\n  typedef unsigned __int64 UInt;\n#else\n  typedef long long Int;  // NOLINT\n  typedef unsigned long long UInt;  // NOLINT\n#endif  // GTEST_OS_WINDOWS\n};\n\n// Integer types of known sizes.\ntypedef TypeWithSize<4>::Int Int32;\ntypedef TypeWithSize<4>::UInt UInt32;\ntypedef TypeWithSize<8>::Int Int64;\ntypedef TypeWithSize<8>::UInt UInt64;\ntypedef TypeWithSize<8>::Int TimeInMillis;  // Represents time in milliseconds.\n\n// Utilities for command line flags and environment variables.\n\n// Macro for referencing flags.\n#define GTEST_FLAG(name) FLAGS_gtest_##name\n\n// Macros for declaring flags.\n#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)\n#define GTEST_DECLARE_int32_(name) \\\n    GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)\n#define GTEST_DECLARE_string_(name) \\\n    GTEST_API_ extern ::std::string GTEST_FLAG(name)\n\n// Macros for defining flags.\n#define GTEST_DEFINE_bool_(name, default_val, doc) \\\n    GTEST_API_ bool GTEST_FLAG(name) = (default_val)\n#define GTEST_DEFINE_int32_(name, default_val, doc) \\\n    GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)\n#define GTEST_DEFINE_string_(name, default_val, doc) \\\n    GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)\n\n// Thread annotations\n#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)\n#define GTEST_LOCK_EXCLUDED_(locks)\n\n// Parses 'str' for a 32-bit signed integer.  If successful, writes the result\n// to *value and returns true; otherwise leaves *value unchanged and returns\n// false.\n// TODO(chandlerc): Find a better way to refactor flag and environment parsing\n// out of both gtest-port.cc and gtest.cc to avoid exporting this utility\n// function.\nbool ParseInt32(const Message& src_text, const char* str, Int32* value);\n\n// Parses a bool/Int32/string from the environment variable\n// corresponding to the given Google Test flag.\nbool BoolFromGTestEnv(const char* flag, bool default_val);\nGTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val);\nconst char* StringFromGTestEnv(const char* flag, const char* default_val);\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-string.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file declares the String class and functions used internally by\n// Google Test.  They are subject to change without notice. They should not used\n// by code external to Google Test.\n//\n// This header file is #included by <gtest/internal/gtest-internal.h>.\n// It should not be #included by other files.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n\n#ifdef __BORLANDC__\n// string.h is not guaranteed to provide strcpy on C++ Builder.\n# include <mem.h>\n#endif\n\n#include <string.h>\n#include <string>\n\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\nnamespace internal {\n\n// String - an abstract class holding static string utilities.\nclass GTEST_API_ String {\n public:\n  // Static utility methods\n\n  // Clones a 0-terminated C string, allocating memory using new.  The\n  // caller is responsible for deleting the return value using\n  // delete[].  Returns the cloned string, or NULL if the input is\n  // NULL.\n  //\n  // This is different from strdup() in string.h, which allocates\n  // memory using malloc().\n  static const char* CloneCString(const char* c_str);\n\n#if GTEST_OS_WINDOWS_MOBILE\n  // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be\n  // able to pass strings to Win32 APIs on CE we need to convert them\n  // to 'Unicode', UTF-16.\n\n  // Creates a UTF-16 wide string from the given ANSI string, allocating\n  // memory using new. The caller is responsible for deleting the return\n  // value using delete[]. Returns the wide string, or NULL if the\n  // input is NULL.\n  //\n  // The wide string is created using the ANSI codepage (CP_ACP) to\n  // match the behaviour of the ANSI versions of Win32 calls and the\n  // C runtime.\n  static LPCWSTR AnsiToUtf16(const char* c_str);\n\n  // Creates an ANSI string from the given wide string, allocating\n  // memory using new. The caller is responsible for deleting the return\n  // value using delete[]. Returns the ANSI string, or NULL if the\n  // input is NULL.\n  //\n  // The returned string is created using the ANSI codepage (CP_ACP) to\n  // match the behaviour of the ANSI versions of Win32 calls and the\n  // C runtime.\n  static const char* Utf16ToAnsi(LPCWSTR utf16_str);\n#endif\n\n  // Compares two C strings.  Returns true iff they have the same content.\n  //\n  // Unlike strcmp(), this function can handle NULL argument(s).  A\n  // NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool CStringEquals(const char* lhs, const char* rhs);\n\n  // Converts a wide C string to a String using the UTF-8 encoding.\n  // NULL will be converted to \"(null)\".  If an error occurred during\n  // the conversion, \"(failed to convert from wide string)\" is\n  // returned.\n  static std::string ShowWideCString(const wchar_t* wide_c_str);\n\n  // Compares two wide C strings.  Returns true iff they have the same\n  // content.\n  //\n  // Unlike wcscmp(), this function can handle NULL argument(s).  A\n  // NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);\n\n  // Compares two C strings, ignoring case.  Returns true iff they\n  // have the same content.\n  //\n  // Unlike strcasecmp(), this function can handle NULL argument(s).\n  // A NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool CaseInsensitiveCStringEquals(const char* lhs,\n                                           const char* rhs);\n\n  // Compares two wide C strings, ignoring case.  Returns true iff they\n  // have the same content.\n  //\n  // Unlike wcscasecmp(), this function can handle NULL argument(s).\n  // A NULL C string is considered different to any non-NULL wide C string,\n  // including the empty string.\n  // NB: The implementations on different platforms slightly differ.\n  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE\n  // environment variable. On GNU platform this method uses wcscasecmp\n  // which compares according to LC_CTYPE category of the current locale.\n  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the\n  // current locale.\n  static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,\n                                               const wchar_t* rhs);\n\n  // Returns true iff the given string ends with the given suffix, ignoring\n  // case. Any string is considered to end with an empty suffix.\n  static bool EndsWithCaseInsensitive(\n      const std::string& str, const std::string& suffix);\n\n  // Formats an int value as \"%02d\".\n  static std::string FormatIntWidth2(int value);  // \"%02d\" for width == 2\n\n  // Formats an int value as \"%X\".\n  static std::string FormatHexInt(int value);\n\n  // Formats a byte as \"%02X\".\n  static std::string FormatByte(unsigned char value);\n\n private:\n  String();  // Not meant to be instantiated.\n};  // class String\n\n// Gets the content of the stringstream's buffer as an std::string.  Each '\\0'\n// character in the buffer is replaced with \"\\\\0\".\nGTEST_API_ std::string StringStreamToString(::std::stringstream* stream);\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-tuple.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-tuple.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2009 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Implements a subset of TR1 tuple needed by Google Test and Google Mock.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n\n#include <utility>  // For ::std::pair.\n\n// The compiler used in Symbian has a bug that prevents us from declaring the\n// tuple template as a friend (it complains that tuple is redefined).  This\n// hack bypasses the bug by declaring the members that should otherwise be\n// private as public.\n// Sun Studio versions < 12 also have the above bug.\n#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:\n#else\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \\\n    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \\\n   private:\n#endif\n\n// GTEST_n_TUPLE_(T) is the type of an n-tuple.\n#define GTEST_0_TUPLE_(T) tuple<>\n#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \\\n    void, void, void>\n#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \\\n    void, void, void>\n#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \\\n    void, void, void>\n#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \\\n    void, void, void>\n#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \\\n    void, void, void>\n#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \\\n    void, void, void>\n#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    void, void, void>\n#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, void, void>\n#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, T##8, void>\n#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, T##8, T##9>\n\n// GTEST_n_TYPENAMES_(T) declares a list of n typenames.\n#define GTEST_0_TYPENAMES_(T)\n#define GTEST_1_TYPENAMES_(T) typename T##0\n#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1\n#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2\n#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3\n#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4\n#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5\n#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6\n#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7\n#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, \\\n    typename T##7, typename T##8\n#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, \\\n    typename T##7, typename T##8, typename T##9\n\n// In theory, defining stuff in the ::std namespace is undefined\n// behavior.  We can do this as we are playing the role of a standard\n// library vendor.\nnamespace std {\nnamespace tr1 {\n\ntemplate <typename T0 = void, typename T1 = void, typename T2 = void,\n    typename T3 = void, typename T4 = void, typename T5 = void,\n    typename T6 = void, typename T7 = void, typename T8 = void,\n    typename T9 = void>\nclass tuple;\n\n// Anything in namespace gtest_internal is Google Test's INTERNAL\n// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.\nnamespace gtest_internal {\n\n// ByRef<T>::type is T if T is a reference; otherwise it's const T&.\ntemplate <typename T>\nstruct ByRef { typedef const T& type; };  // NOLINT\ntemplate <typename T>\nstruct ByRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for ByRef.\n#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type\n\n// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This\n// is the same as tr1::add_reference<T>::type.\ntemplate <typename T>\nstruct AddRef { typedef T& type; };  // NOLINT\ntemplate <typename T>\nstruct AddRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for AddRef.\n#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type\n\n// A helper for implementing get<k>().\ntemplate <int k> class Get;\n\n// A helper for implementing tuple_element<k, T>.  kIndexValid is true\n// iff k < the number of fields in tuple type T.\ntemplate <bool kIndexValid, int kIndex, class Tuple>\nstruct TupleElement;\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 0, GTEST_10_TUPLE_(T) > {\n  typedef T0 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 1, GTEST_10_TUPLE_(T) > {\n  typedef T1 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 2, GTEST_10_TUPLE_(T) > {\n  typedef T2 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 3, GTEST_10_TUPLE_(T) > {\n  typedef T3 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 4, GTEST_10_TUPLE_(T) > {\n  typedef T4 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 5, GTEST_10_TUPLE_(T) > {\n  typedef T5 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 6, GTEST_10_TUPLE_(T) > {\n  typedef T6 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 7, GTEST_10_TUPLE_(T) > {\n  typedef T7 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 8, GTEST_10_TUPLE_(T) > {\n  typedef T8 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 9, GTEST_10_TUPLE_(T) > {\n  typedef T9 type;\n};\n\n}  // namespace gtest_internal\n\ntemplate <>\nclass tuple<> {\n public:\n  tuple() {}\n  tuple(const tuple& /* t */)  {}\n  tuple& operator=(const tuple& /* t */) { return *this; }\n};\n\ntemplate <GTEST_1_TYPENAMES_(T)>\nclass GTEST_1_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}\n\n  tuple(const tuple& t) : f0_(t.f0_) {}\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    return *this;\n  }\n\n  T0 f0_;\n};\n\ntemplate <GTEST_2_TYPENAMES_(T)>\nclass GTEST_2_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),\n      f1_(f1) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}\n  template <typename U0, typename U1>\n  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n  template <typename U0, typename U1>\n  tuple& operator=(const ::std::pair<U0, U1>& p) {\n    f0_ = p.first;\n    f1_ = p.second;\n    return *this;\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n};\n\ntemplate <GTEST_3_TYPENAMES_(T)>\nclass GTEST_3_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n};\n\ntemplate <GTEST_4_TYPENAMES_(T)>\nclass GTEST_4_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n};\n\ntemplate <GTEST_5_TYPENAMES_(T)>\nclass GTEST_5_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,\n      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_) {}\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n};\n\ntemplate <GTEST_6_TYPENAMES_(T)>\nclass GTEST_6_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_) {}\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n};\n\ntemplate <GTEST_7_TYPENAMES_(T)>\nclass GTEST_7_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n};\n\ntemplate <GTEST_8_TYPENAMES_(T)>\nclass GTEST_8_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,\n      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5), f6_(f6), f7_(f7) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n};\n\ntemplate <GTEST_9_TYPENAMES_(T)>\nclass GTEST_9_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,\n      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    f8_ = t.f8_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n  T8 f8_;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nclass tuple {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),\n      f9_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,\n      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),\n      f9_(t.f9_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    f8_ = t.f8_;\n    f9_ = t.f9_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n  T8 f8_;\n  T9 f9_;\n};\n\n// 6.1.3.2 Tuple creation functions.\n\n// Known limitations: we don't support passing an\n// std::tr1::reference_wrapper<T> to make_tuple().  And we don't\n// implement tie().\n\ninline tuple<> make_tuple() { return tuple<>(); }\n\ntemplate <GTEST_1_TYPENAMES_(T)>\ninline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {\n  return GTEST_1_TUPLE_(T)(f0);\n}\n\ntemplate <GTEST_2_TYPENAMES_(T)>\ninline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {\n  return GTEST_2_TUPLE_(T)(f0, f1);\n}\n\ntemplate <GTEST_3_TYPENAMES_(T)>\ninline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {\n  return GTEST_3_TUPLE_(T)(f0, f1, f2);\n}\n\ntemplate <GTEST_4_TYPENAMES_(T)>\ninline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3) {\n  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);\n}\n\ntemplate <GTEST_5_TYPENAMES_(T)>\ninline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4) {\n  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);\n}\n\ntemplate <GTEST_6_TYPENAMES_(T)>\ninline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5) {\n  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);\n}\n\ntemplate <GTEST_7_TYPENAMES_(T)>\ninline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {\n  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);\n}\n\ntemplate <GTEST_8_TYPENAMES_(T)>\ninline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {\n  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);\n}\n\ntemplate <GTEST_9_TYPENAMES_(T)>\ninline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,\n    const T8& f8) {\n  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);\n}\n\ntemplate <GTEST_10_TYPENAMES_(T)>\ninline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,\n    const T8& f8, const T9& f9) {\n  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);\n}\n\n// 6.1.3.3 Tuple helper classes.\n\ntemplate <typename Tuple> struct tuple_size;\n\ntemplate <GTEST_0_TYPENAMES_(T)>\nstruct tuple_size<GTEST_0_TUPLE_(T) > {\n  static const int value = 0;\n};\n\ntemplate <GTEST_1_TYPENAMES_(T)>\nstruct tuple_size<GTEST_1_TUPLE_(T) > {\n  static const int value = 1;\n};\n\ntemplate <GTEST_2_TYPENAMES_(T)>\nstruct tuple_size<GTEST_2_TUPLE_(T) > {\n  static const int value = 2;\n};\n\ntemplate <GTEST_3_TYPENAMES_(T)>\nstruct tuple_size<GTEST_3_TUPLE_(T) > {\n  static const int value = 3;\n};\n\ntemplate <GTEST_4_TYPENAMES_(T)>\nstruct tuple_size<GTEST_4_TUPLE_(T) > {\n  static const int value = 4;\n};\n\ntemplate <GTEST_5_TYPENAMES_(T)>\nstruct tuple_size<GTEST_5_TUPLE_(T) > {\n  static const int value = 5;\n};\n\ntemplate <GTEST_6_TYPENAMES_(T)>\nstruct tuple_size<GTEST_6_TUPLE_(T) > {\n  static const int value = 6;\n};\n\ntemplate <GTEST_7_TYPENAMES_(T)>\nstruct tuple_size<GTEST_7_TUPLE_(T) > {\n  static const int value = 7;\n};\n\ntemplate <GTEST_8_TYPENAMES_(T)>\nstruct tuple_size<GTEST_8_TUPLE_(T) > {\n  static const int value = 8;\n};\n\ntemplate <GTEST_9_TYPENAMES_(T)>\nstruct tuple_size<GTEST_9_TUPLE_(T) > {\n  static const int value = 9;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct tuple_size<GTEST_10_TUPLE_(T) > {\n  static const int value = 10;\n};\n\ntemplate <int k, class Tuple>\nstruct tuple_element {\n  typedef typename gtest_internal::TupleElement<\n      k < (tuple_size<Tuple>::value), k, Tuple>::type type;\n};\n\n#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type\n\n// 6.1.3.4 Element access.\n\nnamespace gtest_internal {\n\ntemplate <>\nclass Get<0> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))\n  Field(Tuple& t) { return t.f0_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))\n  ConstField(const Tuple& t) { return t.f0_; }\n};\n\ntemplate <>\nclass Get<1> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))\n  Field(Tuple& t) { return t.f1_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))\n  ConstField(const Tuple& t) { return t.f1_; }\n};\n\ntemplate <>\nclass Get<2> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))\n  Field(Tuple& t) { return t.f2_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))\n  ConstField(const Tuple& t) { return t.f2_; }\n};\n\ntemplate <>\nclass Get<3> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))\n  Field(Tuple& t) { return t.f3_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))\n  ConstField(const Tuple& t) { return t.f3_; }\n};\n\ntemplate <>\nclass Get<4> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))\n  Field(Tuple& t) { return t.f4_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))\n  ConstField(const Tuple& t) { return t.f4_; }\n};\n\ntemplate <>\nclass Get<5> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))\n  Field(Tuple& t) { return t.f5_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))\n  ConstField(const Tuple& t) { return t.f5_; }\n};\n\ntemplate <>\nclass Get<6> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))\n  Field(Tuple& t) { return t.f6_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))\n  ConstField(const Tuple& t) { return t.f6_; }\n};\n\ntemplate <>\nclass Get<7> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))\n  Field(Tuple& t) { return t.f7_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))\n  ConstField(const Tuple& t) { return t.f7_; }\n};\n\ntemplate <>\nclass Get<8> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))\n  Field(Tuple& t) { return t.f8_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))\n  ConstField(const Tuple& t) { return t.f8_; }\n};\n\ntemplate <>\nclass Get<9> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))\n  Field(Tuple& t) { return t.f9_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))\n  ConstField(const Tuple& t) { return t.f9_; }\n};\n\n}  // namespace gtest_internal\n\ntemplate <int k, GTEST_10_TYPENAMES_(T)>\nGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))\nget(GTEST_10_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::Field(t);\n}\n\ntemplate <int k, GTEST_10_TYPENAMES_(T)>\nGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))\nget(const GTEST_10_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::ConstField(t);\n}\n\n// 6.1.3.5 Relational operators\n\n// We only implement == and !=, as we don't have a need for the rest yet.\n\nnamespace gtest_internal {\n\n// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the\n// first k fields of t1 equals the first k fields of t2.\n// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if\n// k1 != k2.\ntemplate <int kSize1, int kSize2>\nstruct SameSizeTuplePrefixComparator;\n\ntemplate <>\nstruct SameSizeTuplePrefixComparator<0, 0> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {\n    return true;\n  }\n};\n\ntemplate <int k>\nstruct SameSizeTuplePrefixComparator<k, k> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& t1, const Tuple2& t2) {\n    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&\n        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);\n  }\n};\n\n}  // namespace gtest_internal\n\ntemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>\ninline bool operator==(const GTEST_10_TUPLE_(T)& t,\n                       const GTEST_10_TUPLE_(U)& u) {\n  return gtest_internal::SameSizeTuplePrefixComparator<\n      tuple_size<GTEST_10_TUPLE_(T) >::value,\n      tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u);\n}\n\ntemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>\ninline bool operator!=(const GTEST_10_TUPLE_(T)& t,\n                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }\n\n// 6.1.4 Pairs.\n// Unimplemented.\n\n}  // namespace tr1\n}  // namespace std\n\n#undef GTEST_0_TUPLE_\n#undef GTEST_1_TUPLE_\n#undef GTEST_2_TUPLE_\n#undef GTEST_3_TUPLE_\n#undef GTEST_4_TUPLE_\n#undef GTEST_5_TUPLE_\n#undef GTEST_6_TUPLE_\n#undef GTEST_7_TUPLE_\n#undef GTEST_8_TUPLE_\n#undef GTEST_9_TUPLE_\n#undef GTEST_10_TUPLE_\n\n#undef GTEST_0_TYPENAMES_\n#undef GTEST_1_TYPENAMES_\n#undef GTEST_2_TYPENAMES_\n#undef GTEST_3_TYPENAMES_\n#undef GTEST_4_TYPENAMES_\n#undef GTEST_5_TYPENAMES_\n#undef GTEST_6_TYPENAMES_\n#undef GTEST_7_TYPENAMES_\n#undef GTEST_8_TYPENAMES_\n#undef GTEST_9_TYPENAMES_\n#undef GTEST_10_TYPENAMES_\n\n#undef GTEST_DECLARE_TUPLE_AS_FRIEND_\n#undef GTEST_BY_REF_\n#undef GTEST_ADD_REF_\n#undef GTEST_TUPLE_ELEMENT_\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-tuple.h.pump",
    "content": "$$ -*- mode: c++; -*-\n$var n = 10  $$ Maximum number of tuple fields we want to support.\n$$ This meta comment fixes auto-indentation in Emacs. }}\n// Copyright 2009 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Implements a subset of TR1 tuple needed by Google Test and Google Mock.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n\n#include <utility>  // For ::std::pair.\n\n// The compiler used in Symbian has a bug that prevents us from declaring the\n// tuple template as a friend (it complains that tuple is redefined).  This\n// hack bypasses the bug by declaring the members that should otherwise be\n// private as public.\n// Sun Studio versions < 12 also have the above bug.\n#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:\n#else\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \\\n    template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple; \\\n   private:\n#endif\n\n\n$range i 0..n-1\n$range j 0..n\n$range k 1..n\n// GTEST_n_TUPLE_(T) is the type of an n-tuple.\n#define GTEST_0_TUPLE_(T) tuple<>\n\n$for k [[\n$range m 0..k-1\n$range m2 k..n-1\n#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]>\n\n]]\n\n// GTEST_n_TYPENAMES_(T) declares a list of n typenames.\n\n$for j [[\n$range m 0..j-1\n#define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]]\n\n\n]]\n\n// In theory, defining stuff in the ::std namespace is undefined\n// behavior.  We can do this as we are playing the role of a standard\n// library vendor.\nnamespace std {\nnamespace tr1 {\n\ntemplate <$for i, [[typename T$i = void]]>\nclass tuple;\n\n// Anything in namespace gtest_internal is Google Test's INTERNAL\n// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.\nnamespace gtest_internal {\n\n// ByRef<T>::type is T if T is a reference; otherwise it's const T&.\ntemplate <typename T>\nstruct ByRef { typedef const T& type; };  // NOLINT\ntemplate <typename T>\nstruct ByRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for ByRef.\n#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type\n\n// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This\n// is the same as tr1::add_reference<T>::type.\ntemplate <typename T>\nstruct AddRef { typedef T& type; };  // NOLINT\ntemplate <typename T>\nstruct AddRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for AddRef.\n#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type\n\n// A helper for implementing get<k>().\ntemplate <int k> class Get;\n\n// A helper for implementing tuple_element<k, T>.  kIndexValid is true\n// iff k < the number of fields in tuple type T.\ntemplate <bool kIndexValid, int kIndex, class Tuple>\nstruct TupleElement;\n\n\n$for i [[\ntemplate <GTEST_$(n)_TYPENAMES_(T)>\nstruct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T) > {\n  typedef T$i type;\n};\n\n\n]]\n}  // namespace gtest_internal\n\ntemplate <>\nclass tuple<> {\n public:\n  tuple() {}\n  tuple(const tuple& /* t */)  {}\n  tuple& operator=(const tuple& /* t */) { return *this; }\n};\n\n\n$for k [[\n$range m 0..k-1\ntemplate <GTEST_$(k)_TYPENAMES_(T)>\nclass $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : $for m, [[f$(m)_()]] {}\n\n  explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]]\n$for m, [[f$(m)_(f$m)]] {}\n\n  tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}\n\n  template <GTEST_$(k)_TYPENAMES_(U)>\n  tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}\n\n$if k == 2 [[\n  template <typename U0, typename U1>\n  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}\n\n]]\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_$(k)_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n$if k == 2 [[\n  template <typename U0, typename U1>\n  tuple& operator=(const ::std::pair<U0, U1>& p) {\n    f0_ = p.first;\n    f1_ = p.second;\n    return *this;\n  }\n\n]]\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_$(k)_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) {\n\n$for m [[\n    f$(m)_ = t.f$(m)_;\n\n]]\n    return *this;\n  }\n\n\n$for m [[\n  T$m f$(m)_;\n\n]]\n};\n\n\n]]\n// 6.1.3.2 Tuple creation functions.\n\n// Known limitations: we don't support passing an\n// std::tr1::reference_wrapper<T> to make_tuple().  And we don't\n// implement tie().\n\ninline tuple<> make_tuple() { return tuple<>(); }\n\n$for k [[\n$range m 0..k-1\n\ntemplate <GTEST_$(k)_TYPENAMES_(T)>\ninline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) {\n  return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]);\n}\n\n]]\n\n// 6.1.3.3 Tuple helper classes.\n\ntemplate <typename Tuple> struct tuple_size;\n\n\n$for j [[\ntemplate <GTEST_$(j)_TYPENAMES_(T)>\nstruct tuple_size<GTEST_$(j)_TUPLE_(T) > {\n  static const int value = $j;\n};\n\n\n]]\ntemplate <int k, class Tuple>\nstruct tuple_element {\n  typedef typename gtest_internal::TupleElement<\n      k < (tuple_size<Tuple>::value), k, Tuple>::type type;\n};\n\n#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type\n\n// 6.1.3.4 Element access.\n\nnamespace gtest_internal {\n\n\n$for i [[\ntemplate <>\nclass Get<$i> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))\n  Field(Tuple& t) { return t.f$(i)_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))\n  ConstField(const Tuple& t) { return t.f$(i)_; }\n};\n\n\n]]\n}  // namespace gtest_internal\n\ntemplate <int k, GTEST_$(n)_TYPENAMES_(T)>\nGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T)))\nget(GTEST_$(n)_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::Field(t);\n}\n\ntemplate <int k, GTEST_$(n)_TYPENAMES_(T)>\nGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_$(n)_TUPLE_(T)))\nget(const GTEST_$(n)_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::ConstField(t);\n}\n\n// 6.1.3.5 Relational operators\n\n// We only implement == and !=, as we don't have a need for the rest yet.\n\nnamespace gtest_internal {\n\n// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the\n// first k fields of t1 equals the first k fields of t2.\n// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if\n// k1 != k2.\ntemplate <int kSize1, int kSize2>\nstruct SameSizeTuplePrefixComparator;\n\ntemplate <>\nstruct SameSizeTuplePrefixComparator<0, 0> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {\n    return true;\n  }\n};\n\ntemplate <int k>\nstruct SameSizeTuplePrefixComparator<k, k> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& t1, const Tuple2& t2) {\n    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&\n        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);\n  }\n};\n\n}  // namespace gtest_internal\n\ntemplate <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>\ninline bool operator==(const GTEST_$(n)_TUPLE_(T)& t,\n                       const GTEST_$(n)_TUPLE_(U)& u) {\n  return gtest_internal::SameSizeTuplePrefixComparator<\n      tuple_size<GTEST_$(n)_TUPLE_(T) >::value,\n      tuple_size<GTEST_$(n)_TUPLE_(U) >::value>::Eq(t, u);\n}\n\ntemplate <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>\ninline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t,\n                       const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); }\n\n// 6.1.4 Pairs.\n// Unimplemented.\n\n}  // namespace tr1\n}  // namespace std\n\n\n$for j [[\n#undef GTEST_$(j)_TUPLE_\n\n]]\n\n\n$for j [[\n#undef GTEST_$(j)_TYPENAMES_\n\n]]\n\n#undef GTEST_DECLARE_TUPLE_AS_FRIEND_\n#undef GTEST_BY_REF_\n#undef GTEST_ADD_REF_\n#undef GTEST_TUPLE_ELEMENT_\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-type-util.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Type utilities needed for implementing typed and type-parameterized\n// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n// Currently we support at most 50 types in a list, and at most 50\n// type-parameterized tests in one type-parameterized test case.\n// Please contact googletestframework@googlegroups.com if you need\n// more.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n\n#include \"gtest/internal/gtest-port.h\"\n\n// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using\n// libstdc++ (which is where cxxabi.h comes from).\n# if GTEST_HAS_CXXABI_H_\n#  include <cxxabi.h>\n# elif defined(__HP_aCC)\n#  include <acxx_demangle.h>\n# endif  // GTEST_HASH_CXXABI_H_\n\nnamespace testing {\nnamespace internal {\n\n// GetTypeName<T>() returns a human-readable name of type T.\n// NB: This function is also used in Google Mock, so don't move it inside of\n// the typed-test-only section below.\ntemplate <typename T>\nstd::string GetTypeName() {\n# if GTEST_HAS_RTTI\n\n  const char* const name = typeid(T).name();\n#  if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)\n  int status = 0;\n  // gcc's implementation of typeid(T).name() mangles the type name,\n  // so we have to demangle it.\n#   if GTEST_HAS_CXXABI_H_\n  using abi::__cxa_demangle;\n#   endif  // GTEST_HAS_CXXABI_H_\n  char* const readable_name = __cxa_demangle(name, 0, 0, &status);\n  const std::string name_str(status == 0 ? readable_name : name);\n  free(readable_name);\n  return name_str;\n#  else\n  return name;\n#  endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC\n\n# else\n\n  return \"<type>\";\n\n# endif  // GTEST_HAS_RTTI\n}\n\n#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same\n// type.  This can be used as a compile-time assertion to ensure that\n// two types are equal.\n\ntemplate <typename T1, typename T2>\nstruct AssertTypeEq;\n\ntemplate <typename T>\nstruct AssertTypeEq<T, T> {\n  typedef bool type;\n};\n\n// A unique type used as the default value for the arguments of class\n// template Types.  This allows us to simulate variadic templates\n// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't\n// support directly.\nstruct None {};\n\n// The following family of struct and struct templates are used to\n// represent type lists.  In particular, TypesN<T1, T2, ..., TN>\n// represents a type list with N types (T1, T2, ..., and TN) in it.\n// Except for Types0, every struct in the family has two member types:\n// Head for the first type in the list, and Tail for the rest of the\n// list.\n\n// The empty type list.\nstruct Types0 {};\n\n// Type lists of length 1, 2, 3, and so on.\n\ntemplate <typename T1>\nstruct Types1 {\n  typedef T1 Head;\n  typedef Types0 Tail;\n};\ntemplate <typename T1, typename T2>\nstruct Types2 {\n  typedef T1 Head;\n  typedef Types1<T2> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3>\nstruct Types3 {\n  typedef T1 Head;\n  typedef Types2<T2, T3> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nstruct Types4 {\n  typedef T1 Head;\n  typedef Types3<T2, T3, T4> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nstruct Types5 {\n  typedef T1 Head;\n  typedef Types4<T2, T3, T4, T5> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nstruct Types6 {\n  typedef T1 Head;\n  typedef Types5<T2, T3, T4, T5, T6> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nstruct Types7 {\n  typedef T1 Head;\n  typedef Types6<T2, T3, T4, T5, T6, T7> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nstruct Types8 {\n  typedef T1 Head;\n  typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nstruct Types9 {\n  typedef T1 Head;\n  typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nstruct Types10 {\n  typedef T1 Head;\n  typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11>\nstruct Types11 {\n  typedef T1 Head;\n  typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12>\nstruct Types12 {\n  typedef T1 Head;\n  typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13>\nstruct Types13 {\n  typedef T1 Head;\n  typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14>\nstruct Types14 {\n  typedef T1 Head;\n  typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15>\nstruct Types15 {\n  typedef T1 Head;\n  typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16>\nstruct Types16 {\n  typedef T1 Head;\n  typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17>\nstruct Types17 {\n  typedef T1 Head;\n  typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18>\nstruct Types18 {\n  typedef T1 Head;\n  typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19>\nstruct Types19 {\n  typedef T1 Head;\n  typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20>\nstruct Types20 {\n  typedef T1 Head;\n  typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21>\nstruct Types21 {\n  typedef T1 Head;\n  typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22>\nstruct Types22 {\n  typedef T1 Head;\n  typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23>\nstruct Types23 {\n  typedef T1 Head;\n  typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24>\nstruct Types24 {\n  typedef T1 Head;\n  typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25>\nstruct Types25 {\n  typedef T1 Head;\n  typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26>\nstruct Types26 {\n  typedef T1 Head;\n  typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27>\nstruct Types27 {\n  typedef T1 Head;\n  typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28>\nstruct Types28 {\n  typedef T1 Head;\n  typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29>\nstruct Types29 {\n  typedef T1 Head;\n  typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30>\nstruct Types30 {\n  typedef T1 Head;\n  typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31>\nstruct Types31 {\n  typedef T1 Head;\n  typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32>\nstruct Types32 {\n  typedef T1 Head;\n  typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33>\nstruct Types33 {\n  typedef T1 Head;\n  typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34>\nstruct Types34 {\n  typedef T1 Head;\n  typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35>\nstruct Types35 {\n  typedef T1 Head;\n  typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36>\nstruct Types36 {\n  typedef T1 Head;\n  typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37>\nstruct Types37 {\n  typedef T1 Head;\n  typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38>\nstruct Types38 {\n  typedef T1 Head;\n  typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39>\nstruct Types39 {\n  typedef T1 Head;\n  typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40>\nstruct Types40 {\n  typedef T1 Head;\n  typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41>\nstruct Types41 {\n  typedef T1 Head;\n  typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42>\nstruct Types42 {\n  typedef T1 Head;\n  typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43>\nstruct Types43 {\n  typedef T1 Head;\n  typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44>\nstruct Types44 {\n  typedef T1 Head;\n  typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45>\nstruct Types45 {\n  typedef T1 Head;\n  typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46>\nstruct Types46 {\n  typedef T1 Head;\n  typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45, T46> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47>\nstruct Types47 {\n  typedef T1 Head;\n  typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45, T46, T47> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48>\nstruct Types48 {\n  typedef T1 Head;\n  typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45, T46, T47, T48> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49>\nstruct Types49 {\n  typedef T1 Head;\n  typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45, T46, T47, T48, T49> Tail;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49, typename T50>\nstruct Types50 {\n  typedef T1 Head;\n  typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n      T44, T45, T46, T47, T48, T49, T50> Tail;\n};\n\n\n}  // namespace internal\n\n// We don't want to require the users to write TypesN<...> directly,\n// as that would require them to count the length.  Types<...> is much\n// easier to write, but generates horrible messages when there is a\n// compiler error, as gcc insists on printing out each template\n// argument, even if it has the default value (this means Types<int>\n// will appear as Types<int, None, None, ..., None> in the compiler\n// errors).\n//\n// Our solution is to combine the best part of the two approaches: a\n// user would write Types<T1, ..., TN>, and Google Test will translate\n// that to TypesN<T1, ..., TN> internally to make error messages\n// readable.  The translation is done by the 'type' member of the\n// Types template.\ntemplate <typename T1 = internal::None, typename T2 = internal::None,\n    typename T3 = internal::None, typename T4 = internal::None,\n    typename T5 = internal::None, typename T6 = internal::None,\n    typename T7 = internal::None, typename T8 = internal::None,\n    typename T9 = internal::None, typename T10 = internal::None,\n    typename T11 = internal::None, typename T12 = internal::None,\n    typename T13 = internal::None, typename T14 = internal::None,\n    typename T15 = internal::None, typename T16 = internal::None,\n    typename T17 = internal::None, typename T18 = internal::None,\n    typename T19 = internal::None, typename T20 = internal::None,\n    typename T21 = internal::None, typename T22 = internal::None,\n    typename T23 = internal::None, typename T24 = internal::None,\n    typename T25 = internal::None, typename T26 = internal::None,\n    typename T27 = internal::None, typename T28 = internal::None,\n    typename T29 = internal::None, typename T30 = internal::None,\n    typename T31 = internal::None, typename T32 = internal::None,\n    typename T33 = internal::None, typename T34 = internal::None,\n    typename T35 = internal::None, typename T36 = internal::None,\n    typename T37 = internal::None, typename T38 = internal::None,\n    typename T39 = internal::None, typename T40 = internal::None,\n    typename T41 = internal::None, typename T42 = internal::None,\n    typename T43 = internal::None, typename T44 = internal::None,\n    typename T45 = internal::None, typename T46 = internal::None,\n    typename T47 = internal::None, typename T48 = internal::None,\n    typename T49 = internal::None, typename T50 = internal::None>\nstruct Types {\n  typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;\n};\n\ntemplate <>\nstruct Types<internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types0 type;\n};\ntemplate <typename T1>\nstruct Types<T1, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types1<T1> type;\n};\ntemplate <typename T1, typename T2>\nstruct Types<T1, T2, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types2<T1, T2> type;\n};\ntemplate <typename T1, typename T2, typename T3>\nstruct Types<T1, T2, T3, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types3<T1, T2, T3> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4>\nstruct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types4<T1, T2, T3, T4> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nstruct Types<T1, T2, T3, T4, T5, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types5<T1, T2, T3, T4, T5> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nstruct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,\n      T12> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,\n      T26> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,\n      T40> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None, internal::None> {\n  typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None, internal::None> {\n  typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,\n    internal::None, internal::None, internal::None, internal::None,\n    internal::None> {\n  typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,\n    T46, internal::None, internal::None, internal::None, internal::None> {\n  typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,\n    T46, T47, internal::None, internal::None, internal::None> {\n  typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46, T47> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,\n    T46, T47, T48, internal::None, internal::None> {\n  typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46, T47, T48> type;\n};\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49>\nstruct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,\n    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,\n    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,\n    T46, T47, T48, T49, internal::None> {\n  typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46, T47, T48, T49> type;\n};\n\nnamespace internal {\n\n# define GTEST_TEMPLATE_ template <typename T> class\n\n// The template \"selector\" struct TemplateSel<Tmpl> is used to\n// represent Tmpl, which must be a class template with one type\n// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined\n// as the type Tmpl<T>.  This allows us to actually instantiate the\n// template \"selected\" by TemplateSel<Tmpl>.\n//\n// This trick is necessary for simulating typedef for class templates,\n// which C++ doesn't support directly.\ntemplate <GTEST_TEMPLATE_ Tmpl>\nstruct TemplateSel {\n  template <typename T>\n  struct Bind {\n    typedef Tmpl<T> type;\n  };\n};\n\n# define GTEST_BIND_(TmplSel, T) \\\n  TmplSel::template Bind<T>::type\n\n// A unique struct template used as the default value for the\n// arguments of class template Templates.  This allows us to simulate\n// variadic templates (e.g. Templates<int>, Templates<int, double>,\n// and etc), which C++ doesn't support directly.\ntemplate <typename T>\nstruct NoneT {};\n\n// The following family of struct and struct templates are used to\n// represent template lists.  In particular, TemplatesN<T1, T2, ...,\n// TN> represents a list of N templates (T1, T2, ..., and TN).  Except\n// for Templates0, every struct in the family has two member types:\n// Head for the selector of the first template in the list, and Tail\n// for the rest of the list.\n\n// The empty template list.\nstruct Templates0 {};\n\n// Template lists of length 1, 2, 3, and so on.\n\ntemplate <GTEST_TEMPLATE_ T1>\nstruct Templates1 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates0 Tail;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>\nstruct Templates2 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates1<T2> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>\nstruct Templates3 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates2<T2, T3> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4>\nstruct Templates4 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates3<T2, T3, T4> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>\nstruct Templates5 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates4<T2, T3, T4, T5> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>\nstruct Templates6 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates5<T2, T3, T4, T5, T6> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7>\nstruct Templates7 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>\nstruct Templates8 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>\nstruct Templates9 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10>\nstruct Templates10 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>\nstruct Templates11 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>\nstruct Templates12 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13>\nstruct Templates13 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>\nstruct Templates14 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>\nstruct Templates15 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16>\nstruct Templates16 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>\nstruct Templates17 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>\nstruct Templates18 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19>\nstruct Templates19 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>\nstruct Templates20 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>\nstruct Templates21 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22>\nstruct Templates22 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>\nstruct Templates23 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>\nstruct Templates24 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25>\nstruct Templates25 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>\nstruct Templates26 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>\nstruct Templates27 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28>\nstruct Templates28 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>\nstruct Templates29 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>\nstruct Templates30 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31>\nstruct Templates31 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>\nstruct Templates32 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>\nstruct Templates33 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34>\nstruct Templates34 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>\nstruct Templates35 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>\nstruct Templates36 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37>\nstruct Templates37 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>\nstruct Templates38 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>\nstruct Templates39 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40>\nstruct Templates40 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>\nstruct Templates41 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>\nstruct Templates42 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43>\nstruct Templates43 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>\nstruct Templates44 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>\nstruct Templates45 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46>\nstruct Templates46 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45, T46> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>\nstruct Templates47 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45, T46, T47> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>\nstruct Templates48 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45, T46, T47, T48> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,\n    GTEST_TEMPLATE_ T49>\nstruct Templates49 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45, T46, T47, T48, T49> Tail;\n};\n\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,\n    GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>\nstruct Templates50 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,\n      T43, T44, T45, T46, T47, T48, T49, T50> Tail;\n};\n\n\n// We don't want to require the users to write TemplatesN<...> directly,\n// as that would require them to count the length.  Templates<...> is much\n// easier to write, but generates horrible messages when there is a\n// compiler error, as gcc insists on printing out each template\n// argument, even if it has the default value (this means Templates<list>\n// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler\n// errors).\n//\n// Our solution is to combine the best part of the two approaches: a\n// user would write Templates<T1, ..., TN>, and Google Test will translate\n// that to TemplatesN<T1, ..., TN> internally to make error messages\n// readable.  The translation is done by the 'type' member of the\n// Templates template.\ntemplate <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,\n    GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,\n    GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,\n    GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,\n    GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,\n    GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,\n    GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,\n    GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,\n    GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,\n    GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,\n    GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,\n    GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,\n    GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,\n    GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,\n    GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,\n    GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,\n    GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,\n    GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,\n    GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,\n    GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,\n    GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,\n    GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,\n    GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,\n    GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,\n    GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>\nstruct Templates {\n  typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45, T46, T47, T48, T49, T50> type;\n};\n\ntemplate <>\nstruct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT> {\n  typedef Templates0 type;\n};\ntemplate <GTEST_TEMPLATE_ T1>\nstruct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT> {\n  typedef Templates1<T1> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>\nstruct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT> {\n  typedef Templates2<T1, T2> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>\nstruct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates3<T1, T2, T3> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4>\nstruct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates4<T1, T2, T3, T4> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>\nstruct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates5<T1, T2, T3, T4, T5> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>\nstruct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates6<T1, T2, T3, T4, T5, T6> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT> {\n  typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT> {\n  typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT> {\n  typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT> {\n  typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT> {\n  typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT> {\n  typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT> {\n  typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT> {\n  typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    T45, NoneT, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    T45, T46, NoneT, NoneT, NoneT, NoneT> {\n  typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45, T46> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    T45, T46, T47, NoneT, NoneT, NoneT> {\n  typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45, T46, T47> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    T45, T46, T47, T48, NoneT, NoneT> {\n  typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45, T46, T47, T48> type;\n};\ntemplate <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,\n    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,\n    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,\n    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,\n    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,\n    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,\n    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,\n    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,\n    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,\n    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,\n    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,\n    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,\n    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,\n    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,\n    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,\n    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,\n    GTEST_TEMPLATE_ T49>\nstruct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,\n    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,\n    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,\n    T45, T46, T47, T48, T49, NoneT> {\n  typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,\n      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,\n      T42, T43, T44, T45, T46, T47, T48, T49> type;\n};\n\n// The TypeList template makes it possible to use either a single type\n// or a Types<...> list in TYPED_TEST_CASE() and\n// INSTANTIATE_TYPED_TEST_CASE_P().\n\ntemplate <typename T>\nstruct TypeList {\n  typedef Types1<T> type;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49, typename T50>\nstruct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,\n    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,\n    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,\n    T44, T45, T46, T47, T48, T49, T50> > {\n  typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,\n      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,\n      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,\n      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;\n};\n\n#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h.pump",
    "content": "$$ -*- mode: c++; -*-\n$var n = 50  $$ Maximum length of type lists we want to support.\n// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Type utilities needed for implementing typed and type-parameterized\n// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n// Currently we support at most $n types in a list, and at most $n\n// type-parameterized tests in one type-parameterized test case.\n// Please contact googletestframework@googlegroups.com if you need\n// more.\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n\n#include \"gtest/internal/gtest-port.h\"\n\n// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using\n// libstdc++ (which is where cxxabi.h comes from).\n# if GTEST_HAS_CXXABI_H_\n#  include <cxxabi.h>\n# elif defined(__HP_aCC)\n#  include <acxx_demangle.h>\n# endif  // GTEST_HASH_CXXABI_H_\n\nnamespace testing {\nnamespace internal {\n\n// GetTypeName<T>() returns a human-readable name of type T.\n// NB: This function is also used in Google Mock, so don't move it inside of\n// the typed-test-only section below.\ntemplate <typename T>\nstd::string GetTypeName() {\n# if GTEST_HAS_RTTI\n\n  const char* const name = typeid(T).name();\n#  if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)\n  int status = 0;\n  // gcc's implementation of typeid(T).name() mangles the type name,\n  // so we have to demangle it.\n#   if GTEST_HAS_CXXABI_H_\n  using abi::__cxa_demangle;\n#   endif  // GTEST_HAS_CXXABI_H_\n  char* const readable_name = __cxa_demangle(name, 0, 0, &status);\n  const std::string name_str(status == 0 ? readable_name : name);\n  free(readable_name);\n  return name_str;\n#  else\n  return name;\n#  endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC\n\n# else\n\n  return \"<type>\";\n\n# endif  // GTEST_HAS_RTTI\n}\n\n#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same\n// type.  This can be used as a compile-time assertion to ensure that\n// two types are equal.\n\ntemplate <typename T1, typename T2>\nstruct AssertTypeEq;\n\ntemplate <typename T>\nstruct AssertTypeEq<T, T> {\n  typedef bool type;\n};\n\n// A unique type used as the default value for the arguments of class\n// template Types.  This allows us to simulate variadic templates\n// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't\n// support directly.\nstruct None {};\n\n// The following family of struct and struct templates are used to\n// represent type lists.  In particular, TypesN<T1, T2, ..., TN>\n// represents a type list with N types (T1, T2, ..., and TN) in it.\n// Except for Types0, every struct in the family has two member types:\n// Head for the first type in the list, and Tail for the rest of the\n// list.\n\n// The empty type list.\nstruct Types0 {};\n\n// Type lists of length 1, 2, 3, and so on.\n\ntemplate <typename T1>\nstruct Types1 {\n  typedef T1 Head;\n  typedef Types0 Tail;\n};\n\n$range i 2..n\n\n$for i [[\n$range j 1..i\n$range k 2..i\ntemplate <$for j, [[typename T$j]]>\nstruct Types$i {\n  typedef T1 Head;\n  typedef Types$(i-1)<$for k, [[T$k]]> Tail;\n};\n\n\n]]\n\n}  // namespace internal\n\n// We don't want to require the users to write TypesN<...> directly,\n// as that would require them to count the length.  Types<...> is much\n// easier to write, but generates horrible messages when there is a\n// compiler error, as gcc insists on printing out each template\n// argument, even if it has the default value (this means Types<int>\n// will appear as Types<int, None, None, ..., None> in the compiler\n// errors).\n//\n// Our solution is to combine the best part of the two approaches: a\n// user would write Types<T1, ..., TN>, and Google Test will translate\n// that to TypesN<T1, ..., TN> internally to make error messages\n// readable.  The translation is done by the 'type' member of the\n// Types template.\n\n$range i 1..n\ntemplate <$for i, [[typename T$i = internal::None]]>\nstruct Types {\n  typedef internal::Types$n<$for i, [[T$i]]> type;\n};\n\ntemplate <>\nstruct Types<$for i, [[internal::None]]> {\n  typedef internal::Types0 type;\n};\n\n$range i 1..n-1\n$for i [[\n$range j 1..i\n$range k i+1..n\ntemplate <$for j, [[typename T$j]]>\nstruct Types<$for j, [[T$j]]$for k[[, internal::None]]> {\n  typedef internal::Types$i<$for j, [[T$j]]> type;\n};\n\n]]\n\nnamespace internal {\n\n# define GTEST_TEMPLATE_ template <typename T> class\n\n// The template \"selector\" struct TemplateSel<Tmpl> is used to\n// represent Tmpl, which must be a class template with one type\n// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined\n// as the type Tmpl<T>.  This allows us to actually instantiate the\n// template \"selected\" by TemplateSel<Tmpl>.\n//\n// This trick is necessary for simulating typedef for class templates,\n// which C++ doesn't support directly.\ntemplate <GTEST_TEMPLATE_ Tmpl>\nstruct TemplateSel {\n  template <typename T>\n  struct Bind {\n    typedef Tmpl<T> type;\n  };\n};\n\n# define GTEST_BIND_(TmplSel, T) \\\n  TmplSel::template Bind<T>::type\n\n// A unique struct template used as the default value for the\n// arguments of class template Templates.  This allows us to simulate\n// variadic templates (e.g. Templates<int>, Templates<int, double>,\n// and etc), which C++ doesn't support directly.\ntemplate <typename T>\nstruct NoneT {};\n\n// The following family of struct and struct templates are used to\n// represent template lists.  In particular, TemplatesN<T1, T2, ...,\n// TN> represents a list of N templates (T1, T2, ..., and TN).  Except\n// for Templates0, every struct in the family has two member types:\n// Head for the selector of the first template in the list, and Tail\n// for the rest of the list.\n\n// The empty template list.\nstruct Templates0 {};\n\n// Template lists of length 1, 2, 3, and so on.\n\ntemplate <GTEST_TEMPLATE_ T1>\nstruct Templates1 {\n  typedef TemplateSel<T1> Head;\n  typedef Templates0 Tail;\n};\n\n$range i 2..n\n\n$for i [[\n$range j 1..i\n$range k 2..i\ntemplate <$for j, [[GTEST_TEMPLATE_ T$j]]>\nstruct Templates$i {\n  typedef TemplateSel<T1> Head;\n  typedef Templates$(i-1)<$for k, [[T$k]]> Tail;\n};\n\n\n]]\n\n// We don't want to require the users to write TemplatesN<...> directly,\n// as that would require them to count the length.  Templates<...> is much\n// easier to write, but generates horrible messages when there is a\n// compiler error, as gcc insists on printing out each template\n// argument, even if it has the default value (this means Templates<list>\n// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler\n// errors).\n//\n// Our solution is to combine the best part of the two approaches: a\n// user would write Templates<T1, ..., TN>, and Google Test will translate\n// that to TemplatesN<T1, ..., TN> internally to make error messages\n// readable.  The translation is done by the 'type' member of the\n// Templates template.\n\n$range i 1..n\ntemplate <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]>\nstruct Templates {\n  typedef Templates$n<$for i, [[T$i]]> type;\n};\n\ntemplate <>\nstruct Templates<$for i, [[NoneT]]> {\n  typedef Templates0 type;\n};\n\n$range i 1..n-1\n$for i [[\n$range j 1..i\n$range k i+1..n\ntemplate <$for j, [[GTEST_TEMPLATE_ T$j]]>\nstruct Templates<$for j, [[T$j]]$for k[[, NoneT]]> {\n  typedef Templates$i<$for j, [[T$j]]> type;\n};\n\n]]\n\n// The TypeList template makes it possible to use either a single type\n// or a Types<...> list in TYPED_TEST_CASE() and\n// INSTANTIATE_TYPED_TEST_CASE_P().\n\ntemplate <typename T>\nstruct TypeList {\n  typedef Types1<T> type;\n};\n\n\n$range i 1..n\ntemplate <$for i, [[typename T$i]]>\nstruct TypeList<Types<$for i, [[T$i]]> > {\n  typedef typename Types<$for i, [[T$i]]>::type type;\n};\n\n#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/prime_tables.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n// Author: vladl@google.com (Vlad Losev)\n\n// This provides interface PrimeTable that determines whether a number is a\n// prime and determines a next prime number. This interface is used\n// in Google Test samples demonstrating use of parameterized tests.\n\n#ifndef GTEST_SAMPLES_PRIME_TABLES_H_\n#define GTEST_SAMPLES_PRIME_TABLES_H_\n\n#include <algorithm>\n\n// The prime table interface.\nclass PrimeTable {\n public:\n  virtual ~PrimeTable() {}\n\n  // Returns true iff n is a prime number.\n  virtual bool IsPrime(int n) const = 0;\n\n  // Returns the smallest prime number greater than p; or returns -1\n  // if the next prime is beyond the capacity of the table.\n  virtual int GetNextPrime(int p) const = 0;\n};\n\n// Implementation #1 calculates the primes on-the-fly.\nclass OnTheFlyPrimeTable : public PrimeTable {\n public:\n  virtual bool IsPrime(int n) const {\n    if (n <= 1) return false;\n\n    for (int i = 2; i*i <= n; i++) {\n      // n is divisible by an integer other than 1 and itself.\n      if ((n % i) == 0) return false;\n    }\n\n    return true;\n  }\n\n  virtual int GetNextPrime(int p) const {\n    for (int n = p + 1; n > 0; n++) {\n      if (IsPrime(n)) return n;\n    }\n\n    return -1;\n  }\n};\n\n// Implementation #2 pre-calculates the primes and stores the result\n// in an array.\nclass PreCalculatedPrimeTable : public PrimeTable {\n public:\n  // 'max' specifies the maximum number the prime table holds.\n  explicit PreCalculatedPrimeTable(int max)\n      : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) {\n    CalculatePrimesUpTo(max);\n  }\n  virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; }\n\n  virtual bool IsPrime(int n) const {\n    return 0 <= n && n < is_prime_size_ && is_prime_[n];\n  }\n\n  virtual int GetNextPrime(int p) const {\n    for (int n = p + 1; n < is_prime_size_; n++) {\n      if (is_prime_[n]) return n;\n    }\n\n    return -1;\n  }\n\n private:\n  void CalculatePrimesUpTo(int max) {\n    ::std::fill(is_prime_, is_prime_ + is_prime_size_, true);\n    is_prime_[0] = is_prime_[1] = false;\n\n    for (int i = 2; i <= max; i++) {\n      if (!is_prime_[i]) continue;\n\n      // Marks all multiples of i (except i itself) as non-prime.\n      for (int j = 2*i; j <= max; j += i) {\n        is_prime_[j] = false;\n      }\n    }\n  }\n\n  const int is_prime_size_;\n  bool* const is_prime_;\n\n  // Disables compiler warning \"assignment operator could not be generated.\"\n  void operator=(const PreCalculatedPrimeTable& rhs);\n};\n\n#endif  // GTEST_SAMPLES_PRIME_TABLES_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample1.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"sample1.h\"\n\n// Returns n! (the factorial of n).  For negative n, n! is defined to be 1.\nint Factorial(int n) {\n  int result = 1;\n  for (int i = 1; i <= n; i++) {\n    result *= i;\n  }\n\n  return result;\n}\n\n// Returns true iff n is a prime number.\nbool IsPrime(int n) {\n  // Trivial case 1: small numbers\n  if (n <= 1) return false;\n\n  // Trivial case 2: even numbers\n  if (n % 2 == 0) return n == 2;\n\n  // Now, we have that n is odd and n >= 3.\n\n  // Try to divide n by every odd number i, starting from 3\n  for (int i = 3; ; i += 2) {\n    // We only have to try i up to the squre root of n\n    if (i > n/i) break;\n\n    // Now, we have i <= n/i < n.\n    // If n is divisible by i, n is not prime.\n    if (n % i == 0) return false;\n  }\n\n  // n has no integer factor in the range (1, n), and thus is prime.\n  return true;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample1.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_SAMPLES_SAMPLE1_H_\n#define GTEST_SAMPLES_SAMPLE1_H_\n\n// Returns n! (the factorial of n).  For negative n, n! is defined to be 1.\nint Factorial(int n);\n\n// Returns true iff n is a prime number.\nbool IsPrime(int n);\n\n#endif  // GTEST_SAMPLES_SAMPLE1_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample10_unittest.cc",
    "content": "// Copyright 2009 Google Inc. All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// This sample shows how to use Google Test listener API to implement\n// a primitive leak checker.\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"gtest/gtest.h\"\n\nusing ::testing::EmptyTestEventListener;\nusing ::testing::InitGoogleTest;\nusing ::testing::Test;\nusing ::testing::TestCase;\nusing ::testing::TestEventListeners;\nusing ::testing::TestInfo;\nusing ::testing::TestPartResult;\nusing ::testing::UnitTest;\n\nnamespace {\n\n// We will track memory used by this class.\nclass Water {\n public:\n  // Normal Water declarations go here.\n\n  // operator new and operator delete help us control water allocation.\n  void* operator new(size_t allocation_size) {\n    allocated_++;\n    return malloc(allocation_size);\n  }\n\n  void operator delete(void* block, size_t /* allocation_size */) {\n    allocated_--;\n    free(block);\n  }\n\n  static int allocated() { return allocated_; }\n\n private:\n  static int allocated_;\n};\n\nint Water::allocated_ = 0;\n\n// This event listener monitors how many Water objects are created and\n// destroyed by each test, and reports a failure if a test leaks some Water\n// objects. It does this by comparing the number of live Water objects at\n// the beginning of a test and at the end of a test.\nclass LeakChecker : public EmptyTestEventListener {\n private:\n  // Called before a test starts.\n  virtual void OnTestStart(const TestInfo& /* test_info */) {\n    initially_allocated_ = Water::allocated();\n  }\n\n  // Called after a test ends.\n  virtual void OnTestEnd(const TestInfo& /* test_info */) {\n    int difference = Water::allocated() - initially_allocated_;\n\n    // You can generate a failure in any event handler except\n    // OnTestPartResult. Just use an appropriate Google Test assertion to do\n    // it.\n    EXPECT_LE(difference, 0) << \"Leaked \" << difference << \" unit(s) of Water!\";\n  }\n\n  int initially_allocated_;\n};\n\nTEST(ListenersTest, DoesNotLeak) {\n  Water* water = new Water;\n  delete water;\n}\n\n// This should fail when the --check_for_leaks command line flag is\n// specified.\nTEST(ListenersTest, LeaksWater) {\n  Water* water = new Water;\n  EXPECT_TRUE(water != NULL);\n}\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  InitGoogleTest(&argc, argv);\n\n  bool check_for_leaks = false;\n  if (argc > 1 && strcmp(argv[1], \"--check_for_leaks\") == 0 )\n    check_for_leaks = true;\n  else\n    printf(\"%s\\n\", \"Run this program with --check_for_leaks to enable \"\n           \"custom leak checking in the tests.\");\n\n  // If we are given the --check_for_leaks command line flag, installs the\n  // leak checker.\n  if (check_for_leaks) {\n    TestEventListeners& listeners = UnitTest::GetInstance()->listeners();\n\n    // Adds the leak checker to the end of the test event listener list,\n    // after the default text output printer and the default XML report\n    // generator.\n    //\n    // The order is important - it ensures that failures generated in the\n    // leak checker's OnTestEnd() method are processed by the text and XML\n    // printers *before* their OnTestEnd() methods are called, such that\n    // they are attributed to the right test. Remember that a listener\n    // receives an OnXyzStart event *after* listeners preceding it in the\n    // list received that event, and receives an OnXyzEnd event *before*\n    // listeners preceding it.\n    //\n    // We don't need to worry about deleting the new listener later, as\n    // Google Test will do it.\n    listeners.Append(new LeakChecker);\n  }\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample1_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n\n// This sample shows how to write a simple unit test for a function,\n// using Google C++ testing framework.\n//\n// Writing a unit test using Google C++ testing framework is easy as 1-2-3:\n\n\n// Step 1. Include necessary header files such that the stuff your\n// test logic needs is declared.\n//\n// Don't forget gtest.h, which declares the testing framework.\n\n#include <limits.h>\n#include \"sample1.h\"\n#include \"gtest/gtest.h\"\n\n\n// Step 2. Use the TEST macro to define your tests.\n//\n// TEST has two parameters: the test case name and the test name.\n// After using the macro, you should define your test logic between a\n// pair of braces.  You can use a bunch of macros to indicate the\n// success or failure of a test.  EXPECT_TRUE and EXPECT_EQ are\n// examples of such macros.  For a complete list, see gtest.h.\n//\n// <TechnicalDetails>\n//\n// In Google Test, tests are grouped into test cases.  This is how we\n// keep test code organized.  You should put logically related tests\n// into the same test case.\n//\n// The test case name and the test name should both be valid C++\n// identifiers.  And you should not use underscore (_) in the names.\n//\n// Google Test guarantees that each test you define is run exactly\n// once, but it makes no guarantee on the order the tests are\n// executed.  Therefore, you should write your tests in such a way\n// that their results don't depend on their order.\n//\n// </TechnicalDetails>\n\n\n// Tests Factorial().\n\n// Tests factorial of negative numbers.\nTEST(FactorialTest, Negative) {\n  // This test is named \"Negative\", and belongs to the \"FactorialTest\"\n  // test case.\n  EXPECT_EQ(1, Factorial(-5));\n  EXPECT_EQ(1, Factorial(-1));\n  EXPECT_GT(Factorial(-10), 0);\n\n  // <TechnicalDetails>\n  //\n  // EXPECT_EQ(expected, actual) is the same as\n  //\n  //   EXPECT_TRUE((expected) == (actual))\n  //\n  // except that it will print both the expected value and the actual\n  // value when the assertion fails.  This is very helpful for\n  // debugging.  Therefore in this case EXPECT_EQ is preferred.\n  //\n  // On the other hand, EXPECT_TRUE accepts any Boolean expression,\n  // and is thus more general.\n  //\n  // </TechnicalDetails>\n}\n\n// Tests factorial of 0.\nTEST(FactorialTest, Zero) {\n  EXPECT_EQ(1, Factorial(0));\n}\n\n// Tests factorial of positive numbers.\nTEST(FactorialTest, Positive) {\n  EXPECT_EQ(1, Factorial(1));\n  EXPECT_EQ(2, Factorial(2));\n  EXPECT_EQ(6, Factorial(3));\n  EXPECT_EQ(40320, Factorial(8));\n}\n\n\n// Tests IsPrime()\n\n// Tests negative input.\nTEST(IsPrimeTest, Negative) {\n  // This test belongs to the IsPrimeTest test case.\n\n  EXPECT_FALSE(IsPrime(-1));\n  EXPECT_FALSE(IsPrime(-2));\n  EXPECT_FALSE(IsPrime(INT_MIN));\n}\n\n// Tests some trivial cases.\nTEST(IsPrimeTest, Trivial) {\n  EXPECT_FALSE(IsPrime(0));\n  EXPECT_FALSE(IsPrime(1));\n  EXPECT_TRUE(IsPrime(2));\n  EXPECT_TRUE(IsPrime(3));\n}\n\n// Tests positive input.\nTEST(IsPrimeTest, Positive) {\n  EXPECT_FALSE(IsPrime(4));\n  EXPECT_TRUE(IsPrime(5));\n  EXPECT_FALSE(IsPrime(6));\n  EXPECT_TRUE(IsPrime(23));\n}\n\n// Step 3. Call RUN_ALL_TESTS() in main().\n//\n// We do this by linking in src/gtest_main.cc file, which consists of\n// a main() function which calls RUN_ALL_TESTS() for us.\n//\n// This runs all the tests you've defined, prints the result, and\n// returns 0 if successful, or 1 otherwise.\n//\n// Did you notice that we didn't register the tests?  The\n// RUN_ALL_TESTS() macro magically knows about all the tests we\n// defined.  Isn't this convenient?\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample2.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"sample2.h\"\n\n#include <string.h>\n\n// Clones a 0-terminated C string, allocating memory using new.\nconst char* MyString::CloneCString(const char* a_c_string) {\n  if (a_c_string == NULL) return NULL;\n\n  const size_t len = strlen(a_c_string);\n  char* const clone = new char[ len + 1 ];\n  memcpy(clone, a_c_string, len + 1);\n\n  return clone;\n}\n\n// Sets the 0-terminated C string this MyString object\n// represents.\nvoid MyString::Set(const char* a_c_string) {\n  // Makes sure this works when c_string == c_string_\n  const char* const temp = MyString::CloneCString(a_c_string);\n  delete[] c_string_;\n  c_string_ = temp;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample2.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_SAMPLES_SAMPLE2_H_\n#define GTEST_SAMPLES_SAMPLE2_H_\n\n#include <string.h>\n\n\n// A simple string class.\nclass MyString {\n private:\n  const char* c_string_;\n  const MyString& operator=(const MyString& rhs);\n\n public:\n  // Clones a 0-terminated C string, allocating memory using new.\n  static const char* CloneCString(const char* a_c_string);\n\n  ////////////////////////////////////////////////////////////\n  //\n  // C'tors\n\n  // The default c'tor constructs a NULL string.\n  MyString() : c_string_(NULL) {}\n\n  // Constructs a MyString by cloning a 0-terminated C string.\n  explicit MyString(const char* a_c_string) : c_string_(NULL) {\n    Set(a_c_string);\n  }\n\n  // Copy c'tor\n  MyString(const MyString& string) : c_string_(NULL) {\n    Set(string.c_string_);\n  }\n\n  ////////////////////////////////////////////////////////////\n  //\n  // D'tor.  MyString is intended to be a final class, so the d'tor\n  // doesn't need to be virtual.\n  ~MyString() { delete[] c_string_; }\n\n  // Gets the 0-terminated C string this MyString object represents.\n  const char* c_string() const { return c_string_; }\n\n  size_t Length() const {\n    return c_string_ == NULL ? 0 : strlen(c_string_);\n  }\n\n  // Sets the 0-terminated C string this MyString object represents.\n  void Set(const char* c_string);\n};\n\n\n#endif  // GTEST_SAMPLES_SAMPLE2_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample2_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n\n// This sample shows how to write a more complex unit test for a class\n// that has multiple member functions.\n//\n// Usually, it's a good idea to have one test for each method in your\n// class.  You don't have to do that exactly, but it helps to keep\n// your tests organized.  You may also throw in additional tests as\n// needed.\n\n#include \"sample2.h\"\n#include \"gtest/gtest.h\"\n\n// In this example, we test the MyString class (a simple string).\n\n// Tests the default c'tor.\nTEST(MyString, DefaultConstructor) {\n  const MyString s;\n\n  // Asserts that s.c_string() returns NULL.\n  //\n  // <TechnicalDetails>\n  //\n  // If we write NULL instead of\n  //\n  //   static_cast<const char *>(NULL)\n  //\n  // in this assertion, it will generate a warning on gcc 3.4.  The\n  // reason is that EXPECT_EQ needs to know the types of its\n  // arguments in order to print them when it fails.  Since NULL is\n  // #defined as 0, the compiler will use the formatter function for\n  // int to print it.  However, gcc thinks that NULL should be used as\n  // a pointer, not an int, and therefore complains.\n  //\n  // The root of the problem is C++'s lack of distinction between the\n  // integer number 0 and the null pointer constant.  Unfortunately,\n  // we have to live with this fact.\n  //\n  // </TechnicalDetails>\n  EXPECT_STREQ(NULL, s.c_string());\n\n  EXPECT_EQ(0u, s.Length());\n}\n\nconst char kHelloString[] = \"Hello, world!\";\n\n// Tests the c'tor that accepts a C string.\nTEST(MyString, ConstructorFromCString) {\n  const MyString s(kHelloString);\n  EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));\n  EXPECT_EQ(sizeof(kHelloString)/sizeof(kHelloString[0]) - 1,\n            s.Length());\n}\n\n// Tests the copy c'tor.\nTEST(MyString, CopyConstructor) {\n  const MyString s1(kHelloString);\n  const MyString s2 = s1;\n  EXPECT_EQ(0, strcmp(s2.c_string(), kHelloString));\n}\n\n// Tests the Set method.\nTEST(MyString, Set) {\n  MyString s;\n\n  s.Set(kHelloString);\n  EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));\n\n  // Set should work when the input pointer is the same as the one\n  // already in the MyString object.\n  s.Set(s.c_string());\n  EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));\n\n  // Can we set the MyString to NULL?\n  s.Set(NULL);\n  EXPECT_STREQ(NULL, s.c_string());\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample3-inl.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_SAMPLES_SAMPLE3_INL_H_\n#define GTEST_SAMPLES_SAMPLE3_INL_H_\n\n#include <stddef.h>\n\n\n// Queue is a simple queue implemented as a singled-linked list.\n//\n// The element type must support copy constructor.\ntemplate <typename E>  // E is the element type\nclass Queue;\n\n// QueueNode is a node in a Queue, which consists of an element of\n// type E and a pointer to the next node.\ntemplate <typename E>  // E is the element type\nclass QueueNode {\n  friend class Queue<E>;\n\n public:\n  // Gets the element in this node.\n  const E& element() const { return element_; }\n\n  // Gets the next node in the queue.\n  QueueNode* next() { return next_; }\n  const QueueNode* next() const { return next_; }\n\n private:\n  // Creates a node with a given element value.  The next pointer is\n  // set to NULL.\n  explicit QueueNode(const E& an_element) : element_(an_element), next_(NULL) {}\n\n  // We disable the default assignment operator and copy c'tor.\n  const QueueNode& operator = (const QueueNode&);\n  QueueNode(const QueueNode&);\n\n  E element_;\n  QueueNode* next_;\n};\n\ntemplate <typename E>  // E is the element type.\nclass Queue {\n public:\n  // Creates an empty queue.\n  Queue() : head_(NULL), last_(NULL), size_(0) {}\n\n  // D'tor.  Clears the queue.\n  ~Queue() { Clear(); }\n\n  // Clears the queue.\n  void Clear() {\n    if (size_ > 0) {\n      // 1. Deletes every node.\n      QueueNode<E>* node = head_;\n      QueueNode<E>* next = node->next();\n      for (; ;) {\n        delete node;\n        node = next;\n        if (node == NULL) break;\n        next = node->next();\n      }\n\n      // 2. Resets the member variables.\n      head_ = last_ = NULL;\n      size_ = 0;\n    }\n  }\n\n  // Gets the number of elements.\n  size_t Size() const { return size_; }\n\n  // Gets the first element of the queue, or NULL if the queue is empty.\n  QueueNode<E>* Head() { return head_; }\n  const QueueNode<E>* Head() const { return head_; }\n\n  // Gets the last element of the queue, or NULL if the queue is empty.\n  QueueNode<E>* Last() { return last_; }\n  const QueueNode<E>* Last() const { return last_; }\n\n  // Adds an element to the end of the queue.  A copy of the element is\n  // created using the copy constructor, and then stored in the queue.\n  // Changes made to the element in the queue doesn't affect the source\n  // object, and vice versa.\n  void Enqueue(const E& element) {\n    QueueNode<E>* new_node = new QueueNode<E>(element);\n\n    if (size_ == 0) {\n      head_ = last_ = new_node;\n      size_ = 1;\n    } else {\n      last_->next_ = new_node;\n      last_ = new_node;\n      size_++;\n    }\n  }\n\n  // Removes the head of the queue and returns it.  Returns NULL if\n  // the queue is empty.\n  E* Dequeue() {\n    if (size_ == 0) {\n      return NULL;\n    }\n\n    const QueueNode<E>* const old_head = head_;\n    head_ = head_->next_;\n    size_--;\n    if (size_ == 0) {\n      last_ = NULL;\n    }\n\n    E* element = new E(old_head->element());\n    delete old_head;\n\n    return element;\n  }\n\n  // Applies a function/functor on each element of the queue, and\n  // returns the result in a new queue.  The original queue is not\n  // affected.\n  template <typename F>\n  Queue* Map(F function) const {\n    Queue* new_queue = new Queue();\n    for (const QueueNode<E>* node = head_; node != NULL; node = node->next_) {\n      new_queue->Enqueue(function(node->element()));\n    }\n\n    return new_queue;\n  }\n\n private:\n  QueueNode<E>* head_;  // The first node of the queue.\n  QueueNode<E>* last_;  // The last node of the queue.\n  size_t size_;  // The number of elements in the queue.\n\n  // We disallow copying a queue.\n  Queue(const Queue&);\n  const Queue& operator = (const Queue&);\n};\n\n#endif  // GTEST_SAMPLES_SAMPLE3_INL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample3_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n\n// In this example, we use a more advanced feature of Google Test called\n// test fixture.\n//\n// A test fixture is a place to hold objects and functions shared by\n// all tests in a test case.  Using a test fixture avoids duplicating\n// the test code necessary to initialize and cleanup those common\n// objects for each test.  It is also useful for defining sub-routines\n// that your tests need to invoke a lot.\n//\n// <TechnicalDetails>\n//\n// The tests share the test fixture in the sense of code sharing, not\n// data sharing.  Each test is given its own fresh copy of the\n// fixture.  You cannot expect the data modified by one test to be\n// passed on to another test, which is a bad idea.\n//\n// The reason for this design is that tests should be independent and\n// repeatable.  In particular, a test should not fail as the result of\n// another test's failure.  If one test depends on info produced by\n// another test, then the two tests should really be one big test.\n//\n// The macros for indicating the success/failure of a test\n// (EXPECT_TRUE, FAIL, etc) need to know what the current test is\n// (when Google Test prints the test result, it tells you which test\n// each failure belongs to).  Technically, these macros invoke a\n// member function of the Test class.  Therefore, you cannot use them\n// in a global function.  That's why you should put test sub-routines\n// in a test fixture.\n//\n// </TechnicalDetails>\n\n#include \"sample3-inl.h\"\n#include \"gtest/gtest.h\"\n\n// To use a test fixture, derive a class from testing::Test.\nclass QueueTest : public testing::Test {\n protected:  // You should make the members protected s.t. they can be\n             // accessed from sub-classes.\n\n  // virtual void SetUp() will be called before each test is run.  You\n  // should define it if you need to initialize the varaibles.\n  // Otherwise, this can be skipped.\n  virtual void SetUp() {\n    q1_.Enqueue(1);\n    q2_.Enqueue(2);\n    q2_.Enqueue(3);\n  }\n\n  // virtual void TearDown() will be called after each test is run.\n  // You should define it if there is cleanup work to do.  Otherwise,\n  // you don't have to provide it.\n  //\n  // virtual void TearDown() {\n  // }\n\n  // A helper function that some test uses.\n  static int Double(int n) {\n    return 2*n;\n  }\n\n  // A helper function for testing Queue::Map().\n  void MapTester(const Queue<int> * q) {\n    // Creates a new queue, where each element is twice as big as the\n    // corresponding one in q.\n    const Queue<int> * const new_q = q->Map(Double);\n\n    // Verifies that the new queue has the same size as q.\n    ASSERT_EQ(q->Size(), new_q->Size());\n\n    // Verifies the relationship between the elements of the two queues.\n    for ( const QueueNode<int> * n1 = q->Head(), * n2 = new_q->Head();\n          n1 != NULL; n1 = n1->next(), n2 = n2->next() ) {\n      EXPECT_EQ(2 * n1->element(), n2->element());\n    }\n\n    delete new_q;\n  }\n\n  // Declares the variables your tests want to use.\n  Queue<int> q0_;\n  Queue<int> q1_;\n  Queue<int> q2_;\n};\n\n// When you have a test fixture, you define a test using TEST_F\n// instead of TEST.\n\n// Tests the default c'tor.\nTEST_F(QueueTest, DefaultConstructor) {\n  // You can access data in the test fixture here.\n  EXPECT_EQ(0u, q0_.Size());\n}\n\n// Tests Dequeue().\nTEST_F(QueueTest, Dequeue) {\n  int * n = q0_.Dequeue();\n  EXPECT_TRUE(n == NULL);\n\n  n = q1_.Dequeue();\n  ASSERT_TRUE(n != NULL);\n  EXPECT_EQ(1, *n);\n  EXPECT_EQ(0u, q1_.Size());\n  delete n;\n\n  n = q2_.Dequeue();\n  ASSERT_TRUE(n != NULL);\n  EXPECT_EQ(2, *n);\n  EXPECT_EQ(1u, q2_.Size());\n  delete n;\n}\n\n// Tests the Queue::Map() function.\nTEST_F(QueueTest, Map) {\n  MapTester(&q0_);\n  MapTester(&q1_);\n  MapTester(&q2_);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample4.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include <stdio.h>\n\n#include \"sample4.h\"\n\n// Returns the current counter value, and increments it.\nint Counter::Increment() {\n  return counter_++;\n}\n\n// Prints the current counter value to STDOUT.\nvoid Counter::Print() const {\n  printf(\"%d\", counter_);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample4.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// A sample program demonstrating using Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_SAMPLES_SAMPLE4_H_\n#define GTEST_SAMPLES_SAMPLE4_H_\n\n// A simple monotonic counter.\nclass Counter {\n private:\n  int counter_;\n\n public:\n  // Creates a counter that starts at 0.\n  Counter() : counter_(0) {}\n\n  // Returns the current counter value, and increments it.\n  int Increment();\n\n  // Prints the current counter value to STDOUT.\n  void Print() const;\n};\n\n#endif  // GTEST_SAMPLES_SAMPLE4_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample4_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest.h\"\n#include \"sample4.h\"\n\n// Tests the Increment() method.\nTEST(Counter, Increment) {\n  Counter c;\n\n  // EXPECT_EQ() evaluates its arguments exactly once, so they\n  // can have side effects.\n\n  EXPECT_EQ(0, c.Increment());\n  EXPECT_EQ(1, c.Increment());\n  EXPECT_EQ(2, c.Increment());\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample5_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// This sample teaches how to reuse a test fixture in multiple test\n// cases by deriving sub-fixtures from it.\n//\n// When you define a test fixture, you specify the name of the test\n// case that will use this fixture.  Therefore, a test fixture can\n// be used by only one test case.\n//\n// Sometimes, more than one test cases may want to use the same or\n// slightly different test fixtures.  For example, you may want to\n// make sure that all tests for a GUI library don't leak important\n// system resources like fonts and brushes.  In Google Test, you do\n// this by putting the shared logic in a super (as in \"super class\")\n// test fixture, and then have each test case use a fixture derived\n// from this super fixture.\n\n#include <limits.h>\n#include <time.h>\n#include \"sample3-inl.h\"\n#include \"gtest/gtest.h\"\n#include \"sample1.h\"\n\n// In this sample, we want to ensure that every test finishes within\n// ~5 seconds.  If a test takes longer to run, we consider it a\n// failure.\n//\n// We put the code for timing a test in a test fixture called\n// \"QuickTest\".  QuickTest is intended to be the super fixture that\n// other fixtures derive from, therefore there is no test case with\n// the name \"QuickTest\".  This is OK.\n//\n// Later, we will derive multiple test fixtures from QuickTest.\nclass QuickTest : public testing::Test {\n protected:\n  // Remember that SetUp() is run immediately before a test starts.\n  // This is a good place to record the start time.\n  virtual void SetUp() {\n    start_time_ = time(NULL);\n  }\n\n  // TearDown() is invoked immediately after a test finishes.  Here we\n  // check if the test was too slow.\n  virtual void TearDown() {\n    // Gets the time when the test finishes\n    const time_t end_time = time(NULL);\n\n    // Asserts that the test took no more than ~5 seconds.  Did you\n    // know that you can use assertions in SetUp() and TearDown() as\n    // well?\n    EXPECT_TRUE(end_time - start_time_ <= 5) << \"The test took too long.\";\n  }\n\n  // The UTC time (in seconds) when the test starts\n  time_t start_time_;\n};\n\n\n// We derive a fixture named IntegerFunctionTest from the QuickTest\n// fixture.  All tests using this fixture will be automatically\n// required to be quick.\nclass IntegerFunctionTest : public QuickTest {\n  // We don't need any more logic than already in the QuickTest fixture.\n  // Therefore the body is empty.\n};\n\n\n// Now we can write tests in the IntegerFunctionTest test case.\n\n// Tests Factorial()\nTEST_F(IntegerFunctionTest, Factorial) {\n  // Tests factorial of negative numbers.\n  EXPECT_EQ(1, Factorial(-5));\n  EXPECT_EQ(1, Factorial(-1));\n  EXPECT_GT(Factorial(-10), 0);\n\n  // Tests factorial of 0.\n  EXPECT_EQ(1, Factorial(0));\n\n  // Tests factorial of positive numbers.\n  EXPECT_EQ(1, Factorial(1));\n  EXPECT_EQ(2, Factorial(2));\n  EXPECT_EQ(6, Factorial(3));\n  EXPECT_EQ(40320, Factorial(8));\n}\n\n\n// Tests IsPrime()\nTEST_F(IntegerFunctionTest, IsPrime) {\n  // Tests negative input.\n  EXPECT_FALSE(IsPrime(-1));\n  EXPECT_FALSE(IsPrime(-2));\n  EXPECT_FALSE(IsPrime(INT_MIN));\n\n  // Tests some trivial cases.\n  EXPECT_FALSE(IsPrime(0));\n  EXPECT_FALSE(IsPrime(1));\n  EXPECT_TRUE(IsPrime(2));\n  EXPECT_TRUE(IsPrime(3));\n\n  // Tests positive input.\n  EXPECT_FALSE(IsPrime(4));\n  EXPECT_TRUE(IsPrime(5));\n  EXPECT_FALSE(IsPrime(6));\n  EXPECT_TRUE(IsPrime(23));\n}\n\n\n// The next test case (named \"QueueTest\") also needs to be quick, so\n// we derive another fixture from QuickTest.\n//\n// The QueueTest test fixture has some logic and shared objects in\n// addition to what's in QuickTest already.  We define the additional\n// stuff inside the body of the test fixture, as usual.\nclass QueueTest : public QuickTest {\n protected:\n  virtual void SetUp() {\n    // First, we need to set up the super fixture (QuickTest).\n    QuickTest::SetUp();\n\n    // Second, some additional setup for this fixture.\n    q1_.Enqueue(1);\n    q2_.Enqueue(2);\n    q2_.Enqueue(3);\n  }\n\n  // By default, TearDown() inherits the behavior of\n  // QuickTest::TearDown().  As we have no additional cleaning work\n  // for QueueTest, we omit it here.\n  //\n  // virtual void TearDown() {\n  //   QuickTest::TearDown();\n  // }\n\n  Queue<int> q0_;\n  Queue<int> q1_;\n  Queue<int> q2_;\n};\n\n\n// Now, let's write tests using the QueueTest fixture.\n\n// Tests the default constructor.\nTEST_F(QueueTest, DefaultConstructor) {\n  EXPECT_EQ(0u, q0_.Size());\n}\n\n// Tests Dequeue().\nTEST_F(QueueTest, Dequeue) {\n  int* n = q0_.Dequeue();\n  EXPECT_TRUE(n == NULL);\n\n  n = q1_.Dequeue();\n  EXPECT_TRUE(n != NULL);\n  EXPECT_EQ(1, *n);\n  EXPECT_EQ(0u, q1_.Size());\n  delete n;\n\n  n = q2_.Dequeue();\n  EXPECT_TRUE(n != NULL);\n  EXPECT_EQ(2, *n);\n  EXPECT_EQ(1u, q2_.Size());\n  delete n;\n}\n\n// If necessary, you can derive further test fixtures from a derived\n// fixture itself.  For example, you can derive another fixture from\n// QueueTest.  Google Test imposes no limit on how deep the hierarchy\n// can be.  In practice, however, you probably don't want it to be too\n// deep as to be confusing.\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample6_unittest.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// This sample shows how to test common properties of multiple\n// implementations of the same interface (aka interface tests).\n\n// The interface and its implementations are in this header.\n#include \"prime_tables.h\"\n\n#include \"gtest/gtest.h\"\n\n// First, we define some factory functions for creating instances of\n// the implementations.  You may be able to skip this step if all your\n// implementations can be constructed the same way.\n\ntemplate <class T>\nPrimeTable* CreatePrimeTable();\n\ntemplate <>\nPrimeTable* CreatePrimeTable<OnTheFlyPrimeTable>() {\n  return new OnTheFlyPrimeTable;\n}\n\ntemplate <>\nPrimeTable* CreatePrimeTable<PreCalculatedPrimeTable>() {\n  return new PreCalculatedPrimeTable(10000);\n}\n\n// Then we define a test fixture class template.\ntemplate <class T>\nclass PrimeTableTest : public testing::Test {\n protected:\n  // The ctor calls the factory function to create a prime table\n  // implemented by T.\n  PrimeTableTest() : table_(CreatePrimeTable<T>()) {}\n\n  virtual ~PrimeTableTest() { delete table_; }\n\n  // Note that we test an implementation via the base interface\n  // instead of the actual implementation class.  This is important\n  // for keeping the tests close to the real world scenario, where the\n  // implementation is invoked via the base interface.  It avoids\n  // got-yas where the implementation class has a method that shadows\n  // a method with the same name (but slightly different argument\n  // types) in the base interface, for example.\n  PrimeTable* const table_;\n};\n\n#if GTEST_HAS_TYPED_TEST\n\nusing testing::Types;\n\n// Google Test offers two ways for reusing tests for different types.\n// The first is called \"typed tests\".  You should use it if you\n// already know *all* the types you are gonna exercise when you write\n// the tests.\n\n// To write a typed test case, first use\n//\n//   TYPED_TEST_CASE(TestCaseName, TypeList);\n//\n// to declare it and specify the type parameters.  As with TEST_F,\n// TestCaseName must match the test fixture name.\n\n// The list of types we want to test.\ntypedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable> Implementations;\n\nTYPED_TEST_CASE(PrimeTableTest, Implementations);\n\n// Then use TYPED_TEST(TestCaseName, TestName) to define a typed test,\n// similar to TEST_F.\nTYPED_TEST(PrimeTableTest, ReturnsFalseForNonPrimes) {\n  // Inside the test body, you can refer to the type parameter by\n  // TypeParam, and refer to the fixture class by TestFixture.  We\n  // don't need them in this example.\n\n  // Since we are in the template world, C++ requires explicitly\n  // writing 'this->' when referring to members of the fixture class.\n  // This is something you have to learn to live with.\n  EXPECT_FALSE(this->table_->IsPrime(-5));\n  EXPECT_FALSE(this->table_->IsPrime(0));\n  EXPECT_FALSE(this->table_->IsPrime(1));\n  EXPECT_FALSE(this->table_->IsPrime(4));\n  EXPECT_FALSE(this->table_->IsPrime(6));\n  EXPECT_FALSE(this->table_->IsPrime(100));\n}\n\nTYPED_TEST(PrimeTableTest, ReturnsTrueForPrimes) {\n  EXPECT_TRUE(this->table_->IsPrime(2));\n  EXPECT_TRUE(this->table_->IsPrime(3));\n  EXPECT_TRUE(this->table_->IsPrime(5));\n  EXPECT_TRUE(this->table_->IsPrime(7));\n  EXPECT_TRUE(this->table_->IsPrime(11));\n  EXPECT_TRUE(this->table_->IsPrime(131));\n}\n\nTYPED_TEST(PrimeTableTest, CanGetNextPrime) {\n  EXPECT_EQ(2, this->table_->GetNextPrime(0));\n  EXPECT_EQ(3, this->table_->GetNextPrime(2));\n  EXPECT_EQ(5, this->table_->GetNextPrime(3));\n  EXPECT_EQ(7, this->table_->GetNextPrime(5));\n  EXPECT_EQ(11, this->table_->GetNextPrime(7));\n  EXPECT_EQ(131, this->table_->GetNextPrime(128));\n}\n\n// That's it!  Google Test will repeat each TYPED_TEST for each type\n// in the type list specified in TYPED_TEST_CASE.  Sit back and be\n// happy that you don't have to define them multiple times.\n\n#endif  // GTEST_HAS_TYPED_TEST\n\n#if GTEST_HAS_TYPED_TEST_P\n\nusing testing::Types;\n\n// Sometimes, however, you don't yet know all the types that you want\n// to test when you write the tests.  For example, if you are the\n// author of an interface and expect other people to implement it, you\n// might want to write a set of tests to make sure each implementation\n// conforms to some basic requirements, but you don't know what\n// implementations will be written in the future.\n//\n// How can you write the tests without committing to the type\n// parameters?  That's what \"type-parameterized tests\" can do for you.\n// It is a bit more involved than typed tests, but in return you get a\n// test pattern that can be reused in many contexts, which is a big\n// win.  Here's how you do it:\n\n// First, define a test fixture class template.  Here we just reuse\n// the PrimeTableTest fixture defined earlier:\n\ntemplate <class T>\nclass PrimeTableTest2 : public PrimeTableTest<T> {\n};\n\n// Then, declare the test case.  The argument is the name of the test\n// fixture, and also the name of the test case (as usual).  The _P\n// suffix is for \"parameterized\" or \"pattern\".\nTYPED_TEST_CASE_P(PrimeTableTest2);\n\n// Next, use TYPED_TEST_P(TestCaseName, TestName) to define a test,\n// similar to what you do with TEST_F.\nTYPED_TEST_P(PrimeTableTest2, ReturnsFalseForNonPrimes) {\n  EXPECT_FALSE(this->table_->IsPrime(-5));\n  EXPECT_FALSE(this->table_->IsPrime(0));\n  EXPECT_FALSE(this->table_->IsPrime(1));\n  EXPECT_FALSE(this->table_->IsPrime(4));\n  EXPECT_FALSE(this->table_->IsPrime(6));\n  EXPECT_FALSE(this->table_->IsPrime(100));\n}\n\nTYPED_TEST_P(PrimeTableTest2, ReturnsTrueForPrimes) {\n  EXPECT_TRUE(this->table_->IsPrime(2));\n  EXPECT_TRUE(this->table_->IsPrime(3));\n  EXPECT_TRUE(this->table_->IsPrime(5));\n  EXPECT_TRUE(this->table_->IsPrime(7));\n  EXPECT_TRUE(this->table_->IsPrime(11));\n  EXPECT_TRUE(this->table_->IsPrime(131));\n}\n\nTYPED_TEST_P(PrimeTableTest2, CanGetNextPrime) {\n  EXPECT_EQ(2, this->table_->GetNextPrime(0));\n  EXPECT_EQ(3, this->table_->GetNextPrime(2));\n  EXPECT_EQ(5, this->table_->GetNextPrime(3));\n  EXPECT_EQ(7, this->table_->GetNextPrime(5));\n  EXPECT_EQ(11, this->table_->GetNextPrime(7));\n  EXPECT_EQ(131, this->table_->GetNextPrime(128));\n}\n\n// Type-parameterized tests involve one extra step: you have to\n// enumerate the tests you defined:\nREGISTER_TYPED_TEST_CASE_P(\n    PrimeTableTest2,  // The first argument is the test case name.\n    // The rest of the arguments are the test names.\n    ReturnsFalseForNonPrimes, ReturnsTrueForPrimes, CanGetNextPrime);\n\n// At this point the test pattern is done.  However, you don't have\n// any real test yet as you haven't said which types you want to run\n// the tests with.\n\n// To turn the abstract test pattern into real tests, you instantiate\n// it with a list of types.  Usually the test pattern will be defined\n// in a .h file, and anyone can #include and instantiate it.  You can\n// even instantiate it more than once in the same program.  To tell\n// different instances apart, you give each of them a name, which will\n// become part of the test case name and can be used in test filters.\n\n// The list of types we want to test.  Note that it doesn't have to be\n// defined at the time we write the TYPED_TEST_P()s.\ntypedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable>\n    PrimeTableImplementations;\nINSTANTIATE_TYPED_TEST_CASE_P(OnTheFlyAndPreCalculated,    // Instance name\n                              PrimeTableTest2,             // Test case name\n                              PrimeTableImplementations);  // Type list\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample7_unittest.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// This sample shows how to test common properties of multiple\n// implementations of an interface (aka interface tests) using\n// value-parameterized tests. Each test in the test case has\n// a parameter that is an interface pointer to an implementation\n// tested.\n\n// The interface and its implementations are in this header.\n#include \"prime_tables.h\"\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nusing ::testing::TestWithParam;\nusing ::testing::Values;\n\n// As a general rule, to prevent a test from affecting the tests that come\n// after it, you should create and destroy the tested objects for each test\n// instead of reusing them.  In this sample we will define a simple factory\n// function for PrimeTable objects.  We will instantiate objects in test's\n// SetUp() method and delete them in TearDown() method.\ntypedef PrimeTable* CreatePrimeTableFunc();\n\nPrimeTable* CreateOnTheFlyPrimeTable() {\n  return new OnTheFlyPrimeTable();\n}\n\ntemplate <size_t max_precalculated>\nPrimeTable* CreatePreCalculatedPrimeTable() {\n  return new PreCalculatedPrimeTable(max_precalculated);\n}\n\n// Inside the test body, fixture constructor, SetUp(), and TearDown() you\n// can refer to the test parameter by GetParam().  In this case, the test\n// parameter is a factory function which we call in fixture's SetUp() to\n// create and store an instance of PrimeTable.\nclass PrimeTableTest : public TestWithParam<CreatePrimeTableFunc*> {\n public:\n  virtual ~PrimeTableTest() { delete table_; }\n  virtual void SetUp() { table_ = (*GetParam())(); }\n  virtual void TearDown() {\n    delete table_;\n    table_ = NULL;\n  }\n\n protected:\n  PrimeTable* table_;\n};\n\nTEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {\n  EXPECT_FALSE(table_->IsPrime(-5));\n  EXPECT_FALSE(table_->IsPrime(0));\n  EXPECT_FALSE(table_->IsPrime(1));\n  EXPECT_FALSE(table_->IsPrime(4));\n  EXPECT_FALSE(table_->IsPrime(6));\n  EXPECT_FALSE(table_->IsPrime(100));\n}\n\nTEST_P(PrimeTableTest, ReturnsTrueForPrimes) {\n  EXPECT_TRUE(table_->IsPrime(2));\n  EXPECT_TRUE(table_->IsPrime(3));\n  EXPECT_TRUE(table_->IsPrime(5));\n  EXPECT_TRUE(table_->IsPrime(7));\n  EXPECT_TRUE(table_->IsPrime(11));\n  EXPECT_TRUE(table_->IsPrime(131));\n}\n\nTEST_P(PrimeTableTest, CanGetNextPrime) {\n  EXPECT_EQ(2, table_->GetNextPrime(0));\n  EXPECT_EQ(3, table_->GetNextPrime(2));\n  EXPECT_EQ(5, table_->GetNextPrime(3));\n  EXPECT_EQ(7, table_->GetNextPrime(5));\n  EXPECT_EQ(11, table_->GetNextPrime(7));\n  EXPECT_EQ(131, table_->GetNextPrime(128));\n}\n\n// In order to run value-parameterized tests, you need to instantiate them,\n// or bind them to a list of values which will be used as test parameters.\n// You can instantiate them in a different translation module, or even\n// instantiate them several times.\n//\n// Here, we instantiate our tests with a list of two PrimeTable object\n// factory functions:\nINSTANTIATE_TEST_CASE_P(\n    OnTheFlyAndPreCalculated,\n    PrimeTableTest,\n    Values(&CreateOnTheFlyPrimeTable, &CreatePreCalculatedPrimeTable<1000>));\n\n#else\n\n// Google Test may not support value-parameterized tests with some\n// compilers. If we use conditional compilation to compile out all\n// code referring to the gtest_main library, MSVC linker will not link\n// that library at all and consequently complain about missing entry\n// point defined in that library (fatal error LNK1561: entry point\n// must be defined). This dummy test keeps gtest_main linked in.\nTEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {}\n\n#endif  // GTEST_HAS_PARAM_TEST\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample8_unittest.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// This sample shows how to test code relying on some global flag variables.\n// Combine() helps with generating all possible combinations of such flags,\n// and each test is given one combination as a parameter.\n\n// Use class definitions to test from this header.\n#include \"prime_tables.h\"\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_COMBINE\n\n// Suppose we want to introduce a new, improved implementation of PrimeTable\n// which combines speed of PrecalcPrimeTable and versatility of\n// OnTheFlyPrimeTable (see prime_tables.h). Inside it instantiates both\n// PrecalcPrimeTable and OnTheFlyPrimeTable and uses the one that is more\n// appropriate under the circumstances. But in low memory conditions, it can be\n// told to instantiate without PrecalcPrimeTable instance at all and use only\n// OnTheFlyPrimeTable.\nclass HybridPrimeTable : public PrimeTable {\n public:\n  HybridPrimeTable(bool force_on_the_fly, int max_precalculated)\n      : on_the_fly_impl_(new OnTheFlyPrimeTable),\n        precalc_impl_(force_on_the_fly ? NULL :\n                          new PreCalculatedPrimeTable(max_precalculated)),\n        max_precalculated_(max_precalculated) {}\n  virtual ~HybridPrimeTable() {\n    delete on_the_fly_impl_;\n    delete precalc_impl_;\n  }\n\n  virtual bool IsPrime(int n) const {\n    if (precalc_impl_ != NULL && n < max_precalculated_)\n      return precalc_impl_->IsPrime(n);\n    else\n      return on_the_fly_impl_->IsPrime(n);\n  }\n\n  virtual int GetNextPrime(int p) const {\n    int next_prime = -1;\n    if (precalc_impl_ != NULL && p < max_precalculated_)\n      next_prime = precalc_impl_->GetNextPrime(p);\n\n    return next_prime != -1 ? next_prime : on_the_fly_impl_->GetNextPrime(p);\n  }\n\n private:\n  OnTheFlyPrimeTable* on_the_fly_impl_;\n  PreCalculatedPrimeTable* precalc_impl_;\n  int max_precalculated_;\n};\n\nusing ::testing::TestWithParam;\nusing ::testing::Bool;\nusing ::testing::Values;\nusing ::testing::Combine;\n\n// To test all code paths for HybridPrimeTable we must test it with numbers\n// both within and outside PreCalculatedPrimeTable's capacity and also with\n// PreCalculatedPrimeTable disabled. We do this by defining fixture which will\n// accept different combinations of parameters for instantiating a\n// HybridPrimeTable instance.\nclass PrimeTableTest : public TestWithParam< ::std::tr1::tuple<bool, int> > {\n protected:\n  virtual void SetUp() {\n    // This can be written as\n    //\n    // bool force_on_the_fly;\n    // int max_precalculated;\n    // tie(force_on_the_fly, max_precalculated) = GetParam();\n    //\n    // once the Google C++ Style Guide allows use of ::std::tr1::tie.\n    //\n    bool force_on_the_fly = ::std::tr1::get<0>(GetParam());\n    int max_precalculated = ::std::tr1::get<1>(GetParam());\n    table_ = new HybridPrimeTable(force_on_the_fly, max_precalculated);\n  }\n  virtual void TearDown() {\n    delete table_;\n    table_ = NULL;\n  }\n  HybridPrimeTable* table_;\n};\n\nTEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {\n  // Inside the test body, you can refer to the test parameter by GetParam().\n  // In this case, the test parameter is a PrimeTable interface pointer which\n  // we can use directly.\n  // Please note that you can also save it in the fixture's SetUp() method\n  // or constructor and use saved copy in the tests.\n\n  EXPECT_FALSE(table_->IsPrime(-5));\n  EXPECT_FALSE(table_->IsPrime(0));\n  EXPECT_FALSE(table_->IsPrime(1));\n  EXPECT_FALSE(table_->IsPrime(4));\n  EXPECT_FALSE(table_->IsPrime(6));\n  EXPECT_FALSE(table_->IsPrime(100));\n}\n\nTEST_P(PrimeTableTest, ReturnsTrueForPrimes) {\n  EXPECT_TRUE(table_->IsPrime(2));\n  EXPECT_TRUE(table_->IsPrime(3));\n  EXPECT_TRUE(table_->IsPrime(5));\n  EXPECT_TRUE(table_->IsPrime(7));\n  EXPECT_TRUE(table_->IsPrime(11));\n  EXPECT_TRUE(table_->IsPrime(131));\n}\n\nTEST_P(PrimeTableTest, CanGetNextPrime) {\n  EXPECT_EQ(2, table_->GetNextPrime(0));\n  EXPECT_EQ(3, table_->GetNextPrime(2));\n  EXPECT_EQ(5, table_->GetNextPrime(3));\n  EXPECT_EQ(7, table_->GetNextPrime(5));\n  EXPECT_EQ(11, table_->GetNextPrime(7));\n  EXPECT_EQ(131, table_->GetNextPrime(128));\n}\n\n// In order to run value-parameterized tests, you need to instantiate them,\n// or bind them to a list of values which will be used as test parameters.\n// You can instantiate them in a different translation module, or even\n// instantiate them several times.\n//\n// Here, we instantiate our tests with a list of parameters. We must combine\n// all variations of the boolean flag suppressing PrecalcPrimeTable and some\n// meaningful values for tests. We choose a small value (1), and a value that\n// will put some of the tested numbers beyond the capability of the\n// PrecalcPrimeTable instance and some inside it (10). Combine will produce all\n// possible combinations.\nINSTANTIATE_TEST_CASE_P(MeaningfulTestParameters,\n                        PrimeTableTest,\n                        Combine(Bool(), Values(1, 10)));\n\n#else\n\n// Google Test may not support Combine() with some compilers. If we\n// use conditional compilation to compile out all code referring to\n// the gtest_main library, MSVC linker will not link that library at\n// all and consequently complain about missing entry point defined in\n// that library (fatal error LNK1561: entry point must be\n// defined). This dummy test keeps gtest_main linked in.\nTEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {}\n\n#endif  // GTEST_HAS_COMBINE\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/samples/sample9_unittest.cc",
    "content": "// Copyright 2009 Google Inc. All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n\n// This sample shows how to use Google Test listener API to implement\n// an alternative console output and how to use the UnitTest reflection API\n// to enumerate test cases and tests and to inspect their results.\n\n#include <stdio.h>\n\n#include \"gtest/gtest.h\"\n\nusing ::testing::EmptyTestEventListener;\nusing ::testing::InitGoogleTest;\nusing ::testing::Test;\nusing ::testing::TestCase;\nusing ::testing::TestEventListeners;\nusing ::testing::TestInfo;\nusing ::testing::TestPartResult;\nusing ::testing::UnitTest;\n\nnamespace {\n\n// Provides alternative output mode which produces minimal amount of\n// information about tests.\nclass TersePrinter : public EmptyTestEventListener {\n private:\n  // Called before any test activity starts.\n  virtual void OnTestProgramStart(const UnitTest& /* unit_test */) {}\n\n  // Called after all test activities have ended.\n  virtual void OnTestProgramEnd(const UnitTest& unit_test) {\n    fprintf(stdout, \"TEST %s\\n\", unit_test.Passed() ? \"PASSED\" : \"FAILED\");\n    fflush(stdout);\n  }\n\n  // Called before a test starts.\n  virtual void OnTestStart(const TestInfo& test_info) {\n    fprintf(stdout,\n            \"*** Test %s.%s starting.\\n\",\n            test_info.test_case_name(),\n            test_info.name());\n    fflush(stdout);\n  }\n\n  // Called after a failed assertion or a SUCCEED() invocation.\n  virtual void OnTestPartResult(const TestPartResult& test_part_result) {\n    fprintf(stdout,\n            \"%s in %s:%d\\n%s\\n\",\n            test_part_result.failed() ? \"*** Failure\" : \"Success\",\n            test_part_result.file_name(),\n            test_part_result.line_number(),\n            test_part_result.summary());\n    fflush(stdout);\n  }\n\n  // Called after a test ends.\n  virtual void OnTestEnd(const TestInfo& test_info) {\n    fprintf(stdout,\n            \"*** Test %s.%s ending.\\n\",\n            test_info.test_case_name(),\n            test_info.name());\n    fflush(stdout);\n  }\n};  // class TersePrinter\n\nTEST(CustomOutputTest, PrintsMessage) {\n  printf(\"Printing something from the test body...\\n\");\n}\n\nTEST(CustomOutputTest, Succeeds) {\n  SUCCEED() << \"SUCCEED() has been invoked from here\";\n}\n\nTEST(CustomOutputTest, Fails) {\n  EXPECT_EQ(1, 2)\n      << \"This test fails in order to demonstrate alternative failure messages\";\n}\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  InitGoogleTest(&argc, argv);\n\n  bool terse_output = false;\n  if (argc > 1 && strcmp(argv[1], \"--terse_output\") == 0 )\n    terse_output = true;\n  else\n    printf(\"%s\\n\", \"Run this program with --terse_output to change the way \"\n           \"it prints its output.\");\n\n  UnitTest& unit_test = *UnitTest::GetInstance();\n\n  // If we are given the --terse_output command line flag, suppresses the\n  // standard output and attaches own result printer.\n  if (terse_output) {\n    TestEventListeners& listeners = unit_test.listeners();\n\n    // Removes the default console output listener from the list so it will\n    // not receive events from Google Test and won't print any output. Since\n    // this operation transfers ownership of the listener to the caller we\n    // have to delete it as well.\n    delete listeners.Release(listeners.default_result_printer());\n\n    // Adds the custom output listener to the list. It will now receive\n    // events from Google Test and print the alternative output. We don't\n    // have to worry about deleting it since Google Test assumes ownership\n    // over it after adding it to the list.\n    listeners.Append(new TersePrinter);\n  }\n  int ret_val = RUN_ALL_TESTS();\n\n  // This is an example of using the UnitTest reflection API to inspect test\n  // results. Here we discount failures from the tests we expected to fail.\n  int unexpectedly_failed_tests = 0;\n  for (int i = 0; i < unit_test.total_test_case_count(); ++i) {\n    const TestCase& test_case = *unit_test.GetTestCase(i);\n    for (int j = 0; j < test_case.total_test_count(); ++j) {\n      const TestInfo& test_info = *test_case.GetTestInfo(j);\n      // Counts failed tests that were not meant to fail (those without\n      // 'Fails' in the name).\n      if (test_info.result()->Failed() &&\n          strcmp(test_info.name(), \"Fails\") != 0) {\n        unexpectedly_failed_tests++;\n      }\n    }\n  }\n\n  // Test that were meant to fail should not affect the test program outcome.\n  if (unexpectedly_failed_tests == 0)\n    ret_val = 0;\n\n  return ret_val;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-all.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: mheule@google.com (Markus Heule)\n//\n// Google C++ Testing Framework (Google Test)\n//\n// Sometimes it's desirable to build Google Test by compiling a single file.\n// This file serves this purpose.\n\n// This line ensures that gtest.h can be compiled on its own, even\n// when it's fused.\n#include \"gtest/gtest.h\"\n\n// The following lines pull in the real gtest *.cc files.\n#include \"src/gtest.cc\"\n#include \"src/gtest-death-test.cc\"\n#include \"src/gtest-filepath.cc\"\n#include \"src/gtest-port.cc\"\n#include \"src/gtest-printers.cc\"\n#include \"src/gtest-test-part.cc\"\n#include \"src/gtest-typed-test.cc\"\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-death-test.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev)\n//\n// This file implements death tests.\n\n#include \"gtest/gtest-death-test.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_HAS_DEATH_TEST\n\n# if GTEST_OS_MAC\n#  include <crt_externs.h>\n# endif  // GTEST_OS_MAC\n\n# include <errno.h>\n# include <fcntl.h>\n# include <limits.h>\n\n# if GTEST_OS_LINUX\n#  include <signal.h>\n# endif  // GTEST_OS_LINUX\n\n# include <stdarg.h>\n\n# if GTEST_OS_WINDOWS\n#  include <windows.h>\n# else\n#  include <sys/mman.h>\n#  include <sys/wait.h>\n# endif  // GTEST_OS_WINDOWS\n\n# if GTEST_OS_QNX\n#  include <spawn.h>\n# endif  // GTEST_OS_QNX\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-string.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\n\n// Constants.\n\n// The default death test style.\nstatic const char kDefaultDeathTestStyle[] = \"fast\";\n\nGTEST_DEFINE_string_(\n    death_test_style,\n    internal::StringFromGTestEnv(\"death_test_style\", kDefaultDeathTestStyle),\n    \"Indicates how to run a death test in a forked child process: \"\n    \"\\\"threadsafe\\\" (child process re-executes the test binary \"\n    \"from the beginning, running only the specific death test) or \"\n    \"\\\"fast\\\" (child process runs the death test immediately \"\n    \"after forking).\");\n\nGTEST_DEFINE_bool_(\n    death_test_use_fork,\n    internal::BoolFromGTestEnv(\"death_test_use_fork\", false),\n    \"Instructs to use fork()/_exit() instead of clone() in death tests. \"\n    \"Ignored and always uses fork() on POSIX systems where clone() is not \"\n    \"implemented. Useful when running under valgrind or similar tools if \"\n    \"those do not support clone(). Valgrind 3.3.1 will just fail if \"\n    \"it sees an unsupported combination of clone() flags. \"\n    \"It is not recommended to use this flag w/o valgrind though it will \"\n    \"work in 99% of the cases. Once valgrind is fixed, this flag will \"\n    \"most likely be removed.\");\n\nnamespace internal {\nGTEST_DEFINE_string_(\n    internal_run_death_test, \"\",\n    \"Indicates the file, line number, temporal index of \"\n    \"the single death test to run, and a file descriptor to \"\n    \"which a success code may be sent, all separated by \"\n    \"the '|' characters.  This flag is specified if and only if the current \"\n    \"process is a sub-process launched for running a thread-safe \"\n    \"death test.  FOR INTERNAL USE ONLY.\");\n}  // namespace internal\n\n#if GTEST_HAS_DEATH_TEST\n\nnamespace internal {\n\n// Valid only for fast death tests. Indicates the code is running in the\n// child process of a fast style death test.\nstatic bool g_in_fast_death_test_child = false;\n\n// Returns a Boolean value indicating whether the caller is currently\n// executing in the context of the death test child process.  Tools such as\n// Valgrind heap checkers may need this to modify their behavior in death\n// tests.  IMPORTANT: This is an internal utility.  Using it may break the\n// implementation of death tests.  User code MUST NOT use it.\nbool InDeathTestChild() {\n# if GTEST_OS_WINDOWS\n\n  // On Windows, death tests are thread-safe regardless of the value of the\n  // death_test_style flag.\n  return !GTEST_FLAG(internal_run_death_test).empty();\n\n# else\n\n  if (GTEST_FLAG(death_test_style) == \"threadsafe\")\n    return !GTEST_FLAG(internal_run_death_test).empty();\n  else\n    return g_in_fast_death_test_child;\n#endif\n}\n\n}  // namespace internal\n\n// ExitedWithCode constructor.\nExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) {\n}\n\n// ExitedWithCode function-call operator.\nbool ExitedWithCode::operator()(int exit_status) const {\n# if GTEST_OS_WINDOWS\n\n  return exit_status == exit_code_;\n\n# else\n\n  return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_;\n\n# endif  // GTEST_OS_WINDOWS\n}\n\n# if !GTEST_OS_WINDOWS\n// KilledBySignal constructor.\nKilledBySignal::KilledBySignal(int signum) : signum_(signum) {\n}\n\n// KilledBySignal function-call operator.\nbool KilledBySignal::operator()(int exit_status) const {\n  return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_;\n}\n# endif  // !GTEST_OS_WINDOWS\n\nnamespace internal {\n\n// Utilities needed for death tests.\n\n// Generates a textual description of a given exit code, in the format\n// specified by wait(2).\nstatic std::string ExitSummary(int exit_code) {\n  Message m;\n\n# if GTEST_OS_WINDOWS\n\n  m << \"Exited with exit status \" << exit_code;\n\n# else\n\n  if (WIFEXITED(exit_code)) {\n    m << \"Exited with exit status \" << WEXITSTATUS(exit_code);\n  } else if (WIFSIGNALED(exit_code)) {\n    m << \"Terminated by signal \" << WTERMSIG(exit_code);\n  }\n#  ifdef WCOREDUMP\n  if (WCOREDUMP(exit_code)) {\n    m << \" (core dumped)\";\n  }\n#  endif\n# endif  // GTEST_OS_WINDOWS\n\n  return m.GetString();\n}\n\n// Returns true if exit_status describes a process that was terminated\n// by a signal, or exited normally with a nonzero exit code.\nbool ExitedUnsuccessfully(int exit_status) {\n  return !ExitedWithCode(0)(exit_status);\n}\n\n# if !GTEST_OS_WINDOWS\n// Generates a textual failure message when a death test finds more than\n// one thread running, or cannot determine the number of threads, prior\n// to executing the given statement.  It is the responsibility of the\n// caller not to pass a thread_count of 1.\nstatic std::string DeathTestThreadWarning(size_t thread_count) {\n  Message msg;\n  msg << \"Death tests use fork(), which is unsafe particularly\"\n      << \" in a threaded context. For this test, \" << GTEST_NAME_ << \" \";\n  if (thread_count == 0)\n    msg << \"couldn't detect the number of threads.\";\n  else\n    msg << \"detected \" << thread_count << \" threads.\";\n  return msg.GetString();\n}\n# endif  // !GTEST_OS_WINDOWS\n\n// Flag characters for reporting a death test that did not die.\nstatic const char kDeathTestLived = 'L';\nstatic const char kDeathTestReturned = 'R';\nstatic const char kDeathTestThrew = 'T';\nstatic const char kDeathTestInternalError = 'I';\n\n// An enumeration describing all of the possible ways that a death test can\n// conclude.  DIED means that the process died while executing the test\n// code; LIVED means that process lived beyond the end of the test code;\n// RETURNED means that the test statement attempted to execute a return\n// statement, which is not allowed; THREW means that the test statement\n// returned control by throwing an exception.  IN_PROGRESS means the test\n// has not yet concluded.\n// TODO(vladl@google.com): Unify names and possibly values for\n// AbortReason, DeathTestOutcome, and flag characters above.\nenum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW };\n\n// Routine for aborting the program which is safe to call from an\n// exec-style death test child process, in which case the error\n// message is propagated back to the parent process.  Otherwise, the\n// message is simply printed to stderr.  In either case, the program\n// then exits with status 1.\nvoid DeathTestAbort(const std::string& message) {\n  // On a POSIX system, this function may be called from a threadsafe-style\n  // death test child process, which operates on a very small stack.  Use\n  // the heap for any additional non-minuscule memory requirements.\n  const InternalRunDeathTestFlag* const flag =\n      GetUnitTestImpl()->internal_run_death_test_flag();\n  if (flag != NULL) {\n    FILE* parent = posix::FDOpen(flag->write_fd(), \"w\");\n    fputc(kDeathTestInternalError, parent);\n    fprintf(parent, \"%s\", message.c_str());\n    fflush(parent);\n    _exit(1);\n  } else {\n    fprintf(stderr, \"%s\", message.c_str());\n    fflush(stderr);\n    posix::Abort();\n  }\n}\n\n// A replacement for CHECK that calls DeathTestAbort if the assertion\n// fails.\n# define GTEST_DEATH_TEST_CHECK_(expression) \\\n  do { \\\n    if (!::testing::internal::IsTrue(expression)) { \\\n      DeathTestAbort( \\\n          ::std::string(\"CHECK failed: File \") + __FILE__ +  \", line \" \\\n          + ::testing::internal::StreamableToString(__LINE__) + \": \" \\\n          + #expression); \\\n    } \\\n  } while (::testing::internal::AlwaysFalse())\n\n// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for\n// evaluating any system call that fulfills two conditions: it must return\n// -1 on failure, and set errno to EINTR when it is interrupted and\n// should be tried again.  The macro expands to a loop that repeatedly\n// evaluates the expression as long as it evaluates to -1 and sets\n// errno to EINTR.  If the expression evaluates to -1 but errno is\n// something other than EINTR, DeathTestAbort is called.\n# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \\\n  do { \\\n    int gtest_retval; \\\n    do { \\\n      gtest_retval = (expression); \\\n    } while (gtest_retval == -1 && errno == EINTR); \\\n    if (gtest_retval == -1) { \\\n      DeathTestAbort( \\\n          ::std::string(\"CHECK failed: File \") + __FILE__ + \", line \" \\\n          + ::testing::internal::StreamableToString(__LINE__) + \": \" \\\n          + #expression + \" != -1\"); \\\n    } \\\n  } while (::testing::internal::AlwaysFalse())\n\n// Returns the message describing the last system error in errno.\nstd::string GetLastErrnoDescription() {\n    return errno == 0 ? \"\" : posix::StrError(errno);\n}\n\n// This is called from a death test parent process to read a failure\n// message from the death test child process and log it with the FATAL\n// severity. On Windows, the message is read from a pipe handle. On other\n// platforms, it is read from a file descriptor.\nstatic void FailFromInternalError(int fd) {\n  Message error;\n  char buffer[256];\n  int num_read;\n\n  do {\n    while ((num_read = posix::Read(fd, buffer, 255)) > 0) {\n      buffer[num_read] = '\\0';\n      error << buffer;\n    }\n  } while (num_read == -1 && errno == EINTR);\n\n  if (num_read == 0) {\n    GTEST_LOG_(FATAL) << error.GetString();\n  } else {\n    const int last_error = errno;\n    GTEST_LOG_(FATAL) << \"Error while reading death test internal: \"\n                      << GetLastErrnoDescription() << \" [\" << last_error << \"]\";\n  }\n}\n\n// Death test constructor.  Increments the running death test count\n// for the current test.\nDeathTest::DeathTest() {\n  TestInfo* const info = GetUnitTestImpl()->current_test_info();\n  if (info == NULL) {\n    DeathTestAbort(\"Cannot run a death test outside of a TEST or \"\n                   \"TEST_F construct\");\n  }\n}\n\n// Creates and returns a death test by dispatching to the current\n// death test factory.\nbool DeathTest::Create(const char* statement, const RE* regex,\n                       const char* file, int line, DeathTest** test) {\n  return GetUnitTestImpl()->death_test_factory()->Create(\n      statement, regex, file, line, test);\n}\n\nconst char* DeathTest::LastMessage() {\n  return last_death_test_message_.c_str();\n}\n\nvoid DeathTest::set_last_death_test_message(const std::string& message) {\n  last_death_test_message_ = message;\n}\n\nstd::string DeathTest::last_death_test_message_;\n\n// Provides cross platform implementation for some death functionality.\nclass DeathTestImpl : public DeathTest {\n protected:\n  DeathTestImpl(const char* a_statement, const RE* a_regex)\n      : statement_(a_statement),\n        regex_(a_regex),\n        spawned_(false),\n        status_(-1),\n        outcome_(IN_PROGRESS),\n        read_fd_(-1),\n        write_fd_(-1) {}\n\n  // read_fd_ is expected to be closed and cleared by a derived class.\n  ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); }\n\n  void Abort(AbortReason reason);\n  virtual bool Passed(bool status_ok);\n\n  const char* statement() const { return statement_; }\n  const RE* regex() const { return regex_; }\n  bool spawned() const { return spawned_; }\n  void set_spawned(bool is_spawned) { spawned_ = is_spawned; }\n  int status() const { return status_; }\n  void set_status(int a_status) { status_ = a_status; }\n  DeathTestOutcome outcome() const { return outcome_; }\n  void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; }\n  int read_fd() const { return read_fd_; }\n  void set_read_fd(int fd) { read_fd_ = fd; }\n  int write_fd() const { return write_fd_; }\n  void set_write_fd(int fd) { write_fd_ = fd; }\n\n  // Called in the parent process only. Reads the result code of the death\n  // test child process via a pipe, interprets it to set the outcome_\n  // member, and closes read_fd_.  Outputs diagnostics and terminates in\n  // case of unexpected codes.\n  void ReadAndInterpretStatusByte();\n\n private:\n  // The textual content of the code this object is testing.  This class\n  // doesn't own this string and should not attempt to delete it.\n  const char* const statement_;\n  // The regular expression which test output must match.  DeathTestImpl\n  // doesn't own this object and should not attempt to delete it.\n  const RE* const regex_;\n  // True if the death test child process has been successfully spawned.\n  bool spawned_;\n  // The exit status of the child process.\n  int status_;\n  // How the death test concluded.\n  DeathTestOutcome outcome_;\n  // Descriptor to the read end of the pipe to the child process.  It is\n  // always -1 in the child process.  The child keeps its write end of the\n  // pipe in write_fd_.\n  int read_fd_;\n  // Descriptor to the child's write end of the pipe to the parent process.\n  // It is always -1 in the parent process.  The parent keeps its end of the\n  // pipe in read_fd_.\n  int write_fd_;\n};\n\n// Called in the parent process only. Reads the result code of the death\n// test child process via a pipe, interprets it to set the outcome_\n// member, and closes read_fd_.  Outputs diagnostics and terminates in\n// case of unexpected codes.\nvoid DeathTestImpl::ReadAndInterpretStatusByte() {\n  char flag;\n  int bytes_read;\n\n  // The read() here blocks until data is available (signifying the\n  // failure of the death test) or until the pipe is closed (signifying\n  // its success), so it's okay to call this in the parent before\n  // the child process has exited.\n  do {\n    bytes_read = posix::Read(read_fd(), &flag, 1);\n  } while (bytes_read == -1 && errno == EINTR);\n\n  if (bytes_read == 0) {\n    set_outcome(DIED);\n  } else if (bytes_read == 1) {\n    switch (flag) {\n      case kDeathTestReturned:\n        set_outcome(RETURNED);\n        break;\n      case kDeathTestThrew:\n        set_outcome(THREW);\n        break;\n      case kDeathTestLived:\n        set_outcome(LIVED);\n        break;\n      case kDeathTestInternalError:\n        FailFromInternalError(read_fd());  // Does not return.\n        break;\n      default:\n        GTEST_LOG_(FATAL) << \"Death test child process reported \"\n                          << \"unexpected status byte (\"\n                          << static_cast<unsigned int>(flag) << \")\";\n    }\n  } else {\n    GTEST_LOG_(FATAL) << \"Read from death test child process failed: \"\n                      << GetLastErrnoDescription();\n  }\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd()));\n  set_read_fd(-1);\n}\n\n// Signals that the death test code which should have exited, didn't.\n// Should be called only in a death test child process.\n// Writes a status byte to the child's status file descriptor, then\n// calls _exit(1).\nvoid DeathTestImpl::Abort(AbortReason reason) {\n  // The parent process considers the death test to be a failure if\n  // it finds any data in our pipe.  So, here we write a single flag byte\n  // to the pipe, then exit.\n  const char status_ch =\n      reason == TEST_DID_NOT_DIE ? kDeathTestLived :\n      reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned;\n\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1));\n  // We are leaking the descriptor here because on some platforms (i.e.,\n  // when built as Windows DLL), destructors of global objects will still\n  // run after calling _exit(). On such systems, write_fd_ will be\n  // indirectly closed from the destructor of UnitTestImpl, causing double\n  // close if it is also closed here. On debug configurations, double close\n  // may assert. As there are no in-process buffers to flush here, we are\n  // relying on the OS to close the descriptor after the process terminates\n  // when the destructors are not run.\n  _exit(1);  // Exits w/o any normal exit hooks (we were supposed to crash)\n}\n\n// Returns an indented copy of stderr output for a death test.\n// This makes distinguishing death test output lines from regular log lines\n// much easier.\nstatic ::std::string FormatDeathTestOutput(const ::std::string& output) {\n  ::std::string ret;\n  for (size_t at = 0; ; ) {\n    const size_t line_end = output.find('\\n', at);\n    ret += \"[  DEATH   ] \";\n    if (line_end == ::std::string::npos) {\n      ret += output.substr(at);\n      break;\n    }\n    ret += output.substr(at, line_end + 1 - at);\n    at = line_end + 1;\n  }\n  return ret;\n}\n\n// Assesses the success or failure of a death test, using both private\n// members which have previously been set, and one argument:\n//\n// Private data members:\n//   outcome:  An enumeration describing how the death test\n//             concluded: DIED, LIVED, THREW, or RETURNED.  The death test\n//             fails in the latter three cases.\n//   status:   The exit status of the child process. On *nix, it is in the\n//             in the format specified by wait(2). On Windows, this is the\n//             value supplied to the ExitProcess() API or a numeric code\n//             of the exception that terminated the program.\n//   regex:    A regular expression object to be applied to\n//             the test's captured standard error output; the death test\n//             fails if it does not match.\n//\n// Argument:\n//   status_ok: true if exit_status is acceptable in the context of\n//              this particular death test, which fails if it is false\n//\n// Returns true iff all of the above conditions are met.  Otherwise, the\n// first failing condition, in the order given above, is the one that is\n// reported. Also sets the last death test message string.\nbool DeathTestImpl::Passed(bool status_ok) {\n  if (!spawned())\n    return false;\n\n  const std::string error_message = GetCapturedStderr();\n\n  bool success = false;\n  Message buffer;\n\n  buffer << \"Death test: \" << statement() << \"\\n\";\n  switch (outcome()) {\n    case LIVED:\n      buffer << \"    Result: failed to die.\\n\"\n             << \" Error msg:\\n\" << FormatDeathTestOutput(error_message);\n      break;\n    case THREW:\n      buffer << \"    Result: threw an exception.\\n\"\n             << \" Error msg:\\n\" << FormatDeathTestOutput(error_message);\n      break;\n    case RETURNED:\n      buffer << \"    Result: illegal return in test statement.\\n\"\n             << \" Error msg:\\n\" << FormatDeathTestOutput(error_message);\n      break;\n    case DIED:\n      if (status_ok) {\n        const bool matched = RE::PartialMatch(error_message.c_str(), *regex());\n        if (matched) {\n          success = true;\n        } else {\n          buffer << \"    Result: died but not with expected error.\\n\"\n                 << \"  Expected: \" << regex()->pattern() << \"\\n\"\n                 << \"Actual msg:\\n\" << FormatDeathTestOutput(error_message);\n        }\n      } else {\n        buffer << \"    Result: died but not with expected exit code:\\n\"\n               << \"            \" << ExitSummary(status()) << \"\\n\"\n               << \"Actual msg:\\n\" << FormatDeathTestOutput(error_message);\n      }\n      break;\n    case IN_PROGRESS:\n    default:\n      GTEST_LOG_(FATAL)\n          << \"DeathTest::Passed somehow called before conclusion of test\";\n  }\n\n  DeathTest::set_last_death_test_message(buffer.GetString());\n  return success;\n}\n\n# if GTEST_OS_WINDOWS\n// WindowsDeathTest implements death tests on Windows. Due to the\n// specifics of starting new processes on Windows, death tests there are\n// always threadsafe, and Google Test considers the\n// --gtest_death_test_style=fast setting to be equivalent to\n// --gtest_death_test_style=threadsafe there.\n//\n// A few implementation notes:  Like the Linux version, the Windows\n// implementation uses pipes for child-to-parent communication. But due to\n// the specifics of pipes on Windows, some extra steps are required:\n//\n// 1. The parent creates a communication pipe and stores handles to both\n//    ends of it.\n// 2. The parent starts the child and provides it with the information\n//    necessary to acquire the handle to the write end of the pipe.\n// 3. The child acquires the write end of the pipe and signals the parent\n//    using a Windows event.\n// 4. Now the parent can release the write end of the pipe on its side. If\n//    this is done before step 3, the object's reference count goes down to\n//    0 and it is destroyed, preventing the child from acquiring it. The\n//    parent now has to release it, or read operations on the read end of\n//    the pipe will not return when the child terminates.\n// 5. The parent reads child's output through the pipe (outcome code and\n//    any possible error messages) from the pipe, and its stderr and then\n//    determines whether to fail the test.\n//\n// Note: to distinguish Win32 API calls from the local method and function\n// calls, the former are explicitly resolved in the global namespace.\n//\nclass WindowsDeathTest : public DeathTestImpl {\n public:\n  WindowsDeathTest(const char* a_statement,\n                   const RE* a_regex,\n                   const char* file,\n                   int line)\n      : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {}\n\n  // All of these virtual functions are inherited from DeathTest.\n  virtual int Wait();\n  virtual TestRole AssumeRole();\n\n private:\n  // The name of the file in which the death test is located.\n  const char* const file_;\n  // The line number on which the death test is located.\n  const int line_;\n  // Handle to the write end of the pipe to the child process.\n  AutoHandle write_handle_;\n  // Child process handle.\n  AutoHandle child_handle_;\n  // Event the child process uses to signal the parent that it has\n  // acquired the handle to the write end of the pipe. After seeing this\n  // event the parent can release its own handles to make sure its\n  // ReadFile() calls return when the child terminates.\n  AutoHandle event_handle_;\n};\n\n// Waits for the child in a death test to exit, returning its exit\n// status, or 0 if no child process exists.  As a side effect, sets the\n// outcome data member.\nint WindowsDeathTest::Wait() {\n  if (!spawned())\n    return 0;\n\n  // Wait until the child either signals that it has acquired the write end\n  // of the pipe or it dies.\n  const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() };\n  switch (::WaitForMultipleObjects(2,\n                                   wait_handles,\n                                   FALSE,  // Waits for any of the handles.\n                                   INFINITE)) {\n    case WAIT_OBJECT_0:\n    case WAIT_OBJECT_0 + 1:\n      break;\n    default:\n      GTEST_DEATH_TEST_CHECK_(false);  // Should not get here.\n  }\n\n  // The child has acquired the write end of the pipe or exited.\n  // We release the handle on our side and continue.\n  write_handle_.Reset();\n  event_handle_.Reset();\n\n  ReadAndInterpretStatusByte();\n\n  // Waits for the child process to exit if it haven't already. This\n  // returns immediately if the child has already exited, regardless of\n  // whether previous calls to WaitForMultipleObjects synchronized on this\n  // handle or not.\n  GTEST_DEATH_TEST_CHECK_(\n      WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(),\n                                             INFINITE));\n  DWORD status_code;\n  GTEST_DEATH_TEST_CHECK_(\n      ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE);\n  child_handle_.Reset();\n  set_status(static_cast<int>(status_code));\n  return status();\n}\n\n// The AssumeRole process for a Windows death test.  It creates a child\n// process with the same executable as the current process to run the\n// death test.  The child process is given the --gtest_filter and\n// --gtest_internal_run_death_test flags such that it knows to run the\n// current death test only.\nDeathTest::TestRole WindowsDeathTest::AssumeRole() {\n  const UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const TestInfo* const info = impl->current_test_info();\n  const int death_test_index = info->result()->death_test_count();\n\n  if (flag != NULL) {\n    // ParseInternalRunDeathTestFlag() has performed all the necessary\n    // processing.\n    set_write_fd(flag->write_fd());\n    return EXECUTE_TEST;\n  }\n\n  // WindowsDeathTest uses an anonymous pipe to communicate results of\n  // a death test.\n  SECURITY_ATTRIBUTES handles_are_inheritable = {\n    sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };\n  HANDLE read_handle, write_handle;\n  GTEST_DEATH_TEST_CHECK_(\n      ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable,\n                   0)  // Default buffer size.\n      != FALSE);\n  set_read_fd(::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle),\n                                O_RDONLY));\n  write_handle_.Reset(write_handle);\n  event_handle_.Reset(::CreateEvent(\n      &handles_are_inheritable,\n      TRUE,    // The event will automatically reset to non-signaled state.\n      FALSE,   // The initial state is non-signalled.\n      NULL));  // The even is unnamed.\n  GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL);\n  const std::string filter_flag =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ + kFilterFlag + \"=\" +\n      info->test_case_name() + \".\" + info->name();\n  const std::string internal_flag =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag +\n      \"=\" + file_ + \"|\" + StreamableToString(line_) + \"|\" +\n      StreamableToString(death_test_index) + \"|\" +\n      StreamableToString(static_cast<unsigned int>(::GetCurrentProcessId())) +\n      // size_t has the same width as pointers on both 32-bit and 64-bit\n      // Windows platforms.\n      // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx.\n      \"|\" + StreamableToString(reinterpret_cast<size_t>(write_handle)) +\n      \"|\" + StreamableToString(reinterpret_cast<size_t>(event_handle_.Get()));\n\n  char executable_path[_MAX_PATH + 1];  // NOLINT\n  GTEST_DEATH_TEST_CHECK_(\n      _MAX_PATH + 1 != ::GetModuleFileNameA(NULL,\n                                            executable_path,\n                                            _MAX_PATH));\n\n  std::string command_line =\n      std::string(::GetCommandLineA()) + \" \" + filter_flag + \" \\\"\" +\n      internal_flag + \"\\\"\";\n\n  DeathTest::set_last_death_test_message(\"\");\n\n  CaptureStderr();\n  // Flush the log buffers since the log streams are shared with the child.\n  FlushInfoLog();\n\n  // The child process will share the standard handles with the parent.\n  STARTUPINFOA startup_info;\n  memset(&startup_info, 0, sizeof(STARTUPINFO));\n  startup_info.dwFlags = STARTF_USESTDHANDLES;\n  startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE);\n  startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE);\n  startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE);\n\n  PROCESS_INFORMATION process_info;\n  GTEST_DEATH_TEST_CHECK_(::CreateProcessA(\n      executable_path,\n      const_cast<char*>(command_line.c_str()),\n      NULL,   // Retuned process handle is not inheritable.\n      NULL,   // Retuned thread handle is not inheritable.\n      TRUE,   // Child inherits all inheritable handles (for write_handle_).\n      0x0,    // Default creation flags.\n      NULL,   // Inherit the parent's environment.\n      UnitTest::GetInstance()->original_working_dir(),\n      &startup_info,\n      &process_info) != FALSE);\n  child_handle_.Reset(process_info.hProcess);\n  ::CloseHandle(process_info.hThread);\n  set_spawned(true);\n  return OVERSEE_TEST;\n}\n# else  // We are not on Windows.\n\n// ForkingDeathTest provides implementations for most of the abstract\n// methods of the DeathTest interface.  Only the AssumeRole method is\n// left undefined.\nclass ForkingDeathTest : public DeathTestImpl {\n public:\n  ForkingDeathTest(const char* statement, const RE* regex);\n\n  // All of these virtual functions are inherited from DeathTest.\n  virtual int Wait();\n\n protected:\n  void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; }\n\n private:\n  // PID of child process during death test; 0 in the child process itself.\n  pid_t child_pid_;\n};\n\n// Constructs a ForkingDeathTest.\nForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex)\n    : DeathTestImpl(a_statement, a_regex),\n      child_pid_(-1) {}\n\n// Waits for the child in a death test to exit, returning its exit\n// status, or 0 if no child process exists.  As a side effect, sets the\n// outcome data member.\nint ForkingDeathTest::Wait() {\n  if (!spawned())\n    return 0;\n\n  ReadAndInterpretStatusByte();\n\n  int status_value;\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0));\n  set_status(status_value);\n  return status_value;\n}\n\n// A concrete death test class that forks, then immediately runs the test\n// in the child process.\nclass NoExecDeathTest : public ForkingDeathTest {\n public:\n  NoExecDeathTest(const char* a_statement, const RE* a_regex) :\n      ForkingDeathTest(a_statement, a_regex) { }\n  virtual TestRole AssumeRole();\n};\n\n// The AssumeRole process for a fork-and-run death test.  It implements a\n// straightforward fork, with a simple pipe to transmit the status byte.\nDeathTest::TestRole NoExecDeathTest::AssumeRole() {\n  const size_t thread_count = GetThreadCount();\n  if (thread_count != 1) {\n    GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count);\n  }\n\n  int pipe_fd[2];\n  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);\n\n  DeathTest::set_last_death_test_message(\"\");\n  CaptureStderr();\n  // When we fork the process below, the log file buffers are copied, but the\n  // file descriptors are shared.  We flush all log files here so that closing\n  // the file descriptors in the child process doesn't throw off the\n  // synchronization between descriptors and buffers in the parent process.\n  // This is as close to the fork as possible to avoid a race condition in case\n  // there are multiple threads running before the death test, and another\n  // thread writes to the log file.\n  FlushInfoLog();\n\n  const pid_t child_pid = fork();\n  GTEST_DEATH_TEST_CHECK_(child_pid != -1);\n  set_child_pid(child_pid);\n  if (child_pid == 0) {\n    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0]));\n    set_write_fd(pipe_fd[1]);\n    // Redirects all logging to stderr in the child process to prevent\n    // concurrent writes to the log files.  We capture stderr in the parent\n    // process and append the child process' output to a log.\n    LogToStderr();\n    // Event forwarding to the listeners of event listener API mush be shut\n    // down in death test subprocesses.\n    GetUnitTestImpl()->listeners()->SuppressEventForwarding();\n    g_in_fast_death_test_child = true;\n    return EXECUTE_TEST;\n  } else {\n    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));\n    set_read_fd(pipe_fd[0]);\n    set_spawned(true);\n    return OVERSEE_TEST;\n  }\n}\n\n// A concrete death test class that forks and re-executes the main\n// program from the beginning, with command-line flags set that cause\n// only this specific death test to be run.\nclass ExecDeathTest : public ForkingDeathTest {\n public:\n  ExecDeathTest(const char* a_statement, const RE* a_regex,\n                const char* file, int line) :\n      ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { }\n  virtual TestRole AssumeRole();\n private:\n  static ::std::vector<testing::internal::string>\n  GetArgvsForDeathTestChildProcess() {\n    ::std::vector<testing::internal::string> args = GetInjectableArgvs();\n    return args;\n  }\n  // The name of the file in which the death test is located.\n  const char* const file_;\n  // The line number on which the death test is located.\n  const int line_;\n};\n\n// Utility class for accumulating command-line arguments.\nclass Arguments {\n public:\n  Arguments() {\n    args_.push_back(NULL);\n  }\n\n  ~Arguments() {\n    for (std::vector<char*>::iterator i = args_.begin(); i != args_.end();\n         ++i) {\n      free(*i);\n    }\n  }\n  void AddArgument(const char* argument) {\n    args_.insert(args_.end() - 1, posix::StrDup(argument));\n  }\n\n  template <typename Str>\n  void AddArguments(const ::std::vector<Str>& arguments) {\n    for (typename ::std::vector<Str>::const_iterator i = arguments.begin();\n         i != arguments.end();\n         ++i) {\n      args_.insert(args_.end() - 1, posix::StrDup(i->c_str()));\n    }\n  }\n  char* const* Argv() {\n    return &args_[0];\n  }\n\n private:\n  std::vector<char*> args_;\n};\n\n// A struct that encompasses the arguments to the child process of a\n// threadsafe-style death test process.\nstruct ExecDeathTestArgs {\n  char* const* argv;  // Command-line arguments for the child's call to exec\n  int close_fd;       // File descriptor to close; the read end of a pipe\n};\n\n#  if GTEST_OS_MAC\ninline char** GetEnviron() {\n  // When Google Test is built as a framework on MacOS X, the environ variable\n  // is unavailable. Apple's documentation (man environ) recommends using\n  // _NSGetEnviron() instead.\n  return *_NSGetEnviron();\n}\n#  else\n// Some POSIX platforms expect you to declare environ. extern \"C\" makes\n// it reside in the global namespace.\nextern \"C\" char** environ;\ninline char** GetEnviron() { return environ; }\n#  endif  // GTEST_OS_MAC\n\n#  if !GTEST_OS_QNX\n// The main function for a threadsafe-style death test child process.\n// This function is called in a clone()-ed process and thus must avoid\n// any potentially unsafe operations like malloc or libc functions.\nstatic int ExecDeathTestChildMain(void* child_arg) {\n  ExecDeathTestArgs* const args = static_cast<ExecDeathTestArgs*>(child_arg);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd));\n\n  // We need to execute the test program in the same environment where\n  // it was originally invoked.  Therefore we change to the original\n  // working directory first.\n  const char* const original_dir =\n      UnitTest::GetInstance()->original_working_dir();\n  // We can safely call chdir() as it's a direct system call.\n  if (chdir(original_dir) != 0) {\n    DeathTestAbort(std::string(\"chdir(\\\"\") + original_dir + \"\\\") failed: \" +\n                   GetLastErrnoDescription());\n    return EXIT_FAILURE;\n  }\n\n  // We can safely call execve() as it's a direct system call.  We\n  // cannot use execvp() as it's a libc function and thus potentially\n  // unsafe.  Since execve() doesn't search the PATH, the user must\n  // invoke the test program via a valid path that contains at least\n  // one path separator.\n  execve(args->argv[0], args->argv, GetEnviron());\n  DeathTestAbort(std::string(\"execve(\") + args->argv[0] + \", ...) in \" +\n                 original_dir + \" failed: \" +\n                 GetLastErrnoDescription());\n  return EXIT_FAILURE;\n}\n#  endif  // !GTEST_OS_QNX\n\n// Two utility routines that together determine the direction the stack\n// grows.\n// This could be accomplished more elegantly by a single recursive\n// function, but we want to guard against the unlikely possibility of\n// a smart compiler optimizing the recursion away.\n//\n// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining\n// StackLowerThanAddress into StackGrowsDown, which then doesn't give\n// correct answer.\nvoid StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_;\nvoid StackLowerThanAddress(const void* ptr, bool* result) {\n  int dummy;\n  *result = (&dummy < ptr);\n}\n\nbool StackGrowsDown() {\n  int dummy;\n  bool result;\n  StackLowerThanAddress(&dummy, &result);\n  return result;\n}\n\n// Spawns a child process with the same executable as the current process in\n// a thread-safe manner and instructs it to run the death test.  The\n// implementation uses fork(2) + exec.  On systems where clone(2) is\n// available, it is used instead, being slightly more thread-safe.  On QNX,\n// fork supports only single-threaded environments, so this function uses\n// spawn(2) there instead.  The function dies with an error message if\n// anything goes wrong.\nstatic pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) {\n  ExecDeathTestArgs args = { argv, close_fd };\n  pid_t child_pid = -1;\n\n#  if GTEST_OS_QNX\n  // Obtains the current directory and sets it to be closed in the child\n  // process.\n  const int cwd_fd = open(\".\", O_RDONLY);\n  GTEST_DEATH_TEST_CHECK_(cwd_fd != -1);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC));\n  // We need to execute the test program in the same environment where\n  // it was originally invoked.  Therefore we change to the original\n  // working directory first.\n  const char* const original_dir =\n      UnitTest::GetInstance()->original_working_dir();\n  // We can safely call chdir() as it's a direct system call.\n  if (chdir(original_dir) != 0) {\n    DeathTestAbort(std::string(\"chdir(\\\"\") + original_dir + \"\\\") failed: \" +\n                   GetLastErrnoDescription());\n    return EXIT_FAILURE;\n  }\n\n  int fd_flags;\n  // Set close_fd to be closed after spawn.\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD));\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD,\n                                        fd_flags | FD_CLOEXEC));\n  struct inheritance inherit = {0};\n  // spawn is a system call.\n  child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron());\n  // Restores the current working directory.\n  GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd));\n\n#  else   // GTEST_OS_QNX\n#   if GTEST_OS_LINUX\n  // When a SIGPROF signal is received while fork() or clone() are executing,\n  // the process may hang. To avoid this, we ignore SIGPROF here and re-enable\n  // it after the call to fork()/clone() is complete.\n  struct sigaction saved_sigprof_action;\n  struct sigaction ignore_sigprof_action;\n  memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action));\n  sigemptyset(&ignore_sigprof_action.sa_mask);\n  ignore_sigprof_action.sa_handler = SIG_IGN;\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction(\n      SIGPROF, &ignore_sigprof_action, &saved_sigprof_action));\n#   endif  // GTEST_OS_LINUX\n\n#   if GTEST_HAS_CLONE\n  const bool use_fork = GTEST_FLAG(death_test_use_fork);\n\n  if (!use_fork) {\n    static const bool stack_grows_down = StackGrowsDown();\n    const size_t stack_size = getpagesize();\n    // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.\n    void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE,\n                             MAP_ANON | MAP_PRIVATE, -1, 0);\n    GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED);\n\n    // Maximum stack alignment in bytes:  For a downward-growing stack, this\n    // amount is subtracted from size of the stack space to get an address\n    // that is within the stack space and is aligned on all systems we care\n    // about.  As far as I know there is no ABI with stack alignment greater\n    // than 64.  We assume stack and stack_size already have alignment of\n    // kMaxStackAlignment.\n    const size_t kMaxStackAlignment = 64;\n    void* const stack_top =\n        static_cast<char*>(stack) +\n            (stack_grows_down ? stack_size - kMaxStackAlignment : 0);\n    GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment &&\n        reinterpret_cast<intptr_t>(stack_top) % kMaxStackAlignment == 0);\n\n    child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args);\n\n    GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1);\n  }\n#   else\n  const bool use_fork = true;\n#   endif  // GTEST_HAS_CLONE\n\n  if (use_fork && (child_pid = fork()) == 0) {\n      ExecDeathTestChildMain(&args);\n      _exit(0);\n  }\n#  endif  // GTEST_OS_QNX\n#  if GTEST_OS_LINUX\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(\n      sigaction(SIGPROF, &saved_sigprof_action, NULL));\n#  endif  // GTEST_OS_LINUX\n\n  GTEST_DEATH_TEST_CHECK_(child_pid != -1);\n  return child_pid;\n}\n\n// The AssumeRole process for a fork-and-exec death test.  It re-executes the\n// main program from the beginning, setting the --gtest_filter\n// and --gtest_internal_run_death_test flags to cause only the current\n// death test to be re-run.\nDeathTest::TestRole ExecDeathTest::AssumeRole() {\n  const UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const TestInfo* const info = impl->current_test_info();\n  const int death_test_index = info->result()->death_test_count();\n\n  if (flag != NULL) {\n    set_write_fd(flag->write_fd());\n    return EXECUTE_TEST;\n  }\n\n  int pipe_fd[2];\n  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);\n  // Clear the close-on-exec flag on the write end of the pipe, lest\n  // it be closed when the child process does an exec:\n  GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1);\n\n  const std::string filter_flag =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ + kFilterFlag + \"=\"\n      + info->test_case_name() + \".\" + info->name();\n  const std::string internal_flag =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + \"=\"\n      + file_ + \"|\" + StreamableToString(line_) + \"|\"\n      + StreamableToString(death_test_index) + \"|\"\n      + StreamableToString(pipe_fd[1]);\n  Arguments args;\n  args.AddArguments(GetArgvsForDeathTestChildProcess());\n  args.AddArgument(filter_flag.c_str());\n  args.AddArgument(internal_flag.c_str());\n\n  DeathTest::set_last_death_test_message(\"\");\n\n  CaptureStderr();\n  // See the comment in NoExecDeathTest::AssumeRole for why the next line\n  // is necessary.\n  FlushInfoLog();\n\n  const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));\n  set_child_pid(child_pid);\n  set_read_fd(pipe_fd[0]);\n  set_spawned(true);\n  return OVERSEE_TEST;\n}\n\n# endif  // !GTEST_OS_WINDOWS\n\n// Creates a concrete DeathTest-derived class that depends on the\n// --gtest_death_test_style flag, and sets the pointer pointed to\n// by the \"test\" argument to its address.  If the test should be\n// skipped, sets that pointer to NULL.  Returns true, unless the\n// flag is set to an invalid value.\nbool DefaultDeathTestFactory::Create(const char* statement, const RE* regex,\n                                     const char* file, int line,\n                                     DeathTest** test) {\n  UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const int death_test_index = impl->current_test_info()\n      ->increment_death_test_count();\n\n  if (flag != NULL) {\n    if (death_test_index > flag->index()) {\n      DeathTest::set_last_death_test_message(\n          \"Death test count (\" + StreamableToString(death_test_index)\n          + \") somehow exceeded expected maximum (\"\n          + StreamableToString(flag->index()) + \")\");\n      return false;\n    }\n\n    if (!(flag->file() == file && flag->line() == line &&\n          flag->index() == death_test_index)) {\n      *test = NULL;\n      return true;\n    }\n  }\n\n# if GTEST_OS_WINDOWS\n\n  if (GTEST_FLAG(death_test_style) == \"threadsafe\" ||\n      GTEST_FLAG(death_test_style) == \"fast\") {\n    *test = new WindowsDeathTest(statement, regex, file, line);\n  }\n\n# else\n\n  if (GTEST_FLAG(death_test_style) == \"threadsafe\") {\n    *test = new ExecDeathTest(statement, regex, file, line);\n  } else if (GTEST_FLAG(death_test_style) == \"fast\") {\n    *test = new NoExecDeathTest(statement, regex);\n  }\n\n# endif  // GTEST_OS_WINDOWS\n\n  else {  // NOLINT - this is more readable than unbalanced brackets inside #if.\n    DeathTest::set_last_death_test_message(\n        \"Unknown death test style \\\"\" + GTEST_FLAG(death_test_style)\n        + \"\\\" encountered\");\n    return false;\n  }\n\n  return true;\n}\n\n// Splits a given string on a given delimiter, populating a given\n// vector with the fields.  GTEST_HAS_DEATH_TEST implies that we have\n// ::std::string, so we can use it here.\nstatic void SplitString(const ::std::string& str, char delimiter,\n                        ::std::vector< ::std::string>* dest) {\n  ::std::vector< ::std::string> parsed;\n  ::std::string::size_type pos = 0;\n  while (::testing::internal::AlwaysTrue()) {\n    const ::std::string::size_type colon = str.find(delimiter, pos);\n    if (colon == ::std::string::npos) {\n      parsed.push_back(str.substr(pos));\n      break;\n    } else {\n      parsed.push_back(str.substr(pos, colon - pos));\n      pos = colon + 1;\n    }\n  }\n  dest->swap(parsed);\n}\n\n# if GTEST_OS_WINDOWS\n// Recreates the pipe and event handles from the provided parameters,\n// signals the event, and returns a file descriptor wrapped around the pipe\n// handle. This function is called in the child process only.\nint GetStatusFileDescriptor(unsigned int parent_process_id,\n                            size_t write_handle_as_size_t,\n                            size_t event_handle_as_size_t) {\n  AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE,\n                                                   FALSE,  // Non-inheritable.\n                                                   parent_process_id));\n  if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) {\n    DeathTestAbort(\"Unable to open parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  // TODO(vladl@google.com): Replace the following check with a\n  // compile-time assertion when available.\n  GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t));\n\n  const HANDLE write_handle =\n      reinterpret_cast<HANDLE>(write_handle_as_size_t);\n  HANDLE dup_write_handle;\n\n  // The newly initialized handle is accessible only in in the parent\n  // process. To obtain one accessible within the child, we need to use\n  // DuplicateHandle.\n  if (!::DuplicateHandle(parent_process_handle.Get(), write_handle,\n                         ::GetCurrentProcess(), &dup_write_handle,\n                         0x0,    // Requested privileges ignored since\n                                 // DUPLICATE_SAME_ACCESS is used.\n                         FALSE,  // Request non-inheritable handler.\n                         DUPLICATE_SAME_ACCESS)) {\n    DeathTestAbort(\"Unable to duplicate the pipe handle \" +\n                   StreamableToString(write_handle_as_size_t) +\n                   \" from the parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  const HANDLE event_handle = reinterpret_cast<HANDLE>(event_handle_as_size_t);\n  HANDLE dup_event_handle;\n\n  if (!::DuplicateHandle(parent_process_handle.Get(), event_handle,\n                         ::GetCurrentProcess(), &dup_event_handle,\n                         0x0,\n                         FALSE,\n                         DUPLICATE_SAME_ACCESS)) {\n    DeathTestAbort(\"Unable to duplicate the event handle \" +\n                   StreamableToString(event_handle_as_size_t) +\n                   \" from the parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  const int write_fd =\n      ::_open_osfhandle(reinterpret_cast<intptr_t>(dup_write_handle), O_APPEND);\n  if (write_fd == -1) {\n    DeathTestAbort(\"Unable to convert pipe handle \" +\n                   StreamableToString(write_handle_as_size_t) +\n                   \" to a file descriptor\");\n  }\n\n  // Signals the parent that the write end of the pipe has been acquired\n  // so the parent can release its own write end.\n  ::SetEvent(dup_event_handle);\n\n  return write_fd;\n}\n# endif  // GTEST_OS_WINDOWS\n\n// Returns a newly created InternalRunDeathTestFlag object with fields\n// initialized from the GTEST_FLAG(internal_run_death_test) flag if\n// the flag is specified; otherwise returns NULL.\nInternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() {\n  if (GTEST_FLAG(internal_run_death_test) == \"\") return NULL;\n\n  // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we\n  // can use it here.\n  int line = -1;\n  int index = -1;\n  ::std::vector< ::std::string> fields;\n  SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields);\n  int write_fd = -1;\n\n# if GTEST_OS_WINDOWS\n\n  unsigned int parent_process_id = 0;\n  size_t write_handle_as_size_t = 0;\n  size_t event_handle_as_size_t = 0;\n\n  if (fields.size() != 6\n      || !ParseNaturalNumber(fields[1], &line)\n      || !ParseNaturalNumber(fields[2], &index)\n      || !ParseNaturalNumber(fields[3], &parent_process_id)\n      || !ParseNaturalNumber(fields[4], &write_handle_as_size_t)\n      || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) {\n    DeathTestAbort(\"Bad --gtest_internal_run_death_test flag: \" +\n                   GTEST_FLAG(internal_run_death_test));\n  }\n  write_fd = GetStatusFileDescriptor(parent_process_id,\n                                     write_handle_as_size_t,\n                                     event_handle_as_size_t);\n# else\n\n  if (fields.size() != 4\n      || !ParseNaturalNumber(fields[1], &line)\n      || !ParseNaturalNumber(fields[2], &index)\n      || !ParseNaturalNumber(fields[3], &write_fd)) {\n    DeathTestAbort(\"Bad --gtest_internal_run_death_test flag: \"\n        + GTEST_FLAG(internal_run_death_test));\n  }\n\n# endif  // GTEST_OS_WINDOWS\n\n  return new InternalRunDeathTestFlag(fields[0], line, index, write_fd);\n}\n\n}  // namespace internal\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-filepath.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: keith.ray@gmail.com (Keith Ray)\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-filepath.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#include <stdlib.h>\n\n#if GTEST_OS_WINDOWS_MOBILE\n# include <windows.h>\n#elif GTEST_OS_WINDOWS\n# include <direct.h>\n# include <io.h>\n#elif GTEST_OS_SYMBIAN\n// Symbian OpenC has PATH_MAX in sys/syslimits.h\n# include <sys/syslimits.h>\n#else\n# include <limits.h>\n# include <climits>  // Some Linux distributions define PATH_MAX here.\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n#if GTEST_OS_WINDOWS\n# define GTEST_PATH_MAX_ _MAX_PATH\n#elif defined(PATH_MAX)\n# define GTEST_PATH_MAX_ PATH_MAX\n#elif defined(_XOPEN_PATH_MAX)\n# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX\n#else\n# define GTEST_PATH_MAX_ _POSIX_PATH_MAX\n#endif  // GTEST_OS_WINDOWS\n\n#include \"gtest/internal/gtest-string.h\"\n\nnamespace testing {\nnamespace internal {\n\n#if GTEST_OS_WINDOWS\n// On Windows, '\\\\' is the standard path separator, but many tools and the\n// Windows API also accept '/' as an alternate path separator. Unless otherwise\n// noted, a file path can contain either kind of path separators, or a mixture\n// of them.\nconst char kPathSeparator = '\\\\';\nconst char kAlternatePathSeparator = '/';\nconst char kPathSeparatorString[] = \"\\\\\";\nconst char kAlternatePathSeparatorString[] = \"/\";\n# if GTEST_OS_WINDOWS_MOBILE\n// Windows CE doesn't have a current directory. You should not use\n// the current directory in tests on Windows CE, but this at least\n// provides a reasonable fallback.\nconst char kCurrentDirectoryString[] = \"\\\\\";\n// Windows CE doesn't define INVALID_FILE_ATTRIBUTES\nconst DWORD kInvalidFileAttributes = 0xffffffff;\n# else\nconst char kCurrentDirectoryString[] = \".\\\\\";\n# endif  // GTEST_OS_WINDOWS_MOBILE\n#else\nconst char kPathSeparator = '/';\nconst char kPathSeparatorString[] = \"/\";\nconst char kCurrentDirectoryString[] = \"./\";\n#endif  // GTEST_OS_WINDOWS\n\n// Returns whether the given character is a valid path separator.\nstatic bool IsPathSeparator(char c) {\n#if GTEST_HAS_ALT_PATH_SEP_\n  return (c == kPathSeparator) || (c == kAlternatePathSeparator);\n#else\n  return c == kPathSeparator;\n#endif\n}\n\n// Returns the current working directory, or \"\" if unsuccessful.\nFilePath FilePath::GetCurrentDir() {\n#if GTEST_OS_WINDOWS_MOBILE\n  // Windows CE doesn't have a current directory, so we just return\n  // something reasonable.\n  return FilePath(kCurrentDirectoryString);\n#elif GTEST_OS_WINDOWS\n  char cwd[GTEST_PATH_MAX_ + 1] = { '\\0' };\n  return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? \"\" : cwd);\n#else\n  char cwd[GTEST_PATH_MAX_ + 1] = { '\\0' };\n  return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? \"\" : cwd);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n}\n\n// Returns a copy of the FilePath with the case-insensitive extension removed.\n// Example: FilePath(\"dir/file.exe\").RemoveExtension(\"EXE\") returns\n// FilePath(\"dir/file\"). If a case-insensitive extension is not\n// found, returns a copy of the original FilePath.\nFilePath FilePath::RemoveExtension(const char* extension) const {\n  const std::string dot_extension = std::string(\".\") + extension;\n  if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) {\n    return FilePath(pathname_.substr(\n        0, pathname_.length() - dot_extension.length()));\n  }\n  return *this;\n}\n\n// Returns a pointer to the last occurence of a valid path separator in\n// the FilePath. On Windows, for example, both '/' and '\\' are valid path\n// separators. Returns NULL if no path separator was found.\nconst char* FilePath::FindLastPathSeparator() const {\n  const char* const last_sep = strrchr(c_str(), kPathSeparator);\n#if GTEST_HAS_ALT_PATH_SEP_\n  const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator);\n  // Comparing two pointers of which only one is NULL is undefined.\n  if (last_alt_sep != NULL &&\n      (last_sep == NULL || last_alt_sep > last_sep)) {\n    return last_alt_sep;\n  }\n#endif\n  return last_sep;\n}\n\n// Returns a copy of the FilePath with the directory part removed.\n// Example: FilePath(\"path/to/file\").RemoveDirectoryName() returns\n// FilePath(\"file\"). If there is no directory part (\"just_a_file\"), it returns\n// the FilePath unmodified. If there is no file part (\"just_a_dir/\") it\n// returns an empty FilePath (\"\").\n// On Windows platform, '\\' is the path separator, otherwise it is '/'.\nFilePath FilePath::RemoveDirectoryName() const {\n  const char* const last_sep = FindLastPathSeparator();\n  return last_sep ? FilePath(last_sep + 1) : *this;\n}\n\n// RemoveFileName returns the directory path with the filename removed.\n// Example: FilePath(\"path/to/file\").RemoveFileName() returns \"path/to/\".\n// If the FilePath is \"a_file\" or \"/a_file\", RemoveFileName returns\n// FilePath(\"./\") or, on Windows, FilePath(\".\\\\\"). If the filepath does\n// not have a file, like \"just/a/dir/\", it returns the FilePath unmodified.\n// On Windows platform, '\\' is the path separator, otherwise it is '/'.\nFilePath FilePath::RemoveFileName() const {\n  const char* const last_sep = FindLastPathSeparator();\n  std::string dir;\n  if (last_sep) {\n    dir = std::string(c_str(), last_sep + 1 - c_str());\n  } else {\n    dir = kCurrentDirectoryString;\n  }\n  return FilePath(dir);\n}\n\n// Helper functions for naming files in a directory for xml output.\n\n// Given directory = \"dir\", base_name = \"test\", number = 0,\n// extension = \"xml\", returns \"dir/test.xml\". If number is greater\n// than zero (e.g., 12), returns \"dir/test_12.xml\".\n// On Windows platform, uses \\ as the separator rather than /.\nFilePath FilePath::MakeFileName(const FilePath& directory,\n                                const FilePath& base_name,\n                                int number,\n                                const char* extension) {\n  std::string file;\n  if (number == 0) {\n    file = base_name.string() + \".\" + extension;\n  } else {\n    file = base_name.string() + \"_\" + StreamableToString(number)\n        + \".\" + extension;\n  }\n  return ConcatPaths(directory, FilePath(file));\n}\n\n// Given directory = \"dir\", relative_path = \"test.xml\", returns \"dir/test.xml\".\n// On Windows, uses \\ as the separator rather than /.\nFilePath FilePath::ConcatPaths(const FilePath& directory,\n                               const FilePath& relative_path) {\n  if (directory.IsEmpty())\n    return relative_path;\n  const FilePath dir(directory.RemoveTrailingPathSeparator());\n  return FilePath(dir.string() + kPathSeparator + relative_path.string());\n}\n\n// Returns true if pathname describes something findable in the file-system,\n// either a file, directory, or whatever.\nbool FilePath::FileOrDirectoryExists() const {\n#if GTEST_OS_WINDOWS_MOBILE\n  LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str());\n  const DWORD attributes = GetFileAttributes(unicode);\n  delete [] unicode;\n  return attributes != kInvalidFileAttributes;\n#else\n  posix::StatStruct file_stat;\n  return posix::Stat(pathname_.c_str(), &file_stat) == 0;\n#endif  // GTEST_OS_WINDOWS_MOBILE\n}\n\n// Returns true if pathname describes a directory in the file-system\n// that exists.\nbool FilePath::DirectoryExists() const {\n  bool result = false;\n#if GTEST_OS_WINDOWS\n  // Don't strip off trailing separator if path is a root directory on\n  // Windows (like \"C:\\\\\").\n  const FilePath& path(IsRootDirectory() ? *this :\n                                           RemoveTrailingPathSeparator());\n#else\n  const FilePath& path(*this);\n#endif\n\n#if GTEST_OS_WINDOWS_MOBILE\n  LPCWSTR unicode = String::AnsiToUtf16(path.c_str());\n  const DWORD attributes = GetFileAttributes(unicode);\n  delete [] unicode;\n  if ((attributes != kInvalidFileAttributes) &&\n      (attributes & FILE_ATTRIBUTE_DIRECTORY)) {\n    result = true;\n  }\n#else\n  posix::StatStruct file_stat;\n  result = posix::Stat(path.c_str(), &file_stat) == 0 &&\n      posix::IsDir(file_stat);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n  return result;\n}\n\n// Returns true if pathname describes a root directory. (Windows has one\n// root directory per disk drive.)\nbool FilePath::IsRootDirectory() const {\n#if GTEST_OS_WINDOWS\n  // TODO(wan@google.com): on Windows a network share like\n  // \\\\server\\share can be a root directory, although it cannot be the\n  // current directory.  Handle this properly.\n  return pathname_.length() == 3 && IsAbsolutePath();\n#else\n  return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]);\n#endif\n}\n\n// Returns true if pathname describes an absolute path.\nbool FilePath::IsAbsolutePath() const {\n  const char* const name = pathname_.c_str();\n#if GTEST_OS_WINDOWS\n  return pathname_.length() >= 3 &&\n     ((name[0] >= 'a' && name[0] <= 'z') ||\n      (name[0] >= 'A' && name[0] <= 'Z')) &&\n     name[1] == ':' &&\n     IsPathSeparator(name[2]);\n#else\n  return IsPathSeparator(name[0]);\n#endif\n}\n\n// Returns a pathname for a file that does not currently exist. The pathname\n// will be directory/base_name.extension or\n// directory/base_name_<number>.extension if directory/base_name.extension\n// already exists. The number will be incremented until a pathname is found\n// that does not already exist.\n// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.\n// There could be a race condition if two or more processes are calling this\n// function at the same time -- they could both pick the same filename.\nFilePath FilePath::GenerateUniqueFileName(const FilePath& directory,\n                                          const FilePath& base_name,\n                                          const char* extension) {\n  FilePath full_pathname;\n  int number = 0;\n  do {\n    full_pathname.Set(MakeFileName(directory, base_name, number++, extension));\n  } while (full_pathname.FileOrDirectoryExists());\n  return full_pathname;\n}\n\n// Returns true if FilePath ends with a path separator, which indicates that\n// it is intended to represent a directory. Returns false otherwise.\n// This does NOT check that a directory (or file) actually exists.\nbool FilePath::IsDirectory() const {\n  return !pathname_.empty() &&\n         IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]);\n}\n\n// Create directories so that path exists. Returns true if successful or if\n// the directories already exist; returns false if unable to create directories\n// for any reason.\nbool FilePath::CreateDirectoriesRecursively() const {\n  if (!this->IsDirectory()) {\n    return false;\n  }\n\n  if (pathname_.length() == 0 || this->DirectoryExists()) {\n    return true;\n  }\n\n  const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName());\n  return parent.CreateDirectoriesRecursively() && this->CreateFolder();\n}\n\n// Create the directory so that path exists. Returns true if successful or\n// if the directory already exists; returns false if unable to create the\n// directory for any reason, including if the parent directory does not\n// exist. Not named \"CreateDirectory\" because that's a macro on Windows.\nbool FilePath::CreateFolder() const {\n#if GTEST_OS_WINDOWS_MOBILE\n  FilePath removed_sep(this->RemoveTrailingPathSeparator());\n  LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str());\n  int result = CreateDirectory(unicode, NULL) ? 0 : -1;\n  delete [] unicode;\n#elif GTEST_OS_WINDOWS\n  int result = _mkdir(pathname_.c_str());\n#else\n  int result = mkdir(pathname_.c_str(), 0777);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n  if (result == -1) {\n    return this->DirectoryExists();  // An error is OK if the directory exists.\n  }\n  return true;  // No error.\n}\n\n// If input name has a trailing separator character, remove it and return the\n// name, otherwise return the name string unmodified.\n// On Windows platform, uses \\ as the separator, other platforms use /.\nFilePath FilePath::RemoveTrailingPathSeparator() const {\n  return IsDirectory()\n      ? FilePath(pathname_.substr(0, pathname_.length() - 1))\n      : *this;\n}\n\n// Removes any redundant separators that might be in the pathname.\n// For example, \"bar///foo\" becomes \"bar/foo\". Does not eliminate other\n// redundancies that might be in a pathname involving \".\" or \"..\".\n// TODO(wan@google.com): handle Windows network shares (e.g. \\\\server\\share).\nvoid FilePath::Normalize() {\n  if (pathname_.c_str() == NULL) {\n    pathname_ = \"\";\n    return;\n  }\n  const char* src = pathname_.c_str();\n  char* const dest = new char[pathname_.length() + 1];\n  char* dest_ptr = dest;\n  memset(dest_ptr, 0, pathname_.length() + 1);\n\n  while (*src != '\\0') {\n    *dest_ptr = *src;\n    if (!IsPathSeparator(*src)) {\n      src++;\n    } else {\n#if GTEST_HAS_ALT_PATH_SEP_\n      if (*dest_ptr == kAlternatePathSeparator) {\n        *dest_ptr = kPathSeparator;\n      }\n#endif\n      while (IsPathSeparator(*src))\n        src++;\n    }\n    dest_ptr++;\n  }\n  *dest_ptr = '\\0';\n  pathname_ = dest;\n  delete[] dest;\n}\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-internal-inl.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Utility functions and classes used by the Google C++ testing framework.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// This file contains purely Google Test's internal implementation.  Please\n// DO NOT #INCLUDE IT IN A USER PROGRAM.\n\n#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_\n#define GTEST_SRC_GTEST_INTERNAL_INL_H_\n\n// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is\n// part of Google Test's implementation; otherwise it's undefined.\n#if !GTEST_IMPLEMENTATION_\n// A user is trying to include this from his code - just say no.\n# error \"gtest-internal-inl.h is part of Google Test's internal implementation.\"\n# error \"It must not be included except by Google Test itself.\"\n#endif  // GTEST_IMPLEMENTATION_\n\n#ifndef _WIN32_WCE\n# include <errno.h>\n#endif  // !_WIN32_WCE\n#include <stddef.h>\n#include <stdlib.h>  // For strtoll/_strtoul64/malloc/free.\n#include <string.h>  // For memmove.\n\n#include <algorithm>\n#include <string>\n#include <vector>\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_CAN_STREAM_RESULTS_\n# include <arpa/inet.h>  // NOLINT\n# include <netdb.h>  // NOLINT\n#endif\n\n#if GTEST_OS_WINDOWS\n# include <windows.h>  // NOLINT\n#endif  // GTEST_OS_WINDOWS\n\n#include \"gtest/gtest.h\"  // NOLINT\n#include \"gtest/gtest-spi.h\"\n\nnamespace testing {\n\n// Declares the flags.\n//\n// We don't want the users to modify this flag in the code, but want\n// Google Test's own unit tests to be able to access it. Therefore we\n// declare it here as opposed to in gtest.h.\nGTEST_DECLARE_bool_(death_test_use_fork);\n\nnamespace internal {\n\n// The value of GetTestTypeId() as seen from within the Google Test\n// library.  This is solely for testing GetTestTypeId().\nGTEST_API_ extern const TypeId kTestTypeIdInGoogleTest;\n\n// Names of the flags (needed for parsing Google Test flags).\nconst char kAlsoRunDisabledTestsFlag[] = \"also_run_disabled_tests\";\nconst char kBreakOnFailureFlag[] = \"break_on_failure\";\nconst char kCatchExceptionsFlag[] = \"catch_exceptions\";\nconst char kColorFlag[] = \"color\";\nconst char kFilterFlag[] = \"filter\";\nconst char kListTestsFlag[] = \"list_tests\";\nconst char kOutputFlag[] = \"output\";\nconst char kPrintTimeFlag[] = \"print_time\";\nconst char kRandomSeedFlag[] = \"random_seed\";\nconst char kRepeatFlag[] = \"repeat\";\nconst char kShuffleFlag[] = \"shuffle\";\nconst char kStackTraceDepthFlag[] = \"stack_trace_depth\";\nconst char kStreamResultToFlag[] = \"stream_result_to\";\nconst char kThrowOnFailureFlag[] = \"throw_on_failure\";\n\n// A valid random seed must be in [1, kMaxRandomSeed].\nconst int kMaxRandomSeed = 99999;\n\n// g_help_flag is true iff the --help flag or an equivalent form is\n// specified on the command line.\nGTEST_API_ extern bool g_help_flag;\n\n// Returns the current time in milliseconds.\nGTEST_API_ TimeInMillis GetTimeInMillis();\n\n// Returns true iff Google Test should use colors in the output.\nGTEST_API_ bool ShouldUseColor(bool stdout_is_tty);\n\n// Formats the given time in milliseconds as seconds.\nGTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms);\n\n// Converts the given time in milliseconds to a date string in the ISO 8601\n// format, without the timezone information.  N.B.: due to the use the\n// non-reentrant localtime() function, this function is not thread safe.  Do\n// not use it in any code that can be called from multiple threads.\nGTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms);\n\n// Parses a string for an Int32 flag, in the form of \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nGTEST_API_ bool ParseInt32Flag(\n    const char* str, const char* flag, Int32* value);\n\n// Returns a random seed in range [1, kMaxRandomSeed] based on the\n// given --gtest_random_seed flag value.\ninline int GetRandomSeedFromFlag(Int32 random_seed_flag) {\n  const unsigned int raw_seed = (random_seed_flag == 0) ?\n      static_cast<unsigned int>(GetTimeInMillis()) :\n      static_cast<unsigned int>(random_seed_flag);\n\n  // Normalizes the actual seed to range [1, kMaxRandomSeed] such that\n  // it's easy to type.\n  const int normalized_seed =\n      static_cast<int>((raw_seed - 1U) %\n                       static_cast<unsigned int>(kMaxRandomSeed)) + 1;\n  return normalized_seed;\n}\n\n// Returns the first valid random seed after 'seed'.  The behavior is\n// undefined if 'seed' is invalid.  The seed after kMaxRandomSeed is\n// considered to be 1.\ninline int GetNextRandomSeed(int seed) {\n  GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed)\n      << \"Invalid random seed \" << seed << \" - must be in [1, \"\n      << kMaxRandomSeed << \"].\";\n  const int next_seed = seed + 1;\n  return (next_seed > kMaxRandomSeed) ? 1 : next_seed;\n}\n\n// This class saves the values of all Google Test flags in its c'tor, and\n// restores them in its d'tor.\nclass GTestFlagSaver {\n public:\n  // The c'tor.\n  GTestFlagSaver() {\n    also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests);\n    break_on_failure_ = GTEST_FLAG(break_on_failure);\n    catch_exceptions_ = GTEST_FLAG(catch_exceptions);\n    color_ = GTEST_FLAG(color);\n    death_test_style_ = GTEST_FLAG(death_test_style);\n    death_test_use_fork_ = GTEST_FLAG(death_test_use_fork);\n    filter_ = GTEST_FLAG(filter);\n    internal_run_death_test_ = GTEST_FLAG(internal_run_death_test);\n    list_tests_ = GTEST_FLAG(list_tests);\n    output_ = GTEST_FLAG(output);\n    print_time_ = GTEST_FLAG(print_time);\n    random_seed_ = GTEST_FLAG(random_seed);\n    repeat_ = GTEST_FLAG(repeat);\n    shuffle_ = GTEST_FLAG(shuffle);\n    stack_trace_depth_ = GTEST_FLAG(stack_trace_depth);\n    stream_result_to_ = GTEST_FLAG(stream_result_to);\n    throw_on_failure_ = GTEST_FLAG(throw_on_failure);\n  }\n\n  // The d'tor is not virtual.  DO NOT INHERIT FROM THIS CLASS.\n  ~GTestFlagSaver() {\n    GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_;\n    GTEST_FLAG(break_on_failure) = break_on_failure_;\n    GTEST_FLAG(catch_exceptions) = catch_exceptions_;\n    GTEST_FLAG(color) = color_;\n    GTEST_FLAG(death_test_style) = death_test_style_;\n    GTEST_FLAG(death_test_use_fork) = death_test_use_fork_;\n    GTEST_FLAG(filter) = filter_;\n    GTEST_FLAG(internal_run_death_test) = internal_run_death_test_;\n    GTEST_FLAG(list_tests) = list_tests_;\n    GTEST_FLAG(output) = output_;\n    GTEST_FLAG(print_time) = print_time_;\n    GTEST_FLAG(random_seed) = random_seed_;\n    GTEST_FLAG(repeat) = repeat_;\n    GTEST_FLAG(shuffle) = shuffle_;\n    GTEST_FLAG(stack_trace_depth) = stack_trace_depth_;\n    GTEST_FLAG(stream_result_to) = stream_result_to_;\n    GTEST_FLAG(throw_on_failure) = throw_on_failure_;\n  }\n\n private:\n  // Fields for saving the original values of flags.\n  bool also_run_disabled_tests_;\n  bool break_on_failure_;\n  bool catch_exceptions_;\n  std::string color_;\n  std::string death_test_style_;\n  bool death_test_use_fork_;\n  std::string filter_;\n  std::string internal_run_death_test_;\n  bool list_tests_;\n  std::string output_;\n  bool print_time_;\n  internal::Int32 random_seed_;\n  internal::Int32 repeat_;\n  bool shuffle_;\n  internal::Int32 stack_trace_depth_;\n  std::string stream_result_to_;\n  bool throw_on_failure_;\n} GTEST_ATTRIBUTE_UNUSED_;\n\n// Converts a Unicode code point to a narrow string in UTF-8 encoding.\n// code_point parameter is of type UInt32 because wchar_t may not be\n// wide enough to contain a code point.\n// If the code_point is not a valid Unicode code point\n// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted\n// to \"(Invalid Unicode 0xXXXXXXXX)\".\nGTEST_API_ std::string CodePointToUtf8(UInt32 code_point);\n\n// Converts a wide string to a narrow string in UTF-8 encoding.\n// The wide string is assumed to have the following encoding:\n//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS)\n//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)\n// Parameter str points to a null-terminated wide string.\n// Parameter num_chars may additionally limit the number\n// of wchar_t characters processed. -1 is used when the entire string\n// should be processed.\n// If the string contains code points that are not valid Unicode code points\n// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output\n// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding\n// and contains invalid UTF-16 surrogate pairs, values in those pairs\n// will be encoded as individual Unicode characters from Basic Normal Plane.\nGTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars);\n\n// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file\n// if the variable is present. If a file already exists at this location, this\n// function will write over it. If the variable is present, but the file cannot\n// be created, prints an error and exits.\nvoid WriteToShardStatusFileIfNeeded();\n\n// Checks whether sharding is enabled by examining the relevant\n// environment variable values. If the variables are present,\n// but inconsistent (e.g., shard_index >= total_shards), prints\n// an error and exits. If in_subprocess_for_death_test, sharding is\n// disabled because it must only be applied to the original test\n// process. Otherwise, we could filter out death tests we intended to execute.\nGTEST_API_ bool ShouldShard(const char* total_shards_str,\n                            const char* shard_index_str,\n                            bool in_subprocess_for_death_test);\n\n// Parses the environment variable var as an Int32. If it is unset,\n// returns default_val. If it is not an Int32, prints an error and\n// and aborts.\nGTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val);\n\n// Given the total number of shards, the shard index, and the test id,\n// returns true iff the test should be run on this shard. The test id is\n// some arbitrary but unique non-negative integer assigned to each test\n// method. Assumes that 0 <= shard_index < total_shards.\nGTEST_API_ bool ShouldRunTestOnShard(\n    int total_shards, int shard_index, int test_id);\n\n// STL container utilities.\n\n// Returns the number of elements in the given container that satisfy\n// the given predicate.\ntemplate <class Container, typename Predicate>\ninline int CountIf(const Container& c, Predicate predicate) {\n  // Implemented as an explicit loop since std::count_if() in libCstd on\n  // Solaris has a non-standard signature.\n  int count = 0;\n  for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) {\n    if (predicate(*it))\n      ++count;\n  }\n  return count;\n}\n\n// Applies a function/functor to each element in the container.\ntemplate <class Container, typename Functor>\nvoid ForEach(const Container& c, Functor functor) {\n  std::for_each(c.begin(), c.end(), functor);\n}\n\n// Returns the i-th element of the vector, or default_value if i is not\n// in range [0, v.size()).\ntemplate <typename E>\ninline E GetElementOr(const std::vector<E>& v, int i, E default_value) {\n  return (i < 0 || i >= static_cast<int>(v.size())) ? default_value : v[i];\n}\n\n// Performs an in-place shuffle of a range of the vector's elements.\n// 'begin' and 'end' are element indices as an STL-style range;\n// i.e. [begin, end) are shuffled, where 'end' == size() means to\n// shuffle to the end of the vector.\ntemplate <typename E>\nvoid ShuffleRange(internal::Random* random, int begin, int end,\n                  std::vector<E>* v) {\n  const int size = static_cast<int>(v->size());\n  GTEST_CHECK_(0 <= begin && begin <= size)\n      << \"Invalid shuffle range start \" << begin << \": must be in range [0, \"\n      << size << \"].\";\n  GTEST_CHECK_(begin <= end && end <= size)\n      << \"Invalid shuffle range finish \" << end << \": must be in range [\"\n      << begin << \", \" << size << \"].\";\n\n  // Fisher-Yates shuffle, from\n  // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle\n  for (int range_width = end - begin; range_width >= 2; range_width--) {\n    const int last_in_range = begin + range_width - 1;\n    const int selected = begin + random->Generate(range_width);\n    std::swap((*v)[selected], (*v)[last_in_range]);\n  }\n}\n\n// Performs an in-place shuffle of the vector's elements.\ntemplate <typename E>\ninline void Shuffle(internal::Random* random, std::vector<E>* v) {\n  ShuffleRange(random, 0, static_cast<int>(v->size()), v);\n}\n\n// A function for deleting an object.  Handy for being used as a\n// functor.\ntemplate <typename T>\nstatic void Delete(T* x) {\n  delete x;\n}\n\n// A predicate that checks the key of a TestProperty against a known key.\n//\n// TestPropertyKeyIs is copyable.\nclass TestPropertyKeyIs {\n public:\n  // Constructor.\n  //\n  // TestPropertyKeyIs has NO default constructor.\n  explicit TestPropertyKeyIs(const std::string& key) : key_(key) {}\n\n  // Returns true iff the test name of test property matches on key_.\n  bool operator()(const TestProperty& test_property) const {\n    return test_property.key() == key_;\n  }\n\n private:\n  std::string key_;\n};\n\n// Class UnitTestOptions.\n//\n// This class contains functions for processing options the user\n// specifies when running the tests.  It has only static members.\n//\n// In most cases, the user can specify an option using either an\n// environment variable or a command line flag.  E.g. you can set the\n// test filter using either GTEST_FILTER or --gtest_filter.  If both\n// the variable and the flag are present, the latter overrides the\n// former.\nclass GTEST_API_ UnitTestOptions {\n public:\n  // Functions for processing the gtest_output flag.\n\n  // Returns the output format, or \"\" for normal printed output.\n  static std::string GetOutputFormat();\n\n  // Returns the absolute path of the requested output file, or the\n  // default (test_detail.xml in the original working directory) if\n  // none was explicitly specified.\n  static std::string GetAbsolutePathToOutputFile();\n\n  // Functions for processing the gtest_filter flag.\n\n  // Returns true iff the wildcard pattern matches the string.  The\n  // first ':' or '\\0' character in pattern marks the end of it.\n  //\n  // This recursive algorithm isn't very efficient, but is clear and\n  // works well enough for matching test names, which are short.\n  static bool PatternMatchesString(const char *pattern, const char *str);\n\n  // Returns true iff the user-specified filter matches the test case\n  // name and the test name.\n  static bool FilterMatchesTest(const std::string &test_case_name,\n                                const std::string &test_name);\n\n#if GTEST_OS_WINDOWS\n  // Function for supporting the gtest_catch_exception flag.\n\n  // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the\n  // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.\n  // This function is useful as an __except condition.\n  static int GTestShouldProcessSEH(DWORD exception_code);\n#endif  // GTEST_OS_WINDOWS\n\n  // Returns true if \"name\" matches the ':' separated list of glob-style\n  // filters in \"filter\".\n  static bool MatchesFilter(const std::string& name, const char* filter);\n};\n\n// Returns the current application's name, removing directory path if that\n// is present.  Used by UnitTestOptions::GetOutputFile.\nGTEST_API_ FilePath GetCurrentExecutableName();\n\n// The role interface for getting the OS stack trace as a string.\nclass OsStackTraceGetterInterface {\n public:\n  OsStackTraceGetterInterface() {}\n  virtual ~OsStackTraceGetterInterface() {}\n\n  // Returns the current OS stack trace as an std::string.  Parameters:\n  //\n  //   max_depth  - the maximum number of stack frames to be included\n  //                in the trace.\n  //   skip_count - the number of top frames to be skipped; doesn't count\n  //                against max_depth.\n  virtual string CurrentStackTrace(int max_depth, int skip_count) = 0;\n\n  // UponLeavingGTest() should be called immediately before Google Test calls\n  // user code. It saves some information about the current stack that\n  // CurrentStackTrace() will use to find and hide Google Test stack frames.\n  virtual void UponLeavingGTest() = 0;\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface);\n};\n\n// A working implementation of the OsStackTraceGetterInterface interface.\nclass OsStackTraceGetter : public OsStackTraceGetterInterface {\n public:\n  OsStackTraceGetter() : caller_frame_(NULL) {}\n\n  virtual string CurrentStackTrace(int max_depth, int skip_count)\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  virtual void UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // This string is inserted in place of stack frames that are part of\n  // Google Test's implementation.\n  static const char* const kElidedFramesMarker;\n\n private:\n  Mutex mutex_;  // protects all internal state\n\n  // We save the stack frame below the frame that calls user code.\n  // We do this because the address of the frame immediately below\n  // the user code changes between the call to UponLeavingGTest()\n  // and any calls to CurrentStackTrace() from within the user code.\n  void* caller_frame_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter);\n};\n\n// Information about a Google Test trace point.\nstruct TraceInfo {\n  const char* file;\n  int line;\n  std::string message;\n};\n\n// This is the default global test part result reporter used in UnitTestImpl.\n// This class should only be used by UnitTestImpl.\nclass DefaultGlobalTestPartResultReporter\n  : public TestPartResultReporterInterface {\n public:\n  explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test);\n  // Implements the TestPartResultReporterInterface. Reports the test part\n  // result in the current test.\n  virtual void ReportTestPartResult(const TestPartResult& result);\n\n private:\n  UnitTestImpl* const unit_test_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter);\n};\n\n// This is the default per thread test part result reporter used in\n// UnitTestImpl. This class should only be used by UnitTestImpl.\nclass DefaultPerThreadTestPartResultReporter\n    : public TestPartResultReporterInterface {\n public:\n  explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test);\n  // Implements the TestPartResultReporterInterface. The implementation just\n  // delegates to the current global test part result reporter of *unit_test_.\n  virtual void ReportTestPartResult(const TestPartResult& result);\n\n private:\n  UnitTestImpl* const unit_test_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter);\n};\n\n// The private implementation of the UnitTest class.  We don't protect\n// the methods under a mutex, as this class is not accessible by a\n// user and the UnitTest class that delegates work to this class does\n// proper locking.\nclass GTEST_API_ UnitTestImpl {\n public:\n  explicit UnitTestImpl(UnitTest* parent);\n  virtual ~UnitTestImpl();\n\n  // There are two different ways to register your own TestPartResultReporter.\n  // You can register your own repoter to listen either only for test results\n  // from the current thread or for results from all threads.\n  // By default, each per-thread test result repoter just passes a new\n  // TestPartResult to the global test result reporter, which registers the\n  // test part result for the currently running test.\n\n  // Returns the global test part result reporter.\n  TestPartResultReporterInterface* GetGlobalTestPartResultReporter();\n\n  // Sets the global test part result reporter.\n  void SetGlobalTestPartResultReporter(\n      TestPartResultReporterInterface* reporter);\n\n  // Returns the test part result reporter for the current thread.\n  TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread();\n\n  // Sets the test part result reporter for the current thread.\n  void SetTestPartResultReporterForCurrentThread(\n      TestPartResultReporterInterface* reporter);\n\n  // Gets the number of successful test cases.\n  int successful_test_case_count() const;\n\n  // Gets the number of failed test cases.\n  int failed_test_case_count() const;\n\n  // Gets the number of all test cases.\n  int total_test_case_count() const;\n\n  // Gets the number of all test cases that contain at least one test\n  // that should run.\n  int test_case_to_run_count() const;\n\n  // Gets the number of successful tests.\n  int successful_test_count() const;\n\n  // Gets the number of failed tests.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests.\n  int disabled_test_count() const;\n\n  // Gets the number of all tests.\n  int total_test_count() const;\n\n  // Gets the number of tests that should run.\n  int test_to_run_count() const;\n\n  // Gets the time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const { return start_timestamp_; }\n\n  // Gets the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Returns true iff the unit test passed (i.e. all test cases passed).\n  bool Passed() const { return !Failed(); }\n\n  // Returns true iff the unit test failed (i.e. some test case failed\n  // or something outside of all tests failed).\n  bool Failed() const {\n    return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed();\n  }\n\n  // Gets the i-th test case among all the test cases. i can range from 0 to\n  // total_test_case_count() - 1. If i is not in that range, returns NULL.\n  const TestCase* GetTestCase(int i) const {\n    const int index = GetElementOr(test_case_indices_, i, -1);\n    return index < 0 ? NULL : test_cases_[i];\n  }\n\n  // Gets the i-th test case among all the test cases. i can range from 0 to\n  // total_test_case_count() - 1. If i is not in that range, returns NULL.\n  TestCase* GetMutableTestCase(int i) {\n    const int index = GetElementOr(test_case_indices_, i, -1);\n    return index < 0 ? NULL : test_cases_[index];\n  }\n\n  // Provides access to the event listener list.\n  TestEventListeners* listeners() { return &listeners_; }\n\n  // Returns the TestResult for the test that's currently running, or\n  // the TestResult for the ad hoc test if no test is running.\n  TestResult* current_test_result();\n\n  // Returns the TestResult for the ad hoc test.\n  const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; }\n\n  // Sets the OS stack trace getter.\n  //\n  // Does nothing if the input and the current OS stack trace getter\n  // are the same; otherwise, deletes the old getter and makes the\n  // input the current getter.\n  void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter);\n\n  // Returns the current OS stack trace getter if it is not NULL;\n  // otherwise, creates an OsStackTraceGetter, makes it the current\n  // getter, and returns it.\n  OsStackTraceGetterInterface* os_stack_trace_getter();\n\n  // Returns the current OS stack trace as an std::string.\n  //\n  // The maximum number of stack frames to be included is specified by\n  // the gtest_stack_trace_depth flag.  The skip_count parameter\n  // specifies the number of top frames to be skipped, which doesn't\n  // count against the number of frames to be included.\n  //\n  // For example, if Foo() calls Bar(), which in turn calls\n  // CurrentOsStackTraceExceptTop(1), Foo() will be included in the\n  // trace but Bar() and CurrentOsStackTraceExceptTop() won't.\n  std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_;\n\n  // Finds and returns a TestCase with the given name.  If one doesn't\n  // exist, creates one and returns it.\n  //\n  // Arguments:\n  //\n  //   test_case_name: name of the test case\n  //   type_param:     the name of the test's type parameter, or NULL if\n  //                   this is not a typed or a type-parameterized test.\n  //   set_up_tc:      pointer to the function that sets up the test case\n  //   tear_down_tc:   pointer to the function that tears down the test case\n  TestCase* GetTestCase(const char* test_case_name,\n                        const char* type_param,\n                        Test::SetUpTestCaseFunc set_up_tc,\n                        Test::TearDownTestCaseFunc tear_down_tc);\n\n  // Adds a TestInfo to the unit test.\n  //\n  // Arguments:\n  //\n  //   set_up_tc:    pointer to the function that sets up the test case\n  //   tear_down_tc: pointer to the function that tears down the test case\n  //   test_info:    the TestInfo object\n  void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc,\n                   Test::TearDownTestCaseFunc tear_down_tc,\n                   TestInfo* test_info) {\n    // In order to support thread-safe death tests, we need to\n    // remember the original working directory when the test program\n    // was first invoked.  We cannot do this in RUN_ALL_TESTS(), as\n    // the user may have changed the current directory before calling\n    // RUN_ALL_TESTS().  Therefore we capture the current directory in\n    // AddTestInfo(), which is called to register a TEST or TEST_F\n    // before main() is reached.\n    if (original_working_dir_.IsEmpty()) {\n      original_working_dir_.Set(FilePath::GetCurrentDir());\n      GTEST_CHECK_(!original_working_dir_.IsEmpty())\n          << \"Failed to get the current working directory.\";\n    }\n\n    GetTestCase(test_info->test_case_name(),\n                test_info->type_param(),\n                set_up_tc,\n                tear_down_tc)->AddTestInfo(test_info);\n  }\n\n#if GTEST_HAS_PARAM_TEST\n  // Returns ParameterizedTestCaseRegistry object used to keep track of\n  // value-parameterized tests and instantiate and register them.\n  internal::ParameterizedTestCaseRegistry& parameterized_test_registry() {\n    return parameterized_test_registry_;\n  }\n#endif  // GTEST_HAS_PARAM_TEST\n\n  // Sets the TestCase object for the test that's currently running.\n  void set_current_test_case(TestCase* a_current_test_case) {\n    current_test_case_ = a_current_test_case;\n  }\n\n  // Sets the TestInfo object for the test that's currently running.  If\n  // current_test_info is NULL, the assertion results will be stored in\n  // ad_hoc_test_result_.\n  void set_current_test_info(TestInfo* a_current_test_info) {\n    current_test_info_ = a_current_test_info;\n  }\n\n  // Registers all parameterized tests defined using TEST_P and\n  // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter\n  // combination. This method can be called more then once; it has guards\n  // protecting from registering the tests more then once.  If\n  // value-parameterized tests are disabled, RegisterParameterizedTests is\n  // present but does nothing.\n  void RegisterParameterizedTests();\n\n  // Runs all tests in this UnitTest object, prints the result, and\n  // returns true if all tests are successful.  If any exception is\n  // thrown during a test, this test is considered to be failed, but\n  // the rest of the tests will still be run.\n  bool RunAllTests();\n\n  // Clears the results of all tests, except the ad hoc tests.\n  void ClearNonAdHocTestResult() {\n    ForEach(test_cases_, TestCase::ClearTestCaseResult);\n  }\n\n  // Clears the results of ad-hoc test assertions.\n  void ClearAdHocTestResult() {\n    ad_hoc_test_result_.Clear();\n  }\n\n  // Adds a TestProperty to the current TestResult object when invoked in a\n  // context of a test or a test case, or to the global property set. If the\n  // result already contains a property with the same key, the value will be\n  // updated.\n  void RecordProperty(const TestProperty& test_property);\n\n  enum ReactionToSharding {\n    HONOR_SHARDING_PROTOCOL,\n    IGNORE_SHARDING_PROTOCOL\n  };\n\n  // Matches the full name of each test against the user-specified\n  // filter to decide whether the test should run, then records the\n  // result in each TestCase and TestInfo object.\n  // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests\n  // based on sharding variables in the environment.\n  // Returns the number of tests that should run.\n  int FilterTests(ReactionToSharding shard_tests);\n\n  // Prints the names of the tests matching the user-specified filter flag.\n  void ListTestsMatchingFilter();\n\n  const TestCase* current_test_case() const { return current_test_case_; }\n  TestInfo* current_test_info() { return current_test_info_; }\n  const TestInfo* current_test_info() const { return current_test_info_; }\n\n  // Returns the vector of environments that need to be set-up/torn-down\n  // before/after the tests are run.\n  std::vector<Environment*>& environments() { return environments_; }\n\n  // Getters for the per-thread Google Test trace stack.\n  std::vector<TraceInfo>& gtest_trace_stack() {\n    return *(gtest_trace_stack_.pointer());\n  }\n  const std::vector<TraceInfo>& gtest_trace_stack() const {\n    return gtest_trace_stack_.get();\n  }\n\n#if GTEST_HAS_DEATH_TEST\n  void InitDeathTestSubprocessControlInfo() {\n    internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag());\n  }\n  // Returns a pointer to the parsed --gtest_internal_run_death_test\n  // flag, or NULL if that flag was not specified.\n  // This information is useful only in a death test child process.\n  // Must not be called before a call to InitGoogleTest.\n  const InternalRunDeathTestFlag* internal_run_death_test_flag() const {\n    return internal_run_death_test_flag_.get();\n  }\n\n  // Returns a pointer to the current death test factory.\n  internal::DeathTestFactory* death_test_factory() {\n    return death_test_factory_.get();\n  }\n\n  void SuppressTestEventsIfInSubprocess();\n\n  friend class ReplaceDeathTestFactory;\n#endif  // GTEST_HAS_DEATH_TEST\n\n  // Initializes the event listener performing XML output as specified by\n  // UnitTestOptions. Must not be called before InitGoogleTest.\n  void ConfigureXmlOutput();\n\n#if GTEST_CAN_STREAM_RESULTS_\n  // Initializes the event listener for streaming test results to a socket.\n  // Must not be called before InitGoogleTest.\n  void ConfigureStreamingOutput();\n#endif\n\n  // Performs initialization dependent upon flag values obtained in\n  // ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to\n  // ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest\n  // this function is also called from RunAllTests.  Since this function can be\n  // called more than once, it has to be idempotent.\n  void PostFlagParsingInit();\n\n  // Gets the random seed used at the start of the current test iteration.\n  int random_seed() const { return random_seed_; }\n\n  // Gets the random number generator.\n  internal::Random* random() { return &random_; }\n\n  // Shuffles all test cases, and the tests within each test case,\n  // making sure that death tests are still run first.\n  void ShuffleTests();\n\n  // Restores the test cases and tests to their order before the first shuffle.\n  void UnshuffleTests();\n\n  // Returns the value of GTEST_FLAG(catch_exceptions) at the moment\n  // UnitTest::Run() starts.\n  bool catch_exceptions() const { return catch_exceptions_; }\n\n private:\n  friend class ::testing::UnitTest;\n\n  // Used by UnitTest::Run() to capture the state of\n  // GTEST_FLAG(catch_exceptions) at the moment it starts.\n  void set_catch_exceptions(bool value) { catch_exceptions_ = value; }\n\n  // The UnitTest object that owns this implementation object.\n  UnitTest* const parent_;\n\n  // The working directory when the first TEST() or TEST_F() was\n  // executed.\n  internal::FilePath original_working_dir_;\n\n  // The default test part result reporters.\n  DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_;\n  DefaultPerThreadTestPartResultReporter\n      default_per_thread_test_part_result_reporter_;\n\n  // Points to (but doesn't own) the global test part result reporter.\n  TestPartResultReporterInterface* global_test_part_result_repoter_;\n\n  // Protects read and write access to global_test_part_result_reporter_.\n  internal::Mutex global_test_part_result_reporter_mutex_;\n\n  // Points to (but doesn't own) the per-thread test part result reporter.\n  internal::ThreadLocal<TestPartResultReporterInterface*>\n      per_thread_test_part_result_reporter_;\n\n  // The vector of environments that need to be set-up/torn-down\n  // before/after the tests are run.\n  std::vector<Environment*> environments_;\n\n  // The vector of TestCases in their original order.  It owns the\n  // elements in the vector.\n  std::vector<TestCase*> test_cases_;\n\n  // Provides a level of indirection for the test case list to allow\n  // easy shuffling and restoring the test case order.  The i-th\n  // element of this vector is the index of the i-th test case in the\n  // shuffled order.\n  std::vector<int> test_case_indices_;\n\n#if GTEST_HAS_PARAM_TEST\n  // ParameterizedTestRegistry object used to register value-parameterized\n  // tests.\n  internal::ParameterizedTestCaseRegistry parameterized_test_registry_;\n\n  // Indicates whether RegisterParameterizedTests() has been called already.\n  bool parameterized_tests_registered_;\n#endif  // GTEST_HAS_PARAM_TEST\n\n  // Index of the last death test case registered.  Initially -1.\n  int last_death_test_case_;\n\n  // This points to the TestCase for the currently running test.  It\n  // changes as Google Test goes through one test case after another.\n  // When no test is running, this is set to NULL and Google Test\n  // stores assertion results in ad_hoc_test_result_.  Initially NULL.\n  TestCase* current_test_case_;\n\n  // This points to the TestInfo for the currently running test.  It\n  // changes as Google Test goes through one test after another.  When\n  // no test is running, this is set to NULL and Google Test stores\n  // assertion results in ad_hoc_test_result_.  Initially NULL.\n  TestInfo* current_test_info_;\n\n  // Normally, a user only writes assertions inside a TEST or TEST_F,\n  // or inside a function called by a TEST or TEST_F.  Since Google\n  // Test keeps track of which test is current running, it can\n  // associate such an assertion with the test it belongs to.\n  //\n  // If an assertion is encountered when no TEST or TEST_F is running,\n  // Google Test attributes the assertion result to an imaginary \"ad hoc\"\n  // test, and records the result in ad_hoc_test_result_.\n  TestResult ad_hoc_test_result_;\n\n  // The list of event listeners that can be used to track events inside\n  // Google Test.\n  TestEventListeners listeners_;\n\n  // The OS stack trace getter.  Will be deleted when the UnitTest\n  // object is destructed.  By default, an OsStackTraceGetter is used,\n  // but the user can set this field to use a custom getter if that is\n  // desired.\n  OsStackTraceGetterInterface* os_stack_trace_getter_;\n\n  // True iff PostFlagParsingInit() has been called.\n  bool post_flag_parse_init_performed_;\n\n  // The random number seed used at the beginning of the test run.\n  int random_seed_;\n\n  // Our random number generator.\n  internal::Random random_;\n\n  // The time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp_;\n\n  // How long the test took to run, in milliseconds.\n  TimeInMillis elapsed_time_;\n\n#if GTEST_HAS_DEATH_TEST\n  // The decomposed components of the gtest_internal_run_death_test flag,\n  // parsed when RUN_ALL_TESTS is called.\n  internal::scoped_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;\n  internal::scoped_ptr<internal::DeathTestFactory> death_test_factory_;\n#endif  // GTEST_HAS_DEATH_TEST\n\n  // A per-thread stack of traces created by the SCOPED_TRACE() macro.\n  internal::ThreadLocal<std::vector<TraceInfo> > gtest_trace_stack_;\n\n  // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests()\n  // starts.\n  bool catch_exceptions_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl);\n};  // class UnitTestImpl\n\n// Convenience function for accessing the global UnitTest\n// implementation object.\ninline UnitTestImpl* GetUnitTestImpl() {\n  return UnitTest::GetInstance()->impl();\n}\n\n#if GTEST_USES_SIMPLE_RE\n\n// Internal helper functions for implementing the simple regular\n// expression matcher.\nGTEST_API_ bool IsInSet(char ch, const char* str);\nGTEST_API_ bool IsAsciiDigit(char ch);\nGTEST_API_ bool IsAsciiPunct(char ch);\nGTEST_API_ bool IsRepeat(char ch);\nGTEST_API_ bool IsAsciiWhiteSpace(char ch);\nGTEST_API_ bool IsAsciiWordChar(char ch);\nGTEST_API_ bool IsValidEscape(char ch);\nGTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch);\nGTEST_API_ bool ValidateRegex(const char* regex);\nGTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str);\nGTEST_API_ bool MatchRepetitionAndRegexAtHead(\n    bool escaped, char ch, char repeat, const char* regex, const char* str);\nGTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str);\n\n#endif  // GTEST_USES_SIMPLE_RE\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.\nGTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv);\nGTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv);\n\n#if GTEST_HAS_DEATH_TEST\n\n// Returns the message describing the last system error, regardless of the\n// platform.\nGTEST_API_ std::string GetLastErrnoDescription();\n\n# if GTEST_OS_WINDOWS\n// Provides leak-safe Windows kernel handle ownership.\nclass AutoHandle {\n public:\n  AutoHandle() : handle_(INVALID_HANDLE_VALUE) {}\n  explicit AutoHandle(HANDLE handle) : handle_(handle) {}\n\n  ~AutoHandle() { Reset(); }\n\n  HANDLE Get() const { return handle_; }\n  void Reset() { Reset(INVALID_HANDLE_VALUE); }\n  void Reset(HANDLE handle) {\n    if (handle != handle_) {\n      if (handle_ != INVALID_HANDLE_VALUE)\n        ::CloseHandle(handle_);\n      handle_ = handle;\n    }\n  }\n\n private:\n  HANDLE handle_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle);\n};\n# endif  // GTEST_OS_WINDOWS\n\n// Attempts to parse a string into a positive integer pointed to by the\n// number parameter.  Returns true if that is possible.\n// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use\n// it here.\ntemplate <typename Integer>\nbool ParseNaturalNumber(const ::std::string& str, Integer* number) {\n  // Fail fast if the given string does not begin with a digit;\n  // this bypasses strtoXXX's \"optional leading whitespace and plus\n  // or minus sign\" semantics, which are undesirable here.\n  if (str.empty() || !IsDigit(str[0])) {\n    return false;\n  }\n  errno = 0;\n\n  char* end;\n  // BiggestConvertible is the largest integer type that system-provided\n  // string-to-number conversion routines can return.\n\n# if GTEST_OS_WINDOWS && !defined(__GNUC__)\n\n  // MSVC and C++ Builder define __int64 instead of the standard long long.\n  typedef unsigned __int64 BiggestConvertible;\n  const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10);\n\n# else\n\n  typedef unsigned long long BiggestConvertible;  // NOLINT\n  const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);\n\n# endif  // GTEST_OS_WINDOWS && !defined(__GNUC__)\n\n  const bool parse_success = *end == '\\0' && errno == 0;\n\n  // TODO(vladl@google.com): Convert this to compile time assertion when it is\n  // available.\n  GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));\n\n  const Integer result = static_cast<Integer>(parsed);\n  if (parse_success && static_cast<BiggestConvertible>(result) == parsed) {\n    *number = result;\n    return true;\n  }\n  return false;\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n// TestResult contains some private methods that should be hidden from\n// Google Test user but are required for testing. This class allow our tests\n// to access them.\n//\n// This class is supplied only for the purpose of testing Google Test's own\n// constructs. Do not use it in user tests, either directly or indirectly.\nclass TestResultAccessor {\n public:\n  static void RecordProperty(TestResult* test_result,\n                             const std::string& xml_element,\n                             const TestProperty& property) {\n    test_result->RecordProperty(xml_element, property);\n  }\n\n  static void ClearTestPartResults(TestResult* test_result) {\n    test_result->ClearTestPartResults();\n  }\n\n  static const std::vector<testing::TestPartResult>& test_part_results(\n      const TestResult& test_result) {\n    return test_result.test_part_results();\n  }\n};\n\n#if GTEST_CAN_STREAM_RESULTS_\n\n// Streams test results to the given port on the given host machine.\nclass StreamingListener : public EmptyTestEventListener {\n public:\n  // Abstract base class for writing strings to a socket.\n  class AbstractSocketWriter {\n   public:\n    virtual ~AbstractSocketWriter() {}\n\n    // Sends a string to the socket.\n    virtual void Send(const string& message) = 0;\n\n    // Closes the socket.\n    virtual void CloseConnection() {}\n\n    // Sends a string and a newline to the socket.\n    void SendLn(const string& message) {\n      Send(message + \"\\n\");\n    }\n  };\n\n  // Concrete class for actually writing strings to a socket.\n  class SocketWriter : public AbstractSocketWriter {\n   public:\n    SocketWriter(const string& host, const string& port)\n        : sockfd_(-1), host_name_(host), port_num_(port) {\n      MakeConnection();\n    }\n\n    virtual ~SocketWriter() {\n      if (sockfd_ != -1)\n        CloseConnection();\n    }\n\n    // Sends a string to the socket.\n    virtual void Send(const string& message) {\n      GTEST_CHECK_(sockfd_ != -1)\n          << \"Send() can be called only when there is a connection.\";\n\n      const int len = static_cast<int>(message.length());\n      if (write(sockfd_, message.c_str(), len) != len) {\n        GTEST_LOG_(WARNING)\n            << \"stream_result_to: failed to stream to \"\n            << host_name_ << \":\" << port_num_;\n      }\n    }\n\n   private:\n    // Creates a client socket and connects to the server.\n    void MakeConnection();\n\n    // Closes the socket.\n    void CloseConnection() {\n      GTEST_CHECK_(sockfd_ != -1)\n          << \"CloseConnection() can be called only when there is a connection.\";\n\n      close(sockfd_);\n      sockfd_ = -1;\n    }\n\n    int sockfd_;  // socket file descriptor\n    const string host_name_;\n    const string port_num_;\n\n    GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter);\n  };  // class SocketWriter\n\n  // Escapes '=', '&', '%', and '\\n' characters in str as \"%xx\".\n  static string UrlEncode(const char* str);\n\n  StreamingListener(const string& host, const string& port)\n      : socket_writer_(new SocketWriter(host, port)) { Start(); }\n\n  explicit StreamingListener(AbstractSocketWriter* socket_writer)\n      : socket_writer_(socket_writer) { Start(); }\n\n  void OnTestProgramStart(const UnitTest& /* unit_test */) {\n    SendLn(\"event=TestProgramStart\");\n  }\n\n  void OnTestProgramEnd(const UnitTest& unit_test) {\n    // Note that Google Test current only report elapsed time for each\n    // test iteration, not for the entire test program.\n    SendLn(\"event=TestProgramEnd&passed=\" + FormatBool(unit_test.Passed()));\n\n    // Notify the streaming server to stop.\n    socket_writer_->CloseConnection();\n  }\n\n  void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) {\n    SendLn(\"event=TestIterationStart&iteration=\" +\n           StreamableToString(iteration));\n  }\n\n  void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) {\n    SendLn(\"event=TestIterationEnd&passed=\" +\n           FormatBool(unit_test.Passed()) + \"&elapsed_time=\" +\n           StreamableToString(unit_test.elapsed_time()) + \"ms\");\n  }\n\n  void OnTestCaseStart(const TestCase& test_case) {\n    SendLn(std::string(\"event=TestCaseStart&name=\") + test_case.name());\n  }\n\n  void OnTestCaseEnd(const TestCase& test_case) {\n    SendLn(\"event=TestCaseEnd&passed=\" + FormatBool(test_case.Passed())\n           + \"&elapsed_time=\" + StreamableToString(test_case.elapsed_time())\n           + \"ms\");\n  }\n\n  void OnTestStart(const TestInfo& test_info) {\n    SendLn(std::string(\"event=TestStart&name=\") + test_info.name());\n  }\n\n  void OnTestEnd(const TestInfo& test_info) {\n    SendLn(\"event=TestEnd&passed=\" +\n           FormatBool((test_info.result())->Passed()) +\n           \"&elapsed_time=\" +\n           StreamableToString((test_info.result())->elapsed_time()) + \"ms\");\n  }\n\n  void OnTestPartResult(const TestPartResult& test_part_result) {\n    const char* file_name = test_part_result.file_name();\n    if (file_name == NULL)\n      file_name = \"\";\n    SendLn(\"event=TestPartResult&file=\" + UrlEncode(file_name) +\n           \"&line=\" + StreamableToString(test_part_result.line_number()) +\n           \"&message=\" + UrlEncode(test_part_result.message()));\n  }\n\n private:\n  // Sends the given message and a newline to the socket.\n  void SendLn(const string& message) { socket_writer_->SendLn(message); }\n\n  // Called at the start of streaming to notify the receiver what\n  // protocol we are using.\n  void Start() { SendLn(\"gtest_streaming_protocol_version=1.0\"); }\n\n  string FormatBool(bool value) { return value ? \"1\" : \"0\"; }\n\n  const scoped_ptr<AbstractSocketWriter> socket_writer_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener);\n};  // class StreamingListener\n\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_SRC_GTEST_INTERNAL_INL_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-port.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/internal/gtest-port.h\"\n\n#include <limits.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#if GTEST_OS_WINDOWS_MOBILE\n# include <windows.h>  // For TerminateProcess()\n#elif GTEST_OS_WINDOWS\n# include <io.h>\n# include <sys/stat.h>\n#else\n# include <unistd.h>\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n#if GTEST_OS_MAC\n# include <mach/mach_init.h>\n# include <mach/task.h>\n# include <mach/vm_map.h>\n#endif  // GTEST_OS_MAC\n\n#if GTEST_OS_QNX\n# include <devctl.h>\n# include <sys/procfs.h>\n#endif  // GTEST_OS_QNX\n\n#include \"gtest/gtest-spi.h\"\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\nnamespace internal {\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\n// MSVC and C++Builder do not provide a definition of STDERR_FILENO.\nconst int kStdOutFileno = 1;\nconst int kStdErrFileno = 2;\n#else\nconst int kStdOutFileno = STDOUT_FILENO;\nconst int kStdErrFileno = STDERR_FILENO;\n#endif  // _MSC_VER\n\n#if GTEST_OS_MAC\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nsize_t GetThreadCount() {\n  const task_t task = mach_task_self();\n  mach_msg_type_number_t thread_count;\n  thread_act_array_t thread_list;\n  const kern_return_t status = task_threads(task, &thread_list, &thread_count);\n  if (status == KERN_SUCCESS) {\n    // task_threads allocates resources in thread_list and we need to free them\n    // to avoid leaks.\n    vm_deallocate(task,\n                  reinterpret_cast<vm_address_t>(thread_list),\n                  sizeof(thread_t) * thread_count);\n    return static_cast<size_t>(thread_count);\n  } else {\n    return 0;\n  }\n}\n\n#elif GTEST_OS_QNX\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nsize_t GetThreadCount() {\n  const int fd = open(\"/proc/self/as\", O_RDONLY);\n  if (fd < 0) {\n    return 0;\n  }\n  procfs_info process_info;\n  const int status =\n      devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL);\n  close(fd);\n  if (status == EOK) {\n    return static_cast<size_t>(process_info.num_threads);\n  } else {\n    return 0;\n  }\n}\n\n#else\n\nsize_t GetThreadCount() {\n  // There's no portable way to detect the number of threads, so we just\n  // return 0 to indicate that we cannot detect it.\n  return 0;\n}\n\n#endif  // GTEST_OS_MAC\n\n#if GTEST_USES_POSIX_RE\n\n// Implements RE.  Currently only needed for death tests.\n\nRE::~RE() {\n  if (is_valid_) {\n    // regfree'ing an invalid regex might crash because the content\n    // of the regex is undefined. Since the regex's are essentially\n    // the same, one cannot be valid (or invalid) without the other\n    // being so too.\n    regfree(&partial_regex_);\n    regfree(&full_regex_);\n  }\n  free(const_cast<char*>(pattern_));\n}\n\n// Returns true iff regular expression re matches the entire str.\nbool RE::FullMatch(const char* str, const RE& re) {\n  if (!re.is_valid_) return false;\n\n  regmatch_t match;\n  return regexec(&re.full_regex_, str, 1, &match, 0) == 0;\n}\n\n// Returns true iff regular expression re matches a substring of str\n// (including str itself).\nbool RE::PartialMatch(const char* str, const RE& re) {\n  if (!re.is_valid_) return false;\n\n  regmatch_t match;\n  return regexec(&re.partial_regex_, str, 1, &match, 0) == 0;\n}\n\n// Initializes an RE from its string representation.\nvoid RE::Init(const char* regex) {\n  pattern_ = posix::StrDup(regex);\n\n  // Reserves enough bytes to hold the regular expression used for a\n  // full match.\n  const size_t full_regex_len = strlen(regex) + 10;\n  char* const full_pattern = new char[full_regex_len];\n\n  snprintf(full_pattern, full_regex_len, \"^(%s)$\", regex);\n  is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0;\n  // We want to call regcomp(&partial_regex_, ...) even if the\n  // previous expression returns false.  Otherwise partial_regex_ may\n  // not be properly initialized can may cause trouble when it's\n  // freed.\n  //\n  // Some implementation of POSIX regex (e.g. on at least some\n  // versions of Cygwin) doesn't accept the empty string as a valid\n  // regex.  We change it to an equivalent form \"()\" to be safe.\n  if (is_valid_) {\n    const char* const partial_regex = (*regex == '\\0') ? \"()\" : regex;\n    is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0;\n  }\n  EXPECT_TRUE(is_valid_)\n      << \"Regular expression \\\"\" << regex\n      << \"\\\" is not a valid POSIX Extended regular expression.\";\n\n  delete[] full_pattern;\n}\n\n#elif GTEST_USES_SIMPLE_RE\n\n// Returns true iff ch appears anywhere in str (excluding the\n// terminating '\\0' character).\nbool IsInSet(char ch, const char* str) {\n  return ch != '\\0' && strchr(str, ch) != NULL;\n}\n\n// Returns true iff ch belongs to the given classification.  Unlike\n// similar functions in <ctype.h>, these aren't affected by the\n// current locale.\nbool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; }\nbool IsAsciiPunct(char ch) {\n  return IsInSet(ch, \"^-!\\\"#$%&'()*+,./:;<=>?@[\\\\]_`{|}~\");\n}\nbool IsRepeat(char ch) { return IsInSet(ch, \"?*+\"); }\nbool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, \" \\f\\n\\r\\t\\v\"); }\nbool IsAsciiWordChar(char ch) {\n  return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ||\n      ('0' <= ch && ch <= '9') || ch == '_';\n}\n\n// Returns true iff \"\\\\c\" is a supported escape sequence.\nbool IsValidEscape(char c) {\n  return (IsAsciiPunct(c) || IsInSet(c, \"dDfnrsStvwW\"));\n}\n\n// Returns true iff the given atom (specified by escaped and pattern)\n// matches ch.  The result is undefined if the atom is invalid.\nbool AtomMatchesChar(bool escaped, char pattern_char, char ch) {\n  if (escaped) {  // \"\\\\p\" where p is pattern_char.\n    switch (pattern_char) {\n      case 'd': return IsAsciiDigit(ch);\n      case 'D': return !IsAsciiDigit(ch);\n      case 'f': return ch == '\\f';\n      case 'n': return ch == '\\n';\n      case 'r': return ch == '\\r';\n      case 's': return IsAsciiWhiteSpace(ch);\n      case 'S': return !IsAsciiWhiteSpace(ch);\n      case 't': return ch == '\\t';\n      case 'v': return ch == '\\v';\n      case 'w': return IsAsciiWordChar(ch);\n      case 'W': return !IsAsciiWordChar(ch);\n    }\n    return IsAsciiPunct(pattern_char) && pattern_char == ch;\n  }\n\n  return (pattern_char == '.' && ch != '\\n') || pattern_char == ch;\n}\n\n// Helper function used by ValidateRegex() to format error messages.\nstd::string FormatRegexSyntaxError(const char* regex, int index) {\n  return (Message() << \"Syntax error at index \" << index\n          << \" in simple regular expression \\\"\" << regex << \"\\\": \").GetString();\n}\n\n// Generates non-fatal failures and returns false if regex is invalid;\n// otherwise returns true.\nbool ValidateRegex(const char* regex) {\n  if (regex == NULL) {\n    // TODO(wan@google.com): fix the source file location in the\n    // assertion failures to match where the regex is used in user\n    // code.\n    ADD_FAILURE() << \"NULL is not a valid simple regular expression.\";\n    return false;\n  }\n\n  bool is_valid = true;\n\n  // True iff ?, *, or + can follow the previous atom.\n  bool prev_repeatable = false;\n  for (int i = 0; regex[i]; i++) {\n    if (regex[i] == '\\\\') {  // An escape sequence\n      i++;\n      if (regex[i] == '\\0') {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)\n                      << \"'\\\\' cannot appear at the end.\";\n        return false;\n      }\n\n      if (!IsValidEscape(regex[i])) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)\n                      << \"invalid escape sequence \\\"\\\\\" << regex[i] << \"\\\".\";\n        is_valid = false;\n      }\n      prev_repeatable = true;\n    } else {  // Not an escape sequence.\n      const char ch = regex[i];\n\n      if (ch == '^' && i > 0) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'^' can only appear at the beginning.\";\n        is_valid = false;\n      } else if (ch == '$' && regex[i + 1] != '\\0') {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'$' can only appear at the end.\";\n        is_valid = false;\n      } else if (IsInSet(ch, \"()[]{}|\")) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'\" << ch << \"' is unsupported.\";\n        is_valid = false;\n      } else if (IsRepeat(ch) && !prev_repeatable) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'\" << ch << \"' can only follow a repeatable token.\";\n        is_valid = false;\n      }\n\n      prev_repeatable = !IsInSet(ch, \"^$?*+\");\n    }\n  }\n\n  return is_valid;\n}\n\n// Matches a repeated regex atom followed by a valid simple regular\n// expression.  The regex atom is defined as c if escaped is false,\n// or \\c otherwise.  repeat is the repetition meta character (?, *,\n// or +).  The behavior is undefined if str contains too many\n// characters to be indexable by size_t, in which case the test will\n// probably time out anyway.  We are fine with this limitation as\n// std::string has it too.\nbool MatchRepetitionAndRegexAtHead(\n    bool escaped, char c, char repeat, const char* regex,\n    const char* str) {\n  const size_t min_count = (repeat == '+') ? 1 : 0;\n  const size_t max_count = (repeat == '?') ? 1 :\n      static_cast<size_t>(-1) - 1;\n  // We cannot call numeric_limits::max() as it conflicts with the\n  // max() macro on Windows.\n\n  for (size_t i = 0; i <= max_count; ++i) {\n    // We know that the atom matches each of the first i characters in str.\n    if (i >= min_count && MatchRegexAtHead(regex, str + i)) {\n      // We have enough matches at the head, and the tail matches too.\n      // Since we only care about *whether* the pattern matches str\n      // (as opposed to *how* it matches), there is no need to find a\n      // greedy match.\n      return true;\n    }\n    if (str[i] == '\\0' || !AtomMatchesChar(escaped, c, str[i]))\n      return false;\n  }\n  return false;\n}\n\n// Returns true iff regex matches a prefix of str.  regex must be a\n// valid simple regular expression and not start with \"^\", or the\n// result is undefined.\nbool MatchRegexAtHead(const char* regex, const char* str) {\n  if (*regex == '\\0')  // An empty regex matches a prefix of anything.\n    return true;\n\n  // \"$\" only matches the end of a string.  Note that regex being\n  // valid guarantees that there's nothing after \"$\" in it.\n  if (*regex == '$')\n    return *str == '\\0';\n\n  // Is the first thing in regex an escape sequence?\n  const bool escaped = *regex == '\\\\';\n  if (escaped)\n    ++regex;\n  if (IsRepeat(regex[1])) {\n    // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so\n    // here's an indirect recursion.  It terminates as the regex gets\n    // shorter in each recursion.\n    return MatchRepetitionAndRegexAtHead(\n        escaped, regex[0], regex[1], regex + 2, str);\n  } else {\n    // regex isn't empty, isn't \"$\", and doesn't start with a\n    // repetition.  We match the first atom of regex with the first\n    // character of str and recurse.\n    return (*str != '\\0') && AtomMatchesChar(escaped, *regex, *str) &&\n        MatchRegexAtHead(regex + 1, str + 1);\n  }\n}\n\n// Returns true iff regex matches any substring of str.  regex must be\n// a valid simple regular expression, or the result is undefined.\n//\n// The algorithm is recursive, but the recursion depth doesn't exceed\n// the regex length, so we won't need to worry about running out of\n// stack space normally.  In rare cases the time complexity can be\n// exponential with respect to the regex length + the string length,\n// but usually it's must faster (often close to linear).\nbool MatchRegexAnywhere(const char* regex, const char* str) {\n  if (regex == NULL || str == NULL)\n    return false;\n\n  if (*regex == '^')\n    return MatchRegexAtHead(regex + 1, str);\n\n  // A successful match can be anywhere in str.\n  do {\n    if (MatchRegexAtHead(regex, str))\n      return true;\n  } while (*str++ != '\\0');\n  return false;\n}\n\n// Implements the RE class.\n\nRE::~RE() {\n  free(const_cast<char*>(pattern_));\n  free(const_cast<char*>(full_pattern_));\n}\n\n// Returns true iff regular expression re matches the entire str.\nbool RE::FullMatch(const char* str, const RE& re) {\n  return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str);\n}\n\n// Returns true iff regular expression re matches a substring of str\n// (including str itself).\nbool RE::PartialMatch(const char* str, const RE& re) {\n  return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str);\n}\n\n// Initializes an RE from its string representation.\nvoid RE::Init(const char* regex) {\n  pattern_ = full_pattern_ = NULL;\n  if (regex != NULL) {\n    pattern_ = posix::StrDup(regex);\n  }\n\n  is_valid_ = ValidateRegex(regex);\n  if (!is_valid_) {\n    // No need to calculate the full pattern when the regex is invalid.\n    return;\n  }\n\n  const size_t len = strlen(regex);\n  // Reserves enough bytes to hold the regular expression used for a\n  // full match: we need space to prepend a '^', append a '$', and\n  // terminate the string with '\\0'.\n  char* buffer = static_cast<char*>(malloc(len + 3));\n  full_pattern_ = buffer;\n\n  if (*regex != '^')\n    *buffer++ = '^';  // Makes sure full_pattern_ starts with '^'.\n\n  // We don't use snprintf or strncpy, as they trigger a warning when\n  // compiled with VC++ 8.0.\n  memcpy(buffer, regex, len);\n  buffer += len;\n\n  if (len == 0 || regex[len - 1] != '$')\n    *buffer++ = '$';  // Makes sure full_pattern_ ends with '$'.\n\n  *buffer = '\\0';\n}\n\n#endif  // GTEST_USES_POSIX_RE\n\nconst char kUnknownFile[] = \"unknown file\";\n\n// Formats a source file path and a line number as they would appear\n// in an error message from the compiler used to compile this code.\nGTEST_API_ ::std::string FormatFileLocation(const char* file, int line) {\n  const std::string file_name(file == NULL ? kUnknownFile : file);\n\n  if (line < 0) {\n    return file_name + \":\";\n  }\n#ifdef _MSC_VER\n  return file_name + \"(\" + StreamableToString(line) + \"):\";\n#else\n  return file_name + \":\" + StreamableToString(line) + \":\";\n#endif  // _MSC_VER\n}\n\n// Formats a file location for compiler-independent XML output.\n// Although this function is not platform dependent, we put it next to\n// FormatFileLocation in order to contrast the two functions.\n// Note that FormatCompilerIndependentFileLocation() does NOT append colon\n// to the file location it produces, unlike FormatFileLocation().\nGTEST_API_ ::std::string FormatCompilerIndependentFileLocation(\n    const char* file, int line) {\n  const std::string file_name(file == NULL ? kUnknownFile : file);\n\n  if (line < 0)\n    return file_name;\n  else\n    return file_name + \":\" + StreamableToString(line);\n}\n\n\nGTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line)\n    : severity_(severity) {\n  const char* const marker =\n      severity == GTEST_INFO ?    \"[  INFO ]\" :\n      severity == GTEST_WARNING ? \"[WARNING]\" :\n      severity == GTEST_ERROR ?   \"[ ERROR ]\" : \"[ FATAL ]\";\n  GetStream() << ::std::endl << marker << \" \"\n              << FormatFileLocation(file, line).c_str() << \": \";\n}\n\n// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.\nGTestLog::~GTestLog() {\n  GetStream() << ::std::endl;\n  if (severity_ == GTEST_FATAL) {\n    fflush(stderr);\n    posix::Abort();\n  }\n}\n// Disable Microsoft deprecation warnings for POSIX functions called from\n// this class (creat, dup, dup2, and close)\n#ifdef _MSC_VER\n# pragma warning(push)\n# pragma warning(disable: 4996)\n#endif  // _MSC_VER\n\n#if GTEST_HAS_STREAM_REDIRECTION\n\n// Object that captures an output stream (stdout/stderr).\nclass CapturedStream {\n public:\n  // The ctor redirects the stream to a temporary file.\n  explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) {\n# if GTEST_OS_WINDOWS\n    char temp_dir_path[MAX_PATH + 1] = { '\\0' };  // NOLINT\n    char temp_file_path[MAX_PATH + 1] = { '\\0' };  // NOLINT\n\n    ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path);\n    const UINT success = ::GetTempFileNameA(temp_dir_path,\n                                            \"gtest_redir\",\n                                            0,  // Generate unique file name.\n                                            temp_file_path);\n    GTEST_CHECK_(success != 0)\n        << \"Unable to create a temporary file in \" << temp_dir_path;\n    const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE);\n    GTEST_CHECK_(captured_fd != -1) << \"Unable to open temporary file \"\n                                    << temp_file_path;\n    filename_ = temp_file_path;\n# else\n    // There's no guarantee that a test has write access to the current\n    // directory, so we create the temporary file in the /tmp directory\n    // instead. We use /tmp on most systems, and /sdcard on Android.\n    // That's because Android doesn't have /tmp.\n#  if GTEST_OS_LINUX_ANDROID\n    // Note: Android applications are expected to call the framework's\n    // Context.getExternalStorageDirectory() method through JNI to get\n    // the location of the world-writable SD Card directory. However,\n    // this requires a Context handle, which cannot be retrieved\n    // globally from native code. Doing so also precludes running the\n    // code as part of a regular standalone executable, which doesn't\n    // run in a Dalvik process (e.g. when running it through 'adb shell').\n    //\n    // The location /sdcard is directly accessible from native code\n    // and is the only location (unofficially) supported by the Android\n    // team. It's generally a symlink to the real SD Card mount point\n    // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or\n    // other OEM-customized locations. Never rely on these, and always\n    // use /sdcard.\n    char name_template[] = \"/sdcard/gtest_captured_stream.XXXXXX\";\n#  else\n    char name_template[] = \"/tmp/captured_stream.XXXXXX\";\n#  endif  // GTEST_OS_LINUX_ANDROID\n    const int captured_fd = mkstemp(name_template);\n    filename_ = name_template;\n# endif  // GTEST_OS_WINDOWS\n    fflush(NULL);\n    dup2(captured_fd, fd_);\n    close(captured_fd);\n  }\n\n  ~CapturedStream() {\n    remove(filename_.c_str());\n  }\n\n  std::string GetCapturedString() {\n    if (uncaptured_fd_ != -1) {\n      // Restores the original stream.\n      fflush(NULL);\n      dup2(uncaptured_fd_, fd_);\n      close(uncaptured_fd_);\n      uncaptured_fd_ = -1;\n    }\n\n    FILE* const file = posix::FOpen(filename_.c_str(), \"r\");\n    const std::string content = ReadEntireFile(file);\n    posix::FClose(file);\n    return content;\n  }\n\n private:\n  // Reads the entire content of a file as an std::string.\n  static std::string ReadEntireFile(FILE* file);\n\n  // Returns the size (in bytes) of a file.\n  static size_t GetFileSize(FILE* file);\n\n  const int fd_;  // A stream to capture.\n  int uncaptured_fd_;\n  // Name of the temporary file holding the stderr output.\n  ::std::string filename_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream);\n};\n\n// Returns the size (in bytes) of a file.\nsize_t CapturedStream::GetFileSize(FILE* file) {\n  fseek(file, 0, SEEK_END);\n  return static_cast<size_t>(ftell(file));\n}\n\n// Reads the entire content of a file as a string.\nstd::string CapturedStream::ReadEntireFile(FILE* file) {\n  const size_t file_size = GetFileSize(file);\n  char* const buffer = new char[file_size];\n\n  size_t bytes_last_read = 0;  // # of bytes read in the last fread()\n  size_t bytes_read = 0;       // # of bytes read so far\n\n  fseek(file, 0, SEEK_SET);\n\n  // Keeps reading the file until we cannot read further or the\n  // pre-determined file size is reached.\n  do {\n    bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file);\n    bytes_read += bytes_last_read;\n  } while (bytes_last_read > 0 && bytes_read < file_size);\n\n  const std::string content(buffer, bytes_read);\n  delete[] buffer;\n\n  return content;\n}\n\n# ifdef _MSC_VER\n#  pragma warning(pop)\n# endif  // _MSC_VER\n\nstatic CapturedStream* g_captured_stderr = NULL;\nstatic CapturedStream* g_captured_stdout = NULL;\n\n// Starts capturing an output stream (stdout/stderr).\nvoid CaptureStream(int fd, const char* stream_name, CapturedStream** stream) {\n  if (*stream != NULL) {\n    GTEST_LOG_(FATAL) << \"Only one \" << stream_name\n                      << \" capturer can exist at a time.\";\n  }\n  *stream = new CapturedStream(fd);\n}\n\n// Stops capturing the output stream and returns the captured string.\nstd::string GetCapturedStream(CapturedStream** captured_stream) {\n  const std::string content = (*captured_stream)->GetCapturedString();\n\n  delete *captured_stream;\n  *captured_stream = NULL;\n\n  return content;\n}\n\n// Starts capturing stdout.\nvoid CaptureStdout() {\n  CaptureStream(kStdOutFileno, \"stdout\", &g_captured_stdout);\n}\n\n// Starts capturing stderr.\nvoid CaptureStderr() {\n  CaptureStream(kStdErrFileno, \"stderr\", &g_captured_stderr);\n}\n\n// Stops capturing stdout and returns the captured string.\nstd::string GetCapturedStdout() {\n  return GetCapturedStream(&g_captured_stdout);\n}\n\n// Stops capturing stderr and returns the captured string.\nstd::string GetCapturedStderr() {\n  return GetCapturedStream(&g_captured_stderr);\n}\n\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\n#if GTEST_HAS_DEATH_TEST\n\n// A copy of all command line arguments.  Set by InitGoogleTest().\n::std::vector<testing::internal::string> g_argvs;\n\nstatic const ::std::vector<testing::internal::string>* g_injected_test_argvs =\n                                        NULL;  // Owned.\n\nvoid SetInjectableArgvs(const ::std::vector<testing::internal::string>* argvs) {\n  if (g_injected_test_argvs != argvs)\n    delete g_injected_test_argvs;\n  g_injected_test_argvs = argvs;\n}\n\nconst ::std::vector<testing::internal::string>& GetInjectableArgvs() {\n  if (g_injected_test_argvs != NULL) {\n    return *g_injected_test_argvs;\n  }\n  return g_argvs;\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n#if GTEST_OS_WINDOWS_MOBILE\nnamespace posix {\nvoid Abort() {\n  DebugBreak();\n  TerminateProcess(GetCurrentProcess(), 1);\n}\n}  // namespace posix\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n// Returns the name of the environment variable corresponding to the\n// given flag.  For example, FlagToEnvVar(\"foo\") will return\n// \"GTEST_FOO\" in the open-source version.\nstatic std::string FlagToEnvVar(const char* flag) {\n  const std::string full_flag =\n      (Message() << GTEST_FLAG_PREFIX_ << flag).GetString();\n\n  Message env_var;\n  for (size_t i = 0; i != full_flag.length(); i++) {\n    env_var << ToUpper(full_flag.c_str()[i]);\n  }\n\n  return env_var.GetString();\n}\n\n// Parses 'str' for a 32-bit signed integer.  If successful, writes\n// the result to *value and returns true; otherwise leaves *value\n// unchanged and returns false.\nbool ParseInt32(const Message& src_text, const char* str, Int32* value) {\n  // Parses the environment variable as a decimal integer.\n  char* end = NULL;\n  const long long_value = strtol(str, &end, 10);  // NOLINT\n\n  // Has strtol() consumed all characters in the string?\n  if (*end != '\\0') {\n    // No - an invalid character was encountered.\n    Message msg;\n    msg << \"WARNING: \" << src_text\n        << \" is expected to be a 32-bit integer, but actually\"\n        << \" has value \\\"\" << str << \"\\\".\\n\";\n    printf(\"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    return false;\n  }\n\n  // Is the parsed value in the range of an Int32?\n  const Int32 result = static_cast<Int32>(long_value);\n  if (long_value == LONG_MAX || long_value == LONG_MIN ||\n      // The parsed value overflows as a long.  (strtol() returns\n      // LONG_MAX or LONG_MIN when the input overflows.)\n      result != long_value\n      // The parsed value overflows as an Int32.\n      ) {\n    Message msg;\n    msg << \"WARNING: \" << src_text\n        << \" is expected to be a 32-bit integer, but actually\"\n        << \" has value \" << str << \", which overflows.\\n\";\n    printf(\"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    return false;\n  }\n\n  *value = result;\n  return true;\n}\n\n// Reads and returns the Boolean environment variable corresponding to\n// the given flag; if it's not set, returns default_value.\n//\n// The value is considered true iff it's not \"0\".\nbool BoolFromGTestEnv(const char* flag, bool default_value) {\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const string_value = posix::GetEnv(env_var.c_str());\n  return string_value == NULL ?\n      default_value : strcmp(string_value, \"0\") != 0;\n}\n\n// Reads and returns a 32-bit integer stored in the environment\n// variable corresponding to the given flag; if it isn't set or\n// doesn't represent a valid 32-bit integer, returns default_value.\nInt32 Int32FromGTestEnv(const char* flag, Int32 default_value) {\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const string_value = posix::GetEnv(env_var.c_str());\n  if (string_value == NULL) {\n    // The environment variable is not set.\n    return default_value;\n  }\n\n  Int32 result = default_value;\n  if (!ParseInt32(Message() << \"Environment variable \" << env_var,\n                  string_value, &result)) {\n    printf(\"The default value %s is used.\\n\",\n           (Message() << default_value).GetString().c_str());\n    fflush(stdout);\n    return default_value;\n  }\n\n  return result;\n}\n\n// Reads and returns the string environment variable corresponding to\n// the given flag; if it's not set, returns default_value.\nconst char* StringFromGTestEnv(const char* flag, const char* default_value) {\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const value = posix::GetEnv(env_var.c_str());\n  return value == NULL ? default_value : value;\n}\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-printers.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Google Test - The Google C++ Testing Framework\n//\n// This file implements a universal value printer that can print a\n// value of any type T:\n//\n//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);\n//\n// It uses the << operator when possible, and prints the bytes in the\n// object otherwise.  A user can override its behavior for a class\n// type Foo by defining either operator<<(::std::ostream&, const Foo&)\n// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that\n// defines Foo.\n\n#include \"gtest/gtest-printers.h\"\n#include <ctype.h>\n#include <stdio.h>\n#include <ostream>  // NOLINT\n#include <string>\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\nnamespace {\n\nusing ::std::ostream;\n\n// Prints a segment of bytes in the given object.\nvoid PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start,\n                                size_t count, ostream* os) {\n  char text[5] = \"\";\n  for (size_t i = 0; i != count; i++) {\n    const size_t j = start + i;\n    if (i != 0) {\n      // Organizes the bytes into groups of 2 for easy parsing by\n      // human.\n      if ((j % 2) == 0)\n        *os << ' ';\n      else\n        *os << '-';\n    }\n    GTEST_SNPRINTF_(text, sizeof(text), \"%02X\", obj_bytes[j]);\n    *os << text;\n  }\n}\n\n// Prints the bytes in the given value to the given ostream.\nvoid PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count,\n                              ostream* os) {\n  // Tells the user how big the object is.\n  *os << count << \"-byte object <\";\n\n  const size_t kThreshold = 132;\n  const size_t kChunkSize = 64;\n  // If the object size is bigger than kThreshold, we'll have to omit\n  // some details by printing only the first and the last kChunkSize\n  // bytes.\n  // TODO(wan): let the user control the threshold using a flag.\n  if (count < kThreshold) {\n    PrintByteSegmentInObjectTo(obj_bytes, 0, count, os);\n  } else {\n    PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os);\n    *os << \" ... \";\n    // Rounds up to 2-byte boundary.\n    const size_t resume_pos = (count - kChunkSize + 1)/2*2;\n    PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os);\n  }\n  *os << \">\";\n}\n\n}  // namespace\n\nnamespace internal2 {\n\n// Delegates to PrintBytesInObjectToImpl() to print the bytes in the\n// given object.  The delegation simplifies the implementation, which\n// uses the << operator and thus is easier done outside of the\n// ::testing::internal namespace, which contains a << operator that\n// sometimes conflicts with the one in STL.\nvoid PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count,\n                          ostream* os) {\n  PrintBytesInObjectToImpl(obj_bytes, count, os);\n}\n\n}  // namespace internal2\n\nnamespace internal {\n\n// Depending on the value of a char (or wchar_t), we print it in one\n// of three formats:\n//   - as is if it's a printable ASCII (e.g. 'a', '2', ' '),\n//   - as a hexidecimal escape sequence (e.g. '\\x7F'), or\n//   - as a special escape sequence (e.g. '\\r', '\\n').\nenum CharFormat {\n  kAsIs,\n  kHexEscape,\n  kSpecialEscape\n};\n\n// Returns true if c is a printable ASCII character.  We test the\n// value of c directly instead of calling isprint(), which is buggy on\n// Windows Mobile.\ninline bool IsPrintableAscii(wchar_t c) {\n  return 0x20 <= c && c <= 0x7E;\n}\n\n// Prints a wide or narrow char c as a character literal without the\n// quotes, escaping it when necessary; returns how c was formatted.\n// The template argument UnsignedChar is the unsigned version of Char,\n// which is the type of c.\ntemplate <typename UnsignedChar, typename Char>\nstatic CharFormat PrintAsCharLiteralTo(Char c, ostream* os) {\n  switch (static_cast<wchar_t>(c)) {\n    case L'\\0':\n      *os << \"\\\\0\";\n      break;\n    case L'\\'':\n      *os << \"\\\\'\";\n      break;\n    case L'\\\\':\n      *os << \"\\\\\\\\\";\n      break;\n    case L'\\a':\n      *os << \"\\\\a\";\n      break;\n    case L'\\b':\n      *os << \"\\\\b\";\n      break;\n    case L'\\f':\n      *os << \"\\\\f\";\n      break;\n    case L'\\n':\n      *os << \"\\\\n\";\n      break;\n    case L'\\r':\n      *os << \"\\\\r\";\n      break;\n    case L'\\t':\n      *os << \"\\\\t\";\n      break;\n    case L'\\v':\n      *os << \"\\\\v\";\n      break;\n    default:\n      if (IsPrintableAscii(c)) {\n        *os << static_cast<char>(c);\n        return kAsIs;\n      } else {\n        *os << \"\\\\x\" + String::FormatHexInt(static_cast<UnsignedChar>(c));\n        return kHexEscape;\n      }\n  }\n  return kSpecialEscape;\n}\n\n// Prints a wchar_t c as if it's part of a string literal, escaping it when\n// necessary; returns how c was formatted.\nstatic CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) {\n  switch (c) {\n    case L'\\'':\n      *os << \"'\";\n      return kAsIs;\n    case L'\"':\n      *os << \"\\\\\\\"\";\n      return kSpecialEscape;\n    default:\n      return PrintAsCharLiteralTo<wchar_t>(c, os);\n  }\n}\n\n// Prints a char c as if it's part of a string literal, escaping it when\n// necessary; returns how c was formatted.\nstatic CharFormat PrintAsStringLiteralTo(char c, ostream* os) {\n  return PrintAsStringLiteralTo(\n      static_cast<wchar_t>(static_cast<unsigned char>(c)), os);\n}\n\n// Prints a wide or narrow character c and its code.  '\\0' is printed\n// as \"'\\\\0'\", other unprintable characters are also properly escaped\n// using the standard C++ escape sequence.  The template argument\n// UnsignedChar is the unsigned version of Char, which is the type of c.\ntemplate <typename UnsignedChar, typename Char>\nvoid PrintCharAndCodeTo(Char c, ostream* os) {\n  // First, print c as a literal in the most readable form we can find.\n  *os << ((sizeof(c) > 1) ? \"L'\" : \"'\");\n  const CharFormat format = PrintAsCharLiteralTo<UnsignedChar>(c, os);\n  *os << \"'\";\n\n  // To aid user debugging, we also print c's code in decimal, unless\n  // it's 0 (in which case c was printed as '\\\\0', making the code\n  // obvious).\n  if (c == 0)\n    return;\n  *os << \" (\" << static_cast<int>(c);\n\n  // For more convenience, we print c's code again in hexidecimal,\n  // unless c was already printed in the form '\\x##' or the code is in\n  // [1, 9].\n  if (format == kHexEscape || (1 <= c && c <= 9)) {\n    // Do nothing.\n  } else {\n    *os << \", 0x\" << String::FormatHexInt(static_cast<UnsignedChar>(c));\n  }\n  *os << \")\";\n}\n\nvoid PrintTo(unsigned char c, ::std::ostream* os) {\n  PrintCharAndCodeTo<unsigned char>(c, os);\n}\nvoid PrintTo(signed char c, ::std::ostream* os) {\n  PrintCharAndCodeTo<unsigned char>(c, os);\n}\n\n// Prints a wchar_t as a symbol if it is printable or as its internal\n// code otherwise and also as its code.  L'\\0' is printed as \"L'\\\\0'\".\nvoid PrintTo(wchar_t wc, ostream* os) {\n  PrintCharAndCodeTo<wchar_t>(wc, os);\n}\n\n// Prints the given array of characters to the ostream.  CharType must be either\n// char or wchar_t.\n// The array starts at begin, the length is len, it may include '\\0' characters\n// and may not be NUL-terminated.\ntemplate <typename CharType>\nstatic void PrintCharsAsStringTo(\n    const CharType* begin, size_t len, ostream* os) {\n  const char* const kQuoteBegin = sizeof(CharType) == 1 ? \"\\\"\" : \"L\\\"\";\n  *os << kQuoteBegin;\n  bool is_previous_hex = false;\n  for (size_t index = 0; index < len; ++index) {\n    const CharType cur = begin[index];\n    if (is_previous_hex && IsXDigit(cur)) {\n      // Previous character is of '\\x..' form and this character can be\n      // interpreted as another hexadecimal digit in its number. Break string to\n      // disambiguate.\n      *os << \"\\\" \" << kQuoteBegin;\n    }\n    is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape;\n  }\n  *os << \"\\\"\";\n}\n\n// Prints a (const) char/wchar_t array of 'len' elements, starting at address\n// 'begin'.  CharType must be either char or wchar_t.\ntemplate <typename CharType>\nstatic void UniversalPrintCharArray(\n    const CharType* begin, size_t len, ostream* os) {\n  // The code\n  //   const char kFoo[] = \"foo\";\n  // generates an array of 4, not 3, elements, with the last one being '\\0'.\n  //\n  // Therefore when printing a char array, we don't print the last element if\n  // it's '\\0', such that the output matches the string literal as it's\n  // written in the source code.\n  if (len > 0 && begin[len - 1] == '\\0') {\n    PrintCharsAsStringTo(begin, len - 1, os);\n    return;\n  }\n\n  // If, however, the last element in the array is not '\\0', e.g.\n  //    const char kFoo[] = { 'f', 'o', 'o' };\n  // we must print the entire array.  We also print a message to indicate\n  // that the array is not NUL-terminated.\n  PrintCharsAsStringTo(begin, len, os);\n  *os << \" (no terminating NUL)\";\n}\n\n// Prints a (const) char array of 'len' elements, starting at address 'begin'.\nvoid UniversalPrintArray(const char* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\n// Prints a (const) wchar_t array of 'len' elements, starting at address\n// 'begin'.\nvoid UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\n// Prints the given C string to the ostream.\nvoid PrintTo(const char* s, ostream* os) {\n  if (s == NULL) {\n    *os << \"NULL\";\n  } else {\n    *os << ImplicitCast_<const void*>(s) << \" pointing to \";\n    PrintCharsAsStringTo(s, strlen(s), os);\n  }\n}\n\n// MSVC compiler can be configured to define whar_t as a typedef\n// of unsigned short. Defining an overload for const wchar_t* in that case\n// would cause pointers to unsigned shorts be printed as wide strings,\n// possibly accessing more memory than intended and causing invalid\n// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when\n// wchar_t is implemented as a native type.\n#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)\n// Prints the given wide C string to the ostream.\nvoid PrintTo(const wchar_t* s, ostream* os) {\n  if (s == NULL) {\n    *os << \"NULL\";\n  } else {\n    *os << ImplicitCast_<const void*>(s) << \" pointing to \";\n    PrintCharsAsStringTo(s, wcslen(s), os);\n  }\n}\n#endif  // wchar_t is native\n\n// Prints a ::string object.\n#if GTEST_HAS_GLOBAL_STRING\nvoid PrintStringTo(const ::string& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n#endif  // GTEST_HAS_GLOBAL_STRING\n\nvoid PrintStringTo(const ::std::string& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n\n// Prints a ::wstring object.\n#if GTEST_HAS_GLOBAL_WSTRING\nvoid PrintWideStringTo(const ::wstring& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n#if GTEST_HAS_STD_WSTRING\nvoid PrintWideStringTo(const ::std::wstring& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n}  // namespace internal\n\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-test-part.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: mheule@google.com (Markus Heule)\n//\n// The Google C++ Testing Framework (Google Test)\n\n#include \"gtest/gtest-test-part.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\n\nusing internal::GetUnitTestImpl;\n\n// Gets the summary of the failure message by omitting the stack trace\n// in it.\nstd::string TestPartResult::ExtractSummary(const char* message) {\n  const char* const stack_trace = strstr(message, internal::kStackTraceMarker);\n  return stack_trace == NULL ? message :\n      std::string(message, stack_trace);\n}\n\n// Prints a TestPartResult object.\nstd::ostream& operator<<(std::ostream& os, const TestPartResult& result) {\n  return os\n      << result.file_name() << \":\" << result.line_number() << \": \"\n      << (result.type() == TestPartResult::kSuccess ? \"Success\" :\n          result.type() == TestPartResult::kFatalFailure ? \"Fatal failure\" :\n          \"Non-fatal failure\") << \":\\n\"\n      << result.message() << std::endl;\n}\n\n// Appends a TestPartResult to the array.\nvoid TestPartResultArray::Append(const TestPartResult& result) {\n  array_.push_back(result);\n}\n\n// Returns the TestPartResult at the given index (0-based).\nconst TestPartResult& TestPartResultArray::GetTestPartResult(int index) const {\n  if (index < 0 || index >= size()) {\n    printf(\"\\nInvalid index (%d) into TestPartResultArray.\\n\", index);\n    internal::posix::Abort();\n  }\n\n  return array_[index];\n}\n\n// Returns the number of TestPartResult objects in the array.\nint TestPartResultArray::size() const {\n  return static_cast<int>(array_.size());\n}\n\nnamespace internal {\n\nHasNewFatalFailureHelper::HasNewFatalFailureHelper()\n    : has_new_fatal_failure_(false),\n      original_reporter_(GetUnitTestImpl()->\n                         GetTestPartResultReporterForCurrentThread()) {\n  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this);\n}\n\nHasNewFatalFailureHelper::~HasNewFatalFailureHelper() {\n  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(\n      original_reporter_);\n}\n\nvoid HasNewFatalFailureHelper::ReportTestPartResult(\n    const TestPartResult& result) {\n  if (result.fatally_failed())\n    has_new_fatal_failure_ = true;\n  original_reporter_->ReportTestPartResult(result);\n}\n\n}  // namespace internal\n\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest-typed-test.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest-typed-test.h\"\n#include \"gtest/gtest.h\"\n\nnamespace testing {\nnamespace internal {\n\n#if GTEST_HAS_TYPED_TEST_P\n\n// Skips to the first non-space char in str. Returns an empty string if str\n// contains only whitespace characters.\nstatic const char* SkipSpaces(const char* str) {\n  while (IsSpace(*str))\n    str++;\n  return str;\n}\n\n// Verifies that registered_tests match the test names in\n// defined_test_names_; returns registered_tests if successful, or\n// aborts the program otherwise.\nconst char* TypedTestCasePState::VerifyRegisteredTestNames(\n    const char* file, int line, const char* registered_tests) {\n  typedef ::std::set<const char*>::const_iterator DefinedTestIter;\n  registered_ = true;\n\n  // Skip initial whitespace in registered_tests since some\n  // preprocessors prefix stringizied literals with whitespace.\n  registered_tests = SkipSpaces(registered_tests);\n\n  Message errors;\n  ::std::set<std::string> tests;\n  for (const char* names = registered_tests; names != NULL;\n       names = SkipComma(names)) {\n    const std::string name = GetPrefixUntilComma(names);\n    if (tests.count(name) != 0) {\n      errors << \"Test \" << name << \" is listed more than once.\\n\";\n      continue;\n    }\n\n    bool found = false;\n    for (DefinedTestIter it = defined_test_names_.begin();\n         it != defined_test_names_.end();\n         ++it) {\n      if (name == *it) {\n        found = true;\n        break;\n      }\n    }\n\n    if (found) {\n      tests.insert(name);\n    } else {\n      errors << \"No test named \" << name\n             << \" can be found in this test case.\\n\";\n    }\n  }\n\n  for (DefinedTestIter it = defined_test_names_.begin();\n       it != defined_test_names_.end();\n       ++it) {\n    if (tests.count(*it) == 0) {\n      errors << \"You forgot to list test \" << *it << \".\\n\";\n    }\n  }\n\n  const std::string& errors_str = errors.GetString();\n  if (errors_str != \"\") {\n    fprintf(stderr, \"%s %s\", FormatFileLocation(file, line).c_str(),\n            errors_str.c_str());\n    fflush(stderr);\n    posix::Abort();\n  }\n\n  return registered_tests;\n}\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// The Google C++ Testing Framework (Google Test)\n\n#include \"gtest/gtest.h\"\n#include \"gtest/gtest-spi.h\"\n\n#include <ctype.h>\n#include <math.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n#include <wchar.h>\n#include <wctype.h>\n\n#include <algorithm>\n#include <iomanip>\n#include <limits>\n#include <ostream>  // NOLINT\n#include <sstream>\n#include <vector>\n\n#if GTEST_OS_LINUX\n\n// TODO(kenton@google.com): Use autoconf to detect availability of\n// gettimeofday().\n# define GTEST_HAS_GETTIMEOFDAY_ 1\n\n# include <fcntl.h>  // NOLINT\n# include <limits.h>  // NOLINT\n# include <sched.h>  // NOLINT\n// Declares vsnprintf().  This header is not available on Windows.\n# include <strings.h>  // NOLINT\n# include <sys/mman.h>  // NOLINT\n# include <sys/time.h>  // NOLINT\n# include <unistd.h>  // NOLINT\n# include <string>\n\n#elif GTEST_OS_SYMBIAN\n# define GTEST_HAS_GETTIMEOFDAY_ 1\n# include <sys/time.h>  // NOLINT\n\n#elif GTEST_OS_ZOS\n# define GTEST_HAS_GETTIMEOFDAY_ 1\n# include <sys/time.h>  // NOLINT\n\n// On z/OS we additionally need strings.h for strcasecmp.\n# include <strings.h>  // NOLINT\n\n#elif GTEST_OS_WINDOWS_MOBILE  // We are on Windows CE.\n\n# include <windows.h>  // NOLINT\n\n#elif GTEST_OS_WINDOWS  // We are on Windows proper.\n\n# include <io.h>  // NOLINT\n# include <sys/timeb.h>  // NOLINT\n# include <sys/types.h>  // NOLINT\n# include <sys/stat.h>  // NOLINT\n\n# if GTEST_OS_WINDOWS_MINGW\n// MinGW has gettimeofday() but not _ftime64().\n// TODO(kenton@google.com): Use autoconf to detect availability of\n//   gettimeofday().\n// TODO(kenton@google.com): There are other ways to get the time on\n//   Windows, like GetTickCount() or GetSystemTimeAsFileTime().  MinGW\n//   supports these.  consider using them instead.\n#  define GTEST_HAS_GETTIMEOFDAY_ 1\n#  include <sys/time.h>  // NOLINT\n# endif  // GTEST_OS_WINDOWS_MINGW\n\n// cpplint thinks that the header is already included, so we want to\n// silence it.\n# include <windows.h>  // NOLINT\n\n#else\n\n// Assume other platforms have gettimeofday().\n// TODO(kenton@google.com): Use autoconf to detect availability of\n//   gettimeofday().\n# define GTEST_HAS_GETTIMEOFDAY_ 1\n\n// cpplint thinks that the header is already included, so we want to\n// silence it.\n# include <sys/time.h>  // NOLINT\n# include <unistd.h>  // NOLINT\n\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_HAS_EXCEPTIONS\n# include <stdexcept>\n#endif\n\n#if GTEST_CAN_STREAM_RESULTS_\n# include <arpa/inet.h>  // NOLINT\n# include <netdb.h>  // NOLINT\n#endif\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\n#if GTEST_OS_WINDOWS\n# define vsnprintf _vsnprintf\n#endif  // GTEST_OS_WINDOWS\n\nnamespace testing {\n\nusing internal::CountIf;\nusing internal::ForEach;\nusing internal::GetElementOr;\nusing internal::Shuffle;\n\n// Constants.\n\n// A test whose test case name or test name matches this filter is\n// disabled and not run.\nstatic const char kDisableTestFilter[] = \"DISABLED_*:*/DISABLED_*\";\n\n// A test case whose name matches this filter is considered a death\n// test case and will be run before test cases whose name doesn't\n// match this filter.\nstatic const char kDeathTestCaseFilter[] = \"*DeathTest:*DeathTest/*\";\n\n// A test filter that matches everything.\nstatic const char kUniversalFilter[] = \"*\";\n\n// The default output file for XML output.\nstatic const char kDefaultOutputFile[] = \"test_detail.xml\";\n\n// The environment variable name for the test shard index.\nstatic const char kTestShardIndex[] = \"GTEST_SHARD_INDEX\";\n// The environment variable name for the total number of test shards.\nstatic const char kTestTotalShards[] = \"GTEST_TOTAL_SHARDS\";\n// The environment variable name for the test shard status file.\nstatic const char kTestShardStatusFile[] = \"GTEST_SHARD_STATUS_FILE\";\n\nnamespace internal {\n\n// The text used in failure messages to indicate the start of the\n// stack trace.\nconst char kStackTraceMarker[] = \"\\nStack trace:\\n\";\n\n// g_help_flag is true iff the --help flag or an equivalent form is\n// specified on the command line.\nbool g_help_flag = false;\n\n}  // namespace internal\n\nGTEST_DEFINE_bool_(\n    also_run_disabled_tests,\n    internal::BoolFromGTestEnv(\"also_run_disabled_tests\", false),\n    \"Run disabled tests too, in addition to the tests normally being run.\");\n\nGTEST_DEFINE_bool_(\n    break_on_failure,\n    internal::BoolFromGTestEnv(\"break_on_failure\", false),\n    \"True iff a failed assertion should be a debugger break-point.\");\n\nGTEST_DEFINE_bool_(\n    catch_exceptions,\n    internal::BoolFromGTestEnv(\"catch_exceptions\", true),\n    \"True iff \" GTEST_NAME_\n    \" should catch exceptions and treat them as test failures.\");\n\nGTEST_DEFINE_string_(\n    color,\n    internal::StringFromGTestEnv(\"color\", \"auto\"),\n    \"Whether to use colors in the output.  Valid values: yes, no, \"\n    \"and auto.  'auto' means to use colors if the output is \"\n    \"being sent to a terminal and the TERM environment variable \"\n    \"is set to a terminal type that supports colors.\");\n\nGTEST_DEFINE_string_(\n    filter,\n    internal::StringFromGTestEnv(\"filter\", kUniversalFilter),\n    \"A colon-separated list of glob (not regex) patterns \"\n    \"for filtering the tests to run, optionally followed by a \"\n    \"'-' and a : separated list of negative patterns (tests to \"\n    \"exclude).  A test is run if it matches one of the positive \"\n    \"patterns and does not match any of the negative patterns.\");\n\nGTEST_DEFINE_bool_(list_tests, false,\n                   \"List all tests without running them.\");\n\nGTEST_DEFINE_string_(\n    output,\n    internal::StringFromGTestEnv(\"output\", \"\"),\n    \"A format (currently must be \\\"xml\\\"), optionally followed \"\n    \"by a colon and an output file name or directory. A directory \"\n    \"is indicated by a trailing pathname separator. \"\n    \"Examples: \\\"xml:filename.xml\\\", \\\"xml::directoryname/\\\". \"\n    \"If a directory is specified, output files will be created \"\n    \"within that directory, with file-names based on the test \"\n    \"executable's name and, if necessary, made unique by adding \"\n    \"digits.\");\n\nGTEST_DEFINE_bool_(\n    print_time,\n    internal::BoolFromGTestEnv(\"print_time\", true),\n    \"True iff \" GTEST_NAME_\n    \" should display elapsed time in text output.\");\n\nGTEST_DEFINE_int32_(\n    random_seed,\n    internal::Int32FromGTestEnv(\"random_seed\", 0),\n    \"Random number seed to use when shuffling test orders.  Must be in range \"\n    \"[1, 99999], or 0 to use a seed based on the current time.\");\n\nGTEST_DEFINE_int32_(\n    repeat,\n    internal::Int32FromGTestEnv(\"repeat\", 1),\n    \"How many times to repeat each test.  Specify a negative number \"\n    \"for repeating forever.  Useful for shaking out flaky tests.\");\n\nGTEST_DEFINE_bool_(\n    show_internal_stack_frames, false,\n    \"True iff \" GTEST_NAME_ \" should include internal stack frames when \"\n    \"printing test failure stack traces.\");\n\nGTEST_DEFINE_bool_(\n    shuffle,\n    internal::BoolFromGTestEnv(\"shuffle\", false),\n    \"True iff \" GTEST_NAME_\n    \" should randomize tests' order on every run.\");\n\nGTEST_DEFINE_int32_(\n    stack_trace_depth,\n    internal::Int32FromGTestEnv(\"stack_trace_depth\", kMaxStackTraceDepth),\n    \"The maximum number of stack frames to print when an \"\n    \"assertion fails.  The valid range is 0 through 100, inclusive.\");\n\nGTEST_DEFINE_string_(\n    stream_result_to,\n    internal::StringFromGTestEnv(\"stream_result_to\", \"\"),\n    \"This flag specifies the host name and the port number on which to stream \"\n    \"test results. Example: \\\"localhost:555\\\". The flag is effective only on \"\n    \"Linux.\");\n\nGTEST_DEFINE_bool_(\n    throw_on_failure,\n    internal::BoolFromGTestEnv(\"throw_on_failure\", false),\n    \"When this flag is specified, a failed assertion will throw an exception \"\n    \"if exceptions are enabled or exit the program with a non-zero code \"\n    \"otherwise.\");\n\nnamespace internal {\n\n// Generates a random number from [0, range), using a Linear\n// Congruential Generator (LCG).  Crashes if 'range' is 0 or greater\n// than kMaxRange.\nUInt32 Random::Generate(UInt32 range) {\n  // These constants are the same as are used in glibc's rand(3).\n  state_ = (1103515245U*state_ + 12345U) % kMaxRange;\n\n  GTEST_CHECK_(range > 0)\n      << \"Cannot generate a number in the range [0, 0).\";\n  GTEST_CHECK_(range <= kMaxRange)\n      << \"Generation of a number in [0, \" << range << \") was requested, \"\n      << \"but this can only generate numbers in [0, \" << kMaxRange << \").\";\n\n  // Converting via modulus introduces a bit of downward bias, but\n  // it's simple, and a linear congruential generator isn't too good\n  // to begin with.\n  return state_ % range;\n}\n\n// GTestIsInitialized() returns true iff the user has initialized\n// Google Test.  Useful for catching the user mistake of not initializing\n// Google Test before calling RUN_ALL_TESTS().\n//\n// A user must call testing::InitGoogleTest() to initialize Google\n// Test.  g_init_gtest_count is set to the number of times\n// InitGoogleTest() has been called.  We don't protect this variable\n// under a mutex as it is only accessed in the main thread.\nGTEST_API_ int g_init_gtest_count = 0;\nstatic bool GTestIsInitialized() { return g_init_gtest_count != 0; }\n\n// Iterates over a vector of TestCases, keeping a running sum of the\n// results of calling a given int-returning method on each.\n// Returns the sum.\nstatic int SumOverTestCaseList(const std::vector<TestCase*>& case_list,\n                               int (TestCase::*method)() const) {\n  int sum = 0;\n  for (size_t i = 0; i < case_list.size(); i++) {\n    sum += (case_list[i]->*method)();\n  }\n  return sum;\n}\n\n// Returns true iff the test case passed.\nstatic bool TestCasePassed(const TestCase* test_case) {\n  return test_case->should_run() && test_case->Passed();\n}\n\n// Returns true iff the test case failed.\nstatic bool TestCaseFailed(const TestCase* test_case) {\n  return test_case->should_run() && test_case->Failed();\n}\n\n// Returns true iff test_case contains at least one test that should\n// run.\nstatic bool ShouldRunTestCase(const TestCase* test_case) {\n  return test_case->should_run();\n}\n\n// AssertHelper constructor.\nAssertHelper::AssertHelper(TestPartResult::Type type,\n                           const char* file,\n                           int line,\n                           const char* message)\n    : data_(new AssertHelperData(type, file, line, message)) {\n}\n\nAssertHelper::~AssertHelper() {\n  delete data_;\n}\n\n// Message assignment, for assertion streaming support.\nvoid AssertHelper::operator=(const Message& message) const {\n  UnitTest::GetInstance()->\n    AddTestPartResult(data_->type, data_->file, data_->line,\n                      AppendUserMessage(data_->message, message),\n                      UnitTest::GetInstance()->impl()\n                      ->CurrentOsStackTraceExceptTop(1)\n                      // Skips the stack frame for this function itself.\n                      );  // NOLINT\n}\n\n// Mutex for linked pointers.\nGTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex);\n\n// Application pathname gotten in InitGoogleTest.\nstd::string g_executable_path;\n\n// Returns the current application's name, removing directory path if that\n// is present.\nFilePath GetCurrentExecutableName() {\n  FilePath result;\n\n#if GTEST_OS_WINDOWS\n  result.Set(FilePath(g_executable_path).RemoveExtension(\"exe\"));\n#else\n  result.Set(FilePath(g_executable_path));\n#endif  // GTEST_OS_WINDOWS\n\n  return result.RemoveDirectoryName();\n}\n\n// Functions for processing the gtest_output flag.\n\n// Returns the output format, or \"\" for normal printed output.\nstd::string UnitTestOptions::GetOutputFormat() {\n  const char* const gtest_output_flag = GTEST_FLAG(output).c_str();\n  if (gtest_output_flag == NULL) return std::string(\"\");\n\n  const char* const colon = strchr(gtest_output_flag, ':');\n  return (colon == NULL) ?\n      std::string(gtest_output_flag) :\n      std::string(gtest_output_flag, colon - gtest_output_flag);\n}\n\n// Returns the name of the requested output file, or the default if none\n// was explicitly specified.\nstd::string UnitTestOptions::GetAbsolutePathToOutputFile() {\n  const char* const gtest_output_flag = GTEST_FLAG(output).c_str();\n  if (gtest_output_flag == NULL)\n    return \"\";\n\n  const char* const colon = strchr(gtest_output_flag, ':');\n  if (colon == NULL)\n    return internal::FilePath::ConcatPaths(\n        internal::FilePath(\n            UnitTest::GetInstance()->original_working_dir()),\n        internal::FilePath(kDefaultOutputFile)).string();\n\n  internal::FilePath output_name(colon + 1);\n  if (!output_name.IsAbsolutePath())\n    // TODO(wan@google.com): on Windows \\some\\path is not an absolute\n    // path (as its meaning depends on the current drive), yet the\n    // following logic for turning it into an absolute path is wrong.\n    // Fix it.\n    output_name = internal::FilePath::ConcatPaths(\n        internal::FilePath(UnitTest::GetInstance()->original_working_dir()),\n        internal::FilePath(colon + 1));\n\n  if (!output_name.IsDirectory())\n    return output_name.string();\n\n  internal::FilePath result(internal::FilePath::GenerateUniqueFileName(\n      output_name, internal::GetCurrentExecutableName(),\n      GetOutputFormat().c_str()));\n  return result.string();\n}\n\n// Returns true iff the wildcard pattern matches the string.  The\n// first ':' or '\\0' character in pattern marks the end of it.\n//\n// This recursive algorithm isn't very efficient, but is clear and\n// works well enough for matching test names, which are short.\nbool UnitTestOptions::PatternMatchesString(const char *pattern,\n                                           const char *str) {\n  switch (*pattern) {\n    case '\\0':\n    case ':':  // Either ':' or '\\0' marks the end of the pattern.\n      return *str == '\\0';\n    case '?':  // Matches any single character.\n      return *str != '\\0' && PatternMatchesString(pattern + 1, str + 1);\n    case '*':  // Matches any string (possibly empty) of characters.\n      return (*str != '\\0' && PatternMatchesString(pattern, str + 1)) ||\n          PatternMatchesString(pattern + 1, str);\n    default:  // Non-special character.  Matches itself.\n      return *pattern == *str &&\n          PatternMatchesString(pattern + 1, str + 1);\n  }\n}\n\nbool UnitTestOptions::MatchesFilter(\n    const std::string& name, const char* filter) {\n  const char *cur_pattern = filter;\n  for (;;) {\n    if (PatternMatchesString(cur_pattern, name.c_str())) {\n      return true;\n    }\n\n    // Finds the next pattern in the filter.\n    cur_pattern = strchr(cur_pattern, ':');\n\n    // Returns if no more pattern can be found.\n    if (cur_pattern == NULL) {\n      return false;\n    }\n\n    // Skips the pattern separater (the ':' character).\n    cur_pattern++;\n  }\n}\n\n// Returns true iff the user-specified filter matches the test case\n// name and the test name.\nbool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name,\n                                        const std::string &test_name) {\n  const std::string& full_name = test_case_name + \".\" + test_name.c_str();\n\n  // Split --gtest_filter at '-', if there is one, to separate into\n  // positive filter and negative filter portions\n  const char* const p = GTEST_FLAG(filter).c_str();\n  const char* const dash = strchr(p, '-');\n  std::string positive;\n  std::string negative;\n  if (dash == NULL) {\n    positive = GTEST_FLAG(filter).c_str();  // Whole string is a positive filter\n    negative = \"\";\n  } else {\n    positive = std::string(p, dash);   // Everything up to the dash\n    negative = std::string(dash + 1);  // Everything after the dash\n    if (positive.empty()) {\n      // Treat '-test1' as the same as '*-test1'\n      positive = kUniversalFilter;\n    }\n  }\n\n  // A filter is a colon-separated list of patterns.  It matches a\n  // test if any pattern in it matches the test.\n  return (MatchesFilter(full_name, positive.c_str()) &&\n          !MatchesFilter(full_name, negative.c_str()));\n}\n\n#if GTEST_HAS_SEH\n// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the\n// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.\n// This function is useful as an __except condition.\nint UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) {\n  // Google Test should handle a SEH exception if:\n  //   1. the user wants it to, AND\n  //   2. this is not a breakpoint exception, AND\n  //   3. this is not a C++ exception (VC++ implements them via SEH,\n  //      apparently).\n  //\n  // SEH exception code for C++ exceptions.\n  // (see http://support.microsoft.com/kb/185294 for more information).\n  const DWORD kCxxExceptionCode = 0xe06d7363;\n\n  bool should_handle = true;\n\n  if (!GTEST_FLAG(catch_exceptions))\n    should_handle = false;\n  else if (exception_code == EXCEPTION_BREAKPOINT)\n    should_handle = false;\n  else if (exception_code == kCxxExceptionCode)\n    should_handle = false;\n\n  return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;\n}\n#endif  // GTEST_HAS_SEH\n\n}  // namespace internal\n\n// The c'tor sets this object as the test part result reporter used by\n// Google Test.  The 'result' parameter specifies where to report the\n// results. Intercepts only failures from the current thread.\nScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(\n    TestPartResultArray* result)\n    : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD),\n      result_(result) {\n  Init();\n}\n\n// The c'tor sets this object as the test part result reporter used by\n// Google Test.  The 'result' parameter specifies where to report the\n// results.\nScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(\n    InterceptMode intercept_mode, TestPartResultArray* result)\n    : intercept_mode_(intercept_mode),\n      result_(result) {\n  Init();\n}\n\nvoid ScopedFakeTestPartResultReporter::Init() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {\n    old_reporter_ = impl->GetGlobalTestPartResultReporter();\n    impl->SetGlobalTestPartResultReporter(this);\n  } else {\n    old_reporter_ = impl->GetTestPartResultReporterForCurrentThread();\n    impl->SetTestPartResultReporterForCurrentThread(this);\n  }\n}\n\n// The d'tor restores the test part result reporter used by Google Test\n// before.\nScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {\n    impl->SetGlobalTestPartResultReporter(old_reporter_);\n  } else {\n    impl->SetTestPartResultReporterForCurrentThread(old_reporter_);\n  }\n}\n\n// Increments the test part result count and remembers the result.\n// This method is from the TestPartResultReporterInterface interface.\nvoid ScopedFakeTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  result_->Append(result);\n}\n\nnamespace internal {\n\n// Returns the type ID of ::testing::Test.  We should always call this\n// instead of GetTypeId< ::testing::Test>() to get the type ID of\n// testing::Test.  This is to work around a suspected linker bug when\n// using Google Test as a framework on Mac OS X.  The bug causes\n// GetTypeId< ::testing::Test>() to return different values depending\n// on whether the call is from the Google Test framework itself or\n// from user test code.  GetTestTypeId() is guaranteed to always\n// return the same value, as it always calls GetTypeId<>() from the\n// gtest.cc, which is within the Google Test framework.\nTypeId GetTestTypeId() {\n  return GetTypeId<Test>();\n}\n\n// The value of GetTestTypeId() as seen from within the Google Test\n// library.  This is solely for testing GetTestTypeId().\nextern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId();\n\n// This predicate-formatter checks that 'results' contains a test part\n// failure of the given type and that the failure message contains the\n// given substring.\nAssertionResult HasOneFailure(const char* /* results_expr */,\n                              const char* /* type_expr */,\n                              const char* /* substr_expr */,\n                              const TestPartResultArray& results,\n                              TestPartResult::Type type,\n                              const string& substr) {\n  const std::string expected(type == TestPartResult::kFatalFailure ?\n                        \"1 fatal failure\" :\n                        \"1 non-fatal failure\");\n  Message msg;\n  if (results.size() != 1) {\n    msg << \"Expected: \" << expected << \"\\n\"\n        << \"  Actual: \" << results.size() << \" failures\";\n    for (int i = 0; i < results.size(); i++) {\n      msg << \"\\n\" << results.GetTestPartResult(i);\n    }\n    return AssertionFailure() << msg;\n  }\n\n  const TestPartResult& r = results.GetTestPartResult(0);\n  if (r.type() != type) {\n    return AssertionFailure() << \"Expected: \" << expected << \"\\n\"\n                              << \"  Actual:\\n\"\n                              << r;\n  }\n\n  if (strstr(r.message(), substr.c_str()) == NULL) {\n    return AssertionFailure() << \"Expected: \" << expected << \" containing \\\"\"\n                              << substr << \"\\\"\\n\"\n                              << \"  Actual:\\n\"\n                              << r;\n  }\n\n  return AssertionSuccess();\n}\n\n// The constructor of SingleFailureChecker remembers where to look up\n// test part results, what type of failure we expect, and what\n// substring the failure message should contain.\nSingleFailureChecker:: SingleFailureChecker(\n    const TestPartResultArray* results,\n    TestPartResult::Type type,\n    const string& substr)\n    : results_(results),\n      type_(type),\n      substr_(substr) {}\n\n// The destructor of SingleFailureChecker verifies that the given\n// TestPartResultArray contains exactly one failure that has the given\n// type and contains the given substring.  If that's not the case, a\n// non-fatal failure will be generated.\nSingleFailureChecker::~SingleFailureChecker() {\n  EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_);\n}\n\nDefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter(\n    UnitTestImpl* unit_test) : unit_test_(unit_test) {}\n\nvoid DefaultGlobalTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  unit_test_->current_test_result()->AddTestPartResult(result);\n  unit_test_->listeners()->repeater()->OnTestPartResult(result);\n}\n\nDefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter(\n    UnitTestImpl* unit_test) : unit_test_(unit_test) {}\n\nvoid DefaultPerThreadTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result);\n}\n\n// Returns the global test part result reporter.\nTestPartResultReporterInterface*\nUnitTestImpl::GetGlobalTestPartResultReporter() {\n  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);\n  return global_test_part_result_repoter_;\n}\n\n// Sets the global test part result reporter.\nvoid UnitTestImpl::SetGlobalTestPartResultReporter(\n    TestPartResultReporterInterface* reporter) {\n  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);\n  global_test_part_result_repoter_ = reporter;\n}\n\n// Returns the test part result reporter for the current thread.\nTestPartResultReporterInterface*\nUnitTestImpl::GetTestPartResultReporterForCurrentThread() {\n  return per_thread_test_part_result_reporter_.get();\n}\n\n// Sets the test part result reporter for the current thread.\nvoid UnitTestImpl::SetTestPartResultReporterForCurrentThread(\n    TestPartResultReporterInterface* reporter) {\n  per_thread_test_part_result_reporter_.set(reporter);\n}\n\n// Gets the number of successful test cases.\nint UnitTestImpl::successful_test_case_count() const {\n  return CountIf(test_cases_, TestCasePassed);\n}\n\n// Gets the number of failed test cases.\nint UnitTestImpl::failed_test_case_count() const {\n  return CountIf(test_cases_, TestCaseFailed);\n}\n\n// Gets the number of all test cases.\nint UnitTestImpl::total_test_case_count() const {\n  return static_cast<int>(test_cases_.size());\n}\n\n// Gets the number of all test cases that contain at least one test\n// that should run.\nint UnitTestImpl::test_case_to_run_count() const {\n  return CountIf(test_cases_, ShouldRunTestCase);\n}\n\n// Gets the number of successful tests.\nint UnitTestImpl::successful_test_count() const {\n  return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count);\n}\n\n// Gets the number of failed tests.\nint UnitTestImpl::failed_test_count() const {\n  return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count);\n}\n\n// Gets the number of disabled tests.\nint UnitTestImpl::disabled_test_count() const {\n  return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count);\n}\n\n// Gets the number of all tests.\nint UnitTestImpl::total_test_count() const {\n  return SumOverTestCaseList(test_cases_, &TestCase::total_test_count);\n}\n\n// Gets the number of tests that should run.\nint UnitTestImpl::test_to_run_count() const {\n  return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count);\n}\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// CurrentOsStackTraceExceptTop(1), Foo() will be included in the\n// trace but Bar() and CurrentOsStackTraceExceptTop() won't.\nstd::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) {\n  (void)skip_count;\n  return \"\";\n}\n\n// Returns the current time in milliseconds.\nTimeInMillis GetTimeInMillis() {\n#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__)\n  // Difference between 1970-01-01 and 1601-01-01 in milliseconds.\n  // http://analogous.blogspot.com/2005/04/epoch.html\n  const TimeInMillis kJavaEpochToWinFileTimeDelta =\n    static_cast<TimeInMillis>(116444736UL) * 100000UL;\n  const DWORD kTenthMicrosInMilliSecond = 10000;\n\n  SYSTEMTIME now_systime;\n  FILETIME now_filetime;\n  ULARGE_INTEGER now_int64;\n  // TODO(kenton@google.com): Shouldn't this just use\n  //   GetSystemTimeAsFileTime()?\n  GetSystemTime(&now_systime);\n  if (SystemTimeToFileTime(&now_systime, &now_filetime)) {\n    now_int64.LowPart = now_filetime.dwLowDateTime;\n    now_int64.HighPart = now_filetime.dwHighDateTime;\n    now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) -\n      kJavaEpochToWinFileTimeDelta;\n    return now_int64.QuadPart;\n  }\n  return 0;\n#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_\n  __timeb64 now;\n\n# ifdef _MSC_VER\n\n  // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996\n  // (deprecated function) there.\n  // TODO(kenton@google.com): Use GetTickCount()?  Or use\n  //   SystemTimeToFileTime()\n#  pragma warning(push)          // Saves the current warning state.\n#  pragma warning(disable:4996)  // Temporarily disables warning 4996.\n  _ftime64(&now);\n#  pragma warning(pop)           // Restores the warning state.\n# else\n\n  _ftime64(&now);\n\n# endif  // _MSC_VER\n\n  return static_cast<TimeInMillis>(now.time) * 1000 + now.millitm;\n#elif GTEST_HAS_GETTIMEOFDAY_\n  struct timeval now;\n  gettimeofday(&now, NULL);\n  return static_cast<TimeInMillis>(now.tv_sec) * 1000 + now.tv_usec / 1000;\n#else\n# error \"Don't know how to get the current time on your system.\"\n#endif\n}\n\n// Utilities\n\n// class String.\n\n#if GTEST_OS_WINDOWS_MOBILE\n// Creates a UTF-16 wide string from the given ANSI string, allocating\n// memory using new. The caller is responsible for deleting the return\n// value using delete[]. Returns the wide string, or NULL if the\n// input is NULL.\nLPCWSTR String::AnsiToUtf16(const char* ansi) {\n  if (!ansi) return NULL;\n  const int length = strlen(ansi);\n  const int unicode_length =\n      MultiByteToWideChar(CP_ACP, 0, ansi, length,\n                          NULL, 0);\n  WCHAR* unicode = new WCHAR[unicode_length + 1];\n  MultiByteToWideChar(CP_ACP, 0, ansi, length,\n                      unicode, unicode_length);\n  unicode[unicode_length] = 0;\n  return unicode;\n}\n\n// Creates an ANSI string from the given wide string, allocating\n// memory using new. The caller is responsible for deleting the return\n// value using delete[]. Returns the ANSI string, or NULL if the\n// input is NULL.\nconst char* String::Utf16ToAnsi(LPCWSTR utf16_str)  {\n  if (!utf16_str) return NULL;\n  const int ansi_length =\n      WideCharToMultiByte(CP_ACP, 0, utf16_str, -1,\n                          NULL, 0, NULL, NULL);\n  char* ansi = new char[ansi_length + 1];\n  WideCharToMultiByte(CP_ACP, 0, utf16_str, -1,\n                      ansi, ansi_length, NULL, NULL);\n  ansi[ansi_length] = 0;\n  return ansi;\n}\n\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n// Compares two C strings.  Returns true iff they have the same content.\n//\n// Unlike strcmp(), this function can handle NULL argument(s).  A NULL\n// C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::CStringEquals(const char * lhs, const char * rhs) {\n  if ( lhs == NULL ) return rhs == NULL;\n\n  if ( rhs == NULL ) return false;\n\n  return strcmp(lhs, rhs) == 0;\n}\n\n#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING\n\n// Converts an array of wide chars to a narrow string using the UTF-8\n// encoding, and streams the result to the given Message object.\nstatic void StreamWideCharsToMessage(const wchar_t* wstr, size_t length,\n                                     Message* msg) {\n  for (size_t i = 0; i != length; ) {  // NOLINT\n    if (wstr[i] != L'\\0') {\n      *msg << WideStringToUtf8(wstr + i, static_cast<int>(length - i));\n      while (i != length && wstr[i] != L'\\0')\n        i++;\n    } else {\n      *msg << '\\0';\n      i++;\n    }\n  }\n}\n\n#endif  // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING\n\n}  // namespace internal\n\n// Constructs an empty Message.\n// We allocate the stringstream separately because otherwise each use of\n// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's\n// stack frame leading to huge stack frames in some cases; gcc does not reuse\n// the stack space.\nMessage::Message() : ss_(new ::std::stringstream) {\n  // By default, we want there to be enough precision when printing\n  // a double to a Message.\n  *ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);\n}\n\n// These two overloads allow streaming a wide C string to a Message\n// using the UTF-8 encoding.\nMessage& Message::operator <<(const wchar_t* wide_c_str) {\n  return *this << internal::String::ShowWideCString(wide_c_str);\n}\nMessage& Message::operator <<(wchar_t* wide_c_str) {\n  return *this << internal::String::ShowWideCString(wide_c_str);\n}\n\n#if GTEST_HAS_STD_WSTRING\n// Converts the given wide string to a narrow string using the UTF-8\n// encoding, and streams the result to this Message object.\nMessage& Message::operator <<(const ::std::wstring& wstr) {\n  internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this);\n  return *this;\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n#if GTEST_HAS_GLOBAL_WSTRING\n// Converts the given wide string to a narrow string using the UTF-8\n// encoding, and streams the result to this Message object.\nMessage& Message::operator <<(const ::wstring& wstr) {\n  internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this);\n  return *this;\n}\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n// Gets the text streamed to this object so far as an std::string.\n// Each '\\0' character in the buffer is replaced with \"\\\\0\".\nstd::string Message::GetString() const {\n  return internal::StringStreamToString(ss_.get());\n}\n\n// AssertionResult constructors.\n// Used in EXPECT_TRUE/FALSE(assertion_result).\nAssertionResult::AssertionResult(const AssertionResult& other)\n    : success_(other.success_),\n      message_(other.message_.get() != NULL ?\n               new ::std::string(*other.message_) :\n               static_cast< ::std::string*>(NULL)) {\n}\n\n// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.\nAssertionResult AssertionResult::operator!() const {\n  AssertionResult negation(!success_);\n  if (message_.get() != NULL)\n    negation << *message_;\n  return negation;\n}\n\n// Makes a successful assertion result.\nAssertionResult AssertionSuccess() {\n  return AssertionResult(true);\n}\n\n// Makes a failed assertion result.\nAssertionResult AssertionFailure() {\n  return AssertionResult(false);\n}\n\n// Makes a failed assertion result with the given failure message.\n// Deprecated; use AssertionFailure() << message.\nAssertionResult AssertionFailure(const Message& message) {\n  return AssertionFailure() << message;\n}\n\nnamespace internal {\n\n// Constructs and returns the message for an equality assertion\n// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.\n//\n// The first four parameters are the expressions used in the assertion\n// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)\n// where foo is 5 and bar is 6, we have:\n//\n//   expected_expression: \"foo\"\n//   actual_expression:   \"bar\"\n//   expected_value:      \"5\"\n//   actual_value:        \"6\"\n//\n// The ignoring_case parameter is true iff the assertion is a\n// *_STRCASEEQ*.  When it's true, the string \" (ignoring case)\" will\n// be inserted into the message.\nAssertionResult EqFailure(const char* expected_expression,\n                          const char* actual_expression,\n                          const std::string& expected_value,\n                          const std::string& actual_value,\n                          bool ignoring_case) {\n  Message msg;\n  msg << \"Value of: \" << actual_expression;\n  if (actual_value != actual_expression) {\n    msg << \"\\n  Actual: \" << actual_value;\n  }\n\n  msg << \"\\nExpected: \" << expected_expression;\n  if (ignoring_case) {\n    msg << \" (ignoring case)\";\n  }\n  if (expected_value != expected_expression) {\n    msg << \"\\nWhich is: \" << expected_value;\n  }\n\n  return AssertionFailure() << msg;\n}\n\n// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.\nstd::string GetBoolAssertionFailureMessage(\n    const AssertionResult& assertion_result,\n    const char* expression_text,\n    const char* actual_predicate_value,\n    const char* expected_predicate_value) {\n  const char* actual_message = assertion_result.message();\n  Message msg;\n  msg << \"Value of: \" << expression_text\n      << \"\\n  Actual: \" << actual_predicate_value;\n  if (actual_message[0] != '\\0')\n    msg << \" (\" << actual_message << \")\";\n  msg << \"\\nExpected: \" << expected_predicate_value;\n  return msg.GetString();\n}\n\n// Helper function for implementing ASSERT_NEAR.\nAssertionResult DoubleNearPredFormat(const char* expr1,\n                                     const char* expr2,\n                                     const char* abs_error_expr,\n                                     double val1,\n                                     double val2,\n                                     double abs_error) {\n  const double diff = fabs(val1 - val2);\n  if (diff <= abs_error) return AssertionSuccess();\n\n  // TODO(wan): do not print the value of an expression if it's\n  // already a literal.\n  return AssertionFailure()\n      << \"The difference between \" << expr1 << \" and \" << expr2\n      << \" is \" << diff << \", which exceeds \" << abs_error_expr << \", where\\n\"\n      << expr1 << \" evaluates to \" << val1 << \",\\n\"\n      << expr2 << \" evaluates to \" << val2 << \", and\\n\"\n      << abs_error_expr << \" evaluates to \" << abs_error << \".\";\n}\n\n\n// Helper template for implementing FloatLE() and DoubleLE().\ntemplate <typename RawType>\nAssertionResult FloatingPointLE(const char* expr1,\n                                const char* expr2,\n                                RawType val1,\n                                RawType val2) {\n  // Returns success if val1 is less than val2,\n  if (val1 < val2) {\n    return AssertionSuccess();\n  }\n\n  // or if val1 is almost equal to val2.\n  const FloatingPoint<RawType> lhs(val1), rhs(val2);\n  if (lhs.AlmostEquals(rhs)) {\n    return AssertionSuccess();\n  }\n\n  // Note that the above two checks will both fail if either val1 or\n  // val2 is NaN, as the IEEE floating-point standard requires that\n  // any predicate involving a NaN must return false.\n\n  ::std::stringstream val1_ss;\n  val1_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n          << val1;\n\n  ::std::stringstream val2_ss;\n  val2_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n          << val2;\n\n  return AssertionFailure()\n      << \"Expected: (\" << expr1 << \") <= (\" << expr2 << \")\\n\"\n      << \"  Actual: \" << StringStreamToString(&val1_ss) << \" vs \"\n      << StringStreamToString(&val2_ss);\n}\n\n}  // namespace internal\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nAssertionResult FloatLE(const char* expr1, const char* expr2,\n                        float val1, float val2) {\n  return internal::FloatingPointLE<float>(expr1, expr2, val1, val2);\n}\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nAssertionResult DoubleLE(const char* expr1, const char* expr2,\n                         double val1, double val2) {\n  return internal::FloatingPointLE<double>(expr1, expr2, val1, val2);\n}\n\nnamespace internal {\n\n// The helper function for {ASSERT|EXPECT}_EQ with int or enum\n// arguments.\nAssertionResult CmpHelperEQ(const char* expected_expression,\n                            const char* actual_expression,\n                            BiggestInt expected,\n                            BiggestInt actual) {\n  if (expected == actual) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   FormatForComparisonFailureMessage(expected, actual),\n                   FormatForComparisonFailureMessage(actual, expected),\n                   false);\n}\n\n// A macro for implementing the helper functions needed to implement\n// ASSERT_?? and EXPECT_?? with integer or enum arguments.  It is here\n// just to avoid copy-and-paste of similar code.\n#define GTEST_IMPL_CMP_HELPER_(op_name, op)\\\nAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \\\n                                   BiggestInt val1, BiggestInt val2) {\\\n  if (val1 op val2) {\\\n    return AssertionSuccess();\\\n  } else {\\\n    return AssertionFailure() \\\n        << \"Expected: (\" << expr1 << \") \" #op \" (\" << expr2\\\n        << \"), actual: \" << FormatForComparisonFailureMessage(val1, val2)\\\n        << \" vs \" << FormatForComparisonFailureMessage(val2, val1);\\\n  }\\\n}\n\n// Implements the helper function for {ASSERT|EXPECT}_NE with int or\n// enum arguments.\nGTEST_IMPL_CMP_HELPER_(NE, !=)\n// Implements the helper function for {ASSERT|EXPECT}_LE with int or\n// enum arguments.\nGTEST_IMPL_CMP_HELPER_(LE, <=)\n// Implements the helper function for {ASSERT|EXPECT}_LT with int or\n// enum arguments.\nGTEST_IMPL_CMP_HELPER_(LT, < )\n// Implements the helper function for {ASSERT|EXPECT}_GE with int or\n// enum arguments.\nGTEST_IMPL_CMP_HELPER_(GE, >=)\n// Implements the helper function for {ASSERT|EXPECT}_GT with int or\n// enum arguments.\nGTEST_IMPL_CMP_HELPER_(GT, > )\n\n#undef GTEST_IMPL_CMP_HELPER_\n\n// The helper function for {ASSERT|EXPECT}_STREQ.\nAssertionResult CmpHelperSTREQ(const char* expected_expression,\n                               const char* actual_expression,\n                               const char* expected,\n                               const char* actual) {\n  if (String::CStringEquals(expected, actual)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   PrintToString(expected),\n                   PrintToString(actual),\n                   false);\n}\n\n// The helper function for {ASSERT|EXPECT}_STRCASEEQ.\nAssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,\n                                   const char* actual_expression,\n                                   const char* expected,\n                                   const char* actual) {\n  if (String::CaseInsensitiveCStringEquals(expected, actual)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   PrintToString(expected),\n                   PrintToString(actual),\n                   true);\n}\n\n// The helper function for {ASSERT|EXPECT}_STRNE.\nAssertionResult CmpHelperSTRNE(const char* s1_expression,\n                               const char* s2_expression,\n                               const char* s1,\n                               const char* s2) {\n  if (!String::CStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  } else {\n    return AssertionFailure() << \"Expected: (\" << s1_expression << \") != (\"\n                              << s2_expression << \"), actual: \\\"\"\n                              << s1 << \"\\\" vs \\\"\" << s2 << \"\\\"\";\n  }\n}\n\n// The helper function for {ASSERT|EXPECT}_STRCASENE.\nAssertionResult CmpHelperSTRCASENE(const char* s1_expression,\n                                   const char* s2_expression,\n                                   const char* s1,\n                                   const char* s2) {\n  if (!String::CaseInsensitiveCStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  } else {\n    return AssertionFailure()\n        << \"Expected: (\" << s1_expression << \") != (\"\n        << s2_expression << \") (ignoring case), actual: \\\"\"\n        << s1 << \"\\\" vs \\\"\" << s2 << \"\\\"\";\n  }\n}\n\n}  // namespace internal\n\nnamespace {\n\n// Helper functions for implementing IsSubString() and IsNotSubstring().\n\n// This group of overloaded functions return true iff needle is a\n// substring of haystack.  NULL is considered a substring of itself\n// only.\n\nbool IsSubstringPred(const char* needle, const char* haystack) {\n  if (needle == NULL || haystack == NULL)\n    return needle == haystack;\n\n  return strstr(haystack, needle) != NULL;\n}\n\nbool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) {\n  if (needle == NULL || haystack == NULL)\n    return needle == haystack;\n\n  return wcsstr(haystack, needle) != NULL;\n}\n\n// StringType here can be either ::std::string or ::std::wstring.\ntemplate <typename StringType>\nbool IsSubstringPred(const StringType& needle,\n                     const StringType& haystack) {\n  return haystack.find(needle) != StringType::npos;\n}\n\n// This function implements either IsSubstring() or IsNotSubstring(),\n// depending on the value of the expected_to_be_substring parameter.\n// StringType here can be const char*, const wchar_t*, ::std::string,\n// or ::std::wstring.\ntemplate <typename StringType>\nAssertionResult IsSubstringImpl(\n    bool expected_to_be_substring,\n    const char* needle_expr, const char* haystack_expr,\n    const StringType& needle, const StringType& haystack) {\n  if (IsSubstringPred(needle, haystack) == expected_to_be_substring)\n    return AssertionSuccess();\n\n  const bool is_wide_string = sizeof(needle[0]) > 1;\n  const char* const begin_string_quote = is_wide_string ? \"L\\\"\" : \"\\\"\";\n  return AssertionFailure()\n      << \"Value of: \" << needle_expr << \"\\n\"\n      << \"  Actual: \" << begin_string_quote << needle << \"\\\"\\n\"\n      << \"Expected: \" << (expected_to_be_substring ? \"\" : \"not \")\n      << \"a substring of \" << haystack_expr << \"\\n\"\n      << \"Which is: \" << begin_string_quote << haystack << \"\\\"\";\n}\n\n}  // namespace\n\n// IsSubstring() and IsNotSubstring() check whether needle is a\n// substring of haystack (NULL is considered a substring of itself\n// only), and return an appropriate error message when they fail.\n\nAssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const char* needle, const char* haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const wchar_t* needle, const wchar_t* haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const char* needle, const char* haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const wchar_t* needle, const wchar_t* haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::string& needle, const ::std::string& haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::string& needle, const ::std::string& haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\n#if GTEST_HAS_STD_WSTRING\nAssertionResult IsSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::wstring& needle, const ::std::wstring& haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(\n    const char* needle_expr, const char* haystack_expr,\n    const ::std::wstring& needle, const ::std::wstring& haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\nnamespace internal {\n\n#if GTEST_OS_WINDOWS\n\nnamespace {\n\n// Helper function for IsHRESULT{SuccessFailure} predicates\nAssertionResult HRESULTFailureHelper(const char* expr,\n                                     const char* expected,\n                                     long hr) {  // NOLINT\n# if GTEST_OS_WINDOWS_MOBILE\n\n  // Windows CE doesn't support FormatMessage.\n  const char error_text[] = \"\";\n\n# else\n\n  // Looks up the human-readable system message for the HRESULT code\n  // and since we're not passing any params to FormatMessage, we don't\n  // want inserts expanded.\n  const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM |\n                       FORMAT_MESSAGE_IGNORE_INSERTS;\n  const DWORD kBufSize = 4096;\n  // Gets the system's human readable message string for this HRESULT.\n  char error_text[kBufSize] = { '\\0' };\n  DWORD message_length = ::FormatMessageA(kFlags,\n                                          0,  // no source, we're asking system\n                                          hr,  // the error\n                                          0,  // no line width restrictions\n                                          error_text,  // output buffer\n                                          kBufSize,  // buf size\n                                          NULL);  // no arguments for inserts\n  // Trims tailing white space (FormatMessage leaves a trailing CR-LF)\n  for (; message_length && IsSpace(error_text[message_length - 1]);\n          --message_length) {\n    error_text[message_length - 1] = '\\0';\n  }\n\n# endif  // GTEST_OS_WINDOWS_MOBILE\n\n  const std::string error_hex(\"0x\" + String::FormatHexInt(hr));\n  return ::testing::AssertionFailure()\n      << \"Expected: \" << expr << \" \" << expected << \".\\n\"\n      << \"  Actual: \" << error_hex << \" \" << error_text << \"\\n\";\n}\n\n}  // namespace\n\nAssertionResult IsHRESULTSuccess(const char* expr, long hr) {  // NOLINT\n  if (SUCCEEDED(hr)) {\n    return AssertionSuccess();\n  }\n  return HRESULTFailureHelper(expr, \"succeeds\", hr);\n}\n\nAssertionResult IsHRESULTFailure(const char* expr, long hr) {  // NOLINT\n  if (FAILED(hr)) {\n    return AssertionSuccess();\n  }\n  return HRESULTFailureHelper(expr, \"fails\", hr);\n}\n\n#endif  // GTEST_OS_WINDOWS\n\n// Utility functions for encoding Unicode text (wide strings) in\n// UTF-8.\n\n// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8\n// like this:\n//\n// Code-point length   Encoding\n//   0 -  7 bits       0xxxxxxx\n//   8 - 11 bits       110xxxxx 10xxxxxx\n//  12 - 16 bits       1110xxxx 10xxxxxx 10xxxxxx\n//  17 - 21 bits       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\n// The maximum code-point a one-byte UTF-8 sequence can represent.\nconst UInt32 kMaxCodePoint1 = (static_cast<UInt32>(1) <<  7) - 1;\n\n// The maximum code-point a two-byte UTF-8 sequence can represent.\nconst UInt32 kMaxCodePoint2 = (static_cast<UInt32>(1) << (5 + 6)) - 1;\n\n// The maximum code-point a three-byte UTF-8 sequence can represent.\nconst UInt32 kMaxCodePoint3 = (static_cast<UInt32>(1) << (4 + 2*6)) - 1;\n\n// The maximum code-point a four-byte UTF-8 sequence can represent.\nconst UInt32 kMaxCodePoint4 = (static_cast<UInt32>(1) << (3 + 3*6)) - 1;\n\n// Chops off the n lowest bits from a bit pattern.  Returns the n\n// lowest bits.  As a side effect, the original bit pattern will be\n// shifted to the right by n bits.\ninline UInt32 ChopLowBits(UInt32* bits, int n) {\n  const UInt32 low_bits = *bits & ((static_cast<UInt32>(1) << n) - 1);\n  *bits >>= n;\n  return low_bits;\n}\n\n// Converts a Unicode code point to a narrow string in UTF-8 encoding.\n// code_point parameter is of type UInt32 because wchar_t may not be\n// wide enough to contain a code point.\n// If the code_point is not a valid Unicode code point\n// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted\n// to \"(Invalid Unicode 0xXXXXXXXX)\".\nstd::string CodePointToUtf8(UInt32 code_point) {\n  if (code_point > kMaxCodePoint4) {\n    return \"(Invalid Unicode 0x\" + String::FormatHexInt(code_point) + \")\";\n  }\n\n  char str[5];  // Big enough for the largest valid code point.\n  if (code_point <= kMaxCodePoint1) {\n    str[1] = '\\0';\n    str[0] = static_cast<char>(code_point);                          // 0xxxxxxx\n  } else if (code_point <= kMaxCodePoint2) {\n    str[2] = '\\0';\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xC0 | code_point);                   // 110xxxxx\n  } else if (code_point <= kMaxCodePoint3) {\n    str[3] = '\\0';\n    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xE0 | code_point);                   // 1110xxxx\n  } else {  // code_point <= kMaxCodePoint4\n    str[4] = '\\0';\n    str[3] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xF0 | code_point);                   // 11110xxx\n  }\n  return str;\n}\n\n// The following two functions only make sense if the the system\n// uses UTF-16 for wide string encoding. All supported systems\n// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16.\n\n// Determines if the arguments constitute UTF-16 surrogate pair\n// and thus should be combined into a single Unicode code point\n// using CreateCodePointFromUtf16SurrogatePair.\ninline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) {\n  return sizeof(wchar_t) == 2 &&\n      (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00;\n}\n\n// Creates a Unicode code point from UTF16 surrogate pair.\ninline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,\n                                                    wchar_t second) {\n  const UInt32 mask = (1 << 10) - 1;\n  return (sizeof(wchar_t) == 2) ?\n      (((first & mask) << 10) | (second & mask)) + 0x10000 :\n      // This function should not be called when the condition is\n      // false, but we provide a sensible default in case it is.\n      static_cast<UInt32>(first);\n}\n\n// Converts a wide string to a narrow string in UTF-8 encoding.\n// The wide string is assumed to have the following encoding:\n//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS)\n//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)\n// Parameter str points to a null-terminated wide string.\n// Parameter num_chars may additionally limit the number\n// of wchar_t characters processed. -1 is used when the entire string\n// should be processed.\n// If the string contains code points that are not valid Unicode code points\n// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output\n// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding\n// and contains invalid UTF-16 surrogate pairs, values in those pairs\n// will be encoded as individual Unicode characters from Basic Normal Plane.\nstd::string WideStringToUtf8(const wchar_t* str, int num_chars) {\n  if (num_chars == -1)\n    num_chars = static_cast<int>(wcslen(str));\n\n  ::std::stringstream stream;\n  for (int i = 0; i < num_chars; ++i) {\n    UInt32 unicode_code_point;\n\n    if (str[i] == L'\\0') {\n      break;\n    } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) {\n      unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i],\n                                                                 str[i + 1]);\n      i++;\n    } else {\n      unicode_code_point = static_cast<UInt32>(str[i]);\n    }\n\n    stream << CodePointToUtf8(unicode_code_point);\n  }\n  return StringStreamToString(&stream);\n}\n\n// Converts a wide C string to an std::string using the UTF-8 encoding.\n// NULL will be converted to \"(null)\".\nstd::string String::ShowWideCString(const wchar_t * wide_c_str) {\n  if (wide_c_str == NULL)  return \"(null)\";\n\n  return internal::WideStringToUtf8(wide_c_str, -1);\n}\n\n// Compares two wide C strings.  Returns true iff they have the same\n// content.\n//\n// Unlike wcscmp(), this function can handle NULL argument(s).  A NULL\n// C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) {\n  if (lhs == NULL) return rhs == NULL;\n\n  if (rhs == NULL) return false;\n\n  return wcscmp(lhs, rhs) == 0;\n}\n\n// Helper function for *_STREQ on wide strings.\nAssertionResult CmpHelperSTREQ(const char* expected_expression,\n                               const char* actual_expression,\n                               const wchar_t* expected,\n                               const wchar_t* actual) {\n  if (String::WideCStringEquals(expected, actual)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(expected_expression,\n                   actual_expression,\n                   PrintToString(expected),\n                   PrintToString(actual),\n                   false);\n}\n\n// Helper function for *_STRNE on wide strings.\nAssertionResult CmpHelperSTRNE(const char* s1_expression,\n                               const char* s2_expression,\n                               const wchar_t* s1,\n                               const wchar_t* s2) {\n  if (!String::WideCStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  }\n\n  return AssertionFailure() << \"Expected: (\" << s1_expression << \") != (\"\n                            << s2_expression << \"), actual: \"\n                            << PrintToString(s1)\n                            << \" vs \" << PrintToString(s2);\n}\n\n// Compares two C strings, ignoring case.  Returns true iff they have\n// the same content.\n//\n// Unlike strcasecmp(), this function can handle NULL argument(s).  A\n// NULL C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) {\n  if (lhs == NULL)\n    return rhs == NULL;\n  if (rhs == NULL)\n    return false;\n  return posix::StrCaseCmp(lhs, rhs) == 0;\n}\n\n  // Compares two wide C strings, ignoring case.  Returns true iff they\n  // have the same content.\n  //\n  // Unlike wcscasecmp(), this function can handle NULL argument(s).\n  // A NULL C string is considered different to any non-NULL wide C string,\n  // including the empty string.\n  // NB: The implementations on different platforms slightly differ.\n  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE\n  // environment variable. On GNU platform this method uses wcscasecmp\n  // which compares according to LC_CTYPE category of the current locale.\n  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the\n  // current locale.\nbool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs,\n                                              const wchar_t* rhs) {\n  if (lhs == NULL) return rhs == NULL;\n\n  if (rhs == NULL) return false;\n\n#if GTEST_OS_WINDOWS\n  return _wcsicmp(lhs, rhs) == 0;\n#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID\n  return wcscasecmp(lhs, rhs) == 0;\n#else\n  // Android, Mac OS X and Cygwin don't define wcscasecmp.\n  // Other unknown OSes may not define it either.\n  wint_t left, right;\n  do {\n    left = towlower(*lhs++);\n    right = towlower(*rhs++);\n  } while (left && left == right);\n  return left == right;\n#endif  // OS selector\n}\n\n// Returns true iff str ends with the given suffix, ignoring case.\n// Any string is considered to end with an empty suffix.\nbool String::EndsWithCaseInsensitive(\n    const std::string& str, const std::string& suffix) {\n  const size_t str_len = str.length();\n  const size_t suffix_len = suffix.length();\n  return (str_len >= suffix_len) &&\n         CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len,\n                                      suffix.c_str());\n}\n\n// Formats an int value as \"%02d\".\nstd::string String::FormatIntWidth2(int value) {\n  std::stringstream ss;\n  ss << std::setfill('0') << std::setw(2) << value;\n  return ss.str();\n}\n\n// Formats an int value as \"%X\".\nstd::string String::FormatHexInt(int value) {\n  std::stringstream ss;\n  ss << std::hex << std::uppercase << value;\n  return ss.str();\n}\n\n// Formats a byte as \"%02X\".\nstd::string String::FormatByte(unsigned char value) {\n  std::stringstream ss;\n  ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase\n     << static_cast<unsigned int>(value);\n  return ss.str();\n}\n\n// Converts the buffer in a stringstream to an std::string, converting NUL\n// bytes to \"\\\\0\" along the way.\nstd::string StringStreamToString(::std::stringstream* ss) {\n  const ::std::string& str = ss->str();\n  const char* const start = str.c_str();\n  const char* const end = start + str.length();\n\n  std::string result;\n  result.reserve(2 * (end - start));\n  for (const char* ch = start; ch != end; ++ch) {\n    if (*ch == '\\0') {\n      result += \"\\\\0\";  // Replaces NUL with \"\\\\0\";\n    } else {\n      result += *ch;\n    }\n  }\n\n  return result;\n}\n\n// Appends the user-supplied message to the Google-Test-generated message.\nstd::string AppendUserMessage(const std::string& gtest_msg,\n                              const Message& user_msg) {\n  // Appends the user message if it's non-empty.\n  const std::string user_msg_string = user_msg.GetString();\n  if (user_msg_string.empty()) {\n    return gtest_msg;\n  }\n\n  return gtest_msg + \"\\n\" + user_msg_string;\n}\n\n}  // namespace internal\n\n// class TestResult\n\n// Creates an empty TestResult.\nTestResult::TestResult()\n    : death_test_count_(0),\n      elapsed_time_(0) {\n}\n\n// D'tor.\nTestResult::~TestResult() {\n}\n\n// Returns the i-th test part result among all the results. i can\n// range from 0 to total_part_count() - 1. If i is not in that range,\n// aborts the program.\nconst TestPartResult& TestResult::GetTestPartResult(int i) const {\n  if (i < 0 || i >= total_part_count())\n    internal::posix::Abort();\n  return test_part_results_.at(i);\n}\n\n// Returns the i-th test property. i can range from 0 to\n// test_property_count() - 1. If i is not in that range, aborts the\n// program.\nconst TestProperty& TestResult::GetTestProperty(int i) const {\n  if (i < 0 || i >= test_property_count())\n    internal::posix::Abort();\n  return test_properties_.at(i);\n}\n\n// Clears the test part results.\nvoid TestResult::ClearTestPartResults() {\n  test_part_results_.clear();\n}\n\n// Adds a test part result to the list.\nvoid TestResult::AddTestPartResult(const TestPartResult& test_part_result) {\n  test_part_results_.push_back(test_part_result);\n}\n\n// Adds a test property to the list. If a property with the same key as the\n// supplied property is already represented, the value of this test_property\n// replaces the old value for that key.\nvoid TestResult::RecordProperty(const std::string& xml_element,\n                                const TestProperty& test_property) {\n  if (!ValidateTestProperty(xml_element, test_property)) {\n    return;\n  }\n  internal::MutexLock lock(&test_properites_mutex_);\n  const std::vector<TestProperty>::iterator property_with_matching_key =\n      std::find_if(test_properties_.begin(), test_properties_.end(),\n                   internal::TestPropertyKeyIs(test_property.key()));\n  if (property_with_matching_key == test_properties_.end()) {\n    test_properties_.push_back(test_property);\n    return;\n  }\n  property_with_matching_key->SetValue(test_property.value());\n}\n\n// The list of reserved attributes used in the <testsuites> element of XML\n// output.\nstatic const char* const kReservedTestSuitesAttributes[] = {\n  \"disabled\",\n  \"errors\",\n  \"failures\",\n  \"name\",\n  \"random_seed\",\n  \"tests\",\n  \"time\",\n  \"timestamp\"\n};\n\n// The list of reserved attributes used in the <testsuite> element of XML\n// output.\nstatic const char* const kReservedTestSuiteAttributes[] = {\n  \"disabled\",\n  \"errors\",\n  \"failures\",\n  \"name\",\n  \"tests\",\n  \"time\"\n};\n\n// The list of reserved attributes used in the <testcase> element of XML output.\nstatic const char* const kReservedTestCaseAttributes[] = {\n  \"classname\",\n  \"name\",\n  \"status\",\n  \"time\",\n  \"type_param\",\n  \"value_param\"\n};\n\ntemplate <int kSize>\nstd::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) {\n  return std::vector<std::string>(array, array + kSize);\n}\n\nstatic std::vector<std::string> GetReservedAttributesForElement(\n    const std::string& xml_element) {\n  if (xml_element == \"testsuites\") {\n    return ArrayAsVector(kReservedTestSuitesAttributes);\n  } else if (xml_element == \"testsuite\") {\n    return ArrayAsVector(kReservedTestSuiteAttributes);\n  } else if (xml_element == \"testcase\") {\n    return ArrayAsVector(kReservedTestCaseAttributes);\n  } else {\n    GTEST_CHECK_(false) << \"Unrecognized xml_element provided: \" << xml_element;\n  }\n  // This code is unreachable but some compilers may not realizes that.\n  return std::vector<std::string>();\n}\n\nstatic std::string FormatWordList(const std::vector<std::string>& words) {\n  Message word_list;\n  for (size_t i = 0; i < words.size(); ++i) {\n    if (i > 0 && words.size() > 2) {\n      word_list << \", \";\n    }\n    if (i == words.size() - 1) {\n      word_list << \"and \";\n    }\n    word_list << \"'\" << words[i] << \"'\";\n  }\n  return word_list.GetString();\n}\n\nbool ValidateTestPropertyName(const std::string& property_name,\n                              const std::vector<std::string>& reserved_names) {\n  if (std::find(reserved_names.begin(), reserved_names.end(), property_name) !=\n          reserved_names.end()) {\n    ADD_FAILURE() << \"Reserved key used in RecordProperty(): \" << property_name\n                  << \" (\" << FormatWordList(reserved_names)\n                  << \" are reserved by \" << GTEST_NAME_ << \")\";\n    return false;\n  }\n  return true;\n}\n\n// Adds a failure if the key is a reserved attribute of the element named\n// xml_element.  Returns true if the property is valid.\nbool TestResult::ValidateTestProperty(const std::string& xml_element,\n                                      const TestProperty& test_property) {\n  return ValidateTestPropertyName(test_property.key(),\n                                  GetReservedAttributesForElement(xml_element));\n}\n\n// Clears the object.\nvoid TestResult::Clear() {\n  test_part_results_.clear();\n  test_properties_.clear();\n  death_test_count_ = 0;\n  elapsed_time_ = 0;\n}\n\n// Returns true iff the test failed.\nbool TestResult::Failed() const {\n  for (int i = 0; i < total_part_count(); ++i) {\n    if (GetTestPartResult(i).failed())\n      return true;\n  }\n  return false;\n}\n\n// Returns true iff the test part fatally failed.\nstatic bool TestPartFatallyFailed(const TestPartResult& result) {\n  return result.fatally_failed();\n}\n\n// Returns true iff the test fatally failed.\nbool TestResult::HasFatalFailure() const {\n  return CountIf(test_part_results_, TestPartFatallyFailed) > 0;\n}\n\n// Returns true iff the test part non-fatally failed.\nstatic bool TestPartNonfatallyFailed(const TestPartResult& result) {\n  return result.nonfatally_failed();\n}\n\n// Returns true iff the test has a non-fatal failure.\nbool TestResult::HasNonfatalFailure() const {\n  return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0;\n}\n\n// Gets the number of all test parts.  This is the sum of the number\n// of successful test parts and the number of failed test parts.\nint TestResult::total_part_count() const {\n  return static_cast<int>(test_part_results_.size());\n}\n\n// Returns the number of the test properties.\nint TestResult::test_property_count() const {\n  return static_cast<int>(test_properties_.size());\n}\n\n// class Test\n\n// Creates a Test object.\n\n// The c'tor saves the values of all Google Test flags.\nTest::Test()\n    : gtest_flag_saver_(new internal::GTestFlagSaver) {\n}\n\n// The d'tor restores the values of all Google Test flags.\nTest::~Test() {\n  delete gtest_flag_saver_;\n}\n\n// Sets up the test fixture.\n//\n// A sub-class may override this.\nvoid Test::SetUp() {\n}\n\n// Tears down the test fixture.\n//\n// A sub-class may override this.\nvoid Test::TearDown() {\n}\n\n// Allows user supplied key value pairs to be recorded for later output.\nvoid Test::RecordProperty(const std::string& key, const std::string& value) {\n  UnitTest::GetInstance()->RecordProperty(key, value);\n}\n\n// Allows user supplied key value pairs to be recorded for later output.\nvoid Test::RecordProperty(const std::string& key, int value) {\n  Message value_message;\n  value_message << value;\n  RecordProperty(key, value_message.GetString().c_str());\n}\n\nnamespace internal {\n\nvoid ReportFailureInUnknownLocation(TestPartResult::Type result_type,\n                                    const std::string& message) {\n  // This function is a friend of UnitTest and as such has access to\n  // AddTestPartResult.\n  UnitTest::GetInstance()->AddTestPartResult(\n      result_type,\n      NULL,  // No info about the source file where the exception occurred.\n      -1,    // We have no info on which line caused the exception.\n      message,\n      \"\");   // No stack trace, either.\n}\n\n}  // namespace internal\n\n// Google Test requires all tests in the same test case to use the same test\n// fixture class.  This function checks if the current test has the\n// same fixture class as the first test in the current test case.  If\n// yes, it returns true; otherwise it generates a Google Test failure and\n// returns false.\nbool Test::HasSameFixtureClass() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  const TestCase* const test_case = impl->current_test_case();\n\n  // Info about the first test in the current test case.\n  const TestInfo* const first_test_info = test_case->test_info_list()[0];\n  const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_;\n  const char* const first_test_name = first_test_info->name();\n\n  // Info about the current test.\n  const TestInfo* const this_test_info = impl->current_test_info();\n  const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_;\n  const char* const this_test_name = this_test_info->name();\n\n  if (this_fixture_id != first_fixture_id) {\n    // Is the first test defined using TEST?\n    const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId();\n    // Is this test defined using TEST?\n    const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId();\n\n    if (first_is_TEST || this_is_TEST) {\n      // The user mixed TEST and TEST_F in this test case - we'll tell\n      // him/her how to fix it.\n\n      // Gets the name of the TEST and the name of the TEST_F.  Note\n      // that first_is_TEST and this_is_TEST cannot both be true, as\n      // the fixture IDs are different for the two tests.\n      const char* const TEST_name =\n          first_is_TEST ? first_test_name : this_test_name;\n      const char* const TEST_F_name =\n          first_is_TEST ? this_test_name : first_test_name;\n\n      ADD_FAILURE()\n          << \"All tests in the same test case must use the same test fixture\\n\"\n          << \"class, so mixing TEST_F and TEST in the same test case is\\n\"\n          << \"illegal.  In test case \" << this_test_info->test_case_name()\n          << \",\\n\"\n          << \"test \" << TEST_F_name << \" is defined using TEST_F but\\n\"\n          << \"test \" << TEST_name << \" is defined using TEST.  You probably\\n\"\n          << \"want to change the TEST to TEST_F or move it to another test\\n\"\n          << \"case.\";\n    } else {\n      // The user defined two fixture classes with the same name in\n      // two namespaces - we'll tell him/her how to fix it.\n      ADD_FAILURE()\n          << \"All tests in the same test case must use the same test fixture\\n\"\n          << \"class.  However, in test case \"\n          << this_test_info->test_case_name() << \",\\n\"\n          << \"you defined test \" << first_test_name\n          << \" and test \" << this_test_name << \"\\n\"\n          << \"using two different test fixture classes.  This can happen if\\n\"\n          << \"the two classes are from different namespaces or translation\\n\"\n          << \"units and have the same name.  You should probably rename one\\n\"\n          << \"of the classes to put the tests into different test cases.\";\n    }\n    return false;\n  }\n\n  return true;\n}\n\n#if GTEST_HAS_SEH\n\n// Adds an \"exception thrown\" fatal failure to the current test.  This\n// function returns its result via an output parameter pointer because VC++\n// prohibits creation of objects with destructors on stack in functions\n// using __try (see error C2712).\nstatic std::string* FormatSehExceptionMessage(DWORD exception_code,\n                                              const char* location) {\n  Message message;\n  message << \"SEH exception with code 0x\" << std::setbase(16) <<\n    exception_code << std::setbase(10) << \" thrown in \" << location << \".\";\n\n  return new std::string(message.GetString());\n}\n\n#endif  // GTEST_HAS_SEH\n\nnamespace internal {\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Adds an \"exception thrown\" fatal failure to the current test.\nstatic std::string FormatCxxExceptionMessage(const char* description,\n                                             const char* location) {\n  Message message;\n  if (description != NULL) {\n    message << \"C++ exception with description \\\"\" << description << \"\\\"\";\n  } else {\n    message << \"Unknown C++ exception\";\n  }\n  message << \" thrown in \" << location << \".\";\n\n  return message.GetString();\n}\n\nstatic std::string PrintTestPartResultToString(\n    const TestPartResult& test_part_result);\n\nGoogleTestFailureException::GoogleTestFailureException(\n    const TestPartResult& failure)\n    : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// We put these helper functions in the internal namespace as IBM's xlC\n// compiler rejects the code if they were declared static.\n\n// Runs the given method and handles SEH exceptions it throws, when\n// SEH is supported; returns the 0-value for type Result in case of an\n// SEH exception.  (Microsoft compilers cannot handle SEH and C++\n// exceptions in the same function.  Therefore, we provide a separate\n// wrapper function for handling SEH exceptions.)\ntemplate <class T, typename Result>\nResult HandleSehExceptionsInMethodIfSupported(\n    T* object, Result (T::*method)(), const char* location) {\n#if GTEST_HAS_SEH\n  __try {\n    return (object->*method)();\n  } __except (internal::UnitTestOptions::GTestShouldProcessSEH(  // NOLINT\n      GetExceptionCode())) {\n    // We create the exception message on the heap because VC++ prohibits\n    // creation of objects with destructors on stack in functions using __try\n    // (see error C2712).\n    std::string* exception_message = FormatSehExceptionMessage(\n        GetExceptionCode(), location);\n    internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure,\n                                             *exception_message);\n    delete exception_message;\n    return static_cast<Result>(0);\n  }\n#else\n  (void)location;\n  return (object->*method)();\n#endif  // GTEST_HAS_SEH\n}\n\n// Runs the given method and catches and reports C++ and/or SEH-style\n// exceptions, if they are supported; returns the 0-value for type\n// Result in case of an SEH exception.\ntemplate <class T, typename Result>\nResult HandleExceptionsInMethodIfSupported(\n    T* object, Result (T::*method)(), const char* location) {\n  // NOTE: The user code can affect the way in which Google Test handles\n  // exceptions by setting GTEST_FLAG(catch_exceptions), but only before\n  // RUN_ALL_TESTS() starts. It is technically possible to check the flag\n  // after the exception is caught and either report or re-throw the\n  // exception based on the flag's value:\n  //\n  // try {\n  //   // Perform the test method.\n  // } catch (...) {\n  //   if (GTEST_FLAG(catch_exceptions))\n  //     // Report the exception as failure.\n  //   else\n  //     throw;  // Re-throws the original exception.\n  // }\n  //\n  // However, the purpose of this flag is to allow the program to drop into\n  // the debugger when the exception is thrown. On most platforms, once the\n  // control enters the catch block, the exception origin information is\n  // lost and the debugger will stop the program at the point of the\n  // re-throw in this function -- instead of at the point of the original\n  // throw statement in the code under test.  For this reason, we perform\n  // the check early, sacrificing the ability to affect Google Test's\n  // exception handling in the method where the exception is thrown.\n  if (internal::GetUnitTestImpl()->catch_exceptions()) {\n#if GTEST_HAS_EXCEPTIONS\n    try {\n      return HandleSehExceptionsInMethodIfSupported(object, method, location);\n    } catch (const internal::GoogleTestFailureException&) {  // NOLINT\n      // This exception type can only be thrown by a failed Google\n      // Test assertion with the intention of letting another testing\n      // framework catch it.  Therefore we just re-throw it.\n      throw;\n    } catch (const std::exception& e) {  // NOLINT\n      internal::ReportFailureInUnknownLocation(\n          TestPartResult::kFatalFailure,\n          FormatCxxExceptionMessage(e.what(), location));\n    } catch (...) {  // NOLINT\n      internal::ReportFailureInUnknownLocation(\n          TestPartResult::kFatalFailure,\n          FormatCxxExceptionMessage(NULL, location));\n    }\n    return static_cast<Result>(0);\n#else\n    return HandleSehExceptionsInMethodIfSupported(object, method, location);\n#endif  // GTEST_HAS_EXCEPTIONS\n  } else {\n    return (object->*method)();\n  }\n}\n\n}  // namespace internal\n\n// Runs the test and updates the test result.\nvoid Test::Run() {\n  if (!HasSameFixtureClass()) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, \"SetUp()\");\n  // We will run the test only if SetUp() was successful.\n  if (!HasFatalFailure()) {\n    impl->os_stack_trace_getter()->UponLeavingGTest();\n    internal::HandleExceptionsInMethodIfSupported(\n        this, &Test::TestBody, \"the test body\");\n  }\n\n  // However, we want to clean up as much as possible.  Hence we will\n  // always call TearDown(), even if SetUp() or the test body has\n  // failed.\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      this, &Test::TearDown, \"TearDown()\");\n}\n\n// Returns true iff the current test has a fatal failure.\nbool Test::HasFatalFailure() {\n  return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure();\n}\n\n// Returns true iff the current test has a non-fatal failure.\nbool Test::HasNonfatalFailure() {\n  return internal::GetUnitTestImpl()->current_test_result()->\n      HasNonfatalFailure();\n}\n\n// class TestInfo\n\n// Constructs a TestInfo object. It assumes ownership of the test factory\n// object.\nTestInfo::TestInfo(const std::string& a_test_case_name,\n                   const std::string& a_name,\n                   const char* a_type_param,\n                   const char* a_value_param,\n                   internal::TypeId fixture_class_id,\n                   internal::TestFactoryBase* factory)\n    : test_case_name_(a_test_case_name),\n      name_(a_name),\n      type_param_(a_type_param ? new std::string(a_type_param) : NULL),\n      value_param_(a_value_param ? new std::string(a_value_param) : NULL),\n      fixture_class_id_(fixture_class_id),\n      should_run_(false),\n      is_disabled_(false),\n      matches_filter_(false),\n      factory_(factory),\n      result_() {}\n\n// Destructs a TestInfo object.\nTestInfo::~TestInfo() { delete factory_; }\n\nnamespace internal {\n\n// Creates a new TestInfo object and registers it with Google Test;\n// returns the created object.\n//\n// Arguments:\n//\n//   test_case_name:   name of the test case\n//   name:             name of the test\n//   type_param:       the name of the test's type parameter, or NULL if\n//                     this is not a typed or a type-parameterized test.\n//   value_param:      text representation of the test's value parameter,\n//                     or NULL if this is not a value-parameterized test.\n//   fixture_class_id: ID of the test fixture class\n//   set_up_tc:        pointer to the function that sets up the test case\n//   tear_down_tc:     pointer to the function that tears down the test case\n//   factory:          pointer to the factory that creates a test object.\n//                     The newly created TestInfo instance will assume\n//                     ownership of the factory object.\nTestInfo* MakeAndRegisterTestInfo(\n    const char* test_case_name,\n    const char* name,\n    const char* type_param,\n    const char* value_param,\n    TypeId fixture_class_id,\n    SetUpTestCaseFunc set_up_tc,\n    TearDownTestCaseFunc tear_down_tc,\n    TestFactoryBase* factory) {\n  TestInfo* const test_info =\n      new TestInfo(test_case_name, name, type_param, value_param,\n                   fixture_class_id, factory);\n  GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info);\n  return test_info;\n}\n\n#if GTEST_HAS_PARAM_TEST\nvoid ReportInvalidTestCaseType(const char* test_case_name,\n                               const char* file, int line) {\n  Message errors;\n  errors\n      << \"Attempted redefinition of test case \" << test_case_name << \".\\n\"\n      << \"All tests in the same test case must use the same test fixture\\n\"\n      << \"class.  However, in test case \" << test_case_name << \", you tried\\n\"\n      << \"to define a test using a fixture class different from the one\\n\"\n      << \"used earlier. This can happen if the two fixture classes are\\n\"\n      << \"from different namespaces and have the same name. You should\\n\"\n      << \"probably rename one of the classes to put the tests into different\\n\"\n      << \"test cases.\";\n\n  fprintf(stderr, \"%s %s\", FormatFileLocation(file, line).c_str(),\n          errors.GetString().c_str());\n}\n#endif  // GTEST_HAS_PARAM_TEST\n\n}  // namespace internal\n\nnamespace {\n\n// A predicate that checks the test name of a TestInfo against a known\n// value.\n//\n// This is used for implementation of the TestCase class only.  We put\n// it in the anonymous namespace to prevent polluting the outer\n// namespace.\n//\n// TestNameIs is copyable.\nclass TestNameIs {\n public:\n  // Constructor.\n  //\n  // TestNameIs has NO default constructor.\n  explicit TestNameIs(const char* name)\n      : name_(name) {}\n\n  // Returns true iff the test name of test_info matches name_.\n  bool operator()(const TestInfo * test_info) const {\n    return test_info && test_info->name() == name_;\n  }\n\n private:\n  std::string name_;\n};\n\n}  // namespace\n\nnamespace internal {\n\n// This method expands all parameterized tests registered with macros TEST_P\n// and INSTANTIATE_TEST_CASE_P into regular tests and registers those.\n// This will be done just once during the program runtime.\nvoid UnitTestImpl::RegisterParameterizedTests() {\n#if GTEST_HAS_PARAM_TEST\n  if (!parameterized_tests_registered_) {\n    parameterized_test_registry_.RegisterTests();\n    parameterized_tests_registered_ = true;\n  }\n#endif\n}\n\n}  // namespace internal\n\n// Creates the test object, runs it, records its result, and then\n// deletes it.\nvoid TestInfo::Run() {\n  if (!should_run_) return;\n\n  // Tells UnitTest where to store test result.\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_info(this);\n\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n\n  // Notifies the unit test event listeners that a test is about to start.\n  repeater->OnTestStart(*this);\n\n  const TimeInMillis start = internal::GetTimeInMillis();\n\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n\n  // Creates the test object.\n  Test* const test = internal::HandleExceptionsInMethodIfSupported(\n      factory_, &internal::TestFactoryBase::CreateTest,\n      \"the test fixture's constructor\");\n\n  // Runs the test only if the test object was created and its\n  // constructor didn't generate a fatal failure.\n  if ((test != NULL) && !Test::HasFatalFailure()) {\n    // This doesn't throw as all user code that can throw are wrapped into\n    // exception handling code.\n    test->Run();\n  }\n\n  // Deletes the test object.\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      test, &Test::DeleteSelf_, \"the test fixture's destructor\");\n\n  result_.set_elapsed_time(internal::GetTimeInMillis() - start);\n\n  // Notifies the unit test event listener that a test has just finished.\n  repeater->OnTestEnd(*this);\n\n  // Tells UnitTest to stop associating assertion results to this\n  // test.\n  impl->set_current_test_info(NULL);\n}\n\n// class TestCase\n\n// Gets the number of successful tests in this test case.\nint TestCase::successful_test_count() const {\n  return CountIf(test_info_list_, TestPassed);\n}\n\n// Gets the number of failed tests in this test case.\nint TestCase::failed_test_count() const {\n  return CountIf(test_info_list_, TestFailed);\n}\n\nint TestCase::disabled_test_count() const {\n  return CountIf(test_info_list_, TestDisabled);\n}\n\n// Get the number of tests in this test case that should run.\nint TestCase::test_to_run_count() const {\n  return CountIf(test_info_list_, ShouldRunTest);\n}\n\n// Gets the number of all tests.\nint TestCase::total_test_count() const {\n  return static_cast<int>(test_info_list_.size());\n}\n\n// Creates a TestCase with the given name.\n//\n// Arguments:\n//\n//   name:         name of the test case\n//   a_type_param: the name of the test case's type parameter, or NULL if\n//                 this is not a typed or a type-parameterized test case.\n//   set_up_tc:    pointer to the function that sets up the test case\n//   tear_down_tc: pointer to the function that tears down the test case\nTestCase::TestCase(const char* a_name, const char* a_type_param,\n                   Test::SetUpTestCaseFunc set_up_tc,\n                   Test::TearDownTestCaseFunc tear_down_tc)\n    : name_(a_name),\n      type_param_(a_type_param ? new std::string(a_type_param) : NULL),\n      set_up_tc_(set_up_tc),\n      tear_down_tc_(tear_down_tc),\n      should_run_(false),\n      elapsed_time_(0) {\n}\n\n// Destructor of TestCase.\nTestCase::~TestCase() {\n  // Deletes every Test in the collection.\n  ForEach(test_info_list_, internal::Delete<TestInfo>);\n}\n\n// Returns the i-th test among all the tests. i can range from 0 to\n// total_test_count() - 1. If i is not in that range, returns NULL.\nconst TestInfo* TestCase::GetTestInfo(int i) const {\n  const int index = GetElementOr(test_indices_, i, -1);\n  return index < 0 ? NULL : test_info_list_[index];\n}\n\n// Returns the i-th test among all the tests. i can range from 0 to\n// total_test_count() - 1. If i is not in that range, returns NULL.\nTestInfo* TestCase::GetMutableTestInfo(int i) {\n  const int index = GetElementOr(test_indices_, i, -1);\n  return index < 0 ? NULL : test_info_list_[index];\n}\n\n// Adds a test to this test case.  Will delete the test upon\n// destruction of the TestCase object.\nvoid TestCase::AddTestInfo(TestInfo * test_info) {\n  test_info_list_.push_back(test_info);\n  test_indices_.push_back(static_cast<int>(test_indices_.size()));\n}\n\n// Runs every test in this TestCase.\nvoid TestCase::Run() {\n  if (!should_run_) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_case(this);\n\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n\n  repeater->OnTestCaseStart(*this);\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      this, &TestCase::RunSetUpTestCase, \"SetUpTestCase()\");\n\n  const internal::TimeInMillis start = internal::GetTimeInMillis();\n  for (int i = 0; i < total_test_count(); i++) {\n    GetMutableTestInfo(i)->Run();\n  }\n  elapsed_time_ = internal::GetTimeInMillis() - start;\n\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      this, &TestCase::RunTearDownTestCase, \"TearDownTestCase()\");\n\n  repeater->OnTestCaseEnd(*this);\n  impl->set_current_test_case(NULL);\n}\n\n// Clears the results of all tests in this test case.\nvoid TestCase::ClearResult() {\n  ad_hoc_test_result_.Clear();\n  ForEach(test_info_list_, TestInfo::ClearTestResult);\n}\n\n// Shuffles the tests in this test case.\nvoid TestCase::ShuffleTests(internal::Random* random) {\n  Shuffle(random, &test_indices_);\n}\n\n// Restores the test order to before the first shuffle.\nvoid TestCase::UnshuffleTests() {\n  for (size_t i = 0; i < test_indices_.size(); i++) {\n    test_indices_[i] = static_cast<int>(i);\n  }\n}\n\n// Formats a countable noun.  Depending on its quantity, either the\n// singular form or the plural form is used. e.g.\n//\n// FormatCountableNoun(1, \"formula\", \"formuli\") returns \"1 formula\".\n// FormatCountableNoun(5, \"book\", \"books\") returns \"5 books\".\nstatic std::string FormatCountableNoun(int count,\n                                       const char * singular_form,\n                                       const char * plural_form) {\n  return internal::StreamableToString(count) + \" \" +\n      (count == 1 ? singular_form : plural_form);\n}\n\n// Formats the count of tests.\nstatic std::string FormatTestCount(int test_count) {\n  return FormatCountableNoun(test_count, \"test\", \"tests\");\n}\n\n// Formats the count of test cases.\nstatic std::string FormatTestCaseCount(int test_case_count) {\n  return FormatCountableNoun(test_case_count, \"test case\", \"test cases\");\n}\n\n// Converts a TestPartResult::Type enum to human-friendly string\n// representation.  Both kNonFatalFailure and kFatalFailure are translated\n// to \"Failure\", as the user usually doesn't care about the difference\n// between the two when viewing the test result.\nstatic const char * TestPartResultTypeToString(TestPartResult::Type type) {\n  switch (type) {\n    case TestPartResult::kSuccess:\n      return \"Success\";\n\n    case TestPartResult::kNonFatalFailure:\n    case TestPartResult::kFatalFailure:\n#ifdef _MSC_VER\n      return \"error: \";\n#else\n      return \"Failure\\n\";\n#endif\n    default:\n      return \"Unknown result type\";\n  }\n}\n\nnamespace internal {\n\n// Prints a TestPartResult to an std::string.\nstatic std::string PrintTestPartResultToString(\n    const TestPartResult& test_part_result) {\n  return (Message()\n          << internal::FormatFileLocation(test_part_result.file_name(),\n                                          test_part_result.line_number())\n          << \" \" << TestPartResultTypeToString(test_part_result.type())\n          << test_part_result.message()).GetString();\n}\n\n// Prints a TestPartResult.\nstatic void PrintTestPartResult(const TestPartResult& test_part_result) {\n  const std::string& result =\n      PrintTestPartResultToString(test_part_result);\n  printf(\"%s\\n\", result.c_str());\n  fflush(stdout);\n  // If the test program runs in Visual Studio or a debugger, the\n  // following statements add the test part result message to the Output\n  // window such that the user can double-click on it to jump to the\n  // corresponding source code location; otherwise they do nothing.\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n  // We don't call OutputDebugString*() on Windows Mobile, as printing\n  // to stdout is done by OutputDebugString() there already - we don't\n  // want the same message printed twice.\n  ::OutputDebugStringA(result.c_str());\n  ::OutputDebugStringA(\"\\n\");\n#endif\n}\n\n// class PrettyUnitTestResultPrinter\n\nenum GTestColor {\n  COLOR_DEFAULT,\n  COLOR_RED,\n  COLOR_GREEN,\n  COLOR_YELLOW\n};\n\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n\n// Returns the character attribute for the given color.\nWORD GetColorAttribute(GTestColor color) {\n  switch (color) {\n    case COLOR_RED:    return FOREGROUND_RED;\n    case COLOR_GREEN:  return FOREGROUND_GREEN;\n    case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN;\n    default:           return 0;\n  }\n}\n\n#else\n\n// Returns the ANSI color code for the given color.  COLOR_DEFAULT is\n// an invalid input.\nconst char* GetAnsiColorCode(GTestColor color) {\n  switch (color) {\n    case COLOR_RED:     return \"1\";\n    case COLOR_GREEN:   return \"2\";\n    case COLOR_YELLOW:  return \"3\";\n    default:            return NULL;\n  };\n}\n\n#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n\n// Returns true iff Google Test should use colors in the output.\nbool ShouldUseColor(bool stdout_is_tty) {\n  const char* const gtest_color = GTEST_FLAG(color).c_str();\n\n  if (String::CaseInsensitiveCStringEquals(gtest_color, \"auto\")) {\n#if GTEST_OS_WINDOWS\n    // On Windows the TERM variable is usually not set, but the\n    // console there does support colors.\n    return stdout_is_tty;\n#else\n    // On non-Windows platforms, we rely on the TERM variable.\n    const char* const term = posix::GetEnv(\"TERM\");\n    const bool term_supports_color =\n        String::CStringEquals(term, \"xterm\") ||\n        String::CStringEquals(term, \"xterm-color\") ||\n        String::CStringEquals(term, \"xterm-256color\") ||\n        String::CStringEquals(term, \"screen\") ||\n        String::CStringEquals(term, \"screen-256color\") ||\n        String::CStringEquals(term, \"linux\") ||\n        String::CStringEquals(term, \"cygwin\");\n    return stdout_is_tty && term_supports_color;\n#endif  // GTEST_OS_WINDOWS\n  }\n\n  return String::CaseInsensitiveCStringEquals(gtest_color, \"yes\") ||\n      String::CaseInsensitiveCStringEquals(gtest_color, \"true\") ||\n      String::CaseInsensitiveCStringEquals(gtest_color, \"t\") ||\n      String::CStringEquals(gtest_color, \"1\");\n  // We take \"yes\", \"true\", \"t\", and \"1\" as meaning \"yes\".  If the\n  // value is neither one of these nor \"auto\", we treat it as \"no\" to\n  // be conservative.\n}\n\n// Helpers for printing colored strings to stdout. Note that on Windows, we\n// cannot simply emit special characters and have the terminal change colors.\n// This routine must actually emit the characters rather than return a string\n// that would be colored when printed, as can be done on Linux.\nvoid ColoredPrintf(GTestColor color, const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || GTEST_OS_IOS\n  const bool use_color = false;\n#else\n  static const bool in_color_mode =\n      ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0);\n  const bool use_color = in_color_mode && (color != COLOR_DEFAULT);\n#endif  // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS\n  // The '!= 0' comparison is necessary to satisfy MSVC 7.1.\n\n  if (!use_color) {\n    vprintf(fmt, args);\n    va_end(args);\n    return;\n  }\n\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n  const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);\n\n  // Gets the current text color.\n  CONSOLE_SCREEN_BUFFER_INFO buffer_info;\n  GetConsoleScreenBufferInfo(stdout_handle, &buffer_info);\n  const WORD old_color_attrs = buffer_info.wAttributes;\n\n  // We need to flush the stream buffers into the console before each\n  // SetConsoleTextAttribute call lest it affect the text that is already\n  // printed but has not yet reached the console.\n  fflush(stdout);\n  SetConsoleTextAttribute(stdout_handle,\n                          GetColorAttribute(color) | FOREGROUND_INTENSITY);\n  vprintf(fmt, args);\n\n  fflush(stdout);\n  // Restores the text color.\n  SetConsoleTextAttribute(stdout_handle, old_color_attrs);\n#else\n  printf(\"\\033[0;3%sm\", GetAnsiColorCode(color));\n  vprintf(fmt, args);\n  printf(\"\\033[m\");  // Resets the terminal to default.\n#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n  va_end(args);\n}\n\n// Text printed in Google Test's text output and --gunit_list_tests\n// output to label the type parameter and value parameter for a test.\nstatic const char kTypeParamLabel[] = \"TypeParam\";\nstatic const char kValueParamLabel[] = \"GetParam()\";\n\nvoid PrintFullTestCommentIfPresent(const TestInfo& test_info) {\n  const char* const type_param = test_info.type_param();\n  const char* const value_param = test_info.value_param();\n\n  if (type_param != NULL || value_param != NULL) {\n    printf(\", where \");\n    if (type_param != NULL) {\n      printf(\"%s = %s\", kTypeParamLabel, type_param);\n      if (value_param != NULL)\n        printf(\" and \");\n    }\n    if (value_param != NULL) {\n      printf(\"%s = %s\", kValueParamLabel, value_param);\n    }\n  }\n}\n\n// This class implements the TestEventListener interface.\n//\n// Class PrettyUnitTestResultPrinter is copyable.\nclass PrettyUnitTestResultPrinter : public TestEventListener {\n public:\n  PrettyUnitTestResultPrinter() {}\n  static void PrintTestName(const char * test_case, const char * test) {\n    printf(\"%s.%s\", test_case, test);\n  }\n\n  // The following methods override what's in the TestEventListener class.\n  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestCaseStart(const TestCase& test_case);\n  virtual void OnTestStart(const TestInfo& test_info);\n  virtual void OnTestPartResult(const TestPartResult& result);\n  virtual void OnTestEnd(const TestInfo& test_info);\n  virtual void OnTestCaseEnd(const TestCase& test_case);\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}\n  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);\n  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}\n\n private:\n  static void PrintFailedTests(const UnitTest& unit_test);\n};\n\n  // Fired before each iteration of tests starts.\nvoid PrettyUnitTestResultPrinter::OnTestIterationStart(\n    const UnitTest& unit_test, int iteration) {\n  if (GTEST_FLAG(repeat) != 1)\n    printf(\"\\nRepeating all tests (iteration %d) . . .\\n\\n\", iteration + 1);\n\n  const char* const filter = GTEST_FLAG(filter).c_str();\n\n  // Prints the filter if it's not *.  This reminds the user that some\n  // tests may be skipped.\n  if (!String::CStringEquals(filter, kUniversalFilter)) {\n    ColoredPrintf(COLOR_YELLOW,\n                  \"Note: %s filter = %s\\n\", GTEST_NAME_, filter);\n  }\n\n  if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {\n    const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);\n    ColoredPrintf(COLOR_YELLOW,\n                  \"Note: This is test shard %d of %s.\\n\",\n                  static_cast<int>(shard_index) + 1,\n                  internal::posix::GetEnv(kTestTotalShards));\n  }\n\n  if (GTEST_FLAG(shuffle)) {\n    ColoredPrintf(COLOR_YELLOW,\n                  \"Note: Randomizing tests' orders with a seed of %d .\\n\",\n                  unit_test.random_seed());\n  }\n\n  ColoredPrintf(COLOR_GREEN,  \"[==========] \");\n  printf(\"Running %s from %s.\\n\",\n         FormatTestCount(unit_test.test_to_run_count()).c_str(),\n         FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str());\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart(\n    const UnitTest& /*unit_test*/) {\n  ColoredPrintf(COLOR_GREEN,  \"[----------] \");\n  printf(\"Global test environment set-up.\\n\");\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) {\n  const std::string counts =\n      FormatCountableNoun(test_case.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(COLOR_GREEN, \"[----------] \");\n  printf(\"%s from %s\", counts.c_str(), test_case.name());\n  if (test_case.type_param() == NULL) {\n    printf(\"\\n\");\n  } else {\n    printf(\", where %s = %s\\n\", kTypeParamLabel, test_case.type_param());\n  }\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {\n  ColoredPrintf(COLOR_GREEN,  \"[ RUN      ] \");\n  PrintTestName(test_info.test_case_name(), test_info.name());\n  printf(\"\\n\");\n  fflush(stdout);\n}\n\n// Called after an assertion failure.\nvoid PrettyUnitTestResultPrinter::OnTestPartResult(\n    const TestPartResult& result) {\n  // If the test part succeeded, we don't need to do anything.\n  if (result.type() == TestPartResult::kSuccess)\n    return;\n\n  // Print failure message from the assertion (e.g. expected this and got that).\n  PrintTestPartResult(result);\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {\n  if (test_info.result()->Passed()) {\n    ColoredPrintf(COLOR_GREEN, \"[       OK ] \");\n  } else {\n    ColoredPrintf(COLOR_RED, \"[  FAILED  ] \");\n  }\n  PrintTestName(test_info.test_case_name(), test_info.name());\n  if (test_info.result()->Failed())\n    PrintFullTestCommentIfPresent(test_info);\n\n  if (GTEST_FLAG(print_time)) {\n    printf(\" (%s ms)\\n\", internal::StreamableToString(\n           test_info.result()->elapsed_time()).c_str());\n  } else {\n    printf(\"\\n\");\n  }\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) {\n  if (!GTEST_FLAG(print_time)) return;\n\n  const std::string counts =\n      FormatCountableNoun(test_case.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(COLOR_GREEN, \"[----------] \");\n  printf(\"%s from %s (%s ms total)\\n\\n\",\n         counts.c_str(), test_case.name(),\n         internal::StreamableToString(test_case.elapsed_time()).c_str());\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart(\n    const UnitTest& /*unit_test*/) {\n  ColoredPrintf(COLOR_GREEN,  \"[----------] \");\n  printf(\"Global test environment tear-down\\n\");\n  fflush(stdout);\n}\n\n// Internal helper for printing the list of failed tests.\nvoid PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {\n  const int failed_test_count = unit_test.failed_test_count();\n  if (failed_test_count == 0) {\n    return;\n  }\n\n  for (int i = 0; i < unit_test.total_test_case_count(); ++i) {\n    const TestCase& test_case = *unit_test.GetTestCase(i);\n    if (!test_case.should_run() || (test_case.failed_test_count() == 0)) {\n      continue;\n    }\n    for (int j = 0; j < test_case.total_test_count(); ++j) {\n      const TestInfo& test_info = *test_case.GetTestInfo(j);\n      if (!test_info.should_run() || test_info.result()->Passed()) {\n        continue;\n      }\n      ColoredPrintf(COLOR_RED, \"[  FAILED  ] \");\n      printf(\"%s.%s\", test_case.name(), test_info.name());\n      PrintFullTestCommentIfPresent(test_info);\n      printf(\"\\n\");\n    }\n  }\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                     int /*iteration*/) {\n  ColoredPrintf(COLOR_GREEN,  \"[==========] \");\n  printf(\"%s from %s ran.\",\n         FormatTestCount(unit_test.test_to_run_count()).c_str(),\n         FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str());\n  if (GTEST_FLAG(print_time)) {\n    printf(\" (%s ms total)\",\n           internal::StreamableToString(unit_test.elapsed_time()).c_str());\n  }\n  printf(\"\\n\");\n  ColoredPrintf(COLOR_GREEN,  \"[  PASSED  ] \");\n  printf(\"%s.\\n\", FormatTestCount(unit_test.successful_test_count()).c_str());\n\n  int num_failures = unit_test.failed_test_count();\n  if (!unit_test.Passed()) {\n    const int failed_test_count = unit_test.failed_test_count();\n    ColoredPrintf(COLOR_RED,  \"[  FAILED  ] \");\n    printf(\"%s, listed below:\\n\", FormatTestCount(failed_test_count).c_str());\n    PrintFailedTests(unit_test);\n    printf(\"\\n%2d FAILED %s\\n\", num_failures,\n                        num_failures == 1 ? \"TEST\" : \"TESTS\");\n  }\n\n  int num_disabled = unit_test.disabled_test_count();\n  if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) {\n    if (!num_failures) {\n      printf(\"\\n\");  // Add a spacer if no FAILURE banner is displayed.\n    }\n    ColoredPrintf(COLOR_YELLOW,\n                  \"  YOU HAVE %d DISABLED %s\\n\\n\",\n                  num_disabled,\n                  num_disabled == 1 ? \"TEST\" : \"TESTS\");\n  }\n  // Ensure that Google Test output is printed before, e.g., heapchecker output.\n  fflush(stdout);\n}\n\n// End PrettyUnitTestResultPrinter\n\n// class TestEventRepeater\n//\n// This class forwards events to other event listeners.\nclass TestEventRepeater : public TestEventListener {\n public:\n  TestEventRepeater() : forwarding_enabled_(true) {}\n  virtual ~TestEventRepeater();\n  void Append(TestEventListener *listener);\n  TestEventListener* Release(TestEventListener* listener);\n\n  // Controls whether events will be forwarded to listeners_. Set to false\n  // in death test child processes.\n  bool forwarding_enabled() const { return forwarding_enabled_; }\n  void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; }\n\n  virtual void OnTestProgramStart(const UnitTest& unit_test);\n  virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test);\n  virtual void OnTestCaseStart(const TestCase& test_case);\n  virtual void OnTestStart(const TestInfo& test_info);\n  virtual void OnTestPartResult(const TestPartResult& result);\n  virtual void OnTestEnd(const TestInfo& test_info);\n  virtual void OnTestCaseEnd(const TestCase& test_case);\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test);\n  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);\n  virtual void OnTestProgramEnd(const UnitTest& unit_test);\n\n private:\n  // Controls whether events will be forwarded to listeners_. Set to false\n  // in death test child processes.\n  bool forwarding_enabled_;\n  // The list of listeners that receive events.\n  std::vector<TestEventListener*> listeners_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater);\n};\n\nTestEventRepeater::~TestEventRepeater() {\n  ForEach(listeners_, Delete<TestEventListener>);\n}\n\nvoid TestEventRepeater::Append(TestEventListener *listener) {\n  listeners_.push_back(listener);\n}\n\n// TODO(vladl@google.com): Factor the search functionality into Vector::Find.\nTestEventListener* TestEventRepeater::Release(TestEventListener *listener) {\n  for (size_t i = 0; i < listeners_.size(); ++i) {\n    if (listeners_[i] == listener) {\n      listeners_.erase(listeners_.begin() + i);\n      return listener;\n    }\n  }\n\n  return NULL;\n}\n\n// Since most methods are very similar, use macros to reduce boilerplate.\n// This defines a member that forwards the call to all listeners.\n#define GTEST_REPEATER_METHOD_(Name, Type) \\\nvoid TestEventRepeater::Name(const Type& parameter) { \\\n  if (forwarding_enabled_) { \\\n    for (size_t i = 0; i < listeners_.size(); i++) { \\\n      listeners_[i]->Name(parameter); \\\n    } \\\n  } \\\n}\n// This defines a member that forwards the call to all listeners in reverse\n// order.\n#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \\\nvoid TestEventRepeater::Name(const Type& parameter) { \\\n  if (forwarding_enabled_) { \\\n    for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) { \\\n      listeners_[i]->Name(parameter); \\\n    } \\\n  } \\\n}\n\nGTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest)\nGTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest)\nGTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase)\nGTEST_REPEATER_METHOD_(OnTestStart, TestInfo)\nGTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult)\nGTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo)\nGTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase)\nGTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest)\n\n#undef GTEST_REPEATER_METHOD_\n#undef GTEST_REVERSE_REPEATER_METHOD_\n\nvoid TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test,\n                                             int iteration) {\n  if (forwarding_enabled_) {\n    for (size_t i = 0; i < listeners_.size(); i++) {\n      listeners_[i]->OnTestIterationStart(unit_test, iteration);\n    }\n  }\n}\n\nvoid TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test,\n                                           int iteration) {\n  if (forwarding_enabled_) {\n    for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) {\n      listeners_[i]->OnTestIterationEnd(unit_test, iteration);\n    }\n  }\n}\n\n// End TestEventRepeater\n\n// This class generates an XML output file.\nclass XmlUnitTestResultPrinter : public EmptyTestEventListener {\n public:\n  explicit XmlUnitTestResultPrinter(const char* output_file);\n\n  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);\n\n private:\n  // Is c a whitespace character that is normalized to a space character\n  // when it appears in an XML attribute value?\n  static bool IsNormalizableWhitespace(char c) {\n    return c == 0x9 || c == 0xA || c == 0xD;\n  }\n\n  // May c appear in a well-formed XML document?\n  static bool IsValidXmlCharacter(char c) {\n    return IsNormalizableWhitespace(c) || c >= 0x20;\n  }\n\n  // Returns an XML-escaped copy of the input string str.  If\n  // is_attribute is true, the text is meant to appear as an attribute\n  // value, and normalizable whitespace is preserved by replacing it\n  // with character references.\n  static std::string EscapeXml(const std::string& str, bool is_attribute);\n\n  // Returns the given string with all characters invalid in XML removed.\n  static std::string RemoveInvalidXmlCharacters(const std::string& str);\n\n  // Convenience wrapper around EscapeXml when str is an attribute value.\n  static std::string EscapeXmlAttribute(const std::string& str) {\n    return EscapeXml(str, true);\n  }\n\n  // Convenience wrapper around EscapeXml when str is not an attribute value.\n  static std::string EscapeXmlText(const char* str) {\n    return EscapeXml(str, false);\n  }\n\n  // Verifies that the given attribute belongs to the given element and\n  // streams the attribute as XML.\n  static void OutputXmlAttribute(std::ostream* stream,\n                                 const std::string& element_name,\n                                 const std::string& name,\n                                 const std::string& value);\n\n  // Streams an XML CDATA section, escaping invalid CDATA sequences as needed.\n  static void OutputXmlCDataSection(::std::ostream* stream, const char* data);\n\n  // Streams an XML representation of a TestInfo object.\n  static void OutputXmlTestInfo(::std::ostream* stream,\n                                const char* test_case_name,\n                                const TestInfo& test_info);\n\n  // Prints an XML representation of a TestCase object\n  static void PrintXmlTestCase(::std::ostream* stream,\n                               const TestCase& test_case);\n\n  // Prints an XML summary of unit_test to output stream out.\n  static void PrintXmlUnitTest(::std::ostream* stream,\n                               const UnitTest& unit_test);\n\n  // Produces a string representing the test properties in a result as space\n  // delimited XML attributes based on the property key=\"value\" pairs.\n  // When the std::string is not empty, it includes a space at the beginning,\n  // to delimit this attribute from prior attributes.\n  static std::string TestPropertiesAsXmlAttributes(const TestResult& result);\n\n  // The output file.\n  const std::string output_file_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter);\n};\n\n// Creates a new XmlUnitTestResultPrinter.\nXmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file)\n    : output_file_(output_file) {\n  if (output_file_.c_str() == NULL || output_file_.empty()) {\n    fprintf(stderr, \"XML output file may not be null\\n\");\n    fflush(stderr);\n    exit(EXIT_FAILURE);\n  }\n}\n\n// Called after the unit test ends.\nvoid XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                  int /*iteration*/) {\n  FILE* xmlout = NULL;\n  FilePath output_file(output_file_);\n  FilePath output_dir(output_file.RemoveFileName());\n\n  if (output_dir.CreateDirectoriesRecursively()) {\n    xmlout = posix::FOpen(output_file_.c_str(), \"w\");\n  }\n  if (xmlout == NULL) {\n    // TODO(wan): report the reason of the failure.\n    //\n    // We don't do it for now as:\n    //\n    //   1. There is no urgent need for it.\n    //   2. It's a bit involved to make the errno variable thread-safe on\n    //      all three operating systems (Linux, Windows, and Mac OS).\n    //   3. To interpret the meaning of errno in a thread-safe way,\n    //      we need the strerror_r() function, which is not available on\n    //      Windows.\n    fprintf(stderr,\n            \"Unable to open file \\\"%s\\\"\\n\",\n            output_file_.c_str());\n    fflush(stderr);\n    exit(EXIT_FAILURE);\n  }\n  std::stringstream stream;\n  PrintXmlUnitTest(&stream, unit_test);\n  fprintf(xmlout, \"%s\", StringStreamToString(&stream).c_str());\n  fclose(xmlout);\n}\n\n// Returns an XML-escaped copy of the input string str.  If is_attribute\n// is true, the text is meant to appear as an attribute value, and\n// normalizable whitespace is preserved by replacing it with character\n// references.\n//\n// Invalid XML characters in str, if any, are stripped from the output.\n// It is expected that most, if not all, of the text processed by this\n// module will consist of ordinary English text.\n// If this module is ever modified to produce version 1.1 XML output,\n// most invalid characters can be retained using character references.\n// TODO(wan): It might be nice to have a minimally invasive, human-readable\n// escaping scheme for invalid characters, rather than dropping them.\nstd::string XmlUnitTestResultPrinter::EscapeXml(\n    const std::string& str, bool is_attribute) {\n  Message m;\n\n  for (size_t i = 0; i < str.size(); ++i) {\n    const char ch = str[i];\n    switch (ch) {\n      case '<':\n        m << \"&lt;\";\n        break;\n      case '>':\n        m << \"&gt;\";\n        break;\n      case '&':\n        m << \"&amp;\";\n        break;\n      case '\\'':\n        if (is_attribute)\n          m << \"&apos;\";\n        else\n          m << '\\'';\n        break;\n      case '\"':\n        if (is_attribute)\n          m << \"&quot;\";\n        else\n          m << '\"';\n        break;\n      default:\n        if (IsValidXmlCharacter(ch)) {\n          if (is_attribute && IsNormalizableWhitespace(ch))\n            m << \"&#x\" << String::FormatByte(static_cast<unsigned char>(ch))\n              << \";\";\n          else\n            m << ch;\n        }\n        break;\n    }\n  }\n\n  return m.GetString();\n}\n\n// Returns the given string with all characters invalid in XML removed.\n// Currently invalid characters are dropped from the string. An\n// alternative is to replace them with certain characters such as . or ?.\nstd::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(\n    const std::string& str) {\n  std::string output;\n  output.reserve(str.size());\n  for (std::string::const_iterator it = str.begin(); it != str.end(); ++it)\n    if (IsValidXmlCharacter(*it))\n      output.push_back(*it);\n\n  return output;\n}\n\n// The following routines generate an XML representation of a UnitTest\n// object.\n//\n// This is how Google Test concepts map to the DTD:\n//\n// <testsuites name=\"AllTests\">        <-- corresponds to a UnitTest object\n//   <testsuite name=\"testcase-name\">  <-- corresponds to a TestCase object\n//     <testcase name=\"test-name\">     <-- corresponds to a TestInfo object\n//       <failure message=\"...\">...</failure>\n//       <failure message=\"...\">...</failure>\n//       <failure message=\"...\">...</failure>\n//                                     <-- individual assertion failures\n//     </testcase>\n//   </testsuite>\n// </testsuites>\n\n// Formats the given time in milliseconds as seconds.\nstd::string FormatTimeInMillisAsSeconds(TimeInMillis ms) {\n  ::std::stringstream ss;\n  ss << ms/1000.0;\n  return ss.str();\n}\n\n// Converts the given epoch time in milliseconds to a date string in the ISO\n// 8601 format, without the timezone information.\nstd::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) {\n  // Using non-reentrant version as localtime_r is not portable.\n  time_t seconds = static_cast<time_t>(ms / 1000);\n#ifdef _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4996)  // Temporarily disables warning 4996\n                                // (function or variable may be unsafe).\n  const struct tm* const time_struct = localtime(&seconds);  // NOLINT\n# pragma warning(pop)           // Restores the warning state again.\n#else\n  const struct tm* const time_struct = localtime(&seconds);  // NOLINT\n#endif\n  if (time_struct == NULL)\n    return \"\";  // Invalid ms value\n\n  // YYYY-MM-DDThh:mm:ss\n  return StreamableToString(time_struct->tm_year + 1900) + \"-\" +\n      String::FormatIntWidth2(time_struct->tm_mon + 1) + \"-\" +\n      String::FormatIntWidth2(time_struct->tm_mday) + \"T\" +\n      String::FormatIntWidth2(time_struct->tm_hour) + \":\" +\n      String::FormatIntWidth2(time_struct->tm_min) + \":\" +\n      String::FormatIntWidth2(time_struct->tm_sec);\n}\n\n// Streams an XML CDATA section, escaping invalid CDATA sequences as needed.\nvoid XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream,\n                                                     const char* data) {\n  const char* segment = data;\n  *stream << \"<![CDATA[\";\n  for (;;) {\n    const char* const next_segment = strstr(segment, \"]]>\");\n    if (next_segment != NULL) {\n      stream->write(\n          segment, static_cast<std::streamsize>(next_segment - segment));\n      *stream << \"]]>]]&gt;<![CDATA[\";\n      segment = next_segment + strlen(\"]]>\");\n    } else {\n      *stream << segment;\n      break;\n    }\n  }\n  *stream << \"]]>\";\n}\n\nvoid XmlUnitTestResultPrinter::OutputXmlAttribute(\n    std::ostream* stream,\n    const std::string& element_name,\n    const std::string& name,\n    const std::string& value) {\n  const std::vector<std::string>& allowed_names =\n      GetReservedAttributesForElement(element_name);\n\n  GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) !=\n                   allowed_names.end())\n      << \"Attribute \" << name << \" is not allowed for element <\" << element_name\n      << \">.\";\n\n  *stream << \" \" << name << \"=\\\"\" << EscapeXmlAttribute(value) << \"\\\"\";\n}\n\n// Prints an XML representation of a TestInfo object.\n// TODO(wan): There is also value in printing properties with the plain printer.\nvoid XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,\n                                                 const char* test_case_name,\n                                                 const TestInfo& test_info) {\n  const TestResult& result = *test_info.result();\n  const std::string kTestcase = \"testcase\";\n\n  *stream << \"    <testcase\";\n  OutputXmlAttribute(stream, kTestcase, \"name\", test_info.name());\n\n  if (test_info.value_param() != NULL) {\n    OutputXmlAttribute(stream, kTestcase, \"value_param\",\n                       test_info.value_param());\n  }\n  if (test_info.type_param() != NULL) {\n    OutputXmlAttribute(stream, kTestcase, \"type_param\", test_info.type_param());\n  }\n\n  OutputXmlAttribute(stream, kTestcase, \"status\",\n                     test_info.should_run() ? \"run\" : \"notrun\");\n  OutputXmlAttribute(stream, kTestcase, \"time\",\n                     FormatTimeInMillisAsSeconds(result.elapsed_time()));\n  OutputXmlAttribute(stream, kTestcase, \"classname\", test_case_name);\n  *stream << TestPropertiesAsXmlAttributes(result);\n\n  int failures = 0;\n  for (int i = 0; i < result.total_part_count(); ++i) {\n    const TestPartResult& part = result.GetTestPartResult(i);\n    if (part.failed()) {\n      if (++failures == 1) {\n        *stream << \">\\n\";\n      }\n      const string location = internal::FormatCompilerIndependentFileLocation(\n          part.file_name(), part.line_number());\n      const string summary = location + \"\\n\" + part.summary();\n      *stream << \"      <failure message=\\\"\"\n              << EscapeXmlAttribute(summary.c_str())\n              << \"\\\" type=\\\"\\\">\";\n      const string detail = location + \"\\n\" + part.message();\n      OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str());\n      *stream << \"</failure>\\n\";\n    }\n  }\n\n  if (failures == 0)\n    *stream << \" />\\n\";\n  else\n    *stream << \"    </testcase>\\n\";\n}\n\n// Prints an XML representation of a TestCase object\nvoid XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream,\n                                                const TestCase& test_case) {\n  const std::string kTestsuite = \"testsuite\";\n  *stream << \"  <\" << kTestsuite;\n  OutputXmlAttribute(stream, kTestsuite, \"name\", test_case.name());\n  OutputXmlAttribute(stream, kTestsuite, \"tests\",\n                     StreamableToString(test_case.total_test_count()));\n  OutputXmlAttribute(stream, kTestsuite, \"failures\",\n                     StreamableToString(test_case.failed_test_count()));\n  OutputXmlAttribute(stream, kTestsuite, \"disabled\",\n                     StreamableToString(test_case.disabled_test_count()));\n  OutputXmlAttribute(stream, kTestsuite, \"errors\", \"0\");\n  OutputXmlAttribute(stream, kTestsuite, \"time\",\n                     FormatTimeInMillisAsSeconds(test_case.elapsed_time()));\n  *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result())\n          << \">\\n\";\n\n  for (int i = 0; i < test_case.total_test_count(); ++i)\n    OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i));\n  *stream << \"  </\" << kTestsuite << \">\\n\";\n}\n\n// Prints an XML summary of unit_test to output stream out.\nvoid XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream,\n                                                const UnitTest& unit_test) {\n  const std::string kTestsuites = \"testsuites\";\n\n  *stream << \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\";\n  *stream << \"<\" << kTestsuites;\n\n  OutputXmlAttribute(stream, kTestsuites, \"tests\",\n                     StreamableToString(unit_test.total_test_count()));\n  OutputXmlAttribute(stream, kTestsuites, \"failures\",\n                     StreamableToString(unit_test.failed_test_count()));\n  OutputXmlAttribute(stream, kTestsuites, \"disabled\",\n                     StreamableToString(unit_test.disabled_test_count()));\n  OutputXmlAttribute(stream, kTestsuites, \"errors\", \"0\");\n  OutputXmlAttribute(\n      stream, kTestsuites, \"timestamp\",\n      FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp()));\n  OutputXmlAttribute(stream, kTestsuites, \"time\",\n                     FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));\n\n  if (GTEST_FLAG(shuffle)) {\n    OutputXmlAttribute(stream, kTestsuites, \"random_seed\",\n                       StreamableToString(unit_test.random_seed()));\n  }\n\n  *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result());\n\n  OutputXmlAttribute(stream, kTestsuites, \"name\", \"AllTests\");\n  *stream << \">\\n\";\n\n\n  for (int i = 0; i < unit_test.total_test_case_count(); ++i) {\n    PrintXmlTestCase(stream, *unit_test.GetTestCase(i));\n  }\n  *stream << \"</\" << kTestsuites << \">\\n\";\n}\n\n// Produces a string representing the test properties in a result as space\n// delimited XML attributes based on the property key=\"value\" pairs.\nstd::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(\n    const TestResult& result) {\n  Message attributes;\n  for (int i = 0; i < result.test_property_count(); ++i) {\n    const TestProperty& property = result.GetTestProperty(i);\n    attributes << \" \" << property.key() << \"=\"\n        << \"\\\"\" << EscapeXmlAttribute(property.value()) << \"\\\"\";\n  }\n  return attributes.GetString();\n}\n\n// End XmlUnitTestResultPrinter\n\n#if GTEST_CAN_STREAM_RESULTS_\n\n// Checks if str contains '=', '&', '%' or '\\n' characters. If yes,\n// replaces them by \"%xx\" where xx is their hexadecimal value. For\n// example, replaces \"=\" with \"%3D\".  This algorithm is O(strlen(str))\n// in both time and space -- important as the input str may contain an\n// arbitrarily long test failure message and stack trace.\nstring StreamingListener::UrlEncode(const char* str) {\n  string result;\n  result.reserve(strlen(str) + 1);\n  for (char ch = *str; ch != '\\0'; ch = *++str) {\n    switch (ch) {\n      case '%':\n      case '=':\n      case '&':\n      case '\\n':\n        result.append(\"%\" + String::FormatByte(static_cast<unsigned char>(ch)));\n        break;\n      default:\n        result.push_back(ch);\n        break;\n    }\n  }\n  return result;\n}\n\nvoid StreamingListener::SocketWriter::MakeConnection() {\n  GTEST_CHECK_(sockfd_ == -1)\n      << \"MakeConnection() can't be called when there is already a connection.\";\n\n  addrinfo hints;\n  memset(&hints, 0, sizeof(hints));\n  hints.ai_family = AF_UNSPEC;    // To allow both IPv4 and IPv6 addresses.\n  hints.ai_socktype = SOCK_STREAM;\n  addrinfo* servinfo = NULL;\n\n  // Use the getaddrinfo() to get a linked list of IP addresses for\n  // the given host name.\n  const int error_num = getaddrinfo(\n      host_name_.c_str(), port_num_.c_str(), &hints, &servinfo);\n  if (error_num != 0) {\n    GTEST_LOG_(WARNING) << \"stream_result_to: getaddrinfo() failed: \"\n                        << gai_strerror(error_num);\n  }\n\n  // Loop through all the results and connect to the first we can.\n  for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL;\n       cur_addr = cur_addr->ai_next) {\n    sockfd_ = socket(\n        cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol);\n    if (sockfd_ != -1) {\n      // Connect the client socket to the server socket.\n      if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) {\n        close(sockfd_);\n        sockfd_ = -1;\n      }\n    }\n  }\n\n  freeaddrinfo(servinfo);  // all done with this structure\n\n  if (sockfd_ == -1) {\n    GTEST_LOG_(WARNING) << \"stream_result_to: failed to connect to \"\n                        << host_name_ << \":\" << port_num_;\n  }\n}\n\n// End of class Streaming Listener\n#endif  // GTEST_CAN_STREAM_RESULTS__\n\n// Class ScopedTrace\n\n// Pushes the given source file location and message onto a per-thread\n// trace stack maintained by Google Test.\nScopedTrace::ScopedTrace(const char* file, int line, const Message& message)\n    GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) {\n  TraceInfo trace;\n  trace.file = file;\n  trace.line = line;\n  trace.message = message.GetString();\n\n  UnitTest::GetInstance()->PushGTestTrace(trace);\n}\n\n// Pops the info pushed by the c'tor.\nScopedTrace::~ScopedTrace()\n    GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) {\n  UnitTest::GetInstance()->PopGTestTrace();\n}\n\n\n// class OsStackTraceGetter\n\n// Returns the current OS stack trace as an std::string.  Parameters:\n//\n//   max_depth  - the maximum number of stack frames to be included\n//                in the trace.\n//   skip_count - the number of top frames to be skipped; doesn't count\n//                against max_depth.\n//\nstring OsStackTraceGetter::CurrentStackTrace(int /* max_depth */,\n                                             int /* skip_count */)\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  return \"\";\n}\n\nvoid OsStackTraceGetter::UponLeavingGTest()\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n}\n\nconst char* const\nOsStackTraceGetter::kElidedFramesMarker =\n    \"... \" GTEST_NAME_ \" internal frames ...\";\n\n}  // namespace internal\n\n// class TestEventListeners\n\nTestEventListeners::TestEventListeners()\n    : repeater_(new internal::TestEventRepeater()),\n      default_result_printer_(NULL),\n      default_xml_generator_(NULL) {\n}\n\nTestEventListeners::~TestEventListeners() { delete repeater_; }\n\n// Returns the standard listener responsible for the default console\n// output.  Can be removed from the listeners list to shut down default\n// console output.  Note that removing this object from the listener list\n// with Release transfers its ownership to the user.\nvoid TestEventListeners::Append(TestEventListener* listener) {\n  repeater_->Append(listener);\n}\n\n// Removes the given event listener from the list and returns it.  It then\n// becomes the caller's responsibility to delete the listener. Returns\n// NULL if the listener is not found in the list.\nTestEventListener* TestEventListeners::Release(TestEventListener* listener) {\n  if (listener == default_result_printer_)\n    default_result_printer_ = NULL;\n  else if (listener == default_xml_generator_)\n    default_xml_generator_ = NULL;\n  return repeater_->Release(listener);\n}\n\n// Returns repeater that broadcasts the TestEventListener events to all\n// subscribers.\nTestEventListener* TestEventListeners::repeater() { return repeater_; }\n\n// Sets the default_result_printer attribute to the provided listener.\n// The listener is also added to the listener list and previous\n// default_result_printer is removed from it and deleted. The listener can\n// also be NULL in which case it will not be added to the list. Does\n// nothing if the previous and the current listener objects are the same.\nvoid TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) {\n  if (default_result_printer_ != listener) {\n    // It is an error to pass this method a listener that is already in the\n    // list.\n    delete Release(default_result_printer_);\n    default_result_printer_ = listener;\n    if (listener != NULL)\n      Append(listener);\n  }\n}\n\n// Sets the default_xml_generator attribute to the provided listener.  The\n// listener is also added to the listener list and previous\n// default_xml_generator is removed from it and deleted. The listener can\n// also be NULL in which case it will not be added to the list. Does\n// nothing if the previous and the current listener objects are the same.\nvoid TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) {\n  if (default_xml_generator_ != listener) {\n    // It is an error to pass this method a listener that is already in the\n    // list.\n    delete Release(default_xml_generator_);\n    default_xml_generator_ = listener;\n    if (listener != NULL)\n      Append(listener);\n  }\n}\n\n// Controls whether events will be forwarded by the repeater to the\n// listeners in the list.\nbool TestEventListeners::EventForwardingEnabled() const {\n  return repeater_->forwarding_enabled();\n}\n\nvoid TestEventListeners::SuppressEventForwarding() {\n  repeater_->set_forwarding_enabled(false);\n}\n\n// class UnitTest\n\n// Gets the singleton UnitTest object.  The first time this method is\n// called, a UnitTest object is constructed and returned.  Consecutive\n// calls will return the same object.\n//\n// We don't protect this under mutex_ as a user is not supposed to\n// call this before main() starts, from which point on the return\n// value will never change.\nUnitTest* UnitTest::GetInstance() {\n  // When compiled with MSVC 7.1 in optimized mode, destroying the\n  // UnitTest object upon exiting the program messes up the exit code,\n  // causing successful tests to appear failed.  We have to use a\n  // different implementation in this case to bypass the compiler bug.\n  // This implementation makes the compiler happy, at the cost of\n  // leaking the UnitTest object.\n\n  // CodeGear C++Builder insists on a public destructor for the\n  // default implementation.  Use this implementation to keep good OO\n  // design with private destructor.\n\n#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__)\n  static UnitTest* const instance = new UnitTest;\n  return instance;\n#else\n  static UnitTest instance;\n  return &instance;\n#endif  // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__)\n}\n\n// Gets the number of successful test cases.\nint UnitTest::successful_test_case_count() const {\n  return impl()->successful_test_case_count();\n}\n\n// Gets the number of failed test cases.\nint UnitTest::failed_test_case_count() const {\n  return impl()->failed_test_case_count();\n}\n\n// Gets the number of all test cases.\nint UnitTest::total_test_case_count() const {\n  return impl()->total_test_case_count();\n}\n\n// Gets the number of all test cases that contain at least one test\n// that should run.\nint UnitTest::test_case_to_run_count() const {\n  return impl()->test_case_to_run_count();\n}\n\n// Gets the number of successful tests.\nint UnitTest::successful_test_count() const {\n  return impl()->successful_test_count();\n}\n\n// Gets the number of failed tests.\nint UnitTest::failed_test_count() const { return impl()->failed_test_count(); }\n\n// Gets the number of disabled tests.\nint UnitTest::disabled_test_count() const {\n  return impl()->disabled_test_count();\n}\n\n// Gets the number of all tests.\nint UnitTest::total_test_count() const { return impl()->total_test_count(); }\n\n// Gets the number of tests that should run.\nint UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); }\n\n// Gets the time of the test program start, in ms from the start of the\n// UNIX epoch.\ninternal::TimeInMillis UnitTest::start_timestamp() const {\n    return impl()->start_timestamp();\n}\n\n// Gets the elapsed time, in milliseconds.\ninternal::TimeInMillis UnitTest::elapsed_time() const {\n  return impl()->elapsed_time();\n}\n\n// Returns true iff the unit test passed (i.e. all test cases passed).\nbool UnitTest::Passed() const { return impl()->Passed(); }\n\n// Returns true iff the unit test failed (i.e. some test case failed\n// or something outside of all tests failed).\nbool UnitTest::Failed() const { return impl()->Failed(); }\n\n// Gets the i-th test case among all the test cases. i can range from 0 to\n// total_test_case_count() - 1. If i is not in that range, returns NULL.\nconst TestCase* UnitTest::GetTestCase(int i) const {\n  return impl()->GetTestCase(i);\n}\n\n// Returns the TestResult containing information on test failures and\n// properties logged outside of individual test cases.\nconst TestResult& UnitTest::ad_hoc_test_result() const {\n  return *impl()->ad_hoc_test_result();\n}\n\n// Gets the i-th test case among all the test cases. i can range from 0 to\n// total_test_case_count() - 1. If i is not in that range, returns NULL.\nTestCase* UnitTest::GetMutableTestCase(int i) {\n  return impl()->GetMutableTestCase(i);\n}\n\n// Returns the list of event listeners that can be used to track events\n// inside Google Test.\nTestEventListeners& UnitTest::listeners() {\n  return *impl()->listeners();\n}\n\n// Registers and returns a global test environment.  When a test\n// program is run, all global test environments will be set-up in the\n// order they were registered.  After all tests in the program have\n// finished, all global test environments will be torn-down in the\n// *reverse* order they were registered.\n//\n// The UnitTest object takes ownership of the given environment.\n//\n// We don't protect this under mutex_, as we only support calling it\n// from the main thread.\nEnvironment* UnitTest::AddEnvironment(Environment* env) {\n  if (env == NULL) {\n    return NULL;\n  }\n\n  impl_->environments().push_back(env);\n  return env;\n}\n\n// Adds a TestPartResult to the current TestResult object.  All Google Test\n// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call\n// this to report their results.  The user code should use the\n// assertion macros instead of calling this directly.\nvoid UnitTest::AddTestPartResult(\n    TestPartResult::Type result_type,\n    const char* file_name,\n    int line_number,\n    const std::string& message,\n    const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) {\n  Message msg;\n  msg << message;\n\n  internal::MutexLock lock(&mutex_);\n  if (impl_->gtest_trace_stack().size() > 0) {\n    msg << \"\\n\" << GTEST_NAME_ << \" trace:\";\n\n    for (int i = static_cast<int>(impl_->gtest_trace_stack().size());\n         i > 0; --i) {\n      const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1];\n      msg << \"\\n\" << internal::FormatFileLocation(trace.file, trace.line)\n          << \" \" << trace.message;\n    }\n  }\n\n  if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) {\n    msg << internal::kStackTraceMarker << os_stack_trace;\n  }\n\n  const TestPartResult result =\n    TestPartResult(result_type, file_name, line_number,\n                   msg.GetString().c_str());\n  impl_->GetTestPartResultReporterForCurrentThread()->\n      ReportTestPartResult(result);\n\n  if (result_type != TestPartResult::kSuccess) {\n    // gtest_break_on_failure takes precedence over\n    // gtest_throw_on_failure.  This allows a user to set the latter\n    // in the code (perhaps in order to use Google Test assertions\n    // with another testing framework) and specify the former on the\n    // command line for debugging.\n    if (GTEST_FLAG(break_on_failure)) {\n#if GTEST_OS_WINDOWS\n      // Using DebugBreak on Windows allows gtest to still break into a debugger\n      // when a failure happens and both the --gtest_break_on_failure and\n      // the --gtest_catch_exceptions flags are specified.\n      DebugBreak();\n#else\n      // Dereference NULL through a volatile pointer to prevent the compiler\n      // from removing. We use this rather than abort() or __builtin_trap() for\n      // portability: Symbian doesn't implement abort() well, and some debuggers\n      // don't correctly trap abort().\n      *static_cast<volatile int*>(NULL) = 1;\n#endif  // GTEST_OS_WINDOWS\n    } else if (GTEST_FLAG(throw_on_failure)) {\n#if GTEST_HAS_EXCEPTIONS\n      throw internal::GoogleTestFailureException(result);\n#else\n      // We cannot call abort() as it generates a pop-up in debug mode\n      // that cannot be suppressed in VC 7.1 or below.\n      exit(1);\n#endif\n    }\n  }\n}\n\n// Adds a TestProperty to the current TestResult object when invoked from\n// inside a test, to current TestCase's ad_hoc_test_result_ when invoked\n// from SetUpTestCase or TearDownTestCase, or to the global property set\n// when invoked elsewhere.  If the result already contains a property with\n// the same key, the value will be updated.\nvoid UnitTest::RecordProperty(const std::string& key,\n                              const std::string& value) {\n  impl_->RecordProperty(TestProperty(key, value));\n}\n\n// Runs all tests in this UnitTest object and prints the result.\n// Returns 0 if successful, or 1 otherwise.\n//\n// We don't protect this under mutex_, as we only support calling it\n// from the main thread.\nint UnitTest::Run() {\n  // Captures the value of GTEST_FLAG(catch_exceptions).  This value will be\n  // used for the duration of the program.\n  impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions));\n\n#if GTEST_HAS_SEH\n  const bool in_death_test_child_process =\n      internal::GTEST_FLAG(internal_run_death_test).length() > 0;\n\n  // Either the user wants Google Test to catch exceptions thrown by the\n  // tests or this is executing in the context of death test child\n  // process. In either case the user does not want to see pop-up dialogs\n  // about crashes - they are expected.\n  if (impl()->catch_exceptions() || in_death_test_child_process) {\n# if !GTEST_OS_WINDOWS_MOBILE\n    // SetErrorMode doesn't exist on CE.\n    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |\n                 SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);\n# endif  // !GTEST_OS_WINDOWS_MOBILE\n\n# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE\n    // Death test children can be terminated with _abort().  On Windows,\n    // _abort() can show a dialog with a warning message.  This forces the\n    // abort message to go to stderr instead.\n    _set_error_mode(_OUT_TO_STDERR);\n# endif\n\n# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE\n    // In the debug version, Visual Studio pops up a separate dialog\n    // offering a choice to debug the aborted program. We need to suppress\n    // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement\n    // executed. Google Test will notify the user of any unexpected\n    // failure via stderr.\n    //\n    // VC++ doesn't define _set_abort_behavior() prior to the version 8.0.\n    // Users of prior VC versions shall suffer the agony and pain of\n    // clicking through the countless debug dialogs.\n    // TODO(vladl@google.com): find a way to suppress the abort dialog() in the\n    // debug mode when compiled with VC 7.1 or lower.\n    if (!GTEST_FLAG(break_on_failure))\n      _set_abort_behavior(\n          0x0,                                    // Clear the following flags:\n          _WRITE_ABORT_MSG | _CALL_REPORTFAULT);  // pop-up window, core dump.\n# endif\n  }\n#endif  // GTEST_HAS_SEH\n\n  return internal::HandleExceptionsInMethodIfSupported(\n      impl(),\n      &internal::UnitTestImpl::RunAllTests,\n      \"auxiliary test code (environments or event listeners)\") ? 0 : 1;\n}\n\n// Returns the working directory when the first TEST() or TEST_F() was\n// executed.\nconst char* UnitTest::original_working_dir() const {\n  return impl_->original_working_dir_.c_str();\n}\n\n// Returns the TestCase object for the test that's currently running,\n// or NULL if no test is running.\nconst TestCase* UnitTest::current_test_case() const\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  return impl_->current_test_case();\n}\n\n// Returns the TestInfo object for the test that's currently running,\n// or NULL if no test is running.\nconst TestInfo* UnitTest::current_test_info() const\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  return impl_->current_test_info();\n}\n\n// Returns the random seed used at the start of the current test run.\nint UnitTest::random_seed() const { return impl_->random_seed(); }\n\n#if GTEST_HAS_PARAM_TEST\n// Returns ParameterizedTestCaseRegistry object used to keep track of\n// value-parameterized tests and instantiate and register them.\ninternal::ParameterizedTestCaseRegistry&\n    UnitTest::parameterized_test_registry()\n        GTEST_LOCK_EXCLUDED_(mutex_) {\n  return impl_->parameterized_test_registry();\n}\n#endif  // GTEST_HAS_PARAM_TEST\n\n// Creates an empty UnitTest.\nUnitTest::UnitTest() {\n  impl_ = new internal::UnitTestImpl(this);\n}\n\n// Destructor of UnitTest.\nUnitTest::~UnitTest() {\n  delete impl_;\n}\n\n// Pushes a trace defined by SCOPED_TRACE() on to the per-thread\n// Google Test trace stack.\nvoid UnitTest::PushGTestTrace(const internal::TraceInfo& trace)\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  impl_->gtest_trace_stack().push_back(trace);\n}\n\n// Pops a trace from the per-thread Google Test trace stack.\nvoid UnitTest::PopGTestTrace()\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  impl_->gtest_trace_stack().pop_back();\n}\n\nnamespace internal {\n\nUnitTestImpl::UnitTestImpl(UnitTest* parent)\n    : parent_(parent),\n#ifdef _MSC_VER\n# pragma warning(push)                    // Saves the current warning state.\n# pragma warning(disable:4355)            // Temporarily disables warning 4355\n                                         // (using this in initializer).\n      default_global_test_part_result_reporter_(this),\n      default_per_thread_test_part_result_reporter_(this),\n# pragma warning(pop)                     // Restores the warning state again.\n#else\n      default_global_test_part_result_reporter_(this),\n      default_per_thread_test_part_result_reporter_(this),\n#endif  // _MSC_VER\n      global_test_part_result_repoter_(\n          &default_global_test_part_result_reporter_),\n      per_thread_test_part_result_reporter_(\n          &default_per_thread_test_part_result_reporter_),\n#if GTEST_HAS_PARAM_TEST\n      parameterized_test_registry_(),\n      parameterized_tests_registered_(false),\n#endif  // GTEST_HAS_PARAM_TEST\n      last_death_test_case_(-1),\n      current_test_case_(NULL),\n      current_test_info_(NULL),\n      ad_hoc_test_result_(),\n      os_stack_trace_getter_(NULL),\n      post_flag_parse_init_performed_(false),\n      random_seed_(0),  // Will be overridden by the flag before first use.\n      random_(0),  // Will be reseeded before first use.\n      start_timestamp_(0),\n      elapsed_time_(0),\n#if GTEST_HAS_DEATH_TEST\n      internal_run_death_test_flag_(NULL),\n      death_test_factory_(new DefaultDeathTestFactory),\n#endif\n      // Will be overridden by the flag before first use.\n      catch_exceptions_(false) {\n  listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter);\n}\n\nUnitTestImpl::~UnitTestImpl() {\n  // Deletes every TestCase.\n  ForEach(test_cases_, internal::Delete<TestCase>);\n\n  // Deletes every Environment.\n  ForEach(environments_, internal::Delete<Environment>);\n\n  delete os_stack_trace_getter_;\n}\n\n// Adds a TestProperty to the current TestResult object when invoked in a\n// context of a test, to current test case's ad_hoc_test_result when invoke\n// from SetUpTestCase/TearDownTestCase, or to the global property set\n// otherwise.  If the result already contains a property with the same key,\n// the value will be updated.\nvoid UnitTestImpl::RecordProperty(const TestProperty& test_property) {\n  std::string xml_element;\n  TestResult* test_result;  // TestResult appropriate for property recording.\n\n  if (current_test_info_ != NULL) {\n    xml_element = \"testcase\";\n    test_result = &(current_test_info_->result_);\n  } else if (current_test_case_ != NULL) {\n    xml_element = \"testsuite\";\n    test_result = &(current_test_case_->ad_hoc_test_result_);\n  } else {\n    xml_element = \"testsuites\";\n    test_result = &ad_hoc_test_result_;\n  }\n  test_result->RecordProperty(xml_element, test_property);\n}\n\n#if GTEST_HAS_DEATH_TEST\n// Disables event forwarding if the control is currently in a death test\n// subprocess. Must not be called before InitGoogleTest.\nvoid UnitTestImpl::SuppressTestEventsIfInSubprocess() {\n  if (internal_run_death_test_flag_.get() != NULL)\n    listeners()->SuppressEventForwarding();\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Initializes event listeners performing XML output as specified by\n// UnitTestOptions. Must not be called before InitGoogleTest.\nvoid UnitTestImpl::ConfigureXmlOutput() {\n  const std::string& output_format = UnitTestOptions::GetOutputFormat();\n  if (output_format == \"xml\") {\n    listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter(\n        UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));\n  } else if (output_format != \"\") {\n    printf(\"WARNING: unrecognized output format \\\"%s\\\" ignored.\\n\",\n           output_format.c_str());\n    fflush(stdout);\n  }\n}\n\n#if GTEST_CAN_STREAM_RESULTS_\n// Initializes event listeners for streaming test results in string form.\n// Must not be called before InitGoogleTest.\nvoid UnitTestImpl::ConfigureStreamingOutput() {\n  const std::string& target = GTEST_FLAG(stream_result_to);\n  if (!target.empty()) {\n    const size_t pos = target.find(':');\n    if (pos != std::string::npos) {\n      listeners()->Append(new StreamingListener(target.substr(0, pos),\n                                                target.substr(pos+1)));\n    } else {\n      printf(\"WARNING: unrecognized streaming target \\\"%s\\\" ignored.\\n\",\n             target.c_str());\n      fflush(stdout);\n    }\n  }\n}\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n// Performs initialization dependent upon flag values obtained in\n// ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to\n// ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest\n// this function is also called from RunAllTests.  Since this function can be\n// called more than once, it has to be idempotent.\nvoid UnitTestImpl::PostFlagParsingInit() {\n  // Ensures that this function does not execute more than once.\n  if (!post_flag_parse_init_performed_) {\n    post_flag_parse_init_performed_ = true;\n\n#if GTEST_HAS_DEATH_TEST\n    InitDeathTestSubprocessControlInfo();\n    SuppressTestEventsIfInSubprocess();\n#endif  // GTEST_HAS_DEATH_TEST\n\n    // Registers parameterized tests. This makes parameterized tests\n    // available to the UnitTest reflection API without running\n    // RUN_ALL_TESTS.\n    RegisterParameterizedTests();\n\n    // Configures listeners for XML output. This makes it possible for users\n    // to shut down the default XML output before invoking RUN_ALL_TESTS.\n    ConfigureXmlOutput();\n\n#if GTEST_CAN_STREAM_RESULTS_\n    // Configures listeners for streaming test results to the specified server.\n    ConfigureStreamingOutput();\n#endif  // GTEST_CAN_STREAM_RESULTS_\n  }\n}\n\n// A predicate that checks the name of a TestCase against a known\n// value.\n//\n// This is used for implementation of the UnitTest class only.  We put\n// it in the anonymous namespace to prevent polluting the outer\n// namespace.\n//\n// TestCaseNameIs is copyable.\nclass TestCaseNameIs {\n public:\n  // Constructor.\n  explicit TestCaseNameIs(const std::string& name)\n      : name_(name) {}\n\n  // Returns true iff the name of test_case matches name_.\n  bool operator()(const TestCase* test_case) const {\n    return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0;\n  }\n\n private:\n  std::string name_;\n};\n\n// Finds and returns a TestCase with the given name.  If one doesn't\n// exist, creates one and returns it.  It's the CALLER'S\n// RESPONSIBILITY to ensure that this function is only called WHEN THE\n// TESTS ARE NOT SHUFFLED.\n//\n// Arguments:\n//\n//   test_case_name: name of the test case\n//   type_param:     the name of the test case's type parameter, or NULL if\n//                   this is not a typed or a type-parameterized test case.\n//   set_up_tc:      pointer to the function that sets up the test case\n//   tear_down_tc:   pointer to the function that tears down the test case\nTestCase* UnitTestImpl::GetTestCase(const char* test_case_name,\n                                    const char* type_param,\n                                    Test::SetUpTestCaseFunc set_up_tc,\n                                    Test::TearDownTestCaseFunc tear_down_tc) {\n  // Can we find a TestCase with the given name?\n  const std::vector<TestCase*>::const_iterator test_case =\n      std::find_if(test_cases_.begin(), test_cases_.end(),\n                   TestCaseNameIs(test_case_name));\n\n  if (test_case != test_cases_.end())\n    return *test_case;\n\n  // No.  Let's create one.\n  TestCase* const new_test_case =\n      new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc);\n\n  // Is this a death test case?\n  if (internal::UnitTestOptions::MatchesFilter(test_case_name,\n                                               kDeathTestCaseFilter)) {\n    // Yes.  Inserts the test case after the last death test case\n    // defined so far.  This only works when the test cases haven't\n    // been shuffled.  Otherwise we may end up running a death test\n    // after a non-death test.\n    ++last_death_test_case_;\n    test_cases_.insert(test_cases_.begin() + last_death_test_case_,\n                       new_test_case);\n  } else {\n    // No.  Appends to the end of the list.\n    test_cases_.push_back(new_test_case);\n  }\n\n  test_case_indices_.push_back(static_cast<int>(test_case_indices_.size()));\n  return new_test_case;\n}\n\n// Helpers for setting up / tearing down the given environment.  They\n// are for use in the ForEach() function.\nstatic void SetUpEnvironment(Environment* env) { env->SetUp(); }\nstatic void TearDownEnvironment(Environment* env) { env->TearDown(); }\n\n// Runs all tests in this UnitTest object, prints the result, and\n// returns true if all tests are successful.  If any exception is\n// thrown during a test, the test is considered to be failed, but the\n// rest of the tests will still be run.\n//\n// When parameterized tests are enabled, it expands and registers\n// parameterized tests first in RegisterParameterizedTests().\n// All other functions called from RunAllTests() may safely assume that\n// parameterized tests are ready to be counted and run.\nbool UnitTestImpl::RunAllTests() {\n  // Makes sure InitGoogleTest() was called.\n  if (!GTestIsInitialized()) {\n    printf(\"%s\",\n           \"\\nThis test program did NOT call ::testing::InitGoogleTest \"\n           \"before calling RUN_ALL_TESTS().  Please fix it.\\n\");\n    return false;\n  }\n\n  // Do not run any test if the --help flag was specified.\n  if (g_help_flag)\n    return true;\n\n  // Repeats the call to the post-flag parsing initialization in case the\n  // user didn't call InitGoogleTest.\n  PostFlagParsingInit();\n\n  // Even if sharding is not on, test runners may want to use the\n  // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding\n  // protocol.\n  internal::WriteToShardStatusFileIfNeeded();\n\n  // True iff we are in a subprocess for running a thread-safe-style\n  // death test.\n  bool in_subprocess_for_death_test = false;\n\n#if GTEST_HAS_DEATH_TEST\n  in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL);\n#endif  // GTEST_HAS_DEATH_TEST\n\n  const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex,\n                                        in_subprocess_for_death_test);\n\n  // Compares the full test names with the filter to decide which\n  // tests to run.\n  const bool has_tests_to_run = FilterTests(should_shard\n                                              ? HONOR_SHARDING_PROTOCOL\n                                              : IGNORE_SHARDING_PROTOCOL) > 0;\n\n  // Lists the tests and exits if the --gtest_list_tests flag was specified.\n  if (GTEST_FLAG(list_tests)) {\n    // This must be called *after* FilterTests() has been called.\n    ListTestsMatchingFilter();\n    return true;\n  }\n\n  random_seed_ = GTEST_FLAG(shuffle) ?\n      GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0;\n\n  // True iff at least one test has failed.\n  bool failed = false;\n\n  TestEventListener* repeater = listeners()->repeater();\n\n  start_timestamp_ = GetTimeInMillis();\n  repeater->OnTestProgramStart(*parent_);\n\n  // How many times to repeat the tests?  We don't want to repeat them\n  // when we are inside the subprocess of a death test.\n  const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat);\n  // Repeats forever if the repeat count is negative.\n  const bool forever = repeat < 0;\n  for (int i = 0; forever || i != repeat; i++) {\n    // We want to preserve failures generated by ad-hoc test\n    // assertions executed before RUN_ALL_TESTS().\n    ClearNonAdHocTestResult();\n\n    const TimeInMillis start = GetTimeInMillis();\n\n    // Shuffles test cases and tests if requested.\n    if (has_tests_to_run && GTEST_FLAG(shuffle)) {\n      random()->Reseed(random_seed_);\n      // This should be done before calling OnTestIterationStart(),\n      // such that a test event listener can see the actual test order\n      // in the event.\n      ShuffleTests();\n    }\n\n    // Tells the unit test event listeners that the tests are about to start.\n    repeater->OnTestIterationStart(*parent_, i);\n\n    // Runs each test case if there is at least one test to run.\n    if (has_tests_to_run) {\n      // Sets up all environments beforehand.\n      repeater->OnEnvironmentsSetUpStart(*parent_);\n      ForEach(environments_, SetUpEnvironment);\n      repeater->OnEnvironmentsSetUpEnd(*parent_);\n\n      // Runs the tests only if there was no fatal failure during global\n      // set-up.\n      if (!Test::HasFatalFailure()) {\n        for (int test_index = 0; test_index < total_test_case_count();\n             test_index++) {\n          GetMutableTestCase(test_index)->Run();\n        }\n      }\n\n      // Tears down all environments in reverse order afterwards.\n      repeater->OnEnvironmentsTearDownStart(*parent_);\n      std::for_each(environments_.rbegin(), environments_.rend(),\n                    TearDownEnvironment);\n      repeater->OnEnvironmentsTearDownEnd(*parent_);\n    }\n\n    elapsed_time_ = GetTimeInMillis() - start;\n\n    // Tells the unit test event listener that the tests have just finished.\n    repeater->OnTestIterationEnd(*parent_, i);\n\n    // Gets the result and clears it.\n    if (!Passed()) {\n      failed = true;\n    }\n\n    // Restores the original test order after the iteration.  This\n    // allows the user to quickly repro a failure that happens in the\n    // N-th iteration without repeating the first (N - 1) iterations.\n    // This is not enclosed in \"if (GTEST_FLAG(shuffle)) { ... }\", in\n    // case the user somehow changes the value of the flag somewhere\n    // (it's always safe to unshuffle the tests).\n    UnshuffleTests();\n\n    if (GTEST_FLAG(shuffle)) {\n      // Picks a new random seed for each iteration.\n      random_seed_ = GetNextRandomSeed(random_seed_);\n    }\n  }\n\n  repeater->OnTestProgramEnd(*parent_);\n\n  return !failed;\n}\n\n// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file\n// if the variable is present. If a file already exists at this location, this\n// function will write over it. If the variable is present, but the file cannot\n// be created, prints an error and exits.\nvoid WriteToShardStatusFileIfNeeded() {\n  const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile);\n  if (test_shard_file != NULL) {\n    FILE* const file = posix::FOpen(test_shard_file, \"w\");\n    if (file == NULL) {\n      ColoredPrintf(COLOR_RED,\n                    \"Could not write to the test shard status file \\\"%s\\\" \"\n                    \"specified by the %s environment variable.\\n\",\n                    test_shard_file, kTestShardStatusFile);\n      fflush(stdout);\n      exit(EXIT_FAILURE);\n    }\n    fclose(file);\n  }\n}\n\n// Checks whether sharding is enabled by examining the relevant\n// environment variable values. If the variables are present,\n// but inconsistent (i.e., shard_index >= total_shards), prints\n// an error and exits. If in_subprocess_for_death_test, sharding is\n// disabled because it must only be applied to the original test\n// process. Otherwise, we could filter out death tests we intended to execute.\nbool ShouldShard(const char* total_shards_env,\n                 const char* shard_index_env,\n                 bool in_subprocess_for_death_test) {\n  if (in_subprocess_for_death_test) {\n    return false;\n  }\n\n  const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1);\n  const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1);\n\n  if (total_shards == -1 && shard_index == -1) {\n    return false;\n  } else if (total_shards == -1 && shard_index != -1) {\n    const Message msg = Message()\n      << \"Invalid environment variables: you have \"\n      << kTestShardIndex << \" = \" << shard_index\n      << \", but have left \" << kTestTotalShards << \" unset.\\n\";\n    ColoredPrintf(COLOR_RED, msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  } else if (total_shards != -1 && shard_index == -1) {\n    const Message msg = Message()\n      << \"Invalid environment variables: you have \"\n      << kTestTotalShards << \" = \" << total_shards\n      << \", but have left \" << kTestShardIndex << \" unset.\\n\";\n    ColoredPrintf(COLOR_RED, msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  } else if (shard_index < 0 || shard_index >= total_shards) {\n    const Message msg = Message()\n      << \"Invalid environment variables: we require 0 <= \"\n      << kTestShardIndex << \" < \" << kTestTotalShards\n      << \", but you have \" << kTestShardIndex << \"=\" << shard_index\n      << \", \" << kTestTotalShards << \"=\" << total_shards << \".\\n\";\n    ColoredPrintf(COLOR_RED, msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  }\n\n  return total_shards > 1;\n}\n\n// Parses the environment variable var as an Int32. If it is unset,\n// returns default_val. If it is not an Int32, prints an error\n// and aborts.\nInt32 Int32FromEnvOrDie(const char* var, Int32 default_val) {\n  const char* str_val = posix::GetEnv(var);\n  if (str_val == NULL) {\n    return default_val;\n  }\n\n  Int32 result;\n  if (!ParseInt32(Message() << \"The value of environment variable \" << var,\n                  str_val, &result)) {\n    exit(EXIT_FAILURE);\n  }\n  return result;\n}\n\n// Given the total number of shards, the shard index, and the test id,\n// returns true iff the test should be run on this shard. The test id is\n// some arbitrary but unique non-negative integer assigned to each test\n// method. Assumes that 0 <= shard_index < total_shards.\nbool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) {\n  return (test_id % total_shards) == shard_index;\n}\n\n// Compares the name of each test with the user-specified filter to\n// decide whether the test should be run, then records the result in\n// each TestCase and TestInfo object.\n// If shard_tests == true, further filters tests based on sharding\n// variables in the environment - see\n// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide.\n// Returns the number of tests that should run.\nint UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {\n  const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ?\n      Int32FromEnvOrDie(kTestTotalShards, -1) : -1;\n  const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ?\n      Int32FromEnvOrDie(kTestShardIndex, -1) : -1;\n\n  // num_runnable_tests are the number of tests that will\n  // run across all shards (i.e., match filter and are not disabled).\n  // num_selected_tests are the number of tests to be run on\n  // this shard.\n  int num_runnable_tests = 0;\n  int num_selected_tests = 0;\n  for (size_t i = 0; i < test_cases_.size(); i++) {\n    TestCase* const test_case = test_cases_[i];\n    const std::string &test_case_name = test_case->name();\n    test_case->set_should_run(false);\n\n    for (size_t j = 0; j < test_case->test_info_list().size(); j++) {\n      TestInfo* const test_info = test_case->test_info_list()[j];\n      const std::string test_name(test_info->name());\n      // A test is disabled if test case name or test name matches\n      // kDisableTestFilter.\n      const bool is_disabled =\n          internal::UnitTestOptions::MatchesFilter(test_case_name,\n                                                   kDisableTestFilter) ||\n          internal::UnitTestOptions::MatchesFilter(test_name,\n                                                   kDisableTestFilter);\n      test_info->is_disabled_ = is_disabled;\n\n      const bool matches_filter =\n          internal::UnitTestOptions::FilterMatchesTest(test_case_name,\n                                                       test_name);\n      test_info->matches_filter_ = matches_filter;\n\n      const bool is_runnable =\n          (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) &&\n          matches_filter;\n\n      const bool is_selected = is_runnable &&\n          (shard_tests == IGNORE_SHARDING_PROTOCOL ||\n           ShouldRunTestOnShard(total_shards, shard_index,\n                                num_runnable_tests));\n\n      num_runnable_tests += is_runnable;\n      num_selected_tests += is_selected;\n\n      test_info->should_run_ = is_selected;\n      test_case->set_should_run(test_case->should_run() || is_selected);\n    }\n  }\n  return num_selected_tests;\n}\n\n// Prints the given C-string on a single line by replacing all '\\n'\n// characters with string \"\\\\n\".  If the output takes more than\n// max_length characters, only prints the first max_length characters\n// and \"...\".\nstatic void PrintOnOneLine(const char* str, int max_length) {\n  if (str != NULL) {\n    for (int i = 0; *str != '\\0'; ++str) {\n      if (i >= max_length) {\n        printf(\"...\");\n        break;\n      }\n      if (*str == '\\n') {\n        printf(\"\\\\n\");\n        i += 2;\n      } else {\n        printf(\"%c\", *str);\n        ++i;\n      }\n    }\n  }\n}\n\n// Prints the names of the tests matching the user-specified filter flag.\nvoid UnitTestImpl::ListTestsMatchingFilter() {\n  // Print at most this many characters for each type/value parameter.\n  const int kMaxParamLength = 250;\n\n  for (size_t i = 0; i < test_cases_.size(); i++) {\n    const TestCase* const test_case = test_cases_[i];\n    bool printed_test_case_name = false;\n\n    for (size_t j = 0; j < test_case->test_info_list().size(); j++) {\n      const TestInfo* const test_info =\n          test_case->test_info_list()[j];\n      if (test_info->matches_filter_) {\n        if (!printed_test_case_name) {\n          printed_test_case_name = true;\n          printf(\"%s.\", test_case->name());\n          if (test_case->type_param() != NULL) {\n            printf(\"  # %s = \", kTypeParamLabel);\n            // We print the type parameter on a single line to make\n            // the output easy to parse by a program.\n            PrintOnOneLine(test_case->type_param(), kMaxParamLength);\n          }\n          printf(\"\\n\");\n        }\n        printf(\"  %s\", test_info->name());\n        if (test_info->value_param() != NULL) {\n          printf(\"  # %s = \", kValueParamLabel);\n          // We print the value parameter on a single line to make the\n          // output easy to parse by a program.\n          PrintOnOneLine(test_info->value_param(), kMaxParamLength);\n        }\n        printf(\"\\n\");\n      }\n    }\n  }\n  fflush(stdout);\n}\n\n// Sets the OS stack trace getter.\n//\n// Does nothing if the input and the current OS stack trace getter are\n// the same; otherwise, deletes the old getter and makes the input the\n// current getter.\nvoid UnitTestImpl::set_os_stack_trace_getter(\n    OsStackTraceGetterInterface* getter) {\n  if (os_stack_trace_getter_ != getter) {\n    delete os_stack_trace_getter_;\n    os_stack_trace_getter_ = getter;\n  }\n}\n\n// Returns the current OS stack trace getter if it is not NULL;\n// otherwise, creates an OsStackTraceGetter, makes it the current\n// getter, and returns it.\nOsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() {\n  if (os_stack_trace_getter_ == NULL) {\n    os_stack_trace_getter_ = new OsStackTraceGetter;\n  }\n\n  return os_stack_trace_getter_;\n}\n\n// Returns the TestResult for the test that's currently running, or\n// the TestResult for the ad hoc test if no test is running.\nTestResult* UnitTestImpl::current_test_result() {\n  return current_test_info_ ?\n      &(current_test_info_->result_) : &ad_hoc_test_result_;\n}\n\n// Shuffles all test cases, and the tests within each test case,\n// making sure that death tests are still run first.\nvoid UnitTestImpl::ShuffleTests() {\n  // Shuffles the death test cases.\n  ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_);\n\n  // Shuffles the non-death test cases.\n  ShuffleRange(random(), last_death_test_case_ + 1,\n               static_cast<int>(test_cases_.size()), &test_case_indices_);\n\n  // Shuffles the tests inside each test case.\n  for (size_t i = 0; i < test_cases_.size(); i++) {\n    test_cases_[i]->ShuffleTests(random());\n  }\n}\n\n// Restores the test cases and tests to their order before the first shuffle.\nvoid UnitTestImpl::UnshuffleTests() {\n  for (size_t i = 0; i < test_cases_.size(); i++) {\n    // Unshuffles the tests in each test case.\n    test_cases_[i]->UnshuffleTests();\n    // Resets the index of each test case.\n    test_case_indices_[i] = static_cast<int>(i);\n  }\n}\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in\n// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.\nstd::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/,\n                                            int skip_count) {\n  // We pass skip_count + 1 to skip this wrapper function in addition\n  // to what the user really wants to skip.\n  return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1);\n}\n\n// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to\n// suppress unreachable code warnings.\nnamespace {\nclass ClassUniqueToAlwaysTrue {};\n}\n\nbool IsTrue(bool condition) { return condition; }\n\nbool AlwaysTrue() {\n#if GTEST_HAS_EXCEPTIONS\n  // This condition is always false so AlwaysTrue() never actually throws,\n  // but it makes the compiler think that it may throw.\n  if (IsTrue(false))\n    throw ClassUniqueToAlwaysTrue();\n#endif  // GTEST_HAS_EXCEPTIONS\n  return true;\n}\n\n// If *pstr starts with the given prefix, modifies *pstr to be right\n// past the prefix and returns true; otherwise leaves *pstr unchanged\n// and returns false.  None of pstr, *pstr, and prefix can be NULL.\nbool SkipPrefix(const char* prefix, const char** pstr) {\n  const size_t prefix_len = strlen(prefix);\n  if (strncmp(*pstr, prefix, prefix_len) == 0) {\n    *pstr += prefix_len;\n    return true;\n  }\n  return false;\n}\n\n// Parses a string as a command line flag.  The string should have\n// the format \"--flag=value\".  When def_optional is true, the \"=value\"\n// part can be omitted.\n//\n// Returns the value of the flag, or NULL if the parsing failed.\nconst char* ParseFlagValue(const char* str,\n                           const char* flag,\n                           bool def_optional) {\n  // str and flag must not be NULL.\n  if (str == NULL || flag == NULL) return NULL;\n\n  // The flag must start with \"--\" followed by GTEST_FLAG_PREFIX_.\n  const std::string flag_str = std::string(\"--\") + GTEST_FLAG_PREFIX_ + flag;\n  const size_t flag_len = flag_str.length();\n  if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL;\n\n  // Skips the flag name.\n  const char* flag_end = str + flag_len;\n\n  // When def_optional is true, it's OK to not have a \"=value\" part.\n  if (def_optional && (flag_end[0] == '\\0')) {\n    return flag_end;\n  }\n\n  // If def_optional is true and there are more characters after the\n  // flag name, or if def_optional is false, there must be a '=' after\n  // the flag name.\n  if (flag_end[0] != '=') return NULL;\n\n  // Returns the string after \"=\".\n  return flag_end + 1;\n}\n\n// Parses a string for a bool flag, in the form of either\n// \"--flag=value\" or \"--flag\".\n//\n// In the former case, the value is taken as true as long as it does\n// not start with '0', 'f', or 'F'.\n//\n// In the latter case, the value is taken as true.\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nbool ParseBoolFlag(const char* str, const char* flag, bool* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag, true);\n\n  // Aborts if the parsing failed.\n  if (value_str == NULL) return false;\n\n  // Converts the string value to a bool.\n  *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F');\n  return true;\n}\n\n// Parses a string for an Int32 flag, in the form of\n// \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nbool ParseInt32Flag(const char* str, const char* flag, Int32* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag, false);\n\n  // Aborts if the parsing failed.\n  if (value_str == NULL) return false;\n\n  // Sets *value to the value of the flag.\n  return ParseInt32(Message() << \"The value of flag --\" << flag,\n                    value_str, value);\n}\n\n// Parses a string for a string flag, in the form of\n// \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nbool ParseStringFlag(const char* str, const char* flag, std::string* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag, false);\n\n  // Aborts if the parsing failed.\n  if (value_str == NULL) return false;\n\n  // Sets *value to the value of the flag.\n  *value = value_str;\n  return true;\n}\n\n// Determines whether a string has a prefix that Google Test uses for its\n// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_.\n// If Google Test detects that a command line flag has its prefix but is not\n// recognized, it will print its help message. Flags starting with\n// GTEST_INTERNAL_PREFIX_ followed by \"internal_\" are considered Google Test\n// internal flags and do not trigger the help message.\nstatic bool HasGoogleTestFlagPrefix(const char* str) {\n  return (SkipPrefix(\"--\", &str) ||\n          SkipPrefix(\"-\", &str) ||\n          SkipPrefix(\"/\", &str)) &&\n         !SkipPrefix(GTEST_FLAG_PREFIX_ \"internal_\", &str) &&\n         (SkipPrefix(GTEST_FLAG_PREFIX_, &str) ||\n          SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str));\n}\n\n// Prints a string containing code-encoded text.  The following escape\n// sequences can be used in the string to control the text color:\n//\n//   @@    prints a single '@' character.\n//   @R    changes the color to red.\n//   @G    changes the color to green.\n//   @Y    changes the color to yellow.\n//   @D    changes to the default terminal text color.\n//\n// TODO(wan@google.com): Write tests for this once we add stdout\n// capturing to Google Test.\nstatic void PrintColorEncoded(const char* str) {\n  GTestColor color = COLOR_DEFAULT;  // The current color.\n\n  // Conceptually, we split the string into segments divided by escape\n  // sequences.  Then we print one segment at a time.  At the end of\n  // each iteration, the str pointer advances to the beginning of the\n  // next segment.\n  for (;;) {\n    const char* p = strchr(str, '@');\n    if (p == NULL) {\n      ColoredPrintf(color, \"%s\", str);\n      return;\n    }\n\n    ColoredPrintf(color, \"%s\", std::string(str, p).c_str());\n\n    const char ch = p[1];\n    str = p + 2;\n    if (ch == '@') {\n      ColoredPrintf(color, \"@\");\n    } else if (ch == 'D') {\n      color = COLOR_DEFAULT;\n    } else if (ch == 'R') {\n      color = COLOR_RED;\n    } else if (ch == 'G') {\n      color = COLOR_GREEN;\n    } else if (ch == 'Y') {\n      color = COLOR_YELLOW;\n    } else {\n      --str;\n    }\n  }\n}\n\nstatic const char kColorEncodedHelpMessage[] =\n\"This program contains tests written using \" GTEST_NAME_ \". You can use the\\n\"\n\"following command line flags to control its behavior:\\n\"\n\"\\n\"\n\"Test Selection:\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"list_tests@D\\n\"\n\"      List the names of all tests instead of running them. The name of\\n\"\n\"      TEST(Foo, Bar) is \\\"Foo.Bar\\\".\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"filter=@YPOSTIVE_PATTERNS\"\n    \"[@G-@YNEGATIVE_PATTERNS]@D\\n\"\n\"      Run only the tests whose name matches one of the positive patterns but\\n\"\n\"      none of the negative patterns. '?' matches any single character; '*'\\n\"\n\"      matches any substring; ':' separates two patterns.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"also_run_disabled_tests@D\\n\"\n\"      Run all disabled tests too.\\n\"\n\"\\n\"\n\"Test Execution:\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"repeat=@Y[COUNT]@D\\n\"\n\"      Run the tests repeatedly; use a negative count to repeat forever.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"shuffle@D\\n\"\n\"      Randomize tests' orders on every iteration.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"random_seed=@Y[NUMBER]@D\\n\"\n\"      Random number seed to use for shuffling test orders (between 1 and\\n\"\n\"      99999, or 0 to use a seed based on the current time).\\n\"\n\"\\n\"\n\"Test Output:\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\\n\"\n\"      Enable/disable colored output. The default is @Gauto@D.\\n\"\n\"  -@G-\" GTEST_FLAG_PREFIX_ \"print_time=0@D\\n\"\n\"      Don't print the elapsed time of each test.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"output=xml@Y[@G:@YDIRECTORY_PATH@G\"\n    GTEST_PATH_SEP_ \"@Y|@G:@YFILE_PATH]@D\\n\"\n\"      Generate an XML report in the given directory or with the given file\\n\"\n\"      name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\\n\"\n#if GTEST_CAN_STREAM_RESULTS_\n\"  @G--\" GTEST_FLAG_PREFIX_ \"stream_result_to=@YHOST@G:@YPORT@D\\n\"\n\"      Stream test results to the given server.\\n\"\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\"\\n\"\n\"Assertion Behavior:\\n\"\n#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS\n\"  @G--\" GTEST_FLAG_PREFIX_ \"death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\\n\"\n\"      Set the default death test style.\\n\"\n#endif  // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS\n\"  @G--\" GTEST_FLAG_PREFIX_ \"break_on_failure@D\\n\"\n\"      Turn assertion failures into debugger break-points.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"throw_on_failure@D\\n\"\n\"      Turn assertion failures into C++ exceptions.\\n\"\n\"  @G--\" GTEST_FLAG_PREFIX_ \"catch_exceptions=0@D\\n\"\n\"      Do not report exceptions as test failures. Instead, allow them\\n\"\n\"      to crash the program or throw a pop-up (on Windows).\\n\"\n\"\\n\"\n\"Except for @G--\" GTEST_FLAG_PREFIX_ \"list_tests@D, you can alternatively set \"\n    \"the corresponding\\n\"\n\"environment variable of a flag (all letters in upper-case). For example, to\\n\"\n\"disable colored text output, you can either specify @G--\" GTEST_FLAG_PREFIX_\n    \"color=no@D or set\\n\"\n\"the @G\" GTEST_FLAG_PREFIX_UPPER_ \"COLOR@D environment variable to @Gno@D.\\n\"\n\"\\n\"\n\"For more information, please read the \" GTEST_NAME_ \" documentation at\\n\"\n\"@G\" GTEST_PROJECT_URL_ \"@D. If you find a bug in \" GTEST_NAME_ \"\\n\"\n\"(not one in your own code or tests), please report it to\\n\"\n\"@G<\" GTEST_DEV_EMAIL_ \">@D.\\n\";\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.  The type parameter CharType can be\n// instantiated to either char or wchar_t.\ntemplate <typename CharType>\nvoid ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) {\n  for (int i = 1; i < *argc; i++) {\n    const std::string arg_string = StreamableToString(argv[i]);\n    const char* const arg = arg_string.c_str();\n\n    using internal::ParseBoolFlag;\n    using internal::ParseInt32Flag;\n    using internal::ParseStringFlag;\n\n    // Do we see a Google Test flag?\n    if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag,\n                      &GTEST_FLAG(also_run_disabled_tests)) ||\n        ParseBoolFlag(arg, kBreakOnFailureFlag,\n                      &GTEST_FLAG(break_on_failure)) ||\n        ParseBoolFlag(arg, kCatchExceptionsFlag,\n                      &GTEST_FLAG(catch_exceptions)) ||\n        ParseStringFlag(arg, kColorFlag, &GTEST_FLAG(color)) ||\n        ParseStringFlag(arg, kDeathTestStyleFlag,\n                        &GTEST_FLAG(death_test_style)) ||\n        ParseBoolFlag(arg, kDeathTestUseFork,\n                      &GTEST_FLAG(death_test_use_fork)) ||\n        ParseStringFlag(arg, kFilterFlag, &GTEST_FLAG(filter)) ||\n        ParseStringFlag(arg, kInternalRunDeathTestFlag,\n                        &GTEST_FLAG(internal_run_death_test)) ||\n        ParseBoolFlag(arg, kListTestsFlag, &GTEST_FLAG(list_tests)) ||\n        ParseStringFlag(arg, kOutputFlag, &GTEST_FLAG(output)) ||\n        ParseBoolFlag(arg, kPrintTimeFlag, &GTEST_FLAG(print_time)) ||\n        ParseInt32Flag(arg, kRandomSeedFlag, &GTEST_FLAG(random_seed)) ||\n        ParseInt32Flag(arg, kRepeatFlag, &GTEST_FLAG(repeat)) ||\n        ParseBoolFlag(arg, kShuffleFlag, &GTEST_FLAG(shuffle)) ||\n        ParseInt32Flag(arg, kStackTraceDepthFlag,\n                       &GTEST_FLAG(stack_trace_depth)) ||\n        ParseStringFlag(arg, kStreamResultToFlag,\n                        &GTEST_FLAG(stream_result_to)) ||\n        ParseBoolFlag(arg, kThrowOnFailureFlag,\n                      &GTEST_FLAG(throw_on_failure))\n        ) {\n      // Yes.  Shift the remainder of the argv list left by one.  Note\n      // that argv has (*argc + 1) elements, the last one always being\n      // NULL.  The following loop moves the trailing NULL element as\n      // well.\n      for (int j = i; j != *argc; j++) {\n        argv[j] = argv[j + 1];\n      }\n\n      // Decrements the argument count.\n      (*argc)--;\n\n      // We also need to decrement the iterator as we just removed\n      // an element.\n      i--;\n    } else if (arg_string == \"--help\" || arg_string == \"-h\" ||\n               arg_string == \"-?\" || arg_string == \"/?\" ||\n               HasGoogleTestFlagPrefix(arg)) {\n      // Both help flag and unrecognized Google Test flags (excluding\n      // internal ones) trigger help display.\n      g_help_flag = true;\n    }\n  }\n\n  if (g_help_flag) {\n    // We print the help here instead of in RUN_ALL_TESTS(), as the\n    // latter may not be called at all if the user is using Google\n    // Test with another testing framework.\n    PrintColorEncoded(kColorEncodedHelpMessage);\n  }\n}\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.\nvoid ParseGoogleTestFlagsOnly(int* argc, char** argv) {\n  ParseGoogleTestFlagsOnlyImpl(argc, argv);\n}\nvoid ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) {\n  ParseGoogleTestFlagsOnlyImpl(argc, argv);\n}\n\n// The internal implementation of InitGoogleTest().\n//\n// The type parameter CharType can be instantiated to either char or\n// wchar_t.\ntemplate <typename CharType>\nvoid InitGoogleTestImpl(int* argc, CharType** argv) {\n  g_init_gtest_count++;\n\n  // We don't want to run the initialization code twice.\n  if (g_init_gtest_count != 1) return;\n\n  if (*argc <= 0) return;\n\n  internal::g_executable_path = internal::StreamableToString(argv[0]);\n\n#if GTEST_HAS_DEATH_TEST\n\n  g_argvs.clear();\n  for (int i = 0; i != *argc; i++) {\n    g_argvs.push_back(StreamableToString(argv[i]));\n  }\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n  ParseGoogleTestFlagsOnly(argc, argv);\n  GetUnitTestImpl()->PostFlagParsingInit();\n}\n\n}  // namespace internal\n\n// Initializes Google Test.  This must be called before calling\n// RUN_ALL_TESTS().  In particular, it parses a command line for the\n// flags that Google Test recognizes.  Whenever a Google Test flag is\n// seen, it is removed from argv, and *argc is decremented.\n//\n// No value is returned.  Instead, the Google Test flag variables are\n// updated.\n//\n// Calling the function for the second time has no user-visible effect.\nvoid InitGoogleTest(int* argc, char** argv) {\n  internal::InitGoogleTestImpl(argc, argv);\n}\n\n// This overloaded version can be used in Windows programs compiled in\n// UNICODE mode.\nvoid InitGoogleTest(int* argc, wchar_t** argv) {\n  internal::InitGoogleTestImpl(argc, argv);\n}\n\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/src/gtest_main.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <stdio.h>\n\n#include \"gtest/gtest.h\"\n\nGTEST_API_ int main(int argc, char **argv) {\n  printf(\"Running main() from gtest_main.cc\\n\");\n  testing::InitGoogleTest(&argc, argv);\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-death-test_ex_test.cc",
    "content": "// Copyright 2010, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// Tests that verify interaction of exceptions and death tests.\n\n#include \"gtest/gtest-death-test.h\"\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_DEATH_TEST\n\n# if GTEST_HAS_SEH\n#  include <windows.h>          // For RaiseException().\n# endif\n\n# include \"gtest/gtest-spi.h\"\n\n# if GTEST_HAS_EXCEPTIONS\n\n#  include <exception>  // For std::exception.\n\n// Tests that death tests report thrown exceptions as failures and that the\n// exceptions do not escape death test macros.\nTEST(CxxExceptionDeathTest, ExceptionIsFailure) {\n  try {\n    EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw 1, \"\"), \"threw an exception\");\n  } catch (...) {  // NOLINT\n    FAIL() << \"An exception escaped a death test macro invocation \"\n           << \"with catch_exceptions \"\n           << (testing::GTEST_FLAG(catch_exceptions) ? \"enabled\" : \"disabled\");\n  }\n}\n\nclass TestException : public std::exception {\n public:\n  virtual const char* what() const throw() { return \"exceptional message\"; }\n};\n\nTEST(CxxExceptionDeathTest, PrintsMessageForStdExceptions) {\n  // Verifies that the exception message is quoted in the failure text.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw TestException(), \"\"),\n                          \"exceptional message\");\n  // Verifies that the location is mentioned in the failure text.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(throw TestException(), \"\"),\n                          \"gtest-death-test_ex_test.cc\");\n}\n# endif  // GTEST_HAS_EXCEPTIONS\n\n# if GTEST_HAS_SEH\n// Tests that enabling interception of SEH exceptions with the\n// catch_exceptions flag does not interfere with SEH exceptions being\n// treated as death by death tests.\nTEST(SehExceptionDeasTest, CatchExceptionsDoesNotInterfere) {\n  EXPECT_DEATH(RaiseException(42, 0x0, 0, NULL), \"\")\n      << \"with catch_exceptions \"\n      << (testing::GTEST_FLAG(catch_exceptions) ? \"enabled\" : \"disabled\");\n}\n# endif\n\n#endif  // GTEST_HAS_DEATH_TEST\n\nint main(int argc, char** argv) {\n  testing::InitGoogleTest(&argc, argv);\n  testing::GTEST_FLAG(catch_exceptions) = GTEST_ENABLE_CATCH_EXCEPTIONS_ != 0;\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-death-test_test.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Tests for death tests.\n\n#include \"gtest/gtest-death-test.h\"\n#include \"gtest/gtest.h\"\n#include \"gtest/internal/gtest-filepath.h\"\n\nusing testing::internal::AlwaysFalse;\nusing testing::internal::AlwaysTrue;\n\n#if GTEST_HAS_DEATH_TEST\n\n# if GTEST_OS_WINDOWS\n#  include <direct.h>          // For chdir().\n# else\n#  include <unistd.h>\n#  include <sys/wait.h>        // For waitpid.\n#  include <limits>            // For std::numeric_limits.\n# endif  // GTEST_OS_WINDOWS\n\n# include <limits.h>\n# include <signal.h>\n# include <stdio.h>\n\n# if GTEST_OS_LINUX\n#  include <sys/time.h>\n# endif  // GTEST_OS_LINUX\n\n# include \"gtest/gtest-spi.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n# define GTEST_IMPLEMENTATION_ 1\n# include \"src/gtest-internal-inl.h\"\n# undef GTEST_IMPLEMENTATION_\n\nnamespace posix = ::testing::internal::posix;\n\nusing testing::Message;\nusing testing::internal::DeathTest;\nusing testing::internal::DeathTestFactory;\nusing testing::internal::FilePath;\nusing testing::internal::GetLastErrnoDescription;\nusing testing::internal::GetUnitTestImpl;\nusing testing::internal::InDeathTestChild;\nusing testing::internal::ParseNaturalNumber;\n\nnamespace testing {\nnamespace internal {\n\n// A helper class whose objects replace the death test factory for a\n// single UnitTest object during their lifetimes.\nclass ReplaceDeathTestFactory {\n public:\n  explicit ReplaceDeathTestFactory(DeathTestFactory* new_factory)\n      : unit_test_impl_(GetUnitTestImpl()) {\n    old_factory_ = unit_test_impl_->death_test_factory_.release();\n    unit_test_impl_->death_test_factory_.reset(new_factory);\n  }\n\n  ~ReplaceDeathTestFactory() {\n    unit_test_impl_->death_test_factory_.release();\n    unit_test_impl_->death_test_factory_.reset(old_factory_);\n  }\n private:\n  // Prevents copying ReplaceDeathTestFactory objects.\n  ReplaceDeathTestFactory(const ReplaceDeathTestFactory&);\n  void operator=(const ReplaceDeathTestFactory&);\n\n  UnitTestImpl* unit_test_impl_;\n  DeathTestFactory* old_factory_;\n};\n\n}  // namespace internal\n}  // namespace testing\n\nvoid DieWithMessage(const ::std::string& message) {\n  fprintf(stderr, \"%s\", message.c_str());\n  fflush(stderr);  // Make sure the text is printed before the process exits.\n\n  // We call _exit() instead of exit(), as the former is a direct\n  // system call and thus safer in the presence of threads.  exit()\n  // will invoke user-defined exit-hooks, which may do dangerous\n  // things that conflict with death tests.\n  //\n  // Some compilers can recognize that _exit() never returns and issue the\n  // 'unreachable code' warning for code following this function, unless\n  // fooled by a fake condition.\n  if (AlwaysTrue())\n    _exit(1);\n}\n\nvoid DieInside(const ::std::string& function) {\n  DieWithMessage(\"death inside \" + function + \"().\");\n}\n\n// Tests that death tests work.\n\nclass TestForDeathTest : public testing::Test {\n protected:\n  TestForDeathTest() : original_dir_(FilePath::GetCurrentDir()) {}\n\n  virtual ~TestForDeathTest() {\n    posix::ChDir(original_dir_.c_str());\n  }\n\n  // A static member function that's expected to die.\n  static void StaticMemberFunction() { DieInside(\"StaticMemberFunction\"); }\n\n  // A method of the test fixture that may die.\n  void MemberFunction() {\n    if (should_die_)\n      DieInside(\"MemberFunction\");\n  }\n\n  // True iff MemberFunction() should die.\n  bool should_die_;\n  const FilePath original_dir_;\n};\n\n// A class with a member function that may die.\nclass MayDie {\n public:\n  explicit MayDie(bool should_die) : should_die_(should_die) {}\n\n  // A member function that may die.\n  void MemberFunction() const {\n    if (should_die_)\n      DieInside(\"MayDie::MemberFunction\");\n  }\n\n private:\n  // True iff MemberFunction() should die.\n  bool should_die_;\n};\n\n// A global function that's expected to die.\nvoid GlobalFunction() { DieInside(\"GlobalFunction\"); }\n\n// A non-void function that's expected to die.\nint NonVoidFunction() {\n  DieInside(\"NonVoidFunction\");\n  return 1;\n}\n\n// A unary function that may die.\nvoid DieIf(bool should_die) {\n  if (should_die)\n    DieInside(\"DieIf\");\n}\n\n// A binary function that may die.\nbool DieIfLessThan(int x, int y) {\n  if (x < y) {\n    DieInside(\"DieIfLessThan\");\n  }\n  return true;\n}\n\n// Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture.\nvoid DeathTestSubroutine() {\n  EXPECT_DEATH(GlobalFunction(), \"death.*GlobalFunction\");\n  ASSERT_DEATH(GlobalFunction(), \"death.*GlobalFunction\");\n}\n\n// Death in dbg, not opt.\nint DieInDebugElse12(int* sideeffect) {\n  if (sideeffect) *sideeffect = 12;\n\n# ifndef NDEBUG\n\n  DieInside(\"DieInDebugElse12\");\n\n# endif  // NDEBUG\n\n  return 12;\n}\n\n# if GTEST_OS_WINDOWS\n\n// Tests the ExitedWithCode predicate.\nTEST(ExitStatusPredicateTest, ExitedWithCode) {\n  // On Windows, the process's exit code is the same as its exit status,\n  // so the predicate just compares the its input with its parameter.\n  EXPECT_TRUE(testing::ExitedWithCode(0)(0));\n  EXPECT_TRUE(testing::ExitedWithCode(1)(1));\n  EXPECT_TRUE(testing::ExitedWithCode(42)(42));\n  EXPECT_FALSE(testing::ExitedWithCode(0)(1));\n  EXPECT_FALSE(testing::ExitedWithCode(1)(0));\n}\n\n# else\n\n// Returns the exit status of a process that calls _exit(2) with a\n// given exit code.  This is a helper function for the\n// ExitStatusPredicateTest test suite.\nstatic int NormalExitStatus(int exit_code) {\n  pid_t child_pid = fork();\n  if (child_pid == 0) {\n    _exit(exit_code);\n  }\n  int status;\n  waitpid(child_pid, &status, 0);\n  return status;\n}\n\n// Returns the exit status of a process that raises a given signal.\n// If the signal does not cause the process to die, then it returns\n// instead the exit status of a process that exits normally with exit\n// code 1.  This is a helper function for the ExitStatusPredicateTest\n// test suite.\nstatic int KilledExitStatus(int signum) {\n  pid_t child_pid = fork();\n  if (child_pid == 0) {\n    raise(signum);\n    _exit(1);\n  }\n  int status;\n  waitpid(child_pid, &status, 0);\n  return status;\n}\n\n// Tests the ExitedWithCode predicate.\nTEST(ExitStatusPredicateTest, ExitedWithCode) {\n  const int status0  = NormalExitStatus(0);\n  const int status1  = NormalExitStatus(1);\n  const int status42 = NormalExitStatus(42);\n  const testing::ExitedWithCode pred0(0);\n  const testing::ExitedWithCode pred1(1);\n  const testing::ExitedWithCode pred42(42);\n  EXPECT_PRED1(pred0,  status0);\n  EXPECT_PRED1(pred1,  status1);\n  EXPECT_PRED1(pred42, status42);\n  EXPECT_FALSE(pred0(status1));\n  EXPECT_FALSE(pred42(status0));\n  EXPECT_FALSE(pred1(status42));\n}\n\n// Tests the KilledBySignal predicate.\nTEST(ExitStatusPredicateTest, KilledBySignal) {\n  const int status_segv = KilledExitStatus(SIGSEGV);\n  const int status_kill = KilledExitStatus(SIGKILL);\n  const testing::KilledBySignal pred_segv(SIGSEGV);\n  const testing::KilledBySignal pred_kill(SIGKILL);\n  EXPECT_PRED1(pred_segv, status_segv);\n  EXPECT_PRED1(pred_kill, status_kill);\n  EXPECT_FALSE(pred_segv(status_kill));\n  EXPECT_FALSE(pred_kill(status_segv));\n}\n\n# endif  // GTEST_OS_WINDOWS\n\n// Tests that the death test macros expand to code which may or may not\n// be followed by operator<<, and that in either case the complete text\n// comprises only a single C++ statement.\nTEST_F(TestForDeathTest, SingleStatement) {\n  if (AlwaysFalse())\n    // This would fail if executed; this is a compilation test only\n    ASSERT_DEATH(return, \"\");\n\n  if (AlwaysTrue())\n    EXPECT_DEATH(_exit(1), \"\");\n  else\n    // This empty \"else\" branch is meant to ensure that EXPECT_DEATH\n    // doesn't expand into an \"if\" statement without an \"else\"\n    ;\n\n  if (AlwaysFalse())\n    ASSERT_DEATH(return, \"\") << \"did not die\";\n\n  if (AlwaysFalse())\n    ;\n  else\n    EXPECT_DEATH(_exit(1), \"\") << 1 << 2 << 3;\n}\n\nvoid DieWithEmbeddedNul() {\n  fprintf(stderr, \"Hello%cmy null world.\\n\", '\\0');\n  fflush(stderr);\n  _exit(1);\n}\n\n# if GTEST_USES_PCRE\n// Tests that EXPECT_DEATH and ASSERT_DEATH work when the error\n// message has a NUL character in it.\nTEST_F(TestForDeathTest, EmbeddedNulInMessage) {\n  // TODO(wan@google.com): <regex.h> doesn't support matching strings\n  // with embedded NUL characters - find a way to workaround it.\n  EXPECT_DEATH(DieWithEmbeddedNul(), \"my null world\");\n  ASSERT_DEATH(DieWithEmbeddedNul(), \"my null world\");\n}\n# endif  // GTEST_USES_PCRE\n\n// Tests that death test macros expand to code which interacts well with switch\n// statements.\nTEST_F(TestForDeathTest, SwitchStatement) {\n// Microsoft compiler usually complains about switch statements without\n// case labels. We suppress that warning for this test.\n# ifdef _MSC_VER\n#  pragma warning(push)\n#  pragma warning(disable: 4065)\n# endif  // _MSC_VER\n\n  switch (0)\n    default:\n      ASSERT_DEATH(_exit(1), \"\") << \"exit in default switch handler\";\n\n  switch (0)\n    case 0:\n      EXPECT_DEATH(_exit(1), \"\") << \"exit in switch case\";\n\n# ifdef _MSC_VER\n#  pragma warning(pop)\n# endif  // _MSC_VER\n}\n\n// Tests that a static member function can be used in a \"fast\" style\n// death test.\nTEST_F(TestForDeathTest, StaticMemberFunctionFastStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  ASSERT_DEATH(StaticMemberFunction(), \"death.*StaticMember\");\n}\n\n// Tests that a method of the test fixture can be used in a \"fast\"\n// style death test.\nTEST_F(TestForDeathTest, MemberFunctionFastStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  should_die_ = true;\n  EXPECT_DEATH(MemberFunction(), \"inside.*MemberFunction\");\n}\n\nvoid ChangeToRootDir() { posix::ChDir(GTEST_PATH_SEP_); }\n\n// Tests that death tests work even if the current directory has been\n// changed.\nTEST_F(TestForDeathTest, FastDeathTestInChangedDir) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n\n  ChangeToRootDir();\n  EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), \"\");\n\n  ChangeToRootDir();\n  ASSERT_DEATH(_exit(1), \"\");\n}\n\n# if GTEST_OS_LINUX\nvoid SigprofAction(int, siginfo_t*, void*) { /* no op */ }\n\n// Sets SIGPROF action and ITIMER_PROF timer (interval: 1ms).\nvoid SetSigprofActionAndTimer() {\n  struct itimerval timer;\n  timer.it_interval.tv_sec = 0;\n  timer.it_interval.tv_usec = 1;\n  timer.it_value = timer.it_interval;\n  ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL));\n  struct sigaction signal_action;\n  memset(&signal_action, 0, sizeof(signal_action));\n  sigemptyset(&signal_action.sa_mask);\n  signal_action.sa_sigaction = SigprofAction;\n  signal_action.sa_flags = SA_RESTART | SA_SIGINFO;\n  ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, NULL));\n}\n\n// Disables ITIMER_PROF timer and ignores SIGPROF signal.\nvoid DisableSigprofActionAndTimer(struct sigaction* old_signal_action) {\n  struct itimerval timer;\n  timer.it_interval.tv_sec = 0;\n  timer.it_interval.tv_usec = 0;\n  timer.it_value = timer.it_interval;\n  ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL));\n  struct sigaction signal_action;\n  memset(&signal_action, 0, sizeof(signal_action));\n  sigemptyset(&signal_action.sa_mask);\n  signal_action.sa_handler = SIG_IGN;\n  ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, old_signal_action));\n}\n\n// Tests that death tests work when SIGPROF handler and timer are set.\nTEST_F(TestForDeathTest, FastSigprofActionSet) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  SetSigprofActionAndTimer();\n  EXPECT_DEATH(_exit(1), \"\");\n  struct sigaction old_signal_action;\n  DisableSigprofActionAndTimer(&old_signal_action);\n  EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction);\n}\n\nTEST_F(TestForDeathTest, ThreadSafeSigprofActionSet) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n  SetSigprofActionAndTimer();\n  EXPECT_DEATH(_exit(1), \"\");\n  struct sigaction old_signal_action;\n  DisableSigprofActionAndTimer(&old_signal_action);\n  EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction);\n}\n# endif  // GTEST_OS_LINUX\n\n// Repeats a representative sample of death tests in the \"threadsafe\" style:\n\nTEST_F(TestForDeathTest, StaticMemberFunctionThreadsafeStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n  ASSERT_DEATH(StaticMemberFunction(), \"death.*StaticMember\");\n}\n\nTEST_F(TestForDeathTest, MemberFunctionThreadsafeStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n  should_die_ = true;\n  EXPECT_DEATH(MemberFunction(), \"inside.*MemberFunction\");\n}\n\nTEST_F(TestForDeathTest, ThreadsafeDeathTestInLoop) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n\n  for (int i = 0; i < 3; ++i)\n    EXPECT_EXIT(_exit(i), testing::ExitedWithCode(i), \"\") << \": i = \" << i;\n}\n\nTEST_F(TestForDeathTest, ThreadsafeDeathTestInChangedDir) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n\n  ChangeToRootDir();\n  EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), \"\");\n\n  ChangeToRootDir();\n  ASSERT_DEATH(_exit(1), \"\");\n}\n\nTEST_F(TestForDeathTest, MixedStyles) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n  EXPECT_DEATH(_exit(1), \"\");\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_DEATH(_exit(1), \"\");\n}\n\n# if GTEST_HAS_CLONE && GTEST_HAS_PTHREAD\n\nnamespace {\n\nbool pthread_flag;\n\nvoid SetPthreadFlag() {\n  pthread_flag = true;\n}\n\n}  // namespace\n\nTEST_F(TestForDeathTest, DoesNotExecuteAtforkHooks) {\n  if (!testing::GTEST_FLAG(death_test_use_fork)) {\n    testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n    pthread_flag = false;\n    ASSERT_EQ(0, pthread_atfork(&SetPthreadFlag, NULL, NULL));\n    ASSERT_DEATH(_exit(1), \"\");\n    ASSERT_FALSE(pthread_flag);\n  }\n}\n\n# endif  // GTEST_HAS_CLONE && GTEST_HAS_PTHREAD\n\n// Tests that a method of another class can be used in a death test.\nTEST_F(TestForDeathTest, MethodOfAnotherClass) {\n  const MayDie x(true);\n  ASSERT_DEATH(x.MemberFunction(), \"MayDie\\\\:\\\\:MemberFunction\");\n}\n\n// Tests that a global function can be used in a death test.\nTEST_F(TestForDeathTest, GlobalFunction) {\n  EXPECT_DEATH(GlobalFunction(), \"GlobalFunction\");\n}\n\n// Tests that any value convertible to an RE works as a second\n// argument to EXPECT_DEATH.\nTEST_F(TestForDeathTest, AcceptsAnythingConvertibleToRE) {\n  static const char regex_c_str[] = \"GlobalFunction\";\n  EXPECT_DEATH(GlobalFunction(), regex_c_str);\n\n  const testing::internal::RE regex(regex_c_str);\n  EXPECT_DEATH(GlobalFunction(), regex);\n\n# if GTEST_HAS_GLOBAL_STRING\n\n  const string regex_str(regex_c_str);\n  EXPECT_DEATH(GlobalFunction(), regex_str);\n\n# endif  // GTEST_HAS_GLOBAL_STRING\n\n  const ::std::string regex_std_str(regex_c_str);\n  EXPECT_DEATH(GlobalFunction(), regex_std_str);\n}\n\n// Tests that a non-void function can be used in a death test.\nTEST_F(TestForDeathTest, NonVoidFunction) {\n  ASSERT_DEATH(NonVoidFunction(), \"NonVoidFunction\");\n}\n\n// Tests that functions that take parameter(s) can be used in a death test.\nTEST_F(TestForDeathTest, FunctionWithParameter) {\n  EXPECT_DEATH(DieIf(true), \"DieIf\\\\(\\\\)\");\n  EXPECT_DEATH(DieIfLessThan(2, 3), \"DieIfLessThan\");\n}\n\n// Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture.\nTEST_F(TestForDeathTest, OutsideFixture) {\n  DeathTestSubroutine();\n}\n\n// Tests that death tests can be done inside a loop.\nTEST_F(TestForDeathTest, InsideLoop) {\n  for (int i = 0; i < 5; i++) {\n    EXPECT_DEATH(DieIfLessThan(-1, i), \"DieIfLessThan\") << \"where i == \" << i;\n  }\n}\n\n// Tests that a compound statement can be used in a death test.\nTEST_F(TestForDeathTest, CompoundStatement) {\n  EXPECT_DEATH({  // NOLINT\n    const int x = 2;\n    const int y = x + 1;\n    DieIfLessThan(x, y);\n  },\n  \"DieIfLessThan\");\n}\n\n// Tests that code that doesn't die causes a death test to fail.\nTEST_F(TestForDeathTest, DoesNotDie) {\n  EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(DieIf(false), \"DieIf\"),\n                          \"failed to die\");\n}\n\n// Tests that a death test fails when the error message isn't expected.\nTEST_F(TestForDeathTest, ErrorMessageMismatch) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_DEATH(DieIf(true), \"DieIfLessThan\") << \"End of death test message.\";\n  }, \"died but not with expected error\");\n}\n\n// On exit, *aborted will be true iff the EXPECT_DEATH() statement\n// aborted the function.\nvoid ExpectDeathTestHelper(bool* aborted) {\n  *aborted = true;\n  EXPECT_DEATH(DieIf(false), \"DieIf\");  // This assertion should fail.\n  *aborted = false;\n}\n\n// Tests that EXPECT_DEATH doesn't abort the test on failure.\nTEST_F(TestForDeathTest, EXPECT_DEATH) {\n  bool aborted = true;\n  EXPECT_NONFATAL_FAILURE(ExpectDeathTestHelper(&aborted),\n                          \"failed to die\");\n  EXPECT_FALSE(aborted);\n}\n\n// Tests that ASSERT_DEATH does abort the test on failure.\nTEST_F(TestForDeathTest, ASSERT_DEATH) {\n  static bool aborted;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    aborted = true;\n    ASSERT_DEATH(DieIf(false), \"DieIf\");  // This assertion should fail.\n    aborted = false;\n  }, \"failed to die\");\n  EXPECT_TRUE(aborted);\n}\n\n// Tests that EXPECT_DEATH evaluates the arguments exactly once.\nTEST_F(TestForDeathTest, SingleEvaluation) {\n  int x = 3;\n  EXPECT_DEATH(DieIf((++x) == 4), \"DieIf\");\n\n  const char* regex = \"DieIf\";\n  const char* regex_save = regex;\n  EXPECT_DEATH(DieIfLessThan(3, 4), regex++);\n  EXPECT_EQ(regex_save + 1, regex);\n}\n\n// Tests that run-away death tests are reported as failures.\nTEST_F(TestForDeathTest, RunawayIsFailure) {\n  EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(static_cast<void>(0), \"Foo\"),\n                          \"failed to die.\");\n}\n\n// Tests that death tests report executing 'return' in the statement as\n// failure.\nTEST_F(TestForDeathTest, ReturnIsFailure) {\n  EXPECT_FATAL_FAILURE(ASSERT_DEATH(return, \"Bar\"),\n                       \"illegal return in test statement.\");\n}\n\n// Tests that EXPECT_DEBUG_DEATH works as expected, that is, you can stream a\n// message to it, and in debug mode it:\n// 1. Asserts on death.\n// 2. Has no side effect.\n//\n// And in opt mode, it:\n// 1.  Has side effects but does not assert.\nTEST_F(TestForDeathTest, TestExpectDebugDeath) {\n  int sideeffect = 0;\n\n  EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), \"death.*DieInDebugElse12\")\n      << \"Must accept a streamed message\";\n\n# ifdef NDEBUG\n\n  // Checks that the assignment occurs in opt mode (sideeffect).\n  EXPECT_EQ(12, sideeffect);\n\n# else\n\n  // Checks that the assignment does not occur in dbg mode (no sideeffect).\n  EXPECT_EQ(0, sideeffect);\n\n# endif\n}\n\n// Tests that ASSERT_DEBUG_DEATH works as expected, that is, you can stream a\n// message to it, and in debug mode it:\n// 1. Asserts on death.\n// 2. Has no side effect.\n//\n// And in opt mode, it:\n// 1.  Has side effects but does not assert.\nTEST_F(TestForDeathTest, TestAssertDebugDeath) {\n  int sideeffect = 0;\n\n  ASSERT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), \"death.*DieInDebugElse12\")\n      << \"Must accept a streamed message\";\n\n# ifdef NDEBUG\n\n  // Checks that the assignment occurs in opt mode (sideeffect).\n  EXPECT_EQ(12, sideeffect);\n\n# else\n\n  // Checks that the assignment does not occur in dbg mode (no sideeffect).\n  EXPECT_EQ(0, sideeffect);\n\n# endif\n}\n\n# ifndef NDEBUG\n\nvoid ExpectDebugDeathHelper(bool* aborted) {\n  *aborted = true;\n  EXPECT_DEBUG_DEATH(return, \"\") << \"This is expected to fail.\";\n  *aborted = false;\n}\n\n#  if GTEST_OS_WINDOWS\nTEST(PopUpDeathTest, DoesNotShowPopUpOnAbort) {\n  printf(\"This test should be considered failing if it shows \"\n         \"any pop-up dialogs.\\n\");\n  fflush(stdout);\n\n  EXPECT_DEATH({\n    testing::GTEST_FLAG(catch_exceptions) = false;\n    abort();\n  }, \"\");\n}\n#  endif  // GTEST_OS_WINDOWS\n\n// Tests that EXPECT_DEBUG_DEATH in debug mode does not abort\n// the function.\nTEST_F(TestForDeathTest, ExpectDebugDeathDoesNotAbort) {\n  bool aborted = true;\n  EXPECT_NONFATAL_FAILURE(ExpectDebugDeathHelper(&aborted), \"\");\n  EXPECT_FALSE(aborted);\n}\n\nvoid AssertDebugDeathHelper(bool* aborted) {\n  *aborted = true;\n  ASSERT_DEBUG_DEATH(return, \"\") << \"This is expected to fail.\";\n  *aborted = false;\n}\n\n// Tests that ASSERT_DEBUG_DEATH in debug mode aborts the function on\n// failure.\nTEST_F(TestForDeathTest, AssertDebugDeathAborts) {\n  static bool aborted;\n  aborted = false;\n  EXPECT_FATAL_FAILURE(AssertDebugDeathHelper(&aborted), \"\");\n  EXPECT_TRUE(aborted);\n}\n\n# endif  // _NDEBUG\n\n// Tests the *_EXIT family of macros, using a variety of predicates.\nstatic void TestExitMacros() {\n  EXPECT_EXIT(_exit(1),  testing::ExitedWithCode(1),  \"\");\n  ASSERT_EXIT(_exit(42), testing::ExitedWithCode(42), \"\");\n\n# if GTEST_OS_WINDOWS\n\n  // Of all signals effects on the process exit code, only those of SIGABRT\n  // are documented on Windows.\n  // See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx.\n  EXPECT_EXIT(raise(SIGABRT), testing::ExitedWithCode(3), \"\") << \"b_ar\";\n\n# else\n\n  EXPECT_EXIT(raise(SIGKILL), testing::KilledBySignal(SIGKILL), \"\") << \"foo\";\n  ASSERT_EXIT(raise(SIGUSR2), testing::KilledBySignal(SIGUSR2), \"\") << \"bar\";\n\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_EXIT(_exit(0), testing::KilledBySignal(SIGSEGV), \"\")\n      << \"This failure is expected, too.\";\n  }, \"This failure is expected, too.\");\n\n# endif  // GTEST_OS_WINDOWS\n\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_EXIT(raise(SIGSEGV), testing::ExitedWithCode(0), \"\")\n      << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n}\n\nTEST_F(TestForDeathTest, ExitMacros) {\n  TestExitMacros();\n}\n\nTEST_F(TestForDeathTest, ExitMacrosUsingFork) {\n  testing::GTEST_FLAG(death_test_use_fork) = true;\n  TestExitMacros();\n}\n\nTEST_F(TestForDeathTest, InvalidStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"rococo\";\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_DEATH(_exit(0), \"\") << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n}\n\nTEST_F(TestForDeathTest, DeathTestFailedOutput) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_DEATH(DieWithMessage(\"death\\n\"),\n                   \"expected message\"),\n      \"Actual msg:\\n\"\n      \"[  DEATH   ] death\\n\");\n}\n\nTEST_F(TestForDeathTest, DeathTestUnexpectedReturnOutput) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_DEATH({\n          fprintf(stderr, \"returning\\n\");\n          fflush(stderr);\n          return;\n        }, \"\"),\n      \"    Result: illegal return in test statement.\\n\"\n      \" Error msg:\\n\"\n      \"[  DEATH   ] returning\\n\");\n}\n\nTEST_F(TestForDeathTest, DeathTestBadExitCodeOutput) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_EXIT(DieWithMessage(\"exiting with rc 1\\n\"),\n                  testing::ExitedWithCode(3),\n                  \"expected message\"),\n      \"    Result: died but not with expected exit code:\\n\"\n      \"            Exited with exit status 1\\n\"\n      \"Actual msg:\\n\"\n      \"[  DEATH   ] exiting with rc 1\\n\");\n}\n\nTEST_F(TestForDeathTest, DeathTestMultiLineMatchFail) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_DEATH(DieWithMessage(\"line 1\\nline 2\\nline 3\\n\"),\n                   \"line 1\\nxyz\\nline 3\\n\"),\n      \"Actual msg:\\n\"\n      \"[  DEATH   ] line 1\\n\"\n      \"[  DEATH   ] line 2\\n\"\n      \"[  DEATH   ] line 3\\n\");\n}\n\nTEST_F(TestForDeathTest, DeathTestMultiLineMatchPass) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_DEATH(DieWithMessage(\"line 1\\nline 2\\nline 3\\n\"),\n               \"line 1\\nline 2\\nline 3\\n\");\n}\n\n// A DeathTestFactory that returns MockDeathTests.\nclass MockDeathTestFactory : public DeathTestFactory {\n public:\n  MockDeathTestFactory();\n  virtual bool Create(const char* statement,\n                      const ::testing::internal::RE* regex,\n                      const char* file, int line, DeathTest** test);\n\n  // Sets the parameters for subsequent calls to Create.\n  void SetParameters(bool create, DeathTest::TestRole role,\n                     int status, bool passed);\n\n  // Accessors.\n  int AssumeRoleCalls() const { return assume_role_calls_; }\n  int WaitCalls() const { return wait_calls_; }\n  int PassedCalls() const { return passed_args_.size(); }\n  bool PassedArgument(int n) const { return passed_args_[n]; }\n  int AbortCalls() const { return abort_args_.size(); }\n  DeathTest::AbortReason AbortArgument(int n) const {\n    return abort_args_[n];\n  }\n  bool TestDeleted() const { return test_deleted_; }\n\n private:\n  friend class MockDeathTest;\n  // If true, Create will return a MockDeathTest; otherwise it returns\n  // NULL.\n  bool create_;\n  // The value a MockDeathTest will return from its AssumeRole method.\n  DeathTest::TestRole role_;\n  // The value a MockDeathTest will return from its Wait method.\n  int status_;\n  // The value a MockDeathTest will return from its Passed method.\n  bool passed_;\n\n  // Number of times AssumeRole was called.\n  int assume_role_calls_;\n  // Number of times Wait was called.\n  int wait_calls_;\n  // The arguments to the calls to Passed since the last call to\n  // SetParameters.\n  std::vector<bool> passed_args_;\n  // The arguments to the calls to Abort since the last call to\n  // SetParameters.\n  std::vector<DeathTest::AbortReason> abort_args_;\n  // True if the last MockDeathTest returned by Create has been\n  // deleted.\n  bool test_deleted_;\n};\n\n\n// A DeathTest implementation useful in testing.  It returns values set\n// at its creation from its various inherited DeathTest methods, and\n// reports calls to those methods to its parent MockDeathTestFactory\n// object.\nclass MockDeathTest : public DeathTest {\n public:\n  MockDeathTest(MockDeathTestFactory *parent,\n                TestRole role, int status, bool passed) :\n      parent_(parent), role_(role), status_(status), passed_(passed) {\n  }\n  virtual ~MockDeathTest() {\n    parent_->test_deleted_ = true;\n  }\n  virtual TestRole AssumeRole() {\n    ++parent_->assume_role_calls_;\n    return role_;\n  }\n  virtual int Wait() {\n    ++parent_->wait_calls_;\n    return status_;\n  }\n  virtual bool Passed(bool exit_status_ok) {\n    parent_->passed_args_.push_back(exit_status_ok);\n    return passed_;\n  }\n  virtual void Abort(AbortReason reason) {\n    parent_->abort_args_.push_back(reason);\n  }\n\n private:\n  MockDeathTestFactory* const parent_;\n  const TestRole role_;\n  const int status_;\n  const bool passed_;\n};\n\n\n// MockDeathTestFactory constructor.\nMockDeathTestFactory::MockDeathTestFactory()\n    : create_(true),\n      role_(DeathTest::OVERSEE_TEST),\n      status_(0),\n      passed_(true),\n      assume_role_calls_(0),\n      wait_calls_(0),\n      passed_args_(),\n      abort_args_() {\n}\n\n\n// Sets the parameters for subsequent calls to Create.\nvoid MockDeathTestFactory::SetParameters(bool create,\n                                         DeathTest::TestRole role,\n                                         int status, bool passed) {\n  create_ = create;\n  role_ = role;\n  status_ = status;\n  passed_ = passed;\n\n  assume_role_calls_ = 0;\n  wait_calls_ = 0;\n  passed_args_.clear();\n  abort_args_.clear();\n}\n\n\n// Sets test to NULL (if create_ is false) or to the address of a new\n// MockDeathTest object with parameters taken from the last call\n// to SetParameters (if create_ is true).  Always returns true.\nbool MockDeathTestFactory::Create(const char* /*statement*/,\n                                  const ::testing::internal::RE* /*regex*/,\n                                  const char* /*file*/,\n                                  int /*line*/,\n                                  DeathTest** test) {\n  test_deleted_ = false;\n  if (create_) {\n    *test = new MockDeathTest(this, role_, status_, passed_);\n  } else {\n    *test = NULL;\n  }\n  return true;\n}\n\n// A test fixture for testing the logic of the GTEST_DEATH_TEST_ macro.\n// It installs a MockDeathTestFactory that is used for the duration\n// of the test case.\nclass MacroLogicDeathTest : public testing::Test {\n protected:\n  static testing::internal::ReplaceDeathTestFactory* replacer_;\n  static MockDeathTestFactory* factory_;\n\n  static void SetUpTestCase() {\n    factory_ = new MockDeathTestFactory;\n    replacer_ = new testing::internal::ReplaceDeathTestFactory(factory_);\n  }\n\n  static void TearDownTestCase() {\n    delete replacer_;\n    replacer_ = NULL;\n    delete factory_;\n    factory_ = NULL;\n  }\n\n  // Runs a death test that breaks the rules by returning.  Such a death\n  // test cannot be run directly from a test routine that uses a\n  // MockDeathTest, or the remainder of the routine will not be executed.\n  static void RunReturningDeathTest(bool* flag) {\n    ASSERT_DEATH({  // NOLINT\n      *flag = true;\n      return;\n    }, \"\");\n  }\n};\n\ntesting::internal::ReplaceDeathTestFactory* MacroLogicDeathTest::replacer_\n    = NULL;\nMockDeathTestFactory* MacroLogicDeathTest::factory_ = NULL;\n\n\n// Test that nothing happens when the factory doesn't return a DeathTest:\nTEST_F(MacroLogicDeathTest, NothingHappens) {\n  bool flag = false;\n  factory_->SetParameters(false, DeathTest::OVERSEE_TEST, 0, true);\n  EXPECT_DEATH(flag = true, \"\");\n  EXPECT_FALSE(flag);\n  EXPECT_EQ(0, factory_->AssumeRoleCalls());\n  EXPECT_EQ(0, factory_->WaitCalls());\n  EXPECT_EQ(0, factory_->PassedCalls());\n  EXPECT_EQ(0, factory_->AbortCalls());\n  EXPECT_FALSE(factory_->TestDeleted());\n}\n\n// Test that the parent process doesn't run the death test code,\n// and that the Passed method returns false when the (simulated)\n// child process exits with status 0:\nTEST_F(MacroLogicDeathTest, ChildExitsSuccessfully) {\n  bool flag = false;\n  factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 0, true);\n  EXPECT_DEATH(flag = true, \"\");\n  EXPECT_FALSE(flag);\n  EXPECT_EQ(1, factory_->AssumeRoleCalls());\n  EXPECT_EQ(1, factory_->WaitCalls());\n  ASSERT_EQ(1, factory_->PassedCalls());\n  EXPECT_FALSE(factory_->PassedArgument(0));\n  EXPECT_EQ(0, factory_->AbortCalls());\n  EXPECT_TRUE(factory_->TestDeleted());\n}\n\n// Tests that the Passed method was given the argument \"true\" when\n// the (simulated) child process exits with status 1:\nTEST_F(MacroLogicDeathTest, ChildExitsUnsuccessfully) {\n  bool flag = false;\n  factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 1, true);\n  EXPECT_DEATH(flag = true, \"\");\n  EXPECT_FALSE(flag);\n  EXPECT_EQ(1, factory_->AssumeRoleCalls());\n  EXPECT_EQ(1, factory_->WaitCalls());\n  ASSERT_EQ(1, factory_->PassedCalls());\n  EXPECT_TRUE(factory_->PassedArgument(0));\n  EXPECT_EQ(0, factory_->AbortCalls());\n  EXPECT_TRUE(factory_->TestDeleted());\n}\n\n// Tests that the (simulated) child process executes the death test\n// code, and is aborted with the correct AbortReason if it\n// executes a return statement.\nTEST_F(MacroLogicDeathTest, ChildPerformsReturn) {\n  bool flag = false;\n  factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true);\n  RunReturningDeathTest(&flag);\n  EXPECT_TRUE(flag);\n  EXPECT_EQ(1, factory_->AssumeRoleCalls());\n  EXPECT_EQ(0, factory_->WaitCalls());\n  EXPECT_EQ(0, factory_->PassedCalls());\n  EXPECT_EQ(1, factory_->AbortCalls());\n  EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT,\n            factory_->AbortArgument(0));\n  EXPECT_TRUE(factory_->TestDeleted());\n}\n\n// Tests that the (simulated) child process is aborted with the\n// correct AbortReason if it does not die.\nTEST_F(MacroLogicDeathTest, ChildDoesNotDie) {\n  bool flag = false;\n  factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true);\n  EXPECT_DEATH(flag = true, \"\");\n  EXPECT_TRUE(flag);\n  EXPECT_EQ(1, factory_->AssumeRoleCalls());\n  EXPECT_EQ(0, factory_->WaitCalls());\n  EXPECT_EQ(0, factory_->PassedCalls());\n  // This time there are two calls to Abort: one since the test didn't\n  // die, and another from the ReturnSentinel when it's destroyed.  The\n  // sentinel normally isn't destroyed if a test doesn't die, since\n  // _exit(2) is called in that case by ForkingDeathTest, but not by\n  // our MockDeathTest.\n  ASSERT_EQ(2, factory_->AbortCalls());\n  EXPECT_EQ(DeathTest::TEST_DID_NOT_DIE,\n            factory_->AbortArgument(0));\n  EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT,\n            factory_->AbortArgument(1));\n  EXPECT_TRUE(factory_->TestDeleted());\n}\n\n// Tests that a successful death test does not register a successful\n// test part.\nTEST(SuccessRegistrationDeathTest, NoSuccessPart) {\n  EXPECT_DEATH(_exit(1), \"\");\n  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\nTEST(StreamingAssertionsDeathTest, DeathTest) {\n  EXPECT_DEATH(_exit(1), \"\") << \"unexpected failure\";\n  ASSERT_DEATH(_exit(1), \"\") << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_DEATH(_exit(0), \"\") << \"expected failure\";\n  }, \"expected failure\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_DEATH(_exit(0), \"\") << \"expected failure\";\n  }, \"expected failure\");\n}\n\n// Tests that GetLastErrnoDescription returns an empty string when the\n// last error is 0 and non-empty string when it is non-zero.\nTEST(GetLastErrnoDescription, GetLastErrnoDescriptionWorks) {\n  errno = ENOENT;\n  EXPECT_STRNE(\"\", GetLastErrnoDescription().c_str());\n  errno = 0;\n  EXPECT_STREQ(\"\", GetLastErrnoDescription().c_str());\n}\n\n# if GTEST_OS_WINDOWS\nTEST(AutoHandleTest, AutoHandleWorks) {\n  HANDLE handle = ::CreateEvent(NULL, FALSE, FALSE, NULL);\n  ASSERT_NE(INVALID_HANDLE_VALUE, handle);\n\n  // Tests that the AutoHandle is correctly initialized with a handle.\n  testing::internal::AutoHandle auto_handle(handle);\n  EXPECT_EQ(handle, auto_handle.Get());\n\n  // Tests that Reset assigns INVALID_HANDLE_VALUE.\n  // Note that this cannot verify whether the original handle is closed.\n  auto_handle.Reset();\n  EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle.Get());\n\n  // Tests that Reset assigns the new handle.\n  // Note that this cannot verify whether the original handle is closed.\n  handle = ::CreateEvent(NULL, FALSE, FALSE, NULL);\n  ASSERT_NE(INVALID_HANDLE_VALUE, handle);\n  auto_handle.Reset(handle);\n  EXPECT_EQ(handle, auto_handle.Get());\n\n  // Tests that AutoHandle contains INVALID_HANDLE_VALUE by default.\n  testing::internal::AutoHandle auto_handle2;\n  EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle2.Get());\n}\n# endif  // GTEST_OS_WINDOWS\n\n# if GTEST_OS_WINDOWS\ntypedef unsigned __int64 BiggestParsable;\ntypedef signed __int64 BiggestSignedParsable;\nconst BiggestParsable kBiggestParsableMax = ULLONG_MAX;\nconst BiggestSignedParsable kBiggestSignedParsableMax = LLONG_MAX;\n# else\ntypedef unsigned long long BiggestParsable;\ntypedef signed long long BiggestSignedParsable;\nconst BiggestParsable kBiggestParsableMax =\n    ::std::numeric_limits<BiggestParsable>::max();\nconst BiggestSignedParsable kBiggestSignedParsableMax =\n    ::std::numeric_limits<BiggestSignedParsable>::max();\n# endif  // GTEST_OS_WINDOWS\n\nTEST(ParseNaturalNumberTest, RejectsInvalidFormat) {\n  BiggestParsable result = 0;\n\n  // Rejects non-numbers.\n  EXPECT_FALSE(ParseNaturalNumber(\"non-number string\", &result));\n\n  // Rejects numbers with whitespace prefix.\n  EXPECT_FALSE(ParseNaturalNumber(\" 123\", &result));\n\n  // Rejects negative numbers.\n  EXPECT_FALSE(ParseNaturalNumber(\"-123\", &result));\n\n  // Rejects numbers starting with a plus sign.\n  EXPECT_FALSE(ParseNaturalNumber(\"+123\", &result));\n  errno = 0;\n}\n\nTEST(ParseNaturalNumberTest, RejectsOverflownNumbers) {\n  BiggestParsable result = 0;\n\n  EXPECT_FALSE(ParseNaturalNumber(\"99999999999999999999999\", &result));\n\n  signed char char_result = 0;\n  EXPECT_FALSE(ParseNaturalNumber(\"200\", &char_result));\n  errno = 0;\n}\n\nTEST(ParseNaturalNumberTest, AcceptsValidNumbers) {\n  BiggestParsable result = 0;\n\n  result = 0;\n  ASSERT_TRUE(ParseNaturalNumber(\"123\", &result));\n  EXPECT_EQ(123U, result);\n\n  // Check 0 as an edge case.\n  result = 1;\n  ASSERT_TRUE(ParseNaturalNumber(\"0\", &result));\n  EXPECT_EQ(0U, result);\n\n  result = 1;\n  ASSERT_TRUE(ParseNaturalNumber(\"00000\", &result));\n  EXPECT_EQ(0U, result);\n}\n\nTEST(ParseNaturalNumberTest, AcceptsTypeLimits) {\n  Message msg;\n  msg << kBiggestParsableMax;\n\n  BiggestParsable result = 0;\n  EXPECT_TRUE(ParseNaturalNumber(msg.GetString(), &result));\n  EXPECT_EQ(kBiggestParsableMax, result);\n\n  Message msg2;\n  msg2 << kBiggestSignedParsableMax;\n\n  BiggestSignedParsable signed_result = 0;\n  EXPECT_TRUE(ParseNaturalNumber(msg2.GetString(), &signed_result));\n  EXPECT_EQ(kBiggestSignedParsableMax, signed_result);\n\n  Message msg3;\n  msg3 << INT_MAX;\n\n  int int_result = 0;\n  EXPECT_TRUE(ParseNaturalNumber(msg3.GetString(), &int_result));\n  EXPECT_EQ(INT_MAX, int_result);\n\n  Message msg4;\n  msg4 << UINT_MAX;\n\n  unsigned int uint_result = 0;\n  EXPECT_TRUE(ParseNaturalNumber(msg4.GetString(), &uint_result));\n  EXPECT_EQ(UINT_MAX, uint_result);\n}\n\nTEST(ParseNaturalNumberTest, WorksForShorterIntegers) {\n  short short_result = 0;\n  ASSERT_TRUE(ParseNaturalNumber(\"123\", &short_result));\n  EXPECT_EQ(123, short_result);\n\n  signed char char_result = 0;\n  ASSERT_TRUE(ParseNaturalNumber(\"123\", &char_result));\n  EXPECT_EQ(123, char_result);\n}\n\n# if GTEST_OS_WINDOWS\nTEST(EnvironmentTest, HandleFitsIntoSizeT) {\n  // TODO(vladl@google.com): Remove this test after this condition is verified\n  // in a static assertion in gtest-death-test.cc in the function\n  // GetStatusFileDescriptor.\n  ASSERT_TRUE(sizeof(HANDLE) <= sizeof(size_t));\n}\n# endif  // GTEST_OS_WINDOWS\n\n// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger\n// failures when death tests are available on the system.\nTEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) {\n  EXPECT_DEATH_IF_SUPPORTED(DieInside(\"CondDeathTestExpectMacro\"),\n                            \"death inside CondDeathTestExpectMacro\");\n  ASSERT_DEATH_IF_SUPPORTED(DieInside(\"CondDeathTestAssertMacro\"),\n                            \"death inside CondDeathTestAssertMacro\");\n\n  // Empty statement will not crash, which must trigger a failure.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, \"\"), \"\");\n  EXPECT_FATAL_FAILURE(ASSERT_DEATH_IF_SUPPORTED(;, \"\"), \"\");\n}\n\n#else\n\nusing testing::internal::CaptureStderr;\nusing testing::internal::GetCapturedStderr;\n\n// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED are still\n// defined but do not trigger failures when death tests are not available on\n// the system.\nTEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) {\n  // Empty statement will not crash, but that should not trigger a failure\n  // when death tests are not supported.\n  CaptureStderr();\n  EXPECT_DEATH_IF_SUPPORTED(;, \"\");\n  std::string output = GetCapturedStderr();\n  ASSERT_TRUE(NULL != strstr(output.c_str(),\n                             \"Death tests are not supported on this platform\"));\n  ASSERT_TRUE(NULL != strstr(output.c_str(), \";\"));\n\n  // The streamed message should not be printed as there is no test failure.\n  CaptureStderr();\n  EXPECT_DEATH_IF_SUPPORTED(;, \"\") << \"streamed message\";\n  output = GetCapturedStderr();\n  ASSERT_TRUE(NULL == strstr(output.c_str(), \"streamed message\"));\n\n  CaptureStderr();\n  ASSERT_DEATH_IF_SUPPORTED(;, \"\");  // NOLINT\n  output = GetCapturedStderr();\n  ASSERT_TRUE(NULL != strstr(output.c_str(),\n                             \"Death tests are not supported on this platform\"));\n  ASSERT_TRUE(NULL != strstr(output.c_str(), \";\"));\n\n  CaptureStderr();\n  ASSERT_DEATH_IF_SUPPORTED(;, \"\") << \"streamed message\";  // NOLINT\n  output = GetCapturedStderr();\n  ASSERT_TRUE(NULL == strstr(output.c_str(), \"streamed message\"));\n}\n\nvoid FuncWithAssert(int* n) {\n  ASSERT_DEATH_IF_SUPPORTED(return;, \"\");\n  (*n)++;\n}\n\n// Tests that ASSERT_DEATH_IF_SUPPORTED does not return from the current\n// function (as ASSERT_DEATH does) if death tests are not supported.\nTEST(ConditionalDeathMacrosTest, AssertDeatDoesNotReturnhIfUnsupported) {\n  int n = 0;\n  FuncWithAssert(&n);\n  EXPECT_EQ(1, n);\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Tests that the death test macros expand to code which may or may not\n// be followed by operator<<, and that in either case the complete text\n// comprises only a single C++ statement.\n//\n// The syntax should work whether death tests are available or not.\nTEST(ConditionalDeathMacrosSyntaxDeathTest, SingleStatement) {\n  if (AlwaysFalse())\n    // This would fail if executed; this is a compilation test only\n    ASSERT_DEATH_IF_SUPPORTED(return, \"\");\n\n  if (AlwaysTrue())\n    EXPECT_DEATH_IF_SUPPORTED(_exit(1), \"\");\n  else\n    // This empty \"else\" branch is meant to ensure that EXPECT_DEATH\n    // doesn't expand into an \"if\" statement without an \"else\"\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    ASSERT_DEATH_IF_SUPPORTED(return, \"\") << \"did not die\";\n\n  if (AlwaysFalse())\n    ;  // NOLINT\n  else\n    EXPECT_DEATH_IF_SUPPORTED(_exit(1), \"\") << 1 << 2 << 3;\n}\n\n// Tests that conditional death test macros expand to code which interacts\n// well with switch statements.\nTEST(ConditionalDeathMacrosSyntaxDeathTest, SwitchStatement) {\n// Microsoft compiler usually complains about switch statements without\n// case labels. We suppress that warning for this test.\n#ifdef _MSC_VER\n# pragma warning(push)\n# pragma warning(disable: 4065)\n#endif  // _MSC_VER\n\n  switch (0)\n    default:\n      ASSERT_DEATH_IF_SUPPORTED(_exit(1), \"\")\n          << \"exit in default switch handler\";\n\n  switch (0)\n    case 0:\n      EXPECT_DEATH_IF_SUPPORTED(_exit(1), \"\") << \"exit in switch case\";\n\n#ifdef _MSC_VER\n# pragma warning(pop)\n#endif  // _MSC_VER\n}\n\nTEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInFastStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_FALSE(InDeathTestChild());\n  EXPECT_DEATH({\n    fprintf(stderr, InDeathTestChild() ? \"Inside\" : \"Outside\");\n    fflush(stderr);\n    _exit(1);\n  }, \"Inside\");\n}\n\nTEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInThreadSafeStyle) {\n  testing::GTEST_FLAG(death_test_style) = \"threadsafe\";\n  EXPECT_FALSE(InDeathTestChild());\n  EXPECT_DEATH({\n    fprintf(stderr, InDeathTestChild() ? \"Inside\" : \"Outside\");\n    fflush(stderr);\n    _exit(1);\n  }, \"Inside\");\n}\n\n// Tests that a test case whose name ends with \"DeathTest\" works fine\n// on Windows.\nTEST(NotADeathTest, Test) {\n  SUCCEED();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-filepath_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: keith.ray@gmail.com (Keith Ray)\n//\n// Google Test filepath utilities\n//\n// This file tests classes and functions used internally by\n// Google Test.  They are subject to change without notice.\n//\n// This file is #included from gtest_unittest.cc, to avoid changing\n// build or make-files for some existing Google Test clients. Do not\n// #include this file anywhere else!\n\n#include \"gtest/internal/gtest-filepath.h\"\n#include \"gtest/gtest.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\n#if GTEST_OS_WINDOWS_MOBILE\n# include <windows.h>  // NOLINT\n#elif GTEST_OS_WINDOWS\n# include <direct.h>  // NOLINT\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\nnamespace testing {\nnamespace internal {\nnamespace {\n\n#if GTEST_OS_WINDOWS_MOBILE\n// TODO(wan@google.com): Move these to the POSIX adapter section in\n// gtest-port.h.\n\n// Windows CE doesn't have the remove C function.\nint remove(const char* path) {\n  LPCWSTR wpath = String::AnsiToUtf16(path);\n  int ret = DeleteFile(wpath) ? 0 : -1;\n  delete [] wpath;\n  return ret;\n}\n// Windows CE doesn't have the _rmdir C function.\nint _rmdir(const char* path) {\n  FilePath filepath(path);\n  LPCWSTR wpath = String::AnsiToUtf16(\n      filepath.RemoveTrailingPathSeparator().c_str());\n  int ret = RemoveDirectory(wpath) ? 0 : -1;\n  delete [] wpath;\n  return ret;\n}\n\n#else\n\nTEST(GetCurrentDirTest, ReturnsCurrentDir) {\n  const FilePath original_dir = FilePath::GetCurrentDir();\n  EXPECT_FALSE(original_dir.IsEmpty());\n\n  posix::ChDir(GTEST_PATH_SEP_);\n  const FilePath cwd = FilePath::GetCurrentDir();\n  posix::ChDir(original_dir.c_str());\n\n# if GTEST_OS_WINDOWS\n\n  // Skips the \":\".\n  const char* const cwd_without_drive = strchr(cwd.c_str(), ':');\n  ASSERT_TRUE(cwd_without_drive != NULL);\n  EXPECT_STREQ(GTEST_PATH_SEP_, cwd_without_drive + 1);\n\n# else\n\n  EXPECT_EQ(GTEST_PATH_SEP_, cwd.string());\n\n# endif\n}\n\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\nTEST(IsEmptyTest, ReturnsTrueForEmptyPath) {\n  EXPECT_TRUE(FilePath(\"\").IsEmpty());\n}\n\nTEST(IsEmptyTest, ReturnsFalseForNonEmptyPath) {\n  EXPECT_FALSE(FilePath(\"a\").IsEmpty());\n  EXPECT_FALSE(FilePath(\".\").IsEmpty());\n  EXPECT_FALSE(FilePath(\"a/b\").IsEmpty());\n  EXPECT_FALSE(FilePath(\"a\\\\b\\\\\").IsEmpty());\n}\n\n// RemoveDirectoryName \"\" -> \"\"\nTEST(RemoveDirectoryNameTest, WhenEmptyName) {\n  EXPECT_EQ(\"\", FilePath(\"\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName \"afile\" -> \"afile\"\nTEST(RemoveDirectoryNameTest, ButNoDirectory) {\n  EXPECT_EQ(\"afile\",\n      FilePath(\"afile\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName \"/afile\" -> \"afile\"\nTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileName) {\n  EXPECT_EQ(\"afile\",\n      FilePath(GTEST_PATH_SEP_ \"afile\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName \"adir/\" -> \"\"\nTEST(RemoveDirectoryNameTest, WhereThereIsNoFileName) {\n  EXPECT_EQ(\"\",\n      FilePath(\"adir\" GTEST_PATH_SEP_).RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName \"adir/afile\" -> \"afile\"\nTEST(RemoveDirectoryNameTest, ShouldGiveFileName) {\n  EXPECT_EQ(\"afile\",\n      FilePath(\"adir\" GTEST_PATH_SEP_ \"afile\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName \"adir/subdir/afile\" -> \"afile\"\nTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {\n  EXPECT_EQ(\"afile\",\n      FilePath(\"adir\" GTEST_PATH_SEP_ \"subdir\" GTEST_PATH_SEP_ \"afile\")\n      .RemoveDirectoryName().string());\n}\n\n#if GTEST_HAS_ALT_PATH_SEP_\n\n// Tests that RemoveDirectoryName() works with the alternate separator\n// on Windows.\n\n// RemoveDirectoryName(\"/afile\") -> \"afile\"\nTEST(RemoveDirectoryNameTest, RootFileShouldGiveFileNameForAlternateSeparator) {\n  EXPECT_EQ(\"afile\", FilePath(\"/afile\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName(\"adir/\") -> \"\"\nTEST(RemoveDirectoryNameTest, WhereThereIsNoFileNameForAlternateSeparator) {\n  EXPECT_EQ(\"\", FilePath(\"adir/\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName(\"adir/afile\") -> \"afile\"\nTEST(RemoveDirectoryNameTest, ShouldGiveFileNameForAlternateSeparator) {\n  EXPECT_EQ(\"afile\", FilePath(\"adir/afile\").RemoveDirectoryName().string());\n}\n\n// RemoveDirectoryName(\"adir/subdir/afile\") -> \"afile\"\nTEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileNameForAlternateSeparator) {\n  EXPECT_EQ(\"afile\",\n            FilePath(\"adir/subdir/afile\").RemoveDirectoryName().string());\n}\n\n#endif\n\n// RemoveFileName \"\" -> \"./\"\nTEST(RemoveFileNameTest, EmptyName) {\n#if GTEST_OS_WINDOWS_MOBILE\n  // On Windows CE, we use the root as the current directory.\n  EXPECT_EQ(GTEST_PATH_SEP_, FilePath(\"\").RemoveFileName().string());\n#else\n  EXPECT_EQ(\".\" GTEST_PATH_SEP_, FilePath(\"\").RemoveFileName().string());\n#endif\n}\n\n// RemoveFileName \"adir/\" -> \"adir/\"\nTEST(RemoveFileNameTest, ButNoFile) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_,\n      FilePath(\"adir\" GTEST_PATH_SEP_).RemoveFileName().string());\n}\n\n// RemoveFileName \"adir/afile\" -> \"adir/\"\nTEST(RemoveFileNameTest, GivesDirName) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_,\n            FilePath(\"adir\" GTEST_PATH_SEP_ \"afile\").RemoveFileName().string());\n}\n\n// RemoveFileName \"adir/subdir/afile\" -> \"adir/subdir/\"\nTEST(RemoveFileNameTest, GivesDirAndSubDirName) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_ \"subdir\" GTEST_PATH_SEP_,\n      FilePath(\"adir\" GTEST_PATH_SEP_ \"subdir\" GTEST_PATH_SEP_ \"afile\")\n      .RemoveFileName().string());\n}\n\n// RemoveFileName \"/afile\" -> \"/\"\nTEST(RemoveFileNameTest, GivesRootDir) {\n  EXPECT_EQ(GTEST_PATH_SEP_,\n      FilePath(GTEST_PATH_SEP_ \"afile\").RemoveFileName().string());\n}\n\n#if GTEST_HAS_ALT_PATH_SEP_\n\n// Tests that RemoveFileName() works with the alternate separator on\n// Windows.\n\n// RemoveFileName(\"adir/\") -> \"adir/\"\nTEST(RemoveFileNameTest, ButNoFileForAlternateSeparator) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_,\n            FilePath(\"adir/\").RemoveFileName().string());\n}\n\n// RemoveFileName(\"adir/afile\") -> \"adir/\"\nTEST(RemoveFileNameTest, GivesDirNameForAlternateSeparator) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_,\n            FilePath(\"adir/afile\").RemoveFileName().string());\n}\n\n// RemoveFileName(\"adir/subdir/afile\") -> \"adir/subdir/\"\nTEST(RemoveFileNameTest, GivesDirAndSubDirNameForAlternateSeparator) {\n  EXPECT_EQ(\"adir\" GTEST_PATH_SEP_ \"subdir\" GTEST_PATH_SEP_,\n            FilePath(\"adir/subdir/afile\").RemoveFileName().string());\n}\n\n// RemoveFileName(\"/afile\") -> \"\\\"\nTEST(RemoveFileNameTest, GivesRootDirForAlternateSeparator) {\n  EXPECT_EQ(GTEST_PATH_SEP_, FilePath(\"/afile\").RemoveFileName().string());\n}\n\n#endif\n\nTEST(MakeFileNameTest, GenerateWhenNumberIsZero) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"foo\"), FilePath(\"bar\"),\n      0, \"xml\");\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar.xml\", actual.string());\n}\n\nTEST(MakeFileNameTest, GenerateFileNameNumberGtZero) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"foo\"), FilePath(\"bar\"),\n      12, \"xml\");\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar_12.xml\", actual.string());\n}\n\nTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberIsZero) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"foo\" GTEST_PATH_SEP_),\n      FilePath(\"bar\"), 0, \"xml\");\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar.xml\", actual.string());\n}\n\nTEST(MakeFileNameTest, GenerateFileNameWithSlashNumberGtZero) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"foo\" GTEST_PATH_SEP_),\n      FilePath(\"bar\"), 12, \"xml\");\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar_12.xml\", actual.string());\n}\n\nTEST(MakeFileNameTest, GenerateWhenNumberIsZeroAndDirIsEmpty) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"\"), FilePath(\"bar\"),\n      0, \"xml\");\n  EXPECT_EQ(\"bar.xml\", actual.string());\n}\n\nTEST(MakeFileNameTest, GenerateWhenNumberIsNotZeroAndDirIsEmpty) {\n  FilePath actual = FilePath::MakeFileName(FilePath(\"\"), FilePath(\"bar\"),\n      14, \"xml\");\n  EXPECT_EQ(\"bar_14.xml\", actual.string());\n}\n\nTEST(ConcatPathsTest, WorksWhenDirDoesNotEndWithPathSep) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"foo\"),\n                                          FilePath(\"bar.xml\"));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar.xml\", actual.string());\n}\n\nTEST(ConcatPathsTest, WorksWhenPath1EndsWithPathSep) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"foo\" GTEST_PATH_SEP_),\n                                          FilePath(\"bar.xml\"));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar.xml\", actual.string());\n}\n\nTEST(ConcatPathsTest, Path1BeingEmpty) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"\"),\n                                          FilePath(\"bar.xml\"));\n  EXPECT_EQ(\"bar.xml\", actual.string());\n}\n\nTEST(ConcatPathsTest, Path2BeingEmpty) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"foo\"), FilePath(\"\"));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_, actual.string());\n}\n\nTEST(ConcatPathsTest, BothPathBeingEmpty) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"\"),\n                                          FilePath(\"\"));\n  EXPECT_EQ(\"\", actual.string());\n}\n\nTEST(ConcatPathsTest, Path1ContainsPathSep) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"foo\" GTEST_PATH_SEP_ \"bar\"),\n                                          FilePath(\"foobar.xml\"));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\" GTEST_PATH_SEP_ \"foobar.xml\",\n            actual.string());\n}\n\nTEST(ConcatPathsTest, Path2ContainsPathSep) {\n  FilePath actual = FilePath::ConcatPaths(\n      FilePath(\"foo\" GTEST_PATH_SEP_),\n      FilePath(\"bar\" GTEST_PATH_SEP_ \"bar.xml\"));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\" GTEST_PATH_SEP_ \"bar.xml\",\n            actual.string());\n}\n\nTEST(ConcatPathsTest, Path2EndsWithPathSep) {\n  FilePath actual = FilePath::ConcatPaths(FilePath(\"foo\"),\n                                          FilePath(\"bar\" GTEST_PATH_SEP_));\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\" GTEST_PATH_SEP_, actual.string());\n}\n\n// RemoveTrailingPathSeparator \"\" -> \"\"\nTEST(RemoveTrailingPathSeparatorTest, EmptyString) {\n  EXPECT_EQ(\"\", FilePath(\"\").RemoveTrailingPathSeparator().string());\n}\n\n// RemoveTrailingPathSeparator \"foo\" -> \"foo\"\nTEST(RemoveTrailingPathSeparatorTest, FileNoSlashString) {\n  EXPECT_EQ(\"foo\", FilePath(\"foo\").RemoveTrailingPathSeparator().string());\n}\n\n// RemoveTrailingPathSeparator \"foo/\" -> \"foo\"\nTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveTrailingSeparator) {\n  EXPECT_EQ(\"foo\",\n      FilePath(\"foo\" GTEST_PATH_SEP_).RemoveTrailingPathSeparator().string());\n#if GTEST_HAS_ALT_PATH_SEP_\n  EXPECT_EQ(\"foo\", FilePath(\"foo/\").RemoveTrailingPathSeparator().string());\n#endif\n}\n\n// RemoveTrailingPathSeparator \"foo/bar/\" -> \"foo/bar/\"\nTEST(RemoveTrailingPathSeparatorTest, ShouldRemoveLastSeparator) {\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\",\n            FilePath(\"foo\" GTEST_PATH_SEP_ \"bar\" GTEST_PATH_SEP_)\n                .RemoveTrailingPathSeparator().string());\n}\n\n// RemoveTrailingPathSeparator \"foo/bar\" -> \"foo/bar\"\nTEST(RemoveTrailingPathSeparatorTest, ShouldReturnUnmodified) {\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\",\n            FilePath(\"foo\" GTEST_PATH_SEP_ \"bar\")\n                .RemoveTrailingPathSeparator().string());\n}\n\nTEST(DirectoryTest, RootDirectoryExists) {\n#if GTEST_OS_WINDOWS  // We are on Windows.\n  char current_drive[_MAX_PATH];  // NOLINT\n  current_drive[0] = static_cast<char>(_getdrive() + 'A' - 1);\n  current_drive[1] = ':';\n  current_drive[2] = '\\\\';\n  current_drive[3] = '\\0';\n  EXPECT_TRUE(FilePath(current_drive).DirectoryExists());\n#else\n  EXPECT_TRUE(FilePath(\"/\").DirectoryExists());\n#endif  // GTEST_OS_WINDOWS\n}\n\n#if GTEST_OS_WINDOWS\nTEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {\n  const int saved_drive_ = _getdrive();\n  // Find a drive that doesn't exist. Start with 'Z' to avoid common ones.\n  for (char drive = 'Z'; drive >= 'A'; drive--)\n    if (_chdrive(drive - 'A' + 1) == -1) {\n      char non_drive[_MAX_PATH];  // NOLINT\n      non_drive[0] = drive;\n      non_drive[1] = ':';\n      non_drive[2] = '\\\\';\n      non_drive[3] = '\\0';\n      EXPECT_FALSE(FilePath(non_drive).DirectoryExists());\n      break;\n    }\n  _chdrive(saved_drive_);\n}\n#endif  // GTEST_OS_WINDOWS\n\n#if !GTEST_OS_WINDOWS_MOBILE\n// Windows CE _does_ consider an empty directory to exist.\nTEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {\n  EXPECT_FALSE(FilePath(\"\").DirectoryExists());\n}\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\nTEST(DirectoryTest, CurrentDirectoryExists) {\n#if GTEST_OS_WINDOWS  // We are on Windows.\n# ifndef _WIN32_CE  // Windows CE doesn't have a current directory.\n\n  EXPECT_TRUE(FilePath(\".\").DirectoryExists());\n  EXPECT_TRUE(FilePath(\".\\\\\").DirectoryExists());\n\n# endif  // _WIN32_CE\n#else\n  EXPECT_TRUE(FilePath(\".\").DirectoryExists());\n  EXPECT_TRUE(FilePath(\"./\").DirectoryExists());\n#endif  // GTEST_OS_WINDOWS\n}\n\n// \"foo/bar\" == foo//bar\" == \"foo///bar\"\nTEST(NormalizeTest, MultipleConsecutiveSepaparatorsInMidstring) {\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\",\n            FilePath(\"foo\" GTEST_PATH_SEP_ \"bar\").string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\",\n            FilePath(\"foo\" GTEST_PATH_SEP_ GTEST_PATH_SEP_ \"bar\").string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_ \"bar\",\n            FilePath(\"foo\" GTEST_PATH_SEP_ GTEST_PATH_SEP_\n                     GTEST_PATH_SEP_ \"bar\").string());\n}\n\n// \"/bar\" == //bar\" == \"///bar\"\nTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringStart) {\n  EXPECT_EQ(GTEST_PATH_SEP_ \"bar\",\n    FilePath(GTEST_PATH_SEP_ \"bar\").string());\n  EXPECT_EQ(GTEST_PATH_SEP_ \"bar\",\n    FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ \"bar\").string());\n  EXPECT_EQ(GTEST_PATH_SEP_ \"bar\",\n    FilePath(GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_ \"bar\").string());\n}\n\n// \"foo/\" == foo//\" == \"foo///\"\nTEST(NormalizeTest, MultipleConsecutiveSepaparatorsAtStringEnd) {\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n    FilePath(\"foo\" GTEST_PATH_SEP_).string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n    FilePath(\"foo\" GTEST_PATH_SEP_ GTEST_PATH_SEP_).string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n    FilePath(\"foo\" GTEST_PATH_SEP_ GTEST_PATH_SEP_ GTEST_PATH_SEP_).string());\n}\n\n#if GTEST_HAS_ALT_PATH_SEP_\n\n// Tests that separators at the end of the string are normalized\n// regardless of their combination (e.g. \"foo\\\" ==\"foo/\\\" ==\n// \"foo\\\\/\").\nTEST(NormalizeTest, MixAlternateSeparatorAtStringEnd) {\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n            FilePath(\"foo/\").string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n            FilePath(\"foo\" GTEST_PATH_SEP_ \"/\").string());\n  EXPECT_EQ(\"foo\" GTEST_PATH_SEP_,\n            FilePath(\"foo//\" GTEST_PATH_SEP_).string());\n}\n\n#endif\n\nTEST(AssignmentOperatorTest, DefaultAssignedToNonDefault) {\n  FilePath default_path;\n  FilePath non_default_path(\"path\");\n  non_default_path = default_path;\n  EXPECT_EQ(\"\", non_default_path.string());\n  EXPECT_EQ(\"\", default_path.string());  // RHS var is unchanged.\n}\n\nTEST(AssignmentOperatorTest, NonDefaultAssignedToDefault) {\n  FilePath non_default_path(\"path\");\n  FilePath default_path;\n  default_path = non_default_path;\n  EXPECT_EQ(\"path\", default_path.string());\n  EXPECT_EQ(\"path\", non_default_path.string());  // RHS var is unchanged.\n}\n\nTEST(AssignmentOperatorTest, ConstAssignedToNonConst) {\n  const FilePath const_default_path(\"const_path\");\n  FilePath non_default_path(\"path\");\n  non_default_path = const_default_path;\n  EXPECT_EQ(\"const_path\", non_default_path.string());\n}\n\nclass DirectoryCreationTest : public Test {\n protected:\n  virtual void SetUp() {\n    testdata_path_.Set(FilePath(\n        TempDir() + GetCurrentExecutableName().string() +\n        \"_directory_creation\" GTEST_PATH_SEP_ \"test\" GTEST_PATH_SEP_));\n    testdata_file_.Set(testdata_path_.RemoveTrailingPathSeparator());\n\n    unique_file0_.Set(FilePath::MakeFileName(testdata_path_, FilePath(\"unique\"),\n        0, \"txt\"));\n    unique_file1_.Set(FilePath::MakeFileName(testdata_path_, FilePath(\"unique\"),\n        1, \"txt\"));\n\n    remove(testdata_file_.c_str());\n    remove(unique_file0_.c_str());\n    remove(unique_file1_.c_str());\n    posix::RmDir(testdata_path_.c_str());\n  }\n\n  virtual void TearDown() {\n    remove(testdata_file_.c_str());\n    remove(unique_file0_.c_str());\n    remove(unique_file1_.c_str());\n    posix::RmDir(testdata_path_.c_str());\n  }\n\n  std::string TempDir() const {\n#if GTEST_OS_WINDOWS_MOBILE\n    return \"\\\\temp\\\\\";\n#elif GTEST_OS_WINDOWS\n    const char* temp_dir = posix::GetEnv(\"TEMP\");\n    if (temp_dir == NULL || temp_dir[0] == '\\0')\n      return \"\\\\temp\\\\\";\n    else if (temp_dir[strlen(temp_dir) - 1] == '\\\\')\n      return temp_dir;\n    else\n      return std::string(temp_dir) + \"\\\\\";\n#elif GTEST_OS_LINUX_ANDROID\n    return \"/sdcard/\";\n#else\n    return \"/tmp/\";\n#endif  // GTEST_OS_WINDOWS_MOBILE\n  }\n\n  void CreateTextFile(const char* filename) {\n    FILE* f = posix::FOpen(filename, \"w\");\n    fprintf(f, \"text\\n\");\n    fclose(f);\n  }\n\n  // Strings representing a directory and a file, with identical paths\n  // except for the trailing separator character that distinquishes\n  // a directory named 'test' from a file named 'test'. Example names:\n  FilePath testdata_path_;  // \"/tmp/directory_creation/test/\"\n  FilePath testdata_file_;  // \"/tmp/directory_creation/test\"\n  FilePath unique_file0_;  // \"/tmp/directory_creation/test/unique.txt\"\n  FilePath unique_file1_;  // \"/tmp/directory_creation/test/unique_1.txt\"\n};\n\nTEST_F(DirectoryCreationTest, CreateDirectoriesRecursively) {\n  EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();\n  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());\n  EXPECT_TRUE(testdata_path_.DirectoryExists());\n}\n\nTEST_F(DirectoryCreationTest, CreateDirectoriesForAlreadyExistingPath) {\n  EXPECT_FALSE(testdata_path_.DirectoryExists()) << testdata_path_.string();\n  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());\n  // Call 'create' again... should still succeed.\n  EXPECT_TRUE(testdata_path_.CreateDirectoriesRecursively());\n}\n\nTEST_F(DirectoryCreationTest, CreateDirectoriesAndUniqueFilename) {\n  FilePath file_path(FilePath::GenerateUniqueFileName(testdata_path_,\n      FilePath(\"unique\"), \"txt\"));\n  EXPECT_EQ(unique_file0_.string(), file_path.string());\n  EXPECT_FALSE(file_path.FileOrDirectoryExists());  // file not there\n\n  testdata_path_.CreateDirectoriesRecursively();\n  EXPECT_FALSE(file_path.FileOrDirectoryExists());  // file still not there\n  CreateTextFile(file_path.c_str());\n  EXPECT_TRUE(file_path.FileOrDirectoryExists());\n\n  FilePath file_path2(FilePath::GenerateUniqueFileName(testdata_path_,\n      FilePath(\"unique\"), \"txt\"));\n  EXPECT_EQ(unique_file1_.string(), file_path2.string());\n  EXPECT_FALSE(file_path2.FileOrDirectoryExists());  // file not there\n  CreateTextFile(file_path2.c_str());\n  EXPECT_TRUE(file_path2.FileOrDirectoryExists());\n}\n\nTEST_F(DirectoryCreationTest, CreateDirectoriesFail) {\n  // force a failure by putting a file where we will try to create a directory.\n  CreateTextFile(testdata_file_.c_str());\n  EXPECT_TRUE(testdata_file_.FileOrDirectoryExists());\n  EXPECT_FALSE(testdata_file_.DirectoryExists());\n  EXPECT_FALSE(testdata_file_.CreateDirectoriesRecursively());\n}\n\nTEST(NoDirectoryCreationTest, CreateNoDirectoriesForDefaultXmlFile) {\n  const FilePath test_detail_xml(\"test_detail.xml\");\n  EXPECT_FALSE(test_detail_xml.CreateDirectoriesRecursively());\n}\n\nTEST(FilePathTest, DefaultConstructor) {\n  FilePath fp;\n  EXPECT_EQ(\"\", fp.string());\n}\n\nTEST(FilePathTest, CharAndCopyConstructors) {\n  const FilePath fp(\"spicy\");\n  EXPECT_EQ(\"spicy\", fp.string());\n\n  const FilePath fp_copy(fp);\n  EXPECT_EQ(\"spicy\", fp_copy.string());\n}\n\nTEST(FilePathTest, StringConstructor) {\n  const FilePath fp(std::string(\"cider\"));\n  EXPECT_EQ(\"cider\", fp.string());\n}\n\nTEST(FilePathTest, Set) {\n  const FilePath apple(\"apple\");\n  FilePath mac(\"mac\");\n  mac.Set(apple);  // Implement Set() since overloading operator= is forbidden.\n  EXPECT_EQ(\"apple\", mac.string());\n  EXPECT_EQ(\"apple\", apple.string());\n}\n\nTEST(FilePathTest, ToString) {\n  const FilePath file(\"drink\");\n  EXPECT_EQ(\"drink\", file.string());\n}\n\nTEST(FilePathTest, RemoveExtension) {\n  EXPECT_EQ(\"app\", FilePath(\"app.cc\").RemoveExtension(\"cc\").string());\n  EXPECT_EQ(\"app\", FilePath(\"app.exe\").RemoveExtension(\"exe\").string());\n  EXPECT_EQ(\"APP\", FilePath(\"APP.EXE\").RemoveExtension(\"exe\").string());\n}\n\nTEST(FilePathTest, RemoveExtensionWhenThereIsNoExtension) {\n  EXPECT_EQ(\"app\", FilePath(\"app\").RemoveExtension(\"exe\").string());\n}\n\nTEST(FilePathTest, IsDirectory) {\n  EXPECT_FALSE(FilePath(\"cola\").IsDirectory());\n  EXPECT_TRUE(FilePath(\"koala\" GTEST_PATH_SEP_).IsDirectory());\n#if GTEST_HAS_ALT_PATH_SEP_\n  EXPECT_TRUE(FilePath(\"koala/\").IsDirectory());\n#endif\n}\n\nTEST(FilePathTest, IsAbsolutePath) {\n  EXPECT_FALSE(FilePath(\"is\" GTEST_PATH_SEP_ \"relative\").IsAbsolutePath());\n  EXPECT_FALSE(FilePath(\"\").IsAbsolutePath());\n#if GTEST_OS_WINDOWS\n  EXPECT_TRUE(FilePath(\"c:\\\\\" GTEST_PATH_SEP_ \"is_not\"\n                       GTEST_PATH_SEP_ \"relative\").IsAbsolutePath());\n  EXPECT_FALSE(FilePath(\"c:foo\" GTEST_PATH_SEP_ \"bar\").IsAbsolutePath());\n  EXPECT_TRUE(FilePath(\"c:/\" GTEST_PATH_SEP_ \"is_not\"\n                       GTEST_PATH_SEP_ \"relative\").IsAbsolutePath());\n#else\n  EXPECT_TRUE(FilePath(GTEST_PATH_SEP_ \"is_not\" GTEST_PATH_SEP_ \"relative\")\n              .IsAbsolutePath());\n#endif  // GTEST_OS_WINDOWS\n}\n\nTEST(FilePathTest, IsRootDirectory) {\n#if GTEST_OS_WINDOWS\n  EXPECT_TRUE(FilePath(\"a:\\\\\").IsRootDirectory());\n  EXPECT_TRUE(FilePath(\"Z:/\").IsRootDirectory());\n  EXPECT_TRUE(FilePath(\"e://\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"b:\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"b:a\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"8:/\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"c|/\").IsRootDirectory());\n#else\n  EXPECT_TRUE(FilePath(\"/\").IsRootDirectory());\n  EXPECT_TRUE(FilePath(\"//\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"\\\\\").IsRootDirectory());\n  EXPECT_FALSE(FilePath(\"/x\").IsRootDirectory());\n#endif\n}\n\n}  // namespace\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-linked_ptr_test.cc",
    "content": "// Copyright 2003, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: Dan Egnor (egnor@google.com)\n// Ported to Windows: Vadim Berman (vadimb@google.com)\n\n#include \"gtest/internal/gtest-linked_ptr.h\"\n\n#include <stdlib.h>\n#include \"gtest/gtest.h\"\n\nnamespace {\n\nusing testing::Message;\nusing testing::internal::linked_ptr;\n\nint num;\nMessage* history = NULL;\n\n// Class which tracks allocation/deallocation\nclass A {\n public:\n  A(): mynum(num++) { *history << \"A\" << mynum << \" ctor\\n\"; }\n  virtual ~A() { *history << \"A\" << mynum << \" dtor\\n\"; }\n  virtual void Use() { *history << \"A\" << mynum << \" use\\n\"; }\n protected:\n  int mynum;\n};\n\n// Subclass\nclass B : public A {\n public:\n  B() { *history << \"B\" << mynum << \" ctor\\n\"; }\n  ~B() { *history << \"B\" << mynum << \" dtor\\n\"; }\n  virtual void Use() { *history << \"B\" << mynum << \" use\\n\"; }\n};\n\nclass LinkedPtrTest : public testing::Test {\n public:\n  LinkedPtrTest() {\n    num = 0;\n    history = new Message;\n  }\n\n  virtual ~LinkedPtrTest() {\n    delete history;\n    history = NULL;\n  }\n};\n\nTEST_F(LinkedPtrTest, GeneralTest) {\n  {\n    linked_ptr<A> a0, a1, a2;\n    // Use explicit function call notation here to suppress self-assign warning.\n    a0.operator=(a0);\n    a1 = a2;\n    ASSERT_EQ(a0.get(), static_cast<A*>(NULL));\n    ASSERT_EQ(a1.get(), static_cast<A*>(NULL));\n    ASSERT_EQ(a2.get(), static_cast<A*>(NULL));\n    ASSERT_TRUE(a0 == NULL);\n    ASSERT_TRUE(a1 == NULL);\n    ASSERT_TRUE(a2 == NULL);\n\n    {\n      linked_ptr<A> a3(new A);\n      a0 = a3;\n      ASSERT_TRUE(a0 == a3);\n      ASSERT_TRUE(a0 != NULL);\n      ASSERT_TRUE(a0.get() == a3);\n      ASSERT_TRUE(a0 == a3.get());\n      linked_ptr<A> a4(a0);\n      a1 = a4;\n      linked_ptr<A> a5(new A);\n      ASSERT_TRUE(a5.get() != a3);\n      ASSERT_TRUE(a5 != a3.get());\n      a2 = a5;\n      linked_ptr<B> b0(new B);\n      linked_ptr<A> a6(b0);\n      ASSERT_TRUE(b0 == a6);\n      ASSERT_TRUE(a6 == b0);\n      ASSERT_TRUE(b0 != NULL);\n      a5 = b0;\n      a5 = b0;\n      a3->Use();\n      a4->Use();\n      a5->Use();\n      a6->Use();\n      b0->Use();\n      (*b0).Use();\n      b0.get()->Use();\n    }\n\n    a0->Use();\n    a1->Use();\n    a2->Use();\n\n    a1 = a2;\n    a2.reset(new A);\n    a0.reset();\n\n    linked_ptr<A> a7;\n  }\n\n  ASSERT_STREQ(\n    \"A0 ctor\\n\"\n    \"A1 ctor\\n\"\n    \"A2 ctor\\n\"\n    \"B2 ctor\\n\"\n    \"A0 use\\n\"\n    \"A0 use\\n\"\n    \"B2 use\\n\"\n    \"B2 use\\n\"\n    \"B2 use\\n\"\n    \"B2 use\\n\"\n    \"B2 use\\n\"\n    \"B2 dtor\\n\"\n    \"A2 dtor\\n\"\n    \"A0 use\\n\"\n    \"A0 use\\n\"\n    \"A1 use\\n\"\n    \"A3 ctor\\n\"\n    \"A0 dtor\\n\"\n    \"A3 dtor\\n\"\n    \"A1 dtor\\n\",\n    history->GetString().c_str());\n}\n\n}  // Unnamed namespace\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-listener_test.cc",
    "content": "// Copyright 2009 Google Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This file verifies Google Test event listeners receive events at the\n// right times.\n\n#include \"gtest/gtest.h\"\n#include <vector>\n\nusing ::testing::AddGlobalTestEnvironment;\nusing ::testing::Environment;\nusing ::testing::InitGoogleTest;\nusing ::testing::Test;\nusing ::testing::TestCase;\nusing ::testing::TestEventListener;\nusing ::testing::TestInfo;\nusing ::testing::TestPartResult;\nusing ::testing::UnitTest;\n\n// Used by tests to register their events.\nstd::vector<std::string>* g_events = NULL;\n\nnamespace testing {\nnamespace internal {\n\nclass EventRecordingListener : public TestEventListener {\n public:\n  explicit EventRecordingListener(const char* name) : name_(name) {}\n\n protected:\n  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestProgramStart\"));\n  }\n\n  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,\n                                    int iteration) {\n    Message message;\n    message << GetFullMethodName(\"OnTestIterationStart\")\n            << \"(\" << iteration << \")\";\n    g_events->push_back(message.GetString());\n  }\n\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnEnvironmentsSetUpStart\"));\n  }\n\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnEnvironmentsSetUpEnd\"));\n  }\n\n  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestCaseStart\"));\n  }\n\n  virtual void OnTestStart(const TestInfo& /*test_info*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestStart\"));\n  }\n\n  virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestPartResult\"));\n  }\n\n  virtual void OnTestEnd(const TestInfo& /*test_info*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestEnd\"));\n  }\n\n  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestCaseEnd\"));\n  }\n\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnEnvironmentsTearDownStart\"));\n  }\n\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnEnvironmentsTearDownEnd\"));\n  }\n\n  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,\n                                  int iteration) {\n    Message message;\n    message << GetFullMethodName(\"OnTestIterationEnd\")\n            << \"(\"  << iteration << \")\";\n    g_events->push_back(message.GetString());\n  }\n\n  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {\n    g_events->push_back(GetFullMethodName(\"OnTestProgramEnd\"));\n  }\n\n private:\n  std::string GetFullMethodName(const char* name) {\n    return name_ + \".\" + name;\n  }\n\n  std::string name_;\n};\n\nclass EnvironmentInvocationCatcher : public Environment {\n protected:\n  virtual void SetUp() {\n    g_events->push_back(\"Environment::SetUp\");\n  }\n\n  virtual void TearDown() {\n    g_events->push_back(\"Environment::TearDown\");\n  }\n};\n\nclass ListenerTest : public Test {\n protected:\n  static void SetUpTestCase() {\n    g_events->push_back(\"ListenerTest::SetUpTestCase\");\n  }\n\n  static void TearDownTestCase() {\n    g_events->push_back(\"ListenerTest::TearDownTestCase\");\n  }\n\n  virtual void SetUp() {\n    g_events->push_back(\"ListenerTest::SetUp\");\n  }\n\n  virtual void TearDown() {\n    g_events->push_back(\"ListenerTest::TearDown\");\n  }\n};\n\nTEST_F(ListenerTest, DoesFoo) {\n  // Test execution order within a test case is not guaranteed so we are not\n  // recording the test name.\n  g_events->push_back(\"ListenerTest::* Test Body\");\n  SUCCEED();  // Triggers OnTestPartResult.\n}\n\nTEST_F(ListenerTest, DoesBar) {\n  g_events->push_back(\"ListenerTest::* Test Body\");\n  SUCCEED();  // Triggers OnTestPartResult.\n}\n\n}  // namespace internal\n\n}  // namespace testing\n\nusing ::testing::internal::EnvironmentInvocationCatcher;\nusing ::testing::internal::EventRecordingListener;\n\nvoid VerifyResults(const std::vector<std::string>& data,\n                   const char* const* expected_data,\n                   int expected_data_size) {\n  const int actual_size = data.size();\n  // If the following assertion fails, a new entry will be appended to\n  // data.  Hence we save data.size() first.\n  EXPECT_EQ(expected_data_size, actual_size);\n\n  // Compares the common prefix.\n  const int shorter_size = expected_data_size <= actual_size ?\n      expected_data_size : actual_size;\n  int i = 0;\n  for (; i < shorter_size; ++i) {\n    ASSERT_STREQ(expected_data[i], data[i].c_str())\n        << \"at position \" << i;\n  }\n\n  // Prints extra elements in the actual data.\n  for (; i < actual_size; ++i) {\n    printf(\"  Actual event #%d: %s\\n\", i, data[i].c_str());\n  }\n}\n\nint main(int argc, char **argv) {\n  std::vector<std::string> events;\n  g_events = &events;\n  InitGoogleTest(&argc, argv);\n\n  UnitTest::GetInstance()->listeners().Append(\n      new EventRecordingListener(\"1st\"));\n  UnitTest::GetInstance()->listeners().Append(\n      new EventRecordingListener(\"2nd\"));\n\n  AddGlobalTestEnvironment(new EnvironmentInvocationCatcher);\n\n  GTEST_CHECK_(events.size() == 0)\n      << \"AddGlobalTestEnvironment should not generate any events itself.\";\n\n  ::testing::GTEST_FLAG(repeat) = 2;\n  int ret_val = RUN_ALL_TESTS();\n\n  const char* const expected_events[] = {\n    \"1st.OnTestProgramStart\",\n    \"2nd.OnTestProgramStart\",\n    \"1st.OnTestIterationStart(0)\",\n    \"2nd.OnTestIterationStart(0)\",\n    \"1st.OnEnvironmentsSetUpStart\",\n    \"2nd.OnEnvironmentsSetUpStart\",\n    \"Environment::SetUp\",\n    \"2nd.OnEnvironmentsSetUpEnd\",\n    \"1st.OnEnvironmentsSetUpEnd\",\n    \"1st.OnTestCaseStart\",\n    \"2nd.OnTestCaseStart\",\n    \"ListenerTest::SetUpTestCase\",\n    \"1st.OnTestStart\",\n    \"2nd.OnTestStart\",\n    \"ListenerTest::SetUp\",\n    \"ListenerTest::* Test Body\",\n    \"1st.OnTestPartResult\",\n    \"2nd.OnTestPartResult\",\n    \"ListenerTest::TearDown\",\n    \"2nd.OnTestEnd\",\n    \"1st.OnTestEnd\",\n    \"1st.OnTestStart\",\n    \"2nd.OnTestStart\",\n    \"ListenerTest::SetUp\",\n    \"ListenerTest::* Test Body\",\n    \"1st.OnTestPartResult\",\n    \"2nd.OnTestPartResult\",\n    \"ListenerTest::TearDown\",\n    \"2nd.OnTestEnd\",\n    \"1st.OnTestEnd\",\n    \"ListenerTest::TearDownTestCase\",\n    \"2nd.OnTestCaseEnd\",\n    \"1st.OnTestCaseEnd\",\n    \"1st.OnEnvironmentsTearDownStart\",\n    \"2nd.OnEnvironmentsTearDownStart\",\n    \"Environment::TearDown\",\n    \"2nd.OnEnvironmentsTearDownEnd\",\n    \"1st.OnEnvironmentsTearDownEnd\",\n    \"2nd.OnTestIterationEnd(0)\",\n    \"1st.OnTestIterationEnd(0)\",\n    \"1st.OnTestIterationStart(1)\",\n    \"2nd.OnTestIterationStart(1)\",\n    \"1st.OnEnvironmentsSetUpStart\",\n    \"2nd.OnEnvironmentsSetUpStart\",\n    \"Environment::SetUp\",\n    \"2nd.OnEnvironmentsSetUpEnd\",\n    \"1st.OnEnvironmentsSetUpEnd\",\n    \"1st.OnTestCaseStart\",\n    \"2nd.OnTestCaseStart\",\n    \"ListenerTest::SetUpTestCase\",\n    \"1st.OnTestStart\",\n    \"2nd.OnTestStart\",\n    \"ListenerTest::SetUp\",\n    \"ListenerTest::* Test Body\",\n    \"1st.OnTestPartResult\",\n    \"2nd.OnTestPartResult\",\n    \"ListenerTest::TearDown\",\n    \"2nd.OnTestEnd\",\n    \"1st.OnTestEnd\",\n    \"1st.OnTestStart\",\n    \"2nd.OnTestStart\",\n    \"ListenerTest::SetUp\",\n    \"ListenerTest::* Test Body\",\n    \"1st.OnTestPartResult\",\n    \"2nd.OnTestPartResult\",\n    \"ListenerTest::TearDown\",\n    \"2nd.OnTestEnd\",\n    \"1st.OnTestEnd\",\n    \"ListenerTest::TearDownTestCase\",\n    \"2nd.OnTestCaseEnd\",\n    \"1st.OnTestCaseEnd\",\n    \"1st.OnEnvironmentsTearDownStart\",\n    \"2nd.OnEnvironmentsTearDownStart\",\n    \"Environment::TearDown\",\n    \"2nd.OnEnvironmentsTearDownEnd\",\n    \"1st.OnEnvironmentsTearDownEnd\",\n    \"2nd.OnTestIterationEnd(1)\",\n    \"1st.OnTestIterationEnd(1)\",\n    \"2nd.OnTestProgramEnd\",\n    \"1st.OnTestProgramEnd\"\n  };\n  VerifyResults(events,\n                expected_events,\n                sizeof(expected_events)/sizeof(expected_events[0]));\n\n  // We need to check manually for ad hoc test failures that happen after\n  // RUN_ALL_TESTS finishes.\n  if (UnitTest::GetInstance()->Failed())\n    ret_val = 1;\n\n  return ret_val;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-message_test.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Tests for the Message class.\n\n#include \"gtest/gtest-message.h\"\n\n#include \"gtest/gtest.h\"\n\nnamespace {\n\nusing ::testing::Message;\n\n// Tests the testing::Message class\n\n// Tests the default constructor.\nTEST(MessageTest, DefaultConstructor) {\n  const Message msg;\n  EXPECT_EQ(\"\", msg.GetString());\n}\n\n// Tests the copy constructor.\nTEST(MessageTest, CopyConstructor) {\n  const Message msg1(\"Hello\");\n  const Message msg2(msg1);\n  EXPECT_EQ(\"Hello\", msg2.GetString());\n}\n\n// Tests constructing a Message from a C-string.\nTEST(MessageTest, ConstructsFromCString) {\n  Message msg(\"Hello\");\n  EXPECT_EQ(\"Hello\", msg.GetString());\n}\n\n// Tests streaming a float.\nTEST(MessageTest, StreamsFloat) {\n  const std::string s = (Message() << 1.23456F << \" \" << 2.34567F).GetString();\n  // Both numbers should be printed with enough precision.\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"1.234560\", s.c_str());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \" 2.345669\", s.c_str());\n}\n\n// Tests streaming a double.\nTEST(MessageTest, StreamsDouble) {\n  const std::string s = (Message() << 1260570880.4555497 << \" \"\n                                  << 1260572265.1954534).GetString();\n  // Both numbers should be printed with enough precision.\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"1260570880.45\", s.c_str());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \" 1260572265.19\", s.c_str());\n}\n\n// Tests streaming a non-char pointer.\nTEST(MessageTest, StreamsPointer) {\n  int n = 0;\n  int* p = &n;\n  EXPECT_NE(\"(null)\", (Message() << p).GetString());\n}\n\n// Tests streaming a NULL non-char pointer.\nTEST(MessageTest, StreamsNullPointer) {\n  int* p = NULL;\n  EXPECT_EQ(\"(null)\", (Message() << p).GetString());\n}\n\n// Tests streaming a C string.\nTEST(MessageTest, StreamsCString) {\n  EXPECT_EQ(\"Foo\", (Message() << \"Foo\").GetString());\n}\n\n// Tests streaming a NULL C string.\nTEST(MessageTest, StreamsNullCString) {\n  char* p = NULL;\n  EXPECT_EQ(\"(null)\", (Message() << p).GetString());\n}\n\n// Tests streaming std::string.\nTEST(MessageTest, StreamsString) {\n  const ::std::string str(\"Hello\");\n  EXPECT_EQ(\"Hello\", (Message() << str).GetString());\n}\n\n// Tests that we can output strings containing embedded NULs.\nTEST(MessageTest, StreamsStringWithEmbeddedNUL) {\n  const char char_array_with_nul[] =\n      \"Here's a NUL\\0 and some more string\";\n  const ::std::string string_with_nul(char_array_with_nul,\n                                      sizeof(char_array_with_nul) - 1);\n  EXPECT_EQ(\"Here's a NUL\\\\0 and some more string\",\n            (Message() << string_with_nul).GetString());\n}\n\n// Tests streaming a NUL char.\nTEST(MessageTest, StreamsNULChar) {\n  EXPECT_EQ(\"\\\\0\", (Message() << '\\0').GetString());\n}\n\n// Tests streaming int.\nTEST(MessageTest, StreamsInt) {\n  EXPECT_EQ(\"123\", (Message() << 123).GetString());\n}\n\n// Tests that basic IO manipulators (endl, ends, and flush) can be\n// streamed to Message.\nTEST(MessageTest, StreamsBasicIoManip) {\n  EXPECT_EQ(\"Line 1.\\nA NUL char \\\\0 in line 2.\",\n               (Message() << \"Line 1.\" << std::endl\n                         << \"A NUL char \" << std::ends << std::flush\n                         << \" in line 2.\").GetString());\n}\n\n// Tests Message::GetString()\nTEST(MessageTest, GetString) {\n  Message msg;\n  msg << 1 << \" lamb\";\n  EXPECT_EQ(\"1 lamb\", msg.GetString());\n}\n\n// Tests streaming a Message object to an ostream.\nTEST(MessageTest, StreamsToOStream) {\n  Message msg(\"Hello\");\n  ::std::stringstream ss;\n  ss << msg;\n  EXPECT_EQ(\"Hello\", testing::internal::StringStreamToString(&ss));\n}\n\n// Tests that a Message object doesn't take up too much stack space.\nTEST(MessageTest, DoesNotTakeUpMuchStackSpace) {\n  EXPECT_LE(sizeof(Message), 16U);\n}\n\n}  // namespace\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-options_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: keith.ray@gmail.com (Keith Ray)\n//\n// Google Test UnitTestOptions tests\n//\n// This file tests classes and functions used internally by\n// Google Test.  They are subject to change without notice.\n//\n// This file is #included from gtest.cc, to avoid changing build or\n// make-files on Windows and other platforms. Do not #include this file\n// anywhere else!\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_OS_WINDOWS_MOBILE\n# include <windows.h>\n#elif GTEST_OS_WINDOWS\n# include <direct.h>\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\nnamespace internal {\nnamespace {\n\n// Turns the given relative path into an absolute path.\nFilePath GetAbsolutePathOf(const FilePath& relative_path) {\n  return FilePath::ConcatPaths(FilePath::GetCurrentDir(), relative_path);\n}\n\n// Testing UnitTestOptions::GetOutputFormat/GetOutputFile.\n\nTEST(XmlOutputTest, GetOutputFormatDefault) {\n  GTEST_FLAG(output) = \"\";\n  EXPECT_STREQ(\"\", UnitTestOptions::GetOutputFormat().c_str());\n}\n\nTEST(XmlOutputTest, GetOutputFormat) {\n  GTEST_FLAG(output) = \"xml:filename\";\n  EXPECT_STREQ(\"xml\", UnitTestOptions::GetOutputFormat().c_str());\n}\n\nTEST(XmlOutputTest, GetOutputFileDefault) {\n  GTEST_FLAG(output) = \"\";\n  EXPECT_EQ(GetAbsolutePathOf(FilePath(\"test_detail.xml\")).string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n}\n\nTEST(XmlOutputTest, GetOutputFileSingleFile) {\n  GTEST_FLAG(output) = \"xml:filename.abc\";\n  EXPECT_EQ(GetAbsolutePathOf(FilePath(\"filename.abc\")).string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n}\n\nTEST(XmlOutputTest, GetOutputFileFromDirectoryPath) {\n  GTEST_FLAG(output) = \"xml:path\" GTEST_PATH_SEP_;\n  const std::string expected_output_file =\n      GetAbsolutePathOf(\n          FilePath(std::string(\"path\") + GTEST_PATH_SEP_ +\n                   GetCurrentExecutableName().string() + \".xml\")).string();\n  const std::string& output_file =\n      UnitTestOptions::GetAbsolutePathToOutputFile();\n#if GTEST_OS_WINDOWS\n  EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str());\n#else\n  EXPECT_EQ(expected_output_file, output_file.c_str());\n#endif\n}\n\nTEST(OutputFileHelpersTest, GetCurrentExecutableName) {\n  const std::string exe_str = GetCurrentExecutableName().string();\n#if GTEST_OS_WINDOWS\n  const bool success =\n      _strcmpi(\"gtest-options_test\", exe_str.c_str()) == 0 ||\n      _strcmpi(\"gtest-options-ex_test\", exe_str.c_str()) == 0 ||\n      _strcmpi(\"gtest_all_test\", exe_str.c_str()) == 0 ||\n      _strcmpi(\"gtest_dll_test\", exe_str.c_str()) == 0;\n#else\n  // TODO(wan@google.com): remove the hard-coded \"lt-\" prefix when\n  //   Chandler Carruth's libtool replacement is ready.\n  const bool success =\n      exe_str == \"gtest-options_test\" ||\n      exe_str == \"gtest_all_test\" ||\n      exe_str == \"lt-gtest_all_test\" ||\n      exe_str == \"gtest_dll_test\";\n#endif  // GTEST_OS_WINDOWS\n  if (!success)\n    FAIL() << \"GetCurrentExecutableName() returns \" << exe_str;\n}\n\nclass XmlOutputChangeDirTest : public Test {\n protected:\n  virtual void SetUp() {\n    original_working_dir_ = FilePath::GetCurrentDir();\n    posix::ChDir(\"..\");\n    // This will make the test fail if run from the root directory.\n    EXPECT_NE(original_working_dir_.string(),\n              FilePath::GetCurrentDir().string());\n  }\n\n  virtual void TearDown() {\n    posix::ChDir(original_working_dir_.string().c_str());\n  }\n\n  FilePath original_working_dir_;\n};\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefault) {\n  GTEST_FLAG(output) = \"\";\n  EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_,\n                                  FilePath(\"test_detail.xml\")).string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n}\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefaultXML) {\n  GTEST_FLAG(output) = \"xml\";\n  EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_,\n                                  FilePath(\"test_detail.xml\")).string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n}\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativeFile) {\n  GTEST_FLAG(output) = \"xml:filename.abc\";\n  EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_,\n                                  FilePath(\"filename.abc\")).string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n}\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativePath) {\n  GTEST_FLAG(output) = \"xml:path\" GTEST_PATH_SEP_;\n  const std::string expected_output_file =\n      FilePath::ConcatPaths(\n          original_working_dir_,\n          FilePath(std::string(\"path\") + GTEST_PATH_SEP_ +\n                   GetCurrentExecutableName().string() + \".xml\")).string();\n  const std::string& output_file =\n      UnitTestOptions::GetAbsolutePathToOutputFile();\n#if GTEST_OS_WINDOWS\n  EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str());\n#else\n  EXPECT_EQ(expected_output_file, output_file.c_str());\n#endif\n}\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsoluteFile) {\n#if GTEST_OS_WINDOWS\n  GTEST_FLAG(output) = \"xml:c:\\\\tmp\\\\filename.abc\";\n  EXPECT_EQ(FilePath(\"c:\\\\tmp\\\\filename.abc\").string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n#else\n  GTEST_FLAG(output) =\"xml:/tmp/filename.abc\";\n  EXPECT_EQ(FilePath(\"/tmp/filename.abc\").string(),\n            UnitTestOptions::GetAbsolutePathToOutputFile());\n#endif\n}\n\nTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsolutePath) {\n#if GTEST_OS_WINDOWS\n  const std::string path = \"c:\\\\tmp\\\\\";\n#else\n  const std::string path = \"/tmp/\";\n#endif\n\n  GTEST_FLAG(output) = \"xml:\" + path;\n  const std::string expected_output_file =\n      path + GetCurrentExecutableName().string() + \".xml\";\n  const std::string& output_file =\n      UnitTestOptions::GetAbsolutePathToOutputFile();\n\n#if GTEST_OS_WINDOWS\n  EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str());\n#else\n  EXPECT_EQ(expected_output_file, output_file.c_str());\n#endif\n}\n\n}  // namespace\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-param-test2_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// Tests for Google Test itself.  This verifies that the basic constructs of\n// Google Test work.\n\n#include \"gtest/gtest.h\"\n\n#include \"test/gtest-param-test_test.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\nusing ::testing::Values;\nusing ::testing::internal::ParamGenerator;\n\n// Tests that generators defined in a different translation unit\n// are functional. The test using extern_gen is defined\n// in gtest-param-test_test.cc.\nParamGenerator<int> extern_gen = Values(33);\n\n// Tests that a parameterized test case can be defined in one translation unit\n// and instantiated in another. The test is defined in gtest-param-test_test.cc\n// and ExternalInstantiationTest fixture class is defined in\n// gtest-param-test_test.h.\nINSTANTIATE_TEST_CASE_P(MultiplesOf33,\n                        ExternalInstantiationTest,\n                        Values(33, 66));\n\n// Tests that a parameterized test case can be instantiated\n// in multiple translation units. Another instantiation is defined\n// in gtest-param-test_test.cc and InstantiationInMultipleTranslaionUnitsTest\n// fixture is defined in gtest-param-test_test.h\nINSTANTIATE_TEST_CASE_P(Sequence2,\n                        InstantiationInMultipleTranslaionUnitsTest,\n                        Values(42*3, 42*4, 42*5));\n\n#endif  // GTEST_HAS_PARAM_TEST\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-param-test_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// Tests for Google Test itself. This file verifies that the parameter\n// generators objects produce correct parameter sequences and that\n// Google Test runtime instantiates correct tests from those sequences.\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\n# include <algorithm>\n# include <iostream>\n# include <list>\n# include <sstream>\n# include <string>\n# include <vector>\n\n// To include gtest-internal-inl.h.\n# define GTEST_IMPLEMENTATION_ 1\n# include \"src/gtest-internal-inl.h\"  // for UnitTestOptions\n# undef GTEST_IMPLEMENTATION_\n\n# include \"test/gtest-param-test_test.h\"\n\nusing ::std::vector;\nusing ::std::sort;\n\nusing ::testing::AddGlobalTestEnvironment;\nusing ::testing::Bool;\nusing ::testing::Message;\nusing ::testing::Range;\nusing ::testing::TestWithParam;\nusing ::testing::Values;\nusing ::testing::ValuesIn;\n\n# if GTEST_HAS_COMBINE\nusing ::testing::Combine;\nusing ::std::tr1::get;\nusing ::std::tr1::make_tuple;\nusing ::std::tr1::tuple;\n# endif  // GTEST_HAS_COMBINE\n\nusing ::testing::internal::ParamGenerator;\nusing ::testing::internal::UnitTestOptions;\n\n// Prints a value to a string.\n//\n// TODO(wan@google.com): remove PrintValue() when we move matchers and\n// EXPECT_THAT() from Google Mock to Google Test.  At that time, we\n// can write EXPECT_THAT(x, Eq(y)) to compare two tuples x and y, as\n// EXPECT_THAT() and the matchers know how to print tuples.\ntemplate <typename T>\n::std::string PrintValue(const T& value) {\n  ::std::stringstream stream;\n  stream << value;\n  return stream.str();\n}\n\n# if GTEST_HAS_COMBINE\n\n// These overloads allow printing tuples in our tests.  We cannot\n// define an operator<< for tuples, as that definition needs to be in\n// the std namespace in order to be picked up by Google Test via\n// Argument-Dependent Lookup, yet defining anything in the std\n// namespace in non-STL code is undefined behavior.\n\ntemplate <typename T1, typename T2>\n::std::string PrintValue(const tuple<T1, T2>& value) {\n  ::std::stringstream stream;\n  stream << \"(\" << get<0>(value) << \", \" << get<1>(value) << \")\";\n  return stream.str();\n}\n\ntemplate <typename T1, typename T2, typename T3>\n::std::string PrintValue(const tuple<T1, T2, T3>& value) {\n  ::std::stringstream stream;\n  stream << \"(\" << get<0>(value) << \", \" << get<1>(value)\n         << \", \"<< get<2>(value) << \")\";\n  return stream.str();\n}\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n          typename T6, typename T7, typename T8, typename T9, typename T10>\n::std::string PrintValue(\n    const tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& value) {\n  ::std::stringstream stream;\n  stream << \"(\" << get<0>(value) << \", \" << get<1>(value)\n         << \", \"<< get<2>(value) << \", \" << get<3>(value)\n         << \", \"<< get<4>(value) << \", \" << get<5>(value)\n         << \", \"<< get<6>(value) << \", \" << get<7>(value)\n         << \", \"<< get<8>(value) << \", \" << get<9>(value) << \")\";\n  return stream.str();\n}\n\n# endif  // GTEST_HAS_COMBINE\n\n// Verifies that a sequence generated by the generator and accessed\n// via the iterator object matches the expected one using Google Test\n// assertions.\ntemplate <typename T, size_t N>\nvoid VerifyGenerator(const ParamGenerator<T>& generator,\n                     const T (&expected_values)[N]) {\n  typename ParamGenerator<T>::iterator it = generator.begin();\n  for (size_t i = 0; i < N; ++i) {\n    ASSERT_FALSE(it == generator.end())\n        << \"At element \" << i << \" when accessing via an iterator \"\n        << \"created with the copy constructor.\\n\";\n    // We cannot use EXPECT_EQ() here as the values may be tuples,\n    // which don't support <<.\n    EXPECT_TRUE(expected_values[i] == *it)\n        << \"where i is \" << i\n        << \", expected_values[i] is \" << PrintValue(expected_values[i])\n        << \", *it is \" << PrintValue(*it)\n        << \", and 'it' is an iterator created with the copy constructor.\\n\";\n    it++;\n  }\n  EXPECT_TRUE(it == generator.end())\n        << \"At the presumed end of sequence when accessing via an iterator \"\n        << \"created with the copy constructor.\\n\";\n\n  // Test the iterator assignment. The following lines verify that\n  // the sequence accessed via an iterator initialized via the\n  // assignment operator (as opposed to a copy constructor) matches\n  // just the same.\n  it = generator.begin();\n  for (size_t i = 0; i < N; ++i) {\n    ASSERT_FALSE(it == generator.end())\n        << \"At element \" << i << \" when accessing via an iterator \"\n        << \"created with the assignment operator.\\n\";\n    EXPECT_TRUE(expected_values[i] == *it)\n        << \"where i is \" << i\n        << \", expected_values[i] is \" << PrintValue(expected_values[i])\n        << \", *it is \" << PrintValue(*it)\n        << \", and 'it' is an iterator created with the copy constructor.\\n\";\n    it++;\n  }\n  EXPECT_TRUE(it == generator.end())\n        << \"At the presumed end of sequence when accessing via an iterator \"\n        << \"created with the assignment operator.\\n\";\n}\n\ntemplate <typename T>\nvoid VerifyGeneratorIsEmpty(const ParamGenerator<T>& generator) {\n  typename ParamGenerator<T>::iterator it = generator.begin();\n  EXPECT_TRUE(it == generator.end());\n\n  it = generator.begin();\n  EXPECT_TRUE(it == generator.end());\n}\n\n// Generator tests. They test that each of the provided generator functions\n// generates an expected sequence of values. The general test pattern\n// instantiates a generator using one of the generator functions,\n// checks the sequence produced by the generator using its iterator API,\n// and then resets the iterator back to the beginning of the sequence\n// and checks the sequence again.\n\n// Tests that iterators produced by generator functions conform to the\n// ForwardIterator concept.\nTEST(IteratorTest, ParamIteratorConformsToForwardIteratorConcept) {\n  const ParamGenerator<int> gen = Range(0, 10);\n  ParamGenerator<int>::iterator it = gen.begin();\n\n  // Verifies that iterator initialization works as expected.\n  ParamGenerator<int>::iterator it2 = it;\n  EXPECT_TRUE(*it == *it2) << \"Initialized iterators must point to the \"\n                           << \"element same as its source points to\";\n\n  // Verifies that iterator assignment works as expected.\n  it++;\n  EXPECT_FALSE(*it == *it2);\n  it2 = it;\n  EXPECT_TRUE(*it == *it2) << \"Assigned iterators must point to the \"\n                           << \"element same as its source points to\";\n\n  // Verifies that prefix operator++() returns *this.\n  EXPECT_EQ(&it, &(++it)) << \"Result of the prefix operator++ must be \"\n                          << \"refer to the original object\";\n\n  // Verifies that the result of the postfix operator++ points to the value\n  // pointed to by the original iterator.\n  int original_value = *it;  // Have to compute it outside of macro call to be\n                             // unaffected by the parameter evaluation order.\n  EXPECT_EQ(original_value, *(it++));\n\n  // Verifies that prefix and postfix operator++() advance an iterator\n  // all the same.\n  it2 = it;\n  it++;\n  ++it2;\n  EXPECT_TRUE(*it == *it2);\n}\n\n// Tests that Range() generates the expected sequence.\nTEST(RangeTest, IntRangeWithDefaultStep) {\n  const ParamGenerator<int> gen = Range(0, 3);\n  const int expected_values[] = {0, 1, 2};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Edge case. Tests that Range() generates the single element sequence\n// as expected when provided with range limits that are equal.\nTEST(RangeTest, IntRangeSingleValue) {\n  const ParamGenerator<int> gen = Range(0, 1);\n  const int expected_values[] = {0};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Edge case. Tests that Range() with generates empty sequence when\n// supplied with an empty range.\nTEST(RangeTest, IntRangeEmpty) {\n  const ParamGenerator<int> gen = Range(0, 0);\n  VerifyGeneratorIsEmpty(gen);\n}\n\n// Tests that Range() with custom step (greater then one) generates\n// the expected sequence.\nTEST(RangeTest, IntRangeWithCustomStep) {\n  const ParamGenerator<int> gen = Range(0, 9, 3);\n  const int expected_values[] = {0, 3, 6};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that Range() with custom step (greater then one) generates\n// the expected sequence when the last element does not fall on the\n// upper range limit. Sequences generated by Range() must not have\n// elements beyond the range limits.\nTEST(RangeTest, IntRangeWithCustomStepOverUpperBound) {\n  const ParamGenerator<int> gen = Range(0, 4, 3);\n  const int expected_values[] = {0, 3};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Verifies that Range works with user-defined types that define\n// copy constructor, operator=(), operator+(), and operator<().\nclass DogAdder {\n public:\n  explicit DogAdder(const char* a_value) : value_(a_value) {}\n  DogAdder(const DogAdder& other) : value_(other.value_.c_str()) {}\n\n  DogAdder operator=(const DogAdder& other) {\n    if (this != &other)\n      value_ = other.value_;\n    return *this;\n  }\n  DogAdder operator+(const DogAdder& other) const {\n    Message msg;\n    msg << value_.c_str() << other.value_.c_str();\n    return DogAdder(msg.GetString().c_str());\n  }\n  bool operator<(const DogAdder& other) const {\n    return value_ < other.value_;\n  }\n  const std::string& value() const { return value_; }\n\n private:\n  std::string value_;\n};\n\nTEST(RangeTest, WorksWithACustomType) {\n  const ParamGenerator<DogAdder> gen =\n      Range(DogAdder(\"cat\"), DogAdder(\"catdogdog\"), DogAdder(\"dog\"));\n  ParamGenerator<DogAdder>::iterator it = gen.begin();\n\n  ASSERT_FALSE(it == gen.end());\n  EXPECT_STREQ(\"cat\", it->value().c_str());\n\n  ASSERT_FALSE(++it == gen.end());\n  EXPECT_STREQ(\"catdog\", it->value().c_str());\n\n  EXPECT_TRUE(++it == gen.end());\n}\n\nclass IntWrapper {\n public:\n  explicit IntWrapper(int a_value) : value_(a_value) {}\n  IntWrapper(const IntWrapper& other) : value_(other.value_) {}\n\n  IntWrapper operator=(const IntWrapper& other) {\n    value_ = other.value_;\n    return *this;\n  }\n  // operator+() adds a different type.\n  IntWrapper operator+(int other) const { return IntWrapper(value_ + other); }\n  bool operator<(const IntWrapper& other) const {\n    return value_ < other.value_;\n  }\n  int value() const { return value_; }\n\n private:\n  int value_;\n};\n\nTEST(RangeTest, WorksWithACustomTypeWithDifferentIncrementType) {\n  const ParamGenerator<IntWrapper> gen = Range(IntWrapper(0), IntWrapper(2));\n  ParamGenerator<IntWrapper>::iterator it = gen.begin();\n\n  ASSERT_FALSE(it == gen.end());\n  EXPECT_EQ(0, it->value());\n\n  ASSERT_FALSE(++it == gen.end());\n  EXPECT_EQ(1, it->value());\n\n  EXPECT_TRUE(++it == gen.end());\n}\n\n// Tests that ValuesIn() with an array parameter generates\n// the expected sequence.\nTEST(ValuesInTest, ValuesInArray) {\n  int array[] = {3, 5, 8};\n  const ParamGenerator<int> gen = ValuesIn(array);\n  VerifyGenerator(gen, array);\n}\n\n// Tests that ValuesIn() with a const array parameter generates\n// the expected sequence.\nTEST(ValuesInTest, ValuesInConstArray) {\n  const int array[] = {3, 5, 8};\n  const ParamGenerator<int> gen = ValuesIn(array);\n  VerifyGenerator(gen, array);\n}\n\n// Edge case. Tests that ValuesIn() with an array parameter containing a\n// single element generates the single element sequence.\nTEST(ValuesInTest, ValuesInSingleElementArray) {\n  int array[] = {42};\n  const ParamGenerator<int> gen = ValuesIn(array);\n  VerifyGenerator(gen, array);\n}\n\n// Tests that ValuesIn() generates the expected sequence for an STL\n// container (vector).\nTEST(ValuesInTest, ValuesInVector) {\n  typedef ::std::vector<int> ContainerType;\n  ContainerType values;\n  values.push_back(3);\n  values.push_back(5);\n  values.push_back(8);\n  const ParamGenerator<int> gen = ValuesIn(values);\n\n  const int expected_values[] = {3, 5, 8};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that ValuesIn() generates the expected sequence.\nTEST(ValuesInTest, ValuesInIteratorRange) {\n  typedef ::std::vector<int> ContainerType;\n  ContainerType values;\n  values.push_back(3);\n  values.push_back(5);\n  values.push_back(8);\n  const ParamGenerator<int> gen = ValuesIn(values.begin(), values.end());\n\n  const int expected_values[] = {3, 5, 8};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Edge case. Tests that ValuesIn() provided with an iterator range specifying a\n// single value generates a single-element sequence.\nTEST(ValuesInTest, ValuesInSingleElementIteratorRange) {\n  typedef ::std::vector<int> ContainerType;\n  ContainerType values;\n  values.push_back(42);\n  const ParamGenerator<int> gen = ValuesIn(values.begin(), values.end());\n\n  const int expected_values[] = {42};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Edge case. Tests that ValuesIn() provided with an empty iterator range\n// generates an empty sequence.\nTEST(ValuesInTest, ValuesInEmptyIteratorRange) {\n  typedef ::std::vector<int> ContainerType;\n  ContainerType values;\n  const ParamGenerator<int> gen = ValuesIn(values.begin(), values.end());\n\n  VerifyGeneratorIsEmpty(gen);\n}\n\n// Tests that the Values() generates the expected sequence.\nTEST(ValuesTest, ValuesWorks) {\n  const ParamGenerator<int> gen = Values(3, 5, 8);\n\n  const int expected_values[] = {3, 5, 8};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that Values() generates the expected sequences from elements of\n// different types convertible to ParamGenerator's parameter type.\nTEST(ValuesTest, ValuesWorksForValuesOfCompatibleTypes) {\n  const ParamGenerator<double> gen = Values(3, 5.0f, 8.0);\n\n  const double expected_values[] = {3.0, 5.0, 8.0};\n  VerifyGenerator(gen, expected_values);\n}\n\nTEST(ValuesTest, ValuesWorksForMaxLengthList) {\n  const ParamGenerator<int> gen = Values(\n      10, 20, 30, 40, 50, 60, 70, 80, 90, 100,\n      110, 120, 130, 140, 150, 160, 170, 180, 190, 200,\n      210, 220, 230, 240, 250, 260, 270, 280, 290, 300,\n      310, 320, 330, 340, 350, 360, 370, 380, 390, 400,\n      410, 420, 430, 440, 450, 460, 470, 480, 490, 500);\n\n  const int expected_values[] = {\n      10, 20, 30, 40, 50, 60, 70, 80, 90, 100,\n      110, 120, 130, 140, 150, 160, 170, 180, 190, 200,\n      210, 220, 230, 240, 250, 260, 270, 280, 290, 300,\n      310, 320, 330, 340, 350, 360, 370, 380, 390, 400,\n      410, 420, 430, 440, 450, 460, 470, 480, 490, 500};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Edge case test. Tests that single-parameter Values() generates the sequence\n// with the single value.\nTEST(ValuesTest, ValuesWithSingleParameter) {\n  const ParamGenerator<int> gen = Values(42);\n\n  const int expected_values[] = {42};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that Bool() generates sequence (false, true).\nTEST(BoolTest, BoolWorks) {\n  const ParamGenerator<bool> gen = Bool();\n\n  const bool expected_values[] = {false, true};\n  VerifyGenerator(gen, expected_values);\n}\n\n# if GTEST_HAS_COMBINE\n\n// Tests that Combine() with two parameters generates the expected sequence.\nTEST(CombineTest, CombineWithTwoParameters) {\n  const char* foo = \"foo\";\n  const char* bar = \"bar\";\n  const ParamGenerator<tuple<const char*, int> > gen =\n      Combine(Values(foo, bar), Values(3, 4));\n\n  tuple<const char*, int> expected_values[] = {\n    make_tuple(foo, 3), make_tuple(foo, 4),\n    make_tuple(bar, 3), make_tuple(bar, 4)};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that Combine() with three parameters generates the expected sequence.\nTEST(CombineTest, CombineWithThreeParameters) {\n  const ParamGenerator<tuple<int, int, int> > gen = Combine(Values(0, 1),\n                                                            Values(3, 4),\n                                                            Values(5, 6));\n  tuple<int, int, int> expected_values[] = {\n    make_tuple(0, 3, 5), make_tuple(0, 3, 6),\n    make_tuple(0, 4, 5), make_tuple(0, 4, 6),\n    make_tuple(1, 3, 5), make_tuple(1, 3, 6),\n    make_tuple(1, 4, 5), make_tuple(1, 4, 6)};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that the Combine() with the first parameter generating a single value\n// sequence generates a sequence with the number of elements equal to the\n// number of elements in the sequence generated by the second parameter.\nTEST(CombineTest, CombineWithFirstParameterSingleValue) {\n  const ParamGenerator<tuple<int, int> > gen = Combine(Values(42),\n                                                       Values(0, 1));\n\n  tuple<int, int> expected_values[] = {make_tuple(42, 0), make_tuple(42, 1)};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that the Combine() with the second parameter generating a single value\n// sequence generates a sequence with the number of elements equal to the\n// number of elements in the sequence generated by the first parameter.\nTEST(CombineTest, CombineWithSecondParameterSingleValue) {\n  const ParamGenerator<tuple<int, int> > gen = Combine(Values(0, 1),\n                                                       Values(42));\n\n  tuple<int, int> expected_values[] = {make_tuple(0, 42), make_tuple(1, 42)};\n  VerifyGenerator(gen, expected_values);\n}\n\n// Tests that when the first parameter produces an empty sequence,\n// Combine() produces an empty sequence, too.\nTEST(CombineTest, CombineWithFirstParameterEmptyRange) {\n  const ParamGenerator<tuple<int, int> > gen = Combine(Range(0, 0),\n                                                       Values(0, 1));\n  VerifyGeneratorIsEmpty(gen);\n}\n\n// Tests that when the second parameter produces an empty sequence,\n// Combine() produces an empty sequence, too.\nTEST(CombineTest, CombineWithSecondParameterEmptyRange) {\n  const ParamGenerator<tuple<int, int> > gen = Combine(Values(0, 1),\n                                                       Range(1, 1));\n  VerifyGeneratorIsEmpty(gen);\n}\n\n// Edge case. Tests that combine works with the maximum number\n// of parameters supported by Google Test (currently 10).\nTEST(CombineTest, CombineWithMaxNumberOfParameters) {\n  const char* foo = \"foo\";\n  const char* bar = \"bar\";\n  const ParamGenerator<tuple<const char*, int, int, int, int, int, int, int,\n                             int, int> > gen = Combine(Values(foo, bar),\n                                                       Values(1), Values(2),\n                                                       Values(3), Values(4),\n                                                       Values(5), Values(6),\n                                                       Values(7), Values(8),\n                                                       Values(9));\n\n  tuple<const char*, int, int, int, int, int, int, int, int, int>\n      expected_values[] = {make_tuple(foo, 1, 2, 3, 4, 5, 6, 7, 8, 9),\n                           make_tuple(bar, 1, 2, 3, 4, 5, 6, 7, 8, 9)};\n  VerifyGenerator(gen, expected_values);\n}\n\n# endif  // GTEST_HAS_COMBINE\n\n// Tests that an generator produces correct sequence after being\n// assigned from another generator.\nTEST(ParamGeneratorTest, AssignmentWorks) {\n  ParamGenerator<int> gen = Values(1, 2);\n  const ParamGenerator<int> gen2 = Values(3, 4);\n  gen = gen2;\n\n  const int expected_values[] = {3, 4};\n  VerifyGenerator(gen, expected_values);\n}\n\n// This test verifies that the tests are expanded and run as specified:\n// one test per element from the sequence produced by the generator\n// specified in INSTANTIATE_TEST_CASE_P. It also verifies that the test's\n// fixture constructor, SetUp(), and TearDown() have run and have been\n// supplied with the correct parameters.\n\n// The use of environment object allows detection of the case where no test\n// case functionality is run at all. In this case TestCaseTearDown will not\n// be able to detect missing tests, naturally.\ntemplate <int kExpectedCalls>\nclass TestGenerationEnvironment : public ::testing::Environment {\n public:\n  static TestGenerationEnvironment* Instance() {\n    static TestGenerationEnvironment* instance = new TestGenerationEnvironment;\n    return instance;\n  }\n\n  void FixtureConstructorExecuted() { fixture_constructor_count_++; }\n  void SetUpExecuted() { set_up_count_++; }\n  void TearDownExecuted() { tear_down_count_++; }\n  void TestBodyExecuted() { test_body_count_++; }\n\n  virtual void TearDown() {\n    // If all MultipleTestGenerationTest tests have been de-selected\n    // by the filter flag, the following checks make no sense.\n    bool perform_check = false;\n\n    for (int i = 0; i < kExpectedCalls; ++i) {\n      Message msg;\n      msg << \"TestsExpandedAndRun/\" << i;\n      if (UnitTestOptions::FilterMatchesTest(\n             \"TestExpansionModule/MultipleTestGenerationTest\",\n              msg.GetString().c_str())) {\n        perform_check = true;\n      }\n    }\n    if (perform_check) {\n      EXPECT_EQ(kExpectedCalls, fixture_constructor_count_)\n          << \"Fixture constructor of ParamTestGenerationTest test case \"\n          << \"has not been run as expected.\";\n      EXPECT_EQ(kExpectedCalls, set_up_count_)\n          << \"Fixture SetUp method of ParamTestGenerationTest test case \"\n          << \"has not been run as expected.\";\n      EXPECT_EQ(kExpectedCalls, tear_down_count_)\n          << \"Fixture TearDown method of ParamTestGenerationTest test case \"\n          << \"has not been run as expected.\";\n      EXPECT_EQ(kExpectedCalls, test_body_count_)\n          << \"Test in ParamTestGenerationTest test case \"\n          << \"has not been run as expected.\";\n    }\n  }\n\n private:\n  TestGenerationEnvironment() : fixture_constructor_count_(0), set_up_count_(0),\n                                tear_down_count_(0), test_body_count_(0) {}\n\n  int fixture_constructor_count_;\n  int set_up_count_;\n  int tear_down_count_;\n  int test_body_count_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationEnvironment);\n};\n\nconst int test_generation_params[] = {36, 42, 72};\n\nclass TestGenerationTest : public TestWithParam<int> {\n public:\n  enum {\n    PARAMETER_COUNT =\n        sizeof(test_generation_params)/sizeof(test_generation_params[0])\n  };\n\n  typedef TestGenerationEnvironment<PARAMETER_COUNT> Environment;\n\n  TestGenerationTest() {\n    Environment::Instance()->FixtureConstructorExecuted();\n    current_parameter_ = GetParam();\n  }\n  virtual void SetUp() {\n    Environment::Instance()->SetUpExecuted();\n    EXPECT_EQ(current_parameter_, GetParam());\n  }\n  virtual void TearDown() {\n    Environment::Instance()->TearDownExecuted();\n    EXPECT_EQ(current_parameter_, GetParam());\n  }\n\n  static void SetUpTestCase() {\n    bool all_tests_in_test_case_selected = true;\n\n    for (int i = 0; i < PARAMETER_COUNT; ++i) {\n      Message test_name;\n      test_name << \"TestsExpandedAndRun/\" << i;\n      if ( !UnitTestOptions::FilterMatchesTest(\n                \"TestExpansionModule/MultipleTestGenerationTest\",\n                test_name.GetString())) {\n        all_tests_in_test_case_selected = false;\n      }\n    }\n    EXPECT_TRUE(all_tests_in_test_case_selected)\n        << \"When running the TestGenerationTest test case all of its tests\\n\"\n        << \"must be selected by the filter flag for the test case to pass.\\n\"\n        << \"If not all of them are enabled, we can't reliably conclude\\n\"\n        << \"that the correct number of tests have been generated.\";\n\n    collected_parameters_.clear();\n  }\n\n  static void TearDownTestCase() {\n    vector<int> expected_values(test_generation_params,\n                                test_generation_params + PARAMETER_COUNT);\n    // Test execution order is not guaranteed by Google Test,\n    // so the order of values in collected_parameters_ can be\n    // different and we have to sort to compare.\n    sort(expected_values.begin(), expected_values.end());\n    sort(collected_parameters_.begin(), collected_parameters_.end());\n\n    EXPECT_TRUE(collected_parameters_ == expected_values);\n  }\n\n protected:\n  int current_parameter_;\n  static vector<int> collected_parameters_;\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestGenerationTest);\n};\nvector<int> TestGenerationTest::collected_parameters_;\n\nTEST_P(TestGenerationTest, TestsExpandedAndRun) {\n  Environment::Instance()->TestBodyExecuted();\n  EXPECT_EQ(current_parameter_, GetParam());\n  collected_parameters_.push_back(GetParam());\n}\nINSTANTIATE_TEST_CASE_P(TestExpansionModule, TestGenerationTest,\n                        ValuesIn(test_generation_params));\n\n// This test verifies that the element sequence (third parameter of\n// INSTANTIATE_TEST_CASE_P) is evaluated in InitGoogleTest() and neither at\n// the call site of INSTANTIATE_TEST_CASE_P nor in RUN_ALL_TESTS().  For\n// that, we declare param_value_ to be a static member of\n// GeneratorEvaluationTest and initialize it to 0.  We set it to 1 in\n// main(), just before invocation of InitGoogleTest().  After calling\n// InitGoogleTest(), we set the value to 2.  If the sequence is evaluated\n// before or after InitGoogleTest, INSTANTIATE_TEST_CASE_P will create a\n// test with parameter other than 1, and the test body will fail the\n// assertion.\nclass GeneratorEvaluationTest : public TestWithParam<int> {\n public:\n  static int param_value() { return param_value_; }\n  static void set_param_value(int param_value) { param_value_ = param_value; }\n\n private:\n  static int param_value_;\n};\nint GeneratorEvaluationTest::param_value_ = 0;\n\nTEST_P(GeneratorEvaluationTest, GeneratorsEvaluatedInMain) {\n  EXPECT_EQ(1, GetParam());\n}\nINSTANTIATE_TEST_CASE_P(GenEvalModule,\n                        GeneratorEvaluationTest,\n                        Values(GeneratorEvaluationTest::param_value()));\n\n// Tests that generators defined in a different translation unit are\n// functional. Generator extern_gen is defined in gtest-param-test_test2.cc.\nextern ParamGenerator<int> extern_gen;\nclass ExternalGeneratorTest : public TestWithParam<int> {};\nTEST_P(ExternalGeneratorTest, ExternalGenerator) {\n  // Sequence produced by extern_gen contains only a single value\n  // which we verify here.\n  EXPECT_EQ(GetParam(), 33);\n}\nINSTANTIATE_TEST_CASE_P(ExternalGeneratorModule,\n                        ExternalGeneratorTest,\n                        extern_gen);\n\n// Tests that a parameterized test case can be defined in one translation\n// unit and instantiated in another. This test will be instantiated in\n// gtest-param-test_test2.cc. ExternalInstantiationTest fixture class is\n// defined in gtest-param-test_test.h.\nTEST_P(ExternalInstantiationTest, IsMultipleOf33) {\n  EXPECT_EQ(0, GetParam() % 33);\n}\n\n// Tests that a parameterized test case can be instantiated with multiple\n// generators.\nclass MultipleInstantiationTest : public TestWithParam<int> {};\nTEST_P(MultipleInstantiationTest, AllowsMultipleInstances) {\n}\nINSTANTIATE_TEST_CASE_P(Sequence1, MultipleInstantiationTest, Values(1, 2));\nINSTANTIATE_TEST_CASE_P(Sequence2, MultipleInstantiationTest, Range(3, 5));\n\n// Tests that a parameterized test case can be instantiated\n// in multiple translation units. This test will be instantiated\n// here and in gtest-param-test_test2.cc.\n// InstantiationInMultipleTranslationUnitsTest fixture class\n// is defined in gtest-param-test_test.h.\nTEST_P(InstantiationInMultipleTranslaionUnitsTest, IsMultipleOf42) {\n  EXPECT_EQ(0, GetParam() % 42);\n}\nINSTANTIATE_TEST_CASE_P(Sequence1,\n                        InstantiationInMultipleTranslaionUnitsTest,\n                        Values(42, 42*2));\n\n// Tests that each iteration of parameterized test runs in a separate test\n// object.\nclass SeparateInstanceTest : public TestWithParam<int> {\n public:\n  SeparateInstanceTest() : count_(0) {}\n\n  static void TearDownTestCase() {\n    EXPECT_GE(global_count_, 2)\n        << \"If some (but not all) SeparateInstanceTest tests have been \"\n        << \"filtered out this test will fail. Make sure that all \"\n        << \"GeneratorEvaluationTest are selected or de-selected together \"\n        << \"by the test filter.\";\n  }\n\n protected:\n  int count_;\n  static int global_count_;\n};\nint SeparateInstanceTest::global_count_ = 0;\n\nTEST_P(SeparateInstanceTest, TestsRunInSeparateInstances) {\n  EXPECT_EQ(0, count_++);\n  global_count_++;\n}\nINSTANTIATE_TEST_CASE_P(FourElemSequence, SeparateInstanceTest, Range(1, 4));\n\n// Tests that all instantiations of a test have named appropriately. Test\n// defined with TEST_P(TestCaseName, TestName) and instantiated with\n// INSTANTIATE_TEST_CASE_P(SequenceName, TestCaseName, generator) must be named\n// SequenceName/TestCaseName.TestName/i, where i is the 0-based index of the\n// sequence element used to instantiate the test.\nclass NamingTest : public TestWithParam<int> {};\n\nTEST_P(NamingTest, TestsReportCorrectNamesAndParameters) {\n  const ::testing::TestInfo* const test_info =\n     ::testing::UnitTest::GetInstance()->current_test_info();\n\n  EXPECT_STREQ(\"ZeroToFiveSequence/NamingTest\", test_info->test_case_name());\n\n  Message index_stream;\n  index_stream << \"TestsReportCorrectNamesAndParameters/\" << GetParam();\n  EXPECT_STREQ(index_stream.GetString().c_str(), test_info->name());\n\n  EXPECT_EQ(::testing::PrintToString(GetParam()), test_info->value_param());\n}\n\nINSTANTIATE_TEST_CASE_P(ZeroToFiveSequence, NamingTest, Range(0, 5));\n\n// Class that cannot be streamed into an ostream.  It needs to be copyable\n// (and, in case of MSVC, also assignable) in order to be a test parameter\n// type.  Its default copy constructor and assignment operator do exactly\n// what we need.\nclass Unstreamable {\n public:\n  explicit Unstreamable(int value) : value_(value) {}\n\n private:\n  int value_;\n};\n\nclass CommentTest : public TestWithParam<Unstreamable> {};\n\nTEST_P(CommentTest, TestsCorrectlyReportUnstreamableParams) {\n  const ::testing::TestInfo* const test_info =\n     ::testing::UnitTest::GetInstance()->current_test_info();\n\n  EXPECT_EQ(::testing::PrintToString(GetParam()), test_info->value_param());\n}\n\nINSTANTIATE_TEST_CASE_P(InstantiationWithComments,\n                        CommentTest,\n                        Values(Unstreamable(1)));\n\n// Verify that we can create a hierarchy of test fixtures, where the base\n// class fixture is not parameterized and the derived class is. In this case\n// ParameterizedDerivedTest inherits from NonParameterizedBaseTest.  We\n// perform simple tests on both.\nclass NonParameterizedBaseTest : public ::testing::Test {\n public:\n  NonParameterizedBaseTest() : n_(17) { }\n protected:\n  int n_;\n};\n\nclass ParameterizedDerivedTest : public NonParameterizedBaseTest,\n                                 public ::testing::WithParamInterface<int> {\n protected:\n  ParameterizedDerivedTest() : count_(0) { }\n  int count_;\n  static int global_count_;\n};\n\nint ParameterizedDerivedTest::global_count_ = 0;\n\nTEST_F(NonParameterizedBaseTest, FixtureIsInitialized) {\n  EXPECT_EQ(17, n_);\n}\n\nTEST_P(ParameterizedDerivedTest, SeesSequence) {\n  EXPECT_EQ(17, n_);\n  EXPECT_EQ(0, count_++);\n  EXPECT_EQ(GetParam(), global_count_++);\n}\n\nclass ParameterizedDeathTest : public ::testing::TestWithParam<int> { };\n\nTEST_F(ParameterizedDeathTest, GetParamDiesFromTestF) {\n  EXPECT_DEATH_IF_SUPPORTED(GetParam(),\n                            \".* value-parameterized test .*\");\n}\n\nINSTANTIATE_TEST_CASE_P(RangeZeroToFive, ParameterizedDerivedTest, Range(0, 5));\n\n#endif  // GTEST_HAS_PARAM_TEST\n\nTEST(CompileTest, CombineIsDefinedOnlyWhenGtestHasParamTestIsDefined) {\n#if GTEST_HAS_COMBINE && !GTEST_HAS_PARAM_TEST\n  FAIL() << \"GTEST_HAS_COMBINE is defined while GTEST_HAS_PARAM_TEST is not\\n\"\n#endif\n}\n\nint main(int argc, char **argv) {\n#if GTEST_HAS_PARAM_TEST\n  // Used in TestGenerationTest test case.\n  AddGlobalTestEnvironment(TestGenerationTest::Environment::Instance());\n  // Used in GeneratorEvaluationTest test case. Tests that the updated value\n  // will be picked up for instantiating tests in GeneratorEvaluationTest.\n  GeneratorEvaluationTest::set_param_value(1);\n#endif  // GTEST_HAS_PARAM_TEST\n\n  ::testing::InitGoogleTest(&argc, argv);\n\n#if GTEST_HAS_PARAM_TEST\n  // Used in GeneratorEvaluationTest test case. Tests that value updated\n  // here will NOT be used for instantiating tests in\n  // GeneratorEvaluationTest.\n  GeneratorEvaluationTest::set_param_value(2);\n#endif  // GTEST_HAS_PARAM_TEST\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-param-test_test.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: vladl@google.com (Vlad Losev)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This header file provides classes and functions used internally\n// for testing Google Test itself.\n\n#ifndef GTEST_TEST_GTEST_PARAM_TEST_TEST_H_\n#define GTEST_TEST_GTEST_PARAM_TEST_TEST_H_\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_PARAM_TEST\n\n// Test fixture for testing definition and instantiation of a test\n// in separate translation units.\nclass ExternalInstantiationTest : public ::testing::TestWithParam<int> {\n};\n\n// Test fixture for testing instantiation of a test in multiple\n// translation units.\nclass InstantiationInMultipleTranslaionUnitsTest\n    : public ::testing::TestWithParam<int> {\n};\n\n#endif  // GTEST_HAS_PARAM_TEST\n\n#endif  // GTEST_TEST_GTEST_PARAM_TEST_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-port_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Authors: vladl@google.com (Vlad Losev), wan@google.com (Zhanyong Wan)\n//\n// This file tests the internal cross-platform support utilities.\n\n#include \"gtest/internal/gtest-port.h\"\n\n#include <stdio.h>\n\n#if GTEST_OS_MAC\n# include <time.h>\n#endif  // GTEST_OS_MAC\n\n#include <list>\n#include <utility>  // For std::pair and std::make_pair.\n#include <vector>\n\n#include \"gtest/gtest.h\"\n#include \"gtest/gtest-spi.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nusing std::make_pair;\nusing std::pair;\n\nnamespace testing {\nnamespace internal {\n\nTEST(IsXDigitTest, WorksForNarrowAscii) {\n  EXPECT_TRUE(IsXDigit('0'));\n  EXPECT_TRUE(IsXDigit('9'));\n  EXPECT_TRUE(IsXDigit('A'));\n  EXPECT_TRUE(IsXDigit('F'));\n  EXPECT_TRUE(IsXDigit('a'));\n  EXPECT_TRUE(IsXDigit('f'));\n\n  EXPECT_FALSE(IsXDigit('-'));\n  EXPECT_FALSE(IsXDigit('g'));\n  EXPECT_FALSE(IsXDigit('G'));\n}\n\nTEST(IsXDigitTest, ReturnsFalseForNarrowNonAscii) {\n  EXPECT_FALSE(IsXDigit(static_cast<char>(0x80)));\n  EXPECT_FALSE(IsXDigit(static_cast<char>('0' | 0x80)));\n}\n\nTEST(IsXDigitTest, WorksForWideAscii) {\n  EXPECT_TRUE(IsXDigit(L'0'));\n  EXPECT_TRUE(IsXDigit(L'9'));\n  EXPECT_TRUE(IsXDigit(L'A'));\n  EXPECT_TRUE(IsXDigit(L'F'));\n  EXPECT_TRUE(IsXDigit(L'a'));\n  EXPECT_TRUE(IsXDigit(L'f'));\n\n  EXPECT_FALSE(IsXDigit(L'-'));\n  EXPECT_FALSE(IsXDigit(L'g'));\n  EXPECT_FALSE(IsXDigit(L'G'));\n}\n\nTEST(IsXDigitTest, ReturnsFalseForWideNonAscii) {\n  EXPECT_FALSE(IsXDigit(static_cast<wchar_t>(0x80)));\n  EXPECT_FALSE(IsXDigit(static_cast<wchar_t>(L'0' | 0x80)));\n  EXPECT_FALSE(IsXDigit(static_cast<wchar_t>(L'0' | 0x100)));\n}\n\nclass Base {\n public:\n  // Copy constructor and assignment operator do exactly what we need, so we\n  // use them.\n  Base() : member_(0) {}\n  explicit Base(int n) : member_(n) {}\n  virtual ~Base() {}\n  int member() { return member_; }\n\n private:\n  int member_;\n};\n\nclass Derived : public Base {\n public:\n  explicit Derived(int n) : Base(n) {}\n};\n\nTEST(ImplicitCastTest, ConvertsPointers) {\n  Derived derived(0);\n  EXPECT_TRUE(&derived == ::testing::internal::ImplicitCast_<Base*>(&derived));\n}\n\nTEST(ImplicitCastTest, CanUseInheritance) {\n  Derived derived(1);\n  Base base = ::testing::internal::ImplicitCast_<Base>(derived);\n  EXPECT_EQ(derived.member(), base.member());\n}\n\nclass Castable {\n public:\n  explicit Castable(bool* converted) : converted_(converted) {}\n  operator Base() {\n    *converted_ = true;\n    return Base();\n  }\n\n private:\n  bool* converted_;\n};\n\nTEST(ImplicitCastTest, CanUseNonConstCastOperator) {\n  bool converted = false;\n  Castable castable(&converted);\n  Base base = ::testing::internal::ImplicitCast_<Base>(castable);\n  EXPECT_TRUE(converted);\n}\n\nclass ConstCastable {\n public:\n  explicit ConstCastable(bool* converted) : converted_(converted) {}\n  operator Base() const {\n    *converted_ = true;\n    return Base();\n  }\n\n private:\n  bool* converted_;\n};\n\nTEST(ImplicitCastTest, CanUseConstCastOperatorOnConstValues) {\n  bool converted = false;\n  const ConstCastable const_castable(&converted);\n  Base base = ::testing::internal::ImplicitCast_<Base>(const_castable);\n  EXPECT_TRUE(converted);\n}\n\nclass ConstAndNonConstCastable {\n public:\n  ConstAndNonConstCastable(bool* converted, bool* const_converted)\n      : converted_(converted), const_converted_(const_converted) {}\n  operator Base() {\n    *converted_ = true;\n    return Base();\n  }\n  operator Base() const {\n    *const_converted_ = true;\n    return Base();\n  }\n\n private:\n  bool* converted_;\n  bool* const_converted_;\n};\n\nTEST(ImplicitCastTest, CanSelectBetweenConstAndNonConstCasrAppropriately) {\n  bool converted = false;\n  bool const_converted = false;\n  ConstAndNonConstCastable castable(&converted, &const_converted);\n  Base base = ::testing::internal::ImplicitCast_<Base>(castable);\n  EXPECT_TRUE(converted);\n  EXPECT_FALSE(const_converted);\n\n  converted = false;\n  const_converted = false;\n  const ConstAndNonConstCastable const_castable(&converted, &const_converted);\n  base = ::testing::internal::ImplicitCast_<Base>(const_castable);\n  EXPECT_FALSE(converted);\n  EXPECT_TRUE(const_converted);\n}\n\nclass To {\n public:\n  To(bool* converted) { *converted = true; }  // NOLINT\n};\n\nTEST(ImplicitCastTest, CanUseImplicitConstructor) {\n  bool converted = false;\n  To to = ::testing::internal::ImplicitCast_<To>(&converted);\n  (void)to;\n  EXPECT_TRUE(converted);\n}\n\nTEST(IteratorTraitsTest, WorksForSTLContainerIterators) {\n  StaticAssertTypeEq<int,\n      IteratorTraits< ::std::vector<int>::const_iterator>::value_type>();\n  StaticAssertTypeEq<bool,\n      IteratorTraits< ::std::list<bool>::iterator>::value_type>();\n}\n\nTEST(IteratorTraitsTest, WorksForPointerToNonConst) {\n  StaticAssertTypeEq<char, IteratorTraits<char*>::value_type>();\n  StaticAssertTypeEq<const void*, IteratorTraits<const void**>::value_type>();\n}\n\nTEST(IteratorTraitsTest, WorksForPointerToConst) {\n  StaticAssertTypeEq<char, IteratorTraits<const char*>::value_type>();\n  StaticAssertTypeEq<const void*,\n      IteratorTraits<const void* const*>::value_type>();\n}\n\n// Tests that the element_type typedef is available in scoped_ptr and refers\n// to the parameter type.\nTEST(ScopedPtrTest, DefinesElementType) {\n  StaticAssertTypeEq<int, ::testing::internal::scoped_ptr<int>::element_type>();\n}\n\n// TODO(vladl@google.com): Implement THE REST of scoped_ptr tests.\n\nTEST(GtestCheckSyntaxTest, BehavesLikeASingleStatement) {\n  if (AlwaysFalse())\n    GTEST_CHECK_(false) << \"This should never be executed; \"\n                           \"It's a compilation test only.\";\n\n  if (AlwaysTrue())\n    GTEST_CHECK_(true);\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    ;  // NOLINT\n  else\n    GTEST_CHECK_(true) << \"\";\n}\n\nTEST(GtestCheckSyntaxTest, WorksWithSwitch) {\n  switch (0) {\n    case 1:\n      break;\n    default:\n      GTEST_CHECK_(true);\n  }\n\n  switch (0)\n    case 0:\n      GTEST_CHECK_(true) << \"Check failed in switch case\";\n}\n\n// Verifies behavior of FormatFileLocation.\nTEST(FormatFileLocationTest, FormatsFileLocation) {\n  EXPECT_PRED_FORMAT2(IsSubstring, \"foo.cc\", FormatFileLocation(\"foo.cc\", 42));\n  EXPECT_PRED_FORMAT2(IsSubstring, \"42\", FormatFileLocation(\"foo.cc\", 42));\n}\n\nTEST(FormatFileLocationTest, FormatsUnknownFile) {\n  EXPECT_PRED_FORMAT2(\n      IsSubstring, \"unknown file\", FormatFileLocation(NULL, 42));\n  EXPECT_PRED_FORMAT2(IsSubstring, \"42\", FormatFileLocation(NULL, 42));\n}\n\nTEST(FormatFileLocationTest, FormatsUknownLine) {\n  EXPECT_EQ(\"foo.cc:\", FormatFileLocation(\"foo.cc\", -1));\n}\n\nTEST(FormatFileLocationTest, FormatsUknownFileAndLine) {\n  EXPECT_EQ(\"unknown file:\", FormatFileLocation(NULL, -1));\n}\n\n// Verifies behavior of FormatCompilerIndependentFileLocation.\nTEST(FormatCompilerIndependentFileLocationTest, FormatsFileLocation) {\n  EXPECT_EQ(\"foo.cc:42\", FormatCompilerIndependentFileLocation(\"foo.cc\", 42));\n}\n\nTEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFile) {\n  EXPECT_EQ(\"unknown file:42\",\n            FormatCompilerIndependentFileLocation(NULL, 42));\n}\n\nTEST(FormatCompilerIndependentFileLocationTest, FormatsUknownLine) {\n  EXPECT_EQ(\"foo.cc\", FormatCompilerIndependentFileLocation(\"foo.cc\", -1));\n}\n\nTEST(FormatCompilerIndependentFileLocationTest, FormatsUknownFileAndLine) {\n  EXPECT_EQ(\"unknown file\", FormatCompilerIndependentFileLocation(NULL, -1));\n}\n\n#if GTEST_OS_MAC || GTEST_OS_QNX\nvoid* ThreadFunc(void* data) {\n  pthread_mutex_t* mutex = static_cast<pthread_mutex_t*>(data);\n  pthread_mutex_lock(mutex);\n  pthread_mutex_unlock(mutex);\n  return NULL;\n}\n\nTEST(GetThreadCountTest, ReturnsCorrectValue) {\n  EXPECT_EQ(1U, GetThreadCount());\n  pthread_mutex_t mutex;\n  pthread_attr_t  attr;\n  pthread_t       thread_id;\n\n  // TODO(vladl@google.com): turn mutex into internal::Mutex for automatic\n  // destruction.\n  pthread_mutex_init(&mutex, NULL);\n  pthread_mutex_lock(&mutex);\n  ASSERT_EQ(0, pthread_attr_init(&attr));\n  ASSERT_EQ(0, pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE));\n\n  const int status = pthread_create(&thread_id, &attr, &ThreadFunc, &mutex);\n  ASSERT_EQ(0, pthread_attr_destroy(&attr));\n  ASSERT_EQ(0, status);\n  EXPECT_EQ(2U, GetThreadCount());\n  pthread_mutex_unlock(&mutex);\n\n  void* dummy;\n  ASSERT_EQ(0, pthread_join(thread_id, &dummy));\n\n# if GTEST_OS_MAC\n\n  // MacOS X may not immediately report the updated thread count after\n  // joining a thread, causing flakiness in this test. To counter that, we\n  // wait for up to .5 seconds for the OS to report the correct value.\n  for (int i = 0; i < 5; ++i) {\n    if (GetThreadCount() == 1)\n      break;\n\n    SleepMilliseconds(100);\n  }\n\n# endif  // GTEST_OS_MAC\n\n  EXPECT_EQ(1U, GetThreadCount());\n  pthread_mutex_destroy(&mutex);\n}\n#else\nTEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) {\n  EXPECT_EQ(0U, GetThreadCount());\n}\n#endif  // GTEST_OS_MAC || GTEST_OS_QNX\n\nTEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) {\n  const bool a_false_condition = false;\n  const char regex[] =\n#ifdef _MSC_VER\n     \"gtest-port_test\\\\.cc\\\\(\\\\d+\\\\):\"\n#elif GTEST_USES_POSIX_RE\n     \"gtest-port_test\\\\.cc:[0-9]+\"\n#else\n     \"gtest-port_test\\\\.cc:\\\\d+\"\n#endif  // _MSC_VER\n     \".*a_false_condition.*Extra info.*\";\n\n  EXPECT_DEATH_IF_SUPPORTED(GTEST_CHECK_(a_false_condition) << \"Extra info\",\n                            regex);\n}\n\n#if GTEST_HAS_DEATH_TEST\n\nTEST(GtestCheckDeathTest, LivesSilentlyOnSuccess) {\n  EXPECT_EXIT({\n      GTEST_CHECK_(true) << \"Extra info\";\n      ::std::cerr << \"Success\\n\";\n      exit(0); },\n      ::testing::ExitedWithCode(0), \"Success\");\n}\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Verifies that Google Test choose regular expression engine appropriate to\n// the platform. The test will produce compiler errors in case of failure.\n// For simplicity, we only cover the most important platforms here.\nTEST(RegexEngineSelectionTest, SelectsCorrectRegexEngine) {\n#if GTEST_HAS_POSIX_RE\n\n  EXPECT_TRUE(GTEST_USES_POSIX_RE);\n\n#else\n\n  EXPECT_TRUE(GTEST_USES_SIMPLE_RE);\n\n#endif\n}\n\n#if GTEST_USES_POSIX_RE\n\n# if GTEST_HAS_TYPED_TEST\n\ntemplate <typename Str>\nclass RETest : public ::testing::Test {};\n\n// Defines StringTypes as the list of all string types that class RE\n// supports.\ntypedef testing::Types<\n    ::std::string,\n#  if GTEST_HAS_GLOBAL_STRING\n    ::string,\n#  endif  // GTEST_HAS_GLOBAL_STRING\n    const char*> StringTypes;\n\nTYPED_TEST_CASE(RETest, StringTypes);\n\n// Tests RE's implicit constructors.\nTYPED_TEST(RETest, ImplicitConstructorWorks) {\n  const RE empty(TypeParam(\"\"));\n  EXPECT_STREQ(\"\", empty.pattern());\n\n  const RE simple(TypeParam(\"hello\"));\n  EXPECT_STREQ(\"hello\", simple.pattern());\n\n  const RE normal(TypeParam(\".*(\\\\w+)\"));\n  EXPECT_STREQ(\".*(\\\\w+)\", normal.pattern());\n}\n\n// Tests that RE's constructors reject invalid regular expressions.\nTYPED_TEST(RETest, RejectsInvalidRegex) {\n  EXPECT_NONFATAL_FAILURE({\n    const RE invalid(TypeParam(\"?\"));\n  }, \"\\\"?\\\" is not a valid POSIX Extended regular expression.\");\n}\n\n// Tests RE::FullMatch().\nTYPED_TEST(RETest, FullMatchWorks) {\n  const RE empty(TypeParam(\"\"));\n  EXPECT_TRUE(RE::FullMatch(TypeParam(\"\"), empty));\n  EXPECT_FALSE(RE::FullMatch(TypeParam(\"a\"), empty));\n\n  const RE re(TypeParam(\"a.*z\"));\n  EXPECT_TRUE(RE::FullMatch(TypeParam(\"az\"), re));\n  EXPECT_TRUE(RE::FullMatch(TypeParam(\"axyz\"), re));\n  EXPECT_FALSE(RE::FullMatch(TypeParam(\"baz\"), re));\n  EXPECT_FALSE(RE::FullMatch(TypeParam(\"azy\"), re));\n}\n\n// Tests RE::PartialMatch().\nTYPED_TEST(RETest, PartialMatchWorks) {\n  const RE empty(TypeParam(\"\"));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"\"), empty));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"a\"), empty));\n\n  const RE re(TypeParam(\"a.*z\"));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"az\"), re));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"axyz\"), re));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"baz\"), re));\n  EXPECT_TRUE(RE::PartialMatch(TypeParam(\"azy\"), re));\n  EXPECT_FALSE(RE::PartialMatch(TypeParam(\"zza\"), re));\n}\n\n# endif  // GTEST_HAS_TYPED_TEST\n\n#elif GTEST_USES_SIMPLE_RE\n\nTEST(IsInSetTest, NulCharIsNotInAnySet) {\n  EXPECT_FALSE(IsInSet('\\0', \"\"));\n  EXPECT_FALSE(IsInSet('\\0', \"\\0\"));\n  EXPECT_FALSE(IsInSet('\\0', \"a\"));\n}\n\nTEST(IsInSetTest, WorksForNonNulChars) {\n  EXPECT_FALSE(IsInSet('a', \"Ab\"));\n  EXPECT_FALSE(IsInSet('c', \"\"));\n\n  EXPECT_TRUE(IsInSet('b', \"bcd\"));\n  EXPECT_TRUE(IsInSet('b', \"ab\"));\n}\n\nTEST(IsAsciiDigitTest, IsFalseForNonDigit) {\n  EXPECT_FALSE(IsAsciiDigit('\\0'));\n  EXPECT_FALSE(IsAsciiDigit(' '));\n  EXPECT_FALSE(IsAsciiDigit('+'));\n  EXPECT_FALSE(IsAsciiDigit('-'));\n  EXPECT_FALSE(IsAsciiDigit('.'));\n  EXPECT_FALSE(IsAsciiDigit('a'));\n}\n\nTEST(IsAsciiDigitTest, IsTrueForDigit) {\n  EXPECT_TRUE(IsAsciiDigit('0'));\n  EXPECT_TRUE(IsAsciiDigit('1'));\n  EXPECT_TRUE(IsAsciiDigit('5'));\n  EXPECT_TRUE(IsAsciiDigit('9'));\n}\n\nTEST(IsAsciiPunctTest, IsFalseForNonPunct) {\n  EXPECT_FALSE(IsAsciiPunct('\\0'));\n  EXPECT_FALSE(IsAsciiPunct(' '));\n  EXPECT_FALSE(IsAsciiPunct('\\n'));\n  EXPECT_FALSE(IsAsciiPunct('a'));\n  EXPECT_FALSE(IsAsciiPunct('0'));\n}\n\nTEST(IsAsciiPunctTest, IsTrueForPunct) {\n  for (const char* p = \"^-!\\\"#$%&'()*+,./:;<=>?@[\\\\]_`{|}~\"; *p; p++) {\n    EXPECT_PRED1(IsAsciiPunct, *p);\n  }\n}\n\nTEST(IsRepeatTest, IsFalseForNonRepeatChar) {\n  EXPECT_FALSE(IsRepeat('\\0'));\n  EXPECT_FALSE(IsRepeat(' '));\n  EXPECT_FALSE(IsRepeat('a'));\n  EXPECT_FALSE(IsRepeat('1'));\n  EXPECT_FALSE(IsRepeat('-'));\n}\n\nTEST(IsRepeatTest, IsTrueForRepeatChar) {\n  EXPECT_TRUE(IsRepeat('?'));\n  EXPECT_TRUE(IsRepeat('*'));\n  EXPECT_TRUE(IsRepeat('+'));\n}\n\nTEST(IsAsciiWhiteSpaceTest, IsFalseForNonWhiteSpace) {\n  EXPECT_FALSE(IsAsciiWhiteSpace('\\0'));\n  EXPECT_FALSE(IsAsciiWhiteSpace('a'));\n  EXPECT_FALSE(IsAsciiWhiteSpace('1'));\n  EXPECT_FALSE(IsAsciiWhiteSpace('+'));\n  EXPECT_FALSE(IsAsciiWhiteSpace('_'));\n}\n\nTEST(IsAsciiWhiteSpaceTest, IsTrueForWhiteSpace) {\n  EXPECT_TRUE(IsAsciiWhiteSpace(' '));\n  EXPECT_TRUE(IsAsciiWhiteSpace('\\n'));\n  EXPECT_TRUE(IsAsciiWhiteSpace('\\r'));\n  EXPECT_TRUE(IsAsciiWhiteSpace('\\t'));\n  EXPECT_TRUE(IsAsciiWhiteSpace('\\v'));\n  EXPECT_TRUE(IsAsciiWhiteSpace('\\f'));\n}\n\nTEST(IsAsciiWordCharTest, IsFalseForNonWordChar) {\n  EXPECT_FALSE(IsAsciiWordChar('\\0'));\n  EXPECT_FALSE(IsAsciiWordChar('+'));\n  EXPECT_FALSE(IsAsciiWordChar('.'));\n  EXPECT_FALSE(IsAsciiWordChar(' '));\n  EXPECT_FALSE(IsAsciiWordChar('\\n'));\n}\n\nTEST(IsAsciiWordCharTest, IsTrueForLetter) {\n  EXPECT_TRUE(IsAsciiWordChar('a'));\n  EXPECT_TRUE(IsAsciiWordChar('b'));\n  EXPECT_TRUE(IsAsciiWordChar('A'));\n  EXPECT_TRUE(IsAsciiWordChar('Z'));\n}\n\nTEST(IsAsciiWordCharTest, IsTrueForDigit) {\n  EXPECT_TRUE(IsAsciiWordChar('0'));\n  EXPECT_TRUE(IsAsciiWordChar('1'));\n  EXPECT_TRUE(IsAsciiWordChar('7'));\n  EXPECT_TRUE(IsAsciiWordChar('9'));\n}\n\nTEST(IsAsciiWordCharTest, IsTrueForUnderscore) {\n  EXPECT_TRUE(IsAsciiWordChar('_'));\n}\n\nTEST(IsValidEscapeTest, IsFalseForNonPrintable) {\n  EXPECT_FALSE(IsValidEscape('\\0'));\n  EXPECT_FALSE(IsValidEscape('\\007'));\n}\n\nTEST(IsValidEscapeTest, IsFalseForDigit) {\n  EXPECT_FALSE(IsValidEscape('0'));\n  EXPECT_FALSE(IsValidEscape('9'));\n}\n\nTEST(IsValidEscapeTest, IsFalseForWhiteSpace) {\n  EXPECT_FALSE(IsValidEscape(' '));\n  EXPECT_FALSE(IsValidEscape('\\n'));\n}\n\nTEST(IsValidEscapeTest, IsFalseForSomeLetter) {\n  EXPECT_FALSE(IsValidEscape('a'));\n  EXPECT_FALSE(IsValidEscape('Z'));\n}\n\nTEST(IsValidEscapeTest, IsTrueForPunct) {\n  EXPECT_TRUE(IsValidEscape('.'));\n  EXPECT_TRUE(IsValidEscape('-'));\n  EXPECT_TRUE(IsValidEscape('^'));\n  EXPECT_TRUE(IsValidEscape('$'));\n  EXPECT_TRUE(IsValidEscape('('));\n  EXPECT_TRUE(IsValidEscape(']'));\n  EXPECT_TRUE(IsValidEscape('{'));\n  EXPECT_TRUE(IsValidEscape('|'));\n}\n\nTEST(IsValidEscapeTest, IsTrueForSomeLetter) {\n  EXPECT_TRUE(IsValidEscape('d'));\n  EXPECT_TRUE(IsValidEscape('D'));\n  EXPECT_TRUE(IsValidEscape('s'));\n  EXPECT_TRUE(IsValidEscape('S'));\n  EXPECT_TRUE(IsValidEscape('w'));\n  EXPECT_TRUE(IsValidEscape('W'));\n}\n\nTEST(AtomMatchesCharTest, EscapedPunct) {\n  EXPECT_FALSE(AtomMatchesChar(true, '\\\\', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, '\\\\', ' '));\n  EXPECT_FALSE(AtomMatchesChar(true, '_', '.'));\n  EXPECT_FALSE(AtomMatchesChar(true, '.', 'a'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, '\\\\', '\\\\'));\n  EXPECT_TRUE(AtomMatchesChar(true, '_', '_'));\n  EXPECT_TRUE(AtomMatchesChar(true, '+', '+'));\n  EXPECT_TRUE(AtomMatchesChar(true, '.', '.'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_d) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'd', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'd', 'a'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'd', '.'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'd', '0'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'd', '9'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_D) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'D', '0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'D', '9'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'D', '\\0'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'D', 'a'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'D', '-'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_s) {\n  EXPECT_FALSE(AtomMatchesChar(true, 's', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 's', 'a'));\n  EXPECT_FALSE(AtomMatchesChar(true, 's', '.'));\n  EXPECT_FALSE(AtomMatchesChar(true, 's', '9'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 's', ' '));\n  EXPECT_TRUE(AtomMatchesChar(true, 's', '\\n'));\n  EXPECT_TRUE(AtomMatchesChar(true, 's', '\\t'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_S) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'S', ' '));\n  EXPECT_FALSE(AtomMatchesChar(true, 'S', '\\r'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'S', '\\0'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'S', 'a'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'S', '9'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_w) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'w', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'w', '+'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'w', ' '));\n  EXPECT_FALSE(AtomMatchesChar(true, 'w', '\\n'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'w', '0'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'w', 'b'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'w', 'C'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'w', '_'));\n}\n\nTEST(AtomMatchesCharTest, Escaped_W) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'W', 'A'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'W', 'b'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'W', '9'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'W', '_'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'W', '\\0'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'W', '*'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'W', '\\n'));\n}\n\nTEST(AtomMatchesCharTest, EscapedWhiteSpace) {\n  EXPECT_FALSE(AtomMatchesChar(true, 'f', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'f', '\\n'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'n', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'n', '\\r'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'r', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'r', 'a'));\n  EXPECT_FALSE(AtomMatchesChar(true, 't', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 't', 't'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'v', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(true, 'v', '\\f'));\n\n  EXPECT_TRUE(AtomMatchesChar(true, 'f', '\\f'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'n', '\\n'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'r', '\\r'));\n  EXPECT_TRUE(AtomMatchesChar(true, 't', '\\t'));\n  EXPECT_TRUE(AtomMatchesChar(true, 'v', '\\v'));\n}\n\nTEST(AtomMatchesCharTest, UnescapedDot) {\n  EXPECT_FALSE(AtomMatchesChar(false, '.', '\\n'));\n\n  EXPECT_TRUE(AtomMatchesChar(false, '.', '\\0'));\n  EXPECT_TRUE(AtomMatchesChar(false, '.', '.'));\n  EXPECT_TRUE(AtomMatchesChar(false, '.', 'a'));\n  EXPECT_TRUE(AtomMatchesChar(false, '.', ' '));\n}\n\nTEST(AtomMatchesCharTest, UnescapedChar) {\n  EXPECT_FALSE(AtomMatchesChar(false, 'a', '\\0'));\n  EXPECT_FALSE(AtomMatchesChar(false, 'a', 'b'));\n  EXPECT_FALSE(AtomMatchesChar(false, '$', 'a'));\n\n  EXPECT_TRUE(AtomMatchesChar(false, '$', '$'));\n  EXPECT_TRUE(AtomMatchesChar(false, '5', '5'));\n  EXPECT_TRUE(AtomMatchesChar(false, 'Z', 'Z'));\n}\n\nTEST(ValidateRegexTest, GeneratesFailureAndReturnsFalseForInvalid) {\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(NULL)),\n                          \"NULL is not a valid simple regular expression\");\n  EXPECT_NONFATAL_FAILURE(\n      ASSERT_FALSE(ValidateRegex(\"a\\\\\")),\n      \"Syntax error at index 1 in simple regular expression \\\"a\\\\\\\": \");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"a\\\\\")),\n                          \"'\\\\' cannot appear at the end\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"\\\\n\\\\\")),\n                          \"'\\\\' cannot appear at the end\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"\\\\s\\\\hb\")),\n                          \"invalid escape sequence \\\"\\\\h\\\"\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"^^\")),\n                          \"'^' can only appear at the beginning\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\".*^b\")),\n                          \"'^' can only appear at the beginning\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"$$\")),\n                          \"'$' can only appear at the end\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"^$a\")),\n                          \"'$' can only appear at the end\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"a(b\")),\n                          \"'(' is unsupported\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"ab)\")),\n                          \"')' is unsupported\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"[ab\")),\n                          \"'[' is unsupported\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"a{2\")),\n                          \"'{' is unsupported\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"?\")),\n                          \"'?' can only follow a repeatable token\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"^*\")),\n                          \"'*' can only follow a repeatable token\");\n  EXPECT_NONFATAL_FAILURE(ASSERT_FALSE(ValidateRegex(\"5*+\")),\n                          \"'+' can only follow a repeatable token\");\n}\n\nTEST(ValidateRegexTest, ReturnsTrueForValid) {\n  EXPECT_TRUE(ValidateRegex(\"\"));\n  EXPECT_TRUE(ValidateRegex(\"a\"));\n  EXPECT_TRUE(ValidateRegex(\".*\"));\n  EXPECT_TRUE(ValidateRegex(\"^a_+\"));\n  EXPECT_TRUE(ValidateRegex(\"^a\\\\t\\\\&?\"));\n  EXPECT_TRUE(ValidateRegex(\"09*$\"));\n  EXPECT_TRUE(ValidateRegex(\"^Z$\"));\n  EXPECT_TRUE(ValidateRegex(\"a\\\\^Z\\\\$\\\\(\\\\)\\\\|\\\\[\\\\]\\\\{\\\\}\"));\n}\n\nTEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrOne) {\n  EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', \"a\", \"ba\"));\n  // Repeating more than once.\n  EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, 'a', '?', \"b\", \"aab\"));\n\n  // Repeating zero times.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', \"b\", \"ba\"));\n  // Repeating once.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, 'a', '?', \"b\", \"ab\"));\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '#', '?', \".\", \"##\"));\n}\n\nTEST(MatchRepetitionAndRegexAtHeadTest, WorksForZeroOrMany) {\n  EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '*', \"a$\", \"baab\"));\n\n  // Repeating zero times.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', \"b\", \"bc\"));\n  // Repeating once.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '*', \"b\", \"abc\"));\n  // Repeating more than once.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '*', \"-\", \"ab_1-g\"));\n}\n\nTEST(MatchRepetitionAndRegexAtHeadTest, WorksForOneOrMany) {\n  EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', \"a$\", \"baab\"));\n  // Repeating zero times.\n  EXPECT_FALSE(MatchRepetitionAndRegexAtHead(false, '.', '+', \"b\", \"bc\"));\n\n  // Repeating once.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(false, '.', '+', \"b\", \"abc\"));\n  // Repeating more than once.\n  EXPECT_TRUE(MatchRepetitionAndRegexAtHead(true, 'w', '+', \"-\", \"ab_1-g\"));\n}\n\nTEST(MatchRegexAtHeadTest, ReturnsTrueForEmptyRegex) {\n  EXPECT_TRUE(MatchRegexAtHead(\"\", \"\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"\", \"ab\"));\n}\n\nTEST(MatchRegexAtHeadTest, WorksWhenDollarIsInRegex) {\n  EXPECT_FALSE(MatchRegexAtHead(\"$\", \"a\"));\n\n  EXPECT_TRUE(MatchRegexAtHead(\"$\", \"\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"a$\", \"a\"));\n}\n\nTEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithEscapeSequence) {\n  EXPECT_FALSE(MatchRegexAtHead(\"\\\\w\", \"+\"));\n  EXPECT_FALSE(MatchRegexAtHead(\"\\\\W\", \"ab\"));\n\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\sa\", \"\\nab\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\d\", \"1a\"));\n}\n\nTEST(MatchRegexAtHeadTest, WorksWhenRegexStartsWithRepetition) {\n  EXPECT_FALSE(MatchRegexAtHead(\".+a\", \"abc\"));\n  EXPECT_FALSE(MatchRegexAtHead(\"a?b\", \"aab\"));\n\n  EXPECT_TRUE(MatchRegexAtHead(\".*a\", \"bc12-ab\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"a?b\", \"b\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"a?b\", \"ab\"));\n}\n\nTEST(MatchRegexAtHeadTest,\n     WorksWhenRegexStartsWithRepetionOfEscapeSequence) {\n  EXPECT_FALSE(MatchRegexAtHead(\"\\\\.+a\", \"abc\"));\n  EXPECT_FALSE(MatchRegexAtHead(\"\\\\s?b\", \"  b\"));\n\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\(*a\", \"((((ab\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\^?b\", \"^b\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\\\\\?b\", \"b\"));\n  EXPECT_TRUE(MatchRegexAtHead(\"\\\\\\\\?b\", \"\\\\b\"));\n}\n\nTEST(MatchRegexAtHeadTest, MatchesSequentially) {\n  EXPECT_FALSE(MatchRegexAtHead(\"ab.*c\", \"acabc\"));\n\n  EXPECT_TRUE(MatchRegexAtHead(\"ab.*c\", \"ab-fsc\"));\n}\n\nTEST(MatchRegexAnywhereTest, ReturnsFalseWhenStringIsNull) {\n  EXPECT_FALSE(MatchRegexAnywhere(\"\", NULL));\n}\n\nTEST(MatchRegexAnywhereTest, WorksWhenRegexStartsWithCaret) {\n  EXPECT_FALSE(MatchRegexAnywhere(\"^a\", \"ba\"));\n  EXPECT_FALSE(MatchRegexAnywhere(\"^$\", \"a\"));\n\n  EXPECT_TRUE(MatchRegexAnywhere(\"^a\", \"ab\"));\n  EXPECT_TRUE(MatchRegexAnywhere(\"^\", \"ab\"));\n  EXPECT_TRUE(MatchRegexAnywhere(\"^$\", \"\"));\n}\n\nTEST(MatchRegexAnywhereTest, ReturnsFalseWhenNoMatch) {\n  EXPECT_FALSE(MatchRegexAnywhere(\"a\", \"bcde123\"));\n  EXPECT_FALSE(MatchRegexAnywhere(\"a.+a\", \"--aa88888888\"));\n}\n\nTEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingPrefix) {\n  EXPECT_TRUE(MatchRegexAnywhere(\"\\\\w+\", \"ab1_ - 5\"));\n  EXPECT_TRUE(MatchRegexAnywhere(\".*=\", \"=\"));\n  EXPECT_TRUE(MatchRegexAnywhere(\"x.*ab?.*bc\", \"xaaabc\"));\n}\n\nTEST(MatchRegexAnywhereTest, ReturnsTrueWhenMatchingNonPrefix) {\n  EXPECT_TRUE(MatchRegexAnywhere(\"\\\\w+\", \"$$$ ab1_ - 5\"));\n  EXPECT_TRUE(MatchRegexAnywhere(\"\\\\.+=\", \"=  ...=\"));\n}\n\n// Tests RE's implicit constructors.\nTEST(RETest, ImplicitConstructorWorks) {\n  const RE empty(\"\");\n  EXPECT_STREQ(\"\", empty.pattern());\n\n  const RE simple(\"hello\");\n  EXPECT_STREQ(\"hello\", simple.pattern());\n}\n\n// Tests that RE's constructors reject invalid regular expressions.\nTEST(RETest, RejectsInvalidRegex) {\n  EXPECT_NONFATAL_FAILURE({\n    const RE normal(NULL);\n  }, \"NULL is not a valid simple regular expression\");\n\n  EXPECT_NONFATAL_FAILURE({\n    const RE normal(\".*(\\\\w+\");\n  }, \"'(' is unsupported\");\n\n  EXPECT_NONFATAL_FAILURE({\n    const RE invalid(\"^?\");\n  }, \"'?' can only follow a repeatable token\");\n}\n\n// Tests RE::FullMatch().\nTEST(RETest, FullMatchWorks) {\n  const RE empty(\"\");\n  EXPECT_TRUE(RE::FullMatch(\"\", empty));\n  EXPECT_FALSE(RE::FullMatch(\"a\", empty));\n\n  const RE re1(\"a\");\n  EXPECT_TRUE(RE::FullMatch(\"a\", re1));\n\n  const RE re(\"a.*z\");\n  EXPECT_TRUE(RE::FullMatch(\"az\", re));\n  EXPECT_TRUE(RE::FullMatch(\"axyz\", re));\n  EXPECT_FALSE(RE::FullMatch(\"baz\", re));\n  EXPECT_FALSE(RE::FullMatch(\"azy\", re));\n}\n\n// Tests RE::PartialMatch().\nTEST(RETest, PartialMatchWorks) {\n  const RE empty(\"\");\n  EXPECT_TRUE(RE::PartialMatch(\"\", empty));\n  EXPECT_TRUE(RE::PartialMatch(\"a\", empty));\n\n  const RE re(\"a.*z\");\n  EXPECT_TRUE(RE::PartialMatch(\"az\", re));\n  EXPECT_TRUE(RE::PartialMatch(\"axyz\", re));\n  EXPECT_TRUE(RE::PartialMatch(\"baz\", re));\n  EXPECT_TRUE(RE::PartialMatch(\"azy\", re));\n  EXPECT_FALSE(RE::PartialMatch(\"zza\", re));\n}\n\n#endif  // GTEST_USES_POSIX_RE\n\n#if !GTEST_OS_WINDOWS_MOBILE\n\nTEST(CaptureTest, CapturesStdout) {\n  CaptureStdout();\n  fprintf(stdout, \"abc\");\n  EXPECT_STREQ(\"abc\", GetCapturedStdout().c_str());\n\n  CaptureStdout();\n  fprintf(stdout, \"def%cghi\", '\\0');\n  EXPECT_EQ(::std::string(\"def\\0ghi\", 7), ::std::string(GetCapturedStdout()));\n}\n\nTEST(CaptureTest, CapturesStderr) {\n  CaptureStderr();\n  fprintf(stderr, \"jkl\");\n  EXPECT_STREQ(\"jkl\", GetCapturedStderr().c_str());\n\n  CaptureStderr();\n  fprintf(stderr, \"jkl%cmno\", '\\0');\n  EXPECT_EQ(::std::string(\"jkl\\0mno\", 7), ::std::string(GetCapturedStderr()));\n}\n\n// Tests that stdout and stderr capture don't interfere with each other.\nTEST(CaptureTest, CapturesStdoutAndStderr) {\n  CaptureStdout();\n  CaptureStderr();\n  fprintf(stdout, \"pqr\");\n  fprintf(stderr, \"stu\");\n  EXPECT_STREQ(\"pqr\", GetCapturedStdout().c_str());\n  EXPECT_STREQ(\"stu\", GetCapturedStderr().c_str());\n}\n\nTEST(CaptureDeathTest, CannotReenterStdoutCapture) {\n  CaptureStdout();\n  EXPECT_DEATH_IF_SUPPORTED(CaptureStdout(),\n                            \"Only one stdout capturer can exist at a time\");\n  GetCapturedStdout();\n\n  // We cannot test stderr capturing using death tests as they use it\n  // themselves.\n}\n\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\nTEST(ThreadLocalTest, DefaultConstructorInitializesToDefaultValues) {\n  ThreadLocal<int> t1;\n  EXPECT_EQ(0, t1.get());\n\n  ThreadLocal<void*> t2;\n  EXPECT_TRUE(t2.get() == NULL);\n}\n\nTEST(ThreadLocalTest, SingleParamConstructorInitializesToParam) {\n  ThreadLocal<int> t1(123);\n  EXPECT_EQ(123, t1.get());\n\n  int i = 0;\n  ThreadLocal<int*> t2(&i);\n  EXPECT_EQ(&i, t2.get());\n}\n\nclass NoDefaultContructor {\n public:\n  explicit NoDefaultContructor(const char*) {}\n  NoDefaultContructor(const NoDefaultContructor&) {}\n};\n\nTEST(ThreadLocalTest, ValueDefaultContructorIsNotRequiredForParamVersion) {\n  ThreadLocal<NoDefaultContructor> bar(NoDefaultContructor(\"foo\"));\n  bar.pointer();\n}\n\nTEST(ThreadLocalTest, GetAndPointerReturnSameValue) {\n  ThreadLocal<std::string> thread_local_string;\n\n  EXPECT_EQ(thread_local_string.pointer(), &(thread_local_string.get()));\n\n  // Verifies the condition still holds after calling set.\n  thread_local_string.set(\"foo\");\n  EXPECT_EQ(thread_local_string.pointer(), &(thread_local_string.get()));\n}\n\nTEST(ThreadLocalTest, PointerAndConstPointerReturnSameValue) {\n  ThreadLocal<std::string> thread_local_string;\n  const ThreadLocal<std::string>& const_thread_local_string =\n      thread_local_string;\n\n  EXPECT_EQ(thread_local_string.pointer(), const_thread_local_string.pointer());\n\n  thread_local_string.set(\"foo\");\n  EXPECT_EQ(thread_local_string.pointer(), const_thread_local_string.pointer());\n}\n\n#if GTEST_IS_THREADSAFE\n\nvoid AddTwo(int* param) { *param += 2; }\n\nTEST(ThreadWithParamTest, ConstructorExecutesThreadFunc) {\n  int i = 40;\n  ThreadWithParam<int*> thread(&AddTwo, &i, NULL);\n  thread.Join();\n  EXPECT_EQ(42, i);\n}\n\nTEST(MutexDeathTest, AssertHeldShouldAssertWhenNotLocked) {\n  // AssertHeld() is flaky only in the presence of multiple threads accessing\n  // the lock. In this case, the test is robust.\n  EXPECT_DEATH_IF_SUPPORTED({\n    Mutex m;\n    { MutexLock lock(&m); }\n    m.AssertHeld();\n  },\n  \"thread .*hold\");\n}\n\nTEST(MutexTest, AssertHeldShouldNotAssertWhenLocked) {\n  Mutex m;\n  MutexLock lock(&m);\n  m.AssertHeld();\n}\n\nclass AtomicCounterWithMutex {\n public:\n  explicit AtomicCounterWithMutex(Mutex* mutex) :\n    value_(0), mutex_(mutex), random_(42) {}\n\n  void Increment() {\n    MutexLock lock(mutex_);\n    int temp = value_;\n    {\n      // Locking a mutex puts up a memory barrier, preventing reads and\n      // writes to value_ rearranged when observed from other threads.\n      //\n      // We cannot use Mutex and MutexLock here or rely on their memory\n      // barrier functionality as we are testing them here.\n      pthread_mutex_t memory_barrier_mutex;\n      GTEST_CHECK_POSIX_SUCCESS_(\n          pthread_mutex_init(&memory_barrier_mutex, NULL));\n      GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&memory_barrier_mutex));\n\n      SleepMilliseconds(random_.Generate(30));\n\n      GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&memory_barrier_mutex));\n      GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&memory_barrier_mutex));\n    }\n    value_ = temp + 1;\n  }\n  int value() const { return value_; }\n\n private:\n  volatile int value_;\n  Mutex* const mutex_;  // Protects value_.\n  Random       random_;\n};\n\nvoid CountingThreadFunc(pair<AtomicCounterWithMutex*, int> param) {\n  for (int i = 0; i < param.second; ++i)\n      param.first->Increment();\n}\n\n// Tests that the mutex only lets one thread at a time to lock it.\nTEST(MutexTest, OnlyOneThreadCanLockAtATime) {\n  Mutex mutex;\n  AtomicCounterWithMutex locked_counter(&mutex);\n\n  typedef ThreadWithParam<pair<AtomicCounterWithMutex*, int> > ThreadType;\n  const int kCycleCount = 20;\n  const int kThreadCount = 7;\n  scoped_ptr<ThreadType> counting_threads[kThreadCount];\n  Notification threads_can_start;\n  // Creates and runs kThreadCount threads that increment locked_counter\n  // kCycleCount times each.\n  for (int i = 0; i < kThreadCount; ++i) {\n    counting_threads[i].reset(new ThreadType(&CountingThreadFunc,\n                                             make_pair(&locked_counter,\n                                                       kCycleCount),\n                                             &threads_can_start));\n  }\n  threads_can_start.Notify();\n  for (int i = 0; i < kThreadCount; ++i)\n    counting_threads[i]->Join();\n\n  // If the mutex lets more than one thread to increment the counter at a\n  // time, they are likely to encounter a race condition and have some\n  // increments overwritten, resulting in the lower then expected counter\n  // value.\n  EXPECT_EQ(kCycleCount * kThreadCount, locked_counter.value());\n}\n\ntemplate <typename T>\nvoid RunFromThread(void (func)(T), T param) {\n  ThreadWithParam<T> thread(func, param, NULL);\n  thread.Join();\n}\n\nvoid RetrieveThreadLocalValue(\n    pair<ThreadLocal<std::string>*, std::string*> param) {\n  *param.second = param.first->get();\n}\n\nTEST(ThreadLocalTest, ParameterizedConstructorSetsDefault) {\n  ThreadLocal<std::string> thread_local_string(\"foo\");\n  EXPECT_STREQ(\"foo\", thread_local_string.get().c_str());\n\n  thread_local_string.set(\"bar\");\n  EXPECT_STREQ(\"bar\", thread_local_string.get().c_str());\n\n  std::string result;\n  RunFromThread(&RetrieveThreadLocalValue,\n                make_pair(&thread_local_string, &result));\n  EXPECT_STREQ(\"foo\", result.c_str());\n}\n\n// DestructorTracker keeps track of whether its instances have been\n// destroyed.\nstatic std::vector<bool> g_destroyed;\n\nclass DestructorTracker {\n public:\n  DestructorTracker() : index_(GetNewIndex()) {}\n  DestructorTracker(const DestructorTracker& /* rhs */)\n      : index_(GetNewIndex()) {}\n  ~DestructorTracker() {\n    // We never access g_destroyed concurrently, so we don't need to\n    // protect the write operation under a mutex.\n    g_destroyed[index_] = true;\n  }\n\n private:\n  static int GetNewIndex() {\n    g_destroyed.push_back(false);\n    return g_destroyed.size() - 1;\n  }\n  const int index_;\n};\n\ntypedef ThreadLocal<DestructorTracker>* ThreadParam;\n\nvoid CallThreadLocalGet(ThreadParam thread_local_param) {\n  thread_local_param->get();\n}\n\n// Tests that when a ThreadLocal object dies in a thread, it destroys\n// the managed object for that thread.\nTEST(ThreadLocalTest, DestroysManagedObjectForOwnThreadWhenDying) {\n  g_destroyed.clear();\n\n  {\n    // The next line default constructs a DestructorTracker object as\n    // the default value of objects managed by thread_local_tracker.\n    ThreadLocal<DestructorTracker> thread_local_tracker;\n    ASSERT_EQ(1U, g_destroyed.size());\n    ASSERT_FALSE(g_destroyed[0]);\n\n    // This creates another DestructorTracker object for the main thread.\n    thread_local_tracker.get();\n    ASSERT_EQ(2U, g_destroyed.size());\n    ASSERT_FALSE(g_destroyed[0]);\n    ASSERT_FALSE(g_destroyed[1]);\n  }\n\n  // Now thread_local_tracker has died.  It should have destroyed both the\n  // default value shared by all threads and the value for the main\n  // thread.\n  ASSERT_EQ(2U, g_destroyed.size());\n  EXPECT_TRUE(g_destroyed[0]);\n  EXPECT_TRUE(g_destroyed[1]);\n\n  g_destroyed.clear();\n}\n\n// Tests that when a thread exits, the thread-local object for that\n// thread is destroyed.\nTEST(ThreadLocalTest, DestroysManagedObjectAtThreadExit) {\n  g_destroyed.clear();\n\n  {\n    // The next line default constructs a DestructorTracker object as\n    // the default value of objects managed by thread_local_tracker.\n    ThreadLocal<DestructorTracker> thread_local_tracker;\n    ASSERT_EQ(1U, g_destroyed.size());\n    ASSERT_FALSE(g_destroyed[0]);\n\n    // This creates another DestructorTracker object in the new thread.\n    ThreadWithParam<ThreadParam> thread(\n        &CallThreadLocalGet, &thread_local_tracker, NULL);\n    thread.Join();\n\n    // Now the new thread has exited.  The per-thread object for it\n    // should have been destroyed.\n    ASSERT_EQ(2U, g_destroyed.size());\n    ASSERT_FALSE(g_destroyed[0]);\n    ASSERT_TRUE(g_destroyed[1]);\n  }\n\n  // Now thread_local_tracker has died.  The default value should have been\n  // destroyed too.\n  ASSERT_EQ(2U, g_destroyed.size());\n  EXPECT_TRUE(g_destroyed[0]);\n  EXPECT_TRUE(g_destroyed[1]);\n\n  g_destroyed.clear();\n}\n\nTEST(ThreadLocalTest, ThreadLocalMutationsAffectOnlyCurrentThread) {\n  ThreadLocal<std::string> thread_local_string;\n  thread_local_string.set(\"Foo\");\n  EXPECT_STREQ(\"Foo\", thread_local_string.get().c_str());\n\n  std::string result;\n  RunFromThread(&RetrieveThreadLocalValue,\n                make_pair(&thread_local_string, &result));\n  EXPECT_TRUE(result.empty());\n}\n\n#endif  // GTEST_IS_THREADSAFE\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-printers_test.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Google Test - The Google C++ Testing Framework\n//\n// This file tests the universal value printer.\n\n#include \"gtest/gtest-printers.h\"\n\n#include <ctype.h>\n#include <limits.h>\n#include <string.h>\n#include <algorithm>\n#include <deque>\n#include <list>\n#include <map>\n#include <set>\n#include <sstream>\n#include <string>\n#include <utility>\n#include <vector>\n\n#include \"gtest/gtest.h\"\n\n// hash_map and hash_set are available under Visual C++.\n#if _MSC_VER\n# define GTEST_HAS_HASH_MAP_ 1  // Indicates that hash_map is available.\n# include <hash_map>            // NOLINT\n# define GTEST_HAS_HASH_SET_ 1  // Indicates that hash_set is available.\n# include <hash_set>            // NOLINT\n#endif  // GTEST_OS_WINDOWS\n\n// Some user-defined types for testing the universal value printer.\n\n// An anonymous enum type.\nenum AnonymousEnum {\n  kAE1 = -1,\n  kAE2 = 1\n};\n\n// An enum without a user-defined printer.\nenum EnumWithoutPrinter {\n  kEWP1 = -2,\n  kEWP2 = 42\n};\n\n// An enum with a << operator.\nenum EnumWithStreaming {\n  kEWS1 = 10\n};\n\nstd::ostream& operator<<(std::ostream& os, EnumWithStreaming e) {\n  return os << (e == kEWS1 ? \"kEWS1\" : \"invalid\");\n}\n\n// An enum with a PrintTo() function.\nenum EnumWithPrintTo {\n  kEWPT1 = 1\n};\n\nvoid PrintTo(EnumWithPrintTo e, std::ostream* os) {\n  *os << (e == kEWPT1 ? \"kEWPT1\" : \"invalid\");\n}\n\n// A class implicitly convertible to BiggestInt.\nclass BiggestIntConvertible {\n public:\n  operator ::testing::internal::BiggestInt() const { return 42; }\n};\n\n// A user-defined unprintable class template in the global namespace.\ntemplate <typename T>\nclass UnprintableTemplateInGlobal {\n public:\n  UnprintableTemplateInGlobal() : value_() {}\n private:\n  T value_;\n};\n\n// A user-defined streamable type in the global namespace.\nclass StreamableInGlobal {\n public:\n  virtual ~StreamableInGlobal() {}\n};\n\ninline void operator<<(::std::ostream& os, const StreamableInGlobal& /* x */) {\n  os << \"StreamableInGlobal\";\n}\n\nvoid operator<<(::std::ostream& os, const StreamableInGlobal* /* x */) {\n  os << \"StreamableInGlobal*\";\n}\n\nnamespace foo {\n\n// A user-defined unprintable type in a user namespace.\nclass UnprintableInFoo {\n public:\n  UnprintableInFoo() : z_(0) { memcpy(xy_, \"\\xEF\\x12\\x0\\x0\\x34\\xAB\\x0\\x0\", 8); }\n private:\n  char xy_[8];\n  double z_;\n};\n\n// A user-defined printable type in a user-chosen namespace.\nstruct PrintableViaPrintTo {\n  PrintableViaPrintTo() : value() {}\n  int value;\n};\n\nvoid PrintTo(const PrintableViaPrintTo& x, ::std::ostream* os) {\n  *os << \"PrintableViaPrintTo: \" << x.value;\n}\n\n// A type with a user-defined << for printing its pointer.\nstruct PointerPrintable {\n};\n\n::std::ostream& operator<<(::std::ostream& os,\n                           const PointerPrintable* /* x */) {\n  return os << \"PointerPrintable*\";\n}\n\n// A user-defined printable class template in a user-chosen namespace.\ntemplate <typename T>\nclass PrintableViaPrintToTemplate {\n public:\n  explicit PrintableViaPrintToTemplate(const T& a_value) : value_(a_value) {}\n\n  const T& value() const { return value_; }\n private:\n  T value_;\n};\n\ntemplate <typename T>\nvoid PrintTo(const PrintableViaPrintToTemplate<T>& x, ::std::ostream* os) {\n  *os << \"PrintableViaPrintToTemplate: \" << x.value();\n}\n\n// A user-defined streamable class template in a user namespace.\ntemplate <typename T>\nclass StreamableTemplateInFoo {\n public:\n  StreamableTemplateInFoo() : value_() {}\n\n  const T& value() const { return value_; }\n private:\n  T value_;\n};\n\ntemplate <typename T>\ninline ::std::ostream& operator<<(::std::ostream& os,\n                                  const StreamableTemplateInFoo<T>& x) {\n  return os << \"StreamableTemplateInFoo: \" << x.value();\n}\n\n}  // namespace foo\n\nnamespace testing {\nnamespace gtest_printers_test {\n\nusing ::std::deque;\nusing ::std::list;\nusing ::std::make_pair;\nusing ::std::map;\nusing ::std::multimap;\nusing ::std::multiset;\nusing ::std::pair;\nusing ::std::set;\nusing ::std::vector;\nusing ::testing::PrintToString;\nusing ::testing::internal::FormatForComparisonFailureMessage;\nusing ::testing::internal::ImplicitCast_;\nusing ::testing::internal::NativeArray;\nusing ::testing::internal::RE;\nusing ::testing::internal::Strings;\nusing ::testing::internal::UniversalPrint;\nusing ::testing::internal::UniversalPrinter;\nusing ::testing::internal::UniversalTersePrint;\nusing ::testing::internal::UniversalTersePrintTupleFieldsToStrings;\nusing ::testing::internal::kReference;\nusing ::testing::internal::string;\n\n#if GTEST_HAS_TR1_TUPLE\nusing ::std::tr1::make_tuple;\nusing ::std::tr1::tuple;\n#endif\n\n// The hash_* classes are not part of the C++ standard.  STLport\n// defines them in namespace std.  MSVC defines them in ::stdext.  GCC\n// defines them in ::.\n#ifdef _STLP_HASH_MAP  // We got <hash_map> from STLport.\nusing ::std::hash_map;\nusing ::std::hash_set;\nusing ::std::hash_multimap;\nusing ::std::hash_multiset;\n#elif _MSC_VER\nusing ::stdext::hash_map;\nusing ::stdext::hash_set;\nusing ::stdext::hash_multimap;\nusing ::stdext::hash_multiset;\n#endif\n\n// Prints a value to a string using the universal value printer.  This\n// is a helper for testing UniversalPrinter<T>::Print() for various types.\ntemplate <typename T>\nstring Print(const T& value) {\n  ::std::stringstream ss;\n  UniversalPrinter<T>::Print(value, &ss);\n  return ss.str();\n}\n\n// Prints a value passed by reference to a string, using the universal\n// value printer.  This is a helper for testing\n// UniversalPrinter<T&>::Print() for various types.\ntemplate <typename T>\nstring PrintByRef(const T& value) {\n  ::std::stringstream ss;\n  UniversalPrinter<T&>::Print(value, &ss);\n  return ss.str();\n}\n\n// Tests printing various enum types.\n\nTEST(PrintEnumTest, AnonymousEnum) {\n  EXPECT_EQ(\"-1\", Print(kAE1));\n  EXPECT_EQ(\"1\", Print(kAE2));\n}\n\nTEST(PrintEnumTest, EnumWithoutPrinter) {\n  EXPECT_EQ(\"-2\", Print(kEWP1));\n  EXPECT_EQ(\"42\", Print(kEWP2));\n}\n\nTEST(PrintEnumTest, EnumWithStreaming) {\n  EXPECT_EQ(\"kEWS1\", Print(kEWS1));\n  EXPECT_EQ(\"invalid\", Print(static_cast<EnumWithStreaming>(0)));\n}\n\nTEST(PrintEnumTest, EnumWithPrintTo) {\n  EXPECT_EQ(\"kEWPT1\", Print(kEWPT1));\n  EXPECT_EQ(\"invalid\", Print(static_cast<EnumWithPrintTo>(0)));\n}\n\n// Tests printing a class implicitly convertible to BiggestInt.\n\nTEST(PrintClassTest, BiggestIntConvertible) {\n  EXPECT_EQ(\"42\", Print(BiggestIntConvertible()));\n}\n\n// Tests printing various char types.\n\n// char.\nTEST(PrintCharTest, PlainChar) {\n  EXPECT_EQ(\"'\\\\0'\", Print('\\0'));\n  EXPECT_EQ(\"'\\\\'' (39, 0x27)\", Print('\\''));\n  EXPECT_EQ(\"'\\\"' (34, 0x22)\", Print('\"'));\n  EXPECT_EQ(\"'?' (63, 0x3F)\", Print('?'));\n  EXPECT_EQ(\"'\\\\\\\\' (92, 0x5C)\", Print('\\\\'));\n  EXPECT_EQ(\"'\\\\a' (7)\", Print('\\a'));\n  EXPECT_EQ(\"'\\\\b' (8)\", Print('\\b'));\n  EXPECT_EQ(\"'\\\\f' (12, 0xC)\", Print('\\f'));\n  EXPECT_EQ(\"'\\\\n' (10, 0xA)\", Print('\\n'));\n  EXPECT_EQ(\"'\\\\r' (13, 0xD)\", Print('\\r'));\n  EXPECT_EQ(\"'\\\\t' (9)\", Print('\\t'));\n  EXPECT_EQ(\"'\\\\v' (11, 0xB)\", Print('\\v'));\n  EXPECT_EQ(\"'\\\\x7F' (127)\", Print('\\x7F'));\n  EXPECT_EQ(\"'\\\\xFF' (255)\", Print('\\xFF'));\n  EXPECT_EQ(\"' ' (32, 0x20)\", Print(' '));\n  EXPECT_EQ(\"'a' (97, 0x61)\", Print('a'));\n}\n\n// signed char.\nTEST(PrintCharTest, SignedChar) {\n  EXPECT_EQ(\"'\\\\0'\", Print(static_cast<signed char>('\\0')));\n  EXPECT_EQ(\"'\\\\xCE' (-50)\",\n            Print(static_cast<signed char>(-50)));\n}\n\n// unsigned char.\nTEST(PrintCharTest, UnsignedChar) {\n  EXPECT_EQ(\"'\\\\0'\", Print(static_cast<unsigned char>('\\0')));\n  EXPECT_EQ(\"'b' (98, 0x62)\",\n            Print(static_cast<unsigned char>('b')));\n}\n\n// Tests printing other simple, built-in types.\n\n// bool.\nTEST(PrintBuiltInTypeTest, Bool) {\n  EXPECT_EQ(\"false\", Print(false));\n  EXPECT_EQ(\"true\", Print(true));\n}\n\n// wchar_t.\nTEST(PrintBuiltInTypeTest, Wchar_t) {\n  EXPECT_EQ(\"L'\\\\0'\", Print(L'\\0'));\n  EXPECT_EQ(\"L'\\\\'' (39, 0x27)\", Print(L'\\''));\n  EXPECT_EQ(\"L'\\\"' (34, 0x22)\", Print(L'\"'));\n  EXPECT_EQ(\"L'?' (63, 0x3F)\", Print(L'?'));\n  EXPECT_EQ(\"L'\\\\\\\\' (92, 0x5C)\", Print(L'\\\\'));\n  EXPECT_EQ(\"L'\\\\a' (7)\", Print(L'\\a'));\n  EXPECT_EQ(\"L'\\\\b' (8)\", Print(L'\\b'));\n  EXPECT_EQ(\"L'\\\\f' (12, 0xC)\", Print(L'\\f'));\n  EXPECT_EQ(\"L'\\\\n' (10, 0xA)\", Print(L'\\n'));\n  EXPECT_EQ(\"L'\\\\r' (13, 0xD)\", Print(L'\\r'));\n  EXPECT_EQ(\"L'\\\\t' (9)\", Print(L'\\t'));\n  EXPECT_EQ(\"L'\\\\v' (11, 0xB)\", Print(L'\\v'));\n  EXPECT_EQ(\"L'\\\\x7F' (127)\", Print(L'\\x7F'));\n  EXPECT_EQ(\"L'\\\\xFF' (255)\", Print(L'\\xFF'));\n  EXPECT_EQ(\"L' ' (32, 0x20)\", Print(L' '));\n  EXPECT_EQ(\"L'a' (97, 0x61)\", Print(L'a'));\n  EXPECT_EQ(\"L'\\\\x576' (1398)\", Print(static_cast<wchar_t>(0x576)));\n  EXPECT_EQ(\"L'\\\\xC74D' (51021)\", Print(static_cast<wchar_t>(0xC74D)));\n}\n\n// Test that Int64 provides more storage than wchar_t.\nTEST(PrintTypeSizeTest, Wchar_t) {\n  EXPECT_LT(sizeof(wchar_t), sizeof(testing::internal::Int64));\n}\n\n// Various integer types.\nTEST(PrintBuiltInTypeTest, Integer) {\n  EXPECT_EQ(\"'\\\\xFF' (255)\", Print(static_cast<unsigned char>(255)));  // uint8\n  EXPECT_EQ(\"'\\\\x80' (-128)\", Print(static_cast<signed char>(-128)));  // int8\n  EXPECT_EQ(\"65535\", Print(USHRT_MAX));  // uint16\n  EXPECT_EQ(\"-32768\", Print(SHRT_MIN));  // int16\n  EXPECT_EQ(\"4294967295\", Print(UINT_MAX));  // uint32\n  EXPECT_EQ(\"-2147483648\", Print(INT_MIN));  // int32\n  EXPECT_EQ(\"18446744073709551615\",\n            Print(static_cast<testing::internal::UInt64>(-1)));  // uint64\n  EXPECT_EQ(\"-9223372036854775808\",\n            Print(static_cast<testing::internal::Int64>(1) << 63));  // int64\n}\n\n// Size types.\nTEST(PrintBuiltInTypeTest, Size_t) {\n  EXPECT_EQ(\"1\", Print(sizeof('a')));  // size_t.\n#if !GTEST_OS_WINDOWS\n  // Windows has no ssize_t type.\n  EXPECT_EQ(\"-2\", Print(static_cast<ssize_t>(-2)));  // ssize_t.\n#endif  // !GTEST_OS_WINDOWS\n}\n\n// Floating-points.\nTEST(PrintBuiltInTypeTest, FloatingPoints) {\n  EXPECT_EQ(\"1.5\", Print(1.5f));   // float\n  EXPECT_EQ(\"-2.5\", Print(-2.5));  // double\n}\n\n// Since ::std::stringstream::operator<<(const void *) formats the pointer\n// output differently with different compilers, we have to create the expected\n// output first and use it as our expectation.\nstatic string PrintPointer(const void *p) {\n  ::std::stringstream expected_result_stream;\n  expected_result_stream << p;\n  return expected_result_stream.str();\n}\n\n// Tests printing C strings.\n\n// const char*.\nTEST(PrintCStringTest, Const) {\n  const char* p = \"World\";\n  EXPECT_EQ(PrintPointer(p) + \" pointing to \\\"World\\\"\", Print(p));\n}\n\n// char*.\nTEST(PrintCStringTest, NonConst) {\n  char p[] = \"Hi\";\n  EXPECT_EQ(PrintPointer(p) + \" pointing to \\\"Hi\\\"\",\n            Print(static_cast<char*>(p)));\n}\n\n// NULL C string.\nTEST(PrintCStringTest, Null) {\n  const char* p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// Tests that C strings are escaped properly.\nTEST(PrintCStringTest, EscapesProperly) {\n  const char* p = \"'\\\"?\\\\\\a\\b\\f\\n\\r\\t\\v\\x7F\\xFF a\";\n  EXPECT_EQ(PrintPointer(p) + \" pointing to \\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\"\n            \"\\\\n\\\\r\\\\t\\\\v\\\\x7F\\\\xFF a\\\"\",\n            Print(p));\n}\n\n\n\n// MSVC compiler can be configured to define whar_t as a typedef\n// of unsigned short. Defining an overload for const wchar_t* in that case\n// would cause pointers to unsigned shorts be printed as wide strings,\n// possibly accessing more memory than intended and causing invalid\n// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when\n// wchar_t is implemented as a native type.\n#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)\n\n// const wchar_t*.\nTEST(PrintWideCStringTest, Const) {\n  const wchar_t* p = L\"World\";\n  EXPECT_EQ(PrintPointer(p) + \" pointing to L\\\"World\\\"\", Print(p));\n}\n\n// wchar_t*.\nTEST(PrintWideCStringTest, NonConst) {\n  wchar_t p[] = L\"Hi\";\n  EXPECT_EQ(PrintPointer(p) + \" pointing to L\\\"Hi\\\"\",\n            Print(static_cast<wchar_t*>(p)));\n}\n\n// NULL wide C string.\nTEST(PrintWideCStringTest, Null) {\n  const wchar_t* p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// Tests that wide C strings are escaped properly.\nTEST(PrintWideCStringTest, EscapesProperly) {\n  const wchar_t s[] = {'\\'', '\"', '?', '\\\\', '\\a', '\\b', '\\f', '\\n', '\\r',\n                       '\\t', '\\v', 0xD3, 0x576, 0x8D3, 0xC74D, ' ', 'a', '\\0'};\n  EXPECT_EQ(PrintPointer(s) + \" pointing to L\\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\"\n            \"\\\\n\\\\r\\\\t\\\\v\\\\xD3\\\\x576\\\\x8D3\\\\xC74D a\\\"\",\n            Print(static_cast<const wchar_t*>(s)));\n}\n#endif  // native wchar_t\n\n// Tests printing pointers to other char types.\n\n// signed char*.\nTEST(PrintCharPointerTest, SignedChar) {\n  signed char* p = reinterpret_cast<signed char*>(0x1234);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// const signed char*.\nTEST(PrintCharPointerTest, ConstSignedChar) {\n  signed char* p = reinterpret_cast<signed char*>(0x1234);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// unsigned char*.\nTEST(PrintCharPointerTest, UnsignedChar) {\n  unsigned char* p = reinterpret_cast<unsigned char*>(0x1234);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// const unsigned char*.\nTEST(PrintCharPointerTest, ConstUnsignedChar) {\n  const unsigned char* p = reinterpret_cast<const unsigned char*>(0x1234);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// Tests printing pointers to simple, built-in types.\n\n// bool*.\nTEST(PrintPointerToBuiltInTypeTest, Bool) {\n  bool* p = reinterpret_cast<bool*>(0xABCD);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// void*.\nTEST(PrintPointerToBuiltInTypeTest, Void) {\n  void* p = reinterpret_cast<void*>(0xABCD);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// const void*.\nTEST(PrintPointerToBuiltInTypeTest, ConstVoid) {\n  const void* p = reinterpret_cast<const void*>(0xABCD);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// Tests printing pointers to pointers.\nTEST(PrintPointerToPointerTest, IntPointerPointer) {\n  int** p = reinterpret_cast<int**>(0xABCD);\n  EXPECT_EQ(PrintPointer(p), Print(p));\n  p = NULL;\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// Tests printing (non-member) function pointers.\n\nvoid MyFunction(int /* n */) {}\n\nTEST(PrintPointerTest, NonMemberFunctionPointer) {\n  // We cannot directly cast &MyFunction to const void* because the\n  // standard disallows casting between pointers to functions and\n  // pointers to objects, and some compilers (e.g. GCC 3.4) enforce\n  // this limitation.\n  EXPECT_EQ(\n      PrintPointer(reinterpret_cast<const void*>(\n          reinterpret_cast<internal::BiggestInt>(&MyFunction))),\n      Print(&MyFunction));\n  int (*p)(bool) = NULL;  // NOLINT\n  EXPECT_EQ(\"NULL\", Print(p));\n}\n\n// An assertion predicate determining whether a one string is a prefix for\n// another.\ntemplate <typename StringType>\nAssertionResult HasPrefix(const StringType& str, const StringType& prefix) {\n  if (str.find(prefix, 0) == 0)\n    return AssertionSuccess();\n\n  const bool is_wide_string = sizeof(prefix[0]) > 1;\n  const char* const begin_string_quote = is_wide_string ? \"L\\\"\" : \"\\\"\";\n  return AssertionFailure()\n      << begin_string_quote << prefix << \"\\\" is not a prefix of \"\n      << begin_string_quote << str << \"\\\"\\n\";\n}\n\n// Tests printing member variable pointers.  Although they are called\n// pointers, they don't point to a location in the address space.\n// Their representation is implementation-defined.  Thus they will be\n// printed as raw bytes.\n\nstruct Foo {\n public:\n  virtual ~Foo() {}\n  int MyMethod(char x) { return x + 1; }\n  virtual char MyVirtualMethod(int /* n */) { return 'a'; }\n\n  int value;\n};\n\nTEST(PrintPointerTest, MemberVariablePointer) {\n  EXPECT_TRUE(HasPrefix(Print(&Foo::value),\n                        Print(sizeof(&Foo::value)) + \"-byte object \"));\n  int (Foo::*p) = NULL;  // NOLINT\n  EXPECT_TRUE(HasPrefix(Print(p),\n                        Print(sizeof(p)) + \"-byte object \"));\n}\n\n// Tests printing member function pointers.  Although they are called\n// pointers, they don't point to a location in the address space.\n// Their representation is implementation-defined.  Thus they will be\n// printed as raw bytes.\nTEST(PrintPointerTest, MemberFunctionPointer) {\n  EXPECT_TRUE(HasPrefix(Print(&Foo::MyMethod),\n                        Print(sizeof(&Foo::MyMethod)) + \"-byte object \"));\n  EXPECT_TRUE(\n      HasPrefix(Print(&Foo::MyVirtualMethod),\n                Print(sizeof((&Foo::MyVirtualMethod))) + \"-byte object \"));\n  int (Foo::*p)(char) = NULL;  // NOLINT\n  EXPECT_TRUE(HasPrefix(Print(p),\n                        Print(sizeof(p)) + \"-byte object \"));\n}\n\n// Tests printing C arrays.\n\n// The difference between this and Print() is that it ensures that the\n// argument is a reference to an array.\ntemplate <typename T, size_t N>\nstring PrintArrayHelper(T (&a)[N]) {\n  return Print(a);\n}\n\n// One-dimensional array.\nTEST(PrintArrayTest, OneDimensionalArray) {\n  int a[5] = { 1, 2, 3, 4, 5 };\n  EXPECT_EQ(\"{ 1, 2, 3, 4, 5 }\", PrintArrayHelper(a));\n}\n\n// Two-dimensional array.\nTEST(PrintArrayTest, TwoDimensionalArray) {\n  int a[2][5] = {\n    { 1, 2, 3, 4, 5 },\n    { 6, 7, 8, 9, 0 }\n  };\n  EXPECT_EQ(\"{ { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 0 } }\", PrintArrayHelper(a));\n}\n\n// Array of const elements.\nTEST(PrintArrayTest, ConstArray) {\n  const bool a[1] = { false };\n  EXPECT_EQ(\"{ false }\", PrintArrayHelper(a));\n}\n\n// char array without terminating NUL.\nTEST(PrintArrayTest, CharArrayWithNoTerminatingNul) {\n  // Array a contains '\\0' in the middle and doesn't end with '\\0'.\n  char a[] = { 'H', '\\0', 'i' };\n  EXPECT_EQ(\"\\\"H\\\\0i\\\" (no terminating NUL)\", PrintArrayHelper(a));\n}\n\n// const char array with terminating NUL.\nTEST(PrintArrayTest, ConstCharArrayWithTerminatingNul) {\n  const char a[] = \"\\0Hi\";\n  EXPECT_EQ(\"\\\"\\\\0Hi\\\"\", PrintArrayHelper(a));\n}\n\n// const wchar_t array without terminating NUL.\nTEST(PrintArrayTest, WCharArrayWithNoTerminatingNul) {\n  // Array a contains '\\0' in the middle and doesn't end with '\\0'.\n  const wchar_t a[] = { L'H', L'\\0', L'i' };\n  EXPECT_EQ(\"L\\\"H\\\\0i\\\" (no terminating NUL)\", PrintArrayHelper(a));\n}\n\n// wchar_t array with terminating NUL.\nTEST(PrintArrayTest, WConstCharArrayWithTerminatingNul) {\n  const wchar_t a[] = L\"\\0Hi\";\n  EXPECT_EQ(\"L\\\"\\\\0Hi\\\"\", PrintArrayHelper(a));\n}\n\n// Array of objects.\nTEST(PrintArrayTest, ObjectArray) {\n  string a[3] = { \"Hi\", \"Hello\", \"Ni hao\" };\n  EXPECT_EQ(\"{ \\\"Hi\\\", \\\"Hello\\\", \\\"Ni hao\\\" }\", PrintArrayHelper(a));\n}\n\n// Array with many elements.\nTEST(PrintArrayTest, BigArray) {\n  int a[100] = { 1, 2, 3 };\n  EXPECT_EQ(\"{ 1, 2, 3, 0, 0, 0, 0, 0, ..., 0, 0, 0, 0, 0, 0, 0, 0 }\",\n            PrintArrayHelper(a));\n}\n\n// Tests printing ::string and ::std::string.\n\n#if GTEST_HAS_GLOBAL_STRING\n// ::string.\nTEST(PrintStringTest, StringInGlobalNamespace) {\n  const char s[] = \"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\x7F\\xFF a\";\n  const ::string str(s, sizeof(s));\n  EXPECT_EQ(\"\\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\\\\n\\\\0\\\\r\\\\t\\\\v\\\\x7F\\\\xFF a\\\\0\\\"\",\n            Print(str));\n}\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n// ::std::string.\nTEST(PrintStringTest, StringInStdNamespace) {\n  const char s[] = \"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\x7F\\xFF a\";\n  const ::std::string str(s, sizeof(s));\n  EXPECT_EQ(\"\\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\\\\n\\\\0\\\\r\\\\t\\\\v\\\\x7F\\\\xFF a\\\\0\\\"\",\n            Print(str));\n}\n\nTEST(PrintStringTest, StringAmbiguousHex) {\n  // \"\\x6BANANA\" is ambiguous, it can be interpreted as starting with either of:\n  // '\\x6', '\\x6B', or '\\x6BA'.\n\n  // a hex escaping sequence following by a decimal digit\n  EXPECT_EQ(\"\\\"0\\\\x12\\\" \\\"3\\\"\", Print(::std::string(\"0\\x12\" \"3\")));\n  // a hex escaping sequence following by a hex digit (lower-case)\n  EXPECT_EQ(\"\\\"mm\\\\x6\\\" \\\"bananas\\\"\", Print(::std::string(\"mm\\x6\" \"bananas\")));\n  // a hex escaping sequence following by a hex digit (upper-case)\n  EXPECT_EQ(\"\\\"NOM\\\\x6\\\" \\\"BANANA\\\"\", Print(::std::string(\"NOM\\x6\" \"BANANA\")));\n  // a hex escaping sequence following by a non-xdigit\n  EXPECT_EQ(\"\\\"!\\\\x5-!\\\"\", Print(::std::string(\"!\\x5-!\")));\n}\n\n// Tests printing ::wstring and ::std::wstring.\n\n#if GTEST_HAS_GLOBAL_WSTRING\n// ::wstring.\nTEST(PrintWideStringTest, StringInGlobalNamespace) {\n  const wchar_t s[] = L\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\xD3\\x576\\x8D3\\xC74D a\";\n  const ::wstring str(s, sizeof(s)/sizeof(wchar_t));\n  EXPECT_EQ(\"L\\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\\\\n\\\\0\\\\r\\\\t\\\\v\"\n            \"\\\\xD3\\\\x576\\\\x8D3\\\\xC74D a\\\\0\\\"\",\n            Print(str));\n}\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n#if GTEST_HAS_STD_WSTRING\n// ::std::wstring.\nTEST(PrintWideStringTest, StringInStdNamespace) {\n  const wchar_t s[] = L\"'\\\"?\\\\\\a\\b\\f\\n\\0\\r\\t\\v\\xD3\\x576\\x8D3\\xC74D a\";\n  const ::std::wstring str(s, sizeof(s)/sizeof(wchar_t));\n  EXPECT_EQ(\"L\\\"'\\\\\\\"?\\\\\\\\\\\\a\\\\b\\\\f\\\\n\\\\0\\\\r\\\\t\\\\v\"\n            \"\\\\xD3\\\\x576\\\\x8D3\\\\xC74D a\\\\0\\\"\",\n            Print(str));\n}\n\nTEST(PrintWideStringTest, StringAmbiguousHex) {\n  // same for wide strings.\n  EXPECT_EQ(\"L\\\"0\\\\x12\\\" L\\\"3\\\"\", Print(::std::wstring(L\"0\\x12\" L\"3\")));\n  EXPECT_EQ(\"L\\\"mm\\\\x6\\\" L\\\"bananas\\\"\",\n            Print(::std::wstring(L\"mm\\x6\" L\"bananas\")));\n  EXPECT_EQ(\"L\\\"NOM\\\\x6\\\" L\\\"BANANA\\\"\",\n            Print(::std::wstring(L\"NOM\\x6\" L\"BANANA\")));\n  EXPECT_EQ(\"L\\\"!\\\\x5-!\\\"\", Print(::std::wstring(L\"!\\x5-!\")));\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n// Tests printing types that support generic streaming (i.e. streaming\n// to std::basic_ostream<Char, CharTraits> for any valid Char and\n// CharTraits types).\n\n// Tests printing a non-template type that supports generic streaming.\n\nclass AllowsGenericStreaming {};\n\ntemplate <typename Char, typename CharTraits>\nstd::basic_ostream<Char, CharTraits>& operator<<(\n    std::basic_ostream<Char, CharTraits>& os,\n    const AllowsGenericStreaming& /* a */) {\n  return os << \"AllowsGenericStreaming\";\n}\n\nTEST(PrintTypeWithGenericStreamingTest, NonTemplateType) {\n  AllowsGenericStreaming a;\n  EXPECT_EQ(\"AllowsGenericStreaming\", Print(a));\n}\n\n// Tests printing a template type that supports generic streaming.\n\ntemplate <typename T>\nclass AllowsGenericStreamingTemplate {};\n\ntemplate <typename Char, typename CharTraits, typename T>\nstd::basic_ostream<Char, CharTraits>& operator<<(\n    std::basic_ostream<Char, CharTraits>& os,\n    const AllowsGenericStreamingTemplate<T>& /* a */) {\n  return os << \"AllowsGenericStreamingTemplate\";\n}\n\nTEST(PrintTypeWithGenericStreamingTest, TemplateType) {\n  AllowsGenericStreamingTemplate<int> a;\n  EXPECT_EQ(\"AllowsGenericStreamingTemplate\", Print(a));\n}\n\n// Tests printing a type that supports generic streaming and can be\n// implicitly converted to another printable type.\n\ntemplate <typename T>\nclass AllowsGenericStreamingAndImplicitConversionTemplate {\n public:\n  operator bool() const { return false; }\n};\n\ntemplate <typename Char, typename CharTraits, typename T>\nstd::basic_ostream<Char, CharTraits>& operator<<(\n    std::basic_ostream<Char, CharTraits>& os,\n    const AllowsGenericStreamingAndImplicitConversionTemplate<T>& /* a */) {\n  return os << \"AllowsGenericStreamingAndImplicitConversionTemplate\";\n}\n\nTEST(PrintTypeWithGenericStreamingTest, TypeImplicitlyConvertible) {\n  AllowsGenericStreamingAndImplicitConversionTemplate<int> a;\n  EXPECT_EQ(\"AllowsGenericStreamingAndImplicitConversionTemplate\", Print(a));\n}\n\n#if GTEST_HAS_STRING_PIECE_\n\n// Tests printing StringPiece.\n\nTEST(PrintStringPieceTest, SimpleStringPiece) {\n  const StringPiece sp = \"Hello\";\n  EXPECT_EQ(\"\\\"Hello\\\"\", Print(sp));\n}\n\nTEST(PrintStringPieceTest, UnprintableCharacters) {\n  const char str[] = \"NUL (\\0) and \\r\\t\";\n  const StringPiece sp(str, sizeof(str) - 1);\n  EXPECT_EQ(\"\\\"NUL (\\\\0) and \\\\r\\\\t\\\"\", Print(sp));\n}\n\n#endif  // GTEST_HAS_STRING_PIECE_\n\n// Tests printing STL containers.\n\nTEST(PrintStlContainerTest, EmptyDeque) {\n  deque<char> empty;\n  EXPECT_EQ(\"{}\", Print(empty));\n}\n\nTEST(PrintStlContainerTest, NonEmptyDeque) {\n  deque<int> non_empty;\n  non_empty.push_back(1);\n  non_empty.push_back(3);\n  EXPECT_EQ(\"{ 1, 3 }\", Print(non_empty));\n}\n\n#if GTEST_HAS_HASH_MAP_\n\nTEST(PrintStlContainerTest, OneElementHashMap) {\n  hash_map<int, char> map1;\n  map1[1] = 'a';\n  EXPECT_EQ(\"{ (1, 'a' (97, 0x61)) }\", Print(map1));\n}\n\nTEST(PrintStlContainerTest, HashMultiMap) {\n  hash_multimap<int, bool> map1;\n  map1.insert(make_pair(5, true));\n  map1.insert(make_pair(5, false));\n\n  // Elements of hash_multimap can be printed in any order.\n  const string result = Print(map1);\n  EXPECT_TRUE(result == \"{ (5, true), (5, false) }\" ||\n              result == \"{ (5, false), (5, true) }\")\n                  << \" where Print(map1) returns \\\"\" << result << \"\\\".\";\n}\n\n#endif  // GTEST_HAS_HASH_MAP_\n\n#if GTEST_HAS_HASH_SET_\n\nTEST(PrintStlContainerTest, HashSet) {\n  hash_set<string> set1;\n  set1.insert(\"hello\");\n  EXPECT_EQ(\"{ \\\"hello\\\" }\", Print(set1));\n}\n\nTEST(PrintStlContainerTest, HashMultiSet) {\n  const int kSize = 5;\n  int a[kSize] = { 1, 1, 2, 5, 1 };\n  hash_multiset<int> set1(a, a + kSize);\n\n  // Elements of hash_multiset can be printed in any order.\n  const string result = Print(set1);\n  const string expected_pattern = \"{ d, d, d, d, d }\";  // d means a digit.\n\n  // Verifies the result matches the expected pattern; also extracts\n  // the numbers in the result.\n  ASSERT_EQ(expected_pattern.length(), result.length());\n  std::vector<int> numbers;\n  for (size_t i = 0; i != result.length(); i++) {\n    if (expected_pattern[i] == 'd') {\n      ASSERT_NE(isdigit(static_cast<unsigned char>(result[i])), 0);\n      numbers.push_back(result[i] - '0');\n    } else {\n      EXPECT_EQ(expected_pattern[i], result[i]) << \" where result is \"\n                                                << result;\n    }\n  }\n\n  // Makes sure the result contains the right numbers.\n  std::sort(numbers.begin(), numbers.end());\n  std::sort(a, a + kSize);\n  EXPECT_TRUE(std::equal(a, a + kSize, numbers.begin()));\n}\n\n#endif  // GTEST_HAS_HASH_SET_\n\nTEST(PrintStlContainerTest, List) {\n  const string a[] = {\n    \"hello\",\n    \"world\"\n  };\n  const list<string> strings(a, a + 2);\n  EXPECT_EQ(\"{ \\\"hello\\\", \\\"world\\\" }\", Print(strings));\n}\n\nTEST(PrintStlContainerTest, Map) {\n  map<int, bool> map1;\n  map1[1] = true;\n  map1[5] = false;\n  map1[3] = true;\n  EXPECT_EQ(\"{ (1, true), (3, true), (5, false) }\", Print(map1));\n}\n\nTEST(PrintStlContainerTest, MultiMap) {\n  multimap<bool, int> map1;\n  // The make_pair template function would deduce the type as\n  // pair<bool, int> here, and since the key part in a multimap has to\n  // be constant, without a templated ctor in the pair class (as in\n  // libCstd on Solaris), make_pair call would fail to compile as no\n  // implicit conversion is found.  Thus explicit typename is used\n  // here instead.\n  map1.insert(pair<const bool, int>(true, 0));\n  map1.insert(pair<const bool, int>(true, 1));\n  map1.insert(pair<const bool, int>(false, 2));\n  EXPECT_EQ(\"{ (false, 2), (true, 0), (true, 1) }\", Print(map1));\n}\n\nTEST(PrintStlContainerTest, Set) {\n  const unsigned int a[] = { 3, 0, 5 };\n  set<unsigned int> set1(a, a + 3);\n  EXPECT_EQ(\"{ 0, 3, 5 }\", Print(set1));\n}\n\nTEST(PrintStlContainerTest, MultiSet) {\n  const int a[] = { 1, 1, 2, 5, 1 };\n  multiset<int> set1(a, a + 5);\n  EXPECT_EQ(\"{ 1, 1, 1, 2, 5 }\", Print(set1));\n}\n\nTEST(PrintStlContainerTest, Pair) {\n  pair<const bool, int> p(true, 5);\n  EXPECT_EQ(\"(true, 5)\", Print(p));\n}\n\nTEST(PrintStlContainerTest, Vector) {\n  vector<int> v;\n  v.push_back(1);\n  v.push_back(2);\n  EXPECT_EQ(\"{ 1, 2 }\", Print(v));\n}\n\nTEST(PrintStlContainerTest, LongSequence) {\n  const int a[100] = { 1, 2, 3 };\n  const vector<int> v(a, a + 100);\n  EXPECT_EQ(\"{ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"\n            \"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... }\", Print(v));\n}\n\nTEST(PrintStlContainerTest, NestedContainer) {\n  const int a1[] = { 1, 2 };\n  const int a2[] = { 3, 4, 5 };\n  const list<int> l1(a1, a1 + 2);\n  const list<int> l2(a2, a2 + 3);\n\n  vector<list<int> > v;\n  v.push_back(l1);\n  v.push_back(l2);\n  EXPECT_EQ(\"{ { 1, 2 }, { 3, 4, 5 } }\", Print(v));\n}\n\nTEST(PrintStlContainerTest, OneDimensionalNativeArray) {\n  const int a[3] = { 1, 2, 3 };\n  NativeArray<int> b(a, 3, kReference);\n  EXPECT_EQ(\"{ 1, 2, 3 }\", Print(b));\n}\n\nTEST(PrintStlContainerTest, TwoDimensionalNativeArray) {\n  const int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };\n  NativeArray<int[3]> b(a, 2, kReference);\n  EXPECT_EQ(\"{ { 1, 2, 3 }, { 4, 5, 6 } }\", Print(b));\n}\n\n// Tests that a class named iterator isn't treated as a container.\n\nstruct iterator {\n  char x;\n};\n\nTEST(PrintStlContainerTest, Iterator) {\n  iterator it = {};\n  EXPECT_EQ(\"1-byte object <00>\", Print(it));\n}\n\n// Tests that a class named const_iterator isn't treated as a container.\n\nstruct const_iterator {\n  char x;\n};\n\nTEST(PrintStlContainerTest, ConstIterator) {\n  const_iterator it = {};\n  EXPECT_EQ(\"1-byte object <00>\", Print(it));\n}\n\n#if GTEST_HAS_TR1_TUPLE\n// Tests printing tuples.\n\n// Tuples of various arities.\nTEST(PrintTupleTest, VariousSizes) {\n  tuple<> t0;\n  EXPECT_EQ(\"()\", Print(t0));\n\n  tuple<int> t1(5);\n  EXPECT_EQ(\"(5)\", Print(t1));\n\n  tuple<char, bool> t2('a', true);\n  EXPECT_EQ(\"('a' (97, 0x61), true)\", Print(t2));\n\n  tuple<bool, int, int> t3(false, 2, 3);\n  EXPECT_EQ(\"(false, 2, 3)\", Print(t3));\n\n  tuple<bool, int, int, int> t4(false, 2, 3, 4);\n  EXPECT_EQ(\"(false, 2, 3, 4)\", Print(t4));\n\n  tuple<bool, int, int, int, bool> t5(false, 2, 3, 4, true);\n  EXPECT_EQ(\"(false, 2, 3, 4, true)\", Print(t5));\n\n  tuple<bool, int, int, int, bool, int> t6(false, 2, 3, 4, true, 6);\n  EXPECT_EQ(\"(false, 2, 3, 4, true, 6)\", Print(t6));\n\n  tuple<bool, int, int, int, bool, int, int> t7(false, 2, 3, 4, true, 6, 7);\n  EXPECT_EQ(\"(false, 2, 3, 4, true, 6, 7)\", Print(t7));\n\n  tuple<bool, int, int, int, bool, int, int, bool> t8(\n      false, 2, 3, 4, true, 6, 7, true);\n  EXPECT_EQ(\"(false, 2, 3, 4, true, 6, 7, true)\", Print(t8));\n\n  tuple<bool, int, int, int, bool, int, int, bool, int> t9(\n      false, 2, 3, 4, true, 6, 7, true, 9);\n  EXPECT_EQ(\"(false, 2, 3, 4, true, 6, 7, true, 9)\", Print(t9));\n\n  const char* const str = \"8\";\n  // VC++ 2010's implementation of tuple of C++0x is deficient, requiring\n  // an explicit type cast of NULL to be used.\n  tuple<bool, char, short, testing::internal::Int32,  // NOLINT\n      testing::internal::Int64, float, double, const char*, void*, string>\n      t10(false, 'a', 3, 4, 5, 1.5F, -2.5, str,\n          ImplicitCast_<void*>(NULL), \"10\");\n  EXPECT_EQ(\"(false, 'a' (97, 0x61), 3, 4, 5, 1.5, -2.5, \" + PrintPointer(str) +\n            \" pointing to \\\"8\\\", NULL, \\\"10\\\")\",\n            Print(t10));\n}\n\n// Nested tuples.\nTEST(PrintTupleTest, NestedTuple) {\n  tuple<tuple<int, bool>, char> nested(make_tuple(5, true), 'a');\n  EXPECT_EQ(\"((5, true), 'a' (97, 0x61))\", Print(nested));\n}\n\n#endif  // GTEST_HAS_TR1_TUPLE\n\n// Tests printing user-defined unprintable types.\n\n// Unprintable types in the global namespace.\nTEST(PrintUnprintableTypeTest, InGlobalNamespace) {\n  EXPECT_EQ(\"1-byte object <00>\",\n            Print(UnprintableTemplateInGlobal<char>()));\n}\n\n// Unprintable types in a user namespace.\nTEST(PrintUnprintableTypeTest, InUserNamespace) {\n  EXPECT_EQ(\"16-byte object <EF-12 00-00 34-AB 00-00 00-00 00-00 00-00 00-00>\",\n            Print(::foo::UnprintableInFoo()));\n}\n\n// Unprintable types are that too big to be printed completely.\n\nstruct Big {\n  Big() { memset(array, 0, sizeof(array)); }\n  char array[257];\n};\n\nTEST(PrintUnpritableTypeTest, BigObject) {\n  EXPECT_EQ(\"257-byte object <00-00 00-00 00-00 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 ... 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 \"\n            \"00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00>\",\n            Print(Big()));\n}\n\n// Tests printing user-defined streamable types.\n\n// Streamable types in the global namespace.\nTEST(PrintStreamableTypeTest, InGlobalNamespace) {\n  StreamableInGlobal x;\n  EXPECT_EQ(\"StreamableInGlobal\", Print(x));\n  EXPECT_EQ(\"StreamableInGlobal*\", Print(&x));\n}\n\n// Printable template types in a user namespace.\nTEST(PrintStreamableTypeTest, TemplateTypeInUserNamespace) {\n  EXPECT_EQ(\"StreamableTemplateInFoo: 0\",\n            Print(::foo::StreamableTemplateInFoo<int>()));\n}\n\n// Tests printing user-defined types that have a PrintTo() function.\nTEST(PrintPrintableTypeTest, InUserNamespace) {\n  EXPECT_EQ(\"PrintableViaPrintTo: 0\",\n            Print(::foo::PrintableViaPrintTo()));\n}\n\n// Tests printing a pointer to a user-defined type that has a <<\n// operator for its pointer.\nTEST(PrintPrintableTypeTest, PointerInUserNamespace) {\n  ::foo::PointerPrintable x;\n  EXPECT_EQ(\"PointerPrintable*\", Print(&x));\n}\n\n// Tests printing user-defined class template that have a PrintTo() function.\nTEST(PrintPrintableTypeTest, TemplateInUserNamespace) {\n  EXPECT_EQ(\"PrintableViaPrintToTemplate: 5\",\n            Print(::foo::PrintableViaPrintToTemplate<int>(5)));\n}\n\n#if GTEST_HAS_PROTOBUF_\n\n// Tests printing a protocol message.\nTEST(PrintProtocolMessageTest, PrintsShortDebugString) {\n  testing::internal::TestMessage msg;\n  msg.set_member(\"yes\");\n  EXPECT_EQ(\"<member:\\\"yes\\\">\", Print(msg));\n}\n\n// Tests printing a short proto2 message.\nTEST(PrintProto2MessageTest, PrintsShortDebugStringWhenItIsShort) {\n  testing::internal::FooMessage msg;\n  msg.set_int_field(2);\n  msg.set_string_field(\"hello\");\n  EXPECT_PRED2(RE::FullMatch, Print(msg),\n               \"<int_field:\\\\s*2\\\\s+string_field:\\\\s*\\\"hello\\\">\");\n}\n\n// Tests printing a long proto2 message.\nTEST(PrintProto2MessageTest, PrintsDebugStringWhenItIsLong) {\n  testing::internal::FooMessage msg;\n  msg.set_int_field(2);\n  msg.set_string_field(\"hello\");\n  msg.add_names(\"peter\");\n  msg.add_names(\"paul\");\n  msg.add_names(\"mary\");\n  EXPECT_PRED2(RE::FullMatch, Print(msg),\n               \"<\\n\"\n               \"int_field:\\\\s*2\\n\"\n               \"string_field:\\\\s*\\\"hello\\\"\\n\"\n               \"names:\\\\s*\\\"peter\\\"\\n\"\n               \"names:\\\\s*\\\"paul\\\"\\n\"\n               \"names:\\\\s*\\\"mary\\\"\\n\"\n               \">\");\n}\n\n#endif  // GTEST_HAS_PROTOBUF_\n\n// Tests that the universal printer prints both the address and the\n// value of a reference.\nTEST(PrintReferenceTest, PrintsAddressAndValue) {\n  int n = 5;\n  EXPECT_EQ(\"@\" + PrintPointer(&n) + \" 5\", PrintByRef(n));\n\n  int a[2][3] = {\n    { 0, 1, 2 },\n    { 3, 4, 5 }\n  };\n  EXPECT_EQ(\"@\" + PrintPointer(a) + \" { { 0, 1, 2 }, { 3, 4, 5 } }\",\n            PrintByRef(a));\n\n  const ::foo::UnprintableInFoo x;\n  EXPECT_EQ(\"@\" + PrintPointer(&x) + \" 16-byte object \"\n            \"<EF-12 00-00 34-AB 00-00 00-00 00-00 00-00 00-00>\",\n            PrintByRef(x));\n}\n\n// Tests that the universal printer prints a function pointer passed by\n// reference.\nTEST(PrintReferenceTest, HandlesFunctionPointer) {\n  void (*fp)(int n) = &MyFunction;\n  const string fp_pointer_string =\n      PrintPointer(reinterpret_cast<const void*>(&fp));\n  // We cannot directly cast &MyFunction to const void* because the\n  // standard disallows casting between pointers to functions and\n  // pointers to objects, and some compilers (e.g. GCC 3.4) enforce\n  // this limitation.\n  const string fp_string = PrintPointer(reinterpret_cast<const void*>(\n      reinterpret_cast<internal::BiggestInt>(fp)));\n  EXPECT_EQ(\"@\" + fp_pointer_string + \" \" + fp_string,\n            PrintByRef(fp));\n}\n\n// Tests that the universal printer prints a member function pointer\n// passed by reference.\nTEST(PrintReferenceTest, HandlesMemberFunctionPointer) {\n  int (Foo::*p)(char ch) = &Foo::MyMethod;\n  EXPECT_TRUE(HasPrefix(\n      PrintByRef(p),\n      \"@\" + PrintPointer(reinterpret_cast<const void*>(&p)) + \" \" +\n          Print(sizeof(p)) + \"-byte object \"));\n\n  char (Foo::*p2)(int n) = &Foo::MyVirtualMethod;\n  EXPECT_TRUE(HasPrefix(\n      PrintByRef(p2),\n      \"@\" + PrintPointer(reinterpret_cast<const void*>(&p2)) + \" \" +\n          Print(sizeof(p2)) + \"-byte object \"));\n}\n\n// Tests that the universal printer prints a member variable pointer\n// passed by reference.\nTEST(PrintReferenceTest, HandlesMemberVariablePointer) {\n  int (Foo::*p) = &Foo::value;  // NOLINT\n  EXPECT_TRUE(HasPrefix(\n      PrintByRef(p),\n      \"@\" + PrintPointer(&p) + \" \" + Print(sizeof(p)) + \"-byte object \"));\n}\n\n// Tests that FormatForComparisonFailureMessage(), which is used to print\n// an operand in a comparison assertion (e.g. ASSERT_EQ) when the assertion\n// fails, formats the operand in the desired way.\n\n// scalar\nTEST(FormatForComparisonFailureMessageTest, WorksForScalar) {\n  EXPECT_STREQ(\"123\",\n               FormatForComparisonFailureMessage(123, 124).c_str());\n}\n\n// non-char pointer\nTEST(FormatForComparisonFailureMessageTest, WorksForNonCharPointer) {\n  int n = 0;\n  EXPECT_EQ(PrintPointer(&n),\n            FormatForComparisonFailureMessage(&n, &n).c_str());\n}\n\n// non-char array\nTEST(FormatForComparisonFailureMessageTest, FormatsNonCharArrayAsPointer) {\n  // In expression 'array == x', 'array' is compared by pointer.\n  // Therefore we want to print an array operand as a pointer.\n  int n[] = { 1, 2, 3 };\n  EXPECT_EQ(PrintPointer(n),\n            FormatForComparisonFailureMessage(n, n).c_str());\n}\n\n// Tests formatting a char pointer when it's compared with another pointer.\n// In this case we want to print it as a raw pointer, as the comparision is by\n// pointer.\n\n// char pointer vs pointer\nTEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsPointer) {\n  // In expression 'p == x', where 'p' and 'x' are (const or not) char\n  // pointers, the operands are compared by pointer.  Therefore we\n  // want to print 'p' as a pointer instead of a C string (we don't\n  // even know if it's supposed to point to a valid C string).\n\n  // const char*\n  const char* s = \"hello\";\n  EXPECT_EQ(PrintPointer(s),\n            FormatForComparisonFailureMessage(s, s).c_str());\n\n  // char*\n  char ch = 'a';\n  EXPECT_EQ(PrintPointer(&ch),\n            FormatForComparisonFailureMessage(&ch, &ch).c_str());\n}\n\n// wchar_t pointer vs pointer\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsPointer) {\n  // In expression 'p == x', where 'p' and 'x' are (const or not) char\n  // pointers, the operands are compared by pointer.  Therefore we\n  // want to print 'p' as a pointer instead of a wide C string (we don't\n  // even know if it's supposed to point to a valid wide C string).\n\n  // const wchar_t*\n  const wchar_t* s = L\"hello\";\n  EXPECT_EQ(PrintPointer(s),\n            FormatForComparisonFailureMessage(s, s).c_str());\n\n  // wchar_t*\n  wchar_t ch = L'a';\n  EXPECT_EQ(PrintPointer(&ch),\n            FormatForComparisonFailureMessage(&ch, &ch).c_str());\n}\n\n// Tests formatting a char pointer when it's compared to a string object.\n// In this case we want to print the char pointer as a C string.\n\n#if GTEST_HAS_GLOBAL_STRING\n// char pointer vs ::string\nTEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsString) {\n  const char* s = \"hello \\\"world\";\n  EXPECT_STREQ(\"\\\"hello \\\\\\\"world\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(s, ::string()).c_str());\n\n  // char*\n  char str[] = \"hi\\1\";\n  char* p = str;\n  EXPECT_STREQ(\"\\\"hi\\\\x1\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(p, ::string()).c_str());\n}\n#endif\n\n// char pointer vs std::string\nTEST(FormatForComparisonFailureMessageTest, WorksForCharPointerVsStdString) {\n  const char* s = \"hello \\\"world\";\n  EXPECT_STREQ(\"\\\"hello \\\\\\\"world\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(s, ::std::string()).c_str());\n\n  // char*\n  char str[] = \"hi\\1\";\n  char* p = str;\n  EXPECT_STREQ(\"\\\"hi\\\\x1\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(p, ::std::string()).c_str());\n}\n\n#if GTEST_HAS_GLOBAL_WSTRING\n// wchar_t pointer vs ::wstring\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsWString) {\n  const wchar_t* s = L\"hi \\\"world\";\n  EXPECT_STREQ(\"L\\\"hi \\\\\\\"world\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(s, ::wstring()).c_str());\n\n  // wchar_t*\n  wchar_t str[] = L\"hi\\1\";\n  wchar_t* p = str;\n  EXPECT_STREQ(\"L\\\"hi\\\\x1\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(p, ::wstring()).c_str());\n}\n#endif\n\n#if GTEST_HAS_STD_WSTRING\n// wchar_t pointer vs std::wstring\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharPointerVsStdWString) {\n  const wchar_t* s = L\"hi \\\"world\";\n  EXPECT_STREQ(\"L\\\"hi \\\\\\\"world\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(s, ::std::wstring()).c_str());\n\n  // wchar_t*\n  wchar_t str[] = L\"hi\\1\";\n  wchar_t* p = str;\n  EXPECT_STREQ(\"L\\\"hi\\\\x1\\\"\",  // The string content should be escaped.\n               FormatForComparisonFailureMessage(p, ::std::wstring()).c_str());\n}\n#endif\n\n// Tests formatting a char array when it's compared with a pointer or array.\n// In this case we want to print the array as a row pointer, as the comparison\n// is by pointer.\n\n// char array vs pointer\nTEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsPointer) {\n  char str[] = \"hi \\\"world\\\"\";\n  char* p = NULL;\n  EXPECT_EQ(PrintPointer(str),\n            FormatForComparisonFailureMessage(str, p).c_str());\n}\n\n// char array vs char array\nTEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsCharArray) {\n  const char str[] = \"hi \\\"world\\\"\";\n  EXPECT_EQ(PrintPointer(str),\n            FormatForComparisonFailureMessage(str, str).c_str());\n}\n\n// wchar_t array vs pointer\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsPointer) {\n  wchar_t str[] = L\"hi \\\"world\\\"\";\n  wchar_t* p = NULL;\n  EXPECT_EQ(PrintPointer(str),\n            FormatForComparisonFailureMessage(str, p).c_str());\n}\n\n// wchar_t array vs wchar_t array\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsWCharArray) {\n  const wchar_t str[] = L\"hi \\\"world\\\"\";\n  EXPECT_EQ(PrintPointer(str),\n            FormatForComparisonFailureMessage(str, str).c_str());\n}\n\n// Tests formatting a char array when it's compared with a string object.\n// In this case we want to print the array as a C string.\n\n#if GTEST_HAS_GLOBAL_STRING\n// char array vs string\nTEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsString) {\n  const char str[] = \"hi \\\"w\\0rld\\\"\";\n  EXPECT_STREQ(\"\\\"hi \\\\\\\"w\\\"\",  // The content should be escaped.\n                                // Embedded NUL terminates the string.\n               FormatForComparisonFailureMessage(str, ::string()).c_str());\n}\n#endif\n\n// char array vs std::string\nTEST(FormatForComparisonFailureMessageTest, WorksForCharArrayVsStdString) {\n  const char str[] = \"hi \\\"world\\\"\";\n  EXPECT_STREQ(\"\\\"hi \\\\\\\"world\\\\\\\"\\\"\",  // The content should be escaped.\n               FormatForComparisonFailureMessage(str, ::std::string()).c_str());\n}\n\n#if GTEST_HAS_GLOBAL_WSTRING\n// wchar_t array vs wstring\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsWString) {\n  const wchar_t str[] = L\"hi \\\"world\\\"\";\n  EXPECT_STREQ(\"L\\\"hi \\\\\\\"world\\\\\\\"\\\"\",  // The content should be escaped.\n               FormatForComparisonFailureMessage(str, ::wstring()).c_str());\n}\n#endif\n\n#if GTEST_HAS_STD_WSTRING\n// wchar_t array vs std::wstring\nTEST(FormatForComparisonFailureMessageTest, WorksForWCharArrayVsStdWString) {\n  const wchar_t str[] = L\"hi \\\"w\\0rld\\\"\";\n  EXPECT_STREQ(\n      \"L\\\"hi \\\\\\\"w\\\"\",  // The content should be escaped.\n                        // Embedded NUL terminates the string.\n      FormatForComparisonFailureMessage(str, ::std::wstring()).c_str());\n}\n#endif\n\n// Useful for testing PrintToString().  We cannot use EXPECT_EQ()\n// there as its implementation uses PrintToString().  The caller must\n// ensure that 'value' has no side effect.\n#define EXPECT_PRINT_TO_STRING_(value, expected_string)         \\\n  EXPECT_TRUE(PrintToString(value) == (expected_string))        \\\n      << \" where \" #value \" prints as \" << (PrintToString(value))\n\nTEST(PrintToStringTest, WorksForScalar) {\n  EXPECT_PRINT_TO_STRING_(123, \"123\");\n}\n\nTEST(PrintToStringTest, WorksForPointerToConstChar) {\n  const char* p = \"hello\";\n  EXPECT_PRINT_TO_STRING_(p, \"\\\"hello\\\"\");\n}\n\nTEST(PrintToStringTest, WorksForPointerToNonConstChar) {\n  char s[] = \"hello\";\n  char* p = s;\n  EXPECT_PRINT_TO_STRING_(p, \"\\\"hello\\\"\");\n}\n\nTEST(PrintToStringTest, EscapesForPointerToConstChar) {\n  const char* p = \"hello\\n\";\n  EXPECT_PRINT_TO_STRING_(p, \"\\\"hello\\\\n\\\"\");\n}\n\nTEST(PrintToStringTest, EscapesForPointerToNonConstChar) {\n  char s[] = \"hello\\1\";\n  char* p = s;\n  EXPECT_PRINT_TO_STRING_(p, \"\\\"hello\\\\x1\\\"\");\n}\n\nTEST(PrintToStringTest, WorksForArray) {\n  int n[3] = { 1, 2, 3 };\n  EXPECT_PRINT_TO_STRING_(n, \"{ 1, 2, 3 }\");\n}\n\nTEST(PrintToStringTest, WorksForCharArray) {\n  char s[] = \"hello\";\n  EXPECT_PRINT_TO_STRING_(s, \"\\\"hello\\\"\");\n}\n\nTEST(PrintToStringTest, WorksForCharArrayWithEmbeddedNul) {\n  const char str_with_nul[] = \"hello\\0 world\";\n  EXPECT_PRINT_TO_STRING_(str_with_nul, \"\\\"hello\\\\0 world\\\"\");\n\n  char mutable_str_with_nul[] = \"hello\\0 world\";\n  EXPECT_PRINT_TO_STRING_(mutable_str_with_nul, \"\\\"hello\\\\0 world\\\"\");\n}\n\n#undef EXPECT_PRINT_TO_STRING_\n\nTEST(UniversalTersePrintTest, WorksForNonReference) {\n  ::std::stringstream ss;\n  UniversalTersePrint(123, &ss);\n  EXPECT_EQ(\"123\", ss.str());\n}\n\nTEST(UniversalTersePrintTest, WorksForReference) {\n  const int& n = 123;\n  ::std::stringstream ss;\n  UniversalTersePrint(n, &ss);\n  EXPECT_EQ(\"123\", ss.str());\n}\n\nTEST(UniversalTersePrintTest, WorksForCString) {\n  const char* s1 = \"abc\";\n  ::std::stringstream ss1;\n  UniversalTersePrint(s1, &ss1);\n  EXPECT_EQ(\"\\\"abc\\\"\", ss1.str());\n\n  char* s2 = const_cast<char*>(s1);\n  ::std::stringstream ss2;\n  UniversalTersePrint(s2, &ss2);\n  EXPECT_EQ(\"\\\"abc\\\"\", ss2.str());\n\n  const char* s3 = NULL;\n  ::std::stringstream ss3;\n  UniversalTersePrint(s3, &ss3);\n  EXPECT_EQ(\"NULL\", ss3.str());\n}\n\nTEST(UniversalPrintTest, WorksForNonReference) {\n  ::std::stringstream ss;\n  UniversalPrint(123, &ss);\n  EXPECT_EQ(\"123\", ss.str());\n}\n\nTEST(UniversalPrintTest, WorksForReference) {\n  const int& n = 123;\n  ::std::stringstream ss;\n  UniversalPrint(n, &ss);\n  EXPECT_EQ(\"123\", ss.str());\n}\n\nTEST(UniversalPrintTest, WorksForCString) {\n  const char* s1 = \"abc\";\n  ::std::stringstream ss1;\n  UniversalPrint(s1, &ss1);\n  EXPECT_EQ(PrintPointer(s1) + \" pointing to \\\"abc\\\"\", string(ss1.str()));\n\n  char* s2 = const_cast<char*>(s1);\n  ::std::stringstream ss2;\n  UniversalPrint(s2, &ss2);\n  EXPECT_EQ(PrintPointer(s2) + \" pointing to \\\"abc\\\"\", string(ss2.str()));\n\n  const char* s3 = NULL;\n  ::std::stringstream ss3;\n  UniversalPrint(s3, &ss3);\n  EXPECT_EQ(\"NULL\", ss3.str());\n}\n\nTEST(UniversalPrintTest, WorksForCharArray) {\n  const char str[] = \"\\\"Line\\0 1\\\"\\nLine 2\";\n  ::std::stringstream ss1;\n  UniversalPrint(str, &ss1);\n  EXPECT_EQ(\"\\\"\\\\\\\"Line\\\\0 1\\\\\\\"\\\\nLine 2\\\"\", ss1.str());\n\n  const char mutable_str[] = \"\\\"Line\\0 1\\\"\\nLine 2\";\n  ::std::stringstream ss2;\n  UniversalPrint(mutable_str, &ss2);\n  EXPECT_EQ(\"\\\"\\\\\\\"Line\\\\0 1\\\\\\\"\\\\nLine 2\\\"\", ss2.str());\n}\n\n#if GTEST_HAS_TR1_TUPLE\n\nTEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsEmptyTuple) {\n  Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple());\n  EXPECT_EQ(0u, result.size());\n}\n\nTEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsOneTuple) {\n  Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple(1));\n  ASSERT_EQ(1u, result.size());\n  EXPECT_EQ(\"1\", result[0]);\n}\n\nTEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsTwoTuple) {\n  Strings result = UniversalTersePrintTupleFieldsToStrings(make_tuple(1, 'a'));\n  ASSERT_EQ(2u, result.size());\n  EXPECT_EQ(\"1\", result[0]);\n  EXPECT_EQ(\"'a' (97, 0x61)\", result[1]);\n}\n\nTEST(UniversalTersePrintTupleFieldsToStringsTest, PrintsTersely) {\n  const int n = 1;\n  Strings result = UniversalTersePrintTupleFieldsToStrings(\n      tuple<const int&, const char*>(n, \"a\"));\n  ASSERT_EQ(2u, result.size());\n  EXPECT_EQ(\"1\", result[0]);\n  EXPECT_EQ(\"\\\"a\\\"\", result[1]);\n}\n\n#endif  // GTEST_HAS_TR1_TUPLE\n\n}  // namespace gtest_printers_test\n}  // namespace testing\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-test-part_test.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: mheule@google.com (Markus Heule)\n//\n\n#include \"gtest/gtest-test-part.h\"\n\n#include \"gtest/gtest.h\"\n\nusing testing::Message;\nusing testing::Test;\nusing testing::TestPartResult;\nusing testing::TestPartResultArray;\n\nnamespace {\n\n// Tests the TestPartResult class.\n\n// The test fixture for testing TestPartResult.\nclass TestPartResultTest : public Test {\n protected:\n  TestPartResultTest()\n      : r1_(TestPartResult::kSuccess, \"foo/bar.cc\", 10, \"Success!\"),\n        r2_(TestPartResult::kNonFatalFailure, \"foo/bar.cc\", -1, \"Failure!\"),\n        r3_(TestPartResult::kFatalFailure, NULL, -1, \"Failure!\") {}\n\n  TestPartResult r1_, r2_, r3_;\n};\n\n\nTEST_F(TestPartResultTest, ConstructorWorks) {\n  Message message;\n  message << \"something is terribly wrong\";\n  message << static_cast<const char*>(testing::internal::kStackTraceMarker);\n  message << \"some unimportant stack trace\";\n\n  const TestPartResult result(TestPartResult::kNonFatalFailure,\n                              \"some_file.cc\",\n                              42,\n                              message.GetString().c_str());\n\n  EXPECT_EQ(TestPartResult::kNonFatalFailure, result.type());\n  EXPECT_STREQ(\"some_file.cc\", result.file_name());\n  EXPECT_EQ(42, result.line_number());\n  EXPECT_STREQ(message.GetString().c_str(), result.message());\n  EXPECT_STREQ(\"something is terribly wrong\", result.summary());\n}\n\nTEST_F(TestPartResultTest, ResultAccessorsWork) {\n  const TestPartResult success(TestPartResult::kSuccess,\n                               \"file.cc\",\n                               42,\n                               \"message\");\n  EXPECT_TRUE(success.passed());\n  EXPECT_FALSE(success.failed());\n  EXPECT_FALSE(success.nonfatally_failed());\n  EXPECT_FALSE(success.fatally_failed());\n\n  const TestPartResult nonfatal_failure(TestPartResult::kNonFatalFailure,\n                                        \"file.cc\",\n                                        42,\n                                        \"message\");\n  EXPECT_FALSE(nonfatal_failure.passed());\n  EXPECT_TRUE(nonfatal_failure.failed());\n  EXPECT_TRUE(nonfatal_failure.nonfatally_failed());\n  EXPECT_FALSE(nonfatal_failure.fatally_failed());\n\n  const TestPartResult fatal_failure(TestPartResult::kFatalFailure,\n                                     \"file.cc\",\n                                     42,\n                                     \"message\");\n  EXPECT_FALSE(fatal_failure.passed());\n  EXPECT_TRUE(fatal_failure.failed());\n  EXPECT_FALSE(fatal_failure.nonfatally_failed());\n  EXPECT_TRUE(fatal_failure.fatally_failed());\n}\n\n// Tests TestPartResult::type().\nTEST_F(TestPartResultTest, type) {\n  EXPECT_EQ(TestPartResult::kSuccess, r1_.type());\n  EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type());\n  EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type());\n}\n\n// Tests TestPartResult::file_name().\nTEST_F(TestPartResultTest, file_name) {\n  EXPECT_STREQ(\"foo/bar.cc\", r1_.file_name());\n  EXPECT_STREQ(NULL, r3_.file_name());\n}\n\n// Tests TestPartResult::line_number().\nTEST_F(TestPartResultTest, line_number) {\n  EXPECT_EQ(10, r1_.line_number());\n  EXPECT_EQ(-1, r2_.line_number());\n}\n\n// Tests TestPartResult::message().\nTEST_F(TestPartResultTest, message) {\n  EXPECT_STREQ(\"Success!\", r1_.message());\n}\n\n// Tests TestPartResult::passed().\nTEST_F(TestPartResultTest, Passed) {\n  EXPECT_TRUE(r1_.passed());\n  EXPECT_FALSE(r2_.passed());\n  EXPECT_FALSE(r3_.passed());\n}\n\n// Tests TestPartResult::failed().\nTEST_F(TestPartResultTest, Failed) {\n  EXPECT_FALSE(r1_.failed());\n  EXPECT_TRUE(r2_.failed());\n  EXPECT_TRUE(r3_.failed());\n}\n\n// Tests TestPartResult::fatally_failed().\nTEST_F(TestPartResultTest, FatallyFailed) {\n  EXPECT_FALSE(r1_.fatally_failed());\n  EXPECT_FALSE(r2_.fatally_failed());\n  EXPECT_TRUE(r3_.fatally_failed());\n}\n\n// Tests TestPartResult::nonfatally_failed().\nTEST_F(TestPartResultTest, NonfatallyFailed) {\n  EXPECT_FALSE(r1_.nonfatally_failed());\n  EXPECT_TRUE(r2_.nonfatally_failed());\n  EXPECT_FALSE(r3_.nonfatally_failed());\n}\n\n// Tests the TestPartResultArray class.\n\nclass TestPartResultArrayTest : public Test {\n protected:\n  TestPartResultArrayTest()\n      : r1_(TestPartResult::kNonFatalFailure, \"foo/bar.cc\", -1, \"Failure 1\"),\n        r2_(TestPartResult::kFatalFailure, \"foo/bar.cc\", -1, \"Failure 2\") {}\n\n  const TestPartResult r1_, r2_;\n};\n\n// Tests that TestPartResultArray initially has size 0.\nTEST_F(TestPartResultArrayTest, InitialSizeIsZero) {\n  TestPartResultArray results;\n  EXPECT_EQ(0, results.size());\n}\n\n// Tests that TestPartResultArray contains the given TestPartResult\n// after one Append() operation.\nTEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) {\n  TestPartResultArray results;\n  results.Append(r1_);\n  EXPECT_EQ(1, results.size());\n  EXPECT_STREQ(\"Failure 1\", results.GetTestPartResult(0).message());\n}\n\n// Tests that TestPartResultArray contains the given TestPartResults\n// after two Append() operations.\nTEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) {\n  TestPartResultArray results;\n  results.Append(r1_);\n  results.Append(r2_);\n  EXPECT_EQ(2, results.size());\n  EXPECT_STREQ(\"Failure 1\", results.GetTestPartResult(0).message());\n  EXPECT_STREQ(\"Failure 2\", results.GetTestPartResult(1).message());\n}\n\ntypedef TestPartResultArrayTest TestPartResultArrayDeathTest;\n\n// Tests that the program dies when GetTestPartResult() is called with\n// an invalid index.\nTEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) {\n  TestPartResultArray results;\n  results.Append(r1_);\n\n  EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), \"\");\n  EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), \"\");\n}\n\n// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper.\n\n}  // namespace\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-tuple_test.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/internal/gtest-tuple.h\"\n#include <utility>\n#include \"gtest/gtest.h\"\n\nnamespace {\n\nusing ::std::tr1::get;\nusing ::std::tr1::make_tuple;\nusing ::std::tr1::tuple;\nusing ::std::tr1::tuple_element;\nusing ::std::tr1::tuple_size;\nusing ::testing::StaticAssertTypeEq;\n\n// Tests that tuple_element<K, tuple<T0, T1, ..., TN> >::type returns TK.\nTEST(tuple_element_Test, ReturnsElementType) {\n  StaticAssertTypeEq<int, tuple_element<0, tuple<int, char> >::type>();\n  StaticAssertTypeEq<int&, tuple_element<1, tuple<double, int&> >::type>();\n  StaticAssertTypeEq<bool, tuple_element<2, tuple<double, int, bool> >::type>();\n}\n\n// Tests that tuple_size<T>::value gives the number of fields in tuple\n// type T.\nTEST(tuple_size_Test, ReturnsNumberOfFields) {\n  EXPECT_EQ(0, +tuple_size<tuple<> >::value);\n  EXPECT_EQ(1, +tuple_size<tuple<void*> >::value);\n  EXPECT_EQ(1, +tuple_size<tuple<char> >::value);\n  EXPECT_EQ(1, +(tuple_size<tuple<tuple<int, double> > >::value));\n  EXPECT_EQ(2, +(tuple_size<tuple<int&, const char> >::value));\n  EXPECT_EQ(3, +(tuple_size<tuple<char*, void, const bool&> >::value));\n}\n\n// Tests comparing a tuple with itself.\nTEST(ComparisonTest, ComparesWithSelf) {\n  const tuple<int, char, bool> a(5, 'a', false);\n\n  EXPECT_TRUE(a == a);\n  EXPECT_FALSE(a != a);\n}\n\n// Tests comparing two tuples with the same value.\nTEST(ComparisonTest, ComparesEqualTuples) {\n  const tuple<int, bool> a(5, true), b(5, true);\n\n  EXPECT_TRUE(a == b);\n  EXPECT_FALSE(a != b);\n}\n\n// Tests comparing two different tuples that have no reference fields.\nTEST(ComparisonTest, ComparesUnequalTuplesWithoutReferenceFields) {\n  typedef tuple<const int, char> FooTuple;\n\n  const FooTuple a(0, 'x');\n  const FooTuple b(1, 'a');\n\n  EXPECT_TRUE(a != b);\n  EXPECT_FALSE(a == b);\n\n  const FooTuple c(1, 'b');\n\n  EXPECT_TRUE(b != c);\n  EXPECT_FALSE(b == c);\n}\n\n// Tests comparing two different tuples that have reference fields.\nTEST(ComparisonTest, ComparesUnequalTuplesWithReferenceFields) {\n  typedef tuple<int&, const char&> FooTuple;\n\n  int i = 5;\n  const char ch = 'a';\n  const FooTuple a(i, ch);\n\n  int j = 6;\n  const FooTuple b(j, ch);\n\n  EXPECT_TRUE(a != b);\n  EXPECT_FALSE(a == b);\n\n  j = 5;\n  const char ch2 = 'b';\n  const FooTuple c(j, ch2);\n\n  EXPECT_TRUE(b != c);\n  EXPECT_FALSE(b == c);\n}\n\n// Tests that a tuple field with a reference type is an alias of the\n// variable it's supposed to reference.\nTEST(ReferenceFieldTest, IsAliasOfReferencedVariable) {\n  int n = 0;\n  tuple<bool, int&> t(true, n);\n\n  n = 1;\n  EXPECT_EQ(n, get<1>(t))\n      << \"Changing a underlying variable should update the reference field.\";\n\n  // Makes sure that the implementation doesn't do anything funny with\n  // the & operator for the return type of get<>().\n  EXPECT_EQ(&n, &(get<1>(t)))\n      << \"The address of a reference field should equal the address of \"\n      << \"the underlying variable.\";\n\n  get<1>(t) = 2;\n  EXPECT_EQ(2, n)\n      << \"Changing a reference field should update the underlying variable.\";\n}\n\n// Tests that tuple's default constructor default initializes each field.\n// This test needs to compile without generating warnings.\nTEST(TupleConstructorTest, DefaultConstructorDefaultInitializesEachField) {\n  // The TR1 report requires that tuple's default constructor default\n  // initializes each field, even if it's a primitive type.  If the\n  // implementation forgets to do this, this test will catch it by\n  // generating warnings about using uninitialized variables (assuming\n  // a decent compiler).\n\n  tuple<> empty;\n\n  tuple<int> a1, b1;\n  b1 = a1;\n  EXPECT_EQ(0, get<0>(b1));\n\n  tuple<int, double> a2, b2;\n  b2 = a2;\n  EXPECT_EQ(0, get<0>(b2));\n  EXPECT_EQ(0.0, get<1>(b2));\n\n  tuple<double, char, bool*> a3, b3;\n  b3 = a3;\n  EXPECT_EQ(0.0, get<0>(b3));\n  EXPECT_EQ('\\0', get<1>(b3));\n  EXPECT_TRUE(get<2>(b3) == NULL);\n\n  tuple<int, int, int, int, int, int, int, int, int, int> a10, b10;\n  b10 = a10;\n  EXPECT_EQ(0, get<0>(b10));\n  EXPECT_EQ(0, get<1>(b10));\n  EXPECT_EQ(0, get<2>(b10));\n  EXPECT_EQ(0, get<3>(b10));\n  EXPECT_EQ(0, get<4>(b10));\n  EXPECT_EQ(0, get<5>(b10));\n  EXPECT_EQ(0, get<6>(b10));\n  EXPECT_EQ(0, get<7>(b10));\n  EXPECT_EQ(0, get<8>(b10));\n  EXPECT_EQ(0, get<9>(b10));\n}\n\n// Tests constructing a tuple from its fields.\nTEST(TupleConstructorTest, ConstructsFromFields) {\n  int n = 1;\n  // Reference field.\n  tuple<int&> a(n);\n  EXPECT_EQ(&n, &(get<0>(a)));\n\n  // Non-reference fields.\n  tuple<int, char> b(5, 'a');\n  EXPECT_EQ(5, get<0>(b));\n  EXPECT_EQ('a', get<1>(b));\n\n  // Const reference field.\n  const int m = 2;\n  tuple<bool, const int&> c(true, m);\n  EXPECT_TRUE(get<0>(c));\n  EXPECT_EQ(&m, &(get<1>(c)));\n}\n\n// Tests tuple's copy constructor.\nTEST(TupleConstructorTest, CopyConstructor) {\n  tuple<double, bool> a(0.0, true);\n  tuple<double, bool> b(a);\n\n  EXPECT_DOUBLE_EQ(0.0, get<0>(b));\n  EXPECT_TRUE(get<1>(b));\n}\n\n// Tests constructing a tuple from another tuple that has a compatible\n// but different type.\nTEST(TupleConstructorTest, ConstructsFromDifferentTupleType) {\n  tuple<int, int, char> a(0, 1, 'a');\n  tuple<double, long, int> b(a);\n\n  EXPECT_DOUBLE_EQ(0.0, get<0>(b));\n  EXPECT_EQ(1, get<1>(b));\n  EXPECT_EQ('a', get<2>(b));\n}\n\n// Tests constructing a 2-tuple from an std::pair.\nTEST(TupleConstructorTest, ConstructsFromPair) {\n  ::std::pair<int, char> a(1, 'a');\n  tuple<int, char> b(a);\n  tuple<int, const char&> c(a);\n}\n\n// Tests assigning a tuple to another tuple with the same type.\nTEST(TupleAssignmentTest, AssignsToSameTupleType) {\n  const tuple<int, long> a(5, 7L);\n  tuple<int, long> b;\n  b = a;\n  EXPECT_EQ(5, get<0>(b));\n  EXPECT_EQ(7L, get<1>(b));\n}\n\n// Tests assigning a tuple to another tuple with a different but\n// compatible type.\nTEST(TupleAssignmentTest, AssignsToDifferentTupleType) {\n  const tuple<int, long, bool> a(1, 7L, true);\n  tuple<long, int, bool> b;\n  b = a;\n  EXPECT_EQ(1L, get<0>(b));\n  EXPECT_EQ(7, get<1>(b));\n  EXPECT_TRUE(get<2>(b));\n}\n\n// Tests assigning an std::pair to a 2-tuple.\nTEST(TupleAssignmentTest, AssignsFromPair) {\n  const ::std::pair<int, bool> a(5, true);\n  tuple<int, bool> b;\n  b = a;\n  EXPECT_EQ(5, get<0>(b));\n  EXPECT_TRUE(get<1>(b));\n\n  tuple<long, bool> c;\n  c = a;\n  EXPECT_EQ(5L, get<0>(c));\n  EXPECT_TRUE(get<1>(c));\n}\n\n// A fixture for testing big tuples.\nclass BigTupleTest : public testing::Test {\n protected:\n  typedef tuple<int, int, int, int, int, int, int, int, int, int> BigTuple;\n\n  BigTupleTest() :\n      a_(1, 0, 0, 0, 0, 0, 0, 0, 0, 2),\n      b_(1, 0, 0, 0, 0, 0, 0, 0, 0, 3) {}\n\n  BigTuple a_, b_;\n};\n\n// Tests constructing big tuples.\nTEST_F(BigTupleTest, Construction) {\n  BigTuple a;\n  BigTuple b(b_);\n}\n\n// Tests that get<N>(t) returns the N-th (0-based) field of tuple t.\nTEST_F(BigTupleTest, get) {\n  EXPECT_EQ(1, get<0>(a_));\n  EXPECT_EQ(2, get<9>(a_));\n\n  // Tests that get() works on a const tuple too.\n  const BigTuple a(a_);\n  EXPECT_EQ(1, get<0>(a));\n  EXPECT_EQ(2, get<9>(a));\n}\n\n// Tests comparing big tuples.\nTEST_F(BigTupleTest, Comparisons) {\n  EXPECT_TRUE(a_ == a_);\n  EXPECT_FALSE(a_ != a_);\n\n  EXPECT_TRUE(a_ != b_);\n  EXPECT_FALSE(a_ == b_);\n}\n\nTEST(MakeTupleTest, WorksForScalarTypes) {\n  tuple<bool, int> a;\n  a = make_tuple(true, 5);\n  EXPECT_TRUE(get<0>(a));\n  EXPECT_EQ(5, get<1>(a));\n\n  tuple<char, int, long> b;\n  b = make_tuple('a', 'b', 5);\n  EXPECT_EQ('a', get<0>(b));\n  EXPECT_EQ('b', get<1>(b));\n  EXPECT_EQ(5, get<2>(b));\n}\n\nTEST(MakeTupleTest, WorksForPointers) {\n  int a[] = { 1, 2, 3, 4 };\n  const char* const str = \"hi\";\n  int* const p = a;\n\n  tuple<const char*, int*> t;\n  t = make_tuple(str, p);\n  EXPECT_EQ(str, get<0>(t));\n  EXPECT_EQ(p, get<1>(t));\n}\n\n}  // namespace\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-typed-test2_test.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include <vector>\n\n#include \"test/gtest-typed-test_test.h\"\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_TYPED_TEST_P\n\n// Tests that the same type-parameterized test case can be\n// instantiated in different translation units linked together.\n// (ContainerTest is also instantiated in gtest-typed-test_test.cc.)\nINSTANTIATE_TYPED_TEST_CASE_P(Vector, ContainerTest,\n                              testing::Types<std::vector<int> >);\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-typed-test_test.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include <set>\n#include <vector>\n\n#include \"test/gtest-typed-test_test.h\"\n#include \"gtest/gtest.h\"\n\nusing testing::Test;\n\n// Used for testing that SetUpTestCase()/TearDownTestCase(), fixture\n// ctor/dtor, and SetUp()/TearDown() work correctly in typed tests and\n// type-parameterized test.\ntemplate <typename T>\nclass CommonTest : public Test {\n  // For some technical reason, SetUpTestCase() and TearDownTestCase()\n  // must be public.\n public:\n  static void SetUpTestCase() {\n    shared_ = new T(5);\n  }\n\n  static void TearDownTestCase() {\n    delete shared_;\n    shared_ = NULL;\n  }\n\n  // This 'protected:' is optional.  There's no harm in making all\n  // members of this fixture class template public.\n protected:\n  // We used to use std::list here, but switched to std::vector since\n  // MSVC's <list> doesn't compile cleanly with /W4.\n  typedef std::vector<T> Vector;\n  typedef std::set<int> IntSet;\n\n  CommonTest() : value_(1) {}\n\n  virtual ~CommonTest() { EXPECT_EQ(3, value_); }\n\n  virtual void SetUp() {\n    EXPECT_EQ(1, value_);\n    value_++;\n  }\n\n  virtual void TearDown() {\n    EXPECT_EQ(2, value_);\n    value_++;\n  }\n\n  T value_;\n  static T* shared_;\n};\n\ntemplate <typename T>\nT* CommonTest<T>::shared_ = NULL;\n\n// This #ifdef block tests typed tests.\n#if GTEST_HAS_TYPED_TEST\n\nusing testing::Types;\n\n// Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor,\n// and SetUp()/TearDown() work correctly in typed tests\n\ntypedef Types<char, int> TwoTypes;\nTYPED_TEST_CASE(CommonTest, TwoTypes);\n\nTYPED_TEST(CommonTest, ValuesAreCorrect) {\n  // Static members of the fixture class template can be visited via\n  // the TestFixture:: prefix.\n  EXPECT_EQ(5, *TestFixture::shared_);\n\n  // Typedefs in the fixture class template can be visited via the\n  // \"typename TestFixture::\" prefix.\n  typename TestFixture::Vector empty;\n  EXPECT_EQ(0U, empty.size());\n\n  typename TestFixture::IntSet empty2;\n  EXPECT_EQ(0U, empty2.size());\n\n  // Non-static members of the fixture class must be visited via\n  // 'this', as required by C++ for class templates.\n  EXPECT_EQ(2, this->value_);\n}\n\n// The second test makes sure shared_ is not deleted after the first\n// test.\nTYPED_TEST(CommonTest, ValuesAreStillCorrect) {\n  // Static members of the fixture class template can also be visited\n  // via 'this'.\n  ASSERT_TRUE(this->shared_ != NULL);\n  EXPECT_EQ(5, *this->shared_);\n\n  // TypeParam can be used to refer to the type parameter.\n  EXPECT_EQ(static_cast<TypeParam>(2), this->value_);\n}\n\n// Tests that multiple TYPED_TEST_CASE's can be defined in the same\n// translation unit.\n\ntemplate <typename T>\nclass TypedTest1 : public Test {\n};\n\n// Verifies that the second argument of TYPED_TEST_CASE can be a\n// single type.\nTYPED_TEST_CASE(TypedTest1, int);\nTYPED_TEST(TypedTest1, A) {}\n\ntemplate <typename T>\nclass TypedTest2 : public Test {\n};\n\n// Verifies that the second argument of TYPED_TEST_CASE can be a\n// Types<...> type list.\nTYPED_TEST_CASE(TypedTest2, Types<int>);\n\n// This also verifies that tests from different typed test cases can\n// share the same name.\nTYPED_TEST(TypedTest2, A) {}\n\n// Tests that a typed test case can be defined in a namespace.\n\nnamespace library1 {\n\ntemplate <typename T>\nclass NumericTest : public Test {\n};\n\ntypedef Types<int, long> NumericTypes;\nTYPED_TEST_CASE(NumericTest, NumericTypes);\n\nTYPED_TEST(NumericTest, DefaultIsZero) {\n  EXPECT_EQ(0, TypeParam());\n}\n\n}  // namespace library1\n\n#endif  // GTEST_HAS_TYPED_TEST\n\n// This #ifdef block tests type-parameterized tests.\n#if GTEST_HAS_TYPED_TEST_P\n\nusing testing::Types;\nusing testing::internal::TypedTestCasePState;\n\n// Tests TypedTestCasePState.\n\nclass TypedTestCasePStateTest : public Test {\n protected:\n  virtual void SetUp() {\n    state_.AddTestName(\"foo.cc\", 0, \"FooTest\", \"A\");\n    state_.AddTestName(\"foo.cc\", 0, \"FooTest\", \"B\");\n    state_.AddTestName(\"foo.cc\", 0, \"FooTest\", \"C\");\n  }\n\n  TypedTestCasePState state_;\n};\n\nTEST_F(TypedTestCasePStateTest, SucceedsForMatchingList) {\n  const char* tests = \"A, B, C\";\n  EXPECT_EQ(tests,\n            state_.VerifyRegisteredTestNames(\"foo.cc\", 1, tests));\n}\n\n// Makes sure that the order of the tests and spaces around the names\n// don't matter.\nTEST_F(TypedTestCasePStateTest, IgnoresOrderAndSpaces) {\n  const char* tests = \"A,C,   B\";\n  EXPECT_EQ(tests,\n            state_.VerifyRegisteredTestNames(\"foo.cc\", 1, tests));\n}\n\ntypedef TypedTestCasePStateTest TypedTestCasePStateDeathTest;\n\nTEST_F(TypedTestCasePStateDeathTest, DetectsDuplicates) {\n  EXPECT_DEATH_IF_SUPPORTED(\n      state_.VerifyRegisteredTestNames(\"foo.cc\", 1, \"A, B, A, C\"),\n      \"foo\\\\.cc.1.?: Test A is listed more than once\\\\.\");\n}\n\nTEST_F(TypedTestCasePStateDeathTest, DetectsExtraTest) {\n  EXPECT_DEATH_IF_SUPPORTED(\n      state_.VerifyRegisteredTestNames(\"foo.cc\", 1, \"A, B, C, D\"),\n      \"foo\\\\.cc.1.?: No test named D can be found in this test case\\\\.\");\n}\n\nTEST_F(TypedTestCasePStateDeathTest, DetectsMissedTest) {\n  EXPECT_DEATH_IF_SUPPORTED(\n      state_.VerifyRegisteredTestNames(\"foo.cc\", 1, \"A, C\"),\n      \"foo\\\\.cc.1.?: You forgot to list test B\\\\.\");\n}\n\n// Tests that defining a test for a parameterized test case generates\n// a run-time error if the test case has been registered.\nTEST_F(TypedTestCasePStateDeathTest, DetectsTestAfterRegistration) {\n  state_.VerifyRegisteredTestNames(\"foo.cc\", 1, \"A, B, C\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      state_.AddTestName(\"foo.cc\", 2, \"FooTest\", \"D\"),\n      \"foo\\\\.cc.2.?: Test D must be defined before REGISTER_TYPED_TEST_CASE_P\"\n      \"\\\\(FooTest, \\\\.\\\\.\\\\.\\\\)\\\\.\");\n}\n\n// Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor,\n// and SetUp()/TearDown() work correctly in type-parameterized tests.\n\ntemplate <typename T>\nclass DerivedTest : public CommonTest<T> {\n};\n\nTYPED_TEST_CASE_P(DerivedTest);\n\nTYPED_TEST_P(DerivedTest, ValuesAreCorrect) {\n  // Static members of the fixture class template can be visited via\n  // the TestFixture:: prefix.\n  EXPECT_EQ(5, *TestFixture::shared_);\n\n  // Non-static members of the fixture class must be visited via\n  // 'this', as required by C++ for class templates.\n  EXPECT_EQ(2, this->value_);\n}\n\n// The second test makes sure shared_ is not deleted after the first\n// test.\nTYPED_TEST_P(DerivedTest, ValuesAreStillCorrect) {\n  // Static members of the fixture class template can also be visited\n  // via 'this'.\n  ASSERT_TRUE(this->shared_ != NULL);\n  EXPECT_EQ(5, *this->shared_);\n  EXPECT_EQ(2, this->value_);\n}\n\nREGISTER_TYPED_TEST_CASE_P(DerivedTest,\n                           ValuesAreCorrect, ValuesAreStillCorrect);\n\ntypedef Types<short, long> MyTwoTypes;\nINSTANTIATE_TYPED_TEST_CASE_P(My, DerivedTest, MyTwoTypes);\n\n// Tests that multiple TYPED_TEST_CASE_P's can be defined in the same\n// translation unit.\n\ntemplate <typename T>\nclass TypedTestP1 : public Test {\n};\n\nTYPED_TEST_CASE_P(TypedTestP1);\n\n// For testing that the code between TYPED_TEST_CASE_P() and\n// TYPED_TEST_P() is not enclosed in a namespace.\ntypedef int IntAfterTypedTestCaseP;\n\nTYPED_TEST_P(TypedTestP1, A) {}\nTYPED_TEST_P(TypedTestP1, B) {}\n\n// For testing that the code between TYPED_TEST_P() and\n// REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace.\ntypedef int IntBeforeRegisterTypedTestCaseP;\n\nREGISTER_TYPED_TEST_CASE_P(TypedTestP1, A, B);\n\ntemplate <typename T>\nclass TypedTestP2 : public Test {\n};\n\nTYPED_TEST_CASE_P(TypedTestP2);\n\n// This also verifies that tests from different type-parameterized\n// test cases can share the same name.\nTYPED_TEST_P(TypedTestP2, A) {}\n\nREGISTER_TYPED_TEST_CASE_P(TypedTestP2, A);\n\n// Verifies that the code between TYPED_TEST_CASE_P() and\n// REGISTER_TYPED_TEST_CASE_P() is not enclosed in a namespace.\nIntAfterTypedTestCaseP after = 0;\nIntBeforeRegisterTypedTestCaseP before = 0;\n\n// Verifies that the last argument of INSTANTIATE_TYPED_TEST_CASE_P()\n// can be either a single type or a Types<...> type list.\nINSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP1, int);\nINSTANTIATE_TYPED_TEST_CASE_P(Int, TypedTestP2, Types<int>);\n\n// Tests that the same type-parameterized test case can be\n// instantiated more than once in the same translation unit.\nINSTANTIATE_TYPED_TEST_CASE_P(Double, TypedTestP2, Types<double>);\n\n// Tests that the same type-parameterized test case can be\n// instantiated in different translation units linked together.\n// (ContainerTest is also instantiated in gtest-typed-test_test.cc.)\ntypedef Types<std::vector<double>, std::set<char> > MyContainers;\nINSTANTIATE_TYPED_TEST_CASE_P(My, ContainerTest, MyContainers);\n\n// Tests that a type-parameterized test case can be defined and\n// instantiated in a namespace.\n\nnamespace library2 {\n\ntemplate <typename T>\nclass NumericTest : public Test {\n};\n\nTYPED_TEST_CASE_P(NumericTest);\n\nTYPED_TEST_P(NumericTest, DefaultIsZero) {\n  EXPECT_EQ(0, TypeParam());\n}\n\nTYPED_TEST_P(NumericTest, ZeroIsLessThanOne) {\n  EXPECT_LT(TypeParam(0), TypeParam(1));\n}\n\nREGISTER_TYPED_TEST_CASE_P(NumericTest,\n                           DefaultIsZero, ZeroIsLessThanOne);\ntypedef Types<int, double> NumericTypes;\nINSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes);\n\n}  // namespace library2\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n#if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P)\n\n// Google Test may not support type-parameterized tests with some\n// compilers. If we use conditional compilation to compile out all\n// code referring to the gtest_main library, MSVC linker will not link\n// that library at all and consequently complain about missing entry\n// point defined in that library (fatal error LNK1561: entry point\n// must be defined). This dummy test keeps gtest_main linked in.\nTEST(DummyTest, TypedTestsAreNotSupportedOnThisPlatform) {}\n\n#endif  // #if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P)\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-typed-test_test.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#ifndef GTEST_TEST_GTEST_TYPED_TEST_TEST_H_\n#define GTEST_TEST_GTEST_TYPED_TEST_TEST_H_\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_HAS_TYPED_TEST_P\n\nusing testing::Test;\n\n// For testing that the same type-parameterized test case can be\n// instantiated in different translation units linked together.\n// ContainerTest will be instantiated in both gtest-typed-test_test.cc\n// and gtest-typed-test2_test.cc.\n\ntemplate <typename T>\nclass ContainerTest : public Test {\n};\n\nTYPED_TEST_CASE_P(ContainerTest);\n\nTYPED_TEST_P(ContainerTest, CanBeDefaultConstructed) {\n  TypeParam container;\n}\n\nTYPED_TEST_P(ContainerTest, InitialSizeIsZero) {\n  TypeParam container;\n  EXPECT_EQ(0U, container.size());\n}\n\nREGISTER_TYPED_TEST_CASE_P(ContainerTest,\n                           CanBeDefaultConstructed, InitialSizeIsZero);\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n#endif  // GTEST_TEST_GTEST_TYPED_TEST_TEST_H_\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest-unittest-api_test.cc",
    "content": "// Copyright 2009 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// The Google C++ Testing Framework (Google Test)\n//\n// This file contains tests verifying correctness of data provided via\n// UnitTest's public methods.\n\n#include \"gtest/gtest.h\"\n\n#include <string.h>  // For strcmp.\n#include <algorithm>\n\nusing ::testing::InitGoogleTest;\n\nnamespace testing {\nnamespace internal {\n\ntemplate <typename T>\nstruct LessByName {\n  bool operator()(const T* a, const T* b) {\n    return strcmp(a->name(), b->name()) < 0;\n  }\n};\n\nclass UnitTestHelper {\n public:\n  // Returns the array of pointers to all test cases sorted by the test case\n  // name.  The caller is responsible for deleting the array.\n  static TestCase const** const GetSortedTestCases() {\n    UnitTest& unit_test = *UnitTest::GetInstance();\n    TestCase const** const test_cases =\n        new const TestCase*[unit_test.total_test_case_count()];\n\n    for (int i = 0; i < unit_test.total_test_case_count(); ++i)\n      test_cases[i] = unit_test.GetTestCase(i);\n\n    std::sort(test_cases,\n              test_cases + unit_test.total_test_case_count(),\n              LessByName<TestCase>());\n    return test_cases;\n  }\n\n  // Returns the test case by its name.  The caller doesn't own the returned\n  // pointer.\n  static const TestCase* FindTestCase(const char* name) {\n    UnitTest& unit_test = *UnitTest::GetInstance();\n    for (int i = 0; i < unit_test.total_test_case_count(); ++i) {\n      const TestCase* test_case = unit_test.GetTestCase(i);\n      if (0 == strcmp(test_case->name(), name))\n        return test_case;\n    }\n    return NULL;\n  }\n\n  // Returns the array of pointers to all tests in a particular test case\n  // sorted by the test name.  The caller is responsible for deleting the\n  // array.\n  static TestInfo const** const GetSortedTests(const TestCase* test_case) {\n    TestInfo const** const tests =\n        new const TestInfo*[test_case->total_test_count()];\n\n    for (int i = 0; i < test_case->total_test_count(); ++i)\n      tests[i] = test_case->GetTestInfo(i);\n\n    std::sort(tests, tests + test_case->total_test_count(),\n              LessByName<TestInfo>());\n    return tests;\n  }\n};\n\n#if GTEST_HAS_TYPED_TEST\ntemplate <typename T> class TestCaseWithCommentTest : public Test {};\nTYPED_TEST_CASE(TestCaseWithCommentTest, Types<int>);\nTYPED_TEST(TestCaseWithCommentTest, Dummy) {}\n\nconst int kTypedTestCases = 1;\nconst int kTypedTests = 1;\n#else\nconst int kTypedTestCases = 0;\nconst int kTypedTests = 0;\n#endif  // GTEST_HAS_TYPED_TEST\n\n// We can only test the accessors that do not change value while tests run.\n// Since tests can be run in any order, the values the accessors that track\n// test execution (such as failed_test_count) can not be predicted.\nTEST(ApiTest, UnitTestImmutableAccessorsWork) {\n  UnitTest* unit_test = UnitTest::GetInstance();\n\n  ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());\n  EXPECT_EQ(1 + kTypedTestCases, unit_test->test_case_to_run_count());\n  EXPECT_EQ(2, unit_test->disabled_test_count());\n  EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count());\n  EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count());\n\n  const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();\n\n  EXPECT_STREQ(\"ApiTest\", test_cases[0]->name());\n  EXPECT_STREQ(\"DISABLED_Test\", test_cases[1]->name());\n#if GTEST_HAS_TYPED_TEST\n  EXPECT_STREQ(\"TestCaseWithCommentTest/0\", test_cases[2]->name());\n#endif  // GTEST_HAS_TYPED_TEST\n\n  delete[] test_cases;\n\n  // The following lines initiate actions to verify certain methods in\n  // FinalSuccessChecker::TearDown.\n\n  // Records a test property to verify TestResult::GetTestProperty().\n  RecordProperty(\"key\", \"value\");\n}\n\nAssertionResult IsNull(const char* str) {\n  if (str != NULL) {\n    return testing::AssertionFailure() << \"argument is \" << str;\n  }\n  return AssertionSuccess();\n}\n\nTEST(ApiTest, TestCaseImmutableAccessorsWork) {\n  const TestCase* test_case = UnitTestHelper::FindTestCase(\"ApiTest\");\n  ASSERT_TRUE(test_case != NULL);\n\n  EXPECT_STREQ(\"ApiTest\", test_case->name());\n  EXPECT_TRUE(IsNull(test_case->type_param()));\n  EXPECT_TRUE(test_case->should_run());\n  EXPECT_EQ(1, test_case->disabled_test_count());\n  EXPECT_EQ(3, test_case->test_to_run_count());\n  ASSERT_EQ(4, test_case->total_test_count());\n\n  const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);\n\n  EXPECT_STREQ(\"DISABLED_Dummy1\", tests[0]->name());\n  EXPECT_STREQ(\"ApiTest\", tests[0]->test_case_name());\n  EXPECT_TRUE(IsNull(tests[0]->value_param()));\n  EXPECT_TRUE(IsNull(tests[0]->type_param()));\n  EXPECT_FALSE(tests[0]->should_run());\n\n  EXPECT_STREQ(\"TestCaseDisabledAccessorsWork\", tests[1]->name());\n  EXPECT_STREQ(\"ApiTest\", tests[1]->test_case_name());\n  EXPECT_TRUE(IsNull(tests[1]->value_param()));\n  EXPECT_TRUE(IsNull(tests[1]->type_param()));\n  EXPECT_TRUE(tests[1]->should_run());\n\n  EXPECT_STREQ(\"TestCaseImmutableAccessorsWork\", tests[2]->name());\n  EXPECT_STREQ(\"ApiTest\", tests[2]->test_case_name());\n  EXPECT_TRUE(IsNull(tests[2]->value_param()));\n  EXPECT_TRUE(IsNull(tests[2]->type_param()));\n  EXPECT_TRUE(tests[2]->should_run());\n\n  EXPECT_STREQ(\"UnitTestImmutableAccessorsWork\", tests[3]->name());\n  EXPECT_STREQ(\"ApiTest\", tests[3]->test_case_name());\n  EXPECT_TRUE(IsNull(tests[3]->value_param()));\n  EXPECT_TRUE(IsNull(tests[3]->type_param()));\n  EXPECT_TRUE(tests[3]->should_run());\n\n  delete[] tests;\n  tests = NULL;\n\n#if GTEST_HAS_TYPED_TEST\n  test_case = UnitTestHelper::FindTestCase(\"TestCaseWithCommentTest/0\");\n  ASSERT_TRUE(test_case != NULL);\n\n  EXPECT_STREQ(\"TestCaseWithCommentTest/0\", test_case->name());\n  EXPECT_STREQ(GetTypeName<int>().c_str(), test_case->type_param());\n  EXPECT_TRUE(test_case->should_run());\n  EXPECT_EQ(0, test_case->disabled_test_count());\n  EXPECT_EQ(1, test_case->test_to_run_count());\n  ASSERT_EQ(1, test_case->total_test_count());\n\n  tests = UnitTestHelper::GetSortedTests(test_case);\n\n  EXPECT_STREQ(\"Dummy\", tests[0]->name());\n  EXPECT_STREQ(\"TestCaseWithCommentTest/0\", tests[0]->test_case_name());\n  EXPECT_TRUE(IsNull(tests[0]->value_param()));\n  EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param());\n  EXPECT_TRUE(tests[0]->should_run());\n\n  delete[] tests;\n#endif  // GTEST_HAS_TYPED_TEST\n}\n\nTEST(ApiTest, TestCaseDisabledAccessorsWork) {\n  const TestCase* test_case = UnitTestHelper::FindTestCase(\"DISABLED_Test\");\n  ASSERT_TRUE(test_case != NULL);\n\n  EXPECT_STREQ(\"DISABLED_Test\", test_case->name());\n  EXPECT_TRUE(IsNull(test_case->type_param()));\n  EXPECT_FALSE(test_case->should_run());\n  EXPECT_EQ(1, test_case->disabled_test_count());\n  EXPECT_EQ(0, test_case->test_to_run_count());\n  ASSERT_EQ(1, test_case->total_test_count());\n\n  const TestInfo* const test_info = test_case->GetTestInfo(0);\n  EXPECT_STREQ(\"Dummy2\", test_info->name());\n  EXPECT_STREQ(\"DISABLED_Test\", test_info->test_case_name());\n  EXPECT_TRUE(IsNull(test_info->value_param()));\n  EXPECT_TRUE(IsNull(test_info->type_param()));\n  EXPECT_FALSE(test_info->should_run());\n}\n\n// These two tests are here to provide support for testing\n// test_case_to_run_count, disabled_test_count, and test_to_run_count.\nTEST(ApiTest, DISABLED_Dummy1) {}\nTEST(DISABLED_Test, Dummy2) {}\n\nclass FinalSuccessChecker : public Environment {\n protected:\n  virtual void TearDown() {\n    UnitTest* unit_test = UnitTest::GetInstance();\n\n    EXPECT_EQ(1 + kTypedTestCases, unit_test->successful_test_case_count());\n    EXPECT_EQ(3 + kTypedTests, unit_test->successful_test_count());\n    EXPECT_EQ(0, unit_test->failed_test_case_count());\n    EXPECT_EQ(0, unit_test->failed_test_count());\n    EXPECT_TRUE(unit_test->Passed());\n    EXPECT_FALSE(unit_test->Failed());\n    ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());\n\n    const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();\n\n    EXPECT_STREQ(\"ApiTest\", test_cases[0]->name());\n    EXPECT_TRUE(IsNull(test_cases[0]->type_param()));\n    EXPECT_TRUE(test_cases[0]->should_run());\n    EXPECT_EQ(1, test_cases[0]->disabled_test_count());\n    ASSERT_EQ(4, test_cases[0]->total_test_count());\n    EXPECT_EQ(3, test_cases[0]->successful_test_count());\n    EXPECT_EQ(0, test_cases[0]->failed_test_count());\n    EXPECT_TRUE(test_cases[0]->Passed());\n    EXPECT_FALSE(test_cases[0]->Failed());\n\n    EXPECT_STREQ(\"DISABLED_Test\", test_cases[1]->name());\n    EXPECT_TRUE(IsNull(test_cases[1]->type_param()));\n    EXPECT_FALSE(test_cases[1]->should_run());\n    EXPECT_EQ(1, test_cases[1]->disabled_test_count());\n    ASSERT_EQ(1, test_cases[1]->total_test_count());\n    EXPECT_EQ(0, test_cases[1]->successful_test_count());\n    EXPECT_EQ(0, test_cases[1]->failed_test_count());\n\n#if GTEST_HAS_TYPED_TEST\n    EXPECT_STREQ(\"TestCaseWithCommentTest/0\", test_cases[2]->name());\n    EXPECT_STREQ(GetTypeName<int>().c_str(), test_cases[2]->type_param());\n    EXPECT_TRUE(test_cases[2]->should_run());\n    EXPECT_EQ(0, test_cases[2]->disabled_test_count());\n    ASSERT_EQ(1, test_cases[2]->total_test_count());\n    EXPECT_EQ(1, test_cases[2]->successful_test_count());\n    EXPECT_EQ(0, test_cases[2]->failed_test_count());\n    EXPECT_TRUE(test_cases[2]->Passed());\n    EXPECT_FALSE(test_cases[2]->Failed());\n#endif  // GTEST_HAS_TYPED_TEST\n\n    const TestCase* test_case = UnitTestHelper::FindTestCase(\"ApiTest\");\n    const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);\n    EXPECT_STREQ(\"DISABLED_Dummy1\", tests[0]->name());\n    EXPECT_STREQ(\"ApiTest\", tests[0]->test_case_name());\n    EXPECT_FALSE(tests[0]->should_run());\n\n    EXPECT_STREQ(\"TestCaseDisabledAccessorsWork\", tests[1]->name());\n    EXPECT_STREQ(\"ApiTest\", tests[1]->test_case_name());\n    EXPECT_TRUE(IsNull(tests[1]->value_param()));\n    EXPECT_TRUE(IsNull(tests[1]->type_param()));\n    EXPECT_TRUE(tests[1]->should_run());\n    EXPECT_TRUE(tests[1]->result()->Passed());\n    EXPECT_EQ(0, tests[1]->result()->test_property_count());\n\n    EXPECT_STREQ(\"TestCaseImmutableAccessorsWork\", tests[2]->name());\n    EXPECT_STREQ(\"ApiTest\", tests[2]->test_case_name());\n    EXPECT_TRUE(IsNull(tests[2]->value_param()));\n    EXPECT_TRUE(IsNull(tests[2]->type_param()));\n    EXPECT_TRUE(tests[2]->should_run());\n    EXPECT_TRUE(tests[2]->result()->Passed());\n    EXPECT_EQ(0, tests[2]->result()->test_property_count());\n\n    EXPECT_STREQ(\"UnitTestImmutableAccessorsWork\", tests[3]->name());\n    EXPECT_STREQ(\"ApiTest\", tests[3]->test_case_name());\n    EXPECT_TRUE(IsNull(tests[3]->value_param()));\n    EXPECT_TRUE(IsNull(tests[3]->type_param()));\n    EXPECT_TRUE(tests[3]->should_run());\n    EXPECT_TRUE(tests[3]->result()->Passed());\n    EXPECT_EQ(1, tests[3]->result()->test_property_count());\n    const TestProperty& property = tests[3]->result()->GetTestProperty(0);\n    EXPECT_STREQ(\"key\", property.key());\n    EXPECT_STREQ(\"value\", property.value());\n\n    delete[] tests;\n\n#if GTEST_HAS_TYPED_TEST\n    test_case = UnitTestHelper::FindTestCase(\"TestCaseWithCommentTest/0\");\n    tests = UnitTestHelper::GetSortedTests(test_case);\n\n    EXPECT_STREQ(\"Dummy\", tests[0]->name());\n    EXPECT_STREQ(\"TestCaseWithCommentTest/0\", tests[0]->test_case_name());\n    EXPECT_TRUE(IsNull(tests[0]->value_param()));\n    EXPECT_STREQ(GetTypeName<int>().c_str(), tests[0]->type_param());\n    EXPECT_TRUE(tests[0]->should_run());\n    EXPECT_TRUE(tests[0]->result()->Passed());\n    EXPECT_EQ(0, tests[0]->result()->test_property_count());\n\n    delete[] tests;\n#endif  // GTEST_HAS_TYPED_TEST\n    delete[] test_cases;\n  }\n};\n\n}  // namespace internal\n}  // namespace testing\n\nint main(int argc, char **argv) {\n  InitGoogleTest(&argc, argv);\n\n  AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker());\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_all_test.cc",
    "content": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Tests for Google C++ Testing Framework (Google Test)\n//\n// Sometimes it's desirable to build most of Google Test's own tests\n// by compiling a single file.  This file serves this purpose.\n#include \"test/gtest-filepath_test.cc\"\n#include \"test/gtest-linked_ptr_test.cc\"\n#include \"test/gtest-message_test.cc\"\n#include \"test/gtest-options_test.cc\"\n#include \"test/gtest-port_test.cc\"\n#include \"test/gtest_pred_impl_unittest.cc\"\n#include \"test/gtest_prod_test.cc\"\n#include \"test/gtest-test-part_test.cc\"\n#include \"test/gtest-typed-test_test.cc\"\n#include \"test/gtest-typed-test2_test.cc\"\n#include \"test/gtest_unittest.cc\"\n#include \"test/production.cc\"\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_break_on_failure_unittest.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test for Google Test's break-on-failure mode.\n\nA user can ask Google Test to seg-fault when an assertion fails, using\neither the GTEST_BREAK_ON_FAILURE environment variable or the\n--gtest_break_on_failure flag.  This script tests such functionality\nby invoking gtest_break_on_failure_unittest_ (a program written with\nGoogle Test) with different environments and command line flags.\n\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport gtest_test_utils\nimport os\nimport sys\n\n\n# Constants.\n\nIS_WINDOWS = os.name == 'nt'\n\n# The environment variable for enabling/disabling the break-on-failure mode.\nBREAK_ON_FAILURE_ENV_VAR = 'GTEST_BREAK_ON_FAILURE'\n\n# The command line flag for enabling/disabling the break-on-failure mode.\nBREAK_ON_FAILURE_FLAG = 'gtest_break_on_failure'\n\n# The environment variable for enabling/disabling the throw-on-failure mode.\nTHROW_ON_FAILURE_ENV_VAR = 'GTEST_THROW_ON_FAILURE'\n\n# The environment variable for enabling/disabling the catch-exceptions mode.\nCATCH_EXCEPTIONS_ENV_VAR = 'GTEST_CATCH_EXCEPTIONS'\n\n# Path to the gtest_break_on_failure_unittest_ program.\nEXE_PATH = gtest_test_utils.GetTestExecutablePath(\n    'gtest_break_on_failure_unittest_')\n\n\n# Utilities.\n\n\nenviron = os.environ.copy()\n\n\ndef SetEnvVar(env_var, value):\n  \"\"\"Sets an environment variable to a given value; unsets it when the\n  given value is None.\n  \"\"\"\n\n  if value is not None:\n    environ[env_var] = value\n  elif env_var in environ:\n    del environ[env_var]\n\n\ndef Run(command):\n  \"\"\"Runs a command; returns 1 if it was killed by a signal, or 0 otherwise.\"\"\"\n\n  p = gtest_test_utils.Subprocess(command, env=environ)\n  if p.terminated_by_signal:\n    return 1\n  else:\n    return 0\n\n\n# The tests.\n\n\nclass GTestBreakOnFailureUnitTest(gtest_test_utils.TestCase):\n  \"\"\"Tests using the GTEST_BREAK_ON_FAILURE environment variable or\n  the --gtest_break_on_failure flag to turn assertion failures into\n  segmentation faults.\n  \"\"\"\n\n  def RunAndVerify(self, env_var_value, flag_value, expect_seg_fault):\n    \"\"\"Runs gtest_break_on_failure_unittest_ and verifies that it does\n    (or does not) have a seg-fault.\n\n    Args:\n      env_var_value:    value of the GTEST_BREAK_ON_FAILURE environment\n                        variable; None if the variable should be unset.\n      flag_value:       value of the --gtest_break_on_failure flag;\n                        None if the flag should not be present.\n      expect_seg_fault: 1 if the program is expected to generate a seg-fault;\n                        0 otherwise.\n    \"\"\"\n\n    SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, env_var_value)\n\n    if env_var_value is None:\n      env_var_value_msg = ' is not set'\n    else:\n      env_var_value_msg = '=' + env_var_value\n\n    if flag_value is None:\n      flag = ''\n    elif flag_value == '0':\n      flag = '--%s=0' % BREAK_ON_FAILURE_FLAG\n    else:\n      flag = '--%s' % BREAK_ON_FAILURE_FLAG\n\n    command = [EXE_PATH]\n    if flag:\n      command.append(flag)\n\n    if expect_seg_fault:\n      should_or_not = 'should'\n    else:\n      should_or_not = 'should not'\n\n    has_seg_fault = Run(command)\n\n    SetEnvVar(BREAK_ON_FAILURE_ENV_VAR, None)\n\n    msg = ('when %s%s, an assertion failure in \"%s\" %s cause a seg-fault.' %\n           (BREAK_ON_FAILURE_ENV_VAR, env_var_value_msg, ' '.join(command),\n            should_or_not))\n    self.assert_(has_seg_fault == expect_seg_fault, msg)\n\n  def testDefaultBehavior(self):\n    \"\"\"Tests the behavior of the default mode.\"\"\"\n\n    self.RunAndVerify(env_var_value=None,\n                      flag_value=None,\n                      expect_seg_fault=0)\n\n  def testEnvVar(self):\n    \"\"\"Tests using the GTEST_BREAK_ON_FAILURE environment variable.\"\"\"\n\n    self.RunAndVerify(env_var_value='0',\n                      flag_value=None,\n                      expect_seg_fault=0)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value=None,\n                      expect_seg_fault=1)\n\n  def testFlag(self):\n    \"\"\"Tests using the --gtest_break_on_failure flag.\"\"\"\n\n    self.RunAndVerify(env_var_value=None,\n                      flag_value='0',\n                      expect_seg_fault=0)\n    self.RunAndVerify(env_var_value=None,\n                      flag_value='1',\n                      expect_seg_fault=1)\n\n  def testFlagOverridesEnvVar(self):\n    \"\"\"Tests that the flag overrides the environment variable.\"\"\"\n\n    self.RunAndVerify(env_var_value='0',\n                      flag_value='0',\n                      expect_seg_fault=0)\n    self.RunAndVerify(env_var_value='0',\n                      flag_value='1',\n                      expect_seg_fault=1)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value='0',\n                      expect_seg_fault=0)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value='1',\n                      expect_seg_fault=1)\n\n  def testBreakOnFailureOverridesThrowOnFailure(self):\n    \"\"\"Tests that gtest_break_on_failure overrides gtest_throw_on_failure.\"\"\"\n\n    SetEnvVar(THROW_ON_FAILURE_ENV_VAR, '1')\n    try:\n      self.RunAndVerify(env_var_value=None,\n                        flag_value='1',\n                        expect_seg_fault=1)\n    finally:\n      SetEnvVar(THROW_ON_FAILURE_ENV_VAR, None)\n\n  if IS_WINDOWS:\n    def testCatchExceptionsDoesNotInterfere(self):\n      \"\"\"Tests that gtest_catch_exceptions doesn't interfere.\"\"\"\n\n      SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, '1')\n      try:\n        self.RunAndVerify(env_var_value='1',\n                          flag_value='1',\n                          expect_seg_fault=1)\n      finally:\n        SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, None)\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_break_on_failure_unittest_.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Unit test for Google Test's break-on-failure mode.\n//\n// A user can ask Google Test to seg-fault when an assertion fails, using\n// either the GTEST_BREAK_ON_FAILURE environment variable or the\n// --gtest_break_on_failure flag.  This file is used for testing such\n// functionality.\n//\n// This program will be invoked from a Python unit test.  It is\n// expected to fail.  Don't run it directly.\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_OS_WINDOWS\n# include <windows.h>\n# include <stdlib.h>\n#endif\n\nnamespace {\n\n// A test that's expected to fail.\nTEST(Foo, Bar) {\n  EXPECT_EQ(2, 3);\n}\n\n#if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE\n// On Windows Mobile global exception handlers are not supported.\nLONG WINAPI ExitWithExceptionCode(\n    struct _EXCEPTION_POINTERS* exception_pointers) {\n  exit(exception_pointers->ExceptionRecord->ExceptionCode);\n}\n#endif\n\n}  // namespace\n\nint main(int argc, char **argv) {\n#if GTEST_OS_WINDOWS\n  // Suppresses display of the Windows error dialog upon encountering\n  // a general protection fault (segment violation).\n  SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS);\n\n# if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE\n\n  // The default unhandled exception filter does not always exit\n  // with the exception code as exit code - for example it exits with\n  // 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT\n  // if the application is compiled in debug mode. Thus we use our own\n  // filter which always exits with the exception code for unhandled\n  // exceptions.\n  SetUnhandledExceptionFilter(ExitWithExceptionCode);\n\n# endif\n#endif\n\n  testing::InitGoogleTest(&argc, argv);\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_catch_exceptions_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2010 Google Inc.  All Rights Reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Tests Google Test's exception catching behavior.\n\nThis script invokes gtest_catch_exceptions_test_ and\ngtest_catch_exceptions_ex_test_ (programs written with\nGoogle Test) and verifies their output.\n\"\"\"\n\n__author__ = 'vladl@google.com (Vlad Losev)'\n\nimport os\n\nimport gtest_test_utils\n\n# Constants.\nFLAG_PREFIX = '--gtest_'\nLIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'\nNO_CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions=0'\nFILTER_FLAG = FLAG_PREFIX + 'filter'\n\n# Path to the gtest_catch_exceptions_ex_test_ binary, compiled with\n# exceptions enabled.\nEX_EXE_PATH = gtest_test_utils.GetTestExecutablePath(\n    'gtest_catch_exceptions_ex_test_')\n\n# Path to the gtest_catch_exceptions_test_ binary, compiled with\n# exceptions disabled.\nEXE_PATH = gtest_test_utils.GetTestExecutablePath(\n    'gtest_catch_exceptions_no_ex_test_')\n\nTEST_LIST = gtest_test_utils.Subprocess([EXE_PATH, LIST_TESTS_FLAG]).output\n\nSUPPORTS_SEH_EXCEPTIONS = 'ThrowsSehException' in TEST_LIST\n\nif SUPPORTS_SEH_EXCEPTIONS:\n  BINARY_OUTPUT = gtest_test_utils.Subprocess([EXE_PATH]).output\n\nEX_BINARY_OUTPUT = gtest_test_utils.Subprocess([EX_EXE_PATH]).output\n\n# The tests.\nif SUPPORTS_SEH_EXCEPTIONS:\n  # pylint:disable-msg=C6302\n  class CatchSehExceptionsTest(gtest_test_utils.TestCase):\n    \"\"\"Tests exception-catching behavior.\"\"\"\n\n\n    def TestSehExceptions(self, test_output):\n      self.assert_('SEH exception with code 0x2a thrown '\n                   'in the test fixture\\'s constructor'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown '\n                   'in the test fixture\\'s destructor'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown in SetUpTestCase()'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown in TearDownTestCase()'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown in SetUp()'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown in TearDown()'\n                   in test_output)\n      self.assert_('SEH exception with code 0x2a thrown in the test body'\n                   in test_output)\n\n    def testCatchesSehExceptionsWithCxxExceptionsEnabled(self):\n      self.TestSehExceptions(EX_BINARY_OUTPUT)\n\n    def testCatchesSehExceptionsWithCxxExceptionsDisabled(self):\n      self.TestSehExceptions(BINARY_OUTPUT)\n\n\nclass CatchCxxExceptionsTest(gtest_test_utils.TestCase):\n  \"\"\"Tests C++ exception-catching behavior.\n\n     Tests in this test case verify that:\n     * C++ exceptions are caught and logged as C++ (not SEH) exceptions\n     * Exception thrown affect the remainder of the test work flow in the\n       expected manner.\n  \"\"\"\n\n  def testCatchesCxxExceptionsInFixtureConstructor(self):\n    self.assert_('C++ exception with description '\n                 '\"Standard C++ exception\" thrown '\n                 'in the test fixture\\'s constructor'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('unexpected' not in EX_BINARY_OUTPUT,\n                 'This failure belongs in this test only if '\n                 '\"CxxExceptionInConstructorTest\" (no quotes) '\n                 'appears on the same line as words \"called unexpectedly\"')\n\n  if ('CxxExceptionInDestructorTest.ThrowsExceptionInDestructor' in\n      EX_BINARY_OUTPUT):\n\n    def testCatchesCxxExceptionsInFixtureDestructor(self):\n      self.assert_('C++ exception with description '\n                   '\"Standard C++ exception\" thrown '\n                   'in the test fixture\\'s destructor'\n                   in EX_BINARY_OUTPUT)\n      self.assert_('CxxExceptionInDestructorTest::TearDownTestCase() '\n                   'called as expected.'\n                   in EX_BINARY_OUTPUT)\n\n  def testCatchesCxxExceptionsInSetUpTestCase(self):\n    self.assert_('C++ exception with description \"Standard C++ exception\"'\n                 ' thrown in SetUpTestCase()'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInConstructorTest::TearDownTestCase() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTestCaseTest constructor '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTestCaseTest destructor '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTestCaseTest::SetUp() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTestCaseTest::TearDown() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTestCaseTest test body '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n\n  def testCatchesCxxExceptionsInTearDownTestCase(self):\n    self.assert_('C++ exception with description \"Standard C++ exception\"'\n                 ' thrown in TearDownTestCase()'\n                 in EX_BINARY_OUTPUT)\n\n  def testCatchesCxxExceptionsInSetUp(self):\n    self.assert_('C++ exception with description \"Standard C++ exception\"'\n                 ' thrown in SetUp()'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTest::TearDownTestCase() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTest destructor '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInSetUpTest::TearDown() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('unexpected' not in EX_BINARY_OUTPUT,\n                 'This failure belongs in this test only if '\n                 '\"CxxExceptionInSetUpTest\" (no quotes) '\n                 'appears on the same line as words \"called unexpectedly\"')\n\n  def testCatchesCxxExceptionsInTearDown(self):\n    self.assert_('C++ exception with description \"Standard C++ exception\"'\n                 ' thrown in TearDown()'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInTearDownTest::TearDownTestCase() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInTearDownTest destructor '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n\n  def testCatchesCxxExceptionsInTestBody(self):\n    self.assert_('C++ exception with description \"Standard C++ exception\"'\n                 ' thrown in the test body'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInTestBodyTest::TearDownTestCase() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInTestBodyTest destructor '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n    self.assert_('CxxExceptionInTestBodyTest::TearDown() '\n                 'called as expected.'\n                 in EX_BINARY_OUTPUT)\n\n  def testCatchesNonStdCxxExceptions(self):\n    self.assert_('Unknown C++ exception thrown in the test body'\n                 in EX_BINARY_OUTPUT)\n\n  def testUnhandledCxxExceptionsAbortTheProgram(self):\n    # Filters out SEH exception tests on Windows. Unhandled SEH exceptions\n    # cause tests to show pop-up windows there.\n    FITLER_OUT_SEH_TESTS_FLAG = FILTER_FLAG + '=-*Seh*'\n    # By default, Google Test doesn't catch the exceptions.\n    uncaught_exceptions_ex_binary_output = gtest_test_utils.Subprocess(\n        [EX_EXE_PATH,\n         NO_CATCH_EXCEPTIONS_FLAG,\n         FITLER_OUT_SEH_TESTS_FLAG]).output\n\n    self.assert_('Unhandled C++ exception terminating the program'\n                 in uncaught_exceptions_ex_binary_output)\n    self.assert_('unexpected' not in uncaught_exceptions_ex_binary_output)\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_catch_exceptions_test_.cc",
    "content": "// Copyright 2010, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: vladl@google.com (Vlad Losev)\n//\n// Tests for Google Test itself. Tests in this file throw C++ or SEH\n// exceptions, and the output is verified by gtest_catch_exceptions_test.py.\n\n#include \"gtest/gtest.h\"\n\n#include <stdio.h>  // NOLINT\n#include <stdlib.h>  // For exit().\n\n#if GTEST_HAS_SEH\n# include <windows.h>\n#endif\n\n#if GTEST_HAS_EXCEPTIONS\n# include <exception>  // For set_terminate().\n# include <stdexcept>\n#endif\n\nusing testing::Test;\n\n#if GTEST_HAS_SEH\n\nclass SehExceptionInConstructorTest : public Test {\n public:\n  SehExceptionInConstructorTest() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInConstructorTest, ThrowsExceptionInConstructor) {}\n\nclass SehExceptionInDestructorTest : public Test {\n public:\n  ~SehExceptionInDestructorTest() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInDestructorTest, ThrowsExceptionInDestructor) {}\n\nclass SehExceptionInSetUpTestCaseTest : public Test {\n public:\n  static void SetUpTestCase() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) {}\n\nclass SehExceptionInTearDownTestCaseTest : public Test {\n public:\n  static void TearDownTestCase() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {}\n\nclass SehExceptionInSetUpTest : public Test {\n protected:\n  virtual void SetUp() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInSetUpTest, ThrowsExceptionInSetUp) {}\n\nclass SehExceptionInTearDownTest : public Test {\n protected:\n  virtual void TearDown() { RaiseException(42, 0, 0, NULL); }\n};\n\nTEST_F(SehExceptionInTearDownTest, ThrowsExceptionInTearDown) {}\n\nTEST(SehExceptionTest, ThrowsSehException) {\n  RaiseException(42, 0, 0, NULL);\n}\n\n#endif  // GTEST_HAS_SEH\n\n#if GTEST_HAS_EXCEPTIONS\n\nclass CxxExceptionInConstructorTest : public Test {\n public:\n  CxxExceptionInConstructorTest() {\n    // Without this macro VC++ complains about unreachable code at the end of\n    // the constructor.\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(\n        throw std::runtime_error(\"Standard C++ exception\"));\n  }\n\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInConstructorTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInConstructorTest() {\n    ADD_FAILURE() << \"CxxExceptionInConstructorTest destructor \"\n                  << \"called unexpectedly.\";\n  }\n\n  virtual void SetUp() {\n    ADD_FAILURE() << \"CxxExceptionInConstructorTest::SetUp() \"\n                  << \"called unexpectedly.\";\n  }\n\n  virtual void TearDown() {\n    ADD_FAILURE() << \"CxxExceptionInConstructorTest::TearDown() \"\n                  << \"called unexpectedly.\";\n  }\n};\n\nTEST_F(CxxExceptionInConstructorTest, ThrowsExceptionInConstructor) {\n  ADD_FAILURE() << \"CxxExceptionInConstructorTest test body \"\n                << \"called unexpectedly.\";\n}\n\n// Exceptions in destructors are not supported in C++11.\n#if !defined(__GXX_EXPERIMENTAL_CXX0X__) &&  __cplusplus < 201103L\nclass CxxExceptionInDestructorTest : public Test {\n public:\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInDestructorTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInDestructorTest() {\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(\n        throw std::runtime_error(\"Standard C++ exception\"));\n  }\n};\n\nTEST_F(CxxExceptionInDestructorTest, ThrowsExceptionInDestructor) {}\n#endif  // C++11 mode\n\nclass CxxExceptionInSetUpTestCaseTest : public Test {\n public:\n  CxxExceptionInSetUpTestCaseTest() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTestCaseTest constructor \"\n           \"called as expected.\\n\");\n  }\n\n  static void SetUpTestCase() {\n    throw std::runtime_error(\"Standard C++ exception\");\n  }\n\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTestCaseTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInSetUpTestCaseTest() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTestCaseTest destructor \"\n           \"called as expected.\\n\");\n  }\n\n  virtual void SetUp() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTestCaseTest::SetUp() \"\n           \"called as expected.\\n\");\n  }\n\n  virtual void TearDown() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTestCaseTest::TearDown() \"\n           \"called as expected.\\n\");\n  }\n};\n\nTEST_F(CxxExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) {\n  printf(\"%s\",\n         \"CxxExceptionInSetUpTestCaseTest test body \"\n         \"called as expected.\\n\");\n}\n\nclass CxxExceptionInTearDownTestCaseTest : public Test {\n public:\n  static void TearDownTestCase() {\n    throw std::runtime_error(\"Standard C++ exception\");\n  }\n};\n\nTEST_F(CxxExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {}\n\nclass CxxExceptionInSetUpTest : public Test {\n public:\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInSetUpTest() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTest destructor \"\n           \"called as expected.\\n\");\n  }\n\n  virtual void SetUp() { throw std::runtime_error(\"Standard C++ exception\"); }\n\n  virtual void TearDown() {\n    printf(\"%s\",\n           \"CxxExceptionInSetUpTest::TearDown() \"\n           \"called as expected.\\n\");\n  }\n};\n\nTEST_F(CxxExceptionInSetUpTest, ThrowsExceptionInSetUp) {\n  ADD_FAILURE() << \"CxxExceptionInSetUpTest test body \"\n                << \"called unexpectedly.\";\n}\n\nclass CxxExceptionInTearDownTest : public Test {\n public:\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInTearDownTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInTearDownTest() {\n    printf(\"%s\",\n           \"CxxExceptionInTearDownTest destructor \"\n           \"called as expected.\\n\");\n  }\n\n  virtual void TearDown() {\n    throw std::runtime_error(\"Standard C++ exception\");\n  }\n};\n\nTEST_F(CxxExceptionInTearDownTest, ThrowsExceptionInTearDown) {}\n\nclass CxxExceptionInTestBodyTest : public Test {\n public:\n  static void TearDownTestCase() {\n    printf(\"%s\",\n           \"CxxExceptionInTestBodyTest::TearDownTestCase() \"\n           \"called as expected.\\n\");\n  }\n\n protected:\n  ~CxxExceptionInTestBodyTest() {\n    printf(\"%s\",\n           \"CxxExceptionInTestBodyTest destructor \"\n           \"called as expected.\\n\");\n  }\n\n  virtual void TearDown() {\n    printf(\"%s\",\n           \"CxxExceptionInTestBodyTest::TearDown() \"\n           \"called as expected.\\n\");\n  }\n};\n\nTEST_F(CxxExceptionInTestBodyTest, ThrowsStdCxxException) {\n  throw std::runtime_error(\"Standard C++ exception\");\n}\n\nTEST(CxxExceptionTest, ThrowsNonStdCxxException) {\n  throw \"C-string\";\n}\n\n// This terminate handler aborts the program using exit() rather than abort().\n// This avoids showing pop-ups on Windows systems and core dumps on Unix-like\n// ones.\nvoid TerminateHandler() {\n  fprintf(stderr, \"%s\\n\", \"Unhandled C++ exception terminating the program.\");\n  fflush(NULL);\n  exit(3);\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\nint main(int argc, char** argv) {\n#if GTEST_HAS_EXCEPTIONS\n  std::set_terminate(&TerminateHandler);\n#endif\n  testing::InitGoogleTest(&argc, argv);\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_color_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Verifies that Google Test correctly determines whether to use colors.\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport gtest_test_utils\n\n\nIS_WINDOWS = os.name = 'nt'\n\nCOLOR_ENV_VAR = 'GTEST_COLOR'\nCOLOR_FLAG = 'gtest_color'\nCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_color_test_')\n\n\ndef SetEnvVar(env_var, value):\n  \"\"\"Sets the env variable to 'value'; unsets it when 'value' is None.\"\"\"\n\n  if value is not None:\n    os.environ[env_var] = value\n  elif env_var in os.environ:\n    del os.environ[env_var]\n\n\ndef UsesColor(term, color_env_var, color_flag):\n  \"\"\"Runs gtest_color_test_ and returns its exit code.\"\"\"\n\n  SetEnvVar('TERM', term)\n  SetEnvVar(COLOR_ENV_VAR, color_env_var)\n\n  if color_flag is None:\n    args = []\n  else:\n    args = ['--%s=%s' % (COLOR_FLAG, color_flag)]\n  p = gtest_test_utils.Subprocess([COMMAND] + args)\n  return not p.exited or p.exit_code\n\n\nclass GTestColorTest(gtest_test_utils.TestCase):\n  def testNoEnvVarNoFlag(self):\n    \"\"\"Tests the case when there's neither GTEST_COLOR nor --gtest_color.\"\"\"\n\n    if not IS_WINDOWS:\n      self.assert_(not UsesColor('dumb', None, None))\n      self.assert_(not UsesColor('emacs', None, None))\n      self.assert_(not UsesColor('xterm-mono', None, None))\n      self.assert_(not UsesColor('unknown', None, None))\n      self.assert_(not UsesColor(None, None, None))\n    self.assert_(UsesColor('linux', None, None))\n    self.assert_(UsesColor('cygwin', None, None))\n    self.assert_(UsesColor('xterm', None, None))\n    self.assert_(UsesColor('xterm-color', None, None))\n    self.assert_(UsesColor('xterm-256color', None, None))\n\n  def testFlagOnly(self):\n    \"\"\"Tests the case when there's --gtest_color but not GTEST_COLOR.\"\"\"\n\n    self.assert_(not UsesColor('dumb', None, 'no'))\n    self.assert_(not UsesColor('xterm-color', None, 'no'))\n    if not IS_WINDOWS:\n      self.assert_(not UsesColor('emacs', None, 'auto'))\n    self.assert_(UsesColor('xterm', None, 'auto'))\n    self.assert_(UsesColor('dumb', None, 'yes'))\n    self.assert_(UsesColor('xterm', None, 'yes'))\n\n  def testEnvVarOnly(self):\n    \"\"\"Tests the case when there's GTEST_COLOR but not --gtest_color.\"\"\"\n\n    self.assert_(not UsesColor('dumb', 'no', None))\n    self.assert_(not UsesColor('xterm-color', 'no', None))\n    if not IS_WINDOWS:\n      self.assert_(not UsesColor('dumb', 'auto', None))\n    self.assert_(UsesColor('xterm-color', 'auto', None))\n    self.assert_(UsesColor('dumb', 'yes', None))\n    self.assert_(UsesColor('xterm-color', 'yes', None))\n\n  def testEnvVarAndFlag(self):\n    \"\"\"Tests the case when there are both GTEST_COLOR and --gtest_color.\"\"\"\n\n    self.assert_(not UsesColor('xterm-color', 'no', 'no'))\n    self.assert_(UsesColor('dumb', 'no', 'yes'))\n    self.assert_(UsesColor('xterm-color', 'no', 'auto'))\n\n  def testAliasesOfYesAndNo(self):\n    \"\"\"Tests using aliases in specifying --gtest_color.\"\"\"\n\n    self.assert_(UsesColor('dumb', None, 'true'))\n    self.assert_(UsesColor('dumb', None, 'YES'))\n    self.assert_(UsesColor('dumb', None, 'T'))\n    self.assert_(UsesColor('dumb', None, '1'))\n\n    self.assert_(not UsesColor('xterm', None, 'f'))\n    self.assert_(not UsesColor('xterm', None, 'false'))\n    self.assert_(not UsesColor('xterm', None, '0'))\n    self.assert_(not UsesColor('xterm', None, 'unknown'))\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_color_test_.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// A helper program for testing how Google Test determines whether to use\n// colors in the output.  It prints \"YES\" and returns 1 if Google Test\n// decides to use colors, and prints \"NO\" and returns 0 otherwise.\n\n#include <stdio.h>\n\n#include \"gtest/gtest.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nusing testing::internal::ShouldUseColor;\n\n// The purpose of this is to ensure that the UnitTest singleton is\n// created before main() is entered, and thus that ShouldUseColor()\n// works the same way as in a real Google-Test-based test.  We don't actual\n// run the TEST itself.\nTEST(GTestColorTest, Dummy) {\n}\n\nint main(int argc, char** argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  if (ShouldUseColor(true)) {\n    // Google Test decides to use colors in the output (assuming it\n    // goes to a TTY).\n    printf(\"YES\\n\");\n    return 1;\n  } else {\n    // Google Test decides not to use colors in the output.\n    printf(\"NO\\n\");\n    return 0;\n  }\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_env_var_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Verifies that Google Test correctly parses environment variables.\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport gtest_test_utils\n\n\nIS_WINDOWS = os.name == 'nt'\nIS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux'\n\nCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_env_var_test_')\n\nenviron = os.environ.copy()\n\n\ndef AssertEq(expected, actual):\n  if expected != actual:\n    print 'Expected: %s' % (expected,)\n    print '  Actual: %s' % (actual,)\n    raise AssertionError\n\n\ndef SetEnvVar(env_var, value):\n  \"\"\"Sets the env variable to 'value'; unsets it when 'value' is None.\"\"\"\n\n  if value is not None:\n    environ[env_var] = value\n  elif env_var in environ:\n    del environ[env_var]\n\n\ndef GetFlag(flag):\n  \"\"\"Runs gtest_env_var_test_ and returns its output.\"\"\"\n\n  args = [COMMAND]\n  if flag is not None:\n    args += [flag]\n  return gtest_test_utils.Subprocess(args, env=environ).output\n\n\ndef TestFlag(flag, test_val, default_val):\n  \"\"\"Verifies that the given flag is affected by the corresponding env var.\"\"\"\n\n  env_var = 'GTEST_' + flag.upper()\n  SetEnvVar(env_var, test_val)\n  AssertEq(test_val, GetFlag(flag))\n  SetEnvVar(env_var, None)\n  AssertEq(default_val, GetFlag(flag))\n\n\nclass GTestEnvVarTest(gtest_test_utils.TestCase):\n  def testEnvVarAffectsFlag(self):\n    \"\"\"Tests that environment variable should affect the corresponding flag.\"\"\"\n\n    TestFlag('break_on_failure', '1', '0')\n    TestFlag('color', 'yes', 'auto')\n    TestFlag('filter', 'FooTest.Bar', '*')\n    TestFlag('output', 'xml:tmp/foo.xml', '')\n    TestFlag('print_time', '0', '1')\n    TestFlag('repeat', '999', '1')\n    TestFlag('throw_on_failure', '1', '0')\n    TestFlag('death_test_style', 'threadsafe', 'fast')\n    TestFlag('catch_exceptions', '0', '1')\n\n    if IS_LINUX:\n      TestFlag('death_test_use_fork', '1', '0')\n      TestFlag('stack_trace_depth', '0', '100')\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_env_var_test_.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// A helper program for testing that Google Test parses the environment\n// variables correctly.\n\n#include \"gtest/gtest.h\"\n\n#include <iostream>\n\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nusing ::std::cout;\n\nnamespace testing {\n\n// The purpose of this is to make the test more realistic by ensuring\n// that the UnitTest singleton is created before main() is entered.\n// We don't actual run the TEST itself.\nTEST(GTestEnvVarTest, Dummy) {\n}\n\nvoid PrintFlag(const char* flag) {\n  if (strcmp(flag, \"break_on_failure\") == 0) {\n    cout << GTEST_FLAG(break_on_failure);\n    return;\n  }\n\n  if (strcmp(flag, \"catch_exceptions\") == 0) {\n    cout << GTEST_FLAG(catch_exceptions);\n    return;\n  }\n\n  if (strcmp(flag, \"color\") == 0) {\n    cout << GTEST_FLAG(color);\n    return;\n  }\n\n  if (strcmp(flag, \"death_test_style\") == 0) {\n    cout << GTEST_FLAG(death_test_style);\n    return;\n  }\n\n  if (strcmp(flag, \"death_test_use_fork\") == 0) {\n    cout << GTEST_FLAG(death_test_use_fork);\n    return;\n  }\n\n  if (strcmp(flag, \"filter\") == 0) {\n    cout << GTEST_FLAG(filter);\n    return;\n  }\n\n  if (strcmp(flag, \"output\") == 0) {\n    cout << GTEST_FLAG(output);\n    return;\n  }\n\n  if (strcmp(flag, \"print_time\") == 0) {\n    cout << GTEST_FLAG(print_time);\n    return;\n  }\n\n  if (strcmp(flag, \"repeat\") == 0) {\n    cout << GTEST_FLAG(repeat);\n    return;\n  }\n\n  if (strcmp(flag, \"stack_trace_depth\") == 0) {\n    cout << GTEST_FLAG(stack_trace_depth);\n    return;\n  }\n\n  if (strcmp(flag, \"throw_on_failure\") == 0) {\n    cout << GTEST_FLAG(throw_on_failure);\n    return;\n  }\n\n  cout << \"Invalid flag name \" << flag\n       << \".  Valid names are break_on_failure, color, filter, etc.\\n\";\n  exit(1);\n}\n\n}  // namespace testing\n\nint main(int argc, char** argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  if (argc != 2) {\n    cout << \"Usage: gtest_env_var_test_ NAME_OF_FLAG\\n\";\n    return 1;\n  }\n\n  testing::PrintFlag(argv[1]);\n  return 0;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_environment_test.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Tests using global test environments.\n\n#include <stdlib.h>\n#include <stdio.h>\n#include \"gtest/gtest.h\"\n\n#define GTEST_IMPLEMENTATION_ 1  // Required for the next #include.\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\nGTEST_DECLARE_string_(filter);\n}\n\nnamespace {\n\nenum FailureType {\n  NO_FAILURE, NON_FATAL_FAILURE, FATAL_FAILURE\n};\n\n// For testing using global test environments.\nclass MyEnvironment : public testing::Environment {\n public:\n  MyEnvironment() { Reset(); }\n\n  // Depending on the value of failure_in_set_up_, SetUp() will\n  // generate a non-fatal failure, generate a fatal failure, or\n  // succeed.\n  virtual void SetUp() {\n    set_up_was_run_ = true;\n\n    switch (failure_in_set_up_) {\n      case NON_FATAL_FAILURE:\n        ADD_FAILURE() << \"Expected non-fatal failure in global set-up.\";\n        break;\n      case FATAL_FAILURE:\n        FAIL() << \"Expected fatal failure in global set-up.\";\n        break;\n      default:\n        break;\n    }\n  }\n\n  // Generates a non-fatal failure.\n  virtual void TearDown() {\n    tear_down_was_run_ = true;\n    ADD_FAILURE() << \"Expected non-fatal failure in global tear-down.\";\n  }\n\n  // Resets the state of the environment s.t. it can be reused.\n  void Reset() {\n    failure_in_set_up_ = NO_FAILURE;\n    set_up_was_run_ = false;\n    tear_down_was_run_ = false;\n  }\n\n  // We call this function to set the type of failure SetUp() should\n  // generate.\n  void set_failure_in_set_up(FailureType type) {\n    failure_in_set_up_ = type;\n  }\n\n  // Was SetUp() run?\n  bool set_up_was_run() const { return set_up_was_run_; }\n\n  // Was TearDown() run?\n  bool tear_down_was_run() const { return tear_down_was_run_; }\n\n private:\n  FailureType failure_in_set_up_;\n  bool set_up_was_run_;\n  bool tear_down_was_run_;\n};\n\n// Was the TEST run?\nbool test_was_run;\n\n// The sole purpose of this TEST is to enable us to check whether it\n// was run.\nTEST(FooTest, Bar) {\n  test_was_run = true;\n}\n\n// Prints the message and aborts the program if condition is false.\nvoid Check(bool condition, const char* msg) {\n  if (!condition) {\n    printf(\"FAILED: %s\\n\", msg);\n    testing::internal::posix::Abort();\n  }\n}\n\n// Runs the tests.  Return true iff successful.\n//\n// The 'failure' parameter specifies the type of failure that should\n// be generated by the global set-up.\nint RunAllTests(MyEnvironment* env, FailureType failure) {\n  env->Reset();\n  env->set_failure_in_set_up(failure);\n  test_was_run = false;\n  testing::internal::GetUnitTestImpl()->ClearAdHocTestResult();\n  return RUN_ALL_TESTS();\n}\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  // Registers a global test environment, and verifies that the\n  // registration function returns its argument.\n  MyEnvironment* const env = new MyEnvironment;\n  Check(testing::AddGlobalTestEnvironment(env) == env,\n        \"AddGlobalTestEnvironment() should return its argument.\");\n\n  // Verifies that RUN_ALL_TESTS() runs the tests when the global\n  // set-up is successful.\n  Check(RunAllTests(env, NO_FAILURE) != 0,\n        \"RUN_ALL_TESTS() should return non-zero, as the global tear-down \"\n        \"should generate a failure.\");\n  Check(test_was_run,\n        \"The tests should run, as the global set-up should generate no \"\n        \"failure\");\n  Check(env->tear_down_was_run(),\n        \"The global tear-down should run, as the global set-up was run.\");\n\n  // Verifies that RUN_ALL_TESTS() runs the tests when the global\n  // set-up generates no fatal failure.\n  Check(RunAllTests(env, NON_FATAL_FAILURE) != 0,\n        \"RUN_ALL_TESTS() should return non-zero, as both the global set-up \"\n        \"and the global tear-down should generate a non-fatal failure.\");\n  Check(test_was_run,\n        \"The tests should run, as the global set-up should generate no \"\n        \"fatal failure.\");\n  Check(env->tear_down_was_run(),\n        \"The global tear-down should run, as the global set-up was run.\");\n\n  // Verifies that RUN_ALL_TESTS() runs no test when the global set-up\n  // generates a fatal failure.\n  Check(RunAllTests(env, FATAL_FAILURE) != 0,\n        \"RUN_ALL_TESTS() should return non-zero, as the global set-up \"\n        \"should generate a fatal failure.\");\n  Check(!test_was_run,\n        \"The tests should not run, as the global set-up should generate \"\n        \"a fatal failure.\");\n  Check(env->tear_down_was_run(),\n        \"The global tear-down should run, as the global set-up was run.\");\n\n  // Verifies that RUN_ALL_TESTS() doesn't do global set-up or\n  // tear-down when there is no test to run.\n  testing::GTEST_FLAG(filter) = \"-*\";\n  Check(RunAllTests(env, NO_FAILURE) == 0,\n        \"RUN_ALL_TESTS() should return zero, as there is no test to run.\");\n  Check(!env->set_up_was_run(),\n        \"The global set-up should not run, as there is no test to run.\");\n  Check(!env->tear_down_was_run(),\n        \"The global tear-down should not run, \"\n        \"as the global set-up was not run.\");\n\n  printf(\"PASS\\n\");\n  return 0;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_filter_unittest.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2005 Google Inc. All Rights Reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test for Google Test test filters.\n\nA user can specify which test(s) in a Google Test program to run via either\nthe GTEST_FILTER environment variable or the --gtest_filter flag.\nThis script tests such functionality by invoking\ngtest_filter_unittest_ (a program written with Google Test) with different\nenvironments and command line flags.\n\nNote that test sharding may also influence which tests are filtered. Therefore,\nwe test that here also.\n\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport re\nimport sets\nimport sys\n\nimport gtest_test_utils\n\n# Constants.\n\n# Checks if this platform can pass empty environment variables to child\n# processes.  We set an env variable to an empty string and invoke a python\n# script in a subprocess to print whether the variable is STILL in\n# os.environ.  We then use 'eval' to parse the child's output so that an\n# exception is thrown if the input is anything other than 'True' nor 'False'.\nos.environ['EMPTY_VAR'] = ''\nchild = gtest_test_utils.Subprocess(\n    [sys.executable, '-c', 'import os; print \\'EMPTY_VAR\\' in os.environ'])\nCAN_PASS_EMPTY_ENV = eval(child.output)\n\n\n# Check if this platform can unset environment variables in child processes.\n# We set an env variable to a non-empty string, unset it, and invoke\n# a python script in a subprocess to print whether the variable\n# is NO LONGER in os.environ.\n# We use 'eval' to parse the child's output so that an exception\n# is thrown if the input is neither 'True' nor 'False'.\nos.environ['UNSET_VAR'] = 'X'\ndel os.environ['UNSET_VAR']\nchild = gtest_test_utils.Subprocess(\n    [sys.executable, '-c', 'import os; print \\'UNSET_VAR\\' not in os.environ'])\nCAN_UNSET_ENV = eval(child.output)\n\n\n# Checks if we should test with an empty filter. This doesn't\n# make sense on platforms that cannot pass empty env variables (Win32)\n# and on platforms that cannot unset variables (since we cannot tell\n# the difference between \"\" and NULL -- Borland and Solaris < 5.10)\nCAN_TEST_EMPTY_FILTER = (CAN_PASS_EMPTY_ENV and CAN_UNSET_ENV)\n\n\n# The environment variable for specifying the test filters.\nFILTER_ENV_VAR = 'GTEST_FILTER'\n\n# The environment variables for test sharding.\nTOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS'\nSHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX'\nSHARD_STATUS_FILE_ENV_VAR = 'GTEST_SHARD_STATUS_FILE'\n\n# The command line flag for specifying the test filters.\nFILTER_FLAG = 'gtest_filter'\n\n# The command line flag for including disabled tests.\nALSO_RUN_DISABED_TESTS_FLAG = 'gtest_also_run_disabled_tests'\n\n# Command to run the gtest_filter_unittest_ program.\nCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_filter_unittest_')\n\n# Regex for determining whether parameterized tests are enabled in the binary.\nPARAM_TEST_REGEX = re.compile(r'/ParamTest')\n\n# Regex for parsing test case names from Google Test's output.\nTEST_CASE_REGEX = re.compile(r'^\\[\\-+\\] \\d+ tests? from (\\w+(/\\w+)?)')\n\n# Regex for parsing test names from Google Test's output.\nTEST_REGEX = re.compile(r'^\\[\\s*RUN\\s*\\].*\\.(\\w+(/\\w+)?)')\n\n# The command line flag to tell Google Test to output the list of tests it\n# will run.\nLIST_TESTS_FLAG = '--gtest_list_tests'\n\n# Indicates whether Google Test supports death tests.\nSUPPORTS_DEATH_TESTS = 'HasDeathTest' in gtest_test_utils.Subprocess(\n    [COMMAND, LIST_TESTS_FLAG]).output\n\n# Full names of all tests in gtest_filter_unittests_.\nPARAM_TESTS = [\n    'SeqP/ParamTest.TestX/0',\n    'SeqP/ParamTest.TestX/1',\n    'SeqP/ParamTest.TestY/0',\n    'SeqP/ParamTest.TestY/1',\n    'SeqQ/ParamTest.TestX/0',\n    'SeqQ/ParamTest.TestX/1',\n    'SeqQ/ParamTest.TestY/0',\n    'SeqQ/ParamTest.TestY/1',\n    ]\n\nDISABLED_TESTS = [\n    'BarTest.DISABLED_TestFour',\n    'BarTest.DISABLED_TestFive',\n    'BazTest.DISABLED_TestC',\n    'DISABLED_FoobarTest.Test1',\n    'DISABLED_FoobarTest.DISABLED_Test2',\n    'DISABLED_FoobarbazTest.TestA',\n    ]\n\nif SUPPORTS_DEATH_TESTS:\n  DEATH_TESTS = [\n    'HasDeathTest.Test1',\n    'HasDeathTest.Test2',\n    ]\nelse:\n  DEATH_TESTS = []\n\n# All the non-disabled tests.\nACTIVE_TESTS = [\n    'FooTest.Abc',\n    'FooTest.Xyz',\n\n    'BarTest.TestOne',\n    'BarTest.TestTwo',\n    'BarTest.TestThree',\n\n    'BazTest.TestOne',\n    'BazTest.TestA',\n    'BazTest.TestB',\n    ] + DEATH_TESTS + PARAM_TESTS\n\nparam_tests_present = None\n\n# Utilities.\n\nenviron = os.environ.copy()\n\n\ndef SetEnvVar(env_var, value):\n  \"\"\"Sets the env variable to 'value'; unsets it when 'value' is None.\"\"\"\n\n  if value is not None:\n    environ[env_var] = value\n  elif env_var in environ:\n    del environ[env_var]\n\n\ndef RunAndReturnOutput(args = None):\n  \"\"\"Runs the test program and returns its output.\"\"\"\n\n  return gtest_test_utils.Subprocess([COMMAND] + (args or []),\n                                     env=environ).output\n\n\ndef RunAndExtractTestList(args = None):\n  \"\"\"Runs the test program and returns its exit code and a list of tests run.\"\"\"\n\n  p = gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ)\n  tests_run = []\n  test_case = ''\n  test = ''\n  for line in p.output.split('\\n'):\n    match = TEST_CASE_REGEX.match(line)\n    if match is not None:\n      test_case = match.group(1)\n    else:\n      match = TEST_REGEX.match(line)\n      if match is not None:\n        test = match.group(1)\n        tests_run.append(test_case + '.' + test)\n  return (tests_run, p.exit_code)\n\n\ndef InvokeWithModifiedEnv(extra_env, function, *args, **kwargs):\n  \"\"\"Runs the given function and arguments in a modified environment.\"\"\"\n  try:\n    original_env = environ.copy()\n    environ.update(extra_env)\n    return function(*args, **kwargs)\n  finally:\n    environ.clear()\n    environ.update(original_env)\n\n\ndef RunWithSharding(total_shards, shard_index, command):\n  \"\"\"Runs a test program shard and returns exit code and a list of tests run.\"\"\"\n\n  extra_env = {SHARD_INDEX_ENV_VAR: str(shard_index),\n               TOTAL_SHARDS_ENV_VAR: str(total_shards)}\n  return InvokeWithModifiedEnv(extra_env, RunAndExtractTestList, command)\n\n# The unit test.\n\n\nclass GTestFilterUnitTest(gtest_test_utils.TestCase):\n  \"\"\"Tests the env variable or the command line flag to filter tests.\"\"\"\n\n  # Utilities.\n\n  def AssertSetEqual(self, lhs, rhs):\n    \"\"\"Asserts that two sets are equal.\"\"\"\n\n    for elem in lhs:\n      self.assert_(elem in rhs, '%s in %s' % (elem, rhs))\n\n    for elem in rhs:\n      self.assert_(elem in lhs, '%s in %s' % (elem, lhs))\n\n  def AssertPartitionIsValid(self, set_var, list_of_sets):\n    \"\"\"Asserts that list_of_sets is a valid partition of set_var.\"\"\"\n\n    full_partition = []\n    for slice_var in list_of_sets:\n      full_partition.extend(slice_var)\n    self.assertEqual(len(set_var), len(full_partition))\n    self.assertEqual(sets.Set(set_var), sets.Set(full_partition))\n\n  def AdjustForParameterizedTests(self, tests_to_run):\n    \"\"\"Adjust tests_to_run in case value parameterized tests are disabled.\"\"\"\n\n    global param_tests_present\n    if not param_tests_present:\n      return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS))\n    else:\n      return tests_to_run\n\n  def RunAndVerify(self, gtest_filter, tests_to_run):\n    \"\"\"Checks that the binary runs correct set of tests for a given filter.\"\"\"\n\n    tests_to_run = self.AdjustForParameterizedTests(tests_to_run)\n\n    # First, tests using the environment variable.\n\n    # Windows removes empty variables from the environment when passing it\n    # to a new process.  This means it is impossible to pass an empty filter\n    # into a process using the environment variable.  However, we can still\n    # test the case when the variable is not supplied (i.e., gtest_filter is\n    # None).\n    # pylint: disable-msg=C6403\n    if CAN_TEST_EMPTY_FILTER or gtest_filter != '':\n      SetEnvVar(FILTER_ENV_VAR, gtest_filter)\n      tests_run = RunAndExtractTestList()[0]\n      SetEnvVar(FILTER_ENV_VAR, None)\n      self.AssertSetEqual(tests_run, tests_to_run)\n    # pylint: enable-msg=C6403\n\n    # Next, tests using the command line flag.\n\n    if gtest_filter is None:\n      args = []\n    else:\n      args = ['--%s=%s' % (FILTER_FLAG, gtest_filter)]\n\n    tests_run = RunAndExtractTestList(args)[0]\n    self.AssertSetEqual(tests_run, tests_to_run)\n\n  def RunAndVerifyWithSharding(self, gtest_filter, total_shards, tests_to_run,\n                               args=None, check_exit_0=False):\n    \"\"\"Checks that binary runs correct tests for the given filter and shard.\n\n    Runs all shards of gtest_filter_unittest_ with the given filter, and\n    verifies that the right set of tests were run. The union of tests run\n    on each shard should be identical to tests_to_run, without duplicates.\n\n    Args:\n      gtest_filter: A filter to apply to the tests.\n      total_shards: A total number of shards to split test run into.\n      tests_to_run: A set of tests expected to run.\n      args   :      Arguments to pass to the to the test binary.\n      check_exit_0: When set to a true value, make sure that all shards\n                    return 0.\n    \"\"\"\n\n    tests_to_run = self.AdjustForParameterizedTests(tests_to_run)\n\n    # Windows removes empty variables from the environment when passing it\n    # to a new process.  This means it is impossible to pass an empty filter\n    # into a process using the environment variable.  However, we can still\n    # test the case when the variable is not supplied (i.e., gtest_filter is\n    # None).\n    # pylint: disable-msg=C6403\n    if CAN_TEST_EMPTY_FILTER or gtest_filter != '':\n      SetEnvVar(FILTER_ENV_VAR, gtest_filter)\n      partition = []\n      for i in range(0, total_shards):\n        (tests_run, exit_code) = RunWithSharding(total_shards, i, args)\n        if check_exit_0:\n          self.assertEqual(0, exit_code)\n        partition.append(tests_run)\n\n      self.AssertPartitionIsValid(tests_to_run, partition)\n      SetEnvVar(FILTER_ENV_VAR, None)\n    # pylint: enable-msg=C6403\n\n  def RunAndVerifyAllowingDisabled(self, gtest_filter, tests_to_run):\n    \"\"\"Checks that the binary runs correct set of tests for the given filter.\n\n    Runs gtest_filter_unittest_ with the given filter, and enables\n    disabled tests. Verifies that the right set of tests were run.\n\n    Args:\n      gtest_filter: A filter to apply to the tests.\n      tests_to_run: A set of tests expected to run.\n    \"\"\"\n\n    tests_to_run = self.AdjustForParameterizedTests(tests_to_run)\n\n    # Construct the command line.\n    args = ['--%s' % ALSO_RUN_DISABED_TESTS_FLAG]\n    if gtest_filter is not None:\n      args.append('--%s=%s' % (FILTER_FLAG, gtest_filter))\n\n    tests_run = RunAndExtractTestList(args)[0]\n    self.AssertSetEqual(tests_run, tests_to_run)\n\n  def setUp(self):\n    \"\"\"Sets up test case.\n\n    Determines whether value-parameterized tests are enabled in the binary and\n    sets the flags accordingly.\n    \"\"\"\n\n    global param_tests_present\n    if param_tests_present is None:\n      param_tests_present = PARAM_TEST_REGEX.search(\n          RunAndReturnOutput()) is not None\n\n  def testDefaultBehavior(self):\n    \"\"\"Tests the behavior of not specifying the filter.\"\"\"\n\n    self.RunAndVerify(None, ACTIVE_TESTS)\n\n  def testDefaultBehaviorWithShards(self):\n    \"\"\"Tests the behavior without the filter, with sharding enabled.\"\"\"\n\n    self.RunAndVerifyWithSharding(None, 1, ACTIVE_TESTS)\n    self.RunAndVerifyWithSharding(None, 2, ACTIVE_TESTS)\n    self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) - 1, ACTIVE_TESTS)\n    self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS), ACTIVE_TESTS)\n    self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) + 1, ACTIVE_TESTS)\n\n  def testEmptyFilter(self):\n    \"\"\"Tests an empty filter.\"\"\"\n\n    self.RunAndVerify('', [])\n    self.RunAndVerifyWithSharding('', 1, [])\n    self.RunAndVerifyWithSharding('', 2, [])\n\n  def testBadFilter(self):\n    \"\"\"Tests a filter that matches nothing.\"\"\"\n\n    self.RunAndVerify('BadFilter', [])\n    self.RunAndVerifyAllowingDisabled('BadFilter', [])\n\n  def testFullName(self):\n    \"\"\"Tests filtering by full name.\"\"\"\n\n    self.RunAndVerify('FooTest.Xyz', ['FooTest.Xyz'])\n    self.RunAndVerifyAllowingDisabled('FooTest.Xyz', ['FooTest.Xyz'])\n    self.RunAndVerifyWithSharding('FooTest.Xyz', 5, ['FooTest.Xyz'])\n\n  def testUniversalFilters(self):\n    \"\"\"Tests filters that match everything.\"\"\"\n\n    self.RunAndVerify('*', ACTIVE_TESTS)\n    self.RunAndVerify('*.*', ACTIVE_TESTS)\n    self.RunAndVerifyWithSharding('*.*', len(ACTIVE_TESTS) - 3, ACTIVE_TESTS)\n    self.RunAndVerifyAllowingDisabled('*', ACTIVE_TESTS + DISABLED_TESTS)\n    self.RunAndVerifyAllowingDisabled('*.*', ACTIVE_TESTS + DISABLED_TESTS)\n\n  def testFilterByTestCase(self):\n    \"\"\"Tests filtering by test case name.\"\"\"\n\n    self.RunAndVerify('FooTest.*', ['FooTest.Abc', 'FooTest.Xyz'])\n\n    BAZ_TESTS = ['BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB']\n    self.RunAndVerify('BazTest.*', BAZ_TESTS)\n    self.RunAndVerifyAllowingDisabled('BazTest.*',\n                                      BAZ_TESTS + ['BazTest.DISABLED_TestC'])\n\n  def testFilterByTest(self):\n    \"\"\"Tests filtering by test name.\"\"\"\n\n    self.RunAndVerify('*.TestOne', ['BarTest.TestOne', 'BazTest.TestOne'])\n\n  def testFilterDisabledTests(self):\n    \"\"\"Select only the disabled tests to run.\"\"\"\n\n    self.RunAndVerify('DISABLED_FoobarTest.Test1', [])\n    self.RunAndVerifyAllowingDisabled('DISABLED_FoobarTest.Test1',\n                                      ['DISABLED_FoobarTest.Test1'])\n\n    self.RunAndVerify('*DISABLED_*', [])\n    self.RunAndVerifyAllowingDisabled('*DISABLED_*', DISABLED_TESTS)\n\n    self.RunAndVerify('*.DISABLED_*', [])\n    self.RunAndVerifyAllowingDisabled('*.DISABLED_*', [\n        'BarTest.DISABLED_TestFour',\n        'BarTest.DISABLED_TestFive',\n        'BazTest.DISABLED_TestC',\n        'DISABLED_FoobarTest.DISABLED_Test2',\n        ])\n\n    self.RunAndVerify('DISABLED_*', [])\n    self.RunAndVerifyAllowingDisabled('DISABLED_*', [\n        'DISABLED_FoobarTest.Test1',\n        'DISABLED_FoobarTest.DISABLED_Test2',\n        'DISABLED_FoobarbazTest.TestA',\n        ])\n\n  def testWildcardInTestCaseName(self):\n    \"\"\"Tests using wildcard in the test case name.\"\"\"\n\n    self.RunAndVerify('*a*.*', [\n        'BarTest.TestOne',\n        'BarTest.TestTwo',\n        'BarTest.TestThree',\n\n        'BazTest.TestOne',\n        'BazTest.TestA',\n        'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS)\n\n  def testWildcardInTestName(self):\n    \"\"\"Tests using wildcard in the test name.\"\"\"\n\n    self.RunAndVerify('*.*A*', ['FooTest.Abc', 'BazTest.TestA'])\n\n  def testFilterWithoutDot(self):\n    \"\"\"Tests a filter that has no '.' in it.\"\"\"\n\n    self.RunAndVerify('*z*', [\n        'FooTest.Xyz',\n\n        'BazTest.TestOne',\n        'BazTest.TestA',\n        'BazTest.TestB',\n        ])\n\n  def testTwoPatterns(self):\n    \"\"\"Tests filters that consist of two patterns.\"\"\"\n\n    self.RunAndVerify('Foo*.*:*A*', [\n        'FooTest.Abc',\n        'FooTest.Xyz',\n\n        'BazTest.TestA',\n        ])\n\n    # An empty pattern + a non-empty one\n    self.RunAndVerify(':*A*', ['FooTest.Abc', 'BazTest.TestA'])\n\n  def testThreePatterns(self):\n    \"\"\"Tests filters that consist of three patterns.\"\"\"\n\n    self.RunAndVerify('*oo*:*A*:*One', [\n        'FooTest.Abc',\n        'FooTest.Xyz',\n\n        'BarTest.TestOne',\n\n        'BazTest.TestOne',\n        'BazTest.TestA',\n        ])\n\n    # The 2nd pattern is empty.\n    self.RunAndVerify('*oo*::*One', [\n        'FooTest.Abc',\n        'FooTest.Xyz',\n\n        'BarTest.TestOne',\n\n        'BazTest.TestOne',\n        ])\n\n    # The last 2 patterns are empty.\n    self.RunAndVerify('*oo*::', [\n        'FooTest.Abc',\n        'FooTest.Xyz',\n        ])\n\n  def testNegativeFilters(self):\n    self.RunAndVerify('*-BazTest.TestOne', [\n        'FooTest.Abc',\n        'FooTest.Xyz',\n\n        'BarTest.TestOne',\n        'BarTest.TestTwo',\n        'BarTest.TestThree',\n\n        'BazTest.TestA',\n        'BazTest.TestB',\n        ] + DEATH_TESTS + PARAM_TESTS)\n\n    self.RunAndVerify('*-FooTest.Abc:BazTest.*', [\n        'FooTest.Xyz',\n\n        'BarTest.TestOne',\n        'BarTest.TestTwo',\n        'BarTest.TestThree',\n        ] + DEATH_TESTS + PARAM_TESTS)\n\n    self.RunAndVerify('BarTest.*-BarTest.TestOne', [\n        'BarTest.TestTwo',\n        'BarTest.TestThree',\n        ])\n\n    # Tests without leading '*'.\n    self.RunAndVerify('-FooTest.Abc:FooTest.Xyz:BazTest.*', [\n        'BarTest.TestOne',\n        'BarTest.TestTwo',\n        'BarTest.TestThree',\n        ] + DEATH_TESTS + PARAM_TESTS)\n\n    # Value parameterized tests.\n    self.RunAndVerify('*/*', PARAM_TESTS)\n\n    # Value parameterized tests filtering by the sequence name.\n    self.RunAndVerify('SeqP/*', [\n        'SeqP/ParamTest.TestX/0',\n        'SeqP/ParamTest.TestX/1',\n        'SeqP/ParamTest.TestY/0',\n        'SeqP/ParamTest.TestY/1',\n        ])\n\n    # Value parameterized tests filtering by the test name.\n    self.RunAndVerify('*/0', [\n        'SeqP/ParamTest.TestX/0',\n        'SeqP/ParamTest.TestY/0',\n        'SeqQ/ParamTest.TestX/0',\n        'SeqQ/ParamTest.TestY/0',\n        ])\n\n  def testFlagOverridesEnvVar(self):\n    \"\"\"Tests that the filter flag overrides the filtering env. variable.\"\"\"\n\n    SetEnvVar(FILTER_ENV_VAR, 'Foo*')\n    args = ['--%s=%s' % (FILTER_FLAG, '*One')]\n    tests_run = RunAndExtractTestList(args)[0]\n    SetEnvVar(FILTER_ENV_VAR, None)\n\n    self.AssertSetEqual(tests_run, ['BarTest.TestOne', 'BazTest.TestOne'])\n\n  def testShardStatusFileIsCreated(self):\n    \"\"\"Tests that the shard file is created if specified in the environment.\"\"\"\n\n    shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),\n                                     'shard_status_file')\n    self.assert_(not os.path.exists(shard_status_file))\n\n    extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}\n    try:\n      InvokeWithModifiedEnv(extra_env, RunAndReturnOutput)\n    finally:\n      self.assert_(os.path.exists(shard_status_file))\n      os.remove(shard_status_file)\n\n  def testShardStatusFileIsCreatedWithListTests(self):\n    \"\"\"Tests that the shard file is created with the \"list_tests\" flag.\"\"\"\n\n    shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),\n                                     'shard_status_file2')\n    self.assert_(not os.path.exists(shard_status_file))\n\n    extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}\n    try:\n      output = InvokeWithModifiedEnv(extra_env,\n                                     RunAndReturnOutput,\n                                     [LIST_TESTS_FLAG])\n    finally:\n      # This assertion ensures that Google Test enumerated the tests as\n      # opposed to running them.\n      self.assert_('[==========]' not in output,\n                   'Unexpected output during test enumeration.\\n'\n                   'Please ensure that LIST_TESTS_FLAG is assigned the\\n'\n                   'correct flag value for listing Google Test tests.')\n\n      self.assert_(os.path.exists(shard_status_file))\n      os.remove(shard_status_file)\n\n  if SUPPORTS_DEATH_TESTS:\n    def testShardingWorksWithDeathTests(self):\n      \"\"\"Tests integration with death tests and sharding.\"\"\"\n\n      gtest_filter = 'HasDeathTest.*:SeqP/*'\n      expected_tests = [\n          'HasDeathTest.Test1',\n          'HasDeathTest.Test2',\n\n          'SeqP/ParamTest.TestX/0',\n          'SeqP/ParamTest.TestX/1',\n          'SeqP/ParamTest.TestY/0',\n          'SeqP/ParamTest.TestY/1',\n          ]\n\n      for flag in ['--gtest_death_test_style=threadsafe',\n                   '--gtest_death_test_style=fast']:\n        self.RunAndVerifyWithSharding(gtest_filter, 3, expected_tests,\n                                      check_exit_0=True, args=[flag])\n        self.RunAndVerifyWithSharding(gtest_filter, 5, expected_tests,\n                                      check_exit_0=True, args=[flag])\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_filter_unittest_.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Unit test for Google Test test filters.\n//\n// A user can specify which test(s) in a Google Test program to run via\n// either the GTEST_FILTER environment variable or the --gtest_filter\n// flag.  This is used for testing such functionality.\n//\n// The program will be invoked from a Python unit test.  Don't run it\n// directly.\n\n#include \"gtest/gtest.h\"\n\nnamespace {\n\n// Test case FooTest.\n\nclass FooTest : public testing::Test {\n};\n\nTEST_F(FooTest, Abc) {\n}\n\nTEST_F(FooTest, Xyz) {\n  FAIL() << \"Expected failure.\";\n}\n\n// Test case BarTest.\n\nTEST(BarTest, TestOne) {\n}\n\nTEST(BarTest, TestTwo) {\n}\n\nTEST(BarTest, TestThree) {\n}\n\nTEST(BarTest, DISABLED_TestFour) {\n  FAIL() << \"Expected failure.\";\n}\n\nTEST(BarTest, DISABLED_TestFive) {\n  FAIL() << \"Expected failure.\";\n}\n\n// Test case BazTest.\n\nTEST(BazTest, TestOne) {\n  FAIL() << \"Expected failure.\";\n}\n\nTEST(BazTest, TestA) {\n}\n\nTEST(BazTest, TestB) {\n}\n\nTEST(BazTest, DISABLED_TestC) {\n  FAIL() << \"Expected failure.\";\n}\n\n// Test case HasDeathTest\n\nTEST(HasDeathTest, Test1) {\n  EXPECT_DEATH_IF_SUPPORTED(exit(1), \".*\");\n}\n\n// We need at least two death tests to make sure that the all death tests\n// aren't on the first shard.\nTEST(HasDeathTest, Test2) {\n  EXPECT_DEATH_IF_SUPPORTED(exit(1), \".*\");\n}\n\n// Test case FoobarTest\n\nTEST(DISABLED_FoobarTest, Test1) {\n  FAIL() << \"Expected failure.\";\n}\n\nTEST(DISABLED_FoobarTest, DISABLED_Test2) {\n  FAIL() << \"Expected failure.\";\n}\n\n// Test case FoobarbazTest\n\nTEST(DISABLED_FoobarbazTest, TestA) {\n  FAIL() << \"Expected failure.\";\n}\n\n#if GTEST_HAS_PARAM_TEST\nclass ParamTest : public testing::TestWithParam<int> {\n};\n\nTEST_P(ParamTest, TestX) {\n}\n\nTEST_P(ParamTest, TestY) {\n}\n\nINSTANTIATE_TEST_CASE_P(SeqP, ParamTest, testing::Values(1, 2));\nINSTANTIATE_TEST_CASE_P(SeqQ, ParamTest, testing::Values(5, 6));\n#endif  // GTEST_HAS_PARAM_TEST\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  ::testing::InitGoogleTest(&argc, argv);\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_help_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2009, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Tests the --help flag of Google C++ Testing Framework.\n\nSYNOPSIS\n       gtest_help_test.py --build_dir=BUILD/DIR\n         # where BUILD/DIR contains the built gtest_help_test_ file.\n       gtest_help_test.py\n\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport re\nimport gtest_test_utils\n\n\nIS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux'\nIS_WINDOWS = os.name == 'nt'\n\nPROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_')\nFLAG_PREFIX = '--gtest_'\nDEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style'\nSTREAM_RESULT_TO_FLAG = FLAG_PREFIX + 'stream_result_to'\nUNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing'\nLIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'\nINCORRECT_FLAG_VARIANTS = [re.sub('^--', '-', LIST_TESTS_FLAG),\n                           re.sub('^--', '/', LIST_TESTS_FLAG),\n                           re.sub('_', '-', LIST_TESTS_FLAG)]\nINTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing'\n\nSUPPORTS_DEATH_TESTS = \"DeathTest\" in gtest_test_utils.Subprocess(\n    [PROGRAM_PATH, LIST_TESTS_FLAG]).output\n\n# The help message must match this regex.\nHELP_REGEX = re.compile(\n    FLAG_PREFIX + r'list_tests.*' +\n    FLAG_PREFIX + r'filter=.*' +\n    FLAG_PREFIX + r'also_run_disabled_tests.*' +\n    FLAG_PREFIX + r'repeat=.*' +\n    FLAG_PREFIX + r'shuffle.*' +\n    FLAG_PREFIX + r'random_seed=.*' +\n    FLAG_PREFIX + r'color=.*' +\n    FLAG_PREFIX + r'print_time.*' +\n    FLAG_PREFIX + r'output=.*' +\n    FLAG_PREFIX + r'break_on_failure.*' +\n    FLAG_PREFIX + r'throw_on_failure.*' +\n    FLAG_PREFIX + r'catch_exceptions=0.*',\n    re.DOTALL)\n\n\ndef RunWithFlag(flag):\n  \"\"\"Runs gtest_help_test_ with the given flag.\n\n  Returns:\n    the exit code and the text output as a tuple.\n  Args:\n    flag: the command-line flag to pass to gtest_help_test_, or None.\n  \"\"\"\n\n  if flag is None:\n    command = [PROGRAM_PATH]\n  else:\n    command = [PROGRAM_PATH, flag]\n  child = gtest_test_utils.Subprocess(command)\n  return child.exit_code, child.output\n\n\nclass GTestHelpTest(gtest_test_utils.TestCase):\n  \"\"\"Tests the --help flag and its equivalent forms.\"\"\"\n\n  def TestHelpFlag(self, flag):\n    \"\"\"Verifies correct behavior when help flag is specified.\n\n    The right message must be printed and the tests must\n    skipped when the given flag is specified.\n\n    Args:\n      flag:  A flag to pass to the binary or None.\n    \"\"\"\n\n    exit_code, output = RunWithFlag(flag)\n    self.assertEquals(0, exit_code)\n    self.assert_(HELP_REGEX.search(output), output)\n\n    if IS_LINUX:\n      self.assert_(STREAM_RESULT_TO_FLAG in output, output)\n    else:\n      self.assert_(STREAM_RESULT_TO_FLAG not in output, output)\n\n    if SUPPORTS_DEATH_TESTS and not IS_WINDOWS:\n      self.assert_(DEATH_TEST_STYLE_FLAG in output, output)\n    else:\n      self.assert_(DEATH_TEST_STYLE_FLAG not in output, output)\n\n  def TestNonHelpFlag(self, flag):\n    \"\"\"Verifies correct behavior when no help flag is specified.\n\n    Verifies that when no help flag is specified, the tests are run\n    and the help message is not printed.\n\n    Args:\n      flag:  A flag to pass to the binary or None.\n    \"\"\"\n\n    exit_code, output = RunWithFlag(flag)\n    self.assert_(exit_code != 0)\n    self.assert_(not HELP_REGEX.search(output), output)\n\n  def testPrintsHelpWithFullFlag(self):\n    self.TestHelpFlag('--help')\n\n  def testPrintsHelpWithShortFlag(self):\n    self.TestHelpFlag('-h')\n\n  def testPrintsHelpWithQuestionFlag(self):\n    self.TestHelpFlag('-?')\n\n  def testPrintsHelpWithWindowsStyleQuestionFlag(self):\n    self.TestHelpFlag('/?')\n\n  def testPrintsHelpWithUnrecognizedGoogleTestFlag(self):\n    self.TestHelpFlag(UNKNOWN_FLAG)\n\n  def testPrintsHelpWithIncorrectFlagStyle(self):\n    for incorrect_flag in INCORRECT_FLAG_VARIANTS:\n      self.TestHelpFlag(incorrect_flag)\n\n  def testRunsTestsWithoutHelpFlag(self):\n    \"\"\"Verifies that when no help flag is specified, the tests are run\n    and the help message is not printed.\"\"\"\n\n    self.TestNonHelpFlag(None)\n\n  def testRunsTestsWithGtestInternalFlag(self):\n    \"\"\"Verifies that the tests are run and no help message is printed when\n    a flag starting with Google Test prefix and 'internal_' is supplied.\"\"\"\n\n    self.TestNonHelpFlag(INTERNAL_FLAG_FOR_TESTING)\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_help_test_.cc",
    "content": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// This program is meant to be run by gtest_help_test.py.  Do not run\n// it directly.\n\n#include \"gtest/gtest.h\"\n\n// When a help flag is specified, this program should skip the tests\n// and exit with 0; otherwise the following test will be executed,\n// causing this program to exit with a non-zero code.\nTEST(HelpFlagTest, ShouldNotBeRun) {\n  ASSERT_TRUE(false) << \"Tests shouldn't be run when --help is specified.\";\n}\n\n#if GTEST_HAS_DEATH_TEST\nTEST(DeathTest, UsedByPythonScriptToDetectSupportForDeathTestsInThisBinary) {}\n#endif\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_list_tests_unittest.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test for Google Test's --gtest_list_tests flag.\n\nA user can ask Google Test to list all tests by specifying the\n--gtest_list_tests flag.  This script tests such functionality\nby invoking gtest_list_tests_unittest_ (a program written with\nGoogle Test) the command line flags.\n\"\"\"\n\n__author__ = 'phanna@google.com (Patrick Hanna)'\n\nimport gtest_test_utils\nimport re\n\n\n# Constants.\n\n# The command line flag for enabling/disabling listing all tests.\nLIST_TESTS_FLAG = 'gtest_list_tests'\n\n# Path to the gtest_list_tests_unittest_ program.\nEXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')\n\n# The expected output when running gtest_list_tests_unittest_ with\n# --gtest_list_tests\nEXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r\"\"\"FooDeathTest\\.\n  Test1\nFoo\\.\n  Bar1\n  Bar2\n  DISABLED_Bar3\nAbc\\.\n  Xyz\n  Def\nFooBar\\.\n  Baz\nFooTest\\.\n  Test1\n  DISABLED_Test2\n  Test3\nTypedTest/0\\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\\.\\.\\.\n  TestA\n  TestB\nTypedTest/1\\.  # TypeParam = int\\s*\\*\n  TestA\n  TestB\nTypedTest/2\\.  # TypeParam = .*MyArray<bool,\\s*42>\n  TestA\n  TestB\nMy/TypeParamTest/0\\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\\.\\.\\.\n  TestA\n  TestB\nMy/TypeParamTest/1\\.  # TypeParam = int\\s*\\*\n  TestA\n  TestB\nMy/TypeParamTest/2\\.  # TypeParam = .*MyArray<bool,\\s*42>\n  TestA\n  TestB\nMyInstantiation/ValueParamTest\\.\n  TestA/0  # GetParam\\(\\) = one line\n  TestA/1  # GetParam\\(\\) = two\\\\nlines\n  TestA/2  # GetParam\\(\\) = a very\\\\nlo{241}\\.\\.\\.\n  TestB/0  # GetParam\\(\\) = one line\n  TestB/1  # GetParam\\(\\) = two\\\\nlines\n  TestB/2  # GetParam\\(\\) = a very\\\\nlo{241}\\.\\.\\.\n\"\"\")\n\n# The expected output when running gtest_list_tests_unittest_ with\n# --gtest_list_tests and --gtest_filter=Foo*.\nEXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r\"\"\"FooDeathTest\\.\n  Test1\nFoo\\.\n  Bar1\n  Bar2\n  DISABLED_Bar3\nFooBar\\.\n  Baz\nFooTest\\.\n  Test1\n  DISABLED_Test2\n  Test3\n\"\"\")\n\n# Utilities.\n\n\ndef Run(args):\n  \"\"\"Runs gtest_list_tests_unittest_ and returns the list of tests printed.\"\"\"\n\n  return gtest_test_utils.Subprocess([EXE_PATH] + args,\n                                     capture_stderr=False).output\n\n\n# The unit test.\n\nclass GTestListTestsUnitTest(gtest_test_utils.TestCase):\n  \"\"\"Tests using the --gtest_list_tests flag to list all tests.\"\"\"\n\n  def RunAndVerify(self, flag_value, expected_output_re, other_flag):\n    \"\"\"Runs gtest_list_tests_unittest_ and verifies that it prints\n    the correct tests.\n\n    Args:\n      flag_value:         value of the --gtest_list_tests flag;\n                          None if the flag should not be present.\n      expected_output_re: regular expression that matches the expected\n                          output after running command;\n      other_flag:         a different flag to be passed to command\n                          along with gtest_list_tests;\n                          None if the flag should not be present.\n    \"\"\"\n\n    if flag_value is None:\n      flag = ''\n      flag_expression = 'not set'\n    elif flag_value == '0':\n      flag = '--%s=0' % LIST_TESTS_FLAG\n      flag_expression = '0'\n    else:\n      flag = '--%s' % LIST_TESTS_FLAG\n      flag_expression = '1'\n\n    args = [flag]\n\n    if other_flag is not None:\n      args += [other_flag]\n\n    output = Run(args)\n\n    if expected_output_re:\n      self.assert_(\n          expected_output_re.match(output),\n          ('when %s is %s, the output of \"%s\" is \"%s\",\\n'\n           'which does not match regex \"%s\"' %\n           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output,\n            expected_output_re.pattern)))\n    else:\n      self.assert_(\n          not EXPECTED_OUTPUT_NO_FILTER_RE.match(output),\n          ('when %s is %s, the output of \"%s\" is \"%s\"'%\n           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)))\n\n  def testDefaultBehavior(self):\n    \"\"\"Tests the behavior of the default mode.\"\"\"\n\n    self.RunAndVerify(flag_value=None,\n                      expected_output_re=None,\n                      other_flag=None)\n\n  def testFlag(self):\n    \"\"\"Tests using the --gtest_list_tests flag.\"\"\"\n\n    self.RunAndVerify(flag_value='0',\n                      expected_output_re=None,\n                      other_flag=None)\n    self.RunAndVerify(flag_value='1',\n                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,\n                      other_flag=None)\n\n  def testOverrideNonFilterFlags(self):\n    \"\"\"Tests that --gtest_list_tests overrides the non-filter flags.\"\"\"\n\n    self.RunAndVerify(flag_value='1',\n                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,\n                      other_flag='--gtest_break_on_failure')\n\n  def testWithFilterFlags(self):\n    \"\"\"Tests that --gtest_list_tests takes into account the\n    --gtest_filter flag.\"\"\"\n\n    self.RunAndVerify(flag_value='1',\n                      expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE,\n                      other_flag='--gtest_filter=Foo*')\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_list_tests_unittest_.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: phanna@google.com (Patrick Hanna)\n\n// Unit test for Google Test's --gtest_list_tests flag.\n//\n// A user can ask Google Test to list all tests that will run\n// so that when using a filter, a user will know what\n// tests to look for. The tests will not be run after listing.\n//\n// This program will be invoked from a Python unit test.\n// Don't run it directly.\n\n#include \"gtest/gtest.h\"\n\n// Several different test cases and tests that will be listed.\nTEST(Foo, Bar1) {\n}\n\nTEST(Foo, Bar2) {\n}\n\nTEST(Foo, DISABLED_Bar3) {\n}\n\nTEST(Abc, Xyz) {\n}\n\nTEST(Abc, Def) {\n}\n\nTEST(FooBar, Baz) {\n}\n\nclass FooTest : public testing::Test {\n};\n\nTEST_F(FooTest, Test1) {\n}\n\nTEST_F(FooTest, DISABLED_Test2) {\n}\n\nTEST_F(FooTest, Test3) {\n}\n\nTEST(FooDeathTest, Test1) {\n}\n\n// A group of value-parameterized tests.\n\nclass MyType {\n public:\n  explicit MyType(const std::string& a_value) : value_(a_value) {}\n\n  const std::string& value() const { return value_; }\n\n private:\n  std::string value_;\n};\n\n// Teaches Google Test how to print a MyType.\nvoid PrintTo(const MyType& x, std::ostream* os) {\n  *os << x.value();\n}\n\nclass ValueParamTest : public testing::TestWithParam<MyType> {\n};\n\nTEST_P(ValueParamTest, TestA) {\n}\n\nTEST_P(ValueParamTest, TestB) {\n}\n\nINSTANTIATE_TEST_CASE_P(\n    MyInstantiation, ValueParamTest,\n    testing::Values(MyType(\"one line\"),\n                    MyType(\"two\\nlines\"),\n                    MyType(\"a very\\nloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line\")));  // NOLINT\n\n// A group of typed tests.\n\n// A deliberately long type name for testing the line-truncating\n// behavior when printing a type parameter.\nclass VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName {  // NOLINT\n};\n\ntemplate <typename T>\nclass TypedTest : public testing::Test {\n};\n\ntemplate <typename T, int kSize>\nclass MyArray {\n};\n\ntypedef testing::Types<VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName,  // NOLINT\n                       int*, MyArray<bool, 42> > MyTypes;\n\nTYPED_TEST_CASE(TypedTest, MyTypes);\n\nTYPED_TEST(TypedTest, TestA) {\n}\n\nTYPED_TEST(TypedTest, TestB) {\n}\n\n// A group of type-parameterized tests.\n\ntemplate <typename T>\nclass TypeParamTest : public testing::Test {\n};\n\nTYPED_TEST_CASE_P(TypeParamTest);\n\nTYPED_TEST_P(TypeParamTest, TestA) {\n}\n\nTYPED_TEST_P(TypeParamTest, TestB) {\n}\n\nREGISTER_TYPED_TEST_CASE_P(TypeParamTest, TestA, TestB);\n\nINSTANTIATE_TYPED_TEST_CASE_P(My, TypeParamTest, MyTypes);\n\nint main(int argc, char **argv) {\n  ::testing::InitGoogleTest(&argc, argv);\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_main_unittest.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest.h\"\n\n// Tests that we don't have to define main() when we link to\n// gtest_main instead of gtest.\n\nnamespace {\n\nTEST(GTestMainTest, ShouldSucceed) {\n}\n\n}  // namespace\n\n// We are using the main() function defined in src/gtest_main.cc, so\n// we don't define it here.\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_no_test_unittest.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Tests that a Google Test program that has no test defined can run\n// successfully.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest.h\"\n\nint main(int argc, char **argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  // An ad-hoc assertion outside of all tests.\n  //\n  // This serves three purposes:\n  //\n  // 1. It verifies that an ad-hoc assertion can be executed even if\n  //    no test is defined.\n  // 2. It verifies that a failed ad-hoc assertion causes the test\n  //    program to fail.\n  // 3. We had a bug where the XML output won't be generated if an\n  //    assertion is executed before RUN_ALL_TESTS() is called, even\n  //    though --gtest_output=xml is specified.  This makes sure the\n  //    bug is fixed and doesn't regress.\n  EXPECT_EQ(1, 2);\n\n  // The above EXPECT_EQ() should cause RUN_ALL_TESTS() to return non-zero.\n  return RUN_ALL_TESTS() ? 0 : 1;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_output_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Tests the text output of Google C++ Testing Framework.\n\nSYNOPSIS\n       gtest_output_test.py --build_dir=BUILD/DIR --gengolden\n         # where BUILD/DIR contains the built gtest_output_test_ file.\n       gtest_output_test.py --gengolden\n       gtest_output_test.py\n\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport re\nimport sys\nimport gtest_test_utils\n\n\n# The flag for generating the golden file\nGENGOLDEN_FLAG = '--gengolden'\nCATCH_EXCEPTIONS_ENV_VAR_NAME = 'GTEST_CATCH_EXCEPTIONS'\n\nIS_WINDOWS = os.name == 'nt'\n\n# TODO(vladl@google.com): remove the _lin suffix.\nGOLDEN_NAME = 'gtest_output_test_golden_lin.txt'\n\nPROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_output_test_')\n\n# At least one command we exercise must not have the\n# --gtest_internal_skip_environment_and_ad_hoc_tests flag.\nCOMMAND_LIST_TESTS = ({}, [PROGRAM_PATH, '--gtest_list_tests'])\nCOMMAND_WITH_COLOR = ({}, [PROGRAM_PATH, '--gtest_color=yes'])\nCOMMAND_WITH_TIME = ({}, [PROGRAM_PATH,\n                          '--gtest_print_time',\n                          '--gtest_internal_skip_environment_and_ad_hoc_tests',\n                          '--gtest_filter=FatalFailureTest.*:LoggingTest.*'])\nCOMMAND_WITH_DISABLED = (\n    {}, [PROGRAM_PATH,\n         '--gtest_also_run_disabled_tests',\n         '--gtest_internal_skip_environment_and_ad_hoc_tests',\n         '--gtest_filter=*DISABLED_*'])\nCOMMAND_WITH_SHARDING = (\n    {'GTEST_SHARD_INDEX': '1', 'GTEST_TOTAL_SHARDS': '2'},\n    [PROGRAM_PATH,\n     '--gtest_internal_skip_environment_and_ad_hoc_tests',\n     '--gtest_filter=PassingTest.*'])\n\nGOLDEN_PATH = os.path.join(gtest_test_utils.GetSourceDir(), GOLDEN_NAME)\n\n\ndef ToUnixLineEnding(s):\n  \"\"\"Changes all Windows/Mac line endings in s to UNIX line endings.\"\"\"\n\n  return s.replace('\\r\\n', '\\n').replace('\\r', '\\n')\n\n\ndef RemoveLocations(test_output):\n  \"\"\"Removes all file location info from a Google Test program's output.\n\n  Args:\n       test_output:  the output of a Google Test program.\n\n  Returns:\n       output with all file location info (in the form of\n       'DIRECTORY/FILE_NAME:LINE_NUMBER: 'or\n       'DIRECTORY\\\\FILE_NAME(LINE_NUMBER): ') replaced by\n       'FILE_NAME:#: '.\n  \"\"\"\n\n  return re.sub(r'.*[/\\\\](.+)(\\:\\d+|\\(\\d+\\))\\: ', r'\\1:#: ', test_output)\n\n\ndef RemoveStackTraceDetails(output):\n  \"\"\"Removes all stack traces from a Google Test program's output.\"\"\"\n\n  # *? means \"find the shortest string that matches\".\n  return re.sub(r'Stack trace:(.|\\n)*?\\n\\n',\n                'Stack trace: (omitted)\\n\\n', output)\n\n\ndef RemoveStackTraces(output):\n  \"\"\"Removes all traces of stack traces from a Google Test program's output.\"\"\"\n\n  # *? means \"find the shortest string that matches\".\n  return re.sub(r'Stack trace:(.|\\n)*?\\n\\n', '', output)\n\n\ndef RemoveTime(output):\n  \"\"\"Removes all time information from a Google Test program's output.\"\"\"\n\n  return re.sub(r'\\(\\d+ ms', '(? ms', output)\n\n\ndef RemoveTypeInfoDetails(test_output):\n  \"\"\"Removes compiler-specific type info from Google Test program's output.\n\n  Args:\n       test_output:  the output of a Google Test program.\n\n  Returns:\n       output with type information normalized to canonical form.\n  \"\"\"\n\n  # some compilers output the name of type 'unsigned int' as 'unsigned'\n  return re.sub(r'unsigned int', 'unsigned', test_output)\n\n\ndef NormalizeToCurrentPlatform(test_output):\n  \"\"\"Normalizes platform specific output details for easier comparison.\"\"\"\n\n  if IS_WINDOWS:\n    # Removes the color information that is not present on Windows.\n    test_output = re.sub('\\x1b\\\\[(0;3\\d)?m', '', test_output)\n    # Changes failure message headers into the Windows format.\n    test_output = re.sub(r': Failure\\n', r': error: ', test_output)\n    # Changes file(line_number) to file:line_number.\n    test_output = re.sub(r'((\\w|\\.)+)\\((\\d+)\\):', r'\\1:\\3:', test_output)\n\n  return test_output\n\n\ndef RemoveTestCounts(output):\n  \"\"\"Removes test counts from a Google Test program's output.\"\"\"\n\n  output = re.sub(r'\\d+ tests?, listed below',\n                  '? tests, listed below', output)\n  output = re.sub(r'\\d+ FAILED TESTS',\n                  '? FAILED TESTS', output)\n  output = re.sub(r'\\d+ tests? from \\d+ test cases?',\n                  '? tests from ? test cases', output)\n  output = re.sub(r'\\d+ tests? from ([a-zA-Z_])',\n                  r'? tests from \\1', output)\n  return re.sub(r'\\d+ tests?\\.', '? tests.', output)\n\n\ndef RemoveMatchingTests(test_output, pattern):\n  \"\"\"Removes output of specified tests from a Google Test program's output.\n\n  This function strips not only the beginning and the end of a test but also\n  all output in between.\n\n  Args:\n    test_output:       A string containing the test output.\n    pattern:           A regex string that matches names of test cases or\n                       tests to remove.\n\n  Returns:\n    Contents of test_output with tests whose names match pattern removed.\n  \"\"\"\n\n  test_output = re.sub(\n      r'.*\\[ RUN      \\] .*%s(.|\\n)*?\\[(  FAILED  |       OK )\\] .*%s.*\\n' % (\n          pattern, pattern),\n      '',\n      test_output)\n  return re.sub(r'.*%s.*\\n' % pattern, '', test_output)\n\n\ndef NormalizeOutput(output):\n  \"\"\"Normalizes output (the output of gtest_output_test_.exe).\"\"\"\n\n  output = ToUnixLineEnding(output)\n  output = RemoveLocations(output)\n  output = RemoveStackTraceDetails(output)\n  output = RemoveTime(output)\n  return output\n\n\ndef GetShellCommandOutput(env_cmd):\n  \"\"\"Runs a command in a sub-process, and returns its output in a string.\n\n  Args:\n    env_cmd: The shell command. A 2-tuple where element 0 is a dict of extra\n             environment variables to set, and element 1 is a string with\n             the command and any flags.\n\n  Returns:\n    A string with the command's combined standard and diagnostic output.\n  \"\"\"\n\n  # Spawns cmd in a sub-process, and gets its standard I/O file objects.\n  # Set and save the environment properly.\n  environ = os.environ.copy()\n  environ.update(env_cmd[0])\n  p = gtest_test_utils.Subprocess(env_cmd[1], env=environ)\n\n  return p.output\n\n\ndef GetCommandOutput(env_cmd):\n  \"\"\"Runs a command and returns its output with all file location\n  info stripped off.\n\n  Args:\n    env_cmd:  The shell command. A 2-tuple where element 0 is a dict of extra\n              environment variables to set, and element 1 is a string with\n              the command and any flags.\n  \"\"\"\n\n  # Disables exception pop-ups on Windows.\n  environ, cmdline = env_cmd\n  environ = dict(environ)  # Ensures we are modifying a copy.\n  environ[CATCH_EXCEPTIONS_ENV_VAR_NAME] = '1'\n  return NormalizeOutput(GetShellCommandOutput((environ, cmdline)))\n\n\ndef GetOutputOfAllCommands():\n  \"\"\"Returns concatenated output from several representative commands.\"\"\"\n\n  return (GetCommandOutput(COMMAND_WITH_COLOR) +\n          GetCommandOutput(COMMAND_WITH_TIME) +\n          GetCommandOutput(COMMAND_WITH_DISABLED) +\n          GetCommandOutput(COMMAND_WITH_SHARDING))\n\n\ntest_list = GetShellCommandOutput(COMMAND_LIST_TESTS)\nSUPPORTS_DEATH_TESTS = 'DeathTest' in test_list\nSUPPORTS_TYPED_TESTS = 'TypedTest' in test_list\nSUPPORTS_THREADS = 'ExpectFailureWithThreadsTest' in test_list\nSUPPORTS_STACK_TRACES = False\n\nCAN_GENERATE_GOLDEN_FILE = (SUPPORTS_DEATH_TESTS and\n                            SUPPORTS_TYPED_TESTS and\n                            SUPPORTS_THREADS)\n\n\nclass GTestOutputTest(gtest_test_utils.TestCase):\n  def RemoveUnsupportedTests(self, test_output):\n    if not SUPPORTS_DEATH_TESTS:\n      test_output = RemoveMatchingTests(test_output, 'DeathTest')\n    if not SUPPORTS_TYPED_TESTS:\n      test_output = RemoveMatchingTests(test_output, 'TypedTest')\n      test_output = RemoveMatchingTests(test_output, 'TypedDeathTest')\n      test_output = RemoveMatchingTests(test_output, 'TypeParamDeathTest')\n    if not SUPPORTS_THREADS:\n      test_output = RemoveMatchingTests(test_output,\n                                        'ExpectFailureWithThreadsTest')\n      test_output = RemoveMatchingTests(test_output,\n                                        'ScopedFakeTestPartResultReporterTest')\n      test_output = RemoveMatchingTests(test_output,\n                                        'WorksConcurrently')\n    if not SUPPORTS_STACK_TRACES:\n      test_output = RemoveStackTraces(test_output)\n\n    return test_output\n\n  def testOutput(self):\n    output = GetOutputOfAllCommands()\n\n    golden_file = open(GOLDEN_PATH, 'rb')\n    # A mis-configured source control system can cause \\r appear in EOL\n    # sequences when we read the golden file irrespective of an operating\n    # system used. Therefore, we need to strip those \\r's from newlines\n    # unconditionally.\n    golden = ToUnixLineEnding(golden_file.read())\n    golden_file.close()\n\n    # We want the test to pass regardless of certain features being\n    # supported or not.\n\n    # We still have to remove type name specifics in all cases.\n    normalized_actual = RemoveTypeInfoDetails(output)\n    normalized_golden = RemoveTypeInfoDetails(golden)\n\n    if CAN_GENERATE_GOLDEN_FILE:\n      self.assertEqual(normalized_golden, normalized_actual)\n    else:\n      normalized_actual = NormalizeToCurrentPlatform(\n          RemoveTestCounts(normalized_actual))\n      normalized_golden = NormalizeToCurrentPlatform(\n          RemoveTestCounts(self.RemoveUnsupportedTests(normalized_golden)))\n\n      # This code is very handy when debugging golden file differences:\n      if os.getenv('DEBUG_GTEST_OUTPUT_TEST'):\n        open(os.path.join(\n            gtest_test_utils.GetSourceDir(),\n            '_gtest_output_test_normalized_actual.txt'), 'wb').write(\n                normalized_actual)\n        open(os.path.join(\n            gtest_test_utils.GetSourceDir(),\n            '_gtest_output_test_normalized_golden.txt'), 'wb').write(\n                normalized_golden)\n\n      self.assertEqual(normalized_golden, normalized_actual)\n\n\nif __name__ == '__main__':\n  if sys.argv[1:] == [GENGOLDEN_FLAG]:\n    if CAN_GENERATE_GOLDEN_FILE:\n      output = GetOutputOfAllCommands()\n      golden_file = open(GOLDEN_PATH, 'wb')\n      golden_file.write(output)\n      golden_file.close()\n    else:\n      message = (\n          \"\"\"Unable to write a golden file when compiled in an environment\nthat does not support all the required features (death tests, typed tests,\nand multiple threads).  Please generate the golden file using a binary built\nwith those features enabled.\"\"\")\n\n      sys.stderr.write(message)\n      sys.exit(1)\n  else:\n    gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_output_test_.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// The purpose of this file is to generate Google Test output under\n// various conditions.  The output will then be verified by\n// gtest_output_test.py to ensure that Google Test generates the\n// desired messages.  Therefore, most tests in this file are MEANT TO\n// FAIL.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest-spi.h\"\n#include \"gtest/gtest.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\n#include <stdlib.h>\n\n#if GTEST_IS_THREADSAFE\nusing testing::ScopedFakeTestPartResultReporter;\nusing testing::TestPartResultArray;\n\nusing testing::internal::Notification;\nusing testing::internal::ThreadWithParam;\n#endif\n\nnamespace posix = ::testing::internal::posix;\nusing testing::internal::scoped_ptr;\n\n// Tests catching fatal failures.\n\n// A subroutine used by the following test.\nvoid TestEq1(int x) {\n  ASSERT_EQ(1, x);\n}\n\n// This function calls a test subroutine, catches the fatal failure it\n// generates, and then returns early.\nvoid TryTestSubroutine() {\n  // Calls a subrountine that yields a fatal failure.\n  TestEq1(2);\n\n  // Catches the fatal failure and aborts the test.\n  //\n  // The testing::Test:: prefix is necessary when calling\n  // HasFatalFailure() outside of a TEST, TEST_F, or test fixture.\n  if (testing::Test::HasFatalFailure()) return;\n\n  // If we get here, something is wrong.\n  FAIL() << \"This should never be reached.\";\n}\n\nTEST(PassingTest, PassingTest1) {\n}\n\nTEST(PassingTest, PassingTest2) {\n}\n\n// Tests that parameters of failing parameterized tests are printed in the\n// failing test summary.\nclass FailingParamTest : public testing::TestWithParam<int> {};\n\nTEST_P(FailingParamTest, Fails) {\n  EXPECT_EQ(1, GetParam());\n}\n\n// This generates a test which will fail. Google Test is expected to print\n// its parameter when it outputs the list of all failed tests.\nINSTANTIATE_TEST_CASE_P(PrintingFailingParams,\n                        FailingParamTest,\n                        testing::Values(2));\n\nstatic const char kGoldenString[] = \"\\\"Line\\0 1\\\"\\nLine 2\";\n\nTEST(NonfatalFailureTest, EscapesStringOperands) {\n  std::string actual = \"actual \\\"string\\\"\";\n  EXPECT_EQ(kGoldenString, actual);\n\n  const char* golden = kGoldenString;\n  EXPECT_EQ(golden, actual);\n}\n\n// Tests catching a fatal failure in a subroutine.\nTEST(FatalFailureTest, FatalFailureInSubroutine) {\n  printf(\"(expecting a failure that x should be 1)\\n\");\n\n  TryTestSubroutine();\n}\n\n// Tests catching a fatal failure in a nested subroutine.\nTEST(FatalFailureTest, FatalFailureInNestedSubroutine) {\n  printf(\"(expecting a failure that x should be 1)\\n\");\n\n  // Calls a subrountine that yields a fatal failure.\n  TryTestSubroutine();\n\n  // Catches the fatal failure and aborts the test.\n  //\n  // When calling HasFatalFailure() inside a TEST, TEST_F, or test\n  // fixture, the testing::Test:: prefix is not needed.\n  if (HasFatalFailure()) return;\n\n  // If we get here, something is wrong.\n  FAIL() << \"This should never be reached.\";\n}\n\n// Tests HasFatalFailure() after a failed EXPECT check.\nTEST(FatalFailureTest, NonfatalFailureInSubroutine) {\n  printf(\"(expecting a failure on false)\\n\");\n  EXPECT_TRUE(false);  // Generates a nonfatal failure\n  ASSERT_FALSE(HasFatalFailure());  // This should succeed.\n}\n\n// Tests interleaving user logging and Google Test assertions.\nTEST(LoggingTest, InterleavingLoggingAndAssertions) {\n  static const int a[4] = {\n    3, 9, 2, 6\n  };\n\n  printf(\"(expecting 2 failures on (3) >= (a[i]))\\n\");\n  for (int i = 0; i < static_cast<int>(sizeof(a)/sizeof(*a)); i++) {\n    printf(\"i == %d\\n\", i);\n    EXPECT_GE(3, a[i]);\n  }\n}\n\n// Tests the SCOPED_TRACE macro.\n\n// A helper function for testing SCOPED_TRACE.\nvoid SubWithoutTrace(int n) {\n  EXPECT_EQ(1, n);\n  ASSERT_EQ(2, n);\n}\n\n// Another helper function for testing SCOPED_TRACE.\nvoid SubWithTrace(int n) {\n  SCOPED_TRACE(testing::Message() << \"n = \" << n);\n\n  SubWithoutTrace(n);\n}\n\n// Tests that SCOPED_TRACE() obeys lexical scopes.\nTEST(SCOPED_TRACETest, ObeysScopes) {\n  printf(\"(expected to fail)\\n\");\n\n  // There should be no trace before SCOPED_TRACE() is invoked.\n  ADD_FAILURE() << \"This failure is expected, and shouldn't have a trace.\";\n\n  {\n    SCOPED_TRACE(\"Expected trace\");\n    // After SCOPED_TRACE(), a failure in the current scope should contain\n    // the trace.\n    ADD_FAILURE() << \"This failure is expected, and should have a trace.\";\n  }\n\n  // Once the control leaves the scope of the SCOPED_TRACE(), there\n  // should be no trace again.\n  ADD_FAILURE() << \"This failure is expected, and shouldn't have a trace.\";\n}\n\n// Tests that SCOPED_TRACE works inside a loop.\nTEST(SCOPED_TRACETest, WorksInLoop) {\n  printf(\"(expected to fail)\\n\");\n\n  for (int i = 1; i <= 2; i++) {\n    SCOPED_TRACE(testing::Message() << \"i = \" << i);\n\n    SubWithoutTrace(i);\n  }\n}\n\n// Tests that SCOPED_TRACE works in a subroutine.\nTEST(SCOPED_TRACETest, WorksInSubroutine) {\n  printf(\"(expected to fail)\\n\");\n\n  SubWithTrace(1);\n  SubWithTrace(2);\n}\n\n// Tests that SCOPED_TRACE can be nested.\nTEST(SCOPED_TRACETest, CanBeNested) {\n  printf(\"(expected to fail)\\n\");\n\n  SCOPED_TRACE(\"\");  // A trace without a message.\n\n  SubWithTrace(2);\n}\n\n// Tests that multiple SCOPED_TRACEs can be used in the same scope.\nTEST(SCOPED_TRACETest, CanBeRepeated) {\n  printf(\"(expected to fail)\\n\");\n\n  SCOPED_TRACE(\"A\");\n  ADD_FAILURE()\n      << \"This failure is expected, and should contain trace point A.\";\n\n  SCOPED_TRACE(\"B\");\n  ADD_FAILURE()\n      << \"This failure is expected, and should contain trace point A and B.\";\n\n  {\n    SCOPED_TRACE(\"C\");\n    ADD_FAILURE() << \"This failure is expected, and should \"\n                  << \"contain trace point A, B, and C.\";\n  }\n\n  SCOPED_TRACE(\"D\");\n  ADD_FAILURE() << \"This failure is expected, and should \"\n                << \"contain trace point A, B, and D.\";\n}\n\n#if GTEST_IS_THREADSAFE\n// Tests that SCOPED_TRACE()s can be used concurrently from multiple\n// threads.  Namely, an assertion should be affected by\n// SCOPED_TRACE()s in its own thread only.\n\n// Here's the sequence of actions that happen in the test:\n//\n//   Thread A (main)                | Thread B (spawned)\n//   ===============================|================================\n//   spawns thread B                |\n//   -------------------------------+--------------------------------\n//   waits for n1                   | SCOPED_TRACE(\"Trace B\");\n//                                  | generates failure #1\n//                                  | notifies n1\n//   -------------------------------+--------------------------------\n//   SCOPED_TRACE(\"Trace A\");       | waits for n2\n//   generates failure #2           |\n//   notifies n2                    |\n//   -------------------------------|--------------------------------\n//   waits for n3                   | generates failure #3\n//                                  | trace B dies\n//                                  | generates failure #4\n//                                  | notifies n3\n//   -------------------------------|--------------------------------\n//   generates failure #5           | finishes\n//   trace A dies                   |\n//   generates failure #6           |\n//   -------------------------------|--------------------------------\n//   waits for thread B to finish   |\n\nstruct CheckPoints {\n  Notification n1;\n  Notification n2;\n  Notification n3;\n};\n\nstatic void ThreadWithScopedTrace(CheckPoints* check_points) {\n  {\n    SCOPED_TRACE(\"Trace B\");\n    ADD_FAILURE()\n        << \"Expected failure #1 (in thread B, only trace B alive).\";\n    check_points->n1.Notify();\n    check_points->n2.WaitForNotification();\n\n    ADD_FAILURE()\n        << \"Expected failure #3 (in thread B, trace A & B both alive).\";\n  }  // Trace B dies here.\n  ADD_FAILURE()\n      << \"Expected failure #4 (in thread B, only trace A alive).\";\n  check_points->n3.Notify();\n}\n\nTEST(SCOPED_TRACETest, WorksConcurrently) {\n  printf(\"(expecting 6 failures)\\n\");\n\n  CheckPoints check_points;\n  ThreadWithParam<CheckPoints*> thread(&ThreadWithScopedTrace,\n                                       &check_points,\n                                       NULL);\n  check_points.n1.WaitForNotification();\n\n  {\n    SCOPED_TRACE(\"Trace A\");\n    ADD_FAILURE()\n        << \"Expected failure #2 (in thread A, trace A & B both alive).\";\n    check_points.n2.Notify();\n    check_points.n3.WaitForNotification();\n\n    ADD_FAILURE()\n        << \"Expected failure #5 (in thread A, only trace A alive).\";\n  }  // Trace A dies here.\n  ADD_FAILURE()\n      << \"Expected failure #6 (in thread A, no trace alive).\";\n  thread.Join();\n}\n#endif  // GTEST_IS_THREADSAFE\n\nTEST(DisabledTestsWarningTest,\n     DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning) {\n  // This test body is intentionally empty.  Its sole purpose is for\n  // verifying that the --gtest_also_run_disabled_tests flag\n  // suppresses the \"YOU HAVE 12 DISABLED TESTS\" warning at the end of\n  // the test output.\n}\n\n// Tests using assertions outside of TEST and TEST_F.\n//\n// This function creates two failures intentionally.\nvoid AdHocTest() {\n  printf(\"The non-test part of the code is expected to have 2 failures.\\n\\n\");\n  EXPECT_TRUE(false);\n  EXPECT_EQ(2, 3);\n}\n\n// Runs all TESTs, all TEST_Fs, and the ad hoc test.\nint RunAllTests() {\n  AdHocTest();\n  return RUN_ALL_TESTS();\n}\n\n// Tests non-fatal failures in the fixture constructor.\nclass NonFatalFailureInFixtureConstructorTest : public testing::Test {\n protected:\n  NonFatalFailureInFixtureConstructorTest() {\n    printf(\"(expecting 5 failures)\\n\");\n    ADD_FAILURE() << \"Expected failure #1, in the test fixture c'tor.\";\n  }\n\n  ~NonFatalFailureInFixtureConstructorTest() {\n    ADD_FAILURE() << \"Expected failure #5, in the test fixture d'tor.\";\n  }\n\n  virtual void SetUp() {\n    ADD_FAILURE() << \"Expected failure #2, in SetUp().\";\n  }\n\n  virtual void TearDown() {\n    ADD_FAILURE() << \"Expected failure #4, in TearDown.\";\n  }\n};\n\nTEST_F(NonFatalFailureInFixtureConstructorTest, FailureInConstructor) {\n  ADD_FAILURE() << \"Expected failure #3, in the test body.\";\n}\n\n// Tests fatal failures in the fixture constructor.\nclass FatalFailureInFixtureConstructorTest : public testing::Test {\n protected:\n  FatalFailureInFixtureConstructorTest() {\n    printf(\"(expecting 2 failures)\\n\");\n    Init();\n  }\n\n  ~FatalFailureInFixtureConstructorTest() {\n    ADD_FAILURE() << \"Expected failure #2, in the test fixture d'tor.\";\n  }\n\n  virtual void SetUp() {\n    ADD_FAILURE() << \"UNEXPECTED failure in SetUp().  \"\n                  << \"We should never get here, as the test fixture c'tor \"\n                  << \"had a fatal failure.\";\n  }\n\n  virtual void TearDown() {\n    ADD_FAILURE() << \"UNEXPECTED failure in TearDown().  \"\n                  << \"We should never get here, as the test fixture c'tor \"\n                  << \"had a fatal failure.\";\n  }\n\n private:\n  void Init() {\n    FAIL() << \"Expected failure #1, in the test fixture c'tor.\";\n  }\n};\n\nTEST_F(FatalFailureInFixtureConstructorTest, FailureInConstructor) {\n  ADD_FAILURE() << \"UNEXPECTED failure in the test body.  \"\n                << \"We should never get here, as the test fixture c'tor \"\n                << \"had a fatal failure.\";\n}\n\n// Tests non-fatal failures in SetUp().\nclass NonFatalFailureInSetUpTest : public testing::Test {\n protected:\n  virtual ~NonFatalFailureInSetUpTest() {\n    Deinit();\n  }\n\n  virtual void SetUp() {\n    printf(\"(expecting 4 failures)\\n\");\n    ADD_FAILURE() << \"Expected failure #1, in SetUp().\";\n  }\n\n  virtual void TearDown() {\n    FAIL() << \"Expected failure #3, in TearDown().\";\n  }\n private:\n  void Deinit() {\n    FAIL() << \"Expected failure #4, in the test fixture d'tor.\";\n  }\n};\n\nTEST_F(NonFatalFailureInSetUpTest, FailureInSetUp) {\n  FAIL() << \"Expected failure #2, in the test function.\";\n}\n\n// Tests fatal failures in SetUp().\nclass FatalFailureInSetUpTest : public testing::Test {\n protected:\n  virtual ~FatalFailureInSetUpTest() {\n    Deinit();\n  }\n\n  virtual void SetUp() {\n    printf(\"(expecting 3 failures)\\n\");\n    FAIL() << \"Expected failure #1, in SetUp().\";\n  }\n\n  virtual void TearDown() {\n    FAIL() << \"Expected failure #2, in TearDown().\";\n  }\n private:\n  void Deinit() {\n    FAIL() << \"Expected failure #3, in the test fixture d'tor.\";\n  }\n};\n\nTEST_F(FatalFailureInSetUpTest, FailureInSetUp) {\n  FAIL() << \"UNEXPECTED failure in the test function.  \"\n         << \"We should never get here, as SetUp() failed.\";\n}\n\nTEST(AddFailureAtTest, MessageContainsSpecifiedFileAndLineNumber) {\n  ADD_FAILURE_AT(\"foo.cc\", 42) << \"Expected failure in foo.cc\";\n}\n\n#if GTEST_IS_THREADSAFE\n\n// A unary function that may die.\nvoid DieIf(bool should_die) {\n  GTEST_CHECK_(!should_die) << \" - death inside DieIf().\";\n}\n\n// Tests running death tests in a multi-threaded context.\n\n// Used for coordination between the main and the spawn thread.\nstruct SpawnThreadNotifications {\n  SpawnThreadNotifications() {}\n\n  Notification spawn_thread_started;\n  Notification spawn_thread_ok_to_terminate;\n\n private:\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(SpawnThreadNotifications);\n};\n\n// The function to be executed in the thread spawn by the\n// MultipleThreads test (below).\nstatic void ThreadRoutine(SpawnThreadNotifications* notifications) {\n  // Signals the main thread that this thread has started.\n  notifications->spawn_thread_started.Notify();\n\n  // Waits for permission to finish from the main thread.\n  notifications->spawn_thread_ok_to_terminate.WaitForNotification();\n}\n\n// This is a death-test test, but it's not named with a DeathTest\n// suffix.  It starts threads which might interfere with later\n// death tests, so it must run after all other death tests.\nclass DeathTestAndMultiThreadsTest : public testing::Test {\n protected:\n  // Starts a thread and waits for it to begin.\n  virtual void SetUp() {\n    thread_.reset(new ThreadWithParam<SpawnThreadNotifications*>(\n        &ThreadRoutine, &notifications_, NULL));\n    notifications_.spawn_thread_started.WaitForNotification();\n  }\n  // Tells the thread to finish, and reaps it.\n  // Depending on the version of the thread library in use,\n  // a manager thread might still be left running that will interfere\n  // with later death tests.  This is unfortunate, but this class\n  // cleans up after itself as best it can.\n  virtual void TearDown() {\n    notifications_.spawn_thread_ok_to_terminate.Notify();\n  }\n\n private:\n  SpawnThreadNotifications notifications_;\n  scoped_ptr<ThreadWithParam<SpawnThreadNotifications*> > thread_;\n};\n\n#endif  // GTEST_IS_THREADSAFE\n\n// The MixedUpTestCaseTest test case verifies that Google Test will fail a\n// test if it uses a different fixture class than what other tests in\n// the same test case use.  It deliberately contains two fixture\n// classes with the same name but defined in different namespaces.\n\n// The MixedUpTestCaseWithSameTestNameTest test case verifies that\n// when the user defines two tests with the same test case name AND\n// same test name (but in different namespaces), the second test will\n// fail.\n\nnamespace foo {\n\nclass MixedUpTestCaseTest : public testing::Test {\n};\n\nTEST_F(MixedUpTestCaseTest, FirstTestFromNamespaceFoo) {}\nTEST_F(MixedUpTestCaseTest, SecondTestFromNamespaceFoo) {}\n\nclass MixedUpTestCaseWithSameTestNameTest : public testing::Test {\n};\n\nTEST_F(MixedUpTestCaseWithSameTestNameTest,\n       TheSecondTestWithThisNameShouldFail) {}\n\n}  // namespace foo\n\nnamespace bar {\n\nclass MixedUpTestCaseTest : public testing::Test {\n};\n\n// The following two tests are expected to fail.  We rely on the\n// golden file to check that Google Test generates the right error message.\nTEST_F(MixedUpTestCaseTest, ThisShouldFail) {}\nTEST_F(MixedUpTestCaseTest, ThisShouldFailToo) {}\n\nclass MixedUpTestCaseWithSameTestNameTest : public testing::Test {\n};\n\n// Expected to fail.  We rely on the golden file to check that Google Test\n// generates the right error message.\nTEST_F(MixedUpTestCaseWithSameTestNameTest,\n       TheSecondTestWithThisNameShouldFail) {}\n\n}  // namespace bar\n\n// The following two test cases verify that Google Test catches the user\n// error of mixing TEST and TEST_F in the same test case.  The first\n// test case checks the scenario where TEST_F appears before TEST, and\n// the second one checks where TEST appears before TEST_F.\n\nclass TEST_F_before_TEST_in_same_test_case : public testing::Test {\n};\n\nTEST_F(TEST_F_before_TEST_in_same_test_case, DefinedUsingTEST_F) {}\n\n// Expected to fail.  We rely on the golden file to check that Google Test\n// generates the right error message.\nTEST(TEST_F_before_TEST_in_same_test_case, DefinedUsingTESTAndShouldFail) {}\n\nclass TEST_before_TEST_F_in_same_test_case : public testing::Test {\n};\n\nTEST(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST) {}\n\n// Expected to fail.  We rely on the golden file to check that Google Test\n// generates the right error message.\nTEST_F(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST_FAndShouldFail) {\n}\n\n// Used for testing EXPECT_NONFATAL_FAILURE() and EXPECT_FATAL_FAILURE().\nint global_integer = 0;\n\n// Tests that EXPECT_NONFATAL_FAILURE() can reference global variables.\nTEST(ExpectNonfatalFailureTest, CanReferenceGlobalVariables) {\n  global_integer = 0;\n  EXPECT_NONFATAL_FAILURE({\n    EXPECT_EQ(1, global_integer) << \"Expected non-fatal failure.\";\n  }, \"Expected non-fatal failure.\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() can reference local variables\n// (static or not).\nTEST(ExpectNonfatalFailureTest, CanReferenceLocalVariables) {\n  int m = 0;\n  static int n;\n  n = 1;\n  EXPECT_NONFATAL_FAILURE({\n    EXPECT_EQ(m, n) << \"Expected non-fatal failure.\";\n  }, \"Expected non-fatal failure.\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() succeeds when there is exactly\n// one non-fatal failure and no fatal failure.\nTEST(ExpectNonfatalFailureTest, SucceedsWhenThereIsOneNonfatalFailure) {\n  EXPECT_NONFATAL_FAILURE({\n    ADD_FAILURE() << \"Expected non-fatal failure.\";\n  }, \"Expected non-fatal failure.\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() fails when there is no\n// non-fatal failure.\nTEST(ExpectNonfatalFailureTest, FailsWhenThereIsNoNonfatalFailure) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_NONFATAL_FAILURE({\n  }, \"\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() fails when there are two\n// non-fatal failures.\nTEST(ExpectNonfatalFailureTest, FailsWhenThereAreTwoNonfatalFailures) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_NONFATAL_FAILURE({\n    ADD_FAILURE() << \"Expected non-fatal failure 1.\";\n    ADD_FAILURE() << \"Expected non-fatal failure 2.\";\n  }, \"\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() fails when there is one fatal\n// failure.\nTEST(ExpectNonfatalFailureTest, FailsWhenThereIsOneFatalFailure) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_NONFATAL_FAILURE({\n    FAIL() << \"Expected fatal failure.\";\n  }, \"\");\n}\n\n// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being\n// tested returns.\nTEST(ExpectNonfatalFailureTest, FailsWhenStatementReturns) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_NONFATAL_FAILURE({\n    return;\n  }, \"\");\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being\n// tested throws.\nTEST(ExpectNonfatalFailureTest, FailsWhenStatementThrows) {\n  printf(\"(expecting a failure)\\n\");\n  try {\n    EXPECT_NONFATAL_FAILURE({\n      throw 0;\n    }, \"\");\n  } catch(int) {  // NOLINT\n  }\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// Tests that EXPECT_FATAL_FAILURE() can reference global variables.\nTEST(ExpectFatalFailureTest, CanReferenceGlobalVariables) {\n  global_integer = 0;\n  EXPECT_FATAL_FAILURE({\n    ASSERT_EQ(1, global_integer) << \"Expected fatal failure.\";\n  }, \"Expected fatal failure.\");\n}\n\n// Tests that EXPECT_FATAL_FAILURE() can reference local static\n// variables.\nTEST(ExpectFatalFailureTest, CanReferenceLocalStaticVariables) {\n  static int n;\n  n = 1;\n  EXPECT_FATAL_FAILURE({\n    ASSERT_EQ(0, n) << \"Expected fatal failure.\";\n  }, \"Expected fatal failure.\");\n}\n\n// Tests that EXPECT_FATAL_FAILURE() succeeds when there is exactly\n// one fatal failure and no non-fatal failure.\nTEST(ExpectFatalFailureTest, SucceedsWhenThereIsOneFatalFailure) {\n  EXPECT_FATAL_FAILURE({\n    FAIL() << \"Expected fatal failure.\";\n  }, \"Expected fatal failure.\");\n}\n\n// Tests that EXPECT_FATAL_FAILURE() fails when there is no fatal\n// failure.\nTEST(ExpectFatalFailureTest, FailsWhenThereIsNoFatalFailure) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_FATAL_FAILURE({\n  }, \"\");\n}\n\n// A helper for generating a fatal failure.\nvoid FatalFailure() {\n  FAIL() << \"Expected fatal failure.\";\n}\n\n// Tests that EXPECT_FATAL_FAILURE() fails when there are two\n// fatal failures.\nTEST(ExpectFatalFailureTest, FailsWhenThereAreTwoFatalFailures) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_FATAL_FAILURE({\n    FatalFailure();\n    FatalFailure();\n  }, \"\");\n}\n\n// Tests that EXPECT_FATAL_FAILURE() fails when there is one non-fatal\n// failure.\nTEST(ExpectFatalFailureTest, FailsWhenThereIsOneNonfatalFailure) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_FATAL_FAILURE({\n    ADD_FAILURE() << \"Expected non-fatal failure.\";\n  }, \"\");\n}\n\n// Tests that EXPECT_FATAL_FAILURE() fails when the statement being\n// tested returns.\nTEST(ExpectFatalFailureTest, FailsWhenStatementReturns) {\n  printf(\"(expecting a failure)\\n\");\n  EXPECT_FATAL_FAILURE({\n    return;\n  }, \"\");\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Tests that EXPECT_FATAL_FAILURE() fails when the statement being\n// tested throws.\nTEST(ExpectFatalFailureTest, FailsWhenStatementThrows) {\n  printf(\"(expecting a failure)\\n\");\n  try {\n    EXPECT_FATAL_FAILURE({\n      throw 0;\n    }, \"\");\n  } catch(int) {  // NOLINT\n  }\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// This #ifdef block tests the output of typed tests.\n#if GTEST_HAS_TYPED_TEST\n\ntemplate <typename T>\nclass TypedTest : public testing::Test {\n};\n\nTYPED_TEST_CASE(TypedTest, testing::Types<int>);\n\nTYPED_TEST(TypedTest, Success) {\n  EXPECT_EQ(0, TypeParam());\n}\n\nTYPED_TEST(TypedTest, Failure) {\n  EXPECT_EQ(1, TypeParam()) << \"Expected failure\";\n}\n\n#endif  // GTEST_HAS_TYPED_TEST\n\n// This #ifdef block tests the output of type-parameterized tests.\n#if GTEST_HAS_TYPED_TEST_P\n\ntemplate <typename T>\nclass TypedTestP : public testing::Test {\n};\n\nTYPED_TEST_CASE_P(TypedTestP);\n\nTYPED_TEST_P(TypedTestP, Success) {\n  EXPECT_EQ(0U, TypeParam());\n}\n\nTYPED_TEST_P(TypedTestP, Failure) {\n  EXPECT_EQ(1U, TypeParam()) << \"Expected failure\";\n}\n\nREGISTER_TYPED_TEST_CASE_P(TypedTestP, Success, Failure);\n\ntypedef testing::Types<unsigned char, unsigned int> UnsignedTypes;\nINSTANTIATE_TYPED_TEST_CASE_P(Unsigned, TypedTestP, UnsignedTypes);\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n#if GTEST_HAS_DEATH_TEST\n\n// We rely on the golden file to verify that tests whose test case\n// name ends with DeathTest are run first.\n\nTEST(ADeathTest, ShouldRunFirst) {\n}\n\n# if GTEST_HAS_TYPED_TEST\n\n// We rely on the golden file to verify that typed tests whose test\n// case name ends with DeathTest are run first.\n\ntemplate <typename T>\nclass ATypedDeathTest : public testing::Test {\n};\n\ntypedef testing::Types<int, double> NumericTypes;\nTYPED_TEST_CASE(ATypedDeathTest, NumericTypes);\n\nTYPED_TEST(ATypedDeathTest, ShouldRunFirst) {\n}\n\n# endif  // GTEST_HAS_TYPED_TEST\n\n# if GTEST_HAS_TYPED_TEST_P\n\n\n// We rely on the golden file to verify that type-parameterized tests\n// whose test case name ends with DeathTest are run first.\n\ntemplate <typename T>\nclass ATypeParamDeathTest : public testing::Test {\n};\n\nTYPED_TEST_CASE_P(ATypeParamDeathTest);\n\nTYPED_TEST_P(ATypeParamDeathTest, ShouldRunFirst) {\n}\n\nREGISTER_TYPED_TEST_CASE_P(ATypeParamDeathTest, ShouldRunFirst);\n\nINSTANTIATE_TYPED_TEST_CASE_P(My, ATypeParamDeathTest, NumericTypes);\n\n# endif  // GTEST_HAS_TYPED_TEST_P\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Tests various failure conditions of\n// EXPECT_{,NON}FATAL_FAILURE{,_ON_ALL_THREADS}.\nclass ExpectFailureTest : public testing::Test {\n public:  // Must be public and not protected due to a bug in g++ 3.4.2.\n  enum FailureMode {\n    FATAL_FAILURE,\n    NONFATAL_FAILURE\n  };\n  static void AddFailure(FailureMode failure) {\n    if (failure == FATAL_FAILURE) {\n      FAIL() << \"Expected fatal failure.\";\n    } else {\n      ADD_FAILURE() << \"Expected non-fatal failure.\";\n    }\n  }\n};\n\nTEST_F(ExpectFailureTest, ExpectFatalFailure) {\n  // Expected fatal failure, but succeeds.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE(SUCCEED(), \"Expected fatal failure.\");\n  // Expected fatal failure, but got a non-fatal failure.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE(AddFailure(NONFATAL_FAILURE), \"Expected non-fatal \"\n                       \"failure.\");\n  // Wrong message.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), \"Some other fatal failure \"\n                       \"expected.\");\n}\n\nTEST_F(ExpectFailureTest, ExpectNonFatalFailure) {\n  // Expected non-fatal failure, but succeeds.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE(SUCCEED(), \"Expected non-fatal failure.\");\n  // Expected non-fatal failure, but got a fatal failure.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE(AddFailure(FATAL_FAILURE), \"Expected fatal failure.\");\n  // Wrong message.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE), \"Some other non-fatal \"\n                          \"failure.\");\n}\n\n#if GTEST_IS_THREADSAFE\n\nclass ExpectFailureWithThreadsTest : public ExpectFailureTest {\n protected:\n  static void AddFailureInOtherThread(FailureMode failure) {\n    ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL);\n    thread.Join();\n  }\n};\n\nTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailure) {\n  // We only intercept the current thread.\n  printf(\"(expecting 2 failures)\\n\");\n  EXPECT_FATAL_FAILURE(AddFailureInOtherThread(FATAL_FAILURE),\n                       \"Expected fatal failure.\");\n}\n\nTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailure) {\n  // We only intercept the current thread.\n  printf(\"(expecting 2 failures)\\n\");\n  EXPECT_NONFATAL_FAILURE(AddFailureInOtherThread(NONFATAL_FAILURE),\n                          \"Expected non-fatal failure.\");\n}\n\ntypedef ExpectFailureWithThreadsTest ScopedFakeTestPartResultReporterTest;\n\n// Tests that the ScopedFakeTestPartResultReporter only catches failures from\n// the current thread if it is instantiated with INTERCEPT_ONLY_CURRENT_THREAD.\nTEST_F(ScopedFakeTestPartResultReporterTest, InterceptOnlyCurrentThread) {\n  printf(\"(expecting 2 failures)\\n\");\n  TestPartResultArray results;\n  {\n    ScopedFakeTestPartResultReporter reporter(\n        ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD,\n        &results);\n    AddFailureInOtherThread(FATAL_FAILURE);\n    AddFailureInOtherThread(NONFATAL_FAILURE);\n  }\n  // The two failures should not have been intercepted.\n  EXPECT_EQ(0, results.size()) << \"This shouldn't fail.\";\n}\n\n#endif  // GTEST_IS_THREADSAFE\n\nTEST_F(ExpectFailureTest, ExpectFatalFailureOnAllThreads) {\n  // Expected fatal failure, but succeeds.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), \"Expected fatal failure.\");\n  // Expected fatal failure, but got a non-fatal failure.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE),\n                                      \"Expected non-fatal failure.\");\n  // Wrong message.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE),\n                                      \"Some other fatal failure expected.\");\n}\n\nTEST_F(ExpectFailureTest, ExpectNonFatalFailureOnAllThreads) {\n  // Expected non-fatal failure, but succeeds.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), \"Expected non-fatal \"\n                                         \"failure.\");\n  // Expected non-fatal failure, but got a fatal failure.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE),\n                                         \"Expected fatal failure.\");\n  // Wrong message.\n  printf(\"(expecting 1 failure)\\n\");\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE),\n                                         \"Some other non-fatal failure.\");\n}\n\n\n// Two test environments for testing testing::AddGlobalTestEnvironment().\n\nclass FooEnvironment : public testing::Environment {\n public:\n  virtual void SetUp() {\n    printf(\"%s\", \"FooEnvironment::SetUp() called.\\n\");\n  }\n\n  virtual void TearDown() {\n    printf(\"%s\", \"FooEnvironment::TearDown() called.\\n\");\n    FAIL() << \"Expected fatal failure.\";\n  }\n};\n\nclass BarEnvironment : public testing::Environment {\n public:\n  virtual void SetUp() {\n    printf(\"%s\", \"BarEnvironment::SetUp() called.\\n\");\n  }\n\n  virtual void TearDown() {\n    printf(\"%s\", \"BarEnvironment::TearDown() called.\\n\");\n    ADD_FAILURE() << \"Expected non-fatal failure.\";\n  }\n};\n\nbool GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = false;\n\n// The main function.\n//\n// The idea is to use Google Test to run all the tests we have defined (some\n// of them are intended to fail), and then compare the test results\n// with the \"golden\" file.\nint main(int argc, char **argv) {\n  testing::GTEST_FLAG(print_time) = false;\n\n  // We just run the tests, knowing some of them are intended to fail.\n  // We will use a separate Python script to compare the output of\n  // this program with the golden file.\n\n  // It's hard to test InitGoogleTest() directly, as it has many\n  // global side effects.  The following line serves as a sanity test\n  // for it.\n  testing::InitGoogleTest(&argc, argv);\n  if (argc >= 2 &&\n      (std::string(argv[1]) ==\n       \"--gtest_internal_skip_environment_and_ad_hoc_tests\"))\n    GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = true;\n\n#if GTEST_HAS_DEATH_TEST\n  if (testing::internal::GTEST_FLAG(internal_run_death_test) != \"\") {\n    // Skip the usual output capturing if we're running as the child\n    // process of an threadsafe-style death test.\n# if GTEST_OS_WINDOWS\n    posix::FReopen(\"nul:\", \"w\", stdout);\n# else\n    posix::FReopen(\"/dev/null\", \"w\", stdout);\n# endif  // GTEST_OS_WINDOWS\n    return RUN_ALL_TESTS();\n  }\n#endif  // GTEST_HAS_DEATH_TEST\n\n  if (GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests))\n    return RUN_ALL_TESTS();\n\n  // Registers two global test environments.\n  // The golden file verifies that they are set up in the order they\n  // are registered, and torn down in the reverse order.\n  testing::AddGlobalTestEnvironment(new FooEnvironment);\n  testing::AddGlobalTestEnvironment(new BarEnvironment);\n\n  return RunAllTests();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_output_test_golden_lin.txt",
    "content": "The non-test part of the code is expected to have 2 failures.\n\ngtest_output_test_.cc:#: Failure\nValue of: false\n  Actual: false\nExpected: true\ngtest_output_test_.cc:#: Failure\nValue of: 3\nExpected: 2\n\u001b[0;32m[==========] \u001b[mRunning 63 tests from 28 test cases.\n\u001b[0;32m[----------] \u001b[mGlobal test environment set-up.\nFooEnvironment::SetUp() called.\nBarEnvironment::SetUp() called.\n\u001b[0;32m[----------] \u001b[m1 test from ADeathTest\n\u001b[0;32m[ RUN      ] \u001b[mADeathTest.ShouldRunFirst\n\u001b[0;32m[       OK ] \u001b[mADeathTest.ShouldRunFirst\n\u001b[0;32m[----------] \u001b[m1 test from ATypedDeathTest/0, where TypeParam = int\n\u001b[0;32m[ RUN      ] \u001b[mATypedDeathTest/0.ShouldRunFirst\n\u001b[0;32m[       OK ] \u001b[mATypedDeathTest/0.ShouldRunFirst\n\u001b[0;32m[----------] \u001b[m1 test from ATypedDeathTest/1, where TypeParam = double\n\u001b[0;32m[ RUN      ] \u001b[mATypedDeathTest/1.ShouldRunFirst\n\u001b[0;32m[       OK ] \u001b[mATypedDeathTest/1.ShouldRunFirst\n\u001b[0;32m[----------] \u001b[m1 test from My/ATypeParamDeathTest/0, where TypeParam = int\n\u001b[0;32m[ RUN      ] \u001b[mMy/ATypeParamDeathTest/0.ShouldRunFirst\n\u001b[0;32m[       OK ] \u001b[mMy/ATypeParamDeathTest/0.ShouldRunFirst\n\u001b[0;32m[----------] \u001b[m1 test from My/ATypeParamDeathTest/1, where TypeParam = double\n\u001b[0;32m[ RUN      ] \u001b[mMy/ATypeParamDeathTest/1.ShouldRunFirst\n\u001b[0;32m[       OK ] \u001b[mMy/ATypeParamDeathTest/1.ShouldRunFirst\n\u001b[0;32m[----------] \u001b[m2 tests from PassingTest\n\u001b[0;32m[ RUN      ] \u001b[mPassingTest.PassingTest1\n\u001b[0;32m[       OK ] \u001b[mPassingTest.PassingTest1\n\u001b[0;32m[ RUN      ] \u001b[mPassingTest.PassingTest2\n\u001b[0;32m[       OK ] \u001b[mPassingTest.PassingTest2\n\u001b[0;32m[----------] \u001b[m1 test from NonfatalFailureTest\n\u001b[0;32m[ RUN      ] \u001b[mNonfatalFailureTest.EscapesStringOperands\ngtest_output_test_.cc:#: Failure\nValue of: actual\n  Actual: \"actual \\\"string\\\"\"\nExpected: kGoldenString\nWhich is: \"\\\"Line\"\ngtest_output_test_.cc:#: Failure\nValue of: actual\n  Actual: \"actual \\\"string\\\"\"\nExpected: golden\nWhich is: \"\\\"Line\"\n\u001b[0;31m[  FAILED  ] \u001b[mNonfatalFailureTest.EscapesStringOperands\n\u001b[0;32m[----------] \u001b[m3 tests from FatalFailureTest\n\u001b[0;32m[ RUN      ] \u001b[mFatalFailureTest.FatalFailureInSubroutine\n(expecting a failure that x should be 1)\ngtest_output_test_.cc:#: Failure\nValue of: x\n  Actual: 2\nExpected: 1\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.FatalFailureInSubroutine\n\u001b[0;32m[ RUN      ] \u001b[mFatalFailureTest.FatalFailureInNestedSubroutine\n(expecting a failure that x should be 1)\ngtest_output_test_.cc:#: Failure\nValue of: x\n  Actual: 2\nExpected: 1\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.FatalFailureInNestedSubroutine\n\u001b[0;32m[ RUN      ] \u001b[mFatalFailureTest.NonfatalFailureInSubroutine\n(expecting a failure on false)\ngtest_output_test_.cc:#: Failure\nValue of: false\n  Actual: false\nExpected: true\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.NonfatalFailureInSubroutine\n\u001b[0;32m[----------] \u001b[m1 test from LoggingTest\n\u001b[0;32m[ RUN      ] \u001b[mLoggingTest.InterleavingLoggingAndAssertions\n(expecting 2 failures on (3) >= (a[i]))\ni == 0\ni == 1\ngtest_output_test_.cc:#: Failure\nExpected: (3) >= (a[i]), actual: 3 vs 9\ni == 2\ni == 3\ngtest_output_test_.cc:#: Failure\nExpected: (3) >= (a[i]), actual: 3 vs 6\n\u001b[0;31m[  FAILED  ] \u001b[mLoggingTest.InterleavingLoggingAndAssertions\n\u001b[0;32m[----------] \u001b[m6 tests from SCOPED_TRACETest\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.ObeysScopes\n(expected to fail)\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and shouldn't have a trace.\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and should have a trace.\nGoogle Test trace:\ngtest_output_test_.cc:#: Expected trace\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and shouldn't have a trace.\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.ObeysScopes\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.WorksInLoop\n(expected to fail)\ngtest_output_test_.cc:#: Failure\nValue of: n\n  Actual: 1\nExpected: 2\nGoogle Test trace:\ngtest_output_test_.cc:#: i = 1\ngtest_output_test_.cc:#: Failure\nValue of: n\n  Actual: 2\nExpected: 1\nGoogle Test trace:\ngtest_output_test_.cc:#: i = 2\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksInLoop\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.WorksInSubroutine\n(expected to fail)\ngtest_output_test_.cc:#: Failure\nValue of: n\n  Actual: 1\nExpected: 2\nGoogle Test trace:\ngtest_output_test_.cc:#: n = 1\ngtest_output_test_.cc:#: Failure\nValue of: n\n  Actual: 2\nExpected: 1\nGoogle Test trace:\ngtest_output_test_.cc:#: n = 2\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksInSubroutine\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.CanBeNested\n(expected to fail)\ngtest_output_test_.cc:#: Failure\nValue of: n\n  Actual: 2\nExpected: 1\nGoogle Test trace:\ngtest_output_test_.cc:#: n = 2\ngtest_output_test_.cc:#: \n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.CanBeNested\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.CanBeRepeated\n(expected to fail)\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and should contain trace point A.\nGoogle Test trace:\ngtest_output_test_.cc:#: A\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and should contain trace point A and B.\nGoogle Test trace:\ngtest_output_test_.cc:#: B\ngtest_output_test_.cc:#: A\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and should contain trace point A, B, and C.\nGoogle Test trace:\ngtest_output_test_.cc:#: C\ngtest_output_test_.cc:#: B\ngtest_output_test_.cc:#: A\ngtest_output_test_.cc:#: Failure\nFailed\nThis failure is expected, and should contain trace point A, B, and D.\nGoogle Test trace:\ngtest_output_test_.cc:#: D\ngtest_output_test_.cc:#: B\ngtest_output_test_.cc:#: A\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.CanBeRepeated\n\u001b[0;32m[ RUN      ] \u001b[mSCOPED_TRACETest.WorksConcurrently\n(expecting 6 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #1 (in thread B, only trace B alive).\nGoogle Test trace:\ngtest_output_test_.cc:#: Trace B\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #2 (in thread A, trace A & B both alive).\nGoogle Test trace:\ngtest_output_test_.cc:#: Trace A\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #3 (in thread B, trace A & B both alive).\nGoogle Test trace:\ngtest_output_test_.cc:#: Trace B\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #4 (in thread B, only trace A alive).\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #5 (in thread A, only trace A alive).\nGoogle Test trace:\ngtest_output_test_.cc:#: Trace A\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #6 (in thread A, no trace alive).\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksConcurrently\n\u001b[0;32m[----------] \u001b[m1 test from NonFatalFailureInFixtureConstructorTest\n\u001b[0;32m[ RUN      ] \u001b[mNonFatalFailureInFixtureConstructorTest.FailureInConstructor\n(expecting 5 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #1, in the test fixture c'tor.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #2, in SetUp().\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #3, in the test body.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #4, in TearDown.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #5, in the test fixture d'tor.\n\u001b[0;31m[  FAILED  ] \u001b[mNonFatalFailureInFixtureConstructorTest.FailureInConstructor\n\u001b[0;32m[----------] \u001b[m1 test from FatalFailureInFixtureConstructorTest\n\u001b[0;32m[ RUN      ] \u001b[mFatalFailureInFixtureConstructorTest.FailureInConstructor\n(expecting 2 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #1, in the test fixture c'tor.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #2, in the test fixture d'tor.\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureInFixtureConstructorTest.FailureInConstructor\n\u001b[0;32m[----------] \u001b[m1 test from NonFatalFailureInSetUpTest\n\u001b[0;32m[ RUN      ] \u001b[mNonFatalFailureInSetUpTest.FailureInSetUp\n(expecting 4 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #1, in SetUp().\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #2, in the test function.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #3, in TearDown().\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #4, in the test fixture d'tor.\n\u001b[0;31m[  FAILED  ] \u001b[mNonFatalFailureInSetUpTest.FailureInSetUp\n\u001b[0;32m[----------] \u001b[m1 test from FatalFailureInSetUpTest\n\u001b[0;32m[ RUN      ] \u001b[mFatalFailureInSetUpTest.FailureInSetUp\n(expecting 3 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #1, in SetUp().\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #2, in TearDown().\ngtest_output_test_.cc:#: Failure\nFailed\nExpected failure #3, in the test fixture d'tor.\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureInSetUpTest.FailureInSetUp\n\u001b[0;32m[----------] \u001b[m1 test from AddFailureAtTest\n\u001b[0;32m[ RUN      ] \u001b[mAddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber\nfoo.cc:42: Failure\nFailed\nExpected failure in foo.cc\n\u001b[0;31m[  FAILED  ] \u001b[mAddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber\n\u001b[0;32m[----------] \u001b[m4 tests from MixedUpTestCaseTest\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseTest.FirstTestFromNamespaceFoo\n\u001b[0;32m[       OK ] \u001b[mMixedUpTestCaseTest.FirstTestFromNamespaceFoo\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseTest.SecondTestFromNamespaceFoo\n\u001b[0;32m[       OK ] \u001b[mMixedUpTestCaseTest.SecondTestFromNamespaceFoo\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseTest.ThisShouldFail\ngtest.cc:#: Failure\nFailed\nAll tests in the same test case must use the same test fixture\nclass.  However, in test case MixedUpTestCaseTest,\nyou defined test FirstTestFromNamespaceFoo and test ThisShouldFail\nusing two different test fixture classes.  This can happen if\nthe two classes are from different namespaces or translation\nunits and have the same name.  You should probably rename one\nof the classes to put the tests into different test cases.\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseTest.ThisShouldFail\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseTest.ThisShouldFailToo\ngtest.cc:#: Failure\nFailed\nAll tests in the same test case must use the same test fixture\nclass.  However, in test case MixedUpTestCaseTest,\nyou defined test FirstTestFromNamespaceFoo and test ThisShouldFailToo\nusing two different test fixture classes.  This can happen if\nthe two classes are from different namespaces or translation\nunits and have the same name.  You should probably rename one\nof the classes to put the tests into different test cases.\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseTest.ThisShouldFailToo\n\u001b[0;32m[----------] \u001b[m2 tests from MixedUpTestCaseWithSameTestNameTest\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail\n\u001b[0;32m[       OK ] \u001b[mMixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail\n\u001b[0;32m[ RUN      ] \u001b[mMixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail\ngtest.cc:#: Failure\nFailed\nAll tests in the same test case must use the same test fixture\nclass.  However, in test case MixedUpTestCaseWithSameTestNameTest,\nyou defined test TheSecondTestWithThisNameShouldFail and test TheSecondTestWithThisNameShouldFail\nusing two different test fixture classes.  This can happen if\nthe two classes are from different namespaces or translation\nunits and have the same name.  You should probably rename one\nof the classes to put the tests into different test cases.\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail\n\u001b[0;32m[----------] \u001b[m2 tests from TEST_F_before_TEST_in_same_test_case\n\u001b[0;32m[ RUN      ] \u001b[mTEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F\n\u001b[0;32m[       OK ] \u001b[mTEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F\n\u001b[0;32m[ RUN      ] \u001b[mTEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail\ngtest.cc:#: Failure\nFailed\nAll tests in the same test case must use the same test fixture\nclass, so mixing TEST_F and TEST in the same test case is\nillegal.  In test case TEST_F_before_TEST_in_same_test_case,\ntest DefinedUsingTEST_F is defined using TEST_F but\ntest DefinedUsingTESTAndShouldFail is defined using TEST.  You probably\nwant to change the TEST to TEST_F or move it to another test\ncase.\n\u001b[0;31m[  FAILED  ] \u001b[mTEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail\n\u001b[0;32m[----------] \u001b[m2 tests from TEST_before_TEST_F_in_same_test_case\n\u001b[0;32m[ RUN      ] \u001b[mTEST_before_TEST_F_in_same_test_case.DefinedUsingTEST\n\u001b[0;32m[       OK ] \u001b[mTEST_before_TEST_F_in_same_test_case.DefinedUsingTEST\n\u001b[0;32m[ RUN      ] \u001b[mTEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail\ngtest.cc:#: Failure\nFailed\nAll tests in the same test case must use the same test fixture\nclass, so mixing TEST_F and TEST in the same test case is\nillegal.  In test case TEST_before_TEST_F_in_same_test_case,\ntest DefinedUsingTEST_FAndShouldFail is defined using TEST_F but\ntest DefinedUsingTEST is defined using TEST.  You probably\nwant to change the TEST to TEST_F or move it to another test\ncase.\n\u001b[0;31m[  FAILED  ] \u001b[mTEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail\n\u001b[0;32m[----------] \u001b[m8 tests from ExpectNonfatalFailureTest\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.CanReferenceGlobalVariables\n\u001b[0;32m[       OK ] \u001b[mExpectNonfatalFailureTest.CanReferenceGlobalVariables\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.CanReferenceLocalVariables\n\u001b[0;32m[       OK ] \u001b[mExpectNonfatalFailureTest.CanReferenceLocalVariables\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure\n\u001b[0;32m[       OK ] \u001b[mExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual: 2 failures\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure 1.\n\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure 2.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual:\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementReturns\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementReturns\n\u001b[0;32m[ RUN      ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementThrows\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementThrows\n\u001b[0;32m[----------] \u001b[m8 tests from ExpectFatalFailureTest\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.CanReferenceGlobalVariables\n\u001b[0;32m[       OK ] \u001b[mExpectFatalFailureTest.CanReferenceGlobalVariables\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.CanReferenceLocalStaticVariables\n\u001b[0;32m[       OK ] \u001b[mExpectFatalFailureTest.CanReferenceLocalStaticVariables\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure\n\u001b[0;32m[       OK ] \u001b[mExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual: 2 failures\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual:\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.FailsWhenStatementReturns\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenStatementReturns\n\u001b[0;32m[ RUN      ] \u001b[mExpectFatalFailureTest.FailsWhenStatementThrows\n(expecting a failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenStatementThrows\n\u001b[0;32m[----------] \u001b[m2 tests from TypedTest/0, where TypeParam = int\n\u001b[0;32m[ RUN      ] \u001b[mTypedTest/0.Success\n\u001b[0;32m[       OK ] \u001b[mTypedTest/0.Success\n\u001b[0;32m[ RUN      ] \u001b[mTypedTest/0.Failure\ngtest_output_test_.cc:#: Failure\nValue of: TypeParam()\n  Actual: 0\nExpected: 1\nExpected failure\n\u001b[0;31m[  FAILED  ] \u001b[mTypedTest/0.Failure, where TypeParam = int\n\u001b[0;32m[----------] \u001b[m2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char\n\u001b[0;32m[ RUN      ] \u001b[mUnsigned/TypedTestP/0.Success\n\u001b[0;32m[       OK ] \u001b[mUnsigned/TypedTestP/0.Success\n\u001b[0;32m[ RUN      ] \u001b[mUnsigned/TypedTestP/0.Failure\ngtest_output_test_.cc:#: Failure\nValue of: TypeParam()\n  Actual: '\\0'\nExpected: 1U\nWhich is: 1\nExpected failure\n\u001b[0;31m[  FAILED  ] \u001b[mUnsigned/TypedTestP/0.Failure, where TypeParam = unsigned char\n\u001b[0;32m[----------] \u001b[m2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned int\n\u001b[0;32m[ RUN      ] \u001b[mUnsigned/TypedTestP/1.Success\n\u001b[0;32m[       OK ] \u001b[mUnsigned/TypedTestP/1.Success\n\u001b[0;32m[ RUN      ] \u001b[mUnsigned/TypedTestP/1.Failure\ngtest_output_test_.cc:#: Failure\nValue of: TypeParam()\n  Actual: 0\nExpected: 1U\nWhich is: 1\nExpected failure\n\u001b[0;31m[  FAILED  ] \u001b[mUnsigned/TypedTestP/1.Failure, where TypeParam = unsigned int\n\u001b[0;32m[----------] \u001b[m4 tests from ExpectFailureTest\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureTest.ExpectFatalFailure\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual:\ngtest_output_test_.cc:#: Success:\nSucceeded\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual:\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure.\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure containing \"Some other fatal failure expected.\"\n  Actual:\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureTest.ExpectNonFatalFailure\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual:\ngtest_output_test_.cc:#: Success:\nSucceeded\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual:\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure containing \"Some other non-fatal failure.\"\n  Actual:\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectNonFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureTest.ExpectFatalFailureOnAllThreads\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual:\ngtest_output_test_.cc:#: Success:\nSucceeded\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual:\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure.\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 fatal failure containing \"Some other fatal failure expected.\"\n  Actual:\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectFatalFailureOnAllThreads\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureTest.ExpectNonFatalFailureOnAllThreads\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual:\ngtest_output_test_.cc:#: Success:\nSucceeded\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual:\ngtest_output_test_.cc:#: Fatal failure:\nFailed\nExpected fatal failure.\n\n(expecting 1 failure)\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure containing \"Some other non-fatal failure.\"\n  Actual:\ngtest_output_test_.cc:#: Non-fatal failure:\nFailed\nExpected non-fatal failure.\n\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectNonFatalFailureOnAllThreads\n\u001b[0;32m[----------] \u001b[m2 tests from ExpectFailureWithThreadsTest\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureWithThreadsTest.ExpectFatalFailure\n(expecting 2 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected fatal failure.\ngtest.cc:#: Failure\nExpected: 1 fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureWithThreadsTest.ExpectFatalFailure\n\u001b[0;32m[ RUN      ] \u001b[mExpectFailureWithThreadsTest.ExpectNonFatalFailure\n(expecting 2 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected non-fatal failure.\ngtest.cc:#: Failure\nExpected: 1 non-fatal failure\n  Actual: 0 failures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureWithThreadsTest.ExpectNonFatalFailure\n\u001b[0;32m[----------] \u001b[m1 test from ScopedFakeTestPartResultReporterTest\n\u001b[0;32m[ RUN      ] \u001b[mScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread\n(expecting 2 failures)\ngtest_output_test_.cc:#: Failure\nFailed\nExpected fatal failure.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected non-fatal failure.\n\u001b[0;31m[  FAILED  ] \u001b[mScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread\n\u001b[0;32m[----------] \u001b[m1 test from PrintingFailingParams/FailingParamTest\n\u001b[0;32m[ RUN      ] \u001b[mPrintingFailingParams/FailingParamTest.Fails/0\ngtest_output_test_.cc:#: Failure\nValue of: GetParam()\n  Actual: 2\nExpected: 1\n\u001b[0;31m[  FAILED  ] \u001b[mPrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2\n\u001b[0;32m[----------] \u001b[mGlobal test environment tear-down\nBarEnvironment::TearDown() called.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected non-fatal failure.\nFooEnvironment::TearDown() called.\ngtest_output_test_.cc:#: Failure\nFailed\nExpected fatal failure.\n\u001b[0;32m[==========] \u001b[m63 tests from 28 test cases ran.\n\u001b[0;32m[  PASSED  ] \u001b[m21 tests.\n\u001b[0;31m[  FAILED  ] \u001b[m42 tests, listed below:\n\u001b[0;31m[  FAILED  ] \u001b[mNonfatalFailureTest.EscapesStringOperands\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.FatalFailureInSubroutine\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.FatalFailureInNestedSubroutine\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureTest.NonfatalFailureInSubroutine\n\u001b[0;31m[  FAILED  ] \u001b[mLoggingTest.InterleavingLoggingAndAssertions\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.ObeysScopes\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksInLoop\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksInSubroutine\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.CanBeNested\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.CanBeRepeated\n\u001b[0;31m[  FAILED  ] \u001b[mSCOPED_TRACETest.WorksConcurrently\n\u001b[0;31m[  FAILED  ] \u001b[mNonFatalFailureInFixtureConstructorTest.FailureInConstructor\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureInFixtureConstructorTest.FailureInConstructor\n\u001b[0;31m[  FAILED  ] \u001b[mNonFatalFailureInSetUpTest.FailureInSetUp\n\u001b[0;31m[  FAILED  ] \u001b[mFatalFailureInSetUpTest.FailureInSetUp\n\u001b[0;31m[  FAILED  ] \u001b[mAddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseTest.ThisShouldFail\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseTest.ThisShouldFailToo\n\u001b[0;31m[  FAILED  ] \u001b[mMixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail\n\u001b[0;31m[  FAILED  ] \u001b[mTEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail\n\u001b[0;31m[  FAILED  ] \u001b[mTEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementReturns\n\u001b[0;31m[  FAILED  ] \u001b[mExpectNonfatalFailureTest.FailsWhenStatementThrows\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenStatementReturns\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFatalFailureTest.FailsWhenStatementThrows\n\u001b[0;31m[  FAILED  ] \u001b[mTypedTest/0.Failure, where TypeParam = int\n\u001b[0;31m[  FAILED  ] \u001b[mUnsigned/TypedTestP/0.Failure, where TypeParam = unsigned char\n\u001b[0;31m[  FAILED  ] \u001b[mUnsigned/TypedTestP/1.Failure, where TypeParam = unsigned int\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectNonFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectFatalFailureOnAllThreads\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureTest.ExpectNonFatalFailureOnAllThreads\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureWithThreadsTest.ExpectFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mExpectFailureWithThreadsTest.ExpectNonFatalFailure\n\u001b[0;31m[  FAILED  ] \u001b[mScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread\n\u001b[0;31m[  FAILED  ] \u001b[mPrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2\n\n42 FAILED TESTS\n\u001b[0;33m  YOU HAVE 1 DISABLED TEST\n\n\u001b[mNote: Google Test filter = FatalFailureTest.*:LoggingTest.*\n[==========] Running 4 tests from 2 test cases.\n[----------] Global test environment set-up.\n[----------] 3 tests from FatalFailureTest\n[ RUN      ] FatalFailureTest.FatalFailureInSubroutine\n(expecting a failure that x should be 1)\ngtest_output_test_.cc:#: Failure\nValue of: x\n  Actual: 2\nExpected: 1\n[  FAILED  ] FatalFailureTest.FatalFailureInSubroutine (? ms)\n[ RUN      ] FatalFailureTest.FatalFailureInNestedSubroutine\n(expecting a failure that x should be 1)\ngtest_output_test_.cc:#: Failure\nValue of: x\n  Actual: 2\nExpected: 1\n[  FAILED  ] FatalFailureTest.FatalFailureInNestedSubroutine (? ms)\n[ RUN      ] FatalFailureTest.NonfatalFailureInSubroutine\n(expecting a failure on false)\ngtest_output_test_.cc:#: Failure\nValue of: false\n  Actual: false\nExpected: true\n[  FAILED  ] FatalFailureTest.NonfatalFailureInSubroutine (? ms)\n[----------] 3 tests from FatalFailureTest (? ms total)\n\n[----------] 1 test from LoggingTest\n[ RUN      ] LoggingTest.InterleavingLoggingAndAssertions\n(expecting 2 failures on (3) >= (a[i]))\ni == 0\ni == 1\ngtest_output_test_.cc:#: Failure\nExpected: (3) >= (a[i]), actual: 3 vs 9\ni == 2\ni == 3\ngtest_output_test_.cc:#: Failure\nExpected: (3) >= (a[i]), actual: 3 vs 6\n[  FAILED  ] LoggingTest.InterleavingLoggingAndAssertions (? ms)\n[----------] 1 test from LoggingTest (? ms total)\n\n[----------] Global test environment tear-down\n[==========] 4 tests from 2 test cases ran. (? ms total)\n[  PASSED  ] 0 tests.\n[  FAILED  ] 4 tests, listed below:\n[  FAILED  ] FatalFailureTest.FatalFailureInSubroutine\n[  FAILED  ] FatalFailureTest.FatalFailureInNestedSubroutine\n[  FAILED  ] FatalFailureTest.NonfatalFailureInSubroutine\n[  FAILED  ] LoggingTest.InterleavingLoggingAndAssertions\n\n 4 FAILED TESTS\n  YOU HAVE 1 DISABLED TEST\n\nNote: Google Test filter = *DISABLED_*\n[==========] Running 1 test from 1 test case.\n[----------] Global test environment set-up.\n[----------] 1 test from DisabledTestsWarningTest\n[ RUN      ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning\n[       OK ] DisabledTestsWarningTest.DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning\n[----------] Global test environment tear-down\n[==========] 1 test from 1 test case ran.\n[  PASSED  ] 1 test.\nNote: Google Test filter = PassingTest.*\nNote: This is test shard 2 of 2.\n[==========] Running 1 test from 1 test case.\n[----------] Global test environment set-up.\n[----------] 1 test from PassingTest\n[ RUN      ] PassingTest.PassingTest2\n[       OK ] PassingTest.PassingTest2\n[----------] Global test environment tear-down\n[==========] 1 test from 1 test case ran.\n[  PASSED  ] 1 test.\n\n  YOU HAVE 1 DISABLED TEST\n\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_pred_impl_unittest.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// This file is AUTOMATICALLY GENERATED on 10/31/2011 by command\n// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!\n\n// Regression test for gtest_pred_impl.h\n//\n// This file is generated by a script and quite long.  If you intend to\n// learn how Google Test works by reading its unit tests, read\n// gtest_unittest.cc instead.\n//\n// This is intended as a regression test for the Google Test predicate\n// assertions.  We compile it as part of the gtest_unittest target\n// only to keep the implementation tidy and compact, as it is quite\n// involved to set up the stage for testing Google Test using Google\n// Test itself.\n//\n// Currently, gtest_unittest takes ~11 seconds to run in the testing\n// daemon.  In the future, if it grows too large and needs much more\n// time to finish, we should consider separating this file into a\n// stand-alone regression test.\n\n#include <iostream>\n\n#include \"gtest/gtest.h\"\n#include \"gtest/gtest-spi.h\"\n\n// A user-defined data type.\nstruct Bool {\n  explicit Bool(int val) : value(val != 0) {}\n\n  bool operator>(int n) const { return value > Bool(n).value; }\n\n  Bool operator+(const Bool& rhs) const { return Bool(value + rhs.value); }\n\n  bool operator==(const Bool& rhs) const { return value == rhs.value; }\n\n  bool value;\n};\n\n// Enables Bool to be used in assertions.\nstd::ostream& operator<<(std::ostream& os, const Bool& x) {\n  return os << (x.value ? \"true\" : \"false\");\n}\n\n// Sample functions/functors for testing unary predicate assertions.\n\n// A unary predicate function.\ntemplate <typename T1>\nbool PredFunction1(T1 v1) {\n  return v1 > 0;\n}\n\n// The following two functions are needed to circumvent a bug in\n// gcc 2.95.3, which sometimes has problem with the above template\n// function.\nbool PredFunction1Int(int v1) {\n  return v1 > 0;\n}\nbool PredFunction1Bool(Bool v1) {\n  return v1 > 0;\n}\n\n// A unary predicate functor.\nstruct PredFunctor1 {\n  template <typename T1>\n  bool operator()(const T1& v1) {\n    return v1 > 0;\n  }\n};\n\n// A unary predicate-formatter function.\ntemplate <typename T1>\ntesting::AssertionResult PredFormatFunction1(const char* e1,\n                                             const T1& v1) {\n  if (PredFunction1(v1))\n    return testing::AssertionSuccess();\n\n  return testing::AssertionFailure()\n      << e1\n      << \" is expected to be positive, but evaluates to \"\n      << v1 << \".\";\n}\n\n// A unary predicate-formatter functor.\nstruct PredFormatFunctor1 {\n  template <typename T1>\n  testing::AssertionResult operator()(const char* e1,\n                                      const T1& v1) const {\n    return PredFormatFunction1(e1, v1);\n  }\n};\n\n// Tests for {EXPECT|ASSERT}_PRED_FORMAT1.\n\nclass Predicate1Test : public testing::Test {\n protected:\n  virtual void SetUp() {\n    expected_to_finish_ = true;\n    finished_ = false;\n    n1_ = 0;\n  }\n\n  virtual void TearDown() {\n    // Verifies that each of the predicate's arguments was evaluated\n    // exactly once.\n    EXPECT_EQ(1, n1_) <<\n        \"The predicate assertion didn't evaluate argument 2 \"\n        \"exactly once.\";\n\n    // Verifies that the control flow in the test function is expected.\n    if (expected_to_finish_ && !finished_) {\n      FAIL() << \"The predicate assertion unexpactedly aborted the test.\";\n    } else if (!expected_to_finish_ && finished_) {\n      FAIL() << \"The failed predicate assertion didn't abort the test \"\n                \"as expected.\";\n    }\n  }\n\n  // true iff the test function is expected to run to finish.\n  static bool expected_to_finish_;\n\n  // true iff the test function did run to finish.\n  static bool finished_;\n\n  static int n1_;\n};\n\nbool Predicate1Test::expected_to_finish_;\nbool Predicate1Test::finished_;\nint Predicate1Test::n1_;\n\ntypedef Predicate1Test EXPECT_PRED_FORMAT1Test;\ntypedef Predicate1Test ASSERT_PRED_FORMAT1Test;\ntypedef Predicate1Test EXPECT_PRED1Test;\ntypedef Predicate1Test ASSERT_PRED1Test;\n\n// Tests a successful EXPECT_PRED1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED1(PredFunction1Int,\n               ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED1(PredFunction1Bool,\n               Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED1(PredFunctor1(),\n               ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED1(PredFunctor1(),\n               Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED1Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED1(PredFunction1Int,\n                 n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED1Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED1(PredFunction1Bool,\n                 Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED1Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED1(PredFunctor1(),\n                 n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED1Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED1(PredFunctor1(),\n                 Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED1(PredFunction1Int,\n               ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED1(PredFunction1Bool,\n               Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED1(PredFunctor1(),\n               ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED1(PredFunctor1(),\n               Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED1Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED1(PredFunction1Int,\n                 n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED1Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED1(PredFunction1Bool,\n                 Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED1Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED1(PredFunctor1(),\n                 n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED1Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED1(PredFunctor1(),\n                 Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT1(PredFormatFunction1,\n                      ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT1(PredFormatFunction1,\n                      Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),\n                      ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT1(PredFormatFunctor1(),\n                      Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT1(PredFormatFunction1,\n                        n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT1(PredFormatFunction1,\n                        Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),\n                        n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT1(PredFormatFunctor1(),\n                        Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT1(PredFormatFunction1,\n                      ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT1(PredFormatFunction1,\n                      Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),\n                      ++n1_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT1(PredFormatFunctor1(),\n                      Bool(++n1_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(PredFormatFunction1,\n                        n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(PredFormatFunction1,\n                        Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),\n                        n1_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT1 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT1Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(PredFormatFunctor1(),\n                        Bool(n1_++));\n    finished_ = true;\n  }, \"\");\n}\n// Sample functions/functors for testing binary predicate assertions.\n\n// A binary predicate function.\ntemplate <typename T1, typename T2>\nbool PredFunction2(T1 v1, T2 v2) {\n  return v1 + v2 > 0;\n}\n\n// The following two functions are needed to circumvent a bug in\n// gcc 2.95.3, which sometimes has problem with the above template\n// function.\nbool PredFunction2Int(int v1, int v2) {\n  return v1 + v2 > 0;\n}\nbool PredFunction2Bool(Bool v1, Bool v2) {\n  return v1 + v2 > 0;\n}\n\n// A binary predicate functor.\nstruct PredFunctor2 {\n  template <typename T1, typename T2>\n  bool operator()(const T1& v1,\n                  const T2& v2) {\n    return v1 + v2 > 0;\n  }\n};\n\n// A binary predicate-formatter function.\ntemplate <typename T1, typename T2>\ntesting::AssertionResult PredFormatFunction2(const char* e1,\n                                             const char* e2,\n                                             const T1& v1,\n                                             const T2& v2) {\n  if (PredFunction2(v1, v2))\n    return testing::AssertionSuccess();\n\n  return testing::AssertionFailure()\n      << e1 << \" + \" << e2\n      << \" is expected to be positive, but evaluates to \"\n      << v1 + v2 << \".\";\n}\n\n// A binary predicate-formatter functor.\nstruct PredFormatFunctor2 {\n  template <typename T1, typename T2>\n  testing::AssertionResult operator()(const char* e1,\n                                      const char* e2,\n                                      const T1& v1,\n                                      const T2& v2) const {\n    return PredFormatFunction2(e1, e2, v1, v2);\n  }\n};\n\n// Tests for {EXPECT|ASSERT}_PRED_FORMAT2.\n\nclass Predicate2Test : public testing::Test {\n protected:\n  virtual void SetUp() {\n    expected_to_finish_ = true;\n    finished_ = false;\n    n1_ = n2_ = 0;\n  }\n\n  virtual void TearDown() {\n    // Verifies that each of the predicate's arguments was evaluated\n    // exactly once.\n    EXPECT_EQ(1, n1_) <<\n        \"The predicate assertion didn't evaluate argument 2 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n2_) <<\n        \"The predicate assertion didn't evaluate argument 3 \"\n        \"exactly once.\";\n\n    // Verifies that the control flow in the test function is expected.\n    if (expected_to_finish_ && !finished_) {\n      FAIL() << \"The predicate assertion unexpactedly aborted the test.\";\n    } else if (!expected_to_finish_ && finished_) {\n      FAIL() << \"The failed predicate assertion didn't abort the test \"\n                \"as expected.\";\n    }\n  }\n\n  // true iff the test function is expected to run to finish.\n  static bool expected_to_finish_;\n\n  // true iff the test function did run to finish.\n  static bool finished_;\n\n  static int n1_;\n  static int n2_;\n};\n\nbool Predicate2Test::expected_to_finish_;\nbool Predicate2Test::finished_;\nint Predicate2Test::n1_;\nint Predicate2Test::n2_;\n\ntypedef Predicate2Test EXPECT_PRED_FORMAT2Test;\ntypedef Predicate2Test ASSERT_PRED_FORMAT2Test;\ntypedef Predicate2Test EXPECT_PRED2Test;\ntypedef Predicate2Test ASSERT_PRED2Test;\n\n// Tests a successful EXPECT_PRED2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED2(PredFunction2Int,\n               ++n1_,\n               ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED2(PredFunction2Bool,\n               Bool(++n1_),\n               Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED2(PredFunctor2(),\n               ++n1_,\n               ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED2(PredFunctor2(),\n               Bool(++n1_),\n               Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED2Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED2(PredFunction2Int,\n                 n1_++,\n                 n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED2Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED2(PredFunction2Bool,\n                 Bool(n1_++),\n                 Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED2Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED2(PredFunctor2(),\n                 n1_++,\n                 n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED2Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED2(PredFunctor2(),\n                 Bool(n1_++),\n                 Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED2(PredFunction2Int,\n               ++n1_,\n               ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED2(PredFunction2Bool,\n               Bool(++n1_),\n               Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED2(PredFunctor2(),\n               ++n1_,\n               ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED2(PredFunctor2(),\n               Bool(++n1_),\n               Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED2Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED2(PredFunction2Int,\n                 n1_++,\n                 n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED2Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED2(PredFunction2Bool,\n                 Bool(n1_++),\n                 Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED2Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED2(PredFunctor2(),\n                 n1_++,\n                 n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED2Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED2(PredFunctor2(),\n                 Bool(n1_++),\n                 Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT2(PredFormatFunction2,\n                      ++n1_,\n                      ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT2(PredFormatFunction2,\n                      Bool(++n1_),\n                      Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),\n                      ++n1_,\n                      ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT2(PredFormatFunctor2(),\n                      Bool(++n1_),\n                      Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(PredFormatFunction2,\n                        n1_++,\n                        n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(PredFormatFunction2,\n                        Bool(n1_++),\n                        Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),\n                        n1_++,\n                        n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(PredFormatFunctor2(),\n                        Bool(n1_++),\n                        Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT2(PredFormatFunction2,\n                      ++n1_,\n                      ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT2(PredFormatFunction2,\n                      Bool(++n1_),\n                      Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),\n                      ++n1_,\n                      ++n2_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT2(PredFormatFunctor2(),\n                      Bool(++n1_),\n                      Bool(++n2_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(PredFormatFunction2,\n                        n1_++,\n                        n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(PredFormatFunction2,\n                        Bool(n1_++),\n                        Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),\n                        n1_++,\n                        n2_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT2 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT2Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(PredFormatFunctor2(),\n                        Bool(n1_++),\n                        Bool(n2_++));\n    finished_ = true;\n  }, \"\");\n}\n// Sample functions/functors for testing ternary predicate assertions.\n\n// A ternary predicate function.\ntemplate <typename T1, typename T2, typename T3>\nbool PredFunction3(T1 v1, T2 v2, T3 v3) {\n  return v1 + v2 + v3 > 0;\n}\n\n// The following two functions are needed to circumvent a bug in\n// gcc 2.95.3, which sometimes has problem with the above template\n// function.\nbool PredFunction3Int(int v1, int v2, int v3) {\n  return v1 + v2 + v3 > 0;\n}\nbool PredFunction3Bool(Bool v1, Bool v2, Bool v3) {\n  return v1 + v2 + v3 > 0;\n}\n\n// A ternary predicate functor.\nstruct PredFunctor3 {\n  template <typename T1, typename T2, typename T3>\n  bool operator()(const T1& v1,\n                  const T2& v2,\n                  const T3& v3) {\n    return v1 + v2 + v3 > 0;\n  }\n};\n\n// A ternary predicate-formatter function.\ntemplate <typename T1, typename T2, typename T3>\ntesting::AssertionResult PredFormatFunction3(const char* e1,\n                                             const char* e2,\n                                             const char* e3,\n                                             const T1& v1,\n                                             const T2& v2,\n                                             const T3& v3) {\n  if (PredFunction3(v1, v2, v3))\n    return testing::AssertionSuccess();\n\n  return testing::AssertionFailure()\n      << e1 << \" + \" << e2 << \" + \" << e3\n      << \" is expected to be positive, but evaluates to \"\n      << v1 + v2 + v3 << \".\";\n}\n\n// A ternary predicate-formatter functor.\nstruct PredFormatFunctor3 {\n  template <typename T1, typename T2, typename T3>\n  testing::AssertionResult operator()(const char* e1,\n                                      const char* e2,\n                                      const char* e3,\n                                      const T1& v1,\n                                      const T2& v2,\n                                      const T3& v3) const {\n    return PredFormatFunction3(e1, e2, e3, v1, v2, v3);\n  }\n};\n\n// Tests for {EXPECT|ASSERT}_PRED_FORMAT3.\n\nclass Predicate3Test : public testing::Test {\n protected:\n  virtual void SetUp() {\n    expected_to_finish_ = true;\n    finished_ = false;\n    n1_ = n2_ = n3_ = 0;\n  }\n\n  virtual void TearDown() {\n    // Verifies that each of the predicate's arguments was evaluated\n    // exactly once.\n    EXPECT_EQ(1, n1_) <<\n        \"The predicate assertion didn't evaluate argument 2 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n2_) <<\n        \"The predicate assertion didn't evaluate argument 3 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n3_) <<\n        \"The predicate assertion didn't evaluate argument 4 \"\n        \"exactly once.\";\n\n    // Verifies that the control flow in the test function is expected.\n    if (expected_to_finish_ && !finished_) {\n      FAIL() << \"The predicate assertion unexpactedly aborted the test.\";\n    } else if (!expected_to_finish_ && finished_) {\n      FAIL() << \"The failed predicate assertion didn't abort the test \"\n                \"as expected.\";\n    }\n  }\n\n  // true iff the test function is expected to run to finish.\n  static bool expected_to_finish_;\n\n  // true iff the test function did run to finish.\n  static bool finished_;\n\n  static int n1_;\n  static int n2_;\n  static int n3_;\n};\n\nbool Predicate3Test::expected_to_finish_;\nbool Predicate3Test::finished_;\nint Predicate3Test::n1_;\nint Predicate3Test::n2_;\nint Predicate3Test::n3_;\n\ntypedef Predicate3Test EXPECT_PRED_FORMAT3Test;\ntypedef Predicate3Test ASSERT_PRED_FORMAT3Test;\ntypedef Predicate3Test EXPECT_PRED3Test;\ntypedef Predicate3Test ASSERT_PRED3Test;\n\n// Tests a successful EXPECT_PRED3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED3(PredFunction3Int,\n               ++n1_,\n               ++n2_,\n               ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED3(PredFunction3Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED3(PredFunctor3(),\n               ++n1_,\n               ++n2_,\n               ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED3(PredFunctor3(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED3Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED3(PredFunction3Int,\n                 n1_++,\n                 n2_++,\n                 n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED3Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED3(PredFunction3Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED3Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED3(PredFunctor3(),\n                 n1_++,\n                 n2_++,\n                 n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED3Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED3(PredFunctor3(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED3(PredFunction3Int,\n               ++n1_,\n               ++n2_,\n               ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED3(PredFunction3Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED3(PredFunctor3(),\n               ++n1_,\n               ++n2_,\n               ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED3(PredFunctor3(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED3Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED3(PredFunction3Int,\n                 n1_++,\n                 n2_++,\n                 n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED3Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED3(PredFunction3Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED3Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED3(PredFunctor3(),\n                 n1_++,\n                 n2_++,\n                 n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED3Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED3(PredFunctor3(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT3(PredFormatFunction3,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT3(PredFormatFunction3,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT3(PredFormatFunctor3(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT3(PredFormatFunction3,\n                        n1_++,\n                        n2_++,\n                        n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT3(PredFormatFunction3,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),\n                        n1_++,\n                        n2_++,\n                        n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT3(PredFormatFunctor3(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT3(PredFormatFunction3,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT3(PredFormatFunction3,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT3(PredFormatFunctor3(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT3(PredFormatFunction3,\n                        n1_++,\n                        n2_++,\n                        n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT3(PredFormatFunction3,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),\n                        n1_++,\n                        n2_++,\n                        n3_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT3 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT3Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT3(PredFormatFunctor3(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++));\n    finished_ = true;\n  }, \"\");\n}\n// Sample functions/functors for testing 4-ary predicate assertions.\n\n// A 4-ary predicate function.\ntemplate <typename T1, typename T2, typename T3, typename T4>\nbool PredFunction4(T1 v1, T2 v2, T3 v3, T4 v4) {\n  return v1 + v2 + v3 + v4 > 0;\n}\n\n// The following two functions are needed to circumvent a bug in\n// gcc 2.95.3, which sometimes has problem with the above template\n// function.\nbool PredFunction4Int(int v1, int v2, int v3, int v4) {\n  return v1 + v2 + v3 + v4 > 0;\n}\nbool PredFunction4Bool(Bool v1, Bool v2, Bool v3, Bool v4) {\n  return v1 + v2 + v3 + v4 > 0;\n}\n\n// A 4-ary predicate functor.\nstruct PredFunctor4 {\n  template <typename T1, typename T2, typename T3, typename T4>\n  bool operator()(const T1& v1,\n                  const T2& v2,\n                  const T3& v3,\n                  const T4& v4) {\n    return v1 + v2 + v3 + v4 > 0;\n  }\n};\n\n// A 4-ary predicate-formatter function.\ntemplate <typename T1, typename T2, typename T3, typename T4>\ntesting::AssertionResult PredFormatFunction4(const char* e1,\n                                             const char* e2,\n                                             const char* e3,\n                                             const char* e4,\n                                             const T1& v1,\n                                             const T2& v2,\n                                             const T3& v3,\n                                             const T4& v4) {\n  if (PredFunction4(v1, v2, v3, v4))\n    return testing::AssertionSuccess();\n\n  return testing::AssertionFailure()\n      << e1 << \" + \" << e2 << \" + \" << e3 << \" + \" << e4\n      << \" is expected to be positive, but evaluates to \"\n      << v1 + v2 + v3 + v4 << \".\";\n}\n\n// A 4-ary predicate-formatter functor.\nstruct PredFormatFunctor4 {\n  template <typename T1, typename T2, typename T3, typename T4>\n  testing::AssertionResult operator()(const char* e1,\n                                      const char* e2,\n                                      const char* e3,\n                                      const char* e4,\n                                      const T1& v1,\n                                      const T2& v2,\n                                      const T3& v3,\n                                      const T4& v4) const {\n    return PredFormatFunction4(e1, e2, e3, e4, v1, v2, v3, v4);\n  }\n};\n\n// Tests for {EXPECT|ASSERT}_PRED_FORMAT4.\n\nclass Predicate4Test : public testing::Test {\n protected:\n  virtual void SetUp() {\n    expected_to_finish_ = true;\n    finished_ = false;\n    n1_ = n2_ = n3_ = n4_ = 0;\n  }\n\n  virtual void TearDown() {\n    // Verifies that each of the predicate's arguments was evaluated\n    // exactly once.\n    EXPECT_EQ(1, n1_) <<\n        \"The predicate assertion didn't evaluate argument 2 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n2_) <<\n        \"The predicate assertion didn't evaluate argument 3 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n3_) <<\n        \"The predicate assertion didn't evaluate argument 4 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n4_) <<\n        \"The predicate assertion didn't evaluate argument 5 \"\n        \"exactly once.\";\n\n    // Verifies that the control flow in the test function is expected.\n    if (expected_to_finish_ && !finished_) {\n      FAIL() << \"The predicate assertion unexpactedly aborted the test.\";\n    } else if (!expected_to_finish_ && finished_) {\n      FAIL() << \"The failed predicate assertion didn't abort the test \"\n                \"as expected.\";\n    }\n  }\n\n  // true iff the test function is expected to run to finish.\n  static bool expected_to_finish_;\n\n  // true iff the test function did run to finish.\n  static bool finished_;\n\n  static int n1_;\n  static int n2_;\n  static int n3_;\n  static int n4_;\n};\n\nbool Predicate4Test::expected_to_finish_;\nbool Predicate4Test::finished_;\nint Predicate4Test::n1_;\nint Predicate4Test::n2_;\nint Predicate4Test::n3_;\nint Predicate4Test::n4_;\n\ntypedef Predicate4Test EXPECT_PRED_FORMAT4Test;\ntypedef Predicate4Test ASSERT_PRED_FORMAT4Test;\ntypedef Predicate4Test EXPECT_PRED4Test;\ntypedef Predicate4Test ASSERT_PRED4Test;\n\n// Tests a successful EXPECT_PRED4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED4(PredFunction4Int,\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED4(PredFunction4Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED4(PredFunctor4(),\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED4(PredFunctor4(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED4Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED4(PredFunction4Int,\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED4Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED4(PredFunction4Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED4Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED4(PredFunctor4(),\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED4Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED4(PredFunctor4(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED4(PredFunction4Int,\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED4(PredFunction4Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED4(PredFunctor4(),\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED4(PredFunctor4(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED4Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED4(PredFunction4Int,\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED4Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED4(PredFunction4Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED4Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED4(PredFunctor4(),\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED4Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED4(PredFunctor4(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT4(PredFormatFunction4,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT4(PredFormatFunction4,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT4(PredFormatFunctor4(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(PredFormatFunction4,\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(PredFormatFunction4,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(PredFormatFunctor4(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT4(PredFormatFunction4,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT4(PredFormatFunction4,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT4(PredFormatFunctor4(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT4(PredFormatFunction4,\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT4(PredFormatFunction4,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT4 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT4Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT4(PredFormatFunctor4(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++));\n    finished_ = true;\n  }, \"\");\n}\n// Sample functions/functors for testing 5-ary predicate assertions.\n\n// A 5-ary predicate function.\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nbool PredFunction5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {\n  return v1 + v2 + v3 + v4 + v5 > 0;\n}\n\n// The following two functions are needed to circumvent a bug in\n// gcc 2.95.3, which sometimes has problem with the above template\n// function.\nbool PredFunction5Int(int v1, int v2, int v3, int v4, int v5) {\n  return v1 + v2 + v3 + v4 + v5 > 0;\n}\nbool PredFunction5Bool(Bool v1, Bool v2, Bool v3, Bool v4, Bool v5) {\n  return v1 + v2 + v3 + v4 + v5 > 0;\n}\n\n// A 5-ary predicate functor.\nstruct PredFunctor5 {\n  template <typename T1, typename T2, typename T3, typename T4, typename T5>\n  bool operator()(const T1& v1,\n                  const T2& v2,\n                  const T3& v3,\n                  const T4& v4,\n                  const T5& v5) {\n    return v1 + v2 + v3 + v4 + v5 > 0;\n  }\n};\n\n// A 5-ary predicate-formatter function.\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\ntesting::AssertionResult PredFormatFunction5(const char* e1,\n                                             const char* e2,\n                                             const char* e3,\n                                             const char* e4,\n                                             const char* e5,\n                                             const T1& v1,\n                                             const T2& v2,\n                                             const T3& v3,\n                                             const T4& v4,\n                                             const T5& v5) {\n  if (PredFunction5(v1, v2, v3, v4, v5))\n    return testing::AssertionSuccess();\n\n  return testing::AssertionFailure()\n      << e1 << \" + \" << e2 << \" + \" << e3 << \" + \" << e4 << \" + \" << e5\n      << \" is expected to be positive, but evaluates to \"\n      << v1 + v2 + v3 + v4 + v5 << \".\";\n}\n\n// A 5-ary predicate-formatter functor.\nstruct PredFormatFunctor5 {\n  template <typename T1, typename T2, typename T3, typename T4, typename T5>\n  testing::AssertionResult operator()(const char* e1,\n                                      const char* e2,\n                                      const char* e3,\n                                      const char* e4,\n                                      const char* e5,\n                                      const T1& v1,\n                                      const T2& v2,\n                                      const T3& v3,\n                                      const T4& v4,\n                                      const T5& v5) const {\n    return PredFormatFunction5(e1, e2, e3, e4, e5, v1, v2, v3, v4, v5);\n  }\n};\n\n// Tests for {EXPECT|ASSERT}_PRED_FORMAT5.\n\nclass Predicate5Test : public testing::Test {\n protected:\n  virtual void SetUp() {\n    expected_to_finish_ = true;\n    finished_ = false;\n    n1_ = n2_ = n3_ = n4_ = n5_ = 0;\n  }\n\n  virtual void TearDown() {\n    // Verifies that each of the predicate's arguments was evaluated\n    // exactly once.\n    EXPECT_EQ(1, n1_) <<\n        \"The predicate assertion didn't evaluate argument 2 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n2_) <<\n        \"The predicate assertion didn't evaluate argument 3 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n3_) <<\n        \"The predicate assertion didn't evaluate argument 4 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n4_) <<\n        \"The predicate assertion didn't evaluate argument 5 \"\n        \"exactly once.\";\n    EXPECT_EQ(1, n5_) <<\n        \"The predicate assertion didn't evaluate argument 6 \"\n        \"exactly once.\";\n\n    // Verifies that the control flow in the test function is expected.\n    if (expected_to_finish_ && !finished_) {\n      FAIL() << \"The predicate assertion unexpactedly aborted the test.\";\n    } else if (!expected_to_finish_ && finished_) {\n      FAIL() << \"The failed predicate assertion didn't abort the test \"\n                \"as expected.\";\n    }\n  }\n\n  // true iff the test function is expected to run to finish.\n  static bool expected_to_finish_;\n\n  // true iff the test function did run to finish.\n  static bool finished_;\n\n  static int n1_;\n  static int n2_;\n  static int n3_;\n  static int n4_;\n  static int n5_;\n};\n\nbool Predicate5Test::expected_to_finish_;\nbool Predicate5Test::finished_;\nint Predicate5Test::n1_;\nint Predicate5Test::n2_;\nint Predicate5Test::n3_;\nint Predicate5Test::n4_;\nint Predicate5Test::n5_;\n\ntypedef Predicate5Test EXPECT_PRED_FORMAT5Test;\ntypedef Predicate5Test ASSERT_PRED_FORMAT5Test;\ntypedef Predicate5Test EXPECT_PRED5Test;\ntypedef Predicate5Test ASSERT_PRED5Test;\n\n// Tests a successful EXPECT_PRED5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED5(PredFunction5Int,\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_,\n               ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED5(PredFunction5Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_),\n               Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED5(PredFunctor5(),\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_,\n               ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED5(PredFunctor5(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_),\n               Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED5Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED5(PredFunction5Int,\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++,\n                 n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED5Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED5(PredFunction5Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++),\n                 Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED5Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED5(PredFunctor5(),\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++,\n                 n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED5Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED5(PredFunctor5(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++),\n                 Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED5(PredFunction5Int,\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_,\n               ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED5(PredFunction5Bool,\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_),\n               Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED5(PredFunctor5(),\n               ++n1_,\n               ++n2_,\n               ++n3_,\n               ++n4_,\n               ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED5(PredFunctor5(),\n               Bool(++n1_),\n               Bool(++n2_),\n               Bool(++n3_),\n               Bool(++n4_),\n               Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED5Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED5(PredFunction5Int,\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++,\n                 n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED5Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED5(PredFunction5Bool,\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++),\n                 Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED5Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED5(PredFunctor5(),\n                 n1_++,\n                 n2_++,\n                 n3_++,\n                 n4_++,\n                 n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED5Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED5(PredFunctor5(),\n                 Bool(n1_++),\n                 Bool(n2_++),\n                 Bool(n3_++),\n                 Bool(n4_++),\n                 Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT5(PredFormatFunction5,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_,\n                      ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT5(PredFormatFunction5,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_),\n                      Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {\n  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_,\n                      ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {\n  EXPECT_PRED_FORMAT5(PredFormatFunctor5(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_),\n                      Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a failed EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT5(PredFormatFunction5,\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++,\n                        n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT5(PredFormatFunction5,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++),\n                        Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++,\n                        n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed EXPECT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(EXPECT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT5(PredFormatFunctor5(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++),\n                        Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a successful ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT5(PredFormatFunction5,\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_,\n                      ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT5(PredFormatFunction5,\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_),\n                      Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeSuccess) {\n  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),\n                      ++n1_,\n                      ++n2_,\n                      ++n3_,\n                      ++n4_,\n                      ++n5_);\n  finished_ = true;\n}\n\n// Tests a successful ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeSuccess) {\n  ASSERT_PRED_FORMAT5(PredFormatFunctor5(),\n                      Bool(++n1_),\n                      Bool(++n2_),\n                      Bool(++n3_),\n                      Bool(++n4_),\n                      Bool(++n5_));\n  finished_ = true;\n}\n\n// Tests a failed ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT5(PredFormatFunction5,\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++,\n                        n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a function on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctionOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT5(PredFormatFunction5,\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++),\n                        Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a built-in type (int).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnBuiltInTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),\n                        n1_++,\n                        n2_++,\n                        n3_++,\n                        n4_++,\n                        n5_++);\n    finished_ = true;\n  }, \"\");\n}\n\n// Tests a failed ASSERT_PRED_FORMAT5 where the\n// predicate-formatter is a functor on a user-defined type (Bool).\nTEST_F(ASSERT_PRED_FORMAT5Test, FunctorOnUserTypeFailure) {\n  expected_to_finish_ = false;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT5(PredFormatFunctor5(),\n                        Bool(n1_++),\n                        Bool(n2_++),\n                        Bool(n3_++),\n                        Bool(n4_++),\n                        Bool(n5_++));\n    finished_ = true;\n  }, \"\");\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_prod_test.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Unit test for include/gtest/gtest_prod.h.\n\n#include \"gtest/gtest.h\"\n#include \"test/production.h\"\n\n// Tests that private members can be accessed from a TEST declared as\n// a friend of the class.\nTEST(PrivateCodeTest, CanAccessPrivateMembers) {\n  PrivateCode a;\n  EXPECT_EQ(0, a.x_);\n\n  a.set_x(1);\n  EXPECT_EQ(1, a.x_);\n}\n\ntypedef testing::Test PrivateCodeFixtureTest;\n\n// Tests that private members can be accessed from a TEST_F declared\n// as a friend of the class.\nTEST_F(PrivateCodeFixtureTest, CanAccessPrivateMembers) {\n  PrivateCode a;\n  EXPECT_EQ(0, a.x_);\n\n  a.set_x(2);\n  EXPECT_EQ(2, a.x_);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_repeat_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Tests the --gtest_repeat=number flag.\n\n#include <stdlib.h>\n#include <iostream>\n#include \"gtest/gtest.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\n\nGTEST_DECLARE_string_(death_test_style);\nGTEST_DECLARE_string_(filter);\nGTEST_DECLARE_int32_(repeat);\n\n}  // namespace testing\n\nusing testing::GTEST_FLAG(death_test_style);\nusing testing::GTEST_FLAG(filter);\nusing testing::GTEST_FLAG(repeat);\n\nnamespace {\n\n// We need this when we are testing Google Test itself and therefore\n// cannot use Google Test assertions.\n#define GTEST_CHECK_INT_EQ_(expected, actual) \\\n  do {\\\n    const int expected_val = (expected);\\\n    const int actual_val = (actual);\\\n    if (::testing::internal::IsTrue(expected_val != actual_val)) {\\\n      ::std::cout << \"Value of: \" #actual \"\\n\"\\\n                  << \"  Actual: \" << actual_val << \"\\n\"\\\n                  << \"Expected: \" #expected \"\\n\"\\\n                  << \"Which is: \" << expected_val << \"\\n\";\\\n      ::testing::internal::posix::Abort();\\\n    }\\\n  } while (::testing::internal::AlwaysFalse())\n\n\n// Used for verifying that global environment set-up and tear-down are\n// inside the gtest_repeat loop.\n\nint g_environment_set_up_count = 0;\nint g_environment_tear_down_count = 0;\n\nclass MyEnvironment : public testing::Environment {\n public:\n  MyEnvironment() {}\n  virtual void SetUp() { g_environment_set_up_count++; }\n  virtual void TearDown() { g_environment_tear_down_count++; }\n};\n\n// A test that should fail.\n\nint g_should_fail_count = 0;\n\nTEST(FooTest, ShouldFail) {\n  g_should_fail_count++;\n  EXPECT_EQ(0, 1) << \"Expected failure.\";\n}\n\n// A test that should pass.\n\nint g_should_pass_count = 0;\n\nTEST(FooTest, ShouldPass) {\n  g_should_pass_count++;\n}\n\n// A test that contains a thread-safe death test and a fast death\n// test.  It should pass.\n\nint g_death_test_count = 0;\n\nTEST(BarDeathTest, ThreadSafeAndFast) {\n  g_death_test_count++;\n\n  GTEST_FLAG(death_test_style) = \"threadsafe\";\n  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), \"\");\n\n  GTEST_FLAG(death_test_style) = \"fast\";\n  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), \"\");\n}\n\n#if GTEST_HAS_PARAM_TEST\nint g_param_test_count = 0;\n\nconst int kNumberOfParamTests = 10;\n\nclass MyParamTest : public testing::TestWithParam<int> {};\n\nTEST_P(MyParamTest, ShouldPass) {\n  // TODO(vladl@google.com): Make parameter value checking robust\n  //                         WRT order of tests.\n  GTEST_CHECK_INT_EQ_(g_param_test_count % kNumberOfParamTests, GetParam());\n  g_param_test_count++;\n}\nINSTANTIATE_TEST_CASE_P(MyParamSequence,\n                        MyParamTest,\n                        testing::Range(0, kNumberOfParamTests));\n#endif  // GTEST_HAS_PARAM_TEST\n\n// Resets the count for each test.\nvoid ResetCounts() {\n  g_environment_set_up_count = 0;\n  g_environment_tear_down_count = 0;\n  g_should_fail_count = 0;\n  g_should_pass_count = 0;\n  g_death_test_count = 0;\n#if GTEST_HAS_PARAM_TEST\n  g_param_test_count = 0;\n#endif  // GTEST_HAS_PARAM_TEST\n}\n\n// Checks that the count for each test is expected.\nvoid CheckCounts(int expected) {\n  GTEST_CHECK_INT_EQ_(expected, g_environment_set_up_count);\n  GTEST_CHECK_INT_EQ_(expected, g_environment_tear_down_count);\n  GTEST_CHECK_INT_EQ_(expected, g_should_fail_count);\n  GTEST_CHECK_INT_EQ_(expected, g_should_pass_count);\n  GTEST_CHECK_INT_EQ_(expected, g_death_test_count);\n#if GTEST_HAS_PARAM_TEST\n  GTEST_CHECK_INT_EQ_(expected * kNumberOfParamTests, g_param_test_count);\n#endif  // GTEST_HAS_PARAM_TEST\n}\n\n// Tests the behavior of Google Test when --gtest_repeat is not specified.\nvoid TestRepeatUnspecified() {\n  ResetCounts();\n  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());\n  CheckCounts(1);\n}\n\n// Tests the behavior of Google Test when --gtest_repeat has the given value.\nvoid TestRepeat(int repeat) {\n  GTEST_FLAG(repeat) = repeat;\n\n  ResetCounts();\n  GTEST_CHECK_INT_EQ_(repeat > 0 ? 1 : 0, RUN_ALL_TESTS());\n  CheckCounts(repeat);\n}\n\n// Tests using --gtest_repeat when --gtest_filter specifies an empty\n// set of tests.\nvoid TestRepeatWithEmptyFilter(int repeat) {\n  GTEST_FLAG(repeat) = repeat;\n  GTEST_FLAG(filter) = \"None\";\n\n  ResetCounts();\n  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());\n  CheckCounts(0);\n}\n\n// Tests using --gtest_repeat when --gtest_filter specifies a set of\n// successful tests.\nvoid TestRepeatWithFilterForSuccessfulTests(int repeat) {\n  GTEST_FLAG(repeat) = repeat;\n  GTEST_FLAG(filter) = \"*-*ShouldFail\";\n\n  ResetCounts();\n  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());\n  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);\n  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);\n  GTEST_CHECK_INT_EQ_(0, g_should_fail_count);\n  GTEST_CHECK_INT_EQ_(repeat, g_should_pass_count);\n  GTEST_CHECK_INT_EQ_(repeat, g_death_test_count);\n#if GTEST_HAS_PARAM_TEST\n  GTEST_CHECK_INT_EQ_(repeat * kNumberOfParamTests, g_param_test_count);\n#endif  // GTEST_HAS_PARAM_TEST\n}\n\n// Tests using --gtest_repeat when --gtest_filter specifies a set of\n// failed tests.\nvoid TestRepeatWithFilterForFailedTests(int repeat) {\n  GTEST_FLAG(repeat) = repeat;\n  GTEST_FLAG(filter) = \"*ShouldFail\";\n\n  ResetCounts();\n  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());\n  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);\n  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);\n  GTEST_CHECK_INT_EQ_(repeat, g_should_fail_count);\n  GTEST_CHECK_INT_EQ_(0, g_should_pass_count);\n  GTEST_CHECK_INT_EQ_(0, g_death_test_count);\n#if GTEST_HAS_PARAM_TEST\n  GTEST_CHECK_INT_EQ_(0, g_param_test_count);\n#endif  // GTEST_HAS_PARAM_TEST\n}\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  testing::InitGoogleTest(&argc, argv);\n  testing::AddGlobalTestEnvironment(new MyEnvironment);\n\n  TestRepeatUnspecified();\n  TestRepeat(0);\n  TestRepeat(1);\n  TestRepeat(5);\n\n  TestRepeatWithEmptyFilter(2);\n  TestRepeatWithEmptyFilter(3);\n\n  TestRepeatWithFilterForSuccessfulTests(3);\n\n  TestRepeatWithFilterForFailedTests(4);\n\n  // It would be nice to verify that the tests indeed loop forever\n  // when GTEST_FLAG(repeat) is negative, but this test will be quite\n  // complicated to write.  Since this flag is for interactive\n  // debugging only and doesn't affect the normal test result, such a\n  // test would be an overkill.\n\n  printf(\"PASS\\n\");\n  return 0;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_shuffle_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2009 Google Inc. All Rights Reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Verifies that test shuffling works.\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport gtest_test_utils\n\n# Command to run the gtest_shuffle_test_ program.\nCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_shuffle_test_')\n\n# The environment variables for test sharding.\nTOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS'\nSHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX'\n\nTEST_FILTER = 'A*.A:A*.B:C*'\n\nALL_TESTS = []\nACTIVE_TESTS = []\nFILTERED_TESTS = []\nSHARDED_TESTS = []\n\nSHUFFLED_ALL_TESTS = []\nSHUFFLED_ACTIVE_TESTS = []\nSHUFFLED_FILTERED_TESTS = []\nSHUFFLED_SHARDED_TESTS = []\n\n\ndef AlsoRunDisabledTestsFlag():\n  return '--gtest_also_run_disabled_tests'\n\n\ndef FilterFlag(test_filter):\n  return '--gtest_filter=%s' % (test_filter,)\n\n\ndef RepeatFlag(n):\n  return '--gtest_repeat=%s' % (n,)\n\n\ndef ShuffleFlag():\n  return '--gtest_shuffle'\n\n\ndef RandomSeedFlag(n):\n  return '--gtest_random_seed=%s' % (n,)\n\n\ndef RunAndReturnOutput(extra_env, args):\n  \"\"\"Runs the test program and returns its output.\"\"\"\n\n  environ_copy = os.environ.copy()\n  environ_copy.update(extra_env)\n\n  return gtest_test_utils.Subprocess([COMMAND] + args, env=environ_copy).output\n\n\ndef GetTestsForAllIterations(extra_env, args):\n  \"\"\"Runs the test program and returns a list of test lists.\n\n  Args:\n    extra_env: a map from environment variables to their values\n    args: command line flags to pass to gtest_shuffle_test_\n\n  Returns:\n    A list where the i-th element is the list of tests run in the i-th\n    test iteration.\n  \"\"\"\n\n  test_iterations = []\n  for line in RunAndReturnOutput(extra_env, args).split('\\n'):\n    if line.startswith('----'):\n      tests = []\n      test_iterations.append(tests)\n    elif line.strip():\n      tests.append(line.strip())  # 'TestCaseName.TestName'\n\n  return test_iterations\n\n\ndef GetTestCases(tests):\n  \"\"\"Returns a list of test cases in the given full test names.\n\n  Args:\n    tests: a list of full test names\n\n  Returns:\n    A list of test cases from 'tests', in their original order.\n    Consecutive duplicates are removed.\n  \"\"\"\n\n  test_cases = []\n  for test in tests:\n    test_case = test.split('.')[0]\n    if not test_case in test_cases:\n      test_cases.append(test_case)\n\n  return test_cases\n\n\ndef CalculateTestLists():\n  \"\"\"Calculates the list of tests run under different flags.\"\"\"\n\n  if not ALL_TESTS:\n    ALL_TESTS.extend(\n        GetTestsForAllIterations({}, [AlsoRunDisabledTestsFlag()])[0])\n\n  if not ACTIVE_TESTS:\n    ACTIVE_TESTS.extend(GetTestsForAllIterations({}, [])[0])\n\n  if not FILTERED_TESTS:\n    FILTERED_TESTS.extend(\n        GetTestsForAllIterations({}, [FilterFlag(TEST_FILTER)])[0])\n\n  if not SHARDED_TESTS:\n    SHARDED_TESTS.extend(\n        GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',\n                                  SHARD_INDEX_ENV_VAR: '1'},\n                                 [])[0])\n\n  if not SHUFFLED_ALL_TESTS:\n    SHUFFLED_ALL_TESTS.extend(GetTestsForAllIterations(\n        {}, [AlsoRunDisabledTestsFlag(), ShuffleFlag(), RandomSeedFlag(1)])[0])\n\n  if not SHUFFLED_ACTIVE_TESTS:\n    SHUFFLED_ACTIVE_TESTS.extend(GetTestsForAllIterations(\n        {}, [ShuffleFlag(), RandomSeedFlag(1)])[0])\n\n  if not SHUFFLED_FILTERED_TESTS:\n    SHUFFLED_FILTERED_TESTS.extend(GetTestsForAllIterations(\n        {}, [ShuffleFlag(), RandomSeedFlag(1), FilterFlag(TEST_FILTER)])[0])\n\n  if not SHUFFLED_SHARDED_TESTS:\n    SHUFFLED_SHARDED_TESTS.extend(\n        GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',\n                                  SHARD_INDEX_ENV_VAR: '1'},\n                                 [ShuffleFlag(), RandomSeedFlag(1)])[0])\n\n\nclass GTestShuffleUnitTest(gtest_test_utils.TestCase):\n  \"\"\"Tests test shuffling.\"\"\"\n\n  def setUp(self):\n    CalculateTestLists()\n\n  def testShufflePreservesNumberOfTests(self):\n    self.assertEqual(len(ALL_TESTS), len(SHUFFLED_ALL_TESTS))\n    self.assertEqual(len(ACTIVE_TESTS), len(SHUFFLED_ACTIVE_TESTS))\n    self.assertEqual(len(FILTERED_TESTS), len(SHUFFLED_FILTERED_TESTS))\n    self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS))\n\n  def testShuffleChangesTestOrder(self):\n    self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS)\n    self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS)\n    self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS,\n                 SHUFFLED_FILTERED_TESTS)\n    self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS,\n                 SHUFFLED_SHARDED_TESTS)\n\n  def testShuffleChangesTestCaseOrder(self):\n    self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS),\n                 GetTestCases(SHUFFLED_ALL_TESTS))\n    self.assert_(\n        GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS),\n        GetTestCases(SHUFFLED_ACTIVE_TESTS))\n    self.assert_(\n        GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS),\n        GetTestCases(SHUFFLED_FILTERED_TESTS))\n    self.assert_(\n        GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS),\n        GetTestCases(SHUFFLED_SHARDED_TESTS))\n\n  def testShuffleDoesNotRepeatTest(self):\n    for test in SHUFFLED_ALL_TESTS:\n      self.assertEqual(1, SHUFFLED_ALL_TESTS.count(test),\n                       '%s appears more than once' % (test,))\n    for test in SHUFFLED_ACTIVE_TESTS:\n      self.assertEqual(1, SHUFFLED_ACTIVE_TESTS.count(test),\n                       '%s appears more than once' % (test,))\n    for test in SHUFFLED_FILTERED_TESTS:\n      self.assertEqual(1, SHUFFLED_FILTERED_TESTS.count(test),\n                       '%s appears more than once' % (test,))\n    for test in SHUFFLED_SHARDED_TESTS:\n      self.assertEqual(1, SHUFFLED_SHARDED_TESTS.count(test),\n                       '%s appears more than once' % (test,))\n\n  def testShuffleDoesNotCreateNewTest(self):\n    for test in SHUFFLED_ALL_TESTS:\n      self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,))\n    for test in SHUFFLED_ACTIVE_TESTS:\n      self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,))\n    for test in SHUFFLED_FILTERED_TESTS:\n      self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,))\n    for test in SHUFFLED_SHARDED_TESTS:\n      self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,))\n\n  def testShuffleIncludesAllTests(self):\n    for test in ALL_TESTS:\n      self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,))\n    for test in ACTIVE_TESTS:\n      self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,))\n    for test in FILTERED_TESTS:\n      self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,))\n    for test in SHARDED_TESTS:\n      self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,))\n\n  def testShuffleLeavesDeathTestsAtFront(self):\n    non_death_test_found = False\n    for test in SHUFFLED_ACTIVE_TESTS:\n      if 'DeathTest.' in test:\n        self.assert_(not non_death_test_found,\n                     '%s appears after a non-death test' % (test,))\n      else:\n        non_death_test_found = True\n\n  def _VerifyTestCasesDoNotInterleave(self, tests):\n    test_cases = []\n    for test in tests:\n      [test_case, _] = test.split('.')\n      if test_cases and test_cases[-1] != test_case:\n        test_cases.append(test_case)\n        self.assertEqual(1, test_cases.count(test_case),\n                         'Test case %s is not grouped together in %s' %\n                         (test_case, tests))\n\n  def testShuffleDoesNotInterleaveTestCases(self):\n    self._VerifyTestCasesDoNotInterleave(SHUFFLED_ALL_TESTS)\n    self._VerifyTestCasesDoNotInterleave(SHUFFLED_ACTIVE_TESTS)\n    self._VerifyTestCasesDoNotInterleave(SHUFFLED_FILTERED_TESTS)\n    self._VerifyTestCasesDoNotInterleave(SHUFFLED_SHARDED_TESTS)\n\n  def testShuffleRestoresOrderAfterEachIteration(self):\n    # Get the test lists in all 3 iterations, using random seed 1, 2,\n    # and 3 respectively.  Google Test picks a different seed in each\n    # iteration, and this test depends on the current implementation\n    # picking successive numbers.  This dependency is not ideal, but\n    # makes the test much easier to write.\n    [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = (\n        GetTestsForAllIterations(\n            {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)]))\n\n    # Make sure running the tests with random seed 1 gets the same\n    # order as in iteration 1 above.\n    [tests_with_seed1] = GetTestsForAllIterations(\n        {}, [ShuffleFlag(), RandomSeedFlag(1)])\n    self.assertEqual(tests_in_iteration1, tests_with_seed1)\n\n    # Make sure running the tests with random seed 2 gets the same\n    # order as in iteration 2 above.  Success means that Google Test\n    # correctly restores the test order before re-shuffling at the\n    # beginning of iteration 2.\n    [tests_with_seed2] = GetTestsForAllIterations(\n        {}, [ShuffleFlag(), RandomSeedFlag(2)])\n    self.assertEqual(tests_in_iteration2, tests_with_seed2)\n\n    # Make sure running the tests with random seed 3 gets the same\n    # order as in iteration 3 above.  Success means that Google Test\n    # correctly restores the test order before re-shuffling at the\n    # beginning of iteration 3.\n    [tests_with_seed3] = GetTestsForAllIterations(\n        {}, [ShuffleFlag(), RandomSeedFlag(3)])\n    self.assertEqual(tests_in_iteration3, tests_with_seed3)\n\n  def testShuffleGeneratesNewOrderInEachIteration(self):\n    [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = (\n        GetTestsForAllIterations(\n            {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)]))\n\n    self.assert_(tests_in_iteration1 != tests_in_iteration2,\n                 tests_in_iteration1)\n    self.assert_(tests_in_iteration1 != tests_in_iteration3,\n                 tests_in_iteration1)\n    self.assert_(tests_in_iteration2 != tests_in_iteration3,\n                 tests_in_iteration2)\n\n  def testShuffleShardedTestsPreservesPartition(self):\n    # If we run M tests on N shards, the same M tests should be run in\n    # total, regardless of the random seeds used by the shards.\n    [tests1] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',\n                                         SHARD_INDEX_ENV_VAR: '0'},\n                                        [ShuffleFlag(), RandomSeedFlag(1)])\n    [tests2] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',\n                                         SHARD_INDEX_ENV_VAR: '1'},\n                                        [ShuffleFlag(), RandomSeedFlag(20)])\n    [tests3] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',\n                                         SHARD_INDEX_ENV_VAR: '2'},\n                                        [ShuffleFlag(), RandomSeedFlag(25)])\n    sorted_sharded_tests = tests1 + tests2 + tests3\n    sorted_sharded_tests.sort()\n    sorted_active_tests = []\n    sorted_active_tests.extend(ACTIVE_TESTS)\n    sorted_active_tests.sort()\n    self.assertEqual(sorted_active_tests, sorted_sharded_tests)\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_shuffle_test_.cc",
    "content": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Verifies that test shuffling works.\n\n#include \"gtest/gtest.h\"\n\nnamespace {\n\nusing ::testing::EmptyTestEventListener;\nusing ::testing::InitGoogleTest;\nusing ::testing::Message;\nusing ::testing::Test;\nusing ::testing::TestEventListeners;\nusing ::testing::TestInfo;\nusing ::testing::UnitTest;\nusing ::testing::internal::scoped_ptr;\n\n// The test methods are empty, as the sole purpose of this program is\n// to print the test names before/after shuffling.\n\nclass A : public Test {};\nTEST_F(A, A) {}\nTEST_F(A, B) {}\n\nTEST(ADeathTest, A) {}\nTEST(ADeathTest, B) {}\nTEST(ADeathTest, C) {}\n\nTEST(B, A) {}\nTEST(B, B) {}\nTEST(B, C) {}\nTEST(B, DISABLED_D) {}\nTEST(B, DISABLED_E) {}\n\nTEST(BDeathTest, A) {}\nTEST(BDeathTest, B) {}\n\nTEST(C, A) {}\nTEST(C, B) {}\nTEST(C, C) {}\nTEST(C, DISABLED_D) {}\n\nTEST(CDeathTest, A) {}\n\nTEST(DISABLED_D, A) {}\nTEST(DISABLED_D, DISABLED_B) {}\n\n// This printer prints the full test names only, starting each test\n// iteration with a \"----\" marker.\nclass TestNamePrinter : public EmptyTestEventListener {\n public:\n  virtual void OnTestIterationStart(const UnitTest& /* unit_test */,\n                                    int /* iteration */) {\n    printf(\"----\\n\");\n  }\n\n  virtual void OnTestStart(const TestInfo& test_info) {\n    printf(\"%s.%s\\n\", test_info.test_case_name(), test_info.name());\n  }\n};\n\n}  // namespace\n\nint main(int argc, char **argv) {\n  InitGoogleTest(&argc, argv);\n\n  // Replaces the default printer with TestNamePrinter, which prints\n  // the test name only.\n  TestEventListeners& listeners = UnitTest::GetInstance()->listeners();\n  delete listeners.Release(listeners.default_result_printer());\n  listeners.Append(new TestNamePrinter);\n\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_sole_header_test.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: mheule@google.com (Markus Heule)\n//\n// This test verifies that it's possible to use Google Test by including\n// the gtest.h header file alone.\n\n#include \"gtest/gtest.h\"\n\nnamespace {\n\nvoid Subroutine() {\n  EXPECT_EQ(42, 42);\n}\n\nTEST(NoFatalFailureTest, ExpectNoFatalFailure) {\n  EXPECT_NO_FATAL_FAILURE(;);\n  EXPECT_NO_FATAL_FAILURE(SUCCEED());\n  EXPECT_NO_FATAL_FAILURE(Subroutine());\n  EXPECT_NO_FATAL_FAILURE({ SUCCEED(); });\n}\n\nTEST(NoFatalFailureTest, AssertNoFatalFailure) {\n  ASSERT_NO_FATAL_FAILURE(;);\n  ASSERT_NO_FATAL_FAILURE(SUCCEED());\n  ASSERT_NO_FATAL_FAILURE(Subroutine());\n  ASSERT_NO_FATAL_FAILURE({ SUCCEED(); });\n}\n\n}  // namespace\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_stress_test.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Tests that SCOPED_TRACE() and various Google Test assertions can be\n// used in a large number of threads concurrently.\n\n#include \"gtest/gtest.h\"\n\n#include <iostream>\n#include <vector>\n\n// We must define this macro in order to #include\n// gtest-internal-inl.h.  This is how Google Test prevents a user from\n// accidentally depending on its internal implementation.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\n#if GTEST_IS_THREADSAFE\n\nnamespace testing {\nnamespace {\n\nusing internal::Notification;\nusing internal::TestPropertyKeyIs;\nusing internal::ThreadWithParam;\nusing internal::scoped_ptr;\n\n// In order to run tests in this file, for platforms where Google Test is\n// thread safe, implement ThreadWithParam. See the description of its API\n// in gtest-port.h, where it is defined for already supported platforms.\n\n// How many threads to create?\nconst int kThreadCount = 50;\n\nstd::string IdToKey(int id, const char* suffix) {\n  Message key;\n  key << \"key_\" << id << \"_\" << suffix;\n  return key.GetString();\n}\n\nstd::string IdToString(int id) {\n  Message id_message;\n  id_message << id;\n  return id_message.GetString();\n}\n\nvoid ExpectKeyAndValueWereRecordedForId(\n    const std::vector<TestProperty>& properties,\n    int id, const char* suffix) {\n  TestPropertyKeyIs matches_key(IdToKey(id, suffix).c_str());\n  const std::vector<TestProperty>::const_iterator property =\n      std::find_if(properties.begin(), properties.end(), matches_key);\n  ASSERT_TRUE(property != properties.end())\n      << \"expecting \" << suffix << \" value for id \" << id;\n  EXPECT_STREQ(IdToString(id).c_str(), property->value());\n}\n\n// Calls a large number of Google Test assertions, where exactly one of them\n// will fail.\nvoid ManyAsserts(int id) {\n  GTEST_LOG_(INFO) << \"Thread #\" << id << \" running...\";\n\n  SCOPED_TRACE(Message() << \"Thread #\" << id);\n\n  for (int i = 0; i < kThreadCount; i++) {\n    SCOPED_TRACE(Message() << \"Iteration #\" << i);\n\n    // A bunch of assertions that should succeed.\n    EXPECT_TRUE(true);\n    ASSERT_FALSE(false) << \"This shouldn't fail.\";\n    EXPECT_STREQ(\"a\", \"a\");\n    ASSERT_LE(5, 6);\n    EXPECT_EQ(i, i) << \"This shouldn't fail.\";\n\n    // RecordProperty() should interact safely with other threads as well.\n    // The shared_key forces property updates.\n    Test::RecordProperty(IdToKey(id, \"string\").c_str(), IdToString(id).c_str());\n    Test::RecordProperty(IdToKey(id, \"int\").c_str(), id);\n    Test::RecordProperty(\"shared_key\", IdToString(id).c_str());\n\n    // This assertion should fail kThreadCount times per thread.  It\n    // is for testing whether Google Test can handle failed assertions in a\n    // multi-threaded context.\n    EXPECT_LT(i, 0) << \"This should always fail.\";\n  }\n}\n\nvoid CheckTestFailureCount(int expected_failures) {\n  const TestInfo* const info = UnitTest::GetInstance()->current_test_info();\n  const TestResult* const result = info->result();\n  GTEST_CHECK_(expected_failures == result->total_part_count())\n      << \"Logged \" << result->total_part_count() << \" failures \"\n      << \" vs. \" << expected_failures << \" expected\";\n}\n\n// Tests using SCOPED_TRACE() and Google Test assertions in many threads\n// concurrently.\nTEST(StressTest, CanUseScopedTraceAndAssertionsInManyThreads) {\n  {\n    scoped_ptr<ThreadWithParam<int> > threads[kThreadCount];\n    Notification threads_can_start;\n    for (int i = 0; i != kThreadCount; i++)\n      threads[i].reset(new ThreadWithParam<int>(&ManyAsserts,\n                                                i,\n                                                &threads_can_start));\n\n    threads_can_start.Notify();\n\n    // Blocks until all the threads are done.\n    for (int i = 0; i != kThreadCount; i++)\n      threads[i]->Join();\n  }\n\n  // Ensures that kThreadCount*kThreadCount failures have been reported.\n  const TestInfo* const info = UnitTest::GetInstance()->current_test_info();\n  const TestResult* const result = info->result();\n\n  std::vector<TestProperty> properties;\n  // We have no access to the TestResult's list of properties but we can\n  // copy them one by one.\n  for (int i = 0; i < result->test_property_count(); ++i)\n    properties.push_back(result->GetTestProperty(i));\n\n  EXPECT_EQ(kThreadCount * 2 + 1, result->test_property_count())\n      << \"String and int values recorded on each thread, \"\n      << \"as well as one shared_key\";\n  for (int i = 0; i < kThreadCount; ++i) {\n    ExpectKeyAndValueWereRecordedForId(properties, i, \"string\");\n    ExpectKeyAndValueWereRecordedForId(properties, i, \"int\");\n  }\n  CheckTestFailureCount(kThreadCount*kThreadCount);\n}\n\nvoid FailingThread(bool is_fatal) {\n  if (is_fatal)\n    FAIL() << \"Fatal failure in some other thread. \"\n           << \"(This failure is expected.)\";\n  else\n    ADD_FAILURE() << \"Non-fatal failure in some other thread. \"\n                  << \"(This failure is expected.)\";\n}\n\nvoid GenerateFatalFailureInAnotherThread(bool is_fatal) {\n  ThreadWithParam<bool> thread(&FailingThread, is_fatal, NULL);\n  thread.Join();\n}\n\nTEST(NoFatalFailureTest, ExpectNoFatalFailureIgnoresFailuresInOtherThreads) {\n  EXPECT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true));\n  // We should only have one failure (the one from\n  // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE\n  // should succeed.\n  CheckTestFailureCount(1);\n}\n\nvoid AssertNoFatalFailureIgnoresFailuresInOtherThreads() {\n  ASSERT_NO_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true));\n}\nTEST(NoFatalFailureTest, AssertNoFatalFailureIgnoresFailuresInOtherThreads) {\n  // Using a subroutine, to make sure, that the test continues.\n  AssertNoFatalFailureIgnoresFailuresInOtherThreads();\n  // We should only have one failure (the one from\n  // GenerateFatalFailureInAnotherThread()), since the EXPECT_NO_FATAL_FAILURE\n  // should succeed.\n  CheckTestFailureCount(1);\n}\n\nTEST(FatalFailureTest, ExpectFatalFailureIgnoresFailuresInOtherThreads) {\n  // This statement should fail, since the current thread doesn't generate a\n  // fatal failure, only another one does.\n  EXPECT_FATAL_FAILURE(GenerateFatalFailureInAnotherThread(true), \"expected\");\n  CheckTestFailureCount(2);\n}\n\nTEST(FatalFailureOnAllThreadsTest, ExpectFatalFailureOnAllThreads) {\n  // This statement should succeed, because failures in all threads are\n  // considered.\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(\n      GenerateFatalFailureInAnotherThread(true), \"expected\");\n  CheckTestFailureCount(0);\n  // We need to add a failure, because main() checks that there are failures.\n  // But when only this test is run, we shouldn't have any failures.\n  ADD_FAILURE() << \"This is an expected non-fatal failure.\";\n}\n\nTEST(NonFatalFailureTest, ExpectNonFatalFailureIgnoresFailuresInOtherThreads) {\n  // This statement should fail, since the current thread doesn't generate a\n  // fatal failure, only another one does.\n  EXPECT_NONFATAL_FAILURE(GenerateFatalFailureInAnotherThread(false),\n                          \"expected\");\n  CheckTestFailureCount(2);\n}\n\nTEST(NonFatalFailureOnAllThreadsTest, ExpectNonFatalFailureOnAllThreads) {\n  // This statement should succeed, because failures in all threads are\n  // considered.\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(\n      GenerateFatalFailureInAnotherThread(false), \"expected\");\n  CheckTestFailureCount(0);\n  // We need to add a failure, because main() checks that there are failures,\n  // But when only this test is run, we shouldn't have any failures.\n  ADD_FAILURE() << \"This is an expected non-fatal failure.\";\n}\n\n}  // namespace\n}  // namespace testing\n\nint main(int argc, char **argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  const int result = RUN_ALL_TESTS();  // Expected to fail.\n  GTEST_CHECK_(result == 1) << \"RUN_ALL_TESTS() did not fail as expected\";\n\n  printf(\"\\nPASS\\n\");\n  return 0;\n}\n\n#else\nTEST(StressTest,\n     DISABLED_ThreadSafetyTestsAreSkippedWhenGoogleTestIsNotThreadSafe) {\n}\n\nint main(int argc, char **argv) {\n  testing::InitGoogleTest(&argc, argv);\n  return RUN_ALL_TESTS();\n}\n#endif  // GTEST_IS_THREADSAFE\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_test_utils.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test utilities for Google C++ Testing Framework.\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport atexit\nimport os\nimport shutil\nimport sys\nimport tempfile\nimport unittest\n_test_module = unittest\n\n# Suppresses the 'Import not at the top of the file' lint complaint.\n# pylint: disable-msg=C6204\ntry:\n  import subprocess\n  _SUBPROCESS_MODULE_AVAILABLE = True\nexcept:\n  import popen2\n  _SUBPROCESS_MODULE_AVAILABLE = False\n# pylint: enable-msg=C6204\n\nGTEST_OUTPUT_VAR_NAME = 'GTEST_OUTPUT'\n\nIS_WINDOWS = os.name == 'nt'\nIS_CYGWIN = os.name == 'posix' and 'CYGWIN' in os.uname()[0]\n\n# Here we expose a class from a particular module, depending on the\n# environment. The comment suppresses the 'Invalid variable name' lint\n# complaint.\nTestCase = _test_module.TestCase  # pylint: disable-msg=C6409\n\n# Initially maps a flag to its default value. After\n# _ParseAndStripGTestFlags() is called, maps a flag to its actual value.\n_flag_map = {'source_dir': os.path.dirname(sys.argv[0]),\n             'build_dir': os.path.dirname(sys.argv[0])}\n_gtest_flags_are_parsed = False\n\n\ndef _ParseAndStripGTestFlags(argv):\n  \"\"\"Parses and strips Google Test flags from argv.  This is idempotent.\"\"\"\n\n  # Suppresses the lint complaint about a global variable since we need it\n  # here to maintain module-wide state.\n  global _gtest_flags_are_parsed  # pylint: disable-msg=W0603\n  if _gtest_flags_are_parsed:\n    return\n\n  _gtest_flags_are_parsed = True\n  for flag in _flag_map:\n    # The environment variable overrides the default value.\n    if flag.upper() in os.environ:\n      _flag_map[flag] = os.environ[flag.upper()]\n\n    # The command line flag overrides the environment variable.\n    i = 1  # Skips the program name.\n    while i < len(argv):\n      prefix = '--' + flag + '='\n      if argv[i].startswith(prefix):\n        _flag_map[flag] = argv[i][len(prefix):]\n        del argv[i]\n        break\n      else:\n        # We don't increment i in case we just found a --gtest_* flag\n        # and removed it from argv.\n        i += 1\n\n\ndef GetFlag(flag):\n  \"\"\"Returns the value of the given flag.\"\"\"\n\n  # In case GetFlag() is called before Main(), we always call\n  # _ParseAndStripGTestFlags() here to make sure the --gtest_* flags\n  # are parsed.\n  _ParseAndStripGTestFlags(sys.argv)\n\n  return _flag_map[flag]\n\n\ndef GetSourceDir():\n  \"\"\"Returns the absolute path of the directory where the .py files are.\"\"\"\n\n  return os.path.abspath(GetFlag('source_dir'))\n\n\ndef GetBuildDir():\n  \"\"\"Returns the absolute path of the directory where the test binaries are.\"\"\"\n\n  return os.path.abspath(GetFlag('build_dir'))\n\n\n_temp_dir = None\n\ndef _RemoveTempDir():\n  if _temp_dir:\n    shutil.rmtree(_temp_dir, ignore_errors=True)\n\natexit.register(_RemoveTempDir)\n\n\ndef GetTempDir():\n  \"\"\"Returns a directory for temporary files.\"\"\"\n\n  global _temp_dir\n  if not _temp_dir:\n    _temp_dir = tempfile.mkdtemp()\n  return _temp_dir\n\n\ndef GetTestExecutablePath(executable_name, build_dir=None):\n  \"\"\"Returns the absolute path of the test binary given its name.\n\n  The function will print a message and abort the program if the resulting file\n  doesn't exist.\n\n  Args:\n    executable_name: name of the test binary that the test script runs.\n    build_dir:       directory where to look for executables, by default\n                     the result of GetBuildDir().\n\n  Returns:\n    The absolute path of the test binary.\n  \"\"\"\n\n  path = os.path.abspath(os.path.join(build_dir or GetBuildDir(),\n                                      executable_name))\n  if (IS_WINDOWS or IS_CYGWIN) and not path.endswith('.exe'):\n    path += '.exe'\n\n  if not os.path.exists(path):\n    message = (\n        'Unable to find the test binary. Please make sure to provide path\\n'\n        'to the binary via the --build_dir flag or the BUILD_DIR\\n'\n        'environment variable.')\n    print >> sys.stderr, message\n    sys.exit(1)\n\n  return path\n\n\ndef GetExitStatus(exit_code):\n  \"\"\"Returns the argument to exit(), or -1 if exit() wasn't called.\n\n  Args:\n    exit_code: the result value of os.system(command).\n  \"\"\"\n\n  if os.name == 'nt':\n    # On Windows, os.WEXITSTATUS() doesn't work and os.system() returns\n    # the argument to exit() directly.\n    return exit_code\n  else:\n    # On Unix, os.WEXITSTATUS() must be used to extract the exit status\n    # from the result of os.system().\n    if os.WIFEXITED(exit_code):\n      return os.WEXITSTATUS(exit_code)\n    else:\n      return -1\n\n\nclass Subprocess:\n  def __init__(self, command, working_dir=None, capture_stderr=True, env=None):\n    \"\"\"Changes into a specified directory, if provided, and executes a command.\n\n    Restores the old directory afterwards.\n\n    Args:\n      command:        The command to run, in the form of sys.argv.\n      working_dir:    The directory to change into.\n      capture_stderr: Determines whether to capture stderr in the output member\n                      or to discard it.\n      env:            Dictionary with environment to pass to the subprocess.\n\n    Returns:\n      An object that represents outcome of the executed process. It has the\n      following attributes:\n        terminated_by_signal   True iff the child process has been terminated\n                               by a signal.\n        signal                 Sygnal that terminated the child process.\n        exited                 True iff the child process exited normally.\n        exit_code              The code with which the child process exited.\n        output                 Child process's stdout and stderr output\n                               combined in a string.\n    \"\"\"\n\n    # The subprocess module is the preferrable way of running programs\n    # since it is available and behaves consistently on all platforms,\n    # including Windows. But it is only available starting in python 2.4.\n    # In earlier python versions, we revert to the popen2 module, which is\n    # available in python 2.0 and later but doesn't provide required\n    # functionality (Popen4) under Windows. This allows us to support Mac\n    # OS X 10.4 Tiger, which has python 2.3 installed.\n    if _SUBPROCESS_MODULE_AVAILABLE:\n      if capture_stderr:\n        stderr = subprocess.STDOUT\n      else:\n        stderr = subprocess.PIPE\n\n      p = subprocess.Popen(command,\n                           stdout=subprocess.PIPE, stderr=stderr,\n                           cwd=working_dir, universal_newlines=True, env=env)\n      # communicate returns a tuple with the file obect for the child's\n      # output.\n      self.output = p.communicate()[0]\n      self._return_code = p.returncode\n    else:\n      old_dir = os.getcwd()\n\n      def _ReplaceEnvDict(dest, src):\n        # Changes made by os.environ.clear are not inheritable by child\n        # processes until Python 2.6. To produce inheritable changes we have\n        # to delete environment items with the del statement.\n        for key in dest.keys():\n          del dest[key]\n        dest.update(src)\n\n      # When 'env' is not None, backup the environment variables and replace\n      # them with the passed 'env'. When 'env' is None, we simply use the\n      # current 'os.environ' for compatibility with the subprocess.Popen\n      # semantics used above.\n      if env is not None:\n        old_environ = os.environ.copy()\n        _ReplaceEnvDict(os.environ, env)\n\n      try:\n        if working_dir is not None:\n          os.chdir(working_dir)\n        if capture_stderr:\n          p = popen2.Popen4(command)\n        else:\n          p = popen2.Popen3(command)\n        p.tochild.close()\n        self.output = p.fromchild.read()\n        ret_code = p.wait()\n      finally:\n        os.chdir(old_dir)\n\n        # Restore the old environment variables\n        # if they were replaced.\n        if env is not None:\n          _ReplaceEnvDict(os.environ, old_environ)\n\n      # Converts ret_code to match the semantics of\n      # subprocess.Popen.returncode.\n      if os.WIFSIGNALED(ret_code):\n        self._return_code = -os.WTERMSIG(ret_code)\n      else:  # os.WIFEXITED(ret_code) should return True here.\n        self._return_code = os.WEXITSTATUS(ret_code)\n\n    if self._return_code < 0:\n      self.terminated_by_signal = True\n      self.exited = False\n      self.signal = -self._return_code\n    else:\n      self.terminated_by_signal = False\n      self.exited = True\n      self.exit_code = self._return_code\n\n\ndef Main():\n  \"\"\"Runs the unit test.\"\"\"\n\n  # We must call _ParseAndStripGTestFlags() before calling\n  # unittest.main().  Otherwise the latter will be confused by the\n  # --gtest_* flags.\n  _ParseAndStripGTestFlags(sys.argv)\n  # The tested binaries should not be writing XML output files unless the\n  # script explicitly instructs them to.\n  # TODO(vladl@google.com): Move this into Subprocess when we implement\n  # passing environment into it as a parameter.\n  if GTEST_OUTPUT_VAR_NAME in os.environ:\n    del os.environ[GTEST_OUTPUT_VAR_NAME]\n\n  _test_module.main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_throw_on_failure_ex_test.cc",
    "content": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Tests Google Test's throw-on-failure mode with exceptions enabled.\n\n#include \"gtest/gtest.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdexcept>\n\n// Prints the given failure message and exits the program with\n// non-zero.  We use this instead of a Google Test assertion to\n// indicate a failure, as the latter is been tested and cannot be\n// relied on.\nvoid Fail(const char* msg) {\n  printf(\"FAILURE: %s\\n\", msg);\n  fflush(stdout);\n  exit(1);\n}\n\n// Tests that an assertion failure throws a subclass of\n// std::runtime_error.\nvoid TestFailureThrowsRuntimeError() {\n  testing::GTEST_FLAG(throw_on_failure) = true;\n\n  // A successful assertion shouldn't throw.\n  try {\n    EXPECT_EQ(3, 3);\n  } catch(...) {\n    Fail(\"A successful assertion wrongfully threw.\");\n  }\n\n  // A failed assertion should throw a subclass of std::runtime_error.\n  try {\n    EXPECT_EQ(2, 3) << \"Expected failure\";\n  } catch(const std::runtime_error& e) {\n    if (strstr(e.what(), \"Expected failure\") != NULL)\n      return;\n\n    printf(\"%s\",\n           \"A failed assertion did throw an exception of the right type, \"\n           \"but the message is incorrect.  Instead of containing \\\"Expected \"\n           \"failure\\\", it is:\\n\");\n    Fail(e.what());\n  } catch(...) {\n    Fail(\"A failed assertion threw the wrong type of exception.\");\n  }\n  Fail(\"A failed assertion should've thrown but didn't.\");\n}\n\nint main(int argc, char** argv) {\n  testing::InitGoogleTest(&argc, argv);\n\n  // We want to ensure that people can use Google Test assertions in\n  // other testing frameworks, as long as they initialize Google Test\n  // properly and set the thrown-on-failure mode.  Therefore, we don't\n  // use Google Test's constructs for defining and running tests\n  // (e.g. TEST and RUN_ALL_TESTS) here.\n\n  TestFailureThrowsRuntimeError();\n  return 0;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_throw_on_failure_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2009, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Tests Google Test's throw-on-failure mode with exceptions disabled.\n\nThis script invokes gtest_throw_on_failure_test_ (a program written with\nGoogle Test) with different environments and command line flags.\n\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport os\nimport gtest_test_utils\n\n\n# Constants.\n\n# The command line flag for enabling/disabling the throw-on-failure mode.\nTHROW_ON_FAILURE = 'gtest_throw_on_failure'\n\n# Path to the gtest_throw_on_failure_test_ program, compiled with\n# exceptions disabled.\nEXE_PATH = gtest_test_utils.GetTestExecutablePath(\n    'gtest_throw_on_failure_test_')\n\n\n# Utilities.\n\n\ndef SetEnvVar(env_var, value):\n  \"\"\"Sets an environment variable to a given value; unsets it when the\n  given value is None.\n  \"\"\"\n\n  env_var = env_var.upper()\n  if value is not None:\n    os.environ[env_var] = value\n  elif env_var in os.environ:\n    del os.environ[env_var]\n\n\ndef Run(command):\n  \"\"\"Runs a command; returns True/False if its exit code is/isn't 0.\"\"\"\n\n  print 'Running \"%s\". . .' % ' '.join(command)\n  p = gtest_test_utils.Subprocess(command)\n  return p.exited and p.exit_code == 0\n\n\n# The tests.  TODO(wan@google.com): refactor the class to share common\n# logic with code in gtest_break_on_failure_unittest.py.\nclass ThrowOnFailureTest(gtest_test_utils.TestCase):\n  \"\"\"Tests the throw-on-failure mode.\"\"\"\n\n  def RunAndVerify(self, env_var_value, flag_value, should_fail):\n    \"\"\"Runs gtest_throw_on_failure_test_ and verifies that it does\n    (or does not) exit with a non-zero code.\n\n    Args:\n      env_var_value:    value of the GTEST_BREAK_ON_FAILURE environment\n                        variable; None if the variable should be unset.\n      flag_value:       value of the --gtest_break_on_failure flag;\n                        None if the flag should not be present.\n      should_fail:      True iff the program is expected to fail.\n    \"\"\"\n\n    SetEnvVar(THROW_ON_FAILURE, env_var_value)\n\n    if env_var_value is None:\n      env_var_value_msg = ' is not set'\n    else:\n      env_var_value_msg = '=' + env_var_value\n\n    if flag_value is None:\n      flag = ''\n    elif flag_value == '0':\n      flag = '--%s=0' % THROW_ON_FAILURE\n    else:\n      flag = '--%s' % THROW_ON_FAILURE\n\n    command = [EXE_PATH]\n    if flag:\n      command.append(flag)\n\n    if should_fail:\n      should_or_not = 'should'\n    else:\n      should_or_not = 'should not'\n\n    failed = not Run(command)\n\n    SetEnvVar(THROW_ON_FAILURE, None)\n\n    msg = ('when %s%s, an assertion failure in \"%s\" %s cause a non-zero '\n           'exit code.' %\n           (THROW_ON_FAILURE, env_var_value_msg, ' '.join(command),\n            should_or_not))\n    self.assert_(failed == should_fail, msg)\n\n  def testDefaultBehavior(self):\n    \"\"\"Tests the behavior of the default mode.\"\"\"\n\n    self.RunAndVerify(env_var_value=None, flag_value=None, should_fail=False)\n\n  def testThrowOnFailureEnvVar(self):\n    \"\"\"Tests using the GTEST_THROW_ON_FAILURE environment variable.\"\"\"\n\n    self.RunAndVerify(env_var_value='0',\n                      flag_value=None,\n                      should_fail=False)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value=None,\n                      should_fail=True)\n\n  def testThrowOnFailureFlag(self):\n    \"\"\"Tests using the --gtest_throw_on_failure flag.\"\"\"\n\n    self.RunAndVerify(env_var_value=None,\n                      flag_value='0',\n                      should_fail=False)\n    self.RunAndVerify(env_var_value=None,\n                      flag_value='1',\n                      should_fail=True)\n\n  def testThrowOnFailureFlagOverridesEnvVar(self):\n    \"\"\"Tests that --gtest_throw_on_failure overrides GTEST_THROW_ON_FAILURE.\"\"\"\n\n    self.RunAndVerify(env_var_value='0',\n                      flag_value='0',\n                      should_fail=False)\n    self.RunAndVerify(env_var_value='0',\n                      flag_value='1',\n                      should_fail=True)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value='0',\n                      should_fail=False)\n    self.RunAndVerify(env_var_value='1',\n                      flag_value='1',\n                      should_fail=True)\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_throw_on_failure_test_.cc",
    "content": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n// Tests Google Test's throw-on-failure mode with exceptions disabled.\n//\n// This program must be compiled with exceptions disabled.  It will be\n// invoked by gtest_throw_on_failure_test.py, and is expected to exit\n// with non-zero in the throw-on-failure mode or 0 otherwise.\n\n#include \"gtest/gtest.h\"\n\n#include <stdio.h>                      // for fflush, fprintf, NULL, etc.\n#include <stdlib.h>                     // for exit\n#include <exception>                    // for set_terminate\n\n// This terminate handler aborts the program using exit() rather than abort().\n// This avoids showing pop-ups on Windows systems and core dumps on Unix-like\n// ones.\nvoid TerminateHandler() {\n  fprintf(stderr, \"%s\\n\", \"Unhandled C++ exception terminating the program.\");\n  fflush(NULL);\n  exit(1);\n}\n\nint main(int argc, char** argv) {\n#if GTEST_HAS_EXCEPTIONS\n  std::set_terminate(&TerminateHandler);\n#endif\n  testing::InitGoogleTest(&argc, argv);\n\n  // We want to ensure that people can use Google Test assertions in\n  // other testing frameworks, as long as they initialize Google Test\n  // properly and set the throw-on-failure mode.  Therefore, we don't\n  // use Google Test's constructs for defining and running tests\n  // (e.g. TEST and RUN_ALL_TESTS) here.\n\n  // In the throw-on-failure mode with exceptions disabled, this\n  // assertion will cause the program to exit with a non-zero code.\n  EXPECT_EQ(2, 3);\n\n  // When not in the throw-on-failure mode, the control will reach\n  // here.\n  return 0;\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_uninitialized_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Verifies that Google Test warns the user when not initialized properly.\"\"\"\n\n__author__ = 'wan@google.com (Zhanyong Wan)'\n\nimport gtest_test_utils\n\n\nCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_uninitialized_test_')\n\n\ndef Assert(condition):\n  if not condition:\n    raise AssertionError\n\n\ndef AssertEq(expected, actual):\n  if expected != actual:\n    print 'Expected: %s' % (expected,)\n    print '  Actual: %s' % (actual,)\n    raise AssertionError\n\n\ndef TestExitCodeAndOutput(command):\n  \"\"\"Runs the given command and verifies its exit code and output.\"\"\"\n\n  # Verifies that 'command' exits with code 1.\n  p = gtest_test_utils.Subprocess(command)\n  Assert(p.exited)\n  AssertEq(1, p.exit_code)\n  Assert('InitGoogleTest' in p.output)\n\n\nclass GTestUninitializedTest(gtest_test_utils.TestCase):\n  def testExitCodeAndOutput(self):\n    TestExitCodeAndOutput(COMMAND)\n\n\nif __name__ == '__main__':\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_uninitialized_test_.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n\n#include \"gtest/gtest.h\"\n\nTEST(DummyTest, Dummy) {\n  // This test doesn't verify anything.  We just need it to create a\n  // realistic stage for testing the behavior of Google Test when\n  // RUN_ALL_TESTS() is called without testing::InitGoogleTest() being\n  // called first.\n}\n\nint main() {\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_unittest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// Tests for Google Test itself.  This verifies that the basic constructs of\n// Google Test work.\n\n#include \"gtest/gtest.h\"\n\n// Verifies that the command line flag variables can be accessed\n// in code once <gtest/gtest.h> has been #included.\n// Do not move it after other #includes.\nTEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {\n  bool dummy = testing::GTEST_FLAG(also_run_disabled_tests)\n      || testing::GTEST_FLAG(break_on_failure)\n      || testing::GTEST_FLAG(catch_exceptions)\n      || testing::GTEST_FLAG(color) != \"unknown\"\n      || testing::GTEST_FLAG(filter) != \"unknown\"\n      || testing::GTEST_FLAG(list_tests)\n      || testing::GTEST_FLAG(output) != \"unknown\"\n      || testing::GTEST_FLAG(print_time)\n      || testing::GTEST_FLAG(random_seed)\n      || testing::GTEST_FLAG(repeat) > 0\n      || testing::GTEST_FLAG(show_internal_stack_frames)\n      || testing::GTEST_FLAG(shuffle)\n      || testing::GTEST_FLAG(stack_trace_depth) > 0\n      || testing::GTEST_FLAG(stream_result_to) != \"unknown\"\n      || testing::GTEST_FLAG(throw_on_failure);\n  EXPECT_TRUE(dummy || !dummy);  // Suppresses warning that dummy is unused.\n}\n\n#include <limits.h>  // For INT_MAX.\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n\n#include <map>\n#include <vector>\n#include <ostream>\n\n#include \"gtest/gtest-spi.h\"\n\n// Indicates that this translation unit is part of Google Test's\n// implementation.  It must come before gtest-internal-inl.h is\n// included, or there will be a compiler error.  This trick is to\n// prevent a user from accidentally including gtest-internal-inl.h in\n// his code.\n#define GTEST_IMPLEMENTATION_ 1\n#include \"src/gtest-internal-inl.h\"\n#undef GTEST_IMPLEMENTATION_\n\nnamespace testing {\nnamespace internal {\n\n#if GTEST_CAN_STREAM_RESULTS_\n\nclass StreamingListenerTest : public Test {\n public:\n  class FakeSocketWriter : public StreamingListener::AbstractSocketWriter {\n   public:\n    // Sends a string to the socket.\n    virtual void Send(const string& message) { output_ += message; }\n\n    string output_;\n  };\n\n  StreamingListenerTest()\n      : fake_sock_writer_(new FakeSocketWriter),\n        streamer_(fake_sock_writer_),\n        test_info_obj_(\"FooTest\", \"Bar\", NULL, NULL, 0, NULL) {}\n\n protected:\n  string* output() { return &(fake_sock_writer_->output_); }\n\n  FakeSocketWriter* const fake_sock_writer_;\n  StreamingListener streamer_;\n  UnitTest unit_test_;\n  TestInfo test_info_obj_;  // The name test_info_ was taken by testing::Test.\n};\n\nTEST_F(StreamingListenerTest, OnTestProgramEnd) {\n  *output() = \"\";\n  streamer_.OnTestProgramEnd(unit_test_);\n  EXPECT_EQ(\"event=TestProgramEnd&passed=1\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestIterationEnd) {\n  *output() = \"\";\n  streamer_.OnTestIterationEnd(unit_test_, 42);\n  EXPECT_EQ(\"event=TestIterationEnd&passed=1&elapsed_time=0ms\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestCaseStart) {\n  *output() = \"\";\n  streamer_.OnTestCaseStart(TestCase(\"FooTest\", \"Bar\", NULL, NULL));\n  EXPECT_EQ(\"event=TestCaseStart&name=FooTest\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestCaseEnd) {\n  *output() = \"\";\n  streamer_.OnTestCaseEnd(TestCase(\"FooTest\", \"Bar\", NULL, NULL));\n  EXPECT_EQ(\"event=TestCaseEnd&passed=1&elapsed_time=0ms\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestStart) {\n  *output() = \"\";\n  streamer_.OnTestStart(test_info_obj_);\n  EXPECT_EQ(\"event=TestStart&name=Bar\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestEnd) {\n  *output() = \"\";\n  streamer_.OnTestEnd(test_info_obj_);\n  EXPECT_EQ(\"event=TestEnd&passed=1&elapsed_time=0ms\\n\", *output());\n}\n\nTEST_F(StreamingListenerTest, OnTestPartResult) {\n  *output() = \"\";\n  streamer_.OnTestPartResult(TestPartResult(\n      TestPartResult::kFatalFailure, \"foo.cc\", 42, \"failed=\\n&%\"));\n\n  // Meta characters in the failure message should be properly escaped.\n  EXPECT_EQ(\n      \"event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\\n\",\n      *output());\n}\n\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n// Provides access to otherwise private parts of the TestEventListeners class\n// that are needed to test it.\nclass TestEventListenersAccessor {\n public:\n  static TestEventListener* GetRepeater(TestEventListeners* listeners) {\n    return listeners->repeater();\n  }\n\n  static void SetDefaultResultPrinter(TestEventListeners* listeners,\n                                      TestEventListener* listener) {\n    listeners->SetDefaultResultPrinter(listener);\n  }\n  static void SetDefaultXmlGenerator(TestEventListeners* listeners,\n                                     TestEventListener* listener) {\n    listeners->SetDefaultXmlGenerator(listener);\n  }\n\n  static bool EventForwardingEnabled(const TestEventListeners& listeners) {\n    return listeners.EventForwardingEnabled();\n  }\n\n  static void SuppressEventForwarding(TestEventListeners* listeners) {\n    listeners->SuppressEventForwarding();\n  }\n};\n\nclass UnitTestRecordPropertyTestHelper : public Test {\n protected:\n  UnitTestRecordPropertyTestHelper() {}\n\n  // Forwards to UnitTest::RecordProperty() to bypass access controls.\n  void UnitTestRecordProperty(const char* key, const std::string& value) {\n    unit_test_.RecordProperty(key, value);\n  }\n\n  UnitTest unit_test_;\n};\n\n}  // namespace internal\n}  // namespace testing\n\nusing testing::AssertionFailure;\nusing testing::AssertionResult;\nusing testing::AssertionSuccess;\nusing testing::DoubleLE;\nusing testing::EmptyTestEventListener;\nusing testing::Environment;\nusing testing::FloatLE;\nusing testing::GTEST_FLAG(also_run_disabled_tests);\nusing testing::GTEST_FLAG(break_on_failure);\nusing testing::GTEST_FLAG(catch_exceptions);\nusing testing::GTEST_FLAG(color);\nusing testing::GTEST_FLAG(death_test_use_fork);\nusing testing::GTEST_FLAG(filter);\nusing testing::GTEST_FLAG(list_tests);\nusing testing::GTEST_FLAG(output);\nusing testing::GTEST_FLAG(print_time);\nusing testing::GTEST_FLAG(random_seed);\nusing testing::GTEST_FLAG(repeat);\nusing testing::GTEST_FLAG(show_internal_stack_frames);\nusing testing::GTEST_FLAG(shuffle);\nusing testing::GTEST_FLAG(stack_trace_depth);\nusing testing::GTEST_FLAG(stream_result_to);\nusing testing::GTEST_FLAG(throw_on_failure);\nusing testing::IsNotSubstring;\nusing testing::IsSubstring;\nusing testing::Message;\nusing testing::ScopedFakeTestPartResultReporter;\nusing testing::StaticAssertTypeEq;\nusing testing::Test;\nusing testing::TestCase;\nusing testing::TestEventListeners;\nusing testing::TestInfo;\nusing testing::TestPartResult;\nusing testing::TestPartResultArray;\nusing testing::TestProperty;\nusing testing::TestResult;\nusing testing::TimeInMillis;\nusing testing::UnitTest;\nusing testing::kMaxStackTraceDepth;\nusing testing::internal::AddReference;\nusing testing::internal::AlwaysFalse;\nusing testing::internal::AlwaysTrue;\nusing testing::internal::AppendUserMessage;\nusing testing::internal::ArrayAwareFind;\nusing testing::internal::ArrayEq;\nusing testing::internal::CodePointToUtf8;\nusing testing::internal::CompileAssertTypesEqual;\nusing testing::internal::CopyArray;\nusing testing::internal::CountIf;\nusing testing::internal::EqFailure;\nusing testing::internal::FloatingPoint;\nusing testing::internal::ForEach;\nusing testing::internal::FormatEpochTimeInMillisAsIso8601;\nusing testing::internal::FormatTimeInMillisAsSeconds;\nusing testing::internal::GTestFlagSaver;\nusing testing::internal::GetCurrentOsStackTraceExceptTop;\nusing testing::internal::GetElementOr;\nusing testing::internal::GetNextRandomSeed;\nusing testing::internal::GetRandomSeedFromFlag;\nusing testing::internal::GetTestTypeId;\nusing testing::internal::GetTimeInMillis;\nusing testing::internal::GetTypeId;\nusing testing::internal::GetUnitTestImpl;\nusing testing::internal::ImplicitlyConvertible;\nusing testing::internal::Int32;\nusing testing::internal::Int32FromEnvOrDie;\nusing testing::internal::IsAProtocolMessage;\nusing testing::internal::IsContainer;\nusing testing::internal::IsContainerTest;\nusing testing::internal::IsNotContainer;\nusing testing::internal::NativeArray;\nusing testing::internal::ParseInt32Flag;\nusing testing::internal::RemoveConst;\nusing testing::internal::RemoveReference;\nusing testing::internal::ShouldRunTestOnShard;\nusing testing::internal::ShouldShard;\nusing testing::internal::ShouldUseColor;\nusing testing::internal::Shuffle;\nusing testing::internal::ShuffleRange;\nusing testing::internal::SkipPrefix;\nusing testing::internal::StreamableToString;\nusing testing::internal::String;\nusing testing::internal::TestEventListenersAccessor;\nusing testing::internal::TestResultAccessor;\nusing testing::internal::UInt32;\nusing testing::internal::WideStringToUtf8;\nusing testing::internal::kCopy;\nusing testing::internal::kMaxRandomSeed;\nusing testing::internal::kReference;\nusing testing::internal::kTestTypeIdInGoogleTest;\nusing testing::internal::scoped_ptr;\n\n#if GTEST_HAS_STREAM_REDIRECTION\nusing testing::internal::CaptureStdout;\nusing testing::internal::GetCapturedStdout;\n#endif\n\n#if GTEST_IS_THREADSAFE\nusing testing::internal::ThreadWithParam;\n#endif\n\nclass TestingVector : public std::vector<int> {\n};\n\n::std::ostream& operator<<(::std::ostream& os,\n                           const TestingVector& vector) {\n  os << \"{ \";\n  for (size_t i = 0; i < vector.size(); i++) {\n    os << vector[i] << \" \";\n  }\n  os << \"}\";\n  return os;\n}\n\n// This line tests that we can define tests in an unnamed namespace.\nnamespace {\n\nTEST(GetRandomSeedFromFlagTest, HandlesZero) {\n  const int seed = GetRandomSeedFromFlag(0);\n  EXPECT_LE(1, seed);\n  EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed));\n}\n\nTEST(GetRandomSeedFromFlagTest, PreservesValidSeed) {\n  EXPECT_EQ(1, GetRandomSeedFromFlag(1));\n  EXPECT_EQ(2, GetRandomSeedFromFlag(2));\n  EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1));\n  EXPECT_EQ(static_cast<int>(kMaxRandomSeed),\n            GetRandomSeedFromFlag(kMaxRandomSeed));\n}\n\nTEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) {\n  const int seed1 = GetRandomSeedFromFlag(-1);\n  EXPECT_LE(1, seed1);\n  EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed));\n\n  const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1);\n  EXPECT_LE(1, seed2);\n  EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed));\n}\n\nTEST(GetNextRandomSeedTest, WorksForValidInput) {\n  EXPECT_EQ(2, GetNextRandomSeed(1));\n  EXPECT_EQ(3, GetNextRandomSeed(2));\n  EXPECT_EQ(static_cast<int>(kMaxRandomSeed),\n            GetNextRandomSeed(kMaxRandomSeed - 1));\n  EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed));\n\n  // We deliberately don't test GetNextRandomSeed() with invalid\n  // inputs, as that requires death tests, which are expensive.  This\n  // is fine as GetNextRandomSeed() is internal and has a\n  // straightforward definition.\n}\n\nstatic void ClearCurrentTestPartResults() {\n  TestResultAccessor::ClearTestPartResults(\n      GetUnitTestImpl()->current_test_result());\n}\n\n// Tests GetTypeId.\n\nTEST(GetTypeIdTest, ReturnsSameValueForSameType) {\n  EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>());\n  EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>());\n}\n\nclass SubClassOfTest : public Test {};\nclass AnotherSubClassOfTest : public Test {};\n\nTEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) {\n  EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>());\n  EXPECT_NE(GetTypeId<int>(), GetTypeId<char>());\n  EXPECT_NE(GetTypeId<int>(), GetTestTypeId());\n  EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId());\n  EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId());\n  EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>());\n}\n\n// Verifies that GetTestTypeId() returns the same value, no matter it\n// is called from inside Google Test or outside of it.\nTEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) {\n  EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId());\n}\n\n// Tests FormatTimeInMillisAsSeconds().\n\nTEST(FormatTimeInMillisAsSecondsTest, FormatsZero) {\n  EXPECT_EQ(\"0\", FormatTimeInMillisAsSeconds(0));\n}\n\nTEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) {\n  EXPECT_EQ(\"0.003\", FormatTimeInMillisAsSeconds(3));\n  EXPECT_EQ(\"0.01\", FormatTimeInMillisAsSeconds(10));\n  EXPECT_EQ(\"0.2\", FormatTimeInMillisAsSeconds(200));\n  EXPECT_EQ(\"1.2\", FormatTimeInMillisAsSeconds(1200));\n  EXPECT_EQ(\"3\", FormatTimeInMillisAsSeconds(3000));\n}\n\nTEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) {\n  EXPECT_EQ(\"-0.003\", FormatTimeInMillisAsSeconds(-3));\n  EXPECT_EQ(\"-0.01\", FormatTimeInMillisAsSeconds(-10));\n  EXPECT_EQ(\"-0.2\", FormatTimeInMillisAsSeconds(-200));\n  EXPECT_EQ(\"-1.2\", FormatTimeInMillisAsSeconds(-1200));\n  EXPECT_EQ(\"-3\", FormatTimeInMillisAsSeconds(-3000));\n}\n\n// Tests FormatEpochTimeInMillisAsIso8601().  The correctness of conversion\n// for particular dates below was verified in Python using\n// datetime.datetime.fromutctimestamp(<timetamp>/1000).\n\n// FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we\n// have to set up a particular timezone to obtain predictable results.\nclass FormatEpochTimeInMillisAsIso8601Test : public Test {\n public:\n  // On Cygwin, GCC doesn't allow unqualified integer literals to exceed\n  // 32 bits, even when 64-bit integer types are available.  We have to\n  // force the constants to have a 64-bit type here.\n  static const TimeInMillis kMillisPerSec = 1000;\n\n private:\n  virtual void SetUp() {\n    saved_tz_ = NULL;\n#if _MSC_VER\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4996)  // Temporarily disables warning 4996\n                                // (function or variable may be unsafe\n                                // for getenv, function is deprecated for\n                                // strdup).\n    if (getenv(\"TZ\"))\n      saved_tz_ = strdup(getenv(\"TZ\"));\n# pragma warning(pop)           // Restores the warning state again.\n#else\n    if (getenv(\"TZ\"))\n      saved_tz_ = strdup(getenv(\"TZ\"));\n#endif\n\n    // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use.  We\n    // cannot use the local time zone because the function's output depends\n    // on the time zone.\n    SetTimeZone(\"UTC+00\");\n  }\n\n  virtual void TearDown() {\n    SetTimeZone(saved_tz_);\n    free(const_cast<char*>(saved_tz_));\n    saved_tz_ = NULL;\n  }\n\n  static void SetTimeZone(const char* time_zone) {\n    // tzset() distinguishes between the TZ variable being present and empty\n    // and not being present, so we have to consider the case of time_zone\n    // being NULL.\n#if _MSC_VER\n    // ...Unless it's MSVC, whose standard library's _putenv doesn't\n    // distinguish between an empty and a missing variable.\n    const std::string env_var =\n        std::string(\"TZ=\") + (time_zone ? time_zone : \"\");\n    _putenv(env_var.c_str());\n# pragma warning(push)          // Saves the current warning state.\n# pragma warning(disable:4996)  // Temporarily disables warning 4996\n                                // (function is deprecated).\n    tzset();\n# pragma warning(pop)           // Restores the warning state again.\n#else\n    if (time_zone) {\n      setenv((\"TZ\"), time_zone, 1);\n    } else {\n      unsetenv(\"TZ\");\n    }\n    tzset();\n#endif\n  }\n\n  const char* saved_tz_;\n};\n\nconst TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec;\n\nTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) {\n  EXPECT_EQ(\"2011-10-31T18:52:42\",\n            FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec));\n}\n\nTEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) {\n  EXPECT_EQ(\n      \"2011-10-31T18:52:42\",\n      FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234));\n}\n\nTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) {\n  EXPECT_EQ(\"2011-09-03T05:07:02\",\n            FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec));\n}\n\nTEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) {\n  EXPECT_EQ(\"2011-09-28T17:08:22\",\n            FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec));\n}\n\nTEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) {\n  EXPECT_EQ(\"1970-01-01T00:00:00\", FormatEpochTimeInMillisAsIso8601(0));\n}\n\n#if GTEST_CAN_COMPARE_NULL\n\n# ifdef __BORLANDC__\n// Silences warnings: \"Condition is always true\", \"Unreachable code\"\n#  pragma option push -w-ccc -w-rch\n# endif\n\n// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null\n// pointer literal.\nTEST(NullLiteralTest, IsTrueForNullLiterals) {\n  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL));\n  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0));\n  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U));\n  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L));\n\n# ifndef __BORLANDC__\n\n  // Some compilers may fail to detect some null pointer literals;\n  // as long as users of the framework don't use such literals, this\n  // is harmless.\n  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(1 - 1));\n\n# endif\n}\n\n// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null\n// pointer literal.\nTEST(NullLiteralTest, IsFalseForNonNullLiterals) {\n  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1));\n  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0));\n  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a'));\n  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL)));\n}\n\n# ifdef __BORLANDC__\n// Restores warnings after previous \"#pragma option push\" suppressed them.\n#  pragma option pop\n# endif\n\n#endif  // GTEST_CAN_COMPARE_NULL\n//\n// Tests CodePointToUtf8().\n\n// Tests that the NUL character L'\\0' is encoded correctly.\nTEST(CodePointToUtf8Test, CanEncodeNul) {\n  EXPECT_EQ(\"\", CodePointToUtf8(L'\\0'));\n}\n\n// Tests that ASCII characters are encoded correctly.\nTEST(CodePointToUtf8Test, CanEncodeAscii) {\n  EXPECT_EQ(\"a\", CodePointToUtf8(L'a'));\n  EXPECT_EQ(\"Z\", CodePointToUtf8(L'Z'));\n  EXPECT_EQ(\"&\", CodePointToUtf8(L'&'));\n  EXPECT_EQ(\"\\x7F\", CodePointToUtf8(L'\\x7F'));\n}\n\n// Tests that Unicode code-points that have 8 to 11 bits are encoded\n// as 110xxxxx 10xxxxxx.\nTEST(CodePointToUtf8Test, CanEncode8To11Bits) {\n  // 000 1101 0011 => 110-00011 10-010011\n  EXPECT_EQ(\"\\xC3\\x93\", CodePointToUtf8(L'\\xD3'));\n\n  // 101 0111 0110 => 110-10101 10-110110\n  // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints\n  // in wide strings and wide chars. In order to accomodate them, we have to\n  // introduce such character constants as integers.\n  EXPECT_EQ(\"\\xD5\\xB6\",\n            CodePointToUtf8(static_cast<wchar_t>(0x576)));\n}\n\n// Tests that Unicode code-points that have 12 to 16 bits are encoded\n// as 1110xxxx 10xxxxxx 10xxxxxx.\nTEST(CodePointToUtf8Test, CanEncode12To16Bits) {\n  // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011\n  EXPECT_EQ(\"\\xE0\\xA3\\x93\",\n            CodePointToUtf8(static_cast<wchar_t>(0x8D3)));\n\n  // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101\n  EXPECT_EQ(\"\\xEC\\x9D\\x8D\",\n            CodePointToUtf8(static_cast<wchar_t>(0xC74D)));\n}\n\n#if !GTEST_WIDE_STRING_USES_UTF16_\n// Tests in this group require a wchar_t to hold > 16 bits, and thus\n// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is\n// 16-bit wide. This code may not compile on those systems.\n\n// Tests that Unicode code-points that have 17 to 21 bits are encoded\n// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.\nTEST(CodePointToUtf8Test, CanEncode17To21Bits) {\n  // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011\n  EXPECT_EQ(\"\\xF0\\x90\\xA3\\x93\", CodePointToUtf8(L'\\x108D3'));\n\n  // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000\n  EXPECT_EQ(\"\\xF0\\x90\\x90\\x80\", CodePointToUtf8(L'\\x10400'));\n\n  // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100\n  EXPECT_EQ(\"\\xF4\\x88\\x98\\xB4\", CodePointToUtf8(L'\\x108634'));\n}\n\n// Tests that encoding an invalid code-point generates the expected result.\nTEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) {\n  EXPECT_EQ(\"(Invalid Unicode 0x1234ABCD)\", CodePointToUtf8(L'\\x1234ABCD'));\n}\n\n#endif  // !GTEST_WIDE_STRING_USES_UTF16_\n\n// Tests WideStringToUtf8().\n\n// Tests that the NUL character L'\\0' is encoded correctly.\nTEST(WideStringToUtf8Test, CanEncodeNul) {\n  EXPECT_STREQ(\"\", WideStringToUtf8(L\"\", 0).c_str());\n  EXPECT_STREQ(\"\", WideStringToUtf8(L\"\", -1).c_str());\n}\n\n// Tests that ASCII strings are encoded correctly.\nTEST(WideStringToUtf8Test, CanEncodeAscii) {\n  EXPECT_STREQ(\"a\", WideStringToUtf8(L\"a\", 1).c_str());\n  EXPECT_STREQ(\"ab\", WideStringToUtf8(L\"ab\", 2).c_str());\n  EXPECT_STREQ(\"a\", WideStringToUtf8(L\"a\", -1).c_str());\n  EXPECT_STREQ(\"ab\", WideStringToUtf8(L\"ab\", -1).c_str());\n}\n\n// Tests that Unicode code-points that have 8 to 11 bits are encoded\n// as 110xxxxx 10xxxxxx.\nTEST(WideStringToUtf8Test, CanEncode8To11Bits) {\n  // 000 1101 0011 => 110-00011 10-010011\n  EXPECT_STREQ(\"\\xC3\\x93\", WideStringToUtf8(L\"\\xD3\", 1).c_str());\n  EXPECT_STREQ(\"\\xC3\\x93\", WideStringToUtf8(L\"\\xD3\", -1).c_str());\n\n  // 101 0111 0110 => 110-10101 10-110110\n  const wchar_t s[] = { 0x576, '\\0' };\n  EXPECT_STREQ(\"\\xD5\\xB6\", WideStringToUtf8(s, 1).c_str());\n  EXPECT_STREQ(\"\\xD5\\xB6\", WideStringToUtf8(s, -1).c_str());\n}\n\n// Tests that Unicode code-points that have 12 to 16 bits are encoded\n// as 1110xxxx 10xxxxxx 10xxxxxx.\nTEST(WideStringToUtf8Test, CanEncode12To16Bits) {\n  // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011\n  const wchar_t s1[] = { 0x8D3, '\\0' };\n  EXPECT_STREQ(\"\\xE0\\xA3\\x93\", WideStringToUtf8(s1, 1).c_str());\n  EXPECT_STREQ(\"\\xE0\\xA3\\x93\", WideStringToUtf8(s1, -1).c_str());\n\n  // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101\n  const wchar_t s2[] = { 0xC74D, '\\0' };\n  EXPECT_STREQ(\"\\xEC\\x9D\\x8D\", WideStringToUtf8(s2, 1).c_str());\n  EXPECT_STREQ(\"\\xEC\\x9D\\x8D\", WideStringToUtf8(s2, -1).c_str());\n}\n\n// Tests that the conversion stops when the function encounters \\0 character.\nTEST(WideStringToUtf8Test, StopsOnNulCharacter) {\n  EXPECT_STREQ(\"ABC\", WideStringToUtf8(L\"ABC\\0XYZ\", 100).c_str());\n}\n\n// Tests that the conversion stops when the function reaches the limit\n// specified by the 'length' parameter.\nTEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) {\n  EXPECT_STREQ(\"ABC\", WideStringToUtf8(L\"ABCDEF\", 3).c_str());\n}\n\n#if !GTEST_WIDE_STRING_USES_UTF16_\n// Tests that Unicode code-points that have 17 to 21 bits are encoded\n// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile\n// on the systems using UTF-16 encoding.\nTEST(WideStringToUtf8Test, CanEncode17To21Bits) {\n  // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011\n  EXPECT_STREQ(\"\\xF0\\x90\\xA3\\x93\", WideStringToUtf8(L\"\\x108D3\", 1).c_str());\n  EXPECT_STREQ(\"\\xF0\\x90\\xA3\\x93\", WideStringToUtf8(L\"\\x108D3\", -1).c_str());\n\n  // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100\n  EXPECT_STREQ(\"\\xF4\\x88\\x98\\xB4\", WideStringToUtf8(L\"\\x108634\", 1).c_str());\n  EXPECT_STREQ(\"\\xF4\\x88\\x98\\xB4\", WideStringToUtf8(L\"\\x108634\", -1).c_str());\n}\n\n// Tests that encoding an invalid code-point generates the expected result.\nTEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) {\n  EXPECT_STREQ(\"(Invalid Unicode 0xABCDFF)\",\n               WideStringToUtf8(L\"\\xABCDFF\", -1).c_str());\n}\n#else  // !GTEST_WIDE_STRING_USES_UTF16_\n// Tests that surrogate pairs are encoded correctly on the systems using\n// UTF-16 encoding in the wide strings.\nTEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) {\n  const wchar_t s[] = { 0xD801, 0xDC00, '\\0' };\n  EXPECT_STREQ(\"\\xF0\\x90\\x90\\x80\", WideStringToUtf8(s, -1).c_str());\n}\n\n// Tests that encoding an invalid UTF-16 surrogate pair\n// generates the expected result.\nTEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) {\n  // Leading surrogate is at the end of the string.\n  const wchar_t s1[] = { 0xD800, '\\0' };\n  EXPECT_STREQ(\"\\xED\\xA0\\x80\", WideStringToUtf8(s1, -1).c_str());\n  // Leading surrogate is not followed by the trailing surrogate.\n  const wchar_t s2[] = { 0xD800, 'M', '\\0' };\n  EXPECT_STREQ(\"\\xED\\xA0\\x80M\", WideStringToUtf8(s2, -1).c_str());\n  // Trailing surrogate appearas without a leading surrogate.\n  const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\\0' };\n  EXPECT_STREQ(\"\\xED\\xB0\\x80PQR\", WideStringToUtf8(s3, -1).c_str());\n}\n#endif  // !GTEST_WIDE_STRING_USES_UTF16_\n\n// Tests that codepoint concatenation works correctly.\n#if !GTEST_WIDE_STRING_USES_UTF16_\nTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {\n  const wchar_t s[] = { 0x108634, 0xC74D, '\\n', 0x576, 0x8D3, 0x108634, '\\0'};\n  EXPECT_STREQ(\n      \"\\xF4\\x88\\x98\\xB4\"\n          \"\\xEC\\x9D\\x8D\"\n          \"\\n\"\n          \"\\xD5\\xB6\"\n          \"\\xE0\\xA3\\x93\"\n          \"\\xF4\\x88\\x98\\xB4\",\n      WideStringToUtf8(s, -1).c_str());\n}\n#else\nTEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {\n  const wchar_t s[] = { 0xC74D, '\\n', 0x576, 0x8D3, '\\0'};\n  EXPECT_STREQ(\n      \"\\xEC\\x9D\\x8D\" \"\\n\" \"\\xD5\\xB6\" \"\\xE0\\xA3\\x93\",\n      WideStringToUtf8(s, -1).c_str());\n}\n#endif  // !GTEST_WIDE_STRING_USES_UTF16_\n\n// Tests the Random class.\n\nTEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) {\n  testing::internal::Random random(42);\n  EXPECT_DEATH_IF_SUPPORTED(\n      random.Generate(0),\n      \"Cannot generate a number in the range \\\\[0, 0\\\\)\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      random.Generate(testing::internal::Random::kMaxRange + 1),\n      \"Generation of a number in \\\\[0, 2147483649\\\\) was requested, \"\n      \"but this can only generate numbers in \\\\[0, 2147483648\\\\)\");\n}\n\nTEST(RandomTest, GeneratesNumbersWithinRange) {\n  const UInt32 kRange = 10000;\n  testing::internal::Random random(12345);\n  for (int i = 0; i < 10; i++) {\n    EXPECT_LT(random.Generate(kRange), kRange) << \" for iteration \" << i;\n  }\n\n  testing::internal::Random random2(testing::internal::Random::kMaxRange);\n  for (int i = 0; i < 10; i++) {\n    EXPECT_LT(random2.Generate(kRange), kRange) << \" for iteration \" << i;\n  }\n}\n\nTEST(RandomTest, RepeatsWhenReseeded) {\n  const int kSeed = 123;\n  const int kArraySize = 10;\n  const UInt32 kRange = 10000;\n  UInt32 values[kArraySize];\n\n  testing::internal::Random random(kSeed);\n  for (int i = 0; i < kArraySize; i++) {\n    values[i] = random.Generate(kRange);\n  }\n\n  random.Reseed(kSeed);\n  for (int i = 0; i < kArraySize; i++) {\n    EXPECT_EQ(values[i], random.Generate(kRange)) << \" for iteration \" << i;\n  }\n}\n\n// Tests STL container utilities.\n\n// Tests CountIf().\n\nstatic bool IsPositive(int n) { return n > 0; }\n\nTEST(ContainerUtilityTest, CountIf) {\n  std::vector<int> v;\n  EXPECT_EQ(0, CountIf(v, IsPositive));  // Works for an empty container.\n\n  v.push_back(-1);\n  v.push_back(0);\n  EXPECT_EQ(0, CountIf(v, IsPositive));  // Works when no value satisfies.\n\n  v.push_back(2);\n  v.push_back(-10);\n  v.push_back(10);\n  EXPECT_EQ(2, CountIf(v, IsPositive));\n}\n\n// Tests ForEach().\n\nstatic int g_sum = 0;\nstatic void Accumulate(int n) { g_sum += n; }\n\nTEST(ContainerUtilityTest, ForEach) {\n  std::vector<int> v;\n  g_sum = 0;\n  ForEach(v, Accumulate);\n  EXPECT_EQ(0, g_sum);  // Works for an empty container;\n\n  g_sum = 0;\n  v.push_back(1);\n  ForEach(v, Accumulate);\n  EXPECT_EQ(1, g_sum);  // Works for a container with one element.\n\n  g_sum = 0;\n  v.push_back(20);\n  v.push_back(300);\n  ForEach(v, Accumulate);\n  EXPECT_EQ(321, g_sum);\n}\n\n// Tests GetElementOr().\nTEST(ContainerUtilityTest, GetElementOr) {\n  std::vector<char> a;\n  EXPECT_EQ('x', GetElementOr(a, 0, 'x'));\n\n  a.push_back('a');\n  a.push_back('b');\n  EXPECT_EQ('a', GetElementOr(a, 0, 'x'));\n  EXPECT_EQ('b', GetElementOr(a, 1, 'x'));\n  EXPECT_EQ('x', GetElementOr(a, -2, 'x'));\n  EXPECT_EQ('x', GetElementOr(a, 2, 'x'));\n}\n\nTEST(ContainerUtilityDeathTest, ShuffleRange) {\n  std::vector<int> a;\n  a.push_back(0);\n  a.push_back(1);\n  a.push_back(2);\n  testing::internal::Random random(1);\n\n  EXPECT_DEATH_IF_SUPPORTED(\n      ShuffleRange(&random, -1, 1, &a),\n      \"Invalid shuffle range start -1: must be in range \\\\[0, 3\\\\]\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      ShuffleRange(&random, 4, 4, &a),\n      \"Invalid shuffle range start 4: must be in range \\\\[0, 3\\\\]\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      ShuffleRange(&random, 3, 2, &a),\n      \"Invalid shuffle range finish 2: must be in range \\\\[3, 3\\\\]\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      ShuffleRange(&random, 3, 4, &a),\n      \"Invalid shuffle range finish 4: must be in range \\\\[3, 3\\\\]\");\n}\n\nclass VectorShuffleTest : public Test {\n protected:\n  static const int kVectorSize = 20;\n\n  VectorShuffleTest() : random_(1) {\n    for (int i = 0; i < kVectorSize; i++) {\n      vector_.push_back(i);\n    }\n  }\n\n  static bool VectorIsCorrupt(const TestingVector& vector) {\n    if (kVectorSize != static_cast<int>(vector.size())) {\n      return true;\n    }\n\n    bool found_in_vector[kVectorSize] = { false };\n    for (size_t i = 0; i < vector.size(); i++) {\n      const int e = vector[i];\n      if (e < 0 || e >= kVectorSize || found_in_vector[e]) {\n        return true;\n      }\n      found_in_vector[e] = true;\n    }\n\n    // Vector size is correct, elements' range is correct, no\n    // duplicate elements.  Therefore no corruption has occurred.\n    return false;\n  }\n\n  static bool VectorIsNotCorrupt(const TestingVector& vector) {\n    return !VectorIsCorrupt(vector);\n  }\n\n  static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) {\n    for (int i = begin; i < end; i++) {\n      if (i != vector[i]) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static bool RangeIsUnshuffled(\n      const TestingVector& vector, int begin, int end) {\n    return !RangeIsShuffled(vector, begin, end);\n  }\n\n  static bool VectorIsShuffled(const TestingVector& vector) {\n    return RangeIsShuffled(vector, 0, static_cast<int>(vector.size()));\n  }\n\n  static bool VectorIsUnshuffled(const TestingVector& vector) {\n    return !VectorIsShuffled(vector);\n  }\n\n  testing::internal::Random random_;\n  TestingVector vector_;\n};  // class VectorShuffleTest\n\nconst int VectorShuffleTest::kVectorSize;\n\nTEST_F(VectorShuffleTest, HandlesEmptyRange) {\n  // Tests an empty range at the beginning...\n  ShuffleRange(&random_, 0, 0, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n\n  // ...in the middle...\n  ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n\n  // ...at the end...\n  ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n\n  // ...and past the end.\n  ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n}\n\nTEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) {\n  // Tests a size one range at the beginning...\n  ShuffleRange(&random_, 0, 1, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n\n  // ...in the middle...\n  ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n\n  // ...and at the end.\n  ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsUnshuffled, vector_);\n}\n\n// Because we use our own random number generator and a fixed seed,\n// we can guarantee that the following \"random\" tests will succeed.\n\nTEST_F(VectorShuffleTest, ShufflesEntireVector) {\n  Shuffle(&random_, &vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_;\n\n  // Tests the first and last elements in particular to ensure that\n  // there are no off-by-one problems in our shuffle algorithm.\n  EXPECT_NE(0, vector_[0]);\n  EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]);\n}\n\nTEST_F(VectorShuffleTest, ShufflesStartOfVector) {\n  const int kRangeSize = kVectorSize/2;\n\n  ShuffleRange(&random_, 0, kRangeSize, &vector_);\n\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize);\n  EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize);\n}\n\nTEST_F(VectorShuffleTest, ShufflesEndOfVector) {\n  const int kRangeSize = kVectorSize / 2;\n  ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_);\n\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);\n  EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize);\n}\n\nTEST_F(VectorShuffleTest, ShufflesMiddleOfVector) {\n  int kRangeSize = kVectorSize/3;\n  ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_);\n\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);\n  EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize);\n  EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize);\n}\n\nTEST_F(VectorShuffleTest, ShufflesRepeatably) {\n  TestingVector vector2;\n  for (int i = 0; i < kVectorSize; i++) {\n    vector2.push_back(i);\n  }\n\n  random_.Reseed(1234);\n  Shuffle(&random_, &vector_);\n  random_.Reseed(1234);\n  Shuffle(&random_, &vector2);\n\n  ASSERT_PRED1(VectorIsNotCorrupt, vector_);\n  ASSERT_PRED1(VectorIsNotCorrupt, vector2);\n\n  for (int i = 0; i < kVectorSize; i++) {\n    EXPECT_EQ(vector_[i], vector2[i]) << \" where i is \" << i;\n  }\n}\n\n// Tests the size of the AssertHelper class.\n\nTEST(AssertHelperTest, AssertHelperIsSmall) {\n  // To avoid breaking clients that use lots of assertions in one\n  // function, we cannot grow the size of AssertHelper.\n  EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*));\n}\n\n// Tests String::EndsWithCaseInsensitive().\nTEST(StringTest, EndsWithCaseInsensitive) {\n  EXPECT_TRUE(String::EndsWithCaseInsensitive(\"foobar\", \"BAR\"));\n  EXPECT_TRUE(String::EndsWithCaseInsensitive(\"foobaR\", \"bar\"));\n  EXPECT_TRUE(String::EndsWithCaseInsensitive(\"foobar\", \"\"));\n  EXPECT_TRUE(String::EndsWithCaseInsensitive(\"\", \"\"));\n\n  EXPECT_FALSE(String::EndsWithCaseInsensitive(\"Foobar\", \"foo\"));\n  EXPECT_FALSE(String::EndsWithCaseInsensitive(\"foobar\", \"Foo\"));\n  EXPECT_FALSE(String::EndsWithCaseInsensitive(\"\", \"foo\"));\n}\n\n// C++Builder's preprocessor is buggy; it fails to expand macros that\n// appear in macro parameters after wide char literals.  Provide an alias\n// for NULL as a workaround.\nstatic const wchar_t* const kNull = NULL;\n\n// Tests String::CaseInsensitiveWideCStringEquals\nTEST(StringTest, CaseInsensitiveWideCStringEquals) {\n  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL));\n  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L\"\"));\n  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L\"\", kNull));\n  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L\"foobar\"));\n  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L\"foobar\", kNull));\n  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L\"foobar\", L\"foobar\"));\n  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L\"foobar\", L\"FOOBAR\"));\n  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L\"FOOBAR\", L\"foobar\"));\n}\n\n#if GTEST_OS_WINDOWS\n\n// Tests String::ShowWideCString().\nTEST(StringTest, ShowWideCString) {\n  EXPECT_STREQ(\"(null)\",\n               String::ShowWideCString(NULL).c_str());\n  EXPECT_STREQ(\"\", String::ShowWideCString(L\"\").c_str());\n  EXPECT_STREQ(\"foo\", String::ShowWideCString(L\"foo\").c_str());\n}\n\n# if GTEST_OS_WINDOWS_MOBILE\nTEST(StringTest, AnsiAndUtf16Null) {\n  EXPECT_EQ(NULL, String::AnsiToUtf16(NULL));\n  EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL));\n}\n\nTEST(StringTest, AnsiAndUtf16ConvertBasic) {\n  const char* ansi = String::Utf16ToAnsi(L\"str\");\n  EXPECT_STREQ(\"str\", ansi);\n  delete [] ansi;\n  const WCHAR* utf16 = String::AnsiToUtf16(\"str\");\n  EXPECT_EQ(0, wcsncmp(L\"str\", utf16, 3));\n  delete [] utf16;\n}\n\nTEST(StringTest, AnsiAndUtf16ConvertPathChars) {\n  const char* ansi = String::Utf16ToAnsi(L\".:\\\\ \\\"*?\");\n  EXPECT_STREQ(\".:\\\\ \\\"*?\", ansi);\n  delete [] ansi;\n  const WCHAR* utf16 = String::AnsiToUtf16(\".:\\\\ \\\"*?\");\n  EXPECT_EQ(0, wcsncmp(L\".:\\\\ \\\"*?\", utf16, 3));\n  delete [] utf16;\n}\n# endif  // GTEST_OS_WINDOWS_MOBILE\n\n#endif  // GTEST_OS_WINDOWS\n\n// Tests TestProperty construction.\nTEST(TestPropertyTest, StringValue) {\n  TestProperty property(\"key\", \"1\");\n  EXPECT_STREQ(\"key\", property.key());\n  EXPECT_STREQ(\"1\", property.value());\n}\n\n// Tests TestProperty replacing a value.\nTEST(TestPropertyTest, ReplaceStringValue) {\n  TestProperty property(\"key\", \"1\");\n  EXPECT_STREQ(\"1\", property.value());\n  property.SetValue(\"2\");\n  EXPECT_STREQ(\"2\", property.value());\n}\n\n// AddFatalFailure() and AddNonfatalFailure() must be stand-alone\n// functions (i.e. their definitions cannot be inlined at the call\n// sites), or C++Builder won't compile the code.\nstatic void AddFatalFailure() {\n  FAIL() << \"Expected fatal failure.\";\n}\n\nstatic void AddNonfatalFailure() {\n  ADD_FAILURE() << \"Expected non-fatal failure.\";\n}\n\nclass ScopedFakeTestPartResultReporterTest : public Test {\n public:  // Must be public and not protected due to a bug in g++ 3.4.2.\n  enum FailureMode {\n    FATAL_FAILURE,\n    NONFATAL_FAILURE\n  };\n  static void AddFailure(FailureMode failure) {\n    if (failure == FATAL_FAILURE) {\n      AddFatalFailure();\n    } else {\n      AddNonfatalFailure();\n    }\n  }\n};\n\n// Tests that ScopedFakeTestPartResultReporter intercepts test\n// failures.\nTEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) {\n  TestPartResultArray results;\n  {\n    ScopedFakeTestPartResultReporter reporter(\n        ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD,\n        &results);\n    AddFailure(NONFATAL_FAILURE);\n    AddFailure(FATAL_FAILURE);\n  }\n\n  EXPECT_EQ(2, results.size());\n  EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());\n  EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());\n}\n\nTEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) {\n  TestPartResultArray results;\n  {\n    // Tests, that the deprecated constructor still works.\n    ScopedFakeTestPartResultReporter reporter(&results);\n    AddFailure(NONFATAL_FAILURE);\n  }\n  EXPECT_EQ(1, results.size());\n}\n\n#if GTEST_IS_THREADSAFE\n\nclass ScopedFakeTestPartResultReporterWithThreadsTest\n  : public ScopedFakeTestPartResultReporterTest {\n protected:\n  static void AddFailureInOtherThread(FailureMode failure) {\n    ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL);\n    thread.Join();\n  }\n};\n\nTEST_F(ScopedFakeTestPartResultReporterWithThreadsTest,\n       InterceptsTestFailuresInAllThreads) {\n  TestPartResultArray results;\n  {\n    ScopedFakeTestPartResultReporter reporter(\n        ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results);\n    AddFailure(NONFATAL_FAILURE);\n    AddFailure(FATAL_FAILURE);\n    AddFailureInOtherThread(NONFATAL_FAILURE);\n    AddFailureInOtherThread(FATAL_FAILURE);\n  }\n\n  EXPECT_EQ(4, results.size());\n  EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());\n  EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());\n  EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed());\n  EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed());\n}\n\n#endif  // GTEST_IS_THREADSAFE\n\n// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}.  Makes sure that they\n// work even if the failure is generated in a called function rather than\n// the current context.\n\ntypedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest;\n\nTEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) {\n  EXPECT_FATAL_FAILURE(AddFatalFailure(), \"Expected fatal failure.\");\n}\n\n#if GTEST_HAS_GLOBAL_STRING\nTEST_F(ExpectFatalFailureTest, AcceptsStringObject) {\n  EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string(\"Expected fatal failure.\"));\n}\n#endif\n\nTEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) {\n  EXPECT_FATAL_FAILURE(AddFatalFailure(),\n                       ::std::string(\"Expected fatal failure.\"));\n}\n\nTEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) {\n  // We have another test below to verify that the macro catches fatal\n  // failures generated on another thread.\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(),\n                                      \"Expected fatal failure.\");\n}\n\n#ifdef __BORLANDC__\n// Silences warnings: \"Condition is always true\"\n# pragma option push -w-ccc\n#endif\n\n// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void\n// function even when the statement in it contains ASSERT_*.\n\nint NonVoidFunction() {\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), \"\");\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), \"\");\n  return 0;\n}\n\nTEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) {\n  NonVoidFunction();\n}\n\n// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the\n// current function even though 'statement' generates a fatal failure.\n\nvoid DoesNotAbortHelper(bool* aborted) {\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), \"\");\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), \"\");\n\n  *aborted = false;\n}\n\n#ifdef __BORLANDC__\n// Restores warnings after previous \"#pragma option push\" suppressed them.\n# pragma option pop\n#endif\n\nTEST_F(ExpectFatalFailureTest, DoesNotAbort) {\n  bool aborted = true;\n  DoesNotAbortHelper(&aborted);\n  EXPECT_FALSE(aborted);\n}\n\n// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a\n// statement that contains a macro which expands to code containing an\n// unprotected comma.\n\nstatic int global_var = 0;\n#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++\n\nTEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {\n#ifndef __BORLANDC__\n  // ICE's in C++Builder.\n  EXPECT_FATAL_FAILURE({\n    GTEST_USE_UNPROTECTED_COMMA_;\n    AddFatalFailure();\n  }, \"\");\n#endif\n\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS({\n    GTEST_USE_UNPROTECTED_COMMA_;\n    AddFatalFailure();\n  }, \"\");\n}\n\n// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}.\n\ntypedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest;\n\nTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) {\n  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),\n                          \"Expected non-fatal failure.\");\n}\n\n#if GTEST_HAS_GLOBAL_STRING\nTEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) {\n  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),\n                          ::string(\"Expected non-fatal failure.\"));\n}\n#endif\n\nTEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) {\n  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),\n                          ::std::string(\"Expected non-fatal failure.\"));\n}\n\nTEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) {\n  // We have another test below to verify that the macro catches\n  // non-fatal failures generated on another thread.\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(),\n                                         \"Expected non-fatal failure.\");\n}\n\n// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a\n// statement that contains a macro which expands to code containing an\n// unprotected comma.\nTEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {\n  EXPECT_NONFATAL_FAILURE({\n    GTEST_USE_UNPROTECTED_COMMA_;\n    AddNonfatalFailure();\n  }, \"\");\n\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({\n    GTEST_USE_UNPROTECTED_COMMA_;\n    AddNonfatalFailure();\n  }, \"\");\n}\n\n#if GTEST_IS_THREADSAFE\n\ntypedef ScopedFakeTestPartResultReporterWithThreadsTest\n    ExpectFailureWithThreadsTest;\n\nTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) {\n  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE),\n                                      \"Expected fatal failure.\");\n}\n\nTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) {\n  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(\n      AddFailureInOtherThread(NONFATAL_FAILURE), \"Expected non-fatal failure.\");\n}\n\n#endif  // GTEST_IS_THREADSAFE\n\n// Tests the TestProperty class.\n\nTEST(TestPropertyTest, ConstructorWorks) {\n  const TestProperty property(\"key\", \"value\");\n  EXPECT_STREQ(\"key\", property.key());\n  EXPECT_STREQ(\"value\", property.value());\n}\n\nTEST(TestPropertyTest, SetValue) {\n  TestProperty property(\"key\", \"value_1\");\n  EXPECT_STREQ(\"key\", property.key());\n  property.SetValue(\"value_2\");\n  EXPECT_STREQ(\"key\", property.key());\n  EXPECT_STREQ(\"value_2\", property.value());\n}\n\n// Tests the TestResult class\n\n// The test fixture for testing TestResult.\nclass TestResultTest : public Test {\n protected:\n  typedef std::vector<TestPartResult> TPRVector;\n\n  // We make use of 2 TestPartResult objects,\n  TestPartResult * pr1, * pr2;\n\n  // ... and 3 TestResult objects.\n  TestResult * r0, * r1, * r2;\n\n  virtual void SetUp() {\n    // pr1 is for success.\n    pr1 = new TestPartResult(TestPartResult::kSuccess,\n                             \"foo/bar.cc\",\n                             10,\n                             \"Success!\");\n\n    // pr2 is for fatal failure.\n    pr2 = new TestPartResult(TestPartResult::kFatalFailure,\n                             \"foo/bar.cc\",\n                             -1,  // This line number means \"unknown\"\n                             \"Failure!\");\n\n    // Creates the TestResult objects.\n    r0 = new TestResult();\n    r1 = new TestResult();\n    r2 = new TestResult();\n\n    // In order to test TestResult, we need to modify its internal\n    // state, in particular the TestPartResult vector it holds.\n    // test_part_results() returns a const reference to this vector.\n    // We cast it to a non-const object s.t. it can be modified (yes,\n    // this is a hack).\n    TPRVector* results1 = const_cast<TPRVector*>(\n        &TestResultAccessor::test_part_results(*r1));\n    TPRVector* results2 = const_cast<TPRVector*>(\n        &TestResultAccessor::test_part_results(*r2));\n\n    // r0 is an empty TestResult.\n\n    // r1 contains a single SUCCESS TestPartResult.\n    results1->push_back(*pr1);\n\n    // r2 contains a SUCCESS, and a FAILURE.\n    results2->push_back(*pr1);\n    results2->push_back(*pr2);\n  }\n\n  virtual void TearDown() {\n    delete pr1;\n    delete pr2;\n\n    delete r0;\n    delete r1;\n    delete r2;\n  }\n\n  // Helper that compares two two TestPartResults.\n  static void CompareTestPartResult(const TestPartResult& expected,\n                                    const TestPartResult& actual) {\n    EXPECT_EQ(expected.type(), actual.type());\n    EXPECT_STREQ(expected.file_name(), actual.file_name());\n    EXPECT_EQ(expected.line_number(), actual.line_number());\n    EXPECT_STREQ(expected.summary(), actual.summary());\n    EXPECT_STREQ(expected.message(), actual.message());\n    EXPECT_EQ(expected.passed(), actual.passed());\n    EXPECT_EQ(expected.failed(), actual.failed());\n    EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed());\n    EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed());\n  }\n};\n\n// Tests TestResult::total_part_count().\nTEST_F(TestResultTest, total_part_count) {\n  ASSERT_EQ(0, r0->total_part_count());\n  ASSERT_EQ(1, r1->total_part_count());\n  ASSERT_EQ(2, r2->total_part_count());\n}\n\n// Tests TestResult::Passed().\nTEST_F(TestResultTest, Passed) {\n  ASSERT_TRUE(r0->Passed());\n  ASSERT_TRUE(r1->Passed());\n  ASSERT_FALSE(r2->Passed());\n}\n\n// Tests TestResult::Failed().\nTEST_F(TestResultTest, Failed) {\n  ASSERT_FALSE(r0->Failed());\n  ASSERT_FALSE(r1->Failed());\n  ASSERT_TRUE(r2->Failed());\n}\n\n// Tests TestResult::GetTestPartResult().\n\ntypedef TestResultTest TestResultDeathTest;\n\nTEST_F(TestResultDeathTest, GetTestPartResult) {\n  CompareTestPartResult(*pr1, r2->GetTestPartResult(0));\n  CompareTestPartResult(*pr2, r2->GetTestPartResult(1));\n  EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), \"\");\n  EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), \"\");\n}\n\n// Tests TestResult has no properties when none are added.\nTEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) {\n  TestResult test_result;\n  ASSERT_EQ(0, test_result.test_property_count());\n}\n\n// Tests TestResult has the expected property when added.\nTEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) {\n  TestResult test_result;\n  TestProperty property(\"key_1\", \"1\");\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property);\n  ASSERT_EQ(1, test_result.test_property_count());\n  const TestProperty& actual_property = test_result.GetTestProperty(0);\n  EXPECT_STREQ(\"key_1\", actual_property.key());\n  EXPECT_STREQ(\"1\", actual_property.value());\n}\n\n// Tests TestResult has multiple properties when added.\nTEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) {\n  TestResult test_result;\n  TestProperty property_1(\"key_1\", \"1\");\n  TestProperty property_2(\"key_2\", \"2\");\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_1);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_2);\n  ASSERT_EQ(2, test_result.test_property_count());\n  const TestProperty& actual_property_1 = test_result.GetTestProperty(0);\n  EXPECT_STREQ(\"key_1\", actual_property_1.key());\n  EXPECT_STREQ(\"1\", actual_property_1.value());\n\n  const TestProperty& actual_property_2 = test_result.GetTestProperty(1);\n  EXPECT_STREQ(\"key_2\", actual_property_2.key());\n  EXPECT_STREQ(\"2\", actual_property_2.value());\n}\n\n// Tests TestResult::RecordProperty() overrides values for duplicate keys.\nTEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) {\n  TestResult test_result;\n  TestProperty property_1_1(\"key_1\", \"1\");\n  TestProperty property_2_1(\"key_2\", \"2\");\n  TestProperty property_1_2(\"key_1\", \"12\");\n  TestProperty property_2_2(\"key_2\", \"22\");\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_1_1);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_2_1);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_1_2);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_2_2);\n\n  ASSERT_EQ(2, test_result.test_property_count());\n  const TestProperty& actual_property_1 = test_result.GetTestProperty(0);\n  EXPECT_STREQ(\"key_1\", actual_property_1.key());\n  EXPECT_STREQ(\"12\", actual_property_1.value());\n\n  const TestProperty& actual_property_2 = test_result.GetTestProperty(1);\n  EXPECT_STREQ(\"key_2\", actual_property_2.key());\n  EXPECT_STREQ(\"22\", actual_property_2.value());\n}\n\n// Tests TestResult::GetTestProperty().\nTEST(TestResultPropertyTest, GetTestProperty) {\n  TestResult test_result;\n  TestProperty property_1(\"key_1\", \"1\");\n  TestProperty property_2(\"key_2\", \"2\");\n  TestProperty property_3(\"key_3\", \"3\");\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_1);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_2);\n  TestResultAccessor::RecordProperty(&test_result, \"testcase\", property_3);\n\n  const TestProperty& fetched_property_1 = test_result.GetTestProperty(0);\n  const TestProperty& fetched_property_2 = test_result.GetTestProperty(1);\n  const TestProperty& fetched_property_3 = test_result.GetTestProperty(2);\n\n  EXPECT_STREQ(\"key_1\", fetched_property_1.key());\n  EXPECT_STREQ(\"1\", fetched_property_1.value());\n\n  EXPECT_STREQ(\"key_2\", fetched_property_2.key());\n  EXPECT_STREQ(\"2\", fetched_property_2.value());\n\n  EXPECT_STREQ(\"key_3\", fetched_property_3.key());\n  EXPECT_STREQ(\"3\", fetched_property_3.value());\n\n  EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), \"\");\n  EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), \"\");\n}\n\n// Tests that GTestFlagSaver works on Windows and Mac.\n\nclass GTestFlagSaverTest : public Test {\n protected:\n  // Saves the Google Test flags such that we can restore them later, and\n  // then sets them to their default values.  This will be called\n  // before the first test in this test case is run.\n  static void SetUpTestCase() {\n    saver_ = new GTestFlagSaver;\n\n    GTEST_FLAG(also_run_disabled_tests) = false;\n    GTEST_FLAG(break_on_failure) = false;\n    GTEST_FLAG(catch_exceptions) = false;\n    GTEST_FLAG(death_test_use_fork) = false;\n    GTEST_FLAG(color) = \"auto\";\n    GTEST_FLAG(filter) = \"\";\n    GTEST_FLAG(list_tests) = false;\n    GTEST_FLAG(output) = \"\";\n    GTEST_FLAG(print_time) = true;\n    GTEST_FLAG(random_seed) = 0;\n    GTEST_FLAG(repeat) = 1;\n    GTEST_FLAG(shuffle) = false;\n    GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;\n    GTEST_FLAG(stream_result_to) = \"\";\n    GTEST_FLAG(throw_on_failure) = false;\n  }\n\n  // Restores the Google Test flags that the tests have modified.  This will\n  // be called after the last test in this test case is run.\n  static void TearDownTestCase() {\n    delete saver_;\n    saver_ = NULL;\n  }\n\n  // Verifies that the Google Test flags have their default values, and then\n  // modifies each of them.\n  void VerifyAndModifyFlags() {\n    EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests));\n    EXPECT_FALSE(GTEST_FLAG(break_on_failure));\n    EXPECT_FALSE(GTEST_FLAG(catch_exceptions));\n    EXPECT_STREQ(\"auto\", GTEST_FLAG(color).c_str());\n    EXPECT_FALSE(GTEST_FLAG(death_test_use_fork));\n    EXPECT_STREQ(\"\", GTEST_FLAG(filter).c_str());\n    EXPECT_FALSE(GTEST_FLAG(list_tests));\n    EXPECT_STREQ(\"\", GTEST_FLAG(output).c_str());\n    EXPECT_TRUE(GTEST_FLAG(print_time));\n    EXPECT_EQ(0, GTEST_FLAG(random_seed));\n    EXPECT_EQ(1, GTEST_FLAG(repeat));\n    EXPECT_FALSE(GTEST_FLAG(shuffle));\n    EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth));\n    EXPECT_STREQ(\"\", GTEST_FLAG(stream_result_to).c_str());\n    EXPECT_FALSE(GTEST_FLAG(throw_on_failure));\n\n    GTEST_FLAG(also_run_disabled_tests) = true;\n    GTEST_FLAG(break_on_failure) = true;\n    GTEST_FLAG(catch_exceptions) = true;\n    GTEST_FLAG(color) = \"no\";\n    GTEST_FLAG(death_test_use_fork) = true;\n    GTEST_FLAG(filter) = \"abc\";\n    GTEST_FLAG(list_tests) = true;\n    GTEST_FLAG(output) = \"xml:foo.xml\";\n    GTEST_FLAG(print_time) = false;\n    GTEST_FLAG(random_seed) = 1;\n    GTEST_FLAG(repeat) = 100;\n    GTEST_FLAG(shuffle) = true;\n    GTEST_FLAG(stack_trace_depth) = 1;\n    GTEST_FLAG(stream_result_to) = \"localhost:1234\";\n    GTEST_FLAG(throw_on_failure) = true;\n  }\n\n private:\n  // For saving Google Test flags during this test case.\n  static GTestFlagSaver* saver_;\n};\n\nGTestFlagSaver* GTestFlagSaverTest::saver_ = NULL;\n\n// Google Test doesn't guarantee the order of tests.  The following two\n// tests are designed to work regardless of their order.\n\n// Modifies the Google Test flags in the test body.\nTEST_F(GTestFlagSaverTest, ModifyGTestFlags) {\n  VerifyAndModifyFlags();\n}\n\n// Verifies that the Google Test flags in the body of the previous test were\n// restored to their original values.\nTEST_F(GTestFlagSaverTest, VerifyGTestFlags) {\n  VerifyAndModifyFlags();\n}\n\n// Sets an environment variable with the given name to the given\n// value.  If the value argument is \"\", unsets the environment\n// variable.  The caller must ensure that both arguments are not NULL.\nstatic void SetEnv(const char* name, const char* value) {\n#if GTEST_OS_WINDOWS_MOBILE\n  // Environment variables are not supported on Windows CE.\n  return;\n#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)\n  // C++Builder's putenv only stores a pointer to its parameter; we have to\n  // ensure that the string remains valid as long as it might be needed.\n  // We use an std::map to do so.\n  static std::map<std::string, std::string*> added_env;\n\n  // Because putenv stores a pointer to the string buffer, we can't delete the\n  // previous string (if present) until after it's replaced.\n  std::string *prev_env = NULL;\n  if (added_env.find(name) != added_env.end()) {\n    prev_env = added_env[name];\n  }\n  added_env[name] = new std::string(\n      (Message() << name << \"=\" << value).GetString());\n\n  // The standard signature of putenv accepts a 'char*' argument. Other\n  // implementations, like C++Builder's, accept a 'const char*'.\n  // We cast away the 'const' since that would work for both variants.\n  putenv(const_cast<char*>(added_env[name]->c_str()));\n  delete prev_env;\n#elif GTEST_OS_WINDOWS  // If we are on Windows proper.\n  _putenv((Message() << name << \"=\" << value).GetString().c_str());\n#else\n  if (*value == '\\0') {\n    unsetenv(name);\n  } else {\n    setenv(name, value, 1);\n  }\n#endif  // GTEST_OS_WINDOWS_MOBILE\n}\n\n#if !GTEST_OS_WINDOWS_MOBILE\n// Environment variables are not supported on Windows CE.\n\nusing testing::internal::Int32FromGTestEnv;\n\n// Tests Int32FromGTestEnv().\n\n// Tests that Int32FromGTestEnv() returns the default value when the\n// environment variable is not set.\nTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) {\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"\");\n  EXPECT_EQ(10, Int32FromGTestEnv(\"temp\", 10));\n}\n\n// Tests that Int32FromGTestEnv() returns the default value when the\n// environment variable overflows as an Int32.\nTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) {\n  printf(\"(expecting 2 warnings)\\n\");\n\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"12345678987654321\");\n  EXPECT_EQ(20, Int32FromGTestEnv(\"temp\", 20));\n\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"-12345678987654321\");\n  EXPECT_EQ(30, Int32FromGTestEnv(\"temp\", 30));\n}\n\n// Tests that Int32FromGTestEnv() returns the default value when the\n// environment variable does not represent a valid decimal integer.\nTEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) {\n  printf(\"(expecting 2 warnings)\\n\");\n\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"A1\");\n  EXPECT_EQ(40, Int32FromGTestEnv(\"temp\", 40));\n\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"12X\");\n  EXPECT_EQ(50, Int32FromGTestEnv(\"temp\", 50));\n}\n\n// Tests that Int32FromGTestEnv() parses and returns the value of the\n// environment variable when it represents a valid decimal integer in\n// the range of an Int32.\nTEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) {\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"123\");\n  EXPECT_EQ(123, Int32FromGTestEnv(\"temp\", 0));\n\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"TEMP\", \"-321\");\n  EXPECT_EQ(-321, Int32FromGTestEnv(\"temp\", 0));\n}\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\n// Tests ParseInt32Flag().\n\n// Tests that ParseInt32Flag() returns false and doesn't change the\n// output value when the flag has wrong format\nTEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) {\n  Int32 value = 123;\n  EXPECT_FALSE(ParseInt32Flag(\"--a=100\", \"b\", &value));\n  EXPECT_EQ(123, value);\n\n  EXPECT_FALSE(ParseInt32Flag(\"a=100\", \"a\", &value));\n  EXPECT_EQ(123, value);\n}\n\n// Tests that ParseInt32Flag() returns false and doesn't change the\n// output value when the flag overflows as an Int32.\nTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) {\n  printf(\"(expecting 2 warnings)\\n\");\n\n  Int32 value = 123;\n  EXPECT_FALSE(ParseInt32Flag(\"--abc=12345678987654321\", \"abc\", &value));\n  EXPECT_EQ(123, value);\n\n  EXPECT_FALSE(ParseInt32Flag(\"--abc=-12345678987654321\", \"abc\", &value));\n  EXPECT_EQ(123, value);\n}\n\n// Tests that ParseInt32Flag() returns false and doesn't change the\n// output value when the flag does not represent a valid decimal\n// integer.\nTEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) {\n  printf(\"(expecting 2 warnings)\\n\");\n\n  Int32 value = 123;\n  EXPECT_FALSE(ParseInt32Flag(\"--abc=A1\", \"abc\", &value));\n  EXPECT_EQ(123, value);\n\n  EXPECT_FALSE(ParseInt32Flag(\"--abc=12X\", \"abc\", &value));\n  EXPECT_EQ(123, value);\n}\n\n// Tests that ParseInt32Flag() parses the value of the flag and\n// returns true when the flag represents a valid decimal integer in\n// the range of an Int32.\nTEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) {\n  Int32 value = 123;\n  EXPECT_TRUE(ParseInt32Flag(\"--\" GTEST_FLAG_PREFIX_ \"abc=456\", \"abc\", &value));\n  EXPECT_EQ(456, value);\n\n  EXPECT_TRUE(ParseInt32Flag(\"--\" GTEST_FLAG_PREFIX_ \"abc=-789\",\n                             \"abc\", &value));\n  EXPECT_EQ(-789, value);\n}\n\n// Tests that Int32FromEnvOrDie() parses the value of the var or\n// returns the correct default.\n// Environment variables are not supported on Windows CE.\n#if !GTEST_OS_WINDOWS_MOBILE\nTEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {\n  EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ \"UnsetVar\", 333));\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"UnsetVar\", \"123\");\n  EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ \"UnsetVar\", 333));\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"UnsetVar\", \"-123\");\n  EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ \"UnsetVar\", 333));\n}\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\n// Tests that Int32FromEnvOrDie() aborts with an error message\n// if the variable is not an Int32.\nTEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) {\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"VAR\", \"xxx\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ \"VAR\", 123),\n      \".*\");\n}\n\n// Tests that Int32FromEnvOrDie() aborts with an error message\n// if the variable cannot be represnted by an Int32.\nTEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) {\n  SetEnv(GTEST_FLAG_PREFIX_UPPER_ \"VAR\", \"1234567891234567891234\");\n  EXPECT_DEATH_IF_SUPPORTED(\n      Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ \"VAR\", 123),\n      \".*\");\n}\n\n// Tests that ShouldRunTestOnShard() selects all tests\n// where there is 1 shard.\nTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) {\n  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0));\n  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1));\n  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2));\n  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3));\n  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4));\n}\n\nclass ShouldShardTest : public testing::Test {\n protected:\n  virtual void SetUp() {\n    index_var_ = GTEST_FLAG_PREFIX_UPPER_ \"INDEX\";\n    total_var_ = GTEST_FLAG_PREFIX_UPPER_ \"TOTAL\";\n  }\n\n  virtual void TearDown() {\n    SetEnv(index_var_, \"\");\n    SetEnv(total_var_, \"\");\n  }\n\n  const char* index_var_;\n  const char* total_var_;\n};\n\n// Tests that sharding is disabled if neither of the environment variables\n// are set.\nTEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) {\n  SetEnv(index_var_, \"\");\n  SetEnv(total_var_, \"\");\n\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));\n}\n\n// Tests that sharding is not enabled if total_shards  == 1.\nTEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) {\n  SetEnv(index_var_, \"0\");\n  SetEnv(total_var_, \"1\");\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));\n}\n\n// Tests that sharding is enabled if total_shards > 1 and\n// we are not in a death test subprocess.\n// Environment variables are not supported on Windows CE.\n#if !GTEST_OS_WINDOWS_MOBILE\nTEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {\n  SetEnv(index_var_, \"4\");\n  SetEnv(total_var_, \"22\");\n  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));\n\n  SetEnv(index_var_, \"8\");\n  SetEnv(total_var_, \"9\");\n  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));\n\n  SetEnv(index_var_, \"0\");\n  SetEnv(total_var_, \"9\");\n  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));\n  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));\n}\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\n// Tests that we exit in error if the sharding values are not valid.\n\ntypedef ShouldShardTest ShouldShardDeathTest;\n\nTEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) {\n  SetEnv(index_var_, \"4\");\n  SetEnv(total_var_, \"4\");\n  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), \".*\");\n\n  SetEnv(index_var_, \"4\");\n  SetEnv(total_var_, \"-2\");\n  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), \".*\");\n\n  SetEnv(index_var_, \"5\");\n  SetEnv(total_var_, \"\");\n  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), \".*\");\n\n  SetEnv(index_var_, \"\");\n  SetEnv(total_var_, \"5\");\n  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), \".*\");\n}\n\n// Tests that ShouldRunTestOnShard is a partition when 5\n// shards are used.\nTEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) {\n  // Choose an arbitrary number of tests and shards.\n  const int num_tests = 17;\n  const int num_shards = 5;\n\n  // Check partitioning: each test should be on exactly 1 shard.\n  for (int test_id = 0; test_id < num_tests; test_id++) {\n    int prev_selected_shard_index = -1;\n    for (int shard_index = 0; shard_index < num_shards; shard_index++) {\n      if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) {\n        if (prev_selected_shard_index < 0) {\n          prev_selected_shard_index = shard_index;\n        } else {\n          ADD_FAILURE() << \"Shard \" << prev_selected_shard_index << \" and \"\n            << shard_index << \" are both selected to run test \" << test_id;\n        }\n      }\n    }\n  }\n\n  // Check balance: This is not required by the sharding protocol, but is a\n  // desirable property for performance.\n  for (int shard_index = 0; shard_index < num_shards; shard_index++) {\n    int num_tests_on_shard = 0;\n    for (int test_id = 0; test_id < num_tests; test_id++) {\n      num_tests_on_shard +=\n        ShouldRunTestOnShard(num_shards, shard_index, test_id);\n    }\n    EXPECT_GE(num_tests_on_shard, num_tests / num_shards);\n  }\n}\n\n// For the same reason we are not explicitly testing everything in the\n// Test class, there are no separate tests for the following classes\n// (except for some trivial cases):\n//\n//   TestCase, UnitTest, UnitTestResultPrinter.\n//\n// Similarly, there are no separate tests for the following macros:\n//\n//   TEST, TEST_F, RUN_ALL_TESTS\n\nTEST(UnitTestTest, CanGetOriginalWorkingDir) {\n  ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL);\n  EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), \"\");\n}\n\nTEST(UnitTestTest, ReturnsPlausibleTimestamp) {\n  EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp());\n  EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis());\n}\n\n// When a property using a reserved key is supplied to this function, it\n// tests that a non-fatal failure is added, a fatal failure is not added,\n// and that the property is not recorded.\nvoid ExpectNonFatalFailureRecordingPropertyWithReservedKey(\n    const TestResult& test_result, const char* key) {\n  EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, \"1\"), \"Reserved key\");\n  ASSERT_EQ(0, test_result.test_property_count()) << \"Property for key '\" << key\n                                                  << \"' recorded unexpectedly.\";\n}\n\nvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n    const char* key) {\n  const TestInfo* test_info = UnitTest::GetInstance()->current_test_info();\n  ASSERT_TRUE(test_info != NULL);\n  ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(),\n                                                        key);\n}\n\nvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n    const char* key) {\n  const TestCase* test_case = UnitTest::GetInstance()->current_test_case();\n  ASSERT_TRUE(test_case != NULL);\n  ExpectNonFatalFailureRecordingPropertyWithReservedKey(\n      test_case->ad_hoc_test_result(), key);\n}\n\nvoid ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n    const char* key) {\n  ExpectNonFatalFailureRecordingPropertyWithReservedKey(\n      UnitTest::GetInstance()->ad_hoc_test_result(), key);\n}\n\n// Tests that property recording functions in UnitTest outside of tests\n// functions correcly.  Creating a separate instance of UnitTest ensures it\n// is in a state similar to the UnitTest's singleton's between tests.\nclass UnitTestRecordPropertyTest :\n    public testing::internal::UnitTestRecordPropertyTestHelper {\n public:\n  static void SetUpTestCase() {\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"disabled\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"errors\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"failures\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"name\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"tests\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(\n        \"time\");\n\n    Test::RecordProperty(\"test_case_key_1\", \"1\");\n    const TestCase* test_case = UnitTest::GetInstance()->current_test_case();\n    ASSERT_TRUE(test_case != NULL);\n\n    ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count());\n    EXPECT_STREQ(\"test_case_key_1\",\n                 test_case->ad_hoc_test_result().GetTestProperty(0).key());\n    EXPECT_STREQ(\"1\",\n                 test_case->ad_hoc_test_result().GetTestProperty(0).value());\n  }\n};\n\n// Tests TestResult has the expected property when added.\nTEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) {\n  UnitTestRecordProperty(\"key_1\", \"1\");\n\n  ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count());\n\n  EXPECT_STREQ(\"key_1\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(0).key());\n  EXPECT_STREQ(\"1\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(0).value());\n}\n\n// Tests TestResult has multiple properties when added.\nTEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) {\n  UnitTestRecordProperty(\"key_1\", \"1\");\n  UnitTestRecordProperty(\"key_2\", \"2\");\n\n  ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count());\n\n  EXPECT_STREQ(\"key_1\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(0).key());\n  EXPECT_STREQ(\"1\", unit_test_.ad_hoc_test_result().GetTestProperty(0).value());\n\n  EXPECT_STREQ(\"key_2\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(1).key());\n  EXPECT_STREQ(\"2\", unit_test_.ad_hoc_test_result().GetTestProperty(1).value());\n}\n\n// Tests TestResult::RecordProperty() overrides values for duplicate keys.\nTEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) {\n  UnitTestRecordProperty(\"key_1\", \"1\");\n  UnitTestRecordProperty(\"key_2\", \"2\");\n  UnitTestRecordProperty(\"key_1\", \"12\");\n  UnitTestRecordProperty(\"key_2\", \"22\");\n\n  ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count());\n\n  EXPECT_STREQ(\"key_1\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(0).key());\n  EXPECT_STREQ(\"12\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(0).value());\n\n  EXPECT_STREQ(\"key_2\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(1).key());\n  EXPECT_STREQ(\"22\",\n               unit_test_.ad_hoc_test_result().GetTestProperty(1).value());\n}\n\nTEST_F(UnitTestRecordPropertyTest,\n       AddFailureInsideTestsWhenUsingTestCaseReservedKeys) {\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"name\");\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"value_param\");\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"type_param\");\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"status\");\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"time\");\n  ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(\n      \"classname\");\n}\n\nTEST_F(UnitTestRecordPropertyTest,\n       AddRecordWithReservedKeysGeneratesCorrectPropertyList) {\n  EXPECT_NONFATAL_FAILURE(\n      Test::RecordProperty(\"name\", \"1\"),\n      \"'classname', 'name', 'status', 'time', 'type_param', and 'value_param'\"\n      \" are reserved\");\n}\n\nclass UnitTestRecordPropertyTestEnvironment : public Environment {\n public:\n  virtual void TearDown() {\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"tests\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"failures\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"disabled\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"errors\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"name\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"timestamp\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"time\");\n    ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(\n        \"random_seed\");\n  }\n};\n\n// This will test property recording outside of any test or test case.\nstatic Environment* record_property_env =\n    AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment);\n\n// This group of tests is for predicate assertions (ASSERT_PRED*, etc)\n// of various arities.  They do not attempt to be exhaustive.  Rather,\n// view them as smoke tests that can be easily reviewed and verified.\n// A more complete set of tests for predicate assertions can be found\n// in gtest_pred_impl_unittest.cc.\n\n// First, some predicates and predicate-formatters needed by the tests.\n\n// Returns true iff the argument is an even number.\nbool IsEven(int n) {\n  return (n % 2) == 0;\n}\n\n// A functor that returns true iff the argument is an even number.\nstruct IsEvenFunctor {\n  bool operator()(int n) { return IsEven(n); }\n};\n\n// A predicate-formatter function that asserts the argument is an even\n// number.\nAssertionResult AssertIsEven(const char* expr, int n) {\n  if (IsEven(n)) {\n    return AssertionSuccess();\n  }\n\n  Message msg;\n  msg << expr << \" evaluates to \" << n << \", which is not even.\";\n  return AssertionFailure(msg);\n}\n\n// A predicate function that returns AssertionResult for use in\n// EXPECT/ASSERT_TRUE/FALSE.\nAssertionResult ResultIsEven(int n) {\n  if (IsEven(n))\n    return AssertionSuccess() << n << \" is even\";\n  else\n    return AssertionFailure() << n << \" is odd\";\n}\n\n// A predicate function that returns AssertionResult but gives no\n// explanation why it succeeds. Needed for testing that\n// EXPECT/ASSERT_FALSE handles such functions correctly.\nAssertionResult ResultIsEvenNoExplanation(int n) {\n  if (IsEven(n))\n    return AssertionSuccess();\n  else\n    return AssertionFailure() << n << \" is odd\";\n}\n\n// A predicate-formatter functor that asserts the argument is an even\n// number.\nstruct AssertIsEvenFunctor {\n  AssertionResult operator()(const char* expr, int n) {\n    return AssertIsEven(expr, n);\n  }\n};\n\n// Returns true iff the sum of the arguments is an even number.\nbool SumIsEven2(int n1, int n2) {\n  return IsEven(n1 + n2);\n}\n\n// A functor that returns true iff the sum of the arguments is an even\n// number.\nstruct SumIsEven3Functor {\n  bool operator()(int n1, int n2, int n3) {\n    return IsEven(n1 + n2 + n3);\n  }\n};\n\n// A predicate-formatter function that asserts the sum of the\n// arguments is an even number.\nAssertionResult AssertSumIsEven4(\n    const char* e1, const char* e2, const char* e3, const char* e4,\n    int n1, int n2, int n3, int n4) {\n  const int sum = n1 + n2 + n3 + n4;\n  if (IsEven(sum)) {\n    return AssertionSuccess();\n  }\n\n  Message msg;\n  msg << e1 << \" + \" << e2 << \" + \" << e3 << \" + \" << e4\n      << \" (\" << n1 << \" + \" << n2 << \" + \" << n3 << \" + \" << n4\n      << \") evaluates to \" << sum << \", which is not even.\";\n  return AssertionFailure(msg);\n}\n\n// A predicate-formatter functor that asserts the sum of the arguments\n// is an even number.\nstruct AssertSumIsEven5Functor {\n  AssertionResult operator()(\n      const char* e1, const char* e2, const char* e3, const char* e4,\n      const char* e5, int n1, int n2, int n3, int n4, int n5) {\n    const int sum = n1 + n2 + n3 + n4 + n5;\n    if (IsEven(sum)) {\n      return AssertionSuccess();\n    }\n\n    Message msg;\n    msg << e1 << \" + \" << e2 << \" + \" << e3 << \" + \" << e4 << \" + \" << e5\n        << \" (\"\n        << n1 << \" + \" << n2 << \" + \" << n3 << \" + \" << n4 << \" + \" << n5\n        << \") evaluates to \" << sum << \", which is not even.\";\n    return AssertionFailure(msg);\n  }\n};\n\n\n// Tests unary predicate assertions.\n\n// Tests unary predicate assertions that don't use a custom formatter.\nTEST(Pred1Test, WithoutFormat) {\n  // Success cases.\n  EXPECT_PRED1(IsEvenFunctor(), 2) << \"This failure is UNEXPECTED!\";\n  ASSERT_PRED1(IsEven, 4);\n\n  // Failure cases.\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED1(IsEven, 5) << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n  EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5),\n                       \"evaluates to false\");\n}\n\n// Tests unary predicate assertions that use a custom formatter.\nTEST(Pred1Test, WithFormat) {\n  // Success cases.\n  EXPECT_PRED_FORMAT1(AssertIsEven, 2);\n  ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4)\n    << \"This failure is UNEXPECTED!\";\n\n  // Failure cases.\n  const int n = 5;\n  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n),\n                          \"n evaluates to 5, which is not even.\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(AssertIsEven, 5) << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n}\n\n// Tests that unary predicate assertions evaluates their arguments\n// exactly once.\nTEST(Pred1Test, SingleEvaluationOnFailure) {\n  // A success case.\n  static int n = 0;\n  EXPECT_PRED1(IsEven, n++);\n  EXPECT_EQ(1, n) << \"The argument is not evaluated exactly once.\";\n\n  // A failure case.\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++)\n        << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n  EXPECT_EQ(2, n) << \"The argument is not evaluated exactly once.\";\n}\n\n\n// Tests predicate assertions whose arity is >= 2.\n\n// Tests predicate assertions that don't use a custom formatter.\nTEST(PredTest, WithoutFormat) {\n  // Success cases.\n  ASSERT_PRED2(SumIsEven2, 2, 4) << \"This failure is UNEXPECTED!\";\n  EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8);\n\n  // Failure cases.\n  const int n1 = 1;\n  const int n2 = 2;\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED2(SumIsEven2, n1, n2) << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4);\n  }, \"evaluates to false\");\n}\n\n// Tests predicate assertions that use a custom formatter.\nTEST(PredTest, WithFormat) {\n  // Success cases.\n  ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) <<\n    \"This failure is UNEXPECTED!\";\n  EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10);\n\n  // Failure cases.\n  const int n1 = 1;\n  const int n2 = 2;\n  const int n3 = 4;\n  const int n4 = 6;\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4);\n  }, \"evaluates to 13, which is not even.\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8)\n        << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n}\n\n// Tests that predicate assertions evaluates their arguments\n// exactly once.\nTEST(PredTest, SingleEvaluationOnFailure) {\n  // A success case.\n  int n1 = 0;\n  int n2 = 0;\n  EXPECT_PRED2(SumIsEven2, n1++, n2++);\n  EXPECT_EQ(1, n1) << \"Argument 1 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n2) << \"Argument 2 is not evaluated exactly once.\";\n\n  // Another success case.\n  n1 = n2 = 0;\n  int n3 = 0;\n  int n4 = 0;\n  int n5 = 0;\n  ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(),\n                      n1++, n2++, n3++, n4++, n5++)\n                        << \"This failure is UNEXPECTED!\";\n  EXPECT_EQ(1, n1) << \"Argument 1 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n2) << \"Argument 2 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n3) << \"Argument 3 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n4) << \"Argument 4 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n5) << \"Argument 5 is not evaluated exactly once.\";\n\n  // A failure case.\n  n1 = n2 = n3 = 0;\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++)\n        << \"This failure is expected.\";\n  }, \"This failure is expected.\");\n  EXPECT_EQ(1, n1) << \"Argument 1 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n2) << \"Argument 2 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n3) << \"Argument 3 is not evaluated exactly once.\";\n\n  // Another failure case.\n  n1 = n2 = n3 = n4 = 0;\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++);\n  }, \"evaluates to 1, which is not even.\");\n  EXPECT_EQ(1, n1) << \"Argument 1 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n2) << \"Argument 2 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n3) << \"Argument 3 is not evaluated exactly once.\";\n  EXPECT_EQ(1, n4) << \"Argument 4 is not evaluated exactly once.\";\n}\n\n\n// Some helper functions for testing using overloaded/template\n// functions with ASSERT_PREDn and EXPECT_PREDn.\n\nbool IsPositive(double x) {\n  return x > 0;\n}\n\ntemplate <typename T>\nbool IsNegative(T x) {\n  return x < 0;\n}\n\ntemplate <typename T1, typename T2>\nbool GreaterThan(T1 x1, T2 x2) {\n  return x1 > x2;\n}\n\n// Tests that overloaded functions can be used in *_PRED* as long as\n// their types are explicitly specified.\nTEST(PredicateAssertionTest, AcceptsOverloadedFunction) {\n  // C++Builder requires C-style casts rather than static_cast.\n  EXPECT_PRED1((bool (*)(int))(IsPositive), 5);  // NOLINT\n  ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0);  // NOLINT\n}\n\n// Tests that template functions can be used in *_PRED* as long as\n// their types are explicitly specified.\nTEST(PredicateAssertionTest, AcceptsTemplateFunction) {\n  EXPECT_PRED1(IsNegative<int>, -5);\n  // Makes sure that we can handle templates with more than one\n  // parameter.\n  ASSERT_PRED2((GreaterThan<int, int>), 5, 0);\n}\n\n\n// Some helper functions for testing using overloaded/template\n// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn.\n\nAssertionResult IsPositiveFormat(const char* /* expr */, int n) {\n  return n > 0 ? AssertionSuccess() :\n      AssertionFailure(Message() << \"Failure\");\n}\n\nAssertionResult IsPositiveFormat(const char* /* expr */, double x) {\n  return x > 0 ? AssertionSuccess() :\n      AssertionFailure(Message() << \"Failure\");\n}\n\ntemplate <typename T>\nAssertionResult IsNegativeFormat(const char* /* expr */, T x) {\n  return x < 0 ? AssertionSuccess() :\n      AssertionFailure(Message() << \"Failure\");\n}\n\ntemplate <typename T1, typename T2>\nAssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */,\n                             const T1& x1, const T2& x2) {\n  return x1 == x2 ? AssertionSuccess() :\n      AssertionFailure(Message() << \"Failure\");\n}\n\n// Tests that overloaded functions can be used in *_PRED_FORMAT*\n// without explicitly specifying their types.\nTEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) {\n  EXPECT_PRED_FORMAT1(IsPositiveFormat, 5);\n  ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0);\n}\n\n// Tests that template functions can be used in *_PRED_FORMAT* without\n// explicitly specifying their types.\nTEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) {\n  EXPECT_PRED_FORMAT1(IsNegativeFormat, -5);\n  ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3);\n}\n\n\n// Tests string assertions.\n\n// Tests ASSERT_STREQ with non-NULL arguments.\nTEST(StringAssertionTest, ASSERT_STREQ) {\n  const char * const p1 = \"good\";\n  ASSERT_STREQ(p1, p1);\n\n  // Let p2 have the same content as p1, but be at a different address.\n  const char p2[] = \"good\";\n  ASSERT_STREQ(p1, p2);\n\n  EXPECT_FATAL_FAILURE(ASSERT_STREQ(\"bad\", \"good\"),\n                       \"Expected: \\\"bad\\\"\");\n}\n\n// Tests ASSERT_STREQ with NULL arguments.\nTEST(StringAssertionTest, ASSERT_STREQ_Null) {\n  ASSERT_STREQ(static_cast<const char *>(NULL), NULL);\n  EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, \"non-null\"),\n                       \"non-null\");\n}\n\n// Tests ASSERT_STREQ with NULL arguments.\nTEST(StringAssertionTest, ASSERT_STREQ_Null2) {\n  EXPECT_FATAL_FAILURE(ASSERT_STREQ(\"non-null\", NULL),\n                       \"non-null\");\n}\n\n// Tests ASSERT_STRNE.\nTEST(StringAssertionTest, ASSERT_STRNE) {\n  ASSERT_STRNE(\"hi\", \"Hi\");\n  ASSERT_STRNE(\"Hi\", NULL);\n  ASSERT_STRNE(NULL, \"Hi\");\n  ASSERT_STRNE(\"\", NULL);\n  ASSERT_STRNE(NULL, \"\");\n  ASSERT_STRNE(\"\", \"Hi\");\n  ASSERT_STRNE(\"Hi\", \"\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRNE(\"Hi\", \"Hi\"),\n                       \"\\\"Hi\\\" vs \\\"Hi\\\"\");\n}\n\n// Tests ASSERT_STRCASEEQ.\nTEST(StringAssertionTest, ASSERT_STRCASEEQ) {\n  ASSERT_STRCASEEQ(\"hi\", \"Hi\");\n  ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL);\n\n  ASSERT_STRCASEEQ(\"\", \"\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ(\"Hi\", \"hi2\"),\n                       \"(ignoring case)\");\n}\n\n// Tests ASSERT_STRCASENE.\nTEST(StringAssertionTest, ASSERT_STRCASENE) {\n  ASSERT_STRCASENE(\"hi1\", \"Hi2\");\n  ASSERT_STRCASENE(\"Hi\", NULL);\n  ASSERT_STRCASENE(NULL, \"Hi\");\n  ASSERT_STRCASENE(\"\", NULL);\n  ASSERT_STRCASENE(NULL, \"\");\n  ASSERT_STRCASENE(\"\", \"Hi\");\n  ASSERT_STRCASENE(\"Hi\", \"\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRCASENE(\"Hi\", \"hi\"),\n                       \"(ignoring case)\");\n}\n\n// Tests *_STREQ on wide strings.\nTEST(StringAssertionTest, STREQ_Wide) {\n  // NULL strings.\n  ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL);\n\n  // Empty strings.\n  ASSERT_STREQ(L\"\", L\"\");\n\n  // Non-null vs NULL.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L\"non-null\", NULL),\n                          \"non-null\");\n\n  // Equal strings.\n  EXPECT_STREQ(L\"Hi\", L\"Hi\");\n\n  // Unequal strings.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L\"abc\", L\"Abc\"),\n                          \"Abc\");\n\n  // Strings containing wide characters.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L\"abc\\x8119\", L\"abc\\x8120\"),\n                          \"abc\");\n\n  // The streaming variation.\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_STREQ(L\"abc\\x8119\", L\"abc\\x8121\") << \"Expected failure\";\n  }, \"Expected failure\");\n}\n\n// Tests *_STRNE on wide strings.\nTEST(StringAssertionTest, STRNE_Wide) {\n  // NULL strings.\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL);\n  }, \"\");\n\n  // Empty strings.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L\"\", L\"\"),\n                          \"L\\\"\\\"\");\n\n  // Non-null vs NULL.\n  ASSERT_STRNE(L\"non-null\", NULL);\n\n  // Equal strings.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L\"Hi\", L\"Hi\"),\n                          \"L\\\"Hi\\\"\");\n\n  // Unequal strings.\n  EXPECT_STRNE(L\"abc\", L\"Abc\");\n\n  // Strings containing wide characters.\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L\"abc\\x8119\", L\"abc\\x8119\"),\n                          \"abc\");\n\n  // The streaming variation.\n  ASSERT_STRNE(L\"abc\\x8119\", L\"abc\\x8120\") << \"This shouldn't happen\";\n}\n\n// Tests for ::testing::IsSubstring().\n\n// Tests that IsSubstring() returns the correct result when the input\n// argument type is const char*.\nTEST(IsSubstringTest, ReturnsCorrectResultForCString) {\n  EXPECT_FALSE(IsSubstring(\"\", \"\", NULL, \"a\"));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", \"b\", NULL));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", \"needle\", \"haystack\"));\n\n  EXPECT_TRUE(IsSubstring(\"\", \"\", static_cast<const char*>(NULL), NULL));\n  EXPECT_TRUE(IsSubstring(\"\", \"\", \"needle\", \"two needles\"));\n}\n\n// Tests that IsSubstring() returns the correct result when the input\n// argument type is const wchar_t*.\nTEST(IsSubstringTest, ReturnsCorrectResultForWideCString) {\n  EXPECT_FALSE(IsSubstring(\"\", \"\", kNull, L\"a\"));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", L\"b\", kNull));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", L\"needle\", L\"haystack\"));\n\n  EXPECT_TRUE(IsSubstring(\"\", \"\", static_cast<const wchar_t*>(NULL), NULL));\n  EXPECT_TRUE(IsSubstring(\"\", \"\", L\"needle\", L\"two needles\"));\n}\n\n// Tests that IsSubstring() generates the correct message when the input\n// argument type is const char*.\nTEST(IsSubstringTest, GeneratesCorrectMessageForCString) {\n  EXPECT_STREQ(\"Value of: needle_expr\\n\"\n               \"  Actual: \\\"needle\\\"\\n\"\n               \"Expected: a substring of haystack_expr\\n\"\n               \"Which is: \\\"haystack\\\"\",\n               IsSubstring(\"needle_expr\", \"haystack_expr\",\n                           \"needle\", \"haystack\").failure_message());\n}\n\n// Tests that IsSubstring returns the correct result when the input\n// argument type is ::std::string.\nTEST(IsSubstringTest, ReturnsCorrectResultsForStdString) {\n  EXPECT_TRUE(IsSubstring(\"\", \"\", std::string(\"hello\"), \"ahellob\"));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", \"hello\", std::string(\"world\")));\n}\n\n#if GTEST_HAS_STD_WSTRING\n// Tests that IsSubstring returns the correct result when the input\n// argument type is ::std::wstring.\nTEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) {\n  EXPECT_TRUE(IsSubstring(\"\", \"\", ::std::wstring(L\"needle\"), L\"two needles\"));\n  EXPECT_FALSE(IsSubstring(\"\", \"\", L\"needle\", ::std::wstring(L\"haystack\")));\n}\n\n// Tests that IsSubstring() generates the correct message when the input\n// argument type is ::std::wstring.\nTEST(IsSubstringTest, GeneratesCorrectMessageForWstring) {\n  EXPECT_STREQ(\"Value of: needle_expr\\n\"\n               \"  Actual: L\\\"needle\\\"\\n\"\n               \"Expected: a substring of haystack_expr\\n\"\n               \"Which is: L\\\"haystack\\\"\",\n               IsSubstring(\n                   \"needle_expr\", \"haystack_expr\",\n                   ::std::wstring(L\"needle\"), L\"haystack\").failure_message());\n}\n\n#endif  // GTEST_HAS_STD_WSTRING\n\n// Tests for ::testing::IsNotSubstring().\n\n// Tests that IsNotSubstring() returns the correct result when the input\n// argument type is const char*.\nTEST(IsNotSubstringTest, ReturnsCorrectResultForCString) {\n  EXPECT_TRUE(IsNotSubstring(\"\", \"\", \"needle\", \"haystack\"));\n  EXPECT_FALSE(IsNotSubstring(\"\", \"\", \"needle\", \"two needles\"));\n}\n\n// Tests that IsNotSubstring() returns the correct result when the input\n// argument type is const wchar_t*.\nTEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) {\n  EXPECT_TRUE(IsNotSubstring(\"\", \"\", L\"needle\", L\"haystack\"));\n  EXPECT_FALSE(IsNotSubstring(\"\", \"\", L\"needle\", L\"two needles\"));\n}\n\n// Tests that IsNotSubstring() generates the correct message when the input\n// argument type is const wchar_t*.\nTEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) {\n  EXPECT_STREQ(\"Value of: needle_expr\\n\"\n               \"  Actual: L\\\"needle\\\"\\n\"\n               \"Expected: not a substring of haystack_expr\\n\"\n               \"Which is: L\\\"two needles\\\"\",\n               IsNotSubstring(\n                   \"needle_expr\", \"haystack_expr\",\n                   L\"needle\", L\"two needles\").failure_message());\n}\n\n// Tests that IsNotSubstring returns the correct result when the input\n// argument type is ::std::string.\nTEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) {\n  EXPECT_FALSE(IsNotSubstring(\"\", \"\", std::string(\"hello\"), \"ahellob\"));\n  EXPECT_TRUE(IsNotSubstring(\"\", \"\", \"hello\", std::string(\"world\")));\n}\n\n// Tests that IsNotSubstring() generates the correct message when the input\n// argument type is ::std::string.\nTEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) {\n  EXPECT_STREQ(\"Value of: needle_expr\\n\"\n               \"  Actual: \\\"needle\\\"\\n\"\n               \"Expected: not a substring of haystack_expr\\n\"\n               \"Which is: \\\"two needles\\\"\",\n               IsNotSubstring(\n                   \"needle_expr\", \"haystack_expr\",\n                   ::std::string(\"needle\"), \"two needles\").failure_message());\n}\n\n#if GTEST_HAS_STD_WSTRING\n\n// Tests that IsNotSubstring returns the correct result when the input\n// argument type is ::std::wstring.\nTEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) {\n  EXPECT_FALSE(\n      IsNotSubstring(\"\", \"\", ::std::wstring(L\"needle\"), L\"two needles\"));\n  EXPECT_TRUE(IsNotSubstring(\"\", \"\", L\"needle\", ::std::wstring(L\"haystack\")));\n}\n\n#endif  // GTEST_HAS_STD_WSTRING\n\n// Tests floating-point assertions.\n\ntemplate <typename RawType>\nclass FloatingPointTest : public Test {\n protected:\n  // Pre-calculated numbers to be used by the tests.\n  struct TestValues {\n    RawType close_to_positive_zero;\n    RawType close_to_negative_zero;\n    RawType further_from_negative_zero;\n\n    RawType close_to_one;\n    RawType further_from_one;\n\n    RawType infinity;\n    RawType close_to_infinity;\n    RawType further_from_infinity;\n\n    RawType nan1;\n    RawType nan2;\n  };\n\n  typedef typename testing::internal::FloatingPoint<RawType> Floating;\n  typedef typename Floating::Bits Bits;\n\n  virtual void SetUp() {\n    const size_t max_ulps = Floating::kMaxUlps;\n\n    // The bits that represent 0.0.\n    const Bits zero_bits = Floating(0).bits();\n\n    // Makes some numbers close to 0.0.\n    values_.close_to_positive_zero = Floating::ReinterpretBits(\n        zero_bits + max_ulps/2);\n    values_.close_to_negative_zero = -Floating::ReinterpretBits(\n        zero_bits + max_ulps - max_ulps/2);\n    values_.further_from_negative_zero = -Floating::ReinterpretBits(\n        zero_bits + max_ulps + 1 - max_ulps/2);\n\n    // The bits that represent 1.0.\n    const Bits one_bits = Floating(1).bits();\n\n    // Makes some numbers close to 1.0.\n    values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps);\n    values_.further_from_one = Floating::ReinterpretBits(\n        one_bits + max_ulps + 1);\n\n    // +infinity.\n    values_.infinity = Floating::Infinity();\n\n    // The bits that represent +infinity.\n    const Bits infinity_bits = Floating(values_.infinity).bits();\n\n    // Makes some numbers close to infinity.\n    values_.close_to_infinity = Floating::ReinterpretBits(\n        infinity_bits - max_ulps);\n    values_.further_from_infinity = Floating::ReinterpretBits(\n        infinity_bits - max_ulps - 1);\n\n    // Makes some NAN's.  Sets the most significant bit of the fraction so that\n    // our NaN's are quiet; trying to process a signaling NaN would raise an\n    // exception if our environment enables floating point exceptions.\n    values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask\n        | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1);\n    values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask\n        | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200);\n  }\n\n  void TestSize() {\n    EXPECT_EQ(sizeof(RawType), sizeof(Bits));\n  }\n\n  static TestValues values_;\n};\n\ntemplate <typename RawType>\ntypename FloatingPointTest<RawType>::TestValues\n    FloatingPointTest<RawType>::values_;\n\n// Instantiates FloatingPointTest for testing *_FLOAT_EQ.\ntypedef FloatingPointTest<float> FloatTest;\n\n// Tests that the size of Float::Bits matches the size of float.\nTEST_F(FloatTest, Size) {\n  TestSize();\n}\n\n// Tests comparing with +0 and -0.\nTEST_F(FloatTest, Zeros) {\n  EXPECT_FLOAT_EQ(0.0, -0.0);\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0),\n                          \"1.0\");\n  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5),\n                       \"1.5\");\n}\n\n// Tests comparing numbers close to 0.\n//\n// This ensures that *_FLOAT_EQ handles the sign correctly and no\n// overflow occurs when comparing numbers whose absolute value is very\n// small.\nTEST_F(FloatTest, AlmostZeros) {\n  // In C++Builder, names within local classes (such as used by\n  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the\n  // scoping class.  Use a static local alias as a workaround.\n  // We use the assignment syntax since some compilers, like Sun Studio,\n  // don't allow initializing references using construction syntax\n  // (parentheses).\n  static const FloatTest::TestValues& v = this->values_;\n\n  EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero);\n  EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero);\n  EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero);\n\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_FLOAT_EQ(v.close_to_positive_zero,\n                    v.further_from_negative_zero);\n  }, \"v.further_from_negative_zero\");\n}\n\n// Tests comparing numbers close to each other.\nTEST_F(FloatTest, SmallDiff) {\n  EXPECT_FLOAT_EQ(1.0, values_.close_to_one);\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one),\n                          \"values_.further_from_one\");\n}\n\n// Tests comparing numbers far apart.\nTEST_F(FloatTest, LargeDiff) {\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0),\n                          \"3.0\");\n}\n\n// Tests comparing with infinity.\n//\n// This ensures that no overflow occurs when comparing numbers whose\n// absolute value is very large.\nTEST_F(FloatTest, Infinity) {\n  EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity);\n  EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity);\n#if !GTEST_OS_SYMBIAN\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity),\n                          \"-values_.infinity\");\n\n  // This is interesting as the representations of infinity and nan1\n  // are only 1 DLP apart.\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1),\n                          \"values_.nan1\");\n#endif  // !GTEST_OS_SYMBIAN\n}\n\n// Tests that comparing with NAN always returns false.\nTEST_F(FloatTest, NaN) {\n#if !GTEST_OS_SYMBIAN\n// Nokia's STLport crashes if we try to output infinity or NaN.\n\n  // In C++Builder, names within local classes (such as used by\n  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the\n  // scoping class.  Use a static local alias as a workaround.\n  // We use the assignment syntax since some compilers, like Sun Studio,\n  // don't allow initializing references using construction syntax\n  // (parentheses).\n  static const FloatTest::TestValues& v = this->values_;\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1),\n                          \"v.nan1\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2),\n                          \"v.nan2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1),\n                          \"v.nan1\");\n\n  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity),\n                       \"v.infinity\");\n#endif  // !GTEST_OS_SYMBIAN\n}\n\n// Tests that *_FLOAT_EQ are reflexive.\nTEST_F(FloatTest, Reflexive) {\n  EXPECT_FLOAT_EQ(0.0, 0.0);\n  EXPECT_FLOAT_EQ(1.0, 1.0);\n  ASSERT_FLOAT_EQ(values_.infinity, values_.infinity);\n}\n\n// Tests that *_FLOAT_EQ are commutative.\nTEST_F(FloatTest, Commutative) {\n  // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one).\n  EXPECT_FLOAT_EQ(values_.close_to_one, 1.0);\n\n  // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one).\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0),\n                          \"1.0\");\n}\n\n// Tests EXPECT_NEAR.\nTEST_F(FloatTest, EXPECT_NEAR) {\n  EXPECT_NEAR(-1.0f, -1.1f, 0.2f);\n  EXPECT_NEAR(2.0f, 3.0f, 1.0f);\n  EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT\n                          \"The difference between 1.0f and 1.5f is 0.5, \"\n                          \"which exceeds 0.25f\");\n  // To work around a bug in gcc 2.95.0, there is intentionally no\n  // space after the first comma in the previous line.\n}\n\n// Tests ASSERT_NEAR.\nTEST_F(FloatTest, ASSERT_NEAR) {\n  ASSERT_NEAR(-1.0f, -1.1f, 0.2f);\n  ASSERT_NEAR(2.0f, 3.0f, 1.0f);\n  EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT\n                       \"The difference between 1.0f and 1.5f is 0.5, \"\n                       \"which exceeds 0.25f\");\n  // To work around a bug in gcc 2.95.0, there is intentionally no\n  // space after the first comma in the previous line.\n}\n\n// Tests the cases where FloatLE() should succeed.\nTEST_F(FloatTest, FloatLESucceeds) {\n  EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f);  // When val1 < val2,\n  ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f);  // val1 == val2,\n\n  // or when val1 is greater than, but almost equals to, val2.\n  EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f);\n}\n\n// Tests the cases where FloatLE() should fail.\nTEST_F(FloatTest, FloatLEFails) {\n  // When val1 is greater than val2 by a large margin,\n  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f),\n                          \"(2.0f) <= (1.0f)\");\n\n  // or by a small yet non-negligible margin,\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f);\n  }, \"(values_.further_from_one) <= (1.0f)\");\n\n#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  // C++Builder gives bad results for ordered comparisons involving NaNs\n  // due to compiler bugs.\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity);\n  }, \"(values_.nan1) <= (values_.infinity)\");\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1);\n  }, \"(-values_.infinity) <= (values_.nan1)\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1);\n  }, \"(values_.nan1) <= (values_.nan1)\");\n#endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)\n}\n\n// Instantiates FloatingPointTest for testing *_DOUBLE_EQ.\ntypedef FloatingPointTest<double> DoubleTest;\n\n// Tests that the size of Double::Bits matches the size of double.\nTEST_F(DoubleTest, Size) {\n  TestSize();\n}\n\n// Tests comparing with +0 and -0.\nTEST_F(DoubleTest, Zeros) {\n  EXPECT_DOUBLE_EQ(0.0, -0.0);\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0),\n                          \"1.0\");\n  EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0),\n                       \"1.0\");\n}\n\n// Tests comparing numbers close to 0.\n//\n// This ensures that *_DOUBLE_EQ handles the sign correctly and no\n// overflow occurs when comparing numbers whose absolute value is very\n// small.\nTEST_F(DoubleTest, AlmostZeros) {\n  // In C++Builder, names within local classes (such as used by\n  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the\n  // scoping class.  Use a static local alias as a workaround.\n  // We use the assignment syntax since some compilers, like Sun Studio,\n  // don't allow initializing references using construction syntax\n  // (parentheses).\n  static const DoubleTest::TestValues& v = this->values_;\n\n  EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero);\n  EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero);\n  EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero);\n\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_DOUBLE_EQ(v.close_to_positive_zero,\n                     v.further_from_negative_zero);\n  }, \"v.further_from_negative_zero\");\n}\n\n// Tests comparing numbers close to each other.\nTEST_F(DoubleTest, SmallDiff) {\n  EXPECT_DOUBLE_EQ(1.0, values_.close_to_one);\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one),\n                          \"values_.further_from_one\");\n}\n\n// Tests comparing numbers far apart.\nTEST_F(DoubleTest, LargeDiff) {\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0),\n                          \"3.0\");\n}\n\n// Tests comparing with infinity.\n//\n// This ensures that no overflow occurs when comparing numbers whose\n// absolute value is very large.\nTEST_F(DoubleTest, Infinity) {\n  EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity);\n  EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity);\n#if !GTEST_OS_SYMBIAN\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity),\n                          \"-values_.infinity\");\n\n  // This is interesting as the representations of infinity_ and nan1_\n  // are only 1 DLP apart.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1),\n                          \"values_.nan1\");\n#endif  // !GTEST_OS_SYMBIAN\n}\n\n// Tests that comparing with NAN always returns false.\nTEST_F(DoubleTest, NaN) {\n#if !GTEST_OS_SYMBIAN\n  // In C++Builder, names within local classes (such as used by\n  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the\n  // scoping class.  Use a static local alias as a workaround.\n  // We use the assignment syntax since some compilers, like Sun Studio,\n  // don't allow initializing references using construction syntax\n  // (parentheses).\n  static const DoubleTest::TestValues& v = this->values_;\n\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1),\n                          \"v.nan1\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), \"v.nan2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), \"v.nan1\");\n  EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity),\n                       \"v.infinity\");\n#endif  // !GTEST_OS_SYMBIAN\n}\n\n// Tests that *_DOUBLE_EQ are reflexive.\nTEST_F(DoubleTest, Reflexive) {\n  EXPECT_DOUBLE_EQ(0.0, 0.0);\n  EXPECT_DOUBLE_EQ(1.0, 1.0);\n#if !GTEST_OS_SYMBIAN\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity);\n#endif  // !GTEST_OS_SYMBIAN\n}\n\n// Tests that *_DOUBLE_EQ are commutative.\nTEST_F(DoubleTest, Commutative) {\n  // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one).\n  EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0);\n\n  // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one).\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0),\n                          \"1.0\");\n}\n\n// Tests EXPECT_NEAR.\nTEST_F(DoubleTest, EXPECT_NEAR) {\n  EXPECT_NEAR(-1.0, -1.1, 0.2);\n  EXPECT_NEAR(2.0, 3.0, 1.0);\n  EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25),  // NOLINT\n                          \"The difference between 1.0 and 1.5 is 0.5, \"\n                          \"which exceeds 0.25\");\n  // To work around a bug in gcc 2.95.0, there is intentionally no\n  // space after the first comma in the previous statement.\n}\n\n// Tests ASSERT_NEAR.\nTEST_F(DoubleTest, ASSERT_NEAR) {\n  ASSERT_NEAR(-1.0, -1.1, 0.2);\n  ASSERT_NEAR(2.0, 3.0, 1.0);\n  EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25),  // NOLINT\n                       \"The difference between 1.0 and 1.5 is 0.5, \"\n                       \"which exceeds 0.25\");\n  // To work around a bug in gcc 2.95.0, there is intentionally no\n  // space after the first comma in the previous statement.\n}\n\n// Tests the cases where DoubleLE() should succeed.\nTEST_F(DoubleTest, DoubleLESucceeds) {\n  EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0);  // When val1 < val2,\n  ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0);  // val1 == val2,\n\n  // or when val1 is greater than, but almost equals to, val2.\n  EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0);\n}\n\n// Tests the cases where DoubleLE() should fail.\nTEST_F(DoubleTest, DoubleLEFails) {\n  // When val1 is greater than val2 by a large margin,\n  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0),\n                          \"(2.0) <= (1.0)\");\n\n  // or by a small yet non-negligible margin,\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0);\n  }, \"(values_.further_from_one) <= (1.0)\");\n\n#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)\n  // Nokia's STLport crashes if we try to output infinity or NaN.\n  // C++Builder gives bad results for ordered comparisons involving NaNs\n  // due to compiler bugs.\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity);\n  }, \"(values_.nan1) <= (values_.infinity)\");\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1);\n  }, \" (-values_.infinity) <= (values_.nan1)\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1);\n  }, \"(values_.nan1) <= (values_.nan1)\");\n#endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)\n}\n\n\n// Verifies that a test or test case whose name starts with DISABLED_ is\n// not run.\n\n// A test whose name starts with DISABLED_.\n// Should not run.\nTEST(DisabledTest, DISABLED_TestShouldNotRun) {\n  FAIL() << \"Unexpected failure: Disabled test should not be run.\";\n}\n\n// A test whose name does not start with DISABLED_.\n// Should run.\nTEST(DisabledTest, NotDISABLED_TestShouldRun) {\n  EXPECT_EQ(1, 1);\n}\n\n// A test case whose name starts with DISABLED_.\n// Should not run.\nTEST(DISABLED_TestCase, TestShouldNotRun) {\n  FAIL() << \"Unexpected failure: Test in disabled test case should not be run.\";\n}\n\n// A test case and test whose names start with DISABLED_.\n// Should not run.\nTEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) {\n  FAIL() << \"Unexpected failure: Test in disabled test case should not be run.\";\n}\n\n// Check that when all tests in a test case are disabled, SetupTestCase() and\n// TearDownTestCase() are not called.\nclass DisabledTestsTest : public Test {\n protected:\n  static void SetUpTestCase() {\n    FAIL() << \"Unexpected failure: All tests disabled in test case. \"\n              \"SetupTestCase() should not be called.\";\n  }\n\n  static void TearDownTestCase() {\n    FAIL() << \"Unexpected failure: All tests disabled in test case. \"\n              \"TearDownTestCase() should not be called.\";\n  }\n};\n\nTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) {\n  FAIL() << \"Unexpected failure: Disabled test should not be run.\";\n}\n\nTEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) {\n  FAIL() << \"Unexpected failure: Disabled test should not be run.\";\n}\n\n// Tests that disabled typed tests aren't run.\n\n#if GTEST_HAS_TYPED_TEST\n\ntemplate <typename T>\nclass TypedTest : public Test {\n};\n\ntypedef testing::Types<int, double> NumericTypes;\nTYPED_TEST_CASE(TypedTest, NumericTypes);\n\nTYPED_TEST(TypedTest, DISABLED_ShouldNotRun) {\n  FAIL() << \"Unexpected failure: Disabled typed test should not run.\";\n}\n\ntemplate <typename T>\nclass DISABLED_TypedTest : public Test {\n};\n\nTYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes);\n\nTYPED_TEST(DISABLED_TypedTest, ShouldNotRun) {\n  FAIL() << \"Unexpected failure: Disabled typed test should not run.\";\n}\n\n#endif  // GTEST_HAS_TYPED_TEST\n\n// Tests that disabled type-parameterized tests aren't run.\n\n#if GTEST_HAS_TYPED_TEST_P\n\ntemplate <typename T>\nclass TypedTestP : public Test {\n};\n\nTYPED_TEST_CASE_P(TypedTestP);\n\nTYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) {\n  FAIL() << \"Unexpected failure: \"\n         << \"Disabled type-parameterized test should not run.\";\n}\n\nREGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun);\n\nINSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes);\n\ntemplate <typename T>\nclass DISABLED_TypedTestP : public Test {\n};\n\nTYPED_TEST_CASE_P(DISABLED_TypedTestP);\n\nTYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) {\n  FAIL() << \"Unexpected failure: \"\n         << \"Disabled type-parameterized test should not run.\";\n}\n\nREGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun);\n\nINSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes);\n\n#endif  // GTEST_HAS_TYPED_TEST_P\n\n// Tests that assertion macros evaluate their arguments exactly once.\n\nclass SingleEvaluationTest : public Test {\n public:  // Must be public and not protected due to a bug in g++ 3.4.2.\n  // This helper function is needed by the FailedASSERT_STREQ test\n  // below.  It's public to work around C++Builder's bug with scoping local\n  // classes.\n  static void CompareAndIncrementCharPtrs() {\n    ASSERT_STREQ(p1_++, p2_++);\n  }\n\n  // This helper function is needed by the FailedASSERT_NE test below.  It's\n  // public to work around C++Builder's bug with scoping local classes.\n  static void CompareAndIncrementInts() {\n    ASSERT_NE(a_++, b_++);\n  }\n\n protected:\n  SingleEvaluationTest() {\n    p1_ = s1_;\n    p2_ = s2_;\n    a_ = 0;\n    b_ = 0;\n  }\n\n  static const char* const s1_;\n  static const char* const s2_;\n  static const char* p1_;\n  static const char* p2_;\n\n  static int a_;\n  static int b_;\n};\n\nconst char* const SingleEvaluationTest::s1_ = \"01234\";\nconst char* const SingleEvaluationTest::s2_ = \"abcde\";\nconst char* SingleEvaluationTest::p1_;\nconst char* SingleEvaluationTest::p2_;\nint SingleEvaluationTest::a_;\nint SingleEvaluationTest::b_;\n\n// Tests that when ASSERT_STREQ fails, it evaluates its arguments\n// exactly once.\nTEST_F(SingleEvaluationTest, FailedASSERT_STREQ) {\n  EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(),\n                       \"p2_++\");\n  EXPECT_EQ(s1_ + 1, p1_);\n  EXPECT_EQ(s2_ + 1, p2_);\n}\n\n// Tests that string assertion arguments are evaluated exactly once.\nTEST_F(SingleEvaluationTest, ASSERT_STR) {\n  // successful EXPECT_STRNE\n  EXPECT_STRNE(p1_++, p2_++);\n  EXPECT_EQ(s1_ + 1, p1_);\n  EXPECT_EQ(s2_ + 1, p2_);\n\n  // failed EXPECT_STRCASEEQ\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++),\n                          \"ignoring case\");\n  EXPECT_EQ(s1_ + 2, p1_);\n  EXPECT_EQ(s2_ + 2, p2_);\n}\n\n// Tests that when ASSERT_NE fails, it evaluates its arguments exactly\n// once.\nTEST_F(SingleEvaluationTest, FailedASSERT_NE) {\n  EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(),\n                       \"(a_++) != (b_++)\");\n  EXPECT_EQ(1, a_);\n  EXPECT_EQ(1, b_);\n}\n\n// Tests that assertion arguments are evaluated exactly once.\nTEST_F(SingleEvaluationTest, OtherCases) {\n  // successful EXPECT_TRUE\n  EXPECT_TRUE(0 == a_++);  // NOLINT\n  EXPECT_EQ(1, a_);\n\n  // failed EXPECT_TRUE\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), \"-1 == a_++\");\n  EXPECT_EQ(2, a_);\n\n  // successful EXPECT_GT\n  EXPECT_GT(a_++, b_++);\n  EXPECT_EQ(3, a_);\n  EXPECT_EQ(1, b_);\n\n  // failed EXPECT_LT\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), \"(a_++) < (b_++)\");\n  EXPECT_EQ(4, a_);\n  EXPECT_EQ(2, b_);\n\n  // successful ASSERT_TRUE\n  ASSERT_TRUE(0 < a_++);  // NOLINT\n  EXPECT_EQ(5, a_);\n\n  // successful ASSERT_GT\n  ASSERT_GT(a_++, b_++);\n  EXPECT_EQ(6, a_);\n  EXPECT_EQ(3, b_);\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\nvoid ThrowAnInteger() {\n  throw 1;\n}\n\n// Tests that assertion arguments are evaluated exactly once.\nTEST_F(SingleEvaluationTest, ExceptionTests) {\n  // successful EXPECT_THROW\n  EXPECT_THROW({  // NOLINT\n    a_++;\n    ThrowAnInteger();\n  }, int);\n  EXPECT_EQ(1, a_);\n\n  // failed EXPECT_THROW, throws different\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW({  // NOLINT\n    a_++;\n    ThrowAnInteger();\n  }, bool), \"throws a different type\");\n  EXPECT_EQ(2, a_);\n\n  // failed EXPECT_THROW, throws nothing\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), \"throws nothing\");\n  EXPECT_EQ(3, a_);\n\n  // successful EXPECT_NO_THROW\n  EXPECT_NO_THROW(a_++);\n  EXPECT_EQ(4, a_);\n\n  // failed EXPECT_NO_THROW\n  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({  // NOLINT\n    a_++;\n    ThrowAnInteger();\n  }), \"it throws\");\n  EXPECT_EQ(5, a_);\n\n  // successful EXPECT_ANY_THROW\n  EXPECT_ANY_THROW({  // NOLINT\n    a_++;\n    ThrowAnInteger();\n  });\n  EXPECT_EQ(6, a_);\n\n  // failed EXPECT_ANY_THROW\n  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), \"it doesn't\");\n  EXPECT_EQ(7, a_);\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE.\nclass NoFatalFailureTest : public Test {\n protected:\n  void Succeeds() {}\n  void FailsNonFatal() {\n    ADD_FAILURE() << \"some non-fatal failure\";\n  }\n  void Fails() {\n    FAIL() << \"some fatal failure\";\n  }\n\n  void DoAssertNoFatalFailureOnFails() {\n    ASSERT_NO_FATAL_FAILURE(Fails());\n    ADD_FAILURE() << \"shold not reach here.\";\n  }\n\n  void DoExpectNoFatalFailureOnFails() {\n    EXPECT_NO_FATAL_FAILURE(Fails());\n    ADD_FAILURE() << \"other failure\";\n  }\n};\n\nTEST_F(NoFatalFailureTest, NoFailure) {\n  EXPECT_NO_FATAL_FAILURE(Succeeds());\n  ASSERT_NO_FATAL_FAILURE(Succeeds());\n}\n\nTEST_F(NoFatalFailureTest, NonFatalIsNoFailure) {\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_NO_FATAL_FAILURE(FailsNonFatal()),\n      \"some non-fatal failure\");\n  EXPECT_NONFATAL_FAILURE(\n      ASSERT_NO_FATAL_FAILURE(FailsNonFatal()),\n      \"some non-fatal failure\");\n}\n\nTEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) {\n  TestPartResultArray gtest_failures;\n  {\n    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);\n    DoAssertNoFatalFailureOnFails();\n  }\n  ASSERT_EQ(2, gtest_failures.size());\n  EXPECT_EQ(TestPartResult::kFatalFailure,\n            gtest_failures.GetTestPartResult(0).type());\n  EXPECT_EQ(TestPartResult::kFatalFailure,\n            gtest_failures.GetTestPartResult(1).type());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"some fatal failure\",\n                      gtest_failures.GetTestPartResult(0).message());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"it does\",\n                      gtest_failures.GetTestPartResult(1).message());\n}\n\nTEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) {\n  TestPartResultArray gtest_failures;\n  {\n    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);\n    DoExpectNoFatalFailureOnFails();\n  }\n  ASSERT_EQ(3, gtest_failures.size());\n  EXPECT_EQ(TestPartResult::kFatalFailure,\n            gtest_failures.GetTestPartResult(0).type());\n  EXPECT_EQ(TestPartResult::kNonFatalFailure,\n            gtest_failures.GetTestPartResult(1).type());\n  EXPECT_EQ(TestPartResult::kNonFatalFailure,\n            gtest_failures.GetTestPartResult(2).type());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"some fatal failure\",\n                      gtest_failures.GetTestPartResult(0).message());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"it does\",\n                      gtest_failures.GetTestPartResult(1).message());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"other failure\",\n                      gtest_failures.GetTestPartResult(2).message());\n}\n\nTEST_F(NoFatalFailureTest, MessageIsStreamable) {\n  TestPartResultArray gtest_failures;\n  {\n    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);\n    EXPECT_NO_FATAL_FAILURE(FAIL() << \"foo\") << \"my message\";\n  }\n  ASSERT_EQ(2, gtest_failures.size());\n  EXPECT_EQ(TestPartResult::kNonFatalFailure,\n            gtest_failures.GetTestPartResult(0).type());\n  EXPECT_EQ(TestPartResult::kNonFatalFailure,\n            gtest_failures.GetTestPartResult(1).type());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"foo\",\n                      gtest_failures.GetTestPartResult(0).message());\n  EXPECT_PRED_FORMAT2(testing::IsSubstring, \"my message\",\n                      gtest_failures.GetTestPartResult(1).message());\n}\n\n// Tests non-string assertions.\n\n// Tests EqFailure(), used for implementing *EQ* assertions.\nTEST(AssertionTest, EqFailure) {\n  const std::string foo_val(\"5\"), bar_val(\"6\");\n  const std::string msg1(\n      EqFailure(\"foo\", \"bar\", foo_val, bar_val, false)\n      .failure_message());\n  EXPECT_STREQ(\n      \"Value of: bar\\n\"\n      \"  Actual: 6\\n\"\n      \"Expected: foo\\n\"\n      \"Which is: 5\",\n      msg1.c_str());\n\n  const std::string msg2(\n      EqFailure(\"foo\", \"6\", foo_val, bar_val, false)\n      .failure_message());\n  EXPECT_STREQ(\n      \"Value of: 6\\n\"\n      \"Expected: foo\\n\"\n      \"Which is: 5\",\n      msg2.c_str());\n\n  const std::string msg3(\n      EqFailure(\"5\", \"bar\", foo_val, bar_val, false)\n      .failure_message());\n  EXPECT_STREQ(\n      \"Value of: bar\\n\"\n      \"  Actual: 6\\n\"\n      \"Expected: 5\",\n      msg3.c_str());\n\n  const std::string msg4(\n      EqFailure(\"5\", \"6\", foo_val, bar_val, false).failure_message());\n  EXPECT_STREQ(\n      \"Value of: 6\\n\"\n      \"Expected: 5\",\n      msg4.c_str());\n\n  const std::string msg5(\n      EqFailure(\"foo\", \"bar\",\n                std::string(\"\\\"x\\\"\"), std::string(\"\\\"y\\\"\"),\n                true).failure_message());\n  EXPECT_STREQ(\n      \"Value of: bar\\n\"\n      \"  Actual: \\\"y\\\"\\n\"\n      \"Expected: foo (ignoring case)\\n\"\n      \"Which is: \\\"x\\\"\",\n      msg5.c_str());\n}\n\n// Tests AppendUserMessage(), used for implementing the *EQ* macros.\nTEST(AssertionTest, AppendUserMessage) {\n  const std::string foo(\"foo\");\n\n  Message msg;\n  EXPECT_STREQ(\"foo\",\n               AppendUserMessage(foo, msg).c_str());\n\n  msg << \"bar\";\n  EXPECT_STREQ(\"foo\\nbar\",\n               AppendUserMessage(foo, msg).c_str());\n}\n\n#ifdef __BORLANDC__\n// Silences warnings: \"Condition is always true\", \"Unreachable code\"\n# pragma option push -w-ccc -w-rch\n#endif\n\n// Tests ASSERT_TRUE.\nTEST(AssertionTest, ASSERT_TRUE) {\n  ASSERT_TRUE(2 > 1);  // NOLINT\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1),\n                       \"2 < 1\");\n}\n\n// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult.\nTEST(AssertionTest, AssertTrueWithAssertionResult) {\n  ASSERT_TRUE(ResultIsEven(2));\n#ifndef __BORLANDC__\n  // ICE's in C++Builder.\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)),\n                       \"Value of: ResultIsEven(3)\\n\"\n                       \"  Actual: false (3 is odd)\\n\"\n                       \"Expected: true\");\n#endif\n  ASSERT_TRUE(ResultIsEvenNoExplanation(2));\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)),\n                       \"Value of: ResultIsEvenNoExplanation(3)\\n\"\n                       \"  Actual: false (3 is odd)\\n\"\n                       \"Expected: true\");\n}\n\n// Tests ASSERT_FALSE.\nTEST(AssertionTest, ASSERT_FALSE) {\n  ASSERT_FALSE(2 < 1);  // NOLINT\n  EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1),\n                       \"Value of: 2 > 1\\n\"\n                       \"  Actual: true\\n\"\n                       \"Expected: false\");\n}\n\n// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult.\nTEST(AssertionTest, AssertFalseWithAssertionResult) {\n  ASSERT_FALSE(ResultIsEven(3));\n#ifndef __BORLANDC__\n  // ICE's in C++Builder.\n  EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)),\n                       \"Value of: ResultIsEven(2)\\n\"\n                       \"  Actual: true (2 is even)\\n\"\n                       \"Expected: false\");\n#endif\n  ASSERT_FALSE(ResultIsEvenNoExplanation(3));\n  EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)),\n                       \"Value of: ResultIsEvenNoExplanation(2)\\n\"\n                       \"  Actual: true\\n\"\n                       \"Expected: false\");\n}\n\n#ifdef __BORLANDC__\n// Restores warnings after previous \"#pragma option push\" supressed them\n# pragma option pop\n#endif\n\n// Tests using ASSERT_EQ on double values.  The purpose is to make\n// sure that the specialization we did for integer and anonymous enums\n// isn't used for double arguments.\nTEST(ExpectTest, ASSERT_EQ_Double) {\n  // A success.\n  ASSERT_EQ(5.6, 5.6);\n\n  // A failure.\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2),\n                       \"5.1\");\n}\n\n// Tests ASSERT_EQ.\nTEST(AssertionTest, ASSERT_EQ) {\n  ASSERT_EQ(5, 2 + 3);\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3),\n                       \"Value of: 2*3\\n\"\n                       \"  Actual: 6\\n\"\n                       \"Expected: 5\");\n}\n\n// Tests ASSERT_EQ(NULL, pointer).\n#if GTEST_CAN_COMPARE_NULL\nTEST(AssertionTest, ASSERT_EQ_NULL) {\n  // A success.\n  const char* p = NULL;\n  // Some older GCC versions may issue a spurious waring in this or the next\n  // assertion statement. This warning should not be suppressed with\n  // static_cast since the test verifies the ability to use bare NULL as the\n  // expected parameter to the macro.\n  ASSERT_EQ(NULL, p);\n\n  // A failure.\n  static int n = 0;\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n),\n                       \"Value of: &n\\n\");\n}\n#endif  // GTEST_CAN_COMPARE_NULL\n\n// Tests ASSERT_EQ(0, non_pointer).  Since the literal 0 can be\n// treated as a null pointer by the compiler, we need to make sure\n// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as\n// ASSERT_EQ(static_cast<void*>(NULL), non_pointer).\nTEST(ExpectTest, ASSERT_EQ_0) {\n  int n = 0;\n\n  // A success.\n  ASSERT_EQ(0, n);\n\n  // A failure.\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6),\n                       \"Expected: 0\");\n}\n\n// Tests ASSERT_NE.\nTEST(AssertionTest, ASSERT_NE) {\n  ASSERT_NE(6, 7);\n  EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'),\n                       \"Expected: ('a') != ('a'), \"\n                       \"actual: 'a' (97, 0x61) vs 'a' (97, 0x61)\");\n}\n\n// Tests ASSERT_LE.\nTEST(AssertionTest, ASSERT_LE) {\n  ASSERT_LE(2, 3);\n  ASSERT_LE(2, 2);\n  EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0),\n                       \"Expected: (2) <= (0), actual: 2 vs 0\");\n}\n\n// Tests ASSERT_LT.\nTEST(AssertionTest, ASSERT_LT) {\n  ASSERT_LT(2, 3);\n  EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2),\n                       \"Expected: (2) < (2), actual: 2 vs 2\");\n}\n\n// Tests ASSERT_GE.\nTEST(AssertionTest, ASSERT_GE) {\n  ASSERT_GE(2, 1);\n  ASSERT_GE(2, 2);\n  EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3),\n                       \"Expected: (2) >= (3), actual: 2 vs 3\");\n}\n\n// Tests ASSERT_GT.\nTEST(AssertionTest, ASSERT_GT) {\n  ASSERT_GT(2, 1);\n  EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2),\n                       \"Expected: (2) > (2), actual: 2 vs 2\");\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\nvoid ThrowNothing() {}\n\n// Tests ASSERT_THROW.\nTEST(AssertionTest, ASSERT_THROW) {\n  ASSERT_THROW(ThrowAnInteger(), int);\n\n# ifndef __BORLANDC__\n\n  // ICE's in C++Builder 2007 and 2009.\n  EXPECT_FATAL_FAILURE(\n      ASSERT_THROW(ThrowAnInteger(), bool),\n      \"Expected: ThrowAnInteger() throws an exception of type bool.\\n\"\n      \"  Actual: it throws a different type.\");\n# endif\n\n  EXPECT_FATAL_FAILURE(\n      ASSERT_THROW(ThrowNothing(), bool),\n      \"Expected: ThrowNothing() throws an exception of type bool.\\n\"\n      \"  Actual: it throws nothing.\");\n}\n\n// Tests ASSERT_NO_THROW.\nTEST(AssertionTest, ASSERT_NO_THROW) {\n  ASSERT_NO_THROW(ThrowNothing());\n  EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()),\n                       \"Expected: ThrowAnInteger() doesn't throw an exception.\"\n                       \"\\n  Actual: it throws.\");\n}\n\n// Tests ASSERT_ANY_THROW.\nTEST(AssertionTest, ASSERT_ANY_THROW) {\n  ASSERT_ANY_THROW(ThrowAnInteger());\n  EXPECT_FATAL_FAILURE(\n      ASSERT_ANY_THROW(ThrowNothing()),\n      \"Expected: ThrowNothing() throws an exception.\\n\"\n      \"  Actual: it doesn't.\");\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// Makes sure we deal with the precedence of <<.  This test should\n// compile.\nTEST(AssertionTest, AssertPrecedence) {\n  ASSERT_EQ(1 < 2, true);\n  bool false_value = false;\n  ASSERT_EQ(true && false_value, false);\n}\n\n// A subroutine used by the following test.\nvoid TestEq1(int x) {\n  ASSERT_EQ(1, x);\n}\n\n// Tests calling a test subroutine that's not part of a fixture.\nTEST(AssertionTest, NonFixtureSubroutine) {\n  EXPECT_FATAL_FAILURE(TestEq1(2),\n                       \"Value of: x\");\n}\n\n// An uncopyable class.\nclass Uncopyable {\n public:\n  explicit Uncopyable(int a_value) : value_(a_value) {}\n\n  int value() const { return value_; }\n  bool operator==(const Uncopyable& rhs) const {\n    return value() == rhs.value();\n  }\n private:\n  // This constructor deliberately has no implementation, as we don't\n  // want this class to be copyable.\n  Uncopyable(const Uncopyable&);  // NOLINT\n\n  int value_;\n};\n\n::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) {\n  return os << value.value();\n}\n\n\nbool IsPositiveUncopyable(const Uncopyable& x) {\n  return x.value() > 0;\n}\n\n// A subroutine used by the following test.\nvoid TestAssertNonPositive() {\n  Uncopyable y(-1);\n  ASSERT_PRED1(IsPositiveUncopyable, y);\n}\n// A subroutine used by the following test.\nvoid TestAssertEqualsUncopyable() {\n  Uncopyable x(5);\n  Uncopyable y(-1);\n  ASSERT_EQ(x, y);\n}\n\n// Tests that uncopyable objects can be used in assertions.\nTEST(AssertionTest, AssertWorksWithUncopyableObject) {\n  Uncopyable x(5);\n  ASSERT_PRED1(IsPositiveUncopyable, x);\n  ASSERT_EQ(x, x);\n  EXPECT_FATAL_FAILURE(TestAssertNonPositive(),\n    \"IsPositiveUncopyable(y) evaluates to false, where\\ny evaluates to -1\");\n  EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(),\n    \"Value of: y\\n  Actual: -1\\nExpected: x\\nWhich is: 5\");\n}\n\n// Tests that uncopyable objects can be used in expects.\nTEST(AssertionTest, ExpectWorksWithUncopyableObject) {\n  Uncopyable x(5);\n  EXPECT_PRED1(IsPositiveUncopyable, x);\n  Uncopyable y(-1);\n  EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y),\n    \"IsPositiveUncopyable(y) evaluates to false, where\\ny evaluates to -1\");\n  EXPECT_EQ(x, x);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y),\n    \"Value of: y\\n  Actual: -1\\nExpected: x\\nWhich is: 5\");\n}\n\nenum NamedEnum {\n  kE1 = 0,\n  kE2 = 1\n};\n\nTEST(AssertionTest, NamedEnum) {\n  EXPECT_EQ(kE1, kE1);\n  EXPECT_LT(kE1, kE2);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), \"Which is: 0\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), \"Actual: 1\");\n}\n\n// The version of gcc used in XCode 2.2 has a bug and doesn't allow\n// anonymous enums in assertions.  Therefore the following test is not\n// done on Mac.\n// Sun Studio and HP aCC also reject this code.\n#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC)\n\n// Tests using assertions with anonymous enums.\nenum {\n  kCaseA = -1,\n\n# if GTEST_OS_LINUX\n\n  // We want to test the case where the size of the anonymous enum is\n  // larger than sizeof(int), to make sure our implementation of the\n  // assertions doesn't truncate the enums.  However, MSVC\n  // (incorrectly) doesn't allow an enum value to exceed the range of\n  // an int, so this has to be conditionally compiled.\n  //\n  // On Linux, kCaseB and kCaseA have the same value when truncated to\n  // int size.  We want to test whether this will confuse the\n  // assertions.\n  kCaseB = testing::internal::kMaxBiggestInt,\n\n# else\n\n  kCaseB = INT_MAX,\n\n# endif  // GTEST_OS_LINUX\n\n  kCaseC = 42\n};\n\nTEST(AssertionTest, AnonymousEnum) {\n# if GTEST_OS_LINUX\n\n  EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB));\n\n# endif  // GTEST_OS_LINUX\n\n  EXPECT_EQ(kCaseA, kCaseA);\n  EXPECT_NE(kCaseA, kCaseB);\n  EXPECT_LT(kCaseA, kCaseB);\n  EXPECT_LE(kCaseA, kCaseB);\n  EXPECT_GT(kCaseB, kCaseA);\n  EXPECT_GE(kCaseA, kCaseA);\n  EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB),\n                          \"(kCaseA) >= (kCaseB)\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC),\n                          \"-1 vs 42\");\n\n  ASSERT_EQ(kCaseA, kCaseA);\n  ASSERT_NE(kCaseA, kCaseB);\n  ASSERT_LT(kCaseA, kCaseB);\n  ASSERT_LE(kCaseA, kCaseB);\n  ASSERT_GT(kCaseB, kCaseA);\n  ASSERT_GE(kCaseA, kCaseA);\n\n# ifndef __BORLANDC__\n\n  // ICE's in C++Builder.\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB),\n                       \"Value of: kCaseB\");\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),\n                       \"Actual: 42\");\n# endif\n\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),\n                       \"Which is: -1\");\n}\n\n#endif  // !GTEST_OS_MAC && !defined(__SUNPRO_CC)\n\n#if GTEST_OS_WINDOWS\n\nstatic HRESULT UnexpectedHRESULTFailure() {\n  return E_UNEXPECTED;\n}\n\nstatic HRESULT OkHRESULTSuccess() {\n  return S_OK;\n}\n\nstatic HRESULT FalseHRESULTSuccess() {\n  return S_FALSE;\n}\n\n// HRESULT assertion tests test both zero and non-zero\n// success codes as well as failure message for each.\n//\n// Windows CE doesn't support message texts.\nTEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) {\n  EXPECT_HRESULT_SUCCEEDED(S_OK);\n  EXPECT_HRESULT_SUCCEEDED(S_FALSE);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),\n    \"Expected: (UnexpectedHRESULTFailure()) succeeds.\\n\"\n    \"  Actual: 0x8000FFFF\");\n}\n\nTEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) {\n  ASSERT_HRESULT_SUCCEEDED(S_OK);\n  ASSERT_HRESULT_SUCCEEDED(S_FALSE);\n\n  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),\n    \"Expected: (UnexpectedHRESULTFailure()) succeeds.\\n\"\n    \"  Actual: 0x8000FFFF\");\n}\n\nTEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) {\n  EXPECT_HRESULT_FAILED(E_UNEXPECTED);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()),\n    \"Expected: (OkHRESULTSuccess()) fails.\\n\"\n    \"  Actual: 0x0\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()),\n    \"Expected: (FalseHRESULTSuccess()) fails.\\n\"\n    \"  Actual: 0x1\");\n}\n\nTEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) {\n  ASSERT_HRESULT_FAILED(E_UNEXPECTED);\n\n# ifndef __BORLANDC__\n\n  // ICE's in C++Builder 2007 and 2009.\n  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()),\n    \"Expected: (OkHRESULTSuccess()) fails.\\n\"\n    \"  Actual: 0x0\");\n# endif\n\n  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()),\n    \"Expected: (FalseHRESULTSuccess()) fails.\\n\"\n    \"  Actual: 0x1\");\n}\n\n// Tests that streaming to the HRESULT macros works.\nTEST(HRESULTAssertionTest, Streaming) {\n  EXPECT_HRESULT_SUCCEEDED(S_OK) << \"unexpected failure\";\n  ASSERT_HRESULT_SUCCEEDED(S_OK) << \"unexpected failure\";\n  EXPECT_HRESULT_FAILED(E_UNEXPECTED) << \"unexpected failure\";\n  ASSERT_HRESULT_FAILED(E_UNEXPECTED) << \"unexpected failure\";\n\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << \"expected failure\",\n      \"expected failure\");\n\n# ifndef __BORLANDC__\n\n  // ICE's in C++Builder 2007 and 2009.\n  EXPECT_FATAL_FAILURE(\n      ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << \"expected failure\",\n      \"expected failure\");\n# endif\n\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_HRESULT_FAILED(S_OK) << \"expected failure\",\n      \"expected failure\");\n\n  EXPECT_FATAL_FAILURE(\n      ASSERT_HRESULT_FAILED(S_OK) << \"expected failure\",\n      \"expected failure\");\n}\n\n#endif  // GTEST_OS_WINDOWS\n\n#ifdef __BORLANDC__\n// Silences warnings: \"Condition is always true\", \"Unreachable code\"\n# pragma option push -w-ccc -w-rch\n#endif\n\n// Tests that the assertion macros behave like single statements.\nTEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) {\n  if (AlwaysFalse())\n    ASSERT_TRUE(false) << \"This should never be executed; \"\n                          \"It's a compilation test only.\";\n\n  if (AlwaysTrue())\n    EXPECT_FALSE(false);\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    ASSERT_LT(1, 3);\n\n  if (AlwaysFalse())\n    ;  // NOLINT\n  else\n    EXPECT_GT(3, 2) << \"\";\n}\n\n#if GTEST_HAS_EXCEPTIONS\n// Tests that the compiler will not complain about unreachable code in the\n// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros.\nTEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) {\n  int n = 0;\n\n  EXPECT_THROW(throw 1, int);\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), \"\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), \"\");\n  EXPECT_NO_THROW(n++);\n  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), \"\");\n  EXPECT_ANY_THROW(throw 1);\n  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), \"\");\n}\n\nTEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {\n  if (AlwaysFalse())\n    EXPECT_THROW(ThrowNothing(), bool);\n\n  if (AlwaysTrue())\n    EXPECT_THROW(ThrowAnInteger(), int);\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    EXPECT_NO_THROW(ThrowAnInteger());\n\n  if (AlwaysTrue())\n    EXPECT_NO_THROW(ThrowNothing());\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    EXPECT_ANY_THROW(ThrowNothing());\n\n  if (AlwaysTrue())\n    EXPECT_ANY_THROW(ThrowAnInteger());\n  else\n    ;  // NOLINT\n}\n#endif  // GTEST_HAS_EXCEPTIONS\n\nTEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) {\n  if (AlwaysFalse())\n    EXPECT_NO_FATAL_FAILURE(FAIL()) << \"This should never be executed. \"\n                                    << \"It's a compilation test only.\";\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    ASSERT_NO_FATAL_FAILURE(FAIL()) << \"\";\n  else\n    ;  // NOLINT\n\n  if (AlwaysTrue())\n    EXPECT_NO_FATAL_FAILURE(SUCCEED());\n  else\n    ;  // NOLINT\n\n  if (AlwaysFalse())\n    ;  // NOLINT\n  else\n    ASSERT_NO_FATAL_FAILURE(SUCCEED());\n}\n\n// Tests that the assertion macros work well with switch statements.\nTEST(AssertionSyntaxTest, WorksWithSwitch) {\n  switch (0) {\n    case 1:\n      break;\n    default:\n      ASSERT_TRUE(true);\n  }\n\n  switch (0)\n    case 0:\n      EXPECT_FALSE(false) << \"EXPECT_FALSE failed in switch case\";\n\n  // Binary assertions are implemented using a different code path\n  // than the Boolean assertions.  Hence we test them separately.\n  switch (0) {\n    case 1:\n    default:\n      ASSERT_EQ(1, 1) << \"ASSERT_EQ failed in default switch handler\";\n  }\n\n  switch (0)\n    case 0:\n      EXPECT_NE(1, 2);\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\nvoid ThrowAString() {\n    throw \"std::string\";\n}\n\n// Test that the exception assertion macros compile and work with const\n// type qualifier.\nTEST(AssertionSyntaxTest, WorksWithConst) {\n    ASSERT_THROW(ThrowAString(), const char*);\n\n    EXPECT_THROW(ThrowAString(), const char*);\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n}  // namespace\n\nnamespace testing {\n\n// Tests that Google Test tracks SUCCEED*.\nTEST(SuccessfulAssertionTest, SUCCEED) {\n  SUCCEED();\n  SUCCEED() << \"OK\";\n  EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\n// Tests that Google Test doesn't track successful EXPECT_*.\nTEST(SuccessfulAssertionTest, EXPECT) {\n  EXPECT_TRUE(true);\n  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\n// Tests that Google Test doesn't track successful EXPECT_STR*.\nTEST(SuccessfulAssertionTest, EXPECT_STR) {\n  EXPECT_STREQ(\"\", \"\");\n  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\n// Tests that Google Test doesn't track successful ASSERT_*.\nTEST(SuccessfulAssertionTest, ASSERT) {\n  ASSERT_TRUE(true);\n  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\n// Tests that Google Test doesn't track successful ASSERT_STR*.\nTEST(SuccessfulAssertionTest, ASSERT_STR) {\n  ASSERT_STREQ(\"\", \"\");\n  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());\n}\n\n}  // namespace testing\n\nnamespace {\n\n// Tests the message streaming variation of assertions.\n\nTEST(AssertionWithMessageTest, EXPECT) {\n  EXPECT_EQ(1, 1) << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << \"Expected failure #1.\",\n                          \"Expected failure #1\");\n  EXPECT_LE(1, 2) << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << \"Expected failure #2.\",\n                          \"Expected failure #2.\");\n  EXPECT_GE(1, 0) << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << \"Expected failure #3.\",\n                          \"Expected failure #3.\");\n\n  EXPECT_STREQ(\"1\", \"1\") << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(\"1\", \"1\") << \"Expected failure #4.\",\n                          \"Expected failure #4.\");\n  EXPECT_STRCASEEQ(\"a\", \"A\") << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE(\"a\", \"A\") << \"Expected failure #5.\",\n                          \"Expected failure #5.\");\n\n  EXPECT_FLOAT_EQ(1, 1) << \"This should succeed.\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << \"Expected failure #6.\",\n                          \"Expected failure #6.\");\n  EXPECT_NEAR(1, 1.1, 0.2) << \"This should succeed.\";\n}\n\nTEST(AssertionWithMessageTest, ASSERT) {\n  ASSERT_EQ(1, 1) << \"This should succeed.\";\n  ASSERT_NE(1, 2) << \"This should succeed.\";\n  ASSERT_LE(1, 2) << \"This should succeed.\";\n  ASSERT_LT(1, 2) << \"This should succeed.\";\n  ASSERT_GE(1, 0) << \"This should succeed.\";\n  EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << \"Expected failure.\",\n                       \"Expected failure.\");\n}\n\nTEST(AssertionWithMessageTest, ASSERT_STR) {\n  ASSERT_STREQ(\"1\", \"1\") << \"This should succeed.\";\n  ASSERT_STRNE(\"1\", \"2\") << \"This should succeed.\";\n  ASSERT_STRCASEEQ(\"a\", \"A\") << \"This should succeed.\";\n  EXPECT_FATAL_FAILURE(ASSERT_STRCASENE(\"a\", \"A\") << \"Expected failure.\",\n                       \"Expected failure.\");\n}\n\nTEST(AssertionWithMessageTest, ASSERT_FLOATING) {\n  ASSERT_FLOAT_EQ(1, 1) << \"This should succeed.\";\n  ASSERT_DOUBLE_EQ(1, 1) << \"This should succeed.\";\n  EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << \"Expect failure.\",  // NOLINT\n                       \"Expect failure.\");\n  // To work around a bug in gcc 2.95.0, there is intentionally no\n  // space after the first comma in the previous statement.\n}\n\n// Tests using ASSERT_FALSE with a streamed message.\nTEST(AssertionWithMessageTest, ASSERT_FALSE) {\n  ASSERT_FALSE(false) << \"This shouldn't fail.\";\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_FALSE(true) << \"Expected failure: \" << 2 << \" > \" << 1\n                       << \" evaluates to \" << true;\n  }, \"Expected failure\");\n}\n\n// Tests using FAIL with a streamed message.\nTEST(AssertionWithMessageTest, FAIL) {\n  EXPECT_FATAL_FAILURE(FAIL() << 0,\n                       \"0\");\n}\n\n// Tests using SUCCEED with a streamed message.\nTEST(AssertionWithMessageTest, SUCCEED) {\n  SUCCEED() << \"Success == \" << 1;\n}\n\n// Tests using ASSERT_TRUE with a streamed message.\nTEST(AssertionWithMessageTest, ASSERT_TRUE) {\n  ASSERT_TRUE(true) << \"This should succeed.\";\n  ASSERT_TRUE(true) << true;\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_TRUE(false) << static_cast<const char *>(NULL)\n                       << static_cast<char *>(NULL);\n  }, \"(null)(null)\");\n}\n\n#if GTEST_OS_WINDOWS\n// Tests using wide strings in assertion messages.\nTEST(AssertionWithMessageTest, WideStringMessage) {\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_TRUE(false) << L\"This failure is expected.\\x8119\";\n  }, \"This failure is expected.\");\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_EQ(1, 2) << \"This failure is \"\n                    << L\"expected too.\\x8120\";\n  }, \"This failure is expected too.\");\n}\n#endif  // GTEST_OS_WINDOWS\n\n// Tests EXPECT_TRUE.\nTEST(ExpectTest, EXPECT_TRUE) {\n  EXPECT_TRUE(true) << \"Intentional success\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << \"Intentional failure #1.\",\n                          \"Intentional failure #1.\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << \"Intentional failure #2.\",\n                          \"Intentional failure #2.\");\n  EXPECT_TRUE(2 > 1);  // NOLINT\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1),\n                          \"Value of: 2 < 1\\n\"\n                          \"  Actual: false\\n\"\n                          \"Expected: true\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3),\n                          \"2 > 3\");\n}\n\n// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult.\nTEST(ExpectTest, ExpectTrueWithAssertionResult) {\n  EXPECT_TRUE(ResultIsEven(2));\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)),\n                          \"Value of: ResultIsEven(3)\\n\"\n                          \"  Actual: false (3 is odd)\\n\"\n                          \"Expected: true\");\n  EXPECT_TRUE(ResultIsEvenNoExplanation(2));\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)),\n                          \"Value of: ResultIsEvenNoExplanation(3)\\n\"\n                          \"  Actual: false (3 is odd)\\n\"\n                          \"Expected: true\");\n}\n\n// Tests EXPECT_FALSE with a streamed message.\nTEST(ExpectTest, EXPECT_FALSE) {\n  EXPECT_FALSE(2 < 1);  // NOLINT\n  EXPECT_FALSE(false) << \"Intentional success\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << \"Intentional failure #1.\",\n                          \"Intentional failure #1.\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << \"Intentional failure #2.\",\n                          \"Intentional failure #2.\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1),\n                          \"Value of: 2 > 1\\n\"\n                          \"  Actual: true\\n\"\n                          \"Expected: false\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3),\n                          \"2 < 3\");\n}\n\n// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult.\nTEST(ExpectTest, ExpectFalseWithAssertionResult) {\n  EXPECT_FALSE(ResultIsEven(3));\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)),\n                          \"Value of: ResultIsEven(2)\\n\"\n                          \"  Actual: true (2 is even)\\n\"\n                          \"Expected: false\");\n  EXPECT_FALSE(ResultIsEvenNoExplanation(3));\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)),\n                          \"Value of: ResultIsEvenNoExplanation(2)\\n\"\n                          \"  Actual: true\\n\"\n                          \"Expected: false\");\n}\n\n#ifdef __BORLANDC__\n// Restores warnings after previous \"#pragma option push\" supressed them\n# pragma option pop\n#endif\n\n// Tests EXPECT_EQ.\nTEST(ExpectTest, EXPECT_EQ) {\n  EXPECT_EQ(5, 2 + 3);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3),\n                          \"Value of: 2*3\\n\"\n                          \"  Actual: 6\\n\"\n                          \"Expected: 5\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3),\n                          \"2 - 3\");\n}\n\n// Tests using EXPECT_EQ on double values.  The purpose is to make\n// sure that the specialization we did for integer and anonymous enums\n// isn't used for double arguments.\nTEST(ExpectTest, EXPECT_EQ_Double) {\n  // A success.\n  EXPECT_EQ(5.6, 5.6);\n\n  // A failure.\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2),\n                          \"5.1\");\n}\n\n#if GTEST_CAN_COMPARE_NULL\n// Tests EXPECT_EQ(NULL, pointer).\nTEST(ExpectTest, EXPECT_EQ_NULL) {\n  // A success.\n  const char* p = NULL;\n  // Some older GCC versions may issue a spurious warning in this or the next\n  // assertion statement. This warning should not be suppressed with\n  // static_cast since the test verifies the ability to use bare NULL as the\n  // expected parameter to the macro.\n  EXPECT_EQ(NULL, p);\n\n  // A failure.\n  int n = 0;\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n),\n                          \"Value of: &n\\n\");\n}\n#endif  // GTEST_CAN_COMPARE_NULL\n\n// Tests EXPECT_EQ(0, non_pointer).  Since the literal 0 can be\n// treated as a null pointer by the compiler, we need to make sure\n// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as\n// EXPECT_EQ(static_cast<void*>(NULL), non_pointer).\nTEST(ExpectTest, EXPECT_EQ_0) {\n  int n = 0;\n\n  // A success.\n  EXPECT_EQ(0, n);\n\n  // A failure.\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6),\n                          \"Expected: 0\");\n}\n\n// Tests EXPECT_NE.\nTEST(ExpectTest, EXPECT_NE) {\n  EXPECT_NE(6, 7);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'),\n                          \"Expected: ('a') != ('a'), \"\n                          \"actual: 'a' (97, 0x61) vs 'a' (97, 0x61)\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2),\n                          \"2\");\n  char* const p0 = NULL;\n  EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0),\n                          \"p0\");\n  // Only way to get the Nokia compiler to compile the cast\n  // is to have a separate void* variable first. Putting\n  // the two casts on the same line doesn't work, neither does\n  // a direct C-style to char*.\n  void* pv1 = (void*)0x1234;  // NOLINT\n  char* const p1 = reinterpret_cast<char*>(pv1);\n  EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1),\n                          \"p1\");\n}\n\n// Tests EXPECT_LE.\nTEST(ExpectTest, EXPECT_LE) {\n  EXPECT_LE(2, 3);\n  EXPECT_LE(2, 2);\n  EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0),\n                          \"Expected: (2) <= (0), actual: 2 vs 0\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9),\n                          \"(1.1) <= (0.9)\");\n}\n\n// Tests EXPECT_LT.\nTEST(ExpectTest, EXPECT_LT) {\n  EXPECT_LT(2, 3);\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2),\n                          \"Expected: (2) < (2), actual: 2 vs 2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1),\n                          \"(2) < (1)\");\n}\n\n// Tests EXPECT_GE.\nTEST(ExpectTest, EXPECT_GE) {\n  EXPECT_GE(2, 1);\n  EXPECT_GE(2, 2);\n  EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3),\n                          \"Expected: (2) >= (3), actual: 2 vs 3\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1),\n                          \"(0.9) >= (1.1)\");\n}\n\n// Tests EXPECT_GT.\nTEST(ExpectTest, EXPECT_GT) {\n  EXPECT_GT(2, 1);\n  EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2),\n                          \"Expected: (2) > (2), actual: 2 vs 2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3),\n                          \"(2) > (3)\");\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Tests EXPECT_THROW.\nTEST(ExpectTest, EXPECT_THROW) {\n  EXPECT_THROW(ThrowAnInteger(), int);\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool),\n                          \"Expected: ThrowAnInteger() throws an exception of \"\n                          \"type bool.\\n  Actual: it throws a different type.\");\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_THROW(ThrowNothing(), bool),\n      \"Expected: ThrowNothing() throws an exception of type bool.\\n\"\n      \"  Actual: it throws nothing.\");\n}\n\n// Tests EXPECT_NO_THROW.\nTEST(ExpectTest, EXPECT_NO_THROW) {\n  EXPECT_NO_THROW(ThrowNothing());\n  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()),\n                          \"Expected: ThrowAnInteger() doesn't throw an \"\n                          \"exception.\\n  Actual: it throws.\");\n}\n\n// Tests EXPECT_ANY_THROW.\nTEST(ExpectTest, EXPECT_ANY_THROW) {\n  EXPECT_ANY_THROW(ThrowAnInteger());\n  EXPECT_NONFATAL_FAILURE(\n      EXPECT_ANY_THROW(ThrowNothing()),\n      \"Expected: ThrowNothing() throws an exception.\\n\"\n      \"  Actual: it doesn't.\");\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// Make sure we deal with the precedence of <<.\nTEST(ExpectTest, ExpectPrecedence) {\n  EXPECT_EQ(1 < 2, true);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false),\n                          \"Value of: true && false\");\n}\n\n\n// Tests the StreamableToString() function.\n\n// Tests using StreamableToString() on a scalar.\nTEST(StreamableToStringTest, Scalar) {\n  EXPECT_STREQ(\"5\", StreamableToString(5).c_str());\n}\n\n// Tests using StreamableToString() on a non-char pointer.\nTEST(StreamableToStringTest, Pointer) {\n  int n = 0;\n  int* p = &n;\n  EXPECT_STRNE(\"(null)\", StreamableToString(p).c_str());\n}\n\n// Tests using StreamableToString() on a NULL non-char pointer.\nTEST(StreamableToStringTest, NullPointer) {\n  int* p = NULL;\n  EXPECT_STREQ(\"(null)\", StreamableToString(p).c_str());\n}\n\n// Tests using StreamableToString() on a C string.\nTEST(StreamableToStringTest, CString) {\n  EXPECT_STREQ(\"Foo\", StreamableToString(\"Foo\").c_str());\n}\n\n// Tests using StreamableToString() on a NULL C string.\nTEST(StreamableToStringTest, NullCString) {\n  char* p = NULL;\n  EXPECT_STREQ(\"(null)\", StreamableToString(p).c_str());\n}\n\n// Tests using streamable values as assertion messages.\n\n// Tests using std::string as an assertion message.\nTEST(StreamableTest, string) {\n  static const std::string str(\n      \"This failure message is a std::string, and is expected.\");\n  EXPECT_FATAL_FAILURE(FAIL() << str,\n                       str.c_str());\n}\n\n// Tests that we can output strings containing embedded NULs.\n// Limited to Linux because we can only do this with std::string's.\nTEST(StreamableTest, stringWithEmbeddedNUL) {\n  static const char char_array_with_nul[] =\n      \"Here's a NUL\\0 and some more string\";\n  static const std::string string_with_nul(char_array_with_nul,\n                                           sizeof(char_array_with_nul)\n                                           - 1);  // drops the trailing NUL\n  EXPECT_FATAL_FAILURE(FAIL() << string_with_nul,\n                       \"Here's a NUL\\\\0 and some more string\");\n}\n\n// Tests that we can output a NUL char.\nTEST(StreamableTest, NULChar) {\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    FAIL() << \"A NUL\" << '\\0' << \" and some more string\";\n  }, \"A NUL\\\\0 and some more string\");\n}\n\n// Tests using int as an assertion message.\nTEST(StreamableTest, int) {\n  EXPECT_FATAL_FAILURE(FAIL() << 900913,\n                       \"900913\");\n}\n\n// Tests using NULL char pointer as an assertion message.\n//\n// In MSVC, streaming a NULL char * causes access violation.  Google Test\n// implemented a workaround (substituting \"(null)\" for NULL).  This\n// tests whether the workaround works.\nTEST(StreamableTest, NullCharPtr) {\n  EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL),\n                       \"(null)\");\n}\n\n// Tests that basic IO manipulators (endl, ends, and flush) can be\n// streamed to testing::Message.\nTEST(StreamableTest, BasicIoManip) {\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    FAIL() << \"Line 1.\" << std::endl\n           << \"A NUL char \" << std::ends << std::flush << \" in line 2.\";\n  }, \"Line 1.\\nA NUL char \\\\0 in line 2.\");\n}\n\n// Tests the macros that haven't been covered so far.\n\nvoid AddFailureHelper(bool* aborted) {\n  *aborted = true;\n  ADD_FAILURE() << \"Intentional failure.\";\n  *aborted = false;\n}\n\n// Tests ADD_FAILURE.\nTEST(MacroTest, ADD_FAILURE) {\n  bool aborted = true;\n  EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted),\n                          \"Intentional failure.\");\n  EXPECT_FALSE(aborted);\n}\n\n// Tests ADD_FAILURE_AT.\nTEST(MacroTest, ADD_FAILURE_AT) {\n  // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and\n  // the failure message contains the user-streamed part.\n  EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT(\"foo.cc\", 42) << \"Wrong!\", \"Wrong!\");\n\n  // Verifies that the user-streamed part is optional.\n  EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT(\"foo.cc\", 42), \"Failed\");\n\n  // Unfortunately, we cannot verify that the failure message contains\n  // the right file path and line number the same way, as\n  // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and\n  // line number.  Instead, we do that in gtest_output_test_.cc.\n}\n\n// Tests FAIL.\nTEST(MacroTest, FAIL) {\n  EXPECT_FATAL_FAILURE(FAIL(),\n                       \"Failed\");\n  EXPECT_FATAL_FAILURE(FAIL() << \"Intentional failure.\",\n                       \"Intentional failure.\");\n}\n\n// Tests SUCCEED\nTEST(MacroTest, SUCCEED) {\n  SUCCEED();\n  SUCCEED() << \"Explicit success.\";\n}\n\n// Tests for EXPECT_EQ() and ASSERT_EQ().\n//\n// These tests fail *intentionally*, s.t. the failure messages can be\n// generated and tested.\n//\n// We have different tests for different argument types.\n\n// Tests using bool values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, Bool) {\n  EXPECT_EQ(true,  true);\n  EXPECT_FATAL_FAILURE({\n      bool false_value = false;\n      ASSERT_EQ(false_value, true);\n    }, \"Value of: true\");\n}\n\n// Tests using int values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, Int) {\n  ASSERT_EQ(32, 32);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33),\n                          \"33\");\n}\n\n// Tests using time_t values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, Time_T) {\n  EXPECT_EQ(static_cast<time_t>(0),\n            static_cast<time_t>(0));\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0),\n                                 static_cast<time_t>(1234)),\n                       \"1234\");\n}\n\n// Tests using char values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, Char) {\n  ASSERT_EQ('z', 'z');\n  const char ch = 'b';\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\\0', ch),\n                          \"ch\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch),\n                          \"ch\");\n}\n\n// Tests using wchar_t values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, WideChar) {\n  EXPECT_EQ(L'b', L'b');\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\\0', L'x'),\n                          \"Value of: L'x'\\n\"\n                          \"  Actual: L'x' (120, 0x78)\\n\"\n                          \"Expected: L'\\0'\\n\"\n                          \"Which is: L'\\0' (0, 0x0)\");\n\n  static wchar_t wchar;\n  wchar = L'b';\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar),\n                          \"wchar\");\n  wchar = 0x8119;\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar),\n                       \"Value of: wchar\");\n}\n\n// Tests using ::std::string values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, StdString) {\n  // Compares a const char* to an std::string that has identical\n  // content.\n  ASSERT_EQ(\"Test\", ::std::string(\"Test\"));\n\n  // Compares two identical std::strings.\n  static const ::std::string str1(\"A * in the middle\");\n  static const ::std::string str2(str1);\n  EXPECT_EQ(str1, str2);\n\n  // Compares a const char* to an std::string that has different\n  // content\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(\"Test\", ::std::string(\"test\")),\n                          \"\\\"test\\\"\");\n\n  // Compares an std::string to a char* that has different content.\n  char* const p1 = const_cast<char*>(\"foo\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string(\"bar\"), p1),\n                          \"p1\");\n\n  // Compares two std::strings that have different contents, one of\n  // which having a NUL character in the middle.  This should fail.\n  static ::std::string str3(str1);\n  str3.at(2) = '\\0';\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3),\n                       \"Value of: str3\\n\"\n                       \"  Actual: \\\"A \\\\0 in the middle\\\"\");\n}\n\n#if GTEST_HAS_STD_WSTRING\n\n// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, StdWideString) {\n  // Compares two identical std::wstrings.\n  const ::std::wstring wstr1(L\"A * in the middle\");\n  const ::std::wstring wstr2(wstr1);\n  ASSERT_EQ(wstr1, wstr2);\n\n  // Compares an std::wstring to a const wchar_t* that has identical\n  // content.\n  const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\\0' };\n  EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119);\n\n  // Compares an std::wstring to a const wchar_t* that has different\n  // content.\n  const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\\0' };\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120);\n  }, \"kTestX8120\");\n\n  // Compares two std::wstrings that have different contents, one of\n  // which having a NUL character in the middle.\n  ::std::wstring wstr3(wstr1);\n  wstr3.at(2) = L'\\0';\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3),\n                          \"wstr3\");\n\n  // Compares a wchar_t* to an std::wstring that has different\n  // content.\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_EQ(const_cast<wchar_t*>(L\"foo\"), ::std::wstring(L\"bar\"));\n  }, \"\");\n}\n\n#endif  // GTEST_HAS_STD_WSTRING\n\n#if GTEST_HAS_GLOBAL_STRING\n// Tests using ::string values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, GlobalString) {\n  // Compares a const char* to a ::string that has identical content.\n  EXPECT_EQ(\"Test\", ::string(\"Test\"));\n\n  // Compares two identical ::strings.\n  const ::string str1(\"A * in the middle\");\n  const ::string str2(str1);\n  ASSERT_EQ(str1, str2);\n\n  // Compares a ::string to a const char* that has different content.\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string(\"Test\"), \"test\"),\n                          \"test\");\n\n  // Compares two ::strings that have different contents, one of which\n  // having a NUL character in the middle.\n  ::string str3(str1);\n  str3.at(2) = '\\0';\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3),\n                          \"str3\");\n\n  // Compares a ::string to a char* that has different content.\n  EXPECT_FATAL_FAILURE({  // NOLINT\n    ASSERT_EQ(::string(\"bar\"), const_cast<char*>(\"foo\"));\n  }, \"\");\n}\n\n#endif  // GTEST_HAS_GLOBAL_STRING\n\n#if GTEST_HAS_GLOBAL_WSTRING\n\n// Tests using ::wstring values in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, GlobalWideString) {\n  // Compares two identical ::wstrings.\n  static const ::wstring wstr1(L\"A * in the middle\");\n  static const ::wstring wstr2(wstr1);\n  EXPECT_EQ(wstr1, wstr2);\n\n  // Compares a const wchar_t* to a ::wstring that has identical content.\n  const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\\0' };\n  ASSERT_EQ(kTestX8119, ::wstring(kTestX8119));\n\n  // Compares a const wchar_t* to a ::wstring that has different\n  // content.\n  const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\\0' };\n  EXPECT_NONFATAL_FAILURE({  // NOLINT\n    EXPECT_EQ(kTestX8120, ::wstring(kTestX8119));\n  }, \"Test\\\\x8119\");\n\n  // Compares a wchar_t* to a ::wstring that has different content.\n  wchar_t* const p1 = const_cast<wchar_t*>(L\"foo\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L\"bar\")),\n                          \"bar\");\n\n  // Compares two ::wstrings that have different contents, one of which\n  // having a NUL character in the middle.\n  static ::wstring wstr3;\n  wstr3 = wstr1;\n  wstr3.at(2) = L'\\0';\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3),\n                       \"wstr3\");\n}\n\n#endif  // GTEST_HAS_GLOBAL_WSTRING\n\n// Tests using char pointers in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, CharPointer) {\n  char* const p0 = NULL;\n  // Only way to get the Nokia compiler to compile the cast\n  // is to have a separate void* variable first. Putting\n  // the two casts on the same line doesn't work, neither does\n  // a direct C-style to char*.\n  void* pv1 = (void*)0x1234;  // NOLINT\n  void* pv2 = (void*)0xABC0;  // NOLINT\n  char* const p1 = reinterpret_cast<char*>(pv1);\n  char* const p2 = reinterpret_cast<char*>(pv2);\n  ASSERT_EQ(p1, p1);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),\n                          \"Value of: p2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),\n                          \"p2\");\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234),\n                                 reinterpret_cast<char*>(0xABC0)),\n                       \"ABC0\");\n}\n\n// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, WideCharPointer) {\n  wchar_t* const p0 = NULL;\n  // Only way to get the Nokia compiler to compile the cast\n  // is to have a separate void* variable first. Putting\n  // the two casts on the same line doesn't work, neither does\n  // a direct C-style to char*.\n  void* pv1 = (void*)0x1234;  // NOLINT\n  void* pv2 = (void*)0xABC0;  // NOLINT\n  wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1);\n  wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2);\n  EXPECT_EQ(p0, p0);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),\n                          \"Value of: p2\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),\n                          \"p2\");\n  void* pv3 = (void*)0x1234;  // NOLINT\n  void* pv4 = (void*)0xABC0;  // NOLINT\n  const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3);\n  const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4);\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4),\n                          \"p4\");\n}\n\n// Tests using other types of pointers in {EXPECT|ASSERT}_EQ.\nTEST(EqAssertionTest, OtherPointer) {\n  ASSERT_EQ(static_cast<const int*>(NULL),\n            static_cast<const int*>(NULL));\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL),\n                                 reinterpret_cast<const int*>(0x1234)),\n                       \"0x1234\");\n}\n\n// A class that supports binary comparison operators but not streaming.\nclass UnprintableChar {\n public:\n  explicit UnprintableChar(char ch) : char_(ch) {}\n\n  bool operator==(const UnprintableChar& rhs) const {\n    return char_ == rhs.char_;\n  }\n  bool operator!=(const UnprintableChar& rhs) const {\n    return char_ != rhs.char_;\n  }\n  bool operator<(const UnprintableChar& rhs) const {\n    return char_ < rhs.char_;\n  }\n  bool operator<=(const UnprintableChar& rhs) const {\n    return char_ <= rhs.char_;\n  }\n  bool operator>(const UnprintableChar& rhs) const {\n    return char_ > rhs.char_;\n  }\n  bool operator>=(const UnprintableChar& rhs) const {\n    return char_ >= rhs.char_;\n  }\n\n private:\n  char char_;\n};\n\n// Tests that ASSERT_EQ() and friends don't require the arguments to\n// be printable.\nTEST(ComparisonAssertionTest, AcceptsUnprintableArgs) {\n  const UnprintableChar x('x'), y('y');\n  ASSERT_EQ(x, x);\n  EXPECT_NE(x, y);\n  ASSERT_LT(x, y);\n  EXPECT_LE(x, y);\n  ASSERT_GT(y, x);\n  EXPECT_GE(x, x);\n\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), \"1-byte object <78>\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), \"1-byte object <79>\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), \"1-byte object <79>\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), \"1-byte object <78>\");\n  EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), \"1-byte object <79>\");\n\n  // Code tested by EXPECT_FATAL_FAILURE cannot reference local\n  // variables, so we have to write UnprintableChar('x') instead of x.\n#ifndef __BORLANDC__\n  // ICE's in C++Builder.\n  EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')),\n                       \"1-byte object <78>\");\n  EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),\n                       \"1-byte object <78>\");\n#endif\n  EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),\n                       \"1-byte object <79>\");\n  EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),\n                       \"1-byte object <78>\");\n  EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),\n                       \"1-byte object <79>\");\n}\n\n// Tests the FRIEND_TEST macro.\n\n// This class has a private member we want to test.  We will test it\n// both in a TEST and in a TEST_F.\nclass Foo {\n public:\n  Foo() {}\n\n private:\n  int Bar() const { return 1; }\n\n  // Declares the friend tests that can access the private member\n  // Bar().\n  FRIEND_TEST(FRIEND_TEST_Test, TEST);\n  FRIEND_TEST(FRIEND_TEST_Test2, TEST_F);\n};\n\n// Tests that the FRIEND_TEST declaration allows a TEST to access a\n// class's private members.  This should compile.\nTEST(FRIEND_TEST_Test, TEST) {\n  ASSERT_EQ(1, Foo().Bar());\n}\n\n// The fixture needed to test using FRIEND_TEST with TEST_F.\nclass FRIEND_TEST_Test2 : public Test {\n protected:\n  Foo foo;\n};\n\n// Tests that the FRIEND_TEST declaration allows a TEST_F to access a\n// class's private members.  This should compile.\nTEST_F(FRIEND_TEST_Test2, TEST_F) {\n  ASSERT_EQ(1, foo.Bar());\n}\n\n// Tests the life cycle of Test objects.\n\n// The test fixture for testing the life cycle of Test objects.\n//\n// This class counts the number of live test objects that uses this\n// fixture.\nclass TestLifeCycleTest : public Test {\n protected:\n  // Constructor.  Increments the number of test objects that uses\n  // this fixture.\n  TestLifeCycleTest() { count_++; }\n\n  // Destructor.  Decrements the number of test objects that uses this\n  // fixture.\n  ~TestLifeCycleTest() { count_--; }\n\n  // Returns the number of live test objects that uses this fixture.\n  int count() const { return count_; }\n\n private:\n  static int count_;\n};\n\nint TestLifeCycleTest::count_ = 0;\n\n// Tests the life cycle of test objects.\nTEST_F(TestLifeCycleTest, Test1) {\n  // There should be only one test object in this test case that's\n  // currently alive.\n  ASSERT_EQ(1, count());\n}\n\n// Tests the life cycle of test objects.\nTEST_F(TestLifeCycleTest, Test2) {\n  // After Test1 is done and Test2 is started, there should still be\n  // only one live test object, as the object for Test1 should've been\n  // deleted.\n  ASSERT_EQ(1, count());\n}\n\n}  // namespace\n\n// Tests that the copy constructor works when it is NOT optimized away by\n// the compiler.\nTEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) {\n  // Checks that the copy constructor doesn't try to dereference NULL pointers\n  // in the source object.\n  AssertionResult r1 = AssertionSuccess();\n  AssertionResult r2 = r1;\n  // The following line is added to prevent the compiler from optimizing\n  // away the constructor call.\n  r1 << \"abc\";\n\n  AssertionResult r3 = r1;\n  EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1));\n  EXPECT_STREQ(\"abc\", r1.message());\n}\n\n// Tests that AssertionSuccess and AssertionFailure construct\n// AssertionResult objects as expected.\nTEST(AssertionResultTest, ConstructionWorks) {\n  AssertionResult r1 = AssertionSuccess();\n  EXPECT_TRUE(r1);\n  EXPECT_STREQ(\"\", r1.message());\n\n  AssertionResult r2 = AssertionSuccess() << \"abc\";\n  EXPECT_TRUE(r2);\n  EXPECT_STREQ(\"abc\", r2.message());\n\n  AssertionResult r3 = AssertionFailure();\n  EXPECT_FALSE(r3);\n  EXPECT_STREQ(\"\", r3.message());\n\n  AssertionResult r4 = AssertionFailure() << \"def\";\n  EXPECT_FALSE(r4);\n  EXPECT_STREQ(\"def\", r4.message());\n\n  AssertionResult r5 = AssertionFailure(Message() << \"ghi\");\n  EXPECT_FALSE(r5);\n  EXPECT_STREQ(\"ghi\", r5.message());\n}\n\n// Tests that the negation flips the predicate result but keeps the message.\nTEST(AssertionResultTest, NegationWorks) {\n  AssertionResult r1 = AssertionSuccess() << \"abc\";\n  EXPECT_FALSE(!r1);\n  EXPECT_STREQ(\"abc\", (!r1).message());\n\n  AssertionResult r2 = AssertionFailure() << \"def\";\n  EXPECT_TRUE(!r2);\n  EXPECT_STREQ(\"def\", (!r2).message());\n}\n\nTEST(AssertionResultTest, StreamingWorks) {\n  AssertionResult r = AssertionSuccess();\n  r << \"abc\" << 'd' << 0 << true;\n  EXPECT_STREQ(\"abcd0true\", r.message());\n}\n\nTEST(AssertionResultTest, CanStreamOstreamManipulators) {\n  AssertionResult r = AssertionSuccess();\n  r << \"Data\" << std::endl << std::flush << std::ends << \"Will be visible\";\n  EXPECT_STREQ(\"Data\\n\\\\0Will be visible\", r.message());\n}\n\n// Tests streaming a user type whose definition and operator << are\n// both in the global namespace.\nclass Base {\n public:\n  explicit Base(int an_x) : x_(an_x) {}\n  int x() const { return x_; }\n private:\n  int x_;\n};\nstd::ostream& operator<<(std::ostream& os,\n                         const Base& val) {\n  return os << val.x();\n}\nstd::ostream& operator<<(std::ostream& os,\n                         const Base* pointer) {\n  return os << \"(\" << pointer->x() << \")\";\n}\n\nTEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) {\n  Message msg;\n  Base a(1);\n\n  msg << a << &a;  // Uses ::operator<<.\n  EXPECT_STREQ(\"1(1)\", msg.GetString().c_str());\n}\n\n// Tests streaming a user type whose definition and operator<< are\n// both in an unnamed namespace.\nnamespace {\nclass MyTypeInUnnamedNameSpace : public Base {\n public:\n  explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {}\n};\nstd::ostream& operator<<(std::ostream& os,\n                         const MyTypeInUnnamedNameSpace& val) {\n  return os << val.x();\n}\nstd::ostream& operator<<(std::ostream& os,\n                         const MyTypeInUnnamedNameSpace* pointer) {\n  return os << \"(\" << pointer->x() << \")\";\n}\n}  // namespace\n\nTEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) {\n  Message msg;\n  MyTypeInUnnamedNameSpace a(1);\n\n  msg << a << &a;  // Uses <unnamed_namespace>::operator<<.\n  EXPECT_STREQ(\"1(1)\", msg.GetString().c_str());\n}\n\n// Tests streaming a user type whose definition and operator<< are\n// both in a user namespace.\nnamespace namespace1 {\nclass MyTypeInNameSpace1 : public Base {\n public:\n  explicit MyTypeInNameSpace1(int an_x): Base(an_x) {}\n};\nstd::ostream& operator<<(std::ostream& os,\n                         const MyTypeInNameSpace1& val) {\n  return os << val.x();\n}\nstd::ostream& operator<<(std::ostream& os,\n                         const MyTypeInNameSpace1* pointer) {\n  return os << \"(\" << pointer->x() << \")\";\n}\n}  // namespace namespace1\n\nTEST(MessageTest, CanStreamUserTypeInUserNameSpace) {\n  Message msg;\n  namespace1::MyTypeInNameSpace1 a(1);\n\n  msg << a << &a;  // Uses namespace1::operator<<.\n  EXPECT_STREQ(\"1(1)\", msg.GetString().c_str());\n}\n\n// Tests streaming a user type whose definition is in a user namespace\n// but whose operator<< is in the global namespace.\nnamespace namespace2 {\nclass MyTypeInNameSpace2 : public ::Base {\n public:\n  explicit MyTypeInNameSpace2(int an_x): Base(an_x) {}\n};\n}  // namespace namespace2\nstd::ostream& operator<<(std::ostream& os,\n                         const namespace2::MyTypeInNameSpace2& val) {\n  return os << val.x();\n}\nstd::ostream& operator<<(std::ostream& os,\n                         const namespace2::MyTypeInNameSpace2* pointer) {\n  return os << \"(\" << pointer->x() << \")\";\n}\n\nTEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) {\n  Message msg;\n  namespace2::MyTypeInNameSpace2 a(1);\n\n  msg << a << &a;  // Uses ::operator<<.\n  EXPECT_STREQ(\"1(1)\", msg.GetString().c_str());\n}\n\n// Tests streaming NULL pointers to testing::Message.\nTEST(MessageTest, NullPointers) {\n  Message msg;\n  char* const p1 = NULL;\n  unsigned char* const p2 = NULL;\n  int* p3 = NULL;\n  double* p4 = NULL;\n  bool* p5 = NULL;\n  Message* p6 = NULL;\n\n  msg << p1 << p2 << p3 << p4 << p5 << p6;\n  ASSERT_STREQ(\"(null)(null)(null)(null)(null)(null)\",\n               msg.GetString().c_str());\n}\n\n// Tests streaming wide strings to testing::Message.\nTEST(MessageTest, WideStrings) {\n  // Streams a NULL of type const wchar_t*.\n  const wchar_t* const_wstr = NULL;\n  EXPECT_STREQ(\"(null)\",\n               (Message() << const_wstr).GetString().c_str());\n\n  // Streams a NULL of type wchar_t*.\n  wchar_t* wstr = NULL;\n  EXPECT_STREQ(\"(null)\",\n               (Message() << wstr).GetString().c_str());\n\n  // Streams a non-NULL of type const wchar_t*.\n  const_wstr = L\"abc\\x8119\";\n  EXPECT_STREQ(\"abc\\xe8\\x84\\x99\",\n               (Message() << const_wstr).GetString().c_str());\n\n  // Streams a non-NULL of type wchar_t*.\n  wstr = const_cast<wchar_t*>(const_wstr);\n  EXPECT_STREQ(\"abc\\xe8\\x84\\x99\",\n               (Message() << wstr).GetString().c_str());\n}\n\n\n// This line tests that we can define tests in the testing namespace.\nnamespace testing {\n\n// Tests the TestInfo class.\n\nclass TestInfoTest : public Test {\n protected:\n  static const TestInfo* GetTestInfo(const char* test_name) {\n    const TestCase* const test_case = GetUnitTestImpl()->\n        GetTestCase(\"TestInfoTest\", \"\", NULL, NULL);\n\n    for (int i = 0; i < test_case->total_test_count(); ++i) {\n      const TestInfo* const test_info = test_case->GetTestInfo(i);\n      if (strcmp(test_name, test_info->name()) == 0)\n        return test_info;\n    }\n    return NULL;\n  }\n\n  static const TestResult* GetTestResult(\n      const TestInfo* test_info) {\n    return test_info->result();\n  }\n};\n\n// Tests TestInfo::test_case_name() and TestInfo::name().\nTEST_F(TestInfoTest, Names) {\n  const TestInfo* const test_info = GetTestInfo(\"Names\");\n\n  ASSERT_STREQ(\"TestInfoTest\", test_info->test_case_name());\n  ASSERT_STREQ(\"Names\", test_info->name());\n}\n\n// Tests TestInfo::result().\nTEST_F(TestInfoTest, result) {\n  const TestInfo* const test_info = GetTestInfo(\"result\");\n\n  // Initially, there is no TestPartResult for this test.\n  ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());\n\n  // After the previous assertion, there is still none.\n  ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());\n}\n\n// Tests setting up and tearing down a test case.\n\nclass SetUpTestCaseTest : public Test {\n protected:\n  // This will be called once before the first test in this test case\n  // is run.\n  static void SetUpTestCase() {\n    printf(\"Setting up the test case . . .\\n\");\n\n    // Initializes some shared resource.  In this simple example, we\n    // just create a C string.  More complex stuff can be done if\n    // desired.\n    shared_resource_ = \"123\";\n\n    // Increments the number of test cases that have been set up.\n    counter_++;\n\n    // SetUpTestCase() should be called only once.\n    EXPECT_EQ(1, counter_);\n  }\n\n  // This will be called once after the last test in this test case is\n  // run.\n  static void TearDownTestCase() {\n    printf(\"Tearing down the test case . . .\\n\");\n\n    // Decrements the number of test cases that have been set up.\n    counter_--;\n\n    // TearDownTestCase() should be called only once.\n    EXPECT_EQ(0, counter_);\n\n    // Cleans up the shared resource.\n    shared_resource_ = NULL;\n  }\n\n  // This will be called before each test in this test case.\n  virtual void SetUp() {\n    // SetUpTestCase() should be called only once, so counter_ should\n    // always be 1.\n    EXPECT_EQ(1, counter_);\n  }\n\n  // Number of test cases that have been set up.\n  static int counter_;\n\n  // Some resource to be shared by all tests in this test case.\n  static const char* shared_resource_;\n};\n\nint SetUpTestCaseTest::counter_ = 0;\nconst char* SetUpTestCaseTest::shared_resource_ = NULL;\n\n// A test that uses the shared resource.\nTEST_F(SetUpTestCaseTest, Test1) {\n  EXPECT_STRNE(NULL, shared_resource_);\n}\n\n// Another test that uses the shared resource.\nTEST_F(SetUpTestCaseTest, Test2) {\n  EXPECT_STREQ(\"123\", shared_resource_);\n}\n\n// The InitGoogleTestTest test case tests testing::InitGoogleTest().\n\n// The Flags struct stores a copy of all Google Test flags.\nstruct Flags {\n  // Constructs a Flags struct where each flag has its default value.\n  Flags() : also_run_disabled_tests(false),\n            break_on_failure(false),\n            catch_exceptions(false),\n            death_test_use_fork(false),\n            filter(\"\"),\n            list_tests(false),\n            output(\"\"),\n            print_time(true),\n            random_seed(0),\n            repeat(1),\n            shuffle(false),\n            stack_trace_depth(kMaxStackTraceDepth),\n            stream_result_to(\"\"),\n            throw_on_failure(false) {}\n\n  // Factory methods.\n\n  // Creates a Flags struct where the gtest_also_run_disabled_tests flag has\n  // the given value.\n  static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) {\n    Flags flags;\n    flags.also_run_disabled_tests = also_run_disabled_tests;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_break_on_failure flag has\n  // the given value.\n  static Flags BreakOnFailure(bool break_on_failure) {\n    Flags flags;\n    flags.break_on_failure = break_on_failure;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_catch_exceptions flag has\n  // the given value.\n  static Flags CatchExceptions(bool catch_exceptions) {\n    Flags flags;\n    flags.catch_exceptions = catch_exceptions;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_death_test_use_fork flag has\n  // the given value.\n  static Flags DeathTestUseFork(bool death_test_use_fork) {\n    Flags flags;\n    flags.death_test_use_fork = death_test_use_fork;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_filter flag has the given\n  // value.\n  static Flags Filter(const char* filter) {\n    Flags flags;\n    flags.filter = filter;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_list_tests flag has the\n  // given value.\n  static Flags ListTests(bool list_tests) {\n    Flags flags;\n    flags.list_tests = list_tests;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_output flag has the given\n  // value.\n  static Flags Output(const char* output) {\n    Flags flags;\n    flags.output = output;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_print_time flag has the given\n  // value.\n  static Flags PrintTime(bool print_time) {\n    Flags flags;\n    flags.print_time = print_time;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_random_seed flag has\n  // the given value.\n  static Flags RandomSeed(Int32 random_seed) {\n    Flags flags;\n    flags.random_seed = random_seed;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_repeat flag has the given\n  // value.\n  static Flags Repeat(Int32 repeat) {\n    Flags flags;\n    flags.repeat = repeat;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_shuffle flag has\n  // the given value.\n  static Flags Shuffle(bool shuffle) {\n    Flags flags;\n    flags.shuffle = shuffle;\n    return flags;\n  }\n\n  // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has\n  // the given value.\n  static Flags StackTraceDepth(Int32 stack_trace_depth) {\n    Flags flags;\n    flags.stack_trace_depth = stack_trace_depth;\n    return flags;\n  }\n\n  // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has\n  // the given value.\n  static Flags StreamResultTo(const char* stream_result_to) {\n    Flags flags;\n    flags.stream_result_to = stream_result_to;\n    return flags;\n  }\n\n  // Creates a Flags struct where the gtest_throw_on_failure flag has\n  // the given value.\n  static Flags ThrowOnFailure(bool throw_on_failure) {\n    Flags flags;\n    flags.throw_on_failure = throw_on_failure;\n    return flags;\n  }\n\n  // These fields store the flag values.\n  bool also_run_disabled_tests;\n  bool break_on_failure;\n  bool catch_exceptions;\n  bool death_test_use_fork;\n  const char* filter;\n  bool list_tests;\n  const char* output;\n  bool print_time;\n  Int32 random_seed;\n  Int32 repeat;\n  bool shuffle;\n  Int32 stack_trace_depth;\n  const char* stream_result_to;\n  bool throw_on_failure;\n};\n\n// Fixture for testing InitGoogleTest().\nclass InitGoogleTestTest : public Test {\n protected:\n  // Clears the flags before each test.\n  virtual void SetUp() {\n    GTEST_FLAG(also_run_disabled_tests) = false;\n    GTEST_FLAG(break_on_failure) = false;\n    GTEST_FLAG(catch_exceptions) = false;\n    GTEST_FLAG(death_test_use_fork) = false;\n    GTEST_FLAG(filter) = \"\";\n    GTEST_FLAG(list_tests) = false;\n    GTEST_FLAG(output) = \"\";\n    GTEST_FLAG(print_time) = true;\n    GTEST_FLAG(random_seed) = 0;\n    GTEST_FLAG(repeat) = 1;\n    GTEST_FLAG(shuffle) = false;\n    GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;\n    GTEST_FLAG(stream_result_to) = \"\";\n    GTEST_FLAG(throw_on_failure) = false;\n  }\n\n  // Asserts that two narrow or wide string arrays are equal.\n  template <typename CharType>\n  static void AssertStringArrayEq(size_t size1, CharType** array1,\n                                  size_t size2, CharType** array2) {\n    ASSERT_EQ(size1, size2) << \" Array sizes different.\";\n\n    for (size_t i = 0; i != size1; i++) {\n      ASSERT_STREQ(array1[i], array2[i]) << \" where i == \" << i;\n    }\n  }\n\n  // Verifies that the flag values match the expected values.\n  static void CheckFlags(const Flags& expected) {\n    EXPECT_EQ(expected.also_run_disabled_tests,\n              GTEST_FLAG(also_run_disabled_tests));\n    EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure));\n    EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions));\n    EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork));\n    EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str());\n    EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests));\n    EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str());\n    EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time));\n    EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed));\n    EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat));\n    EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle));\n    EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth));\n    EXPECT_STREQ(expected.stream_result_to,\n                 GTEST_FLAG(stream_result_to).c_str());\n    EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure));\n  }\n\n  // Parses a command line (specified by argc1 and argv1), then\n  // verifies that the flag values are expected and that the\n  // recognized flags are removed from the command line.\n  template <typename CharType>\n  static void TestParsingFlags(int argc1, const CharType** argv1,\n                               int argc2, const CharType** argv2,\n                               const Flags& expected, bool should_print_help) {\n    const bool saved_help_flag = ::testing::internal::g_help_flag;\n    ::testing::internal::g_help_flag = false;\n\n#if GTEST_HAS_STREAM_REDIRECTION\n    CaptureStdout();\n#endif\n\n    // Parses the command line.\n    internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1));\n\n#if GTEST_HAS_STREAM_REDIRECTION\n    const std::string captured_stdout = GetCapturedStdout();\n#endif\n\n    // Verifies the flag values.\n    CheckFlags(expected);\n\n    // Verifies that the recognized flags are removed from the command\n    // line.\n    AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2);\n\n    // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the\n    // help message for the flags it recognizes.\n    EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag);\n\n#if GTEST_HAS_STREAM_REDIRECTION\n    const char* const expected_help_fragment =\n        \"This program contains tests written using\";\n    if (should_print_help) {\n      EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout);\n    } else {\n      EXPECT_PRED_FORMAT2(IsNotSubstring,\n                          expected_help_fragment, captured_stdout);\n    }\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\n    ::testing::internal::g_help_flag = saved_help_flag;\n  }\n\n  // This macro wraps TestParsingFlags s.t. the user doesn't need\n  // to specify the array sizes.\n\n#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \\\n  TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \\\n                   sizeof(argv2)/sizeof(*argv2) - 1, argv2, \\\n                   expected, should_print_help)\n};\n\n// Tests parsing an empty command line.\nTEST_F(InitGoogleTestTest, Empty) {\n  const char* argv[] = {\n    NULL\n  };\n\n  const char* argv2[] = {\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);\n}\n\n// Tests parsing a command line that has no flag.\nTEST_F(InitGoogleTestTest, NoFlag) {\n  const char* argv[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);\n}\n\n// Tests parsing a bad --gtest_filter flag.\nTEST_F(InitGoogleTestTest, FilterBad) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_filter\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    \"--gtest_filter\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(\"\"), true);\n}\n\n// Tests parsing an empty --gtest_filter flag.\nTEST_F(InitGoogleTestTest, FilterEmpty) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_filter=\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(\"\"), false);\n}\n\n// Tests parsing a non-empty --gtest_filter flag.\nTEST_F(InitGoogleTestTest, FilterNonEmpty) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_filter=abc\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(\"abc\"), false);\n}\n\n// Tests parsing --gtest_break_on_failure.\nTEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure\",\n    NULL\n};\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);\n}\n\n// Tests parsing --gtest_break_on_failure=0.\nTEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure=0\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);\n}\n\n// Tests parsing --gtest_break_on_failure=f.\nTEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure=f\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);\n}\n\n// Tests parsing --gtest_break_on_failure=F.\nTEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure=F\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);\n}\n\n// Tests parsing a --gtest_break_on_failure flag that has a \"true\"\n// definition.\nTEST_F(InitGoogleTestTest, BreakOnFailureTrue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure=1\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);\n}\n\n// Tests parsing --gtest_catch_exceptions.\nTEST_F(InitGoogleTestTest, CatchExceptions) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_catch_exceptions\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false);\n}\n\n// Tests parsing --gtest_death_test_use_fork.\nTEST_F(InitGoogleTestTest, DeathTestUseFork) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_death_test_use_fork\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false);\n}\n\n// Tests having the same flag twice with different values.  The\n// expected behavior is that the one coming last takes precedence.\nTEST_F(InitGoogleTestTest, DuplicatedFlags) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_filter=a\",\n    \"--gtest_filter=b\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(\"b\"), false);\n}\n\n// Tests having an unrecognized flag on the command line.\nTEST_F(InitGoogleTestTest, UnrecognizedFlag) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_break_on_failure\",\n    \"bar\",  // Unrecognized by Google Test.\n    \"--gtest_filter=b\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    \"bar\",\n    NULL\n  };\n\n  Flags flags;\n  flags.break_on_failure = true;\n  flags.filter = \"b\";\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false);\n}\n\n// Tests having a --gtest_list_tests flag\nTEST_F(InitGoogleTestTest, ListTestsFlag) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_list_tests\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);\n}\n\n// Tests having a --gtest_list_tests flag with a \"true\" value\nTEST_F(InitGoogleTestTest, ListTestsTrue) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_list_tests=1\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);\n}\n\n// Tests having a --gtest_list_tests flag with a \"false\" value\nTEST_F(InitGoogleTestTest, ListTestsFalse) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_list_tests=0\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);\n}\n\n// Tests parsing --gtest_list_tests=f.\nTEST_F(InitGoogleTestTest, ListTestsFalse_f) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_list_tests=f\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);\n}\n\n// Tests parsing --gtest_list_tests=F.\nTEST_F(InitGoogleTestTest, ListTestsFalse_F) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_list_tests=F\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);\n}\n\n// Tests parsing --gtest_output (invalid).\nTEST_F(InitGoogleTestTest, OutputEmpty) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_output\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    \"--gtest_output\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true);\n}\n\n// Tests parsing --gtest_output=xml\nTEST_F(InitGoogleTestTest, OutputXml) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_output=xml\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output(\"xml\"), false);\n}\n\n// Tests parsing --gtest_output=xml:file\nTEST_F(InitGoogleTestTest, OutputXmlFile) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_output=xml:file\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output(\"xml:file\"), false);\n}\n\n// Tests parsing --gtest_output=xml:directory/path/\nTEST_F(InitGoogleTestTest, OutputXmlDirectory) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_output=xml:directory/path/\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2,\n                            Flags::Output(\"xml:directory/path/\"), false);\n}\n\n// Tests having a --gtest_print_time flag\nTEST_F(InitGoogleTestTest, PrintTimeFlag) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_print_time\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);\n}\n\n// Tests having a --gtest_print_time flag with a \"true\" value\nTEST_F(InitGoogleTestTest, PrintTimeTrue) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_print_time=1\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);\n}\n\n// Tests having a --gtest_print_time flag with a \"false\" value\nTEST_F(InitGoogleTestTest, PrintTimeFalse) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_print_time=0\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);\n}\n\n// Tests parsing --gtest_print_time=f.\nTEST_F(InitGoogleTestTest, PrintTimeFalse_f) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_print_time=f\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);\n}\n\n// Tests parsing --gtest_print_time=F.\nTEST_F(InitGoogleTestTest, PrintTimeFalse_F) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_print_time=F\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);\n}\n\n// Tests parsing --gtest_random_seed=number\nTEST_F(InitGoogleTestTest, RandomSeed) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_random_seed=1000\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false);\n}\n\n// Tests parsing --gtest_repeat=number\nTEST_F(InitGoogleTestTest, Repeat) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_repeat=1000\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false);\n}\n\n// Tests having a --gtest_also_run_disabled_tests flag\nTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_also_run_disabled_tests\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2,\n                              Flags::AlsoRunDisabledTests(true), false);\n}\n\n// Tests having a --gtest_also_run_disabled_tests flag with a \"true\" value\nTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_also_run_disabled_tests=1\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2,\n                              Flags::AlsoRunDisabledTests(true), false);\n}\n\n// Tests having a --gtest_also_run_disabled_tests flag with a \"false\" value\nTEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) {\n    const char* argv[] = {\n      \"foo.exe\",\n      \"--gtest_also_run_disabled_tests=0\",\n      NULL\n    };\n\n    const char* argv2[] = {\n      \"foo.exe\",\n      NULL\n    };\n\n    GTEST_TEST_PARSING_FLAGS_(argv, argv2,\n                              Flags::AlsoRunDisabledTests(false), false);\n}\n\n// Tests parsing --gtest_shuffle.\nTEST_F(InitGoogleTestTest, ShuffleWithoutValue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_shuffle\",\n    NULL\n};\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);\n}\n\n// Tests parsing --gtest_shuffle=0.\nTEST_F(InitGoogleTestTest, ShuffleFalse_0) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_shuffle=0\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false);\n}\n\n// Tests parsing a --gtest_shuffle flag that has a \"true\"\n// definition.\nTEST_F(InitGoogleTestTest, ShuffleTrue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_shuffle=1\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);\n}\n\n// Tests parsing --gtest_stack_trace_depth=number.\nTEST_F(InitGoogleTestTest, StackTraceDepth) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_stack_trace_depth=5\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false);\n}\n\nTEST_F(InitGoogleTestTest, StreamResultTo) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_stream_result_to=localhost:1234\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(\n      argv, argv2, Flags::StreamResultTo(\"localhost:1234\"), false);\n}\n\n// Tests parsing --gtest_throw_on_failure.\nTEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_throw_on_failure\",\n    NULL\n};\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);\n}\n\n// Tests parsing --gtest_throw_on_failure=0.\nTEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_throw_on_failure=0\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false);\n}\n\n// Tests parsing a --gtest_throw_on_failure flag that has a \"true\"\n// definition.\nTEST_F(InitGoogleTestTest, ThrowOnFailureTrue) {\n  const char* argv[] = {\n    \"foo.exe\",\n    \"--gtest_throw_on_failure=1\",\n    NULL\n  };\n\n  const char* argv2[] = {\n    \"foo.exe\",\n    NULL\n  };\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);\n}\n\n#if GTEST_OS_WINDOWS\n// Tests parsing wide strings.\nTEST_F(InitGoogleTestTest, WideStrings) {\n  const wchar_t* argv[] = {\n    L\"foo.exe\",\n    L\"--gtest_filter=Foo*\",\n    L\"--gtest_list_tests=1\",\n    L\"--gtest_break_on_failure\",\n    L\"--non_gtest_flag\",\n    NULL\n  };\n\n  const wchar_t* argv2[] = {\n    L\"foo.exe\",\n    L\"--non_gtest_flag\",\n    NULL\n  };\n\n  Flags expected_flags;\n  expected_flags.break_on_failure = true;\n  expected_flags.filter = \"Foo*\";\n  expected_flags.list_tests = true;\n\n  GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false);\n}\n#endif  // GTEST_OS_WINDOWS\n\n// Tests current_test_info() in UnitTest.\nclass CurrentTestInfoTest : public Test {\n protected:\n  // Tests that current_test_info() returns NULL before the first test in\n  // the test case is run.\n  static void SetUpTestCase() {\n    // There should be no tests running at this point.\n    const TestInfo* test_info =\n      UnitTest::GetInstance()->current_test_info();\n    EXPECT_TRUE(test_info == NULL)\n        << \"There should be no tests running at this point.\";\n  }\n\n  // Tests that current_test_info() returns NULL after the last test in\n  // the test case has run.\n  static void TearDownTestCase() {\n    const TestInfo* test_info =\n      UnitTest::GetInstance()->current_test_info();\n    EXPECT_TRUE(test_info == NULL)\n        << \"There should be no tests running at this point.\";\n  }\n};\n\n// Tests that current_test_info() returns TestInfo for currently running\n// test by checking the expected test name against the actual one.\nTEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) {\n  const TestInfo* test_info =\n    UnitTest::GetInstance()->current_test_info();\n  ASSERT_TRUE(NULL != test_info)\n      << \"There is a test running so we should have a valid TestInfo.\";\n  EXPECT_STREQ(\"CurrentTestInfoTest\", test_info->test_case_name())\n      << \"Expected the name of the currently running test case.\";\n  EXPECT_STREQ(\"WorksForFirstTestInATestCase\", test_info->name())\n      << \"Expected the name of the currently running test.\";\n}\n\n// Tests that current_test_info() returns TestInfo for currently running\n// test by checking the expected test name against the actual one.  We\n// use this test to see that the TestInfo object actually changed from\n// the previous invocation.\nTEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) {\n  const TestInfo* test_info =\n    UnitTest::GetInstance()->current_test_info();\n  ASSERT_TRUE(NULL != test_info)\n      << \"There is a test running so we should have a valid TestInfo.\";\n  EXPECT_STREQ(\"CurrentTestInfoTest\", test_info->test_case_name())\n      << \"Expected the name of the currently running test case.\";\n  EXPECT_STREQ(\"WorksForSecondTestInATestCase\", test_info->name())\n      << \"Expected the name of the currently running test.\";\n}\n\n}  // namespace testing\n\n// These two lines test that we can define tests in a namespace that\n// has the name \"testing\" and is nested in another namespace.\nnamespace my_namespace {\nnamespace testing {\n\n// Makes sure that TEST knows to use ::testing::Test instead of\n// ::my_namespace::testing::Test.\nclass Test {};\n\n// Makes sure that an assertion knows to use ::testing::Message instead of\n// ::my_namespace::testing::Message.\nclass Message {};\n\n// Makes sure that an assertion knows to use\n// ::testing::AssertionResult instead of\n// ::my_namespace::testing::AssertionResult.\nclass AssertionResult {};\n\n// Tests that an assertion that should succeed works as expected.\nTEST(NestedTestingNamespaceTest, Success) {\n  EXPECT_EQ(1, 1) << \"This shouldn't fail.\";\n}\n\n// Tests that an assertion that should fail works as expected.\nTEST(NestedTestingNamespaceTest, Failure) {\n  EXPECT_FATAL_FAILURE(FAIL() << \"This failure is expected.\",\n                       \"This failure is expected.\");\n}\n\n}  // namespace testing\n}  // namespace my_namespace\n\n// Tests that one can call superclass SetUp and TearDown methods--\n// that is, that they are not private.\n// No tests are based on this fixture; the test \"passes\" if it compiles\n// successfully.\nclass ProtectedFixtureMethodsTest : public Test {\n protected:\n  virtual void SetUp() {\n    Test::SetUp();\n  }\n  virtual void TearDown() {\n    Test::TearDown();\n  }\n};\n\n// StreamingAssertionsTest tests the streaming versions of a representative\n// sample of assertions.\nTEST(StreamingAssertionsTest, Unconditional) {\n  SUCCEED() << \"expected success\";\n  EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(FAIL() << \"expected failure\",\n                       \"expected failure\");\n}\n\n#ifdef __BORLANDC__\n// Silences warnings: \"Condition is always true\", \"Unreachable code\"\n# pragma option push -w-ccc -w-rch\n#endif\n\nTEST(StreamingAssertionsTest, Truth) {\n  EXPECT_TRUE(true) << \"unexpected failure\";\n  ASSERT_TRUE(true) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, Truth2) {\n  EXPECT_FALSE(false) << \"unexpected failure\";\n  ASSERT_FALSE(false) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << \"expected failure\",\n                       \"expected failure\");\n}\n\n#ifdef __BORLANDC__\n// Restores warnings after previous \"#pragma option push\" supressed them\n# pragma option pop\n#endif\n\nTEST(StreamingAssertionsTest, IntegerEquals) {\n  EXPECT_EQ(1, 1) << \"unexpected failure\";\n  ASSERT_EQ(1, 1) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, IntegerLessThan) {\n  EXPECT_LT(1, 2) << \"unexpected failure\";\n  ASSERT_LT(1, 2) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, StringsEqual) {\n  EXPECT_STREQ(\"foo\", \"foo\") << \"unexpected failure\";\n  ASSERT_STREQ(\"foo\", \"foo\") << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(\"foo\", \"bar\") << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_STREQ(\"foo\", \"bar\") << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, StringsNotEqual) {\n  EXPECT_STRNE(\"foo\", \"bar\") << \"unexpected failure\";\n  ASSERT_STRNE(\"foo\", \"bar\") << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(\"foo\", \"foo\") << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRNE(\"foo\", \"foo\") << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, StringsEqualIgnoringCase) {\n  EXPECT_STRCASEEQ(\"foo\", \"FOO\") << \"unexpected failure\";\n  ASSERT_STRCASEEQ(\"foo\", \"FOO\") << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(\"foo\", \"bar\") << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ(\"foo\", \"bar\") << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) {\n  EXPECT_STRCASENE(\"foo\", \"bar\") << \"unexpected failure\";\n  ASSERT_STRCASENE(\"foo\", \"bar\") << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE(\"foo\", \"FOO\") << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_STRCASENE(\"bar\", \"BAR\") << \"expected failure\",\n                       \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, FloatingPointEquals) {\n  EXPECT_FLOAT_EQ(1.0, 1.0) << \"unexpected failure\";\n  ASSERT_FLOAT_EQ(1.0, 1.0) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << \"expected failure\",\n                          \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << \"expected failure\",\n                       \"expected failure\");\n}\n\n#if GTEST_HAS_EXCEPTIONS\n\nTEST(StreamingAssertionsTest, Throw) {\n  EXPECT_THROW(ThrowAnInteger(), int) << \"unexpected failure\";\n  ASSERT_THROW(ThrowAnInteger(), int) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) <<\n                          \"expected failure\", \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) <<\n                       \"expected failure\", \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, NoThrow) {\n  EXPECT_NO_THROW(ThrowNothing()) << \"unexpected failure\";\n  ASSERT_NO_THROW(ThrowNothing()) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) <<\n                          \"expected failure\", \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) <<\n                       \"expected failure\", \"expected failure\");\n}\n\nTEST(StreamingAssertionsTest, AnyThrow) {\n  EXPECT_ANY_THROW(ThrowAnInteger()) << \"unexpected failure\";\n  ASSERT_ANY_THROW(ThrowAnInteger()) << \"unexpected failure\";\n  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) <<\n                          \"expected failure\", \"expected failure\");\n  EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) <<\n                       \"expected failure\", \"expected failure\");\n}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// Tests that Google Test correctly decides whether to use colors in the output.\n\nTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) {\n  GTEST_FLAG(color) = \"yes\";\n\n  SetEnv(\"TERM\", \"xterm\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.\n\n  SetEnv(\"TERM\", \"dumb\");  // TERM doesn't support colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.\n}\n\nTEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) {\n  SetEnv(\"TERM\", \"dumb\");  // TERM doesn't support colors.\n\n  GTEST_FLAG(color) = \"True\";\n  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.\n\n  GTEST_FLAG(color) = \"t\";\n  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.\n\n  GTEST_FLAG(color) = \"1\";\n  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.\n}\n\nTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) {\n  GTEST_FLAG(color) = \"no\";\n\n  SetEnv(\"TERM\", \"xterm\");  // TERM supports colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.\n\n  SetEnv(\"TERM\", \"dumb\");  // TERM doesn't support colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.\n}\n\nTEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) {\n  SetEnv(\"TERM\", \"xterm\");  // TERM supports colors.\n\n  GTEST_FLAG(color) = \"F\";\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  GTEST_FLAG(color) = \"0\";\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  GTEST_FLAG(color) = \"unknown\";\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n}\n\nTEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) {\n  GTEST_FLAG(color) = \"auto\";\n\n  SetEnv(\"TERM\", \"xterm\");  // TERM supports colors.\n  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.\n  EXPECT_TRUE(ShouldUseColor(true));    // Stdout is a TTY.\n}\n\nTEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) {\n  GTEST_FLAG(color) = \"auto\";\n\n#if GTEST_OS_WINDOWS\n  // On Windows, we ignore the TERM variable as it's usually not set.\n\n  SetEnv(\"TERM\", \"dumb\");\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"\");\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"xterm\");\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n#else\n  // On non-Windows platforms, we rely on TERM to determine if the\n  // terminal supports colors.\n\n  SetEnv(\"TERM\", \"dumb\");  // TERM doesn't support colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"emacs\");  // TERM doesn't support colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"vt100\");  // TERM doesn't support colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"xterm-mono\");  // TERM doesn't support colors.\n  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"xterm\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"xterm-color\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"xterm-256color\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"screen\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"screen-256color\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"linux\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n\n  SetEnv(\"TERM\", \"cygwin\");  // TERM supports colors.\n  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.\n#endif  // GTEST_OS_WINDOWS\n}\n\n// Verifies that StaticAssertTypeEq works in a namespace scope.\n\nstatic bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>();\nstatic bool dummy2 GTEST_ATTRIBUTE_UNUSED_ =\n    StaticAssertTypeEq<const int, const int>();\n\n// Verifies that StaticAssertTypeEq works in a class.\n\ntemplate <typename T>\nclass StaticAssertTypeEqTestHelper {\n public:\n  StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); }\n};\n\nTEST(StaticAssertTypeEqTest, WorksInClass) {\n  StaticAssertTypeEqTestHelper<bool>();\n}\n\n// Verifies that StaticAssertTypeEq works inside a function.\n\ntypedef int IntAlias;\n\nTEST(StaticAssertTypeEqTest, CompilesForEqualTypes) {\n  StaticAssertTypeEq<int, IntAlias>();\n  StaticAssertTypeEq<int*, IntAlias*>();\n}\n\nTEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) {\n  testing::UnitTest* const unit_test = testing::UnitTest::GetInstance();\n\n  // We don't have a stack walker in Google Test yet.\n  EXPECT_STREQ(\"\", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str());\n  EXPECT_STREQ(\"\", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str());\n}\n\nTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) {\n  EXPECT_FALSE(HasNonfatalFailure());\n}\n\nstatic void FailFatally() { FAIL(); }\n\nTEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) {\n  FailFatally();\n  const bool has_nonfatal_failure = HasNonfatalFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_FALSE(has_nonfatal_failure);\n}\n\nTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {\n  ADD_FAILURE();\n  const bool has_nonfatal_failure = HasNonfatalFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_nonfatal_failure);\n}\n\nTEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {\n  FailFatally();\n  ADD_FAILURE();\n  const bool has_nonfatal_failure = HasNonfatalFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_nonfatal_failure);\n}\n\n// A wrapper for calling HasNonfatalFailure outside of a test body.\nstatic bool HasNonfatalFailureHelper() {\n  return testing::Test::HasNonfatalFailure();\n}\n\nTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) {\n  EXPECT_FALSE(HasNonfatalFailureHelper());\n}\n\nTEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) {\n  ADD_FAILURE();\n  const bool has_nonfatal_failure = HasNonfatalFailureHelper();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_nonfatal_failure);\n}\n\nTEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) {\n  EXPECT_FALSE(HasFailure());\n}\n\nTEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) {\n  FailFatally();\n  const bool has_failure = HasFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_failure);\n}\n\nTEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {\n  ADD_FAILURE();\n  const bool has_failure = HasFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_failure);\n}\n\nTEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {\n  FailFatally();\n  ADD_FAILURE();\n  const bool has_failure = HasFailure();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_failure);\n}\n\n// A wrapper for calling HasFailure outside of a test body.\nstatic bool HasFailureHelper() { return testing::Test::HasFailure(); }\n\nTEST(HasFailureTest, WorksOutsideOfTestBody) {\n  EXPECT_FALSE(HasFailureHelper());\n}\n\nTEST(HasFailureTest, WorksOutsideOfTestBody2) {\n  ADD_FAILURE();\n  const bool has_failure = HasFailureHelper();\n  ClearCurrentTestPartResults();\n  EXPECT_TRUE(has_failure);\n}\n\nclass TestListener : public EmptyTestEventListener {\n public:\n  TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {}\n  TestListener(int* on_start_counter, bool* is_destroyed)\n      : on_start_counter_(on_start_counter),\n        is_destroyed_(is_destroyed) {}\n\n  virtual ~TestListener() {\n    if (is_destroyed_)\n      *is_destroyed_ = true;\n  }\n\n protected:\n  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {\n    if (on_start_counter_ != NULL)\n      (*on_start_counter_)++;\n  }\n\n private:\n  int* on_start_counter_;\n  bool* is_destroyed_;\n};\n\n// Tests the constructor.\nTEST(TestEventListenersTest, ConstructionWorks) {\n  TestEventListeners listeners;\n\n  EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL);\n  EXPECT_TRUE(listeners.default_result_printer() == NULL);\n  EXPECT_TRUE(listeners.default_xml_generator() == NULL);\n}\n\n// Tests that the TestEventListeners destructor deletes all the listeners it\n// owns.\nTEST(TestEventListenersTest, DestructionWorks) {\n  bool default_result_printer_is_destroyed = false;\n  bool default_xml_printer_is_destroyed = false;\n  bool extra_listener_is_destroyed = false;\n  TestListener* default_result_printer = new TestListener(\n      NULL, &default_result_printer_is_destroyed);\n  TestListener* default_xml_printer = new TestListener(\n      NULL, &default_xml_printer_is_destroyed);\n  TestListener* extra_listener = new TestListener(\n      NULL, &extra_listener_is_destroyed);\n\n  {\n    TestEventListeners listeners;\n    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners,\n                                                        default_result_printer);\n    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners,\n                                                       default_xml_printer);\n    listeners.Append(extra_listener);\n  }\n  EXPECT_TRUE(default_result_printer_is_destroyed);\n  EXPECT_TRUE(default_xml_printer_is_destroyed);\n  EXPECT_TRUE(extra_listener_is_destroyed);\n}\n\n// Tests that a listener Append'ed to a TestEventListeners list starts\n// receiving events.\nTEST(TestEventListenersTest, Append) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n  {\n    TestEventListeners listeners;\n    listeners.Append(listener);\n    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n        *UnitTest::GetInstance());\n    EXPECT_EQ(1, on_start_counter);\n  }\n  EXPECT_TRUE(is_destroyed);\n}\n\n// Tests that listeners receive events in the order they were appended to\n// the list, except for *End requests, which must be received in the reverse\n// order.\nclass SequenceTestingListener : public EmptyTestEventListener {\n public:\n  SequenceTestingListener(std::vector<std::string>* vector, const char* id)\n      : vector_(vector), id_(id) {}\n\n protected:\n  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {\n    vector_->push_back(GetEventDescription(\"OnTestProgramStart\"));\n  }\n\n  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {\n    vector_->push_back(GetEventDescription(\"OnTestProgramEnd\"));\n  }\n\n  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,\n                                    int /*iteration*/) {\n    vector_->push_back(GetEventDescription(\"OnTestIterationStart\"));\n  }\n\n  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,\n                                  int /*iteration*/) {\n    vector_->push_back(GetEventDescription(\"OnTestIterationEnd\"));\n  }\n\n private:\n  std::string GetEventDescription(const char* method) {\n    Message message;\n    message << id_ << \".\" << method;\n    return message.GetString();\n  }\n\n  std::vector<std::string>* vector_;\n  const char* const id_;\n\n  GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener);\n};\n\nTEST(EventListenerTest, AppendKeepsOrder) {\n  std::vector<std::string> vec;\n  TestEventListeners listeners;\n  listeners.Append(new SequenceTestingListener(&vec, \"1st\"));\n  listeners.Append(new SequenceTestingListener(&vec, \"2nd\"));\n  listeners.Append(new SequenceTestingListener(&vec, \"3rd\"));\n\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n  ASSERT_EQ(3U, vec.size());\n  EXPECT_STREQ(\"1st.OnTestProgramStart\", vec[0].c_str());\n  EXPECT_STREQ(\"2nd.OnTestProgramStart\", vec[1].c_str());\n  EXPECT_STREQ(\"3rd.OnTestProgramStart\", vec[2].c_str());\n\n  vec.clear();\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd(\n      *UnitTest::GetInstance());\n  ASSERT_EQ(3U, vec.size());\n  EXPECT_STREQ(\"3rd.OnTestProgramEnd\", vec[0].c_str());\n  EXPECT_STREQ(\"2nd.OnTestProgramEnd\", vec[1].c_str());\n  EXPECT_STREQ(\"1st.OnTestProgramEnd\", vec[2].c_str());\n\n  vec.clear();\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart(\n      *UnitTest::GetInstance(), 0);\n  ASSERT_EQ(3U, vec.size());\n  EXPECT_STREQ(\"1st.OnTestIterationStart\", vec[0].c_str());\n  EXPECT_STREQ(\"2nd.OnTestIterationStart\", vec[1].c_str());\n  EXPECT_STREQ(\"3rd.OnTestIterationStart\", vec[2].c_str());\n\n  vec.clear();\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd(\n      *UnitTest::GetInstance(), 0);\n  ASSERT_EQ(3U, vec.size());\n  EXPECT_STREQ(\"3rd.OnTestIterationEnd\", vec[0].c_str());\n  EXPECT_STREQ(\"2nd.OnTestIterationEnd\", vec[1].c_str());\n  EXPECT_STREQ(\"1st.OnTestIterationEnd\", vec[2].c_str());\n}\n\n// Tests that a listener removed from a TestEventListeners list stops receiving\n// events and is not deleted when the list is destroyed.\nTEST(TestEventListenersTest, Release) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  // Although Append passes the ownership of this object to the list,\n  // the following calls release it, and we need to delete it before the\n  // test ends.\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n  {\n    TestEventListeners listeners;\n    listeners.Append(listener);\n    EXPECT_EQ(listener, listeners.Release(listener));\n    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n        *UnitTest::GetInstance());\n    EXPECT_TRUE(listeners.Release(listener) == NULL);\n  }\n  EXPECT_EQ(0, on_start_counter);\n  EXPECT_FALSE(is_destroyed);\n  delete listener;\n}\n\n// Tests that no events are forwarded when event forwarding is disabled.\nTEST(EventListenerTest, SuppressEventForwarding) {\n  int on_start_counter = 0;\n  TestListener* listener = new TestListener(&on_start_counter, NULL);\n\n  TestEventListeners listeners;\n  listeners.Append(listener);\n  ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners));\n  TestEventListenersAccessor::SuppressEventForwarding(&listeners);\n  ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners));\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n  EXPECT_EQ(0, on_start_counter);\n}\n\n// Tests that events generated by Google Test are not forwarded in\n// death test subprocesses.\nTEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) {\n  EXPECT_DEATH_IF_SUPPORTED({\n      GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled(\n          *GetUnitTestImpl()->listeners())) << \"expected failure\";},\n      \"expected failure\");\n}\n\n// Tests that a listener installed via SetDefaultResultPrinter() starts\n// receiving events and is returned via default_result_printer() and that\n// the previous default_result_printer is removed from the list and deleted.\nTEST(EventListenerTest, default_result_printer) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n\n  TestEventListeners listeners;\n  TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);\n\n  EXPECT_EQ(listener, listeners.default_result_printer());\n\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n\n  EXPECT_EQ(1, on_start_counter);\n\n  // Replacing default_result_printer with something else should remove it\n  // from the list and destroy it.\n  TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL);\n\n  EXPECT_TRUE(listeners.default_result_printer() == NULL);\n  EXPECT_TRUE(is_destroyed);\n\n  // After broadcasting an event the counter is still the same, indicating\n  // the listener is not in the list anymore.\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n  EXPECT_EQ(1, on_start_counter);\n}\n\n// Tests that the default_result_printer listener stops receiving events\n// when removed via Release and that is not owned by the list anymore.\nTEST(EventListenerTest, RemovingDefaultResultPrinterWorks) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  // Although Append passes the ownership of this object to the list,\n  // the following calls release it, and we need to delete it before the\n  // test ends.\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n  {\n    TestEventListeners listeners;\n    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);\n\n    EXPECT_EQ(listener, listeners.Release(listener));\n    EXPECT_TRUE(listeners.default_result_printer() == NULL);\n    EXPECT_FALSE(is_destroyed);\n\n    // Broadcasting events now should not affect default_result_printer.\n    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n        *UnitTest::GetInstance());\n    EXPECT_EQ(0, on_start_counter);\n  }\n  // Destroying the list should not affect the listener now, too.\n  EXPECT_FALSE(is_destroyed);\n  delete listener;\n}\n\n// Tests that a listener installed via SetDefaultXmlGenerator() starts\n// receiving events and is returned via default_xml_generator() and that\n// the previous default_xml_generator is removed from the list and deleted.\nTEST(EventListenerTest, default_xml_generator) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n\n  TestEventListeners listeners;\n  TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);\n\n  EXPECT_EQ(listener, listeners.default_xml_generator());\n\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n\n  EXPECT_EQ(1, on_start_counter);\n\n  // Replacing default_xml_generator with something else should remove it\n  // from the list and destroy it.\n  TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL);\n\n  EXPECT_TRUE(listeners.default_xml_generator() == NULL);\n  EXPECT_TRUE(is_destroyed);\n\n  // After broadcasting an event the counter is still the same, indicating\n  // the listener is not in the list anymore.\n  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n      *UnitTest::GetInstance());\n  EXPECT_EQ(1, on_start_counter);\n}\n\n// Tests that the default_xml_generator listener stops receiving events\n// when removed via Release and that is not owned by the list anymore.\nTEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) {\n  int on_start_counter = 0;\n  bool is_destroyed = false;\n  // Although Append passes the ownership of this object to the list,\n  // the following calls release it, and we need to delete it before the\n  // test ends.\n  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);\n  {\n    TestEventListeners listeners;\n    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);\n\n    EXPECT_EQ(listener, listeners.Release(listener));\n    EXPECT_TRUE(listeners.default_xml_generator() == NULL);\n    EXPECT_FALSE(is_destroyed);\n\n    // Broadcasting events now should not affect default_xml_generator.\n    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(\n        *UnitTest::GetInstance());\n    EXPECT_EQ(0, on_start_counter);\n  }\n  // Destroying the list should not affect the listener now, too.\n  EXPECT_FALSE(is_destroyed);\n  delete listener;\n}\n\n// Sanity tests to ensure that the alternative, verbose spellings of\n// some of the macros work.  We don't test them thoroughly as that\n// would be quite involved.  Since their implementations are\n// straightforward, and they are rarely used, we'll just rely on the\n// users to tell us when they are broken.\nGTEST_TEST(AlternativeNameTest, Works) {  // GTEST_TEST is the same as TEST.\n  GTEST_SUCCEED() << \"OK\";  // GTEST_SUCCEED is the same as SUCCEED.\n\n  // GTEST_FAIL is the same as FAIL.\n  EXPECT_FATAL_FAILURE(GTEST_FAIL() << \"An expected failure\",\n                       \"An expected failure\");\n\n  // GTEST_ASSERT_XY is the same as ASSERT_XY.\n\n  GTEST_ASSERT_EQ(0, 0);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << \"An expected failure\",\n                       \"An expected failure\");\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << \"An expected failure\",\n                       \"An expected failure\");\n\n  GTEST_ASSERT_NE(0, 1);\n  GTEST_ASSERT_NE(1, 0);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << \"An expected failure\",\n                       \"An expected failure\");\n\n  GTEST_ASSERT_LE(0, 0);\n  GTEST_ASSERT_LE(0, 1);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << \"An expected failure\",\n                       \"An expected failure\");\n\n  GTEST_ASSERT_LT(0, 1);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << \"An expected failure\",\n                       \"An expected failure\");\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << \"An expected failure\",\n                       \"An expected failure\");\n\n  GTEST_ASSERT_GE(0, 0);\n  GTEST_ASSERT_GE(1, 0);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << \"An expected failure\",\n                       \"An expected failure\");\n\n  GTEST_ASSERT_GT(1, 0);\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << \"An expected failure\",\n                       \"An expected failure\");\n  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << \"An expected failure\",\n                       \"An expected failure\");\n}\n\n// Tests for internal utilities necessary for implementation of the universal\n// printing.\n// TODO(vladl@google.com): Find a better home for them.\n\nclass ConversionHelperBase {};\nclass ConversionHelperDerived : public ConversionHelperBase {};\n\n// Tests that IsAProtocolMessage<T>::value is a compile-time constant.\nTEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) {\n  GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value,\n                        const_true);\n  GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false);\n}\n\n// Tests that IsAProtocolMessage<T>::value is true when T is\n// proto2::Message or a sub-class of it.\nTEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) {\n  EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value);\n  EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value);\n}\n\n// Tests that IsAProtocolMessage<T>::value is false when T is neither\n// ProtocolMessage nor a sub-class of it.\nTEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) {\n  EXPECT_FALSE(IsAProtocolMessage<int>::value);\n  EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value);\n}\n\n// Tests that CompileAssertTypesEqual compiles when the type arguments are\n// equal.\nTEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) {\n  CompileAssertTypesEqual<void, void>();\n  CompileAssertTypesEqual<int*, int*>();\n}\n\n// Tests that RemoveReference does not affect non-reference types.\nTEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) {\n  CompileAssertTypesEqual<int, RemoveReference<int>::type>();\n  CompileAssertTypesEqual<const char, RemoveReference<const char>::type>();\n}\n\n// Tests that RemoveReference removes reference from reference types.\nTEST(RemoveReferenceTest, RemovesReference) {\n  CompileAssertTypesEqual<int, RemoveReference<int&>::type>();\n  CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>();\n}\n\n// Tests GTEST_REMOVE_REFERENCE_.\n\ntemplate <typename T1, typename T2>\nvoid TestGTestRemoveReference() {\n  CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>();\n}\n\nTEST(RemoveReferenceTest, MacroVersion) {\n  TestGTestRemoveReference<int, int>();\n  TestGTestRemoveReference<const char, const char&>();\n}\n\n\n// Tests that RemoveConst does not affect non-const types.\nTEST(RemoveConstTest, DoesNotAffectNonConstType) {\n  CompileAssertTypesEqual<int, RemoveConst<int>::type>();\n  CompileAssertTypesEqual<char&, RemoveConst<char&>::type>();\n}\n\n// Tests that RemoveConst removes const from const types.\nTEST(RemoveConstTest, RemovesConst) {\n  CompileAssertTypesEqual<int, RemoveConst<const int>::type>();\n  CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>();\n  CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>();\n}\n\n// Tests GTEST_REMOVE_CONST_.\n\ntemplate <typename T1, typename T2>\nvoid TestGTestRemoveConst() {\n  CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>();\n}\n\nTEST(RemoveConstTest, MacroVersion) {\n  TestGTestRemoveConst<int, int>();\n  TestGTestRemoveConst<double&, double&>();\n  TestGTestRemoveConst<char, const char>();\n}\n\n// Tests GTEST_REMOVE_REFERENCE_AND_CONST_.\n\ntemplate <typename T1, typename T2>\nvoid TestGTestRemoveReferenceAndConst() {\n  CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>();\n}\n\nTEST(RemoveReferenceToConstTest, Works) {\n  TestGTestRemoveReferenceAndConst<int, int>();\n  TestGTestRemoveReferenceAndConst<double, double&>();\n  TestGTestRemoveReferenceAndConst<char, const char>();\n  TestGTestRemoveReferenceAndConst<char, const char&>();\n  TestGTestRemoveReferenceAndConst<const char*, const char*>();\n}\n\n// Tests that AddReference does not affect reference types.\nTEST(AddReferenceTest, DoesNotAffectReferenceType) {\n  CompileAssertTypesEqual<int&, AddReference<int&>::type>();\n  CompileAssertTypesEqual<const char&, AddReference<const char&>::type>();\n}\n\n// Tests that AddReference adds reference to non-reference types.\nTEST(AddReferenceTest, AddsReference) {\n  CompileAssertTypesEqual<int&, AddReference<int>::type>();\n  CompileAssertTypesEqual<const char&, AddReference<const char>::type>();\n}\n\n// Tests GTEST_ADD_REFERENCE_.\n\ntemplate <typename T1, typename T2>\nvoid TestGTestAddReference() {\n  CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>();\n}\n\nTEST(AddReferenceTest, MacroVersion) {\n  TestGTestAddReference<int&, int>();\n  TestGTestAddReference<const char&, const char&>();\n}\n\n// Tests GTEST_REFERENCE_TO_CONST_.\n\ntemplate <typename T1, typename T2>\nvoid TestGTestReferenceToConst() {\n  CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>();\n}\n\nTEST(GTestReferenceToConstTest, Works) {\n  TestGTestReferenceToConst<const char&, char>();\n  TestGTestReferenceToConst<const int&, const int>();\n  TestGTestReferenceToConst<const double&, double>();\n  TestGTestReferenceToConst<const std::string&, const std::string&>();\n}\n\n// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant.\nTEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) {\n  GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true);\n  GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value),\n                        const_false);\n}\n\n// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can\n// be implicitly converted to T2.\nTEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) {\n  EXPECT_TRUE((ImplicitlyConvertible<int, double>::value));\n  EXPECT_TRUE((ImplicitlyConvertible<double, int>::value));\n  EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value));\n  EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value));\n  EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&,\n                                     const ConversionHelperBase&>::value));\n  EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase,\n                                     ConversionHelperBase>::value));\n}\n\n// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1\n// cannot be implicitly converted to T2.\nTEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) {\n  EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value));\n  EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value));\n  EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value));\n  EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&,\n                                      ConversionHelperDerived&>::value));\n}\n\n// Tests IsContainerTest.\n\nclass NonContainer {};\n\nTEST(IsContainerTestTest, WorksForNonContainer) {\n  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0)));\n  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0)));\n  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0)));\n}\n\nTEST(IsContainerTestTest, WorksForContainer) {\n  EXPECT_EQ(sizeof(IsContainer),\n            sizeof(IsContainerTest<std::vector<bool> >(0)));\n  EXPECT_EQ(sizeof(IsContainer),\n            sizeof(IsContainerTest<std::map<int, double> >(0)));\n}\n\n// Tests ArrayEq().\n\nTEST(ArrayEqTest, WorksForDegeneratedArrays) {\n  EXPECT_TRUE(ArrayEq(5, 5L));\n  EXPECT_FALSE(ArrayEq('a', 0));\n}\n\nTEST(ArrayEqTest, WorksForOneDimensionalArrays) {\n  // Note that a and b are distinct but compatible types.\n  const int a[] = { 0, 1 };\n  long b[] = { 0, 1 };\n  EXPECT_TRUE(ArrayEq(a, b));\n  EXPECT_TRUE(ArrayEq(a, 2, b));\n\n  b[0] = 2;\n  EXPECT_FALSE(ArrayEq(a, b));\n  EXPECT_FALSE(ArrayEq(a, 1, b));\n}\n\nTEST(ArrayEqTest, WorksForTwoDimensionalArrays) {\n  const char a[][3] = { \"hi\", \"lo\" };\n  const char b[][3] = { \"hi\", \"lo\" };\n  const char c[][3] = { \"hi\", \"li\" };\n\n  EXPECT_TRUE(ArrayEq(a, b));\n  EXPECT_TRUE(ArrayEq(a, 2, b));\n\n  EXPECT_FALSE(ArrayEq(a, c));\n  EXPECT_FALSE(ArrayEq(a, 2, c));\n}\n\n// Tests ArrayAwareFind().\n\nTEST(ArrayAwareFindTest, WorksForOneDimensionalArray) {\n  const char a[] = \"hello\";\n  EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o'));\n  EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x'));\n}\n\nTEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) {\n  int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };\n  const int b[2] = { 2, 3 };\n  EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b));\n\n  const int c[2] = { 6, 7 };\n  EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c));\n}\n\n// Tests CopyArray().\n\nTEST(CopyArrayTest, WorksForDegeneratedArrays) {\n  int n = 0;\n  CopyArray('a', &n);\n  EXPECT_EQ('a', n);\n}\n\nTEST(CopyArrayTest, WorksForOneDimensionalArrays) {\n  const char a[3] = \"hi\";\n  int b[3];\n#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.\n  CopyArray(a, &b);\n  EXPECT_TRUE(ArrayEq(a, b));\n#endif\n\n  int c[3];\n  CopyArray(a, 3, c);\n  EXPECT_TRUE(ArrayEq(a, c));\n}\n\nTEST(CopyArrayTest, WorksForTwoDimensionalArrays) {\n  const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } };\n  int b[2][3];\n#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.\n  CopyArray(a, &b);\n  EXPECT_TRUE(ArrayEq(a, b));\n#endif\n\n  int c[2][3];\n  CopyArray(a, 2, c);\n  EXPECT_TRUE(ArrayEq(a, c));\n}\n\n// Tests NativeArray.\n\nTEST(NativeArrayTest, ConstructorFromArrayWorks) {\n  const int a[3] = { 0, 1, 2 };\n  NativeArray<int> na(a, 3, kReference);\n  EXPECT_EQ(3U, na.size());\n  EXPECT_EQ(a, na.begin());\n}\n\nTEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) {\n  typedef int Array[2];\n  Array* a = new Array[1];\n  (*a)[0] = 0;\n  (*a)[1] = 1;\n  NativeArray<int> na(*a, 2, kCopy);\n  EXPECT_NE(*a, na.begin());\n  delete[] a;\n  EXPECT_EQ(0, na.begin()[0]);\n  EXPECT_EQ(1, na.begin()[1]);\n\n  // We rely on the heap checker to verify that na deletes the copy of\n  // array.\n}\n\nTEST(NativeArrayTest, TypeMembersAreCorrect) {\n  StaticAssertTypeEq<char, NativeArray<char>::value_type>();\n  StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>();\n\n  StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>();\n  StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>();\n}\n\nTEST(NativeArrayTest, MethodsWork) {\n  const int a[3] = { 0, 1, 2 };\n  NativeArray<int> na(a, 3, kCopy);\n  ASSERT_EQ(3U, na.size());\n  EXPECT_EQ(3, na.end() - na.begin());\n\n  NativeArray<int>::const_iterator it = na.begin();\n  EXPECT_EQ(0, *it);\n  ++it;\n  EXPECT_EQ(1, *it);\n  it++;\n  EXPECT_EQ(2, *it);\n  ++it;\n  EXPECT_EQ(na.end(), it);\n\n  EXPECT_TRUE(na == na);\n\n  NativeArray<int> na2(a, 3, kReference);\n  EXPECT_TRUE(na == na2);\n\n  const int b1[3] = { 0, 1, 1 };\n  const int b2[4] = { 0, 1, 2, 3 };\n  EXPECT_FALSE(na == NativeArray<int>(b1, 3, kReference));\n  EXPECT_FALSE(na == NativeArray<int>(b2, 4, kCopy));\n}\n\nTEST(NativeArrayTest, WorksForTwoDimensionalArray) {\n  const char a[2][3] = { \"hi\", \"lo\" };\n  NativeArray<char[3]> na(a, 2, kReference);\n  ASSERT_EQ(2U, na.size());\n  EXPECT_EQ(a, na.begin());\n}\n\n// Tests SkipPrefix().\n\nTEST(SkipPrefixTest, SkipsWhenPrefixMatches) {\n  const char* const str = \"hello\";\n\n  const char* p = str;\n  EXPECT_TRUE(SkipPrefix(\"\", &p));\n  EXPECT_EQ(str, p);\n\n  p = str;\n  EXPECT_TRUE(SkipPrefix(\"hell\", &p));\n  EXPECT_EQ(str + 4, p);\n}\n\nTEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) {\n  const char* const str = \"world\";\n\n  const char* p = str;\n  EXPECT_FALSE(SkipPrefix(\"W\", &p));\n  EXPECT_EQ(str, p);\n\n  p = str;\n  EXPECT_FALSE(SkipPrefix(\"world!\", &p));\n  EXPECT_EQ(str, p);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_outfile1_test_.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: keith.ray@gmail.com (Keith Ray)\n//\n// gtest_xml_outfile1_test_ writes some xml via TestProperty used by\n// gtest_xml_outfiles_test.py\n\n#include \"gtest/gtest.h\"\n\nclass PropertyOne : public testing::Test {\n protected:\n  virtual void SetUp() {\n    RecordProperty(\"SetUpProp\", 1);\n  }\n  virtual void TearDown() {\n    RecordProperty(\"TearDownProp\", 1);\n  }\n};\n\nTEST_F(PropertyOne, TestSomeProperties) {\n  RecordProperty(\"TestSomeProperty\", 1);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_outfile2_test_.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: keith.ray@gmail.com (Keith Ray)\n//\n// gtest_xml_outfile2_test_ writes some xml via TestProperty used by\n// gtest_xml_outfiles_test.py\n\n#include \"gtest/gtest.h\"\n\nclass PropertyTwo : public testing::Test {\n protected:\n  virtual void SetUp() {\n    RecordProperty(\"SetUpProp\", 2);\n  }\n  virtual void TearDown() {\n    RecordProperty(\"TearDownProp\", 2);\n  }\n};\n\nTEST_F(PropertyTwo, TestSomeProperties) {\n  RecordProperty(\"TestSomeProperty\", 2);\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_outfiles_test.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test for the gtest_xml_output module.\"\"\"\n\n__author__ = \"keith.ray@gmail.com (Keith Ray)\"\n\nimport os\nfrom xml.dom import minidom, Node\n\nimport gtest_test_utils\nimport gtest_xml_test_utils\n\n\nGTEST_OUTPUT_SUBDIR = \"xml_outfiles\"\nGTEST_OUTPUT_1_TEST = \"gtest_xml_outfile1_test_\"\nGTEST_OUTPUT_2_TEST = \"gtest_xml_outfile2_test_\"\n\nEXPECTED_XML_1 = \"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\" timestamp=\"*\" name=\"AllTests\">\n  <testsuite name=\"PropertyOne\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"TestSomeProperties\" status=\"run\" time=\"*\" classname=\"PropertyOne\" SetUpProp=\"1\" TestSomeProperty=\"1\" TearDownProp=\"1\" />\n  </testsuite>\n</testsuites>\n\"\"\"\n\nEXPECTED_XML_2 = \"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\" timestamp=\"*\" name=\"AllTests\">\n  <testsuite name=\"PropertyTwo\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"TestSomeProperties\" status=\"run\" time=\"*\" classname=\"PropertyTwo\" SetUpProp=\"2\" TestSomeProperty=\"2\" TearDownProp=\"2\" />\n  </testsuite>\n</testsuites>\n\"\"\"\n\n\nclass GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase):\n  \"\"\"Unit test for Google Test's XML output functionality.\"\"\"\n\n  def setUp(self):\n    # We want the trailing '/' that the last \"\" provides in os.path.join, for\n    # telling Google Test to create an output directory instead of a single file\n    # for xml output.\n    self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(),\n                                    GTEST_OUTPUT_SUBDIR, \"\")\n    self.DeleteFilesAndDir()\n\n  def tearDown(self):\n    self.DeleteFilesAndDir()\n\n  def DeleteFilesAndDir(self):\n    try:\n      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + \".xml\"))\n    except os.error:\n      pass\n    try:\n      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + \".xml\"))\n    except os.error:\n      pass\n    try:\n      os.rmdir(self.output_dir_)\n    except os.error:\n      pass\n\n  def testOutfile1(self):\n    self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_XML_1)\n\n  def testOutfile2(self):\n    self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_XML_2)\n\n  def _TestOutFile(self, test_name, expected_xml):\n    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)\n    command = [gtest_prog_path, \"--gtest_output=xml:%s\" % self.output_dir_]\n    p = gtest_test_utils.Subprocess(command,\n                                    working_dir=gtest_test_utils.GetTempDir())\n    self.assert_(p.exited)\n    self.assertEquals(0, p.exit_code)\n\n    # TODO(wan@google.com): libtool causes the built test binary to be\n    #   named lt-gtest_xml_outfiles_test_ instead of\n    #   gtest_xml_outfiles_test_.  To account for this possibillity, we\n    #   allow both names in the following code.  We should remove this\n    #   hack when Chandler Carruth's libtool replacement tool is ready.\n    output_file_name1 = test_name + \".xml\"\n    output_file1 = os.path.join(self.output_dir_, output_file_name1)\n    output_file_name2 = 'lt-' + output_file_name1\n    output_file2 = os.path.join(self.output_dir_, output_file_name2)\n    self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2),\n                 output_file1)\n\n    expected = minidom.parseString(expected_xml)\n    if os.path.isfile(output_file1):\n      actual = minidom.parse(output_file1)\n    else:\n      actual = minidom.parse(output_file2)\n    self.NormalizeXml(actual.documentElement)\n    self.AssertEquivalentNodes(expected.documentElement,\n                               actual.documentElement)\n    expected.unlink()\n    actual.unlink()\n\n\nif __name__ == \"__main__\":\n  os.environ[\"GTEST_STACK_TRACE_DEPTH\"] = \"0\"\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_output_unittest.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test for the gtest_xml_output module\"\"\"\n\n__author__ = 'eefacm@gmail.com (Sean Mcafee)'\n\nimport datetime\nimport errno\nimport os\nimport re\nimport sys\nfrom xml.dom import minidom, Node\n\nimport gtest_test_utils\nimport gtest_xml_test_utils\n\n\nGTEST_LIST_TESTS_FLAG = '--gtest_list_tests'\nGTEST_OUTPUT_FLAG         = \"--gtest_output\"\nGTEST_DEFAULT_OUTPUT_FILE = \"test_detail.xml\"\nGTEST_PROGRAM_NAME = \"gtest_xml_output_unittest_\"\n\nSUPPORTS_STACK_TRACES = False\n\nif SUPPORTS_STACK_TRACES:\n  STACK_TRACE_TEMPLATE = '\\nStack trace:\\n*'\nelse:\n  STACK_TRACE_TEMPLATE = ''\n\nEXPECTED_NON_EMPTY_XML = \"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"23\" failures=\"4\" disabled=\"2\" errors=\"0\" time=\"*\" timestamp=\"*\" name=\"AllTests\" ad_hoc_property=\"42\">\n  <testsuite name=\"SuccessfulTest\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"Succeeds\" status=\"run\" time=\"*\" classname=\"SuccessfulTest\"/>\n  </testsuite>\n  <testsuite name=\"FailedTest\" tests=\"1\" failures=\"1\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"Fails\" status=\"run\" time=\"*\" classname=\"FailedTest\">\n      <failure message=\"gtest_xml_output_unittest_.cc:*&#x0A;Value of: 2&#x0A;Expected: 1\" type=\"\"><![CDATA[gtest_xml_output_unittest_.cc:*\nValue of: 2\nExpected: 1%(stack)s]]></failure>\n    </testcase>\n  </testsuite>\n  <testsuite name=\"MixedResultTest\" tests=\"3\" failures=\"1\" disabled=\"1\" errors=\"0\" time=\"*\">\n    <testcase name=\"Succeeds\" status=\"run\" time=\"*\" classname=\"MixedResultTest\"/>\n    <testcase name=\"Fails\" status=\"run\" time=\"*\" classname=\"MixedResultTest\">\n      <failure message=\"gtest_xml_output_unittest_.cc:*&#x0A;Value of: 2&#x0A;Expected: 1\" type=\"\"><![CDATA[gtest_xml_output_unittest_.cc:*\nValue of: 2\nExpected: 1%(stack)s]]></failure>\n      <failure message=\"gtest_xml_output_unittest_.cc:*&#x0A;Value of: 3&#x0A;Expected: 2\" type=\"\"><![CDATA[gtest_xml_output_unittest_.cc:*\nValue of: 3\nExpected: 2%(stack)s]]></failure>\n    </testcase>\n    <testcase name=\"DISABLED_test\" status=\"notrun\" time=\"*\" classname=\"MixedResultTest\"/>\n  </testsuite>\n  <testsuite name=\"XmlQuotingTest\" tests=\"1\" failures=\"1\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"OutputsCData\" status=\"run\" time=\"*\" classname=\"XmlQuotingTest\">\n      <failure message=\"gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;XML output: &lt;?xml encoding=&quot;utf-8&quot;&gt;&lt;top&gt;&lt;![CDATA[cdata text]]&gt;&lt;/top&gt;\" type=\"\"><![CDATA[gtest_xml_output_unittest_.cc:*\nFailed\nXML output: <?xml encoding=\"utf-8\"><top><![CDATA[cdata text]]>]]&gt;<![CDATA[</top>%(stack)s]]></failure>\n    </testcase>\n  </testsuite>\n  <testsuite name=\"InvalidCharactersTest\" tests=\"1\" failures=\"1\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"InvalidCharactersInMessage\" status=\"run\" time=\"*\" classname=\"InvalidCharactersTest\">\n      <failure message=\"gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;Invalid characters in brackets []\" type=\"\"><![CDATA[gtest_xml_output_unittest_.cc:*\nFailed\nInvalid characters in brackets []%(stack)s]]></failure>\n    </testcase>\n  </testsuite>\n  <testsuite name=\"DisabledTest\" tests=\"1\" failures=\"0\" disabled=\"1\" errors=\"0\" time=\"*\">\n    <testcase name=\"DISABLED_test_not_run\" status=\"notrun\" time=\"*\" classname=\"DisabledTest\"/>\n  </testsuite>\n  <testsuite name=\"PropertyRecordingTest\" tests=\"4\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\" SetUpTestCase=\"yes\" TearDownTestCase=\"aye\">\n    <testcase name=\"OneProperty\" status=\"run\" time=\"*\" classname=\"PropertyRecordingTest\" key_1=\"1\"/>\n    <testcase name=\"IntValuedProperty\" status=\"run\" time=\"*\" classname=\"PropertyRecordingTest\" key_int=\"1\"/>\n    <testcase name=\"ThreeProperties\" status=\"run\" time=\"*\" classname=\"PropertyRecordingTest\" key_1=\"1\" key_2=\"2\" key_3=\"3\"/>\n    <testcase name=\"TwoValuesForOneKeyUsesLastValue\" status=\"run\" time=\"*\" classname=\"PropertyRecordingTest\" key_1=\"2\"/>\n  </testsuite>\n  <testsuite name=\"NoFixtureTest\" tests=\"3\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n     <testcase name=\"RecordProperty\" status=\"run\" time=\"*\" classname=\"NoFixtureTest\" key=\"1\"/>\n     <testcase name=\"ExternalUtilityThatCallsRecordIntValuedProperty\" status=\"run\" time=\"*\" classname=\"NoFixtureTest\" key_for_utility_int=\"1\"/>\n     <testcase name=\"ExternalUtilityThatCallsRecordStringValuedProperty\" status=\"run\" time=\"*\" classname=\"NoFixtureTest\" key_for_utility_string=\"1\"/>\n  </testsuite>\n  <testsuite name=\"Single/ValueParamTest\" tests=\"4\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"HasValueParamAttribute/0\" value_param=\"33\" status=\"run\" time=\"*\" classname=\"Single/ValueParamTest\" />\n    <testcase name=\"HasValueParamAttribute/1\" value_param=\"42\" status=\"run\" time=\"*\" classname=\"Single/ValueParamTest\" />\n    <testcase name=\"AnotherTestThatHasValueParamAttribute/0\" value_param=\"33\" status=\"run\" time=\"*\" classname=\"Single/ValueParamTest\" />\n    <testcase name=\"AnotherTestThatHasValueParamAttribute/1\" value_param=\"42\" status=\"run\" time=\"*\" classname=\"Single/ValueParamTest\" />\n  </testsuite>\n  <testsuite name=\"TypedTest/0\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"HasTypeParamAttribute\" type_param=\"*\" status=\"run\" time=\"*\" classname=\"TypedTest/0\" />\n  </testsuite>\n  <testsuite name=\"TypedTest/1\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"HasTypeParamAttribute\" type_param=\"*\" status=\"run\" time=\"*\" classname=\"TypedTest/1\" />\n  </testsuite>\n  <testsuite name=\"Single/TypeParameterizedTestCase/0\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"HasTypeParamAttribute\" type_param=\"*\" status=\"run\" time=\"*\" classname=\"Single/TypeParameterizedTestCase/0\" />\n  </testsuite>\n  <testsuite name=\"Single/TypeParameterizedTestCase/1\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\">\n    <testcase name=\"HasTypeParamAttribute\" type_param=\"*\" status=\"run\" time=\"*\" classname=\"Single/TypeParameterizedTestCase/1\" />\n  </testsuite>\n</testsuites>\"\"\" % {'stack': STACK_TRACE_TEMPLATE}\n\n\nEXPECTED_EMPTY_XML = \"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"0\" failures=\"0\" disabled=\"0\" errors=\"0\" time=\"*\" timestamp=\"*\" name=\"AllTests\">\n</testsuites>\"\"\"\n\nGTEST_PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath(GTEST_PROGRAM_NAME)\n\nSUPPORTS_TYPED_TESTS = 'TypedTest' in gtest_test_utils.Subprocess(\n    [GTEST_PROGRAM_PATH, GTEST_LIST_TESTS_FLAG], capture_stderr=False).output\n\n\nclass GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):\n  \"\"\"\n  Unit test for Google Test's XML output functionality.\n  \"\"\"\n\n  # This test currently breaks on platforms that do not support typed and\n  # type-parameterized tests, so we don't run it under them.\n  if SUPPORTS_TYPED_TESTS:\n    def testNonEmptyXmlOutput(self):\n      \"\"\"\n      Runs a test program that generates a non-empty XML output, and\n      tests that the XML output is expected.\n      \"\"\"\n      self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1)\n\n  def testEmptyXmlOutput(self):\n    \"\"\"Verifies XML output for a Google Test binary without actual tests.\n\n    Runs a test program that generates an empty XML output, and\n    tests that the XML output is expected.\n    \"\"\"\n\n    self._TestXmlOutput('gtest_no_test_unittest', EXPECTED_EMPTY_XML, 0)\n\n  def testTimestampValue(self):\n    \"\"\"Checks whether the timestamp attribute in the XML output is valid.\n\n    Runs a test program that generates an empty XML output, and checks if\n    the timestamp attribute in the testsuites tag is valid.\n    \"\"\"\n    actual = self._GetXmlOutput('gtest_no_test_unittest', 0)\n    date_time_str = actual.documentElement.getAttributeNode('timestamp').value\n    # datetime.strptime() is only available in Python 2.5+ so we have to\n    # parse the expected datetime manually.\n    match = re.match(r'(\\d+)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)', date_time_str)\n    self.assertTrue(\n        re.match,\n        'XML datettime string %s has incorrect format' % date_time_str)\n    date_time_from_xml = datetime.datetime(\n        year=int(match.group(1)), month=int(match.group(2)),\n        day=int(match.group(3)), hour=int(match.group(4)),\n        minute=int(match.group(5)), second=int(match.group(6)))\n\n    time_delta = abs(datetime.datetime.now() - date_time_from_xml)\n    # timestamp value should be near the current local time\n    self.assertTrue(time_delta < datetime.timedelta(seconds=600),\n                    'time_delta is %s' % time_delta)\n    actual.unlink()\n\n  def testDefaultOutputFile(self):\n    \"\"\"\n    Confirms that Google Test produces an XML output file with the expected\n    default name if no name is explicitly specified.\n    \"\"\"\n    output_file = os.path.join(gtest_test_utils.GetTempDir(),\n                               GTEST_DEFAULT_OUTPUT_FILE)\n    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(\n        'gtest_no_test_unittest')\n    try:\n      os.remove(output_file)\n    except OSError, e:\n      if e.errno != errno.ENOENT:\n        raise\n\n    p = gtest_test_utils.Subprocess(\n        [gtest_prog_path, '%s=xml' % GTEST_OUTPUT_FLAG],\n        working_dir=gtest_test_utils.GetTempDir())\n    self.assert_(p.exited)\n    self.assertEquals(0, p.exit_code)\n    self.assert_(os.path.isfile(output_file))\n\n  def testSuppressedXmlOutput(self):\n    \"\"\"\n    Tests that no XML file is generated if the default XML listener is\n    shut down before RUN_ALL_TESTS is invoked.\n    \"\"\"\n\n    xml_path = os.path.join(gtest_test_utils.GetTempDir(),\n                            GTEST_PROGRAM_NAME + 'out.xml')\n    if os.path.isfile(xml_path):\n      os.remove(xml_path)\n\n    command = [GTEST_PROGRAM_PATH,\n               '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path),\n               '--shut_down_xml']\n    p = gtest_test_utils.Subprocess(command)\n    if p.terminated_by_signal:\n      # p.signal is avalable only if p.terminated_by_signal is True.\n      self.assertFalse(\n          p.terminated_by_signal,\n          '%s was killed by signal %d' % (GTEST_PROGRAM_NAME, p.signal))\n    else:\n      self.assert_(p.exited)\n      self.assertEquals(1, p.exit_code,\n                        \"'%s' exited with code %s, which doesn't match \"\n                        'the expected exit code %s.'\n                        % (command, p.exit_code, 1))\n\n    self.assert_(not os.path.isfile(xml_path))\n\n  def _GetXmlOutput(self, gtest_prog_name, expected_exit_code):\n    \"\"\"\n    Returns the xml output generated by running the program gtest_prog_name.\n    Furthermore, the program's exit code must be expected_exit_code.\n    \"\"\"\n    xml_path = os.path.join(gtest_test_utils.GetTempDir(),\n                            gtest_prog_name + 'out.xml')\n    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name)\n\n    command = [gtest_prog_path, '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path)]\n    p = gtest_test_utils.Subprocess(command)\n    if p.terminated_by_signal:\n      self.assert_(False,\n                   '%s was killed by signal %d' % (gtest_prog_name, p.signal))\n    else:\n      self.assert_(p.exited)\n      self.assertEquals(expected_exit_code, p.exit_code,\n                        \"'%s' exited with code %s, which doesn't match \"\n                        'the expected exit code %s.'\n                        % (command, p.exit_code, expected_exit_code))\n    actual = minidom.parse(xml_path)\n    return actual\n\n  def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code):\n    \"\"\"\n    Asserts that the XML document generated by running the program\n    gtest_prog_name matches expected_xml, a string containing another\n    XML document.  Furthermore, the program's exit code must be\n    expected_exit_code.\n    \"\"\"\n\n    actual = self._GetXmlOutput(gtest_prog_name, expected_exit_code)\n    expected = minidom.parseString(expected_xml)\n    self.NormalizeXml(actual.documentElement)\n    self.AssertEquivalentNodes(expected.documentElement,\n                               actual.documentElement)\n    expected.unlink()\n    actual.unlink()\n\n\nif __name__ == '__main__':\n  os.environ['GTEST_STACK_TRACE_DEPTH'] = '1'\n  gtest_test_utils.Main()\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_output_unittest_.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Author: eefacm@gmail.com (Sean Mcafee)\n\n// Unit test for Google Test XML output.\n//\n// A user can specify XML output in a Google Test program to run via\n// either the GTEST_OUTPUT environment variable or the --gtest_output\n// flag.  This is used for testing such functionality.\n//\n// This program will be invoked from a Python unit test.  Don't run it\n// directly.\n\n#include \"gtest/gtest.h\"\n\nusing ::testing::InitGoogleTest;\nusing ::testing::TestEventListeners;\nusing ::testing::TestWithParam;\nusing ::testing::UnitTest;\nusing ::testing::Test;\nusing ::testing::Values;\n\nclass SuccessfulTest : public Test {\n};\n\nTEST_F(SuccessfulTest, Succeeds) {\n  SUCCEED() << \"This is a success.\";\n  ASSERT_EQ(1, 1);\n}\n\nclass FailedTest : public Test {\n};\n\nTEST_F(FailedTest, Fails) {\n  ASSERT_EQ(1, 2);\n}\n\nclass DisabledTest : public Test {\n};\n\nTEST_F(DisabledTest, DISABLED_test_not_run) {\n  FAIL() << \"Unexpected failure: Disabled test should not be run\";\n}\n\nTEST(MixedResultTest, Succeeds) {\n  EXPECT_EQ(1, 1);\n  ASSERT_EQ(1, 1);\n}\n\nTEST(MixedResultTest, Fails) {\n  EXPECT_EQ(1, 2);\n  ASSERT_EQ(2, 3);\n}\n\nTEST(MixedResultTest, DISABLED_test) {\n  FAIL() << \"Unexpected failure: Disabled test should not be run\";\n}\n\nTEST(XmlQuotingTest, OutputsCData) {\n  FAIL() << \"XML output: \"\n            \"<?xml encoding=\\\"utf-8\\\"><top><![CDATA[cdata text]]></top>\";\n}\n\n// Helps to test that invalid characters produced by test code do not make\n// it into the XML file.\nTEST(InvalidCharactersTest, InvalidCharactersInMessage) {\n  FAIL() << \"Invalid characters in brackets [\\x1\\x2]\";\n}\n\nclass PropertyRecordingTest : public Test {\n public:\n  static void SetUpTestCase() { RecordProperty(\"SetUpTestCase\", \"yes\"); }\n  static void TearDownTestCase() { RecordProperty(\"TearDownTestCase\", \"aye\"); }\n};\n\nTEST_F(PropertyRecordingTest, OneProperty) {\n  RecordProperty(\"key_1\", \"1\");\n}\n\nTEST_F(PropertyRecordingTest, IntValuedProperty) {\n  RecordProperty(\"key_int\", 1);\n}\n\nTEST_F(PropertyRecordingTest, ThreeProperties) {\n  RecordProperty(\"key_1\", \"1\");\n  RecordProperty(\"key_2\", \"2\");\n  RecordProperty(\"key_3\", \"3\");\n}\n\nTEST_F(PropertyRecordingTest, TwoValuesForOneKeyUsesLastValue) {\n  RecordProperty(\"key_1\", \"1\");\n  RecordProperty(\"key_1\", \"2\");\n}\n\nTEST(NoFixtureTest, RecordProperty) {\n  RecordProperty(\"key\", \"1\");\n}\n\nvoid ExternalUtilityThatCallsRecordProperty(const std::string& key, int value) {\n  testing::Test::RecordProperty(key, value);\n}\n\nvoid ExternalUtilityThatCallsRecordProperty(const std::string& key,\n                                            const std::string& value) {\n  testing::Test::RecordProperty(key, value);\n}\n\nTEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) {\n  ExternalUtilityThatCallsRecordProperty(\"key_for_utility_int\", 1);\n}\n\nTEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) {\n  ExternalUtilityThatCallsRecordProperty(\"key_for_utility_string\", \"1\");\n}\n\n// Verifies that the test parameter value is output in the 'value_param'\n// XML attribute for value-parameterized tests.\nclass ValueParamTest : public TestWithParam<int> {};\nTEST_P(ValueParamTest, HasValueParamAttribute) {}\nTEST_P(ValueParamTest, AnotherTestThatHasValueParamAttribute) {}\nINSTANTIATE_TEST_CASE_P(Single, ValueParamTest, Values(33, 42));\n\n#if GTEST_HAS_TYPED_TEST\n// Verifies that the type parameter name is output in the 'type_param'\n// XML attribute for typed tests.\ntemplate <typename T> class TypedTest : public Test {};\ntypedef testing::Types<int, long> TypedTestTypes;\nTYPED_TEST_CASE(TypedTest, TypedTestTypes);\nTYPED_TEST(TypedTest, HasTypeParamAttribute) {}\n#endif\n\n#if GTEST_HAS_TYPED_TEST_P\n// Verifies that the type parameter name is output in the 'type_param'\n// XML attribute for type-parameterized tests.\ntemplate <typename T> class TypeParameterizedTestCase : public Test {};\nTYPED_TEST_CASE_P(TypeParameterizedTestCase);\nTYPED_TEST_P(TypeParameterizedTestCase, HasTypeParamAttribute) {}\nREGISTER_TYPED_TEST_CASE_P(TypeParameterizedTestCase, HasTypeParamAttribute);\ntypedef testing::Types<int, long> TypeParameterizedTestCaseTypes;\nINSTANTIATE_TYPED_TEST_CASE_P(Single,\n                              TypeParameterizedTestCase,\n                              TypeParameterizedTestCaseTypes);\n#endif\n\nint main(int argc, char** argv) {\n  InitGoogleTest(&argc, argv);\n\n  if (argc > 1 && strcmp(argv[1], \"--shut_down_xml\") == 0) {\n    TestEventListeners& listeners = UnitTest::GetInstance()->listeners();\n    delete listeners.Release(listeners.default_xml_generator());\n  }\n  testing::Test::RecordProperty(\"ad_hoc_property\", \"42\");\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/gtest_xml_test_utils.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Unit test utilities for gtest_xml_output\"\"\"\n\n__author__ = 'eefacm@gmail.com (Sean Mcafee)'\n\nimport re\nfrom xml.dom import minidom, Node\n\nimport gtest_test_utils\n\n\nGTEST_OUTPUT_FLAG         = '--gtest_output'\nGTEST_DEFAULT_OUTPUT_FILE = 'test_detail.xml'\n\nclass GTestXMLTestCase(gtest_test_utils.TestCase):\n  \"\"\"\n  Base class for tests of Google Test's XML output functionality.\n  \"\"\"\n\n\n  def AssertEquivalentNodes(self, expected_node, actual_node):\n    \"\"\"\n    Asserts that actual_node (a DOM node object) is equivalent to\n    expected_node (another DOM node object), in that either both of\n    them are CDATA nodes and have the same value, or both are DOM\n    elements and actual_node meets all of the following conditions:\n\n    *  It has the same tag name as expected_node.\n    *  It has the same set of attributes as expected_node, each with\n       the same value as the corresponding attribute of expected_node.\n       Exceptions are any attribute named \"time\", which needs only be\n       convertible to a floating-point number and any attribute named\n       \"type_param\" which only has to be non-empty.\n    *  It has an equivalent set of child nodes (including elements and\n       CDATA sections) as expected_node.  Note that we ignore the\n       order of the children as they are not guaranteed to be in any\n       particular order.\n    \"\"\"\n\n    if expected_node.nodeType == Node.CDATA_SECTION_NODE:\n      self.assertEquals(Node.CDATA_SECTION_NODE, actual_node.nodeType)\n      self.assertEquals(expected_node.nodeValue, actual_node.nodeValue)\n      return\n\n    self.assertEquals(Node.ELEMENT_NODE, actual_node.nodeType)\n    self.assertEquals(Node.ELEMENT_NODE, expected_node.nodeType)\n    self.assertEquals(expected_node.tagName, actual_node.tagName)\n\n    expected_attributes = expected_node.attributes\n    actual_attributes   = actual_node  .attributes\n    self.assertEquals(\n        expected_attributes.length, actual_attributes.length,\n        'attribute numbers differ in element %s:\\nExpected: %r\\nActual: %r' % (\n            actual_node.tagName, expected_attributes.keys(),\n            actual_attributes.keys()))\n    for i in range(expected_attributes.length):\n      expected_attr = expected_attributes.item(i)\n      actual_attr   = actual_attributes.get(expected_attr.name)\n      self.assert_(\n          actual_attr is not None,\n          'expected attribute %s not found in element %s' %\n          (expected_attr.name, actual_node.tagName))\n      self.assertEquals(expected_attr.value, actual_attr.value,\n                        ' values of attribute %s in element %s differ' %\n                        (expected_attr.name, actual_node.tagName))\n\n    expected_children = self._GetChildren(expected_node)\n    actual_children = self._GetChildren(actual_node)\n    self.assertEquals(\n        len(expected_children), len(actual_children),\n        'number of child elements differ in element ' + actual_node.tagName)\n    for child_id, child in expected_children.iteritems():\n      self.assert_(child_id in actual_children,\n                   '<%s> is not in <%s> (in element %s)' %\n                   (child_id, actual_children, actual_node.tagName))\n      self.AssertEquivalentNodes(child, actual_children[child_id])\n\n  identifying_attribute = {\n    'testsuites': 'name',\n    'testsuite': 'name',\n    'testcase':  'name',\n    'failure':   'message',\n    }\n\n  def _GetChildren(self, element):\n    \"\"\"\n    Fetches all of the child nodes of element, a DOM Element object.\n    Returns them as the values of a dictionary keyed by the IDs of the\n    children.  For <testsuites>, <testsuite> and <testcase> elements, the ID\n    is the value of their \"name\" attribute; for <failure> elements, it is\n    the value of the \"message\" attribute; CDATA sections and non-whitespace\n    text nodes are concatenated into a single CDATA section with ID\n    \"detail\".  An exception is raised if any element other than the above\n    four is encountered, if two child elements with the same identifying\n    attributes are encountered, or if any other type of node is encountered.\n    \"\"\"\n\n    children = {}\n    for child in element.childNodes:\n      if child.nodeType == Node.ELEMENT_NODE:\n        self.assert_(child.tagName in self.identifying_attribute,\n                     'Encountered unknown element <%s>' % child.tagName)\n        childID = child.getAttribute(self.identifying_attribute[child.tagName])\n        self.assert_(childID not in children)\n        children[childID] = child\n      elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]:\n        if 'detail' not in children:\n          if (child.nodeType == Node.CDATA_SECTION_NODE or\n              not child.nodeValue.isspace()):\n            children['detail'] = child.ownerDocument.createCDATASection(\n                child.nodeValue)\n        else:\n          children['detail'].nodeValue += child.nodeValue\n      else:\n        self.fail('Encountered unexpected node type %d' % child.nodeType)\n    return children\n\n  def NormalizeXml(self, element):\n    \"\"\"\n    Normalizes Google Test's XML output to eliminate references to transient\n    information that may change from run to run.\n\n    *  The \"time\" attribute of <testsuites>, <testsuite> and <testcase>\n       elements is replaced with a single asterisk, if it contains\n       only digit characters.\n    *  The \"timestamp\" attribute of <testsuites> elements is replaced with a\n       single asterisk, if it contains a valid ISO8601 datetime value.\n    *  The \"type_param\" attribute of <testcase> elements is replaced with a\n       single asterisk (if it sn non-empty) as it is the type name returned\n       by the compiler and is platform dependent.\n    *  The line info reported in the first line of the \"message\"\n       attribute and CDATA section of <failure> elements is replaced with the\n       file's basename and a single asterisk for the line number.\n    *  The directory names in file paths are removed.\n    *  The stack traces are removed.\n    \"\"\"\n\n    if element.tagName == 'testsuites':\n      timestamp = element.getAttributeNode('timestamp')\n      timestamp.value = re.sub(r'^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d$',\n                               '*', timestamp.value)\n    if element.tagName in ('testsuites', 'testsuite', 'testcase'):\n      time = element.getAttributeNode('time')\n      time.value = re.sub(r'^\\d+(\\.\\d+)?$', '*', time.value)\n      type_param = element.getAttributeNode('type_param')\n      if type_param and type_param.value:\n        type_param.value = '*'\n    elif element.tagName == 'failure':\n      source_line_pat = r'^.*[/\\\\](.*:)\\d+\\n'\n      # Replaces the source line information with a normalized form.\n      message = element.getAttributeNode('message')\n      message.value = re.sub(source_line_pat, '\\\\1*\\n', message.value)\n      for child in element.childNodes:\n        if child.nodeType == Node.CDATA_SECTION_NODE:\n          # Replaces the source line information with a normalized form.\n          cdata = re.sub(source_line_pat, '\\\\1*\\n', child.nodeValue)\n          # Removes the actual stack trace.\n          child.nodeValue = re.sub(r'\\nStack trace:\\n(.|\\n)*',\n                                   '', cdata)\n    for child in element.childNodes:\n      if child.nodeType == Node.ELEMENT_NODE:\n        self.NormalizeXml(child)\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/production.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// This is part of the unit test for include/gtest/gtest_prod.h.\n\n#include \"production.h\"\n\nPrivateCode::PrivateCode() : x_(0) {}\n"
  },
  {
    "path": "sources/third_party/googletest/googletest/test/production.h",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: wan@google.com (Zhanyong Wan)\n//\n// This is part of the unit test for include/gtest/gtest_prod.h.\n\n#ifndef GTEST_TEST_PRODUCTION_H_\n#define GTEST_TEST_PRODUCTION_H_\n\n#include \"gtest/gtest_prod.h\"\n\nclass PrivateCode {\n public:\n  // Declares a friend test that does not use a fixture.\n  FRIEND_TEST(PrivateCodeTest, CanAccessPrivateMembers);\n\n  // Declares a friend test that uses a fixture.\n  FRIEND_TEST(PrivateCodeFixtureTest, CanAccessPrivateMembers);\n\n  PrivateCode();\n\n  int x() const { return x_; }\n private:\n  void set_x(int an_x) { x_ = an_x; }\n  int x_;\n};\n\n#endif  // GTEST_TEST_PRODUCTION_H_\n"
  },
  {
    "path": "sources/third_party/googletest/patches.ndk/0001-Allow-clone-usage-on-MIPS.patch",
    "content": "From c0265ead0f124c54b71f6d03491573a42accae09 Mon Sep 17 00:00:00 2001\nFrom: David 'Digit' Turner <digit@google.com>\nDate: Thu, 25 Apr 2013 23:06:50 +0200\nSubject: Allow clone() usage on MIPS\n\nGoogleTest assumes that clone() is only available on ARM, but\nthis is only because the NDK headers were incorrect, and only\nfixed recently.\n\nNote that clone() is sadly _not_ available on x86 at this point\nthough.\n---\n include/gtest/internal/gtest-port.h | 5 +++--\n 1 file changed, 3 insertions(+), 2 deletions(-)\n\ndiff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h\nindex dc4fe0c..0011186 100644\n--- a/include/gtest/internal/gtest-port.h\n+++ b/include/gtest/internal/gtest-port.h\n@@ -611,8 +611,9 @@ using ::std::tuple_size;\n \n # if GTEST_OS_LINUX && !defined(__ia64__)\n #  if GTEST_OS_LINUX_ANDROID\n-// On Android, clone() is only available on ARM starting with Gingerbread.\n-#    if defined(__arm__) && __ANDROID_API__ >= 9\n+// On Android, clone() is only available starting with Gingerbread, except\n+// on x86, for some reason.\n+#    if !defined(__i386__) && __ANDROID_API__ >= 9\n #     define GTEST_HAS_CLONE 1\n #    else\n #     define GTEST_HAS_CLONE 0\n-- \n1.7.12.146.g16d26b1\n\n"
  },
  {
    "path": "sources/third_party/googletest/patches.ndk/0002-Work-around-broken-abort-on-Android-MIPS.patch",
    "content": "From a2cdb0c2e1f54b1affc923df3b492feb0c0b102b Mon Sep 17 00:00:00 2001\nFrom: David 'Digit' Turner <digit@google.com>\nDate: Thu, 25 Apr 2013 23:08:50 +0200\nSubject: Work-around broken abort() on Android/MIPS.\n\nabort() freezes in the Android MIPS emulator, work around this\nby using exit(1) after flushing all opened files, which should\nmatch the abort() behaviour.\n---\n include/gtest/internal/gtest-port.h | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h\nindex 0011186..b6159f1 100644\n--- a/include/gtest/internal/gtest-port.h\n+++ b/include/gtest/internal/gtest-port.h\n@@ -1813,6 +1813,9 @@ inline const char* GetEnv(const char* name) {\n // several places in Google Test. This implementation provides a reasonable\n // imitation of standard behaviour.\n void Abort();\n+#elif defined(__ANDROID__) && defined(__mips__)\n+// Work-around broken abort() on Android/MIPS\n+inline void Abort() { fflush(NULL); exit(1); }\n #else\n inline void Abort() { abort(); }\n #endif  // GTEST_OS_WINDOWS_MOBILE\n-- \n1.7.12.146.g16d26b1\n\n"
  },
  {
    "path": "sources/third_party/googletest/patches.ndk/0003-Allow-clone-usage-on-X86.patch",
    "content": "From 535dc4bfad5b6796c567274af9fc97661cbabba4 Mon Sep 17 00:00:00 2001\nFrom: Lai Wei-Chih <Robert.Lai@mediatek.com>\nDate: Wed, 26 Jun 2013 09:52:00 +0800\nSubject: Allow clone() usage on X86.\n\nSince https://android-review.googlesource.com/#/c/61106/,\nthe missing clone has been added to x86.\n\nChange-Id: Id1987f462d978dcff0b6307f929019456bc24a6d\n---\ninclude/gtest/internal/gtest-port.h |    5 ++---\n 1 file changed, 2 insertions(+), 3 deletions(-)\n\ndiff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h\nindex a3f363f..5af0f45 100644\n--- a/include/gtest/internal/gtest-port.h\n+++ b/include/gtest/internal/gtest-port.h\n@@ -611,9 +611,8 @@ using ::std::tuple_size;\n \n # if GTEST_OS_LINUX && !defined(__ia64__)\n #  if GTEST_OS_LINUX_ANDROID\n-// On Android, clone() is only available starting with Gingerbread, except\n-// on x86, for some reason.\n-#    if !defined(__i386__) && __ANDROID_API__ >= 9\n+// On Android, clone() is only available starting with Gingerbread.\n+#    if __ANDROID_API__ >= 9\n #     define GTEST_HAS_CLONE 1\n #    else\n #     define GTEST_HAS_CLONE 0\n-- \n1.7.9.5\n\n"
  },
  {
    "path": "tests/.gitignore",
    "content": "# Ignore generated files in test subdirectories.\n*/obj/\n*/libs/\n*/*/obj/\n*/*/libs/\nrs/\nout/\n"
  },
  {
    "path": "tests/README",
    "content": "This directory contains scripts and sources to perform automated testing\nof the NDK. Before making a new NDK release, please run tests/run-ndk-tests\nto ensure that everything is working properly.\n\nDirectory layout:\n\nrun-ndk-tests\n    Run all NDK automated tests. Use --help for more options.\n\nbuild/\n    Contains tests used to check the NDK build system itself.\n\ndevice/\n    Contains tests used to check that NDK-generated binaries work properly\n    on an Android device. To run them, call \"run-ndk-tests\" with the \"adb\" tool\n    in your path (or with the --adb=<executable> option).\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/awk/extract-launchable/multiple-categories.in",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      package=\"com.example.hellojni\"\n      android:versionCode=\"1\"\n      android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"3\" />\n    <application android:label=\"@string/app_name\"\n                 android:debuggable=\"true\">\n        <activity android:name=\".HelloJni\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n        </activity>\n    </application>\n</manifest> \n"
  },
  {
    "path": "tests/awk/extract-launchable/multiple-categories.out",
    "content": ".HelloJni\n"
  },
  {
    "path": "tests/awk/extract-launchable/multiple-launchables.in",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      package=\"com.example.hellojni\"\n      android:versionCode=\"1\"\n      android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"3\" />\n    <application android:label=\"@string/app_name\"\n                 android:debuggable=\"true\">\n        <activity android:name=\".HelloJni\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\".HelloJni2\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.NOT_LAUNCHER_FOR_THIS_TEST\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\".HelloJni3\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n</manifest> \n"
  },
  {
    "path": "tests/awk/extract-launchable/multiple-launchables.out",
    "content": ".HelloJni\n.HelloJni3\n"
  },
  {
    "path": "tests/awk/extract-launchable/no-launchable.in",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      package=\"com.example.hellojni\"\n      android:versionCode=\"1\"\n      android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"3\" />\n    <application android:label=\"@string/app_name\"\n                 android:debuggable=\"true\">\n        <activity android:name=\".HelloJni\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.NOT_MAIN_FOR_THIS_TEST\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n</manifest> \n"
  },
  {
    "path": "tests/awk/extract-launchable/no-launchable.out",
    "content": ""
  },
  {
    "path": "tests/awk/extract-launchable/one-launchable.in",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      package=\"com.example.hellojni\"\n      android:versionCode=\"1\"\n      android:versionName=\"1.0\">\n    <uses-sdk android:minSdkVersion=\"3\" />\n    <application android:label=\"@string/app_name\"\n                 android:debuggable=\"true\">\n        <activity android:name=\".HelloJni\"\n                  android:label=\"@string/app_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n</manifest> \n"
  },
  {
    "path": "tests/awk/extract-launchable/one-launchable.out",
    "content": ".HelloJni\n"
  },
  {
    "path": "tests/awk/extract-pid/test-1.in",
    "content": "USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME\r\nroot      1     0     348    208   ffffffff 00000000 S /init\r\nroot      2     0     0      0     ffffffff 00000000 S kthreadd\r\nroot      3     2     0      0     ffffffff 00000000 S ksoftirqd/0\r\nroot      6     2     0      0     ffffffff 00000000 S migration/0\r\nroot      10    2     0      0     ffffffff 00000000 S khelper\r\nroot      11    2     0      0     ffffffff 00000000 S suspend\r\nroot      12    2     0      0     ffffffff 00000000 S irq/329-pogo_de\r\nroot      13    2     0      0     ffffffff 00000000 S sync_supers\r\nroot      14    2     0      0     ffffffff 00000000 S bdi-default\r\nroot      15    2     0      0     ffffffff 00000000 S kblockd\r\nroot      16    2     0      0     ffffffff 00000000 S omap2_mcspi\r\nroot      17    2     0      0     ffffffff 00000000 S khubd\r\nroot      18    2     0      0     ffffffff 00000000 S twl6030-irq\r\nroot      19    2     0      0     ffffffff 00000000 S irq/374-TWL6030\r\nroot      21    2     0      0     ffffffff 00000000 S cfg80211\r\nroot      22    2     0      0     ffffffff 00000000 S musb-otg\r\nroot      23    2     0      0     ffffffff 00000000 S kinteractiveup\r\nroot      25    2     0      0     ffffffff 00000000 S khungtaskd\r\nroot      26    2     0      0     ffffffff 00000000 S kswapd0\r\nroot      27    2     0      0     ffffffff 00000000 S fsnotify_mark\r\nroot      28    2     0      0     ffffffff 00000000 S crypto\r\nroot      41    2     0      0     ffffffff 00000000 S hdmi_hotplug\r\nroot      42    2     0      0     ffffffff 00000000 S hdcp\r\nroot      44    2     0      0     ffffffff 00000000 S dsscomp_apply\r\nroot      45    2     0      0     ffffffff 00000000 S dsscomp_apply\r\nroot      46    2     0      0     ffffffff 00000000 S dsscomp_apply\r\nroot      47    2     0      0     ffffffff 00000000 S dsscomp_cb\r\nroot      48    2     0      0     ffffffff 00000000 S irq/335-sii9234\r\nroot      50    2     0      0     ffffffff 00000000 S pvr_timer\r\nroot      51    2     0      0     ffffffff 00000000 S bmp180_wq\r\nroot      52    2     0      0     ffffffff 00000000 S sec_jack_wq\r\nroot      54    2     0      0     ffffffff 00000000 S irq/184-fsa9480\r\nroot      55    2     0      0     ffffffff 00000000 S irq/164-fsa9480\r\nroot      56    2     0      0     ffffffff 00000000 S irq/159-temp_se\r\nroot      57    2     0      0     ffffffff 00000000 S irq/246-tshut\r\nroot      58    2     0      0     ffffffff 00000000 S irq/151-twl6040\r\nroot      59    2     0      0     ffffffff 00000000 S mtdblock0\r\nroot      67    2     0      0     ffffffff 00000000 S f_mtp\r\nroot      68    2     0      0     ffffffff 00000000 S file-storage\r\nroot      70    2     0      0     ffffffff 00000000 S gp2a_wq\r\nroot      71    2     0      0     ffffffff 00000000 S irq/379-rtc0\r\nroot      72    2     0      0     ffffffff 00000000 S irq/204-fuel ga\r\nroot      73    2     0      0     ffffffff 00000000 S khotplug\r\nroot      74    2     0      0     ffffffff 00000000 S binder\r\nroot      75    2     0      0     ffffffff 00000000 S irq/131-ABE\r\nroot      78    2     0      0     ffffffff 00000000 S twl6040-codec\r\nroot      79    2     0      0     ffffffff 00000000 S twl6040-hf\r\nroot      80    2     0      0     ffffffff 00000000 S twl6040-hs\r\nroot      81    2     0      0     ffffffff 00000000 S twl6040-ep\r\nroot      82    2     0      0     ffffffff 00000000 S mmcqd/0\r\nroot      83    2     0      0     ffffffff 00000000 S mmcqd/0boot0\r\nroot      84    2     0      0     ffffffff 00000000 S mmcqd/0boot1\r\nroot      85    2     0      0     ffffffff 00000000 S krfcommd\r\nroot      86    2     0      0     ffffffff 00000000 S irq/142-omap_em\r\nroot      87    2     0      0     ffffffff 00000000 S irq/143-omap_em\r\nroot      88    2     0      0     ffffffff 00000000 S mipi_tx_wq\r\nroot      89    2     0      0     ffffffff 00000000 S mipi_tx_raw_wq\r\nroot      90    2     0      0     ffffffff 00000000 S mipi_cmd_wq\r\nroot      91    1     0      0     ffffffff 00000000 S kworker/u:1\r\nroot      92    2     0      0     ffffffff 00000000 S dhd_watchdog\r\nroot      93    2     0      0     ffffffff 00000000 S dhd_dpc\r\nroot      94    2     0      0     ffffffff 00000000 S dhd_sysioc\r\nroot      95    1     320    180   ffffffff 00000000 S /sbin/ueventd\r\nroot      99    2     0      0     ffffffff 00000000 S jbd2/mmcblk0p10\r\nroot      100   2     0      0     ffffffff 00000000 S ext4-dio-unwrit\r\nroot      101   2     0      0     ffffffff 00000000 S jbd2/mmcblk0p12\r\nroot      102   2     0      0     ffffffff 00000000 S ext4-dio-unwrit\r\nroot      104   2     0      0     ffffffff 00000000 S jbd2/mmcblk0p11\r\nroot      105   2     0      0     ffffffff 00000000 S ext4-dio-unwrit\r\nroot      106   2     0      0     ffffffff 00000000 S jbd2/mmcblk0p3-\r\nroot      107   2     0      0     ffffffff 00000000 S ext4-dio-unwrit\r\nroot      108   2     0      0     ffffffff 00000000 S irq/206-mms_ts\r\nsystem    109   1     832    276   ffffffff 00000000 S /system/bin/servicemanager\r\nroot      110   1     4020   504   ffffffff 00000000 S /system/bin/vold\r\nroot      115   1     8132   1364  ffffffff 00000000 S /system/bin/netd\r\nsystem    118   1     82156  41724 ffffffff 00000000 S /system/bin/surfaceflinger\r\nroot      119   1     437420 28484 ffffffff 00000000 S zygote\r\ndrm       120   1     18780  2088  ffffffff 00000000 S /system/bin/drmserver\r\nmedia     121   1     41280  5364  ffffffff 00000000 S /system/bin/mediaserver\r\nbluetooth 122   1     1360   352   ffffffff 00000000 S /system/bin/dbus-daemon\r\nroot      123   1     872    332   ffffffff 00000000 S /system/bin/installd\r\nkeystore  124   1     1744   428   ffffffff 00000000 S /system/bin/keystore\r\nmedia_rw  126   1     976    440   ffffffff 00000000 S /system/bin/sdcard\r\nshell     127   1     772    268   ffffffff 00000000 S /system/bin/sh\r\nshell     128   1     4472   204   ffffffff 00000000 S /sbin/adbd\r\nroot      141   2     0      0     ffffffff 00000000 S pvr_workqueue\r\nroot      154   2     0      0     ffffffff 00000000 S omaplfb\r\nroot      171   2     0      0     ffffffff 00000000 S flush-179:0\r\nsystem    192   119   580452 86288 ffffffff 00000000 S system_server\r\nbluetooth 257   1     828    288   ffffffff 00000000 S /system/bin/brcm_patchram_plus\r\nroot      263   2     0      0     ffffffff 00000000 S hci0\r\nbluetooth 274   1     2148   500   ffffffff 00000000 S /system/bin/bluetoothd\r\nsystem    444   119   500212 67960 ffffffff 00000000 S com.android.systemui\r\napp_30    544   119   452228 35868 ffffffff 00000000 S com.google.android.inputmethod.latin\r\nradio     560   119   464168 31936 ffffffff 00000000 S com.android.phone\r\napp_10    683   119   519672 44496 ffffffff 00000000 S com.google.process.gapps\r\napp_0     734   119   465780 36444 ffffffff 00000000 S android.process.acore\r\napp_19    1512  119   518496 68532 ffffffff 00000000 S com.google.android.gm\r\napp_10    1534  119   450624 31560 ffffffff 00000000 S com.google.android.gsf.login\r\nwifi      1624  1     6592   4988  ffffffff 00000000 S /system/bin/wpa_supplicant\r\napp_70    2193  119   496064 62752 ffffffff 00000000 S com.google.android.apps.reader\r\nnfc       2328  119   471156 30012 ffffffff 00000000 S com.android.nfc3\r\napp_34    2516  119   463064 37608 ffffffff 00000000 S com.google.android.apps.maps:NetworkLocationService\r\napp_34    2531  119   452488 33272 ffffffff 00000000 S com.google.android.apps.maps:FriendService\r\napp_34    2827  119   466124 36448 ffffffff 00000000 S com.google.android.apps.maps\r\napp_46    2836  119   462368 42376 ffffffff 00000000 S com.google.android.apps.plus\r\nroot      3091  2     0      0     ffffffff 00000000 S kworker/0:2\r\nroot      3092  2     0      0     ffffffff 00000000 S kworker/0:3\r\nroot      3212  2     0      0     ffffffff 00000000 S kworker/u:0\r\nroot      3218  2     0      0     ffffffff 00000000 S kworker/u:1\r\napp_13    3424  119   449732 33236 ffffffff 00000000 S android.process.media\r\nroot      3461  2     0      0     ffffffff 00000000 S flush-0:17\r\nroot      3462  2     0      0     ffffffff 00000000 S kworker/u:2\r\nroot      3468  2     0      0     ffffffff 00000000 S kworker/u:3\r\nroot      3469  2     0      0     ffffffff 00000000 S kworker/0:0\r\nroot      3471  2     0      0     ffffffff 00000000 S kworker/u:4\r\nroot      3490  2     0      0     ffffffff 00000000 S kworker/0:1\r\napp_52    3546  119   459584 33172 ffffffff 00000000 S com.google.android.talk\r\nroot      3693  2     0      0     ffffffff 00000000 S kworker/0:4\r\nradio     3709  1     9856   2304  ffffffff 00000000 S /system/bin/rild\r\ndhcp      3738  1     920    444   ffffffff 00000000 S /system/bin/dhcpcd\r\napp_31    3813  119   533040 111212 ffffffff 00000000 S com.android.launcher\r\nroot      3970  2     0      0     ffffffff 00000000 S migration/1\r\nroot      3971  2     0      0     ffffffff 00000000 S kworker/1:1\r\nroot      3972  2     0      0     ffffffff 00000000 S ksoftirqd/1\r\nroot      3973  2     0      0     ffffffff 00000000 S kworker/1:0\r\nroot      3976  2     0      0     ffffffff 00000000 S kworker/1:2\r\nshell     3989  128   760    364   c00562a0 4008de54 S /system/bin/sh\r\nshell     3991  3989  956    344   00000000 400ed438 R ps\r\nroot      12102 1     696    252   ffffffff 00000000 S /system/bin/debuggerd\r\n"
  },
  {
    "path": "tests/awk/extract-pid/test-1.out",
    "content": "2827\n"
  },
  {
    "path": "tests/awk/gen-cygwin-deps-converter/test-1.in",
    "content": "C:/cygwin/bin on /usr/bin type ntfs (binary,auto)\nC:/cygwin/lib on /usr/lib type ntfs (binary,auto)\nC:/cygwin on / type ntfs (binary,auto)\nC: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)\nD: on /cygdrive/d type udf (binary,posix=0,user,noumount,auto)\n//server/subdir on /home/mnt.2$ type ...."
  },
  {
    "path": "tests/awk/gen-cygwin-deps-converter/test-1.out",
    "content": "#!/bin/sh\n# AUTO-GENERATED FILE, DO NOT EDIT!\nif [ -f $1.org ]; then\n  sed -e 's!^//server/subdir!/home/mnt\\.2\\$!ig;s! //server/subdir! /home/mnt\\.2\\$!ig;s!^C:/cygwin/lib!/usr/lib!ig;s! C:/cygwin/lib! /usr/lib!ig;s!^C:/cygwin/bin!/usr/bin!ig;s! C:/cygwin/bin! /usr/bin!ig;s!^C:/cygwin/!/!ig;s! C:/cygwin/! /!ig;s!^D:!/cygdrive/d!ig;s! D:! /cygdrive/d!ig;s!^C:!/cygdrive/c!ig;s! C:! /cygdrive/c!ig;' $1.org > $1 && rm -f $1.org\nfi\n"
  },
  {
    "path": "tests/awk/gen-cygwin-deps-converter/test-2.in",
    "content": "C:\\cygwin/bin on /usr/bin type ntfs (binary,auto)\nC:\\cygwin/lib on /usr/lib type ntfs (binary,auto)\nC:\\cygwin on / type ntfs (binary,auto)\nC: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)\nD: on /cygdrive/d type udf (binary,posix=0,user,noumount,auto)\n\\\\server\\subdir on /home/mnt.2$ type ....\n"
  },
  {
    "path": "tests/awk/gen-cygwin-deps-converter/test-2.out",
    "content": "#!/bin/sh\n# AUTO-GENERATED FILE, DO NOT EDIT!\nif [ -f $1.org ]; then\n  sed -e 's!^//server/subdir!/home/mnt\\.2\\$!ig;s! //server/subdir! /home/mnt\\.2\\$!ig;s!^C:/cygwin/lib!/usr/lib!ig;s! C:/cygwin/lib! /usr/lib!ig;s!^C:/cygwin/bin!/usr/bin!ig;s! C:/cygwin/bin! /usr/bin!ig;s!^C:/cygwin/!/!ig;s! C:/cygwin/! /!ig;s!^D:!/cygdrive/d!ig;s! D:! /cygdrive/d!ig;s!^C:!/cygdrive/c!ig;s! C:! /cygdrive/c!ig;' $1.org > $1 && rm -f $1.org\nfi\n"
  },
  {
    "path": "tests/awk/gen-windows-host-path/test-1.in",
    "content": "C:/cygwin/bin on /usr/bin type ntfs (binary,auto)\nC:/cygwin/lib on /usr/lib type ntfs (binary,auto)\nC:/cygwin on / type ntfs (binary,auto)\nC: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)\nD: on /cygdrive/d type udf (binary,posix=0,user,noumount,auto)\n"
  },
  {
    "path": "tests/awk/gen-windows-host-path/test-1.out",
    "content": "$(patsubst /%,C:/cygwin/%,\n$(patsubst /usr/bin/%,C:/cygwin/bin/%,\n$(patsubst /usr/lib/%,C:/cygwin/lib/%,\n$(patsubst /cygdrive/C/%,C:/%,\n$(patsubst /cygdrive/D/%,D:/%,\n$(patsubst /cygdrive/c/%,C:/%,\n$(patsubst /cygdrive/d/%,D:/%,\n$1)))))))\n"
  },
  {
    "path": "tests/build/.gitignore",
    "content": "*/obj/\n*/libs/\n"
  },
  {
    "path": "tests/build/absolute-src-file-paths/build.sh",
    "content": "#!/bin/sh\n\n# This script is used to check that using absolute paths in\n# LOCAL_SRC_PATHS works properly.\nCUR_DIR=$(cd $(dirname \"$0\") && pwd)\necho $NDK/ndk-build \"$@\" FOO_PATH=\"$CUR_DIR/src\"\n$NDK/ndk-build \"$@\" FOO_PATH=\"$CUR_DIR/src\"\n"
  },
  {
    "path": "tests/build/absolute-src-file-paths/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifndef FOO_PATH\n# We may reach here running this test from run-tests.sh\n# when it Android.mk is included in make -f $NDK/build/core/build-local.mk DUMP_*\n# to determin ABIs.  In this case FOO_PATH isn't set and doesn't matter.\n# For normal build, empty FOO_PATH causes make to find /foo.c and /main.c\n# and fail to build.\n$(info FOO_PATH should be defined before including this file!)\nendif\n\nifeq (,$(call host-path-is-absolute,$(FOO_PATH)))\n$(info FOO_PATH should be defined to an absolute path!)\nendif\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := $(FOO_PATH)/foo.c\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_absolute_src_file_path\nLOCAL_SRC_FILES := $(FOO_PATH)/main.c\nLOCAL_SHARED_LIBRARIES := libfoo\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/absolute-src-file-paths/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/absolute-src-file-paths/src/foo.c",
    "content": "int foo(int x) {\n  return x + 42;\n}\n"
  },
  {
    "path": "tests/build/absolute-src-file-paths/src/main.c",
    "content": "extern int foo(int);\n\nint main(void) {\n  return foo(18);\n}\n"
  },
  {
    "path": "tests/build/ansi/README",
    "content": "This test is meant to test -ansi\n\n"
  },
  {
    "path": "tests/build/ansi/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_ansi_c\nLOCAL_SRC_FILES := test_ansi.c\nLOCAL_CFLAGS += -ansi\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_ansi_cpp\nLOCAL_SRC_FILES := test_ansi.cpp\nLOCAL_CFLAGS += -ansi\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/ansi/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/build/ansi/jni/test_ansi.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdlib.h>\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/ansi/jni/test_ansi.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <cstdlib>\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/awk-trailing-r/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n      package=\"com.test\"\r\n      android:versionCode=\"1\"\r\n      android:versionName=\"1.0\">\r\n    <application android:label=\"@string/app_name\" android:debuggable=\"true\">\r\n        <activity android:name=\".Test\"\r\n                  android:label=\"@string/app_name\">\r\n            <intent-filter>\r\n                <action android:name=\"android.intent.action.MAIN\" />\r\n                <category android:name=\"android.intent.category.LAUNCHER\" />\r\n            </intent-filter>\r\n        </activity>\r\n    </application>\r\n    <uses-sdk android:minSdkVersion=\"3\"/>\r\n</manifest> \r\n"
  },
  {
    "path": "tests/build/awk-trailing-r/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := awk-trailing-r\nLOCAL_SRC_FILES := awk-trailing-r.c\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/awk-trailing-r/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/awk-trailing-r/jni/awk-trailing-r.c",
    "content": "void foo()\n{\n}\n"
  },
  {
    "path": "tests/build/b14811006-GOT_PREL-optimization/build.sh",
    "content": "# Check if ARM compiler optimize GOT using GOT_PREL as much\n# as possible, and turn instruction sequence of SkAlphaMulQ()\n#\n#\tldr\tr3, .L2\n#\tldr\tr2, .L2+4\n#   .LPIC0:\n#\tadd\tr3, pc, r3\n#\tldr\tr3, [r3, r2]\n#\tldr\tr3, [r3]\n#\tand\tr2, r3, r0, lsr #8\n#\t....\n#   .L2:\n#\t.word\t_GLOBAL_OFFSET_TABLE_-(.LPIC0+8)\n#\t.word\tgMask_00FF00FF(GOT)\n#\n# into\n#\n#\tldr\tr2, .L2\n#   .LPIC1:\n#\tldr\tr2, [pc, r2]\n#\tldr\tr3, [r2, #0]\n#\tand\tr2, r3, r0, lsr #8\n#\t....\n#   .L2:\n#\t.word\tgMask_00FF00FF(GOT_PREL)+(.-(.LPIC1+8))\n#\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        echo \"ERROR: $@\"\n        exit 1\n    fi\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n    APP_ABI=*)\n        APP_ABI=$optarg\n        ;;\n    esac\ndone\n\nif [ -z \"$APP_ABI\" -o \"$APP_ABI\" = \"all\" ]; then\n    APP_ABI=\"armeabi-v7a\"\nfi\n\n# Only test for armeabi and armeabi-v7a\nif [ \"$APP_ABI\" != \"${APP_ABI%%armeabi*}\" ]; then\n    APP_ABI=`echo $APP_ABI | tr ',' ' '`\n    for ABI in $APP_ABI; do\n        $NDK/ndk-build -B APP_ABI=$ABI APP_CFLAGS=-save-temps\n        fail_panic \"can't compile for APP_ABI=$ABI\"\n        fgrep -q \"(GOT_PREL)\" SkAlphaMulQ.s\n        fail_panic \"Fail to optimize GOT access with GOT_PREL, ABI=$ABI.\"\n    done\nfi\n\nrm -rf libs obj SkAlphaMulQ.*\n"
  },
  {
    "path": "tests/build/b14811006-GOT_PREL-optimization/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := SkAlphaMulQ\nLOCAL_SRC_FILES := SkAlphaMulQ.cc\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/b14811006-GOT_PREL-optimization/jni/Application.mk",
    "content": "APP_ABI := armeabi armeabi-v7a\n"
  },
  {
    "path": "tests/build/b14811006-GOT_PREL-optimization/jni/SkAlphaMulQ.cc",
    "content": "typedef unsigned int uint32_t;\n\nextern const uint32_t gMask_00FF00FF;\n\nuint32_t SkAlphaMulQ(uint32_t c, unsigned scale) {\n    uint32_t mask = gMask_00FF00FF;\n\n    uint32_t rb = ((c & mask) * scale) >> 8;\n    uint32_t ag = ((c >> 8) & mask) * scale;\n    return (rb & mask) | (ag & ~mask);\n}\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/b14811006-GOT_PREL-optimization/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\", \"clang3.8\", \"gcc6\"]}\n"
  },
  {
    "path": "tests/build/b14825026-aarch64-FP_LO_REGS/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := idct_dequant_full_2x_neon\nLOCAL_SRC_FILES := idct_dequant_full_2x_neon.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/b14825026-aarch64-FP_LO_REGS/jni/Application.mk",
    "content": "APP_ABI := arm64-v8a\n"
  },
  {
    "path": "tests/build/b14825026-aarch64-FP_LO_REGS/jni/idct_dequant_full_2x_neon.c",
    "content": "/*\n *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS.  All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#include <arm_neon.h>\n\nstatic const int16_t cospi8sqrt2minus1 = 20091;\nstatic const int16_t sinpi8sqrt2       = 17734;\n// because the lowest bit in 0x8a8c is 0, we can pre-shift this\n\nvoid idct_dequant_full_2x_neon(\n        int16_t *q,\n        int16_t *dq,\n        unsigned char *dst,\n        int stride) {\n    unsigned char *dst0, *dst1;\n    int32x2_t d28, d29, d30, d31;\n    int16x8_t q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11;\n    int16x8_t qEmpty = vdupq_n_s16(0);\n    int32x4x2_t q2tmp0, q2tmp1;\n    int16x8x2_t q2tmp2, q2tmp3;\n    int16x4_t dLow0, dLow1, dHigh0, dHigh1;\n\n    d28 = d29 = d30 = d31 = vdup_n_s32(0);\n\n    // load dq\n    q0 = vld1q_s16(dq);\n    dq += 8;\n    q1 = vld1q_s16(dq);\n\n    // load q\n    q2 = vld1q_s16(q);\n    vst1q_s16(q, qEmpty);\n    q += 8;\n    q3 = vld1q_s16(q);\n    vst1q_s16(q, qEmpty);\n    q += 8;\n    q4 = vld1q_s16(q);\n    vst1q_s16(q, qEmpty);\n    q += 8;\n    q5 = vld1q_s16(q);\n    vst1q_s16(q, qEmpty);\n\n    // load src from dst\n    dst0 = dst;\n    dst1 = dst + 4;\n    d28 = vld1_lane_s32((const int32_t *)dst0, d28, 0);\n    dst0 += stride;\n    d28 = vld1_lane_s32((const int32_t *)dst1, d28, 1);\n    dst1 += stride;\n    d29 = vld1_lane_s32((const int32_t *)dst0, d29, 0);\n    dst0 += stride;\n    d29 = vld1_lane_s32((const int32_t *)dst1, d29, 1);\n    dst1 += stride;\n\n    d30 = vld1_lane_s32((const int32_t *)dst0, d30, 0);\n    dst0 += stride;\n    d30 = vld1_lane_s32((const int32_t *)dst1, d30, 1);\n    dst1 += stride;\n    d31 = vld1_lane_s32((const int32_t *)dst0, d31, 0);\n    d31 = vld1_lane_s32((const int32_t *)dst1, d31, 1);\n\n    q2 = vmulq_s16(q2, q0);\n    q3 = vmulq_s16(q3, q1);\n    q4 = vmulq_s16(q4, q0);\n    q5 = vmulq_s16(q5, q1);\n\n    // vswp\n    dLow0 = vget_low_s16(q2);\n    dHigh0 = vget_high_s16(q2);\n    dLow1 = vget_low_s16(q4);\n    dHigh1 = vget_high_s16(q4);\n    q2 = vcombine_s16(dLow0, dLow1);\n    q4 = vcombine_s16(dHigh0, dHigh1);\n\n    dLow0 = vget_low_s16(q3);\n    dHigh0 = vget_high_s16(q3);\n    dLow1 = vget_low_s16(q5);\n    dHigh1 = vget_high_s16(q5);\n    q3 = vcombine_s16(dLow0, dLow1);\n    q5 = vcombine_s16(dHigh0, dHigh1);\n\n    q6 = vqdmulhq_n_s16(q4, sinpi8sqrt2);\n    q7 = vqdmulhq_n_s16(q5, sinpi8sqrt2);\n    q8 = vqdmulhq_n_s16(q4, cospi8sqrt2minus1);\n    q9 = vqdmulhq_n_s16(q5, cospi8sqrt2minus1);\n\n    q10 = vqaddq_s16(q2, q3);\n    q11 = vqsubq_s16(q2, q3);\n\n    q8 = vshrq_n_s16(q8, 1);\n    q9 = vshrq_n_s16(q9, 1);\n\n    q4 = vqaddq_s16(q4, q8);\n    q5 = vqaddq_s16(q5, q9);\n\n    q2 = vqsubq_s16(q6, q5);\n    q3 = vqaddq_s16(q7, q4);\n\n    q4 = vqaddq_s16(q10, q3);\n    q5 = vqaddq_s16(q11, q2);\n    q6 = vqsubq_s16(q11, q2);\n    q7 = vqsubq_s16(q10, q3);\n\n    q2tmp0 = vtrnq_s32(vreinterpretq_s32_s16(q4), vreinterpretq_s32_s16(q6));\n    q2tmp1 = vtrnq_s32(vreinterpretq_s32_s16(q5), vreinterpretq_s32_s16(q7));\n    q2tmp2 = vtrnq_s16(vreinterpretq_s16_s32(q2tmp0.val[0]),\n                       vreinterpretq_s16_s32(q2tmp1.val[0]));\n    q2tmp3 = vtrnq_s16(vreinterpretq_s16_s32(q2tmp0.val[1]),\n                       vreinterpretq_s16_s32(q2tmp1.val[1]));\n\n    // loop 2\n    q8  = vqdmulhq_n_s16(q2tmp2.val[1], sinpi8sqrt2);\n    q9  = vqdmulhq_n_s16(q2tmp3.val[1], sinpi8sqrt2);\n    q10 = vqdmulhq_n_s16(q2tmp2.val[1], cospi8sqrt2minus1);\n    q11 = vqdmulhq_n_s16(q2tmp3.val[1], cospi8sqrt2minus1);\n\n    q2 = vqaddq_s16(q2tmp2.val[0], q2tmp3.val[0]);\n    q3 = vqsubq_s16(q2tmp2.val[0], q2tmp3.val[0]);\n\n    q10 = vshrq_n_s16(q10, 1);\n    q11 = vshrq_n_s16(q11, 1);\n\n    q10 = vqaddq_s16(q2tmp2.val[1], q10);\n    q11 = vqaddq_s16(q2tmp3.val[1], q11);\n\n    q8 = vqsubq_s16(q8, q11);\n    q9 = vqaddq_s16(q9, q10);\n\n    q4 = vqaddq_s16(q2, q9);\n    q5 = vqaddq_s16(q3, q8);\n    q6 = vqsubq_s16(q3, q8);\n    q7 = vqsubq_s16(q2, q9);\n\n    q4 = vrshrq_n_s16(q4, 3);\n    q5 = vrshrq_n_s16(q5, 3);\n    q6 = vrshrq_n_s16(q6, 3);\n    q7 = vrshrq_n_s16(q7, 3);\n\n    q2tmp0 = vtrnq_s32(vreinterpretq_s32_s16(q4), vreinterpretq_s32_s16(q6));\n    q2tmp1 = vtrnq_s32(vreinterpretq_s32_s16(q5), vreinterpretq_s32_s16(q7));\n    q2tmp2 = vtrnq_s16(vreinterpretq_s16_s32(q2tmp0.val[0]),\n                       vreinterpretq_s16_s32(q2tmp1.val[0]));\n    q2tmp3 = vtrnq_s16(vreinterpretq_s16_s32(q2tmp0.val[1]),\n                       vreinterpretq_s16_s32(q2tmp1.val[1]));\n\n    q4 = vreinterpretq_s16_u16(vaddw_u8(vreinterpretq_u16_s16(q2tmp2.val[0]),\n                                          vreinterpret_u8_s32(d28)));\n    q5 = vreinterpretq_s16_u16(vaddw_u8(vreinterpretq_u16_s16(q2tmp2.val[1]),\n                                          vreinterpret_u8_s32(d29)));\n    q6 = vreinterpretq_s16_u16(vaddw_u8(vreinterpretq_u16_s16(q2tmp3.val[0]),\n                                          vreinterpret_u8_s32(d30)));\n    q7 = vreinterpretq_s16_u16(vaddw_u8(vreinterpretq_u16_s16(q2tmp3.val[1]),\n                                          vreinterpret_u8_s32(d31)));\n\n    d28 = vreinterpret_s32_u8(vqmovun_s16(q4));\n    d29 = vreinterpret_s32_u8(vqmovun_s16(q5));\n    d30 = vreinterpret_s32_u8(vqmovun_s16(q6));\n    d31 = vreinterpret_s32_u8(vqmovun_s16(q7));\n\n    dst0 = dst;\n    dst1 = dst + 4;\n    vst1_lane_s32((int32_t *)dst0, d28, 0);\n    dst0 += stride;\n    vst1_lane_s32((int32_t *)dst1, d28, 1);\n    dst1 += stride;\n    vst1_lane_s32((int32_t *)dst0, d29, 0);\n    dst0 += stride;\n    vst1_lane_s32((int32_t *)dst1, d29, 1);\n    dst1 += stride;\n\n    vst1_lane_s32((int32_t *)dst0, d30, 0);\n    dst0 += stride;\n    vst1_lane_s32((int32_t *)dst1, d30, 1);\n    dst1 += stride;\n    vst1_lane_s32((int32_t *)dst0, d31, 0);\n    vst1_lane_s32((int32_t *)dst1, d31, 1);\n    return;\n}\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/b14825026-aarch64-FP_LO_REGS/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi != 'arm64-v8a':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/b8247455-hidden-cxa/jni/Android.mk",
    "content": "# This test is to demostrate the issue:\n#\n#  hidden symbol '__cxa_begin_cleanup' in ./obj/local/armeabi/libgnustl_static.a(eh_arm.o)\n#    is referenced by DSO ./obj/local/armeabi/libidiv.so\n#  hidden symbol '__cxa_type_match' in ./obj/local/armeabi/libgnustl_static.a(eh_arm.o)\n#    is referenced by DSO ./obj/local/armeabi/libidiv.so\n#\n#  File idiv.cpp contains code potentially causes divide-by-zero exception. libidiv.so\n#  is built with libgnustl_static.a which provides __cxa_begin_cleanup and\n#  __cxa_type_match needed by unwinder in libgcc.a.  Unfortunately both are built\n#  with hidden visibility, and causes warnings as the above when libidiv.so is used\n#  to link other binaries.\n#\n# The fix is to unhide both __cxa_begin_cleanup and __cxa_type_match\n#\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libidiv\nLOCAL_SRC_FILES:= idiv.cpp\nLOCAL_CFLAGS := -Wall -Werror -Wno-unused-parameter\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libthrow\nLOCAL_SRC_FILES:= throw.cpp\nLOCAL_CFLAGS := -Wall -Werror -frtti -fexceptions\nLOCAL_SHARED_LIBRARIES = libidiv\ninclude $(BUILD_SHARED_LIBRARY)"
  },
  {
    "path": "tests/build/b8247455-hidden-cxa/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/build/b8247455-hidden-cxa/jni/idiv.cpp",
    "content": "int my_idiv (int a, int b)\n{\n    return a / b;\n}\n"
  },
  {
    "path": "tests/build/b8247455-hidden-cxa/jni/throw.cpp",
    "content": "extern int my_idiv(int a, int b);\nint my_thorw()\n{\n    my_idiv(3, 5);\n    throw 20;\n}\n"
  },
  {
    "path": "tests/build/b9193874-neon/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := b9193874-neon\nLOCAL_SRC_FILES := b9193874-neon.c.neon\nLOCAL_CFLAGS += -frename-registers -O2\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/b9193874-neon/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/b9193874-neon/jni/b9193874-neon.c",
    "content": "#include <arm_neon.h>\n\nstatic const int16_t coef[4] = { 89858 / 4, 22014, 45773 / 2, 113618 / 4 };\n\nvoid UpsampleRgbaLinePairNEON(const uint8_t *top_y, const uint8_t *bottom_y, const uint8_t *top_u, const uint8_t *top_v, const uint8_t *cur_u, const uint8_t *cur_v, uint8_t *top_dst, uint8_t *bottom_dst, int len)\n{\n    int block;\n    uint8_t uv_buf[2 * 32 + 15];\n    uint8_t *const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);\n    const int uv_len = (len + 1) >> 1;\n    const int num_blocks = (uv_len - 1) >> 3;\n    const int leftover = uv_len - num_blocks * 8;\n    const int last_pos = 1 + 16 * num_blocks;\n    const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1;\n    const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1;\n    const int16x4_t cf16 = vld1_s16(coef);\n    const int32x2_t cf32 = vmov_n_s32(76283);\n    const uint8x8_t u16 = vmov_n_u8(16);\n    const uint8x8_t u128 = vmov_n_u8(128);\n    for (block = 0; block < num_blocks; ++block) {\n        {\n            uint8x8_t a = vld1_u8(top_u);\n            uint8x8_t b = vld1_u8(top_u + 1);\n            uint8x8_t c = vld1_u8(cur_u);\n            uint8x8_t d = vld1_u8(cur_u + 1);\n            uint16x8_t al = vshll_n_u8(a, 1);\n            uint16x8_t bl = vshll_n_u8(b, 1);\n            uint16x8_t cl = vshll_n_u8(c, 1);\n            uint16x8_t dl = vshll_n_u8(d, 1);\n            uint8x8_t diag1, diag2;\n            uint16x8_t sl;\n            sl = vaddl_u8(a, b);\n            sl = vaddw_u8(sl, c);\n            sl = vaddw_u8(sl, d);\n            al = vaddq_u16(sl, al);\n            bl = vaddq_u16(sl, bl);\n            al = vaddq_u16(al, dl);\n            bl = vaddq_u16(bl, cl);\n            diag2 = vshrn_n_u16(al, 3);\n            diag1 = vshrn_n_u16(bl, 3);\n            a = vrhadd_u8(a, diag1);\n            b = vrhadd_u8(b, diag2);\n            c = vrhadd_u8(c, diag2);\n            d = vrhadd_u8(d, diag1);\n            {\n                const uint8x8x2_t a_b = {{ a, b }};\n                const uint8x8x2_t c_d = {{ c, d }};\n                vst2_u8(r_uv, a_b);\n                vst2_u8(r_uv + 32, c_d);\n            }\n        }\n        {\n            uint8x8_t a = vld1_u8(top_v);\n            uint8x8_t b = vld1_u8(top_v + 1);\n            uint8x8_t c = vld1_u8(cur_v);\n            uint8x8_t d = vld1_u8(cur_v + 1);\n            uint16x8_t al = vshll_n_u8(a, 1);\n            uint16x8_t bl = vshll_n_u8(b, 1);\n            uint16x8_t cl = vshll_n_u8(c, 1);\n            uint16x8_t dl = vshll_n_u8(d, 1);\n            uint8x8_t diag1, diag2;\n            uint16x8_t sl;\n            sl = vaddl_u8(a, b);\n            sl = vaddw_u8(sl, c);\n            sl = vaddw_u8(sl, d);\n            al = vaddq_u16(sl, al);\n            bl = vaddq_u16(sl, bl);\n            al = vaddq_u16(al, dl);\n            bl = vaddq_u16(bl, cl);\n            diag2 = vshrn_n_u16(al, 3);\n            diag1 = vshrn_n_u16(bl, 3);\n            a = vrhadd_u8(a, diag1);\n            b = vrhadd_u8(b, diag2);\n            c = vrhadd_u8(c, diag2);\n            d = vrhadd_u8(d, diag1);\n            {\n                const uint8x8x2_t a_b = {{ a, b }};\n                const uint8x8x2_t c_d = {{ c, d }};\n                vst2_u8(r_uv + 16, a_b);\n                vst2_u8(r_uv + 16 + 32, c_d);\n            }\n        }\n        {\n            if (top_y) {\n                {\n                    int i;\n                    for (i = 0; i < 16; i += 8) {\n                        int off = ((16 * block + 1) + i) * 4;\n                        uint8x8_t y = vld1_u8(top_y + (16 * block + 1) + i);\n                        uint8x8_t u = vld1_u8((r_uv) + i);\n                        uint8x8_t v = vld1_u8((r_uv) + i + 16);\n                        int16x8_t yy = vreinterpretq_s16_u16(vsubl_u8(y, u16));\n                        int16x8_t uu = vreinterpretq_s16_u16(vsubl_u8(u, u128));\n                        int16x8_t vv = vreinterpretq_s16_u16(vsubl_u8(v, u128));\n                        int16x8_t ud = vshlq_n_s16(uu, 1);\n                        int16x8_t vd = vshlq_n_s16(vv, 1);\n                        int32x4_t vrl = vqdmlal_lane_s16(vshll_n_s16(vget_low_s16(vv), 1), vget_low_s16(vd), cf16, 0);\n                        int32x4_t vrh = vqdmlal_lane_s16(vshll_n_s16(vget_high_s16(vv), 1), vget_high_s16(vd), cf16, 0);\n                        int16x8_t vr = vcombine_s16(vrshrn_n_s32(vrl, 16), vrshrn_n_s32(vrh, 16));\n                        int32x4_t vl = vmovl_s16(vget_low_s16(vv));\n                        int32x4_t vh = vmovl_s16(vget_high_s16(vv));\n                        int32x4_t ugl = vmlal_lane_s16(vl, vget_low_s16(uu), cf16, 1);\n                        int32x4_t ugh = vmlal_lane_s16(vh, vget_high_s16(uu), cf16, 1);\n                        int32x4_t gcl = vqdmlal_lane_s16(ugl, vget_low_s16(vv), cf16, 2);\n                        int32x4_t gch = vqdmlal_lane_s16(ugh, vget_high_s16(vv), cf16, 2);\n                        int16x8_t gc = vcombine_s16(vrshrn_n_s32(gcl, 16), vrshrn_n_s32(gch, 16));\n                        int32x4_t ubl = vqdmlal_lane_s16(vshll_n_s16(vget_low_s16(uu), 1), vget_low_s16(ud), cf16, 3);\n                        int32x4_t ubh = vqdmlal_lane_s16(vshll_n_s16(vget_high_s16(uu), 1), vget_high_s16(ud), cf16, 3);\n                        int16x8_t ub = vcombine_s16(vrshrn_n_s32(ubl, 16), vrshrn_n_s32(ubh, 16));\n                        int32x4_t rl = vaddl_s16(vget_low_s16(yy), vget_low_s16(vr));\n                        int32x4_t rh = vaddl_s16(vget_high_s16(yy), vget_high_s16(vr));\n                        int32x4_t gl = vsubl_s16(vget_low_s16(yy), vget_low_s16(gc));\n                        int32x4_t gh = vsubl_s16(vget_high_s16(yy), vget_high_s16(gc));\n                        int32x4_t bl = vaddl_s16(vget_low_s16(yy), vget_low_s16(ub));\n                        int32x4_t bh = vaddl_s16(vget_high_s16(yy), vget_high_s16(ub));\n                        rl = vmulq_lane_s32(rl, cf32, 0);\n                        rh = vmulq_lane_s32(rh, cf32, 0);\n                        gl = vmulq_lane_s32(gl, cf32, 0);\n                        gh = vmulq_lane_s32(gh, cf32, 0);\n                        bl = vmulq_lane_s32(bl, cf32, 0);\n                        bh = vmulq_lane_s32(bh, cf32, 0);\n                        y = vqmovun_s16(vcombine_s16(vrshrn_n_s32(rl, 16), vrshrn_n_s32(rh, 16)));\n                        u = vqmovun_s16(vcombine_s16(vrshrn_n_s32(gl, 16), vrshrn_n_s32(gh, 16)));\n                        v = vqmovun_s16(vcombine_s16(vrshrn_n_s32(bl, 16), vrshrn_n_s32(bh, 16)));\n                        do {\n                            const uint8x8x4_t r_g_b_v255 = {{ y, u, v, vmov_n_u8(255) }};\n                            vst4_u8(top_dst + off, r_g_b_v255); \n                        } while (0);\n                    }\n                }\n            }\n            if (bottom_y) {\n                {\n                    int i;\n                    for (i = 0; i < 16; i += 8) {\n                        int off = ((16 * block + 1) + i) * 4;\n                        uint8x8_t y = vld1_u8(bottom_y + (16 * block + 1) + i);\n                        uint8x8_t u = vld1_u8(((r_uv) + 32) + i);\n                        uint8x8_t v = vld1_u8(((r_uv) + 32) + i + 16);\n                        int16x8_t yy = vreinterpretq_s16_u16(vsubl_u8(y, u16));\n                        int16x8_t uu = vreinterpretq_s16_u16(vsubl_u8(u, u128));\n                        int16x8_t vv = vreinterpretq_s16_u16(vsubl_u8(v, u128));\n                        int16x8_t ud = vshlq_n_s16(uu, 1);\n                        int16x8_t vd = vshlq_n_s16(vv, 1);\n                        int32x4_t vrl = vqdmlal_lane_s16(vshll_n_s16(vget_low_s16(vv), 1), vget_low_s16(vd), cf16, 0);\n                        int32x4_t vrh = vqdmlal_lane_s16(vshll_n_s16(vget_high_s16(vv), 1), vget_high_s16(vd), cf16, 0);\n                        int16x8_t vr = vcombine_s16(vrshrn_n_s32(vrl, 16), vrshrn_n_s32(vrh, 16));\n                        int32x4_t vl = vmovl_s16(vget_low_s16(vv));\n                        int32x4_t vh = vmovl_s16(vget_high_s16(vv));\n                        int32x4_t ugl = vmlal_lane_s16(vl, vget_low_s16(uu), cf16, 1);\n                        int32x4_t ugh = vmlal_lane_s16(vh, vget_high_s16(uu), cf16, 1);\n                        int32x4_t gcl = vqdmlal_lane_s16(ugl, vget_low_s16(vv), cf16, 2);\n                        int32x4_t gch = vqdmlal_lane_s16(ugh, vget_high_s16(vv), cf16, 2);\n                        int16x8_t gc = vcombine_s16(vrshrn_n_s32(gcl, 16), vrshrn_n_s32(gch, 16));\n                        int32x4_t ubl = vqdmlal_lane_s16(vshll_n_s16(vget_low_s16(uu), 1), vget_low_s16(ud), cf16, 3);\n                        int32x4_t ubh = vqdmlal_lane_s16(vshll_n_s16(vget_high_s16(uu), 1), vget_high_s16(ud), cf16, 3);\n                        int16x8_t ub = vcombine_s16(vrshrn_n_s32(ubl, 16), vrshrn_n_s32(ubh, 16));\n                        int32x4_t rl = vaddl_s16(vget_low_s16(yy), vget_low_s16(vr));\n                        int32x4_t rh = vaddl_s16(vget_high_s16(yy), vget_high_s16(vr));\n                        int32x4_t gl = vsubl_s16(vget_low_s16(yy), vget_low_s16(gc));\n                        int32x4_t gh = vsubl_s16(vget_high_s16(yy), vget_high_s16(gc));\n                        int32x4_t bl = vaddl_s16(vget_low_s16(yy), vget_low_s16(ub));\n                        int32x4_t bh = vaddl_s16(vget_high_s16(yy), vget_high_s16(ub));\n                        rl = vmulq_lane_s32(rl, cf32, 0);\n                        rh = vmulq_lane_s32(rh, cf32, 0);\n                        gl = vmulq_lane_s32(gl, cf32, 0);\n                        gh = vmulq_lane_s32(gh, cf32, 0);\n                        bl = vmulq_lane_s32(bl, cf32, 0);\n                        bh = vmulq_lane_s32(bh, cf32, 0);\n                        y = vqmovun_s16(vcombine_s16(vrshrn_n_s32(rl, 16), vrshrn_n_s32(rh, 16)));\n                        u = vqmovun_s16(vcombine_s16(vrshrn_n_s32(gl, 16), vrshrn_n_s32(gh, 16)));\n                        v = vqmovun_s16(vcombine_s16(vrshrn_n_s32(bl, 16), vrshrn_n_s32(bh, 16)));\n                        do {\n                            const uint8x8x4_t r_g_b_v255 = {{ y, u, v, vmov_n_u8(255) }};\n                            vst4_u8(bottom_dst + off, r_g_b_v255);\n                        } while (0);\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "tests/build/b9193874-neon/properties.json",
    "content": "{\"broken-toolchain-version\": \"clang3.6\"}\n"
  },
  {
    "path": "tests/build/b9193874-neon/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    if toolchain != '4.9':\n        return toolchain\n    return None\n"
  },
  {
    "path": "tests/build/build-assembly-file/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test-build-assembly\nifeq ($(TARGET_ARCH),arm)\n    LOCAL_SRC_FILES := assembly1.s assembly2.S\nelse\n    ifeq ($(TARGET_ARCH),x86)\n        LOCAL_SRC_FILES := assembly-x86.S\n    else\n        ifeq ($(TARGET_ARCH),mips)\n            LOCAL_SRC_FILES := assembly-mips.S\n        endif\n    endif\nendif\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n"
  },
  {
    "path": "tests/build/build-assembly-file/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/build-assembly-file/jni/assembly-mips.S",
    "content": "       .text\n       .align  2\n       .ent    foo\n       .globl  foo\n       .set    noreorder\nfoo:\n       jr      $31\n       nop\n       .end    foo\n"
  },
  {
    "path": "tests/build/build-assembly-file/jni/assembly-x86.S",
    "content": "# assembly-x86.S\n#\n# Copyright 2011, The Android Open Source Project\n# Copyright 2011, Intel Corporation\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are met:\n#     * Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above copyright\n#       notice, this list of conditions and the following disclaimer in the\n#       documentation and/or other materials provided with the distribution.\n#     * Neither the name of Google Inc. nor the names of its contributors may\n#       be used to endorse or promote products derived from this software\n#       without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY Google Inc. ``AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n# EVENT SHALL Google Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n.global foo\nfoo:\n    pushl   %ebp\n    movl    %esp, %ebp\n    subl    $8, %esp\n\n    movl    $0, %eax\n    leave\n    ret\n"
  },
  {
    "path": "tests/build/build-assembly-file/jni/assembly1.s",
    "content": ".global foo\nfoo:\n    bl bar\n    bx lr\n"
  },
  {
    "path": "tests/build/build-assembly-file/jni/assembly2.S",
    "content": ".global bar\nbar:\n    mov  r0, #0\n    bx lr\n"
  },
  {
    "path": "tests/build/build-mode/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\n\n# We build up to 4 armeabi binaries\n# To check for thumb/arm build modes, either with the .arm extension\n# or using LOCAL_ARM_MODE\n#\nifeq ($(TARGET_ARCH_ABI),armeabi)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb\nLOCAL_CFLAGS += -DCHECK_THUMB\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb_b\nLOCAL_CFLAGS += -DCHECK_THUMB\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := thumb\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_arm\nLOCAL_CFLAGS += -DCHECK_ARM\nLOCAL_SRC_FILES := main.c.arm\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_arm_b\nLOCAL_CFLAGS += -DCHECK_ARM\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := arm\ninclude $(BUILD_EXECUTABLE)\n\nendif # TARGET_ARCH == arm\n\n# We build 8 armeabi-v7a binaries because we need to check neon as well\n#\nifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb2\nLOCAL_CFLAGS += -DCHECK_THUMB2\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb2_b\nLOCAL_CFLAGS += -DCHECK_THUMB2\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := thumb\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_armv7\nLOCAL_CFLAGS += -DCHECK_ARM\nLOCAL_SRC_FILES := main.c.arm\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_armv7_b\nLOCAL_CFLAGS += -DCHECK_ARM\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := arm\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb2_neon\nLOCAL_CFLAGS += -DCHECK_THUMB2 -DCHECK_NEON\nLOCAL_SRC_FILES := main.c.neon\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb2_neon_b\nLOCAL_CFLAGS += -DCHECK_THUMB2 -DCHECK_NEON\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_NEON := true\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_thumb2_neon_c\nLOCAL_CFLAGS += -DCHECK_THUMB2 -DCHECK_NEON\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := thumb\nLOCAL_ARM_NEON := true\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_armv7_neon\nLOCAL_CFLAGS += -DCHECK_ARM -DCHECK_NEON\nLOCAL_SRC_FILES := main.c.arm.neon\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_armv7_neon_b\nLOCAL_CFLAGS += -DCHECK_ARM -DCHECK_NEON\nLOCAL_SRC_FILES := main.c.arm\nLOCAL_ARM_NEON := true\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_armv7_neon_c\nLOCAL_CFLAGS += -DCHECK_ARM -DCHECK_NEON\nLOCAL_SRC_FILES := main.c\nLOCAL_ARM_MODE := arm\nLOCAL_ARM_NEON := true\ninclude $(BUILD_EXECUTABLE)\n\nendif # TARGET_ARCH_ABI == armeabi-v7a || armeabi-v7a-hard\n\n# We only build a single binary for x86\n#\nifeq ($(TARGET_ARCH),x86)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_x86\nLOCAL_CFLAGS += -DCHECK_X86\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n\nendif # TARGET_ARCH == x86\n\nifeq ($(TARGET_ARCH),mips)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_build_mode_mips\nLOCAL_CFLAGS += -DCHECK_MIPS\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n\nendif # TARGET_ARCH == mips\n\nendif # if TARGET_ARCH is known arch\n"
  },
  {
    "path": "tests/build/build-mode/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_OPTIM := release"
  },
  {
    "path": "tests/build/build-mode/jni/main.c",
    "content": "/* This simple file is used to check that compiler flags are properly\n * set when using the NDK build system. Look at Android.mk to see how\n * the various CHECK_XXX macros are supposed to be defined.\n */\nint main(void)\n{\n#if defined(CHECK_THUMB)\n#  ifndef __arm__\n#    error \"This source file should be compiled with an ARM toolchain\"\n#  endif\n#  ifndef __thumb__\n#    error \"This source file should be built in thumb mode!\"\n#  endif\n#elif defined(CHECK_THUMB2)\n#  ifndef __arm__\n#    error \"This source file should be compiled with an ARM toolchain\"\n#  endif\n#  ifndef __thumb2__\n#    error \"This source file should be built in thumb2 mode!\"\n#  endif\n#elif defined(CHECK_ARM)\n#  ifndef __arm__\n#    error \"This source file should be compiled with an ARM toolchain\"\n#  endif\n#  if defined(__thumb__) || defined(__thumb2__)\n#    error \"This source file should be compiled to 32-bit ARM instructions\"\n#  endif\n#elif defined(CHECK_X86)\n#  ifndef __i386__\n#    error \"This source file should be compiled with an x86 toolchain\"\n#  endif\n#elif defined(CHECK_MIPS)\n#  ifndef __mips__\n#    error \"This source file should be compiled with a MIPS toolchain\"\n#  endif\n#else\n#  error \"This unit test is broken!\"\n#endif\n\n#if defined(CHECK_NEON)\n#  ifndef __ARM_NEON__\n#    error \"This source file should be compiled with NEON support!\"\n#  endif\n#else\n#  ifdef __ARM_NEON__\n#    error \"This source file should be compiled without NEON support!\"\n#  endif\n#endif\n\n#ifndef __ANDROID__\n#  error \"This toolchain doesn't define the __ANDROID__ built-in macro!\"\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_cc_extension_deps\nLOCAL_SRC_FILES := main.cc\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_cp_extension_deps\nLOCAL_SRC_FILES := main.cp\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_cxx_extension_deps\nLOCAL_SRC_FILES := main.cxx\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_cpp_extension_deps\nLOCAL_SRC_FILES := main.cpp\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_CPP_extension_deps_1\nLOCAL_SRC_FILES := main.CPP\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_C_extension_deps\nLOCAL_SRC_FILES := main.C\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_c++_extension_deps\nLOCAL_SRC_FILES := main.c++\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/Application.mk",
    "content": "APP_STL := gnustl_static\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.C",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.CPP",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.c++",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.cc",
    "content": "#include <iostream>\n\nint main() {\n    std::cout << \"Hello World!\" << std::endl;\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.cp",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.cpp",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/jni/main.cxx",
    "content": "#include \"main.cc\"\n"
  },
  {
    "path": "tests/build/c++-stl-source-extensions/test_config.py",
    "content": "# Shut up a warning about us not being a real package.\nfrom __future__ import absolute_import\nimport platform\n\n\ndef match_unsupported(_abi, _api_level, _toolchain, _subtest=None):\n    if platform.system() == 'Windows':\n        # This test is specifically checking that we can handle all the\n        # different C++ source extensions, including those that differ only by\n        # case. Windows is case insensitive, so this test fails hard.\n        return platform.system()\n    return None\n"
  },
  {
    "path": "tests/build/check-armeabi-v7a-prebuilts/build.sh",
    "content": "#!/bin/bash\n\n# The purpose of this dummy build test is to ensure that all the\n# armeabi-v7a prebuilt binaries distributed with the NDK were\n# properly built targetting VFPv3-D16, as per the ABI spec.\n#\n# For a related bug, see http://code.google.com/p/android/issues/detail?id=26199\n#\n\n#\n# $1: ELF binary\n# $2: Tag name (e.g. Tag_CPU_name)\n#\nextract_arch_tag ()\n{\n    echo $($ARM_READELF -A \"$1\" | awk '$1 == \"'$2':\" { print $2; }' | sort -u | tr '\\n' ' ')\n}\n\n# Returns success only if a file is a static object or library.\n# We simply check the suffix, which must be either .a or .o\n# $1: file name\nis_static_file ()\n{\n    case $1 in\n        *.o|*.a)\n            return 0\n            ;;\n    esac\n    return 1\n}\n\n\n#\n# WARNING: VERY IMPORTANT TECHNICAL NOTE:\n#\n# The function below works by inspecting the architecture-specific\n# attributes in an ELF file. Please be aware that the behaviour of\n# binutils-2.19 and binutils-2.21 is different when generating these\n# tags.\n#\n# 1/ When compiling for ARMv7-A targets, one can use any of the following\n#    labels for the -mfpu=<name> option:\n#\n#        vfp\n#        vfpv3\n#        vfpv3-d16\n#        neon\n#\n# 2/ There are two VFPv3 architectures defined by ARM:\n#\n#        VFPv3-D16  -> Mandates only 16 double FPU registers (d0-d15)\n#        VFPv3-D32  -> Mandates 32 double FPU registers (d0-d31)\n#\n#    In addition, NEON requires VFPv3-D32\n#\n#    There is also VFPv2, which is an earlier version of VFPv3. Technically\n#    speaking, VFPv3 is not completely backwards compatible with VFPv2 because\n#    there are a few VFPv2 instructions it doesn't support.\n#\n# 3/ The table below indicates, for each -mfpu label, the following:\n#\n#     - The value of the 'Tag_VFP_arch' attribute that will be placed in\n#       the generated object files or binaries (you can list them with\n#       'readelf -A <file>')\n#\n#     - Whether the generated code uses 16 or 32 FPU double registers\n#       (this is checked by looking at the disassembly of libgnustl_shared.so,\n#       more specifically functions like 'cosf' or 'sinf' inside it).\n#\n#  First, for binutils-2.19:\n#\n#     fpu value           EABI tag          FPU reg count\n#    -----------------------------------------------------\n#       vfp                 VFPv2            16\n#       vfpv3               VFPv3-D16        32 (*)\n#       vfpv3-d16           VFPv3            16 (*)\n#       neon                VFPv3            32\n#\n#  And now for binutils-2.21\n#\n#     fpu value           EABI tag          FPU reg count\n#    -----------------------------------------------------\n#       vfp                 VFPv2            16\n#       vfpv3               VFPv3            32\n#       vfpv3-d16           VFPv3-D16        16\n#       neon                VFPv3            32\n#\n#  This shows that:\n#\n#    - The 'VFPv3' tag seems to match VFPv3-D32 exclusively on 2.21,\n#      but is a mess with 2.19\n#\n#    - Similarly, the 'vfpv3' value seems to match VFPv3-D32 as well,\n#      with the exception that binutils-2.19 is buggy and will put an\n#      invalid tag (VFPv3-D16, instead of VFPv3) in the generate ELF file.\n#\n#    - binutils 2.19 puts the wrong tag in the executable for vfpv3 and\n#      vfpv3-d16, then should probably be inverted!\n#\n#  The end result is that we can't use the EABI tag to determine the number\n#  of hardware FPU registers that are really used by the machine code with\n#  binutils 2.19 :-(\n#\n#  BONUS:\n#\n#    - When using 'neon', binutils-2.21 will also add a new tag named\n#      'Tag_Advanced_SIMD_arch' with value 'NEONv1'. Sadly, binutils-2.19\n#      doesn't do any of this.\n#\n\n# Check that an ELF binary is compatible with our armeabi-v7a ABI\n# (i.e. no NEON, and only 16 hardware registers being used).\n#\n# See technical note above to understand how this currently works.\n# We're still assuming the toolchain is built with the buggy binutils-2.19.\n#\n# $1: path to an ARMv7-A ELF binary (static lib, shared lib or executable)\n#\ncheck_armv7_elf_binary ()\n{\n    # We use a small awk script to parse the output of 'readelf -A'\n    # Which typically looks like:\n    #\n    # Attribute Section: aeabi\n    #   File Attributes\n    #   Tag_CPU_name: \"7-A\"\n    #   Tag_CPU_arch: v7\n    #   Tag_CPU_arch_profile: Application\n    #   Tag_ARM_ISA_use: Yes\n    #   Tag_THUMB_ISA_use: Thumb-2\n    #   Tag_VFP_arch: VFPv3-D16\n    #   Tag_ABI_PCS_wchar_t: 4\n    #   Tag_ABI_FP_denormal: Needed\n    #   Tag_ABI_FP_exceptions: Needed\n    #   Tag_ABI_FP_number_model: IEEE 754\n    #   Tag_ABI_align8_needed: Yes\n    #   Tag_ABI_align8_preserved: Yes, except leaf SP\n    #   Tag_ABI_enum_size: int\n    #   Tag_ABI_HardFP_use: SP and DP\n    #   Tag_ABI_optimization_goals: Aggressive Speed\n    #   Tag_unknown_44: 1 (0x1)\n    #\n    # Note that for static libraries, these sections will appear multiple\n    # time in the output of 'readelf -A'.\n\n    echo \"Checking: $(basename $1)\"\n    if [ ! -f \"$1\" ]; then\n        1>&2 echo \"PANIC: Missing binary: $1\"\n        exit 1\n    fi\n\n    # We want to check the values of Tag_CPU_name\n    CPU_NAMES=$(extract_arch_tag \"$1\" Tag_CPU_name)\n    VFP_ARCHS=$(extract_arch_tag \"$1\" Tag_VFP_arch)\n    NEON_ARCHS=$(extract_arch_tag \"$1\" Tag_Advanced_SIMD_arch)\n\n    # IMPORTANT NOTE: Even when using -march=armv7-a, the compiler may not\n    # necessarily use ARMv7-A specific instruction and will tag an object file\n    # with the following attributes:\n    #\n    # Attribute Section: aeabi\n    #   File Attributes\n    #   Tag_CPU_name: \"5TE\"\n    #   Tag_CPU_arch: v5TE\n    #   Tag_ARM_ISA_use: Yes\n    #   Tag_THUMB_ISA_use: Thumb-1\n    #   Tag_ABI_PCS_wchar_t: 4\n    #   Tag_ABI_FP_denormal: Needed\n    #   Tag_ABI_FP_exceptions: Needed\n    #   Tag_ABI_FP_number_model: IEEE 754\n    #   Tag_ABI_align8_needed: Yes\n    #   Tag_ABI_align8_preserved: Yes, except leaf SP\n    #   Tag_ABI_enum_size: int\n    #   Tag_ABI_optimization_goals: Aggressive Speed\n    #   Tag_unknown_44: 1 (0x1)\n    #\n    # This means that in static libraries, you can have both\n    # '5TE' and '7-A' CPU name tags at the same time, or only\n    # '5TE' or only '7-A', deal with all these cases properly.\n\n    echo \"  found tags: CPU names:'$CPU_NAMES' VFP:'$VFP_ARCHS' NEON:'$NEON_ARCHS'\"\n\n    # Clearly, any trace of NEON is a deal-breaker!\n    if [ \"$NEON_ARCHS\" ]; then\n        1>&2 echo \"PANIC: Binary file should not contain NEON instructions: $1\"\n        exit 1\n    fi\n\n    if is_static_file \"$1\"; then\n        # For static libraries / object files, it's ok to contain ARMv5TE binaries\n        if [ \"$CPU_NAMES\" == \"\\\"5TE\\\"\" -a \"$CPU_NAMES\" != \"\\\"7-A\\\"\" -a \"$CPU_NAMES\" != \"\\\"5TE\\\" \\\"7-A\\\"\" ]; then\n            # Neither ARMv7-A or ARMv5TE+ARMv7-A, something's fishy\n            1>&2 echo \"PANIC: File is neither ARMv5TE or ARMv7-A binary: $1\"\n            exit 1\n        fi\n\n        # exit here because some static libraries can have a mix of several\n        # VFP tags that make them difficult to check (e.g. libgnustl_static.a\n        # can have 'VFPv1 VFPv2 VFPv3' at the same time :-(\n        return\n    fi\n\n    # If we reach this point, we only contain ARMv7-A machine code, so look\n    # at the VFP arch tag(s)\n\n    # Sometimes no VFP_arch tag is placed in the final binary, this happens\n    # with libgabi++_shared.so for example, because the code doesn't have\n    # any floating point instructions.\n    #\n\n    # XXX: FOR NOW, ASSUME BROKEN binutils-2.19, AND THUS THAT 'VFPv3' IS VALID\n\n    if [ \"$VFP_ARCHS\" != \"VFPv3\" -a \"$VFP_ARCHS\" != \"VFPv3-D16\" -a \"$VFP_ARCHS\" != \"\" ]; then\n        1>&2 echo \"PANIC: File is not a VFPv3-D16 binary: $1\"\n        exit 1\n    fi\n}\n\nexport ANDROID_NDK_ROOT=$NDK\n\nNDK_BUILDTOOLS_PATH=$NDK/build/instruments\n. $NDK/build/instruments/prebuilt-common.sh\n\nif [ -n \"$APP_ABI\" ]; then\n    if [ \"$(convert_abi_to_arch $APP_ABI)\" != \"arm\" ]; then\n        echo \"Skipping ARM only test\"\n        exit 0\n    fi\nfi\n\nARM_TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch arm)\nARM_TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch arm)\n\nHOST_ARCH=\nHOST_ARCH2=\nHOST_TAG=\nHOST_TAG2=\ncase $(uname -s) in\n    Darwin)\n      HOST_ARCH=$(uname -m)\n      case \"$HOST_ARCH\" in\n          i?86) HOST_ARCH=x86\n              if ! echo __LP64__ | (CCOPTS= gcc -E - 2>/dev/null) | grep -q __LP64__ ; then\n                  HOST_ARCH=x86_64\n                  HOST_ARCH2=x86\n              fi\n              ;;\n          x86_64)\n              HOST_ARCH=x86_64\n              HOST_ARCH2=x86\n              ;;\n          *)\n              echo \"ERROR: Unsupported host CPU architecture: '$HOST_ARCH'\" 1>&2\n              exit 1\n      esac\n      HOST_TAG=darwin-$HOST_ARCH\n      test -n \"$HOST_ARCH2\" && HOST_TAG2=darwin-$HOST_ARCH2\n      ;;\n    Linux)\n      HOST_ARCH=$(uname -m)\n      case \"$HOST_ARCH\" in\n          i?86)\n              HOST_ARCH=x86\n              ;;\n          x86_64)\n              if file -b /bin/ls | grep -q 32-bit; then\n                  HOST_ARCH=x86\n              else\n                  HOST_ARCH2=x86\n              fi\n              ;;\n          *)\n              echo \"ERROR: Unsupported host CPU architecture: '$HOST_ARCH'\" 1>&2\n              exit 1\n      esac\n      HOST_TAG=linux-$HOST_ARCH\n      test -n \"$HOST_ARCH2\" && HOST_TAG2=linux-$HOST_ARCH2\n      ;;\n    *)\n      echo \"WARNING: This test cannot run on this machine!\" >&2\n      exit 0\n      ;;\nesac\n\nARM_READELF=\nfor tag in $HOST_TAG $HOST_TAG2; do\n    READELF=$NDK/toolchains/$ARM_TOOLCHAIN_NAME/prebuilt/$tag/bin/${ARM_TOOLCHAIN_PREFIX}-readelf\n    echo \"Probing for ${READELF}...\"\n    if [ -x \"$READELF\" ]; then\n        ARM_READELF=\"$READELF\"\n        echo \"Found: $ARM_READELF\"\n        break\n    fi\ndone\nif [ -z \"$ARM_READELF\" ]; then\n    echo \"ERROR: Can't find ARM readelf\" >&2\n    exit 1\nfi\n\nARMv7_ABIS=\"armeabi-v7a armeabi-v7a-hard\"\nfor ABI in $ARMv7_ABIS; do\n    for VERSION in $DEFAULT_GCC_VERSION_LIST; do\n        GNUSTL_LIBS=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ABI\n        check_armv7_elf_binary $GNUSTL_LIBS/libsupc++.a\n        check_armv7_elf_binary $GNUSTL_LIBS/libgnustl_shared.so\n        check_armv7_elf_binary $GNUSTL_LIBS/libgnustl_static.a\n    done\ndone\n\necho \"Done!\"\n"
  },
  {
    "path": "tests/build/check-armeabi-v7a-prebuilts/jni/Android.mk",
    "content": "LOCAL_PATH:= $(call my-dir)\n"
  },
  {
    "path": "tests/build/check-armeabi-v7a-prebuilts/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard"
  },
  {
    "path": "tests/build/clang-include-gnu-libc++/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := clang-include-gnu-libc++\nLOCAL_SRC_FILES := clang-include-gnu-libc++.cc\nLOCAL_CPPFLAGS += -std=gnu++11\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/clang-include-gnu-libc++/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared"
  },
  {
    "path": "tests/build/clang-include-gnu-libc++/jni/clang-include-gnu-libc++.cc",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <ext/atomicity.h>\n#include <type_traits>\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/copysign/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := copysign\nLOCAL_SRC_FILES := copysign.cpp\nLOCAL_CPPFLAGS := -std=c++11\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/copysign/jni/Application.mk",
    "content": "APP_STL := gnustl_static\n"
  },
  {
    "path": "tests/build/copysign/jni/copysign.cpp",
    "content": "#include <cmath>\n\ntemplate <typename T>\nT foo(T a) {\n    return std::copysign(a, static_cast<T>(-1.0));\n}\n"
  },
  {
    "path": "tests/build/copysign/test_config.py",
    "content": "def match_broken(abi, platform, toolchain, subtest=None):\n    if abi not in ('arm64-v8a', 'mips64', 'x86_64'):\n        return abi, 'https://b.android.com/74835'\n    return None, None\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/build.sh",
    "content": "# Check if APP_ABI=armeabi-v7a use \"rev\" instructions for __swapXX\n# See https://android-review.googlesource.com/#/c/17144\n#\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        echo \"ERROR: $@\"\n        exit 1\n    fi\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n    APP_ABI=*)\n        APP_ABI=$optarg\n        ;;\n    esac\ndone\n\n$NDK/ndk-build -B APP_CFLAGS=-save-temps\nfail_panic \"can't compile!\"\ngrep -w madd cortex-a53-835769-1.s | grep -qw w0,\nfail_panic \"fail to generate correct code for cortex-a53-835769-1.c\"\ngrep -w madd cortex-a53-835769-2.s | grep -qw w0,\nfail_panic \"fail to generate correct code for cortex-a53-835769-2.c\"\n\nrm -rf libs obj cortex-a53-835769-*\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := cortex-a53-835769-1\nLOCAL_SRC_FILES := cortex-a53-835769-1.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := cortex-a53-835769-2\nLOCAL_SRC_FILES := cortex-a53-835769-2.c\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/jni/Application.mk",
    "content": "APP_ABI := arm64-v8a\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/jni/cortex-a53-835769-1.c",
    "content": "int\nfoo (int a, double b, int c, int d, int e)\n{\ndouble result;\n__asm__ __volatile (\"// %0, %1\"\n: \"=w\" (result)\n:\"0\" (b)\n: /* No clobbers */\n);\nreturn c * d + e;\n}\n\nint main()\n{\n   \n}\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/jni/cortex-a53-835769-2.c",
    "content": "int\nfoo (int a, int b, int c, int d, int e)\n{\nint result;\n__asm__ __volatile (\"// %0, %1\"\n: \"=r\" (result)\n: \"r\" (b)\n: /* No clobbers */\n);\nreturn c * d + e;\n}\n\nint main()\n{\n   \n}\n"
  },
  {
    "path": "tests/build/cortex-a53-835769/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi != 'arm64-v8a':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/cpp-extensions/jni/Android.mk",
    "content": "# Basic test to check that ndk-build recognizes all standard GCC\n# C++ file extensions by default.\n#\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := test_cpp_extensions\nLOCAL_SRC_FILES := \\\n  foo1.cc \\\n  foo2.cp \\\n  foo3.cxx \\\n  foo4.cpp \\\n  foo5.C \\\n  foo6.CPP \\\n  main.c++\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/cpp-extensions/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo1.cc",
    "content": "namespace cpp {\n\nextern int foo1(int x) {\n  return x + 1;\n}\n\n}"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo2.cp",
    "content": "namespace cpp {\n\nextern int foo1(int);\n\nint foo2(int x) {\n  return foo1(x) + 2;\n}\n\n}  // namespace cpp\n"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo3.cxx",
    "content": "namespace cpp {\n\nextern int foo2(int);\n\nint foo3(int x) {\n  return foo2(x) + 3;\n}\n\n}  // namespace cpp"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo4.cpp",
    "content": "namespace cpp {\n\nextern int foo3(int);\n\nint foo4(int x) {\n  return foo3(x) + 4;\n}\n\n}  // namespace cpp\n"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo5.C",
    "content": "namespace cpp {\n\nextern int foo4(int);\n\nint foo5(int x) {\n  return foo4(x) + 5;\n}\n\n}"
  },
  {
    "path": "tests/build/cpp-extensions/jni/foo6.CPP",
    "content": "namespace cpp {\n\nextern int foo5(int);\n\nint foo6(int x) {\n  return foo5(x) + 6;\n}\n\n}  // namespace cpp"
  },
  {
    "path": "tests/build/cpp-extensions/jni/main.c++",
    "content": "namespace cpp {\nextern int foo6(int);\n}\n\nint x;\n\nint main(int argc, char** argv) {\n  x = cpp::foo6(10);\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-check-BROKEN_BUILD/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\nif [ ! -d $NDK ]; then\n    echo \"ERROR: No such directory: $NDK\" 1>&2\n    exit 1\nfi\n\nfiles=$(find $NDK/tests -name BROKEN_BUILD -print)\nif [ $? -ne 0 ]; then\n    echo \"ERROR: Can't search $NDK for BROKEN_BUILD files\" 1>&2\n    exit 1\nfi\n\nif [ -n \"$files\" ]; then\n    echo \"ERROR: Found several BROKEN_BUILD files in $NDK:\" 1>&2\n    echo $files | tr -s ' ' | tr ' ' '\\n' 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-check-BROKEN_RUN/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\nif [ ! -d $NDK ]; then\n    echo \"ERROR: No such directory: $NDK\" 1>&2\n    exit 1\nfi\n\nfiles=$(find $NDK/tests -name BROKEN_RUN -print)\nif [ $? -ne 0 ]; then\n    echo \"ERROR: Can't search $NDK for BROKEN_RUN files\" 1>&2\n    exit 1\nfi\n\nif [ -n \"$files\" ]; then\n    echo \"ERROR: Found several BROKEN_RUN files in $NDK:\" 1>&2\n    echo $files | tr -s ' ' | tr ' ' '\\n' 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-check-BUILD_SHOULD_FAIL/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\nif [ ! -d $NDK ]; then\n    echo \"ERROR: No such directory: $NDK\" 1>&2\n    exit 1\nfi\n\nfiles=$(find $NDK/tests -name BUILD_SHOULD_FAIL -print)\nif [ $? -ne 0 ]; then\n    echo \"ERROR: Can't search $NDK for BUILD_SHOULD_FAIL files\" 1>&2\n    exit 1\nfi\n\nif [ -n \"$files\" ]; then\n    echo \"ERROR: Found several BUILD_SHOULD_FAIL files in $NDK:\" 1>&2\n    echo $files | tr -s ' ' | tr ' ' '\\n' 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-check-DISABLED/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\nif [ ! -d $NDK ]; then\n    echo \"ERROR: No such directory: $NDK\" 1>&2\n    exit 1\nfi\n\nfind $NDK/tests -type d -a -name host -print | (\n    files=\"\"\n    while read dir; do\n        if [ -f $dir/DISABLED ]; then\n            files=\"$files $dir/DISABLED\"\n        fi\n    done\n    if [ -n \"$files\" ]; then\n        echo \"ERROR: Several DISABLED files found:\" 1>&2\n        echo $files | tr ' ' '\\n' 1>&2\n        exit 1\n    fi\n    ) || exit 1\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-check-__gnu_linux__/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-check-__gnu_linux__/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-check-__gnu_linux__/jni/main.c",
    "content": "#if defined(__gnu_linux__) && defined(__ANDROID__)\n#error Both __gnu_linux__ and __ANDROID__ defined\n#endif\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-check-host-python-ssl-modules/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\nif [ ! -d $NDK ]; then\n    echo \"ERROR: No such directory: $NDK\" 1>&2\n    exit 1\nfi\n\nfnames=\"        \\\n    _hashlib.so \\\n    _ssl.so     \\\n    \"\n\nfor fname in $fnames; do\n    files=$(find $NDK/prebuilt -name $fname -print)\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: Can't search $NDK for '$fname'\" 1>&2\n        exit 1\n    fi\n\n    if [ -n \"$files\" ]; then\n        echo \"ERROR: Found several '$fname' files in $NDK:\" 1>&2\n        echo $files | tr -s ' ' | tr ' ' '\\n' 1>&2\n        exit 1\n    fi\ndone\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-check-prebuilt-gdb/build.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2015, 2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\necho \"\"\necho \"=================================================================\"\necho \"===> Checking prebuilt GDB <===\"\necho \"=================================================================\"\necho \"\"\n\nEXE=\nHOSTOS=$(uname | tr '[:upper:]' '[:lower:]')\nif [[ $HOSTOS == cygwin*  || $HOSTOS == mingw* ]]; then\n    HOSTOS=windows\n    EXE=\".exe\"\nfi\n\nFILE_DIR=$(dirname $0)\nNDK_DIR=$(cd $FILE_DIR/../../.. && pwd)\nNDK_BUILDTOOLS_PATH=\"$NDK_DIR/build/instruments\"\n\n#. $NDK_DIR/build/instruments/dev-defaults.sh\n#. $NDK_DIR/build/instruments/prebuilt-common.sh\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\nfor toolchain in $(ls $NDK_DIR/toolchains | grep -v 'clang\\|llvm\\|renderscript'); do\n    echo \"===> Checking GDB for toolchain $toolchain\"\n    for hostos in $(ls $NDK_DIR/toolchains/$toolchain/prebuilt); do\n        # skip GDB built for OS different from host OS\n        if [ \"${hostos##$HOSTOS}\" == \"$hostos\" ]; then\n            echo \"Skipping GDB built for $hostos\"\n            continue\n        fi\n        gdb=$(ls $NDK_DIR/toolchains/$toolchain/prebuilt/$hostos/bin/*-gdb$EXE)\n        run $gdb --version\n        if [ $? -ne 0 ]; then\n            echo \"ERROR: GDB for toolchain $toolchain and host OS $hostos failed to start\" 1>&2\n            exit 1\n        fi\n        echo \"\"\n        echo \"===> OK\"\n    done\ndone\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/common.mk",
    "content": "SRCFILES := test.cpp\nCXXFLAGS := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CPPFLAGS  := $(CXXFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/jni/Application.mk",
    "content": "APP_ABI := x86_64\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/jni/test.cpp",
    "content": "#include <locale>\n#include <string>\n#include <ios>\n\ntemplate <typename CharType>\nclass base_num_parse : public std::num_get<CharType>\n{\npublic:\n    base_num_parse()\n        : std::num_get<CharType>(0)\n    {}\n\nprotected:\n    typedef typename std::num_get<CharType>::iter_type iter_type;\n    typedef std::basic_string<CharType> string_type;\n    typedef CharType char_type;\n\n    virtual iter_type do_get(iter_type in, iter_type end, std::ios_base &ios,std::ios_base::iostate &err,unsigned short &val) const\n    {\n        return do_real_get(in,end,ios,err,val);\n    }\n\nprivate:\n    template<typename ValueType>\n    iter_type do_real_get(iter_type in,iter_type end,std::ios_base &ios,std::ios_base::iostate &err,ValueType &val) const\n    {\n        long double ret_val = 0;\n        in = parse_currency<true>(in,end,ios,err,ret_val);\n        if(!(err & std::ios_base::failbit))\n            val = static_cast<ValueType>(ret_val);\n        return in;\n    }\n\n    template<bool intl>\n    iter_type parse_currency(iter_type in,iter_type end,std::ios_base &ios,std::ios_base::iostate &err,long double &val) const\n    {\n        std::locale loc = ios.getloc();\n        int digits = std::use_facet<std::moneypunct<char_type,intl> >(loc).frac_digits();\n        long double rval;\n        in = std::use_facet<std::money_get<char_type> >(loc).get(in,end,intl,ios,err,rval);\n        if(!(err & std::ios::failbit)) {\n            while(digits > 0) {\n                rval/=10;\n                digits --;\n            }\n            val = rval;\n        }\n        return in;\n    }\n};\n\nstatic base_num_parse<char> bb;\n\nint main()\n{\n    base_num_parse<char> b;\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1044-clang-x86_64-crash/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\"]}\n"
  },
  {
    "path": "tests/build/crystax-issue1170-alloca-redefined/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-alloca\nLOCAL_SRC_FILES := main.c\nLOCAL_CFLAGS    := -Wall -Wextra -Werror\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1170-alloca-redefined/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/crystax-issue1170-alloca-redefined/jni/main.c",
    "content": "#include <stdlib.h>\n#include <alloca.h>\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/common.mk",
    "content": "SRCFILES := test.c\nCFLAGS   := -Wall -Wextra -Werror\nCFLAGS   += -UNDEBUG\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/jni/Android.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/jni/Application.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-issue1234-fd_set-should-be-exposed-implicitly-by-stdlib_h/jni/test.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#include <assert.h>\n\n#if __APPLE__\n#include <sys/select.h>\n#endif\n\nint main()\n{\n    fd_set fds;\n    FD_ZERO(&fds);\n    FD_SET(1, &fds);\n    assert(!FD_ISSET(0, &fds));\n    assert(FD_ISSET(1, &fds));\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/common.mk",
    "content": "SRCFILES := test.cpp\nCXXFLAGS := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CPPFLAGS  := $(CXXFLAGS)\nLOCAL_LDLIBS    := -latomic\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/jni/test.cpp",
    "content": "#include <atomic>\n#include <stdint.h>\n\nint main()\n{\n    std::atomic<uint64_t> a(0);\n    return ++a == 1 ? 0 : 1;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1263-___atomic_add_fetch/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\"]}\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/common.mk",
    "content": "SRCFILES := test.cpp\nCXXFLAGS := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CPPFLAGS  := $(CXXFLAGS)\nLOCAL_LDLIBS    := -latomic\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/jni/test.cpp",
    "content": "#include <atomic>\n#include <stdint.h>\n\nint main()\n{\n    std::atomic<uint64_t> a(0);\n    return ++a == 1 ? 0 : 1;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1263-clang-64bit-atomics/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\"]}\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/common.mk",
    "content": "SRCFILES := main.cpp\nCXXFLAGS := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CPPFLAGS  := $(CXXFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/jni/main.cpp",
    "content": "#include <stdint.h> // for PTRDIFF_MAX\n#include <stddef.h> // for ptrdiff_t\n\nint main()\n{\n    ptrdiff_t x = PTRDIFF_MAX;\n    (void)x;\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1340-PTRDIFF_MAX-is-not-defined/properties.json",
    "content": "{\"broken\": \"true\"}\n"
  },
  {
    "path": "tests/build/crystax-issue1352-libobjc-soname/build.sh",
    "content": "#!/usr/bin/env bash\n\n# Copyright (c) 2011-2016, 2018 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nHOSTOS=$(uname | tr '[:upper:]' '[:lower:]')\ncase $HOSTOS in\n    cygwin*|mingw*)\n        echo \"=== Skip this test on Windows\"\n        exit 0\nesac\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd $(dirname $0)/../../.. && pwd)\nfi\nANDROID_NDK_ROOT=\"$NDK\"\nNDK_BUILDTOOLS_PATH=\"$NDK/build/tools\"\n\nsource $NDK/build/tools/dev-defaults.sh || exit 1\nsource $NDK/build/tools/prebuilt-common.sh || exit 1\n\n#LIBOBJC2_DIR=$NDK/sources/objc/gnustep-libobjc2\nLIBOBJC2_VER=1.8.1\nLIBOBJC2_DIR=$NDK/packages/libobjc2/$LIBOBJC2_VER\n\nif [ ! -d \"$LIBOBJC2_DIR\" ]; then\n    echo \"*** ERROR: No $LIBOBJC2_DIR found!\" 1>&2\n    exit 1\nfi\n\nPROPER_SONAME=libobjc.so\n\nfor ARCH in $DEFAULT_ARCHS; do\n    TCNAME=$(get_default_toolchain_name_for_arch $ARCH)\n    TCPREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n    OBJDUMP=$NDK/toolchains/$TCNAME/prebuilt/$HOST_TAG/bin/${TCPREFIX}-objdump\n    if [ ! -x \"$OBJDUMP\" ]; then\n        echo \"*** ERROR: Can't find proper objdump for $ARCH!\" 1>&2\n        exit 1\n    fi\n\n    for ABI in $(get_default_abis_for_arch $ARCH); do\n        LIBOBJC2=\"$LIBOBJC2_DIR/libs/$ABI/libobjc.so\"\n        if [ ! -e \"$LIBOBJC2\" ]; then\n            echo \"*** ERROR: No GNUstep libobjc2 found for ABI $ABI: $LIBOBJC2\" 1>&2\n            exit 1\n        fi\n\n        SONAME=$($OBJDUMP -x $LIBOBJC2 | grep '^\\s*SONAME\\>' | awk '{print $2}')\n        if [ -z \"$SONAME\" ]; then\n            echo \"*** ERROR: Can't find SONAME for $LIBOBJC2!\" 1>&2\n            exit 1\n        fi\n\n        if [ \"$SONAME\" != \"$PROPER_SONAME\" ]; then\n            echo \"*** ERROR: Wrong SONAME found in $LIBOBJC2: $SONAME (should be $PROPER_SONAME)\" 1>&2\n            exit 1\n        fi\n    done\ndone\n"
  },
  {
    "path": "tests/build/crystax-issue1363-do-not-know-how-to-soften-operand/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := test.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/crystax-issue1363-do-not-know-how-to-soften-operand/jni/Application.mk",
    "content": "APP_ABI := x86_64\nAPP_STL := system\n"
  },
  {
    "path": "tests/build/crystax-issue1363-do-not-know-how-to-soften-operand/jni/test.cpp",
    "content": "#if !__SSE2__\n#error \"__SSE2__ is not defined!\"\n#endif\n\ntypedef long double float_t;\n\nstatic float_t ldbl_min() {return 3.36210314311209350626267781732175260e-4932L;}\nstatic float_t ldbl_denorm_min() {return 6.47517511943802511092443895822764655e-4966L;}\n\nfloat_t get_smallest_value()\n{\n    static const float_t m = ldbl_denorm_min();\n#ifdef __SSE2__\n    return (__builtin_ia32_stmxcsr() & 0x8040) ? ldbl_min() : m;\n#else\n    return ((ldbl_min() / 2) == 0) ? ldbl_min() : m;\n#endif\n}\n\nfloat_t foo(float_t val)\n{\n    return val + get_smallest_value();\n}\n"
  },
  {
    "path": "tests/build/crystax-issue1370-unknown-dwarf-version/build.sh",
    "content": "#!/bin/bash\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        echo \"ERROR: $@\" 1>&2\n        exit 1\n    fi\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n    APP_ABI=*)\n        APP_ABI=$optarg\n        ;;\n    esac\ndone\n\nif [ -z \"$APP_ABI\" -o \"$APP_ABI\" = \"all\" ]; then\n    APP_ABI=\"armeabi-v7a,armeabi-v7a-hard,x86,mips,arm64-v8a,x86_64,mips64\"\nfi\n\nAPP_ABI=`echo $APP_ABI | tr ',' ' '`\nfor ABI in $APP_ABI; do\n    echo \"=== $ABI\"\n    rm -Rf libs obj\n    $NDK/ndk-build -B APP_ABI=$ABI APP_CFLAGS=\"-g -save-temps\"\n    fail_panic \"can't compile for APP_ABI=$ABI\"\ndone\n\nrm -rf libs obj\n"
  },
  {
    "path": "tests/build/crystax-issue1370-unknown-dwarf-version/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := test.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue1370-unknown-dwarf-version/jni/test.c",
    "content": "#include <inttypes.h>\n#include <sys/endian.h>\n\nint16_t f16(int16_t i)\n{\n    return __swap16(i);\n}\n\nint main()\n{\n    return f16((int16_t)1);\n}\n"
  },
  {
    "path": "tests/build/crystax-issue906-long-double/build.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\n. $NDK/build/instruments/dev-defaults.sh\n\nHOST_OS=$(uname -s | tr '[A-Z]' '[a-z]')\ncase $HOST_OS in\n    cygwin*|mingw*)\n        HOST_OS=windows\nesac\n\nHOST_ARCH=\"\"\nHOST_ARCH2=\"\"\n\ncase $HOST_OS in\n    darwin|linux|windows)\n        HOST_ARCH=$(uname -m)\n        HOST_ARCH2=\n        case $HOST_ARCH in\n            i?86)\n                HOST_ARCH=x86\n                ;;\n            x86_64)\n                if [ \"$HOST_OS\" = \"linux\" ]; then\n                    if file -b /bin/ls | grep -q 32-bit; then\n                        HOST_ARCH=x86\n                    else\n                        HOST_ARCH2=x86\n                    fi\n                else\n                    HOST_ARCH2=x86\n                fi\n                ;;\n            *)\n                echo \"ERROR: Unsupported host CPU architecture: '$HOST_ARCH'\" 1>&2\n                exit 1\n        esac\n        HOST_TAG=${HOST_OS}-${HOST_ARCH}\n        test -n \"$HOST_ARCH2\" && HOST_TAG2=${HOST_OS}-${HOST_ARCH2}\n        ;;\n    *)\n        echo \"ERROR: Unsupported host OS: '$HOST_OS'\" 1>&2\n        exit 1\n        ;;\nesac\n\nif [ \"$HOST_OS\" = \"windows\" -a \"$HOST_ARCH\" = \"x86\" ]; then\n    HOST_TAG=$HOST_OS\nelse\n    HOST_TAG=${HOST_OS}-${HOST_ARCH}\nfi\n\nHOST_TAG2=\"\"\nif [ -n \"$HOST_ARCH2\" ]; then\n    if [ \"$HOST_OS\" = \"windows\" -a \"$HOST_ARCH2\" = \"x86\" ]; then\n        HOST_TAG2=$HOST_OS\n    else\n        HOST_TAG2=${HOST_OS}-${HOST_ARCH2}\n    fi\nfi\n\n$NDK/ndk-build -B || exit 1\n\nfor ABI in $(ls -1 libs | sort); do\n    echo \"Check $ABI ...\"\n\n    case $ABI in\n        armeabi*)\n            ARCH=arm\n            ;;\n        arm64-v8a)\n            ARCH=arm64\n            ;;\n        *)\n            ARCH=$ABI\n    esac\n\n    TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)\n    TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n\n    for tag in $HOST_TAG $HOST_TAG2; do\n        NM=$NDK/toolchains/$TOOLCHAIN_NAME/prebuilt/$tag/bin/${TOOLCHAIN_PREFIX}-nm\n        echo \"Probing for ${NM}...\"\n        if [ -x $NM ]; then\n            echo \"Found: $NM\"\n            break\n        fi\n    done\n\n    if [ ! -x \"$NM\" ]; then\n        echo \"ERROR: Can't find $ARCH nm\" 1>&2\n        exit 1\n    fi\n\n    case $ABI in\n        x86_64)\n            TYPEINFO=\"_ZTIg\"\n            ;;\n        *)\n            TYPEINFO=\"_ZTIe\"\n    esac\n\n    $NM -D libs/$ABI/libtest.so | grep -q \"^ *U $TYPEINFO\\>\"\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: $ABI library don't contain 'typeinfo for long double' reference\" 1>&2\n        exit 1\n    fi\n\n    echo \"OK\"\ndone\n\necho \"Done!\"\n"
  },
  {
    "path": "tests/build/crystax-issue906-long-double/jni/Android.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := test.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/crystax-issue906-long-double/jni/Application.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-issue906-long-double/jni/test.cpp",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <typeinfo>\n\n#if __LP64__\n#define LONG_DOUBLE_SIZE 16\n#else\n#define LONG_DOUBLE_SIZE 8\n#endif\n\nstatic_assert(sizeof(long double) == LONG_DOUBLE_SIZE, \"Wrong size of 'long double'\");\n\nextern \"C\"\nconst char *ldname()\n{\n    return typeid(long double).name();\n}\n"
  },
  {
    "path": "tests/build/crystax-issue922-struct_user-exposed-by-stdlib_h/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\n$NDK/ndk-build \"$@\"\nif [ $? -eq 0 ]; then\n    echo \"ERROR: Build succeed, but it should fail\" 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-issue922-struct_user-exposed-by-stdlib_h/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-issue922-struct_user-exposed-by-stdlib_h/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/crystax-issue922-struct_user-exposed-by-stdlib_h/jni/main.c",
    "content": "#include <stdlib.h>\n\nstruct user var;\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-__GCC_HAVE_SYNC_COMPARE_AND_SWAP/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := clang-atomic-macros\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-test-__GCC_HAVE_SYNC_COMPARE_AND_SWAP/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-test-__GCC_HAVE_SYNC_COMPARE_AND_SWAP/jni/main.c",
    "content": "#if __arm__ && __ARM_ARCH_5TE__\n/* armv5 don't define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_N macros */\n#else /* !__arm__ || !__ARM_ARCH_5TE__ */\n\n#if !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)\n#error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 not defined\n#endif\n\n#if !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\n#error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 not defined\n#endif\n\n#if !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\n#error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 not defined\n#endif\n\n#if !(__mips__ && !__LP64__)\n\n#if !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\n#error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 not defined\n#endif\n\n#endif /* !(__mips__ && !__LP64__) */\n\n#endif /* !__arm__ || !__ARM_ARCH_5TE__ */\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-boost-dependencies/build.sh",
    "content": "#!/bin/bash\n\ncd $(dirname $0) || exit 1\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd ../../.. && pwd)\nfi\n\nsource $NDK/build/instruments/dev-defaults.sh || exit 1\n\nif [ -z \"$NDK_TOOLCHAIN_VERSION\" ]; then\n    TOOLCHAIN_VERSIONS=\"$DEFAULT_GCC_VERSION_LIST\"\n    for VERSION in $DEFAULT_LLVM_VERSION_LIST; do\n        TOOLCHAIN_VERSIONS=\"$TOOLCHAIN_VERSIONS clang${VERSION}\"\n    done\nelse\n    TOOLCHAIN_VERSIONS=$NDK_TOOLCHAIN_VERSION\nfi\n\nBOOST_DIR=$NDK/packages/boost\nBOOST_VERSIONS=$(ls -1 $BOOST_DIR/ 2>/dev/null)\nif [ -z \"$BOOST_VERSIONS\" ]; then\n    echo \"*** ERROR: Can't find Boost libraries in $BOOST_DIR\" 1>&2\n    exit 1\nfi\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\ncleanup()\n{\n    rm -Rf obj libs jni/Android.mk\n}\n\nfor TV in $TOOLCHAIN_VERSIONS; do\n    for VERSION in $BOOST_VERSIONS; do\n        for LIBCXX in gnustl c++; do\n            for LIBTYPE in shared static; do\n                cleanup || exit 1\n\n                {\n                    echo 'LOCAL_PATH := $(call my-dir)'\n                    echo ''\n                    echo 'include $(CLEAR_VARS)'\n                    echo 'LOCAL_MODULE := test-boost'$VERSION'-dependencies'\n                    echo 'LOCAL_SRC_FILES := test.cpp'\n                    echo 'LOCAL_STATIC_LIBRARIES := boost_regex_'$LIBTYPE\n                    echo 'include $(BUILD_EXECUTABLE)'\n                    echo ''\n                    echo '$(call import-module,boost/'$VERSION')'\n                } | cat >jni/Android.mk || exit 1\n\n                run $NDK/ndk-build -B \"$@\" APP_ABI=all APP_STL=${LIBCXX}_${LIBTYPE} NDK_TOOLCHAIN_VERSION=$TV V=1\n                if [ $? -ne 0 ]; then\n                    echo \"*** ERROR: Can't build Boost dependencies test\" 1>&2\n                    exit 1\n                fi\n            done\n        done\n    done\ndone\n\ncleanup\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-test-boost-dependencies/jni/test.cpp",
    "content": "#include <iostream>\n#include <iomanip>\n#include <boost/regex.hpp>\n\nint main()\n{\n    boost::regex re(\"(\\\\w+)-(\\\\d+)-(\\\\w+)-(\\\\d+)\");\n    boost::smatch res;\n\n    std::cout << std::boolalpha << boost::regex_match(std::string(\"AAAA-12222-BBBBB-44455\"),  res, re) << \"\\n\";\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-c++-exceptions-and-rtti-enabled-by-default/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"*** ERROR: 'NDK' is not defined!\" 1>&2\n    exit 1\nfi\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\nfor LIBCXX in gnustl c++; do\n    for LIBTYPE in shared static; do\n        run $NDK/ndk-build -B \"$@\" APP_ABI=all APP_STL=${LIBCXX}_${LIBTYPE} V=1 || exit 1\n    done\ndone\n"
  },
  {
    "path": "tests/build/crystax-test-c++-exceptions-and-rtti-enabled-by-default/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test\nLOCAL_SRC_FILES := test.cpp\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/crystax-test-c++-exceptions-and-rtti-enabled-by-default/jni/test.cpp",
    "content": "#include <typeinfo>\n#include <stdexcept>\n#include <stdio.h>\n\nclass Foo { int x; };\n\nstatic void bar()\n{\n    throw std::runtime_error(\"\");\n}\n\nint main(void)\n{\n    printf(\"%s\\n\", typeid(Foo).name()); // will fail without -frtti\n    try\n    {\n        bar();\n    }\n    catch (std::exception &)\n    {\n        // Nothing\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-ext-hash/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-ext-hash\nLOCAL_SRC_FILES := main.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-test-ext-hash/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/crystax-test-ext-hash/jni/main.cpp",
    "content": "#include <ext/hash_map>\n#include <ext/hash_set>\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-headers/build.sh",
    "content": "#!/bin/bash\n\ncd $(dirname $0) || exit 1\nMYDIR=$(pwd)\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd ../../.. && pwd)\nfi\n\nINCDIR=$NDK/sources/crystax/include\nif [ ! -d $INCDIR ]; then\n    echo \"ERROR: Can't find CrystaX include directory\" 1>&2\n    exit 1\nfi\n\nif [ -z \"$PLATFORMS\" ]; then\n    APILEVELS=$(cd $NDK/platforms && ls -d android-* | sed 's,^android-,,' | sed 's,L,,' | sort -n)\n    test -d $NDK/platforms/android-L && APILEVELS=\"$APILEVELS L\"\n    PLATFORMS=$(for a in $APILEVELS; do echo \"android-$a\"; done)\nelse\n    PLATFORMS=$(echo $PLATFORMS | sed 's/,/ /g')\nfi\n\nHEADERS=$( { find $INCDIR -name '*.h' -print; find $INCDIR -name '*.hpp' -print; } | sort)\n\next_for_lang()\n{\n    local lang=$1\n    if [ -z \"$lang\" ]; then\n        echo \"ERROR: You should pass languages to call of ext_for_lang\" 1>&2\n        exit 1\n    fi\n\n    case $lang in\n        c)      echo \"c\"   ;;\n        c++)    echo \"cpp\" ;;\n        objc)   echo \"m\"   ;;\n        objc++) echo \"mm\"  ;;\n        *)\n            echo \"ERROR: Unknown language: '$lang'\" 1>&2\n            exit 1\n    esac\n}\n\nabis_for_platform()\n{\n    local platform=$1\n    if [ -z \"$platform\" ]; then\n        echo \"ERROR: You should pass android-N to call of abis_for_platform\" 1>&2\n        exit 1\n    fi\n\n    local apilevel=$(expr \"$platform\" : \"^android-\\(.*\\)\")\n    if [ \"$apilevel\" = \"L\" ]; then\n        echo all\n    elif [ $apilevel -ge 21 ]; then\n        echo all\n    elif [ $apilevel -ge 9 ]; then\n        echo all32\n    fi\n}\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\nrm -Rf jni obj libs\nmkdir -p jni || exit 1\n\n{\n    echo 'LOCAL_PATH := $(call my-dir)'\n    echo ''\n    echo 'include $(CLEAR_VARS)'\n    echo 'LOCAL_MODULE := crystax-test-headers'\n    echo 'LOCAL_SRC_FILES := main.c'\n} | cat >jni/Android.mk || exit 1\n\n{\n    echo 'int main() { return 0; }'\n} | cat >jni/main.c || exit 1\n\nnum=0\n\nfor HEADER in $HEADERS; do\n    HEADER=${HEADER##$INCDIR/}\n\n    # Skip internal headers\n    [[ ${HEADER} == \"_ctype.h\"    ]] && continue\n    [[ ${HEADER} == \"ieeefp.h\"    ]] && continue\n    [[ ${HEADER##asm-arm/}           != $HEADER ]] && continue\n    [[ ${HEADER##asm-arm64/}         != $HEADER ]] && continue\n    [[ ${HEADER##asm-generic/}       != $HEADER ]] && continue\n    [[ ${HEADER##asm-mips/}          != $HEADER ]] && continue\n    [[ ${HEADER##asm-x86/}           != $HEADER ]] && continue\n    [[ ${HEADER##asm/}               != $HEADER ]] && continue\n    [[ ${HEADER##blocks-runtime/}    != $HEADER ]] && continue\n    [[ ${HEADER##crystax/arm64/}     != $HEADER ]] && continue\n    [[ ${HEADER##crystax/bionic/}    != $HEADER ]] && continue\n    [[ ${HEADER##crystax/details/}   != $HEADER ]] && continue\n    [[ ${HEADER##crystax/dlmalloc/}  != $HEADER ]] && continue\n    [[ ${HEADER##crystax/freebsd/}   != $HEADER ]] && continue\n    [[ ${HEADER##crystax/libkqueue/} != $HEADER ]] && continue\n    [[ ${HEADER##crystax/libpwq/}    != $HEADER ]] && continue\n    [[ ${HEADER##crystax/mips64/}    != $HEADER ]] && continue\n    [[ ${HEADER##crystax/sys/}       != $HEADER ]] && continue\n    [[ ${HEADER##linux/}             != $HEADER ]] && continue\n    [[ ${HEADER##machine/}           != $HEADER ]] && continue\n    [[ ${HEADER##sys/_}              != $HEADER ]] && continue\n    [[ ${HEADER##xlocale/}           != $HEADER ]] && continue\n\n    let num+=1\n\n    for LANG in c c++ objc objc++; do\n        fname=test${num}-${LANG}.$(ext_for_lang $LANG)\n\n        {\n            echo \"#include <${HEADER}>\"\n            echo ''\n            echo \"#if !defined(__LIBCRYSTAX) || __LIBCRYSTAX != 1\"\n            echo \"#error \\\"__LIBCRYSTAX macro is not defined\\\"\"\n            echo \"#endif\"\n        } | cat >jni/$fname || exit 1\n\n        case $LANG in\n            c|objc)\n                echo $HEADER | grep -q '\\.hpp$' && continue\n                ;;\n        esac\n\n        EXCLUDE_PLATFORMS=\n        [[ ${HEADER##OpenGLES/ES1/} != $HEADER ]] && EXCLUDE_PLATFORMS=\"$EXCLUDE_PLATFORMS 3\"\n        [[ ${HEADER##OpenGLES/ES2/} != $HEADER ]] && EXCLUDE_PLATFORMS=\"$EXCLUDE_PLATFORMS 3 4\"\n        [[ ${HEADER##OpenGLES/ES3/} != $HEADER ]] && EXCLUDE_PLATFORMS=\"$EXCLUDE_PLATFORMS 3 4 5 8 9 12 13 14 15 16 17\"\n\n        {\n            for PLATFORM in $EXCLUDE_PLATFORMS; do\n                echo 'ifeq (,$(filter android-'$PLATFORM',$(APP_PLATFORM)))'\n            done\n            echo \"LOCAL_SRC_FILES += $fname\"\n            for PLATFORM in $EXCLUDE_PLATFORMS; do\n                echo 'endif'\n            done\n        } | cat >>jni/Android.mk || exit 1\n    done\n\ndone\n\n{\n    echo 'include $(BUILD_EXECUTABLE)'\n} | cat >>jni/Android.mk || exit 1\n\nfor PLATFORM in $PLATFORMS; do\n    echo \"\"\n    echo \"=================================================================\"\n    echo \"===> Testing CrystaX headers for $PLATFORM <===\"\n    echo \"=================================================================\"\n    echo \"\"\n\n    run $NDK/ndk-build -C $MYDIR -B \"$@\" APP_PLATFORM=$PLATFORM APP_ABI=$(abis_for_platform $PLATFORM) APP_OBJC=none V=1\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: Can't compile CrystaX headers for $PLATFORM alone\" 1>&2\n        exit 1\n    fi\n    echo \"\"\n    echo \"===> OK: CrystaX headers for $PLATFORM\"\ndone\n\nrm -Rf jni obj libs\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-test-libcrystax-linking/build.sh",
    "content": "#!/bin/bash\n\ncd $(dirname $0) || exit 1\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd ../../.. && pwd)\nfi\n\n. $NDK/build/instruments/dev-defaults.sh\n\nHOST_OS=$(uname -s | tr '[A-Z]' '[a-z]')\n\nHOST_TAG=\nHOST_TAG2=\ncase $HOST_OS in\n    darwin|linux)\n        HOST_ARCH=$(uname -m)\n        case $HOST_ARCH in\n            i?86)\n                HOST_ARCH=x86\n                ;;\n            x86_64)\n                if [ \"$HOST_OS\" = \"linux\" ]; then\n                    if file -b /bin/ls | grep -q 32-bit; then\n                        HOST_ARCH=x86\n                    else\n                        HOST_ARCH2=x86\n                    fi\n                else\n                    HOST_ARCH2=x86\n                fi\n                ;;\n            *)\n                echo \"ERROR: Unsupported host CPU architecture: '$HOST_ARCH'\" 1>&2\n                exit 1\n        esac\n        HOST_TAG=${HOST_OS}-${HOST_ARCH}\n        test -n \"$HOST_ARCH2\" && HOST_TAG2=${HOST_OS}-${HOST_ARCH2}\n        ;;\n    *)\n        echo \"WARNING: This test cannot run on this machine!\" 1>&2\n        exit 0\n        ;;\nesac\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\ncleanup()\n{\n    rm -Rf jni obj libs\n}\n\nEXENAME=test\n\nfor T in static shared; do\n    cleanup || exit 1\n    mkdir -p jni || exit 1\n\n    {\n        echo 'LOCAL_PATH := $(call my-dir)'\n        echo ''\n        echo 'include $(CLEAR_VARS)'\n        echo \"LOCAL_MODULE := $EXENAME\"\n        echo 'LOCAL_SRC_FILES := main.c'\n        echo 'include $(BUILD_EXECUTABLE)'\n    } | cat >jni/Android.mk || exit 1\n\n    {\n        echo 'int main() { return 0; }'\n    } | cat >jni/main.c || exit 1\n\n    run $NDK/ndk-build -B \"$@\" APP_ABI=all APP_LIBCRYSTAX=$T V=1\n    if [ $? -ne 0 ]; then\n        echo \"*** ERROR: Can't build $T libcrystax linking test\" 1>&2\n        exit 1\n    fi\n\n    for ABI in $(ls -1 libs/); do\n        case $ABI in\n            armeabi*)\n                ARCH=arm\n                ;;\n            arm64-v8a)\n                ARCH=arm64\n                ;;\n            *)\n                ARCH=$ABI\n        esac\n\n        TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)\n        TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)\n\n        for tag in $HOST_TAG $HOST_TAG2; do\n            READELF=$NDK/toolchains/$TOOLCHAIN_NAME/prebuilt/$tag/bin/${TOOLCHAIN_PREFIX}-readelf\n            echo \"Probing for ${READELF}...\"\n            if [ -x $READELF ]; then\n                echo \"Found: $READELF\"\n                break\n            fi\n        done\n\n        if [ ! -x \"$READELF\" ]; then\n            echo \"*** ERROR: Can't find $ARCH readelf\" 1>&2\n            exit 1\n        fi\n\n        $READELF -d libs/$ABI/$EXENAME | grep -q \"\\<NEEDED\\>.*\\<libcrystax\\.so\\>\"\n        DEPENDS=$?\n        if [ \"$T\" = \"static\" ]; then\n            if [ $DEPENDS -eq 0 ]; then\n                echo \"*** ERROR: libs/$ABI/$EXENAME depend on libcrystax.so even though it was built with APP_LIBCRYSTAX=$T\" 1>&2\n                exit 1\n            fi\n        elif [ \"$T\" = \"shared\" ]; then\n            if [ $DEPENDS -ne 0 ]; then\n                echo \"*** ERROR: libs/$ABI/$EXENAME do not depend on libcrystax.so even though it was built with APP_LIBCRYSTAX=$T\" 1>&2\n                exit 1\n            fi\n        fi\n    done\ndone\n\ncleanup\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-test-neon/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-neon\nLOCAL_ARM_NEON  := true\nLOCAL_SRC_FILES := main.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/crystax-test-neon/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a\n"
  },
  {
    "path": "tests/build/crystax-test-neon/jni/main.cpp",
    "content": "#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)\n#include <arm_neon.h>\n\nnamespace math {\n    namespace internal {\n#define _IOS_SHUFFLE_1032(vec) vrev64q_f32(vec)\n#define _IOS_SHUFFLE_2301(vec) vcombine_f32(vget_high_f32(vec), vget_low_f32(vec))\n        inline float32x4_t dot4VecResult(const float32x4_t& vec1, const float32x4_t& vec2) {\n            float32x4_t result = vmulq_f32(vec1, vec2);\n            result = vaddq_f32(result, _IOS_SHUFFLE_1032(result));\n            result = vaddq_f32(result, _IOS_SHUFFLE_2301(result));\n            return result;\n        }\n\n        inline float32x4_t fastRSqrt(const float32x4_t& vec) {\n            float32x4_t result;\n            result = vrsqrteq_f32(vec);\n            result = vmulq_f32(vrsqrtsq_f32(vmulq_f32(result, result), vec), result);\n            return result;\n        }\n\n        union qword {\n            int32x4_t   ivec;\n            uint32x4_t  uvec;\n            float32x4_t fvec;\n            uint8x16_t  bytes;\n        };\n\n        typedef qword HwVector;\n\n        typedef union {\n            float32_t array[16];\n            struct {\n                HwVector row0;\n                HwVector row1;\n                HwVector row2;\n                HwVector row3;\n            };\n        } HwMatrix;\n    }\n\n    struct Vector3 {\n        union {\n            struct {\n                float x;\n                float y;\n                float z;\n                float pad;\n            };\n\n            float                   array[3];\n            internal::HwVector      hwVector;\n        };\n    };\n\n    struct Matrix43 {\n        union {\n            struct {\n                float   row_0[4];\n                float   row_1[4];\n                float   row_2[4];\n                float   row_3[4];\n            };\n\n            struct {\n                float   _00, _10, _20, _pad0;\n                float   _01, _11, _21, _pad1;\n                float   _02, _12, _22, _pad2;\n                float   _03, _13, _23, _pad3;\n            };\n\n            float                 array[16];\n            internal::HwMatrix    hwMatrix;\n        };\n\n        inline Matrix43() {}\n        Matrix43(\n            const float m00, const float m10, const float m20,\n            const float m01, const float m11, const float m21,\n            const float m02, const float m12, const float m22,\n            const float m03, const float m13, const float m23) {}\n    };\n\n    inline Vector3 operator-(const Vector3& srcVector1, const Vector3& srcVector2) {\n        Vector3 result;\n        result.hwVector.fvec = vsubq_f32(srcVector1.hwVector.fvec, srcVector2.hwVector.fvec);\n        return result;\n    }\n\n    inline Vector3 normalize(const Vector3& v1) {\n        float32x4_t dot;\n        dot = vsetq_lane_f32(0.0f, v1.hwVector.fvec, 3);\n        dot = internal::dot4VecResult(dot, dot);\n\n        if (vgetq_lane_f32(dot, 0) == 0.0f) {\n            return v1;\n        } else {\n            Vector3 result;\n            result.hwVector.fvec = vmulq_f32(v1.hwVector.fvec, internal::fastRSqrt(dot));\n            return result;\n        }\n    }\n\n    inline Vector3 cross(const Vector3& v1, const Vector3& v2) {\n        float32x4x2_t v_1203 = vzipq_f32(vcombine_f32(vrev64_f32(vget_low_f32(v1.hwVector.fvec)), vrev64_f32(vget_low_f32(v2.hwVector.fvec))), vcombine_f32(vget_high_f32(v1.hwVector.fvec), vget_high_f32(v2.hwVector.fvec)));\n        float32x4x2_t v_2013 = vzipq_f32(vcombine_f32(vrev64_f32(vget_low_f32(v_1203.val[0])), vrev64_f32(vget_low_f32(v_1203.val[1]))), vcombine_f32(vget_high_f32(v_1203.val[0]), vget_high_f32(v_1203.val[1])));\n\n        Vector3 result;\n        result.hwVector.fvec = vmlsq_f32(vmulq_f32(v_1203.val[0], v_2013.val[1]), v_1203.val[1], v_2013.val[0]);\n        return result;\n    }\n\n    inline float dot(const Vector3& v1, const Vector3& v2) {\n        Vector3 vTmp;\n        vTmp.hwVector.fvec = vmulq_f32(v1.hwVector.fvec, v2.hwVector.fvec);\n        return (vTmp.x + vTmp.y + vTmp.z);\n    }\n\n    inline Matrix43 transpose3x3(const Matrix43& matrix) {\n        float32x4x4_t data;\n        data.val[0] = matrix.hwMatrix.row0.fvec;\n        data.val[1] = matrix.hwMatrix.row1.fvec;\n        data.val[2] = matrix.hwMatrix.row2.fvec;\n\n        Matrix43 result;\n        vst4q_f32(result.hwMatrix.array, data);\n        result.hwMatrix.row3.fvec = matrix.hwMatrix.row3.fvec;\n        return result;\n    }\n}\n\nnamespace cam {\n    math::Matrix43 createMatrixLookAt(const math::Vector3& pEye, const math::Vector3& pAt, const math::Vector3& pUp) {\n        math::Vector3 zaxis = normalize(pEye - pAt);\n        math::Vector3 xaxis = normalize(cross(pUp, zaxis));\n        math::Vector3 yaxis = cross(zaxis, xaxis);\n        math::Matrix43 result = math::Matrix43(\n            xaxis.x,\t\t  yaxis.x,\t\t\tzaxis.x,\n            xaxis.y,\t\t  yaxis.y,\t\t\tzaxis.y,\n            xaxis.z, \t\t  yaxis.z,\t\t\tzaxis.z,\n            -dot(xaxis, pEye), -dot(yaxis, pEye), -dot(zaxis, pEye));\n        return result;\n    }\n\n    void recalculateView(const math::Vector3& pos, const math::Vector3& dir, const math::Vector3& up) {\n        math::Matrix43 _view = createMatrixLookAt(pos, dir, up);\n        math::Matrix43 _viewInverse = transpose3x3(_view);\n    }\n}\n#endif\n"
  },
  {
    "path": "tests/build/crystax-test-patched-sysroot/build.sh",
    "content": "#!/bin/bash\n\nls -1d $NDK/platforms/android-*/arch-*/usr/lib* | {\n    while read dir; do\n        echo $dir | grep -q \"\\<arch-p\\>\" && continue\n        for lib in libm.so libcrystax.a libcrystax.so; do\n            if [ -e $dir/$lib ]; then\n                echo \"ERROR: Found $lib in $dir (must not be there)\" 1>&2\n                exit 1\n            fi\n        done\n    done\n} || exit 1\n\nfor lib in libbz2.a libm.a libm_hard.a libc.a libpthread.a librt.a; do\n    ls -1d $NDK/platforms/android-*/arch-*/usr/lib* | {\n        while read dir; do\n            echo $dir | grep -q \"\\<arch-p\\>\" && continue\n            if [ ! -e $dir/$lib ]; then\n                echo \"ERROR: No $lib found in $dir\" 1>&2\n                exit 1\n            fi\n        done\n    } || exit 1\n\n    find $NDK/platforms -name \"$lib\" -print | grep -v '/google/' | {\n        while read f; do\n            size=$(wc -c $f | awk '{print $1}')\n            if [ $size -ne 8 ]; then\n                echo \"ERROR: File $f is not empty stub\" 1>&2\n                exit 1\n            fi\n        done\n    } || exit 1\ndone\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-aio",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen AIO_ALLDONE\ngen AIO_CANCELED\ngen AIO_NOTCANCELED\n\ngen LIO_NOP\ngen LIO_NOWAIT\ngen LIO_READ\ngen LIO_WAIT\ngen LIO_WRITE\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-all",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ncd $(dirname $0)/.. || exit 1\n\nTOPDIR=$(pwd)\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd $TOPDIR/../../.. && pwd)\nfi\n\nitems=\"\"\nitems=\"$items aio\"\nitems=\"$items cpio\"\nitems=\"$items errno\"\nitems=\"$items fcntl\"\nitems=\"$items fenv\"\nitems=\"$items float\"\nitems=\"$items fmtmsg\"\nitems=\"$items fnmatch\"\nitems=\"$items ftw\"\nitems=\"$items glob\"\nitems=\"$items inttypes\"\nitems=\"$items iso646\"\nitems=\"$items langinfo\"\nitems=\"$items limits\"\nitems=\"$items locale\"\nitems=\"$items math\"\nitems=\"$items netdb\"\nitems=\"$items netinet_in\"\nitems=\"$items poll\"\nitems=\"$items pthread\"\nitems=\"$items regex\"\nitems=\"$items sched\"\nitems=\"$items signal\"\nitems=\"$items spawn\"\nitems=\"$items stdbool\"\nitems=\"$items stdint\"\nitems=\"$items stdio\"\nitems=\"$items stdlib\"\nitems=\"$items sys_ipc\"\nitems=\"$items sys_mman\"\nitems=\"$items sys_resource\"\nitems=\"$items sys_sem\"\nitems=\"$items sys_shm\"\nitems=\"$items sys_socket\"\nitems=\"$items sys_stat\"\nitems=\"$items sys_statvfs\"\nitems=\"$items sys_time\"\nitems=\"$items sys_wait\"\nitems=\"$items syslog\"\nitems=\"$items tar\"\nitems=\"$items termios\"\nitems=\"$items tgmath\"\nitems=\"$items time\"\nitems=\"$items unistd\"\nitems=\"$items wchar\"\nitems=\"$items wordexp\"\n\nlic()\n{\n    echo \"/*\" || exit 1\n    cat $NDK/sources/crystax/LICENSE | sed 's/^/ \\* /' | sed 's/ *$//' || exit 1\n    test ${PIPESTATUS[0]} -ne 0 && exit 1\n    echo \" */\" || exit 1\n}\n\nDSTDIR=$TOPDIR/jni/gen\nrm -Rf $DSTDIR\nmkdir -p $DSTDIR || exit 1\n\nfor t in $items; do\n    echo \"Generate ${t} checks ...\"\n\n    dst=$DSTDIR/${t}.inc\n\n    echo \"/* WARNING!!! THIS IS AUTO-GENERATED FILE!!! DO NOT MODIFY IT MANUALLY!!! */\" >$dst || exit 1\n\n    echo \"\" >>$dst || exit 1\n    lic     >>$dst || exit 1\n    echo \"\" >>$dst || exit 1\n\n    ${TOPDIR}/bin/gen-${t} >>$dst || exit 1\ndone\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-cpio",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen C_IRUSR\ngen C_IWUSR\ngen C_IXUSR\ngen C_IRGRP\ngen C_IWGRP\ngen C_IXGRP\ngen C_IROTH\ngen C_IWOTH\ngen C_IXOTH\ngen C_ISUID\ngen C_ISGID\ngen C_ISVTX\ngen C_ISDIR\ngen C_ISFIFO\ngen C_ISREG\ngen C_ISBLK\ngen C_ISCHR\ngen C_ISCTG\ngen C_ISLNK\ngen C_ISSOCK\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-errno",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empy name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"#ifndef ${name}\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif\"\n}\n\ngen E2BIG\ngen EACCES\ngen EADDRINUSE\ngen EADDRNOTAVAIL\ngen EAFNOSUPPORT\ngen EAGAIN\ngen EALREADY\ngen EBADF\ngen EBADMSG\ngen EBUSY\ngen ECANCELED\ngen ECHILD\ngen ECONNABORTED\ngen ECONNREFUSED\ngen ECONNRESET\ngen EDEADLK\ngen EDESTADDRREQ\ngen EDOM\ngen EDQUOT\ngen EEXIST\ngen EFAULT\ngen EFBIG\ngen EHOSTUNREACH\ngen EIDRM\ngen EILSEQ\ngen EINPROGRESS\ngen EINTR\ngen EINVAL\ngen EIO\ngen EISCONN\ngen EISDIR\ngen ELOOP\ngen EMFILE\ngen EMLINK\ngen EMSGSIZE\ngen EMULTIHOP\ngen ENAMETOOLONG\ngen ENETDOWN\ngen ENETRESET\ngen ENETUNREACH\ngen ENFILE\ngen ENOBUFS\ngen ENODATA\ngen ENODEV\ngen ENOENT\ngen ENOEXEC\ngen ENOLCK\ngen ENOLINK\ngen ENOMEM\ngen ENOMSG\ngen ENOPROTOOPT\ngen ENOSPC\ngen ENOSYS\ngen ENOTCONN\ngen ENOTDIR\ngen ENOTEMPTY\ngen ENOTSOCK\ngen ENOTSUP\ngen ENOTTY\ngen ENXIO\ngen EOPNOTSUPP\ngen EOVERFLOW\ngen EPERM\ngen EPIPE\ngen EPIPE\ngen EPROTONOSUPPORT\ngen EPROTOTYPE\ngen ERANGE\ngen EROFS\ngen ESPIPE\ngen ESRCH\ngen ESTALE\ngen ETIMEDOUT\ngen ETXTBSY\ngen EWOULDBLOCK\ngen EXDEV\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-fcntl",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrevlist()\n{\n    echo \"$@\" | awk '\n        {\n            n = split($0, words);\n            for (i=n; i>0; i--) {\n                printf \"%s \", words[i]\n            }\n        }\n        END {\n            printf(\"\\n\")\n        }'\n}\n\ngen()\n{\n    local name=$1\n    shift\n    local conditions=\"$@\"\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\ngen F_DUPFD\necho \"#if !__APPLE__ || defined(__MAC_10_7)\"\ngen F_DUPFD_CLOEXEC\necho \"#endif\"\ngen F_GETFD\ngen F_SETFD\ngen F_GETFL\ngen F_SETFL\ngen F_GETLK\ngen F_SETLK\ngen F_SETLKW\ngen F_GETOWN\ngen F_SETOWN\n\necho \"#if !__APPLE__ && !__gnu_linux__\"\ngen F_DUP2FD\ngen F_DUP2FD_CLOEXEC\necho \"#endif\"\n\ngen FD_CLOEXEC\n\ngen F_RDLCK\ngen F_UNLCK\ngen F_WRLCK\n\ngen SEEK_SET\ngen SEEK_CUR\ngen SEEK_END\n\necho \"#if !__APPLE__ || defined(__MAC_10_7)\"\ngen O_CLOEXEC\necho \"#endif\"\ngen O_CREAT\ngen O_DIRECTORY\ngen O_EXCL\ngen O_NOCTTY\ngen O_NOFOLLOW\ngen O_TRUNC\n#gen O_TTY_INIT\n\ngen O_APPEND\ngen O_DSYNC !__ANDROID__ \"_POSIX_SYNCHRONIZED_IO > 0\"\ngen O_NONBLOCK\ngen O_RSYNC !__ANDROID__ \"_POSIX_SYNCHRONIZED_IO > 0\"\ngen O_SYNC\n\ngen O_ACCMODE\n\n#gen O_EXEC\ngen O_RDONLY\ngen O_RDWR\n#gen O_SEARCH\ngen O_WRONLY\n\necho \"#if HAVE_XXXAT\"\ngen AT_FDCWD\ngen AT_EACCESS !__ANDROID__\ngen AT_SYMLINK_NOFOLLOW\ngen AT_SYMLINK_FOLLOW\ngen AT_REMOVEDIR\necho \"#endif\"\n\necho \"#if _POSIX_ADVISORY_INFO\"\ngen POSIX_FADV_DONTNEED\ngen POSIX_FADV_NOREUSE\ngen POSIX_FADV_NORMAL\ngen POSIX_FADV_RANDOM\ngen POSIX_FADV_SEQUENTIAL\ngen POSIX_FADV_WILLNEED\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-fenv",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen FE_DIVBYZERO\ngen FE_INEXACT\ngen FE_INVALID\ngen FE_INVALID\ngen FE_UNDERFLOW\n\ngen FE_DOWNWARD\ngen FE_TONEAREST\ngen FE_TOWARDZERO\ngen FE_UPWARD\n\ngen FE_DFL_ENV\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-float",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrevlist()\n{\n    echo \"$@\" | awk '\n        {\n            n = split($0, words);\n            for (i=n; i>0; i--) {\n                printf \"%s \", words[i]\n            }\n        }\n        END {\n            printf(\"\\n\")\n        }'\n}\n\ngen()\n{\n    local name=$1\n    shift\n    local conditions=\"$@\"\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\n#gen FLT_EVAL_METHOD\ngen FLT_RADIX\n\ngen FLT_MANT_DIG\ngen DBL_MANT_DIG\ngen LDBL_MANT_DIG\n\n#gen DECIMAL_DIG\n\ngen FLT_DIG\ngen DBL_DIG\ngen LDBL_DIG\n\ngen FLT_MIN_EXP\ngen DBL_MIN_EXP\ngen LDBL_MIN_EXP\n\ngen FLT_MIN_10_EXP\ngen DBL_MIN_10_EXP\ngen LDBL_MIN_10_EXP\n\ngen FLT_MAX_EXP\ngen DBL_MAX_EXP\ngen LDBL_MAX_EXP\n\ngen FLT_MAX_10_EXP\ngen DBL_MAX_10_EXP\ngen LDBL_MAX_10_EXP\n\ngen FLT_MAX\ngen DBL_MAX\ngen LDBL_MAX\n\ngen FLT_EPSILON\ngen DBL_EPSILON\ngen LDBL_EPSILON\n\ngen FLT_MIN\ngen DBL_MIN\ngen LDBL_MIN\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-fmtmsg",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen MM_HARD\ngen MM_SOFT\ngen MM_FIRM\ngen MM_APPL\ngen MM_UTIL\ngen MM_OPSYS\ngen MM_RECOVER\ngen MM_NRECOV\ngen MM_HALT\ngen MM_ERROR\ngen MM_WARNING\ngen MM_INFO\ngen MM_INFO\ngen MM_PRINT\ngen MM_CONSOLE\n\ngen MM_NULLLBL\ngen MM_NULLSEV\ngen MM_NULLMC\ngen MM_NULLTXT\ngen MM_NULLACT\ngen MM_NULLTAG\n\ngen MM_OK\ngen MM_NOTOK\ngen MM_NOMSG\ngen MM_NOCON\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-fnmatch",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen FNM_NOMATCH\ngen FNM_PATHNAME\ngen FNM_PERIOD\ngen FNM_NOESCAPE\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-ftw",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen FTW_F\ngen FTW_D\ngen FTW_DNR\ngen FTW_DP\ngen FTW_NS\ngen FTW_SL\ngen FTW_SLN\n\ngen FTW_PHYS\ngen FTW_MOUNT\ngen FTW_MOUNT\ngen FTW_CHDIR\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-glob",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen GLOB_APPEND\ngen GLOB_DOOFFS\ngen GLOB_ERR\ngen GLOB_MARK\ngen GLOB_NOCHECK\ngen GLOB_NOESCAPE\ngen GLOB_NOSORT\n\ngen GLOB_ABORTED\ngen GLOB_NOMATCH\ngen GLOB_NOSPACE\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-inttypes",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ndowncase()\n{\n    echo \"$@\" | tr '[A-Z]' '[a-z]'\n}\n\ngen()\n{\n    local name=$1\n    local typ=$2\n    if [ -z \"$name\" -o -z \"$typ\" ]; then\n        echo \"ERROR: empty name or type passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"\"\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif\"\n    echo \"\"\n    echo \"inttypes_check(\\\"%\\\"${name}\\\"\\n\\\", (${typ})0);\"\n}\n\necho \"__attribute__((format(printf, 1, 2)))\"\necho \"void inttypes_check(const char *fmt, ...)\"\necho \"{\"\necho \"    (void)fmt;\"\necho \"}\"\n\necho \"void inttypes_check_format()\"\necho \"{\"\n\nfor t in PRI SCN; do\n    for m in d i o u x X; do\n        test \"x$t\" = \"xSCN\" -a \"x$m\" = \"xX\" && continue\n\n        if [ \"$m\" = \"d\" -o \"$m\" = \"i\" ]; then\n            signed=\"\"\n        else\n            signed=\"u\"\n        fi\n\n        for f in '' LEAST FAST; do\n            for s in 8 16 32 64; do\n                gen ${t}${m}${f}${s} ${signed}int$(test -z \"$f\" && echo '' || echo \"_$(downcase $f)\")${s}_t\n            done\n        done\n        for f in MAX PTR; do\n            gen ${t}${m}${f} ${signed}int$(downcase $f)_t\n        done\n    done\ndone\n\necho \"}\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-iso646",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen and\ngen and_eq\ngen bitand\ngen bitor\ngen compl\ngen not\ngen not_eq\ngen or\ngen or_eq\ngen xor\ngen xor_eq\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-langinfo",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empy name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"#ifndef ${name}\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif\"\n}\n\ngen CODESET\ngen D_T_FMT\ngen D_FMT\ngen T_FMT\ngen T_FMT_AMPM\ngen AM_STR\ngen PM_STR\nfor i in 1 2 3 4 5 6 7; do\n    gen DAY_$i\n    gen ABDAY_$i\ndone\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12; do\n    gen MON_$i\n    gen ABMON_$i\ndone\ngen ERA\ngen ERA_D_FMT\ngen ERA_D_T_FMT\ngen ERA_T_FMT\ngen ALT_DIGITS\ngen RADIXCHAR\ngen THOUSEP\ngen YESEXPR\ngen NOEXPR\ngen CRNCYSTR\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-limits",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrevlist()\n{\n    echo \"$@\" | awk '\n        {\n            n = split($0, words);\n            for (i=n; i>0; i--) {\n                printf \"%s \", words[i]\n            }\n        }\n        END {\n            printf(\"\\n\")\n        }'\n}\n\ngen()\n{\n    local name=$1\n    shift\n    local conditions=\"$@\"\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\n#gen AIO_LISTIO_MAX\ngen _POSIX_AIO_LISTIO_MAX\n\n#gen AIO_MAX\ngen _POSIX_AIO_MAX\n\ngen AIO_PRIO_DELTA_MAX !__APPLE__ !__ANDROID__\n\ngen ARG_MAX !__gnu_linux__\ngen _POSIX_ARG_MAX\n\n#gen ATEXIT_MAX\n\ngen CHILD_MAX !__gnu_linux__\ngen _POSIX_CHILD_MAX\n\ngen DELAYTIMER_MAX !__APPLE__ !__ANDROID__\ngen _POSIX_DELAYTIMER_MAX\n\ngen HOST_NAME_MAX  !__APPLE__ !__ANDROID__\ngen _POSIX_HOST_NAME_MAX\n\ngen IOV_MAX __XSI_VISIBLE !__ANDROID__\ngen _XOPEN_IOV_MAX __XSI_VISIBLE\n\ngen LOGIN_NAME_MAX !__APPLE__ !__ANDROID__\ngen _POSIX_LOGIN_NAME_MAX\n\necho \"#if defined(_POSIX_MESSAGE_PASSING) && _POSIX_MESSAGE_PASSING > 0\"\ngen MQ_OPEN_MAX\ngen _POSIX_MQ_OPEN_MAX\ngen MQ_PRIO_MAX\ngen _POSIX_MQ_PRIO_MAX\necho \"#endif\"\n\ngen OPEN_MAX !__gnu_linux__\ngen _POSIX_OPEN_MAX\n\ngen PAGESIZE !__APPLE__ !__gnu_linux__\ngen PAGE_SIZE __XSI_VISIBLE\n\ngen PTHREAD_DESTRUCTOR_ITERATIONS !__ANDROID__\ngen _POSIX_THREAD_DESTRUCTOR_ITERATIONS\n\ngen PTHREAD_KEYS_MAX\ngen _POSIX_THREAD_KEYS_MAX\n\ngen PTHREAD_STACK_MIN\n\ngen PTHREAD_THREADS_MAX !__APPLE__ !__gnu_linux__\ngen _POSIX_THREAD_THREADS_MAX\n\ngen RE_DUP_MAX\ngen _POSIX2_RE_DUP_MAX\n\ngen RTSIG_MAX !__APPLE__ !__ANDROID__\ngen _POSIX_RTSIG_MAX\n\n#gen SEM_NSEMS_MAX\ngen _POSIX_SEM_NSEMS_MAX\n\ngen SEM_VALUE_MAX !__APPLE__ !__ANDROID__\ngen _POSIX_SEM_VALUE_MAX\n\n#gen SIGQUEUE_MAX\ngen _POSIX_SIGQUEUE_MAX\n\necho \"#if defined(_POSIX_SPORADIC_SERVER) && _POSIX_SPORADIC_SERVER > 0 && \\\\\"\necho \"    defined(_POSIX_THREAD_SPORADIC_SERVER) && _POSIX_THREAD_SPORADIC_SERVER > 0\"\ngen SS_REPL_MAX\ngen _POSIX_SS_REPL_MAX\necho \"#endif\"\n\n#gen STREAM_MAX\ngen _POSIX_STREAM_MAX\n\n#gen SYMLOOP_MAX\ngen _POSIX_SYMLOOP_MAX\n\n#gen TIMER_MAX\ngen _POSIX_TIMER_MAX\n\ngen TTY_NAME_MAX !__APPLE__ !__ANDROID__\ngen _POSIX_TTY_NAME_MAX\n\n#gen TZNAME_MAX\ngen _POSIX_TZNAME_MAX\n\n#gen FILESIZEBITS\n\ngen LINK_MAX !__gnu_linux__\ngen _POSIX_LINK_MAX\n\ngen MAX_CANON\ngen _POSIX_MAX_CANON\n\ngen MAX_INPUT\ngen _POSIX_MAX_INPUT\n\ngen NAME_MAX\ngen _POSIX_NAME_MAX\ngen _XOPEN_NAME_MAX __XSI_VISIBLE\n\ngen PATH_MAX\ngen _POSIX_PATH_MAX\ngen _XOPEN_PATH_MAX __XSI_VISIBLE\n\ngen PIPE_BUF\ngen _POSIX_PIPE_BUF\n\necho \"#if defined(_POSIX_ADVISORY_INFO) && _POSIX_ADVISORY_INFO > 0\"\necho \"#if !__ANDROID__\"\ngen POSIX_ALLOC_SIZE_MIN\ngen POSIX_REC_INCR_XFER_SIZE\ngen POSIX_REC_MAX_XFER_SIZE\ngen POSIX_REC_MIN_XFER_SIZE\ngen POSIX_REC_XFER_ALIGN\necho \"#endif /* !__ANDROID__ */\"\necho \"#endif\"\n\n#gen SYMLINK_MAX\ngen _POSIX_SYMLINK_MAX\n\ngen BC_BASE_MAX\ngen _POSIX2_BC_BASE_MAX\n\ngen BC_DIM_MAX\ngen _POSIX2_BC_DIM_MAX\n\ngen BC_SCALE_MAX\ngen _POSIX2_BC_SCALE_MAX\n\ngen BC_STRING_MAX\ngen _POSIX2_BC_STRING_MAX\n\ngen CHARCLASS_NAME_MAX !__ANDROID__\ngen _POSIX2_CHARCLASS_NAME_MAX\n\ngen COLL_WEIGHTS_MAX\ngen _POSIX2_COLL_WEIGHTS_MAX\n\ngen EXPR_NEST_MAX\ngen _POSIX2_EXPR_NEST_MAX\n\ngen LINE_MAX\ngen _POSIX2_LINE_MAX\n\ngen NGROUPS_MAX\ngen _POSIX_NGROUPS_MAX\n\ngen RE_DUP_MAX\ngen _POSIX2_RE_DUP_MAX\n\n# Numerical limits\n\ngen CHAR_BIT\ngen CHAR_MAX\ngen CHAR_MIN\ngen INT_MAX\ngen INT_MIN\ngen LLONG_MAX\ngen LLONG_MIN\ngen LONG_BIT\ngen LONG_MAX\ngen LONG_MIN\ngen MB_LEN_MAX\ngen SCHAR_MAX\ngen SCHAR_MIN\ngen SHRT_MAX\ngen SHRT_MIN\ngen SSIZE_MAX\ngen UCHAR_MAX\ngen UINT_MAX\ngen ULLONG_MAX\ngen ULONG_MAX\ngen USHRT_MAX\ngen WORD_BIT\n\n# Other invariant values\n\ngen NL_ARGMAX\ngen NL_LANGMAX __XSI_VISIBLE\ngen NL_MSGMAX\ngen NL_SETMAX\ngen NL_TEXTMAX\ngen NZERO __XSI_VISIBLE !__ANDROID__\n\n# Check minimum/maximum values\n\ngen()\n{\n    local name=$1\n    local value=$2\n    shift 2\n    local conditions=\"$@\"\n    if [ -z \"$name\" -o -z \"$value\" ]; then\n        echo \"ERROR: empty name or value passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if ${name} != ${value}\"\n    echo \"#error ${name} is not equal to ${value}\"\n    echo \"#endif /* ${name} != ${value} */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\necho \"#if defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK > 0\"\ngen _POSIX_CLOCKRES_MIN 20000000\necho \"#endif\"\ngen _POSIX_AIO_LISTIO_MAX 2\ngen _POSIX_AIO_MAX 1\ngen _POSIX_ARG_MAX 4096\ngen _POSIX_CHILD_MAX 25\ngen _POSIX_DELAYTIMER_MAX 32\ngen _POSIX_HOST_NAME_MAX 255\ngen _POSIX_LINK_MAX 8\ngen _POSIX_LOGIN_NAME_MAX 9\ngen _POSIX_MAX_CANON 255\ngen _POSIX_MAX_INPUT 255\n\necho \"#if defined(_POSIX_MESSAGE_PASSING) && _POSIX_MESSAGE_PASSING > 0\"\ngen _POSIX_MQ_OPEN_MAX 8\ngen _POSIX_MQ_PRIO_MAX 32\necho \"#endif\"\n\ngen _POSIX_NAME_MAX 14\ngen _POSIX_NGROUPS_MAX 8\ngen _POSIX_OPEN_MAX 20\ngen _POSIX_PATH_MAX 256\ngen _POSIX_PIPE_BUF 512\ngen _POSIX_RE_DUP_MAX 255\ngen _POSIX_RTSIG_MAX 8\ngen _POSIX_SEM_NSEMS_MAX 256\ngen _POSIX_SEM_VALUE_MAX 32767\ngen _POSIX_SIGQUEUE_MAX 32\ngen _POSIX_SSIZE_MAX 32767\n\necho \"#if defined(_POSIX_SPORADIC_SERVER) && _POSIX_SPORADIC_SERVER > 0 && \\\\\"\necho \"    defined(_POSIX_THREAD_SPORADIC_SERVER) && _POSIX_THREAD_SPORADIC_SERVER > 0\"\ngen _POSIX_SS_REPL_MAX 4\necho \"#endif\"\n\ngen _POSIX_STREAM_MAX 8\ngen _POSIX_SYMLINK_MAX 255\ngen _POSIX_SYMLOOP_MAX 8\ngen _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4\ngen _POSIX_THREAD_KEYS_MAX 128\ngen _POSIX_THREAD_THREADS_MAX 64\ngen _POSIX_TIMER_MAX 32\n\ngen _POSIX_TTY_NAME_MAX 9\ngen _POSIX_TZNAME_MAX 6\n\ngen _POSIX2_BC_BASE_MAX 99\ngen _POSIX2_BC_DIM_MAX 2048\ngen _POSIX2_BC_SCALE_MAX 99\ngen _POSIX2_BC_STRING_MAX 1000\ngen _POSIX2_CHARCLASS_NAME_MAX 14\ngen _POSIX2_COLL_WEIGHTS_MAX 2\ngen _POSIX2_EXPR_NEST_MAX 32\ngen _POSIX2_LINE_MAX 2048\ngen _POSIX2_RE_DUP_MAX 255\n\ngen _XOPEN_IOV_MAX  16   __XSI_VISIBLE\ngen _XOPEN_NAME_MAX 255  __XSI_VISIBLE\ngen _XOPEN_PATH_MAX 1024 __XSI_VISIBLE\n\ngen CHAR_BIT 8\n\ngen SCHAR_MIN -128\ngen SCHAR_MAX 127\ngen UCHAR_MAX 255\n\necho \"#if __arm__ || __aarch64__\"\ngen CHAR_MIN 0\ngen CHAR_MAX UCHAR_MAX\necho \"#else\"\ngen CHAR_MIN SCHAR_MIN\ngen CHAR_MAX SCHAR_MAX\necho \"#endif\"\n\ngen SHRT_MIN -32768\ngen SHRT_MAX 32767\n\ngen USHRT_MAX 65535\n\ngen INT_MIN -2147483648\ngen INT_MAX 2147483647\n\ngen UINT_MAX 4294967295\n\ngen LLONG_MIN '(-0x7fffffffffffffffLL-1)'\ngen LLONG_MAX 0x7fffffffffffffffLL\n\ngen ULLONG_MAX 0xffffffffffffffffLL\n\necho \"#if __LP64__\"\ngen LONG_MIN  LLONG_MIN\ngen LONG_MAX  LLONG_MAX\ngen ULONG_MAX ULLONG_MAX\necho \"#else\"\ngen LONG_MIN  INT_MIN\ngen LONG_MAX  INT_MAX\ngen ULONG_MAX UINT_MAX\necho \"#endif\"\n\ngen()\n{\n    local name=$1\n    local value=$2\n    shift 2\n    local conditions=\"$@\"\n    if [ -z \"$name\" -o -z \"$value\" ]; then\n        echo \"ERROR: empty name or value passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if defined(${name}) && ${name} < ${value}\"\n    echo \"#error ${name} less than ${value}\"\n    echo \"#endif /* defined(${name}) && ${name} != ${value} */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\ngen MB_LEN_MAX 6\n\ngen NL_ARGMAX 9\ngen NL_LANGMAX 14 __XSI_VISIBLE\ngen NL_MSGMAX 32767\ngen NL_SETMAX 255\ngen NL_TEXTMAX _POSIX2_LINE_MAX\ngen NZERO 20 __XSI_VISIBLE !__ANDROID__\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-locale",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen NULL\ngen LC_ALL\ngen LC_COLLATE\ngen LC_CTYPE\ngen LC_MESSAGES\ngen LC_MONETARY\ngen LC_NUMERIC\ngen LC_TIME\ngen LC_ALL_MASK\ngen LC_GLOBAL_LOCALE\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-math",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empy name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"#ifndef ${name}\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif\"\n}\n\ngen fpclassify\ngen isfinite\ngen isinf\ngen isnan\ngen isnormal\ngen signbit\ngen isgreater\ngen isgreaterequal\ngen isless\ngen islessequal\ngen islessgreater\ngen isunordered\n\ngen M_E\ngen M_LOG2E\ngen M_LOG10E\ngen M_LN2\ngen M_LN10\ngen M_PI\ngen M_PI_2\ngen M_PI_4\ngen M_1_PI\ngen M_2_PI\ngen M_2_SQRTPI\ngen M_SQRT2\ngen M_SQRT1_2\n\necho \"#if !__gnu_linux__\"\ngen MAXFLOAT\necho \"#endif\"\ngen HUGE_VAL\ngen HUGE_VALF\ngen HUGE_VALL\ngen INFINITY\ngen NAN\n\ngen FP_INFINITE\ngen FP_NAN\ngen FP_NORMAL\ngen FP_SUBNORMAL\ngen FP_ZERO\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-netdb",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen AI_PASSIVE\ngen AI_CANONNAME\ngen AI_NUMERICHOST\ngen AI_NUMERICSERV\ngen AI_V4MAPPED\ngen AI_ALL\ngen AI_ADDRCONFIG\n\ngen NI_NOFQDN\ngen NI_NUMERICHOST\ngen NI_NAMEREQD\ngen NI_NUMERICSERV\n#gen NI_NUMERICSCOPE\ngen NI_DGRAM\n\ngen EAI_AGAIN\ngen EAI_BADFLAGS\ngen EAI_FAIL\ngen EAI_FAMILY\ngen EAI_MEMORY\ngen EAI_NONAME\ngen EAI_SERVICE\ngen EAI_SOCKTYPE\ngen EAI_SYSTEM\ngen EAI_OVERFLOW\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-netinet_in",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen IPPROTO_IP\ngen IPPROTO_ICMP\ngen IPPROTO_TCP\ngen IPPROTO_UDP\n\ngen INADDR_ANY\ngen INADDR_BROADCAST\n\ngen INET_ADDRSTRLEN\n\necho \"#if _POSIX_IPV6\"\n\ngen IPPROTO_IPV6\n\ngen INET6_ADDRSTRLEN\n\ngen IPV6_JOIN_GROUP\ngen IPV6_LEAVE_GROUP\ngen IPV6_MULTICAST_HOPS\ngen IPV6_MULTICAST_IF\ngen IPV6_MULTICAST_LOOP\ngen IPV6_UNICAST_HOPS\ngen IPV6_V6ONLY\n\ngen IN6_IS_ADDR_UNSPECIFIED\ngen IN6_IS_ADDR_LOOPBACK\ngen IN6_IS_ADDR_MULTICAST\ngen IN6_IS_ADDR_LINKLOCAL\ngen IN6_IS_ADDR_SITELOCAL\ngen IN6_IS_ADDR_V4MAPPED\ngen IN6_IS_ADDR_V4COMPAT\ngen IN6_IS_ADDR_MC_NODELOCAL\ngen IN6_IS_ADDR_MC_LINKLOCAL\ngen IN6_IS_ADDR_MC_SITELOCAL\ngen IN6_IS_ADDR_MC_ORGLOCAL\ngen IN6_IS_ADDR_MC_GLOBAL\n\necho \"#endif /* _POSIX_IPV6 */\"\n\necho \"#if defined(_POSIX_RAW_SOCKETS) && _POSIX_RAW_SOCKETS\"\ngen IPPROTO_RAW\necho \"#endif /* _POSIX_RAW_SOCKETS */\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-poll",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen POLLIN\ngen POLLRDNORM\ngen POLLRDBAND\ngen POLLPRI\ngen POLLOUT\ngen POLLWRNORM\ngen POLLWRBAND\ngen POLLERR\ngen POLLHUP\ngen POLLNVAL\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-pthread",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrevlist()\n{\n    echo \"$@\" | awk '\n        {\n            n = split($0, words);\n            for (i=n; i>0; i--) {\n                printf \"%s \", words[i]\n            }\n        }\n        END {\n            printf(\"\\n\")\n        }'\n}\n\ngen()\n{\n    local name=$1\n    shift\n    local conditions=\"$@\"\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    for cond in $conditions; do\n        echo \"#if ${cond}\"\n    done\n    echo \"#if !defined(${name})\"\n    echo \"#error ${name} not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n    for cond in $(revlist $conditions); do\n        echo \"#endif /* ${cond} */\"\n    done\n}\n\ngene()\n{\n    local name=$1\n    if [ -z \"$name\" ]; then\n        echo \"ERROR: empty name passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n    echo \"int pthread_check_enum_${name} = ${name};\"\n}\n\necho \"#if defined(_POSIX_BARRIERS) && _POSIX_BARRIERS > 0\"\ngen PTHREAD_BARRIER_SERIAL_THREAD\necho \"#endif\"\n\ngen PTHREAD_CANCEL_ASYNCHRONOUS !__ANDROID__\ngen PTHREAD_CANCEL_ENABLE       !__ANDROID__\ngen PTHREAD_CANCEL_DEFERRED     !__ANDROID__\ngen PTHREAD_CANCEL_DISABLE      !__ANDROID__\ngen PTHREAD_CANCELED            !__ANDROID__\n\ngen PTHREAD_COND_INITIALIZER\ngen PTHREAD_CREATE_DETACHED\ngen PTHREAD_CREATE_JOINABLE\n\ngen PTHREAD_EXPLICIT_SCHED !__ANDROID__\ngen PTHREAD_INHERIT_SCHED  !__ANDROID__\n\ngen PTHREAD_MUTEX_DEFAULT    !__gnu_linux__\ngen PTHREAD_MUTEX_ERRORCHECK !__gnu_linux__\ngen PTHREAD_MUTEX_NORMAL     !__gnu_linux__\ngen PTHREAD_MUTEX_RECURSIVE  !__gnu_linux__\n\ngen PTHREAD_MUTEX_INITIALIZER\necho \"#if !__gnu_linux__ && (!__APPLE__ || defined(__MAC_10_7))\"\ngen PTHREAD_RECURSIVE_MUTEX_INITIALIZER\ngen PTHREAD_ERRORCHECK_MUTEX_INITIALIZER\necho \"#endif\"\n\ngen PTHREAD_ONCE_INIT\n\necho \"#if defined(_POSIX_THREAD_PRIO_INHERIT) && _POSIX_THREAD_PRIO_INHERIT > 0\"\ngen PTHREAD_PRIO_INHERIT !__ANDROID__\necho \"#endif\"\n\necho \"#if defined(_POSIX_THREAD_PRIO_INHERIT) && _POSIX_THREAD_PRIO_INHERIT > 0 && \\\\\"\necho \"    defined(_POSIX_THREAD_PRIO_PROTECT) && _POSIX_THREAD_PRIO_PROTECT > 0\"\ngen PTHREAD_PRIO_NONE    !__ANDROID__\necho \"#endif\"\n\necho \"#if defined(_POSIX_THREAD_PRIO_PROTECT) && _POSIX_THREAD_PRIO_PROTECT > 0\"\ngen PTHREAD_PRIO_PROTECT !__ANDROID__\necho \"#endif\"\n\ngen PTHREAD_PROCESS_SHARED\ngen PTHREAD_PROCESS_PRIVATE\n\necho \"#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && _POSIX_THREAD_PRIORITY_SCHEDULING > 0\"\ngen PTHREAD_SCOPE_PROCESS\ngen PTHREAD_SCOPE_SYSTEM\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-regex",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen REG_EXTENDED\ngen REG_ICASE\ngen REG_NOSUB\ngen REG_NEWLINE\n\ngen REG_NOTBOL\ngen REG_NOTEOL\n\n# GNU linux define following symbols as enum elements, not as macros\necho \"#if !__gnu_linux__\"\ngen REG_NOMATCH\ngen REG_BADPAT\ngen REG_ECOLLATE\ngen REG_ECTYPE\ngen REG_EESCAPE\ngen REG_ESUBREG\ngen REG_EBRACK\ngen REG_EPAREN\ngen REG_EBRACE\ngen REG_BADBR\ngen REG_ERANGE\ngen REG_ESPACE\ngen REG_BADRPT\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sched",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ncond=\"_POSIX_PRIORITY_SCHEDULING > 0 || _POSIX_THREAD_PRIORITY_SCHEDULING > 0\"\necho \"#if ${cond}\"\ngen SCHED_FIFO\ngen SCHED_RR\ngen SCHED_OTHER\necho \"#endif /* ${cond} */\"\n\ncond=\"_POSIX_SPORADIC_SERVER > 0 || _POSIX_THREAD_SPORADIC_SERVER > 0\"\necho \"#if ${cond}\"\ngen SCHED_SPORADIC\necho \"#endif /* ${cond} */\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-signal",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen SIG_DFL\ngen SIG_ERR\ngen SIG_IGN\n\ngen SIGEV_NONE\ngen SIGEV_SIGNAL\ngen SIGEV_THREAD\n\ngen SIGABRT\ngen SIGALRM\ngen SIGBUS\ngen SIGCHLD\ngen SIGCONT\ngen SIGFPE\ngen SIGHUP\ngen SIGILL\ngen SIGINT\ngen SIGKILL\ngen SIGPIPE\ngen SIGQUIT\ngen SIGSEGV\ngen SIGSTOP\ngen SIGTERM\ngen SIGTSTP\ngen SIGTTIN\ngen SIGTTOU\ngen SIGUSR1\ngen SIGUSR2\ngen SIGURG\n\necho \"#if __XSI_VISIBLE\"\ngen SIGSYS\ngen SIGTRAP\ngen SIGVTALRM\ngen SIGXCPU\ngen SIGXFSZ\necho \"#endif\"\n\ngen SIG_BLOCK\ngen SIG_UNBLOCK\ngen SIG_SETMASK\n\ngen SA_NOCLDSTOP\ngen SA_RESETHAND\ngen SA_RESTART\ngen SA_SIGINFO\ngen SA_NOCLDWAIT\ngen SA_NODEFER\n\necho \"#if __XSI_VISIBLE\"\ngen SA_ONSTACK\ngen SS_ONSTACK\ngen SS_DISABLE\ngen MINSIGSTKSZ\ngen SIGSTKSZ\necho \"#endif\"\n\ngen ILL_ILLOPC\ngen ILL_ILLOPN\ngen ILL_ILLADR\ngen ILL_ILLTRP\ngen ILL_PRVOPC\ngen ILL_PRVREG\ngen ILL_COPROC\ngen ILL_BADSTK\n\ngen FPE_INTDIV\ngen FPE_INTOVF\ngen FPE_FLTDIV\ngen FPE_FLTOVF\ngen FPE_FLTUND\ngen FPE_FLTRES\ngen FPE_FLTINV\ngen FPE_FLTSUB\n\ngen SEGV_MAPERR\ngen SEGV_ACCERR\n\ngen BUS_ADRALN\ngen BUS_ADRERR\ngen BUS_OBJERR\n\necho \"#if __XSI_VISIBLE\"\ngen TRAP_BRKPT\ngen TRAP_TRACE\necho \"#endif\"\n\ngen CLD_EXITED\ngen CLD_KILLED\ngen CLD_DUMPED\ngen CLD_TRAPPED\ngen CLD_STOPPED\ngen CLD_CONTINUED\n\ngen SI_USER\ngen SI_QUEUE\ngen SI_TIMER\ngen SI_ASYNCIO\ngen SI_MESGQ\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-spawn",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen POSIX_SPAWN_RESETIDS\ngen POSIX_SPAWN_SETPGROUP\ngen POSIX_SPAWN_SETSIGDEF\ngen POSIX_SPAWN_SETSIGMASK\n\necho \"#if _POSIX_PRIORITY_SCHEDULING > 0\"\ngen POSIX_SPAWN_SETSCHEDPARAM\ngen POSIX_SPAWN_SETSCHEDULER\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-stdbool",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen bool\ngen true\ngen false\ngen __bool_true_false_are_defined\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-stdint",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ndowncase()\n{\n    echo \"$@\" | tr '[A-Z]' '[a-z]'\n}\n\ngen()\n{\n    local typ=$1\n    local siz=$2\n    if [ -z \"$typ\" -o -z \"$siz\" ]; then\n        echo \"ERROR: empty type or size passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n\n    echo \"${typ} stdint_check_type_${typ}_var;\"\n    if [ \"${typ%%fast*}\" != \"$typ\" ]; then\n        op=\">=\"\n    elif [ \"${typ%%least*}\" != \"$typ\" ]; then\n        op=\">=\"\n    else\n        op=\"==\"\n    fi\n    echo \"typedef int stdint_assert_sizeof_type_${typ}[(sizeof(${typ}) ${op} ${siz}/8) ? 1 : -1];\"\n}\n\nfor signed in '' 'u'; do\n    for f in '' LEAST FAST; do\n        for s in 8 16 32 64; do\n            gen ${signed}int$(test -z \"$f\" && echo '' || echo \"_$(downcase $f)\")${s}_t $s\n        done\n    done\n\n    gen ${signed}intmax_t 64\n\n    echo \"#if __LP64__\"\n    gen ${signed}intptr_t 64\n    echo \"#else\"\n    gen ${signed}intptr_t 32\n    echo \"#endif\"\ndone\n\ngen()\n{\n    local siz=$1\n    if [ -z \"$siz\" ]; then\n        echo \"ERROR: empty size passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n\n    for c in '' _LEAST _FAST; do\n        echo \"#ifndef INT${c}${siz}_MIN\"\n        echo \"#error 'INT${c}${siz}_MIN' not defined\"\n        echo \"#endif\"\n\n        echo \"#ifndef INT${c}${siz}_MAX\"\n        echo \"#error 'INT${c}${siz}_MAX' not defined\"\n        echo \"#endif\"\n\n        echo \"#ifndef UINT${c}${siz}_MAX\"\n        echo \"#error 'UINT${c}${siz}_MAX' not defined\"\n        echo \"#endif\"\n    done\n}\n\nfor s in 8 16 32 64; do\n    gen $s\ndone\n\nfor c in MAX PTR; do\n    echo \"#ifndef INT${c}_MIN\"\n    echo \"#error 'INT${c}_MIN' not defined\"\n    echo \"#endif\"\n\n    echo \"#ifndef INT${c}_MAX\"\n    echo \"#error 'INT${c}_MAX' not defined\"\n    echo \"#endif\"\n\n    echo \"#ifndef UINT${c}_MAX\"\n    echo \"#error 'UINT${c}_MAX' not defined\"\n    echo \"#endif\"\ndone\n\ngen()\n{\n    local name=$1\n    local min=$2\n    local max=$3\n    if [ -z \"$name\" -o -z \"$min\" -o -z \"$max\" ]; then\n        echo \"ERROR: empty name or min or max passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n\n    echo \"#ifndef ${name}_MIN\"\n    echo \"#error '${name}_MIN' not defined\"\n    echo \"#endif\"\n\n    echo \"#if ${name}_MIN > ${min}\"\n    echo \"#error '${name}_MIN' greater than ${min}\"\n    echo \"#endif\"\n\n    echo \"#ifndef ${name}_MAX\"\n    echo \"#error '${name}_MAX' not defined\"\n    echo \"#endif\"\n\n    echo \"#if ${name}_MAX < ${max}\"\n    echo \"#error '${name}_MAX' less than ${max}\"\n    echo \"#endif\"\n}\n\ngen PTRDIFF -65535 65535\ngen SIG_ATOMIC -127 127\ngen WCHAR 0 255\necho \"#if __gnu_linux__\"\ngen WINT 0 65535\necho \"#else\"\ngen WINT -32767 32767\necho \"#endif\"\n\necho \"#ifndef SIZE_MAX\"\necho \"#error 'SIZE_MAX' not defined\"\necho \"#endif\"\necho \"#if SIZE_MAX < 65535\"\necho \"#error 'SIZE_MAX' less than 65535\"\necho \"#endif\"\n\ngen()\n{\n    local siz=$1\n    if [ -z \"$siz\" ]; then\n        echo \"ERROR: empty size passed to 'gen' function\" 1>&2\n        exit 1\n    fi\n\n    echo \"#ifndef INT${siz}_C\"\n    echo \"#error 'INT${siz}_C' not defined\"\n    echo \"#endif\"\n\n    echo \"#ifndef UINT${siz}_C\"\n    echo \"#error 'UINT${siz}_C' not defined\"\n    echo \"#endif\"\n}\n\nfor s in 8 16 32 64; do\n    gen $s\ndone\n\necho \"#ifndef INTMAX_C\"\necho \"#error 'INTMAX_C' not defined\"\necho \"#endif\"\n\necho \"#ifndef UINTMAX_C\"\necho \"#error 'UINTMAX_C' not defined\"\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-stdio",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen BUFSIZ\ngen L_ctermid\ngen L_tmpnam\n\ngen _IOFBF\ngen _IOLBF\ngen _IONBF\n\ngen SEEK_CUR\ngen SEEK_END\ngen SEEK_SET\n\ngen FILENAME_MAX\ngen FOPEN_MAX\n\ngen EOF\n\ngen stderr\ngen stdin\ngen stdout\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-stdlib",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen NULL\n\ngen EXIT_FAILURE\ngen EXIT_SUCCESS\n\ngen RAND_MAX\n\ngen MB_CUR_MAX\n\ngen WEXITSTATUS\ngen WIFEXITED\ngen WIFSIGNALED\ngen WIFSTOPPED\ngen WNOHANG\ngen WSTOPSIG\ngen WTERMSIG\ngen WUNTRACED\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_ipc",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen IPC_CREAT\ngen IPC_EXCL\ngen IPC_NOWAIT\n\ngen IPC_PRIVATE\n\ngen IPC_RMID\ngen IPC_SET\ngen IPC_STAT\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_mman",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen PROT_EXEC\ngen PROT_NONE\ngen PROT_READ\ngen PROT_WRITE\n\ngen MAP_FIXED\ngen MAP_PRIVATE\ngen MAP_SHARED\n\ngen MAP_FAILED\n\necho \"#if __XSI_VISIBLE || _POSIX_SYNCHRONIZED_IO > 0\"\ngen MS_ASYNC\ngen MS_INVALIDATE\ngen MS_SYNC\necho \"#endif\"\n\necho \"#if _POSIX_MEMLOCK > 0\"\ngen MCL_CURRENT\ngen MCL_FUTURE\necho \"#endif\"\n\necho \"#if _POSIX_ADVISORY_INFO > 0\"\ngen POSIX_MADV_DONTNEED\ngen POSIX_MADV_NORMAL\ngen POSIX_MADV_RANDOM\ngen POSIX_MADV_SEQUENTIAL\ngen POSIX_MADV_WILLNEED\necho \"#endif\"\n\necho \"#if _POSIX_TYPED_MEMORY_OBJECTS > 0\"\ngen POSIX_TYPED_MEM_ALLOCATE\ngen POSIX_TYPED_MEM_ALLOCATE_CONTIG\ngen POSIX_TYPED_MEM_MAP_ALLOCATABLE\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_resource",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen PRIO_PROCESS\ngen PRIO_PGRP\ngen PRIO_USER\n\ngen RLIM_INFINITY\ngen RLIM_SAVED_MAX\ngen RLIM_SAVED_CUR\n\ngen RUSAGE_SELF\ngen RUSAGE_CHILDREN\n\ngen RLIMIT_CORE\ngen RLIMIT_CPU\ngen RLIMIT_DATA\ngen RLIMIT_FSIZE\ngen RLIMIT_NOFILE\ngen RLIMIT_STACK\ngen RLIMIT_AS\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_sem",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen SEM_UNDO\n\ngen GETNCNT\ngen GETPID\ngen GETVAL\ngen GETALL\ngen GETZCNT\n\ngen SETVAL\ngen SETALL\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_shm",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen SHM_RDONLY\ngen SHM_RND\ngen SHMLBA\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_socket",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen SCM_RIGHTS\n\ngen CMSG_DATA\ngen CMSG_NXTHDR\ngen CMSG_FIRSTHDR\n\ngen SOCK_DGRAM\ngen SOCK_SEQPACKET\ngen SOCK_STREAM\n\necho \"#if _POSIX_RAW_SOCKETS > 0\"\ngen SOCK_RAW\necho \"#endif\"\n\ngen SOL_SOCKET\n\ngen SO_ACCEPTCONN\ngen SO_BROADCAST\ngen SO_DEBUG\ngen SO_DONTROUTE\ngen SO_ERROR\ngen SO_KEEPALIVE\ngen SO_LINGER\ngen SO_OOBINLINE\ngen SO_RCVBUF\ngen SO_RCVLOWAT\ngen SO_RCVTIMEO\ngen SO_REUSEADDR\ngen SO_SNDBUF\ngen SO_SNDLOWAT\ngen SO_SNDTIMEO\ngen SO_TYPE\n\ngen SOMAXCONN\n\ngen MSG_CTRUNC\ngen MSG_DONTROUTE\ngen MSG_EOR\ngen MSG_OOB\necho \"#if !__APPLE__\"\ngen MSG_NOSIGNAL\necho \"#endif\"\ngen MSG_PEEK\ngen MSG_TRUNC\ngen MSG_WAITALL\n\ngen AF_INET\ngen AF_UNIX\ngen AF_UNSPEC\n\necho \"#if _POSIX_IPV6 > 0\"\ngen AF_INET6\necho \"#endif\"\n\ngen SHUT_RD\ngen SHUT_RDWR\ngen SHUT_WR\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_stat",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen S_IFMT\ngen S_IFBLK\ngen S_IFCHR\ngen S_IFIFO\ngen S_IFREG\ngen S_IFDIR\ngen S_IFLNK\ngen S_IFSOCK\n\ngen S_IRWXU\ngen S_IRUSR\ngen S_IWUSR\ngen S_IXUSR\ngen S_IRWXG\ngen S_IRGRP\ngen S_IWGRP\ngen S_IXGRP\ngen S_IRWXO\ngen S_IROTH\ngen S_IWOTH\ngen S_IXOTH\ngen S_ISUID\ngen S_ISGID\ngen S_ISVTX\n\ngen S_ISBLK\ngen S_ISCHR\ngen S_ISDIR\ngen S_ISFIFO\ngen S_ISREG\ngen S_ISLNK\ngen S_ISSOCK\n\necho \"#if !__ANDROID__\"\ngen S_TYPEISMQ\ngen S_TYPEISSEM\ngen S_TYPEISSHM\necho \"#if _POSIX_TYPED_MEMORY_OBJECTS > 0\"\ngen S_TYPEISTMO\necho \"#endif\"\necho \"#endif /* !__ANDROID__ */\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_statvfs",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen ST_RDONLY\ngen ST_NOSUID\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_time",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen FD_CLR\ngen FD_ISSET\ngen FD_SET\ngen FD_ZERO\n\ngen ITIMER_REAL\ngen ITIMER_VIRTUAL\ngen ITIMER_PROF\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-sys_wait",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen WCONTINUED\ngen WNOHANG\ngen WUNTRACED\n\ngen WEXITSTATUS\necho \"#if !__ANDROID__\"\ngen WIFCONTINUED\necho \"#endif\"\ngen WIFEXITED\ngen WIFSIGNALED\ngen WIFSTOPPED\ngen WSTOPSIG\ngen WTERMSIG\n\ngen WEXITED\ngen WNOWAIT\ngen WSTOPPED\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-syslog",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen LOG_PID\ngen LOG_CONS\ngen LOG_NDELAY\ngen LOG_ODELAY\ngen LOG_NOWAIT\n\ngen LOG_KERN\ngen LOG_USER\ngen LOG_MAIL\ngen LOG_NEWS\ngen LOG_UUCP\ngen LOG_DAEMON\ngen LOG_AUTH\ngen LOG_CRON\ngen LOG_LPR\n\nfor i in 0 1 2 3 4 5 6 7; do\n    gen LOG_LOCAL${i}\ndone\n\ngen LOG_MASK\n\ngen LOG_EMERG\ngen LOG_ALERT\ngen LOG_CRIT\ngen LOG_ERR\ngen LOG_WARNING\ngen LOG_NOTICE\ngen LOG_INFO\ngen LOG_DEBUG\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-tar",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    local val=$2\n\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n\n    if [ -n \"$val\" ]; then\n        echo \"#if ${name} != ${val}\"\n        echo \"#error '${name}' not equal to ${val}\"\n        echo \"#endif\"\n    fi\n}\n\ngen TMAGIC\ngen TMAGLEN 6\ngen TVERSION\ngen TVERSLEN 2\n\ngen REGTYPE  \"'0'\"\ngen AREGTYPE \"'\\0'\"\ngen LNKTYPE  \"'1'\"\ngen SYMTYPE  \"'2'\"\ngen CHRTYPE  \"'3'\"\ngen BLKTYPE  \"'4'\"\ngen DIRTYPE  \"'5'\"\ngen FIFOTYPE \"'6'\"\ngen CONTTYPE \"'7'\"\n\ngen TSUID    04000\ngen TSGID    02000\ngen TSVTX    01000\ngen TUREAD   00400\ngen TUWRITE  00200\ngen TUEXEC   00100\ngen TGREAD   00040\ngen TGWRITE  00020\ngen TGEXEC   00010\ngen TOREAD   00004\ngen TOWRITE  00002\ngen TOEXEC   00001\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-termios",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    local val=$2\n\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n\n    if [ -n \"$val\" ]; then\n        echo \"#if ${name} != ${val}\"\n        echo \"#error '${name}' not equal to ${val}\"\n        echo \"#endif\"\n    fi\n}\n\ngen NCCS\n\ngen VEOF\ngen VEOL\ngen VERASE\ngen VINTR\ngen VKILL\ngen VQUIT\ngen VSTART\ngen VSTOP\ngen VSUSP\ngen VTIME\n\ngen BRKINT\ngen ICRNL\ngen IGNBRK\ngen IGNCR\ngen IGNPAR\ngen INLCR\ngen INPCK\ngen ISTRIP\ngen IXANY\ngen IXOFF\ngen IXON\ngen PARMRK\n\ngen OPOST\ngen ONLCR\ngen OCRNL\ngen ONOCR\ngen ONLRET\ngen OFDEL\ngen OFILL\n\ngen NLDLY\ngen NL0\ngen NL1\n\ngen CRDLY\ngen CR0\ngen CR1\ngen CR2\ngen CR3\n\ngen TABDLY\ngen TAB0\ngen TAB1\ngen TAB2\ngen TAB3\n\ngen BSDLY\ngen BS0\ngen BS1\n\ngen VTDLY\ngen VT0\ngen VT1\n\ngen FFDLY\ngen FF0\ngen FF1\n\ngen B0\ngen B50\ngen B75\ngen B110\ngen B134\ngen B150\ngen B200\ngen B300\ngen B600\ngen B1200\ngen B1800\ngen B2400\ngen B4800\ngen B9600\ngen B19200\ngen B38400\n\ngen CSIZE\ngen CS5\ngen CS6\ngen CS7\ngen CS8\n\ngen CSTOPB\ngen CREAD\ngen PARENB\ngen PARODD\ngen HUPCL\ngen CLOCAL\n\ngen ECHO\ngen ECHOE\ngen ECHOK\ngen ECHONL\ngen ICANON\ngen IEXTEN\ngen ISIG\ngen NOFLSH\ngen TOSTOP\n\ngen TCSANOW\ngen TCSADRAIN\ngen TCSAFLUSH\n\ngen TCIFLUSH\ngen TCIOFLUSH\ngen TCOFLUSH\n\ngen TCIOFF\ngen TCION\ngen TCOOFF\ngen TCOON\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-tgmath",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    local val=$2\n\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\necho \"#if __LIBCRYSTAX\"\ngen __CRYSTAX_COMPLEX_H_INCLUDED\ngen __CRYSTAX_MATH_H_INCLUDED\necho \"#endif\"\n\ngen acos\ngen asin\ngen atan\ngen acosh\ngen asinh\ngen atanh\ngen cos\ngen sin\ngen tan\ngen cosh\ngen sinh\ngen tanh\ngen exp\ngen log\ngen pow\ngen sqrt\ngen fabs\n\ngen atan2\ngen cbrt\ngen ceil\ngen copysign\ngen erf\ngen erfc\ngen exp2\ngen expm1\ngen fdim\ngen floor\ngen fma\ngen fmax\ngen fmin\ngen fmod\ngen frexp\ngen hypot\ngen ilogb\ngen ldexp\ngen lgamma\ngen llrint\ngen llround\ngen log10\ngen log1p\ngen log2\necho \"#if !__APPLE__ || !defined(__clang__) || __clang_major__ > 2\"\ngen logb\necho \"#endif\"\ngen lrint\ngen lround\ngen nearbyint\ngen nextafter\ngen nexttoward\ngen remainder\ngen remquo\ngen rint\ngen round\ngen scalbln\ngen scalbn\ngen tgamma\ngen trunc\n\ngen carg\ngen cimag\ngen conj\ngen cproj\ngen creal\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-time",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    local val=$2\n\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen NULL\n\ngen CLOCKS_PER_SEC\n\necho \"#if !__APPLE__\"\ngen CLOCK_REALTIME\necho \"#endif\"\n\necho \"#if _POSIX_MONOTONIC_CLOCK > 0\"\ngen CLOCK_MONOTONIC\necho \"#endif\"\n\necho \"#if _POSIX_TIMERS > 0 || _POSIX_CPUTIME > 0\"\ngen CLOCK_PROCESS_CPUTIME_ID\necho \"#endif\"\n\necho \"#if _POSIX_TIMERS > 0 || _POSIX_THREAD_CPUTIME > 0\"\ngen CLOCK_THREAD_CPUTIME_ID\necho \"#endif\"\n\necho \"#if !__APPLE__\"\ngen TIMER_ABSTIME\necho \"#endif\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-unistd",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name}) || ${name} == -1\"\n    echo \"#error Wrong ${name}\"\n    echo \"#endif\"\n}\n\ngen _POSIX_CHOWN_RESTRICTED\ngen _POSIX_NO_TRUNC\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name}) || ${name} <= 0\"\n    echo \"#error Wrong ${name}\"\n    echo \"#endif\"\n}\n\ngen _POSIX_JOB_CONTROL\necho \"#if !__ANDROID__\"\ngen _POSIX_SHELL\necho \"#endif\"\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name}) || ${name} != CRYSTAX_POSIX_VERSION\"\n    echo \"#error Wrong ${name}\"\n    echo \"#endif\"\n}\n\ngen _POSIX_MAPPED_FILES\ngen _POSIX_READER_WRITER_LOCKS\necho \"#if !__gnu_linux__\"\ngen _POSIX_REGEXP\ngen _POSIX_SAVED_IDS\necho \"#endif\"\necho \"#if !__ANDROID__\"\ngen _POSIX_THREAD_SAFE_FUNCTIONS\necho \"#endif\"\ngen _POSIX_THREADS\n\ngen()\n{\n    local name=$1\n    echo \"#if defined(${name})\"\n    echo \"#if ${name} != -1 && ${name} != 0 && ${name} != CRYSTAX_POSIX_VERSION\"\n    echo \"#error Wrong ${name}\"\n    echo \"#endif\"\n    echo \"#endif /* defined(${name}) */\"\n}\n\ngen _POSIX_ADVISORY_INFO\ngen _POSIX_ASYNCHRONOUS_IO\ngen _POSIX_BARRIERS\ngen _POSIX_CLOCK_SELECTION\ngen _POSIX_CPUTIME\ngen _POSIX_FSYNC\ngen _POSIX_IPV6\ngen _POSIX_MEMLOCK\ngen _POSIX_MEMLOCK_RANGE\ngen _POSIX_MESSAGE_PASSING\ngen _POSIX_MONOTONIC_CLOCK\ngen _POSIX_PRIORITIZED_IO\ngen _POSIX_PRIORITY_SCHEDULING\ngen _POSIX_RAW_SOCKETS\ngen _POSIX_REALTIME_SIGNALS\ngen _POSIX_SEMAPHORES\ngen _POSIX_SHARED_MEMORY_OBJECTS\ngen _POSIX_SPAWN\ngen _POSIX_SPIN_LOCKS\ngen _POSIX_SPORADIC_SERVER\ngen _POSIX_SYNCHRONIZED_IO\ngen _POSIX_THREAD_ATTR_STACKADDR\ngen _POSIX_THREAD_ATTR_STACKSIZE\ngen _POSIX_THREAD_CPUTIME\ngen _POSIX_THREAD_PRIORITY_SCHEDULING\ngen _POSIX_THREAD_PRIO_INHERIT\ngen _POSIX_THREAD_PRIO_PROTECT\ngen _POSIX_THREAD_PROCESS_SHARED\ngen _POSIX_THREAD_ROBUST_PRIO_INHERIT\ngen _POSIX_THREAD_ROBUST_PRIO_PROTECT\ngen _POSIX_THREAD_SPORADIC_SERVER\ngen _POSIX_TIMEOUTS\ngen _POSIX_TIMERS\ngen _POSIX_TYPED_MEMORY_OBJECTS\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name}) || (${name} != -1 && ${name} != 0 && ${name} != CRYSTAX_POSIX_VERSION)\"\n    echo \"#error Wrong ${name}\"\n    echo \"#endif\"\n}\n\ngen _POSIX_MEMORY_PROTECTION\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif\"\n}\n\ngen F_OK\ngen R_OK\ngen W_OK\ngen X_OK\n\nfor f in F R W X; do\n    for s in F R W X; do\n        test \"$f\" = \"$s\" && continue\n        echo \"#if ${f}_OK == ${s}_OK\"\n        echo \"#error '${f}_OK' and '${s}_OK' have the same value\"\n        echo \"#endif\"\n    done\ndone\n\necho \"#if (R_OK|W_OK) == (R_OK|X_OK) || (R_OK|W_OK) == (R_OK|W_OK|X_OK) || (R_OK|X_OK) == (R_OK|W_OK|X_OK)\"\necho \"#error Wrong R_OK or W_OK or X_OK\"\necho \"#endif\"\n\ngen F_LOCK\ngen F_TEST\ngen F_TLOCK\ngen F_ULOCK\n\ngen _PC_2_SYMLINKS\ngen _PC_ALLOC_SIZE_MIN\ngen _PC_ASYNC_IO\ngen _PC_CHOWN_RESTRICTED\ngen _PC_FILESIZEBITS\ngen _PC_LINK_MAX\ngen _PC_MAX_CANON\ngen _PC_MAX_INPUT\ngen _PC_NAME_MAX\ngen _PC_NO_TRUNC\ngen _PC_PATH_MAX\ngen _PC_PIPE_BUF\ngen _PC_PRIO_IO\ngen _PC_REC_INCR_XFER_SIZE\ngen _PC_REC_MAX_XFER_SIZE\ngen _PC_REC_MIN_XFER_SIZE\ngen _PC_REC_XFER_ALIGN\ngen _PC_SYMLINK_MAX\ngen _PC_SYNC_IO\n#gen _PC_TIMESTAMP_RESOLUTION\ngen _PC_VDISABLE\n\ngen _SC_2_C_BIND\ngen _SC_2_C_DEV\ngen _SC_2_CHAR_TERM\ngen _SC_2_FORT_DEV\ngen _SC_2_FORT_RUN\ngen _SC_2_LOCALEDEF\ngen _SC_2_PBS\ngen _SC_2_PBS_ACCOUNTING\ngen _SC_2_PBS_CHECKPOINT\ngen _SC_2_PBS_LOCATE\ngen _SC_2_PBS_MESSAGE\ngen _SC_2_PBS_TRACK\ngen _SC_2_SW_DEV\ngen _SC_2_UPE\ngen _SC_2_VERSION\ngen _SC_ADVISORY_INFO\ngen _SC_AIO_LISTIO_MAX\ngen _SC_AIO_MAX\ngen _SC_AIO_PRIO_DELTA_MAX\ngen _SC_ARG_MAX\ngen _SC_ASYNCHRONOUS_IO\ngen _SC_ATEXIT_MAX\ngen _SC_BARRIERS\ngen _SC_BC_BASE_MAX\ngen _SC_BC_DIM_MAX\ngen _SC_BC_SCALE_MAX\ngen _SC_BC_STRING_MAX\ngen _SC_CHILD_MAX\ngen _SC_CLK_TCK\ngen _SC_CLOCK_SELECTION\ngen _SC_COLL_WEIGHTS_MAX\ngen _SC_CPUTIME\ngen _SC_DELAYTIMER_MAX\ngen _SC_EXPR_NEST_MAX\ngen _SC_FSYNC\ngen _SC_GETGR_R_SIZE_MAX\ngen _SC_GETPW_R_SIZE_MAX\ngen _SC_HOST_NAME_MAX\ngen _SC_IOV_MAX\ngen _SC_IPV6\ngen _SC_JOB_CONTROL\ngen _SC_LINE_MAX\ngen _SC_LOGIN_NAME_MAX\ngen _SC_MAPPED_FILES\ngen _SC_MEMLOCK\ngen _SC_MEMLOCK_RANGE\ngen _SC_MEMORY_PROTECTION\ngen _SC_MESSAGE_PASSING\ngen _SC_MONOTONIC_CLOCK\ngen _SC_MQ_OPEN_MAX\ngen _SC_MQ_PRIO_MAX\ngen _SC_NGROUPS_MAX\ngen _SC_OPEN_MAX\ngen _SC_PAGE_SIZE\ngen _SC_PAGESIZE\ngen _SC_PRIORITIZED_IO\ngen _SC_PRIORITY_SCHEDULING\ngen _SC_RAW_SOCKETS\ngen _SC_RE_DUP_MAX\ngen _SC_READER_WRITER_LOCKS\ngen _SC_REALTIME_SIGNALS\ngen _SC_REGEXP\ngen _SC_RTSIG_MAX\ngen _SC_SAVED_IDS\ngen _SC_SEM_NSEMS_MAX\ngen _SC_SEM_VALUE_MAX\ngen _SC_SEMAPHORES\ngen _SC_SHARED_MEMORY_OBJECTS\ngen _SC_SHELL\ngen _SC_SIGQUEUE_MAX\ngen _SC_SPAWN\ngen _SC_SPIN_LOCKS\ngen _SC_SPORADIC_SERVER\ngen _SC_SS_REPL_MAX\ngen _SC_STREAM_MAX\ngen _SC_SYMLOOP_MAX\ngen _SC_SYNCHRONIZED_IO\ngen _SC_THREAD_ATTR_STACKADDR\ngen _SC_THREAD_ATTR_STACKSIZE\ngen _SC_THREAD_CPUTIME\ngen _SC_THREAD_DESTRUCTOR_ITERATIONS\ngen _SC_THREAD_KEYS_MAX\ngen _SC_THREAD_PRIO_INHERIT\ngen _SC_THREAD_PRIO_PROTECT\ngen _SC_THREAD_PRIORITY_SCHEDULING\ngen _SC_THREAD_PROCESS_SHARED\necho \"#if !__APPLE__\"\ngen _SC_THREAD_ROBUST_PRIO_INHERIT\ngen _SC_THREAD_ROBUST_PRIO_PROTECT\necho \"#endif\"\ngen _SC_THREAD_SAFE_FUNCTIONS\ngen _SC_THREAD_SPORADIC_SERVER\ngen _SC_THREAD_STACK_MIN\ngen _SC_THREAD_THREADS_MAX\ngen _SC_THREADS\ngen _SC_TIMEOUTS\ngen _SC_TIMER_MAX\ngen _SC_TIMERS\ngen _SC_TRACE\ngen _SC_TRACE_EVENT_FILTER\ngen _SC_TRACE_EVENT_NAME_MAX\ngen _SC_TRACE_INHERIT\ngen _SC_TRACE_LOG\ngen _SC_TRACE_NAME_MAX\ngen _SC_TRACE_SYS_MAX\ngen _SC_TRACE_USER_EVENT_MAX\ngen _SC_TTY_NAME_MAX\ngen _SC_TYPED_MEMORY_OBJECTS\ngen _SC_TZNAME_MAX\ngen _SC_VERSION\ngen _SC_XOPEN_CRYPT\ngen _SC_XOPEN_ENH_I18N\ngen _SC_XOPEN_REALTIME\ngen _SC_XOPEN_REALTIME_THREADS\ngen _SC_XOPEN_SHM\ngen _SC_XOPEN_STREAMS\ngen _SC_XOPEN_UNIX\necho \"#if !__APPLE__ && !__gnu_linux__\"\ngen _SC_XOPEN_UUCP\necho \"#endif\"\ngen _SC_XOPEN_VERSION\n\ngen STDERR_FILENO\ngen STDIN_FILENO\ngen STDOUT_FILENO\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-wchar",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    echo \"#if !defined(${name})\"\n    echo \"#error '${name}' not defined\"\n    echo \"#endif /* !defined(${name}) */\"\n}\n\ngen NULL\ngen WEOF\ngen WCHAR_MAX\ngen WCHAR_MIN\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/bin/gen-wordexp",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ngen()\n{\n    local name=$1\n    if [ -z \"$counter\" ]; then\n        counter=0\n    fi\n    echo \"int wordexp_check_symbol_${counter} = ${name};\"\n    counter=$(expr $counter + 1)\n}\n\ngen WRDE_APPEND\ngen WRDE_DOOFFS\ngen WRDE_NOCMD\ngen WRDE_REUSE\ngen WRDE_SHOWERR\ngen WRDE_UNDEF\n\ngen WRDE_BADCHAR\ngen WRDE_BADVAL\ngen WRDE_CMDSUB\ngen WRDE_NOSPACE\ngen WRDE_SYNTAX\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/build.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ncd $(dirname $0) || exit 1\nMYDIR=$(pwd)\n\nif [ -z \"$NDK\" ]; then\n    NDK=$(cd ../../.. && pwd)\nfi\n\nif [ -z \"$PLATFORMS\" ]; then\n    PLATFORMS=$(cd $NDK/platforms && ls -d android-* | sort)\nelse\n    PLATFORMS=$(echo $PLATFORMS | sed 's/,/ /g')\nfi\n\n$MYDIR/bin/gen-all\nif [ $? -ne 0 ]; then\n    echo \"ERROR: Code generation failed\" 1>&2\n    exit 1\nfi\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\nfor PLATFORM in $PLATFORMS; do\n    echo \"===== Checking standard headers for $PLATFORM\"\n    APILEVEL=$(echo $PLATFORM | sed 's,^android-,,')\n    if [ $APILEVEL -lt 9 ]; then\n        ABIS=\"armeabi-v7a armeabi-v7a-hard\"\n    elif [ $APILEVEL -lt 21 ]; then\n        ABIS=\"all32\"\n    else\n        ABIS=\"all\"\n    fi\n\n    run $NDK/ndk-build -C $MYDIR -B APP_PLATFORM=$PLATFORM APP_ABI=\"$ABIS\"\n    if [ $? -ne 0 ]; then\n        echo \"ERROR: Standard headers checks failed for $PLATFORM\" 1>&2\n        exit 1\n    fi\n    echo \"===== OK: standard headers for $PLATFORM seems to be in good state\"\ndone\n\nexit 0\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/common.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nSRCFILES :=        \\\n\taio.c          \\\n\tarpa_inet.c    \\\n\tcheckm.c       \\\n\tcomplex.c      \\\n\tcpio.c         \\\n\tctype.c        \\\n\tdirent.c       \\\n\tdlfcn.c        \\\n\terrno.c        \\\n\tfcntl.c        \\\n\tfenv.c         \\\n\tfloat.c        \\\n\tfmtmsg.c       \\\n\tfnmatch.c      \\\n\tftw.c          \\\n\tglob.c         \\\n\tgrp.c          \\\n\ticonv.c        \\\n\tinttypes.c     \\\n\tiso646.c       \\\n\tlanginfo.c     \\\n\tlibgen.c       \\\n\tlimits.c       \\\n\tlocale.c       \\\n\tmain.c         \\\n\tmath.c         \\\n\tmonetary.c     \\\n\tmqueue.c       \\\n\tndbm.c         \\\n\tnet_if.c       \\\n\tnetdb.c        \\\n\tnetinet_in.c   \\\n\tnetinet_tcp.c  \\\n\tnl_types.c     \\\n\tpoll.c         \\\n\tpthread.c      \\\n\tpwd.c          \\\n\tregex.c        \\\n\tsched.c        \\\n\tsearch.c       \\\n\tsemaphore.c    \\\n\tsetjmp.c       \\\n\tsignal.c       \\\n\tspawn.c        \\\n\tstdarg.c       \\\n\tstdbool.c      \\\n\tstddef.c       \\\n\tstdint.c       \\\n\tstdio.c        \\\n\tstdlib.c       \\\n\tstring.c       \\\n\tstrings.c      \\\n\tsys_ipc.c      \\\n\tsys_mman.c     \\\n\tsys_msg.c      \\\n\tsys_resource.c \\\n\tsys_select.c   \\\n\tsys_sem.c      \\\n\tsys_shm.c      \\\n\tsys_socket.c   \\\n\tsys_stat.c     \\\n\tsys_statvfs.c  \\\n\tsys_time.c     \\\n\tsys_times.c    \\\n\tsys_types.c    \\\n\tsys_uio.c      \\\n\tsys_un.c       \\\n\tsys_utsname.c  \\\n\tsys_wait.c     \\\n\tsyslog.c       \\\n\ttar.c          \\\n\ttermios.c      \\\n\ttgmath.c       \\\n\ttime.c         \\\n\tunistd.c       \\\n\tutime.c        \\\n\twchar.c        \\\n\twctype.c       \\\n\twordexp.c      \\\n\txlocale.c      \\\n\txlocale2.c     \\\n\nCFLAGS := -Wall -Wextra -Werror -Wno-unused-result\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/host/GNUmakefile",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\ninclude ../common.mk\n\nifeq (yes,$(shell uname -s | grep -iq linux && echo yes))\nCFLAGS += -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200809L -D_BSD_SOURCE\nLDLIBS += -lrt -ldl -lm -lcrypt\nLDFLAGS += -pthread\nendif\n\nifeq (yes,$(shell uname -s | grep -iq darwin && echo yes))\nLDLIBS += -liconv\n\nis-old-gcc := $(and $(shell $(CC) --version | grep -iq gcc && echo yes),$(filter 4.2.1,$(shell $(CC) -dumpversion)))\nis-old-clang := $(and $(shell $(CC) --version | grep -iq clang && echo yes),$(filter 2.0,$(shell $(CC) -dumpversion)))\nifneq (,$(or $(is-old-gcc),$(is-old-clang)))\nCFLAGS := $(filter-out -Wno-unused-result,$(CFLAGS))\nendif\n\nendif\n\nPRETEST := generate-checks\n\nBUILD_ONLY := true\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n\n.PHONY: generate-checks\ngenerate-checks:\n\t../bin/gen-all\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/.gitignore",
    "content": "gen/\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/Android.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.LOCAL_PATH := $(call my-dir)\n\nLOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-std-functions\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\nifeq (,$(filter clang3.5,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_CFLAGS    += -Wno-unused-local-typedefs\nendif\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/aio.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n/* WARNING!!! Android doesn't include aio.h header */\n\n#else /* !__ANDROID__ */\n#include <aio.h>\n#if __linux__ && !__ANDROID__\n#include <pthread.h> /* for pthread_attr_t */\n#endif\n\n#include \"gen/aio.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(aio_check_type_, __LINE__)\n\nCHECK(struct aiocb);\nCHECK(off_t);\nCHECK(pthread_attr_t);\nCHECK(size_t);\nCHECK(ssize_t);\nCHECK(struct timespec);\nCHECK(struct sigevent *);\n\nvoid aio_check_aiocb_fields(struct aiocb *s)\n{\n    s->aio_fildes     = 0;\n    s->aio_offset     = (off_t)0;\n    s->aio_buf        = (void *)0;\n    s->aio_nbytes     = (size_t)0;\n    s->aio_reqprio    = 0;\n    s->aio_lio_opcode = 0;\n\n    struct sigevent *p = &s->aio_sigevent;\n    (void)p;\n}\n\nvoid aio_check_functions(struct aiocb *ai)\n{\n    (void)aio_cancel(0, ai);\n    (void)aio_error(ai);\n#if _POSIX_FSYNC > 0 || _POSIX_SYNCHRONIZED_IO > 0\n    (void)aio_fsync(0, ai);\n#endif\n    (void)aio_read(ai);\n    (void)aio_return(ai);\n    (void)aio_suspend((const struct aiocb * const *)1234, 0, (struct timespec *)0);\n    (void)aio_write(ai);\n    (void)lio_listio(0, (struct aiocb * const *)1234, 0, (struct sigevent *)0);\n}\n\n#endif /* !__ANDROID__ */\n\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/arpa_inet.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <arpa/inet.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(arpa_inet_check_type_, __LINE__)\n\nCHECK(in_port_t);\nCHECK(in_addr_t);\nCHECK(struct in_addr);\n\nvoid arpa_inet_check_functions()\n{\n    uint16_t v16;\n    uint32_t v32;\n    struct in_addr inaddr = {0};\n\n    v16 = htons(0);\n    v16 = ntohs(0);\n    v32 = htonl(0);\n    v32 = ntohl(0);\n\n    (void)v16;\n    (void)v32;\n\n    (void)inet_addr(\"1.2.3.4\");\n    (void)inet_ntoa(inaddr);\n    (void)inet_ntop(0, (const void*)0, (char*)0, (socklen_t)0);\n    (void)inet_pton(0, (const char*)0, (void*)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/checkm.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n#include <sys/types.h>\n#include <stdint.h>\n#include <machine/_align.h>\n\n#include \"helper.h\"\n\n#ifndef _ALIGNBYTES\n#error  _ALIGNBYTES not defined\n#endif\n\n#ifndef _ALIGN\n#error  _ALIGN not defined\n#endif\n\n#ifndef __WORDSIZE\n#error  __WORDSIZE not defined\n#endif\n\n#if __LP64__\nCTASSERT(__WORDSIZE == 64);\n#else\nCTASSERT(__WORDSIZE == 32);\n#endif\n\n#if __LP64__\nCTASSERT(sizeof(register_t) == 8);\n#else\nCTASSERT(sizeof(register_t) == 4);\n#endif\n\n#if __LP64__\nCTASSERT(_ALIGNBYTES == 7);\n#else\nCTASSERT(_ALIGNBYTES == 3);\n#endif\n\n#if __LP64__\nCTASSERT(_ALIGN(0)   == 0);\nCTASSERT(_ALIGN(1)   == 8);\nCTASSERT(_ALIGN(2)   == 8);\nCTASSERT(_ALIGN(3)   == 8);\nCTASSERT(_ALIGN(4)   == 8);\nCTASSERT(_ALIGN(5)   == 8);\nCTASSERT(_ALIGN(9)   == 16);\nCTASSERT(_ALIGN(12)  == 16);\nCTASSERT(_ALIGN(13)  == 16);\n#else\nCTASSERT(_ALIGN(0)   == 0);\nCTASSERT(_ALIGN(1)   == 4);\nCTASSERT(_ALIGN(2)   == 4);\nCTASSERT(_ALIGN(3)   == 4);\nCTASSERT(_ALIGN(4)   == 4);\nCTASSERT(_ALIGN(5)   == 8);\nCTASSERT(_ALIGN(9)   == 12);\nCTASSERT(_ALIGN(12)  == 12);\nCTASSERT(_ALIGN(13)  == 16);\n#endif\n\n#endif /* __ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/complex.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <complex.h>\n\n#ifndef complex\n#error 'complex' not defined\n#endif\n\n#ifndef _Complex_I\n#error '_Complex_I' not defined\n#endif\n\n#ifndef I\n#error 'I' not defined\n#endif\n\n#ifdef _Imaginary_I\n#ifndef imaginary\n#error 'imaginary' not defined\n#endif\n#endif\n\nvoid check_complex_functions(float complex f, double complex d, long double complex ld)\n{\n    (void)cabs(d);\n    (void)cabsf(f);\n    (void)cabsl(ld);\n    (void)cacos(d);\n    (void)cacosf(f);\n    (void)cacosh(d);\n    (void)cacoshf(f);\n    (void)cacoshl(ld);\n    (void)cacosl(ld);\n    (void)carg(d);\n    (void)cargf(f);\n    (void)cargl(ld);\n    (void)casin(d);\n    (void)casinf(f);\n    (void)casinh(d);\n    (void)casinhf(f);\n    (void)casinhl(ld);\n    (void)casinl(ld);\n    (void)catan(d);\n    (void)catanf(f);\n    (void)catanh(d);\n    (void)catanhf(f);\n    (void)catanhl(ld);\n    (void)catanl(ld);\n    (void)ccos(d);\n    (void)ccosf(f);\n    (void)ccosh(d);\n    (void)ccoshf(f);\n    (void)ccoshl(ld);\n    (void)ccosl(ld);\n    (void)cexp(d);\n    (void)cexpf(f);\n    (void)cexpl(ld);\n    (void)cimag(d);\n    (void)cimagf(f);\n    (void)cimagl(ld);\n    (void)clog(d);\n    (void)clogf(f);\n    (void)clogl(ld);\n    (void)conj(d);\n    (void)conjf(f);\n    (void)conjl(ld);\n    (void)cpow(d, d);\n    (void)cpowf(f, f);\n    (void)cpowl(ld, ld);\n    (void)cproj(d);\n    (void)cprojf(f);\n    (void)cprojl(ld);\n    (void)creal(d);\n    (void)crealf(f);\n    (void)creall(ld);\n    (void)csin(d);\n    (void)csinf(f);\n    (void)csinh(d);\n    (void)csinhf(f);\n    (void)csinhl(ld);\n    (void)csinl(ld);\n    (void)csqrt(d);\n    (void)csqrtf(f);\n    (void)csqrtl(ld);\n    (void)ctan(d);\n    (void)ctanf(f);\n    (void)ctanh(d);\n    (void)ctanhf(f);\n    (void)ctanhl(ld);\n    (void)ctanl(ld);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/cpio.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n/* WARNING!!! Android doesn't include aio.h header */\n\n#else /* !__ANDROID__ */\n\n#include <cpio.h>\n\n#include \"gen/cpio.inc\"\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/ctype.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <ctype.h>\n#if __APPLE__ || __gnu_linux__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_CTYPE_H_XLOCALE_H_INCLUDED\n#error Extended locales support not enabled in ctype.h\n#endif\n#endif\n\n#ifdef __XSI_VISIBLE\n\n#ifndef _toupper\n#error _toupper not defined\n#endif\n\n#ifndef _tolower\n#error _tolower not defined\n#endif\n\n#endif /* __XSI_VISIBLE */\n\nvoid check_ctype_functions(locale_t l)\n{\n#ifdef __XSI_VISIBLE\n    (void)_toupper(0);\n    (void)_tolower(0);\n#endif\n\n#if __BSD_VISIBLE\n    (void)digittoint(0);\n    (void)digittoint_l(0, l);\n#endif\n\n    (void)isalnum(0);\n    (void)isalnum_l(0, l);\n    (void)isalpha(0);\n    (void)isalpha_l(0, l);\n#ifdef __XSI_VISIBLE\n    (void)isascii(0);\n#endif\n    (void)isblank(0);\n    (void)isblank_l(0, l);\n    (void)iscntrl(0);\n    (void)iscntrl_l(0, l);\n    (void)isdigit(0);\n    (void)isdigit_l(0, l);\n    (void)isgraph(0);\n    (void)isgraph_l(0, l);\n    (void)islower(0);\n    (void)islower_l(0, l);\n    (void)isprint(0);\n    (void)isprint_l(0, l);\n    (void)ispunct(0);\n    (void)ispunct_l(0, l);\n    (void)isspace(0);\n    (void)isspace_l(0, l);\n    (void)isupper(0);\n    (void)isupper_l(0, l);\n    (void)isxdigit(0);\n    (void)isxdigit_l(0, l);\n#ifdef __XSI_VISIBLE\n    (void)toascii(0);\n#endif\n    (void)tolower(0);\n    (void)tolower_l(0, l);\n    (void)toupper(0);\n    (void)toupper_l(0, l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/dirent.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <dirent.h>\n#if __linux__ && !__ANDROID__\n#include <sys/stat.h> /* for ino_t */\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(dirent_check_type_, __LINE__)\n\nCHECK(DIR*);\nCHECK(ino_t);\nCHECK(struct dirent);\n\nvoid dirent_check_dirent_fields()\n{\n    struct dirent d;\n\n#if __XSI_VISIBLE\n    d.d_ino = 0;\n#endif\n    d.d_name[0] = '\\0';\n\n    (void)d;\n}\n\n#if __APPLE__ && !defined(__MAC_10_8)\ntypedef int (*scandir_third_argument_t)(struct dirent *);\ntypedef int (*scandir_fourth_argument_t)(const void *, const void *);\n#else\ntypedef int (*scandir_third_argument_t)(const struct dirent *);\ntypedef int (*scandir_fourth_argument_t)(const struct dirent **, const struct dirent **);\n#endif\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nvoid seekdir(DIR *d, long l)\n{\n    (void)d;\n    (void)l;\n}\n\nlong telldir(DIR *d)\n{\n    (void)d;\n    return 0;\n}\n\n#endif /* __ANDROID__ */\n\nvoid dirent_check_functions()\n{\n    (void)alphasort((const struct dirent **)1234, (const struct dirent **)1234);\n    (void)closedir((DIR*)1234);\n    (void)dirfd((DIR*)1234);\n#if HAVE_FDOPENDIR\n    (void)fdopendir(0);\n#endif\n    (void)opendir(\"\");\n    (void)readdir((DIR*)1234);\n    (void)readdir_r((DIR*)1234, (struct dirent *)1234, (struct dirent **)1234);\n    (void)rewinddir((DIR*)1234);\n    (void)scandir((const char *)1234, (struct dirent ***)1234,\n            (scandir_third_argument_t)0, (scandir_fourth_argument_t)0);\n#if __XSI_VISIBLE\n    (void)seekdir((DIR*)0, 0);\n    (void)telldir((DIR*)0);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/dlfcn.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <dlfcn.h>\n\n#define CHECK(c) int dlfcn_check_constant_ ## c = c\n\nCHECK(RTLD_LAZY);\nCHECK(RTLD_NOW);\nCHECK(RTLD_GLOBAL);\nCHECK(RTLD_LOCAL);\n\nvoid dlfcn_check_functions()\n{\n    (void)dlclose((void*)1234);\n    (void)dlerror();\n    (void)dlopen(\"path\", 0);\n    (void)dlsym((void*)0, \"symbol\");\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/errno.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <errno.h>\n\n#include \"gen/errno.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/fcntl.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fcntl.h>\n\n#include \"helper.h\"\n\n#include \"gen/fcntl.inc\"\n\nmode_t check_mode_t_exists;\n\nstruct flock check_flock_exists_and_have_required_fields = {\n    .l_type   = 0,\n    .l_whence = 0,\n    .l_start  = 0,\n    .l_len    = 0,\n    .l_pid    = 0,\n};\n\nvoid fcntl_check_functions()\n{\n    (void)creat(\"path\", (mode_t)0);\n    (void)fcntl(0, 0, 0);\n    (void)open(\"path\", 0, 0);\n#if HAVE_XXXAT\n    (void)openat(0, \"path\", 0, 0);\n#endif\n#if _POSIX_ADVISORY_INFO > 0\n    (void)posix_fadvise(0, (off_t)0, (off_t)0, 0);\n    (void)posix_fallocate(0, (off_t)0, (off_t)0);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/fenv.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fenv.h>\n\n#include \"gen/fenv.inc\"\n\n#define CHECK(type) __CHECK(type)\n#define __CHECK(type) type fenv_check_type ## type\n\nCHECK(fenv_t);\nCHECK(fexcept_t);\n\nvoid fenv_check_functions()\n{\n#if !(__arm__ && __ARM_ARCH_5TE__)\n    (void)feclearexcept(0);\n    (void)fegetenv((fenv_t*)0);\n    (void)fegetexceptflag((fexcept_t*)0, 0);\n    (void)fegetround();\n    (void)feholdexcept((fenv_t*)0);\n    (void)feraiseexcept(0);\n    (void)fesetenv((const fenv_t*)0);\n    (void)fesetexceptflag((const fexcept_t*)0, 0);\n    (void)fesetround(0);\n    (void)fetestexcept(0);\n    (void)feupdateenv((const fenv_t*)0);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/float.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <float.h>\n\n#include \"gen/float.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/fmtmsg.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n/* WARNING!!! Android doesn't include aio.h header */\n\n#else /* !__ANDROID__ */\n\n#include <fmtmsg.h>\n\n#include \"gen/fmtmsg.inc\"\n\nvoid fmtmsg_check_functions()\n{\n    (void)fmtmsg((long)0, (const char*)0, (int)0, (const char *)0, (const char *)0, (const char *)0);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/fnmatch.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <fnmatch.h>\n\n#include \"gen/fnmatch.inc\"\n\nvoid fnmatch_check_functions()\n{\n    (void)fnmatch((const char *)0, (const char *)0, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/ftw.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n#include <android/api-level.h>\n#endif\n\n#if !__ANDROID__ || __ANDROID_API__ >= 21\n\n#include <ftw.h>\n\n#include \"gen/ftw.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(ftw_check_type_, __LINE__)\n\nCHECK(struct FTW);\n\nvoid ftw_check_FTW_fields(struct FTW *s)\n{\n    s->base  = 0;\n    s->level = 0;\n}\n\nvoid ftw_check_functions()\n{\n    typedef int (*ftw_cb_t)(const char *, const struct stat *, int);\n    typedef int (*nftw_cb_t)(const char *, const struct stat *, int, struct FTW *);\n\n    (void)ftw((const char*)1234, (ftw_cb_t)1234, 0);\n    (void)nftw((const char*)1234, (nftw_cb_t)1234, 0, 0);\n}\n\n#endif /* !__ANDROID__ || __ANDROID_API__ >= 21 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/glob.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n/* WARNING!!! Android doesn't include aio.h header */\n\n#else /* !__ANDROID__ */\n\n#include <glob.h>\n\n#include \"gen/glob.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(glob_check_type_, __LINE__)\n\nCHECK(glob_t);\nCHECK(size_t);\n\nvoid glob_check_glob_t_fields(glob_t *s)\n{\n    s->gl_pathc = (size_t)0;\n    s->gl_pathv = (char**)0;\n    s->gl_offs  = (size_t)0;\n}\n\nvoid glob_check_functions()\n{\n    typedef int(*glob_cb_t)(const char *, int);\n    (void)glob((const char *)0, 0, (glob_cb_t)0, (glob_t*)0);\n    (void)globfree((glob_t*)0);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/grp.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <grp.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(grp_check_type_, __LINE__)\n\nCHECK(gid_t);\nCHECK(size_t);\nCHECK(struct group);\n\nstruct group grp_check_fields = {\n    .gr_name = (char*)0,\n    .gr_gid  = (gid_t)0,\n    .gr_mem  = (char**)0,\n};\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nvoid endgrent()\n{}\n\nstruct group *getgrent()\n{\n    return (struct group *)0;\n}\n\nvoid setgrent()\n{}\n\nint getgrgid_r(gid_t gid, struct group *grp,\n               char *buf, size_t buflen, struct group **result)\n{\n    (void)gid;\n    (void)grp;\n    (void)buf;\n    (void)buflen;\n    (void)result;\n    return -1;\n}\n\nint getgrnam_r(const char *name, struct group *grp,\n               char *buf, size_t buflen, struct group **result)\n{\n    (void)name;\n    (void)grp;\n    (void)buf;\n    (void)buflen;\n    (void)result;\n    return -1;\n}\n\n#endif /* __ANDROID__ */\n\nvoid grp_check_functions()\n{\n#if __XSI_VISIBLE\n    (void)endgrent();\n    (void)getgrent();\n#endif\n    (void)getgrgid((gid_t)0);\n    (void)getgrgid_r((gid_t)0, (struct group *)0, (char*)0, (size_t)0, (struct group **)0);\n    (void)getgrnam(\"\");\n    (void)getgrnam_r(\"\", (struct group *)0, (char*)0, (size_t)0, (struct group **)0);\n#if __XSI_VISIBLE\n    (void)setgrent();\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/helper.h",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#ifndef HELPER_H_B651062A7EBF4491BF85BD3496AC6309\n#define HELPER_H_B651062A7EBF4491BF85BD3496AC6309\n\n#if __APPLE__\n#include <Availability.h>\n#include <AvailabilityMacros.h>\n#endif\n\n#if __APPLE__ && MAC_OS_X_VERSION_MIN_REQUIRED < 101000\n#define HAVE_XXXAT 0\n#define HAVE_FDOPENDIR 0\n#else\n#define HAVE_XXXAT 1\n#define HAVE_FDOPENDIR 1\n#endif\n\n#define JOIN(x, y) __JOIN(x, y)\n#define __JOIN(x, y) x ## y\n\n#define CTASSERT(x) __CRYSTAX_STATIC_ASSERT(x, #x \": failed\")\n\n#endif /* HELPER_H_B651062A7EBF4491BF85BD3496AC6309 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/iconv.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <iconv.h>\n\n#define CHECK(type) type iconv_check_type_ ## type\n\nCHECK(iconv_t);\nCHECK(size_t);\n\nvoid iconv_check_functions()\n{\n    iconv_t c;\n    char *s;\n    size_t slen;\n    char *d;\n    size_t dlen;\n\n    c = iconv_open(\"one\", \"two\");\n    (void)iconv(c, &s, &slen, &d, &dlen);\n    (void)iconv_close(c);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/inttypes.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <inttypes.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n#if __gnu_linux__\n#include <wchar.h> /* for wchar_t */\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_INTTYPES_H_XLOCALE_H_INCLUDED\n#error Extended locales support not enabled in inttypes.h\n#endif\n#if !__LIBCRYSTAX_STDINT_H_INCLUDED\n#error stdint.h not included in inttypes.h\n#endif /* !__CRYSTAX_STDINT_H_INCLUDED */\n#endif /* __ANDROID__ */\n\n#include \"gen/inttypes.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(var_inttypes_, __LINE__)\n\nCHECK(intmax_t);\nCHECK(uintmax_t);\nCHECK(imaxdiv_t);\nCHECK(wchar_t);\nCHECK(locale_t);\n\nvoid check_inttypes_functions(\n#if __APPLE__ || __ANDROID__\n        locale_t l\n#endif\n        )\n{\n    (void)imaxabs((intmax_t)0);\n    (void)imaxdiv((intmax_t)0, (intmax_t)0);\n    (void)strtoimax((const char *)1234, (char **)1234, 10);\n    (void)strtoumax((const char *)1234, (char **)1234, 10);\n    (void)wcstoimax((const wchar_t *)1234, (wchar_t **)1234, 10);\n    (void)wcstoumax((const wchar_t *)1234, (wchar_t **)1234, 10);\n#if __APPLE__ || __ANDROID__\n    (void)strtoimax_l((const char *)1234, (char**)1234, 10, l);\n    (void)strtoumax_l((const char *)1234, (char**)1234, 10, l);\n    (void)wcstoimax_l((const wchar_t *)1234, (wchar_t **)1234, 10, l);\n    (void)wcstoumax_l((const wchar_t *)1234, (wchar_t **)1234, 10, l);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/iso646.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <iso646.h>\n\n#include \"gen/iso646.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/langinfo.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <langinfo.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_LANGINFO_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in langinfo.h\n#endif\n#endif\n\n#include \"gen/langinfo.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(langinfo_check_type_, __LINE__)\n\nCHECK(locale_t);\nCHECK(nl_item);\n\nvoid check_langinfo_functions(nl_item ni, locale_t l)\n{\n    (void)nl_langinfo(ni);\n    (void)nl_langinfo_l(ni, l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/libgen.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <libgen.h>\n\nvoid libgen_check_functions()\n{\n    (void)basename((char*)0);\n    (void)dirname((char*)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/limits.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <limits.h>\n\n#include \"gen/limits.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/locale.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <locale.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_LOCALE_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in locale.h\n#endif\n#endif\n\n#include \"gen/locale.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(locale_check_type_, __LINE__)\n\nCHECK(locale_t);\n\n/* Check if mandatory fields are present */\nstruct lconv lcv = {\n    .currency_symbol    = NULL,\n    .decimal_point      = NULL,\n    .frac_digits        = '\\0',\n    .grouping           = NULL,\n    .int_curr_symbol    = NULL,\n    .int_frac_digits    = '\\0',\n    .int_n_cs_precedes  = '\\0',\n    .int_n_sep_by_space = '\\0',\n    .int_n_sign_posn    = '\\0',\n    .int_p_cs_precedes  = '\\0',\n    .int_p_sep_by_space = '\\0',\n    .int_p_sign_posn    = '\\0',\n    .mon_decimal_point  = NULL,\n    .mon_grouping       = NULL,\n    .mon_thousands_sep  = NULL,\n    .negative_sign      = NULL,\n    .n_cs_precedes      = '\\0',\n    .n_sep_by_space     = '\\0',\n    .n_sign_posn        = '\\0',\n    .positive_sign      = NULL,\n    .p_cs_precedes      = '\\0',\n    .p_sep_by_space     = '\\0',\n    .p_sign_posn        = '\\0',\n    .thousands_sep      = NULL,\n};\n\nvoid locale_check_functions(locale_t l)\n{\n    (void)duplocale(l);\n    (void)freelocale(l);\n    (void)localeconv();\n    (void)newlocale(0, \"C\", l);\n    (void)setlocale(0, \"C\");\n    (void)uselocale(l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/main.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/math.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <math.h>\n\n#include \"gen/math.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(math_var_, __LINE__)\n\nCHECK(float_t);\nCHECK(double_t);\n\n/* Check is signgam is defined */\nvoid check_signgam()\n{\n    int check_signgam_defined = signgam;\n    (void)check_signgam_defined;\n    int *check_signgam_is_variable = &signgam;\n    (void)check_signgam_is_variable;\n}\n\n#if defined(FLT_EVAL_METHOD)\n\n#if FLT_EVAL_METHOD == 0\nCTASSERT(sizeof(float_t)  == sizeof(float));\nCTASSERT(sizeof(double_t) == sizeof(double));\n#elif FLT_EVAL_METHOD == 1\nCTASSERT(sizeof(float_t)  == sizeof(double));\nCTASSERT(sizeof(double_t) == sizeof(double));\n#elif FLT_EVAL_METHOD == 2\nCTASSERT(sizeof(float_t)  == sizeof(long double));\nCTASSERT(sizeof(double_t) == sizeof(long double));\n#endif\n\n#endif /* defined(FLT_EVAL_METHOD) */\n\n#define Z 0.0\n\nvoid check_math_functions()\n{\n    (void)acos(Z);\n    (void)acosf(Z);\n    (void)acosh(Z);\n    (void)acoshf(Z);\n    (void)acoshl(Z);\n    (void)acosl(Z);\n    (void)asin(Z);\n    (void)asinf(Z);\n    (void)asinh(Z);\n    (void)asinhf(Z);\n    (void)asinhl(Z);\n    (void)asinl(Z);\n    (void)atan(Z);\n    (void)atan2(Z, Z);\n    (void)atan2f(Z, Z);\n    (void)atan2l(Z, Z);\n    (void)atanf(Z);\n    (void)atanh(Z);\n    (void)atanhf(Z);\n    (void)atanhl(Z);\n    (void)atanl(Z);\n    (void)cbrt(Z);\n    (void)cbrtf(Z);\n    (void)cbrtl(Z);\n    (void)ceil(Z);\n    (void)ceilf(Z);\n    (void)ceill(Z);\n    (void)copysign(Z, Z);\n    (void)copysignf(Z, Z);\n    (void)copysignl(Z, Z);\n    (void)cos(Z);\n    (void)cosf(Z);\n    (void)cosh(Z);\n    (void)coshf(Z);\n    (void)coshl(Z);\n    (void)cosl(Z);\n    (void)erf(Z);\n    (void)erfc(Z);\n    (void)erfcf(Z);\n    (void)erfcl(Z);\n    (void)erff(Z);\n    (void)erfl(Z);\n    (void)exp(Z);\n    (void)exp2(Z);\n    (void)exp2f(Z);\n    (void)exp2l(Z);\n    (void)expf(Z);\n    (void)expl(Z);\n    (void)expm1(Z);\n    (void)expm1f(Z);\n    (void)expm1l(Z);\n    (void)fabs(Z);\n    (void)fabsf(0.0f);\n    (void)fabsl(Z);\n    (void)fdim(Z, Z);\n    (void)fdimf(Z, Z);\n    (void)fdiml(Z, Z);\n    (void)floor(Z);\n    (void)floorf(Z);\n    (void)floorl(Z);\n    (void)fma(Z, Z, Z);\n    (void)fmaf(Z, Z, Z);\n    (void)fmal(Z, Z, Z);\n    (void)fmax(Z, Z);\n    (void)fmaxf(Z, Z);\n    (void)fmaxl(Z, Z);\n    (void)fmin(Z, Z);\n    (void)fminf(Z, Z);\n    (void)fminl(Z, Z);\n    (void)fmod(Z, Z);\n    (void)fmodf(Z, Z);\n    (void)fmodl(Z, Z);\n    (void)frexp(Z, (int*)0);\n    (void)frexpf(Z, (int*)0);\n    (void)frexpl(Z, (int*)0);\n    (void)hypot(Z, Z);\n    (void)hypotf(Z, Z);\n    (void)hypotl(Z, Z);\n    (void)ilogb(Z);\n    (void)ilogbf(Z);\n    (void)ilogbl(Z);\n#if __XSI_VISIBLE\n    (void)j0(Z);\n    (void)j1(Z);\n    (void)jn(0, Z);\n#endif\n    (void)ldexp(Z, 0);\n    (void)ldexpf(Z, 0);\n    (void)ldexpl(Z, 0);\n    (void)lgamma(Z);\n    (void)lgammaf(Z);\n    (void)lgammal(Z);\n    (void)llrint(Z);\n    (void)llrintf(Z);\n    (void)llrintl(Z);\n    (void)llround(Z);\n    (void)llroundf(Z);\n    (void)llroundl(Z);\n    (void)log(Z);\n    (void)log10(Z);\n    (void)log10f(Z);\n    (void)log10l(Z);\n    (void)log1p(Z);\n    (void)log1pf(Z);\n    (void)log1pl(Z);\n    (void)log2(Z);\n    (void)log2f(Z);\n    (void)log2l(Z);\n    (void)logb(Z);\n    (void)logbf(Z);\n    (void)logbl(Z);\n    (void)logf(Z);\n    (void)logl(Z);\n    (void)lrint(Z);\n    (void)lrintf(Z);\n    (void)lrintl(Z);\n    (void)lround(Z);\n    (void)lroundf(Z);\n    (void)lroundl(Z);\n    (void)modf(Z, (double *)0);\n    (void)modff(Z, (float *)0);\n    (void)modfl(Z, (long double *)0);\n    (void)nan(\"1\");\n    (void)nanf(\"1\");\n    (void)nanl(\"1\");\n    (void)nearbyint(Z);\n    (void)nearbyintf(Z);\n    (void)nearbyintl(Z);\n    (void)nextafter(Z, Z);\n    (void)nextafterf(Z, Z);\n    (void)nextafterl(Z, Z);\n    (void)nexttoward(Z, Z);\n    (void)nexttowardf(Z, Z);\n    (void)nexttowardl(Z, Z);\n    (void)pow(Z, Z);\n    (void)powf(Z, Z);\n    (void)powl(Z, Z);\n    (void)remainder(Z, Z);\n    (void)remainderf(Z, Z);\n    (void)remainderl(Z, Z);\n    (void)remquo(Z, Z, (int*)0);\n    (void)remquof(Z, Z, (int*)0);\n    (void)remquol(Z, Z, (int*)0);\n    (void)rint(Z);\n    (void)rintf(Z);\n    (void)rintl(Z);\n    (void)round(Z);\n    (void)roundf(Z);\n    (void)roundl(Z);\n#if __XSI_VISIBLE\n    (void)scalb(Z, Z);\n#endif\n    (void)scalbln(Z, 0);\n    (void)scalblnf(Z, 0);\n    (void)scalblnl(Z, 0);\n    (void)scalbn(Z, 0);\n    (void)scalbnf(Z, 0);\n    (void)scalbnl(Z, 0);\n    (void)sin(Z);\n    (void)sinf(Z);\n    (void)sinh(Z);\n    (void)sinhf(Z);\n    (void)sinhl(Z);\n    (void)sinl(Z);\n    (void)sqrt(Z);\n    (void)sqrtf(Z);\n    (void)sqrtl(Z);\n    (void)tan(Z);\n    (void)tanf(Z);\n    (void)tanh(Z);\n    (void)tanhf(Z);\n    (void)tanhl(Z);\n    (void)tanl(Z);\n    (void)tgamma(Z);\n    (void)tgammaf(Z);\n    (void)tgammal(Z);\n    (void)trunc(Z);\n    (void)truncf(Z);\n    (void)truncl(Z);\n#if __XSI_VISIBLE\n    (void)y0(Z);\n    (void)y1(Z);\n    (void)yn(0, Z);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/monetary.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <monetary.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_MONETARY_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in monetary.h\n#endif\n#endif\n\n#define CHECK(type) type monetary_check_type_ ## type\n\nCHECK(locale_t);\nCHECK(size_t);\nCHECK(ssize_t);\n\nvoid monetary_check_functions(locale_t l)\n{\n    (void)strfmon((char *)0, (size_t)0, \"%n\", 1.0);\n    (void)strfmon_l((char*)0, (size_t)0, l, \"%n\", 1.0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/mqueue.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if _POSIX_MESSAGE_PASSING > 0\n\n#include <mqueue.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(mqueue_check_type_, __LINE__)\n\nCHECK(mqd_t);\nCHECK(pthread_attr_t);\nCHECK(size_t);\nCHECK(ssize_t);\nCHECK(struct timespec);\nCHECK(struct sigevent *);\nCHECK(struct mq_attr);\n\nvoid mqueue_check_mq_attr_fields(struct mq_attr *s)\n{\n    s->mq_flags   = 0;\n    s->mq_maxmsg  = 0;\n    s->mq_msgsize = 0;\n    s->mq_curmsgs = 0;\n}\n\nvoid mqueue_check_functions(mqd_t m)\n{\n    (void)mq_close(m);\n    (void)mq_getattr(m, (struct mq_attr *)0);\n    (void)mq_notify(m, (const struct sigevent *)0);\n    (void)mq_open((const char *)0, 0, 0);\n    (void)mq_receive(m, (char*)0, (size_t)0, (unsigned*)0);\n    (void)mq_send(m, (const char *)0, (size_t)0, (unsigned)0);\n    (void)mq_setattr(m, (const struct mq_attr *)0, (struct mq_attr *)0);\n    (void)mq_timedreceive(m, (char*)0, (size_t)0, (unsigned*)0, (const struct timespec*)0);\n    (void)mq_timedsend(m, (const char *)0, (size_t)0, (unsigned)0, (const struct timespec*)0);\n    (void)mq_unlink((const char *)0);\n}\n\n#endif /* _POSIX_MESSAGE_PASSING > 0 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/ndbm.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n\n/* WARNING!!! Android doesn't include ndbm.h header */\n\n#elif __gnu_linux__\n\n/* GNU linux doesn't include it too */\n\n#else\n\n#include <ndbm.h>\n\n#ifndef DBM_INSERT\n#error 'DBM_INSERT' not defined\n#endif\n\n#ifndef DBM_REPLACE\n#error 'DBM_REPLACE' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(ndbm_check_type_, __LINE__)\n\nCHECK(datum);\nCHECK(size_t);\nCHECK(DBM);\n\nvoid ndbm_check_datum_fields(datum *s)\n{\n    s->dptr  = (void*)0;\n    s->dsize = (size_t)0;\n}\n\nvoid ndbm_check_functions(DBM *d, datum dt)\n{\n    (void)dbm_clearerr(d);\n    (void)dbm_close(d);\n    (void)dbm_delete(d, dt);\n    (void)dbm_error(d);\n    (void)dbm_fetch(d, dt);\n    (void)dbm_firstkey(d);\n    (void)dbm_nextkey(d);\n    (void)dbm_open((const char *)0, 0, (mode_t)0);\n    (void)dbm_store(d, dt, dt, 0);\n}\n\n#endif\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/net_if.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __APPLE__\n#include <sys/socket.h>\n#endif\n\n#include <net/if.h>\n\n#ifndef IF_NAMESIZE\n#error  'IF_NAMESIZE' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(net_if_check_type_, __LINE__)\n\n#if __ANDROID__\n/* WARNING!!! These functions are not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nstruct if_nameindex\n{\n    unsigned if_index;\n    char *   if_name;\n};\n\nvoid if_freenameindex(struct if_nameindex *s)\n{\n    (void)s;\n}\n\nstruct if_nameindex *if_nameindex()\n{\n    return (struct if_nameindex *)0;\n}\n#endif\n\nCHECK(struct if_nameindex);\n\nvoid net_if_check_if_nameindex_fields(struct if_nameindex *s)\n{\n    s->if_index = 0;\n    s->if_name  = (char*)0;\n}\n\nvoid net_if_check_functions(struct if_nameindex *s)\n{\n    (void)if_freenameindex(s);\n    (void)if_indextoname((unsigned)0, (char*)0);\n    (void)if_nameindex();\n    (void)if_nametoindex((const char *)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/netdb.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <netdb.h>\n\n#include \"gen/netdb.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(netdb_check_type_, __LINE__)\n\nCHECK(struct hostent);\nCHECK(struct netent);\nCHECK(uint32_t);\nCHECK(struct protoent);\nCHECK(struct servent);\nCHECK(struct addrinfo);\nCHECK(socklen_t);\n\nvoid netdb_check_hostent_fields(struct hostent *s)\n{\n    s->h_name      = (char*)0;\n    s->h_aliases   = (char**)0;\n    s->h_addrtype  = 0;\n    s->h_length    = 0;\n    s->h_addr_list = (char**)0;\n}\n\nvoid netdb_check_netent_fields(struct netent *s)\n{\n    s->n_name     = (char*)0;\n    s->n_aliases  = (char**)0;\n    s->n_addrtype = 0;\n    s->n_net      = (uint32_t)0;\n}\n\nvoid netdb_check_protoent_fields(struct protoent *s)\n{\n    s->p_name    = (char*)0;\n    s->p_aliases = (char**)0;\n    s->p_proto   = 0;\n}\n\nvoid netdb_check_servent_fields(struct servent *s)\n{\n    s->s_name    = (char*)0;\n    s->s_aliases = (char**)0;\n    s->s_port    = 0;\n    s->s_proto   = (char*)0;\n}\n\nvoid netdb_check_addrinfo_fields(struct addrinfo *s)\n{\n    s->ai_flags     = 0;\n    s->ai_family    = 0;\n    s->ai_socktype  = 0;\n    s->ai_protocol  = 0;\n    s->ai_addrlen   = (socklen_t)0;\n    s->ai_addr      = (struct sockaddr *)0;\n    s->ai_canonname = (char*)0;\n    s->ai_next      = (struct addrinfo *)0;\n}\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nvoid endhostent()\n{}\n\nvoid endnetent()\n{}\n\nvoid endprotoent()\n{}\n\nstruct netent *getnetent()\n{\n    return (struct netent *)0;\n}\n\nstruct protoent *getprotoent()\n{\n    return (struct protoent *)0;\n}\n\nvoid sethostent(int e)\n{\n    (void)e;\n}\n\nvoid setnetent(int e)\n{\n    (void)e;\n}\n\nvoid setprotoent(int e)\n{\n    (void)e;\n}\n\n#endif /* __ANDROID__ */\n\nvoid netdb_check_functions()\n{\n    (void)endhostent();\n    (void)endnetent();\n    (void)endprotoent();\n    (void)endservent();\n    (void)freeaddrinfo((struct addrinfo *)0);\n    (void)gai_strerror(0);\n    (void)getaddrinfo((const char *)0, (const char *)0, (const struct addrinfo *)0, (struct addrinfo **)0);\n    (void)gethostent();\n    (void)getnameinfo((const struct sockaddr *)0, (socklen_t)0, (char*)0, (socklen_t)0, (char*)0, (socklen_t)0, 0);\n    (void)getnetbyaddr((uint32_t)0, 0);\n    (void)getnetbyname((const char *)0);\n    (void)getnetent();\n    (void)getprotobyname((const char *)0);\n    (void)getprotobynumber(0);\n    (void)getprotoent();\n    (void)getservbyname((const char *)0, (const char *)0);\n    (void)getservbyport(0, (const char *)0);\n    (void)getservent();\n    (void)sethostent(0);\n    (void)setnetent(0);\n    (void)setprotoent(0);\n    (void)setservent(0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/netinet_in.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <netinet/in.h>\n\n#include \"gen/netinet_in.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(netinet_in_check_type_, __LINE__)\n\nCHECK(in_port_t);\nCHECK(in_addr_t);\nCHECK(sa_family_t);\nCHECK(uint8_t);\nCHECK(uint32_t);\nCHECK(struct in_addr);\nCHECK(struct sockaddr_in);\n\n#if _POSIX_IPV6 > 0\nCHECK(struct in6_addr);\nCHECK(struct sockaddr_in6);\nCHECK(struct ipv6_mreq);\n\n/* Check external variables */\nconst struct in6_addr *p1 = &in6addr_any;\nconst struct in6_addr *p2 = &in6addr_loopback;\n#endif /* _POSIX_IPV6 > 0 */\n\n#undef CHECK\n#define CHECK(name) void netinet_in_check_ ## name ## _fields(struct name *s)\n\nCHECK(in_addr)\n{\n    s->s_addr = (in_addr_t)0;\n}\n\nCHECK(sockaddr_in)\n{\n    s->sin_family = (sa_family_t)0;\n    s->sin_port = (in_port_t)0;\n    netinet_in_check_in_addr_fields(&s->sin_addr);\n}\n\n#if _POSIX_IPV6 > 0\n\nCHECK(in6_addr)\n{\n    s->s6_addr[0] = (uint8_t)0;\n    CTASSERT(sizeof(s->s6_addr) == 16);\n}\n\nCHECK(sockaddr_in6)\n{\n    s->sin6_family = (sa_family_t)0;\n    s->sin6_port = (in_port_t)0;\n    s->sin6_flowinfo = (uint32_t)0;\n    netinet_in_check_in6_addr_fields(&s->sin6_addr);\n    s->sin6_scope_id = (uint32_t)0;\n}\n\nCHECK(ipv6_mreq)\n{\n    netinet_in_check_in6_addr_fields(&s->ipv6mr_multiaddr);\n    s->ipv6mr_interface = 0;\n}\n\n#endif /* _POSIX_IPV6 > 0 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/netinet_tcp.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <netinet/tcp.h>\n\n#ifndef TCP_NODELAY\n#error 'TCP_NODELAY' not defined\n#endif\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/nl_types.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <nl_types.h>\n\n#ifndef NL_SETD\n#error 'NL_SETD' not defined\n#endif\n\n#ifndef NL_CAT_LOCALE\n#error 'NL_CAT_LOCALE' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(VAR_, __LINE__)\n\nCHECK(nl_catd);\nCHECK(nl_item);\n\nvoid check_nl_types_functions(nl_catd d)\n{\n    (void)catclose(d);\n    (void)catgets(d, 0, 0, (const char *)0);\n    (void)catopen((const char *)1234, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/poll.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <poll.h>\n\n#include \"gen/poll.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(poll_check_type_, __LINE__)\n\nCHECK(struct pollfd);\nCHECK(nfds_t);\n\nvoid poll_check_pollfd_fields(struct pollfd *s)\n{\n    s->fd      = 0;\n    s->events  = (short)0;\n    s->revents = (short)0;\n}\n\nvoid poll_check_functions()\n{\n    (void)poll((struct pollfd *)0, (nfds_t)0, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/pthread.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pthread.h>\n\n#if __ANDROID__\n#include <android/api-level.h>\n#endif\n\n/* We don't support Android API level < 9 */\n#if !__ANDROID__ || __ANDROID_API__ >= 9\n\n#include \"gen/pthread.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(pthread_check_type_, type);\n\nCHECK(pthread_attr_t);\n#if _POSIX_BARRIERS > 0\nCHECK(pthread_barrier_t);\nCHECK(pthread_barrierattr_t);\n#endif\nCHECK(pthread_cond_t);\nCHECK(pthread_condattr_t);\nCHECK(pthread_key_t);\nCHECK(pthread_mutex_t);\nCHECK(pthread_mutexattr_t);\nCHECK(pthread_once_t);\nCHECK(pthread_rwlock_t);\nCHECK(pthread_rwlockattr_t);\n#if _POSIX_SPIN_LOCKS > 0\nCHECK(pthread_spinlock_t);\n#endif\nCHECK(pthread_t);\n\n#ifndef pthread_cleanup_push\n#error pthread_cleanup_push not defined\n#endif\n\n#ifndef pthread_cleanup_pop\n#error pthread_cleanup_pop not defined\n#endif\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nint pthread_atfork(void (*f1)(void), void (*f2)(void), void(*f3)(void))\n{\n    (void)f1;\n    (void)f2;\n    (void)f3;\n    return 1234;\n}\n\nint pthread_attr_getinheritsched(const pthread_attr_t *a, int *p)\n{\n    (void)a;\n    (void)p;\n    return 1234;\n}\n\nint pthread_attr_setinheritsched(pthread_attr_t *a, int p)\n{\n    (void)a;\n    (void)p;\n    return 1234;\n}\n\n#if __ANDROID_API__ < 21\nint pthread_condattr_getclock(const pthread_condattr_t *a, clockid_t *t)\n{\n    (void)a;\n    (void)t;\n    return 1234;\n}\n\nint pthread_condattr_setclock(pthread_condattr_t *a, clockid_t t)\n{\n    (void)a;\n    (void)t;\n    return 1234;\n}\n#endif /* __ANDROID_API__ < 21 */\n\nint pthread_cancel(pthread_t tid)\n{\n    (void)tid;\n    return 1234;\n}\n\nint pthread_setcancelstate(int state, int *oldstate)\n{\n    (void)state;\n    (void)oldstate;\n    return 1234;\n}\n\nint pthread_setcanceltype(int type, int *oldtype)\n{\n    (void)type;\n    (void)oldtype;\n    return 1234;\n}\n\nvoid pthread_testcancel()\n{\n}\n\nint pthread_mutex_getprioceiling(const pthread_mutex_t *m, int *p)\n{\n    (void)m;\n    (void)p;\n    return 1234;\n}\n\nint pthread_mutex_setprioceiling(pthread_mutex_t *m, int c, int *p)\n{\n    (void)m;\n    (void)c;\n    (void)p;\n    return 1234;\n}\n\nint pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *a, int *p)\n{\n    (void)a;\n    (void)p;\n    return 1234;\n}\n\nint pthread_mutexattr_setprioceiling(pthread_mutexattr_t *a, int c)\n{\n    (void)a;\n    (void)c;\n    return 1234;\n}\n\nint pthread_mutexattr_getprotocol(const pthread_mutexattr_t *a, int *p)\n{\n    (void)a;\n    (void)p;\n    return 1234;\n}\n\nint pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int c)\n{\n    (void)a;\n    (void)c;\n    return 1234;\n}\n\nint pthread_setschedprio(pthread_t t, int p)\n{\n    (void)t;\n    (void)p;\n    return 1234;\n}\n\n#endif /* __ANDROID__ */\n\nvoid *pthread_new_thread(void *arg)\n{\n    return arg;\n}\n\nvoid pthread_once_action()\n{\n}\n\nvoid pthread_check_functions()\n{\n    pthread_t tid;\n    pthread_attr_t attr;\n    int state;\n    struct sched_param sched_param_value;\n    pthread_cond_t cond;\n    pthread_condattr_t cattr;\n    pthread_mutex_t mtx;\n    pthread_mutexattr_t mattr;\n    struct timespec ts;\n    pthread_key_t key;\n    pthread_once_t once;\n    pthread_rwlock_t rwlock;\n    pthread_rwlockattr_t rwattr;\n\n#if _POSIX_BARRIERS > 0\n    pthread_barrier_t barr;\n    pthread_barrierattr_t battr;\n#endif\n\n#if _POSIX_CLOCK_SELECTION > 0\n    clockid_t clockid;\n#endif\n\n#if _POSIX_SPIN_LOCKS > 0\n    pthread_spinlock_t spin;\n#endif\n\n    tid = pthread_self();\n    (void)tid;\n\n    (void)pthread_atfork(NULL, NULL, NULL);\n    (void)pthread_attr_destroy(&attr);\n    (void)pthread_attr_getdetachstate(&attr, &state);\n#if __XSI_VISIBLE\n    (void)pthread_attr_getguardsize(&attr, (size_t*)1234);\n#endif\n#if _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)pthread_attr_getinheritsched(&attr, (int*)1234);\n#endif\n    (void)pthread_attr_getschedparam(&attr, &sched_param_value);\n#if _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)pthread_attr_getschedpolicy(&attr, (int*)1234);\n    (void)pthread_attr_getscope(&attr, (int*)1234);\n#endif\n#if _POSIX_THREAD_ATTR_STACKADDR > 0 || _POSIX_THREAD_ATTR_STACKSIZE > 0\n    (void)pthread_attr_getstack(&attr, (void**)1234, (size_t*)1234);\n#endif\n#if _POSIX_THREAD_ATTR_STACKSIZE > 0\n    (void)pthread_attr_getstacksize(&attr, (size_t*)1234);\n#endif\n    (void)pthread_attr_init(&attr);\n    (void)pthread_attr_setdetachstate(&attr, 0);\n#if __XSI_VISIBLE\n    (void)pthread_attr_setguardsize(&attr, 0);\n#endif\n#if _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)pthread_attr_setinheritsched(&attr, 0);\n#endif\n    (void)pthread_attr_setschedparam(&attr, &sched_param_value);\n#if _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)pthread_attr_setschedpolicy(&attr, 0);\n    (void)pthread_attr_setscope(&attr, 0);\n#endif\n#if _POSIX_THREAD_ATTR_STACKADDR > 0 || _POSIX_THREAD_ATTR_STACKSIZE > 0\n    (void)pthread_attr_setstack(&attr, (void*)1234, (size_t)1234);\n#endif\n#if _POSIX_THREAD_ATTR_STACKSIZE > 0\n    (void)pthread_attr_setstacksize(&attr, (size_t)1234);\n#endif\n#if _POSIX_BARRIERS > 0\n    (void)pthread_barrier_destroy(&barr);\n    (void)pthread_barrier_init(&barr, &battr, 0);\n    (void)pthread_barrier_wait(&barr);\n    (void)pthread_barrierattr_destroy(&battr);\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_barrierattr_getpshared(&battr, NULL);\n#endif\n    (void)pthread_barrierattr_init(&battr);\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_barrierattr_setpshared(&battr, 0);\n#endif\n#endif /* _POSIX_BARRIERS > 0 */\n    (void)pthread_cancel(tid);\n    (void)pthread_cond_broadcast(&cond);\n    (void)pthread_cond_destroy(&cond);\n    (void)pthread_cond_init(&cond, &cattr);\n    (void)pthread_cond_signal(&cond);\n    (void)pthread_cond_timedwait(&cond, &mtx, &ts);\n    (void)pthread_cond_wait(&cond, &mtx);\n    (void)pthread_condattr_destroy(&cattr);\n#if _POSIX_CLOCK_SELECTION > 0\n    (void)pthread_condattr_getclock(&cattr, &clockid);\n#endif\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_condattr_getpshared(&cattr, NULL);\n#endif\n    (void)pthread_condattr_init(&cattr);\n#if _POSIX_CLOCK_SELECTION > 0\n    (void)pthread_condattr_setclock(&cattr, clockid);\n#endif\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_condattr_setpshared(&cattr, 0);\n#endif\n    (void)pthread_create(&tid, &attr, pthread_new_thread, NULL);\n    (void)pthread_detach(tid);\n    (void)pthread_equal(tid, tid);\n    (void)pthread_exit(NULL);\n#if _POSIX_THREAD_CPUTIME > 0\n    (void)pthread_getcpuclockid(tid, &clockid);\n#endif\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_getschedparam(tid, (int*)123456, &sched_param_value);\n#endif\n    (void)pthread_getspecific(key);\n    (void)pthread_join(tid, NULL);\n    (void)pthread_key_create(&key, NULL);\n    (void)pthread_key_delete(key);\n    (void)pthread_mutex_destroy(&mtx);\n#if _POSIX_THREAD_PRIO_PROTECT > 0\n    (void)pthread_mutex_getprioceiling(&mtx, NULL);\n#endif\n    (void)pthread_mutex_init(&mtx, &mattr);\n    (void)pthread_mutex_lock(&mtx);\n#if _POSIX_THREAD_PRIO_PROTECT > 0\n    (void)pthread_mutex_setprioceiling(&mtx, 0, NULL);\n#endif\n#if _POSIX_TIMEOUTS > 0\n    (void)pthread_mutex_timedlock(&mtx, &ts);\n#endif\n    (void)pthread_mutex_trylock(&mtx);\n    (void)pthread_mutex_unlock(&mtx);\n    (void)pthread_mutexattr_destroy(&mattr);\n#if _POSIX_THREAD_PRIO_PROTECT > 0\n    (void)pthread_mutexattr_getprioceiling(&mattr, NULL);\n#if _POSIX_THREAD_PRIO_INHERIT > 0\n    (void)pthread_mutexattr_getprotocol(&mattr, NULL);\n#endif\n#endif\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_mutexattr_getpshared();\n#endif\n#if __XSI_VISIBLE\n    (void)pthread_mutexattr_gettype(&mattr, (int*)1234);\n#endif\n    (void)pthread_mutexattr_init(&mattr);\n#if _POSIX_THREAD_PRIO_PROTECT > 0\n    (void)pthread_mutexattr_setprioceiling(&mattr, 0);\n#if _POSIX_THREAD_PRIO_INHERIT > 0\n    (void)pthread_mutexattr_setprotocol(&mattr, 0);\n#endif\n#endif\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_mutexattr_setpshared(&mattr, 0);\n#endif\n#if __XSI_VISIBLE\n    (void)pthread_mutexattr_settype(&mattr, 0);\n#endif\n    (void)pthread_once(&once, pthread_once_action);\n    (void)pthread_rwlock_destroy(&rwlock);\n    (void)pthread_rwlock_init(&rwlock, &rwattr);\n    (void)pthread_rwlock_rdlock(&rwlock);\n#if _POSIX_TIMEOUTS > 0\n    (void)pthread_rwlock_timedrdlock(&rwlock, &ts);\n    (void)pthread_rwlock_timedwrlock(&rwlock, &ts);\n#endif\n    (void)pthread_rwlock_tryrdlock(&rwlock);\n    (void)pthread_rwlock_trywrlock(&rwlock);\n    (void)pthread_rwlock_unlock(&rwlock);\n    (void)pthread_rwlock_wrlock(&rwlock);\n    (void)pthread_rwlockattr_destroy(&rwattr);\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_rwlockattr_getpshared(&rwattr, NULL);\n#endif\n    (void)pthread_rwlockattr_init(&rwattr);\n#if _POSIX_THREAD_PROCESS_SHARED > 0\n    (void)pthread_rwlockattr_setpshared(&rwattr, 0);\n#endif\n    (void)pthread_self();\n    (void)pthread_setcancelstate(0, NULL);\n    (void)pthread_setcanceltype(0, NULL);\n#if _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)pthread_setschedparam(tid, 0, &sched_param_value);\n    (void)pthread_setschedprio(tid, 0);\n#endif\n    (void)pthread_setspecific(key, NULL);\n#if _POSIX_SPIN_LOCKS > 0\n    (void)pthread_spin_destroy(&spin);\n    (void)pthread_spin_init(&spin, 0);\n    (void)pthread_spin_lock(&spin);\n    (void)pthread_spin_trylock(&spin);\n    (void)pthread_spin_unlock(&spin);\n#endif /* _POSIX_SPIN_LOCKS > 0 */\n    (void)pthread_testcancel();\n}\n\n#endif /* !__ANDROID__ || __ANDROID_API__ >= 9 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/pwd.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <pwd.h>\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(pwd_check_type_, __LINE__)\n\nCHECK(struct passwd);\nCHECK(gid_t);\nCHECK(uid_t);\nCHECK(size_t);\n\nvoid pwd_check_passwd_fields(struct passwd *s)\n{\n    s->pw_name  = (char*)0;\n    s->pw_uid   = (uid_t)0;\n    s->pw_gid   = (gid_t)0;\n    s->pw_dir   = (char*)0;\n    s->pw_shell = (char*)0;\n    s->pw_gecos = (char*)0;\n}\n\nvoid pwd_check_functions()\n{\n#if __XSI_VISIBLE\n    (void)endpwent();\n    (void)getpwent();\n#endif\n    (void)getpwnam((const char *)1234);\n    (void)getpwnam_r((const char *)1234, (struct passwd *)1234, (char *)1234, (size_t)0, (struct passwd **)1234);\n    (void)getpwuid((uid_t)0);\n    (void)getpwuid_r((uid_t)0, (struct passwd *)1234, (char *)1234, (size_t)0, (struct passwd **)1234);\n#if __XSI_VISIBLE\n    (void)setpwent();\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/regex.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n#include <android/api-level.h>\n#endif\n\n#if !__ANDROID__ || __ANDROID_API__ >= 8\n\n#include <regex.h>\n\n#include \"gen/regex.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(regex_check_type_, __LINE__)\n\nCHECK(regex_t);\nCHECK(size_t);\nCHECK(regoff_t);\nCHECK(regmatch_t);\n\nvoid regex_check_regex_t_fields(regex_t *s)\n{\n    s->re_nsub = (size_t)0;\n}\n\nvoid regex_check_regmatch_t_fields(regmatch_t *s)\n{\n    s->rm_so = (regoff_t)0;\n    s->rm_eo = (regoff_t)0;\n}\n\nvoid regex_check_functions()\n{\n    (void)regcomp((regex_t*)0, (const char *)0, 0);\n    (void)regerror(0, (const regex_t*)0, (char*)0, (size_t)0);\n    (void)regexec((const regex_t*)0, (const char*)0, (size_t)0, (regmatch_t*)0, 0);\n    (void)regfree((regex_t*)0);\n}\n\n#endif /* !__ANDROID__ || __ANDROID_API__ >= 8 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sched.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sched.h>\n\n#include \"gen/sched.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sched_check_type_, __LINE__)\n\n#if _POSIX_PRIORITY_SCHEDULING > 0\nCHECK(pid_t);\n#endif\n\n#if _POSIX_SPORADIC_SERVER > 0 || _POSIX_THREAD_SPORADIC_SERVER > 0\nCHECK(time_t);\nCHECK(struct timespec);\n#endif\n\nCHECK(struct sched_param);\n\nvoid sched_check_sched_param_fields(struct sched_param *s)\n{\n    s->sched_priority = 0;\n#if _POSIX_SPORADIC_SERVER > 0 || _POSIX_THREAD_SPORADIC_SERVER > 0\n    s->sched_ss_low_priority = 0;\n    s->sched_ss_repl_period.tv_sec  = 0;\n    s->sched_ss_repl_period.tv_nsec = 0;\n    s->sched_ss_init_budget.tv_sec  = 0;\n    s->sched_ss_init_budget.tv_nsec = 0;\n    s->sched_ss_max_repl = 0;\n#endif /* _POSIX_SPORADIC_SERVER > 0 && _POSIX_THREAD_SPORADIC_SERVER > 0 */\n}\n\nvoid sched_check_functions()\n{\n#if _POSIX_PRIORITY_SCHEDULING > 0 || _POSIX_THREAD_PRIORITY_SCHEDULING > 0\n    (void)sched_get_priority_max(0);\n    (void)sched_get_priority_min(0);\n    (void)sched_rr_get_interval((pid_t)0, (struct timespec *)0);\n#endif\n\n#if _POSIX_PRIORITY_SCHEDULING > 0\n    (void)sched_getparam((pid_t)0, (struct sched_param *)0);\n    (void)sched_getscheduler((pid_t)0);\n    (void)sched_setparam((pid_t)0, (const struct sched_param *)0);\n    (void)sched_setscheduler((pid_t)0, 0, (const struct sched_param *)0);\n#endif\n\n    (void)sched_yield();\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/search.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <search.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(search_check_type_, __LINE__)\n\nCHECK(struct entry);\nCHECK(ENTRY);\nCHECK(ACTION);\nCHECK(VISIT);\nCHECK(size_t);\n\nvoid search_check_ENTRY_fields(ENTRY *s)\n{\n    s->key  = (char*)0;\n    s->data = (void*)0;\n}\n\nvoid search_check_ACTION_values()\n{\n#undef CHECK\n#define CHECK(v) ACTION JOIN(search_check_ACTION_value_, __LINE__) = v; (void)JOIN(search_check_ACTION_value_, __LINE__)\n    CHECK(FIND);\n    CHECK(ENTER);\n}\n\nvoid search_check_VISIT_values()\n{\n#undef CHECK\n#define CHECK(v) VISIT JOIN(search_check_VISIT_value_, __LINE__) = v; (void)JOIN(search_check_VISIT_value_, __LINE__)\n    CHECK(preorder);\n    CHECK(postorder);\n    CHECK(endorder);\n    CHECK(leaf);\n}\n\nvoid search_check_functions(ENTRY e, ACTION a)\n{\n    typedef int (*cb_t)(const void *, const void *);\n    typedef void (*twalk_cb_t)(const void *, VISIT, int );\n\n    (void)hcreate((size_t)0);\n    (void)hdestroy();\n    (void)hsearch(e, a);\n    (void)insque((void*)0, (void*)0);\n    (void)lfind((const void*)0, (const void*)0, (size_t*)0, (size_t)0, (cb_t)0);\n    (void)lsearch((const void*)0, (void*)0, (size_t*)0, (size_t)0, (cb_t)0);\n    (void)remque((void*)0);\n    (void)tdelete((const void*)0, (void**)0, (cb_t)0);\n    (void)tfind((const void*)0, (void * const *)0, (cb_t)0);\n    (void)tsearch((const void*)0, (void**)0, (cb_t)0);\n    (void)twalk((const void*)0, (twalk_cb_t)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/semaphore.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <semaphore.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(semaphore_check_type_, __LINE__)\n\nCHECK(sem_t);\n\n#if !defined(SEM_FAILED)\n#error 'SEM_FAILED' not defined\n#endif\n\nsem_t *semaphore_check_SEM_FAILED = SEM_FAILED;\n\nvoid semaphore_check_functions(sem_t *s)\n{\n    (void)sem_close(s);\n    (void)sem_open((const char*)0, 0, 0);\n    (void)sem_post(s);\n#if _POSIX_TIMEOUTS > 0\n    (void)sem_timedwait(s, (const struct timespec*)0);\n#endif\n    (void)sem_trywait(s);\n    (void)sem_unlink((const char*)0);\n    (void)sem_wait(s);\n\n#if __APPLE__ && defined(__MAC_10_8)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n\n    (void)sem_destroy(s);\n    (void)sem_getvalue(s, (int*)0);\n    (void)sem_init(s, 0, 0);\n\n#if __APPLE__ && defined(__MAC_10_8)\n#pragma GCC diagnostic pop\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/setjmp.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <setjmp.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(setjmp_check_type_, __LINE__)\n\nCHECK(jmp_buf);\nCHECK(sigjmp_buf);\n\nvoid setjmp_check_functions()\n{\n    jmp_buf j;\n    sigjmp_buf s;\n\n    (void)longjmp(j, 0);\n    (void)siglongjmp(s, 0);\n    (void)setjmp(j);\n    (void)sigsetjmp(s, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/signal.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <signal.h>\n#if __APPLE__\n#include <time.h>\n#endif\n\n#include \"gen/signal.inc\"\n\n#include \"helper.h\"\n\nextern void *memset(void *s, int c, size_t n);\n\n#if __ANDROID__\n\n/* https://tracker.crystax.net/issues/1158 */\n\nvoid psiginfo(const siginfo_t *pinfo, const char *message)\n{\n    (void)pinfo;\n    (void)message;\n}\n\nvoid psignal(int signum, const char *message)\n{\n    (void)signum;\n    (void)message;\n}\n\n#endif /* !__ANDROID__ */\n\n#define CHECK(type) type JOIN(signal_check_type_, __LINE__)\n\nCHECK(pthread_t);\nCHECK(size_t);\nCHECK(uid_t);\nCHECK(struct timespec);\nCHECK(sig_atomic_t);\nCHECK(sigset_t);\nCHECK(pid_t);\nCHECK(pthread_attr_t);\nCHECK(union sigval);\nCHECK(struct sigevent);\nCHECK(struct sigaction);\nCHECK(mcontext_t);\nCHECK(ucontext_t);\nCHECK(stack_t);\nCHECK(siginfo_t);\n\n#undef CHECK\n#define CHECK(type) void JOIN(signal_check_fields_, __LINE__)(type *s)\n\nCHECK(union sigval)\n{\n    s->sival_int = 0;\n    s->sival_ptr = (void*)0;\n}\n\nCHECK(struct sigevent)\n{\n    typedef void (*sigev_notify_function_t)(union sigval);\n\n    s->sigev_notify = 0;\n    s->sigev_signo  = 0;\n    s->sigev_value.sival_int = 0;\n    s->sigev_value.sival_ptr = (void*)0;\n    s->sigev_notify_function = (sigev_notify_function_t)0;\n    s->sigev_notify_attributes = (pthread_attr_t*)0;\n}\n\nCHECK(struct sigaction)\n{\n    typedef void (*sa_handler_t)(int);\n    typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);\n\n    s->sa_handler   = (sa_handler_t)0;\n    s->sa_flags     = 0;\n    s->sa_sigaction = (sa_sigaction_t)0;\n\n    memset(&s->sa_mask, 0, sizeof(s->sa_mask));\n}\n\nCHECK(ucontext_t)\n{\n    s->uc_link = (ucontext_t*)0;\n\n    stack_t *p = &s->uc_stack;\n    (void)p;\n\n    memset(&s->uc_sigmask, 0, sizeof(s->uc_sigmask));\n    memset(&s->uc_mcontext, 0, sizeof(s->uc_mcontext));\n}\n\nCHECK(stack_t)\n{\n    s->ss_sp    = (void*)0;\n    s->ss_size  = (size_t)0;\n    s->ss_flags = 0;\n}\n\nCHECK(siginfo_t)\n{\n    s->si_signo  = 0;\n    s->si_code   = 0;\n#if __XSI_VISIBLE\n    s->si_errno  = 0;\n#endif\n    s->si_pid    = (pid_t)0;\n    s->si_uid    = (uid_t)0;\n    s->si_addr   = (void*)0;\n    s->si_status = 0;\n\n    union sigval *p = &s->si_value;\n    (void)p;\n}\n\nvoid signal_check_functions(pthread_t tid, sigset_t *ss\n#if _POSIX_REALTIME_SIGNALS > 0\n        , union sigval sv\n#endif\n        )\n{\n    typedef void (*signal_cb_t)(int );\n\n    (void)kill((pid_t)0, 0);\n#if __XSI_VISIBLE\n    (void)killpg((pid_t)0, 0);\n#endif\n#if !__APPLE__\n    (void)psiginfo((const siginfo_t *)0, (const char *)0);\n#endif\n    (void)psignal(0, (const char*)0);\n    (void)pthread_kill(tid, 0);\n    (void)pthread_sigmask(0, (const sigset_t*)0, (sigset_t*)0);\n    (void)raise(0);\n    (void)sigaction(0, (const struct sigaction*)0, (struct sigaction*)0);\n    (void)sigaddset(ss, 0);\n#if __XSI_VISIBLE\n    (void)sigaltstack((const stack_t*)0, (stack_t*)0);\n#endif\n    (void)sigdelset(ss, 0);\n    (void)sigemptyset(ss);\n    (void)sigfillset(ss);\n    (void)sigismember(ss, 0);\n    (void)signal(0, (signal_cb_t)0);\n    (void)sigpending(ss);\n    (void)sigprocmask(0, (const sigset_t*)0, (sigset_t*)0);\n#if _POSIX_REALTIME_SIGNALS > 0\n    (void)sigqueue((pid_t)0, 0, sv);\n#endif\n    (void)sigsuspend(ss);\n#if _POSIX_REALTIME_SIGNALS > 0\n    (void)sigtimedwait((const sigset_t*)0, (siginfo_t*)0, (const struct timespec*)0);\n#endif\n    (void)sigwait(ss, (int*)1234);\n#if _POSIX_REALTIME_SIGNALS > 0\n    (void)sigwaitinfo(ss, (siginfo_t*)0);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/spawn.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if _POSIX_SPAWN > 0\n\n#include <spawn.h>\n\n#include \"gen/spawn.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(spawn_check_type_, __LINE__)\n\nCHECK(posix_spawnattr_t);\nCHECK(posix_spawn_file_actions_t);\nCHECK(mode_t);\nCHECK(pid_t);\nCHECK(sigset_t);\nCHECK(struct sched_param *);\n\nvoid spawn_check_functions(posix_spawn_file_actions_t *f, posix_spawnattr_t *a)\n{\n    (void)posix_spawn((pid_t*)0, \"\", f, a, (char * const *)0, (char * const *)0);\n    (void)posix_spawn_file_actions_addclose(f, 0);\n    (void)posix_spawn_file_actions_adddup2(f, 0, 0);\n    (void)posix_spawn_file_actions_addopen(f, 0, \"\", 0, (mode_t)0);\n    (void)posix_spawn_file_actions_destroy(f);\n    (void)posix_spawn_file_actions_init(f);\n    (void)posix_spawnattr_destroy(a);\n    (void)posix_spawnattr_getflags(a, (short*)0);\n    (void)posix_spawnattr_getpgroup(a, (pid_t*)0);\n#if _POSIX_PRIORITY_SCHEDULING > 0\n    (void)posix_spawnattr_getschedparam(a, (struct sched_param*)0);\n    (void)posix_spawnattr_getschedpolicy(a, (int*)0);\n#endif\n    (void)posix_spawnattr_getsigdefault(a, (sigset_t*)0);\n    (void)posix_spawnattr_getsigmask(a, (sigset_t*)0);\n    (void)posix_spawnattr_init(a);\n    (void)posix_spawnattr_setflags(a, (short)0);\n    (void)posix_spawnattr_setpgroup(a, (pid_t)0);\n#if _POSIX_PRIORITY_SCHEDULING > 0\n    (void)posix_spawnattr_setschedparam(a, (const struct sched_param *)0);\n    (void)posix_spawnattr_setschedpolicy(a, 0);\n#endif\n    (void)posix_spawnattr_setsigdefault(a, (const sigset_t *)0);\n    (void)posix_spawnattr_setsigmask(a, (const sigset_t *)0);\n    (void)posix_spawnp((pid_t*)0, \"\", f, a, (char * const *)0, (char * const *)0);\n}\n\n#endif /* _POSIX_SPAWN > 0 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stdarg.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdarg.h>\n#include \"helper.h\"\n\nva_list stdarg_check_type_va_list;\n\nstatic void stdarg_helper(int n, ...)\n{\n    va_list args;\n    va_list nargs;\n\n    va_start(args, n);\n\n    va_copy(nargs, args);\n    va_end(nargs);\n\n#define CHECK(type) type JOIN(v, __LINE__) = va_arg(args, type); (void)JOIN(v, __LINE__)\n\n    CHECK(const char *);\n    CHECK(void *);\n    CHECK(long);\n    CHECK(unsigned long long);\n\n    char c = (char)va_arg(args, int);\n    (void)c;\n\n#undef CHECK\n\n    va_end(args);\n}\n\nvoid stdarg_check_funtions()\n{\n    stdarg_helper(0, \"\", (void*)0, (long)1, (unsigned long long)2, (char)3);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stdbool.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdbool.h>\n\n#include \"gen/stdbool.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stddef.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stddef.h>\n#include \"helper.h\"\n\n#ifndef NULL\n#error NULL not defined\n#endif\n\n#ifndef offsetof\n#error offsetof not defined\n#endif\n\n#define CHECK(type) type JOIN(var_stddef_, __LINE__)\n\nCHECK(ptrdiff_t);\nCHECK(wchar_t);\nCHECK(size_t);\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stdint.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdint.h>\n\n#include \"gen/stdint.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stdio.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdio.h>\n#if __APPLE__ || __gnu_linux__\n#include <stdarg.h> /* for va_start */\n#endif\n#if __APPLE__\n#include <xlocale.h>\n#if !defined(__MAC_10_7)\n#include <sys/types.h>\n#endif\n#endif\n#if __gnu_linux__\n#include <locale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_STDIO_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in stdio.h\n#endif\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(stdio_check_type_, __LINE__)\n\nCHECK(FILE);\nCHECK(fpos_t);\nCHECK(off_t);\nCHECK(size_t);\nCHECK(ssize_t);\nCHECK(va_list);\nCHECK(locale_t);\n\nvoid stdio_check_functions(FILE *fp, locale_t l, ...)\n{\n    int iv;\n    va_list args;\n    va_start(args, l);\n\n#if __APPLE__ || __ANDROID__\n    (void)asprintf((char**)1234, \"%d\", 0);\n    (void)asprintf_l((char**)1234, l, \"%d\", 0);\n#endif\n    (void)clearerr(fp);\n    (void)ctermid((char*)0);\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)dprintf(0, \"%d\", 0);\n#endif\n#if (__APPLE__ && defined(__MAC_10_7)) || __ANDROID__\n    (void)dprintf_l(0, l, \"%d\", 0);\n#endif\n    (void)fclose(fp);\n    (void)fdopen(0, \"\");\n    (void)feof(fp);\n    (void)ferror(fp);\n    (void)fflush(fp);\n    (void)fgetc(fp);\n    (void)fgetpos(fp, (fpos_t*)0);\n    (void)fgets((char*)0, 0, fp);\n    (void)fileno(fp);\n    (void)flockfile(fp);\n#if !__APPLE__\n    (void)fmemopen((void*)0, (size_t)0, (const char *)0);\n#endif\n    (void)fopen((const char *)0, (const char *)0);\n    (void)fprintf(fp, \"%d, %s\", 0, \"\");\n#if __APPLE__ || __ANDROID__\n    (void)fprintf_l(fp, l, \"%d, %s\", 0, \"\");\n#endif\n    (void)fputc(0, fp);\n    (void)fputs(\"\", fp);\n    (void)fread((void*)0, (size_t)0, (size_t)0, fp);\n    (void)freopen((const char *)0, (const char *)0, fp);\n    (void)fscanf(fp, \"%d\", &iv);\n    (void)fseek(fp, (long)0, 0);\n    (void)fseeko(fp, (off_t)0, 0);\n    (void)fsetpos(fp, (const fpos_t *)0);\n    (void)ftell(fp);\n    (void)ftello(fp);\n    (void)ftrylockfile(fp);\n    (void)funlockfile(fp);\n    (void)fwrite((const void *)1234, (size_t)0, (size_t)0, fp);\n    (void)getc(fp);\n    (void)getchar();\n    (void)getc_unlocked(fp);\n    (void)getchar_unlocked();\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)getdelim((char**)0, (size_t*)0, 0, fp);\n    (void)getline((char**)0, (size_t*)0, fp);\n#endif\n#if !__gnu_linux__\n    (void)gets((char*)0);\n#endif\n#if !__APPLE__\n    (void)open_memstream((char**)0, (size_t*)0);\n#endif\n    (void)pclose(fp);\n    (void)perror((const char *)0);\n    (void)popen((const char *)0, (const char *)0);\n    (void)printf(\"%d, %ld\", 0, (long)0);\n#if __APPLE__ || __ANDROID__\n    (void)printf_l(l, \"%d, %ld\", 0, (long)0);\n#endif\n    (void)putc(0, fp);\n    (void)putchar(0);\n    (void)putc_unlocked(0, fp);\n    (void)putchar_unlocked(0);\n    (void)puts(\"1234\");\n    (void)remove((const char *)0);\n    (void)rename((const char *)0, (const char *)0);\n#if HAVE_XXXAT\n    (void)renameat(0, (const char *)0, 0, (const char *)0);\n#endif\n    (void)rewind(fp);\n    (void)scanf(\"%d\", &iv);\n    (void)setbuf(fp, (char*)0);\n    (void)setvbuf(fp, (char*)0, 0, (size_t)0);\n    (void)snprintf((char *)1234, (size_t)0, \"%d\", 0);\n#if __APPLE__ || __ANDROID__\n    (void)snprintf_l((char*)1234, (size_t)0, l, \"%d\", 0);\n#endif\n    (void)sprintf((char *)1234, \"%d\", 0);\n#if __APPLE__ || __ANDROID__\n    (void)sprintf_l((char*)1234, l, \"%d\", 0);\n#endif\n    (void)sscanf((const char *)1234, \"%d\", &iv);\n    (void)tmpfile();\n    (void)ungetc(0, fp);\n#if __APPLE__ || __ANDROID__\n    (void)vasprintf((char**)1234, \"%d\", args);\n    (void)vasprintf_l((char**)1234, l, \"%d\", args);\n#endif\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)vdprintf(0, \"%d\", args);\n#endif\n#if (__APPLE__ && defined(__MAC_10_7)) || __ANDROID__\n    (void)vdprintf_l(0, l, \"%d\", args);\n#endif\n    (void)vfprintf(fp, \"%s\", args);\n#if __APPLE__ || __ANDROID__\n    (void)vfprintf_l(fp, l, \"%s\", args);\n#endif\n    (void)vfscanf(fp, \"%d\", args);\n    (void)vprintf(\"%s\", args);\n#if __APPLE__ || __ANDROID__\n    (void)vprintf_l(l, \"%s\", args);\n#endif\n    (void)vscanf(\"%d\", args);\n    (void)vsnprintf((char*)1234, (size_t)0, \"%s\", args);\n#if __APPLE__ || __ANDROID__\n    (void)vsnprintf_l((char*)1234, (size_t)0, l, \"%s\", args);\n#endif\n    (void)vsprintf((char*)1234, \"%s\", args);\n#if __APPLE__ || __ANDROID__\n    (void)vsprintf_l((char*)1234, l, \"%s\", args);\n#endif\n    (void)vsscanf((const char *)1234, \"%d\", args);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/stdlib.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <stdlib.h>\n#if __APPLE__\n#include <sys/wait.h>\n#endif\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_STDLIB_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in stdlib.h\n#endif\n#endif\n\n#include \"gen/stdlib.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(stdlib_check_type_, __LINE__);\n\nCHECK(div_t);\nCHECK(ldiv_t);\nCHECK(lldiv_t);\nCHECK(size_t);\nCHECK(wchar_t);\n#if __APPLE__ || __ANDROID__\nCHECK(locale_t);\n#endif\n\n#undef CHECK\n\nvoid * check_stdlib_functions(\n#if __APPLE__ || __ANDROID__\n        locale_t l\n#endif\n        )\n{\n    void *memptr;\n\n    (void)_Exit(0);\n#if __XSI_VISIBLE\n    (void)a64l(\"1\");\n#endif\n    (void)abort();\n    (void)abs(1);\n    (void)atexit((void (*)(void))1234);\n    (void)atof(\"1\");\n#if __APPLE__ || __ANDROID__\n    (void)atof_l(\"1\", l);\n#endif\n    (void)atoi(\"1\");\n#if __APPLE__ || __ANDROID__\n    (void)atoi_l(\"1\", l);\n#endif\n    (void)atol(\"1\");\n#if __APPLE__ || __ANDROID__\n    (void)atol_l(\"1\", l);\n#endif\n    (void)atoll(\"1\");\n#if __APPLE__ || __ANDROID__\n    (void)atoll_l(\"1\", l);\n#endif\n    (void)bsearch((const void*)1234, (const void*)1234, 1, 1, (int (*)(const void *, const void *))1234);\n    (void)calloc(1, 2);\n    (void)div(1, 2);\n#if __XSI_VISIBLE\n    (void)drand48();\n    (void)erand48(NULL);\n#endif\n    (void)exit(0);\n    (void)free(NULL);\n    (void)getenv(\"VARNAME\");\n#if __XSI_VISIBLE\n    (void)getsubopt((char **)NULL, (char * const *)NULL, (char **)NULL);\n    (void)grantpt(1);\n    (void)initstate((unsigned)1, (char*)NULL, (size_t)1);\n    (void)jrand48(NULL);\n    (void)l64a(0);\n#endif\n    (void)labs((long)1);\n#if __XSI_VISIBLE\n    (void)lcong48(NULL);\n#endif\n    (void)ldiv((long)1, (long)2);\n    (void)llabs((long long)1);\n    (void)lldiv((long long)1, (long long)2);\n#if __XSI_VISIBLE\n    (void)lrand48();\n#endif\n    (void)malloc((size_t)2);\n    (void)mblen((const char *)1234, (size_t)1);\n#if __APPLE__ || __ANDROID__\n    (void)mblen_l((const char *)1234, (size_t)1, l);\n#endif\n    (void)mbstowcs((wchar_t*)1234, (const char *)1234, (size_t)0);\n#if __APPLE__ || __ANDROID__\n    (void)mbstowcs_l((wchar_t*)1234, (const char *)1234, (size_t)0, l);\n#endif\n    (void)mbtowc((wchar_t*)1234, (const char *)1234, (size_t)0);\n#if __APPLE__ || __ANDROID__\n    (void)mbtowc_l((wchar_t*)1234, (const char *)1234, (size_t)0, l);\n#endif\n#if __XSI_VISIBLE\n    (void)mkstemp((char*)NULL);\n    (void)mrand48();\n    (void)nrand48(NULL);\n#endif\n    (void)posix_memalign(&memptr, (size_t)0, (size_t)0);\n#if __XSI_VISIBLE\n    (void)posix_openpt(0);\n    (void)ptsname(0);\n    (void)putenv(\"VARNAME\");\n#endif\n    (void)qsort((void*)1234, (size_t)0, (size_t)0, (int (*)(const void *, const void *))1234);\n    (void)rand();\n    (void)rand_r(NULL);\n#if __XSI_VISIBLE\n    (void)random();\n#endif\n    memptr = realloc(NULL, 0);\n#if __XSI_VISIBLE\n    (void)realpath((const char *)NULL, (char*)NULL);\n    (void)seed48(NULL);\n#endif\n    (void)setenv(\"NAME\", \"VALUE\", 1);\n#if __XSI_VISIBLE\n    (void)setkey((const char *)NULL);\n    (void)setstate((char *)NULL);\n#endif\n    (void)srand((unsigned)0);\n#if __XSI_VISIBLE\n    (void)srand48((long)0);\n    (void)srandom((unsigned)0);\n#endif\n    (void)strtod((const char *)1234, (char **)1234);\n    (void)strtof((const char *)1234, (char **)1234);\n    (void)strtol((const char *)1234, (char **)1234, 10);\n    (void)strtold((const char *)1234, (char **)1234);\n    (void)strtoll((const char *)1234, (char **)1234, 10);\n    (void)strtoul((const char *)1234, (char **)1234, 10);\n    (void)strtoull((const char *)1234, (char **)1234, 10);\n#if __APPLE__ || __ANDROID__\n    (void)strtod_l((const char*)1234, (char **)1234, l);\n    (void)strtof_l((const char *)1234, (char **)1234, l);\n    (void)strtol_l((const char *)1234, (char **)1234, 10, l);\n    (void)strtold_l((const char *)1234, (char **)1234, l);\n    (void)strtoll_l((const char *)1234, (char **)1234, 10, l);\n    (void)strtoul_l((const char *)1234, (char **)1234, 10, l);\n    (void)strtoull_l((const char *)1234, (char **)1234, 10, l);\n#endif\n    (void)system(\"bin\");\n#if __XSI_VISIBLE\n    (void)unlockpt(0);\n#endif\n    (void)unsetenv(\"VARNAME\");\n    (void)wcstombs((char *)1234, (const wchar_t *)1234, (size_t)0);\n    (void)wctomb((char*)1234, (wchar_t)0);\n#if __APPLE__ || __ANDROID__\n    (void)wcstombs_l((char*)1234, (const wchar_t *)1234, (size_t)0, l);\n    (void)wctomb_l((char*)1234, (wchar_t)0, l);\n#endif\n\n    return memptr;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/string.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <string.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n#if __gnu_linux__\n#include <locale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_STRING_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in string.h\n#endif\n#endif\n\n#ifndef NULL\n#error 'NULL' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(string_check_type_, __LINE__)\n\nCHECK(size_t);\nCHECK(locale_t);\n\nvoid string_check_functions(char *cp, const char *ccp,\n        void *vp, const void *cvp, size_t sz, locale_t l)\n{\n#if __XSI_VISIBLE\n    (void)memccpy(vp, cvp, 0, sz);\n#endif\n    (void)memchr(cvp, 0, sz);\n    (void)memcmp(cvp, cvp, sz);\n    (void)memcpy(vp, cvp, sz);\n    (void)memmove(vp, cvp, sz);\n    (void)memset(vp, 0, sz);\n    (void)stpcpy(cp, ccp);\n#if !__APPLE__ || MAC_OS_X_VERSION_MIN_REQUIRED >= 1090\n    (void)stpncpy(cp, ccp, sz);\n#endif\n#if __APPLE__ || __ANDROID__\n    (void)strcasestr(ccp, ccp);\n    (void)strcasestr_l(ccp, ccp, l);\n#endif\n    (void)strcat(cp, ccp);\n    (void)strchr(ccp, 0);\n    (void)strcmp(ccp, ccp);\n    (void)strcoll(ccp, ccp);\n    (void)strcoll_l(ccp, ccp, l);\n    (void)strcpy(cp, ccp);\n    (void)strcspn(ccp, ccp);\n    (void)strdup(ccp);\n    (void)strerror(0);\n#if !__APPLE__\n    (void)strerror_l(0, l);\n#endif\n    (void)strerror_r(0, cp, sz);\n    (void)strlen(ccp);\n    (void)strncat(cp, ccp, sz);\n    (void)strncmp(ccp, ccp, sz);\n    (void)strncpy(cp, ccp, sz);\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)strndup(ccp, sz);\n    (void)strnlen(ccp, sz);\n#endif\n    (void)strpbrk(ccp, ccp);\n    (void)strrchr(ccp, 0);\n    (void)strsignal(0);\n    (void)strspn(ccp, ccp);\n    (void)strstr(ccp, ccp);\n    (void)strtok(cp, ccp);\n    (void)strtok_r(cp, ccp, (char**)1234);\n    (void)strxfrm(cp, ccp, sz);\n    (void)strxfrm_l(cp, ccp, sz, l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/strings.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <strings.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(strings_check_type_, __LINE__)\n\nCHECK(size_t);\nCHECK(locale_t);\n\nvoid strings_check_functions(const char *ccp, size_t sz, locale_t l)\n{\n#if __XSI_VISIBLE\n    (void)ffs(0);\n#endif\n    (void)strcasecmp(ccp, ccp);\n    (void)strcasecmp_l(ccp, ccp, l);\n    (void)strncasecmp(ccp, ccp, sz);\n    (void)strncasecmp_l(ccp, ccp, sz, l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_ipc.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/ipc.h>\n\n#include \"gen/sys_ipc.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_ipc_check_type_, __LINE__)\n\nCHECK(uid_t);\nCHECK(gid_t);\nCHECK(mode_t);\nCHECK(key_t);\nCHECK(struct ipc_perm);\n\nvoid sys_ipc_check_ipc_perm_fields(struct ipc_perm *s)\n{\n    s->uid  = (uid_t)0;\n    s->gid  = (gid_t)0;\n    s->cuid = (uid_t)0;\n    s->cgid = (gid_t)0;\n    s->mode = (mode_t)0;\n}\n\nvoid sys_ipc_check_functions()\n{\n    (void)ftok((const char *)0, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_mman.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/mman.h>\n\n#include \"gen/sys_mman.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_mman_check_type_, __LINE__)\n\nCHECK(mode_t);\nCHECK(off_t);\nCHECK(size_t);\n\n#if _POSIX_TYPED_MEMORY_OBJECTS > 0\nCHECK(struct posix_typed_mem_info);\n\nvoid sys_mman_check_posix_typed_mem_info_fields(struct posix_typed_mem_info *s)\n{\n    s->posix_tmi_length = (size_t)0;\n}\n#endif /* _POSIX_TYPED_MEMORY_OBJECTS > 0 */\n\nvoid sys_mman_check_functions()\n{\n#if _POSIX_MEMLOCK_RANGE > 0\n    (void)mlock((const void *)0, (size_t)0);\n#endif\n#if _POSIX_MEMLOCK > 0\n    (void)mlockall(0);\n#endif\n    (void)mmap((void*)0, (size_t)0, 0, 0, 0, (off_t)0);\n    (void)mprotect((void*)0, (size_t)0, 0);\n#if __XSI_VISIBLE || _POSIX_SYNCHRONIZED_IO > 0\n    (void)msync((void*)0, (size_t)0, 0);\n#endif\n#if _POSIX_MEMLOCK_RANGE > 0\n    (void)munlock((const void*)0, (size_t)0);\n#endif\n#if _POSIX_MEMLOCK\n    (void)munlockall();\n#endif\n    (void)munmap((void*)0, (size_t)0);\n#if _POSIX_ADVISORY_INFO > 0\n    (void)posix_madvise((void*)0, (size_t)0, 0);\n#endif\n#if _POSIX_TYPED_MEMORY_OBJECTS > 0\n    (void)posix_mem_offset((const void*)0, (size_t)0, (off_t*)0, (size_t*)0, (int*)0);\n    (void)posix_typed_mem_get_info(0, (struct posix_typed_mem_info *)0);\n    (void)posix_typed_mem_open((const char *)0, 0, 0);\n#endif\n#if _POSIX_SHARED_MEMORY_OBJECTS > 0\n    (void)shm_open((const char *)0, 0, (mode_t)0);\n    (void)shm_unlink((const char *)0);\n#endif\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_msg.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n/* WARNING!!! Android have no support for sys/msg.h */\n\n#else /* !__ANDROID__ */\n\n#include <sys/msg.h>\n\n#ifndef MSG_NOERROR\n#error 'MSG_NOERROR' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_msg_check_type_, __LINE__)\n\nCHECK(msgqnum_t);\nCHECK(msglen_t);\nCHECK(struct msqid_ds);\n\nvoid sys_msg_check_msqid_ds_fields(struct msqid_ds *s)\n{\n    struct ipc_perm *p = &s->msg_perm;\n    (void)p;\n\n    s->msg_qnum   = (msgqnum_t)0;\n    s->msg_qbytes = (msglen_t)0;\n    s->msg_lspid  = (pid_t)0;\n    s->msg_lrpid  = (pid_t)0;\n    s->msg_stime  = (time_t)0;\n    s->msg_rtime  = (time_t)0;\n    s->msg_ctime  = (time_t)0;\n}\n\nvoid sys_msg_check_functions()\n{\n    (void)msgctl(0, 0, (struct msqid_ds*)0);\n    (void)msgget((key_t)0, 0);\n    (void)msgrcv(0, (void*)0, (size_t)0, (long)0, 0);\n    (void)msgsnd(0, (const void*)0, (size_t)0, 0);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_resource.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/resource.h>\n\n#include \"gen/sys_resource.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_resource_check_type_, __LINE__)\n\nCHECK(rlim_t);\nCHECK(struct rlimit);\nCHECK(struct rusage);\nCHECK(struct timeval);\nCHECK(id_t);\n\n#undef CHECK\n#define CHECK(name) void JOIN(sys_resource_check_fields_, __LINE__)(name *s)\n\nCHECK(struct rlimit)\n{\n    s->rlim_cur = (rlim_t)0;\n    s->rlim_max = (rlim_t)0;\n}\n\nCHECK(struct rusage)\n{\n    struct timeval *p1, *p2;\n    p1 = &s->ru_utime;\n    p2 = &s->ru_stime;\n    (void)p1;\n    (void)p2;\n}\n\nvoid sys_resource_check_functions()\n{\n    (void)getpriority(0, (id_t)0);\n    (void)getrlimit(0, (struct rlimit *)0);\n    (void)getrusage(0, (struct rusage *)0);\n    (void)setpriority(0, (id_t)0, 0);\n    (void)setrlimit(0, (const struct rlimit *)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_select.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/select.h>\n\n#ifndef FD_SETSIZE\n#error 'FD_SETSIZE' not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_select_check_type_, __LINE__)\n\nCHECK(struct timeval);\nCHECK(time_t);\nCHECK(suseconds_t);\nCHECK(sigset_t);\nCHECK(struct timespec);\nCHECK(fd_set);\n\nvoid sys_select_check_functions(fd_set *pfds)\n{\n    FD_CLR(0, pfds);\n    (void)FD_ISSET(0, pfds);\n    FD_SET(0, pfds);\n    FD_ZERO(pfds);\n\n    (void)pselect(0, pfds, pfds, pfds, (const struct timespec*)0, (const sigset_t*)0);\n    (void)select(0, pfds, pfds, pfds, (struct timeval *)0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_sem.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n/* WARNING!!! There is no sys/sem.h in Android */\n\n#else /* !__ANDROID__ */\n\n#include <sys/sem.h>\n\n#include \"gen/sys_sem.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_sem_check_type_, __LINE__)\n\nCHECK(pid_t);\nCHECK(size_t);\nCHECK(time_t);\nCHECK(struct semid_ds);\nCHECK(struct sembuf);\n\n#undef CHECK\n#define CHECK(name) void JOIN(sys_sem_check_fields_, __LINE__)(name *s)\n\nCHECK(struct semid_ds)\n{\n    struct ipc_perm *pi;\n\n    pi = &s->sem_perm;\n    s->sem_nsems = (unsigned short)0;\n    s->sem_otime = (time_t)0;\n    s->sem_ctime = (time_t)0;\n\n    (void)pi;\n}\n\nCHECK(struct sembuf)\n{\n    s->sem_num = (unsigned short)0;\n    s->sem_op  = (short)0;\n    s->sem_flg = (short)0;\n}\n\nvoid sys_sem_check_functions()\n{\n    (void)semctl(0, 0, 0, 0);\n    (void)semget((key_t)0, 0, 0);\n    (void)semop(0, (struct sembuf*)0, (size_t)0);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_shm.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/shm.h>\n\n#include \"gen/sys_shm.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_shm_check_type_, __LINE__)\n\n#if !__ANDROID__\nCHECK(shmatt_t);\n#endif /* !__ANDROID__ */\nCHECK(struct shmid_ds);\nCHECK(pid_t);\nCHECK(size_t);\nCHECK(time_t);\n\n#if __ANDROID__\nvoid *shmat(int shmid, const void *shmaddr, int shmflg)\n{\n    (void)shmid;\n    (void)shmaddr;\n    (void)shmflg;\n    return (void*)12345;\n}\n\nint shmctl(int shmid, int cmd, struct shmid_ds *buf)\n{\n    (void)shmid;\n    (void)cmd;\n    (void)buf;\n    return -1;\n}\n\nint shmdt(const void *shmaddr)\n{\n    (void)shmaddr;\n    return -1;\n}\n\nint shmget(key_t key, size_t size, int shmflg)\n{\n    (void)key;\n    (void)size;\n    (void)shmflg;\n    return -1;\n}\n#endif /* __ANDROID__ */\n\nvoid sys_shm_check_functions()\n{\n    (void)shmat(0, (const void*)1234, 0);\n    (void)shmctl(0, 0, (struct shmid_ds *)1234);\n    (void)shmdt((const void *)1234);\n    (void)shmget((key_t)0, (size_t)0, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_socket.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/socket.h>\n\n#include \"gen/sys_socket.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_socket_check_type_, __LINE__)\n\nCHECK(socklen_t);\nCHECK(sa_family_t);\nCHECK(struct sockaddr);\nCHECK(struct sockaddr_storage);\nCHECK(struct msghdr);\nCHECK(struct iovec);\nCHECK(struct cmsghdr);\nCHECK(struct linger);\nCHECK(size_t);\nCHECK(ssize_t);\n\n#undef CHECK\n#define CHECK(name) void JOIN(sys_socket_check_fields_, __LINE__)(name *s)\n\nCHECK(struct sockaddr)\n{\n    s->sa_family  = (sa_family_t)0;\n    s->sa_data[0] = (char)0;\n}\n\nCHECK(struct sockaddr_storage)\n{\n    s->ss_family = (sa_family_t)0;\n}\n\nCHECK(struct msghdr)\n{\n    s->msg_name       = (void*)0;\n    s->msg_namelen    = (socklen_t)0;\n    s->msg_iov        = (struct iovec *)0;\n    s->msg_iovlen     = 0;\n    s->msg_control    = (void*)0;\n    s->msg_controllen = (socklen_t)0;\n    s->msg_flags      = 0;\n}\n\nCHECK(struct cmsghdr)\n{\n    s->cmsg_len   = (socklen_t)0;\n    s->cmsg_level = 0;\n    s->cmsg_type  = 0;\n}\n\nCHECK(struct linger)\n{\n    s->l_onoff  = 0;\n    s->l_linger = 0;\n}\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: Fix that */\n\nint sockatmark(int s)\n{\n    (void)s;\n    return -1;\n}\n\n#endif /* __ANDROID__ */\n\nvoid sys_socket_check_functions(struct sockaddr *sa, socklen_t sl, socklen_t *psl)\n{\n    (void)accept(0, sa, psl);\n    (void)bind(0, sa, sl);\n    (void)connect(0, sa, sl);\n    (void)getpeername(0, sa, psl);\n    (void)getsockname(0, sa, psl);\n    (void)getsockopt(0, 0, 0, (void*)1234, psl);\n    (void)listen(0, 0);\n    (void)recv(0, (void*)1234, (size_t)1234, 0);\n    (void)recvfrom(0, (void*)1234, (size_t)1234, 0, sa, psl);\n    (void)recvmsg(0, (struct msghdr *)1234, 0);\n    (void)send(0, (const void *)1234, (size_t)1234, 0);\n    (void)sendmsg(0, (const struct msghdr *)1234, 0);\n    (void)sendto(0, (const void *)1234, (size_t)1234, 0, (const struct sockaddr *)1234, sl);\n    (void)setsockopt(0, 0, 0, (const void *)1234, sl);\n    (void)shutdown(0, 0);\n    (void)sockatmark(0);\n    (void)socket(0, 0, 0);\n    (void)socketpair(0, 0, 0, (int*)1234);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_stat.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/stat.h>\n\n#include \"gen/sys_stat.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_stat_check_type_, __LINE__)\n\nCHECK(struct stat);\nCHECK(blkcnt_t);\nCHECK(blksize_t);\nCHECK(dev_t);\nCHECK(ino_t);\nCHECK(mode_t);\nCHECK(nlink_t);\nCHECK(uid_t);\nCHECK(gid_t);\nCHECK(off_t);\nCHECK(time_t);\nCHECK(struct timespec);\n\nvoid sys_stat_timespec_helper(struct timespec *ts)\n{\n    (void)ts;\n}\n\nvoid sys_stat_check_stat_fields(struct stat *s)\n{\n    s->st_dev     = (dev_t)0;\n    s->st_ino     = (ino_t)0;\n    s->st_mode    = (mode_t)0;\n    s->st_nlink   = (nlink_t)0;\n    s->st_uid     = (uid_t)0;\n    s->st_gid     = (gid_t)0;\n    s->st_rdev    = (dev_t)0;\n    s->st_size    = (off_t)0;\n    s->st_blksize = (blksize_t)0;\n    s->st_blocks  = (blkcnt_t)0;\n\n#if __ANDROID__\n    s->st_atime     = (time_t)0;\n    s->st_atimensec = (long)0;\n    s->st_mtime     = (time_t)0;\n    s->st_mtimensec = (long)0;\n    s->st_ctime     = (time_t)0;\n    s->st_ctimensec = (long)0;\n#elif __APPLE__\n    sys_stat_timespec_helper(&s->st_atimespec);\n    sys_stat_timespec_helper(&s->st_mtimespec);\n    sys_stat_timespec_helper(&s->st_ctimespec);\n#else\n    sys_stat_timespec_helper(&s->st_atim);\n    sys_stat_timespec_helper(&s->st_mtim);\n    sys_stat_timespec_helper(&s->st_ctim);\n#endif\n}\n\n#if __ANDROID__ || __APPLE__\nint futimens(int x, const struct timespec y[2])\n{\n    (void)x;\n    (void)y;\n    return -1;\n}\n\nint mkfifoat(int f, const char *s, mode_t m)\n{\n    (void)f;\n    (void)s;\n    (void)m;\n    return -1;\n}\n\nint mknodat(int f, const char *s, mode_t m, dev_t d)\n{\n    (void)f;\n    (void)s;\n    (void)m;\n    (void)d;\n    return -1;\n}\n\nint utimensat(int f, const char *s, const struct timespec t[2], int g)\n{\n    (void)f;\n    (void)s;\n    (void)t;\n    (void)g;\n    return -1;\n}\n#endif /* __ANDROID__ || __APPLE__ */\n\nvoid sys_stat_check_functions()\n{\n    (void)chmod((const char *)1234, (mode_t)0);\n    (void)fchmod(0, (mode_t)0);\n#if HAVE_XXXAT\n    (void)fchmodat(0, (const char *)1234, (mode_t)0, 0);\n#endif\n    (void)fstat(0, (struct stat *)1234);\n#if HAVE_XXXAT\n    (void)fstatat(0, (const char *)1234, (struct stat *)1234, 0);\n#endif\n    (void)futimens(0, (const struct timespec *)1234);\n    (void)lstat((const char *)1234, (struct stat *)1234);\n    (void)mkdir((const char *)1234, (mode_t)0);\n#if HAVE_XXXAT\n    (void)mkdirat(0, (const char *)1234, (mode_t)0);\n#endif\n    (void)mkfifo((const char *)1234, (mode_t)0);\n    (void)mkfifoat(0, (const char *)1234, (mode_t)0);\n    (void)mknod((const char *)1234, (mode_t)0, (dev_t)0);\n    (void)mknodat(0, (const char *)1234, (mode_t)0, (dev_t)0);\n    (void)stat((const char *)1234, (struct stat *)1234);\n    (void)umask((mode_t)0);\n    (void)utimensat(0, (const char *)1234, (const struct timespec *)1234, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_statvfs.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n/* WARNING!!! sys/statvfs.h appears in Android starting from 21 API level */\n/* TODO: check it and see if it's possible implement the same interface for older Android versions */\n\n#else /* !__ANDROID__ */\n\n#include <sys/statvfs.h>\n\n#include \"gen/sys_statvfs.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_statvfs_check_type_, __LINE__)\n\nCHECK(struct statvfs);\nCHECK(fsblkcnt_t);\nCHECK(fsfilcnt_t);\n\nvoid sys_statvfs_check_statvfs_fields(struct statvfs *s)\n{\n    s->f_bsize   = (unsigned long)0;\n    s->f_frsize  = (unsigned long)0;\n    s->f_blocks  = (fsblkcnt_t)0;\n    s->f_bfree   = (fsblkcnt_t)0;\n    s->f_bavail  = (fsblkcnt_t)0;\n    s->f_files   = (fsfilcnt_t)0;\n    s->f_ffree   = (fsfilcnt_t)0;\n    s->f_favail  = (fsfilcnt_t)0;\n    s->f_fsid    = (unsigned long)0;\n    s->f_flag    = (unsigned long)0;\n    s->f_namemax = (unsigned long)0;\n}\n\nvoid sys_statvfs_check_functions(struct statvfs *s)\n{\n    (void)fstatvfs(0, s);\n    (void)statvfs(\"path\", s);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_time.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/time.h>\n\n#include \"gen/sys_time.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_time_check_type_, __LINE__)\n\nCHECK(struct timeval);\nCHECK(struct itimerval);\nCHECK(time_t);\nCHECK(suseconds_t);\nCHECK(fd_set);\n\nvoid sys_time_check_functions(fd_set *pfds)\n{\n    (void)getitimer(0, (struct itimerval *)1234);\n    (void)gettimeofday((struct timeval *)1234, (void*)1234);\n    (void)setitimer(0, (const struct itimerval *)1234, (struct itimerval *)1234);\n    (void)select(0, pfds, pfds, pfds, (struct timeval *)1234);\n    (void)utimes((const char *)1234, (const struct timeval *)1234);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_times.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/times.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_times_check_type_, __LINE__)\n\nCHECK(struct tms);\nCHECK(clock_t);\n\nvoid sys_times_check_tms_fields(struct tms *s)\n{\n    s->tms_utime  = (clock_t)0;\n    s->tms_stime  = (clock_t)0;\n    s->tms_cutime = (clock_t)0;\n    s->tms_cstime = (clock_t)0;\n}\n\nvoid sys_times_check_functions()\n{\n    (void)times((struct tms *)1234);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_types.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/types.h>\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_types_check_type_, __LINE__)\n\nCHECK(blkcnt_t);\nCHECK(blksize_t);\n#if __XSI_VISIBLE\nCHECK(clock_t);\n#endif\n#if _POSIX_TIMERS > 0\nCHECK(clockid_t);\n#endif\nCHECK(dev_t);\n#if __XSI_VISIBLE\nCHECK(fsblkcnt_t);\nCHECK(fsfilcnt_t);\n#endif\nCHECK(gid_t);\nCHECK(id_t);\nCHECK(ino_t);\nCHECK(key_t);\nCHECK(mode_t);\nCHECK(nlink_t);\nCHECK(off_t);\nCHECK(pid_t);\n#if !__ANDROID__\n/* In Android, pthread types defined in pthread.h */\nCHECK(pthread_attr_t);\n#if _POSIX_BARRIERS > 0\nCHECK(pthread_barrier_t);\nCHECK(pthread_barrierattr_t);\n#endif\nCHECK(pthread_cond_t);\nCHECK(pthread_condattr_t);\nCHECK(pthread_key_t);\nCHECK(pthread_mutex_t);\nCHECK(pthread_mutexattr_t);\nCHECK(pthread_once_t);\nCHECK(pthread_rwlock_t);\nCHECK(pthread_rwlockattr_t);\n#if _POSIX_SPIN_LOCKS > 0\nCHECK(pthread_spinlock_t);\n#endif\nCHECK(pthread_t);\n#endif /* !__ANDROID__ */\nCHECK(size_t);\nCHECK(ssize_t);\n#if __XSI_VISIBLE\nCHECK(suseconds_t);\n#endif\nCHECK(time_t);\n#if _POSIX_TIMERS > 0\nCHECK(timer_t);\n#endif\n#if _POSIX_TRACE > 0\nCHECK(trace_attr_t);\nCHECK(trace_event_id_t);\n#if _POSIX_TRACE_EVENT_FILTER > 0\nCHECK(trace_event_set_t);\n#endif\nCHECK(trace_id_t);\n#endif\nCHECK(uid_t);\n#if __XSI_VISIBLE\nCHECK(useconds_t);\n#endif\n\nCHECK(ushort);\nCHECK(uint);\nCHECK(ulong);\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_uio.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/uio.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_uio_check_type_, __LINE__)\n\nCHECK(struct iovec);\nCHECK(size_t);\nCHECK(ssize_t);\n\nvoid sys_uio_check_iovec_fields(struct iovec *s)\n{\n    s->iov_base = (void*)0;\n    s->iov_len  = (size_t)0;\n}\n\nvoid sys_uio_check_functions()\n{\n    (void)readv(0, (const struct iovec *)1234, 0);\n    (void)writev(0, (const struct iovec *)1234, 0);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_un.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/un.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_un_check_type_, __LINE__)\n\nCHECK(struct sockaddr_un);\nCHECK(sa_family_t);\n\nvoid sys_un_check_sockaddr_un_fields(struct sockaddr_un *s)\n{\n    s->sun_family  = (sa_family_t)0;\n    s->sun_path[0] = (char)0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_utsname.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <sys/utsname.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_utsname_check_type_, __LINE__)\n\nCHECK(struct utsname);\n\nvoid sys_utsname_check_utsname_fields(struct utsname *s)\n{\n    s->sysname[0]  = (char)0;\n    s->nodename[0] = (char)0;\n    s->release[0]  = (char)0;\n    s->version[0]  = (char)0;\n    s->machine[0]  = (char)0;\n}\n\nvoid sys_utsname_check_functions(struct utsname *s)\n{\n    (void)uname(s);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/sys_wait.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n#include <android/api-level.h>\n#endif\n\n#if !__ANDROID__ || __ANDROID_API__ >= 9\n\n#include <sys/wait.h>\n\n#include \"gen/sys_wait.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(sys_wait_check_type_, __LINE__)\n\nCHECK(idtype_t);\nCHECK(id_t);\nCHECK(pid_t);\nCHECK(siginfo_t);\n\n#undef CHECK\n#define CHECK(v) sys_wait_idtype_t_helper(v)\n\nvoid sys_wait_idtype_t_helper(idtype_t t)\n{\n    (void)t;\n}\n\nvoid sys_wait_check_idtype_t_values()\n{\n    CHECK(P_ALL);\n    CHECK(P_PGID);\n    CHECK(P_PID);\n}\n\nvoid sys_wait_check_functions()\n{\n    (void)wait((int*)1234);\n    (void)waitid((idtype_t)0, (id_t)0, (siginfo_t*)1234, 0);\n    (void)waitpid((pid_t)0, (int*)1234, 0);\n}\n\n#endif /* !__ANDROID__ || __ANDROID_API__ >= 9 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/syslog.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <syslog.h>\n\n#include \"gen/syslog.inc\"\n\nvoid syslog_check_functions()\n{\n    (void)closelog();\n    (void)openlog((const char *)1234, 0, 0);\n    (void)setlogmask(0);\n    (void)syslog(0, \"%s\", \"string\");\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/tar.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <tar.h>\n\n#include \"gen/tar.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/termios.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <termios.h>\n\n#include \"gen/termios.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(termios_check_type_, __LINE__)\n\nCHECK(cc_t);\nCHECK(speed_t);\nCHECK(tcflag_t);\nCHECK(struct termios);\nCHECK(pid_t);\n\nvoid termios_check_fields(struct termios *s)\n{\n    s->c_iflag = (tcflag_t)0;\n    s->c_oflag = (tcflag_t)0;\n    s->c_cflag = (tcflag_t)0;\n    s->c_lflag = (tcflag_t)0;\n    s->c_cc[0] = (cc_t)0;\n}\n\nvoid termios_check_functions(struct termios *t, const struct termios *ct)\n{\n    (void)cfgetispeed(ct);\n    (void)cfgetospeed(ct);\n    (void)cfsetispeed(t, (speed_t)0);\n    (void)cfsetospeed(t, (speed_t)0);\n    (void)tcdrain(0);\n    (void)tcflow(0, 0);\n    (void)tcflush(0, 0);\n    (void)tcgetattr(0, t);\n    (void)tcgetsid(0);\n    (void)tcsendbreak(0, 0);\n    (void)tcsetattr(0, 0, ct);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/tgmath.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <tgmath.h>\n\n#include \"gen/tgmath.inc\"\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/time.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <time.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n#if __APPLE__ || __gnu_linux__\n#include <signal.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_TIME_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in time.h\n#endif\n#endif\n\n#include \"gen/time.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(time_check_type_, __LINE__)\n\nCHECK(clock_t);\nCHECK(size_t);\nCHECK(time_t);\n#if _POSIX_CLOCK_SELECTION > 0\nCHECK(clockid_t);\n#endif\n#if _POSIX_TIMERS > 0\nCHECK(timer_t);\n#endif\nCHECK(locale_t);\n#if _POSIX_CPUTIME > 0\nCHECK(pid_t);\n#endif\nCHECK(struct sigevent);\nCHECK(struct tm);\nCHECK(struct timespec);\n#if _POSIX_TIMERS > 0\nCHECK(struct itimerspec);\n#endif\n\n#undef CHECK\n#define CHECK(name) void JOIN(time_check_fields_, __LINE__)(name *s)\n\nCHECK(struct tm)\n{\n    s->tm_sec   = 0;\n    s->tm_min   = 0;\n    s->tm_hour  = 0;\n    s->tm_mday  = 0;\n    s->tm_mon   = 0;\n    s->tm_year  = 0;\n    s->tm_wday  = 0;\n    s->tm_yday  = 0;\n    s->tm_isdst = 0;\n}\n\nCHECK(struct timespec)\n{\n    s->tv_sec  = (time_t)0;\n    s->tv_nsec = (long)0;\n}\n\n#if _POSIX_TIMERS > 0\nCHECK(struct itimerspec)\n{\n    struct timespec *p1, *p2;\n    p1 = &s->it_interval;\n    p2 = &s->it_value;\n    (void)p1;\n    (void)p2;\n}\n#endif /* _POSIX_TIMERS > 0 */\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n\nstruct tm *getdate(const char *s)\n{\n    (void)s;\n    return (struct tm *)0;\n}\n\n#endif /* __ANDROID__ */\n\nvoid time_check_functions(struct tm *ptm, const struct tm *cptm,\n        struct timespec *pts, const struct timespec *cpts, locale_t l\n#if _POSIX_TIMERS > 0\n        , clockid_t ci\n        , timer_t ti\n#endif\n        )\n{\n    (void)asctime(cptm);\n    (void)asctime_r(cptm, (char*)1234);\n    (void)clock();\n#if _POSIX_CPUTIME > 0\n    (void)clock_getcpuclockid((pid_t)0, (clockid_t*)1234);\n#endif\n#if _POSIX_TIMERS > 0\n    (void)clock_getres(ci, pts);\n    (void)clock_gettime(ci, pts);\n#endif\n#if _POSIX_CLOCK_SELECTION > 0\n    (void)clock_nanosleep(ci, 0, cpts, pts);\n#endif\n#if _POSIX_TIMERS > 0\n    (void)clock_settime(ci, cpts);\n#endif\n    (void)ctime((const time_t *)1234);\n    (void)ctime_r((const time_t *)1234, (char *)1234);\n    (void)difftime((time_t)0, (time_t)0);\n    (void)getdate((const char *)1234);\n    (void)gmtime((const time_t *)1234);\n    (void)gmtime_r((const time_t *)1234, ptm);\n    (void)localtime((const time_t *)1234);\n    (void)localtime_r((const time_t *)1234, ptm);\n    (void)mktime(ptm);\n    (void)nanosleep(cpts, pts);\n    (void)strftime((char*)1234, (size_t)0, \"%a\", cptm);\n    (void)strftime_l((char*)1234, (size_t)0, \"%a\", cptm, l);\n    (void)strptime((const char *)1234, (const char *)1234, ptm);\n#if __APPLE__ || __ANDROID__\n    (void)strptime_l((const char *)1234, (const char *)1234, ptm, l);\n#endif\n    (void)time((time_t*)1234);\n#if _POSIX_TIMERS > 0\n    (void)timer_create(ci, (struct sigevent *)1234, &ti);\n    (void)timer_delete(ti);\n    (void)timer_getoverrun(ti);\n    (void)timer_gettime(ti, (struct itimerspec *)1234);\n    (void)timer_settime(ti, 0, (const struct itimerspec *)1234, (struct itimerspec *)1234);\n#endif\n    (void)tzset();\n}\n\nvoid time_check_variables(int *d, long *t, char **z)\n{\n    *d = daylight;\n    *t = timezone;\n    *z = tzname[0];\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/unistd.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n#include <android/api-level.h>\n#endif\n\n#if !__ANDROID__ || __ANDROID_API__ >= 9\n\n#include <unistd.h>\n\n#if __APPLE__\n#define CRYSTAX_POSIX_VERSION 200112L\n#define CRYSTAX_XOPEN_VERSION 600\n#elif __gnu_linux__\n#define CRYSTAX_POSIX_VERSION 200809L\n#define CRYSTAX_XOPEN_VERSION 700\n#elif __ANDROID__\n#define CRYSTAX_POSIX_VERSION 200809L\n#define CRYSTAX_XOPEN_VERSION 700\n#else\n#error Not supported platform\n#endif\n\n#if !defined(_POSIX_VERSION) || _POSIX_VERSION != CRYSTAX_POSIX_VERSION\n#error Wrong _POSIX_VERSION\n#endif\n\n#if !defined(_POSIX2_VERSION) || (_POSIX2_VERSION != -1 && _POSIX2_VERSION != CRYSTAX_POSIX_VERSION)\n#error Wrong _POSIX2_VERSION\n#endif\n\n#if !defined(_XOPEN_VERSION) || _XOPEN_VERSION != CRYSTAX_XOPEN_VERSION\n#error Wrong _XOPEN_VERSION\n#endif\n\n#include \"gen/unistd.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(unistd_check_type_, __LINE__)\n\nCHECK(size_t);\nCHECK(ssize_t);\nCHECK(uid_t);\nCHECK(gid_t);\nCHECK(off_t);\nCHECK(pid_t);\nCHECK(intptr_t);\n\n#if __ANDROID__\n/* WARNING!!! These functions not defined in Android, so we define empty stubs here */\n/* TODO: implement them in libcrystax */\n\nsize_t confstr(int name, char *buf, size_t len)\n{\n    (void)name;\n    (void)buf;\n    (void)len;\n    return 0;\n}\n\nchar *crypt(const char *key, const char *salt)\n{\n    (void)key;\n    (void)salt;\n    return (char*)0;\n}\n\nvoid encrypt(char block[64], int edflag)\n{\n    (void)block;\n    (void)edflag;\n}\n\nint faccessat(int fd, const char *path, int amode, int flag)\n{\n    (void)fd;\n    (void)path;\n    (void)amode;\n    (void)flag;\n    return -1;\n}\n\nint fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag)\n{\n    (void)fd;\n    (void)path;\n    (void)owner;\n    (void)group;\n    (void)flag;\n    return -1;\n}\n\nint fexecve(int fd, char *const argv[], char *const envp[])\n{\n    (void)fd;\n    (void)argv;\n    (void)envp;\n    return -1;\n}\n\nlong gethostid()\n{\n    return 0;\n}\n\nint getlogin_r(char *name, size_t namesize)\n{\n    (void)name;\n    (void)namesize;\n    return -1;\n}\n\npid_t getsid(pid_t pid)\n{\n    (void)pid;\n    return (pid_t)-1;\n}\n\nint linkat(int fd1, const char *path1, int fd2,\n           const char *path2, int flag)\n{\n    (void)fd1;\n    (void)path1;\n    (void)fd2;\n    (void)path2;\n    (void)flag;\n    return -1;\n}\n\nssize_t readlinkat(int fd, const char *path,\n                   char *buf, size_t bufsize)\n{\n    (void)fd;\n    (void)path;\n    (void)buf;\n    (void)bufsize;\n    return -1;\n}\n\nint symlinkat(const char *path1, int fd, const char *path2)\n{\n    (void)path1;\n    (void)fd;\n    (void)path2;\n    return -1;\n}\n\nint unlinkat(int fd, const char *path, int flag)\n{\n    (void)fd;\n    (void)path;\n    (void)flag;\n    return -1;\n}\n\n#endif /* __ANDROID__ */\n\nvoid unistd_check_functions()\n{\n    (void)access(\"\", 0);\n    (void)alarm((unsigned)0);\n    (void)chdir(\"\");\n    (void)chown(\"\", (uid_t)0, (gid_t)0);\n    (void)close(0);\n    (void)confstr(0, (char*)1234, (size_t)0);\n    (void)crypt(\"\", \"\");\n    (void)dup(0);\n    (void)dup2(0, 0);\n    (void)_exit(0);\n    (void)encrypt((char*)1234, 0);\n    (void)execl(\"\", \"\", NULL);\n    (void)execle(\"\", \"\", NULL, (char * const *)1234);\n    (void)execlp(\"\", \"\", NULL);\n    (void)execv(\"\", (char * const *)1234);\n    (void)execve(\"\", (char * const *)1234, (char * const *)1234);\n    (void)execvp(\"\", (char * const *)1234);\n#if HAVE_XXXAT\n    (void)faccessat(0, \"\", 0, 0);\n#endif\n    (void)fchdir(0);\n    (void)fchown(0, (uid_t)0, (gid_t)0);\n#if HAVE_XXXAT\n    (void)fchownat(0, \"\", (uid_t)0, (gid_t)0, 0);\n#endif\n#if _POSIX_SYNCHRONIZED_IO > 0\n    (void)fdatasync(0);\n#endif\n#if !__APPLE__\n    (void)fexecve(0, (char * const *)1234, (char * const *)1234);\n#endif\n    (void)fork();\n    (void)fpathconf(0, 0);\n#if _POSIX_FSYNC > 0\n    (void)fsync(0);\n#endif\n    (void)ftruncate(0, (off_t)0);\n    (void)getcwd((char*)1234, (size_t)0);\n    (void)getegid();\n    (void)geteuid();\n    (void)getgid();\n    (void)getgroups(0, (gid_t*)0);\n    (void)gethostid();\n    (void)gethostname((char*)1234, (size_t)0);\n    (void)getlogin();\n    (void)getlogin_r((char*)1234, (size_t)0);\n    (void)getopt(0, (char * const *)1234, \"\");\n    (void)getpgid((pid_t)0);\n    (void)getpgrp();\n    (void)getpid();\n    (void)getppid();\n    (void)getsid((pid_t)0);\n    (void)getuid();\n    (void)isatty(0);\n    (void)lchown(\"\", (uid_t)0, (gid_t)0);\n    (void)link(\"\", \"\");\n#if HAVE_XXXAT\n    (void)linkat(0, \"\", 0, \"\", 0);\n#endif\n    (void)lockf(0, 0, (off_t)0);\n    (void)lseek(0, (off_t)0, 0);\n    (void)nice(0);\n    (void)pathconf(\"\", 0);\n    (void)pause();\n    (void)pipe((int*)1234);\n    (void)pread(0, (void*)1234, (size_t)0, (off_t)0);\n    (void)pwrite(0, (const void *)1234, (size_t)0, (off_t)0);\n    (void)read(0, (void*)1234, (size_t)0);\n    (void)readlink(\"\", (char*)1234, (size_t)0);\n#if HAVE_XXXAT\n    (void)readlinkat(0, \"\", (char*)1234, (size_t)0);\n#endif\n    (void)rmdir(\"\");\n    (void)setegid((gid_t)0);\n    (void)seteuid((uid_t)0);\n    (void)setgid((gid_t)0);\n    (void)setpgid((pid_t)0, (pid_t)0);\n    (void)setpgrp();\n    (void)setregid((gid_t)0, (gid_t)0);\n    (void)setreuid((uid_t)0, (uid_t)0);\n    (void)setsid();\n    (void)setuid((uid_t)0);\n    (void)sleep((unsigned)0);\n    (void)swab((const void *)1234, (void*)1234, (size_t)0);\n    (void)symlink(\"\", \"\");\n#if HAVE_XXXAT\n    (void)symlinkat(\"\", 0, \"\");\n#endif\n    (void)sync();\n    (void)sysconf(0);\n    (void)tcgetpgrp(0);\n    (void)tcsetpgrp(0, (pid_t)0);\n    (void)truncate(\"\", (off_t)0);\n    (void)ttyname(0);\n    (void)ttyname_r(0, (char*)1234, (size_t)0);\n    (void)unlink(\"\");\n#if HAVE_XXXAT\n    (void)unlinkat(0, \"\", 0);\n#endif\n    (void)write(0, (const void *)1234, (size_t)0);\n}\n\n#endif /* !__ANDROID__ || __ANDROID_API__ >= 9 */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/utime.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <utime.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(utime_check_type_, __LINE__)\n\nCHECK(struct utimbuf);\nCHECK(time_t);\n\nvoid utime_check_utimbuf_fields(struct utimbuf *s)\n{\n    s->actime  = (time_t)0;\n    s->modtime = (time_t)0;\n}\n\nvoid utime_check_functions()\n{\n    (void)utime((const char *)1234, (const struct utimbuf *)1234);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/wchar.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <wchar.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n#if __APPLE__ || __gnu_linux__\n#include <stdarg.h> /* for va_start */\n#endif\n#if __gnu_linux__\n#include <stdio.h> /* for FILE */\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_WCHAR_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in wchar.h\n#endif\n#endif\n\n#include \"gen/wchar.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(wchar_check_type_, __LINE__)\n\nCHECK(FILE);\nCHECK(locale_t);\nCHECK(mbstate_t);\nCHECK(size_t);\nCHECK(va_list);\nCHECK(wchar_t);\nCHECK(wctype_t);\nCHECK(wint_t);\nCHECK(struct tm *);\n\nvoid wchar_check_functions(FILE *f, wint_t i, wctype_t t, locale_t l, ...)\n{\n    va_list args;\n    va_start(args, l);\n\n    (void)btowc(0);\n    (void)fgetwc(f);\n    (void)fgetws((wchar_t*)1234, 0, f);\n    (void)fputwc((wchar_t)0, f);\n    (void)fputws((const wchar_t *)1234, f);\n    (void)fwide(f, 0);\n    (void)fwprintf(f, L\"%d\", 0);\n    (void)fwscanf(f, L\"%d\", (int*)1234);\n    (void)getwc(f);\n    (void)getwchar();\n    (void)iswalnum(i);\n    (void)iswalpha(i);\n    (void)iswcntrl(i);\n    (void)iswctype(i, t);\n    (void)iswdigit(i);\n    (void)iswgraph(i);\n    (void)iswlower(i);\n    (void)iswprint(i);\n    (void)iswpunct(i);\n    (void)iswspace(i);\n    (void)iswupper(i);\n    (void)iswxdigit(i);\n    (void)mbrlen((const char *)1234, (size_t)0, (mbstate_t*)1234);\n    (void)mbrtowc((wchar_t*)1234, (const char *)1234, (size_t)0, (mbstate_t*)1234);\n    (void)mbsinit((const mbstate_t *)1234);\n    (void)mbsnrtowcs((wchar_t*)1234, (const char **)1234, (size_t)0, (size_t)0, (mbstate_t*)1234);\n    (void)mbsrtowcs((wchar_t*)1234, (const char **)1234, (size_t)0, (mbstate_t*)1234);\n#if !__APPLE__\n    (void)open_wmemstream((wchar_t**)1234, (size_t*)1234);\n#endif\n    (void)putwc((wchar_t)0, f);\n    (void)putwchar((wchar_t)0);\n    (void)swprintf((wchar_t*)1234, (size_t)0, L\"%d\", 0);\n    (void)swscanf((const wchar_t*)1234, L\"%d\", (int*)1234);\n    (void)towlower(i);\n    (void)towupper(i);\n    (void)ungetwc(i, f);\n    (void)vfwprintf(f, L\"%d\", args);\n    (void)vfwscanf(f, L\"%d\", args);\n    (void)vswprintf((wchar_t*)1234, (size_t)0, L\"%d\", args);\n    (void)vswscanf((const wchar_t*)1234, L\"%d\", args);\n    (void)vwprintf(L\"%s\", args);\n    (void)vwscanf(L\"%d\", args);\n#if !__gnu_linux__ && !(__APPLE__ && !defined(__MAC_10_7))\n    (void)wcpcpy((wchar_t*)1234, L\"\");\n    (void)wcpncpy((wchar_t*)1234, L\"\", (size_t)0);\n#endif\n    (void)wcrtomb((char*)1234, (wchar_t)0, (mbstate_t*)1234);\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)wcscasecmp(L\"\", L\"\");\n    (void)wcscasecmp_l(L\"\", L\"\", l);\n#endif\n    (void)wcscat((wchar_t*)1234, L\"\");\n    (void)wcschr(L\"\", (wchar_t)0);\n    (void)wcscmp(L\"\", L\"\");\n    (void)wcscoll(L\"\", L\"\");\n    (void)wcscoll_l(L\"\", L\"\", l);\n    (void)wcscpy((wchar_t*)1234, L\"\");\n    (void)wcscspn(L\"\", L\"\");\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)wcsdup(L\"\");\n#endif\n    (void)wcsftime((wchar_t*)1234, (size_t)0, L\"%s\", (const struct tm *)1234);\n    (void)wcslen(L\"\");\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)wcsncasecmp(L\"\", L\"\", (size_t)0);\n    (void)wcsncasecmp_l(L\"\", L\"\", (size_t)0, l);\n#endif\n    (void)wcsncat((wchar_t*)1234, L\"\", (size_t)0);\n    (void)wcsncmp(L\"\", L\"\", (size_t)0);\n    (void)wcsncpy((wchar_t*)1234, L\"\", (size_t)0);\n#if !__APPLE__ || defined(__MAC_10_7)\n    (void)wcsnlen(L\"\", (size_t)0);\n#endif\n    (void)wcsnrtombs((char*)1234, (const wchar_t **)1234, (size_t)0, (size_t)0, (mbstate_t*)1234);\n    (void)wcspbrk(L\"\", L\"\");\n    (void)wcsrchr(L\"\", (wchar_t)0);\n    (void)wcsrtombs((char*)1234, (const wchar_t **)1234, (size_t)0, (mbstate_t*)1234);\n    (void)wcsspn(L\"\", L\"\");\n    (void)wcsstr(L\"\", L\"\");\n    (void)wcstod(L\"\", (wchar_t**)1234);\n    (void)wcstof(L\"\", (wchar_t**)1234);\n    (void)wcstok((wchar_t*)1234, L\"\", (wchar_t**)1234);\n    (void)wcstol(L\"\", (wchar_t**)1234, 10);\n    (void)wcstold(L\"\", (wchar_t**)1234);\n    (void)wcstoll(L\"\", (wchar_t**)1234, 10);\n    (void)wcstoul(L\"\", (wchar_t**)1234, 10);\n    (void)wcstoull(L\"\", (wchar_t**)1234, 10);\n    (void)wcswidth(L\"\", (size_t)0);\n    (void)wcsxfrm((wchar_t*)1234, L\"\", (size_t)0);\n    (void)wcsxfrm_l((wchar_t*)1234, L\"\", (size_t)0, l);\n    (void)wctob(i);\n    (void)wctype(\"\");\n    (void)wcwidth((wchar_t)0);\n    (void)wmemchr(L\"\", L'a', (size_t)0);\n    (void)wmemcmp(L\"\", L\"\", (size_t)0);\n    (void)wmemcpy((wchar_t*)1234, L\"\", (size_t)0);\n    (void)wmemmove((wchar_t*)1234, L\"\", (size_t)0);\n    (void)wmemset((wchar_t*)1234, L'a', (size_t)0);\n    (void)wprintf(L\"%d\", 0);\n    (void)wscanf(L\"%d\", (int*)1234);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/wctype.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#include <wctype.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#if __ANDROID__\n#if !__LIBCRYSTAX_WCTYPE_H_XLOCALE_H_INCLUDED\n#error Extended locale support not enabled in wctype.h\n#endif\n#endif\n\n#if !defined(WEOF)\n#error WEOF not defined\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(wctype_check_type_, __LINE__)\n\nCHECK(wint_t);\nCHECK(wctrans_t);\nCHECK(wctype_t);\nCHECK(locale_t);\n\nvoid wctype_check_functions(wint_t i, wctype_t t, wctrans_t tr, locale_t l)\n{\n    (void)iswalnum(i);\n    (void)iswalnum_l(i, l);\n    (void)iswalpha(i);\n    (void)iswalpha_l(i, l);\n    (void)iswblank(i);\n    (void)iswblank_l(i, l);\n    (void)iswcntrl(i);\n    (void)iswcntrl_l(i, l);\n    (void)iswctype(i, t);\n    (void)iswctype_l(i, t, l);\n    (void)iswdigit(i);\n    (void)iswdigit_l(i, l);\n    (void)iswgraph(i);\n    (void)iswgraph_l(i, l);\n    (void)iswlower(i);\n    (void)iswlower_l(i, l);\n    (void)iswprint(i);\n    (void)iswprint_l(i, l);\n    (void)iswpunct(i);\n    (void)iswpunct_l(i, l);\n    (void)iswspace(i);\n    (void)iswspace_l(i, l);\n    (void)iswupper(i);\n    (void)iswupper_l(i, l);\n    (void)iswxdigit(i);\n    (void)iswxdigit_l(i, l);\n    (void)towctrans(i, tr);\n    (void)towctrans_l(i, tr, l);\n    (void)towlower(i);\n    (void)towlower_l(i, l);\n    (void)towupper(i);\n    (void)towupper_l(i, l);\n    (void)wctrans((const char *)1234);\n    (void)wctrans_l((const char *)1234, l);\n    (void)wctype((const char *)1234);\n    (void)wctype_l((const char *)1234, l);\n}\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/wordexp.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __ANDROID__\n/* WARNING!!! There is no wordexp.h in Android */\n\n#else /* !__ANDROID__ */\n\n#include <wordexp.h>\n\n#include \"gen/wordexp.inc\"\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(wordexp_check_type_, __LINE__)\n\nCHECK(wordexp_t);\nCHECK(size_t);\n\nvoid wordexp_check_wordexp_t_fields(wordexp_t *s)\n{\n    s->we_wordc = (size_t)0;\n    s->we_wordv = (char**)0;\n    s->we_offs  = (size_t)0;\n}\n\nvoid wordexp_check_functions()\n{\n    (void)wordexp((const char *)1234, (wordexp_t*)1234, 0);\n    (void)wordfree((wordexp_t*)1234);\n}\n\n#endif /* !__ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/xlocale.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __APPLE__ || __ANDROID__\n\n#include <xlocale.h>\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(xlocale_check_type_, __LINE__)\n\nCHECK(locale_t);\nCHECK(struct lconv);\n\nvoid xlocale_check_functions(locale_t l)\n{\n    (void)localeconv_l(l);\n    (void)duplocale(l);\n    (void)freelocale(l);\n    (void)newlocale(0, \"\", l);\n    (void)querylocale(0, l);\n    (void)uselocale(l);\n}\n\n#endif /* __APPLE__ || __ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-posix-interfaces/jni/xlocale2.c",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#if __APPLE__ || __ANDROID__\n\n/* Include all headers having extended locale support and check that xlocale functions from all headers available */\n#include <ctype.h>\n#include <inttypes.h>\n#include <langinfo.h>\n#include <monetary.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <wchar.h>\n#include <wctype.h>\n#if __APPLE__\n#include <xlocale.h>\n#endif\n\n#include \"helper.h\"\n\n#define CHECK(type) type JOIN(xlocale2_check_type_, __LINE__)\n\nCHECK(locale_t);\nCHECK(struct lconv);\n\nvoid xlocale2_check_functions(nl_item ni, locale_t l)\n{\n    /* ctype.h */\n    (void)isalnum_l(0, l);\n    (void)isdigit_l(0, l);\n    (void)isxdigit_l(0, l);\n    /* inttypes.h */\n    (void)strtoimax_l(\"\", (char**)1234, 10, l);\n    /* langinfo.h */\n    (void)nl_langinfo_l(ni, l);\n    /* monetary.h */\n    (void)strfmon_l((char*)1234, (size_t)0, l, \"%n\", 0.0);\n    /* stdio.h */\n    (void)printf_l(l, \"%d\", 0);\n    /* stdlib.h */\n    (void)strtol_l(\"\", (char**)1234, 10, l);\n    /* string.h */\n    (void)strcoll_l(\"\", \"\", l);\n    /* time.h */\n    (void)strftime_l((char*)1234, (size_t)0, \"%s\", (const struct tm *)1234, l);\n    /* wchar.h */\n    (void)wcstol_l(L\"\", (wchar_t**)1234, 10, l);\n    /* wctype.h */\n    (void)iswalnum_l((wint_t)0, l);\n    (void)iswdigit_l((wint_t)0, l);\n    (void)iswxdigit_l((wint_t)0, l);\n}\n\n#endif /* __APPLE__ || __ANDROID__ */\n"
  },
  {
    "path": "tests/build/crystax-test-prebuilt-macros/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-prebuilt-macros\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-test-prebuilt-macros/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/crystax-test-prebuilt-macros/jni/main.c",
    "content": "#ifndef __CRYSTAX__\n#error \"__CRYSTAX__ macro is undefined\"\n#endif\n\n#if __CRYSTAX__ != 1\n#error \"__CRYSTAX__ macro defined, but has value other than '1'\"\n#endif\n\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/crystax-test-sync_file_range/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := sync_file_range\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/crystax-test-sync_file_range/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/crystax-test-sync_file_range/jni/main.c",
    "content": "#include <fcntl.h>\n\nint main()\n{\n#if defined(SYNC_FILE_RANGE_WRITE ) || defined(SYNC_FILE_RANGE_WAIT_BEFORE)\n\n    int fd = open(\"file.txt\", O_WRONLY | O_CREAT);\n    sync_file_range(fd, 0, 0, SYNC_FILE_RANGE_WRITE);\n    sync_file_range(fd, 0, 0, SYNC_FILE_RANGE_WAIT_BEFORE);\n\n#endif\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/deprecate-__set_errno/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\n$NDK/ndk-build \"$@\"\nif [ $? -eq 0 ]; then\n    echo \"ERROR: Build succeed, but it should fail\" 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/fenv/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_fenv_c\nLOCAL_SRC_FILES := test_fenv.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_fenv_cpp\nLOCAL_SRC_FILES := test_fenv.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/fenv/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/fenv/jni/test_fenv.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <fenv.h>\n\nint main()\n{\n     FE_DIVBYZERO;\n}\n"
  },
  {
    "path": "tests/build/fenv/jni/test_fenv.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <fenv.h>\n\nint main()\n{\n     FE_DIVBYZERO;\n}\n"
  },
  {
    "path": "tests/build/flto/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := flto\nLOCAL_SRC_FILES := flto.c\nLOCAL_CFLAGS += -flto\nLOCAL_LDFLAGS += -flto\n\n# Clang LTO is only supported with gold. ARM64 still uses bfd by default, so\n# make sure this test uses gold when we're using clang.\nifneq ($(filter clang%,$(NDK_TOOLCHAIN_VERSION)),)\nLOCAL_CFLAGS += -fuse-ld=gold\nLOCAL_LDFLAGS += -fuse-ld=gold\nendif\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/flto/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/flto/jni/flto.c",
    "content": "int foo() {\n    return 0;\n}\n\nint main()\n{\n    return foo();\n}\n"
  },
  {
    "path": "tests/build/flto/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\", \"clang3.8\"]}\n"
  },
  {
    "path": "tests/build/flto/test_config.py",
    "content": "# Shut up a warning about us not being a real package.\nfrom __future__ import absolute_import\nimport platform\n\n\ndef match_unsupported(abi, _platform, toolchain, _subtest=None):\n    # Clang does LTO via gold plugin, but gold doesn't support MIPS yet.\n    if toolchain == 'clang' and abi.startswith('mips'):\n        return '{} {}'.format(toolchain, abi)\n\n    # We only support LTO from Linux.\n    if platform.system() != 'Linux':\n        return platform.system()\n\n    return None\n"
  },
  {
    "path": "tests/build/gnustl-force-all/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl_forced_all\nLOCAL_SRC_FILES := forced_all.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/gnustl-force-all/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\nAPP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti\n"
  },
  {
    "path": "tests/build/gnustl-force-all/jni/forced_all.cpp",
    "content": "/* This file should be compiled with exceptions and without RTTI */\n#ifndef __EXCEPTIONS\n#error This source file SHOULD be built with -fexceptions!\n#endif\n\n#include <typeinfo>\n#include <stdio.h>\n\nclass Foo { int x; };\n\nint main(void) {\n    printf(\"%p\\n\", &typeid(Foo)); // will fail without -frtti\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/gnustl-force-exceptions/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\n$NDK/ndk-build \"$@\"\nif [ $? -eq 0 ]; then\n    echo \"ERROR: Build succeed, but it should fail\" 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/gnustl-force-none/build.sh",
    "content": "#!/bin/bash\n\nif [ -z \"$NDK\" ]; then\n    echo \"ERROR: NDK is not defined\" 1>&2\n    exit 1\nfi\n\n$NDK/ndk-build \"$@\"\nif [ $? -eq 0 ]; then\n    echo \"ERROR: Build succeed, but it should fail\" 1>&2\n    exit 1\nfi\n\nexit 0\n"
  },
  {
    "path": "tests/build/gnustl-force-rtti/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl_forced_rtti\nLOCAL_SRC_FILES := forced_rtti.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/gnustl-force-rtti/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\nAPP_GNUSTL_FORCE_CPP_FEATURES := rtti"
  },
  {
    "path": "tests/build/gnustl-force-rtti/jni/forced_rtti.cpp",
    "content": "/* This file should be compiled without exceptions and with RTTI */\n#ifdef __EXCEPTIONS\n#error This source file SHOULD NOT be built with -fexceptions!\n#endif\n\n#include <typeinfo>\n#include <stdio.h>\n\nclass Foo { int x; };\n\nint main(void) {\n    printf(\"%p\\n\", &typeid(Foo)); // will fail without -frtti\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/import-install/README",
    "content": "The purpose of this test is to check that imported shared libraries\nare properly installed to the target location, i.e. libs/<abi>/\n\n"
  },
  {
    "path": "tests/build/import-install/build.sh",
    "content": "cd `dirname $0`\nPWD=$(pwd)\n\n# Update NDK_MODULE_PATH so we can find our imported modules\nexport NDK_MODULE_PATH=\"$PWD\"\n\n# Build everything\n$NDK/ndk-build \"$@\"\n\n# Extract ABIs list from parameters, we're looking for something like APP_ABI=<something>\nPARAM_ABIS=$(echo \"$@\" | tr ' ' '\\n' | grep -e \"^APP_ABI=\")\nPARAM_ABIS=${PARAM_ABIS##APP_ABI=}\nif [ -z \"$PARAM_ABIS\" ]; then\n    echo \"NO ABIS in param '$@'\"\n    ABIS=\"armeabi-v7a x86 mips armeabi-v7a-hard\"\nelse\n    echo \"FOUND ABIS in param '$@': $PARAM_ABIS\"\n    ABIS=\"$PARAM_ABIS\"\nfi\n\n# Now ensure that all files were installed to all supported ABIs\nANDROID_NDK_ROOT=$NDK\nNDK_BUILDTOOLS_PATH=$NDK/build/instruments\nsource $NDK_BUILDTOOLS_PATH/prebuilt-common.sh\nMISSING=\nfor ABI in $ABIS; do\n    DIR=$PWD/libs/$ABI\n    SUFFIX=$(get_lib_suffix_for_abi $ABI)\n    for FILENAME in libfoo$SUFFIX libpath1$SUFFIX libpath2$SUFFIX; do\n        FILE=$DIR/$FILENAME\n        if [ ! -f \"$FILE\" ]; then\n            MISSING=\"$MISSING $FILE\"\n\tfi\n    done\ndone\n\n# In case of missing files, error out\nif [ \"$MISSING\" ]; then\n    echo \"ERROR: Missing files in build tree:\"\n    for FILE in $MISSING; do echo \"  $FILE\"; done\n    exit 1\nfi\n\n# Otherwise, our test is good\nexit 0\n"
  },
  {
    "path": "tests/build/import-install/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := main.c\nLOCAL_SHARED_LIBRARIES := libpath1\ninclude $(BUILD_SHARED_LIBRARY)\n\n$(call import-module,path1)\n\n"
  },
  {
    "path": "tests/build/import-install/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/import-install/jni/main.c",
    "content": "#include \"path1.h\"\n\nint  foo(int  x)\n{\n\treturn path1(x) - 16;\n}\n\n"
  },
  {
    "path": "tests/build/import-install/path1/Android.mk",
    "content": "# This is a trivial shared library that will be imported\n# by the main project's binary. Note that it imports\n# another library\n#\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libpath1\nLOCAL_SRC_FILES := path1.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SHARED_LIBRARIES := libpath2\ninclude $(BUILD_SHARED_LIBRARY)\n\n$(call import-module,path2)\n"
  },
  {
    "path": "tests/build/import-install/path1/path1.c",
    "content": "#include \"path1.h\"\n#include \"path2.h\"\n\nint  path1(int x)\n{\n    return path2(x + 1);\n}\n\n"
  },
  {
    "path": "tests/build/import-install/path1/path1.h",
    "content": "#ifndef PATH1_H\n#define PATH1_H\nextern int path1(int x);\n#endif\n"
  },
  {
    "path": "tests/build/import-install/path2/Android.mk",
    "content": "# This is a trivial shared library that will be imported\n# by 'libpath1', and hence by the project's main binary\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libpath2\nLOCAL_SRC_FILES := path2.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\ninclude $(BUILD_SHARED_LIBRARY)\n\n"
  },
  {
    "path": "tests/build/import-install/path2/path2.c",
    "content": "#include \"path2.h\"\n\nint path2(int x)\n{\n\treturn x*42;\n}\n\n"
  },
  {
    "path": "tests/build/import-install/path2/path2.h",
    "content": "#ifndef PATH2_H\n#define PATH2_H\nextern int path2(int x);\n#endif\n"
  },
  {
    "path": "tests/build/import-static/README",
    "content": "The purpose of this check is to verify that static library imports\nare transitive, i.e. that if foo imports a static library bar, which\nimports another static library zoo, then libfoo.so will be linked\nagainst both libbar.a and libzoo.a properly.\n\n"
  },
  {
    "path": "tests/build/import-static/bar/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar\nLOCAL_SRC_FILES := bar.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/import-static/bar/bar.c",
    "content": "#include \"bar.h\"\n\nint bar(int x)\n{\n    return x+32;\n}\n"
  },
  {
    "path": "tests/build/import-static/bar/bar.h",
    "content": "#ifndef BAR_H\n#define BAR_H\n\nextern int bar(int x);\n\n#endif"
  },
  {
    "path": "tests/build/import-static/build.sh",
    "content": "cd `dirname $0`\nPWD=$(pwd)\n\n# Update NDK_MODULE_PATH so we can find our imported modules\nexport NDK_MODULE_PATH=\"$PWD\"\n\n# Build everything\n$NDK/ndk-build \"$@\"\n"
  },
  {
    "path": "tests/build/import-static/foo/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_STATIC_LIBRARIES := libbar\ninclude $(BUILD_STATIC_LIBRARY)\n\n$(call import-module,bar)\n\n"
  },
  {
    "path": "tests/build/import-static/foo/foo.c",
    "content": "#include \"foo.h\"\n#include \"bar.h\"\n\nint foo(int x)\n{\n    return bar(x)*2;\n}\n"
  },
  {
    "path": "tests/build/import-static/foo/foo.h",
    "content": "#ifndef _FOO_H\n#define _FOO_H\n\nextern int foo(int x);\n\n#endif"
  },
  {
    "path": "tests/build/import-static/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_static_imports\nLOCAL_SRC_FILES := main.c\nLOCAL_STATIC_LIBRARIES := libfoo\ninclude $(BUILD_SHARED_LIBRARY)\n\n$(call import-module,foo)\n\n"
  },
  {
    "path": "tests/build/import-static/jni/main.c",
    "content": "#include \"foo.h\"\n\nint  goop(int x)\n{\n    return foo(x-5)*7;\n}\n"
  },
  {
    "path": "tests/build/issue-gcc59052-partial-specialization-of-template/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue-gcc59052-partial-specialization-of-template\nLOCAL_SRC_FILES := issue-gcc59052-partial-specialization-of-template.cc\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue-gcc59052-partial-specialization-of-template/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue-gcc59052-partial-specialization-of-template/jni/issue-gcc59052-partial-specialization-of-template.cc",
    "content": "namespace N {\n\ntemplate <class T>\nstruct C {\n    template <class U, T t>\n    struct Implementation {};\n};\n\ntemplate <class T>\ntemplate <T t>\nstruct C<T>::Implementation<void, t> {\n    static void method() {}\n};\n\n}\n\nint main() {\n    N::C<int>::Implementation<void, 0>::method();\n}\n"
  },
  {
    "path": "tests/build/issue17144-byteswap/build.sh",
    "content": "# Check if APP_ABI=armeabi-v7a use \"rev\" instructions for __swapXX\n# See https://android-review.googlesource.com/#/c/17144\n#\n\nfail_panic ()\n{\n    if [ $? != 0 ] ; then\n        echo \"ERROR: $@\"\n        exit 1\n    fi\n}\n\nfor opt do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n    APP_ABI=*)\n        APP_ABI=$optarg\n        ;;\n    esac\ndone\n\nif [ -z \"$APP_ABI\" -o \"$APP_ABI\" = \"all\" -o \"$APP_ABI\" != \"${APP_ABI%%armeabi-v7a*}\" ]; then\n    # checking armeabi-v7a\n    $NDK/ndk-build -B APP_ABI=armeabi-v7a APP_CFLAGS=-save-temps NDK_DEBUG=1\n    fail_panic \"can't compile for APP_ABI=armeabi-v7a\"\n    grep -qw rev16 issue17144-byteswap.s\n    fail_panic \"armeabi-v7a doesn't use rev16 instruction for __swap16()\"\n    grep -qw rev issue17144-byteswap.s\n    fail_panic \"armeabi-v7a doesn't use rev instruction for __swap32()\"\nfi\n\nif [ -z \"$APP_ABI\" -o \"$APP_ABI\" = \"all\" -o \"$APP_ABI\" != \"${APP_ABI%%x86}\" ]; then\n    # checking x86\n    $NDK/ndk-build -B APP_ABI=x86 APP_CFLAGS=-save-temps NDK_DEBUG=1\n    fail_panic \"can't compile for x86\"\n    grep -qw 'ro[lr]w' issue17144-byteswap.s\n    fail_panic \"x86 doesn't use rorw instruction for __swap16()\"\n    grep -qw bswap issue17144-byteswap.s\n    test $? -eq 0 || grep -qw bswapl issue17144-byteswap.s\n    fail_panic \"x86 doesn't use bswap instruction for __swap32()\"\nfi\n\nif [ -z \"$APP_ABI\" -o \"$APP_ABI\" = \"all\" -o \"$APP_ABI\" != \"${APP_ABI%%mips}\" ]; then\n    # checking mips\n    # Note that MD_SWAP in machine/endian.h is only defined for r2.  Add\n    # -mips32r2 because default Android toolchain support r1\n    $NDK/ndk-build -B APP_ABI=mips APP_CFLAGS=\"-save-temps -mips32r2\" NDK_DEBUG=1\n    fail_panic \"can't compile for mips\"\n    grep -qw wsbh issue17144-byteswap.s\n    fail_panic \"mips doesn't use wsbh instruction for __swap16()\"\n    grep -wA1 wsbh issue17144-byteswap.s | egrep -qw 'rot?r'\n    fail_panic \"mips doesn't use wsbh/rotr instruction for __swap32()\"\nfi\n\nrm -rf libs obj issue17144-byteswap.*\n"
  },
  {
    "path": "tests/build/issue17144-byteswap/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue17144-byteswap\nLOCAL_SRC_FILES := issue17144-byteswap.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue17144-byteswap/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue17144-byteswap/jni/issue17144-byteswap.c",
    "content": "#include <inttypes.h>\n#include <sys/endian.h>\n\nint16_t I16;\nint32_t I32;\nint64_t I64;\n\nint16_t f16(int16_t i)\n{\n    return __swap16(i);\n}\n\nint32_t f32(int32_t i)\n{\n    return __swap32(i);\n}\n\n/* No need to check __swap64 because in all supported\n   32-bit architectures it's implemented with two __swap32\nint64_t f64(int64_t i)\n{\n    return __swap64(i);\n}\n*/\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue17144-byteswap/test_config.py",
    "content": "def match_broken(abi, platform, toolchain, subtest=None):\n    if toolchain == 'clang' and abi.startswith('armeabi-v7a'):\n        return '{} {}'.format(toolchain, abi), 'http://b/26091410'\n    return None, None\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/Android.mk",
    "content": "LOCAL_PATH:= $(call my-dir)\n\n\ninclude $(CLEAR_VARS)\n\nLOCAL_ALLOW_UNDEFINED_SYMBOLS := true\n\nLOCAL_MODULE:= png\n\nLOCAL_CFLAGS := -I$(LOCAL_PATH) -O0 -g\n\nLOCAL_SRC_FILES := $(notdir $(filter-out %/example.c, $(wildcard $(LOCAL_PATH)/*.c)))\n\nLOCAL_LDLIBS :=\n\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/png.h",
    "content": "\n/* png.h - header file for PNG reference library\n *\n * libpng version 1.5.13 - September 27, 2012\n * Copyright (c) 1998-2012 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * This code is released under the libpng license (See LICENSE, below)\n *\n * Authors and maintainers:\n *   libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat\n *   libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger\n *   libpng versions 0.97, January 1998, through 1.5.13 - September 27, 2012: Glenn\n *   See also \"Contributing Authors\", below.\n *\n * Note about libpng version numbers:\n *\n *   Due to various miscommunications, unforeseen code incompatibilities\n *   and occasional factors outside the authors' control, version numbering\n *   on the library has not always been consistent and straightforward.\n *   The following table summarizes matters since version 0.89c, which was\n *   the first widely used release:\n *\n *    source                 png.h  png.h  shared-lib\n *    version                string   int  version\n *    -------                ------ -----  ----------\n *    0.89c \"1.0 beta 3\"     0.89      89  1.0.89\n *    0.90  \"1.0 beta 4\"     0.90      90  0.90  [should have been 2.0.90]\n *    0.95  \"1.0 beta 5\"     0.95      95  0.95  [should have been 2.0.95]\n *    0.96  \"1.0 beta 6\"     0.96      96  0.96  [should have been 2.0.96]\n *    0.97b \"1.00.97 beta 7\" 1.00.97   97  1.0.1 [should have been 2.0.97]\n *    0.97c                  0.97      97  2.0.97\n *    0.98                   0.98      98  2.0.98\n *    0.99                   0.99      98  2.0.99\n *    0.99a-m                0.99      99  2.0.99\n *    1.00                   1.00     100  2.1.0 [100 should be 10000]\n *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]\n *    1.0.1       png.h string is   10001  2.1.0\n *    1.0.1a-e    identical to the  10002  from here on, the shared library\n *    1.0.2       source version)   10002  is 2.V where V is the source code\n *    1.0.2a-b                      10003  version, except as noted.\n *    1.0.3                         10003\n *    1.0.3a-d                      10004\n *    1.0.4                         10004\n *    1.0.4a-f                      10005\n *    1.0.5 (+ 2 patches)           10005\n *    1.0.5a-d                      10006\n *    1.0.5e-r                      10100 (not source compatible)\n *    1.0.5s-v                      10006 (not binary compatible)\n *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)\n *    1.0.6d-f                      10007 (still binary incompatible)\n *    1.0.6g                        10007\n *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)\n *    1.0.6i                        10007  10.6i\n *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)\n *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)\n *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)\n *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)\n *    1.0.7                    1    10007  (still compatible)\n *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4\n *    1.0.8rc1                 1    10008  2.1.0.8rc1\n *    1.0.8                    1    10008  2.1.0.8\n *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6\n *    1.0.9rc1                 1    10009  2.1.0.9rc1\n *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10\n *    1.0.9rc2                 1    10009  2.1.0.9rc2\n *    1.0.9                    1    10009  2.1.0.9\n *    1.0.10beta1              1    10010  2.1.0.10beta1\n *    1.0.10rc1                1    10010  2.1.0.10rc1\n *    1.0.10                   1    10010  2.1.0.10\n *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3\n *    1.0.11rc1                1    10011  2.1.0.11rc1\n *    1.0.11                   1    10011  2.1.0.11\n *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2\n *    1.0.12rc1                2    10012  2.1.0.12rc1\n *    1.0.12                   2    10012  2.1.0.12\n *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)\n *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2\n *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5\n *    1.2.0rc1                 3    10200  3.1.2.0rc1\n *    1.2.0                    3    10200  3.1.2.0\n *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4\n *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2\n *    1.2.1                    3    10201  3.1.2.1\n *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6\n *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1\n *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1\n *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1\n *    1.0.13                  10    10013  10.so.0.1.0.13\n *    1.2.2                   12    10202  12.so.0.1.2.2\n *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6\n *    1.2.3                   12    10203  12.so.0.1.2.3\n *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3\n *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1\n *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1\n *    1.0.14                  10    10014  10.so.0.1.0.14\n *    1.2.4                   13    10204  12.so.0.1.2.4\n *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2\n *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3\n *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3\n *    1.0.15                  10    10015  10.so.0.1.0.15\n *    1.2.5                   13    10205  12.so.0.1.2.5\n *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4\n *    1.0.16                  10    10016  10.so.0.1.0.16\n *    1.2.6                   13    10206  12.so.0.1.2.6\n *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2\n *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1\n *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1\n *    1.0.17                  10    10017  12.so.0.1.0.17\n *    1.2.7                   13    10207  12.so.0.1.2.7\n *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5\n *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5\n *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5\n *    1.0.18                  10    10018  12.so.0.1.0.18\n *    1.2.8                   13    10208  12.so.0.1.2.8\n *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3\n *    1.2.9beta4-11           13    10209  12.so.0.9[.0]\n *    1.2.9rc1                13    10209  12.so.0.9[.0]\n *    1.2.9                   13    10209  12.so.0.9[.0]\n *    1.2.10beta1-7           13    10210  12.so.0.10[.0]\n *    1.2.10rc1-2             13    10210  12.so.0.10[.0]\n *    1.2.10                  13    10210  12.so.0.10[.0]\n *    1.4.0beta1-5            14    10400  14.so.0.0[.0]\n *    1.2.11beta1-4           13    10211  12.so.0.11[.0]\n *    1.4.0beta7-8            14    10400  14.so.0.0[.0]\n *    1.2.11                  13    10211  12.so.0.11[.0]\n *    1.2.12                  13    10212  12.so.0.12[.0]\n *    1.4.0beta9-14           14    10400  14.so.0.0[.0]\n *    1.2.13                  13    10213  12.so.0.13[.0]\n *    1.4.0beta15-36          14    10400  14.so.0.0[.0]\n *    1.4.0beta37-87          14    10400  14.so.14.0[.0]\n *    1.4.0rc01               14    10400  14.so.14.0[.0]\n *    1.4.0beta88-109         14    10400  14.so.14.0[.0]\n *    1.4.0rc02-08            14    10400  14.so.14.0[.0]\n *    1.4.0                   14    10400  14.so.14.0[.0]\n *    1.4.1beta01-03          14    10401  14.so.14.1[.0]\n *    1.4.1rc01               14    10401  14.so.14.1[.0]\n *    1.4.1beta04-12          14    10401  14.so.14.1[.0]\n *    1.4.1                   14    10401  14.so.14.1[.0]\n *    1.4.2                   14    10402  14.so.14.2[.0]\n *    1.4.3                   14    10403  14.so.14.3[.0]\n *    1.4.4                   14    10404  14.so.14.4[.0]\n *    1.5.0beta01-58          15    10500  15.so.15.0[.0]\n *    1.5.0rc01-07            15    10500  15.so.15.0[.0]\n *    1.5.0                   15    10500  15.so.15.0[.0]\n *    1.5.1beta01-11          15    10501  15.so.15.1[.0]\n *    1.5.1rc01-02            15    10501  15.so.15.1[.0]\n *    1.5.1                   15    10501  15.so.15.1[.0]\n *    1.5.2beta01-03          15    10502  15.so.15.2[.0]\n *    1.5.2rc01-03            15    10502  15.so.15.2[.0]\n *    1.5.2                   15    10502  15.so.15.2[.0]\n *    1.5.3beta01-10          15    10503  15.so.15.3[.0]\n *    1.5.3rc01-02            15    10503  15.so.15.3[.0]\n *    1.5.3beta11             15    10503  15.so.15.3[.0]\n *    1.5.3 [omitted]\n *    1.5.4beta01-08          15    10504  15.so.15.4[.0]\n *    1.5.4rc01               15    10504  15.so.15.4[.0]\n *    1.5.4                   15    10504  15.so.15.4[.0]\n *    1.5.5beta01-08          15    10505  15.so.15.5[.0]\n *    1.5.5rc01               15    10505  15.so.15.5[.0]\n *    1.5.5                   15    10505  15.so.15.5[.0]\n *    1.5.6beta01-07          15    10506  15.so.15.6[.0]\n *    1.5.6rc01-03            15    10506  15.so.15.6[.0]\n *    1.5.6                   15    10506  15.so.15.6[.0]\n *    1.5.7beta01-05          15    10507  15.so.15.7[.0]\n *    1.5.7rc01-03            15    10507  15.so.15.7[.0]\n *    1.5.7                   15    10507  15.so.15.7[.0]\n *    1.5.8beta01             15    10508  15.so.15.8[.0]\n *    1.5.8rc01               15    10508  15.so.15.8[.0]\n *    1.5.8                   15    10508  15.so.15.8[.0]\n *    1.5.9beta01-02          15    10509  15.so.15.9[.0]\n *    1.5.9rc01               15    10509  15.so.15.9[.0]\n *    1.5.9                   15    10509  15.so.15.9[.0]\n *    1.5.10beta01-05         15    10510  15.so.15.10[.0]\n *    1.5.10                  15    10510  15.so.15.10[.0]\n *    1.5.11beta01            15    10511  15.so.15.11[.0]\n *    1.5.11rc01-05           15    10511  15.so.15.11[.0]\n *    1.5.11                  15    10511  15.so.15.11[.0]\n *    1.5.12                  15    10512  15.so.15.12[.0]\n *    1.5.13beta01-02         15    10513  15.so.15.13[.0]\n *    1.5.13rc01              15    10513  15.so.15.13[.0]\n *    1.5.13                  15    10513  15.so.15.13[.0]\n *\n *   Henceforth the source version will match the shared-library major\n *   and minor numbers; the shared-library major version number will be\n *   used for changes in backward compatibility, as it is intended.  The\n *   PNG_LIBPNG_VER macro, which is not used within libpng but is available\n *   for applications, is an unsigned integer of the form xyyzz corresponding\n *   to the source version x.y.z (leading zeros in y and z).  Beta versions\n *   were given the previous public release number plus a letter, until\n *   version 1.0.6j; from then on they were given the upcoming public\n *   release number plus \"betaNN\" or \"rcNN\".\n *\n *   Binary incompatibility exists only when applications make direct access\n *   to the info_ptr or png_ptr members through png.h, and the compiled\n *   application is loaded with a different version of the library.\n *\n *   DLLNUM will change each time there are forward or backward changes\n *   in binary compatibility (e.g., when a new feature is added).\n *\n * See libpng-manual.txt or libpng.3 for more information.  The PNG\n * specification is available as a W3C Recommendation and as an ISO\n * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/\n */\n\n/*\n * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:\n *\n * If you modify libpng you may insert additional notices immediately following\n * this sentence.\n *\n * This code is released under the libpng license.\n *\n * libpng versions 1.2.6, August 15, 2004, through 1.5.13, September 27, 2012, are\n * Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are\n * distributed according to the same disclaimer and license as libpng-1.2.5\n * with the following individual added to the list of Contributing Authors:\n *\n *    Cosmin Truta\n *\n * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are\n * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are\n * distributed according to the same disclaimer and license as libpng-1.0.6\n * with the following individuals added to the list of Contributing Authors:\n *\n *    Simon-Pierre Cadieux\n *    Eric S. Raymond\n *    Gilles Vollant\n *\n * and with the following additions to the disclaimer:\n *\n *    There is no warranty against interference with your enjoyment of the\n *    library or against infringement.  There is no warranty that our\n *    efforts or the library will fulfill any of your particular purposes\n *    or needs.  This library is provided with all faults, and the entire\n *    risk of satisfactory quality, performance, accuracy, and effort is with\n *    the user.\n *\n * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are\n * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are\n * distributed according to the same disclaimer and license as libpng-0.96,\n * with the following individuals added to the list of Contributing Authors:\n *\n *    Tom Lane\n *    Glenn Randers-Pehrson\n *    Willem van Schaik\n *\n * libpng versions 0.89, June 1996, through 0.96, May 1997, are\n * Copyright (c) 1996, 1997 Andreas Dilger\n * Distributed according to the same disclaimer and license as libpng-0.88,\n * with the following individuals added to the list of Contributing Authors:\n *\n *    John Bowler\n *    Kevin Bracey\n *    Sam Bushell\n *    Magnus Holmgren\n *    Greg Roelofs\n *    Tom Tanner\n *\n * libpng versions 0.5, May 1995, through 0.88, January 1996, are\n * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n *\n * For the purposes of this copyright and license, \"Contributing Authors\"\n * is defined as the following set of individuals:\n *\n *    Andreas Dilger\n *    Dave Martindale\n *    Guy Eric Schalnat\n *    Paul Schmidt\n *    Tim Wegner\n *\n * The PNG Reference Library is supplied \"AS IS\".  The Contributing Authors\n * and Group 42, Inc. disclaim all warranties, expressed or implied,\n * including, without limitation, the warranties of merchantability and of\n * fitness for any purpose.  The Contributing Authors and Group 42, Inc.\n * assume no liability for direct, indirect, incidental, special, exemplary,\n * or consequential damages, which may result from the use of the PNG\n * Reference Library, even if advised of the possibility of such damage.\n *\n * Permission is hereby granted to use, copy, modify, and distribute this\n * source code, or portions hereof, for any purpose, without fee, subject\n * to the following restrictions:\n *\n *   1. The origin of this source code must not be misrepresented.\n *\n *   2. Altered versions must be plainly marked as such and must not\n *      be misrepresented as being the original source.\n *\n *   3. This Copyright notice may not be removed or altered from\n *      any source or altered source distribution.\n *\n * The Contributing Authors and Group 42, Inc. specifically permit, without\n * fee, and encourage the use of this source code as a component to\n * supporting the PNG file format in commercial products.  If you use this\n * source code in a product, acknowledgment is not required but would be\n * appreciated.\n */\n\n/*\n * A \"png_get_copyright\" function is available, for convenient use in \"about\"\n * boxes and the like:\n *\n *     printf(\"%s\", png_get_copyright(NULL));\n *\n * Also, the PNG logo (in PNG format, of course) is supplied in the\n * files \"pngbar.png\" and \"pngbar.jpg (88x31) and \"pngnow.png\" (98x31).\n */\n\n/*\n * Libpng is OSI Certified Open Source Software.  OSI Certified is a\n * certification mark of the Open Source Initiative.\n */\n\n/*\n * The contributing authors would like to thank all those who helped\n * with testing, bug fixes, and patience.  This wouldn't have been\n * possible without all of you.\n *\n * Thanks to Frank J. T. Wojcik for helping with the documentation.\n */\n\n/*\n * Y2K compliance in libpng:\n * =========================\n *\n *    September 27, 2012\n *\n *    Since the PNG Development group is an ad-hoc body, we can't make\n *    an official declaration.\n *\n *    This is your unofficial assurance that libpng from version 0.71 and\n *    upward through 1.5.13 are Y2K compliant.  It is my belief that\n *    earlier versions were also Y2K compliant.\n *\n *    Libpng only has two year fields.  One is a 2-byte unsigned integer\n *    that will hold years up to 65535.  The other holds the date in text\n *    format, and will hold years up to 9999.\n *\n *    The integer is\n *        \"png_uint_16 year\" in png_time_struct.\n *\n *    The string is\n *        \"char time_buffer[29]\" in png_struct.  This will be no\n *    longer used in libpng-1.6.0 and will be removed from libpng-1.7.0.\n *\n *    There are seven time-related functions:\n *        png.c: png_convert_to_rfc_1123() in png.c\n *          (formerly png_convert_to_rfc_1152() in error)\n *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c\n *        png_convert_from_time_t() in pngwrite.c\n *        png_get_tIME() in pngget.c\n *        png_handle_tIME() in pngrutil.c, called in pngread.c\n *        png_set_tIME() in pngset.c\n *        png_write_tIME() in pngwutil.c, called in pngwrite.c\n *\n *    All handle dates properly in a Y2K environment.  The\n *    png_convert_from_time_t() function calls gmtime() to convert from system\n *    clock time, which returns (year - 1900), which we properly convert to\n *    the full 4-digit year.  There is a possibility that applications using\n *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()\n *    function, or that they are incorrectly passing only a 2-digit year\n *    instead of \"year - 1900\" into the png_convert_from_struct_tm() function,\n *    but this is not under our control.  The libpng documentation has always\n *    stated that it works with 4-digit years, and the APIs have been\n *    documented as such.\n *\n *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned\n *    integer to hold the year, and can hold years as large as 65535.\n *\n *    zlib, upon which libpng depends, is also Y2K compliant.  It contains\n *    no date-related code.\n *\n *       Glenn Randers-Pehrson\n *       libpng maintainer\n *       PNG Development Group\n */\n\n#ifndef PNG_H\n#define PNG_H\n\n/* This is not the place to learn how to use libpng. The file libpng-manual.txt\n * describes how to use libpng, and the file example.c summarizes it\n * with some code on which to build.  This file is useful for looking\n * at the actual function definitions and structure components.\n *\n * If you just need to read a PNG file and don't want to read the documentation\n * skip to the end of this file and read the section entitled 'simplified API'.\n */\n\n/* Version information for png.h - this should match the version in png.c */\n#define PNG_LIBPNG_VER_STRING \"1.5.13\"\n#define PNG_HEADER_VERSION_STRING \\\n     \" libpng version 1.5.13 - September 27, 2012\\n\"\n\n#define PNG_LIBPNG_VER_SONUM   15\n#define PNG_LIBPNG_VER_DLLNUM  15\n\n/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */\n#define PNG_LIBPNG_VER_MAJOR   1\n#define PNG_LIBPNG_VER_MINOR   5\n#define PNG_LIBPNG_VER_RELEASE 13\n\n/* This should match the numeric part of the final component of\n * PNG_LIBPNG_VER_STRING, omitting any leading zero:\n */\n\n#define PNG_LIBPNG_VER_BUILD  0\n\n/* Release Status */\n#define PNG_LIBPNG_BUILD_ALPHA    1\n#define PNG_LIBPNG_BUILD_BETA     2\n#define PNG_LIBPNG_BUILD_RC       3\n#define PNG_LIBPNG_BUILD_STABLE   4\n#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7\n\n/* Release-Specific Flags */\n#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with\n                                       PNG_LIBPNG_BUILD_STABLE only */\n#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with\n                                       PNG_LIBPNG_BUILD_SPECIAL */\n#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with\n                                       PNG_LIBPNG_BUILD_PRIVATE */\n\n#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE\n\n/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.\n * We must not include leading zeros.\n * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only\n * version 1.0.0 was mis-numbered 100 instead of 10000).  From\n * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release\n */\n#define PNG_LIBPNG_VER 10513 /* 1.5.13 */\n\n/* Library configuration: these options cannot be changed after\n * the library has been built.\n */\n#ifndef PNGLCONF_H\n    /* If pnglibconf.h is missing, you can\n     * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h\n     */\n#   include \"pnglibconf.h\"\n#endif\n\n#ifndef PNG_VERSION_INFO_ONLY\n#  ifndef PNG_BUILDING_SYMBOL_TABLE\n  /*\n   *   Standard header files (not needed for the version info or while\n   *   building symbol table -- see scripts/pnglibconf.dfa)\n   */\n#    ifdef PNG_SETJMP_SUPPORTED\n#      include <setjmp.h>\n#    endif\n\n    /* Need the time information for converting tIME chunks, it\n     * defines struct tm:\n     */\n#    ifdef PNG_CONVERT_tIME_SUPPORTED\n       /* \"time.h\" functions are not supported on all operating systems */\n#      include <time.h>\n#    endif\n#  endif\n\n/* Machine specific configuration. */\n#  include \"pngconf.h\"\n#endif\n\n/*\n * Added at libpng-1.2.8\n *\n * Ref MSDN: Private as priority over Special\n * VS_FF_PRIVATEBUILD File *was not* built using standard release\n * procedures. If this value is given, the StringFileInfo block must\n * contain a PrivateBuild string.\n *\n * VS_FF_SPECIALBUILD File *was* built by the original company using\n * standard release procedures but is a variation of the standard\n * file of the same version number. If this value is given, the\n * StringFileInfo block must contain a SpecialBuild string.\n */\n\n#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */\n#  define PNG_LIBPNG_BUILD_TYPE \\\n       (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)\n#else\n#  ifdef PNG_LIBPNG_SPECIALBUILD\n#    define PNG_LIBPNG_BUILD_TYPE \\\n         (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)\n#  else\n#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)\n#  endif\n#endif\n\n#ifndef PNG_VERSION_INFO_ONLY\n\n/* Inhibit C++ name-mangling for libpng functions but not for system calls. */\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/* Version information for C files, stored in png.c.  This had better match\n * the version above.\n */\n#define png_libpng_ver png_get_header_ver(NULL)\n\n/* This file is arranged in several sections:\n *\n * 1. Any configuration options that can be specified by for the application\n *    code when it is built.  (Build time configuration is in pnglibconf.h)\n * 2. Type definitions (base types are defined in pngconf.h), structure\n *    definitions.\n * 3. Exported library functions.\n *\n * The library source code has additional files (principally pngpriv.h) that\n * allow configuration of the library.\n */\n/* Section 1: run time configuration\n * See pnglibconf.h for build time configuration\n *\n * Run time configuration allows the application to choose between\n * implementations of certain arithmetic APIs.  The default is set\n * at build time and recorded in pnglibconf.h, but it is safe to\n * override these (and only these) settings.  Note that this won't\n * change what the library does, only application code, and the\n * settings can (and probably should) be made on a per-file basis\n * by setting the #defines before including png.h\n *\n * Use macros to read integers from PNG data or use the exported\n * functions?\n *   PNG_USE_READ_MACROS: use the macros (see below)  Note that\n *     the macros evaluate their argument multiple times.\n *   PNG_NO_USE_READ_MACROS: call the relevant library function.\n *\n * Use the alternative algorithm for compositing alpha samples that\n * does not use division?\n *   PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'\n *      algorithm.\n *   PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.\n *\n * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is\n * false?\n *   PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error\n *      APIs to png_warning.\n * Otherwise the calls are mapped to png_error.\n */\n\n/* Section 2: type definitions, including structures and compile time\n * constants.\n * See pngconf.h for base types that vary by machine/system\n */\n\n/* This triggers a compiler error in png.c, if png.c and png.h\n * do not agree upon the version number.\n */\ntypedef char* png_libpng_version_1_5_13;\n\n/* Three color definitions.  The order of the red, green, and blue, (and the\n * exact size) is not important, although the size of the fields need to\n * be png_byte or png_uint_16 (as defined below).\n */\ntypedef struct png_color_struct\n{\n   png_byte red;\n   png_byte green;\n   png_byte blue;\n} png_color;\ntypedef png_color FAR * png_colorp;\ntypedef PNG_CONST png_color FAR * png_const_colorp;\ntypedef png_color FAR * FAR * png_colorpp;\n\ntypedef struct png_color_16_struct\n{\n   png_byte index;    /* used for palette files */\n   png_uint_16 red;   /* for use in red green blue files */\n   png_uint_16 green;\n   png_uint_16 blue;\n   png_uint_16 gray;  /* for use in grayscale files */\n} png_color_16;\ntypedef png_color_16 FAR * png_color_16p;\ntypedef PNG_CONST png_color_16 FAR * png_const_color_16p;\ntypedef png_color_16 FAR * FAR * png_color_16pp;\n\ntypedef struct png_color_8_struct\n{\n   png_byte red;   /* for use in red green blue files */\n   png_byte green;\n   png_byte blue;\n   png_byte gray;  /* for use in grayscale files */\n   png_byte alpha; /* for alpha channel files */\n} png_color_8;\ntypedef png_color_8 FAR * png_color_8p;\ntypedef PNG_CONST png_color_8 FAR * png_const_color_8p;\ntypedef png_color_8 FAR * FAR * png_color_8pp;\n\n/*\n * The following two structures are used for the in-core representation\n * of sPLT chunks.\n */\ntypedef struct png_sPLT_entry_struct\n{\n   png_uint_16 red;\n   png_uint_16 green;\n   png_uint_16 blue;\n   png_uint_16 alpha;\n   png_uint_16 frequency;\n} png_sPLT_entry;\ntypedef png_sPLT_entry FAR * png_sPLT_entryp;\ntypedef PNG_CONST png_sPLT_entry FAR * png_const_sPLT_entryp;\ntypedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;\n\n/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples\n *  occupy the LSB of their respective members, and the MSB of each member\n *  is zero-filled.  The frequency member always occupies the full 16 bits.\n */\n\ntypedef struct png_sPLT_struct\n{\n   png_charp name;           /* palette name */\n   png_byte depth;           /* depth of palette samples */\n   png_sPLT_entryp entries;  /* palette entries */\n   png_int_32 nentries;      /* number of palette entries */\n} png_sPLT_t;\ntypedef png_sPLT_t FAR * png_sPLT_tp;\ntypedef PNG_CONST png_sPLT_t FAR * png_const_sPLT_tp;\ntypedef png_sPLT_t FAR * FAR * png_sPLT_tpp;\n\n#ifdef PNG_TEXT_SUPPORTED\n/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,\n * and whether that contents is compressed or not.  The \"key\" field\n * points to a regular zero-terminated C string.  The \"text\" fields can be a\n * regular C string, an empty string, or a NULL pointer.\n * However, the structure returned by png_get_text() will always contain\n * the \"text\" field as a regular zero-terminated C string (possibly\n * empty), never a NULL pointer, so it can be safely used in printf() and\n * other string-handling functions.  Note that the \"itxt_length\", \"lang\", and\n * \"lang_key\" members of the structure only exist when the library is built\n * with iTXt chunk support.  Prior to libpng-1.4.0 the library was built by\n * default without iTXt support. Also note that when iTXt *is* supported,\n * the \"lang\" and \"lang_key\" fields contain NULL pointers when the\n * \"compression\" field contains * PNG_TEXT_COMPRESSION_NONE or\n * PNG_TEXT_COMPRESSION_zTXt. Note that the \"compression value\" is not the\n * same as what appears in the PNG tEXt/zTXt/iTXt chunk's \"compression flag\"\n * which is always 0 or 1, or its \"compression method\" which is always 0.\n */\ntypedef struct png_text_struct\n{\n   int  compression;       /* compression value:\n                             -1: tEXt, none\n                              0: zTXt, deflate\n                              1: iTXt, none\n                              2: iTXt, deflate  */\n   png_charp key;          /* keyword, 1-79 character description of \"text\" */\n   png_charp text;         /* comment, may be an empty string (ie \"\")\n                              or a NULL pointer */\n   png_size_t text_length; /* length of the text string */\n   png_size_t itxt_length; /* length of the itxt string */\n   png_charp lang;         /* language code, 0-79 characters\n                              or a NULL pointer */\n   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more\n                              chars or a NULL pointer */\n} png_text;\ntypedef png_text FAR * png_textp;\ntypedef PNG_CONST png_text FAR * png_const_textp;\ntypedef png_text FAR * FAR * png_textpp;\n#endif\n\n/* Supported compression types for text in PNG files (tEXt, and zTXt).\n * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */\n#define PNG_TEXT_COMPRESSION_NONE_WR -3\n#define PNG_TEXT_COMPRESSION_zTXt_WR -2\n#define PNG_TEXT_COMPRESSION_NONE    -1\n#define PNG_TEXT_COMPRESSION_zTXt     0\n#define PNG_ITXT_COMPRESSION_NONE     1\n#define PNG_ITXT_COMPRESSION_zTXt     2\n#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */\n\n/* png_time is a way to hold the time in an machine independent way.\n * Two conversions are provided, both from time_t and struct tm.  There\n * is no portable way to convert to either of these structures, as far\n * as I know.  If you know of a portable way, send it to me.  As a side\n * note - PNG has always been Year 2000 compliant!\n */\ntypedef struct png_time_struct\n{\n   png_uint_16 year; /* full year, as in, 1995 */\n   png_byte month;   /* month of year, 1 - 12 */\n   png_byte day;     /* day of month, 1 - 31 */\n   png_byte hour;    /* hour of day, 0 - 23 */\n   png_byte minute;  /* minute of hour, 0 - 59 */\n   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */\n} png_time;\ntypedef png_time FAR * png_timep;\ntypedef PNG_CONST png_time FAR * png_const_timep;\ntypedef png_time FAR * FAR * png_timepp;\n\n#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \\\n    defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)\n/* png_unknown_chunk is a structure to hold queued chunks for which there is\n * no specific support.  The idea is that we can use this to queue\n * up private chunks for output even though the library doesn't actually\n * know about their semantics.\n */\ntypedef struct png_unknown_chunk_t\n{\n    png_byte name[5];\n    png_byte *data;\n    png_size_t size;\n\n    /* libpng-using applications should NOT directly modify this byte. */\n    png_byte location; /* mode of operation at read time */\n}\n\n\npng_unknown_chunk;\ntypedef png_unknown_chunk FAR * png_unknown_chunkp;\ntypedef PNG_CONST png_unknown_chunk FAR * png_const_unknown_chunkp;\ntypedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;\n#endif\n\n/* Values for the unknown chunk location byte */\n\n#define PNG_HAVE_IHDR  0x01\n#define PNG_HAVE_PLTE  0x02\n#define PNG_AFTER_IDAT 0x08\n\n/* The complete definition of png_info has, as of libpng-1.5.0,\n * been moved into a separate header file that is not accessible to\n * applications.  Read libpng-manual.txt or libpng.3 for more info.\n */\ntypedef struct png_info_def png_info;\ntypedef png_info FAR * png_infop;\ntypedef PNG_CONST png_info FAR * png_const_infop;\ntypedef png_info FAR * FAR * png_infopp;\n\n/* Maximum positive integer used in PNG is (2^31)-1 */\n#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)\n#define PNG_UINT_32_MAX ((png_uint_32)(-1))\n#define PNG_SIZE_MAX ((png_size_t)(-1))\n\n/* These are constants for fixed point values encoded in the\n * PNG specification manner (x100000)\n */\n#define PNG_FP_1    100000\n#define PNG_FP_HALF  50000\n#define PNG_FP_MAX  ((png_fixed_point)0x7fffffffL)\n#define PNG_FP_MIN  (-PNG_FP_MAX)\n\n/* These describe the color_type field in png_info. */\n/* color type masks */\n#define PNG_COLOR_MASK_PALETTE    1\n#define PNG_COLOR_MASK_COLOR      2\n#define PNG_COLOR_MASK_ALPHA      4\n\n/* color types.  Note that not all combinations are legal */\n#define PNG_COLOR_TYPE_GRAY 0\n#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)\n#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)\n#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)\n#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)\n/* aliases */\n#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA\n#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA\n\n/* This is for compression type. PNG 1.0-1.2 only define the single type. */\n#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */\n#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE\n\n/* This is for filter type. PNG 1.0-1.2 only define the single type. */\n#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */\n#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */\n#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE\n\n/* These are for the interlacing type.  These values should NOT be changed. */\n#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */\n#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */\n#define PNG_INTERLACE_LAST        2 /* Not a valid value */\n\n/* These are for the oFFs chunk.  These values should NOT be changed. */\n#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */\n#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */\n#define PNG_OFFSET_LAST           2 /* Not a valid value */\n\n/* These are for the pCAL chunk.  These values should NOT be changed. */\n#define PNG_EQUATION_LINEAR       0 /* Linear transformation */\n#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */\n#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */\n#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */\n#define PNG_EQUATION_LAST         4 /* Not a valid value */\n\n/* These are for the sCAL chunk.  These values should NOT be changed. */\n#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */\n#define PNG_SCALE_METER           1 /* meters per pixel */\n#define PNG_SCALE_RADIAN          2 /* radians per pixel */\n#define PNG_SCALE_LAST            3 /* Not a valid value */\n\n/* These are for the pHYs chunk.  These values should NOT be changed. */\n#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */\n#define PNG_RESOLUTION_METER      1 /* pixels/meter */\n#define PNG_RESOLUTION_LAST       2 /* Not a valid value */\n\n/* These are for the sRGB chunk.  These values should NOT be changed. */\n#define PNG_sRGB_INTENT_PERCEPTUAL 0\n#define PNG_sRGB_INTENT_RELATIVE   1\n#define PNG_sRGB_INTENT_SATURATION 2\n#define PNG_sRGB_INTENT_ABSOLUTE   3\n#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */\n\n/* This is for text chunks */\n#define PNG_KEYWORD_MAX_LENGTH     79\n\n/* Maximum number of entries in PLTE/sPLT/tRNS arrays */\n#define PNG_MAX_PALETTE_LENGTH    256\n\n/* These determine if an ancillary chunk's data has been successfully read\n * from the PNG header, or if the application has filled in the corresponding\n * data in the info_struct to be written into the output file.  The values\n * of the PNG_INFO_<chunk> defines should NOT be changed.\n */\n#define PNG_INFO_gAMA 0x0001\n#define PNG_INFO_sBIT 0x0002\n#define PNG_INFO_cHRM 0x0004\n#define PNG_INFO_PLTE 0x0008\n#define PNG_INFO_tRNS 0x0010\n#define PNG_INFO_bKGD 0x0020\n#define PNG_INFO_hIST 0x0040\n#define PNG_INFO_pHYs 0x0080\n#define PNG_INFO_oFFs 0x0100\n#define PNG_INFO_tIME 0x0200\n#define PNG_INFO_pCAL 0x0400\n#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */\n#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */\n#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */\n#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */\n#define PNG_INFO_IDAT 0x8000   /* ESR, 1.0.6 */\n\n/* This is used for the transformation routines, as some of them\n * change these values for the row.  It also should enable using\n * the routines for other purposes.\n */\ntypedef struct png_row_info_struct\n{\n   png_uint_32 width;    /* width of row */\n   png_size_t rowbytes;  /* number of bytes in row */\n   png_byte color_type;  /* color type of row */\n   png_byte bit_depth;   /* bit depth of row */\n   png_byte channels;    /* number of channels (1, 2, 3, or 4) */\n   png_byte pixel_depth; /* bits per pixel (depth * channels) */\n} png_row_info;\n\ntypedef png_row_info FAR * png_row_infop;\ntypedef png_row_info FAR * FAR * png_row_infopp;\n\n/* The complete definition of png_struct has, as of libpng-1.5.0,\n * been moved into a separate header file that is not accessible to\n * applications.  Read libpng-manual.txt or libpng.3 for more info.\n */\ntypedef struct png_struct_def png_struct;\ntypedef PNG_CONST png_struct FAR * png_const_structp;\ntypedef png_struct FAR * png_structp;\n\n/* These are the function types for the I/O functions and for the functions\n * that allow the user to override the default I/O functions with his or her\n * own.  The png_error_ptr type should match that of user-supplied warning\n * and error functions, while the png_rw_ptr type should match that of the\n * user read/write data functions.  Note that the 'write' function must not\n * modify the buffer it is passed. The 'read' function, on the other hand, is\n * expected to return the read data in the buffer.\n */\ntypedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));\ntypedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));\ntypedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));\ntypedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,\n    int));\ntypedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,\n    int));\n\n#ifdef PNG_PROGRESSIVE_READ_SUPPORTED\ntypedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));\ntypedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));\n\n/* The following callback receives png_uint_32 row_number, int pass for the\n * png_bytep data of the row.  When transforming an interlaced image the\n * row number is the row number within the sub-image of the interlace pass, so\n * the value will increase to the height of the sub-image (not the full image)\n * then reset to 0 for the next pass.\n *\n * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to\n * find the output pixel (x,y) given an interlaced sub-image pixel\n * (row,col,pass).  (See below for these macros.)\n */\ntypedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,\n    png_uint_32, int));\n#endif\n\n#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \\\n    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)\ntypedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,\n    png_bytep));\n#endif\n\n#ifdef PNG_USER_CHUNKS_SUPPORTED\ntypedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,\n    png_unknown_chunkp));\n#endif\n#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED\ntypedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp));\n#endif\n\n#ifdef PNG_SETJMP_SUPPORTED\n/* This must match the function definition in <setjmp.h>, and the application\n * must include this before png.h to obtain the definition of jmp_buf.  The\n * function is required to be PNG_NORETURN, but this is not checked.  If the\n * function does return the application will crash via an abort() or similar\n * system level call.\n *\n * If you get a warning here while building the library you may need to make\n * changes to ensure that pnglibconf.h records the calling convention used by\n * your compiler.  This may be very difficult - try using a different compiler\n * to build the library!\n */\nPNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);\n#endif\n\n/* Transform masks for the high-level interface */\n#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */\n#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */\n#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */\n#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */\n#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */\n#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */\n#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */\n#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */\n#define PNG_TRANSFORM_BGR            0x0080    /* read and write */\n#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */\n#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */\n#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */\n#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */\n/* Added to libpng-1.2.34 */\n#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER\n#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */\n/* Added to libpng-1.4.0 */\n#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */\n/* Added to libpng-1.5.4 */\n#define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */\n#define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */\n\n/* Flags for MNG supported features */\n#define PNG_FLAG_MNG_EMPTY_PLTE     0x01\n#define PNG_FLAG_MNG_FILTER_64      0x04\n#define PNG_ALL_MNG_FEATURES        0x05\n\n/* NOTE: prior to 1.5 these functions had no 'API' style declaration,\n * this allowed the zlib default functions to be used on Windows\n * platforms.  In 1.5 the zlib default malloc (which just calls malloc and\n * ignores the first argument) should be completely compatible with the\n * following.\n */\ntypedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,\n    png_alloc_size_t));\ntypedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));\n\ntypedef png_struct FAR * FAR * png_structpp;\n\n/* Section 3: exported functions\n * Here are the function definitions most commonly used.  This is not\n * the place to find out how to use libpng.  See libpng-manual.txt for the\n * full explanation, see example.c for the summary.  This just provides\n * a simple one line description of the use of each function.\n *\n * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in\n * pngconf.h and in the *.dfn files in the scripts directory.\n *\n *   PNG_EXPORT(ordinal, type, name, (args));\n *\n *       ordinal:    ordinal that is used while building\n *                   *.def files. The ordinal value is only\n *                   relevant when preprocessing png.h with\n *                   the *.dfn files for building symbol table\n *                   entries, and are removed by pngconf.h.\n *       type:       return type of the function\n *       name:       function name\n *       args:       function arguments, with types\n *\n * When we wish to append attributes to a function prototype we use\n * the PNG_EXPORTA() macro instead.\n *\n *   PNG_EXPORTA(ordinal, type, name, (args), attributes);\n *\n *       ordinal, type, name, and args: same as in PNG_EXPORT().\n *       attributes: function attributes\n */\n\n/* Returns the version number of the library */\nPNG_EXPORT(1, png_uint_32, png_access_version_number, (void));\n\n/* Tell lib we have already handled the first <num_bytes> magic bytes.\n * Handling more than 8 bytes from the beginning of the file is an error.\n */\nPNG_EXPORT(2, void, png_set_sig_bytes, (png_structp png_ptr, int num_bytes));\n\n/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a\n * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG\n * signature, and non-zero otherwise.  Having num_to_check == 0 or\n * start > 7 will always fail (ie return non-zero).\n */\nPNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,\n    png_size_t num_to_check));\n\n/* Simple signature checking function.  This is the same as calling\n * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).\n */\n#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))\n\n/* Allocate and initialize png_ptr struct for reading, and any other memory. */\nPNG_EXPORTA(4, png_structp, png_create_read_struct,\n    (png_const_charp user_png_ver, png_voidp error_ptr,\n    png_error_ptr error_fn, png_error_ptr warn_fn),\n    PNG_ALLOCATED);\n\n/* Allocate and initialize png_ptr struct for writing, and any other memory */\nPNG_EXPORTA(5, png_structp, png_create_write_struct,\n    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,\n    png_error_ptr warn_fn),\n    PNG_ALLOCATED);\n\nPNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,\n    (png_const_structp png_ptr));\n\nPNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structp png_ptr,\n    png_size_t size));\n\n/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp\n * match up.\n */\n#ifdef PNG_SETJMP_SUPPORTED\n/* This function returns the jmp_buf built in to *png_ptr.  It must be\n * supplied with an appropriate 'longjmp' function to use on that jmp_buf\n * unless the default error function is overridden in which case NULL is\n * acceptable.  The size of the jmp_buf is checked against the actual size\n * allocated by the library - the call will return NULL on a mismatch\n * indicating an ABI mismatch.\n */\nPNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structp png_ptr,\n    png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));\n#  define png_jmpbuf(png_ptr) \\\n      (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))\n#else\n#  define png_jmpbuf(png_ptr) \\\n      (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)\n#endif\n/* This function should be used by libpng applications in place of\n * longjmp(png_ptr->jmpbuf, val).  If longjmp_fn() has been set, it\n * will use it; otherwise it will call PNG_ABORT().  This function was\n * added in libpng-1.5.0.\n */\nPNG_EXPORTA(9, void, png_longjmp, (png_structp png_ptr, int val),\n    PNG_NORETURN);\n\n#ifdef PNG_READ_SUPPORTED\n/* Reset the compression stream */\nPNG_EXPORT(10, int, png_reset_zstream, (png_structp png_ptr));\n#endif\n\n/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */\n#ifdef PNG_USER_MEM_SUPPORTED\nPNG_EXPORTA(11, png_structp, png_create_read_struct_2,\n    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,\n    png_error_ptr warn_fn,\n    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),\n    PNG_ALLOCATED);\nPNG_EXPORTA(12, png_structp, png_create_write_struct_2,\n    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,\n    png_error_ptr warn_fn,\n    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),\n    PNG_ALLOCATED);\n#endif\n\n/* Write the PNG file signature. */\nPNG_EXPORT(13, void, png_write_sig, (png_structp png_ptr));\n\n/* Write a PNG chunk - size, type, (optional) data, CRC. */\nPNG_EXPORT(14, void, png_write_chunk, (png_structp png_ptr, png_const_bytep\n    chunk_name, png_const_bytep data, png_size_t length));\n\n/* Write the start of a PNG chunk - length and chunk name. */\nPNG_EXPORT(15, void, png_write_chunk_start, (png_structp png_ptr,\n    png_const_bytep chunk_name, png_uint_32 length));\n\n/* Write the data of a PNG chunk started with png_write_chunk_start(). */\nPNG_EXPORT(16, void, png_write_chunk_data, (png_structp png_ptr,\n    png_const_bytep data, png_size_t length));\n\n/* Finish a chunk started with png_write_chunk_start() (includes CRC). */\nPNG_EXPORT(17, void, png_write_chunk_end, (png_structp png_ptr));\n\n/* Allocate and initialize the info structure */\nPNG_EXPORTA(18, png_infop, png_create_info_struct, (png_structp png_ptr),\n    PNG_ALLOCATED);\n\nPNG_EXPORT(19, void, png_info_init_3, (png_infopp info_ptr,\n    png_size_t png_info_struct_size));\n\n/* Writes all the PNG information before the image. */\nPNG_EXPORT(20, void, png_write_info_before_PLTE,\n    (png_structp png_ptr, png_infop info_ptr));\nPNG_EXPORT(21, void, png_write_info,\n    (png_structp png_ptr, png_infop info_ptr));\n\n#ifdef PNG_SEQUENTIAL_READ_SUPPORTED\n/* Read the information before the actual image data. */\nPNG_EXPORT(22, void, png_read_info,\n    (png_structp png_ptr, png_infop info_ptr));\n#endif\n\n#ifdef PNG_TIME_RFC1123_SUPPORTED\nPNG_EXPORT(23, png_const_charp, png_convert_to_rfc1123,\n    (png_structp png_ptr,\n    png_const_timep ptime));\n#endif\n\n#ifdef PNG_CONVERT_tIME_SUPPORTED\n/* Convert from a struct tm to png_time */\nPNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime,\n    PNG_CONST struct tm FAR * ttime));\n\n/* Convert from time_t to png_time.  Uses gmtime() */\nPNG_EXPORT(25, void, png_convert_from_time_t,\n    (png_timep ptime, time_t ttime));\n#endif /* PNG_CONVERT_tIME_SUPPORTED */\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\n/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */\nPNG_EXPORT(26, void, png_set_expand, (png_structp png_ptr));\nPNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structp png_ptr));\nPNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structp png_ptr));\nPNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\n/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion\n * of a tRNS chunk if present.\n */\nPNG_EXPORT(221, void, png_set_expand_16, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)\n/* Use blue, green, red order for pixels. */\nPNG_EXPORT(30, void, png_set_bgr, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\n/* Expand the grayscale to 24-bit RGB if necessary. */\nPNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n/* Reduce RGB to grayscale. */\n#define PNG_ERROR_ACTION_NONE  1\n#define PNG_ERROR_ACTION_WARN  2\n#define PNG_ERROR_ACTION_ERROR 3\n#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/\n\nPNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr,\n    int error_action, double red, double green))\nPNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr,\n    int error_action, png_fixed_point red, png_fixed_point green))\n\nPNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp\n    png_ptr));\n#endif\n\n#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED\nPNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,\n    png_colorp palette));\n#endif\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\n/* How the alpha channel is interpreted - this affects how the color channels of\n * a PNG file are returned when an alpha channel, or tRNS chunk in a palette\n * file, is present.\n *\n * This has no effect on the way pixels are written into a PNG output\n * datastream. The color samples in a PNG datastream are never premultiplied\n * with the alpha samples.\n *\n * The default is to return data according to the PNG specification: the alpha\n * channel is a linear measure of the contribution of the pixel to the\n * corresponding composited pixel.  The gamma encoded color channels must be\n * scaled according to the contribution and to do this it is necessary to undo\n * the encoding, scale the color values, perform the composition and reencode\n * the values.  This is the 'PNG' mode.\n *\n * The alternative is to 'associate' the alpha with the color information by\n * storing color channel values that have been scaled by the alpha.  The\n * advantage is that the color channels can be resampled (the image can be\n * scaled) in this form.  The disadvantage is that normal practice is to store\n * linear, not (gamma) encoded, values and this requires 16-bit channels for\n * still images rather than the 8-bit channels that are just about sufficient if\n * gamma encoding is used.  In addition all non-transparent pixel values,\n * including completely opaque ones, must be gamma encoded to produce the final\n * image.  This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the\n * latter being the two common names for associated alpha color channels.)\n *\n * Since it is not necessary to perform arithmetic on opaque color values so\n * long as they are not to be resampled and are in the final color space it is\n * possible to optimize the handling of alpha by storing the opaque pixels in\n * the PNG format (adjusted for the output color space) while storing partially\n * opaque pixels in the standard, linear, format.  The accuracy required for\n * standard alpha composition is relatively low, because the pixels are\n * isolated, therefore typically the accuracy loss in storing 8-bit linear\n * values is acceptable.  (This is not true if the alpha channel is used to\n * simulate transparency over large areas - use 16 bits or the PNG mode in\n * this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is\n * treated as opaque only if the alpha value is equal to the maximum value.\n *\n * The final choice is to gamma encode the alpha channel as well.  This is\n * broken because, in practice, no implementation that uses this choice\n * correctly undoes the encoding before handling alpha composition.  Use this\n * choice only if other serious errors in the software or hardware you use\n * mandate it; the typical serious error is for dark halos to appear around\n * opaque areas of the composited PNG image because of arithmetic overflow.\n *\n * The API function png_set_alpha_mode specifies which of these choices to use\n * with an enumerated 'mode' value and the gamma of the required output:\n */\n#define PNG_ALPHA_PNG           0 /* according to the PNG standard */\n#define PNG_ALPHA_STANDARD      1 /* according to Porter/Duff */\n#define PNG_ALPHA_ASSOCIATED    1 /* as above; this is the normal practice */\n#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */\n#define PNG_ALPHA_OPTIMIZED     2 /* 'PNG' for opaque pixels, else 'STANDARD' */\n#define PNG_ALPHA_BROKEN        3 /* the alpha channel is gamma encoded */\n\nPNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structp png_ptr, int mode,\n    double output_gamma))\nPNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structp png_ptr,\n    int mode, png_fixed_point output_gamma))\n#endif\n\n#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED)\n/* The output_gamma value is a screen gamma in libpng terminology: it expresses\n * how to decode the output values, not how they are encoded.  The values used\n * correspond to the normal numbers used to describe the overall gamma of a\n * computer display system; for example 2.2 for an sRGB conformant system.  The\n * values are scaled by 100000 in the _fixed version of the API (so 220000 for\n * sRGB.)\n *\n * The inverse of the value is always used to provide a default for the PNG file\n * encoding if it has no gAMA chunk and if png_set_gamma() has not been called\n * to override the PNG gamma information.\n *\n * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode\n * opaque pixels however pixels with lower alpha values are not encoded,\n * regardless of the output gamma setting.\n *\n * When the standard Porter Duff handling is requested with mode 1 the output\n * encoding is set to be linear and the output_gamma value is only relevant\n * as a default for input data that has no gamma information.  The linear output\n * encoding will be overridden if png_set_gamma() is called - the results may be\n * highly unexpected!\n *\n * The following numbers are derived from the sRGB standard and the research\n * behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of\n * 0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing\n * correction required to take account of any differences in the color\n * environment of the original scene and the intended display environment; the\n * value expresses how to *decode* the image for display, not how the original\n * data was *encoded*.\n *\n * sRGB provides a peg for the PNG standard by defining a viewing environment.\n * sRGB itself, and earlier TV standards, actually use a more complex transform\n * (a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is\n * limited to simple power laws.)  By saying that an image for direct display on\n * an sRGB conformant system should be stored with a gAMA chunk value of 45455\n * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification\n * makes it possible to derive values for other display systems and\n * environments.\n *\n * The Mac value is deduced from the sRGB based on an assumption that the actual\n * extra viewing correction used in early Mac display systems was implemented as\n * a power 1.45 lookup table.\n *\n * Any system where a programmable lookup table is used or where the behavior of\n * the final display device characteristics can be changed requires system\n * specific code to obtain the current characteristic.  However this can be\n * difficult and most PNG gamma correction only requires an approximate value.\n *\n * By default, if png_set_alpha_mode() is not called, libpng assumes that all\n * values are unencoded, linear, values and that the output device also has a\n * linear characteristic.  This is only very rarely correct - it is invariably\n * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the\n * default if you don't know what the right answer is!\n *\n * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS\n * 10.6) which used a correction table to implement a somewhat lower gamma on an\n * otherwise sRGB system.\n *\n * Both these values are reserved (not simple gamma values) in order to allow\n * more precise correction internally in the future.\n *\n * NOTE: the following values can be passed to either the fixed or floating\n * point APIs, but the floating point API will also accept floating point\n * values.\n */\n#define PNG_DEFAULT_sRGB -1       /* sRGB gamma and color space */\n#define PNG_GAMMA_MAC_18 -2       /* Old Mac '1.8' gamma and color space */\n#define PNG_GAMMA_sRGB   220000   /* Television standards--matches sRGB gamma */\n#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */\n#endif\n\n/* The following are examples of calls to png_set_alpha_mode to achieve the\n * required overall gamma correction and, where necessary, alpha\n * premultiplication.\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);\n *    This is the default libpng handling of the alpha channel - it is not\n *    pre-multiplied into the color components.  In addition the call states\n *    that the output is for a sRGB system and causes all PNG files without gAMA\n *    chunks to be assumed to be encoded using sRGB.\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);\n *    In this case the output is assumed to be something like an sRGB conformant\n *    display preceeded by a power-law lookup table of power 1.45.  This is how\n *    early Mac systems behaved.\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);\n *    This is the classic Jim Blinn approach and will work in academic\n *    environments where everything is done by the book.  It has the shortcoming\n *    of assuming that input PNG data with no gamma information is linear - this\n *    is unlikely to be correct unless the PNG files where generated locally.\n *    Most of the time the output precision will be so low as to show\n *    significant banding in dark areas of the image.\n *\n * png_set_expand_16(pp);\n * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);\n *    This is a somewhat more realistic Jim Blinn inspired approach.  PNG files\n *    are assumed to have the sRGB encoding if not marked with a gamma value and\n *    the output is always 16 bits per component.  This permits accurate scaling\n *    and processing of the data.  If you know that your input PNG files were\n *    generated locally you might need to replace PNG_DEFAULT_sRGB with the\n *    correct value for your system.\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);\n *    If you just need to composite the PNG image onto an existing background\n *    and if you control the code that does this you can use the optimization\n *    setting.  In this case you just copy completely opaque pixels to the\n *    output.  For pixels that are not completely transparent (you just skip\n *    those) you do the composition math using png_composite or png_composite_16\n *    below then encode the resultant 8-bit or 16-bit values to match the output\n *    encoding.\n *\n * Other cases\n *    If neither the PNG nor the standard linear encoding work for you because\n *    of the software or hardware you use then you have a big problem.  The PNG\n *    case will probably result in halos around the image.  The linear encoding\n *    will probably result in a washed out, too bright, image (it's actually too\n *    contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably\n *    substantially reduce the halos.  Alternatively try:\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);\n *    This option will also reduce the halos, but there will be slight dark\n *    halos round the opaque parts of the image where the background is light.\n *    In the OPTIMIZED mode the halos will be light halos where the background\n *    is dark.  Take your pick - the halos are unavoidable unless you can get\n *    your hardware/software fixed!  (The OPTIMIZED approach is slightly\n *    faster.)\n *\n * When the default gamma of PNG files doesn't match the output gamma.\n *    If you have PNG files with no gamma information png_set_alpha_mode allows\n *    you to provide a default gamma, but it also sets the ouput gamma to the\n *    matching value.  If you know your PNG files have a gamma that doesn't\n *    match the output you can take advantage of the fact that\n *    png_set_alpha_mode always sets the output gamma but only sets the PNG\n *    default if it is not already set:\n *\n * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);\n * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);\n *    The first call sets both the default and the output gamma values, the\n *    second call overrides the output gamma without changing the default.  This\n *    is easier than achieving the same effect with png_set_gamma.  You must use\n *    PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will\n *    fire if more than one call to png_set_alpha_mode and png_set_background is\n *    made in the same read operation, however multiple calls with PNG_ALPHA_PNG\n *    are ignored.\n */\n\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\nPNG_EXPORT(36, void, png_set_strip_alpha, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \\\n    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)\nPNG_EXPORT(37, void, png_set_swap_alpha, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \\\n    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)\nPNG_EXPORT(38, void, png_set_invert_alpha, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)\n/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */\nPNG_EXPORT(39, void, png_set_filler, (png_structp png_ptr, png_uint_32 filler,\n    int flags));\n/* The values of the PNG_FILLER_ defines should NOT be changed */\n#  define PNG_FILLER_BEFORE 0\n#  define PNG_FILLER_AFTER 1\n/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */\nPNG_EXPORT(40, void, png_set_add_alpha,\n    (png_structp png_ptr, png_uint_32 filler,\n    int flags));\n#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */\n\n#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)\n/* Swap bytes in 16-bit depth files. */\nPNG_EXPORT(41, void, png_set_swap, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)\n/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */\nPNG_EXPORT(42, void, png_set_packing, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \\\n    defined(PNG_WRITE_PACKSWAP_SUPPORTED)\n/* Swap packing order of pixels in bytes. */\nPNG_EXPORT(43, void, png_set_packswap, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)\n/* Converts files to legal bit depths. */\nPNG_EXPORT(44, void, png_set_shift, (png_structp png_ptr, png_const_color_8p\n    true_bits));\n#endif\n\n#if defined(PNG_READ_INTERLACING_SUPPORTED) || \\\n    defined(PNG_WRITE_INTERLACING_SUPPORTED)\n/* Have the code handle the interlacing.  Returns the number of passes.\n * MUST be called before png_read_update_info or png_start_read_image,\n * otherwise it will not have the desired effect.  Note that it is still\n * necessary to call png_read_row or png_read_rows png_get_image_height\n * times for each pass.\n*/\nPNG_EXPORT(45, int, png_set_interlace_handling, (png_structp png_ptr));\n#endif\n\n#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)\n/* Invert monochrome files */\nPNG_EXPORT(46, void, png_set_invert_mono, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n/* Handle alpha and tRNS by replacing with a background color.  Prior to\n * libpng-1.5.4 this API must not be called before the PNG file header has been\n * read.  Doing so will result in unexpected behavior and possible warnings or\n * errors if the PNG file contains a bKGD chunk.\n */\nPNG_FP_EXPORT(47, void, png_set_background, (png_structp png_ptr,\n    png_const_color_16p background_color, int background_gamma_code,\n    int need_expand, double background_gamma))\nPNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structp png_ptr,\n    png_const_color_16p background_color, int background_gamma_code,\n    int need_expand, png_fixed_point background_gamma))\n#endif\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n#  define PNG_BACKGROUND_GAMMA_UNKNOWN 0\n#  define PNG_BACKGROUND_GAMMA_SCREEN  1\n#  define PNG_BACKGROUND_GAMMA_FILE    2\n#  define PNG_BACKGROUND_GAMMA_UNIQUE  3\n#endif\n\n#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\n/* Scale a 16-bit depth file down to 8-bit, accurately. */\nPNG_EXPORT(229, void, png_set_scale_16, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\n#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */\n/* Strip the second byte of information from a 16-bit depth file. */\nPNG_EXPORT(48, void, png_set_strip_16, (png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n/* Turn on quantizing, and reduce the palette to the number of colors\n * available.\n */\nPNG_EXPORT(49, void, png_set_quantize,\n    (png_structp png_ptr, png_colorp palette,\n    int num_palette, int maximum_colors, png_const_uint_16p histogram,\n    int full_quantize));\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n/* The threshold on gamma processing is configurable but hard-wired into the\n * library.  The following is the floating point variant.\n */\n#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001)\n\n/* Handle gamma correction. Screen_gamma=(display_exponent).\n * NOTE: this API simply sets the screen and file gamma values. It will\n * therefore override the value for gamma in a PNG file if it is called after\n * the file header has been read - use with care  - call before reading the PNG\n * file for best results!\n *\n * These routines accept the same gamma values as png_set_alpha_mode (described\n * above).  The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either\n * API (floating point or fixed.)  Notice, however, that the 'file_gamma' value\n * is the inverse of a 'screen gamma' value.\n */\nPNG_FP_EXPORT(50, void, png_set_gamma,\n    (png_structp png_ptr, double screen_gamma,\n    double override_file_gamma))\nPNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structp png_ptr,\n    png_fixed_point screen_gamma, png_fixed_point override_file_gamma))\n#endif\n\n#ifdef PNG_WRITE_FLUSH_SUPPORTED\n/* Set how many lines between output flushes - 0 for no flushing */\nPNG_EXPORT(51, void, png_set_flush, (png_structp png_ptr, int nrows));\n/* Flush the current PNG output buffer */\nPNG_EXPORT(52, void, png_write_flush, (png_structp png_ptr));\n#endif\n\n/* Optional update palette with requested transformations */\nPNG_EXPORT(53, void, png_start_read_image, (png_structp png_ptr));\n\n/* Optional call to update the users info structure */\nPNG_EXPORT(54, void, png_read_update_info,\n    (png_structp png_ptr, png_infop info_ptr));\n\n#ifdef PNG_SEQUENTIAL_READ_SUPPORTED\n/* Read one or more rows of image data. */\nPNG_EXPORT(55, void, png_read_rows, (png_structp png_ptr, png_bytepp row,\n    png_bytepp display_row, png_uint_32 num_rows));\n#endif\n\n#ifdef PNG_SEQUENTIAL_READ_SUPPORTED\n/* Read a row of data. */\nPNG_EXPORT(56, void, png_read_row, (png_structp png_ptr, png_bytep row,\n    png_bytep display_row));\n#endif\n\n#ifdef PNG_SEQUENTIAL_READ_SUPPORTED\n/* Read the whole image into memory at once. */\nPNG_EXPORT(57, void, png_read_image, (png_structp png_ptr, png_bytepp image));\n#endif\n\n/* Write a row of image data */\nPNG_EXPORT(58, void, png_write_row,\n    (png_structp png_ptr, png_const_bytep row));\n\n/* Write a few rows of image data: (*row) is not written; however, the type\n * is declared as writeable to maintain compatibility with previous versions\n * of libpng and to allow the 'display_row' array from read_rows to be passed\n * unchanged to write_rows.\n */\nPNG_EXPORT(59, void, png_write_rows, (png_structp png_ptr, png_bytepp row,\n    png_uint_32 num_rows));\n\n/* Write the image data */\nPNG_EXPORT(60, void, png_write_image,\n    (png_structp png_ptr, png_bytepp image));\n\n/* Write the end of the PNG file. */\nPNG_EXPORT(61, void, png_write_end,\n    (png_structp png_ptr, png_infop info_ptr));\n\n#ifdef PNG_SEQUENTIAL_READ_SUPPORTED\n/* Read the end of the PNG file. */\nPNG_EXPORT(62, void, png_read_end, (png_structp png_ptr, png_infop info_ptr));\n#endif\n\n/* Free any memory associated with the png_info_struct */\nPNG_EXPORT(63, void, png_destroy_info_struct, (png_structp png_ptr,\n    png_infopp info_ptr_ptr));\n\n/* Free any memory associated with the png_struct and the png_info_structs */\nPNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr,\n    png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));\n\n/* Free any memory associated with the png_struct and the png_info_structs */\nPNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr,\n    png_infopp info_ptr_ptr));\n\n/* Set the libpng method of handling chunk CRC errors */\nPNG_EXPORT(66, void, png_set_crc_action,\n    (png_structp png_ptr, int crit_action, int ancil_action));\n\n/* Values for png_set_crc_action() say how to handle CRC errors in\n * ancillary and critical chunks, and whether to use the data contained\n * therein.  Note that it is impossible to \"discard\" data in a critical\n * chunk.  For versions prior to 0.90, the action was always error/quit,\n * whereas in version 0.90 and later, the action for CRC errors in ancillary\n * chunks is warn/discard.  These values should NOT be changed.\n *\n *      value                       action:critical     action:ancillary\n */\n#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */\n#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */\n#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */\n#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */\n#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */\n#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */\n\n/* These functions give the user control over the scan-line filtering in\n * libpng and the compression methods used by zlib.  These functions are\n * mainly useful for testing, as the defaults should work with most users.\n * Those users who are tight on memory or want faster performance at the\n * expense of compression can modify them.  See the compression library\n * header file (zlib.h) for an explination of the compression functions.\n */\n\n/* Set the filtering method(s) used by libpng.  Currently, the only valid\n * value for \"method\" is 0.\n */\nPNG_EXPORT(67, void, png_set_filter,\n    (png_structp png_ptr, int method, int filters));\n\n/* Flags for png_set_filter() to say which filters to use.  The flags\n * are chosen so that they don't conflict with real filter types\n * below, in case they are supplied instead of the #defined constants.\n * These values should NOT be changed.\n */\n#define PNG_NO_FILTERS     0x00\n#define PNG_FILTER_NONE    0x08\n#define PNG_FILTER_SUB     0x10\n#define PNG_FILTER_UP      0x20\n#define PNG_FILTER_AVG     0x40\n#define PNG_FILTER_PAETH   0x80\n#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \\\n                         PNG_FILTER_AVG | PNG_FILTER_PAETH)\n\n/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.\n * These defines should NOT be changed.\n */\n#define PNG_FILTER_VALUE_NONE  0\n#define PNG_FILTER_VALUE_SUB   1\n#define PNG_FILTER_VALUE_UP    2\n#define PNG_FILTER_VALUE_AVG   3\n#define PNG_FILTER_VALUE_PAETH 4\n#define PNG_FILTER_VALUE_LAST  5\n\n#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */\n/* The \"heuristic_method\" is given by one of the PNG_FILTER_HEURISTIC_\n * defines, either the default (minimum-sum-of-absolute-differences), or\n * the experimental method (weighted-minimum-sum-of-absolute-differences).\n *\n * Weights are factors >= 1.0, indicating how important it is to keep the\n * filter type consistent between rows.  Larger numbers mean the current\n * filter is that many times as likely to be the same as the \"num_weights\"\n * previous filters.  This is cumulative for each previous row with a weight.\n * There needs to be \"num_weights\" values in \"filter_weights\", or it can be\n * NULL if the weights aren't being specified.  Weights have no influence on\n * the selection of the first row filter.  Well chosen weights can (in theory)\n * improve the compression for a given image.\n *\n * Costs are factors >= 1.0 indicating the relative decoding costs of a\n * filter type.  Higher costs indicate more decoding expense, and are\n * therefore less likely to be selected over a filter with lower computational\n * costs.  There needs to be a value in \"filter_costs\" for each valid filter\n * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't\n * setting the costs.  Costs try to improve the speed of decompression without\n * unduly increasing the compressed image size.\n *\n * A negative weight or cost indicates the default value is to be used, and\n * values in the range [0.0, 1.0) indicate the value is to remain unchanged.\n * The default values for both weights and costs are currently 1.0, but may\n * change if good general weighting/cost heuristics can be found.  If both\n * the weights and costs are set to 1.0, this degenerates the WEIGHTED method\n * to the UNWEIGHTED method, but with added encoding time/computation.\n */\nPNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structp png_ptr,\n    int heuristic_method, int num_weights, png_const_doublep filter_weights,\n    png_const_doublep filter_costs))\nPNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,\n    (png_structp png_ptr,\n    int heuristic_method, int num_weights, png_const_fixed_point_p\n    filter_weights, png_const_fixed_point_p filter_costs))\n#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */\n\n/* Heuristic used for row filter selection.  These defines should NOT be\n * changed.\n */\n#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently \"UNWEIGHTED\" */\n#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */\n#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */\n#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */\n\n#ifdef PNG_WRITE_SUPPORTED\n/* Set the library compression level.  Currently, valid values range from\n * 0 - 9, corresponding directly to the zlib compression levels 0 - 9\n * (0 - no compression, 9 - \"maximal\" compression).  Note that tests have\n * shown that zlib compression levels 3-6 usually perform as well as level 9\n * for PNG images, and do considerably fewer caclulations.  In the future,\n * these values may not correspond directly to the zlib compression levels.\n */\nPNG_EXPORT(69, void, png_set_compression_level,\n    (png_structp png_ptr, int level));\n\nPNG_EXPORT(70, void, png_set_compression_mem_level, (png_structp png_ptr,\n    int mem_level));\n\nPNG_EXPORT(71, void, png_set_compression_strategy, (png_structp png_ptr,\n    int strategy));\n\n/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a\n * smaller value of window_bits if it can do so safely.\n */\nPNG_EXPORT(72, void, png_set_compression_window_bits, (png_structp png_ptr,\n    int window_bits));\n\nPNG_EXPORT(73, void, png_set_compression_method, (png_structp png_ptr,\n    int method));\n#endif\n\n#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED\n/* Also set zlib parameters for compressing non-IDAT chunks */\nPNG_EXPORT(222, void, png_set_text_compression_level,\n    (png_structp png_ptr, int level));\n\nPNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structp png_ptr,\n    int mem_level));\n\nPNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structp png_ptr,\n    int strategy));\n\n/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a\n * smaller value of window_bits if it can do so safely.\n */\nPNG_EXPORT(225, void, png_set_text_compression_window_bits, (png_structp\n    png_ptr, int window_bits));\n\nPNG_EXPORT(226, void, png_set_text_compression_method, (png_structp png_ptr,\n    int method));\n#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */\n\n/* These next functions are called for input/output, memory, and error\n * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,\n * and call standard C I/O routines such as fread(), fwrite(), and\n * fprintf().  These functions can be made to use other I/O routines\n * at run time for those applications that need to handle I/O in a\n * different manner by calling png_set_???_fn().  See libpng-manual.txt for\n * more information.\n */\n\n#ifdef PNG_STDIO_SUPPORTED\n/* Initialize the input/output for the PNG file to the default functions. */\nPNG_EXPORT(74, void, png_init_io, (png_structp png_ptr, png_FILE_p fp));\n#endif\n\n/* Replace the (error and abort), and warning functions with user\n * supplied functions.  If no messages are to be printed you must still\n * write and use replacement functions. The replacement error_fn should\n * still do a longjmp to the last setjmp location if you are using this\n * method of error handling.  If error_fn or warning_fn is NULL, the\n * default function will be used.\n */\n\nPNG_EXPORT(75, void, png_set_error_fn,\n    (png_structp png_ptr, png_voidp error_ptr,\n    png_error_ptr error_fn, png_error_ptr warning_fn));\n\n/* Return the user pointer associated with the error functions */\nPNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structp png_ptr));\n\n/* Replace the default data output functions with a user supplied one(s).\n * If buffered output is not used, then output_flush_fn can be set to NULL.\n * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time\n * output_flush_fn will be ignored (and thus can be NULL).\n * It is probably a mistake to use NULL for output_flush_fn if\n * write_data_fn is not also NULL unless you have built libpng with\n * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's\n * default flush function, which uses the standard *FILE structure, will\n * be used.\n */\nPNG_EXPORT(77, void, png_set_write_fn, (png_structp png_ptr, png_voidp io_ptr,\n    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));\n\n/* Replace the default data input function with a user supplied one. */\nPNG_EXPORT(78, void, png_set_read_fn, (png_structp png_ptr, png_voidp io_ptr,\n    png_rw_ptr read_data_fn));\n\n/* Return the user pointer associated with the I/O functions */\nPNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_structp png_ptr));\n\nPNG_EXPORT(80, void, png_set_read_status_fn, (png_structp png_ptr,\n    png_read_status_ptr read_row_fn));\n\nPNG_EXPORT(81, void, png_set_write_status_fn, (png_structp png_ptr,\n    png_write_status_ptr write_row_fn));\n\n#ifdef PNG_USER_MEM_SUPPORTED\n/* Replace the default memory allocation functions with user supplied one(s). */\nPNG_EXPORT(82, void, png_set_mem_fn, (png_structp png_ptr, png_voidp mem_ptr,\n    png_malloc_ptr malloc_fn, png_free_ptr free_fn));\n/* Return the user pointer associated with the memory functions */\nPNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED\nPNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structp png_ptr,\n    png_user_transform_ptr read_user_transform_fn));\n#endif\n\n#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED\nPNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structp png_ptr,\n    png_user_transform_ptr write_user_transform_fn));\n#endif\n\n#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED\nPNG_EXPORT(86, void, png_set_user_transform_info, (png_structp png_ptr,\n    png_voidp user_transform_ptr, int user_transform_depth,\n    int user_transform_channels));\n/* Return the user pointer associated with the user transform functions */\nPNG_EXPORT(87, png_voidp, png_get_user_transform_ptr,\n    (png_const_structp png_ptr));\n#endif\n\n#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED\n/* Return information about the row currently being processed.  Note that these\n * APIs do not fail but will return unexpected results if called outside a user\n * transform callback.  Also note that when transforming an interlaced image the\n * row number is the row number within the sub-image of the interlace pass, so\n * the value will increase to the height of the sub-image (not the full image)\n * then reset to 0 for the next pass.\n *\n * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to\n * find the output pixel (x,y) given an interlaced sub-image pixel\n * (row,col,pass).  (See below for these macros.)\n */\nPNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structp));\nPNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structp));\n#endif\n\n#ifdef PNG_USER_CHUNKS_SUPPORTED\nPNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structp png_ptr,\n    png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));\nPNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structp png_ptr));\n#endif\n\n#ifdef PNG_PROGRESSIVE_READ_SUPPORTED\n/* Sets the function callbacks for the push reader, and a pointer to a\n * user-defined structure available to the callback functions.\n */\nPNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structp png_ptr,\n    png_voidp progressive_ptr, png_progressive_info_ptr info_fn,\n    png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn));\n\n/* Returns the user pointer associated with the push read functions */\nPNG_EXPORT(91, png_voidp, png_get_progressive_ptr, (png_const_structp png_ptr));\n\n/* Function to be called when data becomes available */\nPNG_EXPORT(92, void, png_process_data,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_bytep buffer, png_size_t buffer_size));\n\n/* A function which may be called *only* within png_process_data to stop the\n * processing of any more data.  The function returns the number of bytes\n * remaining, excluding any that libpng has cached internally.  A subsequent\n * call to png_process_data must supply these bytes again.  If the argument\n * 'save' is set to true the routine will first save all the pending data and\n * will always return 0.\n */\nPNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structp, int save));\n\n/* A function which may be called *only* outside (after) a call to\n * png_process_data.  It returns the number of bytes of data to skip in the\n * input.  Normally it will return 0, but if it returns a non-zero value the\n * application must skip than number of bytes of input data and pass the\n * following data to the next call to png_process_data.\n */\nPNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structp));\n\n#ifdef PNG_READ_INTERLACING_SUPPORTED\n/* Function that combines rows.  'new_row' is a flag that should come from\n * the callback and be non-NULL if anything needs to be done; the library\n * stores its own version of the new data internally and ignores the passed\n * in value.\n */\nPNG_EXPORT(93, void, png_progressive_combine_row, (png_structp png_ptr,\n    png_bytep old_row, png_const_bytep new_row));\n#endif /* PNG_READ_INTERLACING_SUPPORTED */\n#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */\n\nPNG_EXPORTA(94, png_voidp, png_malloc,\n    (png_structp png_ptr, png_alloc_size_t size),\n    PNG_ALLOCATED);\n/* Added at libpng version 1.4.0 */\nPNG_EXPORTA(95, png_voidp, png_calloc,\n    (png_structp png_ptr, png_alloc_size_t size),\n    PNG_ALLOCATED);\n\n/* Added at libpng version 1.2.4 */\nPNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_structp png_ptr,\n    png_alloc_size_t size), PNG_ALLOCATED);\n\n/* Frees a pointer allocated by png_malloc() */\nPNG_EXPORT(97, void, png_free, (png_structp png_ptr, png_voidp ptr));\n\n/* Free data that was allocated internally */\nPNG_EXPORT(98, void, png_free_data,\n    (png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num));\n\n/* Reassign responsibility for freeing existing data, whether allocated\n * by libpng or by the application */\nPNG_EXPORT(99, void, png_data_freer,\n    (png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask));\n\n/* Assignments for png_data_freer */\n#define PNG_DESTROY_WILL_FREE_DATA 1\n#define PNG_SET_WILL_FREE_DATA 1\n#define PNG_USER_WILL_FREE_DATA 2\n/* Flags for png_ptr->free_me and info_ptr->free_me */\n#define PNG_FREE_HIST 0x0008\n#define PNG_FREE_ICCP 0x0010\n#define PNG_FREE_SPLT 0x0020\n#define PNG_FREE_ROWS 0x0040\n#define PNG_FREE_PCAL 0x0080\n#define PNG_FREE_SCAL 0x0100\n#define PNG_FREE_UNKN 0x0200\n#define PNG_FREE_LIST 0x0400\n#define PNG_FREE_PLTE 0x1000\n#define PNG_FREE_TRNS 0x2000\n#define PNG_FREE_TEXT 0x4000\n#define PNG_FREE_ALL  0x7fff\n#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */\n\n#ifdef PNG_USER_MEM_SUPPORTED\nPNG_EXPORTA(100, png_voidp, png_malloc_default, (png_structp png_ptr,\n    png_alloc_size_t size), PNG_ALLOCATED);\nPNG_EXPORT(101, void, png_free_default, (png_structp png_ptr, png_voidp ptr));\n#endif\n\n#ifdef PNG_ERROR_TEXT_SUPPORTED\n/* Fatal error in PNG image of libpng - can't continue */\nPNG_EXPORTA(102, void, png_error,\n    (png_structp png_ptr, png_const_charp error_message),\n    PNG_NORETURN);\n\n/* The same, but the chunk name is prepended to the error string. */\nPNG_EXPORTA(103, void, png_chunk_error, (png_structp png_ptr,\n    png_const_charp error_message), PNG_NORETURN);\n\n#else\n/* Fatal error in PNG image of libpng - can't continue */\nPNG_EXPORTA(104, void, png_err, (png_structp png_ptr), PNG_NORETURN);\n#endif\n\n#ifdef PNG_WARNINGS_SUPPORTED\n/* Non-fatal error in libpng.  Can continue, but may have a problem. */\nPNG_EXPORT(105, void, png_warning, (png_structp png_ptr,\n    png_const_charp warning_message));\n\n/* Non-fatal error in libpng, chunk name is prepended to message. */\nPNG_EXPORT(106, void, png_chunk_warning, (png_structp png_ptr,\n    png_const_charp warning_message));\n#endif\n\n#ifdef PNG_BENIGN_ERRORS_SUPPORTED\n/* Benign error in libpng.  Can continue, but may have a problem.\n * User can choose whether to handle as a fatal error or as a warning. */\n#  undef png_benign_error\nPNG_EXPORT(107, void, png_benign_error, (png_structp png_ptr,\n    png_const_charp warning_message));\n\n/* Same, chunk name is prepended to message. */\n#  undef png_chunk_benign_error\nPNG_EXPORT(108, void, png_chunk_benign_error, (png_structp png_ptr,\n    png_const_charp warning_message));\n\nPNG_EXPORT(109, void, png_set_benign_errors,\n    (png_structp png_ptr, int allowed));\n#else\n#  ifdef PNG_ALLOW_BENIGN_ERRORS\n#    define png_benign_error png_warning\n#    define png_chunk_benign_error png_chunk_warning\n#  else\n#    define png_benign_error png_error\n#    define png_chunk_benign_error png_chunk_error\n#  endif\n#endif\n\n/* The png_set_<chunk> functions are for storing values in the png_info_struct.\n * Similarly, the png_get_<chunk> calls are used to read values from the\n * png_info_struct, either storing the parameters in the passed variables, or\n * setting pointers into the png_info_struct where the data is stored.  The\n * png_get_<chunk> functions return a non-zero value if the data was available\n * in info_ptr, or return zero and do not change any of the parameters if the\n * data was not available.\n *\n * These functions should be used instead of directly accessing png_info\n * to avoid problems with future changes in the size and internal layout of\n * png_info_struct.\n */\n/* Returns \"flag\" if chunk data is valid in info_ptr. */\nPNG_EXPORT(110, png_uint_32, png_get_valid,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_uint_32 flag));\n\n/* Returns number of bytes needed to hold a transformed row. */\nPNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n#ifdef PNG_INFO_IMAGE_SUPPORTED\n/* Returns row_pointers, which is an array of pointers to scanlines that was\n * returned from png_read_png().\n */\nPNG_EXPORT(112, png_bytepp, png_get_rows,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n/* Set row_pointers, which is an array of pointers to scanlines for use\n * by png_write_png().\n */\nPNG_EXPORT(113, void, png_set_rows, (png_structp png_ptr,\n    png_infop info_ptr, png_bytepp row_pointers));\n#endif\n\n/* Returns number of color channels in image. */\nPNG_EXPORT(114, png_byte, png_get_channels,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\n#ifdef PNG_EASY_ACCESS_SUPPORTED\n/* Returns image width in pixels. */\nPNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image height in pixels. */\nPNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image bit_depth. */\nPNG_EXPORT(117, png_byte, png_get_bit_depth,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\n/* Returns image color_type. */\nPNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image filter_type. */\nPNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image interlace_type. */\nPNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image compression_type. */\nPNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structp png_ptr,\n    png_const_infop info_ptr));\n\n/* Returns image resolution in pixels per meter, from pHYs chunk data. */\nPNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\nPNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\nPNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\n/* Returns pixel aspect ratio, computed from pHYs chunk data.  */\nPNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio,\n    (png_const_structp png_ptr, png_const_infop info_ptr))\nPNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed,\n    (png_const_structp png_ptr, png_const_infop info_ptr))\n\n/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */\nPNG_EXPORT(126, png_int_32, png_get_x_offset_pixels,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\nPNG_EXPORT(127, png_int_32, png_get_y_offset_pixels,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\nPNG_EXPORT(128, png_int_32, png_get_x_offset_microns,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\nPNG_EXPORT(129, png_int_32, png_get_y_offset_microns,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\n#endif /* PNG_EASY_ACCESS_SUPPORTED */\n\n/* Returns pointer to signature string read from PNG header */\nPNG_EXPORT(130, png_const_bytep, png_get_signature,\n    (png_const_structp png_ptr, png_infop info_ptr));\n\n#ifdef PNG_bKGD_SUPPORTED\nPNG_EXPORT(131, png_uint_32, png_get_bKGD,\n    (png_const_structp png_ptr, png_infop info_ptr,\n    png_color_16p *background));\n#endif\n\n#ifdef PNG_bKGD_SUPPORTED\nPNG_EXPORT(132, void, png_set_bKGD, (png_structp png_ptr, png_infop info_ptr,\n    png_const_color_16p background));\n#endif\n\n#ifdef PNG_cHRM_SUPPORTED\nPNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structp png_ptr,\n   png_const_infop info_ptr, double *white_x, double *white_y, double *red_x,\n    double *red_y, double *green_x, double *green_y, double *blue_x,\n    double *blue_y))\nPNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_structp png_ptr,\n    png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z,\n    double *green_X, double *green_Y, double *green_Z, double *blue_X,\n    double *blue_Y, double *blue_Z))\n#ifdef PNG_FIXED_POINT_SUPPORTED /* Otherwise not implemented */\nPNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed,\n    (png_const_structp png_ptr,\n    png_const_infop info_ptr, png_fixed_point *int_white_x,\n    png_fixed_point *int_white_y, png_fixed_point *int_red_x,\n    png_fixed_point *int_red_y, png_fixed_point *int_green_x,\n    png_fixed_point *int_green_y, png_fixed_point *int_blue_x,\n    png_fixed_point *int_blue_y))\n#endif\nPNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed,\n    (png_structp png_ptr, png_const_infop info_ptr,\n    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,\n    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,\n    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,\n    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,\n    png_fixed_point *int_blue_Z))\n#endif\n\n#ifdef PNG_cHRM_SUPPORTED\nPNG_FP_EXPORT(135, void, png_set_cHRM,\n    (png_structp png_ptr, png_infop info_ptr,\n    double white_x, double white_y, double red_x, double red_y, double green_x,\n    double green_y, double blue_x, double blue_y))\nPNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_structp png_ptr,\n    png_infop info_ptr, double red_X, double red_Y, double red_Z,\n    double green_X, double green_Y, double green_Z, double blue_X,\n    double blue_Y, double blue_Z))\nPNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_structp png_ptr,\n    png_infop info_ptr, png_fixed_point int_white_x,\n    png_fixed_point int_white_y, png_fixed_point int_red_x,\n    png_fixed_point int_red_y, png_fixed_point int_green_x,\n    png_fixed_point int_green_y, png_fixed_point int_blue_x,\n    png_fixed_point int_blue_y))\nPNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_structp png_ptr,\n    png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y,\n    png_fixed_point int_red_Z, png_fixed_point int_green_X,\n    png_fixed_point int_green_Y, png_fixed_point int_green_Z,\n    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,\n    png_fixed_point int_blue_Z))\n#endif\n\n#ifdef PNG_gAMA_SUPPORTED\nPNG_FP_EXPORT(137, png_uint_32, png_get_gAMA,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    double *file_gamma))\nPNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_fixed_point *int_file_gamma))\n#endif\n\n#ifdef PNG_gAMA_SUPPORTED\nPNG_FP_EXPORT(139, void, png_set_gAMA, (png_structp png_ptr,\n    png_infop info_ptr, double file_gamma))\nPNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_structp png_ptr,\n    png_infop info_ptr, png_fixed_point int_file_gamma))\n#endif\n\n#ifdef PNG_hIST_SUPPORTED\nPNG_EXPORT(141, png_uint_32, png_get_hIST,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_uint_16p *hist));\n#endif\n\n#ifdef PNG_hIST_SUPPORTED\nPNG_EXPORT(142, void, png_set_hIST, (png_structp png_ptr,\n    png_infop info_ptr, png_const_uint_16p hist));\n#endif\n\nPNG_EXPORT(143, png_uint_32, png_get_IHDR,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type,\n    int *interlace_method, int *compression_method, int *filter_method));\n\nPNG_EXPORT(144, void, png_set_IHDR,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 width, png_uint_32 height, int bit_depth, int color_type,\n    int interlace_method, int compression_method, int filter_method));\n\n#ifdef PNG_oFFs_SUPPORTED\nPNG_EXPORT(145, png_uint_32, png_get_oFFs,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type));\n#endif\n\n#ifdef PNG_oFFs_SUPPORTED\nPNG_EXPORT(146, void, png_set_oFFs,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_int_32 offset_x, png_int_32 offset_y, int unit_type));\n#endif\n\n#ifdef PNG_pCAL_SUPPORTED\nPNG_EXPORT(147, png_uint_32, png_get_pCAL,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type,\n    int *nparams,\n    png_charp *units, png_charpp *params));\n#endif\n\n#ifdef PNG_pCAL_SUPPORTED\nPNG_EXPORT(148, void, png_set_pCAL, (png_structp png_ptr,\n    png_infop info_ptr,\n    png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type,\n    int nparams, png_const_charp units, png_charpp params));\n#endif\n\n#ifdef PNG_pHYs_SUPPORTED\nPNG_EXPORT(149, png_uint_32, png_get_pHYs,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));\n#endif\n\n#ifdef PNG_pHYs_SUPPORTED\nPNG_EXPORT(150, void, png_set_pHYs,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 res_x, png_uint_32 res_y, int unit_type));\n#endif\n\nPNG_EXPORT(151, png_uint_32, png_get_PLTE,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_colorp *palette, int *num_palette));\n\nPNG_EXPORT(152, void, png_set_PLTE,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_const_colorp palette, int num_palette));\n\n#ifdef PNG_sBIT_SUPPORTED\nPNG_EXPORT(153, png_uint_32, png_get_sBIT,\n    (png_const_structp png_ptr, png_infop info_ptr,\n    png_color_8p *sig_bit));\n#endif\n\n#ifdef PNG_sBIT_SUPPORTED\nPNG_EXPORT(154, void, png_set_sBIT,\n    (png_structp png_ptr, png_infop info_ptr, png_const_color_8p sig_bit));\n#endif\n\n#ifdef PNG_sRGB_SUPPORTED\nPNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structp png_ptr,\n    png_const_infop info_ptr, int *file_srgb_intent));\n#endif\n\n#ifdef PNG_sRGB_SUPPORTED\nPNG_EXPORT(156, void, png_set_sRGB,\n    (png_structp png_ptr, png_infop info_ptr, int srgb_intent));\nPNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_structp png_ptr,\n    png_infop info_ptr, int srgb_intent));\n#endif\n\n#ifdef PNG_iCCP_SUPPORTED\nPNG_EXPORT(158, png_uint_32, png_get_iCCP,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_charpp name, int *compression_type, png_bytepp profile,\n    png_uint_32 *proflen));\n#endif\n\n#ifdef PNG_iCCP_SUPPORTED\nPNG_EXPORT(159, void, png_set_iCCP,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_const_charp name, int compression_type, png_const_bytep profile,\n    png_uint_32 proflen));\n#endif\n\n#ifdef PNG_sPLT_SUPPORTED\nPNG_EXPORT(160, png_uint_32, png_get_sPLT,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_sPLT_tpp entries));\n#endif\n\n#ifdef PNG_sPLT_SUPPORTED\nPNG_EXPORT(161, void, png_set_sPLT,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_const_sPLT_tp entries, int nentries));\n#endif\n\n#ifdef PNG_TEXT_SUPPORTED\n/* png_get_text also returns the number of text chunks in *num_text */\nPNG_EXPORT(162, png_uint_32, png_get_text,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    png_textp *text_ptr, int *num_text));\n#endif\n\n/* Note while png_set_text() will accept a structure whose text,\n * language, and  translated keywords are NULL pointers, the structure\n * returned by png_get_text will always contain regular\n * zero-terminated C strings.  They might be empty strings but\n * they will never be NULL pointers.\n */\n\n#ifdef PNG_TEXT_SUPPORTED\nPNG_EXPORT(163, void, png_set_text,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_const_textp text_ptr, int num_text));\n#endif\n\n#ifdef PNG_tIME_SUPPORTED\nPNG_EXPORT(164, png_uint_32, png_get_tIME,\n    (png_const_structp png_ptr, png_infop info_ptr, png_timep *mod_time));\n#endif\n\n#ifdef PNG_tIME_SUPPORTED\nPNG_EXPORT(165, void, png_set_tIME,\n    (png_structp png_ptr, png_infop info_ptr, png_const_timep mod_time));\n#endif\n\n#ifdef PNG_tRNS_SUPPORTED\nPNG_EXPORT(166, png_uint_32, png_get_tRNS,\n    (png_const_structp png_ptr, png_infop info_ptr,\n    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color));\n#endif\n\n#ifdef PNG_tRNS_SUPPORTED\nPNG_EXPORT(167, void, png_set_tRNS,\n    (png_structp png_ptr, png_infop info_ptr,\n    png_const_bytep trans_alpha, int num_trans,\n    png_const_color_16p trans_color));\n#endif\n\n#ifdef PNG_sCAL_SUPPORTED\nPNG_FP_EXPORT(168, png_uint_32, png_get_sCAL,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    int *unit, double *width, double *height))\n#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED\n/* NOTE: this API is currently implemented using floating point arithmetic,\n * consequently it can only be used on systems with floating point support.\n * In any case the range of values supported by png_fixed_point is small and it\n * is highly recommended that png_get_sCAL_s be used instead.\n */\nPNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed,\n    (png_structp png_ptr, png_const_infop info_ptr, int *unit,\n    png_fixed_point *width,\n    png_fixed_point *height))\n#endif\nPNG_EXPORT(169, png_uint_32, png_get_sCAL_s,\n    (png_const_structp png_ptr, png_const_infop info_ptr,\n    int *unit, png_charpp swidth, png_charpp sheight));\n\nPNG_FP_EXPORT(170, void, png_set_sCAL,\n    (png_structp png_ptr, png_infop info_ptr,\n    int unit, double width, double height))\nPNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_structp png_ptr,\n   png_infop info_ptr, int unit, png_fixed_point width,\n   png_fixed_point height))\nPNG_EXPORT(171, void, png_set_sCAL_s,\n    (png_structp png_ptr, png_infop info_ptr,\n    int unit, png_const_charp swidth, png_const_charp sheight));\n#endif /* PNG_sCAL_SUPPORTED */\n\n#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED\n/* Provide a list of chunks and how they are to be handled, if the built-in\n   handling or default unknown chunk handling is not desired.  Any chunks not\n   listed will be handled in the default manner.  The IHDR and IEND chunks\n   must not be listed.  Because this turns off the default handling for chunks\n   that would otherwise be recognized the behavior of libpng transformations may\n   well become incorrect!\n      keep = 0: PNG_HANDLE_CHUNK_AS_DEFAULT: follow default behavior\n           = 1: PNG_HANDLE_CHUNK_NEVER:      do not keep\n           = 2: PNG_HANDLE_CHUNK_IF_SAFE:    keep only if safe-to-copy\n           = 3: PNG_HANDLE_CHUNK_ALWAYS:     keep even if unsafe-to-copy\n*/\nPNG_EXPORT(172, void, png_set_keep_unknown_chunks,\n    (png_structp png_ptr, int keep,\n    png_const_bytep chunk_list, int num_chunks));\n\n/* The handling code is returned; the result is therefore true (non-zero) if\n * special handling is required, false for the default handling.\n */\nPNG_EXPORT(173, int, png_handle_as_unknown, (png_structp png_ptr,\n    png_const_bytep chunk_name));\n#endif\n#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED\nPNG_EXPORT(174, void, png_set_unknown_chunks, (png_structp png_ptr,\n    png_infop info_ptr, png_const_unknown_chunkp unknowns,\n    int num_unknowns));\nPNG_EXPORT(175, void, png_set_unknown_chunk_location,\n    (png_structp png_ptr, png_infop info_ptr, int chunk, int location));\nPNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structp png_ptr,\n    png_const_infop info_ptr, png_unknown_chunkpp entries));\n#endif\n\n/* Png_free_data() will turn off the \"valid\" flag for anything it frees.\n * If you need to turn it off for a chunk that your application has freed,\n * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);\n */\nPNG_EXPORT(177, void, png_set_invalid,\n    (png_structp png_ptr, png_infop info_ptr, int mask));\n\n#ifdef PNG_INFO_IMAGE_SUPPORTED\n/* The \"params\" pointer is currently not used and is for future expansion. */\nPNG_EXPORT(178, void, png_read_png, (png_structp png_ptr, png_infop info_ptr,\n    int transforms, png_voidp params));\nPNG_EXPORT(179, void, png_write_png, (png_structp png_ptr, png_infop info_ptr,\n    int transforms, png_voidp params));\n#endif\n\nPNG_EXPORT(180, png_const_charp, png_get_copyright,\n    (png_const_structp png_ptr));\nPNG_EXPORT(181, png_const_charp, png_get_header_ver,\n    (png_const_structp png_ptr));\nPNG_EXPORT(182, png_const_charp, png_get_header_version,\n    (png_const_structp png_ptr));\nPNG_EXPORT(183, png_const_charp, png_get_libpng_ver,\n    (png_const_structp png_ptr));\n\n#ifdef PNG_MNG_FEATURES_SUPPORTED\nPNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structp png_ptr,\n    png_uint_32 mng_features_permitted));\n#endif\n\n/* For use in png_set_keep_unknown, added to version 1.2.6 */\n#define PNG_HANDLE_CHUNK_AS_DEFAULT   0\n#define PNG_HANDLE_CHUNK_NEVER        1\n#define PNG_HANDLE_CHUNK_IF_SAFE      2\n#define PNG_HANDLE_CHUNK_ALWAYS       3\n\n/* Strip the prepended error numbers (\"#nnn \") from error and warning\n * messages before passing them to the error or warning handler.\n */\n#ifdef PNG_ERROR_NUMBERS_SUPPORTED\nPNG_EXPORT(185, void, png_set_strip_error_numbers,\n    (png_structp png_ptr,\n    png_uint_32 strip_mode));\n#endif\n\n/* Added in libpng-1.2.6 */\n#ifdef PNG_SET_USER_LIMITS_SUPPORTED\nPNG_EXPORT(186, void, png_set_user_limits, (png_structp png_ptr,\n    png_uint_32 user_width_max, png_uint_32 user_height_max));\nPNG_EXPORT(187, png_uint_32, png_get_user_width_max,\n    (png_const_structp png_ptr));\nPNG_EXPORT(188, png_uint_32, png_get_user_height_max,\n    (png_const_structp png_ptr));\n/* Added in libpng-1.4.0 */\nPNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structp png_ptr,\n    png_uint_32 user_chunk_cache_max));\nPNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max,\n    (png_const_structp png_ptr));\n/* Added in libpng-1.4.1 */\nPNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structp png_ptr,\n    png_alloc_size_t user_chunk_cache_max));\nPNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max,\n    (png_const_structp png_ptr));\n#endif\n\n#if defined(PNG_INCH_CONVERSIONS_SUPPORTED)\nPNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\nPNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\nPNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch,\n    (png_const_structp png_ptr, png_const_infop info_ptr));\n\nPNG_FP_EXPORT(196, float, png_get_x_offset_inches,\n    (png_const_structp png_ptr, png_const_infop info_ptr))\n#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */\nPNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed,\n    (png_structp png_ptr, png_const_infop info_ptr))\n#endif\n\nPNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structp png_ptr,\n    png_const_infop info_ptr))\n#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */\nPNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed,\n    (png_structp png_ptr, png_const_infop info_ptr))\n#endif\n\n#  ifdef PNG_pHYs_SUPPORTED\nPNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structp png_ptr,\n    png_const_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,\n    int *unit_type));\n#  endif /* PNG_pHYs_SUPPORTED */\n#endif  /* PNG_INCH_CONVERSIONS_SUPPORTED */\n\n/* Added in libpng-1.4.0 */\n#ifdef PNG_IO_STATE_SUPPORTED\nPNG_EXPORT(199, png_uint_32, png_get_io_state, (png_structp png_ptr));\n\nPNG_EXPORTA(200, png_const_bytep, png_get_io_chunk_name,\n    (png_structp png_ptr), PNG_DEPRECATED);\nPNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,\n    (png_const_structp png_ptr));\n\n/* The flags returned by png_get_io_state() are the following: */\n#  define PNG_IO_NONE        0x0000   /* no I/O at this moment */\n#  define PNG_IO_READING     0x0001   /* currently reading */\n#  define PNG_IO_WRITING     0x0002   /* currently writing */\n#  define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */\n#  define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */\n#  define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */\n#  define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */\n#  define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */\n#  define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */\n#endif /* ?PNG_IO_STATE_SUPPORTED */\n\n/* Interlace support.  The following macros are always defined so that if\n * libpng interlace handling is turned off the macros may be used to handle\n * interlaced images within the application.\n */\n#define PNG_INTERLACE_ADAM7_PASSES 7\n\n/* Two macros to return the first row and first column of the original,\n * full, image which appears in a given pass.  'pass' is in the range 0\n * to 6 and the result is in the range 0 to 7.\n */\n#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7)\n#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7)\n\n/* A macro to return the offset between pixels in the output row for a pair of\n * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that\n * follows.  Note that ROW_OFFSET is the offset from one row to the next whereas\n * COL_OFFSET is from one column to the next, within a row.\n */\n#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8)\n#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1))\n\n/* Two macros to help evaluate the number of rows or columns in each\n * pass.  This is expressed as a shift - effectively log2 of the number or\n * rows or columns in each 8x8 tile of the original image.\n */\n#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3)\n#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3)\n\n/* Hence two macros to determine the number of rows or columns in a given\n * pass of an image given its height or width.  In fact these macros may\n * return non-zero even though the sub-image is empty, because the other\n * dimension may be empty for a small image.\n */\n#define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\\\n   -1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass))\n#define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\\\n   -1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass))\n\n/* For the reader row callbacks (both progressive and sequential) it is\n * necessary to find the row in the output image given a row in an interlaced\n * image, so two more macros:\n */\n#define PNG_ROW_FROM_PASS_ROW(yIn, pass) \\\n   (((yIn)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass))\n#define PNG_COL_FROM_PASS_COL(xIn, pass) \\\n   (((xIn)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass))\n\n/* Two macros which return a boolean (0 or 1) saying whether the given row\n * or column is in a particular pass.  These use a common utility macro that\n * returns a mask for a given pass - the offset 'off' selects the row or\n * column version.  The mask has the appropriate bit set for each column in\n * the tile.\n */\n#define PNG_PASS_MASK(pass,off) ( \\\n   ((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \\\n   ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0))\n\n#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \\\n   ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1)\n#define PNG_COL_IN_INTERLACE_PASS(x, pass) \\\n   ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1)\n\n#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED\n/* With these routines we avoid an integer divide, which will be slower on\n * most machines.  However, it does take more operations than the corresponding\n * divide method, so it may be slower on a few RISC systems.  There are two\n * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.\n *\n * Note that the rounding factors are NOT supposed to be the same!  128 and\n * 32768 are correct for the NODIV code; 127 and 32767 are correct for the\n * standard method.\n *\n * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]\n */\n\n /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */\n\n#  define png_composite(composite, fg, alpha, bg)         \\\n     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \\\n           * (png_uint_16)(alpha)                         \\\n           + (png_uint_16)(bg)*(png_uint_16)(255          \\\n           - (png_uint_16)(alpha)) + 128);                \\\n       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }\n\n#  define png_composite_16(composite, fg, alpha, bg)       \\\n     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg)  \\\n           * (png_uint_32)(alpha)                          \\\n           + (png_uint_32)(bg)*(65535                      \\\n           - (png_uint_32)(alpha)) + 32768);               \\\n       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }\n\n#else  /* Standard method using integer division */\n\n#  define png_composite(composite, fg, alpha, bg)                          \\\n     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +  \\\n     (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \\\n     127) / 255)\n\n#  define png_composite_16(composite, fg, alpha, bg)                         \\\n     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \\\n     (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) +         \\\n     32767) / 65535)\n#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */\n\n#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED\nPNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf));\nPNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf));\nPNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf));\n#endif\n\nPNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_structp png_ptr,\n    png_const_bytep buf));\n/* No png_get_int_16 -- may be added if there's a real need for it. */\n\n/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */\n#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED\nPNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i));\n#endif\n#ifdef PNG_SAVE_INT_32_SUPPORTED\nPNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i));\n#endif\n\n/* Place a 16-bit number into a buffer in PNG byte order.\n * The parameter is declared unsigned int, not png_uint_16,\n * just to avoid potential problems on pre-ANSI C compilers.\n */\n#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED\nPNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));\n/* No png_save_int_16 -- may be added if there's a real need for it. */\n#endif\n\n#ifdef PNG_USE_READ_MACROS\n/* Inline macros to do direct reads of bytes from the input buffer.\n * The png_get_int_32() routine assumes we are using two's complement\n * format for negative values, which is almost certainly true.\n */\n#  define png_get_uint_32(buf) \\\n     (((png_uint_32)(*(buf)) << 24) + \\\n      ((png_uint_32)(*((buf) + 1)) << 16) + \\\n      ((png_uint_32)(*((buf) + 2)) << 8) + \\\n      ((png_uint_32)(*((buf) + 3))))\n\n   /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the\n    * function) incorrectly returned a value of type png_uint_32.\n    */\n#  define png_get_uint_16(buf) \\\n     ((png_uint_16) \\\n      (((unsigned int)(*(buf)) << 8) + \\\n       ((unsigned int)(*((buf) + 1)))))\n\n#  define png_get_int_32(buf) \\\n     ((png_int_32)((*(buf) & 0x80) \\\n      ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \\\n      : (png_int_32)png_get_uint_32(buf)))\n#endif\n\n#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \\\n    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)\nPNG_EXPORT(234, void, png_set_check_for_invalid_index, (png_structp png_ptr,\n    int allowed));\n#endif\n\n/* Maintainer: Put new public prototypes here ^, in libpng.3, and project\n * defs\n */\n\n/* The last ordinal number (this is the *last* one already used; the next\n * one to use is one more than this.)  Maintainer, remember to add an entry to\n * scripts/symbols.def as well.\n */\n#ifdef PNG_EXPORT_LAST_ORDINAL\n  PNG_EXPORT_LAST_ORDINAL(234);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* PNG_VERSION_INFO_ONLY */\n/* Do not put anything past this line */\n#endif /* PNG_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pngconf.h",
    "content": "\n/* pngconf.h - machine configurable file for libpng\n *\n * libpng version 1.5.13 - September 27, 2012\n *\n * Copyright (c) 1998-2012 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n *\n */\n\n/* Any machine specific code is near the front of this file, so if you\n * are configuring libpng for a machine, you may want to read the section\n * starting here down to where it starts to typedef png_color, png_text,\n * and png_info.\n */\n\n#ifndef PNGCONF_H\n#define PNGCONF_H\n\n#ifndef PNG_BUILDING_SYMBOL_TABLE\n/* PNG_NO_LIMITS_H may be used to turn off the use of the standard C\n * definition file for  machine specific limits, this may impact the\n * correctness of the definitions below (see uses of INT_MAX).\n */\n#  ifndef PNG_NO_LIMITS_H\n#    include <limits.h>\n#  endif\n\n/* For the memory copy APIs (i.e. the standard definitions of these),\n * because this file defines png_memcpy and so on the base APIs must\n * be defined here.\n */\n#  ifdef BSD\n#    include <strings.h>\n#  else\n#    include <string.h>\n#  endif\n\n/* For png_FILE_p - this provides the standard definition of a\n * FILE\n */\n#  ifdef PNG_STDIO_SUPPORTED\n#    include <stdio.h>\n#  endif\n#endif\n\n/* This controls optimization of the reading of 16 and 32 bit values\n * from PNG files.  It can be set on a per-app-file basis - it\n * just changes whether a macro is used when the function is called.\n * The library builder sets the default; if read functions are not\n * built into the library the macro implementation is forced on.\n */\n#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED\n#  define PNG_USE_READ_MACROS\n#endif\n#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)\n#  if PNG_DEFAULT_READ_MACROS\n#    define PNG_USE_READ_MACROS\n#  endif\n#endif\n\n/* COMPILER SPECIFIC OPTIONS.\n *\n * These options are provided so that a variety of difficult compilers\n * can be used.  Some are fixed at build time (e.g. PNG_API_RULE\n * below) but still have compiler specific implementations, others\n * may be changed on a per-file basis when compiling against libpng.\n */\n\n/* The PNGARG macro protects us against machines that don't have function\n * prototypes (ie K&R style headers).  If your compiler does not handle\n * function prototypes, define this macro and use the included ansi2knr.\n * I've always been able to use _NO_PROTO as the indicator, but you may\n * need to drag the empty declaration out in front of here, or change the\n * ifdef to suit your own needs.\n */\n#ifndef PNGARG\n\n#  ifdef OF /* zlib prototype munger */\n#    define PNGARG(arglist) OF(arglist)\n#  else\n\n#    ifdef _NO_PROTO\n#      define PNGARG(arglist) ()\n#    else\n#      define PNGARG(arglist) arglist\n#    endif /* _NO_PROTO */\n\n#  endif /* OF */\n\n#endif /* PNGARG */\n\n/* Function calling conventions.\n * =============================\n * Normally it is not necessary to specify to the compiler how to call\n * a function - it just does it - however on x86 systems derived from\n * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems\n * and some others) there are multiple ways to call a function and the\n * default can be changed on the compiler command line.  For this reason\n * libpng specifies the calling convention of every exported function and\n * every function called via a user supplied function pointer.  This is\n * done in this file by defining the following macros:\n *\n * PNGAPI    Calling convention for exported functions.\n * PNGCBAPI  Calling convention for user provided (callback) functions.\n * PNGCAPI   Calling convention used by the ANSI-C library (required\n *           for longjmp callbacks and sometimes used internally to\n *           specify the calling convention for zlib).\n *\n * These macros should never be overridden.  If it is necessary to\n * change calling convention in a private build this can be done\n * by setting PNG_API_RULE (which defaults to 0) to one of the values\n * below to select the correct 'API' variants.\n *\n * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout.\n *                This is correct in every known environment.\n * PNG_API_RULE=1 Use the operating system convention for PNGAPI and\n *                the 'C' calling convention (from PNGCAPI) for\n *                callbacks (PNGCBAPI).  This is no longer required\n *                in any known environment - if it has to be used\n *                please post an explanation of the problem to the\n *                libpng mailing list.\n *\n * These cases only differ if the operating system does not use the C\n * calling convention, at present this just means the above cases\n * (x86 DOS/Windows sytems) and, even then, this does not apply to\n * Cygwin running on those systems.\n *\n * Note that the value must be defined in pnglibconf.h so that what\n * the application uses to call the library matches the conventions\n * set when building the library.\n */\n\n/* Symbol export\n * =============\n * When building a shared library it is almost always necessary to tell\n * the compiler which symbols to export.  The png.h macro 'PNG_EXPORT'\n * is used to mark the symbols.  On some systems these symbols can be\n * extracted at link time and need no special processing by the compiler,\n * on other systems the symbols are flagged by the compiler and just\n * the declaration requires a special tag applied (unfortunately) in a\n * compiler dependent way.  Some systems can do either.\n *\n * A small number of older systems also require a symbol from a DLL to\n * be flagged to the program that calls it.  This is a problem because\n * we do not know in the header file included by application code that\n * the symbol will come from a shared library, as opposed to a statically\n * linked one.  For this reason the application must tell us by setting\n * the magic flag PNG_USE_DLL to turn on the special processing before\n * it includes png.h.\n *\n * Four additional macros are used to make this happen:\n *\n * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from\n *            the build or imported if PNG_USE_DLL is set - compiler\n *            and system specific.\n *\n * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to\n *                       'type', compiler specific.\n *\n * PNG_DLL_EXPORT Set to the magic to use during a libpng build to\n *                make a symbol exported from the DLL.  Not used in the\n *                public header files; see pngpriv.h for how it is used\n *                in the libpng build.\n *\n * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come\n *                from a DLL - used to define PNG_IMPEXP when\n *                PNG_USE_DLL is set.\n */\n\n/* System specific discovery.\n * ==========================\n * This code is used at build time to find PNG_IMPEXP, the API settings\n * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL\n * import processing is possible.  On Windows/x86 systems it also sets\n * compiler-specific macros to the values required to change the calling\n * conventions of the various functions.\n */\n#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\\\n      defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\\\n    ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\\\n      defined(_M_X64) || defined(_M_IA64) )\n  /* Windows system (DOS doesn't support DLLs) running on x86/x64.  Includes\n   * builds under Cygwin or MinGW.  Also includes Watcom builds but these need\n   * special treatment because they are not compatible with GCC or Visual C\n   * because of different calling conventions.\n   */\n#  if PNG_API_RULE == 2\n    /* If this line results in an error, either because __watcall is not\n     * understood or because of a redefine just below you cannot use *this*\n     * build of the library with the compiler you are using.  *This* build was\n     * build using Watcom and applications must also be built using Watcom!\n     */\n#    define PNGCAPI __watcall\n#  endif\n\n#  if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800))\n#    define PNGCAPI __cdecl\n#    if PNG_API_RULE == 1\n#      define PNGAPI __stdcall\n#    endif\n#  else\n    /* An older compiler, or one not detected (erroneously) above,\n     * if necessary override on the command line to get the correct\n     * variants for the compiler.\n     */\n#    ifndef PNGCAPI\n#      define PNGCAPI _cdecl\n#    endif\n#    if PNG_API_RULE == 1 && !defined(PNGAPI)\n#      define PNGAPI _stdcall\n#    endif\n#  endif /* compiler/api */\n  /* NOTE: PNGCBAPI always defaults to PNGCAPI. */\n\n#  if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)\n   ERROR: PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed\n#  endif\n\n#  if (defined(_MSC_VER) && _MSC_VER < 800) ||\\\n      (defined(__BORLANDC__) && __BORLANDC__ < 0x500)\n    /* older Borland and MSC\n     * compilers used '__export' and required this to be after\n     * the type.\n     */\n#    ifndef PNG_EXPORT_TYPE\n#      define PNG_EXPORT_TYPE(type) type PNG_IMPEXP\n#    endif\n#    define PNG_DLL_EXPORT __export\n#  else /* newer compiler */\n#    define PNG_DLL_EXPORT __declspec(dllexport)\n#    ifndef PNG_DLL_IMPORT\n#      define PNG_DLL_IMPORT __declspec(dllimport)\n#    endif\n#  endif /* compiler */\n\n#else /* !Windows/x86 */\n#  if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)\n#    define PNGAPI _System\n#  else /* !Windows/x86 && !OS/2 */\n    /* Use the defaults, or define PNG*API on the command line (but\n     * this will have to be done for every compile!)\n     */\n#  endif /* other system, !OS/2 */\n#endif /* !Windows/x86 */\n\n/* Now do all the defaulting . */\n#ifndef PNGCAPI\n#  define PNGCAPI\n#endif\n#ifndef PNGCBAPI\n#  define PNGCBAPI PNGCAPI\n#endif\n#ifndef PNGAPI\n#  define PNGAPI PNGCAPI\n#endif\n\n/* PNG_IMPEXP may be set on the compilation system command line or (if not set)\n * then in an internal header file when building the library, otherwise (when\n * using the library) it is set here.\n */\n#ifndef PNG_IMPEXP\n#  if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)\n     /* This forces use of a DLL, disallowing static linking */\n#    define PNG_IMPEXP PNG_DLL_IMPORT\n#  endif\n\n#  ifndef PNG_IMPEXP\n#    define PNG_IMPEXP\n#  endif\n#endif\n\n/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat\n * 'attributes' as a storage class - the attributes go at the start of the\n * function definition, and attributes are always appended regardless of the\n * compiler.  This considerably simplifies these macros but may cause problems\n * if any compilers both need function attributes and fail to handle them as\n * a storage class (this is unlikely.)\n */\n#ifndef PNG_FUNCTION\n#  define PNG_FUNCTION(type, name, args, attributes) attributes type name args\n#endif\n\n#ifndef PNG_EXPORT_TYPE\n#  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type\n#endif\n\n   /* The ordinal value is only relevant when preprocessing png.h for symbol\n    * table entries, so we discard it here.  See the .dfn files in the\n    * scripts directory.\n    */\n#ifndef PNG_EXPORTA\n\n#  define PNG_EXPORTA(ordinal, type, name, args, attributes)\\\n      PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \\\n        extern attributes)\n#endif\n\n/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,\n * so make something non-empty to satisfy the requirement:\n */\n#define PNG_EMPTY /*empty list*/\n\n#define PNG_EXPORT(ordinal, type, name, args)\\\n   PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)\n\n/* Use PNG_REMOVED to comment out a removed interface. */\n#ifndef PNG_REMOVED\n#  define PNG_REMOVED(ordinal, type, name, args, attributes)\n#endif\n\n#ifndef PNG_CALLBACK\n#  define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args)\n#endif\n\n/* Support for compiler specific function attributes.  These are used\n * so that where compiler support is available incorrect use of API\n * functions in png.h will generate compiler warnings.\n *\n * Added at libpng-1.2.41.\n */\n\n#ifndef PNG_NO_PEDANTIC_WARNINGS\n#  ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED\n#    define PNG_PEDANTIC_WARNINGS_SUPPORTED\n#  endif\n#endif\n\n#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED\n  /* Support for compiler specific function attributes.  These are used\n   * so that where compiler support is available incorrect use of API\n   * functions in png.h will generate compiler warnings.  Added at libpng\n   * version 1.2.41.\n   */\n#  if defined(__GNUC__)\n#    ifndef PNG_USE_RESULT\n#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))\n#    endif\n#    ifndef PNG_NORETURN\n#      define PNG_NORETURN   __attribute__((__noreturn__))\n#    endif\n#    if __GNUC__ >= 3\n#      ifndef PNG_ALLOCATED\n#        define PNG_ALLOCATED  __attribute__((__malloc__))\n#      endif\n#      ifndef PNG_DEPRECATED\n#        define PNG_DEPRECATED __attribute__((__deprecated__))\n#      endif\n#      ifndef PNG_PRIVATE\n#        if 0 /* Doesn't work so we use deprecated instead*/\n#          define PNG_PRIVATE \\\n            __attribute__((warning(\"This function is not exported by libpng.\")))\n#        else\n#          define PNG_PRIVATE \\\n            __attribute__((__deprecated__))\n#        endif\n#      endif\n#    endif /*  __GNUC__ >= 3 */\n#  endif /* __GNUC__ */\n\n#  if defined(_MSC_VER)  && (_MSC_VER >= 1300)\n#    ifndef PNG_USE_RESULT\n#      define PNG_USE_RESULT /* not supported */\n#    endif\n#    ifndef PNG_NORETURN\n#      define PNG_NORETURN __declspec(noreturn)\n#    endif\n#    ifndef PNG_ALLOCATED\n#      if (_MSC_VER >= 1400)\n#        define PNG_ALLOCATED __declspec(restrict)\n#      endif\n#    endif\n#    ifndef PNG_DEPRECATED\n#      define PNG_DEPRECATED __declspec(deprecated)\n#    endif\n#    ifndef PNG_PRIVATE\n#      define PNG_PRIVATE __declspec(deprecated)\n#    endif\n#  endif /* _MSC_VER */\n#endif /* PNG_PEDANTIC_WARNINGS */\n\n#ifndef PNG_DEPRECATED\n#  define PNG_DEPRECATED  /* Use of this function is deprecated */\n#endif\n#ifndef PNG_USE_RESULT\n#  define PNG_USE_RESULT  /* The result of this function must be checked */\n#endif\n#ifndef PNG_NORETURN\n#  define PNG_NORETURN    /* This function does not return */\n#endif\n#ifndef PNG_ALLOCATED\n#  define PNG_ALLOCATED   /* The result of the function is new memory */\n#endif\n#ifndef PNG_PRIVATE\n#  define PNG_PRIVATE     /* This is a private libpng function */\n#endif\n#ifndef PNG_FP_EXPORT     /* A floating point API. */\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\n#     define PNG_FP_EXPORT(ordinal, type, name, args)\\\n         PNG_EXPORT(ordinal, type, name, args);\n#  else                   /* No floating point APIs */\n#     define PNG_FP_EXPORT(ordinal, type, name, args)\n#  endif\n#endif\n#ifndef PNG_FIXED_EXPORT  /* A fixed point API. */\n#  ifdef PNG_FIXED_POINT_SUPPORTED\n#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\\\n         PNG_EXPORT(ordinal, type, name, args);\n#  else                   /* No fixed point APIs */\n#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\n#  endif\n#endif\n\n/* The following uses const char * instead of char * for error\n * and warning message functions, so some compilers won't complain.\n * If you do not want to use const, define PNG_NO_CONST here.\n *\n * This should not change how the APIs are called, so it can be done\n * on a per-file basis in the application.\n */\n#ifndef PNG_CONST\n#  ifndef PNG_NO_CONST\n#    define PNG_CONST const\n#  else\n#    define PNG_CONST\n#  endif\n#endif\n\n/* Some typedefs to get us started.  These should be safe on most of the\n * common platforms.  The typedefs should be at least as large as the\n * numbers suggest (a png_uint_32 must be at least 32 bits long), but they\n * don't have to be exactly that size.  Some compilers dislike passing\n * unsigned shorts as function parameters, so you may be better off using\n * unsigned int for png_uint_16.\n */\n\n#if defined(INT_MAX) && (INT_MAX > 0x7ffffffeL)\ntypedef unsigned int png_uint_32;\ntypedef int png_int_32;\n#else\ntypedef unsigned long png_uint_32;\ntypedef long png_int_32;\n#endif\ntypedef unsigned short png_uint_16;\ntypedef short png_int_16;\ntypedef unsigned char png_byte;\n\n#ifdef PNG_NO_SIZE_T\ntypedef unsigned int png_size_t;\n#else\ntypedef size_t png_size_t;\n#endif\n#define png_sizeof(x) (sizeof (x))\n\n/* The following is needed for medium model support.  It cannot be in the\n * pngpriv.h header.  Needs modification for other compilers besides\n * MSC.  Model independent support declares all arrays and pointers to be\n * large using the far keyword.  The zlib version used must also support\n * model independent data.  As of version zlib 1.0.4, the necessary changes\n * have been made in zlib.  The USE_FAR_KEYWORD define triggers other\n * changes that are needed. (Tim Wegner)\n */\n\n/* Separate compiler dependencies (problem here is that zlib.h always\n * defines FAR. (SJT)\n */\n#ifdef __BORLANDC__\n#  if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)\n#    define LDATA 1\n#  else\n#    define LDATA 0\n#  endif\n  /* GRR:  why is Cygwin in here?  Cygwin is not Borland C... */\n#  if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__)\n#    define PNG_MAX_MALLOC_64K /* only used in build */\n#    if (LDATA != 1)\n#      ifndef FAR\n#        define FAR __far\n#      endif\n#      define USE_FAR_KEYWORD\n#    endif   /* LDATA != 1 */\n         /* Possibly useful for moving data out of default segment.\n          * Uncomment it if you want. Could also define FARDATA as\n          * const if your compiler supports it. (SJT)\n#        define FARDATA FAR\n          */\n#  endif  /* __WIN32__, __FLAT__, __CYGWIN__ */\n#endif   /* __BORLANDC__ */\n\n\n/* Suggest testing for specific compiler first before testing for\n * FAR.  The Watcom compiler defines both __MEDIUM__ and M_I86MM,\n * making reliance oncertain keywords suspect. (SJT)\n */\n\n/* MSC Medium model */\n#ifdef FAR\n#  ifdef M_I86MM\n#    define USE_FAR_KEYWORD\n#    define FARDATA FAR\n#    include <dos.h>\n#  endif\n#endif\n\n/* SJT: default case */\n#ifndef FAR\n#  define FAR\n#endif\n\n/* At this point FAR is always defined */\n#ifndef FARDATA\n#  define FARDATA\n#endif\n\n/* Typedef for floating-point numbers that are converted\n * to fixed-point with a multiple of 100,000, e.g., gamma\n */\ntypedef png_int_32 png_fixed_point;\n\n/* Add typedefs for pointers */\ntypedef void                      FAR * png_voidp;\ntypedef PNG_CONST void            FAR * png_const_voidp;\ntypedef png_byte                  FAR * png_bytep;\ntypedef PNG_CONST png_byte        FAR * png_const_bytep;\ntypedef png_uint_32               FAR * png_uint_32p;\ntypedef PNG_CONST png_uint_32     FAR * png_const_uint_32p;\ntypedef png_int_32                FAR * png_int_32p;\ntypedef PNG_CONST png_int_32      FAR * png_const_int_32p;\ntypedef png_uint_16               FAR * png_uint_16p;\ntypedef PNG_CONST png_uint_16     FAR * png_const_uint_16p;\ntypedef png_int_16                FAR * png_int_16p;\ntypedef PNG_CONST png_int_16      FAR * png_const_int_16p;\ntypedef char                      FAR * png_charp;\ntypedef PNG_CONST char            FAR * png_const_charp;\ntypedef png_fixed_point           FAR * png_fixed_point_p;\ntypedef PNG_CONST png_fixed_point FAR * png_const_fixed_point_p;\ntypedef png_size_t                FAR * png_size_tp;\ntypedef PNG_CONST png_size_t      FAR * png_const_size_tp;\n\n#ifdef PNG_STDIO_SUPPORTED\ntypedef FILE            * png_FILE_p;\n#endif\n\n#ifdef PNG_FLOATING_POINT_SUPPORTED\ntypedef double           FAR * png_doublep;\ntypedef PNG_CONST double FAR * png_const_doublep;\n#endif\n\n/* Pointers to pointers; i.e. arrays */\ntypedef png_byte        FAR * FAR * png_bytepp;\ntypedef png_uint_32     FAR * FAR * png_uint_32pp;\ntypedef png_int_32      FAR * FAR * png_int_32pp;\ntypedef png_uint_16     FAR * FAR * png_uint_16pp;\ntypedef png_int_16      FAR * FAR * png_int_16pp;\ntypedef PNG_CONST char  FAR * FAR * png_const_charpp;\ntypedef char            FAR * FAR * png_charpp;\ntypedef png_fixed_point FAR * FAR * png_fixed_point_pp;\n#ifdef PNG_FLOATING_POINT_SUPPORTED\ntypedef double          FAR * FAR * png_doublepp;\n#endif\n\n/* Pointers to pointers to pointers; i.e., pointer to array */\ntypedef char            FAR * FAR * FAR * png_charppp;\n\n/* png_alloc_size_t is guaranteed to be no smaller than png_size_t,\n * and no smaller than png_uint_32.  Casts from png_size_t or png_uint_32\n * to png_alloc_size_t are not necessary; in fact, it is recommended\n * not to use them at all so that the compiler can complain when something\n * turns out to be problematic.\n * Casts in the other direction (from png_alloc_size_t to png_size_t or\n * png_uint_32) should be explicitly applied; however, we do not expect\n * to encounter practical situations that require such conversions.\n */\n#if defined(__TURBOC__) && !defined(__FLAT__)\n   typedef unsigned long png_alloc_size_t;\n#else\n#  if defined(_MSC_VER) && defined(MAXSEG_64K)\n     typedef unsigned long    png_alloc_size_t;\n#  else\n     /* This is an attempt to detect an old Windows system where (int) is\n      * actually 16 bits, in that case png_malloc must have an argument with a\n      * bigger size to accomodate the requirements of the library.\n      */\n#    if (defined(_Windows) || defined(_WINDOWS) || defined(_WINDOWS_)) && \\\n        (!defined(INT_MAX) || INT_MAX <= 0x7ffffffeL)\n       typedef DWORD         png_alloc_size_t;\n#    else\n       typedef png_size_t    png_alloc_size_t;\n#    endif\n#  endif\n#endif\n\n#endif /* PNGCONF_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pngdebug.h",
    "content": "\n/* pngdebug.h - Debugging macros for libpng, also used in pngtest.c\n *\n * Copyright (c) 1998-2011 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * Last changed in libpng 1.5.0 [January 6, 2011]\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n */\n\n/* Define PNG_DEBUG at compile time for debugging information.  Higher\n * numbers for PNG_DEBUG mean more debugging information.  This has\n * only been added since version 0.95 so it is not implemented throughout\n * libpng yet, but more support will be added as needed.\n *\n * png_debug[1-2]?(level, message ,arg{0-2})\n *   Expands to a statement (either a simple expression or a compound\n *   do..while(0) statement) that outputs a message with parameter\n *   substitution if PNG_DEBUG is defined to 2 or more.  If PNG_DEBUG\n *   is undefined, 0 or 1 every png_debug expands to a simple expression\n *   (actually ((void)0)).\n *\n *   level: level of detail of message, starting at 0.  A level 'n'\n *          message is preceded by 'n' tab characters (not implemented\n *          on Microsoft compilers unless PNG_DEBUG_FILE is also\n *          defined, to allow debug DLL compilation with no standard IO).\n *   message: a printf(3) style text string.  A trailing '\\n' is added\n *            to the message.\n *   arg: 0 to 2 arguments for printf(3) style substitution in message.\n */\n#ifndef PNGDEBUG_H\n#define PNGDEBUG_H\n/* These settings control the formatting of messages in png.c and pngerror.c */\n/* Moved to pngdebug.h at 1.5.0 */\n#  ifndef PNG_LITERAL_SHARP\n#    define PNG_LITERAL_SHARP 0x23\n#  endif\n#  ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET\n#    define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b\n#  endif\n#  ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET\n#    define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d\n#  endif\n#  ifndef PNG_STRING_NEWLINE\n#    define PNG_STRING_NEWLINE \"\\n\"\n#  endif\n\n#ifdef PNG_DEBUG\n#  if (PNG_DEBUG > 0)\n#    if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)\n#      include <crtdbg.h>\n#      if (PNG_DEBUG > 1)\n#        ifndef _DEBUG\n#          define _DEBUG\n#        endif\n#        ifndef png_debug\n#          define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)\n#        endif\n#        ifndef png_debug1\n#          define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)\n#        endif\n#        ifndef png_debug2\n#          define png_debug2(l,m,p1,p2) \\\n             _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)\n#        endif\n#      endif\n#    else /* PNG_DEBUG_FILE || !_MSC_VER */\n#      ifndef PNG_STDIO_SUPPORTED\n#        include <stdio.h> /* not included yet */\n#      endif\n#      ifndef PNG_DEBUG_FILE\n#        define PNG_DEBUG_FILE stderr\n#      endif /* PNG_DEBUG_FILE */\n\n#      if (PNG_DEBUG > 1)\n/* Note: [\"%s\"m PNG_STRING_NEWLINE] probably does not work on\n * non-ISO compilers\n */\n#        ifdef __STDC__\n#          ifndef png_debug\n#            define png_debug(l,m) \\\n       do { \\\n       int num_tabs=l; \\\n       fprintf(PNG_DEBUG_FILE,\"%s\"m PNG_STRING_NEWLINE,(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\")))); \\\n       } while (0)\n#          endif\n#          ifndef png_debug1\n#            define png_debug1(l,m,p1) \\\n       do { \\\n       int num_tabs=l; \\\n       fprintf(PNG_DEBUG_FILE,\"%s\"m PNG_STRING_NEWLINE,(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\"))),p1); \\\n       } while (0)\n#          endif\n#          ifndef png_debug2\n#            define png_debug2(l,m,p1,p2) \\\n       do { \\\n       int num_tabs=l; \\\n       fprintf(PNG_DEBUG_FILE,\"%s\"m PNG_STRING_NEWLINE,(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\"))),p1,p2); \\\n       } while (0)\n#          endif\n#        else /* __STDC __ */\n#          ifndef png_debug\n#            define png_debug(l,m) \\\n       do { \\\n       int num_tabs=l; \\\n       char format[256]; \\\n       snprintf(format,256,\"%s%s%s\",(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\"))), \\\n         m,PNG_STRING_NEWLINE); \\\n       fprintf(PNG_DEBUG_FILE,format); \\\n       } while (0)\n#          endif\n#          ifndef png_debug1\n#            define png_debug1(l,m,p1) \\\n       do { \\\n       int num_tabs=l; \\\n       char format[256]; \\\n       snprintf(format,256,\"%s%s%s\",(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\"))), \\\n         m,PNG_STRING_NEWLINE); \\\n       fprintf(PNG_DEBUG_FILE,format,p1); \\\n       } while (0)\n#          endif\n#          ifndef png_debug2\n#            define png_debug2(l,m,p1,p2) \\\n       do { \\\n       int num_tabs=l; \\\n       char format[256]; \\\n       snprintf(format,256,\"%s%s%s\",(num_tabs==1 ? \"\\t\" : \\\n         (num_tabs==2 ? \"\\t\\t\":(num_tabs>2 ? \"\\t\\t\\t\":\"\"))), \\\n         m,PNG_STRING_NEWLINE); \\\n       fprintf(PNG_DEBUG_FILE,format,p1,p2); \\\n       } while (0)\n#          endif\n#        endif /* __STDC __ */\n#      endif /* (PNG_DEBUG > 1) */\n\n#    endif /* _MSC_VER */\n#  endif /* (PNG_DEBUG > 0) */\n#endif /* PNG_DEBUG */\n#ifndef png_debug\n#  define png_debug(l, m) ((void)0)\n#endif\n#ifndef png_debug1\n#  define png_debug1(l, m, p1) ((void)0)\n#endif\n#ifndef png_debug2\n#  define png_debug2(l, m, p1, p2) ((void)0)\n#endif\n#endif /* PNGDEBUG_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pnginfo.h",
    "content": "\n/* pnginfo.h - header file for PNG reference library\n *\n * Copyright (c) 1998-2011 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * Last changed in libpng 1.5.0 [January 6, 2011]\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n */\n\n /* png_info is a structure that holds the information in a PNG file so\n * that the application can find out the characteristics of the image.\n * If you are reading the file, this structure will tell you what is\n * in the PNG file.  If you are writing the file, fill in the information\n * you want to put into the PNG file, using png_set_*() functions, then\n * call png_write_info().\n *\n * The names chosen should be very close to the PNG specification, so\n * consult that document for information about the meaning of each field.\n *\n * With libpng < 0.95, it was only possible to directly set and read the\n * the values in the png_info_struct, which meant that the contents and\n * order of the values had to remain fixed.  With libpng 0.95 and later,\n * however, there are now functions that abstract the contents of\n * png_info_struct from the application, so this makes it easier to use\n * libpng with dynamic libraries, and even makes it possible to use\n * libraries that don't have all of the libpng ancillary chunk-handing\n * functionality.  In libpng-1.5.0 this was moved into a separate private\n * file that is not visible to applications.\n *\n * The following members may have allocated storage attached that should be\n * cleaned up before the structure is discarded: palette, trans, text,\n * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,\n * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these\n * are automatically freed when the info structure is deallocated, if they were\n * allocated internally by libpng.  This behavior can be changed by means\n * of the png_data_freer() function.\n *\n * More allocation details: all the chunk-reading functions that\n * change these members go through the corresponding png_set_*\n * functions.  A function to clear these members is available: see\n * png_free_data().  The png_set_* functions do not depend on being\n * able to point info structure members to any of the storage they are\n * passed (they make their own copies), EXCEPT that the png_set_text\n * functions use the same storage passed to them in the text_ptr or\n * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns\n * functions do not make their own copies.\n */\n#ifndef PNGINFO_H\n#define PNGINFO_H\n\nstruct png_info_def\n{\n   /* the following are necessary for every PNG file */\n   png_uint_32 width;  /* width of image in pixels (from IHDR) */\n   png_uint_32 height; /* height of image in pixels (from IHDR) */\n   png_uint_32 valid;  /* valid chunk data (see PNG_INFO_ below) */\n   png_size_t rowbytes; /* bytes needed to hold an untransformed row */\n   png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */\n   png_uint_16 num_palette; /* number of color entries in \"palette\" (PLTE) */\n   png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */\n   png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */\n   png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */\n   /* The following three should have been named *_method not *_type */\n   png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */\n   png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */\n   png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */\n\n   /* The following is informational only on read, and not used on writes. */\n   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */\n   png_byte pixel_depth;    /* number of bits per pixel */\n   png_byte spare_byte;     /* to align the data, and for future use */\n   png_byte signature[8];   /* magic bytes read by libpng from start of file */\n\n   /* The rest of the data is optional.  If you are reading, check the\n    * valid field to see if the information in these are valid.  If you\n    * are writing, set the valid field to those chunks you want written,\n    * and initialize the appropriate fields below.\n    */\n\n#if defined(PNG_gAMA_SUPPORTED)\n   /* The gAMA chunk describes the gamma characteristics of the system\n    * on which the image was created, normally in the range [1.0, 2.5].\n    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.\n    */\n   png_fixed_point gamma;\n#endif\n\n#ifdef PNG_sRGB_SUPPORTED\n    /* GR-P, 0.96a */\n    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */\n   png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */\n#endif\n\n#ifdef PNG_TEXT_SUPPORTED\n   /* The tEXt, and zTXt chunks contain human-readable textual data in\n    * uncompressed, compressed, and optionally compressed forms, respectively.\n    * The data in \"text\" is an array of pointers to uncompressed,\n    * null-terminated C strings. Each chunk has a keyword that describes the\n    * textual data contained in that chunk.  Keywords are not required to be\n    * unique, and the text string may be empty.  Any number of text chunks may\n    * be in an image.\n    */\n   int num_text; /* number of comments read or comments to write */\n   int max_text; /* current size of text array */\n   png_textp text; /* array of comments read or comments to write */\n#endif /* PNG_TEXT_SUPPORTED */\n\n#ifdef PNG_tIME_SUPPORTED\n   /* The tIME chunk holds the last time the displayed image data was\n    * modified.  See the png_time struct for the contents of this struct.\n    */\n   png_time mod_time;\n#endif\n\n#ifdef PNG_sBIT_SUPPORTED\n   /* The sBIT chunk specifies the number of significant high-order bits\n    * in the pixel data.  Values are in the range [1, bit_depth], and are\n    * only specified for the channels in the pixel data.  The contents of\n    * the low-order bits is not specified.  Data is valid if\n    * (valid & PNG_INFO_sBIT) is non-zero.\n    */\n   png_color_8 sig_bit; /* significant bits in color channels */\n#endif\n\n#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \\\ndefined(PNG_READ_BACKGROUND_SUPPORTED)\n   /* The tRNS chunk supplies transparency data for paletted images and\n    * other image types that don't need a full alpha channel.  There are\n    * \"num_trans\" transparency values for a paletted image, stored in the\n    * same order as the palette colors, starting from index 0.  Values\n    * for the data are in the range [0, 255], ranging from fully transparent\n    * to fully opaque, respectively.  For non-paletted images, there is a\n    * single color specified that should be treated as fully transparent.\n    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.\n    */\n   png_bytep trans_alpha;    /* alpha values for paletted image */\n   png_color_16 trans_color; /* transparent color for non-palette image */\n#endif\n\n#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)\n   /* The bKGD chunk gives the suggested image background color if the\n    * display program does not have its own background color and the image\n    * is needs to composited onto a background before display.  The colors\n    * in \"background\" are normally in the same color space/depth as the\n    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.\n    */\n   png_color_16 background;\n#endif\n\n#ifdef PNG_oFFs_SUPPORTED\n   /* The oFFs chunk gives the offset in \"offset_unit_type\" units rightwards\n    * and downwards from the top-left corner of the display, page, or other\n    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines\n    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.\n    */\n   png_int_32 x_offset; /* x offset on page */\n   png_int_32 y_offset; /* y offset on page */\n   png_byte offset_unit_type; /* offset units type */\n#endif\n\n#ifdef PNG_pHYs_SUPPORTED\n   /* The pHYs chunk gives the physical pixel density of the image for\n    * display or printing in \"phys_unit_type\" units (see PNG_RESOLUTION_\n    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.\n    */\n   png_uint_32 x_pixels_per_unit; /* horizontal pixel density */\n   png_uint_32 y_pixels_per_unit; /* vertical pixel density */\n   png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */\n#endif\n\n#ifdef PNG_hIST_SUPPORTED\n   /* The hIST chunk contains the relative frequency or importance of the\n    * various palette entries, so that a viewer can intelligently select a\n    * reduced-color palette, if required.  Data is an array of \"num_palette\"\n    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)\n    * is non-zero.\n    */\n   png_uint_16p hist;\n#endif\n\n#ifdef PNG_cHRM_SUPPORTED\n   /* The cHRM chunk describes the CIE color characteristics of the monitor\n    * on which the PNG was created.  This data allows the viewer to do gamut\n    * mapping of the input image to ensure that the viewer sees the same\n    * colors in the image as the creator.  Values are in the range\n    * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.\n    */\n   png_fixed_point x_white;\n   png_fixed_point y_white;\n   png_fixed_point x_red;\n   png_fixed_point y_red;\n   png_fixed_point x_green;\n   png_fixed_point y_green;\n   png_fixed_point x_blue;\n   png_fixed_point y_blue;\n#endif\n\n#ifdef PNG_pCAL_SUPPORTED\n   /* The pCAL chunk describes a transformation between the stored pixel\n    * values and original physical data values used to create the image.\n    * The integer range [0, 2^bit_depth - 1] maps to the floating-point\n    * range given by [pcal_X0, pcal_X1], and are further transformed by a\n    * (possibly non-linear) transformation function given by \"pcal_type\"\n    * and \"pcal_params\" into \"pcal_units\".  Please see the PNG_EQUATION_\n    * defines below, and the PNG-Group's PNG extensions document for a\n    * complete description of the transformations and how they should be\n    * implemented, and for a description of the ASCII parameter strings.\n    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.\n    */\n   png_charp pcal_purpose;  /* pCAL chunk description string */\n   png_int_32 pcal_X0;      /* minimum value */\n   png_int_32 pcal_X1;      /* maximum value */\n   png_charp pcal_units;    /* Latin-1 string giving physical units */\n   png_charpp pcal_params;  /* ASCII strings containing parameter values */\n   png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */\n   png_byte pcal_nparams;   /* number of parameters given in pcal_params */\n#endif\n\n/* New members added in libpng-1.0.6 */\n   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */\n\n#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \\\n defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)\n   /* Storage for unknown chunks that the library doesn't recognize. */\n   png_unknown_chunkp unknown_chunks;\n   int unknown_chunks_num;\n#endif\n\n#ifdef PNG_iCCP_SUPPORTED\n   /* iCCP chunk data. */\n   png_charp iccp_name;     /* profile name */\n   png_bytep iccp_profile;  /* International Color Consortium profile data */\n   png_uint_32 iccp_proflen;  /* ICC profile data length */\n   png_byte iccp_compression; /* Always zero */\n#endif\n\n#ifdef PNG_sPLT_SUPPORTED\n   /* Data on sPLT chunks (there may be more than one). */\n   png_sPLT_tp splt_palettes;\n   png_uint_32 splt_palettes_num;\n#endif\n\n#ifdef PNG_sCAL_SUPPORTED\n   /* The sCAL chunk describes the actual physical dimensions of the\n    * subject matter of the graphic.  The chunk contains a unit specification\n    * a byte value, and two ASCII strings representing floating-point\n    * values.  The values are width and height corresponsing to one pixel\n    * in the image.  Data values are valid if (valid & PNG_INFO_sCAL) is\n    * non-zero.\n    */\n   png_byte scal_unit;         /* unit of physical scale */\n   png_charp scal_s_width;     /* string containing height */\n   png_charp scal_s_height;    /* string containing width */\n#endif\n\n#ifdef PNG_INFO_IMAGE_SUPPORTED\n   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS)\n      non-zero */\n   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */\n   png_bytepp row_pointers;        /* the image bits */\n#endif\n\n};\n#endif /* PNGINFO_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pnglibconf.h",
    "content": "/* pnglibconf.h - library build configuration */\n\n/* libpng version 1.5.13 - September 27, 2012 */\n\n/* Copyright (c) 1998-2011 Glenn Randers-Pehrson */\n\n/* This code is released under the libpng license. */\n/* For conditions of distribution and use, see the disclaimer */\n/* and license in png.h */\n\n/* pnglibconf.h */\n/* Machine generated file: DO NOT EDIT */\n/* Derived from: scripts/pnglibconf.dfa */\n#ifndef PNGLCONF_H\n#define PNGLCONF_H\n/* settings */\n#define PNG_ZBUF_SIZE 8192\n#define PNG_QUANTIZE_GREEN_BITS 5\n#define PNG_DEFAULT_READ_MACROS 1\n#define PNG_sCAL_PRECISION 5\n#define PNG_API_RULE 0\n#define PNG_GAMMA_THRESHOLD_FIXED 5000\n#define PNG_COST_SHIFT 3\n#define PNG_WEIGHT_SHIFT 8\n#define PNG_QUANTIZE_RED_BITS 5\n#define PNG_MAX_GAMMA_8 11\n#define PNG_CALLOC_SUPPORTED\n#define PNG_QUANTIZE_BLUE_BITS 5\n/* end of settings */\n/* options */\n#define PNG_WARNINGS_SUPPORTED 1\n#define PNG_INFO_IMAGE_SUPPORTED 1\n#define PNG_TIME_RFC1123_SUPPORTED 1\n#define PNG_READ_SUPPORTED 1\n#define PNG_SETJMP_SUPPORTED 1\n/*#undef PNG_SAFE_LIMITS_SUPPORTED*/\n#define PNG_READ_QUANTIZE_SUPPORTED 1\n#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED 1\n#define PNG_POINTER_INDEXING_SUPPORTED 1\n#define PNG_MNG_FEATURES_SUPPORTED 1\n#define PNG_INCH_CONVERSIONS_SUPPORTED 1\n#define PNG_IO_STATE_SUPPORTED 1\n#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED 1\n#define PNG_FLOATING_ARITHMETIC_SUPPORTED 1\n#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED 1\n#define PNG_FIXED_POINT_SUPPORTED 1\n#define PNG_WRITE_SUPPORTED 1\n/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/\n#define PNG_STDIO_SUPPORTED 1\n#define PNG_FLOATING_POINT_SUPPORTED 1\n#define PNG_PROGRESSIVE_READ_SUPPORTED 1\n#define PNG_READ_16BIT_SUPPORTED 1\n#define PNG_WRITE_INTERLACING_SUPPORTED 1\n#define PNG_READ_INT_FUNCTIONS_SUPPORTED 1\n#define PNG_READ_COMPOSITE_NODIV_SUPPORTED 1\n#define PNG_USER_LIMITS_SUPPORTED 1\n#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED 1\n#define PNG_SEQUENTIAL_READ_SUPPORTED 1\n#define PNG_CONSOLE_IO_SUPPORTED 1\n#define PNG_ALIGN_MEMORY_SUPPORTED 1\n#define PNG_BENIGN_ERRORS_SUPPORTED 1\n#define PNG_EASY_ACCESS_SUPPORTED 1\n#define PNG_USER_MEM_SUPPORTED 1\n#define PNG_WRITE_TRANSFORMS_SUPPORTED 1\n#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED 1\n#define PNG_READ_sCAL_SUPPORTED 1\n#define PNG_READ_INTERLACING_SUPPORTED 1\n#define PNG_READ_TRANSFORMS_SUPPORTED 1\n#define PNG_WRITE_PACK_SUPPORTED 1\n#define PNG_ERROR_TEXT_SUPPORTED 1\n#define PNG_READ_pHYs_SUPPORTED 1\n#define PNG_WRITE_USER_TRANSFORM_SUPPORTED 1\n#define PNG_READ_OPT_PLTE_SUPPORTED 1\n#define PNG_READ_ALPHA_MODE_SUPPORTED 1\n#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED 1\n#define PNG_WRITE_16BIT_SUPPORTED 1\n#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED 1\n#define PNG_READ_oFFs_SUPPORTED 1\n#define PNG_READ_GRAY_TO_RGB_SUPPORTED 1\n#define PNG_READ_SWAP_SUPPORTED 1\n#define PNG_READ_SHIFT_SUPPORTED 1\n#define PNG_READ_iTXt_SUPPORTED 1\n#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED 1\n#define PNG_READ_PACKSWAP_SUPPORTED 1\n#define PNG_READ_USER_TRANSFORM_SUPPORTED 1\n#define PNG_WRITE_BGR_SUPPORTED 1\n#define PNG_READ_bKGD_SUPPORTED 1\n#define PNG_READ_sRGB_SUPPORTED 1\n#define PNG_WRITE_SWAP_SUPPORTED 1\n#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED 1\n#define PNG_READ_hIST_SUPPORTED 1\n#define PNG_WRITE_SWAP_ALPHA_SUPPORTED 1\n#define PNG_READ_cHRM_SUPPORTED 1\n#define PNG_READ_tRNS_SUPPORTED 1\n#define PNG_READ_BACKGROUND_SUPPORTED 1\n#define PNG_WRITE_INVERT_SUPPORTED 1\n#define PNG_WRITE_FLUSH_SUPPORTED 1\n#define PNG_READ_FILLER_SUPPORTED 1\n#define PNG_READ_pCAL_SUPPORTED 1\n#define PNG_READ_sPLT_SUPPORTED 1\n#define PNG_READ_SWAP_ALPHA_SUPPORTED 1\n#define PNG_SET_USER_LIMITS_SUPPORTED 1\n#define PNG_WRITE_FILTER_SUPPORTED 1\n#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED 1\n#define PNG_USER_TRANSFORM_INFO_SUPPORTED 1\n#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED 1\n#define PNG_READ_INVERT_ALPHA_SUPPORTED 1\n#define PNG_READ_SCALE_16_TO_8_SUPPORTED 1\n#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED 1\n#define PNG_WRITE_SHIFT_SUPPORTED 1\n#define PNG_READ_tIME_SUPPORTED 1\n#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED 1\n#define PNG_UNKNOWN_CHUNKS_SUPPORTED 1\n#define PNG_WRITE_FILLER_SUPPORTED 1\n#define PNG_WRITE_tIME_SUPPORTED 1\n#define PNG_READ_BGR_SUPPORTED 1\n#define PNG_READ_EXPAND_16_SUPPORTED 1\n#define PNG_WRITE_INVERT_ALPHA_SUPPORTED 1\n#define PNG_READ_zTXt_SUPPORTED 1\n#define PNG_READ_RGB_TO_GRAY_SUPPORTED 1\n#define PNG_READ_GAMMA_SUPPORTED 1\n#define PNG_16BIT_SUPPORTED 1\n#define PNG_CONVERT_tIME_SUPPORTED 1\n#define PNG_USER_TRANSFORM_PTR_SUPPORTED 1\n#define PNG_READ_PACK_SUPPORTED 1\n#define PNG_WRITE_PACKSWAP_SUPPORTED 1\n#define PNG_READ_sBIT_SUPPORTED 1\n#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED 1\n#define PNG_WRITE_zTXt_SUPPORTED 1\n#define PNG_READ_iCCP_SUPPORTED 1\n#define PNG_READ_gAMA_SUPPORTED 1\n#define PNG_READ_STRIP_16_TO_8_SUPPORTED 1\n#define PNG_READ_INVERT_SUPPORTED 1\n#define PNG_WRITE_sBIT_SUPPORTED 1\n#define PNG_READ_STRIP_ALPHA_SUPPORTED 1\n#define PNG_READ_USER_CHUNKS_SUPPORTED 1\n#define PNG_WRITE_iCCP_SUPPORTED 1\n#define PNG_READ_EXPAND_SUPPORTED 1\n#define PNG_WRITE_sCAL_SUPPORTED 1\n#define PNG_WRITE_gAMA_SUPPORTED 1\n#define PNG_WRITE_pHYs_SUPPORTED 1\n#define PNG_WRITE_oFFs_SUPPORTED 1\n#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED 1\n#define PNG_tIME_SUPPORTED 1\n#define PNG_READ_COMPRESSED_TEXT_SUPPORTED 1\n#define PNG_USER_CHUNKS_SUPPORTED 1\n#define PNG_WRITE_iTXt_SUPPORTED 1\n#define PNG_WRITE_bKGD_SUPPORTED 1\n#define PNG_WRITE_sRGB_SUPPORTED 1\n#define PNG_WRITE_hIST_SUPPORTED 1\n#define PNG_WRITE_cHRM_SUPPORTED 1\n#define PNG_WRITE_tRNS_SUPPORTED 1\n#define PNG_WRITE_pCAL_SUPPORTED 1\n#define PNG_WRITE_sPLT_SUPPORTED 1\n#define PNG_zTXt_SUPPORTED 1\n#define PNG_sBIT_SUPPORTED 1\n#define PNG_iCCP_SUPPORTED 1\n#define PNG_sCAL_SUPPORTED 1\n#define PNG_gAMA_SUPPORTED 1\n#define PNG_pHYs_SUPPORTED 1\n#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED 1\n#define PNG_oFFs_SUPPORTED 1\n#define PNG_iTXt_SUPPORTED 1\n#define PNG_bKGD_SUPPORTED 1\n#define PNG_sRGB_SUPPORTED 1\n#define PNG_hIST_SUPPORTED 1\n#define PNG_cHRM_SUPPORTED 1\n#define PNG_tRNS_SUPPORTED 1\n#define PNG_pCAL_SUPPORTED 1\n#define PNG_sPLT_SUPPORTED 1\n#define PNG_READ_TEXT_SUPPORTED 1\n#define PNG_READ_tEXt_SUPPORTED 1\n#define PNG_SAVE_INT_32_SUPPORTED 1\n#define PNG_CHECK_cHRM_SUPPORTED 1\n#define PNG_WRITE_TEXT_SUPPORTED 1\n#define PNG_WRITE_tEXt_SUPPORTED 1\n#define PNG_TEXT_SUPPORTED 1\n#define PNG_tEXt_SUPPORTED 1\n/* end of options */\n#endif /* PNGLCONF_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pngpriv.h",
    "content": "\n/* pngpriv.h - private declarations for use inside libpng\n *\n * For conditions of distribution and use, see copyright notice in png.h\n * Copyright (c) 1998-2012 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * Last changed in libpng 1.5.10 [March 29, 2012]\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n */\n\n/* The symbols declared in this file (including the functions declared\n * as PNG_EXTERN) are PRIVATE.  They are not part of the libpng public\n * interface, and are not recommended for use by regular applications.\n * Some of them may become public in the future; others may stay private,\n * change in an incompatible way, or even disappear.\n * Although the libpng users are not forbidden to include this header,\n * they should be well aware of the issues that may arise from doing so.\n */\n\n#ifndef PNGPRIV_H\n#define PNGPRIV_H\n\n/* Feature Test Macros.  The following are defined here to ensure that correctly\n * implemented libraries reveal the APIs libpng needs to build and hide those\n * that are not needed and potentially damaging to the compilation.\n *\n * Feature Test Macros must be defined before any system header is included (see\n * POSIX 1003.1 2.8.2 \"POSIX Symbols.\"\n *\n * These macros only have an effect if the operating system supports either\n * POSIX 1003.1 or C99, or both.  On other operating systems (particularly\n * Windows/Visual Studio) there is no effect; the OS specific tests below are\n * still required (as of 2011-05-02.)\n */\n#define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */\n\n/* This is required for the definition of abort(), used as a last ditch\n * error handler when all else fails.\n */\n#include <stdlib.h>\n\n/* This is used to find 'offsetof', used below for alignment tests. */\n#include <stddef.h>\n\n#define PNGLIB_BUILD /*libpng is being built, not used*/\n\n#ifdef PNG_USER_CONFIG\n#  include \"pngusr.h\"\n   /* These should have been defined in pngusr.h */\n#  ifndef PNG_USER_PRIVATEBUILD\n#    define PNG_USER_PRIVATEBUILD \"Custom libpng build\"\n#  endif\n#  ifndef PNG_USER_DLLFNAME_POSTFIX\n#    define PNG_USER_DLLFNAME_POSTFIX \"Cb\"\n#  endif\n#endif\n\n/* Is this a build of a DLL where compilation of the object modules requires\n * different preprocessor settings to those required for a simple library?  If\n * so PNG_BUILD_DLL must be set.\n *\n * If libpng is used inside a DLL but that DLL does not export the libpng APIs\n * PNG_BUILD_DLL must not be set.  To avoid the code below kicking in build a\n * static library of libpng then link the DLL against that.\n */\n#ifndef PNG_BUILD_DLL\n#  ifdef DLL_EXPORT\n      /* This is set by libtool when files are compiled for a DLL; libtool\n       * always compiles twice, even on systems where it isn't necessary.  Set\n       * PNG_BUILD_DLL in case it is necessary:\n       */\n#     define PNG_BUILD_DLL\n#  else\n#     ifdef _WINDLL\n         /* This is set by the Microsoft Visual Studio IDE in projects that\n          * build a DLL.  It can't easily be removed from those projects (it\n          * isn't visible in the Visual Studio UI) so it is a fairly reliable\n          * indication that PNG_IMPEXP needs to be set to the DLL export\n          * attributes.\n          */\n#        define PNG_BUILD_DLL\n#     else\n#        ifdef __DLL__\n            /* This is set by the Borland C system when compiling for a DLL\n             * (as above.)\n             */\n#           define PNG_BUILD_DLL\n#        else\n            /* Add additional compiler cases here. */\n#        endif\n#     endif\n#  endif\n#endif /* Setting PNG_BUILD_DLL if required */\n\n/* See pngconf.h for more details: the builder of the library may set this on\n * the command line to the right thing for the specific compilation system or it\n * may be automagically set above (at present we know of no system where it does\n * need to be set on the command line.)\n *\n * PNG_IMPEXP must be set here when building the library to prevent pngconf.h\n * setting it to the \"import\" setting for a DLL build.\n */\n#ifndef PNG_IMPEXP\n#  ifdef PNG_BUILD_DLL\n#     define PNG_IMPEXP PNG_DLL_EXPORT\n#  else\n      /* Not building a DLL, or the DLL doesn't require specific export\n       * definitions.\n       */\n#     define PNG_IMPEXP\n#  endif\n#endif\n\n/* No warnings for private or deprecated functions in the build: */\n#ifndef PNG_DEPRECATED\n#  define PNG_DEPRECATED\n#endif\n#ifndef PNG_PRIVATE\n#  define PNG_PRIVATE\n#endif\n\n#include \"png.h\"\n#include \"pnginfo.h\"\n#include \"pngstruct.h\"\n\n/* pngconf.h does not set PNG_DLL_EXPORT unless it is required, so: */\n#ifndef PNG_DLL_EXPORT\n#  define PNG_DLL_EXPORT\n#endif\n\n/* SECURITY and SAFETY:\n *\n * By default libpng is built without any internal limits on image size,\n * individual heap (png_malloc) allocations or the total amount of memory used.\n * If PNG_SAFE_LIMITS_SUPPORTED is defined, however, the limits below are used\n * (unless individually overridden).  These limits are believed to be fairly\n * safe, but builders of secure systems should verify the values against the\n * real system capabilities.\n */\n\n#ifdef PNG_SAFE_LIMITS_SUPPORTED\n   /* 'safe' limits */\n#  ifndef PNG_USER_WIDTH_MAX\n#     define PNG_USER_WIDTH_MAX 1000000\n#  endif\n#  ifndef PNG_USER_HEIGHT_MAX\n#     define PNG_USER_HEIGHT_MAX 1000000\n#  endif\n#  ifndef PNG_USER_CHUNK_CACHE_MAX\n#     define PNG_USER_CHUNK_CACHE_MAX 128\n#  endif\n#  ifndef PNG_USER_CHUNK_MALLOC_MAX\n#     define PNG_USER_CHUNK_MALLOC_MAX 8000000\n#  endif\n#else\n   /* values for no limits */\n#  ifndef PNG_USER_WIDTH_MAX\n#     define PNG_USER_WIDTH_MAX 0x7fffffff\n#  endif\n#  ifndef PNG_USER_HEIGHT_MAX\n#     define PNG_USER_HEIGHT_MAX 0x7fffffff\n#  endif\n#  ifndef PNG_USER_CHUNK_CACHE_MAX\n#     define PNG_USER_CHUNK_CACHE_MAX 0\n#  endif\n#  ifndef PNG_USER_CHUNK_MALLOC_MAX\n#     define PNG_USER_CHUNK_MALLOC_MAX 0\n#  endif\n#endif\n\n/* This is used for 16 bit gamma tables - only the top level pointers are const,\n * this could be changed:\n */\ntypedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp;\n\n/* Added at libpng-1.2.9 */\n/* Moved to pngpriv.h at libpng-1.5.0 */\n\n/* config.h is created by and PNG_CONFIGURE_LIBPNG is set by the \"configure\"\n * script.  We may need it here to get the correct configuration on things\n * like limits.\n */\n#ifdef PNG_CONFIGURE_LIBPNG\n#  ifdef HAVE_CONFIG_H\n#    include \"config.h\"\n#  endif\n#endif\n\n/* Moved to pngpriv.h at libpng-1.5.0 */\n/* NOTE: some of these may have been used in external applications as\n * these definitions were exposed in pngconf.h prior to 1.5.\n */\n\n/* If you are running on a machine where you cannot allocate more\n * than 64K of memory at once, uncomment this.  While libpng will not\n * normally need that much memory in a chunk (unless you load up a very\n * large file), zlib needs to know how big of a chunk it can use, and\n * libpng thus makes sure to check any memory allocation to verify it\n * will fit into memory.\n *\n * zlib provides 'MAXSEG_64K' which, if defined, indicates the\n * same limit and pngconf.h (already included) sets the limit\n * if certain operating systems are detected.\n */\n#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)\n#  define PNG_MAX_MALLOC_64K\n#endif\n\n#ifndef PNG_UNUSED\n/* Unused formal parameter warnings are silenced using the following macro\n * which is expected to have no bad effects on performance (optimizing\n * compilers will probably remove it entirely).  Note that if you replace\n * it with something other than whitespace, you must include the terminating\n * semicolon.\n */\n#  define PNG_UNUSED(param) (void)param;\n#endif\n\n/* Just a little check that someone hasn't tried to define something\n * contradictory.\n */\n#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)\n#  undef PNG_ZBUF_SIZE\n#  define PNG_ZBUF_SIZE 65536L\n#endif\n\n/* PNG_STATIC is used to mark internal file scope functions if they need to be\n * accessed for implementation tests (see the code in tests/?*).\n */\n#ifndef PNG_STATIC\n#   define PNG_STATIC static\n#endif\n\n/* C99 restrict is used where possible, to do this 'restrict' is defined as\n * empty if we can't be sure it is supported.  configure builds have already\n * done this work.\n */\n#ifdef PNG_CONFIGURE_LIBPNG\n#  define PNG_RESTRICT restrict\n#else\n   /* Modern compilers support restrict, but assume not for anything not\n    * recognized here:\n    */\n#  if defined __GNUC__ || defined _MSC_VER || defined __WATCOMC__\n#     define PNG_RESTRICT restrict\n#  else\n#     define PNG_RESTRICT\n#  endif\n#endif\n\n/* If warnings or errors are turned off the code is disabled or redirected here.\n * From 1.5.4 functions have been added to allow very limited formatting of\n * error and warning messages - this code will also be disabled here.\n */\n#ifdef PNG_WARNINGS_SUPPORTED\n#  define PNG_WARNING_PARAMETERS(p) png_warning_parameters p;\n#else\n#  define png_warning(s1,s2) ((void)(s1))\n#  define png_chunk_warning(s1,s2) ((void)(s1))\n#  define png_warning_parameter(p,number,string) ((void)0)\n#  define png_warning_parameter_unsigned(p,number,format,value) ((void)0)\n#  define png_warning_parameter_signed(p,number,format,value) ((void)0)\n#  define png_formatted_warning(pp,p,message) ((void)(pp))\n#  define PNG_WARNING_PARAMETERS(p)\n#endif\n#ifndef PNG_ERROR_TEXT_SUPPORTED\n#  define png_error(s1,s2) png_err(s1)\n#  define png_chunk_error(s1,s2) png_err(s1)\n#  define png_fixed_error(s1,s2) png_err(s1)\n#endif\n\n/* C allows up-casts from (void*) to any pointer and (const void*) to any\n * pointer to a const object.  C++ regards this as a type error and requires an\n * explicit, static, cast and provides the static_cast<> rune to ensure that\n * const is not cast away.\n */\n#ifdef __cplusplus\n#  define png_voidcast(type, value) static_cast<type>(value)\n#else\n#  define png_voidcast(type, value) (value)\n#endif /* __cplusplus */\n\n#ifndef PNG_EXTERN\n/* The functions exported by PNG_EXTERN are internal functions, which\n * aren't usually used outside the library (as far as I know), so it is\n * debatable if they should be exported at all.  In the future, when it\n * is possible to have run-time registry of chunk-handling functions,\n * some of these might be made available again.\n *\n * 1.5.7: turned the use of 'extern' back on, since it is localized to pngpriv.h\n * it should be safe now (it is unclear why it was turned off.)\n */\n#  define PNG_EXTERN extern\n#endif\n\n/* Some fixed point APIs are still required even if not exported because\n * they get used by the corresponding floating point APIs.  This magic\n * deals with this:\n */\n#ifdef PNG_FIXED_POINT_SUPPORTED\n#  define PNGFAPI PNGAPI\n#else\n#  define PNGFAPI /* PRIVATE */\n#endif\n\n/* Other defines specific to compilers can go here.  Try to keep\n * them inside an appropriate ifdef/endif pair for portability.\n */\n#if defined(PNG_FLOATING_POINT_SUPPORTED) ||\\\n    defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)\n   /* png.c requires the following ANSI-C constants if the conversion of\n    * floating point to ASCII is implemented therein:\n    *\n    *  DBL_DIG  Maximum number of decimal digits (can be set to any constant)\n    *  DBL_MIN  Smallest normalized fp number (can be set to an arbitrary value)\n    *  DBL_MAX  Maximum floating point number (can be set to an arbitrary value)\n    */\n#  include <float.h>\n\n#  if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \\\n    defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)\n     /* We need to check that <math.h> hasn't already been included earlier\n      * as it seems it doesn't agree with <fp.h>, yet we should really use\n      * <fp.h> if possible.\n      */\n#    if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)\n#      include <fp.h>\n#    endif\n#  else\n#    include <math.h>\n#  endif\n#  if defined(_AMIGA) && defined(__SASC) && defined(_M68881)\n     /* Amiga SAS/C: We must include builtin FPU functions when compiling using\n      * MATH=68881\n      */\n#    include <m68881.h>\n#  endif\n#endif\n\n/* This provides the non-ANSI (far) memory allocation routines. */\n#if defined(__TURBOC__) && defined(__MSDOS__)\n#  include <mem.h>\n#  include <alloc.h>\n#endif\n\n#if defined(WIN32) || defined(_Windows) || defined(_WINDOWS) || \\\n    defined(_WIN32) || defined(__WIN32__)\n#  include <windows.h>  /* defines _WINDOWS_ macro */\n#endif\n\n/* Moved here around 1.5.0beta36 from pngconf.h */\n/* Users may want to use these so they are not private.  Any library\n * functions that are passed far data must be model-independent.\n */\n\n/* Memory model/platform independent fns */\n#ifndef PNG_ABORT\n#  ifdef _WINDOWS_\n#    define PNG_ABORT() ExitProcess(0)\n#  else\n#    define PNG_ABORT() abort()\n#  endif\n#endif\n\n#ifdef USE_FAR_KEYWORD\n/* Use this to make far-to-near assignments */\n#  define CHECK   1\n#  define NOCHECK 0\n#  define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK))\n#  define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK))\n#  define png_strlen  _fstrlen\n#  define png_memcmp  _fmemcmp    /* SJT: added */\n#  define png_memcpy  _fmemcpy\n#  define png_memset  _fmemset\n#else\n#  ifdef _WINDOWS_  /* Favor Windows over C runtime fns */\n#    define CVT_PTR(ptr)         (ptr)\n#    define CVT_PTR_NOCHECK(ptr) (ptr)\n#    define png_strlen  lstrlenA\n#    define png_memcmp  memcmp\n#    define png_memcpy  CopyMemory\n#    define png_memset  memset\n#  else\n#    define CVT_PTR(ptr)         (ptr)\n#    define CVT_PTR_NOCHECK(ptr) (ptr)\n#    define png_strlen  strlen\n#    define png_memcmp  memcmp      /* SJT: added */\n#    define png_memcpy  memcpy\n#    define png_memset  memset\n#  endif\n#endif\n\n/* These macros may need to be architecture dependent. */\n#define PNG_ALIGN_NONE   0 /* do not use data alignment */\n#define PNG_ALIGN_ALWAYS 1 /* assume unaligned accesses are OK */\n#ifdef offsetof\n#  define PNG_ALIGN_OFFSET 2 /* use offsetof to determine alignment */\n#else\n#  define PNG_ALIGN_OFFSET -1 /* prevent the use of this */\n#endif\n#define PNG_ALIGN_SIZE   3 /* use sizeof to determine alignment */\n\n#ifndef PNG_ALIGN_TYPE\n   /* Default to using aligned access optimizations and requiring alignment to a\n    * multiple of the data type size.  Override in a compiler specific fashion\n    * if necessary by inserting tests here:\n    */\n#  define PNG_ALIGN_TYPE PNG_ALIGN_SIZE\n#endif\n\n#if PNG_ALIGN_TYPE == PNG_ALIGN_SIZE\n   /* This is used because in some compiler implementations non-aligned\n    * structure members are supported, so the offsetof approach below fails.\n    * Set PNG_ALIGN_TO_SIZE=0 for compiler combinations where unaligned access\n    * is good for performance.  Do not do this unless you have tested the result\n    * and understand it.\n    */\n#  define png_alignof(type) (sizeof (type))\n#else\n#  if PNG_ALIGN_TYPE == PNG_ALIGN_OFFSET\n#     define png_alignof(type) offsetof(struct{char c; type t;}, t)\n#  else\n#     if PNG_ALIGN_TYPE == PNG_ALIGN_ALWAYS\n#        define png_alignof(type) (1)\n#     endif\n      /* Else leave png_alignof undefined to prevent use thereof */\n#  endif\n#endif\n\n/* This implicitly assumes alignment is always to a power of 2. */\n#ifdef png_alignof\n#  define png_isaligned(ptr, type)\\\n   ((((const char*)ptr-(const char*)0) & (png_alignof(type)-1)) == 0)\n#else\n#  define png_isaligned(ptr, type) 0\n#endif\n\n/* End of memory model/platform independent support */\n/* End of 1.5.0beta36 move from pngconf.h */\n\n/* CONSTANTS and UTILITY MACROS\n * These are used internally by libpng and not exposed in the API\n */\n\n/* Various modes of operation.  Note that after an init, mode is set to\n * zero automatically when the structure is created.  Three of these\n * are defined in png.h because they need to be visible to applications\n * that call png_set_unknown_chunk().\n */\n/* #define PNG_HAVE_IHDR            0x01 (defined in png.h) */\n/* #define PNG_HAVE_PLTE            0x02 (defined in png.h) */\n#define PNG_HAVE_IDAT               0x04\n/* #define PNG_AFTER_IDAT           0x08 (defined in png.h) */\n#define PNG_HAVE_IEND               0x10\n#define PNG_HAVE_gAMA               0x20\n#define PNG_HAVE_cHRM               0x40\n#define PNG_HAVE_sRGB               0x80\n#define PNG_HAVE_CHUNK_HEADER      0x100\n#define PNG_WROTE_tIME             0x200\n#define PNG_WROTE_INFO_BEFORE_PLTE 0x400\n#define PNG_BACKGROUND_IS_GRAY     0x800\n#define PNG_HAVE_PNG_SIGNATURE    0x1000\n#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */\n#define PNG_HAVE_iCCP             0x4000\n\n/* Flags for the transformations the PNG library does on the image data */\n#define PNG_BGR                 0x0001\n#define PNG_INTERLACE           0x0002\n#define PNG_PACK                0x0004\n#define PNG_SHIFT               0x0008\n#define PNG_SWAP_BYTES          0x0010\n#define PNG_INVERT_MONO         0x0020\n#define PNG_QUANTIZE            0x0040\n#define PNG_COMPOSE             0x0080     /* Was PNG_BACKGROUND */\n#define PNG_BACKGROUND_EXPAND   0x0100\n#define PNG_EXPAND_16           0x0200     /* Added to libpng 1.5.2 */\n#define PNG_16_TO_8             0x0400     /* Becomes 'chop' in 1.5.4 */\n#define PNG_RGBA                0x0800\n#define PNG_EXPAND              0x1000\n#define PNG_GAMMA               0x2000\n#define PNG_GRAY_TO_RGB         0x4000\n#define PNG_FILLER              0x8000\n#define PNG_PACKSWAP           0x10000\n#define PNG_SWAP_ALPHA         0x20000\n#define PNG_STRIP_ALPHA        0x40000\n#define PNG_INVERT_ALPHA       0x80000\n#define PNG_USER_TRANSFORM    0x100000\n#define PNG_RGB_TO_GRAY_ERR   0x200000\n#define PNG_RGB_TO_GRAY_WARN  0x400000\n#define PNG_RGB_TO_GRAY       0x600000 /* two bits, RGB_TO_GRAY_ERR|WARN */\n#define PNG_ENCODE_ALPHA      0x800000 /* Added to libpng-1.5.4 */\n#define PNG_ADD_ALPHA         0x1000000 /* Added to libpng-1.2.7 */\n#define PNG_EXPAND_tRNS       0x2000000 /* Added to libpng-1.2.9 */\n#define PNG_SCALE_16_TO_8     0x4000000 /* Added to libpng-1.5.4 */\n                       /*   0x8000000 unused */\n                       /*  0x10000000 unused */\n                       /*  0x20000000 unused */\n                       /*  0x40000000 unused */\n/* Flags for png_create_struct */\n#define PNG_STRUCT_PNG   0x0001\n#define PNG_STRUCT_INFO  0x0002\n\n/* Scaling factor for filter heuristic weighting calculations */\n#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))\n#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))\n\n/* Flags for the png_ptr->flags rather than declaring a byte for each one */\n#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001\n#define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002\n#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004\n#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008\n#define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010\n#define PNG_FLAG_ZLIB_FINISHED            0x0020\n#define PNG_FLAG_ROW_INIT                 0x0040\n#define PNG_FLAG_FILLER_AFTER             0x0080\n#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100\n#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200\n#define PNG_FLAG_CRC_CRITICAL_USE         0x0400\n#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800\n#define PNG_FLAG_ASSUME_sRGB              0x1000  /* Added to libpng-1.5.4 */\n#define PNG_FLAG_OPTIMIZE_ALPHA           0x2000  /* Added to libpng-1.5.4 */\n#define PNG_FLAG_DETECT_UNINITIALIZED     0x4000  /* Added to libpng-1.5.4 */\n#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000\n#define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000\n#define PNG_FLAG_LIBRARY_MISMATCH         0x20000\n#define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000\n#define PNG_FLAG_STRIP_ERROR_TEXT         0x80000\n#define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000\n                                  /*      0x200000  unused */\n                                  /*      0x400000  unused */\n#define PNG_FLAG_BENIGN_ERRORS_WARN       0x800000  /* Added to libpng-1.4.0 */\n#define PNG_FLAG_ZTXT_CUSTOM_STRATEGY    0x1000000  /* 5 lines added */\n#define PNG_FLAG_ZTXT_CUSTOM_LEVEL       0x2000000  /* to libpng-1.5.4 */\n#define PNG_FLAG_ZTXT_CUSTOM_MEM_LEVEL   0x4000000\n#define PNG_FLAG_ZTXT_CUSTOM_WINDOW_BITS 0x8000000\n#define PNG_FLAG_ZTXT_CUSTOM_METHOD      0x10000000\n                                  /*     0x20000000  unused */\n                                  /*     0x40000000  unused */\n\n#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \\\n                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)\n\n#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \\\n                                     PNG_FLAG_CRC_CRITICAL_IGNORE)\n\n#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \\\n                                     PNG_FLAG_CRC_CRITICAL_MASK)\n\n/* zlib.h declares a magic type 'uInt' that limits the amount of data that zlib\n * can handle at once.  This type need be no larger than 16 bits (so maximum of\n * 65535), this define allows us to discover how big it is, but limited by the\n * maximuum for png_size_t.  The value can be overriden in a library build\n * (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably\n * lower value (e.g. 255 works).  A lower value may help memory usage (slightly)\n * and may even improve performance on some systems (and degrade it on others.)\n */\n#ifndef ZLIB_IO_MAX\n#  define ZLIB_IO_MAX ((uInt)-1)\n#endif\n\n/* Save typing and make code easier to understand */\n\n#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \\\n   abs((int)((c1).green) - (int)((c2).green)) + \\\n   abs((int)((c1).blue) - (int)((c2).blue)))\n\n/* Added to libpng-1.2.6 JB */\n#define PNG_ROWBYTES(pixel_bits, width) \\\n    ((pixel_bits) >= 8 ? \\\n    ((png_size_t)(width) * (((png_size_t)(pixel_bits)) >> 3)) : \\\n    (( ((png_size_t)(width) * ((png_size_t)(pixel_bits))) + 7) >> 3) )\n\n/* PNG_OUT_OF_RANGE returns true if value is outside the range\n * ideal-delta..ideal+delta.  Each argument is evaluated twice.\n * \"ideal\" and \"delta\" should be constants, normally simple\n * integers, \"value\" a variable. Added to libpng-1.2.6 JB\n */\n#define PNG_OUT_OF_RANGE(value, ideal, delta) \\\n   ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )\n\n/* Conversions between fixed and floating point, only defined if\n * required (to make sure the code doesn't accidentally use float\n * when it is supposedly disabled.)\n */\n#ifdef PNG_FLOATING_POINT_SUPPORTED\n/* The floating point conversion can't overflow, though it can and\n * does lose accuracy relative to the original fixed point value.\n * In practice this doesn't matter because png_fixed_point only\n * stores numbers with very low precision.  The png_ptr and s\n * arguments are unused by default but are there in case error\n * checking becomes a requirement.\n */\n#define png_float(png_ptr, fixed, s) (.00001 * (fixed))\n\n/* The fixed point conversion performs range checking and evaluates\n * its argument multiple times, so must be used with care.  The\n * range checking uses the PNG specification values for a signed\n * 32 bit fixed point value except that the values are deliberately\n * rounded-to-zero to an integral value - 21474 (21474.83 is roughly\n * (2^31-1) * 100000). 's' is a string that describes the value being\n * converted.\n *\n * NOTE: this macro will raise a png_error if the range check fails,\n * therefore it is normally only appropriate to use this on values\n * that come from API calls or other sources where an out of range\n * error indicates a programming error, not a data error!\n *\n * NOTE: by default this is off - the macro is not used - because the\n * function call saves a lot of code.\n */\n#ifdef PNG_FIXED_POINT_MACRO_SUPPORTED\n#define png_fixed(png_ptr, fp, s) ((fp) <= 21474 && (fp) >= -21474 ?\\\n    ((png_fixed_point)(100000 * (fp))) : (png_fixed_error(png_ptr, s),0))\n#else\nPNG_EXTERN png_fixed_point png_fixed PNGARG((png_structp png_ptr, double fp,\n   png_const_charp text));\n#endif\n#endif\n\n/* Constants for known chunk types.  If you need to add a chunk, define the name\n * here.  For historical reasons these constants have the form png_<name>; i.e.\n * the prefix is lower case.  Please use decimal values as the parameters to\n * match the ISO PNG specification and to avoid relying on the C locale\n * interpretation of character values.\n *\n * Prior to 1.5.6 these constants were strings, as of 1.5.6 png_uint_32 values\n * are computed and a new macro (PNG_STRING_FROM_CHUNK) added to allow a string\n * to be generated if required.\n *\n * PNG_32b correctly produces a value shifted by up to 24 bits, even on\n * architectures where (int) is only 16 bits.\n */\n#define PNG_32b(b,s) ((png_uint_32)(b) << (s))\n#define PNG_CHUNK(b1,b2,b3,b4) \\\n   (PNG_32b(b1,24) | PNG_32b(b2,16) | PNG_32b(b3,8) | PNG_32b(b4,0))\n\n#define png_IHDR PNG_CHUNK( 73,  72,  68,  82)\n#define png_IDAT PNG_CHUNK( 73,  68,  65,  84)\n#define png_IEND PNG_CHUNK( 73,  69,  78,  68)\n#define png_PLTE PNG_CHUNK( 80,  76,  84,  69)\n#define png_bKGD PNG_CHUNK( 98,  75,  71,  68)\n#define png_cHRM PNG_CHUNK( 99,  72,  82,  77)\n#define png_gAMA PNG_CHUNK(103,  65,  77,  65)\n#define png_hIST PNG_CHUNK(104,  73,  83,  84)\n#define png_iCCP PNG_CHUNK(105,  67,  67,  80)\n#define png_iTXt PNG_CHUNK(105,  84,  88, 116)\n#define png_oFFs PNG_CHUNK(111,  70,  70, 115)\n#define png_pCAL PNG_CHUNK(112,  67,  65,  76)\n#define png_sCAL PNG_CHUNK(115,  67,  65,  76)\n#define png_pHYs PNG_CHUNK(112,  72,  89, 115)\n#define png_sBIT PNG_CHUNK(115,  66,  73,  84)\n#define png_sPLT PNG_CHUNK(115,  80,  76,  84)\n#define png_sRGB PNG_CHUNK(115,  82,  71,  66)\n#define png_sTER PNG_CHUNK(115,  84,  69,  82)\n#define png_tEXt PNG_CHUNK(116,  69,  88, 116)\n#define png_tIME PNG_CHUNK(116,  73,  77,  69)\n#define png_tRNS PNG_CHUNK(116,  82,  78,  83)\n#define png_zTXt PNG_CHUNK(122,  84,  88, 116)\n\n/* The following will work on (signed char*) strings, whereas the get_uint_32\n * macro will fail on top-bit-set values because of the sign extension.\n */\n#define PNG_CHUNK_FROM_STRING(s)\\\n   PNG_CHUNK(0xff&(s)[0], 0xff&(s)[1], 0xff&(s)[2], 0xff&(s)[3])\n\n/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is\n * signed and the argument is a (char[])  This macro will fail miserably on\n * systems where (char) is more than 8 bits.\n */\n#define PNG_STRING_FROM_CHUNK(s,c)\\\n   (void)(((char*)(s))[0]=(char)((c)>>24), ((char*)(s))[1]=(char)((c)>>16),\\\n   ((char*)(s))[2]=(char)((c)>>8), ((char*)(s))[3]=(char)((c)))\n\n/* Do the same but terminate with a null character. */\n#define PNG_CSTRING_FROM_CHUNK(s,c)\\\n   (void)(PNG_STRING_FROM_CHUNK(s,c), ((char*)(s))[4] = 0)\n\n/* Test on flag values as defined in the spec (section 5.4): */\n#define PNG_CHUNK_ANCILLIARY(c)   (1 & ((c) >> 29))\n#define PNG_CHUNK_CRITICAL(c)     (!PNG_CHUNK_ANCILLIARY(c))\n#define PNG_CHUNK_PRIVATE(c)      (1 & ((c) >> 21))\n#define PNG_CHUNK_RESERVED(c)     (1 & ((c) >> 13))\n#define PNG_CHUNK_SAFE_TO_COPY(c) (1 & ((c) >>  5))\n\n/* Gamma values (new at libpng-1.5.4): */\n#define PNG_GAMMA_MAC_OLD 151724  /* Assume '1.8' is really 2.2/1.45! */\n#define PNG_GAMMA_MAC_INVERSE 65909\n#define PNG_GAMMA_sRGB_INVERSE 45455\n\n\n/* Inhibit C++ name-mangling for libpng functions but not for system calls. */\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n/* These functions are used internally in the code.  They generally\n * shouldn't be used unless you are writing code to add or replace some\n * functionality in libpng.  More information about most functions can\n * be found in the files where the functions are located.\n */\n\n/* Check the user version string for compatibility, returns false if the version\n * numbers aren't compatible.\n */\nPNG_EXTERN int png_user_version_check(png_structp png_ptr,\n   png_const_charp user_png_ver);\n\n/* Allocate memory for an internal libpng struct */\nPNG_EXTERN PNG_FUNCTION(png_voidp,png_create_struct,PNGARG((int type)),\n   PNG_ALLOCATED);\n\n/* Free memory from internal libpng struct */\nPNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr));\n\nPNG_EXTERN PNG_FUNCTION(png_voidp,png_create_struct_2,\n   PNGARG((int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)),\n   PNG_ALLOCATED);\nPNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,\n    png_free_ptr free_fn, png_voidp mem_ptr));\n\n/* Free any memory that info_ptr points to and reset struct. */\nPNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\n\n/* Function to allocate memory for zlib.  PNGAPI is disallowed. */\nPNG_EXTERN PNG_FUNCTION(voidpf,png_zalloc,PNGARG((voidpf png_ptr, uInt items,\n   uInt size)),PNG_ALLOCATED);\n\n/* Function to free memory for zlib.  PNGAPI is disallowed. */\nPNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr));\n\n/* Next four functions are used internally as callbacks.  PNGCBAPI is required\n * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3, changed to\n * PNGCBAPI at 1.5.0\n */\n\nPNG_EXTERN void PNGCBAPI png_default_read_data PNGARG((png_structp png_ptr,\n    png_bytep data, png_size_t length));\n\n#ifdef PNG_PROGRESSIVE_READ_SUPPORTED\nPNG_EXTERN void PNGCBAPI png_push_fill_buffer PNGARG((png_structp png_ptr,\n    png_bytep buffer, png_size_t length));\n#endif\n\nPNG_EXTERN void PNGCBAPI png_default_write_data PNGARG((png_structp png_ptr,\n    png_bytep data, png_size_t length));\n\n#ifdef PNG_WRITE_FLUSH_SUPPORTED\n#  ifdef PNG_STDIO_SUPPORTED\nPNG_EXTERN void PNGCBAPI png_default_flush PNGARG((png_structp png_ptr));\n#  endif\n#endif\n\n/* Reset the CRC variable */\nPNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr));\n\n/* Write the \"data\" buffer to whatever output you are using */\nPNG_EXTERN void png_write_data PNGARG((png_structp png_ptr,\n    png_const_bytep data, png_size_t length));\n\n/* Read and check the PNG file signature */\nPNG_EXTERN void png_read_sig PNGARG((png_structp png_ptr, png_infop info_ptr));\n\n/* Read the chunk header (length + type name) */\nPNG_EXTERN png_uint_32 png_read_chunk_header PNGARG((png_structp png_ptr));\n\n/* Read data from whatever input you are using into the \"data\" buffer */\nPNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,\n    png_size_t length));\n\n/* Read bytes into buf, and update png_ptr->crc */\nPNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,\n    png_size_t length));\n\n/* Decompress data in a chunk that uses compression */\n#if defined(PNG_READ_COMPRESSED_TEXT_SUPPORTED)\nPNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr,\n    int comp_type, png_size_t chunklength, png_size_t prefix_length,\n    png_size_t *data_length));\n#endif\n\n/* Read \"skip\" bytes, read the file crc, and (optionally) verify png_ptr->crc */\nPNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip));\n\n/* Read the CRC from the file and compare it to the libpng calculated CRC */\nPNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr));\n\n/* Calculate the CRC over a section of data.  Note that we are only\n * passing a maximum of 64K on systems that have this as a memory limit,\n * since this is the maximum buffer size we can specify.\n */\nPNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr,\n    png_const_bytep ptr, png_size_t length));\n\n#ifdef PNG_WRITE_FLUSH_SUPPORTED\nPNG_EXTERN void png_flush PNGARG((png_structp png_ptr));\n#endif\n\n/* Write various chunks */\n\n/* Write the IHDR chunk, and update the png_struct with the necessary\n * information.\n */\nPNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,\n    png_uint_32 height,\n    int bit_depth, int color_type, int compression_method, int filter_method,\n    int interlace_method));\n\nPNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr,\n    png_const_colorp palette, png_uint_32 num_pal));\n\nPNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,\n    png_size_t length));\n\nPNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr));\n\n#ifdef PNG_WRITE_gAMA_SUPPORTED\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nPNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma));\n#  endif\n#  ifdef PNG_FIXED_POINT_SUPPORTED\nPNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr,\n    png_fixed_point file_gamma));\n#  endif\n#endif\n\n#ifdef PNG_WRITE_sBIT_SUPPORTED\nPNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr,\n    png_const_color_8p sbit, int color_type));\n#endif\n\n#ifdef PNG_WRITE_cHRM_SUPPORTED\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nPNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,\n    double white_x, double white_y,\n    double red_x, double red_y, double green_x, double green_y,\n    double blue_x, double blue_y));\n#  endif\nPNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,\n    png_fixed_point int_white_x, png_fixed_point int_white_y,\n    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point\n    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,\n    png_fixed_point int_blue_y));\n#endif\n\n#ifdef PNG_WRITE_sRGB_SUPPORTED\nPNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,\n    int intent));\n#endif\n\n#ifdef PNG_WRITE_iCCP_SUPPORTED\nPNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,\n    png_const_charp name, int compression_type,\n    png_const_charp profile, int proflen));\n   /* Note to maintainer: profile should be png_bytep */\n#endif\n\n#ifdef PNG_WRITE_sPLT_SUPPORTED\nPNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,\n    png_const_sPLT_tp palette));\n#endif\n\n#ifdef PNG_WRITE_tRNS_SUPPORTED\nPNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr,\n    png_const_bytep trans, png_const_color_16p values, int number,\n    int color_type));\n#endif\n\n#ifdef PNG_WRITE_bKGD_SUPPORTED\nPNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,\n    png_const_color_16p values, int color_type));\n#endif\n\n#ifdef PNG_WRITE_hIST_SUPPORTED\nPNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr,\n    png_const_uint_16p hist, int num_hist));\n#endif\n\n/* Chunks that have keywords */\n#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \\\n    defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)\nPNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,\n    png_const_charp key, png_charpp new_key));\n#endif\n\n#ifdef PNG_WRITE_tEXt_SUPPORTED\nPNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_const_charp key,\n    png_const_charp text, png_size_t text_len));\n#endif\n\n#ifdef PNG_WRITE_zTXt_SUPPORTED\nPNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_const_charp key,\n    png_const_charp text, png_size_t text_len, int compression));\n#endif\n\n#ifdef PNG_WRITE_iTXt_SUPPORTED\nPNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,\n    int compression, png_const_charp key, png_const_charp lang,\n    png_const_charp lang_key, png_const_charp text));\n#endif\n\n#ifdef PNG_TEXT_SUPPORTED  /* Added at version 1.0.14 and 1.2.4 */\nPNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_const_textp text_ptr, int num_text));\n#endif\n\n#ifdef PNG_WRITE_oFFs_SUPPORTED\nPNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,\n    png_int_32 x_offset, png_int_32 y_offset, int unit_type));\n#endif\n\n#ifdef PNG_WRITE_pCAL_SUPPORTED\nPNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,\n    png_int_32 X0, png_int_32 X1, int type, int nparams,\n    png_const_charp units, png_charpp params));\n#endif\n\n#ifdef PNG_WRITE_pHYs_SUPPORTED\nPNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,\n    png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,\n    int unit_type));\n#endif\n\n#ifdef PNG_WRITE_tIME_SUPPORTED\nPNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,\n    png_const_timep mod_time));\n#endif\n\n#ifdef PNG_WRITE_sCAL_SUPPORTED\nPNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,\n    int unit, png_const_charp width, png_const_charp height));\n#endif\n\n/* Called when finished processing a row of data */\nPNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));\n\n/* Internal use only.   Called before first row of data */\nPNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr));\n\n/* Combine a row of data, dealing with alpha, etc. if requested.  'row' is an\n * array of png_ptr->width pixels.  If the image is not interlaced or this\n * is the final pass this just does a png_memcpy, otherwise the \"display\" flag\n * is used to determine whether to copy pixels that are not in the current pass.\n *\n * Because 'png_do_read_interlace' (below) replicates pixels this allows this\n * function to achieve the documented 'blocky' appearance during interlaced read\n * if display is 1 and the 'sparkle' appearance, where existing pixels in 'row'\n * are not changed if they are not in the current pass, when display is 0.\n *\n * 'display' must be 0 or 1, otherwise the memcpy will be done regardless.\n *\n * The API always reads from the png_struct row buffer and always assumes that\n * it is full width (png_do_read_interlace has already been called.)\n *\n * This function is only ever used to write to row buffers provided by the\n * caller of the relevant libpng API and the row must have already been\n * transformed by the read transformations.\n *\n * The PNG_USE_COMPILE_TIME_MASKS option causes generation of pre-computed\n * bitmasks for use within the code, otherwise runtime generated masks are used.\n * The default is compile time masks.\n */\n#ifndef PNG_USE_COMPILE_TIME_MASKS\n#  define PNG_USE_COMPILE_TIME_MASKS 1\n#endif\nPNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,\n    int display));\n\n#ifdef PNG_READ_INTERLACING_SUPPORTED\n/* Expand an interlaced row: the 'row_info' describes the pass data that has\n * been read in and must correspond to the pixels in 'row', the pixels are\n * expanded (moved apart) in 'row' to match the final layout, when doing this\n * the pixels are *replicated* to the intervening space.  This is essential for\n * the correct operation of png_combine_row, above.\n */\nPNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,\n    png_bytep row, int pass, png_uint_32 transformations));\n#endif\n\n/* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */\n\n#ifdef PNG_WRITE_INTERLACING_SUPPORTED\n/* Grab pixels out of a row for an interlaced pass */\nPNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,\n    png_bytep row, int pass));\n#endif\n\n/* Unfilter a row: check the filter value before calling this, there is no point\n * calling it for PNG_FILTER_VALUE_NONE.\n */\nPNG_EXTERN void png_read_filter_row PNGARG((png_structp pp, png_row_infop\n    row_info, png_bytep row, png_const_bytep prev_row, int filter));\n\nPNG_EXTERN void png_read_filter_row_up_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_sub3_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_sub4_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_avg3_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_avg4_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_paeth3_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\nPNG_EXTERN void png_read_filter_row_paeth4_neon PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep prev_row));\n\n/* Choose the best filter to use and filter the row data */\nPNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,\n    png_row_infop row_info));\n\n/* Finish a row while reading, dealing with interlacing passes, etc. */\nPNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));\n\n/* Initialize the row buffers, etc. */\nPNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr));\n\n#ifdef PNG_READ_TRANSFORMS_SUPPORTED\n/* Optional call to update the users info structure */\nPNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\n#endif\n\n/* These are the functions that do the transformations */\n#ifdef PNG_READ_FILLER_SUPPORTED\nPNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,\n    png_bytep row, png_uint_32 filler, png_uint_32 flags));\n#endif\n\n#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED\nPNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED\nPNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED\nPNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED\nPNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#if defined(PNG_WRITE_FILLER_SUPPORTED) || \\\n    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)\nPNG_EXTERN void png_do_strip_channel PNGARG((png_row_infop row_info,\n    png_bytep row, int at_start));\n#endif\n\n#ifdef PNG_16BIT_SUPPORTED\n#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)\nPNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n#endif\n\n#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \\\n    defined(PNG_WRITE_PACKSWAP_SUPPORTED)\nPNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\nPNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr,\n    png_row_infop row_info, png_bytep row));\n#endif\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\nPNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_PACK_SUPPORTED\nPNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_SHIFT_SUPPORTED\nPNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_color_8p sig_bits));\n#endif\n\n#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)\nPNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\nPNG_EXTERN void png_do_scale_16_to_8 PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\nPNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\nPNG_EXTERN void png_do_quantize PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_bytep palette_lookup,\n    png_const_bytep quantize_lookup));\n\n#  ifdef PNG_CORRECT_PALETTE_SUPPORTED\nPNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr,\n    png_colorp palette, int num_palette));\n#  endif\n#endif\n\n#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)\nPNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n#ifdef PNG_WRITE_PACK_SUPPORTED\nPNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info,\n   png_bytep row, png_uint_32 bit_depth));\n#endif\n\n#ifdef PNG_WRITE_SHIFT_SUPPORTED\nPNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_color_8p bit_depth));\n#endif\n\n#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\\\n    defined(PNG_READ_ALPHA_MODE_SUPPORTED)\nPNG_EXTERN void png_do_compose PNGARG((png_row_infop row_info,\n    png_bytep row, png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\nPNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info,\n    png_bytep row, png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\nPNG_EXTERN void png_do_encode_alpha PNGARG((png_row_infop row_info,\n   png_bytep row, png_structp png_ptr));\n#endif\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\nPNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_colorp palette, png_const_bytep trans,\n    int num_trans));\nPNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info,\n    png_bytep row, png_const_color_16p trans_color));\n#endif\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\nPNG_EXTERN void png_do_expand_16 PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n/* The following decodes the appropriate chunks, and does error correction,\n * then calls the appropriate callback for the chunk if it is valid.\n */\n\n/* Decode the IHDR chunk */\nPNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\nPNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\nPNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n\n#ifdef PNG_READ_bKGD_SUPPORTED\nPNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_cHRM_SUPPORTED\nPNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_gAMA_SUPPORTED\nPNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_hIST_SUPPORTED\nPNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_iCCP_SUPPORTED\nPNG_EXTERN void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif /* PNG_READ_iCCP_SUPPORTED */\n\n#ifdef PNG_READ_iTXt_SUPPORTED\nPNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_oFFs_SUPPORTED\nPNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_pCAL_SUPPORTED\nPNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_pHYs_SUPPORTED\nPNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_sBIT_SUPPORTED\nPNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_sCAL_SUPPORTED\nPNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_sPLT_SUPPORTED\nPNG_EXTERN void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif /* PNG_READ_sPLT_SUPPORTED */\n\n#ifdef PNG_READ_sRGB_SUPPORTED\nPNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_tEXt_SUPPORTED\nPNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_tIME_SUPPORTED\nPNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_tRNS_SUPPORTED\nPNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\n#ifdef PNG_READ_zTXt_SUPPORTED\nPNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr,\n    png_uint_32 length));\n#endif\n\nPNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_uint_32 length));\n\nPNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr,\n    png_uint_32 chunk_name));\n\n#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED\n/* Exactly as png_handle_as_unknown() except that the argument is a 32-bit chunk\n * name, not a string.\n */\nPNG_EXTERN int png_chunk_unknown_handling PNGARG((png_structp png_ptr,\n    png_uint_32 chunk_name));\n#endif\n\n/* Handle the transformations for reading and writing */\n#ifdef PNG_READ_TRANSFORMS_SUPPORTED\nPNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr,\n   png_row_infop row_info));\n#endif\n#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED\nPNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr,\n   png_row_infop row_info));\n#endif\n\n#ifdef PNG_READ_TRANSFORMS_SUPPORTED\nPNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr));\n#endif\n\n#ifdef PNG_PROGRESSIVE_READ_SUPPORTED\nPNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\nPNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\nPNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr));\nPNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr,\n    png_uint_32 length));\nPNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr));\nPNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr));\nPNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr,\n    png_bytep buffer, png_size_t buffer_length));\nPNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr));\nPNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr,\n    png_bytep buffer, png_size_t buffer_length));\nPNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr));\nPNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr,\n   png_infop info_ptr, png_uint_32 length));\nPNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr,\n   png_infop info_ptr));\nPNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr,\n   png_infop info_ptr));\nPNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));\nPNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\nPNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\nPNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr));\n#  ifdef PNG_READ_tEXt_SUPPORTED\nPNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_uint_32 length));\nPNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\n#  endif\n#  ifdef PNG_READ_zTXt_SUPPORTED\nPNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_uint_32 length));\nPNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\n#  endif\n#  ifdef PNG_READ_iTXt_SUPPORTED\nPNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_uint_32 length));\nPNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,\n    png_infop info_ptr));\n#  endif\n\n#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */\n\n#ifdef PNG_MNG_FEATURES_SUPPORTED\nPNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,\n    png_bytep row));\nPNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,\n    png_bytep row));\n#endif\n\n/* Added at libpng version 1.4.0 */\n#ifdef PNG_CHECK_cHRM_SUPPORTED\nPNG_EXTERN int png_check_cHRM_fixed PNGARG((png_structp png_ptr,\n    png_fixed_point int_white_x, png_fixed_point int_white_y,\n    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point\n    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,\n    png_fixed_point int_blue_y));\n#endif\n\n#ifdef PNG_CHECK_cHRM_SUPPORTED\n/* Added at libpng version 1.2.34 and 1.4.0 */\n/* Currently only used by png_check_cHRM_fixed */\nPNG_EXTERN void png_64bit_product PNGARG((long v1, long v2,\n    unsigned long *hi_product, unsigned long *lo_product));\n#endif\n\n#ifdef PNG_cHRM_SUPPORTED\n/* Added at libpng version 1.5.5 */\ntypedef struct png_xy\n{\n   png_fixed_point redx, redy;\n   png_fixed_point greenx, greeny;\n   png_fixed_point bluex, bluey;\n   png_fixed_point whitex, whitey;\n} png_xy;\n\ntypedef struct png_XYZ\n{\n   png_fixed_point redX, redY, redZ;\n   png_fixed_point greenX, greenY, greenZ;\n   png_fixed_point blueX, blueY, blueZ;\n} png_XYZ;\n\n/* The conversion APIs return 0 on success, non-zero on a parameter error. They\n * allow conversion between the above representations of a color encoding.  When\n * converting from XYZ end points to chromaticities the absolute magnitude of\n * the end points is lost, when converting back the sum of the Y values of the\n * three end points will be 1.0\n */\nPNG_EXTERN int png_xy_from_XYZ PNGARG((png_xy *xy, png_XYZ XYZ));\nPNG_EXTERN int png_XYZ_from_xy PNGARG((png_XYZ *XYZ, png_xy xy));\nPNG_EXTERN int png_XYZ_from_xy_checked PNGARG((png_structp png_ptr,\n   png_XYZ *XYZ, png_xy xy));\n#endif\n\n/* Added at libpng version 1.4.0 */\nPNG_EXTERN void png_check_IHDR PNGARG((png_structp png_ptr,\n    png_uint_32 width, png_uint_32 height, int bit_depth,\n    int color_type, int interlace_type, int compression_type,\n    int filter_type));\n\n/* Added at libpng version 1.5.10 */\n#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \\\n    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)\nPNG_EXTERN void png_do_check_palette_indexes PNGARG((png_structp png_ptr,\n    png_row_infop row_info));\n#endif\n\n/* Free all memory used by the read (old method - NOT DLL EXPORTED) */\nPNG_EXTERN void png_read_destroy PNGARG((png_structp png_ptr,\n    png_infop info_ptr, png_infop end_info_ptr));\n\n/* Free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */\nPNG_EXTERN void png_write_destroy PNGARG((png_structp png_ptr));\n\n#ifdef USE_FAR_KEYWORD  /* memory model conversion function */\nPNG_EXTERN void *png_far_to_near PNGARG((png_structp png_ptr, png_voidp ptr,\n    int check));\n#endif /* USE_FAR_KEYWORD */\n\n#if defined(PNG_FLOATING_POINT_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)\nPNG_EXTERN PNG_FUNCTION(void, png_fixed_error, (png_structp png_ptr,\n   png_const_charp name),PNG_NORETURN);\n#endif\n\n/* Puts 'string' into 'buffer' at buffer[pos], taking care never to overwrite\n * the end.  Always leaves the buffer nul terminated.  Never errors out (and\n * there is no error code.)\n */\nPNG_EXTERN size_t png_safecat(png_charp buffer, size_t bufsize, size_t pos,\n    png_const_charp string);\n\n/* Various internal functions to handle formatted warning messages, currently\n * only implemented for warnings.\n */\n#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_TIME_RFC1123_SUPPORTED)\n/* Utility to dump an unsigned value into a buffer, given a start pointer and\n * and end pointer (which should point just *beyond* the end of the buffer!)\n * Returns the pointer to the start of the formatted string.  This utility only\n * does unsigned values.\n */\nPNG_EXTERN png_charp png_format_number(png_const_charp start, png_charp end,\n   int format, png_alloc_size_t number);\n\n/* Convenience macro that takes an array: */\n#define PNG_FORMAT_NUMBER(buffer,format,number) \\\n   png_format_number(buffer, buffer + (sizeof buffer), format, number)\n\n/* Suggested size for a number buffer (enough for 64 bits and a sign!) */\n#define PNG_NUMBER_BUFFER_SIZE 24\n\n/* These are the integer formats currently supported, the name is formed from\n * the standard printf(3) format string.\n */\n#define PNG_NUMBER_FORMAT_u     1 /* chose unsigned API! */\n#define PNG_NUMBER_FORMAT_02u   2\n#define PNG_NUMBER_FORMAT_d     1 /* chose signed API! */\n#define PNG_NUMBER_FORMAT_02d   2\n#define PNG_NUMBER_FORMAT_x     3\n#define PNG_NUMBER_FORMAT_02x   4\n#define PNG_NUMBER_FORMAT_fixed 5 /* choose the signed API */\n#endif\n\n#ifdef PNG_WARNINGS_SUPPORTED\n/* New defines and members adding in libpng-1.5.4 */\n#  define PNG_WARNING_PARAMETER_SIZE 32\n#  define PNG_WARNING_PARAMETER_COUNT 8\n\n/* An l-value of this type has to be passed to the APIs below to cache the\n * values of the parameters to a formatted warning message.\n */\ntypedef char png_warning_parameters[PNG_WARNING_PARAMETER_COUNT][\n   PNG_WARNING_PARAMETER_SIZE];\n\nPNG_EXTERN void png_warning_parameter(png_warning_parameters p, int number,\n    png_const_charp string);\n    /* Parameters are limited in size to PNG_WARNING_PARAMETER_SIZE characters,\n     * including the trailing '\\0'.\n     */\nPNG_EXTERN void png_warning_parameter_unsigned(png_warning_parameters p,\n    int number, int format, png_alloc_size_t value);\n    /* Use png_alloc_size_t because it is an unsigned type as big as any we\n     * need to output.  Use the following for a signed value.\n     */\nPNG_EXTERN void png_warning_parameter_signed(png_warning_parameters p,\n    int number, int format, png_int_32 value);\n\nPNG_EXTERN void png_formatted_warning(png_structp png_ptr,\n    png_warning_parameters p, png_const_charp message);\n    /* 'message' follows the X/Open approach of using @1, @2 to insert\n     * parameters previously supplied using the above functions.  Errors in\n     * specifying the paramters will simple result in garbage substitutions.\n     */\n#endif\n\n/* ASCII to FP interfaces, currently only implemented if sCAL\n * support is required.\n */\n#if defined(PNG_READ_sCAL_SUPPORTED)\n/* MAX_DIGITS is actually the maximum number of characters in an sCAL\n * width or height, derived from the precision (number of significant\n * digits - a build time settable option) and assumpitions about the\n * maximum ridiculous exponent.\n */\n#define PNG_sCAL_MAX_DIGITS (PNG_sCAL_PRECISION+1/*.*/+1/*E*/+10/*exponent*/)\n\n#ifdef PNG_FLOATING_POINT_SUPPORTED\nPNG_EXTERN void png_ascii_from_fp PNGARG((png_structp png_ptr, png_charp ascii,\n    png_size_t size, double fp, unsigned int precision));\n#endif /* FLOATING_POINT */\n\n#ifdef PNG_FIXED_POINT_SUPPORTED\nPNG_EXTERN void png_ascii_from_fixed PNGARG((png_structp png_ptr,\n    png_charp ascii, png_size_t size, png_fixed_point fp));\n#endif /* FIXED_POINT */\n#endif /* READ_sCAL */\n\n#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)\n/* An internal API to validate the format of a floating point number.\n * The result is the index of the next character.  If the number is\n * not valid it will be the index of a character in the supposed number.\n *\n * The format of a number is defined in the PNG extensions specification\n * and this API is strictly conformant to that spec, not anyone elses!\n *\n * The format as a regular expression is:\n *\n * [+-]?[0-9]+.?([Ee][+-]?[0-9]+)?\n *\n * or:\n *\n * [+-]?.[0-9]+(.[0-9]+)?([Ee][+-]?[0-9]+)?\n *\n * The complexity is that either integer or fraction must be present and the\n * fraction is permitted to have no digits only if the integer is present.\n *\n * NOTE: The dangling E problem.\n *   There is a PNG valid floating point number in the following:\n *\n *       PNG floating point numb1.ers are not greedy.\n *\n *   Working this out requires *TWO* character lookahead (because of the\n *   sign), the parser does not do this - it will fail at the 'r' - this\n *   doesn't matter for PNG sCAL chunk values, but it requires more care\n *   if the value were ever to be embedded in something more complex.  Use\n *   ANSI-C strtod if you need the lookahead.\n */\n/* State table for the parser. */\n#define PNG_FP_INTEGER    0  /* before or in integer */\n#define PNG_FP_FRACTION   1  /* before or in fraction */\n#define PNG_FP_EXPONENT   2  /* before or in exponent */\n#define PNG_FP_STATE      3  /* mask for the above */\n#define PNG_FP_SAW_SIGN   4  /* Saw +/- in current state */\n#define PNG_FP_SAW_DIGIT  8  /* Saw a digit in current state */\n#define PNG_FP_SAW_DOT   16  /* Saw a dot in current state */\n#define PNG_FP_SAW_E     32  /* Saw an E (or e) in current state */\n#define PNG_FP_SAW_ANY   60  /* Saw any of the above 4 */\n\n/* These three values don't affect the parser.  They are set but not used.\n */\n#define PNG_FP_WAS_VALID 64  /* Preceding substring is a valid fp number */\n#define PNG_FP_NEGATIVE 128  /* A negative number, including \"-0\" */\n#define PNG_FP_NONZERO  256  /* A non-zero value */\n#define PNG_FP_STICKY   448  /* The above three flags */\n\n/* This is available for the caller to store in 'state' if required.  Do not\n * call the parser after setting it (the parser sometimes clears it.)\n */\n#define PNG_FP_INVALID  512  /* Available for callers as a distinct value */\n\n/* Result codes for the parser (boolean - true meants ok, false means\n * not ok yet.)\n */\n#define PNG_FP_MAYBE      0  /* The number may be valid in the future */\n#define PNG_FP_OK         1  /* The number is valid */\n\n/* Tests on the sticky non-zero and negative flags.  To pass these checks\n * the state must also indicate that the whole number is valid - this is\n * achieved by testing PNG_FP_SAW_DIGIT (see the implementation for why this\n * is equivalent to PNG_FP_OK above.)\n */\n#define PNG_FP_NZ_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NEGATIVE | PNG_FP_NONZERO)\n   /* NZ_MASK: the string is valid and a non-zero negative value */\n#define PNG_FP_Z_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NONZERO)\n   /* Z MASK: the string is valid and a non-zero value. */\n   /* PNG_FP_SAW_DIGIT: the string is valid. */\n#define PNG_FP_IS_ZERO(state) (((state) & PNG_FP_Z_MASK) == PNG_FP_SAW_DIGIT)\n#define PNG_FP_IS_POSITIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_Z_MASK)\n#define PNG_FP_IS_NEGATIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_NZ_MASK)\n\n/* The actual parser.  This can be called repeatedly, it updates\n * the index into the string and the state variable (which must\n * be initialzed to 0).  It returns a result code, as above.  There\n * is no point calling the parser any more if it fails to advance to\n * the end of the string - it is stuck on an invalid character (or\n * terminated by '\\0').\n *\n * Note that the pointer will consume an E or even an E+ then leave\n * a 'maybe' state even though a preceding integer.fraction is valid.\n * The PNG_FP_WAS_VALID flag indicates that a preceding substring was\n * a valid number.  It's possible to recover from this by calling\n * the parser again (from the start, with state 0) but with a string\n * that omits the last character (i.e. set the size to the index of\n * the problem character.)  This has not been tested within libpng.\n */\nPNG_EXTERN int png_check_fp_number PNGARG((png_const_charp string,\n    png_size_t size, int *statep, png_size_tp whereami));\n\n/* This is the same but it checks a complete string and returns true\n * only if it just contains a floating point number.  As of 1.5.4 this\n * function also returns the state at the end of parsing the number if\n * it was valid (otherwise it returns 0.)  This can be used for testing\n * for negative or zero values using the sticky flag.\n */\nPNG_EXTERN int png_check_fp_string PNGARG((png_const_charp string,\n    png_size_t size));\n#endif /* pCAL || sCAL */\n\n#if defined(PNG_READ_GAMMA_SUPPORTED) ||\\\n    defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)\n/* Added at libpng version 1.5.0 */\n/* This is a utility to provide a*times/div (rounded) and indicate\n * if there is an overflow.  The result is a boolean - false (0)\n * for overflow, true (1) if no overflow, in which case *res\n * holds the result.\n */\nPNG_EXTERN int png_muldiv PNGARG((png_fixed_point_p res, png_fixed_point a,\n    png_int_32 multiplied_by, png_int_32 divided_by));\n#endif\n\n#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)\n/* Same deal, but issue a warning on overflow and return 0. */\nPNG_EXTERN png_fixed_point png_muldiv_warn PNGARG((png_structp png_ptr,\n    png_fixed_point a, png_int_32 multiplied_by, png_int_32 divided_by));\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n/* Calculate a reciprocal - used for gamma values.  This returns\n * 0 if the argument is 0 in order to maintain an undefined value,\n * there are no warnings.\n */\nPNG_EXTERN png_fixed_point png_reciprocal PNGARG((png_fixed_point a));\n\n/* The same but gives a reciprocal of the product of two fixed point\n * values.  Accuracy is suitable for gamma calculations but this is\n * not exact - use png_muldiv for that.\n */\nPNG_EXTERN png_fixed_point png_reciprocal2 PNGARG((png_fixed_point a,\n    png_fixed_point b));\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n/* Internal fixed point gamma correction.  These APIs are called as\n * required to convert single values - they don't need to be fast,\n * they are not used when processing image pixel values.\n *\n * While the input is an 'unsigned' value it must actually be the\n * correct bit value - 0..255 or 0..65535 as required.\n */\nPNG_EXTERN png_uint_16 png_gamma_correct PNGARG((png_structp png_ptr,\n    unsigned int value, png_fixed_point gamma_value));\nPNG_EXTERN int png_gamma_significant PNGARG((png_fixed_point gamma_value));\nPNG_EXTERN png_uint_16 png_gamma_16bit_correct PNGARG((unsigned int value,\n    png_fixed_point gamma_value));\nPNG_EXTERN png_byte png_gamma_8bit_correct PNGARG((unsigned int value,\n    png_fixed_point gamma_value));\nPNG_EXTERN void png_destroy_gamma_table(png_structp png_ptr);\nPNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr,\n    int bit_depth));\n#endif\n\n/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */\n\n#include \"pngdebug.h\"\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* PNGPRIV_H */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pngrtran.c",
    "content": "\n/* pngrtran.c - transforms the data in a row for PNG readers\n *\n * Last changed in libpng 1.5.11 [June 14, 2012]\n * Copyright (c) 1998-2012 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n *\n * This file contains functions optionally called by an application\n * in order to tell libpng how to handle data when reading a PNG.\n * Transformations that are used in both reading and writing are\n * in pngtrans.c.\n */\n\n#include \"pngpriv.h\"\n\n#ifdef PNG_READ_SUPPORTED\n\n/* Set the action on getting a CRC error for an ancillary or critical chunk. */\nvoid PNGAPI\npng_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action)\n{\n   png_debug(1, \"in png_set_crc_action\");\n\n   if (png_ptr == NULL)\n      return;\n\n   /* Tell libpng how we react to CRC errors in critical chunks */\n   switch (crit_action)\n   {\n      case PNG_CRC_NO_CHANGE:                        /* Leave setting as is */\n         break;\n\n      case PNG_CRC_WARN_USE:                               /* Warn/use data */\n         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;\n         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;\n         break;\n\n      case PNG_CRC_QUIET_USE:                             /* Quiet/use data */\n         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;\n         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |\n                           PNG_FLAG_CRC_CRITICAL_IGNORE;\n         break;\n\n      case PNG_CRC_WARN_DISCARD:    /* Not a valid action for critical data */\n         png_warning(png_ptr,\n            \"Can't discard critical data on CRC error\");\n      case PNG_CRC_ERROR_QUIT:                                /* Error/quit */\n\n      case PNG_CRC_DEFAULT:\n      default:\n         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;\n         break;\n   }\n\n   /* Tell libpng how we react to CRC errors in ancillary chunks */\n   switch (ancil_action)\n   {\n      case PNG_CRC_NO_CHANGE:                       /* Leave setting as is */\n         break;\n\n      case PNG_CRC_WARN_USE:                              /* Warn/use data */\n         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;\n         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;\n         break;\n\n      case PNG_CRC_QUIET_USE:                            /* Quiet/use data */\n         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;\n         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |\n                           PNG_FLAG_CRC_ANCILLARY_NOWARN;\n         break;\n\n      case PNG_CRC_ERROR_QUIT:                               /* Error/quit */\n         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;\n         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;\n         break;\n\n      case PNG_CRC_WARN_DISCARD:                      /* Warn/discard data */\n\n      case PNG_CRC_DEFAULT:\n      default:\n         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;\n         break;\n   }\n}\n\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n/* Handle alpha and tRNS via a background color */\nvoid PNGFAPI\npng_set_background_fixed(png_structp png_ptr,\n    png_const_color_16p background_color, int background_gamma_code,\n    int need_expand, png_fixed_point background_gamma)\n{\n   png_debug(1, \"in png_set_background_fixed\");\n\n   if (png_ptr == NULL)\n      return;\n\n   if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN)\n   {\n      png_warning(png_ptr, \"Application must supply a known background gamma\");\n      return;\n   }\n\n   png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;\n   png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n   png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n\n   png_memcpy(&(png_ptr->background), background_color,\n      png_sizeof(png_color_16));\n   png_ptr->background_gamma = background_gamma;\n   png_ptr->background_gamma_type = (png_byte)(background_gamma_code);\n   if (need_expand)\n      png_ptr->transformations |= PNG_BACKGROUND_EXPAND;\n   else\n      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;\n}\n\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nvoid PNGAPI\npng_set_background(png_structp png_ptr,\n    png_const_color_16p background_color, int background_gamma_code,\n    int need_expand, double background_gamma)\n{\n   png_set_background_fixed(png_ptr, background_color, background_gamma_code,\n      need_expand, png_fixed(png_ptr, background_gamma, \"png_set_background\"));\n}\n#  endif  /* FLOATING_POINT */\n#endif /* READ_BACKGROUND */\n\n/* Scale 16-bit depth files to 8-bit depth.  If both of these are set then the\n * one that pngrtran does first (scale) happens.  This is necessary to allow the\n * TRANSFORM and API behavior to be somewhat consistent, and it's simpler.\n */\n#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\nvoid PNGAPI\npng_set_scale_16(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_scale_16\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= PNG_SCALE_16_TO_8;\n}\n#endif\n\n#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\n/* Chop 16-bit depth files to 8-bit depth */\nvoid PNGAPI\npng_set_strip_16(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_strip_16\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= PNG_16_TO_8;\n}\n#endif\n\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\nvoid PNGAPI\npng_set_strip_alpha(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_strip_alpha\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= PNG_STRIP_ALPHA;\n}\n#endif\n\n#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)\nstatic png_fixed_point\ntranslate_gamma_flags(png_structp png_ptr, png_fixed_point output_gamma,\n   int is_screen)\n{\n   /* Check for flag values.  The main reason for having the old Mac value as a\n    * flag is that it is pretty near impossible to work out what the correct\n    * value is from Apple documentation - a working Mac system is needed to\n    * discover the value!\n    */\n   if (output_gamma == PNG_DEFAULT_sRGB ||\n      output_gamma == PNG_FP_1 / PNG_DEFAULT_sRGB)\n   {\n      /* If there is no sRGB support this just sets the gamma to the standard\n       * sRGB value.  (This is a side effect of using this function!)\n       */\n#     ifdef PNG_READ_sRGB_SUPPORTED\n         png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;\n#     endif\n      if (is_screen)\n         output_gamma = PNG_GAMMA_sRGB;\n      else\n         output_gamma = PNG_GAMMA_sRGB_INVERSE;\n   }\n\n   else if (output_gamma == PNG_GAMMA_MAC_18 ||\n      output_gamma == PNG_FP_1 / PNG_GAMMA_MAC_18)\n   {\n      if (is_screen)\n         output_gamma = PNG_GAMMA_MAC_OLD;\n      else\n         output_gamma = PNG_GAMMA_MAC_INVERSE;\n   }\n\n   return output_gamma;\n}\n\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nstatic png_fixed_point\nconvert_gamma_value(png_structp png_ptr, double output_gamma)\n{\n   /* The following silently ignores cases where fixed point (times 100,000)\n    * gamma values are passed to the floating point API.  This is safe and it\n    * means the fixed point constants work just fine with the floating point\n    * API.  The alternative would just lead to undetected errors and spurious\n    * bug reports.  Negative values fail inside the _fixed API unless they\n    * correspond to the flag values.\n    */\n   if (output_gamma > 0 && output_gamma < 128)\n      output_gamma *= PNG_FP_1;\n\n   /* This preserves -1 and -2 exactly: */\n   output_gamma = floor(output_gamma + .5);\n\n   if (output_gamma > PNG_FP_MAX || output_gamma < PNG_FP_MIN)\n      png_fixed_error(png_ptr, \"gamma value\");\n\n   return (png_fixed_point)output_gamma;\n}\n#  endif\n#endif /* READ_ALPHA_MODE || READ_GAMMA */\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\nvoid PNGFAPI\npng_set_alpha_mode_fixed(png_structp png_ptr, int mode,\n   png_fixed_point output_gamma)\n{\n   int compose = 0;\n   png_fixed_point file_gamma;\n\n   png_debug(1, \"in png_set_alpha_mode\");\n\n   if (png_ptr == NULL)\n      return;\n\n   output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);\n\n   /* Validate the value to ensure it is in a reasonable range. The value\n    * is expected to be 1 or greater, but this range test allows for some\n    * viewing correction values.  The intent is to weed out users of this API\n    * who use the inverse of the gamma value accidentally!  Since some of these\n    * values are reasonable this may have to be changed.\n    */\n   if (output_gamma < 70000 || output_gamma > 300000)\n      png_error(png_ptr, \"output gamma out of expected range\");\n\n   /* The default file gamma is the inverse of the output gamma; the output\n    * gamma may be changed below so get the file value first:\n    */\n   file_gamma = png_reciprocal(output_gamma);\n\n   /* There are really 8 possibilities here, composed of any combination\n    * of:\n    *\n    *    premultiply the color channels\n    *    do not encode non-opaque pixels\n    *    encode the alpha as well as the color channels\n    *\n    * The differences disappear if the input/output ('screen') gamma is 1.0,\n    * because then the encoding is a no-op and there is only the choice of\n    * premultiplying the color channels or not.\n    *\n    * png_set_alpha_mode and png_set_background interact because both use\n    * png_compose to do the work.  Calling both is only useful when\n    * png_set_alpha_mode is used to set the default mode - PNG_ALPHA_PNG - along\n    * with a default gamma value.  Otherwise PNG_COMPOSE must not be set.\n    */\n   switch (mode)\n   {\n      case PNG_ALPHA_PNG:        /* default: png standard */\n         /* No compose, but it may be set by png_set_background! */\n         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n         break;\n\n      case PNG_ALPHA_ASSOCIATED: /* color channels premultiplied */\n         compose = 1;\n         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n         /* The output is linear: */\n         output_gamma = PNG_FP_1;\n         break;\n\n      case PNG_ALPHA_OPTIMIZED:  /* associated, non-opaque pixels linear */\n         compose = 1;\n         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n         png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;\n         /* output_gamma records the encoding of opaque pixels! */\n         break;\n\n      case PNG_ALPHA_BROKEN:     /* associated, non-linear, alpha encoded */\n         compose = 1;\n         png_ptr->transformations |= PNG_ENCODE_ALPHA;\n         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n         break;\n\n      default:\n         png_error(png_ptr, \"invalid alpha mode\");\n   }\n\n   /* Only set the default gamma if the file gamma has not been set (this has\n    * the side effect that the gamma in a second call to png_set_alpha_mode will\n    * be ignored.)\n    */\n   if (png_ptr->gamma == 0)\n      png_ptr->gamma = file_gamma;\n\n   /* But always set the output gamma: */\n   png_ptr->screen_gamma = output_gamma;\n\n   /* Finally, if pre-multiplying, set the background fields to achieve the\n    * desired result.\n    */\n   if (compose)\n   {\n      /* And obtain alpha pre-multiplication by composing on black: */\n      png_memset(&png_ptr->background, 0, sizeof png_ptr->background);\n      png_ptr->background_gamma = png_ptr->gamma; /* just in case */\n      png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;\n      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;\n\n      if (png_ptr->transformations & PNG_COMPOSE)\n         png_error(png_ptr,\n            \"conflicting calls to set alpha mode and background\");\n\n      png_ptr->transformations |= PNG_COMPOSE;\n   }\n\n   /* New API, make sure apps call the correct initializers: */\n   png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;\n}\n\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nvoid PNGAPI\npng_set_alpha_mode(png_structp png_ptr, int mode, double output_gamma)\n{\n   png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,\n      output_gamma));\n}\n#  endif\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n/* Dither file to 8-bit.  Supply a palette, the current number\n * of elements in the palette, the maximum number of elements\n * allowed, and a histogram if possible.  If the current number\n * of colors is greater then the maximum number, the palette will be\n * modified to fit in the maximum number.  \"full_quantize\" indicates\n * whether we need a quantizing cube set up for RGB images, or if we\n * simply are reducing the number of colors in a paletted image.\n */\n\ntypedef struct png_dsort_struct\n{\n   struct png_dsort_struct FAR * next;\n   png_byte left;\n   png_byte right;\n} png_dsort;\ntypedef png_dsort FAR *       png_dsortp;\ntypedef png_dsort FAR * FAR * png_dsortpp;\n\nvoid PNGAPI\npng_set_quantize(png_structp png_ptr, png_colorp palette,\n    int num_palette, int maximum_colors, png_const_uint_16p histogram,\n    int full_quantize)\n{\n   png_debug(1, \"in png_set_quantize\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= PNG_QUANTIZE;\n\n   if (!full_quantize)\n   {\n      int i;\n\n      png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,\n          (png_uint_32)(num_palette * png_sizeof(png_byte)));\n      for (i = 0; i < num_palette; i++)\n         png_ptr->quantize_index[i] = (png_byte)i;\n   }\n\n   if (num_palette > maximum_colors)\n   {\n      if (histogram != NULL)\n      {\n         /* This is easy enough, just throw out the least used colors.\n          * Perhaps not the best solution, but good enough.\n          */\n\n         int i;\n\n         /* Initialize an array to sort colors */\n         png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,\n             (png_uint_32)(num_palette * png_sizeof(png_byte)));\n\n         /* Initialize the quantize_sort array */\n         for (i = 0; i < num_palette; i++)\n            png_ptr->quantize_sort[i] = (png_byte)i;\n\n         /* Find the least used palette entries by starting a\n          * bubble sort, and running it until we have sorted\n          * out enough colors.  Note that we don't care about\n          * sorting all the colors, just finding which are\n          * least used.\n          */\n\n         for (i = num_palette - 1; i >= maximum_colors; i--)\n         {\n            int done; /* To stop early if the list is pre-sorted */\n            int j;\n\n            done = 1;\n            for (j = 0; j < i; j++)\n            {\n               if (histogram[png_ptr->quantize_sort[j]]\n                   < histogram[png_ptr->quantize_sort[j + 1]])\n               {\n                  png_byte t;\n\n                  t = png_ptr->quantize_sort[j];\n                  png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];\n                  png_ptr->quantize_sort[j + 1] = t;\n                  done = 0;\n               }\n            }\n\n            if (done)\n               break;\n         }\n\n         /* Swap the palette around, and set up a table, if necessary */\n         if (full_quantize)\n         {\n            int j = num_palette;\n\n            /* Put all the useful colors within the max, but don't\n             * move the others.\n             */\n            for (i = 0; i < maximum_colors; i++)\n            {\n               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)\n               {\n                  do\n                     j--;\n                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);\n\n                  palette[i] = palette[j];\n               }\n            }\n         }\n         else\n         {\n            int j = num_palette;\n\n            /* Move all the used colors inside the max limit, and\n             * develop a translation table.\n             */\n            for (i = 0; i < maximum_colors; i++)\n            {\n               /* Only move the colors we need to */\n               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)\n               {\n                  png_color tmp_color;\n\n                  do\n                     j--;\n                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);\n\n                  tmp_color = palette[j];\n                  palette[j] = palette[i];\n                  palette[i] = tmp_color;\n                  /* Indicate where the color went */\n                  png_ptr->quantize_index[j] = (png_byte)i;\n                  png_ptr->quantize_index[i] = (png_byte)j;\n               }\n            }\n\n            /* Find closest color for those colors we are not using */\n            for (i = 0; i < num_palette; i++)\n            {\n               if ((int)png_ptr->quantize_index[i] >= maximum_colors)\n               {\n                  int min_d, k, min_k, d_index;\n\n                  /* Find the closest color to one we threw out */\n                  d_index = png_ptr->quantize_index[i];\n                  min_d = PNG_COLOR_DIST(palette[d_index], palette[0]);\n                  for (k = 1, min_k = 0; k < maximum_colors; k++)\n                  {\n                     int d;\n\n                     d = PNG_COLOR_DIST(palette[d_index], palette[k]);\n\n                     if (d < min_d)\n                     {\n                        min_d = d;\n                        min_k = k;\n                     }\n                  }\n                  /* Point to closest color */\n                  png_ptr->quantize_index[i] = (png_byte)min_k;\n               }\n            }\n         }\n         png_free(png_ptr, png_ptr->quantize_sort);\n         png_ptr->quantize_sort = NULL;\n      }\n      else\n      {\n         /* This is much harder to do simply (and quickly).  Perhaps\n          * we need to go through a median cut routine, but those\n          * don't always behave themselves with only a few colors\n          * as input.  So we will just find the closest two colors,\n          * and throw out one of them (chosen somewhat randomly).\n          * [We don't understand this at all, so if someone wants to\n          *  work on improving it, be our guest - AED, GRP]\n          */\n         int i;\n         int max_d;\n         int num_new_palette;\n         png_dsortp t;\n         png_dsortpp hash;\n\n         t = NULL;\n\n         /* Initialize palette index arrays */\n         png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,\n             (png_uint_32)(num_palette * png_sizeof(png_byte)));\n         png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,\n             (png_uint_32)(num_palette * png_sizeof(png_byte)));\n\n         /* Initialize the sort array */\n         for (i = 0; i < num_palette; i++)\n         {\n            png_ptr->index_to_palette[i] = (png_byte)i;\n            png_ptr->palette_to_index[i] = (png_byte)i;\n         }\n\n         hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *\n             png_sizeof(png_dsortp)));\n\n         num_new_palette = num_palette;\n\n         /* Initial wild guess at how far apart the farthest pixel\n          * pair we will be eliminating will be.  Larger\n          * numbers mean more areas will be allocated, Smaller\n          * numbers run the risk of not saving enough data, and\n          * having to do this all over again.\n          *\n          * I have not done extensive checking on this number.\n          */\n         max_d = 96;\n\n         while (num_new_palette > maximum_colors)\n         {\n            for (i = 0; i < num_new_palette - 1; i++)\n            {\n               int j;\n\n               for (j = i + 1; j < num_new_palette; j++)\n               {\n                  int d;\n\n                  d = PNG_COLOR_DIST(palette[i], palette[j]);\n\n                  if (d <= max_d)\n                  {\n\n                     t = (png_dsortp)png_malloc_warn(png_ptr,\n                         (png_uint_32)(png_sizeof(png_dsort)));\n\n                     if (t == NULL)\n                         break;\n\n                     t->next = hash[d];\n                     t->left = (png_byte)i;\n                     t->right = (png_byte)j;\n                     hash[d] = t;\n                  }\n               }\n               if (t == NULL)\n                  break;\n            }\n\n            if (t != NULL)\n            for (i = 0; i <= max_d; i++)\n            {\n               if (hash[i] != NULL)\n               {\n                  png_dsortp p;\n\n                  for (p = hash[i]; p; p = p->next)\n                  {\n                     if ((int)png_ptr->index_to_palette[p->left]\n                         < num_new_palette &&\n                         (int)png_ptr->index_to_palette[p->right]\n                         < num_new_palette)\n                     {\n                        int j, next_j;\n\n                        if (num_new_palette & 0x01)\n                        {\n                           j = p->left;\n                           next_j = p->right;\n                        }\n                        else\n                        {\n                           j = p->right;\n                           next_j = p->left;\n                        }\n\n                        num_new_palette--;\n                        palette[png_ptr->index_to_palette[j]]\n                            = palette[num_new_palette];\n                        if (!full_quantize)\n                        {\n                           int k;\n\n                           for (k = 0; k < num_palette; k++)\n                           {\n                              if (png_ptr->quantize_index[k] ==\n                                  png_ptr->index_to_palette[j])\n                                 png_ptr->quantize_index[k] =\n                                     png_ptr->index_to_palette[next_j];\n\n                              if ((int)png_ptr->quantize_index[k] ==\n                                  num_new_palette)\n                                 png_ptr->quantize_index[k] =\n                                     png_ptr->index_to_palette[j];\n                           }\n                        }\n\n                        png_ptr->index_to_palette[png_ptr->palette_to_index\n                            [num_new_palette]] = png_ptr->index_to_palette[j];\n\n                        png_ptr->palette_to_index[png_ptr->index_to_palette[j]]\n                            = png_ptr->palette_to_index[num_new_palette];\n\n                        png_ptr->index_to_palette[j] =\n                            (png_byte)num_new_palette;\n\n                        png_ptr->palette_to_index[num_new_palette] =\n                            (png_byte)j;\n                     }\n                     if (num_new_palette <= maximum_colors)\n                        break;\n                  }\n                  if (num_new_palette <= maximum_colors)\n                     break;\n               }\n            }\n\n            for (i = 0; i < 769; i++)\n            {\n               if (hash[i] != NULL)\n               {\n                  png_dsortp p = hash[i];\n                  while (p)\n                  {\n                     t = p->next;\n                     png_free(png_ptr, p);\n                     p = t;\n                  }\n               }\n               hash[i] = 0;\n            }\n            max_d += 96;\n         }\n         png_free(png_ptr, hash);\n         png_free(png_ptr, png_ptr->palette_to_index);\n         png_free(png_ptr, png_ptr->index_to_palette);\n         png_ptr->palette_to_index = NULL;\n         png_ptr->index_to_palette = NULL;\n      }\n      num_palette = maximum_colors;\n   }\n   if (png_ptr->palette == NULL)\n   {\n      png_ptr->palette = palette;\n   }\n   png_ptr->num_palette = (png_uint_16)num_palette;\n\n   if (full_quantize)\n   {\n      int i;\n      png_bytep distance;\n      int total_bits = PNG_QUANTIZE_RED_BITS + PNG_QUANTIZE_GREEN_BITS +\n          PNG_QUANTIZE_BLUE_BITS;\n      int num_red = (1 << PNG_QUANTIZE_RED_BITS);\n      int num_green = (1 << PNG_QUANTIZE_GREEN_BITS);\n      int num_blue = (1 << PNG_QUANTIZE_BLUE_BITS);\n      png_size_t num_entries = ((png_size_t)1 << total_bits);\n\n      png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,\n          (png_uint_32)(num_entries * png_sizeof(png_byte)));\n\n      distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *\n          png_sizeof(png_byte)));\n\n      png_memset(distance, 0xff, num_entries * png_sizeof(png_byte));\n\n      for (i = 0; i < num_palette; i++)\n      {\n         int ir, ig, ib;\n         int r = (palette[i].red >> (8 - PNG_QUANTIZE_RED_BITS));\n         int g = (palette[i].green >> (8 - PNG_QUANTIZE_GREEN_BITS));\n         int b = (palette[i].blue >> (8 - PNG_QUANTIZE_BLUE_BITS));\n\n         for (ir = 0; ir < num_red; ir++)\n         {\n            /* int dr = abs(ir - r); */\n            int dr = ((ir > r) ? ir - r : r - ir);\n            int index_r = (ir << (PNG_QUANTIZE_BLUE_BITS +\n                PNG_QUANTIZE_GREEN_BITS));\n\n            for (ig = 0; ig < num_green; ig++)\n            {\n               /* int dg = abs(ig - g); */\n               int dg = ((ig > g) ? ig - g : g - ig);\n               int dt = dr + dg;\n               int dm = ((dr > dg) ? dr : dg);\n               int index_g = index_r | (ig << PNG_QUANTIZE_BLUE_BITS);\n\n               for (ib = 0; ib < num_blue; ib++)\n               {\n                  int d_index = index_g | ib;\n                  /* int db = abs(ib - b); */\n                  int db = ((ib > b) ? ib - b : b - ib);\n                  int dmax = ((dm > db) ? dm : db);\n                  int d = dmax + dt + db;\n\n                  if (d < (int)distance[d_index])\n                  {\n                     distance[d_index] = (png_byte)d;\n                     png_ptr->palette_lookup[d_index] = (png_byte)i;\n                  }\n               }\n            }\n         }\n      }\n\n      png_free(png_ptr, distance);\n   }\n}\n#endif /* PNG_READ_QUANTIZE_SUPPORTED */\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\nvoid PNGFAPI\npng_set_gamma_fixed(png_structp png_ptr, png_fixed_point scrn_gamma,\n   png_fixed_point file_gamma)\n{\n   png_debug(1, \"in png_set_gamma_fixed\");\n\n   if (png_ptr == NULL)\n      return;\n\n   /* New in libpng-1.5.4 - reserve particular negative values as flags. */\n   scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);\n   file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);\n\n#if PNG_LIBPNG_VER >= 10600\n   /* Checking the gamma values for being >0 was added in 1.5.4 along with the\n    * premultiplied alpha support; this actually hides an undocumented feature\n    * of the previous implementation which allowed gamma processing to be\n    * disabled in background handling.  There is no evidence (so far) that this\n    * was being used; however, png_set_background itself accepted and must still\n    * accept '0' for the gamma value it takes, because it isn't always used.\n    *\n    * Since this is an API change (albeit a very minor one that removes an\n    * undocumented API feature) it will not be made until libpng-1.6.0.\n    */\n   if (file_gamma <= 0)\n      png_error(png_ptr, \"invalid file gamma in png_set_gamma\");\n\n   if (scrn_gamma <= 0)\n      png_error(png_ptr, \"invalid screen gamma in png_set_gamma\");\n#endif\n\n   /* Set the gamma values unconditionally - this overrides the value in the PNG\n    * file if a gAMA chunk was present.  png_set_alpha_mode provides a\n    * different, easier, way to default the file gamma.\n    */\n   png_ptr->gamma = file_gamma;\n   png_ptr->screen_gamma = scrn_gamma;\n}\n\n#  ifdef PNG_FLOATING_POINT_SUPPORTED\nvoid PNGAPI\npng_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma)\n{\n   png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),\n      convert_gamma_value(png_ptr, file_gamma));\n}\n#  endif /* FLOATING_POINT_SUPPORTED */\n#endif /* READ_GAMMA */\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\n/* Expand paletted images to RGB, expand grayscale images of\n * less than 8-bit depth to 8-bit depth, and expand tRNS chunks\n * to alpha channels.\n */\nvoid PNGAPI\npng_set_expand(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_expand\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);\n   png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n}\n\n/* GRR 19990627:  the following three functions currently are identical\n *  to png_set_expand().  However, it is entirely reasonable that someone\n *  might wish to expand an indexed image to RGB but *not* expand a single,\n *  fully transparent palette entry to a full alpha channel--perhaps instead\n *  convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace\n *  the transparent color with a particular RGB value, or drop tRNS entirely.\n *  IOW, a future version of the library may make the transformations flag\n *  a bit more fine-grained, with separate bits for each of these three\n *  functions.\n *\n *  More to the point, these functions make it obvious what libpng will be\n *  doing, whereas \"expand\" can (and does) mean any number of things.\n *\n *  GRP 20060307: In libpng-1.2.9, png_set_gray_1_2_4_to_8() was modified\n *  to expand only the sample depth but not to expand the tRNS to alpha\n *  and its name was changed to png_set_expand_gray_1_2_4_to_8().\n */\n\n/* Expand paletted images to RGB. */\nvoid PNGAPI\npng_set_palette_to_rgb(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_palette_to_rgb\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);\n   png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n}\n\n/* Expand grayscale images of less than 8-bit depth to 8 bits. */\nvoid PNGAPI\npng_set_expand_gray_1_2_4_to_8(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_expand_gray_1_2_4_to_8\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= PNG_EXPAND;\n   png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n}\n\n\n\n/* Expand tRNS chunks to alpha channels. */\nvoid PNGAPI\npng_set_tRNS_to_alpha(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_tRNS_to_alpha\");\n\n   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);\n   png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n}\n#endif /* defined(PNG_READ_EXPAND_SUPPORTED) */\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\n/* Expand to 16-bit channels, expand the tRNS chunk too (because otherwise\n * it may not work correctly.)\n */\nvoid PNGAPI\npng_set_expand_16(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_expand_16\");\n\n   if (png_ptr == NULL)\n      return;\n\n   png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);\n   png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n\n   /* New API, make sure apps call the correct initializers: */\n   png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;\n}\n#endif\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\nvoid PNGAPI\npng_set_gray_to_rgb(png_structp png_ptr)\n{\n   png_debug(1, \"in png_set_gray_to_rgb\");\n\n   if (png_ptr != NULL)\n   {\n      /* Because rgb must be 8 bits or more: */\n      png_set_expand_gray_1_2_4_to_8(png_ptr);\n      png_ptr->transformations |= PNG_GRAY_TO_RGB;\n      png_ptr->flags &= ~PNG_FLAG_ROW_INIT;\n   }\n}\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\nvoid PNGFAPI\npng_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,\n    png_fixed_point red, png_fixed_point green)\n{\n   png_debug(1, \"in png_set_rgb_to_gray\");\n\n   if (png_ptr == NULL)\n      return;\n\n   switch(error_action)\n   {\n      case PNG_ERROR_ACTION_NONE:\n         png_ptr->transformations |= PNG_RGB_TO_GRAY;\n         break;\n\n      case PNG_ERROR_ACTION_WARN:\n         png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;\n         break;\n\n      case PNG_ERROR_ACTION_ERROR:\n         png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;\n         break;\n\n      default:\n         png_error(png_ptr, \"invalid error action to rgb_to_gray\");\n         break;\n   }\n   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)\n#ifdef PNG_READ_EXPAND_SUPPORTED\n      png_ptr->transformations |= PNG_EXPAND;\n#else\n   {\n      png_warning(png_ptr,\n        \"Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED\");\n\n      png_ptr->transformations &= ~PNG_RGB_TO_GRAY;\n   }\n#endif\n   {\n      if (red >= 0 && green >= 0 && red + green <= PNG_FP_1)\n      {\n         png_uint_16 red_int, green_int;\n\n         /* NOTE: this calculation does not round, but this behavior is retained\n          * for consistency, the inaccuracy is very small.  The code here always\n          * overwrites the coefficients, regardless of whether they have been\n          * defaulted or set already.\n          */\n         red_int = (png_uint_16)(((png_uint_32)red*32768)/100000);\n         green_int = (png_uint_16)(((png_uint_32)green*32768)/100000);\n\n         png_ptr->rgb_to_gray_red_coeff   = red_int;\n         png_ptr->rgb_to_gray_green_coeff = green_int;\n         png_ptr->rgb_to_gray_coefficients_set = 1;\n      }\n\n      else\n      {\n         if (red >= 0 && green >= 0)\n            png_warning(png_ptr,\n               \"ignoring out of range rgb_to_gray coefficients\");\n\n         /* Use the defaults, from the cHRM chunk if set, else the historical\n          * values which are close to the sRGB/HDTV/ITU-Rec 709 values.  See\n          * png_do_rgb_to_gray for more discussion of the values.  In this case\n          * the coefficients are not marked as 'set' and are not overwritten if\n          * something has already provided a default.\n          */\n         if (png_ptr->rgb_to_gray_red_coeff == 0 &&\n            png_ptr->rgb_to_gray_green_coeff == 0)\n         {\n            png_ptr->rgb_to_gray_red_coeff   = 6968;\n            png_ptr->rgb_to_gray_green_coeff = 23434;\n            /* png_ptr->rgb_to_gray_blue_coeff  = 2366; */\n         }\n      }\n   }\n}\n\n#ifdef PNG_FLOATING_POINT_SUPPORTED\n/* Convert a RGB image to a grayscale of the same width.  This allows us,\n * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.\n */\n\nvoid PNGAPI\npng_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,\n   double green)\n{\n   if (png_ptr == NULL)\n      return;\n\n   png_set_rgb_to_gray_fixed(png_ptr, error_action,\n      png_fixed(png_ptr, red, \"rgb to gray red coefficient\"),\n      png_fixed(png_ptr, green, \"rgb to gray green coefficient\"));\n}\n#endif /* FLOATING POINT */\n\n#endif\n\n#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \\\n    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)\nvoid PNGAPI\npng_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr\n    read_user_transform_fn)\n{\n   png_debug(1, \"in png_set_read_user_transform_fn\");\n\n   if (png_ptr == NULL)\n      return;\n\n#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED\n   png_ptr->transformations |= PNG_USER_TRANSFORM;\n   png_ptr->read_user_transform_fn = read_user_transform_fn;\n#endif\n}\n#endif\n\n#ifdef PNG_READ_TRANSFORMS_SUPPORTED\n#ifdef PNG_READ_GAMMA_SUPPORTED\n/* In the case of gamma transformations only do transformations on images where\n * the [file] gamma and screen_gamma are not close reciprocals, otherwise it\n * slows things down slightly, and also needlessly introduces small errors.\n */\nstatic int /* PRIVATE */\npng_gamma_threshold(png_fixed_point screen_gamma, png_fixed_point file_gamma)\n{\n   /* PNG_GAMMA_THRESHOLD is the threshold for performing gamma\n    * correction as a difference of the overall transform from 1.0\n    *\n    * We want to compare the threshold with s*f - 1, if we get\n    * overflow here it is because of wacky gamma values so we\n    * turn on processing anyway.\n    */\n   png_fixed_point gtest;\n   return !png_muldiv(&gtest, screen_gamma, file_gamma, PNG_FP_1) ||\n       png_gamma_significant(gtest);\n}\n#endif\n\n/* Initialize everything needed for the read.  This includes modifying\n * the palette.\n */\n\n/*For the moment 'png_init_palette_transformations' and\n * 'png_init_rgb_transformations' only do some flag canceling optimizations.\n * The intent is that these two routines should have palette or rgb operations\n * extracted from 'png_init_read_transformations'.\n */\nstatic void /* PRIVATE */\npng_init_palette_transformations(png_structp png_ptr)\n{\n   /* Called to handle the (input) palette case.  In png_do_read_transformations\n    * the first step is to expand the palette if requested, so this code must\n    * take care to only make changes that are invariant with respect to the\n    * palette expansion, or only do them if there is no expansion.\n    *\n    * STRIP_ALPHA has already been handled in the caller (by setting num_trans\n    * to 0.)\n    */\n   int input_has_alpha = 0;\n   int input_has_transparency = 0;\n\n   if (png_ptr->num_trans > 0)\n   {\n      int i;\n\n      /* Ignore if all the entries are opaque (unlikely!) */\n      for (i=0; i<png_ptr->num_trans; ++i)\n         if (png_ptr->trans_alpha[i] == 255)\n            continue;\n         else if (png_ptr->trans_alpha[i] == 0)\n            input_has_transparency = 1;\n         else\n            input_has_alpha = 1;\n   }\n\n   /* If no alpha we can optimize. */\n   if (!input_has_alpha)\n   {\n      /* Any alpha means background and associative alpha processing is\n       * required, however if the alpha is 0 or 1 throughout OPTIIMIZE_ALPHA\n       * and ENCODE_ALPHA are irrelevant.\n       */\n      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n\n      if (!input_has_transparency)\n         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);\n   }\n\n#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)\n   /* png_set_background handling - deals with the complexity of whether the\n    * background color is in the file format or the screen format in the case\n    * where an 'expand' will happen.\n    */\n\n   /* The following code cannot be entered in the alpha pre-multiplication case\n    * because PNG_BACKGROUND_EXPAND is cancelled below.\n    */\n   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&\n       (png_ptr->transformations & PNG_EXPAND))\n   {\n      {\n         png_ptr->background.red   =\n             png_ptr->palette[png_ptr->background.index].red;\n         png_ptr->background.green =\n             png_ptr->palette[png_ptr->background.index].green;\n         png_ptr->background.blue  =\n             png_ptr->palette[png_ptr->background.index].blue;\n\n#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED\n        if (png_ptr->transformations & PNG_INVERT_ALPHA)\n        {\n           if (!(png_ptr->transformations & PNG_EXPAND_tRNS))\n           {\n              /* Invert the alpha channel (in tRNS) unless the pixels are\n               * going to be expanded, in which case leave it for later\n               */\n              int i, istop = png_ptr->num_trans;\n\n              for (i=0; i<istop; i++)\n                 png_ptr->trans_alpha[i] = (png_byte)(255 -\n                    png_ptr->trans_alpha[i]);\n           }\n        }\n#endif /* PNG_READ_INVERT_ALPHA_SUPPORTED */\n      }\n   } /* background expand and (therefore) no alpha association. */\n#endif /* PNG_READ_EXPAND_SUPPORTED && PNG_READ_BACKGROUND_SUPPORTED */\n}\n\nstatic void /* PRIVATE */\npng_init_rgb_transformations(png_structp png_ptr)\n{\n   /* Added to libpng-1.5.4: check the color type to determine whether there\n    * is any alpha or transparency in the image and simply cancel the\n    * background and alpha mode stuff if there isn't.\n    */\n   int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;\n   int input_has_transparency = png_ptr->num_trans > 0;\n\n   /* If no alpha we can optimize. */\n   if (!input_has_alpha)\n   {\n      /* Any alpha means background and associative alpha processing is\n       * required, however if the alpha is 0 or 1 throughout OPTIIMIZE_ALPHA\n       * and ENCODE_ALPHA are irrelevant.\n       */\n#     ifdef PNG_READ_ALPHA_MODE_SUPPORTED\n         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n#     endif\n\n      if (!input_has_transparency)\n         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);\n   }\n\n#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)\n   /* png_set_background handling - deals with the complexity of whether the\n    * background color is in the file format or the screen format in the case\n    * where an 'expand' will happen.\n    */\n\n   /* The following code cannot be entered in the alpha pre-multiplication case\n    * because PNG_BACKGROUND_EXPAND is cancelled below.\n    */\n   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&\n       (png_ptr->transformations & PNG_EXPAND) &&\n       !(png_ptr->color_type & PNG_COLOR_MASK_COLOR))\n       /* i.e., GRAY or GRAY_ALPHA */\n   {\n      {\n         /* Expand background and tRNS chunks */\n         int gray = png_ptr->background.gray;\n         int trans_gray = png_ptr->trans_color.gray;\n\n         switch (png_ptr->bit_depth)\n         {\n            case 1:\n               gray *= 0xff;\n               trans_gray *= 0xff;\n               break;\n\n            case 2:\n               gray *= 0x55;\n               trans_gray *= 0x55;\n               break;\n\n            case 4:\n               gray *= 0x11;\n               trans_gray *= 0x11;\n               break;\n\n            default:\n\n            case 8:\n               /* Already 8 bits, fall through */\n\n            case 16:\n               /* Already a full 16 bits */\n               break;\n         }\n\n         png_ptr->background.red = png_ptr->background.green =\n            png_ptr->background.blue = (png_uint_16)gray;\n\n         if (!(png_ptr->transformations & PNG_EXPAND_tRNS))\n         {\n            png_ptr->trans_color.red = png_ptr->trans_color.green =\n               png_ptr->trans_color.blue = (png_uint_16)trans_gray;\n         }\n      }\n   } /* background expand and (therefore) no alpha association. */\n#endif /* PNG_READ_EXPAND_SUPPORTED && PNG_READ_BACKGROUND_SUPPORTED */\n}\n\nvoid /* PRIVATE */\npng_init_read_transformations(png_structp png_ptr)\n{\n   png_debug(1, \"in png_init_read_transformations\");\n\n   /* This internal function is called from png_read_start_row in pngrutil.c\n    * and it is called before the 'rowbytes' calculation is done, so the code\n    * in here can change or update the transformations flags.\n    *\n    * First do updates that do not depend on the details of the PNG image data\n    * being processed.\n    */\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   /* Prior to 1.5.4 these tests were performed from png_set_gamma, 1.5.4 adds\n    * png_set_alpha_mode and this is another source for a default file gamma so\n    * the test needs to be performed later - here.  In addition prior to 1.5.4\n    * the tests were repeated for the PALETTE color type here - this is no\n    * longer necessary (and doesn't seem to have been necessary before.)\n    */\n   {\n      /* The following temporary indicates if overall gamma correction is\n       * required.\n       */\n      int gamma_correction = 0;\n\n      if (png_ptr->gamma != 0) /* has been set */\n      {\n         if (png_ptr->screen_gamma != 0) /* screen set too */\n            gamma_correction = png_gamma_threshold(png_ptr->gamma,\n               png_ptr->screen_gamma);\n\n         else\n            /* Assume the output matches the input; a long time default behavior\n             * of libpng, although the standard has nothing to say about this.\n             */\n            png_ptr->screen_gamma = png_reciprocal(png_ptr->gamma);\n      }\n\n      else if (png_ptr->screen_gamma != 0)\n         /* The converse - assume the file matches the screen, note that this\n          * perhaps undesireable default can (from 1.5.4) be changed by calling\n          * png_set_alpha_mode (even if the alpha handling mode isn't required\n          * or isn't changed from the default.)\n          */\n         png_ptr->gamma = png_reciprocal(png_ptr->screen_gamma);\n\n      else /* neither are set */\n         /* Just in case the following prevents any processing - file and screen\n          * are both assumed to be linear and there is no way to introduce a\n          * third gamma value other than png_set_background with 'UNIQUE', and,\n          * prior to 1.5.4\n          */\n         png_ptr->screen_gamma = png_ptr->gamma = PNG_FP_1;\n\n      /* Now turn the gamma transformation on or off as appropriate.  Notice\n       * that PNG_GAMMA just refers to the file->screen correction.  Alpha\n       * composition may independently cause gamma correction because it needs\n       * linear data (e.g. if the file has a gAMA chunk but the screen gamma\n       * hasn't been specified.)  In any case this flag may get turned off in\n       * the code immediately below if the transform can be handled outside the\n       * row loop.\n       */\n      if (gamma_correction)\n         png_ptr->transformations |= PNG_GAMMA;\n\n      else\n         png_ptr->transformations &= ~PNG_GAMMA;\n   }\n#endif\n\n   /* Certain transformations have the effect of preventing other\n    * transformations that happen afterward in png_do_read_transformations,\n    * resolve the interdependencies here.  From the code of\n    * png_do_read_transformations the order is:\n    *\n    *  1) PNG_EXPAND (including PNG_EXPAND_tRNS)\n    *  2) PNG_STRIP_ALPHA (if no compose)\n    *  3) PNG_RGB_TO_GRAY\n    *  4) PNG_GRAY_TO_RGB iff !PNG_BACKGROUND_IS_GRAY\n    *  5) PNG_COMPOSE\n    *  6) PNG_GAMMA\n    *  7) PNG_STRIP_ALPHA (if compose)\n    *  8) PNG_ENCODE_ALPHA\n    *  9) PNG_SCALE_16_TO_8\n    * 10) PNG_16_TO_8\n    * 11) PNG_QUANTIZE (converts to palette)\n    * 12) PNG_EXPAND_16\n    * 13) PNG_GRAY_TO_RGB iff PNG_BACKGROUND_IS_GRAY\n    * 14) PNG_INVERT_MONO\n    * 15) PNG_SHIFT\n    * 16) PNG_PACK\n    * 17) PNG_BGR\n    * 18) PNG_PACKSWAP\n    * 19) PNG_FILLER (includes PNG_ADD_ALPHA)\n    * 20) PNG_INVERT_ALPHA\n    * 21) PNG_SWAP_ALPHA\n    * 22) PNG_SWAP_BYTES\n    * 23) PNG_USER_TRANSFORM [must be last]\n    */\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\n   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&\n      !(png_ptr->transformations & PNG_COMPOSE))\n   {\n      /* Stripping the alpha channel happens immediately after the 'expand'\n       * transformations, before all other transformation, so it cancels out\n       * the alpha handling.  It has the side effect negating the effect of\n       * PNG_EXPAND_tRNS too:\n       */\n      png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |\n         PNG_EXPAND_tRNS);\n      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n\n      /* Kill the tRNS chunk itself too.  Prior to 1.5.4 this did not happen\n       * so transparency information would remain just so long as it wasn't\n       * expanded.  This produces unexpected API changes if the set of things\n       * that do PNG_EXPAND_tRNS changes (perfectly possible given the\n       * documentation - which says ask for what you want, accept what you\n       * get.)  This makes the behavior consistent from 1.5.4:\n       */\n      png_ptr->num_trans = 0;\n   }\n#endif /* STRIP_ALPHA supported, no COMPOSE */\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\n   /* If the screen gamma is about 1.0 then the OPTIMIZE_ALPHA and ENCODE_ALPHA\n    * settings will have no effect.\n    */\n   if (!png_gamma_significant(png_ptr->screen_gamma))\n   {\n      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;\n      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;\n   }\n#endif\n\n#if defined(PNG_READ_EXPAND_SUPPORTED) && \\\n   defined(PNG_READ_BACKGROUND_SUPPORTED) && \\\n   defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)\n   /* Detect gray background and attempt to enable optimization for\n    * gray --> RGB case.\n    *\n    * Note:  if PNG_BACKGROUND_EXPAND is set and color_type is either RGB or\n    * RGB_ALPHA (in which case need_expand is superfluous anyway), the\n    * background color might actually be gray yet not be flagged as such.\n    * This is not a problem for the current code, which uses\n    * PNG_BACKGROUND_IS_GRAY only to decide when to do the\n    * png_do_gray_to_rgb() transformation.\n    *\n    * TODO: this code needs to be revised to avoid the complexity and\n    * interdependencies.  The color type of the background should be recorded in\n    * png_set_background, along with the bit depth, then the code has a record\n    * of exactly what color space the background is currently in.\n    */\n   if (png_ptr->transformations & PNG_BACKGROUND_EXPAND)\n   {\n      /* PNG_BACKGROUND_EXPAND: the background is in the file color space, so if\n       * the file was grayscale the background value is gray.\n       */\n      if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR))\n         png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;\n   }\n\n   else if (png_ptr->transformations & PNG_COMPOSE)\n   {\n      /* PNG_COMPOSE: png_set_background was called with need_expand false,\n       * so the color is in the color space of the output or png_set_alpha_mode\n       * was called and the color is black.  Ignore RGB_TO_GRAY because that\n       * happens before GRAY_TO_RGB.\n       */\n      if (png_ptr->transformations & PNG_GRAY_TO_RGB)\n      {\n         if (png_ptr->background.red == png_ptr->background.green &&\n             png_ptr->background.red == png_ptr->background.blue)\n         {\n            png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;\n            png_ptr->background.gray = png_ptr->background.red;\n         }\n      }\n   }\n#endif /* PNG_READ_GRAY_TO_RGB_SUPPORTED (etc) */\n\n   /* For indexed PNG data (PNG_COLOR_TYPE_PALETTE) many of the transformations\n    * can be performed directly on the palette, and some (such as rgb to gray)\n    * can be optimized inside the palette.  This is particularly true of the\n    * composite (background and alpha) stuff, which can be pretty much all done\n    * in the palette even if the result is expanded to RGB or gray afterward.\n    *\n    * NOTE: this is Not Yet Implemented, the code behaves as in 1.5.1 and\n    * earlier and the palette stuff is actually handled on the first row.  This\n    * leads to the reported bug that the palette returned by png_get_PLTE is not\n    * updated.\n    */\n   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)\n      png_init_palette_transformations(png_ptr);\n\n   else\n      png_init_rgb_transformations(png_ptr);\n\n#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \\\n   defined(PNG_READ_EXPAND_16_SUPPORTED)\n   if ((png_ptr->transformations & PNG_EXPAND_16) &&\n      (png_ptr->transformations & PNG_COMPOSE) &&\n      !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&\n      png_ptr->bit_depth != 16)\n   {\n      /* TODO: fix this.  Because the expand_16 operation is after the compose\n       * handling the background color must be 8, not 16, bits deep, but the\n       * application will supply a 16-bit value so reduce it here.\n       *\n       * The PNG_BACKGROUND_EXPAND code above does not expand to 16 bits at\n       * present, so that case is ok (until do_expand_16 is moved.)\n       *\n       * NOTE: this discards the low 16 bits of the user supplied background\n       * color, but until expand_16 works properly there is no choice!\n       */\n#     define CHOP(x) (x)=((png_uint_16)(((png_uint_32)(x)*255+32895) >> 16))\n      CHOP(png_ptr->background.red);\n      CHOP(png_ptr->background.green);\n      CHOP(png_ptr->background.blue);\n      CHOP(png_ptr->background.gray);\n#     undef CHOP\n   }\n#endif /* PNG_READ_BACKGROUND_SUPPORTED && PNG_READ_EXPAND_16_SUPPORTED */\n\n#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \\\n   (defined(PNG_READ_SCALE_16_TO_8_SUPPORTED) || \\\n   defined(PNG_READ_STRIP_16_TO_8_SUPPORTED))\n   if ((png_ptr->transformations & (PNG_16_TO_8|PNG_SCALE_16_TO_8)) &&\n      (png_ptr->transformations & PNG_COMPOSE) &&\n      !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&\n      png_ptr->bit_depth == 16)\n   {\n      /* On the other hand, if a 16-bit file is to be reduced to 8-bits per\n       * component this will also happen after PNG_COMPOSE and so the background\n       * color must be pre-expanded here.\n       *\n       * TODO: fix this too.\n       */\n      png_ptr->background.red = (png_uint_16)(png_ptr->background.red * 257);\n      png_ptr->background.green =\n         (png_uint_16)(png_ptr->background.green * 257);\n      png_ptr->background.blue = (png_uint_16)(png_ptr->background.blue * 257);\n      png_ptr->background.gray = (png_uint_16)(png_ptr->background.gray * 257);\n   }\n#endif\n\n   /* NOTE: below 'PNG_READ_ALPHA_MODE_SUPPORTED' is presumed to also enable the\n    * background support (see the comments in scripts/pnglibconf.dfa), this\n    * allows pre-multiplication of the alpha channel to be implemented as\n    * compositing on black.  This is probably sub-optimal and has been done in\n    * 1.5.4 betas simply to enable external critique and testing (i.e. to\n    * implement the new API quickly, without lots of internal changes.)\n    */\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n#  ifdef PNG_READ_BACKGROUND_SUPPORTED\n      /* Includes ALPHA_MODE */\n      png_ptr->background_1 = png_ptr->background;\n#  endif\n\n   /* This needs to change - in the palette image case a whole set of tables are\n    * built when it would be quicker to just calculate the correct value for\n    * each palette entry directly.  Also, the test is too tricky - why check\n    * PNG_RGB_TO_GRAY if PNG_GAMMA is not set?  The answer seems to be that\n    * PNG_GAMMA is cancelled even if the gamma is known?  The test excludes the\n    * PNG_COMPOSE case, so apparently if there is no *overall* gamma correction\n    * the gamma tables will not be built even if composition is required on a\n    * gamma encoded value.\n    *\n    * In 1.5.4 this is addressed below by an additional check on the individual\n    * file gamma - if it is not 1.0 both RGB_TO_GRAY and COMPOSE need the\n    * tables.\n    */\n   if ((png_ptr->transformations & PNG_GAMMA)\n      || ((png_ptr->transformations & PNG_RGB_TO_GRAY)\n         && (png_gamma_significant(png_ptr->gamma) ||\n            png_gamma_significant(png_ptr->screen_gamma)))\n      || ((png_ptr->transformations & PNG_COMPOSE)\n         && (png_gamma_significant(png_ptr->gamma)\n            || png_gamma_significant(png_ptr->screen_gamma)\n#  ifdef PNG_READ_BACKGROUND_SUPPORTED\n            || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE\n               && png_gamma_significant(png_ptr->background_gamma))\n#  endif\n      )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA)\n         && png_gamma_significant(png_ptr->screen_gamma))\n      )\n   {\n      png_build_gamma_table(png_ptr, png_ptr->bit_depth);\n\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n      if (png_ptr->transformations & PNG_COMPOSE)\n      {\n         /* Issue a warning about this combination: because RGB_TO_GRAY is\n          * optimized to do the gamma transform if present yet do_background has\n          * to do the same thing if both options are set a\n          * double-gamma-correction happens.  This is true in all versions of\n          * libpng to date.\n          */\n         if (png_ptr->transformations & PNG_RGB_TO_GRAY)\n            png_warning(png_ptr,\n               \"libpng does not support gamma+background+rgb_to_gray\");\n\n         if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)\n         {\n            /* We don't get to here unless there is a tRNS chunk with non-opaque\n             * entries - see the checking code at the start of this function.\n             */\n            png_color back, back_1;\n            png_colorp palette = png_ptr->palette;\n            int num_palette = png_ptr->num_palette;\n            int i;\n            if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)\n            {\n\n               back.red = png_ptr->gamma_table[png_ptr->background.red];\n               back.green = png_ptr->gamma_table[png_ptr->background.green];\n               back.blue = png_ptr->gamma_table[png_ptr->background.blue];\n\n               back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];\n               back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];\n               back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];\n            }\n            else\n            {\n               png_fixed_point g, gs;\n\n               switch (png_ptr->background_gamma_type)\n               {\n                  case PNG_BACKGROUND_GAMMA_SCREEN:\n                     g = (png_ptr->screen_gamma);\n                     gs = PNG_FP_1;\n                     break;\n\n                  case PNG_BACKGROUND_GAMMA_FILE:\n                     g = png_reciprocal(png_ptr->gamma);\n                     gs = png_reciprocal2(png_ptr->gamma,\n                        png_ptr->screen_gamma);\n                     break;\n\n                  case PNG_BACKGROUND_GAMMA_UNIQUE:\n                     g = png_reciprocal(png_ptr->background_gamma);\n                     gs = png_reciprocal2(png_ptr->background_gamma,\n                        png_ptr->screen_gamma);\n                     break;\n                  default:\n                     g = PNG_FP_1;    /* back_1 */\n                     gs = PNG_FP_1;   /* back */\n                     break;\n               }\n\n               if (png_gamma_significant(gs))\n               {\n                  back.red = png_gamma_8bit_correct(png_ptr->background.red,\n                      gs);\n                  back.green = png_gamma_8bit_correct(png_ptr->background.green,\n                      gs);\n                  back.blue = png_gamma_8bit_correct(png_ptr->background.blue,\n                      gs);\n               }\n\n               else\n               {\n                  back.red   = (png_byte)png_ptr->background.red;\n                  back.green = (png_byte)png_ptr->background.green;\n                  back.blue  = (png_byte)png_ptr->background.blue;\n               }\n\n               if (png_gamma_significant(g))\n               {\n                  back_1.red = png_gamma_8bit_correct(png_ptr->background.red,\n                     g);\n                  back_1.green = png_gamma_8bit_correct(\n                     png_ptr->background.green, g);\n                  back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,\n                     g);\n               }\n\n               else\n               {\n                  back_1.red   = (png_byte)png_ptr->background.red;\n                  back_1.green = (png_byte)png_ptr->background.green;\n                  back_1.blue  = (png_byte)png_ptr->background.blue;\n               }\n            }\n\n            for (i = 0; i < num_palette; i++)\n            {\n               if (i < (int)png_ptr->num_trans &&\n                   png_ptr->trans_alpha[i] != 0xff)\n               {\n                  if (png_ptr->trans_alpha[i] == 0)\n                  {\n                     palette[i] = back;\n                  }\n                  else /* if (png_ptr->trans_alpha[i] != 0xff) */\n                  {\n                     png_byte v, w;\n\n                     v = png_ptr->gamma_to_1[palette[i].red];\n                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);\n                     palette[i].red = png_ptr->gamma_from_1[w];\n\n                     v = png_ptr->gamma_to_1[palette[i].green];\n                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);\n                     palette[i].green = png_ptr->gamma_from_1[w];\n\n                     v = png_ptr->gamma_to_1[palette[i].blue];\n                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);\n                     palette[i].blue = png_ptr->gamma_from_1[w];\n                  }\n               }\n               else\n               {\n                  palette[i].red = png_ptr->gamma_table[palette[i].red];\n                  palette[i].green = png_ptr->gamma_table[palette[i].green];\n                  palette[i].blue = png_ptr->gamma_table[palette[i].blue];\n               }\n            }\n\n            /* Prevent the transformations being done again.\n             *\n             * NOTE: this is highly dubious; it removes the transformations in\n             * place.  This seems inconsistent with the general treatment of the\n             * transformations elsewhere.\n             */\n            png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);\n         } /* color_type == PNG_COLOR_TYPE_PALETTE */\n\n         /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */\n         else /* color_type != PNG_COLOR_TYPE_PALETTE */\n         {\n            int gs_sig, g_sig;\n            png_fixed_point g = PNG_FP_1;  /* Correction to linear */\n            png_fixed_point gs = PNG_FP_1; /* Correction to screen */\n\n            switch (png_ptr->background_gamma_type)\n            {\n               case PNG_BACKGROUND_GAMMA_SCREEN:\n                  g = png_ptr->screen_gamma;\n                  /* gs = PNG_FP_1; */\n                  break;\n\n               case PNG_BACKGROUND_GAMMA_FILE:\n                  g = png_reciprocal(png_ptr->gamma);\n                  gs = png_reciprocal2(png_ptr->gamma, png_ptr->screen_gamma);\n                  break;\n\n               case PNG_BACKGROUND_GAMMA_UNIQUE:\n                  g = png_reciprocal(png_ptr->background_gamma);\n                  gs = png_reciprocal2(png_ptr->background_gamma,\n                      png_ptr->screen_gamma);\n                  break;\n\n               default:\n                  png_error(png_ptr, \"invalid background gamma type\");\n            }\n\n            g_sig = png_gamma_significant(g);\n            gs_sig = png_gamma_significant(gs);\n\n            if (g_sig)\n               png_ptr->background_1.gray = png_gamma_correct(png_ptr,\n                   png_ptr->background.gray, g);\n\n            if (gs_sig)\n               png_ptr->background.gray = png_gamma_correct(png_ptr,\n                   png_ptr->background.gray, gs);\n\n            if ((png_ptr->background.red != png_ptr->background.green) ||\n                (png_ptr->background.red != png_ptr->background.blue) ||\n                (png_ptr->background.red != png_ptr->background.gray))\n            {\n               /* RGB or RGBA with color background */\n               if (g_sig)\n               {\n                  png_ptr->background_1.red = png_gamma_correct(png_ptr,\n                      png_ptr->background.red, g);\n\n                  png_ptr->background_1.green = png_gamma_correct(png_ptr,\n                      png_ptr->background.green, g);\n\n                  png_ptr->background_1.blue = png_gamma_correct(png_ptr,\n                      png_ptr->background.blue, g);\n               }\n\n               if (gs_sig)\n               {\n                  png_ptr->background.red = png_gamma_correct(png_ptr,\n                      png_ptr->background.red, gs);\n\n                  png_ptr->background.green = png_gamma_correct(png_ptr,\n                      png_ptr->background.green, gs);\n\n                  png_ptr->background.blue = png_gamma_correct(png_ptr,\n                      png_ptr->background.blue, gs);\n               }\n            }\n\n            else\n            {\n               /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */\n               png_ptr->background_1.red = png_ptr->background_1.green\n                   = png_ptr->background_1.blue = png_ptr->background_1.gray;\n\n               png_ptr->background.red = png_ptr->background.green\n                   = png_ptr->background.blue = png_ptr->background.gray;\n            }\n\n            /* The background is now in screen gamma: */\n            png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;\n         } /* color_type != PNG_COLOR_TYPE_PALETTE */\n      }/* png_ptr->transformations & PNG_BACKGROUND */\n\n      else\n      /* Transformation does not include PNG_BACKGROUND */\n#endif /* PNG_READ_BACKGROUND_SUPPORTED */\n      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n         /* RGB_TO_GRAY needs to have non-gamma-corrected values! */\n         && ((png_ptr->transformations & PNG_EXPAND) == 0 ||\n         (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)\n#endif\n         )\n      {\n         png_colorp palette = png_ptr->palette;\n         int num_palette = png_ptr->num_palette;\n         int i;\n\n         /* NOTE: there are other transformations that should probably be in\n          * here too.\n          */\n         for (i = 0; i < num_palette; i++)\n         {\n            palette[i].red = png_ptr->gamma_table[palette[i].red];\n            palette[i].green = png_ptr->gamma_table[palette[i].green];\n            palette[i].blue = png_ptr->gamma_table[palette[i].blue];\n         }\n\n         /* Done the gamma correction. */\n         png_ptr->transformations &= ~PNG_GAMMA;\n      } /* color_type == PALETTE && !PNG_BACKGROUND transformation */\n   }\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n   else\n#endif\n#endif /* PNG_READ_GAMMA_SUPPORTED */\n\n#ifdef PNG_READ_BACKGROUND_SUPPORTED\n   /* No GAMMA transformation (see the hanging else 4 lines above) */\n   if ((png_ptr->transformations & PNG_COMPOSE) &&\n       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))\n   {\n      int i;\n      int istop = (int)png_ptr->num_trans;\n      png_color back;\n      png_colorp palette = png_ptr->palette;\n\n      back.red   = (png_byte)png_ptr->background.red;\n      back.green = (png_byte)png_ptr->background.green;\n      back.blue  = (png_byte)png_ptr->background.blue;\n\n      for (i = 0; i < istop; i++)\n      {\n         if (png_ptr->trans_alpha[i] == 0)\n         {\n            palette[i] = back;\n         }\n\n         else if (png_ptr->trans_alpha[i] != 0xff)\n         {\n            /* The png_composite() macro is defined in png.h */\n            png_composite(palette[i].red, palette[i].red,\n                png_ptr->trans_alpha[i], back.red);\n\n            png_composite(palette[i].green, palette[i].green,\n                png_ptr->trans_alpha[i], back.green);\n\n            png_composite(palette[i].blue, palette[i].blue,\n                png_ptr->trans_alpha[i], back.blue);\n         }\n      }\n\n      png_ptr->transformations &= ~PNG_COMPOSE;\n   }\n#endif /* PNG_READ_BACKGROUND_SUPPORTED */\n\n#ifdef PNG_READ_SHIFT_SUPPORTED\n   if ((png_ptr->transformations & PNG_SHIFT) &&\n      !(png_ptr->transformations & PNG_EXPAND) &&\n       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))\n   {\n      int i;\n      int istop = png_ptr->num_palette;\n      int shift = 8 - png_ptr->sig_bit.red;\n\n      png_ptr->transformations &= ~PNG_SHIFT;\n\n      /* significant bits can be in the range 1 to 7 for a meaninful result, if\n       * the number of significant bits is 0 then no shift is done (this is an\n       * error condition which is silently ignored.)\n       */\n      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)\n      {\n         int component = png_ptr->palette[i].red;\n\n         component >>= shift;\n         png_ptr->palette[i].red = (png_byte)component;\n      }\n\n      shift = 8 - png_ptr->sig_bit.green;\n      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)\n      {\n         int component = png_ptr->palette[i].green;\n\n         component >>= shift;\n         png_ptr->palette[i].green = (png_byte)component;\n      }\n\n      shift = 8 - png_ptr->sig_bit.blue;\n      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)\n      {\n         int component = png_ptr->palette[i].blue;\n\n         component >>= shift;\n         png_ptr->palette[i].blue = (png_byte)component;\n      }\n   }\n#endif  /* PNG_READ_SHIFT_SUPPORTED */\n}\n\n/* Modify the info structure to reflect the transformations.  The\n * info should be updated so a PNG file could be written with it,\n * assuming the transformations result in valid PNG data.\n */\nvoid /* PRIVATE */\npng_read_transform_info(png_structp png_ptr, png_infop info_ptr)\n{\n   png_debug(1, \"in png_read_transform_info\");\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\n   if (png_ptr->transformations & PNG_EXPAND)\n   {\n      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)\n      {\n         /* This check must match what actually happens in\n          * png_do_expand_palette; if it ever checks the tRNS chunk to see if\n          * it is all opaque we must do the same (at present it does not.)\n          */\n         if (png_ptr->num_trans > 0)\n            info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;\n\n         else\n            info_ptr->color_type = PNG_COLOR_TYPE_RGB;\n\n         info_ptr->bit_depth = 8;\n         info_ptr->num_trans = 0;\n      }\n      else\n      {\n         if (png_ptr->num_trans)\n         {\n            if (png_ptr->transformations & PNG_EXPAND_tRNS)\n               info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;\n         }\n         if (info_ptr->bit_depth < 8)\n            info_ptr->bit_depth = 8;\n\n         info_ptr->num_trans = 0;\n      }\n   }\n#endif\n\n#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\\\n   defined(PNG_READ_ALPHA_MODE_SUPPORTED)\n   /* The following is almost certainly wrong unless the background value is in\n    * the screen space!\n    */\n   if (png_ptr->transformations & PNG_COMPOSE)\n      info_ptr->background = png_ptr->background;\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   /* The following used to be conditional on PNG_GAMMA (prior to 1.5.4),\n    * however it seems that the code in png_init_read_transformations, which has\n    * been called before this from png_read_update_info->png_read_start_row\n    * sometimes does the gamma transform and cancels the flag.\n    */\n   info_ptr->gamma = png_ptr->gamma;\n#endif\n\n   if (info_ptr->bit_depth == 16)\n   {\n#  ifdef PNG_READ_16BIT_SUPPORTED\n#     ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\n         if (png_ptr->transformations & PNG_SCALE_16_TO_8)\n            info_ptr->bit_depth = 8;\n#     endif\n\n#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\n         if (png_ptr->transformations & PNG_16_TO_8)\n            info_ptr->bit_depth = 8;\n#     endif\n\n#  else\n      /* No 16 bit support: force chopping 16-bit input down to 8, in this case\n       * the app program can chose if both APIs are available by setting the\n       * correct scaling to use.\n       */\n#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\n         /* For compatibility with previous versions use the strip method by\n          * default.  This code works because if PNG_SCALE_16_TO_8 is already\n          * set the code below will do that in preference to the chop.\n          */\n         png_ptr->transformations |= PNG_16_TO_8;\n         info_ptr->bit_depth = 8;\n#     else\n\n#        ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\n            png_ptr->transformations |= PNG_SCALE_16_TO_8;\n            info_ptr->bit_depth = 8;\n#        else\n\n            CONFIGURATION ERROR: you must enable at least one 16 to 8 method\n#        endif\n#    endif\n#endif /* !READ_16BIT_SUPPORTED */\n   }\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\n   if (png_ptr->transformations & PNG_GRAY_TO_RGB)\n      info_ptr->color_type = (png_byte)(info_ptr->color_type |\n         PNG_COLOR_MASK_COLOR);\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n   if (png_ptr->transformations & PNG_RGB_TO_GRAY)\n      info_ptr->color_type = (png_byte)(info_ptr->color_type &\n         ~PNG_COLOR_MASK_COLOR);\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n   if (png_ptr->transformations & PNG_QUANTIZE)\n   {\n      if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||\n          (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) &&\n          png_ptr->palette_lookup && info_ptr->bit_depth == 8)\n      {\n         info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;\n      }\n   }\n#endif\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\n   if (png_ptr->transformations & PNG_EXPAND_16 && info_ptr->bit_depth == 8 &&\n      info_ptr->color_type != PNG_COLOR_TYPE_PALETTE)\n   {\n      info_ptr->bit_depth = 16;\n   }\n#endif\n\n#ifdef PNG_READ_PACK_SUPPORTED\n   if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))\n      info_ptr->bit_depth = 8;\n#endif\n\n   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)\n      info_ptr->channels = 1;\n\n   else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)\n      info_ptr->channels = 3;\n\n   else\n      info_ptr->channels = 1;\n\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\n   if (png_ptr->transformations & PNG_STRIP_ALPHA)\n   {\n      info_ptr->color_type = (png_byte)(info_ptr->color_type &\n         ~PNG_COLOR_MASK_ALPHA);\n      info_ptr->num_trans = 0;\n   }\n#endif\n\n   if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)\n      info_ptr->channels++;\n\n#ifdef PNG_READ_FILLER_SUPPORTED\n   /* STRIP_ALPHA and FILLER allowed:  MASK_ALPHA bit stripped above */\n   if ((png_ptr->transformations & PNG_FILLER) &&\n       ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||\n       (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))\n   {\n      info_ptr->channels++;\n      /* If adding a true alpha channel not just filler */\n      if (png_ptr->transformations & PNG_ADD_ALPHA)\n         info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;\n   }\n#endif\n\n#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \\\ndefined(PNG_READ_USER_TRANSFORM_SUPPORTED)\n   if (png_ptr->transformations & PNG_USER_TRANSFORM)\n   {\n      if (info_ptr->bit_depth < png_ptr->user_transform_depth)\n         info_ptr->bit_depth = png_ptr->user_transform_depth;\n\n      if (info_ptr->channels < png_ptr->user_transform_channels)\n         info_ptr->channels = png_ptr->user_transform_channels;\n   }\n#endif\n\n   info_ptr->pixel_depth = (png_byte)(info_ptr->channels *\n       info_ptr->bit_depth);\n\n   info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, info_ptr->width);\n\n   /* Adding in 1.5.4: cache the above value in png_struct so that we can later\n    * check in png_rowbytes that the user buffer won't get overwritten.  Note\n    * that the field is not always set - if png_read_update_info isn't called\n    * the application has to either not do any transforms or get the calculation\n    * right itself.\n    */\n   png_ptr->info_rowbytes = info_ptr->rowbytes;\n\n#ifndef PNG_READ_EXPAND_SUPPORTED\n   if (png_ptr)\n      return;\n#endif\n}\n\n/* Transform the row.  The order of transformations is significant,\n * and is very touchy.  If you add a transformation, take care to\n * decide how it fits in with the other transformations here.\n */\nvoid /* PRIVATE */\npng_do_read_transformations(png_structp png_ptr, png_row_infop row_info)\n{\n   png_debug(1, \"in png_do_read_transformations\");\n\n   if (png_ptr->row_buf == NULL)\n   {\n      /* Prior to 1.5.4 this output row/pass where the NULL pointer is, but this\n       * error is incredibly rare and incredibly easy to debug without this\n       * information.\n       */\n      png_error(png_ptr, \"NULL row buffer\");\n   }\n\n   /* The following is debugging; prior to 1.5.4 the code was never compiled in;\n    * in 1.5.4 PNG_FLAG_DETECT_UNINITIALIZED was added and the macro\n    * PNG_WARN_UNINITIALIZED_ROW removed.  In 1.5 the new flag is set only for\n    * selected new APIs to ensure that there is no API change.\n    */\n   if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&\n      !(png_ptr->flags & PNG_FLAG_ROW_INIT))\n   {\n      /* Application has failed to call either png_read_start_image() or\n       * png_read_update_info() after setting transforms that expand pixels.\n       * This check added to libpng-1.2.19 (but not enabled until 1.5.4).\n       */\n      png_error(png_ptr, \"Uninitialized row\");\n   }\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\n   if (png_ptr->transformations & PNG_EXPAND)\n   {\n      if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)\n      {\n         png_do_expand_palette(row_info, png_ptr->row_buf + 1,\n             png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);\n      }\n\n      else\n      {\n         if (png_ptr->num_trans &&\n             (png_ptr->transformations & PNG_EXPAND_tRNS))\n            png_do_expand(row_info, png_ptr->row_buf + 1,\n                &(png_ptr->trans_color));\n\n         else\n            png_do_expand(row_info, png_ptr->row_buf + 1,\n                NULL);\n      }\n   }\n#endif\n\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\n   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&\n      !(png_ptr->transformations & PNG_COMPOSE) &&\n      (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||\n      row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))\n      png_do_strip_channel(row_info, png_ptr->row_buf + 1,\n         0 /* at_start == false, because SWAP_ALPHA happens later */);\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n   if (png_ptr->transformations & PNG_RGB_TO_GRAY)\n   {\n      int rgb_error =\n          png_do_rgb_to_gray(png_ptr, row_info,\n              png_ptr->row_buf + 1);\n\n      if (rgb_error)\n      {\n         png_ptr->rgb_to_gray_status=1;\n         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==\n             PNG_RGB_TO_GRAY_WARN)\n            png_warning(png_ptr, \"png_do_rgb_to_gray found nongray pixel\");\n\n         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==\n             PNG_RGB_TO_GRAY_ERR)\n            png_error(png_ptr, \"png_do_rgb_to_gray found nongray pixel\");\n      }\n   }\n#endif\n\n/* From Andreas Dilger e-mail to png-implement, 26 March 1998:\n *\n *   In most cases, the \"simple transparency\" should be done prior to doing\n *   gray-to-RGB, or you will have to test 3x as many bytes to check if a\n *   pixel is transparent.  You would also need to make sure that the\n *   transparency information is upgraded to RGB.\n *\n *   To summarize, the current flow is:\n *   - Gray + simple transparency -> compare 1 or 2 gray bytes and composite\n *                                   with background \"in place\" if transparent,\n *                                   convert to RGB if necessary\n *   - Gray + alpha -> composite with gray background and remove alpha bytes,\n *                                   convert to RGB if necessary\n *\n *   To support RGB backgrounds for gray images we need:\n *   - Gray + simple transparency -> convert to RGB + simple transparency,\n *                                   compare 3 or 6 bytes and composite with\n *                                   background \"in place\" if transparent\n *                                   (3x compare/pixel compared to doing\n *                                   composite with gray bkgrnd)\n *   - Gray + alpha -> convert to RGB + alpha, composite with background and\n *                                   remove alpha bytes (3x float\n *                                   operations/pixel compared with composite\n *                                   on gray background)\n *\n *  Greg's change will do this.  The reason it wasn't done before is for\n *  performance, as this increases the per-pixel operations.  If we would check\n *  in advance if the background was gray or RGB, and position the gray-to-RGB\n *  transform appropriately, then it would save a lot of work/time.\n */\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\n   /* If gray -> RGB, do so now only if background is non-gray; else do later\n    * for performance reasons\n    */\n   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&\n       !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))\n      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);\n#endif\n\n#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\\\n   (defined PNG_READ_ALPHA_MODE_SUPPORTED)\n   if (png_ptr->transformations & PNG_COMPOSE)\n      png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   if ((png_ptr->transformations & PNG_GAMMA) &&\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n      /* Because RGB_TO_GRAY does the gamma transform. */\n      !(png_ptr->transformations & PNG_RGB_TO_GRAY) &&\n#endif\n#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\\\n   (defined PNG_READ_ALPHA_MODE_SUPPORTED)\n      /* Because PNG_COMPOSE does the gamma transform if there is something to\n       * do (if there is an alpha channel or transparency.)\n       */\n       !((png_ptr->transformations & PNG_COMPOSE) &&\n       ((png_ptr->num_trans != 0) ||\n       (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&\n#endif\n      /* Because png_init_read_transformations transforms the palette, unless\n       * RGB_TO_GRAY will do the transform.\n       */\n       (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))\n      png_do_gamma(row_info, png_ptr->row_buf + 1, png_ptr);\n#endif\n\n#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED\n   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&\n      (png_ptr->transformations & PNG_COMPOSE) &&\n      (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||\n      row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))\n      png_do_strip_channel(row_info, png_ptr->row_buf + 1,\n         0 /* at_start == false, because SWAP_ALPHA happens later */);\n#endif\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\n   if ((png_ptr->transformations & PNG_ENCODE_ALPHA) &&\n      (row_info->color_type & PNG_COLOR_MASK_ALPHA))\n      png_do_encode_alpha(row_info, png_ptr->row_buf + 1, png_ptr);\n#endif\n\n#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\n   if (png_ptr->transformations & PNG_SCALE_16_TO_8)\n      png_do_scale_16_to_8(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\n   /* There is no harm in doing both of these because only one has any effect,\n    * by putting the 'scale' option first if the app asks for scale (either by\n    * calling the API or in a TRANSFORM flag) this is what happens.\n    */\n   if (png_ptr->transformations & PNG_16_TO_8)\n      png_do_chop(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n   if (png_ptr->transformations & PNG_QUANTIZE)\n   {\n      png_do_quantize(row_info, png_ptr->row_buf + 1,\n          png_ptr->palette_lookup, png_ptr->quantize_index);\n\n      if (row_info->rowbytes == 0)\n         png_error(png_ptr, \"png_do_quantize returned rowbytes=0\");\n   }\n#endif /* PNG_READ_QUANTIZE_SUPPORTED */\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\n   /* Do the expansion now, after all the arithmetic has been done.  Notice\n    * that previous transformations can handle the PNG_EXPAND_16 flag if this\n    * is efficient (particularly true in the case of gamma correction, where\n    * better accuracy results faster!)\n    */\n   if (png_ptr->transformations & PNG_EXPAND_16)\n      png_do_expand_16(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\n   /* NOTE: moved here in 1.5.4 (from much later in this list.) */\n   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&\n       (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))\n      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_INVERT_SUPPORTED\n   if (png_ptr->transformations & PNG_INVERT_MONO)\n      png_do_invert(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_SHIFT_SUPPORTED\n   if (png_ptr->transformations & PNG_SHIFT)\n      png_do_unshift(row_info, png_ptr->row_buf + 1,\n          &(png_ptr->shift));\n#endif\n\n#ifdef PNG_READ_PACK_SUPPORTED\n   if (png_ptr->transformations & PNG_PACK)\n      png_do_unpack(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED\n   /* Added at libpng-1.5.10 */\n   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&\n       png_ptr->num_palette_max >= 0)\n      png_do_check_palette_indexes(png_ptr, row_info);\n#endif\n\n#ifdef PNG_READ_BGR_SUPPORTED\n   if (png_ptr->transformations & PNG_BGR)\n      png_do_bgr(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_PACKSWAP_SUPPORTED\n   if (png_ptr->transformations & PNG_PACKSWAP)\n      png_do_packswap(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_FILLER_SUPPORTED\n   if (png_ptr->transformations & PNG_FILLER)\n      png_do_read_filler(row_info, png_ptr->row_buf + 1,\n          (png_uint_32)png_ptr->filler, png_ptr->flags);\n#endif\n\n#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED\n   if (png_ptr->transformations & PNG_INVERT_ALPHA)\n      png_do_read_invert_alpha(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED\n   if (png_ptr->transformations & PNG_SWAP_ALPHA)\n      png_do_read_swap_alpha(row_info, png_ptr->row_buf + 1);\n#endif\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n#ifdef PNG_READ_SWAP_SUPPORTED\n   if (png_ptr->transformations & PNG_SWAP_BYTES)\n      png_do_swap(row_info, png_ptr->row_buf + 1);\n#endif\n#endif\n\n#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED\n   if (png_ptr->transformations & PNG_USER_TRANSFORM)\n    {\n      if (png_ptr->read_user_transform_fn != NULL)\n         (*(png_ptr->read_user_transform_fn)) /* User read transform function */\n             (png_ptr,     /* png_ptr */\n             row_info,     /* row_info: */\n                /*  png_uint_32 width;       width of row */\n                /*  png_size_t rowbytes;     number of bytes in row */\n                /*  png_byte color_type;     color type of pixels */\n                /*  png_byte bit_depth;      bit depth of samples */\n                /*  png_byte channels;       number of channels (1-4) */\n                /*  png_byte pixel_depth;    bits per pixel (depth*channels) */\n             png_ptr->row_buf + 1);    /* start of pixel data for row */\n#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED\n      if (png_ptr->user_transform_depth)\n         row_info->bit_depth = png_ptr->user_transform_depth;\n\n      if (png_ptr->user_transform_channels)\n         row_info->channels = png_ptr->user_transform_channels;\n#endif\n      row_info->pixel_depth = (png_byte)(row_info->bit_depth *\n          row_info->channels);\n\n      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_info->width);\n   }\n#endif\n}\n\n#ifdef PNG_READ_PACK_SUPPORTED\n/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel,\n * without changing the actual values.  Thus, if you had a row with\n * a bit depth of 1, you would end up with bytes that only contained\n * the numbers 0 or 1.  If you would rather they contain 0 and 255, use\n * png_do_shift() after this.\n */\nvoid /* PRIVATE */\npng_do_unpack(png_row_infop row_info, png_bytep row)\n{\n   png_debug(1, \"in png_do_unpack\");\n\n   if (row_info->bit_depth < 8)\n   {\n      png_uint_32 i;\n      png_uint_32 row_width=row_info->width;\n\n      switch (row_info->bit_depth)\n      {\n         case 1:\n         {\n            png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);\n            png_bytep dp = row + (png_size_t)row_width - 1;\n            png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07);\n            for (i = 0; i < row_width; i++)\n            {\n               *dp = (png_byte)((*sp >> shift) & 0x01);\n\n               if (shift == 7)\n               {\n                  shift = 0;\n                  sp--;\n               }\n\n               else\n                  shift++;\n\n               dp--;\n            }\n            break;\n         }\n\n         case 2:\n         {\n\n            png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);\n            png_bytep dp = row + (png_size_t)row_width - 1;\n            png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);\n            for (i = 0; i < row_width; i++)\n            {\n               *dp = (png_byte)((*sp >> shift) & 0x03);\n\n               if (shift == 6)\n               {\n                  shift = 0;\n                  sp--;\n               }\n\n               else\n                  shift += 2;\n\n               dp--;\n            }\n            break;\n         }\n\n         case 4:\n         {\n            png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);\n            png_bytep dp = row + (png_size_t)row_width - 1;\n            png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);\n            for (i = 0; i < row_width; i++)\n            {\n               *dp = (png_byte)((*sp >> shift) & 0x0f);\n\n               if (shift == 4)\n               {\n                  shift = 0;\n                  sp--;\n               }\n\n               else\n                  shift = 4;\n\n               dp--;\n            }\n            break;\n         }\n\n         default:\n            break;\n      }\n      row_info->bit_depth = 8;\n      row_info->pixel_depth = (png_byte)(8 * row_info->channels);\n      row_info->rowbytes = row_width * row_info->channels;\n   }\n}\n#endif\n\n#ifdef PNG_READ_SHIFT_SUPPORTED\n/* Reverse the effects of png_do_shift.  This routine merely shifts the\n * pixels back to their significant bits values.  Thus, if you have\n * a row of bit depth 8, but only 5 are significant, this will shift\n * the values back to 0 through 31.\n */\nvoid /* PRIVATE */\npng_do_unshift(png_row_infop row_info, png_bytep row,\n    png_const_color_8p sig_bits)\n{\n   int color_type;\n\n   png_debug(1, \"in png_do_unshift\");\n\n   /* The palette case has already been handled in the _init routine. */\n   color_type = row_info->color_type;\n\n   if (color_type != PNG_COLOR_TYPE_PALETTE)\n   {\n      int shift[4];\n      int channels = 0;\n      int bit_depth = row_info->bit_depth;\n\n      if (color_type & PNG_COLOR_MASK_COLOR)\n      {\n         shift[channels++] = bit_depth - sig_bits->red;\n         shift[channels++] = bit_depth - sig_bits->green;\n         shift[channels++] = bit_depth - sig_bits->blue;\n      }\n\n      else\n      {\n         shift[channels++] = bit_depth - sig_bits->gray;\n      }\n\n      if (color_type & PNG_COLOR_MASK_ALPHA)\n      {\n         shift[channels++] = bit_depth - sig_bits->alpha;\n      }\n\n      {\n         int c, have_shift;\n\n         for (c = have_shift = 0; c < channels; ++c)\n         {\n            /* A shift of more than the bit depth is an error condition but it\n             * gets ignored here.\n             */\n            if (shift[c] <= 0 || shift[c] >= bit_depth)\n               shift[c] = 0;\n\n            else\n               have_shift = 1;\n         }\n\n         if (!have_shift)\n            return;\n      }\n\n      switch (bit_depth)\n      {\n         default:\n         /* Must be 1bpp gray: should not be here! */\n            /* NOTREACHED */\n            break;\n\n         case 2:\n         /* Must be 2bpp gray */\n         /* assert(channels == 1 && shift[0] == 1) */\n         {\n            png_bytep bp = row;\n            png_bytep bp_end = bp + row_info->rowbytes;\n\n            while (bp < bp_end)\n            {\n               int b = (*bp >> 1) & 0x55;\n               *bp++ = (png_byte)b;\n            }\n            break;\n         }\n\n         case 4:\n         /* Must be 4bpp gray */\n         /* assert(channels == 1) */\n         {\n            png_bytep bp = row;\n            png_bytep bp_end = bp + row_info->rowbytes;\n            int gray_shift = shift[0];\n            int mask =  0xf >> gray_shift;\n\n            mask |= mask << 4;\n\n            while (bp < bp_end)\n            {\n               int b = (*bp >> gray_shift) & mask;\n               *bp++ = (png_byte)b;\n            }\n            break;\n         }\n\n         case 8:\n         /* Single byte components, G, GA, RGB, RGBA */\n         {\n            png_bytep bp = row;\n            png_bytep bp_end = bp + row_info->rowbytes;\n            int channel = 0;\n\n            while (bp < bp_end)\n            {\n               int b = *bp >> shift[channel];\n               if (++channel >= channels)\n                  channel = 0;\n               *bp++ = (png_byte)b;\n            }\n            break;\n         }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n         case 16:\n         /* Double byte components, G, GA, RGB, RGBA */\n         {\n            png_bytep bp = row;\n            png_bytep bp_end = bp + row_info->rowbytes;\n            int channel = 0;\n\n            while (bp < bp_end)\n            {\n               int value = (bp[0] << 8) + bp[1];\n\n               value >>= shift[channel];\n               if (++channel >= channels)\n                  channel = 0;\n               *bp++ = (png_byte)(value >> 8);\n               *bp++ = (png_byte)(value & 0xff);\n            }\n            break;\n         }\n#endif\n      }\n   }\n}\n#endif\n\n#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED\n/* Scale rows of bit depth 16 down to 8 accurately */\nvoid /* PRIVATE */\npng_do_scale_16_to_8(png_row_infop row_info, png_bytep row)\n{\n   png_debug(1, \"in png_do_scale_16_to_8\");\n\n   if (row_info->bit_depth == 16)\n   {\n      png_bytep sp = row; /* source */\n      png_bytep dp = row; /* destination */\n      png_bytep ep = sp + row_info->rowbytes; /* end+1 */\n\n      while (sp < ep)\n      {\n         /* The input is an array of 16 bit components, these must be scaled to\n          * 8 bits each.  For a 16 bit value V the required value (from the PNG\n          * specification) is:\n          *\n          *    (V * 255) / 65535\n          *\n          * This reduces to round(V / 257), or floor((V + 128.5)/257)\n          *\n          * Represent V as the two byte value vhi.vlo.  Make a guess that the\n          * result is the top byte of V, vhi, then the correction to this value\n          * is:\n          *\n          *    error = floor(((V-vhi.vhi) + 128.5) / 257)\n          *          = floor(((vlo-vhi) + 128.5) / 257)\n          *\n          * This can be approximated using integer arithmetic (and a signed\n          * shift):\n          *\n          *    error = (vlo-vhi+128) >> 8;\n          *\n          * The approximate differs from the exact answer only when (vlo-vhi) is\n          * 128; it then gives a correction of +1 when the exact correction is\n          * 0.  This gives 128 errors.  The exact answer (correct for all 16 bit\n          * input values) is:\n          *\n          *    error = (vlo-vhi+128)*65535 >> 24;\n          *\n          * An alternative arithmetic calculation which also gives no errors is:\n          *\n          *    (V * 255 + 32895) >> 16\n          */\n\n         png_int_32 tmp = *sp++; /* must be signed! */\n         tmp += (((int)*sp++ - tmp + 128) * 65535) >> 24;\n         *dp++ = (png_byte)tmp;\n      }\n\n      row_info->bit_depth = 8;\n      row_info->pixel_depth = (png_byte)(8 * row_info->channels);\n      row_info->rowbytes = row_info->width * row_info->channels;\n   }\n}\n#endif\n\n#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED\nvoid /* PRIVATE */\n/* Simply discard the low byte.  This was the default behavior prior\n * to libpng-1.5.4.\n */\npng_do_chop(png_row_infop row_info, png_bytep row)\n{\n   png_debug(1, \"in png_do_chop\");\n\n   if (row_info->bit_depth == 16)\n   {\n      png_bytep sp = row; /* source */\n      png_bytep dp = row; /* destination */\n      png_bytep ep = sp + row_info->rowbytes; /* end+1 */\n\n      while (sp < ep)\n      {\n         *dp++ = *sp;\n         sp += 2; /* skip low byte */\n      }\n\n      row_info->bit_depth = 8;\n      row_info->pixel_depth = (png_byte)(8 * row_info->channels);\n      row_info->rowbytes = row_info->width * row_info->channels;\n   }\n}\n#endif\n\n#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED\nvoid /* PRIVATE */\npng_do_read_swap_alpha(png_row_infop row_info, png_bytep row)\n{\n   png_debug(1, \"in png_do_read_swap_alpha\");\n\n   {\n      png_uint_32 row_width = row_info->width;\n      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)\n      {\n         /* This converts from RGBA to ARGB */\n         if (row_info->bit_depth == 8)\n         {\n            png_bytep sp = row + row_info->rowbytes;\n            png_bytep dp = sp;\n            png_byte save;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               save = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = save;\n            }\n         }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n         /* This converts from RRGGBBAA to AARRGGBB */\n         else\n         {\n            png_bytep sp = row + row_info->rowbytes;\n            png_bytep dp = sp;\n            png_byte save[2];\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               save[0] = *(--sp);\n               save[1] = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = save[0];\n               *(--dp) = save[1];\n            }\n         }\n#endif\n      }\n\n      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)\n      {\n         /* This converts from GA to AG */\n         if (row_info->bit_depth == 8)\n         {\n            png_bytep sp = row + row_info->rowbytes;\n            png_bytep dp = sp;\n            png_byte save;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               save = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = save;\n            }\n         }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n         /* This converts from GGAA to AAGG */\n         else\n         {\n            png_bytep sp = row + row_info->rowbytes;\n            png_bytep dp = sp;\n            png_byte save[2];\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               save[0] = *(--sp);\n               save[1] = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = save[0];\n               *(--dp) = save[1];\n            }\n         }\n#endif\n      }\n   }\n}\n#endif\n\n#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED\nvoid /* PRIVATE */\npng_do_read_invert_alpha(png_row_infop row_info, png_bytep row)\n{\n   png_uint_32 row_width;\n   png_debug(1, \"in png_do_read_invert_alpha\");\n\n   row_width = row_info->width;\n   if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)\n   {\n      if (row_info->bit_depth == 8)\n      {\n         /* This inverts the alpha channel in RGBA */\n         png_bytep sp = row + row_info->rowbytes;\n         png_bytep dp = sp;\n         png_uint_32 i;\n\n         for (i = 0; i < row_width; i++)\n         {\n            *(--dp) = (png_byte)(255 - *(--sp));\n\n/*          This does nothing:\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            We can replace it with:\n*/\n            sp-=3;\n            dp=sp;\n         }\n      }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n      /* This inverts the alpha channel in RRGGBBAA */\n      else\n      {\n         png_bytep sp = row + row_info->rowbytes;\n         png_bytep dp = sp;\n         png_uint_32 i;\n\n         for (i = 0; i < row_width; i++)\n         {\n            *(--dp) = (png_byte)(255 - *(--sp));\n            *(--dp) = (png_byte)(255 - *(--sp));\n\n/*          This does nothing:\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n            We can replace it with:\n*/\n            sp-=6;\n            dp=sp;\n         }\n      }\n#endif\n   }\n   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)\n   {\n      if (row_info->bit_depth == 8)\n      {\n         /* This inverts the alpha channel in GA */\n         png_bytep sp = row + row_info->rowbytes;\n         png_bytep dp = sp;\n         png_uint_32 i;\n\n         for (i = 0; i < row_width; i++)\n         {\n            *(--dp) = (png_byte)(255 - *(--sp));\n            *(--dp) = *(--sp);\n         }\n      }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n      else\n      {\n         /* This inverts the alpha channel in GGAA */\n         png_bytep sp  = row + row_info->rowbytes;\n         png_bytep dp = sp;\n         png_uint_32 i;\n\n         for (i = 0; i < row_width; i++)\n         {\n            *(--dp) = (png_byte)(255 - *(--sp));\n            *(--dp) = (png_byte)(255 - *(--sp));\n/*\n            *(--dp) = *(--sp);\n            *(--dp) = *(--sp);\n*/\n            sp-=2;\n            dp=sp;\n         }\n      }\n#endif\n   }\n}\n#endif\n\n#ifdef PNG_READ_FILLER_SUPPORTED\n/* Add filler channel if we have RGB color */\nvoid /* PRIVATE */\npng_do_read_filler(png_row_infop row_info, png_bytep row,\n    png_uint_32 filler, png_uint_32 flags)\n{\n   png_uint_32 i;\n   png_uint_32 row_width = row_info->width;\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n   png_byte hi_filler = (png_byte)((filler>>8) & 0xff);\n#endif\n   png_byte lo_filler = (png_byte)(filler & 0xff);\n\n   png_debug(1, \"in png_do_read_filler\");\n\n   if (\n       row_info->color_type == PNG_COLOR_TYPE_GRAY)\n   {\n      if (row_info->bit_depth == 8)\n      {\n         if (flags & PNG_FLAG_FILLER_AFTER)\n         {\n            /* This changes the data from G to GX */\n            png_bytep sp = row + (png_size_t)row_width;\n            png_bytep dp =  sp + (png_size_t)row_width;\n            for (i = 1; i < row_width; i++)\n            {\n               *(--dp) = lo_filler;\n               *(--dp) = *(--sp);\n            }\n            *(--dp) = lo_filler;\n            row_info->channels = 2;\n            row_info->pixel_depth = 16;\n            row_info->rowbytes = row_width * 2;\n         }\n\n         else\n         {\n            /* This changes the data from G to XG */\n            png_bytep sp = row + (png_size_t)row_width;\n            png_bytep dp = sp  + (png_size_t)row_width;\n            for (i = 0; i < row_width; i++)\n            {\n               *(--dp) = *(--sp);\n               *(--dp) = lo_filler;\n            }\n            row_info->channels = 2;\n            row_info->pixel_depth = 16;\n            row_info->rowbytes = row_width * 2;\n         }\n      }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n      else if (row_info->bit_depth == 16)\n      {\n         if (flags & PNG_FLAG_FILLER_AFTER)\n         {\n            /* This changes the data from GG to GGXX */\n            png_bytep sp = row + (png_size_t)row_width * 2;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 1; i < row_width; i++)\n            {\n               *(--dp) = hi_filler;\n               *(--dp) = lo_filler;\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n            }\n            *(--dp) = hi_filler;\n            *(--dp) = lo_filler;\n            row_info->channels = 2;\n            row_info->pixel_depth = 32;\n            row_info->rowbytes = row_width * 4;\n         }\n\n         else\n         {\n            /* This changes the data from GG to XXGG */\n            png_bytep sp = row + (png_size_t)row_width * 2;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 0; i < row_width; i++)\n            {\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = hi_filler;\n               *(--dp) = lo_filler;\n            }\n            row_info->channels = 2;\n            row_info->pixel_depth = 32;\n            row_info->rowbytes = row_width * 4;\n         }\n      }\n#endif\n   } /* COLOR_TYPE == GRAY */\n   else if (row_info->color_type == PNG_COLOR_TYPE_RGB)\n   {\n      if (row_info->bit_depth == 8)\n      {\n         if (flags & PNG_FLAG_FILLER_AFTER)\n         {\n            /* This changes the data from RGB to RGBX */\n            png_bytep sp = row + (png_size_t)row_width * 3;\n            png_bytep dp = sp  + (png_size_t)row_width;\n            for (i = 1; i < row_width; i++)\n            {\n               *(--dp) = lo_filler;\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n            }\n            *(--dp) = lo_filler;\n            row_info->channels = 4;\n            row_info->pixel_depth = 32;\n            row_info->rowbytes = row_width * 4;\n         }\n\n         else\n         {\n            /* This changes the data from RGB to XRGB */\n            png_bytep sp = row + (png_size_t)row_width * 3;\n            png_bytep dp = sp + (png_size_t)row_width;\n            for (i = 0; i < row_width; i++)\n            {\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = lo_filler;\n            }\n            row_info->channels = 4;\n            row_info->pixel_depth = 32;\n            row_info->rowbytes = row_width * 4;\n         }\n      }\n\n#ifdef PNG_READ_16BIT_SUPPORTED\n      else if (row_info->bit_depth == 16)\n      {\n         if (flags & PNG_FLAG_FILLER_AFTER)\n         {\n            /* This changes the data from RRGGBB to RRGGBBXX */\n            png_bytep sp = row + (png_size_t)row_width * 6;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 1; i < row_width; i++)\n            {\n               *(--dp) = hi_filler;\n               *(--dp) = lo_filler;\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n            }\n            *(--dp) = hi_filler;\n            *(--dp) = lo_filler;\n            row_info->channels = 4;\n            row_info->pixel_depth = 64;\n            row_info->rowbytes = row_width * 8;\n         }\n\n         else\n         {\n            /* This changes the data from RRGGBB to XXRRGGBB */\n            png_bytep sp = row + (png_size_t)row_width * 6;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 0; i < row_width; i++)\n            {\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = *(--sp);\n               *(--dp) = hi_filler;\n               *(--dp) = lo_filler;\n            }\n\n            row_info->channels = 4;\n            row_info->pixel_depth = 64;\n            row_info->rowbytes = row_width * 8;\n         }\n      }\n#endif\n   } /* COLOR_TYPE == RGB */\n}\n#endif\n\n#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED\n/* Expand grayscale files to RGB, with or without alpha */\nvoid /* PRIVATE */\npng_do_gray_to_rgb(png_row_infop row_info, png_bytep row)\n{\n   png_uint_32 i;\n   png_uint_32 row_width = row_info->width;\n\n   png_debug(1, \"in png_do_gray_to_rgb\");\n\n   if (row_info->bit_depth >= 8 &&\n       !(row_info->color_type & PNG_COLOR_MASK_COLOR))\n   {\n      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)\n      {\n         if (row_info->bit_depth == 8)\n         {\n            /* This changes G to RGB */\n            png_bytep sp = row + (png_size_t)row_width - 1;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 0; i < row_width; i++)\n            {\n               *(dp--) = *sp;\n               *(dp--) = *sp;\n               *(dp--) = *(sp--);\n            }\n         }\n\n         else\n         {\n            /* This changes GG to RRGGBB */\n            png_bytep sp = row + (png_size_t)row_width * 2 - 1;\n            png_bytep dp = sp  + (png_size_t)row_width * 4;\n            for (i = 0; i < row_width; i++)\n            {\n               *(dp--) = *sp;\n               *(dp--) = *(sp - 1);\n               *(dp--) = *sp;\n               *(dp--) = *(sp - 1);\n               *(dp--) = *(sp--);\n               *(dp--) = *(sp--);\n            }\n         }\n      }\n\n      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)\n      {\n         if (row_info->bit_depth == 8)\n         {\n            /* This changes GA to RGBA */\n            png_bytep sp = row + (png_size_t)row_width * 2 - 1;\n            png_bytep dp = sp  + (png_size_t)row_width * 2;\n            for (i = 0; i < row_width; i++)\n            {\n               *(dp--) = *(sp--);\n               *(dp--) = *sp;\n               *(dp--) = *sp;\n               *(dp--) = *(sp--);\n            }\n         }\n\n         else\n         {\n            /* This changes GGAA to RRGGBBAA */\n            png_bytep sp = row + (png_size_t)row_width * 4 - 1;\n            png_bytep dp = sp  + (png_size_t)row_width * 4;\n            for (i = 0; i < row_width; i++)\n            {\n               *(dp--) = *(sp--);\n               *(dp--) = *(sp--);\n               *(dp--) = *sp;\n               *(dp--) = *(sp - 1);\n               *(dp--) = *sp;\n               *(dp--) = *(sp - 1);\n               *(dp--) = *(sp--);\n               *(dp--) = *(sp--);\n            }\n         }\n      }\n      row_info->channels = (png_byte)(row_info->channels + 2);\n      row_info->color_type |= PNG_COLOR_MASK_COLOR;\n      row_info->pixel_depth = (png_byte)(row_info->channels *\n          row_info->bit_depth);\n      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);\n   }\n}\n#endif\n\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n/* Reduce RGB files to grayscale, with or without alpha\n * using the equation given in Poynton's ColorFAQ of 1998-01-04 at\n * <http://www.inforamp.net/~poynton/>  (THIS LINK IS DEAD June 2008 but\n * versions dated 1998 through November 2002 have been archived at\n * http://web.archive.org/web/20000816232553/http://www.inforamp.net/\n * ~poynton/notes/colour_and_gamma/ColorFAQ.txt )\n * Charles Poynton poynton at poynton.com\n *\n *     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B\n *\n *  which can be expressed with integers as\n *\n *     Y = (6969 * R + 23434 * G + 2365 * B)/32768\n *\n * Poynton's current link (as of January 2003 through July 2011):\n * <http://www.poynton.com/notes/colour_and_gamma/>\n * has changed the numbers slightly:\n *\n *     Y = 0.2126*R + 0.7152*G + 0.0722*B\n *\n *  which can be expressed with integers as\n *\n *     Y = (6966 * R + 23436 * G + 2366 * B)/32768\n *\n *  Historically, however, libpng uses numbers derived from the ITU-R Rec 709\n *  end point chromaticities and the D65 white point.  Depending on the\n *  precision used for the D65 white point this produces a variety of different\n *  numbers, however if the four decimal place value used in ITU-R Rec 709 is\n *  used (0.3127,0.3290) the Y calculation would be:\n *\n *     Y = (6968 * R + 23435 * G + 2366 * B)/32768\n *\n *  While this is correct the rounding results in an overflow for white, because\n *  the sum of the rounded coefficients is 32769, not 32768.  Consequently\n *  libpng uses, instead, the closest non-overflowing approximation:\n *\n *     Y = (6968 * R + 23434 * G + 2366 * B)/32768\n *\n *  Starting with libpng-1.5.5, if the image being converted has a cHRM chunk\n *  (including an sRGB chunk) then the chromaticities are used to calculate the\n *  coefficients.  See the chunk handling in pngrutil.c for more information.\n *\n *  In all cases the calculation is to be done in a linear colorspace.  If no\n *  gamma information is available to correct the encoding of the original RGB\n *  values this results in an implicit assumption that the original PNG RGB\n *  values were linear.\n *\n *  Other integer coefficents can be used via png_set_rgb_to_gray().  Because\n *  the API takes just red and green coefficients the blue coefficient is\n *  calculated to make the sum 32768.  This will result in different rounding\n *  to that used above.\n */\nint /* PRIVATE */\npng_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)\n\n{\n   int rgb_error = 0;\n\n   png_debug(1, \"in png_do_rgb_to_gray\");\n\n   if (!(row_info->color_type & PNG_COLOR_MASK_PALETTE) &&\n       (row_info->color_type & PNG_COLOR_MASK_COLOR))\n   {\n      PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;\n      PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;\n      PNG_CONST png_uint_32 bc = 32768 - rc - gc;\n      PNG_CONST png_uint_32 row_width = row_info->width;\n      PNG_CONST int have_alpha =\n         (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;\n\n      if (row_info->bit_depth == 8)\n      {\n#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)\n         /* Notice that gamma to/from 1 are not necessarily inverses (if\n          * there is an overall gamma correction).  Prior to 1.5.5 this code\n          * checked the linearized values for equality; this doesn't match\n          * the documentation, the original values must be checked.\n          */\n         if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)\n         {\n            png_bytep sp = row;\n            png_bytep dp = row;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               png_byte red   = *(sp++);\n               png_byte green = *(sp++);\n               png_byte blue  = *(sp++);\n\n               if (red != green || red != blue)\n               {\n                  red = png_ptr->gamma_to_1[red];\n                  green = png_ptr->gamma_to_1[green];\n                  blue = png_ptr->gamma_to_1[blue];\n\n                  rgb_error |= 1;\n                  *(dp++) = png_ptr->gamma_from_1[\n                      (rc*red + gc*green + bc*blue + 16384)>>15];\n               }\n\n               else\n               {\n                  /* If there is no overall correction the table will not be\n                   * set.\n                   */\n                  if (png_ptr->gamma_table != NULL)\n                     red = png_ptr->gamma_table[red];\n\n                  *(dp++) = red;\n               }\n\n               if (have_alpha)\n                  *(dp++) = *(sp++);\n            }\n         }\n         else\n#endif\n         {\n            png_bytep sp = row;\n            png_bytep dp = row;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               png_byte red   = *(sp++);\n               png_byte green = *(sp++);\n               png_byte blue  = *(sp++);\n\n               if (red != green || red != blue)\n               {\n                  rgb_error |= 1;\n                  /* NOTE: this is the historical approach which simply\n                   * truncates the results.\n                   */\n                  *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15);\n               }\n\n               else\n                  *(dp++) = red;\n\n               if (have_alpha)\n                  *(dp++) = *(sp++);\n            }\n         }\n      }\n\n      else /* RGB bit_depth == 16 */\n      {\n#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)\n         if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL)\n         {\n            png_bytep sp = row;\n            png_bytep dp = row;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               png_uint_16 red, green, blue, w;\n\n               red   = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n               green = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n               blue  = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n\n               if (red == green && red == blue)\n               {\n                  if (png_ptr->gamma_16_table != NULL)\n                     w = png_ptr->gamma_16_table[(red&0xff)\n                         >> png_ptr->gamma_shift][red>>8];\n\n                  else\n                     w = red;\n               }\n\n               else\n               {\n                  png_uint_16 red_1   = png_ptr->gamma_16_to_1[(red&0xff)\n                      >> png_ptr->gamma_shift][red>>8];\n                  png_uint_16 green_1 =\n                      png_ptr->gamma_16_to_1[(green&0xff) >>\n                      png_ptr->gamma_shift][green>>8];\n                  png_uint_16 blue_1  = png_ptr->gamma_16_to_1[(blue&0xff)\n                      >> png_ptr->gamma_shift][blue>>8];\n                  png_uint_16 gray16  = (png_uint_16)((rc*red_1 + gc*green_1\n                      + bc*blue_1 + 16384)>>15);\n                  w = png_ptr->gamma_16_from_1[(gray16&0xff) >>\n                      png_ptr->gamma_shift][gray16 >> 8];\n                  rgb_error |= 1;\n               }\n\n               *(dp++) = (png_byte)((w>>8) & 0xff);\n               *(dp++) = (png_byte)(w & 0xff);\n\n               if (have_alpha)\n               {\n                  *(dp++) = *(sp++);\n                  *(dp++) = *(sp++);\n               }\n            }\n         }\n         else\n#endif\n         {\n            png_bytep sp = row;\n            png_bytep dp = row;\n            png_uint_32 i;\n\n            for (i = 0; i < row_width; i++)\n            {\n               png_uint_16 red, green, blue, gray16;\n\n               red   = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n               green = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n               blue  = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;\n\n               if (red != green || red != blue)\n                  rgb_error |= 1;\n\n               /* From 1.5.5 in the 16 bit case do the accurate conversion even\n                * in the 'fast' case - this is because this is where the code\n                * ends up when handling linear 16 bit data.\n                */\n               gray16  = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>\n                  15);\n               *(dp++) = (png_byte)((gray16>>8) & 0xff);\n               *(dp++) = (png_byte)(gray16 & 0xff);\n\n               if (have_alpha)\n               {\n                  *(dp++) = *(sp++);\n                  *(dp++) = *(sp++);\n               }\n            }\n         }\n      }\n\n      row_info->channels = (png_byte)(row_info->channels - 2);\n      row_info->color_type = (png_byte)(row_info->color_type &\n          ~PNG_COLOR_MASK_COLOR);\n      row_info->pixel_depth = (png_byte)(row_info->channels *\n          row_info->bit_depth);\n      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);\n   }\n   return rgb_error;\n}\n#endif\n#endif /* PNG_READ_TRANSFORMS_SUPPORTED */\n\n#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED\n/* Build a grayscale palette.  Palette is assumed to be 1 << bit_depth\n * large of png_color.  This lets grayscale images be treated as\n * paletted.  Most useful for gamma correction and simplification\n * of code.  This API is not used internally.\n */\nvoid PNGAPI\npng_build_grayscale_palette(int bit_depth, png_colorp palette)\n{\n   int num_palette;\n   int color_inc;\n   int i;\n   int v;\n\n   png_debug(1, \"in png_do_build_grayscale_palette\");\n\n   if (palette == NULL)\n      return;\n\n   switch (bit_depth)\n   {\n      case 1:\n         num_palette = 2;\n         color_inc = 0xff;\n         break;\n\n      case 2:\n         num_palette = 4;\n         color_inc = 0x55;\n         break;\n\n      case 4:\n         num_palette = 16;\n         color_inc = 0x11;\n         break;\n\n      case 8:\n         num_palette = 256;\n         color_inc = 1;\n         break;\n\n      default:\n         num_palette = 0;\n         color_inc = 0;\n         break;\n   }\n\n   for (i = 0, v = 0; i < num_palette; i++, v += color_inc)\n   {\n      palette[i].red = (png_byte)v;\n      palette[i].green = (png_byte)v;\n      palette[i].blue = (png_byte)v;\n   }\n}\n#endif\n\n\n#ifdef PNG_READ_TRANSFORMS_SUPPORTED\n#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\\\n   (defined PNG_READ_ALPHA_MODE_SUPPORTED)\n/* Replace any alpha or transparency with the supplied background color.\n * \"background\" is already in the screen gamma, while \"background_1\" is\n * at a gamma of 1.0.  Paletted files have already been taken care of.\n */\nvoid /* PRIVATE */\npng_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr)\n{\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   png_const_bytep gamma_table = png_ptr->gamma_table;\n   png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;\n   png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;\n   png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;\n   png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;\n   png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;\n   int gamma_shift = png_ptr->gamma_shift;\n#endif\n\n   png_bytep sp;\n   png_uint_32 i;\n   png_uint_32 row_width = row_info->width;\n   int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;\n   int shift;\n\n   png_debug(1, \"in png_do_compose\");\n\n   {\n      switch (row_info->color_type)\n      {\n         case PNG_COLOR_TYPE_GRAY:\n         {\n            switch (row_info->bit_depth)\n            {\n               case 1:\n               {\n                  sp = row;\n                  shift = 7;\n                  for (i = 0; i < row_width; i++)\n                  {\n                     if ((png_uint_16)((*sp >> shift) & 0x01)\n                        == png_ptr->trans_color.gray)\n                     {\n                        *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);\n                        *sp |= (png_byte)(png_ptr->background.gray << shift);\n                     }\n\n                     if (!shift)\n                     {\n                        shift = 7;\n                        sp++;\n                     }\n\n                     else\n                        shift--;\n                  }\n                  break;\n               }\n\n               case 2:\n               {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n                  if (gamma_table != NULL)\n                  {\n                     sp = row;\n                     shift = 6;\n                     for (i = 0; i < row_width; i++)\n                     {\n                        if ((png_uint_16)((*sp >> shift) & 0x03)\n                            == png_ptr->trans_color.gray)\n                        {\n                           *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);\n                           *sp |= (png_byte)(png_ptr->background.gray << shift);\n                        }\n\n                        else\n                        {\n                           png_byte p = (png_byte)((*sp >> shift) & 0x03);\n                           png_byte g = (png_byte)((gamma_table [p | (p << 2) |\n                               (p << 4) | (p << 6)] >> 6) & 0x03);\n                           *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);\n                           *sp |= (png_byte)(g << shift);\n                        }\n\n                        if (!shift)\n                        {\n                           shift = 6;\n                           sp++;\n                        }\n\n                        else\n                           shift -= 2;\n                     }\n                  }\n\n                  else\n#endif\n                  {\n                     sp = row;\n                     shift = 6;\n                     for (i = 0; i < row_width; i++)\n                     {\n                        if ((png_uint_16)((*sp >> shift) & 0x03)\n                            == png_ptr->trans_color.gray)\n                        {\n                           *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);\n                           *sp |= (png_byte)(png_ptr->background.gray << shift);\n                        }\n\n                        if (!shift)\n                        {\n                           shift = 6;\n                           sp++;\n                        }\n\n                        else\n                           shift -= 2;\n                     }\n                  }\n                  break;\n               }\n\n               case 4:\n               {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n                  if (gamma_table != NULL)\n                  {\n                     sp = row;\n                     shift = 4;\n                     for (i = 0; i < row_width; i++)\n                     {\n                        if ((png_uint_16)((*sp >> shift) & 0x0f)\n                            == png_ptr->trans_color.gray)\n                        {\n                           *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);\n                           *sp |= (png_byte)(png_ptr->background.gray << shift);\n                        }\n\n                        else\n                        {\n                           png_byte p = (png_byte)((*sp >> shift) & 0x0f);\n                           png_byte g = (png_byte)((gamma_table[p |\n                               (p << 4)] >> 4) & 0x0f);\n                           *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);\n                           *sp |= (png_byte)(g << shift);\n                        }\n\n                        if (!shift)\n                        {\n                           shift = 4;\n                           sp++;\n                        }\n\n                        else\n                           shift -= 4;\n                     }\n                  }\n\n                  else\n#endif\n                  {\n                     sp = row;\n                     shift = 4;\n                     for (i = 0; i < row_width; i++)\n                     {\n                        if ((png_uint_16)((*sp >> shift) & 0x0f)\n                            == png_ptr->trans_color.gray)\n                        {\n                           *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);\n                           *sp |= (png_byte)(png_ptr->background.gray << shift);\n                        }\n\n                        if (!shift)\n                        {\n                           shift = 4;\n                           sp++;\n                        }\n\n                        else\n                           shift -= 4;\n                     }\n                  }\n                  break;\n               }\n\n               case 8:\n               {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n                  if (gamma_table != NULL)\n                  {\n                     sp = row;\n                     for (i = 0; i < row_width; i++, sp++)\n                     {\n                        if (*sp == png_ptr->trans_color.gray)\n                           *sp = (png_byte)png_ptr->background.gray;\n\n                        else\n                           *sp = gamma_table[*sp];\n                     }\n                  }\n                  else\n#endif\n                  {\n                     sp = row;\n                     for (i = 0; i < row_width; i++, sp++)\n                     {\n                        if (*sp == png_ptr->trans_color.gray)\n                           *sp = (png_byte)png_ptr->background.gray;\n                     }\n                  }\n                  break;\n               }\n\n               case 16:\n               {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n                  if (gamma_16 != NULL)\n                  {\n                     sp = row;\n                     for (i = 0; i < row_width; i++, sp += 2)\n                     {\n                        png_uint_16 v;\n\n                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n\n                        if (v == png_ptr->trans_color.gray)\n                        {\n                           /* Background is already in screen gamma */\n                           *sp = (png_byte)((png_ptr->background.gray >> 8)\n                                & 0xff);\n                           *(sp + 1) = (png_byte)(png_ptr->background.gray\n                                & 0xff);\n                        }\n\n                        else\n                        {\n                           v = gamma_16[*(sp + 1) >> gamma_shift][*sp];\n                           *sp = (png_byte)((v >> 8) & 0xff);\n                           *(sp + 1) = (png_byte)(v & 0xff);\n                        }\n                     }\n                  }\n                  else\n#endif\n                  {\n                     sp = row;\n                     for (i = 0; i < row_width; i++, sp += 2)\n                     {\n                        png_uint_16 v;\n\n                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n\n                        if (v == png_ptr->trans_color.gray)\n                        {\n                           *sp = (png_byte)((png_ptr->background.gray >> 8)\n                                & 0xff);\n                           *(sp + 1) = (png_byte)(png_ptr->background.gray\n                                & 0xff);\n                        }\n                     }\n                  }\n                  break;\n               }\n\n               default:\n                  break;\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_RGB:\n         {\n            if (row_info->bit_depth == 8)\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_table != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 3)\n                  {\n                     if (*sp == png_ptr->trans_color.red &&\n                         *(sp + 1) == png_ptr->trans_color.green &&\n                         *(sp + 2) == png_ptr->trans_color.blue)\n                     {\n                        *sp = (png_byte)png_ptr->background.red;\n                        *(sp + 1) = (png_byte)png_ptr->background.green;\n                        *(sp + 2) = (png_byte)png_ptr->background.blue;\n                     }\n\n                     else\n                     {\n                        *sp = gamma_table[*sp];\n                        *(sp + 1) = gamma_table[*(sp + 1)];\n                        *(sp + 2) = gamma_table[*(sp + 2)];\n                     }\n                  }\n               }\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 3)\n                  {\n                     if (*sp == png_ptr->trans_color.red &&\n                         *(sp + 1) == png_ptr->trans_color.green &&\n                         *(sp + 2) == png_ptr->trans_color.blue)\n                     {\n                        *sp = (png_byte)png_ptr->background.red;\n                        *(sp + 1) = (png_byte)png_ptr->background.green;\n                        *(sp + 2) = (png_byte)png_ptr->background.blue;\n                     }\n                  }\n               }\n            }\n            else /* if (row_info->bit_depth == 16) */\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_16 != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 6)\n                  {\n                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n\n                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)\n                         + *(sp + 3));\n\n                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)\n                         + *(sp + 5));\n\n                     if (r == png_ptr->trans_color.red &&\n                         g == png_ptr->trans_color.green &&\n                         b == png_ptr->trans_color.blue)\n                     {\n                        /* Background is already in screen gamma */\n                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);\n                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)\n                                & 0xff);\n                        *(sp + 3) = (png_byte)(png_ptr->background.green\n                                & 0xff);\n                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)\n                                & 0xff);\n                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);\n                     }\n\n                     else\n                     {\n                        png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp];\n                        *sp = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(v & 0xff);\n\n                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];\n                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 3) = (png_byte)(v & 0xff);\n\n                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];\n                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 5) = (png_byte)(v & 0xff);\n                     }\n                  }\n               }\n\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 6)\n                  {\n                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n\n                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)\n                         + *(sp + 3));\n\n                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)\n                         + *(sp + 5));\n\n                     if (r == png_ptr->trans_color.red &&\n                         g == png_ptr->trans_color.green &&\n                         b == png_ptr->trans_color.blue)\n                     {\n                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);\n                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)\n                                & 0xff);\n                        *(sp + 3) = (png_byte)(png_ptr->background.green\n                                & 0xff);\n                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)\n                                & 0xff);\n                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);\n                     }\n                  }\n               }\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_GRAY_ALPHA:\n         {\n            if (row_info->bit_depth == 8)\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&\n                   gamma_table != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 2)\n                  {\n                     png_uint_16 a = *(sp + 1);\n\n                     if (a == 0xff)\n                        *sp = gamma_table[*sp];\n\n                     else if (a == 0)\n                     {\n                        /* Background is already in screen gamma */\n                        *sp = (png_byte)png_ptr->background.gray;\n                     }\n\n                     else\n                     {\n                        png_byte v, w;\n\n                        v = gamma_to_1[*sp];\n                        png_composite(w, v, a, png_ptr->background_1.gray);\n                        if (!optimize)\n                           w = gamma_from_1[w];\n                        *sp = w;\n                     }\n                  }\n               }\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 2)\n                  {\n                     png_byte a = *(sp + 1);\n\n                     if (a == 0)\n                        *sp = (png_byte)png_ptr->background.gray;\n\n                     else if (a < 0xff)\n                        png_composite(*sp, *sp, a, png_ptr->background_1.gray);\n                  }\n               }\n            }\n            else /* if (png_ptr->bit_depth == 16) */\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&\n                   gamma_16_to_1 != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 4)\n                  {\n                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)\n                         + *(sp + 3));\n\n                     if (a == (png_uint_16)0xffff)\n                     {\n                        png_uint_16 v;\n\n                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];\n                        *sp = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(v & 0xff);\n                     }\n\n                     else if (a == 0)\n                     {\n                        /* Background is already in screen gamma */\n                        *sp = (png_byte)((png_ptr->background.gray >> 8)\n                                & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);\n                     }\n\n                     else\n                     {\n                        png_uint_16 g, v, w;\n\n                        g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];\n                        png_composite_16(v, g, a, png_ptr->background_1.gray);\n                        if (optimize)\n                           w = v;\n                        else\n                           w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8];\n                        *sp = (png_byte)((w >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(w & 0xff);\n                     }\n                  }\n               }\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 4)\n                  {\n                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)\n                         + *(sp + 3));\n\n                     if (a == 0)\n                     {\n                        *sp = (png_byte)((png_ptr->background.gray >> 8)\n                                & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);\n                     }\n\n                     else if (a < 0xffff)\n                     {\n                        png_uint_16 g, v;\n\n                        g = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n                        png_composite_16(v, g, a, png_ptr->background_1.gray);\n                        *sp = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(v & 0xff);\n                     }\n                  }\n               }\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_RGB_ALPHA:\n         {\n            if (row_info->bit_depth == 8)\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&\n                   gamma_table != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 4)\n                  {\n                     png_byte a = *(sp + 3);\n\n                     if (a == 0xff)\n                     {\n                        *sp = gamma_table[*sp];\n                        *(sp + 1) = gamma_table[*(sp + 1)];\n                        *(sp + 2) = gamma_table[*(sp + 2)];\n                     }\n\n                     else if (a == 0)\n                     {\n                        /* Background is already in screen gamma */\n                        *sp = (png_byte)png_ptr->background.red;\n                        *(sp + 1) = (png_byte)png_ptr->background.green;\n                        *(sp + 2) = (png_byte)png_ptr->background.blue;\n                     }\n\n                     else\n                     {\n                        png_byte v, w;\n\n                        v = gamma_to_1[*sp];\n                        png_composite(w, v, a, png_ptr->background_1.red);\n                        if (!optimize) w = gamma_from_1[w];\n                        *sp = w;\n\n                        v = gamma_to_1[*(sp + 1)];\n                        png_composite(w, v, a, png_ptr->background_1.green);\n                        if (!optimize) w = gamma_from_1[w];\n                        *(sp + 1) = w;\n\n                        v = gamma_to_1[*(sp + 2)];\n                        png_composite(w, v, a, png_ptr->background_1.blue);\n                        if (!optimize) w = gamma_from_1[w];\n                        *(sp + 2) = w;\n                     }\n                  }\n               }\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 4)\n                  {\n                     png_byte a = *(sp + 3);\n\n                     if (a == 0)\n                     {\n                        *sp = (png_byte)png_ptr->background.red;\n                        *(sp + 1) = (png_byte)png_ptr->background.green;\n                        *(sp + 2) = (png_byte)png_ptr->background.blue;\n                     }\n\n                     else if (a < 0xff)\n                     {\n                        png_composite(*sp, *sp, a, png_ptr->background.red);\n\n                        png_composite(*(sp + 1), *(sp + 1), a,\n                            png_ptr->background.green);\n\n                        png_composite(*(sp + 2), *(sp + 2), a,\n                            png_ptr->background.blue);\n                     }\n                  }\n               }\n            }\n            else /* if (row_info->bit_depth == 16) */\n            {\n#ifdef PNG_READ_GAMMA_SUPPORTED\n               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&\n                   gamma_16_to_1 != NULL)\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 8)\n                  {\n                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))\n                         << 8) + (png_uint_16)(*(sp + 7)));\n\n                     if (a == (png_uint_16)0xffff)\n                     {\n                        png_uint_16 v;\n\n                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];\n                        *sp = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(v & 0xff);\n\n                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];\n                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 3) = (png_byte)(v & 0xff);\n\n                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];\n                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 5) = (png_byte)(v & 0xff);\n                     }\n\n                     else if (a == 0)\n                     {\n                        /* Background is already in screen gamma */\n                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);\n                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)\n                                & 0xff);\n                        *(sp + 3) = (png_byte)(png_ptr->background.green\n                                & 0xff);\n                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)\n                                & 0xff);\n                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);\n                     }\n\n                     else\n                     {\n                        png_uint_16 v, w;\n\n                        v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];\n                        png_composite_16(w, v, a, png_ptr->background_1.red);\n                        if (!optimize)\n                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)]\n                               [w >> 8];\n                        *sp = (png_byte)((w >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(w & 0xff);\n\n                        v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];\n                        png_composite_16(w, v, a, png_ptr->background_1.green);\n                        if (!optimize)\n                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)]\n                               [w >> 8];\n\n                        *(sp + 2) = (png_byte)((w >> 8) & 0xff);\n                        *(sp + 3) = (png_byte)(w & 0xff);\n\n                        v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];\n                        png_composite_16(w, v, a, png_ptr->background_1.blue);\n                        if (!optimize)\n                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)]\n                               [w >> 8];\n\n                        *(sp + 4) = (png_byte)((w >> 8) & 0xff);\n                        *(sp + 5) = (png_byte)(w & 0xff);\n                     }\n                  }\n               }\n\n               else\n#endif\n               {\n                  sp = row;\n                  for (i = 0; i < row_width; i++, sp += 8)\n                  {\n                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))\n                         << 8) + (png_uint_16)(*(sp + 7)));\n\n                     if (a == 0)\n                     {\n                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);\n                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)\n                                & 0xff);\n                        *(sp + 3) = (png_byte)(png_ptr->background.green\n                                & 0xff);\n                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)\n                                & 0xff);\n                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);\n                     }\n\n                     else if (a < 0xffff)\n                     {\n                        png_uint_16 v;\n\n                        png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));\n                        png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)\n                            + *(sp + 3));\n                        png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)\n                            + *(sp + 5));\n\n                        png_composite_16(v, r, a, png_ptr->background.red);\n                        *sp = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 1) = (png_byte)(v & 0xff);\n\n                        png_composite_16(v, g, a, png_ptr->background.green);\n                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 3) = (png_byte)(v & 0xff);\n\n                        png_composite_16(v, b, a, png_ptr->background.blue);\n                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);\n                        *(sp + 5) = (png_byte)(v & 0xff);\n                     }\n                  }\n               }\n            }\n            break;\n         }\n\n         default:\n            break;\n      }\n   }\n}\n#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_READ_ALPHA_MODE_SUPPORTED */\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n/* Gamma correct the image, avoiding the alpha channel.  Make sure\n * you do this after you deal with the transparency issue on grayscale\n * or RGB images. If your bit depth is 8, use gamma_table, if it\n * is 16, use gamma_16_table and gamma_shift.  Build these with\n * build_gamma_table().\n */\nvoid /* PRIVATE */\npng_do_gamma(png_row_infop row_info, png_bytep row, png_structp png_ptr)\n{\n   png_const_bytep gamma_table = png_ptr->gamma_table;\n   png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;\n   int gamma_shift = png_ptr->gamma_shift;\n\n   png_bytep sp;\n   png_uint_32 i;\n   png_uint_32 row_width=row_info->width;\n\n   png_debug(1, \"in png_do_gamma\");\n\n   if (((row_info->bit_depth <= 8 && gamma_table != NULL) ||\n       (row_info->bit_depth == 16 && gamma_16_table != NULL)))\n   {\n      switch (row_info->color_type)\n      {\n         case PNG_COLOR_TYPE_RGB:\n         {\n            if (row_info->bit_depth == 8)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  *sp = gamma_table[*sp];\n                  sp++;\n                  *sp = gamma_table[*sp];\n                  sp++;\n                  *sp = gamma_table[*sp];\n                  sp++;\n               }\n            }\n\n            else /* if (row_info->bit_depth == 16) */\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  png_uint_16 v;\n\n                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n\n                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n\n                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n               }\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_RGB_ALPHA:\n         {\n            if (row_info->bit_depth == 8)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  *sp = gamma_table[*sp];\n                  sp++;\n\n                  *sp = gamma_table[*sp];\n                  sp++;\n\n                  *sp = gamma_table[*sp];\n                  sp++;\n\n                  sp++;\n               }\n            }\n\n            else /* if (row_info->bit_depth == 16) */\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n\n                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n\n                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 4;\n               }\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_GRAY_ALPHA:\n         {\n            if (row_info->bit_depth == 8)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  *sp = gamma_table[*sp];\n                  sp += 2;\n               }\n            }\n\n            else /* if (row_info->bit_depth == 16) */\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 4;\n               }\n            }\n            break;\n         }\n\n         case PNG_COLOR_TYPE_GRAY:\n         {\n            if (row_info->bit_depth == 2)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i += 4)\n               {\n                  int a = *sp & 0xc0;\n                  int b = *sp & 0x30;\n                  int c = *sp & 0x0c;\n                  int d = *sp & 0x03;\n\n                  *sp = (png_byte)(\n                      ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)])   ) & 0xc0)|\n                      ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)|\n                      ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)|\n                      ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) ));\n                  sp++;\n               }\n            }\n\n            if (row_info->bit_depth == 4)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i += 2)\n               {\n                  int msb = *sp & 0xf0;\n                  int lsb = *sp & 0x0f;\n\n                  *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0)\n                      | (((int)gamma_table[(lsb << 4) | lsb]) >> 4));\n                  sp++;\n               }\n            }\n\n            else if (row_info->bit_depth == 8)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  *sp = gamma_table[*sp];\n                  sp++;\n               }\n            }\n\n            else if (row_info->bit_depth == 16)\n            {\n               sp = row;\n               for (i = 0; i < row_width; i++)\n               {\n                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];\n                  *sp = (png_byte)((v >> 8) & 0xff);\n                  *(sp + 1) = (png_byte)(v & 0xff);\n                  sp += 2;\n               }\n            }\n            break;\n         }\n\n         default:\n            break;\n      }\n   }\n}\n#endif\n\n#ifdef PNG_READ_ALPHA_MODE_SUPPORTED\n/* Encode the alpha channel to the output gamma (the input channel is always\n * linear.)  Called only with color types that have an alpha channel.  Needs the\n * from_1 tables.\n */\nvoid /* PRIVATE */\npng_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structp png_ptr)\n{\n   png_uint_32 row_width = row_info->width;\n\n   png_debug(1, \"in png_do_encode_alpha\");\n\n   if (row_info->color_type & PNG_COLOR_MASK_ALPHA)\n   {\n      if (row_info->bit_depth == 8)\n      {\n         PNG_CONST png_bytep table = png_ptr->gamma_from_1;\n\n         if (table != NULL)\n         {\n            PNG_CONST int step =\n               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;\n\n            /* The alpha channel is the last component: */\n            row += step - 1;\n\n            for (; row_width > 0; --row_width, row += step)\n               *row = table[*row];\n\n            return;\n         }\n      }\n\n      else if (row_info->bit_depth == 16)\n      {\n         PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;\n         PNG_CONST int gamma_shift = png_ptr->gamma_shift;\n\n         if (table != NULL)\n         {\n            PNG_CONST int step =\n               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;\n\n            /* The alpha channel is the last component: */\n            row += step - 2;\n\n            for (; row_width > 0; --row_width, row += step)\n            {\n               png_uint_16 v;\n\n               v = table[*(row + 1) >> gamma_shift][*row];\n               *row = (png_byte)((v >> 8) & 0xff);\n               *(row + 1) = (png_byte)(v & 0xff);\n            }\n\n            return;\n         }\n      }\n   }\n\n   /* Only get to here if called with a weird row_info; no harm has been done,\n    * so just issue a warning.\n    */\n   png_warning(png_ptr, \"png_do_encode_alpha: unexpected call\");\n}\n#endif\n\n#ifdef PNG_READ_EXPAND_SUPPORTED\n/* Expands a palette row to an RGB or RGBA row depending\n * upon whether you supply trans and num_trans.\n */\nvoid /* PRIVATE */\npng_do_expand_palette(png_row_infop row_info, png_bytep row,\n   png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)\n{\n   int shift, value;\n   png_bytep sp, dp;\n   png_uint_32 i;\n   png_uint_32 row_width=row_info->width;\n\n   png_debug(1, \"in png_do_expand_palette\");\n\n   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)\n   {\n      if (row_info->bit_depth < 8)\n      {\n         switch (row_info->bit_depth)\n         {\n            case 1:\n            {\n               sp = row + (png_size_t)((row_width - 1) >> 3);\n               dp = row + (png_size_t)row_width - 1;\n               shift = 7 - (int)((row_width + 7) & 0x07);\n               for (i = 0; i < row_width; i++)\n               {\n                  if ((*sp >> shift) & 0x01)\n                     *dp = 1;\n\n                  else\n                     *dp = 0;\n\n                  if (shift == 7)\n                  {\n                     shift = 0;\n                     sp--;\n                  }\n\n                  else\n                     shift++;\n\n                  dp--;\n               }\n               break;\n            }\n\n            case 2:\n            {\n               sp = row + (png_size_t)((row_width - 1) >> 2);\n               dp = row + (png_size_t)row_width - 1;\n               shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);\n               for (i = 0; i < row_width; i++)\n               {\n                  value = (*sp >> shift) & 0x03;\n                  *dp = (png_byte)value;\n                  if (shift == 6)\n                  {\n                     shift = 0;\n                     sp--;\n                  }\n\n                  else\n                     shift += 2;\n\n                  dp--;\n               }\n               break;\n            }\n\n            case 4:\n            {\n               sp = row + (png_size_t)((row_width - 1) >> 1);\n               dp = row + (png_size_t)row_width - 1;\n               shift = (int)((row_width & 0x01) << 2);\n               for (i = 0; i < row_width; i++)\n               {\n                  value = (*sp >> shift) & 0x0f;\n                  *dp = (png_byte)value;\n                  if (shift == 4)\n                  {\n                     shift = 0;\n                     sp--;\n                  }\n\n                  else\n                     shift += 4;\n\n                  dp--;\n               }\n               break;\n            }\n\n            default:\n               break;\n         }\n         row_info->bit_depth = 8;\n         row_info->pixel_depth = 8;\n         row_info->rowbytes = row_width;\n      }\n\n      if (row_info->bit_depth == 8)\n      {\n         {\n            if (num_trans > 0)\n            {\n               sp = row + (png_size_t)row_width - 1;\n               dp = row + (png_size_t)(row_width << 2) - 1;\n\n               for (i = 0; i < row_width; i++)\n               {\n                  if ((int)(*sp) >= num_trans)\n                     *dp-- = 0xff;\n\n                  else\n                     *dp-- = trans_alpha[*sp];\n\n                  *dp-- = palette[*sp].blue;\n                  *dp-- = palette[*sp].green;\n                  *dp-- = palette[*sp].red;\n                  sp--;\n               }\n               row_info->bit_depth = 8;\n               row_info->pixel_depth = 32;\n               row_info->rowbytes = row_width * 4;\n               row_info->color_type = 6;\n               row_info->channels = 4;\n            }\n\n            else\n            {\n               sp = row + (png_size_t)row_width - 1;\n               dp = row + (png_size_t)(row_width * 3) - 1;\n\n               for (i = 0; i < row_width; i++)\n               {\n                  *dp-- = palette[*sp].blue;\n                  *dp-- = palette[*sp].green;\n                  *dp-- = palette[*sp].red;\n                  sp--;\n               }\n\n               row_info->bit_depth = 8;\n               row_info->pixel_depth = 24;\n               row_info->rowbytes = row_width * 3;\n               row_info->color_type = 2;\n               row_info->channels = 3;\n            }\n         }\n      }\n   }\n}\n\n/* If the bit depth < 8, it is expanded to 8.  Also, if the already\n * expanded transparency value is supplied, an alpha channel is built.\n */\nvoid /* PRIVATE */\npng_do_expand(png_row_infop row_info, png_bytep row,\n    png_const_color_16p trans_color)\n{\n   int shift, value;\n   png_bytep sp, dp;\n   png_uint_32 i;\n   png_uint_32 row_width=row_info->width;\n\n   png_debug(1, \"in png_do_expand\");\n\n   {\n      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)\n      {\n         png_uint_16 gray = (png_uint_16)(trans_color ? trans_color->gray : 0);\n\n         if (row_info->bit_depth < 8)\n         {\n            switch (row_info->bit_depth)\n            {\n               case 1:\n               {\n                  gray = (png_uint_16)((gray & 0x01) * 0xff);\n                  sp = row + (png_size_t)((row_width - 1) >> 3);\n                  dp = row + (png_size_t)row_width - 1;\n                  shift = 7 - (int)((row_width + 7) & 0x07);\n                  for (i = 0; i < row_width; i++)\n                  {\n                     if ((*sp >> shift) & 0x01)\n                        *dp = 0xff;\n\n                     else\n                        *dp = 0;\n\n                     if (shift == 7)\n                     {\n                        shift = 0;\n                        sp--;\n                     }\n\n                     else\n                        shift++;\n\n                     dp--;\n                  }\n                  break;\n               }\n\n               case 2:\n               {\n                  gray = (png_uint_16)((gray & 0x03) * 0x55);\n                  sp = row + (png_size_t)((row_width - 1) >> 2);\n                  dp = row + (png_size_t)row_width - 1;\n                  shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);\n                  for (i = 0; i < row_width; i++)\n                  {\n                     value = (*sp >> shift) & 0x03;\n                     *dp = (png_byte)(value | (value << 2) | (value << 4) |\n                        (value << 6));\n                     if (shift == 6)\n                     {\n                        shift = 0;\n                        sp--;\n                     }\n\n                     else\n                        shift += 2;\n\n                     dp--;\n                  }\n                  break;\n               }\n\n               case 4:\n               {\n                  gray = (png_uint_16)((gray & 0x0f) * 0x11);\n                  sp = row + (png_size_t)((row_width - 1) >> 1);\n                  dp = row + (png_size_t)row_width - 1;\n                  shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);\n                  for (i = 0; i < row_width; i++)\n                  {\n                     value = (*sp >> shift) & 0x0f;\n                     *dp = (png_byte)(value | (value << 4));\n                     if (shift == 4)\n                     {\n                        shift = 0;\n                        sp--;\n                     }\n\n                     else\n                        shift = 4;\n\n                     dp--;\n                  }\n                  break;\n               }\n\n               default:\n                  break;\n            }\n\n            row_info->bit_depth = 8;\n            row_info->pixel_depth = 8;\n            row_info->rowbytes = row_width;\n         }\n\n         if (trans_color != NULL)\n         {\n            if (row_info->bit_depth == 8)\n            {\n               gray = gray & 0xff;\n               sp = row + (png_size_t)row_width - 1;\n               dp = row + (png_size_t)(row_width << 1) - 1;\n\n               for (i = 0; i < row_width; i++)\n               {\n                  if (*sp == gray)\n                     *dp-- = 0;\n\n                  else\n                     *dp-- = 0xff;\n\n                  *dp-- = *sp--;\n               }\n            }\n\n            else if (row_info->bit_depth == 16)\n            {\n               png_byte gray_high = (png_byte)((gray >> 8) & 0xff);\n               png_byte gray_low = (png_byte)(gray & 0xff);\n               sp = row + row_info->rowbytes - 1;\n               dp = row + (row_info->rowbytes << 1) - 1;\n               for (i = 0; i < row_width; i++)\n               {\n                  if (*(sp - 1) == gray_high && *(sp) == gray_low)\n                  {\n                     *dp-- = 0;\n                     *dp-- = 0;\n                  }\n\n                  else\n                  {\n                     *dp-- = 0xff;\n                     *dp-- = 0xff;\n                  }\n\n                  *dp-- = *sp--;\n                  *dp-- = *sp--;\n               }\n            }\n\n            row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;\n            row_info->channels = 2;\n            row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);\n            row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,\n               row_width);\n         }\n      }\n      else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_color)\n      {\n         if (row_info->bit_depth == 8)\n         {\n            png_byte red = (png_byte)(trans_color->red & 0xff);\n            png_byte green = (png_byte)(trans_color->green & 0xff);\n            png_byte blue = (png_byte)(trans_color->blue & 0xff);\n            sp = row + (png_size_t)row_info->rowbytes - 1;\n            dp = row + (png_size_t)(row_width << 2) - 1;\n            for (i = 0; i < row_width; i++)\n            {\n               if (*(sp - 2) == red && *(sp - 1) == green && *(sp) == blue)\n                  *dp-- = 0;\n\n               else\n                  *dp-- = 0xff;\n\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n            }\n         }\n         else if (row_info->bit_depth == 16)\n         {\n            png_byte red_high = (png_byte)((trans_color->red >> 8) & 0xff);\n            png_byte green_high = (png_byte)((trans_color->green >> 8) & 0xff);\n            png_byte blue_high = (png_byte)((trans_color->blue >> 8) & 0xff);\n            png_byte red_low = (png_byte)(trans_color->red & 0xff);\n            png_byte green_low = (png_byte)(trans_color->green & 0xff);\n            png_byte blue_low = (png_byte)(trans_color->blue & 0xff);\n            sp = row + row_info->rowbytes - 1;\n            dp = row + (png_size_t)(row_width << 3) - 1;\n            for (i = 0; i < row_width; i++)\n            {\n               if (*(sp - 5) == red_high &&\n                   *(sp - 4) == red_low &&\n                   *(sp - 3) == green_high &&\n                   *(sp - 2) == green_low &&\n                   *(sp - 1) == blue_high &&\n                   *(sp    ) == blue_low)\n               {\n                  *dp-- = 0;\n                  *dp-- = 0;\n               }\n\n               else\n               {\n                  *dp-- = 0xff;\n                  *dp-- = 0xff;\n               }\n\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n               *dp-- = *sp--;\n            }\n         }\n         row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;\n         row_info->channels = 4;\n         row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2);\n         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);\n      }\n   }\n}\n#endif\n\n#ifdef PNG_READ_EXPAND_16_SUPPORTED\n/* If the bit depth is 8 and the color type is not a palette type expand the\n * whole row to 16 bits.  Has no effect otherwise.\n */\nvoid /* PRIVATE */\npng_do_expand_16(png_row_infop row_info, png_bytep row)\n{\n   if (row_info->bit_depth == 8 &&\n      row_info->color_type != PNG_COLOR_TYPE_PALETTE)\n   {\n      /* The row have a sequence of bytes containing [0..255] and we need\n       * to turn it into another row containing [0..65535], to do this we\n       * calculate:\n       *\n       *  (input / 255) * 65535\n       *\n       *  Which happens to be exactly input * 257 and this can be achieved\n       *  simply by byte replication in place (copying backwards).\n       */\n      png_byte *sp = row + row_info->rowbytes; /* source, last byte + 1 */\n      png_byte *dp = sp + row_info->rowbytes;  /* destination, end + 1 */\n      while (dp > sp)\n         dp[-2] = dp[-1] = *--sp, dp -= 2;\n\n      row_info->rowbytes *= 2;\n      row_info->bit_depth = 16;\n      row_info->pixel_depth = (png_byte)(row_info->channels * 16);\n   }\n}\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\nvoid /* PRIVATE */\npng_do_quantize(png_row_infop row_info, png_bytep row,\n    png_const_bytep palette_lookup, png_const_bytep quantize_lookup)\n{\n   png_bytep sp, dp;\n   png_uint_32 i;\n   png_uint_32 row_width=row_info->width;\n\n   png_debug(1, \"in png_do_quantize\");\n\n   if (row_info->bit_depth == 8)\n   {\n      if (row_info->color_type == PNG_COLOR_TYPE_RGB && palette_lookup)\n      {\n         int r, g, b, p;\n         sp = row;\n         dp = row;\n         for (i = 0; i < row_width; i++)\n         {\n            r = *sp++;\n            g = *sp++;\n            b = *sp++;\n\n            /* This looks real messy, but the compiler will reduce\n             * it down to a reasonable formula.  For example, with\n             * 5 bits per color, we get:\n             * p = (((r >> 3) & 0x1f) << 10) |\n             *    (((g >> 3) & 0x1f) << 5) |\n             *    ((b >> 3) & 0x1f);\n             */\n            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &\n                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<\n                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |\n                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &\n                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<\n                (PNG_QUANTIZE_BLUE_BITS)) |\n                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &\n                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));\n\n            *dp++ = palette_lookup[p];\n         }\n\n         row_info->color_type = PNG_COLOR_TYPE_PALETTE;\n         row_info->channels = 1;\n         row_info->pixel_depth = row_info->bit_depth;\n         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);\n      }\n\n      else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&\n         palette_lookup != NULL)\n      {\n         int r, g, b, p;\n         sp = row;\n         dp = row;\n         for (i = 0; i < row_width; i++)\n         {\n            r = *sp++;\n            g = *sp++;\n            b = *sp++;\n            sp++;\n\n            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &\n                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<\n                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |\n                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &\n                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<\n                (PNG_QUANTIZE_BLUE_BITS)) |\n                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &\n                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));\n\n            *dp++ = palette_lookup[p];\n         }\n\n         row_info->color_type = PNG_COLOR_TYPE_PALETTE;\n         row_info->channels = 1;\n         row_info->pixel_depth = row_info->bit_depth;\n         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);\n      }\n\n      else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&\n         quantize_lookup)\n      {\n         sp = row;\n\n         for (i = 0; i < row_width; i++, sp++)\n         {\n            *sp = quantize_lookup[*sp];\n         }\n      }\n   }\n}\n#endif /* PNG_READ_QUANTIZE_SUPPORTED */\n#endif /* PNG_READ_TRANSFORMS_SUPPORTED */\n\n#ifdef PNG_MNG_FEATURES_SUPPORTED\n/* Undoes intrapixel differencing  */\nvoid /* PRIVATE */\npng_do_read_intrapixel(png_row_infop row_info, png_bytep row)\n{\n   png_debug(1, \"in png_do_read_intrapixel\");\n\n   if (\n       (row_info->color_type & PNG_COLOR_MASK_COLOR))\n   {\n      int bytes_per_pixel;\n      png_uint_32 row_width = row_info->width;\n\n      if (row_info->bit_depth == 8)\n      {\n         png_bytep rp;\n         png_uint_32 i;\n\n         if (row_info->color_type == PNG_COLOR_TYPE_RGB)\n            bytes_per_pixel = 3;\n\n         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)\n            bytes_per_pixel = 4;\n\n         else\n            return;\n\n         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)\n         {\n            *(rp) = (png_byte)((256 + *rp + *(rp + 1)) & 0xff);\n            *(rp+2) = (png_byte)((256 + *(rp + 2) + *(rp + 1)) & 0xff);\n         }\n      }\n      else if (row_info->bit_depth == 16)\n      {\n         png_bytep rp;\n         png_uint_32 i;\n\n         if (row_info->color_type == PNG_COLOR_TYPE_RGB)\n            bytes_per_pixel = 6;\n\n         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)\n            bytes_per_pixel = 8;\n\n         else\n            return;\n\n         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)\n         {\n            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);\n            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);\n            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);\n            png_uint_32 red  = (s0 + s1 + 65536) & 0xffff;\n            png_uint_32 blue = (s2 + s1 + 65536) & 0xffff;\n            *(rp    ) = (png_byte)((red >> 8) & 0xff);\n            *(rp + 1) = (png_byte)(red & 0xff);\n            *(rp + 4) = (png_byte)((blue >> 8) & 0xff);\n            *(rp + 5) = (png_byte)(blue & 0xff);\n         }\n      }\n   }\n}\n#endif /* PNG_MNG_FEATURES_SUPPORTED */\n#endif /* PNG_READ_SUPPORTED */\n"
  },
  {
    "path": "tests/build/issue20862-libpng-O0/jni/pngstruct.h",
    "content": "\n/* pngstruct.h - header file for PNG reference library\n *\n * Copyright (c) 1998-2012 Glenn Randers-Pehrson\n * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\n * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\n *\n * Last changed in libpng 1.5.9 [February 18, 2012]\n *\n * This code is released under the libpng license.\n * For conditions of distribution and use, see the disclaimer\n * and license in png.h\n */\n\n/* The structure that holds the information to read and write PNG files.\n * The only people who need to care about what is inside of this are the\n * people who will be modifying the library for their own special needs.\n * It should NOT be accessed directly by an application.\n */\n\n#ifndef PNGSTRUCT_H\n#define PNGSTRUCT_H\n/* zlib.h defines the structure z_stream, an instance of which is included\n * in this structure and is required for decompressing the LZ compressed\n * data in PNG files.\n */\n#include \"zlib.h\"\n\nstruct png_struct_def\n{\n#ifdef PNG_SETJMP_SUPPORTED\n   jmp_buf longjmp_buffer;    /* used in png_error */\n   png_longjmp_ptr longjmp_fn;/* setjmp non-local goto function. */\n#endif\n   png_error_ptr error_fn;    /* function for printing errors and aborting */\n#ifdef PNG_WARNINGS_SUPPORTED\n   png_error_ptr warning_fn;  /* function for printing warnings */\n#endif\n   png_voidp error_ptr;       /* user supplied struct for error functions */\n   png_rw_ptr write_data_fn;  /* function for writing output data */\n   png_rw_ptr read_data_fn;   /* function for reading input data */\n   png_voidp io_ptr;          /* ptr to application struct for I/O functions */\n\n#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED\n   png_user_transform_ptr read_user_transform_fn; /* user read transform */\n#endif\n\n#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED\n   png_user_transform_ptr write_user_transform_fn; /* user write transform */\n#endif\n\n/* These were added in libpng-1.0.2 */\n#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED\n#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \\\n    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)\n   png_voidp user_transform_ptr; /* user supplied struct for user transform */\n   png_byte user_transform_depth;    /* bit depth of user transformed pixels */\n   png_byte user_transform_channels; /* channels in user transformed pixels */\n#endif\n#endif\n\n   png_uint_32 mode;          /* tells us where we are in the PNG file */\n   png_uint_32 flags;         /* flags indicating various things to libpng */\n   png_uint_32 transformations; /* which transformations to perform */\n\n   z_stream zstream;          /* pointer to decompression structure (below) */\n   png_bytep zbuf;            /* buffer for zlib */\n   uInt zbuf_size;            /* size of zbuf (typically 65536) */\n#ifdef PNG_WRITE_SUPPORTED\n\n/* Added in 1.5.4: state to keep track of whether the zstream has been\n * initialized and if so whether it is for IDAT or some other chunk.\n */\n#define PNG_ZLIB_UNINITIALIZED 0\n#define PNG_ZLIB_FOR_IDAT      1\n#define PNG_ZLIB_FOR_TEXT      2 /* anything other than IDAT */\n#define PNG_ZLIB_USE_MASK      3 /* bottom two bits */\n#define PNG_ZLIB_IN_USE        4 /* a flag value */\n\n   png_uint_32 zlib_state;       /* State of zlib initialization */\n/* End of material added at libpng 1.5.4 */\n\n   int zlib_level;            /* holds zlib compression level */\n   int zlib_method;           /* holds zlib compression method */\n   int zlib_window_bits;      /* holds zlib compression window bits */\n   int zlib_mem_level;        /* holds zlib compression memory level */\n   int zlib_strategy;         /* holds zlib compression strategy */\n#endif\n/* Added at libpng 1.5.4 */\n#if defined(PNG_WRITE_COMPRESSED_TEXT_SUPPORTED) || \\\n    defined(PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED)\n   int zlib_text_level;            /* holds zlib compression level */\n   int zlib_text_method;           /* holds zlib compression method */\n   int zlib_text_window_bits;      /* holds zlib compression window bits */\n   int zlib_text_mem_level;        /* holds zlib compression memory level */\n   int zlib_text_strategy;         /* holds zlib compression strategy */\n#endif\n/* End of material added at libpng 1.5.4 */\n\n   png_uint_32 width;         /* width of image in pixels */\n   png_uint_32 height;        /* height of image in pixels */\n   png_uint_32 num_rows;      /* number of rows in current pass */\n   png_uint_32 usr_width;     /* width of row at start of write */\n   png_size_t rowbytes;       /* size of row in bytes */\n   png_uint_32 iwidth;        /* width of current interlaced row in pixels */\n   png_uint_32 row_number;    /* current row in interlace pass */\n   png_uint_32 chunk_name;    /* PNG_CHUNK() id of current chunk */\n   png_bytep prev_row;        /* buffer to save previous (unfiltered) row.\n                               * This is a pointer into big_prev_row\n                               */\n   png_bytep row_buf;         /* buffer to save current (unfiltered) row.\n                               * This is a pointer into big_row_buf\n                               */\n   png_bytep sub_row;         /* buffer to save \"sub\" row when filtering */\n   png_bytep up_row;          /* buffer to save \"up\" row when filtering */\n   png_bytep avg_row;         /* buffer to save \"avg\" row when filtering */\n   png_bytep paeth_row;       /* buffer to save \"Paeth\" row when filtering */\n   png_size_t info_rowbytes;  /* Added in 1.5.4: cache of updated row bytes */\n\n   png_uint_32 idat_size;     /* current IDAT size for read */\n   png_uint_32 crc;           /* current chunk CRC value */\n   png_colorp palette;        /* palette from the input file */\n   png_uint_16 num_palette;   /* number of color entries in palette */\n\n/* Added at libpng-1.5.10 */\n#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED\n   int num_palette_max;       /* maximum palette index found in IDAT */\n#endif\n\n   png_uint_16 num_trans;     /* number of transparency values */\n   png_byte compression;      /* file compression type (always 0) */\n   png_byte filter;           /* file filter type (always 0) */\n   png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */\n   png_byte pass;             /* current interlace pass (0 - 6) */\n   png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */\n   png_byte color_type;       /* color type of file */\n   png_byte bit_depth;        /* bit depth of file */\n   png_byte usr_bit_depth;    /* bit depth of users row: write only */\n   png_byte pixel_depth;      /* number of bits per pixel */\n   png_byte channels;         /* number of channels in file */\n   png_byte usr_channels;     /* channels at start of write: write only */\n   png_byte sig_bytes;        /* magic bytes read/written from start of file */\n   png_byte maximum_pixel_depth;\n                              /* pixel depth used for the row buffers */\n   png_byte transformed_pixel_depth;\n                              /* pixel depth after read/write transforms */\n   png_byte io_chunk_string[5];\n                              /* string name of chunk */\n\n#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)\n   png_uint_16 filler;           /* filler bytes for pixel expansion */\n#endif\n\n#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) ||\\\n   defined(PNG_READ_ALPHA_MODE_SUPPORTED)\n   png_byte background_gamma_type;\n   png_fixed_point background_gamma;\n   png_color_16 background;   /* background color in screen gamma space */\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   png_color_16 background_1; /* background normalized to gamma 1.0 */\n#endif\n#endif /* PNG_bKGD_SUPPORTED */\n\n#ifdef PNG_WRITE_FLUSH_SUPPORTED\n   png_flush_ptr output_flush_fn; /* Function for flushing output */\n   png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */\n   png_uint_32 flush_rows;    /* number of rows written since last flush */\n#endif\n\n#ifdef PNG_READ_GAMMA_SUPPORTED\n   int gamma_shift;      /* number of \"insignificant\" bits in 16-bit gamma */\n   png_fixed_point gamma;        /* file gamma value */\n   png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */\n\n   png_bytep gamma_table;     /* gamma table for 8-bit depth files */\n   png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */\n#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \\\n   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \\\n   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)\n   png_bytep gamma_from_1;    /* converts from 1.0 to screen */\n   png_bytep gamma_to_1;      /* converts from file to 1.0 */\n   png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */\n   png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */\n#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */\n#endif\n\n#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)\n   png_color_8 sig_bit;       /* significant bits in each available channel */\n#endif\n\n#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)\n   png_color_8 shift;         /* shift for significant bit tranformation */\n#endif\n\n#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \\\n || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)\n   png_bytep trans_alpha;           /* alpha values for paletted files */\n   png_color_16 trans_color;  /* transparent color for non-paletted files */\n#endif\n\n   png_read_status_ptr read_row_fn;   /* called after each row is decoded */\n   png_write_status_ptr write_row_fn; /* called after each row is encoded */\n#ifdef PNG_PROGRESSIVE_READ_SUPPORTED\n   png_progressive_info_ptr info_fn; /* called after header data fully read */\n   png_progressive_row_ptr row_fn;   /* called after a prog. row is decoded */\n   png_progressive_end_ptr end_fn;   /* called after image is complete */\n   png_bytep save_buffer_ptr;        /* current location in save_buffer */\n   png_bytep save_buffer;            /* buffer for previously read data */\n   png_bytep current_buffer_ptr;     /* current location in current_buffer */\n   png_bytep current_buffer;         /* buffer for recently used data */\n   png_uint_32 push_length;          /* size of current input chunk */\n   png_uint_32 skip_length;          /* bytes to skip in input data */\n   png_size_t save_buffer_size;      /* amount of data now in save_buffer */\n   png_size_t save_buffer_max;       /* total size of save_buffer */\n   png_size_t buffer_size;           /* total amount of available input data */\n   png_size_t current_buffer_size;   /* amount of data now in current_buffer */\n   int process_mode;                 /* what push library is currently doing */\n   int cur_palette;                  /* current push library palette index */\n\n#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */\n\n#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)\n/* For the Borland special 64K segment handler */\n   png_bytepp offset_table_ptr;\n   png_bytep offset_table;\n   png_uint_16 offset_table_number;\n   png_uint_16 offset_table_count;\n   png_uint_16 offset_table_count_free;\n#endif\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n   png_bytep palette_lookup; /* lookup table for quantizing */\n   png_bytep quantize_index; /* index translation for palette files */\n#endif\n\n#if defined(PNG_READ_QUANTIZE_SUPPORTED) || defined(PNG_hIST_SUPPORTED)\n   png_uint_16p hist;                /* histogram */\n#endif\n\n#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED\n   png_byte heuristic_method;        /* heuristic for row filter selection */\n   png_byte num_prev_filters;        /* number of weights for previous rows */\n   png_bytep prev_filters;           /* filter type(s) of previous row(s) */\n   png_uint_16p filter_weights;      /* weight(s) for previous line(s) */\n   png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */\n   png_uint_16p filter_costs;        /* relative filter calculation cost */\n   png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */\n#endif\n\n#ifdef PNG_TIME_RFC1123_SUPPORTED\n   /* This is going to be unused in libpng16 and removed from libpng17 */\n   char time_buffer[29]; /* String to hold RFC 1123 time text */\n#endif\n\n/* New members added in libpng-1.0.6 */\n\n   png_uint_32 free_me;    /* flags items libpng is responsible for freeing */\n\n#ifdef PNG_USER_CHUNKS_SUPPORTED\n   png_voidp user_chunk_ptr;\n   png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */\n#endif\n\n#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED\n   int num_chunk_list;\n   png_bytep chunk_list;\n#endif\n\n#ifdef PNG_READ_sRGB_SUPPORTED\n   /* Added in 1.5.5 to record an sRGB chunk in the png. */\n   png_byte is_sRGB;\n#endif\n\n/* New members added in libpng-1.0.3 */\n#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED\n   png_byte rgb_to_gray_status;\n   /* Added in libpng 1.5.5 to record setting of coefficients: */\n   png_byte rgb_to_gray_coefficients_set;\n   /* These were changed from png_byte in libpng-1.0.6 */\n   png_uint_16 rgb_to_gray_red_coeff;\n   png_uint_16 rgb_to_gray_green_coeff;\n   /* deleted in 1.5.5: rgb_to_gray_blue_coeff; */\n#endif\n\n/* New member added in libpng-1.0.4 (renamed in 1.0.9) */\n#if defined(PNG_MNG_FEATURES_SUPPORTED)\n/* Changed from png_byte to png_uint_32 at version 1.2.0 */\n   png_uint_32 mng_features_permitted;\n#endif\n\n/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */\n#ifdef PNG_MNG_FEATURES_SUPPORTED\n   png_byte filter_type;\n#endif\n\n/* New members added in libpng-1.2.0 */\n\n/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */\n#ifdef PNG_USER_MEM_SUPPORTED\n   png_voidp mem_ptr;             /* user supplied struct for mem functions */\n   png_malloc_ptr malloc_fn;      /* function for allocating memory */\n   png_free_ptr free_fn;          /* function for freeing memory */\n#endif\n\n/* New member added in libpng-1.0.13 and 1.2.0 */\n   png_bytep big_row_buf;         /* buffer to save current (unfiltered) row */\n\n#ifdef PNG_READ_QUANTIZE_SUPPORTED\n/* The following three members were added at version 1.0.14 and 1.2.4 */\n   png_bytep quantize_sort;          /* working sort array */\n   png_bytep index_to_palette;       /* where the original index currently is\n                                        in the palette */\n   png_bytep palette_to_index;       /* which original index points to this\n                                         palette color */\n#endif\n\n/* New members added in libpng-1.0.16 and 1.2.6 */\n   png_byte compression_type;\n\n#ifdef PNG_USER_LIMITS_SUPPORTED\n   png_uint_32 user_width_max;\n   png_uint_32 user_height_max;\n\n   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown\n    * chunks that can be stored (0 means unlimited).\n    */\n   png_uint_32 user_chunk_cache_max;\n\n   /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk\n    * can occupy when decompressed.  0 means unlimited.\n    */\n   png_alloc_size_t user_chunk_malloc_max;\n#endif\n\n/* New member added in libpng-1.0.25 and 1.2.17 */\n#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED\n   /* Storage for unknown chunk that the library doesn't recognize. */\n   png_unknown_chunk unknown_chunk;\n#endif\n\n/* New member added in libpng-1.2.26 */\n  png_size_t old_big_row_buf_size;\n\n/* New member added in libpng-1.2.30 */\n  png_charp chunkdata;  /* buffer for reading chunk data */\n\n#ifdef PNG_IO_STATE_SUPPORTED\n/* New member added in libpng-1.4.0 */\n   png_uint_32 io_state;\n#endif\n\n/* New member added in libpng-1.5.6 */\n   png_bytep big_prev_row;\n\n   void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info,\n      png_bytep row, png_const_bytep prev_row);\n};\n#endif /* PNGSTRUCT_H */\n"
  },
  {
    "path": "tests/build/issue21132-__ARM_ARCH__/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue21132-__ARM_ARCH__\nLOCAL_SRC_FILES := issue21132-__ARM_ARCH__.c\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/issue21132-__ARM_ARCH__/jni/Application.mk",
    "content": "# Only armeabi-v7a* and x86 instruction for fast __swap32md\nAPP_ABI := armeabi-v7a x86 armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/issue21132-__ARM_ARCH__/jni/issue21132-__ARM_ARCH__.c",
    "content": "#if defined(__ARM_ARCH_5__)\n#error\n#elif defined(__ARM_ARCH_5T__)\n#error\n#elif defined(__ARM_ARCH_5E__)\n#error\n#elif defined(__ARM_ARCH_5TE__)\n#error\n#endif\n\nint main(int argc, char *argv[])\n{\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/issue21132-__ARM_ARCH__/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard', 'x86'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/issue22336-ICE-emit-rtl/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue22336-ICE-emit-rtl\nLOCAL_ARM_NEON := true\nLOCAL_CFLAGS += -O0\nLOCAL_SRC_FILES := issue22336-ICE-emit-rtl.cpp\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n"
  },
  {
    "path": "tests/build/issue22336-ICE-emit-rtl/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/issue22336-ICE-emit-rtl/jni/issue22336-ICE-emit-rtl.cpp",
    "content": "#include <arm_neon.h>\n\nstruct Matrix43 {\n    float32x4_t row0;\n    float32x4_t row1;\n    float32x4_t row2;\n    float32x4_t row3;\n};\n\n__attribute__((always_inline)) inline Matrix43 operator*(const Matrix43& m1, const Matrix43& m2) {\n    Matrix43 rr;\n    rr.row0 = vmulq_n_f32(         m2.row0, vgetq_lane_f32(m1.row0, 0));\n    rr.row0 = vmlaq_n_f32(rr.row0, m2.row1, vgetq_lane_f32(m1.row0, 1));\n    rr.row0 = vmlaq_n_f32(rr.row0, m2.row2, vgetq_lane_f32(m1.row0, 2));\n\n    rr.row1 = vmulq_n_f32(         m2.row0, vgetq_lane_f32(m1.row1, 0));\n    rr.row1 = vmlaq_n_f32(rr.row1, m2.row1, vgetq_lane_f32(m1.row1, 1));\n    rr.row1 = vmlaq_n_f32(rr.row1, m2.row2, vgetq_lane_f32(m1.row1, 2));\n\n    rr.row2 = vmulq_n_f32(         m2.row0, vgetq_lane_f32(m1.row2, 0));\n    rr.row2 = vmlaq_n_f32(rr.row2, m2.row1, vgetq_lane_f32(m1.row2, 1));\n    rr.row2 = vmlaq_n_f32(rr.row2, m2.row2, vgetq_lane_f32(m1.row2, 2));\n\n    rr.row3 = vmlaq_n_f32(m2.row3, m2.row0, vgetq_lane_f32(m1.row3, 0));\n    rr.row3 = vmlaq_n_f32(rr.row3, m2.row1, vgetq_lane_f32(m1.row3, 1));\n    rr.row3 = vmlaq_n_f32(rr.row3, m2.row2, vgetq_lane_f32(m1.row3, 2));\n    return rr;\n}\n\nvoid _f_with_internal_compiler_error(const Matrix43& m, const void* a1, const void* a2) {\n    m * m * m;\n}\n"
  },
  {
    "path": "tests/build/issue22336-ICE-emit-rtl/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/issue22345-ICE-postreload/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue22345-ICE-postreload\nLOCAL_ARM_NEON := true\nLOCAL_SRC_FILES := issue22345-ICE-postreload.cpp\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n\n"
  },
  {
    "path": "tests/build/issue22345-ICE-postreload/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/issue22345-ICE-postreload/jni/issue22345-ICE-postreload.cpp",
    "content": "#include <arm_neon.h>\n\nnamespace math {\n    namespace internal {\n#define _IOS_SHUFFLE_1032(vec) vrev64q_f32(vec)\n#define _IOS_SHUFFLE_2301(vec) vcombine_f32(vget_high_f32(vec), vget_low_f32(vec))\n        inline float32x4_t dot4VecResult(const float32x4_t& vec1, const float32x4_t& vec2) {\n            float32x4_t result = vmulq_f32(vec1, vec2);\n            result = vaddq_f32(result, _IOS_SHUFFLE_1032(result));\n            result = vaddq_f32(result, _IOS_SHUFFLE_2301(result));\n            return result;\n        }\n\n        inline float32x4_t fastRSqrt(const float32x4_t& vec) {\n            float32x4_t result;\n            result = vrsqrteq_f32(vec);\n            result = vmulq_f32(vrsqrtsq_f32(vmulq_f32(result, result), vec), result);\n            return result;\n        }\n\n    }\n    typedef float32x4_t Vector3;\n\n    inline Vector3 normalize(const Vector3& v1) {\n        float32x4_t dot;\n        dot = vsetq_lane_f32(0.0f, v1, 3);\n        dot = internal::dot4VecResult(dot, dot);\n\n        if (vgetq_lane_f32(dot, 0) == 0.0f) {\n            return v1;\n        } else {\n            Vector3 result;\n            result = vmulq_f32(v1, internal::fastRSqrt(dot));\n            return result;\n        }\n    }\n\n    inline Vector3 cross(const Vector3& v1, const Vector3& v2) {\n        float32x4x2_t v_1203 = vzipq_f32(vcombine_f32(vrev64_f32(vget_low_f32(v1)), vrev64_f32(vget_low_f32(v2))), vcombine_f32(vget_high_f32(v1), vget_high_f32(v2)));\n        float32x4x2_t v_2013 = vzipq_f32(vcombine_f32(vrev64_f32(vget_low_f32(v_1203.val[0])), vrev64_f32(vget_low_f32(v_1203.val[1]))), vcombine_f32(vget_high_f32(v_1203.val[0]), vget_high_f32(v_1203.val[1])));\n\n        Vector3 result;\n        result = vmlsq_f32(vmulq_f32(v_1203.val[0], v_2013.val[1]), v_1203.val[1], v_2013.val[0]);\n        return result;\n    }\n}\n\nvoid _f_with_internal_compiler_error_in_reload_cse_simplify_operands(const math::Vector3& v1, const math::Vector3& v2) {\n    math::normalize(math::cross(v1, v2));\n}\n"
  },
  {
    "path": "tests/build/issue22345-ICE-postreload/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/issue34613-neon/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue34613-neon\nLOCAL_ARM_NEON := true\nLOCAL_SRC_FILES := issue34613-neon.cpp\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n"
  },
  {
    "path": "tests/build/issue34613-neon/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\nAPP_STL := gnustl_shared\n"
  },
  {
    "path": "tests/build/issue34613-neon/jni/issue34613-neon.cpp",
    "content": "#include <vector>\n#include <arm_neon.h>\n\nvoid x(float32x4_t v0, float32_t f)\n{\n  float32x4_t vv = vmulq_n_f32( v0, f);\n}\n\nint main()\n{\n   std::vector<float32_t> my_vector;\n   return 0;\n}\n\n"
  },
  {
    "path": "tests/build/issue34613-neon/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/issue36131-flto-c++11/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue36131-flto-c++11\nLOCAL_SRC_FILES := issue36131-flto-c++11.cxx\nLOCAL_CFLAGS += -g -std=c++11\nLOCAL_CFLAGS += -flto\nLOCAL_LDFLAGS += -flto\n\n# Clang LTO is only supported with gold. ARM64 still uses bfd by default, so\n# make sure this test uses gold when we're using clang.\nifneq ($(filter clang%,$(NDK_TOOLCHAIN_VERSION)),)\nLOCAL_CFLAGS += -fuse-ld=gold\nLOCAL_LDFLAGS += -fuse-ld=gold\nendif\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue36131-flto-c++11/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/build/issue36131-flto-c++11/jni/issue36131-flto-c++11.cxx",
    "content": "#include <functional>\nint main()\n{\n   return 0;\n}\n"
  },
  {
    "path": "tests/build/issue36131-flto-c++11/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\", \"clang3.8\"]}\n"
  },
  {
    "path": "tests/build/issue36131-flto-c++11/test_config.py",
    "content": "# Shut up a warning about us not being a real package.\nfrom __future__ import absolute_import\nimport platform\n\n\ndef match_unsupported(abi, _platform, toolchain, _subtest=None):\n    # Clang does LTO via gold plugin, but gold doesn't support MIPS yet.\n    if toolchain == 'clang' and abi.startswith('mips'):\n        return '{} {}'.format(toolchain, abi)\n\n    # We only support LTO from Linux.\n    if platform.system() != 'Linux':\n        return platform.system()\n\n    return None\n"
  },
  {
    "path": "tests/build/issue38441-Elf32_auxv_t/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue38441-Elf32_auxv_t\nLOCAL_SRC_FILES := issue38441-Elf32_auxv_t.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue38441-Elf32_auxv_t/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue38441-Elf32_auxv_t/jni/issue38441-Elf32_auxv_t.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <elf.h>\n\nElf32_auxv_t auxv32;\nElf64_auxv_t auxv64;\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue39824-__BYTE_ORDER/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue39824-__BYTE_ORDER\nLOCAL_SRC_FILES := issue39824-__BYTE_ORDER.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue39824-_BYTE_ORDER\nLOCAL_SRC_FILES := issue39824-_BYTE_ORDER.c\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/issue39824-__BYTE_ORDER/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue39824-__BYTE_ORDER/jni/issue39824-_BYTE_ORDER.c",
    "content": "#include <endian.h>\n\nint main()\n{\n  return 0 * _BYTE_ORDER * __BYTE_ORDER;\n}\n"
  },
  {
    "path": "tests/build/issue39824-__BYTE_ORDER/jni/issue39824-__BYTE_ORDER.c",
    "content": "#include <sys/endian.h>\n\nint main()\n{\n  return 0 * __BYTE_ORDER;\n}\n"
  },
  {
    "path": "tests/build/issue39983-PAGE_SIZE/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue39983-PAGE_SIZE\nLOCAL_SRC_FILES := issue39983-PAGE_SIZE.c\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/issue39983-PAGE_SIZE/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue39983-PAGE_SIZE/jni/issue39983-PAGE_SIZE.c",
    "content": "#include <pthread.h>\n\nint main()\n{\n    return 0 * PTHREAD_STACK_MIN;\n}\n"
  },
  {
    "path": "tests/build/issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE\nLOCAL_SRC_FILES := issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE.c\nLOCAL_LDLIBS    += -lOpenSLES\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-14"
  },
  {
    "path": "tests/build/issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE/jni/issue40625-SL_IID_ANDROIDBUFFERQUEUESOURCE.c",
    "content": "#include <SLES/OpenSLES.h>\n#include <SLES/OpenSLES_Android.h>\n\nSLInterfaceID foo()\n{\n    return SL_IID_ANDROIDBUFFERQUEUESOURCE;\n}\n"
  },
  {
    "path": "tests/build/issue41297-atomic-64bit/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue41297-atomic-64bit-dynamic-executable\nLOCAL_SRC_FILES := issue41297-atomic-64bit.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue41297-atomic-64bit-static-executable\nLOCAL_SRC_FILES := issue41297-atomic-64bit.c\nLOCAL_LDFLAGS += -static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue41297-atomic-64bit-shared-lib\nLOCAL_SRC_FILES := issue41297-atomic-64bit.c\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/issue41297-atomic-64bit/jni/Application.mk",
    "content": "# Note that MIPS doesn't support 64-bit atomic built-in yet\nAPP_ABI := armeabi-v7a x86 armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/issue41297-atomic-64bit/jni/issue41297-atomic-64bit.c",
    "content": "long long K;\n\nint main()\n{\n   __sync_fetch_and_add(&K, 1);\n}\n"
  },
  {
    "path": "tests/build/issue41297-atomic-64bit/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi == 'mips':\n        return abi, 'http://b.android.com/41297'\n    return None\n"
  },
  {
    "path": "tests/build/issue41387-uniform-initialized-rvalue/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue41387-uniform-initialized-rvalue\nLOCAL_SRC_FILES := issue41387-uniform-initialized-rvalue.cpp\nLOCAL_CFLAGS += -std=c++11\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue41387-uniform-initialized-rvalue/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue41387-uniform-initialized-rvalue/jni/issue41387-uniform-initialized-rvalue.cpp",
    "content": "struct pair {\n    int a, b;\n    void method() const {}\n};\n\nint main() {\n    (pair { 0, 0 }).method();\n}\n\n"
  },
  {
    "path": "tests/build/issue41770-_GLIBCXX_HAS_GTHREADS/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue41770-_GLIBCXX_HAS_GTHREADS\nLOCAL_SRC_FILES := issue41770-_GLIBCXX_HAS_GTHREADS.cpp\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/issue41770-_GLIBCXX_HAS_GTHREADS/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/build/issue41770-_GLIBCXX_HAS_GTHREADS/jni/issue41770-_GLIBCXX_HAS_GTHREADS.cpp",
    "content": "#include <iostream>\n\nint main()\n{\n#if !defined(_GLIBCXX_HAS_GTHREADS)\n#error _GLIBCXX_HAS_GTHREADS is not defined\n#endif\n}\n"
  },
  {
    "path": "tests/build/issue41770-_GLIBCXX_HAS_GTHREADS/test_config.py",
    "content": "def match_broken(abi, platform, toolchain, subtest=None):\n    return 'all', 'http://b/27433401'\n"
  },
  {
    "path": "tests/build/issue42841-LOCAL_PATH/jni/Android.mk",
    "content": "# Note that the line LOCAL_PATH ends with trailing space and\n# cause strange error message reads:\n#\n#  make: *** No rule to make target /issue42841-LOCAL_PATH.c', needed by\n#     obj/local/armeabi/objs/issue42841-LOCAL_PATH/issue42841-LOCAL_PATH.o'.  Stop.\n#\nLOCAL_PATH := $(call my-dir) \n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue42841-LOCAL_PATH\nLOCAL_SRC_FILES := issue42841-LOCAL_PATH.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue42841-LOCAL_PATH/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue42841-LOCAL_PATH/jni/issue42841-LOCAL_PATH.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue53163-OpenSLES_AndroidConfiguration/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue53163-OpenSLES_AndroidConfiguration\nLOCAL_SRC_FILES := issue53163-OpenSLES_AndroidConfiguration.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue53163-OpenSLES_AndroidConfiguration/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/build/issue53163-OpenSLES_AndroidConfiguration/jni/issue53163-OpenSLES_AndroidConfiguration.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <SLES/OpenSLES.h>\n#include <SLES/OpenSLES_AndroidConfiguration.h>\n\nint main()\n{\n    SL_ANDROID_RECORDING_PRESET_NONE;\n}\n"
  },
  {
    "path": "tests/build/issue53404-backward-compatibility/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue53404-backward-compatibility\nLOCAL_SRC_FILES := issue53404-backward-compatibility.cpp\nLOCAL_CFLAGS := -Wno-deprecated\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue53404-backward-compatibility/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static"
  },
  {
    "path": "tests/build/issue53404-backward-compatibility/jni/issue53404-backward-compatibility.cpp",
    "content": "#include <ext/hash_map>\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/issue53711-un_h/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue53711-un_h\nLOCAL_SRC_FILES := issue53711-un_h.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue53711-un_h/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue53711-un_h/jni/issue53711-un_h.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <sys/un.h>\nint main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/issue54465-invalid-asm-operand-out-of-range/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue54465-invalid-asm-operand-out-of-range\nLOCAL_SRC_FILES := issue54465-invalid-asm-operand-out-of-range.cpp\nLOCAL_CPPFLAGS += -O0\ninclude $(BUILD_SHARED_LIBRARY)"
  },
  {
    "path": "tests/build/issue54465-invalid-asm-operand-out-of-range/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared"
  },
  {
    "path": "tests/build/issue54465-invalid-asm-operand-out-of-range/jni/issue54465-invalid-asm-operand-out-of-range.cpp",
    "content": "#include <ostream>\n#include <netinet/in.h>\n\nclass ClassA : public std::basic_streambuf<char, std::char_traits<char> >, public std::ostream\n{\n   public:\n    ClassA(const uint32_t foo);\n};\n\nClassA::ClassA(const uint32_t foo) : std::ostream(this)\n{\n    uint32_t be = htonl(foo);\n}\n"
  },
  {
    "path": "tests/build/issue54623-dcraw_common-x86-segfault/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue54623-dcraw_common-x86-segfault\nLOCAL_SRC_FILES := issue54623-dcraw_common-x86-segfault.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue54623-dcraw_common-x86-segfault/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue54623-dcraw_common-x86-segfault/jni/issue54623-dcraw_common-x86-segfault.cpp",
    "content": "int c;\nvoid foo(int f)\n{\n    int wbi=-100000000;\n    c = (f ? \"012346000000000000\":\"01345:000000006008\")[wbi]-'0'+ 2;\n}\nint main()\n{\n    return 0;\n}"
  },
  {
    "path": "tests/build/issue56508-gcc4.7-ICE/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue56508-gcc4.7-ICE\nLOCAL_SRC_FILES := extraMachine.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue56508-gcc4.7-ICE/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue56508-gcc4.7-ICE/jni/extraMachine.c",
    "content": "\ntypedef int Boolean;\n\ntypedef unsigned char univ;\ntypedef unsigned short int Uint16;\ntypedef unsigned char Uint8;\ntypedef int Sint32;\ntypedef void *hdlno;\ntypedef Sint32 fontno;\ntypedef short int Sint16;\n\nstruct save_restore_link {\n  struct hdl *next;  /* next modified handle */\n  struct hdl *prev;  /* previous modified handle */\n};\n\n/*\n** The first five entries entries must match \"bakhdl\" below.\n*/\ntypedef struct hdl {\n    univ *raw;\t\t/* composite object value */\n    Uint16 dim;\t\t/* # items in composite object (formerly \"cnt\") */\n    char cat;\t\t/* object category (a.k.a. type) + non-gc status bits */\n    char acc_lev;\t/* object attributes, save level modified or created */\n    struct save_restore_link svlink;\n    Uint8 coded_depth;\t/*   0 ==> at some depth > 253;\n\t\t\t     1 ==> not on stack;\n\t\t\t     2 ==> at dictstak[0];\n\t\t\t     3 ==> at dictstak[1];\n\t\t\t   255 ==> at dictstack[253]\n\t\t\t   (see macros below)\n\t\t\t*/\n    char stat_rootlev;\t/* status bits + object creation savelevel */\n    Uint8 handlev;      /* VM level of this handle; used to maintain freelist */\n    Uint8 fastlev;\t/* coded save level for faster OBsave() logic:\n\t\t\t *   0 ==> (acc_lev == 0x10)  PreScript,    ROM\n\t\t\t *   1 ==> (acc_lev == 0x00)  savelevel  0, RAM\n\t\t\t *   2 ==> (acc_lev == 0x01)  savelevel  1\n\t\t\t *  16 ==> (acc_lev == 0x0F)  savelevel 15 (last)\n\t\t\t *  17 ==>\t\t      global level 1\n\t\t\t */\n    union {\n      /*\n      ** In a string, array, or packedarray subinterval handle,\n      ** \"superset\" points to the parent string handle.\n      **/\n      struct hdl *superset;  /* see above */\n      struct hdl *gclink;    /* next composite to be scanned */\n      struct hdl *nextfree;  /* next handle on freelist */\n    } u;\n} HDL;\n\n#define INI_HDLCNT\t742\n\nstruct hdl localhand[INI_HDLCNT];\n\n#define QUADINIT(tp,at) \\\n    ((((unsigned long)(at)<<8)&0x0000ff00) | \\\n     ((unsigned long)(tp)&0x000000ff))\n\n#define \tCOMPOSGROUP\t\t0x10\n#define\t\tCT_PAKARRY\t0x0D\n#define\t\tPAKARRYTYPE\t\t(COMPOSGROUP| CT_PAKARRY)\n\n#define \tEXECATTR\t01\n#define \tREADONLY\t04\n\n#define LCL_i(hnum) ((unsigned long)&localhand[hnum])\n#define JOBXHDL 117\n\nstruct compositeOB {\n\tunsigned long   type_attr_pos;    /* force .ALIGN 4 */\n\tunsigned long   hdl;\n};\n\nstatic const struct compositeOB\n  do_jobx_i = {QUADINIT (PAKARRYTYPE, EXECATTR | READONLY), LCL_i(JOBXHDL)};\n\n#define \tOPERGROUP\t\t0x20\n#define\t\tABORTTYPE\t\t(OPERGROUP | 0x0C)\n#define\t\tMACHCALLTYPE\t(OPERGROUP | 0x0D)\n\n#define STOP_CALL\t1\t/* --stop-- operator */\n\n\nstruct filerep {\n    Sint16 des;\n    Sint16 assoc;\n} ;\n\nstruct stoprep {\n    Uint16 userjob;\t/* True if in user job at \"stopped\" operator */\n    Uint16 saverr;\t/* If true, any error is saved for machcall return */\n} ;\n\nstruct dhdr1rep {\n    Uint16 entmax;\t/* Maximum entry count    */\n    Uint16 entcnt;\t/* Current entry count */\n} ;\n\nstruct dhdr2rep {\n    Uint16 sorted;\t/* Total sorted entries   */\n    Uint16 sortable;\t/* Total sortable entries */\n} ;\n\ntypedef struct ob {\n    Uint8 type;\n    Uint8 attr;\n    Uint16 pos;\n    union {\n\tSint32        boolrepr;\n\tSint32        intrepr;\n\tfloat         realrepr;\n\thdlno         hdl;\n\tstruct stoprep stoprepr;\n\tstruct filerep filrepr;\n\tstruct tok   *namrepr;\n\tconst struct par *oprrepr;\n\tfontno        fontrepr;\n\tSint16        savrepr;\n\tvoid          (*machcallhandler)(int, int);\n\tvoid          (*aborthandler)(int);\n\tvoid         *voidprepr;\n\tstruct dhdr1rep dhdr1repr;\n\tstruct dhdr2rep dhdr2repr;\n    } un;\n} OB;\n\n/* get type field from object */\n#define OBtype(obp) ((obp)->type)\n\n/* get hdl entry from object */\n#define OBhdl(obp) ((obp)->un.hdl)\n\n/* get pos field from object */\n#define OBpos(obp) ((obp)->pos)\n\nOB *execptr;\n\n/*\n* Clean the execution stack back to the outermost user job level\n* or until the stack is completely empty.\n*/\nint clean_exec_stack (Boolean early_end)\n{\n    OB  *pobr;\n    hdlno jobhdl;\n\n    jobhdl  = OBhdl((OB *)&do_jobx_i);\n\n    pobr = execptr - 1;\n\n    if (OBhdl(pobr) == jobhdl)\n\t{\n\t    return 1;\n\n\t}\n\n    return (0);\n\n}\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue58135-_C_LABEL_STRING/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue58135-_C_LABEL_STRING\nLOCAL_SRC_FILES := issue58135-_C_LABEL_STRING.cpp\nLOCAL_CPPFLAGS += -std=c++11 -Werror\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue58135-_C_LABEL_STRING/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue58135-_C_LABEL_STRING/jni/issue58135-_C_LABEL_STRING.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdio.h>\n#include <sys/cdefs_elf.h>\n\nint main()\n{\n   const char *s = _C_LABEL_STRING(\"test\");\n}\n"
  },
  {
    "path": "tests/build/issue64679-prctl/build.sh",
    "content": "#!/bin/sh\n# Check if some platform headers can be included alone\n# See b.android.com/64679 for one of them\n#\n\nexport ANDROID_NDK_ROOT=$NDK\n\nNDK_BUILDTOOLS_PATH=$NDK/build/instruments\n. $NDK/build/instruments/prebuilt-common.sh\n\nJOBS=1\nfor OPT; do\n    case $OPT in\n        -j*)\n            JOBS=${OPT##-j}\n            ;;\n        --jobs=*)\n            JOBS=${OPT##--jobs=}\n            ;;\n        APP_ABI=*)\n            eval readonly \"$OPT\"\n            ;;\n    esac\ndone\n\nINTERNAL_HEADERS=\"sys/_errdefs.h sys/_sigdefs.h sys/_system_properties.h\"\nINTERNAL_HEADERS=\"$INTERNAL_HEADERS sys/_null.h sys/_stdint.h sys/_types.h ieeefp.h\"\nINVALID_HEADERS_FOR_64BIT=\"time64.h sys/user.h\"  # ToDo: remove sys/user.h later once __u64 and __u32 are defined for x86_64\n\n# This header doesn't compile unless included from C++ with\n# --std=c++-0x or higher, so skip it here.\nINTERNAL_HEADERS=\"$INTERNAL_HEADERS uchar.h\"\n\nif [ -n \"$APP_ABI\" ]; then\n    readonly APP_ARCH=\"$(convert_abi_to_arch \"$APP_ABI\")\"\n    enabled_test_arch () { [ \"$APP_ARCH\" == \"$1\" ]; }\nelse\n    enabled_test_arch () { true; }\nfi\n\nfor ARCH in $DEFAULT_ARCHS; do\n    enabled_test_arch \"$ARCH\" || continue\n    for API_LEVEL in $API_LEVELS; do\n        if [ ! -d $ANDROID_NDK_ROOT/platforms/android-$API_LEVEL/arch-$ARCH ]; then\n            continue\n        fi\n        # zuav: since mips64 not ready for prime time just skip it\n        if [ \"$ARCH\" = \"mips64\" ]; then\n            continue\n        fi\n        HEADERS=$(cd $ANDROID_NDK_ROOT/platforms/android-$API_LEVEL/arch-$ARCH/usr/include ; ls *.h sys/*.h android/*.h EGL/*.h GLES/*.h GLES2/*.h GLES3/*.h OMXAL/*.h SLES/*.h 2> /dev/null)\n        #echo $API_LEVEL $ARCH HEADERS=$HEADERS\n        ABIS=$(commas_to_spaces $(convert_arch_to_abi $ARCH))\n        for ABI in $ABIS; do\n            # Create temporary project\n            PROJECT_DIR=${TMPDIR:-/tmp}/$USER-ndk-test-system-headers/android-$API_LEVEL-$ABI\n            (mkdir -p \"$PROJECT_DIR\" && rm -rf \"$PROJECT_DIR\"/*) || panic \"Can't create dir: $PROJECT_DIR\"\n            mkdir \"$PROJECT_DIR\"/jni\n            cat > $PROJECT_DIR/jni/Application.mk <<EOF\n# Auto-generated - DO NOT EDIT\nAPP_PLATFORM=android-$API_LEVEL\nAPP_ABI=$ABI\nAPP_MODULES=libfoo\nEOF\n            ANDROID_MK=$PROJECT_DIR/jni/Android.mk\n            cat > $ANDROID_MK <<EOF\n# Auto-generated - DO NOT EDIT\nLOCAL_PATH := \\$(call my-dir)\n\ninclude \\$(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := \\\\\nEOF\n            for HEADER in $HEADERS; do\n                if [ \"$INTERNAL_HEADERS\" != \"${INTERNAL_HEADERS%%$HEADER*}\" ] ; then\n                    continue;\n                fi\n                if [ \"$ABI\" != \"${ABI%%64*}\" ] ; then\n                    if [ \"$INVALID_HEADERS_FOR_64BIT\" != \"${INVALID_HEADERS_FOR_64BIT%%$HEADER*}\" ] ; then\n                        continue;\n                    fi\n                fi\n                NAME=$(echo \"$HEADER\" | tr '/' '__' | tr '.' '_' | tr '-' '_')\n                SRC=$NAME.c\n                SRC_FILE=$PROJECT_DIR/jni/$SRC\n                cat > $PROJECT_DIR/jni/$SRC <<EOF\n/* Auto-generated - DO NOT EDIT */\n#include <$HEADER>\n\nchar dummy_$NAME = 0;\nEOF\n                echo \"    $SRC \\\\\" >> $ANDROID_MK\n            done\n            cat >> $ANDROID_MK <<EOF\n\ninclude \\$(BUILD_STATIC_LIBRARY)\n\nEOF\n            echo \"Checking headers for android-$API_LEVEL/$ABI\"\n            $ANDROID_NDK_ROOT/ndk-build -C \"$PROJECT_DIR\" -B -j$JOBS V=1\n            $ANDROID_NDK_ROOT/ndk-build -C \"$PROJECT_DIR\" -B -j$JOBS V=1 1>/dev/null 2>&1\n            fail_panic \"Can't compile header for android-$API_LEVEL/$ABI, to reproduce: $ANDROID_NDK_ROOT/ndk-build -C $PROJECT_DIR\"\n\n            rm -rf \"$PROJECT_DIR\"\n        done  # for ABI\n    done  # for ARCH\ndone  # for API_LEVEL\n"
  },
  {
    "path": "tests/build/issue64679-prctl/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue64679-prctl\nLOCAL_SRC_FILES := issue64679-prctl.cc\nLOCAL_CPPFLAGS += -std=c++11\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue64679-prctl/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue64679-prctl/jni/issue64679-prctl.cc",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#undef linux\n#define linux linux\n\n#include HEADER_UNDER_TESTING\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue65705-asm-pc/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue65705-asm-pc\nLOCAL_SRC_FILES := issue65705-asm-pc.c\n# Using -static to prevent ndk-build from adding -fPIE even when APP_PIE is set\n# to true from the command line. The compiler bug this test is trying to show is\n# not present when compiling with -fPIE.\nLOCAL_LDFLAGS := -static\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue65705-asm-pc/jni/Application.mk",
    "content": "APP_ABI := armeabi armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/issue65705-asm-pc/jni/issue65705-asm-pc.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvoid func_2(const unsigned long pc)\n{\n}\n\nint func_1()\n{\n   register unsigned long pc asm (\"pc\");\n   func_2(pc);\n   return 0;\n}\n\nint main()\n{\n    return func_1();\n}\n"
  },
  {
    "path": "tests/build/issue65705-asm-pc/properties.json",
    "content": "{\"broken-toolchain-version\": [\"gcc4.8\", \"gcc4.9\", \"gcc5\", \"gcc6\"]}\n"
  },
  {
    "path": "tests/build/issue65705-asm-pc/test_config.py",
    "content": "def match_broken(abi, device, toolchain, subtest=None):\n    if toolchain == '4.9':\n        return toolchain, 'http://b.android.com/65705'\n    return None, None\n\n\ndef match_unsupported(abi, device, toolchain, subtest=None):\n    if abi not in ('armeabi', 'armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/issue66668-libc++-std-feof/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue66668-libc++-std-feof\nLOCAL_SRC_FILES := issue66668-libc++-std-feof.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue66668-libc++-std-feof/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_static\n"
  },
  {
    "path": "tests/build/issue66668-libc++-std-feof/jni/issue66668-libc++-std-feof.cpp",
    "content": "#include <cstdio>\n\nint main()\n{\n    std::FILE* fp;\n    int a = std::getchar();\n    int b = std::putchar(a);\n    std::clearerr(fp);\n    int c = std::feof(fp);\n    int d = std::ferror(fp);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/issue79114-__builtin___stpncpy_chk/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := __builtin___stpncpy_chk\nLOCAL_SRC_FILES := __builtin___stpncpy_chk.c\nLOCAL_CFLAGS += -D_FORTIFY_SOURCE=2\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/issue79114-__builtin___stpncpy_chk/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-21\n"
  },
  {
    "path": "tests/build/issue79114-__builtin___stpncpy_chk/jni/__builtin___stpncpy_chk.c",
    "content": "#include <string.h>\n\nint main(int argc, char *argv[])\n{\n    stpncpy(argv[1], argv[2], argc);\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/issue79115-confusing-ld.gold-warning/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue79115-confusing-ld.gold-warning\nLOCAL_SRC_FILES := issue79115-confusing-ld.gold-warning.c\nLOCAL_DISABLE_NO_EXECUTE := true\nLOCAL_LDFLAGS += -Wl,--fatal-warnings\n\n# Disable integrated assembler because -Wa,--execstack isn't supported\nLOCAL_CFLAGS += $(if $(filter clang%,$(NDK_TOOLCHAIN_VERSION)),-fno-integrated-as)\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue79115-confusing-ld.gold-warning/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue79115-confusing-ld.gold-warning/jni/issue79115-confusing-ld.gold-warning.c",
    "content": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/issue81440-non-ascii-comment/build.sh",
    "content": "# Check if clang crash on non-ascii comments\n# See b.android.com/81440\n#\n\nresult=$(NDK_TOOLCHAIN_VERSION=clang $NDK/ndk-build -B APP_ABI=armeabi-v7a 2>&1)\necho $result | grep -q \"error: expected\"\nRET=$?\nrm -rf obj\n\nif [ $RET != 0 ]; then\n  echo \"Error: did not find 'error: expected'\"\n  echo \"Output:\"\n  echo $result\n  exit 1\nfi\n\n"
  },
  {
    "path": "tests/build/issue81440-non-ascii-comment/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue81440-non-ascii-comment\nLOCAL_SRC_FILES := issue81440-non-ascii-comment.cpp\nLOCAL_CFLAGS += -fmessage-length=150\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/issue81440-non-ascii-comment/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/issue81440-non-ascii-comment/jni/issue81440-non-ascii-comment.cpp",
    "content": "# 1 \"<built-in>\"\r\n# 1 \"c:\\\\b.cpp\"\r\nclass foo\r\n{\r\n    void F(cocos2d::CCScene* a); // инициализация начального состояния. Можно вызвать только 1 раз\r\n}\r\n"
  },
  {
    "path": "tests/build/lambda-defarg3/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program 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\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year  name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "tests/build/lambda-defarg3/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := lambda-defarg3\nLOCAL_SRC_FILES := lambda-defarg3.C\nLOCAL_CFLAGS += -std=c++11 -fabi-version=0\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/lambda-defarg3/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/lambda-defarg3/jni/lambda-defarg3.C",
    "content": "// PR c++/55223\n// { dg-options \"-std=c++11 -fabi-version=0\" }\n// { dg-final { scan-assembler \"_ZN8functionC1IZN1CIiE4testES_Ed_UliE_EET_\" } }\n\nstruct function\n{\n  template <class U> function(U u) { }\n};\n\ntemplate<typename T> struct C\n{\n  static T test(function f = [](int i){return i;}) { }\n};\n\nint main()\n{\n  C<int>::test();\n}\n"
  },
  {
    "path": "tests/build/lambda-defarg3/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if toolchain != '4.9':\n        return toolchain\n    return None\n"
  },
  {
    "path": "tests/build/merge-string-literals/build.sh",
    "content": "# Special script used to check that LOCAL_SHORT_COMMANDS works\n# correctly even when using a very large number of source files\n# when building a static or shared library.\n#\n# We're going to auto-generate all the files we need in a\n# temporary directory, because that's how we roll.\n#\n\nPROGDIR=$(dirname $0)\nPROGDIR=$(cd \"$PROGDIR\" && pwd)\n\n# Clean generated binaries\nrm -rf \"$PROGDIR/obj\" \"$PROGDIR/libs\"\n\n# Now run the build\nif [ -z \"$APP_ABI\" ]; then\n    for OPT; do\n        case $OPT in\n            APP_ABI=*)\n                APP_ABI=${OPT##APP_ABI=}\n                ;;\n        esac\n    done\n    $NDK/ndk-build -C \"$PROGDIR\" \"$@\"\n    RET=$?\nelse\n    $NDK/ndk-build -C \"$PROGDIR\" \"$@\" APP_ABI=\"$APP_ABI\"\n    RET=$?\nfi\n\n# find objdump. Any arch's objdump can do \"-s -j\".  We just need to find one\n# from $NDK/toolchains because MacOSX doesn't have that by default.\nget_build_var ()\n{\n    if [ -z \"$APP_ABI\" ]; then\n        make --no-print-dir -f $NDK/build/core/build-local.mk DUMP_$1 | tail -1\n    else\n        make --no-print-dir -f $NDK/build/core/build-local.mk DUMP_$1 APP_ABI=\"$APP_ABI\" | tail -1\n    fi\n}\n\nTOOLCHAIN_PREFIX=`get_build_var TOOLCHAIN_PREFIX`\nOBJDUMP=${TOOLCHAIN_PREFIX}objdump\n\n# check if linker.list is empty\nALL_SO=`find libs -name \"*.so\" -a -not -name libcrystax.so -print`\nfor SO in $ALL_SO; do\n    NUM_LINE=`$OBJDUMP -s -j.rodata $SO | wc -l | tr -d ' '`\n    if [ \"$NUM_LINE\" != \"7\" ]; then\n        echo \"ERROR: Fail to merge string literals!\"\n        exit 1\n    fi\n    NUM_ABCD=`$OBJDUMP -s -j.rodata $SO | grep abcd | wc -l | tr -d ' '`\n    if [ \"$NUM_ABCD\" != \"2\" ]; then\n        echo \"ERROR: abcd should appear exactly twice!\"\n        exit 1\n    fi\ndone\n\n# Clean generated binaries\nrm -rf \"$PROGDIR/obj\" \"$PROGDIR/libs\"\n\n# Exit\nexit $RET\n"
  },
  {
    "path": "tests/build/merge-string-literals/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := merge-string-literals\nLOCAL_SRC_FILES := merge-string-literals-1.c merge-string-literals-2.c\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/merge-string-literals/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := system\n"
  },
  {
    "path": "tests/build/merge-string-literals/jni/merge-string-literals-1.c",
    "content": "// merge_string_literals_1.c -- a test case for gold\n\n// Copyright 2013 Free Software Foundation, Inc.\n// Written by Alexander Ivchenko <alexander.ivchenko@intel.com>\n\n// This file is part of gold.\n\n// This program 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 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,\n// MA 02110-1301, USA.\n\n// The goal of this program is to check whether string literals from different\n// object files are merged together\n\nconst char* bar1() {\n    return \"abcdefghijklmnopqrstuvwxyz0123456789\";\n}\nconst char* bar1_short() {\n    return \"abcdef\";\n}\n"
  },
  {
    "path": "tests/build/merge-string-literals/jni/merge-string-literals-2.c",
    "content": "// merge_string_literals_2.c -- a test case for gold\n\n// Copyright 2013 Free Software Foundation, Inc.\n// Written by Alexander Ivchenko <alexander.ivchenko@intel.com>\n\n// This file is part of gold.\n\n// This program 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 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,\n// MA 02110-1301, USA.\n\n// The goal of this program is to check whether string literals from different\n// object files are merged together\n\nconst char* bar2() {\n    return \"abcdefghijklmnopqrstuvwxyz0123456789\";\n}\nconst char* bar2_short() {\n    return \"abcdef\";\n}\n"
  },
  {
    "path": "tests/build/mips-fp4/build.sh",
    "content": "cd $(dirname \"$0\")\n\n$NDK/ndk-build -B \"$@\"\n\n# Find instruction in file\n# $1: instruction\n# $2: file\nfind_instruction ()\n{\n    local INST=$1\n    local FILE=$2\n\n    grep -q -w -F -e $INST $FILE\n    if [ $? != 0 ]; then\n        echo \"$INST expected in file $FILE\"\n        exit 1\n    fi\n}\n\nfind_instruction \"madd.d\" mips-fp4-test1-2.s\nfind_instruction \"msub.d\" mips-fp4-test1-2.s\nfind_instruction \"nmadd.d\" mips-fp4-test3-6.s\nfind_instruction \"nmsub.d\" mips-fp4-test3-6.s\nfind_instruction \"recip.d\" mips-fp4-test3-6.s\nfind_instruction \"rsqrt.d\" mips-fp4-test3-6.s\n\nrm -f *.s *.i\n"
  },
  {
    "path": "tests/build/mips-fp4/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := mips-fp4-test1-2\nLOCAL_SRC_FILES := mips-fp4-test1-2.c\nLOCAL_CFLAGS += -O2 -mips32r2 -save-temps\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := mips-fp4-test3-6\nLOCAL_SRC_FILES := mips-fp4-test3-6.c\nLOCAL_CFLAGS += -O2 -mips32r2 -ffast-math -save-temps\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/mips-fp4/jni/Application.mk",
    "content": "APP_ABI := mips\n"
  },
  {
    "path": "tests/build/mips-fp4/jni/mips-fp4-test1-2.c",
    "content": "double test1 (double a, double b, double c)\n{\n  return a + b * c;\n}\ndouble test2 (double a, double b, double c)\n{\n  return - a + b * c;\n}\ndouble a, b, c;\n\nint main()\n{\n    test1(a, b, c);\n    test2(a, b, c);\n}\n"
  },
  {
    "path": "tests/build/mips-fp4/jni/mips-fp4-test3-6.c",
    "content": "#include <math.h>\n\ndouble test3 (double a, double b, double c)\n{\n  return - (a + b * c);\n}\ndouble test4 (double a, double b, double c)\n{\n  return - (-a + b * c);\n}\ndouble test5 (double a)\n{\n  return 1/a;\n}\ndouble test6 (double a)\n{\n  return 1/sqrt(a);\n}\n\ndouble a, b, c;\n\nint main()\n{\n    test3(a, b, c);\n    test4(a, b, c);\n    test5(a);\n    test6(a);\n}\n"
  },
  {
    "path": "tests/build/mips-fp4/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\", \"clang3.8\"]}\n"
  },
  {
    "path": "tests/build/mips-fp4/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi != 'mips':\n        return abi\n    return None\n\n\ndef match_broken(abi, platform, toolchain, subtest=None):\n    if toolchain == 'clang':\n        return toolchain, 'http://b/26984979'\n    return None, None\n"
  },
  {
    "path": "tests/build/multi-abi/README",
    "content": "This test checks that we can build the same binary for multiple architectures\nin a single ndk-build invokation, i.e. when using:\n\n  APP_ABI := armeabi armeabi-v7a x86 mips armeabi-v7a-hard\n\nThis failed in NDK r6 due to a bug in the build scripts.\n"
  },
  {
    "path": "tests/build/multi-abi/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := multi-hello\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/multi-abi/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a x86 mips armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/multi-abi/jni/main.c",
    "content": "#include <stdio.h>\n\nint main(void)\n{\n    printf(\"Hello world!\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/multi-module-path/build.sh",
    "content": "#!/bin/sh\n\necho \"\\$0=$0\"\ncd `dirname $0`\necho \"PWD=`pwd`\"\nexport NDK_MODULE_PATH=`pwd`/path1:`pwd`/path2\n$NDK/ndk-build \"$@\"\nif [ $? != 0 ]; then\n    echo \"ERROR: Can't build test program!\"\n    exit 1\nfi\n"
  },
  {
    "path": "tests/build/multi-module-path/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := multi_path_test\nLOCAL_SRC_FILES := test.c\nLOCAL_STATIC_LIBRARIES := libbar libfoo\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,bar)\n"
  },
  {
    "path": "tests/build/multi-module-path/jni/test.c",
    "content": "#include <stdio.h>\n#include \"bar.h\"\n\nint main(void)\n{\n    printf(\"The answer is %d\\n\", bar());\n    return 0;\n}\n"
  },
  {
    "path": "tests/build/multi-module-path/path1/foo/Android.mk",
    "content": "# A simple module used to demonstrate multi-path NDK_MODULE_PATH imports.\n#\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := libfoo.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/multi-module-path/path1/foo/foo.h",
    "content": "#ifndef FOO_H\n#define FOO_H\n\nextern int foo(void);\n\n#endif /* FOO_H */\n"
  },
  {
    "path": "tests/build/multi-module-path/path1/foo/libfoo.c",
    "content": "#include \"foo.h\"\n\nint foo(void)\n{\n    return 42;\n}\n"
  },
  {
    "path": "tests/build/multi-module-path/path2/bar/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar\nLOCAL_SRC_FILES := libbar.c\nLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_STATIC_LIBRARIES := libfoo\ninclude $(BUILD_STATIC_LIBRARY)\n\n$(call import-module,foo)\n"
  },
  {
    "path": "tests/build/multi-module-path/path2/bar/bar.h",
    "content": "#ifndef BAR_H\n#define BAR_H\n\nextern int bar(void);\n\n#endif /* BAR_H */\n"
  },
  {
    "path": "tests/build/multi-module-path/path2/bar/libbar.c",
    "content": "#include \"bar.h\"\n#include \"foo.h\"\n\nint  bar(void)\n{\n    return foo()*2;\n}\n"
  },
  {
    "path": "tests/build/multiple-static-const/jni/Android.mk",
    "content": "LOCAL_PATH := $(my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := test_multiple_static_const\nLOCAL_SRC_FILES := main.cpp foo.cpp\n\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/build/multiple-static-const/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/multiple-static-const/jni/foo.cpp",
    "content": "#include \"main.h\"\n\nvoid foo(void)\n{\n    return;\n}\n"
  },
  {
    "path": "tests/build/multiple-static-const/jni/main.cpp",
    "content": "#include \"main.h\"\n\nconst int    Foo::CONST_1 = 42;\nconst double Foo::CONST_2 = 3.14159265;\n\nextern void foo(void);\n\nint main(void)\n{\n\tfoo();\n\treturn 0;\n}\n\n"
  },
  {
    "path": "tests/build/multiple-static-const/jni/main.h",
    "content": "#ifndef MAIN_H\n#define MAIN_H\n\nclass Foo {\npublic:\n\tstatic const int    CONST_1;\n\tstatic const double CONST_2;\n};\n\n#endif /* MAIN_H */\n"
  },
  {
    "path": "tests/build/ndk-build-unit-tests/build.sh",
    "content": "# This is used to check that the internal unit tests of ndk-build\n# work properly. Note that these only check internal Make functions\n# within the build system, not anything that tries to build something.\ncd $(dirname \"$0\")\n$NDK/ndk-build NDK_UNIT_TESTS=1 clean\n"
  },
  {
    "path": "tests/build/ndk-build-unit-tests/jni/Android.mk",
    "content": ""
  },
  {
    "path": "tests/build/ndk-out/build.sh",
    "content": "cd $(dirname \"$0\")\nrm -rf obj output-dir\nexport NDK_OUT=output-dir\n$NDK/ndk-build \"$@\"\nif [ -d obj ] ; then\n    echo \"FAILURE: 'obj' directory should not be created by ndk-build!\"\n    exit 1\nfi\nif [ ! -d output-dir ]; then\n    echo \"FAILURE: 'output-dir' should have been created by ndk-build!\"\n    exit 1\nfi\nrm -rf output-dir\n\n\n"
  },
  {
    "path": "tests/build/ndk-out/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := ndk_out_hello\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/ndk-out/jni/main.c",
    "content": "#include <stdio.h>\nint main(void) {\n  printf(\"Hello NDK_OUT!\\n\");\n  return 0;\n}"
  },
  {
    "path": "tests/build/no-installable-modules/build.sh",
    "content": "# Check that if there are no installable modules (i.e. shared libraries\n# or executables), ndk-build will automatically build static library\n# modules.\n$NDK/ndk-build \"$@\"\nif [ \"$?\" != 0 ]; then\n  echo \"ERROR: Could not build project!\"\n  exit 1\nfi\n\n# Check that libfoo.a was built properly.\nLIBFOO_LIBS=$(find . -name \"libfoo.a\" 2>/dev/null)\nif [ -z \"$LIBFOO_LIBS\" ]; then\n  echo \"ERROR: Could not find libfoo.a anywhere:\"\n  tree .\n  exit 1\nfi\n\n# Check that libcpufeatures.a was _not_ built because it was not\n# a top-level module, but an imported one.\nCPUFEATURES_LIBS=$(find . -name \"libcpufeatures.a\" 2>/dev/null)\nif [ -n \"$CPUFEATURES_LIBS\" ]; then\n  echo \"ERROR: Should not find libcpufeatures.a in output directory:\"\n  tree .\n  exit 1\nfi\n\n"
  },
  {
    "path": "tests/build/no-installable-modules/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n# Define a single static library in this Android.mk, it should be\n# compiled\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := foo.c\ninclude $(BUILD_STATIC_LIBRARY)\n\n# Import another module, which is not used by the one declared here.\n# The build.sh will check that it is _not_ compiled.\n#\n$(call import-module,android/cpufeatures)"
  },
  {
    "path": "tests/build/no-installable-modules/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/no-installable-modules/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/pch-cpp/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := pch-cpp\nLOCAL_PCH := stdafx.h\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_CFLAGS := -Werror\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := pch-c\nLOCAL_PCH := stdafx.h\nLOCAL_SRC_FILES := foo.c\nLOCAL_CFLAGS := -Werror\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/pch-cpp/jni/foo.c",
    "content": ""
  },
  {
    "path": "tests/build/pch-cpp/jni/foo.cpp",
    "content": ""
  },
  {
    "path": "tests/build/pch-cpp/jni/stdafx.h",
    "content": ""
  },
  {
    "path": "tests/build/pch-tags/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := pch\nLOCAL_PCH := stdafx.h\nLOCAL_SRC_FILES := foo.cpp bar.cpp\nLOCAL_CFLAGS := -Werror\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := pch-arm\nLOCAL_PCH := stdafx.h\nLOCAL_SRC_FILES := foo.cpp bar.cpp.arm\nLOCAL_CFLAGS := -Werror\ninclude $(BUILD_SHARED_LIBRARY)\n\n# armeabi doesn't support neon, but we want to build the rest of the test for\n# that ABI.\nifneq ($(TARGET_ARCH_ABI),armeabi)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := pch-neon\nLOCAL_PCH := stdafx.h\nLOCAL_SRC_FILES := foo.cpp bar.cpp.neon\nLOCAL_CFLAGS := -Werror\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n"
  },
  {
    "path": "tests/build/pch-tags/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard x86 arm64-v8a x86_64\n"
  },
  {
    "path": "tests/build/pch-tags/jni/bar.cpp",
    "content": ""
  },
  {
    "path": "tests/build/pch-tags/jni/foo.cpp",
    "content": ""
  },
  {
    "path": "tests/build/pch-tags/jni/stdafx.h",
    "content": "\n"
  },
  {
    "path": "tests/build/prebuilt-copy/README",
    "content": "This build test checks that:\n\n- Prebuilt shared libraries are always copied to $NDK_OUT/<armeabi>/objs/\n- Prebuilt static libraries are never copied to $NDK_OUT/<armeabi>/objs/\n\nIt works by first building two prebuilt libraries in a sub-project, then\nusing them in the main project. See build.sh\n\nFor context, see http://code.google.com/p/android/issues/detail?id=40302\n"
  },
  {
    "path": "tests/build/prebuilt-copy/build.sh",
    "content": "#!/bin/sh\n\n# The purpose of this script is the following:\n#\n# 1/ Build the libraries under prebuilts/jni/\n#\n# 2/ Build the project under jni/\n#\n# 3/ Check that the prebuilt shared library was copied to\n#    $NDK_OUT/<abi>/objs.\n#\n# 4/ Check that the prebuilt static library was not copied to\n#    the same directory.\n#\n\nPROGDIR=$(dirname \"$0\")\n\nOUT=$PROGDIR/obj/local\nPREBUILTS_DIR=$PROGDIR/prebuilts\nPREBUILTS_DIR=$(cd \"$PREBUILTS_DIR\" && pwd)\n\nif [ -n \"$APP_ABI\" ]; then\n  ABIS=\"$APP_ABI\"\nelse\n  ABIS=\n  for OPT; do\n    case $OPT in\n      APP_ABI=*)\n        ABIS=${OPT##APP_ABI=}\n        APP_ABI=$ABIS\n        ;;\n    esac\n  done\n\n  if [ -z \"$ABIS\" ]; then\n    ABIS=\"armeabi-v7a x86 mips armeabi-v7a-hard\"\n  fi\nfi\n\n# Step 0: Remove obj/ and libs/ to ensure everything is clean\nrm -rf obj/ libs/\nrm -rf $PREBUILTS_DIR/obj/ $PREBUILTS_DIR/libs/\n\n# Step 1: Build prebuilt libraries.\nif [ -z \"$APP_ABI\" ]; then\n  $NDK/ndk-build -C \"$PREBUILTS_DIR\"\n  RET=$?\nelse\n  $NDK/ndk-build -C \"$PREBUILTS_DIR\" APP_ABI=\"$APP_ABI\"\n  RET=$?\nfi\n\nif [ $RET != 0 ]; then\n  echo \"ERROR: Can't build prebuilt libraries!\"\n  exit 1\nfi\n\n# Step 2: Build the project\nif [ -z \"$APP_ABI\" ]; then\n  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C \"$PROGDIR\"\n  RET=$?\nelse\n  PREBUILTS_DIR=$PREBUILTS_DIR $NDK/ndk-build -C \"$PROGDIR\" APP_ABI=\"$APP_ABI\"\n  RET=$?\nfi\n\nif [ $RET != 0 ]; then\n  echo \"ERROR: Can't build project!\"\n  exit 1\nfi\n\n# Step 3: Check that the prebuilt shared library was copied to the\n#         right location.\n#\n\nFAILURES=0\nfor ABI in $ABIS; do\n  printf \"Checking for $ABI shared library: \"\n  SHARED_LIB=$(ls $OUT/*$ABI/libfoo.so 2>/dev/null)\n  if [ $? != 0 ]; then\n    printf \"KO! missing file: $SHARED_LIB\\n\"\n    FAILURES=$(( $FAILURES + 1 ))\n  else\n    printf \"ok\\n\"\n  fi\n\n  printf \"Checking for $ABI static library: \"\n  STATIC_LIB=$(ls $OUT/*$ABI/libbar.a 2>/dev/null)\n  if [ $? = 0 ]; then\n    printf \"KO! file should not exist: $STATIC_LIB\\n\"\n    FAILURES=$(( $FAILURES + 1 ))\n  else\n    printf \"ok\\n\"\n  fi\ndone\n\nif [ \"$FAILURES\" = 0 ]; then\n  echo \"Everything's ok. Congratulations!\"\n  exit 0\nelse\n  echo \"Found $FAILURES failures! Please fix ndk-build!\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/prebuilt-copy/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := $(PREBUILTS_DIR)/libs/*$(TARGET_ARCH_ABI)/libfoo.so\ninclude $(PREBUILT_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar\nLOCAL_SRC_FILES := $(PREBUILTS_DIR)/obj/local/*$(TARGET_ARCH_ABI)/libbar.a\ninclude $(PREBUILT_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_prebuilts_copy\nLOCAL_SRC_FILES := main.c\nLOCAL_SHARED_LIBRARIES := libfoo\nLOCAL_STATIC_LIBRARIES := libbar\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/prebuilt-copy/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/prebuilt-copy/jni/main.c",
    "content": "extern int foo(int);\nextern int bar(int);\n\nint main(void) {\n  return foo(bar(10));\n}\n"
  },
  {
    "path": "tests/build/prebuilt-copy/prebuilts/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libbar\nLOCAL_SRC_FILES := bar.c\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/prebuilt-copy/prebuilts/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_MODULES := libfoo libbar\n"
  },
  {
    "path": "tests/build/prebuilt-copy/prebuilts/jni/bar.c",
    "content": "int bar(int x) {\n  return x * 2;\n}\n"
  },
  {
    "path": "tests/build/prebuilt-copy/prebuilts/jni/foo.c",
    "content": "int foo(int x) {\n  return x - 18;\n}\n"
  },
  {
    "path": "tests/build/project-properties/default.properties",
    "content": "# This value should be ignored because project.properties\n# exists and provides a different one.\ntarget=android-5\n"
  },
  {
    "path": "tests/build/project-properties/jni/Android.mk",
    "content": "WANTED_PLATFORM_32 := android-9\nWANTED_PLATFORM_64 := android-21\n\nifeq (,$(filter %64, $(TARGET_ARCH)))\n  ifneq ($(TARGET_PLATFORM),$(WANTED_PLATFORM_32))\n    $(error Incorrect target platform: $(TARGET_PLATFORM) (expecteding $(WANTED_PLATFORM_32)))\n  endif\n  $(call ndk_log,Test OK: Correct target platform retrieved from project.properties: $(TARGET_PLATFORM))\nelse\n  ifneq ($(TARGET_PLATFORM),$(WANTED_PLATFORM_64))\n    $(error Incorrect target platform: $(TARGET_PLATFORM) (expecteding $(WANTED_PLATFORM_64)))\n  endif\n  $(call ndk_log,Test OK: Correct target platform retrieved from project.properties but auto-adjusted: $(TARGET_PLATFORM))\nendif\n"
  },
  {
    "path": "tests/build/project-properties/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/project-properties/project.properties",
    "content": "# This is the value that should be kept by the build system\n# Instead of the one under default.properties\ntarget=android-9\n"
  },
  {
    "path": "tests/build/pthread-rwlock-initializer/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_pthread_rwlock_initializer\nLOCAL_CFLAGS := -Wall -Werror\nLOCAL_SRC_FILES := test_pthread_rwlock_initializer.c\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/pthread-rwlock-initializer/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-9"
  },
  {
    "path": "tests/build/pthread-rwlock-initializer/jni/test_pthread_rwlock_initializer.c",
    "content": "/* This test is here to check that PTHREAD_RWLOCK_INITIALIZER is correctly\n * Defined. It will fail to compile otherwise.\n *\n * It also checks that pthread_rwlock_t functions are properly exposed\n * by the C library. It will fail to link otherwise.\n */\n#include <pthread.h>\n\npthread_rwlock_t  theLock = PTHREAD_RWLOCK_INITIALIZER;\n\nvoid  build_check(void)\n{\n    pthread_rwlock_t  lock;\n    pthread_rwlock_init(&lock, NULL);\n    pthread_rwlock_rdlock(&lock);\n    pthread_rwlock_unlock(&lock);\n    pthread_rwlock_destroy(&lock);\n}"
  },
  {
    "path": "tests/build/short-commands/build.sh",
    "content": "# Special script used to check that LOCAL_SHORT_COMMANDS works\n# correctly even when using a very large number of source files\n# when building a static or shared library.\n#\n# We're going to auto-generate all the files we need in a\n# temporary directory, because that's how we roll.\n#\n\nPROGDIR=$(dirname $0)\nPROGDIR=$(cd \"$PROGDIR\" && pwd)\n\n# TODO: Increment this to 1000 for long test runs. For the simple unit test\n#        suite, keep this just over 100\n#\nCOUNT=110\n\n# Generate all our source files\nNUM=0\n\nSRCDIR=$PROGDIR/jni\nrm -rf \"$SRCDIR\" && mkdir -p \"$SRCDIR\"\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not create temporary source directory: $SRCDIR\"\n    exit 1\nfi\n\nCLEAN_FILES=\n\ngenerate_source_files ()\n{\n    # Generate all temporary source files we need\n    local NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        SRCFILE=$SRCDIR/foo$NUM.c\n    cat > $SRCFILE <<EOF\nint foo$NUM (int x)\n{\n    return x + 1;\n}\nEOF\n        NUM=$(( $NUM + 1 ))\n        CLEAN_FILES=$CLEAN_FILES\" $SRCFILE\"\n    done\n}\n\ngenerate_main_file ()\n{\n    cat > $SRCDIR/main.c <<EOF\n#include <stdio.h>\nEOF\n    NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        cat >> $SRCDIR/main.c <<EOF\nextern int foo$NUM (int);\nEOF\n        NUM=$(( $NUM + 1 ))\n    done\n    cat >> $SRCDIR/main.c <<EOF\nint main(void)\n{\n    int x = 0;\nEOF\n    NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        cat >> $SRCDIR/main.c <<EOF\n    x = foo$NUM(x);\nEOF\n        NUM=$(( $NUM + 1 ))\n    done\ncat >> $SRCDIR/main.c <<EOF\n    return 0;\n}\nEOF\n    CLEAN_FILES=$CLEAN_FILES\" $SRCDIR/main.c\"\n}\n\ngenerate_build_file ()\n{\n    local NUM\n\n    # Generate the Android.mk\n    cat > $SRCDIR/Android.mk <<EOF\n# Auto-generated - do not edit\nLOCAL_PATH := \\$(call my-dir)\nEOF\n\n    # First, build a huge static library with all the files\n    cat >> $SRCDIR/Android.mk <<EOF\ninclude \\$(CLEAR_VARS)\nLOCAL_MODULE := libfoo_big\nEOF\n\n    NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        cat >> $SRCDIR/Android.mk <<EOF\nLOCAL_SRC_FILES += foo$NUM.c\nEOF\n        NUM=$(( $NUM + 1 ))\n    done\n\n    cat >> $SRCDIR/Android.mk <<EOF\nLOCAL_SHORT_COMMANDS := true\ninclude \\$(BUILD_SHARED_LIBRARY)\nEOF\n\n    # Second, generate a large number of static libraries\n    # Then an executable that use them all\n    NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        cat >> $SRCDIR/Android.mk <<EOF\ninclude \\$(CLEAR_VARS)\nLOCAL_MODULE := foo$NUM\nLOCAL_SRC_FILES := foo$NUM.c\ninclude \\$(BUILD_STATIC_LIBRARY)\nEOF\n        NUM=$(( $NUM + 1 ))\n    done\n\n        cat >> $SRCDIR/Android.mk <<EOF\ninclude \\$(CLEAR_VARS)\nLOCAL_MODULE := test_linker_options_list\nLOCAL_SRC_FILES := main.c\nEOF\n\n    NUM=0\n    while [ $NUM -lt $COUNT ]; do\n        cat >> $SRCDIR/Android.mk <<EOF\nLOCAL_WHOLE_STATIC_LIBRARIES += foo$NUM\nEOF\n        NUM=$(( $NUM + 1 ))\n    done\n\n    cat >> $SRCDIR/Android.mk <<EOF\n#LOCAL_SHORT_COMMANDS := true\ninclude \\$(BUILD_EXECUTABLE)\nEOF\n    CLEAN_FILES=$CLEAN_FILES\" $SRCDIR/Android.mk\"\n}\n\ngenerate_source_files && \ngenerate_main_file &&\ngenerate_build_file\nif [ $? != 0 ]; then\n    echo \"ERROR: Could not generate files for this test!\"\n    exit 1\nfi\n\n# Now run the build\n$NDK/ndk-build -C \"$PROGDIR\" \"$@\"\nRET=$?\n\n# check if linker.list is empty\nALL_LINKER_LIST=`find obj -name linker.list`\nfor LINKER_LIST in $ALL_LINKER_LIST; do\n    if [ ! -s $LINKER_LIST ]; then\n        echo \"ERROR: linker list file $LINKER_LIST isn't generated!\"\n        exit 1\n    fi\ndone\n\n# Clean everything we generated\nrm -f $CLEAN_FILES\nrm -rf \"$PROGDIR/obj\" \"$PROGDIR/libs\"\nrm -rf jni\n\n# Exit\nexit $RET\n"
  },
  {
    "path": "tests/build/ssax-instructions/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := ssax_instruction\nLOCAL_ARM_NEON := true\nLOCAL_SRC_FILES := test.S\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_CFLAGS := -fno-integrated-as\nendif\ninclude $(BUILD_SHARED_LIBRARY)\nendif\n"
  },
  {
    "path": "tests/build/ssax-instructions/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/build/ssax-instructions/jni/test.S",
    "content": "// This assembler file contains instructions like ssax\n// that were not assembler properly with NDKr5b's gas version.\n//\n\n///////        unittest.s  ////////\n@ For little endian\n@.arch armv7a\n\n.align  2\narmSP_FFTFwd_CToC_SC16_Radix4_fs_OutOfPlace_unsafe:\npush    {r4, lr}\nsub     sp, sp, #32     @ 0x20\nmov     ip, #4  @ 0x4\nlsr     lr, r6, #2\nstr     ip, [sp, #4]\nstr     lr, [sp]\nstr     r5, [sp, #16]\nlsl     ip, lr, #2\nlsl     r3, lr, #3\nadd     r3, r3, ip\nrsb     r3, r3, #8      @ 0x8\nstr     r1, [sp, #20]\nldrd    r4, [r0], ip\nldrd    r6, [r0], ip\nldrd    r8, [r0], ip\nldrd    sl, [r0], r3\nstrd    r2, [sp, #8]\nsubs    lr, lr, #2      @ 0x2\nstr     lr, [sp, #24]\nsadd16  r2, r4, r8\nssub16  r1, r4, r8\nsadd16  r3, r6, sl\nssub16  lr, r6, sl\nsadd16  r4, r2, r3\nssub16  r8, r2, r3\nssax    r6, r1, lr\nsasx sl, r1, lr\nsadd16  r2, r5, r9\nssub16  r1, r5, r9\nsadd16  r3, r7, fp\nssub16  lr, r7, fp\nsadd16  r5, r2, r3\nssub16  r9, r2, r3\nldrd    r2, [sp, #8]\nssax    r7, r1, lr\nsasx    fp, r1, lr\nstrd    r4, [r2], ip\nstrd    r6, [r2], ip\nstrd    r8, [r2], ip\nstrd    sl, [r2], r3\nldr     lr, [sp, #24]\nbgt     armSP_FFTFwd_CToC_SC16_Radix4_fs_OutOfPlace_unsafe+0x30\nldrd    r6, [sp]\nldr     r1, [sp, #20]\nsub     r0, r2, ip\nldr     r2, [sp, #16]\nadd     sp, sp, #32     @ 0x20\npop     {r4, pc}\n"
  },
  {
    "path": "tests/build/ssax-instructions/test_config.py",
    "content": "def match_unsupported(abi, platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/build/standalone-toolchain/foo.cpp",
    "content": "#include <stdio.h>\n\n#include <string>\n\nvoid foo(const std::string& s) {\n  printf(\"%s\\n\", s.c_str());\n}\n"
  },
  {
    "path": "tests/build/standalone-toolchain/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/build/standalone-toolchain/test.py",
    "content": "#\n# Copyright (C) 2015, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nimport os\nimport shutil\nimport site\nimport subprocess\nimport tempfile\n\nsite.addsitedir(os.path.join(os.environ['NDK'], 'build/lib'))\n\nimport build_support  # pylint: disable=import-error\n\n\ndef make_standalone_toolchain(arch, platform, toolchain, install_dir):\n    ndk_dir = os.environ['NDK']\n    make_standalone_toolchain_path = os.path.join(\n        ndk_dir, 'build/instruments/make-standalone-toolchain.sh')\n\n    cmd = [make_standalone_toolchain_path, '--install-dir=' + install_dir]\n\n    if arch is not None:\n        cmd.append('--arch=' + arch)\n    if platform is not None:\n        cmd.append('--platform=' + platform)\n\n    if toolchain is not None:\n        toolchain_triple = build_support.arch_to_toolchain(arch)\n        name = '{}-{}'.format(toolchain_triple, toolchain)\n        cmd.append('--toolchain=' + name)\n\n    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,\n                            stderr=subprocess.STDOUT)\n    out, _ = proc.communicate()\n    return proc.returncode == 0, out\n\n\ndef test_standalone_toolchain(arch, toolchain, install_dir):\n    if toolchain == '4.9':\n        triple = build_support.arch_to_triple(arch)\n        # x86 toolchain names are dumb: http://b/25800583\n        if arch == 'x86':\n            triple = 'i686-linux-android'\n        compiler_name = triple + '-g++'\n    elif toolchain == 'clang':\n        compiler_name = 'clang++'\n    else:\n        raise ValueError\n\n    compiler = os.path.join(install_dir, 'bin', compiler_name)\n    test_source = 'foo.cpp'\n    proc = subprocess.Popen([compiler, '-shared', test_source],\n                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\n    out, _ = proc.communicate()\n    return proc.returncode == 0, out\n\n\ndef run_test(abi=None, platform=None, toolchain=None,\n             build_flags=None):  # pylint: disable=unused-argument\n    arch = 'arm'\n    if abi is not None:\n        arch = build_support.abi_to_arch(abi)\n\n    install_dir = tempfile.mkdtemp()\n    try:\n        success, out = make_standalone_toolchain(arch, platform, toolchain,\n                                                 install_dir)\n        if not success:\n            return success, out\n        return test_standalone_toolchain(arch, toolchain, install_dir)\n    finally:\n        shutil.rmtree(install_dir)\n"
  },
  {
    "path": "tests/build/standalone-toolchain/test_config.py",
    "content": "# Shut up a warning about us not being a real package.\nfrom __future__ import absolute_import\nimport platform\n\n\ndef match_unsupported(_abi, _api_level, _toolchain, _subtest=None):\n    if platform.system() == 'Windows':\n        # make-standalone-toolchain.sh isn't supported on Windows since we\n        # don't have bash. Note that platform.system() won't report \"Windows\"\n        # for cygwin, so we will run the test in that case.\n        return platform.system()\n    return None\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/Android.mk",
    "content": "# The purpose of this test is to check that the definitions in <stdint.h>\n# follow the standard with regards to limit- and constant- related macros\n# (e.g. INT8_MIN / INT8_MAX / INT8_C)\n#\n# The rules are:\n#\n# - All constants should be defined when <stdint.h> is included from a C program\n#\n# - When included from a C++ program, limit-related macros should only be \n#     defined if __STDC_LIMIT_MACROS is already defined.\n#\n# - When included from a C++ program, constant-related macros should only be\n#     defined if __STDC_CONSTANT_MACROS is already defined.\n#\n# The test checks all possible tests, with source files generated by a helper\n# script found in this directory.\n#\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stdint_c++\nLOCAL_SRC_FILES := test_c.c test_no_macros.cpp test_limit_macros.cpp test_constant_macros.cpp test_all_macros.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/stdint-c++/jni/gen-sources.sh",
    "content": "#!/bin/sh\n#\n# This script is used to generate the source files for this test.\n#\nLIMITS=\"\"\nCONSTANTS=\"\"\nfor SIZE in 8 16 32 64; do\n    for PREFIX in INT INT_LEAST INT_FAST; do\n        LIMITS=\"$LIMITS $PREFIX${SIZE}_MIN $PREFIX${SIZE}_MAX\"\n        CONSTANTS=\"$CONSTANTS $PREFIX${SIZE}_C\"\n    done\n    for PREFIX in UINT UINT_LEAST UINT_FAST; do\n        LIMITS=\"$LIMITS $PREFIX${SIZE}_MAX\"\n        CONSTANTS=\"$CONSTANTS $PREFIX${SIZE}_C\"\n    done\ndone\n\nLIMITS=\"$LIMITS INTMAX_MIN INTMAX_MAX UINTMAX_MAX\"\nCONSTANTS=\"$CONSTANTS INTMAX_C UINTMAX_C\"\n\nfor PREFIX in INTPTR PTRDIFF; do\n    LIMITS=\"$LIMITS ${PREFIX}_MIN ${PREFIX}_MAX\"\n    CONSTANTS=\"$CONSTANTS ${PREFIX}_C\"\ndone\n\nLIMITS=\"$LIMITS UINTPTR_MAX\"\nCONSTANTS=\"$CONSTANTS UINTPTR_C\"\n\nSRC=test_cpp_no_macros.cpp\n\ngen_cpp_no_macros ()\n{\n    echo \"/* AUTO-GENERATED FILE - DO NOT MODIFY! */\"\n    echo \"#include <android/api-level.h>\"\n    echo \"#if __ANDROID_API__ < 20\"\n    echo \"#include <stdint.h>\"\n    for MACRO in $LIMITS $CONSTANTS; do\n        echo \"#ifdef $MACRO\"\n        echo \"#error $MACRO defined!\"\n        echo \"#endif\"\n    done\n    echo \"#endif\"\n}\n\ngen_cpp_limit_macros ()\n{\n    echo \"/* AUTO-GENERATED FILE - DO NOT MODIFY! */\"\n    echo \"#define __STDC_LIMIT_MACROS 1\"\n    echo \"#include <android/api-level.h>\"\n    echo \"#include <stdint.h>\"\n    for MACRO in $LIMITS; do\n        echo \"#ifndef $MACRO\"\n        echo \"#error $MACRO is not defined!\"\n        echo \"#endif\"\n    done\n    echo \"#if __ANDROID_API__ < 20\"\n    for MACRO in $CONSTANTS; do\n        echo \"#ifdef $MACRO\"\n        echo \"#error $MACRO is defined!\"\n        echo \"#endif\"\n    done\n    echo \"#endif\"\n}\n\ngen_cpp_constant_macros ()\n{\n    echo \"/* AUTO-GENERATED FILE - DO NOT MODIFY! */\"\n    echo \"#define __STDC_CONSTANT_MACROS 1\"\n    echo \"#include <android/api-level.h>\"\n    echo \"#include <stdint.h>\"\n    echo \"#if __ANDROID_API__ < 20\"\n    for MACRO in $LIMITS; do\n        echo \"#ifdef $MACRO\"\n        echo \"#error $MACRO is defined!\"\n        echo \"#endif\"\n    done\n    echo \"#endif\"\n    for MACRO in $CONSTANTS; do\n        echo \"#ifndef $MACRO\"\n        echo \"#error $MACRO is not defined!\"\n        echo \"#endif\"\n    done\n}\n\ngen_cpp_all_macros ()\n{\n    echo \"/* AUTO-GENERATED FILE - DO NOT MODIFY! */\"\n    echo \"#define __STDC_LIMIT_MACROS 1\"\n    echo \"#define __STDC_CONSTANT_MACROS 1\"\n    echo \"#include <stdint.h>\"\n    for MACRO in $LIMITS $CONSTANTS; do\n        echo \"#ifndef $MACRO\"\n        echo \"#error $MACRO defined!\"\n        echo \"#endif\"\n    done\n}\n\ngen_c ()\n{\n    echo \"/* AUTO-GENERATED FILE - DO NOT MODIFY! */\"\n    echo \"#include <stdint.h>\"\n    for MACRO in $LIMITS $CONSTANTS; do\n        echo \"#ifndef $MACRO\"\n        echo \"#error $MACRO defined!\"\n        echo \"#endif\"\n    done\n}\n\ngen_c > test_c.c\ngen_cpp_no_macros > test_no_macros.cpp\ngen_cpp_limit_macros > test_limit_macros.cpp\ngen_cpp_constant_macros > test_constant_macros.cpp\ngen_cpp_all_macros > test_all_macros.cpp\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/test_all_macros.cpp",
    "content": "/* AUTO-GENERATED FILE - DO NOT MODIFY! */\n#define __STDC_LIMIT_MACROS 1\n#define __STDC_CONSTANT_MACROS 1\n#include <stdint.h>\n#ifndef INT8_MIN\n#error INT8_MIN defined!\n#endif\n#ifndef INT8_MAX\n#error INT8_MAX defined!\n#endif\n#ifndef INT_LEAST8_MIN\n#error INT_LEAST8_MIN defined!\n#endif\n#ifndef INT_LEAST8_MAX\n#error INT_LEAST8_MAX defined!\n#endif\n#ifndef INT_FAST8_MIN\n#error INT_FAST8_MIN defined!\n#endif\n#ifndef INT_FAST8_MAX\n#error INT_FAST8_MAX defined!\n#endif\n#ifndef UINT8_MAX\n#error UINT8_MAX defined!\n#endif\n#ifndef UINT_LEAST8_MAX\n#error UINT_LEAST8_MAX defined!\n#endif\n#ifndef UINT_FAST8_MAX\n#error UINT_FAST8_MAX defined!\n#endif\n#ifndef INT16_MIN\n#error INT16_MIN defined!\n#endif\n#ifndef INT16_MAX\n#error INT16_MAX defined!\n#endif\n#ifndef INT_LEAST16_MIN\n#error INT_LEAST16_MIN defined!\n#endif\n#ifndef INT_LEAST16_MAX\n#error INT_LEAST16_MAX defined!\n#endif\n#ifndef INT_FAST16_MIN\n#error INT_FAST16_MIN defined!\n#endif\n#ifndef INT_FAST16_MAX\n#error INT_FAST16_MAX defined!\n#endif\n#ifndef UINT16_MAX\n#error UINT16_MAX defined!\n#endif\n#ifndef UINT_LEAST16_MAX\n#error UINT_LEAST16_MAX defined!\n#endif\n#ifndef UINT_FAST16_MAX\n#error UINT_FAST16_MAX defined!\n#endif\n#ifndef INT32_MIN\n#error INT32_MIN defined!\n#endif\n#ifndef INT32_MAX\n#error INT32_MAX defined!\n#endif\n#ifndef INT_LEAST32_MIN\n#error INT_LEAST32_MIN defined!\n#endif\n#ifndef INT_LEAST32_MAX\n#error INT_LEAST32_MAX defined!\n#endif\n#ifndef INT_FAST32_MIN\n#error INT_FAST32_MIN defined!\n#endif\n#ifndef INT_FAST32_MAX\n#error INT_FAST32_MAX defined!\n#endif\n#ifndef UINT32_MAX\n#error UINT32_MAX defined!\n#endif\n#ifndef UINT_LEAST32_MAX\n#error UINT_LEAST32_MAX defined!\n#endif\n#ifndef UINT_FAST32_MAX\n#error UINT_FAST32_MAX defined!\n#endif\n#ifndef INT64_MIN\n#error INT64_MIN defined!\n#endif\n#ifndef INT64_MAX\n#error INT64_MAX defined!\n#endif\n#ifndef INT_LEAST64_MIN\n#error INT_LEAST64_MIN defined!\n#endif\n#ifndef INT_LEAST64_MAX\n#error INT_LEAST64_MAX defined!\n#endif\n#ifndef INT_FAST64_MIN\n#error INT_FAST64_MIN defined!\n#endif\n#ifndef INT_FAST64_MAX\n#error INT_FAST64_MAX defined!\n#endif\n#ifndef UINT64_MAX\n#error UINT64_MAX defined!\n#endif\n#ifndef UINT_LEAST64_MAX\n#error UINT_LEAST64_MAX defined!\n#endif\n#ifndef UINT_FAST64_MAX\n#error UINT_FAST64_MAX defined!\n#endif\n#ifndef INTMAX_MIN\n#error INTMAX_MIN defined!\n#endif\n#ifndef INTMAX_MAX\n#error INTMAX_MAX defined!\n#endif\n#ifndef UINTMAX_MAX\n#error UINTMAX_MAX defined!\n#endif\n#ifndef INTPTR_MIN\n#error INTPTR_MIN defined!\n#endif\n#ifndef INTPTR_MAX\n#error INTPTR_MAX defined!\n#endif\n#ifndef PTRDIFF_MIN\n#error PTRDIFF_MIN defined!\n#endif\n#ifndef PTRDIFF_MAX\n#error PTRDIFF_MAX defined!\n#endif\n#ifndef UINTPTR_MAX\n#error UINTPTR_MAX defined!\n#endif\n#ifndef INT8_C\n#error INT8_C defined!\n#endif\n#ifndef INT_LEAST8_C\n#error INT_LEAST8_C defined!\n#endif\n#ifndef INT_FAST8_C\n#error INT_FAST8_C defined!\n#endif\n#ifndef UINT8_C\n#error UINT8_C defined!\n#endif\n#ifndef UINT_LEAST8_C\n#error UINT_LEAST8_C defined!\n#endif\n#ifndef UINT_FAST8_C\n#error UINT_FAST8_C defined!\n#endif\n#ifndef INT16_C\n#error INT16_C defined!\n#endif\n#ifndef INT_LEAST16_C\n#error INT_LEAST16_C defined!\n#endif\n#ifndef INT_FAST16_C\n#error INT_FAST16_C defined!\n#endif\n#ifndef UINT16_C\n#error UINT16_C defined!\n#endif\n#ifndef UINT_LEAST16_C\n#error UINT_LEAST16_C defined!\n#endif\n#ifndef UINT_FAST16_C\n#error UINT_FAST16_C defined!\n#endif\n#ifndef INT32_C\n#error INT32_C defined!\n#endif\n#ifndef INT_LEAST32_C\n#error INT_LEAST32_C defined!\n#endif\n#ifndef INT_FAST32_C\n#error INT_FAST32_C defined!\n#endif\n#ifndef UINT32_C\n#error UINT32_C defined!\n#endif\n#ifndef UINT_LEAST32_C\n#error UINT_LEAST32_C defined!\n#endif\n#ifndef UINT_FAST32_C\n#error UINT_FAST32_C defined!\n#endif\n#ifndef INT64_C\n#error INT64_C defined!\n#endif\n#ifndef INT_LEAST64_C\n#error INT_LEAST64_C defined!\n#endif\n#ifndef INT_FAST64_C\n#error INT_FAST64_C defined!\n#endif\n#ifndef UINT64_C\n#error UINT64_C defined!\n#endif\n#ifndef UINT_LEAST64_C\n#error UINT_LEAST64_C defined!\n#endif\n#ifndef UINT_FAST64_C\n#error UINT_FAST64_C defined!\n#endif\n#ifndef INTMAX_C\n#error INTMAX_C defined!\n#endif\n#ifndef UINTMAX_C\n#error UINTMAX_C defined!\n#endif\n#ifndef INTPTR_C\n#error INTPTR_C defined!\n#endif\n#ifndef PTRDIFF_C\n#error PTRDIFF_C defined!\n#endif\n#ifndef UINTPTR_C\n#error UINTPTR_C defined!\n#endif\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/test_c.c",
    "content": "/* AUTO-GENERATED FILE - DO NOT MODIFY! */\n#include <stdint.h>\n#ifndef INT8_MIN\n#error INT8_MIN defined!\n#endif\n#ifndef INT8_MAX\n#error INT8_MAX defined!\n#endif\n#ifndef INT_LEAST8_MIN\n#error INT_LEAST8_MIN defined!\n#endif\n#ifndef INT_LEAST8_MAX\n#error INT_LEAST8_MAX defined!\n#endif\n#ifndef INT_FAST8_MIN\n#error INT_FAST8_MIN defined!\n#endif\n#ifndef INT_FAST8_MAX\n#error INT_FAST8_MAX defined!\n#endif\n#ifndef UINT8_MAX\n#error UINT8_MAX defined!\n#endif\n#ifndef UINT_LEAST8_MAX\n#error UINT_LEAST8_MAX defined!\n#endif\n#ifndef UINT_FAST8_MAX\n#error UINT_FAST8_MAX defined!\n#endif\n#ifndef INT16_MIN\n#error INT16_MIN defined!\n#endif\n#ifndef INT16_MAX\n#error INT16_MAX defined!\n#endif\n#ifndef INT_LEAST16_MIN\n#error INT_LEAST16_MIN defined!\n#endif\n#ifndef INT_LEAST16_MAX\n#error INT_LEAST16_MAX defined!\n#endif\n#ifndef INT_FAST16_MIN\n#error INT_FAST16_MIN defined!\n#endif\n#ifndef INT_FAST16_MAX\n#error INT_FAST16_MAX defined!\n#endif\n#ifndef UINT16_MAX\n#error UINT16_MAX defined!\n#endif\n#ifndef UINT_LEAST16_MAX\n#error UINT_LEAST16_MAX defined!\n#endif\n#ifndef UINT_FAST16_MAX\n#error UINT_FAST16_MAX defined!\n#endif\n#ifndef INT32_MIN\n#error INT32_MIN defined!\n#endif\n#ifndef INT32_MAX\n#error INT32_MAX defined!\n#endif\n#ifndef INT_LEAST32_MIN\n#error INT_LEAST32_MIN defined!\n#endif\n#ifndef INT_LEAST32_MAX\n#error INT_LEAST32_MAX defined!\n#endif\n#ifndef INT_FAST32_MIN\n#error INT_FAST32_MIN defined!\n#endif\n#ifndef INT_FAST32_MAX\n#error INT_FAST32_MAX defined!\n#endif\n#ifndef UINT32_MAX\n#error UINT32_MAX defined!\n#endif\n#ifndef UINT_LEAST32_MAX\n#error UINT_LEAST32_MAX defined!\n#endif\n#ifndef UINT_FAST32_MAX\n#error UINT_FAST32_MAX defined!\n#endif\n#ifndef INT64_MIN\n#error INT64_MIN defined!\n#endif\n#ifndef INT64_MAX\n#error INT64_MAX defined!\n#endif\n#ifndef INT_LEAST64_MIN\n#error INT_LEAST64_MIN defined!\n#endif\n#ifndef INT_LEAST64_MAX\n#error INT_LEAST64_MAX defined!\n#endif\n#ifndef INT_FAST64_MIN\n#error INT_FAST64_MIN defined!\n#endif\n#ifndef INT_FAST64_MAX\n#error INT_FAST64_MAX defined!\n#endif\n#ifndef UINT64_MAX\n#error UINT64_MAX defined!\n#endif\n#ifndef UINT_LEAST64_MAX\n#error UINT_LEAST64_MAX defined!\n#endif\n#ifndef UINT_FAST64_MAX\n#error UINT_FAST64_MAX defined!\n#endif\n#ifndef INTMAX_MIN\n#error INTMAX_MIN defined!\n#endif\n#ifndef INTMAX_MAX\n#error INTMAX_MAX defined!\n#endif\n#ifndef UINTMAX_MAX\n#error UINTMAX_MAX defined!\n#endif\n#ifndef INTPTR_MIN\n#error INTPTR_MIN defined!\n#endif\n#ifndef INTPTR_MAX\n#error INTPTR_MAX defined!\n#endif\n#ifndef PTRDIFF_MIN\n#error PTRDIFF_MIN defined!\n#endif\n#ifndef PTRDIFF_MAX\n#error PTRDIFF_MAX defined!\n#endif\n#ifndef UINTPTR_MAX\n#error UINTPTR_MAX defined!\n#endif\n#ifndef INT8_C\n#error INT8_C defined!\n#endif\n#ifndef INT_LEAST8_C\n#error INT_LEAST8_C defined!\n#endif\n#ifndef INT_FAST8_C\n#error INT_FAST8_C defined!\n#endif\n#ifndef UINT8_C\n#error UINT8_C defined!\n#endif\n#ifndef UINT_LEAST8_C\n#error UINT_LEAST8_C defined!\n#endif\n#ifndef UINT_FAST8_C\n#error UINT_FAST8_C defined!\n#endif\n#ifndef INT16_C\n#error INT16_C defined!\n#endif\n#ifndef INT_LEAST16_C\n#error INT_LEAST16_C defined!\n#endif\n#ifndef INT_FAST16_C\n#error INT_FAST16_C defined!\n#endif\n#ifndef UINT16_C\n#error UINT16_C defined!\n#endif\n#ifndef UINT_LEAST16_C\n#error UINT_LEAST16_C defined!\n#endif\n#ifndef UINT_FAST16_C\n#error UINT_FAST16_C defined!\n#endif\n#ifndef INT32_C\n#error INT32_C defined!\n#endif\n#ifndef INT_LEAST32_C\n#error INT_LEAST32_C defined!\n#endif\n#ifndef INT_FAST32_C\n#error INT_FAST32_C defined!\n#endif\n#ifndef UINT32_C\n#error UINT32_C defined!\n#endif\n#ifndef UINT_LEAST32_C\n#error UINT_LEAST32_C defined!\n#endif\n#ifndef UINT_FAST32_C\n#error UINT_FAST32_C defined!\n#endif\n#ifndef INT64_C\n#error INT64_C defined!\n#endif\n#ifndef INT_LEAST64_C\n#error INT_LEAST64_C defined!\n#endif\n#ifndef INT_FAST64_C\n#error INT_FAST64_C defined!\n#endif\n#ifndef UINT64_C\n#error UINT64_C defined!\n#endif\n#ifndef UINT_LEAST64_C\n#error UINT_LEAST64_C defined!\n#endif\n#ifndef UINT_FAST64_C\n#error UINT_FAST64_C defined!\n#endif\n#ifndef INTMAX_C\n#error INTMAX_C defined!\n#endif\n#ifndef UINTMAX_C\n#error UINTMAX_C defined!\n#endif\n#ifndef INTPTR_C\n#error INTPTR_C defined!\n#endif\n#ifndef PTRDIFF_C\n#error PTRDIFF_C defined!\n#endif\n#ifndef UINTPTR_C\n#error UINTPTR_C defined!\n#endif\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/test_constant_macros.cpp",
    "content": "/* AUTO-GENERATED FILE - DO NOT MODIFY! */\n#define __STDC_CONSTANT_MACROS 1\n#include <android/api-level.h>\n#include <stdint.h>\n#if __ANDROID_API__ < 20\n#ifdef INT8_MIN\n#error INT8_MIN is defined!\n#endif\n#ifdef INT8_MAX\n#error INT8_MAX is defined!\n#endif\n#ifdef INT_LEAST8_MIN\n#error INT_LEAST8_MIN is defined!\n#endif\n#ifdef INT_LEAST8_MAX\n#error INT_LEAST8_MAX is defined!\n#endif\n#ifdef INT_FAST8_MIN\n#error INT_FAST8_MIN is defined!\n#endif\n#ifdef INT_FAST8_MAX\n#error INT_FAST8_MAX is defined!\n#endif\n#ifdef UINT8_MAX\n#error UINT8_MAX is defined!\n#endif\n#ifdef UINT_LEAST8_MAX\n#error UINT_LEAST8_MAX is defined!\n#endif\n#ifdef UINT_FAST8_MAX\n#error UINT_FAST8_MAX is defined!\n#endif\n#ifdef INT16_MIN\n#error INT16_MIN is defined!\n#endif\n#ifdef INT16_MAX\n#error INT16_MAX is defined!\n#endif\n#ifdef INT_LEAST16_MIN\n#error INT_LEAST16_MIN is defined!\n#endif\n#ifdef INT_LEAST16_MAX\n#error INT_LEAST16_MAX is defined!\n#endif\n#ifdef INT_FAST16_MIN\n#error INT_FAST16_MIN is defined!\n#endif\n#ifdef INT_FAST16_MAX\n#error INT_FAST16_MAX is defined!\n#endif\n#ifdef UINT16_MAX\n#error UINT16_MAX is defined!\n#endif\n#ifdef UINT_LEAST16_MAX\n#error UINT_LEAST16_MAX is defined!\n#endif\n#ifdef UINT_FAST16_MAX\n#error UINT_FAST16_MAX is defined!\n#endif\n#ifdef INT32_MIN\n#error INT32_MIN is defined!\n#endif\n#ifdef INT32_MAX\n#error INT32_MAX is defined!\n#endif\n#ifdef INT_LEAST32_MIN\n#error INT_LEAST32_MIN is defined!\n#endif\n#ifdef INT_LEAST32_MAX\n#error INT_LEAST32_MAX is defined!\n#endif\n#ifdef INT_FAST32_MIN\n#error INT_FAST32_MIN is defined!\n#endif\n#ifdef INT_FAST32_MAX\n#error INT_FAST32_MAX is defined!\n#endif\n#ifdef UINT32_MAX\n#error UINT32_MAX is defined!\n#endif\n#ifdef UINT_LEAST32_MAX\n#error UINT_LEAST32_MAX is defined!\n#endif\n#ifdef UINT_FAST32_MAX\n#error UINT_FAST32_MAX is defined!\n#endif\n#ifdef INT64_MIN\n#error INT64_MIN is defined!\n#endif\n#ifdef INT64_MAX\n#error INT64_MAX is defined!\n#endif\n#ifdef INT_LEAST64_MIN\n#error INT_LEAST64_MIN is defined!\n#endif\n#ifdef INT_LEAST64_MAX\n#error INT_LEAST64_MAX is defined!\n#endif\n#ifdef INT_FAST64_MIN\n#error INT_FAST64_MIN is defined!\n#endif\n#ifdef INT_FAST64_MAX\n#error INT_FAST64_MAX is defined!\n#endif\n#ifdef UINT64_MAX\n#error UINT64_MAX is defined!\n#endif\n#ifdef UINT_LEAST64_MAX\n#error UINT_LEAST64_MAX is defined!\n#endif\n#ifdef UINT_FAST64_MAX\n#error UINT_FAST64_MAX is defined!\n#endif\n#ifdef INTMAX_MIN\n#error INTMAX_MIN is defined!\n#endif\n#ifdef INTMAX_MAX\n#error INTMAX_MAX is defined!\n#endif\n#ifdef UINTMAX_MAX\n#error UINTMAX_MAX is defined!\n#endif\n#ifdef INTPTR_MIN\n#error INTPTR_MIN is defined!\n#endif\n#ifdef INTPTR_MAX\n#error INTPTR_MAX is defined!\n#endif\n#ifdef PTRDIFF_MIN\n#error PTRDIFF_MIN is defined!\n#endif\n#ifdef PTRDIFF_MAX\n#error PTRDIFF_MAX is defined!\n#endif\n#ifdef UINTPTR_MAX\n#error UINTPTR_MAX is defined!\n#endif\n#endif\n#ifndef INT8_C\n#error INT8_C is not defined!\n#endif\n#ifndef INT_LEAST8_C\n#error INT_LEAST8_C is not defined!\n#endif\n#ifndef INT_FAST8_C\n#error INT_FAST8_C is not defined!\n#endif\n#ifndef UINT8_C\n#error UINT8_C is not defined!\n#endif\n#ifndef UINT_LEAST8_C\n#error UINT_LEAST8_C is not defined!\n#endif\n#ifndef UINT_FAST8_C\n#error UINT_FAST8_C is not defined!\n#endif\n#ifndef INT16_C\n#error INT16_C is not defined!\n#endif\n#ifndef INT_LEAST16_C\n#error INT_LEAST16_C is not defined!\n#endif\n#ifndef INT_FAST16_C\n#error INT_FAST16_C is not defined!\n#endif\n#ifndef UINT16_C\n#error UINT16_C is not defined!\n#endif\n#ifndef UINT_LEAST16_C\n#error UINT_LEAST16_C is not defined!\n#endif\n#ifndef UINT_FAST16_C\n#error UINT_FAST16_C is not defined!\n#endif\n#ifndef INT32_C\n#error INT32_C is not defined!\n#endif\n#ifndef INT_LEAST32_C\n#error INT_LEAST32_C is not defined!\n#endif\n#ifndef INT_FAST32_C\n#error INT_FAST32_C is not defined!\n#endif\n#ifndef UINT32_C\n#error UINT32_C is not defined!\n#endif\n#ifndef UINT_LEAST32_C\n#error UINT_LEAST32_C is not defined!\n#endif\n#ifndef UINT_FAST32_C\n#error UINT_FAST32_C is not defined!\n#endif\n#ifndef INT64_C\n#error INT64_C is not defined!\n#endif\n#ifndef INT_LEAST64_C\n#error INT_LEAST64_C is not defined!\n#endif\n#ifndef INT_FAST64_C\n#error INT_FAST64_C is not defined!\n#endif\n#ifndef UINT64_C\n#error UINT64_C is not defined!\n#endif\n#ifndef UINT_LEAST64_C\n#error UINT_LEAST64_C is not defined!\n#endif\n#ifndef UINT_FAST64_C\n#error UINT_FAST64_C is not defined!\n#endif\n#ifndef INTMAX_C\n#error INTMAX_C is not defined!\n#endif\n#ifndef UINTMAX_C\n#error UINTMAX_C is not defined!\n#endif\n#ifndef INTPTR_C\n#error INTPTR_C is not defined!\n#endif\n#ifndef PTRDIFF_C\n#error PTRDIFF_C is not defined!\n#endif\n#ifndef UINTPTR_C\n#error UINTPTR_C is not defined!\n#endif\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/test_limit_macros.cpp",
    "content": "/* AUTO-GENERATED FILE - DO NOT MODIFY! */\n#define __STDC_LIMIT_MACROS 1\n#include <android/api-level.h>\n#include <stdint.h>\n#ifndef INT8_MIN\n#error INT8_MIN is not defined!\n#endif\n#ifndef INT8_MAX\n#error INT8_MAX is not defined!\n#endif\n#ifndef INT_LEAST8_MIN\n#error INT_LEAST8_MIN is not defined!\n#endif\n#ifndef INT_LEAST8_MAX\n#error INT_LEAST8_MAX is not defined!\n#endif\n#ifndef INT_FAST8_MIN\n#error INT_FAST8_MIN is not defined!\n#endif\n#ifndef INT_FAST8_MAX\n#error INT_FAST8_MAX is not defined!\n#endif\n#ifndef UINT8_MAX\n#error UINT8_MAX is not defined!\n#endif\n#ifndef UINT_LEAST8_MAX\n#error UINT_LEAST8_MAX is not defined!\n#endif\n#ifndef UINT_FAST8_MAX\n#error UINT_FAST8_MAX is not defined!\n#endif\n#ifndef INT16_MIN\n#error INT16_MIN is not defined!\n#endif\n#ifndef INT16_MAX\n#error INT16_MAX is not defined!\n#endif\n#ifndef INT_LEAST16_MIN\n#error INT_LEAST16_MIN is not defined!\n#endif\n#ifndef INT_LEAST16_MAX\n#error INT_LEAST16_MAX is not defined!\n#endif\n#ifndef INT_FAST16_MIN\n#error INT_FAST16_MIN is not defined!\n#endif\n#ifndef INT_FAST16_MAX\n#error INT_FAST16_MAX is not defined!\n#endif\n#ifndef UINT16_MAX\n#error UINT16_MAX is not defined!\n#endif\n#ifndef UINT_LEAST16_MAX\n#error UINT_LEAST16_MAX is not defined!\n#endif\n#ifndef UINT_FAST16_MAX\n#error UINT_FAST16_MAX is not defined!\n#endif\n#ifndef INT32_MIN\n#error INT32_MIN is not defined!\n#endif\n#ifndef INT32_MAX\n#error INT32_MAX is not defined!\n#endif\n#ifndef INT_LEAST32_MIN\n#error INT_LEAST32_MIN is not defined!\n#endif\n#ifndef INT_LEAST32_MAX\n#error INT_LEAST32_MAX is not defined!\n#endif\n#ifndef INT_FAST32_MIN\n#error INT_FAST32_MIN is not defined!\n#endif\n#ifndef INT_FAST32_MAX\n#error INT_FAST32_MAX is not defined!\n#endif\n#ifndef UINT32_MAX\n#error UINT32_MAX is not defined!\n#endif\n#ifndef UINT_LEAST32_MAX\n#error UINT_LEAST32_MAX is not defined!\n#endif\n#ifndef UINT_FAST32_MAX\n#error UINT_FAST32_MAX is not defined!\n#endif\n#ifndef INT64_MIN\n#error INT64_MIN is not defined!\n#endif\n#ifndef INT64_MAX\n#error INT64_MAX is not defined!\n#endif\n#ifndef INT_LEAST64_MIN\n#error INT_LEAST64_MIN is not defined!\n#endif\n#ifndef INT_LEAST64_MAX\n#error INT_LEAST64_MAX is not defined!\n#endif\n#ifndef INT_FAST64_MIN\n#error INT_FAST64_MIN is not defined!\n#endif\n#ifndef INT_FAST64_MAX\n#error INT_FAST64_MAX is not defined!\n#endif\n#ifndef UINT64_MAX\n#error UINT64_MAX is not defined!\n#endif\n#ifndef UINT_LEAST64_MAX\n#error UINT_LEAST64_MAX is not defined!\n#endif\n#ifndef UINT_FAST64_MAX\n#error UINT_FAST64_MAX is not defined!\n#endif\n#ifndef INTMAX_MIN\n#error INTMAX_MIN is not defined!\n#endif\n#ifndef INTMAX_MAX\n#error INTMAX_MAX is not defined!\n#endif\n#ifndef UINTMAX_MAX\n#error UINTMAX_MAX is not defined!\n#endif\n#ifndef INTPTR_MIN\n#error INTPTR_MIN is not defined!\n#endif\n#ifndef INTPTR_MAX\n#error INTPTR_MAX is not defined!\n#endif\n#ifndef PTRDIFF_MIN\n#error PTRDIFF_MIN is not defined!\n#endif\n#ifndef PTRDIFF_MAX\n#error PTRDIFF_MAX is not defined!\n#endif\n#ifndef UINTPTR_MAX\n#error UINTPTR_MAX is not defined!\n#endif\n#if __ANDROID_API__ < 20\n#ifdef INT8_C\n#error INT8_C is defined!\n#endif\n#ifdef INT_LEAST8_C\n#error INT_LEAST8_C is defined!\n#endif\n#ifdef INT_FAST8_C\n#error INT_FAST8_C is defined!\n#endif\n#ifdef UINT8_C\n#error UINT8_C is defined!\n#endif\n#ifdef UINT_LEAST8_C\n#error UINT_LEAST8_C is defined!\n#endif\n#ifdef UINT_FAST8_C\n#error UINT_FAST8_C is defined!\n#endif\n#ifdef INT16_C\n#error INT16_C is defined!\n#endif\n#ifdef INT_LEAST16_C\n#error INT_LEAST16_C is defined!\n#endif\n#ifdef INT_FAST16_C\n#error INT_FAST16_C is defined!\n#endif\n#ifdef UINT16_C\n#error UINT16_C is defined!\n#endif\n#ifdef UINT_LEAST16_C\n#error UINT_LEAST16_C is defined!\n#endif\n#ifdef UINT_FAST16_C\n#error UINT_FAST16_C is defined!\n#endif\n#ifdef INT32_C\n#error INT32_C is defined!\n#endif\n#ifdef INT_LEAST32_C\n#error INT_LEAST32_C is defined!\n#endif\n#ifdef INT_FAST32_C\n#error INT_FAST32_C is defined!\n#endif\n#ifdef UINT32_C\n#error UINT32_C is defined!\n#endif\n#ifdef UINT_LEAST32_C\n#error UINT_LEAST32_C is defined!\n#endif\n#ifdef UINT_FAST32_C\n#error UINT_FAST32_C is defined!\n#endif\n#ifdef INT64_C\n#error INT64_C is defined!\n#endif\n#ifdef INT_LEAST64_C\n#error INT_LEAST64_C is defined!\n#endif\n#ifdef INT_FAST64_C\n#error INT_FAST64_C is defined!\n#endif\n#ifdef UINT64_C\n#error UINT64_C is defined!\n#endif\n#ifdef UINT_LEAST64_C\n#error UINT_LEAST64_C is defined!\n#endif\n#ifdef UINT_FAST64_C\n#error UINT_FAST64_C is defined!\n#endif\n#ifdef INTMAX_C\n#error INTMAX_C is defined!\n#endif\n#ifdef UINTMAX_C\n#error UINTMAX_C is defined!\n#endif\n#ifdef INTPTR_C\n#error INTPTR_C is defined!\n#endif\n#ifdef PTRDIFF_C\n#error PTRDIFF_C is defined!\n#endif\n#ifdef UINTPTR_C\n#error UINTPTR_C is defined!\n#endif\n#endif\n"
  },
  {
    "path": "tests/build/stdint-c++/jni/test_no_macros.cpp",
    "content": "/* AUTO-GENERATED FILE - DO NOT MODIFY! */\n#include <android/api-level.h>\n#if __ANDROID_API__ < 20\n#include <stdint.h>\n#ifdef INT8_MIN\n#error INT8_MIN defined!\n#endif\n#ifdef INT8_MAX\n#error INT8_MAX defined!\n#endif\n#ifdef INT_LEAST8_MIN\n#error INT_LEAST8_MIN defined!\n#endif\n#ifdef INT_LEAST8_MAX\n#error INT_LEAST8_MAX defined!\n#endif\n#ifdef INT_FAST8_MIN\n#error INT_FAST8_MIN defined!\n#endif\n#ifdef INT_FAST8_MAX\n#error INT_FAST8_MAX defined!\n#endif\n#ifdef UINT8_MAX\n#error UINT8_MAX defined!\n#endif\n#ifdef UINT_LEAST8_MAX\n#error UINT_LEAST8_MAX defined!\n#endif\n#ifdef UINT_FAST8_MAX\n#error UINT_FAST8_MAX defined!\n#endif\n#ifdef INT16_MIN\n#error INT16_MIN defined!\n#endif\n#ifdef INT16_MAX\n#error INT16_MAX defined!\n#endif\n#ifdef INT_LEAST16_MIN\n#error INT_LEAST16_MIN defined!\n#endif\n#ifdef INT_LEAST16_MAX\n#error INT_LEAST16_MAX defined!\n#endif\n#ifdef INT_FAST16_MIN\n#error INT_FAST16_MIN defined!\n#endif\n#ifdef INT_FAST16_MAX\n#error INT_FAST16_MAX defined!\n#endif\n#ifdef UINT16_MAX\n#error UINT16_MAX defined!\n#endif\n#ifdef UINT_LEAST16_MAX\n#error UINT_LEAST16_MAX defined!\n#endif\n#ifdef UINT_FAST16_MAX\n#error UINT_FAST16_MAX defined!\n#endif\n#ifdef INT32_MIN\n#error INT32_MIN defined!\n#endif\n#ifdef INT32_MAX\n#error INT32_MAX defined!\n#endif\n#ifdef INT_LEAST32_MIN\n#error INT_LEAST32_MIN defined!\n#endif\n#ifdef INT_LEAST32_MAX\n#error INT_LEAST32_MAX defined!\n#endif\n#ifdef INT_FAST32_MIN\n#error INT_FAST32_MIN defined!\n#endif\n#ifdef INT_FAST32_MAX\n#error INT_FAST32_MAX defined!\n#endif\n#ifdef UINT32_MAX\n#error UINT32_MAX defined!\n#endif\n#ifdef UINT_LEAST32_MAX\n#error UINT_LEAST32_MAX defined!\n#endif\n#ifdef UINT_FAST32_MAX\n#error UINT_FAST32_MAX defined!\n#endif\n#ifdef INT64_MIN\n#error INT64_MIN defined!\n#endif\n#ifdef INT64_MAX\n#error INT64_MAX defined!\n#endif\n#ifdef INT_LEAST64_MIN\n#error INT_LEAST64_MIN defined!\n#endif\n#ifdef INT_LEAST64_MAX\n#error INT_LEAST64_MAX defined!\n#endif\n#ifdef INT_FAST64_MIN\n#error INT_FAST64_MIN defined!\n#endif\n#ifdef INT_FAST64_MAX\n#error INT_FAST64_MAX defined!\n#endif\n#ifdef UINT64_MAX\n#error UINT64_MAX defined!\n#endif\n#ifdef UINT_LEAST64_MAX\n#error UINT_LEAST64_MAX defined!\n#endif\n#ifdef UINT_FAST64_MAX\n#error UINT_FAST64_MAX defined!\n#endif\n#ifdef INTMAX_MIN\n#error INTMAX_MIN defined!\n#endif\n#ifdef INTMAX_MAX\n#error INTMAX_MAX defined!\n#endif\n#ifdef UINTMAX_MAX\n#error UINTMAX_MAX defined!\n#endif\n#ifdef INTPTR_MIN\n#error INTPTR_MIN defined!\n#endif\n#ifdef INTPTR_MAX\n#error INTPTR_MAX defined!\n#endif\n#ifdef PTRDIFF_MIN\n#error PTRDIFF_MIN defined!\n#endif\n#ifdef PTRDIFF_MAX\n#error PTRDIFF_MAX defined!\n#endif\n#ifdef UINTPTR_MAX\n#error UINTPTR_MAX defined!\n#endif\n#ifdef INT8_C\n#error INT8_C defined!\n#endif\n#ifdef INT_LEAST8_C\n#error INT_LEAST8_C defined!\n#endif\n#ifdef INT_FAST8_C\n#error INT_FAST8_C defined!\n#endif\n#ifdef UINT8_C\n#error UINT8_C defined!\n#endif\n#ifdef UINT_LEAST8_C\n#error UINT_LEAST8_C defined!\n#endif\n#ifdef UINT_FAST8_C\n#error UINT_FAST8_C defined!\n#endif\n#ifdef INT16_C\n#error INT16_C defined!\n#endif\n#ifdef INT_LEAST16_C\n#error INT_LEAST16_C defined!\n#endif\n#ifdef INT_FAST16_C\n#error INT_FAST16_C defined!\n#endif\n#ifdef UINT16_C\n#error UINT16_C defined!\n#endif\n#ifdef UINT_LEAST16_C\n#error UINT_LEAST16_C defined!\n#endif\n#ifdef UINT_FAST16_C\n#error UINT_FAST16_C defined!\n#endif\n#ifdef INT32_C\n#error INT32_C defined!\n#endif\n#ifdef INT_LEAST32_C\n#error INT_LEAST32_C defined!\n#endif\n#ifdef INT_FAST32_C\n#error INT_FAST32_C defined!\n#endif\n#ifdef UINT32_C\n#error UINT32_C defined!\n#endif\n#ifdef UINT_LEAST32_C\n#error UINT_LEAST32_C defined!\n#endif\n#ifdef UINT_FAST32_C\n#error UINT_FAST32_C defined!\n#endif\n#ifdef INT64_C\n#error INT64_C defined!\n#endif\n#ifdef INT_LEAST64_C\n#error INT_LEAST64_C defined!\n#endif\n#ifdef INT_FAST64_C\n#error INT_FAST64_C defined!\n#endif\n#ifdef UINT64_C\n#error UINT64_C defined!\n#endif\n#ifdef UINT_LEAST64_C\n#error UINT_LEAST64_C defined!\n#endif\n#ifdef UINT_FAST64_C\n#error UINT_FAST64_C defined!\n#endif\n#ifdef INTMAX_C\n#error INTMAX_C defined!\n#endif\n#ifdef UINTMAX_C\n#error UINTMAX_C defined!\n#endif\n#ifdef INTPTR_C\n#error INTPTR_C defined!\n#endif\n#ifdef PTRDIFF_C\n#error PTRDIFF_C defined!\n#endif\n#ifdef UINTPTR_C\n#error UINTPTR_C defined!\n#endif\n#endif\n"
  },
  {
    "path": "tests/build/system-cpp-headers/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_system_cpp_headers\nLOCAL_SRC_FILES := main.cpp\nLOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/system/include\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/system-cpp-headers/jni/Application.mk",
    "content": "APP_STL := none\nAPP_PLATFORM := android-3\n"
  },
  {
    "path": "tests/build/system-cpp-headers/jni/main.cpp",
    "content": "// Check that including <cstdlib> doesn't result in a build error\n// with API level 3.\n#include <cassert>\n#include <cctype>\n#include <cerrno>\n#include <climits>\n#include <cmath>\n#include <csetjmp>\n#include <csignal>\n#include <cstddef>\n#include <cstdint>\n#include <cstdio>\n#include <cstdlib>\n#include <cstring>\n#include <ctime>\n#include <cwchar>\n#include <new>\n#include <new>\n#include <stl_pair.h>\n#include <typeinfo>\n#include <utility>\n\nint main(void) {\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/target-c-includes/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := check_target_c_includes\nLOCAL_SRC_FILES := check.c\nLOCAL_C_INCLUDES := $(LOCAL_PATH)/include\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/target-c-includes/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/target-c-includes/jni/check.c",
    "content": "/* The purpose of this test is to check that the target sysroot directory\n * appears _after_ the ones in LOCAL_C_INCLUDES, this allows us to\n * override certain headers.\n *\n * See http://code.google.com/p/android/issues/detail?id=18540\n */\n#include <stdio.h>\n\n/* This header should come from our $(LOCAL_PATH)/include directory */\n#include <math.h>\n\n#ifndef CUSTOM_MATH_H_WAS_INCLUDED\n#error THERE IS SOMETHING WRONG HERE !!\n#endif\n\nint foo(void)\n{\n    return 42;\n}\n"
  },
  {
    "path": "tests/build/target-c-includes/jni/include/math.h",
    "content": "/* This is intentionally *not* a real <math.h> */\n\n#define CUSTOM_MATH_H_WAS_INCLUDED 1\n"
  },
  {
    "path": "tests/build/test-c-only-flags/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test-c-only-flags\nLOCAL_SRC_FILES := test-c-only-flags.cpp\nLOCAL_CFLAGS += -Werror\n\n# LOCAL_CFLAGS is passed for C++ compilation as well.  This is by design\n# to save developers from the trouble of specifying flags twice for both\n# LOCAL_CFLAGS and LOCAL_CPPFLAGS.  Unfortunately for flags like -std=gnu99\n# is harmful to g++ (warning) and clang++ (error)\nLOCAL_CONLYFLAGS += -std=gnu99\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/test-c-only-flags/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/test-c-only-flags/jni/test-c-only-flags.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <cstdlib>\n\nint main()\n{\n}\n"
  },
  {
    "path": "tests/build/test-gnustl-chrono/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_stl_chrono\nLOCAL_SRC_FILES := main.cpp hanoi.c\nLOCAL_CPPFLAGS := -std=c++0x\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/test-gnustl-chrono/jni/Application.mk",
    "content": "APP_STL := gnustl_static\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/test-gnustl-chrono/jni/hanoi.c",
    "content": "#include \"hanoi.h\"\n\nvoid hanoi(int from, int to, int mid, int n, void (*callback)(int, int)) {\n  if (n == 1) {\n    callback(from, to);\n  } else {\n    hanoi(from, mid, to, n - 1, callback);\n    callback(from, to);\n    hanoi(mid, to, from, n - 1, callback);\n  }\n}\n"
  },
  {
    "path": "tests/build/test-gnustl-chrono/jni/hanoi.h",
    "content": "#ifndef HANOI_H\n#define HANOI_H\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern void hanoi(int from, int to, int mid, int n,\n                  void (*callback)(int, int));\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /* HANOI_H */\n"
  },
  {
    "path": "tests/build/test-gnustl-chrono/jni/main.cpp",
    "content": "#include <chrono>\n#include <cstdio>\n\n#include \"hanoi.h\"\n\nusing namespace std;\nusing namespace std::chrono;\n\nvoid hanoi_callback(int from, int to) {\n}\n\nint main()\n{\n  high_resolution_clock::time_point start = high_resolution_clock::now();\n  hanoi(0, 2, 1, 25, &hanoi_callback);\n  high_resolution_clock::time_point end = high_resolution_clock::now();\n\n  printf(\"Duration: %lld ns\\n\",\n    static_cast<long long>(duration_cast<nanoseconds>(end - start).count()));\n\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/test-inet-defs/README",
    "content": "This test is there to check that certain declarations are correctly provided\nby <inet/in.h> and <inet/in6.h>. These are mainly required to build the Boost\nlibrary for Android.\n"
  },
  {
    "path": "tests/build/test-inet-defs/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_inet_defs\nLOCAL_SRC_FILES := test-in.c test-in6.c\ninclude $(BUILD_SHARED_LIBRARY)\n"
  },
  {
    "path": "tests/build/test-inet-defs/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/build/test-inet-defs/jni/test-in.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <netinet/in.h>\n#ifndef INET_ADDRSTRLEN\n#error INET_ADDRSTRLEN is not defined by <inet/in.h>\n#endif\n\nchar dummy_in;\n"
  },
  {
    "path": "tests/build/test-inet-defs/jni/test-in6.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <netinet/in6.h>\n#ifndef IN6_IS_ADDR_MC_NODELOCAL\n#error IN6_IS_ADDR_MC_NODELOCAL is not defined by <inet/in6.h>\n#endif\n#ifndef IN6_IS_ADDR_MC_GLOBAL\n#error IN6_IS_ADDR_MC_GLOBAL is not defined by <inet/in6.h>\n#endif\n#ifndef IN6ADDR_ANY_INIT\n#error IN6ADDR_ANY_INIT is not defined by <inet/in6.h>\n#endif\n#ifndef IN6_IS_ADDR_MULTICAST\n#error IN6_IS_ADDR_MULTICAST is not defined by <inet/in6.h>\n#endif\nchar dummy_in6;\n"
  },
  {
    "path": "tests/build/thin-archives/build.sh",
    "content": "#!/bin/sh\n\n$NDK/ndk-build \"$@\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Could not build test program!\"\n  exit 1\nfi\n\n# Return the type of a given file as returned by /usr/bin/file\n# $1: file path\nget_file_type () {\n    /usr/bin/file -b \"$1\" 2>/dev/null\n}\n\n# Returns success iff a given file is a thin archive.\n# $1: file type as returned by get_file_type()\nis_file_type_thin_archive () {\n  # The output of /usr/bin/file will depend on the OS:\n  # regular Linux -> 'current ar archive'\n  # regular Darwin -> 'current ar archive random library'\n  # thin Linux -> 'data'\n  # thin Darwin -> 'data'\n  case \"$1\" in\n    *\"ar archive\"*)\n      return 1\n      ;;\n    *\"thin archive\"*)\n      return 0\n      ;;\n    \"data\")\n      return 0\n      ;;\n    *)\n      echo \"ERROR: Unknown '$FILE_TYPE' file type\" >&2\n      return 2\n      ;;\n  esac\n}\n\n# Check that libfoo.a is a thin archive\nLIBFOO_LIST=$(find obj/local -name \"libfoo.a\")\nEXIT_CODE=0\nfor LIB in $LIBFOO_LIST; do\n  LIB_TYPE=$(get_file_type \"$LIB\")\n  if is_file_type_thin_archive \"$LIB_TYPE\"; then\n    echo \"OK: $LIB is a thin archive ('$LIB_TYPE').\"\n  else\n    echo \"ERROR: $LIB is not a thin archive: '$LIB_TYPE'\"\n    EXIT_CODE=1\n  fi\ndone\n\n# Check that libbar.a is not a thin archive\nLIBBAR_LIST=$(find obj/local -name \"libbar.a\")\nfor LIB in $LIBBAR_LIST; do\n  LIB_TYPE=$(get_file_type \"$LIB\")\n  if is_file_type_thin_archive \"$LIB_TYPE\"; then\n    echo \"ERROR: $LIB is not a regular archive: '$LIB_TYPE'\"\n    EXIT_CODE=1\n  else\n    echo \"OK: $LIB is a regular archive: '$LIB_TYPE'\"\n  fi\ndone\n\nexit $EXIT_CODE\n"
  },
  {
    "path": "tests/build/thin-archives/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := foo.c\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := bar\nLOCAL_THIN_ARCHIVE := false\nLOCAL_SRC_FILES := bar.c\nLOCAL_STATIC_LIBRARIES := foo\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_thin_archive\nLOCAL_SRC_FILES := main.c\nLOCAL_STATIC_LIBRARIES := bar\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/thin-archives/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_THIN_ARCHIVE := true\n"
  },
  {
    "path": "tests/build/thin-archives/jni/bar.c",
    "content": "extern int foo(void);\n\nint bar(void) {\n    return foo();\n}\n"
  },
  {
    "path": "tests/build/thin-archives/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/thin-archives/jni/main.c",
    "content": "extern int bar(void);\n\nint main(void) {\n  return (bar() == 42) ? 0 : 1;\n}\n"
  },
  {
    "path": "tests/build/topological-sort/jni/Android.mk",
    "content": "# Used to check that ndk-build does a proper topological sort of\n# module dependencies.\n#\n# Here's how this works:\n#\n#   1/ First, define a static library module named 'foo' with two source\n#      files (foo.c and foo2.c), which implement two functions\n#      (foo and foo2 respectively).\n#\n#   2/ Second, define another static library named 'bar' that depends on\n#      module 'foo' but only uses the 'foo2' function from it.\n#\n#   3/ Third, define an executable that depends on both 'foo' and 'bar',\n#      but only calls the 'foo' and 'bar' function (i.e. not foo2).\n#      Order is important, i.e. it should have a line that says:\n#\n#       LOCAL_STATIC_LIBRARIES := foo bar\n#\n#      With NDK r8b and earlier, the final link command for the executable\n#      will be like:\n#\n#        <linker> -o <executable> main.o libfoo.a libbar.a\n#\n#      Due to the way the linker works, this will fail. More specifically,\n#      when trying to add bar.o to the final image, it will not be able to\n#      find an object file that contains foo2(), because the search starts\n#      _after_ libbar.a on the command-line.\n#\n#  With a NDK that implements correct topological dependency ordering,\n#  the link line should be instead:\n#\n#        <linker> -o <executable> main.o libbar.a libfoo.a\n#\n#  Which will link, and work, correctly.\n#\n\nLOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := \\\n    foo.c \\\n    foo2.c\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := bar\nLOCAL_SRC_FILES := bar.c\nLOCAL_STATIC_LIBRARIES := foo\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_topological_sort\nLOCAL_SRC_FILES := main.c\n# IMPORTANT: foo must appear before bar here.\nLOCAL_STATIC_LIBRARIES := foo bar\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/topological-sort/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/topological-sort/jni/bar.c",
    "content": "#include \"bar.h\"\n\n#include \"foo.h\"\n\nint bar(int x) {\n  return foo2(x) * 3;\n}\n"
  },
  {
    "path": "tests/build/topological-sort/jni/bar.h",
    "content": "#ifndef BAR_H\n#define BAR_H\n\nextern int bar(int x);\n\n#endif  /* BAR_H */\n"
  },
  {
    "path": "tests/build/topological-sort/jni/foo.c",
    "content": "#include \"foo.h\"\n\nint foo(int x) {\n  return x + 42;\n}\n"
  },
  {
    "path": "tests/build/topological-sort/jni/foo.h",
    "content": "#ifndef FOO_H\n#define FOO_H\n\nextern int foo(int x);\nextern int foo2(int x);\n\n#endif  /* FOO_H */\n"
  },
  {
    "path": "tests/build/topological-sort/jni/foo2.c",
    "content": "#include \"foo.h\"\n\nint foo2(int x) {\n  return x - 42;\n}\n"
  },
  {
    "path": "tests/build/topological-sort/jni/main.c",
    "content": "#include <stdio.h>\n\n#include \"foo.h\"\n#include \"bar.h\"\n\nint main() {\n  int x = 10;\n  printf(\"foo(%d) = %d\\n\", x, foo(x));\n  printf(\"bar(%d) = %d\\n\", x, bar(x));\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/ucontext/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := ucontext\nLOCAL_SRC_FILES := ucontext.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/ucontext/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/build/ucontext/jni/ucontext.c",
    "content": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <signal.h>\n\nint main()\n{\n    struct ucontext u;\n}\n"
  },
  {
    "path": "tests/build/warn-bad-modules/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\n# Note: the build can fail because it is ill-specific, so don't panic\n#       and just look for the expected warning.\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING: No modules to build.*your APP_MODULES definition is probably incorrect!\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find warning about missing project modules:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-bad-modules/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := foo.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/warn-bad-modules/jni/Application.mk",
    "content": "APP_ABI := all\n\n# Android.mk only defines the 'foo' module.\n# Itentionally ask for the non-existing 'bar' module to be built.\nAPP_MODULES := bar\n"
  },
  {
    "path": "tests/build/warn-bad-modules/jni/foo.cpp",
    "content": "int foo() {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/warn-no-ldflags-in-static-libraries/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\nif [ $? != 0 ]; then\n    echo \"ERROR: Can't build test library!\"\n    printf \"%s\\n\" \"$BUILD_OUTPUT\"\n    exit 1\nfi\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING:.*LOCAL_LDFLAGS is always ignored for static libraries\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find LOCAL_LDFLAGS warning in static library build output:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-no-ldflags-in-static-libraries/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\n\n# LOCAL_LDFLAGS are always ignored for static libraries.\n# This should generate a warning when ndk-build is run!\nLOCAL_LDFLAGS := -llog\n\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/warn-no-ldflags-in-static-libraries/jni/Application.mk",
    "content": "APP_MODULES := libfoo\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/warn-no-ldflags-in-static-libraries/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/warn-no-ldlibs-in-static-libraries/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\nif [ $? != 0 ]; then\n    echo \"ERROR: Can't build test library!\"\n    printf \"%s\\n\" \"$BUILD_OUTPUT\"\n    exit 1\nfi\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING:.*LOCAL_LDLIBS is always ignored for static libraries\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find LOCAL_LDLIBS warning in static library build output:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-no-ldlibs-in-static-libraries/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\n\n# LOCAL_LDLIBS are always ignored for static libraries.\n# This should generate a warning when ndk-build is run!\nLOCAL_LDLIBS := -llog\n\ninclude $(BUILD_STATIC_LIBRARY)\n"
  },
  {
    "path": "tests/build/warn-no-ldlibs-in-static-libraries/jni/Application.mk",
    "content": "APP_MODULES := libfoo\nAPP_ABI := all\n"
  },
  {
    "path": "tests/build/warn-no-ldlibs-in-static-libraries/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/warn-no-modules/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\n# Note: the build can fail because it is ill-specific, so don't panic\n#       and just look for the expected warning.\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING: There are no modules to build in this project\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find warning about missing project modules:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-no-modules/jni/Android.mk",
    "content": "# This file is intentionally empty!\n"
  },
  {
    "path": "tests/build/warn-non-system-libs-in-linker-flags/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\n# Note: the build can fail because it is ill-specific, so don't panic\n#       and just look for the expected warning.\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING:.*non-system libraries in linker flags: -lfoo\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find warning about non-system libraries in linker flags:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-non-system-libs-in-linker-flags/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := main\nLOCAL_SRC_FILES := main.c\n# Use linker flags to list libfoo.so at link time.\n# ndk-build should warn about this.\nLOCAL_LDLIBS := -lz -L$(NDK_APP_OUT)/local/$(TARGET_ARCH_ABI) -lfoo\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/build/warn-non-system-libs-in-linker-flags/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/build/warn-non-system-libs-in-linker-flags/jni/main.c",
    "content": "#include <stdio.h>\n\nextern int foo(void);\n\nint main(void) {\n  printf(\"foo=%d\\n\", foo());\n  return 0;\n}\n"
  },
  {
    "path": "tests/build/warn-thin-archive-is-for-static-libraries/build.sh",
    "content": "#!/bin/sh\n\ncd `dirname $0`\nBUILD_OUTPUT=$($NDK/ndk-build \"$@\" 2>&1)\n# Note: the build can fail because it is ill-specific, so don't panic\n#       and just look for the expected warning.\nprintf \"%s\\n\" \"$BUILD_OUTPUT\" | grep -q -e \"WARNING:.*: LOCAL_THIN_ARCHIVE is for building static libraries\"\nif [ $? != 0 ]; then\n  echo \"ERROR: Can't find warning about LOCAL_THIN_ARCHIVE in output:\"\n  printf \"%s\\n\" \"$BUILD_OUTPUT\"\n  exit 1\nfi\n"
  },
  {
    "path": "tests/build/warn-thin-archive-is-for-static-libraries/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.c\nLOCAL_THIN_ARCHIVE := true\ninclude $(BUILD_SHARED_LIBRARY)\n\n"
  },
  {
    "path": "tests/build/warn-thin-archive-is-for-static-libraries/jni/foo.c",
    "content": "int foo(void) {\n  return 42;\n}\n"
  },
  {
    "path": "tests/device/asan-smoke/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := asan_smoke\nLOCAL_CPP_EXTENSION := .cc\nLOCAL_SRC_FILES := asan_oob_test.cc\nLOCAL_ARM_MODE := arm\nLOCAL_CFLAGS := -fsanitize=address -fno-omit-frame-pointer\nLOCAL_LDFLAGS := -fsanitize=address\nLOCAL_STATIC_LIBRARIES := googletest_main\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,third_party/googletest)\n"
  },
  {
    "path": "tests/device/asan-smoke/jni/Application.mk",
    "content": "APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\n"
  },
  {
    "path": "tests/device/asan-smoke/jni/asan_oob_test.cc",
    "content": "//===-- asan_oob_test.cc --------------------------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is distributed under the University of Illinois Open Source\n// License. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n//\n// This file is a part of AddressSanitizer, an address sanity checker.\n//\n//===----------------------------------------------------------------------===//\n#include <stdio.h>\n\n#include <gtest/gtest.h>\n\n#define NOINLINE __attribute__((noinline))\n\ntypedef uint8_t   U1;\ntypedef uint16_t  U2;\ntypedef uint32_t  U4;\ntypedef uint64_t  U8;\n\nconst size_t kLargeMalloc = 1 << 24;\n\n// Make the compiler thinks that something is going on there.\ninline void break_optimization(void *arg) {\n#if !defined(_WIN32) || defined(__clang__)\n  __asm__ __volatile__(\"\" : : \"r\" (arg) : \"memory\");\n#endif\n}\n\nNOINLINE void *malloc_fff(size_t size) {\n  void *res = malloc/**/(size); break_optimization(0); return res;}\nNOINLINE void *malloc_eee(size_t size) {\n  void *res = malloc_fff(size); break_optimization(0); return res;}\nNOINLINE void *malloc_ddd(size_t size) {\n  void *res = malloc_eee(size); break_optimization(0); return res;}\nNOINLINE void *malloc_ccc(size_t size) {\n  void *res = malloc_ddd(size); break_optimization(0); return res;}\nNOINLINE void *malloc_bbb(size_t size) {\n  void *res = malloc_ccc(size); break_optimization(0); return res;}\nNOINLINE void *malloc_aaa(size_t size) {\n  void *res = malloc_bbb(size); break_optimization(0); return res;}\n\nNOINLINE void free_ccc(void *p) { free(p); break_optimization(0);}\nNOINLINE void free_bbb(void *p) { free_ccc(p); break_optimization(0);}\nNOINLINE void free_aaa(void *p) { free_bbb(p); break_optimization(0);}\n\ntemplate<typename T>\nNOINLINE void asan_write(T *a) {\n  *a = 0;\n}\n\ntemplate<typename T>\nNOINLINE void oob_test(int size, int off) {\n  char *p = (char*)malloc_aaa(size);\n  // fprintf(stderr, \"writing %d byte(s) into [%p,%p) with offset %d\\n\",\n  //        sizeof(T), p, p + size, off);\n  asan_write((T*)(p + off));\n  free_aaa(p);\n}\n\ntemplate<typename T>\nvoid OOBTest() {\n  char expected_str[100];\n  for (int size = sizeof(T); size < 20; size += 5) {\n    for (int i = -5; i < 0; i++) {\n      const char *str =\n          \"is located.*%d byte.*to the left\";\n      sprintf(expected_str, str, abs(i));\n      EXPECT_DEATH(oob_test<T>(size, i), expected_str);\n    }\n\n    for (int i = 0; i < (int)(size - sizeof(T) + 1); i++)\n      oob_test<T>(size, i);\n\n    for (int i = size - sizeof(T) + 1; i <= (int)(size + 2 * sizeof(T)); i++) {\n      const char *str =\n          \"is located.*%d byte.*to the right\";\n      int off = i >= size ? (i - size) : 0;\n      // we don't catch unaligned partially OOB accesses.\n      if (i % sizeof(T)) continue;\n      sprintf(expected_str, str, off);\n      EXPECT_DEATH(oob_test<T>(size, i), expected_str);\n    }\n  }\n\n  EXPECT_DEATH(oob_test<T>(kLargeMalloc, -1),\n          \"is located.*1 byte.*to the left\");\n  EXPECT_DEATH(oob_test<T>(kLargeMalloc, kLargeMalloc),\n          \"is located.*0 byte.*to the right\");\n}\n\nTEST(AddressSanitizer, OOB_char) {\n  OOBTest<U1>();\n}\n\nTEST(AddressSanitizer, OOB_int) {\n  OOBTest<U4>();\n}\n"
  },
  {
    "path": "tests/device/asan-smoke/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/device/asan-smoke/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'x86':\n        return abi, 'http://b/25981507'\n    return None, None\n\n\ndef match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if not toolchain.startswith('clang'):\n        return toolchain\n    if not abi.startswith('armeabi') and not abi == 'x86':\n        return abi\n    if device_platform < 19:\n        return device_platform\n    return None\n"
  },
  {
    "path": "tests/device/b16355626-bad-atof-strtod/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := b16355626-bad-atof-strtod\nLOCAL_SRC_FILES := b16355626-bad-atof-strtod.cpp\nLOCAL_CFLAGS += -std=c++11\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/b16355626-bad-atof-strtod/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_static\n"
  },
  {
    "path": "tests/device/b16355626-bad-atof-strtod/jni/b16355626-bad-atof-strtod.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\nint main()\n{\n   char buf[128];\n   int error_count = 0;\n   float f = atof(\"90.099998474121094\");\n   printf(\"%f\\n\", f);\n   sprintf(buf, \"%08x\", *(unsigned*)&f);\n   error_count += strcasecmp(\"42b43333\", buf);\n   \n   f = atof(\"3.14\");\n   printf(\"%f\\n\", f);\n   sprintf(buf, \"%08x\", *(unsigned*)&f);\n   error_count += strcasecmp(\"4048f5c3\", buf);\n\n   return error_count;\n}\n"
  },
  {
    "path": "tests/device/b16355858/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_SRC_FILES := sample.c sample_lib.c\nLOCAL_MODULE := sample\nLOCAL_ARM_MODE := arm\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/b16355858/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/b16355858/jni/sample.c",
    "content": "#include <stdio.h>\n\ntypedef unsigned (*VP8LPredictorFunc)(unsigned left, const unsigned* const top);\nextern const VP8LPredictorFunc kPredictorsC[];\n\nint main(void) {\n  const unsigned top[2] = {0xff7a7a7a, 0xff7a7a7a};\n  const unsigned left = 0xff7b7b7b;\n  const unsigned pred = kPredictorsC[0](left, top + 1);\n  fprintf(stderr, \"top[-1]: %8x top[0]: %8x left: %8x pred: %8x\\n\",\n          top[0], top[1], left, pred);\n  if (pred == left)\n    return 0;\n  fprintf(stderr, \"pred != left\\n\");\n  return 1;\n}\n"
  },
  {
    "path": "tests/device/b16355858/jni/sample_lib.c",
    "content": "#include <stdlib.h>\n\nstatic /*__attribute__ ((noinline))*/ int Sub3(int a, int b, int c) {\n  const int pb = b - c;\n  const int pa = a - c;\n  return abs(pb) - abs(pa);\n}\n\nstatic unsigned Select(unsigned a, unsigned b, unsigned c) {\n  const int pa_minus_pb =\n      Sub3((a >> 24) & 0xff, (b >> 24) & 0xff, (c >> 24) & 0xff) +\n      Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +\n      Sub3((a >>  8) & 0xff, (b >>  8) & 0xff, (c >>  8) & 0xff) +\n      Sub3((a >>  0) & 0xff, (b >>  0) & 0xff, (c >>  0) & 0xff);\n  return (pa_minus_pb <= 0) ? a : b;\n}\n\nstatic unsigned Predictor11(unsigned left, const unsigned* const top) {\n  const unsigned pred = Select(top[0], left, top[-1]);\n  return pred;\n}\n\ntypedef unsigned (*VP8LPredictorFunc)(unsigned left, const unsigned* const top);\n\nconst VP8LPredictorFunc kPredictorsC[] = {\n  Predictor11,\n};\n"
  },
  {
    "path": "tests/device/b8708181-Vector4/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := Vector4\nLOCAL_SRC_FILES := Vector4.cpp\nifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)\n    LOCAL_CFLAGS += -DHAVE_NEON=1 -march=armv7-a -mfpu=neon -ftree-vectorize -ffast-math -mfloat-abi=softfp\nendif\nifneq ($(filter $(TARGET_ARCH_ABI),x86),)\n# x86 ABI was recently changed to gen SSSE3 by default. Disable it in order\n# for this test to run on emulator-x86 w/o KVM/HAXM\n    LOCAL_CFLAGS += -mno-ssse3 -msse3\nendif\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/b8708181-Vector4/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a x86 mips armeabi-v7a-hard arm64-v8a x86_64 mips64\n"
  },
  {
    "path": "tests/device/b8708181-Vector4/jni/Vector4.cpp",
    "content": "#include <stdio.h>\n\n#if defined(__clang__) && defined(__aarch64__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ <= 4))\n/* Disable test for clang3.4/aarch64 because it cause the following error:\n   ..../lib/clang/3.4/include/arm_neon.h:65:24: error: 'neon_vector_type' attribute is not\n   supported for this target\n */\nint main()\n{\n    return 0;\n}\n\n#else\n\n#if defined(__arm__) || defined(__aarch64__)\n#include <arm_neon.h>\n#define SP  \"sp\"\n#elif defined(__i386__) || defined(__x86_64__)\n#include <xmmintrin.h>\n#define SP  \"esp\"\ntypedef __m128 float32x4_t;\n#elif defined(__mips__)  // mipsel64- defines __mips__ too\n#define SP  \"sp\"\ntypedef float float32x4_t __attribute__ ((__vector_size__ (16)));\n#else\n#error unknown arch for type float32x4_t\n#endif\n\nclass Vector4\n{\n  public:\n    inline Vector4(float a, float b, float c, float d);\n    inline Vector4() {}\n    inline float32x4_t Set(float a, float b, float c, float d);\n  private:\n    float32x4_t m_floatVector;\n} __attribute__((aligned(16)));\n\ninline Vector4::Vector4(float a, float b, float c, float d)\n{\n    m_floatVector = Set(a, b, c, d);\n}\n\ninline float32x4_t Vector4::Set(float a, float b, float c, float d)\n{\n    float32x4_t value = { a, b, c, d };\n    return value;\n}\n\n#if 1\nVector4 initVector4(float a, float b, float c, float d)\n{\n    return Vector4(a, b, c, d);\n}\n#else\nvoid initVector4(Vector4 *v, float a, float b, float c, float d)\n{\n    v->Set(a, b, c, d);\n}\n#endif\n\nfloat f;\nVector4 v;\n\nint main()\n{\n    register void *sp __asm(SP);\n    printf(\"sp = %p\\n\", sp);\n#if 1\n    v = initVector4(f, f, f, f);\n#else\n    Vector4 v4;\n    initVector4(&v4, f, f, f, f);\n    v = v4;\n#endif\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/b8708181-Vector4/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'armeabi':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/bitfield/jni/Android.mk",
    "content": "# Copyright 2013 The Android Open Source Project\n\nLOCAL_PATH:= $(call my-dir)\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := bitfield\n\nLOCAL_SRC_FILES:= \\\n    main.c \\\n    func.c\n\nLOCAL_CFLAGS += -O1\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/bitfield/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/bitfield/jni/func.c",
    "content": "#include <stdio.h>\n#include \"header.h\"\n\nvoid foo(union u *ptr, int flag)\n{\n    union u local;\n    local.i = ptr->i;\n\n    printf(\"Calling printf to trash r0..r3\\n\");\n    /*\n     * Clang 3.1 generates the following instructions to store flag into\n     * local.s.x. Because str is paired with ldrh, the high half-word in r0 is\n     * uninitialized and the corresponding positions in local.s.i will be\n     * clobbered.\n     *\n     * 1a:   f8bd 0004       ldrh.w  r0, [sp, #4]\n     * 1e:   f005 0101       and.w   r1, r5, #1\n     * 22:   f020 0001       bic.w   r0, r0, #1\n     * 26:   4308            orrs    r0, r1\n     * 28:   9001            str     r0, [sp, #4]\n     */\n    local.s.x = flag;\n    ptr->i = local.i;\n}\n"
  },
  {
    "path": "tests/device/bitfield/jni/header.h",
    "content": "struct s {\n    unsigned int x:1;\n    unsigned int unused:15;\n    unsigned short y;\n};\n\nunion u {\n    struct s s;\n    volatile int i;\n};\n\nvoid foo(union u *ptr, int flag);\n"
  },
  {
    "path": "tests/device/bitfield/jni/main.c",
    "content": "#include <stdio.h>\n#include \"header.h\"\n\nint main()\n{\n    union u u;\n\n    u.i = 0xfedcba98;\n    printf(\"u.i = %08x\\n\", u.i);\n    foo(&u, 1);\n    printf(\"u.i = %08x (expecting fedcba99)\\n\", u.i);\n\n    return (u.i == 0xfedcba99)? 0 : 1;\n}\n"
  },
  {
    "path": "tests/device/clone/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := clone\nLOCAL_SRC_FILES := clone.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := clone-static\nLOCAL_SRC_FILES := clone.c\nLOCAL_LDFLAGS += -static -Wl,--eh-frame-hdr\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/clone/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/device/clone/jni/clone.c",
    "content": "#include <stdio.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <linux/sched.h>\n#include <stdlib.h>\n\nint v, fd;\n\nint child_proc()\n{\n    v = 42;\n    close(fd);\n    exit(0);\n}\n\n#define STACK_SIZE 1024\n\nint main(int argc, char *argv[])\n{\n    void **child_stack;\n    char ch;\n\n    v = 9;\n    fd = open(argv[0], O_RDONLY);\n    if (read(fd, &ch, 1) < 1) {\n        printf(\"Can't read file\");\n        exit(1);\n    }\n    child_stack = (void **) malloc(STACK_SIZE * sizeof(void *));\n    printf(\"v = %d\\n\", v);\n\n    clone(child_proc, child_stack + STACK_SIZE, CLONE_VM|CLONE_FILES, NULL);\n    sleep(1);\n\n    printf(\"v = %d\\n\", v);\n    if (read(fd, &ch, 1) < 1) {\n        printf(\"Can't read file because it's closed by child.\\n\");\n        return 0;\n    } else {\n        printf(\"We shouldn't be able to read from file which is closed by child.\\n\");\n        return 0;\n    }\n}\n\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -Wall -Wextra -Werror\nCFLAGS   += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1003-pw_gecos/jni/main.c",
    "content": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <pwd.h>\n#include <unistd.h>\n#include <sys/types.h>\n#include <string.h>\n#include <errno.h>\n\nstatic int ccounter = 0;\n\nstatic const char *SHELL = NULL;\n\nvoid check(struct passwd *p, const char *u)\n{\n    ++ccounter;\n\n    printf(\"=== Check %p...\\n\", p);\n\n    assert(p != NULL);\n\n    assert(p->pw_uid == getuid());\n    printf(\"%d: pw_uid: %d\\n\", ccounter, (int)p->pw_uid);\n\n    assert(p->pw_gid == getgid());\n    printf(\"%d: pw_gid: %d\\n\", ccounter, (int)p->pw_gid);\n\n    assert(p->pw_name != NULL);\n    printf(\"%d: pw_name: '%s'\\n\", ccounter, p->pw_name);\n    if (u) {\n        assert(strcmp(p->pw_name, u) == 0);\n    }\n    else {\n        assert(strcmp(p->pw_name, \"\") != 0);\n    }\n\n    if (p->pw_passwd)\n        printf(\"%d: pw_passwd: HIDDEN (%zu bytes long)\\n\", ccounter, strlen(p->pw_passwd));\n\n    assert(p->pw_gecos != NULL);\n    printf(\"%d: pw_gecos: '%s'\\n\", ccounter, p->pw_gecos);\n\n    assert(p->pw_dir != NULL);\n    printf(\"%d: pw_dir: '%s'\\n\", ccounter, p->pw_dir);\n\n    assert(p->pw_shell != NULL);\n    printf(\"%d: pw_shell: '%s'\\n\", ccounter, p->pw_shell);\n    assert(strcmp(p->pw_shell, SHELL) == 0);\n}\n\nint main()\n{\n    struct passwd *p;\n    struct passwd pwd;\n    char *buf;\n    size_t buflen;\n    int rc;\n    char *username = NULL;\n\n#if __ANDROID__\n    SHELL = \"/system/bin/sh\";\n#else\n    SHELL = getenv(\"SHELL\");\n#endif\n\n    p = getpwuid(-1);\n    assert(p == NULL);\n\n    p = getpwuid(getuid());\n    check(p, NULL);\n\n    username = strdup(p->pw_name);\n\n    buflen = sysconf(_SC_GETPW_R_SIZE_MAX);\n    buf = malloc(buflen);\n\n    rc = getpwuid_r(-1, &pwd, buf, buflen, &p);\n    assert(rc == 0);\n    assert(p == NULL);\n\n    rc = getpwuid_r(getuid(), &pwd, buf, buflen, &p);\n    assert(rc == 0);\n    check(p, username);\n\n    p = getpwnam(\"b275601f14244dc6bc44eec6507f4f96\");\n    assert(p == NULL);\n\n    p = getpwnam(username);\n    check(p, username);\n\n    rc = getpwnam_r(\"b275601f14244dc6bc44eec6507f4f96\", &pwd, buf, buflen, &p);\n    assert(rc == 0);\n    assert(p == NULL);\n\n    rc = getpwnam_r(username, &pwd, buf, buflen, &p);\n    assert(rc == 0);\n    check(p, username);\n\n#if __ANDROID__\n    p = getpwent();\n    check(p, username);\n\n    p = getpwent();\n    assert(p == NULL);\n\n    setpwent();\n    p = getpwent();\n    check(p, username);\n\n    p = getpwent();\n    assert(p == NULL);\n#endif\n\n    printf(\"OK\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1046-dlopen-unknown-reloc-type-160/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := testlib\nLOCAL_SRC_FILES := test.cpp\nLOCAL_CPPFLAGS  := -std=c++11 -O0\nLOCAL_LDLIBS    := -latomic\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1046-dlopen-unknown-reloc-type-160/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/crystax-issue1046-dlopen-unknown-reloc-type-160/jni/main.c",
    "content": "#include <dlfcn.h>\n#include <stdio.h>\n\n#define LIBNAME \"libtestlib.so\"\n\nint main()\n{\n    void *pc = dlopen(LIBNAME, RTLD_NOW);\n    if (!pc)\n    {\n        fprintf(stderr, \"ERROR: Can't load %s: %s\\n\", LIBNAME, dlerror());\n        return 1;\n    }\n\n    printf(\"OK\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1046-dlopen-unknown-reloc-type-160/jni/test.cpp",
    "content": "#include <atomic>\n\n#define N 3\nstruct S {\n    int a[N];\n};\n\nextern \"C\"\nvoid qq() {\n    std::atomic<S> s;\n    s.exchange(S());\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1046-dlopen-unknown-reloc-type-160/properties.json",
    "content": "{\"broken-toolchain-version\": [\"gcc4.9\", \"gcc5\", \"gcc6\"]}\n"
  },
  {
    "path": "tests/device/crystax-issue1163-dladdr/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo1696311d025b40ef9b7e50f339ae857d\nLOCAL_SRC_FILES := foo.c\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test\nLOCAL_SRC_FILES := main.c\nLOCAL_CFLAGS := -UNDEBUG\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1163-dladdr/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1163-dladdr/jni/foo.c",
    "content": "#if __gnu_linux__\n#define _GNU_SOURCE\n#endif\n\n#include <dlfcn.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"foo.h\"\n\nint test_dladdr()\n{\n    void *p;\n    int (*f)();\n    Dl_info info;\n\n    p = dlopen(NULL, RTLD_NOW);\n    assert(p != NULL);\n\n    f = (int (*)())dlsym(p, \"test_dladdr_from_exe\");\n    assert(f != NULL);\n\n    memset(&info, 0, sizeof(info));\n    assert(dladdr(f, &info) != 0);\n    assert(info.dli_fname != NULL);\n    assert(info.dli_fbase != NULL);\n    assert(info.dli_sname != NULL);\n    assert(info.dli_saddr != NULL);\n\n    assert(f() == MAGIC_NUMBER_FROM_EXE);\n\n    dlclose(p);\n\n    return MAGIC_NUMBER_FROM_SO;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1163-dladdr/jni/foo.h",
    "content": "#ifndef FOO_H_8d72b0b670554fcd9f45542d25d8537f\n#define FOO_H_8d72b0b670554fcd9f45542d25d8537f\n\n#define MAGIC_NUMBER_FROM_SO  127512580\n#define MAGIC_NUMBER_FROM_EXE 917670907\n\n#endif /* FOO_H_8d72b0b670554fcd9f45542d25d8537f */\n"
  },
  {
    "path": "tests/device/crystax-issue1163-dladdr/jni/main.c",
    "content": "#if __gnu_linux__\n#define _GNU_SOURCE\n#endif\n\n#include <dlfcn.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"foo.h\"\n\nint test_dladdr_from_exe()\n{\n    return MAGIC_NUMBER_FROM_EXE;\n}\n\nint main()\n{\n    void *p;\n    int (*f)();\n    Dl_info info;\n\n    p = dlopen(\"libfoo1696311d025b40ef9b7e50f339ae857d.so\", RTLD_NOW);\n    assert(p != NULL);\n\n    f = (int (*)())dlsym(p, \"test_dladdr\");\n    assert(f != NULL);\n\n    memset(&info, 0, sizeof(info));\n    assert(dladdr(f, &info) != 0);\n    assert(info.dli_fname != NULL);\n    assert(info.dli_fbase != NULL);\n    assert(info.dli_sname != NULL);\n    assert(info.dli_saddr != NULL);\n\n    assert(f() == MAGIC_NUMBER_FROM_SO);\n\n    dlclose(p);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\nLOCAL_PATH_SAVED := $(LOCAL_PATH)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test\nLOCAL_SRC_FILES := test.cpp\nLOCAL_SHARED_LIBRARIES := libShared\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libShared\nLOCAL_SRC_FILES := lib-shared.cpp\nLOCAL_STATIC_LIBRARIES := libStatic\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libStatic\nLOCAL_SRC_FILES := lib-static.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/Application.mk",
    "content": "APP_ABI := all\n\nAPP_STL := gnustl_shared\nAPP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti\n\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/lib-shared.cpp",
    "content": "\n#include \"lib-static.hpp\"\n\nnamespace libShared {\n\nint&\ngetValue()\n{\n  return libStatic::getValue();\n}\n\n} // namespace libShared\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/lib-shared.hpp",
    "content": "\nnamespace libShared {\n\nint&\ngetValue();\n\n} // namespace libShared\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/lib-static.cpp",
    "content": "\n#include \"lib-static.hpp\"\n\nnamespace libStatic {\n\nint&\ngetValue()\n{\n  static int value = 1;\n  return value;\n}\n\n} // namespace libStatic\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/lib-static.hpp",
    "content": "\nnamespace libStatic {\n\nint&\ngetValue();\n\n} // namespace libStatic\n"
  },
  {
    "path": "tests/device/crystax-issue1188-wrong-static-library-link/jni/test.cpp",
    "content": "#include \"lib-static.hpp\"\n#include \"lib-shared.hpp\"\n\n#include <iostream>\n\nint main()\n{\n    libShared::getValue() = 100;\n    libStatic::getValue() = 200;\n\n    int v1 = libShared::getValue();\n    int v2 = libStatic::getValue();\n    std::cout << \"shared: \" << v1 << \"\\n\"\n        << \"static: \" << v2 << std::endl;\n\n    if (v1 != v2) {\n        std::cerr << \"*** ERROR: \" << v1 << \" != \" << v2 << \"\\n\";\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/common.mk",
    "content": "SRCFILES := main.c\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-posix_memalign\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1194-posix_memalign/jni/main.c",
    "content": "#include <assert.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <stdio.h>\n#include <string.h>\n\nint main()\n{\n    int rc;\n    void *ptr = NULL;\n\n    rc = posix_memalign(&ptr, 0, 0);\n    assert(rc == EINVAL);\n\n    rc = posix_memalign(&ptr, 1, 0);\n    assert(rc == EINVAL);\n\n    rc = posix_memalign(&ptr, 1, 4);\n    assert(rc == EINVAL);\n\n    rc = posix_memalign(&ptr, 5*sizeof(void*), 4);\n    assert(rc == EINVAL);\n\n    rc = posix_memalign(&ptr, sizeof(void*), 4);\n    assert(rc == 0);\n    assert(ptr != NULL);\n    free(ptr);\n\n    rc = posix_memalign(&ptr, 2*sizeof(void*), 4);\n    assert(rc == 0);\n    assert(ptr != NULL);\n    free(ptr);\n\n    rc = posix_memalign(&ptr, 1024*sizeof(void*), 4);\n    assert(rc == 0);\n    assert(ptr != NULL);\n    free(ptr);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1252-swab/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test\nLOCAL_SRC_FILES  := main.c\nLOCAL_CFLAGS     := -Wall -Wextra -Werror\nLOCAL_CFLAGS     += -UNDEBUG\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1252-swab/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1252-swab/jni/main.c",
    "content": "#include <assert.h>\n#include <unistd.h>\n#include <stdint.h>\n\nint main()\n{\n    uint8_t src[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};\n    uint8_t dst[sizeof(src)/sizeof(src[0])];\n\n    swab(NULL, NULL, -1);\n\n    memset(dst, 0, sizeof(dst));\n    swab(src, dst, -1);\n    assert(dst[0] == 0);\n\n    memset(dst, 0, sizeof(dst));\n    swab(src, dst, 0);\n    assert(dst[0] == 0);\n\n    memset(dst, 0, sizeof(dst));\n    swab(src, dst, 2);\n    assert(dst[0] == 0x02);\n    assert(dst[1] == 0x01);\n    assert(dst[2] == 0);\n\n    memset(dst, 0, sizeof(dst));\n    swab(src, dst, 5);\n    assert(dst[0] == 0x02);\n    assert(dst[1] == 0x01);\n    assert(dst[2] == 0x04);\n    assert(dst[3] == 0x03);\n    assert(dst[4] == 0);\n    assert(dst[5] == 0);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1360-boost_locale_issetugid/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issetugidtest\nLOCAL_STATIC_LIBRARIES := boost_system_static boost_locale_static\nLOCAL_CPPFLAGS += -std=c++14 -fexceptions -Os\nLOCAL_SRC_FILES := issetugidtest.cpp\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,boost/1.64.0)\n"
  },
  {
    "path": "tests/device/crystax-issue1360-boost_locale_issetugid/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1360-boost_locale_issetugid/jni/issetugidtest.cpp",
    "content": "#include <boost/locale.hpp>\n#include <string>\n#include <iostream>\n\nint main()\n{\n    using boost::locale::conv::to_utf;\n    using namespace std;\n    auto data = vector<uint8_t>{ 0xCA, 0xC1, 0xCB, 0xCF, 0xC3, 0xC5, 0xD1, 0xCF, 0xD0, 0xCF, 0xD5, 0xCB, 0xCF, 0xD3, 0x00 };\n    auto out_t = u8\"ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ\";\n    string text;\n    copy(begin(data), end(data), back_inserter(text));\n    auto encoding = string(\"ISO-8859-7\");\n    try\n    {\n        auto ret = to_utf<char>(text, encoding);\n        assert(out_t == ret);\n    }\n    catch (std::exception &)\n    {\n        // Ignore\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/common.mk",
    "content": "SRCFILES := test.c\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -DNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-lrintf\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1369-lrintf/jni/test.c",
    "content": "#include <math.h>\n#include <stdio.h>\n\nint main()\n{\n    long v = lrintf(23.45f);\n    printf(\"v=%ld\\n\", v);\n    printf(\"ok\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1398-esdb/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := esdb-test\nLOCAL_STATIC_LIBRARIES := boost_system_static boost_locale_static\nLOCAL_CPPFLAGS += -std=c++14 -fexceptions -Os\nLOCAL_SRC_FILES := test.cpp\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,boost/1.60.0)\n"
  },
  {
    "path": "tests/device/crystax-issue1398-esdb/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1398-esdb/jni/test.cpp",
    "content": "#include <boost/locale.hpp>\n#include <string>\n#include <iostream>\n\nint main()\n{\n    using boost::locale::conv::to_utf;\n    using namespace std;\n    auto data = vector<uint8_t>{ 0xCA, 0xC1, 0xCB, 0xCF, 0xC3, 0xC5, 0xD1, 0xCF, 0xD0, 0xCF, 0xD5, 0xCB, 0xCF, 0xD3, 0x00 };\n    auto out_t = u8\"ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ\";\n    string text;\n    copy(begin(data), end(data), back_inserter(text));\n    auto encoding = string(\"ISO-8859-7\");\n    auto ret = to_utf<char>(text, encoding);\n    assert(out_t == ret);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1398-esdb/properties.json",
    "content": "{\"broken\": \"true\"}\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -Wall -Wextra -Werror\nCFLAGS   += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1399-gmtime-return-NULL-tm_zone/jni/main.c",
    "content": "#include <assert.h>\n#include <time.h>\n#include <stdio.h>\n\nint main()\n{\n    time_t when;\n    struct tm *local;\n\n    when = time(NULL);\n    local = gmtime(&when);\n    assert(local != NULL);\n\n    const char* tm_zone = local->tm_zone;\n    assert(tm_zone != NULL);\n\n    printf(\"date: %d.%d.%d, time: %d:%d:%d, zone: %s\\n\",\n        local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,\n        local->tm_hour, local->tm_min, local->tm_sec,\n        tm_zone);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue1436-gethostname/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := main.c\nLOCAL_CFLAGS    := -Wall -Wextra -Werror\nLOCAL_CFLAGS    += -UNDEBUG\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue1436-gethostname/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue1436-gethostname/jni/main.c",
    "content": "#include <assert.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <errno.h>\n#include <string.h>\n#include <ctype.h>\n\nint main()\n{\n    char hostname[4096];\n    int rc;\n    FILE *fp;\n    char nethostname[4096];\n    char *s;\n\n    rc = gethostname(hostname, sizeof(hostname));\n    assert(rc == 0);\n    printf(\"hostname:    %s\\n\", hostname);\n    assert(strcmp(hostname, \"localhost\") != 0);\n\n    fp = popen(\"getprop net.hostname\", \"r\");\n    assert(fp != NULL);\n    assert(fgets(nethostname, sizeof(nethostname), fp) != NULL);\n    /* Get rid of control characters since getprop put \\r to the end of string */\n    for (s = nethostname; *s != '\\0'; ++s) {\n        if (iscntrl(*s))\n            *s = '\\0';\n    }\n    fclose(fp);\n\n    printf(\"nethostname: %s\\n\", nethostname);\n    assert(strcmp(hostname, nethostname) == 0);\n\n    printf(\"OK\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/common.mk",
    "content": "SRCFILES := main.m\n\nCFLAGS := -Wall -Werror\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/host/GNUmakefile",
    "content": "include ../common.mk\n\nis-gcc-on-os-x-pre-10-9 := $(strip $(and \\\n    $(shell $(CC) --version | grep -iq gcc && echo yes),\\\n    $(shell uname -s | grep -iq darwin && echo yes),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\n\nis-linux := $(shell uname -s | grep -iq linux && echo yes)\n\nifneq (,$(is-gcc-on-os-x-pre-10-9))\n\n.PHONY: test\ntest:\n\t@echo \"Skipped for GCC on OS X < 10.9\"\n\nelse\nifneq (,$(is-linux))\n\n.PHONY: test\ntest:\n\t@echo \"Skipped for Linux\"\n\nelse\n\nCFLAGS += $(strip \\\n    $(if \\\n        $(shell $(CC) --version | grep -iq gcc && echo yes),\\\n        -Wno-unused-parameter\\\n    )\\\n)\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n\nendif\nendif\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-objc-issue-350\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_CFLAGS     := $(CFLAGS)\nLOCAL_CFLAGS     += -Wno-unused-parameter\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/jni/main.m",
    "content": "#define UNUSED(x) (void)x\n\n#import <Foundation/Foundation.h>\n\ntypedef NSObject BaseObject;\ntypedef NSZone Zone;\n\n@interface Bar : BaseObject\n{\n    int _intProperty;\n}\n\n@property int intProperty;\n\n- (id)init;\n- (void)test;\n- (id)copyWithZone: (Zone *) zone;\n\n@end\n\n\n@implementation Bar\n\n@synthesize intProperty = _intProperty;\n\n- (id)init\n{\n    if (self) {\n        self.intProperty = 0;\n    }\n\n    return self;\n}\n\n- (void)test\n{\n    self.intProperty = 10;\n}\n\n- (id)copyWithZone: (Zone *) zone\n{\n    UNUSED(zone);\n    Bar *bar = [[Bar alloc] init];\n    bar.intProperty = self.intProperty;\n\n    return bar;\n}\n\n@end\n\n\n@interface Foo : BaseObject\n{\n    BOOL boolProperty;\n    Bar *barProperty;\n    id stringProperty;\n}\n\n@property BOOL boolProperty;\n@property (copy) Bar *barProperty;\n@property (retain) id stringProperty;\n\n- (id)init;\n- (void)test;\n\n@end\n\n\n@implementation Foo\n\n@synthesize boolProperty;\n@synthesize barProperty;\n@synthesize stringProperty;\n\n- (id)init\n{\n    if (self) {\n        self.boolProperty = NO;\n        self.barProperty = nil;\n        self.stringProperty = @\"\";\n    }\n\n    return self;\n}\n\n- (void)test\n{\n    self.boolProperty = YES;\n    self.barProperty = [[Bar alloc] init];\n    self.stringProperty = @\"String\";\n}\n\n@end\n\nint main()\n{\n    Foo *f = [[Foo alloc] init];\n    [f test];\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue350-copy-with-zone/properties.json",
    "content": "{\"broken-toolchain-type\": \"gcc\"}\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/common.mk",
    "content": "SRCFILES := \\\n\tmain.c  \\\n\nCFLAGS := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := clock_nanosleep\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/jni/main.c",
    "content": "#include <time.h>\n#include <errno.h>\n#include <string.h>\n#include <stdio.h>\n#include <stdint.h>\n#include <inttypes.h>\n\nint main()\n{\n    struct timespec ts1, ts2;\n    int rc;\n    int64_t diff;\n\n    if (clock_gettime(CLOCK_REALTIME, &ts1) != 0) {\n        printf(\"clock_gettime() failed: %s\\n\", strerror(errno));\n        return 1;\n    }\n\n    ts1.tv_sec = 2;\n\n    rc = clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts1, NULL);\n    if (rc != 0) {\n        printf(\"clock_nanosleep() failed: %s\\n\", strerror(rc));\n        return 1;\n    }\n\n    if (clock_gettime(CLOCK_REALTIME, &ts2) != 0) {\n        printf(\"clock_gettime() failed: %s\\n\", strerror(errno));\n        return 1;\n    }\n\n    diff = (((int64_t)ts2.tv_sec)*1000000000LL + ts2.tv_nsec) - (((int64_t)ts1.tv_sec)*1000000000LL + ts1.tv_nsec);\n    if (diff < 0) {\n        printf(\"clock_nanosleep() sleep slept negative time: diff=%\" PRId64 \"\\n\", diff);\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue355-clock_nanosleep/properties.json",
    "content": "{\"onhost-disabled-os\": [\"darwin\", \"linux\"]}\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/common.mk",
    "content": "SRCFILES := test.cpp\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/host/GNUmakefile",
    "content": "include ../common.mk\n\nis-old-apple-system := $(strip $(and \\\n    $(shell $(CC) --version | grep -iq \"\\(gcc\\|clang\\)\" && echo yes),\\\n    $(shell uname -s | grep -iq darwin && echo yes),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\n\nifneq (,$(is-old-apple-system))\n\n.PHONY: test\ntest:\n\t@echo \"C++11 atomic tests disabled for old Apple systems\"\n\nelse\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\nendif\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := std-atomic\nLOCAL_SRC_FILES  := $(SRCFILES)\nifneq ($(filter clang%,$(NDK_TOOLCHAIN_VERSION)),)\nLOCAL_LDLIBS     := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue57-std_atomic/jni/test.cpp",
    "content": "#include <atomic>\n#include <stdio.h>\n\n#if __clang__ && __ARM_ARCH_5TE__\n\nint main()\n{\n    return 0;\n}\n\n#else\n\nint main()\n{\n    printf(\"std::atomic test - begin\\n\");\n\n    std::atomic<void*> atomicPtr;\n    void *ptr = (void*) 0x12345678;\n    atomicPtr = ptr;\n    if ((void*)ptr != (void*)atomicPtr)\n    {\n        fprintf(stderr, \"ERROR: ptr=%p, atomicPtr=%p\\n\", (void*)ptr, (void*)atomicPtr);\n        return 1;\n    }\n\n    printf(\"OK\\n\");\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-swap\nLOCAL_SRC_FILES := main.c macro.c function.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/assert.h",
    "content": "#ifndef MYASSERT_H_6C8D79949B9E46C4ABF9CE9B5D69738D\n#define MYASSERT_H_6C8D79949B9E46C4ABF9CE9B5D69738D\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#ifdef assert\n#undef assert\n#endif\n\n#define assert(x) \\\n    do { \\\n        if (!(x)) \\\n        { \\\n            fprintf(stderr, \"ASSERTION ERROR at %s:%d: %s\\n\", __FILE__, __LINE__, #x); \\\n            abort(); \\\n        } \\\n    } while (0)\n\n#endif /* MYASSERT_H_6C8D79949B9E46C4ABF9CE9B5D69738D */\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/function.c",
    "content": "#include <byteswap.h>\n\n#include \"assert.h\"\n\n/* Undef swapNN macros to check if they could be used as externally linked functions */\n#undef swap16\n#undef swap32\n#undef swap64\n\nextern uint16_t swap16(uint16_t x);\nextern uint32_t swap32(uint32_t x);\nextern uint64_t swap64(uint64_t x);\n\nvoid test_functions()\n{\n    assert(swap16(0) == 0);\n    assert(swap16(0x0102) == 0x0201);\n    assert(swap32(0) == 0);\n    assert(swap32(0x01020304) == 0x04030201);\n    assert(swap64(0) == 0);\n    assert(swap64(0x0102030405060708ULL) == 0x0807060504030201ULL);\n}\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/macro.c",
    "content": "#include <byteswap.h>\n\n#include \"assert.h\"\n\n#ifndef swap16\n#error swap16 not defined\n#endif\n\n#ifndef swap32\n#error swap32 not defined\n#endif\n\n#ifndef swap64\n#error swap64 not defined\n#endif\n\nvoid test_macros()\n{\n    assert(swap16(0) == 0);\n    assert(swap16(0x0102) == 0x0201);\n    assert(swap32(0) == 0);\n    assert(swap32(0x01020304) == 0x04030201);\n    assert(swap64(0) == 0);\n    assert(swap64(0x0102030405060708ULL) == 0x0807060504030201ULL);\n}\n"
  },
  {
    "path": "tests/device/crystax-issue876-swapNN/jni/main.c",
    "content": "extern void test_macros();\nextern void test_functions();\n\nint main()\n{\n    test_macros();\n    test_functions();\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue912-__tls_get_addr/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := tga\nLOCAL_SRC_FILES := tga.c\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-tls-get-addr\nLOCAL_SRC_FILES := test.c\nLOCAL_SHARED_LIBRARIES := tga\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue912-__tls_get_addr/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue912-__tls_get_addr/jni/test.c",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <assert.h>\n\nvoid tga_set_value(int v);\nint tga_value();\n\nint main()\n{\n    tga_set_value(1);\n    assert(tga_value() == 1);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue912-__tls_get_addr/jni/tga.c",
    "content": "__thread int __v;\n\nvoid tga_set_value(int v)\n{\n    __v = v;\n}\n\nint tga_value()\n{\n    return __v;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue912-__tls_get_addr/properties.json",
    "content": "{\"broken-toolchain-version\": \"clang3.6\"}\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/common.mk",
    "content": "SRCFILES := test.m\n\nCFLAGS := -Wall -Werror\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/host/GNUmakefile",
    "content": "include ../common.mk\nifneq (,$(shell uname -s | grep -i darwin))\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\nelse\n.PHONY: test\ntest:\n\t@echo \"=== Skip on this OS\"\nendif\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/jni/Android.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nLOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-objc-literals\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/jni/Application.mk",
    "content": "# Copyright (c) 2011-2015 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nAPP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/jni/test.m",
    "content": "/*\n * Copyright (c) 2011-2015 CrystaX.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of CrystaX.\n */\n\n#import <Foundation/Foundation.h>\n\n#import <assert.h>\n\n#if !__has_feature(objc_array_literals)\n#error \"ObjC array literals not supported!\"\n#endif\n\n#if !__has_feature(objc_dictionary_literals)\n#error \"ObjC dictionary literals not supported!\"\n#endif\n\n#if !__has_feature(objc_subscripting)\n#error \"ObjC subscripting not supported!\"\n#endif\n\n#if !__APPLE__ && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 7))\n\n#if !__has_attribute(objc_boxable)\n#error \"ObjC boxable not supported!\"\n#endif\n\n#if !__has_feature(objc_boxed_nsvalue_expressions)\n#error \"ObjC boxed NSValue expressions not supported!\"\n#endif\n\n#endif // __APPLE__\n\nint main()\n{\n    NSNumber *theLetterZ = @'Z';\n    assert([theLetterZ charValue] == 'Z');\n\n    NSNumber *fortyTwo = @42;\n    assert([fortyTwo intValue] == 42);\n\n    NSNumber *fortyTwoUnsigned = @42U;\n    assert([fortyTwoUnsigned unsignedIntValue] == 42);\n\n    NSNumber *fortyTwoLong = @42L;\n    assert([fortyTwoLong longValue] == 42);\n\n    NSNumber *fortyTwoLongLong = @42LL;\n    assert([fortyTwoLongLong longLongValue] == 42);\n\n    NSNumber *yesNumber = @YES;\n    assert([yesNumber boolValue] == YES);\n\n    NSNumber *noNumber = @NO;\n    assert([noNumber boolValue] == NO);\n\n    NSNumber *smallestInt = @(-INT_MAX - 1);\n    assert([smallestInt intValue] == (-INT_MAX - 1));\n\n    // There is bug with clang/armeabi-v7a-hard interpreting float literals\n    // as zero values. See https://tracker.crystax.net/issues/1080.\n    // Temporary disable this block til bug #1080 would be fixed.\n#if !__ARM_PCS_VFP\n    NSNumber *piFloat = @3.141592654F;\n    NSLog(@\"piFloat=%@\", piFloat);\n    assert(fabsf([piFloat floatValue] - 3.141592654F) < 0.000001);\n\n    NSNumber *piDouble = @3.1415926535;\n    NSLog(@\"piDouble=%@\", piDouble);\n    assert(fabs([piDouble doubleValue] - 3.1415926535) < 0.000001);\n\n    NSNumber *piOverTwo = @(M_PI / 2);\n    NSLog(@\"piOverTwo=%@\", piOverTwo);\n    assert(fabs([piOverTwo doubleValue] - M_PI / 2) < 0.000001);\n#endif // !__ARM_PCS_VFP\n\n    enum { Red, Green, Blue };\n    NSNumber *favoriteColor = @(Green);\n    assert([favoriteColor intValue] == (int)Green);\n\n    NSString *path = @(getenv(\"PATH\"));\n    assert(strcmp([path UTF8String], getenv(\"PATH\")) == 0);\n\n    const char *ss = \"ABCD\";\n    NSString *stringBoxed = @(ss + 1);\n    assert(strcmp([stringBoxed UTF8String], \"BCD\") == 0);\n\n#if !__APPLE__ && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 7))\n    struct __attribute__((objc_boxable)) Point {\n        int x;\n        int y;\n    };\n\n    struct Point p = {1234, 7619};\n    NSValue *point = @(p);\n\n    struct Point anotherPoint;\n    [point getValue:&anotherPoint];\n    assert(p.x == anotherPoint.x && p.y == anotherPoint.y);\n#endif\n\n    NSArray *array = @[ @\"Hello\", @11, [NSNumber numberWithInt:42] ];\n    assert([array count] == 3);\n    assert([[array objectAtIndex:0] isEqualToString:@\"Hello\"]);\n    assert([[array objectAtIndex:1] isEqualToNumber:@11]);\n    assert([[array objectAtIndex:2] isEqualToNumber:@42]);\n\n    NSDictionary *dictionary = @{\n                @\"name\" : NSUserName(),\n                @\"date\" : [NSDate date],\n         @\"processInfo\" : [NSProcessInfo processInfo]\n    };\n    assert([dictionary count] == 3);\n\n    NSMutableArray *array2 = [NSMutableArray arrayWithArray:@[@4234, @\"Hello111\"]];\n    assert([array2 count] == 2);\n\n    NSLog(@\"array2[0]=%@\", array2[0]);\n    assert([array2[0] isEqualToNumber:@4234]);\n    array2[0] = @4345;\n    NSLog(@\"array2[0]=%@\", array2[0]);\n    assert([array2[0] isEqualToNumber:@4345]);\n\n    NSLog(@\"array2[1]=%@ (%@)\", array2[1], [array2[1] class]);\n    NSLog(@\"array2[1]=%@ (%@) (using objectAtIndex)\", [array2 objectAtIndex:1], [[array2 objectAtIndex:1] class]);\n    assert([array2[1] isEqualToString:@\"Hello111\"]);\n    array2[1] = @\"Hello222\";\n    NSLog(@\"array2[1]=%@ (%@)\", array2[1], [array2[1] class]);\n    NSLog(@\"array2[1]=%@ (%@) (using objectAtIndex)\", [array2 objectAtIndex:1], [[array2 objectAtIndex:1] class]);\n    assert([array2[1] isEqualToString:@\"Hello222\"]);\n\n    NSMutableDictionary *dictionary2 = [NSMutableDictionary dictionaryWithDictionary:@{@\"name\" : @\"NAME\", @\"value\": @1234}];\n    assert([dictionary2 count] == 2);\n    assert([dictionary2[@\"name\"] isEqualToString:@\"NAME\"]);\n    dictionary2[@\"name\"] = @\"NAME2\";\n    assert([dictionary2[@\"name\"] isEqualToString:@\"NAME2\"]);\n    assert([dictionary2[@\"value\"] isEqualToNumber:@1234]);\n    dictionary2[@\"value\"] = @5678;\n    assert([dictionary2[@\"value\"] isEqualToNumber:@5678]);\n\n    NSLog(@\"SUCCESS\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-issue995-objective-c-literals/properties.json",
    "content": "{\"broken-toolchain-version\": [\"gcc4.9\", \"gcc5\", \"gcc6\"]}\n"
  },
  {
    "path": "tests/device/crystax-test-alignof/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test\nLOCAL_SRC_FILES := test.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-alignof/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-alignof/jni/test.cpp",
    "content": "#include <cstddef>\n#include <cstdlib>\n#include <iostream>\n\ntemplate <typename T>\nstruct padding\n{\n    char begin;\n    T object;\n};\n\ntemplate <typename T>\nvoid test(const char *tname)\n{\n    padding<T> p;\n    std::size_t s1 = __alignof(T);\n    std::size_t s2 = (char*)&p.object - &p.begin;\n    if (s1 == s2) return;\n    std::cerr << \"ERROR (\" << tname << \"): \" << s1 << \" != \" << s2 << \"\\n\";\n    std::abort();\n}\n\n#define TEST(type) test<type>(#type)\n\n#if defined(__clang__)\n#define CLANG_VERSION_GREATER_THAN(major, minor) \\\n    (__clang_major__ > major || (__clang_major__ == major && __clang_minor__ > minor))\n#else\n#define CLANG_VERSION_GREATER_THAN(major, minor) 0\n#endif\n\n#if defined(__GNUC__) && !defined(__clang__)\n#define GCC_VERSION_GREATER_THAN(major, minor) \\\n    (__GNUC__ > major || (__GNUC__ == major && __GNUC_MINOR__ > minor))\n#else\n#define GCC_VERSION_GREATER_THAN(major, minor) 0\n#endif\n\nint main()\n{\n    // These tests failed for 32-bit x86 target being built by both gcc and clang\n    // This is not Android-specific; both gcc and clang behave the same on 32-bit\n    // linux and darwin targets. However, this is obviously a bug, so this test\n    // here to track it. Right now, we know gcc-4.9, gcc-5.3, gcc-6.1, clang-3.6\n    // clang-3.7 and clang-3.8 are failing. In the future, this bug should be fixed, so next\n    // gcc/clang versions should pass.\n\n#if !defined(__i386__) || CLANG_VERSION_GREATER_THAN(3, 8) || GCC_VERSION_GREATER_THAN(6, 2)\n    TEST(long long);\n    TEST(double);\n    TEST(long double);\n#endif\n\n    std::cout << \"OK\\n\";\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-big-switch/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n$(shell $(LOCAL_PATH)/gen 20000)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := crystax-test-big-switch\nLOCAL_SRC_FILES := main.c switch.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-big-switch/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_OPTIM := debug\n"
  },
  {
    "path": "tests/device/crystax-test-big-switch/jni/gen",
    "content": "#!/bin/bash\n\ncd $(dirname $0) || exit 1\n\nmax=$1\ntest -z \"$max\" && max=10000\n\n{\n    echo \"int foo(int r)\"\n    echo \"{\"\n    echo \"    switch (r)\"\n    echo \"    {\"\n    for i in $(seq 0 $max); do\n        echo \"    case $i: return 0;\"\n    done\n    echo \"    default: return 0;\"\n    echo \"    }\"\n    echo \"}\"\n} | cat >switch.c\n\n{\n    echo \"extern int foo(int r);\"\n    echo \"int main()\"\n    echo \"{\"\n    echo \"    int rc;\"\n    for i in $(seq 0 $max); do\n        echo \"    if ((rc = foo($i)) != 0) return rc;\"\n    done\n    echo \"    return 0;\"\n    echo \"}\"\n} | cat >main.c\n"
  },
  {
    "path": "tests/device/crystax-test-bionic/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq (,$(strip $(NDK)))\n$(error NDK is not defined!)\nendif\n\nifeq (,$(wildcard $(NDK)))\n$(error NDK points to non-existent location: '$(NDK)')\nendif\n\nBIONIC := $(realpath $(NDK)/sources/crystax/tests/bionic)\n\nifeq (,$(strip $(BIONIC)))\n$(error Can not locate Bionic tests!)\nendif\n\nGTEST := $(NDK)/sources/third_party/googletest/googletest\nifeq (,$(wildcard $(GTEST)))\n$(error Can not locate Google Test sources!)\nendif\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE        := gtest\nLOCAL_SRC_FILES     := $(GTEST)/src/gtest-all.cc\nLOCAL_SRC_FILES     += $(GTEST)/src/gtest_main.cc\n#LOCAL_SRC_FILES     += $(BIONIC)/gtest_main.cpp\nLOCAL_CPPFLAGS      := -Wall -Werror\nLOCAL_CPPFLAGS      += -I$(GTEST)/include\nLOCAL_CPPFLAGS      += -I$(GTEST)\nLOCAL_EXPORT_CFLAGS := -I$(GTEST)/include\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-bionic\nLOCAL_SRC_FILES        := $(wildcard $(BIONIC)/*_test.cpp)\nLOCAL_SRC_FILES        += $(wildcard $(BIONIC)/*_tests.cpp)\nLOCAL_CPPFLAGS         := -Wall -Wextra -Wunused -Werror\nLOCAL_CPPFLAGS         += -fstack-protector-all\nLOCAL_CPPFLAGS         += -fno-builtin\nLOCAL_CPPFLAGS         += -DUSE_DLMALLOC\nLOCAL_STATIC_LIBRARIES := gtest\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-bionic/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-bionic/properties.json",
    "content": "{\n    \"broken\": true,\n    \"long\": true\n}\n"
  },
  {
    "path": "tests/device/crystax-test-boost-serialization/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-boost-static\nLOCAL_SRC_FILES        := test.cpp gps.cpp\nLOCAL_STATIC_LIBRARIES := boost_serialization_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-boost-shared\nLOCAL_SRC_FILES        := test.cpp gps.cpp\nLOCAL_STATIC_LIBRARIES := boost_serialization_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,boost/1.64.0)\n"
  },
  {
    "path": "tests/device/crystax-test-boost-serialization/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-boost-serialization/jni/gps.cpp",
    "content": "#include <fstream>\n\n#include \"gps.hpp\"\n\nconst char *FILENAME = \"gps.dat\";\n\nstd::ostream &operator<<(std::ostream &s, gps_position const &g)\n{\n    s << \"GPS(\" << g.degrees << \"/\" << g.minutes << \"/\" << g.seconds << \")\";\n    return s;\n}\n\nvoid save(gps_position const &g)\n{\n    // create and open a character archive for output\n    std::ofstream ofs(FILENAME);\n    boost::archive::text_oarchive oa(ofs);\n    // write class instance to archive\n    oa << g;\n    // archive and stream closed when destructors are called\n}\n\nvoid load(gps_position &g)\n{\n    // create and open an archive for input\n    std::ifstream ifs(FILENAME);\n    boost::archive::text_iarchive ia(ifs);\n    // read class state from archive\n    ia >> g;\n    // archive and stream closed when destructors are called\n}\n"
  },
  {
    "path": "tests/device/crystax-test-boost-serialization/jni/gps.hpp",
    "content": "#ifndef GPS_HPP_7D5AF29629F64210BE00F3AF697BA650\n#define GPS_HPP_7D5AF29629F64210BE00F3AF697BA650\n\n// include headers that implement a archive in simple text format\n#include <boost/archive/text_oarchive.hpp>\n#include <boost/archive/text_iarchive.hpp>\n\n/////////////////////////////////////////////////////////////\n// gps coordinate\n//\n// illustrates serialization for a simple type\n//\nclass gps_position\n{\nprivate:\n    friend class boost::serialization::access;\n    friend std::ostream &operator<<(std::ostream &, gps_position const &);\n    // When the class Archive corresponds to an output archive, the\n    // & operator is defined similar to <<.  Likewise, when the class Archive\n    // is a type of input archive the & operator is defined similar to >>.\n    template<class Archive>\n    void serialize(Archive & ar, const unsigned int version)\n    {\n        ar & degrees;\n        ar & minutes;\n        ar & seconds;\n    }\n    int degrees;\n    int minutes;\n    float seconds;\npublic:\n    gps_position(){}\n    gps_position(int d, int m, float s) :\n        degrees(d), minutes(m), seconds(s)\n    {}\n\n    bool operator==(gps_position const &g) const\n    {\n        return degrees == g.degrees && minutes == g.minutes && seconds == g.seconds;\n    }\n\n    bool operator!=(gps_position const &g) const\n    {\n        return !(*this == g);\n    }\n};\n\nvoid save(gps_position const &g);\nvoid load(gps_position &g);\n\n#endif // GPS_HPP_7D5AF29629F64210BE00F3AF697BA650\n"
  },
  {
    "path": "tests/device/crystax-test-boost-serialization/jni/test.cpp",
    "content": "#include <iostream>\n#include <iomanip>\n#include \"gps.hpp\"\n\nint main()\n{\n    // create class instance\n    const gps_position g(35, 59, 24.567f);\n    std::cout << \"Initial value: \" << g << std::endl;\n    save(g);\n\n    // ... some time later restore the class instance to its orginal state\n    gps_position newg;\n    load(newg);\n    std::cout << \"After load: \" << newg << std::endl;\n\n    if (g != newg)\n    {\n        std::cerr << \"ERROR: Loaded object differs from the saved one\" << std::endl;\n        return 1;\n    }\n\n    std::cout << \"Congratulations! GPS object was successfully saved and then loaded\" << std::endl;\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/.syntastic/cxx",
    "content": "-std=c++11\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/common.mk",
    "content": "CFLAGS := -Wall -Wextra -Werror\n\nSRCFILES :=                  \\\n\tmain.cpp                 \\\n\ttest-language.cpp        \\\n\ttest-chrono-duration.cpp \\\n\ttest-thread.cpp          \\\n\ttest-to-string.cpp       \\\n\ttest-to-wstring.cpp      \\\n\ttest-stol.cpp            \\\n\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/host/GNUmakefile",
    "content": "include ../common.mk\n\nis-old-apple-system := $(strip $(and \\\n    $(shell $(CC) --version | grep -iq \"\\(gcc\\|clang\\)\" && echo yes),\\\n    $(shell uname -s | grep -iq darwin && echo yes),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\n\nifneq (,$(is-old-apple-system))\n\n.PHONY: test\ntest:\n\t@echo \"C++11 tests disabled for old Apple systems\"\n\nelse\n\npthread-switch = $(if $(and $(call is-host-os-darwin),$(call is-clang,$(CXX))),,-pthread)\n\nCXXFLAGS += $(pthread-switch)\nLDFLAGS  += $(pthread-switch)\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := crystax-test-c++11\nLOCAL_CFLAGS := $(CFLAGS)\nLOCAL_SRC_FILES := $(SRCFILES)\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_LDLIBS := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/common.h",
    "content": "#pragma once\n\n// First, check some macros\n\n#if !defined(__cplusplus)\n#error \"__cplusplus is not defined\"\n#endif\n\n#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) && __cplusplus < 201103L\n#error \"__cplusplus value is too small\"\n#endif\n\n#if !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#error \"__GXX_EXPERIMENTAL_CXX0X__ is not defined\"\n#endif\n\n#include <iostream>\n\n// Now, check GNU libstdc++ macros\n\n#if defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_C99)\n#error \"_GLIBCXX_USE_C99 is not defined\"\n#endif\n\n#if defined(__GLIBCXX__) && defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)\n#error \"_GLIBCXX_HAVE_BROKEN_VSWPRINTF is defined, but it shouldn't\"\n#endif\n\n\n#define DO_TEST(name)   switch (test_ ## name ()) {                   \\\n                        case 0:                                       \\\n                            std::cout << \"test \" #name \": OK\\n\";      \\\n                            break;                                    \\\n                        case -1:                                      \\\n                            std::cout << \"test \" #name \": SKIPPED\\n\"; \\\n                            break;                                    \\\n                        default:                                      \\\n                            std::cout << \"FAILED test \" #name \"\\n\";   \\\n                            return 1;                                 \\\n                        }\n\n\nint test_language();\nint test_chrono_duration_ctor();\nint test_chrono_duration_operators();\nint test_chrono_duration_count();\nint test_chrono_duration_min_max();\nint test_thread();\nint test_to_string();\nint test_to_wstring();\nint test_stol();\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/main.cpp",
    "content": "#include \"common.h\"\n\nint main()\n{\n    DO_TEST(language);\n    DO_TEST(chrono_duration_ctor);\n    DO_TEST(chrono_duration_operators);\n    DO_TEST(chrono_duration_count);\n    DO_TEST(chrono_duration_min_max);\n    DO_TEST(thread);\n    DO_TEST(to_string);\n    DO_TEST(to_wstring);\n    DO_TEST(stol);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-chrono-duration.cpp",
    "content": "#include \"common.h\"\n\n#include <sstream>\n#include <ratio>\n#include <chrono>\n#include <climits>\n\n\n#define SYS_CLOCK_MIN    LLONG_MIN\n#define SYS_CLOCK_MAX    LLONG_MAX\n\n\nint test_chrono_duration_ctor()\n{\n    typedef std::chrono::duration<int> Seconds;\n    typedef std::chrono::duration<int, std::milli> Milliseconds;\n    typedef std::chrono::duration<int, std::ratio<60*60>> Hours;\n\n    Hours        hoursperday(24);\n    Seconds      secsperday(60*60*24);\n    Milliseconds msperday(secsperday);\n    Seconds      secsperhour(60*60);\n    Hours        hourperhour(std::chrono::duration_cast<Hours>(secsperhour));\n    Milliseconds msperhour(secsperhour);\n\n    std::stringstream os;\n    os << hoursperday.count() << std::endl\n       << secsperday.count()  << std::endl\n       << msperday.count()    << std::endl\n       << secsperhour.count() << std::endl\n       << hourperhour.count() << std::endl\n       << msperhour.count()   << std::endl;\n\n    std::string res =\n        \"24\\n\"\n        \"86400\\n\"\n        \"86400000\\n\"\n        \"3600\\n\"\n        \"1\\n\"\n        \"3600000\\n\";\n\n    if (res != os.str()) {\n        std::cout << \"unexpected result: \" << os.str() << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n\n\nint test_chrono_duration_operators()\n{\n    std::chrono::duration<int> foo;\n    std::chrono::duration<int> bar(1024);\n\n    foo = bar;                 // 1024  1024\n    foo = foo + bar;           // 2048  1024\n    ++foo;                     // 2049  1024\n    --bar;                     // 2049  1023\n    foo *= 2;                  // 4098  1023\n    foo /= 3;                  // 1366  1023\n    bar += ( foo % bar );      // 1366  1366\n\n    if ((foo.count() != 1366) || (foo.count() != bar.count())) {\n        std::cout << \"unexpected result: \" << std::endl\n                  << \"    foo.count(): \" << foo.count() << std::endl\n                  << \"    bar.count(): \" << bar.count() << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n\n\nint test_chrono_duration_count()\n{\n    typedef std::chrono::duration<int, std::milli> Milliseconds;\n\n    Milliseconds foo(1000); // 1 sec\n    foo *= 60;\n\n    if (foo.count() != 60000) {\n        std::cout << \"bad duration in periods: \" << foo.count() << std::endl;\n        return 1;\n    }\n\n    int secs = foo.count() * Milliseconds::period::num / Milliseconds::period::den;\n    if (secs != 60) {\n        std::cout << \"bad duration in seconds: \" << secs << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n\n\nint test_chrono_duration_min_max()\n{\n    auto minval = std::chrono::system_clock::duration::min().count();\n    if (minval != SYS_CLOCK_MIN) {\n        std::cout << \"bad system_clock min value: \" << minval << std::endl;\n        return 1;\n    }\n\n    auto maxval = std::chrono::system_clock::duration::max().count();\n    if (maxval != SYS_CLOCK_MAX) {\n        std::cout << \"bad system_clock max value: \" << maxval << std::endl;\n        return 1;\n    }\n\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-language.cpp",
    "content": "#include <cerrno>\n#include <cstddef>\n#include <memory>\n#include <vector>\n#include <stdexcept>\n#include <iostream>\n#include <iomanip>\n#include <regex>\n\ntemplate <typename... T>\nvoid unused(T... ) {}\n\n// Const expressions\nconstexpr int get_five() {return 5;}\n\n// rvalue references\nclass A {\npublic:\n    A() {}\n};\nvoid foobar(A &&) {std::cout << __PRETTY_FUNCTION__ << std::endl;}\nvoid foobar(A const &) {std::cout << __PRETTY_FUNCTION__ << std::endl;}\n\n// Enum forward declaration\nenum Color : char;\nvoid foo(Color );\nenum Color : char {reg, green, blue};\n\n// Stronly typed enumerations\nenum class enum1_t\n{\n    v1,\n    v2,\n    v3 = 100\n};\n\nenum class enum2_t : unsigned long\n{\n    // ERROR: enumerator value -0x00000000000000001 is too large for underlying type 'long unsigned int'\n    //v1 = -1,\n    v1 = 1,\n    v2,\n    v3 = 100\n};\n\n// Right angle brackets problem\ntemplate <bool Test> class TestType {};\nstd::vector<TestType<(1>2)>> x;\n\n// Variadic templates\nvoid fooprintf(const char* s)\t\n{\n    while (s && *s) {\n        if (*s=='%' && *++s!='%')   // make sure that there wasn't meant to be more arguments\n                                    // %% represents plain % in a format string\n             throw std::runtime_error(\"invalid format: missing arguments\");\n        std::cout << *s++;\n    }\n}\n\ntemplate<typename T, typename... Args>\nvoid fooprintf(const char* s, T value, Args... args)\n{\n    while (s && *s) {\n        if (*s=='%' && *++s!='%') // a format specifier (ignore which one it is)\n        {\n            std::cout << value; // use first non-format argument\n            return fooprintf(++s, args...); // \"peel off\" first argument\n        }\n        std::cout << *s++;\n    }\n    throw std::runtime_error(\"extra arguments provided to fooprintf\");\n}\n\n// New function declaration syntax\nauto test_language() -> int\n{\n    // nullptr\n    char *np = nullptr;\n    unused(np);\n    // ERROR: cannot convert 'std::nullptr_t' to 'int' in initialization\n    //int nv = nullptr;\n\n    // New unique_ptr\n    std::unique_ptr<int> p;\n\n    // decltype\n    int some_int;\n    decltype(some_int) other_integer_variable = 5;\n    unused(other_integer_variable);\n\n    // New for syntax\n    int my_array[5] = {1, 2, 3, 4, 5};\n    for (int &x : my_array) {\n        x *= 2;\n    }\n\n    // Lambda functions\n    auto f = [](int x, int y) { return x + y; };\n    std::cout << \"lambda call: \" << f(1, 2) << std::endl;\n\n    // Usage of fooprintf\n    fooprintf(\"test1\\n\");\n    try\n    {\n        fooprintf(\"test2: %s\\n\");\n    }\n    catch (std::exception &ex)\n    {\n        std::cerr << ex.what() << std::endl;\n    }\n    try\n    {\n        fooprintf(\"test3: %d\\n\", 1, 2, 3);\n    }\n    catch (std::exception &ex)\n    {\n        std::cerr << ex.what() << std::endl;\n    }\n\n    // Unicode string literals\n    auto s1 = u8\"test\";\n    auto s2 = u\"test\";\n    auto s3 = U\"test\";\n    unused(s1, s2, s3);\n\n    // Raw string literals\n    auto r1 = R\"(foo \" \\ bar)\";\n    auto r2 = R\"q(this is raw string literal)q\";\n    std::cout << \"r1: \" << r1 << std::endl;\n    std::cout << \"r2: \" << r2 << std::endl;\n\n    // Test rvalue references\n    A const a;\n    foobar(a);\n    foobar(A());\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-stol.cpp",
    "content": "#include \"common.h\"\n\n#include <math.h>\n#include <string>\n\n#define EPSILON 0.0001\n\n#define TEST_RESULT(fun, got, exp)         \\\n    if (got != exp) {                      \\\n        std::cout << fun \" failed: got: \"  \\\n                  << got                   \\\n                  << \"; expected: \"        \\\n                  << exp                   \\\n                  << std::endl;            \\\n        return 1;                          \\\n    }\n\n#define TEST_FLOAT_RESULT(fun, abs, double_type, got, exp)             \\\n    {                                                                  \\\n      double_type diff = abs(got - exp);                               \\\n      if (diff > EPSILON) {                                            \\\n          printf(\"got: %Le; expected: %Le; diff: %Le\\n\",               \\\n              (long double)got, (long double) exp, (long double)diff); \\\n          return 1;                                                    \\\n      }                                                                \\\n    }\n\n\nint test_stol()\n{\n    std::string s1 = \"17\";\n    int v1 = std::stoi(s1);\n    TEST_RESULT(\"stoi\", v1, 17);\n\n    std::string s2 = \"701746190\";\n    long v2 = std::stol(s2);\n    TEST_RESULT(\"stol\", v2, 701746190L);\n\n    std::string s3 = \"4611686018427387903\";\n    long long v3 = std::stoll(s3);\n    TEST_RESULT(\"stol\", v3, 4611686018427387903LL);\n\n    std::string s4 = \"701746190\";\n    unsigned long v4 = std::stoul(s4);\n    TEST_RESULT(\"stoul\", v4, 701746190UL);\n\n    std::string s5 = \"4611686018427387903\";\n    long long v5 = std::stoull(s5);\n    TEST_RESULT(\"stoul\", v5, 4611686018427387903ULL);\n\n    std::string s6 = \"1965.58\";\n    float v6 = std::stof(s6);\n    TEST_FLOAT_RESULT(\"stof\", fabsf, float, v6, (float)1965.58);\n\n    std::string s7 = \"1965.58\";\n    double v7 = std::stof(s7);\n    TEST_FLOAT_RESULT(\"stod\", fabs, double, v7, 1965.58);\n\n    std::string s8 = \"1965.58\";\n    long double v8 = std::stold(s8);\n    TEST_FLOAT_RESULT(\"stold\", fabsl, long double, v8, 1965.58);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-thread.cpp",
    "content": "#include \"common.h\"\n\n#if defined(__GLIBCXX__)\n\n#if !defined(_GLIBCXX_HAS_GTHREADS)\n#error _GLIBCXX_HAS_GTHREADS undefined!\n#endif\n\n#if !defined(_GLIBCXX_USE_C99_STDINT_TR1)\n#error _GLIBCXX_USE_C99_STDINT_TR1 undefined!\n#endif\n\n#if __ANDROID__\n#if !defined(_GLIBCXX_USE_NANOSLEEP)\n#error _GLIBCXX_USE_NANOSLEEP undefined!\n#endif\n#endif\n\n#endif // __GLIBCXX__\n\n#if defined(__ANDROID__) && !defined(_POSIX_TIMEOUTS)\n#error _POSIX_TIMEOUTS undefined!\n#endif\n\n#include <iostream>\n#include <utility>\n#include <mutex>\n#include <thread>\n#include <chrono>\n#include <functional>\n#include <atomic>\n\n#define NUM 5\n\nvoid f1(int n)\n{\n    for(int i=0; i<NUM; ++i) {\n        std::cout << \"Thread \" << n << \" executing\\n\";\n        std::this_thread::sleep_for(std::chrono::milliseconds(10));\n    }\n}\n\nvoid f2(int& n)\n{\n    for(int i=0; i<NUM; ++i) {\n        std::cout << \"Thread 2 executing\\n\";\n        ++n;\n        std::this_thread::sleep_for(std::chrono::milliseconds(10));\n    }\n}\n\nint test_thread()\n{\n    int n = 0;\n    std::thread t1(f1, n+1);\n    std::thread t3(f2, std::ref(n));\n    std::thread t4(std::move(t3));\n    t1.join();\n    t4.join();\n\n    if (n == NUM)\n        std::cout << \"Final value of n is \" << n << std::endl;\n    else {\n        std::cout << \"error: unexpected value of n: \" << n << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-to-string.cpp",
    "content": "#include \"common.h\"\n\n#include <string>\n\n#define TEST_RESULT(type, got, exp)                        \\\n    if (got != exp) {                                      \\\n        std::cout << \"to_string(\" #type \") failed: got: \"  \\\n                  << got                                   \\\n                  << \"; expected: \"                        \\\n                  << exp                                   \\\n                  << std::endl;                            \\\n        return 1;                                          \\\n    }\n\n\nint test_to_string()\n{\n    std::string s1 = std::to_string(33);\n    std::string s1_exp = \"33\";\n    TEST_RESULT(int, s1, s1_exp);\n\n    std::string s2 = std::to_string(2105238571L);\n    std::string s2_exp = \"2105238571\";\n    TEST_RESULT(long, s2, s2_exp);\n\n    std::string s3 = std::to_string(4611686018427387903LL);\n    std::string s3_exp = \"4611686018427387903\";\n    TEST_RESULT(long long, s3, s3_exp);\n\n    std::string s4 = std::to_string(77U);\n    std::string s4_exp = \"77\";\n    TEST_RESULT(unsigned, s4, s4_exp);\n\n    std::string s5 = std::to_string(2105238571UL);\n    std::string s5_exp = \"2105238571\";\n    TEST_RESULT(unsigned long, s5, s5_exp);\n\n    std::string s6 = std::to_string(9223372036854775806ULL);\n    std::string s6_exp = \"9223372036854775806\";\n    TEST_RESULT(long long, s6, s6_exp);\n\n    std::string s7 = std::to_string(float(1965.0));\n    std::string s7_exp = \"1965.000000\";\n    TEST_RESULT(float, s7, s7_exp);\n\n    double v8 = 1965.05;\n    // std::string s8 = std::to_string(double(1965.05));\n    std::string s8 = std::to_string(v8);\n    std::string s8_exp = \"1965.050000\";\n    TEST_RESULT(double, s8, s8_exp);\n\n    long double v9 = 1965.05;\n    std::string s9 = std::to_string(v9);\n    std::string s9_exp = \"1965.050000\";\n    TEST_RESULT(long double, s9, s9_exp);\n\n    // printf(\"printf (%%f): %f\\n\", v9);\n    // printf(\"printf (%%e): %e\\n\", v9);\n    // printf(\"printf (%%Lf): %Lf\\n\", v9);\n    // printf(\"printf (%%Le): %Le\\n\", v9);\n\n    // char buf[2048];\n    // memset(buf, 0, sizeof(buf));\n    // int num1 = std::sprintf(buf, \"%Lf\", v9);\n    // printf(\"sprintf (%%Lf): %s\\nnum chars: %d\\n\", buf, num1);\n    // memset(buf, 0, sizeof(buf));\n    // int num2 = std::sprintf(buf, \"%Le\", v9);\n    // printf(\"sprintf (%%Le): %s\\nnum chars: %d\\n\", buf, num2);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c++11/jni/test-to-wstring.cpp",
    "content": "#include \"common.h\"\n\n\n#include <string>\n\n#define TEST_RESULT(type, got, exp)                          \\\n    if (got != exp) {                                        \\\n        std::wcout << \"to_wstring(\" #type \") failed: got: \"  \\\n                   << got                                    \\\n                   << \"; expected: \"                         \\\n                   << exp                                    \\\n                   << std::endl;                             \\\n        return 1;                                            \\\n    }\n\nint test_to_wstring()\n{\n    std::wstring s1 = std::to_wstring(33);\n    std::wstring s1_exp = L\"33\";\n    TEST_RESULT(int, s1, s1_exp);\n\n    std::wstring s2 = std::to_wstring(2105238571L);\n    std::wstring s2_exp = L\"2105238571\";\n    TEST_RESULT(long, s2, s2_exp);\n\n    std::wstring s3 = std::to_wstring(4611686018427387903LL);\n    std::wstring s3_exp = L\"4611686018427387903\";\n    TEST_RESULT(long long, s3, s3_exp);\n\n    std::wstring s4 = std::to_wstring(77U);\n    std::wstring s4_exp = L\"77\";\n    TEST_RESULT(unsigned, s4, s4_exp);\n\n    std::wstring s5 = std::to_wstring(2105238571UL);\n    std::wstring s5_exp = L\"2105238571\";\n    TEST_RESULT(unsigned long, s5, s5_exp);\n\n    std::wstring s6 = std::to_wstring(9223372036854775806ULL);\n    std::wstring s6_exp = L\"9223372036854775806\";\n    TEST_RESULT(unsigned long long, s6, s6_exp);\n\n    std::wstring s7 = std::to_wstring(float(1965.0));\n    std::wstring s7_exp = L\"1965.000000\";\n    TEST_RESULT(float, s7, s7_exp);\n\n    std::wstring s8 = std::to_wstring(double(1965.05));\n    std::wstring s8_exp = L\"1965.050000\";\n    TEST_RESULT(double, s8, s8_exp);\n\n    long double v9 = 1965.05;\n    std::wstring s9 = std::to_wstring(v9);\n    std::wstring s9_exp = L\"1965.050000\";\n    TEST_RESULT(long double, s9, s9_exp);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -fno-builtin\nCFLAGS   += -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/host/GNUmakefile",
    "content": "include ../common.mk\n\nLDLIBS := -lm\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-c99-complex\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/jni/Application.mk",
    "content": "APP_ABI      := all\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/jni/main.c",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n#include <stdio.h>\n#include <complex.h>\n\n\nvolatile double      double_result;\nvolatile float       float_result;\nvolatile long double long_double_result;\n\nvolatile double      complex double_complex_result;\nvolatile float       complex float_complex_result;\nvolatile long double complex long_double_complex_result;\n\nvolatile double      complex double_complex_var      = (double)      1.1 + (double)      1.1*I;\nvolatile float       complex float_complex_var       = (float)       2.2 + (float)       2.2*I;\nvolatile long double complex long_double_complex_var = (long double) 3.3 + (long double) 3.3*I;\n\n\nstatic void print_double_complex_result(const char*funcname);\nstatic void print_float_complex_result(const char*funcname);\nstatic void print_long_double_complex_result(const char*funcname);\n\nstatic void print_double_result(const char*funcname);\nstatic void print_float_result(const char*funcname);\nstatic void print_long_double_result(const char*funcname);\n\n\nint main()\n{\n    printf(\"sizeof(long double) = %zu\\n\", sizeof(long double));\n#ifdef __ANDROID__\n#if __LP64__\n    assert(sizeof(long double) == 16);\n#else\n    assert(sizeof(long double) == 8);\n#endif\n#else\n    assert(sizeof(long double) >= sizeof(double));\n#endif\n\n    /* 7.3.5 Trigonometric functions */\n    /* 7.3.5.1 The cacos functions */\n    double_complex_result = cacos(double_complex_var);\n    print_double_complex_result(\"cacos\");\n    float_complex_result = cacosf(float_complex_var);\n    print_float_complex_result(\"cacosf\");\n    long_double_complex_result = cacosl(long_double_complex_var);\n    print_long_double_complex_result(\"cacosl\");\n\n    /* 7.3.5.2 The casin functions */\n    double_complex_result = casin(double_complex_var);\n    print_double_complex_result(\"casin\");\n    float_complex_result = casinf(float_complex_var);\n    print_float_complex_result(\"casinf\");\n    long_double_complex_result = casinl(long_double_complex_var);\n    print_long_double_complex_result(\"casinl\");\n\n    /* 7.3.5.3 The catan functions */\n    double_complex_result = catan(double_complex_var);\n    print_double_complex_result(\"catan\");\n    float_complex_result = catanf(float_complex_var);\n    print_float_complex_result(\"catanf\");\n    long_double_complex_result = catanl(long_double_complex_var);\n    print_long_double_complex_result(\"catanl\");\n\n    /* 7.3.5.4 The ccos functions */\n    double_complex_result = ccos(double_complex_var);\n    print_double_complex_result(\"ccos\");\n    float_complex_result = ccosf(float_complex_var);\n    print_float_complex_result(\"ccosf\");\n    long_double_complex_result = ccosl(long_double_complex_var);\n    print_long_double_complex_result(\"ccosl\");\n\n    /* 7.3.5.5 The csin functions */\n    double_complex_result = csin(double_complex_var);\n    print_double_complex_result(\"csin\");\n    float_complex_result = csinf(float_complex_var);\n    print_float_complex_result(\"csinf\");\n    long_double_complex_result = csinl(long_double_complex_var);\n    print_long_double_complex_result(\"csinl\");\n\n    /* 7.3.5.6 The ctan functions */\n    double_complex_result = ctan(double_complex_var);\n    print_double_complex_result(\"ctan\");\n    float_complex_result = ctanf(float_complex_var);\n    print_float_complex_result(\"ctanf\");\n    long_double_complex_result = ctanl(long_double_complex_var);\n    print_long_double_complex_result(\"ctanl\");\n\n    /* 7.3.6 Hyperbolic functions */\n    /* 7.3.6.1 The cacosh functions */\n    double_complex_result = cacosh(double_complex_var);\n    print_double_complex_result(\"cacosh\");\n    float_complex_result = cacoshf(float_complex_var);\n    print_float_complex_result(\"cacoshf\");\n    long_double_complex_result = cacoshl(long_double_complex_var);\n    print_long_double_complex_result(\"cacoshl\");\n\n    /* 7.3.6.2 The casinh functions */\n    double_complex_result = casinh(double_complex_var);\n    print_double_complex_result(\"casinh\");\n    float_complex_result = casinhf(float_complex_var);\n    print_float_complex_result(\"casinhf\");\n    long_double_complex_result = casinhl(long_double_complex_var);\n    print_long_double_complex_result(\"casinhf\");\n\n    /* 7.3.6.3 The catanh functions */\n    double_complex_result = catanh(double_complex_result);\n    print_double_complex_result(\"catanh\");\n    float_complex_result = catanhf(float_complex_var);\n    print_float_complex_result(\"catanhf\");\n    long_double_complex_result = catanhl(long_double_complex_var);\n    print_long_double_complex_result(\"catanhl\");\n\n    /* 7.3.6.4 The ccosh functions */\n    double_complex_result = ccosh(double_complex_var);\n    print_double_complex_result(\"ccosh\");\n    float_complex_result = ccoshf(float_complex_var);\n    print_float_complex_result(\"ccoshf\");\n    long_double_complex_result = ccoshl(long_double_complex_var);\n    print_long_double_complex_result(\"ccoshl\");\n\n    /* 7.3.6.5 The csinh functions */\n    double_complex_result = csinh(double_complex_var);\n    print_double_complex_result(\"csinh\");\n    float_complex_result = csinhf(float_complex_var);\n    print_float_complex_result(\"csinhf\");\n    long_double_complex_result = csinhl(long_double_complex_var);\n    print_long_double_complex_result(\"csinhl\");\n\n    /* 7.3.6.6 The ctanh functions */\n    double_complex_result = ctanh(double_complex_var);\n    print_double_complex_result(\"ctanh\");\n    float_complex_result = ctanhf(float_complex_var);\n    print_float_complex_result(\"ctanhf\");\n    long_double_complex_result = ctanhl(long_double_complex_var);\n    print_long_double_complex_result(\"ctanhl\");\n\n    /* 7.3.7 Exponential and logarithmic functions */\n    /* 7.3.7.1 The cexp functions */\n    double_complex_result = cexp(double_complex_var);\n    print_double_complex_result(\"cexp\");\n    float_complex_result = cexpf(float_complex_var);\n    print_float_complex_result(\"cexpf\");\n    long_double_complex_result = cexpl(long_double_complex_var);\n    print_long_double_complex_result(\"cexpl\");\n\n    /* 7.3.7.2 The clog functions */\n    double_complex_result = clog(double_complex_var);\n    print_double_complex_result(\"clog\");\n    float_complex_result = clogf(float_complex_var);\n    print_float_complex_result(\"clogf\");\n    long_double_complex_result = clogl(long_double_complex_var);\n    print_long_double_complex_result(\"clogl\");\n\n    /* 7.3.8 Power and absolute-value functions */\n    /* 7.3.8.1 The cabs functions */\n    double_result = cabs(double_complex_var);\n    print_double_result(\"cabs\");\n    float_result = cabsf(float_complex_var);\n    print_float_result(\"cabsf\");\n    long_double_result = cabsl(long_double_complex_var);\n    print_long_double_result(\"cabsl\");\n\n    /* 7.3.8.2 The cpow functions */\n    double_complex_result = cpow(double_complex_var, double_complex_var);\n    print_double_complex_result(\"cpow\");\n    float_complex_result = cpowf(float_complex_var, float_complex_var);\n    print_float_complex_result(\"cpowf\");\n    long_double_complex_result = cpowl(long_double_complex_var, long_double_complex_var);\n    print_long_double_complex_result(\"cpowl\");\n\n    /* 7.3.8.3 The csqrt functions */\n    double_complex_result = csqrt(double_complex_var);\n    print_double_complex_result(\"csqrt\");\n    float_complex_result = csqrtf(float_complex_var);\n    print_float_complex_result(\"csqrtf\");\n    long_double_complex_result = csqrtl(long_double_complex_var);\n    print_long_double_complex_result(\"csqrtl\");\n\n    /* 7.3.9 Manipulation functions */\n    /* 7.3.9.1 The carg functions */\n    double_result = carg(double_complex_var);\n    print_double_result(\"carg\");\n    float_result = cargf(float_complex_var);\n    print_float_result(\"cargf\");\n    long_double_result = cargl(long_double_complex_var);\n    print_long_double_result(\"cargl\");\n\n    /* 7.3.9.2 The cimag functions */\n    double_result = cimag(double_complex_var);\n    print_double_result(\"cimag\");\n    float_result = cimagf(float_complex_var);\n    print_float_result(\"cimagf\");\n    long_double_result = cimagl(long_double_complex_var);\n    print_long_double_result(\"cimagl\");\n\n    /* 7.3.9.3 The conj functions */\n    double_complex_result = conj(double_complex_var);\n    print_double_complex_result(\"conj\");\n    float_complex_result = conjf(float_complex_var);\n    print_float_complex_result(\"conjf\");\n    long_double_complex_result = conjl(long_double_complex_var);\n    print_long_double_complex_result(\"conjl\");\n\n    /* 7.3.9.4 The cproj functions */\n    double_complex_result = cproj(double_complex_var);\n    print_double_complex_result(\"cproj\");\n    float_complex_result = cprojf(float_complex_var);\n    print_float_complex_result(\"cprojf\");\n    long_double_complex_result = cprojl(long_double_complex_var);\n    print_long_double_complex_result(\"cprojl\");\n\n    /* 7.3.9.5 The creal functions */\n    double_result = creal(double_complex_var);\n    print_double_result(\"creal\");\n    float_result = crealf(float_complex_var);\n    print_float_result(\"crealf\");\n    long_double_result = creall(long_double_complex_var);\n    print_long_double_result(\"creall\");\n\n    return 0;\n}\n\nvoid print_double_complex_result(const char*funcname)\n{\n    printf(\"%s: %e + i%e\\n\", funcname, creal(double_complex_result), cimag(double_complex_result));\n}\n\nvoid print_float_complex_result(const char*funcname)\n{\n    printf(\"%s: %e + i%e\\n\", funcname, crealf(float_complex_result), cimagf(float_complex_result));\n}\n\nvoid print_long_double_complex_result(const char*funcname)\n{\n    printf(\"%s: %Le + i%Le\\n\", funcname, creall(long_double_complex_result), cimagl(long_double_complex_result));\n}\n\nvoid print_double_result(const char*funcname)\n{\n    printf(\"%s: %e\\n\", funcname, double_result);\n}\n\nvoid print_float_result(const char*funcname)\n{\n    printf(\"%s: %e\\n\", funcname, float_result);\n}\n\nvoid print_long_double_result(const char*funcname)\n{\n    printf(\"%s: %Le\\n\", funcname, long_double_result);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-c99-complex/properties.json",
    "content": "{\"broken-toolchain-version\": \"clang3.6\"}\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -DNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := crystax-test-c99-stdlib\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/jni/Application.mk",
    "content": "APP_ABI      := all\n#APP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/device/crystax-test-c99-stdlib/jni/main.c",
    "content": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <limits.h>\n\nint main()\n{\n    assert(sizeof(double) <= sizeof(long double));\n\n    double d = strtod(\"12.345678\", NULL);\n    long double ld = strtold(\"12.345678\", NULL);\n\n    printf(\"d = %f\\n\", d);\n    printf(\"ld = %Lf\\n\", ld);\n\n    if (fabsl(d - ld) > 0.000000000000001) {\n        fprintf(stderr, \"error: strtold produces unexpected result: %Lf (diff: %Lf)\\n\", ld, fabsl(d - ld));\n        return 1;\n    }\n\n    _Exit(0);\n\n    fprintf(stderr, \"error: _Exit() function does not work\\n\");\n    return 1;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-cmake/CMakeLists.txt",
    "content": "set(TARGET hello-world)\n\nadd_definitions(-Wall -Wextra -Werror)\nadd_executable(${TARGET} test.c)\n"
  },
  {
    "path": "tests/device/crystax-test-cmake/test.c",
    "content": "#include <stdio.h>\n\nint main()\n{\n    printf(\"Hello, world!\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/common.mk",
    "content": "SRCFILES := main.cpp\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-dynamic-cast\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-dynamic_cast/jni/main.cpp",
    "content": "#include <stdio.h>\n\nclass A {\npublic:\n    A();\n    virtual ~A();\n};\n\nclass B : public A {\npublic:\n    B();\n    ~B();\n};\n\nA::A() {}\nA::~A() {}\nB::B() {}\nB::~B() {}\n\nint main()\n{\n    ::printf(\"dynamic_cast - begin\");\n\n    A *pa = dynamic_cast<A*>(new B);\n    B *pb = static_cast<B*>(pa);\n    B *pc = dynamic_cast<B*>(pa);\n\n    ::printf(\"pa = %p\\n\", pa);\n    ::printf(\"pb = %p\\n\", pb);\n    // this line will cause segfault with gcc 4.4.3 on armeabi\n    ::printf(\"pc = %p\\n\", pc);\n\n    if (pa != pb)\n    {\n        ::fprintf(stderr, \"*** ERROR: pa != pb\\n\");\n        return 1;\n    }\n\n    if (pa != pc)\n    {\n        ::fprintf(stderr, \"*** ERROR: pa != pc\\n\");\n        return 1;\n    }\n\n    delete pa;\n\n    ::printf(\"OK\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-executables/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := dynamic-executable\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := static-executable\nLOCAL_SRC_FILES := main.c\nLOCAL_LDFLAGS += -static\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-executables/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-executables/jni/main.c",
    "content": "int main()\n{\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/common.mk",
    "content": "SRCFILES := fcntl.c\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-fcntl\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-fcntl/jni/fcntl.c",
    "content": "#include <fcntl.h>\n#include <unistd.h>\n#include <sys/stat.h>\n#include <assert.h>\n#include <stdio.h>\n#include <string.h>\n#include <errno.h>\n\n#if __APPLE__ || __gnu_linux__\n#define FNAME \"/tmp/crystax-ndk-fcntl-test.txt\"\n#elif __ANDROID__\n#define FNAME \"/data/local/tmp/ndk-fcntl.txt\"\n#else\n#error \"Unknown platform\"\n#endif\n\nstatic void test_F_GETFD_and_F_SETFD(int fd)\n{\n    int rc;\n\n    rc = fcntl(fd, F_GETFD);\n    assert(rc == 0);\n\n    rc = fcntl(fd, F_SETFD, FD_CLOEXEC);\n    assert(rc == 0);\n\n    rc = fcntl(fd, F_GETFD);\n    assert(rc == FD_CLOEXEC);\n\n    rc = fcntl(fd, F_SETFD, 0);\n    assert(rc == 0);\n\n    rc = fcntl(fd, F_GETFD);\n    assert(rc == 0);\n}\n\nstatic void test_F_DUPFD(int fd)\n{\n    int rc = fcntl(fd, F_DUPFD, fd + 1);\n    assert(rc >= fd + 1);\n\n    int rc2 = fcntl(fd, F_DUPFD, fd + 1);\n    assert(rc2 >= fd + 2);\n    close(rc2);\n\n    assert((fcntl(fd, F_GETFD) & FD_CLOEXEC) == 0);\n\n    close(rc);\n}\n\nstatic void test_F_DUPFD_CLOEXEC(int fd)\n{\n#if __APPLE__ && !defined(__MAC_10_7)\n    (void)fd;\n#else\n    int rc = fcntl(fd, F_DUPFD_CLOEXEC, fd + 1);\n    assert(rc >= fd + 1);\n\n    assert((fcntl(rc, F_GETFD) & FD_CLOEXEC) == FD_CLOEXEC);\n\n    close(rc);\n#endif\n}\n\nstatic void test_F_DUP2FD(int fd)\n{\n#if __APPLE__ || __gnu_linux__\n    // There is no F_DUP2FD flag on OS X and GNU/Linux systems\n    (void)fd;\n#else\n    int rc = fcntl(fd, F_DUP2FD, fd + 1);\n    assert(rc == fd + 1);\n\n    close(rc);\n#endif\n}\n\nstatic void test_F_DUP2FD_CLOEXEC(int fd)\n{\n#if __APPLE__ || __gnu_linux__\n    // There is no F_DUP2FD_CLOEXEC flag on OS X and GNU/Linux systems\n    (void)fd;\n#else\n    int rc = fcntl(fd, F_DUP2FD_CLOEXEC, fd + 1);\n    assert(rc == fd + 1);\n\n    int rc2 = fcntl(rc, F_GETFD);\n    assert(rc2 == FD_CLOEXEC);\n\n    close(rc);\n#endif\n}\n\nstatic void test_F_GETFL_and_F_SETFL(int fd)\n{\n    int oflags = fcntl(fd, F_GETFL);\n\n#define TEST_FLAG(f)                              \\\n    assert(fcntl(fd, F_SETFL, oflags & ~f) == 0); \\\n    assert((fcntl(fd, F_GETFL) & f) == 0);        \\\n    assert(fcntl(fd, F_SETFL, oflags | f) == 0);  \\\n    assert((fcntl(fd, F_GETFL) & f) != 0);\n\n    TEST_FLAG(O_NONBLOCK);\n    TEST_FLAG(O_APPEND);\n\n#undef TEST_FLAG\n\n    assert(fcntl(fd, F_SETFL, oflags) == 0);\n}\n\nstatic void test_F_GETLK_and_F_SETLK(int fd)\n{\n    struct flock fl = {\n        .l_start = 0,\n        .l_len = 0,\n        .l_whence = SEEK_SET,\n        .l_pid = getpid(),\n        .l_type = F_RDLCK,\n    };\n\n    assert(fcntl(fd, F_GETLK, &fl) == 0);\n    assert(fl.l_start == 0);\n    assert(fl.l_len == 0);\n    assert(fl.l_whence == SEEK_SET);\n    assert(fl.l_pid == getpid());\n    assert(fl.l_type == F_UNLCK);\n\n    fl.l_start = 0;\n    fl.l_len = 1;\n    fl.l_whence = SEEK_SET;\n    fl.l_pid = getpid();\n    fl.l_type = F_RDLCK;\n    assert(fcntl(fd, F_SETLK, &fl) == 0);\n\n    assert(fcntl(fd, F_GETLK, &fl) == 0);\n    assert(fl.l_start == 0);\n    assert(fl.l_len == 1);\n    assert(fl.l_whence == SEEK_SET);\n    assert(fl.l_pid == getpid());\n    assert(fl.l_type == F_UNLCK);\n\n    fl.l_start = 0;\n    fl.l_len = 1;\n    fl.l_whence = SEEK_SET;\n    fl.l_pid = getpid();\n    fl.l_type = F_WRLCK;\n    assert(fcntl(fd, F_SETLK, &fl) == 0);\n\n    assert(fcntl(fd, F_GETLK, &fl) == 0);\n    assert(fl.l_start == 0);\n    assert(fl.l_len == 1);\n    assert(fl.l_whence == SEEK_SET);\n    assert(fl.l_pid == getpid());\n    assert(fl.l_type == F_UNLCK);\n\n    fl.l_start = 0;\n    fl.l_len = 1;\n    fl.l_whence = SEEK_SET;\n    fl.l_pid = getpid();\n    fl.l_type = F_WRLCK;\n    assert(fcntl(fd, F_SETLKW, &fl) == 0);\n\n    assert(fcntl(fd, F_GETLK, &fl) == 0);\n    assert(fl.l_start == 0);\n    assert(fl.l_len == 1);\n    assert(fl.l_whence == SEEK_SET);\n    assert(fl.l_pid == getpid());\n    assert(fl.l_type == F_UNLCK);\n}\n\nint main()\n{\n    int fd;\n\n    unlink(FNAME);\n\n    for (fd = 3; fd < 1024; ++fd)\n        close(fd);\n\n    fd = open(FNAME, O_RDWR | O_CREAT, S_IRWXU);\n    assert(fd == 3);\n    assert(write(fd, \"1\", 1) == 1);\n\n#define TEST(name) \\\n    printf(\"=== \" #name \" ...\\n\"); \\\n    test_ ## name (fd)\n\n    TEST(F_GETFD_and_F_SETFD);\n    TEST(F_GETFL_and_F_SETFL);\n    TEST(F_DUPFD);\n    TEST(F_DUPFD_CLOEXEC);\n    TEST(F_DUP2FD);\n    TEST(F_DUP2FD_CLOEXEC);\n    TEST(F_GETLK_and_F_SETLK);\n\n    close(fd);\n    unlink(FNAME);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-float-abi/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test-float-abi\nLOCAL_SRC_FILES := test-float.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-float-abi/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\nAPP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/device/crystax-test-float-abi/jni/test-float.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <math.h>\n#include <stdio.h>\n\ndouble foo(double a, double b)\n{\n   return sin(a) + cos(b) + 4.9;\n}\n\ndouble d1 = M_PI;\ndouble d2 = 2.0;\ndouble d3 = -0.007;\ndouble d4 = 0.5;\n\n\nint main()\n{\n    int fail_count = 0;\n    {\n        double d0 = foo(d1,d2);\n        const double expected0 = 4.483853;\n        printf(\"%lf\\n\", d0);\n        fail_count += !(fabs(d0-expected0) < 0.00001);\n    }\n    {\n        double d1 = __builtin_atan2(d3, d4);\n        const double expected1 = -0.013999;\n        printf(\"%lf\\n\", d1);\n        fail_count += !(fabs(d1-expected1) < 0.00001);\n    }\n    return fail_count;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-getauxval/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-getauxval\nLOCAL_SRC_FILES := test.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-getauxval/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-getauxval/jni/test.c",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <stdio.h>\n#include <sys/auxv.h>\n\nint main()\n{\n    unsigned long pz = getauxval(AT_PAGESZ);\n    printf(\"AT_PAGESZ = %lu\",  pz);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/common.mk",
    "content": "SRCFILES := main.cpp\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-iostream\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared\n"
  },
  {
    "path": "tests/device/crystax-test-iostream/jni/main.cpp",
    "content": "// When built with GCC 4.7 for armeabi and run on armeabi emulator under\n// Windows or Mac OS X this test hangs.\n// The reason -- 'include <iostream>'.\n// That is why this test is.\n\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\nint main()\n{\n    std::cout << \"iostream - begin\" << std::endl;\n    std::cout << \"OK\" << std::endl;\n\n    std::ofstream fileOut(\"out\");\n    fileOut << \"34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34\";\n    fileOut.close();\n\n    std::ifstream fileIn(\"out\");\n    fileIn.seekg(12,std::ios::beg);\n    uint16_t data;\n    fileIn >> data;\n\n    if (data != 34) {\n        std::cerr << \"ERROR: read '\" << data << \"' instead of 34\" << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nTEST_LIBCRYSTAX_VFS := false\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-libcrystax\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\n\nLOCAL_SRC_FILES  := \\\n\tmain.cpp \\\n\tlist.cpp \\\n\topen-self.cpp \\\n\nifeq ($(TEST_LIBCRYSTAX_VFS),true)\n\nLOCAL_STATIC_LIBRARIES += crystaxvfs_static\nLOCAL_CFLAGS += -DTEST_LIBCRYSTAXVFS=1\n\nLOCAL_SRC_FILES += \\\n    dirname.cpp \\\n    relpath.cpp \\\n    basename.cpp \\\n    is_subpath.cpp \\\n    absolutize.cpp \\\n    path.cpp \\\n    is_absolute.cpp \\\n    normalize.cpp \\\n    is_normalized.cpp \\\n\nendif\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/absolutize.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::absolutize;\n\nint test_absolutize()\n{\n    char *tmp;\n    bool result;\n\n#ifdef TEST_ABSOLUTIZE\n#undef TEST_ABSOLUTIZE\n#endif\n#define TEST_ABSOLUTIZE(a, b) \\\n    tmp = absolutize(a); \\\n    if (tmp == NULL) \\\n        assert(b == NULL); \\\n    else \\\n    { \\\n        assert(b != NULL); \\\n        result = ::strcmp(tmp, b) == 0; \\\n        ::free((void*)tmp); \\\n        if (!result) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: absolute path is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, tmp, b); \\\n            return 1; \\\n        } \\\n    } \\\n    ::printf(\"ok %d - absolutize\\n\", __LINE__ - start);\n\n    int start = __LINE__;\n    TEST_ABSOLUTIZE(NULL, NULL);\n    TEST_ABSOLUTIZE(\"\", NULL);\n    TEST_ABSOLUTIZE(\"a\", \"/a\");\n    TEST_ABSOLUTIZE(\"/a\", \"/a\");\n    TEST_ABSOLUTIZE(\"a/b/c\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"/a/b/c\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"/a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"a/b/c/\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"/a/b/c/\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"a//\", \"/a\");\n    TEST_ABSOLUTIZE(\"a///\", \"/a\");\n    TEST_ABSOLUTIZE(\"//a\", \"/a\");\n    TEST_ABSOLUTIZE(\"///a\", \"/a\");\n    TEST_ABSOLUTIZE(\"//a//\", \"/a\");\n    TEST_ABSOLUTIZE(\"a//b//c\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"//a//b//c\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"a////////b//////c/////////\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\"///////a/////////b///////////c/////////\", \"/a/b/c\");\n    TEST_ABSOLUTIZE(\".\", \"/\");\n    TEST_ABSOLUTIZE(\"./\", \"/\");\n    TEST_ABSOLUTIZE(\"/.\", \"/\");\n    TEST_ABSOLUTIZE(\"/./\", \"/\");\n    TEST_ABSOLUTIZE(\"./a\", \"/a\");\n    TEST_ABSOLUTIZE(\"a/.\", \"/a\");\n    TEST_ABSOLUTIZE(\"/./a\", \"/a\");\n    TEST_ABSOLUTIZE(\"/a/.\", \"/a\");\n    TEST_ABSOLUTIZE(\"/./a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"/a/./\", \"/a\");\n    TEST_ABSOLUTIZE(\"./././././a/./././\", \"/a\");\n    TEST_ABSOLUTIZE(\"/./././a/.////./\", \"/a\");\n    TEST_ABSOLUTIZE(\"..\", \"/\");\n    TEST_ABSOLUTIZE(\"../\", \"/\");\n    TEST_ABSOLUTIZE(\"/..\", \"/\");\n    TEST_ABSOLUTIZE(\"/../\", \"/\");\n    TEST_ABSOLUTIZE(\"../a\", \"/a\");\n    TEST_ABSOLUTIZE(\"../a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"/../a\", \"/a\");\n    TEST_ABSOLUTIZE(\"/../a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"a/..\", \"/\");\n    TEST_ABSOLUTIZE(\"a/../\", \"/\");\n    TEST_ABSOLUTIZE(\"/a/..\", \"/\");\n    TEST_ABSOLUTIZE(\"/a/../\", \"/\");\n    TEST_ABSOLUTIZE(\"../../../../a\", \"/a\");\n    TEST_ABSOLUTIZE(\"../../../../a/\", \"/a\");\n    TEST_ABSOLUTIZE(\"../../../../a/..\", \"/\");\n    TEST_ABSOLUTIZE(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_ABSOLUTIZE(\"..////./././../../aaa/bb/./..////\", \"/aaa\");\n    TEST_ABSOLUTIZE(\"////./././../..../......//a/b/c/../d//\", \"/..../....../a/b/d\");\n\n#undef TEST_ABSOLUTIZE\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/basename.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::basename;\n\nint test_basename()\n{\n    char *tmp;\n    bool result;\n\n#ifdef TEST_BASENAME\n#undef TEST_BASENAME\n#endif\n#define TEST_BASENAME(a, b) \\\n    tmp = basename(a); \\\n    if (tmp == NULL) \\\n        assert(b == NULL); \\\n    else \\\n    { \\\n        assert(b != NULL); \\\n        result = ::strcmp(tmp, b) == 0; \\\n        ::free((void*)tmp); \\\n        if (!result) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: basename is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, tmp, b); \\\n            return 1; \\\n        } \\\n    } \\\n    ::printf(\"ok %d - basename\\n\", __LINE__ - start);\n\n    int start = __LINE__;\n    TEST_BASENAME(NULL, NULL);\n    TEST_BASENAME(\"\", \"\");\n    TEST_BASENAME(\"a\", \"a\");\n    TEST_BASENAME(\"/a\", \"a\");\n    TEST_BASENAME(\"a/b/c\", \"c\");\n    TEST_BASENAME(\"/a/b/c\", \"c\");\n    TEST_BASENAME(\"a/\", \"a\");\n    TEST_BASENAME(\"/a/\", \"a\");\n    TEST_BASENAME(\"a/b/c/\", \"c\");\n    TEST_BASENAME(\"/a/b/c/\", \"c\");\n    TEST_BASENAME(\"a//\", \"a\");\n    TEST_BASENAME(\"a///\", \"a\");\n    TEST_BASENAME(\"//a\", \"a\");\n    TEST_BASENAME(\"///a\", \"a\");\n    TEST_BASENAME(\"//a//\", \"a\");\n    TEST_BASENAME(\"a//b//c\", \"c\");\n    TEST_BASENAME(\"//a//b//c\", \"c\");\n    TEST_BASENAME(\"a////////b//////c/////////\", \"c\");\n    TEST_BASENAME(\"///////a/////////b///////////c/////////\", \"c\");\n    TEST_BASENAME(\".\", \".\");\n    TEST_BASENAME(\"./\", \".\");\n    TEST_BASENAME(\"/.\", \".\");\n    TEST_BASENAME(\"/./\", \".\");\n    TEST_BASENAME(\"./a\", \"a\");\n    TEST_BASENAME(\"a/.\", \"a\");\n    TEST_BASENAME(\"/./a\", \"a\");\n    TEST_BASENAME(\"/a/.\", \"a\");\n    TEST_BASENAME(\"/./a/\", \"a\");\n    TEST_BASENAME(\"/a/./\", \"a\");\n    TEST_BASENAME(\"./././././a/./././\", \"a\");\n    TEST_BASENAME(\"/./././a/.////./\", \"a\");\n    TEST_BASENAME(\"..\", \"..\");\n    TEST_BASENAME(\"../\", \"..\");\n    TEST_BASENAME(\"/..\", \".\");\n    TEST_BASENAME(\"/../\", \".\");\n    TEST_BASENAME(\"../a\", \"a\");\n    TEST_BASENAME(\"../a/\", \"a\");\n    TEST_BASENAME(\"/../a\", \"a\");\n    TEST_BASENAME(\"/../a/\", \"a\");\n    TEST_BASENAME(\"a/..\", \".\");\n    TEST_BASENAME(\"a/../\", \".\");\n    TEST_BASENAME(\"/a/..\", \".\");\n    TEST_BASENAME(\"/a/../\", \".\");\n    TEST_BASENAME(\"../../../../a\", \"a\");\n    TEST_BASENAME(\"../../../../a/\", \"a\");\n    TEST_BASENAME(\"../../../../a/..\", \"..\");\n    TEST_BASENAME(\"/../../../../a/../../b/c/d/../../../../../..\", \".\");\n    TEST_BASENAME(\"..////./././../../aaa/bb/./..////\", \"aaa\");\n    TEST_BASENAME(\"////./././../..../......//a/b/c/../d//\", \"d\");\n\n#undef TEST_BASENAME\n\n    printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/common.h",
    "content": "#ifndef TEST_LIBCRYSTAX_48f8fbd909ef410d9d798cfacbd1e580\n#define TEST_LIBCRYSTAX_48f8fbd909ef410d9d798cfacbd1e580\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <assert.h>\n#include <string.h>\n#include <crystax.h>\n#include <crystax/common.hpp>\n\nint test_is_normalized();\nint test_normalize();\nint test_is_absolute();\nint test_absolutize();\nint test_is_subpath();\nint test_relpath();\nint test_basename();\nint test_dirname();\nint test_path();\nint test_list();\nint test_open_self();\n\n#endif /* TEST_LIBCRYSTAX_48f8fbd909ef410d9d798cfacbd1e580 */\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/dirname.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::dirname;\n\nint test_dirname()\n{\n    char *tmp;\n    bool result;\n\n#ifdef TEST_DIRNAME\n#undef TEST_DIRNAME\n#endif\n#define TEST_DIRNAME(a, b) \\\n    tmp = dirname(a); \\\n    if (tmp == NULL) \\\n        assert(b == NULL); \\\n    else \\\n    { \\\n        assert(b != NULL); \\\n        result = ::strcmp(tmp, b) == 0; \\\n        ::free((void*)tmp); \\\n        if (!result) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: dirname is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, tmp, b); \\\n            return 1; \\\n        } \\\n    } \\\n    ::printf(\"ok %d - dirname\\n\", __LINE__ - start);\n\n    int start = __LINE__;\n    TEST_DIRNAME(NULL, NULL);\n    TEST_DIRNAME(\"\", \".\");\n    TEST_DIRNAME(\"a\", \".\");\n    TEST_DIRNAME(\"/a\", \"/\");\n    TEST_DIRNAME(\"a/b/c\", \"a/b\");\n    TEST_DIRNAME(\"/a/b/c\", \"/a/b\");\n    TEST_DIRNAME(\"a/\", \".\");\n    TEST_DIRNAME(\"/a/\", \"/\");\n    TEST_DIRNAME(\"a/b/c/\", \"a/b\");\n    TEST_DIRNAME(\"/a/b/c/\", \"/a/b\");\n    TEST_DIRNAME(\"a//\", \".\");\n    TEST_DIRNAME(\"a///\", \".\");\n    TEST_DIRNAME(\"//a\", \"/\");\n    TEST_DIRNAME(\"///a\", \"/\");\n    TEST_DIRNAME(\"//a//\", \"/\");\n    TEST_DIRNAME(\"a//b//c\", \"a/b\");\n    TEST_DIRNAME(\"//a//b//c\", \"/a/b\");\n    TEST_DIRNAME(\"a////////b//////c/////////\", \"a/b\");\n    TEST_DIRNAME(\"///////a/////////b///////////c/////////\", \"/a/b\");\n    TEST_DIRNAME(\".\", \".\");\n    TEST_DIRNAME(\"./\", \".\");\n    TEST_DIRNAME(\"/.\", \"/\");\n    TEST_DIRNAME(\"/./\", \"/\");\n    TEST_DIRNAME(\"./a\", \".\");\n    TEST_DIRNAME(\"a/.\", \".\");\n    TEST_DIRNAME(\"/./a\", \"/\");\n    TEST_DIRNAME(\"/a/.\", \"/\");\n    TEST_DIRNAME(\"/./a/\", \"/\");\n    TEST_DIRNAME(\"/a/./\", \"/\");\n    TEST_DIRNAME(\"./././././a/./././\", \".\");\n    TEST_DIRNAME(\"/./././a/.////./\", \"/\");\n    TEST_DIRNAME(\"..\", \".\");\n    TEST_DIRNAME(\"../\", \".\");\n    TEST_DIRNAME(\"/..\", \"/\");\n    TEST_DIRNAME(\"/../\", \"/\");\n    TEST_DIRNAME(\"../a\", \"..\");\n    TEST_DIRNAME(\"../a/\", \"..\");\n    TEST_DIRNAME(\"/../a\", \"/\");\n    TEST_DIRNAME(\"/../a/\", \"/\");\n    TEST_DIRNAME(\"a/..\", \".\");\n    TEST_DIRNAME(\"a/../\", \".\");\n    TEST_DIRNAME(\"/a/..\", \"/\");\n    TEST_DIRNAME(\"/a/../\", \"/\");\n    TEST_DIRNAME(\"../../../../a\", \"../../../..\");\n    TEST_DIRNAME(\"../../../../a/\", \"../../../..\");\n    TEST_DIRNAME(\"../../../../a/..\", \"../../..\");\n    TEST_DIRNAME(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_DIRNAME(\"..////./././../../aaa/bb/./..////\", \"../../..\");\n    TEST_DIRNAME(\"////./././../..../......//a/b/c/../d//\", \"/..../....../a/b\");\n\n#undef TEST_DIRNAME\n\n    printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/is_absolute.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::is_absolute;\n\nint test_is_absolute()\n{\n#ifndef TEST_ABSOLUTE\n#undef TEST_ABSOLUTE\n#endif\n#ifndef TEST_NOT_ABSOLUTE\n#undef TEST_NOT_ABSOLUTE\n#endif\n\n#define TEST_ABSOLUTE(a) \\\n    if (!is_absolute(a)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is not absolute\\n\", \\\n            __FILE__, __LINE__, a); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - is_absolute\\n\", __LINE__ - start)\n#define TEST_NOT_ABSOLUTE(a) \\\n    if (is_absolute(a)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is absolute\\n\", \\\n            __FILE__, __LINE__, a); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - !is_absolute\\n\", __LINE__ - start)\n\n    int start = __LINE__;\n    TEST_NOT_ABSOLUTE(NULL);\n    TEST_NOT_ABSOLUTE(\"\");\n    TEST_NOT_ABSOLUTE(\"a\");\n    TEST_NOT_ABSOLUTE(\"a/b/c\");\n    TEST_NOT_ABSOLUTE(\"a/b/c/\");\n    TEST_NOT_ABSOLUTE(\"./a\");\n    TEST_NOT_ABSOLUTE(\"../a\");\n    TEST_NOT_ABSOLUTE(\"../a/\");\n    TEST_ABSOLUTE(\"/\");\n    TEST_ABSOLUTE(\"/a/b/c\");\n    TEST_ABSOLUTE(\"/a/b/c/\");\n    TEST_ABSOLUTE(\"/a///b/c\");\n    TEST_ABSOLUTE(\"/a/..//../.././././///a\");\n\n#undef TEST_ABSOLUTE\n#undef TEST_NOT_ABSOLUTE\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/is_normalized.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::is_normalized;\n\nint test_is_normalized()\n{\n#ifndef TEST_NORMALIZED\n#undef TEST_NORMALIZED\n#endif\n#ifndef TEST_NOT_NORMALIZED\n#undef TEST_NOT_NORMALIZED\n#endif\n\n#define TEST_NORMALIZED(a) \\\n    if (!is_normalized(a)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is not normalized\\n\", \\\n            __FILE__, __LINE__, a); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - is_normalized\\n\", __LINE__ - start)\n#define TEST_NOT_NORMALIZED(a) \\\n    if (is_normalized(a)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is normalized\\n\", \\\n            __FILE__, __LINE__, a); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - !is_normalized\\n\", __LINE__ - start)\n\n    int start = __LINE__;\n    TEST_NORMALIZED(NULL);\n    TEST_NORMALIZED(\"\");\n    TEST_NORMALIZED(\"/\");\n    TEST_NORMALIZED(\"/a\");\n    TEST_NORMALIZED(\"a\");\n    TEST_NORMALIZED(\"/a/b/c\");\n    TEST_NORMALIZED(\"a/b/c\");\n    TEST_NOT_NORMALIZED(\"//\");\n    TEST_NOT_NORMALIZED(\"/a/\");\n    TEST_NOT_NORMALIZED(\"a/\");\n    TEST_NOT_NORMALIZED(\"/a/b/c/\");\n    TEST_NOT_NORMALIZED(\"a/b/c/\");\n    TEST_NOT_NORMALIZED(\"/a/b//c\");\n    TEST_NOT_NORMALIZED(\"a/b/c/////d\");\n    TEST_NOT_NORMALIZED(\".\");\n    TEST_NOT_NORMALIZED(\"/./\");\n    TEST_NOT_NORMALIZED(\"/./a\");\n    TEST_NOT_NORMALIZED(\"./\");\n    TEST_NOT_NORMALIZED(\"./a\");\n    TEST_NOT_NORMALIZED(\"..\");\n    TEST_NOT_NORMALIZED(\"/..\");\n    TEST_NOT_NORMALIZED(\"../\");\n    TEST_NOT_NORMALIZED(\"/../\");\n    TEST_NOT_NORMALIZED(\"../a\");\n    TEST_NOT_NORMALIZED(\"/../a\");\n    TEST_NOT_NORMALIZED(\"..\");\n\n#undef DO_TEST\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/is_subpath.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::is_subpath;\n\nint test_is_subpath()\n{\n#ifndef TEST_SUBPATH\n#undef TEST_SUBPATH\n#endif\n#ifndef TEST_NOT_SUBPATH\n#undef TEST_NOT_SUBPATH\n#endif\n\n#define TEST_SUBPATH(root, path) \\\n    if (!is_subpath(root, path)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is not subpath of \\\"%s\\\"\\n\", \\\n            __FILE__, __LINE__, path, root); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - is_subpath\\n\", __LINE__ - start)\n#define TEST_NOT_SUBPATH(root, path) \\\n    if (is_subpath(root, path)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: path \\\"%s\\\" is subpath of \\\"%s\\\"\\n\", \\\n            __FILE__, __LINE__, path, root); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - !is_subpath\\n\", __LINE__ - start)\n\n    int start = __LINE__;\n    TEST_NOT_SUBPATH(NULL, NULL);\n    TEST_NOT_SUBPATH(NULL, \"\");\n    TEST_NOT_SUBPATH(\"\", NULL);\n    TEST_NOT_SUBPATH(\"\", \"\");\n    TEST_NOT_SUBPATH(\"/\", \"\");\n    TEST_NOT_SUBPATH(\".\", \"\");\n    TEST_SUBPATH(\"/\", \"/a\");\n    TEST_SUBPATH(\"/\", \"a\");\n    TEST_SUBPATH(\".\", \"/a\");\n    TEST_SUBPATH(\".\", \"a\");\n    TEST_SUBPATH(\".\", \"./a\");\n    TEST_SUBPATH(\"/a\", \"/a\");\n    TEST_SUBPATH(\"/a\", \"/a/b/c\");\n    TEST_NOT_SUBPATH(\"/a\", \"/\");\n    TEST_NOT_SUBPATH(\"/a/b/c\", \"/a\");\n    TEST_NOT_SUBPATH(\"/a\", \"/b\");\n    TEST_NOT_SUBPATH(\"/a/b/c\", \"/a/d/e\");\n    TEST_NOT_SUBPATH(\"/a/b\", \"/a/bb\");\n\n#undef TEST_SUBPATH\n#undef TEST_NOT_SUBPATH\n\n    printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/list.cpp",
    "content": "#include \"common.h\"\n#include <crystax/memory.hpp>\n#include <crystax/list.hpp>\n\nusing ::crystax::list_t;\nusing ::crystax::scope_cpp_ptr_t;\n\nstruct entry_t\n{\n    int data;\n    entry_t *prev;\n    entry_t *next;\n\n    entry_t(int d) :data(d), prev(0), next(0) {}\n};\n\nint test_list()\n{\n#ifdef TEST_LIST_CHECK\n#undef TEST_LIST_CHECK\n#endif\n#define TEST_LIST_CHECK(x) \\\n    if (!(x)) \\\n    { \\\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: assertion %s failed\\n\", \\\n            __FILE__, __LINE__, #x); \\\n        return 1; \\\n    } \\\n    ::printf(\"ok %d - list\\n\", __LINE__ - start)\n\n    int start = __LINE__;\n\n    list_t<entry_t> list;\n    TEST_LIST_CHECK(list.empty());\n    TEST_LIST_CHECK(list.size() == 0);\n    TEST_LIST_CHECK(list.head() == 0);\n    TEST_LIST_CHECK(list.tail() == 0);\n\n    TEST_LIST_CHECK(list.push(0, 0) == false);\n\n    TEST_LIST_CHECK(list.push_back(new entry_t(1)) == true);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 1);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 1);\n\n    list.clear();\n    TEST_LIST_CHECK(list.empty());\n    TEST_LIST_CHECK(list.size() == 0);\n    TEST_LIST_CHECK(list.head() == 0);\n    TEST_LIST_CHECK(list.tail() == 0);\n\n    TEST_LIST_CHECK(list.push_front(new entry_t(1)) == true);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 1);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 1);\n\n    TEST_LIST_CHECK(list.push_back(new entry_t(2)) == true);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 2);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() != list.tail());\n    TEST_LIST_CHECK(list.head()->next == list.tail());\n    TEST_LIST_CHECK(list.head() == list.tail()->prev);\n    TEST_LIST_CHECK(list.head()->data == 1);\n    TEST_LIST_CHECK(list.tail()->data == 2);\n\n    TEST_LIST_CHECK(list.push_back(new entry_t(3)) == true);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 3);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail()->prev->prev);\n    TEST_LIST_CHECK(list.head()->next == list.tail()->prev);\n    TEST_LIST_CHECK(list.head()->next->next == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 1);\n    TEST_LIST_CHECK(list.head()->next->data == 2);\n    TEST_LIST_CHECK(list.head()->next->next->data = 3);\n\n    TEST_LIST_CHECK(list.push(list.head()->next, new entry_t(4)) == true);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 4);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail()->prev->prev->prev);\n    TEST_LIST_CHECK(list.head()->next == list.tail()->prev->prev);\n    TEST_LIST_CHECK(list.head()->next->next == list.tail()->prev);\n    TEST_LIST_CHECK(list.head()->next->next->next == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 1);\n    TEST_LIST_CHECK(list.head()->next->data == 2);\n    TEST_LIST_CHECK(list.head()->next->next->data == 4);\n    TEST_LIST_CHECK(list.head()->next->next->next->data == 3);\n\n    scope_cpp_ptr_t<entry_t> e(list.pop(list.head()->next->next));\n    TEST_LIST_CHECK(e);\n    TEST_LIST_CHECK(e->data == 4);\n    TEST_LIST_CHECK(e->next == 0);\n    TEST_LIST_CHECK(e->prev == 0);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 3);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail()->prev->prev);\n    TEST_LIST_CHECK(list.head()->next == list.tail()->prev);\n    TEST_LIST_CHECK(list.head()->next->next == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 1);\n    TEST_LIST_CHECK(list.head()->next->data == 2);\n    TEST_LIST_CHECK(list.head()->next->next->data = 3);\n\n    e.reset(list.pop_front());\n    TEST_LIST_CHECK(e);\n    TEST_LIST_CHECK(e->data == 1);\n    TEST_LIST_CHECK(e->next == 0);\n    TEST_LIST_CHECK(e->prev == 0);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 2);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail()->prev);\n    TEST_LIST_CHECK(list.head()->next == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 2);\n    TEST_LIST_CHECK(list.head()->next->data == 3);\n\n    e.reset(list.pop_back());\n    TEST_LIST_CHECK(e);\n    TEST_LIST_CHECK(e->data == 3);\n    TEST_LIST_CHECK(e->next == 0);\n    TEST_LIST_CHECK(e->prev == 0);\n    TEST_LIST_CHECK(list.empty() == false);\n    TEST_LIST_CHECK(list.size() == 1);\n    TEST_LIST_CHECK(list.head() != 0);\n    TEST_LIST_CHECK(list.tail() != 0);\n    TEST_LIST_CHECK(list.head() == list.tail());\n    TEST_LIST_CHECK(list.head()->data == 2);\n\n    e.reset(list.pop(list.head()));\n    TEST_LIST_CHECK(e);\n    TEST_LIST_CHECK(e->data == 2);\n    TEST_LIST_CHECK(e->next == 0);\n    TEST_LIST_CHECK(e->prev == 0);\n    TEST_LIST_CHECK(list.empty() == true);\n    TEST_LIST_CHECK(list.size() == 0);\n    TEST_LIST_CHECK(list.head() == 0);\n    TEST_LIST_CHECK(list.tail() == 0);\n\n    e.reset(list.pop_back());\n    TEST_LIST_CHECK(!e);\n    TEST_LIST_CHECK(list.empty() == true);\n    TEST_LIST_CHECK(list.size() == 0);\n    TEST_LIST_CHECK(list.head() == 0);\n    TEST_LIST_CHECK(list.tail() == 0);\n\n#undef TEST_LIST_CHECK\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/main.cpp",
    "content": "#include \"common.h\"\n\nint main()\n{\n#ifdef DO_TEST\n#undef DO_TEST\n#endif\n#define DO_TEST(name) if (test_ ## name () != 0) return 1\n\n#if TEST_LIBCRYSTAX_VFS\n    DO_TEST(is_normalized);\n    DO_TEST(normalize);\n    DO_TEST(is_absolute);\n    DO_TEST(absolutize);\n    DO_TEST(is_subpath);\n    DO_TEST(relpath);\n    DO_TEST(basename);\n    DO_TEST(dirname);\n    DO_TEST(path);\n#endif\n    DO_TEST(list);\n    DO_TEST(open_self);\n\n#undef DO_TEST\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/normalize.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::normalize;\n\nint test_normalize()\n{\n    char *tmp;\n    bool result;\n\n#ifdef TEST_NORMALIZE\n#undef TEST_NORMALIZE\n#endif\n#define TEST_NORMALIZE(a, b) \\\n    tmp = normalize(a); \\\n    if (tmp == NULL) \\\n        assert(b == NULL); \\\n    else \\\n    { \\\n        assert(b != NULL); \\\n        result = ::strcmp(tmp, b) == 0; \\\n        ::free((void*)tmp); \\\n        if (!result) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: normalized path is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, tmp, b); \\\n            return 1; \\\n        } \\\n    } \\\n    ::printf(\"ok %d - normalize\\n\", __LINE__ - start);\n\n    int start = __LINE__;\n    TEST_NORMALIZE(NULL, NULL);\n    TEST_NORMALIZE(\"\", \"\");\n    TEST_NORMALIZE(\"a\", \"a\");\n    TEST_NORMALIZE(\"/a\", \"/a\");\n    TEST_NORMALIZE(\"a/b/c\", \"a/b/c\");\n    TEST_NORMALIZE(\"/a/b/c\", \"/a/b/c\");\n    TEST_NORMALIZE(\"a/\", \"a\");\n    TEST_NORMALIZE(\"/a/\", \"/a\");\n    TEST_NORMALIZE(\"a/b/c/\", \"a/b/c\");\n    TEST_NORMALIZE(\"/a/b/c/\", \"/a/b/c\");\n    TEST_NORMALIZE(\"a//\", \"a\");\n    TEST_NORMALIZE(\"a///\", \"a\");\n    TEST_NORMALIZE(\"//a\", \"/a\");\n    TEST_NORMALIZE(\"///a\", \"/a\");\n    TEST_NORMALIZE(\"//a//\", \"/a\");\n    TEST_NORMALIZE(\"a//b//c\", \"a/b/c\");\n    TEST_NORMALIZE(\"//a//b//c\", \"/a/b/c\");\n    TEST_NORMALIZE(\"a////////b//////c/////////\", \"a/b/c\");\n    TEST_NORMALIZE(\"///////a/////////b///////////c/////////\", \"/a/b/c\");\n    TEST_NORMALIZE(\".\", \".\");\n    TEST_NORMALIZE(\"./\", \".\");\n    TEST_NORMALIZE(\"/.\", \"/\");\n    TEST_NORMALIZE(\"/./\", \"/\");\n    TEST_NORMALIZE(\"./a\", \"a\");\n    TEST_NORMALIZE(\"a/.\", \"a\");\n    TEST_NORMALIZE(\"/./a\", \"/a\");\n    TEST_NORMALIZE(\"/a/.\", \"/a\");\n    TEST_NORMALIZE(\"/./a/\", \"/a\");\n    TEST_NORMALIZE(\"/a/./\", \"/a\");\n    TEST_NORMALIZE(\"./././././a/./././\", \"a\");\n    TEST_NORMALIZE(\"/./././a/.////./\", \"/a\");\n    TEST_NORMALIZE(\"..\", \"..\");\n    TEST_NORMALIZE(\"../\", \"..\");\n    TEST_NORMALIZE(\"/..\", \"/\");\n    TEST_NORMALIZE(\"/../\", \"/\");\n    TEST_NORMALIZE(\"../a\", \"../a\");\n    TEST_NORMALIZE(\"../a/\", \"../a\");\n    TEST_NORMALIZE(\"/../a\", \"/a\");\n    TEST_NORMALIZE(\"/../a/\", \"/a\");\n    TEST_NORMALIZE(\"a/..\", \".\");\n    TEST_NORMALIZE(\"a/../\", \".\");\n    TEST_NORMALIZE(\"/a/..\", \"/\");\n    TEST_NORMALIZE(\"/a/../\", \"/\");\n    TEST_NORMALIZE(\"../../../../a\", \"../../../../a\");\n    TEST_NORMALIZE(\"../../../../a/\", \"../../../../a\");\n    TEST_NORMALIZE(\"../../../../a/..\", \"../../../..\");\n    TEST_NORMALIZE(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_NORMALIZE(\"..////./././../../aaa/bb/./..////\", \"../../../aaa\");\n    TEST_NORMALIZE(\"////./././../..../......//a/b/c/../d//\", \"/..../....../a/b/d\");\n    TEST_NORMALIZE(\"././//./../..../......//a/b/c/../d//\", \"../..../....../a/b/d\");\n\n#undef TEST_NORMALIZE\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/open-self.cpp",
    "content": "#include \"common.h\"\n\nint test_open_self()\n{\n    const char *s = \"/proc/self/cmdline\";\n    FILE* fp = fopen(s, \"rb\");\n    if (!fp)\n    {\n        ::fprintf(stderr, \\\n            \"FAIL at %s:%d: can't open \\\"%s\\\"\\n\", \\\n            __FILE__, __LINE__, s);\n        return 1;\n    }\n\n    printf(\"ok\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/path.cpp",
    "content": "#include \"common.h\"\n#include <crystax/path.hpp>\n\nusing ::crystax::fileio::path_t;\nusing ::crystax::fileio::abspath_t;\n\nint test_path()\n{\n#ifdef TEST_PATH\n#undef TEST_PATH\n#endif\n#ifdef TEST_ABSPATH\n#undef TEST_ABSPATH\n#endif\n\n#define TEST_PATH(a, b) \\\n    { \\\n        path_t p(a); \\\n        bool ok = !b ? !p : p && ::strcmp(p.c_str(), b) == 0; \\\n        if (!ok) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: path is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, p.c_str(), b); \\\n            return 1; \\\n        } \\\n        ::printf(\"ok %d - path\\n\", __LINE__ - start); \\\n    }\n\n#define TEST_ABSPATH(a, b) \\\n    { \\\n        abspath_t p(a); \\\n        bool ok = !b ? !p : p &&::strcmp(p.c_str(), b) == 0; \\\n        if (!ok) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: path is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, p.c_str(), b); \\\n            return 1; \\\n        } \\\n        ::printf(\"ok %d - abspath\\n\", __LINE__ - start); \\\n    }\n\n    int start = __LINE__;\n    TEST_PATH(NULL, NULL);\n    TEST_PATH(\"\", \"\");\n    TEST_PATH(\"a\", \"a\");\n    TEST_PATH(\"/a\", \"/a\");\n    TEST_PATH(\"a/b/c\", \"a/b/c\");\n    TEST_PATH(\"/a/b/c\", \"/a/b/c\");\n    TEST_PATH(\"a/\", \"a\");\n    TEST_PATH(\"/a/\", \"/a\");\n    TEST_PATH(\"a///\", \"a\");\n    TEST_PATH(\"a////////b//////c/////////\", \"a/b/c\");\n    TEST_PATH(\"./././././a/./././\", \"a\");\n    TEST_PATH(\"../../../../a\", \"../../../../a\");\n    TEST_PATH(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_PATH(\"..////./././../../aaa/bb/./..////\", \"../../../aaa\");\n    TEST_PATH(\"././//./../..../......//a/b/c/../d//\", \"../..../....../a/b/d\");\n    TEST_ABSPATH(NULL, NULL);\n    TEST_ABSPATH(\"\", NULL);\n    TEST_ABSPATH(\"a\", \"/a\");\n    TEST_ABSPATH(\"/a\", \"/a\");\n    TEST_ABSPATH(\"a/b/c\", \"/a/b/c\");\n    TEST_ABSPATH(\"/a/b/c\", \"/a/b/c\");\n    TEST_ABSPATH(\"a/\", \"/a\");\n    TEST_ABSPATH(\"/a/\", \"/a\");\n    TEST_ABSPATH(\"a///\", \"/a\");\n    TEST_ABSPATH(\"a////////b//////c/////////\", \"/a/b/c\");\n    TEST_ABSPATH(\"./././././a/./././\", \"/a\");\n    TEST_ABSPATH(\"../../../../a\", \"/a\");\n    TEST_ABSPATH(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_ABSPATH(\"..////./././../../aaa/bb/./..////\", \"/aaa\");\n    TEST_ABSPATH(\"././//./../..../......//a/b/c/../d//\", \"/..../....../a/b/d\");\n\n#if 0\n    TEST_NORMALIZE(\"/../../../../a/../../b/c/d/../../../../../..\", \"/\");\n    TEST_NORMALIZE(\"..////./././../../aaa/bb/./..////\", \"../../../aaa\");\n    TEST_NORMALIZE(\"////./././../..../......//a/b/c/../d//\", \"/..../....../a/b/d\");\n#endif\n\n#undef TEST_PATH\n#undef TEST_ABSPATH\n\n    ::printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libcrystax/jni/relpath.cpp",
    "content": "#include \"common.h\"\n\nusing ::crystax::fileio::relpath;\n\nint test_relpath()\n{\n    char *tmp;\n    bool result;\n\n#ifdef TEST_RELPATH\n#undef TEST_RELPATH\n#endif\n#define TEST_RELPATH(root, path, expected) \\\n    tmp = relpath(root, path); \\\n    if (tmp == NULL) \\\n        assert(expected == NULL); \\\n    else \\\n    { \\\n        assert(expected != NULL); \\\n        result = ::strcmp(tmp, expected) == 0; \\\n        ::free((void*)tmp); \\\n        if (!result) \\\n        { \\\n            ::fprintf(stderr, \\\n                \"FAIL at %s:%d: relative path is \\\"%s\\\", but expected \\\"%s\\\"\\n\", \\\n                __FILE__, __LINE__, tmp, expected); \\\n            return 1; \\\n        } \\\n    } \\\n    ::printf(\"ok %d - relpath\\n\", __LINE__ - start);\n\n    int start = __LINE__;\n    TEST_RELPATH(\"/\", \"/a\", \"a\");\n    TEST_RELPATH(\"/\", \"a\", \"a\");\n    TEST_RELPATH(\"/a\", \"/a/b/c\", \"b/c\");\n    TEST_RELPATH(\"/a\", \"/aa\", NULL);\n    TEST_RELPATH(\"a/b\", \"a/b/c\", \"c\");\n    TEST_RELPATH(\"a/b\", \"a/bb/c\", NULL);\n    TEST_RELPATH(\"a/../b/.///./c\", \"a\", NULL);\n    TEST_RELPATH(\"a/../b/.///./c\", \"./e//./..//b/./f///../c//d/\", \"d\");\n\n#undef TEST_RELPATH\n\n    printf(\"ok\\n\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libjpeg-static\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libjpeg_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libjpeg-shared\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libjpeg_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,libjpeg/9b)\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg/jni/test.c",
    "content": "#include <stdio.h>\n#include <jpeglib.h>\n\nint main()\n{\n    struct jpeg_compress_struct cinfo;\n    jpeg_create_compress(&cinfo);\n    jpeg_destroy_compress(&cinfo);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg-turbo/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libjpeg-turbo-static\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libjpeg_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libjpeg-turbo-shared\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libjpeg_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,libjpeg_turbo/1.4.2)\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg-turbo/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-libjpeg-turbo/jni/test.c",
    "content": "#include <stdio.h>\n#include <jpeglib.h>\n\nint main()\n{\n    struct jpeg_compress_struct cinfo;\n    jpeg_create_compress(&cinfo);\n    jpeg_destroy_compress(&cinfo);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-libkqueue/config.h",
    "content": "#include <android/api-level.h>\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define to 1 if you have the <sys/eventfd.h> header file. */\n#define HAVE_SYS_EVENTFD_H 1\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n#define HAVE_SYS_INOTIFY_H 1\n\n/* Define to 1 if you have the <sys/signalfd.h> header file. */\n#if __ANDROID_API__ >= 21\n#define HAVE_SYS_SIGNALFD_H 1\n#endif\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/timerfd.h> header file. */\n#if __ANDROID_API__ >= 21\n#define HAVE_SYS_TIMERFD_H 1\n#endif\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n"
  },
  {
    "path": "tests/device/crystax-test-libkqueue/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq (,$(strip $(NDK)))\nNDK := $(abspath $(LOCAL_PATH)/../../../..)\nendif\n\nTDIR := $(NDK)/sources/crystax/tests/libkqueue\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-libkqueue\nLOCAL_SRC_FILES  := $(addprefix $(TDIR)/,\\\n\tmain.c   \\\n\tkevent.c \\\n\ttest.c   \\\n\tread.c   \\\n\tsignal.c \\\n\ttimer.c  \\\n\tvnode.c  \\\n\tuser.c   \\\n)\nLOCAL_CFLAGS     := -Wall -Wextra -Werror\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-libkqueue/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-libpng/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libpng-static\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libpng_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-libpng-shared\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := libpng_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,libpng/1.6.29)\n"
  },
  {
    "path": "tests/device/crystax-test-libpng/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-libpng/jni/test.c",
    "content": "#include <stdio.h>\n#include <png.h>\n\nint main()\n{\n    printf(\"libpng version: (%lu):%s\\n\", (unsigned long)png_access_version_number(), png_get_header_version(NULL));\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-locales/common.mk",
    "content": "CTESTS :=      \\\n\tsetlocale  \\\n\tstrfmon    \\\n\tstrftime   \\\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-locales/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-locales/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))\n\ninclude ../common.mk\n\nCFLAGS += -I../jni\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=test-$(1).c CFLAGS=\"$(CFLAGS)\" TARGETNAME=test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=test-$(1).c\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-locales/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-locales/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-locale-$(1)\nLOCAL_SRC_FILES  := test-$(1).c\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-case,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-locales/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-locales/jni/test-setlocale.c",
    "content": "#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n\nvoid test(int category, const char *locale)\n{\n    const char *cs;\n    const char *nl;\n\n    switch (category)\n    {\n#define CSD(x) case x : cs = #x ; break\n        CSD(LC_ALL);\n        CSD(LC_COLLATE);\n        CSD(LC_CTYPE);\n        CSD(LC_MONETARY);\n        CSD(LC_NUMERIC);\n        CSD(LC_TIME);\n        CSD(LC_MESSAGES);\n#undef CSD\n    default:\n        fprintf(stderr, \"Unknown locale category: %d\\n\", category);\n        abort();\n    }\n\n    fprintf(stderr, \"checking %s / %s ... \", cs, locale);\n\n    nl = setlocale(category, locale);\n    if (nl == NULL || strcmp(nl, locale) != 0) {\n        fprintf(stderr, \"FAILED\\n\");\n        abort();\n    }\n\n    fprintf(stderr, \"OK\\n\");\n}\n\nint main()\n{\n    size_t i, j;\n\n    int categories[] = {\n        LC_ALL,\n        LC_COLLATE,\n        LC_CTYPE,\n        LC_MONETARY,\n        LC_NUMERIC,\n        LC_TIME,\n        LC_MESSAGES,\n    };\n\n    const char *locales[] = {\n        \"C\",\n#if !__gnu_linux__\n        \"POSIX\",\n#endif\n        \"en_US.UTF-8\",\n        \"fi_FI.UTF-8\",\n        \"sv_SE.ISO8859-1\",\n#if !__gnu_linux__\n        \"no_NO.ISO8859-15\",\n#endif\n        \"ru_RU.CP1251\",\n        \"ru_RU.UTF-8\",\n        \"tr_TR.UTF-8\",\n        \"zh_CN.UTF-8\",\n    };\n\n    for (i = 0; i < sizeof(categories)/sizeof(categories[0]); ++i)\n        for (j = 0; j < sizeof(locales)/sizeof(locales[0]); ++j)\n            test(categories[i], locales[j]);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-locales/jni/test-strfmon.c",
    "content": "#include <locale.h>\n#include <monetary.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <ctype.h>\n#include <assert.h>\n\nvoid test(const char *locale, double v, const char *fmt, ...)\n{\n    char buf[1024];\n    const char *s;\n    va_list args;\n    int matched = 0;\n\n    fprintf(stderr, \"checking %s ...\\n\", locale);\n\n    assert(setlocale(LC_MONETARY, locale));\n    assert(strfmon(buf, sizeof(buf), fmt, v) != -1);\n\n    for (s = buf; isspace(*s) || *s == '\\0'; ++s);\n\n    va_start(args, fmt);\n\n    for (;;) {\n        const char *expected = va_arg(args, const char *);\n        if (!expected)\n            break;\n\n        if (strlen(s) == strlen(expected) && memcmp(s, expected, strlen(s)) == 0) {\n            fprintf(stderr, \"strfmon(\\\"%s\\\") matched to \\\"%s\\\"\\n\", fmt, expected);\n            matched = 1;\n            break;\n        }\n\n        fprintf(stderr, \"WARNING: strfmon(\\\"%s\\\") returned [%s] --> expected [%s] for locale \\\"%s\\\"\\n\",\n                fmt, s, expected, locale);\n    }\n\n    if (!matched) {\n        fprintf(stderr, \"ERROR: None of variants above matched result of strfmon() call\\n\");\n        abort();\n    }\n\n    va_end(args);\n}\n\nint main()\n{\n    double v = 13653.6783;\n    const char *fmt = \"%.2n\";\n\n#define C_EXPECTED      \"13653.68\"\n#define EN_US_EXPECTED \"$13,653.68\"\n#define SV_SE_EXPECTED \"13 653,68 kr\"\n#define ZH_CN_EXPECTED \"￥13,653.68\"\n\n#if __ANDROID__\n#define FI_FI_EXPECTED \"13.653,68€\"\n#define RU_RU_EXPECTED \"13 653,68 руб.\"\n#define TR_TR_EXPECTED \"L 13.653,68\"\n#else\n#define FI_FI_EXPECTED \"13.653,68€\", \"13.653,68Eu\", \"13 653,68 €\", \"13 653,68€\"\n#define RU_RU_EXPECTED \"13 653,68 руб.\", \"13 653.68 руб\"\n#define TR_TR_EXPECTED \"L 13.653,68\", \"13.653,68 YTL\", \"13.653,68 TL\"\n#endif\n\n#if !__gnu_linux__\n#define NO_NO_EXPECTED \"kr13.653,68\"\n#endif\n\n    test(\"C\",                v, fmt, C_EXPECTED,     NULL);\n    test(\"en_US.UTF-8\",      v, fmt, EN_US_EXPECTED, NULL);\n    test(\"fi_FI.UTF-8\",      v, fmt, FI_FI_EXPECTED, NULL);\n    test(\"sv_SE.ISO8859-1\",  v, fmt, SV_SE_EXPECTED, NULL);\n    test(\"ru_RU.UTF-8\",      v, fmt, RU_RU_EXPECTED, NULL);\n    test(\"tr_TR.UTF-8\",      v, fmt, TR_TR_EXPECTED, NULL);\n    test(\"zh_CN.UTF-8\",      v, fmt, ZH_CN_EXPECTED, NULL);\n\n#ifdef NO_NO_EXPECTED\n    test(\"no_NO.ISO8859-15\", v, fmt, NO_NO_EXPECTED, NULL);\n#endif\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-locales/jni/test-strftime.c",
    "content": "#include <time.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nvoid test(const char *locale, struct tm *tm, const char *fmt, const char *expected)\n{\n    char buf[1024];\n\n    setlocale(LC_TIME, locale);\n    strftime(buf, sizeof(buf), fmt, tm);\n    if (strcmp(buf, expected) != 0)\n    {\n        fprintf(stderr, \"ERROR: strftime(\\\"%s\\\") returned [%s] --> expected [%s] for locale \\\"%s\\\"\\n\",\n                fmt, buf, expected, locale);\n        abort();\n    }\n}\n\nint main()\n{\n    const char *fmt = \"%x\";\n    time_t t = (time_t)1411902244;\n    struct tm *tm = localtime(&t);\n\n    test(\"C\",               tm, fmt, \"09/28/14\");\n    test(\"en_US.UTF-8\",     tm, fmt, \"09/28/2014\");\n    test(\"ru_RU.CP1251\",    tm, fmt, \"28.09.2014\");\n    test(\"sv_SE.ISO8859-1\", tm, fmt, \"2014-09-28\");\n#if !__gnu_linux__\n    test(\"tr_TR.ISO8859-9\", tm, fmt, \"28/09/2014\");\n    test(\"zh_CN.UTF-8\",     tm, fmt, \"2014/09/28\");\n#endif\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/common.mk",
    "content": "# These tests are broken.\n# TODO: fix them. See also https://tracker.crystax.net/issues/932\n#CTESTS :=       \\\n#    cexp        \\\n#    csqrt       \\\n#    ctrig       \\\n#    exponential \\\n#    fenv        \\\n#    fma         \\\n#    invctrig    \\\n#    invtrig     \\\n#    logarithm   \\\n#    lrint       \\\n#    lround      \\\n#    nan         \\\n#    nearbyint   \\\n#    next        \\\n#    rem         \\\n#    trig        \\\n\nCTESTS :=        \\\n\tconj         \\\n\tfmaxmin      \\\n\tilogb        \\\n\nCFLAGS := -fno-builtin\nCFLAGS += -Wall -Wextra -Werror\nCFLAGS += -Wno-sign-compare\nCFLAGS += -Wno-unused-parameter\nCFLAGS += -Wno-unused-variable\nCFLAGS += -Wno-unused-function\nCFLAGS += -Wno-unused-value\nCFLAGS += -Wno-unknown-pragmas\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-msun/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-msun/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))\n\ninclude ../common.mk\n\nCFLAGS += -I../jni\n\nifeq (yes,$(shell uname -s | grep -iq linux && echo yes))\nCFLAGS += -D_GNU_SOURCE=1\nendif\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=test-$(1).c CFLAGS=\"$(CFLAGS)\" TARGETNAME=test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=test-$(1).c\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-msun/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-msun-$(1)\nLOCAL_SRC_FILES  := test-$(1).c\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-case,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-cexp.c",
    "content": "/*-\n * Copyright (c) 2008-2011 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for corner cases in cexp*().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <complex.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#define\tN(i)\t(sizeof(i) / sizeof((i)[0]))\n\n#pragma STDC FENV_ACCESS\tON\n#pragma\tSTDC CX_LIMITED_RANGE\tOFF\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT. In some cases,\n * whether cexp() raises an invalid exception is unspecified.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, z, result, exceptmask, excepts, checksign)\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(cfpequal_cs((func)(_d), (result), (checksign)));\t\t\\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n/* Test within a given tolerance. */\n#define\ttest_tol(func, z, result, tol)\t\t\t\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tassert(cfpequal_tol((func)(_d), (result), (tol),\t\t\\\n\t    FPE_ABS_ZERO | CS_BOTH));\t\t\t\t\t\\\n} while (0)\n\n/* Test all the functions that compute cexp(x). */\n#define\ttestall(x, result, exceptmask, excepts, checksign)\tdo {\t\\\n\ttest(cexp, x, result, exceptmask, excepts, checksign);\t\t\\\n\ttest(cexpf, x, result, exceptmask, excepts, checksign);\t\t\\\n} while (0)\n\n/*\n * Test all the functions that compute cexp(x), within a given tolerance.\n * The tolerance is specified in ulps.\n */\n#define\ttestall_tol(x, result, tol)\t\t\t\tdo {\t\\\n\ttest_tol(cexp, x, result, tol * DBL_ULP());\t\t\t\\\n\ttest_tol(cexpf, x, result, tol * FLT_ULP());\t\t\t\\\n} while (0)\n\n/* Various finite non-zero numbers to test. */\nstatic const float finites[] =\n{ -42.0e20, -1.0, -1.0e-10, -0.0, 0.0, 1.0e-10, 1.0, 42.0e20 };\n\n\n/* Tests for 0 */\nvoid\ntest_zero(void)\n{\n\n\t/* cexp(0) = 1, no exceptions raised */\n#if !__gnu_linux__\n\ttestall(0.0, 1.0, ALL_STD_EXCEPT, 0, 1);\n\ttestall(-0.0, 1.0, ALL_STD_EXCEPT, 0, 1);\n#if !__APPLE__\n\ttestall(CMPLXL(0.0, -0.0), CMPLXL(1.0, -0.0), ALL_STD_EXCEPT, 0, 1);\n\ttestall(CMPLXL(-0.0, -0.0), CMPLXL(1.0, -0.0), ALL_STD_EXCEPT, 0, 1);\n#endif /* !__APPLE__ */\n#endif /* !__gnu_linux__ */\n}\n\n/*\n * Tests for NaN.  The signs of the results are indeterminate unless the\n * imaginary part is 0.\n */\nvoid\ntest_nan()\n{\n\tint i;\n\n\t/* cexp(x + NaNi) = NaN + NaNi and optionally raises invalid */\n\t/* cexp(NaN + yi) = NaN + NaNi and optionally raises invalid (|y|>0) */\n\tfor (i = 0; i < N(finites); i++) {\n#if !__APPLE__\n\t\ttestall(CMPLXL(finites[i], NAN), CMPLXL(NAN, NAN),\n\t\t\tALL_STD_EXCEPT & ~FE_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\t\tif (finites[i] == 0.0)\n\t\t\tcontinue;\n\t\t/* XXX FE_INEXACT shouldn't be raised here */\n\t\ttestall(CMPLXL(NAN, finites[i]), CMPLXL(NAN, NAN),\n\t\t\tALL_STD_EXCEPT & ~(FE_INVALID | FE_INEXACT), 0, 0);\n\t}\n\n\t/* cexp(NaN +- 0i) = NaN +- 0i */\n\ttestall(CMPLXL(NAN, 0.0), CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, 1);\n\ttestall(CMPLXL(NAN, -0.0), CMPLXL(NAN, -0.0), ALL_STD_EXCEPT, 0, 1);\n\n\t/* cexp(inf + NaN i) = inf + nan i */\n\ttestall(CMPLXL(INFINITY, NAN), CMPLXL(INFINITY, NAN),\n\t\tALL_STD_EXCEPT, 0, 0);\n\t/* cexp(-inf + NaN i) = 0 */\n\ttestall(CMPLXL(-INFINITY, NAN), CMPLXL(0.0, 0.0),\n\t\tALL_STD_EXCEPT, 0, 0);\n\t/* cexp(NaN + NaN i) = NaN + NaN i */\n\ttestall(CMPLXL(NAN, NAN), CMPLXL(NAN, NAN),\n\t\tALL_STD_EXCEPT, 0, 0);\n}\n\nvoid\ntest_inf(void)\n{\n\tint i;\n\n#if !__APPLE__\n\t/* cexp(x + inf i) = NaN + NaNi and raises invalid */\n\tfor (i = 0; i < N(finites); i++) {\n\t\ttestall(CMPLXL(finites[i], INFINITY), CMPLXL(NAN, NAN),\n\t\t\tALL_STD_EXCEPT, FE_INVALID, 1);\n\t}\n#endif /* !__APPLE__ */\n\t/* cexp(-inf + yi) = 0 * (cos(y) + sin(y)i) */\n\t/* XXX shouldn't raise an inexact exception */\n\ttestall(CMPLXL(-INFINITY, M_PI_4), CMPLXL(0.0, 0.0),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(-INFINITY, 3 * M_PI_4), CMPLXL(-0.0, 0.0),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(-INFINITY, 5 * M_PI_4), CMPLXL(-0.0, -0.0),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(-INFINITY, 7 * M_PI_4), CMPLXL(0.0, -0.0),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(-INFINITY, 0.0), CMPLXL(0.0, 0.0),\n\t\tALL_STD_EXCEPT, 0, 1);\n#if !__APPLE__\n\ttestall(CMPLXL(-INFINITY, -0.0), CMPLXL(0.0, -0.0),\n\t\tALL_STD_EXCEPT, 0, 1);\n#endif /* !__APPLE__ */\n\t/* cexp(inf + yi) = inf * (cos(y) + sin(y)i) (except y=0) */\n\t/* XXX shouldn't raise an inexact exception */\n\ttestall(CMPLXL(INFINITY, M_PI_4), CMPLXL(INFINITY, INFINITY),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(INFINITY, 3 * M_PI_4), CMPLXL(-INFINITY, INFINITY),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(INFINITY, 5 * M_PI_4), CMPLXL(-INFINITY, -INFINITY),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\ttestall(CMPLXL(INFINITY, 7 * M_PI_4), CMPLXL(INFINITY, -INFINITY),\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\t/* cexp(inf + 0i) = inf + 0i */\n\ttestall(CMPLXL(INFINITY, 0.0), CMPLXL(INFINITY, 0.0),\n\t\tALL_STD_EXCEPT, 0, 1);\n#if !__APPLE__\n\ttestall(CMPLXL(INFINITY, -0.0), CMPLXL(INFINITY, -0.0),\n\t\tALL_STD_EXCEPT, 0, 1);\n#endif /* !__APPLE__ */\n}\n\nvoid\ntest_reals(void)\n{\n\tint i;\n\n\tfor (i = 0; i < N(finites); i++) {\n\t\t/* XXX could check exceptions more meticulously */\n\t\ttest(cexp, CMPLXL(finites[i], 0.0),\n\t\t     CMPLXL(exp(finites[i]), 0.0),\n\t\t     FE_INVALID | FE_DIVBYZERO, 0, 1);\n#if !__APPLE__\n\t\ttest(cexp, CMPLXL(finites[i], -0.0),\n\t\t     CMPLXL(exp(finites[i]), -0.0),\n\t\t     FE_INVALID | FE_DIVBYZERO, 0, 1);\n#endif /* !__APPLE__ */\n\t\ttest(cexpf, CMPLXL(finites[i], 0.0),\n\t\t     CMPLXL(expf(finites[i]), 0.0),\n\t\t     FE_INVALID | FE_DIVBYZERO, 0, 1);\n#if !__APPLE__\n\t\ttest(cexpf, CMPLXL(finites[i], -0.0),\n\t\t     CMPLXL(expf(finites[i]), -0.0),\n\t\t     FE_INVALID | FE_DIVBYZERO, 0, 1);\n#endif /* !__APPLE__ */\n\t}\n}\n\nvoid\ntest_imaginaries(void)\n{\n#if !__APPLE__\n\tint i;\n\n\tfor (i = 0; i < N(finites); i++) {\n\t\ttest(cexp, CMPLXL(0.0, finites[i]),\n\t\t     CMPLXL(cos(finites[i]), sin(finites[i])),\n\t\t     ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\t\ttest(cexp, CMPLXL(-0.0, finites[i]),\n\t\t     CMPLXL(cos(finites[i]), sin(finites[i])),\n\t\t     ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\t\ttest(cexpf, CMPLXL(0.0, finites[i]),\n\t\t     CMPLXL(cosf(finites[i]), sinf(finites[i])),\n\t\t     ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\t\ttest(cexpf, CMPLXL(-0.0, finites[i]),\n\t\t     CMPLXL(cosf(finites[i]), sinf(finites[i])),\n\t\t     ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);\n\t}\n#endif /* !__APPLE__ */\n}\n\nvoid\ntest_small(void)\n{\n\tstatic const double tests[] = {\n\t     /* csqrt(a + bI) = x + yI */\n\t     /* a\tb\tx\t\t\ty */\n\t\t 1.0,\tM_PI_4,\tM_SQRT2 * 0.5 * M_E,\tM_SQRT2 * 0.5 * M_E,\n\t\t-1.0,\tM_PI_4,\tM_SQRT2 * 0.5 / M_E,\tM_SQRT2 * 0.5 / M_E,\n\t\t 2.0,\tM_PI_2,\t0.0,\t\t\tM_E * M_E,\n\t\t M_LN2,\tM_PI,\t-2.0,\t\t\t0.0,\n\t};\n\tdouble a, b;\n\tdouble x, y;\n\tint i;\n\n\tfor (i = 0; i < N(tests); i += 4) {\n\t\ta = tests[i];\n\t\tb = tests[i + 1];\n\t\tx = tests[i + 2];\n\t\ty = tests[i + 3];\n\t\ttest_tol(cexp, CMPLXL(a, b), CMPLXL(x, y), 3 * DBL_ULP());\n\n\t\t/* float doesn't have enough precision to pass these tests */\n\t\tif (x == 0 || y == 0)\n\t\t\tcontinue;\n\t\ttest_tol(cexpf, CMPLXL(a, b), CMPLXL(x, y), 1 * FLT_ULP());\n        }\n}\n\n/* Test inputs with a real part r that would overflow exp(r). */\nvoid\ntest_large(void)\n{\n\n\ttest_tol(cexp, CMPLXL(709.79, 0x1p-1074),\n\t\t CMPLXL(INFINITY, 8.94674309915433533273e-16), DBL_ULP());\n\ttest_tol(cexp, CMPLXL(1000, 0x1p-1074),\n\t\t CMPLXL(INFINITY, 9.73344457300016401328e+110), DBL_ULP());\n\ttest_tol(cexp, CMPLXL(1400, 0x1p-1074),\n\t\t CMPLXL(INFINITY, 5.08228858149196559681e+284), DBL_ULP());\n\ttest_tol(cexp, CMPLXL(900, 0x1.23456789abcdep-1020),\n\t\t CMPLXL(INFINITY, 7.42156649354218408074e+83), DBL_ULP());\n\ttest_tol(cexp, CMPLXL(1300, 0x1.23456789abcdep-1020),\n\t\t CMPLXL(INFINITY, 3.87514844965996756704e+257), DBL_ULP());\n\n\ttest_tol(cexpf, CMPLXL(88.73, 0x1p-149),\n\t\t CMPLXL(INFINITY, 4.80265603e-07), 2 * FLT_ULP());\n\ttest_tol(cexpf, CMPLXL(90, 0x1p-149),\n\t\t CMPLXL(INFINITY, 1.7101492622e-06f), 2 * FLT_ULP());\n\ttest_tol(cexpf, CMPLXL(192, 0x1p-149),\n\t\t CMPLXL(INFINITY, 3.396809344e+38f), 2 * FLT_ULP());\n\ttest_tol(cexpf, CMPLXL(120, 0x1.234568p-120),\n\t\t CMPLXL(INFINITY, 1.1163382522e+16f), 2 * FLT_ULP());\n\ttest_tol(cexpf, CMPLXL(170, 0x1.234568p-120),\n\t\t CMPLXL(INFINITY, 5.7878851079e+37f), 2 * FLT_ULP());\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..7\\n\");\n\n\ttest_zero();\n\tprintf(\"ok 1 - cexp zero\\n\");\n\n\ttest_nan();\n\tprintf(\"ok 2 - cexp nan\\n\");\n\n\ttest_inf();\n\tprintf(\"ok 3 - cexp inf\\n\");\n\n\ttest_reals();\n\tprintf(\"ok 4 - cexp reals\\n\");\n\n\ttest_imaginaries();\n\tprintf(\"ok 5 - cexp imaginaries\\n\");\n\n\ttest_small();\n\tprintf(\"ok 6 - cexp small\\n\");\n\n\ttest_large();\n\tprintf(\"ok 7 - cexp large\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-conj.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for conj{,f,l}()\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <complex.h>\n#include <fenv.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#pragma\tSTDC CX_LIMITED_RANGE\toff\n\n/* Make sure gcc doesn't use builtin versions of these or honor __pure2. */\nstatic float complex (*libconjf)(float complex) = conjf;\nstatic double complex (*libconj)(double complex) = conj;\nstatic long double complex (*libconjl)(long double complex) = conjl;\nstatic float (*libcrealf)(float complex) = crealf;\nstatic double (*libcreal)(double complex) = creal;\nstatic long double (*libcreall)(long double complex) = creall;\nstatic float (*libcimagf)(float complex) = cimagf;\nstatic double (*libcimag)(double complex) = cimag;\nstatic long double (*libcimagl)(long double complex) = cimagl;\n\nstatic const double tests[] = {\n\t/* a +  bI */\n\t0.0,\t0.0,\n\t0.0,\t1.0,\n\t1.0,\t0.0,\n\t-1.0,\t0.0,\n\t1.0,\t-0.0,\n\t0.0,\t-1.0,\n\t2.0,\t4.0,\n\t0.0,\tINFINITY,\n\t0.0,\t-INFINITY,\n\tINFINITY, 0.0,\n\tNAN,\t1.0,\n\t1.0,\tNAN,\n\tNAN,\tNAN,\n\t-INFINITY, INFINITY,\n};\n\nint\nmain(int argc, char *argv[])\n{\n\tstatic const int ntests = sizeof(tests) / sizeof(tests[0]) / 2;\n\tcomplex float in;\n\tcomplex long double expected;\n\tint i;\n\n\tprintf(\"1..%d\\n\", ntests * 3);\n\n\tfor (i = 0; i < ntests; i++) {\n\t\t__real__ expected = __real__ in = tests[2 * i];\n\t\t__imag__ in = tests[2 * i + 1];\n\t\t__imag__ expected = -cimag(in);\n\n\t\tassert(fpequal(libcrealf(in), __real__ in));\n\t\tassert(fpequal(libcreal(in), __real__ in));\n\t\tassert(fpequal(libcreall(in), __real__ in));\n\t\tassert(fpequal(libcimagf(in), __imag__ in));\n\t\tassert(fpequal(libcimag(in), __imag__ in));\n\t\tassert(fpequal(libcimagl(in), __imag__ in));\t\t\n\n\t\tfeclearexcept(FE_ALL_EXCEPT);\n\t\tif (!cfpequal(libconjf(in), expected)) {\n\t\t\tprintf(\"not ok %d\\t# conjf(%#.2g + %#.2gI): \"\n\t\t\t       \"wrong value\\n\",\n\t\t\t       3 * i + 1, creal(in), cimag(in));\n\t\t} else if (fetestexcept(FE_ALL_EXCEPT)) {\n\t\t\tprintf(\"not ok %d\\t# conjf(%#.2g + %#.2gI): \"\n\t\t\t       \"threw an exception\\n\",\n\t\t\t       3 * i + 1, creal(in), cimag(in));\n\t\t} else {\n\t\t\tprintf(\"ok %d\\t\\t# conjf(%#.2g + %#.2gI)\\n\",\n\t\t\t       3 * i + 1, creal(in), cimag(in));\n\t\t}\n\n\t\tfeclearexcept(FE_ALL_EXCEPT);\n\t\tif (!cfpequal(libconj(in), expected)) {\n\t\t\tprintf(\"not ok %d\\t# conj(%#.2g + %#.2gI): \"\n\t\t\t       \"wrong value\\n\",\n\t\t\t       3 * i + 2, creal(in), cimag(in));\n\t\t} else if (fetestexcept(FE_ALL_EXCEPT)) {\n\t\t\tprintf(\"not ok %d\\t# conj(%#.2g + %#.2gI): \"\n\t\t\t       \"threw an exception\\n\",\n\t\t\t       3 * i + 2, creal(in), cimag(in));\n\t\t} else {\n\t\t\tprintf(\"ok %d\\t\\t# conj(%#.2g + %#.2gI)\\n\",\n\t\t\t       3 * i + 2, creal(in), cimag(in));\n\t\t}\n\n\t\tfeclearexcept(FE_ALL_EXCEPT);\n\t\tif (!cfpequal(libconjl(in), expected)) {\n\t\t\tprintf(\"not ok %d\\t# conjl(%#.2g + %#.2gI): \"\n\t\t\t       \"wrong value\\n\",\n\t\t\t       3 * i + 3, creal(in), cimag(in));\n\t\t} else if (fetestexcept(FE_ALL_EXCEPT)) {\n\t\t\tprintf(\"not ok %d\\t# conjl(%#.2g + %#.2gI): \"\n\t\t\t       \"threw an exception\\n\",\n\t\t\t       3 * i + 3, creal(in), cimag(in));\n\t\t} else {\n\t\t\tprintf(\"ok %d\\t\\t# conjl(%#.2g + %#.2gI)\\n\",\n\t\t\t       3 * i + 3, creal(in), cimag(in));\n\t\t}\n\t}\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-csqrt.c",
    "content": "/*-\n * Copyright (c) 2007 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for csqrt{,f}()\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <complex.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#define\tN(i)\t(sizeof(i) / sizeof((i)[0]))\n\n/*\n * This is a test hook that can point to csqrtl(), _csqrt(), or to _csqrtf().\n * The latter two convert to float or double, respectively, and test csqrtf()\n * and csqrt() with the same arguments.\n */\nlong double complex (*t_csqrt)(long double complex);\n\nstatic long double complex\n_csqrtf(long double complex d)\n{\n\n\treturn (csqrtf((float complex)d));\n}\n\nstatic long double complex\n_csqrt(long double complex d)\n{\n\n\treturn (csqrt((double complex)d));\n}\n\n#pragma\tSTDC CX_LIMITED_RANGE\toff\n\n/*\n * Compare d1 and d2 using special rules: NaN == NaN and +0 != -0.\n * Fail an assertion if they differ.\n */\nstatic void\nassert_equal(long double complex d1, long double complex d2)\n{\n\n\tassert(cfpequal(d1, d2));\n}\n\n/*\n * Test csqrt for some finite arguments where the answer is exact.\n * (We do not test if it produces correctly rounded answers when the\n * result is inexact, nor do we check whether it throws spurious\n * exceptions.)\n */\nstatic void\ntest_finite()\n{\n#if !__APPLE__\n\tstatic const double tests[] = {\n\t     /* csqrt(a + bI) = x + yI */\n\t     /* a\tb\tx\ty */\n\t\t0,\t8,\t2,\t2,\n\t\t0,\t-8,\t2,\t-2,\n\t\t4,\t0,\t2,\t0,\n\t\t-4,\t0,\t0,\t2,\n\t\t3,\t4,\t2,\t1,\n\t\t3,\t-4,\t2,\t-1,\n\t\t-3,\t4,\t1,\t2,\n\t\t-3,\t-4,\t1,\t-2,\n\t\t5,\t12,\t3,\t2,\n\t\t7,\t24,\t4,\t3,\n\t\t9,\t40,\t5,\t4,\n\t\t11,\t60,\t6,\t5,\n\t\t13,\t84,\t7,\t6,\n\t\t33,\t56,\t7,\t4,\n\t\t39,\t80,\t8,\t5,\n\t\t65,\t72,\t9,\t4,\n\t\t987,\t9916,\t74,\t67,\n\t\t5289,\t6640,\t83,\t40,\n\t\t460766389075.0, 16762287900.0, 678910, 12345\n\t};\n\t/*\n\t * We also test some multiples of the above arguments. This\n\t * array defines which multiples we use. Note that these have\n\t * to be small enough to not cause overflow for float precision\n\t * with all of the constants in the above table.\n\t */\n\tstatic const double mults[] = {\n\t\t1,\n\t\t2,\n\t\t3,\n\t\t13,\n\t\t16,\n\t\t0x1.p30,\n\t\t0x1.p-30,\n\t};\n\n\tdouble a, b;\n\tdouble x, y;\n\tint i, j;\n\n\tfor (i = 0; i < N(tests); i += 4) {\n\t\tfor (j = 0; j < N(mults); j++) {\n\t\t\ta = tests[i] * mults[j] * mults[j];\n\t\t\tb = tests[i + 1] * mults[j] * mults[j];\n\t\t\tx = tests[i + 2] * mults[j];\n\t\t\ty = tests[i + 3] * mults[j];\n\t\t\tassert(t_csqrt(CMPLXL(a, b)) == CMPLXL(x, y));\n\t\t}\n\t}\n#endif /* !__APPLE__ */\n}\n\n/*\n * Test the handling of +/- 0.\n */\nstatic void\ntest_zeros()\n{\n\n\tassert_equal(t_csqrt(CMPLXL(0.0, 0.0)), CMPLXL(0.0, 0.0));\n\tassert_equal(t_csqrt(CMPLXL(-0.0, 0.0)), CMPLXL(0.0, 0.0));\n\tassert_equal(t_csqrt(CMPLXL(0.0, -0.0)), CMPLXL(0.0, -0.0));\n\tassert_equal(t_csqrt(CMPLXL(-0.0, -0.0)), CMPLXL(0.0, -0.0));\n}\n\n/*\n * Test the handling of infinities when the other argument is not NaN.\n */\nstatic void\ntest_infinities()\n{\n\tstatic const double vals[] = {\n\t\t0.0,\n\t\t-0.0,\n\t\t42.0,\n\t\t-42.0,\n\t\tINFINITY,\n\t\t-INFINITY,\n\t};\n\n\tint i;\n\n\tfor (i = 0; i < N(vals); i++) {\n\t\tif (isfinite(vals[i])) {\n\t\t\tassert_equal(t_csqrt(CMPLXL(-INFINITY, vals[i])),\n\t\t\t    CMPLXL(0.0, copysignl(INFINITY, vals[i])));\n\t\t\tassert_equal(t_csqrt(CMPLXL(INFINITY, vals[i])),\n\t\t\t    CMPLXL(INFINITY, copysignl(0.0, vals[i])));\n\t\t}\n\t\tassert_equal(t_csqrt(CMPLXL(vals[i], INFINITY)),\n\t\t    CMPLXL(INFINITY, INFINITY));\n\t\tassert_equal(t_csqrt(CMPLXL(vals[i], -INFINITY)),\n\t\t    CMPLXL(INFINITY, -INFINITY));\n\t}\n}\n\n/*\n * Test the handling of NaNs.\n */\nstatic void\ntest_nans()\n{\n\n\tassert(creall(t_csqrt(CMPLXL(INFINITY, NAN))) == INFINITY);\n\tassert(isnan(cimagl(t_csqrt(CMPLXL(INFINITY, NAN)))));\n\n\tassert(isnan(creall(t_csqrt(CMPLXL(-INFINITY, NAN)))));\n\tassert(isinf(cimagl(t_csqrt(CMPLXL(-INFINITY, NAN)))));\n\n\tassert_equal(t_csqrt(CMPLXL(NAN, INFINITY)),\n\t\t     CMPLXL(INFINITY, INFINITY));\n\tassert_equal(t_csqrt(CMPLXL(NAN, -INFINITY)),\n\t\t     CMPLXL(INFINITY, -INFINITY));\n\n\tassert_equal(t_csqrt(CMPLXL(0.0, NAN)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(-0.0, NAN)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(42.0, NAN)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(-42.0, NAN)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(NAN, 0.0)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(NAN, -0.0)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(NAN, 42.0)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(NAN, -42.0)), CMPLXL(NAN, NAN));\n\tassert_equal(t_csqrt(CMPLXL(NAN, NAN)), CMPLXL(NAN, NAN));\n}\n\n/*\n * Test whether csqrt(a + bi) works for inputs that are large enough to\n * cause overflow in hypot(a, b) + a. In this case we are using\n *\tcsqrt(115 + 252*I) == 14 + 9*I\n * scaled up to near MAX_EXP.\n */\nstatic void\ntest_overflow(int maxexp)\n{\n\tlong double a, b;\n\tlong double complex result;\n\n\ta = ldexpl(115 * 0x1p-8, maxexp);\n\tb = ldexpl(252 * 0x1p-8, maxexp);\n\tresult = t_csqrt(CMPLXL(a, b));\n\tassert(creall(result) == ldexpl(14 * 0x1p-4, maxexp / 2));\n\tassert(cimagl(result) == ldexpl(9 * 0x1p-4, maxexp / 2));\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..15\\n\");\n\n\t/* Test csqrt() */\n\tt_csqrt = _csqrt;\n\n\ttest_finite();\n\tprintf(\"ok 1 - csqrt\\n\");\n\n\ttest_zeros();\n\tprintf(\"ok 2 - csqrt\\n\");\n\n\ttest_infinities();\n\tprintf(\"ok 3 - csqrt\\n\");\n\n\ttest_nans();\n\tprintf(\"ok 4 - csqrt\\n\");\n\n\ttest_overflow(DBL_MAX_EXP);\n\tprintf(\"ok 5 - csqrt\\n\");\n\n\t/* Now test csqrtf() */\n\tt_csqrt = _csqrtf;\n\n\ttest_finite();\n\tprintf(\"ok 6 - csqrt\\n\");\n\n\ttest_zeros();\n\tprintf(\"ok 7 - csqrt\\n\");\n\n\ttest_infinities();\n\tprintf(\"ok 8 - csqrt\\n\");\n\n\ttest_nans();\n\tprintf(\"ok 9 - csqrt\\n\");\n\n\ttest_overflow(FLT_MAX_EXP);\n\tprintf(\"ok 10 - csqrt\\n\");\n\n\t/* Now test csqrtl() */\n\tt_csqrt = csqrtl;\n\n\ttest_finite();\n\tprintf(\"ok 11 - csqrt\\n\");\n\n\ttest_zeros();\n\tprintf(\"ok 12 - csqrt\\n\");\n\n\ttest_infinities();\n\tprintf(\"ok 13 - csqrt\\n\");\n\n\ttest_nans();\n\tprintf(\"ok 14 - csqrt\\n\");\n\n\ttest_overflow(LDBL_MAX_EXP);\n\tprintf(\"ok 15 - csqrt\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-ctrig.c",
    "content": "/*-\n * Copyright (c) 2008-2011 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for csin[h](), ccos[h](), and ctan[h]().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <complex.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#pragma STDC FENV_ACCESS\tON\n#pragma\tSTDC CX_LIMITED_RANGE\tOFF\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest_p(func, z, result, exceptmask, excepts, checksign)\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tdebug(\"  testing %s(%Lg + %Lg I) == %Lg + %Lg I\\n\", #func,\t\\\n\t    creall(_d), cimagl(_d), creall(result), cimagl(result));\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(cfpequal_cs((func)(_d), (result), (checksign)));\t\t\\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n/*\n * Test within a given tolerance.  The tolerance indicates relative error\n * in ulps.  If result is 0, however, it measures absolute error in units\n * of <format>_EPSILON.\n */\n#define\ttest_p_tol(func, z, result, tol)\t\t\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tdebug(\"  testing %s(%Lg + %Lg I) ~= %Lg + %Lg I\\n\", #func,\t\\\n\t    creall(_d), cimagl(_d), creall(result), cimagl(result));\t\\\n\tassert(cfpequal_tol((func)(_d), (result), (tol), FPE_ABS_ZERO)); \\\n} while (0)\n\n/* These wrappers apply the identities f(conj(z)) = conj(f(z)). */\n#define\ttest(func, z, result, exceptmask, excepts, checksign)\tdo {\t\\\n\ttest_p(func, z, result, exceptmask, excepts, checksign);\t\\\n\ttest_p(func, conjl(z), conjl(result), exceptmask, excepts, checksign); \\\n} while (0)\n#define\ttest_tol(func, z, result, tol)\t\t\t\tdo {\t\\\n\ttest_p_tol(func, z, result, tol);\t\t\t\t\\\n\ttest_p_tol(func, conjl(z), conjl(result), tol);\t\t\t\\\n} while (0)\n#define\ttest_odd_tol(func, z, result, tol)\t\t\tdo {\t\\\n\ttest_tol(func, z, result, tol);\t\t\t\t\t\\\n\ttest_tol(func, -(z), -(result), tol);\t\t\t\t\\\n} while (0)\n#define\ttest_even_tol(func, z, result, tol)\t\t\tdo {\t\\\n\ttest_tol(func, z, result, tol);\t\t\t\t\t\\\n\ttest_tol(func, -(z), result, tol);\t\t\t\t\\\n} while (0)\n\n/* Test the given function in all precisions. */\n#define\ttestall(func, x, result, exceptmask, excepts, checksign) do {\t\\\n\ttest(func, x, result, exceptmask, excepts, checksign);\t\t\\\n\ttest(func##f, x, result, exceptmask, excepts, checksign);\t\\\n} while (0)\n#define\ttestall_odd(func, x, result, exceptmask, excepts, checksign) do { \\\n\ttestall(func, x, result, exceptmask, excepts, checksign);\t\\\n\ttestall(func, -x, -result, exceptmask, excepts, checksign);\t\\\n} while (0)\n#define\ttestall_even(func, x, result, exceptmask, excepts, checksign) do { \\\n\ttestall(func, x, result, exceptmask, excepts, checksign);\t\\\n\ttestall(func, -x, result, exceptmask, excepts, checksign);\t\\\n} while (0)\n\n/*\n * Test the given function in all precisions, within a given tolerance.\n * The tolerance is specified in ulps.\n */\n#define\ttestall_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttest_tol(func, x, result, tol * DBL_ULP());\t\t\t\\\n\ttest_tol(func##f, x, result, tol * FLT_ULP());\t\t\t\\\n} while (0)\n#define\ttestall_odd_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttest_odd_tol(func, x, result, tol * DBL_ULP());\t\t\t\\\n\ttest_odd_tol(func##f, x, result, tol * FLT_ULP());\t\t\\\n} while (0)\n#define\ttestall_even_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttest_even_tol(func, x, result, tol * DBL_ULP());\t\t\\\n\ttest_even_tol(func##f, x, result, tol * FLT_ULP());\t\t\\\n} while (0)\n\n\n/* Tests for 0 */\nvoid\ntest_zero(void)\n{\n#if !__gnu_linux__\n\tlong double complex zero = CMPLXL(0.0, 0.0);\n\n\t/* csinh(0) = ctanh(0) = 0; ccosh(0) = 1 (no exceptions raised) */\n\ttestall_odd(csinh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_odd(csin, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_even(ccosh, zero, 1.0, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_even(ccos, zero, CMPLXL(1.0, -0.0), ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_odd(ctanh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_odd(ctan, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n#endif /* !__gnu_linux__ */\n}\n\n/*\n * Tests for NaN inputs.\n */\nvoid\ntest_nan()\n{\n\tlong double complex nan_nan = CMPLXL(NAN, NAN);\n\tlong double complex z;\n\n\t/*\n\t * IN\t\tCSINH\t\tCCOSH\t\tCTANH\n\t * NaN,NaN\tNaN,NaN\t\tNaN,NaN\t\tNaN,NaN\n\t * finite,NaN\tNaN,NaN [inval]\tNaN,NaN [inval]\tNaN,NaN [inval]\n\t * NaN,finite\tNaN,NaN [inval]\tNaN,NaN [inval]\tNaN,NaN [inval]\n\t * NaN,Inf\tNaN,NaN [inval]\tNaN,NaN\t[inval]\tNaN,NaN [inval]\n\t * Inf,NaN\t+-Inf,NaN\tInf,NaN\t\t1,+-0\n\t * 0,NaN\t+-0,NaN\t\tNaN,+-0\t\tNaN,NaN\t[inval]\n\t * NaN,0\tNaN,0\t\tNaN,+-0\t\tNaN,0\n\t */\n\tz = nan_nan;\n\ttestall_odd(csinh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccosh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctanh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(csin, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccos, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctan, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\n\tz = CMPLXL(42, NAN);\n#if !__APPLE__\n\ttestall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall_odd(ctanh, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);\n\ttestall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);\n\n\tz = CMPLXL(NAN, 42);\n\ttestall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);\n#if !__APPLE__\n\ttestall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall_odd(ctan, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);\n\n\tz = CMPLXL(NAN, INFINITY);\n\ttestall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(csin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccos, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,\n\t    CS_IMAG);\n\ttestall_odd(ctan, z, CMPLXL(0, 1), ALL_STD_EXCEPT, 0, CS_IMAG);\n\n\tz = CMPLXL(INFINITY, NAN);\n\ttestall_odd(csinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,\n\t\t     CS_REAL);\n\ttestall_odd(ctanh, z, CMPLXL(1, 0), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);\n\n\tz = CMPLXL(0, NAN);\n\ttestall_odd(csinh, z, CMPLXL(0, NAN), ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccosh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(csin, z, CMPLXL(0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall_even(ccos, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctan, z, CMPLXL(0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n\n\tz = CMPLXL(NAN, 0);\n\ttestall_odd(csinh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);\n\ttestall_even(ccosh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctanh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);\n\ttestall_odd(csin, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, 0);\n\ttestall_even(ccos, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);\n}\n\nvoid\ntest_inf(void)\n{\n\tstatic const long double finites[] = {\n\t    0, M_PI / 4, 3 * M_PI / 4, 5 * M_PI / 4,\n\t};\n\tlong double complex z, c, s;\n\tint i;\n\n#if !__APPLE__\n\t/*\n\t * IN\t\tCSINH\t\tCCOSH\t\tCTANH\n\t * Inf,Inf\t+-Inf,NaN inval\t+-Inf,NaN inval\t1,+-0\n\t * Inf,finite\tInf cis(finite)\tInf cis(finite)\t1,0 sin(2 finite)\n\t * 0,Inf\t+-0,NaN\tinval\tNaN,+-0 inval\tNaN,NaN\tinval\n\t * finite,Inf\tNaN,NaN inval\tNaN,NaN inval\tNaN,NaN inval\n\t */\n\tz = CMPLXL(INFINITY, INFINITY);\n\ttestall_odd(csinh, z, CMPLXL(INFINITY, NAN),\n\t\t    ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccosh, z, CMPLXL(INFINITY, NAN),\n\t\t     ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_odd(ctanh, z, CMPLXL(1, 0), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall_odd(csin, z, CMPLXL(NAN, INFINITY),\n\t\t    ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccos, z, CMPLXL(INFINITY, NAN),\n\t\t     ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_odd(ctan, z, CMPLXL(0, 1), ALL_STD_EXCEPT, 0, CS_REAL);\n#endif /* !__APPLE__ */\n\n\t/* XXX We allow spurious inexact exceptions here (hard to avoid). */\n\tfor (i = 0; i < sizeof(finites) / sizeof(finites[0]); i++) {\n\t\tz = CMPLXL(INFINITY, finites[i]);\n\t\tc = INFINITY * cosl(finites[i]);\n\t\ts = finites[i] == 0 ? finites[i] : INFINITY * sinl(finites[i]);\n\t\ttestall_odd(csinh, z, CMPLXL(c, s), OPT_INEXACT, 0, CS_BOTH);\n\t\ttestall_even(ccosh, z, CMPLXL(c, s), OPT_INEXACT, 0, CS_BOTH);\n#if !__APPLE__ && !__gnu_linux__\n\t\ttestall_odd(ctanh, z, CMPLXL(1, 0 * sin(finites[i] * 2)),\n\t\t\t    OPT_INEXACT, 0, CS_BOTH);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\t\tz = CMPLXL(finites[i], INFINITY);\n\t\ttestall_odd(csin, z, CMPLXL(s, c), OPT_INEXACT, 0, CS_BOTH);\n\t\ttestall_even(ccos, z, CMPLXL(c, -s), OPT_INEXACT, 0, CS_BOTH);\n#if !__APPLE__ && !__gnu_linux__\n\t\ttestall_odd(ctan, z, CMPLXL(0 * sin(finites[i] * 2), 1),\n\t\t\t    OPT_INEXACT, 0, CS_BOTH);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\t}\n\n\tz = CMPLXL(0, INFINITY);\n\ttestall_odd(csinh, z, CMPLXL(0, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccosh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_odd(ctanh, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n\tz = CMPLXL(INFINITY, 0);\n\ttestall_odd(csin, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccos, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_odd(ctan, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n\n\tz = CMPLXL(42, INFINITY);\n#if !__APPLE__\n\ttestall_odd(csinh, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccosh, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n#endif /* !__APPLE__ */\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall_odd(ctanh, z, CMPLXL(NAN, NAN), OPT_INEXACT, FE_INVALID, 0);\n\tz = CMPLXL(INFINITY, 42);\n#if !__APPLE__\n\ttestall_odd(csin, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n\ttestall_even(ccos, z, CMPLXL(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);\n#endif /* !__APPLE__ */\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall_odd(ctan, z, CMPLXL(NAN, NAN), OPT_INEXACT, FE_INVALID, 0);\n}\n\n/* Tests along the real and imaginary axes. */\nvoid\ntest_axes(void)\n{\n\tstatic const long double nums[] = {\n\t    M_PI / 4, M_PI / 2, 3 * M_PI / 4,\n\t    5 * M_PI / 4, 3 * M_PI / 2, 7 * M_PI / 4,\n\t};\n\tlong double complex z;\n\tint i;\n\n\tfor (i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {\n\t\t/* Real axis */\n\t\tz = CMPLXL(nums[i], 0.0);\n\t\ttest_odd_tol(csinh, z, CMPLXL(sinh(nums[i]), 0), DBL_ULP());\n\t\ttest_even_tol(ccosh, z, CMPLXL(cosh(nums[i]), 0), DBL_ULP());\n#if !__APPLE__ && !__gnu_linux__\n\t\ttest_odd_tol(ctanh, z, CMPLXL(tanh(nums[i]), 0), DBL_ULP());\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\t\ttest_odd_tol(csin, z, CMPLXL(sin(nums[i]),\n\t\t    copysign(0, cos(nums[i]))), DBL_ULP());\n\t\ttest_even_tol(ccos, z, CMPLXL(cos(nums[i]),\n\t\t    -copysign(0, sin(nums[i]))), DBL_ULP());\n\t\ttest_odd_tol(ctan, z, CMPLXL(tan(nums[i]), 0), DBL_ULP());\n\n\t\ttest_odd_tol(csinhf, z, CMPLXL(sinhf(nums[i]), 0), FLT_ULP());\n\t\ttest_even_tol(ccoshf, z, CMPLXL(coshf(nums[i]), 0), FLT_ULP());\n\t\tprintf(\"%a %a\\n\", creal(z), cimag(z));\n\t\tprintf(\"%a %a\\n\", creal(ctanhf(z)), cimag(ctanhf(z)));\n\t\tprintf(\"%a\\n\", nextafterf(tanhf(nums[i]), INFINITY));\n#if !__gnu_linux__\n\t\ttest_odd_tol(ctanhf, z, CMPLXL(tanhf(nums[i]), 0),\n\t\t\t     1.3 * FLT_ULP());\n#endif /* !__gnu_linux__ */\n\t\ttest_odd_tol(csinf, z, CMPLXL(sinf(nums[i]),\n\t\t    copysign(0, cosf(nums[i]))), FLT_ULP());\n\t\ttest_even_tol(ccosf, z, CMPLXL(cosf(nums[i]),\n\t\t    -copysign(0, sinf(nums[i]))), 2 * FLT_ULP());\n\t\ttest_odd_tol(ctanf, z, CMPLXL(tanf(nums[i]), 0), FLT_ULP());\n\n\t\t/* Imaginary axis */\n\t\tz = CMPLXL(0.0, nums[i]);\n\t\ttest_odd_tol(csinh, z, CMPLXL(copysign(0, cos(nums[i])),\n\t\t\t\t\t\t sin(nums[i])), DBL_ULP());\n\t\ttest_even_tol(ccosh, z, CMPLXL(cos(nums[i]),\n\t\t    copysign(0, sin(nums[i]))), DBL_ULP());\n\t\ttest_odd_tol(ctanh, z, CMPLXL(0, tan(nums[i])), DBL_ULP());\n\t\ttest_odd_tol(csin, z, CMPLXL(0, sinh(nums[i])), DBL_ULP());\n\t\ttest_even_tol(ccos, z, CMPLXL(cosh(nums[i]), -0.0), DBL_ULP());\n#if !__APPLE__ && !__gnu_linux__\n\t\ttest_odd_tol(ctan, z, CMPLXL(0, tanh(nums[i])), DBL_ULP());\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\n\t\ttest_odd_tol(csinhf, z, CMPLXL(copysign(0, cosf(nums[i])),\n\t\t\t\t\t\t sinf(nums[i])), FLT_ULP());\n\t\ttest_even_tol(ccoshf, z, CMPLXL(cosf(nums[i]),\n\t\t    copysign(0, sinf(nums[i]))), FLT_ULP());\n\t\ttest_odd_tol(ctanhf, z, CMPLXL(0, tanf(nums[i])), FLT_ULP());\n\t\ttest_odd_tol(csinf, z, CMPLXL(0, sinhf(nums[i])), FLT_ULP());\n\t\ttest_even_tol(ccosf, z, CMPLXL(coshf(nums[i]), -0.0),\n\t\t\t      FLT_ULP());\n#if !__gnu_linux__\n\t\ttest_odd_tol(ctanf, z, CMPLXL(0, tanhf(nums[i])),\n\t\t\t     1.3 * FLT_ULP());\n#endif /* !__gnu_linux__ */\n\t}\n}\n\nvoid\ntest_small(void)\n{\n\t/*\n\t * z =  0.5 + i Pi/4\n\t *     sinh(z) = (sinh(0.5) + i cosh(0.5)) * sqrt(2)/2\n\t *     cosh(z) = (cosh(0.5) + i sinh(0.5)) * sqrt(2)/2\n\t *     tanh(z) = (2cosh(0.5)sinh(0.5) + i) / (2 cosh(0.5)**2 - 1)\n\t * z = -0.5 + i Pi/2\n\t *     sinh(z) = cosh(0.5)\n\t *     cosh(z) = -i sinh(0.5)\n\t *     tanh(z) = -coth(0.5)\n\t * z =  1.0 + i 3Pi/4\n\t *     sinh(z) = (-sinh(1) + i cosh(1)) * sqrt(2)/2\n\t *     cosh(z) = (-cosh(1) + i sinh(1)) * sqrt(2)/2\n\t *     tanh(z) = (2cosh(1)sinh(1) - i) / (2cosh(1)**2 - 1)\n\t */\n\tstatic const struct {\n\t\tlong double a, b;\n\t\tlong double sinh_a, sinh_b;\n\t\tlong double cosh_a, cosh_b;\n\t\tlong double tanh_a, tanh_b;\n\t} tests[] = {\n\t\t{  0.5L,\n\t\t   0.78539816339744830961566084581987572L,\n\t\t   0.36847002415910435172083660522240710L,\n\t\t   0.79735196663945774996093142586179334L,\n\t\t   0.79735196663945774996093142586179334L,\n\t\t   0.36847002415910435172083660522240710L,\n\t\t   0.76159415595576488811945828260479359L,\n\t\t   0.64805427366388539957497735322615032L },\n\t\t{ -0.5L,\n\t\t   1.57079632679489661923132169163975144L,\n\t\t   0.0L,\n\t\t   1.12762596520638078522622516140267201L,\n\t\t   0.0L,\n\t\t  -0.52109530549374736162242562641149156L,\n\t\t  -2.16395341373865284877000401021802312L,\n\t\t   0.0L },\n\t\t{  1.0L,\n\t\t   2.35619449019234492884698253745962716L,\n\t\t  -0.83099273328405698212637979852748608L,\n\t\t   1.09112278079550143030545602018565236L,\n\t\t  -1.09112278079550143030545602018565236L,\n\t\t   0.83099273328405698212637979852748609L,\n\t\t   0.96402758007581688394641372410092315L,\n\t\t  -0.26580222883407969212086273981988897L }\n\t};\n\tlong double complex z;\n\tint i;\n\n\tfor (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {\n\t\tz = CMPLXL(tests[i].a, tests[i].b);\n\t\ttestall_odd_tol(csinh, z,\n\t\t    CMPLXL(tests[i].sinh_a, tests[i].sinh_b), 1.1);\n\t\ttestall_even_tol(ccosh, z,\n\t\t    CMPLXL(tests[i].cosh_a, tests[i].cosh_b), 1.1);\n#if !__gnu_linux__\n\t\ttestall_odd_tol(ctanh, z,\n\t\t    CMPLXL(tests[i].tanh_a, tests[i].tanh_b), 1.4);\n#endif /* !__gnu_linux__ */\n        }\n}\n\n/* Test inputs that might cause overflow in a sloppy implementation. */\nvoid\ntest_large(void)\n{\n\tlong double complex z;\n\n#if !__APPLE__\n\t/* tanh() uses a threshold around x=22, so check both sides. */\n\tz = CMPLXL(21, 0.78539816339744830961566084581987572L);\n\ttestall_odd_tol(ctanh, z,\n\t    CMPLXL(1.0, 1.14990445285871196133287617611468468e-18L), 1.2);\n#if !__gnu_linux__\n\tz++;\n\ttestall_odd_tol(ctanh, z,\n\t    CMPLXL(1.0, 1.55622644822675930314266334585597964e-19L), 1);\n#endif /* !__gnu_linux__ */\n#endif /* !__APPLE__ */\n\n#if !__APPLE__\n\tz = CMPLXL(355, 0.78539816339744830961566084581987572L);\n\ttest_odd_tol(ctanh, z,\n\t\t     CMPLXL(1.0, 8.95257245135025991216632140458264468e-309L),\n\t\t     DBL_ULP());\n\tz = CMPLXL(30, 0x1p1023L);\n\ttest_odd_tol(ctanh, z,\n\t\t     CMPLXL(1.0, -1.62994325413993477997492170229268382e-26L),\n\t\t     DBL_ULP());\n#endif /* !__APPLE__ */\n\tz = CMPLXL(1, 0x1p1023L);\n\ttest_odd_tol(ctanh, z,\n\t\t     CMPLXL(0.878606311888306869546254022621986509L,\n\t\t\t    -0.225462792499754505792678258169527424L),\n\t\t     DBL_ULP());\n\n\tz = CMPLXL(710.6, 0.78539816339744830961566084581987572L);\n\ttest_odd_tol(csinh, z,\n\t    CMPLXL(1.43917579766621073533185387499658944e308L,\n\t\t   1.43917579766621073533185387499658944e308L), DBL_ULP());\n\ttest_even_tol(ccosh, z,\n\t    CMPLXL(1.43917579766621073533185387499658944e308L,\n\t\t   1.43917579766621073533185387499658944e308L), DBL_ULP());\n\n\tz = CMPLXL(1500, 0.78539816339744830961566084581987572L);\n\ttestall_odd(csinh, z, CMPLXL(INFINITY, INFINITY), OPT_INEXACT,\n\t    FE_OVERFLOW, CS_BOTH);\n\ttestall_even(ccosh, z, CMPLXL(INFINITY, INFINITY), OPT_INEXACT,\n\t    FE_OVERFLOW, CS_BOTH);\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..6\\n\");\n\n\ttest_zero();\n\tprintf(\"ok 1 - ctrig zero\\n\");\n\n\ttest_nan();\n\tprintf(\"ok 2 - ctrig nan\\n\");\n\n\ttest_inf();\n\tprintf(\"ok 3 - ctrig inf\\n\");\n\n\ttest_axes();\n\tprintf(\"ok 4 - ctrig axes\\n\");\n\n\ttest_small();\n\tprintf(\"ok 5 - ctrig small\\n\");\n\n\ttest_large();\n\tprintf(\"ok 6 - ctrig large\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-exponential.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for corner cases in exp*().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#ifdef __i386__\n#include <ieeefp.h>\n#endif\n\n#include \"test-utils.h\"\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasoons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, x, result, exceptmask, excepts)\tdo {\t\t\\\n\tvolatile long double _d = x;\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal((func)(_d), (result)));\t\t\t\t \\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n/* Test all the functions that compute b^x. */\n#define\ttestall0(x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(exp, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(expf, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(exp2, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(exp2f, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(exp2l, x, result, exceptmask, excepts);\t\t\t\\\n} while (0)\n\n/* Test all the functions that compute b^x - 1. */\n#define\ttestall1(x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(expm1, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(expm1f, x, result, exceptmask, excepts);\t\t\t\\\n} while (0)\n\nvoid\nrun_generic_tests(void)\n{\n\n\t/* exp(0) == 1, no exceptions raised */\n\ttestall0(0.0, 1.0, ALL_STD_EXCEPT, 0);\n\ttestall1(0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall0(-0.0, 1.0, ALL_STD_EXCEPT, 0);\n\ttestall1(-0.0, -0.0, ALL_STD_EXCEPT, 0);\n\n\t/* exp(NaN) == NaN, no exceptions raised */\n\ttestall0(NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall1(NAN, NAN, ALL_STD_EXCEPT, 0);\n\n\t/* exp(Inf) == Inf, no exceptions raised */\n\ttestall0(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall1(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\n\t/* exp(-Inf) == 0, no exceptions raised */\n\ttestall0(-INFINITY, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall1(-INFINITY, -1.0, ALL_STD_EXCEPT, 0);\n\n\t/* exp(big) == Inf, overflow exception */\n\ttestall0(50000.0, INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_OVERFLOW);\n\ttestall1(50000.0, INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_OVERFLOW);\n\n\t/* exp(small) == 0, underflow and inexact exceptions */\n\ttestall0(-50000.0, 0.0, ALL_STD_EXCEPT, FE_UNDERFLOW | FE_INEXACT);\n\ttestall1(-50000.0, -1.0, ALL_STD_EXCEPT, FE_INEXACT);\n}\n\nvoid\nrun_exp2_tests(void)\n{\n\tint i;\n\n\t/*\n\t * We should insist that exp2() return exactly the correct\n\t * result and not raise an inexact exception for integer\n\t * arguments.\n\t */\n\tfeclearexcept(FE_ALL_EXCEPT);\n\tfor (i = FLT_MIN_EXP - FLT_MANT_DIG; i < FLT_MAX_EXP; i++) {\n\t\tassert(exp2f(i) == ldexpf(1.0, i));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\tfor (i = DBL_MIN_EXP - DBL_MANT_DIG; i < DBL_MAX_EXP; i++) {\n\t\tassert(exp2(i) == ldexp(1.0, i));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\tfor (i = LDBL_MIN_EXP - LDBL_MANT_DIG; i < LDBL_MAX_EXP; i++) {\n\t\tassert(exp2l(i) == ldexpl(1.0, i));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..3\\n\");\n\n\trun_generic_tests();\n\tprintf(\"ok 1 - exponential\\n\");\n\n#ifdef __i386__\n\tfpsetprec(FP_PE);\n\trun_generic_tests();\n#endif\n\tprintf(\"ok 2 - exponential\\n\");\n\n\trun_exp2_tests();\n\tprintf(\"ok 3 - exponential\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-fenv.c",
    "content": "/*-\n * Copyright (c) 2004 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test the correctness and C99-compliance of various fenv.h features.\n */\n\n#include <sys/cdefs.h>\n\n#include <sys/types.h>\n#include <sys/wait.h>\n#include <assert.h>\n#include <err.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <signal.h>\n#include <stdio.h>\n#include <string.h>\n#include <unistd.h>\n\n/*\n * Implementations are permitted to define additional exception flags\n * not specified in the standard, so it is not necessarily true that\n * FE_ALL_EXCEPT == ALL_STD_EXCEPT.\n */\n#define\tALL_STD_EXCEPT\t(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \\\n\t\t\t FE_OVERFLOW | FE_UNDERFLOW)\n\n#define\tNEXCEPTS\t(sizeof(std_excepts) / sizeof(std_excepts[0]))\n\nstatic const int std_excepts[] = {\n\tFE_INVALID,\n\tFE_DIVBYZERO,\n\tFE_OVERFLOW,\n\tFE_UNDERFLOW,\n\tFE_INEXACT,\n};\n\n/* init_exceptsets() initializes this to the power set of std_excepts[] */\nstatic int std_except_sets[1 << NEXCEPTS];\n\nstatic void init_exceptsets(void);\n\nstatic void test_dfl_env(void);\nstatic void test_fegsetenv(void);\nstatic void test_fegsetexceptflag(void);\nstatic void test_masking(void);\nstatic void test_fegsetround(void);\nstatic void test_feholdupdate(void);\nstatic void test_feraiseexcept(void);\nstatic void test_fetestclearexcept(void);\n\nstatic int getround(void);\nstatic void raiseexcept(int excepts);\nstatic void trap_handler(int sig);\n\n#pragma STDC FENV_ACCESS ON\n\nint\nmain(int argc, char *argv[])\n{\n#if !__SOFTFP__\n    setbuf(stdout, NULL);\n\n\tprintf(\"1..8\\n\");\n\tinit_exceptsets();\n\ttest_dfl_env();\n\tprintf(\"ok 1 - fenv\\n\");\n\ttest_fetestclearexcept();\n\tprintf(\"ok 2 - fenv\\n\");\n\ttest_fegsetexceptflag();\n\tprintf(\"ok 3 - fenv\\n\");\n\ttest_feraiseexcept();\n\tprintf(\"ok 4 - fenv\\n\");\n\ttest_fegsetround();\n\tprintf(\"ok 5 - fenv\\n\");\n\ttest_fegsetenv();\n\tprintf(\"ok 6 - fenv\\n\");\n\ttest_masking();\n\tprintf(\"ok 7 - fenv\\n\");\n\ttest_feholdupdate();\n\tprintf(\"ok 8 - fenv\\n\");\n#endif /* !__SOFTFP__ */\n\n\treturn (0);\n}\n\n/*\n * Initialize std_except_sets[] to the power set of std_excepts[]\n */\nvoid\ninit_exceptsets(void)\n{\n\tint i, j, sr;\n\n\tfor (i = 0; i < 1 << NEXCEPTS; i++) {\n\t\tfor (sr = i, j = 0; sr != 0; sr >>= 1, j++)\n\t\t\tstd_except_sets[i] |= std_excepts[j] & ((~sr & 1) - 1);\n\t}\n}\n\n/*\n * This tests checks the default FP environment, so it must be first.\n * The memcmp() test below may be too much to ask for, since there\n * could be multiple machine-specific default environments.\n */\nstatic void\ntest_dfl_env(void)\n{\n#if __gnu_linux__\n#define NO_STRICT_DFL_ENV\n#endif\n\n#ifndef NO_STRICT_DFL_ENV\n\tfenv_t env;\n\n\tfegetenv(&env);\n\tassert(memcmp(&env, FE_DFL_ENV, sizeof(env)) == 0);\n#endif\n\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n}\n\n/*\n * Test fetestexcept() and feclearexcept().\n */\nstatic void\ntest_fetestclearexcept(void)\n{\n\tint excepts, i;\n\n\tfor (i = 0; i < 1 << NEXCEPTS; i++)\n\t\tassert(fetestexcept(std_except_sets[i]) == 0);\n\tfor (i = 0; i < 1 << NEXCEPTS; i++) {\n\t\texcepts = std_except_sets[i];\n\n\t\t/* FE_ALL_EXCEPT might be special-cased, as on i386. */\n\t\traiseexcept(excepts);\n\t\tassert(fetestexcept(excepts) == excepts);\n\t\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\n\t\traiseexcept(excepts);\n\t\tassert(fetestexcept(excepts) == excepts);\n\t\tif ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0) {\n\t\t\texcepts |= FE_INEXACT;\n\t\t\tassert((fetestexcept(ALL_STD_EXCEPT) | FE_INEXACT) ==\n\t\t\t    excepts);\n\t\t} else {\n\t\t\tassert(fetestexcept(ALL_STD_EXCEPT) == excepts);\n\t\t}\n\t\tassert(feclearexcept(excepts) == 0);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n}\n\n/*\n * Test fegetexceptflag() and fesetexceptflag().\n *\n * Prerequisites: fetestexcept(), feclearexcept()\n */\nstatic void\ntest_fegsetexceptflag(void)\n{\n\tfexcept_t flag;\n\tint excepts, i;\n\n\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\tfor (i = 0; i < 1 << NEXCEPTS; i++) {\n\t\texcepts = std_except_sets[i];\n\n\t\tassert(fegetexceptflag(&flag, excepts) == 0);\n\t\traiseexcept(ALL_STD_EXCEPT);\n\t\tassert(fesetexceptflag(&flag, excepts) == 0);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) ==\n\t\t    (ALL_STD_EXCEPT ^ excepts));\n\n\t\tassert(fegetexceptflag(&flag, FE_ALL_EXCEPT) == 0);\n\t\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(fesetexceptflag(&flag, excepts) == 0);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t\tassert(fesetexceptflag(&flag, ALL_STD_EXCEPT ^ excepts) == 0);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) ==\n\t\t    (ALL_STD_EXCEPT ^ excepts));\n\n\t\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n\t}\n}\n\n/*\n * Test feraiseexcept().\n *\n * Prerequisites: fetestexcept(), feclearexcept()\n */\nstatic void\ntest_feraiseexcept(void)\n{\n\tint excepts, i;\n\n\tfor (i = 0; i < 1 << NEXCEPTS; i++) {\n\t\texcepts = std_except_sets[i];\n\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(feraiseexcept(excepts) == 0);\n\t\tif ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0) {\n\t\t\texcepts |= FE_INEXACT;\n\t\t\tassert((fetestexcept(ALL_STD_EXCEPT) | FE_INEXACT) ==\n\t\t\t    excepts);\n\t\t} else {\n\t\t\tassert(fetestexcept(ALL_STD_EXCEPT) == excepts);\n\t\t}\n\t\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n\t}\n\tassert(feraiseexcept(FE_INVALID | FE_DIVBYZERO) == 0);\n\tassert(fetestexcept(ALL_STD_EXCEPT) == (FE_INVALID | FE_DIVBYZERO));\n\tassert(feraiseexcept(FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) == 0);\n\tassert(fetestexcept(ALL_STD_EXCEPT) == ALL_STD_EXCEPT);\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n}\n\n/*\n * Test fegetround() and fesetround().\n */\nstatic void\ntest_fegsetround(void)\n{\n\n\tassert(fegetround() == FE_TONEAREST);\n\tassert(getround() == FE_TONEAREST);\n\tassert(FLT_ROUNDS == 1);\n\n\tassert(fesetround(FE_DOWNWARD) == 0);\n\tassert(fegetround() == FE_DOWNWARD);\n\tassert(getround() == FE_DOWNWARD);\n    /*\n\tassert(FLT_ROUNDS == 3);\n    */\n\n\tassert(fesetround(FE_UPWARD) == 0);\n\tassert(getround() == FE_UPWARD);\n\tassert(fegetround() == FE_UPWARD);\n    /*\n\tassert(FLT_ROUNDS == 2);\n    */\n\n\tassert(fesetround(FE_TOWARDZERO) == 0);\n\tassert(getround() == FE_TOWARDZERO);\n\tassert(fegetround() == FE_TOWARDZERO);\n    /*\n\tassert(FLT_ROUNDS == 0);\n    */\n\n\tassert(fesetround(FE_TONEAREST) == 0);\n\tassert(getround() == FE_TONEAREST);\n\tassert(FLT_ROUNDS == 1);\n\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\n}\n\n/*\n * Test fegetenv() and fesetenv().\n *\n * Prerequisites: fetestexcept(), feclearexcept(), fegetround(), fesetround()\n */\nstatic void\ntest_fegsetenv(void)\n{\n\tfenv_t env1, env2;\n\tint excepts, i;\n\n\tfor (i = 0; i < 1 << NEXCEPTS; i++) {\n\t\texcepts = std_except_sets[i];\n\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(fegetround() == FE_TONEAREST);\n\t\tassert(fegetenv(&env1) == 0);\n\n\t\t/*\n\t\t * fe[gs]etenv() should be able to save and restore\n\t\t * exception flags without the spurious inexact\n\t\t * exceptions that afflict raiseexcept().\n\t\t */\n\t\traiseexcept(excepts);\n\t\tif ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0 &&\n\t\t    (excepts & FE_INEXACT) == 0)\n\t\t\tassert(feclearexcept(FE_INEXACT) == 0);\n\n\t\tfesetround(FE_DOWNWARD);\n\t\tassert(fegetenv(&env2) == 0);\n\t\tassert(fesetenv(&env1) == 0);\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(fegetround() == FE_TONEAREST);\n\n\t\tassert(fesetenv(&env2) == 0);\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == excepts);\n\t\tassert(fegetround() == FE_DOWNWARD);\n\t\tassert(fesetenv(&env1) == 0);\n\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\t\tassert(fegetround() == FE_TONEAREST);\n\t}\n}\n\n/*\n * Test fegetexcept(), fedisableexcept(), and feenableexcept().\n *\n * Prerequisites: fetestexcept(), feraiseexcept()\n */\nstatic void\ntest_masking(void)\n{\n\t/* Apple don't support fegetexcept(), feenableexcept() and others */\n\t/* ARM VFPv3 and VFPv4 don't support trapping of floating-point exceptions */\n#if !__APPLE__ && !(__ANDROID__ && __arm__ && !__SOFTFP__)\n\tstruct sigaction act;\n\tint except, i, pass, raise, status;\n\n\tassert((fegetexcept() & ALL_STD_EXCEPT) == 0);\n\tassert((feenableexcept(FE_INVALID|FE_OVERFLOW) & ALL_STD_EXCEPT) == 0);\n\tassert((feenableexcept(FE_UNDERFLOW) & ALL_STD_EXCEPT) ==\n\t    (FE_INVALID | FE_OVERFLOW));\n\tassert((fedisableexcept(FE_OVERFLOW) & ALL_STD_EXCEPT) ==\n\t    (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW));\n\tassert((fegetexcept() & ALL_STD_EXCEPT) == (FE_INVALID | FE_UNDERFLOW));\n\tassert((fedisableexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) ==\n\t    (FE_INVALID | FE_UNDERFLOW));\n\tassert((fegetexcept() & ALL_STD_EXCEPT) == 0);\n\n\tsigemptyset(&act.sa_mask);\n\tact.sa_flags = 0;\n\tact.sa_handler = trap_handler;\n\tfor (pass = 0; pass < 2; pass++) {\n\t\tfor (i = 0; i < NEXCEPTS; i++) {\n\t\t\texcept = std_excepts[i];\n\t\t\t/* over/underflow may also raise inexact */\n\t\t\tif (except == FE_INEXACT)\n\t\t\t\traise = FE_DIVBYZERO | FE_INVALID;\n\t\t\telse\n\t\t\t\traise = ALL_STD_EXCEPT ^ except;\n\n\t\t\t/*\n\t\t\t * We need to fork a child process because\n\t\t\t * there isn't a portable way to recover from\n\t\t\t * a floating-point exception.\n\t\t\t */\n\t\t\tswitch(fork()) {\n\t\t\tcase 0:\t\t/* child */\n\t\t\t\tassert((fegetexcept() & ALL_STD_EXCEPT) == 0);\n\t\t\t\tassert((feenableexcept(except)\n\t\t\t\t\t   & ALL_STD_EXCEPT) == 0);\n\t\t\t\tassert(fegetexcept() == except);\n\t\t\t\traiseexcept(raise);\n\t\t\t\tassert(feraiseexcept(raise) == 0);\n\t\t\t\tassert(fetestexcept(ALL_STD_EXCEPT) == raise);\n\n\t\t\t\tassert(sigaction(SIGFPE, &act, NULL) == 0);\n\t\t\t\tswitch (pass) {\n\t\t\t\tcase 0:\n\t\t\t\t\traiseexcept(except);\n\t\t\t\tcase 1:\n\t\t\t\t\tferaiseexcept(except);\n\t\t\t\tdefault:\n\t\t\t\t\tassert(0);\n\t\t\t\t}\n\t\t\t\tassert(0);\n\t\t\tdefault:\t/* parent */\n\t\t\t\tassert(wait(&status) > 0);\n\t\t\t\t/*\n\t\t\t\t * Avoid assert() here so that it's possible\n\t\t\t\t * to examine a failed child's core dump.\n\t\t\t\t */\n\t\t\t\tif (!WIFEXITED(status))\n\t\t\t\t\terrx(1, \"child aborted\\n\");\n\t\t\t\tassert(WEXITSTATUS(status) == 0);\n\t\t\t\tbreak;\n\t\t\tcase -1:\t/* error */\n\t\t\t\tassert(0);\n\t\t\t}\n\t\t}\n\t}\n\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n#endif /* !__APPLE__ */\n}\n\n/*\n * Test feholdexcept() and feupdateenv().\n *\n * Prerequisites: fetestexcept(), fegetround(), fesetround(),\n *\tfedisableexcept(), feenableexcept()\n */\nstatic void\ntest_feholdupdate(void)\n{\n#if !__APPLE__ && !(__ANDROID__ && __arm__ && !__SOFTFP__)\n\tfenv_t env;\n\n\tstruct sigaction act;\n\tint except, i, pass, status, raise;\n\n\tsigemptyset(&act.sa_mask);\n\tact.sa_flags = 0;\n\tact.sa_handler = trap_handler;\n\tfor (pass = 0; pass < 2; pass++) {\n\t\tfor (i = 0; i < NEXCEPTS; i++) {\n\t\t\texcept = std_excepts[i];\n\t\t\t/* over/underflow may also raise inexact */\n\t\t\tif (except == FE_INEXACT)\n\t\t\t\traise = FE_DIVBYZERO | FE_INVALID;\n\t\t\telse\n\t\t\t\traise = ALL_STD_EXCEPT ^ except;\n\n\t\t\t/*\n\t\t\t * We need to fork a child process because\n\t\t\t * there isn't a portable way to recover from\n\t\t\t * a floating-point exception.\n\t\t\t */\n\t\t\tswitch(fork()) {\n\t\t\tcase 0:\t\t/* child */\n\t\t\t\t/*\n\t\t\t\t * We don't want to cause a fatal exception in\n\t\t\t\t * the child until the second pass, so we can\n\t\t\t\t * check other properties of feupdateenv().\n\t\t\t\t */\t\t\t\t\n\t\t\t\tif (pass == 1)\n\t\t\t\t\tassert((feenableexcept(except) &\n\t\t\t\t\t\t   ALL_STD_EXCEPT) == 0);\n\t\t\t\traiseexcept(raise);\n\t\t\t\tassert(fesetround(FE_DOWNWARD) == 0);\n\t\t\t\tassert(feholdexcept(&env) == 0);\n\t\t\t\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n\t\t\t\traiseexcept(except);\n\t\t\t\tassert(fesetround(FE_UPWARD) == 0);\n\n\t\t\t\tif (pass == 1)\n\t\t\t\t\tassert(sigaction(SIGFPE, &act, NULL) ==\n\t\t\t\t\t    0);\n\t\t\t\tassert(feupdateenv(&env) == 0);\n\t\t\t\tassert(fegetround() == FE_DOWNWARD);\n\t\t\t\tassert(fetestexcept(ALL_STD_EXCEPT) ==\n\t\t\t\t    (except | raise));\n\n\t\t\t\tassert(pass == 0);\n\t\t\t\t_exit(0);\n\t\t\tdefault:\t/* parent */\n\t\t\t\tassert(wait(&status) > 0);\n\t\t\t\t/*\n\t\t\t\t * Avoid assert() here so that it's possible\n\t\t\t\t * to examine a failed child's core dump.\n\t\t\t\t */\n\t\t\t\tif (!WIFEXITED(status))\n\t\t\t\t\terrx(1, \"child aborted\\n\");\n\t\t\t\tassert(WEXITSTATUS(status) == 0);\n\t\t\t\tbreak;\n\t\t\tcase -1:\t/* error */\n\t\t\t\tassert(0);\n\t\t\t}\n\t\t}\n\t}\n\tassert(fetestexcept(FE_ALL_EXCEPT) == 0);\n#endif /* !__APPLE__  && !(__ANDROID__ && __arm__ && !__SOFTFP__) */\n}\n\n/*\n * Raise a floating-point exception without relying on the standard\n * library routines, which we are trying to test.\n *\n * XXX We can't raise an {over,under}flow without also raising an\n * inexact exception.\n */\nstatic void\nraiseexcept(int excepts)\n{\n\tvolatile double d;\n\n\t/*\n\t * With a compiler that supports the FENV_ACCESS pragma\n\t * properly, simple expressions like '0.0 / 0.0' should\n\t * be sufficient to generate traps.  Unfortunately, we\n\t * need to bring a volatile variable into the equation\n\t * to prevent incorrect optimizations.\n\t */\n\tif (excepts & FE_INVALID) {\n\t\td = 0.0;\n\t\td = 0.0 / d;\n\t}\n\tif (excepts & FE_DIVBYZERO) {\n\t\td = 0.0;\n\t\td = 1.0 / d;\n\t}\n\tif (excepts & FE_OVERFLOW) {\n\t\td = DBL_MAX;\n\t\td *= 2.0;\n\t}\n\tif (excepts & FE_UNDERFLOW) {\n\t\td = DBL_MIN;\n\t\td /= DBL_MAX;\n\t}\n\tif (excepts & FE_INEXACT) {\n\t\td = DBL_MIN;\n\t\td += 1.0;\n\t}\n\n\t/*\n\t * On the x86 (and some other architectures?) the FPU and\n\t * integer units are decoupled.  We need to execute an FWAIT\n\t * or a floating-point instruction to get synchronous exceptions.\n\t */\n\td = 1.0;\n\td += 1.0;\n}\n\n/*\n * Determine the current rounding mode without relying on the fenv\n * routines.  This function may raise an inexact exception.\n */\nstatic int\ngetround(void)\n{\n\tvolatile double d;\n\n\t/*\n\t * This test works just as well with 0.0 - 0.0, except on ia64\n\t * where 0.0 - 0.0 gives the wrong sign when rounding downwards.\n\t */\n\td = 1.0;\n\td -= 1.0;\n\tif (copysign(1.0, d) < 0.0)\n\t\treturn (FE_DOWNWARD);\n\n\td = 1.0;\n\tif (d + (DBL_EPSILON * 3.0 / 4.0) == 1.0)\n\t\treturn (FE_TOWARDZERO);\n\tif (d + (DBL_EPSILON * 1.0 / 4.0) > 1.0)\n\t\treturn (FE_UPWARD);\n\n\treturn (FE_TONEAREST);\n}\n\nstatic void\ntrap_handler(int sig)\n{\n\n\tassert(sig == SIGFPE);\n\t_exit(0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-fma.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for fma{,f,l}().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n */\n#define\ttest(func, x, y, z, result, exceptmask, excepts) do {\t\t\\\n\tvolatile long double _vx = (x), _vy = (y), _vz = (z);\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal((func)(_vx, _vy, _vz), (result)));\t\t\\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n#define\ttestall(x, y, z, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(fma, (double)(x), (double)(y), (double)(z),\t\t\\\n\t\t(double)(result), (exceptmask), (excepts));\t\t\\\n\ttest(fmaf, (float)(x), (float)(y), (float)(z),\t\t\t\\\n\t\t(float)(result), (exceptmask), (excepts));\t\t\\\n\ttest(fmal, (x), (y), (z), (result), (exceptmask), (excepts));\t\\\n} while (0)\n\n/* Test in all rounding modes. */\n#define\ttestrnd(func, x, y, z, rn, ru, rd, rz, exceptmask, excepts)\tdo { \\\n\tfesetround(FE_TONEAREST);\t\t\t\t\t\\\n\ttest((func), (x), (y), (z), (rn), (exceptmask), (excepts));\t\\\n\tfesetround(FE_UPWARD);\t\t\t\t\t\t\\\n\ttest((func), (x), (y), (z), (ru), (exceptmask), (excepts));\t\\\n\tfesetround(FE_DOWNWARD);\t\t\t\t\t\\\n\ttest((func), (x), (y), (z), (rd), (exceptmask), (excepts));\t\\\n\tfesetround(FE_TOWARDZERO);\t\t\t\t\t\\\n\ttest((func), (x), (y), (z), (rz), (exceptmask), (excepts));\t\\\n} while (0)\n\n/*\n * This is needed because clang constant-folds fma in ways that are incorrect\n * in rounding modes other than FE_TONEAREST.\n */\nvolatile double one = 1.0;\n\nstatic void\ntest_zeroes(int i)\n{\n\tconst int rd = (fegetround() == FE_DOWNWARD);\n\n#if __APPLE__\n    if (i != 2)\n    {\n#endif\n\ttestall(0.0, 0.0, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(1.0, 0.0, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(0.0, 1.0, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n#if __APPLE__\n    }\n#endif\n\ttestall(0.0, 0.0, 1.0, 1.0, ALL_STD_EXCEPT, 0);\n\n\ttestall(-0.0, 0.0, 0.0, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(0.0, -0.0, 0.0, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n#if __APPLE__\n    if (i != 2)\n    {\n#endif\n\ttestall(-0.0, -0.0, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n#if __APPLE__\n    }\n#endif\n\ttestall(0.0, 0.0, -0.0, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(-0.0, -0.0, -0.0, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\n#if !__APPLE__\n\ttestall(-0.0, 0.0, -0.0, -0.0, ALL_STD_EXCEPT, 0);\n\ttestall(0.0, -0.0, -0.0, -0.0, ALL_STD_EXCEPT, 0);\n#endif /* !__APPLE__ */\n\n\ttestall(-one, one, one, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(one, -one, one, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(-one, -one, -one, rd ? -0.0 : 0.0, ALL_STD_EXCEPT, 0);\n\n\tswitch (fegetround()) {\n\tcase FE_TONEAREST:\n\tcase FE_TOWARDZERO:\n\t\ttest(fmaf, -FLT_MIN, FLT_MIN, 0.0, -0.0,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT | FE_UNDERFLOW);\n#if !__APPLE__\n\t\ttest(fma, -DBL_MIN, DBL_MIN, 0.0, -0.0,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT | FE_UNDERFLOW);\n\t\ttest(fmal, -LDBL_MIN, LDBL_MIN, 0.0, -0.0,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT | FE_UNDERFLOW);\n#endif /* !__APPLE__ */\n\t}\n}\n\nstatic void\ntest_infinities(void)\n{\n#if !__APPLE__\n\ttestall(INFINITY, 1.0, -1.0, INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall(-1.0, INFINITY, 0.0, -INFINITY, ALL_STD_EXCEPT, 0);\n#endif /* !__APPLE__ */\n\ttestall(0.0, 0.0, INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall(1.0, 1.0, INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall(1.0, 1.0, -INFINITY, -INFINITY, ALL_STD_EXCEPT, 0);\n\n#if !__APPLE__\n\ttestall(INFINITY, -INFINITY, 1.0, -INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall(INFINITY, INFINITY, 1.0, INFINITY, ALL_STD_EXCEPT, 0);\n#endif /* !__APPLE__ */\n\ttestall(-INFINITY, -INFINITY, INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\n\ttestall(0.0, INFINITY, 1.0, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(INFINITY, 0.0, -0.0, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\n\t/* The invalid exception is optional in this case. */\n\ttestall(INFINITY, 0.0, NAN, NAN, ALL_STD_EXCEPT & ~FE_INVALID, 0);\n\n\ttestall(INFINITY, INFINITY, -INFINITY, NAN,\n\t\tALL_STD_EXCEPT, FE_INVALID);\n\ttestall(-INFINITY, INFINITY, INFINITY, NAN,\n\t\tALL_STD_EXCEPT, FE_INVALID);\n\ttestall(INFINITY, -1.0, INFINITY, NAN,\n\t\tALL_STD_EXCEPT, FE_INVALID);\n\n\ttest(fmaf, FLT_MAX, FLT_MAX, -INFINITY, -INFINITY, ALL_STD_EXCEPT, 0);\n\ttest(fma, DBL_MAX, DBL_MAX, -INFINITY, -INFINITY, ALL_STD_EXCEPT, 0);\n\ttest(fmal, LDBL_MAX, LDBL_MAX, -INFINITY, -INFINITY,\n\t     ALL_STD_EXCEPT, 0);\n\ttest(fmaf, FLT_MAX, -FLT_MAX, INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttest(fma, DBL_MAX, -DBL_MAX, INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttest(fmal, LDBL_MAX, -LDBL_MAX, INFINITY, INFINITY,\n\t     ALL_STD_EXCEPT, 0);\n}\n\nstatic void\ntest_nans(void)\n{\n\n\ttestall(NAN, 0.0, 0.0, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(1.0, NAN, 1.0, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(1.0, -1.0, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(0.0, 0.0, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(NAN, NAN, NAN, NAN, ALL_STD_EXCEPT, 0);\n\n\t/* x*y should not raise an inexact/overflow/underflow if z is NaN. */\n\ttestall(M_PI, M_PI, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fmaf, FLT_MIN, FLT_MIN, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fma, DBL_MIN, DBL_MIN, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fmal, LDBL_MIN, LDBL_MIN, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fmaf, FLT_MAX, FLT_MAX, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fma, DBL_MAX, DBL_MAX, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttest(fmal, LDBL_MAX, LDBL_MAX, NAN, NAN, ALL_STD_EXCEPT, 0);\n}\n\n/*\n * Tests for cases where z is very small compared to x*y.\n */\nstatic void\ntest_small_z(void)\n{\n\n\t/* x*y positive, z positive */\n\tif (fegetround() == FE_UPWARD) {\n\t\ttest(fmaf, one, one, 0x1.0p-100, 1.0 + FLT_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, one, one, 0x1.0p-200, 1.0 + DBL_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, one, one, 0x1.0p-200, 1.0 + LDBL_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(0x1.0p100, one, 0x1.0p-100, 0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* x*y negative, z negative */\n\tif (fegetround() == FE_DOWNWARD) {\n\t\ttest(fmaf, -one, one, -0x1.0p-100, -(1.0 + FLT_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, -one, one, -0x1.0p-200, -(1.0 + DBL_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, -one, one, -0x1.0p-200, -(1.0 + LDBL_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(0x1.0p100, -one, -0x1.0p-100, -0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* x*y positive, z negative */\n\tif (fegetround() == FE_DOWNWARD || fegetround() == FE_TOWARDZERO) {\n\t\ttest(fmaf, one, one, -0x1.0p-100, 1.0 - FLT_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, one, one, -0x1.0p-200, 1.0 - DBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, one, one, -0x1.0p-200, 1.0 - LDBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(0x1.0p100, one, -0x1.0p-100, 0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* x*y negative, z positive */\n\tif (fegetround() == FE_UPWARD || fegetround() == FE_TOWARDZERO) {\n\t\ttest(fmaf, -one, one, 0x1.0p-100, -1.0 + FLT_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, -one, one, 0x1.0p-200, -1.0 + DBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, -one, one, 0x1.0p-200, -1.0 + LDBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(-0x1.0p100, one, 0x1.0p-100, -0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n}\n\n/*\n * Tests for cases where z is very large compared to x*y.\n */\nstatic void\ntest_big_z(void)\n{\n\n\t/* z positive, x*y positive */\n\tif (fegetround() == FE_UPWARD) {\n\t\ttest(fmaf, 0x1.0p-50, 0x1.0p-50, 1.0, 1.0 + FLT_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, 0x1.0p-100, 0x1.0p-100, 1.0, 1.0 + DBL_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, 0x1.0p-100, 0x1.0p-100, 1.0, 1.0 + LDBL_EPSILON,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(-0x1.0p-50, -0x1.0p-50, 0x1.0p100, 0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* z negative, x*y negative */\n\tif (fegetround() == FE_DOWNWARD) {\n\t\ttest(fmaf, -0x1.0p-50, 0x1.0p-50, -1.0, -(1.0 + FLT_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, -0x1.0p-100, 0x1.0p-100, -1.0, -(1.0 + DBL_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, -0x1.0p-100, 0x1.0p-100, -1.0, -(1.0 + LDBL_EPSILON),\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(0x1.0p-50, -0x1.0p-50, -0x1.0p100, -0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* z negative, x*y positive */\n\tif (fegetround() == FE_UPWARD || fegetround() == FE_TOWARDZERO) {\n\t\ttest(fmaf, -0x1.0p-50, -0x1.0p-50, -1.0,\n\t\t     -1.0 + FLT_EPSILON / 2, ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, -0x1.0p-100, -0x1.0p-100, -1.0,\n\t\t     -1.0 + DBL_EPSILON / 2, ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, -0x1.0p-100, -0x1.0p-100, -1.0,\n\t\t     -1.0 + LDBL_EPSILON / 2, ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(0x1.0p-50, 0x1.0p-50, -0x1.0p100, -0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n\n\t/* z positive, x*y negative */\n\tif (fegetround() == FE_DOWNWARD || fegetround() == FE_TOWARDZERO) {\n\t\ttest(fmaf, 0x1.0p-50, -0x1.0p-50, 1.0, 1.0 - FLT_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fma, 0x1.0p-100, -0x1.0p-100, 1.0, 1.0 - DBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t\ttest(fmal, 0x1.0p-100, -0x1.0p-100, 1.0, 1.0 - LDBL_EPSILON / 2,\n\t\t     ALL_STD_EXCEPT, FE_INEXACT);\n\t} else {\n\t\ttestall(-0x1.0p-50, 0x1.0p-50, 0x1.0p100, 0x1.0p100,\n\t\t\tALL_STD_EXCEPT, FE_INEXACT);\n\t}\n}\n\nstatic void\ntest_accuracy(void)\n{\n\n\t/* ilogb(x*y) - ilogb(z) = 20 */\n\ttestrnd(fmaf, -0x1.c139d8p-51, -0x1.600e7ap32, 0x1.26558cp-38,\n\t\t0x1.34e48ap-18, 0x1.34e48cp-18, 0x1.34e48ap-18, 0x1.34e48ap-18,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\ttestrnd(fma, -0x1.c139d7b84f1a3p-51, -0x1.600e7a2a16484p32,\n\t\t0x1.26558cac31580p-38, 0x1.34e48a78aae97p-18,\n\t\t0x1.34e48a78aae97p-18, 0x1.34e48a78aae96p-18,\n\t\t0x1.34e48a78aae96p-18, ALL_STD_EXCEPT, FE_INEXACT);\n#if LDBL_MANT_DIG == 113\n\ttestrnd(fmal, -0x1.c139d7b84f1a3079263afcc5bae3p-51L,\n\t\t-0x1.600e7a2a164840edbe2e7d301a72p32L,\n\t\t0x1.26558cac315807eb07e448042101p-38L,\n\t\t0x1.34e48a78aae96c76ed36077dd387p-18L,\n\t\t0x1.34e48a78aae96c76ed36077dd388p-18L,\n\t\t0x1.34e48a78aae96c76ed36077dd387p-18L,\n\t\t0x1.34e48a78aae96c76ed36077dd387p-18L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 64\n\ttestrnd(fmal, -0x1.c139d7b84f1a307ap-51L, -0x1.600e7a2a164840eep32L,\n\t\t0x1.26558cac315807ecp-38L, 0x1.34e48a78aae96c78p-18L,\n\t\t0x1.34e48a78aae96c78p-18L, 0x1.34e48a78aae96c76p-18L,\n\t\t0x1.34e48a78aae96c76p-18L, ALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 53\n\ttestrnd(fmal, -0x1.c139d7b84f1a3p-51L, -0x1.600e7a2a16484p32L,\n\t\t0x1.26558cac31580p-38L, 0x1.34e48a78aae97p-18L,\n\t\t0x1.34e48a78aae97p-18L, 0x1.34e48a78aae96p-18L,\n\t\t0x1.34e48a78aae96p-18L, ALL_STD_EXCEPT, FE_INEXACT);\n#endif\n\n\t/* ilogb(x*y) - ilogb(z) = -40 */\n\ttestrnd(fmaf, 0x1.98210ap53, 0x1.9556acp-24, 0x1.d87da4p70,\n\t\t0x1.d87da4p70, 0x1.d87da6p70, 0x1.d87da4p70, 0x1.d87da4p70,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\ttestrnd(fma, 0x1.98210ac83fe2bp53, 0x1.9556ac1475f0fp-24,\n\t\t0x1.d87da3aafc60ep70, 0x1.d87da3aafda40p70,\n\t\t0x1.d87da3aafda40p70, 0x1.d87da3aafda3fp70,\n\t\t0x1.d87da3aafda3fp70, ALL_STD_EXCEPT, FE_INEXACT);\n#if LDBL_MANT_DIG == 113\n\ttestrnd(fmal, 0x1.98210ac83fe2a8f65b6278b74cebp53L,\n\t\t0x1.9556ac1475f0f28968b61d0de65ap-24L,\n\t\t0x1.d87da3aafc60d830aa4c6d73b749p70L,\n\t\t0x1.d87da3aafda3f36a69eb86488224p70L,\n\t\t0x1.d87da3aafda3f36a69eb86488225p70L,\n\t\t0x1.d87da3aafda3f36a69eb86488224p70L,\n\t\t0x1.d87da3aafda3f36a69eb86488224p70L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 64\n\ttestrnd(fmal, 0x1.98210ac83fe2a8f6p53L, 0x1.9556ac1475f0f28ap-24L,\n\t\t0x1.d87da3aafc60d83p70L, 0x1.d87da3aafda3f36ap70L,\n\t\t0x1.d87da3aafda3f36ap70L, 0x1.d87da3aafda3f368p70L,\n\t\t0x1.d87da3aafda3f368p70L, ALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 53\n\ttestrnd(fmal, 0x1.98210ac83fe2bp53L, 0x1.9556ac1475f0fp-24L,\n\t\t0x1.d87da3aafc60ep70L, 0x1.d87da3aafda40p70L,\n\t\t0x1.d87da3aafda40p70L, 0x1.d87da3aafda3fp70L,\n\t\t0x1.d87da3aafda3fp70L, ALL_STD_EXCEPT, FE_INEXACT);\n#endif\n\n\t/* ilogb(x*y) - ilogb(z) = 0 */\n\ttestrnd(fmaf, 0x1.31ad02p+100, 0x1.2fbf7ap-42, -0x1.c3e106p+58,\n\t\t-0x1.64c27cp+56, -0x1.64c27ap+56, -0x1.64c27cp+56,\n\t\t-0x1.64c27ap+56, ALL_STD_EXCEPT, FE_INEXACT);\n\ttestrnd(fma, 0x1.31ad012ede8aap+100, 0x1.2fbf79c839067p-42,\n\t\t-0x1.c3e106929056ep+58, -0x1.64c282b970a5fp+56,\n\t\t-0x1.64c282b970a5ep+56, -0x1.64c282b970a5fp+56,\n\t\t-0x1.64c282b970a5ep+56, ALL_STD_EXCEPT, FE_INEXACT);\n#if LDBL_MANT_DIG == 113\n\ttestrnd(fmal, 0x1.31ad012ede8aa282fa1c19376d16p+100L,\n\t\t 0x1.2fbf79c839066f0f5c68f6d2e814p-42L,\n\t\t-0x1.c3e106929056ec19de72bfe64215p+58L,\n\t\t-0x1.64c282b970a612598fc025ca8cddp+56L,\n\t\t-0x1.64c282b970a612598fc025ca8cddp+56L,\n\t\t-0x1.64c282b970a612598fc025ca8cdep+56L,\n\t\t-0x1.64c282b970a612598fc025ca8cddp+56L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 64\n\ttestrnd(fmal, 0x1.31ad012ede8aa4eap+100L, 0x1.2fbf79c839066aeap-42L,\n\t\t-0x1.c3e106929056e61p+58L, -0x1.64c282b970a60298p+56L,\n\t\t-0x1.64c282b970a60298p+56L, -0x1.64c282b970a6029ap+56L,\n\t\t-0x1.64c282b970a60298p+56L, ALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 53\n\ttestrnd(fmal, 0x1.31ad012ede8aap+100L, 0x1.2fbf79c839067p-42L,\n\t\t-0x1.c3e106929056ep+58L, -0x1.64c282b970a5fp+56L,\n\t\t-0x1.64c282b970a5ep+56L, -0x1.64c282b970a5fp+56L,\n\t\t-0x1.64c282b970a5ep+56L, ALL_STD_EXCEPT, FE_INEXACT);\n#endif\n\n\t/* x*y (rounded) ~= -z */\n\t/* XXX spurious inexact exceptions */\n\ttestrnd(fmaf, 0x1.bbffeep-30, -0x1.1d164cp-74, 0x1.ee7296p-104,\n\t\t-0x1.c46ea8p-128, -0x1.c46ea8p-128, -0x1.c46ea8p-128,\n\t\t-0x1.c46ea8p-128, ALL_STD_EXCEPT & ~FE_INEXACT, 0);\n\ttestrnd(fma, 0x1.bbffeea6fc7d6p-30, 0x1.1d164c6cbf078p-74,\n\t\t-0x1.ee72993aff948p-104, -0x1.71f72ac7d9d8p-159,\n\t\t-0x1.71f72ac7d9d8p-159, -0x1.71f72ac7d9d8p-159,\n\t\t-0x1.71f72ac7d9d8p-159, ALL_STD_EXCEPT & ~FE_INEXACT, 0);\n#if LDBL_MANT_DIG == 113\n\ttestrnd(fmal, 0x1.bbffeea6fc7d65927d147f437675p-30L,\n\t\t0x1.1d164c6cbf078b7a22607d1cd6a2p-74L,\n\t\t-0x1.ee72993aff94973876031bec0944p-104L,\n\t\t0x1.64e086175b3a2adc36e607058814p-217L,\n\t\t0x1.64e086175b3a2adc36e607058814p-217L,\n\t\t0x1.64e086175b3a2adc36e607058814p-217L,\n\t\t0x1.64e086175b3a2adc36e607058814p-217L,\n\t\tALL_STD_EXCEPT & ~FE_INEXACT, 0);\n#elif LDBL_MANT_DIG == 64\n\ttestrnd(fmal, 0x1.bbffeea6fc7d6592p-30L, 0x1.1d164c6cbf078b7ap-74L,\n\t\t-0x1.ee72993aff949736p-104L, 0x1.af190e7a1ee6ad94p-168L,\n\t\t0x1.af190e7a1ee6ad94p-168L, 0x1.af190e7a1ee6ad94p-168L,\n\t\t0x1.af190e7a1ee6ad94p-168L, ALL_STD_EXCEPT & ~FE_INEXACT, 0);\n#elif LDBL_MANT_DIG == 53\n\ttestrnd(fmal, 0x1.bbffeea6fc7d6p-30L, 0x1.1d164c6cbf078p-74L,\n\t\t-0x1.ee72993aff948p-104L, -0x1.71f72ac7d9d8p-159L,\n\t\t-0x1.71f72ac7d9d8p-159L, -0x1.71f72ac7d9d8p-159L,\n\t\t-0x1.71f72ac7d9d8p-159L, ALL_STD_EXCEPT & ~FE_INEXACT, 0);\n#endif\n}\n\nstatic void\ntest_double_rounding(void)\n{\n\n\t/*\n\t *     a =  0x1.8000000000001p0\n\t *     b =  0x1.8000000000001p0\n\t *     c = -0x0.0000000000000000000000000080...1p+1\n\t * a * b =  0x1.2000000000001800000000000080p+1\n\t *\n\t * The correct behavior is to round DOWN to 0x1.2000000000001p+1 in\n\t * round-to-nearest mode.  An implementation that computes a*b+c in\n\t * double+double precision, however, will get 0x1.20000000000018p+1,\n\t * and then round UP.\n\t */\n\tfesetround(FE_TONEAREST);\n\ttest(fma, 0x1.8000000000001p0, 0x1.8000000000001p0,\n\t     -0x1.0000000000001p-104, 0x1.2000000000001p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\tfesetround(FE_DOWNWARD);\n\ttest(fma, 0x1.8000000000001p0, 0x1.8000000000001p0,\n\t     -0x1.0000000000001p-104, 0x1.2000000000001p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\tfesetround(FE_UPWARD);\n\ttest(fma, 0x1.8000000000001p0, 0x1.8000000000001p0,\n\t     -0x1.0000000000001p-104, 0x1.2000000000002p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\n\tfesetround(FE_TONEAREST);\n\ttest(fmaf, 0x1.800002p+0, 0x1.800002p+0, -0x1.000002p-46, 0x1.200002p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\tfesetround(FE_DOWNWARD);\n\ttest(fmaf, 0x1.800002p+0, 0x1.800002p+0, -0x1.000002p-46, 0x1.200002p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\tfesetround(FE_UPWARD);\n\ttest(fmaf, 0x1.800002p+0, 0x1.800002p+0, -0x1.000002p-46, 0x1.200004p+1,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\n\tfesetround(FE_TONEAREST);\n#if LDBL_MANT_DIG == 64\n\ttest(fmal, 0x1.4p+0L, 0x1.0000000000000004p+0L, 0x1p-128L,\n\t     0x1.4000000000000006p+0L, ALL_STD_EXCEPT, FE_INEXACT);\n#elif LDBL_MANT_DIG == 113\n\ttest(fmal, 0x1.8000000000000000000000000001p+0L,\n\t     0x1.8000000000000000000000000001p+0L,\n\t     -0x1.0000000000000000000000000001p-224L,\n\t     0x1.2000000000000000000000000001p+1L, ALL_STD_EXCEPT, FE_INEXACT);\n#endif\n\n}\n\nint\nmain(int argc, char *argv[])\n{\n\tint rmodes[] = { FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO };\n\tint i;\n\n\tprintf(\"1..19\\n\");\n\n\tfor (i = 0; i < 4; i++) {\n\t\tfesetround(rmodes[i]);\n\t\ttest_zeroes(i);\n\t\tprintf(\"ok %d - fma zeroes\\n\", i + 1);\n\t}\n\n\tfor (i = 0; i < 4; i++) {\n\t\tfesetround(rmodes[i]);\n\t\ttest_infinities();\n\t\tprintf(\"ok %d - fma infinities\\n\", i + 5);\n\t}\n\n\tfesetround(FE_TONEAREST);\n\ttest_nans();\n\tprintf(\"ok 9 - fma NaNs\\n\");\n\n\tfor (i = 0; i < 4; i++) {\n\t\tfesetround(rmodes[i]);\n\t\ttest_small_z();\n\t\tprintf(\"ok %d - fma small z\\n\", i + 10);\n\t}\n\n\tfor (i = 0; i < 4; i++) {\n\t\tfesetround(rmodes[i]);\n\t\ttest_big_z();\n\t\tprintf(\"ok %d - fma big z\\n\", i + 14);\n\t}\n\n\tfesetround(FE_TONEAREST);\n\ttest_accuracy();\n\tprintf(\"ok 18 - fma accuracy\\n\");\n\n\ttest_double_rounding();\n\tprintf(\"ok 19 - fma double rounding\\n\");\n\n\t/*\n\t * TODO:\n\t * - Tests for subnormals\n\t * - Cancellation tests (e.g., z = (double)x*y, but x*y is inexact)\n\t */\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-fmaxmin.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for fmax{,f,l}() and fmin{,f,l}.\n */\n\n#include <sys/cdefs.h>\n\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test whether func(x, y) has the expected result, and make sure no\n * exceptions are raised.\n */\n#define\tTEST(func, type, x, y, expected) do {\t\t\t\t      \\\n\ttype __x = (x);\t/* convert before we clear exceptions */\t      \\\n\ttype __y = (y);\t\t\t\t\t\t\t      \\\n\tfeclearexcept(ALL_STD_EXCEPT);\t\t\t\t\t      \\\n\tlong double __result = func((__x), (__y));\t\t\t      \\\n\tif (fetestexcept(ALL_STD_EXCEPT)) {\t\t\t\t      \\\n\t\tfprintf(stderr, #func \"(%.20Lg, %.20Lg) raised 0x%x\\n\",\t      \\\n\t\t\t(x), (y), fetestexcept(FE_ALL_EXCEPT));\t\t      \\\n\t\tok = 0;\t\t\t\t\t\t\t      \\\n\t}\t\t\t\t\t\t\t\t      \\\n\tif (!fpequal(__result, (expected)))\t{\t\t\t      \\\n\t\tfprintf(stderr, #func \"(%.20Lg, %.20Lg) = %.20Lg, \"\t      \\\n\t\t\t\"expected %.20Lg\\n\", (x), (y), __result, (expected)); \\\n\t\tok = 0;\t\t\t\t\t\t\t      \\\n\t}\t\t\t\t\t\t\t\t      \\\n} while (0)\n\nint\ntestall_r(long double big, long double small)\n{\n\tint ok;\n\n\tlong double expected_max = isnan(big) ? small : big;\n\tlong double expected_min = isnan(small) ? big : small;\n\tok = 1;\n\n\tTEST(fmaxf, float, big, small, expected_max);\n\tTEST(fmaxf, float, small, big, expected_max);\n\tTEST(fmax, double, big, small, expected_max);\n\tTEST(fmax, double, small, big, expected_max);\n\tTEST(fmaxl, long double, big, small, expected_max);\n\tTEST(fmaxl, long double, small, big, expected_max);\n\tTEST(fminf, float, big, small, expected_min);\n\tTEST(fminf, float, small, big, expected_min);\n\tTEST(fmin, double, big, small, expected_min);\n\tTEST(fmin, double, small, big, expected_min);\n\tTEST(fminl, long double, big, small, expected_min);\n\tTEST(fminl, long double, small, big, expected_min);\n\n\treturn (ok);\n}\n\n/*\n * Test all the functions: fmaxf, fmax, fmaxl, fminf, fmin, and fminl,\n * in all rounding modes and with the arguments in different orders.\n * The input 'big' must be >= 'small'.\n */\nvoid\ntestall(int testnum, long double big, long double small)\n{\n\tstatic const int rmodes[] = {\n\t\tFE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO\n\t};\n\tint i;\n\n\tfor (i = 0; i < 4; i++) {\n\t\tfesetround(rmodes[i]);\n\t\tif (!testall_r(big, small)) {\n\t\t\tfprintf(stderr, \"FAILURE in rounding mode %d\\n\",\n\t\t\t\trmodes[i]);\n\t\t\tbreak;\n\t\t}\n\t}\n\tprintf(\"%sok %d - big = %.20Lg, small = %.20Lg\\n\",\n\t       (i == 4) ? \"\" : \"not \", testnum, big, small);\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..12\\n\");\n\n\ttestall(1, 1.0, 0.0);\n\ttestall(2, 42.0, nextafterf(42.0, -INFINITY));\n\ttestall(3, nextafterf(42.0, INFINITY), 42.0);\n\ttestall(4, -5.0, -5.0);\n\ttestall(5, -3.0, -4.0);\n\ttestall(6, 1.0, NAN);\n\ttestall(7, INFINITY, NAN);\n\ttestall(8, INFINITY, 1.0);\n\ttestall(9, -3.0, -INFINITY);\n\ttestall(10, 3.0, -INFINITY);\n\ttestall(11, NAN, NAN);\n\n\t/* This test isn't strictly required to work by C99. */\n\ttestall(12, 0.0, -0.0);\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-ilogb.c",
    "content": "/*-\n * Copyright (c) 2004 Stefan Farfeleder\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * $FreeBSD$\n */\n\n#include <assert.h>\n#include <float.h>\n#include <limits.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nint\nmain(void)\n{\n\tchar buf[128], *end;\n\tdouble d;\n\tfloat f;\n\tlong double ld;\n\tint e, i;\n\n\tprintf(\"1..3\\n\");\n\tassert(ilogb(0) == FP_ILOGB0);\n\tassert(ilogb(NAN) == FP_ILOGBNAN);\n\tassert(ilogb(INFINITY) == INT_MAX);\n\tfor (e = DBL_MIN_EXP - DBL_MANT_DIG; e < DBL_MAX_EXP; e++) {\n\t\tsnprintf(buf, sizeof(buf), \"0x1.p%d\", e);\n\t\td = strtod(buf, &end);\n\t\tassert(*end == '\\0');\n\t\ti = ilogb(d);\n\t\tassert(i == e);\n\t}\n\tprintf(\"ok 1 - ilogb\\n\");\n\n\tassert(ilogbf(0) == FP_ILOGB0);\n\tassert(ilogbf(NAN) == FP_ILOGBNAN);\n\tassert(ilogbf(INFINITY) == INT_MAX);\n\tfor (e = FLT_MIN_EXP - FLT_MANT_DIG; e < FLT_MAX_EXP; e++) {\n\t\tsnprintf(buf, sizeof(buf), \"0x1.p%d\", e);\n\t\tf = strtof(buf, &end);\n\t\tassert(*end == '\\0');\n\t\ti = ilogbf(f);\n\t\tassert(i == e);\n\t}\n\tprintf(\"ok 2 - ilogbf\\n\");\n\n\tassert(ilogbl(0) == FP_ILOGB0);\n\tassert(ilogbl(NAN) == FP_ILOGBNAN);\n\tassert(ilogbl(INFINITY) == INT_MAX);\n\tfor (e = LDBL_MIN_EXP - LDBL_MANT_DIG; e < LDBL_MAX_EXP; e++) {\n\t\tsnprintf(buf, sizeof(buf), \"0x1.p%d\", e);\n\t\tld = strtold(buf, &end);\n\t\tassert(*end == '\\0');\n\t\ti = ilogbl(ld);\n\t\tassert(i == e);\n\t}\n\tprintf(\"ok 3 - ilogbl\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-invctrig.c",
    "content": "/*-\n * Copyright (c) 2008-2013 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for casin[h](), cacos[h](), and catan[h]().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <complex.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#pragma\tSTDC FENV_ACCESS\tON\n#pragma\tSTDC CX_LIMITED_RANGE\tOFF\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest_p(func, z, result, exceptmask, excepts, checksign)\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tdebug(\"  testing %s(%Lg + %Lg I) == %Lg + %Lg I\\n\", #func,\t\\\n\t    creall(_d), cimagl(_d), creall(result), cimagl(result));\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(cfpequal_cs((func)(_d), (result), (checksign)));\t\t\\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n/*\n * Test within a given tolerance.  The tolerance indicates relative error\n * in ulps.\n */\n#define\ttest_p_tol(func, z, result, tol)\t\t\tdo {\t\\\n\tvolatile long double complex _d = z;\t\t\t\t\\\n\tdebug(\"  testing %s(%Lg + %Lg I) ~= %Lg + %Lg I\\n\", #func,\t\\\n\t    creall(_d), cimagl(_d), creall(result), cimagl(result));\t\\\n\tassert(cfpequal_tol((func)(_d), (result), (tol), CS_BOTH));\t\\\n} while (0)\n\n/* These wrappers apply the identities f(conj(z)) = conj(f(z)). */\n#define\ttest(func, z, result, exceptmask, excepts, checksign)\tdo {\t\\\n\ttest_p(func, z, result, exceptmask, excepts, checksign);\t\\\n\ttest_p(func, conjl(z), conjl(result), exceptmask, excepts, checksign); \\\n} while (0)\n#define\ttest_tol(func, z, result, tol)\t\t\t\tdo {\t\\\n\ttest_p_tol(func, z, result, tol);\t\t\t\t\\\n\ttest_p_tol(func, conjl(z), conjl(result), tol);\t\t\t\\\n} while (0)\n\n/* Test the given function in all precisions. */\n#define\ttestall(func, x, result, exceptmask, excepts, checksign) do {\t\\\n\ttest(func, x, result, exceptmask, excepts, checksign);\t\t\\\n\ttest(func##f, x, result, exceptmask, excepts, checksign);\t\\\n} while (0)\n#define\ttestall_odd(func, x, result, exceptmask, excepts, checksign) do { \\\n\ttestall(func, x, result, exceptmask, excepts, checksign);\t\\\n\ttestall(func, -(x), -result, exceptmask, excepts, checksign);\t\\\n} while (0)\n#define\ttestall_even(func, x, result, exceptmask, excepts, checksign) do { \\\n\ttestall(func, x, result, exceptmask, excepts, checksign);\t\\\n\ttestall(func, -(x), result, exceptmask, excepts, checksign);\t\\\n} while (0)\n\n/*\n * Test the given function in all precisions, within a given tolerance.\n * The tolerance is specified in ulps.\n */\n#define\ttestall_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttest_tol(func, x, result, (tol) * DBL_ULP());\t\t\t\\\n\ttest_tol(func##f, x, result, (tol) * FLT_ULP());\t\t\\\n} while (0)\n#define\ttestall_odd_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttestall_tol(func, x, result, tol);\t\t\t\t\\\n\ttestall_tol(func, -(x), -result, tol);\t\t\t\t\\\n} while (0)\n#define\ttestall_even_tol(func, x, result, tol)\t       \t\t   do { \\\n\ttestall_tol(func, x, result, tol);\t\t\t\t\\\n\ttestall_tol(func, -(x), result, tol);\t\t\t\t\\\n} while (0)\n\n#define pi 3.14159265358979323846264338327950280L\n#define c3pi 9.42477796076937971538793014983850839L\n\n/*\nstatic const long double\npi = 3.14159265358979323846264338327950280L,\nc3pi = 9.42477796076937971538793014983850839L;\n*/\n\n\n/* Tests for 0 */\nvoid\ntest_zero(void)\n{\n\tlong double complex zero = CMPLXL(0.0, 0.0);\n\n\ttestall_tol(cacosh, zero, CMPLXL(0.0, pi / 2), 1);\n\ttestall_tol(cacosh, -zero, CMPLXL(0.0, -pi / 2), 1);\n\ttestall_tol(cacos, zero, CMPLXL(pi / 2, -0.0), 1);\n\ttestall_tol(cacos, -zero, CMPLXL(pi / 2, 0.0), 1);\n\n\ttestall_odd(casinh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_odd(casin, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\n#if !__APPLE__\n\ttestall_odd(catanh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n\ttestall_odd(catan, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);\n#endif /* !__APPLE__ */\n}\n\n/*\n * Tests for NaN inputs.\n */\nvoid\ntest_nan()\n{\n\tlong double complex nan_nan = CMPLXL(NAN, NAN);\n\tlong double complex z;\n\n\t/*\n\t * IN\t\tCACOSH\t    CACOS\tCASINH\t    CATANH\n\t * NaN,NaN\tNaN,NaN\t    NaN,NaN\tNaN,NaN\t    NaN,NaN\n\t * finite,NaN\tNaN,NaN*    NaN,NaN*\tNaN,NaN*    NaN,NaN*\n\t * NaN,finite   NaN,NaN*    NaN,NaN*\tNaN,NaN*    NaN,NaN*\n\t * NaN,Inf\tInf,NaN     NaN,-Inf\t?Inf,NaN    ?0,pi/2\t\n\t * +-Inf,NaN\tInf,NaN     NaN,?Inf\t+-Inf,NaN   +-0,NaN\n\t * +-0,NaN\tNaN,NaN*    pi/2,NaN\tNaN,NaN*    +-0,NaN\n\t * NaN,0\tNaN,NaN*    NaN,NaN*\tNaN,0\t    NaN,NaN*\n\t *\n\t *  * = raise invalid\n\t */\n\tz = nan_nan;\n\ttestall(cacosh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall(cacos, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall(casinh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall(casin, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall(catanh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\ttestall(catan, z, nan_nan, ALL_STD_EXCEPT, 0, 0);\n\n\tz = CMPLXL(0.5, NAN);\n\ttestall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(cacos, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(casinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(casin, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(catanh, z, nan_nan, OPT_INVALID, 0, 0);\n#if !__APPLE__\n\ttestall(catan, z, nan_nan, OPT_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\n\tz = CMPLXL(NAN, 0.5);\n\ttestall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(cacos, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(casinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(casin, z, nan_nan, OPT_INVALID, 0, 0);\n#if !__APPLE__\n\ttestall(catanh, z, nan_nan, OPT_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\ttestall(catan, z, nan_nan, OPT_INVALID, 0, 0);\n\n\tz = CMPLXL(NAN, INFINITY);\n\ttestall(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall(cacosh, -z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall(cacos, z, CMPLXL(NAN, -INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);\n\ttestall(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, 0);\n\ttestall(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);\n#if !__APPLE__\n\ttestall_tol(catanh, z, CMPLXL(0.0, pi / 2), 1);\n\ttestall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, CS_IMAG);\n#endif /* !__APPLE__ */\n\n\tz = CMPLXL(INFINITY, NAN);\n\ttestall_even(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,\n\t\t     CS_REAL);\n\ttestall_even(cacos, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);\n\ttestall_odd(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,\n\t\t    CS_REAL);\n\ttestall_odd(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);\n#if !__APPLE__\n\ttestall_odd(catanh, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n\ttestall_odd_tol(catan, z, CMPLXL(pi / 2, 0.0), 1);\n#endif /* !__APPLE__ */\n\n\tz = CMPLXL(0.0, NAN);\n        /* XXX We allow a spurious inexact exception here. */\n\ttestall_even(cacosh, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);\n\ttestall_even_tol(cacos, z, CMPLXL(pi / 2, NAN), 1);\n\ttestall_odd(casinh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall_odd(casin, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);\n#if !__APPLE__\n\ttestall_odd(catanh, z, CMPLXL(0.0, NAN), OPT_INVALID, 0, CS_REAL);\n\ttestall_odd(catan, z, nan_nan, OPT_INVALID, 0, 0);\n#endif /* !__APPLE__ */\n\n\tz = CMPLXL(NAN, 0.0);\n\ttestall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(cacos, z, nan_nan, OPT_INVALID, 0, 0);\n\ttestall(casinh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);\n\ttestall(casin, z, nan_nan, OPT_INVALID, 0, 0);\n#if !__APPLE__\n\ttestall(catanh, z, nan_nan, OPT_INVALID, 0, CS_IMAG);\n\ttestall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, 0);\n#endif /* !__APPLE__ */\n}\n\nvoid\ntest_inf(void)\n{\n\tlong double complex z;\n\n\t/*\n\t * IN\t\tCACOSH\t    CACOS\tCASINH\t    CATANH\n\t * Inf,Inf\tInf,pi/4    pi/4,-Inf\tInf,pi/4    0,pi/2\n\t * -Inf,Inf\tInf,3pi/4   3pi/4,-Inf\t---\t    ---\n\t * Inf,finite\tInf,0\t    0,-Inf\tInf,0\t    0,pi/2\n\t * -Inf,finite\tInf,pi      pi,-Inf\t---\t    ---\n\t * finite,Inf\tInf,pi/2    pi/2,-Inf\tInf,pi/2    0,pi/2\n\t */\n\tz = CMPLXL(INFINITY, INFINITY);\n\ttestall_tol(cacosh, z, CMPLXL(INFINITY, pi / 4), 1);\n\ttestall_tol(cacosh, -z, CMPLXL(INFINITY, -c3pi / 4), 1);\n\ttestall_tol(cacos, z, CMPLXL(pi / 4, -INFINITY), 1);\n\ttestall_tol(cacos, -z, CMPLXL(c3pi / 4, INFINITY), 1);\n\ttestall_odd_tol(casinh, z, CMPLXL(INFINITY, pi / 4), 1);\n\ttestall_odd_tol(casin, z, CMPLXL(pi / 4, INFINITY), 1);\n\ttestall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);\n\ttestall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);\n\n\tz = CMPLXL(INFINITY, 0.5);\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall(cacosh, z, CMPLXL(INFINITY, 0), OPT_INEXACT, 0, CS_BOTH);\n\ttestall_tol(cacosh, -z, CMPLXL(INFINITY, -pi), 1);\n\ttestall(cacos, z, CMPLXL(0, -INFINITY), OPT_INEXACT, 0, CS_BOTH);\n\ttestall_tol(cacos, -z, CMPLXL(pi, INFINITY), 1);\n\ttestall_odd(casinh, z, CMPLXL(INFINITY, 0), OPT_INEXACT, 0, CS_BOTH);\n\ttestall_odd_tol(casin, z, CMPLXL(pi / 2, INFINITY), 1);\n\ttestall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);\n\ttestall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);\n\n\tz = CMPLXL(0.5, INFINITY);\n\ttestall_tol(cacosh, z, CMPLXL(INFINITY, pi / 2), 1);\n\ttestall_tol(cacosh, -z, CMPLXL(INFINITY, -pi / 2), 1);\n\ttestall_tol(cacos, z, CMPLXL(pi / 2, -INFINITY), 1);\n\ttestall_tol(cacos, -z, CMPLXL(pi / 2, INFINITY), 1);\n\ttestall_odd_tol(casinh, z, CMPLXL(INFINITY, pi / 2), 1);\n\t/* XXX We allow a spurious inexact exception here. */\n\ttestall_odd(casin, z, CMPLXL(0.0, INFINITY), OPT_INEXACT, 0, CS_BOTH);\n\ttestall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);\n\ttestall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);\n}\n\n/* Tests along the real and imaginary axes. */\nvoid\ntest_axes(void)\n{\n\tstatic const long double nums[] = {\n\t\t-2, -1, -0.5, 0.5, 1, 2\n\t};\n\tlong double complex z;\n\tint i;\n\n\tfor (i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {\n\t\t/* Real axis */\n\t\tz = CMPLXL(nums[i], 0.0);\n\t\tif (fabs(nums[i]) <= 1) {\n\t\t\ttestall_tol(cacosh, z, CMPLXL(0.0, acos(nums[i])), 1);\n\t\t\ttestall_tol(cacos, z, CMPLXL(acosl(nums[i]), -0.0), 1);\n\t\t\ttestall_tol(casin, z, CMPLXL(asinl(nums[i]), 0.0), 1);\n#if !__APPLE__\n\t\t\ttestall_tol(catanh, z, CMPLXL(atanh(nums[i]), 0.0), 1);\n#endif /* !__APPLE__ */\n\t\t} else {\n\t\t\ttestall_tol(cacosh, z,\n\t\t\t\t    CMPLXL(acosh(fabs(nums[i])),\n\t\t\t\t\t   (nums[i] < 0) ? pi : 0), 1);\n\t\t\ttestall_tol(cacos, z,\n\t\t\t\t    CMPLXL((nums[i] < 0) ? pi : 0,\n\t\t\t\t\t   -acosh(fabs(nums[i]))), 1);\n\t\t\ttestall_tol(casin, z,\n\t\t\t\t    CMPLXL(copysign(pi / 2, nums[i]),\n\t\t\t\t\t   acosh(fabs(nums[i]))), 1);\n\t\t\ttestall_tol(catanh, z,\n\t\t\t\t    CMPLXL(atanh(1 / nums[i]), pi / 2), 1);\n\t\t}\n\t\ttestall_tol(casinh, z, CMPLXL(asinh(nums[i]), 0.0), 1);\n\t\ttestall_tol(catan, z, CMPLXL(atan(nums[i]), 0), 1);\n\n\t\t/* TODO: Test the imaginary axis. */\n\t}\n}\n\nvoid\ntest_small(void)\n{\n\t/*\n\t * z =  0.75 + i 0.25\n\t *     acos(z) = Pi/4 - i ln(2)/2\n\t *     asin(z) = Pi/4 + i ln(2)/2\n\t *     atan(z) = atan(4)/2 + i ln(17/9)/4\n\t */\n\tstatic const struct {\n\t\tcomplex long double z;\n\t\tcomplex long double acos_z;\n\t\tcomplex long double asin_z;\n\t\tcomplex long double atan_z;\n\t} tests[] = {\n\t\t{ CMPLXL(0.75L, 0.25L),\n\t\t  CMPLXL(pi / 4, -0.34657359027997265470861606072908828L),\n\t\t  CMPLXL(pi / 4, 0.34657359027997265470861606072908828L),\n\t\t  CMPLXL(0.66290883183401623252961960521423782L,\n\t\t\t 0.15899719167999917436476103600701878L) },\n\t};\n\tint i;\n\n\tfor (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {\n\t\ttestall_tol(cacos, tests[i].z, tests[i].acos_z, 2);\n\t\ttestall_odd_tol(casin, tests[i].z, tests[i].asin_z, 2);\n\t\ttestall_odd_tol(catan, tests[i].z, tests[i].atan_z, 2);\n        }\n}\n\n/* Test inputs that might cause overflow in a sloppy implementation. */\nvoid\ntest_large(void)\n{\n\n\t/* TODO: Write these tests */\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..6\\n\");\n\n\ttest_zero();\n\tprintf(\"ok 1 - invctrig zero\\n\");\n\n\ttest_nan();\n\tprintf(\"ok 2 - invctrig nan\\n\");\n\n\ttest_inf();\n\tprintf(\"ok 3 - invctrig inf\\n\");\n\n\ttest_axes();\n\tprintf(\"ok 4 - invctrig axes\\n\");\n\n\ttest_small();\n\tprintf(\"ok 5 - invctrig small\\n\");\n\n\ttest_large();\n\tprintf(\"ok 6 - invctrig large\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-invtrig.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for corner cases in the inverse trigonometric functions. Some\n * accuracy tests are included as well, but these are very basic\n * sanity checks, not intended to be comprehensive.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#define\tLEN(a)\t\t(sizeof(a) / sizeof((a)[0]))\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. A tolerance specifying the maximum\n * relative error allowed may be specified. For the 'testall'\n * functions, the tolerance is specified in ulps.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n */\n#define\ttest_tol(func, x, result, tol, excepts) do {\t\t\t\\\n\tvolatile long double _in = (x), _out = (result);\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal_tol(func(_in), _out, (tol), CS_BOTH));\t\t\\\n\tassert(((void)func, fetestexcept(ALL_STD_EXCEPT) == (excepts))); \\\n} while (0)\n#define test(func, x, result, excepts)\t\t\t\t\t\\\n\ttest_tol(func, (x), (result), 0, (excepts))\n\n#define\ttestall_tol(prefix, x, result, tol, excepts) do {\t\t\\\n\ttest_tol(prefix, (double)(x), (double)(result),\t\t\t\\\n\t\t (tol) * ldexp(1.0, 1 - DBL_MANT_DIG), (excepts));\t\\\n\ttest_tol(prefix##f, (float)(x), (float)(result),\t\t\\\n\t\t (tol) * ldexpf(1.0, 1 - FLT_MANT_DIG), (excepts));\t\\\n\ttest_tol(prefix##l, (x), (result),\t\t\t\t\\\n\t\t (tol) * ldexpl(1.0, 1 - LDBL_MANT_DIG), (excepts));\t\\\n} while (0)\n#define testall(prefix, x, result, excepts)\t\t\t\t\\\n\ttestall_tol(prefix, (x), (result), 0, (excepts))\n\n#define\ttest2_tol(func, y, x, result, tol, excepts) do {\t\t\\\n\tvolatile long double _iny = (y), _inx = (x), _out = (result);\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal_tol(func(_iny, _inx), _out, (tol), CS_BOTH));\t\\\n\tassert(((void)func, fetestexcept(ALL_STD_EXCEPT) == (excepts))); \\\n} while (0)\n#define test2(func, y, x, result, excepts)\t\t\t\t\\\n\ttest2_tol(func, (y), (x), (result), 0, (excepts))\n\n#define\ttestall2_tol(prefix, y, x, result, tol, excepts) do {\t\t\\\n\ttest2_tol(prefix, (double)(y), (double)(x), (double)(result),\t\\\n\t\t  (tol) * ldexp(1.0, 1 - DBL_MANT_DIG), (excepts));\t\\\n\ttest2_tol(prefix##f, (float)(y), (float)(x), (float)(result),\t\\\n\t\t  (tol) * ldexpf(1.0, 1 - FLT_MANT_DIG), (excepts));\t\\\n\ttest2_tol(prefix##l, (y), (x), (result),\t\t\t\\\n\t\t  (tol) * ldexpl(1.0, 1 - LDBL_MANT_DIG), (excepts));\t\\\n} while (0)\n#define testall2(prefix, y, x, result, excepts)\t\t\t\t\\\n\ttestall2_tol(prefix, (y), (x), (result), 0, (excepts))\n\nlong double\npi =   3.14159265358979323846264338327950280e+00L,\npio3 = 1.04719755119659774615421446109316766e+00L,\nc3pi = 9.42477796076937971538793014983850839e+00L,\nc5pi = 1.57079632679489661923132169163975140e+01L,\nc7pi = 2.19911485751285526692385036829565196e+01L,\nc5pio3 = 5.23598775598298873077107230546583851e+00L,\nsqrt2m1 = 4.14213562373095048801688724209698081e-01L;\n\n\n/*\n * Test special case inputs in asin(), acos() and atan(): signed\n * zeroes, infinities, and NaNs.\n */\nstatic void\ntest_special(void)\n{\n\n#if !__APPLE__\n\ttestall(asin, 0.0, 0.0, 0);\n#endif /* !__APPLE__ */\n#if !__gnu_linux__\n\ttestall(acos, 0.0, pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n#if !__APPLE__\n\ttestall(atan, 0.0, 0.0, 0);\n\ttestall(asin, -0.0, -0.0, 0);\n#endif /* !__APPLE__ */\n#if !__gnu_linux__\n\ttestall(acos, -0.0, pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n#if !__APPLE__\n\ttestall(atan, -0.0, -0.0, 0);\n#endif /* !__APPLE__ */\n\n\ttestall(asin, INFINITY, NAN, FE_INVALID);\n\ttestall(acos, INFINITY, NAN, FE_INVALID);\n#if !__APPLE__ && !__gnu_linux__\n\ttestall(atan, INFINITY, pi / 2, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\ttestall(asin, -INFINITY, NAN, FE_INVALID);\n\ttestall(acos, -INFINITY, NAN, FE_INVALID);\n#if !__APPLE__ && !__gnu_linux__\n\ttestall(atan, -INFINITY, -pi / 2, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\n\ttestall(asin, NAN, NAN, 0);\n\ttestall(acos, NAN, NAN, 0);\n\ttestall(atan, NAN, NAN, 0);\n}\n\n/*\n * Test special case inputs in atan2(), where the exact value of y/x is\n * zero or non-finite.\n */\nstatic void\ntest_special_atan2(void)\n{\n\tlong double z;\n\tint e;\n\n#if !__APPLE__ && !__gnu_linux__\n\ttestall2(atan2, 0.0, -0.0, pi, FE_INEXACT);\n\ttestall2(atan2, -0.0, -0.0, -pi, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\ttestall2(atan2, 0.0, 0.0, 0.0, 0);\n\ttestall2(atan2, -0.0, 0.0, -0.0, 0);\n\n#if !__gnu_linux__\n\ttestall2(atan2, INFINITY, -INFINITY, c3pi / 4, FE_INEXACT);\n\ttestall2(atan2, -INFINITY, -INFINITY, -c3pi / 4, FE_INEXACT);\n\ttestall2(atan2, INFINITY, INFINITY, pi / 4, FE_INEXACT);\n\ttestall2(atan2, -INFINITY, INFINITY, -pi / 4, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\n\t/* Tests with one input in the range (0, Inf]. */\n\tz = 1.23456789L;\n\tfor (e = FLT_MIN_EXP - FLT_MANT_DIG; e <= FLT_MAX_EXP; e++) {\n#if !__APPLE__\n\t\ttest2(atan2f, 0.0, ldexpf(z, e), 0.0, 0);\n\t\ttest2(atan2f, -0.0, ldexpf(z, e), -0.0, 0);\n\t\ttest2(atan2f, 0.0, ldexpf(-z, e), (float)pi, FE_INEXACT);\n\t\ttest2(atan2f, -0.0, ldexpf(-z, e), (float)-pi, FE_INEXACT);\n#endif /* !__APPLE__ */\n\t\ttest2(atan2f, ldexpf(z, e), 0.0, (float)pi / 2, FE_INEXACT);\n\t\ttest2(atan2f, ldexpf(z, e), -0.0, (float)pi / 2, FE_INEXACT);\n\t\ttest2(atan2f, ldexpf(-z, e), 0.0, (float)-pi / 2, FE_INEXACT);\n\t\ttest2(atan2f, ldexpf(-z, e), -0.0, (float)-pi / 2, FE_INEXACT);\n\t}\n\tfor (e = DBL_MIN_EXP - DBL_MANT_DIG; e <= DBL_MAX_EXP; e++) {\n\t\ttest2(atan2, 0.0, ldexp(z, e), 0.0, 0);\n\t\ttest2(atan2, -0.0, ldexp(z, e), -0.0, 0);\n#if !__gnu_linux__\n\t\ttest2(atan2, 0.0, ldexp(-z, e), (double)pi, FE_INEXACT);\n\t\ttest2(atan2, -0.0, ldexp(-z, e), (double)-pi, FE_INEXACT);\n\t\ttest2(atan2, ldexp(z, e), 0.0, (double)pi / 2, FE_INEXACT);\n\t\ttest2(atan2, ldexp(z, e), -0.0, (double)pi / 2, FE_INEXACT);\n\t\ttest2(atan2, ldexp(-z, e), 0.0, (double)-pi / 2, FE_INEXACT);\n\t\ttest2(atan2, ldexp(-z, e), -0.0, (double)-pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\t}\n\tfor (e = LDBL_MIN_EXP - LDBL_MANT_DIG; e <= LDBL_MAX_EXP; e++) {\n\t\ttest2(atan2l, 0.0, ldexpl(z, e), 0.0, 0);\n\t\ttest2(atan2l, -0.0, ldexpl(z, e), -0.0, 0);\n\t\ttest2(atan2l, 0.0, ldexpl(-z, e), pi, FE_INEXACT);\n\t\ttest2(atan2l, -0.0, ldexpl(-z, e), -pi, FE_INEXACT);\n\t\ttest2(atan2l, ldexpl(z, e), 0.0, pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, ldexpl(z, e), -0.0, pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, ldexpl(-z, e), 0.0, -pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, ldexpl(-z, e), -0.0, -pi / 2, FE_INEXACT);\n\t}\n\n\t/* Tests with one input in the range (0, Inf). */\n\tfor (e = FLT_MIN_EXP - FLT_MANT_DIG; e <= FLT_MAX_EXP - 1; e++) {\n#if !__APPLE__\n\t\ttest2(atan2f, ldexpf(z, e), INFINITY, 0.0, 0);\n\t\ttest2(atan2f, ldexpf(-z,e), INFINITY, -0.0, 0);\n\t\ttest2(atan2f, ldexpf(z, e), -INFINITY, (float)pi, FE_INEXACT);\n\t\ttest2(atan2f, ldexpf(-z,e), -INFINITY, (float)-pi, FE_INEXACT);\n#endif /* !__APPLE__ */\n\t\ttest2(atan2f, INFINITY, ldexpf(z,e), (float)pi/2, FE_INEXACT);\n\t\ttest2(atan2f, INFINITY, ldexpf(-z,e), (float)pi/2, FE_INEXACT);\n\t\ttest2(atan2f, -INFINITY, ldexpf(z,e), (float)-pi/2,FE_INEXACT);\n\t\ttest2(atan2f, -INFINITY, ldexpf(-z,e),(float)-pi/2,FE_INEXACT);\n\t}\n\tfor (e = DBL_MIN_EXP - DBL_MANT_DIG; e <= DBL_MAX_EXP - 1; e++) {\n\t\ttest2(atan2, ldexp(z, e), INFINITY, 0.0, 0);\n\t\ttest2(atan2, ldexp(-z,e), INFINITY, -0.0, 0);\n#if !__gnu_linux__\n\t\ttest2(atan2, ldexp(z, e), -INFINITY, (double)pi, FE_INEXACT);\n\t\ttest2(atan2, ldexp(-z,e), -INFINITY, (double)-pi, FE_INEXACT);\n\t\ttest2(atan2, INFINITY, ldexp(z,e), (double)pi/2, FE_INEXACT);\n\t\ttest2(atan2, INFINITY, ldexp(-z,e), (double)pi/2, FE_INEXACT);\n\t\ttest2(atan2, -INFINITY, ldexp(z,e), (double)-pi/2,FE_INEXACT);\n\t\ttest2(atan2, -INFINITY, ldexp(-z,e),(double)-pi/2,FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\t}\n\tfor (e = LDBL_MIN_EXP - LDBL_MANT_DIG; e <= LDBL_MAX_EXP - 1; e++) {\n\t\ttest2(atan2l, ldexpl(z, e), INFINITY, 0.0, 0);\n\t\ttest2(atan2l, ldexpl(-z,e), INFINITY, -0.0, 0);\n\t\ttest2(atan2l, ldexpl(z, e), -INFINITY, pi, FE_INEXACT);\n\t\ttest2(atan2l, ldexpl(-z,e), -INFINITY, -pi, FE_INEXACT);\n\t\ttest2(atan2l, INFINITY, ldexpl(z, e), pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, INFINITY, ldexpl(-z, e), pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, -INFINITY, ldexpl(z, e), -pi / 2, FE_INEXACT);\n\t\ttest2(atan2l, -INFINITY, ldexpl(-z, e), -pi / 2, FE_INEXACT);\n\t}\n}\n\n/*\n * Test various inputs to asin(), acos() and atan() and verify that the\n * results are accurate to within 1 ulp.\n */\nstatic void\ntest_accuracy(void)\n{\n\n\t/* We expect correctly rounded results for these basic cases. */\n#if !__APPLE__ && !__gnu_linux__\n\ttestall(asin, 1.0, pi / 2, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\ttestall(acos, 1.0, 0, 0);\n\ttestall(atan, 1.0, pi / 4, FE_INEXACT);\n#if !__APPLE__ && !__gnu_linux__\n\ttestall(asin, -1.0, -pi / 2, FE_INEXACT);\n\ttestall(acos, -1.0, pi, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\ttestall(atan, -1.0, -pi / 4, FE_INEXACT);\n\n\t/*\n\t * Here we expect answers to be within 1 ulp, although inexactness\n\t * in the input, combined with double rounding, could cause larger\n\t * errors.\n\t */\n\n\ttestall_tol(asin, sqrtl(2) / 2, pi / 4, 1, FE_INEXACT);\n\ttestall_tol(acos, sqrtl(2) / 2, pi / 4, 1, FE_INEXACT);\n\ttestall_tol(asin, -sqrtl(2) / 2, -pi / 4, 1, FE_INEXACT);\n\ttestall_tol(acos, -sqrtl(2) / 2, c3pi / 4, 1, FE_INEXACT);\n\n\ttestall_tol(asin, sqrtl(3) / 2, pio3, 1, FE_INEXACT);\n\ttestall_tol(acos, sqrtl(3) / 2, pio3 / 2, 1, FE_INEXACT);\n\ttestall_tol(atan, sqrtl(3), pio3, 1, FE_INEXACT);\n\ttestall_tol(asin, -sqrtl(3) / 2, -pio3, 1, FE_INEXACT);\n\ttestall_tol(acos, -sqrtl(3) / 2, c5pio3 / 2, 1, FE_INEXACT);\n\ttestall_tol(atan, -sqrtl(3), -pio3, 1, FE_INEXACT);\n\n\ttestall_tol(atan, sqrt2m1, pi / 8, 1, FE_INEXACT);\n\ttestall_tol(atan, -sqrt2m1, -pi / 8, 1, FE_INEXACT);\n}\n\n/*\n * Test inputs to atan2() where x is a power of 2. These are easy cases\n * because y/x is exact.\n */\nstatic void\ntest_p2x_atan2(void)\n{\n\n\ttestall2(atan2, 1.0, 1.0, pi / 4, FE_INEXACT);\n\ttestall2(atan2, 1.0, -1.0, c3pi / 4, FE_INEXACT);\n\ttestall2(atan2, -1.0, 1.0, -pi / 4, FE_INEXACT);\n\ttestall2(atan2, -1.0, -1.0, -c3pi / 4, FE_INEXACT);\n\n\ttestall2_tol(atan2, sqrt2m1 * 2, 2.0, pi / 8, 1, FE_INEXACT);\n\ttestall2_tol(atan2, sqrt2m1 * 2, -2.0, c7pi / 8, 1, FE_INEXACT);\n\ttestall2_tol(atan2, -sqrt2m1 * 2, 2.0, -pi / 8, 1, FE_INEXACT);\n\ttestall2_tol(atan2, -sqrt2m1 * 2, -2.0, -c7pi / 8, 1, FE_INEXACT);\n\n\ttestall2_tol(atan2, sqrtl(3) * 0.5, 0.5, pio3, 1, FE_INEXACT);\n\ttestall2_tol(atan2, sqrtl(3) * 0.5, -0.5, pio3 * 2, 1, FE_INEXACT);\n\ttestall2_tol(atan2, -sqrtl(3) * 0.5, 0.5, -pio3, 1, FE_INEXACT);\n\ttestall2_tol(atan2, -sqrtl(3) * 0.5, -0.5, -pio3 * 2, 1, FE_INEXACT);\n}\n\n/*\n * Test inputs very close to 0.\n */\nstatic void\ntest_tiny(void)\n{\n\tfloat tiny = 0x1.23456p-120f;\n\n#if !__gnu_linux__\n\ttestall(asin, tiny, tiny, FE_INEXACT);\n\ttestall(acos, tiny, pi / 2, FE_INEXACT);\n\ttestall(atan, tiny, tiny, FE_INEXACT);\n\n\ttestall(asin, -tiny, -tiny, FE_INEXACT);\n\ttestall(acos, -tiny, pi / 2, FE_INEXACT);\n\ttestall(atan, -tiny, -tiny, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\n\t/* Test inputs to atan2() that would cause y/x to underflow. */\n\ttest2(atan2f, 0x1.0p-100, 0x1.0p100, 0.0, FE_INEXACT | FE_UNDERFLOW);\n\ttest2(atan2, 0x1.0p-1000, 0x1.0p1000, 0.0, FE_INEXACT | FE_UNDERFLOW);\n\ttest2(atan2l, ldexpl(1.0, 100 - LDBL_MAX_EXP),\n\t      ldexpl(1.0, LDBL_MAX_EXP - 100), 0.0, FE_INEXACT | FE_UNDERFLOW);\n\ttest2(atan2f, -0x1.0p-100, 0x1.0p100, -0.0, FE_INEXACT | FE_UNDERFLOW);\n\ttest2(atan2, -0x1.0p-1000, 0x1.0p1000, -0.0, FE_INEXACT | FE_UNDERFLOW);\n\ttest2(atan2l, -ldexpl(1.0, 100 - LDBL_MAX_EXP),\n\t      ldexpl(1.0, LDBL_MAX_EXP - 100), -0.0, FE_INEXACT | FE_UNDERFLOW);\n#if !__APPLE__\n\ttest2(atan2f, 0x1.0p-100, -0x1.0p100, (float)pi, FE_INEXACT);\n#endif /* !__APPLE__ */\n#if !__gnu_linux__\n\ttest2(atan2, 0x1.0p-1000, -0x1.0p1000, (double)pi, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, ldexpl(1.0, 100 - LDBL_MAX_EXP),\n\t      -ldexpl(1.0, LDBL_MAX_EXP - 100), pi, FE_INEXACT);\n#if !__APPLE__\n\ttest2(atan2f, -0x1.0p-100, -0x1.0p100, (float)-pi, FE_INEXACT);\n#endif /* !__APPLE__ */\n#if !__gnu_linux__\n\ttest2(atan2, -0x1.0p-1000, -0x1.0p1000, (double)-pi, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, -ldexpl(1.0, 100 - LDBL_MAX_EXP),\n\t      -ldexpl(1.0, LDBL_MAX_EXP - 100), -pi, FE_INEXACT);\n}\n\n/*\n * Test very large inputs to atan().\n */\nstatic void\ntest_atan_huge(void)\n{\n\tfloat huge = 0x1.23456p120;\n\n#if !__APPLE__ && !__gnu_linux__\n\ttestall(atan, huge, pi / 2, FE_INEXACT);\n\ttestall(atan, -huge, -pi / 2, FE_INEXACT);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\n\t/* Test inputs to atan2() that would cause y/x to overflow. */\n\ttest2(atan2f, 0x1.0p100, 0x1.0p-100, (float)pi / 2, FE_INEXACT);\n#if !__gnu_linux__\n\ttest2(atan2, 0x1.0p1000, 0x1.0p-1000, (double)pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, ldexpl(1.0, LDBL_MAX_EXP - 100),\n\t      ldexpl(1.0, 100 - LDBL_MAX_EXP), pi / 2, FE_INEXACT);\n\ttest2(atan2f, -0x1.0p100, 0x1.0p-100, (float)-pi / 2, FE_INEXACT);\n#if !__gnu_linux__\n\ttest2(atan2, -0x1.0p1000, 0x1.0p-1000, (double)-pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, -ldexpl(1.0, LDBL_MAX_EXP - 100),\n\t      ldexpl(1.0, 100 - LDBL_MAX_EXP), -pi / 2, FE_INEXACT);\n\n#if !__gnu_linux__\n\ttest2(atan2f, 0x1.0p100, -0x1.0p-100, (float)pi / 2, FE_INEXACT);\n\ttest2(atan2, 0x1.0p1000, -0x1.0p-1000, (double)pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, ldexpl(1.0, LDBL_MAX_EXP - 100),\n\t      -ldexpl(1.0, 100 - LDBL_MAX_EXP), pi / 2, FE_INEXACT);\n#if !__gnu_linux__\n\ttest2(atan2f, -0x1.0p100, -0x1.0p-100, (float)-pi / 2, FE_INEXACT);\n\ttest2(atan2, -0x1.0p1000, -0x1.0p-1000, (double)-pi / 2, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttest2(atan2l, -ldexpl(1.0, LDBL_MAX_EXP - 100),\n\t      -ldexpl(1.0, 100 - LDBL_MAX_EXP), -pi / 2, FE_INEXACT);\n}\n\n/*\n * Test that sin(asin(x)) == x, and similarly for acos() and atan().\n * You need to have a working sinl(), cosl(), and tanl() for these\n * tests to pass.\n */\nstatic long double\nsinasinf(float x)\n{\n\n\treturn (sinl(asinf(x)));\n}\n\nstatic long double\nsinasin(double x)\n{\n\n\treturn (sinl(asin(x)));\n}\n\nstatic long double\nsinasinl(long double x)\n{\n\n\treturn (sinl(asinl(x)));\n}\n\nstatic long double\ncosacosf(float x)\n{\n\n\treturn (cosl(acosf(x)));\n}\n\nstatic long double\ncosacos(double x)\n{\n\n\treturn (cosl(acos(x)));\n}\n\nstatic long double\ncosacosl(long double x)\n{\n\n\treturn (cosl(acosl(x)));\n}\n\nstatic long double\ntanatanf(float x)\n{\n\n\treturn (tanl(atanf(x)));\n}\n\nstatic long double\ntanatan(double x)\n{\n\n\treturn (tanl(atan(x)));\n}\n\nstatic long double\ntanatanl(long double x)\n{\n\n\treturn (tanl(atanl(x)));\n}\n\nstatic void\ntest_inverse(void)\n{\n\tfloat i;\n\n\tfor (i = -1; i <= 1; i += 0x1.0p-12f) {\n#if !__APPLE__\n\t\ttestall_tol(sinasin, i, i, 2, i == 0 ? 0 : FE_INEXACT);\n#endif /* !__APPLE__ */\n\t\t/* The relative error for cosacos is very large near x=0. */\n\t\tif (fabsf(i) > 0x1.0p-4f)\n\t\t\ttestall_tol(cosacos, i, i, 16, i == 1 ? 0 : FE_INEXACT);\n#if !__APPLE__\n\t\ttestall_tol(tanatan, i, i, 2, i == 0 ? 0 : FE_INEXACT);\n#endif /* !__APPLE__ */\n\t}\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..7\\n\");\n\n\ttest_special();\n\tprintf(\"ok 1 - special\\n\");\n\n\ttest_special_atan2();\n\tprintf(\"ok 2 - atan2 special\\n\");\n\n\ttest_accuracy();\n\tprintf(\"ok 3 - accuracy\\n\");\n\n\ttest_p2x_atan2();\n\tprintf(\"ok 4 - atan2 p2x\\n\");\n\n\ttest_tiny();\n\tprintf(\"ok 5 - tiny inputs\\n\");\n\n\ttest_atan_huge();\n\tprintf(\"ok 6 - atan huge inputs\\n\");\n\n\ttest_inverse();\n\tprintf(\"ok 7 - inverse\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-logarithm.c",
    "content": "/*-\n * Copyright (c) 2008-2010 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for corner cases in log*().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#ifdef __i386__\n#include <ieeefp.h>\n#endif\n\n#include \"test-utils.h\"\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasoons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, x, result, exceptmask, excepts)\tdo {\t\t\\\n\tvolatile long double _d = x;\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal((func)(_d), (result)));\t\t\t\t \\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n#define\ttest(func, x, result, exceptmask, excepts)\tdo {\t\t\\\n\tvolatile long double _d = x;\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal((func)(_d), (result)));\t\t\t\t \\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n#define\ttest_tol(func, z, result, tol)\t\t\tdo {\t\t\\\n\tvolatile long double _d = z;\t\t\t\t\t\\\n\tdebug(\"  testing %6s(%15La) ~= % .36Le\\n\", #func, _d, result);\t\\\n\tassert(fpequal_tol((func)(_d), (result), (tol), CS_BOTH));\t\\\n} while (0)\n\n/* Test all the functions that compute log(x). */\n#define\ttestall0(x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(log, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(logf, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(logl, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log2, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log2f, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log2l, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log10, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log10f, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log10l, x, result, exceptmask, excepts);\t\t\t\\\n} while (0)\n\n/* Test all the functions that compute log(1+x). */\n#define\ttestall1(x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(log1p, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log1pf, x, result, exceptmask, excepts);\t\t\t\\\n\ttest(log1pl, x, result, exceptmask, excepts);\t\t\t\\\n} while (0)\n\nvoid\nrun_generic_tests(void)\n{\n\n\t/* log(1) == 0, no exceptions raised */\n\ttestall0(1.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall1(0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall1(-0.0, -0.0, ALL_STD_EXCEPT, 0);\n\n\t/* log(NaN) == NaN, no exceptions raised */\n\ttestall0(NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall1(NAN, NAN, ALL_STD_EXCEPT, 0);\n\n\t/* log(Inf) == Inf, no exceptions raised */\n\ttestall0(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\ttestall1(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);\n\n\t/* log(x) == NaN for x < 0, invalid exception raised */\n\ttestall0(-INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall1(-INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall0(-1.0, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall1(-1.5, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\n\t/* log(0) == -Inf, divide-by-zero exception */\n\ttestall0(0.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);\n\ttestall0(-0.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);\n\ttestall1(-1.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);\n}\n\nvoid\nrun_log2_tests(void)\n{\n\tint i;\n\n\t/*\n\t * We should insist that log2() return exactly the correct\n\t * result and not raise an inexact exception for powers of 2.\n\t */\n\tfeclearexcept(FE_ALL_EXCEPT);\n\tfor (i = FLT_MIN_EXP - FLT_MANT_DIG; i < FLT_MAX_EXP; i++) {\n\t\tassert(log2f(ldexpf(1.0, i)) == i);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\tfor (i = DBL_MIN_EXP - DBL_MANT_DIG; i < DBL_MAX_EXP; i++) {\n\t\tassert(log2(ldexp(1.0, i)) == i);\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\tfor (i = LDBL_MIN_EXP - LDBL_MANT_DIG; i < LDBL_MAX_EXP; i++) {\n\t\tassert(log2l(ldexpl(1.0, i)) == i);\n#if 0\n\t\t/* XXX This test does not pass yet. */\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n#endif\n\t}\n}\n\nvoid\nrun_roundingmode_tests(void)\n{\n\n\t/*\n\t * Corner cases in other rounding modes.\n\t */\n\tfesetround(FE_DOWNWARD);\n\t/* These are still positive per IEEE 754R */\n#if !__APPLE__\n#if 0\n\ttestall0(1.0, 0.0, ALL_STD_EXCEPT, 0);\n#else\n\t/* logl, log2l, and log10l don't pass yet. */\n#if !__gnu_linux__\n\ttest(log, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n#endif /* !__gnu_linux__ */\n\ttest(logf, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttest(log2, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttest(log2f, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n#if !__gnu_linux__\n\ttest(log10, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n#endif /* !__gnu_linux__ */\n\ttest(log10f, 1.0, 0.0, ALL_STD_EXCEPT, 0);\n#endif\n\ttestall1(0.0, 0.0, ALL_STD_EXCEPT, 0);\n#endif /* !__APPLE__ */\n\tfesetround(FE_TOWARDZERO);\n\ttestall0(1.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall1(0.0, 0.0, ALL_STD_EXCEPT, 0);\n\n\tfesetround(FE_UPWARD);\n\ttestall0(1.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall1(0.0, 0.0, ALL_STD_EXCEPT, 0);\n\t/* log1p(-0.0) == -0.0 even when rounding upwards */\n\ttestall1(-0.0, -0.0, ALL_STD_EXCEPT, 0);\n\n\tfesetround(FE_TONEAREST);\n}\n\nvoid\nrun_accuracy_tests(void)\n{\n\tstatic const struct {\n\t\tfloat x;\n\t\tlong double log2x;\n\t\tlong double logex;\n\t\tlong double log10x;\n        } tests[] = {\n\t\t{  0x1p-120 + 0x1p-140,\n\t\t  -1.19999998624139449158861798943319717e2L,\n\t\t  -8.31776607135195754708796206665656732e1L,\n\t\t  -3.61235990655024477716980559136055915e1L,\n\t\t},\n\t\t{  1.0 - 0x1p-20,\n\t\t  -1.37586186296463416424364914705656460e-6L,\n\t\t  -9.53674771153890007250243736279163253e-7L,\n\t\t  -4.14175690642480911859354110516159131e-7L, },\n\t\t{  1.0 + 0x1p-20,\n\t\t   1.37586055084113820105668028340371476e-6L,\n\t\t   9.53673861659188233908415514963336144e-7L,\n\t\t   4.14175295653950611453333571759200697e-7L },\n\t\t{  19.75,\n\t\t   4.30378074817710292442728634194115348e0L,\n\t\t   2.98315349134713087533848129856505779e0L,\n\t\t   1.29556709996247903756734359702926363e0L },\n\t\t{  19.75 * 0x1p100,\n\t\t   1.043037807481771029244272863419411534e2L,\n\t\t   7.229787154734166181706169344438271459e1L,\n\t\t   3.139856666636059855894123306947856631e1L },\n\t};\n        int i;\n\n\tfor (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {\n\t\ttest_tol(log2, tests[i].x, tests[i].log2x, DBL_ULP());\n\t\ttest_tol(log2f, tests[i].x, tests[i].log2x, FLT_ULP());\n\t\ttest_tol(log2l, tests[i].x, tests[i].log2x, LDBL_ULP());\n\t\ttest_tol(log, tests[i].x, tests[i].logex, DBL_ULP());\n\t\ttest_tol(logf, tests[i].x, tests[i].logex, FLT_ULP());\n\t\ttest_tol(logl, tests[i].x, tests[i].logex, LDBL_ULP());\n\t\ttest_tol(log10, tests[i].x, tests[i].log10x, DBL_ULP());\n\t\ttest_tol(log10f, tests[i].x, tests[i].log10x, FLT_ULP());\n\t\ttest_tol(log10l, tests[i].x, tests[i].log10x, LDBL_ULP());\n\t\tif (tests[i].x >= 0.5) {\n\t\t\ttest_tol(log1p, tests[i].x - 1, tests[i].logex,\n\t\t\t\t DBL_ULP());\n\t\t\ttest_tol(log1pf, tests[i].x - 1, tests[i].logex,\n\t\t\t\t FLT_ULP());\n\t\t\ttest_tol(log1pl, tests[i].x - 1, tests[i].logex,\n\t\t\t\t LDBL_ULP());\n\t\t}\n\t}\n}\n\nvoid\nrun_log1p_accuracy_tests(void)\n{\n\n\ttest_tol(log1pf, 0x0.333333p0F,\n\t\t 1.82321546859847114303367992804596800640e-1L, FLT_ULP());\n\ttest_tol(log1p, 0x0.3333333333333p0,\n\t\t 1.82321556793954589204283870982629267635e-1L, DBL_ULP());\n\ttest_tol(log1pl, 0x0.33333333333333332p0L,\n\t\t 1.82321556793954626202683007050468762914e-1L, LDBL_ULP());\n\n\ttest_tol(log1pf, -0x0.333333p0F,\n\t\t -2.23143536413048672940940199918017467652e-1L, FLT_ULP());\n\ttest_tol(log1p, -0x0.3333333333333p0,\n\t\t -2.23143551314209700255143859052009022937e-1L, DBL_ULP());\n\ttest_tol(log1pl, -0x0.33333333333333332p0L,\n\t\t -2.23143551314209755752742563153765697950e-1L, LDBL_ULP());\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..5\\n\");\n\n\trun_generic_tests();\n\tprintf(\"ok 1 - logarithm\\n\");\n\n\trun_log2_tests();\n\tprintf(\"ok 2 - logarithm\\n\");\n\n\trun_roundingmode_tests();\n\tprintf(\"ok 3 - logarithm\\n\");\n\n\trun_accuracy_tests();\n\tprintf(\"ok 4 - logarithm\\n\");\n\n\trun_log1p_accuracy_tests();\n\tprintf(\"ok 5 - logarithm\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-lrint.c",
    "content": "/*-\n * Copyright (c) 2005-2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for lrint(), lrintf(), llrint(), and llrintf().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <limits.h>\n#include <math.h>\n#include <stdio.h>\n\n#ifdef\t__i386__\n#include <ieeefp.h>\n#endif\n\n/*\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, x, result, excepts)\tdo {\t\t\t\t\\\n\tvolatile double _d = x;\t\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert((func)(_d) == (result) || fetestexcept(FE_INVALID));\t\\\n\tassert(fetestexcept(FE_ALL_EXCEPT) == (excepts));\t\t\\\n} while (0)\n\n#define\ttestall(x, result, excepts)\tdo {\t\t\t\t\\\n\ttest(lrint, x, result, excepts);\t\t\t\t\\\n\ttest(lrintf, x, result, excepts);\t\t\t\t\\\n\ttest(lrintl, x, result, excepts);\t\t\t\t\\\n\ttest(llrint, x, result, excepts);\t\t\t\t\\\n\ttest(llrintf, x, result, excepts);\t\t\t\t\\\n\ttest(llrintl, x, result, excepts);\t\t\t\t\\\n} while (0)\n\n#define\tIGNORE\t0\n\n#pragma STDC FENV_ACCESS ON\n\nvoid\nrun_tests(void)\n{\n\n\tassert(fesetround(FE_DOWNWARD) == 0);\n\ttestall(0.75, 0, FE_INEXACT);\n\ttestall(-0.5, -1, FE_INEXACT);\n\n\tassert(fesetround(FE_TONEAREST) == 0);\n\ttestall(0.0, 0, 0);\n\ttestall(0.25, 0, FE_INEXACT);\n\ttestall(0.5, 0, FE_INEXACT);\n\ttestall(-2.5, -2, FE_INEXACT);\n\ttestall(1.0, 1, 0);\n\ttestall(0x12345000p0, 0x12345000, 0);\n\ttestall(0x1234.fp0, 0x1235, FE_INEXACT);\n\ttestall(INFINITY, IGNORE, FE_INVALID);\n\ttestall(NAN, IGNORE, FE_INVALID);\n\n#if (LONG_MAX == 0x7fffffffl)\n\tassert(fesetround(FE_UPWARD) == 0);\n\ttest(lrint, 0x7fffffff.8p0, IGNORE, FE_INVALID);\n\ttest(lrint, -0x80000000.4p0, -0x80000000l, FE_INEXACT);\n\n\tassert(fesetround(FE_DOWNWARD) == 0);\n\ttest(lrint, -0x80000000.8p0, IGNORE, FE_INVALID);\n\ttest(lrint, 0x80000000.0p0, IGNORE, FE_INVALID);\n\ttest(lrint, 0x7fffffff.4p0, 0x7fffffffl, FE_INEXACT);\n\ttest(lrintf, 0x80000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lrintf, 0x7fffff80.0p0f, 0x7fffff80l, 0);\n\n\tassert(fesetround(FE_TOWARDZERO) == 0);\n\ttest(lrint, 0x7fffffff.8p0,  0x7fffffffl, FE_INEXACT);\n\ttest(lrint, -0x80000000.8p0, -0x80000000l, FE_INEXACT);\n\ttest(lrint, 0x80000000.0p0, IGNORE, FE_INVALID);\n\ttest(lrintf, 0x80000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lrintf, 0x7fffff80.0p0f, 0x7fffff80l, 0);\n#elif (LONG_MAX == 0x7fffffffffffffffll)\n\tassert(fesetround(FE_TONEAREST) == 0);\n\ttest(lrint, 0x8000000000000000.0p0, IGNORE, FE_INVALID);\n\ttest(lrintf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lrint, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00l, 0);\n\ttest(lrintf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000l, 0);\n\ttest(lrint, -0x8000000000000800.0p0, IGNORE, FE_INVALID);\n\ttest(lrintf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lrint, -0x8000000000000000.0p0, -0x8000000000000000l, 0);\n\ttest(lrintf, -0x8000000000000000.0p0f, -0x8000000000000000l, 0);\n#else\n#error \"Unsupported long size\"\n#endif\n\n#if (LLONG_MAX == 0x7fffffffffffffffLL)\n\tassert(fesetround(FE_TONEAREST) == 0);\n\ttest(llrint, 0x8000000000000000.0p0, IGNORE, FE_INVALID);\n\ttest(llrintf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(llrint, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00ll, 0);\n\ttest(llrintf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000ll, 0);\n\ttest(llrint, -0x8000000000000800.0p0, IGNORE, FE_INVALID);\n\ttest(llrintf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(llrint, -0x8000000000000000.0p0, -0x8000000000000000ll, 0);\n\ttest(llrintf, -0x8000000000000000.0p0f, -0x8000000000000000ll, 0);\n#else\n#error \"Unsupported long long size\"\n#endif\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..1\\n\");\n\n\trun_tests();\n#ifdef\t__i386__\n\tfpsetprec(FP_PE);\n\trun_tests();\n#endif\n\n\tprintf(\"ok 1 - lrint\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-lround.c",
    "content": "/*-\n * Copyright (c) 2005 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for lround(), lroundf(), llround(), and llroundf().\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <limits.h>\n#include <math.h>\n#include <stdio.h>\n\n/*\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, x, result, excepts)\tdo {\t\t\t\t\\\n\tvolatile double _d = x;\t\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert((func)(_d) == (result) || fetestexcept(FE_INVALID));\t\\\n\tassert(fetestexcept(FE_ALL_EXCEPT) == (excepts));\t\t\\\n} while (0)\n\n#define\ttestall(x, result, excepts)\tdo {\t\t\t\t\\\n\ttest(lround, x, result, excepts);\t\t\t\t\\\n\ttest(lroundf, x, result, excepts);\t\t\t\t\\\n\ttest(llround, x, result, excepts);\t\t\t\t\\\n\ttest(llroundf, x, result, excepts);\t\t\t\t\\\n} while (0)\n\n#define\tIGNORE\t0\n\n#pragma STDC FENV_ACCESS ON\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..1\\n\");\n\n\ttestall(0.0, 0, 0);\n#if !__gnu_linux__\n\ttestall(0.25, 0, FE_INEXACT);\n\ttestall(0.5, 1, FE_INEXACT);\n\ttestall(-0.5, -1, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttestall(1.0, 1, 0);\n\ttestall(0x12345000p0, 0x12345000, 0);\n#if !__gnu_linux__\n\ttestall(0x1234.fp0, 0x1235, FE_INEXACT);\n#endif /* !__gnu_linux__ */\n\ttestall(INFINITY, IGNORE, FE_INVALID);\n\ttestall(NAN, IGNORE, FE_INVALID);\n\n#if (LONG_MAX == 0x7fffffffl)\n\ttest(lround, 0x7fffffff.8p0, IGNORE, FE_INVALID);\n\ttest(lround, -0x80000000.8p0, IGNORE, FE_INVALID);\n\ttest(lround, 0x80000000.0p0, IGNORE, FE_INVALID);\n\ttest(lround, 0x7fffffff.4p0, 0x7fffffffl, FE_INEXACT);\n\ttest(lround, -0x80000000.4p0, -0x80000000l, FE_INEXACT);\n\ttest(lroundf, 0x80000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lroundf, 0x7fffff80.0p0f, 0x7fffff80l, 0);\n#elif (LONG_MAX == 0x7fffffffffffffffll)\n\ttest(lround, 0x8000000000000000.0p0, IGNORE, FE_INVALID);\n\ttest(lroundf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lround, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00l, 0);\n\ttest(lroundf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000l, 0);\n\ttest(lround, -0x8000000000000800.0p0, IGNORE, FE_INVALID);\n\ttest(lroundf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(lround, -0x8000000000000000.0p0, -0x8000000000000000l, 0);\n\ttest(lroundf, -0x8000000000000000.0p0f, -0x8000000000000000l, 0);\n#else\n#error \"Unsupported long size\"\n#endif\n\n#if (LLONG_MAX == 0x7fffffffffffffffLL)\n\ttest(llround, 0x8000000000000000.0p0, IGNORE, FE_INVALID);\n\ttest(llroundf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(llround, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00ll, 0);\n\ttest(llroundf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000ll, 0);\n\ttest(llround, -0x8000000000000800.0p0, IGNORE, FE_INVALID);\n\ttest(llroundf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);\n\ttest(llround, -0x8000000000000000.0p0, -0x8000000000000000ll, 0);\n\ttest(llroundf, -0x8000000000000000.0p0f, -0x8000000000000000ll, 0);\n#else\n#error \"Unsupported long long size\"\n#endif\n\n\tprintf(\"ok 1 - lround\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-nan.c",
    "content": "/*-\n * Copyright (C) 2007 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for nan(), nanf(), and nanl(). We also test that strtod(\"nan(...)\")\n * and sscanf(\"nan(...)\", ...) work identically.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <locale.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nvoid\ntestnan(const char *nan_format)\n{\n\tchar nan_str[128];\n\tchar *end;\n\tlong double ald[4];\n\tdouble ad[4];\n\tfloat af[4];\n\tint i;\n\n\tsnprintf(nan_str, sizeof(nan_str), \"nan(%s)\", nan_format);\n\tfor (i = 0; i < 4; i++) {\n\t\t/*\n\t\t * x86 has an 80-bit long double stored in 96 bits,\n\t\t * so we need to initialize the memory for the memcmp()\n\t\t * checks below to work.\n\t\t */\n\t\tbzero(&af[i], sizeof(float));\n\t\tbzero(&ad[i], sizeof(double));\n\t\tbzero(&ald[i], sizeof(long double));\n\t\t   \n\t}\n\n\taf[0] = nanf(nan_format);\n\tassert(isnan(af[0]));\n\taf[1] = strtof(nan_str, &end);\n\tassert(end == nan_str + strlen(nan_str));\n\tassert(sscanf(nan_str, \"%e\", &af[2]) == 1);\n\tassert(memcmp(&af[0], &af[1], sizeof(float)) == 0);\n#if !__gnu_linux__\n\tassert(memcmp(&af[1], &af[2], sizeof(float)) == 0);\n#endif /* !__gnu_linux__ */\n\tif (*nan_format == '\\0') {\n\t\t/* nanf(\"\") == strtof(\"nan\") */\n\t\taf[3] = strtof(\"nan\", NULL);\n\t\tassert(memcmp(&af[2], &af[3], sizeof(float)) == 0);\n\t}\n\n\tad[0] = nan(nan_format);\n\tassert(isnan(ad[0]));\n\tad[1] = strtod(nan_str, &end);\n\tassert(end == nan_str + strlen(nan_str));\n\tassert(sscanf(nan_str, \"%le\", &ad[2]) == 1);\n\tassert(memcmp(&ad[0], &ad[1], sizeof(double)) == 0);\n#if !__gnu_linux__\n\tassert(memcmp(&ad[1], &ad[2], sizeof(double)) == 0);\n#endif /* !__gnu_linux__ */\n\tif (*nan_format == '\\0') {\n\t\t/* nan(\"\") == strtod(\"nan\") */\n\t\tad[3] = strtod(\"nan\", NULL);\n\t\tassert(memcmp(&ad[2], &ad[3], sizeof(double)) == 0);\n\t}\n\n\tald[0] = nanl(nan_format);\n\tassert(isnan(ald[0]));\n\tald[1] = strtold(nan_str, &end);\n\tassert(end == nan_str + strlen(nan_str));\n\tassert(sscanf(nan_str, \"%Le\", &ald[2]) == 1);\n\tassert(memcmp(&ald[0], &ald[1], sizeof(long double)) == 0);\n#if 0\n\tassert(memcmp(&ald[1], &ald[2], sizeof(long double)) == 0);\n\tif (*nan_format == '\\0') {\n\t\t/* nanl(\"\") == strtold(\"nan\") */\n\t\tald[3] = strtold(\"nan\", NULL);\n\t\tassert(memcmp(&ald[2], &ald[3], sizeof(long double)) == 0);\n\t}\n#endif\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..1\\n\");\n\n#if !__APPLE__\n\t/* Die if a signalling NaN is returned */\n\tfeenableexcept(FE_INVALID);\n#endif /* !__APPLE__ */\n\n\ttestnan(\"0x1234\");\n\ttestnan(\"\");\n\n\tprintf(\"ok 1 - nan\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-nearbyint.c",
    "content": "/*-\n * Copyright (c) 2010 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for nearbyint{,f,l}()\n *\n * TODO:\n * - adapt tests for rint(3)\n * - tests for harder values (more mantissa bits than float)\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\nstatic int testnum;\n\nstatic const int rmodes[] = {\n\tFE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO,\n};\n\n/* Make sure we're testing the library, not some broken compiler built-ins. */\ndouble (*libnearbyint)(double) = nearbyint;\nfloat (*libnearbyintf)(float) = nearbyintf;\nlong double (*libnearbyintl)(long double) = nearbyintl;\n#define nearbyintf libnearbyintf\n#define nearbyint libnearbyint\n#define nearbyintl libnearbyintl\n\nstatic const struct {\n\tfloat in;\n\tfloat out[3];\t/* one answer per rounding mode except towardzero */\n} tests[] = {\n/* input\toutput (expected) */\n    { 0.0,\t{ 0.0, 0.0, 0.0 }},\n    { 0.5,\t{ 0.0, 0.0, 1.0 }},\n    { M_PI,\t{ 3.0, 3.0, 4.0 }},\n    { 65536.5,\t{ 65536, 65536, 65537 }},\n    { INFINITY,\t{ INFINITY, INFINITY, INFINITY }},\n    { NAN,\t{ NAN, NAN, NAN }},\n};\n\nstatic const int ntests = sizeof(tests) / sizeof(tests[0]);\n\n/* Get the appropriate result for the current rounding mode. */\nstatic float\nget_output(int testindex, int rmodeindex, int negative)\n{\n\tdouble out;\n\n\tif (negative) {\t/* swap downwards and upwards if input is negative */\n\t\tif (rmodeindex == 1)\n\t\t\trmodeindex = 2;\n\t\telse if (rmodeindex == 2)\n\t\t\trmodeindex = 1;\n\t}\n\tif (rmodeindex == 3) /* FE_TOWARDZERO uses the value for downwards */\n\t\trmodeindex = 1;\n\tout = tests[testindex].out[rmodeindex];\n\treturn (negative ? -out : out);\n}\n\nstatic void\ntest_nearby(int testindex)\n{\n\tfloat in, out;\n\tint i;\n\n\tfor (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) {\n\t\tfesetround(rmodes[i]);\n\t\tfeclearexcept(ALL_STD_EXCEPT);\n\n\t\tin = tests[testindex].in;\n\t\tout = get_output(testindex, i, 0);\n\t\tassert(fpequal(out, libnearbyintf(in)));\n\t\tassert(fpequal(out, nearbyint(in)));\n\t\tassert(fpequal(out, nearbyintl(in)));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\n\t\tin = -tests[testindex].in;\n\t\tout = get_output(testindex, i, 1);\n\t\tassert(fpequal(out, nearbyintf(in)));\n\t\tassert(fpequal(out, nearbyint(in)));\n\t\tassert(fpequal(out, nearbyintl(in)));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\n\tprintf(\"ok %d\\t\\t# nearbyint(+%g)\\n\", testnum++, in);\n}\n\nstatic void\ntest_modf(int testindex)\n{\n\tfloat in, out;\n\tfloat ipartf, ipart_expected;\n\tdouble ipart;\n\tlong double ipartl;\n\tint i;\n\n\tfor (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) {\n\t\tfesetround(rmodes[i]);\n\t\tfeclearexcept(ALL_STD_EXCEPT);\n\n\t\tin = tests[testindex].in;\n\t\tipart_expected = tests[testindex].out[1];\n\t\tout = copysignf(\n\t\t    isinf(ipart_expected) ? 0.0 : in - ipart_expected, in);\n\t\tipartl = ipart = ipartf = 42.0;\n\n\t\tassert(fpequal(out, modff(in, &ipartf)));\n\t\tassert(fpequal(ipart_expected, ipartf));\n\t\tassert(fpequal(out, modf(in, &ipart)));\n\t\tassert(fpequal(ipart_expected, ipart));\n\t\tassert(fpequal(out, modfl(in, &ipartl)));\n\t\tassert(fpequal(ipart_expected, ipartl));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\n\t\tin = -in;\n\t\tipart_expected = -ipart_expected;\n\t\tout = -out;\n\t\tipartl = ipart = ipartf = 42.0;\n\t\tassert(fpequal(out, modff(in, &ipartf)));\n\t\tassert(fpequal(ipart_expected, ipartf));\n\t\tassert(fpequal(out, modf(in, &ipart)));\n\t\tassert(fpequal(ipart_expected, ipart));\n\t\tassert(fpequal(out, modfl(in, &ipartl)));\n\t\tassert(fpequal(ipart_expected, ipartl));\n\t\tassert(fetestexcept(ALL_STD_EXCEPT) == 0);\n\t}\n\n\tprintf(\"ok %d\\t\\t# modf(+%g)\\n\", testnum++, in);\n}\n\nint\nmain(int argc, char *argv[])\n{\n\tint i;\n\n\tprintf(\"1..%d\\n\", ntests * 2);\n\ttestnum = 1;\n\tfor (i = 0; i < ntests; i++) {\n\t\ttest_nearby(i);\n\t\ttest_modf(i);\n\t}\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-next.c",
    "content": "/*-\n * Copyright (c) 2005 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test the correctness of nextafter{,f,l} and nexttoward{,f,l}.\n */\n\n#include <sys/cdefs.h>\n\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#ifdef\t__i386__\n#include <ieeefp.h>\n#endif\n\n#include \"test-utils.h\"\n\n#define\ttest(exp, ans, ex)\tdo {\t\t\t\\\n\tdouble __ans = (ans);\t\t\t\t\\\n\tfeclearexcept(ALL_STD_EXCEPT);\t\t\t\\\n\t_testl(#exp, __LINE__, (exp), __ans, (ex));\t\\\n} while (0)\n#define\ttestf(exp, ans, ex)\tdo {\t\t\t\\\n\tfloat __ans = (ans);\t\t\t\t\\\n\tfeclearexcept(ALL_STD_EXCEPT);\t\t\t\\\n\t_testl(#exp, __LINE__, (exp), __ans, (ex));\t\\\n} while (0)\n#define\ttestl(exp, ans, ex)\tdo {\t\t\t\\\n\tlong double __ans = (ans);\t\t\t\\\n\tfeclearexcept(ALL_STD_EXCEPT);\t\t\t\\\n\t_testl(#exp, __LINE__, (exp), __ans, (ex));\t\\\n} while (0)\n#define\ttestboth(arg1, arg2, ans, ex, prec)\tdo {\t\t\t\\\n\ttest##prec(nextafter##prec((arg1), (arg2)), (ans), (ex));\t\\\n\ttest##prec(nexttoward##prec((arg1), (arg2)), (ans), (ex));\t\\\n} while (0)\n#define\ttestall(arg1, arg2, ans, ex)\tdo {\t\t\\\n\ttestboth((arg1), (arg2), (ans), (ex), );\t\\\n\ttestboth((arg1), (arg2), (ans), (ex), f);\t\\\n\ttestboth((arg1), (arg2), (ans), (ex), l);\t\\\n} while (0)\n\nstatic void _testl(const char *, int, long double, long double, int);\nstatic double idd(double);\nstatic float idf(float);\n\nint\nmain(int argc, char *argv[])\n{\n\tstatic const int ex_under = FE_UNDERFLOW | FE_INEXACT;\t/* shorthand */\n\tstatic const int ex_over = FE_OVERFLOW | FE_INEXACT;\n\tlong double ldbl_small, ldbl_eps, ldbl_max;\n\n\tprintf(\"1..5\\n\");\n\n#ifdef\t__i386__\n\tfpsetprec(FP_PE);\n#endif\n\t/*\n\t * We can't use a compile-time constant here because gcc on\n\t * FreeBSD/i386 assumes long doubles are truncated to the\n\t * double format.\n\t */\n\tldbl_small = ldexpl(1.0, LDBL_MIN_EXP - LDBL_MANT_DIG);\n\tldbl_eps = LDBL_EPSILON;\n\tldbl_max = ldexpl(1.0 - ldbl_eps / 2, LDBL_MAX_EXP);\n\n\t/*\n\t * Special cases involving zeroes.\n\t */\n#define\tztest(prec)\t\t\t\t\t\t\t      \\\n\ttest##prec(copysign##prec(1.0, nextafter##prec(0.0, -0.0)), -1.0, 0); \\\n\ttest##prec(copysign##prec(1.0, nextafter##prec(-0.0, 0.0)), 1.0, 0);  \\\n\ttest##prec(copysign##prec(1.0, nexttoward##prec(0.0, -0.0)), -1.0, 0);\\\n\ttest##prec(copysign##prec(1.0, nexttoward##prec(-0.0, 0.0)), 1.0, 0)\n\n\tztest();\n\tztest(f);\n\tztest(l);\n#undef\tztest\n\n#define\tstest(next, eps, prec)\t\t\t\t\t\\\n\ttest##prec(next(-0.0, 42.0), eps, ex_under);\t\t\\\n\ttest##prec(next(0.0, -42.0), -eps, ex_under);\t\t\\\n\ttest##prec(next(0.0, INFINITY), eps, ex_under);\t\t\\\n\ttest##prec(next(-0.0, -INFINITY), -eps, ex_under)\n\n\tstest(nextafter, 0x1p-1074, );\n\tstest(nextafterf, 0x1p-149f, f);\n\tstest(nextafterl, ldbl_small, l);\n\tstest(nexttoward, 0x1p-1074, );\n\tstest(nexttowardf, 0x1p-149f, f);\n\tstest(nexttowardl, ldbl_small, l);\n#undef\tstest\n\n\tprintf(\"ok 1 - next\\n\");\n\n\t/*\n\t * `x == y' and NaN tests\n\t */\n\ttestall(42.0, 42.0, 42.0, 0);\n\ttestall(-42.0, -42.0, -42.0, 0);\n\ttestall(INFINITY, INFINITY, INFINITY, 0);\n\ttestall(-INFINITY, -INFINITY, -INFINITY, 0);\n\ttestall(NAN, 42.0, NAN, 0);\n\ttestall(42.0, NAN, NAN, 0);\n\ttestall(NAN, NAN, NAN, 0);\n\n\tprintf(\"ok 2 - next\\n\");\n\n\t/*\n\t * Tests where x is an ordinary normalized number\n\t */\n\ttestboth(1.0, 2.0, 1.0 + DBL_EPSILON, 0, );\n\ttestboth(1.0, -INFINITY, 1.0 - DBL_EPSILON/2, 0, );\n\ttestboth(1.0, 2.0, 1.0 + FLT_EPSILON, 0, f);\n\ttestboth(1.0, -INFINITY, 1.0 - FLT_EPSILON/2, 0, f);\n\ttestboth(1.0, 2.0, 1.0 + ldbl_eps, 0, l);\n\ttestboth(1.0, -INFINITY, 1.0 - ldbl_eps/2, 0, l);\n\n\ttestboth(-1.0, 2.0, -1.0 + DBL_EPSILON/2, 0, );\n\ttestboth(-1.0, -INFINITY, -1.0 - DBL_EPSILON, 0, );\n\ttestboth(-1.0, 2.0, -1.0 + FLT_EPSILON/2, 0, f);\n\ttestboth(-1.0, -INFINITY, -1.0 - FLT_EPSILON, 0, f);\n\ttestboth(-1.0, 2.0, -1.0 + ldbl_eps/2, 0, l);\n\ttestboth(-1.0, -INFINITY, -1.0 - ldbl_eps, 0, l);\n\n\t/* Cases where nextafter(...) != nexttoward(...) */\n\ttest(nexttoward(1.0, 1.0 + ldbl_eps), 1.0 + DBL_EPSILON, 0);\n\ttestf(nexttowardf(1.0, 1.0 + ldbl_eps), 1.0 + FLT_EPSILON, 0);\n\ttestl(nexttowardl(1.0, 1.0 + ldbl_eps), 1.0 + ldbl_eps, 0);\n\n\tprintf(\"ok 3 - next\\n\");\n\n\t/*\n\t * Tests at word boundaries, normalization boundaries, etc.\n\t */\n\ttestboth(0x1.87654ffffffffp+0, INFINITY, 0x1.87655p+0, 0, );\n\ttestboth(0x1.87655p+0, -INFINITY, 0x1.87654ffffffffp+0, 0, );\n\ttestboth(0x1.fffffffffffffp+0, INFINITY, 0x1p1, 0, );\n\ttestboth(0x1p1, -INFINITY, 0x1.fffffffffffffp+0, 0, );\n\ttestboth(0x0.fffffffffffffp-1022, INFINITY, 0x1p-1022, 0, );\n\ttestboth(0x1p-1022, -INFINITY, 0x0.fffffffffffffp-1022, ex_under, );\n\n\ttestboth(0x1.fffffep0f, INFINITY, 0x1p1, 0, f);\n\ttestboth(0x1p1, -INFINITY, 0x1.fffffep0f, 0, f);\n\ttestboth(0x0.fffffep-126f, INFINITY, 0x1p-126f, 0, f);\n\ttestboth(0x1p-126f, -INFINITY, 0x0.fffffep-126f, ex_under, f);\n\n#if LDBL_MANT_DIG == 53\n\ttestboth(0x1.87654ffffffffp+0L, INFINITY, 0x1.87655p+0L, 0, l);\n\ttestboth(0x1.87655p+0L, -INFINITY, 0x1.87654ffffffffp+0L, 0, l);\n\ttestboth(0x1.fffffffffffffp+0L, INFINITY, 0x1p1L, 0, l);\n\ttestboth(0x1p1L, -INFINITY, 0x1.fffffffffffffp+0L, 0, l);\n\ttestboth(0x0.fffffffffffffp-1022L, INFINITY, 0x1p-1022L, 0, l);\n\ttestboth(0x1p-1022L, -INFINITY, 0x0.fffffffffffffp-1022L, ex_under, l);\n#elif LDBL_MANT_DIG == 64 && !defined(__i386)\n\ttestboth(0x1.87654321fffffffep+0L, INFINITY, 0x1.87654322p+0L, 0, l);\n\ttestboth(0x1.87654322p+0L, -INFINITY, 0x1.87654321fffffffep+0L, 0, l);\n\ttestboth(0x1.fffffffffffffffep0L, INFINITY, 0x1p1L, 0, l);\n\ttestboth(0x1p1L, -INFINITY, 0x1.fffffffffffffffep0L, 0, l);\n\ttestboth(0x0.fffffffffffffffep-16382L, INFINITY, 0x1p-16382L, 0, l);\n\ttestboth(0x1p-16382L, -INFINITY,\n\t    0x0.fffffffffffffffep-16382L, ex_under, l);\n#elif LDBL_MANT_DIG == 113\n\ttestboth(0x1.876543210987ffffffffffffffffp+0L, INFINITY,\n\t    0x1.876543210988p+0, 0, l);\n\ttestboth(0x1.876543210988p+0L, -INFINITY,\n\t    0x1.876543210987ffffffffffffffffp+0L, 0, l);\n\ttestboth(0x1.ffffffffffffffffffffffffffffp0L, INFINITY, 0x1p1L, 0, l);\n\ttestboth(0x1p1L, -INFINITY, 0x1.ffffffffffffffffffffffffffffp0L, 0, l);\n\ttestboth(0x0.ffffffffffffffffffffffffffffp-16382L, INFINITY,\n\t    0x1p-16382L, 0, l);\n\ttestboth(0x1p-16382L, -INFINITY,\n\t    0x0.ffffffffffffffffffffffffffffp-16382L, ex_under, l);\n#endif\n\n\tprintf(\"ok 4 - next\\n\");\n\n\t/*\n\t * Overflow tests\n\t */\n\ttest(idd(nextafter(DBL_MAX, INFINITY)), INFINITY, ex_over);\n\ttest(idd(nextafter(INFINITY, 0.0)), DBL_MAX, 0);\n\ttest(idd(nexttoward(DBL_MAX, DBL_MAX * 2.0L)), INFINITY, ex_over);\n#if LDBL_MANT_DIG > 53\n\ttest(idd(nexttoward(INFINITY, DBL_MAX * 2.0L)), DBL_MAX, 0);\n#endif\n\n\ttestf(idf(nextafterf(FLT_MAX, INFINITY)), INFINITY, ex_over);\n\ttestf(idf(nextafterf(INFINITY, 0.0)), FLT_MAX, 0);\n\ttestf(idf(nexttowardf(FLT_MAX, FLT_MAX * 2.0)), INFINITY, ex_over);\n\ttestf(idf(nexttowardf(INFINITY, FLT_MAX * 2.0)), FLT_MAX, 0);\n\n\ttestboth(ldbl_max, INFINITY, INFINITY, ex_over, l);\n\ttestboth(INFINITY, 0.0, ldbl_max, 0, l);\n\n\tprintf(\"ok 5 - next\\n\");\n\n\treturn (0);\n}\n\nstatic void\n_testl(const char *exp, int line, long double actual, long double expected,\n    int except)\n{\n\tint actual_except;\n\n\tactual_except = fetestexcept(ALL_STD_EXCEPT);\n\tif (!fpequal(actual, expected)) {\n\t\tfprintf(stderr, \"%d: %s returned %La, expecting %La\\n\",\n\t\t    line, exp, actual, expected);\n\t\tabort();\n\t}\n\tif (actual_except != except) {\n\t\tfprintf(stderr, \"%d: %s raised 0x%x, expecting 0x%x\\n\",\n\t\t    line, exp, actual_except, except);\n\t\tabort();\n\t}\n}\n\n/*\n * The idd() and idf() routines ensure that doubles and floats are\n * converted to their respective types instead of stored in the FPU\n * with extra precision.\n */\nstatic double\nidd(double x)\n{\n\treturn (x);\n}\n\nstatic float\nidf(float x)\n{\n\treturn (x);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-rem.c",
    "content": "/*-\n * Copyright (c) 2005-2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for remainder functions: remainder, remainderf, remainderl,\n * remquo, remquof, and remquol.\n * Missing tests: fmod, fmodf.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <strings.h>\n\nstatic void test_invalid(long double, long double);\nstatic void testl(long double, long double, long double, int);\nstatic void testd(double, double, double, int);\nstatic void testf(float, float, float, int);\n\n#define\ttest(x, y, e_r, e_q) do {\t\\\n\ttestl(x, y, e_r, e_q);\t\t\\\n\ttestd(x, y, e_r, e_q);\t\t\\\n\ttestf(x, y, e_r, e_q);\t\t\\\n} while (0)\n\n#if __gnu_linux__ && !__ANDROID__\nstatic int\nfls(int mask)\n{\n    int bit;\n\n    if (mask == 0)\n        return (0);\n    for (bit = 1; mask != 1; bit++)\n        mask = (unsigned int)mask >> 1;\n    return (bit);\n}\n#endif /* __gnu_linux__ */\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..3\\n\");\n\n\ttest_invalid(0.0, 0.0);\n\ttest_invalid(1.0, 0.0);\n\ttest_invalid(INFINITY, 0.0);\n\ttest_invalid(INFINITY, 1.0);\n\ttest_invalid(-INFINITY, 1.0);\n\ttest_invalid(NAN, 1.0);\n\ttest_invalid(1.0, NAN);\n\n\ttest(4, 4, 0, 1);\n\ttest(0, 3.0, 0, 0);\n\ttestd(0x1p-1074, 1, 0x1p-1074, 0);\n\ttestf(0x1p-149, 1, 0x1p-149, 0);\n\ttest(3.0, 4, -1, 1);\n\ttest(3.0, -4, -1, -1);\n\ttestd(275 * 1193040, 275, 0, 1193040);\n\ttest(4.5 * 7.5, 4.5, -2.25, 8);\t/* we should get the even one */\n\ttestf(0x1.9044f6p-1, 0x1.ce662ep-1, -0x1.f109cp-4, 1);\n#if LDBL_MANT_DIG > 53\n\ttestl(-0x1.23456789abcdefp-2000L, 0x1.fedcba987654321p-2000L,\n\t      0x1.b72ea61d950c862p-2001L, -1);\n#endif\n\n\tprintf(\"ok 1 - rem\\n\");\n\n\t/*\n\t * The actual quotient here is 864062210.50000003..., but\n\t * double-precision division gets -8.64062210.5, which rounds\n\t * the wrong way.  This test ensures that remquo() is smart\n\t * enough to get the low-order bit right.\n\t */\n\ttestd(-0x1.98260f22fc6dep-302, 0x1.fb3167c430a13p-332,\n\t    0x1.fb3165b82de72p-333, -864062211);\n\t/* Even harder cases with greater exponent separation */\n\ttest(0x1.fp100, 0x1.ep-40, -0x1.cp-41, 143165577);\n\ttestd(-0x1.abcdefp120, 0x1.87654321p-120,\n\t    -0x1.69c78ec4p-121, -63816414);\n\n\tprintf(\"ok 2 - rem\\n\");\n\n\ttest(0x1.66666cp+120, 0x1p+71, 0.0, 1476395008);\n\ttestd(-0x1.0000000000003p+0, 0x1.0000000000003p+0, -0.0, -1);\n\ttestl(-0x1.0000000000003p+0, 0x1.0000000000003p+0, -0.0, -1);\n\ttestd(-0x1.0000000000001p-749, 0x1.4p-1072, 0x1p-1074, -1288490189);\n\ttestl(-0x1.0000000000001p-749, 0x1.4p-1072, 0x1p-1074, -1288490189);\n\n\tprintf(\"ok 3 - rem\\n\");\n\n\treturn (0);\n}\n\nstatic void\ntest_invalid(long double x, long double y)\n{\n\tint q;\n\n\tq = 0xdeadbeef;\n\n\tassert(isnan(remainder(x, y)));\n\tassert(isnan(remquo(x, y, &q)));\n#ifdef STRICT\n\tassert(q == 0xdeadbeef);\n#endif\n\n\tassert(isnan(remainderf(x, y)));\n\tassert(isnan(remquof(x, y, &q)));\n#ifdef STRICT\n\tassert(q == 0xdeadbeef);\n#endif\n\n\tassert(isnan(remainderl(x, y)));\n\tassert(isnan(remquol(x, y, &q)));\n#ifdef STRICT\n\tassert(q == 0xdeadbeef);\n#endif\n}\n\n/* 0x012345 ==> 0x01ffff */\nstatic inline int\nmask(int x)\n{\n\treturn ((unsigned)~0 >> (32 - fls(x)));\n}\n\nstatic void\ntestl(long double x, long double y, long double expected_rem, int expected_quo)\n{\n\tint q;\n\tlong double rem;\n\n\tq = random();\n\trem = remainderl(x, y);\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\trem = remquol(x, y, &q);\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\tassert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */\n\tassert((q & 0x7) == (expected_quo & 0x7));\n\tif (q != 0) {\n\t\tassert((q > 0) ^ !(expected_quo > 0));\n\t\tq = abs(q);\n\t\tassert(q == (abs(expected_quo) & mask(q)));\n\t}\n}\n\nstatic void\ntestd(double x, double y, double expected_rem, int expected_quo)\n{\n\tint q;\n\tdouble rem;\n\n\tq = random();\n\trem = remainder(x, y);\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\trem = remquo(x, y, &q);\n#if !__gnu_linux__\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\tassert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */\n\tassert((q & 0x7) == (expected_quo & 0x7));\n#endif /* !__gnu_linux__ */\n\tif (q != 0) {\n\t\tassert((q > 0) ^ !(expected_quo > 0));\n\t\tq = abs(q);\n#if !__gnu_linux__\n\t\tassert(q == (abs(expected_quo) & mask(q)));\n#endif /* !__gnu_linux__ */\n\t}\n}\n\nstatic void\ntestf(float x, float y, float expected_rem, int expected_quo)\n{\n\tint q;\n\tfloat rem;\n\n\tq = random();\n\trem = remainderf(x, y);\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\trem = remquof(x, y, &q);\n\tassert(rem == expected_rem);\n\tassert(!signbit(rem) == !signbit(expected_rem));\n\tassert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */\n\tassert((q & 0x7) == (expected_quo & 0x7));\n\tif (q != 0) {\n\t\tassert((q > 0) ^ !(expected_quo > 0));\n\t\tq = abs(q);\n\t\tassert((q & mask(q)) == (abs(expected_quo) & mask(q)));\n\t}\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-trig.c",
    "content": "/*-\n * Copyright (c) 2008 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for corner cases in trigonometric functions. Some accuracy tests\n * are included as well, but these are very basic sanity checks, not\n * intended to be comprehensive.\n *\n * The program for generating representable numbers near multiples of pi is\n * available at http://www.cs.berkeley.edu/~wkahan/testpi/ .\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <math.h>\n#include <stdio.h>\n\n#include \"test-utils.h\"\n\n#define\tLEN(a)\t\t(sizeof(a) / sizeof((a)[0]))\n\n#pragma STDC FENV_ACCESS ON\n\n/*\n * Test that a function returns the correct value and sets the\n * exception flags correctly. The exceptmask specifies which\n * exceptions we should check. We need to be lenient for several\n * reasons, but mainly because on some architectures it's impossible\n * to raise FE_OVERFLOW without raising FE_INEXACT.\n *\n * These are macros instead of functions so that assert provides more\n * meaningful error messages.\n *\n * XXX The volatile here is to avoid gcc's bogus constant folding and work\n *     around the lack of support for the FENV_ACCESS pragma.\n */\n#define\ttest(func, x, result, exceptmask, excepts)\tdo {\t\t\\\n\tvolatile long double _d = x;\t\t\t\t\t\\\n\tassert(feclearexcept(FE_ALL_EXCEPT) == 0);\t\t\t\\\n\tassert(fpequal((func)(_d), (result)));\t\t\t\t\\\n\tassert(((void)(func), fetestexcept(exceptmask) == (excepts)));\t\\\n} while (0)\n\n#define\ttestall(prefix, x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(prefix, x, (double)result, exceptmask, excepts);\t\t\\\n\ttest(prefix##f, x, (float)result, exceptmask, excepts);\t\t\\\n\ttest(prefix##l, x, result, exceptmask, excepts);\t\t\\\n} while (0)\n\n#define\ttestdf(prefix, x, result, exceptmask, excepts)\tdo {\t\t\\\n\ttest(prefix, x, (double)result, exceptmask, excepts);\t\t\\\n\ttest(prefix##f, x, (float)result, exceptmask, excepts);\t\t\\\n} while (0)\n\n/*\n * Test special cases in sin(), cos(), and tan().\n */\nstatic void\nrun_special_tests(void)\n{\n\n\t/* Values at 0 should be exact. */\n\ttestall(tan, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(tan, -0.0, -0.0, ALL_STD_EXCEPT, 0);\n\ttestall(cos, 0.0, 1.0, ALL_STD_EXCEPT, 0);\n\ttestall(cos, -0.0, 1.0, ALL_STD_EXCEPT, 0);\n\ttestall(sin, 0.0, 0.0, ALL_STD_EXCEPT, 0);\n\ttestall(sin, -0.0, -0.0, ALL_STD_EXCEPT, 0);\n\n\t/* func(+-Inf) == NaN */\n\ttestall(tan, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(sin, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(cos, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(tan, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(sin, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\ttestall(cos, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);\n\n\t/* func(NaN) == NaN */\n\ttestall(tan, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(sin, NAN, NAN, ALL_STD_EXCEPT, 0);\n\ttestall(cos, NAN, NAN, ALL_STD_EXCEPT, 0);\n}\n\n/*\n * Tests to ensure argument reduction for large arguments is accurate.\n */\nstatic void\nrun_reduction_tests(void)\n{\n\t/* floats very close to odd multiples of pi */\n\tstatic const float f_pi_odd[] = {\n\t\t85563208.0f,\n\t\t43998769152.0f,\n\t\t9.2763667655669323e+25f,\n\t\t1.5458357838905804e+29f,\n\t};\n\t/* doubles very close to odd multiples of pi */\n\tstatic const double d_pi_odd[] = {\n\t\t3.1415926535897931,\n\t\t91.106186954104004,\n\t\t642615.9188844458,\n\t\t3397346.5699258847,\n\t\t6134899525417045.0,\n\t\t3.0213551960457761e+43,\n\t\t1.2646209897993783e+295,\n\t\t6.2083625380677099e+307,\n\t};\n\t/* long doubles very close to odd multiples of pi */\n#if LDBL_MANT_DIG == 64\n\tstatic const long double ld_pi_odd[] = {\n\t\t1.1891886960373841596e+101L,\n\t\t1.07999475322710967206e+2087L,\n\t\t6.522151627890431836e+2147L,\n\t\t8.9368974898260328229e+2484L,\n\t\t9.2961044110572205863e+2555L,\n\t\t4.90208421886578286e+3189L,\n\t\t1.5275546401232615884e+3317L,\n\t\t1.7227465626338900093e+3565L,\n\t\t2.4160090594000745334e+3808L,\n\t\t9.8477555741888350649e+4314L,\n\t\t1.6061597222105160737e+4326L,\n\t};\n#elif LDBL_MANT_DIG == 113\n\tstatic const long double ld_pi_odd[] = {\n\t\t/* XXX */\n\t};\n#endif\n\n\tint i;\n\n\tfor (i = 0; i < LEN(f_pi_odd); i++) {\n\t\tassert(fabs(sinf(f_pi_odd[i])) < FLT_EPSILON);\n\t\tassert(cosf(f_pi_odd[i]) == -1.0);\n\t\tassert(fabs(tan(f_pi_odd[i])) < FLT_EPSILON);\n\n\t\tassert(fabs(sinf(-f_pi_odd[i])) < FLT_EPSILON);\n\t\tassert(cosf(-f_pi_odd[i]) == -1.0);\n\t\tassert(fabs(tanf(-f_pi_odd[i])) < FLT_EPSILON);\n\n\t\tassert(fabs(sinf(f_pi_odd[i] * 2)) < FLT_EPSILON);\n\t\tassert(cosf(f_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabs(tanf(f_pi_odd[i] * 2)) < FLT_EPSILON);\n\n\t\tassert(fabs(sinf(-f_pi_odd[i] * 2)) < FLT_EPSILON);\n\t\tassert(cosf(-f_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabs(tanf(-f_pi_odd[i] * 2)) < FLT_EPSILON);\n\t}\n\n\tfor (i = 0; i < LEN(d_pi_odd); i++) {\n\t\tassert(fabs(sin(d_pi_odd[i])) < 2 * DBL_EPSILON);\n\t\tassert(cos(d_pi_odd[i]) == -1.0);\n\t\tassert(fabs(tan(d_pi_odd[i])) < 2 * DBL_EPSILON);\n\n\t\tassert(fabs(sin(-d_pi_odd[i])) < 2 * DBL_EPSILON);\n\t\tassert(cos(-d_pi_odd[i]) == -1.0);\n\t\tassert(fabs(tan(-d_pi_odd[i])) < 2 * DBL_EPSILON);\n\n\t\tassert(fabs(sin(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);\n\t\tassert(cos(d_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabs(tan(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);\n\n\t\tassert(fabs(sin(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);\n\t\tassert(cos(-d_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabs(tan(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);\n\t}\n\n#if !__APPLE__\n#if LDBL_MANT_DIG > 53\n\tfor (i = 0; i < LEN(ld_pi_odd); i++) {\n\t\tassert(fabsl(sinl(ld_pi_odd[i])) < LDBL_EPSILON);\n\t\tassert(cosl(ld_pi_odd[i]) == -1.0);\n\t\tassert(fabsl(tanl(ld_pi_odd[i])) < LDBL_EPSILON);\n\n\t\tassert(fabsl(sinl(-ld_pi_odd[i])) < LDBL_EPSILON);\n\t\tassert(cosl(-ld_pi_odd[i]) == -1.0);\n\t\tassert(fabsl(tanl(-ld_pi_odd[i])) < LDBL_EPSILON);\n\n\t\tassert(fabsl(sinl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);\n\t\tassert(cosl(ld_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabsl(tanl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);\n\n\t\tassert(fabsl(sinl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);\n\t\tassert(cosl(-ld_pi_odd[i] * 2) == 1.0);\n\t\tassert(fabsl(tanl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);\n\t}\n#endif\n#endif /* !__APPLE__ */\n}\n\n/*\n * Tests the accuracy of these functions over the primary range.\n */\nstatic void\nrun_accuracy_tests(void)\n{\n\n\t/* For small args, sin(x) = tan(x) = x, and cos(x) = 1. */\n\ttestall(sin, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\ttestall(tan, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,\n\t     ALL_STD_EXCEPT, FE_INEXACT);\n\ttestall(cos, 0xd.50ee515fe4aea16p-114L, 1.0,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\n\t/*\n\t * These tests should pass for f32, d64, and ld80 as long as\n\t * the error is <= 0.75 ulp (round to nearest)\n\t */\n#if LDBL_MANT_DIG <= 64\n#define\ttestacc\ttestall\n#else\n#define\ttestacc\ttestdf\n#endif\n\ttestacc(sin, 0.17255452780841205174L, 0.17169949801444412683L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\ttestacc(sin, -0.75431944555904520893L, -0.68479288156557286353L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\ttestacc(cos, 0.70556358769838947292L, 0.76124620693117771850L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n#if !__APPLE__\n\ttestacc(cos, -0.34061437849088045332L, 0.94254960031831729956L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n#endif /* !__APPLE__ */\n\ttestacc(tan, -0.15862817413325692897L, -0.15997221861309522115L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\ttestacc(tan, 0.38374784931303813530L, 0.40376500259976759951L,\n\t\tALL_STD_EXCEPT, FE_INEXACT);\n\n\t/*\n\t * XXX missing:\n\t * - tests for ld128\n\t * - tests for other rounding modes (probably won't pass for now)\n\t * - tests for large numbers that get reduced to hi+lo with lo!=0\n\t */\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..3\\n\");\n\n\trun_special_tests();\n\tprintf(\"ok 1 - trig\\n\");\n\n#ifndef __i386__\n\trun_reduction_tests();\n#endif\n\tprintf(\"ok 2 - trig\\n\");\n\n#ifndef __i386__\n\trun_accuracy_tests();\n#endif\n\tprintf(\"ok 3 - trig\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-msun/jni/test-utils.h",
    "content": "/*-\n * Copyright (c) 2005-2013 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * $FreeBSD$\n */\n\n#ifndef\t_TEST_UTILS_H_\n#define\t_TEST_UTILS_H_\n\n#include <complex.h>\n#include <fenv.h>\n\n/*\n * Implementations are permitted to define additional exception flags\n * not specified in the standard, so it is not necessarily true that\n * FE_ALL_EXCEPT == ALL_STD_EXCEPT.\n */\n#define\tALL_STD_EXCEPT\t(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \\\n\t\t\t FE_OVERFLOW | FE_UNDERFLOW)\n#define\tOPT_INVALID\t(ALL_STD_EXCEPT & ~FE_INVALID)\n#define\tOPT_INEXACT\t(ALL_STD_EXCEPT & ~FE_INEXACT)\n#define\tFLT_ULP()\tldexpl(1.0, 1 - FLT_MANT_DIG)\n#define\tDBL_ULP()\tldexpl(1.0, 1 - DBL_MANT_DIG)\n#define\tLDBL_ULP()\tldexpl(1.0, 1 - LDBL_MANT_DIG)\n\n/*\n * Flags that control the behavior of various fpequal* functions.\n * XXX This is messy due to merging various notions of \"close enough\"\n * that are best suited for different functions.\n *\n * CS_REAL\n * CS_IMAG\n * CS_BOTH\n *   (cfpequal_cs, fpequal_tol, cfpequal_tol) Whether to check the sign of\n *   the real part of the result, the imaginary part, or both.\n *\n * FPE_ABS_ZERO\n *   (fpequal_tol, cfpequal_tol) If set, treats the tolerance as an absolute\n *   tolerance when the expected value is 0.  This is useful when there is\n *   round-off error in the input, e.g., cos(Pi/2) ~= 0.\n */\n#define\tCS_REAL\t\t0x01\n#define\tCS_IMAG\t\t0x02\n#define\tCS_BOTH\t\t(CS_REAL | CS_IMAG)\n#define\tFPE_ABS_ZERO\t0x04\n\n#ifdef\tDEBUG\n#define\tdebug(...)\tprintf(__VA_ARGS__)\n#else\n#define\tdebug(...)\t(void)0\n#endif\n\n#ifdef CMPLXL\n#undef CMPLXL\n#endif\n#if defined(__clang__)\n#define CMPLXL(x, y) ((long double complex){ x, y })\n#else\n#define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y))\n#endif\n\n/*\n * Compare d1 and d2 using special rules: NaN == NaN and +0 != -0.\n * Fail an assertion if they differ.\n */\nstatic int\nfpequal(long double d1, long double d2)\n{\n\n\tif (d1 != d2)\n\t\treturn (isnan(d1) && isnan(d2));\n\treturn (copysignl(1.0, d1) == copysignl(1.0, d2));\n}\n\n/*\n * Determine whether x and y are equal, with two special rules:\n *\t+0.0 != -0.0\n *\t NaN == NaN\n * If checksign is 0, we compare the absolute values instead.\n */\nstatic int\nfpequal_cs(long double x, long double y, int checksign)\n{\n\tif (isnan(x) && isnan(y))\n\t\treturn (1);\n\tif (checksign)\n\t\treturn (x == y && !signbit(x) == !signbit(y));\n\telse\n\t\treturn (fabsl(x) == fabsl(y));\n}\n\nstatic int\nfpequal_tol(long double x, long double y, long double tol, unsigned int flags)\n{\n\tfenv_t env;\n\tint ret;\n\n\tif (isnan(x) && isnan(y))\n\t\treturn (1);\n\tif (!signbit(x) != !signbit(y) && (flags & CS_BOTH))\n\t\treturn (0);\n\tif (x == y)\n\t\treturn (1);\n\tif (tol == 0)\n\t\treturn (0);\n\n\t/* Hard case: need to check the tolerance. */\n\tfeholdexcept(&env);\n\t/*\n\t * For our purposes here, if y=0, we interpret tol as an absolute\n\t * tolerance. This is to account for roundoff in the input, e.g.,\n\t * cos(Pi/2) ~= 0.\n\t */\n\tif ((flags & FPE_ABS_ZERO) && y == 0.0)\n\t\tret = fabsl(x - y) <= fabsl(tol);\n\telse\n\t\tret = fabsl(x - y) <= fabsl(y * tol);\n\tfesetenv(&env);\n\treturn (ret);\n}\n\nstatic int\ncfpequal(long double complex d1, long double complex d2)\n{\n\n\treturn (fpequal(creall(d1), creall(d2)) &&\n\t\tfpequal(cimagl(d1), cimagl(d2)));\n}\n\nstatic int\ncfpequal_cs(long double complex x, long double complex y, int checksign)\n{\n\treturn (fpequal_cs(creal(x), creal(y), checksign)\n\t\t&& fpequal_cs(cimag(x), cimag(y), checksign));\n}\n\nstatic int\ncfpequal_tol(long double complex x, long double complex y, long double tol,\n\t\t     unsigned int flags)\n{\n\treturn (fpequal_tol(creal(x), creal(y), tol, flags)\n\t\t&& fpequal_tol(cimag(x), cimag(y), tol, flags));\n}\n\n#endif /* _TEST_UTILS_H_ */\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/common.mk",
    "content": "SRCFILES := test.m\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/host/GNUmakefile",
    "content": "include ../common.mk\n\nifneq (,$(shell uname -s | grep -i linux))\n.PHONY: test\ntest:\n\t@echo \"Skipped for Linux\"\n\nelse\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-objc-blocks\nLOCAL_SRC_FILES  := $(SRCFILES)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_OBJC := none\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/jni/test.m",
    "content": "#import <stdio.h>\n\nvoid (^testBlock)(void) = ^{\n    printf(\"Hello world!\\n\");\n};\n\nint main()\n{\n    testBlock();\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-blocks/properties.json",
    "content": "{\"broken-toolchain-type\": \"gcc\"}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/common.mk",
    "content": "CTESTS :=  \\\n\tassert \\\n\tbase   \\\n\tnslog  \\\n\tstring \\\n\texception \\\n\nCFLAGS := -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))\n\nis-macosx := $(shell uname -s | grep -iq darwin && echo yes)\n\nis-not-macosx := $(if $(is-macosx),,yes)\n\nis-old-macosx := $(strip $(and \\\n    $(is-macosx),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\n\nis-gcc := $(shell echo __clang__ | $(CC) -x c -E - | tail -n 1 | grep -q __clang__ && echo yes)\n\nifneq (,$(or $(is-not-macosx),$(is-old-macosx),$(is-gcc)))\n\n.PHONY: test\ntest:\n\t@echo \"These tests are disabled on this system\"\n\nelse\n\ninclude ../common.mk\n\nCFLAGS += -I../jni\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=test-$(1).m CFLAGS=\"$(CFLAGS)\" TARGETNAME=test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=test-$(1).m\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-cocotron-$$(if $$(filter arc,$(2)),arc,noarc)-$(1)\nLOCAL_SRC_FILES  := test-$(1).m\nLOCAL_C_INCLUDES := $$(LOCAL_PATH)\nLOCAL_CFLAGS     := $$(CFLAGS)\nLOCAL_CFLAGS     += $$(if $$(filter arc,$(2)),-fobjc-arc,-fno-objc-arc)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(foreach __a,noarc arc,\\\n        $(eval $(call add-test-case,$(__t),$(__a)))\\\n    )\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/test-assert.m",
    "content": "#import <Foundation/Foundation.h>\n\nint main()\n{\n    NSCAssert(YES, @\"\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/test-base.m",
    "content": "#import <Foundation/Foundation.h>\n\n#define MAGIC_STRING @\"E52780578BAF49FF8866608312B947A4\"\n\n@interface TestClass : NSObject {\n    int _intProperty;\n    NSString *_stringProperty;\n}\n\n@property (nonatomic, assign) int intProperty;\n@property (nonatomic, retain) NSString *stringProperty;\n\n- (NSString*)testMethod;\n\n@end\n\n@implementation TestClass\n\n@synthesize intProperty = _intProperty;\n@synthesize stringProperty = _stringProperty;\n\n- (NSString*)testMethod\n{\n    NSLog(@\"Hello from method!\");\n    return MAGIC_STRING;\n}\n\n@end\n\nint main()\n{\n    TestClass *obj = [[TestClass alloc] init];\n    NSString *s = [obj testMethod];\n\n    if (![s isEqualToString:MAGIC_STRING]) {\n        NSLog(@\"FAILED: s=%@\", s);\n        return 1;\n    }\n\n    obj.intProperty = 15;\n    if (obj.intProperty != 15) {\n        NSLog(@\"FAILED: intProperty=%d\", obj.intProperty);\n        return 1;\n    }\n\n    obj.stringProperty = MAGIC_STRING;\n    if (![obj.stringProperty isEqualToString:MAGIC_STRING]) {\n        NSLog(@\"FAILED: stringProperty=%@\", obj.stringProperty);\n        return 1;\n    }\n\n    NSLog(@\"OK\");\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/test-exception.m",
    "content": "#import <Foundation/Foundation.h>\n\nvoid foo()\n{\n    @throw [NSException exceptionWithName:@\"EXCEPTION\"\n                                   reason:@\"Test of Objective-C exceptions mechanism\"\n                                 userInfo:nil];\n}\n\nint main()\n{\n    @try {\n        foo();\n    }\n    @catch (NSException *ex)\n    {\n        NSLog(@\"OK: Exception caught\");\n        return 0;\n    }\n\n    NSLog(@\"FAILED: Exception was not caught\");\n    return 1;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/test-nslog.m",
    "content": "#import <Foundation/Foundation.h>\n\nint main()\n{\n    NSLog(@\"AAAAAAAAAAAAAAAAA: %@\", [NSString stringWithUTF8String:\"IJHUYGKLJAHS\"]);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/jni/test-string.m",
    "content": "#import <Foundation/Foundation.h>\n\n#define CHECK_LENGTH(s, l) \\\n    NSCAssert(s.length == l, @\"Wrong length of string: %zu instead of %zu\", s.length, (NSUInteger)l)\n\n#define CHECK_EQUAL(s, t) \\\n    NSCAssert([s isEqualToString:@t], @\"\\\"%@\\\" != \\\"%@\\\"\", s, @t)\n\nvoid test1()\n{\n    NSString *s = [NSString string];\n    CHECK_LENGTH(s, 0);\n}\n\nvoid test2()\n{\n    NSString *s = [[NSString alloc] init];\n    CHECK_LENGTH(s, 0);\n}\n\nvoid test3()\n{\n    NSString *s = [[NSString alloc] initWithBytes:\"123\" length:3 encoding:NSASCIIStringEncoding];\n    CHECK_LENGTH(s, 3);\n    CHECK_EQUAL(s, \"123\");\n}\n\nvoid test4()\n{\n#define S4 \"This is an UTF-8 string (Это строка в кодировке UTF-8)\"\n    NSString *s = [[NSString alloc] initWithUTF8String:S4];\n    CHECK_EQUAL(s, S4);\n}\n\nvoid test5()\n{\n    NSString *s = [[NSString alloc] initWithFormat:@\"%s %d %@, %zu\", \"A\", 1, @\"B\", (NSUInteger)6];\n    CHECK_EQUAL(s, \"A 1 B, 6\");\n}\n\nint main()\n{\n    test1();\n    test2();\n    test3();\n    test4();\n    test5();\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-cocotron/properties.json",
    "content": "{\"broken-toolchain-type\": \"gcc\"}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/common.mk",
    "content": "SRCFILES := test.c objc.m objcxx.mm\nCFLAGS := -Wall -Wextra -Werror -Wno-objc-root-class\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/host/GNUmakefile",
    "content": "include ../common.mk\n\nis-macosx := $(shell uname -s | grep -iq darwin && echo yes)\n\nis-not-macosx := $(if $(is-macosx),,yes)\n\nis-old-macosx := $(strip $(and \\\n    $(is-macosx),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\n\nis-gcc := $(shell echo __clang__ | $(CC) -x c -E - | tail -n 1 | grep -q __clang__ && echo yes)\n\nifneq (,$(or $(is-not-macosx),$(is-old-macosx),$(is-gcc)))\n\n.PHONY: test\ntest:\n\t@echo \"These tests are disabled on this system\"\n\nelse\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\n#include $(CLEAR_VARS)\n#LOCAL_MODULE     := test-static\n#LOCAL_SRC_FILES  := $(SRCFILES)\n#LOCAL_STATIC_LIBRARIES := objc2rt_static\n#LOCAL_CFLAGS     := $(CFLAGS)\n#ifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\n#LOCAL_OBJCFLAGS  := -fno-objc-arc\n#endif\n#include $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-shared\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_SHARED_LIBRARIES := objc2rt_shared\nLOCAL_CFLAGS     := $(CFLAGS)\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_OBJCFLAGS  := -fno-objc-arc\nendif\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,objc/gnustep-libobjc2)\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/jni/Application.mk",
    "content": "APP_ABI := armeabi armeabi-v7a armeabi-v7a-hard arm64-v8a x86 x86_64\nAPP_OBJC := none\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/jni/objc.m",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#import <assert.h>\n#import <string.h>\n#import <stdio.h>\n\n#import <objc/runtime.h>\n#import <objc/message.h>\n\n#define MAGIC_STRING \"AHBJAYEBDMAJ*EUDIQKJNSADJY^G#JAHBELAKJHBS\"\n\nstatic const char *s = NULL;\n\n@interface TestClass\n- (void)testMethod;\n@end\n\n@implementation TestClass\n- (void)testMethod\n{\n    s = MAGIC_STRING;\n    printf(\"Hello from method!\\n\");\n}\n@end\n\nvoid test_objc()\n{\n    Class cls = objc_getClass(\"TestClass\");\n    assert(cls != NULL);\n    TestClass *obj = class_createInstance(cls, 0);\n    assert(obj != NULL);\n\n    SEL sel = sel_registerName(\"testMethod\");\n    assert(sel != NULL);\n\n    objc_msgSend(obj, sel);\n    assert(s != NULL && strcmp(s, MAGIC_STRING) == 0);\n\n    printf(\"OK\\n\");\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/jni/objcxx.mm",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#import <assert.h>\n#import <string.h>\n#import <stdio.h>\n\n#import <objc/runtime.h>\n#import <objc/message.h>\n\n#define MAGIC_STRING \"AHBJAYEBDMAJ*EUDIQKJNSADJY^G#JAHBELAKJHBS\"\n\nstatic const char *s = NULL;\n\n@interface TestClass2\n- (void)testMethod;\n@end\n\n@implementation TestClass2\n- (void)testMethod\n{\n    s = MAGIC_STRING;\n    printf(\"Hello from method!\\n\");\n}\n@end\n\nextern \"C\"\nvoid test_objcxx()\n{\n    Class cls = objc_getClass(\"TestClass2\");\n    assert(cls != NULL);\n    TestClass2 *obj = class_createInstance(cls, 0);\n    assert(obj != NULL);\n\n    SEL sel = sel_registerName(\"testMethod\");\n    assert(sel != NULL);\n\n    objc_msgSend(obj, sel);\n    assert(s != NULL && strcmp(s, MAGIC_STRING) == 0);\n\n    printf(\"OK\\n\");\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/jni/test.c",
    "content": "void test_objc();\nvoid test_objcxx();\n\nint main()\n{\n    test_objc();\n    test_objcxx();\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-objc-runtime/properties.json",
    "content": "{\"broken-toolchain-type\": \"gcc\"}\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/common.mk",
    "content": "ifeq (,$(strip $(NDK)))\n$(error NDK is not defined!)\nendif\n\nOPENPTS := $(realpath $(NDK)/sources/crystax/tests/openpts)\n\nifeq (,$(strip $(OPENPTS)))\n$(error Can not locate OpenPTS sources!)\nendif\n\nTSUITES := $(wildcard $(OPENPTS)/conformance/interfaces/*)\n\nFILES := $(sort $(foreach __t,$(TSUITES),\\\n    $(foreach __f,\\\n        $(patsubst $(__t)/%,%,$(wildcard $(__t)/*.c)),\\\n        $(if $(filter 2,$(words $(subst -, ,$(__f)))),$(__f))\\\n    )\\\n))\n\nMAJORS := $(shell echo $(strip $(sort $(foreach __f,$(FILES),\\\n    $(firstword $(subst -, ,$(__f))))) | \\\n    tr ' ' '\\n' | grep '^[0-9]' | sort -n | uniq \\\n))\nMINORS := $(shell echo $(strip $(sort $(foreach __f,$(FILES),\\\n    $(lastword $(subst -, ,$(patsubst %.c,%,$(__f)))))) | \\\n    tr ' ' '\\n' | grep '^[0-9]' | sort -n | uniq \\\n))\n\nCTESTS := $(strip $(sort \\\n    $(foreach __f,\\\n        $(foreach __t,$(TSUITES),\\\n            $(foreach __major,$(MAJORS),\\\n                $(foreach __minor,$(MINORS),\\\n                    $(wildcard $(__t)/$(__major)-$(__minor).c)\\\n                )\\\n            )\\\n        ),\\\n        $(patsubst %.c,%,$(__f))\\\n    )\\\n))\n\nCFLAGS := -std=gnu99\nCFLAGS += -Wall -Werror\nCFLAGS += -I$(OPENPTS)/include\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))\n\ninclude $(MYDIR)/../common.mk\ninclude $(or $(NDK),$(MYDIR)/../../../..)/tests/onhost-functions.mk\n\nifneq (,$(and $(call is-gcc,$(CC)),$(call is-version-less,$(call gcc-version,$(CC)),4.8)))\n.PHONY: test\ntest:\n\t@echo \"SKIP: gcc is too old ($(call gcc-version,$(CC)))\"\n\nelse\n\nCFLAGS += -O0\nCFLAGS += -D_POSIX_C_SOURCE=200112L\nCFLAGS += -D_XOPEN_SOURCE=600\n\nPREVIOUS_TARGETS :=\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1): $(PREVIOUS_TARGETS)\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=$(1).c CFLAGS=\"$(CFLAGS)\" OPENPTS=\"$(OPENPTS)\"\n\nPREVIOUS_TARGETS += test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=$(1).c OPENPTS=\"$(OPENPTS)\"\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/host/test.mk",
    "content": "PRETEST := build-launcher\n\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n\nLAUNCHERBIN := $(TARGETDIR)/t0\nLAUNCHER := $(LAUNCHERBIN) 240\n\n.PHONY: build-launcher\nbuild-launcher: $(LAUNCHERBIN)\n\n$(dir $(LAUNCHERBIN)):\n\tmkdir -p $@\n\n$(LAUNCHERBIN): $(OPENPTS)/t0.c | $(dir $(LAUNCHERBIN))\n\t$(CC) -O2 -o $@ $<\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-$$(subst /,-,$$(patsubst $$(OPENPTS)/%,%,$(1)))\nLOCAL_SRC_FILES  := $(1).c\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-case,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-openpts/properties.json",
    "content": "{\"long\": true, \"single-run-timeout\": 240}\n"
  },
  {
    "path": "tests/device/crystax-test-pthread_workqueue/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq (,$(strip $(NDK)))\nNDK := $(abspath $(LOCAL_PATH)/../../../..)\nendif\n\nTDIR := $(NDK)/sources/crystax/tests/libpwq\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -DNO_CONFIG_H\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-pthread_workqueue-1\nLOCAL_SRC_FILES  := $(TDIR)/api/test.c\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-pthread_workqueue-2\nLOCAL_SRC_FILES  := $(TDIR)/idle/main.c\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-pthread_workqueue-3\nLOCAL_SRC_FILES  := $(TDIR)/latency/latency.c\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-pthread_workqueue/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-pthread_workqueue/properties.json",
    "content": "{\"broken-toolchain-version\": [\"gcc4.9\", \"gcc5\", \"clang3.6\", \"clang3.7\"]}\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-stdlib\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/jni/Application.mk",
    "content": "APP_ABI      := all\n"
  },
  {
    "path": "tests/device/crystax-test-rand_r/jni/main.c",
    "content": "/* test rand_r */\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#define RAND_VAL_0    520932930\n#define RAND_VAL_1    28925691\n#define RAND_VAL_2    822784415\n#define RAND_VAL_3    822784415\n\n\nstatic int test_rand_r(void);\n\n\nint main()\n{\n    if (test_rand_r() != 0)\n        return 1;\n\n    return 0;\n}\n\n\nint test_rand_r(void)\n{\n    unsigned int v0 = 0, v0_1 = 0;\n    unsigned int v1 = 0, v1_1 = 0;\n    unsigned int v2 = 0, v2_1 = 0;\n    unsigned int v3 = 0, v3_1 = 0;\n\n    v1 = rand_r(&v0);\n    v2 = rand_r(&v1);\n    v3 = rand_r(&v2);\n\n    /* printf(\"v0 = %i\\n\", v0); */\n    /* printf(\"v1 = %i\\n\", v1); */\n    /* printf(\"v2 = %i\\n\", v2); */\n    /* printf(\"v3 = %i\\n\", v3); */\n\n    v1_1 = rand_r(&v0_1);\n    v2_1 = rand_r(&v1_1);\n    v3_1 = rand_r(&v2_1);\n\n    /* printf(\"v0_1 = %i\\n\", v0_1); */\n    /* printf(\"v1_1 = %i\\n\", v1_1); */\n    /* printf(\"v2_1 = %i\\n\", v2_1); */\n    /* printf(\"v3_1 = %i\\n\", v3_1); */\n\n    if ((v0 != v0_1) || (v1 != v1_1) || (v2 != v2_1) || (v3 != v3_1)) {\n        printf(\"rand_r test failed\\n\");\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-regex/common.mk",
    "content": "CFLAGS := -Wall -Wextra -Werror\nSRCFILES := main.cpp\n"
  },
  {
    "path": "tests/device/crystax-test-regex/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-regex/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-regex/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := crystax-test-regex\nLOCAL_CFLAGS := $(CFLAGS)\nLOCAL_SRC_FILES := $(SRCFILES)\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_LDLIBS := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-regex/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-regex/jni/main.cpp",
    "content": "#if defined(__GNUC__) && !defined(__clang__)\n#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)\n#define HAVE_STD_REGEX 1\n#else\n#define HAVE_STD_REGEX 0\n#endif\n#endif\n\n#if HAVE_STD_REGEX\n#include <string>\n#include <regex>\n#include <iostream>\n\nstruct Confs{\n    std::string regexp;\n};\n\nclass foo\n{\n    public:\n        static int search(const std::string& phrase);\n        static const Confs configs[];\n};\n\n\n\nconst Confs foo::configs[] = {\n    //Regular Expresion\n    {\"^adb\"}, //Example\n    {\"^qwr\"}, //Example\n    {\"^a5eo\"}, //Real\n};\n\nint foo::search(const std::string& phrase){\n    for(size_t i=0; i<sizeof(configs)/sizeof(Confs); i++){\n        std::regex re(configs[i].regexp);\n        if (std::regex_search(phrase, re)) {\n            return i;\n        }\n    }\n    return -1;\n}\n\nint main(){\n    if (foo::search(\"a5eo\") < 0) {\n        std::cerr << \"FAILED\" << std::endl;\n        return 1;\n    }\n\n    std::cout << \"OK\" << std::endl;\n    return 0;\n}\n#else /* !HAVE_STD_REGEX */\nint main() { return 0; }\n#endif /* !HAVE_STD_REGEX */\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/common.mk",
    "content": "CFLAGS := -Wall -Wextra -Werror\nSRCFILES := main.c\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test-setjmp\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-setjmp/jni/main.c",
    "content": "#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\n#include <setjmp.h>\n#include <stdio.h>\n\nstatic jmp_buf jb;\n\nvoid foo(int count)\n{\n    printf(\"foo(%d) called\\n\", count);\n    longjmp(jb, count + 1);\n}\n\nint main()\n{\n    volatile int count = 0;\n    if (setjmp(jb) < 9)\n        foo(count++);\n\n    assert(count == 9);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/common.mk",
    "content": "SRCFILES := test-sincos-main.c test-sincos-c.c test-sincos-cpp.cpp\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-sincos\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/crystax-test-sincos/jni/test-sincos-c.c",
    "content": "#include <math.h>\n\nfloat test_sincos_c(float a)\n{\n    return sin(a) + cos(a);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/jni/test-sincos-cpp.cpp",
    "content": "#include <math.h>\n\nextern \"C\"\nfloat test_sincos_cpp(float a)\n{\n    return sin(a) + cos(a);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-sincos/jni/test-sincos-main.c",
    "content": "#include <stdio.h>\n\nextern float test_sincos_c();\nextern float test_sincos_cpp();\n\nint main()\n{\n    float a, b;\n\n    printf(\"test-sincos - begin\\n\");\n\n    a = test_sincos_c(0.3);\n    b = test_sincos_cpp(0.3);\n    if (a != b) {\n        fprintf(stderr, \"FAILED: a=%f, b=%f\\n\", a, b);\n        return 1;\n    }\n\n    printf(\"OK\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-sqlite3/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-sqlite3-static\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := sqlite3_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test-sqlite3-shared\nLOCAL_SRC_FILES        := test.c\nLOCAL_STATIC_LIBRARIES := sqlite3_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,sqlite/3.18.0)\n"
  },
  {
    "path": "tests/device/crystax-test-sqlite3/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-sqlite3/jni/test.c",
    "content": "#include <sqlite3.h>\n#include <stdio.h>\n\nint main()\n{\n    printf(\"sqlite3 version: %s\\n\", sqlite3_libversion());\n    printf(\"sqlite3 source id: %s\\n\", sqlite3_sourceid());\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-std-atomic-crashes/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test_std_atomic_crash_gnustl_static\nLOCAL_SRC_FILES        := main.cc\nLOCAL_STATIC_LIBRARIES := gnustl_static\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_LDLIBS := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE           := test_std_atomic_crash_gnustl_shared\nLOCAL_SRC_FILES        := main.cc\nLOCAL_SHARED_LIBRARIES := gnustl_shared\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_LDLIBS := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,cxx-stl/gnu-libstdc++)\n"
  },
  {
    "path": "tests/device/crystax-test-std-atomic-crashes/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := none\n"
  },
  {
    "path": "tests/device/crystax-test-std-atomic-crashes/jni/main.cc",
    "content": "#include <atomic>\n#include <pthread.h>\n#include <unistd.h>\n#include <string>\n#include <time.h>\n#include <stdio.h>\n\nstd::atomic<long> g_shared_counter(0);\nstd::atomic<bool> g_stop(false);\n\n#define MAX_THREADS  2\n\nint g_thread_counts[MAX_THREADS];\npthread_t g_threads[MAX_THREADS];\n\nvoid* thread_main(void* arg) {\n  int *thread_counts = static_cast<int*>(arg);\n\n  while (!g_stop) {\n      for (size_t nn = 0; nn < 10000; ++nn) {\n        // Atomic increment here.\n        g_shared_counter++;\n\n        // Non-atomic increment, but only for debugging.\n        *thread_counts += 1;\n      }\n  }\n  return NULL;\n}\n\n#define MAX_TIME       60\n#define CHECK_INTERVAL 2\n\nint main(void) {\n    int num_threads = MAX_THREADS;\n\n    g_shared_counter = 0;\n    g_stop = false;\n\n    for (int i = 0; i < num_threads; ++i) {\n        g_thread_counts[i] = 0;\n        pthread_create(&g_threads[i], NULL, &thread_main, reinterpret_cast<void*>(&g_thread_counts[i]));\n    }\n\n    time_t start_time = time(NULL);\n    time_t last_time = start_time;\n\n    for (;;) {\n        time_t now = time(NULL);\n\n        if (now - start_time >= MAX_TIME)\n            break;\n\n        if (now - last_time > CHECK_INTERVAL) {\n            char buffer[64];\n            long atomic_count = g_shared_counter;\n            std::string message(\"Thread updates: \");\n            for (int i = 0; i < num_threads; ++i) {\n                snprintf(buffer, sizeof(buffer), \" [%3d %d]\", i, g_thread_counts[i]);\n                message.append(buffer);\n                g_thread_counts[i] = 0;\n            }\n            printf(\"%s count=%ld\\n\", message.c_str(), atomic_count);\n            last_time = now;\n        }\n        printf(\".\");\n        fflush(stdout);\n        sleep(1);\n    }\n    printf(\"Stopping threads\\n\");\n    fflush(stdout);\n    g_stop = true;\n    for (int i = 0; i < num_threads; ++i) {\n        void* dummy;\n        pthread_join(g_threads[i], &dummy);\n    }\n\n    long atomic_count = g_shared_counter;\n    printf(\"Final: %ld\\n\", atomic_count);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-std-atomic-crashes/properties.json",
    "content": "{\"single-run-timeout\": 240}\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/common.mk",
    "content": "SRCFILES := main.c\n\nCFLAGS := -std=c11\nCFLAGS += -Wall -Wextra -Werror\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost-functions.mk\n\nifneq (,$(and $(call is-gcc,$(CC)),$(call is-version-less,$(call gcc-version,$(CC)),4.9)))\n.PHONY: test\ntest:\n\t@echo \"SKIP on-host testing for gcc-$(call gcc-version,$(CC))\"\nelse\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\nendif\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\nifneq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))\nLOCAL_LDLIBS    := -latomic\nendif\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-stdatomic.h/jni/main.c",
    "content": "#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9))\n#define HAVE_STD_ATOMIC 1\n#else\n#define HAVE_STD_ATOMIC 0\n#endif\n\n#if __gnu_linux__ && __clang__\n/* There is bug in clang on GNU/Linux, when it uses gcc's stdatomic.h instead of own one\n * and this cause compiler error.\n */\n#undef HAVE_STD_ATOMIC\n#define HAVE_STD_ATOMIC 0\n#endif\n\n#if HAVE_STD_ATOMIC\n\n#include <stdatomic.h>\n#include <assert.h>\n#include <pthread.h>\n#include <stdio.h>\n\n#define MAX_THREADS 200\n#define MAX_THREAD_COUNTER 100000\n\natomic_int value = ATOMIC_VAR_INIT(0);\nint nvalue = 0;\n\nvoid *worker(void *arg)\n{\n    (void)arg;\n\n    int i;\n\n    for (i = 0; i < MAX_THREAD_COUNTER; ++i) {\n        atomic_fetch_add(&value, 1);\n        ++nvalue;\n    }\n    for (i = 0; i < MAX_THREAD_COUNTER/2; ++i) {\n        atomic_fetch_sub(&value, 15);\n        nvalue -= 15;\n    }\n    for (i = 0; i < MAX_THREAD_COUNTER/2; ++i) {\n        atomic_fetch_add(&value, 10);\n        nvalue += 10;\n    }\n    for (i = 0; i < MAX_THREAD_COUNTER/2; ++i) {\n        atomic_fetch_add(&value, 5);\n        nvalue += 5;\n    }\n\n    return NULL;\n}\n\nvoid test()\n{\n    int i;\n    int v;\n    pthread_t ths[MAX_THREADS];\n\n    printf(\"=== Starting %d threads...\\n\", MAX_THREADS);\n    for (i = 0; i < MAX_THREADS; ++i)\n        assert(pthread_create(&ths[i], NULL, &worker, NULL) == 0);\n\n    printf(\"=== Joining %d threads...\\n\", MAX_THREADS);\n    for (i = 0; i < MAX_THREADS; ++i)\n        assert(pthread_join(ths[i], NULL) == 0);\n\n    v = atomic_load(&value);\n    printf(\"=== Atomic counter: %d\\n\", v);\n    printf(\"=== Non-atomic counter: %d\\n\", nvalue);\n\n    assert(v == MAX_THREADS * MAX_THREAD_COUNTER);\n}\n\n#endif /* HAVE_STD_ATOMIC */\n\nint main()\n{\n#if HAVE_STD_ATOMIC\n    test();\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/common.mk",
    "content": "CTESTS :=            \\\n\tfmemopen         \\\n\tfopen            \\\n\tgetdelim         \\\n\tgetline          \\\n\topen_memstream   \\\n\topen_wmemstream  \\\n\tpopen            \\\n\tprint-positional \\\n\tprintbasic       \\\n\tprintf           \\\n\tprintfloat       \\\n\tscanfloat        \\\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -Wno-unused-parameter\nCFLAGS += -Wno-sign-compare\nCFLAGS += -Wno-unused-variable\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))\n\ninclude ../common.mk\n\nCFLAGS += -I../jni\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=test-$(1).c CFLAGS=\"$(CFLAGS)\" TARGETNAME=test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=test-$(1).c\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := test-$(1)\nLOCAL_SRC_FILES  := test-$(1).c\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-case,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-fmemopen.c",
    "content": "/*-\nCopyright (C) 2013 Pietro Cerutti <gahr@FreeBSD.org>\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.\n*/\n\n/*\n * Test basic FILE * functions (fread, fwrite, fseek, fclose) against\n * a FILE * retrieved using fmemopen()\n */\n\n#if __APPLE__\n\nint main(void)\n{\n    return (0);\n}\n\n#else /* !__APPLE__ */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <stdio.h>\n#include <string.h>\n#include <strings.h>\n\nvoid\ntest_preexisting()\n{\n\t/* \n\t * Use a pre-existing buffer.\n\t */\n\n\tchar buf[512];\n\tchar buf2[512];\n\tchar str[]  = \"Test writing some stuff\";\n\tchar str2[] = \"AAAAAAAAA\";\n\tchar str3[] = \"AAAA writing some stuff\";\n\tFILE *fp;\n\tsize_t nofw, nofr;\n\tint rc;\n\n\t/* Open a FILE * using fmemopen. */\n\tfp = fmemopen(buf, sizeof(buf), \"w\");\n\tassert(fp != NULL);\n\n\t/* Write to the buffer. */\n\tnofw = fwrite(str, 1, sizeof(str), fp);\n\tassert(nofw == sizeof(str));\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n\n\t/* Re-open the FILE * to read back the data. */\n\tfp = fmemopen(buf, sizeof(buf), \"r\");\n\tassert(fp != NULL);\n\n\t/* Read from the buffer. */\n\tbzero(buf2, sizeof(buf2));\n\tnofr = fread(buf2, 1, sizeof(buf2), fp);\n\tassert(nofr == sizeof(buf2));\n\n\t/* \n\t * Since a write on a FILE * retrieved by fmemopen\n\t * will add a '\\0' (if there's space), we can check\n\t * the strings for equality.\n\t */\n\tassert(strcmp(str, buf2) == 0);\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n\n\t/* Now open a FILE * on the first 4 bytes of the string. */\n\tfp = fmemopen(str, 4, \"w\");\n\tassert(fp != NULL);\n\n#if !__gnu_linux__\n\t/*\n\t * Try to write more bytes than we shoud, we'll get a short count (4).\n\t */\n\tnofw = fwrite(str2, 1, sizeof(str2), fp);\n\tassert(nofw == 4);\n#endif\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\n#if !__gnu_linux__\n\t/* Check that the string was not modified after the first 4 bytes. */\n\tassert(strcmp(str, str3) == 0);\n#endif\n}\n\nvoid\ntest_autoalloc()\n{\n#if !defined(__GLIBC__) || __GLIBC__ > 2 || __GLIBC_MINOR__ > 15\n\t/* \n\t * Let fmemopen allocate the buffer.\n\t */\n\n\tchar str[] = \"A quick test\";\n\tFILE *fp;\n\tlong pos;\n\tsize_t nofw, nofr, i;\n\tint rc;\n\n\t/* Open a FILE * using fmemopen. */\n\tfp = fmemopen(NULL, 512, \"w+\");\n\tassert(fp != NULL);\n\n\t/* fill the buffer */\n\tfor (i = 0; i < 512; i++) {\n\t\tnofw = fwrite(\"a\", 1, 1, fp);\n\t\tassert(nofw == 1);\n\t}\n\n\t/* Get the current position into the stream. */\n\tpos = ftell(fp);\n\tassert(pos == 512);\n\n#endif /* !defined(__GLIBC__) || __GLIBC__ > 2 || __GLIBC_MINOR__ > 15 */\n\n#if !__gnu_linux__\n\t/* \n\t * Try to write past the end, we should get a short object count (0)\n\t */\n\tnofw = fwrite(\"a\", 1, 1, fp);\n\tassert(nofw == 0);\n#endif\n\n#if !__gnu_linux__\n    /* For some reason, on GNU linux fclose() return -1 here so don't close it at all */\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n#endif\n}\n\nvoid\ntest_data_length()\n{\n\t/*\n\t * Here we test that a read operation doesn't go past the end of the\n\t * data actually written, and that a SEEK_END seeks from the end of the\n\t * data, not of the whole buffer.\n\t */\n\tFILE *fp;\n\tchar buf[512] = {'\\0'};\n\tchar str[]  = \"Test data length. \";\n\tchar str2[] = \"Do we have two sentences?\";\n\tchar str3[sizeof(str) + sizeof(str2) -1];\n\tlong pos;\n\tsize_t nofw, nofr;\n\tint rc;\n\n\t/* Open a FILE * for updating our buffer. */\n\tfp = fmemopen(buf, sizeof(buf), \"w+\");\n\tassert(fp != NULL);\n\n\t/* Write our string into the buffer. */\n\tnofw = fwrite(str, 1, sizeof(str), fp);\n\tassert(nofw == sizeof(str));\n\n\t/* \n\t * Now seek to the end and check that ftell\n\t * gives us sizeof(str).\n\t */\n\trc = fseek(fp, 0, SEEK_END);\n\tassert(rc == 0);\n\tpos = ftell(fp);\n\tassert(pos == sizeof(str));\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n\n\t/* Reopen the buffer for appending. */\n\tfp = fmemopen(buf, sizeof(buf), \"a+\");\n\tassert(fp != NULL);\n\n\t/* We should now be writing after the first string. */\n\tnofw = fwrite(str2, 1, sizeof(str2), fp);\n\tassert(nofw == sizeof(str2));\n\n\t/* Rewind the FILE *. */\n\trc = fseek(fp, 0, SEEK_SET);\n\tassert(rc == 0);\n\n\t/* Make sure we're at the beginning. */\n\tpos = ftell(fp);\n\tassert(pos == 0);\n\n\t/* Read the whole buffer. */\n#if __gnu_linux__\n    nofr = fread(str3, 1, sizeof(str3), fp);\n#else\n\tnofr = fread(str3, 1, sizeof(buf), fp);\n#endif\n\tassert(nofr == sizeof(str3));\n\n\t/* Make sure the two strings are there. */\n\tassert(strncmp(str3, str, sizeof(str) - 1) == 0);\n\tassert(strncmp(str3 + sizeof(str) - 1, str2, sizeof(str2)) == 0);\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n}\n\nvoid\ntest_binary()\n{\n\t/*\n\t * Make sure that NULL bytes are never appended when opening a buffer\n\t * in binary mode.\n\t */\n\n\tFILE *fp;\n\tchar buf[20];\n\tchar str[] = \"Test\";\n\tsize_t nofw;\n\tint rc, i;\n\n\t/* Pre-fill the buffer. */\n\tmemset(buf, 'A', sizeof(buf));\n\n\t/* Open a FILE * in binary mode. */\n\tfp = fmemopen(buf, sizeof(buf), \"w+b\");\n\tassert(fp != NULL);\n\n\t/* Write some data into it. */\n\tnofw = fwrite(str, 1, strlen(str), fp);\n\tassert(nofw == strlen(str));\n\n\t/* Make sure that the buffer doesn't contain any NULL bytes. */\n\tfor (i = 0; i < sizeof(buf); i++)\n\t\tassert(buf[i] != '\\0');\n\n\t/* Close the FILE *. */\n\trc = fclose(fp);\n\tassert(rc == 0);\n}\n\nint\nmain(void)\n{\n\ttest_autoalloc();\n\ttest_preexisting();\n\ttest_data_length();\n#if !__gnu_linux__\n\ttest_binary();\n#endif\n\treturn (0);\n}\n\n#endif /* !__APPLE__ */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-fopen.c",
    "content": "/*-\n * Copyright (c) 2013 Jilles Tjoelker\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include <sys/cdefs.h>\n\n#include\t<fcntl.h>\n#include\t<stdio.h>\n#include\t<string.h>\n#include\t<stdlib.h>\n\n/*\n * O_ACCMODE is currently defined incorrectly. This is what it should be.\n * Various code depends on the incorrect value.\n */\n#define CORRECT_O_ACCMODE O_ACCMODE\n\nstatic int testnum = 1;\n\nstatic void\nruntest(const char *fname, const char *mode)\n{\n\tFILE *fp;\n\tint fd, flags, wantedflags;\n\n\tfp = fopen(fname, mode);\n\tif (fp == NULL) {\n\t\tprintf(\"not ok %d - fopen(\\\"%s\\\", \\\"%s\\\") failed\\n\",\n\t\t    testnum++, fname, mode);\n\t\tprintf(\"not ok %d - FD_CLOEXEC # SKIP\\n\",\n\t\t    testnum++);\n\t\tabort();\n\t\treturn;\n\t}\n\tfd = fileno(fp);\n\tif (fd < 0)\n\t{\n\t\tprintf(\"not ok %d - fileno() failed\\n\", testnum++);\n\t\tabort();\n\t}\n\telse\n\t\tprintf(\"ok %d - fopen(\\\"%s\\\", \\\"%s\\\") and fileno() succeeded\\n\",\n\t\t    testnum++, fname, mode);\n\tif (fcntl(fd, F_GETFD) == (strchr(mode, 'e') != NULL ? FD_CLOEXEC : 0))\n\t\tprintf(\"ok %d - FD_CLOEXEC flag correct\\n\", testnum++);\n\telse\n\t{\n\t\tprintf(\"not ok %d - FD_CLOEXEC flag incorrect\\n\", testnum++);\n\t\tabort();\n\t}\n\tflags = fcntl(fd, F_GETFL);\n\tif (strchr(mode, '+'))\n\t\twantedflags = O_RDWR | (*mode == 'a' ? O_APPEND : 0);\n\telse if (*mode == 'r')\n\t\twantedflags = O_RDONLY;\n\telse if (*mode == 'w')\n\t\twantedflags = O_WRONLY;\n\telse if (*mode == 'a')\n\t\twantedflags = O_WRONLY | O_APPEND;\n\telse\n\t\twantedflags = -1;\n\tif (wantedflags == -1)\n\t{\n\t\tprintf(\"not ok %d - unrecognized mode\\n\", testnum++);\n\t\tabort();\n\t}\n\telse if ((flags & (CORRECT_O_ACCMODE | O_APPEND)) == wantedflags)\n\t\tprintf(\"ok %d - correct access mode\\n\", testnum++);\n\telse\n\t{\n\t\tprintf(\"not ok %d - incorrect access mode\\n\", testnum++);\n\t\tabort();\n\t}\n\tfclose(fp);\n}\n\n/*\n * Test program for fopen().\n */\nint\nmain(int argc, char *argv[])\n{\n\tprintf(\"1..45\\n\");\n\truntest(\"/dev/null\", \"r\");\n\truntest(\"/dev/null\", \"r+\");\n\truntest(\"/dev/null\", \"w\");\n\truntest(\"/dev/null\", \"w+\");\n\truntest(\"/dev/null\", \"a\");\n\truntest(\"/dev/null\", \"a+\");\n#if !__APPLE__\n\truntest(\"/dev/null\", \"re\");\n\truntest(\"/dev/null\", \"r+e\");\n\truntest(\"/dev/null\", \"we\");\n\truntest(\"/dev/null\", \"w+e\");\n\truntest(\"/dev/null\", \"ae\");\n\truntest(\"/dev/null\", \"a+e\");\n\truntest(\"/dev/null\", \"re+\");\n\truntest(\"/dev/null\", \"we+\");\n\truntest(\"/dev/null\", \"ae+\");\n#endif\n\n\treturn 0;\n}\n\n/* vim:ts=8:cin:sw=8\n *  */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-getdelim.c",
    "content": "/*-\n * Copyright (c) 2009 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __gnu_linux__ || (__APPLE__ && !defined(__MAC_10_7))\n\nint main()\n{\n    return 0;\n}\n\n#else /* !__gnu_linux__ */\n\n#include <sys/cdefs.h>\n\n#define\t_WITH_GETLINE\n#include <assert.h>\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define\tCHUNK_MAX\t10\n\n/* The assertions depend on this string. */\nchar apothegm[] = \"All work and no play\\0 makes Jack a dull boy.\\n\";\n\n/*\n * This is a neurotic reader function designed to give getdelim() a\n * hard time. It reads through the string `apothegm' and returns a\n * random number of bytes up to the requested length.\n */\nstatic int\n_reader(void *cookie, char *buf, int len)\n{\n\tsize_t *offp = cookie;\n\tsize_t r;\n\n\tr = random() % CHUNK_MAX + 1;\n\tif (len > r)\n\t\tlen = r;\n\tif (len > sizeof(apothegm) - *offp)\n\t\tlen = sizeof(apothegm) - *offp;\n\tmemcpy(buf, apothegm + *offp, len);\n\t*offp += len;\n\treturn (len);\n}\n\nstatic FILE *\nmkfilebuf(void)\n{\n\tsize_t *offp;\n\n\toffp = malloc(sizeof(*offp));\t/* XXX leak */\n\t*offp = 0;\n\treturn (fropen(offp, _reader));\n}\n\nint\nmain(int argc, char *argv[])\n{\n\tFILE *fp;\n\tchar *line;\n\tsize_t linecap;\n\tint i, n;\n\n\tsrandom(0);\n\n\tprintf(\"1..6\\n\");\n\n\t/*\n\t * Test multiple times with different buffer sizes\n\t * and different _reader() return values.\n\t */\n\terrno = 0;\n\tfor (i = 0; i < 8; i++) {\n\t\tfp = mkfilebuf();\n\t\tlinecap = i;\n\t\tline = malloc(i);\n\t\t/* First line: the full apothegm */\n\t\tassert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1);\n\t\tassert(memcmp(line, apothegm, sizeof(apothegm)) == 0);\n\t\tassert(linecap >= sizeof(apothegm));\n\t\t/* Second line: the NUL terminator following the newline */\n\t\tassert(getline(&line, &linecap, fp) == 1);\n\t\tassert(line[0] == '\\0' && line[1] == '\\0');\n\t\t/* Third line: EOF */\n\t\tline[0] = 'X';\n\t\tassert(getline(&line, &linecap, fp) == -1);\n\t\tassert(line[0] == '\\0');\n\t\tfree(line);\n\t\tline = NULL;\n\t\tassert(feof(fp));\n\t\tassert(!ferror(fp));\n\t\tfclose(fp);\n\t}\n\tassert(errno == 0);\n\tprintf(\"ok 1 - getline basic\\n\");\n\n\t/* Make sure read errors are handled properly. */\n\tlinecap = 0;\n\terrno = 0;\n\tassert(getline(&line, &linecap, stdout) == -1);\n\tassert(errno == EBADF);\n\terrno = 0;\n\tassert(getdelim(&line, &linecap, 'X', stdout) == -1);\n\tassert(errno == EBADF);\n\tassert(ferror(stdout));\n\tprintf(\"ok 2 - stream error\\n\");\n\n\t/* Make sure NULL linep or linecapp pointers are handled. */\n\tfp = mkfilebuf();\n\tassert(getline(NULL, &linecap, fp) == -1);\n\tassert(errno == EINVAL);\n\tassert(getline(&line, NULL, fp) == -1);\n\tassert(errno == EINVAL);\n\tassert(ferror(fp));\n\tfclose(fp);\n\tprintf(\"ok 3 - invalid params\\n\");\n\n\t/* Make sure getline() allocates memory as needed if fp is at EOF. */\n\terrno = 0;\n\tfp = mkfilebuf();\n\twhile (!feof(fp))\t/* advance to EOF; can't fseek this stream */\n\t\tgetc(fp);\n\tfree(line);\n\tline = NULL;\n\tlinecap = 0;\n\tassert(getline(&line, &linecap, fp) == -1);\n\tassert(line[0] == '\\0');\n\tassert(linecap > 0);\n\tassert(errno == 0);\n\tassert(feof(fp));\n\tassert(!ferror(fp));\n\tfclose(fp);\n\tprintf(\"ok 4 - eof\\n\");\n\n\t/* Make sure a NUL delimiter works. */\n\tfp = mkfilebuf();\n\tn = strlen(apothegm);\n\tassert(getdelim(&line, &linecap, '\\0', fp) == n + 1);\n\tassert(strcmp(line, apothegm) == 0);\n\tassert(line[n + 1] == '\\0');\n\tassert(linecap > n + 1);\n\tn = strlen(apothegm + n + 1);\n\tassert(getdelim(&line, &linecap, '\\0', fp) == n + 1);\n\tassert(line[n + 1] == '\\0');\n\tassert(linecap > n + 1);\n\tassert(errno == 0);\n\tassert(!ferror(fp));\n\tfclose(fp);\n\tprintf(\"ok 5 - nul\\n\");\n\n\t/* Make sure NULL *linep and zero *linecapp are handled. */\n\tfp = mkfilebuf();\n\tfree(line);\n\tline = NULL;\n\tlinecap = 42;\n\tassert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1);\n\tassert(memcmp(line, apothegm, sizeof(apothegm)) == 0);\n\tfp = mkfilebuf();\n\tfree(line);\n\tline = malloc(100);\n\tlinecap = 0;\n\tassert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1);\n\tassert(memcmp(line, apothegm, sizeof(apothegm)) == 0);\n\tfree(line);\n\tassert(!ferror(fp));\n\tfclose(fp);\n\tprintf(\"ok 6 - empty/NULL initial buffer\\n\");\n\n\texit(0);\n}\n\n#endif /* !__gnu_linux__ */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-getline.c",
    "content": "#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __APPLE__ && !defined(__MAC_10_7)\nint main()\n{\n    return 0;\n}\n\n#else /* !__APPLE__ || defined(__MAC_10_7) */\n\n#define TEST_FILE_NAME  \"./test-getline.data\"\n\n\nconst char *DATA_1[] = {\n    \"Part0_0 Part0_1\\n\",\n    \"Part1_0 Part1_1\\n\",\n    \"Part2_0 Part2_1\\n\",\n    \"Part3_0 Part3_1\"\n};\nconst int LINE_NUM_1 = sizeof(DATA_1) / sizeof(char *);\n\nconst char *DATA_2[] = {\n    \"Part0 \",\n    \"Part1 \",\n    \"Part2 \",\n    \"Part3 \",\n    \"Part4 \"\n};\nconst int LINE_NUM_2 = sizeof(DATA_2) / sizeof(char *);\n\n\nstatic int make_test_file();\n\n\nstatic int test_getline_impl(size_t ln)\n{\n    FILE *f;\n    int i;\n\n    if (make_test_file(DATA_1, LINE_NUM_1) != 0) {\n        printf(\"test_getline: failed to make test file\\n\");\n        return 1;\n    }\n\n    f = fopen(TEST_FILE_NAME, \"r\");\n    if (f == NULL) {\n        printf(\"test_getline: failed to open temp file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    for (i=0; i<LINE_NUM_1; ++i) {\n        size_t num = ln;\n        char *s = ln == 0 ? NULL : (char *)malloc(ln);\n        ssize_t rc;\n        if ((rc = getline(&s, &num, f)) < 0) {\n            printf(\"test_getline: failed to read temp file; error %i; %s\\n\", errno, strerror(errno));\n            return 1;\n        }\n        if (strcmp(s, DATA_1[i]) != 0) {\n            printf(\"test_getline: expected line: '%s'\\n\", DATA_1[i]);\n            printf(\"test_getline: read line:     '%s'\\n\", s);\n            return 1;\n        }\n        free(s);\n    }\n\n    if (fclose(f) != 0) {\n        printf(\"failed to close test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    if (unlink(TEST_FILE_NAME) != 0) {\n        printf(\"failed to close test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    printf(\"getline - ok\\n\");\n    return 0;\n}\n\nint test_getline()\n{\n    int rc;\n    if ((rc = test_getline_impl(0)) != 0) return rc;\n    if ((rc = test_getline_impl(1)) != 0) return rc;\n    if ((rc = test_getline_impl(5)) != 0) return rc;\n    if ((rc = test_getline_impl(512)) != 0) return rc;\n    return 0;\n}\n\n\nint test_getdelim()\n{\n    FILE *f;\n    int i;\n\n    if (make_test_file(DATA_2, LINE_NUM_2) != 0) {\n        printf(\"test_getdelim: failed to make test file\\n\");\n        return 1;\n    }\n\n    f = fopen(TEST_FILE_NAME, \"r\");\n    if (f == NULL) {\n        printf(\"test_getdelim: failed to open temp file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    for (i=0; i<LINE_NUM_2; ++i) {\n        char *s = NULL;\n        size_t num = 0;\n        if (getdelim(&s, &num, ' ', f) == -1) {\n            printf(\"test_getdelim: failed to read temp file; error %i; %s\\n\", errno, strerror(errno));\n            return 1;\n        }\n        if (strcmp(s, DATA_2[i]) != 0) {\n            printf(\"test_getdelim: expected: '%s'\\n\", DATA_2[i]);\n            printf(\"test_getdelim: read:     '%s'\\n\", s);\n            return 1;\n        }\n    }\n\n    if (fclose(f) != 0) {\n        printf(\"failed to close test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    if (unlink(TEST_FILE_NAME) != 0) {\n        printf(\"failed to close test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    printf(\"getdelim - ok\\n\");\n    return 0;\n}\n\n\nint make_test_file(const char *data[], int num)\n{\n    FILE *f;\n    int i;\n\n    f = fopen(TEST_FILE_NAME, \"w\");\n    if (f == NULL) {\n        printf(\"failed to open test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    for (i=0; i<num; ++i) {\n        if (fprintf(f, \"%s\", data[i]) < 0) {\n            printf(\"failed to write line %i to test file; error %i; %s\\n\", i, errno, strerror(errno));\n            return 1;\n        }\n    }\n\n    if (fclose(f) != 0) {\n        printf(\"failed to close test file; error %i; %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    return 0;\n}\n\nint main()\n{\n    if (test_getline() != 0) return 1;\n    if (test_getdelim() != 0) return 1;\n    return 0;\n}\n\n#endif /* !__APPLE__ || defined(__MAC_10_7) */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-open_memstream.c",
    "content": "/*-\n * Copyright (c) 2013 Advanced Computing Technologies LLC\n * Written by: John H. Baldwin <jhb@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#if __APPLE__\n\nint main()\n{\n    return 0;\n}\n\n#else /* !__APPLE__ */\n\n#include <sys/cdefs.h>\n\n#include <err.h>\n#include <errno.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\n#if __gnu_linux__ && !__ANDROID__\n#if __LP64__\n#define OFF_MAX INT64_MAX\n#define OFF_MIN INT64_MIN\n#else\n#define OFF_MAX INT_MAX\n#define OFF_MIN INT_MIN\n#endif\n#endif /* __gnu_linux__ */\n\nstatic char *buf;\nstatic size_t len;\n\nstatic void\nassert_stream(const char *contents)\n{\n\tif (strlen(contents) != len)\n\t\tprintf(\"bad length %zd for \\\"%s\\\"\\n\", len, contents);\n\telse if (strncmp(buf, contents, strlen(contents)) != 0)\n\t\tprintf(\"bad buffer \\\"%s\\\" for \\\"%s\\\"\\n\", buf, contents);\n}\n\nstatic void\nopen_group_test(void)\n{\n\tFILE *fp;\n\toff_t eob;\n\n\tfp = open_memstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n\n\tfprintf(fp, \"hello my world\");\n\tfflush(fp);\n\tassert_stream(\"hello my world\");\n\teob = ftello(fp);\n\trewind(fp);\n\tfprintf(fp, \"good-bye\");\n\tfseeko(fp, eob, SEEK_SET);\n\tfclose(fp);\n\tassert_stream(\"good-bye world\");\n\tfree(buf);\n}\n\nstatic void\nsimple_tests(void)\n{\n\tstatic const char zerobuf[] =\n\t    { 'f', 'o', 'o', 0, 0, 0, 0, 'b', 'a', 'r', 0 };\n\tchar c;\n\tFILE *fp;\n\n#if !__gnu_linux__\n\tfp = open_memstream(&buf, NULL);\n\tif (fp != NULL)\n\t\terrx(1, \"did not fail to open stream\");\n\telse if (errno != EINVAL)\n\t\terr(1, \"incorrect error for bad length pointer\");\n\tfp = open_memstream(NULL, &len);\n\tif (fp != NULL)\n\t\terrx(1, \"did not fail to open stream\");\n\telse if (errno != EINVAL)\n\t\terr(1, \"incorrect error for bad buffer pointer\");\n#endif /* !__gnu_linux__ */\n\tfp = open_memstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n\tfflush(fp);\n\tassert_stream(\"\");\n\tif (fwide(fp, 0) >= 0)\n\t\tprintf(\"stream is not byte-oriented\\n\");\n\n\tfprintf(fp, \"fo\");\n\tfflush(fp);\n\tassert_stream(\"fo\");\n\tfputc('o', fp);\n\tfflush(fp);\n\tassert_stream(\"foo\");\n\trewind(fp);\n\tfflush(fp);\n\tassert_stream(\"\");\n\tfseek(fp, 0, SEEK_END);\n\tfflush(fp);\n\tassert_stream(\"foo\");\n\n\t/*\n\t * Test seeking out past the current end.  Should zero-fill the\n\t * intermediate area.\n\t */\n\tfseek(fp, 4, SEEK_END);\n\tfprintf(fp, \"bar\");\n\tfflush(fp);\n\n\t/*\n\t * Can't use assert_stream() here since this should contain\n\t * embedded null characters.\n\t */\n\tif (len != 10)\n\t\tprintf(\"bad length %zd for zero-fill test\\n\", len);\n\telse if (memcmp(buf, zerobuf, sizeof(zerobuf)) != 0)\n\t\tprintf(\"bad buffer for zero-fill test\\n\");\n\n\tfseek(fp, 3, SEEK_SET);\n\tfprintf(fp, \" in \");\n\tfflush(fp);\n\tassert_stream(\"foo in \");\n\tfseek(fp, 0, SEEK_END);\n\tfflush(fp);\n\tassert_stream(\"foo in bar\");\n\n\trewind(fp);\n\tif (fread(&c, sizeof(c), 1, fp) != 0)\n\t\tprintf(\"fread did not fail\\n\");\n\telse if (!ferror(fp))\n\t\tprintf(\"error indicator not set after fread\\n\");\n\telse\n\t\tclearerr(fp);\n\n\tfseek(fp, 4, SEEK_SET);\n\tfprintf(fp, \"bar baz\");\n\tfclose(fp);\n\tassert_stream(\"foo bar baz\");\n\tfree(buf);\n}\n\nstatic void\nseek_tests(void)\n{\n\tFILE *fp;\n\n\tfp = open_memstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n#define SEEK_FAIL(offset, whence, error) do {\t\t\t\t\\\n\terrno = 0;\t\t\t\t\t\t\t\\\n\tif (fseeko(fp, (offset), (whence)) == 0)\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) did not fail, set pos to %jd\\n\",\t\\\n\t\t    __STRING(offset), __STRING(whence),\t\t\t\\\n\t\t    (intmax_t)ftello(fp));\t\t\t\t\\\n\telse if (errno != (error))\t\t\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) failed with %d rather than %s\\n\",\\\n\t\t    __STRING(offset), __STRING(whence),\terrno,\t\t\\\n\t\t    __STRING(error));\t\t\t\t\t\\\n} while (0)\n\n#define SEEK_OK(offset, whence, result) do {\t\t\t\t\\\n\tif (fseeko(fp, (offset), (whence)) != 0)\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) failed: %s\\n\",\t\t\t\\\n\t\t    __STRING(offset), __STRING(whence),\tstrerror(errno)); \\\n\telse if (ftello(fp) != (result))\t\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) seeked to %jd rather than %s\\n\",\t\\\n\t\t    __STRING(offset), __STRING(whence),\t\t\t\\\n\t\t    (intmax_t)ftello(fp), __STRING(result));\t\t\\\n} while (0)\n\n\tSEEK_FAIL(-1, SEEK_SET, EINVAL);\n\tSEEK_FAIL(-1, SEEK_CUR, EINVAL);\n\tSEEK_FAIL(-1, SEEK_END, EINVAL);\n\tfprintf(fp, \"foo\");\n\tSEEK_OK(-1, SEEK_CUR, 2);\n\tSEEK_OK(0, SEEK_SET, 0);\n\tSEEK_OK(-1, SEEK_END, 2);\n\tSEEK_OK(OFF_MAX - 1, SEEK_SET, OFF_MAX - 1);\n\tSEEK_FAIL(2, SEEK_CUR, EOVERFLOW);\n\tfclose(fp);\n}\n\nint\nmain(int ac, char **av)\n{\n\n\topen_group_test();\n\tsimple_tests();\n\tseek_tests();\n\treturn (0);\n}\n\n#endif /* !__APPLE__ */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-open_wmemstream.c",
    "content": "/*-\n * Copyright (c) 2013 Advanced Computing Technologies LLC\n * Written by: John H. Baldwin <jhb@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#if __APPLE__ || __gnu_linux__\n\nint main()\n{\n    return 0;\n}\n\n#else /* !__APPLE__ */\n\n#include <sys/cdefs.h>\n__FBSDID(\"$FreeBSD$\");\n\n#include <err.h>\n#include <errno.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nstatic wchar_t *buf;\nstatic size_t len;\n\nstatic void\nassert_stream(const wchar_t *contents)\n{\n\tif (wcslen(contents) != len)\n\t\tprintf(\"bad length %zd for \\\"%ls\\\"\\n\", len, contents);\n\telse if (wcsncmp(buf, contents, wcslen(contents)) != 0)\n\t\tprintf(\"bad buffer \\\"%ls\\\" for \\\"%ls\\\"\\n\", buf, contents);\n}\n\nstatic void\nopen_group_test(void)\n{\n\tFILE *fp;\n\toff_t eob;\n\n\tfp = open_wmemstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n\n\tfwprintf(fp, L\"hello my world\");\n\tfflush(fp);\n\tassert_stream(L\"hello my world\");\n\teob = ftello(fp);\n\trewind(fp);\n\tfwprintf(fp, L\"good-bye\");\n\tfseeko(fp, eob, SEEK_SET);\n\tfclose(fp);\n\tassert_stream(L\"good-bye world\");\n\tfree(buf);\n}\n\nstatic void\nsimple_tests(void)\n{\n\tstatic const wchar_t zerobuf[] =\n\t    { L'f', L'o', L'o', 0, 0, 0, 0, L'b', L'a', L'r', 0 };\n\twchar_t c;\n\tFILE *fp;\n\n\tfp = open_wmemstream(&buf, NULL);\n\tif (fp != NULL)\n\t\terrx(1, \"did not fail to open stream\");\n\telse if (errno != EINVAL)\n\t\terr(1, \"incorrect error for bad length pointer\");\n\tfp = open_wmemstream(NULL, &len);\n\tif (fp != NULL)\n\t\terrx(1, \"did not fail to open stream\");\n\telse if (errno != EINVAL)\n\t\terr(1, \"incorrect error for bad buffer pointer\");\n\tfp = open_wmemstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n\tfflush(fp);\n\tassert_stream(L\"\");\n\tif (fwide(fp, 0) <= 0)\n\t\tprintf(\"stream is not wide-oriented\\n\");\n\n\tfwprintf(fp, L\"fo\");\n\tfflush(fp);\n\tassert_stream(L\"fo\");\n\tfputwc(L'o', fp);\n\tfflush(fp);\n\tassert_stream(L\"foo\");\n\trewind(fp);\n\tfflush(fp);\n\tassert_stream(L\"\");\n\tfseek(fp, 0, SEEK_END);\n\tfflush(fp);\n\tassert_stream(L\"foo\");\n\n\t/*\n\t * Test seeking out past the current end.  Should zero-fill the\n\t * intermediate area.\n\t */\n\tfseek(fp, 4, SEEK_END);\n\tfwprintf(fp, L\"bar\");\n\tfflush(fp);\n\n\t/*\n\t * Can't use assert_stream() here since this should contain\n\t * embedded null characters.\n\t */\n\tif (len != 10)\n\t\tprintf(\"bad length %zd for zero-fill test\\n\", len);\n\telse if (memcmp(buf, zerobuf, sizeof(zerobuf)) != 0)\n\t\tprintf(\"bad buffer for zero-fill test\\n\");\n\n\tfseek(fp, 3, SEEK_SET);\n\tfwprintf(fp, L\" in \");\n\tfflush(fp);\n\tassert_stream(L\"foo in \");\n\tfseek(fp, 0, SEEK_END);\n\tfflush(fp);\n\tassert_stream(L\"foo in bar\");\n\n\trewind(fp);\n\tif (fread(&c, sizeof(c), 1, fp) != 0)\n\t\tprintf(\"fread did not fail\\n\");\n\telse if (!ferror(fp))\n\t\tprintf(\"error indicator not set after fread\\n\");\n\telse\n\t\tclearerr(fp);\n\n\tfseek(fp, 4, SEEK_SET);\n\tfwprintf(fp, L\"bar baz\");\n\tfclose(fp);\n\tassert_stream(L\"foo bar baz\");\n\tfree(buf);\n}\n\nstatic void\nseek_tests(void)\n{\n\tFILE *fp;\n\n\tfp = open_wmemstream(&buf, &len);\n\tif (fp == NULL)\n\t\terr(1, \"failed to open stream\");\n#define SEEK_FAIL(offset, whence, error) do {\t\t\t\t\\\n\terrno = 0;\t\t\t\t\t\t\t\\\n\tif (fseeko(fp, (offset), (whence)) == 0)\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) did not fail, set pos to %jd\\n\",\t\\\n\t\t    __STRING(offset), __STRING(whence),\t\t\t\\\n\t\t    (intmax_t)ftello(fp));\t\t\t\t\\\n\telse if (errno != (error))\t\t\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) failed with %d rather than %s\\n\",\\\n\t\t    __STRING(offset), __STRING(whence),\terrno,\t\t\\\n\t\t    __STRING(error));\t\t\t\t\t\\\n} while (0)\n\n#define SEEK_OK(offset, whence, result) do {\t\t\t\t\\\n\tif (fseeko(fp, (offset), (whence)) != 0)\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) failed: %s\\n\",\t\t\t\\\n\t\t    __STRING(offset), __STRING(whence),\tstrerror(errno)); \\\n\telse if (ftello(fp) != (result))\t\t\t\t\\\n\t\tprintf(\"fseeko(%s, %s) seeked to %jd rather than %s\\n\",\t\\\n\t\t    __STRING(offset), __STRING(whence),\t\t\t\\\n\t\t    (intmax_t)ftello(fp), __STRING(result));\t\t\\\n} while (0)\n\n\tSEEK_FAIL(-1, SEEK_SET, EINVAL);\n\tSEEK_FAIL(-1, SEEK_CUR, EINVAL);\n\tSEEK_FAIL(-1, SEEK_END, EINVAL);\n\tfwprintf(fp, L\"foo\");\n\tSEEK_OK(-1, SEEK_CUR, 2);\n\tSEEK_OK(0, SEEK_SET, 0);\n\tSEEK_OK(-1, SEEK_END, 2);\n\tSEEK_OK(OFF_MAX - 1, SEEK_SET, OFF_MAX - 1);\n\tSEEK_FAIL(2, SEEK_CUR, EOVERFLOW);\n\tfclose(fp);\n}\n\nint\nmain(int ac, char **av)\n{\n\n\topen_group_test();\n\tsimple_tests();\n\tseek_tests();\n\treturn (0);\n}\n\n#endif /* !__APPLE__ */\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-popen.c",
    "content": "/* This tests here to ensure that popen() works\n * Earlier, there was crashes on call of popen().\n * See https://tracker.crystax.net/issues/958 for details.\n */\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n\n#include <stdio.h>\n#include <assert.h>\n\nint main()\n{\n    FILE *fp;\n    char buf[4096];\n\n    fp = popen(\"ls 2>&1\", \"r\");\n    assert(fp);\n\n    while (!feof(fp)) {\n        size_t n = fread(buf, 1, sizeof(buf), fp);\n        fwrite(buf, 1, n, stdout);\n    }\n\n    pclose(fp);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-print-positional.c",
    "content": "/*      $OpenBSD: sprintf_test.c,v 1.3 2004/09/16 20:22:26 otto Exp $ */\n\n/*\n * Copyright (c) 2003 Theo de Raadt\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n *    - Redistributions of source code must retain the above copyright\n *      notice, this list of conditions and the following disclaimer.\n *    - Redistributions in binary form must reproduce the above\n *      copyright notice, this list of conditions and the following\n *      disclaimer in the documentation and/or other materials provided\n *      with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <sys/cdefs.h>\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nconst char correct[] =\n\t\"|xx 01 02 03 04\\n\"\n\t\"|xx 05 06 07 08\\n\"\n\t\"|xx 09 10 11 12\\n\"\n\t\"|xx 13 14 15 16\\n\"\n\t\"|xx 17 18 19 20\\n\"\n\t\"|xx 21 22 23 24\\n\"\n\t\"|xx 25 26 27 28\\n\"\n\t\"|xx 29 30 31 32\\n\"\n\t\"|xx 33 34 35 36\\n\"\n\t\"|xx 37 38 39 40\\n\"\n\t\"|xx 41 42 43 44\\n\"\n\t\"|xx 45 -1 1 -1 1\\n\";\n\nconst char correct2[] =\n\t\"b bs BSD\";\n\nint\nmain(int argc, char *argv[])\n{\n\tchar buf[1024];\n\twchar_t wbuf1[1024], wbuf2[1024];\n\tconst char *temp;\n\n\tprintf(\"1..4\\n\");\n\n\t/* Test positional arguments */\n\tsnprintf(buf, sizeof buf,\n\t    \"|xx %1$s %2$s %3$s %4$s\\n\"\n\t    \"|xx %5$s %6$s %7$s %8$s\\n\"\n\t    \"|xx %9$s %10$s %11$s %12$s\\n\"\n\t    \"|xx %13$s %14$s %15$s %16$s\\n\"\n\t    \"|xx %17$s %18$s %19$s %20$s\\n\"\n\t    \"|xx %21$s %22$s %23$s %24$s\\n\"\n\t    \"|xx %25$s %26$s %27$s %28$s\\n\"\n\t    \"|xx %29$s %30$s %31$s %32$s\\n\"\n\t    \"|xx %33$s %34$s %35$s %36$s\\n\"\n\t    \"|xx %37$s %38$s %39$s %40$s\\n\"\n\t    \"|xx %41$s %42$s %43$s %44$s\\n\"\n\t    \"|xx %45$d %46$ld %47$lld %48$d %49$lld\\n\",\n\t    \"01\", \"02\", \"03\", \"04\", \"05\", \"06\",\n\t    \"07\", \"08\", \"09\", \"10\", \"11\", \"12\",\n\t    \"13\", \"14\", \"15\", \"16\", \"17\", \"18\",\n\t    \"19\", \"20\", \"21\", \"22\", \"23\", \"24\",\n\t    \"25\", \"26\", \"27\", \"28\", \"29\", \"30\",\n\t    \"31\", \"32\", \"33\", \"34\", \"35\", \"36\",\n\t    \"37\", \"38\", \"39\", \"40\", \"41\", \"42\",\n\t    \"43\", \"44\", 45, -1L, 1LL, -1, 1LL\n\t    );\n\tprintf(\"%sok 1 - print-positional normal\\n\",\n\t       strcmp(buf, correct) == 0 ? \"\" : \"not \");\n\n\tswprintf(wbuf1, sizeof wbuf1,\n\t    L\"|xx %1$s %2$s %3$s %4$s\\n\"\n\t    \"|xx %5$s %6$s %7$s %8$s\\n\"\n\t    \"|xx %9$s %10$s %11$s %12$s\\n\"\n\t    \"|xx %13$s %14$s %15$s %16$s\\n\"\n\t    \"|xx %17$s %18$s %19$s %20$s\\n\"\n\t    \"|xx %21$s %22$s %23$s %24$s\\n\"\n\t    \"|xx %25$s %26$s %27$s %28$s\\n\"\n\t    \"|xx %29$s %30$s %31$s %32$s\\n\"\n\t    \"|xx %33$s %34$s %35$s %36$s\\n\"\n\t    \"|xx %37$s %38$s %39$s %40$s\\n\"\n\t    \"|xx %41$s %42$s %43$s %44$s\\n\"\n\t    \"|xx %45$d %46$ld %47$lld %48$d %49$lld\\n\",\n\t    \"01\", \"02\", \"03\", \"04\", \"05\", \"06\",\n\t    \"07\", \"08\", \"09\", \"10\", \"11\", \"12\",\n\t    \"13\", \"14\", \"15\", \"16\", \"17\", \"18\",\n\t    \"19\", \"20\", \"21\", \"22\", \"23\", \"24\",\n\t    \"25\", \"26\", \"27\", \"28\", \"29\", \"30\",\n\t    \"31\", \"32\", \"33\", \"34\", \"35\", \"36\",\n\t    \"37\", \"38\", \"39\", \"40\", \"41\", \"42\",\n\t    \"43\", \"44\", 45, -1L, 1LL, -1, 1LL\n\t    );\n\ttemp = correct;\n\tmbsrtowcs(wbuf2, &temp, sizeof wbuf2, NULL);\n\tprintf(\"%sok 2 - print-positional wide\\n\",\n\t       wcscmp(wbuf1, wbuf2) == 0 ? \"\" : \"not \");\n\n\tsnprintf(buf, sizeof buf, \"%2$.*4$s %2$.*3$s %1$s\",\n\t\t \"BSD\", \"bsd\", 2, 1);\n\tprintf(\"%sok 3 - print-positional precision\\n\",\n\t       strcmp(buf, correct2) == 0 ? \"\" : \"not \");\n\n\tswprintf(wbuf1, sizeof buf, L\"%2$.*4$s %2$.*3$s %1$s\",\n\t\t \"BSD\", \"bsd\", 2, 1);\n\ttemp = correct2;\n\tmbsrtowcs(wbuf2, &temp, sizeof wbuf2, NULL);\n\tprintf(\"%sok 4 - print-positional precision wide\\n\",\n\t       wcscmp(wbuf1, wbuf2) == 0 ? \"\" : \"not \");\n\n\texit(0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-printbasic.c",
    "content": "/*-\n * Copyright (c) 2009 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Tests for basic and miscellaneous printf() formats.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <err.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#define\ttestfmt(result, fmt, ...)\t\\\n\t_testfmt((result), __LINE__, #__VA_ARGS__, fmt, __VA_ARGS__)\nvoid _testfmt(const char *, int, const char *, const char *, ...);\nvoid smash_stack(void);\n\n#define\tS_UINT64MAX\t\"18446744073709551615\"\n#define\tS_UINT32MAX\t\"4294967295\"\n#define\tS_INT64MIN\t\"-9223372036854775808\"\n#define\tS_INT32MIN\t\"-2147483648\"\n\n#define\tS_SIZEMAX\t(SIZE_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX)\n#define\tS_ULONGMAX\t(ULONG_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX)\n#define\tS_ULLONGMAX\t(ULLONG_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX)\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..2\\n\");\n\tassert(setlocale(LC_NUMERIC, \"C\"));\n\n\t/* The test requires these to be true. */\n\tassert(UINTMAX_MAX == UINT64_MAX);\n\tassert(UINT_MAX == UINT32_MAX);\n\tassert(USHRT_MAX == 0xffff);\n\tassert(UCHAR_MAX == 0xff);\n\n\t/*\n\t * Make sure we handle signed vs. unsigned args correctly.\n\t */\n\ttestfmt(\"-1\", \"%jd\", (intmax_t)-1);\n\ttestfmt(S_UINT64MAX, \"%ju\", UINT64_MAX);\n\n\ttestfmt(\"-1\", \"%td\", (ptrdiff_t)-1);\n#if !__ANDROID__\n    /*\n     * Temporarily disabled due to bug in printf implementation.\n     * See https://tracker.crystax.net/issues/815 for details.\n     */\n#if !__APPLE__ || defined(__MAC_10_7)\n\ttestfmt(S_SIZEMAX, \"%tu\", (size_t)-1);\n#endif\n#endif\n\n\ttestfmt(\"-1\", \"%zd\", (ssize_t)-1);\n\ttestfmt(S_SIZEMAX, \"%zu\", (ssize_t)-1);\n\n\ttestfmt(\"-1\", \"%ld\", (long)-1);\n\ttestfmt(S_ULONGMAX, \"%lu\", ULONG_MAX);\n\n\ttestfmt(\"-1\", \"%lld\", (long long)-1);\n\ttestfmt(S_ULONGMAX, \"%lu\", ULLONG_MAX);\n\n\ttestfmt(\"-1\", \"%d\", -1);\n\ttestfmt(S_UINT32MAX, \"%lu\", UINT32_MAX);\n\n\ttestfmt(\"-1\", \"%hd\", -1);\n\ttestfmt(\"65535\", \"%hu\", USHRT_MAX);\n\n\ttestfmt(\"-1\", \"%hhd\", -1);\n\ttestfmt(\"255\", \"%hhu\", UCHAR_MAX);\n\n\tprintf(\"ok 1 - printbasic signed/unsigned\\n\");\n\n\t/*\n\t * Check that printing the largest negative number does not cause\n\t * overflow when it is negated.\n\t */\n\ttestfmt(S_INT32MIN, \"%d\", INT_MIN);\n\ttestfmt(S_INT64MIN, \"%jd\", INTMAX_MIN);\n\n\tprintf(\"ok 2 - printbasic INT_MIN\\n\");\n\n\n\treturn (0);\n}\n\nvoid\nsmash_stack(void)\n{\n\tstatic uint32_t junk = 0xdeadbeef;\n\tuint32_t buf[512];\n\tint i;\n\n\tfor (i = 0; i < sizeof(buf) / sizeof(buf[0]); i++)\n\t\tbuf[i] = junk;\n}\n\nvoid\n_testfmt(const char *result, int line, const char *argstr, const char *fmt,...)\n{\n#define\tBUF\t100\n\twchar_t ws[BUF], wfmt[BUF], wresult[BUF];\n\tchar s[BUF];\n\tva_list ap, ap2;\n\n\tva_start(ap, fmt);\n\tva_copy(ap2, ap);\n\tsmash_stack();\n\tvsnprintf(s, sizeof(s), fmt, ap);\n\tif (strcmp(result, s) != 0) {\n\t\tfprintf(stderr,\n\t\t    \"%s:%d: printf(\\\"%s\\\", %s) ==> [%s], expected [%s]\\n\",\n\t\t    __FILE__, line, fmt, argstr, s, result);\n\t\tabort();\n\t}\n\n\tsmash_stack();\n\tmbstowcs(ws, s, BUF - 1);\n\tmbstowcs(wfmt, fmt, BUF - 1);\n\tmbstowcs(wresult, result, BUF - 1);\n\tvswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2);\n\tif (wcscmp(wresult, ws) != 0) {\n\t\tfprintf(stderr,\n\t\t    \"%s:%d: wprintf(\\\"%ls\\\", %s) ==> [%ls], expected [%ls]\\n\",\n\t\t    __FILE__, line, wfmt, argstr, ws, wresult);\n\t\tabort();\n\t}\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-printf-data.inc",
    "content": "printf(CRYSTAX_TEST_NAME \"() - begin\\n\");\n\nDO_PRINTF_TEST(1,  \"abcdef\",              \"%S\",  L\"abcdef\");\nDO_PRINTF_TEST(2,  \"abcdef\",              \"%ls\", L\"abcdef\");\nDO_PRINTF_TEST(3,  \"z\",                   \"%c\",   'z');\nDO_PRINTF_TEST(4,  \"z\",                   \"%C\",  (wint_t)L'z');\nDO_PRINTF_TEST(5,  \"z\",                   \"%lc\", (wint_t)L'z');\nDO_PRINTF_TEST(6, \"0x1.edd2f1a9fbe77p+6\", \"%a\",  123.456);\nDO_PRINTF_TEST(7, \"0X1.EDD2F1A9FBE77P+6\", \"%A\",  123.456);\n\n/* There is no good support of long double type in Android, so enable\n * these test cases only for non-Android OS\n */\n#if !defined(__ANDROID__)\nDO_PRINTF_TEST(8, \"0xf.6e9e03fda00541dp+3\", \"%La\", 123.4567890123L);\nDO_PRINTF_TEST(9, \"0XF.6E9E03FDA00541DP+3\", \"%LA\", 123.4567890123L);\n#endif\n\nprintf(CRYSTAX_TEST_NAME \"() - ok\\n\");\n\n#undef CRYSTAX_TEST_NAME\n#undef DO_PRINTF_TEST\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-printf.c",
    "content": "#include <stdio.h>\n#include <string.h>\n#include <wctype.h>\n\n#define BUF_SIZE 1024\n\n\nint test_printf()\n{\n    int ret;\n    int len;\n\n#define CRYSTAX_TEST_NAME \"printf\"\n\n#define DO_PRINTF_TEST(n, check, fmt, ...) \\\n    ret = printf(fmt \"\\n\", ##__VA_ARGS__); \\\n    if (ret < 0) { \\\n        printf(\"FAIL! printf return %d\\n\", ret); \\\n        return 1; \\\n    } \\\n    len = strlen(check) + 1; \\\n    if (ret != len) { \\\n        printf(\"FAIL! printf return %d, but \\\"%s\\\" is %d-byte long\\n\", ret, check, len); \\\n        return 1; \\\n    } \\\n    printf(\"printf \" #n \" - ok\\n\")\n\n#include \"test-printf-data.inc\"\n\n    return 0;\n}\n\nint test_fprintf()\n{\n    int ret;\n    int len;\n\n#define CRYSTAX_TEST_NAME \"fprintf\"\n\n#define DO_PRINTF_TEST(n, check, fmt, ...) \\\n    ret = fprintf(stderr, fmt \"\\n\", ##__VA_ARGS__); \\\n    if (ret < 0) { \\\n        printf(\"FAIL! fprintf return %d\\n\", ret); \\\n        return 1; \\\n    } \\\n    len = strlen(check) + 1; \\\n    if (ret != len) { \\\n        printf(\"FAIL! fprintf return %d, but \\\"%s\\\" is %d-byte long\\n\", ret, check, len); \\\n        return 1; \\\n    } \\\n    printf(\"fprintf \" #n \" - ok\\n\")\n\n#include \"test-printf-data.inc\"\n\n    return 0;\n}\n\nint test_sprintf()\n{\n    char buf[BUF_SIZE];\n    int len, ret;\n\n#define CRYSTAX_TEST_NAME \"sprintf\"\n\n#define DO_PRINTF_TEST(n, check, fmt, ...) \\\n    memset(buf, 0, sizeof buf); \\\n    ret = sprintf(buf, fmt, ##__VA_ARGS__); \\\n    len = strlen(check); \\\n    if (len != ret) { \\\n        printf(\"FAIL! buf len is %d, but expected %d\\n\", ret, len); \\\n        return 1; \\\n    } \\\n    if (strcmp(buf, check) != 0) { \\\n        printf(\"FAIL! buf is \\\"%s\\\", but expected \\\"%s\\\"\\n\", buf, check); \\\n        return 1; \\\n    } \\\n    printf(\"sprintf \" #n \" - ok\\n\")\n\n#include \"test-printf-data.inc\"\n\n    return 0;\n}\n\nint test_snprintf()\n{\n    char buf[BUF_SIZE];\n    int len, ret;\n\n#define CRYSTAX_TEST_NAME \"snprintf\"\n\n#define DO_PRINTF_TEST(n, check, fmt, ...) \\\n    memset(buf, 0, sizeof buf); \\\n    ret = snprintf(buf, BUF_SIZE, fmt, ##__VA_ARGS__);   \\\n    len = strlen(check); \\\n    if (len != ret) { \\\n        printf(\"FAIL! buf len is %d, but expected %d\\n\", ret, len); \\\n        return 1; \\\n    } \\\n    if (strcmp(buf, check) != 0) { \\\n        printf(\"FAIL! buf is \\\"%s\\\", but expected \\\"%s\\\"\\n\", buf, check); \\\n        return 1; \\\n    } \\\n    printf(\"snprintf \" #n \" - ok\\n\")\n\n#include \"test-printf-data.inc\"\n\n    return 0;\n}\n\nint main()\n{\n    if (test_printf()   != 0) return 1;\n    if (test_fprintf()  != 0) return 1;\n    if (test_sprintf()  != 0) return 1;\n    if (test_snprintf() != 0) return 1;\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-printfloat.c",
    "content": "/*-\n * Copyright (c) 2002-2009 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for printf() floating point formats.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <err.h>\n#include <fenv.h>\n#include <float.h>\n#include <locale.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __CRYSTAX__\n#include <crystax/system.h>\n#endif\n\n#define\ttestfmt(result, fmt, ...)\t\\\n\t_testfmt((result), __LINE__, #__VA_ARGS__, fmt, __VA_ARGS__)\nvoid _testfmt(const char *, int, const char *, const char *, ...);\nvoid smash_stack(void);\n\nint\nmain(int argc, char *argv[])\n{\n    setvbuf(stdout, NULL, _IONBF, 0);\n\n\tprintf(\"1..11\\n\");\n\tassert(setlocale(LC_NUMERIC, \"C\"));\n\n#if __ANDROID__ && __x86_64__ && __clang__\n    /* Print of long double values broken on Android/x86_64 when being built by clang.\n     * See https://tracker.crystax.net/issues/830 for details.\n     */\n#define LONG_DOUBLE_PRINT_BROKEN 1\n#else\n#define LONG_DOUBLE_PRINT_BROKEN 0\n#endif\n\n\t/*\n\t * Basic tests of decimal output functionality.\n\t */\n\ttestfmt(\" 1.000000E+00\", \"%13E\", 1.0);\n\ttestfmt(\"     1.000000\", \"%13f\", 1.0);\n\ttestfmt(\"            1\", \"%13G\", 1.0);\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\" 1.000000E+00\", \"%13LE\", 1.0L);\n\ttestfmt(\"     1.000000\", \"%13Lf\", 1.0L);\n\ttestfmt(\"            1\", \"%13LG\", 1.0L);\n#endif /* !LONG_DOUBLE_PRINT_BROKEN */\n\n\ttestfmt(\"2.718282\", \"%.*f\", -2, 2.7182818);\n\n\ttestfmt(\"1.234568e+06\", \"%e\", 1234567.8);\n\ttestfmt(\"1234567.800000\", \"%f\", 1234567.8);\n\ttestfmt(\"1.23457E+06\", \"%G\", 1234567.8);\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\"1.234568e+06\", \"%Le\", 1234567.8L);\n\ttestfmt(\"1234567.800000\", \"%Lf\", 1234567.8L);\n\ttestfmt(\"1.23457E+06\", \"%LG\", 1234567.8L);\n#endif /* !LONG_DOUBLE_PRINT_BROKEN */\n\n#if (LDBL_MANT_DIG > DBL_MANT_DIG) && !defined(__i386__)\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\"123456789.864210\", \"%Lf\", 123456789.8642097531L);\n\ttestfmt(\"-1.23457E+08\", \"%LG\", -123456789.8642097531L);\n\ttestfmt(\"123456789.8642097531\", \"%.10Lf\", 123456789.8642097531L);\n#if !__gnu_linux__\n\ttestfmt(\" 3.141592653589793238e-4000\", \"%L27.18Le\",\n\t    3.14159265358979323846e-4000L);\n#endif\n#endif /* !LONG_DOUBLE_PRINT_BROKEN */\n#endif\n\n\tprintf(\"ok 1 - printfloat\\n\");\n\n\t/*\n\t * Infinities and NaNs\n\t */\n\ttestfmt(\"nan\", \"%e\", NAN);\n\ttestfmt(\"NAN\", \"%F\", NAN);\n\ttestfmt(\"nan\", \"%g\", NAN);\n\ttestfmt(\"NAN\", \"%LE\", (long double)NAN);\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"  nan\", \"%05e\", NAN);\n#endif\n\n\ttestfmt(\"INF\", \"%E\", HUGE_VAL);\n\ttestfmt(\"-inf\", \"%f\", -HUGE_VAL);\n\ttestfmt(\"+inf\", \"%+g\", HUGE_VAL);\n#if !__ANDROID__\n    /* Temporarily disable these tests since they are broken.\n     * See https://tracker.crystax.net/issues/818.\n     */\n\ttestfmt(\" inf\", \"%4.2Le\", HUGE_VALL);\n\ttestfmt(\"-inf\", \"%Lf\", -HUGE_VALL);\n#endif\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"  inf\", \"%05e\", HUGE_VAL);\n\ttestfmt(\" -inf\", \"%05e\", -HUGE_VAL);\n#endif\n\n\tprintf(\"ok 2 - printfloat\\n\");\n\n\t/*\n\t * Padding\n\t */\n\ttestfmt(\"0.000000e+00\", \"%e\", 0.0);\n\ttestfmt(\"0.000000\", \"%F\", (double)0.0);\n\ttestfmt(\"0\", \"%G\", 0.0);\n\ttestfmt(\"  0\", \"%3.0Lg\", 0.0L);\n\ttestfmt(\"    0\", \"%5.0f\", 0.001);\n\tprintf(\"ok 3 - printfloat\\n\");\n\n\t/*\n\t * Precision specifiers\n\t */\n\ttestfmt(\"1.0123e+00\", \"%.4e\", 1.0123456789);\n\ttestfmt(\"1.0123\", \"%.4f\", 1.0123456789);\n\ttestfmt(\"1.012\", \"%.4g\", 1.0123456789);\n\ttestfmt(\"1.2346e-02\", \"%.4e\", 0.0123456789);\n\ttestfmt(\"0.0123\", \"%.4f\", 0.0123456789);\n\ttestfmt(\"0.01235\", \"%.4g\", 0.0123456789);\n\tprintf(\"ok 4 - printfloat\\n\");\n\n\t/*\n\t * Thousands' separators and other locale fun\n\t */\n\ttestfmt(\"12345678.0625\", \"%'.04f\", 12345678.0625);\n\ttestfmt(\"0012345678.0625\", \"%'015.4F\", 12345678.0625);\n\n#if !__gnu_linux__\n\tassert(setlocale(LC_NUMERIC, \"hi_IN.ISCII-DEV\")); /* grouping == 2;3 */\n\ttestfmt(\"123,456,78.0625\", \"%'.4f\", 12345678.0625);\n\ttestfmt(\"00123,456,78.0625\", \"%'017.4F\", 12345678.0625);\n\ttestfmt(\" 90,00\", \"%'6.0f\", 9000.0);\n\ttestfmt(\"90,00.0\", \"%'.1f\", 9000.0);\n\n\tassert(setlocale(LC_NUMERIC, \"ru_RU.ISO8859-5\")); /* decimalpoint==, */\n\ttestfmt(\"3,1415\", \"%g\", 3.1415);\n\n\t/* thousands=. decimalpoint=, grouping=3;3 */\n\tassert(setlocale(LC_NUMERIC, \"el_GR.ISO8859-7\")); /* decimalpoint==, */\n\ttestfmt(\"1.234,00\", \"%'.2f\", 1234.00);\n\ttestfmt(\"123.456,789\", \"%'.3f\", 123456.789);\n#endif /* !__gnu_linux__ */\n\n\tassert(setlocale(LC_NUMERIC, \"C\"));\n\ttestfmt(\"12345678.062500\", \"%'f\", 12345678.0625);\n\ttestfmt(\"9000.000000\", \"%'f\", 9000.0);\n\n\tprintf(\"ok 5 - printfloat\\n\");\n\n\t/*\n\t * Signed conversions\n\t */\n\ttestfmt(\"+2.500000e-01\", \"%+e\", 0.25);\n\ttestfmt(\"+0.000000\", \"%+F\", 0.0);\n\ttestfmt(\"-1\", \"%+g\", -1.0);\n\n\ttestfmt(\"-1.000000e+00\", \"% e\", -1.0);\n\ttestfmt(\"+1.000000\", \"% +f\", 1.0);\n\ttestfmt(\" 1\", \"% g\", 1.0);\n\ttestfmt(\" 0\", \"% g\", 0.0);\n\n\tprintf(\"ok 6 - printfloat\\n\");\n\n\t/*\n\t * ``Alternate form''\n\t */\n\ttestfmt(\"1.250e+00\", \"%#.3e\", 1.25);\n\ttestfmt(\"123.000000\", \"%#f\", 123.0);\n\ttestfmt(\" 12345.\", \"%#7.5g\", 12345.0);\n\ttestfmt(\" 1.00000\", \"%#8g\", 1.0);\n\ttestfmt(\"0.0\", \"%#.2g\", 0.0);\n\tprintf(\"ok 7 - printfloat\\n\");\n\n\t/*\n\t * Padding and decimal point placement\n\t */\n\ttestfmt(\"03.2E+00\", \"%08.1E\", 3.25);\n\ttestfmt(\"003.25\", \"%06.2F\", 3.25);\n\ttestfmt(\"0003.25\", \"%07.4G\", 3.25);\n\n\ttestfmt(\"3.14159e-05\", \"%g\", 3.14159e-5);\n\ttestfmt(\"0.000314159\", \"%g\", 3.14159e-4);\n\ttestfmt(\"3.14159e+06\", \"%g\", 3.14159e6);\n\ttestfmt(\"314159\", \"%g\", 3.14159e5);\n\ttestfmt(\"314159.\", \"%#g\", 3.14159e5);\n\n\ttestfmt(\" 9.000000e+03\", \"%13e\", 9000.0);\n\ttestfmt(\" 9000.000000\", \"%12f\", 9000.0);\n\ttestfmt(\" 9000\", \"%5g\", 9000.0);\n\ttestfmt(\" 900000.\", \"%#8g\", 900000.0);\n\ttestfmt(\" 9e+06\", \"%6g\", 9000000.0);\n\ttestfmt(\" 9.000000e-04\", \"%13e\", 0.0009);\n\ttestfmt(\" 0.000900\", \"%9f\", 0.0009);\n\ttestfmt(\" 0.0009\", \"%7g\", 0.0009);\n\ttestfmt(\" 9e-05\", \"%6g\", 0.00009);\n\ttestfmt(\" 9.00000e-05\", \"%#12g\", 0.00009);\n\ttestfmt(\" 9.e-05\", \"%#7.1g\", 0.00009);\n\n\ttestfmt(\" 0.0\", \"%4.1f\", 0.0);\n\ttestfmt(\"90.0\", \"%4.1f\", 90.0);\n\ttestfmt(\" 100\", \"%4.0f\", 100.0);\n\ttestfmt(\"9.0e+01\", \"%4.1e\", 90.0);\n\ttestfmt(\"1e+02\", \"%4.0e\", 100.0);\n\n\tprintf(\"ok 8 - printfloat\\n\");\n\n#if __ANDROID__\n/* Temporarily disable some tests since they are broken.\n * See https://tracker.crystax.net/issues/819 for details.\n */\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#elif defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 15\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#else\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#endif\n\n#if !FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN\n\t/*\n\t * Decimal rounding\n\t */\n\tfesetround(FE_DOWNWARD);\n\ttestfmt(\"4.437\", \"%.3f\", 4.4375);\n\ttestfmt(\"-4.438\", \"%.3f\", -4.4375);\n\ttestfmt(\"4.437\", \"%.3Lf\", 4.4375L);\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"-4.438\", \"%.3Lf\", -4.4375L);\n#endif\n#endif /* !FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN\n\tfesetround(FE_UPWARD);\n\ttestfmt(\"4.438\", \"%.3f\", 4.4375);\n\ttestfmt(\"-4.437\", \"%.3f\", -4.4375);\n\ttestfmt(\"4.438\", \"%.3Lf\", 4.4375L);\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"-4.437\", \"%.3Lf\", -4.4375L);\n#endif\n#endif /* !FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN\n\tfesetround(FE_TOWARDZERO);\n\ttestfmt(\"4.437\", \"%.3f\", 4.4375);\n\ttestfmt(\"-4.437\", \"%.3f\", -4.4375);\n\ttestfmt(\"4.437\", \"%.3Lf\", 4.4375L);\n\ttestfmt(\"-4.437\", \"%.3Lf\", -4.4375L);\n#endif /* !FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN\n\tfesetround(FE_TONEAREST);\n\ttestfmt(\"4.438\", \"%.3f\", 4.4375);\n\ttestfmt(\"-4.438\", \"%.3f\", -4.4375);\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\"4.438\", \"%.3Lf\", 4.4375L);\n\ttestfmt(\"-4.438\", \"%.3Lf\", -4.4375L);\n#endif /* !LONG_DOUBLE_PRINT_BROKEN */\n#endif /* !FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN */\n\n\tprintf(\"ok 9 - printfloat\\n\");\n\n\t/*\n\t * Hexadecimal floating point (%a, %A) tests.  Some of these\n\t * are only valid if the implementation converts to hex digits\n\t * on nibble boundaries.\n\t */\n\ttestfmt(\"0x0p+0\", \"%a\", 0x0.0p0);\n\ttestfmt(\"0X0.P+0\", \"%#LA\", 0x0.0p0L);\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\"inf\", \"%La\", (long double)INFINITY);\n#endif\n\ttestfmt(\"+INF\", \"%+A\", INFINITY);\n#if !LONG_DOUBLE_PRINT_BROKEN\n\ttestfmt(\"nan\", \"%La\", (long double)NAN);\n#endif\n\ttestfmt(\"NAN\", \"%A\", NAN);\n\n\ttestfmt(\" 0x1.23p+0\", \"%10a\", 0x1.23p0);\n\ttestfmt(\" 0x1.23p-500\", \"%12a\", 0x1.23p-500);\n\ttestfmt(\" 0x1.2p+40\", \"%10.1a\", 0x1.23p40);\n\ttestfmt(\" 0X1.230000000000000000000000P-4\", \"%32.24A\", 0x1.23p-4);\n#if !__gnu_linux__\n\ttestfmt(\"0x1p-1074\", \"%a\", 0x1p-1074);\n\ttestfmt(\"0x1.2345p-1024\", \"%a\", 0x1.2345p-1024);\n#endif /* !__gnu_linux__ */\n\n#if !__APPLE__ && !__gnu_linux__\n#if (LDBL_MANT_DIG == 64) && !defined(__i386__)\n\ttestfmt(\"0x1.921fb54442d18468p+1\", \"%La\", 0x3.243f6a8885a308dp0L);\n\ttestfmt(\"0x1p-16445\", \"%La\", 0x1p-16445L);\n\ttestfmt(\"0x1.30ecap-16381\", \"%La\", 0x9.8765p-16384L);\n#elif (LDBL_MANT_DIG == 113)\n\ttestfmt(\"0x1.921fb54442d18469898cc51701b8p+1\", \"%La\",\n\t    0x3.243f6a8885a308d313198a2e037p0L);\n\ttestfmt(\"0x1p-16494\", \"%La\", 0x1p-16494L);\n\ttestfmt(\"0x1.2345p-16384\", \"%La\", 0x1.2345p-16384L);\n#else\n\ttestfmt(\"0x1.921fb54442d18p+1\", \"%La\", 0x3.243f6a8885a31p0L);\n\ttestfmt(\"0x1p-1074\", \"%La\", 0x1p-1074L);\n\ttestfmt(\"0x1.30ecap-1021\", \"%La\", 0x9.8765p-1024L);\n#endif\n#endif /* !__APPLE__ && !__gnu_linux__ */\n\n\tprintf(\"ok 10 - printfloat\\n\");\n\n#if __ANDROID__ && __arm__ && __SOFTFP__\n/* Temporarily disable this test for ARM soft float since it's broken.\n * See https://tracker.crystax.net/issues/820 for details.\n */\n#define FLOAT_HEX_ROUNDING_BROKEN 1\n#elif defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 15\n#define FLOAT_HEX_ROUNDING_BROKEN 1\n#else\n#define FLOAT_HEX_ROUNDING_BROKEN 0\n#endif\n\n#if __CRYSTAX__ && __i386__\n    /* This test fails on x86 emulator so temporarily disable it for such case.\n     * See https://tracker.crystax.net/issues/820 for details.\n     */\n    if (crystax_device_type() != CRYSTAX_DEVICE_TYPE_EMULATOR)\n    {\n#endif\n\n#if !FLOAT_HEX_ROUNDING_BROKEN\n\t/*\n\t * Hexadecimal rounding\n\t */\n\tfesetround(FE_TOWARDZERO);\n\ttestfmt(\"0X1.23456789ABCP+0\", \"%.11A\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.23456p+0\", \"%.5a\", -0x1.23456789abcdep0);\n\ttestfmt(\"0x1.23456p+0\", \"%.5a\", 0x1.23456789abcdep0);\n\ttestfmt(\"0x1.234567p+0\", \"%.6a\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.234566p+0\", \"%.6a\", -0x1.23456689abcdep0);\n\n\tfesetround(FE_DOWNWARD);\n\ttestfmt(\"0X1.23456789ABCP+0\", \"%.11A\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.23457p+0\", \"%.5a\", -0x1.23456789abcdep0);\n\ttestfmt(\"0x1.23456p+0\", \"%.5a\", 0x1.23456789abcdep0);\n\ttestfmt(\"0x1.234567p+0\", \"%.6a\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.234567p+0\", \"%.6a\", -0x1.23456689abcdep0);\n\n\tfesetround(FE_UPWARD);\n\ttestfmt(\"0X1.23456789ABDP+0\", \"%.11A\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.23456p+0\", \"%.5a\", -0x1.23456789abcdep0);\n\ttestfmt(\"0x1.23457p+0\", \"%.5a\", 0x1.23456789abcdep0);\n\ttestfmt(\"0x1.234568p+0\", \"%.6a\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.234566p+0\", \"%.6a\", -0x1.23456689abcdep0);\n#endif /* !FLOAT_HEX_ROUNDING_BROKEN */\n\n#if __CRYSTAX__ && __i386__\n    }\n#endif\n\n\tfesetround(FE_TONEAREST);\n\ttestfmt(\"0x1.23456789abcdep+4\", \"%a\", 0x1.23456789abcdep4);\n\ttestfmt(\"0X1.23456789ABDP+0\", \"%.11A\", 0x1.23456789abcdep0);\n\ttestfmt(\"-0x1.23456p+0\", \"%.5a\", -0x1.23456789abcdep0);\n\ttestfmt(\"0x1.23456p+0\", \"%.5a\", 0x1.23456789abcdep0);\n\ttestfmt(\"0x1.234568p+0\", \"%.6a\", 0x1.23456789abcdep0);\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"-0x1.234567p+0\", \"%.6a\", -0x1.23456689abcdep0);\n#endif\n#if !__APPLE__ && !__gnu_linux__\n\ttestfmt(\"0x1.00p-1029\", \"%.2a\", 0x1.fffp-1030);\n\ttestfmt(\"0x1.00p-1026\", \"%.2a\", 0xf.fffp-1030);\n#endif /* !__APPLE__ && !__gnu_linux__ */\n#if !__APPLE__ || defined(__MAC_10_8)\n\ttestfmt(\"0x1.83p+0\", \"%.2a\", 1.51);\n#endif\n\n\tprintf(\"ok 11 - printfloat\\n\");\n\n\treturn (0);\n}\n\nvoid\nsmash_stack(void)\n{\n\tstatic uint32_t junk = 0xdeadbeef;\n\tuint32_t buf[512];\n\tint i;\n\n\tfor (i = 0; i < sizeof(buf) / sizeof(buf[0]); i++)\n\t\tbuf[i] = junk;\n}\n\nvoid\n_testfmt(const char *result, int line, const char *argstr, const char *fmt,...)\n{\n#define\tBUF\t100\n\twchar_t ws[BUF], wfmt[BUF], wresult[BUF];\n\tchar s[BUF];\n\tva_list ap, ap2;\n\n\tva_start(ap, fmt);\n\tva_copy(ap2, ap);\n\tsmash_stack();\n\tvsnprintf(s, sizeof(s), fmt, ap);\n\tif (strcmp(result, s) != 0) {\n\t\tfprintf(stderr,\n\t\t    \"%s:%d: printf(\\\"%s\\\", %s) ==> [%s], expected [%s]\\n\",\n\t\t    __FILE__, line, fmt, argstr, s, result);\n\t\tabort();\n\t}\n\n\tsmash_stack();\n\tmbstowcs(ws, s, BUF - 1);\n\tmbstowcs(wfmt, fmt, BUF - 1);\n\tmbstowcs(wresult, result, BUF - 1);\n\tvswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2);\n\tif (wcscmp(wresult, ws) != 0) {\n\t\tfprintf(stderr,\n\t\t    \"%s:%d: wprintf(\\\"%ls\\\", %s) ==> [%ls], expected [%ls]\\n\",\n\t\t    __FILE__, line, wfmt, argstr, ws, wresult);\n\t\tabort();\n\t}\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stdio/jni/test-scanfloat.c",
    "content": "/*-\n * Copyright (C) 2003, 2005 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test for scanf() floating point formats.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <fenv.h>\n#include <float.h>\n#include <locale.h>\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __CRYSTAX__\n#include <crystax/system.h>\n#endif\n\n#ifdef assert\n#undef assert\n#endif\n#define assert(x) \\\n    if (!(x)) \\\n    { \\\n        fprintf(stderr, \"%s:%d: ERROR: Assertion failed: \\\"%s\\\"\\n\", __FILE__, __LINE__, #x); \\\n        abort(); \\\n    }\n\n#define\teq(type, a, b)\t_eq(type##_EPSILON, (a), (b))\nstatic int _eq(long double epsilon, long double a, long double b);\n\nint\nmain(int argc, char *argv[])\n{\n\tchar buf[128];\n\tlong double ld = 0.0;\n\tdouble d = 0.0;\n\tfloat f = 0.0;\n\tchar *endp;\n\n    int nan_cmp_broken = 0;\n\n#if __ANDROID__\n#if __mips__\n/* NaN comparing is broken on mips platform.\n * See https://tracker.crystax.net/issues/821 for details.\n */\n    nan_cmp_broken = 1;\n#elif (__arm__ || __x86_64__) && __clang__\n/* NaN comparing is broken on arm/x86_64 when app built with clang toolchain.\n * See https://tracker.crystax.net/issues/826 for details.\n */\n    nan_cmp_broken = 1;\n#endif\n#endif\n\n\tprintf(\"1..4\\n\");\n\n\tbuf[0] = '\\0';\n\tassert(setlocale(LC_NUMERIC, \"\"));\n\n\t/*\n\t * Various tests for normalized numbers\n\t */\n\tsscanf(\"3.141592\", \"%e\", &f);\n\tassert(eq(FLT, f, 3.141592));\n\n\tsscanf(\"3.141592653589793\", \"%lf\", &d);\n\tassert(eq(DBL, d, 3.141592653589793));\n\n\tsscanf(\"1.234568e+06\", \"%E\", &f);\n\tassert(eq(FLT, f, 1.234568e+06));\n\n\tsscanf(\"-1.234568e6\", \"%lF\", &d);\n\tassert(eq(DBL, d, -1.234568e6));\n\n#if !__ANDROID__ || !__x86_64__ || !__clang__\n    /* Temporary disable this case for Android clang/x86_64 since it broken.\n     * See https://tracker.crystax.net/issues/827 for details.\n     */\n\tsscanf(\"+1.234568e-52\", \"%LG\", &ld);\n\tassert(eq(LDBL, ld, 1.234568e-52L));\n#endif\n\n\tsscanf(\"0.1\", \"%la\", &d);\n\tassert(eq(DBL, d, 0.1));\n\n\tsscanf(\"00.2\", \"%lA\", &d);\n\tassert(eq(DBL, d, 0.2));\n\n\tsscanf(\"123456\", \"%5le%s\", &d, buf);\n\tassert(eq(DBL, d, 12345.));\n\tassert(strcmp(buf, \"6\") == 0);\n\n#if !__APPLE__ || defined(__MAC_10_8)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wformat\"\n\n\tsscanf(\"1.0Q\", \"%*5le%s\", buf);\n\tassert(strcmp(buf, \"Q\") == 0);\n\n#pragma GCC diagnostic pop\n#endif\n\n\tsscanf(\"-1.23e\", \"%e%s\", &f, buf);\n\tassert(eq(FLT, f, -1.23));\n#if !__gnu_linux__\n\tassert(strcmp(buf, \"e\") == 0);\n#endif /* !__gnu_linux__ */\n\n\tsscanf(\"1.25e+\", \"%le%s\", &d, buf);\n\tassert(eq(DBL, d, 1.25));\n#if !__gnu_linux__\n\tassert(strcmp(buf, \"e+\") == 0);\n#endif /* !__gnu_linux__ */\n\n\tsscanf(\"1.23E4E5\", \"%le%s\", &d, buf);\n\tassert(eq(DBL, d, 1.23e4));\n\tassert(strcmp(buf, \"E5\") == 0);\n\n\tsscanf(\"12e6\", \"%le\", &d);\n\tassert(eq(DBL, d, 12e6));\n\n\tsscanf(\"1.a\", \"%le%s\", &d, buf);\n\tassert(eq(DBL, d, 1.0));\n\tassert(strcmp(buf, \"a\") == 0);\n\n\tsscanf(\".0p4\", \"%le%s\", &d, buf);\n\tassert(eq(DBL, d, 0.0));\n\tassert(strcmp(buf, \"p4\") == 0);\n\n\td = 0.25;\n\tassert(sscanf(\".\", \"%le\", &d) == 0);\n\tassert(d == 0.25);\n\n\tsscanf(\"0x08\", \"%le\", &d);\n\tassert(d == 0x8p0);\n\n\tsscanf(\"0x90a.bcdefP+09a\", \"%le%s\", &d, buf);\n\tassert(d == 0x90a.bcdefp+09);\n\tassert(strcmp(buf, \"a\") == 0);\n\n#if (LDBL_MANT_DIG > DBL_MANT_DIG) && !defined(__i386__)\n#if !__ANDROID__ || !__x86_64__ || !__clang__\n    /* Temporary disable this case for Android clang/x86_64 since it broken.\n     * See https://tracker.crystax.net/issues/828 for details.\n     */\n\tsscanf(\"3.14159265358979323846\", \"%Lg\", &ld);\n\tassert(eq(LDBL, ld, 3.14159265358979323846L));\n#endif /* !__ANDROID__ || !__x86_64__ || !__clang__ */\n\n#if !__ANDROID__ || !__x86_64__ || !__clang__\n    /* Temporary disable this case for Android clang/x86_64 since it broken.\n     * See https://tracker.crystax.net/issues/829 for details.\n     */\n\tsscanf(\"  0X.0123456789abcdefffp-3g\", \"%Le%s\", &ld, buf);\n\tassert(ld == 0x0.0123456789abcdefffp-3L);\n\tassert(strcmp(buf, \"g\") == 0);\n#endif /* !__ANDROID__ || !__x86_64__ || !__clang__ */\n#endif\n\n#if !__gnu_linux__\n\tsscanf(\"0xg\", \"%le%s\", &d, buf);\n\tassert(d == 0.0);\n\tassert(strcmp(buf, \"xg\") == 0);\n\n\tassert(setlocale(LC_NUMERIC, \"ru_RU.ISO8859-5\")); /* decimalpoint==, */\n\n\tsscanf(\"1.23\", \"%le%s\", &d, buf);\n\tassert(d == 1.0);\n\tassert(strcmp(buf, \".23\") == 0);\n\n\tsscanf(\"1,23\", \"%le\", &d);\n\tassert(d == 1.23);\n\n\tassert(setlocale(LC_NUMERIC, \"\"));\n#endif /* !__gnu_linux__ */\n\n\tprintf(\"ok 1 - scanfloat\\n\");\n\n\t/*\n\t * Infinity and NaN tests\n\t */\n\tsscanf(\"-Inf\", \"%le\", &d);\n\tassert(d < 0.0 && isinf(d));\n\n\tsscanf(\"iNfInItY and beyond\", \"%le%s\", &d, buf);\n\tassert(d > 0.0 && isinf(d));\n\tassert(strcmp(buf, \" and beyond\"));\n\n\tsscanf(\"NaN\", \"%le\", &d);\n\tassert(isnan(d));\n\n\tsscanf(\"NAN(123Y\", \"%le%s\", &d, buf);\n\tassert(isnan(d));\n\tassert(strcmp(buf, \"(123Y\") == 0);\n\n#if !__gnu_linux__\n\tsscanf(\"nan(f00f)plugh\", \"%le%s\", &d, buf);\n\tassert(isnan(d));\n\tassert(strcmp(buf, \"plugh\") == 0);\n#endif /* !__gnu_linux__ */\n\n\tsscanf(\"-nan\", \"%le\", &d);\n\tassert(isnan(d));\n\n\t/* Only quiet NaNs should be returned. */\n\tsscanf(\"NaN\", \"%e\", &f);\n\tsscanf(\"nan\", \"%le\", &d);\n\tsscanf(\"nan\", \"%Le\", &ld);\n\tfeclearexcept(FE_ALL_EXCEPT);\n    if (!nan_cmp_broken)\n    {\n        assert(f != f);\n        assert(d != d);\n        assert(ld != ld);\n    }\n\tassert(fetestexcept(FE_INVALID) == 0);\n\tsscanf(\"nan(1234)\", \"%e\", &f);\n\tsscanf(\"nan(1234)\", \"%le\", &d);\n\tsscanf(\"nan(1234)\", \"%Le\", &ld);\n\tfeclearexcept(FE_ALL_EXCEPT);\n    if (!nan_cmp_broken)\n    {\n        assert(f != f);\n        assert(d != d);\n        assert(ld != ld);\n    }\n\t/* POSIX says we should only generate quiet NaNs. */\n\tassert(fetestexcept(FE_INVALID) == 0);\n\n\tprintf(\"ok 2 - scanfloat\\n\");\n\n\t/*\n\t * Rounding tests\n\t */\n\n#if __ANDROID__\n/* Temporarily disable some tests since they are broken.\n * See https://tracker.crystax.net/issues/819 for details.\n */\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#elif defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 15\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 1\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#else\n#define FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN 0\n#define FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN 0\n#endif\n\n#if !FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN\n\tfesetround(FE_DOWNWARD);\n\n\tsscanf(\"1.999999999999999999999999999999999\", \"%le\", &d);\n\tassert(d < 2.0);\n\tsscanf(\"0x1.ffffffffffffffp0\", \"%le\", &d);\n\tassert(d < 2.0);\n\tsscanf(\"1.999999999999999999999999999999999\", \"%Le\", &ld);\n\tassert(ld < 2.0);\n\n\tsscanf(\"1.0571892669084007\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc59p0);\n#if !__gnu_linux__\n\tsscanf(\"-1.0571892669084007\", \"%le\", &d);\n\tassert(d == -0x1.0ea3f4af0dc5ap0);\n#endif /* !__gnu_linux__ */\n\tsscanf(\"1.0571892669084010\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc5ap0);\n\n\tsscanf(\"0x1.23p-5000\", \"%le\", &d);\n\tassert(d == 0.0);\n\n\tsscanf(\"0x1.2345678p-1050\", \"%le\", &d);\n\tassert(d == 0x1.234567p-1050);\n#endif /* !FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN\n\tfesetround(FE_UPWARD);\n\n\tsscanf(\"1.0571892669084007\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc5ap0);\n\tsscanf(\"-1.0571892669084007\", \"%le\", &d);\n#if !__gnu_linux__\n\tassert(d == -0x1.0ea3f4af0dc59p0);\n\tsscanf(\"1.0571892669084010\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc5bp0);\n#endif /* !__gnu_linux__ */\n\n\tsscanf(\"0x1.23p-5000\", \"%le\", &d);\n\tassert(d == 0x1p-1074);\n\n\tsscanf(\"0x1.2345678p-1050\", \"%le\", &d);\n\tassert(d == 0x1.234568p-1050);\n#endif /* !FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN\n\tfesetround(FE_TOWARDZERO);\n\n\tsscanf(\"1.0571892669084007\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc59p0);\n\tsscanf(\"-1.0571892669084007\", \"%le\", &d);\n\tassert(d == -0x1.0ea3f4af0dc59p0);\n\tsscanf(\"1.0571892669084010\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc5ap0);\n\n\tsscanf(\"0x1.23p-5000\", \"%le\", &d);\n\tassert(d == 0.0);\n\n\tsscanf(\"0x1.2345678p-1050\", \"%le\", &d);\n\tassert(d == 0x1.234567p-1050);\n#endif /* FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN */\n\n#if !FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN\n\tfesetround(FE_TONEAREST);\n\n\t/* 1.0571892669084007 is slightly closer to 0x1.0ea3f4af0dc59p0 */\n\tsscanf(\"1.0571892669084007\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc59p0);\n\tsscanf(\"-1.0571892669084007\", \"%le\", &d);\n\tassert(d == -0x1.0ea3f4af0dc59p0);\n\tsscanf(\"1.0571892669084010\", \"%le\", &d);\n\tassert(d == 0x1.0ea3f4af0dc5bp0);\n\n\t/* strtod() should round small numbers to 0. */\n\tsscanf(\"0x1.23p-5000\", \"%le\", &d);\n\tassert(d == 0.0);\n\n\t/* Extra digits in a denormal shouldn't break anything. */\n\tsscanf(\"0x1.2345678p-1050\", \"%le\", &d);\n\tassert(d == 0x1.234568p-1050);\n#endif /* !FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN */\n\n\tprintf(\"ok 3 - scanfloat\\n\");\n\n\t/*\n\t * Tests specific to strtod().\n\t */\n\n\tassert(strtod(\"0xy\", &endp) == 0);\n\tassert(strcmp(\"xy\", endp) == 0);\n\n\t/* This used to cause an infinite loop and round the wrong way. */\n#if !FLOAT_DECIMAL_ROUNDING_DOWNWARD_BROKEN\n\tfesetround(FE_DOWNWARD);\n\tassert(strtof(\"3.5e38\", &endp) == FLT_MAX);\n\tassert(strtod(\"2e308\", &endp) == DBL_MAX);\n#endif\n#if !FLOAT_DECIMAL_ROUNDING_UPWARD_BROKEN\n\tfesetround(FE_UPWARD);\n\tassert(strtof(\"3.5e38\", &endp) == INFINITY);\n\tassert(strtod(\"2e308\", &endp) == INFINITY);\n#endif\n#if !FLOAT_DECIMAL_ROUNDING_TOWARDZERO_BROKEN\n\tfesetround(FE_TOWARDZERO);\n\tassert(strtof(\"3.5e38\", &endp) == FLT_MAX);\n\tassert(strtod(\"2e308\", &endp) == DBL_MAX);\n#endif\n#if !FLOAT_DECIMAL_ROUNDING_TONEAREST_BROKEN\n\tfesetround(FE_TONEAREST);\n\tassert(strtof(\"3.5e38\", &endp) == INFINITY);\n\tassert(strtod(\"2e308\", &endp) == INFINITY);\n#endif\n\n\tprintf(\"ok 4 - scanfloat\\n\");\n\n\treturn (0);\n}\n\nstatic int\n_eq(long double epsilon, long double a, long double b)\n{\n\tlong double delta;\n\n\tdelta = fabsl(a - b);\n\treturn (delta <= epsilon);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/common.mk",
    "content": "SRCFILES := test-stream-float-output.cpp\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-stream-float-output\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/crystax-test-stream-float-output/jni/test-stream-float-output.cpp",
    "content": "#include <iostream>\n#include <sstream>\n\nint main()\n{\n    std::stringstream ss;\n    ss << 3.14;\n    std::cout << ss.str() << \"\\n\";\n    std::cout << 3.15 << \"\\n\";\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE    := test-strtod\nLOCAL_SRC_FILES := $(SRCFILES)\nLOCAL_CFLAGS    := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/crystax-test-strtod/jni/main.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n\nint main()\n{\n    double d;\n    double expected = 4660.0;\n\n    d = strtod(\"0x1234\", NULL);\n    if (d != expected)\n    {\n        fprintf(stderr, \"strtod() failed: %f != %f\\n\", d, expected);\n        return 1;\n    }\n\n    printf(\"strtod() OK: %f\\n\", d);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/common.mk",
    "content": "CTESTS :=      \\\n\tbtowc      \\\n\tiswctype   \\\n\tmblen      \\\n\tmbrlen     \\\n\tmbrtowc    \\\n\tmbsnrtowcs \\\n\tmbsrtowcs  \\\n\tmbstowcs   \\\n\tmbtowc     \\\n\ttowctrans  \\\n\twcrtomb    \\\n\twcscasecmp \\\n\twcslen     \\\n\twcsnlen    \\\n\twcsnrtombs \\\n\twcsrtombs  \\\n\twcstombs   \\\n\twctomb     \\\n\nCXXTESTS :=    \\\n\twstring    \\\n\twcslen-cpp \\\n\nCFLAGS := -Wall -Wextra -Werror\nCFLAGS += -Wno-unused-parameter\nCFLAGS += -Wno-sign-compare\nCFLAGS += -Wno-unused-variable\nCFLAGS += -UNDEBUG\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))\n\ninclude ../common.mk\n\nCFLAGS += -I../jni\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=test-$(1).$(2) CFLAGS=\"$(CFLAGS)\" TARGETNAME=test-$(2)-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=test-$(1).$(2)\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t),c))\\\n)\n$(foreach __t,$(CXXTESTS),\\\n    $(eval $(call add-test-rule,$(__t),cpp))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-case\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-wchar-$(2)-$(1)\nLOCAL_SRC_FILES  := test-$(1).$(2)\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-case,$(__t),c))\\\n)\n$(foreach __t,$(CXXTESTS),\\\n    $(eval $(call add-test-case,$(__t),cpp))\\\n)\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-btowc.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for btowc() and wctob() as specified by IEEE Std. 1003.1-2001\n * and ISO/IEC 9899:1999.\n *\n * The function is tested in the \"C\" and \"ja_JP.eucJP\" locales.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\n#if __gnu_linux__\n#define CHAR_LIM SCHAR_MAX\n#else\n#define CHAR_LIM UCHAR_MAX\n#endif\n\nint\nmain(int argc, char *argv[])\n{\n\tint i;\n\n\tprintf(\"1..2\\n\");\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\tassert(btowc(EOF) == WEOF);\n\tassert(wctob(WEOF) == EOF);\n\tfor (i = 0; i < CHAR_LIM; i++)\n\t\tassert(btowc(i) == (wchar_t)i && i == (int)wctob(i));\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\tassert(btowc('A') == L'A' && wctob(L'A') == 'A');\n\tassert(btowc(0xa3) == WEOF && wctob(0xa3c1) == EOF);\n\n\tprintf(\"ok 1 - btowc()\\n\");\n\tprintf(\"ok 2 - wctob()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-iswctype.c",
    "content": "/*-\n * Copyright (c) 2003 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wctype() and iswctype() as specified by\n * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.\n *\n * The functions are tested in the \"C\" and \"ja_JP.eucJP\" locales.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <locale.h>\n#include <stdio.h>\n#include <string.h>\n#include <wchar.h>\n#include <wctype.h>\n\nint\nmain(int argc, char *argv[])\n{\n\twctype_t t;\n\tint i, j;\n\tstruct {\n\t\tconst char *name;\n\t\tint (*func)(wint_t);\n\t} cls[] = {\n\t\t{ \"alnum\", iswalnum },\n\t\t{ \"alpha\", iswalpha },\n\t\t{ \"blank\", iswblank },\n\t\t{ \"cntrl\", iswcntrl },\n\t\t{ \"digit\", iswdigit },\n\t\t{ \"graph\", iswgraph },\n\t\t{ \"lower\", iswlower },\n\t\t{ \"print\", iswprint },\n\t\t{ \"punct\", iswpunct },\n\t\t{ \"space\", iswspace },\n\t\t{ \"upper\", iswupper },\n\t\t{ \"xdigit\", iswxdigit }\n\t};\n\n\tprintf(\"1..2\\n\");\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\tfor (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {\n\t\tt = wctype(cls[i].name);\n\t\tassert(t != 0);\n\t\tfor (j = 0; j < 256; j++)\n\t\t\tassert((cls[i].func(j) != 0) == iswctype(j, t));\n\t}\n\tt = wctype(\"elephant\");\n\tassert(t == 0);\n\tfor (i = 0; i < 256; i++)\n\t\tassert(iswctype(i, t) == 0);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tfor (i = 0; i < sizeof(cls) / sizeof(*cls); i++) {\n\t\tt = wctype(cls[i].name);\n\t\tassert(t != 0);\n\t\tfor (j = 0; j < 65536; j++)\n\t\t\tassert((cls[i].func(j) != 0) == iswctype(j, t));\n\t}\n\tt = wctype(\"elephant\");\n\tassert(t == 0);\n\tfor (i = 0; i < 65536; i++)\n\t\tassert(iswctype(i, t) == 0);\n\n\tprintf(\"ok 1 - iswctype()\\n\");\n\tprintf(\"ok 2 - wctype()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mblen.c",
    "content": "/*-\n * Copyright (c) 2002-2004 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mblen(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1990.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tsize_t len;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/* No shift states in C locale. */\n\tassert(mblen(NULL, 0) == 0);\n\n\t/* Null wide character. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = '\\0';\n\tassert(mblen(buf, 1) == 0);\n\n\t/* Latin letter A. */\n\tbuf[0] = 'A';\n\tassert(mblen(buf, 1) == 1);\n\n\t/* Incomplete character sequence. */\n\tbuf[0] = '\\0';\n#if !__gnu_linux__\n\tassert(mblen(buf, 0) == -1);\n#endif\n\tassert(mblen(NULL, 0) == 0);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\t/* No shift states in EUC. */\n\tassert(mblen(NULL, 0) == 0);\n\n\t/* Null wide character. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = '\\0';\n\tassert(mblen(buf, 1) == 0);\n\n\t/* Latin letter A. */\n\tbuf[0] = 'A';\n\tassert(mblen(buf, 1) == 1);\n\n\t/* Incomplete character sequence. */\n\tbuf[0] = '\\0';\n#if !__gnu_linux__\n\tassert(mblen(buf, 0) == -1);\n#endif\n\tassert(mblen(NULL, 0) == 0);\n\n\t/* Incomplete character sequence (truncated double-byte). */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0xa3;\n\tbuf[1] = 0x00;\n\tassert(mblen(buf, 1) == -1);\n\tassert(mblen(NULL, 0) == 0);\n\n\t/* Same as above, but complete. */\n\tbuf[1] = 0xc1;\n\tassert(mblen(buf, 2) == 2);\n\n\tprintf(\"ok 1 - mblen()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbrlen.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbrlen(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tmbstate_t s;\n\tsize_t len;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\t\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/* Null wide character, internal state. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0;\n\tassert(mbrlen(buf, 1, NULL) == 0);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 1, &s) == 0);\n\n\t/* Latin letter A, internal state. */\n\tassert(mbrlen(NULL, 0, NULL) == 0);\n\tbuf[0] = 'A';\n\tassert(mbrlen(buf, 1, NULL) == 1);\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 1, &s) == 1);\n\n\t/* Incomplete character sequence. */\n\tmemset(&s, 0, sizeof(s));\n#if !__gnu_linux__\n\tassert(mbrlen(buf, 0, &s) == (size_t)-2);\n#endif\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\t/* Null wide character, internal state. */\n\tassert(mbrlen(NULL, 0, NULL) == 0);\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0;\n\tassert(mbrlen(buf, 1, NULL) == 0);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 1, &s) == 0);\n\n\t/* Latin letter A, internal state. */\n\tassert(mbrlen(NULL, 0, NULL) == 0);\n\tbuf[0] = 'A';\n\tassert(mbrlen(buf, 1, NULL) == 1);\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 1, &s) == 1);\n\n\t/* Incomplete character sequence (zero length). */\n\tmemset(&s, 0, sizeof(s));\n#if !__gnu_linux__\n\tassert(mbrlen(buf, 0, &s) == (size_t)-2);\n#endif\n\n\t/* Incomplete character sequence (truncated double-byte). */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0xa3;\n\tbuf[1] = 0x00;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 1, &s) == (size_t)-2);\n\n\t/* Same as above, but complete. */\n\tbuf[1] = 0xc1;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrlen(buf, 2, &s) == 2);\n\n\tprintf(\"ok 1 - mbrlen()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbrtowc.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbrtowc(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tmbstate_t s;\n\tsize_t len;\n\twchar_t wc;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/* Null wide character, internal state. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0;\n\tassert(mbrtowc(&wc, buf, 1, NULL) == 0);\n\tassert(wc == 0);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrtowc(&wc, buf, 1, &s) == 0);\n\tassert(wc == 0);\n\n\t/* Latin letter A, internal state. */\n\tassert(mbrtowc(NULL, 0, 0, NULL) == 0);\n\tbuf[0] = 'A';\n\tassert(mbrtowc(&wc, buf, 1, NULL) == 1);\n\tassert(wc == L'A');\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrtowc(&wc, buf, 1, &s) == 1);\n\tassert(wc == L'A');\n\n\t/* Incomplete character sequence. */\n\twc = L'z';\n\tmemset(&s, 0, sizeof(s));\n#if !__gnu_linux__\n\tassert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);\n#endif\n\tassert(wc == L'z');\n\n\t/* Check that mbrtowc() doesn't access the buffer when n == 0. */\n\twc = L'z';\n\tmemset(&s, 0, sizeof(s));\n\tbuf[0] = '\\0';\n#if !__gnu_linux__\n\tassert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);\n#endif\n\tassert(wc == L'z');\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\t/* Null wide character, internal state. */\n\tassert(mbrtowc(NULL, 0, 0, NULL) == 0);\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0;\n\tassert(mbrtowc(&wc, buf, 1, NULL) == 0);\n\tassert(wc == 0);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrtowc(&wc, buf, 1, &s) == 0);\n\tassert(wc == 0);\n\n\t/* Latin letter A, internal state. */\n\tassert(mbrtowc(NULL, 0, 0, NULL) == 0);\n\tbuf[0] = 'A';\n\tassert(mbrtowc(&wc, buf, 1, NULL) == 1);\n\tassert(wc == L'A');\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbrtowc(&wc, buf, 1, &s) == 1);\n\tassert(wc == L'A');\n\n\t/* Incomplete character sequence (zero length). */\n\twc = L'z';\n\tmemset(&s, 0, sizeof(s));\n#if !__gnu_linux__\n\tassert(mbrtowc(&wc, buf, 0, &s) == (size_t)-2);\n#endif\n\tassert(wc == L'z');\n\n\t/* Incomplete character sequence (truncated double-byte). */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0xa3;\n\tbuf[1] = 0x00;\n\tmemset(&s, 0, sizeof(s));\n\twc = 0;\n\tassert(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);\n\n\t/* Same as above, but complete. */\n\tbuf[1] = 0xc1;\n\tmemset(&s, 0, sizeof(s));\n\twc = 0;\n\tassert(mbrtowc(&wc, buf, 2, &s) == 2);\n#if !__gnu_linux__\n\tassert(wc == 0xa3c1);\n#endif\n\n\t/* Test restarting behaviour. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0xa3;\n\tmemset(&s, 0, sizeof(s));\n\twc = 0;\n\tassert(mbrtowc(&wc, buf, 1, &s) == (size_t)-2);\n\tassert(wc == 0);\n\tbuf[0] = 0xc1;\n\tassert(mbrtowc(&wc, buf, 1, &s) == 1);\n#if !__gnu_linux__\n\tassert(wc == 0xa3c1);\n#endif\n\n\tprintf(\"ok 1 - mbrtowc()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbsnrtowcs.c",
    "content": "/*-\n * Copyright (c) 2002-2004 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbsnrtowcs().\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tchar srcbuf[128];\n\twchar_t dstbuf[128];\n\tchar *src;\n\tmbstate_t s;\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 5);\n\tassert(wcscmp(dstbuf, L\"hello\") == 0);\n\tassert(dstbuf[6] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Simple null terminated string, stopping early. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 4, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 4);\n\tassert(wmemcmp(dstbuf, L\"hell\", 4) == 0);\n\tassert(dstbuf[5] == 0xcccc);\n\tassert(src == srcbuf + 4);\n\n\t/* Not enough space in destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 6, 4, &s) == 4);\n\tassert(wmemcmp(dstbuf, L\"hell\", 4) == 0);\n\tassert(dstbuf[5] == 0xcccc);\n\tassert(src == srcbuf + 4);\n\n\t/* Null terminated string, internal dest. buffer */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsnrtowcs(NULL, (const char **)&src, 6, 0, &s) == 5);\n\n\t/* Null terminated string, internal dest. buffer, stopping early */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsnrtowcs(NULL, (const char **)&src, 4, 0, &s) == 4);\n\n\t/* Null terminated string, internal state. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), NULL) == 5);\n\tassert(wcscmp(dstbuf, L\"hello\") == 0);\n\tassert(dstbuf[6] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Null terminated string, internal state, internal dest. buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tassert(mbsnrtowcs(NULL, (const char **)&src, 6, 0, NULL) == 5);\n\n\t/* Empty source buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tsrcbuf[0] = '\\0';\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 1, 1, &s) == 0);\n\tassert(dstbuf[0] == 0);\n\tassert(dstbuf[1] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Zero length destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 1, 0, &s) == 0);\n\tassert(dstbuf[0] == 0xcccc);\n\tassert(src == srcbuf);\n\n\t/* Zero length source buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 0, 1, &s) == 0);\n\tassert(dstbuf[0] == 0xcccc);\n\tassert(src == srcbuf);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"\\xA3\\xC1 B \\xA3\\xC3\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 8, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 5);\n#if !__gnu_linux__\n\tassert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&\n\t    dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);\n#endif\n\tassert(src == NULL);\n\n\t/* Partial character. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"\\xA3\\xC1 B \\xA3\\xC3\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 6, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 4);\n\tassert(src == srcbuf + 6);\n\tassert(!mbsinit(&s));\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 1);\n\tassert(src == srcbuf + 7);\n\tassert(mbsnrtowcs(dstbuf, (const char **)&src, 1, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 0);\n\tassert(src == NULL);\n\n\tprintf(\"ok 1 - mbsnrtowcs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbsrtowcs.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbsrtowcs(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tchar srcbuf[128];\n\twchar_t dstbuf[128];\n\tchar *src;\n\tmbstate_t s;\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 5);\n\tassert(wcscmp(dstbuf, L\"hello\") == 0);\n\tassert(dstbuf[6] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Not enough space in destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, 4, &s) == 4);\n\tassert(wmemcmp(dstbuf, L\"hell\", 4) == 0);\n\tassert(dstbuf[5] == 0xcccc);\n\tassert(src == srcbuf + 4);\n\n\t/* Null terminated string, internal dest. buffer */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(mbsrtowcs(NULL, (const char **)&src, 0, &s) == 5);\n\n\t/* Null terminated string, internal state. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tsrc = srcbuf;\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), NULL) == 5);\n\tassert(wcscmp(dstbuf, L\"hello\") == 0);\n\tassert(dstbuf[6] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Null terminated string, internal state, internal dest. buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tassert(mbsrtowcs(NULL, (const char **)&src, 0, NULL) == 5);\n\n\t/* Empty source buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tsrcbuf[0] = '\\0';\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, 1, &s) == 0);\n\tassert(dstbuf[0] == 0);\n\tassert(dstbuf[1] == 0xcccc);\n\tassert(src == NULL);\n\n\t/* Zero length destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, 0, &s) == 0);\n\tassert(dstbuf[0] == 0xcccc);\n\tassert(src == srcbuf);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"\\xA3\\xC1 B \\xA3\\xC3\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbsrtowcs(dstbuf, (const char **)&src, sizeof(dstbuf) /\n\t    sizeof(*dstbuf), &s) == 5);\n#if !__gnu_linux__\n\tassert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&\n\t    dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);\n#endif\n\tassert(src == NULL);\n\n\tprintf(\"ok 1 - mbsrtowcs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbstowcs.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbstowcs(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tchar srcbuf[128];\n\twchar_t dstbuf[128];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);\n\tassert(wcscmp(dstbuf, L\"hello\") == 0);\n\tassert(dstbuf[6] == 0xcccc);\n\n\t/* Not enough space in destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbstowcs(dstbuf, srcbuf, 4) == 4);\n\tassert(wmemcmp(dstbuf, L\"hell\", 4) == 0);\n\tassert(dstbuf[5] == 0xcccc);\n\n\t/* Null terminated string, internal dest. buffer (XSI extension) */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\tassert(mbstowcs(NULL, srcbuf, 0) == 5);\n\n\t/* Empty source buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tsrcbuf[0] = '\\0';\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbstowcs(dstbuf, srcbuf, 1) == 0);\n\tassert(dstbuf[0] == 0);\n\tassert(dstbuf[1] == 0xcccc);\n\n\t/* Zero length destination buffer. */\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"hello\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbstowcs(dstbuf, srcbuf, 0) == 0);\n\tassert(dstbuf[0] == 0xcccc);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\tmemset(srcbuf, 0xcc, sizeof(srcbuf));\n\tstrcpy(srcbuf, \"\\xA3\\xC1 B \\xA3\\xC3\");\n\twmemset(dstbuf, 0xcccc, sizeof(dstbuf) / sizeof(*dstbuf));\n\tassert(mbstowcs(dstbuf, srcbuf, sizeof(dstbuf) / sizeof(*dstbuf)) == 5);\n#if !__gnu_linux__\n\tassert(dstbuf[0] == 0xA3C1 && dstbuf[1] == 0x20 && dstbuf[2] == 0x42 &&\n\t    dstbuf[3] == 0x20 && dstbuf[4] == 0xA3C3 && dstbuf[5] == 0);\n#endif\n\n\tprintf(\"ok 1 - mbstowcs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-mbtowc.c",
    "content": "/*-\n * Copyright (c) 2002-2004 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for mbtowc(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1990.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tsize_t len;\n\twchar_t wc;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/* No shift states in C locale. */\n\tassert(mbtowc(NULL, NULL, 0) == 0);\n\n\t/* Null wide character. */\n\twc = 0xcccc;\n\tmemset(buf, 0, sizeof(buf));\n\tassert(mbtowc(&wc, buf, 1) == 0);\n\tassert(wc == 0);\n\n\t/* Latin letter A. */\n\tbuf[0] = 'A';\n\tassert(mbtowc(&wc, buf, 1) == 1);\n\tassert(wc == L'A');\n\n\t/* Incomplete character sequence. */\n\twc = L'z';\n\tbuf[0] = '\\0';\n#if !__gnu_linux__\n\tassert(mbtowc(&wc, buf, 0) == -1);\n#endif\n\tassert(wc == L'z');\n\tassert(mbtowc(NULL, NULL, 0) == 0);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n\t/* Null wide character */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0;\n\twc = 0xcccc;\n\tassert(mbtowc(&wc, buf, 1) == 0);\n\tassert(wc == 0);\n\n\t/* Latin letter A. */\n\tbuf[0] = 'A';\n\tassert(mbtowc(&wc, buf, 1) == 1);\n\tassert(wc == L'A');\n\n\t/* Incomplete character sequence (zero length). */\n\twc = L'z';\n\tbuf[0] = '\\0';\n#if !__gnu_linux__\n\tassert(mbtowc(&wc, buf, 0) == -1);\n#endif\n\tassert(wc == L'z');\n\tassert(mbtowc(NULL, NULL, 0) == 0);\n\n\t/* Incomplete character sequence (truncated double-byte). */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tbuf[0] = 0xa3;\n\tbuf[1] = 0x00;\n\twc = L'z';\n\tassert(mbtowc(&wc, buf, 1) == -1);\n\tassert(wc == L'z');\n\tassert(mbtowc(NULL, NULL, 0) == 0);\n\n\t/* Same as above, but complete. */\n\tbuf[1] = 0xc1;\n\tassert(mbtowc(&wc, buf, 2) == 2);\n#if !__gnu_linux__\n\tassert(wc == 0xa3c1);\n#endif\n\n\tprintf(\"ok 1 - mbtowc()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-ms-wprintf.c",
    "content": "#include <stdio.h>\n#include <wchar.h>\n#include <string.h>\n#include <stdlib.h>\n#include <errno.h>\n\n#define BUF_SIZE  1024\n#define ENV_VAR   \"CRYSTAX_USE_MS_STYLE_WPRINTF\"\n\nint main()\n{\n    wchar_t wbuf[BUF_SIZE];\n    int len;\n    int wbuflen;\n\n    /* GCC style [s]wprintf */\n\n    if (unsetenv(ENV_VAR) != 0) {\n        printf(\"FAIL! unsetenv failed with errno: %d; error: %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    memset(wbuf, 0, sizeof wbuf);\n    len = swprintf(wbuf, BUF_SIZE, L\"%s\", \"abcd\");\n    wbuflen = wcslen(wbuf);\n    printf(\"len: %d; wbuflen: %d; wbuf: %ls\\n\", len, wbuflen, wbuf);\n    if (len < 0) {\n        printf(\"FAIL! (GCC %%s) len: %d; errno: %d; error: %s\\n\", len, errno, strerror(errno));\n        return 1;\n    }\n    if (len != wbuflen) {\n        printf(\"FAIL! (GCC %%s) len: %d; wbuflen: %d\\n\", len, wbuflen);\n        return 1;\n    }\n\n    memset(wbuf, 0, sizeof wbuf);\n    len = swprintf(wbuf, BUF_SIZE, L\"%c\", 'a');\n    wbuflen = wcslen(wbuf);\n    printf(\"len: %d; wbuflen: %d; wbuf: %ls\\n\", len, wbuflen, wbuf);\n    if (len < 0) {\n        printf(\"FAIL! (GCC %%c) len: %d; errno: %d; error: %s\\n\", len, errno, strerror(errno));\n        return 1;\n    }\n    if (len != wbuflen) {\n        printf(\"FAIL! (GCC %%c) len: %d; wbuflen: %d\\n\", len, wbuflen);\n        return 1;\n    }\n\n    /* MS style [s]wprintf */\n\n    if (setenv(\"CRYSTAX_USE_MS_STYLE_WPRINTF\", \"yes\", 1) != 0) {\n        printf(\"FAIL! setenv failed with errno: %d; error: %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    memset(wbuf, 0, sizeof wbuf);\n    len = swprintf(wbuf, BUF_SIZE, L\"%s\", L\"abcd\");\n    wbuflen = wcslen(wbuf);\n    printf(\"len: %d; wbuflen: %d; wbuf: %ls\\n\", len, wbuflen, wbuf);\n    if (len < 0) {\n        printf(\"FAIL! (MS %%s) len: %d; errno: %d; error: %s\\n\", len, errno, strerror(errno));\n        return 1;\n    }\n    if (len != wbuflen) {\n        printf(\"FAIL! (GCC %%s) len: %d; wbuflen: %d\\n\", len, wbuflen);\n        return 1;\n    }\n\n    memset(wbuf, 0, sizeof wbuf);\n    len = swprintf(wbuf, BUF_SIZE, L\"%c\", L'a');\n    wbuflen = wcslen(wbuf);\n    printf(\"len: %d; wbuflen: %d; wbuf: %ls\\n\", len, wbuflen, wbuf);\n    if (len < 0) {\n        printf(\"FAIL! (MS %%c) len: %d; errno: %d; error: %s\\n\", len, errno, strerror(errno));\n        return 1;\n    }\n    if (len != wbuflen) {\n        printf(\"FAIL! (MS %%c) len: %d; wbuflen: %d\\n\", len, wbuflen);\n        return 1;\n    }\n\n\n    /* clean the environment */\n\n    if (unsetenv(ENV_VAR) != 0) {\n        printf(\"FAIL! unsetenv failed with errno: %d; error: %s\\n\", errno, strerror(errno));\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-towctrans.c",
    "content": "/*-\n * Copyright (c) 2003 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wctrans() and towctrans() as specified by\n * IEEE Std. 1003.1-2001 and ISO/IEC 9899:1999.\n *\n * The functions are tested in the \"C\" and \"ja_JP.eucJP\" locales.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <locale.h>\n#include <stdio.h>\n#include <string.h>\n#include <wchar.h>\n#include <wctype.h>\n\nint\nmain(int argc, char *argv[])\n{\n\twctrans_t t;\n\tint i, j;\n\tstruct {\n\t\tconst char *name;\n\t\twint_t (*func)(wint_t);\n\t} tran[] = {\n\t\t{ \"tolower\", towlower },\n\t\t{ \"toupper\", towupper },\n\t};\n\n\tprintf(\"1..2\\n\");\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\tfor (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {\n\t\tt = wctrans(tran[i].name);\n\t\tassert(t != 0);\n\t\tfor (j = 0; j < 256; j++)\n\t\t\tassert(tran[i].func(j) == towctrans(j, t));\n\t}\n\tt = wctrans(\"elephant\");\n\tassert(t == 0);\n\tfor (i = 0; i < 256; i++)\n\t\tassert(towctrans(i, t) == i);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tfor (i = 0; i < sizeof(tran) / sizeof(*tran); i++) {\n\t\tt = wctrans(tran[i].name);\n\t\tassert(t != 0);\n\t\tfor (j = 0; j < 65536; j++)\n\t\t\tassert(tran[i].func(j) == towctrans(j, t));\n\t}\n\tt = wctrans(\"elephant\");\n\tassert(t == 0);\n\tfor (i = 0; i < 65536; i++)\n\t\tassert(towctrans(i, t) == i);\n\n\tprintf(\"ok 1 - towctrans()\\n\");\n\tprintf(\"ok 2 - wctrans()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcrtomb.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wcrtomb(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tmbstate_t s;\n\tsize_t len;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/*\n\t * If the buffer argument is NULL, wc is implicitly L'\\0',\n\t * wcrtomb() resets its internal state.\n\t */\n\tassert(wcrtomb(NULL, L'\\0', NULL) == 1);\n\tassert(wcrtomb(NULL, UCHAR_MAX + 1, NULL) == 1);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wcrtomb(buf, L'\\0', &s);\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);\n\n\t/* Latin letter A, internal state. */\n\tassert(wcrtomb(NULL, L'\\0', NULL) == 1);\n\tassert(wcrtomb(NULL, L'A', NULL) == 1);\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wcrtomb(buf, L'A', &s);\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);\n\n\t/* Invalid code. */\n\tassert(wcrtomb(buf, UCHAR_MAX + 1, NULL) == (size_t)-1);\n\tassert(errno == EILSEQ);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX == 3);\n\n\t/*\n\t * If the buffer argument is NULL, wc is implicitly L'\\0',\n\t * wcrtomb() resets its internal state.\n\t */\n\tassert(wcrtomb(NULL, L'\\0', NULL) == 1);\n\n\t/* Null wide character. */\n\tmemset(&s, 0, sizeof(s));\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wcrtomb(buf, L'\\0', &s);\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);\n\n\t/* Latin letter A, internal state. */\n\tassert(wcrtomb(NULL, L'\\0', NULL) == 1);\n\tassert(wcrtomb(NULL, L'A', NULL) == 1);\n\n\t/* Latin letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wcrtomb(buf, L'A', &s);\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);\n\n#if !__gnu_linux__\n\t/* Full width letter A. */\n\tmemset(&s, 0, sizeof(s));\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wcrtomb(buf, 0xa3c1, &s);\n\tassert(len == 2);\n\tassert((unsigned char)buf[0] == 0xa3 &&\n\t\t(unsigned char)buf[1] == 0xc1 &&\n\t\t(unsigned char)buf[2] == 0xcc);\n#endif\n\n\tprintf(\"ok 1 - wcrtomb()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcscasecmp.c",
    "content": "/*-\n * Copyright (c) 2009 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <wchar.h>\n#include <wctype.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __APPLE__ && !defined(__MAC_10_7)\nint main() { return 0; }\n#else /* !__APPLE__ || defined(__MAC_10_7) */\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..6\\n\");\n\n\tsetlocale(LC_CTYPE, \"C\");\n\n\tassert(wcscasecmp(L\"\", L\"\") == 0);\n\tassert(wcsncasecmp(L\"\", L\"\", 50) == 0);\n\tassert(wcsncasecmp(L\"\", L\"\", 0) == 0);\n\tprintf(\"ok 1 - wcscasecmp\\n\");\n\n\tassert(wcscasecmp(L\"abc\", L\"abc\") == 0);\n\tassert(wcscasecmp(L\"ABC\", L\"ABC\") == 0);\n\tassert(wcscasecmp(L\"abc\", L\"ABC\") == 0);\n\tassert(wcscasecmp(L\"ABC\", L\"abc\") == 0);\n\tprintf(\"ok 2 - wcscasecmp\\n\");\n\n\tassert(wcscasecmp(L\"abc\", L\"xyz\") < 0);\n\tassert(wcscasecmp(L\"ABC\", L\"xyz\") < 0);\n\tassert(wcscasecmp(L\"abc\", L\"XYZ\") < 0);\n\tassert(wcscasecmp(L\"ABC\", L\"XYZ\") < 0);\n\tassert(wcscasecmp(L\"xyz\", L\"abc\") > 0);\n\tassert(wcscasecmp(L\"XYZ\", L\"abc\") > 0);\n\tassert(wcscasecmp(L\"xyz\", L\"ABC\") > 0);\n\tassert(wcscasecmp(L\"XYZ\", L\"ABC\") > 0);\n\tprintf(\"ok 3 - wcscasecmp\\n\");\n\n\tassert(wcscasecmp(L\"abc\", L\"ABCD\") < 0);\n\tassert(wcscasecmp(L\"ABC\", L\"abcd\") < 0);\n\tassert(wcscasecmp(L\"abcd\", L\"ABC\") > 0);\n\tassert(wcscasecmp(L\"ABCD\", L\"abc\") > 0);\n\tprintf(\"ok 4 - wcscasecmp\\n\");\n\n\tassert(wcsncasecmp(L\"abc\", L\"ABCD\", 4) < 0);\n\tassert(wcsncasecmp(L\"ABC\", L\"abcd\", 4) < 0);\n\tassert(wcsncasecmp(L\"abcd\", L\"ABC\", 4) > 0);\n\tassert(wcsncasecmp(L\"ABCD\", L\"abc\", 4) > 0);\n\tassert(wcsncasecmp(L\"abc\", L\"ABCD\", 3) == 0);\n\tassert(wcsncasecmp(L\"ABC\", L\"abcd\", 3) == 0);\n\tprintf(\"ok 5 - wcsncasecmp\\n\");\n\n\tassert(wcscasecmp(L\"λ\", L\"Λ\") != 0);\n\tsetlocale(LC_CTYPE, \"el_GR.UTF-8\");\n\tassert(wcscasecmp(L\"λ\", L\"Λ\") == 0);\n\tassert(wcscasecmp(L\"λ\", L\"Ω\") < 0);\n\tassert(wcscasecmp(L\"Ω\", L\"λ\") > 0);\n\tprintf(\"ok 6 - greek\\n\");\n\n\texit(0);\n}\n\n#endif /* !__APPLE__ || defined(__MAC_10_7) */\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcslen-cpp.cpp",
    "content": "#include <stdio.h>\n#include <wchar.h>\n#include <assert.h>\n\nint main()\n{\n    printf(\"1..1 - wcslen_cpp\\n\");\n\n    wchar_t const *s;\n    size_t len;\n\n    s = L\"abcdefghijkl\";\n    len = wcslen(s);\n    printf(\"len: %lu\\n\", (unsigned long)len);\n    assert(len == 12);\n\n    printf(\"ok 1 - wcslen_cpp\\n\");\n    return (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcslen.c",
    "content": "#include <stdio.h>\n#include <wchar.h>\n#include <assert.h>\n\nint main()\n{\n    printf(\"1..1 - wcslen_c\\n\");\n\n    wchar_t *s;\n    size_t len;\n\n    s = L\"abcdefghijkl\";\n    len = wcslen(s);\n    printf(\"len: %lu\\n\", (unsigned long)len);\n    assert(len == 12);\n\n    printf(\"ok 1 - wcslen_c\\n\");\n    return (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcsnlen.c",
    "content": "/*-\n * Copyright (c) 2009 David Schultz <das@FreeBSD.org>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include <sys/cdefs.h>\n\n#include <sys/mman.h>\n#include <sys/param.h>\n#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n#include <unistd.h>\n\n#if __APPLE__\n#include <Availability.h>\n#endif\n\n#if __APPLE__ && !defined(__MAC_10_7)\nint main() { return 0; }\n#else /* !__APPLE__ || defined(__MAC_10_7) */\n\n#ifdef assert\n#undef assert\n#endif\n\n#define assert(x) \\\n    if (!(x)) \\\n    { \\\n        fprintf(stderr, \"%s:%d: ERROR: Assertion failed: \\\"%s\\\"\\n\", __FILE__, __LINE__, #x); \\\n        abort(); \\\n    }\n\n#ifndef roundup2\n#define roundup2(x, y)\t(((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */\n#endif\n\n#ifndef PAGE_SIZE\n#define PAGE_SIZE getpagesize()\n#endif\n\nstatic void *\nmakebuf(size_t len, int guard_at_end)\n{\n\tchar *buf;\n\tsize_t alloc_size = roundup2(len, PAGE_SIZE) + PAGE_SIZE;\n\tint rc;\n\n\tbuf = mmap(NULL, alloc_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);\n\tassert(buf);\n\tif (guard_at_end) {\n\t\trc = munmap(buf + alloc_size - PAGE_SIZE, PAGE_SIZE);\n\t\tassert(rc == 0);\n\t\treturn (buf + alloc_size - PAGE_SIZE - len);\n\t} else {\n\t\trc = munmap(buf, PAGE_SIZE);\n\t\tassert(rc == 0);\n\t\treturn (buf + PAGE_SIZE);\n\t}\n}\n\nstatic void\ntest_wcsnlen(const wchar_t *s)\n{\n\twchar_t *s1;\n\tsize_t size, len, bufsize;\n\tint i;\n\n\tsize = wcslen(s) + 1;\n\tfor (i = 0; i <= 1; i++) {\n\t    for (bufsize = 0; bufsize <= size + 10; bufsize++) {\n\t\ts1 = makebuf(bufsize * sizeof(wchar_t), i);\n\t\twmemcpy(s1, s, bufsize);\n\t\tlen = (size > bufsize) ? bufsize : size - 1;\n\t\tassert(wcsnlen(s1, bufsize) == len);\n\t    }\n\t}\n}\n\nint\nmain(int argc, char *argv[])\n{\n\n\tprintf(\"1..3\\n\");\n\n\ttest_wcsnlen(L\"\");\n\tprintf(\"ok 1 - wcsnlen\\n\");\n\ttest_wcsnlen(L\"foo\");\n\tprintf(\"ok 2 - wcsnlen\\n\");\n\ttest_wcsnlen(L\"glorp\");\n\tprintf(\"ok 3 - wcsnlen\\n\");\n\n\texit(0);\n}\n\n#endif /* !__APPLE__ || defined(__MAC_10_7) */\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcsnrtombs.c",
    "content": "/*-\n * Copyright (c) 2002-2004 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wcsnrtombs().\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\twchar_t srcbuf[128];\n\tchar dstbuf[128];\n\twchar_t *src;\n\tmbstate_t s;\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),\n\t    &s) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\tassert(src == NULL);\n\n\t/* Simple null terminated string, stopping early. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 4, sizeof(dstbuf),\n\t    &s) == 4);\n\tassert(memcmp(dstbuf, \"hell\", 4) == 0);\n\tassert((unsigned char)dstbuf[5] == 0xcc);\n\tassert(src == srcbuf + 4);\n\n\t/* Not enough space in destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 4,\n\t    &s) == 4);\n\tassert(memcmp(dstbuf, \"hell\", 4) == 0);\n\tassert((unsigned char)dstbuf[5] == 0xcc);\n\tassert(src == srcbuf + 4);\n\n\t/* Null terminated string, internal dest. buffer */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(NULL, (const wchar_t **)&src, 6, sizeof(dstbuf),\n\t    &s) == 5);\n\n\t/* Null terminated string, internal dest. buffer, stopping early. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(NULL, (const wchar_t **)&src, 4, sizeof(dstbuf),\n\t    &s) == 4);\n\n\t/* Null terminated string, internal state. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),\n\t    NULL) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\tassert(src == NULL);\n\n\t/* Null terminated string, internal state, internal dest. buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tsrc = srcbuf;\n\tassert(wcsnrtombs(NULL, (const wchar_t **)&src, 6, 0, NULL) == 5);\n\n\t/* Empty source buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = L'\\0';\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 1, sizeof(dstbuf),\n\t    &s) == 0);\n\tassert(dstbuf[0] == L'\\0');\n\n\t/* Zero length destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 0, &s) == 0);\n\tassert((unsigned char)dstbuf[0] == 0xcc);\n\n\t/* Zero length source buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 0, sizeof(dstbuf),\n\t    &s) == 0);\n\tassert((unsigned char)dstbuf[0] == 0xcc);\n\tassert(src == srcbuf);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n#if !__gnu_linux__\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = 0xA3C1;\n\tsrcbuf[1] = 0x0020;\n\tsrcbuf[2] = 0x0042;\n\tsrcbuf[3] = 0x0020;\n\tsrcbuf[4] = 0xA3C3;\n\tsrcbuf[5] = 0x0000;\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, sizeof(dstbuf),\n\t    &s) == 7);\n\tassert(strcmp(dstbuf, \"\\xA3\\xC1 B \\xA3\\xC3\") == 0);\n\tassert((unsigned char)dstbuf[8] == 0xcc);\n\tassert(src == NULL);\n\n\t/* Stopping early. */\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsnrtombs(dstbuf, (const wchar_t **)&src, 6, 6,\n\t    &s) == 5);\n\tassert(memcmp(dstbuf, \"\\xA3\\xC1 B \", 5) == 0);\n\tassert((unsigned char)dstbuf[5] == 0xcc);\n\tassert(src == srcbuf + 4);\n#endif /* !__gnu_linux__ */\n\n\tprintf(\"ok 1 - wcsnrtombs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcsrtombs.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wcsrtombs(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\twchar_t srcbuf[128];\n\tchar dstbuf[128];\n\twchar_t *src;\n\tmbstate_t s;\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),\n\t    &s) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\tassert(src == NULL);\n\n\t/* Not enough space in destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, 4,\n\t    &s) == 4);\n\tassert(memcmp(dstbuf, \"hell\", 4) == 0);\n\tassert((unsigned char)dstbuf[5] == 0xcc);\n\tassert(src == srcbuf + 4);\n\n\t/* Null terminated string, internal dest. buffer */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(NULL, (const wchar_t **)&src, sizeof(dstbuf),\n\t    &s) == 5);\n\n\t/* Null terminated string, internal state. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),\n\t    NULL) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\tassert(src == NULL);\n\n\t/* Null terminated string, internal state, internal dest. buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tsrc = srcbuf;\n\tassert(wcsrtombs(NULL, (const wchar_t **)&src, 0, NULL) == 5);\n\n\t/* Empty source buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = L'\\0';\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),\n\t    &s) == 0);\n\tassert(dstbuf[0] == L'\\0');\n\n\t/* Zero length destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, 0, &s) == 0);\n\tassert((unsigned char)dstbuf[0] == 0xcc);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n#if !__gnu_linux__\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = 0xA3C1;\n\tsrcbuf[1] = 0x0020;\n\tsrcbuf[2] = 0x0042;\n\tsrcbuf[3] = 0x0020;\n\tsrcbuf[4] = 0xA3C3;\n\tsrcbuf[5] = 0x0000;\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tsrc = srcbuf;\n\tmemset(&s, 0, sizeof(s));\n\tassert(wcsrtombs(dstbuf, (const wchar_t **)&src, sizeof(dstbuf),\n\t    &s) == 7);\n\tassert(strcmp(dstbuf, \"\\xA3\\xC1 B \\xA3\\xC3\") == 0);\n\tassert((unsigned char)dstbuf[8] == 0xcc);\n\tassert(src == NULL);\n#endif /* __gnu_linux__ */\n\n\tprintf(\"ok 1 - wcsrtombs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wcstombs.c",
    "content": "/*-\n * Copyright (c) 2002 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wcstombs(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <wchar.h>\n\nint\nmain(int argc, char *argv[])\n{\n\twchar_t srcbuf[128];\n\tchar dstbuf[128];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\t/* Simple null terminated string. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\n\t/* Not enough space in destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, 4) == 4);\n\tassert(memcmp(dstbuf, \"hell\", 4) == 0);\n\tassert((unsigned char)dstbuf[5] == 0xcc);\n\n\t/* Null terminated string, internal dest. buffer */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tassert(wcstombs(NULL, srcbuf, sizeof(dstbuf)) == 5);\n\n\t/* Null terminated string, internal state. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 5);\n\tassert(strcmp(dstbuf, \"hello\") == 0);\n\tassert((unsigned char)dstbuf[6] == 0xcc);\n\n\t/* Null terminated string, internal state, internal dest. buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tassert(wcstombs(NULL, srcbuf, 0) == 5);\n\n\t/* Empty source buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = L'\\0';\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 0);\n\tassert(dstbuf[0] == L'\\0');\n\n\t/* Zero length destination buffer. */\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\twcscpy(srcbuf, L\"hello\");\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, 0) == 0);\n\tassert((unsigned char)dstbuf[0] == 0xcc);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX > 1);\n\n#if !__gnu_linux__\n\twmemset(srcbuf, 0xcc, sizeof(srcbuf) / sizeof(*srcbuf));\n\tsrcbuf[0] = 0xA3C1;\n\tsrcbuf[1] = 0x0020;\n\tsrcbuf[2] = 0x0042;\n\tsrcbuf[3] = 0x0020;\n\tsrcbuf[4] = 0xA3C3;\n\tsrcbuf[5] = 0x0000;\n\tmemset(dstbuf, 0xcc, sizeof(dstbuf));\n\tassert(wcstombs(dstbuf, srcbuf, sizeof(dstbuf)) == 7);\n\tassert(strcmp(dstbuf, \"\\xA3\\xC1 B \\xA3\\xC3\") == 0);\n\tassert((unsigned char)dstbuf[8] == 0xcc);\n#endif /* !__gnu_linux__ */\n\n\tprintf(\"ok 1 - wcstombs()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wctomb.c",
    "content": "/*-\n * Copyright (c) 2002-2004 Tim J. Robbins\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n/*\n * Test program for wctomb(), as specified by IEEE Std. 1003.1-2001 and\n * ISO/IEC 9899:1999.\n *\n * The function is tested with both the \"C\" (\"POSIX\") LC_CTYPE setting and\n * \"ja_JP.eucJP\". Other encodings are not tested.\n */\n\n#include <sys/cdefs.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <locale.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nint\nmain(int argc, char *argv[])\n{\n\tsize_t len;\n\tchar buf[MB_LEN_MAX + 1];\n\n\t/*\n\t * C/POSIX locale.\n\t */\n\n\tprintf(\"1..1\\n\");\n\n\tassert(MB_CUR_MAX == 1);\n\n\t/* No shift states in C locale. */\n\tassert(wctomb(NULL, L'\\0') == 0);\n\n\t/* Null wide character. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wctomb(buf, L'\\0');\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);\n\n\t/* Latin letter A. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wctomb(buf, L'A');\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);\n\n\t/* Invalid code. */\n\tassert(wctomb(buf, UCHAR_MAX + 1) == -1);\n\tassert(wctomb(NULL, 0) == 0);\n\n\t/*\n\t * Japanese (EUC) locale.\n\t */\n\n\tassert(strcmp(setlocale(LC_CTYPE, \"ja_JP.eucJP\"), \"ja_JP.eucJP\") == 0);\n\tassert(MB_CUR_MAX == 3);\n\n\t/* No shift states in EUC encoding. */\n\tassert(wctomb(NULL, L'\\0') == 0);\n\n\t/* Null wide character. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wctomb(buf, L'\\0');\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 0 && (unsigned char)buf[1] == 0xcc);\n\n\t/* Latin letter A. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wctomb(buf, L'A');\n\tassert(len == 1);\n\tassert((unsigned char)buf[0] == 'A' && (unsigned char)buf[1] == 0xcc);\n\n#if !__gnu_linux__\n\t/* Full width letter A. */\n\tmemset(buf, 0xcc, sizeof(buf));\n\tlen = wctomb(buf, 0xa3c1);\n\tassert(len == 2);\n\tassert((unsigned char)buf[0] == 0xa3 &&\n\t\t(unsigned char)buf[1] == 0xc1 &&\n\t\t(unsigned char)buf[2] == 0xcc);\n#endif\n\n\tprintf(\"ok 1 - wctomb()\\n\");\n\n\treturn (0);\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wprintf.c",
    "content": "#include <stdio.h>\n#include <wchar.h>\n#include <string.h>\n\nint test_swprintf()\n{\n\n#define WBUF_SIZE 1024\n\n    wchar_t wbuf[WBUF_SIZE];\n    int len, checklen;\n\n#define DO_WPRINTF_TEST(n, check, fmt, ...) \\\n    memset(wbuf, 0, sizeof wbuf); \\\n    len = swprintf(wbuf, WBUF_SIZE, L##fmt, ##__VA_ARGS__); \\\n    checklen = wcslen(L##check); \\\n    if (len != checklen) \\\n    { \\\n        printf(\"FAIL! wbuf len is %d, but expected %d\\n\", len, checklen); \\\n        return 1; \\\n    } \\\n    if (wcscmp(wbuf, L##check) != 0) \\\n    { \\\n        printf(\"FAIL! wbuf is \\\"%ls\\\", but expected \\\"%ls\\\"\\n\", wbuf, L##check); \\\n        return 1; \\\n    } \\\n    printf(\"ok \" #n \" - swprintf\\n\")\n\n#include \"wprintf.inc\"\n\n#undef DO_WPRINTF_TEST\n\n    return 0;\n}\n\nint test_fwprintf()\n{\n    int ret;\n    int len;\n#define DO_WPRINTF_TEST(n, check, fmt, ...) \\\n    ret = fwprintf(stderr, L##fmt \"\\n\", ##__VA_ARGS__); \\\n    if (ret < 0) \\\n    { \\\n        printf(\"FAIL! fwprintf return %d\\n\", ret); \\\n        return 1; \\\n    } \\\n    len = wcslen(L##check) + 1; \\\n    if (ret != len) \\\n    { \\\n        printf(\"FAIL! fwprintf return %d, but \\\"%ls\\\" is %d-byte long\\n\", ret, L##check, len); \\\n        return 1; \\\n    } \\\n    printf(\"ok \" #n \" - fwprintf\\n\")\n\n#include \"wprintf.inc\"\n\n#undef DO_WPRINTF_TEST\n\n    return 0;\n}\n\nint test_wprintf()\n{\n    int ret;\n    int len;\n#define DO_WPRINTF_TEST(n, check, fmt, ...) \\\n    ret = wprintf(L##fmt \"\\n\", ##__VA_ARGS__); \\\n    if (ret < 0) \\\n    { \\\n        printf(\"FAIL! wprintf return %d\\n\", ret); \\\n        return 1; \\\n    } \\\n    len = wcslen(L##check) + 1; \\\n    if (ret != len) \\\n    { \\\n        printf(\"FAIL! wprintf return %d, but \\\"%ls\\\" is %d-byte long\\n\", ret, L##check, len); \\\n        return 1; \\\n    } \\\n    printf(\"ok \" #n \" - wprintf\\n\")\n\n#include \"wprintf.inc\"\n\n#undef DO_WPRINTF_TEST\n\n    return 0;\n}\n\nint main()\n{\n#define DO_WPRINTF_TEST1(x) if (test_ ## x ()) return 1\n    DO_WPRINTF_TEST1(swprintf);\n    DO_WPRINTF_TEST1(fwprintf);\n    DO_WPRINTF_TEST1(wprintf);\n#undef DO_WPRINTF_TEST1\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wscanf.c",
    "content": "#include <stdio.h>\n#include <wchar.h>\n\nint test_swscanf()\n{\n    int ret;\n    int n;\n\n    printf(\"1..50\\n\");\n\n#define DO_WSCANF_TEST(n, check, str, fmt, ...) \\\n    ret = swscanf(L##str, L##fmt, ##__VA_ARGS__); \\\n    if (ret != check) \\\n    { \\\n        printf(\"FAIL! swscanf returned %d, but expected %d\\n\", ret, check); \\\n        return 1; \\\n    } \\\n    printf(\"ok \" #n \" - swscanf\\n\")\n\n    DO_WSCANF_TEST(1,  1, \"100\", \"%d\", &n);\n    if (n != 100)\n        return 1;\n\n#undef DO_WSCANF_TEST\n\n    return 0;\n}\n\nint main()\n{\n    return test_swscanf();\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/test-wstring.cpp",
    "content": "#include <string>\n#include <cwchar>\n#include <assert.h>\n#include <stdlib.h>\n#include <locale.h>\n\nstatic int test_wstring_base()\n{\n    printf(\"1..1\\n\");\n\n    assert(sizeof(std::wstring::value_type) == 4);\n    std::wstring wstr(L\"sdcard\");\n    assert(wstr.size() == 6);\n    assert(wstr[0] == L's');\n    assert(wstr[1] == L'd');\n    assert(wstr[2] == L'c');\n    assert(wstr[3] == L'a');\n    assert(wstr[4] == L'r');\n    assert(wstr[5] == L'd');\n\n    printf(\"ok 1 - wstring_size\\n\");\n    return 0;\n}\n\nstatic int test_wstring_construct()\n{\n    printf(\"1..1\\n\");\n\n    std::wstring data = L\"abcdefghijkl\";\n    printf(\"data.size(): %zu\\n\", data.size());\n    assert(data.size() == 12);\n    assert(data[0] == L'a');\n    assert(data[1] == L'b');\n    assert(data[2] == L'c');\n    assert(data[3] == L'd');\n    assert(data[4] == L'e');\n    assert(data[5] == L'f');\n    assert(data[6] == L'g');\n    assert(data[7] == L'h');\n    assert(data[8] == L'i');\n    assert(data[9] == L'j');\n    assert(data[10] == L'k');\n    assert(data[11] == L'l');\n\n    printf(\"ok 1 - wstring_construct\\n\");\n    return 0;\n}\n\nstatic int test_wstring_erase()\n{\n    printf(\"1..5\\n\");\n\n    setlocale(LC_CTYPE, \"UTF-8\");\n\n    std::wstring data = L\"abcdefghijkl\";\n    assert(data == L\"abcdefghijkl\");\n    data.erase(1);\n    assert(data.size() == 1);\n    assert(data == L\"a\");\n    printf(\"ok 1 - wstring_erase\\n\");\n\n    data = L\"abcdefghijkl\";\n    assert(data == L\"abcdefghijkl\");\n    data.erase(2);\n    assert(data.size() == 2);\n    assert(data == L\"ab\");\n    printf(\"ok 2 - wstring_erase\\n\");\n\n    data.erase(0, 1);\n    assert(data.size() == 1);\n    assert(data == L\"b\");\n    printf(\"ok 3 - wstring_erase\\n\");\n\n    data = L\"abcdefghijkl\";\n    assert(data.size() == 12);\n    assert(data == L\"abcdefghijkl\");\n    printf(\"data.c_str(): %p\\n\", data.c_str());\n    for (wchar_t const *s = data.c_str(); *s != 0; ++s)\n        printf(\"0x%x \", (int)*s);\n    printf(\"\\n\");\n    data.erase(0, 1);\n    for (wchar_t const *s = data.c_str(); *s != 0; ++s)\n        printf(\"0x%x \", (int)*s);\n    printf(\"\\n\");\n    printf(\"data.c_str(): %p\\n\", data.c_str());\n    assert(data.size() == 11);\n    assert(data == L\"bcdefghijkl\");\n    printf(\"ok 4 - wstring_erase\\n\");\n\n    data = L\"abcdefghijkl\";\n    assert(data.size() == 12);\n    assert(data == L\"abcdefghijkl\");\n    data.erase(data.begin(), data.begin() + 1);\n    assert(data.size() == 11);\n    assert(data[0] == L'b');\n    assert(data[1] == L'c');\n    assert(data[2] == L'd');\n    printf(\"data[3] = 0x%x\\n\", (int)data[3]);\n    assert(data[3] == L'e');\n    assert(data[4] == L'f');\n    assert(data[5] == L'g');\n    assert(data[6] == L'h');\n    assert(data[7] == L'i');\n    assert(data[8] == L'j');\n    assert(data[9] == L'k');\n    assert(data[10] == L'l');\n    assert(data[11] == L'\\0');\n    assert(data == L\"bcdefghijkl\");\n    printf(\"ok 5 - wstring_erase\\n\");\n\n    return 0;\n}\n\nint main()\n{\n#define DO_WSTRING_TEST(x) if (test_wstring_ ## x ()) return 1\n    DO_WSTRING_TEST(base);\n    DO_WSTRING_TEST(construct);\n    DO_WSTRING_TEST(erase);\n#undef DO_WSTRING_TEST\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/crystax-test-wchar/jni/wprintf.inc",
    "content": "printf(\"1..50\\n\");\nDO_WPRINTF_TEST(1,  \"100\", \"%d\", 100);\nDO_WPRINTF_TEST(2,  \"100\", \"%u\", 100);\nDO_WPRINTF_TEST(3,  \"4294967196\", \"%u\", -100);\nDO_WPRINTF_TEST(4,  \"144\", \"%o\", 100);\nDO_WPRINTF_TEST(5,  \"5a\", \"%x\", 90);\nDO_WPRINTF_TEST(6,  \"5A\", \"%X\", 90);\nDO_WPRINTF_TEST(7,  \"123.456789\", \"%f\", 123.4567890123);\nDO_WPRINTF_TEST(8,  \"123.456789\", \"%F\", 123.4567890123);\nDO_WPRINTF_TEST(9,  \"123.46\", \"%.2f\", 123.4567890123);\nDO_WPRINTF_TEST(10, \"123.457\", \"%.3f\", 123.4567890123);\nDO_WPRINTF_TEST(11, \"          123.456789\", \"%20f\", 123.4567890123);\nDO_WPRINTF_TEST(12, \"     123.5\", \"%10.1f\", 123.4567890123);\nDO_WPRINTF_TEST(13, \"   123.457\", \"%10.3f\", 123.4567890123);\nDO_WPRINTF_TEST(14, \"  -123.457\", \"%10.3f\", -123.4567890123);\nDO_WPRINTF_TEST(15, \"12345.68\", \"%.2f\", 12345.6789);\nDO_WPRINTF_TEST(16, \"1.234568e+02\", \"%e\", 123.4567890123);\nDO_WPRINTF_TEST(17, \"1.234568E+02\", \"%E\", 123.4567890123);\nDO_WPRINTF_TEST(18, \"1.23e+02\", \"%.2e\", 123.4567890123);\nDO_WPRINTF_TEST(19, \"1.235e+02\", \"%.3e\", 123.4567890123);\nDO_WPRINTF_TEST(20, \"        1.234568e+02\", \"%20e\", 123.4567890123);\nDO_WPRINTF_TEST(21, \"   1.2e+02\", \"%10.1e\", 123.4567890123);\nDO_WPRINTF_TEST(22, \" 1.235e+02\", \"%10.3e\", 123.4567890123);\nDO_WPRINTF_TEST(23, \"-1.235e+02\", \"%10.3e\", -123.4567890123);\nDO_WPRINTF_TEST(24, \"1.23e+04\", \"%.2e\", 12345.6789);\nDO_WPRINTF_TEST(25, \"123.457\", \"%g\", 123.4567890123);\nDO_WPRINTF_TEST(26, \"123.457\", \"%G\", 123.4567890123);\nDO_WPRINTF_TEST(27, \"1.2e+02\", \"%.2g\", 123.4567890123);\nDO_WPRINTF_TEST(28, \"123\", \"%.3g\", 123.4567890123);\nDO_WPRINTF_TEST(29, \"             123.457\", \"%20g\", 123.4567890123);\nDO_WPRINTF_TEST(30, \"     1e+02\", \"%10.1g\", 123.4567890123);\nDO_WPRINTF_TEST(31, \"       123\", \"%10.3g\", 123.4567890123);\nDO_WPRINTF_TEST(32, \"      -123\", \"%10.3g\", -123.4567890123);\nDO_WPRINTF_TEST(33, \"1.2e+04\", \"%.2g\", 12345.6789);\nDO_WPRINTF_TEST(34, \"0x1.edd3c07fb400bp+6\", \"%a\", 123.4567890123);\nDO_WPRINTF_TEST(35, \"0X1.EDD3C07FB400BP+6\", \"%A\", 123.4567890123);\nDO_WPRINTF_TEST(36, \"0x1.eep+6\", \"%.2a\", 123.4567890123);\nDO_WPRINTF_TEST(37, \"0x1.eddp+6\", \"%.3a\", 123.4567890123);\nDO_WPRINTF_TEST(38, \"0x1.edd3c07fb400bp+6\", \"%20a\", 123.4567890123);\nDO_WPRINTF_TEST(39, \"  0x1.fp+6\", \"%10.1a\", 123.4567890123);\nDO_WPRINTF_TEST(40, \"0x1.eddp+6\", \"%10.3a\", 123.4567890123);\nDO_WPRINTF_TEST(41, \"-0x1.eddp+6\", \"%10.3a\", -123.4567890123);\nDO_WPRINTF_TEST(42, \"0x1.82p+13\", \"%.2a\", 12345.6789);\nDO_WPRINTF_TEST(43, \"x\", \"%c\", 'x');\nDO_WPRINTF_TEST(44, \"x\", \"%C\", L'x');\nDO_WPRINTF_TEST(45, \"x\", \"%lc\", L'x');\nDO_WPRINTF_TEST(46, \"test string\", \"%s\", \"test string\");\nDO_WPRINTF_TEST(47, \"test string\", \"%S\", L\"test string\");\nDO_WPRINTF_TEST(48, \"test string\", \"%ls\", L\"test string\");\nDO_WPRINTF_TEST(49, \"0x12345678\", \"%p\", 0x12345678);\nDO_WPRINTF_TEST(50, \"\\%\", \"%%\");\n"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/common.mk",
    "content": "SRCFILES := main.c\nCFLAGS   := -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/host/GNUmakefile",
    "content": "include ../common.mk\ninclude $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE     := crystax-test-wchar-minmax\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\nLOCAL_SRC_FILES  := $(SRCFILES)\nLOCAL_CFLAGS     := $(CFLAGS)\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/crystax-test-wchar-minmax/jni/main.c",
    "content": "/* __WCHAR_MAX__ is known to be predefined in GCC since 3.3 and it's\n * predefined in clang 3.1 too */\n#ifdef __WCHAR_MAX__\nint wchar_max_defined = 1;\n#else\n#error __WCHAR_MAX__ undefined!\n#endif\n\n/* __WCHAR_MIN__ is known to be predefined in GCC since 4.5;\n * it's NOT predefined in clang 3.1 */\n#ifdef __WCHAR_MIN__\nint wchar_min_defined = 1;\n#else\nint wchar_min_defined = 0;\n#endif\n\n\n/* __INT_MAX__ is the predefined macro in GCC */\n#ifndef __INT_MAX__\n#error __INT_MAX__ undefined!\n#endif\n\n\n/* now we can decide how wchat_t is treated for a particular platform */\n#if (__INT_MAX__ == __WCHAR_MAX__)\nconst char *wchar_is = \"signed\";\n#else\nconst char *wchar_is = \"unsigned\";\n#endif\n\n#include <stdio.h>\n\nint main()\n{\n    printf(\"__WCHAR_MIN__ is defined: %s\\n\", (wchar_min_defined ? \"yes\" : \"no\"));\n    printf(\"__WCHAR_MAX__ is defined: %s\\n\", (wchar_max_defined ? \"yes\" : \"no\"));\n    printf(\"\\n\");\n    printf(\"wchar_t is treated as '%s' type\\n\", wchar_is);\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/emm/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nifeq ($(strip $(filter-out $(NDK_KNOWN_ARCHS),$(TARGET_ARCH))),)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := emm\nLOCAL_SRC_FILES := emm.c\ninclude $(BUILD_EXECUTABLE)\nendif\n"
  },
  {
    "path": "tests/device/emm/jni/Application.mk",
    "content": "APP_ABI := x86\nAPP_PLATFORM := android-16\n"
  },
  {
    "path": "tests/device/emm/jni/emm.c",
    "content": "#include <emmintrin.h>\n\nint main()\n{\n    __m64 *p;\n    __m128 *q;\n    int p_isaligned, q_isaligned;\n    p = _mm_malloc(7*sizeof(*p),sizeof(*p));\n    q = _mm_malloc(5*sizeof(*q),sizeof(*q));\n    p_isaligned = ((int)p % sizeof(*p)) == 0;\n    q_isaligned = ((int)q % sizeof(*q)) == 0;\n    free(p);\n    free(q);\n    return (p_isaligned && q_isaligned)? 0 : 1;\n}\n"
  },
  {
    "path": "tests/device/emm/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi != 'x86':\n        return abi\n\n    # mm_malloc.h depends on posix_memalign, which wasn't added until\n    # android-16.\n    if device_platform < 16:\n        return device_platform\n\n    return None\n"
  },
  {
    "path": "tests/device/exceptions-crash/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo_static\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_CPP_FEATURES := exceptions\nLOCAL_STATIC_LIBRARIES := gnustl_static\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_exception_crash_static\nLOCAL_SRC_FILES := main.cpp\nLOCAL_STATIC_LIBRARIES := libfoo_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_exception_crash_static2\nLOCAL_SRC_FILES := main.cpp\nLOCAL_STATIC_LIBRARIES := libfoo_static\nLOCAL_LDFLAGS := -static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo_shared\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_CPP_FEATURES := exceptions\nLOCAL_SHARED_LIBRARIES := gnustl_shared\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_exception_crash_shared\nLOCAL_SRC_FILES := main.cpp\nLOCAL_SHARED_LIBRARIES := libfoo_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,cxx-stl/gnu-libstdc++)\n"
  },
  {
    "path": "tests/device/exceptions-crash/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := none\n"
  },
  {
    "path": "tests/device/exceptions-crash/jni/foo.cpp",
    "content": "#include <new>\n#include <exception>\n#include <cstdio>\n\nvoid foo()\n{\n    try {\n        ::printf(\"Hello \");\n        throw std::exception();\n    }\n    catch (std::exception e) {\n        ::printf(\" World!\\n\");\n    }\n}\n\n"
  },
  {
    "path": "tests/device/exceptions-crash/jni/main.cpp",
    "content": "/* This test is meant to check that C++ exceptions do not crash\n * when running on Eclair or older platform releases. It will\n * always succeed on later versions of the  platform!\n */\n\nextern void foo();\n\nint main(int argc, char** argv)\n{\n    foo();\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/fenv/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_fenv_c\nLOCAL_SRC_FILES := test_fenv.c\nLOCAL_LDFLAGS += -lm\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/fenv/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a x86 mips armeabi-v7a-hard\n"
  },
  {
    "path": "tests/device/fenv/jni/test_fenv.c",
    "content": "/*\n * Copyright (C) 2012 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <assert.h>\n#include <math.h>\n#include <fenv.h>\n\n#if __CRYSTAX__\n#include <crystax/system.h>\n#endif\n\n#define ASSERT_TRUE(condition) \\\n  (condition)? (void)0 : fail(__FILE__, __LINE__, __func__, #condition)\n\n#define ASSERT_EQ(x, y) \\\n  ((x)==(y))? (void)0 : fail(__FILE__, __LINE__, __func__, #x \"==\" #y)\n\n#define ASSERT_FLOAT_EQ(x, y) \\\n  float_eq(x, y)? (void)0 : fail(__FILE__, __LINE__, __func__, \"float_eq(\" #x \",\" #y \")\")\n\n#define TEST(f, g) void g()\n\nint total_fail = 0;\nvoid fail(const char* file, int line, const char* func, const char* expr)\n{\n    printf(\"ERROR %s:%d %s: %s\\n\", file, line, func, expr);\n    total_fail++;\n}\n\n/* See AOSP external/gtest/include/gtest/internal/gtest-internal.h */\nconst int kMaxUlps = 4;\n\nint float_eq(float x, float y) {\n    int32_t ix0, iy0, ix, iy;\n\n    if (isnanf(x) || isnanf(y))\n        return 0;\n\n    ix = ix0 = *(int32_t *)&x;\n    iy = iy0 = *(int32_t *)&y;\n    if (ix < 0) {\n        ix = -ix;\n        if (!(iy0 < 0))\n            return 0;\n    }\n    if (iy < 0) {\n        iy = -iy;\n        if (!(ix0 < 0))\n            return 0;\n    }\n    return abs(ix - iy) <= kMaxUlps;\n}\n\n/* See AOSP bionic/tests/fenv_test.cpp */\n\nstatic void TestRounding(float expectation1, float expectation2) {\n  // volatile to prevent compiler optimizations.\n  volatile float f = 1.968750f;\n  volatile float m = 0x1.0p23f;\n  volatile float x = f + m;\n  ASSERT_FLOAT_EQ(expectation1, x);\n  x -= m;\n  ASSERT_EQ(expectation2, x);\n}\n\nstatic void DivideByZero() {\n  // volatile to prevent compiler optimizations.\n  volatile float zero = 0.0f;\n  volatile float result __attribute__((unused)) = 123.0f / zero;\n}\n\nTEST(fenv, fesetround_fegetround_FE_TONEAREST) {\n  fesetround(FE_TONEAREST);\n  ASSERT_EQ(FE_TONEAREST, fegetround());\n  TestRounding(8388610.0f, 2.0f);\n}\n\nTEST(fenv, fesetround_fegetround_FE_TOWARDZERO) {\n  fesetround(FE_TOWARDZERO);\n  ASSERT_EQ(FE_TOWARDZERO, fegetround());\n  TestRounding(8388609.0f, 1.0f);\n}\n\nTEST(fenv, fesetround_fegetround_FE_UPWARD) {\n  fesetround(FE_UPWARD);\n  ASSERT_EQ(FE_UPWARD, fegetround());\n  TestRounding(8388610.0f, 2.0f);\n}\n\nTEST(fenv, fesetround_fegetround_FE_DOWNWARD) {\n  fesetround(FE_DOWNWARD);\n  ASSERT_EQ(FE_DOWNWARD, fegetround());\n  TestRounding(8388609.0f, 1.0f);\n}\n\nTEST(fenv, feclearexcept_fetestexcept) {\n  // Clearing clears.\n  feclearexcept(FE_ALL_EXCEPT);\n  ASSERT_EQ(0, fetestexcept(FE_ALL_EXCEPT));\n\n  // Dividing by zero sets FE_DIVBYZERO.\n  DivideByZero();\n  int raised = fetestexcept(FE_DIVBYZERO | FE_OVERFLOW);\n  ASSERT_TRUE((raised & FE_OVERFLOW) == 0);\n  ASSERT_TRUE((raised & FE_DIVBYZERO) != 0);\n\n  // Clearing an unset bit is a no-op.\n  feclearexcept(FE_OVERFLOW);\n  ASSERT_TRUE((raised & FE_OVERFLOW) == 0);\n  ASSERT_TRUE((raised & FE_DIVBYZERO) != 0);\n\n  // Clearing a set bit works.\n  feclearexcept(FE_DIVBYZERO);\n  ASSERT_EQ(0, fetestexcept(FE_ALL_EXCEPT));\n}\n\nint main()\n{\n#if __CRYSTAX__ && __i386__\n    /* fenv tests failed on x86 emulator */\n    if (crystax_device_type() != CRYSTAX_DEVICE_TYPE_EMULATOR) {\n#endif\n    fesetround_fegetround_FE_TONEAREST();\n    fesetround_fegetround_FE_TOWARDZERO();\n    fesetround_fegetround_FE_UPWARD();\n    fesetround_fegetround_FE_DOWNWARD();\n    feclearexcept_fetestexcept();\n    printf(\"total_fail = %d\\n\", total_fail);\n#if __CRYSTAX__ && __i386__\n    }\n#endif\n    return total_fail == 0 ? 0 : 1;\n}\n"
  },
  {
    "path": "tests/device/fenv/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'armeabi':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/gnustl-shared-1/README",
    "content": "This checks that one can link against gnustl_shared and still throw exceptions\nbetween several binaries. I.e. one exception is thrown in libfoo.so and caught\ninto the main executable.\n\n"
  },
  {
    "path": "tests/device/gnustl-shared-1/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl_shared_link\nLOCAL_SRC_FILES := main.cpp\nLOCAL_SHARED_LIBRARIES := libfoo\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/gnustl-shared-1/jni/Application.mk",
    "content": "APP_STL := gnustl_shared\nAPP_ABI := all\n\nAPP_CPPFLAGS := -fexceptions\n"
  },
  {
    "path": "tests/device/gnustl-shared-1/jni/foo.cpp",
    "content": "#include <new>\n#include <exception>\n#include <cstdio>\n\nint foo(void)\n{\n    ::printf(\"Hello \");\n    throw std::exception();\n}\n\n"
  },
  {
    "path": "tests/device/gnustl-shared-1/jni/main.cpp",
    "content": "#include <cstdio>\n#include <exception>\n\nint foo(void);\n\nint main(void)\n{\n    try {\n        (void) foo();\n    }\n    // Catch all exceptions. Note that if we used catch (std::exception& e)\n    // instead, we would need to activate rtti as well to avoid crashing\n    // in the C++ runtime.\n    catch (...) {\n        ::printf(\" World!\\n\");\n    }\n    return 0;\n}"
  },
  {
    "path": "tests/device/issue19851-sigsetjmp/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue19851-sigsetjmp\nLOCAL_SRC_FILES := issue19851-sigsetjmp.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue19851-sigsetjmp/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/issue19851-sigsetjmp/jni/issue19851-sigsetjmp.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <stdio.h>\n#include <signal.h>\n#include <setjmp.h>\n\nstatic sigjmp_buf sbuf;\n\nvoid handler(int sig)\n{\n    printf(\"In handler()\\n\");\n    siglongjmp(sbuf, 99);\n    printf(\"After calling siglongjmp, but you won't see me here.\\n\");\n}\n\nvoid foo()\n{\n    struct sigaction sact;\n    sigset_t sset;\n    printf(\"In foo()\\n\");\n\n /* Setup signal handler for SIGUSR2 */\n    sigemptyset(&sact.sa_mask);\n    sact.sa_flags = 0;\n    sact.sa_handler = handler;\n    sigaction(SIGUSR2, &sact, NULL);\n\n /* Unblock SIGUSR2 */\n    sigemptyset(&sset);\n    sigaddset(&sset, SIGUSR2);\n    sigprocmask(SIG_UNBLOCK, &sset, NULL);\n\n /* Action */\n    kill(getpid(), SIGUSR2);\n\n    printf(\"After calling kill, but you won't see me here.\\n\");\n}\n\nvoid bar()\n{\n    printf(\"In bar()\\n\");\n    foo();\n    printf(\"After calling foo, but you won't see me here.\\n\");\n}\n\nint main()\n{\n    int code, ret;\n    sigset_t sset;\n    printf(\"In main()\\n\");\n    sigemptyset(&sset);\n    sigaddset(&sset, SIGUSR1);\n    sigaddset(&sset, SIGUSR2);\n    sigprocmask(SIG_SETMASK, &sset, NULL);\n    if ((code = sigsetjmp(sbuf, 1)) == 0)\n    {\n        bar();\n        ret = 0xDEADBEEF;\n    }\n    else\n    {\n        printf(\"siglongjmp() back to main, code = %d\\n\", code);\n      /* Make sure SIGUSR2 still blocked */\n        sigprocmask(SIG_SETMASK, NULL, &sset);\n        ret = sigismember(&sset, SIGUSR2)? 0 : -1;\n    }\n    printf(\"ret = %d\\n\", ret);\n\n    return ret;\n}\n"
  },
  {
    "path": "tests/device/issue19851-sigsetjmp/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if device_platform <= 10:\n        return device_platform, 'http://b/26015756'\n    return None, None\n"
  },
  {
    "path": "tests/device/issue20176-__gnu_Unwind_Find_exidx/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue20176-__gnu_Unwind_Find_exidx\nLOCAL_SRC_FILES := issue20176-__gnu_Unwind_Find_exidx.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue20176-__gnu_Unwind_Find_exidx/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\nAPP_STL := gnustl_shared\nAPP_CPPFLAGS += -fexceptions\nAPP_CPPFLAGS += -frtti\n"
  },
  {
    "path": "tests/device/issue20176-__gnu_Unwind_Find_exidx/jni/issue20176-__gnu_Unwind_Find_exidx.cpp",
    "content": "#include <new>\n#include <exception>\n#include <cstdio>\n\n/* Stubbed out in libdl and defined in the dynamic linker.\n * Same semantics as __gnu_Unwind_Find_exidx().\n */\ntypedef long unsigned int *_Unwind_Ptr;\nextern \"C\" _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount);\nextern \"C\" _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr pc, int *pcount)\n{\n    _Unwind_Ptr ret_pc;\n    printf(\"%p -> \", pc);\n    ret_pc = dl_unwind_find_exidx(pc, pcount);\n    printf(\"%p %d\\n\", ret_pc, *pcount);\n    return ret_pc;\n}\nstatic void* g_func_ptr;\n\nstatic void foo(void)\n{\n    try\n    {\n        ::printf(\"Hello \");\n        throw std::exception();\n    } catch (const std::exception &e)\n    {\n        ::printf(\" World!\\n\");\n    }\n}\n\nint main(int argc, char** argv)\n{\n    int count;\n    g_func_ptr = (void*)__gnu_Unwind_Find_exidx;\n\n    __gnu_Unwind_Find_exidx((_Unwind_Ptr)main, &count); // This one succeed\n\n    // This one crash on Android <= 2.1.\n    // The lcoal __gnu_Unwind_Find_exidx() isn't even called.\n    // Need to recompile Android 2.1 from source and debug platform from there\n    foo();\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/issue20176-__gnu_Unwind_Find_exidx/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi not in ('armeabi', 'armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue22165_throwable\nLOCAL_SRC_FILES := throwable.cpp\nLOCAL_CPP_FEATURES := exceptions\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue22165_main\nLOCAL_SRC_FILES := main.cpp\nLOCAL_CPP_FEATURES := exceptions\nLOCAL_SHARED_LIBRARIES := issue22165_throwable\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/main.cpp",
    "content": "#include <iostream>\n#include <stdexcept>\n\n#include \"myexception.h\"\n#include \"throwable.h\"\n\nint main(int /*argc*/, char** /*argv*/)\n{\n    int result = 0;\n    std::cout << \"call throw_an_exception()\" << std::endl;\n    \n    try {\n        throw_an_exception();\n    } catch (my_exception const& e) {\n        std::cout << \"my_exception caught!\" << std::endl;\n    } catch (std::exception const& e) {\n        std::cout << \"ERROR: exception caught!\" << std::endl;\n        result = 1;\n    }\n\n    std::cout << \"finished\" << std::endl;\n    \n    return result;\n}\n"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/myexception.h",
    "content": "#ifndef MYEXCEPTION_H__\n#define MYEXCEPTION_H__\n\n#include <string>\n#include <stdexcept>\n#include <iostream>\n\nclass my_exception : public std::runtime_error\n{\npublic:\n    my_exception(std::string const& w)\n        : std::runtime_error(w)\n    { \n        std::cout << \"yep! i am in constructor\" << std::endl; \n    }\n\n    virtual ~my_exception() throw() \n    {\n        std::cout << \"yep! i am in desctuctor\" << std::endl; \n    }\n};\n\n#endif //MYEXCEPTION_H__\n"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/throwable.cpp",
    "content": "#include <iostream>\n\n#include \"myexception.h\"\n#include \"throwable.h\"\n\nint throw_an_exception() \n{\n    std::cout << \"throw_an_exception()\" << std::endl;\n    throw my_exception(\"my exception\");\n}"
  },
  {
    "path": "tests/device/issue22165-typeinfo/jni/throwable.h",
    "content": "#ifndef THROWABLE_H__\n#define THROWABLE_H__\n\nint throw_an_exception();\n\n#endif //THROWABLE_H__\n"
  },
  {
    "path": "tests/device/issue28598-linker-global-ref/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue28598_liba\nLOCAL_SRC_FILES := liba.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue28598_main\nLOCAL_SRC_FILES := main.cpp\nLOCAL_SHARED_LIBRARIES := issue28598_liba\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue28598-linker-global-ref/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/issue28598-linker-global-ref/jni/liba.cpp",
    "content": "#include <cstdio>\n#include \"liba.h\"\nint global = 0x42;\nvoid func()\n{\n    printf(\"global = 0x%x (%p)\\n\", global, &global);\n}\n\n"
  },
  {
    "path": "tests/device/issue28598-linker-global-ref/jni/liba.h",
    "content": "extern int global;\nvoid func();"
  },
  {
    "path": "tests/device/issue28598-linker-global-ref/jni/main.cpp",
    "content": "#include <cstdio>\n#include \"liba.h\"\nint *global_ptr = &global; // Without this line, everything is fine\nint main()\n{\n    func();\n    printf(\"global = 0x%x (%p)%s\\n\", global, &global, ((global != 0x42)? \", ERROR!!!\":\"\"));\n    return global != 0x42;\n}\n\n"
  },
  {
    "path": "tests/device/issue35933-lambda/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue35933-lambda\nLOCAL_SRC_FILES := issue35933-lambda.cpp\nLOCAL_CFLAGS += -std=gnu++0x\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue35933-lambda/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared"
  },
  {
    "path": "tests/device/issue35933-lambda/jni/issue35933-lambda.cpp",
    "content": "#include <utility> // for std::forward\n#include <iostream>\n\n\nstatic int total = 0;\nstatic void add(int n)\n{\n\tstd::cout << \"Adding \" << n << std::endl;\n\ttotal += n;\n}\n\nstatic void display(const char message[])\n{\n\tstd::cout << message << \": \" << total << std::endl;\n}\n\ntemplate <class Callable, typename... ArgTypes>\nvoid* Call(Callable native_func, ArgTypes&&... args) noexcept\n{\n\tstd::clog << \"in Call\" << std::endl;\n\treturn native_func(std::forward<ArgTypes>(args)...);\n}\n\nstatic void* test_lambda(int delta)\n{\n\tstd::clog << \"in test_lambda\" << std::endl;\n\treturn Call([=](int delta)\n\t{\n\t\tstd::clog << \"in lambda\" << std::endl;\n\t\tadd(delta);\n\t\tdisplay(\"total\");\n\t\treturn nullptr;\n\t}, delta);\n}\n\nint main(int argc, char* argv[])\n{\n\tstd::clog << \"start\" << std::endl;\n\ttest_lambda(5);\n\tstd::clog << \"after first call\" << std::endl;\n\ttest_lambda(20);\n\tstd::clog << \"after second call\" << std::endl;\n\ttest_lambda(-256);\n\tstd::clog << \"after third call\" << std::endl;\n        return total != -231;\n}\n"
  },
  {
    "path": "tests/device/issue39680-chrono-resolution/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue39680-chrono-resolution\nLOCAL_SRC_FILES := issue39680-chrono-resolution.cpp\nLOCAL_CFLAGS += -std=gnu++0x\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/issue39680-chrono-resolution/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/issue39680-chrono-resolution/jni/issue39680-chrono-resolution.cpp",
    "content": "#include <iostream>\n#include <chrono>\n#include <ratio>\n\n// In NDK GCC 4.6 and below, \"steady_clock\" is called \"monotonic_clock\",\n// and \"is_steady\" is called \"is_monotonic\".  One may be tempted to use\n// __GLIBCXX__ to detect it by doing\n//\n//   # if __GLIBCXX__ < 20120920  /* 20120920 is the date of gcc-4.7 in NDK */\n//\n// But __GLIBCXX__ get date from gcc/DATESTAMP.  Although it never changes\n// (so far) once deposit in toolchain/gcc.git, it gets daily bump in upstream.\n// Thus, this approach may not work in other gcc release.\n//\n// We can detect it by\n//\n//     #if !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))\n//\n// But unfortunately clang uses gcc libstdc++ w/o defining __GNUC__ at all.\n// Since clang now sides with gcc-4.7, we need the following intead\n//\n//     #if !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || defined(__clang__))\n//\n// This approach won't be valid if clang sides with gcc4.6 (in standalone mode, for\n// example).\n//\n// ToDo: better approach\n\n#if !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || defined(__clang__))\nnamespace std {\nnamespace chrono {\n    typedef monotonic_clock steady_clock;\n}\n}\n#define is_steady is_monotonic\n#endif\n\ntemplate <typename C>\nvoid printClockData (bool &is_high_res, bool &is_steady)\n{\n    using namespace std;\n\n    cout << \"- precision: \";\n    // if time unit is less or equal one millisecond\n    typedef typename C::period P;// type of time unit\n    if (ratio_less_equal<P,milli>::value) {\n       // convert to and print as milliseconds\n       typedef typename ratio_multiply<P,kilo>::type TT;\n       cout << fixed << double(TT::num)/TT::den\n            << \" milliseconds\" << endl;\n       is_high_res = true;\n    }\n    else {\n        // print as seconds\n        cout << fixed << double(P::num)/P::den << \" seconds\" << endl;\n       is_high_res = false;\n    }\n    cout << \"- is_steady: \" << boolalpha << C::is_steady << endl;\n    is_steady = C::is_steady;\n}\n\nint main()\n{\n    bool is_high_res1, is_high_res2, is_high_res3, is_steady;\n    std::cout << \"system_clock: \" << std::endl;\n    printClockData<std::chrono::system_clock>(is_high_res1, is_steady);\n    std::cout << \"\\nhigh_resolution_clock: \" << std::endl;\n    printClockData<std::chrono::high_resolution_clock>(is_high_res2, is_steady);\n    std::cout << \"\\nsteady_clock: \" << std::endl;\n    printClockData<std::chrono::steady_clock>(is_high_res3, is_steady);\n\n    return (is_high_res1 && is_high_res2 && is_high_res3 && is_steady)? 0 : 1;\n}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/COPYING",
    "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.\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE    := sdktest\nLOCAL_SRC_FILES := main.cpp \nLOCAL_C_INCLUDES += jni/boost\nLOCAL_CFLAGS += -fexceptions -frtti -DCALL_X\n\n#LOCAL_CFLAGS += -O2\n\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_PLATFORM := android-9\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/compare.hpp",
    "content": "//  Boost string_algo library compare.hpp header file  -------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_COMPARE_HPP\n#define BOOST_STRING_COMPARE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <locale>\n\n/*! \\file\n    Defines element comparison predicates. Many algorithms in this library can\n    take an additional argument with a predicate used to compare elements.\n    This makes it possible, for instance, to have case insensitive versions\n    of the algorithms.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n        //  is_equal functor  -----------------------------------------------//\n\n        //! is_equal functor\n        /*!\n            Standard STL equal_to only handle comparison between arguments\n            of the same type. This is a less restrictive version which wraps operator ==.\n        */\n        struct is_equal\n        {\n            //! Function operator\n            /*!\n                Compare two operands for equality\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1==Arg2;\n            }\n        };\n\n        //! case insensitive version of is_equal\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_iequal\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_iequal( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)==std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n        //  is_less functor  -----------------------------------------------//\n\n        //! is_less functor\n        /*!\n            Convenient version of standard std::less. Operation is templated, therefore it is \n            not required to specify the exact types upon the construction\n         */\n        struct is_less\n        {\n            //! Functor operation\n            /*!\n                Compare two operands using > operator\n             */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1<Arg2;\n            }\n        };\n\n\n        //! case insensitive version of is_less\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_iless\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_iless( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)<std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n        //  is_not_greater functor  -----------------------------------------------//\n\n        //! is_not_greater functor\n        /*!\n            Convenient version of standard std::not_greater_to. Operation is templated, therefore it is \n            not required to specify the exact types upon the construction\n         */\n        struct is_not_greater\n        {\n            //! Functor operation\n            /*!\n                Compare two operands using > operator\n             */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                return Arg1<=Arg2;\n            }\n        };\n\n\n        //! case insensitive version of is_not_greater\n        /*!\n            Case insensitive comparison predicate. Comparison is done using\n            specified locales.\n        */\n        struct is_not_igreater\n        {\n            //! Constructor\n            /*!\n                \\param Loc locales used for comparison\n            */\n            is_not_igreater( const std::locale& Loc=std::locale() ) :\n                m_Loc( Loc ) {}\n\n            //! Function operator\n            /*!\n                Compare two operands. Case is ignored.\n            */\n            template< typename T1, typename T2 >\n                bool operator()( const T1& Arg1, const T2& Arg2 ) const\n            {\n                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)\n                    return std::toupper(Arg1)<=std::toupper(Arg2);\n                #else\n                    return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);\n                #endif\n            }\n\n        private:\n            std::locale m_Loc;\n        };\n\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::is_equal;\n    using algorithm::is_iequal;\n    using algorithm::is_less;\n    using algorithm::is_iless;\n    using algorithm::is_not_greater;\n    using algorithm::is_not_igreater;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_COMPARE_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/concept.hpp",
    "content": "//  Boost string_algo library concept.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONCEPT_HPP\n#define BOOST_STRING_CONCEPT_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n/*! \\file \n    Defines concepts used in string_algo library\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n        //! Finder concept\n        /*!\n            Defines the Finder concept. Finder is a functor which selects\n            an arbitrary part of a string. Search is performed on\n            the range specified by starting and ending iterators.\n\n            Result of the find operation must be convertible to iterator_range.\n        */\n        template<typename FinderT, typename IteratorT>\n        struct FinderConcept\n        {\n        private:\n            typedef iterator_range<IteratorT> range;\n        public:\n            void constraints()\n            {\n                // Operation\n                r=(*pF)(i,i);\n            }\n        private:\n            range r;\n            IteratorT i;\n            FinderT* pF;    \n        }; // Finder_concept\n\n        \n        //! Formatter concept\n        /*!\n            Defines the Formatter concept. Formatter is a functor, which\n            takes a result from a finder operation and transforms it\n            in a specific way.\n\n            Result must be a container supported by container_traits, \n            or a reference to it.\n        */\n        template<typename FormatterT, typename FinderT, typename IteratorT>\n        struct FormatterConcept\n        {\n        public:\n            void constraints()\n            {\n                // Operation\n                ::boost::begin((*pFo)( (*pF)(i,i) ));\n                ::boost::end((*pFo)( (*pF)(i,i) ));\n            }\n        private:\n            IteratorT i;\n            FinderT* pF;\n            FormatterT *pFo;\n        }; // FormatterConcept;\n\n    } // namespace algorithm\n} // namespace boost\n\n\n\n\n#endif  // BOOST_STRING_CONCEPT_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/config.hpp",
    "content": "//  Boost string_algo library config.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONFIG_HPP\n#define BOOST_STRING_CONFIG_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_STRING_DEDUCED_TYPENAME\n#   error \"macro already defined!\"\n#endif\n\n#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME\n\n// Metrowerks workaround\n#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x\n#pragma parse_func_templ off\n#endif\n\n#endif  // BOOST_STRING_CONFIG_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/constants.hpp",
    "content": "//  Boost string_algo library constants.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_CONSTANTS_HPP\n#define BOOST_STRING_CONSTANTS_HPP\n\nnamespace boost {\n    namespace algorithm {\n\n    //! Token compression mode \n    /*!\n        Specifies token compression mode for the token_finder.\n    */\n    enum token_compress_mode_type\n    {\n        token_compress_on,    //!< Compress adjacent tokens\n        token_compress_off  //!< Do not compress adjacent tokens\n    };\n    \n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::token_compress_on;\n    using algorithm::token_compress_off;\n\n} // namespace boost\n\n#endif  // BOOST_STRING_CONSTANTS_HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/find_format.hpp",
    "content": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n// \n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/algorithm/string/detail/find_format_store.hpp>\n#include <boost/algorithm/string/detail/replace_storage.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n// find_format_copy (iterator variant) implementation -------------------------------//\n\n           template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline OutputIteratorT find_format_copy_impl2(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult )\n            {       \n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Match not found - return original sequence\n                    Output = std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                    return Output;\n                }\n\n                // Copy the beginning of the sequence\n                Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output );\n                // Format find result\n                // Copy formated result\n                Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );\n                // Copy the rest of the sequence\n                Output = std::copy( M.end(), ::boost::end(Input), Output );\n\n                return Output;\n            }\n\n            template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT >\n            inline OutputIteratorT find_format_copy_impl(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult )\n            {   \n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_copy_impl2( \n                        Output,\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                }\n            }\n\n \n// find_format_copy implementation --------------------------------------------------//\n\n           template< \n                typename InputT, \n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline InputT find_format_copy_impl2(\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Match not found - return original sequence\n                    return InputT( Input );\n                }\n\n                InputT Output;\n                // Copy the beginning of the sequence\n                insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );\n                // Copy formated result\n                insert( Output, ::boost::end(Output), M.format_result() );\n                // Copy the rest of the sequence\n                insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );\n\n                return Output;\n            }\n\n            template< \n                typename InputT, \n                typename FormatterT,\n                typename FindResultT >\n            inline InputT find_format_copy_impl(\n                const InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_copy_impl2(\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return Input;\n                }\n            }\n\n // replace implementation ----------------------------------------------------//\n        \n            template<\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline void find_format_impl2( \n                InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef find_format_store<\n                    BOOST_STRING_TYPENAME \n                        range_iterator<InputT>::type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                if ( !M )\n                {\n                    // Search not found - return original sequence\n                    return;\n                }\n\n                // Replace match\n                ::boost::algorithm::detail::replace( Input, M.begin(), M.end(), M.format_result() );\n            }\n\n            template<\n                typename InputT,\n                typename FormatterT,\n                typename FindResultT >\n            inline void find_format_impl( \n                InputT& Input,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    ::boost::algorithm::detail::find_format_impl2(\n                        Input,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/find_format_all.hpp",
    "content": "//  Boost string_algo library find_format_all.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/algorithm/string/detail/find_format_store.hpp>\n#include <boost/algorithm/string/detail/replace_storage.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n// find_format_all_copy (iterator variant) implementation ---------------------------//\n\n           template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline OutputIteratorT find_format_all_copy_impl2(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult )\n            {       \n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n\n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                // Initialize last match\n                input_iterator_type LastMatch=::boost::begin(Input);\n\n                // Iterate through all matches\n                while( M )\n                {\n                    // Copy the beginning of the sequence\n                    Output = std::copy( LastMatch, M.begin(), Output );\n                    // Copy formated result\n                    Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );\n\n                    // Proceed to the next match\n                    LastMatch=M.end();\n                    M=Finder( LastMatch, ::boost::end(Input) );\n                }\n\n                // Copy the rest of the sequence\n                Output = std::copy( LastMatch, ::boost::end(Input), Output );\n\n                return Output;\n            }\n\n            template< \n                typename OutputIteratorT,\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline OutputIteratorT find_format_all_copy_impl(\n                OutputIteratorT Output,\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult )\n            {   \n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_all_copy_impl2( \n                        Output,\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );\n                }\n            }\n\n // find_format_all_copy implementation ----------------------------------------------//\n\n           template< \n                typename InputT, \n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline InputT find_format_all_copy_impl2(\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult,\n                const FormatResultT& FormatResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n\n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n\n                // Initialize last match\n                input_iterator_type LastMatch=::boost::begin(Input);\n\n                // Output temporary\n                InputT Output;\n\n                // Iterate through all matches\n                while( M )\n                {\n                    // Copy the beginning of the sequence\n                    insert( Output, ::boost::end(Output), LastMatch, M.begin() );\n                    // Copy formated result\n                    insert( Output, ::boost::end(Output), M.format_result() );\n\n                    // Proceed to the next match\n                    LastMatch=M.end();\n                    M=Finder( LastMatch, ::boost::end(Input) );\n                }\n\n                // Copy the rest of the sequence\n                ::boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );\n\n                return Output;\n            }\n\n            template< \n                typename InputT, \n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline InputT find_format_all_copy_impl(\n                const InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                const FindResultT& FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    return ::boost::algorithm::detail::find_format_all_copy_impl2(\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                } else {\n                    return Input;\n                }\n            }\n\n // find_format_all implementation ------------------------------------------------//\n        \n            template<\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT,\n                typename FormatResultT >\n            inline void find_format_all_impl2( \n                InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                FindResultT FindResult,\n                FormatResultT FormatResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_iterator<InputT>::type input_iterator_type; \n                typedef find_format_store<\n                        input_iterator_type, \n                        FormatterT,\n                        FormatResultT > store_type;\n\n                // Create store for the find result\n                store_type M( FindResult, FormatResult, Formatter );\n          \n                // Instantiate replacement storage\n                std::deque<\n                    BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;\n\n                // Initialize replacement iterators\n                input_iterator_type InsertIt=::boost::begin(Input);\n                input_iterator_type SearchIt=::boost::begin(Input);\n                \n                while( M )\n                {\n                    // process the segment\n                    InsertIt=process_segment( \n                        Storage,\n                        Input,\n                        InsertIt,\n                        SearchIt,\n                        M.begin() );\n                    \n                    // Adjust search iterator\n                    SearchIt=M.end();\n\n                    // Copy formated replace to the storage\n                    ::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() );\n\n                    // Find range for a next match\n                    M=Finder( SearchIt, ::boost::end(Input) );\n                }\n\n                // process the last segment\n                InsertIt=::boost::algorithm::detail::process_segment( \n                    Storage,\n                    Input,\n                    InsertIt,\n                    SearchIt,\n                    ::boost::end(Input) );\n                \n                if ( Storage.empty() )\n                {\n                    // Truncate input\n                    ::boost::algorithm::detail::erase( Input, InsertIt, ::boost::end(Input) );\n                }\n                else\n                {\n                    // Copy remaining data to the end of input\n                    ::boost::algorithm::detail::insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );\n                }\n            }\n\n            template<\n                typename InputT,\n                typename FinderT,\n                typename FormatterT,\n                typename FindResultT >\n            inline void find_format_all_impl( \n                InputT& Input,\n                FinderT Finder,\n                FormatterT Formatter,\n                FindResultT FindResult)\n            {\n                if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {\n                    ::boost::algorithm::detail::find_format_all_impl2(\n                        Input,\n                        Finder,\n                        Formatter,\n                        FindResult,\n                        Formatter(FindResult) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/find_format_store.hpp",
    "content": "//  Boost string_algo library find_format_store.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  temporary format and find result storage --------------------------------//\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(push)\n#pragma warning(disable:4512) //assignment operator could not be generated\n#endif\n            template< \n                typename ForwardIteratorT,\n                typename FormatterT,\n                typename FormatResultT >\n            class find_format_store : \n                public iterator_range<ForwardIteratorT>\n            {\n            public:\n                // typedefs\n                typedef iterator_range<ForwardIteratorT> base_type;\n                typedef FormatterT  formatter_type;\n                typedef FormatResultT format_result_type;\n                \n            public:\n                // Construction\n                find_format_store( \n                        const base_type& FindResult,\n                        const format_result_type& FormatResult,\n                        const formatter_type& Formatter ) :\n                    base_type(FindResult),\n                    m_FormatResult(FormatResult),\n                    m_Formatter(Formatter) {}\n\n                // Assignment\n                template< typename FindResultT >\n                find_format_store& operator=( FindResultT FindResult )\n                {\n                    iterator_range<ForwardIteratorT>::operator=(FindResult);\n                    if( !this->empty() ) {\n                        m_FormatResult=m_Formatter(FindResult);\n                    }\n                    \n                    return *this;\n                }\n\n                // Retrieve format result\n                const format_result_type& format_result()\n                {   \n                    return m_FormatResult;\n                }\n\n            private:\n                format_result_type m_FormatResult;\n                const formatter_type& m_Formatter;\n            };\n\n            template<typename InputT, typename FindResultT>\n            bool check_find_result(InputT&, FindResultT& FindResult)\n            {\n                typedef BOOST_STRING_TYPENAME \n                    range_const_iterator<InputT>::type input_iterator_type; \n                iterator_range<input_iterator_type> ResultRange(FindResult);\n                return !ResultRange.empty();\n            }\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)\n#pragma warning(pop)\n#endif\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/finder.hpp",
    "content": "//  Boost string_algo library finder.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FINDER_DETAIL_HPP\n#define BOOST_STRING_FINDER_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/algorithm/string/constants.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/as_literal.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n\n//  find first functor -----------------------------------------------//\n\n            // find a subsequence in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, functor returns <End,End>\n            */\n            template<typename SearchIteratorT,typename PredicateT>\n            struct first_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n\n                // Construction\n                template< typename SearchT >\n                first_finderF( const SearchT& Search, PredicateT Comp ) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}\n                first_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        PredicateT Comp ) :\n                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n                    typedef ForwardIteratorT input_iterator_type;\n\n                    // Outer loop\n                    for(input_iterator_type OuterIt=Begin;\n                        OuterIt!=End;\n                        ++OuterIt)\n                    {\n                        // Sanity check\n                        if( boost::empty(m_Search) )\n                            return result_type( End, End );\n\n                        input_iterator_type InnerIt=OuterIt;\n                        search_iterator_type SubstrIt=m_Search.begin();\n                        for(;\n                            InnerIt!=End && SubstrIt!=m_Search.end();\n                            ++InnerIt,++SubstrIt)\n                        {\n                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )\n                                break;\n                        }\n\n                        // Substring matching succeeded\n                        if ( SubstrIt==m_Search.end() )\n                            return result_type( OuterIt, InnerIt );\n                    }\n\n                    return result_type( End, End );\n                }\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                PredicateT m_Comp;\n            };\n\n//  find last functor -----------------------------------------------//\n\n            // find the last match a subseqeunce in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, returns <End,End>\n            */\n            template<typename SearchIteratorT, typename PredicateT>\n            struct last_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n                typedef first_finderF<\n                    search_iterator_type,\n                    PredicateT> first_finder_type;\n\n                // Construction\n                template< typename SearchT >\n                last_finderF( const SearchT& Search, PredicateT Comp ) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}\n                last_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        PredicateT Comp ) :\n                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    typedef BOOST_STRING_TYPENAME boost::detail::\n                        iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                    return findit( Begin, End, category() );\n                }\n\n            private:\n                // forward iterator\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                findit(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    std::forward_iterator_tag ) const\n                {\n                    typedef ForwardIteratorT input_iterator_type;\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    first_finder_type first_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M=first_finder( Begin, End );\n                    result_type Last=M;\n\n                    while( M )\n                    {\n                        Last=M;\n                        M=first_finder( ::boost::end(M), End );\n                    }\n\n                    return Last;\n                }\n\n                // bidirectional iterator\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                findit(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    std::bidirectional_iterator_tag ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n                    typedef ForwardIteratorT input_iterator_type;\n\n                    // Outer loop\n                    for(input_iterator_type OuterIt=End;\n                        OuterIt!=Begin; )\n                    {\n                        input_iterator_type OuterIt2=--OuterIt;\n\n                        input_iterator_type InnerIt=OuterIt2;\n                        search_iterator_type SubstrIt=m_Search.begin();\n                        for(;\n                            InnerIt!=End && SubstrIt!=m_Search.end();\n                            ++InnerIt,++SubstrIt)\n                        {\n                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )\n                                break;\n                        }\n\n                        // Substring matching succeeded\n                        if( SubstrIt==m_Search.end() )\n                            return result_type( OuterIt2, InnerIt );\n                    }\n\n                    return result_type( End, End );\n                }\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                PredicateT m_Comp;\n            };\n\n//  find n-th functor -----------------------------------------------//\n\n            // find the n-th match of a subsequence in the sequence ( functor )\n            /*\n                Returns a pair <begin,end> marking the subsequence in the sequence.\n                If the find fails, returns <End,End>\n            */\n            template<typename SearchIteratorT, typename PredicateT>\n            struct nth_finderF\n            {\n                typedef SearchIteratorT search_iterator_type;\n                typedef first_finderF<\n                    search_iterator_type,\n                    PredicateT> first_finder_type;\n                typedef last_finderF<\n                    search_iterator_type,\n                    PredicateT> last_finder_type;\n\n                // Construction\n                template< typename SearchT >\n                nth_finderF(\n                        const SearchT& Search,\n                        int Nth,\n                        PredicateT Comp) :\n                    m_Search(::boost::begin(Search), ::boost::end(Search)),\n                    m_Nth(Nth),\n                    m_Comp(Comp) {}\n                nth_finderF(\n                        search_iterator_type SearchBegin,\n                        search_iterator_type SearchEnd,\n                        int Nth,\n                        PredicateT Comp) :\n                    m_Search(SearchBegin, SearchEnd),\n                    m_Nth(Nth),\n                    m_Comp(Comp) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_Nth>=0)\n                    {\n                        return find_forward(Begin, End, m_Nth);\n                    }\n                    else\n                    {\n                        return find_backward(Begin, End, -m_Nth);\n                    }\n\n                }\n\n            private:\n                // Implementation helpers\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                find_forward(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    unsigned int N) const\n                {\n                    typedef ForwardIteratorT input_iterator_type;\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    // Sanity check\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    // Instantiate find functor\n                    first_finder_type first_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M( Begin, Begin );\n\n                    for( unsigned int n=0; n<=N; ++n )\n                    {\n                        // find next match\n                        M=first_finder( ::boost::end(M), End );\n\n                        if ( !M )\n                        {\n                            // Subsequence not found, return\n                            return M;\n                        }\n                    }\n\n                    return M;\n                }\n\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                find_backward(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End,\n                    unsigned int N) const\n                {\n                    typedef ForwardIteratorT input_iterator_type;\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    // Sanity check\n                    if( boost::empty(m_Search) )\n                        return result_type( End, End );\n\n                    // Instantiate find functor\n                    last_finder_type last_finder(\n                        m_Search.begin(), m_Search.end(), m_Comp );\n\n                    result_type M( End, End );\n\n                    for( unsigned int n=1; n<=N; ++n )\n                    {\n                        // find next match\n                        M=last_finder( Begin, ::boost::begin(M) );\n\n                        if ( !M )\n                        {\n                            // Subsequence not found, return\n                            return M;\n                        }\n                    }\n\n                    return M;\n                }\n\n\n            private:\n                iterator_range<search_iterator_type> m_Search;\n                int m_Nth;\n                PredicateT m_Comp;\n            };\n\n//  find head/tail implementation helpers ---------------------------//\n\n            template<typename ForwardIteratorT>\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::forward_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                input_iterator_type It=Begin;\n                for(\n                    unsigned int Index=0;\n                    Index<N && It!=End; ++Index,++It ) {};\n\n                return result_type( Begin, It );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::random_access_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )\n                    return result_type( Begin, End );\n\n                return result_type(Begin,Begin+N);\n            }\n\n            // Find head implementation\n            template<typename ForwardIteratorT>\n                iterator_range<ForwardIteratorT>\n            find_head_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N )\n            {\n                typedef BOOST_STRING_TYPENAME boost::detail::\n                    iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                return ::boost::algorithm::detail::find_head_impl( Begin, End, N, category() );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::forward_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                unsigned int Index=0;\n                input_iterator_type It=Begin;\n                input_iterator_type It2=Begin;\n\n                // Advance It2 by N increments\n                for( Index=0; Index<N && It2!=End; ++Index,++It2 ) {};\n\n                // Advance It, It2 to the end\n                for(; It2!=End; ++It,++It2 ) {};\n\n                return result_type( It, It2 );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::bidirectional_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                input_iterator_type It=End;\n                for(\n                    unsigned int Index=0;\n                    Index<N && It!=Begin; ++Index,--It ) {};\n\n                return result_type( It, End );\n            }\n\n            template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N,\n                std::random_access_iterator_tag )\n            {\n                typedef ForwardIteratorT input_iterator_type;\n                typedef iterator_range<ForwardIteratorT> result_type;\n\n                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )\n                    return result_type( Begin, End );\n\n                return result_type( End-N, End );\n            }\n\n                        // Operation\n            template< typename ForwardIteratorT >\n            iterator_range<ForwardIteratorT>\n            find_tail_impl(\n                ForwardIteratorT Begin,\n                ForwardIteratorT End,\n                unsigned int N )\n            {\n                typedef BOOST_STRING_TYPENAME boost::detail::\n                    iterator_traits<ForwardIteratorT>::iterator_category category;\n\n                return ::boost::algorithm::detail::find_tail_impl( Begin, End, N, category() );\n            }\n\n\n\n//  find head functor -----------------------------------------------//\n\n\n            // find a head in the sequence ( functor )\n            /*\n                This functor find a head of the specified range. For\n                a specified N, the head is a subsequence of N starting\n                elements of the range.\n            */\n            struct head_finderF\n            {\n                // Construction\n                head_finderF( int N ) : m_N(N) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_N>=0)\n                    {\n                        return ::boost::algorithm::detail::find_head_impl( Begin, End, m_N );\n                    }\n                    else\n                    {\n                        iterator_range<ForwardIteratorT> Res=\n                            ::boost::algorithm::detail::find_tail_impl( Begin, End, -m_N );\n\n                        return ::boost::make_iterator_range(Begin, Res.begin());\n                    }\n                }\n\n            private:\n                int m_N;\n            };\n\n//  find tail functor -----------------------------------------------//\n\n\n            // find a tail in the sequence ( functor )\n            /*\n                This functor find a tail of the specified range. For\n                a specified N, the head is a subsequence of N starting\n                elements of the range.\n            */\n            struct tail_finderF\n            {\n                // Construction\n                tail_finderF( int N ) : m_N(N) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    if(m_N>=0)\n                    {\n                        return ::boost::algorithm::detail::find_tail_impl( Begin, End, m_N );\n                    }\n                    else\n                    {\n                        iterator_range<ForwardIteratorT> Res=\n                            ::boost::algorithm::detail::find_head_impl( Begin, End, -m_N );\n\n                        return ::boost::make_iterator_range(Res.end(), End);\n                    }\n                }\n\n            private:\n                int m_N;\n            };\n\n//  find token functor -----------------------------------------------//\n\n            // find a token in a sequence ( functor )\n            /*\n                This find functor finds a token specified be a predicate\n                in a sequence. It is equivalent of std::find algorithm,\n                with an exception that it return range instead of a single\n                iterator.\n\n                If bCompress is set to true, adjacent matching tokens are\n                concatenated into one match.\n            */\n            template< typename PredicateT >\n            struct token_finderF\n            {\n                // Construction\n                token_finderF(\n                    PredicateT Pred,\n                    token_compress_mode_type eCompress=token_compress_off ) :\n                        m_Pred(Pred), m_eCompress(eCompress) {}\n\n                // Operation\n                template< typename ForwardIteratorT >\n                iterator_range<ForwardIteratorT>\n                operator()(\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) const\n                {\n                    typedef iterator_range<ForwardIteratorT> result_type;\n\n                    ForwardIteratorT It=std::find_if( Begin, End, m_Pred );\n\n                    if( It==End )\n                    {\n                        return result_type( End, End );\n                    }\n                    else\n                    {\n                        ForwardIteratorT It2=It;\n\n                        if( m_eCompress==token_compress_on )\n                        {\n                            // Find first non-matching character\n                            while( It2!=End && m_Pred(*It2) ) ++It2;\n                        }\n                        else\n                        {\n                            // Advance by one position\n                            ++It2;\n                        }\n\n                        return result_type( It, It2 );\n                    }\n                }\n\n            private:\n                PredicateT m_Pred;\n                token_compress_mode_type m_eCompress;\n            };\n\n//  find range functor -----------------------------------------------//\n\n            // find a range in the sequence ( functor )\n            /*\n                This functor actually does not perform any find operation.\n                It always returns given iterator range as a result.\n            */\n            template<typename ForwardIterator1T>\n            struct range_finderF\n            {\n                typedef ForwardIterator1T input_iterator_type;\n                typedef iterator_range<input_iterator_type> result_type;\n\n                // Construction\n                range_finderF(\n                    input_iterator_type Begin,\n                    input_iterator_type End ) : m_Range(Begin, End) {}\n\n                range_finderF(const iterator_range<input_iterator_type>& Range) :\n                    m_Range(Range) {}\n\n                // Operation\n                template< typename ForwardIterator2T >\n                iterator_range<ForwardIterator2T>\n                operator()(\n                    ForwardIterator2T,\n                    ForwardIterator2T ) const\n                {\n#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) \n                    return iterator_range<const ForwardIterator2T>(this->m_Range);\n#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n                    return iterator_range<ForwardIterator2T>(m_Range.begin(), m_Range.end());\n#else\n                    return m_Range;\n#endif\n                }\n\n            private:\n                iterator_range<input_iterator_type> m_Range;\n            };\n\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FINDER_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/formatter.hpp",
    "content": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP\n#define BOOST_STRING_FORMATTER_DETAIL_HPP\n\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/detail/util.hpp>\n\n//  generic replace functors -----------------------------------------------//\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  const format functor ----------------------------------------------------//\n\n            // constant format functor\n            template<typename RangeT>\n            struct const_formatF\n            {\n            private:\n                typedef BOOST_STRING_TYPENAME\n                    range_const_iterator<RangeT>::type format_iterator;\n                typedef iterator_range<format_iterator> result_type;\n            \n            public:\n                // Construction\n                const_formatF(const RangeT& Format) :\n                    m_Format(::boost::begin(Format), ::boost::end(Format)) {}\n\n                // Operation\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n                template<typename Range2T>\n                result_type& operator()(const Range2T&)\n                {\n                    return m_Format;\n                }\n#endif\n\n                template<typename Range2T>\n                const result_type& operator()(const Range2T&) const\n                {\n                    return m_Format;\n                }\n\n            private:\n                result_type m_Format;\n            };\n\n//  identity format functor ----------------------------------------------------//\n\n            // identity format functor\n            template<typename RangeT>\n            struct identity_formatF\n            {\n                // Operation\n                template< typename Range2T >\n                const RangeT& operator()(const Range2T& Replace) const\n                {\n                    return RangeT(::boost::begin(Replace), ::boost::end(Replace));\n                }\n            };\n\n//  empty format functor ( used by erase ) ------------------------------------//\n        \n            // empty format functor\n            template< typename CharT >\n            struct empty_formatF\n            {\n                template< typename ReplaceT >\n                empty_container<CharT> operator()(const ReplaceT&) const\n                {\n                    return empty_container<CharT>();\n                }\n            };\n\n//  dissect format functor ----------------------------------------------------//\n\n            // dissect format functor\n            template<typename FinderT>\n            struct dissect_formatF\n            {\n            public:\n                // Construction\n                dissect_formatF(FinderT Finder) :\n                  m_Finder(Finder) {}\n\n                  // Operation\n                  template<typename RangeT>\n                  inline iterator_range< \n                      BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                  operator()(const RangeT& Replace) const\n                  {\n                      return m_Finder(::boost::begin(Replace), ::boost::end(Replace));\n                  }\n\n            private:\n                FinderT m_Finder;\n            };\n\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_FORMATTER_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/replace_storage.hpp",
    "content": "//  Boost string_algo library replace_storage.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <algorithm>\n#include <boost/mpl/bool.hpp>\n#include <boost/algorithm/string/sequence_traits.hpp>\n#include <boost/algorithm/string/detail/sequence.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  storage handling routines -----------------------------------------------//\n            \n            template< typename StorageT, typename OutputIteratorT >\n            inline OutputIteratorT move_from_storage(\n                StorageT& Storage,\n                OutputIteratorT DestBegin,\n                OutputIteratorT DestEnd )\n            {\n                OutputIteratorT OutputIt=DestBegin;\n                \n                while( !Storage.empty() && OutputIt!=DestEnd )\n                {\n                    *OutputIt=Storage.front();\n                    Storage.pop_front();\n                    ++OutputIt;\n                }\n\n                return OutputIt;\n            }\n\n            template< typename StorageT, typename WhatT >\n            inline void copy_to_storage(\n                StorageT& Storage,\n                const WhatT& What )\n            {\n                Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) );\n            }\n\n\n//  process segment routine -----------------------------------------------//\n\n            template< bool HasStableIterators >\n            struct process_segment_helper\n            {\n                // Optimized version of process_segment for generic sequence\n                template< \n                    typename StorageT,\n                    typename InputT,\n                    typename ForwardIteratorT >\n                ForwardIteratorT operator()(\n                    StorageT& Storage,\n                    InputT& /*Input*/,\n                    ForwardIteratorT InsertIt,\n                    ForwardIteratorT SegmentBegin,\n                    ForwardIteratorT SegmentEnd )\n                {\n                    // Copy data from the storage until the beginning of the segment\n                    ForwardIteratorT It=::boost::algorithm::detail::move_from_storage( Storage, InsertIt, SegmentBegin );\n\n                    // 3 cases are possible :\n                    //   a) Storage is empty, It==SegmentBegin\n                    //   b) Storage is empty, It!=SegmentBegin\n                    //   c) Storage is not empty\n\n                    if( Storage.empty() )\n                    {\n                        if( It==SegmentBegin )\n                        {\n                            // Case a) everything is grand, just return end of segment\n                            return SegmentEnd;\n                        }\n                        else\n                        {\n                            // Case b) move the segment backwards\n                            return std::copy( SegmentBegin, SegmentEnd, It );\n                        }\n                    }\n                    else\n                    {\n                        // Case c) -> shift the segment to the left and keep the overlap in the storage\n                        while( It!=SegmentEnd )\n                        {\n                            // Store value into storage\n                            Storage.push_back( *It );\n                            // Get the top from the storage and put it here\n                            *It=Storage.front();\n                            Storage.pop_front();\n\n                            // Advance\n                            ++It;\n                        }\n\n                        return It;\n                    }\n                }\n            };\n\n            template<>\n            struct process_segment_helper< true >\n            {\n                // Optimized version of process_segment for list-like sequence\n                template< \n                    typename StorageT,\n                    typename InputT,\n                    typename ForwardIteratorT >\n                ForwardIteratorT operator()(\n                    StorageT& Storage,\n                    InputT& Input,\n                    ForwardIteratorT InsertIt,\n                    ForwardIteratorT SegmentBegin,\n                    ForwardIteratorT SegmentEnd )\n\n                {\n                    // Call replace to do the job\n                    ::boost::algorithm::detail::replace( Input, InsertIt, SegmentBegin, Storage );\n                    // Empty the storage\n                    Storage.clear();\n                    // Iterators were not changed, simply return the end of segment\n                    return SegmentEnd;\n                }\n            };\n\n            // Process one segment in the replace_all algorithm\n            template< \n                typename StorageT,\n                typename InputT,\n                typename ForwardIteratorT >\n            inline ForwardIteratorT process_segment(\n                StorageT& Storage,\n                InputT& Input,\n                ForwardIteratorT InsertIt,\n                ForwardIteratorT SegmentBegin,\n                ForwardIteratorT SegmentEnd )\n            {\n                return \n                    process_segment_helper< \n                        has_stable_iterators<InputT>::value>()(\n                                Storage, Input, InsertIt, SegmentBegin, SegmentEnd );\n            }\n            \n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n#endif  // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/sequence.hpp",
    "content": "//  Boost string_algo library sequence.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP\n#define BOOST_STRING_DETAIL_SEQUENCE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/logical.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\n#include <boost/algorithm/string/sequence_traits.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  insert helpers  -------------------------------------------------//\n        \n            template< typename InputT, typename ForwardIteratorT >\n            inline void insert(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator At,\n                ForwardIteratorT Begin,\n                ForwardIteratorT End )\n            {\n                Input.insert( At, Begin, End );\n            }\n\n            template< typename InputT, typename InsertT >\n            inline void insert(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator At,\n                const InsertT& Insert )\n            {\n                ::boost::algorithm::detail::insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) );\n            }\n           \n//  erase helper  ---------------------------------------------------//\n\n            // Erase a range in the sequence\n            /*\n                Returns the iterator pointing just after the erase subrange\n            */\n            template< typename InputT >\n            inline typename InputT::iterator erase(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To )\n            {\n                return Input.erase( From, To );\n            }\n\n//  replace helper implementation  ----------------------------------//\n\n            // Optimized version of replace for generic sequence containers\n            // Assumption: insert and erase are expensive\n            template< bool HasConstTimeOperations >\n            struct replace_const_time_helper\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End )\n                {\n                    // Copy data to the container ( as much as possible )\n                    ForwardIteratorT InsertIt=Begin;\n                    BOOST_STRING_TYPENAME InputT::iterator InputIt=From;\n                    for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ )\n                    {\n                        *InputIt=*InsertIt;\n                    }\n\n                    if ( InsertIt!=End )\n                    {\n                        // Replace sequence is longer, insert it\n                        Input.insert( InputIt, InsertIt, End );\n                    }\n                    else\n                    {\n                        if ( InputIt!=To )\n                        {\n                            // Replace sequence is shorter, erase the rest\n                            Input.erase( InputIt, To );\n                        }\n                    }\n                }\n            };\n\n            template<>\n            struct replace_const_time_helper< true >\n            {\n                // Const-time erase and insert methods -> use them\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) \n                {\n                    BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To );\n                    if ( Begin!=End )\n                    {\n                        if(!Input.empty())\n                        {\n                            Input.insert( At, Begin, End );\n                        }\n                        else\n                        {\n                            Input.insert( Input.begin(), Begin, End );\n                        }\n                    }\n                }\n            };\n\n            // No native replace method\n            template< bool HasNative >\n            struct replace_native_helper\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End ) \n                {\n                    replace_const_time_helper< \n                        boost::mpl::and_<\n                            has_const_time_insert<InputT>,\n                            has_const_time_erase<InputT> >::value >()(\n                        Input, From, To, Begin, End );\n                }\n            };\n\n            // Container has native replace method\n            template<>\n            struct replace_native_helper< true >\n            {\n                template< typename InputT, typename ForwardIteratorT >\n                void operator()(\n                    InputT& Input,\n                    BOOST_STRING_TYPENAME InputT::iterator From,\n                    BOOST_STRING_TYPENAME InputT::iterator To,\n                    ForwardIteratorT Begin,\n                    ForwardIteratorT End )\n                {\n                    Input.replace( From, To, Begin, End );\n                }\n            };\n\n//  replace helper  -------------------------------------------------//\n        \n            template< typename InputT, typename ForwardIteratorT >\n            inline void replace(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To,\n                ForwardIteratorT Begin,\n                ForwardIteratorT End )\n            {\n                replace_native_helper< has_native_replace<InputT>::value >()(\n                    Input, From, To, Begin, End );\n            }\n\n            template< typename InputT, typename InsertT >\n            inline void replace(\n                InputT& Input,\n                BOOST_STRING_TYPENAME InputT::iterator From,\n                BOOST_STRING_TYPENAME InputT::iterator To,\n                const InsertT& Insert )\n            {\n                if(From!=To)\n                {\n                    ::boost::algorithm::detail::replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) );\n                }\n                else\n                {\n                    ::boost::algorithm::detail::insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) );\n                }\n            }\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_DETAIL_SEQUENCE_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/detail/util.hpp",
    "content": "//  Boost string_algo library util.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_UTIL_DETAIL_HPP\n#define BOOST_STRING_UTIL_DETAIL_HPP\n\n#include <boost/algorithm/string/config.hpp>\n#include <functional>\n#include <boost/range/iterator_range.hpp>\n\nnamespace boost {\n    namespace algorithm {\n        namespace detail {\n\n//  empty container  -----------------------------------------------//\n\n            //  empty_container \n            /*\n                This class represents always empty container,\n                containing elements of type CharT.\n\n                It is supposed to be used in a const version only\n            */\n            template< typename CharT >\n            struct empty_container \n            {\n                typedef empty_container<CharT> type;        \n                typedef CharT value_type;\n                typedef std::size_t size_type;\n                typedef std::ptrdiff_t difference_type;\n                typedef const value_type& reference;\n                typedef const value_type& const_reference;\n                typedef const value_type* iterator;\n                typedef const value_type* const_iterator;\n\n                \n                // Operations\n                const_iterator begin() const\n                {\n                    return reinterpret_cast<const_iterator>(0);\n                }\n\n                const_iterator end() const\n                {\n                    return reinterpret_cast<const_iterator>(0);\n                }\n\n                bool empty() const\n                {\n                    return false;\n                }\n\n                size_type size() const\n                {\n                    return 0;\n                }\n            };\n    \n//  bounded copy algorithm  -----------------------------------------------//\n\n            // Bounded version of the std::copy algorithm\n            template<typename InputIteratorT, typename OutputIteratorT>\n            inline OutputIteratorT bounded_copy(\n                InputIteratorT First, \n                InputIteratorT Last, \n                OutputIteratorT DestFirst,\n                OutputIteratorT DestLast )\n            {\n                InputIteratorT InputIt=First;\n                OutputIteratorT OutputIt=DestFirst;\n                for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )\n                {\n                    *OutputIt=*InputIt;\n                }\n\n                return OutputIt;\n            }\n\n//  iterator range utilities -----------------------------------------//\n\n            // copy range functor\n            template< \n                typename SeqT, \n                typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >\n            struct copy_iterator_rangeF : \n                public std::unary_function< iterator_range<IteratorT>, SeqT >\n            {\n                SeqT operator()( const iterator_range<IteratorT>& Range ) const\n                {\n                    return copy_range<SeqT>(Range);\n                }\n            };\n\n        } // namespace detail\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_UTIL_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/find_format.hpp",
    "content": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FIND_FORMAT_HPP\n#define BOOST_STRING_FIND_FORMAT_HPP\n\n#include <deque>\n#include <boost/detail/iterator.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/concept.hpp>\n#include <boost/algorithm/string/detail/find_format.hpp>\n#include <boost/algorithm/string/detail/find_format_all.hpp>\n\n/*! \\file\n    Defines generic replace algorithms. Each algorithm replaces\n    part(s) of the input. The part to be replaced is looked up using a Finder object.\n    Result of finding is then used by a Formatter object to generate the replacement.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n// generic replace  -----------------------------------------------------------------//\n\n        //! Generic replace algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n    \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT,\n            typename FinderT,\n            typename FormatterT>\n        inline OutputIteratorT find_format_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return detail::find_format_copy_impl(\n                Output,\n                lit_input,\n                Formatter,\n                Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) );\n        }\n\n        //! Generic replace algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename FinderT,\n            typename FormatterT>\n        inline SequenceT find_format_copy(\n            const SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            return detail::find_format_copy_impl(\n                Input,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n        }\n\n        //! Generic replace algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. The input is modified in-place.\n\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n        */\n        template<\n            typename SequenceT,\n            typename FinderT,\n            typename FormatterT>\n        inline void find_format( \n            SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter)\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT(( \n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            detail::find_format_impl(\n                Input,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n        }\n\n\n//  find_format_all generic ----------------------------------------------------------------//\n\n        //! Generic replace all algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. Repeat this for all matching\n            substrings.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template< \n            typename OutputIteratorT,\n            typename RangeT,\n            typename FinderT,\n            typename FormatterT>\n        inline OutputIteratorT find_format_all_copy(\n            OutputIteratorT Output,\n            const RangeT& Input,\n            FinderT Finder,\n            FormatterT Formatter)\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT(( \n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT(( \n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>\n                ));\n\n            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));\n\n            return detail::find_format_all_copy_impl(\n                Output,\n                lit_input,\n                Finder,\n                Formatter,\n                Finder(::boost::begin(lit_input), ::boost::end(lit_input)));\n        }\n\n        //! Generic replace all algorithm\n        /*!\n            \\overload\n        */\n        template< \n            typename SequenceT, \n            typename FinderT,\n            typename FormatterT >\n        inline SequenceT find_format_all_copy(\n            const SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            return detail::find_format_all_copy_impl(\n                Input,\n                Finder,\n                Formatter,\n                Finder( ::boost::begin(Input), ::boost::end(Input) ) );\n        }\n\n        //! Generic replace all algorithm\n        /*!\n            Use the Finder to search for a substring. Use the Formatter to format\n            this substring and replace it in the input. Repeat this for all matching\n            substrings.The input is modified in-place.\n\n            \\param Input An input sequence\n            \\param Finder A Finder object used to search for a match to be replaced\n            \\param Formatter A Formatter object used to format a match\n        */\n        template<\n            typename SequenceT,\n            typename FinderT,\n            typename FormatterT >\n        inline void find_format_all( \n            SequenceT& Input,\n            FinderT Finder,\n            FormatterT Formatter )\n        {\n            // Concept check\n            BOOST_CONCEPT_ASSERT((\n                FinderConcept<\n                    FinderT,\n                    BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n            BOOST_CONCEPT_ASSERT((\n                FormatterConcept<\n                    FormatterT,\n                    FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type>\n                ));\n\n            detail::find_format_all_impl(\n                Input,\n                Finder,\n                Formatter,\n                Finder(::boost::begin(Input), ::boost::end(Input)));\n\n        }\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::find_format_copy;\n    using algorithm::find_format;\n    using algorithm::find_format_all_copy;\n    using algorithm::find_format_all;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FIND_FORMAT_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/finder.hpp",
    "content": "//  Boost string_algo library finder.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FINDER_HPP\n#define BOOST_STRING_FINDER_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/constants.hpp>\n#include <boost/algorithm/string/detail/finder.hpp>\n#include <boost/algorithm/string/compare.hpp>\n\n/*! \\file\n    Defines Finder generators. Finder object is a functor which is able to \n    find a substring matching a specific criteria in the input.\n    Finders are used as a pluggable components for replace, find \n    and split facilities. This header contains generator functions \n    for finders provided in this library.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  Finder generators ------------------------------------------//\n        \n        //! \"First\" finder \n        /*!\n            Construct the \\c first_finder. The finder searches for the first\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c first_finder object\n        */\n        template<typename RangeT>\n        inline detail::first_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        first_finder( const RangeT& Search )\n        {\n            return \n                detail::first_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                        is_equal>( ::boost::as_literal(Search), is_equal() ) ;\n        }\n\n        //! \"First\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT,typename PredicateT>\n        inline detail::first_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        first_finder( \n            const RangeT& Search, PredicateT Comp )\n        {\n            return \n                detail::first_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Comp );\n        }\n\n        //! \"Last\" finder\n        /*!\n            Construct the \\c last_finder. The finder searches for the last\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c last_finder object\n        */\n        template<typename RangeT>\n        inline detail::last_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        last_finder( const RangeT& Search )\n        {\n            return \n                detail::last_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    is_equal>( ::boost::as_literal(Search), is_equal() );\n        }\n        //! \"Last\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT, typename PredicateT>\n        inline detail::last_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        last_finder( const RangeT& Search, PredicateT Comp )\n        {\n            return \n                detail::last_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Comp ) ;\n        }\n\n        //! \"Nth\" finder\n        /*!\n            Construct the \\c nth_finder. The finder searches for the n-th (zero-indexed)\n            occurrence of the string in a given input.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Search A substring to be searched for.\n            \\param Nth An index of the match to be find\n            \\param Comp An element comparison predicate\n            \\return An instance of the \\c nth_finder object\n        */\n        template<typename RangeT>\n        inline detail::nth_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            is_equal>\n        nth_finder( \n            const RangeT& Search, \n            int Nth)\n        {\n            return \n                detail::nth_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    is_equal>( ::boost::as_literal(Search), Nth, is_equal() ) ;\n        }\n        //! \"Nth\" finder\n        /*!\n            \\overload\n        */\n        template<typename RangeT, typename PredicateT>\n        inline detail::nth_finderF<\n            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,\n            PredicateT>\n        nth_finder( \n            const RangeT& Search, \n            int Nth, \n            PredicateT Comp )\n        {\n            return \n                detail::nth_finderF<\n                    BOOST_STRING_TYPENAME \n                        range_const_iterator<RangeT>::type,\n                    PredicateT>( ::boost::as_literal(Search), Nth, Comp );\n        }\n\n        //! \"Head\" finder\n        /*!\n            Construct the \\c head_finder. The finder returns a head of a given\n            input. The head is a prefix of a string up to n elements in\n            size. If an input has less then n elements, whole input is \n            considered a head.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param N The size of the head\n            \\return An instance of the \\c head_finder object\n        */\n        inline detail::head_finderF\n        head_finder( int N )\n        {\n            return detail::head_finderF(N);\n        }\n        \n        //! \"Tail\" finder\n        /*!\n            Construct the \\c tail_finder. The finder returns a tail of a given\n            input. The tail is a suffix of a string up to n elements in\n            size. If an input has less then n elements, whole input is \n            considered a head.\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param N The size of the head\n            \\return An instance of the \\c tail_finder object\n        */\n        inline detail::tail_finderF\n        tail_finder( int N )\n        {\n            return detail::tail_finderF(N);\n        }\n\n        //! \"Token\" finder\n        /*!\n            Construct the \\c token_finder. The finder searches for a token \n            specified by a predicate. It is similar to std::find_if \n            algorithm, with an exception that it return a range of\n            instead of a single iterator.\n\n            If \"compress token mode\" is enabled, adjacent matching tokens are \n            concatenated into one match. Thus the finder can be used to \n            search for continuous segments of characters satisfying the \n            given predicate.\n\n            The result is given as an \\c iterator_range delimiting the match.\n\n            \\param Pred An element selection predicate\n            \\param eCompress Compress flag\n            \\return An instance of the \\c token_finder object\n        */\n        template< typename PredicateT >\n        inline detail::token_finderF<PredicateT>\n        token_finder( \n            PredicateT Pred, \n            token_compress_mode_type eCompress=token_compress_off )\n        {\n            return detail::token_finderF<PredicateT>( Pred, eCompress );\n        }\n\n        //! \"Range\" finder\n        /*!\n            Construct the \\c range_finder. The finder does not perform \n            any operation. It simply returns the given range for \n            any input. \n\n            \\param Begin Beginning of the range\n            \\param End End of the range\n            \\param Range The range.\n            \\return An instance of the \\c range_finger object\n        */\n        template< typename ForwardIteratorT >\n        inline detail::range_finderF<ForwardIteratorT>\n        range_finder(\n            ForwardIteratorT Begin,\n            ForwardIteratorT End )\n        {\n            return detail::range_finderF<ForwardIteratorT>( Begin, End );\n        }\n\n        //! \"Range\" finder\n        /*!       \n            \\overload\n        */\n        template< typename ForwardIteratorT >\n        inline detail::range_finderF<ForwardIteratorT>\n        range_finder( iterator_range<ForwardIteratorT> Range )\n        {\n            return detail::range_finderF<ForwardIteratorT>( Range );\n        }\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::first_finder;\n    using algorithm::last_finder;\n    using algorithm::nth_finder;\n    using algorithm::head_finder;\n    using algorithm::tail_finder;\n    using algorithm::token_finder;\n    using algorithm::range_finder;\n\n} // namespace boost\n\n\n#endif  // BOOST_STRING_FINDER_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/formatter.hpp",
    "content": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_FORMATTER_HPP\n#define BOOST_STRING_FORMATTER_HPP\n\n#include <boost/detail/iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/as_literal.hpp>\n\n#include <boost/algorithm/string/detail/formatter.hpp>\n\n/*! \\file\n    Defines Formatter generators. Formatter is a functor which formats\n    a string according to given parameters. A Formatter works\n    in conjunction with a Finder. A Finder can provide additional information\n    for a specific Formatter. An example of such a cooperation is regex_finder\n    and regex_formatter.\n\n    Formatters are used as pluggable components for replace facilities. \n    This header contains generator functions for the Formatters provided in this library.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n// generic formatters  ---------------------------------------------------------------//\n\n        //! Constant formatter\n        /*!\n            Constructs a \\c const_formatter. Const formatter always returns\n            the same value, regardless of the parameter.\n\n            \\param Format A predefined value used as a result for formating\n            \\return An instance of the \\c const_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::const_formatF<\n            iterator_range<\n                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >\n        const_formatter(const RangeT& Format)\n        {\n            return detail::const_formatF<\n                iterator_range<\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(::boost::as_literal(Format));\n        }\n\n        //! Identity formatter\n        /*!\n            Constructs an \\c identity_formatter. Identity formatter always returns\n            the parameter.\n\n            \\return An instance of the \\c identity_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::identity_formatF<\n            iterator_range<\n                BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >\n        identity_formatter()\n        {\n            return detail::identity_formatF<\n                iterator_range<\n                    BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();\n        }\n\n        //! Empty formatter\n        /*!\n            Constructs an \\c empty_formatter. Empty formatter always returns an empty\n            sequence. \n\n            \\param Input container used to select a correct value_type for the\n                         resulting empty_container<>.\n            \\return An instance of the \\c empty_formatter object.\n        */\n        template<typename RangeT>\n        inline detail::empty_formatF< \n            BOOST_STRING_TYPENAME range_value<RangeT>::type>\n        empty_formatter(const RangeT&)\n        {\n            return detail::empty_formatF<\n                BOOST_STRING_TYPENAME range_value<RangeT>::type>();\n        }\n\n        //! Empty formatter\n        /*!\n            Constructs a \\c dissect_formatter. Dissect formatter uses a specified finder\n            to extract a portion of the formatted sequence. The first finder's match is returned \n            as a result\n\n            \\param Finder a finder used to select a portion of the formated sequence\n            \\return An instance of the \\c dissect_formatter object.\n        */\n        template<typename FinderT>\n        inline detail::dissect_formatF< FinderT >\n        dissect_formatter(const FinderT& Finder)\n        {\n            return detail::dissect_formatF<FinderT>(Finder);\n        }\n\n\n    } // namespace algorithm\n\n    // pull the names to the boost namespace\n    using algorithm::const_formatter;\n    using algorithm::identity_formatter;\n    using algorithm::empty_formatter;\n    using algorithm::dissect_formatter;\n\n} // namespace boost\n\n\n#endif  // BOOST_FORMATTER_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/replace.hpp",
    "content": "//  Boost string_algo library replace.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2006.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_REPLACE_HPP\n#define BOOST_STRING_REPLACE_HPP\n\n#include <boost/algorithm/string/config.hpp>\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\n#include <boost/algorithm/string/find_format.hpp>\n#include <boost/algorithm/string/finder.hpp>\n#include <boost/algorithm/string/formatter.hpp>\n#include <boost/algorithm/string/compare.hpp>\n\n/*! \\file\n    Defines various replace algorithms. Each algorithm replaces\n    part(s) of the input according to set of searching and replace criteria.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  replace_range --------------------------------------------------------------------//\n\n        //! Replace range algorithm\n        /*!\n            Replace the given range in the input string.\n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param SearchRange A range in the input to be substituted\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_range_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<Range1T>::type>& SearchRange,\n            const Range2T& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n        //! Replace range algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_range_copy( \n            const SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_const_iterator<SequenceT>::type>& SearchRange,\n            const RangeT& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n        //! Replace range algorithm\n        /*!\n            Replace the given range in the input string. \n            The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param SearchRange A range in the input to be substituted\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_range( \n            SequenceT& Input,\n            const iterator_range<\n                BOOST_STRING_TYPENAME \n                    range_iterator<SequenceT>::type>& SearchRange,\n            const RangeT& Format)\n        {\n            ::boost::algorithm::find_format(\n                Input,\n                ::boost::algorithm::range_finder(SearchRange),\n                ::boost::algorithm::const_formatter(Format));\n        }\n\n//  replace_first --------------------------------------------------------------------//\n\n        //! Replace first algorithm\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input\n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format)\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_first_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm\n        /*!\n            replace the first match of the search substring in the input \n            with the format string. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_first( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_first ( case insensitive ) ---------------------------------------------//\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_first_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range2T, typename Range1T>\n        inline SequenceT ireplace_first_copy( \n            const SequenceT& Input,\n            const Range2T& Search,\n            const Range1T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace first algorithm ( case insensitive )\n        /*!\n            Replace the first match of the search substring in the input \n            with the format string. Input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_first( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_last --------------------------------------------------------------------//\n\n        //! Replace last algorithm\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input            \n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_last_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_last( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_last ( case insensitive ) -----------------------------------------------//\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            Replace the last match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input  \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_last_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_last_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace last algorithm ( case insensitive )\n        /*!\n            Replace the last match of the search string in the input \n            with the format string.The input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return A reference to the modified input\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_last( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::last_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_nth --------------------------------------------------------------------//\n\n        //! Replace nth algorithm\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input\n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_nth_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_nth( \n            SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_nth ( case insensitive ) -----------------------------------------------//\n        \n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input            \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n       */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_nth_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            int Nth,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_nth_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace nth algorithm ( case insensitive )\n        /*!\n            Replace an Nth (zero-indexed) match of the search string in the input \n            with the format string. Input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Nth An index of the match to be replaced. The index is 0-based.\n                For negative N, matches are counted from the end of string.\n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_nth( \n            SequenceT& Input,\n            const Range1T& Search,\n            int Nth,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_all --------------------------------------------------------------------//\n\n        //! Replace all algorithm\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input \n\n             \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT replace_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT replace_all_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\return A reference to the modified input\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void replace_all( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n        \n//  replace_all ( case insensitive ) -----------------------------------------------//\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            Searching is case insensitive.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T,\n            typename Range3T>\n        inline OutputIteratorT ireplace_all_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            const Range2T& Search,\n            const Range3T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy(\n                Output,\n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline SequenceT ireplace_all_copy( \n            const SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            return ::boost::algorithm::find_format_all_copy( \n                Input,\n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace all algorithm ( case insensitive )\n        /*!\n            Replace all occurrences of the search string in the input \n            with the format string.The input sequence is modified in-place.\n            Searching is case insensitive.\n\n            \\param Input An input string\n            \\param Search A substring to be searched for \n            \\param Format A substitute string\n            \\param Loc A locale used for case insensitive comparison\n        */\n        template<typename SequenceT, typename Range1T, typename Range2T>\n        inline void ireplace_all( \n            SequenceT& Input,\n            const Range1T& Search,\n            const Range2T& Format,\n            const std::locale& Loc=std::locale() )\n        {\n            ::boost::algorithm::find_format_all( \n                Input, \n                ::boost::algorithm::first_finder(Search, is_iequal(Loc)),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n        \n//  replace_head --------------------------------------------------------------------//\n\n        //! Replace head algorithm\n        /*!\n            Replace the head of the input with the given format string. \n            The head is a prefix of a string of given size. \n            If the sequence is shorter then required, whole string if \n            considered to be the head. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n            \n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the head.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                a modified copy of the input  \n\n            \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_head_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            int N,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace head algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_head_copy( \n            const SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace head algorithm\n        /*!\n            Replace the head of the input with the given format string. \n            The head is a prefix of a string of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the head. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the head.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_head( \n            SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::head_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n//  replace_tail --------------------------------------------------------------------//\n\n        //! Replace tail algorithm\n        /*!\n            Replace the tail of the input with the given format string. \n            The tail is a suffix of a string of given size. \n            If the sequence is shorter then required, whole string is \n            considered to be the tail. \n            The result is a modified copy of the input. It is returned as a sequence \n            or copied to the output iterator.\n\n            \\param Output An output iterator to which the result will be copied\n            \\param Input An input string\n            \\param N Length of the tail.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n            \\return An output iterator pointing just after the last inserted character or\n                    a modified copy of the input   \n\n              \\note The second variant of this function provides the strong exception-safety guarantee\n        */\n        template<\n            typename OutputIteratorT,\n            typename Range1T, \n            typename Range2T>\n        inline OutputIteratorT replace_tail_copy(\n            OutputIteratorT Output,\n            const Range1T& Input,\n            int N,\n            const Range2T& Format )\n        {\n            return ::boost::algorithm::find_format_copy(\n                Output,\n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace tail algorithm\n        /*!\n            \\overload\n        */\n        template<typename SequenceT, typename RangeT>\n        inline SequenceT replace_tail_copy( \n            const SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            return ::boost::algorithm::find_format_copy( \n                Input,\n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n        //! Replace tail algorithm\n        /*!\n            Replace the tail of the input with the given format sequence. \n            The tail is a suffix of a string of given size. \n            If the sequence is shorter then required, the whole string is \n            considered to be the tail. The input sequence is modified in-place.\n\n            \\param Input An input string\n            \\param N Length of the tail.\n                For N>=0, at most N characters are extracted.\n                For N<0, size(Input)-|N| characters are extracted.\n            \\param Format A substitute string\n        */\n        template<typename SequenceT, typename RangeT>\n        inline void replace_tail( \n            SequenceT& Input,\n            int N,\n            const RangeT& Format )\n        {\n            ::boost::algorithm::find_format( \n                Input, \n                ::boost::algorithm::tail_finder(N),\n                ::boost::algorithm::const_formatter(Format) );\n        }\n\n    } // namespace algorithm\n\n    // pull names to the boost namespace\n    using algorithm::replace_range_copy;\n    using algorithm::replace_range;\n    using algorithm::replace_first_copy;\n    using algorithm::replace_first;\n    using algorithm::ireplace_first_copy;\n    using algorithm::ireplace_first;\n    using algorithm::replace_last_copy;\n    using algorithm::replace_last;\n    using algorithm::ireplace_last_copy;\n    using algorithm::ireplace_last;\n    using algorithm::replace_nth_copy;\n    using algorithm::replace_nth;\n    using algorithm::ireplace_nth_copy;\n    using algorithm::ireplace_nth;\n    using algorithm::replace_all_copy;\n    using algorithm::replace_all;\n    using algorithm::ireplace_all_copy;\n    using algorithm::ireplace_all;\n    using algorithm::replace_head_copy;\n    using algorithm::replace_head;\n    using algorithm::replace_tail_copy;\n    using algorithm::replace_tail;\n\n} // namespace boost\n\n#endif  // BOOST_REPLACE_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/sequence_traits.hpp",
    "content": "//  Boost string_algo library sequence_traits.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP\n#define BOOST_STRING_SEQUENCE_TRAITS_HPP\n\n#include <boost/config.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/algorithm/string/yes_no_type.hpp>\n\n/*! \\file\n    Traits defined in this header are used by various algorithms to achieve\n    better performance for specific containers.\n    Traits provide fail-safe defaults. If a container supports some of these\n    features, it is possible to specialize the specific trait for this container.\n    For lacking compilers, it is possible of define an override for a specific tester\n    function.\n\n    Due to a language restriction, it is not currently possible to define specializations for\n    stl containers without including the corresponding header. To decrease the overhead\n    needed by this inclusion, user can selectively include a specialization\n    header for a specific container. They are located in boost/algorithm/string/stl\n    directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp\n    header which contains specializations for all stl containers.\n*/\n\nnamespace boost {\n    namespace algorithm {\n\n//  sequence traits  -----------------------------------------------//\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n        //! Native replace tester\n        /*!\n            Declare an override of this tester function with return\n            type boost::string_algo::yes_type for a sequence with this property.\n\n            \\return yes_type if the container has basic_string like native replace\n            method.\n        */\n        no_type has_native_replace_tester(...);\n\n        //! Stable iterators tester\n        /*!\n            Declare an override of this tester function with return\n            type boost::string_algo::yes_type for a sequence with this property.\n\n            \\return yes_type if the sequence's insert/replace/erase methods do not invalidate\n            existing iterators.\n        */\n        no_type has_stable_iterators_tester(...);\n\n        //! const time insert tester\n        /*!\n            Declare an override of this tester function with return\n            type boost::string_algo::yes_type for a sequence with this property.\n\n            \\return yes_type if the sequence's insert method is working in constant time\n        */\n        no_type has_const_time_insert_tester(...);\n\n        //! const time erase tester\n        /*!\n            Declare an override of this tester function with return\n            type boost::string_algo::yes_type for a sequence with this property.\n\n            \\return yes_type if the sequence's erase method is working in constant time\n        */\n        no_type has_const_time_erase_tester(...);\n\n#endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n        //! Native replace trait\n        /*!\n            This trait specifies that the sequence has \\c std::string like replace method\n        */\n        template< typename T >\n        class has_native_replace\n        {\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        private:\n            static T* t;\n        public:\n            BOOST_STATIC_CONSTANT(bool, value=(\n                sizeof(has_native_replace_tester(t))==sizeof(yes_type) ) );\n#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n\n            typedef mpl::bool_<has_native_replace<T>::value> type;\n        };\n\n\n        //! Stable iterators trait\n        /*!\n            This trait specifies that the sequence has stable iterators. It means\n            that operations like insert/erase/replace do not invalidate iterators.\n        */\n        template< typename T >\n        class has_stable_iterators\n        {\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        private:\n            static T* t;\n        public:\n            BOOST_STATIC_CONSTANT(bool, value=(\n                sizeof(has_stable_iterators_tester(t))==sizeof(yes_type) ) );\n#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n            typedef mpl::bool_<has_stable_iterators<T>::value> type;\n        };\n\n\n        //! Const time insert trait\n        /*!\n            This trait specifies that the sequence's insert method has\n            constant time complexity.\n        */\n        template< typename T >\n        class has_const_time_insert\n        {\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        private:\n            static T* t;\n        public:\n            BOOST_STATIC_CONSTANT(bool, value=(\n                sizeof(has_const_time_insert_tester(t))==sizeof(yes_type) ) );\n#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n            typedef mpl::bool_<has_const_time_insert<T>::value> type;\n        };\n\n\n        //! Const time erase trait\n        /*!\n            This trait specifies that the sequence's erase method has\n            constant time complexity.\n        */\n        template< typename T >\n        class has_const_time_erase\n        {\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        private:\n            static T* t;\n        public:\n            BOOST_STATIC_CONSTANT(bool, value=(\n                sizeof(has_const_time_erase_tester(t))==sizeof(yes_type) ) );\n#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n        public:\n#    if BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n            enum { value = false };\n#    else\n            BOOST_STATIC_CONSTANT(bool, value=false);\n#    endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n            typedef mpl::bool_<has_const_time_erase<T>::value> type;\n        };\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_SEQUENCE_TRAITS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/algorithm/string/yes_no_type.hpp",
    "content": "//  Boost string_algo library yes_no_type.hpp header file  ---------------------------//\n\n//  Copyright Pavol Droba 2002-2003.\n//\n// Distributed under the Boost Software License, Version 1.0.\n//    (See accompanying file LICENSE_1_0.txt or copy at\n//          http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for updates, documentation, and revision history.\n\n#ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n#define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n\nnamespace boost {\n    namespace algorithm {\n\n        // taken from boost mailing-list\n        // when yes_no_type will become officially\n        // a part of boost distribution, this header\n        // will be deprecated\n        template<int I> struct size_descriptor \n        {\n            typedef char (& type)[I];\n        }; \n\n        typedef size_descriptor<1>::type yes_type;\n        typedef size_descriptor<2>::type no_type;\n\n    } // namespace algorithm\n} // namespace boost\n\n\n#endif  // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/aligned_storage.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost aligned_storage.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2002-2003\n// Eric Friedman, Itay Maman\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ALIGNED_STORAGE_HPP\n#define BOOST_ALIGNED_STORAGE_HPP\n\n#include <cstddef> // for std::size_t\n\n#include \"boost/config.hpp\"\n#include \"boost/detail/workaround.hpp\"\n#include \"boost/type_traits/alignment_of.hpp\"\n#include \"boost/type_traits/type_with_alignment.hpp\"\n#include \"boost/type_traits/is_pod.hpp\"\n\n#include \"boost/mpl/eval_if.hpp\"\n#include \"boost/mpl/identity.hpp\"\n\n#include \"boost/type_traits/detail/bool_trait_def.hpp\"\n\nnamespace boost {\n\nnamespace detail { namespace aligned_storage {\n\nBOOST_STATIC_CONSTANT(\n      std::size_t\n    , alignment_of_max_align = ::boost::alignment_of<max_align>::value\n    );\n\n//\n// To be TR1 conforming this must be a POD type:\n//\ntemplate <\n      std::size_t size_\n    , std::size_t alignment_\n>\nstruct aligned_storage_imp\n{\n    union data_t\n    {\n        char buf[size_];\n\n        typename mpl::eval_if_c<\n              alignment_ == std::size_t(-1)\n            , mpl::identity<detail::max_align>\n            , type_with_alignment<alignment_>\n            >::type align_;\n    } data_;\n    void* address() const { return const_cast<aligned_storage_imp*>(this); }\n};\n\ntemplate< std::size_t alignment_ >\nstruct aligned_storage_imp<0u,alignment_>\n{\n    /* intentionally empty */\n    void* address() const { return 0; }\n};\n\n}} // namespace detail::aligned_storage\n\ntemplate <\n      std::size_t size_\n    , std::size_t alignment_ = std::size_t(-1)\n>\nclass aligned_storage : \n#ifndef __BORLANDC__\n   private \n#else\n   public\n#endif\n   detail::aligned_storage::aligned_storage_imp<size_, alignment_> \n{\n \npublic: // constants\n\n    typedef detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;\n\n    BOOST_STATIC_CONSTANT(\n          std::size_t\n        , size = size_\n        );\n    BOOST_STATIC_CONSTANT(\n          std::size_t\n        , alignment = (\n              alignment_ == std::size_t(-1)\n            ? ::boost::detail::aligned_storage::alignment_of_max_align\n            : alignment_\n            )\n        );\n\n#if defined(__GNUC__) &&\\\n    (__GNUC__ >  3) ||\\\n    (__GNUC__ == 3 && (__GNUC_MINOR__ >  2 ||\\\n                      (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >=3)))\n\nprivate: // noncopyable\n\n    aligned_storage(const aligned_storage&);\n    aligned_storage& operator=(const aligned_storage&);\n\n#else // gcc less than 3.2.3\n\npublic: // _should_ be noncopyable, but GCC compiler emits error\n\n    aligned_storage(const aligned_storage&);\n    aligned_storage& operator=(const aligned_storage&);\n\n#endif // gcc < 3.2.3 workaround\n\npublic: // structors\n\n    aligned_storage()\n    {\n    }\n\n    ~aligned_storage()\n    {\n    }\n\npublic: // accessors\n\n    void* address()\n    {\n        return static_cast<type*>(this)->address();\n    }\n\n#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n    const void* address() const\n    {\n        return static_cast<const type*>(this)->address();\n    }\n\n#else // MSVC6\n\n    const void* address() const;\n\n#endif // MSVC6 workaround\n\n};\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n// MSVC6 seems not to like inline functions with const void* returns, so we\n// declare the following here:\n\ntemplate <std::size_t S, std::size_t A>\nconst void* aligned_storage<S,A>::address() const\n{\n    return const_cast< aligned_storage<S,A>* >(this)->address();\n}\n\n#endif // MSVC6 workaround\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n//\n// Make sure that is_pod recognises aligned_storage<>::type\n// as a POD (Note that aligned_storage<> itself is not a POD):\n//\ntemplate <std::size_t size_, std::size_t alignment_>\nstruct is_pod<boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >\n   BOOST_TT_AUX_BOOL_C_BASE(true)\n{ \n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(true)\n}; \n#endif\n\n\n} // namespace boost\n\n#include \"boost/type_traits/detail/bool_trait_undef.hpp\"\n\n#endif // BOOST_ALIGNED_STORAGE_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/array.hpp",
    "content": "/* The following code declares class array,\n * an STL container (as wrapper) for arrays of constant size.\n *\n * See\n *      http://www.boost.org/libs/array/\n * for documentation.\n *\n * The original author site is at: http://www.josuttis.com/\n *\n * (C) Copyright Nicolai M. Josuttis 2001.\n *\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n *\n * 14 Apr 2012 - (mtc) Added support for boost::hash\n * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility.\n * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group.\n *      See <http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#776> or Trac issue #3168\n *      Eventually, we should remove \"assign\" which is now a synonym for \"fill\" (Marshall Clow)\n * 10 Mar 2010 - added workaround for SUNCC and !STLPort [trac #3893] (Marshall Clow)\n * 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis)\n * 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries.\n * 05 Aug 2001 - minor update (Nico Josuttis)\n * 20 Jan 2001 - STLport fix (Beman Dawes)\n * 29 Sep 2000 - Initial Revision (Nico Josuttis)\n *\n * Jan 29, 2004\n */\n#ifndef BOOST_ARRAY_HPP\n#define BOOST_ARRAY_HPP\n\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  \n# pragma warning(push)  \n# pragma warning(disable:4996) // 'std::equal': Function call with parameters that may be unsafe\n# pragma warning(disable:4510) // boost::array<T,N>' : default constructor could not be generated \n# pragma warning(disable:4610) // warning C4610: class 'boost::array<T,N>' can never be instantiated - user defined constructor required \n#endif\n\n#include <cstddef>\n#include <stdexcept>\n#include <boost/assert.hpp>\n#include <boost/swap.hpp>\n\n// Handles broken standard libraries better than <iterator>\n#include <boost/detail/iterator.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/functional/hash_fwd.hpp>\n#include <algorithm>\n\n// FIXES for broken compilers\n#include <boost/config.hpp>\n\n\nnamespace boost {\n\n    template<class T, std::size_t N>\n    class array {\n      public:\n        T elems[N];    // fixed-size array of elements of type T\n\n      public:\n        // type definitions\n        typedef T              value_type;\n        typedef T*             iterator;\n        typedef const T*       const_iterator;\n        typedef T&             reference;\n        typedef const T&       const_reference;\n        typedef std::size_t    size_type;\n        typedef std::ptrdiff_t difference_type;\n\n        // iterator support\n        iterator        begin()       { return elems; }\n        const_iterator  begin() const { return elems; }\n        const_iterator cbegin() const { return elems; }\n        \n        iterator        end()       { return elems+N; }\n        const_iterator  end() const { return elems+N; }\n        const_iterator cend() const { return elems+N; }\n\n        // reverse iterator support\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)\n        typedef std::reverse_iterator<iterator> reverse_iterator;\n        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)\n        // workaround for broken reverse_iterator in VC7\n        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,\n                                      reference, iterator, reference> > reverse_iterator;\n        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,\n                                      const_reference, iterator, reference> > const_reverse_iterator;\n#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) \n        typedef std::reverse_iterator<iterator, std::random_access_iterator_tag, \n              value_type, reference, iterator, difference_type> reverse_iterator; \n        typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,\n              value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;\n#else\n        // workaround for broken reverse_iterator implementations\n        typedef std::reverse_iterator<iterator,T> reverse_iterator;\n        typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;\n#endif\n\n        reverse_iterator rbegin() { return reverse_iterator(end()); }\n        const_reverse_iterator rbegin() const {\n            return const_reverse_iterator(end());\n        }\n        const_reverse_iterator crbegin() const {\n            return const_reverse_iterator(end());\n        }\n\n        reverse_iterator rend() { return reverse_iterator(begin()); }\n        const_reverse_iterator rend() const {\n            return const_reverse_iterator(begin());\n        }\n        const_reverse_iterator crend() const {\n            return const_reverse_iterator(begin());\n        }\n\n        // operator[]\n        reference operator[](size_type i) \n        { \n            BOOST_ASSERT_MSG( i < N, \"out of range\" );\n            return elems[i];\n        }\n        \n        const_reference operator[](size_type i) const \n        {     \n            BOOST_ASSERT_MSG( i < N, \"out of range\" );\n            return elems[i]; \n        }\n\n        // at() with range check\n        reference at(size_type i) { rangecheck(i); return elems[i]; }\n        const_reference at(size_type i) const { rangecheck(i); return elems[i]; }\n    \n        // front() and back()\n        reference front() \n        { \n            return elems[0]; \n        }\n        \n        const_reference front() const \n        {\n            return elems[0];\n        }\n        \n        reference back() \n        { \n            return elems[N-1]; \n        }\n        \n        const_reference back() const \n        { \n            return elems[N-1]; \n        }\n\n        // size is constant\n        static size_type size() { return N; }\n        static bool empty() { return false; }\n        static size_type max_size() { return N; }\n        enum { static_size = N };\n\n        // swap (note: linear complexity)\n        void swap (array<T,N>& y) {\n            for (size_type i = 0; i < N; ++i)\n                boost::swap(elems[i],y.elems[i]);\n        }\n\n        // direct access to data (read-only)\n        const T* data() const { return elems; }\n        T* data() { return elems; }\n\n        // use array as C array (direct read/write access to data)\n        T* c_array() { return elems; }\n\n        // assignment with type conversion\n        template <typename T2>\n        array<T,N>& operator= (const array<T2,N>& rhs) {\n            std::copy(rhs.begin(),rhs.end(), begin());\n            return *this;\n        }\n\n        // assign one value to all elements\n        void assign (const T& value) { fill ( value ); }    // A synonym for fill\n        void fill   (const T& value)\n        {\n            std::fill_n(begin(),size(),value);\n        }\n\n        // check range (may be private because it is static)\n        static void rangecheck (size_type i) {\n            if (i >= size()) {\n                std::out_of_range e(\"array<>: index out of range\");\n                boost::throw_exception(e);\n            }\n        }\n\n    };\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    template< class T >\n    class array< T, 0 > {\n\n      public:\n        // type definitions\n        typedef T              value_type;\n        typedef T*             iterator;\n        typedef const T*       const_iterator;\n        typedef T&             reference;\n        typedef const T&       const_reference;\n        typedef std::size_t    size_type;\n        typedef std::ptrdiff_t difference_type;\n\n        // iterator support\n        iterator        begin()       { return       iterator( reinterpret_cast<       T * >( this ) ); }\n        const_iterator  begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }\n        const_iterator cbegin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }\n\n        iterator        end()       { return  begin(); }\n        const_iterator  end() const { return  begin(); }\n        const_iterator cend() const { return cbegin(); }\n\n        // reverse iterator support\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)\n        typedef std::reverse_iterator<iterator> reverse_iterator;\n        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;\n#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)\n        // workaround for broken reverse_iterator in VC7\n        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,\n                                      reference, iterator, reference> > reverse_iterator;\n        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,\n                                      const_reference, iterator, reference> > const_reverse_iterator;\n#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) \n        typedef std::reverse_iterator<iterator, std::random_access_iterator_tag, \n              value_type, reference, iterator, difference_type> reverse_iterator; \n        typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,\n              value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;\n#else\n        // workaround for broken reverse_iterator implementations\n        typedef std::reverse_iterator<iterator,T> reverse_iterator;\n        typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;\n#endif\n\n        reverse_iterator rbegin() { return reverse_iterator(end()); }\n        const_reverse_iterator rbegin() const {\n            return const_reverse_iterator(end());\n        }\n        const_reverse_iterator crbegin() const {\n            return const_reverse_iterator(end());\n        }\n\n        reverse_iterator rend() { return reverse_iterator(begin()); }\n        const_reverse_iterator rend() const {\n            return const_reverse_iterator(begin());\n        }\n        const_reverse_iterator crend() const {\n            return const_reverse_iterator(begin());\n        }\n\n        // operator[]\n        reference operator[](size_type /*i*/)\n        {\n            return failed_rangecheck();\n        }\n\n        const_reference operator[](size_type /*i*/) const\n        {\n            return failed_rangecheck();\n        }\n\n        // at() with range check\n        reference at(size_type /*i*/)               {   return failed_rangecheck(); }\n        const_reference at(size_type /*i*/) const   {   return failed_rangecheck(); }\n\n        // front() and back()\n        reference front()\n        {\n            return failed_rangecheck();\n        }\n\n        const_reference front() const\n        {\n            return failed_rangecheck();\n        }\n\n        reference back()\n        {\n            return failed_rangecheck();\n        }\n\n        const_reference back() const\n        {\n            return failed_rangecheck();\n        }\n\n        // size is constant\n        static size_type size() { return 0; }\n        static bool empty() { return true; }\n        static size_type max_size() { return 0; }\n        enum { static_size = 0 };\n\n        void swap (array<T,0>& /*y*/) {\n        }\n\n        // direct access to data (read-only)\n        const T* data() const { return 0; }\n        T* data() { return 0; }\n\n        // use array as C array (direct read/write access to data)\n        T* c_array() { return 0; }\n\n        // assignment with type conversion\n        template <typename T2>\n        array<T,0>& operator= (const array<T2,0>& ) {\n            return *this;\n        }\n\n        // assign one value to all elements\n        void assign (const T& value) { fill ( value ); }\n        void fill   (const T& ) {}\n        \n        // check range (may be private because it is static)\n        static reference failed_rangecheck () {\n                std::out_of_range e(\"attempt to access element of an empty array\");\n                boost::throw_exception(e);\n#if defined(BOOST_NO_EXCEPTIONS) || (!defined(BOOST_MSVC) && !defined(__PATHSCALE__))\n                //\n                // We need to return something here to keep\n                // some compilers happy: however we will never\n                // actually get here....\n                //\n                static T placeholder;\n                return placeholder;\n#endif\n            }\n    };\n#endif\n\n    // comparisons\n    template<class T, std::size_t N>\n    bool operator== (const array<T,N>& x, const array<T,N>& y) {\n        return std::equal(x.begin(), x.end(), y.begin());\n    }\n    template<class T, std::size_t N>\n    bool operator< (const array<T,N>& x, const array<T,N>& y) {\n        return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());\n    }\n    template<class T, std::size_t N>\n    bool operator!= (const array<T,N>& x, const array<T,N>& y) {\n        return !(x==y);\n    }\n    template<class T, std::size_t N>\n    bool operator> (const array<T,N>& x, const array<T,N>& y) {\n        return y<x;\n    }\n    template<class T, std::size_t N>\n    bool operator<= (const array<T,N>& x, const array<T,N>& y) {\n        return !(y<x);\n    }\n    template<class T, std::size_t N>\n    bool operator>= (const array<T,N>& x, const array<T,N>& y) {\n        return !(x<y);\n    }\n\n    // global swap()\n    template<class T, std::size_t N>\n    inline void swap (array<T,N>& x, array<T,N>& y) {\n        x.swap(y);\n    }\n\n#if defined(__SUNPRO_CC)\n//  Trac ticket #4757; the Sun Solaris compiler can't handle\n//  syntax like 'T(&get_c_array(boost::array<T,N>& arg))[N]'\n//  \n//  We can't just use this for all compilers, because the \n//      borland compilers can't handle this form. \n    namespace detail {\n       template <typename T, std::size_t N> struct c_array\n       {\n           typedef T type[N];\n       };\n    }\n    \n   // Specific for boost::array: simply returns its elems data member.\n   template <typename T, std::size_t N>\n   typename detail::c_array<T,N>::type& get_c_array(boost::array<T,N>& arg)\n   {\n       return arg.elems;\n   }\n\n   // Specific for boost::array: simply returns its elems data member.\n   template <typename T, std::size_t N>\n   typename const detail::c_array<T,N>::type& get_c_array(const boost::array<T,N>& arg)\n   {\n       return arg.elems;\n   }\n#else\n// Specific for boost::array: simply returns its elems data member.\n    template <typename T, std::size_t N>\n    T(&get_c_array(boost::array<T,N>& arg))[N]\n    {\n        return arg.elems;\n    }\n    \n    // Const version.\n    template <typename T, std::size_t N>\n    const T(&get_c_array(const boost::array<T,N>& arg))[N]\n    {\n        return arg.elems;\n    }\n#endif\n    \n#if 0\n    // Overload for std::array, assuming that std::array will have\n    // explicit conversion functions as discussed at the WG21 meeting\n    // in Summit, March 2009.\n    template <typename T, std::size_t N>\n    T(&get_c_array(std::array<T,N>& arg))[N]\n    {\n        return static_cast<T(&)[N]>(arg);\n    }\n    \n    // Const version.\n    template <typename T, std::size_t N>\n    const T(&get_c_array(const std::array<T,N>& arg))[N]\n    {\n        return static_cast<T(&)[N]>(arg);\n    }\n#endif\n\n\n    template<class T, std::size_t N>\n    std::size_t hash_value(const array<T,N>& arr)\n    {\n        return boost::hash_range(arr.begin(), arr.end());\n    }\n\n} /* namespace boost */\n\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  \n# pragma warning(pop)  \n#endif \n\n#endif /*BOOST_ARRAY_HPP*/\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/assert.hpp",
    "content": "//\n//  boost/assert.hpp - BOOST_ASSERT(expr)\n//                     BOOST_ASSERT_MSG(expr, msg)\n//                     BOOST_VERIFY(expr)\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2007 Peter Dimov\n//  Copyright (c) Beman Dawes 2011\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Note: There are no include guards. This is intentional.\n//\n//  See http://www.boost.org/libs/utility/assert.html for documentation.\n//\n\n//\n// Stop inspect complaining about use of 'assert':\n//\n// boostinspect:naassert_macro\n//\n\n//--------------------------------------------------------------------------------------//\n//                                     BOOST_ASSERT                                     //\n//--------------------------------------------------------------------------------------//\n\n#undef BOOST_ASSERT\n\n#if defined(BOOST_DISABLE_ASSERTS)\n\n# define BOOST_ASSERT(expr) ((void)0)\n\n#elif defined(BOOST_ENABLE_ASSERT_HANDLER)\n\n#include <boost/current_function.hpp>\n\nnamespace boost\n{\n  void assertion_failed(char const * expr,\n                        char const * function, char const * file, long line); // user defined\n} // namespace boost\n\n#define BOOST_ASSERT(expr) ((expr) \\\n  ? ((void)0) \\\n  : ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))\n\n#else\n# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same\n# define BOOST_ASSERT(expr) assert(expr)\n#endif\n\n//--------------------------------------------------------------------------------------//\n//                                   BOOST_ASSERT_MSG                                   //\n//--------------------------------------------------------------------------------------//\n\n# undef BOOST_ASSERT_MSG\n\n#if defined(BOOST_DISABLE_ASSERTS) || defined(NDEBUG)\n\n  #define BOOST_ASSERT_MSG(expr, msg) ((void)0)\n\n#elif defined(BOOST_ENABLE_ASSERT_HANDLER)\n\n  #include <boost/current_function.hpp>\n\n  namespace boost\n  {\n    void assertion_failed_msg(char const * expr, char const * msg,\n                              char const * function, char const * file, long line); // user defined\n  } // namespace boost\n\n  #define BOOST_ASSERT_MSG(expr, msg) ((expr) \\\n    ? ((void)0) \\\n    : ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))\n\n#else\n  #ifndef BOOST_ASSERT_HPP\n    #define BOOST_ASSERT_HPP\n    #include <cstdlib>\n    #include <iostream>\n    #include <boost/current_function.hpp>\n\n    //  IDE's like Visual Studio perform better if output goes to std::cout or\n    //  some other stream, so allow user to configure output stream:\n    #ifndef BOOST_ASSERT_MSG_OSTREAM\n    # define BOOST_ASSERT_MSG_OSTREAM std::cerr\n    #endif\n\n    namespace boost\n    { \n      namespace assertion \n      { \n        namespace detail\n        {\n          inline void assertion_failed_msg(char const * expr, char const * msg, char const * function,\n            char const * file, long line)\n          {\n            BOOST_ASSERT_MSG_OSTREAM\n              << \"***** Internal Program Error - assertion (\" << expr << \") failed in \"\n              << function << \":\\n\"\n              << file << '(' << line << \"): \" << msg << std::endl;\n            std::abort();\n          }\n        } // detail\n      } // assertion\n    } // detail\n  #endif\n\n  #define BOOST_ASSERT_MSG(expr, msg) ((expr) \\\n    ? ((void)0) \\\n    : ::boost::assertion::detail::assertion_failed_msg(#expr, msg, \\\n          BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))\n#endif\n\n//--------------------------------------------------------------------------------------//\n//                                     BOOST_VERIFY                                     //\n//--------------------------------------------------------------------------------------//\n\n#undef BOOST_VERIFY\n\n#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )\n\n# define BOOST_VERIFY(expr) ((void)(expr))\n\n#else\n\n# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/arg.hpp",
    "content": "#ifndef BOOST_BIND_ARG_HPP_INCLUDED\n#define BOOST_BIND_ARG_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/arg.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/is_placeholder.hpp>\n\nnamespace boost\n{\n\ntemplate< int I > struct arg\n{\n    arg()\n    {\n    }\n\n    template< class T > arg( T const & /* t */ )\n    {\n        // static assert I == is_placeholder<T>::value\n        typedef char T_must_be_placeholder[ I == is_placeholder<T>::value? 1: -1 ];\n    }\n};\n\ntemplate< int I > bool operator==( arg<I> const &, arg<I> const & )\n{\n    return true;\n}\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< int I > struct is_placeholder< arg<I> >\n{\n    enum _vt { value = I };\n};\n\ntemplate< int I > struct is_placeholder< arg<I> (*) () >\n{\n    enum _vt { value = I };\n};\n\n#endif\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/bind.hpp",
    "content": "#ifndef BOOST_BIND_BIND_HPP_INCLUDED\n#define BOOST_BIND_BIND_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind.hpp - binds function objects to arguments\n//\n//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2001 David Abrahams\n//  Copyright (c) 2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/ref.hpp>\n#include <boost/mem_fn.hpp>\n#include <boost/type.hpp>\n#include <boost/is_placeholder.hpp>\n#include <boost/bind/arg.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/visit_each.hpp>\n\n// Borland-specific bug, visit_each() silently fails to produce code\n\n#if defined(__BORLANDC__)\n#  define BOOST_BIND_VISIT_EACH boost::visit_each\n#else\n#  define BOOST_BIND_VISIT_EACH visit_each\n#endif\n\n#include <boost/bind/storage.hpp>\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace boost\n{\n\ntemplate<class T> class weak_ptr;\n\nnamespace _bi // implementation details\n{\n\n// result_traits\n\ntemplate<class R, class F> struct result_traits\n{\n    typedef R type;\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\nstruct unspecified {};\n\ntemplate<class F> struct result_traits<unspecified, F>\n{\n    typedef typename F::result_type type;\n};\n\ntemplate<class F> struct result_traits< unspecified, reference_wrapper<F> >\n{\n    typedef typename F::result_type type;\n};\n\n#endif\n\n// ref_compare\n\ntemplate<class T> bool ref_compare( T const & a, T const & b, long )\n{\n    return a == b;\n}\n\ntemplate<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )\n{\n    return true;\n}\n\ntemplate<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )\n{\n    return true;\n}\n\ntemplate<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )\n{\n    return a.get_pointer() == b.get_pointer();\n}\n\n// bind_t forward declaration for listN\n\ntemplate<class R, class F, class L> class bind_t;\n\ntemplate<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )\n{\n    return a.compare( b );\n}\n\n// value\n\ntemplate<class T> class value\n{\npublic:\n\n    value(T const & t): t_(t) {}\n\n    T & get() { return t_; }\n    T const & get() const { return t_; }\n\n    bool operator==(value const & rhs) const\n    {\n        return t_ == rhs.t_;\n    }\n\nprivate:\n\n    T t_;\n};\n\n// ref_compare for weak_ptr\n\ntemplate<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int )\n{\n    return !(a.get() < b.get()) && !(b.get() < a.get());\n}\n\n// type\n\ntemplate<class T> class type {};\n\n// unwrap\n\ntemplate<class F> struct unwrapper\n{\n    static inline F & unwrap( F & f, long )\n    {\n        return f;\n    }\n\n    template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )\n    {\n        return rf.get();\n    }\n\n    template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )\n    {\n        return _mfi::dm<R, T>( pm );\n    }\n};\n\n// listN\n\nclass list0\n{\npublic:\n\n    list0() {}\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)();\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)();\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A &, int)\n    {\n        unwrapper<F>::unwrap(f, 0)();\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A &, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)();\n    }\n\n    template<class V> void accept(V &) const\n    {\n    }\n\n    bool operator==(list0 const &) const\n    {\n        return true;\n    }\n};\n\n#ifdef BOOST_MSVC\n// MSVC is bright enough to realise that the parameter rhs \n// in operator==may be unused for some template argument types:\n#pragma warning(push)\n#pragma warning(disable:4100)\n#endif\n\ntemplate< class A1 > class list1: private storage1< A1 >\n{\nprivate:\n\n    typedef storage1< A1 > base_type;\n\npublic:\n\n    explicit list1( A1 a1 ): base_type( a1 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n\n    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }\n\n    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list1 const & rhs) const\n    {\n        return ref_compare(base_type::a1_, rhs.a1_, 0);\n    }\n};\n\nstruct logical_and;\nstruct logical_or;\n\ntemplate< class A1, class A2 > class list2: private storage2< A1, A2 >\n{\nprivate:\n\n    typedef storage2< A1, A2 > base_type;\n\npublic:\n\n    list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);\n    }\n\n    template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )\n    {\n        return a[ base_type::a1_ ] && a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const\n    {\n        return a[ base_type::a1_ ] && a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )\n    {\n        return a[ base_type::a1_ ] || a[ base_type::a2_ ];\n    }\n\n    template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const\n    {\n        return a[ base_type::a1_ ] || a[ base_type::a2_ ];\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list2 const & rhs) const\n    {\n        return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);\n    }\n};\n\ntemplate< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >\n{\nprivate:\n\n    typedef storage3< A1, A2, A3 > base_type;\n\npublic:\n\n    list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list3 const & rhs) const\n    {\n        return\n            \n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >\n{\nprivate:\n\n    typedef storage4< A1, A2, A3, A4 > base_type;\n\npublic:\n\n    list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list4 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >\n{\nprivate:\n\n    typedef storage5< A1, A2, A3, A4, A5 > base_type;\n\npublic:\n\n    list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list5 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >\n{\nprivate:\n\n    typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;\n\npublic:\n\n    list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list6 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\nprivate:\n\n    typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;\n\npublic:\n\n    list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list7 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 );\n    }\n};\n\ntemplate< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\nprivate:\n\n    typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;\n\npublic:\n\n    list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list8 const & rhs) const\n    {\n        return\n            \n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&\n            ref_compare( base_type::a8_, rhs.a8_, 0 );\n    }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >\n{\nprivate:\n\n    typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;\n\npublic:\n\n    list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}\n\n    A1 operator[] (boost::arg<1>) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2>) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3>) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4>) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5>) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6>) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7>) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8>) const { return base_type::a8_; }\n    A9 operator[] (boost::arg<9>) const { return base_type::a9_; }\n\n    A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }\n    A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }\n    A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }\n    A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }\n    A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }\n    A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }\n    A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }\n    A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }\n    A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }\n\n    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }\n\n    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }\n\n    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }\n\n    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }\n\n    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)\n    {\n        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const\n    {\n        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F & f, A & a, int)\n    {\n        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const\n    {\n        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n        base_type::accept(v);\n    }\n\n    bool operator==(list9 const & rhs) const\n    {\n        return\n\n            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&\n            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&\n            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&\n            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&\n            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&\n            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&\n            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&\n            ref_compare( base_type::a8_, rhs.a8_, 0 ) &&\n            ref_compare( base_type::a9_, rhs.a9_, 0 );\n    }\n};\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n// bind_t\n\n#ifndef BOOST_NO_VOID_RETURNS\n\ntemplate<class R, class F, class L> class bind_t\n{\npublic:\n\n    typedef bind_t this_type;\n\n    bind_t(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN return\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n#else\n\ntemplate<class R> struct bind_t_generator\n{\n\ntemplate<class F, class L> class implementation\n{\npublic:\n\n    typedef implementation this_type;\n\n    implementation(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN return\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n};\n\ntemplate<> struct bind_t_generator<void>\n{\n\ntemplate<class F, class L> class implementation\n{\nprivate:\n\n    typedef void R;\n\npublic:\n\n    typedef implementation this_type;\n\n    implementation(F f, L const & l): f_(f), l_(l) {}\n\n#define BOOST_BIND_RETURN\n#include <boost/bind/bind_template.hpp>\n#undef BOOST_BIND_RETURN\n\n};\n\n};\n\ntemplate<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>\n{\npublic:\n\n    bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}\n\n};\n\n#endif\n\n// function_equal\n\n#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// put overloads in _bi, rely on ADL\n\n# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )\n{\n    return a.compare(b);\n}\n\n# else\n\ntemplate<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )\n{\n    return a.compare(b);\n}\n\n# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n#else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// put overloads in boost\n\n} // namespace _bi\n\n# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )\n{\n    return a.compare(b);\n}\n\n# else\n\ntemplate<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )\n{\n    return a.compare(b);\n}\n\n# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace _bi\n{\n\n#endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\n\n// add_value\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)\n\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) )\n\ntemplate<class T> struct add_value\n{\n    typedef _bi::value<T> type;\n};\n\n#else\n\ntemplate< class T, int I > struct add_value_2\n{\n    typedef boost::arg<I> type;\n};\n\ntemplate< class T > struct add_value_2< T, 0 >\n{\n    typedef _bi::value< T > type;\n};\n\ntemplate<class T> struct add_value\n{\n    typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type;\n};\n\n#endif\n\ntemplate<class T> struct add_value< value<T> >\n{\n    typedef _bi::value<T> type;\n};\n\ntemplate<class T> struct add_value< reference_wrapper<T> >\n{\n    typedef reference_wrapper<T> type;\n};\n\ntemplate<int I> struct add_value< arg<I> >\n{\n    typedef boost::arg<I> type;\n};\n\ntemplate<int I> struct add_value< arg<I> (*) () >\n{\n    typedef boost::arg<I> (*type) ();\n};\n\ntemplate<class R, class F, class L> struct add_value< bind_t<R, F, L> >\n{\n    typedef bind_t<R, F, L> type;\n};\n\n#else\n\ntemplate<int I> struct _avt_0;\n\ntemplate<> struct _avt_0<1>\n{\n    template<class T> struct inner\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct _avt_0<2>\n{\n    template<class T> struct inner\n    {\n        typedef value<T> type;\n    };\n};\n\ntypedef char (&_avt_r1) [1];\ntypedef char (&_avt_r2) [2];\n\ntemplate<class T> _avt_r1 _avt_f(value<T>);\ntemplate<class T> _avt_r1 _avt_f(reference_wrapper<T>);\ntemplate<int I> _avt_r1 _avt_f(arg<I>);\ntemplate<int I> _avt_r1 _avt_f(arg<I> (*) ());\ntemplate<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);\n\n_avt_r2 _avt_f(...);\n\ntemplate<class T> struct add_value\n{\n    static T t();\n    typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;\n};\n\n#endif\n\n// list_av_N\n\ntemplate<class A1> struct list_av_1\n{\n    typedef typename add_value<A1>::type B1;\n    typedef list1<B1> type;\n};\n\ntemplate<class A1, class A2> struct list_av_2\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef list2<B1, B2> type;\n};\n\ntemplate<class A1, class A2, class A3> struct list_av_3\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef list3<B1, B2, B3> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4> struct list_av_4\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef list4<B1, B2, B3, B4> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5> struct list_av_5\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef list5<B1, B2, B3, B4, B5> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef list6<B1, B2, B3, B4, B5, B6> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef list7<B1, B2, B3, B4, B5, B6, B7> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef typename add_value<A8>::type B8;\n    typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9\n{\n    typedef typename add_value<A1>::type B1;\n    typedef typename add_value<A2>::type B2;\n    typedef typename add_value<A3>::type B3;\n    typedef typename add_value<A4>::type B4;\n    typedef typename add_value<A5>::type B5;\n    typedef typename add_value<A6>::type B6;\n    typedef typename add_value<A7>::type B7;\n    typedef typename add_value<A8>::type B8;\n    typedef typename add_value<A9>::type B9;\n    typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;\n};\n\n// operator!\n\nstruct logical_not\n{\n    template<class V> bool operator()(V const & v) const { return !v; }\n};\n\ntemplate<class R, class F, class L>\n    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >\n    operator! (bind_t<R, F, L> const & f)\n{\n    typedef list1< bind_t<R, F, L> > list_type;\n    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );\n}\n\n// relational operators\n\n#define BOOST_BIND_OPERATOR( op, name ) \\\n\\\nstruct name \\\n{ \\\n    template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \\\n}; \\\n \\\ntemplate<class R, class F, class L, class A2> \\\n    bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \\\n    operator op (bind_t<R, F, L> const & f, A2 a2) \\\n{ \\\n    typedef typename add_value<A2>::type B2; \\\n    typedef list2< bind_t<R, F, L>, B2> list_type; \\\n    return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \\\n}\n\nBOOST_BIND_OPERATOR( ==, equal )\nBOOST_BIND_OPERATOR( !=, not_equal )\n\nBOOST_BIND_OPERATOR( <, less )\nBOOST_BIND_OPERATOR( <=, less_equal )\n\nBOOST_BIND_OPERATOR( >, greater )\nBOOST_BIND_OPERATOR( >=, greater_equal )\n\nBOOST_BIND_OPERATOR( &&, logical_and )\nBOOST_BIND_OPERATOR( ||, logical_or )\n\n#undef BOOST_BIND_OPERATOR\n\n#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)\n\n// resolve ambiguity with rel_ops\n\n#define BOOST_BIND_OPERATOR( op, name ) \\\n\\\ntemplate<class R, class F, class L> \\\n    bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \\\n    operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \\\n{ \\\n    typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \\\n    return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \\\n}\n\nBOOST_BIND_OPERATOR( !=, not_equal )\nBOOST_BIND_OPERATOR( <=, less_equal )\nBOOST_BIND_OPERATOR( >, greater )\nBOOST_BIND_OPERATOR( >=, greater_equal )\n\n#endif\n\n// visit_each, ADL\n\n#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \\\n   && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)\n\ntemplate<class V, class T> void visit_each( V & v, value<T> const & t, int )\n{\n    using boost::visit_each;\n    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );\n}\n\ntemplate<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )\n{\n    t.accept( v );\n}\n\n#endif\n\n} // namespace _bi\n\n// visit_each, no ADL\n\n#if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \\\n  || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)\n\ntemplate<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )\n{\n    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );\n}\n\ntemplate<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )\n{\n    t.accept( v );\n}\n\n#endif\n\n// is_bind_expression\n\ntemplate< class T > struct is_bind_expression\n{\n    enum _vt { value = 0 };\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > >\n{\n    enum _vt { value = 1 };\n};\n\n#endif\n\n// bind\n\n#ifndef BOOST_BIND\n#define BOOST_BIND bind\n#endif\n\n// generic function objects\n\ntemplate<class R, class F>\n    _bi::bind_t<R, F, _bi::list0>\n    BOOST_BIND(F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class F, class A1>\n    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class F, class A1, class A2>\n    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3>\n    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n// generic function objects, alternative syntax\n\ntemplate<class R, class F>\n    _bi::bind_t<R, F, _bi::list0>\n    BOOST_BIND(boost::type<R>, F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class F, class A1>\n    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class F, class A1, class A2>\n    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3>\n    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\n// adaptable function objects\n\ntemplate<class F>\n    _bi::bind_t<_bi::unspecified, F, _bi::list0>\n    BOOST_BIND(F f)\n{\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());\n}\n\ntemplate<class F, class A1>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(F f, A1 a1)\n{\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class F, class A1, class A2>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2)\n{\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class F, class A1, class A2, class A3>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)\n{\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\n#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n\n// function pointers\n\n#define BOOST_BIND_CC\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#ifdef BOOST_BIND_ENABLE_STDCALL\n\n#define BOOST_BIND_CC __stdcall\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#endif\n\n#ifdef BOOST_BIND_ENABLE_FASTCALL\n\n#define BOOST_BIND_CC __fastcall\n#define BOOST_BIND_ST\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_CC\n#undef BOOST_BIND_ST\n\n#endif\n\n#ifdef BOOST_BIND_ENABLE_PASCAL\n\n#define BOOST_BIND_ST pascal\n#define BOOST_BIND_CC\n\n#include <boost/bind/bind_cc.hpp>\n\n#undef BOOST_BIND_ST\n#undef BOOST_BIND_CC\n\n#endif\n\n// member function pointers\n\n#define BOOST_BIND_MF_NAME(X) X\n#define BOOST_BIND_MF_CC\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_BIND_MF_NAME(X) X##_cdecl\n#define BOOST_BIND_MF_CC __cdecl\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_BIND_MF_NAME(X) X##_stdcall\n#define BOOST_BIND_MF_CC __stdcall\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_BIND_MF_NAME(X) X##_fastcall\n#define BOOST_BIND_MF_CC __fastcall\n\n#include <boost/bind/bind_mf_cc.hpp>\n#include <boost/bind/bind_mf2_cc.hpp>\n\n#undef BOOST_BIND_MF_NAME\n#undef BOOST_BIND_MF_CC\n\n#endif\n\n// data member pointers\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n    || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) ) )\n\ntemplate<class R, class T, class A1>\n_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >\n    BOOST_BIND(R T::*f, A1 a1)\n{\n    typedef _mfi::dm<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );\n}\n\n#else\n\nnamespace _bi\n{\n\ntemplate< class Pm, int I > struct add_cref;\n\ntemplate< class M, class T > struct add_cref< M T::*, 0 >\n{\n    typedef M type;\n};\n\ntemplate< class M, class T > struct add_cref< M T::*, 1 >\n{\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4180)\n#endif\n    typedef M const & type;\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n};\n\ntemplate< class R, class T > struct add_cref< R (T::*) (), 1 >\n{\n    typedef void type;\n};\n\n#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION\n\ntemplate< class R, class T > struct add_cref< R (T::*) () const, 1 >\n{\n    typedef void type;\n};\n\n#endif // __IBMCPP__\n\ntemplate<class R> struct isref\n{\n    enum value_type { value = 0 };\n};\n\ntemplate<class R> struct isref< R& >\n{\n    enum value_type { value = 1 };\n};\n\ntemplate<class R> struct isref< R* >\n{\n    enum value_type { value = 1 };\n};\n\ntemplate<class Pm, class A1> struct dm_result\n{\n    typedef typename add_cref< Pm, 1 >::type type;\n};\n\ntemplate<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >\n{\n    typedef typename bind_t<R, F, L>::result_type result_type;\n    typedef typename add_cref< Pm, isref< result_type >::value >::type type;\n};\n\n} // namespace _bi\n\ntemplate< class A1, class M, class T >\n\n_bi::bind_t<\n    typename _bi::dm_result< M T::*, A1 >::type,\n    _mfi::dm<M, T>,\n    typename _bi::list_av_1<A1>::type\n>\n\nBOOST_BIND( M T::*f, A1 a1 )\n{\n    typedef typename _bi::dm_result< M T::*, A1 >::type result_type;\n    typedef _mfi::dm<M, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );\n}\n\n#endif\n\n} // namespace boost\n\n#ifndef BOOST_BIND_NO_PLACEHOLDERS\n\n# include <boost/bind/placeholders.hpp>\n\n#endif\n\n#ifdef BOOST_MSVC\n# pragma warning(default: 4512) // assignment operator could not be generated\n# pragma warning(pop)\n#endif\n\n#endif // #ifndef BOOST_BIND_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/bind_cc.hpp",
    "content": "//\n//  bind/bind_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\ntemplate<class R>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();\n    typedef _bi::list0 list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type());\n}\n\ntemplate<class R, class B1, class A1>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1), typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1);\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1));\n}\n\ntemplate<class R, class B1, class B2, class A1, class A2>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2), typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2);\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3), typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3);\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4), typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4);\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5), typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5);\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6), typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6);\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7), typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7);\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8), typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8);\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9), typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9);\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/bind_mf2_cc.hpp",
    "content": "//\n//  bind/bind_mf2_cc.hpp - member functions, type<> syntax\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n// 0\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (), A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class Rt2, class R, class T,\n    class A1>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));\n}\n\n// 1\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));\n}\n\n// 2\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\n// 3\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\n// 4\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\n// 5\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\n// 6\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\n// 7\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\n// 8\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class Rt2, class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/bind_mf_cc.hpp",
    "content": "//\n//  bind/bind_mf_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n// 0\n\ntemplate<class R, class T,\n    class A1>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));\n}\n\ntemplate<class R, class T,\n    class A1>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;\n    typedef typename _bi::list_av_1<A1>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));\n}\n\n// 1\n\ntemplate<class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));\n}\n\ntemplate<class R, class T,\n    class B1,\n    class A1, class A2>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;\n    typedef typename _bi::list_av_2<A1, A2>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));\n}\n\n// 2\n\ntemplate<class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\ntemplate<class R, class T,\n    class B1, class B2,\n    class A1, class A2, class A3>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;\n    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));\n}\n\n// 3\n\ntemplate<class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3,\n    class A1, class A2, class A3, class A4>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;\n    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));\n}\n\n// 4\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4,\n    class A1, class A2, class A3, class A4, class A5>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;\n    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));\n}\n\n// 5\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5,\n    class A1, class A2, class A3, class A4, class A5, class A6>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;\n    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));\n}\n\n// 6\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;\n    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));\n}\n\n// 7\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;\n    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));\n}\n\n// 8\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n\ntemplate<class R, class T,\n    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,\n    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\n    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>\n    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)\n{\n    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;\n    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;\n    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/bind_template.hpp",
    "content": "//\n//  bind/bind_template.hpp\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n    typedef typename result_traits<R, F>::type result_type;\n\n    result_type operator()()\n    {\n        list0 a;\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    result_type operator()() const\n    {\n        list0 a;\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 & a1)\n    {\n        list1<A1 &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 & a1) const\n    {\n        list1<A1 &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1> result_type operator()(A1 const & a1)\n    {\n        list1<A1 const &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1> result_type operator()(A1 const & a1) const\n    {\n        list1<A1 const &> a(a1);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)\n    {\n        list2<A1 &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const\n    {\n        list2<A1 &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)\n    {\n        list2<A1 const &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const\n    {\n        list2<A1 const &, A2 &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)\n    {\n        list2<A1 &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const\n    {\n        list2<A1 &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)\n    {\n        list2<A1 const &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const\n    {\n        list2<A1 const &, A2 const &> a(a1, a2);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)\n    {\n        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const\n    {\n        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3)\n    {\n        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const\n    {\n        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)\n    {\n        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const\n    {\n        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4)\n    {\n        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const\n    {\n        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)\n    {\n        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const\n    {\n        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5)\n    {\n        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const\n    {\n        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)\n    {\n        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const\n    {\n        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6)\n    {\n        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const\n    {\n        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)\n    {\n        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const\n    {\n        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7)\n    {\n        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const\n    {\n        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)\n    {\n        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const\n    {\n        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8)\n    {\n        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const\n    {\n        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)\n    {\n        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const\n    {\n        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \\\n && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9)\n    {\n        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const\n    {\n        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n#endif\n\n    template<class A> result_type eval(A & a)\n    {\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class A> result_type eval(A & a) const\n    {\n        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);\n    }\n\n    template<class V> void accept(V & v) const\n    {\n#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )\n\n        using boost::visit_each;\n\n#endif\n        BOOST_BIND_VISIT_EACH(v, f_, 0);\n        l_.accept(v);\n    }\n\n    bool compare(this_type const & rhs) const\n    {\n        return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;\n    }\n\nprivate:\n\n    F f_;\n    L l_;\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/mem_fn.hpp",
    "content": "#ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED\n#define BOOST_BIND_MEM_FN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  mem_fn.hpp - a generalization of std::mem_fun[_ref]\n//\n//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2001 David Abrahams\n//  Copyright (c) 2003-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/get_pointer.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n\n#if defined(BOOST_NO_VOID_RETURNS)\n\n#define BOOST_MEM_FN_CLASS_F , class F\n#define BOOST_MEM_FN_TYPEDEF(X)\n\nnamespace _mfi // mem_fun_impl\n{\n\ntemplate<class V> struct mf\n{\n\n#define BOOST_MEM_FN_RETURN return\n\n#define BOOST_MEM_FN_NAME(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n}; // struct mf<V>\n\ntemplate<> struct mf<void>\n{\n\n#define BOOST_MEM_FN_RETURN\n\n#define BOOST_MEM_FN_NAME(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n}; // struct mf<void>\n\n#undef BOOST_MEM_FN_CLASS_F\n#undef BOOST_MEM_FN_TYPEDEF_F\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_NAME2(X) inner_##X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_vw.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_NAME2\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n} // namespace _mfi\n\n#else // #ifdef BOOST_NO_VOID_RETURNS\n\n#define BOOST_MEM_FN_CLASS_F\n#define BOOST_MEM_FN_TYPEDEF(X) typedef X;\n\nnamespace _mfi\n{\n\n#define BOOST_MEM_FN_RETURN return\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_template.hpp>\n\n#undef BOOST_MEM_FN_CC\n#undef BOOST_MEM_FN_NAME\n\n#endif\n\n#undef BOOST_MEM_FN_RETURN\n\n} // namespace _mfi\n\n#undef BOOST_MEM_FN_CLASS_F\n#undef BOOST_MEM_FN_TYPEDEF\n\n#endif // #ifdef BOOST_NO_VOID_RETURNS\n\n#define BOOST_MEM_FN_NAME(X) X\n#define BOOST_MEM_FN_CC\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#ifdef BOOST_MEM_FN_ENABLE_CDECL\n\n#define BOOST_MEM_FN_NAME(X) X##_cdecl\n#define BOOST_MEM_FN_CC __cdecl\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_STDCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_stdcall\n#define BOOST_MEM_FN_CC __stdcall\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n#ifdef BOOST_MEM_FN_ENABLE_FASTCALL\n\n#define BOOST_MEM_FN_NAME(X) X##_fastcall\n#define BOOST_MEM_FN_CC __fastcall\n\n#include <boost/bind/mem_fn_cc.hpp>\n\n#undef BOOST_MEM_FN_NAME\n#undef BOOST_MEM_FN_CC\n\n#endif\n\n// data member support\n\nnamespace _mfi\n{\n\ntemplate<class R, class T> class dm\n{\npublic:\n\n    typedef R const & result_type;\n    typedef T const * argument_type;\n\nprivate:\n    \n    typedef R (T::*F);\n    F f_;\n\n    template<class U> R const & call(U & u, T const *) const\n    {\n        return (u.*f_);\n    }\n\n    template<class U> R const & call(U & u, void const *) const\n    {\n        return (get_pointer(u)->*f_);\n    }\n\npublic:\n    \n    explicit dm(F f): f_(f) {}\n\n    R & operator()(T * p) const\n    {\n        return (p->*f_);\n    }\n\n    R const & operator()(T const * p) const\n    {\n        return (p->*f_);\n    }\n\n    template<class U> R const & operator()(U const & u) const\n    {\n        return call(u, &u);\n    }\n\n#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)\n\n    R & operator()(T & t) const\n    {\n        return (t.*f_);\n    }\n\n    R const & operator()(T const & t) const\n    {\n        return (t.*f_);\n    }\n\n#endif\n\n    bool operator==(dm const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(dm const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n} // namespace _mfi\n\ntemplate<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)\n{\n    return _mfi::dm<R, T>(f);\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/mem_fn_cc.hpp",
    "content": "//\n//  bind/mem_fn_cc.hpp - support for different calling conventions\n//\n//  Do not include this header directly.\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\ntemplate<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) ())\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f);\n}\n\ntemplate<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f);\n}\n\ntemplate<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f);\n}\n\ntemplate<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f);\n}\n\ntemplate<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f);\n}\n\ntemplate<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8))\n{\n    return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);\n}\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const)\n{\n    return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);\n}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/mem_fn_template.hpp",
    "content": "//\n//  bind/mem_fn_template.hpp\n//\n//  Do not include this header directly\n//\n//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)\n# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n#endif\n\n// mf0\n\ntemplate<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)\n{\npublic:\n\n    typedef R result_type;\n    typedef T * argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())\n    F f_;\n\n    template<class U> R call(U & u, T const *) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)();\n    }\n\n    template<class U> R call(U & u, void const *) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}\n\n    R operator()(T * p) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)();\n    }\n\n    template<class U> R operator()(U & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n#endif\n\n    R operator()(T & t) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)();\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf0\n\ntemplate<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)\n{\npublic:\n\n    typedef R result_type;\n    typedef T const * argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)\n    F f_;\n\n    template<class U> R call(U & u, T const *) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)();\n    }\n\n    template<class U> R call(U & u, void const *) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p);\n    }\n\n    R operator()(T const & t) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)();\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf1\n\ntemplate<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)\n{\npublic:\n\n    typedef R result_type;\n    typedef T * first_argument_type;\n    typedef A1 second_argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))\n    F f_;\n\n    template<class U, class B1> R call(U & u, T const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1);\n    }\n\n    template<class U, class B1> R call(U & u, void const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1);\n    }\n\n    template<class U> R operator()(U & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf1\n\ntemplate<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)\n{\npublic:\n\n    typedef R result_type;\n    typedef T const * first_argument_type;\n    typedef A1 second_argument_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)\n    F f_;\n\n    template<class U, class B1> R call(U & u, T const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1);\n    }\n\n    template<class U, class B1> R call(U & u, void const *, B1 & b1) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1);\n    }\n\n    R operator()(T const & t, A1 a1) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf2\n\ntemplate<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))\n    F f_;\n\n    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);\n    }\n\n    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf2\n\ntemplate<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)\n    F f_;\n\n    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);\n    }\n\n    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf3\n\ntemplate<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))\n    F f_;\n\n    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);\n    }\n\n    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf3\n\ntemplate<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n\n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);\n    }\n\n    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);\n    }\n\npublic:\n\n    explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf4\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf4\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf5\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf5\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf6\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n\n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\npublic:\n\n    explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf6\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf7\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf7\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// mf8\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}\n\n    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n#endif\n\n    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n// cmf8\n\ntemplate<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)\n{\npublic:\n\n    typedef R result_type;\n\nprivate:\n    \n    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)\n    F f_;\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\n    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const\n    {\n        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);\n    }\n\npublic:\n    \n    explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}\n\n    R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        U const * p = 0;\n        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const\n    {\n        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);\n    }\n\n    bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const\n    {\n        return f_ == rhs.f_;\n    }\n\n    bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const\n    {\n        return f_ != rhs.f_;\n    }\n};\n\n#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/placeholders.hpp",
    "content": "#ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n#define BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/placeholders.hpp - _N definitions\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/bind/arg.hpp>\n#include <boost/config.hpp>\n\nnamespace\n{\n\n#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4)\n\nstatic inline boost::arg<1> _1() { return boost::arg<1>(); }\nstatic inline boost::arg<2> _2() { return boost::arg<2>(); }\nstatic inline boost::arg<3> _3() { return boost::arg<3>(); }\nstatic inline boost::arg<4> _4() { return boost::arg<4>(); }\nstatic inline boost::arg<5> _5() { return boost::arg<5>(); }\nstatic inline boost::arg<6> _6() { return boost::arg<6>(); }\nstatic inline boost::arg<7> _7() { return boost::arg<7>(); }\nstatic inline boost::arg<8> _8() { return boost::arg<8>(); }\nstatic inline boost::arg<9> _9() { return boost::arg<9>(); }\n\n#elif defined(BOOST_MSVC) || (defined(__DECCXX_VER) && __DECCXX_VER <= 60590031) || defined(__MWERKS__) || \\\n    defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 2)  \n\nstatic boost::arg<1> _1;\nstatic boost::arg<2> _2;\nstatic boost::arg<3> _3;\nstatic boost::arg<4> _4;\nstatic boost::arg<5> _5;\nstatic boost::arg<6> _6;\nstatic boost::arg<7> _7;\nstatic boost::arg<8> _8;\nstatic boost::arg<9> _9;\n\n#else\n\nboost::arg<1> _1;\nboost::arg<2> _2;\nboost::arg<3> _3;\nboost::arg<4> _4;\nboost::arg<5> _5;\nboost::arg<6> _6;\nboost::arg<7> _7;\nboost::arg<8> _8;\nboost::arg<9> _9;\n\n#endif\n\n} // unnamed namespace\n\n#endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind/storage.hpp",
    "content": "#ifndef BOOST_BIND_STORAGE_HPP_INCLUDED\n#define BOOST_BIND_STORAGE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind/storage.hpp\n//\n//  boost/bind.hpp support header, optimized storage\n//\n//  Copyright (c) 2006 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/config.hpp>\n#include <boost/bind/arg.hpp>\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace boost\n{\n\nnamespace _bi\n{\n\n// 1\n\ntemplate<class A1> struct storage1\n{\n    explicit storage1( A1 a1 ): a1_( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        BOOST_BIND_VISIT_EACH(v, a1_, 0);\n    }\n\n    A1 a1_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( __BORLANDC__ )\n\ntemplate<int I> struct storage1< boost::arg<I> >\n{\n    explicit storage1( boost::arg<I> ) {}\n\n    template<class V> void accept(V &) const { }\n\n    static boost::arg<I> a1_() { return boost::arg<I>(); }\n};\n\ntemplate<int I> struct storage1< boost::arg<I> (*) () >\n{\n    explicit storage1( boost::arg<I> (*) () ) {}\n\n    template<class V> void accept(V &) const { }\n\n    static boost::arg<I> a1_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 2\n\ntemplate<class A1, class A2> struct storage2: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, A2 a2 ): storage1<A1>( a1 ), a2_( a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a2_, 0);\n    }\n\n    A2 a2_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, int I> struct storage2< A1, boost::arg<I> >: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, boost::arg<I> ): storage1<A1>( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a2_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, int I> struct storage2< A1, boost::arg<I> (*) () >: public storage1<A1>\n{\n    typedef storage1<A1> inherited;\n\n    storage2( A1 a1, boost::arg<I> (*) () ): storage1<A1>( a1 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a2_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 3\n\ntemplate<class A1, class A2, class A3> struct storage3: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, A3 a3 ): storage2<A1, A2>( a1, a2 ), a3_( a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a3_, 0);\n    }\n\n    A3 a3_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> >: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, boost::arg<I> ): storage2<A1, A2>( a1, a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a3_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> (*) () >: public storage2< A1, A2 >\n{\n    typedef storage2<A1, A2> inherited;\n\n    storage3( A1 a1, A2 a2, boost::arg<I> (*) () ): storage2<A1, A2>( a1, a2 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a3_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 4\n\ntemplate<class A1, class A2, class A3, class A4> struct storage4: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3<A1, A2, A3>( a1, a2, a3 ), a4_( a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a4_, 0);\n    }\n\n    A4 a4_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> >: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> ): storage3<A1, A2, A3>( a1, a2, a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a4_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> (*) () >: public storage3< A1, A2, A3 >\n{\n    typedef storage3<A1, A2, A3> inherited;\n\n    storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> (*) () ): storage3<A1, A2, A3>( a1, a2, a3 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a4_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 5\n\ntemplate<class A1, class A2, class A3, class A4, class A5> struct storage5: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ), a5_( a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a5_, 0);\n    }\n\n    A5 a5_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> >: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a5_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> (*) () >: public storage4< A1, A2, A3, A4 >\n{\n    typedef storage4<A1, A2, A3, A4> inherited;\n\n    storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> (*) () ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a5_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 6\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6> struct storage6: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ), a6_( a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a6_, 0);\n    }\n\n    A6 a6_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> >: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a6_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> (*) () >: public storage5< A1, A2, A3, A4, A5 >\n{\n    typedef storage5<A1, A2, A3, A4, A5> inherited;\n\n    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> (*) () ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a6_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 7\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct storage7: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a7_, 0);\n    }\n\n    A7 a7_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> >: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a7_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> (*) () >: public storage6< A1, A2, A3, A4, A5, A6 >\n{\n    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;\n\n    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> (*) () ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a7_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 8\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ), a8_( a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a8_, 0);\n    }\n\n    A8 a8_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> >: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a8_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 >\n{\n    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;\n\n    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> (*) () ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a8_() { return boost::arg<I>(); }\n};\n\n#endif\n\n// 9\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ), a9_( a9 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n        BOOST_BIND_VISIT_EACH(v, a9_, 0);\n    }\n\n    A9 a9_;\n};\n\n#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a9_() { return boost::arg<I>(); }\n};\n\ntemplate<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >\n{\n    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;\n\n    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> (*) () ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}\n\n    template<class V> void accept(V & v) const\n    {\n        inherited::accept(v);\n    }\n\n    static boost::arg<I> a9_() { return boost::arg<I>(); }\n};\n\n#endif\n\n} // namespace _bi\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n# pragma warning(default: 4512) // assignment operator could not be generated\n# pragma warning(pop)\n#endif\n\n#endif // #ifndef BOOST_BIND_STORAGE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/bind.hpp",
    "content": "#ifndef BOOST_BIND_HPP_INCLUDED\n#define BOOST_BIND_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  bind.hpp - binds function objects to arguments\n//\n//  Copyright (c) 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/bind.html for documentation.\n//\n\n#include <boost/bind/bind.hpp>\n\n#endif // #ifndef BOOST_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/call_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/utility for most recent version including documentation.\n\n//  See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp\n//  for full copyright notices.\n\n#ifndef BOOST_CALL_TRAITS_HPP\n#define BOOST_CALL_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/detail/ob_call_traits.hpp>\n#else\n#include <boost/detail/call_traits.hpp>\n#endif\n\n#endif // BOOST_CALL_TRAITS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/checked_delete.hpp",
    "content": "#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED\n#define BOOST_CHECKED_DELETE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/checked_delete.hpp\n//\n//  Copyright (c) 2002, 2003 Peter Dimov\n//  Copyright (c) 2003 Daniel Frey\n//  Copyright (c) 2003 Howard Hinnant\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/utility/checked_delete.html for documentation.\n//\n\nnamespace boost\n{\n\n// verify that types are complete for increased safety\n\ntemplate<class T> inline void checked_delete(T * x)\n{\n    // intentionally complex - simplification causes regressions\n    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];\n    (void) sizeof(type_must_be_complete);\n    delete x;\n}\n\ntemplate<class T> inline void checked_array_delete(T * x)\n{\n    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];\n    (void) sizeof(type_must_be_complete);\n    delete [] x;\n}\n\ntemplate<class T> struct checked_deleter\n{\n    typedef void result_type;\n    typedef T * argument_type;\n\n    void operator()(T * x) const\n    {\n        // boost:: disables ADL\n        boost::checked_delete(x);\n    }\n};\n\ntemplate<class T> struct checked_array_deleter\n{\n    typedef void result_type;\n    typedef T * argument_type;\n\n    void operator()(T * x) const\n    {\n        boost::checked_array_delete(x);\n    }\n};\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/assert.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n# define BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/workaround.hpp>\n\n// The old protocol used a constraints() member function in concept\n// checking classes.  If the compiler supports SFINAE, we can detect\n// that function and seamlessly support the old concept checking\n// classes.  In this release, backward compatibility with the old\n// concept checking classes is enabled by default, where available.\n// The old protocol is deprecated, though, and backward compatibility\n// will no longer be the default in the next release.\n\n# if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT)                                         \\\n    && !defined(BOOST_NO_SFINAE)                                                    \\\n                                                                                    \\\n    && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4)) \\\n    && !(BOOST_WORKAROUND(__GNUC__, == 2))\n\n// Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to\n// check for the presence of particularmember functions.\n\n#  define BOOST_OLD_CONCEPT_SUPPORT\n\n# endif\n\n# ifdef BOOST_MSVC\n#  include <boost/concept/detail/msvc.hpp>\n# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n#  include <boost/concept/detail/borland.hpp>\n# else \n#  include <boost/concept/detail/general.hpp>\n# endif\n\n  // Usage, in class or function context:\n  //\n  //     BOOST_CONCEPT_ASSERT((UnaryFunctionConcept<F,bool,int>));\n  //\n# define BOOST_CONCEPT_ASSERT(ModelInParens) \\\n    BOOST_CONCEPT_ASSERT_FN(void(*)ModelInParens)\n\n#endif // BOOST_CONCEPT_ASSERT_DWA2006430_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/detail/backward_compatibility.hpp",
    "content": "// Copyright David Abrahams 2009. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n# define BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n\nnamespace boost\n{\n  namespace concepts {}\n\n# if defined(BOOST_HAS_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD)\n  namespace concept = concepts;\n# endif \n} // namespace boost::concept\n\n#endif // BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/detail/concept_def.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n# define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n# include <boost/preprocessor/seq/for_each_i.hpp>\n# include <boost/preprocessor/seq/enum.hpp>\n# include <boost/preprocessor/comma_if.hpp>\n# include <boost/preprocessor/cat.hpp>\n#endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP\n\n// BOOST_concept(SomeName, (p1)(p2)...(pN))\n//\n// Expands to \"template <class p1, class p2, ...class pN> struct SomeName\"\n//\n// Also defines an equivalent SomeNameConcept for backward compatibility.\n// Maybe in the next release we can kill off the \"Concept\" suffix for good.\n#if BOOST_WORKAROUND(__GNUC__, <= 3)\n# define BOOST_concept(name, params)                                            \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name; /* forward declaration */                                      \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct BOOST_PP_CAT(name,Concept)                                           \\\n      : name< BOOST_PP_SEQ_ENUM(params) >                                       \\\n    {                                                                           \\\n        /* at least 2.96 and 3.4.3 both need this */                            \\\n        BOOST_PP_CAT(name,Concept)();                                           \\\n    };                                                                          \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name                                                                \n#else\n# define BOOST_concept(name, params)                                            \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name; /* forward declaration */                                      \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct BOOST_PP_CAT(name,Concept)                                           \\\n      : name< BOOST_PP_SEQ_ENUM(params) >                                       \\\n    {                                                                           \\\n    };                                                                          \\\n                                                                                \\\n    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \\\n    struct name                                                                \n#endif\n    \n// Helper for BOOST_concept, above.\n# define BOOST_CONCEPT_typename(r, ignored, index, t) \\\n    BOOST_PP_COMMA_IF(index) typename t\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/detail/concept_undef.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n# undef BOOST_concept_typename\n# undef BOOST_concept\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/detail/general.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n# define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n\n# include <boost/preprocessor/cat.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n#  include <boost/concept/detail/has_constraints.hpp>\n#  include <boost/mpl/if.hpp>\n# endif\n\n// This implementation works on Comeau and GCC, all the way back to\n// 2.95\nnamespace boost { namespace concepts {\n\ntemplate <class ModelFn>\nstruct requirement_;\n\nnamespace detail\n{\n  template <void(*)()> struct instantiate {};\n}\n\ntemplate <class Model>\nstruct requirement\n{\n    static void failed() { ((Model*)0)->~Model(); }\n};\n\nstruct failed {};\n\ntemplate <class Model>\nstruct requirement<failed ************ Model::************>\n{\n    static void failed() { ((Model*)0)->~Model(); }\n};\n\n# ifdef BOOST_OLD_CONCEPT_SUPPORT\n\ntemplate <class Model>\nstruct constraint\n{\n    static void failed() { ((Model*)0)->constraints(); }\n};\n  \ntemplate <class Model>\nstruct requirement_<void(*)(Model)>\n  : mpl::if_<\n        concepts::not_satisfied<Model>\n      , constraint<Model>\n      , requirement<failed ************ Model::************>\n    >::type\n{};\n  \n# else\n\n// For GCC-2.x, these can't have exactly the same name\ntemplate <class Model>\nstruct requirement_<void(*)(Model)>\n    : requirement<failed ************ Model::************>\n{};\n  \n# endif\n\n#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \\\n    typedef ::boost::concepts::detail::instantiate<          \\\n    &::boost::concepts::requirement_<ModelFnPtr>::failed>    \\\n      BOOST_PP_CAT(boost_concept_check,__LINE__)\n\n}}\n\n#endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/detail/has_constraints.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n# define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n\n# include <boost/mpl/bool.hpp>\n# include <boost/detail/workaround.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\nnamespace boost { namespace concepts {\n\nnamespace detail\n{ \n\n// Here we implement the metafunction that detects whether a\n// constraints metafunction exists\n  typedef char yes;\n  typedef char (&no)[2];\n\n  template <class Model, void (Model::*)()>\n  struct wrap_constraints {};\n    \n#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__)\n  // Work around the following bogus error in Sun Studio 11, by\n  // turning off the has_constraints function entirely:\n  //    Error: complex expression not allowed in dependent template\n  //    argument expression\n  inline no has_constraints_(...);\n#else\n  template <class Model>\n  inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0);\n  inline no has_constraints_(...);\n#endif\n}\n\n// This would be called \"detail::has_constraints,\" but it has a strong\n// tendency to show up in error messages.\ntemplate <class Model>\nstruct not_satisfied\n{\n    BOOST_STATIC_CONSTANT(\n        bool\n      , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) );\n    typedef mpl::bool_<value> type;\n};\n\n}} // namespace boost::concepts::detail\n\n#endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept/usage.hpp",
    "content": "// Copyright David Abrahams 2006. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_CONCEPT_USAGE_DWA2006919_HPP\n# define BOOST_CONCEPT_USAGE_DWA2006919_HPP\n\n# include <boost/concept/assert.hpp>\n# include <boost/detail/workaround.hpp>\n# include <boost/concept/detail/backward_compatibility.hpp>\n\nnamespace boost { namespace concepts { \n\n# if BOOST_WORKAROUND(__GNUC__, == 2)\n\n#  define BOOST_CONCEPT_USAGE(model) ~model()\n\n# else \n\ntemplate <class Model>\nstruct usage_requirements\n{\n    ~usage_requirements() { ((Model*)0)->~Model(); }\n};\n\n#  if BOOST_WORKAROUND(__GNUC__, <= 3)\n\n#   define BOOST_CONCEPT_USAGE(model)                                    \\\n      model(); /* at least 2.96 and 3.4.3 both need this :( */           \\\n      BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \\\n      ~model()\n\n#  else\n\n#   define BOOST_CONCEPT_USAGE(model)                                    \\\n      BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \\\n      ~model()\n\n#  endif\n\n# endif \n\n}} // namespace boost::concepts\n\n#endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/concept_check.hpp",
    "content": "//\n// (C) Copyright Jeremy Siek 2000.\n// Copyright 2002 The Trustees of Indiana University.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// Revision History:\n//   05 May   2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)\n//   02 April 2001: Removed limits header altogether. (Jeremy Siek)\n//   01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)\n//\n\n// See http://www.boost.org/libs/concept_check for documentation.\n\n#ifndef BOOST_CONCEPT_CHECKS_HPP\n# define BOOST_CONCEPT_CHECKS_HPP\n\n# include <boost/concept/assert.hpp>\n\n# include <boost/iterator.hpp>\n# include <boost/type_traits/conversion_traits.hpp>\n# include <utility>\n# include <boost/type_traits/is_same.hpp>\n# include <boost/type_traits/is_void.hpp>\n# include <boost/mpl/assert.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/detail/workaround.hpp>\n# include <boost/detail/iterator.hpp>\n\n# include <boost/concept/usage.hpp>\n# include <boost/concept/detail/concept_def.hpp>\n\nnamespace boost\n{\n\n  //\n  // Backward compatibility\n  //\n\n  template <class Model>\n  inline void function_requires(Model* = 0)\n  {\n      BOOST_CONCEPT_ASSERT((Model));\n  }\n  template <class T> inline void ignore_unused_variable_warning(T const&) {}\n\n#  define BOOST_CLASS_REQUIRE(type_var, ns, concept)    \\\n    BOOST_CONCEPT_ASSERT((ns::concept<type_var>))\n\n#  define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept)   \\\n    BOOST_CONCEPT_ASSERT((ns::concept<type_var1,type_var2>))\n\n#  define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept)  \\\n    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3>))\n\n#  define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \\\n    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3,tv4>))\n\n\n  //\n  // Begin concept definitions\n  //\n  BOOST_concept(Integer, (T))\n  {\n      BOOST_CONCEPT_USAGE(Integer)\n        {\n            x.error_type_must_be_an_integer_type();\n        }\n   private:\n      T x;\n  };\n\n  template <> struct Integer<char> {};\n  template <> struct Integer<signed char> {};\n  template <> struct Integer<unsigned char> {};\n  template <> struct Integer<short> {};\n  template <> struct Integer<unsigned short> {};\n  template <> struct Integer<int> {};\n  template <> struct Integer<unsigned int> {};\n  template <> struct Integer<long> {};\n  template <> struct Integer<unsigned long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct Integer< ::boost::long_long_type> {};\n  template <> struct Integer< ::boost::ulong_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct Integer<__int64> {};\n  template <> struct Integer<unsigned __int64> {};\n# endif\n\n  BOOST_concept(SignedInteger,(T)) {\n    BOOST_CONCEPT_USAGE(SignedInteger) {\n      x.error_type_must_be_a_signed_integer_type();\n    }\n   private:\n    T x;\n  };\n  template <> struct SignedInteger<signed char> { };\n  template <> struct SignedInteger<short> {};\n  template <> struct SignedInteger<int> {};\n  template <> struct SignedInteger<long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct SignedInteger< ::boost::long_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct SignedInteger<__int64> {};\n# endif\n\n  BOOST_concept(UnsignedInteger,(T)) {\n    BOOST_CONCEPT_USAGE(UnsignedInteger) {\n      x.error_type_must_be_an_unsigned_integer_type();\n    }\n   private:\n    T x;\n  };\n\n  template <> struct UnsignedInteger<unsigned char> {};\n  template <> struct UnsignedInteger<unsigned short> {};\n  template <> struct UnsignedInteger<unsigned int> {};\n  template <> struct UnsignedInteger<unsigned long> {};\n# if defined(BOOST_HAS_LONG_LONG)\n  template <> struct UnsignedInteger< ::boost::ulong_long_type> {};\n# elif defined(BOOST_HAS_MS_INT64)\n  template <> struct UnsignedInteger<unsigned __int64> {};\n# endif\n\n  //===========================================================================\n  // Basic Concepts\n\n  BOOST_concept(DefaultConstructible,(TT))\n  {\n    BOOST_CONCEPT_USAGE(DefaultConstructible) {\n      TT a;               // require default constructor\n      ignore_unused_variable_warning(a);\n    }\n  };\n\n  BOOST_concept(Assignable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(Assignable) {\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = b;             // require assignment operator\n#endif\n      const_constraints(b);\n    }\n   private:\n    void const_constraints(const TT& x) {\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = x;              // const required for argument to assignment\n#else\n      ignore_unused_variable_warning(x);\n#endif\n    }\n   private:\n    TT a;\n    TT b;\n  };\n\n\n  BOOST_concept(CopyConstructible,(TT))\n  {\n    BOOST_CONCEPT_USAGE(CopyConstructible) {\n      TT a(b);            // require copy constructor\n      TT* ptr = &a;       // require address of operator\n      const_constraints(a);\n      ignore_unused_variable_warning(ptr);\n    }\n   private:\n    void const_constraints(const TT& a) {\n      TT c(a);            // require const copy constructor\n      const TT* ptr = &a; // require const address of operator\n      ignore_unused_variable_warning(c);\n      ignore_unused_variable_warning(ptr);\n    }\n    TT b;\n  };\n\n#if (defined _MSC_VER)\n# pragma warning( push )\n# pragma warning( disable : 4510 ) // default constructor could not be generated\n# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required\n#endif\n  // The SGI STL version of Assignable requires copy constructor and operator=\n  BOOST_concept(SGIAssignable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(SGIAssignable) {\n      TT c(a);\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = b;              // require assignment operator\n#endif\n      const_constraints(b);\n      ignore_unused_variable_warning(c);\n    }\n   private:\n    void const_constraints(const TT& x) {\n      TT c(x);\n#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL\n      a = x;              // const required for argument to assignment\n#endif\n      ignore_unused_variable_warning(c);\n    }\n    TT a;\n    TT b;\n  };\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#endif\n\n  BOOST_concept(Convertible,(X)(Y))\n  {\n    BOOST_CONCEPT_USAGE(Convertible) {\n      Y y = x;\n      ignore_unused_variable_warning(y);\n    }\n   private:\n    X x;\n  };\n\n  // The C++ standard requirements for many concepts talk about return\n  // types that must be \"convertible to bool\".  The problem with this\n  // requirement is that it leaves the door open for evil proxies that\n  // define things like operator|| with strange return types.  Two\n  // possible solutions are:\n  // 1) require the return type to be exactly bool\n  // 2) stay with convertible to bool, and also\n  //    specify stuff about all the logical operators.\n  // For now we just test for convertible to bool.\n  template <class TT>\n  void require_boolean_expr(const TT& t) {\n    bool x = t;\n    ignore_unused_variable_warning(x);\n  }\n\n  BOOST_concept(EqualityComparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(EqualityComparable) {\n      require_boolean_expr(a == b);\n      require_boolean_expr(a != b);\n    }\n   private:\n    TT a, b;\n  };\n\n  BOOST_concept(LessThanComparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(LessThanComparable) {\n      require_boolean_expr(a < b);\n    }\n   private:\n    TT a, b;\n  };\n\n  // This is equivalent to SGI STL's LessThanComparable.\n  BOOST_concept(Comparable,(TT))\n  {\n    BOOST_CONCEPT_USAGE(Comparable) {\n      require_boolean_expr(a < b);\n      require_boolean_expr(a > b);\n      require_boolean_expr(a <= b);\n      require_boolean_expr(a >= b);\n    }\n   private:\n    TT a, b;\n  };\n\n#define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME)    \\\n  BOOST_concept(NAME, (First)(Second))                          \\\n  {                                                             \\\n      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                         \\\n     private:                                                   \\\n        bool constraints_() { return a OP b; }                  \\\n        First a;                                                \\\n        Second b;                                               \\\n  }\n\n#define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME)    \\\n  BOOST_concept(NAME, (Ret)(First)(Second))                 \\\n  {                                                         \\\n      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                     \\\n  private:                                                  \\\n      Ret constraints_() { return a OP b; }                 \\\n      First a;                                              \\\n      Second b;                                             \\\n  }\n\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOp);\n  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOp);\n\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOp);\n  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOp);\n\n  //===========================================================================\n  // Function Object Concepts\n\n  BOOST_concept(Generator,(Func)(Return))\n  {\n      BOOST_CONCEPT_USAGE(Generator) { test(is_void<Return>()); }\n\n   private:\n      void test(boost::mpl::false_)\n      {\n          // Do we really want a reference here?\n          const Return& r = f();\n          ignore_unused_variable_warning(r);\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f();\n      }\n\n      Func f;\n  };\n\n  BOOST_concept(UnaryFunction,(Func)(Return)(Arg))\n  {\n      BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void<Return>()); }\n\n   private:\n      void test(boost::mpl::false_)\n      {\n          f(arg);               // \"priming the pump\" this way keeps msvc6 happy (ICE)\n          Return r = f(arg);\n          ignore_unused_variable_warning(r);\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f(arg);\n      }\n\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy construktor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::UnaryFunction<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      UnaryFunction();\n#endif\n\n      Func f;\n      Arg arg;\n  };\n\n  BOOST_concept(BinaryFunction,(Func)(Return)(First)(Second))\n  {\n      BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void<Return>()); }\n   private:\n      void test(boost::mpl::false_)\n      {\n          f(first,second);\n          Return r = f(first, second); // require operator()\n          (void)r;\n      }\n\n      void test(boost::mpl::true_)\n      {\n          f(first,second);\n      }\n\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::BinaryFunction<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      BinaryFunction();\n#endif\n\n      Func f;\n      First first;\n      Second second;\n  };\n\n  BOOST_concept(UnaryPredicate,(Func)(Arg))\n  {\n    BOOST_CONCEPT_USAGE(UnaryPredicate) {\n      require_boolean_expr(f(arg)); // require operator() returning bool\n    }\n   private:\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::UnaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      UnaryPredicate();\n#endif\n\n    Func f;\n    Arg arg;\n  };\n\n  BOOST_concept(BinaryPredicate,(Func)(First)(Second))\n  {\n    BOOST_CONCEPT_USAGE(BinaryPredicate) {\n      require_boolean_expr(f(a, b)); // require operator() returning bool\n    }\n   private:\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::BinaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      BinaryPredicate();\n#endif\n    Func f;\n    First a;\n    Second b;\n  };\n\n  // use this when functor is used inside a container class like std::set\n  BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second))\n    : BinaryPredicate<Func, First, Second>\n  {\n    BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {\n      const_constraints(f);\n    }\n   private:\n    void const_constraints(const Func& fun) {\n      // operator() must be a const member function\n      require_boolean_expr(fun(a, b));\n    }\n#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \\\n                      && BOOST_WORKAROUND(__GNUC__, > 3)))\n      // Declare a dummy constructor to make gcc happy.\n      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.\n      // (warning: non-static reference \"const double& boost::Const_BinaryPredicate<YourClassHere>::arg\"\n      // in class without a constructor [-Wuninitialized])\n      Const_BinaryPredicate();\n#endif\n\n    Func f;\n    First a;\n    Second b;\n  };\n\n  BOOST_concept(AdaptableGenerator,(Func)(Return))\n    : Generator<Func, typename Func::result_type>\n  {\n      typedef typename Func::result_type result_type;\n\n      BOOST_CONCEPT_USAGE(AdaptableGenerator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n      }\n  };\n\n  BOOST_concept(AdaptableUnaryFunction,(Func)(Return)(Arg))\n    : UnaryFunction<Func, typename Func::result_type, typename Func::argument_type>\n  {\n      typedef typename Func::argument_type argument_type;\n      typedef typename Func::result_type result_type;\n\n      ~AdaptableUnaryFunction()\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n          BOOST_CONCEPT_ASSERT((Convertible<Arg, argument_type>));\n      }\n  };\n\n  BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second))\n    : BinaryFunction<\n          Func\n        , typename Func::result_type\n        , typename Func::first_argument_type\n        , typename Func::second_argument_type\n      >\n  {\n      typedef typename Func::first_argument_type first_argument_type;\n      typedef typename Func::second_argument_type second_argument_type;\n      typedef typename Func::result_type result_type;\n\n      ~AdaptableBinaryFunction()\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));\n          BOOST_CONCEPT_ASSERT((Convertible<First, first_argument_type>));\n          BOOST_CONCEPT_ASSERT((Convertible<Second, second_argument_type>));\n      }\n  };\n\n  BOOST_concept(AdaptablePredicate,(Func)(Arg))\n    : UnaryPredicate<Func, Arg>\n    , AdaptableUnaryFunction<Func, bool, Arg>\n  {\n  };\n\n  BOOST_concept(AdaptableBinaryPredicate,(Func)(First)(Second))\n    : BinaryPredicate<Func, First, Second>\n    , AdaptableBinaryFunction<Func, bool, First, Second>\n  {\n  };\n\n  //===========================================================================\n  // Iterator Concepts\n\n  BOOST_concept(InputIterator,(TT))\n    : Assignable<TT>\n    , EqualityComparable<TT>\n  {\n      typedef typename boost::detail::iterator_traits<TT>::value_type value_type;\n      typedef typename boost::detail::iterator_traits<TT>::difference_type difference_type;\n      typedef typename boost::detail::iterator_traits<TT>::reference reference;\n      typedef typename boost::detail::iterator_traits<TT>::pointer pointer;\n      typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category;\n\n      BOOST_CONCEPT_USAGE(InputIterator)\n      {\n        BOOST_CONCEPT_ASSERT((SignedInteger<difference_type>));\n        BOOST_CONCEPT_ASSERT((Convertible<iterator_category, std::input_iterator_tag>));\n\n        TT j(i);\n        (void)*i;           // require dereference operator\n        ++j;                // require preincrement operator\n        i++;                // require postincrement operator\n      }\n   private:\n    TT i;\n  };\n\n  BOOST_concept(OutputIterator,(TT)(ValueT))\n    : Assignable<TT>\n  {\n    BOOST_CONCEPT_USAGE(OutputIterator) {\n\n      ++i;                // require preincrement operator\n      i++;                // require postincrement operator\n      *i++ = t;           // require postincrement and assignment\n    }\n   private:\n    TT i, j;\n    ValueT t;\n  };\n\n  BOOST_concept(ForwardIterator,(TT))\n    : InputIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(ForwardIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category\n            , std::forward_iterator_tag\n          >));\n\n          typename InputIterator<TT>::reference r = *i;\n          ignore_unused_variable_warning(r);\n      }\n\n   private:\n      TT i;\n  };\n\n  BOOST_concept(Mutable_ForwardIterator,(TT))\n    : ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) {\n        *i++ = *i;         // require postincrement and assignment\n      }\n   private:\n      TT i;\n  };\n\n  BOOST_concept(BidirectionalIterator,(TT))\n    : ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(BidirectionalIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category\n            , std::bidirectional_iterator_tag\n          >));\n\n          --i;                // require predecrement operator\n          i--;                // require postdecrement operator\n      }\n   private:\n      TT i;\n  };\n\n  BOOST_concept(Mutable_BidirectionalIterator,(TT))\n    : BidirectionalIterator<TT>\n    , Mutable_ForwardIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator)\n      {\n          *i-- = *i;                  // require postdecrement and assignment\n      }\n   private:\n      TT i;\n  };\n\n  BOOST_concept(RandomAccessIterator,(TT))\n    : BidirectionalIterator<TT>\n    , Comparable<TT>\n  {\n      BOOST_CONCEPT_USAGE(RandomAccessIterator)\n      {\n          BOOST_CONCEPT_ASSERT((Convertible<\n              BOOST_DEDUCED_TYPENAME BidirectionalIterator<TT>::iterator_category\n            , std::random_access_iterator_tag\n          >));\n\n          i += n;             // require assignment addition operator\n          i = i + n; i = n + i; // require addition with difference type\n          i -= n;             // require assignment subtraction operator\n          i = i - n;                  // require subtraction with difference type\n          n = i - j;                  // require difference operator\n          (void)i[n];                 // require element access operator\n      }\n\n   private:\n    TT a, b;\n    TT i, j;\n      typename boost::detail::iterator_traits<TT>::difference_type n;\n  };\n\n  BOOST_concept(Mutable_RandomAccessIterator,(TT))\n    : RandomAccessIterator<TT>\n    , Mutable_BidirectionalIterator<TT>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_RandomAccessIterator)\n      {\n          i[n] = *i;                  // require element access and assignment\n      }\n   private:\n    TT i;\n    typename boost::detail::iterator_traits<TT>::difference_type n;\n  };\n\n  //===========================================================================\n  // Container s\n\n  BOOST_concept(Container,(C))\n    : Assignable<C>\n  {\n    typedef typename C::value_type value_type;\n    typedef typename C::difference_type difference_type;\n    typedef typename C::size_type size_type;\n    typedef typename C::const_reference const_reference;\n    typedef typename C::const_pointer const_pointer;\n    typedef typename C::const_iterator const_iterator;\n\n      BOOST_CONCEPT_USAGE(Container)\n      {\n          BOOST_CONCEPT_ASSERT((InputIterator<const_iterator>));\n          const_constraints(c);\n      }\n\n   private:\n      void const_constraints(const C& cc) {\n          i = cc.begin();\n          i = cc.end();\n          n = cc.size();\n          n = cc.max_size();\n          b = cc.empty();\n      }\n      C c;\n      bool b;\n      const_iterator i;\n      size_type n;\n  };\n\n  BOOST_concept(Mutable_Container,(C))\n    : Container<C>\n  {\n      typedef typename C::reference reference;\n      typedef typename C::iterator iterator;\n      typedef typename C::pointer pointer;\n\n      BOOST_CONCEPT_USAGE(Mutable_Container)\n      {\n          BOOST_CONCEPT_ASSERT((\n               Assignable<typename Mutable_Container::value_type>));\n\n          BOOST_CONCEPT_ASSERT((InputIterator<iterator>));\n\n          i = c.begin();\n          i = c.end();\n          c.swap(c2);\n      }\n\n   private:\n      iterator i;\n      C c, c2;\n  };\n\n  BOOST_concept(ForwardContainer,(C))\n    : Container<C>\n  {\n      BOOST_CONCEPT_USAGE(ForwardContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n               ForwardIterator<\n                    typename ForwardContainer::const_iterator\n               >));\n      }\n  };\n\n  BOOST_concept(Mutable_ForwardContainer,(C))\n    : ForwardContainer<C>\n    , Mutable_Container<C>\n  {\n      BOOST_CONCEPT_USAGE(Mutable_ForwardContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n               Mutable_ForwardIterator<\n                   typename Mutable_ForwardContainer::iterator\n               >));\n      }\n  };\n\n  BOOST_concept(ReversibleContainer,(C))\n    : ForwardContainer<C>\n  {\n      typedef typename\n        C::const_reverse_iterator\n      const_reverse_iterator;\n\n      BOOST_CONCEPT_USAGE(ReversibleContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n              BidirectionalIterator<\n                  typename ReversibleContainer::const_iterator>));\n\n          BOOST_CONCEPT_ASSERT((BidirectionalIterator<const_reverse_iterator>));\n\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const C& cc)\n      {\n          const_reverse_iterator i = cc.rbegin();\n          i = cc.rend();\n      }\n      C c;\n  };\n\n  BOOST_concept(Mutable_ReversibleContainer,(C))\n    : Mutable_ForwardContainer<C>\n    , ReversibleContainer<C>\n  {\n      typedef typename C::reverse_iterator reverse_iterator;\n\n      BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer)\n      {\n          typedef typename Mutable_ForwardContainer<C>::iterator iterator;\n          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<iterator>));\n          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<reverse_iterator>));\n\n          reverse_iterator i = c.rbegin();\n          i = c.rend();\n      }\n   private:\n      C c;\n  };\n\n  BOOST_concept(RandomAccessContainer,(C))\n    : ReversibleContainer<C>\n  {\n      typedef typename C::size_type size_type;\n      typedef typename C::const_reference const_reference;\n\n      BOOST_CONCEPT_USAGE(RandomAccessContainer)\n      {\n          BOOST_CONCEPT_ASSERT((\n              RandomAccessIterator<\n                  typename RandomAccessContainer::const_iterator\n              >));\n\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const C& cc)\n      {\n          const_reference r = cc[n];\n          ignore_unused_variable_warning(r);\n      }\n\n      C c;\n      size_type n;\n  };\n\n  BOOST_concept(Mutable_RandomAccessContainer,(C))\n    : Mutable_ReversibleContainer<C>\n    , RandomAccessContainer<C>\n  {\n   private:\n      typedef Mutable_RandomAccessContainer self;\n   public:\n      BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer)\n      {\n          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::iterator>));\n          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::reverse_iterator>));\n\n          typename self::reference r = c[i];\n          ignore_unused_variable_warning(r);\n      }\n\n   private:\n      typename Mutable_ReversibleContainer<C>::size_type i;\n      C c;\n  };\n\n  // A Sequence is inherently mutable\n  BOOST_concept(Sequence,(S))\n    : Mutable_ForwardContainer<S>\n      // Matt Austern's book puts DefaultConstructible here, the C++\n      // standard places it in Container --JGS\n      // ... so why aren't we following the standard?  --DWA\n    , DefaultConstructible<S>\n  {\n      BOOST_CONCEPT_USAGE(Sequence)\n      {\n          S\n              c(n),\n              c2(n, t),\n              c3(first, last);\n\n          c.insert(p, t);\n          c.insert(p, n, t);\n          c.insert(p, first, last);\n\n          c.erase(p);\n          c.erase(p, q);\n\n          typename Sequence::reference r = c.front();\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(c2);\n          ignore_unused_variable_warning(c3);\n          ignore_unused_variable_warning(r);\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const S& c) {\n          typename Sequence::const_reference r = c.front();\n          ignore_unused_variable_warning(r);\n      }\n\n      typename S::value_type t;\n      typename S::size_type n;\n      typename S::value_type* first, *last;\n      typename S::iterator p, q;\n  };\n\n  BOOST_concept(FrontInsertionSequence,(S))\n    : Sequence<S>\n  {\n      BOOST_CONCEPT_USAGE(FrontInsertionSequence)\n      {\n          c.push_front(t);\n          c.pop_front();\n      }\n   private:\n      S c;\n      typename S::value_type t;\n  };\n\n  BOOST_concept(BackInsertionSequence,(S))\n    : Sequence<S>\n  {\n      BOOST_CONCEPT_USAGE(BackInsertionSequence)\n      {\n          c.push_back(t);\n          c.pop_back();\n          typename BackInsertionSequence::reference r = c.back();\n          ignore_unused_variable_warning(r);\n          const_constraints(c);\n      }\n   private:\n      void const_constraints(const S& cc) {\n          typename BackInsertionSequence::const_reference\n              r = cc.back();\n          ignore_unused_variable_warning(r);\n      };\n      S c;\n      typename S::value_type t;\n  };\n\n  BOOST_concept(AssociativeContainer,(C))\n    : ForwardContainer<C>\n    , DefaultConstructible<C>\n  {\n      typedef typename C::key_type key_type;\n      typedef typename C::key_compare key_compare;\n      typedef typename C::value_compare value_compare;\n      typedef typename C::iterator iterator;\n\n      BOOST_CONCEPT_USAGE(AssociativeContainer)\n      {\n          i = c.find(k);\n          r = c.equal_range(k);\n          c.erase(k);\n          c.erase(i);\n          c.erase(r.first, r.second);\n          const_constraints(c);\n          BOOST_CONCEPT_ASSERT((BinaryPredicate<key_compare,key_type,key_type>));\n\n          typedef typename AssociativeContainer::value_type value_type_;\n          BOOST_CONCEPT_ASSERT((BinaryPredicate<value_compare,value_type_,value_type_>));\n      }\n\n      // Redundant with the base concept, but it helps below.\n      typedef typename C::const_iterator const_iterator;\n   private:\n      void const_constraints(const C& cc)\n      {\n          ci = cc.find(k);\n          n = cc.count(k);\n          cr = cc.equal_range(k);\n      }\n\n      C c;\n      iterator i;\n      std::pair<iterator,iterator> r;\n      const_iterator ci;\n      std::pair<const_iterator,const_iterator> cr;\n      typename C::key_type k;\n      typename C::size_type n;\n  };\n\n  BOOST_concept(UniqueAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(UniqueAssociativeContainer)\n      {\n          C c(first, last);\n\n          pos_flag = c.insert(t);\n          c.insert(first, last);\n\n          ignore_unused_variable_warning(c);\n      }\n   private:\n      std::pair<typename C::iterator, bool> pos_flag;\n      typename C::value_type t;\n      typename C::value_type* first, *last;\n  };\n\n  BOOST_concept(MultipleAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(MultipleAssociativeContainer)\n      {\n          C c(first, last);\n\n          pos = c.insert(t);\n          c.insert(first, last);\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(pos);\n      }\n   private:\n      typename C::iterator pos;\n      typename C::value_type t;\n      typename C::value_type* first, *last;\n  };\n\n  BOOST_concept(SimpleAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(SimpleAssociativeContainer)\n      {\n          typedef typename C::key_type key_type;\n          typedef typename C::value_type value_type;\n          BOOST_MPL_ASSERT((boost::is_same<key_type,value_type>));\n      }\n  };\n\n  BOOST_concept(PairAssociativeContainer,(C))\n    : AssociativeContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(PairAssociativeContainer)\n      {\n          typedef typename C::key_type key_type;\n          typedef typename C::value_type value_type;\n          typedef typename C::mapped_type mapped_type;\n          typedef std::pair<const key_type, mapped_type> required_value_type;\n          BOOST_MPL_ASSERT((boost::is_same<value_type,required_value_type>));\n      }\n  };\n\n  BOOST_concept(SortedAssociativeContainer,(C))\n    : AssociativeContainer<C>\n    , ReversibleContainer<C>\n  {\n      BOOST_CONCEPT_USAGE(SortedAssociativeContainer)\n      {\n          C\n              c(kc),\n              c2(first, last),\n              c3(first, last, kc);\n\n          p = c.upper_bound(k);\n          p = c.lower_bound(k);\n          r = c.equal_range(k);\n\n          c.insert(p, t);\n\n          ignore_unused_variable_warning(c);\n          ignore_unused_variable_warning(c2);\n          ignore_unused_variable_warning(c3);\n          const_constraints(c);\n      }\n\n      void const_constraints(const C& c)\n      {\n          kc = c.key_comp();\n          vc = c.value_comp();\n\n          cp = c.upper_bound(k);\n          cp = c.lower_bound(k);\n          cr = c.equal_range(k);\n      }\n\n   private:\n      typename C::key_compare kc;\n      typename C::value_compare vc;\n      typename C::value_type t;\n      typename C::key_type k;\n      typedef typename C::iterator iterator;\n      typedef typename C::const_iterator const_iterator;\n\n      typedef SortedAssociativeContainer self;\n      iterator p;\n      const_iterator cp;\n      std::pair<typename self::iterator,typename self::iterator> r;\n      std::pair<typename self::const_iterator,typename self::const_iterator> cr;\n      typename C::value_type* first, *last;\n  };\n\n  // HashedAssociativeContainer\n\n  BOOST_concept(Collection,(C))\n  {\n      BOOST_CONCEPT_USAGE(Collection)\n      {\n        boost::function_requires<boost::InputIteratorConcept<iterator> >();\n        boost::function_requires<boost::InputIteratorConcept<const_iterator> >();\n        boost::function_requires<boost::CopyConstructibleConcept<value_type> >();\n        const_constraints(c);\n        i = c.begin();\n        i = c.end();\n        c.swap(c);\n      }\n\n      void const_constraints(const C& cc) {\n        ci = cc.begin();\n        ci = cc.end();\n        n = cc.size();\n        b = cc.empty();\n      }\n\n    private:\n      typedef typename C::value_type value_type;\n      typedef typename C::iterator iterator;\n      typedef typename C::const_iterator const_iterator;\n      typedef typename C::reference reference;\n      typedef typename C::const_reference const_reference;\n      // typedef typename C::pointer pointer;\n      typedef typename C::difference_type difference_type;\n      typedef typename C::size_type size_type;\n\n      C c;\n      bool b;\n      iterator i;\n      const_iterator ci;\n      size_type n;\n  };\n} // namespace boost\n\n# include <boost/concept/detail/concept_undef.hpp>\n\n#endif // BOOST_CONCEPT_CHECKS_HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/compiler/clang.hpp",
    "content": "// (C) Copyright Douglas Gregor 2010\n//\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n// Clang compiler setup.\n\n#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)\n#  define BOOST_NO_EXCEPTIONS\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)\n#  define BOOST_NO_TYPEID\n#endif\n\n#if defined(__int64)\n#  define BOOST_HAS_MS_INT64\n#endif\n\n#define BOOST_HAS_NRVO\n\n// Clang supports \"long long\" in all compilation modes.\n#define BOOST_HAS_LONG_LONG\n\n#if !__has_feature(cxx_auto_type)\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#endif\n\n#if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#endif\n\n#if !__has_feature(cxx_constexpr)\n#  define BOOST_NO_CXX11_CONSTEXPR\n#endif\n\n#if !__has_feature(cxx_decltype)\n#  define BOOST_NO_CXX11_DECLTYPE\n#endif\n\n#if !__has_feature(cxx_decltype_incomplete_return_types)\n#  define BOOST_NO_CXX11_DECLTYPE_N3276\n#endif\n\n#if !__has_feature(cxx_defaulted_functions)\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_deleted_functions)\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#endif\n\n#if !__has_feature(cxx_explicit_conversions)\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#endif\n\n#if !__has_feature(cxx_default_function_template_args)\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#endif\n\n#if !__has_feature(cxx_lambdas)\n#  define BOOST_NO_CXX11_LAMBDAS\n#endif\n\n#if !__has_feature(cxx_local_type_template_args)\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n\n#if !__has_feature(cxx_noexcept)\n#  define BOOST_NO_CXX11_NOEXCEPT\n#endif\n\n#if !__has_feature(cxx_nullptr)\n#  define BOOST_NO_CXX11_NULLPTR\n#endif\n\n#if !__has_feature(cxx_range_for)\n#  define BOOST_NO_CXX11_RANGE_BASED_FOR\n#endif\n\n#if !__has_feature(cxx_raw_string_literals)\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#endif\n\n#if !__has_feature(cxx_generalized_initializers)\n#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n#if !__has_feature(cxx_rvalue_references)\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#endif\n\n#if !__has_feature(cxx_strong_enums)\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n#if !__has_feature(cxx_static_assert)\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n#endif\n\n#if !__has_feature(cxx_alias_templates)\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#endif\n\n#if !__has_feature(cxx_unicode_literals)\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n#if !__has_feature(cxx_variadic_templates)\n#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#endif\n\n// Clang always supports variadic macros\n// Clang always supports extern templates\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"Clang version \" __clang_version__\n#endif\n\n// Macro used to identify the Clang compiler.\n#define BOOST_CLANG 1\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/compiler/gcc.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Darin Adler 2001 - 2002. \n//  (C) Copyright Jens Maurer 2001 - 2002. \n//  (C) Copyright Beman Dawes 2001 - 2003. \n//  (C) Copyright Douglas Gregor 2002. \n//  (C) Copyright David Abrahams 2002 - 2003. \n//  (C) Copyright Synge Todo 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  GNU C++ compiler setup:\n\n#if __GNUC__ < 3\n#   if __GNUC_MINOR__ == 91\n       // egcs 1.1 won't parse shared_ptr.hpp without this:\n#      define BOOST_NO_AUTO_PTR\n#   endif\n#   if __GNUC_MINOR__ < 95\n      //\n      // Prior to gcc 2.95 member templates only partly\n      // work - define BOOST_MSVC6_MEMBER_TEMPLATES\n      // instead since inline member templates mostly work.\n      //\n#     define BOOST_NO_MEMBER_TEMPLATES\n#     if __GNUC_MINOR__ >= 9\n#       define BOOST_MSVC6_MEMBER_TEMPLATES\n#     endif\n#   endif\n\n#   if __GNUC_MINOR__ < 96\n#     define BOOST_NO_SFINAE\n#   endif\n\n#   if __GNUC_MINOR__ <= 97\n#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n#     define BOOST_NO_OPERATORS_IN_NAMESPACE\n#   endif\n\n#   define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE\n#   define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#   define BOOST_NO_IS_ABSTRACT\n#   define BOOST_NO_CXX11_EXTERN_TEMPLATE\n// Variadic macros do not exist for gcc versions before 3.0\n#   define BOOST_NO_CXX11_VARIADIC_MACROS\n#elif __GNUC__ == 3\n#  if defined (__PATHSCALE__)\n#     define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n   //\n   // gcc-3.x problems:\n   //\n   // Bug specific to gcc 3.1 and 3.2:\n   //\n#  if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2))\n#     define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS\n#  endif\n#  if __GNUC_MINOR__ < 4\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n#  define BOOST_NO_CXX11_EXTERN_TEMPLATE\n#endif\n#if __GNUC__ < 4\n//\n// All problems to gcc-3.x and earlier here:\n//\n#define BOOST_NO_TWO_PHASE_NAME_LOOKUP\n#  ifdef __OPEN64__\n#     define BOOST_NO_IS_ABSTRACT\n#  endif\n#endif\n\n#if __GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 4 )\n// Previous versions of GCC did not completely implement value-initialization:\n// GCC Bug 30111, \"Value-initialization of POD base class doesn't initialize\n// members\", reported by Jonathan Wakely in 2006,\n// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4)\n// GCC Bug 33916, \"Default constructor fails to initialize array members\",\n// reported by Michael Elizabeth Chastain in 2007,\n// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4)\n// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues\n#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n#endif\n\n#if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)\n# define BOOST_NO_EXCEPTIONS\n#endif\n\n\n//\n// Threading support: Turn this on unconditionally here (except for\n// those platforms where we can know for sure). It will get turned off again\n// later if no threading API is detected.\n//\n#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)\n# define BOOST_HAS_THREADS\n#endif \n\n//\n// gcc has \"long long\"\n//\n#define BOOST_HAS_LONG_LONG\n\n//\n// gcc implements the named return value optimization since version 3.1\n//\n#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 )\n#define BOOST_HAS_NRVO\n#endif\n\n//\n// Dynamic shared object (DSO) and dynamic-link library (DLL) support\n//\n#if __GNUC__ >= 4\n#  if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__)\n     // All Win32 development environments, including 64-bit Windows and MinGW, define \n     // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment,\n     // so does not define _WIN32 or its variants.\n#    define BOOST_HAS_DECLSPEC\n#    define BOOST_SYMBOL_EXPORT __attribute__((dllexport))\n#    define BOOST_SYMBOL_IMPORT __attribute__((dllimport))\n#  else\n#    define BOOST_SYMBOL_EXPORT __attribute__((visibility(\"default\")))\n#    define BOOST_SYMBOL_IMPORT\n#  endif\n#  define BOOST_SYMBOL_VISIBLE __attribute__((visibility(\"default\")))\n#else\n// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined  \n#  define BOOST_SYMBOL_EXPORT\n#endif\n\n//\n// RTTI and typeinfo detection is possible post gcc-4.3:\n//\n#if __GNUC__ * 100 + __GNUC_MINOR__ >= 403\n#  ifndef __GXX_RTTI\n#     ifndef BOOST_NO_TYPEID\n#        define BOOST_NO_TYPEID\n#     endif\n#     ifndef BOOST_NO_RTTI\n#        define BOOST_NO_RTTI\n#     endif\n#  endif\n#endif\n\n\n// C++0x features in 4.3.n and later\n//\n#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__)\n// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are\n// passed on the command line, which in turn defines\n// __GXX_EXPERIMENTAL_CXX0X__.\n#  define BOOST_HAS_DECLTYPE\n#  define BOOST_HAS_RVALUE_REFS\n#  define BOOST_HAS_STATIC_ASSERT\n#  define BOOST_HAS_VARIADIC_TMPL\n#else\n#  define BOOST_NO_CXX11_DECLTYPE\n#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#  define BOOST_NO_CXX11_RVALUE_REFERENCES\n#  define BOOST_NO_CXX11_STATIC_ASSERT\n\n// Variadic templates compiler: \n//   http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html\n#  if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__))\n#    define BOOST_HAS_VARIADIC_TMPL\n#  else\n#    define BOOST_NO_CXX11_VARIADIC_TEMPLATES\n#  endif\n#endif\n\n// C++0x features in 4.4.n and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_AUTO_DECLARATIONS\n#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS\n#  define BOOST_NO_CXX11_CHAR16_T\n#  define BOOST_NO_CXX11_CHAR32_T\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS\n#  define BOOST_NO_CXX11_DELETED_FUNCTIONS\n#endif\n\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)\n#  define BOOST_NO_SFINAE_EXPR\n#endif\n\n// C++0x features in 4.5.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS\n#  define BOOST_NO_CXX11_LAMBDAS\n#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#  define BOOST_NO_CXX11_RAW_LITERALS\n#  define BOOST_NO_CXX11_UNICODE_LITERALS\n#endif\n\n// C++0x features in 4.5.1 and later\n//\n#if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40501) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1\n// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064\n#  define BOOST_NO_CXX11_SCOPED_ENUMS\n#endif\n\n// C++0x features in 4.6.n and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#define BOOST_NO_CXX11_CONSTEXPR\n#define BOOST_NO_CXX11_NOEXCEPT\n#define BOOST_NO_CXX11_NULLPTR\n#define BOOST_NO_CXX11_RANGE_BASED_FOR\n#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_TEMPLATE_ALIASES\n#endif\n// C++0x features not supported at all yet\n//\n#define BOOST_NO_CXX11_DECLTYPE_N3276\n\n#ifndef BOOST_COMPILER\n#  define BOOST_COMPILER \"GNU C++ version \" __VERSION__\n#endif\n\n// ConceptGCC compiler:\n//   http://www.generic-programming.org/software/ConceptGCC/\n#ifdef __GXX_CONCEPTS__\n#  define BOOST_HAS_CONCEPTS\n#  define BOOST_COMPILER \"ConceptGCC version \" __VERSION__\n#endif\n\n// versions check:\n// we don't know gcc prior to version 2.90:\n#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90)\n#  error \"Compiler not configured - please reconfigure\"\n#endif\n//\n// last known and checked version is 4.6 (Pre-release):\n#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6))\n#  if defined(BOOST_ASSERT_CONFIG)\n#     error \"Unknown compiler version - please run the configure tests and report the results\"\n#  else\n// we don't emit warnings here anymore since there are no defect macros defined for\n// gcc post 3.4, so any failures are gcc regressions...\n//#     warning \"Unknown compiler version - please run the configure tests and report the results\"\n#  endif\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/no_tr1/cmath.hpp",
    "content": "//  (C) Copyright John Maddock 2008.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <cmath> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/cmath is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_CMATH\n#  define BOOST_CONFIG_CMATH\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_CMATH_RECURSION\n#  endif\n\n#  include <cmath>\n\n#  ifdef BOOST_CONFIG_NO_CMATH_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_CMATH_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/no_tr1/complex.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <complex> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/complex is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_COMPLEX\n#  define BOOST_CONFIG_COMPLEX\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_COMPLEX_RECURSION\n#  endif\n\n#  include <complex>\n\n#  ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_COMPLEX_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/no_tr1/memory.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <memory> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/memory is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_MEMORY\n#  define BOOST_CONFIG_MEMORY\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_MEMORY_RECURSION\n#  endif\n\n#  include <memory>\n\n#  ifdef BOOST_CONFIG_NO_MEMORY_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_MEMORY_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/no_tr1/utility.hpp",
    "content": "//  (C) Copyright John Maddock 2005.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// The aim of this header is just to include <utility> but to do\n// so in a way that does not result in recursive inclusion of\n// the Boost TR1 components if boost/tr1/tr1/utility is in the\n// include search path.  We have to do this to avoid circular\n// dependencies:\n//\n\n#ifndef BOOST_CONFIG_UTILITY\n#  define BOOST_CONFIG_UTILITY\n\n#  ifndef BOOST_TR1_NO_RECURSION\n#     define BOOST_TR1_NO_RECURSION\n#     define BOOST_CONFIG_NO_UTILITY_RECURSION\n#  endif\n\n#  include <utility>\n\n#  ifdef BOOST_CONFIG_NO_UTILITY_RECURSION\n#     undef BOOST_TR1_NO_RECURSION\n#     undef BOOST_CONFIG_NO_UTILITY_RECURSION\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/platform/linux.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  linux specific config options:\n\n#define BOOST_PLATFORM \"linux\"\n\n// make sure we have __GLIBC_PREREQ if available at all\n#ifdef __cplusplus\n#include <cstdlib>\n#else\n#include <stdlib.h>\n#endif\n\n//\n// <stdint.h> added to glibc 2.1.1\n// We can only test for 2.1 though:\n//\n#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))\n   // <stdint.h> defines int64_t unconditionally, but <sys/types.h> defines\n   // int64_t only if __GNUC__.  Thus, assume a fully usable <stdint.h>\n   // only when using GCC.\n#  if defined __GNUC__\n#    define BOOST_HAS_STDINT_H\n#  endif\n#endif\n\n#if defined(__LIBCOMO__)\n   //\n   // como on linux doesn't have std:: c functions:\n   // NOTE: versions of libcomo prior to beta28 have octal version numbering,\n   // e.g. version 25 is 21 (dec)\n   //\n#  if __LIBCOMO_VERSION__ <= 20\n#    define BOOST_NO_STDC_NAMESPACE\n#  endif\n\n#  if __LIBCOMO_VERSION__ <= 21\n#    define BOOST_NO_SWPRINTF\n#  endif\n\n#endif\n\n//\n// If glibc is past version 2 then we definitely have\n// gettimeofday, earlier versions may or may not have it:\n//\n#if defined(__GLIBC__) && (__GLIBC__ >= 2)\n#  define BOOST_HAS_GETTIMEOFDAY\n#endif\n\n#ifdef __USE_POSIX199309\n#  define BOOST_HAS_NANOSLEEP\n#endif\n\n#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)\n// __GLIBC_PREREQ is available since 2.1.2\n\n   // swprintf is available since glibc 2.2.0\n#  if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98))\n#    define BOOST_NO_SWPRINTF\n#  endif\n#else\n#  define BOOST_NO_SWPRINTF\n#endif\n\n// boilerplate code:\n#define BOOST_HAS_UNISTD_H\n#include <boost/config/posix_features.hpp>\n#define BOOST_HAS_PTHREAD_YIELD\n\n#ifndef __GNUC__\n//\n// if the compiler is not gcc we still need to be able to parse\n// the GNU system headers, some of which (mainly <stdint.h>)\n// use GNU specific extensions:\n//\n#  ifndef __extension__\n#     define __extension__\n#  endif\n#  ifndef __const__\n#     define __const__ const\n#  endif\n#  ifndef __volatile__\n#     define __volatile__ volatile\n#  endif\n#  ifndef __signed__\n#     define __signed__ signed\n#  endif\n#  ifndef __typeof__\n#     define __typeof__ typeof\n#  endif\n#  ifndef __inline__\n#     define __inline__ inline\n#  endif\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/posix_features.hpp",
    "content": "//  (C) Copyright John Maddock 2001 - 2003. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n// All POSIX feature tests go in this file,\n// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well\n// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's\n// may be present but none-functional unless _POSIX_C_SOURCE and\n// _XOPEN_SOURCE have been defined to the right value (it's up\n// to the user to do this *before* including any header, although\n// in most cases the compiler will do this for you).\n\n#  if defined(BOOST_HAS_UNISTD_H)\n#     include <unistd.h>\n\n      // XOpen has <nl_types.h>, but is this the correct version check?\n#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3)\n#        define BOOST_HAS_NL_TYPES_H\n#     endif\n\n      // POSIX version 6 requires <stdint.h>\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100)\n#        define BOOST_HAS_STDINT_H\n#     endif\n\n      // POSIX version 2 requires <dirent.h>\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L)\n#        define BOOST_HAS_DIRENT_H\n#     endif\n\n      // POSIX version 3 requires <signal.h> to have sigaction:\n#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L)\n#        define BOOST_HAS_SIGACTION\n#     endif\n      // POSIX defines _POSIX_THREADS > 0 for pthread support,\n      // however some platforms define _POSIX_THREADS without\n      // a value, hence the (_POSIX_THREADS+0 >= 0) check.\n      // Strictly speaking this may catch platforms with a\n      // non-functioning stub <pthreads.h>, but such occurrences should\n      // occur very rarely if at all.\n#     if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS)\n#        define BOOST_HAS_PTHREADS\n#     endif\n\n      // BOOST_HAS_NANOSLEEP:\n      // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME:\n#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \\\n             || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))\n#        define BOOST_HAS_NANOSLEEP\n#     endif\n\n      // BOOST_HAS_CLOCK_GETTIME:\n      // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME\n      // but at least one platform - linux - defines that flag without\n      // defining clock_gettime):\n#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0))\n#        define BOOST_HAS_CLOCK_GETTIME\n#     endif\n\n      // BOOST_HAS_SCHED_YIELD:\n      // This is predicated on _POSIX_PRIORITY_SCHEDULING or\n      // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME.\n#     if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\\\n            || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\\\n            || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))\n#        define BOOST_HAS_SCHED_YIELD\n#     endif\n\n      // BOOST_HAS_GETTIMEOFDAY:\n      // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE:\n      // These are predicated on _XOPEN_VERSION, and appears to be first released\n      // in issue 4, version 2 (_XOPEN_VERSION > 500).\n      // Likewise for the functions log1p and expm1.\n#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500)\n#        define BOOST_HAS_GETTIMEOFDAY\n#        if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500)\n#           define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#        endif\n#        ifndef BOOST_HAS_LOG1P\n#           define BOOST_HAS_LOG1P\n#        endif\n#        ifndef BOOST_HAS_EXPM1\n#           define BOOST_HAS_EXPM1\n#        endif\n#     endif\n\n#  endif\n\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/select_compiler_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Martin Wille 2003.\n//  (C) Copyright Guillaume Melquiond 2003.\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//   http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for most recent version.\n\n// locate which compiler we are using and define\n// BOOST_COMPILER_CONFIG as needed: \n\n#if defined(__GCCXML__)\n// GCC-XML emulates other compilers, it has to appear first here!\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/gcc_xml.hpp\"\n\n#elif defined(_CRAYC)\n// EDG based Cray compiler:\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/cray.hpp\"\n\n#elif defined __CUDACC__\n//  NVIDIA CUDA C++ compiler for GPU\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/nvcc.hpp\"\n\n#elif defined __COMO__\n//  Comeau C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/comeau.hpp\"\n\n#elif defined(__PATHSCALE__) && (__PATHCC__ >= 4)\n// PathScale EKOPath compiler (has to come before clang and gcc)\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/pathscale.hpp\"\n\n#elif defined __clang__\n//  Clang C++ emulates GCC, so it has to appear early.\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/clang.hpp\"\n\n#elif defined __DMC__\n//  Digital Mars C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/digitalmars.hpp\"\n\n#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)\n//  Intel\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/intel.hpp\"\n\n# elif defined __GNUC__\n//  GNU C++:\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/gcc.hpp\"\n\n#elif defined __KCC\n//  Kai C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/kai.hpp\"\n\n#elif defined __sgi\n//  SGI MIPSpro C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/sgi_mipspro.hpp\"\n\n#elif defined __DECCXX\n//  Compaq Tru64 Unix cxx\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/compaq_cxx.hpp\"\n\n#elif defined __ghs\n//  Greenhills C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/greenhills.hpp\"\n\n#elif defined __CODEGEARC__\n//  CodeGear - must be checked for before Borland\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/codegear.hpp\"\n\n#elif defined __BORLANDC__\n//  Borland\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/borland.hpp\"\n\n#elif defined  __MWERKS__\n//  Metrowerks CodeWarrior\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/metrowerks.hpp\"\n\n#elif defined  __SUNPRO_CC\n//  Sun Workshop Compiler C++\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/sunpro_cc.hpp\"\n\n#elif defined __HP_aCC\n//  HP aCC\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/hp_acc.hpp\"\n\n#elif defined(__MRC__) || defined(__SC__)\n//  MPW MrCpp or SCpp\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/mpw.hpp\"\n\n#elif defined(__IBMCPP__)\n//  IBM Visual Age\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/vacpp.hpp\"\n\n#elif defined(__PGI)\n//  Portland Group Inc.\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/pgi.hpp\"\n\n#elif defined _MSC_VER\n//  Microsoft Visual C++\n//\n//  Must remain the last #elif since some other vendors (Metrowerks, for\n//  example) also #define _MSC_VER\n#   define BOOST_COMPILER_CONFIG \"boost/config/compiler/visualc.hpp\"\n\n#elif defined (BOOST_ASSERT_CONFIG)\n// this must come last - generate an error if we don't\n// recognise the compiler:\n#  error \"Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)\"\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/select_platform_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2002. \n//  (C) Copyright Jens Maurer 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed.\n// Note that we define the headers to include using \"header_name\" not\n// <header_name> in order to prevent macro expansion within the header\n// name (for example \"linux\" is a macro on linux systems).\n\n#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC)\n// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though?\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/linux.hpp\"\n\n#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)\n// BSD:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/bsd.hpp\"\n\n#elif defined(sun) || defined(__sun)\n// solaris:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/solaris.hpp\"\n\n#elif defined(__sgi)\n// SGI Irix:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/irix.hpp\"\n\n#elif defined(__hpux)\n// hp unix:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/hpux.hpp\"\n\n#elif defined(__CYGWIN__)\n// cygwin is not win32:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/cygwin.hpp\"\n\n#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\n// win32:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/win32.hpp\"\n\n#elif defined(__BEOS__)\n// BeOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/beos.hpp\"\n\n#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)\n// MacOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/macos.hpp\"\n\n#elif defined(__IBMCPP__) || defined(_AIX)\n// IBM\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/aix.hpp\"\n\n#elif defined(__amigaos__)\n// AmigaOS\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/amigaos.hpp\"\n\n#elif defined(__QNXNTO__)\n// QNX:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/qnxnto.hpp\"\n\n#elif defined(__VXWORKS__)\n// vxWorks:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/vxworks.hpp\"\n\n#elif defined(__SYMBIAN32__) \n// Symbian: \n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/symbian.hpp\" \n\n#elif defined(_CRAYC)\n// Cray:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/cray.hpp\" \n\n#elif defined(__VMS) \n// VMS:\n#  define BOOST_PLATFORM_CONFIG \"boost/config/platform/vms.hpp\" \n#else\n\n#  if defined(unix) \\\n      || defined(__unix) \\\n      || defined(_XOPEN_SOURCE) \\\n      || defined(_POSIX_SOURCE)\n\n   // generic unix platform:\n\n#  ifndef BOOST_HAS_UNISTD_H\n#     define BOOST_HAS_UNISTD_H\n#  endif\n\n#  include <boost/config/posix_features.hpp>\n\n#  endif\n\n#  if defined (BOOST_ASSERT_CONFIG)\n      // this must come last - generate an error if we don't\n      // recognise the platform:\n#     error \"Unknown platform - please configure and report the results to boost.org\"\n#  endif\n\n#endif\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/select_stdlib_config.hpp",
    "content": "//  Boost compiler configuration selection header file\n\n//  (C) Copyright John Maddock 2001 - 2003. \n//  (C) Copyright Jens Maurer 2001 - 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n\n//  See http://www.boost.org for most recent version.\n\n// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed:\n\n// First include <cstddef> to determine if some version of STLport is in use as the std lib\n// (do not rely on this header being included since users can short-circuit this header \n//  if they know whose std lib they are using.)\n#ifdef __cplusplus\n#  include <cstddef>\n#else\n#  include <stddef.h>\n#endif\n\n#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)\n// STLPort library; this _must_ come first, otherwise since\n// STLport typically sits on top of some other library, we\n// can end up detecting that first rather than STLport:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/stlport.hpp\"\n\n#else\n\n// If our std lib was not some version of STLport, then include <utility> as it is about \n// the smallest of the std lib headers that includes real C++ stuff.  (Some std libs do not\n// include their C++-related macros in <cstddef> so this additional include makes sure\n// we get those definitions)\n// (again do not rely on this header being included since users can short-circuit this \n//  header if they know whose std lib they are using.)\n#include <boost/config/no_tr1/utility.hpp>\n\n#if defined(__LIBCOMO__)\n// Comeau STL:\n#define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libcomo.hpp\"\n\n#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)\n// Rogue Wave library:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/roguewave.hpp\"\n\n#elif defined(_LIBCPP_VERSION)\n// libc++\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libcpp.hpp\"\n\n#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)\n// GNU libstdc++ 3\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/libstdcpp3.hpp\"\n\n#elif defined(__STL_CONFIG_H)\n// generic SGI STL\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/sgi.hpp\"\n\n#elif defined(__MSL_CPP__)\n// MSL standard lib:\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/msl.hpp\"\n\n#elif defined(__IBMCPP__)\n// take the default VACPP std lib\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/vacpp.hpp\"\n\n#elif defined(MSIPL_COMPILE_H)\n// Modena C++ standard library\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/modena.hpp\"\n\n#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)\n// Dinkumware Library (this has to appear after any possible replacement libraries):\n#  define BOOST_STDLIB_CONFIG \"boost/config/stdlib/dinkumware.hpp\"\n\n#elif defined (BOOST_ASSERT_CONFIG)\n// this must come last - generate an error if we don't\n// recognise the library:\n#  error \"Unknown standard library - please configure and report the results to boost.org\"\n\n#endif\n\n#endif\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/stdlib/libstdcpp3.hpp",
    "content": "//  (C) Copyright John Maddock 2001.\n//  (C) Copyright Jens Maurer 2001.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org for most recent version.\n\n//  config for libstdc++ v3\n//  not much to go in here:\n\n#define BOOST_GNU_STDLIB 1\n\n#ifdef __GLIBCXX__\n#define BOOST_STDLIB \"GNU libstdc++ version \" BOOST_STRINGIZE(__GLIBCXX__)\n#else\n#define BOOST_STDLIB \"GNU libstdc++ version \" BOOST_STRINGIZE(__GLIBCPP__)\n#endif\n\n#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)\n#  define BOOST_NO_CWCHAR\n#  define BOOST_NO_CWCTYPE\n#  define BOOST_NO_STD_WSTRING\n#  define BOOST_NO_STD_WSTREAMBUF\n#endif\n\n#if defined(__osf__) && !defined(_REENTRANT) \\\n  && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )\n// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header\n// file is included, therefore for consistency we define it here as well.\n#  define _REENTRANT\n#endif\n\n#ifdef __GLIBCXX__ // gcc 3.4 and greater:\n#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \\\n        || defined(_GLIBCXX__PTHREADS) \\\n        || defined(_GLIBCXX_HAS_GTHREADS) \\\n        || defined(_WIN32)\n      //\n      // If the std lib has thread support turned on, then turn it on in Boost\n      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT\n      // while others do not...\n      //\n#     define BOOST_HAS_THREADS\n#  else\n#     define BOOST_DISABLE_THREADS\n#  endif\n#elif defined(__GLIBCPP__) \\\n        && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \\\n        && !defined(_GLIBCPP__PTHREADS)\n   // disable thread support if the std lib was built single threaded:\n#  define BOOST_DISABLE_THREADS\n#endif\n\n#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)\n// linux on arm apparently doesn't define _REENTRANT\n// so just turn on threading support whenever the std lib is thread safe:\n#  define BOOST_HAS_THREADS\n#endif\n\n#if !defined(_GLIBCPP_USE_LONG_LONG) \\\n    && !defined(_GLIBCXX_USE_LONG_LONG)\\\n    && defined(BOOST_HAS_LONG_LONG)\n// May have been set by compiler/*.hpp, but \"long long\" without library\n// support is useless.\n#  undef BOOST_HAS_LONG_LONG\n#endif\n\n// Apple doesn't seem to reliably defined a *unix* macro\n#if !defined(CYGWIN) && (  defined(__unix__)  \\\n                        || defined(__unix)    \\\n                        || defined(unix)      \\\n                        || defined(__APPLE__) \\\n                        || defined(__APPLE)   \\\n                        || defined(APPLE))\n#  include <unistd.h>\n#endif\n\n#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0\n#  define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx\n#  define BOOST_HAS_SLIST\n#  define BOOST_HAS_HASH\n#  define BOOST_SLIST_HEADER <ext/slist>\n# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)\n#   define BOOST_HASH_SET_HEADER <ext/hash_set>\n#   define BOOST_HASH_MAP_HEADER <ext/hash_map>\n# else\n#   define BOOST_HASH_SET_HEADER <backward/hash_set>\n#   define BOOST_HASH_MAP_HEADER <backward/hash_map>\n# endif\n#endif\n\n//  stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly\n//  __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++\n//  developers. He also commented:\n//\n//       \"I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in\n//       GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305.\n//       Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support\n//       than any release in the 4.2 series.\"\n//\n//  Another resource for understanding stdlibc++ features is:\n//  http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x\n\n//  C++0x headers in GCC 4.3.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_HDR_ARRAY\n#  define BOOST_NO_CXX11_HDR_REGEX\n#  define BOOST_NO_CXX11_HDR_TUPLE\n#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP\n#  define BOOST_NO_CXX11_HDR_UNORDERED_SET\n#  define BOOST_NO_CXX11_HDR_FUNCTIONAL\n#endif\n\n//  C++0x headers in GCC 4.4.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_FORWARD_LIST\n#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#  define BOOST_NO_CXX11_HDR_RATIO\n#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR\n#  define BOOST_NO_CXX11_SMART_PTR\n#else\n#  define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG \n#  define BOOST_HAS_TR1_COMPLEX_OVERLOADS \n#endif\n\n#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_CXX11_HDR_MUTEX))\n#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE\n#  define BOOST_NO_CXX11_HDR_MUTEX\n#endif\n\n//  C++0x features in GCC 4.5.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_NUMERIC_LIMITS\n#  define BOOST_NO_CXX11_HDR_FUTURE\n#  define BOOST_NO_CXX11_HDR_RANDOM\n#endif\n\n//  C++0x features in GCC 4.6.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n#  define BOOST_NO_CXX11_HDR_TYPEINDEX\n#endif\n\n//  C++0x features in GCC 4.7.0 and later\n//\n#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)\n// Note that although <chrono> existed prior to 4.7, \"stead_clock\" is spelled \"monotonic_clock\"\n// so 4.7.0 is the first truely conforming one.\n#  define BOOST_NO_CXX11_HDR_CHRONO\n#  define BOOST_NO_CXX11_ALLOCATOR\n#endif\n//  C++0x headers not yet (fully!) implemented\n//\n#  define BOOST_NO_CXX11_HDR_THREAD\n#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS\n#  define BOOST_NO_CXX11_HDR_CODECVT\n#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR\n\n//  --- end ---\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/suffix.hpp",
    "content": "//  Boost config.hpp configuration header file  ------------------------------//\n\n//  Copyright (c) 2001-2003 John Maddock\n//  Copyright (c) 2001 Darin Adler\n//  Copyright (c) 2001 Peter Dimov\n//  Copyright (c) 2002 Bill Kempf \n//  Copyright (c) 2002 Jens Maurer\n//  Copyright (c) 2002-2003 David Abrahams\n//  Copyright (c) 2003 Gennaro Prota\n//  Copyright (c) 2003 Eric Friedman\n//  Copyright (c) 2010 Eric Jourdanneau, Joel Falcou\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/ for most recent version.\n\n//  Boost config.hpp policy and rationale documentation has been moved to\n//  http://www.boost.org/libs/config/\n//\n//  This file is intended to be stable, and relatively unchanging.\n//  It should contain boilerplate code only - no compiler specific\n//  code unless it is unavoidable - no changes unless unavoidable.\n\n#ifndef BOOST_CONFIG_SUFFIX_HPP\n#define BOOST_CONFIG_SUFFIX_HPP\n\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n//\n// Some GCC-4.x versions issue warnings even when __extension__ is used,\n// so use this as a workaround:\n//\n#pragma GCC system_header\n#endif\n\n//\n// ensure that visibility macros are always defined, thus symplifying use\n//\n#ifndef BOOST_SYMBOL_EXPORT\n# define BOOST_SYMBOL_EXPORT\n#endif\n#ifndef BOOST_SYMBOL_IMPORT\n# define BOOST_SYMBOL_IMPORT\n#endif\n#ifndef BOOST_SYMBOL_VISIBLE\n# define BOOST_SYMBOL_VISIBLE\n#endif\n\n//\n// look for long long by looking for the appropriate macros in <limits.h>.\n// Note that we use limits.h rather than climits for maximal portability,\n// remember that since these just declare a bunch of macros, there should be\n// no namespace issues from this.\n//\n#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \\\n   && !defined(BOOST_MSVC) && !defined(__BORLANDC__)\n# include <limits.h>\n# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))\n#   define BOOST_HAS_LONG_LONG\n# else\n#   define BOOST_NO_LONG_LONG\n# endif\n#endif\n\n// GCC 3.x will clean up all of those nasty macro definitions that\n// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine\n// it under GCC 3.x.\n#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)\n#  undef BOOST_NO_CTYPE_FUNCTIONS\n#endif\n\n//\n// Assume any extensions are in namespace std:: unless stated otherwise:\n//\n#  ifndef BOOST_STD_EXTENSION_NAMESPACE\n#    define BOOST_STD_EXTENSION_NAMESPACE std\n#  endif\n\n//\n// If cv-qualified specializations are not allowed, then neither are cv-void ones:\n//\n#  if defined(BOOST_NO_CV_SPECIALIZATIONS) \\\n      && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)\n#     define BOOST_NO_CV_VOID_SPECIALIZATIONS\n#  endif\n\n//\n// If there is no numeric_limits template, then it can't have any compile time\n// constants either!\n//\n#  if defined(BOOST_NO_LIMITS) \\\n      && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)\n#     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS\n#  endif\n\n//\n// if there is no long long then there is no specialisation\n// for numeric_limits<long long> either:\n//\n#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)\n#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS\n#endif\n\n//\n// if there is no __int64 then there is no specialisation\n// for numeric_limits<__int64> either:\n//\n#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)\n#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS\n#endif\n\n//\n// if member templates are supported then so is the\n// VC6 subset of member templates:\n//\n#  if !defined(BOOST_NO_MEMBER_TEMPLATES) \\\n       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n#     define BOOST_MSVC6_MEMBER_TEMPLATES\n#  endif\n\n//\n// Without partial specialization, can't test for partial specialisation bugs:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)\n#     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG\n#  endif\n\n//\n// Without partial specialization, we can't have array-type partial specialisations:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\n#     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS\n#  endif\n\n//\n// Without partial specialization, std::iterator_traits can't work:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_STD_ITERATOR_TRAITS)\n#     define BOOST_NO_STD_ITERATOR_TRAITS\n#  endif\n\n//\n// Without partial specialization, partial \n// specialization with default args won't work either:\n//\n#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n      && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)\n#     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS\n#  endif\n\n//\n// Without member template support, we can't have template constructors\n// in the standard library either:\n//\n#  if defined(BOOST_NO_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\n#     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS\n#  endif\n\n//\n// Without member template support, we can't have a conforming\n// std::allocator template either:\n//\n#  if defined(BOOST_NO_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \\\n      && !defined(BOOST_NO_STD_ALLOCATOR)\n#     define BOOST_NO_STD_ALLOCATOR\n#  endif\n\n//\n// without ADL support then using declarations will break ADL as well:\n//\n#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)\n#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\n#endif\n\n//\n// Without typeid support we have no dynamic RTTI either:\n//\n#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)\n#  define BOOST_NO_RTTI\n#endif\n\n//\n// If we have a standard allocator, then we have a partial one as well:\n//\n#if !defined(BOOST_NO_STD_ALLOCATOR)\n#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR\n#endif\n\n//\n// We can't have a working std::use_facet if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)\n#     define BOOST_NO_STD_USE_FACET\n#  endif\n\n//\n// We can't have a std::messages facet if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)\n#     define BOOST_NO_STD_MESSAGES\n#  endif\n\n//\n// We can't have a working std::wstreambuf if there is no std::locale:\n//\n#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)\n#     define BOOST_NO_STD_WSTREAMBUF\n#  endif\n\n//\n// We can't have a <cwctype> if there is no <cwchar>:\n//\n#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)\n#     define BOOST_NO_CWCTYPE\n#  endif\n\n//\n// We can't have a swprintf if there is no <cwchar>:\n//\n#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)\n#     define BOOST_NO_SWPRINTF\n#  endif\n\n//\n// If Win32 support is turned off, then we must turn off\n// threading support also, unless there is some other\n// thread API enabled:\n//\n#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \\\n   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)\n#  define BOOST_DISABLE_THREADS\n#endif\n\n//\n// Turn on threading support if the compiler thinks that it's in\n// multithreaded mode.  We put this here because there are only a\n// limited number of macros that identify this (if there's any missing\n// from here then add to the appropriate compiler section):\n//\n#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \\\n    || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \\\n    && !defined(BOOST_HAS_THREADS)\n#  define BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading support off if BOOST_DISABLE_THREADS is defined:\n//\n#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)\n#  undef BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading support off if we don't recognise the threading API:\n//\n#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\\\n      && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\\\n      && !defined(BOOST_HAS_MPTASKS)\n#  undef BOOST_HAS_THREADS\n#endif\n\n//\n// Turn threading detail macros off if we don't (want to) use threading\n//\n#ifndef BOOST_HAS_THREADS\n#  undef BOOST_HAS_PTHREADS\n#  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE\n#  undef BOOST_HAS_PTHREAD_YIELD\n#  undef BOOST_HAS_PTHREAD_DELAY_NP\n#  undef BOOST_HAS_WINTHREADS\n#  undef BOOST_HAS_BETHREADS\n#  undef BOOST_HAS_MPTASKS\n#endif\n\n//\n// If the compiler claims to be C99 conformant, then it had better\n// have a <stdint.h>:\n//\n#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)\n#     define BOOST_HAS_STDINT_H\n#     ifndef BOOST_HAS_LOG1P\n#        define BOOST_HAS_LOG1P\n#     endif\n#     ifndef BOOST_HAS_EXPM1\n#        define BOOST_HAS_EXPM1\n#     endif\n#  endif\n\n//\n// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.\n// Note that this is for backwards compatibility only.\n//\n#  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)\n#     define BOOST_NO_SLIST\n#  endif\n\n#  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)\n#     define BOOST_NO_HASH\n#  endif\n\n//\n// Set BOOST_SLIST_HEADER if not set already:\n//\n#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)\n#  define BOOST_SLIST_HEADER <slist>\n#endif\n\n//\n// Set BOOST_HASH_SET_HEADER if not set already:\n//\n#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)\n#  define BOOST_HASH_SET_HEADER <hash_set>\n#endif\n\n//\n// Set BOOST_HASH_MAP_HEADER if not set already:\n//\n#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)\n#  define BOOST_HASH_MAP_HEADER <hash_map>\n#endif\n\n//  BOOST_HAS_ABI_HEADERS\n//  This macro gets set if we have headers that fix the ABI,\n//  and prevent ODR violations when linking to external libraries:\n#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)\n#  define BOOST_HAS_ABI_HEADERS\n#endif\n\n#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)\n#  undef BOOST_HAS_ABI_HEADERS\n#endif\n\n//  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//\n//  Because std::size_t usage is so common, even in boost headers which do not\n//  otherwise use the C library, the <cstddef> workaround is included here so\n//  that ugly workaround code need not appear in many other boost headers.\n//  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>\n//  must still be #included in the usual places so that <cstddef> inclusion\n//  works as expected with standard conforming compilers.  The resulting\n//  double inclusion of <cstddef> is harmless.\n\n# if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)\n#   include <cstddef>\n    namespace std { using ::ptrdiff_t; using ::size_t; }\n# endif\n\n//  Workaround for the unfortunate min/max macros defined by some platform headers\n\n#define BOOST_PREVENT_MACRO_SUBSTITUTION\n\n#ifndef BOOST_USING_STD_MIN\n#  define BOOST_USING_STD_MIN() using std::min\n#endif\n\n#ifndef BOOST_USING_STD_MAX\n#  define BOOST_USING_STD_MAX() using std::max\n#endif\n\n//  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//\n\n#  if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus)\n\nnamespace std {\n  template <class _Tp>\n  inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {\n    return __b < __a ? __b : __a;\n  }\n  template <class _Tp>\n  inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {\n    return  __a < __b ? __b : __a;\n  }\n}\n\n#  endif\n\n// BOOST_STATIC_CONSTANT workaround --------------------------------------- //\n// On compilers which don't allow in-class initialization of static integral\n// constant members, we must use enums as a workaround if we want the constants\n// to be available at compile-time. This macro gives us a convenient way to\n// declare such constants.\n\n#  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n#       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }\n#  else\n#     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment\n#  endif\n\n// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//\n// When the standard library does not have a conforming std::use_facet there\n// are various workarounds available, but they differ from library to library.\n// The same problem occurs with has_facet.\n// These macros provide a consistent way to access a locale's facets.\n// Usage:\n//    replace\n//       std::use_facet<Type>(loc);\n//    with\n//       BOOST_USE_FACET(Type, loc);\n//    Note do not add a std:: prefix to the front of BOOST_USE_FACET!\n//  Use for BOOST_HAS_FACET is analogous.\n\n#if defined(BOOST_NO_STD_USE_FACET)\n#  ifdef BOOST_HAS_TWO_ARG_USE_FACET\n#     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))\n#     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))\n#  elif defined(BOOST_HAS_MACRO_USE_FACET)\n#     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)\n#     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)\n#  elif defined(BOOST_HAS_STLP_USE_FACET)\n#     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))\n#     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)\n#  endif\n#else\n#  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)\n#  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)\n#endif\n\n// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//\n// Member templates are supported by some compilers even though they can't use\n// the A::template member<U> syntax, as a workaround replace:\n//\n// typedef typename A::template rebind<U> binder;\n//\n// with:\n//\n// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD\n#  define BOOST_NESTED_TEMPLATE template\n#else\n#  define BOOST_NESTED_TEMPLATE\n#endif\n\n// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//\n// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION\n// is defined, in which case it evaluates to return x; Use when you have a return\n// statement that can never be reached.\n\n#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION\n#  define BOOST_UNREACHABLE_RETURN(x) return x;\n#else\n#  define BOOST_UNREACHABLE_RETURN(x)\n#endif\n\n// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//\n//\n// Some compilers don't support the use of `typename' for dependent\n// types in deduced contexts, e.g.\n//\n//     template <class T> void f(T, typename T::type);\n//                                  ^^^^^^^^\n// Replace these declarations with:\n//\n//     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);\n\n#ifndef BOOST_NO_DEDUCED_TYPENAME\n#  define BOOST_DEDUCED_TYPENAME typename\n#else\n#  define BOOST_DEDUCED_TYPENAME\n#endif\n\n#ifndef BOOST_NO_TYPENAME_WITH_CTOR\n#  define BOOST_CTOR_TYPENAME typename\n#else\n#  define BOOST_CTOR_TYPENAME\n#endif\n\n// long long workaround ------------------------------------------//\n// On gcc (and maybe other compilers?) long long is alway supported\n// but it's use may generate either warnings (with -ansi), or errors\n// (with -pedantic -ansi) unless it's use is prefixed by __extension__\n//\n#if defined(BOOST_HAS_LONG_LONG) && defined(__cplusplus)\nnamespace boost{\n#  ifdef __GNUC__\n   __extension__ typedef long long long_long_type;\n   __extension__ typedef unsigned long long ulong_long_type;\n#  else\n   typedef long long long_long_type;\n   typedef unsigned long long ulong_long_type;\n#  endif\n}\n#endif\n\n// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//\n//\n// Some compilers have problems with function templates whose template\n// parameters don't appear in the function parameter list (basically\n// they just link one instantiation of the template in the final\n// executable). These macros provide a uniform way to cope with the\n// problem with no effects on the calling syntax.\n\n// Example:\n//\n//  #include <iostream>\n//  #include <ostream>\n//  #include <typeinfo>\n//\n//  template <int n>\n//  void f() { std::cout << n << ' '; }\n//\n//  template <typename T>\n//  void g() { std::cout << typeid(T).name() << ' '; }\n//\n//  int main() {\n//    f<1>();\n//    f<2>();\n//\n//    g<int>();\n//    g<double>();\n//  }\n//\n// With VC++ 6.0 the output is:\n//\n//   2 2 double double\n//\n// To fix it, write\n//\n//   template <int n>\n//   void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }\n//\n//   template <typename T>\n//   void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }\n//\n\n\n#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) && defined(__cplusplus)\n\n#  include \"boost/type.hpp\"\n#  include \"boost/non_type.hpp\"\n\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)              boost::type<t>* = 0\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)         boost::type<t>*\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)       boost::non_type<t, v>* = 0\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  boost::non_type<t, v>*\n\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)        \\\n             , BOOST_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)   \\\n             , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \\\n             , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)    \\\n             , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n#else\n\n// no workaround needed: expand to nothing\n\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n\n#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS\n\n// When BOOST_NO_STD_TYPEINFO is defined, we can just import\n// the global definition into std namespace:\n#if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus)\n#include <typeinfo>\nnamespace std{ using ::type_info; }\n#endif\n\n// ---------------------------------------------------------------------------//\n\n//\n// Helper macro BOOST_STRINGIZE:\n// Converts the parameter X to a string after macro replacement\n// on X has been performed.\n//\n#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)\n#define BOOST_DO_STRINGIZE(X) #X\n\n//\n// Helper macro BOOST_JOIN:\n// The following piece of macro magic joins the two\n// arguments together, even when one of the arguments is\n// itself a macro (see 16.3.1 in C++ standard).  The key\n// is that macro expansion of macro arguments does not\n// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.\n//\n#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )\n#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)\n#define BOOST_DO_JOIN2( X, Y ) X##Y\n\n//\n// Set some default values for compiler/library/platform names.\n// These are for debugging config setup only:\n//\n#  ifndef BOOST_COMPILER\n#     define BOOST_COMPILER \"Unknown ISO C++ Compiler\"\n#  endif\n#  ifndef BOOST_STDLIB\n#     define BOOST_STDLIB \"Unknown ISO standard library\"\n#  endif\n#  ifndef BOOST_PLATFORM\n#     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \\\n         || defined(_POSIX_SOURCE)\n#        define BOOST_PLATFORM \"Generic Unix\"\n#     else\n#        define BOOST_PLATFORM \"Unknown\"\n#     endif\n#  endif\n\n//\n// Set some default values GPU support\n//\n#  ifndef BOOST_GPU_ENABLED\n#  define BOOST_GPU_ENABLED \n#  endif\n\n// BOOST_FORCEINLINE ---------------------------------------------//\n// Macro to use in place of 'inline' to force a function to be inline\n#if !defined(BOOST_FORCEINLINE)\n#  if defined(_MSC_VER)\n#    define BOOST_FORCEINLINE __forceinline\n#  elif defined(__GNUC__) && __GNUC__ > 3\n#    define BOOST_FORCEINLINE inline __attribute__ ((always_inline))\n#  else\n#    define BOOST_FORCEINLINE inline\n#  endif\n#endif\n\n//\n// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined\n//\n#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276)\n#define\tBOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE\n#endif\n\n//  -------------------- Deprecated macros for 1.50 ---------------------------\n//  These will go away in a future release\n\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP\n//           instead of BOOST_NO_STD_UNORDERED\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET)\n# ifndef BOOST_NO_STD_UNORDERED\n#  define BOOST_NO_STD_UNORDERED\n# endif\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS\n#if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)\n#  define BOOST_NO_INITIALIZER_LISTS\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY\n#if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_BOOST_NO_0X_HDR_ARRAY)\n#  define BOOST_NO_0X_HDR_ARRAY\n#endif\n//  Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO\n#if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO)\n#  define BOOST_NO_0X_HDR_CHRONO\n#endif\n//  Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT\n#if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT)\n#  define BOOST_NO_0X_HDR_CODECVT\n#endif\n//  Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE\n#if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE)\n#  define BOOST_NO_0X_HDR_CONDITION_VARIABLE\n#endif\n//  Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST\n#if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST)\n#  define BOOST_NO_0X_HDR_FORWARD_LIST\n#endif\n//  Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE\n#if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE)\n#  define BOOST_NO_0X_HDR_FUTURE\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST \n//  instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS\n#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST\n# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST\n#  define BOOST_NO_0X_HDR_INITIALIZER_LIST\n# endif\n# ifndef BOOST_NO_INITIALIZER_LISTS\n#  define BOOST_NO_INITIALIZER_LISTS\n# endif\n#endif\n\n//  Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX\n#if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX)\n#  define BOOST_NO_0X_HDR_MUTEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM\n#if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM)\n#  define BOOST_NO_0X_HDR_RANDOM\n#endif\n//  Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO\n#if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO)\n#  define BOOST_NO_0X_HDR_RATIO\n#endif\n//  Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX\n#if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX)\n#  define BOOST_NO_0X_HDR_REGEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR\n#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR)\n#  define BOOST_NO_0X_HDR_SYSTEM_ERROR\n#endif\n//  Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD\n#if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD)\n#  define BOOST_NO_0X_HDR_THREAD\n#endif\n//  Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE\n#if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE)\n#  define BOOST_NO_0X_HDR_TUPLE\n#endif\n//  Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS\n#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)\n#  define BOOST_NO_0X_HDR_TYPE_TRAITS\n#endif\n//  Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX\n#if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX)\n#  define BOOST_NO_0X_HDR_TYPEINDEX\n#endif\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP)\n#  define BOOST_NO_0X_HDR_UNORDERED_MAP\n#endif\n//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET\n#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET)\n#  define BOOST_NO_0X_HDR_UNORDERED_SET\n#endif\n\n//  ------------------ End of deprecated macros for 1.50 ---------------------------\n\n//  -------------------- Deprecated macros for 1.51 ---------------------------\n//  These will go away in a future release\n\n//  Use     BOOST_NO_CXX11_AUTO_DECLARATIONS instead of   BOOST_NO_AUTO_DECLARATIONS\n#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS)\n#  define BOOST_NO_AUTO_DECLARATIONS\n#endif\n//  Use     BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of   BOOST_NO_AUTO_MULTIDECLARATIONS\n#if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS)\n#  define BOOST_NO_AUTO_MULTIDECLARATIONS\n#endif\n//  Use     BOOST_NO_CXX11_CHAR16_T instead of   BOOST_NO_CHAR16_T\n#if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T)\n#  define BOOST_NO_CHAR16_T\n#endif\n//  Use     BOOST_NO_CXX11_CHAR32_T instead of   BOOST_NO_CHAR32_T\n#if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T)\n#  define BOOST_NO_CHAR32_T\n#endif\n//  Use     BOOST_NO_CXX11_TEMPLATE_ALIASES instead of   BOOST_NO_TEMPLATE_ALIASES\n#if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES)\n#  define BOOST_NO_TEMPLATE_ALIASES\n#endif\n//  Use     BOOST_NO_CXX11_CONSTEXPR instead of   BOOST_NO_CONSTEXPR\n#if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR)\n#  define BOOST_NO_CONSTEXPR\n#endif\n//  Use     BOOST_NO_CXX11_DECLTYPE_N3276 instead of   BOOST_NO_DECLTYPE_N3276\n#if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276)\n#  define BOOST_NO_DECLTYPE_N3276\n#endif\n//  Use     BOOST_NO_CXX11_DECLTYPE instead of   BOOST_NO_DECLTYPE\n#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE)\n#  define BOOST_NO_DECLTYPE\n#endif\n//  Use     BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of   BOOST_NO_DEFAULTED_FUNCTIONS\n#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS)\n#  define BOOST_NO_DEFAULTED_FUNCTIONS\n#endif\n//  Use     BOOST_NO_CXX11_DELETED_FUNCTIONS instead of   BOOST_NO_DELETED_FUNCTIONS\n#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS)\n#  define BOOST_NO_DELETED_FUNCTIONS\n#endif\n//  Use     BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of   BOOST_NO_EXPLICIT_CONVERSION_OPERATORS\n#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)\n#  define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS\n#endif\n//  Use     BOOST_NO_CXX11_EXTERN_TEMPLATE instead of   BOOST_NO_EXTERN_TEMPLATE\n#if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE)\n#  define BOOST_NO_EXTERN_TEMPLATE\n#endif\n//  Use     BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of   BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)\n#  define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS\n#endif\n//  Use     BOOST_NO_CXX11_LAMBDAS instead of   BOOST_NO_LAMBDAS\n#if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS)\n#  define BOOST_NO_LAMBDAS\n#endif\n//  Use     BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of   BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS)\n#  define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS\n#endif\n//  Use     BOOST_NO_CXX11_NOEXCEPT instead of   BOOST_NO_NOEXCEPT\n#if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT)\n#  define BOOST_NO_NOEXCEPT\n#endif\n//  Use     BOOST_NO_CXX11_NULLPTR instead of   BOOST_NO_NULLPTR\n#if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR)\n#  define BOOST_NO_NULLPTR\n#endif\n//  Use     BOOST_NO_CXX11_RAW_LITERALS instead of   BOOST_NO_RAW_LITERALS\n#if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS)\n#  define BOOST_NO_RAW_LITERALS\n#endif\n//  Use     BOOST_NO_CXX11_RVALUE_REFERENCES instead of   BOOST_NO_RVALUE_REFERENCES\n#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES)\n#  define BOOST_NO_RVALUE_REFERENCES\n#endif\n//  Use     BOOST_NO_CXX11_SCOPED_ENUMS instead of   BOOST_NO_SCOPED_ENUMS\n#if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS)\n#  define BOOST_NO_SCOPED_ENUMS\n#endif\n//  Use     BOOST_NO_CXX11_STATIC_ASSERT instead of   BOOST_NO_STATIC_ASSERT\n#if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT)\n#  define BOOST_NO_STATIC_ASSERT\n#endif\n//  Use     BOOST_NO_CXX11_STD_UNORDERD instead of   BOOST_NO_STD_UNORDERD\n#if defined(BOOST_NO_CXX11_STD_UNORDERD) && !defined(BOOST_NO_STD_UNORDERD)\n#  define BOOST_NO_STD_UNORDERD\n#endif\n//  Use     BOOST_NO_CXX11_UNICODE_LITERALS instead of   BOOST_NO_UNICODE_LITERALS\n#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS)\n#  define BOOST_NO_UNICODE_LITERALS\n#endif\n//  Use     BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of   BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX\n#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX)\n#  define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX\n#endif\n//  Use     BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of   BOOST_NO_VARIADIC_TEMPLATES\n#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\n#  define BOOST_NO_VARIADIC_TEMPLATES\n#endif\n//  Use     BOOST_NO_CXX11_VARIADIC_MACROS instead of   BOOST_NO_VARIADIC_MACROS\n#if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS)\n#  define BOOST_NO_VARIADIC_MACROS\n#endif\n//  Use     BOOST_NO_CXX11_NUMERIC_LIMITS instead of   BOOST_NO_NUMERIC_LIMITS_LOWEST\n#if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST)\n#  define BOOST_NO_NUMERIC_LIMITS_LOWEST\n#endif\n//  ------------------ End of deprecated macros for 1.51 ---------------------------\n\n\n\n//\n// Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR\n// These aid the transition to C++11 while still supporting C++03 compilers\n//\n#ifdef BOOST_NO_NOEXCEPT\n#  define BOOST_NOEXCEPT\n#  define BOOST_NOEXCEPT_IF(Predicate)\n#  define BOOST_NOEXCEPT_EXPR(Expression) false\n#else\n#  define BOOST_NOEXCEPT noexcept\n#  define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate))\n#  define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression))\n#endif\n\n//\n// Normalize BOOST_NO_STATIC_ASSERT and (depricated) BOOST_HAS_STATIC_ASSERT:\n//\n#if !defined(BOOST_NO_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT)\n#  define BOOST_HAS_STATIC_ASSERT\n#endif\n\n//\n// constexpr workarounds\n// \n#if defined(BOOST_NO_CONSTEXPR)\n#define BOOST_CONSTEXPR\n#define BOOST_CONSTEXPR_OR_CONST const\n#else\n#define BOOST_CONSTEXPR constexpr\n#define BOOST_CONSTEXPR_OR_CONST constexpr\n#endif\n\n#define BOOST_STATIC_CONSTEXPR  static BOOST_CONSTEXPR_OR_CONST\n\n//\n// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined\n//\n#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS)\n#define BOOST_HAS_RVALUE_REFS\n#endif\n\n//\n// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_VARIADIC_TEMPLATES is not defined\n//\n#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL)\n#define BOOST_HAS_VARIADIC_TMPL\n#endif\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config/user.hpp",
    "content": "//  boost/config/user.hpp  ---------------------------------------------------//\n\n//  (C) Copyright John Maddock 2001. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Do not check in modified versions of this file,\n//  This file may be customized by the end user, but not by boost.\n\n//\n//  Use this file to define a site and compiler specific\n//  configuration policy:\n//\n\n// define this to locate a compiler config file:\n// #define BOOST_COMPILER_CONFIG <myheader>\n\n// define this to locate a stdlib config file:\n// #define BOOST_STDLIB_CONFIG   <myheader>\n\n// define this to locate a platform config file:\n// #define BOOST_PLATFORM_CONFIG <myheader>\n\n// define this to disable compiler config,\n// use if your compiler config has nothing to set:\n// #define BOOST_NO_COMPILER_CONFIG\n\n// define this to disable stdlib config,\n// use if your stdlib config has nothing to set:\n// #define BOOST_NO_STDLIB_CONFIG\n\n// define this to disable platform config,\n// use if your platform config has nothing to set:\n// #define BOOST_NO_PLATFORM_CONFIG\n\n// define this to disable all config options,\n// excluding the user config.  Use if your\n// setup is fully ISO compliant, and has no\n// useful extensions, or for autoconf generated\n// setups:\n// #define BOOST_NO_CONFIG\n\n// define this to make the config \"optimistic\"\n// about unknown compiler versions.  Normally\n// unknown compiler versions are assumed to have\n// all the defects of the last known version, however\n// setting this flag, causes the config to assume\n// that unknown compiler versions are fully conformant\n// with the standard:\n// #define BOOST_STRICT_CONFIG\n\n// define this to cause the config to halt compilation\n// with an #error if it encounters anything unknown --\n// either an unknown compiler version or an unknown\n// compiler/platform/library:\n// #define BOOST_ASSERT_CONFIG\n\n\n// define if you want to disable threading support, even\n// when available:\n// #define BOOST_DISABLE_THREADS\n\n// define when you want to disable Win32 specific features\n// even when available:\n// #define BOOST_DISABLE_WIN32\n\n// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any \n// prefix/suffix headers that normally control things like struct \n// packing and alignment. \n// #define BOOST_DISABLE_ABI_HEADERS\n\n// BOOST_ABI_PREFIX: A prefix header to include in place of whatever\n// boost.config would normally select, any replacement should set up \n// struct packing and alignment options as required. \n// #define BOOST_ABI_PREFIX my-header-name\n\n// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever \n// boost.config would normally select, any replacement should undo \n// the effects of the prefix header. \n// #define BOOST_ABI_SUFFIX my-header-name\n\n// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, \n// to be linked as dll's rather than static libraries on Microsoft Windows \n// (this macro is used to turn on __declspec(dllimport) modifiers, so that \n// the compiler knows which symbols to look for in a dll rather than in a \n// static library).  Note that there may be some libraries that can only \n// be statically linked (Boost.Test for example) and others which may only \n// be dynamically linked (Boost.Threads for example), in these cases this \n// macro has no effect.\n// #define BOOST_ALL_DYN_LINK\n \n// BOOST_WHATEVER_DYN_LINK: Forces library \"whatever\" to be linked as a dll \n// rather than a static library on Microsoft Windows: replace the WHATEVER \n// part of the macro name with the name of the library that you want to \n// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or \n// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) \n// modifiers, so that the compiler knows which symbols to look for in a dll \n// rather than in a static library).  \n// Note that there may be some libraries that can only be statically linked \n// (Boost.Test for example) and others which may only be dynamically linked \n// (Boost.Threads for example), in these cases this macro is unsupported.\n// #define BOOST_WHATEVER_DYN_LINK\n \n// BOOST_ALL_NO_LIB: Tells the config system not to automatically select \n// which libraries to link against.  \n// Normally if a compiler supports #pragma lib, then the correct library \n// build variant will be automatically selected and linked against, \n// simply by the act of including one of that library's headers.  \n// This macro turns that feature off.\n// #define BOOST_ALL_NO_LIB\n \n// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically \n// select which library to link against for library \"whatever\", \n// replace WHATEVER in the macro name with the name of the library; \n// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB.  \n// Normally if a compiler supports #pragma lib, then the correct library \n// build variant will be automatically selected and linked against, simply \n// by the act of including one of that library's headers.  This macro turns \n// that feature off.\n// #define BOOST_WHATEVER_NO_LIB\n \n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/config.hpp",
    "content": "//  Boost config.hpp configuration header file  ------------------------------//\n\n//  (C) Copyright John Maddock 2002. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/config for most recent version.\n\n//  Boost config.hpp policy and rationale documentation has been moved to\n//  http://www.boost.org/libs/config\n//\n//  CAUTION: This file is intended to be completely stable -\n//           DO NOT MODIFY THIS FILE!\n//\n\n#ifndef BOOST_CONFIG_HPP\n#define BOOST_CONFIG_HPP\n\n// if we don't have a user config, then use the default location:\n#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG)\n#  define BOOST_USER_CONFIG <boost/config/user.hpp>\n#endif\n// include it first:\n#ifdef BOOST_USER_CONFIG\n#  include BOOST_USER_CONFIG\n#endif\n\n// if we don't have a compiler config set, try and find one:\n#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)\n#  include <boost/config/select_compiler_config.hpp>\n#endif\n// if we have a compiler config, include it now:\n#ifdef BOOST_COMPILER_CONFIG\n#  include BOOST_COMPILER_CONFIG\n#endif\n\n// if we don't have a std library config set, try and find one:\n#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) && defined(__cplusplus)\n#  include <boost/config/select_stdlib_config.hpp>\n#endif\n// if we have a std library config, include it now:\n#ifdef BOOST_STDLIB_CONFIG\n#  include BOOST_STDLIB_CONFIG\n#endif\n\n// if we don't have a platform config set, try and find one:\n#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG)\n#  include <boost/config/select_platform_config.hpp>\n#endif\n// if we have a platform config, include it now:\n#ifdef BOOST_PLATFORM_CONFIG\n#  include BOOST_PLATFORM_CONFIG\n#endif\n\n// get config suffix code:\n#include <boost/config/suffix.hpp>\n\n#endif  // BOOST_CONFIG_HPP\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/container/container_fwd.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/container for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP\n#define BOOST_CONTAINER_CONTAINER_FWD_HPP\n\n#if (defined _MSC_VER) && (_MSC_VER >= 1200)\n#  pragma once\n#endif\n\n//////////////////////////////////////////////////////////////////////////////\n//                        Standard predeclarations\n//////////////////////////////////////////////////////////////////////////////\n\n/// @cond\n\nnamespace boost{\nnamespace intrusive{\n   //Create namespace to avoid compilation errors\n}}\n\nnamespace boost{ namespace container{ namespace container_detail{\n\nnamespace bi = boost::intrusive;\n\n}}}\n\n#include <utility>\n#include <memory>\n#include <functional>\n#include <iosfwd>\n#include <string>\n\n/// @endcond\n\n//////////////////////////////////////////////////////////////////////////////\n//                             Containers\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost {\nnamespace container {\n\n//vector class\ntemplate <class T\n         ,class Allocator = std::allocator<T> >\nclass vector;\n\n//vector class\ntemplate <class T\n         ,class Allocator = std::allocator<T> >\nclass stable_vector;\n\n//vector class\ntemplate <class T\n         ,class Allocator = std::allocator<T> >\nclass deque;\n\n//list class\ntemplate <class T\n         ,class Allocator = std::allocator<T> >\nclass list;\n\n//slist class\ntemplate <class T\n         ,class Allocator = std::allocator<T> >\nclass slist;\n\n//set class\ntemplate <class Key\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<Key> >\nclass set;\n\n//multiset class\ntemplate <class Key\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<Key> >\nclass multiset;\n\n//map class\ntemplate <class Key\n         ,class T\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<std::pair<const Key, T> > >\nclass map;\n\n//multimap class\ntemplate <class Key\n         ,class T\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<std::pair<const Key, T> > >\nclass multimap;\n\n//flat_set class\ntemplate <class Key\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<Key> >\nclass flat_set;\n\n//flat_multiset class\ntemplate <class Key\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<Key> >\nclass flat_multiset;\n\n//flat_map class\ntemplate <class Key\n         ,class T\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<std::pair<Key, T> > >\nclass flat_map;\n\n//flat_multimap class\ntemplate <class Key\n         ,class T\n         ,class Compare  = std::less<Key>\n         ,class Allocator = std::allocator<std::pair<Key, T> > >\nclass flat_multimap;\n\n//basic_string class\ntemplate <class CharT\n         ,class Traits = std::char_traits<CharT>\n         ,class Allocator  = std::allocator<CharT> >\nclass basic_string;\n\n//! Type used to tag that the input range is\n//! guaranteed to be ordered\nstruct ordered_range_t\n{};\n\n//! Type used to tag that the input range is\n//! guaranteed to be ordered and unique\nstruct ordered_unique_range_t\n   : public ordered_range_t\n{};\n\n//! Value used to tag that the input range is\n//! guaranteed to be ordered\nstatic const ordered_range_t ordered_range = ordered_range_t();\n\n//! Value used to tag that the input range is\n//! guaranteed to be ordered and unique\nstatic const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();\n\n/// @cond\n\nnamespace detail_really_deep_namespace {\n\n//Otherwise, gcc issues a warning of previously defined\n//anonymous_instance and unique_instance\nstruct dummy\n{\n   dummy()\n   {\n      (void)ordered_range;\n      (void)ordered_unique_range;\n   }\n};\n\n}  //detail_really_deep_namespace {\n\n/// @endcond\n\n}}  //namespace boost { namespace container {\n\n#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/cstdint.hpp",
    "content": "//  boost cstdint.hpp header file  ------------------------------------------//\n\n//  (C) Copyright Beman Dawes 1999. \n//  (C) Copyright Jens Mauer 2001  \n//  (C) Copyright John Maddock 2001 \n//  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n//  Revision History\n//   31 Oct 01  use BOOST_HAS_LONG_LONG to check for \"long long\" (Jens M.)\n//   16 Apr 01  check LONGLONG_MAX when looking for \"long long\" (Jens Maurer)\n//   23 Jan 01  prefer \"long\" over \"int\" for int32_t and intmax_t (Jens Maurer)\n//   12 Nov 00  Merged <boost/stdint.h> (Jens Maurer)\n//   23 Sep 00  Added INTXX_C macro support (John Maddock).\n//   22 Sep 00  Better 64-bit support (John Maddock)\n//   29 Jun 00  Reimplement to avoid including stdint.h within namespace boost\n//    8 Aug 99  Initial version (Beman Dawes)\n\n\n#ifndef BOOST_CSTDINT_HPP\n#define BOOST_CSTDINT_HPP\n\n//\n// Since we always define the INT#_C macros as per C++0x, \n// define __STDC_CONSTANT_MACROS so that <stdint.h> does the right\n// thing if possible, and so that the user knows that the macros \n// are actually defined as per C99.\n//\n#ifndef __STDC_CONSTANT_MACROS\n#  define __STDC_CONSTANT_MACROS\n#endif\n\n#include <boost/config.hpp>\n\n//\n// Note that GLIBC is a bit inconsistent about whether int64_t is defined or not\n// depending upon what headers happen to have been included first...\n// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.\n// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990\n//\n#if defined(BOOST_HAS_STDINT_H) && (!defined(__GLIBC__) || defined(__GLIBC_HAVE_LONG_LONG))\n\n// The following #include is an implementation artifact; not part of interface.\n# ifdef __hpux\n// HP-UX has a vaguely nice <stdint.h> in a non-standard location\n#   include <inttypes.h>\n#   ifdef __STDC_32_MODE__\n      // this is triggered with GCC, because it defines __cplusplus < 199707L\n#     define BOOST_NO_INT64_T\n#   endif \n# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)\n#   include <inttypes.h>\n# else\n#   include <stdint.h>\n\n// There is a bug in Cygwin two _C macros\n#   if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)\n#     undef INTMAX_C\n#     undef UINTMAX_C\n#     define INTMAX_C(c) c##LL\n#     define UINTMAX_C(c) c##ULL\n#   endif\n\n# endif\n\n#ifdef __QNX__\n\n// QNX (Dinkumware stdlib) defines these as non-standard names.\n// Reflect to the standard names.\n\ntypedef ::intleast8_t int_least8_t;\ntypedef ::intfast8_t int_fast8_t;\ntypedef ::uintleast8_t uint_least8_t;\ntypedef ::uintfast8_t uint_fast8_t;\n\ntypedef ::intleast16_t int_least16_t;\ntypedef ::intfast16_t int_fast16_t;\ntypedef ::uintleast16_t uint_least16_t;\ntypedef ::uintfast16_t uint_fast16_t;\n\ntypedef ::intleast32_t int_least32_t;\ntypedef ::intfast32_t int_fast32_t;\ntypedef ::uintleast32_t uint_least32_t;\ntypedef ::uintfast32_t uint_fast32_t;\n\n# ifndef BOOST_NO_INT64_T\n\ntypedef ::intleast64_t int_least64_t;\ntypedef ::intfast64_t int_fast64_t;\ntypedef ::uintleast64_t uint_least64_t;\ntypedef ::uintfast64_t uint_fast64_t;\n\n# endif\n\n#endif\n\nnamespace boost\n{\n\n  using ::int8_t;             \n  using ::int_least8_t;       \n  using ::int_fast8_t;        \n  using ::uint8_t;            \n  using ::uint_least8_t;      \n  using ::uint_fast8_t;       \n                     \n  using ::int16_t;            \n  using ::int_least16_t;      \n  using ::int_fast16_t;       \n  using ::uint16_t;           \n  using ::uint_least16_t;     \n  using ::uint_fast16_t;      \n                     \n  using ::int32_t;            \n  using ::int_least32_t;      \n  using ::int_fast32_t;       \n  using ::uint32_t;           \n  using ::uint_least32_t;     \n  using ::uint_fast32_t;      \n                     \n# ifndef BOOST_NO_INT64_T\n\n  using ::int64_t;            \n  using ::int_least64_t;      \n  using ::int_fast64_t;       \n  using ::uint64_t;           \n  using ::uint_least64_t;     \n  using ::uint_fast64_t;      \n                     \n# endif\n\n  using ::intmax_t;      \n  using ::uintmax_t;     \n\n} // namespace boost\n\n#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) || defined(__VMS)\n// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.\n# include <inttypes.h>\n\nnamespace boost {\n\n  using ::int8_t;             \n  typedef int8_t int_least8_t;       \n  typedef int8_t int_fast8_t;        \n  using ::uint8_t;            \n  typedef uint8_t uint_least8_t;      \n  typedef uint8_t uint_fast8_t;       \n                     \n  using ::int16_t;            \n  typedef int16_t int_least16_t;      \n  typedef int16_t int_fast16_t;       \n  using ::uint16_t;           \n  typedef uint16_t uint_least16_t;     \n  typedef uint16_t uint_fast16_t;      \n                     \n  using ::int32_t;            \n  typedef int32_t int_least32_t;      \n  typedef int32_t int_fast32_t;       \n  using ::uint32_t;           \n  typedef uint32_t uint_least32_t;     \n  typedef uint32_t uint_fast32_t;      \n         \n# ifndef BOOST_NO_INT64_T          \n\n  using ::int64_t;            \n  typedef int64_t int_least64_t;      \n  typedef int64_t int_fast64_t;       \n  using ::uint64_t;           \n  typedef uint64_t uint_least64_t;     \n  typedef uint64_t uint_fast64_t;      \n\n  typedef int64_t intmax_t;\n  typedef uint64_t uintmax_t;\n\n# else\n\n  typedef int32_t intmax_t;\n  typedef uint32_t uintmax_t;\n\n# endif\n\n} // namespace boost\n\n#else  // BOOST_HAS_STDINT_H\n\n# include <boost/limits.hpp> // implementation artifact; not part of interface\n# include <limits.h>         // needed for limits macros\n\n\nnamespace boost\n{\n\n//  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit\n//  platforms.  For other systems, they will have to be hand tailored.\n//\n//  Because the fast types are assumed to be the same as the undecorated types,\n//  it may be possible to hand tailor a more efficient implementation.  Such\n//  an optimization may be illusionary; on the Intel x86-family 386 on, for\n//  example, byte arithmetic and load/stores are as fast as \"int\" sized ones.\n\n//  8-bit types  ------------------------------------------------------------//\n\n# if UCHAR_MAX == 0xff\n     typedef signed char     int8_t;\n     typedef signed char     int_least8_t;\n     typedef signed char     int_fast8_t;\n     typedef unsigned char   uint8_t;\n     typedef unsigned char   uint_least8_t;\n     typedef unsigned char   uint_fast8_t;\n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  16-bit types  -----------------------------------------------------------//\n\n# if USHRT_MAX == 0xffff\n#  if defined(__crayx1)\n     // The Cray X1 has a 16-bit short, however it is not recommend\n     // for use in performance critical code.\n     typedef short           int16_t;\n     typedef short           int_least16_t;\n     typedef int             int_fast16_t;\n     typedef unsigned short  uint16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned int    uint_fast16_t;\n#  else\n     typedef short           int16_t;\n     typedef short           int_least16_t;\n     typedef short           int_fast16_t;\n     typedef unsigned short  uint16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned short  uint_fast16_t;\n#  endif\n# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__) \n      // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified \n      // MTA / XMT does support the following non-standard integer types \n      typedef __short16           int16_t; \n      typedef __short16           int_least16_t; \n      typedef __short16           int_fast16_t; \n      typedef unsigned __short16  uint16_t; \n      typedef unsigned __short16  uint_least16_t; \n      typedef unsigned __short16  uint_fast16_t; \n# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)\n     // no 16-bit types on Cray:\n     typedef short           int_least16_t;\n     typedef short           int_fast16_t;\n     typedef unsigned short  uint_least16_t;\n     typedef unsigned short  uint_fast16_t;\n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  32-bit types  -----------------------------------------------------------//\n\n# if UINT_MAX == 0xffffffff\n     typedef int             int32_t;\n     typedef int             int_least32_t;\n     typedef int             int_fast32_t;\n     typedef unsigned int    uint32_t;\n     typedef unsigned int    uint_least32_t;\n     typedef unsigned int    uint_fast32_t;\n# elif (USHRT_MAX == 0xffffffff)\n     typedef short             int32_t;\n     typedef short             int_least32_t;\n     typedef short             int_fast32_t;\n     typedef unsigned short    uint32_t;\n     typedef unsigned short    uint_least32_t;\n     typedef unsigned short    uint_fast32_t;\n# elif ULONG_MAX == 0xffffffff\n     typedef long            int32_t;\n     typedef long            int_least32_t;\n     typedef long            int_fast32_t;\n     typedef unsigned long   uint32_t;\n     typedef unsigned long   uint_least32_t;\n     typedef unsigned long   uint_fast32_t;\n# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__) \n      // Integers are 64 bits on the MTA / XMT \n      typedef __int32           int32_t; \n      typedef __int32           int_least32_t; \n      typedef __int32           int_fast32_t; \n      typedef unsigned __int32  uint32_t; \n      typedef unsigned __int32  uint_least32_t; \n      typedef unsigned __int32  uint_fast32_t; \n# else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n# endif\n\n//  64-bit types + intmax_t and uintmax_t  ----------------------------------//\n\n# if defined(BOOST_HAS_LONG_LONG) && \\\n   !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \\\n   (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \\\n   (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))\n#    if defined(__hpux)\n     // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions\n#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)\n                                                                 // 2**64 - 1\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n\n     typedef  ::boost::long_long_type            intmax_t;\n     typedef  ::boost::ulong_long_type   uintmax_t;\n     typedef  ::boost::long_long_type            int64_t;\n     typedef  ::boost::long_long_type            int_least64_t;\n     typedef  ::boost::long_long_type            int_fast64_t;\n     typedef  ::boost::ulong_long_type   uint64_t;\n     typedef  ::boost::ulong_long_type   uint_least64_t;\n     typedef  ::boost::ulong_long_type   uint_fast64_t;\n\n# elif ULONG_MAX != 0xffffffff\n\n#    if ULONG_MAX == 18446744073709551615 // 2**64 - 1\n     typedef long                 intmax_t;\n     typedef unsigned long        uintmax_t;\n     typedef long                 int64_t;\n     typedef long                 int_least64_t;\n     typedef long                 int_fast64_t;\n     typedef unsigned long        uint64_t;\n     typedef unsigned long        uint_least64_t;\n     typedef unsigned long        uint_fast64_t;\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)\n     __extension__ typedef long long            intmax_t;\n     __extension__ typedef unsigned long long   uintmax_t;\n     __extension__ typedef long long            int64_t;\n     __extension__ typedef long long            int_least64_t;\n     __extension__ typedef long long            int_fast64_t;\n     __extension__ typedef unsigned long long   uint64_t;\n     __extension__ typedef unsigned long long   uint_least64_t;\n     __extension__ typedef unsigned long long   uint_fast64_t;\n# elif defined(BOOST_HAS_MS_INT64)\n     //\n     // we have Borland/Intel/Microsoft __int64:\n     //\n     typedef __int64             intmax_t;\n     typedef unsigned __int64    uintmax_t;\n     typedef __int64             int64_t;\n     typedef __int64             int_least64_t;\n     typedef __int64             int_fast64_t;\n     typedef unsigned __int64    uint64_t;\n     typedef unsigned __int64    uint_least64_t;\n     typedef unsigned __int64    uint_fast64_t;\n# else // assume no 64-bit integers\n#  define BOOST_NO_INT64_T\n     typedef int32_t              intmax_t;\n     typedef uint32_t             uintmax_t;\n# endif\n\n} // namespace boost\n\n\n#endif // BOOST_HAS_STDINT_H\n\n#endif // BOOST_CSTDINT_HPP\n\n\n/****************************************************\n\nMacro definition section:\n\nAdded 23rd September 2000 (John Maddock).\nModified 11th September 2001 to be excluded when\nBOOST_HAS_STDINT_H is defined (John Maddock).\nModified 11th Dec 2009 to always define the\nINT#_C macros if they're not already defined (John Maddock).\n\n******************************************************/\n\n#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \\\n   (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))\n//\n// For the following code we get several warnings along the lines of: \n// \n// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant \n// \n// So we declare this a system header to suppress these warnings. \n//\n#if defined(__GNUC__) && (__GNUC__ >= 4) \n#pragma GCC system_header \n#endif \n\n#include <limits.h>\n# define BOOST__STDC_CONSTANT_MACROS_DEFINED\n# if defined(BOOST_HAS_MS_INT64)\n//\n// Borland/Intel/Microsoft compilers have width specific suffixes:\n//\n#ifndef INT8_C\n#  define INT8_C(value)     value##i8\n#endif\n#ifndef INT16_C\n#  define INT16_C(value)    value##i16\n#endif\n#ifndef INT32_C\n#  define INT32_C(value)    value##i32\n#endif\n#ifndef INT64_C\n#  define INT64_C(value)    value##i64\n#endif\n#  ifdef __BORLANDC__\n    // Borland bug: appending ui8 makes the type a signed char\n#   define UINT8_C(value)    static_cast<unsigned char>(value##u)\n#  else\n#   define UINT8_C(value)    value##ui8\n#  endif\n#ifndef UINT16_C\n#  define UINT16_C(value)   value##ui16\n#endif\n#ifndef UINT32_C\n#  define UINT32_C(value)   value##ui32\n#endif\n#ifndef UINT64_C\n#  define UINT64_C(value)   value##ui64\n#endif\n#ifndef INTMAX_C\n#  define INTMAX_C(value)   value##i64\n#  define UINTMAX_C(value)  value##ui64\n#endif\n\n# else\n//  do it the old fashioned way:\n\n//  8-bit types  ------------------------------------------------------------//\n\n#  if (UCHAR_MAX == 0xff) && !defined(INT8_C)\n#   define INT8_C(value) static_cast<boost::int8_t>(value)\n#   define UINT8_C(value) static_cast<boost::uint8_t>(value##u)\n#  endif\n\n//  16-bit types  -----------------------------------------------------------//\n\n#  if (USHRT_MAX == 0xffff) && !defined(INT16_C)\n#   define INT16_C(value) static_cast<boost::int16_t>(value)\n#   define UINT16_C(value) static_cast<boost::uint16_t>(value##u)\n#  endif\n\n//  32-bit types  -----------------------------------------------------------//\n#ifndef INT32_C\n#  if (UINT_MAX == 0xffffffff)\n#   define INT32_C(value) value\n#   define UINT32_C(value) value##u\n#  elif ULONG_MAX == 0xffffffff\n#   define INT32_C(value) value##L\n#   define UINT32_C(value) value##uL\n#  endif\n#endif\n\n//  64-bit types + intmax_t and uintmax_t  ----------------------------------//\n#ifndef INT64_C\n#  if defined(BOOST_HAS_LONG_LONG) && \\\n    (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_LLONG_MAX))\n\n#    if defined(__hpux)\n        // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) ||  \\\n        (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) ||  \\\n        (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \\\n        (defined(_LLONG_MAX) && _LLONG_MAX == 18446744073709551615ULL)\n\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  elif ULONG_MAX != 0xffffffff\n\n#    if ULONG_MAX == 18446744073709551615U // 2**64 - 1\n#       define INT64_C(value) value##L\n#       define UINT64_C(value) value##uL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  elif defined(BOOST_HAS_LONG_LONG)\n     // Usual macros not defined, work things out for ourselves:\n#    if(~0uLL == 18446744073709551615ULL)\n#       define INT64_C(value) value##LL\n#       define UINT64_C(value) value##uLL\n#    else\n#       error defaults not correct; you must hand modify boost/cstdint.hpp\n#    endif\n#  else\n#    error defaults not correct; you must hand modify boost/cstdint.hpp\n#  endif\n\n#  ifdef BOOST_NO_INT64_T\n#   define INTMAX_C(value) INT32_C(value)\n#   define UINTMAX_C(value) UINT32_C(value)\n#  else\n#   define INTMAX_C(value) INT64_C(value)\n#   define UINTMAX_C(value) UINT64_C(value)\n#  endif\n#endif\n# endif // Borland/Microsoft specific width suffixes\n\n#endif // INT#_C macros.\n\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/cstdlib.hpp",
    "content": "//  boost/cstdlib.hpp header  ------------------------------------------------//\n\n//  Copyright Beman Dawes 2001.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility/cstdlib.html for documentation.\n\n//  Revision History\n//   26 Feb 01  Initial version (Beman Dawes)\n\n#ifndef BOOST_CSTDLIB_HPP\n#define BOOST_CSTDLIB_HPP\n\n#include <cstdlib>\n\nnamespace boost\n{\n   //  The intent is to propose the following for addition to namespace std\n   //  in the C++ Standard Library, and to then deprecate EXIT_SUCCESS and\n   //  EXIT_FAILURE.  As an implementation detail, this header defines the\n   //  new constants in terms of EXIT_SUCCESS and EXIT_FAILURE.  In a new\n   //  standard, the constants would be implementation-defined, although it\n   //  might be worthwhile to \"suggest\" (which a standard is allowed to do)\n   //  values of 0 and 1 respectively.\n\n   //  Rationale for having multiple failure values: some environments may\n   //  wish to distinguish between different classes of errors.\n   //  Rationale for choice of values: programs often use values < 100 for\n   //  their own error reporting.  Values > 255 are sometimes reserved for\n   //  system detected errors.  200/201 were suggested to minimize conflict.\n\n   const int exit_success = EXIT_SUCCESS;  // implementation-defined value\n   const int exit_failure = EXIT_FAILURE;  // implementation-defined value\n   const int exit_exception_failure = 200; // otherwise uncaught exception\n   const int exit_test_failure = 201;      // report_error or\n                                           //  report_critical_error called.\n}\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/current_function.hpp",
    "content": "#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/current_function.hpp - BOOST_CURRENT_FUNCTION\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/utility/current_function.html\n//\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void current_function_helper()\n{\n\n#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)\n\n# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__\n\n#elif defined(__DMC__) && (__DMC__ >= 0x810)\n\n# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__\n\n#elif defined(__FUNCSIG__)\n\n# define BOOST_CURRENT_FUNCTION __FUNCSIG__\n\n#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))\n\n# define BOOST_CURRENT_FUNCTION __FUNCTION__\n\n#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)\n\n# define BOOST_CURRENT_FUNCTION __FUNC__\n\n#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)\n\n# define BOOST_CURRENT_FUNCTION __func__\n\n#else\n\n# define BOOST_CURRENT_FUNCTION \"(unknown)\"\n\n#endif\n\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/binary_search.hpp",
    "content": "// Copyright (c)  2000 David Abrahams. \n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n// \n// Copyright (c) 1994\n// Hewlett-Packard Company\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.  Hewlett-Packard Company 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// Copyright (c) 1996\n// Silicon Graphics Computer Systems, Inc.\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.  Silicon Graphics 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#ifndef BINARY_SEARCH_DWA_122600_H_\n# define BINARY_SEARCH_DWA_122600_H_\n\n# include <boost/detail/iterator.hpp>\n# include <utility>\n\nnamespace boost { namespace detail {\n\ntemplate <class ForwardIter, class Tp>\nForwardIter lower_bound(ForwardIter first, ForwardIter last,\n                             const Tp& val) \n{\n    typedef detail::iterator_traits<ForwardIter> traits;\n    \n    typename traits::difference_type len = boost::detail::distance(first, last);\n    typename traits::difference_type half;\n    ForwardIter middle;\n\n    while (len > 0) {\n      half = len >> 1;\n      middle = first;\n      std::advance(middle, half);\n      if (*middle < val) {\n        first = middle;\n        ++first;\n        len = len - half - 1;\n      }\n      else\n        len = half;\n    }\n    return first;\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nForwardIter lower_bound(ForwardIter first, ForwardIter last,\n                              const Tp& val, Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(*middle, val)) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else\n      len = half;\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp>\nForwardIter upper_bound(ForwardIter first, ForwardIter last,\n                           const Tp& val)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (val < *middle)\n      len = half;\n    else {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nForwardIter upper_bound(ForwardIter first, ForwardIter last,\n                           const Tp& val, Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(val, *middle))\n      len = half;\n    else {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n  }\n  return first;\n}\n\ntemplate <class ForwardIter, class Tp>\nstd::pair<ForwardIter, ForwardIter>\nequal_range(ForwardIter first, ForwardIter last, const Tp& val)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle, left, right;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (*middle < val) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else if (val < *middle)\n      len = half;\n    else {\n      left = boost::detail::lower_bound(first, middle, val);\n      std::advance(first, len);\n      right = boost::detail::upper_bound(++middle, first, val);\n      return std::pair<ForwardIter, ForwardIter>(left, right);\n    }\n  }\n  return std::pair<ForwardIter, ForwardIter>(first, first);\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nstd::pair<ForwardIter, ForwardIter>\nequal_range(ForwardIter first, ForwardIter last, const Tp& val,\n              Compare comp)\n{\n  typedef detail::iterator_traits<ForwardIter> traits;\n\n  typename traits::difference_type len = boost::detail::distance(first, last);\n  typename traits::difference_type half;\n  ForwardIter middle, left, right;\n\n  while (len > 0) {\n    half = len >> 1;\n    middle = first;\n    std::advance(middle, half);\n    if (comp(*middle, val)) {\n      first = middle;\n      ++first;\n      len = len - half - 1;\n    }\n    else if (comp(val, *middle))\n      len = half;\n    else {\n      left = boost::detail::lower_bound(first, middle, val, comp);\n      std::advance(first, len);\n      right = boost::detail::upper_bound(++middle, first, val, comp);\n      return std::pair<ForwardIter, ForwardIter>(left, right);\n    }\n  }\n  return std::pair<ForwardIter, ForwardIter>(first, first);\n}           \n\ntemplate <class ForwardIter, class Tp>\nbool binary_search(ForwardIter first, ForwardIter last,\n                   const Tp& val) {\n  ForwardIter i = boost::detail::lower_bound(first, last, val);\n  return i != last && !(val < *i);\n}\n\ntemplate <class ForwardIter, class Tp, class Compare>\nbool binary_search(ForwardIter first, ForwardIter last,\n                   const Tp& val,\n                   Compare comp) {\n  ForwardIter i = boost::detail::lower_bound(first, last, val, comp);\n  return i != last && !comp(val, *i);\n}\n\n}} // namespace boost::detail\n\n#endif // BINARY_SEARCH_DWA_122600_H_\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/call_traits.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/utility for most recent version including documentation.\n\n// call_traits: defines typedefs for function usage\n// (see libs/utility/call_traits.htm)\n\n/* Release notes:\n   23rd July 2000:\n      Fixed array specialization. (JM)\n      Added Borland specific fixes for reference types\n      (issue raised by Steve Cleary).\n*/\n\n#ifndef BOOST_DETAIL_CALL_TRAITS_HPP\n#define BOOST_DETAIL_CALL_TRAITS_HPP\n\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n#include <cstddef>\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost{\n\nnamespace detail{\n\ntemplate <typename T, bool small_>\nstruct ct_imp2\n{\n   typedef const T& param_type;\n};\n\ntemplate <typename T>\nstruct ct_imp2<T, true>\n{\n   typedef const T param_type;\n};\n\ntemplate <typename T, bool isp, bool b1, bool b2>\nstruct ct_imp\n{\n   typedef const T& param_type;\n};\n\ntemplate <typename T, bool isp, bool b2>\nstruct ct_imp<T, isp, true, b2>\n{\n   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;\n};\n\ntemplate <typename T, bool isp, bool b1>\nstruct ct_imp<T, isp, b1, true>\n{\n   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;\n};\n\ntemplate <typename T, bool b1, bool b2>\nstruct ct_imp<T, true, b1, b2>\n{\n   typedef const T param_type;\n};\n\n}\n\ntemplate <typename T>\nstruct call_traits\n{\npublic:\n   typedef T value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   //\n   // C++ Builder workaround: we should be able to define a compile time\n   // constant and pass that as a single template parameter to ct_imp<T,bool>,\n   // however compiler bugs prevent this - instead pass three bool's to\n   // ct_imp<T,bool,bool,bool> and add an extra partial specialisation\n   // of ct_imp to handle the logic. (JM)\n   typedef typename boost::detail::ct_imp<\n      T,\n      ::boost::is_pointer<T>::value,\n      ::boost::is_arithmetic<T>::value,\n      ::boost::is_enum<T>::value\n   >::param_type param_type;\n};\n\ntemplate <typename T>\nstruct call_traits<T&>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\n\n#if BOOST_WORKAROUND( __BORLANDC__,  < 0x5A0 )\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\ntemplate <typename T>\nstruct call_traits<T&const>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\ntemplate <typename T>\nstruct call_traits<T&volatile>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\ntemplate <typename T>\nstruct call_traits<T&const volatile>\n{\n   typedef T& value_type;\n   typedef T& reference;\n   typedef const T& const_reference;\n   typedef T& param_type;  // hh removed const\n};\n\ntemplate <typename T>\nstruct call_traits< T * >\n{\n   typedef T * value_type;\n   typedef T * & reference;\n   typedef T * const & const_reference;\n   typedef T * const param_type;  // hh removed const\n};\n#endif\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <typename T, std::size_t N>\nstruct call_traits<T [N]>\n{\nprivate:\n   typedef T array_type[N];\npublic:\n   // degrades array to pointer:\n   typedef const T* value_type;\n   typedef array_type& reference;\n   typedef const array_type& const_reference;\n   typedef const T* const param_type;\n};\n\ntemplate <typename T, std::size_t N>\nstruct call_traits<const T [N]>\n{\nprivate:\n   typedef const T array_type[N];\npublic:\n   // degrades array to pointer:\n   typedef const T* value_type;\n   typedef array_type& reference;\n   typedef const array_type& const_reference;\n   typedef const T* const param_type;\n};\n#endif\n\n}\n\n#endif // BOOST_DETAIL_CALL_TRAITS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/endian.hpp",
    "content": "// Copyright 2005 Caleb Epstein\n// Copyright 2006 John Maddock\n// Copyright 2010 Rene Rivera\n// Distributed under the Boost Software License, Version 1.0. (See accompany-\n// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n/*\n * Copyright (c) 1997\n * Silicon Graphics Computer Systems, Inc.\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.  Silicon Graphics 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 * Copyright notice reproduced from <boost/detail/limits.hpp>, from\n * which this code was originally taken.\n *\n * Modified by Caleb Epstein to use <endian.h> with GNU libc and to\n * defined the BOOST_ENDIAN macro.\n */\n\n#ifndef BOOST_DETAIL_ENDIAN_HPP\n#define BOOST_DETAIL_ENDIAN_HPP\n\n// GNU libc offers the helpful header <endian.h> which defines\n// __BYTE_ORDER\n\n#if defined (__GLIBC__) || defined(__ANDROID__)\n# include <endian.h>\n# if (__BYTE_ORDER == __LITTLE_ENDIAN)\n#  define BOOST_LITTLE_ENDIAN\n# elif (__BYTE_ORDER == __BIG_ENDIAN)\n#  define BOOST_BIG_ENDIAN\n# elif (__BYTE_ORDER == __PDP_ENDIAN)\n#  define BOOST_PDP_ENDIAN\n# else\n#  error Unknown machine endianness detected.\n# endif\n# define BOOST_BYTE_ORDER __BYTE_ORDER\n#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \\\n    defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \\\n    defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN)\n# define BOOST_BIG_ENDIAN\n# define BOOST_BYTE_ORDER 4321\n#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \\\n    defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) || \\\n    defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN)\n# define BOOST_LITTLE_ENDIAN\n# define BOOST_BYTE_ORDER 1234\n#elif defined(__sparc) || defined(__sparc__) \\\n   || defined(_POWER) || defined(__powerpc__) \\\n   || defined(__ppc__) || defined(__hpux) || defined(__hppa) \\\n   || defined(_MIPSEB) || defined(_POWER) \\\n   || defined(__s390__)\n# define BOOST_BIG_ENDIAN\n# define BOOST_BYTE_ORDER 4321\n#elif defined(__i386__) || defined(__alpha__) \\\n   || defined(__ia64) || defined(__ia64__) \\\n   || defined(_M_IX86) || defined(_M_IA64) \\\n   || defined(_M_ALPHA) || defined(__amd64) \\\n   || defined(__amd64__) || defined(_M_AMD64) \\\n   || defined(__x86_64) || defined(__x86_64__) \\\n   || defined(_M_X64) || defined(__bfin__)\n\n# define BOOST_LITTLE_ENDIAN\n# define BOOST_BYTE_ORDER 1234\n#else\n# error The file boost/detail/endian.hpp needs to be set up for your CPU type.\n#endif\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/fenv.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2010      Bryce Lelbach\n\n    Distributed under the Boost Software License, Version 1.0. (See accompanying\n    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n=============================================================================*/\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_NO_FENV_H)\n  #error This platform does not have a floating point environment\n#endif\n\n#if !defined(BOOST_DETAIL_FENV_HPP)\n#define BOOST_DETAIL_FENV_HPP\n\n/* If we're using clang + glibc, we have to get hacky. \n * See http://llvm.org/bugs/show_bug.cgi?id=6907 */\n#if defined(__clang__)       &&  (__clang_major__ < 3) &&    \\\n    defined(__GNU_LIBRARY__) && /* up to version 5 */ \\\n    defined(__GLIBC__) &&         /* version 6 + */ \\\n    !defined(_FENV_H)\n  #define _FENV_H\n\n  #include <features.h>\n  #include <bits/fenv.h>\n\n  extern \"C\" {\n    extern int fegetexceptflag (fexcept_t*, int) __THROW;\n    extern int fesetexceptflag (__const fexcept_t*, int) __THROW;\n    extern int feclearexcept (int) __THROW;\n    extern int feraiseexcept (int) __THROW;\n    extern int fetestexcept (int) __THROW;\n    extern int fegetround (void) __THROW;\n    extern int fesetround (int) __THROW;\n    extern int fegetenv (fenv_t*) __THROW;\n    extern int fesetenv (__const fenv_t*) __THROW;\n    extern int feupdateenv (__const fenv_t*) __THROW;\n    extern int feholdexcept (fenv_t*) __THROW;\n\n    #ifdef __USE_GNU\n      extern int feenableexcept (int) __THROW;\n      extern int fedisableexcept (int) __THROW;\n      extern int fegetexcept (void) __THROW;\n    #endif\n  }\n\n  namespace std { namespace tr1 {\n    using ::fenv_t;\n    using ::fexcept_t;\n    using ::fegetexceptflag;\n    using ::fesetexceptflag;\n    using ::feclearexcept;\n    using ::feraiseexcept;\n    using ::fetestexcept;\n    using ::fegetround;\n    using ::fesetround;\n    using ::fegetenv;\n    using ::fesetenv;\n    using ::feupdateenv;\n    using ::feholdexcept;\n  } }\n\n#else /* if we're not using GNU's C stdlib, fenv.h should work with clang */\n  #if defined(__SUNPRO_CC) /* lol suncc */\n    #include <stdio.h>\n  #endif\n  \n  #include <fenv.h>\n\n#endif\n\n#endif /* BOOST_DETAIL_FENV_HPP */\n \n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/indirect_traits.hpp",
    "content": "// Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef INDIRECT_TRAITS_DWA2002131_HPP\n# define INDIRECT_TRAITS_DWA2002131_HPP\n# include <boost/type_traits/is_function.hpp>\n# include <boost/type_traits/is_reference.hpp>\n# include <boost/type_traits/is_pointer.hpp>\n# include <boost/type_traits/is_class.hpp>\n# include <boost/type_traits/is_const.hpp>\n# include <boost/type_traits/is_volatile.hpp>\n# include <boost/type_traits/is_member_function_pointer.hpp>\n# include <boost/type_traits/is_member_pointer.hpp>\n# include <boost/type_traits/remove_cv.hpp>\n# include <boost/type_traits/remove_reference.hpp>\n# include <boost/type_traits/remove_pointer.hpp>\n\n# include <boost/type_traits/detail/ice_and.hpp>\n# include <boost/detail/workaround.hpp>\n\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/bool.hpp>\n# include <boost/mpl/and.hpp>\n# include <boost/mpl/not.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n\n#  ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/detail/is_function_ref_tester.hpp>\n#  endif \n\nnamespace boost { namespace detail {\n\nnamespace indirect_traits {\n\n#  ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate <class T>\nstruct is_reference_to_const : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_const<T const&> : mpl::true_\n{\n};\n\n#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround\ntemplate<class T>\nstruct is_reference_to_const<T const volatile&> : mpl::true_\n{\n};\n#   endif \n\ntemplate <class T>\nstruct is_reference_to_function : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_function<T&> : is_function<T>\n{\n};\n\ntemplate <class T>\nstruct is_pointer_to_function : mpl::false_\n{\n};\n\n// There's no such thing as a pointer-to-cv-function, so we don't need\n// specializations for those\ntemplate <class T>\nstruct is_pointer_to_function<T*> : is_function<T>\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer_impl : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer_impl<T&>\n    : is_member_function_pointer<typename remove_cv<T>::type>\n{\n};\n\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer\n    : is_reference_to_member_function_pointer_impl<T>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))\n};\n\ntemplate <class T>\nstruct is_reference_to_function_pointer_aux\n    : mpl::and_<\n          is_reference<T>\n        , is_pointer_to_function<\n              typename remove_cv<\n                  typename remove_reference<T>::type\n              >::type\n          >\n      >\n{\n    // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those\n};\n\ntemplate <class T>\nstruct is_reference_to_function_pointer\n    : mpl::if_<\n          is_reference_to_function<T>\n        , mpl::false_\n        , is_reference_to_function_pointer_aux<T>\n     >::type\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_non_const\n    : mpl::and_<\n          is_reference<T>\n        , mpl::not_<\n             is_reference_to_const<T>\n          >\n      >\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_volatile : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_volatile<T volatile&> : mpl::true_\n{\n};\n\n#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround\ntemplate <class T>\nstruct is_reference_to_volatile<T const volatile&> : mpl::true_\n{\n};\n#   endif \n\n\ntemplate <class T>\nstruct is_reference_to_pointer : mpl::false_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T*&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* const&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* volatile&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_pointer<T* const volatile&> : mpl::true_\n{\n};\n\ntemplate <class T>\nstruct is_reference_to_class\n    : mpl::and_<\n          is_reference<T>\n        , is_class<\n              typename remove_cv<\n                  typename remove_reference<T>::type\n              >::type\n          >\n      >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))\n};\n\ntemplate <class T>\nstruct is_pointer_to_class\n    : mpl::and_<\n          is_pointer<T>\n        , is_class<\n              typename remove_cv<\n                  typename remove_pointer<T>::type\n              >::type\n          >\n      >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))\n};\n\n#  else\n\nusing namespace boost::detail::is_function_ref_tester_;\n\ntypedef char (&inner_yes_type)[3];\ntypedef char (&inner_no_type)[2];\ntypedef char (&outer_no_type)[1];\n\ntemplate <typename V>\nstruct is_const_help\n{\n    typedef typename mpl::if_<\n          is_const<V>\n        , inner_yes_type\n        , inner_no_type\n        >::type type;\n};\n\ntemplate <typename V>\nstruct is_volatile_help\n{\n    typedef typename mpl::if_<\n          is_volatile<V>\n        , inner_yes_type\n        , inner_no_type\n        >::type type;\n};\n\ntemplate <typename V>\nstruct is_pointer_help\n{\n    typedef typename mpl::if_<\n          is_pointer<V>\n        , inner_yes_type\n        , inner_no_type\n        >::type type;\n};\n\ntemplate <typename V>\nstruct is_class_help\n{\n    typedef typename mpl::if_<\n          is_class<V>\n        , inner_yes_type\n        , inner_no_type\n        >::type type;\n};\n\ntemplate <class T>\nstruct is_reference_to_function_aux\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(detail::is_function_ref_tester(t,0)) == sizeof(::boost::type_traits::yes_type));\n    typedef mpl::bool_<value> type;\n };\n\ntemplate <class T>\nstruct is_reference_to_function\n    : mpl::if_<is_reference<T>, is_reference_to_function_aux<T>, mpl::bool_<false> >::type\n{\n};\n\ntemplate <class T>\nstruct is_pointer_to_function_aux\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value\n        = sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type));\n    typedef mpl::bool_<value> type;\n};\n\ntemplate <class T>\nstruct is_pointer_to_function\n    : mpl::if_<is_pointer<T>, is_pointer_to_function_aux<T>, mpl::bool_<false> >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T))\n};\n\nstruct false_helper1\n{\n    template <class T>\n    struct apply : mpl::false_\n    {\n    };\n};\n\ntemplate <typename V>\ntypename is_const_help<V>::type reference_to_const_helper(V&);    \nouter_no_type\nreference_to_const_helper(...);\n\nstruct true_helper1\n{\n    template <class T>\n    struct apply\n    {\n        static T t;\n        BOOST_STATIC_CONSTANT(\n            bool, value\n            = sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type));\n        typedef mpl::bool_<value> type;\n    };\n};\n\ntemplate <bool ref = true>\nstruct is_reference_to_const_helper1 : true_helper1\n{\n};\n\ntemplate <>\nstruct is_reference_to_const_helper1<false> : false_helper1\n{\n};\n\n\ntemplate <class T>\nstruct is_reference_to_const\n    : is_reference_to_const_helper1<is_reference<T>::value>::template apply<T>\n{\n};\n\n\ntemplate <bool ref = true>\nstruct is_reference_to_non_const_helper1\n{\n    template <class T>\n    struct apply\n    {\n        static T t;\n        BOOST_STATIC_CONSTANT(\n            bool, value\n            = sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type));\n        \n        typedef mpl::bool_<value> type;\n    };\n};\n\ntemplate <>\nstruct is_reference_to_non_const_helper1<false> : false_helper1\n{\n};\n\n\ntemplate <class T>\nstruct is_reference_to_non_const\n    : is_reference_to_non_const_helper1<is_reference<T>::value>::template apply<T>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T))\n};\n\n\ntemplate <typename V>\ntypename is_volatile_help<V>::type reference_to_volatile_helper(V&);    \nouter_no_type\nreference_to_volatile_helper(...);\n\ntemplate <bool ref = true>\nstruct is_reference_to_volatile_helper1\n{\n    template <class T>\n    struct apply\n    {\n        static T t;\n        BOOST_STATIC_CONSTANT(\n            bool, value\n            = sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type));\n        typedef mpl::bool_<value> type;\n    };\n};\n\ntemplate <>\nstruct is_reference_to_volatile_helper1<false> : false_helper1\n{\n};\n\n\ntemplate <class T>\nstruct is_reference_to_volatile\n    : is_reference_to_volatile_helper1<is_reference<T>::value>::template apply<T>\n{\n};\n\ntemplate <typename V>\ntypename is_pointer_help<V>::type reference_to_pointer_helper(V&);\nouter_no_type reference_to_pointer_helper(...);\n\ntemplate <class T>\nstruct reference_to_pointer_impl\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value\n        = (sizeof((reference_to_pointer_helper)(t)) == sizeof(inner_yes_type))\n        );\n    \n    typedef mpl::bool_<value> type;\n};\n    \ntemplate <class T>\nstruct is_reference_to_pointer\n  : mpl::eval_if<is_reference<T>, reference_to_pointer_impl<T>, mpl::false_>::type\n{   \n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T))\n};\n\ntemplate <class T>\nstruct is_reference_to_function_pointer\n  : mpl::eval_if<is_reference<T>, is_pointer_to_function_aux<T>, mpl::false_>::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T))\n};\n\n\ntemplate <class T>\nstruct is_member_function_pointer_help\n    : mpl::if_<is_member_function_pointer<T>, inner_yes_type, inner_no_type>\n{};\n\ntemplate <typename V>\ntypename is_member_function_pointer_help<V>::type member_function_pointer_helper(V&);\nouter_no_type member_function_pointer_helper(...);\n\ntemplate <class T>\nstruct is_pointer_to_member_function_aux\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value\n        = sizeof((member_function_pointer_helper)(t)) == sizeof(inner_yes_type));\n    typedef mpl::bool_<value> type;\n};\n\ntemplate <class T>\nstruct is_reference_to_member_function_pointer\n    : mpl::if_<\n        is_reference<T>\n        , is_pointer_to_member_function_aux<T>\n        , mpl::bool_<false>\n     >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))\n};\n\ntemplate <typename V>\ntypename is_class_help<V>::type reference_to_class_helper(V const volatile&);\nouter_no_type reference_to_class_helper(...);\n\ntemplate <class T>\nstruct is_reference_to_class\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value\n        = (is_reference<T>::value\n           & (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type)))\n        );\n    typedef mpl::bool_<value> type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))\n};\n\ntemplate <typename V>\ntypename is_class_help<V>::type pointer_to_class_helper(V const volatile*);\nouter_no_type pointer_to_class_helper(...);\n\ntemplate <class T>\nstruct is_pointer_to_class\n{\n    static T t;\n    BOOST_STATIC_CONSTANT(\n        bool, value\n        = (is_pointer<T>::value\n           && sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type))\n        );\n    typedef mpl::bool_<value> type;\n};\n#  endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \n\n}\n\nusing namespace indirect_traits;\n\n}} // namespace boost::python::detail\n\n#endif // INDIRECT_TRAITS_DWA2002131_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// Boost versions of\n//\n//    std::iterator_traits<>::iterator_category\n//    std::iterator_traits<>::difference_type\n//    std::distance()\n//\n// ...for all compilers and iterators\n//\n// Additionally, if X is a pointer\n//    std::iterator_traits<X>::pointer\n\n// Otherwise, if partial specialization is supported or X is not a pointer\n//    std::iterator_traits<X>::value_type\n//    std::iterator_traits<X>::pointer\n//    std::iterator_traits<X>::reference\n//\n// See http://www.boost.org for most recent version including documentation.\n\n// Revision History\n// 04 Mar 2001 - More attempted fixes for Intel C++ (David Abrahams)\n// 03 Mar 2001 - Put all implementation into namespace\n//               boost::detail::iterator_traits_. Some progress made on fixes\n//               for Intel compiler. (David Abrahams)\n// 02 Mar 2001 - Changed BOOST_MSVC to BOOST_MSVC_STD_ITERATOR in a few\n//               places. (Jeremy Siek)\n// 19 Feb 2001 - Improved workarounds for stock MSVC6; use yes_type and\n//               no_type from type_traits.hpp; stopped trying to remove_cv\n//               before detecting is_pointer, in honor of the new type_traits\n//               semantics. (David Abrahams)\n// 13 Feb 2001 - Make it work with nearly all standard-conforming iterators\n//               under raw VC6. The one category remaining which will fail is\n//               that of iterators derived from std::iterator but not\n//               boost::iterator and which redefine difference_type.\n// 11 Feb 2001 - Clean away code which can never be used (David Abrahams)\n// 09 Feb 2001 - Always have a definition for each traits member, even if it\n//               can't be properly deduced. These will be incomplete types in\n//               some cases (undefined<void>), but it helps suppress MSVC errors\n//               elsewhere (David Abrahams)\n// 07 Feb 2001 - Support for more of the traits members where possible, making\n//               this useful as a replacement for std::iterator_traits<T> when\n//               used as a default template parameter.\n// 06 Feb 2001 - Removed useless #includes of standard library headers\n//               (David Abrahams)\n\n#ifndef ITERATOR_DWA122600_HPP_\n# define ITERATOR_DWA122600_HPP_\n\n# include <boost/config.hpp>\n# include <iterator>\n\n// STLPort 4.0 and betas have a bug when debugging is enabled and there is no\n// partial specialization: instead of an iterator_category typedef, the standard\n// container iterators have _Iterator_category.\n//\n// Also, whether debugging is enabled or not, there is a broken specialization\n// of std::iterator<output_iterator_tag,void,void,void,void> which has no\n// typedefs but iterator_category.\n# if defined(__SGI_STL_PORT)\n\n#  if (__SGI_STL_PORT <= 0x410) && !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && defined(__STL_DEBUG)\n#   define BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF\n#  endif\n\n#  define BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION\n\n# endif // STLPort <= 4.1b4 && no partial specialization\n\n# if !defined(BOOST_NO_STD_ITERATOR_TRAITS)             \\\n  && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n  && !defined(BOOST_MSVC_STD_ITERATOR)\n    \nnamespace boost { namespace detail {\n\n// Define a new template so it can be specialized\ntemplate <class Iterator>\nstruct iterator_traits\n    : std::iterator_traits<Iterator>\n{};\nusing std::distance;\n\n}} // namespace boost::detail\n\n# else\n\n#  if  !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)  \\\n    && !defined(BOOST_MSVC_STD_ITERATOR)\n\n// This is the case where everything conforms except BOOST_NO_STD_ITERATOR_TRAITS\n\nnamespace boost { namespace detail {\n\n// Rogue Wave Standard Library fools itself into thinking partial\n// specialization is missing on some platforms (e.g. Sun), so fails to\n// supply iterator_traits!\ntemplate <class Iterator>\nstruct iterator_traits\n{\n    typedef typename Iterator::value_type value_type;\n    typedef typename Iterator::reference reference;\n    typedef typename Iterator::pointer pointer;\n    typedef typename Iterator::difference_type difference_type;\n    typedef typename Iterator::iterator_category iterator_category;\n};\n\ntemplate <class T>\nstruct iterator_traits<T*>\n{\n    typedef T value_type;\n    typedef T& reference;\n    typedef T* pointer;\n    typedef std::ptrdiff_t difference_type;\n    typedef std::random_access_iterator_tag iterator_category;\n};\n\ntemplate <class T>\nstruct iterator_traits<T const*>\n{\n    typedef T value_type;\n    typedef T const& reference;\n    typedef T const* pointer;\n    typedef std::ptrdiff_t difference_type;\n    typedef std::random_access_iterator_tag iterator_category;\n};\n\n}} // namespace boost::detail\n\n#  else\n\n# include <boost/type_traits/remove_const.hpp>\n# include <boost/type_traits/detail/yes_no_type.hpp>\n# include <boost/type_traits/is_pointer.hpp>\n\n# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#  include <boost/type_traits/is_same.hpp>\n#  include <boost/type_traits/remove_pointer.hpp>\n# endif\n# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION\n#  include <boost/type_traits/is_base_and_derived.hpp>\n# endif\n\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/has_xxx.hpp>\n# include <cstddef>\n\n// should be the last #include\n# include \"boost/type_traits/detail/bool_trait_def.hpp\"\n\nnamespace boost { namespace detail {\n\nBOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)\nBOOST_MPL_HAS_XXX_TRAIT_DEF(reference)\nBOOST_MPL_HAS_XXX_TRAIT_DEF(pointer)\nBOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type)\nBOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)\n\n// is_mutable_iterator --\n//\n//   A metafunction returning true iff T is a mutable iterator type\n//   with a nested value_type. Will only work portably with iterators\n//   whose operator* returns a reference, but that seems to be OK for\n//   the iterators supplied by Dinkumware. Some input iterators may\n//   compile-time if they arrive here, and if the compiler is strict\n//   about not taking the address of an rvalue.\n\n// This one detects ordinary mutable iterators - the result of\n// operator* is convertible to the value_type.\ntemplate <class T>\ntype_traits::yes_type is_mutable_iterator_helper(T const*, BOOST_DEDUCED_TYPENAME T::value_type*);\n\n// Since you can't take the address of an rvalue, the guts of\n// is_mutable_iterator_impl will fail if we use &*t directly.  This\n// makes sure we can still work with non-lvalue iterators.\ntemplate <class T> T* mutable_iterator_lvalue_helper(T& x);\nint mutable_iterator_lvalue_helper(...);\n\n\n// This one detects output iterators such as ostream_iterator which\n// return references to themselves.\ntemplate <class T>\ntype_traits::yes_type is_mutable_iterator_helper(T const*, T const*);\n\ntype_traits::no_type is_mutable_iterator_helper(...);\n\ntemplate <class T>\nstruct is_mutable_iterator_impl\n{\n    static T t;\n    \n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(\n            detail::is_mutable_iterator_helper(\n                (T*)0\n              , mutable_iterator_lvalue_helper(*t) // like &*t\n            ))\n        == sizeof(type_traits::yes_type)\n    );\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(\n    is_mutable_iterator,T,::boost::detail::is_mutable_iterator_impl<T>::value)\n\n\n// is_full_iterator_traits --\n//\n//   A metafunction returning true iff T has all the requisite nested\n//   types to satisfy the requirements for a fully-conforming\n//   iterator_traits implementation.\ntemplate <class T>\nstruct is_full_iterator_traits_impl\n{\n    enum { value = \n           has_value_type<T>::value \n           & has_reference<T>::value \n           & has_pointer<T>::value \n           & has_difference_type<T>::value\n           & has_iterator_category<T>::value\n    };\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(\n    is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl<T>::value)\n\n\n#   ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF\nBOOST_MPL_HAS_XXX_TRAIT_DEF(_Iterator_category)\n    \n// is_stlport_40_debug_iterator --\n//\n//   A metafunction returning true iff T has all the requisite nested\n//   types to satisfy the requirements of an STLPort 4.0 debug iterator\n//   iterator_traits implementation.\ntemplate <class T>\nstruct is_stlport_40_debug_iterator_impl\n{\n    enum { value = \n           has_value_type<T>::value \n           & has_reference<T>::value \n           & has_pointer<T>::value \n           & has_difference_type<T>::value\n           & has__Iterator_category<T>::value\n    };\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(\n    is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl<T>::value)\n\ntemplate <class T>\nstruct stlport_40_debug_iterator_traits\n{\n    typedef typename T::value_type value_type;\n    typedef typename T::reference reference;\n    typedef typename T::pointer pointer;\n    typedef typename T::difference_type difference_type;\n    typedef typename T::_Iterator_category iterator_category;\n};\n#   endif // BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF \n\ntemplate <class T> struct pointer_iterator_traits;\n\n#   ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate <class T>\nstruct pointer_iterator_traits<T*>\n{\n    typedef typename remove_const<T>::type value_type;\n    typedef T* pointer;\n    typedef T& reference;\n    typedef std::random_access_iterator_tag iterator_category;\n    typedef std::ptrdiff_t difference_type;\n};\n#   else\n\n// In case of no template partial specialization, and if T is a\n// pointer, iterator_traits<T>::value_type can still be computed.  For\n// some basic types, remove_pointer is manually defined in\n// type_traits/broken_compiler_spec.hpp. For others, do it yourself.\n\ntemplate<class P> class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee;\n\ntemplate<class P>\nstruct pointer_value_type\n  : mpl::if_<\n        is_same<P, typename remove_pointer<P>::type>\n      , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>\n      , typename remove_const<\n            typename remove_pointer<P>::type\n        >::type\n    >\n{\n};\n\n\ntemplate<class P>\nstruct pointer_reference\n  : mpl::if_<\n        is_same<P, typename remove_pointer<P>::type>\n      , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>\n      , typename remove_pointer<P>::type&\n    >\n{\n};\n\ntemplate <class T>\nstruct pointer_iterator_traits\n{\n    typedef T pointer;\n    typedef std::random_access_iterator_tag iterator_category;\n    typedef std::ptrdiff_t difference_type;\n\n    typedef typename pointer_value_type<T>::type value_type;\n    typedef typename pointer_reference<T>::type reference;\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n// We'll sort iterator types into one of these classifications, from which we\n// can determine the difference_type, pointer, reference, and value_type\ntemplate <class Iterator>\nstruct standard_iterator_traits\n{\n    typedef typename Iterator::difference_type difference_type;\n    typedef typename Iterator::value_type value_type;\n    typedef typename Iterator::pointer pointer;\n    typedef typename Iterator::reference reference;\n    typedef typename Iterator::iterator_category iterator_category;\n};\n\ntemplate <class Iterator>\nstruct msvc_stdlib_mutable_traits\n    : std::iterator_traits<Iterator>\n{\n    typedef typename std::iterator_traits<Iterator>::distance_type difference_type;\n    typedef typename std::iterator_traits<Iterator>::value_type* pointer;\n    typedef typename std::iterator_traits<Iterator>::value_type& reference;\n};\n\ntemplate <class Iterator>\nstruct msvc_stdlib_const_traits\n    : std::iterator_traits<Iterator>\n{\n    typedef typename std::iterator_traits<Iterator>::distance_type difference_type;\n    typedef const typename std::iterator_traits<Iterator>::value_type* pointer;\n    typedef const typename std::iterator_traits<Iterator>::value_type& reference;\n};\n\n#   ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION\ntemplate <class Iterator>\nstruct is_bad_output_iterator\n    : is_base_and_derived<\n        std::iterator<std::output_iterator_tag,void,void,void,void>\n        , Iterator>\n{\n};\n\nstruct bad_output_iterator_traits\n{\n    typedef void value_type;\n    typedef void difference_type;\n    typedef std::output_iterator_tag iterator_category;\n    typedef void pointer;\n    typedef void reference;\n};\n#   endif\n\n// If we're looking at an MSVC6 (old Dinkumware) ``standard''\n// iterator, this will generate an appropriate traits class. \ntemplate <class Iterator>\nstruct msvc_stdlib_iterator_traits\n    : mpl::if_<\n       is_mutable_iterator<Iterator>\n       , msvc_stdlib_mutable_traits<Iterator>\n       , msvc_stdlib_const_traits<Iterator>\n      >::type\n{};\n\ntemplate <class Iterator>\nstruct non_pointer_iterator_traits\n    : mpl::if_<\n        // if the iterator contains all the right nested types...\n        is_full_iterator_traits<Iterator>\n        // Use a standard iterator_traits implementation\n        , standard_iterator_traits<Iterator>\n#   ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF\n        // Check for STLPort 4.0 broken _Iterator_category type\n        , mpl::if_<\n             is_stlport_40_debug_iterator<Iterator>\n             , stlport_40_debug_iterator_traits<Iterator>\n#   endif\n        // Otherwise, assume it's a Dinkum iterator\n        , msvc_stdlib_iterator_traits<Iterator>\n#   ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF\n        >::type\n#   endif \n    >::type\n{\n};\n\ntemplate <class Iterator>\nstruct iterator_traits_aux\n    : mpl::if_<\n        is_pointer<Iterator>\n        , pointer_iterator_traits<Iterator>\n        , non_pointer_iterator_traits<Iterator>\n    >::type\n{\n};\n\ntemplate <class Iterator>\nstruct iterator_traits\n{\n    // Explicit forwarding from base class needed to keep MSVC6 happy\n    // under some circumstances.\n private:\n#   ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION\n    typedef \n    typename mpl::if_<\n        is_bad_output_iterator<Iterator>\n        , bad_output_iterator_traits\n        , iterator_traits_aux<Iterator>\n    >::type base;\n#   else\n    typedef iterator_traits_aux<Iterator> base;\n#   endif\n public:\n    typedef typename base::value_type value_type;\n    typedef typename base::pointer pointer;\n    typedef typename base::reference reference;\n    typedef typename base::difference_type difference_type;\n    typedef typename base::iterator_category iterator_category;\n};\n\n// This specialization cuts off ETI (Early Template Instantiation) for MSVC.\ntemplate <> struct iterator_traits<int>\n{\n    typedef int value_type;\n    typedef int pointer;\n    typedef int reference;\n    typedef int difference_type;\n    typedef int iterator_category;\n};\n\n}} // namespace boost::detail\n\n#  endif // workarounds\n\nnamespace boost { namespace detail {\n\nnamespace iterator_traits_\n{\n  template <class Iterator, class Difference>\n  struct distance_select\n  {\n      static Difference execute(Iterator i1, const Iterator i2, ...)\n      {\n          Difference result = 0;\n          while (i1 != i2)\n          {\n              ++i1;\n              ++result;\n          }\n          return result;\n      }\n\n      static Difference execute(Iterator i1, const Iterator i2, std::random_access_iterator_tag*)\n      {\n          return i2 - i1;\n      }\n  };\n} // namespace boost::detail::iterator_traits_\n\ntemplate <class Iterator>\ninline typename iterator_traits<Iterator>::difference_type\ndistance(Iterator first, Iterator last)\n{\n    typedef typename iterator_traits<Iterator>::difference_type diff_t;\n    typedef typename ::boost::detail::iterator_traits<Iterator>::iterator_category iterator_category;\n    \n    return iterator_traits_::distance_select<Iterator,diff_t>::execute(\n        first, last, (iterator_category*)0);\n}\n\n}}\n\n# endif\n\n\n# undef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF\n# undef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION\n\n#endif // ITERATOR_DWA122600_HPP_\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/lcast_precision.hpp",
    "content": "// Copyright Alexander Nasonov & Paul A. Bristow 2006.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n\n#include <climits>\n#include <ios>\n#include <limits>\n\n#include <boost/config.hpp>\n#include <boost/integer_traits.hpp>\n\n#ifndef BOOST_NO_IS_ABSTRACT\n// Fix for SF:1358600 - lexical_cast & pure virtual functions & VC 8 STL\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_abstract.hpp>\n#endif\n\n#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || \\\n  (defined(BOOST_MSVC) && (BOOST_MSVC<1310))\n\n#define BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n#endif\n\n#ifdef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n#include <boost/assert.hpp>\n#else\n#include <boost/static_assert.hpp>\n#endif\n\nnamespace boost { namespace detail {\n\nclass lcast_abstract_stub {};\n\n#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n// Calculate an argument to pass to std::ios_base::precision from\n// lexical_cast. See alternative implementation for broken standard\n// libraries in lcast_get_precision below. Keep them in sync, please.\ntemplate<class T>\nstruct lcast_precision\n{\n#ifdef BOOST_NO_IS_ABSTRACT\n    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.\n#else\n    typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<\n        boost::is_abstract<T>\n      , std::numeric_limits<lcast_abstract_stub>\n      , std::numeric_limits<T>\n      >::type limits;\n#endif\n\n    BOOST_STATIC_CONSTANT(bool, use_default_precision =\n            !limits::is_specialized || limits::is_exact\n        );\n\n    BOOST_STATIC_CONSTANT(bool, is_specialized_bin =\n            !use_default_precision &&\n            limits::radix == 2 && limits::digits > 0\n        );\n\n    BOOST_STATIC_CONSTANT(bool, is_specialized_dec =\n            !use_default_precision &&\n            limits::radix == 10 && limits::digits10 > 0\n        );\n\n    BOOST_STATIC_CONSTANT(std::streamsize, streamsize_max =\n            boost::integer_traits<std::streamsize>::const_max\n        );\n\n    BOOST_STATIC_CONSTANT(unsigned int, precision_dec = limits::digits10 + 1U);\n\n    BOOST_STATIC_ASSERT(!is_specialized_dec ||\n            precision_dec <= streamsize_max + 0UL\n        );\n\n    BOOST_STATIC_CONSTANT(unsigned long, precision_bin =\n            2UL + limits::digits * 30103UL / 100000UL\n        );\n\n    BOOST_STATIC_ASSERT(!is_specialized_bin ||\n            (limits::digits + 0UL < ULONG_MAX / 30103UL &&\n            precision_bin > limits::digits10 + 0UL &&\n            precision_bin <= streamsize_max + 0UL)\n        );\n\n    BOOST_STATIC_CONSTANT(std::streamsize, value =\n            is_specialized_bin ? precision_bin\n                               : is_specialized_dec ? precision_dec : 6\n        );\n};\n#endif\n\ntemplate<class T>\ninline std::streamsize lcast_get_precision(T* = 0)\n{\n#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n    return lcast_precision<T>::value;\n#else // Follow lcast_precision algorithm at run-time:\n\n#ifdef BOOST_NO_IS_ABSTRACT\n    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.\n#else\n    typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<\n        boost::is_abstract<T>\n      , std::numeric_limits<lcast_abstract_stub>\n      , std::numeric_limits<T>\n      >::type limits;\n#endif\n\n    bool const use_default_precision =\n        !limits::is_specialized || limits::is_exact;\n\n    if(!use_default_precision)\n    { // Includes all built-in floating-point types, float, double ...\n      // and UDT types for which digits (significand bits) is defined (not zero)\n\n        bool const is_specialized_bin =\n            limits::radix == 2 && limits::digits > 0;\n        bool const is_specialized_dec =\n            limits::radix == 10 && limits::digits10 > 0;\n        std::streamsize const streamsize_max =\n            (boost::integer_traits<std::streamsize>::max)();\n\n        if(is_specialized_bin)\n        { // Floating-point types with\n          // limits::digits defined by the specialization.\n\n            unsigned long const digits = limits::digits;\n            unsigned long const precision = 2UL + digits * 30103UL / 100000UL;\n            // unsigned long is selected because it is at least 32-bits\n            // and thus ULONG_MAX / 30103UL is big enough for all types.\n            BOOST_ASSERT(\n                    digits < ULONG_MAX / 30103UL &&\n                    precision > limits::digits10 + 0UL &&\n                    precision <= streamsize_max + 0UL\n                );\n            return precision;\n        }\n        else if(is_specialized_dec)\n        {   // Decimal Floating-point type, most likely a User Defined Type\n            // rather than a real floating-point hardware type.\n            unsigned int const precision = limits::digits10 + 1U;\n            BOOST_ASSERT(precision <= streamsize_max + 0UL);\n            return precision;\n        }\n    }\n\n    // Integral type (for which precision has no effect)\n    // or type T for which limits is NOT specialized,\n    // so assume stream precision remains the default 6 decimal digits.\n    // Warning: if your User-defined Floating-point type T is NOT specialized,\n    // then you may lose accuracy by only using 6 decimal digits.\n    // To avoid this, you need to specialize T with either\n    // radix == 2 and digits == the number of significand bits,\n    // OR\n    // radix = 10 and digits10 == the number of decimal digits.\n\n    return 6;\n#endif\n}\n\ntemplate<class T>\ninline void lcast_set_precision(std::ios_base& stream, T*)\n{\n    stream.precision(lcast_get_precision<T>());\n}\n\ntemplate<class Source, class Target>\ninline void lcast_set_precision(std::ios_base& stream, Source*, Target*)\n{\n    std::streamsize const s = lcast_get_precision(static_cast<Source*>(0));\n    std::streamsize const t = lcast_get_precision(static_cast<Target*>(0));\n    stream.precision(s > t ? s : t);\n}\n\n}}\n\n#endif //  BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/reference_content.hpp",
    "content": "//-----------------------------------------------------------------------------\n// boost detail/reference_content.hpp header file\n// See http://www.boost.org for updates, documentation, and revision history.\n//-----------------------------------------------------------------------------\n//\n// Copyright (c) 2003\n// Eric Friedman\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_DETAIL_REFERENCE_CONTENT_HPP\n#define BOOST_DETAIL_REFERENCE_CONTENT_HPP\n\n#include \"boost/config.hpp\"\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#   include \"boost/mpl/bool.hpp\"\n#   include \"boost/type_traits/has_nothrow_copy.hpp\"\n#else\n#   include \"boost/mpl/if.hpp\"\n#   include \"boost/type_traits/is_reference.hpp\"\n#endif\n\n#include \"boost/mpl/void.hpp\"\n\nnamespace boost {\n\nnamespace detail {\n\n///////////////////////////////////////////////////////////////////////////////\n// (detail) class template reference_content\n//\n// Non-Assignable wrapper for references.\n//\ntemplate <typename RefT>\nclass reference_content\n{\nprivate: // representation\n\n    RefT content_;\n\npublic: // structors\n\n    ~reference_content()\n    {\n    }\n\n    reference_content(RefT r)\n        : content_( r )\n    {\n    }\n\n    reference_content(const reference_content& operand)\n        : content_( operand.content_ )\n    {\n    }\n\nprivate: // non-Assignable\n\n    reference_content& operator=(const reference_content&);\n\npublic: // queries\n\n    RefT get() const\n    {\n        return content_;\n    }\n\n};\n\n///////////////////////////////////////////////////////////////////////////////\n// (detail) metafunction make_reference_content\n//\n// Wraps with reference_content if specified type is reference.\n//\n\ntemplate <typename T = mpl::void_> struct make_reference_content;\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate <typename T>\nstruct make_reference_content\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct make_reference_content< T& >\n{\n    typedef reference_content<T&> type;\n};\n\n#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate <typename T>\nstruct make_reference_content\n    : mpl::if_<\n          is_reference<T>\n        , reference_content<T>\n        , T\n        >\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround\n\ntemplate <>\nstruct make_reference_content< mpl::void_ >\n{\n    template <typename T>\n    struct apply\n        : make_reference_content<T>\n    {\n    };\n\n    typedef mpl::void_ type;\n};\n\n} // namespace detail\n\n///////////////////////////////////////////////////////////////////////////////\n// reference_content<T&> type traits specializations\n//\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate <typename T>\nstruct has_nothrow_copy<\n      ::boost::detail::reference_content< T& >\n    >\n    : mpl::true_\n{\n};\n\n#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n} // namespace boost\n\n#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/sp_typeinfo.hpp",
    "content": "#ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n#define BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_typeinfo.hpp\n//\n//  Copyright 2007 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0.\n// See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/config.hpp>\n\n#if defined( BOOST_NO_TYPEID )\n\n#include <boost/current_function.hpp>\n#include <functional>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass sp_typeinfo\n{\nprivate:\n\n    sp_typeinfo( sp_typeinfo const& );\n    sp_typeinfo& operator=( sp_typeinfo const& );\n\n    char const * name_;\n\npublic:\n\n    explicit sp_typeinfo( char const * name ): name_( name )\n    {\n    }\n\n    bool operator==( sp_typeinfo const& rhs ) const\n    {\n        return this == &rhs;\n    }\n\n    bool operator!=( sp_typeinfo const& rhs ) const\n    {\n        return this != &rhs;\n    }\n\n    bool before( sp_typeinfo const& rhs ) const\n    {\n        return std::less< sp_typeinfo const* >()( this, &rhs );\n    }\n\n    char const* name() const\n    {\n        return name_;\n    }\n};\n\ntemplate<class T> struct sp_typeid_\n{\n    static sp_typeinfo ti_;\n\n    static char const * name()\n    {\n        return BOOST_CURRENT_FUNCTION;\n    }\n};\n\n#if defined(__SUNPRO_CC)\n// see #4199, the Sun Studio compiler gets confused about static initialization \n// constructor arguments. But an assignment works just fine. \ntemplate<class T> sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name();\n#else\ntemplate<class T> sp_typeinfo sp_typeid_< T >::ti_(sp_typeid_< T >::name());\n#endif\n\ntemplate<class T> struct sp_typeid_< T & >: sp_typeid_< T >\n{\n};\n\ntemplate<class T> struct sp_typeid_< T const >: sp_typeid_< T >\n{\n};\n\ntemplate<class T> struct sp_typeid_< T volatile >: sp_typeid_< T >\n{\n};\n\ntemplate<class T> struct sp_typeid_< T const volatile >: sp_typeid_< T >\n{\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_<T>::ti_)\n\n#else\n\n#include <typeinfo>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if defined( BOOST_NO_STD_TYPEINFO )\n\ntypedef ::type_info sp_typeinfo;\n\n#else\n\ntypedef std::type_info sp_typeinfo;\n\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#define BOOST_SP_TYPEID(T) typeid(T)\n\n#endif\n\n#endif  // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/detail/workaround.hpp",
    "content": "// Copyright David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef WORKAROUND_DWA2002126_HPP\n# define WORKAROUND_DWA2002126_HPP\n\n// Compiler/library version workaround macro\n//\n// Usage:\n//\n//     #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n//        // workaround for eVC4 and VC6\n//        ... // workaround code here\n//     #endif\n//\n// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the\n// first argument must be undefined or expand to a numeric\n// value. The above expands to:\n//\n//     (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300\n//\n// When used for workarounds that apply to the latest known version \n// and all earlier versions of a compiler, the following convention \n// should be observed:\n//\n//     #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301))\n//\n// The version number in this case corresponds to the last version in\n// which the workaround was known to have been required. When\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro\n// BOOST_TESTED_AT(x) expands to \"!= 0\", which effectively activates\n// the workaround for any version of the compiler. When\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or\n// error will be issued if the compiler version exceeds the argument\n// to BOOST_TESTED_AT().  This can be used to locate workarounds which\n// may be obsoleted by newer versions.\n\n# ifndef BOOST_STRICT_CONFIG\n\n#include <boost/config.hpp>\n\n#ifndef __BORLANDC__\n#define __BORLANDC___WORKAROUND_GUARD 1\n#else\n#define __BORLANDC___WORKAROUND_GUARD 0\n#endif\n#ifndef __CODEGEARC__\n#define __CODEGEARC___WORKAROUND_GUARD 1\n#else\n#define __CODEGEARC___WORKAROUND_GUARD 0\n#endif\n#ifndef _MSC_VER\n#define _MSC_VER_WORKAROUND_GUARD 1\n#else\n#define _MSC_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef _MSC_FULL_VER\n#define _MSC_FULL_VER_WORKAROUND_GUARD 1\n#else\n#define _MSC_FULL_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_MSVC\n#define BOOST_MSVC_WORKAROUND_GUARD 1\n#else\n#define BOOST_MSVC_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_MSVC_FULL_VER\n#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1\n#else\n#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC__\n#define __GNUC___WORKAROUND_GUARD 1\n#else\n#define __GNUC___WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC_MINOR__\n#define __GNUC_MINOR___WORKAROUND_GUARD 1\n#else\n#define __GNUC_MINOR___WORKAROUND_GUARD 0\n#endif\n#ifndef __GNUC_PATCHLEVEL__\n#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1\n#else\n#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0\n#endif\n#ifndef __IBMCPP__\n#define __IBMCPP___WORKAROUND_GUARD 1\n#else\n#define __IBMCPP___WORKAROUND_GUARD 0\n#endif\n#ifndef __SUNPRO_CC\n#define __SUNPRO_CC_WORKAROUND_GUARD 1\n#else\n#define __SUNPRO_CC_WORKAROUND_GUARD 0\n#endif\n#ifndef __DECCXX_VER\n#define __DECCXX_VER_WORKAROUND_GUARD 1\n#else\n#define __DECCXX_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __MWERKS__\n#define __MWERKS___WORKAROUND_GUARD 1\n#else\n#define __MWERKS___WORKAROUND_GUARD 0\n#endif\n#ifndef __EDG__\n#define __EDG___WORKAROUND_GUARD 1\n#else\n#define __EDG___WORKAROUND_GUARD 0\n#endif\n#ifndef __EDG_VERSION__\n#define __EDG_VERSION___WORKAROUND_GUARD 1\n#else\n#define __EDG_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef __HP_aCC\n#define __HP_aCC_WORKAROUND_GUARD 1\n#else\n#define __HP_aCC_WORKAROUND_GUARD 0\n#endif\n#ifndef __hpxstd98\n#define __hpxstd98_WORKAROUND_GUARD 1\n#else\n#define __hpxstd98_WORKAROUND_GUARD 0\n#endif\n#ifndef _CRAYC\n#define _CRAYC_WORKAROUND_GUARD 1\n#else\n#define _CRAYC_WORKAROUND_GUARD 0\n#endif\n#ifndef __DMC__\n#define __DMC___WORKAROUND_GUARD 1\n#else\n#define __DMC___WORKAROUND_GUARD 0\n#endif\n#ifndef MPW_CPLUS\n#define MPW_CPLUS_WORKAROUND_GUARD 1\n#else\n#define MPW_CPLUS_WORKAROUND_GUARD 0\n#endif\n#ifndef __COMO__\n#define __COMO___WORKAROUND_GUARD 1\n#else\n#define __COMO___WORKAROUND_GUARD 0\n#endif\n#ifndef __COMO_VERSION__\n#define __COMO_VERSION___WORKAROUND_GUARD 1\n#else\n#define __COMO_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef __INTEL_COMPILER\n#define __INTEL_COMPILER_WORKAROUND_GUARD 1\n#else\n#define __INTEL_COMPILER_WORKAROUND_GUARD 0\n#endif\n#ifndef __ICL\n#define __ICL_WORKAROUND_GUARD 1\n#else\n#define __ICL_WORKAROUND_GUARD 0\n#endif\n#ifndef _COMPILER_VERSION\n#define _COMPILER_VERSION_WORKAROUND_GUARD 1\n#else\n#define _COMPILER_VERSION_WORKAROUND_GUARD 0\n#endif\n\n#ifndef _RWSTD_VER\n#define _RWSTD_VER_WORKAROUND_GUARD 1\n#else\n#define _RWSTD_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_RWSTD_VER\n#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1\n#else\n#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0\n#endif\n#ifndef __GLIBCPP__\n#define __GLIBCPP___WORKAROUND_GUARD 1\n#else\n#define __GLIBCPP___WORKAROUND_GUARD 0\n#endif\n#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC\n#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1\n#else\n#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0\n#endif\n#ifndef __SGI_STL_PORT\n#define __SGI_STL_PORT_WORKAROUND_GUARD 1\n#else\n#define __SGI_STL_PORT_WORKAROUND_GUARD 0\n#endif\n#ifndef _STLPORT_VERSION\n#define _STLPORT_VERSION_WORKAROUND_GUARD 1\n#else\n#define _STLPORT_VERSION_WORKAROUND_GUARD 0\n#endif\n#ifndef __LIBCOMO_VERSION__\n#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1\n#else\n#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0\n#endif\n#ifndef _CPPLIB_VER\n#define _CPPLIB_VER_WORKAROUND_GUARD 1\n#else\n#define _CPPLIB_VER_WORKAROUND_GUARD 0\n#endif\n\n#ifndef BOOST_INTEL_CXX_VERSION\n#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_INTEL_WIN\n#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_DINKUMWARE_STDLIB\n#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1\n#else\n#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0\n#endif\n#ifndef BOOST_INTEL\n#define BOOST_INTEL_WORKAROUND_GUARD 1\n#else\n#define BOOST_INTEL_WORKAROUND_GUARD 0\n#endif\n// Always define to zero, if it's used it'll be defined my MPL:\n#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0\n\n#  define BOOST_WORKAROUND(symbol, test)                \\\n         ((symbol ## _WORKAROUND_GUARD + 0 == 0) &&     \\\n         (symbol != 0) && (1 % (( (symbol test) ) + 1)))\n//                              ^ ^           ^ ^\n// The extra level of parenthesis nesting above, along with the\n// BOOST_OPEN_PAREN indirection below, is required to satisfy the\n// broken preprocessor in MWCW 8.3 and earlier.\n//\n// The basic mechanism works as follows:\n//      (symbol test) + 1        =>   if (symbol test) then 2 else 1\n//      1 % ((symbol test) + 1)  =>   if (symbol test) then 1 else 0\n//\n// The complication with % is for cooperation with BOOST_TESTED_AT().\n// When \"test\" is BOOST_TESTED_AT(x) and\n// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined,\n//\n//      symbol test              =>   if (symbol <= x) then 1 else -1\n//      (symbol test) + 1        =>   if (symbol <= x) then 2 else 0\n//      1 % ((symbol test) + 1)  =>   if (symbol <= x) then 1 else divide-by-zero\n//\n\n#  ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS\n#   define BOOST_OPEN_PAREN (\n#   define BOOST_TESTED_AT(value)  > value) ?(-1): BOOST_OPEN_PAREN 1\n#  else\n#   define BOOST_TESTED_AT(value) != ((value)-(value))\n#  endif\n\n# else\n\n#  define BOOST_WORKAROUND(symbol, test) 0\n\n# endif \n\n#endif // WORKAROUND_DWA2002126_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/current_exception_cast.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_7E83C166200811DE885E826156D89593\n#define UUID_7E83C166200811DE885E826156D89593\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\nnamespace\nboost\n    {\n    template <class E>\n    inline\n    E *\n    current_exception_cast()\n        {\n        try\n            {\n            throw;\n            }\n        catch(\n        E & e )\n            {\n            return &e;\n            }\n        catch(\n        ...)\n            {\n            return 0;\n            }\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/detail/attribute_noreturn.hpp",
    "content": "//Copyright (c) 2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_61531AB0680611DEADD5846855D89593\n#define UUID_61531AB0680611DEADD5846855D89593\n\n#if defined(_MSC_VER)\n#define BOOST_ATTRIBUTE_NORETURN __declspec(noreturn)\n#elif defined(__GNUC__)\n#define BOOST_ATTRIBUTE_NORETURN __attribute__((__noreturn__))\n#else\n#define BOOST_ATTRIBUTE_NORETURN\n#endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/detail/error_info_impl.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_CE6983AC753411DDA764247956D89593\n#define UUID_CE6983AC753411DDA764247956D89593\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <string>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        class\n        error_info_base\n            {\n            public:\n\n            virtual std::string tag_typeid_name() const = 0;\n            virtual std::string value_as_string() const = 0;\n\n            protected:\n\n            virtual\n            ~error_info_base() throw()\n                {\n                }\n            };\n        }\n\n    template <class Tag,class T>\n    class\n    error_info:\n        public exception_detail::error_info_base\n        {\n        public:\n\n        typedef T value_type;\n\n        error_info( value_type const & value );\n        ~error_info() throw();\n\n        value_type const &\n        value() const\n            {\n            return value_;\n            }\n\n        value_type &\n        value()\n            {\n            return value_;\n            }\n\n        private:\n\n        std::string tag_typeid_name() const;\n        std::string value_as_string() const;\n\n        value_type value_;\n        };\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/detail/type_info.hpp",
    "content": "//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_C3E1741C754311DDB2834CCA55D89593\n#define UUID_C3E1741C754311DDB2834CCA55D89593\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/current_function.hpp>\n#include <boost/config.hpp>\n#ifndef BOOST_NO_TYPEID\n#include <boost/units/detail/utility.hpp>\n#endif\n#include <string>\n\nnamespace\nboost\n    {\n    template <class T>\n    inline\n    std::string\n    tag_type_name()\n        {\n#ifdef BOOST_NO_TYPEID\n        return BOOST_CURRENT_FUNCTION;\n#else\n        return units::detail::demangle(typeid(T*).name());\n#endif\n        }\n\n    template <class T>\n    inline\n    std::string\n    type_name()\n        {\n#ifdef BOOST_NO_TYPEID\n        return BOOST_CURRENT_FUNCTION;\n#else\n        return units::detail::demangle(typeid(T).name());\n#endif\n        }\n\n    namespace\n    exception_detail\n        {\n        struct\n        type_info_\n            {\n            detail::sp_typeinfo const * type_;\n\n            explicit\n            type_info_( detail::sp_typeinfo const & type ):\n                type_(&type)\n                {\n                }\n\n            friend\n            bool\n            operator<( type_info_ const & a, type_info_ const & b )\n                {\n                return 0!=(a.type_->before(*b.type_));\n                }\n            };\n        }\n    }\n\n#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_SP_TYPEID(T))\n\n#ifndef BOOST_NO_RTTI\n#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x))\n#endif\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/exception.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593\n#define UUID_274DA366004E11DCB1DDFE2E56D89593\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <class T>\n        class\n        refcount_ptr\n            {\n            public:\n\n            refcount_ptr():\n                px_(0)\n                {\n                }\n\n            ~refcount_ptr()\n                {\n                release();\n                }\n\n            refcount_ptr( refcount_ptr const & x ):\n                px_(x.px_)\n                {\n                add_ref();\n                }\n\n            refcount_ptr &\n            operator=( refcount_ptr const & x )\n                {\n                adopt(x.px_);\n                return *this;\n                }\n\n            void\n            adopt( T * px )\n                {\n                release();\n                px_=px;\n                add_ref();\n                }\n\n            T *\n            get() const\n                {\n                return px_;\n                }\n\n            private:\n\n            T * px_;\n\n            void\n            add_ref()\n                {\n                if( px_ )\n                    px_->add_ref();\n                }\n\n            void\n            release()\n                {\n                if( px_ && px_->release() )\n                    px_=0;\n                }\n            };\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    template <class Tag,class T>\n    class error_info;\n\n    typedef error_info<struct throw_function_,char const *> throw_function;\n    typedef error_info<struct throw_file_,char const *> throw_file;\n    typedef error_info<struct throw_line_,int> throw_line;\n\n    template <>\n    class\n    error_info<throw_function_,char const *>\n        {\n        public:\n        typedef char const * value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n    template <>\n    class\n    error_info<throw_file_,char const *>\n        {\n        public:\n        typedef char const * value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n    template <>\n    class\n    error_info<throw_line_,int>\n        {\n        public:\n        typedef int value_type;\n        value_type v_;\n        explicit\n        error_info( value_type v ):\n            v_(v)\n            {\n            }\n        };\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n    class exception;\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    template <class T>\n    class shared_ptr;\n\n    namespace\n    exception_detail\n        {\n        class error_info_base;\n        struct type_info_;\n\n        struct\n        error_info_container\n            {\n            virtual char const * diagnostic_information( char const * ) const = 0;\n            virtual shared_ptr<error_info_base> get( type_info_ const & ) const = 0;\n            virtual void set( shared_ptr<error_info_base> const &, type_info_ const & ) = 0;\n            virtual void add_ref() const = 0;\n            virtual bool release() const = 0;\n            virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;\n\n            protected:\n\n            ~error_info_container() throw()\n                {\n                }\n            };\n\n        template <class>\n        struct get_info;\n\n        template <>\n        struct get_info<throw_function>;\n\n        template <>\n        struct get_info<throw_file>;\n\n        template <>\n        struct get_info<throw_line>;\n\n        char const * get_diagnostic_information( exception const &, char const * );\n\n        void copy_boost_exception( exception *, exception const * );\n\n        template <class E,class Tag,class T>\n        E const & set_info( E const &, error_info<Tag,T> const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_function const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_file const & );\n\n        template <class E>\n        E const & set_info( E const &, throw_line const & );\n        }\n\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n    class\n    exception\n        {\n        protected:\n\n        exception():\n            throw_function_(0),\n            throw_file_(0),\n            throw_line_(-1)\n            {\n            }\n\n#ifdef __HP_aCC\n        //On HP aCC, this protected copy constructor prevents throwing boost::exception.\n        //On all other platforms, the same effect is achieved by the pure virtual destructor.\n        exception( exception const & x ) throw():\n            data_(x.data_),\n            throw_function_(x.throw_function_),\n            throw_file_(x.throw_file_),\n            throw_line_(x.throw_line_)\n            {\n            }\n#endif\n\n        virtual ~exception() throw()\n#ifndef __HP_aCC\n            = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors.\n#endif\n            ;\n\n#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310)\n        public:\n#else\n        private:\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_function const & );\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_file const & );\n\n        template <class E>\n        friend E const & exception_detail::set_info( E const &, throw_line const & );\n\n        template <class E,class Tag,class T>\n        friend E const & exception_detail::set_info( E const &, error_info<Tag,T> const & );\n\n        friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );\n\n        template <class>\n        friend struct exception_detail::get_info;\n        friend struct exception_detail::get_info<throw_function>;\n        friend struct exception_detail::get_info<throw_file>;\n        friend struct exception_detail::get_info<throw_line>;\n        friend void exception_detail::copy_boost_exception( exception *, exception const * );\n#endif\n        mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;\n        mutable char const * throw_function_;\n        mutable char const * throw_file_;\n        mutable int throw_line_;\n        };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n    inline\n    exception::\n    ~exception() throw()\n        {\n        }\n\n    namespace\n    exception_detail\n        {\n        template <class E>\n        E const &\n        set_info( E const & x, throw_function const & y )\n            {\n            x.throw_function_=y.v_;\n            return x;\n            }\n\n        template <class E>\n        E const &\n        set_info( E const & x, throw_file const & y )\n            {\n            x.throw_file_=y.v_;\n            return x;\n            }\n\n        template <class E>\n        E const &\n        set_info( E const & x, throw_line const & y )\n            {\n            x.throw_line_=y.v_;\n            return x;\n            }\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    namespace\n    exception_detail\n        {\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n        template <class T>\n        struct\n        error_info_injector:\n            public T,\n            public exception\n            {\n            explicit\n            error_info_injector( T const & x ):\n                T(x)\n                {\n                }\n\n            ~error_info_injector() throw()\n                {\n                }\n            };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n        struct large_size { char c[256]; };\n        large_size dispatch_boost_exception( exception const * );\n\n        struct small_size { };\n        small_size dispatch_boost_exception( void const * );\n\n        template <class,int>\n        struct enable_error_info_helper;\n\n        template <class T>\n        struct\n        enable_error_info_helper<T,sizeof(large_size)>\n            {\n            typedef T type;\n            };\n\n        template <class T>\n        struct\n        enable_error_info_helper<T,sizeof(small_size)>\n            {\n            typedef error_info_injector<T> type;\n            };\n\n        template <class T>\n        struct\n        enable_error_info_return_type\n            {\n            typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception(static_cast<T *>(0)))>::type type;\n            };\n        }\n\n    template <class T>\n    inline\n    typename\n    exception_detail::enable_error_info_return_type<T>::type\n    enable_error_info( T const & x )\n        {\n        typedef typename exception_detail::enable_error_info_return_type<T>::type rt;\n        return rt(x);\n        }\n\n    ////////////////////////////////////////////////////////////////////////\n\n    namespace\n    exception_detail\n        {\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility push (default)\n# endif\n#endif\n        class\n        clone_base\n            {\n            public:\n\n            virtual clone_base const * clone() const = 0;\n            virtual void rethrow() const = 0;\n\n            virtual\n            ~clone_base() throw()\n                {\n                }\n            };\n#if defined(__GNUC__)\n# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)\n#  pragma GCC visibility pop\n# endif\n#endif\n\n        inline\n        void\n        copy_boost_exception( exception * a, exception const * b )\n            {\n            refcount_ptr<error_info_container> data;\n            if( error_info_container * d=b->data_.get() )\n                data = d->clone();\n            a->throw_file_ = b->throw_file_;\n            a->throw_line_ = b->throw_line_;\n            a->throw_function_ = b->throw_function_;\n            a->data_ = data;\n            }\n\n        inline\n        void\n        copy_boost_exception( void *, void const * )\n            {\n            }\n\n        template <class T>\n        class\n        clone_impl:\n            public T,\n            public virtual clone_base\n            {\n            struct clone_tag { };\n            clone_impl( clone_impl const & x, clone_tag ):\n                T(x)\n                {\n                copy_boost_exception(this,&x);\n                }\n\n            public:\n\n            explicit\n            clone_impl( T const & x ):\n                T(x)\n                {\n                copy_boost_exception(this,&x);\n                }\n\n            ~clone_impl() throw()\n                {\n                }\n\n            private:\n\n            clone_base const *\n            clone() const\n                {\n                return new clone_impl(*this,clone_tag());\n                }\n\n            void\n            rethrow() const\n                {\n                throw*this;\n                }\n            };\n        }\n\n    template <class T>\n    inline\n    exception_detail::clone_impl<T>\n    enable_current_exception( T const & x )\n        {\n        return exception_detail::clone_impl<T>(x);\n        }\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/exception/get_error_info.hpp",
    "content": "//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.\n\n//Distributed under the Boost Software License, Version 1.0. (See accompanying\n//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef UUID_1A590226753311DD9E4CCF6156D89593\n#define UUID_1A590226753311DD9E4CCF6156D89593\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n#include <boost/exception/exception.hpp>\n#include <boost/exception/detail/error_info_impl.hpp>\n#include <boost/exception/detail/type_info.hpp>\n#include <boost/shared_ptr.hpp>\n\nnamespace\nboost\n    {\n    namespace\n    exception_detail\n        {\n        template <class ErrorInfo>\n        struct\n        get_info\n            {\n            static\n            typename ErrorInfo::value_type *\n            get( exception const & x )\n                {\n                if( exception_detail::error_info_container * c=x.data_.get() )\n                    if( shared_ptr<exception_detail::error_info_base> eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) )\n                        {\n#ifndef BOOST_NO_RTTI\n                        BOOST_ASSERT( 0!=dynamic_cast<ErrorInfo *>(eib.get()) );\n#endif\n                        ErrorInfo * w = static_cast<ErrorInfo *>(eib.get());\n                        return &w->value();\n                        }\n                return 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_function>\n            {\n            static\n            char const * *\n            get( exception const & x )\n                {\n                return x.throw_function_ ? &x.throw_function_ : 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_file>\n            {\n            static\n            char const * *\n            get( exception const & x )\n                {\n                return x.throw_file_ ? &x.throw_file_ : 0;\n                }\n            };\n\n        template <>\n        struct\n        get_info<throw_line>\n            {\n            static\n            int *\n            get( exception const & x )\n                {\n                return x.throw_line_!=-1 ? &x.throw_line_ : 0;\n                }\n            };\n\n        template <class T,class R>\n        struct\n        get_error_info_return_type\n            {\n            typedef R * type;\n            };\n\n        template <class T,class R>\n        struct\n        get_error_info_return_type<T const,R>\n            {\n            typedef R const * type;\n            };\n        }\n\n#ifdef BOOST_NO_RTTI\n    template <class ErrorInfo>\n    inline\n    typename ErrorInfo::value_type const *\n    get_error_info( boost::exception const & x )\n        {\n        return exception_detail::get_info<ErrorInfo>::get(x);\n        }\n    template <class ErrorInfo>\n    inline\n    typename ErrorInfo::value_type *\n    get_error_info( boost::exception & x )\n        {\n        return exception_detail::get_info<ErrorInfo>::get(x);\n        }\n#else\n    template <class ErrorInfo,class E>\n    inline\n    typename exception_detail::get_error_info_return_type<E,typename ErrorInfo::value_type>::type\n    get_error_info( E & some_exception )\n        {\n        if( exception const * x = dynamic_cast<exception const *>(&some_exception) )\n            return exception_detail::get_info<ErrorInfo>::get(*x);\n        else\n            return 0;\n        }\n#endif\n    }\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/functional/hash/hash_fwd.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  Based on Peter Dimov's proposal\n//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf\n//  issue 6.18. \n\n#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP)\n#define BOOST_FUNCTIONAL_HASH_FWD_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <cstddef>\n#include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n    template <class T> struct hash;\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    template <class T> void hash_combine(std::size_t& seed, T& v);\n#else\n    template <class T> void hash_combine(std::size_t& seed, T const& v);\n#endif\n\n    template <class It> std::size_t hash_range(It, It);\n    template <class It> void hash_range(std::size_t&, It, It);\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n    template <class T> inline std::size_t hash_range(T*, T*);\n    template <class T> inline void hash_range(std::size_t&, T*, T*);\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/functional/hash_fwd.hpp",
    "content": "\n// Copyright 2005-2009 Daniel James.\n// Distributed under the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/functional/hash/hash_fwd.hpp>\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/get_pointer.hpp",
    "content": "// Copyright Peter Dimov and David Abrahams 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef GET_POINTER_DWA20021219_HPP\n# define GET_POINTER_DWA20021219_HPP\n\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n# include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n\nnamespace boost { \n\n// get_pointer(p) extracts a ->* capable pointer from p\n\ntemplate<class T> T * get_pointer(T * p)\n{\n    return p;\n}\n\n// get_pointer(shared_ptr<T> const & p) has been moved to shared_ptr.hpp\n\ntemplate<class T> T * get_pointer(std::auto_ptr<T> const& p)\n{\n    return p.get();\n}\n\n\n} // namespace boost\n\n#endif // GET_POINTER_DWA20021219_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/integer_traits.hpp",
    "content": "/* boost integer_traits.hpp header file\n *\n * Copyright Jens Maurer 2000\n * Distributed under the Boost Software License, Version 1.0. (See\n * accompanying file LICENSE_1_0.txt or copy at\n * http://www.boost.org/LICENSE_1_0.txt)\n *\n * $Id: integer_traits.hpp 80740 2012-09-28 18:34:12Z jewillco $\n *\n * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers\n */\n\n//  See http://www.boost.org/libs/integer for documentation.\n\n\n#ifndef BOOST_INTEGER_TRAITS_HPP\n#define BOOST_INTEGER_TRAITS_HPP\n\n#include <boost/config.hpp>\n#include <boost/limits.hpp>\n\n// These are an implementation detail and not part of the interface\n#include <limits.h>\n// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it,\n// and some may have <wchar.h> but not <cwchar> ...\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__))\n#include <wchar.h>\n#endif\n\n//\n// We simply cannot include this header on gcc without getting copious warnings of the kind:\n//\n// ../../../boost/integer_traits.hpp:164:66: warning: use of C99 long long integer constant\n//\n// And yet there is no other reasonable implementation, so we declare this a system header\n// to suppress these warnings.\n//\n#if defined(__GNUC__) && (__GNUC__ >= 4)\n#pragma GCC system_header\n#endif\n\nnamespace boost {\ntemplate<class T>\nclass integer_traits : public std::numeric_limits<T>\n{\npublic:\n  BOOST_STATIC_CONSTANT(bool, is_integral = false);\n};\n\nnamespace detail {\ntemplate<class T, T min_val, T max_val>\nclass integer_traits_base\n{\npublic:\n  BOOST_STATIC_CONSTANT(bool, is_integral = true);\n  BOOST_STATIC_CONSTANT(T, const_min = min_val);\n  BOOST_STATIC_CONSTANT(T, const_max = max_val);\n};\n\n#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\n//  A definition is required even for integral static constants\ntemplate<class T, T min_val, T max_val>\nconst bool integer_traits_base<T, min_val, max_val>::is_integral;\n\ntemplate<class T, T min_val, T max_val>\nconst T integer_traits_base<T, min_val, max_val>::const_min;\n\ntemplate<class T, T min_val, T max_val>\nconst T integer_traits_base<T, min_val, max_val>::const_max;\n#endif\n\n} // namespace detail\n\ntemplate<>\nclass integer_traits<bool>\n  : public std::numeric_limits<bool>,\n    public detail::integer_traits_base<bool, false, true>\n{ };\n\ntemplate<>\nclass integer_traits<char>\n  : public std::numeric_limits<char>,\n    public detail::integer_traits_base<char, CHAR_MIN, CHAR_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<signed char>\n  : public std::numeric_limits<signed char>,\n    public detail::integer_traits_base<signed char, SCHAR_MIN, SCHAR_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned char>\n  : public std::numeric_limits<unsigned char>,\n    public detail::integer_traits_base<unsigned char, 0, UCHAR_MAX>\n{ };\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\ntemplate<>\nclass integer_traits<wchar_t>\n  : public std::numeric_limits<wchar_t>,\n    // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native\n    // library: they are wrong!\n#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__)\n    public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX>\n#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__))\n    // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned:\n    public detail::integer_traits_base<wchar_t, 0, 0xffff>\n#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\\\n    || (defined __APPLE__)\\\n    || (defined(__OpenBSD__) && defined(__GNUC__))\\\n    || (defined(__NetBSD__) && defined(__GNUC__))\\\n    || (defined(__FreeBSD__) && defined(__GNUC__))\\\n    || (defined(__DragonFly__) && defined(__GNUC__))\\\n    || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))\n    // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int.\n    //  - SGI MIPSpro with native library\n    //  - gcc 3.x on HP-UX\n    //  - Mac OS X with native library\n    //  - gcc on FreeBSD, OpenBSD and NetBSD\n    public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>\n#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT)\n    // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int.\n    //  - gcc 2.95.x on HP-UX\n    // (also, std::numeric_limits<wchar_t> appears to return the wrong values).\n    public detail::integer_traits_base<wchar_t, 0, UINT_MAX>\n#else\n#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler.\n#endif\n{ };\n#endif // BOOST_NO_INTRINSIC_WCHAR_T\n\ntemplate<>\nclass integer_traits<short>\n  : public std::numeric_limits<short>,\n    public detail::integer_traits_base<short, SHRT_MIN, SHRT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned short>\n  : public std::numeric_limits<unsigned short>,\n    public detail::integer_traits_base<unsigned short, 0, USHRT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<int>\n  : public std::numeric_limits<int>,\n    public detail::integer_traits_base<int, INT_MIN, INT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned int>\n  : public std::numeric_limits<unsigned int>,\n    public detail::integer_traits_base<unsigned int, 0, UINT_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<long>\n  : public std::numeric_limits<long>,\n    public detail::integer_traits_base<long, LONG_MIN, LONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits<unsigned long>\n  : public std::numeric_limits<unsigned long>,\n    public detail::integer_traits_base<unsigned long, 0, ULONG_MAX>\n{ };\n\n#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T)\n#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX>\n{ };\n\n#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>  : public std::numeric_limits< ::boost::long_long_type>,    public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ };\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX>\n{ };\n\n#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX>\n{ };\n\n#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG)\n\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX>\n{ };\n\n#elif defined(BOOST_HAS_LONG_LONG)\n//\n// we have long long but no constants, this happens for example with gcc in -ansi mode,\n// we'll just have to work out the values for ourselves (assumes 2's compliment representation):\n//\ntemplate<>\nclass integer_traits< ::boost::long_long_type>\n  : public std::numeric_limits< ::boost::long_long_type>,\n    public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1)), ~(1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1))>\n{ };\n\ntemplate<>\nclass integer_traits< ::boost::ulong_long_type>\n  : public std::numeric_limits< ::boost::ulong_long_type>,\n    public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL>\n{ };\n\n#elif defined(BOOST_HAS_MS_INT64)\n\ntemplate<>\nclass integer_traits< __int64>\n  : public std::numeric_limits< __int64>,\n    public detail::integer_traits_base< __int64, _I64_MIN, _I64_MAX>\n{ };\n\ntemplate<>\nclass integer_traits< unsigned __int64>\n  : public std::numeric_limits< unsigned __int64>,\n    public detail::integer_traits_base< unsigned __int64, 0, _UI64_MAX>\n{ };\n\n#endif\n#endif\n\n} // namespace boost\n\n#endif /* BOOST_INTEGER_TRAITS_HPP */\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/io/ios_state.hpp",
    "content": "//  Boost io/ios_state.hpp header file  --------------------------------------//\n\n//  Copyright 2002, 2005 Daryle Walker.  Use, modification, and distribution\n//  are subject to the Boost Software License, Version 1.0.  (See accompanying\n//  file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/io/> for the library's home page.\n\n#ifndef BOOST_IO_IOS_STATE_HPP\n#define BOOST_IO_IOS_STATE_HPP\n\n#include <boost/io_fwd.hpp>  // self include\n#include <boost/detail/workaround.hpp>\n\n#include <ios>        // for std::ios_base, std::basic_ios, etc.\n#ifndef BOOST_NO_STD_LOCALE\n#include <locale>     // for std::locale\n#endif\n#include <ostream>    // for std::basic_ostream\n#include <streambuf>  // for std::basic_streambuf\n#include <string>     // for std::char_traits\n\n\nnamespace boost\n{\nnamespace io\n{\n\n\n//  Basic stream state saver class declarations  -----------------------------//\n\nclass ios_flags_saver\n{\npublic:\n    typedef ::std::ios_base            state_type;\n    typedef ::std::ios_base::fmtflags  aspect_type;\n\n    explicit  ios_flags_saver( state_type &s )\n        : s_save_( s ), a_save_( s.flags() )\n        {}\n    ios_flags_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.flags(a) )\n        {}\n    ~ios_flags_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.flags( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n\n    ios_flags_saver& operator=(const ios_flags_saver&);\n};\n\nclass ios_precision_saver\n{\npublic:\n    typedef ::std::ios_base    state_type;\n    typedef ::std::streamsize  aspect_type;\n\n    explicit  ios_precision_saver( state_type &s )\n        : s_save_( s ), a_save_( s.precision() )\n        {}\n    ios_precision_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.precision(a) )\n        {}\n    ~ios_precision_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.precision( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n\n    ios_precision_saver& operator=(const ios_precision_saver&);\n};\n\nclass ios_width_saver\n{\npublic:\n    typedef ::std::ios_base    state_type;\n    typedef ::std::streamsize  aspect_type;\n\n    explicit  ios_width_saver( state_type &s )\n        : s_save_( s ), a_save_( s.width() )\n        {}\n    ios_width_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.width(a) )\n        {}\n    ~ios_width_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.width( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    ios_width_saver& operator=(const ios_width_saver&);\n};\n\n\n//  Advanced stream state saver class template declarations  -----------------//\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_iostate_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n    typedef ::std::ios_base::iostate  aspect_type;\n\n    explicit  basic_ios_iostate_saver( state_type &s )\n        : s_save_( s ), a_save_( s.rdstate() )\n        {}\n    basic_ios_iostate_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.rdstate() )\n        { s.clear(a); }\n    ~basic_ios_iostate_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.clear( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_iostate_saver& operator=(const basic_ios_iostate_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_exception_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n    typedef ::std::ios_base::iostate  aspect_type;\n\n    explicit  basic_ios_exception_saver( state_type &s )\n        : s_save_( s ), a_save_( s.exceptions() )\n        {}\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))\n    basic_ios_exception_saver( state_type &s, aspect_type a )\n#else\n    basic_ios_exception_saver( state_type &s, aspect_type const &a )\n#endif\n        : s_save_( s ), a_save_( s.exceptions() )\n        { s.exceptions(a); }\n    ~basic_ios_exception_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.exceptions( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_exception_saver& operator=(const basic_ios_exception_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_tie_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>        state_type;\n    typedef ::std::basic_ostream<Ch, Tr> *  aspect_type;\n\n    explicit  basic_ios_tie_saver( state_type &s )\n        : s_save_( s ), a_save_( s.tie() )\n        {}\n    basic_ios_tie_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.tie(a) )\n        {}\n    ~basic_ios_tie_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.tie( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_tie_saver& operator=(const basic_ios_tie_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_rdbuf_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>          state_type;\n    typedef ::std::basic_streambuf<Ch, Tr> *  aspect_type;\n\n    explicit  basic_ios_rdbuf_saver( state_type &s )\n        : s_save_( s ), a_save_( s.rdbuf() )\n        {}\n    basic_ios_rdbuf_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.rdbuf(a) )\n        {}\n    ~basic_ios_rdbuf_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.rdbuf( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_rdbuf_saver& operator=(const basic_ios_rdbuf_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_fill_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>        state_type;\n    typedef typename state_type::char_type  aspect_type;\n\n    explicit  basic_ios_fill_saver( state_type &s )\n        : s_save_( s ), a_save_( s.fill() )\n        {}\n    basic_ios_fill_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.fill(a) )\n        {}\n    ~basic_ios_fill_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.fill( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_fill_saver& operator=(const basic_ios_fill_saver&);\n};\n\n#ifndef BOOST_NO_STD_LOCALE\ntemplate < typename Ch, class Tr >\nclass basic_ios_locale_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr> state_type;\n    typedef ::std::locale aspect_type;\n\n    explicit basic_ios_locale_saver( state_type &s )\n        : s_save_( s ), a_save_( s.getloc() )\n        {}\n    basic_ios_locale_saver( state_type &s, aspect_type const &a )\n        : s_save_( s ), a_save_( s.imbue(a) )\n        {}\n    ~basic_ios_locale_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.imbue( a_save_ ); }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    basic_ios_locale_saver& operator=(const basic_ios_locale_saver&);\n};\n#endif\n\n\n//  User-defined stream state saver class declarations  ----------------------//\n\nclass ios_iword_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n    typedef long             aspect_type;\n\n    explicit ios_iword_saver( state_type &s, index_type i )\n        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )\n        {}\n    ios_iword_saver( state_type &s, index_type i, aspect_type const &a )\n        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )\n        { s.iword(i) = a; }\n    ~ios_iword_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.iword( i_save_ ) = a_save_; }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    index_type const   i_save_;\n\n    ios_iword_saver& operator=(const ios_iword_saver&);\n};\n\nclass ios_pword_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n    typedef void *           aspect_type;\n\n    explicit  ios_pword_saver( state_type &s, index_type i )\n        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )\n        {}\n    ios_pword_saver( state_type &s, index_type i, aspect_type const &a )\n        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )\n        { s.pword(i) = a; }\n    ~ios_pword_saver()\n        { this->restore(); }\n\n    void  restore()\n        { s_save_.pword( i_save_ ) = a_save_; }\n\nprivate:\n    state_type &       s_save_;\n    aspect_type const  a_save_;\n    index_type const   i_save_;\n\n    ios_pword_saver operator=(const ios_pword_saver&);\n};\n\n\n//  Combined stream state saver class (template) declarations  ---------------//\n\nclass ios_base_all_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n\n    explicit  ios_base_all_saver( state_type &s )\n        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )\n        , a3_save_( s.width() )\n        {}\n\n    ~ios_base_all_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        s_save_.width( a3_save_ );\n        s_save_.precision( a2_save_ );\n        s_save_.flags( a1_save_ );\n    }\n\nprivate:\n    state_type &                s_save_;\n    state_type::fmtflags const  a1_save_;\n    ::std::streamsize const     a2_save_;\n    ::std::streamsize const     a3_save_;\n\n    ios_base_all_saver& operator=(const ios_base_all_saver&);\n};\n\ntemplate < typename Ch, class Tr >\nclass basic_ios_all_saver\n{\npublic:\n    typedef ::std::basic_ios<Ch, Tr>  state_type;\n\n    explicit  basic_ios_all_saver( state_type &s )\n        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )\n        , a3_save_( s.width() ), a4_save_( s.rdstate() )\n        , a5_save_( s.exceptions() ), a6_save_( s.tie() )\n        , a7_save_( s.rdbuf() ), a8_save_( s.fill() )\n        #ifndef BOOST_NO_STD_LOCALE\n        , a9_save_( s.getloc() )\n        #endif\n        {}\n\n    ~basic_ios_all_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        #ifndef BOOST_NO_STD_LOCALE\n        s_save_.imbue( a9_save_ );\n        #endif\n        s_save_.fill( a8_save_ );\n        s_save_.rdbuf( a7_save_ );\n        s_save_.tie( a6_save_ );\n        s_save_.exceptions( a5_save_ );\n        s_save_.clear( a4_save_ );\n        s_save_.width( a3_save_ );\n        s_save_.precision( a2_save_ );\n        s_save_.flags( a1_save_ );\n    }\n\nprivate:\n    state_type &                            s_save_;\n    typename state_type::fmtflags const     a1_save_;\n    ::std::streamsize const                 a2_save_;\n    ::std::streamsize const                 a3_save_;\n    typename state_type::iostate const      a4_save_;\n    typename state_type::iostate const      a5_save_;\n    ::std::basic_ostream<Ch, Tr> * const    a6_save_;\n    ::std::basic_streambuf<Ch, Tr> * const  a7_save_;\n    typename state_type::char_type const    a8_save_;\n    #ifndef BOOST_NO_STD_LOCALE\n    ::std::locale const                     a9_save_;\n    #endif\n\n    basic_ios_all_saver& operator=(const basic_ios_all_saver&);\n};\n\nclass ios_all_word_saver\n{\npublic:\n    typedef ::std::ios_base  state_type;\n    typedef int              index_type;\n\n    ios_all_word_saver( state_type &s, index_type i )\n        : s_save_( s ), i_save_( i ), a1_save_( s.iword(i) )\n        , a2_save_( s.pword(i) )\n        {}\n\n    ~ios_all_word_saver()\n        { this->restore(); }\n\n    void  restore()\n    {\n        s_save_.pword( i_save_ ) = a2_save_;\n        s_save_.iword( i_save_ ) = a1_save_;\n    }\n\nprivate:\n    state_type &      s_save_;\n    index_type const  i_save_;\n    long const        a1_save_;\n    void * const      a2_save_;\n\n    ios_all_word_saver& operator=(const ios_all_word_saver&);\n};\n\n\n}  // namespace io\n}  // namespace boost\n\n\n#endif  // BOOST_IO_IOS_STATE_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/io_fwd.hpp",
    "content": "//  Boost io_fwd.hpp header file  --------------------------------------------//\n\n//  Copyright 2002 Daryle Walker.  Use, modification, and distribution are subject\n//  to the Boost Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/io/> for the library's home page.\n\n#ifndef BOOST_IO_FWD_HPP\n#define BOOST_IO_FWD_HPP\n\n#include <iosfwd>  // for std::char_traits (declaration)\n\n\nnamespace boost\n{\nnamespace io\n{\n\n\n//  From <boost/io/ios_state.hpp>  -------------------------------------------//\n\nclass ios_flags_saver;\nclass ios_precision_saver;\nclass ios_width_saver;\nclass ios_base_all_saver;\n\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_iostate_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_exception_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_tie_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_rdbuf_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_fill_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_locale_saver;\ntemplate < typename Ch, class Tr = ::std::char_traits<Ch> >\n    class basic_ios_all_saver;\n\ntypedef basic_ios_iostate_saver<char>        ios_iostate_saver;\ntypedef basic_ios_iostate_saver<wchar_t>    wios_iostate_saver;\ntypedef basic_ios_exception_saver<char>      ios_exception_saver;\ntypedef basic_ios_exception_saver<wchar_t>  wios_exception_saver;\ntypedef basic_ios_tie_saver<char>            ios_tie_saver;\ntypedef basic_ios_tie_saver<wchar_t>        wios_tie_saver;\ntypedef basic_ios_rdbuf_saver<char>          ios_rdbuf_saver;\ntypedef basic_ios_rdbuf_saver<wchar_t>      wios_rdbuf_saver;\ntypedef basic_ios_fill_saver<char>           ios_fill_saver;\ntypedef basic_ios_fill_saver<wchar_t>       wios_fill_saver;\ntypedef basic_ios_locale_saver<char>         ios_locale_saver;\ntypedef basic_ios_locale_saver<wchar_t>     wios_locale_saver;\ntypedef basic_ios_all_saver<char>            ios_all_saver;\ntypedef basic_ios_all_saver<wchar_t>        wios_all_saver;\n\nclass ios_iword_saver;\nclass ios_pword_saver;\nclass ios_all_word_saver;\n\n\n}  // namespace io\n}  // namespace boost\n\n\n#endif  // BOOST_IO_FWD_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/is_placeholder.hpp",
    "content": "#ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED\n#define BOOST_IS_PLACEHOLDER_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined( _MSC_VER ) && ( _MSC_VER >= 1020 )\n# pragma once\n#endif\n\n\n//  is_placeholder.hpp - TR1 is_placeholder metafunction\n//\n//  Copyright (c) 2006 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n\nnamespace boost\n{\n\ntemplate< class T > struct is_placeholder\n{\n    enum _vt { value = 0 };\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/detail/config_def.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// no include guard multiple inclusion intended\n\n//\n// This is a temporary workaround until the bulk of this is\n// available in boost config.\n// 23/02/03 thw\n//\n\n#include <boost/config.hpp> // for prior\n#include <boost/detail/workaround.hpp>\n\n#ifdef BOOST_ITERATOR_CONFIG_DEF\n# error you have nested config_def #inclusion.\n#else \n# define BOOST_ITERATOR_CONFIG_DEF\n#endif \n\n// We enable this always now.  Otherwise, the simple case in\n// libs/iterator/test/constant_iterator_arrow.cpp fails to compile\n// because the operator-> return is improperly deduced as a non-const\n// pointer.\n#if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)           \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531))\n\n// Recall that in general, compilers without partial specialization\n// can't strip constness.  Consider counting_iterator, which normally\n// passes a const Value to iterator_facade.  As a result, any code\n// which makes a std::vector of the iterator's value_type will fail\n// when its allocator declares functions overloaded on reference and\n// const_reference (the same type).\n//\n// Furthermore, Borland 5.5.1 drops constness in enough ways that we\n// end up using a proxy for operator[] when we otherwise shouldn't.\n// Using reference constness gives it an extra hint that it can\n// return the value_type from operator[] directly, but is not\n// strictly necessary.  Not sure how best to resolve this one.\n\n# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1\n\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)                                       \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x5A0))                   \\\n    || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \\\n    || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))                \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))\n    \n# define BOOST_NO_LVALUE_RETURN_DETECTION\n\n# if 0 // test code\n  struct v  {};\n\n  typedef  char (&no)[3];\n\n  template <class T>\n  no foo(T const&, ...);\n\n  template <class T>\n  char foo(T&, int);\n\n\n  struct value_iterator\n  {\n      v operator*() const;\n  };\n\n  template <class T>\n  struct lvalue_deref_helper\n  {\n      static T& x;\n      enum { value = (sizeof(foo(*x,0)) == 1) };\n  };\n\n  int z2[(lvalue_deref_helper<v*>::value == 1) ? 1 : -1];\n  int z[(lvalue_deref_helper<value_iterator>::value) == 1 ? -1 : 1 ];\n# endif \n\n#endif\n\n#if BOOST_WORKAROUND(__MWERKS__, <=0x2407)\n#  define BOOST_NO_IS_CONVERTIBLE // \"is_convertible doesn't work for simple types\"\n#endif\n\n#if BOOST_WORKAROUND(__GNUC__, == 2)                                                                            \\\n    || BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__)   \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\n#  define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile:\n\n#  if 0 // test code\n    #include <boost/type_traits/is_convertible.hpp>\n    template <class T>\n    struct foo\n    {\n        foo(T);\n\n        template <class U>\n        foo(foo<U> const& other) : p(other.p) { }\n\n        T p;\n    };\n\n    bool x = boost::is_convertible<foo<int const*>, foo<int*> >::value;\n#  endif\n\n#endif\n\n\n#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE))\n# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#endif \n\n# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#  define BOOST_ARG_DEPENDENT_TYPENAME typename\n# else\n#  define BOOST_ARG_DEPENDENT_TYPENAME\n# endif\n\n# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n\n// GCC-2.95 eagerly instantiates templated constructors and conversion\n// operators in convertibility checks, causing premature errors.\n//\n// Borland's problems are harder to diagnose due to lack of an\n// instantiation stack backtrace.  They may be due in part to the fact\n// that it drops cv-qualification willy-nilly in templates.\n#  define BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n# endif \n\n// no include guard; multiple inclusion intended\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/detail/config_undef.hpp",
    "content": "// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// no include guard multiple inclusion intended\n\n//\n// This is a temporary workaround until the bulk of this is\n// available in boost config.\n// 23/02/03 thw\n//\n\n#undef BOOST_NO_IS_CONVERTIBLE\n#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE\n#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#undef BOOST_ARG_DEPENDENT_TYPENAME\n#undef BOOST_NO_LVALUE_RETURN_DETECTION\n#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n\n#ifdef BOOST_ITERATOR_CONFIG_DEF\n# undef BOOST_ITERATOR_CONFIG_DEF\n#else\n# error missing or nested #include config_def\n#endif \n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/detail/enable_if.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ENABLE_IF_23022003THW_HPP\n#define BOOST_ENABLE_IF_23022003THW_HPP\n\n#include <boost/detail/workaround.hpp>\n#include <boost/mpl/identity.hpp>\n\n#include <boost/iterator/detail/config_def.hpp>\n\n//\n// Boost iterators uses its own enable_if cause we need\n// special semantics for deficient compilers.\n// 23/02/03 thw\n//\n\nnamespace boost\n{\n\n  namespace iterators\n  {\n    //\n    // Base machinery for all kinds of enable if\n    //\n    template<bool>\n    struct enabled\n    {\n      template<typename T>\n      struct base\n      {\n        typedef T type;\n      };\n    };\n    \n    //\n    // For compilers that don't support \"Substitution Failure Is Not An Error\"\n    // enable_if falls back to always enabled. See comments\n    // on operator implementation for consequences.\n    //\n    template<>\n    struct enabled<false>\n    {\n      template<typename T>\n      struct base\n      {\n#ifdef BOOST_NO_SFINAE\n\n        typedef T type;\n\n        // This way to do it would give a nice error message containing\n        // invalid overload, but has the big disadvantage that\n        // there is no reference to user code in the error message.\n        //\n        // struct invalid_overload;\n        // typedef invalid_overload type;\n        //\n#endif\n      };\n    };\n\n\n    template <class Cond,\n              class Return>\n    struct enable_if\n# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)\n      : enabled<(Cond::value)>::template base<Return>\n# else\n      : mpl::identity<Return>\n# endif \n    {\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n        typedef Return type;\n# endif \n    };\n\n  } // namespace iterators\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ENABLE_IF_23022003THW_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/detail/facade_iterator_category.hpp",
    "content": "// Copyright David Abrahams 2003. Use, modification and distribution is\n// subject to the Boost Software License, Version 1.0. (See accompanying\n// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n#ifndef FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n# define FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n\n# include <boost/iterator/iterator_categories.hpp>\n\n# include <boost/mpl/or.hpp>  // used in iterator_tag inheritance logic\n# include <boost/mpl/and.hpp>\n# include <boost/mpl/if.hpp>\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/identity.hpp>\n# include <boost/mpl/assert.hpp>\n\n# include <boost/type_traits/is_same.hpp>\n# include <boost/type_traits/is_const.hpp>\n# include <boost/type_traits/is_reference.hpp>\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/type_traits/is_same.hpp>\n\n# include <boost/iterator/detail/config_def.hpp> // try to keep this last\n\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n#  include <boost/detail/indirect_traits.hpp>\n# endif\n\n//\n// iterator_category deduction for iterator_facade\n//\n\n// forward declaration\nnamespace boost { struct use_default; }\n\nnamespace boost { namespace detail  {\n\nstruct input_output_iterator_tag\n  : std::input_iterator_tag\n{\n    // Using inheritance for only input_iterator_tag helps to avoid\n    // ambiguities when a stdlib implementation dispatches on a\n    // function which is overloaded on both input_iterator_tag and\n    // output_iterator_tag, as STLPort does, in its __valid_range\n    // function.  I claim it's better to avoid the ambiguity in these\n    // cases.\n    operator std::output_iterator_tag() const\n    {\n        return std::output_iterator_tag();\n    }\n};\n\n//\n// True iff the user has explicitly disabled writability of this\n// iterator.  Pass the iterator_facade's Value parameter and its\n// nested ::reference type.\n//\ntemplate <class ValueParam, class Reference>\nstruct iterator_writability_disabled\n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic?\n  : mpl::or_<\n        is_const<Reference>\n      , boost::detail::indirect_traits::is_reference_to_const<Reference>\n      , is_const<ValueParam>\n    >\n# else \n  : is_const<ValueParam>\n# endif \n{};\n\n\n//\n// Convert an iterator_facade's traversal category, Value parameter,\n// and ::reference type to an appropriate old-style category.\n//\n// If writability has been disabled per the above metafunction, the\n// result will not be convertible to output_iterator_tag.\n//\n// Otherwise, if Traversal == single_pass_traversal_tag, the following\n// conditions will result in a tag that is convertible both to\n// input_iterator_tag and output_iterator_tag:\n//\n//    1. Reference is a reference to non-const\n//    2. Reference is not a reference and is convertible to Value\n//\ntemplate <class Traversal, class ValueParam, class Reference>\nstruct iterator_facade_default_category\n  : mpl::eval_if<\n        mpl::and_<\n            is_reference<Reference>\n          , is_convertible<Traversal,forward_traversal_tag>\n        >\n      , mpl::eval_if<\n            is_convertible<Traversal,random_access_traversal_tag>\n          , mpl::identity<std::random_access_iterator_tag>\n          , mpl::if_<\n                is_convertible<Traversal,bidirectional_traversal_tag>\n              , std::bidirectional_iterator_tag\n              , std::forward_iterator_tag\n            >\n        >\n      , typename mpl::eval_if<\n            mpl::and_<\n                is_convertible<Traversal, single_pass_traversal_tag>\n                \n                // check for readability\n              , is_convertible<Reference, ValueParam>\n            >\n          , mpl::identity<std::input_iterator_tag>\n          , mpl::identity<Traversal>\n        >\n    >\n{\n};\n\n// True iff T is convertible to an old-style iterator category.\ntemplate <class T>\nstruct is_iterator_category\n  : mpl::or_<\n        is_convertible<T,std::input_iterator_tag>\n      , is_convertible<T,std::output_iterator_tag>\n    >\n{\n};\n\ntemplate <class T>\nstruct is_iterator_traversal\n  : is_convertible<T,incrementable_traversal_tag>\n{};\n\n//\n// A composite iterator_category tag convertible to Category (a pure\n// old-style category) and Traversal (a pure traversal tag).\n// Traversal must be a strict increase of the traversal power given by\n// Category.\n//\ntemplate <class Category, class Traversal>\nstruct iterator_category_with_traversal\n  : Category, Traversal\n{\n# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    // Make sure this isn't used to build any categories where\n    // convertibility to Traversal is redundant.  Should just use the\n    // Category element in that case.\n    BOOST_MPL_ASSERT_NOT((\n        is_convertible<\n              typename iterator_category_to_traversal<Category>::type\n            , Traversal\n          >));\n\n    BOOST_MPL_ASSERT((is_iterator_category<Category>));\n    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));\n    BOOST_MPL_ASSERT_NOT((is_iterator_traversal<Category>));\n#  if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))\n    BOOST_MPL_ASSERT((is_iterator_traversal<Traversal>));\n#  endif \n# endif \n};\n\n// Computes an iterator_category tag whose traversal is Traversal and\n// which is appropriate for an iterator\ntemplate <class Traversal, class ValueParam, class Reference>\nstruct facade_iterator_category_impl\n{\n# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));\n# endif \n    \n    typedef typename iterator_facade_default_category<\n        Traversal,ValueParam,Reference\n    >::type category;\n    \n    typedef typename mpl::if_<\n        is_same<\n            Traversal\n          , typename iterator_category_to_traversal<category>::type\n        >\n      , category\n      , iterator_category_with_traversal<category,Traversal>\n    >::type type;\n};\n\n//\n// Compute an iterator_category for iterator_facade\n//\ntemplate <class CategoryOrTraversal, class ValueParam, class Reference>\nstruct facade_iterator_category\n  : mpl::eval_if<\n        is_iterator_category<CategoryOrTraversal>\n      , mpl::identity<CategoryOrTraversal> // old-style categories are fine as-is\n      , facade_iterator_category_impl<CategoryOrTraversal,ValueParam,Reference>\n    >\n{\n};\n\n}} // namespace boost::detail\n\n# include <boost/iterator/detail/config_undef.hpp>\n\n#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/interoperable.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_INTEROPERABLE_23022003THW_HPP\n# define BOOST_INTEROPERABLE_23022003THW_HPP\n\n# include <boost/mpl/bool.hpp>\n# include <boost/mpl/or.hpp>\n\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/iterator/detail/config_def.hpp> // must appear last\n\nnamespace boost\n{\n\n  //\n  // Meta function that determines whether two\n  // iterator types are considered interoperable.\n  //\n  // Two iterator types A,B are considered interoperable if either\n  // A is convertible to B or vice versa.\n  // This interoperability definition is in sync with the\n  // standards requirements on constant/mutable container\n  // iterators (23.1 [lib.container.requirements]).\n  //\n  // For compilers that don't support is_convertible \n  // is_interoperable gives false positives. See comments\n  // on operator implementation for consequences.\n  //\n  template <typename A, typename B>\n  struct is_interoperable\n# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n    : mpl::true_\n# else\n    : mpl::or_<\n          is_convertible< A, B >\n        , is_convertible< B, A > >\n# endif\n  { \n  };\n\n} // namespace boost\n\n# include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_INTEROPERABLE_23022003THW_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/iterator_adaptor.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n#define BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n\n#include <boost/static_assert.hpp>\n#include <boost/iterator.hpp>\n#include <boost/detail/iterator.hpp>\n\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/iterator/detail/enable_if.hpp>\n\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/or.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n\n#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n# include <boost/type_traits/remove_reference.hpp>\n#endif\n\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/iterator/detail/config_def.hpp>\n\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n  // Used as a default template argument internally, merely to\n  // indicate \"use the default\", this can also be passed by users\n  // explicitly in order to specify that the default should be used.\n  struct use_default;\n  \n# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n  // the incompleteness of use_default causes massive problems for\n  // is_convertible (naturally).  This workaround is fortunately not\n  // needed for vc6/vc7.\n  template<class To>\n  struct is_convertible<use_default,To>\n    : mpl::false_ {};\n# endif \n  \n  namespace detail\n  {\n\n    // \n    // Result type used in enable_if_convertible meta function.\n    // This can be an incomplete type, as only pointers to \n    // enable_if_convertible< ... >::type are used.\n    // We could have used void for this, but conversion to\n    // void* is just to easy.\n    //\n    struct enable_type;\n  }\n\n\n  //\n  // enable_if for use in adapted iterators constructors.\n  //\n  // In order to provide interoperability between adapted constant and\n  // mutable iterators, adapted iterators will usually provide templated\n  // conversion constructors of the following form\n  //\n  // template <class BaseIterator>\n  // class adapted_iterator :\n  //   public iterator_adaptor< adapted_iterator<Iterator>, Iterator >\n  // {\n  // public:\n  //   \n  //   ...\n  //\n  //   template <class OtherIterator>\n  //   adapted_iterator(\n  //       OtherIterator const& it\n  //     , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0);\n  //\n  //   ...\n  // };\n  //\n  // enable_if_convertible is used to remove those overloads from the overload\n  // set that cannot be instantiated. For all practical purposes only overloads\n  // for constant/mutable interaction will remain. This has the advantage that\n  // meta functions like boost::is_convertible do not return false positives,\n  // as they can only look at the signature of the conversion constructor\n  // and not at the actual instantiation.\n  //\n  // enable_if_interoperable can be safely used in user code. It falls back to\n  // always enabled for compilers that don't support enable_if or is_convertible. \n  // There is no need for compiler specific workarounds in user code. \n  //\n  // The operators implementation relies on boost::is_convertible not returning\n  // false positives for user/library defined iterator types. See comments\n  // on operator implementation for consequences.\n  //\n#  if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n  \n  template<typename From, typename To>\n  struct enable_if_convertible\n  {\n     typedef typename mpl::if_<\n         mpl::or_<\n             is_same<From,To>\n           , is_convertible<From, To>\n         >\n      , boost::detail::enable_type\n      , int&\n     >::type type;\n  };\n  \n#  elif defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE)\n  \n  template <class From, class To>\n  struct enable_if_convertible\n  {\n      typedef boost::detail::enable_type type;\n  };\n  \n#  elif BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300\n  \n  // For some reason vc7.1 needs us to \"cut off\" instantiation\n  // of is_convertible in a few cases.\n  template<typename From, typename To>\n  struct enable_if_convertible\n    : iterators::enable_if<\n        mpl::or_<\n            is_same<From,To>\n          , is_convertible<From, To>\n        >\n      , boost::detail::enable_type\n    >\n  {};\n  \n#  else \n  \n  template<typename From, typename To>\n  struct enable_if_convertible\n    : iterators::enable_if<\n          is_convertible<From, To>\n        , boost::detail::enable_type\n      >\n  {};\n      \n# endif\n  \n  //\n  // Default template argument handling for iterator_adaptor\n  //\n  namespace detail\n  {\n    // If T is use_default, return the result of invoking\n    // DefaultNullaryFn, otherwise return T.\n    template <class T, class DefaultNullaryFn>\n    struct ia_dflt_help\n      : mpl::eval_if<\n            is_same<T, use_default>\n          , DefaultNullaryFn\n          , mpl::identity<T>\n        >\n    {\n    };\n\n    // A metafunction which computes an iterator_adaptor's base class,\n    // a specialization of iterator_facade.\n    template <\n        class Derived\n      , class Base\n      , class Value\n      , class Traversal\n      , class Reference\n      , class Difference\n    >\n    struct iterator_adaptor_base\n    {\n        typedef iterator_facade<\n            Derived\n            \n# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY\n          , typename boost::detail::ia_dflt_help<\n                Value\n              , mpl::eval_if<\n                    is_same<Reference,use_default>\n                  , iterator_value<Base>\n                  , remove_reference<Reference>\n                >\n            >::type\n# else\n          , typename boost::detail::ia_dflt_help<\n                Value, iterator_value<Base>\n            >::type\n# endif\n            \n          , typename boost::detail::ia_dflt_help<\n                Traversal\n              , iterator_traversal<Base>\n            >::type\n\n          , typename boost::detail::ia_dflt_help<\n                Reference\n              , mpl::eval_if<\n                    is_same<Value,use_default>\n                  , iterator_reference<Base>\n                  , add_reference<Value>\n                >\n            >::type\n\n          , typename boost::detail::ia_dflt_help<\n                Difference, iterator_difference<Base>\n            >::type\n        >\n        type;\n    };\n  \n    // workaround for aC++ CR JAGaf33512\n    template <class Tr1, class Tr2>\n    inline void iterator_adaptor_assert_traversal ()\n    {\n      BOOST_STATIC_ASSERT((is_convertible<Tr1, Tr2>::value));\n    }\n  }\n  \n  //\n  // Iterator Adaptor\n  //\n  // The parameter ordering changed slightly with respect to former\n  // versions of iterator_adaptor The idea is that when the user needs\n  // to fiddle with the reference type it is highly likely that the\n  // iterator category has to be adjusted as well.  Any of the\n  // following four template arguments may be ommitted or explicitly\n  // replaced by use_default.\n  //\n  //   Value - if supplied, the value_type of the resulting iterator, unless\n  //      const. If const, a conforming compiler strips constness for the\n  //      value_type. If not supplied, iterator_traits<Base>::value_type is used\n  //\n  //   Category - the traversal category of the resulting iterator. If not\n  //      supplied, iterator_traversal<Base>::type is used.\n  //\n  //   Reference - the reference type of the resulting iterator, and in\n  //      particular, the result type of operator*(). If not supplied but\n  //      Value is supplied, Value& is used. Otherwise\n  //      iterator_traits<Base>::reference is used.\n  //\n  //   Difference - the difference_type of the resulting iterator. If not\n  //      supplied, iterator_traits<Base>::difference_type is used.\n  //\n  template <\n      class Derived\n    , class Base\n    , class Value        = use_default\n    , class Traversal    = use_default\n    , class Reference    = use_default\n    , class Difference   = use_default\n  >\n  class iterator_adaptor\n    : public boost::detail::iterator_adaptor_base<\n        Derived, Base, Value, Traversal, Reference, Difference\n      >::type\n  {\n      friend class iterator_core_access;\n\n   protected:\n      typedef typename boost::detail::iterator_adaptor_base<\n          Derived, Base, Value, Traversal, Reference, Difference\n      >::type super_t;\n   public:\n      iterator_adaptor() {}\n\n      explicit iterator_adaptor(Base const &iter)\n          : m_iterator(iter)\n      {\n      }\n\n      typedef Base base_type;\n\n      Base const& base() const\n        { return m_iterator; }\n\n   protected:\n      // for convenience in derived classes\n      typedef iterator_adaptor<Derived,Base,Value,Traversal,Reference,Difference> iterator_adaptor_;\n      \n      //\n      // lvalue access to the Base object for Derived\n      //\n      Base const& base_reference() const\n        { return m_iterator; }\n\n      Base& base_reference()\n        { return m_iterator; }\n\n   private:\n      //\n      // Core iterator interface for iterator_facade.  This is private\n      // to prevent temptation for Derived classes to use it, which\n      // will often result in an error.  Derived classes should use\n      // base_reference(), above, to get direct access to m_iterator.\n      // \n      typename super_t::reference dereference() const\n        { return *m_iterator; }\n\n      template <\n      class OtherDerived, class OtherIterator, class V, class C, class R, class D\n      >   \n      bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const\n      {\n        // Maybe readd with same_distance\n        //           BOOST_STATIC_ASSERT(\n        //               (detail::same_category_and_difference<Derived,OtherDerived>::value)\n        //               );\n          return m_iterator == x.base();\n      }\n\n      typedef typename iterator_category_to_traversal<\n          typename super_t::iterator_category\n      >::type my_traversal;\n\n# define BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(cat) \\\n      boost::detail::iterator_adaptor_assert_traversal<my_traversal, cat>();\n\n      void advance(typename super_t::difference_type n)\n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)\n          m_iterator += n;\n      }\n  \n      void increment() { ++m_iterator; }\n\n      void decrement() \n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(bidirectional_traversal_tag)\n           --m_iterator;\n      }\n\n      template <\n          class OtherDerived, class OtherIterator, class V, class C, class R, class D\n      >   \n      typename super_t::difference_type distance_to(\n          iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const\n      {\n          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)\n          // Maybe readd with same_distance\n          //           BOOST_STATIC_ASSERT(\n          //               (detail::same_category_and_difference<Derived,OtherDerived>::value)\n          //               );\n          return y.base() - m_iterator;\n      }\n\n# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL\n      \n   private: // data members\n      Base m_iterator;\n  };\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/iterator_categories.hpp",
    "content": "// (C) Copyright Jeremy Siek 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_CATEGORIES_HPP\n# define BOOST_ITERATOR_CATEGORIES_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/iterator.hpp>\n# include <boost/iterator/detail/config_def.hpp>\n\n# include <boost/detail/workaround.hpp>\n\n# include <boost/mpl/eval_if.hpp>\n# include <boost/mpl/identity.hpp>\n# include <boost/mpl/placeholders.hpp>\n# include <boost/mpl/aux_/lambda_support.hpp>\n\n# include <boost/type_traits/is_convertible.hpp>\n\n# include <boost/static_assert.hpp>\n\nnamespace boost {\n\n//\n// Traversal Categories\n//\n\nstruct no_traversal_tag {};\n\nstruct incrementable_traversal_tag \n  : no_traversal_tag\n{\n//     incrementable_traversal_tag() {}\n//     incrementable_traversal_tag(std::output_iterator_tag const&) {};\n};\n  \nstruct single_pass_traversal_tag\n  : incrementable_traversal_tag\n{\n//     single_pass_traversal_tag() {}\n//     single_pass_traversal_tag(std::input_iterator_tag const&) {};\n};\n  \nstruct forward_traversal_tag\n  : single_pass_traversal_tag\n{\n//     forward_traversal_tag() {}\n//     forward_traversal_tag(std::forward_iterator_tag const&) {};\n};\n  \nstruct bidirectional_traversal_tag\n  : forward_traversal_tag\n{\n//     bidirectional_traversal_tag() {};\n//     bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {};\n};\n  \nstruct random_access_traversal_tag\n  : bidirectional_traversal_tag\n{\n//     random_access_traversal_tag() {};\n//     random_access_traversal_tag(std::random_access_iterator_tag const&) {};\n};\n\nnamespace detail\n{  \n  //\n  // Convert a \"strictly old-style\" iterator category to a traversal\n  // tag.  This is broken out into a separate metafunction to reduce\n  // the cost of instantiating iterator_category_to_traversal, below,\n  // for new-style types.\n  //\n  template <class Cat>\n  struct old_category_to_traversal\n    : mpl::eval_if<\n          is_convertible<Cat,std::random_access_iterator_tag>\n        , mpl::identity<random_access_traversal_tag>\n        , mpl::eval_if<\n              is_convertible<Cat,std::bidirectional_iterator_tag>\n            , mpl::identity<bidirectional_traversal_tag>\n            , mpl::eval_if<\n                  is_convertible<Cat,std::forward_iterator_tag>\n                , mpl::identity<forward_traversal_tag>\n                , mpl::eval_if<\n                      is_convertible<Cat,std::input_iterator_tag>\n                    , mpl::identity<single_pass_traversal_tag>\n                    , mpl::eval_if<\n                          is_convertible<Cat,std::output_iterator_tag>\n                        , mpl::identity<incrementable_traversal_tag>\n                        , void\n                      >\n                  >\n              >\n          >\n      >\n  {};\n\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n  template <>\n  struct old_category_to_traversal<int>\n  {\n      typedef int type;\n  };\n# endif\n\n  template <class Traversal>\n  struct pure_traversal_tag\n    : mpl::eval_if<\n          is_convertible<Traversal,random_access_traversal_tag>\n        , mpl::identity<random_access_traversal_tag>\n        , mpl::eval_if<\n              is_convertible<Traversal,bidirectional_traversal_tag>\n            , mpl::identity<bidirectional_traversal_tag>\n            , mpl::eval_if<\n                  is_convertible<Traversal,forward_traversal_tag>\n                , mpl::identity<forward_traversal_tag>\n                , mpl::eval_if<\n                      is_convertible<Traversal,single_pass_traversal_tag>\n                    , mpl::identity<single_pass_traversal_tag>\n                    , mpl::eval_if<\n                          is_convertible<Traversal,incrementable_traversal_tag>\n                        , mpl::identity<incrementable_traversal_tag>\n                        , void\n                      >\n                  >\n              >\n          >\n      >\n  {\n  };\n  \n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n  template <>\n  struct pure_traversal_tag<int>\n  {\n      typedef int type;\n  };\n# endif\n\n} // namespace detail\n\n\n//\n// Convert an iterator category into a traversal tag\n//\ntemplate <class Cat>\nstruct iterator_category_to_traversal\n  : mpl::eval_if< // if already convertible to a traversal tag, we're done.\n        is_convertible<Cat,incrementable_traversal_tag>\n      , mpl::identity<Cat>\n      , boost::detail::old_category_to_traversal<Cat>\n    >\n{};\n\n// Trait to get an iterator's traversal category\ntemplate <class Iterator = mpl::_1>\nstruct iterator_traversal\n  : iterator_category_to_traversal<\n        typename boost::detail::iterator_traits<Iterator>::iterator_category\n    >\n{};\n\n# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work\n// out well.  Instantiating the nested apply template also\n// requires instantiating iterator_traits on the\n// placeholder. Instead we just specialize it as a metafunction\n// class.\ntemplate <>\nstruct iterator_traversal<mpl::_1>\n{\n    template <class T>\n    struct apply : iterator_traversal<T>\n    {};\n};\ntemplate <>\nstruct iterator_traversal<mpl::_>\n  : iterator_traversal<mpl::_1>\n{};\n# endif\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_CATEGORIES_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/iterator_concepts.hpp",
    "content": "// (C) Copyright Jeremy Siek 2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_ITERATOR_CONCEPTS_HPP\n#define BOOST_ITERATOR_CONCEPTS_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/iterator/iterator_categories.hpp>\n\n// Use boost::detail::iterator_traits to work around some MSVC/Dinkumware problems.\n#include <boost/detail/iterator.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/is_integral.hpp>\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/or.hpp>\n\n#include <boost/static_assert.hpp>\n\n// Use boost/limits to work around missing limits headers on some compilers\n#include <boost/limits.hpp>\n#include <boost/config.hpp>\n\n#include <algorithm>\n\n#include <boost/concept/detail/concept_def.hpp>\n\nnamespace boost_concepts\n{\n  // Used a different namespace here (instead of \"boost\") so that the\n  // concept descriptions do not take for granted the names in\n  // namespace boost.\n\n  //===========================================================================\n  // Iterator Access Concepts\n\n  BOOST_concept(ReadableIterator,(Iterator))\n    : boost::Assignable<Iterator>\n    , boost::CopyConstructible<Iterator>\n\n  {\n      typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type value_type;\n      typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference reference;\n\n      BOOST_CONCEPT_USAGE(ReadableIterator)\n      {\n\n          value_type v = *i;\n          boost::ignore_unused_variable_warning(v);\n      }\n  private:\n      Iterator i;\n  };\n  \n  template <\n      typename Iterator\n    , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type\n  >\n  struct WritableIterator\n    : boost::CopyConstructible<Iterator>\n  {\n      BOOST_CONCEPT_USAGE(WritableIterator)\n      {\n          *i = v;\n      }\n  private:\n      ValueType v;\n      Iterator i;\n  };\n\n  template <\n      typename Iterator\n    , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type\n  >\n  struct WritableIteratorConcept : WritableIterator<Iterator,ValueType> {};\n  \n  BOOST_concept(SwappableIterator,(Iterator))\n  {\n      BOOST_CONCEPT_USAGE(SwappableIterator)\n      {\n          std::iter_swap(i1, i2);\n      }\n  private:\n      Iterator i1;\n      Iterator i2;\n  };\n\n  BOOST_concept(LvalueIterator,(Iterator))\n  {\n      typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type;\n      \n      BOOST_CONCEPT_USAGE(LvalueIterator)\n      {\n        value_type& r = const_cast<value_type&>(*i);\n        boost::ignore_unused_variable_warning(r);\n      }\n  private:\n      Iterator i;\n  };\n\n  \n  //===========================================================================\n  // Iterator Traversal Concepts\n\n  BOOST_concept(IncrementableIterator,(Iterator))\n    : boost::Assignable<Iterator>\n    , boost::CopyConstructible<Iterator>\n  {\n      typedef typename boost::iterator_traversal<Iterator>::type traversal_category;\n\n      BOOST_CONCEPT_ASSERT((\n        boost::Convertible<\n            traversal_category\n          , boost::incrementable_traversal_tag\n        >));\n\n      BOOST_CONCEPT_USAGE(IncrementableIterator)\n      {\n          ++i;\n          (void)i++;\n      }\n  private:\n      Iterator i;\n  };\n\n  BOOST_concept(SinglePassIterator,(Iterator))\n    : IncrementableIterator<Iterator>\n    , boost::EqualityComparable<Iterator>\n\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category\n           , boost::single_pass_traversal_tag\n          > ));\n  };\n\n  BOOST_concept(ForwardTraversal,(Iterator))\n    : SinglePassIterator<Iterator>\n    , boost::DefaultConstructible<Iterator>\n  {\n      typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type;\n      \n      BOOST_MPL_ASSERT((boost::is_integral<difference_type>));\n      BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);\n\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category\n           , boost::forward_traversal_tag\n          > ));\n  };\n  \n  BOOST_concept(BidirectionalTraversal,(Iterator))\n    : ForwardTraversal<Iterator>\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category\n           , boost::bidirectional_traversal_tag\n          > ));\n\n      BOOST_CONCEPT_USAGE(BidirectionalTraversal)\n      {\n          --i;\n          (void)i--;\n      }\n   private:\n      Iterator i;\n  };\n\n  BOOST_concept(RandomAccessTraversal,(Iterator))\n    : BidirectionalTraversal<Iterator>\n  {\n      BOOST_CONCEPT_ASSERT((\n          boost::Convertible<\n             BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category\n           , boost::random_access_traversal_tag\n          > ));\n\n      BOOST_CONCEPT_USAGE(RandomAccessTraversal)\n      {\n          i += n;\n          i = i + n;\n          i = n + i;\n          i -= n;\n          i = i - n;\n          n = i - j;\n      }\n      \n   private:\n      typename BidirectionalTraversal<Iterator>::difference_type n;\n      Iterator i, j;\n  };\n\n  //===========================================================================\n  // Iterator Interoperability \n\n  namespace detail\n  {\n    template <typename Iterator1, typename Iterator2>\n    void interop_single_pass_constraints(Iterator1 const& i1, Iterator2 const& i2)\n    {\n        bool b;\n        b = i1 == i2;\n        b = i1 != i2;\n\n        b = i2 == i1;\n        b = i2 != i1;\n        boost::ignore_unused_variable_warning(b);\n    }\n\n    template <typename Iterator1, typename Iterator2>\n    void interop_rand_access_constraints(\n        Iterator1 const& i1, Iterator2 const& i2,\n        boost::random_access_traversal_tag, boost::random_access_traversal_tag)\n    {\n        bool b;\n        typename boost::detail::iterator_traits<Iterator2>::difference_type n;\n        b = i1 <  i2;\n        b = i1 <= i2;\n        b = i1 >  i2;\n        b = i1 >= i2;\n        n = i1 -  i2;\n\n        b = i2 <  i1;\n        b = i2 <= i1;\n        b = i2 >  i1;\n        b = i2 >= i1;\n        n = i2 -  i1;\n        boost::ignore_unused_variable_warning(b);\n        boost::ignore_unused_variable_warning(n);\n    }\n\n    template <typename Iterator1, typename Iterator2>\n    void interop_rand_access_constraints(\n        Iterator1 const&, Iterator2 const&,\n        boost::single_pass_traversal_tag, boost::single_pass_traversal_tag)\n    { }\n\n  } // namespace detail\n\n  BOOST_concept(InteroperableIterator,(Iterator)(ConstIterator))\n  {\n   private:\n      typedef typename boost::detail::pure_traversal_tag<\n          typename boost::iterator_traversal<\n              Iterator\n          >::type\n      >::type traversal_category;\n\n      typedef typename boost::detail::pure_traversal_tag<\n          typename boost::iterator_traversal<\n              ConstIterator\n          >::type\n      >::type const_traversal_category;\n      \n  public:\n      BOOST_CONCEPT_ASSERT((SinglePassIterator<Iterator>));\n      BOOST_CONCEPT_ASSERT((SinglePassIterator<ConstIterator>));\n\n      BOOST_CONCEPT_USAGE(InteroperableIterator)\n      {\n          detail::interop_single_pass_constraints(i, ci);\n          detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category());\n\n          ci = i;\n      }\n      \n   private:\n      Iterator      i;\n      ConstIterator ci;\n  };\n\n} // namespace boost_concepts\n\n#include <boost/concept/detail/concept_undef.hpp>\n\n#endif // BOOST_ITERATOR_CONCEPTS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/iterator_facade.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP\n#define BOOST_ITERATOR_FACADE_23022003THW_HPP\n\n#include <boost/iterator.hpp>\n#include <boost/iterator/interoperable.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\n#include <boost/iterator/detail/facade_iterator_category.hpp>\n#include <boost/iterator/detail/enable_if.hpp>\n\n#include <boost/static_assert.hpp>\n#include <boost/utility/addressof.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_pod.hpp>\n\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/always.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/identity.hpp>\n\n#include <boost/iterator/detail/config_def.hpp> // this goes last\n\nnamespace boost\n{\n  // This forward declaration is required for the friend declaration\n  // in iterator_core_access\n  template <class I, class V, class TC, class R, class D> class iterator_facade;\n\n  namespace detail\n  {\n    // A binary metafunction class that always returns bool.  VC6\n    // ICEs on mpl::always<bool>, probably because of the default\n    // parameters.\n    struct always_bool2\n    {\n        template <class T, class U>\n        struct apply\n        {\n            typedef bool type;\n        };\n    };\n\n    //\n    // enable if for use in operator implementation.\n    //\n    template <\n        class Facade1\n      , class Facade2\n      , class Return\n    >\n    struct enable_if_interoperable\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    {\n        typedef typename mpl::if_<\n            mpl::or_<\n                is_convertible<Facade1, Facade2>\n              , is_convertible<Facade2, Facade1>\n            >\n          , Return\n          , int[3]\n        >::type type;\n    };        \n#else\n      : ::boost::iterators::enable_if<\n           mpl::or_<\n               is_convertible<Facade1, Facade2>\n             , is_convertible<Facade2, Facade1>\n           >\n         , Return\n        >\n    {};\n#endif \n\n    //\n    // Generates associated types for an iterator_facade with the\n    // given parameters.\n    //\n    template <\n        class ValueParam\n      , class CategoryOrTraversal\n      , class Reference \n      , class Difference\n    >\n    struct iterator_facade_types\n    {\n        typedef typename facade_iterator_category<\n            CategoryOrTraversal, ValueParam, Reference\n        >::type iterator_category;\n        \n        typedef typename remove_const<ValueParam>::type value_type;\n        \n        // Not the real associated pointer type\n        typedef typename mpl::eval_if<\n            boost::detail::iterator_writability_disabled<ValueParam,Reference>\n          , add_pointer<const value_type>\n          , add_pointer<value_type>\n        >::type pointer;\n      \n# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)                          \\\n    && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452))              \\\n        || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310)))     \\\n    || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101))              \\\n    || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310)\n\n        // To interoperate with some broken library/compiler\n        // combinations, user-defined iterators must be derived from\n        // std::iterator.  It is possible to implement a standard\n        // library for broken compilers without this limitation.\n#  define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1\n\n        typedef\n           iterator<iterator_category, value_type, Difference, pointer, Reference>\n        base;\n# endif\n    };\n\n    // iterators whose dereference operators reference the same value\n    // for all iterators into the same sequence (like many input\n    // iterators) need help with their postfix ++: the referenced\n    // value must be read and stored away before the increment occurs\n    // so that *a++ yields the originally referenced element and not\n    // the next one.\n    template <class Iterator>\n    class postfix_increment_proxy\n    {\n        typedef typename iterator_value<Iterator>::type value_type;\n     public:\n        explicit postfix_increment_proxy(Iterator const& x)\n          : stored_value(*x)\n        {}\n\n        // Returning a mutable reference allows nonsense like\n        // (*r++).mutate(), but it imposes fewer assumptions about the\n        // behavior of the value_type.  In particular, recall that\n        // (*r).mutate() is legal if operator* returns by value.\n        value_type&\n        operator*() const\n        {\n            return this->stored_value;\n        }\n     private:\n        mutable value_type stored_value;\n    };\n    \n    //\n    // In general, we can't determine that such an iterator isn't\n    // writable -- we also need to store a copy of the old iterator so\n    // that it can be written into.\n    template <class Iterator>\n    class writable_postfix_increment_proxy\n    {\n        typedef typename iterator_value<Iterator>::type value_type;\n     public:\n        explicit writable_postfix_increment_proxy(Iterator const& x)\n          : stored_value(*x)\n          , stored_iterator(x)\n        {}\n\n        // Dereferencing must return a proxy so that both *r++ = o and\n        // value_type(*r++) can work.  In this case, *r is the same as\n        // *r++, and the conversion operator below is used to ensure\n        // readability.\n        writable_postfix_increment_proxy const&\n        operator*() const\n        {\n            return *this;\n        }\n\n        // Provides readability of *r++\n        operator value_type&() const\n        {\n            return stored_value;\n        }\n\n        // Provides writability of *r++\n        template <class T>\n        T const& operator=(T const& x) const\n        {\n            *this->stored_iterator = x;\n            return x;\n        }\n\n        // This overload just in case only non-const objects are writable\n        template <class T>\n        T& operator=(T& x) const\n        {\n            *this->stored_iterator = x;\n            return x;\n        }\n\n        // Provides X(r++)\n        operator Iterator const&() const\n        {\n            return stored_iterator;\n        }\n        \n     private:\n        mutable value_type stored_value;\n        Iterator stored_iterator;\n    };\n\n# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n    template <class Reference, class Value>\n    struct is_non_proxy_reference_impl\n    {\n        static Reference r;\n        \n        template <class R>\n        static typename mpl::if_<\n            is_convertible<\n                R const volatile*\n              , Value const volatile*\n            >\n          , char[1]\n          , char[2]\n        >::type& helper(R const&);\n        \n        BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1);\n    };\n        \n    template <class Reference, class Value>\n    struct is_non_proxy_reference\n      : mpl::bool_<\n            is_non_proxy_reference_impl<Reference, Value>::value\n        >\n    {};\n# else \n    template <class Reference, class Value>\n    struct is_non_proxy_reference\n      : is_convertible<\n            typename remove_reference<Reference>::type\n            const volatile*\n          , Value const volatile*\n        >\n    {};\n# endif \n        \n    // A metafunction to choose the result type of postfix ++\n    //\n    // Because the C++98 input iterator requirements say that *r++ has\n    // type T (value_type), implementations of some standard\n    // algorithms like lexicographical_compare may use constructions\n    // like:\n    //\n    //          *r++ < *s++\n    //\n    // If *r++ returns a proxy (as required if r is writable but not\n    // multipass), this sort of expression will fail unless the proxy\n    // supports the operator<.  Since there are any number of such\n    // operations, we're not going to try to support them.  Therefore,\n    // even if r++ returns a proxy, *r++ will only return a proxy if\n    // *r also returns a proxy.\n    template <class Iterator, class Value, class Reference, class CategoryOrTraversal>\n    struct postfix_increment_result\n      : mpl::eval_if<\n            mpl::and_<\n                // A proxy is only needed for readable iterators\n                is_convertible<Reference,Value const&>\n                \n                // No multipass iterator can have values that disappear\n                // before positions can be re-visited\n              , mpl::not_<\n                    is_convertible<\n                        typename iterator_category_to_traversal<CategoryOrTraversal>::type\n                      , forward_traversal_tag\n                    >\n                >\n            >\n          , mpl::if_<\n                is_non_proxy_reference<Reference,Value>\n              , postfix_increment_proxy<Iterator>\n              , writable_postfix_increment_proxy<Iterator>\n            >\n          , mpl::identity<Iterator>\n        >\n    {};\n\n    // operator->() needs special support for input iterators to strictly meet the\n    // standard's requirements. If *i is not a reference type, we must still\n    // produce an lvalue to which a pointer can be formed.  We do that by\n    // returning a proxy object containing an instance of the reference object.\n    template <class Reference, class Pointer>\n    struct operator_arrow_dispatch // proxy references\n    {\n        struct proxy\n        {\n            explicit proxy(Reference const & x) : m_ref(x) {}\n            Reference* operator->() { return boost::addressof(m_ref); }\n            // This function is needed for MWCW and BCC, which won't call\n            // operator-> again automatically per 13.3.1.2 para 8\n            operator Reference*() { return boost::addressof(m_ref); }\n            Reference m_ref;\n        };\n        typedef proxy result_type;\n        static result_type apply(Reference const & x)\n        {\n            return result_type(x);\n        }\n    };\n\n    template <class T, class Pointer>\n    struct operator_arrow_dispatch<T&, Pointer> // \"real\" references\n    {\n        typedef Pointer result_type;\n        static result_type apply(T& x)\n        {\n            return boost::addressof(x);\n        }\n    };\n\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    // Deal with ETI\n    template<>\n    struct operator_arrow_dispatch<int, int>\n    {\n        typedef int result_type;\n    };\n# endif\n\n    // A proxy return type for operator[], needed to deal with\n    // iterators that may invalidate referents upon destruction.\n    // Consider the temporary iterator in *(a + n)\n    template <class Iterator>\n    class operator_brackets_proxy\n    {\n        // Iterator is actually an iterator_facade, so we do not have to\n        // go through iterator_traits to access the traits.\n        typedef typename Iterator::reference  reference;\n        typedef typename Iterator::value_type value_type;\n\n     public:\n        operator_brackets_proxy(Iterator const& iter)\n          : m_iter(iter)\n        {}\n\n        operator reference() const\n        {\n            return *m_iter;\n        }\n\n        operator_brackets_proxy& operator=(value_type const& val)\n        {\n            *m_iter = val;\n            return *this;\n        }\n\n     private:\n        Iterator m_iter;\n    };\n\n    // A metafunction that determines whether operator[] must return a\n    // proxy, or whether it can simply return a copy of the value_type.\n    template <class ValueType, class Reference>\n    struct use_operator_brackets_proxy\n      : mpl::not_<\n            mpl::and_<\n                // Really we want an is_copy_constructible trait here,\n                // but is_POD will have to suffice in the meantime.\n                boost::is_POD<ValueType>\n              , iterator_writability_disabled<ValueType,Reference>\n            >\n        >\n    {};\n        \n    template <class Iterator, class Value, class Reference>\n    struct operator_brackets_result\n    {\n        typedef typename mpl::if_<\n            use_operator_brackets_proxy<Value,Reference>\n          , operator_brackets_proxy<Iterator>\n          , Value\n        >::type type;\n    };\n\n    template <class Iterator>\n    operator_brackets_proxy<Iterator> make_operator_brackets_result(Iterator const& iter, mpl::true_)\n    {\n        return operator_brackets_proxy<Iterator>(iter);\n    }\n\n    template <class Iterator>\n    typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_)\n    {\n      return *iter;\n    }\n\n    struct choose_difference_type\n    {\n        template <class I1, class I2>\n        struct apply\n          :\n# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n          iterator_difference<I1>\n# elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n          mpl::if_<\n              is_convertible<I2,I1>\n            , typename I1::difference_type\n            , typename I2::difference_type\n          >\n# else \n          mpl::eval_if<\n              is_convertible<I2,I1>\n            , iterator_difference<I1>\n            , iterator_difference<I2>\n          >\n# endif \n        {};\n\n    };\n  } // namespace detail\n\n\n  // Macros which describe the declarations of binary operators\n# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY\n#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type)       \\\n    template <                                                              \\\n        class Derived1, class V1, class TC1, class Reference1, class Difference1 \\\n      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \\\n    >                                                                       \\\n    prefix typename mpl::apply2<result_type,Derived1,Derived2>::type \\\n    operator op(                                                            \\\n        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \\\n      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)\n# else \n#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type)   \\\n    template <                                                          \\\n        class Derived1, class V1, class TC1, class Reference1, class Difference1 \\\n      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \\\n    >                                                                   \\\n    prefix typename boost::detail::enable_if_interoperable<             \\\n        Derived1, Derived2                                              \\\n      , typename mpl::apply2<result_type,Derived1,Derived2>::type       \\\n    >::type                                                             \\\n    operator op(                                                        \\\n        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \\\n      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)\n# endif \n\n#  define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args)              \\\n    template <class Derived, class V, class TC, class R, class D>   \\\n    prefix Derived operator+ args\n\n  //\n  // Helper class for granting access to the iterator core interface.\n  //\n  // The simple core interface is used by iterator_facade. The core\n  // interface of a user/library defined iterator type should not be made public\n  // so that it does not clutter the public interface. Instead iterator_core_access\n  // should be made friend so that iterator_facade can access the core\n  // interface through iterator_core_access.\n  //\n  class iterator_core_access\n  {\n# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)                  \n      // Tasteless as this may seem, making all members public allows member templates\n      // to work in the absence of member template friends.\n   public:\n# else\n      \n      template <class I, class V, class TC, class R, class D> friend class iterator_facade;\n\n#  define BOOST_ITERATOR_FACADE_RELATION(op)                                \\\n      BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, boost::detail::always_bool2);\n\n      BOOST_ITERATOR_FACADE_RELATION(==)\n      BOOST_ITERATOR_FACADE_RELATION(!=)\n\n      BOOST_ITERATOR_FACADE_RELATION(<)\n      BOOST_ITERATOR_FACADE_RELATION(>)\n      BOOST_ITERATOR_FACADE_RELATION(<=)\n      BOOST_ITERATOR_FACADE_RELATION(>=)\n#  undef BOOST_ITERATOR_FACADE_RELATION\n\n      BOOST_ITERATOR_FACADE_INTEROP_HEAD(\n          friend, -, boost::detail::choose_difference_type)\n      ;\n\n      BOOST_ITERATOR_FACADE_PLUS_HEAD(\n          friend inline\n          , (iterator_facade<Derived, V, TC, R, D> const&\n           , typename Derived::difference_type)\n      )\n      ;\n\n      BOOST_ITERATOR_FACADE_PLUS_HEAD(\n          friend inline\n        , (typename Derived::difference_type\n           , iterator_facade<Derived, V, TC, R, D> const&)\n      )\n      ;\n\n# endif\n\n      template <class Facade>\n      static typename Facade::reference dereference(Facade const& f)\n      {\n          return f.dereference();\n      }\n\n      template <class Facade>\n      static void increment(Facade& f)\n      {\n          f.increment();\n      }\n\n      template <class Facade>\n      static void decrement(Facade& f)\n      {\n          f.decrement();\n      }\n\n      template <class Facade1, class Facade2>\n      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_)\n      {\n          return f1.equal(f2);\n      }\n\n      template <class Facade1, class Facade2>\n      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_)\n      {\n          return f2.equal(f1);\n      }\n\n      template <class Facade>\n      static void advance(Facade& f, typename Facade::difference_type n)\n      {\n          f.advance(n);\n      }\n\n      template <class Facade1, class Facade2>\n      static typename Facade1::difference_type distance_from(\n          Facade1 const& f1, Facade2 const& f2, mpl::true_)\n      {\n          return -f1.distance_to(f2);\n      }\n\n      template <class Facade1, class Facade2>\n      static typename Facade2::difference_type distance_from(\n          Facade1 const& f1, Facade2 const& f2, mpl::false_)\n      {\n          return f2.distance_to(f1);\n      }\n\n      //\n      // Curiously Recurring Template interface.\n      //\n      template <class I, class V, class TC, class R, class D>\n      static I& derived(iterator_facade<I,V,TC,R,D>& facade)\n      {\n          return *static_cast<I*>(&facade);\n      }\n\n      template <class I, class V, class TC, class R, class D>\n      static I const& derived(iterator_facade<I,V,TC,R,D> const& facade)\n      {\n          return *static_cast<I const*>(&facade);\n      }\n\n   private:\n      // objects of this class are useless\n      iterator_core_access(); //undefined\n  };\n\n  //\n  // iterator_facade - use as a public base class for defining new\n  // standard-conforming iterators.\n  //\n  template <\n      class Derived             // The derived iterator type being constructed\n    , class Value\n    , class CategoryOrTraversal\n    , class Reference   = Value&\n    , class Difference  = std::ptrdiff_t\n  >\n  class iterator_facade\n# ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE\n    : public boost::detail::iterator_facade_types<\n         Value, CategoryOrTraversal, Reference, Difference\n      >::base\n#  undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE\n# endif\n  {\n   private:\n      //\n      // Curiously Recurring Template interface.\n      //\n      Derived& derived()\n      {\n          return *static_cast<Derived*>(this);\n      }\n\n      Derived const& derived() const\n      {\n          return *static_cast<Derived const*>(this);\n      }\n\n      typedef boost::detail::iterator_facade_types<\n         Value, CategoryOrTraversal, Reference, Difference\n      > associated_types;\n\n      typedef boost::detail::operator_arrow_dispatch<\n          Reference\n        , typename associated_types::pointer\n      > operator_arrow_dispatch_;\n\n   protected:\n      // For use by derived classes\n      typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;\n      \n   public:\n\n      typedef typename associated_types::value_type value_type;\n      typedef Reference reference;\n      typedef Difference difference_type;\n\n      typedef typename operator_arrow_dispatch_::result_type pointer;\n\n      typedef typename associated_types::iterator_category iterator_category;\n\n      reference operator*() const\n      {\n          return iterator_core_access::dereference(this->derived());\n      }\n\n      pointer operator->() const\n      {\n          return operator_arrow_dispatch_::apply(*this->derived());\n      }\n        \n      typename boost::detail::operator_brackets_result<Derived,Value,reference>::type\n      operator[](difference_type n) const\n      {\n          typedef boost::detail::use_operator_brackets_proxy<Value,Reference> use_proxy;\n          \n          return boost::detail::make_operator_brackets_result<Derived>(\n              this->derived() + n\n            , use_proxy()\n          );\n      }\n\n      Derived& operator++()\n      {\n          iterator_core_access::increment(this->derived());\n          return this->derived();\n      }\n\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n      typename boost::detail::postfix_increment_result<Derived,Value,Reference,CategoryOrTraversal>::type\n      operator++(int)\n      {\n          typename boost::detail::postfix_increment_result<Derived,Value,Reference,CategoryOrTraversal>::type\n          tmp(this->derived());\n          ++*this;\n          return tmp;\n      }\n# endif\n      \n      Derived& operator--()\n      {\n          iterator_core_access::decrement(this->derived());\n          return this->derived();\n      }\n\n      Derived operator--(int)\n      {\n          Derived tmp(this->derived());\n          --*this;\n          return tmp;\n      }\n\n      Derived& operator+=(difference_type n)\n      {\n          iterator_core_access::advance(this->derived(), n);\n          return this->derived();\n      }\n\n      Derived& operator-=(difference_type n)\n      {\n          iterator_core_access::advance(this->derived(), -n);\n          return this->derived();\n      }\n\n      Derived operator-(difference_type x) const\n      {\n          Derived result(this->derived());\n          return result -= x;\n      }\n\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n      // There appears to be a bug which trashes the data of classes\n      // derived from iterator_facade when they are assigned unless we\n      // define this assignment operator.  This bug is only revealed\n      // (so far) in STLPort debug mode, but it's clearly a codegen\n      // problem so we apply the workaround for all MSVC6.\n      iterator_facade& operator=(iterator_facade const&)\n      {\n          return *this;\n      }\n# endif\n  };\n\n# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n  template <class I, class V, class TC, class R, class D>\n  inline typename boost::detail::postfix_increment_result<I,V,R,TC>::type\n  operator++(\n      iterator_facade<I,V,TC,R,D>& i\n    , int\n  )\n  {\n      typename boost::detail::postfix_increment_result<I,V,R,TC>::type\n          tmp(*static_cast<I*>(&i));\n      \n      ++i;\n      \n      return tmp;\n  }\n# endif \n\n  \n  //\n  // Comparison operator implementation. The library supplied operators\n  // enables the user to provide fully interoperable constant/mutable\n  // iterator types. I.e. the library provides all operators\n  // for all mutable/constant iterator combinations.\n  //\n  // Note though that this kind of interoperability for constant/mutable\n  // iterators is not required by the standard for container iterators.\n  // All the standard asks for is a conversion mutable -> constant.\n  // Most standard library implementations nowadays provide fully interoperable\n  // iterator implementations, but there are still heavily used implementations\n  // that do not provide them. (Actually it's even worse, they do not provide\n  // them for only a few iterators.)\n  //\n  // ?? Maybe a BOOST_ITERATOR_NO_FULL_INTEROPERABILITY macro should\n  //    enable the user to turn off mixed type operators\n  //\n  // The library takes care to provide only the right operator overloads.\n  // I.e.\n  //\n  // bool operator==(Iterator,      Iterator);\n  // bool operator==(ConstIterator, Iterator);\n  // bool operator==(Iterator,      ConstIterator);\n  // bool operator==(ConstIterator, ConstIterator);\n  //\n  //   ...\n  //\n  // In order to do so it uses c++ idioms that are not yet widely supported\n  // by current compiler releases. The library is designed to degrade gracefully\n  // in the face of compiler deficiencies. In general compiler\n  // deficiencies result in less strict error checking and more obscure\n  // error messages, functionality is not affected.\n  //\n  // For full operation compiler support for \"Substitution Failure Is Not An Error\"\n  // (aka. enable_if) and boost::is_convertible is required.\n  //\n  // The following problems occur if support is lacking.\n  //\n  // Pseudo code\n  //\n  // ---------------\n  // AdaptorA<Iterator1> a1;\n  // AdaptorA<Iterator2> a2;\n  //\n  // // This will result in a no such overload error in full operation\n  // // If enable_if or is_convertible is not supported\n  // // The instantiation will fail with an error hopefully indicating that\n  // // there is no operator== for Iterator1, Iterator2\n  // // The same will happen if no enable_if is used to remove\n  // // false overloads from the templated conversion constructor\n  // // of AdaptorA.\n  //\n  // a1 == a2;\n  // ----------------\n  //\n  // AdaptorA<Iterator> a;\n  // AdaptorB<Iterator> b;\n  //\n  // // This will result in a no such overload error in full operation\n  // // If enable_if is not supported the static assert used\n  // // in the operator implementation will fail.\n  // // This will accidently work if is_convertible is not supported.\n  //\n  // a == b;\n  // ----------------\n  //\n\n# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP\n#  define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()\n# else\n#  define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()\n# endif\n\n# define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type)                   \\\n  {                                                                             \\\n      /* For those compilers that do not support enable_if */                   \\\n      BOOST_STATIC_ASSERT((                                                     \\\n          is_interoperable< Derived1, Derived2 >::value                         \\\n      ));                                                                       \\\n      return_prefix iterator_core_access::base_op(                              \\\n          *static_cast<Derived1 const*>(&lhs)                                   \\\n        , *static_cast<Derived2 const*>(&rhs)                                   \\\n        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \\\n      );                                                                        \\\n  }\n\n# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \\\n  BOOST_ITERATOR_FACADE_INTEROP(                                    \\\n      op                                                            \\\n    , boost::detail::always_bool2                                   \\\n    , return_prefix                                                 \\\n    , base_op                                                       \\\n  )\n\n  BOOST_ITERATOR_FACADE_RELATION(==, return, equal)\n  BOOST_ITERATOR_FACADE_RELATION(!=, return !, equal)\n\n  BOOST_ITERATOR_FACADE_RELATION(<, return 0 >, distance_from)\n  BOOST_ITERATOR_FACADE_RELATION(>, return 0 <, distance_from)\n  BOOST_ITERATOR_FACADE_RELATION(<=, return 0 >=, distance_from)\n  BOOST_ITERATOR_FACADE_RELATION(>=, return 0 <=, distance_from)\n# undef BOOST_ITERATOR_FACADE_RELATION\n\n  // operator- requires an additional part in the static assertion\n  BOOST_ITERATOR_FACADE_INTEROP(\n      -\n    , boost::detail::choose_difference_type\n    , return\n    , distance_from\n  )\n# undef BOOST_ITERATOR_FACADE_INTEROP\n# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD\n\n# define BOOST_ITERATOR_FACADE_PLUS(args)           \\\n  BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args)     \\\n  {                                                 \\\n      Derived tmp(static_cast<Derived const&>(i));  \\\n      return tmp += n;                              \\\n  }\n\nBOOST_ITERATOR_FACADE_PLUS((\n  iterator_facade<Derived, V, TC, R, D> const& i\n  , typename Derived::difference_type n\n))\n\nBOOST_ITERATOR_FACADE_PLUS((\n    typename Derived::difference_type n\n    , iterator_facade<Derived, V, TC, R, D> const& i\n))\n# undef BOOST_ITERATOR_FACADE_PLUS\n# undef BOOST_ITERATOR_FACADE_PLUS_HEAD\n\n} // namespace boost\n\n#include <boost/iterator/detail/config_undef.hpp>\n\n#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/iterator_traits.hpp",
    "content": "// Copyright David Abrahams 2003.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef ITERATOR_TRAITS_DWA200347_HPP\n# define ITERATOR_TRAITS_DWA200347_HPP\n\n# include <boost/detail/iterator.hpp>\n# include <boost/detail/workaround.hpp>\n\nnamespace boost { \n\n// Unfortunately, g++ 2.95.x chokes when we define a class template\n// iterator_category which has the same name as its\n// std::iterator_category() function, probably due in part to the\n// \"std:: is visible globally\" hack it uses.  Use\n// BOOST_ITERATOR_CATEGORY to write code that's portable to older\n// GCCs.\n\n# if BOOST_WORKAROUND(__GNUC__, <= 2)\n#  define BOOST_ITERATOR_CATEGORY iterator_category_\n# else\n#  define BOOST_ITERATOR_CATEGORY iterator_category\n# endif\n\n\ntemplate <class Iterator>\nstruct iterator_value\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::value_type type;\n};\n  \ntemplate <class Iterator>\nstruct iterator_reference\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::reference type;\n};\n  \n  \ntemplate <class Iterator>\nstruct iterator_pointer\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::pointer type;\n};\n  \ntemplate <class Iterator>\nstruct iterator_difference\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::difference_type type;\n};\n\ntemplate <class Iterator>\nstruct BOOST_ITERATOR_CATEGORY\n{\n    typedef typename boost::detail::iterator_traits<Iterator>::iterator_category type;\n};\n\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\ntemplate <>\nstruct iterator_value<int>\n{\n    typedef void type;\n};\n  \ntemplate <>\nstruct iterator_reference<int>\n{\n    typedef void type;\n};\n\ntemplate <>\nstruct iterator_pointer<int>\n{\n    typedef void type;\n};\n  \ntemplate <>\nstruct iterator_difference<int>\n{\n    typedef void type;\n};\n  \ntemplate <>\nstruct BOOST_ITERATOR_CATEGORY<int>\n{\n    typedef void type;\n};\n# endif\n\n} // namespace boost::iterator\n\n#endif // ITERATOR_TRAITS_DWA200347_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator/reverse_iterator.hpp",
    "content": "// (C) Copyright David Abrahams 2002.\n// (C) Copyright Jeremy Siek    2002.\n// (C) Copyright Thomas Witt    2002.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP\n#define BOOST_REVERSE_ITERATOR_23022003THW_HPP\n\n#include <boost/next_prior.hpp>\n#include <boost/iterator.hpp>\n#include <boost/iterator/iterator_adaptor.hpp>\n\nnamespace boost\n{\n\n  //\n  //\n  //\n  template <class Iterator>\n  class reverse_iterator\n      : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >\n  {\n      typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;\n\n      friend class iterator_core_access;\n\n   public:\n      reverse_iterator() {}\n\n      explicit reverse_iterator(Iterator x) \n          : super_t(x) {}\n\n      template<class OtherIterator>\n      reverse_iterator(\n          reverse_iterator<OtherIterator> const& r\n          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0\n          )\n          : super_t(r.base())\n      {}\n\n   private:\n      typename super_t::reference dereference() const { return *boost::prior(this->base()); }\n    \n      void increment() { --this->base_reference(); }\n      void decrement() { ++this->base_reference(); }\n\n      void advance(typename super_t::difference_type n)\n      {\n          this->base_reference() += -n;\n      }\n\n      template <class OtherIterator>\n      typename super_t::difference_type\n      distance_to(reverse_iterator<OtherIterator> const& y) const\n      {\n          return this->base_reference() - y.base();\n      }\n  };\n\n  template <class BidirectionalIterator>\n  reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)\n  {\n      return reverse_iterator<BidirectionalIterator>(x);\n  }\n\n} // namespace boost\n\n#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/iterator.hpp",
    "content": "//  iterator.hpp workarounds for non-conforming standard libraries  ---------//\n\n//  (C) Copyright Beman Dawes 2000. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility for documentation.\n\n//  Revision History\n//  12 Jan 01 added <cstddef> for std::ptrdiff_t (Jens Maurer)\n//  28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams)\n//  26 Jun 00 Initial version (Jeremy Siek)\n\n#ifndef BOOST_ITERATOR_HPP\n#define BOOST_ITERATOR_HPP\n\n#include <iterator>\n#include <cstddef>           // std::ptrdiff_t\n#include <boost/config.hpp>\n\nnamespace boost\n{\n# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR)\n  template <class Category, class T,\n    class Distance = std::ptrdiff_t,\n    class Pointer = T*, class Reference = T&>\n  struct iterator\n  {\n    typedef T         value_type;\n    typedef Distance  difference_type;\n    typedef Pointer   pointer;\n    typedef Reference reference;\n    typedef Category  iterator_category;\n  };\n# else\n\n  // declare iterator_base in namespace detail to work around MSVC bugs which\n  // prevent derivation from an identically-named class in a different namespace.\n  namespace detail {\n   template <class Category, class T, class Distance, class Pointer, class Reference>\n#  if !defined(BOOST_MSVC_STD_ITERATOR)\n   struct iterator_base : std::iterator<Category, T, Distance, Pointer, Reference> {};\n#  else\n   struct iterator_base : std::iterator<Category, T, Distance>\n   {\n     typedef Reference reference;\n     typedef Pointer pointer;\n     typedef Distance difference_type;\n   };\n#  endif\n  }\n\n  template <class Category, class T, class Distance = std::ptrdiff_t,\n            class Pointer = T*, class Reference = T&>\n  struct iterator : boost::detail::iterator_base<Category, T, Distance, Pointer, Reference> {};\n# endif\n} // namespace boost\n\n#endif // BOOST_ITERATOR_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/lexical_cast.hpp",
    "content": "#ifndef BOOST_LEXICAL_CAST_INCLUDED\n#define BOOST_LEXICAL_CAST_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n// Boost lexical_cast.hpp header  -------------------------------------------//\n//\n// See http://www.boost.org/libs/conversion for documentation.\n// See end of this header for rights and permissions.\n//\n// what:  lexical_cast custom keyword cast\n// who:   contributed by Kevlin Henney,\n//        enhanced with contributions from Terje Slettebo,\n//        with additional fixes and suggestions from Gennaro Prota,\n//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,\n//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,\n//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters\n// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2012\n\n#include <boost/config.hpp>\n#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)\n#define BOOST_LCAST_NO_WCHAR_T\n#endif\n\n#include <climits>\n#include <cstddef>\n#include <string>\n#include <cstring>\n#include <cstdio>\n#include <typeinfo>\n#include <exception>\n#include <boost/limits.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/type_traits/ice.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/detail/lcast_precision.hpp>\n#include <boost/detail/workaround.hpp>\n\n\n#ifndef BOOST_NO_STD_LOCALE\n#   include <locale>\n#else\n#   ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n        // Getting error at this point means, that your STL library is old/lame/misconfigured.\n        // If nothing can be done with STL library, define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE,\n        // but beware: lexical_cast will understand only 'C' locale delimeters and thousands\n        // separators.\n#       error \"Unable to use <locale> header. Define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE to force \"\n#       error \"boost::lexical_cast to use only 'C' locale during conversions.\"\n#   endif\n#endif\n\n#ifdef BOOST_NO_STRINGSTREAM\n#include <strstream>\n#else\n#include <sstream>\n#endif\n\n#ifdef BOOST_NO_TYPEID\n#define BOOST_LCAST_THROW_BAD_CAST(S, T) throw_exception(bad_lexical_cast())\n#else\n#define BOOST_LCAST_THROW_BAD_CAST(Source, Target) \\\n    throw_exception(bad_lexical_cast(typeid(Source), typeid(Target)))\n#endif\n\nnamespace boost\n{\n    // exception used to indicate runtime lexical_cast failure\n    class BOOST_SYMBOL_VISIBLE bad_lexical_cast :\n    // workaround MSVC bug with std::bad_cast when _HAS_EXCEPTIONS == 0 \n#if defined(BOOST_MSVC) && defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS \n        public std::exception \n#else \n        public std::bad_cast \n#endif \n\n#if defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, < 0x560 )\n        // under bcc32 5.5.1 bad_cast doesn't derive from exception\n        , public std::exception\n#endif\n\n    {\n    public:\n        bad_lexical_cast() BOOST_NOEXCEPT :\n#ifndef BOOST_NO_TYPEID\n          source(&typeid(void)), target(&typeid(void))\n#else\n          source(0), target(0) // this breaks getters\n#endif\n        {\n        }\n\n        bad_lexical_cast(\n            const std::type_info &source_type_arg,\n            const std::type_info &target_type_arg) BOOST_NOEXCEPT :\n            source(&source_type_arg), target(&target_type_arg)\n        {\n        }\n\n        const std::type_info &source_type() const\n        {\n            return *source;\n        }\n        const std::type_info &target_type() const\n        {\n            return *target;\n        }\n\n#ifndef BOOST_NO_NOEXCEPT\n        virtual const char *what() const noexcept\n#else\n        virtual const char *what() const throw()\n#endif\n        {\n            return \"bad lexical cast: \"\n                   \"source type value could not be interpreted as target\";\n        }\n\n#ifndef BOOST_NO_NOEXCEPT\n        virtual ~bad_lexical_cast() BOOST_NOEXCEPT\n#else\n        virtual ~bad_lexical_cast() throw()\n#endif\n        {}\n    private:\n        const std::type_info *source;\n        const std::type_info *target;\n    };\n\n    namespace detail // widest_char\n    {\n        template <typename TargetChar, typename SourceChar>\n        struct widest_char\n        {\n            typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<\n                (sizeof(TargetChar) > sizeof(SourceChar))\n                , TargetChar\n                , SourceChar >::type type;\n        };\n    }\n} // namespace boost\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(__SUNPRO_CC) && !defined(__PGIC__)\n\n#include <cmath>\n#include <istream>\n\n#if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n#include <array>\n#endif\n\n#include <boost/array.hpp>\n#include <boost/numeric/conversion/cast.hpp>\n#include <boost/type_traits/make_unsigned.hpp>\n#include <boost/type_traits/is_signed.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/remove_pointer.hpp>\n#include <boost/math/special_functions/sign.hpp>\n#include <boost/math/special_functions/fpclassify.hpp>\n#include <boost/range/iterator_range_core.hpp>\n#include <boost/container/container_fwd.hpp>\n#ifndef BOOST_NO_CWCHAR\n#   include <cwchar>\n#endif\n\nnamespace boost {\n    namespace detail // widest_char<...> (continuation)\n    {\n        struct not_a_character_type{};\n\n        template <typename CharT>\n        struct widest_char<not_a_character_type, CharT >\n        {\n            typedef CharT type;\n        };\n\n        template <typename CharT>\n        struct widest_char< CharT, not_a_character_type >\n        {\n            typedef CharT type;\n        };\n                \n        template <>\n        struct widest_char< not_a_character_type, not_a_character_type >\n        {\n            typedef char type;\n        };\n    } \n\n    namespace detail // is_char_or_wchar<...> and stream_char<...> templates\n    {\n        // returns true, if T is one of the character types\n        template <typename T>\n        struct is_char_or_wchar\n        {\n            typedef ::boost::type_traits::ice_or<\n                    ::boost::is_same< T, char >::value,\n                    #ifndef BOOST_LCAST_NO_WCHAR_T\n                        ::boost::is_same< T, wchar_t >::value,\n                    #endif\n                    #ifndef BOOST_NO_CHAR16_T\n                        ::boost::is_same< T, char16_t >::value,\n                    #endif\n                    #ifndef BOOST_NO_CHAR32_T\n                        ::boost::is_same< T, char32_t >::value,\n                    #endif\n                    ::boost::is_same< T, unsigned char >::value,\n                    ::boost::is_same< T, signed char >::value\n            > result_type;\n\n            BOOST_STATIC_CONSTANT(bool, value = (result_type::value) );\n        };\n\n        // selectors for choosing stream character type\n        // returns one of char, wchar_t, char16_t, char32_t or not_a_character_type types\n        template <typename Type>\n        struct stream_char\n        {\n            typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<\n                is_char_or_wchar<Type >::value,\n                Type,\n                boost::detail::not_a_character_type\n            >::type type;\n        };\n\n        template <>\n        struct stream_char<unsigned char>\n        {\n            typedef char type;\n        };\n\n        template <>\n        struct stream_char<signed char>\n        {\n            typedef char type;\n        };\n\n        template <typename CharT>\n        struct stream_char<CharT*>\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n\n        template <typename CharT>\n        struct stream_char<const CharT*>\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n\n        template <typename CharT>\n        struct stream_char<iterator_range<CharT*> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT*>::type type;\n        };\n    \n        template <typename CharT>\n        struct stream_char<iterator_range<const CharT*> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<const CharT*>::type type;\n        };\n\n        template <class CharT, class Traits, class Alloc>\n        struct stream_char< std::basic_string<CharT, Traits, Alloc> >\n        {\n            typedef CharT type;\n        };\n\n        template <class CharT, class Traits, class Alloc>\n        struct stream_char< ::boost::container::basic_string<CharT, Traits, Alloc> >\n        {\n            typedef CharT type;\n        };\n\n        template<typename CharT, std::size_t N>\n        struct stream_char<boost::array<CharT, N> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n\n        template<typename CharT, std::size_t N>\n        struct stream_char<boost::array<const CharT, N> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n\n#if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n        template <typename CharT, std::size_t N>\n        struct stream_char<std::array<CharT, N> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n\n        template <typename CharT, std::size_t N>\n        struct stream_char<std::array<const CharT, N> >\n        {\n            typedef BOOST_DEDUCED_TYPENAME stream_char<CharT>::type type;\n        };\n#endif // !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n\n#if !defined(BOOST_LCAST_NO_WCHAR_T) && defined(BOOST_NO_INTRINSIC_WCHAR_T)\n        template<>\n        struct stream_char<wchar_t>\n        {\n            typedef boost::detail::not_a_character_type type;\n        };\n\n        template<>\n        struct stream_char<wchar_t*>\n        {\n            typedef wchar_t type;\n        };\n\n        template<>\n        struct stream_char<const wchar_t*>\n        {\n            typedef wchar_t type;\n        };\n#endif\n    }\n\n    namespace detail // deduce_char_traits template\n    {\n\n        template<class CharT, class Target, class Source>\n        struct deduce_char_traits\n        {\n            typedef std::char_traits<CharT> type;\n        };\n\n        template<class CharT, class Traits, class Alloc, class Source>\n        struct deduce_char_traits< CharT\n                                 , std::basic_string<CharT,Traits,Alloc>\n                                 , Source\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Target, class Traits, class Alloc>\n        struct deduce_char_traits< CharT\n                                 , Target\n                                 , std::basic_string<CharT,Traits,Alloc>\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Traits, class Alloc, class Source>\n        struct deduce_char_traits< CharT\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc>\n                                 , Source\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Target, class Traits, class Alloc>\n        struct deduce_char_traits< CharT\n                                 , Target\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc>\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Traits, class Alloc1, class Alloc2>\n        struct deduce_char_traits< CharT\n                                 , std::basic_string<CharT,Traits,Alloc1>\n                                 , std::basic_string<CharT,Traits,Alloc2>\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Traits, class Alloc1, class Alloc2>\n        struct deduce_char_traits< CharT\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc1>\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc2>\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Traits, class Alloc1, class Alloc2>\n        struct deduce_char_traits< CharT\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc1>\n                                 , ::std::basic_string<CharT,Traits,Alloc2>\n                                 >\n        {\n            typedef Traits type;\n        };\n\n        template<class CharT, class Traits, class Alloc1, class Alloc2>\n        struct deduce_char_traits< CharT\n                                 , ::std::basic_string<CharT,Traits,Alloc1>\n                                 , ::boost::container::basic_string<CharT,Traits,Alloc2>\n                                 >\n        {\n            typedef Traits type;\n        };\n    }\n\n    namespace detail // lcast_src_length\n    {\n        // Return max. length of string representation of Source;\n        template< class Source // Source type of lexical_cast.\n                >\n        struct lcast_src_length\n        {\n            BOOST_STATIC_CONSTANT(std::size_t, value = 1);\n            // To check coverage, build the test with\n            // bjam --v2 profile optimization=off\n            static void check_coverage() {}\n        };\n\n        // Helper for integral types.\n        // Notes on length calculation:\n        // Max length for 32bit int with grouping \"\\1\" and thousands_sep ',':\n        // \"-2,1,4,7,4,8,3,6,4,7\"\n        //  ^                    - is_signed\n        //   ^                   - 1 digit not counted by digits10\n        //    ^^^^^^^^^^^^^^^^^^ - digits10 * 2\n        //\n        // Constant is_specialized is used instead of constant 1\n        // to prevent buffer overflow in a rare case when\n        // <boost/limits.hpp> doesn't add missing specialization for\n        // numeric_limits<T> for some integral type T.\n        // When is_specialized is false, the whole expression is 0.\n        template<class Source>\n        struct lcast_src_length_integral\n        {\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n            BOOST_STATIC_CONSTANT(std::size_t, value =\n                  std::numeric_limits<Source>::is_signed +\n                  std::numeric_limits<Source>::is_specialized + /* == 1 */\n                  std::numeric_limits<Source>::digits10 * 2\n              );\n#else\n            BOOST_STATIC_CONSTANT(std::size_t, value = 156);\n            BOOST_STATIC_ASSERT(sizeof(Source) * CHAR_BIT <= 256);\n#endif\n        };\n\n#define BOOST_LCAST_DEF(T)               \\\n    template<> struct lcast_src_length<T> \\\n        : lcast_src_length_integral<T>           \\\n    { static void check_coverage() {} };\n\n        BOOST_LCAST_DEF(short)\n        BOOST_LCAST_DEF(unsigned short)\n        BOOST_LCAST_DEF(int)\n        BOOST_LCAST_DEF(unsigned int)\n        BOOST_LCAST_DEF(long)\n        BOOST_LCAST_DEF(unsigned long)\n#if defined(BOOST_HAS_LONG_LONG)\n        BOOST_LCAST_DEF(boost::ulong_long_type)\n        BOOST_LCAST_DEF(boost::long_long_type )\n#elif defined(BOOST_HAS_MS_INT64)\n        BOOST_LCAST_DEF(unsigned __int64)\n        BOOST_LCAST_DEF(         __int64)\n#endif\n\n#undef BOOST_LCAST_DEF\n\n#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n        // Helper for floating point types.\n        // -1.23456789e-123456\n        // ^                   sign\n        //  ^                  leading digit\n        //   ^                 decimal point \n        //    ^^^^^^^^         lcast_precision<Source>::value\n        //            ^        \"e\"\n        //             ^       exponent sign\n        //              ^^^^^^ exponent (assumed 6 or less digits)\n        // sign + leading digit + decimal point + \"e\" + exponent sign == 5\n        template<class Source>\n        struct lcast_src_length_floating\n        {\n            BOOST_STATIC_ASSERT(\n                    std::numeric_limits<Source>::max_exponent10 <=  999999L &&\n                    std::numeric_limits<Source>::min_exponent10 >= -999999L\n                );\n            BOOST_STATIC_CONSTANT(std::size_t, value =\n                    5 + lcast_precision<Source>::value + 6\n                );\n        };\n\n        template<>\n        struct lcast_src_length<float>\n          : lcast_src_length_floating<float>\n        {\n            static void check_coverage() {}\n        };\n\n        template<>\n        struct lcast_src_length<double>\n          : lcast_src_length_floating<double>\n        {\n            static void check_coverage() {}\n        };\n\n        template<>\n        struct lcast_src_length<long double>\n          : lcast_src_length_floating<long double>\n        {\n            static void check_coverage() {}\n        };\n\n#endif // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION\n    }\n\n    namespace detail // '0', '+' and '-' constants\n    {\n        template<typename CharT> struct lcast_char_constants;\n\n        template<>\n        struct lcast_char_constants<char>\n        {\n            BOOST_STATIC_CONSTANT(char, zero  = '0');\n            BOOST_STATIC_CONSTANT(char, minus = '-');\n            BOOST_STATIC_CONSTANT(char, plus = '+');\n            BOOST_STATIC_CONSTANT(char, lowercase_e = 'e');\n            BOOST_STATIC_CONSTANT(char, capital_e = 'E');\n            BOOST_STATIC_CONSTANT(char, c_decimal_separator = '.');\n        };\n\n#ifndef BOOST_LCAST_NO_WCHAR_T\n        template<>\n        struct lcast_char_constants<wchar_t>\n        {\n            BOOST_STATIC_CONSTANT(wchar_t, zero  = L'0');\n            BOOST_STATIC_CONSTANT(wchar_t, minus = L'-');\n            BOOST_STATIC_CONSTANT(wchar_t, plus = L'+');\n            BOOST_STATIC_CONSTANT(wchar_t, lowercase_e = L'e');\n            BOOST_STATIC_CONSTANT(wchar_t, capital_e = L'E');\n            BOOST_STATIC_CONSTANT(wchar_t, c_decimal_separator = L'.');\n        };\n#endif\n\n#if !defined(BOOST_NO_CHAR16_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n        template<>\n        struct lcast_char_constants<char16_t>\n        {\n            BOOST_STATIC_CONSTANT(char16_t, zero  = u'0');\n            BOOST_STATIC_CONSTANT(char16_t, minus = u'-');\n            BOOST_STATIC_CONSTANT(char16_t, plus = u'+');\n            BOOST_STATIC_CONSTANT(char16_t, lowercase_e = u'e');\n            BOOST_STATIC_CONSTANT(char16_t, capital_e = u'E');\n            BOOST_STATIC_CONSTANT(char16_t, c_decimal_separator = u'.');\n        };\n#endif\n\n#if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n        template<>\n        struct lcast_char_constants<char32_t>\n        {\n            BOOST_STATIC_CONSTANT(char32_t, zero  = U'0');\n            BOOST_STATIC_CONSTANT(char32_t, minus = U'-');\n            BOOST_STATIC_CONSTANT(char32_t, plus = U'+');\n            BOOST_STATIC_CONSTANT(char32_t, lowercase_e = U'e');\n            BOOST_STATIC_CONSTANT(char32_t, capital_e = U'E');\n            BOOST_STATIC_CONSTANT(char32_t, c_decimal_separator = U'.');\n        };\n#endif\n    }\n\n    namespace detail // lcast_to_unsigned\n    {\n#if (defined _MSC_VER)\n# pragma warning( push )\n// C4146: unary minus operator applied to unsigned type, result still unsigned\n# pragma warning( disable : 4146 )\n#elif defined( __BORLANDC__ )\n# pragma option push -w-8041\n#endif\n        template<class T>\n        inline\n        BOOST_DEDUCED_TYPENAME make_unsigned<T>::type lcast_to_unsigned(T value) BOOST_NOEXCEPT\n        {\n            typedef BOOST_DEDUCED_TYPENAME make_unsigned<T>::type result_type;\n            const result_type uvalue = static_cast<result_type>(value);\n            return value < 0 ? -uvalue : uvalue;\n        }\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#elif defined( __BORLANDC__ )\n# pragma option pop\n#endif\n    }\n\n    namespace detail // lcast_put_unsigned\n    {\n        template<class Traits, class T, class CharT>\n        CharT* lcast_put_unsigned(const T n_param, CharT* finish)\n        {\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n            BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);\n#endif\n\n            typedef typename Traits::int_type int_type;\n            CharT const czero = lcast_char_constants<CharT>::zero;\n            int_type const zero = Traits::to_int_type(czero);\n            BOOST_DEDUCED_TYPENAME boost::mpl::if_c<\n                    (sizeof(int_type) > sizeof(T))\n                    , int_type\n                    , T\n            >::type n = n_param;\n\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n            std::locale loc;\n            if (loc != std::locale::classic()) {\n                typedef std::numpunct<CharT> numpunct;\n                numpunct const& np = BOOST_USE_FACET(numpunct, loc);\n                std::string const grouping = np.grouping();\n                std::string::size_type const grouping_size = grouping.size();\n\n                if ( grouping_size && grouping[0] > 0 )\n                {\n\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n                // Check that ulimited group is unreachable:\n                BOOST_STATIC_ASSERT(std::numeric_limits<T>::digits10 < CHAR_MAX);\n#endif\n                    CharT thousands_sep = np.thousands_sep();\n                    std::string::size_type group = 0; // current group number\n                    char last_grp_size = grouping[0];\n                    char left = last_grp_size;\n\n                    do\n                    {\n                        if(left == 0)\n                        {\n                            ++group;\n                            if(group < grouping_size)\n                            {\n                                char const grp_size = grouping[group];\n                                last_grp_size = grp_size <= 0 ? CHAR_MAX : grp_size;\n                            }\n\n                            left = last_grp_size;\n                            --finish;\n                            Traits::assign(*finish, thousands_sep);\n                        }\n\n                        --left;\n\n                        --finish;\n                        int_type const digit = static_cast<int_type>(n % 10U);\n                        Traits::assign(*finish, Traits::to_char_type(zero + digit));\n                        n /= 10;\n                    } while(n);\n                    return finish;\n                }\n            }\n#endif\n            {\n                do\n                {\n                    --finish;\n                    int_type const digit = static_cast<int_type>(n % 10U);\n                    Traits::assign(*finish, Traits::to_char_type(zero + digit));\n                    n /= 10;\n                } while(n);\n            }\n\n            return finish;\n        }\n    }\n\n    namespace detail // lcast_ret_unsigned\n    {\n        template<class Traits, class T, class CharT>\n        inline bool lcast_ret_unsigned(T& value, const CharT* const begin, const CharT* end)\n        {\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n            BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);\n#endif\n            typedef typename Traits::int_type int_type;\n            CharT const czero = lcast_char_constants<CharT>::zero;\n            --end;\n            value = 0;\n\n            if (begin > end || *end < czero || *end >= czero + 10)\n                return false;\n            value = *end - czero;\n            --end;\n            T multiplier = 1;\n            bool multiplier_overflowed = false;\n\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n            std::locale loc;\n            if (loc != std::locale::classic()) {\n                typedef std::numpunct<CharT> numpunct;\n                numpunct const& np = BOOST_USE_FACET(numpunct, loc);\n                std::string const& grouping = np.grouping();\n                std::string::size_type const grouping_size = grouping.size();\n\n                /* According to Programming languages - C++\n                 * we MUST check for correct grouping\n                 */\n                if (grouping_size && grouping[0] > 0)\n                {\n                    unsigned char current_grouping = 0;\n                    CharT const thousands_sep = np.thousands_sep();\n                    char remained = grouping[current_grouping] - 1;\n                    bool shall_we_return = true;\n\n                    for(;end>=begin; --end)\n                    {\n                        if (remained) {\n                            T const multiplier_10 = multiplier * 10;\n                            if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true;\n\n                            T const dig_value = *end - czero;\n                            T const new_sub_value = multiplier_10 * dig_value;\n\n                            if (*end < czero || *end >= czero + 10\n                                    /* detecting overflow */\n                                    || (dig_value && new_sub_value / dig_value != multiplier_10)\n                                    || static_cast<T>((std::numeric_limits<T>::max)()-new_sub_value) < value\n                                    || (multiplier_overflowed && dig_value)\n                                    )\n                                return false;\n\n                            value += new_sub_value;\n                            multiplier *= 10;\n                            --remained;\n                        } else {\n                            if ( !Traits::eq(*end, thousands_sep) ) //|| begin == end ) return false;\n                            {\n                                /*\n                                 * According to Programming languages - C++\n                                 * Digit grouping is checked. That is, the positions of discarded\n                                 * separators is examined for consistency with\n                                 * use_facet<numpunct<charT> >(loc ).grouping()\n                                 *\n                                 * BUT what if there is no separators at all and grouping()\n                                 * is not empty? Well, we have no extraced separators, so we\n                                 * won`t check them for consistency. This will allow us to\n                                 * work with \"C\" locale from other locales\n                                 */\n                                shall_we_return = false;\n                                break;\n                            } else {\n                                if ( begin == end ) return false;\n                                if (current_grouping < grouping_size-1 ) ++current_grouping;\n                                remained = grouping[current_grouping];\n                            }\n                        }\n                    }\n\n                    if (shall_we_return) return true;\n                }\n            }\n#endif\n            {\n                while ( begin <= end )\n                {\n                    T const multiplier_10 = multiplier * 10;\n                    if (multiplier_10 / 10 != multiplier) multiplier_overflowed = true;\n\n                    T const dig_value = *end - czero;\n                    T const new_sub_value = multiplier_10 * dig_value;\n\n                    if (*end < czero || *end >= czero + 10\n                            /* detecting overflow */\n                            || (dig_value && new_sub_value / dig_value != multiplier_10)\n                            || static_cast<T>((std::numeric_limits<T>::max)()-new_sub_value) < value\n                            || (multiplier_overflowed && dig_value)\n                            )\n                        return false;\n\n                    value += new_sub_value;\n                    multiplier *= 10;\n                    --end;\n                }\n            }\n            return true;\n        }\n    }\n\n    namespace detail\n    {\n        template <class CharT>\n        bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) BOOST_NOEXCEPT {\n            for( unsigned int i=0; i < len; ++i ) {\n                if ( val[i] != lcase[i] && val[i] != ucase[i] ) return false;\n            }\n\n            return true;\n        }\n\n        /* Returns true and sets the correct value if found NaN or Inf. */\n        template <class CharT, class T>\n        inline bool parse_inf_nan_impl(const CharT* begin, const CharT* end, T& value\n            , const CharT* lc_NAN, const CharT* lc_nan\n            , const CharT* lc_INFINITY, const CharT* lc_infinity\n            , const CharT opening_brace, const CharT closing_brace) BOOST_NOEXCEPT\n        {\n            using namespace std;\n            if (begin == end) return false;\n            const CharT minus = lcast_char_constants<CharT>::minus;\n            const CharT plus = lcast_char_constants<CharT>::plus;\n            const int inifinity_size = 8;\n\n            bool has_minus = false;\n            /* Parsing +/- */\n            if( *begin == minus)\n            {\n                ++ begin;\n                has_minus = true;\n            }\n            else if( *begin == plus ) ++begin;\n\n            if( end-begin < 3 ) return false;\n            if( lc_iequal(begin, lc_nan, lc_NAN, 3) )\n            {\n                begin += 3;\n                if (end != begin) /* It is 'nan(...)' or some bad input*/\n                {\n                    if(end-begin<2) return false; // bad input\n                    -- end;\n                    if( *begin != opening_brace || *end != closing_brace) return false; // bad input\n                }\n\n                if( !has_minus ) value = std::numeric_limits<T>::quiet_NaN();\n                else value = (boost::math::changesign) (std::numeric_limits<T>::quiet_NaN());\n                return true;\n            } else\n            if (( /* 'INF' or 'inf' */\n                  end-begin==3\n                  &&\n                  lc_iequal(begin, lc_infinity, lc_INFINITY, 3)\n                )\n                ||\n                ( /* 'INFINITY' or 'infinity' */\n                  end-begin==inifinity_size\n                  &&\n                  lc_iequal(begin, lc_infinity, lc_INFINITY, inifinity_size)\n                )\n             )\n            {\n                if( !has_minus ) value = std::numeric_limits<T>::infinity();\n                else value = (boost::math::changesign) (std::numeric_limits<T>::infinity());\n                return true;\n            }\n\n            return false;\n        }\n\n        template <class CharT, class T>\n        bool put_inf_nan_impl(CharT* begin, CharT*& end, const T& value\n                         , const CharT* lc_nan\n                         , const CharT* lc_infinity) BOOST_NOEXCEPT\n        {\n            using namespace std;\n            const CharT minus = lcast_char_constants<CharT>::minus;\n            if ( (boost::math::isnan)(value) )\n            {\n                if ( (boost::math::signbit)(value) )\n                {\n                    *begin = minus;\n                    ++ begin;\n                }\n\n                memcpy(begin, lc_nan, 3 * sizeof(CharT));\n                end = begin + 3;\n                return true;\n            } else if ( (boost::math::isinf)(value) )\n            {\n                if ( (boost::math::signbit)(value) )\n                {\n                    *begin = minus;\n                    ++ begin;\n                }\n\n                memcpy(begin, lc_infinity, 3 * sizeof(CharT));\n                end = begin + 3;\n                return true;\n            }\n\n            return false;\n        }\n\n\n#ifndef BOOST_LCAST_NO_WCHAR_T\n        template <class T>\n        bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) BOOST_NOEXCEPT\n        {\n            return parse_inf_nan_impl(begin, end, value\n                               , L\"NAN\", L\"nan\"\n                               , L\"INFINITY\", L\"infinity\"\n                               , L'(', L')');\n        }\n\n        template <class T>\n        bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) BOOST_NOEXCEPT\n        {\n            return put_inf_nan_impl(begin, end, value, L\"nan\", L\"infinity\");\n        }\n\n#endif\n#if !defined(BOOST_NO_CHAR16_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n        template <class T>\n        bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) BOOST_NOEXCEPT\n        {\n            return parse_inf_nan_impl(begin, end, value\n                               , u\"NAN\", u\"nan\"\n                               , u\"INFINITY\", u\"infinity\"\n                               , u'(', u')');\n        }\n\n        template <class T>\n        bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) BOOST_NOEXCEPT\n        {\n            return put_inf_nan_impl(begin, end, value, u\"nan\", u\"infinity\");\n        }\n#endif\n#if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n        template <class T>\n        bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) BOOST_NOEXCEPT\n        {\n            return parse_inf_nan_impl(begin, end, value\n                               , U\"NAN\", U\"nan\"\n                               , U\"INFINITY\", U\"infinity\"\n                               , U'(', U')');\n        }\n\n        template <class T>\n        bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) BOOST_NOEXCEPT\n        {\n            return put_inf_nan_impl(begin, end, value, U\"nan\", U\"infinity\");\n        }\n#endif\n\n        template <class CharT, class T>\n        bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT\n        {\n            return parse_inf_nan_impl(begin, end, value\n                               , \"NAN\", \"nan\"\n                               , \"INFINITY\", \"infinity\"\n                               , '(', ')');\n        }\n\n        template <class CharT, class T>\n        bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT\n        {\n            return put_inf_nan_impl(begin, end, value, \"nan\", \"infinity\");\n        }\n    }\n\n\n    namespace detail // lcast_ret_float\n    {\n        template <class T>\n        struct mantissa_holder_type\n        {\n            /* Can not be used with this type */\n        };\n\n        template <>\n        struct mantissa_holder_type<float>\n        {\n            typedef unsigned int type;\n        };\n\n        template <>\n        struct mantissa_holder_type<double>\n        {\n#if defined(BOOST_HAS_LONG_LONG)\n            typedef boost::ulong_long_type type;\n#elif defined(BOOST_HAS_MS_INT64)\n            typedef unsigned __int64 type;\n#endif\n        };\n\n        template<class Traits, class T, class CharT>\n        inline bool lcast_ret_float(T& value, const CharT* begin, const CharT* end)\n        {\n\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n            std::locale loc;\n            typedef std::numpunct<CharT> numpunct;\n            numpunct const& np = BOOST_USE_FACET(numpunct, loc);\n            std::string const grouping(\n                    (loc == std::locale::classic())\n                    ? std::string()\n                    : np.grouping()\n            );\n            std::string::size_type const grouping_size = grouping.size();\n            CharT const thousands_sep = grouping_size ? np.thousands_sep() : 0;\n            CharT const decimal_point = np.decimal_point();\n            bool found_grouping = false;\n            std::string::size_type last_grouping_pos = grouping_size - 1;\n#else\n            CharT const decimal_point = lcast_char_constants<CharT>::c_decimal_separator;\n#endif\n\n            CharT const czero = lcast_char_constants<CharT>::zero;\n            CharT const minus = lcast_char_constants<CharT>::minus;\n            CharT const plus = lcast_char_constants<CharT>::plus;\n            CharT const capital_e = lcast_char_constants<CharT>::capital_e;\n            CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;\n\n            value = static_cast<T>(0);\n\n            if (parse_inf_nan(begin, end, value)) return true;\n\n            typedef typename Traits::int_type int_type;\n            typedef BOOST_DEDUCED_TYPENAME mantissa_holder_type<T>::type mantissa_type;\n            int_type const zero = Traits::to_int_type(czero);\n            if (begin == end) return false;\n\n            /* Getting the plus/minus sign */\n            bool has_minus = false;\n            if (Traits::eq(*begin, minus) ) {\n                ++ begin;\n                has_minus = true;\n                if (begin == end) return false;\n            } else if (Traits::eq(*begin, plus) ) {\n                ++begin;\n                if (begin == end) return false;\n            }\n\n            bool found_decimal = false;\n            bool found_number_before_exp = false;\n            int pow_of_10 = 0;\n            mantissa_type mantissa=0;\n            bool is_mantissa_full = false;\n\n            char length_since_last_delim = 0;\n\n            while ( begin != end )\n            {\n                if (found_decimal) {\n                    /* We allow no thousand_separators after decimal point */\n\n                    mantissa_type tmp_mantissa = mantissa * 10u;\n                    if (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) break;\n                    if ( *begin < czero || *begin >= czero + 10 ) return false;\n                    if (    is_mantissa_full\n                            || tmp_mantissa / 10u != mantissa\n                            || (std::numeric_limits<mantissa_type>::max)()-(*begin - zero) < tmp_mantissa\n                            ) {\n                        is_mantissa_full = true;\n                        ++ begin;\n                        continue;\n                    }\n\n                    -- pow_of_10;\n                    mantissa = tmp_mantissa;\n                    mantissa += *begin - zero;\n\n                    found_number_before_exp = true;\n                } else {\n\n                    if (*begin >= czero && *begin < czero + 10) {\n\n                        /* Checking for mantissa overflow. If overflow will\n                         * occur, them we only increase multiplyer\n                         */\n                        mantissa_type tmp_mantissa = mantissa * 10u;\n                        if(     !is_mantissa_full\n                                && tmp_mantissa / 10u == mantissa\n                                && (std::numeric_limits<mantissa_type>::max)()-(*begin - zero) >= tmp_mantissa\n                            )\n                        {\n                            mantissa = tmp_mantissa;\n                            mantissa += *begin - zero;\n                        } else\n                        {\n                            is_mantissa_full = true;\n                            ++ pow_of_10;\n                        }\n\n                        found_number_before_exp = true;\n                        ++ length_since_last_delim;\n                    } else if (Traits::eq(*begin, decimal_point) || Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) {\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n                        /* If ( we need to check grouping\n                         *      and (   grouping missmatches\n                         *              or grouping position is incorrect\n                         *              or we are using the grouping position 0 twice\n                         *           )\n                         *    ) then return error\n                         */\n                        if( grouping_size && found_grouping\n                            && (\n                                   length_since_last_delim != grouping[0]\n                                   || last_grouping_pos>1\n                                   || (last_grouping_pos==0 && grouping_size>1)\n                                )\n                           ) return false;\n#endif\n\n                        if(Traits::eq(*begin, decimal_point)) {\n                            ++ begin;\n                            found_decimal = true;\n                            if (!found_number_before_exp && begin==end) return false;\n                            continue;\n                        }else {\n                            if (!found_number_before_exp) return false;\n                            break;\n                        }\n                    }\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n                    else if (grouping_size && Traits::eq(*begin, thousands_sep)){\n                        if(found_grouping)\n                        {\n                            /* It is not he first time, when we find thousands separator,\n                             * so we need to chek, is the distance between two groupings\n                             * equal to grouping[last_grouping_pos] */\n\n                            if (length_since_last_delim != grouping[last_grouping_pos] )\n                            {\n                                if (!last_grouping_pos) return false;\n                                else\n                                {\n                                    -- last_grouping_pos;\n                                    if (length_since_last_delim != grouping[last_grouping_pos]) return false;\n                                }\n                            } else\n                                /* We are calling the grouping[0] twice, when grouping size is more than 1 */\n                                if (grouping_size>1u && last_grouping_pos+1<grouping_size) return false;\n\n                        } else {\n                            /* Delimiter at the begining ',000' */\n                            if (!length_since_last_delim) return false;\n\n                            found_grouping = true;\n                            if (length_since_last_delim > grouping[last_grouping_pos] ) return false;\n                        }\n\n                        length_since_last_delim = 0;\n                        ++ begin;\n\n                        /* Delimiter at the end '100,' */\n                        if (begin == end) return false;\n                        continue;\n                    }\n#endif\n                    else return false;\n                }\n\n                ++begin;\n            }\n\n            // Exponent found\n            if ( begin != end && (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) ) {\n                ++ begin;\n                if ( begin == end ) return false;\n\n                bool exp_has_minus = false;\n                if(Traits::eq(*begin, minus)) {\n                    exp_has_minus = true;\n                    ++ begin;\n                    if ( begin == end ) return false;\n                } else if (Traits::eq(*begin, plus)) {\n                    ++ begin;\n                    if ( begin == end ) return false;\n                }\n\n                int exp_pow_of_10 = 0;\n                while ( begin != end )\n                {\n                    if ( *begin < czero\n                            || *begin >= czero + 10\n                            || exp_pow_of_10 * 10 < exp_pow_of_10) /* Overflows are checked lower more precisely*/\n                        return false;\n\n                    exp_pow_of_10 *= 10;\n                    exp_pow_of_10 += *begin - zero;\n                    ++ begin;\n                };\n\n                if ( exp_pow_of_10 ) {\n                    /* Overflows are checked lower */\n                    if ( exp_has_minus ) {\n                        pow_of_10 -= exp_pow_of_10;\n                    } else {\n                        pow_of_10 += exp_pow_of_10;\n                    }\n                }\n            }\n\n            /* We need a more accurate algorithm... We can not use current algorithm\n             * with long doubles (and with doubles if sizeof(double)==sizeof(long double)).\n             */\n            long double result = std::pow(10.0L, pow_of_10) * mantissa;\n            value = static_cast<T>( has_minus ? (boost::math::changesign)(result) : result);\n\n            if ( (boost::math::isinf)(value) || (boost::math::isnan)(value) ) return false;\n\n            return true;\n        }\n    }\n\n    namespace detail // stl_buf_unlocker\n    {\n        template< class BufferType, class CharT >\n        class stl_buf_unlocker: public BufferType{\n        public:\n            typedef BufferType base_class;\n#ifndef BOOST_NO_USING_TEMPLATE\n            using base_class::pptr;\n            using base_class::pbase;\n            using base_class::setg;\n            using base_class::setp;\n#else\n            CharT* pptr() const { return base_class::pptr(); }\n            CharT* pbase() const { return base_class::pbase(); }\n            void setg(CharT* gbeg, CharT* gnext, CharT* gend){ return base_class::setg(gbeg, gnext, gend); }\n            void setp(CharT* pbeg, CharT* pend) { return setp(pbeg, pend); }\n#endif\n        };\n    }\n\n    namespace detail\n    {\n        struct do_not_construct_out_stream_t{};\n    }\n\n    namespace detail // optimized stream wrapper\n    {\n        // String representation of Source has an upper limit.\n        template< class CharT // a result of widest_char transformation\n                , class Traits // usually char_traits<CharT>\n                , bool RequiresStringbuffer\n                >\n        class lexical_stream_limited_src\n        {\n\n#if defined(BOOST_NO_STRINGSTREAM)\n            typedef std::ostrstream                         out_stream_t;\n            typedef stl_buf_unlocker<std::strstreambuf, char>  unlocked_but_t;\n#elif defined(BOOST_NO_STD_LOCALE)\n            typedef std::ostringstream                      out_stream_t;\n            typedef stl_buf_unlocker<std::stringbuf, char>  unlocked_but_t;\n#else\n            typedef std::basic_ostringstream<CharT, Traits>       out_stream_t;\n            typedef stl_buf_unlocker<std::basic_stringbuf<CharT, Traits>, CharT> unlocked_but_t;\n#endif\n            typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<\n                RequiresStringbuffer,\n                out_stream_t,\n                do_not_construct_out_stream_t\n            >::type deduced_out_stream_t;\n\n            // A string representation of Source is written to [start, finish).\n            CharT* start;\n            CharT* finish;\n            deduced_out_stream_t out_stream;\n\n        public:\n            lexical_stream_limited_src(CharT* sta, CharT* fin)\n              : start(sta)\n              , finish(fin)\n            {}\n\n        private:\n            // Undefined:\n            lexical_stream_limited_src(lexical_stream_limited_src const&);\n            void operator=(lexical_stream_limited_src const&);\n\n/************************************ HELPER FUNCTIONS FOR OPERATORS << ( ... ) ********************************/\n            bool shl_char(CharT ch) BOOST_NOEXCEPT\n            {\n                Traits::assign(*start, ch);\n                finish = start + 1;\n                return true;\n            }\n\n#ifndef BOOST_LCAST_NO_WCHAR_T\n            template <class T>\n            bool shl_char(T ch)\n            {\n                BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)) ,\n                    \"boost::lexical_cast does not support narrowing of char types.\"\n                    \"Use boost::locale instead\" );\n#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE\n                std::locale loc;\n                CharT const w = BOOST_USE_FACET(std::ctype<CharT>, loc).widen(ch);\n#else\n                CharT const w = ch;\n#endif\n                Traits::assign(*start, w);\n                finish = start + 1;\n                return true;\n            }\n#endif\n\n            bool shl_char_array(CharT const* str) BOOST_NOEXCEPT\n            {\n                start = const_cast<CharT*>(str);\n                finish = start + Traits::length(str);\n                return true;\n            }\n\n            template <class T>\n            bool shl_char_array(T const* str)\n            {\n                BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)),\n                    \"boost::lexical_cast does not support narrowing of char types.\"\n                    \"Use boost::locale instead\" );\n                return shl_input_streamable(str);\n            }\n            \n            bool shl_char_array_limited(CharT const* str, std::size_t max_size) BOOST_NOEXCEPT\n            {\n                start = const_cast<CharT*>(str);\n                finish = std::find(start, start + max_size, Traits::to_char_type(0));\n                return true;\n            }\n\n            template<typename InputStreamable>\n            bool shl_input_streamable(InputStreamable& input)\n            {\n#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)\n                // If you have compilation error at this point, than your STL library\n                // does not support such conversions. Try updating it.\n                BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));\n#endif\n                bool const result = !(out_stream << input).fail();\n                const unlocked_but_t* const p\n                        = static_cast<unlocked_but_t*>(out_stream.rdbuf()) ;\n                start = p->pbase();\n                finish = p->pptr();\n                return result;\n            }\n\n            template <class T>\n            inline bool shl_signed(T n)\n            {\n                start = lcast_put_unsigned<Traits>(lcast_to_unsigned(n), finish);\n                if(n < 0)\n                {\n                    --start;\n                    CharT const minus = lcast_char_constants<CharT>::minus;\n                    Traits::assign(*start, minus);\n                }\n                return true;\n            }\n\n            template <class T, class SomeCharT>\n            bool shl_real_type(const T& val, SomeCharT* begin, SomeCharT*& end)\n            {\n                if (put_inf_nan(begin, end, val)) return true;\n                lcast_set_precision(out_stream, &val);\n                return shl_input_streamable(val);\n            }\n\n            static bool shl_real_type(float val, char* begin, char*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                const double val_as_double = val;\n                end = begin + \n#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n                    sprintf_s(begin, end-begin,\n#else\n                    sprintf(begin, \n#endif\n                    \"%.*g\", static_cast<int>(boost::detail::lcast_get_precision<float>()), val_as_double);\n                return end > begin;\n            }\n\n            static bool shl_real_type(double val, char* begin, char*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                end = begin + \n#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n                    sprintf_s(begin, end-begin,\n#else\n                    sprintf(begin, \n#endif\n                    \"%.*g\", static_cast<int>(boost::detail::lcast_get_precision<double>()), val);\n                return end > begin;\n            }\n\n#ifndef __MINGW32__\n            static bool shl_real_type(long double val, char* begin, char*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                end = begin + \n#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\n                    sprintf_s(begin, end-begin,\n#else\n                    sprintf(begin, \n#endif\n                    \"%.*Lg\", static_cast<int>(boost::detail::lcast_get_precision<long double>()), val );\n                return end > begin;\n            }\n#endif\n\n\n#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__)\n            static bool shl_real_type(float val, wchar_t* begin, wchar_t*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                const double val_as_double = val;\n                end = begin + swprintf(begin, end-begin,\n                                       L\"%.*g\",\n                                       static_cast<int>(boost::detail::lcast_get_precision<float >()),\n                                       val_as_double );\n                return end > begin;\n            }\n\n            static bool shl_real_type(double val, wchar_t* begin, wchar_t*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                end = begin + swprintf(begin, end-begin,\n                                          L\"%.*g\", static_cast<int>(boost::detail::lcast_get_precision<double >()), val );\n                return end > begin;\n            }\n\n            static bool shl_real_type(long double val, wchar_t* begin, wchar_t*& end)\n            {   using namespace std;\n                if (put_inf_nan(begin, end, val)) return true;\n                end = begin + swprintf(begin, end-begin,\n                                          L\"%.*Lg\", static_cast<int>(boost::detail::lcast_get_precision<long double >()), val );\n                return end > begin;\n            }\n#endif\n\n/************************************ OPERATORS << ( ... ) ********************************/\n        public:\n            template<class Alloc>\n            bool operator<<(std::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT\n            {\n                start = const_cast<CharT*>(str.data());\n                finish = start + str.length();\n                return true;\n            }\n\n            template<class Alloc>\n            bool operator<<(::boost::container::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT\n            {\n                start = const_cast<CharT*>(str.data());\n                finish = start + str.length();\n                return true;\n            }\n\n            bool operator<<(bool value) BOOST_NOEXCEPT\n            {\n                CharT const czero = lcast_char_constants<CharT>::zero;\n                Traits::assign(*start, Traits::to_char_type(czero + value));\n                finish = start + 1;\n                return true;\n            }\n\n            bool operator<<(const iterator_range<CharT*>& rng) BOOST_NOEXCEPT\n            {\n                start = rng.begin();\n                finish = rng.end();\n                return true; \n            }\n            \n            bool operator<<(const iterator_range<const CharT*>& rng) BOOST_NOEXCEPT\n            {\n                start = const_cast<CharT*>(rng.begin());\n                finish = const_cast<CharT*>(rng.end());\n                return true; \n            }\n\n            bool operator<<(const iterator_range<const signed char*>& rng) BOOST_NOEXCEPT\n            {\n                return (*this) << iterator_range<char*>(\n                    const_cast<char*>(reinterpret_cast<const char*>(rng.begin())),\n                    const_cast<char*>(reinterpret_cast<const char*>(rng.end()))\n                );\n            }\n\n            bool operator<<(const iterator_range<const unsigned char*>& rng) BOOST_NOEXCEPT\n            {\n                return (*this) << iterator_range<char*>(\n                    const_cast<char*>(reinterpret_cast<const char*>(rng.begin())),\n                    const_cast<char*>(reinterpret_cast<const char*>(rng.end()))\n                );\n            }\n\n            bool operator<<(const iterator_range<signed char*>& rng) BOOST_NOEXCEPT\n            {\n                return (*this) << iterator_range<char*>(\n                    reinterpret_cast<char*>(rng.begin()),\n                    reinterpret_cast<char*>(rng.end())\n                );\n            }\n\n            bool operator<<(const iterator_range<unsigned char*>& rng) BOOST_NOEXCEPT\n            {\n                return (*this) << iterator_range<char*>(\n                    reinterpret_cast<char*>(rng.begin()),\n                    reinterpret_cast<char*>(rng.end())\n                );\n            }\n\n            bool operator<<(char ch)                    { return shl_char(ch); }\n            bool operator<<(unsigned char ch)           { return ((*this) << static_cast<char>(ch)); }\n            bool operator<<(signed char ch)             { return ((*this) << static_cast<char>(ch)); }\n#if !defined(BOOST_LCAST_NO_WCHAR_T)\n            bool operator<<(wchar_t const* str)         { return shl_char_array(str); }\n            bool operator<<(wchar_t * str)              { return shl_char_array(str); }\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\n            bool operator<<(wchar_t ch)                 { return shl_char(ch); }\n#endif\n#endif\n#if !defined(BOOST_NO_CHAR16_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n            bool operator<<(char16_t ch)                { return shl_char(ch); }\n            bool operator<<(char16_t * str)             { return shl_char_array(str); }\n            bool operator<<(char16_t const * str)       { return shl_char_array(str); }\n#endif\n#if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n            bool operator<<(char32_t ch)                { return shl_char(ch); }\n            bool operator<<(char32_t * str)             { return shl_char_array(str); }\n            bool operator<<(char32_t const * str)       { return shl_char_array(str); }\n#endif\n            bool operator<<(unsigned char const* ch)    { return ((*this) << reinterpret_cast<char const*>(ch)); }\n            bool operator<<(unsigned char * ch)         { return ((*this) << reinterpret_cast<char *>(ch)); }\n            bool operator<<(signed char const* ch)      { return ((*this) << reinterpret_cast<char const*>(ch)); }\n            bool operator<<(signed char * ch)           { return ((*this) << reinterpret_cast<char *>(ch)); }\n            bool operator<<(char const* str)            { return shl_char_array(str); }\n            bool operator<<(char* str)                  { return shl_char_array(str); }\n            bool operator<<(short n)                    { return shl_signed(n); }\n            bool operator<<(int n)                      { return shl_signed(n); }\n            bool operator<<(long n)                     { return shl_signed(n); }\n            bool operator<<(unsigned short n)           { start = lcast_put_unsigned<Traits>(n, finish); return true; }\n            bool operator<<(unsigned int n)             { start = lcast_put_unsigned<Traits>(n, finish); return true; }\n            bool operator<<(unsigned long n)            { start = lcast_put_unsigned<Traits>(n, finish); return true; }\n\n#if defined(BOOST_HAS_LONG_LONG)\n            bool operator<<(boost::ulong_long_type n)   { start = lcast_put_unsigned<Traits>(n, finish); return true; }\n            bool operator<<(boost::long_long_type n)    { return shl_signed(n); }\n#elif defined(BOOST_HAS_MS_INT64)\n            bool operator<<(unsigned __int64 n)         { start = lcast_put_unsigned<Traits>(n, finish); return true; }\n            bool operator<<(         __int64 n)         { return shl_signed(n); }\n#endif\n            bool operator<<(float val)                  { return shl_real_type(val, start, finish); }\n            bool operator<<(double val)                 { return shl_real_type(val, start, finish); }\n            bool operator<<(long double val)            {\n#ifndef __MINGW32__\n                return shl_real_type(val, start, finish);\n#else\n                return shl_real_type(static_cast<double>(val), start, finish);\n#endif\n            }\n            \n            template <std::size_t N>\n            bool operator<<(boost::array<CharT, N> const& input) BOOST_NOEXCEPT\n            { return shl_char_array_limited(input.begin(), N); }\n\n            template <std::size_t N>\n            bool operator<<(boost::array<unsigned char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(boost::array<signed char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(boost::array<const CharT, N> const& input) BOOST_NOEXCEPT\n            { return shl_char_array_limited(input.begin(), N); }\n\n            template <std::size_t N>\n            bool operator<<(boost::array<const unsigned char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(boost::array<const signed char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }\n \n#if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n            template <std::size_t N>\n            bool operator<<(std::array<CharT, N> const& input) BOOST_NOEXCEPT\n            { return shl_char_array_limited(input.begin(), N); }\n\n            template <std::size_t N>\n            bool operator<<(std::array<unsigned char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(std::array<signed char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(std::array<const CharT, N> const& input) BOOST_NOEXCEPT\n            { return shl_char_array_limited(input.begin(), N); }\n\n            template <std::size_t N>\n            bool operator<<(std::array<const unsigned char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }\n\n            template <std::size_t N>\n            bool operator<<(std::array<const signed char, N> const& input) BOOST_NOEXCEPT\n            { return ((*this) << reinterpret_cast<boost::array<const char, N> const& >(input)); }\n#endif // !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n            \n            template <class InStreamable>\n            bool operator<<(const InStreamable& input)  { return shl_input_streamable(input); }\n\n/************************************ HELPER FUNCTIONS FOR OPERATORS >> ( ... ) ********************************/\n        private:\n\n            template <typename Type>\n            bool shr_unsigned(Type& output)\n            {\n                if (start == finish) return false;\n                CharT const minus = lcast_char_constants<CharT>::minus;\n                CharT const plus = lcast_char_constants<CharT>::plus;\n                bool has_minus = false;\n\n                /* We won`t use `start' any more, so no need in decrementing it after */\n                if ( Traits::eq(minus,*start) )\n                {\n                    ++start;\n                    has_minus = true;\n                } else if ( Traits::eq( plus, *start ) )\n                {\n                    ++start;\n                }\n\n                bool const succeed = lcast_ret_unsigned<Traits>(output, start, finish);\n#if (defined _MSC_VER)\n# pragma warning( push )\n// C4146: unary minus operator applied to unsigned type, result still unsigned\n# pragma warning( disable : 4146 )\n#elif defined( __BORLANDC__ )\n# pragma option push -w-8041\n#endif\n                if (has_minus) output = static_cast<Type>(-output);\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#elif defined( __BORLANDC__ )\n# pragma option pop\n#endif\n                return succeed;\n            }\n\n            template <typename Type>\n            bool shr_signed(Type& output)\n            {\n                if (start == finish) return false;\n                CharT const minus = lcast_char_constants<CharT>::minus;\n                CharT const plus = lcast_char_constants<CharT>::plus;\n                typedef BOOST_DEDUCED_TYPENAME make_unsigned<Type>::type utype;\n                utype out_tmp =0;\n                bool has_minus = false;\n\n                /* We won`t use `start' any more, so no need in decrementing it after */\n                if ( Traits::eq(minus,*start) )\n                {\n                    ++start;\n                    has_minus = true;\n                } else if ( Traits::eq(plus, *start) )\n                {\n                    ++start;\n                }\n\n                bool succeed = lcast_ret_unsigned<Traits>(out_tmp, start, finish);\n                if (has_minus) {\n#if (defined _MSC_VER)\n# pragma warning( push )\n// C4146: unary minus operator applied to unsigned type, result still unsigned\n# pragma warning( disable : 4146 )\n#elif defined( __BORLANDC__ )\n# pragma option push -w-8041\n#endif\n                    utype const comp_val = static_cast<utype>(-(std::numeric_limits<Type>::min)());\n                    succeed = succeed && out_tmp<=comp_val;\n                    output = -out_tmp;\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#elif defined( __BORLANDC__ )\n# pragma option pop\n#endif\n                } else {\n                    utype const comp_val = static_cast<utype>((std::numeric_limits<Type>::max)());\n                    succeed = succeed && out_tmp<=comp_val;\n                    output = out_tmp;\n                }\n                return succeed;\n            }\n\n            template<typename InputStreamable>\n            bool shr_using_base_class(InputStreamable& output)\n            {\n#if (defined _MSC_VER)\n# pragma warning( push )\n  // conditional expression is constant\n# pragma warning( disable : 4127 )\n#endif\n                if(is_pointer<InputStreamable>::value)\n                    return false;\n\n#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)\n                // If you have compilation error at this point, than your STL library\n                // unsupports such conversions. Try updating it.\n                BOOST_STATIC_ASSERT((boost::is_same<char, CharT>::value));\n#endif\n\n#if defined(BOOST_NO_STRINGSTREAM)\n                std::istrstream stream(start, finish - start);\n#elif defined(BOOST_NO_STD_LOCALE)\n                std::istringstream stream;\n#else\n                std::basic_istringstream<CharT, Traits> stream;\n#endif\n                static_cast<unlocked_but_t*>(stream.rdbuf())\n                        ->setg(start, start, finish);\n\n                stream.unsetf(std::ios::skipws);\n                lcast_set_precision(stream, static_cast<InputStreamable*>(0));\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#endif\n                return stream >> output &&\n                    stream.get() ==\n#if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING)\n        // GCC 2.9x lacks std::char_traits<>::eof().\n        // We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3\n        // configurations, which do provide std::char_traits<>::eof().\n\n                    EOF;\n#else\n                Traits::eof();\n#endif\n            }\n\n            template<class T>\n            inline bool shr_xchar(T& output)\n            {\n                BOOST_STATIC_ASSERT_MSG(( sizeof(CharT) == sizeof(T) ),\n                    \"boost::lexical_cast does not support narrowing of character types.\"\n                    \"Use boost::locale instead\" );\n                bool const ok = (finish - start == 1);\n                if (ok) {\n                    CharT out;\n                    Traits::assign(out, *start);\n                    output = static_cast<T>(out);\n                }\n                return ok;\n            }\n\n/************************************ OPERATORS >> ( ... ) ********************************/\n            public:\n            bool operator>>(unsigned short& output)             { return shr_unsigned(output); }\n            bool operator>>(unsigned int& output)               { return shr_unsigned(output); }\n            bool operator>>(unsigned long int& output)          { return shr_unsigned(output); }\n            bool operator>>(short& output)                      { return shr_signed(output); }\n            bool operator>>(int& output)                        { return shr_signed(output); }\n            bool operator>>(long int& output)                   { return shr_signed(output); }\n#if defined(BOOST_HAS_LONG_LONG)\n            bool operator>>(boost::ulong_long_type& output)     { return shr_unsigned(output); }\n            bool operator>>(boost::long_long_type& output)      { return shr_signed(output); }\n#elif defined(BOOST_HAS_MS_INT64)\n            bool operator>>(unsigned __int64& output)           { return shr_unsigned(output); }\n            bool operator>>(__int64& output)                    { return shr_signed(output); }\n#endif\n            bool operator>>(char& output)                       { return shr_xchar(output); }\n            bool operator>>(unsigned char& output)              { return shr_xchar(output); }\n            bool operator>>(signed char& output)                { return shr_xchar(output); }\n#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n            bool operator>>(wchar_t& output)                    { return shr_xchar(output); }\n#endif\n#if !defined(BOOST_NO_CHAR16_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n            bool operator>>(char16_t& output)                   { return shr_xchar(output); }\n#endif\n#if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS)\n            bool operator>>(char32_t& output)                   { return shr_xchar(output); }\n#endif\n            template<class Alloc>\n            bool operator>>(std::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }\n\n            template<class Alloc>\n            bool operator>>(::boost::container::basic_string<CharT,Traits,Alloc>& str) { str.assign(start, finish); return true; }\n\n            \n    private:\n            template <std::size_t N, class ArrayT>\n            bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT\n            {\n                using namespace std;\n                const std::size_t size = finish - start;\n                if (size > N - 1) { // `-1` because we need to store \\0 at the end \n                    return false;\n                }\n\n                memcpy(output.begin(), start, size * sizeof(CharT));\n                *(output.begin() + size) = Traits::to_char_type(0);\n                return true;\n            }\n\n    public:\n\n            template <std::size_t N>\n            bool operator>>(boost::array<CharT, N>& output) BOOST_NOEXCEPT\n            { \n                return shr_std_array<N>(output); \n            }\n\n            template <std::size_t N>\n            bool operator>>(boost::array<unsigned char, N>& output)   \n            { \n                return ((*this) >> reinterpret_cast<boost::array<char, N>& >(output)); \n            }\n\n            template <std::size_t N>\n            bool operator>>(boost::array<signed char, N>& output)   \n            { \n                return ((*this) >> reinterpret_cast<boost::array<char, N>& >(output)); \n            }\n \n#if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n            template <std::size_t N>\n            bool operator>>(std::array<CharT, N>& output) BOOST_NOEXCEPT\n            { \n                return shr_std_array<N>(output); \n            }\n\n            template <std::size_t N>\n            bool operator>>(std::array<unsigned char, N>& output)   \n            { \n                return ((*this) >> reinterpret_cast<std::array<char, N>& >(output)); \n            }\n\n            template <std::size_t N>\n            bool operator>>(std::array<signed char, N>& in)   \n            { \n                return ((*this) >> reinterpret_cast<std::array<char, N>& >(output)); \n            }\n#endif // !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY)\n\n\n            /*\n             * case \"-0\" || \"0\" || \"+0\" :   output = false; return true;\n             * case \"1\" || \"+1\":            output = true;  return true;\n             * default:                     return false;\n             */\n            bool operator>>(bool& output) BOOST_NOEXCEPT\n            {\n                CharT const zero = lcast_char_constants<CharT>::zero;\n                CharT const plus = lcast_char_constants<CharT>::plus;\n                CharT const minus = lcast_char_constants<CharT>::minus;\n\n                switch(finish-start)\n                {\n                    case 1:\n                        output = Traits::eq(start[0],  zero+1);\n                        return output || Traits::eq(start[0], zero );\n                    case 2:\n                        if ( Traits::eq( plus, *start) )\n                        {\n                            ++start;\n                            output = Traits::eq(start[0], zero +1);\n                            return output || Traits::eq(start[0], zero );\n                        } else\n                        {\n                            output = false;\n                            return Traits::eq( minus, *start)\n                                && Traits::eq( zero, start[1]);\n                        }\n                    default:\n                        output = false; // Suppress warning about uninitalized variable\n                        return false;\n                }\n            }\n\n            bool operator>>(float& output) { return lcast_ret_float<Traits>(output,start,finish); }\n\n        private:\n            // Not optimised converter\n            template <class T>\n            bool float_types_converter_internal(T& output, int /*tag*/) {\n                if (parse_inf_nan(start, finish, output)) return true;\n                bool return_value = shr_using_base_class(output);\n\n                /* Some compilers and libraries successfully\n                 * parse 'inf', 'INFINITY', '1.0E', '1.0E-'...\n                 * We are trying to provide a unified behaviour,\n                 * so we just forbid such conversions (as some\n                 * of the most popular compilers/libraries do)\n                 * */\n                CharT const minus = lcast_char_constants<CharT>::minus;\n                CharT const plus = lcast_char_constants<CharT>::plus;\n                CharT const capital_e = lcast_char_constants<CharT>::capital_e;\n                CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;\n                if ( return_value &&\n                     (\n                        Traits::eq(*(finish-1), lowercase_e)                   // 1.0e\n                        || Traits::eq(*(finish-1), capital_e)                  // 1.0E\n                        || Traits::eq(*(finish-1), minus)                      // 1.0e- or 1.0E-\n                        || Traits::eq(*(finish-1), plus)                       // 1.0e+ or 1.0E+\n                     )\n                ) return false;\n\n                return return_value;\n            }\n\n            // Optimised converter\n            bool float_types_converter_internal(double& output,char /*tag*/) {\n                return lcast_ret_float<Traits>(output,start,finish);\n            }\n        public:\n\n            bool operator>>(double& output)\n            {\n                /*\n                 * Some compilers implement long double as double. In that case these types have\n                 * same size, same precision, same max and min values... And it means,\n                 * that current implementation of lcast_ret_float cannot be used for type\n                 * double, because it will give a big precision loss.\n                 * */\n                boost::mpl::if_c<\n#if defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64)\n                    ::boost::type_traits::ice_eq< sizeof(double), sizeof(long double) >::value,\n#else\n                     0\n#endif\n                    int,\n                    char\n                >::type tag = 0;\n\n                return float_types_converter_internal(output, tag);\n            }\n\n            bool operator>>(long double& output)\n            {\n                int tag = 0;\n                return float_types_converter_internal(output, tag);\n            }\n\n            // Generic istream-based algorithm.\n            // lcast_streambuf_for_target<InputStreamable>::value is true.\n            template<typename InputStreamable>\n            bool operator>>(InputStreamable& output) { return shr_using_base_class(output); }\n        };\n    }\n\n    namespace detail\n    {\n        template<class T>\n        struct array_to_pointer_decay\n        {\n            typedef T type;\n        };\n\n        template<class T, std::size_t N>\n        struct array_to_pointer_decay<T[N]>\n        {\n            typedef const T * type;\n        };\n\n        template<typename T>\n        struct is_stdstring\n        {\n            BOOST_STATIC_CONSTANT(bool, value = false );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_stdstring< std::basic_string<CharT, Traits, Alloc> >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_stdstring< ::boost::container::basic_string<CharT, Traits, Alloc> >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n        template<typename Target, typename Source>\n        struct is_arithmetic_and_not_xchars\n        {\n            BOOST_STATIC_CONSTANT(bool, value =\n               (\n                   ::boost::type_traits::ice_and<\n                           ::boost::is_arithmetic<Source>::value,\n                           ::boost::is_arithmetic<Target>::value,\n                           ::boost::type_traits::ice_not<\n                                detail::is_char_or_wchar<Target>::value\n                           >::value,\n                           ::boost::type_traits::ice_not<\n                                detail::is_char_or_wchar<Source>::value\n                           >::value\n                   >::value\n               )\n            );\n        };\n\n        /*\n         * is_xchar_to_xchar<Target, Source>::value is true, when\n         * Target and Souce are the same char types, or when\n         * Target and Souce are char types of the same size.\n         */\n        template<typename Target, typename Source>\n        struct is_xchar_to_xchar\n        {\n            BOOST_STATIC_CONSTANT(bool, value =\n                (\n                    ::boost::type_traits::ice_or<\n                        ::boost::type_traits::ice_and<\n                             is_same<Source,Target>::value,\n                             is_char_or_wchar<Target>::value\n                        >::value,\n                        ::boost::type_traits::ice_and<\n                             ::boost::type_traits::ice_eq< sizeof(char),sizeof(Target)>::value,\n                             ::boost::type_traits::ice_eq< sizeof(char),sizeof(Source)>::value,\n                             is_char_or_wchar<Target>::value,\n                             is_char_or_wchar<Source>::value\n                        >::value\n                    >::value\n                )\n            );\n        };\n\n\n        // this metafunction evaluates to true, if we have optimized comnversion \n        // from Float type to Char array. \n        // Must be in sync with lexical_stream_limited_src<Char, ...>::shl_real_type(...)\n        template <typename Float, typename Char>\n        struct is_this_float_conversion_optimized \n        {\n            typedef ::boost::type_traits::ice_and<\n                ::boost::is_float<Float>::value,\n#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__)\n                ::boost::type_traits::ice_or<\n                    ::boost::type_traits::ice_eq<sizeof(Char), sizeof(char) >::value,\n                    ::boost::is_same<Char, wchar_t>::value\n                >::value\n#else\n                ::boost::type_traits::ice_eq<sizeof(Char), sizeof(char) >::value\n#endif\n            > result_type;\n\n            BOOST_STATIC_CONSTANT(bool, value = (result_type::value) );\n        };\n\n        template<typename Target, typename Source>\n        struct is_char_array_to_stdstring\n        {\n            BOOST_STATIC_CONSTANT(bool, value = false );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, CharT* >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, const CharT* >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_char_array_to_stdstring< ::boost::container::basic_string<CharT, Traits, Alloc>, CharT* >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n        template<typename CharT, typename Traits, typename Alloc>\n        struct is_char_array_to_stdstring< ::boost::container::basic_string<CharT, Traits, Alloc>, const CharT* >\n        {\n            BOOST_STATIC_CONSTANT(bool, value = true );\n        };\n\n#if (defined _MSC_VER)\n# pragma warning( push )\n# pragma warning( disable : 4701 ) // possible use of ... before initialization\n# pragma warning( disable : 4702 ) // unreachable code\n# pragma warning( disable : 4267 ) // conversion from 'size_t' to 'unsigned int'\n#endif\n        template<typename Target, typename Source>\n        struct lexical_cast_do_cast\n        {\n            static inline Target lexical_cast_impl(const Source& arg)\n            {\n                typedef BOOST_DEDUCED_TYPENAME detail::array_to_pointer_decay<Source>::type src;\n                typedef BOOST_DEDUCED_TYPENAME ::boost::remove_cv<src>::type no_cv_src;\n                typedef BOOST_DEDUCED_TYPENAME detail::stream_char<Target>::type target_char_t;\n                typedef BOOST_DEDUCED_TYPENAME detail::stream_char<no_cv_src>::type src_char_type;\n                typedef BOOST_DEDUCED_TYPENAME detail::widest_char<\n                    target_char_t, src_char_type\n                >::type char_type;\n\n#if !defined(BOOST_NO_CHAR16_T) && defined(BOOST_NO_UNICODE_LITERALS)\n                BOOST_STATIC_ASSERT_MSG(( !::boost::is_same<char16_t, src_char_type>::value\n                                          && !::boost::is_same<char16_t, target_char_t>::value),\n                    \"Your compiler does not have full support for char16_t\" );\n#endif\n#if !defined(BOOST_NO_CHAR32_T) && defined(BOOST_NO_UNICODE_LITERALS)\n                BOOST_STATIC_ASSERT_MSG(( !::boost::is_same<char32_t, src_char_type>::value\n                                          && !::boost::is_same<char32_t, target_char_t>::value),\n                    \"Your compiler does not have full support for char32_t\" );\n#endif\n\n                typedef BOOST_DEDUCED_TYPENAME ::boost::detail::deduce_char_traits<\n                    char_type, Target, no_cv_src\n                >::type traits;\n\n                typedef ::boost::type_traits::ice_and<\n                    ::boost::detail::is_char_or_wchar<src_char_type>::value,                    // source is lexical type\n                    ::boost::detail::is_char_or_wchar<target_char_t>::value,                    // target is a lexical type\n                    ::boost::is_same<char, src_char_type>::value,                               // source is not a wide character based type\n                    ::boost::type_traits::ice_ne<sizeof(char), sizeof(target_char_t) >::value   // target type is based on wide character\n                >   is_string_widening_required_t;\n\n                typedef ::boost::type_traits::ice_or<\n                    ::boost::is_integral<no_cv_src>::value,\n                    ::boost::detail::is_this_float_conversion_optimized<no_cv_src, char_type >::value,\n                    ::boost::detail::is_char_or_wchar<src_char_type >::value\n                >   is_source_input_optimized_t;\n\n                // Target type must be default constructible\n                Target result;\n\n                // If we have an optimized conversion for\n                // Source, we do not need to construct stringbuf.\n                const bool requires_stringbuf = ::boost::type_traits::ice_or<\n                        is_string_widening_required_t::value,\n                        ::boost::type_traits::ice_not< is_source_input_optimized_t::value >::value\n                >::value;\n               \n                typedef detail::lexical_stream_limited_src<char_type, traits, requires_stringbuf > interpreter_type;\n\n                typedef detail::lcast_src_length<no_cv_src> lcast_src_length;\n                std::size_t const src_len = lcast_src_length::value;\n                char_type buf[src_len + 1];\n                lcast_src_length::check_coverage();\n\n                interpreter_type interpreter(buf, buf + src_len);\n\n                // Disabling ADL, by directly specifying operators.\n                if(!(interpreter.operator <<(arg) && interpreter.operator >>(result)))\n                  BOOST_LCAST_THROW_BAD_CAST(Source, Target);\n\n                return result;\n            }\n        };\n#if (defined _MSC_VER)\n# pragma warning( pop )\n#endif\n\n        template <typename Source>\n        struct lexical_cast_copy\n        {\n            static inline const Source& lexical_cast_impl(const Source &arg) BOOST_NOEXCEPT\n            {\n                return arg;\n            }\n        };\n\n        template <class Source, class Target >\n        struct detect_precision_loss\n        {\n         typedef boost::numeric::Trunc<Source> Rounder;\n         typedef Source source_type ;\n\n         typedef BOOST_DEDUCED_TYPENAME mpl::if_<\n            ::boost::is_arithmetic<Source>, Source, Source const&\n          >::type argument_type ;\n\n         static source_type nearbyint ( argument_type s )\n         {\n            const source_type orig_div_round = s / Rounder::nearbyint(s);\n            const source_type eps = std::numeric_limits<source_type>::epsilon();\n\n            if ((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps)\n                BOOST_LCAST_THROW_BAD_CAST(Source, Target);\n\n            return s ;\n         }\n\n         typedef typename Rounder::round_style round_style;\n        } ;\n\n        template <class Source, class Target >\n        struct nothrow_overflow_handler\n        {\n          void operator() ( boost::numeric::range_check_result r )\n          {\n            if (r != boost::numeric::cInRange)\n                BOOST_LCAST_THROW_BAD_CAST(Source, Target);\n          }\n        } ;\n\n        template <typename Target, typename Source>\n        struct lexical_cast_dynamic_num_not_ignoring_minus\n        {\n            static inline Target lexical_cast_impl(const Source &arg)\n            {\n                return boost::numeric::converter<\n                        Target,\n                        Source,\n                        boost::numeric::conversion_traits<Target,Source>,\n                        nothrow_overflow_handler<Source, Target>,\n                        detect_precision_loss<Source, Target>\n                >::convert(arg);\n            }\n        };\n\n        template <typename Target, typename Source>\n        struct lexical_cast_dynamic_num_ignoring_minus\n        {\n            static inline Target lexical_cast_impl(const Source &arg)\n            {\n                typedef boost::numeric::converter<\n                        Target,\n                        Source,\n                        boost::numeric::conversion_traits<Target,Source>,\n                        nothrow_overflow_handler<Source, Target>,\n                        detect_precision_loss<Source, Target>\n                > converter_t;\n\n                return (\n                    arg < 0 ? -converter_t::convert(-arg) : converter_t::convert(arg)\n                );\n            }\n        };\n\n        /*\n         * lexical_cast_dynamic_num follows the rules:\n         * 1) If Source can be converted to Target without precision loss and\n         * without overflows, then assign Source to Target and return\n         *\n         * 2) If Source is less than 0 and Target is an unsigned integer,\n         * then negate Source, check the requirements of rule 1) and if\n         * successful, assign static_casted Source to Target and return\n         *\n         * 3) Otherwise throw a bad_lexical_cast exception\n         *\n         *\n         * Rule 2) required because boost::lexical_cast has the behavior of\n         * stringstream, which uses the rules of scanf for conversions. And\n         * in the C99 standard for unsigned input value minus sign is\n         * optional, so if a negative number is read, no errors will arise\n         * and the result will be the two's complement.\n         */\n        template <typename Target, typename Source>\n        struct lexical_cast_dynamic_num\n        {\n            static inline Target lexical_cast_impl(const Source &arg)\n            {\n                typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<\n                    ::boost::type_traits::ice_and<\n                        ::boost::type_traits::ice_or<\n                            ::boost::is_signed<Source>::value,\n                            ::boost::is_float<Source>::value\n                        >::value,\n                        ::boost::type_traits::ice_not<\n                            ::boost::is_same<Source, bool>::value\n                        >::value,\n                        ::boost::type_traits::ice_not<\n                            ::boost::is_same<Target, bool>::value\n                        >::value,\n                        ::boost::is_unsigned<Target>::value\n                    >::value,\n                    lexical_cast_dynamic_num_ignoring_minus<Target, Source>,\n                    lexical_cast_dynamic_num_not_ignoring_minus<Target, Source>\n                >::type caster_type;\n\n                return caster_type::lexical_cast_impl(arg);\n            }\n        };\n    }\n\n    template <typename Target, typename Source>\n    inline Target lexical_cast(const Source &arg)\n    {\n        typedef BOOST_DEDUCED_TYPENAME ::boost::detail::array_to_pointer_decay<Source>::type src;\n\n        typedef BOOST_DEDUCED_TYPENAME ::boost::type_traits::ice_or<\n                ::boost::detail::is_xchar_to_xchar<Target, src >::value,\n                ::boost::detail::is_char_array_to_stdstring<Target, src >::value,\n                ::boost::type_traits::ice_and<\n                     ::boost::is_same<Target, src >::value,\n                     ::boost::detail::is_stdstring<Target >::value\n                >::value\n        > shall_we_copy_t;\n\n        typedef BOOST_DEDUCED_TYPENAME\n                ::boost::detail::is_arithmetic_and_not_xchars<Target, src > shall_we_copy_with_dynamic_check_t;\n\n        typedef BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<\n            shall_we_copy_t::value,\n            ::boost::detail::lexical_cast_copy<src >,\n            BOOST_DEDUCED_TYPENAME ::boost::mpl::if_c<\n                 shall_we_copy_with_dynamic_check_t::value,\n                 ::boost::detail::lexical_cast_dynamic_num<Target, src >,\n                 ::boost::detail::lexical_cast_do_cast<Target, src >\n            >::type\n        >::type caster_type;\n\n        return caster_type::lexical_cast_impl(arg);\n    }\n\n    template <typename Target>\n    inline Target lexical_cast(const char* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const char*>(chars, chars + count)\n        );\n    }\n\n\n    template <typename Target>\n    inline Target lexical_cast(const unsigned char* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const unsigned char*>(chars, chars + count)\n        );\n    }\n\n    template <typename Target>\n    inline Target lexical_cast(const signed char* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const signed char*>(chars, chars + count)\n        );\n    }\n\n#ifndef BOOST_LCAST_NO_WCHAR_T\n    template <typename Target>\n    inline Target lexical_cast(const wchar_t* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const wchar_t*>(chars, chars + count)\n        );\n    }\n#endif\n#ifndef BOOST_NO_CHAR16_T\n    template <typename Target>\n    inline Target lexical_cast(const char16_t* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const char16_t*>(chars, chars + count)\n        );\n    }\n#endif\n#ifndef BOOST_NO_CHAR32_T\n    template <typename Target>\n    inline Target lexical_cast(const char32_t* chars, std::size_t count)\n    {\n        return ::boost::lexical_cast<Target>(\n            ::boost::iterator_range<const char32_t*>(chars, chars + count)\n        );\n    }\n#endif\n\n} // namespace boost\n\n#else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace boost {\n    namespace detail\n    {\n\n        // selectors for choosing stream character type\n        template<typename Type>\n        struct stream_char\n        {\n            typedef char type;\n        };\n\n#ifndef BOOST_LCAST_NO_WCHAR_T\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\n        template<>\n        struct stream_char<wchar_t>\n        {\n            typedef wchar_t type;\n        };\n#endif\n\n        template<>\n        struct stream_char<wchar_t *>\n        {\n            typedef wchar_t type;\n        };\n\n        template<>\n        struct stream_char<const wchar_t *>\n        {\n            typedef wchar_t type;\n        };\n\n        template<>\n        struct stream_char<std::wstring>\n        {\n            typedef wchar_t type;\n        };\n#endif\n\n        // stream wrapper for handling lexical conversions\n        template<typename Target, typename Source, typename Traits>\n        class lexical_stream\n        {\n        private:\n            typedef typename widest_char<\n                typename stream_char<Target>::type,\n                typename stream_char<Source>::type>::type char_type;\n\n            typedef Traits traits_type;\n\n        public:\n            lexical_stream(char_type* = 0, char_type* = 0)\n            {\n                stream.unsetf(std::ios::skipws);\n                lcast_set_precision(stream, static_cast<Source*>(0), static_cast<Target*>(0) );\n            }\n            ~lexical_stream()\n            {\n                #if defined(BOOST_NO_STRINGSTREAM)\n                stream.freeze(false);\n                #endif\n            }\n            bool operator<<(const Source &input)\n            {\n                return !(stream << input).fail();\n            }\n            template<typename InputStreamable>\n            bool operator>>(InputStreamable &output)\n            {\n                return !is_pointer<InputStreamable>::value &&\n                       stream >> output &&\n                       stream.get() ==\n#if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING)\n// GCC 2.9x lacks std::char_traits<>::eof().\n// We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3\n// configurations, which do provide std::char_traits<>::eof().\n\n                           EOF;\n#else\n                           traits_type::eof();\n#endif\n            }\n\n            bool operator>>(std::string &output)\n            {\n                #if defined(BOOST_NO_STRINGSTREAM)\n                stream << '\\0';\n                #endif\n                stream.str().swap(output);\n                return true;\n            }\n            #ifndef BOOST_LCAST_NO_WCHAR_T\n            bool operator>>(std::wstring &output)\n            {\n                stream.str().swap(output);\n                return true;\n            }\n            #endif\n\n        private:\n            #if defined(BOOST_NO_STRINGSTREAM)\n            std::strstream stream;\n            #elif defined(BOOST_NO_STD_LOCALE)\n            std::stringstream stream;\n            #else\n            std::basic_stringstream<char_type,traits_type> stream;\n            #endif\n        };\n    }\n\n    // call-by-value fallback version (deprecated)\n\n    template<typename Target, typename Source>\n    Target lexical_cast(Source arg)\n    {\n        typedef typename detail::widest_char< \n            BOOST_DEDUCED_TYPENAME detail::stream_char<Target>::type \n          , BOOST_DEDUCED_TYPENAME detail::stream_char<Source>::type \n        >::type char_type; \n\n        typedef std::char_traits<char_type> traits;\n        detail::lexical_stream<Target, Source, traits> interpreter;\n        Target result;\n\n        if(!(interpreter << arg && interpreter >> result))\n          BOOST_LCAST_THROW_BAD_CAST(Source, Target);\n        return result;\n    }\n\n} // namespace boost\n\n#endif\n\n// Copyright Kevlin Henney, 2000-2005.\n// Copyright Alexander Nasonov, 2006-2010.\n// Copyright Antony Polukhin, 2011-2012.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#undef BOOST_LCAST_THROW_BAD_CAST\n#undef BOOST_LCAST_NO_WCHAR_T\n\n#endif // BOOST_LEXICAL_CAST_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/limits.hpp",
    "content": "\n//  (C) Copyright John maddock 1999. \n//  (C) David Abrahams 2002.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// use this header as a workaround for missing <limits>\n\n//  See http://www.boost.org/libs/compatibility/index.html for documentation.\n\n#ifndef BOOST_LIMITS\n#define BOOST_LIMITS\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_NO_LIMITS\n# include <boost/detail/limits.hpp>\n#else\n# include <limits>\n#endif\n\n#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \\\n      || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS))\n// Add missing specializations for numeric_limits:\n#ifdef BOOST_HAS_MS_INT64\n#  define BOOST_LLT __int64\n#  define BOOST_ULLT unsigned __int64\n#else\n#  define BOOST_LLT  ::boost::long_long_type\n#  define BOOST_ULLT  ::boost::ulong_long_type\n#endif\n\n#include <climits>  // for CHAR_BIT\n\nnamespace std\n{\n  template<>\n  class numeric_limits<BOOST_LLT> \n  {\n   public:\n\n      BOOST_STATIC_CONSTANT(bool, is_specialized = true);\n#ifdef BOOST_HAS_MS_INT64\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; }\n#elif defined(LLONG_MAX)\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; }\n#elif defined(LONGLONG_MAX)\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; }\n#else\n      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); }\n      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); }\n#endif\n      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1);\n      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000);\n      BOOST_STATIC_CONSTANT(bool, is_signed = true);\n      BOOST_STATIC_CONSTANT(bool, is_integer = true);\n      BOOST_STATIC_CONSTANT(bool, is_exact = true);\n      BOOST_STATIC_CONSTANT(int, radix = 2);\n      static BOOST_LLT epsilon() throw() { return 0; };\n      static BOOST_LLT round_error() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(int, min_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);\n\n      BOOST_STATIC_CONSTANT(bool, has_infinity = false);\n      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);\n      static BOOST_LLT infinity() throw() { return 0; };\n      static BOOST_LLT quiet_NaN() throw() { return 0; };\n      static BOOST_LLT signaling_NaN() throw() { return 0; };\n      static BOOST_LLT denorm_min() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);\n      BOOST_STATIC_CONSTANT(bool, is_bounded = true);\n      BOOST_STATIC_CONSTANT(bool, is_modulo = true);\n\n      BOOST_STATIC_CONSTANT(bool, traps = false);\n      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);\n      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);\n      \n  };\n\n  template<>\n  class numeric_limits<BOOST_ULLT> \n  {\n   public:\n\n      BOOST_STATIC_CONSTANT(bool, is_specialized = true);\n#ifdef BOOST_HAS_MS_INT64\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; }\n#elif defined(ULLONG_MAX) && defined(ULLONG_MIN)\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; }\n#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN)\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; }\n#else\n      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; }\n      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; }\n#endif\n      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT);\n      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000);\n      BOOST_STATIC_CONSTANT(bool, is_signed = false);\n      BOOST_STATIC_CONSTANT(bool, is_integer = true);\n      BOOST_STATIC_CONSTANT(bool, is_exact = true);\n      BOOST_STATIC_CONSTANT(int, radix = 2);\n      static BOOST_ULLT epsilon() throw() { return 0; };\n      static BOOST_ULLT round_error() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(int, min_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent = 0);\n      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);\n\n      BOOST_STATIC_CONSTANT(bool, has_infinity = false);\n      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm = false);\n      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);\n      static BOOST_ULLT infinity() throw() { return 0; };\n      static BOOST_ULLT quiet_NaN() throw() { return 0; };\n      static BOOST_ULLT signaling_NaN() throw() { return 0; };\n      static BOOST_ULLT denorm_min() throw() { return 0; };\n\n      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);\n      BOOST_STATIC_CONSTANT(bool, is_bounded = true);\n      BOOST_STATIC_CONSTANT(bool, is_modulo = true);\n\n      BOOST_STATIC_CONSTANT(bool, traps = false);\n      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);\n      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);\n      \n  };\n}\n#endif \n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/policies/policy.hpp",
    "content": "//  Copyright John Maddock 2007.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_POLICY_HPP\n#define BOOST_MATH_POLICY_HPP\n\n#include <boost/mpl/list.hpp>\n#include <boost/mpl/contains.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/find_if.hpp>\n#include <boost/mpl/remove_if.hpp>\n#include <boost/mpl/vector.hpp>\n#include <boost/mpl/push_back.hpp>\n#include <boost/mpl/at.hpp>\n#include <boost/mpl/size.hpp>\n#include <boost/mpl/comparison.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/assert.hpp>\n#include <boost/math/tools/config.hpp>\n#include <limits>\n// Sadly we do need the .h versions of these to be sure of getting\n// FLT_MANT_DIG etc.\n#include <limits.h>\n#include <stdlib.h>\n#include <stddef.h>\n#include <math.h>\n\nnamespace boost{ namespace math{ \n\nnamespace tools{\n\ntemplate <class T>\nint digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T));\ntemplate <class T>\nT epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T));\n\n}\n\nnamespace policies{\n\n//\n// Define macros for our default policies, if they're not defined already:\n//\n#ifndef BOOST_MATH_DOMAIN_ERROR_POLICY\n#define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error\n#endif\n#ifndef BOOST_MATH_POLE_ERROR_POLICY\n#define BOOST_MATH_POLE_ERROR_POLICY throw_on_error\n#endif\n#ifndef BOOST_MATH_OVERFLOW_ERROR_POLICY\n#define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error\n#endif\n#ifndef BOOST_MATH_EVALUATION_ERROR_POLICY\n#define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error\n#endif\n#ifndef BOOST_MATH_ROUNDING_ERROR_POLICY\n#define BOOST_MATH_ROUNDING_ERROR_POLICY throw_on_error\n#endif\n#ifndef BOOST_MATH_UNDERFLOW_ERROR_POLICY\n#define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error\n#endif\n#ifndef BOOST_MATH_DENORM_ERROR_POLICY\n#define BOOST_MATH_DENORM_ERROR_POLICY ignore_error\n#endif\n#ifndef BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY\n#define BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY ignore_error\n#endif\n#ifndef BOOST_MATH_DIGITS10_POLICY\n#define BOOST_MATH_DIGITS10_POLICY 0\n#endif\n#ifndef BOOST_MATH_PROMOTE_FLOAT_POLICY\n#define BOOST_MATH_PROMOTE_FLOAT_POLICY true\n#endif\n#ifndef BOOST_MATH_PROMOTE_DOUBLE_POLICY\n#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false\n#else\n#define BOOST_MATH_PROMOTE_DOUBLE_POLICY true\n#endif\n#endif\n#ifndef BOOST_MATH_DISCRETE_QUANTILE_POLICY\n#define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards\n#endif\n#ifndef BOOST_MATH_ASSERT_UNDEFINED_POLICY\n#define BOOST_MATH_ASSERT_UNDEFINED_POLICY true\n#endif\n#ifndef BOOST_MATH_MAX_SERIES_ITERATION_POLICY\n#define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000\n#endif\n#ifndef BOOST_MATH_MAX_ROOT_ITERATION_POLICY\n#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200\n#endif\n\n#if !defined(__BORLANDC__) \\\n   && !(defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 2))\n#define BOOST_MATH_META_INT(type, name, Default)\\\n   template <type N = Default> struct name : public boost::mpl::int_<N>{};\\\n   namespace detail{\\\n   template <type N>\\\n   char test_is_valid_arg(const name<N>*);\\\n   char test_is_default_arg(const name<Default>*);\\\n   template <class T> struct is_##name##_imp\\\n   {\\\n      template <type N> static char test(const name<N>*);\\\n      static double test(...);\\\n      BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast<T*>(0))) == 1);\\\n   };\\\n   }\\\n   template <class T> struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp<T>::value>{};\n\n#define BOOST_MATH_META_BOOL(name, Default)\\\n   template <bool N = Default> struct name : public boost::mpl::bool_<N>{};\\\n   namespace detail{\\\n   template <bool N>\\\n   char test_is_valid_arg(const name<N>*);\\\n   char test_is_default_arg(const name<Default>*);\\\n   template <class T> struct is_##name##_imp\\\n   {\\\n      template <bool N> static char test(const name<N>*);\\\n      static double test(...);\\\n      BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast<T*>(0))) == 1);\\\n   };\\\n   }\\\n   template <class T> struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp<T>::value>{};\n#else\n#define BOOST_MATH_META_INT(Type, name, Default)\\\n   template <Type N = Default> struct name : public boost::mpl::int_<N>{};\\\n   namespace detail{\\\n   template <Type N>\\\n   char test_is_valid_arg(const name<N>*);\\\n   char test_is_default_arg(const name<Default>*);\\\n   template <class T> struct is_##name##_tester\\\n   {\\\n      template <Type N> static char test(const name<N>&);\\\n      static double test(...);\\\n   };\\\n   template <class T> struct is_##name##_imp\\\n   {\\\n      static T inst;\\\n      BOOST_STATIC_CONSTANT(bool, value = sizeof( ::boost::math::policies::detail::is_##name##_tester<T>::test(inst)) == 1);\\\n   };\\\n   }\\\n   template <class T> struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp<T>::value>\\\n   {\\\n      template <class U> struct apply{ typedef is_##name<U> type; };\\\n   };\n\n#define BOOST_MATH_META_BOOL(name, Default)\\\n   template <bool N = Default> struct name : public boost::mpl::bool_<N>{};\\\n   namespace detail{\\\n   template <bool N>\\\n   char test_is_valid_arg(const name<N>*);\\\n   char test_is_default_arg(const name<Default>*);\\\n   template <class T> struct is_##name##_tester\\\n   {\\\n      template <bool N> static char test(const name<N>&);\\\n      static double test(...);\\\n   };\\\n   template <class T> struct is_##name##_imp\\\n   {\\\n      static T inst;\\\n      BOOST_STATIC_CONSTANT(bool, value = sizeof( ::boost::math::policies::detail::is_##name##_tester<T>::test(inst)) == 1);\\\n   };\\\n   }\\\n   template <class T> struct is_##name : public boost::mpl::bool_< ::boost::math::policies::detail::is_##name##_imp<T>::value>\\\n   {\\\n      template <class U> struct apply{ typedef is_##name<U> type;  };\\\n   };\n#endif\n//\n// Begin by defining policy types for error handling:\n//\nenum error_policy_type\n{\n   throw_on_error = 0,\n   errno_on_error = 1,\n   ignore_error = 2,\n   user_error = 3\n};\n\nBOOST_MATH_META_INT(error_policy_type, domain_error, BOOST_MATH_DOMAIN_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, pole_error, BOOST_MATH_POLE_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, overflow_error, BOOST_MATH_OVERFLOW_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, underflow_error, BOOST_MATH_UNDERFLOW_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, denorm_error, BOOST_MATH_DENORM_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, evaluation_error, BOOST_MATH_EVALUATION_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, rounding_error, BOOST_MATH_ROUNDING_ERROR_POLICY)\nBOOST_MATH_META_INT(error_policy_type, indeterminate_result_error, BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY)\n\n//\n// Policy types for internal promotion:\n//\nBOOST_MATH_META_BOOL(promote_float, BOOST_MATH_PROMOTE_FLOAT_POLICY)\nBOOST_MATH_META_BOOL(promote_double, BOOST_MATH_PROMOTE_DOUBLE_POLICY)\nBOOST_MATH_META_BOOL(assert_undefined, BOOST_MATH_ASSERT_UNDEFINED_POLICY)\n//\n// Policy types for discrete quantiles:\n//\nenum discrete_quantile_policy_type\n{\n   real,\n   integer_round_outwards,\n   integer_round_inwards,\n   integer_round_down,\n   integer_round_up,\n   integer_round_nearest\n};\n\nBOOST_MATH_META_INT(discrete_quantile_policy_type, discrete_quantile, BOOST_MATH_DISCRETE_QUANTILE_POLICY)\n//\n// Precision:\n//\nBOOST_MATH_META_INT(int, digits10, BOOST_MATH_DIGITS10_POLICY)\nBOOST_MATH_META_INT(int, digits2, 0)\n//\n// Iterations:\n//\nBOOST_MATH_META_INT(unsigned long, max_series_iterations, BOOST_MATH_MAX_SERIES_ITERATION_POLICY)\nBOOST_MATH_META_INT(unsigned long, max_root_iterations, BOOST_MATH_MAX_ROOT_ITERATION_POLICY)\n//\n// Define the names for each possible policy:\n//\n#define BOOST_MATH_PARAMETER(name)\\\n   BOOST_PARAMETER_TEMPLATE_KEYWORD(name##_name)\\\n   BOOST_PARAMETER_NAME(name##_name)\n\nstruct default_policy{};\n\nnamespace detail{\n//\n// Trait to work out bits precision from digits10 and digits2:\n//\ntemplate <class Digits10, class Digits2>\nstruct precision\n{\n   //\n   // Now work out the precision:\n   //\n   typedef typename mpl::if_c<\n      (Digits10::value == 0),\n      digits2<0>,\n      digits2<((Digits10::value + 1) * 1000L) / 301L>\n   >::type digits2_type;\npublic:\n#ifdef __BORLANDC__\n   typedef typename mpl::if_c<\n      (Digits2::value > ::boost::math::policies::detail::precision<Digits10,Digits2>::digits2_type::value),\n      Digits2, digits2_type>::type type;\n#else\n   typedef typename mpl::if_c<\n      (Digits2::value > digits2_type::value),\n      Digits2, digits2_type>::type type;\n#endif\n};\n\ntemplate <class A, class B, bool b>\nstruct select_result\n{\n   typedef A type;\n};\ntemplate <class A, class B>\nstruct select_result<A, B, false>\n{\n   typedef typename mpl::deref<B>::type type;\n};\n\ntemplate <class Seq, class Pred, class DefaultType>\nstruct find_arg\n{\nprivate:\n   typedef typename mpl::find_if<Seq, Pred>::type iter;\n   typedef typename mpl::end<Seq>::type end_type;\npublic:\n   typedef typename select_result<\n      DefaultType, iter,\n      ::boost::is_same<iter, end_type>::value>::type type;\n};\n\ndouble test_is_valid_arg(...);\ndouble test_is_default_arg(...);\nchar test_is_valid_arg(const default_policy*);\nchar test_is_default_arg(const default_policy*);\n\ntemplate <class T>\nstruct is_valid_policy_imp \n{\n   BOOST_STATIC_CONSTANT(bool, value = sizeof(::boost::math::policies::detail::test_is_valid_arg(static_cast<T*>(0))) == 1);\n};\n\ntemplate <class T>\nstruct is_default_policy_imp\n{\n   BOOST_STATIC_CONSTANT(bool, value = sizeof(::boost::math::policies::detail::test_is_default_arg(static_cast<T*>(0))) == 1);\n};\n\ntemplate <class T> struct is_valid_policy \n: public mpl::bool_< \n   ::boost::math::policies::detail::is_valid_policy_imp<T>::value>\n{};\n\ntemplate <class T> struct is_default_policy \n: public mpl::bool_< \n   ::boost::math::policies::detail::is_default_policy_imp<T>::value>\n{\n   template <class U>\n   struct apply\n   {\n      typedef is_default_policy<U> type;\n   };\n};\n\ntemplate <class Seq, class T, int N>\nstruct append_N\n{\n   typedef typename mpl::push_back<Seq, T>::type new_seq;\n   typedef typename append_N<new_seq, T, N-1>::type type;\n};\n\ntemplate <class Seq, class T>\nstruct append_N<Seq, T, 0>\n{\n   typedef Seq type;\n};\n\n//\n// Traits class to work out what template parameters our default\n// policy<> class will have when modified for forwarding:\n//\ntemplate <bool f, bool d>\nstruct default_args\n{\n   typedef promote_float<false> arg1;\n   typedef promote_double<false> arg2;\n};\n\ntemplate <>\nstruct default_args<false, false>\n{\n   typedef default_policy arg1;\n   typedef default_policy arg2;\n};\n\ntemplate <>\nstruct default_args<true, false>\n{\n   typedef promote_float<false> arg1;\n   typedef default_policy arg2;\n};\n\ntemplate <>\nstruct default_args<false, true>\n{\n   typedef promote_double<false> arg1;\n   typedef default_policy arg2;\n};\n\ntypedef default_args<BOOST_MATH_PROMOTE_FLOAT_POLICY, BOOST_MATH_PROMOTE_DOUBLE_POLICY>::arg1 forwarding_arg1;\ntypedef default_args<BOOST_MATH_PROMOTE_FLOAT_POLICY, BOOST_MATH_PROMOTE_DOUBLE_POLICY>::arg2 forwarding_arg2;\n\n} // detail\n//\n// Now define the policy type with enough arguments to handle all\n// the policies:\n//\ntemplate <class A1 = default_policy, \n          class A2 = default_policy, \n          class A3 = default_policy,\n          class A4 = default_policy,\n          class A5 = default_policy,\n          class A6 = default_policy,\n          class A7 = default_policy,\n          class A8 = default_policy,\n          class A9 = default_policy,\n          class A10 = default_policy,\n          class A11 = default_policy,\n          class A12 = default_policy,\n          class A13 = default_policy>\nstruct policy\n{\nprivate:\n   //\n   // Validate all our arguments:\n   //\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A1>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A2>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A3>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A4>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A5>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A6>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A7>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A8>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A9>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A10>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A11>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A12>::value);\n   BOOST_STATIC_ASSERT(::boost::math::policies::detail::is_valid_policy<A13>::value);\n   //\n   // Typelist of the arguments:\n   //\n   typedef mpl::list<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13> arg_list;\n\npublic:\n   typedef typename detail::find_arg<arg_list, is_domain_error<mpl::_1>, domain_error<> >::type domain_error_type;\n   typedef typename detail::find_arg<arg_list, is_pole_error<mpl::_1>, pole_error<> >::type pole_error_type;\n   typedef typename detail::find_arg<arg_list, is_overflow_error<mpl::_1>, overflow_error<> >::type overflow_error_type;\n   typedef typename detail::find_arg<arg_list, is_underflow_error<mpl::_1>, underflow_error<> >::type underflow_error_type;\n   typedef typename detail::find_arg<arg_list, is_denorm_error<mpl::_1>, denorm_error<> >::type denorm_error_type;\n   typedef typename detail::find_arg<arg_list, is_evaluation_error<mpl::_1>, evaluation_error<> >::type evaluation_error_type;\n   typedef typename detail::find_arg<arg_list, is_rounding_error<mpl::_1>, rounding_error<> >::type rounding_error_type;\n   typedef typename detail::find_arg<arg_list, is_indeterminate_result_error<mpl::_1>, indeterminate_result_error<> >::type indeterminate_result_error_type;\nprivate:\n   //\n   // Now work out the precision:\n   //\n   typedef typename detail::find_arg<arg_list, is_digits10<mpl::_1>, digits10<> >::type digits10_type;\n   typedef typename detail::find_arg<arg_list, is_digits2<mpl::_1>, digits2<> >::type bits_precision_type;\npublic:\n   typedef typename detail::precision<digits10_type, bits_precision_type>::type precision_type;\n   //\n   // Internal promotion:\n   //\n   typedef typename detail::find_arg<arg_list, is_promote_float<mpl::_1>, promote_float<> >::type promote_float_type;\n   typedef typename detail::find_arg<arg_list, is_promote_double<mpl::_1>, promote_double<> >::type promote_double_type;\n   //\n   // Discrete quantiles:\n   //\n   typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, discrete_quantile<> >::type discrete_quantile_type;\n   //\n   // Mathematically undefined properties:\n   //\n   typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, assert_undefined<> >::type assert_undefined_type;\n   //\n   // Max iterations:\n   //\n   typedef typename detail::find_arg<arg_list, is_max_series_iterations<mpl::_1>, max_series_iterations<> >::type max_series_iterations_type;\n   typedef typename detail::find_arg<arg_list, is_max_root_iterations<mpl::_1>, max_root_iterations<> >::type max_root_iterations_type;\n};\n//\n// These full specializations are defined to reduce the amount of\n// template instantiations that have to take place when using the default\n// policies, they have quite a large impact on compile times:\n//\ntemplate <>\nstruct policy<default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>\n{\npublic:\n   typedef domain_error<> domain_error_type;\n   typedef pole_error<> pole_error_type;\n   typedef overflow_error<> overflow_error_type;\n   typedef underflow_error<> underflow_error_type;\n   typedef denorm_error<> denorm_error_type;\n   typedef evaluation_error<> evaluation_error_type;\n   typedef rounding_error<> rounding_error_type;\n   typedef indeterminate_result_error<> indeterminate_result_error_type;\n#if BOOST_MATH_DIGITS10_POLICY == 0\n   typedef digits2<> precision_type;\n#else\n   typedef detail::precision<digits10<>, digits2<> >::type precision_type;\n#endif\n   typedef promote_float<> promote_float_type;\n   typedef promote_double<> promote_double_type;\n   typedef discrete_quantile<> discrete_quantile_type;\n   typedef assert_undefined<> assert_undefined_type;\n   typedef max_series_iterations<> max_series_iterations_type;\n   typedef max_root_iterations<> max_root_iterations_type;\n};\n\ntemplate <>\nstruct policy<detail::forwarding_arg1, detail::forwarding_arg2, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>\n{\npublic:\n   typedef domain_error<> domain_error_type;\n   typedef pole_error<> pole_error_type;\n   typedef overflow_error<> overflow_error_type;\n   typedef underflow_error<> underflow_error_type;\n   typedef denorm_error<> denorm_error_type;\n   typedef evaluation_error<> evaluation_error_type;\n   typedef rounding_error<> rounding_error_type;\n   typedef indeterminate_result_error<> indeterminate_result_error_type;\n#if BOOST_MATH_DIGITS10_POLICY == 0\n   typedef digits2<> precision_type;\n#else\n   typedef detail::precision<digits10<>, digits2<> >::type precision_type;\n#endif\n   typedef promote_float<false> promote_float_type;\n   typedef promote_double<false> promote_double_type;\n   typedef discrete_quantile<> discrete_quantile_type;\n   typedef assert_undefined<> assert_undefined_type;\n   typedef max_series_iterations<> max_series_iterations_type;\n   typedef max_root_iterations<> max_root_iterations_type;\n};\n\ntemplate <class Policy, \n          class A1 = default_policy, \n          class A2 = default_policy, \n          class A3 = default_policy,\n          class A4 = default_policy,\n          class A5 = default_policy,\n          class A6 = default_policy,\n          class A7 = default_policy,\n          class A8 = default_policy,\n          class A9 = default_policy,\n          class A10 = default_policy,\n          class A11 = default_policy,\n          class A12 = default_policy,\n          class A13 = default_policy>\nstruct normalise\n{\nprivate:\n   typedef mpl::list<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13> arg_list;\n   typedef typename detail::find_arg<arg_list, is_domain_error<mpl::_1>, typename Policy::domain_error_type >::type domain_error_type;\n   typedef typename detail::find_arg<arg_list, is_pole_error<mpl::_1>, typename Policy::pole_error_type >::type pole_error_type;\n   typedef typename detail::find_arg<arg_list, is_overflow_error<mpl::_1>, typename Policy::overflow_error_type >::type overflow_error_type;\n   typedef typename detail::find_arg<arg_list, is_underflow_error<mpl::_1>, typename Policy::underflow_error_type >::type underflow_error_type;\n   typedef typename detail::find_arg<arg_list, is_denorm_error<mpl::_1>, typename Policy::denorm_error_type >::type denorm_error_type;\n   typedef typename detail::find_arg<arg_list, is_evaluation_error<mpl::_1>, typename Policy::evaluation_error_type >::type evaluation_error_type;\n   typedef typename detail::find_arg<arg_list, is_rounding_error<mpl::_1>, typename Policy::rounding_error_type >::type rounding_error_type;\n   typedef typename detail::find_arg<arg_list, is_indeterminate_result_error<mpl::_1>, typename Policy::indeterminate_result_error_type >::type indeterminate_result_error_type;\n   //\n   // Now work out the precision:\n   //\n   typedef typename detail::find_arg<arg_list, is_digits10<mpl::_1>, digits10<> >::type digits10_type;\n   typedef typename detail::find_arg<arg_list, is_digits2<mpl::_1>, typename Policy::precision_type >::type bits_precision_type;\n   typedef typename detail::precision<digits10_type, bits_precision_type>::type precision_type;\n   //\n   // Internal promotion:\n   //\n   typedef typename detail::find_arg<arg_list, is_promote_float<mpl::_1>, typename Policy::promote_float_type >::type promote_float_type;\n   typedef typename detail::find_arg<arg_list, is_promote_double<mpl::_1>, typename Policy::promote_double_type >::type promote_double_type;\n   //\n   // Discrete quantiles:\n   //\n   typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, typename Policy::discrete_quantile_type >::type discrete_quantile_type;\n   //\n   // Mathematically undefined properties:\n   //\n   typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, typename Policy::assert_undefined_type >::type assert_undefined_type;\n   //\n   // Max iterations:\n   //\n   typedef typename detail::find_arg<arg_list, is_max_series_iterations<mpl::_1>, typename Policy::max_series_iterations_type>::type max_series_iterations_type;\n   typedef typename detail::find_arg<arg_list, is_max_root_iterations<mpl::_1>, typename Policy::max_root_iterations_type>::type max_root_iterations_type;\n   //\n   // Define a typelist of the policies:\n   //\n   typedef mpl::vector<\n      domain_error_type,\n      pole_error_type,\n      overflow_error_type,\n      underflow_error_type,\n      denorm_error_type,\n      evaluation_error_type,\n      rounding_error_type,\n      indeterminate_result_error_type,\n      precision_type,\n      promote_float_type,\n      promote_double_type,\n      discrete_quantile_type,\n      assert_undefined_type,\n      max_series_iterations_type,\n      max_root_iterations_type> result_list;\n   //\n   // Remove all the policies that are the same as the default:\n   //\n   typedef typename mpl::remove_if<result_list, detail::is_default_policy<mpl::_> >::type reduced_list;\n   //\n   // Pad out the list with defaults:\n   //\n   typedef typename detail::append_N<reduced_list, default_policy, (14 - ::boost::mpl::size<reduced_list>::value)>::type result_type;\npublic:\n   typedef policy<\n      typename mpl::at<result_type, mpl::int_<0> >::type,\n      typename mpl::at<result_type, mpl::int_<1> >::type,\n      typename mpl::at<result_type, mpl::int_<2> >::type,\n      typename mpl::at<result_type, mpl::int_<3> >::type,\n      typename mpl::at<result_type, mpl::int_<4> >::type,\n      typename mpl::at<result_type, mpl::int_<5> >::type,\n      typename mpl::at<result_type, mpl::int_<6> >::type,\n      typename mpl::at<result_type, mpl::int_<7> >::type,\n      typename mpl::at<result_type, mpl::int_<8> >::type,\n      typename mpl::at<result_type, mpl::int_<9> >::type,\n      typename mpl::at<result_type, mpl::int_<10> >::type,\n      typename mpl::at<result_type, mpl::int_<11> >::type,\n      typename mpl::at<result_type, mpl::int_<12> >::type > type;\n};\n//\n// Full specialisation to speed up compilation of the common case:\n//\ntemplate <>\nstruct normalise<policy<>, \n          promote_float<false>, \n          promote_double<false>, \n          discrete_quantile<>,\n          assert_undefined<>,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy>\n{\n   typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;\n};\n\ntemplate <>\nstruct normalise<policy<detail::forwarding_arg1, detail::forwarding_arg2>,\n          promote_float<false>,\n          promote_double<false>,\n          discrete_quantile<>,\n          assert_undefined<>,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy,\n          default_policy>\n{\n   typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;\n};\n\ninline policy<> make_policy()\n{ return policy<>(); }\n\ntemplate <class A1>\ninline typename normalise<policy<>, A1>::type make_policy(const A1&)\n{ \n   typedef typename normalise<policy<>, A1>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2>\ninline typename normalise<policy<>, A1, A2>::type make_policy(const A1&, const A2&)\n{ \n   typedef typename normalise<policy<>, A1, A2>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3>\ninline typename normalise<policy<>, A1, A2, A3>::type make_policy(const A1&, const A2&, const A3&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4>\ninline typename normalise<policy<>, A1, A2, A3, A4>::type make_policy(const A1&, const A2&, const A3&, const A4&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6, class A7>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&)\n{ \n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type result_type;\n   return result_type(); \n}\n\ntemplate <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>\ninline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&, const A11&)\n{\n   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type result_type;\n   return result_type();\n}\n\n//\n// Traits class to handle internal promotion:\n//\ntemplate <class Real, class Policy>\nstruct evaluation\n{\n   typedef Real type;\n};\n\ntemplate <class Policy>\nstruct evaluation<float, Policy>\n{\n   typedef typename mpl::if_<typename Policy::promote_float_type, double, float>::type type;\n};\n\ntemplate <class Policy>\nstruct evaluation<double, Policy>\n{\n   typedef typename mpl::if_<typename Policy::promote_double_type, long double, double>::type type;\n};\n\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n\ntemplate <class Real>\nstruct basic_digits : public mpl::int_<0>{ };\ntemplate <>\nstruct basic_digits<float> : public mpl::int_<FLT_MANT_DIG>{ };\ntemplate <>\nstruct basic_digits<double> : public mpl::int_<DBL_MANT_DIG>{ };\ntemplate <>\nstruct basic_digits<long double> : public mpl::int_<LDBL_MANT_DIG>{ };\n\ntemplate <class Real, class Policy>\nstruct precision\n{\n   BOOST_STATIC_ASSERT( ::std::numeric_limits<Real>::radix == 2);\n   typedef typename Policy::precision_type precision_type;\n   typedef basic_digits<Real> digits_t;\n   typedef typename mpl::if_<\n      mpl::equal_to<digits_t, mpl::int_<0> >,\n      // Possibly unknown precision:\n      precision_type,\n      typename mpl::if_<\n         mpl::or_<mpl::less_equal<digits_t, precision_type>, mpl::less_equal<precision_type, mpl::int_<0> > >,\n         // Default case, full precision for RealType:\n         digits2< ::std::numeric_limits<Real>::digits>,\n         // User customised precision:\n         precision_type\n      >::type\n   >::type type;\n};\n\ntemplate <class Policy>\nstruct precision<float, Policy>\n{\n   typedef digits2<FLT_MANT_DIG> type;\n};\ntemplate <class Policy>\nstruct precision<double, Policy>\n{\n   typedef digits2<DBL_MANT_DIG> type;\n};\ntemplate <class Policy>\nstruct precision<long double, Policy>\n{\n   typedef digits2<LDBL_MANT_DIG> type;\n};\n\n#else\n\ntemplate <class Real, class Policy>\nstruct precision\n{\n   BOOST_STATIC_ASSERT((::std::numeric_limits<Real>::radix == 2) || ((::std::numeric_limits<Real>::is_specialized == 0) || (::std::numeric_limits<Real>::digits == 0)));\n#ifndef __BORLANDC__\n   typedef typename Policy::precision_type precision_type;\n   typedef typename mpl::if_c<\n      ((::std::numeric_limits<Real>::is_specialized == 0) || (::std::numeric_limits<Real>::digits == 0)),\n      // Possibly unknown precision:\n      precision_type,\n      typename mpl::if_c<\n         ((::std::numeric_limits<Real>::digits <= precision_type::value) \n         || (Policy::precision_type::value <= 0)),\n         // Default case, full precision for RealType:\n         digits2< ::std::numeric_limits<Real>::digits>,\n         // User customised precision:\n         precision_type\n      >::type\n   >::type type;\n#else\n   typedef typename Policy::precision_type precision_type;\n   typedef mpl::int_< ::std::numeric_limits<Real>::digits> digits_t;\n   typedef mpl::bool_< ::std::numeric_limits<Real>::is_specialized> spec_t;\n   typedef typename mpl::if_<\n      mpl::or_<mpl::equal_to<spec_t, mpl::false_>, mpl::equal_to<digits_t, mpl::int_<0> > >,\n      // Possibly unknown precision:\n      precision_type,\n      typename mpl::if_<\n         mpl::or_<mpl::less_equal<digits_t, precision_type>, mpl::less_equal<precision_type, mpl::int_<0> > >,\n         // Default case, full precision for RealType:\n         digits2< ::std::numeric_limits<Real>::digits>,\n         // User customised precision:\n         precision_type\n      >::type\n   >::type type;\n#endif\n};\n\n#endif\n\nnamespace detail{\n\ntemplate <class T, class Policy>\ninline int digits_imp(mpl::true_ const&)\n{\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);\n#else\n   BOOST_ASSERT(::std::numeric_limits<T>::is_specialized);\n#endif\n   typedef typename boost::math::policies::precision<T, Policy>::type p_t;\n   return p_t::value;\n}\n\ntemplate <class T, class Policy>\ninline int digits_imp(mpl::false_ const&)\n{\n   return tools::digits<T>();\n}\n\n} // namespace detail\n\ntemplate <class T, class Policy>\ninline int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))\n{\n   typedef mpl::bool_< std::numeric_limits<T>::is_specialized > tag_type;\n   return detail::digits_imp<T, Policy>(tag_type());\n}\n\ntemplate <class Policy>\ninline unsigned long get_max_series_iterations()\n{\n   typedef typename Policy::max_series_iterations_type iter_type;\n   return iter_type::value;\n}\n\ntemplate <class Policy>\ninline unsigned long get_max_root_iterations()\n{\n   typedef typename Policy::max_root_iterations_type iter_type;\n   return iter_type::value;\n}\n\nnamespace detail{\n\ntemplate <class T, class Digits, class Small, class Default>\nstruct series_factor_calc\n{\n   static T get()\n   {\n      return ldexp(T(1.0), 1 - Digits::value);\n   }\n};\n\ntemplate <class T, class Digits>\nstruct series_factor_calc<T, Digits, mpl::true_, mpl::true_>\n{\n   static T get()\n   {\n      return boost::math::tools::epsilon<T>();\n   }\n};\ntemplate <class T, class Digits>\nstruct series_factor_calc<T, Digits, mpl::true_, mpl::false_>\n{\n   static T get()\n   {\n      static const boost::uintmax_t v = static_cast<boost::uintmax_t>(1u) << (Digits::value - 1);\n      return 1 / static_cast<T>(v);\n   }\n};\ntemplate <class T, class Digits>\nstruct series_factor_calc<T, Digits, mpl::false_, mpl::true_>\n{\n   static T get()\n   {\n      return boost::math::tools::epsilon<T>();\n   }\n};\n\ntemplate <class T, class Policy>\ninline T get_epsilon_imp(mpl::true_ const&)\n{\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);\n   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::radix == 2);\n#else\n   BOOST_ASSERT(::std::numeric_limits<T>::is_specialized);\n   BOOST_ASSERT(::std::numeric_limits<T>::radix == 2);\n#endif\n   typedef typename boost::math::policies::precision<T, Policy>::type p_t;\n   typedef mpl::bool_<p_t::value <= std::numeric_limits<boost::uintmax_t>::digits> is_small_int;\n   typedef mpl::bool_<p_t::value >= std::numeric_limits<T>::digits> is_default_value;\n   return series_factor_calc<T, p_t, is_small_int, is_default_value>::get();\n}\n\ntemplate <class T, class Policy>\ninline T get_epsilon_imp(mpl::false_ const&)\n{\n   return tools::epsilon<T>();\n}\n\n} // namespace detail\n\ntemplate <class T, class Policy>\ninline T get_epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))\n{\n   typedef mpl::bool_< (std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::radix == 2)) > tag_type;\n   return detail::get_epsilon_imp<T, Policy>(tag_type());\n}\n\nnamespace detail{\n\ntemplate <class A1, \n          class A2, \n          class A3,\n          class A4,\n          class A5,\n          class A6,\n          class A7,\n          class A8,\n          class A9,\n          class A10,\n          class A11>\nchar test_is_policy(const policy<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11>*);\ndouble test_is_policy(...);\n\ntemplate <class P>\nstruct is_policy_imp\n{\n   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::math::policies::detail::test_is_policy(static_cast<P*>(0))) == 1));\n};\n\n}\n\ntemplate <class P>\nstruct is_policy : public mpl::bool_< ::boost::math::policies::detail::is_policy_imp<P>::value> {};\n\n//\n// Helper traits class for distribution error handling:\n//\ntemplate <class Policy>\nstruct constructor_error_check\n{\n   typedef typename Policy::domain_error_type domain_error_type;\n   typedef typename mpl::if_c<\n      (domain_error_type::value == throw_on_error) || (domain_error_type::value == user_error),\n      mpl::true_,\n      mpl::false_>::type type;\n};\n\ntemplate <class Policy>\nstruct method_error_check\n{\n   typedef typename Policy::domain_error_type domain_error_type;\n   typedef typename mpl::if_c<\n      (domain_error_type::value == throw_on_error) && (domain_error_type::value != user_error),\n      mpl::false_,\n      mpl::true_>::type type;\n};\n\n}}} // namespaces\n\n#endif // BOOST_MATH_POLICY_HPP\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/special_functions/detail/fp_traits.hpp",
    "content": "// fp_traits.hpp\n\n#ifndef BOOST_MATH_FP_TRAITS_HPP\n#define BOOST_MATH_FP_TRAITS_HPP\n\n// Copyright (c) 2006 Johan Rade\n\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n/*\nTo support old compilers, care has been taken to avoid partial template\nspecialization and meta function forwarding.\nWith these techniques, the code could be simplified.\n*/\n\n#if defined(__vms) && defined(__DECCXX) && !__IEEE_FLOAT\n// The VAX floating point formats are used (for float and double)\n#   define BOOST_FPCLASSIFY_VAX_FORMAT\n#endif\n\n#include <cstring>\n\n#include <boost/assert.hpp>\n#include <boost/cstdint.hpp>\n#include <boost/detail/endian.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/type_traits/is_floating_point.hpp>\n\n#ifdef BOOST_NO_STDC_NAMESPACE\n  namespace std{ using ::memcpy; }\n#endif\n\n#ifndef FP_NORMAL\n\n#define FP_ZERO        0\n#define FP_NORMAL      1\n#define FP_INFINITE    2\n#define FP_NAN         3\n#define FP_SUBNORMAL   4\n\n#else\n\n#define BOOST_HAS_FPCLASSIFY\n\n#ifndef fpclassify\n#  if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) \\\n         && defined(_GLIBCXX_USE_C99_MATH) \\\n         && !(defined(_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC) \\\n         && (_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC != 0))\n#     ifdef _STLP_VENDOR_CSTD\n#        if _STLPORT_VERSION >= 0x520\n#           define BOOST_FPCLASSIFY_PREFIX ::__std_alias:: \n#        else\n#           define BOOST_FPCLASSIFY_PREFIX ::_STLP_VENDOR_CSTD:: \n#        endif\n#     else\n#        define BOOST_FPCLASSIFY_PREFIX ::std::\n#     endif\n#  else\n#     undef BOOST_HAS_FPCLASSIFY\n#     define BOOST_FPCLASSIFY_PREFIX\n#  endif\n#elif (defined(__HP_aCC) && !defined(__hppa))\n// aCC 6 appears to do \"#define fpclassify fpclassify\" which messes us up a bit!\n#  define BOOST_FPCLASSIFY_PREFIX ::\n#else\n#  define BOOST_FPCLASSIFY_PREFIX\n#endif\n\n#ifdef __MINGW32__\n#  undef BOOST_HAS_FPCLASSIFY\n#endif\n\n#endif\n\n\n//------------------------------------------------------------------------------\n\nnamespace boost {\nnamespace math {\nnamespace detail {\n\n//------------------------------------------------------------------------------\n\n/* \nThe following classes are used to tag the different methods that are used\nfor floating point classification\n*/\n\nstruct native_tag {};\ntemplate <bool has_limits>\nstruct generic_tag {};\nstruct ieee_tag {};\nstruct ieee_copy_all_bits_tag : public ieee_tag {};\nstruct ieee_copy_leading_bits_tag : public ieee_tag {};\n\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n//\n// These helper functions are used only when numeric_limits<>\n// members are not compile time constants:\n//\ninline bool is_generic_tag_false(const generic_tag<false>*)\n{\n   return true;\n}\ninline bool is_generic_tag_false(const void*)\n{\n   return false;\n}\n#endif\n\n//------------------------------------------------------------------------------\n\n/*\nMost processors support three different floating point precisions:\nsingle precision (32 bits), double precision (64 bits)\nand extended double precision (80 - 128 bits, depending on the processor)\n\nNote that the C++ type long double can be implemented\nboth as double precision and extended double precision.\n*/\n\nstruct unknown_precision{};\nstruct single_precision {};\nstruct double_precision {};\nstruct extended_double_precision {};\n\n// native_tag version --------------------------------------------------------------\n\ntemplate<class T> struct fp_traits_native\n{\n    typedef native_tag method;\n};\n\n// generic_tag version -------------------------------------------------------------\n\ntemplate<class T, class U> struct fp_traits_non_native\n{\n#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   typedef generic_tag<std::numeric_limits<T>::is_specialized> method;\n#else\n   typedef generic_tag<false> method;\n#endif\n};\n\n// ieee_tag versions ---------------------------------------------------------------\n\n/*\nThese specializations of fp_traits_non_native contain information needed\nto \"parse\" the binary representation of a floating point number.\n\nTypedef members:\n\n  bits -- the target type when copying the leading bytes of a floating\n      point number. It is a typedef for uint32_t or uint64_t.\n\n  method -- tells us whether all bytes are copied or not.\n      It is a typedef for ieee_copy_all_bits_tag or ieee_copy_leading_bits_tag.\n\nStatic data members:\n\n  sign, exponent, flag, significand -- bit masks that give the meaning of the\n  bits in the leading bytes.\n\nStatic function members:\n\n  get_bits(), set_bits() -- provide access to the leading bytes.\n\n*/\n\n// ieee_tag version, float (32 bits) -----------------------------------------------\n\n#ifndef BOOST_FPCLASSIFY_VAX_FORMAT\n\ntemplate<> struct fp_traits_non_native<float, single_precision>\n{\n    typedef ieee_copy_all_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7f800000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x007fffff);\n\n    typedef uint32_t bits;\n    static void get_bits(float x, uint32_t& a) { std::memcpy(&a, &x, 4); }\n    static void set_bits(float& x, uint32_t a) { std::memcpy(&x, &a, 4); }\n};\n\n// ieee_tag version, double (64 bits) ----------------------------------------------\n\n#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) \\\n   || defined(__BORLANDC__) || defined(__CODEGEAR__)\n\ntemplate<> struct fp_traits_non_native<double, double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);\n\n    typedef uint32_t bits;\n\n    static void get_bits(double x, uint32_t& a)\n    {\n        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);\n    }\n\n    static void set_bits(double& x, uint32_t a)\n    {\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);\n    }\n\nprivate:\n\n#if defined(BOOST_BIG_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 0);\n#elif defined(BOOST_LITTLE_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 4);\n#else\n    BOOST_STATIC_ASSERT(false);\n#endif\n};\n\n//..............................................................................\n\n#else\n\ntemplate<> struct fp_traits_non_native<double, double_precision>\n{\n    typedef ieee_copy_all_bits_tag method;\n\n    static const uint64_t sign     = ((uint64_t)0x80000000u) << 32;\n    static const uint64_t exponent = ((uint64_t)0x7ff00000) << 32;\n    static const uint64_t flag     = 0;\n    static const uint64_t significand\n        = (((uint64_t)0x000fffff) << 32) + ((uint64_t)0xffffffffu);\n\n    typedef uint64_t bits;\n    static void get_bits(double x, uint64_t& a) { std::memcpy(&a, &x, 8); }\n    static void set_bits(double& x, uint64_t a) { std::memcpy(&x, &a, 8); }\n};\n\n#endif\n\n#endif  // #ifndef BOOST_FPCLASSIFY_VAX_FORMAT\n\n// long double (64 bits) -------------------------------------------------------\n\n#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\\\n   || defined(__BORLANDC__) || defined(__CODEGEAR__)\n\ntemplate<> struct fp_traits_non_native<long double, double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);\n\n    typedef uint32_t bits;\n\n    static void get_bits(long double x, uint32_t& a)\n    {\n        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);\n    }\n\n    static void set_bits(long double& x, uint32_t a)\n    {\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);\n    }\n\nprivate:\n\n#if defined(BOOST_BIG_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 0);\n#elif defined(BOOST_LITTLE_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 4);\n#else\n    BOOST_STATIC_ASSERT(false);\n#endif\n};\n\n//..............................................................................\n\n#else\n\ntemplate<> struct fp_traits_non_native<long double, double_precision>\n{\n    typedef ieee_copy_all_bits_tag method;\n\n    static const uint64_t sign     = (uint64_t)0x80000000u << 32;\n    static const uint64_t exponent = (uint64_t)0x7ff00000 << 32;\n    static const uint64_t flag     = 0;\n    static const uint64_t significand\n        = ((uint64_t)0x000fffff << 32) + (uint64_t)0xffffffffu;\n\n    typedef uint64_t bits;\n    static void get_bits(long double x, uint64_t& a) { std::memcpy(&a, &x, 8); }\n    static void set_bits(long double& x, uint64_t a) { std::memcpy(&x, &a, 8); }\n};\n\n#endif\n\n\n// long double (>64 bits), x86 and x64 -----------------------------------------\n\n#if defined(__i386) || defined(__i386__) || defined(_M_IX86) \\\n    || defined(__amd64) || defined(__amd64__)  || defined(_M_AMD64) \\\n    || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)\n\n// Intel extended double precision format (80 bits)\n\ntemplate<>\nstruct fp_traits_non_native<long double, extended_double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00008000);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff);\n\n    typedef uint32_t bits;\n\n    static void get_bits(long double x, uint32_t& a)\n    {\n        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + 6, 4);\n    }\n\n    static void set_bits(long double& x, uint32_t a)\n    {\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + 6, &a, 4);\n    }\n};\n\n\n// long double (>64 bits), Itanium ---------------------------------------------\n\n#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)\n\n// The floating point format is unknown at compile time\n// No template specialization is provided.\n// The generic_tag definition is used.\n\n// The Itanium supports both\n// the Intel extended double precision format (80 bits) and\n// the IEEE extended double precision format with 15 exponent bits (128 bits).\n\n\n// long double (>64 bits), PowerPC ---------------------------------------------\n\n#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) \\\n    || defined(__ppc) || defined(__ppc__) || defined(__PPC__)\n\n// PowerPC extended double precision format (128 bits)\n\ntemplate<>\nstruct fp_traits_non_native<long double, extended_double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);\n\n    typedef uint32_t bits;\n\n    static void get_bits(long double x, uint32_t& a)\n    {\n        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);\n    }\n\n    static void set_bits(long double& x, uint32_t a)\n    {\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);\n    }\n\nprivate:\n\n#if defined(BOOST_BIG_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 0);\n#elif defined(BOOST_LITTLE_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 12);\n#else\n    BOOST_STATIC_ASSERT(false);\n#endif\n};\n\n\n// long double (>64 bits), Motorola 68K ----------------------------------------\n\n#elif defined(__m68k) || defined(__m68k__) \\\n    || defined(__mc68000) || defined(__mc68000__) \\\n\n// Motorola extended double precision format (96 bits)\n\n// It is the same format as the Intel extended double precision format,\n// except that 1) it is big-endian, 2) the 3rd and 4th byte are padding, and\n// 3) the flag bit is not set for infinity\n\ntemplate<>\nstruct fp_traits_non_native<long double, extended_double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00008000);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff);\n\n    // copy 1st, 2nd, 5th and 6th byte. 3rd and 4th byte are padding.\n\n    typedef uint32_t bits;\n\n    static void get_bits(long double x, uint32_t& a)\n    {\n        std::memcpy(&a, &x, 2);\n        std::memcpy(reinterpret_cast<unsigned char*>(&a) + 2,\n               reinterpret_cast<const unsigned char*>(&x) + 4, 2);\n    }\n\n    static void set_bits(long double& x, uint32_t a)\n    {\n        std::memcpy(&x, &a, 2);\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + 4,\n               reinterpret_cast<const unsigned char*>(&a) + 2, 2);\n    }\n};\n\n\n// long double (>64 bits), All other processors --------------------------------\n\n#else\n\n// IEEE extended double precision format with 15 exponent bits (128 bits)\n\ntemplate<>\nstruct fp_traits_non_native<long double, extended_double_precision>\n{\n    typedef ieee_copy_leading_bits_tag method;\n\n    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);\n    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);\n    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);\n    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x0000ffff);\n\n    typedef uint32_t bits;\n\n    static void get_bits(long double x, uint32_t& a)\n    {\n        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);\n    }\n\n    static void set_bits(long double& x, uint32_t a)\n    {\n        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);\n    }\n\nprivate:\n\n#if defined(BOOST_BIG_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 0);\n#elif defined(BOOST_LITTLE_ENDIAN)\n    BOOST_STATIC_CONSTANT(int, offset_ = 12);\n#else\n    BOOST_STATIC_ASSERT(false);\n#endif\n};\n\n#endif\n\n//------------------------------------------------------------------------------\n\n// size_to_precision is a type switch for converting a C++ floating point type\n// to the corresponding precision type.\n\ntemplate<int n, bool fp> struct size_to_precision\n{\n   typedef unknown_precision type;\n};\n\ntemplate<> struct size_to_precision<4, true>\n{\n    typedef single_precision type;\n};\n\ntemplate<> struct size_to_precision<8, true>\n{\n    typedef double_precision type;\n};\n\ntemplate<> struct size_to_precision<10, true>\n{\n    typedef extended_double_precision type;\n};\n\ntemplate<> struct size_to_precision<12, true>\n{\n    typedef extended_double_precision type;\n};\n\ntemplate<> struct size_to_precision<16, true>\n{\n    typedef extended_double_precision type;\n};\n\n//------------------------------------------------------------------------------\n//\n// Figure out whether to use native classification functions based on\n// whether T is a built in floating point type or not:\n//\ntemplate <class T>\nstruct select_native\n{\n    typedef BOOST_DEDUCED_TYPENAME size_to_precision<sizeof(T), ::boost::is_floating_point<T>::value>::type precision;\n    typedef fp_traits_non_native<T, precision> type;\n};\ntemplate<>\nstruct select_native<float>\n{\n    typedef fp_traits_native<float> type;\n};\ntemplate<>\nstruct select_native<double>\n{\n    typedef fp_traits_native<double> type;\n};\ntemplate<>\nstruct select_native<long double>\n{\n    typedef fp_traits_native<long double> type;\n};\n\n//------------------------------------------------------------------------------\n\n// fp_traits is a type switch that selects the right fp_traits_non_native\n\n#if (defined(BOOST_MATH_USE_C99) && !(defined(__GNUC__) && (__GNUC__ < 4))) \\\n   && !defined(__hpux) \\\n   && !defined(__DECCXX)\\\n   && !defined(__osf__) \\\n   && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\\\n   && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)\n#  define BOOST_MATH_USE_STD_FPCLASSIFY\n#endif\n\ntemplate<class T> struct fp_traits\n{\n    typedef BOOST_DEDUCED_TYPENAME size_to_precision<sizeof(T), ::boost::is_floating_point<T>::value>::type precision;\n#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)\n    typedef typename select_native<T>::type type;\n#else\n    typedef fp_traits_non_native<T, precision> type;\n#endif\n    typedef fp_traits_non_native<T, precision> sign_change_type;\n};\n\n//------------------------------------------------------------------------------\n\n}   // namespace detail\n}   // namespace math\n}   // namespace boost\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/special_functions/detail/round_fwd.hpp",
    "content": "// Copyright John Maddock 2008.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_SPECIAL_ROUND_FWD_HPP\n#define BOOST_MATH_SPECIAL_ROUND_FWD_HPP\n\n#include <boost/config.hpp>\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\nnamespace boost\n{\n   namespace math\n   { \n\n   template <class T, class Policy>\n   T trunc(const T& v, const Policy& pol);\n   template <class T>\n   T trunc(const T& v);\n   template <class T, class Policy>\n   int itrunc(const T& v, const Policy& pol);\n   template <class T>\n   int itrunc(const T& v);\n   template <class T, class Policy>\n   long ltrunc(const T& v, const Policy& pol);\n   template <class T>\n   long ltrunc(const T& v);\n#ifdef BOOST_HAS_LONG_LONG\n   template <class T, class Policy>\n   boost::long_long_type lltrunc(const T& v, const Policy& pol);\n   template <class T>\n   boost::long_long_type lltrunc(const T& v);\n#endif\n   template <class T, class Policy>\n   T round(const T& v, const Policy& pol);\n   template <class T>\n   T round(const T& v);\n   template <class T, class Policy>\n   int iround(const T& v, const Policy& pol);\n   template <class T>\n   int iround(const T& v);\n   template <class T, class Policy>\n   long lround(const T& v, const Policy& pol);\n   template <class T>\n   long lround(const T& v);\n#ifdef BOOST_HAS_LONG_LONG\n   template <class T, class Policy>\n   boost::long_long_type llround(const T& v, const Policy& pol);\n   template <class T>\n   boost::long_long_type llround(const T& v);\n#endif\n   template <class T, class Policy>\n   T modf(const T& v, T* ipart, const Policy& pol);\n   template <class T>\n   T modf(const T& v, T* ipart);\n   template <class T, class Policy>\n   T modf(const T& v, int* ipart, const Policy& pol);\n   template <class T>\n   T modf(const T& v, int* ipart);\n   template <class T, class Policy>\n   T modf(const T& v, long* ipart, const Policy& pol);\n   template <class T>\n   T modf(const T& v, long* ipart);\n#ifdef BOOST_HAS_LONG_LONG\n   template <class T, class Policy>\n   T modf(const T& v, boost::long_long_type* ipart, const Policy& pol);\n   template <class T>\n   T modf(const T& v, boost::long_long_type* ipart);\n#endif\n\n   }\n}\n#endif // BOOST_MATH_SPECIAL_ROUND_FWD_HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/special_functions/fpclassify.hpp",
    "content": "//  Copyright John Maddock 2005-2008.\n//  Copyright (c) 2006-2008 Johan Rade\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_FPCLASSIFY_HPP\n#define BOOST_MATH_FPCLASSIFY_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n#include <math.h>\n#include <boost/config/no_tr1/cmath.hpp>\n#include <boost/limits.hpp>\n#include <boost/math/tools/real_cast.hpp>\n#include <boost/type_traits/is_floating_point.hpp>\n#include <boost/math/special_functions/math_fwd.hpp>\n#include <boost/math/special_functions/detail/fp_traits.hpp>\n/*!\n  \\file fpclassify.hpp\n  \\brief Classify floating-point value as normal, subnormal, zero, infinite, or NaN.\n  \\version 1.0\n  \\author John Maddock\n */\n\n/*\n\n1. If the platform is C99 compliant, then the native floating point\nclassification functions are used.  However, note that we must only\ndefine the functions which call std::fpclassify etc if that function\nreally does exist: otherwise a compiler may reject the code even though\nthe template is never instantiated.\n\n2. If the platform is not C99 compliant, and the binary format for\na floating point type (float, double or long double) can be determined\nat compile time, then the following algorithm is used:\n\n        If all exponent bits, the flag bit (if there is one), \n        and all significand bits are 0, then the number is zero.\n\n        If all exponent bits and the flag bit (if there is one) are 0, \n        and at least one significand bit is 1, then the number is subnormal.\n\n        If all exponent bits are 1 and all significand bits are 0, \n        then the number is infinity.\n\n        If all exponent bits are 1 and at least one significand bit is 1,\n        then the number is a not-a-number.\n\n        Otherwise the number is normal.\n\n        This algorithm works for the IEEE 754 representation,\n        and also for several non IEEE 754 formats.\n\n    Most formats have the structure\n        sign bit + exponent bits + significand bits.\n    \n    A few have the structure\n        sign bit + exponent bits + flag bit + significand bits.\n    The flag bit is 0 for zero and subnormal numbers,\n        and 1 for normal numbers and NaN.\n        It is 0 (Motorola 68K) or 1 (Intel) for infinity.\n\n    To get the bits, the four or eight most significant bytes are copied\n    into an uint32_t or uint64_t and bit masks are applied.\n    This covers all the exponent bits and the flag bit (if there is one),\n    but not always all the significand bits.\n    Some of the functions below have two implementations,\n    depending on whether all the significand bits are copied or not.\n\n3. If the platform is not C99 compliant, and the binary format for\na floating point type (float, double or long double) can not be determined\nat compile time, then comparison with std::numeric_limits values\nis used.\n\n*/\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\n#include <float.h>\n#endif\n\n#ifdef BOOST_NO_STDC_NAMESPACE\n  namespace std{ using ::abs; using ::fabs; }\n#endif\n\nnamespace boost{ \n\n//\n// This must not be located in any namespace under boost::math\n// otherwise we can get into an infinite loop if isnan is\n// a #define for \"isnan\" !\n//\nnamespace math_detail{\n\ntemplate <class T>\ninline bool is_nan_helper(T t, const boost::true_type&)\n{\n#ifdef isnan\n   return isnan(t);\n#elif defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) || !defined(BOOST_HAS_FPCLASSIFY)\n   return false;\n#else // BOOST_HAS_FPCLASSIFY\n   return (BOOST_FPCLASSIFY_PREFIX fpclassify(t) == (int)FP_NAN);\n#endif\n}\n\ntemplate <class T>\ninline bool is_nan_helper(T, const boost::false_type&)\n{\n   return false;\n}\n\n}\n\nnamespace math{\n\nnamespace detail{\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\ntemplate <class T>\ninline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const native_tag&)\n{\n   return (std::fpclassify)(t);\n}\n#endif\n\ntemplate <class T>\ninline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<true>&)\n{\n   BOOST_MATH_INSTRUMENT_VARIABLE(t);\n\n   // whenever possible check for Nan's first:\n#if defined(BOOST_HAS_FPCLASSIFY)  && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)\n   if(::boost::math_detail::is_nan_helper(t, ::boost::is_floating_point<T>()))\n      return FP_NAN;\n#elif defined(isnan)\n   if(boost::math_detail::is_nan_helper(t, ::boost::is_floating_point<T>()))\n      return FP_NAN;\n#elif defined(_MSC_VER) || defined(__BORLANDC__)\n   if(::_isnan(boost::math::tools::real_cast<double>(t)))\n      return FP_NAN;\n#endif\n   // std::fabs broken on a few systems especially for long long!!!!\n   T at = (t < T(0)) ? -t : t;\n\n   // Use a process of exclusion to figure out\n   // what kind of type we have, this relies on\n   // IEEE conforming reals that will treat\n   // Nan's as unordered.  Some compilers\n   // don't do this once optimisations are\n   // turned on, hence the check for nan's above.\n   if(at <= (std::numeric_limits<T>::max)())\n   {\n      if(at >= (std::numeric_limits<T>::min)())\n         return FP_NORMAL;\n      return (at != 0) ? FP_SUBNORMAL : FP_ZERO;\n   }\n   else if(at > (std::numeric_limits<T>::max)())\n      return FP_INFINITE;\n   return FP_NAN;\n}\n\ntemplate <class T>\ninline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)\n{\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   if(std::numeric_limits<T>::is_specialized)\n      return fpclassify_imp(t, generic_tag<true>());\n#endif\n   // \n   // An unknown type with no numeric_limits support,\n   // so what are we supposed to do we do here?\n   //\n   BOOST_MATH_INSTRUMENT_VARIABLE(t);\n\n   return t == 0 ? FP_ZERO : FP_NORMAL;\n}\n\ntemplate<class T> \nint fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)\n{\n   typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n   BOOST_MATH_INSTRUMENT_VARIABLE(x);\n\n   BOOST_DEDUCED_TYPENAME traits::bits a;\n   traits::get_bits(x,a);\n   BOOST_MATH_INSTRUMENT_VARIABLE(a);\n   a &= traits::exponent | traits::flag | traits::significand;\n   BOOST_MATH_INSTRUMENT_VARIABLE((traits::exponent | traits::flag | traits::significand));\n   BOOST_MATH_INSTRUMENT_VARIABLE(a);\n\n   if(a <= traits::significand) {\n      if(a == 0)\n         return FP_ZERO;\n      else\n         return FP_SUBNORMAL;\n   }\n\n   if(a < traits::exponent) return FP_NORMAL;\n\n   a &= traits::significand;\n   if(a == 0) return FP_INFINITE;\n\n   return FP_NAN;\n}\n\ntemplate<class T> \nint fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)\n{\n   typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n   BOOST_MATH_INSTRUMENT_VARIABLE(x);\n\n   BOOST_DEDUCED_TYPENAME traits::bits a;\n   traits::get_bits(x,a); \n   a &= traits::exponent | traits::flag | traits::significand;\n\n   if(a <= traits::significand) {\n      if(x == 0)\n         return FP_ZERO;\n      else\n         return FP_SUBNORMAL;\n   }\n\n   if(a < traits::exponent) return FP_NORMAL;\n\n   a &= traits::significand;\n   traits::set_bits(x,a);\n   if(x == 0) return FP_INFINITE;\n\n   return FP_NAN;\n}\n\n#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)\ntemplate <>\ninline int fpclassify_imp<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)\n{\n   return boost::math::detail::fpclassify_imp(t, generic_tag<true>());\n}\n#endif\n\n}  // namespace detail\n\ntemplate <class T>\ninline int fpclassify BOOST_NO_MACRO_EXPAND(T t)\n{\n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename tools::promote_args<T>::type value_type;\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n   if(std::numeric_limits<T>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))\n      return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());\n   return detail::fpclassify_imp(static_cast<value_type>(t), method());\n#else\n   return detail::fpclassify_imp(static_cast<value_type>(t), method());\n#endif\n}\n\nnamespace detail {\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\n    template<class T> \n    inline bool isfinite_impl(T x, native_tag const&)\n    {\n        return (std::isfinite)(x);\n    }\n#endif\n\n    template<class T> \n    inline bool isfinite_impl(T x, generic_tag<true> const&)\n    {\n        return x >= -(std::numeric_limits<T>::max)()\n            && x <= (std::numeric_limits<T>::max)();\n    }\n\n    template<class T> \n    inline bool isfinite_impl(T x, generic_tag<false> const&)\n    {\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n      if(std::numeric_limits<T>::is_specialized)\n         return isfinite_impl(x, generic_tag<true>());\n#endif\n       (void)x; // warning supression.\n       return true;\n    }\n\n    template<class T> \n    inline bool isfinite_impl(T x, ieee_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a &= traits::exponent;\n        return a != traits::exponent;\n    }\n\n#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)\ntemplate <>\ninline bool isfinite_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)\n{\n   return boost::math::detail::isfinite_impl(t, generic_tag<true>());\n}\n#endif\n\n}\n\ntemplate<class T> \ninline bool (isfinite)(T x)\n{ //!< \\brief return true if floating-point type t is finite.\n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n   typedef typename tools::promote_args<T>::type value_type;\n   return detail::isfinite_impl(static_cast<value_type>(x), method());\n}\n\n//------------------------------------------------------------------------------\n\nnamespace detail {\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\n    template<class T> \n    inline bool isnormal_impl(T x, native_tag const&)\n    {\n        return (std::isnormal)(x);\n    }\n#endif\n\n    template<class T> \n    inline bool isnormal_impl(T x, generic_tag<true> const&)\n    {\n        if(x < 0) x = -x;\n        return x >= (std::numeric_limits<T>::min)()\n            && x <= (std::numeric_limits<T>::max)();\n    }\n\n    template<class T> \n    inline bool isnormal_impl(T x, generic_tag<false> const&)\n    {\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n      if(std::numeric_limits<T>::is_specialized)\n         return isnormal_impl(x, generic_tag<true>());\n#endif\n       return !(x == 0);\n    }\n\n    template<class T> \n    inline bool isnormal_impl(T x, ieee_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a &= traits::exponent | traits::flag;\n        return (a != 0) && (a < traits::exponent);\n    }\n\n#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)\ntemplate <>\ninline bool isnormal_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)\n{\n   return boost::math::detail::isnormal_impl(t, generic_tag<true>());\n}\n#endif\n\n}\n\ntemplate<class T> \ninline bool (isnormal)(T x)\n{\n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n   typedef typename tools::promote_args<T>::type value_type;\n   return detail::isnormal_impl(static_cast<value_type>(x), method());\n}\n\n//------------------------------------------------------------------------------\n\nnamespace detail {\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\n    template<class T> \n    inline bool isinf_impl(T x, native_tag const&)\n    {\n        return (std::isinf)(x);\n    }\n#endif\n\n    template<class T> \n    inline bool isinf_impl(T x, generic_tag<true> const&)\n    {\n        (void)x; // in case the compiler thinks that x is unused because std::numeric_limits<T>::has_infinity is false\n        return std::numeric_limits<T>::has_infinity \n            && ( x == std::numeric_limits<T>::infinity()\n                 || x == -std::numeric_limits<T>::infinity());\n    }\n\n    template<class T> \n    inline bool isinf_impl(T x, generic_tag<false> const&)\n    {\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n      if(std::numeric_limits<T>::is_specialized)\n         return isinf_impl(x, generic_tag<true>());\n#endif\n        (void)x; // warning supression.\n        return false;\n    }\n\n    template<class T> \n    inline bool isinf_impl(T x, ieee_copy_all_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a &= traits::exponent | traits::significand;\n        return a == traits::exponent;\n    }\n\n    template<class T> \n    inline bool isinf_impl(T x, ieee_copy_leading_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a &= traits::exponent | traits::significand;\n        if(a != traits::exponent)\n            return false;\n\n        traits::set_bits(x,0);\n        return x == 0;\n    }\n\n#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)\ntemplate <>\ninline bool isinf_impl<long double> BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)\n{\n   return boost::math::detail::isinf_impl(t, generic_tag<true>());\n}\n#endif\n\n}   // namespace detail\n\ntemplate<class T> \ninline bool (isinf)(T x)\n{\n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n   typedef typename tools::promote_args<T>::type value_type;\n   return detail::isinf_impl(static_cast<value_type>(x), method());\n}\n\n//------------------------------------------------------------------------------\n\nnamespace detail {\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\n    template<class T> \n    inline bool isnan_impl(T x, native_tag const&)\n    {\n        return (std::isnan)(x);\n    }\n#endif\n\n    template<class T> \n    inline bool isnan_impl(T x, generic_tag<true> const&)\n    {\n        return std::numeric_limits<T>::has_infinity\n            ? !(x <= std::numeric_limits<T>::infinity())\n            : x != x;\n    }\n\n    template<class T> \n    inline bool isnan_impl(T x, generic_tag<false> const&)\n    {\n#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\n      if(std::numeric_limits<T>::is_specialized)\n         return isnan_impl(x, generic_tag<true>());\n#endif\n        (void)x; // warning supression\n        return false;\n    }\n\n    template<class T> \n    inline bool isnan_impl(T x, ieee_copy_all_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a &= traits::exponent | traits::significand;\n        return a > traits::exponent;\n    }\n\n    template<class T> \n    inline bool isnan_impl(T x, ieee_copy_leading_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n\n        a &= traits::exponent | traits::significand;\n        if(a < traits::exponent)\n            return false;\n\n        a &= traits::significand;\n        traits::set_bits(x,a);\n        return x != 0;\n    }\n\n}   // namespace detail\n\ntemplate<class T> bool (isnan)(T x)\n{ //!< \\brief return true if floating-point type t is NaN (Not A Number).\n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n   return detail::isnan_impl(x, method());\n}\n\n#ifdef isnan\ntemplate <> inline bool isnan BOOST_NO_MACRO_EXPAND<float>(float t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }\ntemplate <> inline bool isnan BOOST_NO_MACRO_EXPAND<double>(double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }\ntemplate <> inline bool isnan BOOST_NO_MACRO_EXPAND<long double>(long double t){ return ::boost::math_detail::is_nan_helper(t, boost::true_type()); }\n#endif\n\n} // namespace math\n} // namespace boost\n\n#endif // BOOST_MATH_FPCLASSIFY_HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/special_functions/math_fwd.hpp",
    "content": "// math_fwd.hpp\n\n// TODO revise completely for new distribution classes.\n\n// Copyright Paul A. Bristow 2006.\n// Copyright John Maddock 2006.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n// Omnibus list of forward declarations of math special functions.\n\n// IT = Integer type.\n// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types\n// AT = Integer or Real type \n\n#ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP\n#define BOOST_MATH_SPECIAL_MATH_FWD_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n#include <boost/math/special_functions/detail/round_fwd.hpp>\n#include <boost/math/tools/promotion.hpp> // for argument promotion.\n#include <boost/math/policies/policy.hpp>\n#include <boost/mpl/comparison.hpp>\n#include <boost/config/no_tr1/complex.hpp>\n\n#define BOOST_NO_MACRO_EXPAND /**/\n\nnamespace boost\n{\n   namespace math\n   { // Math functions (in roughly alphabetic order).\n\n   // Beta functions.\n   template <class RT1, class RT2>\n   typename tools::promote_args<RT1, RT2>::type \n         beta(RT1 a, RT2 b); // Beta function (2 arguments).\n\n   template <class RT1, class RT2, class A>\n   typename tools::promote_args<RT1, RT2, A>::type \n         beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments).\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         betac(RT1 a, RT2 b, RT3 x);\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         betac(RT1 a, RT2 b, RT3 x, const Policy& pol);\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function.\n\n   template <class T1, class T2, class T3, class T4>\n   typename tools::promote_args<T1, T2, T3, T4>::type  \n         ibeta_inv(T1 a, T2 b, T3 p, T4* py);\n\n   template <class T1, class T2, class T3, class T4, class Policy>\n   typename tools::promote_args<T1, T2, T3, T4>::type  \n         ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol);\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.\n\n   template <class T1, class T2, class T3, class T4>\n   typename tools::promote_args<T1, T2, T3, T4>::type \n         ibetac_inv(T1 a, T2 b, T3 q, T4* py);\n\n   template <class T1, class T2, class T3, class T4, class Policy>\n   typename tools::promote_args<T1, T2, T3, T4>::type \n         ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol);\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.\n\n   template <class RT1, class RT2, class RT3>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_derivative(RT1 a, RT2 b, RT3 x);  // derivative of incomplete beta\n\n   template <class RT1, class RT2, class RT3, class Policy>\n   typename tools::promote_args<RT1, RT2, RT3>::type \n         ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol);  // derivative of incomplete beta\n\n   // erf & erfc error functions.\n   template <class RT> // Error function.\n   typename tools::promote_args<RT>::type erf(RT z);\n   template <class RT, class Policy> // Error function.\n   typename tools::promote_args<RT>::type erf(RT z, const Policy&);\n\n   template <class RT>// Error function complement.\n   typename tools::promote_args<RT>::type erfc(RT z);\n   template <class RT, class Policy>// Error function complement.\n   typename tools::promote_args<RT>::type erfc(RT z, const Policy&);\n\n   template <class RT>// Error function inverse.\n   typename tools::promote_args<RT>::type erf_inv(RT z);\n   template <class RT, class Policy>// Error function inverse.\n   typename tools::promote_args<RT>::type erf_inv(RT z, const Policy& pol);\n\n   template <class RT>// Error function complement inverse.\n   typename tools::promote_args<RT>::type erfc_inv(RT z);\n   template <class RT, class Policy>// Error function complement inverse.\n   typename tools::promote_args<RT>::type erfc_inv(RT z, const Policy& pol);\n\n   // Polynomials:\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type \n         legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);\n\n   template <class T>\n   typename tools::promote_args<T>::type \n         legendre_p(int l, T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type \n         legendre_p(int l, T x, const Policy& pol);\n\n   template <class T>\n   typename tools::promote_args<T>::type \n         legendre_q(unsigned l, T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type \n         legendre_q(unsigned l, T x, const Policy& pol);\n\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type \n         legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);\n\n   template <class T>\n   typename tools::promote_args<T>::type \n         legendre_p(int l, int m, T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type \n         legendre_p(int l, int m, T x, const Policy& pol);\n\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type  \n         laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);\n\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type  \n      laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1);\n\n   template <class T>\n   typename tools::promote_args<T>::type \n      laguerre(unsigned n, T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type \n      laguerre(unsigned n, unsigned m, T x, const Policy& pol);\n\n   template <class T1, class T2>\n   struct laguerre_result\n   {\n      typedef typename mpl::if_<\n         policies::is_policy<T2>,\n         typename tools::promote_args<T1>::type,\n         typename tools::promote_args<T2>::type\n      >::type type;\n   };\n\n   template <class T1, class T2>\n   typename laguerre_result<T1, T2>::type \n      laguerre(unsigned n, T1 m, T2 x);\n\n   template <class T>\n   typename tools::promote_args<T>::type \n      hermite(unsigned n, T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type \n      hermite(unsigned n, T x, const Policy& pol);\n\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type \n      hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);\n\n   template <class T1, class T2>\n   std::complex<typename tools::promote_args<T1, T2>::type> \n         spherical_harmonic(unsigned n, int m, T1 theta, T2 phi);\n\n   template <class T1, class T2, class Policy>\n   std::complex<typename tools::promote_args<T1, T2>::type> \n      spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type \n         spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type \n      spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type \n         spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type \n      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\n\n   // Elliptic integrals:\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type \n         ellint_rf(T1 x, T2 y, T3 z);\n\n   template <class T1, class T2, class T3, class Policy>\n   typename tools::promote_args<T1, T2, T3>::type \n         ellint_rf(T1 x, T2 y, T3 z, const Policy& pol);\n\n   template <class T1, class T2, class T3>\n   typename tools::promote_args<T1, T2, T3>::type \n         ellint_rd(T1 x, T2 y, T3 z);\n\n   template <class T1, class T2, class T3, class Policy>\n   typename tools::promote_args<T1, T2, T3>::type \n         ellint_rd(T1 x, T2 y, T3 z, const Policy& pol);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type \n         ellint_rc(T1 x, T2 y);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type \n         ellint_rc(T1 x, T2 y, const Policy& pol);\n\n   template <class T1, class T2, class T3, class T4>\n   typename tools::promote_args<T1, T2, T3, T4>::type \n         ellint_rj(T1 x, T2 y, T3 z, T4 p);\n\n   template <class T1, class T2, class T3, class T4, class Policy>\n   typename tools::promote_args<T1, T2, T3, T4>::type \n         ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol);\n\n   template <typename T>\n   typename tools::promote_args<T>::type ellint_2(T k);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi, const Policy& pol);\n\n   template <typename T>\n   typename tools::promote_args<T>::type ellint_1(T k);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi, const Policy& pol);\n\n   namespace detail{\n\n   template <class T, class U, class V>\n   struct ellint_3_result\n   {\n      typedef typename mpl::if_<\n         policies::is_policy<V>,\n         typename tools::promote_args<T, U>::type,\n         typename tools::promote_args<T, U, V>::type\n      >::type type;\n   };\n\n   } // namespace detail\n\n\n   template <class T1, class T2, class T3>\n   typename detail::ellint_3_result<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi);\n\n   template <class T1, class T2, class T3, class Policy>\n   typename tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi, const Policy& pol);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v);\n\n   // Factorial functions.\n   // Note: not for integral types, at present.\n   template <class RT>\n   struct max_factorial;\n   template <class RT>\n   RT factorial(unsigned int);\n   template <class RT, class Policy>\n   RT factorial(unsigned int, const Policy& pol);\n   template <class RT>\n   RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT)); \n   template <class RT>\n   RT double_factorial(unsigned i);\n   template <class RT, class Policy>\n   RT double_factorial(unsigned i, const Policy& pol);\n\n   template <class RT>\n   typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n, const Policy& pol);\n\n   template <class RT>\n   typename tools::promote_args<RT>::type rising_factorial(RT x, int n);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type rising_factorial(RT x, int n, const Policy& pol);\n\n   // Gamma functions.\n   template <class RT>\n   typename tools::promote_args<RT>::type tgamma(RT z);\n\n   template <class RT>\n   typename tools::promote_args<RT>::type tgamma1pm1(RT z);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type tgamma1pm1(RT z, const Policy& pol);\n\n   template <class RT1, class RT2>\n   typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z);\n\n   template <class RT1, class RT2, class Policy>\n   typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z, const Policy& pol);\n\n   template <class RT>\n   typename tools::promote_args<RT>::type lgamma(RT z, int* sign);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type lgamma(RT z, int* sign, const Policy& pol);\n\n   template <class RT>\n   typename tools::promote_args<RT>::type lgamma(RT x);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type lgamma(RT x, const Policy& pol);\n\n   template <class RT1, class RT2>\n   typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z);\n\n   template <class RT1, class RT2, class Policy>\n   typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z, const Policy&);\n\n   template <class RT1, class RT2>\n   typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z);\n\n   template <class RT1, class RT2, class Policy>\n   typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z, const Policy&);\n\n   template <class RT1, class RT2>\n   typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z);\n\n   template <class RT1, class RT2, class Policy>\n   typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x, const Policy&);\n\n   // gamma inverse.\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q, const Policy&);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q, const Policy&);\n\n   // digamma:\n   template <class T>\n   typename tools::promote_args<T>::type digamma(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type digamma(T x, const Policy&);\n\n   // Hypotenuse function sqrt(x ^ 2 + y ^ 2).\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type \n         hypot(T1 x, T2 y);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type \n         hypot(T1 x, T2 y, const Policy&);\n\n   // cbrt - cube root.\n   template <class RT>\n   typename tools::promote_args<RT>::type cbrt(RT z);\n\n   template <class RT, class Policy>\n   typename tools::promote_args<RT>::type cbrt(RT z, const Policy&);\n\n   // log1p is log(x + 1)\n   template <class T>\n   typename tools::promote_args<T>::type log1p(T);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type log1p(T, const Policy&);\n\n   // log1pmx is log(x + 1) - x\n   template <class T>\n   typename tools::promote_args<T>::type log1pmx(T);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type log1pmx(T, const Policy&);\n\n   // Exp (x) minus 1 functions.\n   template <class T>\n   typename tools::promote_args<T>::type expm1(T);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type expm1(T, const Policy&);\n\n   // Power - 1\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type \n         powm1(const T1 a, const T2 z);\n\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type \n         powm1(const T1 a, const T2 z, const Policy&);\n\n   // sqrt(1+x) - 1\n   template <class T>\n   typename tools::promote_args<T>::type sqrt1pm1(const T& val);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type sqrt1pm1(const T& val, const Policy&);\n\n   // sinus cardinals:\n   template <class T>\n   typename tools::promote_args<T>::type sinc_pi(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type sinc_pi(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type sinhc_pi(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type sinhc_pi(T x, const Policy&);\n\n   // inverse hyperbolics:\n   template<typename T>\n   typename tools::promote_args<T>::type asinh(T x);\n\n   template<typename T, class Policy>\n   typename tools::promote_args<T>::type asinh(T x, const Policy&);\n\n   template<typename T>\n   typename tools::promote_args<T>::type acosh(T x);\n\n   template<typename T, class Policy>\n   typename tools::promote_args<T>::type acosh(T x, const Policy&);\n\n   template<typename T>\n   typename tools::promote_args<T>::type atanh(T x);\n\n   template<typename T, class Policy>\n   typename tools::promote_args<T>::type atanh(T x, const Policy&);\n\n   namespace detail{\n\n      typedef mpl::int_<0> bessel_no_int_tag;      // No integer optimisation possible.\n      typedef mpl::int_<1> bessel_maybe_int_tag;   // Maybe integer optimisation.\n      typedef mpl::int_<2> bessel_int_tag;         // Definite integer optimistaion.\n\n      template <class T1, class T2, class Policy>\n      struct bessel_traits\n      {\n         typedef typename tools::promote_args<\n            T1, T2\n         >::type result_type;\n\n         typedef typename policies::precision<result_type, Policy>::type precision_type;\n\n         typedef typename mpl::if_<\n            mpl::or_<\n               mpl::less_equal<precision_type, mpl::int_<0> >,\n               mpl::greater<precision_type, mpl::int_<64> > >,\n            bessel_no_int_tag,\n            typename mpl::if_<\n               is_integral<T1>,\n               bessel_int_tag,\n               bessel_maybe_int_tag\n            >::type\n         >::type optimisation_tag;\n      };\n   } // detail\n\n   // Bessel functions:\n   template <class T1, class T2, class Policy>\n   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j(T1 v, T2 x);\n\n   template <class T, class Policy>\n   typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel(unsigned v, T x, const Policy& pol);\n\n   template <class T>\n   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel(unsigned v, T x);\n\n   template <class T1, class T2, class Policy>\n   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i(T1 v, T2 x);\n\n   template <class T1, class T2, class Policy>\n   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k(T1 v, T2 x);\n\n   template <class T1, class T2, class Policy>\n   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann(T1 v, T2 x);\n\n   template <class T, class Policy>\n   typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann(unsigned v, T x, const Policy& pol);\n\n   template <class T>\n   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann(unsigned v, T x);\n\n   template <class T1, class T2, class Policy>\n   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_1(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_1(T1 v, T2 x);\n\n   template <class T1, class T2, class Policy>\n   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_2(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_2(T1 v, T2 x);\n\n   template <class T1, class T2, class Policy>\n   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_1(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_1(T1 v, T2 x);\n\n   template <class T1, class T2, class Policy>\n   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_2(T1 v, T2 x, const Policy& pol);\n\n   template <class T1, class T2>\n   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_2(T1 v, T2 x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type airy_ai(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type airy_ai(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type airy_bi(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type airy_bi(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type airy_ai_prime(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type airy_ai_prime(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type airy_bi_prime(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type airy_bi_prime(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type sin_pi(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type sin_pi(T x);\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type cos_pi(T x, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type cos_pi(T x);\n\n   template <class T>\n   int fpclassify BOOST_NO_MACRO_EXPAND(T t);\n\n   template <class T>\n   bool isfinite BOOST_NO_MACRO_EXPAND(T z);\n\n   template <class T>\n   bool isinf BOOST_NO_MACRO_EXPAND(T t);\n\n   template <class T>\n   bool isnan BOOST_NO_MACRO_EXPAND(T t);\n\n   template <class T>\n   bool isnormal BOOST_NO_MACRO_EXPAND(T t);\n\n   template<class T> \n   int signbit BOOST_NO_MACRO_EXPAND(T x);\n\n   template <class T>\n   int sign BOOST_NO_MACRO_EXPAND(const T& z);\n\n   template <class T>\n   T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y);\n\n   template <class T>\n   T changesign BOOST_NO_MACRO_EXPAND(const T& z);\n\n   // Exponential integrals:\n   namespace detail{\n\n   template <class T, class U>\n   struct expint_result\n   {\n      typedef typename mpl::if_<\n         policies::is_policy<U>,\n         typename tools::promote_args<T>::type,\n         typename tools::promote_args<U>::type\n      >::type type;\n   };\n\n   } // namespace detail\n\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type expint(unsigned n, T z, const Policy&);\n\n   template <class T, class U>\n   typename detail::expint_result<T, U>::type expint(T const z, U const u);\n\n   template <class T>\n   typename tools::promote_args<T>::type expint(T z);\n\n   // Zeta:\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type zeta(T s, const Policy&);\n\n   // Owen's T function:\n   template <class T1, class T2, class Policy>\n   typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a, const Policy& pol);\n\n   template <class T1, class T2>\n   typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a);\n\n   // Jacobi Functions:\n   template <class T, class Policy>\n   typename tools::promote_args<T>::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn, const Policy&);\n\n   template <class T>\n   typename tools::promote_args<T>::type jacobi_elliptic(T k, T theta, T* pcn = 0, T* pdn = 0);\n\n   template <class U, class T, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta, const Policy& pol);\n\n   template <class U, class T>\n   typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta);\n\n   template <class T, class U, class Policy>\n   typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta, const Policy& pol);\n\n   template <class T, class U>\n   typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta);\n\n\n   template <class T>\n   typename tools::promote_args<T>::type zeta(T s);\n\n   // pow:\n   template <int N, typename T, class Policy>\n   typename tools::promote_args<T>::type pow(T base, const Policy& policy);\n\n   template <int N, typename T>\n   typename tools::promote_args<T>::type pow(T base);\n\n   // next:\n   template <class T, class Policy>\n   T nextafter(const T&, const T&, const Policy&);\n   template <class T>\n   T nextafter(const T&, const T&);\n   template <class T, class Policy>\n   T float_next(const T&, const Policy&);\n   template <class T>\n   T float_next(const T&);\n   template <class T, class Policy>\n   T float_prior(const T&, const Policy&);\n   template <class T>\n   T float_prior(const T&);\n   template <class T, class Policy>\n   T float_distance(const T&, const T&, const Policy&);\n   template <class T>\n   T float_distance(const T&, const T&);\n\n    } // namespace math\n} // namespace boost\n\n#ifdef BOOST_HAS_LONG_LONG\n#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\\\n   \\\n   template <class T>\\\n   inline T modf(const T& v, boost::long_long_type* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\\\n   \\\n   template <class T>\\\n   inline boost::long_long_type lltrunc(const T& v){ using boost::math::lltrunc; return lltrunc(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline boost::long_long_type llround(const T& v){ using boost::math::llround; return llround(v, Policy()); }\\\n\n#else\n#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\n#endif\n\n#define BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(Policy)\\\n   \\\n   BOOST_MATH_DETAIL_LL_FUNC(Policy)\\\n   \\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type \\\n   beta(RT1 a, RT2 b) { return ::boost::math::beta(a, b, Policy()); }\\\n\\\n   template <class RT1, class RT2, class A>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, A>::type \\\n   beta(RT1 a, RT2 b, A x){ return ::boost::math::beta(a, b, x, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   betac(RT1 a, RT2 b, RT3 x) { return ::boost::math::betac(a, b, x, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibeta(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta(a, b, x, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibetac(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibetac(a, b, x, Policy()); }\\\n\\\n   template <class T1, class T2, class T3, class T4>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type  \\\n   ibeta_inv(T1 a, T2 b, T3 p, T4* py){ return ::boost::math::ibeta_inv(a, b, p, py, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibeta_inv(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inv(a, b, p, Policy()); }\\\n\\\n   template <class T1, class T2, class T3, class T4>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type \\\n   ibetac_inv(T1 a, T2 b, T3 q, T4* py){ return ::boost::math::ibetac_inv(a, b, q, py, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibeta_inva(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inva(a, b, p, Policy()); }\\\n\\\n   template <class T1, class T2, class T3>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3>::type \\\n   ibetac_inva(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_inva(a, b, q, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibeta_invb(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_invb(a, b, p, Policy()); }\\\n\\\n   template <class T1, class T2, class T3>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3>::type \\\n   ibetac_invb(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_invb(a, b, q, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibetac_inv(RT1 a, RT2 b, RT3 q){ return ::boost::math::ibetac_inv(a, b, q, Policy()); }\\\n\\\n   template <class RT1, class RT2, class RT3>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2, RT3>::type \\\n   ibeta_derivative(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta_derivative(a, b, x, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type erf(RT z) { return ::boost::math::erf(z, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type erfc(RT z){ return ::boost::math::erfc(z, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type erf_inv(RT z) { return ::boost::math::erf_inv(z, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type erfc_inv(RT z){ return ::boost::math::erfc_inv(z, Policy()); }\\\n\\\n   using boost::math::legendre_next;\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type \\\n   legendre_p(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type \\\n   legendre_q(unsigned l, T x){ return ::boost::math::legendre_q(l, x, Policy()); }\\\n\\\n   using ::boost::math::legendre_next;\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type \\\n   legendre_p(int l, int m, T x){ return ::boost::math::legendre_p(l, m, x, Policy()); }\\\n\\\n   using ::boost::math::laguerre_next;\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type \\\n   laguerre(unsigned n, T x){ return ::boost::math::laguerre(n, x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::laguerre_result<T1, T2>::type \\\n   laguerre(unsigned n, T1 m, T2 x) { return ::boost::math::laguerre(n, m, x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type \\\n   hermite(unsigned n, T x){ return ::boost::math::hermite(n, x, Policy()); }\\\n\\\n   using boost::math::hermite_next;\\\n\\\n   template <class T1, class T2>\\\n   inline std::complex<typename boost::math::tools::promote_args<T1, T2>::type> \\\n   spherical_harmonic(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic(n, m, theta, phi, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n   spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi){ return ::boost::math::spherical_harmonic_r(n, m, theta, phi, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n   spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic_i(n, m, theta, phi, Policy()); }\\\n\\\n   template <class T1, class T2, class Policy>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\\\n\\\n   template <class T1, class T2, class T3>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3>::type \\\n   ellint_rf(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rf(x, y, z, Policy()); }\\\n\\\n   template <class T1, class T2, class T3>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3>::type \\\n   ellint_rd(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rd(x, y, z, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n   ellint_rc(T1 x, T2 y){ return ::boost::math::ellint_rc(x, y, Policy()); }\\\n\\\n   template <class T1, class T2, class T3, class T4>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3, T4>::type \\\n   ellint_rj(T1 x, T2 y, T3 z, T4 p){ return boost::math::ellint_rj(x, y, z, p, Policy()); }\\\n\\\n   template <typename T>\\\n   inline typename boost::math::tools::promote_args<T>::type ellint_2(T k){ return boost::math::ellint_2(k, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi){ return boost::math::ellint_2(k, phi, Policy()); }\\\n\\\n   template <typename T>\\\n   inline typename boost::math::tools::promote_args<T>::type ellint_1(T k){ return boost::math::ellint_1(k, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi){ return boost::math::ellint_1(k, phi, Policy()); }\\\n\\\n   template <class T1, class T2, class T3>\\\n   inline typename boost::math::tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi){ return boost::math::ellint_3(k, v, phi, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v){ return boost::math::ellint_3(k, v, Policy()); }\\\n\\\n   using boost::math::max_factorial;\\\n   template <class RT>\\\n   inline RT factorial(unsigned int i) { return boost::math::factorial<RT>(i, Policy()); }\\\n   using boost::math::unchecked_factorial;\\\n   template <class RT>\\\n   inline RT double_factorial(unsigned i){ return boost::math::double_factorial<RT>(i, Policy()); }\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type falling_factorial(RT x, unsigned n){ return boost::math::falling_factorial(x, n, Policy()); }\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type rising_factorial(RT x, unsigned n){ return boost::math::rising_factorial(x, n, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type tgamma(RT z){ return boost::math::tgamma(z, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type tgamma1pm1(RT z){ return boost::math::tgamma1pm1(z, Policy()); }\\\n\\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z){ return boost::math::tgamma(a, z, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type lgamma(RT z, int* sign){ return boost::math::lgamma(z, sign, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type lgamma(RT x){ return boost::math::lgamma(x, Policy()); }\\\n\\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z){ return boost::math::tgamma_lower(a, z, Policy()); }\\\n\\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z){ return boost::math::gamma_q(a, z, Policy()); }\\\n\\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z){ return boost::math::gamma_p(a, z, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta){ return boost::math::tgamma_delta_ratio(z, delta, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b) { return boost::math::tgamma_ratio(a, b, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x){ return boost::math::gamma_p_derivative(a, x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p){ return boost::math::gamma_p_inv(a, p, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p){ return boost::math::gamma_p_inva(a, p, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q){ return boost::math::gamma_q_inv(a, q, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q){ return boost::math::gamma_q_inva(a, q, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type digamma(T x){ return boost::math::digamma(x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n   hypot(T1 x, T2 y){ return boost::math::hypot(x, y, Policy()); }\\\n\\\n   template <class RT>\\\n   inline typename boost::math::tools::promote_args<RT>::type cbrt(RT z){ return boost::math::cbrt(z, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type log1p(T x){ return boost::math::log1p(x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type log1pmx(T x){ return boost::math::log1pmx(x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type expm1(T x){ return boost::math::expm1(x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::tools::promote_args<T1, T2>::type \\\n   powm1(const T1 a, const T2 z){ return boost::math::powm1(a, z, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type sqrt1pm1(const T& val){ return boost::math::sqrt1pm1(val, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type sinc_pi(T x){ return boost::math::sinc_pi(x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type sinhc_pi(T x){ return boost::math::sinhc_pi(x, Policy()); }\\\n\\\n   template<typename T>\\\n   inline typename boost::math::tools::promote_args<T>::type asinh(const T x){ return boost::math::asinh(x, Policy()); }\\\n\\\n   template<typename T>\\\n   inline typename boost::math::tools::promote_args<T>::type acosh(const T x){ return boost::math::acosh(x, Policy()); }\\\n\\\n   template<typename T>\\\n   inline typename boost::math::tools::promote_args<T>::type atanh(const T x){ return boost::math::atanh(x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j(T1 v, T2 x)\\\n   { return boost::math::cyl_bessel_j(v, x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel(unsigned v, T x)\\\n   { return boost::math::sph_bessel(v, x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \\\n   cyl_bessel_i(T1 v, T2 x) { return boost::math::cyl_bessel_i(v, x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \\\n   cyl_bessel_k(T1 v, T2 x) { return boost::math::cyl_bessel_k(v, x, Policy()); }\\\n\\\n   template <class T1, class T2>\\\n   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \\\n   cyl_neumann(T1 v, T2 x){ return boost::math::cyl_neumann(v, x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \\\n   sph_neumann(unsigned v, T x){ return boost::math::sph_neumann(v, x, Policy()); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type sin_pi(T x){ return boost::math::sin_pi(x); }\\\n\\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type cos_pi(T x){ return boost::math::cos_pi(x); }\\\n\\\n   using boost::math::fpclassify;\\\n   using boost::math::isfinite;\\\n   using boost::math::isinf;\\\n   using boost::math::isnan;\\\n   using boost::math::isnormal;\\\n   using boost::math::signbit;\\\n   using boost::math::sign;\\\n   using boost::math::copysign;\\\n   using boost::math::changesign;\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T,U>::type expint(T const& z, U const& u)\\\n   { return boost::math::expint(z, u, Policy()); }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type expint(T z){ return boost::math::expint(z, Policy()); }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type zeta(T s){ return boost::math::zeta(s, Policy()); }\\\n   \\\n   template <class T>\\\n   inline T round(const T& v){ using boost::math::round; return round(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline int iround(const T& v){ using boost::math::iround; return iround(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline long lround(const T& v){ using boost::math::lround; return lround(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline T trunc(const T& v){ using boost::math::trunc; return trunc(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline int itrunc(const T& v){ using boost::math::itrunc; return itrunc(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline long ltrunc(const T& v){ using boost::math::ltrunc; return ltrunc(v, Policy()); }\\\n   \\\n   template <class T>\\\n   inline T modf(const T& v, T* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\\\n   \\\n   template <class T>\\\n   inline T modf(const T& v, int* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\\\n   \\\n   template <class T>\\\n   inline T modf(const T& v, long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\\\n   \\\n   template <int N, class T>\\\n   inline typename boost::math::tools::promote_args<T>::type pow(T v){ return boost::math::pow<N>(v, Policy()); }\\\n   \\\n   template <class T> T nextafter(const T& a, const T& b){ return boost::math::nextafter(a, b, Policy()); }\\\n   template <class T> T float_next(const T& a){ return boost::math::float_next(a, Policy()); }\\\n   template <class T> T float_prior(const T& a){ return boost::math::float_prior(a, Policy()); }\\\n   template <class T> T float_distance(const T& a, const T& b){ return boost::math::float_distance(a, b, Policy()); }\\\n   \\\n   template <class RT1, class RT2>\\\n   inline typename boost::math::tools::promote_args<RT1, RT2>::type owens_t(RT1 a, RT2 z){ return boost::math::owens_t(a, z, Policy()); }\\\n   \\\n   template <class T1, class T2>\\\n   inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_1(T1 v, T2 x)\\\n   {  return boost::math::cyl_hankel_1(v, x, Policy()); }\\\n   \\\n   template <class T1, class T2>\\\n   inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_2(T1 v, T2 x)\\\n   { return boost::math::cyl_hankel_2(v, x, Policy()); }\\\n   \\\n   template <class T1, class T2>\\\n   inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_1(T1 v, T2 x)\\\n   { return boost::math::sph_hankel_1(v, x, Policy()); }\\\n   \\\n   template <class T1, class T2>\\\n   inline std::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_2(T1 v, T2 x)\\\n   { return boost::math::sph_hankel_2(v, x, Policy()); }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn)\\\n   { return boost::math::jacobi_elliptic(k, theta, pcn, pdn, Policy()); }\\\n   \\\n   template <class U, class T>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_sn(U k, T theta)\\\n   { return boost::math::jacobi_sn(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_cn(T k, U theta)\\\n   { return boost::math::jacobi_cn(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_dn(T k, U theta)\\\n   { return boost::math::jacobi_dn(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_cd(T k, U theta)\\\n   { return boost::math::jacobi_cd(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_dc(T k, U theta)\\\n   { return boost::math::jacobi_dc(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_ns(T k, U theta)\\\n   { return boost::math::jacobi_ns(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_sd(T k, U theta)\\\n   { return boost::math::jacobi_sd(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_ds(T k, U theta)\\\n   { return boost::math::jacobi_ds(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_nc(T k, U theta)\\\n   { return boost::math::jacobi_nc(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_nd(T k, U theta)\\\n   { return boost::math::jacobi_nd(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_sc(T k, U theta)\\\n   { return boost::math::jacobi_sc(k, theta, Policy()); }\\\n   \\\n   template <class T, class U>\\\n   inline typename boost::math::tools::promote_args<T, U>::type jacobi_cs(T k, U theta)\\\n   { return boost::math::jacobi_cs(k, theta, Policy()); }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type airy_ai(T x)\\\n   {  return boost::math::airy_ai(x, Policy());  }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type airy_bi(T x)\\\n   {  return boost::math::airy_bi(x, Policy());  }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type airy_ai_prime(T x)\\\n   {  return boost::math::airy_ai_prime(x, Policy());  }\\\n   \\\n   template <class T>\\\n   inline typename boost::math::tools::promote_args<T>::type airy_bi_prime(T x)\\\n   {  return boost::math::airy_bi_prime(x, Policy());  }\\\n   \\\n\n\n\n\n\n#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/special_functions/sign.hpp",
    "content": "//  (C) Copyright John Maddock 2006.\n//  (C) Copyright Johan Rade 2006.\n//  (C) Copyright Paul A. Bristow 2011 (added changesign).\n\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_TOOLS_SIGN_HPP\n#define BOOST_MATH_TOOLS_SIGN_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n#include <boost/math/tools/config.hpp>\n#include <boost/math/special_functions/math_fwd.hpp>\n#include <boost/math/special_functions/detail/fp_traits.hpp>\n\nnamespace boost{ namespace math{ \n\nnamespace detail {\n\n  // signbit\n\n#ifdef BOOST_MATH_USE_STD_FPCLASSIFY\n    template<class T> \n    inline int signbit_impl(T x, native_tag const&)\n    {\n        return (std::signbit)(x);\n    }\n#endif\n\n    template<class T> \n    inline int signbit_impl(T x, generic_tag<true> const&)\n    {\n        return x < 0;\n    }\n\n    template<class T> \n    inline int signbit_impl(T x, generic_tag<false> const&)\n    {\n        return x < 0;\n    }\n\n    template<class T> \n    inline int signbit_impl(T x, ieee_copy_all_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        return a & traits::sign ? 1 : 0;\n    }\n\n    template<class T> \n    inline int signbit_impl(T x, ieee_copy_leading_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n\n        return a & traits::sign ? 1 : 0;\n    }\n\n    // Changesign\n\n    template<class T>\n    inline T (changesign_impl)(T x, generic_tag<true> const&)\n    {\n        return -x;\n    }\n\n    template<class T>\n    inline T (changesign_impl)(T x, generic_tag<false> const&)\n    {\n        return -x;\n    }\n\n\n    template<class T>\n    inline T changesign_impl(T x, ieee_copy_all_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::sign_change_type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a ^= traits::sign;\n        traits::set_bits(x,a);\n        return x;\n    }\n\n    template<class T>\n    inline T (changesign_impl)(T x, ieee_copy_leading_bits_tag const&)\n    {\n        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::sign_change_type traits;\n\n        BOOST_DEDUCED_TYPENAME traits::bits a;\n        traits::get_bits(x,a);\n        a ^= traits::sign;\n        traits::set_bits(x,a);\n        return x;\n    }\n\n\n}   // namespace detail\n\ntemplate<class T> int (signbit)(T x)\n{ \n   typedef typename detail::fp_traits<T>::type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n   return detail::signbit_impl(x, method());\n}\n\ntemplate <class T>\ninline int sign BOOST_NO_MACRO_EXPAND(const T& z)\n{\n   return (z == 0) ? 0 : (boost::math::signbit)(z) ? -1 : 1;\n}\n\ntemplate<class T> T (changesign)(const T& x)\n{ //!< \\brief return unchanged binary pattern of x, except for change of sign bit. \n   typedef typename detail::fp_traits<T>::sign_change_type traits;\n   typedef typename traits::method method;\n   typedef typename boost::is_floating_point<T>::type fp_tag;\n\n   return detail::changesign_impl(x, method());\n}\n\ntemplate <class T>\ninline T copysign BOOST_NO_MACRO_EXPAND(const T& x, const T& y)\n{\n   BOOST_MATH_STD_USING\n   return (boost::math::signbit)(x) != (boost::math::signbit)(y) ? (boost::math::changesign)(x) : x;\n}\n\n} // namespace math\n} // namespace boost\n\n\n#endif // BOOST_MATH_TOOLS_SIGN_HPP\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/tools/config.hpp",
    "content": "//  Copyright (c) 2006-7 John Maddock\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_TOOLS_CONFIG_HPP\n#define BOOST_MATH_TOOLS_CONFIG_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <boost/cstdint.hpp> // for boost::uintmax_t\n#include <boost/detail/workaround.hpp>\n#include <algorithm>  // for min and max\n#include <boost/config/no_tr1/cmath.hpp>\n#include <climits>\n#include <cfloat>\n#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))\n#  include <math.h>\n#endif\n\n#include <boost/math/tools/user.hpp>\n#include <boost/math/special_functions/detail/round_fwd.hpp>\n\n#if (defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) \\\n   || (defined(__hppa) && !defined(__OpenBSD__)) || (defined(__NO_LONG_DOUBLE_MATH) && (DBL_MANT_DIG != LDBL_MANT_DIG))) \\\n   && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)\n#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#endif\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))\n//\n// Borland post 5.8.2 uses Dinkumware's std C lib which\n// doesn't have true long double precision.  Earlier\n// versions are problematic too:\n//\n#  define BOOST_MATH_NO_REAL_CONCEPT_TESTS\n#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#  define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)\n#  include <float.h>\n#endif\n#ifdef __IBMCPP__\n//\n// For reasons I don't unserstand, the tests with IMB's compiler all\n// pass at long double precision, but fail with real_concept, those tests\n// are disabled for now.  (JM 2012).\n#  define BOOST_MATH_NO_REAL_CONCEPT_TESTS\n#endif\n#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)\n//\n// Darwin's rather strange \"double double\" is rather hard to\n// support, it should be possible given enough effort though...\n//\n#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#endif\n#if defined(unix) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER <= 1000) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)\n//\n// Intel compiler prior to version 10 has sporadic problems\n// calling the long double overloads of the std lib math functions:\n// calling ::powl is OK, but std::pow(long double, long double) \n// may segfault depending upon the value of the arguments passed \n// and the specific Linux distribution.\n//\n// We'll be conservative and disable long double support for this compiler.\n//\n// Comment out this #define and try building the tests to determine whether\n// your Intel compiler version has this issue or not.\n//\n#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#endif\n#if defined(unix) && defined(__INTEL_COMPILER)\n//\n// Intel compiler has sporadic issues compiling std::fpclassify depending on\n// the exact OS version used.  Use our own code for this as we know it works\n// well on Intel processors:\n//\n#define BOOST_MATH_DISABLE_STD_FPCLASSIFY\n#endif\n\n#if defined(BOOST_MSVC) && !defined(_WIN32_WCE)\n   // Better safe than sorry, our tests don't support hardware exceptions:\n#  define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)\n#endif\n\n#ifdef __IBMCPP__\n#  define BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS\n#endif\n\n#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901))\n#  define BOOST_MATH_USE_C99\n#endif\n\n#if (defined(__hpux) && !defined(__hppa))\n#  define BOOST_MATH_USE_C99\n#endif\n\n#if defined(__GNUC__) && defined(_GLIBCXX_USE_C99)\n#  define BOOST_MATH_USE_C99\n#endif\n\n#if defined(__CYGWIN__) || defined(__HP_aCC) || defined(BOOST_INTEL) \\\n  || defined(BOOST_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) \\\n  || (defined(__GNUC__) && !defined(BOOST_MATH_USE_C99))\n#  define BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY\n#endif\n\n#if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)\n\n#  include \"boost/type.hpp\"\n#  include \"boost/non_type.hpp\"\n\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)         boost::type<t>* = 0\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)    boost::type<t>*\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)  boost::non_type<t, v>* = 0\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  boost::non_type<t, v>*\n\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t)         \\\n             , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)    \\\n             , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)  \\\n             , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  \\\n             , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n#else\n\n// no workaround needed: expand to nothing\n\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)\n#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)\n\n\n#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS\n\n#if (defined(__SUNPRO_CC) || defined(__hppa) || defined(__GNUC__)) && !defined(BOOST_MATH_SMALL_CONSTANT)\n// Sun's compiler emits a hard error if a constant underflows,\n// as does aCC on PA-RISC, while gcc issues a large number of warnings:\n#  define BOOST_MATH_SMALL_CONSTANT(x) 0\n#else\n#  define BOOST_MATH_SMALL_CONSTANT(x) x\n#endif\n\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)\n//\n// Define if constants too large for a float cause \"bad\"\n// values to be stored in the data, rather than infinity\n// or a suitably large value.\n//\n#  define BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS\n#endif\n//\n// Tune performance options for specific compilers:\n//\n#ifdef BOOST_MSVC\n#  define BOOST_MATH_POLY_METHOD 2\n#elif defined(BOOST_INTEL)\n#  define BOOST_MATH_POLY_METHOD 2\n#  define BOOST_MATH_RATIONAL_METHOD 2\n#elif defined(__GNUC__)\n#  define BOOST_MATH_POLY_METHOD 3\n#  define BOOST_MATH_RATIONAL_METHOD 3\n#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT\n#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L\n#endif\n\n#if defined(BOOST_NO_LONG_LONG) && !defined(BOOST_MATH_INT_TABLE_TYPE)\n#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT\n#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L\n#endif\n\n//\n// The maximum order of polynomial that will be evaluated \n// via an unrolled specialisation:\n//\n#ifndef BOOST_MATH_MAX_POLY_ORDER\n#  define BOOST_MATH_MAX_POLY_ORDER 17\n#endif \n//\n// Set the method used to evaluate polynomials and rationals:\n//\n#ifndef BOOST_MATH_POLY_METHOD\n#  define BOOST_MATH_POLY_METHOD 1\n#endif \n#ifndef BOOST_MATH_RATIONAL_METHOD\n#  define BOOST_MATH_RATIONAL_METHOD 0\n#endif \n//\n// decide whether to store constants as integers or reals:\n//\n#ifndef BOOST_MATH_INT_TABLE_TYPE\n#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT\n#endif\n#ifndef BOOST_MATH_INT_VALUE_SUFFIX\n#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##SUF\n#endif\n\n//\n// Helper macro for controlling the FP behaviour:\n//\n#ifndef BOOST_MATH_CONTROL_FP\n#  define BOOST_MATH_CONTROL_FP\n#endif\n//\n// Helper macro for using statements:\n//\n#define BOOST_MATH_STD_USING \\\n   using std::abs;\\\n   using std::acos;\\\n   using std::cos;\\\n   using std::fmod;\\\n   using std::modf;\\\n   using std::tan;\\\n   using std::asin;\\\n   using std::cosh;\\\n   using std::frexp;\\\n   using std::pow;\\\n   using std::tanh;\\\n   using std::atan;\\\n   using std::exp;\\\n   using std::ldexp;\\\n   using std::sin;\\\n   using std::atan2;\\\n   using std::fabs;\\\n   using std::log;\\\n   using std::sinh;\\\n   using std::ceil;\\\n   using std::floor;\\\n   using std::log10;\\\n   using std::sqrt;\\\n   using boost::math::round;\\\n   using boost::math::iround;\\\n   using boost::math::lround;\\\n   using boost::math::trunc;\\\n   using boost::math::itrunc;\\\n   using boost::math::ltrunc;\\\n   using boost::math::modf;\n\n\nnamespace boost{ namespace math{\nnamespace tools\n{\n\ntemplate <class T>\ninline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c)\n{\n   return (std::max)((std::max)(a, b), c);\n}\n\ntemplate <class T>\ninline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d)\n{\n   return (std::max)((std::max)(a, b), (std::max)(c, d));\n}\n\n} // namespace tools\n\ntemplate <class T>\nvoid suppress_unused_variable_warning(const T&)\n{\n}\n\n}} // namespace boost namespace math\n\n#if ((defined(__linux__) && !defined(__UCLIBC__)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H)\n\n   #include <boost/detail/fenv.hpp>\n\n#  ifdef FE_ALL_EXCEPT\n\nnamespace boost{ namespace math{\n   namespace detail\n   {\n   struct fpu_guard\n   {\n      fpu_guard()\n      {\n         fegetexceptflag(&m_flags, FE_ALL_EXCEPT);\n         feclearexcept(FE_ALL_EXCEPT);\n      }\n      ~fpu_guard()\n      {\n         fesetexceptflag(&m_flags, FE_ALL_EXCEPT);\n      }\n   private:\n      fexcept_t m_flags;\n   };\n\n   } // namespace detail\n   }} // namespaces\n\n#    define BOOST_FPU_EXCEPTION_GUARD boost::math::detail::fpu_guard local_guard_object;\n#    define BOOST_MATH_INSTRUMENT_FPU do{ fexcept_t cpu_flags; fegetexceptflag(&cpu_flags, FE_ALL_EXCEPT); BOOST_MATH_INSTRUMENT_VARIABLE(cpu_flags); } while(0); \n\n#  else\n\n#    define BOOST_FPU_EXCEPTION_GUARD\n#    define BOOST_MATH_INSTRUMENT_FPU\n\n#  endif\n\n#else // All other platforms.\n#  define BOOST_FPU_EXCEPTION_GUARD\n#  define BOOST_MATH_INSTRUMENT_FPU\n#endif\n\n#ifdef BOOST_MATH_INSTRUMENT\n#define BOOST_MATH_INSTRUMENT_CODE(x) \\\n   std::cout << std::setprecision(35) << __FILE__ << \":\" << __LINE__ << \" \" << x << std::endl;\n#define BOOST_MATH_INSTRUMENT_VARIABLE(name) BOOST_MATH_INSTRUMENT_CODE(BOOST_STRINGIZE(name) << \" = \" << name)\n#else\n#define BOOST_MATH_INSTRUMENT_CODE(x)\n#define BOOST_MATH_INSTRUMENT_VARIABLE(name)\n#endif\n\n#endif // BOOST_MATH_TOOLS_CONFIG_HPP\n\n\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/tools/promotion.hpp",
    "content": "// boost\\math\\tools\\promotion.hpp\n\n// Copyright John Maddock 2006.\n// Copyright Paul A. Bristow 2006.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n// Promote arguments functions to allow math functions to have arguments\n// provided as integer OR real (floating-point, built-in or UDT)\n// (called ArithmeticType in functions that use promotion)\n// that help to reduce the risk of creating multiple instantiations.\n// Allows creation of an inline wrapper that forwards to a foo(RT, RT) function,\n// so you never get to instantiate any mixed foo(RT, IT) functions.\n\n#ifndef BOOST_MATH_PROMOTION_HPP\n#define BOOST_MATH_PROMOTION_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n// Boost type traits:\n#include <boost/math/tools/config.hpp>\n#include <boost/type_traits/is_floating_point.hpp> // for boost::is_floating_point;\n#include <boost/type_traits/is_integral.hpp> // for boost::is_integral\n#include <boost/type_traits/is_convertible.hpp> // for boost::is_convertible\n#include <boost/type_traits/is_same.hpp>// for boost::is_same\n#include <boost/type_traits/remove_cv.hpp>// for boost::remove_cv\n// Boost Template meta programming:\n#include <boost/mpl/if.hpp> // for boost::mpl::if_c.\n#include <boost/mpl/and.hpp> // for boost::mpl::if_c.\n#include <boost/mpl/or.hpp> // for boost::mpl::if_c.\n#include <boost/mpl/not.hpp> // for boost::mpl::if_c.\n\n#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n#include <boost/static_assert.hpp>\n#endif\n\nnamespace boost\n{\n  namespace math\n  {\n    namespace tools\n    {\n      // If either T1 or T2 is an integer type,\n      // pretend it was a double (for the purposes of further analysis).\n      // Then pick the wider of the two floating-point types\n      // as the actual signature to forward to.\n      // For example:\n      // foo(int, short) -> double foo(double, double);\n      // foo(int, float) -> double foo(double, double);\n      // Note: NOT float foo(float, float)\n      // foo(int, double) -> foo(double, double);\n      // foo(double, float) -> double foo(double, double);\n      // foo(double, float) -> double foo(double, double);\n      // foo(any-int-or-float-type, long double) -> foo(long double, long double);\n      // but ONLY float foo(float, float) is unchanged.\n      // So the only way to get an entirely float version is to call foo(1.F, 2.F),\n      // But since most (all?) the math functions convert to double internally,\n      // probably there would not be the hoped-for gain by using float here.\n\n      // This follows the C-compatible conversion rules of pow, etc\n      // where pow(int, float) is converted to pow(double, double).\n\n      template <class T>\n      struct promote_arg\n      { // If T is integral type, then promote to double.\n        typedef typename mpl::if_<is_integral<T>, double, T>::type type;\n      };\n      // These full specialisations reduce mpl::if_ usage and speed up\n      // compilation:\n      template <> struct promote_arg<float> { typedef float type; };\n      template <> struct promote_arg<double>{ typedef double type; };\n      template <> struct promote_arg<long double> { typedef long double type; };\n      template <> struct promote_arg<int> {  typedef double type; };\n\n      template <class T1, class T2>\n      struct promote_args_2\n      { // Promote, if necessary, & pick the wider of the two floating-point types.\n        // for both parameter types, if integral promote to double.\n        typedef typename promote_arg<T1>::type T1P; // T1 perhaps promoted.\n        typedef typename promote_arg<T2>::type T2P; // T2 perhaps promoted.\n\n        typedef typename mpl::if_<\n          typename mpl::and_<is_floating_point<T1P>, is_floating_point<T2P> >::type, // both T1P and T2P are floating-point?\n          typename mpl::if_< typename mpl::or_<is_same<long double, T1P>, is_same<long double, T2P> >::type, // either long double?\n            long double, // then result type is long double.\n            typename mpl::if_< typename mpl::or_<is_same<double, T1P>, is_same<double, T2P> >::type, // either double?\n            double, // result type is double.\n          float // else result type is float.\n          >::type\n          >::type,\n          // else one or the other is a user-defined type:\n          typename mpl::if_< typename mpl::and_<mpl::not_<is_floating_point<T2P> >, ::boost::is_convertible<T1P, T2P> >, T2P, T1P>::type>::type type;\n      }; // promote_arg2\n      // These full specialisations reduce mpl::if_ usage and speed up\n      // compilation:\n      template <> struct promote_args_2<float, float> { typedef float type; };\n      template <> struct promote_args_2<double, double>{ typedef double type; };\n      template <> struct promote_args_2<long double, long double> { typedef long double type; };\n      template <> struct promote_args_2<int, int> {  typedef double type; };\n      template <> struct promote_args_2<int, float> {  typedef double type; };\n      template <> struct promote_args_2<float, int> {  typedef double type; };\n      template <> struct promote_args_2<int, double> {  typedef double type; };\n      template <> struct promote_args_2<double, int> {  typedef double type; };\n      template <> struct promote_args_2<int, long double> {  typedef long double type; };\n      template <> struct promote_args_2<long double, int> {  typedef long double type; };\n      template <> struct promote_args_2<float, double> {  typedef double type; };\n      template <> struct promote_args_2<double, float> {  typedef double type; };\n      template <> struct promote_args_2<float, long double> {  typedef long double type; };\n      template <> struct promote_args_2<long double, float> {  typedef long double type; };\n      template <> struct promote_args_2<double, long double> {  typedef long double type; };\n      template <> struct promote_args_2<long double, double> {  typedef long double type; };\n\n      template <class T1, class T2=float, class T3=float, class T4=float, class T5=float, class T6=float>\n      struct promote_args\n      {\n         typedef typename promote_args_2<\n            typename remove_cv<T1>::type,\n            typename promote_args_2<\n               typename remove_cv<T2>::type,\n               typename promote_args_2<\n                  typename remove_cv<T3>::type,\n                  typename promote_args_2<\n                     typename remove_cv<T4>::type,\n                     typename promote_args_2<\n                        typename remove_cv<T5>::type, typename remove_cv<T6>::type\n                     >::type\n                  >::type\n               >::type\n            >::type\n         >::type type;\n\n#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n         //\n         // Guard against use of long double if it's not supported:\n         //\n         BOOST_STATIC_ASSERT((0 == ::boost::is_same<type, long double>::value));\n#endif\n      };\n\n    } // namespace tools\n  } // namespace math\n} // namespace boost\n\n#endif // BOOST_MATH_PROMOTION_HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/tools/real_cast.hpp",
    "content": "//  Copyright John Maddock 2006.\n//  Use, modification and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_TOOLS_REAL_CAST_HPP\n#define BOOST_MATH_TOOLS_REAL_CAST_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\nnamespace boost{ namespace math\n{\n  namespace tools\n  {\n    template <class To, class T>\n    inline To real_cast(T t)\n    {\n       return static_cast<To>(t);\n    }\n  } // namespace tools\n} // namespace math\n} // namespace boost\n\n#endif // BOOST_MATH_TOOLS_REAL_CAST_HPP\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/math/tools/user.hpp",
    "content": "// Copyright John Maddock 2007.\n// Copyright Paul A. Bristow 2007.\n\n// Use, modification and distribution are subject to the\n// Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt\n// or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_MATH_TOOLS_USER_HPP\n#define BOOST_MATH_TOOLS_USER_HPP\n\n#ifdef _MSC_VER\n#pragma once\n#endif\n\n// This file can be modified by the user to change the default policies.\n// See \"Changing the Policy Defaults\" in documentation.\n\n// define this if the platform has no long double functions,\n// or if the long double versions have only double precision:\n//\n// #define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS\n//\n// Performance tuning options:\n//\n// #define BOOST_MATH_POLY_METHOD 3\n// #define BOOST_MATH_RATIONAL_METHOD 3\n//\n// The maximum order of polynomial that will be evaluated\n// via an unrolled specialisation:\n//\n// #define BOOST_MATH_MAX_POLY_ORDER 17\n//\n// decide whether to store constants as integers or reals:\n//\n// #define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT\n\n//\n// Default policies follow:\n//\n// Domain errors:\n//\n// #define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error\n//\n// Pole errors:\n//\n// #define BOOST_MATH_POLE_ERROR_POLICY throw_on_error\n//\n// Overflow Errors:\n//\n// #define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error\n//\n// Internal Evaluation Errors:\n//\n// #define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error\n//\n// Underfow:\n//\n// #define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error\n//\n// Denorms:\n//\n// #define BOOST_MATH_DENORM_ERROR_POLICY ignore_error\n//\n// Max digits to use for internal calculations:\n//\n// #define BOOST_MATH_DIGITS10_POLICY 0\n//\n// Promote floats to doubles internally?\n//\n// #define BOOST_MATH_PROMOTE_FLOAT_POLICY true\n//\n// Promote doubles to long double internally:\n//\n// #define BOOST_MATH_PROMOTE_DOUBLE_POLICY true\n//\n// What do discrete quantiles return?\n//\n// #define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards\n//\n// If a function is mathematically undefined\n// (for example the Cauchy distribution has no mean),\n// then do we stop the code from compiling?\n//\n// #define BOOST_MATH_ASSERT_UNDEFINED_POLICY true\n//\n// Maximum series iterstions permitted:\n//\n// #define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000\n//\n// Maximum root finding steps permitted:\n//\n// define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200\n\n#endif // BOOST_MATH_TOOLS_USER_HPP\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mem_fn.hpp",
    "content": "#ifndef BOOST_MEM_FN_HPP_INCLUDED\n#define BOOST_MEM_FN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  mem_fn.hpp - a generalization of std::mem_fun[_ref]\n//\n//  Copyright (c) 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.\n//\n\n#include <boost/bind/mem_fn.hpp>\n\n#endif // #ifndef BOOST_MEM_FN_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/memory_order.hpp",
    "content": "#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED\n#define BOOST_MEMORY_ORDER_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  boost/memory_order.hpp\n//\n//  Defines enum boost::memory_order per the C++0x working draft\n//\n//  Copyright (c) 2008, 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n\nnamespace boost\n{\n\n//\n// Enum values are chosen so that code that needs to insert\n// a trailing fence for acquire semantics can use a single\n// test such as:\n//\n// if( mo & memory_order_acquire ) { ...fence... }\n//\n// For leading fences one can use:\n//\n// if( mo & memory_order_release ) { ...fence... }\n//\n// Architectures such as Alpha that need a fence on consume\n// can use:\n//\n// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... }\n//\n\nenum memory_order\n{\n    memory_order_relaxed = 0,\n    memory_order_acquire = 1,\n    memory_order_release = 2,\n    memory_order_acq_rel = 3, // acquire | release\n    memory_order_seq_cst = 7, // acq_rel | 4\n    memory_order_consume = 8\n};\n\n} // namespace boost\n\n#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/O1_size_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\n// returns sequence size if it's an O(1) operation; otherwise returns -1\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct O1_size\n    : O1_size_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, O1_size, (Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, O1_size)\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/O1_size_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: O1_size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct O1_size_impl;\ntemplate< typename Sequence > struct O1_size;\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/advance.hpp",
    "content": "\n#ifndef BOOST_MPL_ADVANCE_HPP_INCLUDED\n#define BOOST_MPL_ADVANCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: advance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/negate.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/advance_forward.hpp>\n#include <boost/mpl/aux_/advance_backward.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation for forward/bidirectional iterators\ntemplate< typename Tag >\nstruct advance_impl\n{\n    template< typename Iterator, typename N > struct apply\n    {\n        typedef typename less< N,long_<0> >::type backward_;\n        typedef typename if_< backward_, negate<N>, N >::type offset_;\n\n        typedef typename if_<\n              backward_\n            , aux::advance_backward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >\n            , aux::advance_forward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >\n            >::type f_;\n\n        typedef typename apply_wrap1<f_,Iterator>::type type;\n    };\n};\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Iterator)\n    , typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct advance\n    : advance_impl< typename tag<Iterator>::type >\n        ::template apply<Iterator,N>\n{\n};\n\ntemplate<\n      typename Iterator\n    , BOOST_MPL_AUX_NTTP_DECL(long, N)\n    >\nstruct advance_c\n    : advance_impl< typename tag<Iterator>::type >\n        ::template apply<Iterator,long_<N> >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, advance)\n\n}}\n\n#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/advance_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n#define BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: advance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(advance)\n\ntemplate< typename Tag > struct advance_impl;\ntemplate< typename Iterator, typename N > struct advance;\n\n}}\n\n#endif // BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/always.hpp",
    "content": "\n#ifndef BOOST_MPL_ALWAYS_HPP_INCLUDED\n#define BOOST_MPL_ALWAYS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: always.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/arity_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Value > struct always\n{\n    template<\n          typename T\n        BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(1, typename T, na)\n        >\n    struct apply\n    {\n        typedef Value type;\n    };\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(1, always)\n\n}}\n\n#endif // BOOST_MPL_ALWAYS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/and.hpp",
    "content": "\n#ifndef BOOST_MPL_AND_HPP_INCLUDED\n#define BOOST_MPL_AND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: and.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/nested_type_wknd.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n\n// agurt, 19/may/04: workaround a conflict with <iso646.h> header's \n// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'and' being an alternative token\n#if defined(_MSC_VER) \n#ifndef __GCCXML__\n#if defined(and) \n#   pragma push_macro(\"and\")\n#   undef and\n#   define and(x)\n#endif\n#endif\n#endif\n\n#   define BOOST_MPL_PREPROCESSED_HEADER and.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#if defined(_MSC_VER)\n#ifndef __GCCXML__\n#if defined(and) \n#   pragma pop_macro(\"and\")\n#endif\n#endif\n#endif\n\n#else\n\n#   define AUX778076_OP_NAME and_\n#   define AUX778076_OP_VALUE1 false\n#   define AUX778076_OP_VALUE2 true\n#   include <boost/mpl/aux_/logical_op.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/apply.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_HPP_INCLUDED\n#define BOOST_MPL_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/apply_fwd.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/placeholders.hpp>\n#   include <boost/mpl/lambda.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/lambda.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_DEF_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_N_PARAMS(n, param) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    /**/\n    \n#   define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \\\n    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \\\n    /**/\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply.hpp>))\n#include BOOST_PP_ITERATE()\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n// real C++ version is already taken care of\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace aux {\n// apply_count_args\n#define AUX778076_COUNT_ARGS_PREFIX apply\n#define AUX778076_COUNT_ARGS_DEFAULT na\n#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#include <boost/mpl/aux_/count_args.hpp>\n}\n\n\ntemplate<\n      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)\n    >\nstruct apply\n    : aux::apply_chooser< \n          aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value\n        >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type\n{\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#   undef AUX778076_APPLY_N_SPEC_PARAMS\n#   undef AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS\n#   undef AUX778076_APPLY_N_COMMA_PARAMS\n#   undef AUX778076_APPLY_N_PARAMS\n#   undef AUX778076_APPLY_DEF_PARAMS\n#   undef AUX778076_APPLY_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply,i_)\n#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    : BOOST_PP_CAT(apply_wrap,i_)< \n          typename lambda<F>::type\n        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n        >\n{\n#else\n{\n    typedef typename BOOST_PP_CAT(apply_wrap,i_)< \n          typename lambda<F>::type\n        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n        >::type type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          BOOST_PP_INC(i_)\n        , BOOST_PP_CAT(apply,i_)\n        , (F AUX778076_APPLY_N_COMMA_PARAMS(i_,T))\n        )\n};\n\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n/// workaround for ETI bug\ntemplate<>\nstruct BOOST_PP_CAT(apply,i_)<AUX778076_APPLY_N_SPEC_PARAMS(i_, int)>\n{\n    typedef int type;\n};\n#endif\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n/// primary template (not a specialization!)\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct apply\n    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >\n{\n};\n#else\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct apply< F AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(i_, T, na) >\n    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >\n{\n};\n#endif\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\nnamespace aux {\n\ntemplate<>\nstruct apply_chooser<i_>\n{\n    template<\n          typename F, AUX778076_APPLY_PARAMS(typename T)\n        >\n    struct result_\n    {\n        typedef BOOST_PP_CAT(apply,i_)<\n              F AUX778076_APPLY_N_COMMA_PARAMS(i_, T)\n            > type;\n    };\n};\n\n} // namespace aux\n#endif\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#   undef i_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/apply_fwd.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n#define BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: apply_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/na.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply_fwd.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// agurt, 15/jan/02: top-level 'apply' template gives an ICE on MSVC\n// (for known reasons)\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   define BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n#endif\n\nnamespace boost { namespace mpl {\n\n// local macro, #undef-ined at the end of the header\n#   define AUX778076_APPLY_DEF_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n// forward declaration\ntemplate<\n      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)\n    >\nstruct apply;\n#else\nnamespace aux {\ntemplate< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;\n}\n#endif\n\n#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_fwd.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_APPLY_N_COMMA_PARAMS\n#   undef AUX778076_APPLY_DEF_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_FWD_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply,i_);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/apply_wrap.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n#define BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: apply_wrap.hpp 49272 2008-10-11 06:50:46Z agurtovoy $\n// $Date: 2008-10-10 23:50:46 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49272 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/arity.hpp>\n#   include <boost/mpl/aux_/has_apply.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/msvc_never_true.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER apply_wrap.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/config/bcc.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/logical/and.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY_WRAP_PARAMS(n, param) \\\n    BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_APPLY_WRAP_SPEC_PARAMS(n, param) \\\n    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \\\n    /**/\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_wrap.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_APPLY_WRAP_SPEC_PARAMS\n#   undef AUX778076_APPLY_WRAP_PARAMS\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_APPLY_WRAP_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n// MSVC version\n\n#define AUX778076_MSVC_DTW_NAME BOOST_PP_CAT(msvc_apply,i_)\n#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply\n#define AUX778076_MSVC_DTW_ARITY i_\n#include <boost/mpl/aux_/msvc_dtw.hpp>\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n{\n    // Metafunction forwarding confuses vc6\n    typedef typename BOOST_PP_CAT(msvc_apply,i_)<F>::template result_<\n          AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type type;\n};\n\n#   elif defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n// MWCW/Borland version\n\ntemplate<\n      int N, typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_);\n\n#define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY - i_, <boost/mpl/apply_wrap.hpp>))\n#include BOOST_PP_ITERATE()\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n    : BOOST_PP_CAT(apply_wrap_impl,i_)<\n          ::boost::mpl::aux::arity<F,i_>::value\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type\n{\n};\n\n#   else\n// ISO98 C++, with minor concession to vc7\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n#if i_ == 0\n    , typename has_apply_ = typename aux::has_apply<F>::type\n#endif\n    >\nstruct BOOST_PP_CAT(apply_wrap,i_)\n// metafunction forwarding confuses MSVC 7.0\n#if !BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) >\n{\n#else\n{    \n    typedef typename F::template apply<\n         AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >::type type;\n#endif\n};\n\n#if i_ == 0 && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename F >\nstruct BOOST_PP_CAT(apply_wrap,i_)<F,true_>\n    : F::apply\n{\n};\n#endif\n\n#   endif // workarounds\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n/// workaround for ETI bug\ntemplate<>\nstruct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>\n{\n    typedef int type;\n};\n#endif\n\n#   undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define j_ BOOST_PP_FRAME_ITERATION(2)\n\n#if i_ == 0 && j_ == 0 \\\n    && defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \\\n    && !defined(BOOST_MPL_CFG_NO_HAS_APPLY)\n\ntemplate< typename F, bool F_has_apply >\nstruct apply_wrap_impl0_bcb {\n    typedef typename F::template apply< na > type;\n};\n\ntemplate< typename F >\nstruct apply_wrap_impl0_bcb< F, true > {\n    typedef typename F::apply type;\n};\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_)<\n          BOOST_MPL_PP_ADD(i_, j_)\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >\n{\n    typedef apply_wrap_impl0_bcb< F, aux::has_apply< F >::value >::type type;\n};\n#else\n\ntemplate<\n      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(apply_wrap_impl,i_)<\n          BOOST_MPL_PP_ADD(i_, j_)\n        , F\n        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)\n        >\n{\n    typedef typename F::template apply<\n          AUX778076_APPLY_WRAP_PARAMS(i_, T)\n#if i_ == 0 && j_ == 0\n/// since the defaults are \"lost\", we have to pass *something* even for nullary\n/// metafunction classes\n        na\n#else\n        BOOST_PP_COMMA_IF(BOOST_PP_AND(i_, j_)) BOOST_MPL_PP_ENUM(j_, na)\n#endif\n        > type;\n};\n\n#endif\n\n#   undef j_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/arg.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_ARG_HPP_INCLUDED\n#define BOOST_MPL_ARG_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/arg_fwd.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/na_assert.hpp>\n#   include <boost/mpl/aux_/arity_spec.hpp>\n#   include <boost/mpl/aux_/arg_typedef.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER arg.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/config/lambda.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n// local macro, #undef-ined at the end of the header\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n#else\n#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/arg.hpp>))\n#include BOOST_PP_ITERATE()\n\n\n#   undef AUX778076_ARG_N_DEFAULT_PARAMS\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int,arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_ARG_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if i_ > 0\n\ntemplate<> struct arg<i_>\n{\n    BOOST_STATIC_CONSTANT(int, value = i_);\n    typedef arg<BOOST_PP_INC(i_)> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n        typedef BOOST_PP_CAT(U,i_) type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\n#else\n\ntemplate<> struct arg<-1>\n{\n    BOOST_STATIC_CONSTANT(int, value = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\n#endif // i_ > 0\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/arg_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_ARG_FWD_HPP_INCLUDED\n#define BOOST_MPL_ARG_FWD_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arg_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arg;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(arg)\n\n#endif // BOOST_MPL_ARG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/assert.hpp",
    "content": "\n#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED\n#define BOOST_MPL_ASSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/nested_type_wknd.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\n#include <boost/mpl/aux_/config/nttp.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/pp_counter.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\n#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'\n#include <cstddef>\n\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || (BOOST_MPL_CFG_GCC != 0) \\\n    || BOOST_WORKAROUND(__IBMCPP__, <= 600)\n#   define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n#endif\n\n#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \\\n    || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n#endif\n\n// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants) \n// and GCC (which issues \"unused variable\" warnings when static constants are used \n// at a function scope)\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n    || (BOOST_MPL_CFG_GCC != 0)\n#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }\n#else\n#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)\n#endif\n\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\nstruct failed {};\n\n// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept \n// 'assert<false>' by reference; can't apply it unconditionally -- apparently it\n// degrades the quality of GCC diagnostics\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n#   define AUX778076_ASSERT_ARG(x) x&\n#else\n#   define AUX778076_ASSERT_ARG(x) x\n#endif\n\ntemplate< bool C >  struct assert        { typedef void* type; };\ntemplate<>          struct assert<false> { typedef AUX778076_ASSERT_ARG(assert) type; };\n\ntemplate< bool C >\nint assertion_failed( typename assert<C>::type );\n\ntemplate< bool C >\nstruct assertion\n{\n    static int failed( assert<false> );\n};\n\ntemplate<>\nstruct assertion<true>\n{\n    static int failed( void* );\n};\n\nstruct assert_\n{\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};\n#endif\n    static assert_ const arg;\n    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };\n};\n\n\n#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\n\nbool operator==( failed, failed );\nbool operator!=( failed, failed );\nbool operator>( failed, failed );\nbool operator>=( failed, failed );\nbool operator<( failed, failed );\nbool operator<=( failed, failed );\n\n#if defined(__EDG_VERSION__)\ntemplate< bool (*)(failed, failed), long x, long y > struct assert_relation {};\n#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<r,x,y>\n#else\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) > \nstruct assert_relation {};\n#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<x,y,r>\n#endif\n\n#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n\nboost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );\nboost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );\nboost::mpl::aux::weighted_tag<3>::type operator>(  assert_, assert_ );\nboost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );\nboost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );\nboost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );\n\ntemplate< assert_::relations r, long x, long y > struct assert_relation {};\n\n#endif \n\n\n#if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n\ntemplate< bool > struct assert_arg_pred_impl { typedef int type; };\ntemplate<> struct assert_arg_pred_impl<true> { typedef void* type; };\n\ntemplate< typename P > struct assert_arg_pred\n{\n    typedef typename P::type p_type;\n    typedef typename assert_arg_pred_impl< p_type::value >::type type;\n};\n\ntemplate< typename P > struct assert_arg_pred_not\n{\n    typedef typename P::type p_type;\n    BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value );\n    typedef typename assert_arg_pred_impl<p>::type type;\n};\n\ntemplate< typename Pred >\nfailed ************ (Pred::************ \n      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )\n    );\n\ntemplate< typename Pred >\nfailed ************ (boost::mpl::not_<Pred>::************ \n      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )\n    );\n\ntemplate< typename Pred >\nAUX778076_ASSERT_ARG(assert<false>)\nassert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );\n\ntemplate< typename Pred >\nAUX778076_ASSERT_ARG(assert<false>)\nassert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );\n\n\n#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n        \ntemplate< bool c, typename Pred > struct assert_arg_type_impl\n{\n    typedef failed      ************ Pred::* mwcw83_wknd;\n    typedef mwcw83_wknd ************* type;\n};\n\ntemplate< typename Pred > struct assert_arg_type_impl<true,Pred>\n{\n    typedef AUX778076_ASSERT_ARG(assert<false>) type;\n};\n\ntemplate< typename Pred > struct assert_arg_type\n    : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred >\n{\n};\n\ntemplate< typename Pred >\ntypename assert_arg_type<Pred>::type \nassert_arg(void (*)(Pred), int);\n\ntemplate< typename Pred >\ntypename assert_arg_type< boost::mpl::not_<Pred> >::type \nassert_not_arg(void (*)(Pred), int);\n\n#   if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\ntemplate< long x, long y, bool (*r)(failed, failed) >\ntypename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type\nassert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) );\n#   else\ntemplate< assert_::relations r, long x, long y >\ntypename assert_arg_type_impl< false,assert_relation<r,x,y> >::type\nassert_rel_arg( assert_relation<r,x,y> );\n#   endif\n\n#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER\n\n#undef AUX778076_ASSERT_ARG\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n\n// BOOST_MPL_ASSERT((pred<x,...>))\n\n#define BOOST_MPL_ASSERT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::assert_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n\n// BOOST_MPL_ASSERT_NOT((pred<x,...>))\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   define BOOST_MPL_ASSERT_NOT(pred) \\\nenum { \\\n      BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion<false>::failed( \\\n              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n}\\\n/**/\n#else\n#   define BOOST_MPL_ASSERT_NOT(pred) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n          boost::mpl::assertion_failed<false>( \\\n              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \\\n            ) \\\n        ) \\\n   ) \\\n/**/\n#endif\n\n// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)\n\n#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)\n\n#   if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518\n#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)      \\\nenum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \\\n            (boost::mpl::failed ************ ( boost::mpl::assert_relation< \\\n                  boost::mpl::assert_::relations( sizeof( \\\n                      boost::mpl::assert_::arg rel boost::mpl::assert_::arg \\\n                    ) ) \\\n                , x \\\n                , y \\\n                >::************)) 0 ) \\\n        ) \\\n    ) \\\n/**/\n#   else\n#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)    \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \\\n          boost::mpl::assert_::arg rel boost::mpl::assert_::arg \\\n        ) \\\n    ); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \\\n              boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \\\n                  boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \\\n                , x \\\n                , y \\\n                >() ) \\\n            ) \\\n        ) \\\n    ) \\\n/**/\n#   endif\n\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \\\n/**/\n\n#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES\n\n#   if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n        boost::mpl::assertion_failed<(x rel y)>( boost::mpl::assert_rel_arg( \\\n              boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))() \\\n            ) ) \\\n        ) \\\n    ) \\\n/**/\n#   else\n#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \\\n        boost::mpl::assertion_failed<(x rel y)>( (boost::mpl::failed ************ ( \\\n            boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))::************))0 ) \\\n        ) \\\n    ) \\\n/**/\n#   endif\n\n#endif\n\n\n// BOOST_MPL_ASSERT_MSG( (pred<x,...>::value), USER_PROVIDED_MESSAGE, (types<x,...>) ) \n\n#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))\n#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \\\nstruct msg; \\\ntypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \\\n{ \\\n    using boost::mpl::assert_::types; \\\n    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \\\n    { return 0; } \\\n} BOOST_PP_CAT(mpl_assert_arg,counter); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \\\n        ) \\\n    ) \\\n/**/\n#else\n#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ )  \\\nstruct msg; \\\ntypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \\\n{ \\\n    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \\\n    { return 0; } \\\n} BOOST_PP_CAT(mpl_assert_arg,counter); \\\nBOOST_MPL_AUX_ASSERT_CONSTANT( \\\n      std::size_t \\\n    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \\\n        boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \\\n        ) \\\n    ) \\\n/**/\n#endif\n\n#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \\\nBOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \\\n/**/\n\n#endif // BOOST_MPL_ASSERT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/at.hpp",
    "content": "\n#ifndef BOOST_MPL_AT_HPP_INCLUDED\n#define BOOST_MPL_AT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/aux_/at_impl.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct at\n    : at_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,N >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,at,(Sequence,N))\n};\n\ntemplate<\n      typename Sequence\n    , BOOST_MPL_AUX_NTTP_DECL(long, N)\n    >\nstruct at_c\n    : at_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,mpl::long_<N> >\n{\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, at)\n\n}}\n\n#endif // BOOST_MPL_AT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/at_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AT_FWD_HPP_INCLUDED\n#define BOOST_MPL_AT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: at_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct at_impl;\ntemplate< typename Sequence, typename N > struct at;\n\n}}\n\n#endif // BOOST_MPL_AT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/O1_size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: O1_size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/has_size.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation - returns 'Sequence::size' if sequence has a 'size'\n// member, and -1 otherwise; conrete sequences might override it by \n// specializing either the 'O1_size_impl' or the primary 'O1_size' template\n\n#   if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \\\n    && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))\n\nnamespace aux {\ntemplate< typename Sequence > struct O1_size_impl\n    : Sequence::size\n{\n};\n}\n\ntemplate< typename Tag >\nstruct O1_size_impl\n{\n    template< typename Sequence > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : if_<\n              aux::has_size<Sequence>\n            , aux::O1_size_impl<Sequence>\n            , long_<-1>\n            >::type\n    {\n#else\n    {\n        typedef typename if_<\n              aux::has_size<Sequence>\n            , aux::O1_size_impl<Sequence>\n            , long_<-1>\n            >::type type;\n\n        BOOST_STATIC_CONSTANT(long, value =\n              (if_<\n                  aux::has_size<Sequence>\n                , aux::O1_size_impl<Sequence>\n                , long_<-1>\n                >::type::value)\n            );\n#endif\n    };\n};\n\n#   else // BOOST_MSVC\n\ntemplate< typename Tag >\nstruct O1_size_impl\n{\n    template< typename Sequence > struct apply\n        : long_<-1>\n        {\n        };\n};\n\n#   endif\n\n}}\n\n#endif // BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/adl_barrier.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n#define BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: adl_barrier.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/adl.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)\n\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE mpl_\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace mpl_ {\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }\n#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \\\n    namespace boost { namespace mpl { \\\n    using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \\\n    } } \\\n/**/\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\nnamespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} }\nnamespace boost { namespace mpl { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE; \nnamespace aux { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; }\n}}\n#endif\n\n#else // BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE\n\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE boost::mpl\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace boost { namespace mpl {\n#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }}\n#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/advance_backward.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n#define BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: advance_backward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/prior.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER advance_backward.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// forward declaration\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_backward;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_backward.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<BOOST_MPL_LIMIT_UNROLLING>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - BOOST_MPL_LIMIT_UNROLLING) < 0\n                    ? 0\n                    : N - BOOST_MPL_LIMIT_UNROLLING\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<>\nstruct advance_backward< BOOST_PP_FRAME_ITERATION(1) >\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n\n#if i_ > 0\n#   define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(1, BOOST_PP_FRAME_ITERATION(1), <boost/mpl/aux_/advance_backward.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n\n        typedef BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(1)) type;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n#endif\n};\n\n#undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))\n#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))\n\n        typedef typename prior<AUX778076_ITER_0>::type AUX778076_ITER_1;\n        \n#   undef AUX778076_ITER_1\n#   undef AUX778076_ITER_0\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/advance_forward.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n#define BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: advance_forward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER advance_forward.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// forward declaration\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_forward;\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_forward.hpp>))\n#   include BOOST_PP_ITERATE()\n\n// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > \nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<BOOST_MPL_LIMIT_UNROLLING>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - BOOST_MPL_LIMIT_UNROLLING) < 0\n                    ? 0\n                    : N - BOOST_MPL_LIMIT_UNROLLING\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<>\nstruct advance_forward< BOOST_PP_FRAME_ITERATION(1) >\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n\n#if i_ > 0\n#   define BOOST_PP_ITERATION_PARAMS_2 \\\n    (3,(1, i_, <boost/mpl/aux_/advance_forward.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n        typedef BOOST_PP_CAT(iter,i_) type;\n    };\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n    /// ETI workaround\n    template<> struct apply<int>\n    {\n        typedef int type;\n    };\n#endif\n};\n\n#undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))\n#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))\n\n        typedef typename next<AUX778076_ITER_0>::type AUX778076_ITER_1;\n        \n#   undef AUX778076_ITER_1\n#   undef AUX778076_ITER_0\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/arg_typedef.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arg_typedef.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n    \n#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) typedef T name;\n\n#else\n\n#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/arithmetic_op.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arithmetic_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/integral_c.hpp>\n#   include <boost/mpl/aux_/largest_int.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#if !defined(AUX778076_OP_PREFIX)\n#   define AUX778076_OP_PREFIX AUX778076_OP_NAME\n#endif\n\n#include <boost/mpl/aux_/numeric_op.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/workaround.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\nnamespace aux {\ntemplate< typename T, T n1, T n2 >\nstruct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)\n{\n    BOOST_STATIC_CONSTANT(T, value = (n1 AUX778076_OP_TOKEN n2));\n    typedef integral_c<T,value> type;\n};\n}\n#endif\n\ntemplate<>\nstruct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n#else\n        : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , N1::value\n            , N2::value\n            >::type\n#endif\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#undef AUX778076_OP_TAG_NAME\n#undef AUX778076_OP_IMPL_NAME\n#undef AUX778076_OP_ARITY\n#undef AUX778076_OP_PREFIX\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_TOKEN\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/arity.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/dtp.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n// agurt, 15/mar/02: it's possible to implement the template so that it will \n// \"just work\" and do not require any specialization, but not on the compilers\n// that require the arity workaround in the first place\ntemplate< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct arity\n{\n    BOOST_STATIC_CONSTANT(int, value = N);\n};\n\n}}}\n\n#endif // BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif // BOOST_MPL_AUX_ARITY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/arity_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arity_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/arity.hpp>\n#include <boost/mpl/aux_/template_arity_fwd.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N), BOOST_MPL_PP_PARAMS(i,type T) > \\\nstruct arity< \\\n      name< BOOST_MPL_PP_PARAMS(i,T) > \\\n    , N \\\n    > \\\n{ \\\n    BOOST_STATIC_CONSTANT(int \\\n        , value = BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        ); \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) /**/\n#endif\n\n#   define BOOST_MPL_AUX_ARITY_SPEC(i,name) \\\n    BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,typename,name) \\\n/**/\n\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    && !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\nstruct template_arity< name<BOOST_MPL_PP_PARAMS(i,T)> > \\\n    : int_<i> \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/\n#endif\n\n\n#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/at_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: at_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/advance.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'at_impl' or the primary 'at' template\n\ntemplate< typename Tag >\nstruct at_impl\n{\n    template< typename Sequence, typename N > struct apply\n    {\n        typedef typename advance<\n              typename begin<Sequence>::type\n            , N\n            >::type iter_;\n\n        typedef typename deref<iter_>::type type;\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, at_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/begin_end_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: begin_end_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\n\nnamespace aux { \n\ntemplate< typename Sequence > \nstruct begin_type \n{ \n    typedef typename Sequence::begin type; \n};\ntemplate< typename Sequence > \nstruct end_type\n{ \n    typedef typename Sequence::end type; \n};\n\n}\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'begin_impl/end_impl' or the primary \n// 'begin/end' templates\n\ntemplate< typename Tag >\nstruct begin_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename eval_if<aux::has_begin<Sequence, true_>,\n                                 aux::begin_type<Sequence>, void_>::type type;\n    };\n};\n\ntemplate< typename Tag >\nstruct end_impl\n{\n    template< typename Sequence > struct apply\n    {\n        typedef typename eval_if<aux::has_begin<Sequence, true_>,\n                                 aux::end_type<Sequence>, void_>::type type;\n    };\n};\n\n// specialize 'begin_trait/end_trait' for two pre-defined tags\n\n#   define AUX778076_IMPL_SPEC(name, tag, result) \\\ntemplate<> \\\nstruct name##_impl<tag> \\\n{ \\\n    template< typename Sequence > struct apply \\\n    { \\\n        typedef result type; \\\n    }; \\\n}; \\\n/**/\n\n// a sequence with nested 'begin/end' typedefs; just query them\nAUX778076_IMPL_SPEC(begin, nested_begin_end_tag, typename Sequence::begin)\nAUX778076_IMPL_SPEC(end, nested_begin_end_tag, typename Sequence::end)\n\n// if a type 'T' does not contain 'begin/end' or 'tag' members \n// and doesn't specialize either 'begin/end' or 'begin_impl/end_impl' \n// templates, then we end up here\nAUX778076_IMPL_SPEC(begin, non_sequence_tag, void_)\nAUX778076_IMPL_SPEC(end, non_sequence_tag, void_)\nAUX778076_IMPL_SPEC(begin, na, void_)\nAUX778076_IMPL_SPEC(end, na, void_)\n\n#   undef AUX778076_IMPL_SPEC\n\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,begin_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,end_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/clear_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename Tag >\nstruct clear_impl\n{\n    template< typename Sequence > struct apply;\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, clear_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/common_name_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: common_name_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x561)\n// agurt, 12/nov/02: to suppress the bogus \"Cannot have both a template class \n// and function named 'xxx'\" diagnostic\n#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\nnamespace name_##wknd { \\\ntemplate< typename > void name(); \\\n} \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) /**/\n\n#endif // __BORLANDC__\n\n#endif // BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/comparison_op.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: comparison_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#if !defined(AUX778076_OP_PREFIX)\n#   define AUX778076_OP_PREFIX AUX778076_OP_NAME\n#endif\n\n#define AUX778076_OP_ARITY 2\n\n#include <boost/mpl/aux_/numeric_op.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/integral.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// MSVC workaround: implement less in terms of greater\n#if 0 AUX778076_OP_TOKEN 1 && !(1 AUX778076_OP_TOKEN 0) && !(0 AUX778076_OP_TOKEN 0)\n#   define AUX778076_OP(N1, N2) \\\n    ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) \\\n/**/\n#else\n#   define AUX778076_OP(N1, N2) \\\n    ( BOOST_MPL_AUX_VALUE_WKND(N1)::value \\\n          AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value \\\n        ) \\\n/**/\n#endif\n\ntemplate<>\nstruct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n        : bool_< AUX778076_OP(N1, N2) >\n    {\n#else\n    {\n        BOOST_STATIC_CONSTANT(bool, value = AUX778076_OP(N1, N2));\n        typedef bool_<value> type;\n#endif\n    };\n};\n\n#undef AUX778076_OP\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#undef AUX778076_OP_TAG_NAME\n#undef AUX778076_OP_IMPL_NAME\n#undef AUX778076_OP_ARITY\n#undef AUX778076_OP_PREFIX\n#undef AUX778076_OP_NAME\n#undef AUX778076_OP_TOKEN\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/adl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: adl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/intel.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC,\n// but putting everything expect public, user-specializable metafunctions into\n// a separate global namespace has a nice side effect of reducing the length \n// of template instantiation symbols, so we apply the workaround on all \n// platforms that can handle it\n\n#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \\\n    && (   BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \\\n        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \\\n        || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/arrays.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arrays.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/bcc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bcc.hpp 49272 2008-10-11 06:50:46Z agurtovoy $\n// $Date: 2004-09-02 10:41:37 -0500 (Thu, 02 Sep 2004) $\n// $Revision: 24874 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, >= 0x590) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_BCC590_WORKAROUNDS\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/bind.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n\n// Copyright David Abrahams 2002\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_BIND_TEMPLATE\n\n#endif\n\n//#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n#endif // BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/compiler.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: compiler.hpp 53189 2009-05-22 20:07:55Z hkaiser $\n// $Date: 2009-05-22 13:07:55 -0700 (Fri, 22 May 2009) $\n// $Revision: 53189 $\n\n#if !defined(BOOST_MPL_CFG_COMPILER_DIR)\n\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/gcc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#       define BOOST_MPL_CFG_COMPILER_DIR msvc60\n\n#   elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n#       define BOOST_MPL_CFG_COMPILER_DIR msvc70\n\n#   elif BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))\n#       define BOOST_MPL_CFG_COMPILER_DIR gcc\n\n#   elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#       if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc551\n#       elif BOOST_WORKAROUND(__BORLANDC__, >= 0x590)\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc\n#       else\n#           define BOOST_MPL_CFG_COMPILER_DIR bcc_pre590\n#       endif\n\n#   elif BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#       define BOOST_MPL_CFG_COMPILER_DIR dmc\n\n#   elif defined(__MWERKS__)\n#       if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#           define BOOST_MPL_CFG_COMPILER_DIR mwcw\n#       else\n#           define BOOST_MPL_CFG_COMPILER_DIR plain\n#       endif\n\n#   elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       define BOOST_MPL_CFG_COMPILER_DIR no_ctps\n\n#   elif defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)\n#       define BOOST_MPL_CFG_COMPILER_DIR no_ttp\n\n#   else\n#       define BOOST_MPL_CFG_COMPILER_DIR plain\n#   endif\n\n#endif // BOOST_MPL_CFG_COMPILER_DIR\n\n#endif // BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/ctps.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: ctps.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/config.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, < 0x582)\n\n#   define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC\n\n#endif\n\n// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/dtp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: dtp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// MWCW 7.x-8.0 \"losts\" default template parameters of nested class \n// templates when their owner classes are passed as arguments to other \n// templates; Borland 5.5.1 \"forgets\" them from the very beginning (if \n// the owner class is a class template), and Borland 5.6 isn't even\n// able to compile a definition of nested class template with DTP\n\n#if    !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, >= 0x560) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif\n\n\n#if    !defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3001) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        || defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \\\n        )\n        \n#   define BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/eti.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: eti.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// flags for MSVC 6.5's so-called \"early template instantiation bug\"\n#if    !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n#   define BOOST_MPL_CFG_MSVC_60_ETI_BUG\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n\n#   define BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \\\n        || defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \\\n        )\n\n#   define BOOST_MPL_CFG_MSVC_ETI_BUG\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/forwarding.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: forwarding.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_NO_NESTED_FORWARDING\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/gcc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: gcc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if defined(__GNUC__) && !defined(__EDG_VERSION__)\n#   define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__)\n#else\n#   define BOOST_MPL_CFG_GCC 0\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/has_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/has_xxx.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY) \\\n    && (   defined(BOOST_MPL_CFG_NO_HAS_XXX) \\\n        || BOOST_WORKAROUND(__EDG_VERSION__, < 300) \\\n        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_HAS_APPLY\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/has_xxx.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n// Copyright David Abrahams 2002-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_xxx.hpp 63518 2010-07-02 08:32:03Z agurtovoy $\n// $Date: 2010-07-02 01:32:03 -0700 (Fri, 02 Jul 2010) $\n// $Revision: 63518 $\n\n#include <boost/mpl/aux_/config/overload_resolution.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt, 11/jan/03: signals a stub-only 'has_xxx' implementation\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) \\\n    && (   defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \\\n        || BOOST_WORKAROUND(__GNUC__, <= 2) \\\n        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_HAS_XXX\n#   define BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/integral.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: integral.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n\n#   define BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS\n\n#endif\n\n#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/intel.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: intel.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n\n// BOOST_INTEL_CXX_VERSION is defined here:\n#include <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/lambda.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n// agurt, 15/jan/02: full-fledged implementation requires both \n// template template parameters _and_ partial specialization\n\n#if    !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n    && (   defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n        || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n        )\n\n#   define BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/msvc.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: msvc.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n\n// BOOST_MSVC is defined here:\n#include <boost/config.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/msvc_typename.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: msvc_typename.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n#   define BOOST_MSVC_TYPENAME\n#else\n#   define BOOST_MSVC_TYPENAME typename\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/nttp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: nttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// MSVC 6.5 ICE-s on the code as simple as this (see \"aux_/nttp_decl.hpp\"\n// for a workaround):\n//\n//    namespace std {\n//    template< typename Char > struct string;\n//    }\n//\n//    void foo(std::string<char>);\n//\n//    namespace boost { namespace mpl {\n//    template< int > struct arg;\n//    }}\n\n#if    !defined(BOOST_MPL_CFG_NTTP_BUG) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n#   define BOOST_MPL_CFG_NTTP_BUG\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/overload_resolution.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: overload_resolution.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if    !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(__BORLANDC__, < 0x590) \\\n        || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \\\n        )\n\n#   define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/pp_counter.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pp_counter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_AUX_PP_COUNTER)\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   if BOOST_WORKAROUND(BOOST_MSVC, >= 1300)\n#       define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__\n#   else\n#       define BOOST_MPL_AUX_PP_COUNTER() __LINE__\n#   endif\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/preprocessor.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: preprocessor.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \\\n    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \\\n        || BOOST_WORKAROUND(__BORLANDC__, < 0x582) \\\n        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \\\n        )\n\n#   define BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION\n\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n#   define BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES\n#endif\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) \\\n    && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING\n#endif\n\n\n#endif // BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/static_constant.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: static_constant.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n// BOOST_STATIC_CONSTANT is defined here:\n#   include <boost/config.hpp>\n#else\n// undef the macro for the preprocessing mode\n#   undef BOOST_STATIC_CONSTANT\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/ttp.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: ttp.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n    && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \\\n      || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \\\n       )\n\n#   define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS\n\n#endif\n\n\n#if    !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \\\n        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \\\n        )\n\n#   define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/typeof.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: typeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n\n#if !defined(BOOST_MPL_CFG_HAS_TYPEOF) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && (   defined(BOOST_MPL_CFG_GCC) && BOOST_MPL_CFG_GCC >= 0x0302 \\\n        || defined(__MWERKS__) && __MWERKS__ >= 0x3000 \\\n        )\n\n#   define BOOST_MPL_CFG_HAS_TYPEOF\n\n#endif\n\n\n#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE) \\\n    && defined(BOOST_MPL_CFG_HAS_TYPEOF)\n\n#   define BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif\n\n#endif // BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/use_preprocessed.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: use_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/config/workaround.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: workaround.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/detail/workaround.hpp>\n\n#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/contains_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/contains_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/find.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag >\nstruct contains_impl\n{\n    template< typename Sequence, typename T > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : not_< is_same<\n              typename find<Sequence,T>::type\n            , typename end<Sequence>::type\n            > >\n    {\n#else\n    {\n        typedef not_< is_same<\n              typename find<Sequence,T>::type\n            , typename end<Sequence>::type\n            > > type;\n\n        BOOST_STATIC_CONSTANT(bool, value = \n              (not_< is_same<\n                  typename find<Sequence,T>::type\n                , typename end<Sequence>::type\n                > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/find_if_pred.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Eric Friedman 2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n#include <boost/mpl/aux_/iter_apply.hpp>\n#include <boost/mpl/not.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Predicate >\nstruct find_if_pred\n{\n    template< typename Iterator >\n    struct apply\n    {\n        typedef not_< aux::iter_apply1<Predicate,Iterator> > type;\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX fold\n#   include <boost/mpl/aux_/fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/full_lambda.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: full_lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/lambda_fwd.hpp>\n#   include <boost/mpl/bind_fwd.hpp>\n#   include <boost/mpl/protect.hpp>\n#   include <boost/mpl/quote.hpp>\n#   include <boost/mpl/arg.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/int_fwd.hpp>\n#   include <boost/mpl/aux_/template_arity.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#       include <boost/mpl/if.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_LAMBDA_PARAMS(i_, param) \\\n    BOOST_MPL_PP_PARAMS(i_, param) \\\n    /**/\n\n#   define AUX778076_BIND_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(i_, param) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    BOOST_MPL_PP_PARAMS(i_, param) \\\n    /**/\n\n#   define AUX778076_ARITY_PARAM(param) \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \\\n    /**/\n\n\n#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY\nnamespace aux {\n\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >\n    : false_\n{\n};\n\n} // namespace aux\n#undef n_\n\ntemplate<\n      typename T\n    , typename Tag\n    AUX778076_ARITY_PARAM(typename Arity)\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type; \n};\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))\n#include BOOST_PP_ITERATE()\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T)\n    , typename Tag\n    >\nstruct lambda<\n          bind<F,AUX778076_BIND_PARAMS(T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)\n        >\n{\n    typedef false_ is_le;\n    typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;\n    typedef result_ type;\n};\n\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda<F,Tag1,Arity>\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3;\n    \n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n#elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n\n/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars\ntemplate<\n      typename F, typename Tag1, typename Tag2\n    >\nstruct lambda<\n          lambda< F,Tag1 >\n        , Tag2\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    \n    typedef typename l1::is_le is_le;\n    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n#endif\n\n#   undef AUX778076_ARITY_PARAM\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_PARAMS\n#   undef AUX778076_LAMBDA_PARAMS\n\n#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\nBOOST_MPL_AUX_NA_SPEC(2, lambda)\n#else\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n#endif\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if i_ > 0\n\nnamespace aux {\n\n#   define AUX778076_RESULT(unused, i_, T) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \\\n    /**/\n\n#   define AUX778076_TYPE(unused, i_, T) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \\\n    /**/\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename L)\n    >\nstruct BOOST_PP_CAT(le_result,i_)\n{\n    typedef F<\n          BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)\n        > result_;\n    \n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename L)\n    >\nstruct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >\n{\n    typedef BOOST_PP_CAT(bind,i_)<\n          BOOST_PP_CAT(quote,i_)<F,Tag>\n        , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n#   undef AUX778076_TYPE\n#   undef AUX778076_RESULT\n\n} // namespace aux\n\n\n#   define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \\\n    typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \\\n        BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \\\n/**/\n\n#   define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \\\n    typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \\\n        BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \\\n/**/\n\n#   define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \\\n/**/\n\ntemplate<\n      template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F\n    , AUX778076_LAMBDA_PARAMS(i_, typename T)\n    , typename Tag\n    >\nstruct lambda< \n          F<AUX778076_LAMBDA_PARAMS(i_, T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<i_>)\n        >\n{\n    BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)\n    BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)\n\n    typedef typename aux::lambda_or<\n          BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)\n        >::type is_le;\n\n    typedef aux::BOOST_PP_CAT(le_result,i_)<\n          is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)\n        > le_result_;\n    \n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\n\n#   undef AUX778076_IS_LAMBDA_EXPR\n#   undef AUX778076_IS_LE_TYPEDEF\n#   undef AUX778076_LAMBDA_TYPEDEF\n\n#endif // i_ > 0\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    , typename Tag\n    >\nstruct lambda<\n          BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>\n        , Tag\n        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)\n        >\n{\n    typedef false_ is_le;\n    typedef BOOST_PP_CAT(bind,i_)<\n          F\n        AUX778076_BIND_N_PARAMS(i_, T)\n        > result_;\n        \n    typedef result_ type;\n};\n\n#undef i_\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/has_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/has_xxx.hpp>\n#include <boost/mpl/aux_/config/has_apply.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY)\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_apply, apply, false)\n#else\ntemplate< typename T, typename fallback_ = false_ >\nstruct has_apply\n    : fallback_\n{\n};\n#endif\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/has_begin.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_begin.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_begin, begin, true)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/has_size.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_DEF(size)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/has_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_tag, tag, false)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/has_type.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n#define BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/has_xxx.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\nBOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true)\n}}}\n\n#endif // BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/include_preprocessed.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/compiler.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_PREPROCESSED_HEADER \\\n    BOOST_MPL_CFG_COMPILER_DIR/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_PREPROCESSED_HEADER \\\n    BOOST_PP_CAT(BOOST_MPL_CFG_COMPILER_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)\n#endif\n\n#   undef AUX778076_PREPROCESSED_HEADER\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/inserter_algorithm.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: inserter_algorithm.hpp 55648 2009-08-18 05:16:53Z agurtovoy $\n// $Date: 2009-08-17 22:16:53 -0700 (Mon, 17 Aug 2009) $\n// $Revision: 55648 $\n\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/push_back.hpp>\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/back_inserter.hpp>\n#include <boost/mpl/front_inserter.hpp>\n#include <boost/mpl/clear.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n#include <boost/preprocessor/arithmetic/dec.hpp>\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \\\nBOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct name \\\n    : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \\\n    : if_< has_push_back< typename clear<P1>::type> \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct reverse_##name \\\n    : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \\\n    : if_< has_push_back<P1> \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\nBOOST_MPL_AUX_NA_SPEC(arity, name) \\\nBOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \\\nBOOST_MPL_AUX_COMMON_NAME_WKND(name) \\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct def_##name##_impl \\\n    : if_< has_push_back<P1> \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct name \\\n{ \\\n    typedef typename eval_if< \\\n          is_na<BOOST_PP_CAT(P, arity)> \\\n        , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \\\n        , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n        >::type type; \\\n}; \\\n\\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \\\n    > \\\nstruct def_reverse_##name##_impl \\\n    : if_< has_push_back<P1> \\\n        , aux::reverse_##name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , back_inserter< typename clear<P1>::type > \\\n            > \\\n        , aux::name##_impl< \\\n              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \\\n            , front_inserter< typename clear<P1>::type > \\\n            > \\\n        >::type \\\n{ \\\n}; \\\ntemplate< \\\n      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \\\n    > \\\nstruct reverse_##name \\\n{ \\\n    typedef typename eval_if< \\\n          is_na<BOOST_PP_CAT(P, arity)> \\\n        , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \\\n        , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \\\n        >::type type; \\\n}; \\\nBOOST_MPL_AUX_NA_SPEC(arity, name) \\\nBOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \\\n/**/\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/integral_wrapper.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: integral_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/integral_c_tag.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n\n#if !defined(AUX_WRAPPER_NAME)\n#   define AUX_WRAPPER_NAME BOOST_PP_CAT(AUX_WRAPPER_VALUE_TYPE,_)\n#endif\n\n#if !defined(AUX_WRAPPER_PARAMS)\n#   define AUX_WRAPPER_PARAMS(N) BOOST_MPL_AUX_NTTP_DECL(AUX_WRAPPER_VALUE_TYPE, N)\n#endif\n\n#if !defined(AUX_WRAPPER_INST)\n#   if BOOST_WORKAROUND(__MWERKS__, <= 0x2407)\n#       define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< value >\n#   else \n#       define AUX_WRAPPER_INST(value) BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::AUX_WRAPPER_NAME< value >\n#   endif\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< AUX_WRAPPER_PARAMS(N) >\nstruct AUX_WRAPPER_NAME\n{\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N);\n// agurt, 08/mar/03: SGI MIPSpro C++ workaround, have to #ifdef because some \n// other compilers (e.g. MSVC) are not particulary happy about it\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n    typedef struct AUX_WRAPPER_NAME type;\n#else\n    typedef AUX_WRAPPER_NAME type;\n#endif\n    typedef AUX_WRAPPER_VALUE_TYPE value_type;\n    typedef integral_c_tag tag;\n\n// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),\n// while some other don't like 'value + 1' (Borland), and some don't like\n// either\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)\n private:\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));\n    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));\n public:\n    typedef AUX_WRAPPER_INST(next_value) next;\n    typedef AUX_WRAPPER_INST(prior_value) prior;\n#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n    || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \\\n    || (BOOST_WORKAROUND(__HP_aCC, <= 53800) && (BOOST_WORKAROUND(__hpxstd98, != 1)))\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)) ) next;\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)) ) prior;\n#else\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value + 1)) ) next;\n    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;\n#endif\n\n    // enables uniform function call syntax for families of overloaded \n    // functions that return objects of both arithmetic ('int', 'long',\n    // 'double', etc.) and wrapped integral types (for an example, see \n    // \"mpl/example/power.cpp\")\n    operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); } \n};\n\n#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ntemplate< AUX_WRAPPER_PARAMS(N) >\nAUX_WRAPPER_VALUE_TYPE const AUX_WRAPPER_INST(N)::value;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#undef AUX_WRAPPER_NAME\n#undef AUX_WRAPPER_PARAMS\n#undef AUX_WRAPPER_INST\n#undef AUX_WRAPPER_VALUE_TYPE\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n#define BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: is_msvc_eti_arg.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n\ntemplate< typename T >\nstruct is_msvc_eti_arg\n{ \n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#else // BOOST_MPL_CFG_MSVC_60_ETI_BUG\n\nstruct eti_int_convertible\n{\n    eti_int_convertible(int);\n};\n\ntemplate< typename T >\nstruct is_msvc_eti_arg\n{ \n    static no_tag test(...);\n    static yes_tag test(eti_int_convertible);\n    static T& get();\n\n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(test(get())) == sizeof(yes_tag)\n        );\n};\n\n#endif\n\ntemplate<>\nstruct is_msvc_eti_arg<int>\n{ \n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\n#endif // BOOST_MPL_CFG_MSVC_ETI_BUG\n\n}}}\n\n#endif // BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/iter_apply.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iter_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/deref.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate<\n      typename F\n    , typename Iterator\n    >\nstruct iter_apply1\n    : apply1< F,typename deref<Iterator>::type >\n{\n};\n\ntemplate<\n      typename F\n    , typename Iterator1\n    , typename Iterator2\n    >\nstruct iter_apply2\n    : apply2<\n          F\n        , typename deref<Iterator1>::type\n        , typename deref<Iterator2>::type\n        >\n{\n};\n\n}}}\n\n#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/iter_fold_if_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iter_fold_if_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/identity.hpp>\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/unrolling.hpp>\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2<StateOp,State,Iterator>::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\n// agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance \n// here and in 'iter_fold_if_backward_step', because sometimes it interfered \n// with the \"early template instantiation bug\" in _really_ ugly ways\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2<Predicate,State,Iterator>::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2<Predicate,State,Iterator>::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\n\n// local macros, #undef-ined at the end of the header\n\n#   define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \\\n    typedef iter_fold_if_forward_step< \\\n          typename BOOST_PP_CAT(forward_step,i)::iterator \\\n        , typename BOOST_PP_CAT(forward_step,i)::state \\\n        , ForwardOp \\\n        , ForwardPredicate \\\n        > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \\\n    /**/\n\n#   define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \\\n    typedef iter_fold_if_backward_step< \\\n          typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \\\n        , typename BOOST_PP_CAT(backward_step,i)::state \\\n        , BackwardOp \\\n        , BackwardPredicate \\\n        > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \\\n    /**/\n\n#   define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \\\n    AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \\\n        BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \\\n        ) \\\n    /**/\n\n#   define AUX_LAST_FORWARD_STEP \\\n    BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \\\n    /**/\n\n#   define AUX_LAST_BACKWARD_STEP \\\n    BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \\\n    /**/\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step<Iterator,State> forward_step0;\n    BOOST_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX_ITER_FOLD_FORWARD_STEP\n        , unused\n        )\n    \n    typedef typename if_<\n          typename AUX_LAST_FORWARD_STEP::not_last\n        , iter_fold_if_impl<\n              typename AUX_LAST_FORWARD_STEP::iterator\n            , typename AUX_LAST_FORWARD_STEP::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename AUX_LAST_FORWARD_STEP::iterator\n            , typename AUX_LAST_FORWARD_STEP::state\n            >\n        >::type AUX_LAST_BACKWARD_STEP;\n\n    BOOST_PP_REPEAT(\n          BOOST_MPL_LIMIT_UNROLLING\n        , AUX_ITER_FOLD_BACKWARD_STEP\n        , unused\n        )\n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator;\n};\n\n#   undef AUX_LAST_BACKWARD_STEP\n#   undef AUX_LAST_FORWARD_STEP\n#   undef AUX_ITER_FOLD_BACKWARD_STEP\n#   undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC\n#   undef AUX_ITER_FOLD_FORWARD_STEP\n\n}}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/iter_fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) iter\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold\n#   include <boost/mpl/aux_/fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/lambda_arity_param.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda_arity_param.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n\n#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param)    \n#else\n#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) , param\n#endif\n\n#endif // BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/lambda_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2007\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/lambda_fwd.hpp>\n#include <boost/mpl/int_fwd.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) \\\ntemplate< \\\n      BOOST_MPL_PP_PARAMS(i, typename T) \\\n    , typename Tag \\\n    > \\\nstruct lambda< \\\n      name< BOOST_MPL_PP_PARAMS(i, T) > \\\n    , Tag \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<i>) \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_PP_PARAMS(i, T) > result_; \\\n    typedef result_ type; \\\n}; \\\n/**/\n\n#else\n\n#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/lambda_support.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n#define BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda_support.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) /**/\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i,name,params) /**/\n\n#else\n\n#   include <boost/mpl/int_fwd.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   include <boost/mpl/aux_/na_fwd.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/tuple/to_list.hpp>\n#   include <boost/preprocessor/list/for_each_i.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC(R,typedef_,i,param) \\\n    typedef_ param BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \\\n    /**/\n\n// agurt, 07/mar/03: restore an old revision for the sake of SGI MIPSpro C++\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    struct rebind \\\n    { \\\n        template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n            : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n        { \\\n        }; \\\n    }; \\\n    /**/\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    /**/\n\n#elif BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)\n// agurt, 18/jan/03: old EDG-based compilers actually enforce 11.4 para 9\n// (in strict mode), so we have to provide an alternative to the \n// MSVC-optimized implementation\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    struct rebind; \\\n/**/\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\nstruct name<BOOST_MPL_PP_PARAMS(i,T)>::rebind \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n    { \\\n    }; \\\n/**/\n\n#else // __EDG_VERSION__\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename T > struct has_rebind_tag;\n}}}\n\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \\\n    BOOST_PP_LIST_FOR_EACH_I_R( \\\n          1 \\\n        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \\\n        , typedef \\\n        , BOOST_PP_TUPLE_TO_LIST(i,params) \\\n        ) \\\n    friend class BOOST_PP_CAT(name,_rebind); \\\n    typedef BOOST_PP_CAT(name,_rebind) rebind; \\\n/**/\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\n::boost::mpl::aux::yes_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , name<BOOST_MPL_PP_PARAMS(i,T)>* \\\n    ); \\\n::boost::mpl::aux::no_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , name< BOOST_MPL_PP_ENUM(i,::boost::mpl::na) >* \\\n    ); \\\n/**/\n#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\ntemplate< BOOST_MPL_PP_PARAMS(i,typename T) > \\\n::boost::mpl::aux::yes_tag operator|( \\\n      ::boost::mpl::aux::has_rebind_tag<int> \\\n    , ::boost::mpl::aux::has_rebind_tag< name<BOOST_MPL_PP_PARAMS(i,T)> >* \\\n    ); \\\n/**/\n#else\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/\n#endif\n\n#   if !defined(__BORLANDC__)\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\nBOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\nclass BOOST_PP_CAT(name,_rebind) \\\n{ \\\n public: \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i,U) > \\\n    { \\\n    }; \\\n/**/\n#   else\n#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \\\n}; \\\nBOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \\\nclass BOOST_PP_CAT(name,_rebind) \\\n{ \\\n public: \\\n    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \\\n    { \\\n        typedef typename name< BOOST_MPL_PP_PARAMS(i,U) >::type type; \\\n    }; \\\n/**/\n#   endif // __BORLANDC__\n\n#endif // __EDG_VERSION__\n\n#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif // BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/largest_int.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n#define BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: largest_int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/config.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct integral_rank;\n\ntemplate<> struct integral_rank<bool>           : int_<1> {};\ntemplate<> struct integral_rank<signed char>    : int_<2> {};\ntemplate<> struct integral_rank<char>           : int_<3> {};\ntemplate<> struct integral_rank<unsigned char>  : int_<4> {};\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\ntemplate<> struct integral_rank<wchar_t>        : int_<5> {};\n#endif\ntemplate<> struct integral_rank<short>          : int_<6> {};\ntemplate<> struct integral_rank<unsigned short> : int_<7> {};\ntemplate<> struct integral_rank<int>            : int_<8> {};\ntemplate<> struct integral_rank<unsigned int>   : int_<9> {};\ntemplate<> struct integral_rank<long>           : int_<10> {};\ntemplate<> struct integral_rank<unsigned long>  : int_<11> {};\n\n#if defined(BOOST_HAS_LONG_LONG)\ntemplate<> struct integral_rank<long_long_type> : int_<12> {};\ntemplate<> struct integral_rank<ulong_long_type>: int_<13> {};\n#endif\n\ntemplate< typename T1, typename T2 > struct largest_int\n#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n    : if_c< \n          ( integral_rank<T1>::value >= integral_rank<T2>::value )\n        , T1\n        , T2\n        >\n{\n#else\n{\n    enum { rank1 = integral_rank<T1>::value };\n    enum { rank2 = integral_rank<T2>::value };\n    typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;\n#endif\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/msvc_eti_base.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: msvc_eti_base.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n\ntemplate< bool > struct msvc_eti_base_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct msvc_eti_base_impl<true>\n{\n    template< typename T > struct result_\n    {\n        typedef result_ type;\n        typedef result_ first;\n        typedef result_ second;\n        typedef result_ tag;\n        enum { value = 0 };\n    };\n};\n\ntemplate< typename T > struct msvc_eti_base\n    : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >\n        ::template result_<T>\n{\n};\n\n#else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\ntemplate< typename T > struct msvc_eti_base\n    : T\n{\n#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))\n    msvc_eti_base();\n#endif\n    typedef T type;\n};\n\n#endif \n\ntemplate<> struct msvc_eti_base<int>\n{\n    typedef msvc_eti_base type;\n    typedef msvc_eti_base first;\n    typedef msvc_eti_base second;\n    typedef msvc_eti_base tag;\n    enum { value = 0 };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/msvc_never_true.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: msvc_never_true.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T >\nstruct msvc_never_true\n{\n    enum { value = false };\n};\n\n}}}\n\n#endif // BOOST_MSVC\n\n#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/msvc_type.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n#define BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: msvc_type.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\n#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n\ntemplate< bool > struct msvc_type_impl\n{\n    template< typename T > struct result_\n    {\n        typedef typename T::type type;\n    };\n};\n\ntemplate<> struct msvc_type_impl<true>\n{\n    template< typename T > struct result_\n    {\n        typedef result_ type;\n    };\n};\n\ntemplate< typename T > struct msvc_type\n    : msvc_type_impl< is_msvc_eti_arg<T>::value >\n        ::template result_<T>\n{\n};\n\n#else // BOOST_MPL_CFG_MSVC_70_ETI_BUG\n\ntemplate< typename T > struct msvc_type \n{\n    typedef typename T::type type;\n};\n\ntemplate<> struct msvc_type<int>\n{\n    typedef int type;\n};\n\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/na.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: na.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_fwd.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T >\nstruct is_na\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\ntemplate<>\nstruct is_na<na>\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate< typename T >\nstruct is_not_na\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate<>\nstruct is_not_na<na>\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename T, typename U > struct if_na\n{\n    typedef T type;\n};\n\ntemplate< typename U > struct if_na<na,U>\n{\n    typedef U type;\n};\n#else\ntemplate< typename T > struct if_na_impl\n{\n    template< typename U > struct apply\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> struct if_na_impl<na>\n{\n    template< typename U > struct apply\n    {\n        typedef U type;\n    };\n};\n\ntemplate< typename T, typename U > struct if_na\n    : if_na_impl<T>::template apply<U>\n{\n};\n#endif\n\n}}\n\n#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/na_assert.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: na_assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601)    \\\n    && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243)\n#   include <boost/mpl/assert.hpp>\n#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \\\n    BOOST_MPL_ASSERT_NOT((boost::mpl::is_na<type>)) \\\n/**/\n#else\n#   include <boost/static_assert.hpp>\n#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \\\n    BOOST_STATIC_ASSERT(!boost::mpl::is_na<x>::value) \\\n/**/\n#endif\n\n#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/na_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: na_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n// n.a. == not available\nstruct na\n{\n    typedef na type;\n    enum { value = 0 };\n};\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(na)\n\n#endif // BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/na_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: na_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/lambda_fwd.hpp>\n#   include <boost/mpl/int.hpp>\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/arity.hpp>\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n#endif\n\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/preprocessor/enum.hpp>\n#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#include <boost/mpl/aux_/lambda_arity_param.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/overload_resolution.hpp>\n\n\n#define BOOST_MPL_AUX_NA_PARAMS(i) \\\n    BOOST_MPL_PP_ENUM(i, na) \\\n/**/\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > \\\nstruct arity< \\\n          name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n        , N \\\n        > \\\n    : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/\n#endif\n\n#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\ntemplate<> \\\nstruct name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n{ \\\n    template< \\\n          BOOST_MPL_PP_PARAMS(i, typename T) \\\n        BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \\\n        > \\\n    struct apply \\\n        : name< BOOST_MPL_PP_PARAMS(i, T) > \\\n    { \\\n    }; \\\n}; \\\n/**/\n\n#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\ntemplate<> \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , void_ \\\n    , true_ \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\ntemplate<> \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , void_ \\\n    , false_ \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\ntemplate< typename Tag > \\\nstruct lambda< \\\n      name< BOOST_MPL_AUX_NA_PARAMS(i) > \\\n    , Tag \\\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \\\n    > \\\n{ \\\n    typedef false_ is_le; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \\\n    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \\\n}; \\\n/**/\n#endif\n\n#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \\\n    || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n        && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)\n#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \\\nnamespace aux { \\\ntemplate< BOOST_MPL_PP_PARAMS(j, typename T) > \\\nstruct template_arity< \\\n          name< BOOST_MPL_PP_PARAMS(j, T) > \\\n        > \\\n    : int_<j> \\\n{ \\\n}; \\\n\\\ntemplate<> \\\nstruct template_arity< \\\n          name< BOOST_MPL_PP_ENUM(i, na) > \\\n        > \\\n    : int_<-1> \\\n{ \\\n}; \\\n} \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/\n#endif\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\ntemplate<> \\\nstruct name< BOOST_MPL_PP_ENUM(i, int) > \\\n{ \\\n    typedef int type; \\\n    enum { value = 0 }; \\\n}; \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/\n#endif\n\n#define BOOST_MPL_AUX_NA_PARAM(param) param = na\n\n#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \\\n/**/\n\n#define BOOST_MPL_AUX_NA_SPEC(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\n/**/\n\n#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \\\nBOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ETI(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \\\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \\\n/**/\n\n\n#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/nested_type_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: nested_type_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \\\n    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) \\\n    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename T > struct nested_type_wknd\n    : T::type\n{\n};\n}}}\n\n#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \\\n    aux::nested_type_wknd<T> \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \\\n    ::boost::mpl::aux::nested_type_wknd<T> \\\n/**/\n#endif\n\n#else // !BOOST_MPL_CFG_GCC et al.\n\n#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) T::type\n\n#endif \n\n#endif // BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/nttp_decl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n#define BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: nttp_decl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/nttp.hpp>\n\n#if defined(BOOST_MPL_CFG_NTTP_BUG)\n\ntypedef bool        _mpl_nttp_bool;\ntypedef int         _mpl_nttp_int;\ntypedef unsigned    _mpl_nttp_unsigned;\ntypedef long        _mpl_nttp_long;\n\n#   include <boost/preprocessor/cat.hpp>\n#   define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/\n\n#else\n\n#   define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/numeric_cast_utils.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: numeric_cast_utils.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/numeric_cast.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    >\nstruct cast1st_impl\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : apply_wrap2< \n              F\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type\n            , N2\n            >\n    {\n#else\n    {\n    typedef typename apply_wrap2< \n              F\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type\n            , N2\n            >::type type;\n#endif\n    };\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    >\nstruct cast2nd_impl\n{\n    template< typename N1, typename N2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : apply_wrap2< \n              F\n            , N1\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type\n            >\n    {\n#else\n    {\n        typedef typename apply_wrap2< \n              F\n            , N1\n            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type\n            >::type type;\n#endif\n    };\n};\n\n}}}\n\n#endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/numeric_op.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: numeric_op.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/numeric_cast.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/tag.hpp>\n#   include <boost/mpl/aux_/numeric_cast_utils.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   include <boost/mpl/aux_/msvc_eti_base.hpp>\n#   include <boost/mpl/aux_/value_wknd.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    || defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/preprocessor/sub.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/eti.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/dec.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n\n#if !defined(AUX778076_OP_ARITY)\n#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#endif\n\n#if !defined(AUX778076_OP_IMPL_NAME)\n#   define AUX778076_OP_IMPL_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_impl)\n#endif\n\n#if !defined(AUX778076_OP_TAG_NAME)\n#   define AUX778076_OP_TAG_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_tag)\n#endif\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename Tag1\n    , typename Tag2\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value \n    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value \n    >\nstruct AUX778076_OP_IMPL_NAME\n    : if_c<\n          ( tag1_ > tag2_ )\n#else\n    >\nstruct AUX778076_OP_IMPL_NAME\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n#endif\n        , aux::cast2nd_impl< AUX778076_OP_IMPL_NAME<Tag1,Tag1>,Tag1,Tag2 >\n        , aux::cast1st_impl< AUX778076_OP_IMPL_NAME<Tag2,Tag2>,Tag1,Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct AUX778076_OP_IMPL_NAME<na,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\ntemplate< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n#else\ntemplate<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n\ntemplate<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na>\n{\n    template< typename U1, typename U2 > struct apply \n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value = 0);\n    };\n};\n#endif\n\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && BOOST_WORKAROUND(BOOST_MSVC, >= 1300)\ntemplate< typename T > struct AUX778076_OP_TAG_NAME\n    : tag<T,na>\n{\n};\n#else\ntemplate< typename T > struct AUX778076_OP_TAG_NAME\n{\n    typedef typename T::tag type;\n};\n#endif\n\n\n#if AUX778076_OP_ARITY != 2\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n#   define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))>\n#   define AUX778076_OP_N_CALLS(i, N) \\\n    BOOST_MPL_PP_REPEAT( BOOST_PP_DEC(i), BOOST_MPL_PP_REPEAT_IDENTITY_FUNC, AUX778076_OP_NAME< ) \\\n    N1 BOOST_MPL_PP_REPEAT( BOOST_MPL_PP_SUB(i, 1), AUX778076_OP_RIGHT_OPERAND, N ) \\\n/**/\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)\n    >\nstruct AUX778076_OP_NAME\n    : AUX778076_OP_N_CALLS(AUX778076_OP_ARITY, N)\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,( BOOST_PP_DEC(AUX778076_OP_ARITY), 2, <boost/mpl/aux_/numeric_op.hpp> ))\n#include BOOST_PP_ITERATE()\n\n#   undef AUX778076_OP_N_CALLS\n#   undef AUX778076_OP_RIGHT_OPERAND\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n/// forward declaration\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,2);\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)\n    >\nstruct AUX778076_OP_NAME\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    : aux::msvc_eti_base< typename if_<\n#else\n    : if_<\n#endif\n          is_na<N3>\n        , BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>\n        , AUX778076_OP_NAME<\n              BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>\n            , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N)\n            >\n        >::type\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    >\n#endif\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\ntemplate< \n      typename N1\n    , typename N2\n    >\nstruct BOOST_PP_CAT(AUX778076_OP_NAME,2)\n\n#endif\n\n#else // AUX778076_OP_ARITY == 2\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct AUX778076_OP_NAME\n\n#endif\n\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : AUX778076_OP_IMPL_NAME<\n          typename AUX778076_OP_TAG_NAME<N1>::type\n        , typename AUX778076_OP_TAG_NAME<N2>::type\n        >::template apply<N1,N2>::type\n#else\n    : aux::msvc_eti_base< typename apply_wrap2<\n          AUX778076_OP_IMPL_NAME<\n              typename AUX778076_OP_TAG_NAME<N1>::type\n            , typename AUX778076_OP_TAG_NAME<N2>::type\n            >\n        , N1\n        , N2\n        >::type >::type\n#endif\n{\n#if AUX778076_OP_ARITY != 2\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(2, N, na) )\n        )\n#   else\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, BOOST_PP_CAT(AUX778076_OP_NAME,2), (N1, N2))\n#   endif\n\n#else\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, AUX778076_OP_NAME, (N1, N2))\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, AUX778076_OP_ARITY, AUX778076_OP_NAME)\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      BOOST_MPL_PP_PARAMS(i_, typename N)\n    >\nstruct AUX778076_OP_NAME<BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na)>\n#if i_ != 2\n    : AUX778076_OP_N_CALLS(i_, N)\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          AUX778076_OP_ARITY\n        , AUX778076_OP_NAME\n        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na) )\n        )\n};\n#endif\n\n#   undef i_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_backward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_backward;\ntemplate<>\nstruct advance_backward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_backward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename prior<iter0>::type iter1;\n        typedef typename prior<iter1>::type iter2;\n        typedef typename prior<iter2>::type iter3;\n        typedef typename prior<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_backward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_backward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_backward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/advance_forward.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< long N > struct advance_forward;\ntemplate<>\nstruct advance_forward<0>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef iter0 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<1>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef iter1 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<2>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef iter2 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<3>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef iter3 type;\n    };\n};\n\ntemplate<>\nstruct advance_forward<4>\n{\n    template< typename Iterator > struct apply\n    {\n        typedef Iterator iter0;\n        typedef typename next<iter0>::type iter1;\n        typedef typename next<iter1>::type iter2;\n        typedef typename next<iter2>::type iter3;\n        typedef typename next<iter3>::type iter4;\n        typedef iter4 type;\n    };\n};\n\ntemplate< long N >\nstruct advance_forward\n{\n    template< typename Iterator > struct apply\n    {\n        typedef typename apply_wrap1<\n              advance_forward<4>\n            , Iterator\n            >::type chunk_result_;\n\n        typedef typename apply_wrap1<\n              advance_forward<(\n                (N - 4) < 0\n                    ? 0\n                    : N - 4\n                    )>\n            , chunk_result_\n            >::type type;\n    };\n};\n\n}}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/and.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/and.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl\n    : false_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct and_impl< true,T1,T2,T3,T4 >\n    : and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , true_\n        >\n{\n};\n\ntemplate<>\nstruct and_impl<\n          true\n        , true_, true_, true_, true_\n        >\n    : true_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = true_, typename T4 = true_, typename T5 = true_\n    >\nstruct and_\n\n    : aux::and_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , and_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , and_\n    )\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n    >\nstruct apply0\n\n    : apply_wrap0<\n          typename lambda<F>::type\n       \n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          1\n        , apply0\n        , (F )\n        )\n};\n\ntemplate<\n      typename F\n    >\nstruct apply< F,na,na,na,na,na >\n    : apply0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1\n\n    : apply_wrap1<\n          typename lambda<F>::type\n        , T1\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          2\n        , apply1\n        , (F, T1)\n        )\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply< F,T1,na,na,na,na >\n    : apply1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2\n\n    : apply_wrap2<\n          typename lambda<F>::type\n        , T1, T2\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          3\n        , apply2\n        , (F, T1, T2)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply< F,T1,T2,na,na,na >\n    : apply2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3\n\n    : apply_wrap3<\n          typename lambda<F>::type\n        , T1, T2, T3\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          4\n        , apply3\n        , (F, T1, T2, T3)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply< F,T1,T2,T3,na,na >\n    : apply3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4\n\n    : apply_wrap4<\n          typename lambda<F>::type\n        , T1, T2, T3, T4\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , apply4\n        , (F, T1, T2, T3, T4)\n        )\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply< F,T1,T2,T3,T4,na >\n    : apply4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5\n\n    : apply_wrap5<\n          typename lambda<F>::type\n        , T1, T2, T3, T4, T5\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , apply5\n        , (F, T1, T2, T3, T4, T5)\n        )\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply\n    : apply5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct apply;\n\ntemplate<\n      typename F\n    >\nstruct apply0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct apply1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct apply2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct apply3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct apply4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct apply5;\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/apply_wrap.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F\n\n    , typename has_apply_ = typename aux::has_apply<F>::type\n\n    >\nstruct apply_wrap0\n\n    : F::template apply<  >\n{\n};\n\ntemplate< typename F >\nstruct apply_wrap0< F,true_ >\n    : F::apply\n{\n};\n\ntemplate<\n      typename F, typename T1\n\n    >\nstruct apply_wrap1\n\n    : F::template apply<T1>\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n\n    >\nstruct apply_wrap2\n\n    : F::template apply< T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n\n    >\nstruct apply_wrap3\n\n    : F::template apply< T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n\n    >\nstruct apply_wrap4\n\n    : F::template apply< T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n\n    >\nstruct apply_wrap5\n\n    : F::template apply< T1,T2,T3,T4,T5 >\n{\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp",
    "content": "\n// Copyright Peter Dimov 2001-2002\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/arg.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntemplate<> struct arg< -1 >\n{\n    BOOST_STATIC_CONSTANT(int, value  = -1);\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<1>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 1);\n    typedef arg<2> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U1 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<2>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 2);\n    typedef arg<3> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U2 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<3>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 3);\n    typedef arg<4> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U3 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<4>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 4);\n    typedef arg<5> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U4 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\ntemplate<> struct arg<5>\n{\n    BOOST_STATIC_CONSTANT(int, value  = 5);\n    typedef arg<6> next;\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)\n    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)\n\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n        typedef U5 type;\n        BOOST_MPL_AUX_ASSERT_NOT_NA(type);\n    };\n};\n\nBOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp",
    "content": "\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      typename T, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg< -1 >, Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\ntemplate<\n      int N, typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\n{\n    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\n{\n    typedef bind< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\ntemplate<\n      typename F\n    >\nstruct bind0\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n     public:\n        typedef typename apply_wrap0<\n              f_\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind0<F>, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind0<F> f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(1, bind0)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\n\ntemplate<\n      typename F\n    >\nstruct bind< F,na,na,na,na,na >\n    : bind0<F>\n{\n};\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n     public:\n        typedef typename apply_wrap1<\n              f_\n            , typename t1::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename U1, typename U2, typename U3\n    , typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind1< F,T1 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind1< F,T1 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(2, bind1)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind< F,T1,na,na,na,na >\n    : bind1< F,T1 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n     public:\n        typedef typename apply_wrap2<\n              f_\n            , typename t1::type, typename t2::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename U1, typename U2\n    , typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind2< F,T1,T2 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind2< F,T1,T2 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(3, bind2)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind< F,T1,T2,na,na,na >\n    : bind2< F,T1,T2 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n     public:\n        typedef typename apply_wrap3<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename U1\n    , typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind3< F,T1,T2,T3 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(4, bind3)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind< F,T1,T2,T3,na,na >\n    : bind3< F,T1,T2,T3 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n     public:\n        typedef typename apply_wrap4<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename U1, typename U2, typename U3, typename U4, typename U5\n    >\nstruct resolve_bind_arg<\n      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind4< F,T1,T2,T3,T4 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(5, bind4)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind< F,T1,T2,T3,T4,na >\n    : bind4< F,T1,T2,T3,T4 >\n{\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\n        ///\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef aux::replace_unnamed_arg< T4,n4 > r4;\n        typedef typename r4::type a4;\n        typedef typename r4::next n5;\n        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\n        ///\n        typedef aux::replace_unnamed_arg< T5,n5 > r5;\n        typedef typename r5::type a5;\n        typedef typename r5::next n6;\n        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\n        ///\n     public:\n        typedef typename apply_wrap5<\n              f_\n            , typename t1::type, typename t2::type, typename t3::type\n            , typename t4::type, typename t5::type\n            >::type type;\n\n    };\n};\n\nnamespace aux {\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename U1, typename U2, typename U3, typename U4\n    , typename U5\n    >\nstruct resolve_bind_arg<\n      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\n    >\n{\n    typedef bind5< F,T1,T2,T3,T4,T5 > f_;\n    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(6, bind5)\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind\n    : bind5< F,T1,T2,T3,T4,T5 >\n{\n};\n\n/// if_/eval_if specializations\ntemplate< template< typename T1, typename T2, typename T3 > class F, typename Tag >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct if_;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< if_,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename if_<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\ntemplate<\n      template< typename T1, typename T2, typename T3 > class F, typename Tag\n    >\nstruct quote3;\n\ntemplate< typename T1, typename T2, typename T3 > struct eval_if;\n\ntemplate<\n      typename Tag, typename T1, typename T2, typename T3\n    >\nstruct bind3<\n      quote3< eval_if,Tag >\n    , T1, T2, T3\n    >\n{\n    template<\n          typename U1 = na, typename U2 = na, typename U3 = na\n        , typename U4 = na, typename U5 = na\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n        typedef aux::replace_unnamed_arg< T1,n1 > r1;\n        typedef typename r1::type a1;\n        typedef typename r1::next n2;\n        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\n        ///\n        typedef aux::replace_unnamed_arg< T2,n2 > r2;\n        typedef typename r2::type a2;\n        typedef typename r2::next n3;\n        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\n        ///\n        typedef aux::replace_unnamed_arg< T3,n3 > r3;\n        typedef typename r3::type a3;\n        typedef typename r3::next n4;\n        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\n        ///\n        typedef typename eval_if<\n              typename t1::type\n            , t2, t3\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/bind_fwd.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename F, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na\n    >\nstruct bind;\n\ntemplate<\n      typename F\n    >\nstruct bind0;\n\ntemplate<\n      typename F, typename T1\n    >\nstruct bind1;\n\ntemplate<\n      typename F, typename T1, typename T2\n    >\nstruct bind2;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    >\nstruct bind3;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    >\nstruct bind4;\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct bind5;\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct equal_to\n\n    : equal_to_impl<\n          typename equal_to_tag<N1>::type\n        , typename equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl\n{\n    typedef fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,First,Last,State,ForwardOp >\n    : fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/full_lambda.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate<\n      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false\n    , bool C5 = false\n    >\nstruct lambda_or\n    : true_\n{\n};\n\ntemplate<>\nstruct lambda_or< false,false,false,false,false >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename T\n    , typename Tag\n    , typename Arity\n    >\nstruct lambda\n{\n    typedef false_ is_le;\n    typedef T result_;\n    typedef T type;\n};\n\ntemplate<\n      typename T\n    >\nstruct is_lambda_expression\n    : lambda<T>::is_le\n{\n};\n\ntemplate< int N, typename Tag >\nstruct lambda< arg<N>,Tag, int_< -1 > >\n{\n    typedef true_ is_le;\n    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41\n    typedef mpl::protect<result_> type;\n};\n\ntemplate<\n      typename F\n    , typename Tag\n    >\nstruct lambda<\n          bind0<F>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef false_ is_le;\n    typedef bind0<\n          F\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1\n{\n    typedef F<\n          typename L1::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1 > class F\n    , typename L1\n    >\nstruct le_result1< true_,Tag,F,L1 >\n{\n    typedef bind1<\n          quote1< F,Tag >\n        , typename L1::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    , typename Tag\n    >\nstruct lambda<\n          F<T1>\n        , Tag\n        , int_<1>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef typename l1::is_le is_le1;\n    typedef typename aux::lambda_or<\n          is_le1::value\n        >::type is_le;\n\n    typedef aux::le_result1<\n          is_le, Tag, F, l1\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1\n    , typename Tag\n    >\nstruct lambda<\n          bind1< F,T1 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef false_ is_le;\n    typedef bind1<\n          F\n        , T1\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2\n{\n    typedef F<\n          typename L1::type, typename L2::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2 > class F\n    , typename L1, typename L2\n    >\nstruct le_result2< true_,Tag,F,L1,L2 >\n{\n    typedef bind2<\n          quote2< F,Tag >\n        , typename L1::result_, typename L2::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2 >\n        , Tag\n        , int_<2>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value\n        >::type is_le;\n\n    typedef aux::le_result2<\n          is_le, Tag, F, l1, l2\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2\n    , typename Tag\n    >\nstruct lambda<\n          bind2< F,T1,T2 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef false_ is_le;\n    typedef bind2<\n          F\n        , T1, T2\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3 > class F\n    , typename L1, typename L2, typename L3\n    >\nstruct le_result3< true_,Tag,F,L1,L2,L3 >\n{\n    typedef bind3<\n          quote3< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3 >\n        , Tag\n        , int_<3>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value\n        >::type is_le;\n\n    typedef aux::le_result3<\n          is_le, Tag, F, l1, l2, l3\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3\n    , typename Tag\n    >\nstruct lambda<\n          bind3< F,T1,T2,T3 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef false_ is_le;\n    typedef bind3<\n          F\n        , T1, T2, T3\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename L1, typename L2, typename L3, typename L4\n    >\nstruct le_result4< true_,Tag,F,L1,L2,L3,L4 >\n{\n    typedef bind4<\n          quote4< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4 >\n        , Tag\n        , int_<4>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        >::type is_le;\n\n    typedef aux::le_result4<\n          is_le, Tag, F, l1, l2, l3, l4\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename Tag\n    >\nstruct lambda<\n          bind4< F,T1,T2,T3,T4 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef false_ is_le;\n    typedef bind4<\n          F\n        , T1, T2, T3, T4\n        > result_;\n\n    typedef result_ type;\n};\n\nnamespace aux {\n\ntemplate<\n      typename IsLE, typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5\n{\n    typedef F<\n          typename L1::type, typename L2::type, typename L3::type\n        , typename L4::type, typename L5::type\n        > result_;\n\n    typedef result_ type;\n};\n\ntemplate<\n      typename Tag\n    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F\n    , typename L1, typename L2, typename L3, typename L4, typename L5\n    >\nstruct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >\n{\n    typedef bind5<\n          quote5< F,Tag >\n        , typename L1::result_, typename L2::result_, typename L3::result_\n        , typename L4::result_, typename L5::result_\n        > result_;\n\n    typedef mpl::protect<result_> type;\n};\n\n} // namespace aux\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename Tag\n    >\nstruct lambda<\n          F< T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<5>\n        >\n{\n    typedef lambda< T1,Tag > l1;\n    typedef lambda< T2,Tag > l2;\n    typedef lambda< T3,Tag > l3;\n    typedef lambda< T4,Tag > l4;\n    typedef lambda< T5,Tag > l5;\n    \n    typedef typename l1::is_le is_le1;\n    typedef typename l2::is_le is_le2;\n    typedef typename l3::is_le is_le3;\n    typedef typename l4::is_le is_le4;\n    typedef typename l5::is_le is_le5;\n    \n\n    typedef typename aux::lambda_or<\n          is_le1::value, is_le2::value, is_le3::value, is_le4::value\n        , is_le5::value\n        >::type is_le;\n\n    typedef aux::le_result5<\n          is_le, Tag, F, l1, l2, l3, l4, l5\n        > le_result_;\n\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind5< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind5<\n          F\n        , T1, T2, T3, T4, T5\n        > result_;\n\n    typedef result_ type;\n};\n\n/// special case for 'protect'\ntemplate< typename T, typename Tag >\nstruct lambda< mpl::protect<T>,Tag, int_<1> >\n{\n    typedef false_ is_le;\n    typedef mpl::protect<T> result_;\n    typedef result_ type;\n};\n\n/// specializations for the main 'bind' form\n\ntemplate<\n      typename F, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    , typename Tag\n    >\nstruct lambda<\n          bind< F,T1,T2,T3,T4,T5 >\n        , Tag\n        , int_<6>\n        >\n{\n    typedef false_ is_le;\n    typedef bind< F,T1,T2,T3,T4,T5 > result_;\n    typedef result_ type;\n};\n\ntemplate<\n      typename F\n    , typename Tag1\n    , typename Tag2\n    , typename Arity\n    >\nstruct lambda<\n          lambda< F,Tag1,Arity >\n        , Tag2\n        , int_<3>\n        >\n{\n    typedef lambda< F,Tag2 > l1;\n    typedef lambda< Tag1,Tag2 > l2;\n    typedef typename l1::is_le is_le;\n    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;\n    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;\n    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;\n    typedef typename le_result_::result_ result_;\n    typedef typename le_result_::type type;\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater\n\n    : greater_impl<\n          typename greater_tag<N1>::type\n        , typename greater_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/greater_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct greater_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct greater_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct greater_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct greater_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct greater_equal\n\n    : greater_equal_impl<\n          typename greater_equal_tag<N1>::type\n        , typename greater_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct greater_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_if_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename Iterator, typename State >\nstruct iter_fold_if_null_step\n{\n    typedef State state;\n    typedef Iterator iterator;\n};\n\ntemplate< bool >\nstruct iter_fold_if_step_impl\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef typename apply2< StateOp,State,Iterator >::type state;\n        typedef typename IteratorOp::type iterator;\n    };\n};\n\ntemplate<>\nstruct iter_fold_if_step_impl<false>\n{\n    template<\n          typename Iterator\n        , typename State\n        , typename StateOp\n        , typename IteratorOp\n        >\n    struct result_\n    {\n        typedef State state;\n        typedef Iterator iterator;\n    };\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_forward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename BackwardOp\n    , typename Predicate\n    >\nstruct iter_fold_if_backward_step\n{\n    typedef typename apply2< Predicate,State,Iterator >::type not_last;\n    typedef typename iter_fold_if_step_impl<\n          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value\n        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;\n\n    typedef typename impl_::state state;\n    typedef typename impl_::iterator iterator;\n};\n\ntemplate<\n      typename Iterator\n    , typename State\n    , typename ForwardOp\n    , typename ForwardPredicate\n    , typename BackwardOp\n    , typename BackwardPredicate\n    >\nstruct iter_fold_if_impl\n{\n private:\n    typedef iter_fold_if_null_step< Iterator,State > forward_step0;\n    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;\n    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;\n    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;\n    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;\n    \n\n    typedef typename if_<\n          typename forward_step4::not_last\n        , iter_fold_if_impl<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            , ForwardOp\n            , ForwardPredicate\n            , BackwardOp\n            , BackwardPredicate\n            >\n        , iter_fold_if_null_step<\n              typename forward_step4::iterator\n            , typename forward_step4::state\n            >\n        >::type backward_step4;\n\n    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;\n    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;\n    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;\n    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;\n    \n\n public:\n    typedef typename backward_step0::state state;\n    typedef typename backward_step4::iterator iterator;\n};\n\n}}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/iter_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 0,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 1,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef state1 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 2,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef state2 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 3,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef state3 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< 4,First,Last,State,ForwardOp >\n{\n    typedef First iter0;\n    typedef State state0;\n    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef state4 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      int N\n    , typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl\n{\n    typedef iter_fold_impl<\n          4\n        , First\n        , Last\n        , State\n        , ForwardOp\n        > chunk_;\n\n    typedef iter_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , typename chunk_::iterator\n        , Last\n        , typename chunk_::state\n        , ForwardOp\n        > res_;\n\n    typedef typename res_::state state;\n    typedef typename res_::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,First,Last,State,ForwardOp >\n    : iter_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2< ForwardOp,State,First >::type\n        , ForwardOp\n        >\n{\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename ForwardOp\n    >\nstruct iter_fold_impl< -1,Last,Last,State,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/less.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less\n\n    : less_impl<\n          typename less_tag<N1>::type\n        , typename less_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/less_equal.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct less_equal_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct less_equal_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct less_equal_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct less_equal_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct less_equal\n\n    : less_equal_impl<\n          typename less_equal_tag<N1>::type\n        , typename less_equal_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct less_equal_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/list.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct list;\n\ntemplate<\n     \n    >\nstruct list<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list0<  >\n{\n    typedef list0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct list<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list1<T0>\n{\n    typedef typename list1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list2< T0,T1 >\n{\n    typedef typename list2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list3< T0,T1,T2 >\n{\n    typedef typename list3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list4< T0,T1,T2,T3 >\n{\n    typedef typename list4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list5< T0,T1,T2,T3,T4 >\n{\n    typedef typename list5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : list15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : list16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : list17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : list18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : list19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list\n    : list20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/minus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct minus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct minus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct minus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct minus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct minus\n    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , minus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct minus< N1,N2,N3,N4,na >\n\n    : minus< minus< minus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct minus< N1,N2,N3,na,na >\n\n    : minus< minus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct minus< N1,N2,na,na,na >\n    : minus_impl<\n          typename minus_tag<N1>::type\n        , typename minus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , minus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, minus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct minus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/not_equal_to.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct not_equal_to_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct not_equal_to_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct not_equal_to_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct not_equal_to_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    >\nstruct not_equal_to\n\n    : not_equal_to_impl<\n          typename not_equal_to_tag<N1>::type\n        , typename not_equal_to_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)\n\n}}\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct not_equal_to_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/or.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/or.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool C_, typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl\n    : true_\n{\n};\n\ntemplate< typename T1, typename T2, typename T3, typename T4 >\nstruct or_impl< false,T1,T2,T3,T4 >\n    : or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4\n        , false_\n        >\n{\n};\n\ntemplate<>\nstruct or_impl<\n          false\n        , false_, false_, false_, false_\n        >\n    : false_\n{\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename T3 = false_, typename T4 = false_, typename T5 = false_\n    >\nstruct or_\n\n    : aux::or_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value\n        , T2, T3, T4, T5\n        >\n\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , or_\n        , ( T1, T2, T3, T4, T5)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC2(\n      2\n    , 5\n    , or_\n    )\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/placeholders.hpp\" header\n// -- DO NOT modify by hand!\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg< -1 > _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<1> _1;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<2> _2;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<3> _3;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<4> _4;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<5> _5;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;\n}\n\n}}\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<6> _6;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;\n}\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/plus.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct plus_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct plus_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct plus_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct plus_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct plus\n    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , plus\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct plus< N1,N2,N3,N4,na >\n\n    : plus< plus< plus< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct plus< N1,N2,N3,na,na >\n\n    : plus< plus< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct plus< N1,N2,na,na,na >\n    : plus_impl<\n          typename plus_tag<N1>::type\n        , typename plus_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , plus\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, plus)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct plus_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/quote.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n{\n    typedef typename T::type type;\n};\n\ntemplate< typename T >\nstruct quote_impl< T,false >\n{\n    typedef T type;\n};\n\ntemplate<\n      template< typename P1 > class F\n    , typename Tag = void_\n    >\nstruct quote1\n{\n    template< typename U1 > struct apply\n\n        : quote_impl<\n              F<U1>\n            , aux::has_type< F<U1> >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename Tag = void_\n    >\nstruct quote2\n{\n    template< typename U1, typename U2 > struct apply\n\n        : quote_impl<\n              F< U1,U2 >\n            , aux::has_type< F< U1,U2 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename Tag = void_\n    >\nstruct quote3\n{\n    template< typename U1, typename U2, typename U3 > struct apply\n\n        : quote_impl<\n              F< U1,U2,U3 >\n            , aux::has_type< F< U1,U2,U3 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename Tag = void_\n    >\nstruct quote4\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4 >\n            , aux::has_type< F< U1,U2,U3,U4 > >::value\n            >\n\n    {\n    };\n};\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename Tag = void_\n    >\nstruct quote5\n{\n    template<\n          typename U1, typename U2, typename U3, typename U4\n        , typename U5\n        >\n    struct apply\n\n        : quote_impl<\n              F< U1,U2,U3,U4,U5 >\n            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value\n            >\n\n    {\n    };\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/aux_/reverse_fold_impl.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\n\n/// forward declaration\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl;\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef fwd_state0 bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter0 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    \n\n    typedef fwd_state1 bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    typedef bkwd_state0 state;\n    typedef iter1 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    \n\n    typedef fwd_state2 bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter2 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    \n\n    typedef fwd_state3 bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter3 iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef fwd_state4 bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef iter4 iterator;\n};\n\ntemplate<\n      long N\n    , typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl\n{\n    typedef First iter0;\n    typedef State fwd_state0;\n    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\n    typedef typename mpl::next<iter0>::type iter1;\n    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\n    typedef typename mpl::next<iter1>::type iter2;\n    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\n    typedef typename mpl::next<iter2>::type iter3;\n    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\n    typedef typename mpl::next<iter3>::type iter4;\n    \n\n    typedef reverse_fold_impl<\n          ( (N - 4) < 0 ? 0 : N - 4 )\n        , iter4\n        , Last\n        , fwd_state4\n        , BackwardOp\n        , ForwardOp\n        > nested_chunk;\n\n    typedef typename nested_chunk::state bkwd_state4;\n    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\n    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\n    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\n    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\n    \n\n    typedef bkwd_state0 state;\n    typedef typename nested_chunk::iterator iterator;\n};\n\ntemplate<\n      typename First\n    , typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >\n{\n    typedef reverse_fold_impl<\n          -1\n        , typename mpl::next<First>::type\n        , Last\n        , typename apply2<ForwardOp,State, typename deref<First>::type>::type\n        , BackwardOp\n        , ForwardOp\n        > nested_step;\n\n    typedef typename apply2<\n          BackwardOp\n        , typename nested_step::state\n        , typename deref<First>::type\n        >::type state;\n\n    typedef typename nested_step::iterator iterator;\n};\n\ntemplate<\n      typename Last\n    , typename State\n    , typename BackwardOp\n    , typename ForwardOp\n    >\nstruct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >\n{\n    typedef State state;\n    typedef Last iterator;\n};\n\n}}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// *Preprocessed* version of the main \"template_arity.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< int N > struct arity_tag\n{\n    typedef char (&type)[N + 1];\n};\n\ntemplate<\n      int C1, int C2, int C3, int C4, int C5, int C6\n    >\nstruct max_arity\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) )\n        );\n};\n\narity_tag<0>::type arity_helper(...);\n\ntemplate<\n      template< typename P1 > class F\n    , typename T1\n    >\ntypename arity_tag<1>::type\narity_helper(type_wrapper< F<T1> >, arity_tag<1>);\n\ntemplate<\n      template< typename P1, typename P2 > class F\n    , typename T1, typename T2\n    >\ntypename arity_tag<2>::type\narity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>);\n\ntemplate<\n      template< typename P1, typename P2, typename P3 > class F\n    , typename T1, typename T2, typename T3\n    >\ntypename arity_tag<3>::type\narity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>);\n\ntemplate<\n      template< typename P1, typename P2, typename P3, typename P4 > class F\n    , typename T1, typename T2, typename T3, typename T4\n    >\ntypename arity_tag<4>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>);\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    >\ntypename arity_tag<5>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>);\n\ntemplate<\n      template<\n          typename P1, typename P2, typename P3, typename P4\n        , typename P5, typename P6\n        >\n      class F\n    , typename T1, typename T2, typename T3, typename T4, typename T5\n    , typename T6\n    >\ntypename arity_tag<6>::type\narity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>);\ntemplate< typename F, int N >\nstruct template_arity_impl\n{\n    BOOST_STATIC_CONSTANT(int, value =\n          sizeof(::boost::mpl::aux::arity_helper(type_wrapper<F>(), arity_tag<N>())) - 1\n        );\n};\n\ntemplate< typename F >\nstruct template_arity\n{\n    BOOST_STATIC_CONSTANT(int, value  = (\n          max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value\n        ));\n    typedef mpl::int_<value> type;\n};\n\n}}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/times.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/times.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Tag1\n    , typename Tag2\n    >\nstruct times_impl\n    : if_c<\n          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)\n              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)\n            )\n\n        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >\n        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >\n        >::type\n{\n};\n\n/// for Digital Mars C++/compilers with no CTPS/TTP support\ntemplate<> struct times_impl< na,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< na,Tag >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename Tag > struct times_impl< Tag,na >\n{\n    template< typename U1, typename U2 > struct apply\n    {\n        typedef apply type;\n        BOOST_STATIC_CONSTANT(int, value  = 0);\n    };\n};\n\ntemplate< typename T > struct times_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N1)\n    , typename BOOST_MPL_AUX_NA_PARAM(N2)\n    , typename N3 = na, typename N4 = na, typename N5 = na\n    >\nstruct times\n    : times< times< times< times< N1,N2 >, N3>, N4>, N5>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          5\n        , times\n        , ( N1, N2, N3, N4, N5 )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3, typename N4\n    >\nstruct times< N1,N2,N3,N4,na >\n\n    : times< times< times< N1,N2 >, N3>, N4>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, N4, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2, typename N3\n    >\nstruct times< N1,N2,N3,na,na >\n\n    : times< times< N1,N2 >, N3>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, N3, na, na )\n        )\n};\n\ntemplate<\n      typename N1, typename N2\n    >\nstruct times< N1,N2,na,na,na >\n    : times_impl<\n          typename times_tag<N1>::type\n        , typename times_tag<N2>::type\n        >::template apply< N1,N2 >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(\n          5\n        , times\n        , ( N1, N2, na, na, na )\n        )\n\n};\n\nBOOST_MPL_AUX_NA_SPEC2(2, 5, times)\n\n}}\n\nnamespace boost { namespace mpl {\ntemplate<>\nstruct times_impl< integral_c_tag,integral_c_tag >\n{\n    template< typename N1, typename N2 > struct apply\n\n        : integral_c<\n              typename aux::largest_int<\n                  typename N1::value_type\n                , typename N2::value_type\n                >::type\n            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value\n                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value\n                )\n            >\n    {\n    };\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na\n    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na\n    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na\n    , typename T12 = na, typename T13 = na, typename T14 = na\n    , typename T15 = na, typename T16 = na, typename T17 = na\n    , typename T18 = na, typename T19 = na\n    >\nstruct vector;\n\ntemplate<\n     \n    >\nstruct vector<\n          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector0<  >\n{\n    typedef vector0<  >::type type;\n};\n\ntemplate<\n      typename T0\n    >\nstruct vector<\n          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector1<T0>\n{\n    typedef typename vector1<T0>::type type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector<\n          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector2< T0,T1 >\n{\n    typedef typename vector2< T0,T1 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector<\n          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector3< T0,T1,T2 >\n{\n    typedef typename vector3< T0,T1,T2 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector<\n          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector4< T0,T1,T2,T3 >\n{\n    typedef typename vector4< T0,T1,T2,T3 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector5< T0,T1,T2,T3,T4 >\n{\n    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector6< T0,T1,T2,T3,T4,T5 >\n{\n    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector7< T0,T1,T2,T3,T4,T5,T6 >\n{\n    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n{\n    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n{\n    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n{\n    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na\n        , na, na, na\n        >\n    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n{\n    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na\n        , na, na, na, na\n        >\n    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n{\n    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na\n        , na, na, na, na\n        >\n    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n{\n    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na\n        , na, na, na, na\n        >\n    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n{\n    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na\n        , na, na, na, na\n        >\n    : vector15<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        >\n{\n    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, na, na, na, na\n        >\n    : vector16<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15\n        >\n{\n    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, na, na, na\n        >\n    : vector17<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16\n        >\n{\n    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, na, na\n        >\n    : vector18<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17\n        >\n{\n    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, na\n        >\n    : vector19<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18\n        >\n{\n    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;\n};\n\n/// primary template (not a specialization!)\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector\n    : vector20<\n          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14\n        , T15, T16, T17, T18, T19\n        >\n{\n    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;\n};\n\n}}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: def_params_tail.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/limits/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#include <boost/preprocessor/comma_if.hpp>\n#include <boost/preprocessor/logical/and.hpp>\n#include <boost/preprocessor/identity.hpp>\n#include <boost/preprocessor/empty.hpp>\n\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(1,T,value): , T1 = value, .., Tn = value\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(2,T,value): , T2 = value, .., Tn = value\n// BOOST_MPL_PP_DEF_PARAMS_TAIL(n,T,value): <nothing>\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/mpl/aux_/preprocessor/filter_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/sub.hpp>\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1( \\\n          i \\\n        , BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,i) \\\n        , param \\\n        , value_func \\\n        ) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1(i, n, param, value_func) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i,n,param,value_func) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i, n, param, value_func) \\\n    BOOST_PP_COMMA_IF(BOOST_PP_AND(i,n)) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_##i(n,param,value_func) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v())\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_1(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_2(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_3(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_4(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_5(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_6(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_7(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6,p7)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_8(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9 v(),p1,p2,p3,p4,p5,p6,p7,p8)\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_9(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p1,p2,p3,p4,p5,p6,p7,p8,p9)\n\n#else\n\n#   include <boost/preprocessor/arithmetic/add.hpp>\n#   include <boost/preprocessor/arithmetic/sub.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC(unused, i, op) \\\n    , BOOST_PP_CAT( \\\n          BOOST_PP_TUPLE_ELEM(3, 1, op) \\\n        , BOOST_PP_ADD_D(1, i, BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(3, 0, op))) \\\n        ) BOOST_PP_TUPLE_ELEM(3, 2, op)() \\\n    /**/\n\n#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \\\n    BOOST_PP_REPEAT( \\\n          BOOST_PP_SUB_D(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, i) \\\n        , BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC \\\n        , (i, param, value_func) \\\n        ) \\\n    /**/\n\n\n#endif // BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES\n\n#define BOOST_MPL_PP_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \\\n    /**/\n#else\n#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \\\n    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_EMPTY) \\\n    /**/\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessor/default_params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: default_params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): <nothing>\n// BOOST_MPL_PP_DEFAULT_PARAMS(1,T,int): T1 = int\n// BOOST_MPL_PP_DEFAULT_PARAMS(2,T,int): T1 = int, T2 = int\n// BOOST_MPL_PP_DEFAULT_PARAMS(n,T,int): T1 = int, T2 = int, .., Tn = int\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_DEFAULT_PARAMS(n,p,v) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_DEFAULT_PARAMS_,n)(p,v) \\\n    /**/\n    \n#   define BOOST_MPL_PP_DEFAULT_PARAMS_0(p,v)\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_1(p,v) p##1=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_2(p,v) p##1=v,p##2=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_3(p,v) p##1=v,p##2=v,p##3=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_4(p,v) p##1=v,p##2=v,p##3=v,p##4=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_5(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_6(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_7(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_8(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v\n#   define BOOST_MPL_PP_DEFAULT_PARAMS_9(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v,p##9=v\n\n#else\n\n#   include <boost/preprocessor/tuple/elem.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC(unused, i, pv) \\\n    BOOST_PP_COMMA_IF(i) \\\n    BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2,0,pv), BOOST_PP_INC(i) ) \\\n        = BOOST_PP_TUPLE_ELEM(2,1,pv) \\\n    /**/\n\n#   define BOOST_MPL_PP_DEFAULT_PARAMS(n, param, value) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC \\\n        , (param,value) \\\n        ) \\\n    /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessor/enum.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: enum.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_ENUM(0,int): <nothing>\n// BOOST_MPL_PP_ENUM(1,int): int\n// BOOST_MPL_PP_ENUM(2,int): int, int\n// BOOST_MPL_PP_ENUM(n,int): int, int, .., int\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_ENUM(n, param) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_ENUM_,n)(param) \\\n    /**/\n    \n#   define BOOST_MPL_PP_ENUM_0(p)\n#   define BOOST_MPL_PP_ENUM_1(p) p\n#   define BOOST_MPL_PP_ENUM_2(p) p,p\n#   define BOOST_MPL_PP_ENUM_3(p) p,p,p\n#   define BOOST_MPL_PP_ENUM_4(p) p,p,p,p\n#   define BOOST_MPL_PP_ENUM_5(p) p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_6(p) p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_7(p) p,p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_8(p) p,p,p,p,p,p,p,p\n#   define BOOST_MPL_PP_ENUM_9(p) p,p,p,p,p,p,p,p,p\n\n#else\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n\n#   define BOOST_MPL_PP_AUX_ENUM_FUNC(unused, i, param) \\\n    BOOST_PP_COMMA_IF(i) param \\\n    /**/\n\n#   define BOOST_MPL_PP_ENUM(n, param) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_ENUM_FUNC \\\n        , param \\\n        ) \\\n    /**/\n\n#endif\n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/preprocessor/params.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n#define BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: params.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n\n// BOOST_MPL_PP_PARAMS(0,T): <nothing>\n// BOOST_MPL_PP_PARAMS(1,T): T1\n// BOOST_MPL_PP_PARAMS(2,T): T1, T2\n// BOOST_MPL_PP_PARAMS(n,T): T1, T2, .., Tn\n\n#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)\n\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_PARAMS(n,p) \\\n    BOOST_PP_CAT(BOOST_MPL_PP_PARAMS_,n)(p) \\\n    /**/\n\n#   define BOOST_MPL_PP_PARAMS_0(p)\n#   define BOOST_MPL_PP_PARAMS_1(p) p##1\n#   define BOOST_MPL_PP_PARAMS_2(p) p##1,p##2\n#   define BOOST_MPL_PP_PARAMS_3(p) p##1,p##2,p##3\n#   define BOOST_MPL_PP_PARAMS_4(p) p##1,p##2,p##3,p##4\n#   define BOOST_MPL_PP_PARAMS_5(p) p##1,p##2,p##3,p##4,p##5\n#   define BOOST_MPL_PP_PARAMS_6(p) p##1,p##2,p##3,p##4,p##5,p##6\n#   define BOOST_MPL_PP_PARAMS_7(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7\n#   define BOOST_MPL_PP_PARAMS_8(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8\n#   define BOOST_MPL_PP_PARAMS_9(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9\n\n#else\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/repeat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define BOOST_MPL_PP_AUX_PARAM_FUNC(unused, i, param) \\\n    BOOST_PP_COMMA_IF(i) \\\n    BOOST_PP_CAT(param, BOOST_PP_INC(i)) \\\n    /**/\n\n#   define BOOST_MPL_PP_PARAMS(n, param) \\\n    BOOST_PP_REPEAT( \\\n          n \\\n        , BOOST_MPL_PP_AUX_PARAM_FUNC \\\n        , param \\\n        ) \\\n    /**/\n\n#endif \n\n#endif // BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/push_back_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_back_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $\n// $Date: 2009-08-20 00:50:16 -0700 (Thu, 20 Aug 2009) $\n// $Revision: 55679 $\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/has_type.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct has_push_back_arg {};\n\n// agurt 05/feb/04: no default implementation; the stub definition is needed \n// to enable the default 'has_push_back' implementation below\ntemplate< typename Tag >\nstruct push_back_impl\n{\n    template< typename Sequence, typename T > struct apply\n    {\n        // should be instantiated only in the context of 'has_push_back_impl';\n        // if you've got an assert here, you are requesting a 'push_back' \n        // specialization that doesn't exist.\n        BOOST_MPL_ASSERT_MSG(\n              ( boost::is_same< T, has_push_back_arg >::value )\n            , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\n            , ( Sequence )\n            );\n    };\n};\n\ntemplate< typename Tag >\nstruct has_push_back_impl\n{\n    template< typename Seq > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::has_type< push_back< Seq, has_push_back_arg > >\n    {\n#else\n    {\n        typedef aux::has_type< push_back< Seq, has_push_back_arg > > type;\n        BOOST_STATIC_CONSTANT(bool, value = \n              (aux::has_type< push_back< Seq, has_push_back_arg > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/push_front_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $\n// $Date: 2009-08-20 00:50:16 -0700 (Thu, 20 Aug 2009) $\n// $Revision: 55679 $\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/has_type.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct has_push_front_arg {};\n\n// agurt 05/feb/04: no default implementation; the stub definition is needed \n// to enable the default 'has_push_front' implementation below\n\ntemplate< typename Tag >\nstruct push_front_impl\n{\n    template< typename Sequence, typename T > struct apply\n    {\n        // should be instantiated only in the context of 'has_push_front_impl';\n        // if you've got an assert here, you are requesting a 'push_front' \n        // specialization that doesn't exist.\n        BOOST_MPL_ASSERT_MSG(\n              ( boost::is_same< T, has_push_front_arg >::value )\n            , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST\n            , ( Sequence )\n            );\n    };\n};\n\ntemplate< typename Tag >\nstruct has_push_front_impl\n{\n    template< typename Seq > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::has_type< push_front< Seq, has_push_front_arg > >\n    {\n#else\n    {\n        typedef aux::has_type< push_front< Seq, has_push_front_arg > > type;\n        BOOST_STATIC_CONSTANT(bool, value = \n              (aux::has_type< push_front< Seq, has_push_front_arg > >::value)\n            );\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/reverse_fold_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: reverse_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/next_prior.hpp>\n#   include <boost/mpl/deref.hpp>\n#   include <boost/mpl/apply.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n#       include <boost/mpl/if.hpp>\n#       include <boost/type_traits/is_same.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type\n#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold\n#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/size_impl.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n#define BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/distance.hpp>\n#include <boost/mpl/aux_/traits_lambda_spec.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// default implementation; conrete sequences might override it by \n// specializing either the 'size_impl' or the primary 'size' template\n\ntemplate< typename Tag >\nstruct size_impl\n{\n    template< typename Sequence > struct apply\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561))\n        : distance<\n              typename begin<Sequence>::type\n            , typename end<Sequence>::type\n            >\n    {\n#else\n    {\n        typedef typename distance<\n              typename begin<Sequence>::type\n            , typename end<Sequence>::type\n            >::type type;\n#endif\n    };\n};\n\nBOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, size_impl)\n\n}}\n\n#endif // BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/static_cast.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: static_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \\\n || BOOST_WORKAROUND(__GNUC__, < 3) \\\n || BOOST_WORKAROUND(__MWERKS__, <= 0x3001)\n#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) (T)(expr)\n#else\n#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)\n#endif\n\n#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/template_arity.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: template_arity.hpp 61584 2010-04-26 18:48:26Z agurtovoy $\n// $Date: 2010-04-26 11:48:26 -0700 (Mon, 26 Apr 2010) $\n// $Revision: 61584 $\n\n#include <boost/mpl/aux_/config/ttp.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n#   include <boost/mpl/int.hpp>\n#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n#       include <boost/mpl/aux_/type_wrapper.hpp>\n#   endif\n#   else\n#       include <boost/mpl/aux_/has_rebind.hpp>\n#   endif\n#endif\n\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER template_arity.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/range.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/seq/fold_left.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#   define AUX778076_ARITY BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arity_tag\n{\n    typedef char (&type)[N + 1];\n};\n\n#   define AUX778076_MAX_ARITY_OP(unused, state, i_) \\\n    ( BOOST_PP_CAT(C,i_) > 0 ? BOOST_PP_CAT(C,i_) : state ) \\\n/**/\n\ntemplate<\n      BOOST_MPL_PP_PARAMS(AUX778076_ARITY, BOOST_MPL_AUX_NTTP_DECL(int, C))\n    >\nstruct max_arity\n{\n    BOOST_STATIC_CONSTANT(int, value = \n          BOOST_PP_SEQ_FOLD_LEFT(\n              AUX778076_MAX_ARITY_OP\n            , -1\n            , BOOST_MPL_PP_RANGE(1, AUX778076_ARITY)\n            )\n        );\n};\n\n#   undef AUX778076_MAX_ARITY_OP\n\narity_tag<0>::type arity_helper(...);\n\n#   define BOOST_PP_ITERATION_LIMITS (1, AUX778076_ARITY)\n#   define BOOST_PP_FILENAME_1 <boost/mpl/aux_/template_arity.hpp>\n#   include BOOST_PP_ITERATE()\n\ntemplate< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >\nstruct template_arity_impl\n{\n    BOOST_STATIC_CONSTANT(int, value = \n          sizeof(::boost::mpl::aux::arity_helper(type_wrapper<F>(),arity_tag<N>())) - 1\n        );\n};\n\n#   define AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION(unused, i_, F) \\\n    BOOST_PP_COMMA_IF(i_) template_arity_impl<F,BOOST_PP_INC(i_)>::value \\\n/**/\n\ntemplate< typename F >\nstruct template_arity\n{\n    BOOST_STATIC_CONSTANT(int, value = (\n          max_arity< BOOST_MPL_PP_REPEAT(\n              AUX778076_ARITY\n            , AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION\n            , F\n            ) >::value\n        ));\n        \n    typedef mpl::int_<value> type;\n};\n\n#   undef AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION\n\n#   undef AUX778076_ARITY\n\n}}}\n\n#   endif // BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING\n#   else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#   include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< bool >\nstruct template_arity_impl\n{\n    template< typename F > struct result_\n        : mpl::int_<-1>\n    {\n    };\n};\n\ntemplate<>\nstruct template_arity_impl<true>\n{\n    template< typename F > struct result_\n        : F::arity\n    {\n    };\n};\n\ntemplate< typename F >\nstruct template_arity\n    : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >\n        ::template result_<F>\n{\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\ntemplate<>\nstruct template_arity<int>\n    : mpl::int_<-1>\n{\n};\n#endif\n\n}}}\n\n#   endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F\n    , BOOST_MPL_PP_PARAMS(i_, typename T)\n    >\ntypename arity_tag<i_>::type\narity_helper(type_wrapper< F<BOOST_MPL_PP_PARAMS(i_, T)> >, arity_tag<i_>);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/template_arity_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n#define BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: template_arity_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename F > struct template_arity;\n\n}}}\n\n#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/traits_lambda_spec.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n#define BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: traits_lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) /**/\n\n#elif !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\ntemplate<> struct trait<void_> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n    }; \\\n}; \\\n/**/\n\n#else\n\n#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\ntemplate<> struct trait<void_> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n    }; \\\n}; \\\ntemplate<> struct trait<int> \\\n{ \\\n    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \\\n    { \\\n        typedef int type; \\\n    }; \\\n}; \\\n/**/\n\n#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n\n#define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \\\n    BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \\\n    template<> struct trait<non_sequence_tag> {}; \\\n/**/\n\n#endif // BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/type_wrapper.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright Peter Dimov 2000-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: type_wrapper.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct type_wrapper\n{\n    typedef T type;\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n// agurt 08/may/03: a complicated way to extract the wrapped type; need it \n// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the \n// nested 'type' from 'type_wrapper<T>' when the latter was the result of a\n// 'typeof' expression\ntemplate< typename T > struct wrapped_type;\n\ntemplate< typename T > struct wrapped_type< type_wrapper<T> >\n{\n    typedef T type;\n};\n#else\ntemplate< typename W > struct wrapped_type\n{\n    typedef typename W::type type;\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/unwrap.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n#define BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n\n// Copyright Peter Dimov and Multi Media Ltd 2001, 2002\n// Copyright David Abrahams 2001\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: unwrap.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/ref.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename F >\ninline\nF& unwrap(F& f, long)\n{\n    return f;\n}\n\ntemplate< typename F >\ninline\nF&\nunwrap(reference_wrapper<F>& f, int)\n{\n    return f;\n}\n\ntemplate< typename F >\ninline\nF&\nunwrap(reference_wrapper<F> const& f, int)\n{\n    return f;\n}\n\n}}}\n\n#endif // BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/value_wknd.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n#define BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: value_wknd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \\\n    || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n\n#   include <boost/mpl/int.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\ntemplate< typename C_ > struct value_wknd\n    : C_\n{\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\ntemplate<> struct value_wknd<int>\n    : int_<1>\n{\n    using int_<1>::value;\n};\n#endif\n}}}\n\n\n#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\n#   define BOOST_MPL_AUX_VALUE_WKND(C) \\\n    ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux::value_wknd< C > \\\n/**/\n#    define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) BOOST_MPL_AUX_VALUE_WKND(C)\n#else\n#   define BOOST_MPL_AUX_VALUE_WKND(C) C\n#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \\\n    ::boost::mpl::aux::value_wknd< C > \\\n/**/\n#endif\n\n#else // BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS\n\n#   define BOOST_MPL_AUX_VALUE_WKND(C) C\n#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) C\n\n#endif\n\n#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)\n#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \\\n    BOOST_MPL_AUX_STATIC_CAST(T, C::value) \\\n/**/\n#else\n#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \\\n    BOOST_MPL_AUX_VALUE_WKND(C)::value \\\n/**/\n#endif\n\n\nnamespace boost { namespace mpl { namespace aux {\n\ntemplate< typename T > struct value_type_wknd\n{\n    typedef typename T::value_type type;\n};\n\n#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\ntemplate<> struct value_type_wknd<int>\n{\n    typedef int type;\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/aux_/yes_no.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n#define BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: yes_no.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/arrays.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n\nnamespace boost { namespace mpl { namespace aux {\n\ntypedef char (&no_tag)[1];\ntypedef char (&yes_tag)[2];\n\ntemplate< bool C_ > struct yes_no_tag\n{\n    typedef no_tag type;\n};\n\ntemplate<> struct yes_no_tag<true>\n{\n    typedef yes_tag type;\n};\n\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag\n{\n#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    typedef char (&type)[n];\n#else\n    char buf[n];\n    typedef weighted_tag type;\n#endif\n};\n\n#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)\ntemplate<> struct weighted_tag<0>\n{\n    typedef char (&type)[1];\n};\n#endif\n\n}}}\n\n#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct back_impl;\ntemplate< typename Sequence > struct back;\n\n}}\n\n#endif // BOOST_MPL_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/back_inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: back_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_back.hpp>\n#include <boost/mpl/inserter.hpp>\n\nnamespace boost {\nnamespace mpl {\n\ntemplate<\n      typename Sequence\n    >\nstruct back_inserter\n    : inserter< Sequence,push_back<> >\n{\n};\n\n}}\n\n#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/aux_/begin_end_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\n// agurt, 13/sep/02: switched from inheritance to typedef; MSVC is more\n// happy this way (less ETI-related errors), and it doesn't affect \n// anything else\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct begin\n{\n    typedef typename sequence_tag<Sequence>::type tag_;\n    typedef typename begin_impl< tag_ >\n        ::template apply< Sequence >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,begin,(Sequence))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct end\n{\n    typedef typename sequence_tag<Sequence>::type tag_;\n    typedef typename end_impl< tag_ >\n        ::template apply< Sequence >::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,end,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, begin)\nBOOST_MPL_AUX_NA_SPEC(1, end)\n\n}}\n\n#endif // BOOST_MPL_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/begin_end_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n#define BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: begin_end_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct begin_impl;\ntemplate< typename Tag > struct end_impl;\n\ntemplate< typename Sequence > struct begin;\ntemplate< typename Sequence > struct end;\n\n}}\n\n#endif // BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/bind.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_BIND_HPP_INCLUDED\n#define BOOST_MPL_BIND_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/bind_fwd.hpp>\n#   include <boost/mpl/placeholders.hpp>\n#   include <boost/mpl/next.hpp>\n#   include <boost/mpl/protect.hpp>\n#   include <boost/mpl/apply_wrap.hpp>\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/arity_spec.hpp>\n#   include <boost/mpl/aux_/type_wrapper.hpp>\n#   include <boost/mpl/aux_/yes_no.hpp>\n#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#       include <boost/type_traits/is_reference.hpp>\n#   endif \n#endif\n\n#include <boost/mpl/aux_/config/bind.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n#       define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp\n#   else\n#       define BOOST_MPL_PREPROCESSED_HEADER bind.hpp\n#   endif\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>\n#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>\n#   include <boost/mpl/aux_/preprocessor/repeat.hpp>\n#   include <boost/mpl/aux_/preprocessor/enum.hpp>\n#   include <boost/mpl/aux_/preprocessor/add.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/ttp.hpp>\n#   include <boost/mpl/aux_/config/dtp.hpp>\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/inc.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n#   define AUX778076_APPLY \\\n    BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \\\n    /**/\n\n#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#       define AUX778076_DMC_PARAM() , int dummy_\n#   else\n#       define AUX778076_DMC_PARAM()\n#   endif\n\n#   define AUX778076_BIND_PARAMS(param) \\\n    BOOST_MPL_PP_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \\\n    /**/\n\n#   define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \\\n    BOOST_PP_COMMA_IF(n) \\\n    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\n#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\\n    AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    /**/\n#else\n#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \\\n    AUX778076_BIND_PARAMS(param) \\\n    /**/\n#endif\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename T, AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg\n{\n    typedef T type;\n};\n\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\ntemplate<\n      typename T\n    , typename Arg\n    >\nstruct replace_unnamed_arg\n{\n    typedef Arg next;\n    typedef T type;\n};\n\ntemplate<\n      typename Arg\n    >\nstruct replace_unnamed_arg< arg<-1>,Arg >\n{\n    typedef typename Arg::next next;\n    typedef Arg type;\n};\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\ntemplate<\n      BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >\n{\n    typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;\n};\n\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >\n{\n    typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;\n    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\n};\n#endif\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n// agurt, 15/jan/02: it's not a intended to be used as a function class, and \n// MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't\n// work), so I went with the 'result_' here, and in all other similar cases\ntemplate< bool >\nstruct resolve_arg_impl\n{\n    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate<> \nstruct resolve_arg_impl<true>\n{\n    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_\n    {\n        typedef typename AUX778076_APPLY<\n              T\n            , AUX778076_BIND_PARAMS(U)\n            >::type type;\n    };\n};\n\n// for 'resolve_bind_arg'\ntemplate< typename T > struct is_bind_template;\n\ntemplate< \n      typename T, AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg\n    : resolve_arg_impl< is_bind_template<T>::value >\n            ::template result_< T,AUX778076_BIND_PARAMS(U) >\n{\n};\n\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\ntemplate< typename T > \nstruct replace_unnamed_arg_impl\n{\n    template< typename Arg > struct result_\n    {\n        typedef Arg next;\n        typedef T type;\n    };\n};\n\ntemplate<> \nstruct replace_unnamed_arg_impl< arg<-1> >\n{\n    template< typename Arg > struct result_\n    {\n        typedef typename next<Arg>::type next;\n        typedef Arg type;\n    };\n};\n\ntemplate< typename T, typename Arg > \nstruct replace_unnamed_arg\n    : replace_unnamed_arg_impl<T>::template result_<Arg>\n{\n};\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n// agurt, 10/mar/02: the forward declaration has to appear before any of\n// 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;\n\naux::no_tag is_bind_helper(...);\ntemplate< typename T > aux::no_tag is_bind_helper(protect<T>*);\n\n// overload for \"main\" form\n// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload \n// in case if we use 'aux::type_wrapper< bind<...> >' here, and all \n// 'bind' instantiations form a complete type anyway\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T)\n    >\naux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);\n#endif\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >\naux::yes_tag is_bind_helper(arg<N>*);\n\ntemplate< bool is_ref_ = true >\nstruct is_bind_template_impl\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value = false);\n    };\n};\n\ntemplate<>\nstruct is_bind_template_impl<false>\n{\n    template< typename T > struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value = \n              sizeof(aux::is_bind_helper(static_cast<T*>(0))) \n                == sizeof(aux::yes_tag)\n            );\n    };\n};\n\ntemplate< typename T > struct is_bind_template\n    : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\n        ::template result_<T>\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))\n#include BOOST_PP_ITERATE()\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)\n/// if_/eval_if specializations\n#   define AUX778076_SPEC_NAME if_\n#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\n#   include BOOST_PP_ITERATE()\n\n#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#   define AUX778076_SPEC_NAME eval_if\n#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))\n#   include BOOST_PP_ITERATE()\n#endif\n#endif\n\n// real C++ version is already taken care of\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\n\nnamespace aux {\n// apply_count_args\n#define AUX778076_COUNT_ARGS_PREFIX bind\n#define AUX778076_COUNT_ARGS_DEFAULT na\n#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#include <boost/mpl/aux_/count_args.hpp>\n}\n\n// bind\ntemplate<\n      typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind\n    : aux::bind_chooser<\n          aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value\n        >::template result_< F,AUX778076_BIND_PARAMS(T) >::type\n{\n};\n\nBOOST_MPL_AUX_ARITY_SPEC(\n      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n    , bind\n    )\n\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(\n      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n    , bind\n    )\n\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#   undef AUX778076_BIND_NESTED_DEFAULT_PARAMS\n#   undef AUX778076_BIND_N_SPEC_PARAMS\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_DEFAULT_PARAMS\n#   undef AUX778076_BIND_PARAMS\n#   undef AUX778076_DMC_PARAM\n#   undef AUX778076_APPLY\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_BIND_HPP_INCLUDED\n\n///// iteration, depth == 1\n\n// For gcc 4.4 compatability, we must include the\n// BOOST_PP_ITERATION_DEPTH test inside an #else clause.\n#else // BOOST_PP_IS_ITERATING\n#if BOOST_PP_ITERATION_DEPTH() == 1\n\n#   define i_ BOOST_PP_FRAME_ITERATION(1)\n\n#if defined(AUX778076_SPEC_NAME)\n\n// lazy metafunction specialization\ntemplate< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >\nstruct BOOST_PP_CAT(quote,i_);\n\ntemplate< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;\n\ntemplate<\n      typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(bind,i_)< \n      BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>\n    AUX778076_BIND_N_PARAMS(i_,T)\n    >\n{\n    template<\n          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n     private:\n        typedef mpl::arg<1> n1;\n#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\n#       include BOOST_PP_ITERATE()\n\n        typedef typename AUX778076_SPEC_NAME<\n              typename t1::type\n            , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)\n            >::type f_;\n\n     public:\n        typedef typename f_::type type;\n    };\n};\n\n#undef AUX778076_SPEC_NAME\n\n#else // AUX778076_SPEC_NAME\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct BOOST_PP_CAT(bind,i_)\n{\n    template<\n          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)\n        >\n    struct apply\n    {\n     private:\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\n        typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;\n        typedef typename r0::type a0;\n        typedef typename r0::next n1;\n        typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;\n        ///\n#   else\n        typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;\n\n#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT\n\n#   if i_ > 0\n#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))\n#       include BOOST_PP_ITERATE()\n#   endif\n\n     public:\n\n#   define AUX778076_ARG(unused, i_, t) \\\n    BOOST_PP_COMMA_IF(i_) \\\n    typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \\\n/**/\n\n        typedef typename BOOST_PP_CAT(apply_wrap,i_)<\n              f_ \n            BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)\n            >::type type;\n\n#   undef AUX778076_ARG\n    };\n};\n\nnamespace aux {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)\n    >\nstruct resolve_bind_arg<\n      BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)\n    >\n{\n    typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;\n    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;\n};\n\n#else\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\naux::yes_tag\nis_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace aux\n\nBOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\nBOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))\n\n#   if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    \n#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n/// primary template (not a specialization!)\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind\n    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\n{\n};\n#else\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()\n    >\nstruct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >\n    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >\n{\n};\n#endif\n\n#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace aux {\n\ntemplate<>\nstruct bind_chooser<i_>\n{\n    template<\n          typename F, AUX778076_BIND_PARAMS(typename T)\n        >\n    struct result_\n    {\n        typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;\n    };\n};\n\n} // namespace aux\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE\n\n#endif // AUX778076_SPEC_NAME\n\n#   undef i_\n\n///// iteration, depth == 2\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n#   define j_ BOOST_PP_FRAME_ITERATION(2)\n#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\n\n        typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);\n        typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);\n        typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));\n        typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\n        ///\n#   else\n        typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);\n\n#   endif\n#   undef j_\n\n#endif // BOOST_PP_ITERATION_DEPTH()\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/bind_fwd.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_BIND_FWD_HPP_INCLUDED\n#define BOOST_MPL_BIND_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bind_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/aux_/na.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/bind.hpp>\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER bind_fwd.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>\n\n#   include <boost/preprocessor/comma_if.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\nnamespace boost { namespace mpl {\n\n// local macros, #undef-ined at the end of the header\n\n#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)\n#       define AUX778076_DMC_PARAM() , int dummy_ = 0\n#   else\n#       define AUX778076_DMC_PARAM()\n#   endif\n\n#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \\\n    BOOST_MPL_PP_DEFAULT_PARAMS( \\\n          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \\\n        , param \\\n        , value \\\n        ) \\\n    AUX778076_DMC_PARAM() \\\n    /**/\n\n#   define AUX778076_BIND_N_PARAMS(n, param) \\\n    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \\\n    AUX778076_DMC_PARAM() \\\n    /**/\n\n#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)\ntemplate<\n      typename F, AUX778076_BIND_DEFAULT_PARAMS(typename T, na)\n    >\nstruct bind;\n#endif\n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind_fwd.hpp>))\n#include BOOST_PP_ITERATE()\n\n#   undef AUX778076_BIND_N_PARAMS\n#   undef AUX778076_BIND_DEFAULT_PARAMS\n#   undef AUX778076_DMC_PARAM\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_BIND_FWD_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      typename F AUX778076_BIND_N_PARAMS(i_, typename T)\n    >\nstruct BOOST_PP_CAT(bind,i_);\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/bool.hpp",
    "content": "\n#ifndef BOOST_MPL_BOOL_HPP_INCLUDED\n#define BOOST_MPL_BOOL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bool.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/bool_fwd.hpp>\n#include <boost/mpl/integral_c_tag.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< bool C_ > struct bool_\n{\n    BOOST_STATIC_CONSTANT(bool, value = C_);\n    typedef integral_c_tag tag;\n    typedef bool_ type;\n    typedef bool value_type;\n    operator bool() const { return this->value; }\n};\n\n#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\ntemplate< bool C_ >\nbool const bool_<C_>::value;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\n#endif // BOOST_MPL_BOOL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/bool_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n#define BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: bool_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< bool C_ > struct bool_;\n\n// shorcuts\ntypedef bool_<true> true_;\ntypedef bool_<false> false_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nBOOST_MPL_AUX_ADL_BARRIER_DECL(bool_)\nBOOST_MPL_AUX_ADL_BARRIER_DECL(true_)\nBOOST_MPL_AUX_ADL_BARRIER_DECL(false_)\n\n#endif // BOOST_MPL_BOOL_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/aux_/clear_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct clear\n    : clear_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,clear,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, clear)\n\n}}\n\n#endif // BOOST_MPL_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/clear_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n#define BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: clear_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct clear_impl;\ntemplate< typename Sequence > struct clear;\n\n}}\n\n#endif // BOOST_MPL_CLEAR_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/comparison.hpp",
    "content": "\n#ifndef BOOST_MPL_COMPARISON_HPP_INCLUDED\n#define BOOST_MPL_COMPARISON_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: comparison.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/equal_to.hpp>\n#include <boost/mpl/not_equal_to.hpp>\n#include <boost/mpl/less.hpp>\n#include <boost/mpl/greater.hpp>\n#include <boost/mpl/less_equal.hpp>\n#include <boost/mpl/greater_equal.hpp>\n\n#endif // BOOST_MPL_COMPARISON_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/contains.hpp",
    "content": "\n#ifndef BOOST_MPL_CONTAINS_HPP_INCLUDED\n#define BOOST_MPL_CONTAINS_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: contains.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/contains_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/contains_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct contains\n    : contains_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,contains,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, contains)\n\n}}\n\n#endif // BOOST_MPL_CONTAINS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/contains_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n#define BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n\n// Copyright Eric Friedman 2002\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: contains_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct contains_impl;\ntemplate< typename Sequence, typename T > struct contains;\n\n}}\n\n#endif // BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/deref.hpp",
    "content": "\n#ifndef BOOST_MPL_DEREF_HPP_INCLUDED\n#define BOOST_MPL_DEREF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: deref.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/msvc_type.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Iterator)\n    >\nstruct deref\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename Iterator::type type;\n#else\n    typedef typename aux::msvc_type<Iterator>::type type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,deref,(Iterator))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, deref)\n\n}}\n\n#endif // BOOST_MPL_DEREF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/distance.hpp",
    "content": "\n#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED\n#define BOOST_MPL_DISTANCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/iter_fold.hpp>\n#include <boost/mpl/iterator_range.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/tag.hpp>\n#include <boost/mpl/apply_wrap.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\n\nnamespace boost { namespace mpl {\n\n// default implementation for forward/bidirectional iterators\ntemplate< typename Tag > struct distance_impl\n{\n    template< typename First, typename Last > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : aux::msvc_eti_base< typename iter_fold<\n              iterator_range<First,Last>\n            , mpl::long_<0>\n            , next<>\n            >::type >\n    {\n#else\n    {\n        typedef typename iter_fold<\n              iterator_range<First,Last>\n            , mpl::long_<0>\n            , next<>\n            >::type type;\n        \n        BOOST_STATIC_CONSTANT(long, value =\n              (iter_fold<\n                  iterator_range<First,Last>\n                , mpl::long_<0>\n                , next<>\n                >::type::value)\n            );\n#endif\n    };\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(First)\n    , typename BOOST_MPL_AUX_NA_PARAM(Last)\n    >\nstruct distance\n    : distance_impl< typename tag<First>::type >\n        ::template apply<First, Last>\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, distance)\n\n}}\n\n#endif // BOOST_MPL_DISTANCE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/distance_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n#define BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: distance_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(distance)\n\ntemplate< typename Tag > struct distance_impl;\ntemplate< typename First, typename Last > struct distance;\n\n}}\n\n#endif // BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/empty_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n#define BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: empty_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct empty_impl;\ntemplate< typename Sequence > struct empty;\n\n}}\n\n#endif // BOOST_MPL_EMPTY_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/equal_to.hpp",
    "content": "\n#ifndef BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n#define BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME equal_to\n#define AUX778076_OP_TOKEN ==\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_EQUAL_TO_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/eval_if.hpp",
    "content": "\n#ifndef BOOST_MPL_EVAL_IF_HPP_INCLUDED\n#define BOOST_MPL_EVAL_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: eval_if.hpp 61921 2010-05-11 21:33:24Z neilgroves $\n// $Date: 2010-05-11 14:33:24 -0700 (Tue, 11 May 2010) $\n// $Revision: 61921 $\n\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(C)\n    , typename BOOST_MPL_AUX_NA_PARAM(F1)\n    , typename BOOST_MPL_AUX_NA_PARAM(F2)\n    >\nstruct eval_if\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \\\n        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \\\n        )\n{\n    typedef typename if_<C,F1,F2>::type f_;\n    typedef typename f_::type type;\n#else\n    : if_<C,F1,F2>::type\n{\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))\n};\n\n// (almost) copy & paste in order to save one more \n// recursively nested template instantiation to user\ntemplate<\n      bool C\n    , typename F1\n    , typename F2\n    >\nstruct eval_if_c\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \\\n     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \\\n        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \\\n        )\n{\n    typedef typename if_c<C,F1,F2>::type f_;\n    typedef typename f_::type type;\n#else\n    : if_c<C,F1,F2>::type\n{\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, eval_if)\n\n}}\n\n#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/find.hpp",
    "content": "\n#ifndef BOOST_MPL_FIND_HPP_INCLUDED\n#define BOOST_MPL_FIND_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: find.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/find_if.hpp>\n#include <boost/mpl/same_as.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct find\n    : find_if< Sequence,same_as<T> >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find,(Sequence,T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, find)\n\n}}\n\n#endif // BOOST_MPL_FIND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/find_if.hpp",
    "content": "\n#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED\n#define BOOST_MPL_FIND_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: find_if.hpp 49274 2008-10-11 07:22:05Z agurtovoy $\n// $Date: 2008-10-11 00:22:05 -0700 (Sat, 11 Oct 2008) $\n// $Revision: 49274 $\n\n#include <boost/mpl/aux_/find_if_pred.hpp>\n#include <boost/mpl/arg.hpp>\n#include <boost/mpl/iter_fold_if.hpp>\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(find_if)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)\n    >\nstruct find_if\n{\n    typedef typename iter_fold_if<\n          Sequence\n        , void\n        , mpl::arg<1> // ignore\n        , protect< aux::find_if_pred<Predicate> >\n        >::type result_;\n\n    typedef typename second<result_>::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find_if,(Sequence,Predicate))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2,find_if)\n\n}}\n\n#endif // BOOST_MPL_FIND_IF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/fold.hpp",
    "content": "\n#ifndef BOOST_MPL_FOLD_HPP_INCLUDED\n#define BOOST_MPL_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/aux_/fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    >\nstruct fold\n{\n    typedef typename aux::fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , ForwardOp\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,fold,(Sequence,State,ForwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, fold)\n\n}}\n\n#endif // BOOST_MPL_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/for_each.hpp",
    "content": "\n#ifndef BOOST_MPL_FOR_EACH_HPP_INCLUDED\n#define BOOST_MPL_FOR_EACH_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: for_each.hpp 55648 2009-08-18 05:16:53Z agurtovoy $\n// $Date: 2009-08-17 22:16:53 -0700 (Mon, 17 Aug 2009) $\n// $Revision: 55648 $\n\n#include <boost/mpl/is_sequence.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/assert.hpp>\n#include <boost/mpl/aux_/unwrap.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n#include <boost/utility/value_init.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< bool done = true >\nstruct for_each_impl\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename TransformFunc\n        , typename F\n        >\n    static void execute(\n          Iterator*\n        , LastIterator*\n        , TransformFunc*\n        , F\n        )\n    {\n    }\n};\n\ntemplate<>\nstruct for_each_impl<false>\n{\n    template<\n          typename Iterator\n        , typename LastIterator\n        , typename TransformFunc\n        , typename F\n        >\n    static void execute(\n          Iterator*\n        , LastIterator*\n        , TransformFunc* \n        , F f\n        )\n    {\n        typedef typename deref<Iterator>::type item;\n        typedef typename apply1<TransformFunc,item>::type arg;\n    \n        // dwa 2002/9/10 -- make sure not to invoke undefined behavior\n        // when we pass arg.\n        value_initialized<arg> x;\n        aux::unwrap(f, 0)(boost::get(x));\n        \n        typedef typename mpl::next<Iterator>::type iter;\n        for_each_impl<boost::is_same<iter,LastIterator>::value>\n            ::execute( static_cast<iter*>(0), static_cast<LastIterator*>(0), static_cast<TransformFunc*>(0), f);\n    }\n};\n\n} // namespace aux\n\n// agurt, 17/mar/02: pointer default parameters are necessary to workaround \n// MSVC 6.5 function template signature's mangling bug\ntemplate<\n      typename Sequence\n    , typename TransformOp\n    , typename F\n    >\ninline\nvoid for_each(F f, Sequence* = 0, TransformOp* = 0)\n{\n    BOOST_MPL_ASSERT(( is_sequence<Sequence> ));\n\n    typedef typename begin<Sequence>::type first;\n    typedef typename end<Sequence>::type last;\n\n    aux::for_each_impl< boost::is_same<first,last>::value >\n        ::execute(static_cast<first*>(0), static_cast<last*>(0), static_cast<TransformOp*>(0), f);\n}\n\ntemplate<\n      typename Sequence\n    , typename F\n    >\ninline\nvoid for_each(F f, Sequence* = 0)\n{\n    for_each<Sequence, identity<> >(f);\n}\n\n}}\n\n#endif // BOOST_MPL_FOR_EACH_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct front_impl;\ntemplate< typename Sequence > struct front;\n\n}}\n\n#endif // BOOST_MPL_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/front_inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: front_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_front.hpp>\n#include <boost/mpl/inserter.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Sequence\n    >\nstruct front_inserter\n    : inserter< Sequence,push_front<> >\n{\n};\n\n}}\n\n#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/greater.hpp",
    "content": "\n#ifndef BOOST_MPL_GREATER_HPP_INCLUDED\n#define BOOST_MPL_GREATER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: greater.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME greater\n#define AUX778076_OP_TOKEN >\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_GREATER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/greater_equal.hpp",
    "content": "\n#ifndef BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: greater_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME greater_equal\n#define AUX778076_OP_TOKEN >=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/has_xxx.hpp",
    "content": "\n#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED\n#define BOOST_MPL_HAS_XXX_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2006\n// Copyright David Abrahams 2002-2003\n// Copyright Daniel Walker 2007\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: has_xxx.hpp 64146 2010-07-19 00:46:31Z djwalker $\n// $Date: 2010-07-18 17:46:31 -0700 (Sun, 18 Jul 2010) $\n// $Revision: 64146 $\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/gcc.hpp>\n#include <boost/mpl/aux_/config/has_xxx.hpp>\n#include <boost/mpl/aux_/config/msvc_typename.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/array/elem.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/control/if.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n\n#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )\n# include <boost/type_traits/is_class.hpp>\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\n#   if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET \n// newsgroup's posting by John Madsen (comp.lang.c++.moderated, \n// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but \n// it works way more reliably than the SFINAE-based implementation\n\n// Modified dwa 8/Oct/02 to handle reference types.\n\n#   include <boost/mpl/if.hpp>\n#   include <boost/mpl/bool.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct has_xxx_tag;\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\ntemplate< typename U > struct msvc_incomplete_array\n{\n    typedef char (&type)[sizeof(U) + 1];\n};\n#endif\n\ntemplate< typename T >\nstruct msvc_is_incomplete\n{\n    // MSVC is capable of some kinds of SFINAE.  If U is an incomplete\n    // type, it won't pick the second overload\n    static char tester(...);\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n    template< typename U >\n    static typename msvc_incomplete_array<U>::type tester(type_wrapper<U>);\n#else\n    template< typename U >\n    static char (& tester(type_wrapper<U>) )[sizeof(U)+1];\n#endif \n    \n    BOOST_STATIC_CONSTANT(bool, value = \n          sizeof(tester(type_wrapper<T>())) == 1\n        );\n};\n\ntemplate<>\nstruct msvc_is_incomplete<int>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n}}}\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \\\ntemplate< typename T, typename name = ::boost::mpl::aux::has_xxx_tag > \\\nstruct BOOST_PP_CAT(trait,_impl) : T \\\n{ \\\n    static boost::mpl::aux::no_tag \\\n    test(void(*)(::boost::mpl::aux::has_xxx_tag)); \\\n    \\\n    static boost::mpl::aux::yes_tag test(...); \\\n    \\\n    BOOST_STATIC_CONSTANT(bool, value = \\\n          sizeof(test(static_cast<void(*)(name)>(0))) \\\n            != sizeof(boost::mpl::aux::no_tag) \\\n        ); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n    : boost::mpl::if_c< \\\n          boost::mpl::aux::msvc_is_incomplete<T>::value \\\n        , boost::mpl::bool_<false> \\\n        , BOOST_PP_CAT(trait,_impl)<T> \\\n        >::type \\\n{ \\\n}; \\\n\\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \\\nBOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \\\n/**/\n\n#   define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \\\ntemplate<> struct trait<T> \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = false); \\\n    typedef boost::mpl::bool_<false> type; \\\n}; \\\n/**/\n\n#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \\\n    BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \\\n/**/\n#else\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \\\n/**/\n#endif\n\n\n// SFINAE-based implementations below are derived from a USENET newsgroup's \n// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)\n\n#   elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \\\n      || BOOST_WORKAROUND(__IBMCPP__, <= 700)\n\n// MSVC 7.1+ & VACPP\n\n// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE\n// applied to partial specialization to fix some apparently random failures \n// (thanks to Daniel Wallin for researching this!)\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T > \\\nstruct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \\\n{ \\\n    typedef void type; \\\n};\\\n\\\ntemplate< typename T, typename U = void > \\\nstruct BOOST_PP_CAT(trait,_impl_) \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = false); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T > \\\nstruct BOOST_PP_CAT(trait,_impl_)< \\\n      T \\\n    , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \\\n    > \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = true); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n\\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n    : BOOST_PP_CAT(trait,_impl_)<T> \\\n{ \\\n}; \\\n/**/\n\n#   elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \\\ntemplate< typename T, bool IS_CLASS > \\\nstruct trait_tester \\\n{ \\\n    BOOST_STATIC_CONSTANT( bool,  value = false ); \\\n}; \\\ntemplate< typename T > \\\nstruct trait_tester< T, true > \\\n{ \\\n    struct trait_tester_impl \\\n    { \\\n        template < class U > \\\n        static int  resolve( boost::mpl::aux::type_wrapper<U> const volatile * \\\n                           , boost::mpl::aux::type_wrapper<typename U::name >* = 0 ); \\\n        static char resolve( ... ); \\\n    }; \\\n    typedef boost::mpl::aux::type_wrapper<T> t_; \\\n    BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \\\n}; \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait           \\\n{                      \\\n    BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, boost::is_class< T >::value >::value) );     \\\n    typedef boost::mpl::bool_< trait< T, fallback_ >::value > type; \\\n};\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \\\n                                         , BOOST_PP_CAT(trait,_tester)      \\\n                                         , name       \\\n                                         , default_ ) \\\n/**/\n\n#   else // other SFINAE-capable compilers\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n{ \\\n    struct gcc_3_2_wknd \\\n    { \\\n        template< typename U > \\\n        static boost::mpl::aux::yes_tag test( \\\n              boost::mpl::aux::type_wrapper<U> const volatile* \\\n            , boost::mpl::aux::type_wrapper<BOOST_MSVC_TYPENAME U::name>* = 0 \\\n            ); \\\n    \\\n        static boost::mpl::aux::no_tag test(...); \\\n    }; \\\n    \\\n    typedef boost::mpl::aux::type_wrapper<T> t_; \\\n    BOOST_STATIC_CONSTANT(bool, value = \\\n          sizeof(gcc_3_2_wknd::test(static_cast<t_*>(0))) \\\n            == sizeof(boost::mpl::aux::yes_tag) \\\n        ); \\\n    typedef boost::mpl::bool_<value> type; \\\n}; \\\n/**/\n\n#   endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\n\n#else // BOOST_MPL_CFG_NO_HAS_XXX\n\n// placeholder implementation\n\n#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \\\ntemplate< typename T, typename fallback_ = boost::mpl::bool_<default_> > \\\nstruct trait \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \\\n    typedef fallback_ type; \\\n}; \\\n/**/\n\n#endif\n\n#define BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \\\n    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(has_,name), name, false) \\\n/**/\n\n\n#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)\n\n// Create a boolean Metafunction to detect a nested template\n// member. This implementation is based on a USENET newsgroup's\n// posting by Aleksey Gurtovoy (comp.lang.c++.moderated, 2002-03-19),\n// Rani Sharoni's USENET posting cited above, the non-template has_xxx\n// implementations above, and discussion on the Boost mailing list.\n\n#   if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES)\n#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#       define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1\n#     endif\n#   endif\n\n#   if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION)\n#     if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS))\n#       define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1\n#     endif\n#   endif\n\n#   if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE)\n#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#       define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1\n#     endif\n#   endif\n\n// NOTE: Many internal implementation macros take a Boost.Preprocessor\n// array argument called args which is of the following form.\n//           ( 4, ( trait, name, max_arity, default_ ) )\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \\\n      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _introspect) \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n      BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _substitute), n) \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) \\\n      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _test) \\\n    /**/\n\n// Thanks to Guillaume Melquiond for pointing out the need for the\n// \"substitute\" template as an argument to the overloaded test\n// functions to get SFINAE to work for member templates with the\n// correct name but different number of arguments.\n#   define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE(z, n, args) \\\n      template< \\\n          template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename V) > class V \\\n       > \\\n      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) { \\\n      }; \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \\\n      BOOST_PP_REPEAT( \\\n          BOOST_PP_ARRAY_ELEM(2, args) \\\n        , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE \\\n        , args \\\n      ) \\\n    /**/\n\n#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION\n#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n        template< typename V > \\\n        static boost::mpl::aux::no_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n        static boost::mpl::aux::no_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \\\n      /**/\n#   endif\n\n#   if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES\n#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT(z, n, args) \\\n        template< typename V > \\\n        static boost::mpl::aux::yes_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n            boost::mpl::aux::type_wrapper< V > const volatile* \\\n          , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) < \\\n                V::template BOOST_PP_ARRAY_ELEM(1, args) \\\n            >* = 0 \\\n        ); \\\n      /**/\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT \\\n          , args \\\n        ) \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n        template< typename V > \\\n        static boost::mpl::aux::yes_tag \\\n        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n            V const volatile* \\\n          , member_macro(args, V, T)* = 0 \\\n        ); \\\n      /**/\n#   endif\n\n#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION\n#     define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof(BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U >(0)) \\\n              == sizeof(boost::mpl::aux::yes_tag) \\\n      /**/\n#   else\n#     if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES\n#       define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof( \\\n              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n                  static_cast< boost::mpl::aux::type_wrapper< U >* >(0) \\\n              ) \\\n          ) == sizeof(boost::mpl::aux::yes_tag) \\\n        /**/\n#     else\n#       define BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          sizeof( \\\n              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \\\n                  static_cast< U* >(0) \\\n              ) \\\n          ) == sizeof(boost::mpl::aux::yes_tag) \\\n        /**/\n#     endif\n#   endif\n\n#   define BOOST_MPL_HAS_MEMBER_INTROSPECT( \\\n               args, substitute_macro, member_macro \\\n           ) \\\n      template< typename U > \\\n      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) { \\\n          BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \\\n          BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \\\n          BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \\\n          BOOST_STATIC_CONSTANT( \\\n              bool, value = BOOST_MPL_HAS_MEMBER_TEST(args) \\\n          ); \\\n          typedef boost::mpl::bool_< value > type; \\\n      }; \\\n    /**/\n\n#   define BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n               args, introspect_macro, substitute_macro, member_macro \\\n           ) \\\n      template< \\\n          typename T \\\n        , typename fallback_ \\\n              = boost::mpl::bool_< BOOST_PP_ARRAY_ELEM(3, args) > \\\n      > \\\n      class BOOST_PP_ARRAY_ELEM(0, args) { \\\n          introspect_macro(args, substitute_macro, member_macro) \\\n      public: \\\n          static const bool value \\\n              = BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< T >::value; \\\n          typedef typename BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< \\\n              T \\\n          >::type type; \\\n      }; \\\n    /**/\n\n// BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE expands to the full\n// implementation of the function-based metafunction. Compile with -E\n// to see the preprocessor output for this macro.\n#   define BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \\\n               args, substitute_macro, member_macro \\\n           ) \\\n      BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n          args \\\n        , BOOST_MPL_HAS_MEMBER_INTROSPECT \\\n        , substitute_macro \\\n        , member_macro \\\n      ) \\\n    /**/\n\n#   if BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE\n\n#     if !defined(BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE)\n#       if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#         define BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE 1\n#       endif\n#     endif\n\n#     if !BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE\n#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                   args, n \\\n               ) \\\n          BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n        /**/\n#     else\n#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                   args, n \\\n               ) \\\n          BOOST_PP_CAT( \\\n              boost_mpl_has_xxx_ \\\n            , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \\\n          ) \\\n        /**/\n#     endif\n\n#     define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME( \\\n                 args \\\n             ) \\\n        BOOST_PP_CAT( \\\n            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                args, 0 \\\n            ) \\\n          , _tag \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n                 z, n, args \\\n             ) \\\n        template< \\\n             template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename U) > class U \\\n        > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                args, n \\\n               ) { \\\n            typedef \\\n                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \\\n                type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro \\\n             ) \\\n        typedef void \\\n            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args); \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE \\\n          , args \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE( \\\n                 args, member_macro \\\n             ) \\\n        template< \\\n            typename U \\\n          , typename V \\\n                = BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \\\n        > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) { \\\n            BOOST_STATIC_CONSTANT(bool, value = false); \\\n            typedef boost::mpl::bool_< value > type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE( \\\n                 z, n, args \\\n             ) \\\n        template< typename U > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< \\\n            U \\\n          , typename \\\n                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \\\n                    args, n \\\n                )< \\\n                    BOOST_MSVC_TYPENAME U::BOOST_PP_ARRAY_ELEM(1, args)< > \\\n                >::type \\\n        > { \\\n            BOOST_STATIC_CONSTANT(bool, value = true); \\\n            typedef boost::mpl::bool_< value > type; \\\n        }; \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE( \\\n                 args, member_macro \\\n             ) \\\n        BOOST_PP_REPEAT( \\\n            BOOST_PP_ARRAY_ELEM(2, args) \\\n          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE \\\n          , args \\\n        ) \\\n      /**/\n\n#     define BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro, member_macro \\\n             ) \\\n        BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE(args, member_macro) \\\n        BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE(args, member_macro) \\\n        template< typename U > \\\n        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \\\n            : BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U > { \\\n        }; \\\n      /**/\n \n// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE expands to the full\n// implementation of the template-based metafunction. Compile with -E\n// to see the preprocessor output for this macro.\n//\n// Note that if BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE is\n// defined BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE needs\n// to be expanded at namespace level before\n// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE can be used.\n#     define BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \\\n                 args, substitute_macro, member_macro \\\n             ) \\\n        BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \\\n            args, substitute_macro \\\n        ) \\\n        BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \\\n            args \\\n          , BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE \\\n          , substitute_macro \\\n          , member_macro \\\n        ) \\\n      /**/\n\n#   endif // BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE\n\n// Note: In the current implementation the parameter and access macros\n// are no longer expanded.\n#   if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)\n#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n        BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \\\n            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \\\n        ) \\\n      /**/\n#   else\n#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n        BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \\\n            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \\\n          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \\\n        ) \\\n      /**/\n#   endif\n\n#else // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n// placeholder implementation\n\n#   define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \\\n      template< typename T \\\n              , typename fallback_ = boost::mpl::bool_< default_ > > \\\n      struct trait { \\\n          BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \\\n          typedef fallback_ type; \\\n      }; \\\n    /**/\n\n#endif // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE\n\n#   define BOOST_MPL_HAS_XXX_TEMPLATE_DEF(name) \\\n      BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF( \\\n          BOOST_PP_CAT(has_, name), name, false \\\n      ) \\\n    /**/\n\n#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/identity.hpp",
    "content": "\n#ifndef BOOST_MPL_IDENTITY_HPP_INCLUDED\n#define BOOST_MPL_IDENTITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: identity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct identity\n{\n    typedef T type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, identity, (T))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct make_identity\n{\n    typedef identity<T> type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, make_identity, (T))\n};\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)\n\n}}\n\n#endif // BOOST_MPL_IDENTITY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/if.hpp",
    "content": "\n#ifndef BOOST_MPL_IF_HPP_INCLUDED\n#define BOOST_MPL_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/static_cast.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      bool C\n    , typename T1\n    , typename T2\n    >\nstruct if_c\n{\n    typedef T1 type;\n};\n\ntemplate<\n      typename T1\n    , typename T2\n    >\nstruct if_c<false,T1,T2>\n{\n    typedef T2 type;\n};\n\n// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars\n// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    , typename BOOST_MPL_AUX_NA_PARAM(T3)\n    >\nstruct if_\n{\n private:\n    // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC \n    typedef if_c<\n#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)\n          BOOST_MPL_AUX_VALUE_WKND(T1)::value\n#else\n          BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)\n#endif\n        , T2\n        , T3\n        > almost_type_;\n \n public:\n    typedef typename almost_type_::type type;\n    \n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))\n};\n\n#else\n\n// no partial class template specialization\n\nnamespace aux {\n\ntemplate< bool C >\nstruct if_impl\n{\n    template< typename T1, typename T2 > struct result_\n    {\n        typedef T1 type;\n    };\n};\n\ntemplate<>\nstruct if_impl<false>\n{\n    template< typename T1, typename T2 > struct result_\n    { \n        typedef T2 type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      bool C_\n    , typename T1\n    , typename T2\n    >\nstruct if_c\n{\n    typedef typename aux::if_impl< C_ >\n        ::template result_<T1,T2>::type type;\n};\n\n// (almost) copy & paste in order to save one more \n// recursively nested template instantiation to user\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(C_)\n    , typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct if_\n{\n    enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };\n\n    typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >\n        ::template result_<T1,T2>::type type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_MPL_AUX_NA_SPEC(3, if_)\n\n}}\n\n#endif // BOOST_MPL_IF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/inserter.hpp",
    "content": "\n#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED\n#define BOOST_MPL_INSERTER_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Sequence\n    , typename Operation\n    >\nstruct inserter\n{\n    typedef Sequence    state;\n    typedef Operation   operation;\n};\n\n}}\n\n#endif // BOOST_MPL_INSERTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/int.hpp",
    "content": "\n#ifndef BOOST_MPL_INT_HPP_INCLUDED\n#define BOOST_MPL_INT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/int_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE int\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_INT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/int_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED\n#define BOOST_MPL_INT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: int_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(int_)\n\n#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/integral_c.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: integral_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/integral_c_fwd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#if BOOST_WORKAROUND(__HP_aCC, <= 53800)\n// the type of non-type template arguments may not depend on template arguments\n#   define AUX_WRAPPER_PARAMS(N) typename T, long N\n#else\n#   define AUX_WRAPPER_PARAMS(N) typename T, T N\n#endif\n\n#define AUX_WRAPPER_NAME integral_c\n#define AUX_WRAPPER_VALUE_TYPE T\n#define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n && !BOOST_WORKAROUND(__BORLANDC__, <= 0x551)\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n// 'bool' constant doesn't have 'next'/'prior' members\ntemplate< bool C >\nstruct integral_c<bool, C>\n{\n    BOOST_STATIC_CONSTANT(bool, value = C);\n    typedef integral_c_tag tag;\n    typedef integral_c type;\n    typedef bool value_type;\n    operator bool() const { return this->value; }\n};\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n#endif\n\n#endif // BOOST_MPL_INTEGRAL_C_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/integral_c_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: integral_c_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n#if BOOST_WORKAROUND(__HP_aCC, <= 53800)\n// the type of non-type template arguments may not depend on template arguments\ntemplate< typename T, long N > struct integral_c;\n#else\ntemplate< typename T, T N > struct integral_c;\n#endif\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c)\n\n#endif // BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/integral_c_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n#define BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: integral_c_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\nstruct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); };\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag)\n\n#endif // BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/is_sequence.hpp",
    "content": "\n#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: is_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n#   include <boost/mpl/aux_/msvc_is_class.hpp>\n#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n#   include <boost/type_traits/is_class.hpp>\n#endif\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n\nnamespace aux {\n\n// agurt, 11/jun/03: \n// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a\n// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'\n// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds\n// the issue for most real-world cases\ntemplate< typename T > struct is_sequence_impl\n    : and_<\n          identity< aux::has_tag<T> >\n        , identity< aux::has_begin<T> >\n        >\n{\n};\n\n} // namespace aux\n        \ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : if_<\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n          aux::msvc_is_class<T> \n#else\n          boost::is_class<T> \n#endif\n        , aux::is_sequence_impl<T>\n        , bool_<false>\n        >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))\n};\n\n#elif defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : bool_<false>\n{\n};\n\n#else\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct is_sequence\n    : not_< is_same< typename begin<T>::type, void_ > >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))\n};\n\n#endif // BOOST_MSVC\n\n#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)\ntemplate<> struct is_sequence<int>\n    : bool_<false>\n{\n};\n#endif\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)\n\n}}\n\n#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/iter_fold.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/aux_/iter_fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    >\nstruct iter_fold\n{\n    typedef typename aux::iter_fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , typename lambda<ForwardOp>::type\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,iter_fold,(Sequence,State,ForwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, iter_fold)\n\n}}\n\n#endif // BOOST_MPL_ITER_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/iter_fold_if.hpp",
    "content": "\n#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n// Copyright Eric Friedman 2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iter_fold_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/logical.hpp>\n#include <boost/mpl/always.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/pair.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/iter_fold_if_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Predicate, typename LastIterator >\nstruct iter_fold_if_pred\n{\n    template< typename State, typename Iterator > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : and_<\n              not_< is_same<Iterator,LastIterator> >\n            , apply1<Predicate,Iterator>\n            >\n    {\n#else\n    {\n        typedef and_<\n              not_< is_same<Iterator,LastIterator> >\n            , apply1<Predicate,Iterator>\n            > type;\n#endif\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)\n    , typename BOOST_MPL_AUX_NA_PARAM(ForwardPredicate)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardPredicate)\n    >\nstruct iter_fold_if\n{\n\n    typedef typename begin<Sequence>::type first_;\n    typedef typename end<Sequence>::type last_;\n\n    typedef typename eval_if<\n          is_na<BackwardPredicate>\n        , if_< is_na<BackwardOp>, always<false_>, always<true_> >\n        , identity<BackwardPredicate>\n        >::type backward_pred_;\n\n// cwpro8 doesn't like 'cut-off' type here (use typedef instead)\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    struct result_ :\n#else\n    typedef\n#endif\n        aux::iter_fold_if_impl<\n          first_\n        , State\n        , ForwardOp\n        , protect< aux::iter_fold_if_pred< ForwardPredicate,last_ > >\n        , BackwardOp\n        , backward_pred_\n        >\n#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    { };\n#else\n    result_;\n#endif\n\npublic:\n\n    typedef pair<\n          typename result_::state\n        , typename result_::iterator\n        > type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          6\n        , iter_fold_if\n        , (Sequence,State,ForwardOp,ForwardPredicate,BackwardOp,BackwardPredicate)\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(6, iter_fold_if)\n\n}}\n\n#endif // BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/iterator_range.hpp",
    "content": "\n#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iterator_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct iterator_range_tag;\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(First)\n    , typename BOOST_MPL_AUX_NA_PARAM(Last)\n    >\nstruct iterator_range\n{\n    typedef iterator_range_tag tag;\n    typedef iterator_range type;\n    typedef First begin;\n    typedef Last end;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,iterator_range,(First,Last))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, iterator_range)\n\n}}\n\n#endif // BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/iterator_tags.hpp",
    "content": "\n#ifndef BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n#define BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iterator_tags.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/int.hpp>\n\nnamespace boost { namespace mpl {\n\nstruct forward_iterator_tag       : int_<0> { typedef forward_iterator_tag type; };\nstruct bidirectional_iterator_tag : int_<1> { typedef bidirectional_iterator_tag type; };\nstruct random_access_iterator_tag : int_<2> { typedef random_access_iterator_tag type; };\n\n}}\n\n#endif // BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/lambda.hpp",
    "content": "\n#ifndef BOOST_MPL_LAMBDA_HPP_INCLUDED\n#define BOOST_MPL_LAMBDA_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/lambda_fwd.hpp>\n#include <boost/mpl/bind.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n#   include <boost/mpl/aux_/full_lambda.hpp>\n#else\n#   include <boost/mpl/aux_/lambda_no_ctps.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS\n#endif\n\n#endif // BOOST_MPL_LAMBDA_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/lambda_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: lambda_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/void_fwd.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\n\n#   include <boost/mpl/int.hpp>\n#   include <boost/mpl/aux_/lambda_arity_param.hpp>\n#   include <boost/mpl/aux_/template_arity_fwd.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename T = na\n    , typename Tag = void_\n    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(\n          typename Arity = int_< aux::template_arity<T>::value >\n        )\n    >\nstruct lambda;\n\n}}\n\n#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT\n\n#   include <boost/mpl/bool.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< \n      typename T = na\n    , typename Tag = void_\n    , typename Protect = true_\n    > \nstruct lambda;\n\n}}\n\n#endif\n\n#endif // BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/less.hpp",
    "content": "\n#ifndef BOOST_MPL_LESS_HPP_INCLUDED\n#define BOOST_MPL_LESS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: less.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME less\n#define AUX778076_OP_TOKEN <\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_LESS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/less_equal.hpp",
    "content": "\n#ifndef BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n#define BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: less_equal.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME less_equal\n#define AUX778076_OP_TOKEN <=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_LESS_EQUAL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/limits/arity.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: arity.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)\n#   define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5\n#endif\n\n#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/limits/list.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)\n#   define BOOST_MPL_LIMIT_LIST_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/limits/vector.hpp",
    "content": "\n#ifndef BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n#define BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE)\n#   define BOOST_MPL_LIMIT_VECTOR_SIZE 20\n#endif\n\n#endif // BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct O1_size_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : List::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end_fwd.hpp>\n#include <boost/mpl/list/aux_/iterator.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef l_iter<typename List::type> type;\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::list_tag >\n{\n    template< typename > struct apply\n    {\n        typedef l_iter<l_end> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct clear_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef l_end type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct empty_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : not_<typename List::size>\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct front_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef typename List::item type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/include_preprocessed.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2001-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!\n\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#   define AUX778076_HEADER \\\n    aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Size\n    , typename T\n    , typename Next\n    >\nstruct l_item\n{\n// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation \n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    typedef int begin;\n#endif\n    typedef aux::list_tag tag;\n    typedef l_item type;\n\n    typedef Size size;\n    typedef T item;\n    typedef Next next;\n};\n\nstruct l_end\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    typedef int begin;\n#endif\n    typedef aux::list_tag tag;\n    typedef l_end type;\n    typedef long_<0> size;\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/deref.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename Node >\nstruct l_iter\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n};\n\ntemplate< typename Node >\nstruct deref< l_iter<Node> >\n{\n    typedef typename Node::item type;\n};\n\ntemplate< typename Node >\nstruct next< l_iter<Node> >\n{\n    typedef l_iter< typename Node::next > type;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< typename Node >\nstruct l_iter\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n    typedef typename Node::item type;\n    typedef l_iter< typename mpl::next<Node>::type > next;\n};\n\n#endif\n\n\ntemplate<> struct l_iter<l_end>\n{\n    typedef aux::l_iter_tag tag;\n    typedef forward_iterator_tag category;\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    typedef na type;\n    typedef l_iter next;\n#endif\n};\n\nBOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter)\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/pop_front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_front_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n    {\n        typedef typename mpl::next<List>::type type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0\n    >\nstruct list1\n    : l_item<\n          long_<1>\n        , T0\n        , l_end\n        >\n{\n    typedef list1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct list2\n    : l_item<\n          long_<2>\n        , T0\n        , list1<T1>\n        >\n{\n    typedef list2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct list3\n    : l_item<\n          long_<3>\n        , T0\n        , list2< T1,T2 >\n        >\n{\n    typedef list3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct list4\n    : l_item<\n          long_<4>\n        , T0\n        , list3< T1,T2,T3 >\n        >\n{\n    typedef list4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct list5\n    : l_item<\n          long_<5>\n        , T0\n        , list4< T1,T2,T3,T4 >\n        >\n{\n    typedef list5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct list6\n    : l_item<\n          long_<6>\n        , T0\n        , list5< T1,T2,T3,T4,T5 >\n        >\n{\n    typedef list6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct list7\n    : l_item<\n          long_<7>\n        , T0\n        , list6< T1,T2,T3,T4,T5,T6 >\n        >\n{\n    typedef list7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct list8\n    : l_item<\n          long_<8>\n        , T0\n        , list7< T1,T2,T3,T4,T5,T6,T7 >\n        >\n{\n    typedef list8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct list9\n    : l_item<\n          long_<9>\n        , T0\n        , list8< T1,T2,T3,T4,T5,T6,T7,T8 >\n        >\n{\n    typedef list9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct list10\n    : l_item<\n          long_<10>\n        , T0\n        , list9< T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n        >\n{\n    typedef list10 type;\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/list/list20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct list11\n    : l_item<\n          long_<11>\n        , T0\n        , list10< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n        >\n{\n    typedef list11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct list12\n    : l_item<\n          long_<12>\n        , T0\n        , list11< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n        >\n{\n    typedef list12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct list13\n    : l_item<\n          long_<13>\n        , T0\n        , list12< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n        >\n{\n    typedef list13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct list14\n    : l_item<\n          long_<14>\n        , T0\n        , list13< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n        >\n{\n    typedef list14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct list15\n    : l_item<\n          long_<15>\n        , T0\n        , list14< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >\n        >\n{\n    typedef list15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct list16\n    : l_item<\n          long_<16>\n        , T0\n        , list15< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >\n        >\n{\n    typedef list16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct list17\n    : l_item<\n          long_<17>\n        , T0\n        , list16< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >\n        >\n{\n    typedef list17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct list18\n    : l_item<\n          long_<18>\n        , T0\n        , list17< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >\n        >\n{\n    typedef list18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct list19\n    : l_item<\n          long_<19>\n        , T0\n        , list18< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >\n        >\n{\n    typedef list19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct list20\n    : l_item<\n          long_<20>\n        , T0\n        , list19< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >\n        >\n{\n    typedef list20 type;\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct has_push_back_impl;\n\ntemplate<>\nstruct has_push_back_impl< aux::list_tag >\n{\n    template< typename Seq > struct apply\n        : false_\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_front_impl< aux::list_tag >\n{\n    template< typename List, typename T > struct apply\n    {\n        typedef l_item<\n              typename next<typename List::size>::type\n            , T\n            , typename List::type\n            > type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/size.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/list/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct size_impl< aux::list_tag >\n{\n    template< typename List > struct apply\n        : List::size\n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct list_tag;\nstruct l_iter_tag;\n\n}}}\n\n#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/list0.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: list0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/list/aux_/push_front.hpp>\n#include <boost/mpl/list/aux_/pop_front.hpp>\n#include <boost/mpl/list/aux_/push_back.hpp>\n#include <boost/mpl/list/aux_/front.hpp>\n#include <boost/mpl/list/aux_/clear.hpp>\n#include <boost/mpl/list/aux_/O1_size.hpp>\n#include <boost/mpl/list/aux_/size.hpp>\n#include <boost/mpl/list/aux_/empty.hpp>\n#include <boost/mpl/list/aux_/begin_end.hpp>\n#include <boost/mpl/list/aux_/item.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Dummy = na > struct list0;\n\ntemplate<> struct list0<na>\n    : l_end\n{\n    typedef l_end type;\n};\n\n}}\n\n#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/list10.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: list10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list10.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, 10, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list/list20.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: list20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/list/list10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list20.hpp\n#   include <boost/mpl/list/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/list/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/list.hpp",
    "content": "\n#ifndef BOOST_MPL_LIST_HPP_INCLUDED\n#define BOOST_MPL_LIST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/list.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_LIST_HEADER \\\n    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_LIST_HEADER \\\n    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER)\n#   undef AUX778076_LIST_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER list.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/list.hpp>\n\n#   define AUX778076_SEQUENCE_NAME list\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_LIST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/logical.hpp",
    "content": "\n#ifndef BOOST_MPL_LOGICAL_HPP_INCLUDED\n#define BOOST_MPL_LOGICAL_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: logical.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/or.hpp>\n#include <boost/mpl/and.hpp>\n#include <boost/mpl/not.hpp>\n\n#endif // BOOST_MPL_LOGICAL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/long.hpp",
    "content": "\n#ifndef BOOST_MPL_LONG_HPP_INCLUDED\n#define BOOST_MPL_LONG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: long.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/long_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE long\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_LONG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/long_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_LONG_FWD_HPP_INCLUDED\n#define BOOST_MPL_LONG_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: long_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct long_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(long_)\n\n#endif // BOOST_MPL_LONG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/minus.hpp",
    "content": "\n#ifndef BOOST_MPL_MINUS_HPP_INCLUDED\n#define BOOST_MPL_MINUS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: minus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME minus\n#define AUX778076_OP_TOKEN -\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_MINUS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/multiplies.hpp",
    "content": "\n#ifndef BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n#define BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: multiplies.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/times.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/preprocessor/default_params.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\n// backward compatibility header, deprecated\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY\n#else\n#   define AUX778076_OP_ARITY 2\n#endif\n\ntemplate<\n      BOOST_MPL_PP_DEFAULT_PARAMS(AUX778076_OP_ARITY, typename N, na)\n    >\nstruct multiplies\n    : times< BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(\n          AUX778076_OP_ARITY\n        , multiplies\n        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )\n        )\n};\n\nBOOST_MPL_AUX_NA_SPEC(AUX778076_OP_ARITY, multiplies)\n\n#undef AUX778076_OP_ARITY\n\n}}\n\n#endif // BOOST_MPL_MULTIPLIES_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/negate.hpp",
    "content": "\n#ifndef BOOST_MPL_NEGATE_HPP_INCLUDED\n#define BOOST_MPL_NEGATE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: negate.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/integral_c.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/config/integral.hpp>\n#include <boost/mpl/aux_/config/static_constant.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct negate_impl;\n\ntemplate< typename T > struct negate_tag\n{\n    typedef typename T::tag type;\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(N)\n    >\nstruct negate\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : negate_impl<\n          typename negate_tag<N>::type\n        >::template apply<N>::type\n#else\n    : aux::msvc_eti_base< typename apply_wrap1<\n          negate_impl< typename negate_tag<N>::type >\n        , N\n        >::type >::type\n#endif\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, negate, (N))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, negate)\n\n\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\nnamespace aux {\ntemplate< typename T, T n > struct negate_wknd\n{\n    BOOST_STATIC_CONSTANT(T, value = -n);\n    typedef integral_c<T,value> type;\n};\n}\n#endif\n\ntemplate<>\nstruct negate_impl<integral_c_tag>\n{\n#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\n    template< typename N > struct apply\n        : aux::negate_wknd< typename N::value_type, N::value >\n#else\n    template< typename N > struct apply\n        : integral_c< typename N::value_type, (-N::value) >\n#endif    \n    {\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_NEGATE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/next.hpp",
    "content": "\n#ifndef BOOST_MPL_NEXT_HPP_INCLUDED\n#define BOOST_MPL_NEXT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: next.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/next_prior.hpp>\n\n#endif // BOOST_MPL_NEXT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/next_prior.hpp",
    "content": "\n#ifndef BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n#define BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: next_prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/common_name_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nBOOST_MPL_AUX_COMMON_NAME_WKND(next)\nBOOST_MPL_AUX_COMMON_NAME_WKND(prior)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct next\n{\n    typedef typename T::next type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,next,(T))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct prior\n{\n    typedef typename T::prior type;\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,prior,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, next)\nBOOST_MPL_AUX_NA_SPEC(1, prior)\n\n}}\n\n#endif // BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/not.hpp",
    "content": "\n#ifndef BOOST_MPL_NOT_HPP_INCLUDED\n#define BOOST_MPL_NOT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: not.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/nested_type_wknd.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here\nstruct not_impl\n    : bool_<!C_>\n{\n};\n\n} // namespace aux\n\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct not_\n    : aux::not_impl<\n          BOOST_MPL_AUX_NESTED_TYPE_WKND(T)::value\n        >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,not_,(T))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1,not_)\n\n}}\n\n#endif // BOOST_MPL_NOT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/not_equal_to.hpp",
    "content": "\n#ifndef BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n#define BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: not_equal_to.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME not_equal_to\n#define AUX778076_OP_TOKEN !=\n#include <boost/mpl/aux_/comparison_op.hpp>\n\n#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/numeric_cast.hpp",
    "content": "\n#ifndef BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n#define BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: numeric_cast.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n// agurt 21/sep/04: portability macro for the sake of MSVC 6.x-7.0;\n// resolves conflicts with 'boost::numeric_cast' function template.\n// use it in your own code _only_ if you care about compatibility with\n// these outdated compilers!\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )\n#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast_\n#else\n#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast\n#endif\n\nnamespace boost { namespace mpl {\n\n// no default implementation; the definition is needed to make MSVC happy\n\ntemplate< typename SourceTag, typename TargetTag > struct BOOST_MPL_AUX_NUMERIC_CAST\n{\n    template< typename N > struct apply;\n};\n\n}}\n\n#endif // BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/or.hpp",
    "content": "\n#ifndef BOOST_MPL_OR_HPP_INCLUDED\n#define BOOST_MPL_OR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: or.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   include <boost/mpl/bool.hpp>\n#   include <boost/mpl/aux_/nested_type_wknd.hpp>\n#   include <boost/mpl/aux_/na_spec.hpp>\n#   include <boost/mpl/aux_/lambda_support.hpp>\n#   include <boost/mpl/aux_/config/msvc.hpp>\n\n// agurt, 19/may/04: workaround a conflict with <iso646.h> header's \n// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'\n// has to be checked in a separate condition, otherwise GCC complains \n// about 'or' being an alternative token\n#if defined(_MSC_VER)\n#ifndef __GCCXML__\n#if defined(or)\n#   pragma push_macro(\"or\")\n#   undef or\n#   define or(x)\n#endif\n#endif\n#endif\n\n#   define BOOST_MPL_PREPROCESSED_HEADER or.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#if defined(_MSC_VER) \n#ifndef __GCCXML__\n#if defined(or)\n#   pragma pop_macro(\"or\")\n#endif\n#endif\n#endif\n\n#else\n\n#   define AUX778076_OP_NAME or_\n#   define AUX778076_OP_VALUE1 true\n#   define AUX778076_OP_VALUE2 false\n#   include <boost/mpl/aux_/logical_op.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_OR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/pair.hpp",
    "content": "\n#ifndef BOOST_MPL_PAIR_HPP_INCLUDED\n#define BOOST_MPL_PAIR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pair.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T1)\n    , typename BOOST_MPL_AUX_NA_PARAM(T2)\n    >\nstruct pair\n{\n    typedef pair type;\n    typedef T1 first;\n    typedef T2 second;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,pair,(T1,T2))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(P)\n    >\nstruct first\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename P::first type;\n#else\n    typedef typename aux::msvc_eti_base<P>::first type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,first,(P))\n};\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(P)\n    >\nstruct second\n{\n#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)\n    typedef typename P::second type;\n#else\n    typedef typename aux::msvc_eti_base<P>::second type;\n#endif\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,second,(P))\n};\n\n\nBOOST_MPL_AUX_NA_SPEC_NO_ETI(2, pair)\nBOOST_MPL_AUX_NA_SPEC(1, first)\nBOOST_MPL_AUX_NA_SPEC(1, second)\n\n}}\n\n#endif // BOOST_MPL_PAIR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/placeholders.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n#define BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright Peter Dimov 2001-2003\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: placeholders.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/arg.hpp>\n#   include <boost/mpl/aux_/adl_barrier.hpp>\n\n#   if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)\n#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) \\\n        using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \\\n        /**/\n#   else\n#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) /**/\n#   endif\n\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER placeholders.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/nttp_decl.hpp>\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n// watch out for GNU gettext users, who #define _(x)\n#if !defined(_) || defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\ntypedef arg<-1> _;\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl { \n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;\n}\n\n}}\n#endif\n\n/// agurt, 17/mar/02: one more placeholder for the last 'apply#' \n/// specialization\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY + 1, <boost/mpl/placeholders.hpp>))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntypedef arg<i_> BOOST_PP_CAT(_,i_);\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl { \n\nBOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(BOOST_PP_CAT(_,i_))\n\nnamespace placeholders {\nusing BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::BOOST_PP_CAT(_,i_);\n}\n\n}}\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/plus.hpp",
    "content": "\n#ifndef BOOST_MPL_PLUS_HPP_INCLUDED\n#define BOOST_MPL_PLUS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: plus.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME plus\n#define AUX778076_OP_TOKEN +\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_PLUS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/pop_back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pop_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct pop_back_impl;\ntemplate< typename Sequence > struct pop_back;\n\n}}\n\n#endif // BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/pop_front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pop_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct pop_front_impl;\ntemplate< typename Sequence > struct pop_front;\n\n}}\n\n#endif // BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/prior.hpp",
    "content": "\n#ifndef BOOST_MPL_PRIOR_HPP_INCLUDED\n#define BOOST_MPL_PRIOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: prior.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/next_prior.hpp>\n\n#endif // BOOST_MPL_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/protect.hpp",
    "content": "\n#ifndef BOOST_MPL_PROTECT_HPP_INCLUDED\n#define BOOST_MPL_PROTECT_HPP_INCLUDED\n\n// Copyright Peter Dimov 2001\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: protect.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/arity.hpp>\n#include <boost/mpl/aux_/config/dtp.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(T)\n    , int not_le_ = 0\n    >\nstruct protect : T\n{\n#if BOOST_WORKAROUND(__EDG_VERSION__, == 238)\n    typedef mpl::protect type;\n#else\n    typedef protect type;\n#endif\n};\n\n#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)\nnamespace aux { \ntemplate< BOOST_MPL_AUX_NTTP_DECL(int, N), typename T >\nstruct arity< protect<T>, N > \n    : arity<T,N>\n{ \n};\n} // namespace aux\n#endif\n\nBOOST_MPL_AUX_NA_SPEC_MAIN(1, protect)\n#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)\nBOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(1, 1, protect)\n#endif\n\n}}\n\n#endif // BOOST_MPL_PROTECT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/aux_/push_back_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct push_back\n    : push_back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_back,(Sequence,T))\n};\n\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct has_push_back\n    : has_push_back_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_back,(Sequence))\n};\n\n\nBOOST_MPL_AUX_NA_SPEC(2, push_back)\nBOOST_MPL_AUX_NA_SPEC(1, has_push_back)\n\n}}\n\n#endif // BOOST_MPL_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/push_back_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n#define BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_back_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct push_back_impl;\ntemplate< typename Sequence, typename T > struct push_back;\n\n}}\n\n#endif // BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/aux_/push_front_impl.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(T)\n    >\nstruct push_front\n    : push_front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence,T >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_front,(Sequence,T))\n};\n\n\ntemplate< \n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct has_push_front\n    : has_push_front_impl< typename sequence_tag<Sequence>::type >\n        ::template apply< Sequence >\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_front,(Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(2, push_front)\nBOOST_MPL_AUX_NA_SPEC(1, has_push_front)\n\n}}\n\n#endif // BOOST_MPL_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/push_front_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n#define BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_front_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct push_front_impl;\ntemplate< typename Sequence, typename T > struct push_front;\n\n}}\n\n#endif // BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/quote.hpp",
    "content": "\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED\n#define BOOST_MPL_QUOTE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: quote.hpp 49272 2008-10-11 06:50:46Z agurtovoy $\n// $Date: 2008-10-10 23:50:46 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49272 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/void.hpp>\n#   include <boost/mpl/aux_/has_type.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/bcc.hpp>\n#include <boost/mpl/aux_/config/ttp.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \\\n    && !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)\n#   define BOOST_MPL_CFG_NO_QUOTE_TEMPLATE\n#endif\n\n#if !defined(BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS) \\\n    && defined(BOOST_MPL_CFG_NO_HAS_XXX)\n#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER quote.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/arity.hpp>\n#   include <boost/mpl/aux_/preprocessor/params.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/mpl/aux_/config/workaround.hpp>\n\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/cat.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_QUOTE_TEMPLATE)\n\nnamespace boost { namespace mpl {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< typename T, bool has_type_ >\nstruct quote_impl\n// GCC has a problem with metafunction forwarding when T is a\n// specialization of a template called 'type'.\n# if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \\\n    && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(0)) \\\n    && BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, BOOST_TESTED_AT(2))\n{\n    typedef typename T::type type;\n};\n# else \n    : T\n{\n};\n# endif \n\ntemplate< typename T >\nstruct quote_impl<T,false>\n{\n    typedef T type;\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate< bool > struct quote_impl\n{\n    template< typename T > struct result_\n        : T\n    {\n    };\n};\n\ntemplate<> struct quote_impl<false>\n{\n    template< typename T > struct result_\n    {\n        typedef T type;\n    };\n};\n\n#endif \n\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/quote.hpp>))\n#include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_QUOTE_TEMPLATE\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_QUOTE_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define i_ BOOST_PP_FRAME_ITERATION(1)\n\ntemplate<\n      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F\n    , typename Tag = void_\n    >\nstruct BOOST_PP_CAT(quote,i_)\n{\n    template< BOOST_MPL_PP_PARAMS(i_, typename U) > struct apply\n#if defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)\n    {\n        typedef typename quote_impl<\n              F< BOOST_MPL_PP_PARAMS(i_, U) >\n            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value\n            >::type type;\n    };\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n        : quote_impl<\n              F< BOOST_MPL_PP_PARAMS(i_, U) >\n            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value\n            >\n    {\n    };\n#else\n        : quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value >\n            ::template result_< F< BOOST_MPL_PP_PARAMS(i_, U) > >\n    {\n    };\n#endif\n};\n\n#undef i_\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/remove_if.hpp",
    "content": "\n#ifndef BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n#define BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n// Copyright David Abrahams 2003-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: remove_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/fold.hpp>\n#include <boost/mpl/reverse_fold.hpp>\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/mpl/protect.hpp>\n#include <boost/mpl/lambda.hpp>\n#include <boost/mpl/apply.hpp>\n#include <boost/mpl/aux_/inserter_algorithm.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\n\ntemplate< typename Pred, typename InsertOp > struct remove_if_helper\n{\n    template< typename Sequence, typename U > struct apply\n    {\n        typedef typename eval_if<\n              typename apply1<Pred,U>::type\n            , identity<Sequence>\n            , apply2<InsertOp,Sequence,U>\n            >::type type;\n    };\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct remove_if_impl\n    : fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::remove_if_helper<\n              typename lambda<Predicate>::type\n            , typename Inserter::operation\n            > >\n        >\n{\n};\n\ntemplate<\n      typename Sequence\n    , typename Predicate\n    , typename Inserter\n    >\nstruct reverse_remove_if_impl\n    : reverse_fold<\n          Sequence\n        , typename Inserter::state\n        , protect< aux::remove_if_helper<\n              typename lambda<Predicate>::type\n            , typename Inserter::operation\n            > >\n        >\n{\n};\n\n} // namespace aux\n\nBOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove_if)\n\n}}\n\n#endif // BOOST_MPL_REMOVE_IF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/reverse_fold.hpp",
    "content": "\n#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n// Copyright David Abrahams 2001-2002\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: reverse_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/begin_end.hpp>\n#include <boost/mpl/O1_size.hpp>\n#include <boost/mpl/arg.hpp>\n#include <boost/mpl/aux_/reverse_fold_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    , typename BOOST_MPL_AUX_NA_PARAM(State)\n    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)\n    , typename ForwardOp = arg<1>\n    >\nstruct reverse_fold\n{\n    typedef typename aux::reverse_fold_impl<\n          ::boost::mpl::O1_size<Sequence>::value\n        , typename begin<Sequence>::type\n        , typename end<Sequence>::type\n        , State\n        , BackwardOp\n        , ForwardOp\n        >::state type;\n\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,reverse_fold,(Sequence,State,BackwardOp))\n};\n\nBOOST_MPL_AUX_NA_SPEC(3, reverse_fold)\n\n}}\n\n#endif // BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/same_as.hpp",
    "content": "\n#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED\n#define BOOST_MPL_SAME_AS_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: same_as.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/not.hpp>\n#include <boost/mpl/aux_/lambda_spec.hpp>\n#include <boost/mpl/aux_/config/forwarding.hpp>\n\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T1 >\nstruct same_as\n{\n    template< typename T2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : is_same<T1,T2>\n    {\n#else\n    {\n        typedef typename is_same<T1,T2>::type type;\n#endif\n    };\n};\n\ntemplate< typename T1 >\nstruct not_same_as\n{\n    template< typename T2 > struct apply\n#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)\n        : not_< is_same<T1,T2> >\n    {\n#else\n    {\n        typedef typename not_< is_same<T1,T2> >::type type;\n#endif\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/sequence_tag.hpp",
    "content": "\n#ifndef BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n#define BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: sequence_tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/sequence_tag_fwd.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/has_begin.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n#include <boost/mpl/aux_/yes_no.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\n// agurt, 27/nov/02: have to use a simplistic 'sequence_tag' implementation\n// on MSVC to avoid dreadful \"internal structure overflow\" error\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \\\n    || defined(BOOST_MPL_CFG_NO_HAS_XXX)\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n{\n    typedef typename Sequence::tag type;\n};\n\n#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n\n// agurt, 07/feb/03: workaround for what seems to be MSVC 7.0-specific ETI issue\n\nnamespace aux {\n\ntemplate< bool >\nstruct sequence_tag_impl\n{\n    template< typename Sequence > struct result_\n    {\n        typedef typename Sequence::tag type;\n    };\n};\n\ntemplate<>\nstruct sequence_tag_impl<false>\n{\n    template< typename Sequence > struct result_\n    {\n        typedef int type;\n    };\n};\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n    : aux::sequence_tag_impl< !aux::is_msvc_eti_arg<Sequence>::value >\n        ::template result_<Sequence>\n{\n};\n\n#else\n\nnamespace aux {\n\ntemplate< bool has_tag_, bool has_begin_ >\nstruct sequence_tag_impl\n{\n    // agurt 24/nov/02: MSVC 6.5 gets confused in 'sequence_tag_impl<true>' \n    // specialization below, if we name it 'result_' here\n    template< typename Sequence > struct result2_;\n};\n\n#   define AUX_CLASS_SEQUENCE_TAG_SPEC(has_tag, has_begin, result_type) \\\ntemplate<> struct sequence_tag_impl<has_tag,has_begin> \\\n{ \\\n    template< typename Sequence > struct result2_ \\\n    { \\\n        typedef result_type type; \\\n    }; \\\n}; \\\n/**/\n\nAUX_CLASS_SEQUENCE_TAG_SPEC(true, true, typename Sequence::tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(true, false, typename Sequence::tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(false, true, nested_begin_end_tag)\nAUX_CLASS_SEQUENCE_TAG_SPEC(false, false, non_sequence_tag)\n\n#   undef AUX_CLASS_SEQUENCE_TAG_SPEC\n\n} // namespace aux\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct sequence_tag\n    : aux::sequence_tag_impl<\n          ::boost::mpl::aux::has_tag<Sequence>::value\n        , ::boost::mpl::aux::has_begin<Sequence>::value\n        >::template result2_<Sequence>\n{\n};\n\n#endif // BOOST_MSVC\n\nBOOST_MPL_AUX_NA_SPEC(1, sequence_tag)\n\n}}\n\n#endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/sequence_tag_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n#define BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: sequence_tag_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\nstruct nested_begin_end_tag;\nstruct non_sequence_tag;\n\ntemplate< typename Sequence > struct sequence_tag;\n\n}}\n\n#endif // BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/size.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_HPP_INCLUDED\n#define BOOST_MPL_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/sequence_tag.hpp>\n#include <boost/mpl/aux_/size_impl.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/aux_/msvc_eti_base.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename BOOST_MPL_AUX_NA_PARAM(Sequence)\n    >\nstruct size\n    : aux::msvc_eti_base<\n        typename size_impl< typename sequence_tag<Sequence>::type >\n            ::template apply< Sequence >::type\n      >::type\n{\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, size, (Sequence))\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, size)\n\n}}\n\n#endif // BOOST_MPL_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/size_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n#define BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Tag > struct size_impl;\ntemplate< typename Sequence > struct size;\n\n}}\n\n#endif // BOOST_MPL_SIZE_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/size_t.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_T_HPP_INCLUDED\n#define BOOST_MPL_SIZE_T_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size_t.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/size_t_fwd.hpp>\n\n#define AUX_WRAPPER_VALUE_TYPE std::size_t\n#define AUX_WRAPPER_NAME size_t\n#define AUX_WRAPPER_PARAMS(N) std::size_t N\n\n#include <boost/mpl/aux_/integral_wrapper.hpp>\n\n#endif // BOOST_MPL_SIZE_T_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/size_t_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n#define BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size_t_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'\n#include <cstddef>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\ntemplate< std::size_t N > struct size_t;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(size_t)\n\n#endif // BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_TAG_HPP_INCLUDED\n#define BOOST_MPL_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/eval_if.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/has_tag.hpp>\n#include <boost/mpl/aux_/config/eti.hpp>\n\nnamespace boost { namespace mpl {\n\nnamespace aux {\ntemplate< typename T > struct tag_impl\n{\n    typedef typename T::tag type;\n};\n}\n\ntemplate< typename T, typename Default = void_ > struct tag\n#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)\n    : if_< \n          aux::has_tag<T>\n        , aux::tag_impl<T>\n        , Default\n        >::type\n{\n#else\n{\n    typedef typename eval_if< \n          aux::has_tag<T>\n        , aux::tag_impl<T>\n        , Default\n        >::type type;\n\n#endif\n};\n\n}}\n\n#endif // BOOST_MPL_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/times.hpp",
    "content": "\n#ifndef BOOST_MPL_TIMES_HPP_INCLUDED\n#define BOOST_MPL_TIMES_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: times.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#define AUX778076_OP_NAME times\n#define AUX778076_OP_TOKEN *\n#include <boost/mpl/aux_/arithmetic_op.hpp>\n\n#endif // BOOST_MPL_TIMES_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/O1_size.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/O1_size_fwd.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct O1_size_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : Vector::size\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct O1_size_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n        : mpl::long_<N>\n    {\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/at.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: at.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/at_fwd.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< typename Vector, long n_ >\nstruct v_at_impl\n{\n    typedef long_< (Vector::lower_bound_::value + n_) > index_;\n    typedef __typeof__( Vector::item_(index_()) ) type;\n};\n\n\ntemplate< typename Vector, long n_ >\nstruct v_at\n    : aux::wrapped_type< typename v_at_impl<Vector,n_>::type >\n{\n};\n\ntemplate<>\nstruct at_impl< aux::vector_tag >\n{\n    template< typename Vector, typename N > struct apply\n        : v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >\n    {\n    };\n};\n\n#else\n\n#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n\ntemplate< typename Vector, BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at;\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct at_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector, typename N > struct apply\n#if !defined(__BORLANDC__)\n        : v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >\n    {\n#else\n    {\n        typedef typename v_at<\n              Vector\n            , BOOST_MPL_AUX_VALUE_WKND(N)::value\n            >::type type;\n#endif\n    };\n};\n\n#   else\n\nnamespace aux {\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at_impl\n{\n    template< typename V > struct result_;\n};\n\n// to work around ETI, etc.\ntemplate<> struct v_at_impl<-1>\n{\n    template< typename V > struct result_\n    {\n        typedef void_ type;\n    };\n};\n\n} // namespace aux\n\ntemplate< typename T, BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct v_at\n    : aux::v_at_impl<n_>::template result_<T>\n{\n};\n\n#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/back_fwd.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct back_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : v_at<\n              Vector\n            , prior<typename Vector::size>::type::value\n            >\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long n_ >\nstruct back_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::back type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/begin_end.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/begin_end_fwd.hpp>\n#   include <boost/mpl/vector/aux_/iterator.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct begin_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_iter<Vector,0> type;\n    };\n};\n\ntemplate<>\nstruct end_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_iter<Vector,Vector::size::value> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/clear.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/clear_fwd.hpp>\n#include <boost/mpl/vector/aux_/vector0.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct clear_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct clear_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef vector0<> type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/empty.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/empty_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/type_traits/is_same.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct empty_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : is_same<\n              typename Vector::lower_bound_\n            , typename Vector::upper_bound_\n            >\n    {\n    };\n};\n\n#else\n\ntemplate<>\nstruct empty_impl< aux::vector_tag<0> >\n{\n    template< typename Vector > struct apply\n        : true_\n    {\n    };\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct empty_impl< aux::vector_tag<N> >\n{\n    template< typename Vector > struct apply\n        : false_\n    {\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2008\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/front_fwd.hpp>\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct front_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n        : v_at<Vector,0>\n    {\n    };\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, n_) >\nstruct front_impl< aux::vector_tag<n_> >\n{\n    template< typename Vector > struct apply\n    {\n        typedef typename Vector::item0 type;\n    };\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/include_preprocessed.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2000-2006\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/preprocessor.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/stringize.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n#   define AUX778076_INCLUDE_DIR typeof_based\n#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n   || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)\n#   define AUX778076_INCLUDE_DIR no_ctps\n#else\n#   define AUX778076_INCLUDE_DIR plain\n#endif\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_HEADER \\\n    AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#else\n#   define AUX778076_HEADER \\\n    BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \\\n/**/\n#endif\n\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))\n#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)\n#   include AUX778076_INCLUDE_STRING\n#   undef AUX778076_INCLUDE_STRING\n#else\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)\n#endif\n\n#   undef AUX778076_HEADER\n#   undef AUX778076_INCLUDE_DIR\n\n#undef BOOST_MPL_PREPROCESSED_HEADER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/item.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/next_prior.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate< \n      typename T\n    , typename Base\n    , int at_front = 0\n    >\nstruct v_item\n    : Base\n{\n    typedef typename Base::upper_bound_ index_;\n    typedef typename next<index_>::type upper_bound_;\n    typedef typename next<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_item type;\n\n    // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler\n    // breaks if using declaration comes _before_ the new overload\n    static aux::type_wrapper<T> item_(index_);\n    using Base::item_;\n};\n\ntemplate<\n      typename T\n    , typename Base\n    >\nstruct v_item<T,Base,1>\n    : Base\n{\n    typedef typename prior<typename Base::lower_bound_>::type index_;\n    typedef index_ lower_bound_;\n    typedef typename next<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_item type;\n\n    static aux::type_wrapper<T> item_(index_);\n    using Base::item_;\n};\n\n// \"erasure\" item\ntemplate< \n      typename Base\n    , int at_front\n    >\nstruct v_mask\n    : Base\n{\n    typedef typename prior<typename Base::upper_bound_>::type index_;\n    typedef index_ upper_bound_;\n    typedef typename prior<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_mask type;\n\n    static aux::type_wrapper<void_> item_(index_);\n    using Base::item_;\n};\n\ntemplate< \n      typename Base\n    >\nstruct v_mask<Base,1>\n    : Base\n{\n    typedef typename Base::lower_bound_ index_;\n    typedef typename next<index_>::type lower_bound_;\n    typedef typename prior<typename Base::size>::type size;\n    typedef Base base;\n    typedef v_mask type;\n\n    static aux::type_wrapper<void_> item_(index_);\n    using Base::item_;\n};\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/iterator.hpp",
    "content": "\n#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n#define BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/iterator_tags.hpp>\n#include <boost/mpl/plus.hpp>\n#include <boost/mpl/minus.hpp>\n#include <boost/mpl/advance_fwd.hpp>\n#include <boost/mpl/distance_fwd.hpp>\n#include <boost/mpl/next.hpp>\n#include <boost/mpl/prior.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n#include <boost/mpl/aux_/value_wknd.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct v_iter\n{\n    typedef aux::v_iter_tag tag;\n    typedef random_access_iterator_tag category;\n    typedef typename v_at<Vector,n_>::type type;\n\n    typedef Vector vector_;\n    typedef mpl::long_<n_> pos;\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    enum { \n          next_ = n_ + 1\n        , prior_ = n_ - 1\n        , pos_ = n_\n    };\n    \n    typedef v_iter<Vector,next_> next;\n    typedef v_iter<Vector,prior_> prior;\n#endif\n\n};\n\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct next< v_iter<Vector,n_> >\n{\n    typedef v_iter<Vector,(n_ + 1)> type;\n};\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    >\nstruct prior< v_iter<Vector,n_> >\n{\n    typedef v_iter<Vector,(n_ - 1)> type;\n};\n\ntemplate<\n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    , typename Distance\n    >\nstruct advance< v_iter<Vector,n_>,Distance>\n{\n    typedef v_iter<\n          Vector\n        , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance))\n        > type;\n};\n\ntemplate< \n      typename Vector\n    , BOOST_MPL_AUX_NTTP_DECL(long, n_)\n    , BOOST_MPL_AUX_NTTP_DECL(long, m_)\n    > \nstruct distance< v_iter<Vector,n_>, v_iter<Vector,m_> >\n    : mpl::long_<(m_ - n_)>\n{\n};\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate<> struct advance_impl<aux::v_iter_tag>\n{\n    template< typename Iterator, typename N > struct apply\n    {\n        enum { pos_ = Iterator::pos_, n_ = N::value };\n        typedef v_iter<\n              typename Iterator::vector_\n            , (pos_ + n_)\n            > type;\n    };\n};\n\ntemplate<> struct distance_impl<aux::v_iter_tag>\n{\n    template< typename Iter1, typename Iter2 > struct apply\n    {\n        enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };\n        typedef long_<( pos2_ - pos1_ )> type;\n        BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));\n    };\n};\n\n#endif\n\n}}\n\n#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/pop_back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pop_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/pop_back_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_back_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_mask<Vector,0> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/pop_front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/pop_front_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct pop_front_impl< aux::vector_tag >\n{\n    template< typename Vector > struct apply\n    {\n        typedef v_mask<Vector,1> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector10.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0\n    >\nstruct vector1\n    : v_item<\n          T0\n        , vector0<  >\n        >\n{\n    typedef vector1 type;\n};\n\ntemplate<\n      typename T0, typename T1\n    >\nstruct vector2\n    : v_item<\n          T1\n        , vector1<T0>\n        >\n{\n    typedef vector2 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2\n    >\nstruct vector3\n    : v_item<\n          T2\n        , vector2< T0,T1 >\n        >\n{\n    typedef vector3 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3\n    >\nstruct vector4\n    : v_item<\n          T3\n        , vector3< T0,T1,T2 >\n        >\n{\n    typedef vector4 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    >\nstruct vector5\n    : v_item<\n          T4\n        , vector4< T0,T1,T2,T3 >\n        >\n{\n    typedef vector5 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5\n    >\nstruct vector6\n    : v_item<\n          T5\n        , vector5< T0,T1,T2,T3,T4 >\n        >\n{\n    typedef vector6 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6\n    >\nstruct vector7\n    : v_item<\n          T6\n        , vector6< T0,T1,T2,T3,T4,T5 >\n        >\n{\n    typedef vector7 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7\n    >\nstruct vector8\n    : v_item<\n          T7\n        , vector7< T0,T1,T2,T3,T4,T5,T6 >\n        >\n{\n    typedef vector8 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8\n    >\nstruct vector9\n    : v_item<\n          T8\n        , vector8< T0,T1,T2,T3,T4,T5,T6,T7 >\n        >\n{\n    typedef vector9 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    >\nstruct vector10\n    : v_item<\n          T9\n        , vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >\n        >\n{\n    typedef vector10 type;\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp",
    "content": "\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n// Preprocessed version of \"boost/mpl/vector/vector20.hpp\" header\n// -- DO NOT modify by hand!\n\nnamespace boost { namespace mpl {\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10\n    >\nstruct vector11\n    : v_item<\n          T10\n        , vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >\n        >\n{\n    typedef vector11 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11\n    >\nstruct vector12\n    : v_item<\n          T11\n        , vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >\n        >\n{\n    typedef vector12 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12\n    >\nstruct vector13\n    : v_item<\n          T12\n        , vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >\n        >\n{\n    typedef vector13 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13\n    >\nstruct vector14\n    : v_item<\n          T13\n        , vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >\n        >\n{\n    typedef vector14 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    >\nstruct vector15\n    : v_item<\n          T14\n        , vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >\n        >\n{\n    typedef vector15 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15\n    >\nstruct vector16\n    : v_item<\n          T15\n        , vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >\n        >\n{\n    typedef vector16 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16\n    >\nstruct vector17\n    : v_item<\n          T16\n        , vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >\n        >\n{\n    typedef vector17 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17\n    >\nstruct vector18\n    : v_item<\n          T17\n        , vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >\n        >\n{\n    typedef vector18 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18\n    >\nstruct vector19\n    : v_item<\n          T18\n        , vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >\n        >\n{\n    typedef vector19 type;\n};\n\ntemplate<\n      typename T0, typename T1, typename T2, typename T3, typename T4\n    , typename T5, typename T6, typename T7, typename T8, typename T9\n    , typename T10, typename T11, typename T12, typename T13, typename T14\n    , typename T15, typename T16, typename T17, typename T18, typename T19\n    >\nstruct vector20\n    : v_item<\n          T19\n        , vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >\n        >\n{\n    typedef vector20 type;\n};\n\n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/push_back.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_back_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_back_impl< aux::vector_tag >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef v_item<T,Vector,0> type;\n    };\n};\n\n}}\n\n#endif \n\n#endif // BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/push_front.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/push_front_fwd.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\n#   include <boost/mpl/vector/aux_/item.hpp>\n#   include <boost/mpl/vector/aux_/tag.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate<>\nstruct push_front_impl< aux::vector_tag >\n{\n    template< typename Vector, typename T > struct apply\n    {\n        typedef v_item<T,Vector,1> type;\n    };\n};\n\n}}\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n#endif // BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/size.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/size_fwd.hpp>\n#include <boost/mpl/vector/aux_/O1_size.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/config/ctps.hpp>\n\nnamespace boost { namespace mpl {\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n\ntemplate<>\nstruct size_impl< aux::vector_tag >\n    : O1_size_impl< aux::vector_tag >\n{\n};\n\n#else\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\ntemplate< long N >\nstruct size_impl< aux::vector_tag<N> >\n    : O1_size_impl< aux::vector_tag<N> >\n{\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/tag.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/config/typeof.hpp>\n#include <boost/mpl/aux_/nttp_decl.hpp>\n\nnamespace boost { namespace mpl { namespace aux {\n\nstruct v_iter_tag;\n\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\nstruct vector_tag;\n#else\ntemplate< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct vector_tag;\n#endif\n\n}}}\n\n#endif // BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/aux_/vector0.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/long.hpp>\n#include <boost/mpl/void.hpp>\n#include <boost/mpl/aux_/na.hpp>\n#include <boost/mpl/aux_/type_wrapper.hpp>\n\n#include <boost/mpl/vector/aux_/iterator.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n#include <boost/mpl/aux_/config/typeof.hpp>\n\nnamespace boost { namespace mpl {\n\ntemplate< typename Dummy = na > struct vector0;\n\ntemplate<> struct vector0<na>\n{\n#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)\n    typedef aux::vector_tag tag;\n    typedef vector0         type;\n    typedef long_<32768>    lower_bound_;\n    typedef lower_bound_    upper_bound_;\n    typedef long_<0>        size;\n\n    static aux::type_wrapper<void_> item_(...);\n#else\n    typedef aux::vector_tag<0> tag;\n    typedef vector0 type;\n    typedef void_ item0;\n    \n    typedef v_iter<vector0<>,0> begin;\n    typedef v_iter<vector0<>,0> end;\n#endif\n};\n\n}}\n\n#endif // BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/vector0.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/vector/aux_/at.hpp>\n#include <boost/mpl/vector/aux_/front.hpp>\n#include <boost/mpl/vector/aux_/push_front.hpp>\n#include <boost/mpl/vector/aux_/pop_front.hpp>\n#include <boost/mpl/vector/aux_/push_back.hpp>\n#include <boost/mpl/vector/aux_/pop_back.hpp>\n#include <boost/mpl/vector/aux_/back.hpp>\n#include <boost/mpl/vector/aux_/clear.hpp>\n#include <boost/mpl/vector/aux_/O1_size.hpp>\n#include <boost/mpl/vector/aux_/size.hpp>\n#include <boost/mpl/vector/aux_/empty.hpp>\n#include <boost/mpl/vector/aux_/item.hpp>\n#include <boost/mpl/vector/aux_/iterator.hpp>\n#include <boost/mpl/vector/aux_/vector0.hpp>\n#include <boost/mpl/vector/aux_/begin_end.hpp>\n#include <boost/mpl/vector/aux_/tag.hpp>\n\n#endif // BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/vector10.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector0.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector10.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(0, 10, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector/vector20.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/vector/vector10.hpp>\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector20.hpp\n#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/aux_/config/typeof.hpp>\n#   include <boost/mpl/aux_/config/ctps.hpp>\n#   include <boost/preprocessor/iterate.hpp>\n\nnamespace boost { namespace mpl {\n\n#   define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3,(11, 20, <boost/mpl/vector/aux_/numbered.hpp>))\n#   include BOOST_PP_ITERATE()\n\n}}\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n\n#endif // BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/vector.hpp",
    "content": "\n#ifndef BOOST_MPL_VECTOR_HPP_INCLUDED\n#define BOOST_MPL_VECTOR_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2000-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: vector.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#if !defined(BOOST_MPL_PREPROCESSING_MODE)\n#   include <boost/mpl/limits/vector.hpp>\n#   include <boost/mpl/aux_/na.hpp>\n#   include <boost/mpl/aux_/config/preprocessor.hpp>\n\n#   include <boost/preprocessor/inc.hpp>\n#   include <boost/preprocessor/cat.hpp>\n#   include <boost/preprocessor/stringize.hpp>\n\n#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)\n#   define AUX778076_VECTOR_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \\\n    /**/\n#else\n#   define AUX778076_VECTOR_HEADER \\\n    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \\\n    /**/\n#endif\n\n#   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)\n#   undef AUX778076_VECTOR_HEADER\n#endif\n\n#include <boost/mpl/aux_/config/use_preprocessed.hpp>\n\n#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \\\n    && !defined(BOOST_MPL_PREPROCESSING_MODE)\n\n#   define BOOST_MPL_PREPROCESSED_HEADER vector.hpp\n#   include <boost/mpl/aux_/include_preprocessed.hpp>\n\n#else\n\n#   include <boost/mpl/limits/vector.hpp>\n\n#   define AUX778076_SEQUENCE_NAME vector\n#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE\n#   include <boost/mpl/aux_/sequence_wrapper.hpp>\n\n#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\n#endif // BOOST_MPL_VECTOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/void.hpp",
    "content": "\n#ifndef BOOST_MPL_VOID_HPP_INCLUDED\n#define BOOST_MPL_VOID_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: void.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/void_fwd.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/na_spec.hpp>\n#include <boost/mpl/aux_/config/msvc.hpp>\n#include <boost/mpl/aux_/config/workaround.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\n//  [JDG Feb-4-2003] made void_ a complete type to allow it to be\n//  instantiated so that it can be passed in as an object that can be\n//  used to select an overloaded function. Possible use includes signaling\n//  a zero arity functor evaluation call.\nstruct void_ { typedef void_ type; };\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\n\nnamespace boost { namespace mpl {\n\ntemplate< typename T >\nstruct is_void_\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\ntemplate<>\nstruct is_void_<void_>\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate< typename T >\nstruct is_not_void_\n    : true_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using true_::value;\n#endif\n};\n\ntemplate<>\nstruct is_not_void_<void_>\n    : false_\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n    using false_::value;\n#endif\n};\n\nBOOST_MPL_AUX_NA_SPEC(1, is_void_)\nBOOST_MPL_AUX_NA_SPEC(1, is_not_void_)\n\n}}\n\n#endif // BOOST_MPL_VOID_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/mpl/void_fwd.hpp",
    "content": "\n#ifndef BOOST_MPL_VOID_FWD_HPP_INCLUDED\n#define BOOST_MPL_VOID_FWD_HPP_INCLUDED\n\n// Copyright Aleksey Gurtovoy 2001-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/mpl for documentation.\n\n// $Id: void_fwd.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\n// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $\n// $Revision: 49267 $\n\n#include <boost/mpl/aux_/adl_barrier.hpp>\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN\n\nstruct void_;\n\nBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE\nBOOST_MPL_AUX_ADL_BARRIER_DECL(void_)\n\n#endif // BOOST_MPL_VOID_FWD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/next_prior.hpp",
    "content": "//  Boost next_prior.hpp header file  ---------------------------------------//\n\n//  (C) Copyright Dave Abrahams and Daniel Walker 1999-2003. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility for documentation.\n\n//  Revision History\n//  13 Dec 2003  Added next(x, n) and prior(x, n) (Daniel Walker)\n\n#ifndef BOOST_NEXT_PRIOR_HPP_INCLUDED\n#define BOOST_NEXT_PRIOR_HPP_INCLUDED\n\n#include <iterator>\n\nnamespace boost {\n\n//  Helper functions for classes like bidirectional iterators not supporting\n//  operator+ and operator-\n//\n//  Usage:\n//    const std::list<T>::iterator p = get_some_iterator();\n//    const std::list<T>::iterator prev = boost::prior(p);\n//    const std::list<T>::iterator next = boost::next(prev, 2);\n\n//  Contributed by Dave Abrahams\n\ntemplate <class T>\ninline T next(T x) { return ++x; }\n\ntemplate <class T, class Distance>\ninline T next(T x, Distance n)\n{\n    std::advance(x, n);\n    return x;\n}\n\ntemplate <class T>\ninline T prior(T x) { return --x; }\n\ntemplate <class T, class Distance>\ninline T prior(T x, Distance n)\n{\n    std::advance(x, -n);\n    return x;\n}\n\n} // namespace boost\n\n#endif  // BOOST_NEXT_PRIOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/noncopyable.hpp",
    "content": "//  Boost noncopyable.hpp header file  --------------------------------------//\n\n//  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/utility for documentation.\n\n#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED\n#define BOOST_NONCOPYABLE_HPP_INCLUDED\n\nnamespace boost {\n\n//  Private copy constructor and copy assignment ensure classes derived from\n//  class noncopyable cannot be copied.\n\n//  Contributed by Dave Abrahams\n\nnamespace noncopyable_  // protection from unintended ADL\n{\n  class noncopyable\n  {\n   protected:\n      noncopyable() {}\n      ~noncopyable() {}\n   private:  // emphasize the following members are private\n      noncopyable( const noncopyable& );\n      const noncopyable& operator=( const noncopyable& );\n  };\n}\n\ntypedef noncopyable_::noncopyable noncopyable;\n\n} // namespace boost\n\n#endif  // BOOST_NONCOPYABLE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/none.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_NONE_17SEP2003_HPP\n#define BOOST_NONE_17SEP2003_HPP\n\n#include \"boost/none_t.hpp\"\n\n// NOTE: Borland users have to include this header outside any precompiled headers\n// (bcc<=5.64 cannot include instance data in a precompiled header)\n//  -- * To be verified, now that there's no unnamed namespace\n\nnamespace boost {\n\nnone_t const none = (static_cast<none_t>(0)) ;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/none_t.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_NONE_T_17SEP2003_HPP\n#define BOOST_NONE_T_17SEP2003_HPP\n\nnamespace boost {\n\nnamespace detail { struct none_helper{}; }\n\ntypedef int detail::none_helper::*none_t ;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/bounds.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP\n\n#include \"boost/numeric/conversion/detail/bounds.hpp\"\n\nnamespace boost { namespace numeric \n{\n\ntemplate<class N>\nstruct bounds : boundsdetail::get_impl<N>::type\n{} ;\n\n} } // namespace boost::numeric\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/cast.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n//\n//\n//  Revision History\n//\n//    19 Nov 2001 Syntatic changes as suggested by Darin Adler (Fernando Cacciola)\n//    08 Nov 2001 Fixes to accommodate MSVC (Fernando Cacciola)\n//    04 Nov 2001 Fixes to accommodate gcc2.92 (Fernando Cacciola)\n//    30 Oct 2001 Some fixes suggested by Daryle Walker (Fernando Cacciola)\n//    25 Oct 2001 Initial boostification (Fernando Cacciola)\n//    23 Jan 2004 Inital add to cvs (post review)s\n//    22 Jun 2011 Added support for specializing cast policies via numeric_cast_traits (Brandon Kohn).\n//\n#ifndef BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP\n#define BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP\n\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))\n\n#  include<boost/numeric/conversion/detail/old_numeric_cast.hpp>\n\n#else\n\n#include <boost/type.hpp>\n#include <boost/numeric/conversion/converter.hpp>\n#include <boost/numeric/conversion/numeric_cast_traits.hpp>\n\nnamespace boost\n{\n    template <typename Target, typename Source> \n    inline Target numeric_cast( Source arg )\n    {\n        typedef numeric::conversion_traits<Target, Source>   conv_traits;\n        typedef numeric::numeric_cast_traits<Target, Source> cast_traits;\n        typedef boost::numeric::converter\n            <\n                Target,\n                Source, \n                conv_traits,\n                typename cast_traits::overflow_policy, \n                typename cast_traits::rounding_policy, \n                boost::numeric::raw_converter< conv_traits >,\n                typename cast_traits::range_checking_policy\n            > converter;\n        return converter::convert(arg);\n    }\n    \n    using numeric::bad_numeric_cast;\n} // namespace boost\n\n#endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/conversion_traits.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP\n\n#include \"boost/numeric/conversion/detail/conversion_traits.hpp\"\n#include \"boost/detail/workaround.hpp\"\n#include \"boost/config.hpp\"\n\nnamespace boost { namespace numeric\n{\n\ntemplate<class T, class S>\nstruct conversion_traits \n    : convdetail::get_conversion_traits<T,S>::type \n{\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)\n    typedef typename convdetail::get_conversion_traits<T,S>::type base_;\n    typedef typename base_::target_type     target_type;\n    typedef typename base_::source_type     source_type;\n    typedef typename base_::result_type     result_type;\n    typedef typename base_::argument_type   argument_type;\n#endif\n} ;\n\n} } // namespace boost::numeric\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/converter.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP\n\n#include \"boost/numeric/conversion/conversion_traits.hpp\"\n#include \"boost/numeric/conversion/converter_policies.hpp\"\n\n#include \"boost/numeric/conversion/detail/converter.hpp\"\n\nnamespace boost { namespace numeric \n{\n\ntemplate<class T,\n         class S,\n         class Traits           = conversion_traits<T,S>,\n         class OverflowHandler  = def_overflow_handler,\n         class Float2IntRounder = Trunc< BOOST_DEDUCED_TYPENAME Traits::source_type>  ,\n         class RawConverter     = raw_converter<Traits>,\n         class UserRangeChecker = UseInternalRangeChecker\n        >\nstruct converter : convdetail::get_converter_impl<Traits,\n                                                  OverflowHandler,\n                                                  Float2IntRounder,\n                                                  RawConverter,\n                                                  UserRangeChecker\n                                                 >::type\n{\n  typedef Traits traits ;\n\n  typedef typename Traits::argument_type argument_type ;\n  typedef typename Traits::result_type   result_type   ;\n\n  result_type operator() ( argument_type s ) const { return this->convert(s) ; }\n} ;\n\n\n\ntemplate<class S,\n         class OverflowHandler  = def_overflow_handler,\n         class Float2IntRounder = Trunc<S>  ,\n         class UserRangeChecker = UseInternalRangeChecker\n        >\nstruct make_converter_from\n{\n  template<class T,\n           class Traits       = conversion_traits<T,S>,\n           class RawConverter = raw_converter<Traits>\n          > \n  struct to\n  {\n    typedef converter<T,S,Traits,OverflowHandler,Float2IntRounder,RawConverter,UserRangeChecker> type ;\n  } ;\n\n} ;\n\n} } // namespace boost::numeric\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/converter_policies.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP\n\n#include <typeinfo> // for std::bad_cast\n\n#include <boost/config/no_tr1/cmath.hpp> // for std::floor and std::ceil\n#include <boost/throw_exception.hpp>\n\n#include <functional>\n\n#include \"boost/type_traits/is_arithmetic.hpp\"\n\n#include \"boost/mpl/if.hpp\"\n#include \"boost/mpl/integral_c.hpp\"\n\nnamespace boost { namespace numeric\n{\n\ntemplate<class S>\nstruct Trunc\n{\n  typedef S source_type ;\n\n  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;\n\n  static source_type nearbyint ( argument_type s )\n  {\n#if !defined(BOOST_NO_STDC_NAMESPACE)\n    using std::floor ;\n    using std::ceil  ;\n#endif\n\n    return s < static_cast<S>(0) ? ceil(s) : floor(s) ;\n  }\n\n  typedef mpl::integral_c< std::float_round_style, std::round_toward_zero> round_style ;\n} ;\n\n\n\ntemplate<class S>\nstruct Floor\n{\n  typedef S source_type ;\n\n  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;\n\n  static source_type nearbyint ( argument_type s )\n  {\n#if !defined(BOOST_NO_STDC_NAMESPACE)\n    using std::floor ;\n#endif\n\n    return floor(s) ;\n  }\n\n  typedef mpl::integral_c< std::float_round_style, std::round_toward_neg_infinity> round_style ;\n} ;\n\ntemplate<class S>\nstruct Ceil\n{\n  typedef S source_type ;\n\n  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;\n\n  static source_type nearbyint ( argument_type s )\n  {\n#if !defined(BOOST_NO_STDC_NAMESPACE)\n    using std::ceil ;\n#endif\n\n    return ceil(s) ;\n  }\n\n  typedef mpl::integral_c< std::float_round_style, std::round_toward_infinity> round_style ;\n} ;\n\ntemplate<class S>\nstruct RoundEven\n{\n  typedef S source_type ;\n\n  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;\n\n  static source_type nearbyint ( argument_type s )\n  {\n    // Algorithm contributed by Guillaume Melquiond\n\n#if !defined(BOOST_NO_STDC_NAMESPACE)\n    using std::floor ;\n    using std::ceil  ;\n#endif\n\n    // only works inside the range not at the boundaries\n    S prev = floor(s);\n    S next = ceil(s);\n\n    S rt = (s - prev) - (next - s); // remainder type\n\n    S const zero(0.0);\n    S const two(2.0);\n\n    if ( rt < zero )\n      return prev;\n    else if ( rt > zero )\n      return next;\n    else\n    {\n      bool is_prev_even = two * floor(prev / two) == prev ;\n      return ( is_prev_even ? prev : next ) ;\n    }\n  }\n\n  typedef mpl::integral_c< std::float_round_style, std::round_to_nearest> round_style ;\n} ;\n\n\nenum range_check_result\n{\n  cInRange     = 0 ,\n  cNegOverflow = 1 ,\n  cPosOverflow = 2\n} ;\n\nclass bad_numeric_cast : public std::bad_cast\n{\n  public:\n\n    virtual const char * what() const throw()\n      {  return \"bad numeric conversion: overflow\"; }\n};\n\nclass negative_overflow : public bad_numeric_cast\n{\n  public:\n\n    virtual const char * what() const throw()\n      {  return \"bad numeric conversion: negative overflow\"; }\n};\nclass positive_overflow : public bad_numeric_cast\n{\n  public:\n\n    virtual const char * what() const throw()\n      { return \"bad numeric conversion: positive overflow\"; }\n};\n\nstruct def_overflow_handler\n{\n  void operator() ( range_check_result r ) // throw(negative_overflow,positive_overflow)\n  {\n#ifndef BOOST_NO_EXCEPTIONS\n    if ( r == cNegOverflow )\n      throw negative_overflow() ;\n    else if ( r == cPosOverflow )\n           throw positive_overflow() ;\n#else\n    if ( r == cNegOverflow )\n      ::boost::throw_exception(negative_overflow()) ;\n    else if ( r == cPosOverflow )\n           ::boost::throw_exception(positive_overflow()) ;\n#endif\n  }\n} ;\n\nstruct silent_overflow_handler\n{\n  void operator() ( range_check_result ) {} // throw()\n} ;\n\ntemplate<class Traits>\nstruct raw_converter\n{\n  typedef typename Traits::result_type   result_type   ;\n  typedef typename Traits::argument_type argument_type ;\n\n  static result_type low_level_convert ( argument_type s ) { return static_cast<result_type>(s) ; }\n} ;\n\nstruct UseInternalRangeChecker {} ;\n\n} } // namespace boost::numeric\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/bounds.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP\n\n#include \"boost/limits.hpp\"\n#include \"boost/config.hpp\"\n#include \"boost/mpl/if.hpp\"\n\nnamespace boost { namespace numeric { namespace boundsdetail\n{\n  template<class N>\n  class Integral\n  {\n      typedef std::numeric_limits<N> limits ;\n\n    public :\n    \n      static N lowest  () { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }\n      static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }\n      static N smallest() { return static_cast<N>(1); }\n  } ;\n\n  template<class N>\n  class Float\n  {\n      typedef std::numeric_limits<N> limits ;\n\n    public :\n    \n      static N lowest  () { return static_cast<N>(-limits::max BOOST_PREVENT_MACRO_SUBSTITUTION ()) ; }\n      static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }\n      static N smallest() { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }\n  } ;\n\n  template<class N>\n  struct get_impl\n  {\n    typedef mpl::bool_< ::std::numeric_limits<N>::is_integer > is_int ;\n\n    typedef Integral<N> impl_int   ;\n    typedef Float   <N> impl_float ;\n\n    typedef typename mpl::if_<is_int,impl_int,impl_float>::type type ;\n  } ;\n\n} } } // namespace boost::numeric::boundsdetail.\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/conversion_traits.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP\n\n#include \"boost/type_traits/is_arithmetic.hpp\"\n#include \"boost/type_traits/is_same.hpp\"\n#include \"boost/type_traits/remove_cv.hpp\"\n\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n#include \"boost/numeric/conversion/detail/int_float_mixture.hpp\"\n#include \"boost/numeric/conversion/detail/sign_mixture.hpp\"\n#include \"boost/numeric/conversion/detail/udt_builtin_mixture.hpp\"\n#include \"boost/numeric/conversion/detail/is_subranged.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  //-------------------------------------------------------------------\n  // Implementation of the Conversion Traits for T != S\n  //\n  // This is a VISIBLE base class of the user-level conversion_traits<> class.\n  //-------------------------------------------------------------------\n  template<class T,class S>\n  struct non_trivial_traits_impl\n  {\n    typedef typename get_int_float_mixture   <T,S>::type int_float_mixture ;\n    typedef typename get_sign_mixture        <T,S>::type sign_mixture ;\n    typedef typename get_udt_builtin_mixture <T,S>::type udt_builtin_mixture ;\n\n    typedef typename get_is_subranged<T,S>::type subranged ;\n\n    typedef mpl::false_ trivial ;\n\n    typedef T target_type ;\n    typedef S source_type ;\n    typedef T result_type ;\n\n    typedef typename mpl::if_< is_arithmetic<S>, S, S const&>::type argument_type ;\n\n    typedef typename mpl::if_<subranged,S,T>::type supertype ;\n    typedef typename mpl::if_<subranged,T,S>::type subtype   ;\n  } ;\n\n  //-------------------------------------------------------------------\n  // Implementation of the Conversion Traits for T == S\n  //\n  // This is a VISIBLE base class of the user-level conversion_traits<> class.\n  //-------------------------------------------------------------------\n  template<class N>\n  struct trivial_traits_impl\n  {\n    typedef typename get_int_float_mixture  <N,N>::type int_float_mixture ;\n    typedef typename get_sign_mixture       <N,N>::type sign_mixture ;\n    typedef typename get_udt_builtin_mixture<N,N>::type udt_builtin_mixture ;\n\n    typedef mpl::false_ subranged ;\n    typedef mpl::true_  trivial ;\n\n    typedef N        target_type ;\n    typedef N        source_type ;\n    typedef N const& result_type ;\n    typedef N const& argument_type ;\n\n    typedef N supertype ;\n    typedef N subtype  ;\n\n  } ;\n\n  //-------------------------------------------------------------------\n  // Top level implementation selector.\n  //-------------------------------------------------------------------\n  template<class T, class S>\n  struct get_conversion_traits\n  {\n    typedef typename remove_cv<T>::type target_type ;\n    typedef typename remove_cv<S>::type source_type ;\n\n    typedef typename is_same<target_type,source_type>::type is_trivial ;\n\n    typedef trivial_traits_impl    <target_type>             trivial_imp ;\n    typedef non_trivial_traits_impl<target_type,source_type> non_trivial_imp ;\n\n    typedef typename mpl::if_<is_trivial,trivial_imp,non_trivial_imp>::type type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/converter.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP\n\n#include <functional>\n\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n#include \"boost/numeric/conversion/detail/conversion_traits.hpp\"\n#include \"boost/numeric/conversion/bounds.hpp\"\n\n#include \"boost/type_traits/is_same.hpp\"\n\n#include \"boost/mpl/integral_c.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  // Integral Constants representing rounding modes\n  typedef mpl::integral_c<std::float_round_style, std::round_toward_zero>         round2zero_c ;\n  typedef mpl::integral_c<std::float_round_style, std::round_to_nearest>          round2nearest_c ;\n  typedef mpl::integral_c<std::float_round_style, std::round_toward_infinity>     round2inf_c ;\n  typedef mpl::integral_c<std::float_round_style, std::round_toward_neg_infinity> round2neg_inf_c ;\n\n  // Metafunction:\n  //\n  //   for_round_style<RoundStyle,RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf>::type\n  //\n  // {RoundStyle} Integral Constant specifying a round style as declared above.\n  // {RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf} arbitrary types.\n  //\n  // Selects one of the 4 types according to the value of RoundStyle.\n  //\n  template<class RoundStyle,class RoundToZero,class RoundToNearest,class RoundToInf,class RoundToNegInf>\n  struct for_round_style\n  {\n    typedef ct_switch4<RoundStyle\n                       , round2zero_c, round2nearest_c, round2inf_c // round2neg_inf_c\n                       , RoundToZero , RoundToNearest , RoundToInf , RoundToNegInf\n                      > selector ;\n\n    typedef typename selector::type type ;\n  } ;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//--------------------------------------------------------------------------\n//                             Range Checking Logic.\n//\n// The range checking logic is built up by combining 1 or 2 predicates.\n// Each predicate is encapsulated in a template class and exposes\n// the static member function 'apply'.\n//\n//--------------------------------------------------------------------------\n\n\n  // Because a particular logic can combine either 1 or two predicates, the following\n  // tags are used to allow the predicate applier to receive 2 preds, but optimize away\n  // one of them if it is 'non-applicable'\n  struct non_applicable { typedef mpl::false_ do_apply ; } ;\n  struct applicable     { typedef mpl::true_  do_apply ; } ;\n\n\n  //--------------------------------------------------------------------------\n  //\n  //                      Range Checking Logic implementations.\n  //\n  // The following classes, collectivelly named 'Predicates', are instantiated within\n  // the corresponding range checkers.\n  // Their static member function 'apply' is called to perform the actual range checking logic.\n  //--------------------------------------------------------------------------\n\n    // s < Lowest(T) ? cNegOverflow : cInRange\n    //\n    template<class Traits>\n    struct LT_LoT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s < static_cast<S>(bounds<T>::lowest()) ? cNegOverflow : cInRange ;\n      }\n    } ;\n\n    // s < 0 ? cNegOverflow : cInRange\n    //\n    template<class Traits>\n    struct LT_Zero : applicable\n    {\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s < static_cast<S>(0) ? cNegOverflow : cInRange ;\n      }\n    } ;\n\n    // s <= Lowest(T)-1 ? cNegOverflow : cInRange\n    //\n    template<class Traits>\n    struct LE_PrevLoT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s <= static_cast<S>(bounds<T>::lowest()) - static_cast<S>(1.0)\n                 ? cNegOverflow : cInRange ;\n      }\n    } ;\n\n    // s < Lowest(T)-0.5 ? cNegOverflow : cInRange\n    //\n    template<class Traits>\n    struct LT_HalfPrevLoT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s < static_cast<S>(bounds<T>::lowest()) - static_cast<S>(0.5)\n                 ? cNegOverflow : cInRange ;\n      }\n    } ;\n\n    // s > Highest(T) ? cPosOverflow : cInRange\n    //\n    template<class Traits>\n    struct GT_HiT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s > static_cast<S>(bounds<T>::highest())\n                 ? cPosOverflow : cInRange ;\n      }\n    } ;\n\n    // s >= Lowest(T) + 1 ? cPosOverflow : cInRange\n    //\n    template<class Traits>\n    struct GE_SuccHiT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(1.0)\n                 ? cPosOverflow : cInRange ;\n      }\n    } ;\n\n    // s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange\n    //\n    template<class Traits>\n    struct GT_HalfSuccHiT : applicable\n    {\n      typedef typename Traits::target_type T ;\n      typedef typename Traits::source_type S ;\n      typedef typename Traits::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(0.5)\n                 ? cPosOverflow : cInRange ;\n      }\n    } ;\n\n\n  //--------------------------------------------------------------------------\n  //\n  // Predicate Combiner.\n  //\n  // This helper classes are used to possibly combine the range checking logic\n  // individually performed by the predicates\n  //\n  //--------------------------------------------------------------------------\n\n\n    // Applies both predicates: first 'PredA', and if it equals 'cInRange', 'PredB'\n    template<class PredA, class PredB>\n    struct applyBoth\n    {\n      typedef typename PredA::argument_type argument_type ;\n\n      static range_check_result apply ( argument_type s )\n      {\n        range_check_result r = PredA::apply(s) ;\n        if ( r == cInRange )\n          r = PredB::apply(s);\n        return r ;\n      }\n    } ;\n\n    template<class PredA, class PredB>\n    struct combine\n    {\n      typedef applyBoth<PredA,PredB> Both ;\n      typedef void                   NNone ; // 'None' is defined as a macro in (/usr/X11R6/include/X11/X.h)\n\n      typedef typename PredA::do_apply do_applyA ;\n      typedef typename PredB::do_apply do_applyB ;\n\n      typedef typename for_both<do_applyA, do_applyB, Both, PredA, PredB, NNone>::type type ;\n    } ;\n\n\n\n\n\n\n\n\n\n\n\n\n//--------------------------------------------------------------------------\n//                             Range Checker classes.\n//\n// The following classes are VISIBLE base classes of the user-level converter<> class.\n// They supply the optimized 'out_of_range()' and 'validate_range()' static member functions\n// visible in the user interface.\n//\n//--------------------------------------------------------------------------\n\n  // Dummy range checker.\n  template<class Traits>\n  struct dummy_range_checker\n  {\n    typedef typename Traits::argument_type argument_type ;\n\n    static range_check_result out_of_range ( argument_type ) { return cInRange ; }\n    static void validate_range ( argument_type ) {}\n  } ;\n\n  // Generic range checker.\n  //\n  // All the range checking logic for all possible combinations of source and target\n  // can be arranged in terms of one or two predicates, which test overflow on both neg/pos 'sides'\n  // of the ranges.\n  //\n  // These predicates are given here as IsNegOverflow and IsPosOverflow.\n  //\n  template<class Traits, class IsNegOverflow, class IsPosOverflow, class OverflowHandler>\n  struct generic_range_checker\n  {\n    typedef OverflowHandler overflow_handler ;\n\n    typedef typename Traits::argument_type argument_type ;\n\n    static range_check_result out_of_range ( argument_type s )\n    {\n      typedef typename combine<IsNegOverflow,IsPosOverflow>::type Predicate ;\n\n      return Predicate::apply(s);\n    }\n\n    static void validate_range ( argument_type s )\n      { OverflowHandler()( out_of_range(s) ) ; }\n  } ;\n\n\n\n//--------------------------------------------------------------------------\n//\n// Selectors for the optimized Range Checker class.\n//\n//--------------------------------------------------------------------------\n\n  template<class Traits,class OverflowHandler>\n  struct GetRC_Sig2Sig_or_Unsig2Unsig\n  {\n    typedef dummy_range_checker<Traits> Dummy ;\n\n    typedef LT_LoT<Traits> Pred1 ;\n    typedef GT_HiT<Traits> Pred2 ;\n\n    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;\n\n    typedef typename Traits::subranged subranged ;\n\n    typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;\n  } ;\n\n  template<class Traits, class OverflowHandler>\n  struct GetRC_Sig2Unsig\n  {\n    typedef LT_Zero<Traits> Pred1 ;\n    typedef GT_HiT <Traits> Pred2 ;\n\n    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ChoiceA ;\n\n    typedef generic_range_checker<Traits,Pred1,non_applicable,OverflowHandler> ChoiceB ;\n\n    typedef typename Traits::target_type T ;\n    typedef typename Traits::source_type S ;\n\n    typedef typename subranged_Unsig2Sig<S,T>::type oposite_subranged ;\n\n    typedef typename mpl::not_<oposite_subranged>::type positively_subranged ;\n\n    typedef typename mpl::if_<positively_subranged,ChoiceA,ChoiceB>::type type ;\n  } ;\n\n  template<class Traits, class OverflowHandler>\n  struct GetRC_Unsig2Sig\n  {\n    typedef GT_HiT<Traits> Pred1 ;\n\n    typedef generic_range_checker<Traits,non_applicable,Pred1,OverflowHandler> type ;\n  } ;\n\n  template<class Traits,class OverflowHandler>\n  struct GetRC_Int2Int\n  {\n    typedef GetRC_Sig2Sig_or_Unsig2Unsig<Traits,OverflowHandler> Sig2SigQ     ;\n    typedef GetRC_Sig2Unsig             <Traits,OverflowHandler> Sig2UnsigQ   ;\n    typedef GetRC_Unsig2Sig             <Traits,OverflowHandler> Unsig2SigQ   ;\n    typedef Sig2SigQ                                             Unsig2UnsigQ ;\n\n    typedef typename Traits::sign_mixture sign_mixture ;\n\n    typedef typename\n      for_sign_mixture<sign_mixture,Sig2SigQ,Sig2UnsigQ,Unsig2SigQ,Unsig2UnsigQ>::type\n        selector ;\n\n    typedef typename selector::type type ;\n  } ;\n\n  template<class Traits>\n  struct GetRC_Int2Float\n  {\n    typedef dummy_range_checker<Traits> type ;\n  } ;\n\n  template<class Traits, class OverflowHandler, class Float2IntRounder>\n  struct GetRC_Float2Int\n  {\n    typedef LE_PrevLoT    <Traits> Pred1 ;\n    typedef GE_SuccHiT    <Traits> Pred2 ;\n    typedef LT_HalfPrevLoT<Traits> Pred3 ;\n    typedef GT_HalfSuccHiT<Traits> Pred4 ;\n    typedef GT_HiT        <Traits> Pred5 ;\n    typedef LT_LoT        <Traits> Pred6 ;\n\n    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ToZero    ;\n    typedef generic_range_checker<Traits,Pred3,Pred4,OverflowHandler> ToNearest ;\n    typedef generic_range_checker<Traits,Pred1,Pred5,OverflowHandler> ToInf     ;\n    typedef generic_range_checker<Traits,Pred6,Pred2,OverflowHandler> ToNegInf  ;\n\n    typedef typename Float2IntRounder::round_style round_style ;\n\n    typedef typename for_round_style<round_style,ToZero,ToNearest,ToInf,ToNegInf>::type type ;\n  } ;\n\n  template<class Traits, class OverflowHandler>\n  struct GetRC_Float2Float\n  {\n    typedef dummy_range_checker<Traits> Dummy ;\n\n    typedef LT_LoT<Traits> Pred1 ;\n    typedef GT_HiT<Traits> Pred2 ;\n\n    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;\n\n    typedef typename Traits::subranged subranged ;\n\n    typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;\n  } ;\n\n  template<class Traits, class OverflowHandler, class Float2IntRounder>\n  struct GetRC_BuiltIn2BuiltIn\n  {\n    typedef GetRC_Int2Int<Traits,OverflowHandler>                    Int2IntQ ;\n    typedef GetRC_Int2Float<Traits>                                  Int2FloatQ ;\n    typedef GetRC_Float2Int<Traits,OverflowHandler,Float2IntRounder> Float2IntQ ;\n    typedef GetRC_Float2Float<Traits,OverflowHandler>                Float2FloatQ ;\n\n    typedef typename Traits::int_float_mixture int_float_mixture ;\n\n    typedef typename for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ>::type selector ;\n\n    typedef typename selector::type type ;\n  } ;\n\n  template<class Traits, class OverflowHandler, class Float2IntRounder>\n  struct GetRC\n  {\n    typedef GetRC_BuiltIn2BuiltIn<Traits,OverflowHandler,Float2IntRounder> BuiltIn2BuiltInQ ;\n\n    typedef dummy_range_checker<Traits> Dummy ;\n\n    typedef mpl::identity<Dummy> DummyQ ;\n\n    typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ;\n\n    typedef typename for_udt_builtin_mixture<udt_builtin_mixture,BuiltIn2BuiltInQ,DummyQ,DummyQ,DummyQ>::type selector ;\n\n    typedef typename selector::type type ;\n  } ;\n\n\n\n\n//--------------------------------------------------------------------------\n//                             Converter classes.\n//\n// The following classes are VISIBLE base classes of the user-level converter<> class.\n// They supply the optimized 'nearbyint()' and 'convert()' static member functions\n// visible in the user interface.\n//\n//--------------------------------------------------------------------------\n\n  //\n  // Trivial Converter : used when (cv-unqualified) T == (cv-unqualified)  S\n  //\n  template<class Traits>\n  struct trivial_converter_impl : public std::unary_function<  BOOST_DEDUCED_TYPENAME Traits::argument_type\n                                                              ,BOOST_DEDUCED_TYPENAME Traits::result_type\n                                                            >\n                                 ,public dummy_range_checker<Traits>\n  {\n    typedef Traits traits ;\n\n    typedef typename Traits::source_type   source_type   ;\n    typedef typename Traits::argument_type argument_type ;\n    typedef typename Traits::result_type   result_type   ;\n\n    static result_type low_level_convert ( argument_type s ) { return s ; }\n    static source_type nearbyint         ( argument_type s ) { return s ; }\n    static result_type convert           ( argument_type s ) { return s ; }\n  } ;\n\n\n  //\n  // Rounding Converter : used for float to integral conversions.\n  //\n  template<class Traits,class RangeChecker,class RawConverter,class Float2IntRounder>\n  struct rounding_converter : public std::unary_function<  BOOST_DEDUCED_TYPENAME Traits::argument_type\n                                                          ,BOOST_DEDUCED_TYPENAME Traits::result_type\n                                                        >\n                             ,public RangeChecker\n                             ,public Float2IntRounder\n                             ,public RawConverter\n  {\n    typedef RangeChecker     RangeCheckerBase ;\n    typedef Float2IntRounder Float2IntRounderBase ;\n    typedef RawConverter     RawConverterBase ;\n\n    typedef Traits traits ;\n\n    typedef typename Traits::source_type   source_type   ;\n    typedef typename Traits::argument_type argument_type ;\n    typedef typename Traits::result_type   result_type   ;\n\n    static result_type convert ( argument_type s )\n    {\n      RangeCheckerBase::validate_range(s);\n      source_type s1 = Float2IntRounderBase::nearbyint(s);\n      return RawConverterBase::low_level_convert(s1);\n    }\n  } ;\n\n\n  //\n  // Non-Rounding Converter : used for all other conversions.\n  //\n  template<class Traits,class RangeChecker,class RawConverter>\n  struct non_rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type\n                                                             ,BOOST_DEDUCED_TYPENAME Traits::result_type\n                                                           >\n                                 ,public RangeChecker\n                                 ,public RawConverter\n  {\n    typedef RangeChecker RangeCheckerBase ;\n    typedef RawConverter RawConverterBase ;\n\n    typedef Traits traits ;\n\n    typedef typename Traits::source_type   source_type   ;\n    typedef typename Traits::argument_type argument_type ;\n    typedef typename Traits::result_type   result_type   ;\n\n    static source_type nearbyint ( argument_type s ) { return s ; }\n\n    static result_type convert ( argument_type s )\n    {\n      RangeCheckerBase::validate_range(s);\n      return RawConverterBase::low_level_convert(s);\n    }\n  } ;\n\n\n\n\n//--------------------------------------------------------------------------\n//\n// Selectors for the optimized Converter class.\n//\n//--------------------------------------------------------------------------\n\n  template<class Traits,class OverflowHandler,class Float2IntRounder,class RawConverter, class UserRangeChecker>\n  struct get_non_trivial_converter\n  {\n    typedef GetRC<Traits,OverflowHandler,Float2IntRounder> InternalRangeCheckerQ ;\n\n    typedef is_same<UserRangeChecker,UseInternalRangeChecker> use_internal_RC ;\n\n    typedef mpl::identity<UserRangeChecker> UserRangeCheckerQ ;\n\n    typedef typename\n      mpl::eval_if<use_internal_RC,InternalRangeCheckerQ,UserRangeCheckerQ>::type\n        RangeChecker ;\n\n    typedef non_rounding_converter<Traits,RangeChecker,RawConverter>              NonRounding ;\n    typedef rounding_converter<Traits,RangeChecker,RawConverter,Float2IntRounder> Rounding ;\n\n    typedef mpl::identity<NonRounding> NonRoundingQ ;\n    typedef mpl::identity<Rounding>    RoundingQ    ;\n\n    typedef typename Traits::int_float_mixture int_float_mixture ;\n\n    typedef typename\n      for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type\n        selector ;\n\n    typedef typename selector::type type ;\n  } ;\n\n  template< class Traits\n           ,class OverflowHandler\n           ,class Float2IntRounder\n           ,class RawConverter\n           ,class UserRangeChecker\n          >\n  struct get_converter_impl\n  {\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x0561 ) )\n    // bcc55 prefers sometimes template parameters to be explicit local types.\n    // (notice that is is illegal to reuse the names like this)\n    typedef Traits           Traits ;\n    typedef OverflowHandler  OverflowHandler ;\n    typedef Float2IntRounder Float2IntRounder ;\n    typedef RawConverter     RawConverter ;\n    typedef UserRangeChecker UserRangeChecker ;\n#endif\n\n    typedef trivial_converter_impl<Traits> Trivial ;\n    typedef mpl::identity        <Trivial> TrivialQ ;\n\n    typedef get_non_trivial_converter< Traits\n                                      ,OverflowHandler\n                                      ,Float2IntRounder\n                                      ,RawConverter\n                                      ,UserRangeChecker\n                                     > NonTrivialQ ;\n\n    typedef typename Traits::trivial trivial ;\n\n    typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/int_float_mixture.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP\n\n#include \"boost/config.hpp\"\n#include \"boost/limits.hpp\"\n\n#include \"boost/numeric/conversion/int_float_mixture_enum.hpp\"\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n\n#include \"boost/mpl/integral_c.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  // Integral Constants for 'IntFloatMixture'\n  typedef mpl::integral_c<int_float_mixture_enum, integral_to_integral> int2int_c ;\n  typedef mpl::integral_c<int_float_mixture_enum, integral_to_float>    int2float_c ;\n  typedef mpl::integral_c<int_float_mixture_enum, float_to_integral>    float2int_c ;\n  typedef mpl::integral_c<int_float_mixture_enum, float_to_float>       float2float_c ;\n\n  // Metafunction:\n  //\n  //   get_int_float_mixture<T,S>::type\n  //\n  // Selects the appropriate Int-Float Mixture Integral Constant for the combination T,S.\n  //\n  template<class T,class S>\n  struct get_int_float_mixture\n  {\n    typedef mpl::bool_< ::std::numeric_limits<S>::is_integer > S_int ;\n    typedef mpl::bool_< ::std::numeric_limits<T>::is_integer > T_int ;\n\n    typedef typename\n      for_both<S_int, T_int, int2int_c, int2float_c, float2int_c, float2float_c>::type\n        type ;\n  } ;\n\n  // Metafunction:\n  //\n  //   for_int_float_mixture<Mixture,int_int,int_float,float_int,float_float>::type\n  //\n  // {Mixture} is one of the Integral Constants for Mixture, declared above.\n  // {int_int,int_float,float_int,float_float} are aribtrary types. (not metafunctions)\n  //\n  // According to the value of 'IntFloatMixture', selects the corresponding type.\n  //\n  template<class IntFloatMixture, class Int2Int, class Int2Float, class Float2Int, class Float2Float>\n  struct for_int_float_mixture\n  {\n    typedef typename\n      ct_switch4<IntFloatMixture\n                 ,int2int_c, int2float_c, float2int_c  // default\n                 ,Int2Int  , Int2Float  , Float2Int  , Float2Float\n                >::type\n        type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/is_subranged.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP\n\n#include \"boost/config.hpp\"\n#include \"boost/limits.hpp\"\n\n#include \"boost/mpl/int.hpp\"\n#include \"boost/mpl/multiplies.hpp\"\n#include \"boost/mpl/less.hpp\"\n#include \"boost/mpl/equal_to.hpp\"\n\n#include \"boost/type_traits/is_same.hpp\"\n\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n#include \"boost/numeric/conversion/detail/int_float_mixture.hpp\"\n#include \"boost/numeric/conversion/detail/sign_mixture.hpp\"\n#include \"boost/numeric/conversion/detail/udt_builtin_mixture.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  //---------------------------------------------------------------\n  // Implementations of the compile time predicate \"T is subranged\"\n  //---------------------------------------------------------------\n\n    // for integral to integral conversions\n    template<class T,class S>\n    struct subranged_Sig2Unsig\n    {\n      // Signed to unsigned conversions are 'subranged' because of possible loose\n      // of negative values.\n      typedef mpl::true_ type ;\n    } ;\n\n    // for unsigned integral to signed integral conversions\n    template<class T,class S>\n    struct subranged_Unsig2Sig\n    {\n       // IMPORTANT NOTE:\n       //\n       // This code assumes that signed/unsigned integral values are represented\n       // such that:\n       //\n       //  numeric_limits<signed T>::digits + 1 == numeric_limits<unsigned T>::digits\n       //\n       // The '+1' is required since numeric_limits<>::digits gives 1 bit less for signed integral types.\n       //\n       // This fact is used by the following logic:\n       //\n       //  if ( (numeric_limits<T>::digits+1) < (2*numeric_limits<S>::digits) )\n       //    then the conversion is subranged.\n       //\n\n       typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;\n       typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;\n\n       // T is signed, so take digits+1\n       typedef typename T_digits::next u_T_digits ;\n\n       typedef mpl::int_<2> Two ;\n\n       typedef typename mpl::multiplies<S_digits,Two>::type S_digits_times_2 ;\n\n       typedef typename mpl::less<u_T_digits,S_digits_times_2>::type type ;\n    } ;\n\n    // for integral to integral conversions of the same sign.\n    template<class T,class S>\n    struct subranged_SameSign\n    {\n       // An integral conversion of the same sign is subranged if digits(T) < digits(S).\n\n       typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;\n       typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;\n\n       typedef typename mpl::less<T_digits,S_digits>::type type ;\n    } ;\n\n    // for integral to float conversions\n    template<class T,class S>\n    struct subranged_Int2Float\n    {\n      typedef mpl::false_ type ;\n    } ;\n\n    // for float to integral conversions\n    template<class T,class S>\n    struct subranged_Float2Int\n    {\n      typedef mpl::true_ type ;\n    } ;\n\n    // for float to float conversions\n    template<class T,class S>\n    struct subranged_Float2Float\n    {\n      // If both T and S are floats,\n      // compare exponent bits and if they match, mantisa bits.\n\n      typedef mpl::int_< ::std::numeric_limits<S>::digits > S_mantisa ;\n      typedef mpl::int_< ::std::numeric_limits<T>::digits > T_mantisa ;\n\n      typedef mpl::int_< ::std::numeric_limits<S>::max_exponent > S_exponent ;\n      typedef mpl::int_< ::std::numeric_limits<T>::max_exponent > T_exponent ;\n\n      typedef typename mpl::less<T_exponent,S_exponent>::type T_smaller_exponent ;\n\n      typedef typename mpl::equal_to<T_exponent,S_exponent>::type equal_exponents ;\n\n      typedef mpl::less<T_mantisa,S_mantisa> T_smaller_mantisa ;\n\n      typedef mpl::eval_if<equal_exponents,T_smaller_mantisa,mpl::false_> not_bigger_exponent_case ;\n\n      typedef typename\n        mpl::eval_if<T_smaller_exponent,mpl::true_,not_bigger_exponent_case>::type\n          type ;\n    } ;\n\n    // for Udt to built-in conversions\n    template<class T,class S>\n    struct subranged_Udt2BuiltIn\n    {\n      typedef mpl::true_ type ;\n    } ;\n\n    // for built-in to Udt conversions\n    template<class T,class S>\n    struct subranged_BuiltIn2Udt\n    {\n      typedef mpl::false_ type ;\n    } ;\n\n    // for Udt to Udt conversions\n    template<class T,class S>\n    struct subranged_Udt2Udt\n    {\n      typedef mpl::false_ type ;\n    } ;\n\n  //-------------------------------------------------------------------\n  // Selectors for the implementations of the subranged predicate\n  //-------------------------------------------------------------------\n\n    template<class T,class S>\n    struct get_subranged_Int2Int\n    {\n      typedef subranged_SameSign<T,S>  Sig2Sig     ;\n      typedef subranged_Sig2Unsig<T,S> Sig2Unsig   ;\n      typedef subranged_Unsig2Sig<T,S> Unsig2Sig   ;\n      typedef Sig2Sig                  Unsig2Unsig ;\n\n      typedef typename get_sign_mixture<T,S>::type sign_mixture ;\n\n      typedef typename\n        for_sign_mixture<sign_mixture, Sig2Sig, Sig2Unsig, Unsig2Sig, Unsig2Unsig>::type\n           type ;\n    } ;\n\n    template<class T,class S>\n    struct get_subranged_BuiltIn2BuiltIn\n    {\n      typedef get_subranged_Int2Int<T,S> Int2IntQ ;\n\n      typedef subranged_Int2Float  <T,S> Int2Float   ;\n      typedef subranged_Float2Int  <T,S> Float2Int   ;\n      typedef subranged_Float2Float<T,S> Float2Float ;\n\n      typedef mpl::identity<Int2Float  > Int2FloatQ   ;\n      typedef mpl::identity<Float2Int  > Float2IntQ   ;\n      typedef mpl::identity<Float2Float> Float2FloatQ ;\n\n      typedef typename get_int_float_mixture<T,S>::type int_float_mixture ;\n\n      typedef for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ> for_ ;\n\n      typedef typename for_::type selected ;\n\n      typedef typename selected::type type ;\n    } ;\n\n    template<class T,class S>\n    struct get_subranged\n    {\n      typedef get_subranged_BuiltIn2BuiltIn<T,S> BuiltIn2BuiltInQ ;\n\n      typedef subranged_BuiltIn2Udt<T,S> BuiltIn2Udt ;\n      typedef subranged_Udt2BuiltIn<T,S> Udt2BuiltIn ;\n      typedef subranged_Udt2Udt<T,S>     Udt2Udt ;\n\n      typedef mpl::identity<BuiltIn2Udt> BuiltIn2UdtQ ;\n      typedef mpl::identity<Udt2BuiltIn> Udt2BuiltInQ ;\n      typedef mpl::identity<Udt2Udt    > Udt2UdtQ     ;\n\n      typedef typename get_udt_builtin_mixture<T,S>::type udt_builtin_mixture ;\n      \n      typedef typename\n        for_udt_builtin_mixture<udt_builtin_mixture, BuiltIn2BuiltInQ, BuiltIn2UdtQ, Udt2BuiltInQ, Udt2UdtQ>::type\n          selected ;\n\n      typedef typename selected::type selected2 ;\n \n      typedef typename selected2::type type ;\n    } ;\n\n\n  //-------------------------------------------------------------------\n  // Top level implementation selector.\n  //-------------------------------------------------------------------\n  template<class T, class S>\n  struct get_is_subranged\n  {\n    typedef get_subranged<T,S>         non_trivial_case ;\n    typedef mpl::identity<mpl::false_> trivial_case ;\n\n    typedef is_same<T,S> is_trivial ;\n   \n    typedef typename mpl::if_<is_trivial,trivial_case,non_trivial_case>::type selected ;\n    \n    typedef typename selected::type type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/meta.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP\n\n#include \"boost/type_traits/remove_cv.hpp\"\n\n#include \"boost/mpl/if.hpp\"\n#include \"boost/mpl/eval_if.hpp\"\n#include \"boost/mpl/equal_to.hpp\"\n#include \"boost/mpl/not.hpp\"\n#include \"boost/mpl/and.hpp\"\n#include \"boost/mpl/bool.hpp\"\n#include \"boost/mpl/identity.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n   template< class T1, class T2>\n   struct equal_to\n   {\n   #if !defined(__BORLANDC__)\n   \n       enum { x = ( BOOST_MPL_AUX_VALUE_WKND(T1)::value == BOOST_MPL_AUX_VALUE_WKND(T2)::value ) };\n           \n       BOOST_STATIC_CONSTANT(bool, value = x);\n           \n       typedef mpl::bool_<value> type;\n       \n   #else\n   \n       BOOST_STATIC_CONSTANT(bool, value = (\n             BOOST_MPL_AUX_VALUE_WKND(T1)::value \n               == BOOST_MPL_AUX_VALUE_WKND(T2)::value\n           ));\n           \n       typedef mpl::bool_<(\n             BOOST_MPL_AUX_VALUE_WKND(T1)::value \n               == BOOST_MPL_AUX_VALUE_WKND(T2)::value\n           )> type;\n   #endif\n   };\n    \n// Metafunction:\n  //\n  //   ct_switch4<Value,Case0Val,Case1Val,Case2Val,Case0Type,Case1Type,Case2Type,DefaultType>::type\n  //\n  // {Value,Case(X)Val} are Integral Constants (such as: mpl::int_<>)\n  // {Case(X)Type,DefaultType} are arbitrary types. (not metafunctions)\n  //\n  // Returns Case(X)Type if Val==Case(X)Val; DefaultType otherwise.\n  //\n  template<class Value,\n           class Case0Val,\n           class Case1Val,\n           class Case2Val,\n           class Case0Type,\n           class Case1Type,\n           class Case2Type,\n           class DefaultType\n          >\n  struct ct_switch4\n  {\n    typedef mpl::identity<Case0Type> Case0TypeQ ;\n    typedef mpl::identity<Case1Type> Case1TypeQ ;\n\n    typedef equal_to<Value,Case0Val> is_case0 ;\n    typedef equal_to<Value,Case1Val> is_case1 ;\n    typedef equal_to<Value,Case2Val> is_case2 ;\n\n    typedef mpl::if_<is_case2,Case2Type,DefaultType> choose_2_3Q ;\n    typedef mpl::eval_if<is_case1,Case1TypeQ,choose_2_3Q> choose_1_2_3Q ;\n\n    typedef typename\n      mpl::eval_if<is_case0,Case0TypeQ,choose_1_2_3Q>::type\n        type ;\n  } ;\n\n\n\n\n  // Metafunction:\n  //\n  //   for_both<expr0,expr1,TT,TF,FT,FF>::type\n  //\n  // {exp0,expr1} are Boolean Integral Constants\n  // {TT,TF,FT,FF} are aribtrary types. (not metafunctions)\n  //\n  // According to the combined boolean value of 'expr0 && expr1', selects the corresponding type.\n  //\n  template<class expr0, class expr1, class TT, class TF, class FT, class FF>\n  struct for_both\n  {\n    typedef mpl::identity<TF> TF_Q ;\n    typedef mpl::identity<TT> TT_Q ;\n\n    typedef typename mpl::not_<expr0>::type not_expr0 ;\n    typedef typename mpl::not_<expr1>::type not_expr1 ;\n\n    typedef typename mpl::and_<expr0,expr1>::type     caseTT ;\n    typedef typename mpl::and_<expr0,not_expr1>::type caseTF ;\n    typedef typename mpl::and_<not_expr0,expr1>::type caseFT ;\n\n    typedef mpl::if_<caseFT,FT,FF>                    choose_FT_FF_Q ;\n    typedef mpl::eval_if<caseTF,TF_Q,choose_FT_FF_Q> choose_TF_FT_FF_Q ;\n\n    typedef typename mpl::eval_if<caseTT,TT_Q,choose_TF_FT_FF_Q>::type type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/numeric_cast_traits.hpp",
    "content": "//\n//! Copyright (c) 2011-2012\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#if !defined(BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES)\n\n    #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp>\n\t\n\t#if !defined(BOOST_NO_LONG_LONG)\n        #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp>\n\t#endif\n\t\n#else\n#if !BOOST_PP_IS_ITERATING\n\n    #include <boost/preprocessor/seq/elem.hpp>\n    #include <boost/preprocessor/seq/size.hpp>\n    #include <boost/preprocessor/iteration/iterate.hpp>\n    \n    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n        #pragma wave option(preserve: 2, line: 0, output: \"preprocessed/numeric_cast_traits_common.hpp\")\n    #endif\n//\n//! Copyright (c) 2011-2012\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n        #pragma wave option(preserve: 1)\n    #endif\n\t\n\t//! These are the assumed common built in fundamental types (not typedefs/macros.)\n\t#define BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() \\\n        (char)                                            \\\n        (signed char)                                     \\\n        (unsigned char)                                   \\\n        (short)                                           \\\n        (unsigned short)                                  \\\n        (int)                                             \\\n        (unsigned int)                                    \\\n        (long)                                            \\\n        (unsigned long)                                   \\\n        (float)                                           \\\n        (double)                                          \\\n        (long double)                                     \\\n    /***/\n\t\n    #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()\n\t#define BOOST_NUMERIC_CONVERSION_SEQ_B() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()\n\nnamespace boost { namespace numeric {\n\n    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))\n    #include BOOST_PP_ITERATE()    \n\n}}//namespace boost::numeric;\n\n    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n        #pragma wave option(output: null)\n    #endif   \n\t\n\t#if ( defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) ) || !defined(BOOST_NO_LONG_LONG)\n\t\n\t    #undef BOOST_NUMERIC_CONVERSION_SEQ_A\n\t    #undef BOOST_NUMERIC_CONVERSION_SEQ_B\n\n\t    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n            #pragma wave option(preserve: 2, line: 0, output: \"preprocessed/numeric_cast_traits_long_long.hpp\")\n        #endif\n\n//\n//! Copyright (c) 2011-2012\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n        #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n            #pragma wave option(preserve: 1)\n        #endif\n\nnamespace boost { namespace numeric {\n\n    #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()(boost::long_long_type)(boost::ulong_long_type)\n\t#define BOOST_NUMERIC_CONVERSION_SEQ_B() (boost::long_long_type)(boost::ulong_long_type)\n    \n    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))\n    #include BOOST_PP_ITERATE()    \n\n}}//namespace boost::numeric;\n\n        #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)\n            #pragma wave option(output: null)\n        #endif   \n\t\n\t#endif\n\t\t\n    #undef BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES\n\t#undef BOOST_NUMERIC_CONVERSION_SEQ_A\n\t#undef BOOST_NUMERIC_CONVERSION_SEQ_B\n    \n#elif BOOST_PP_ITERATION_DEPTH() == 1\n\n    #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_B())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))\n    #include BOOST_PP_ITERATE()\n\n#elif BOOST_PP_ITERATION_DEPTH() == 2\n\n    //! Generate default traits for the specified source and target.\n    #define BOOST_NUMERIC_CONVERSION_A BOOST_PP_FRAME_ITERATION(1)\n    #define BOOST_NUMERIC_CONVERSION_B BOOST_PP_FRAME_ITERATION(2)\n\n    template <>\n    struct numeric_cast_traits\n        <\n            BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_SEQ_A())\n          , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())> rounding_policy;\n    };     \n\n    #undef BOOST_NUMERIC_CONVERSION_A\n    #undef BOOST_NUMERIC_CONVERSION_B\n\n#endif//! Depth 2.\n#endif// BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp",
    "content": "//\n//! Copyright (c) 2011-2012\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\t\n\t\n\t\nnamespace boost { namespace numeric {\n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , signed char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<signed char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , unsigned char\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned char> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , unsigned short\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned short> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , unsigned int\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned int> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , unsigned long\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<unsigned long> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , float\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<float> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<double> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , long double\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<long double> rounding_policy;\n    }; \n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp",
    "content": "//\n//! Copyright (c) 2011-2012\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\nnamespace boost { namespace numeric {\n    \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            char\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            signed char\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned char\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            short\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned short\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            int\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned int\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            unsigned long\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            float\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            double\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            long double\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            boost::long_long_type\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            boost::long_long_type\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            boost::ulong_long_type\n          , boost::long_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::long_long_type> rounding_policy;\n    }; \n    \n    template <>\n    struct numeric_cast_traits\n        <\n            boost::ulong_long_type\n          , boost::ulong_long_type\n        >\n    {\n        typedef def_overflow_handler overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<boost::ulong_long_type> rounding_policy;\n    }; \n}}\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/sign_mixture.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP\n\n#include \"boost/config.hpp\"\n#include \"boost/limits.hpp\"\n\n#include \"boost/numeric/conversion/sign_mixture_enum.hpp\"\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n\n#include \"boost/mpl/integral_c.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  // Integral Constants for 'SignMixture'\n  typedef mpl::integral_c<sign_mixture_enum, unsigned_to_unsigned> unsig2unsig_c ;\n  typedef mpl::integral_c<sign_mixture_enum, signed_to_signed>     sig2sig_c ;\n  typedef mpl::integral_c<sign_mixture_enum, signed_to_unsigned>   sig2unsig_c ;\n  typedef mpl::integral_c<sign_mixture_enum, unsigned_to_signed>   unsig2sig_c ;\n\n  // Metafunction:\n  //\n  //   get_sign_mixture<T,S>::type\n  //\n  // Selects the appropriate SignMixture Integral Constant for the combination T,S.\n  //\n  template<class T,class S>\n  struct get_sign_mixture\n  {\n    typedef mpl::bool_< ::std::numeric_limits<S>::is_signed > S_signed ;\n    typedef mpl::bool_< ::std::numeric_limits<T>::is_signed > T_signed ;\n\n    typedef typename\n      for_both<S_signed, T_signed, sig2sig_c, sig2unsig_c, unsig2sig_c, unsig2unsig_c>::type\n        type ;\n  } ;\n\n  // Metafunction:\n  //\n  //   for_sign_mixture<SignMixture,Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig>::type\n  //\n  // {SignMixture} is one of the Integral Constants for SignMixture, declared above.\n  // {Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig} are aribtrary types. (not metafunctions)\n  //\n  // According to the value of 'SignMixture', selects the corresponding type.\n  //\n  template<class SignMixture, class Sig2Sig, class Sig2Unsig, class Unsig2Sig, class Unsig2Unsig>\n  struct for_sign_mixture\n  {\n    typedef typename\n      ct_switch4<SignMixture\n                 , sig2sig_c, sig2unsig_c, unsig2sig_c  // default\n                 , Sig2Sig  , Sig2Unsig  , Unsig2Sig  , Unsig2Unsig\n                >::type\n        type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP\n\n#include \"boost/type_traits/is_arithmetic.hpp\"\n\n#include \"boost/numeric/conversion/udt_builtin_mixture_enum.hpp\"\n#include \"boost/numeric/conversion/detail/meta.hpp\"\n\n#include \"boost/mpl/integral_c.hpp\"\n\nnamespace boost { namespace numeric { namespace convdetail\n{\n  // Integral Constants for 'UdtMixture'\n  typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_builtin> builtin2builtin_c ;\n  typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_udt>     builtin2udt_c ;\n  typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_builtin>     udt2builtin_c ;\n  typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_udt>         udt2udt_c ;\n\n  // Metafunction:\n  //\n  //   for_udt_mixture<UdtMixture,BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt>::type\n  //\n  // {UdtMixture} is one of the Integral Constants for UdMixture, declared above.\n  // {BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt} are aribtrary types. (not metafunctions)\n  //\n  // According to the value of 'UdtMixture', selects the corresponding type.\n  //\n  template<class UdtMixture, class BuiltIn2BuiltIn, class BuiltIn2Udt, class Udt2BuiltIn, class Udt2Udt>\n  struct for_udt_builtin_mixture\n  {\n    typedef typename\n      ct_switch4<UdtMixture\n                 , builtin2builtin_c, builtin2udt_c, udt2builtin_c // default\n                 , BuiltIn2BuiltIn  , BuiltIn2Udt  , Udt2BuiltIn  , Udt2Udt\n                >::type\n        type ;\n  } ;\n\n  // Metafunction:\n  //\n  //   get_udt_mixture<T,S>::type\n  //\n  // Selects the appropriate UdtMixture Integral Constant for the combination T,S.\n  //\n  template<class T,class S>\n  struct get_udt_builtin_mixture\n  {\n    typedef is_arithmetic<S> S_builtin ;\n    typedef is_arithmetic<T> T_builtin ;\n\n    typedef typename\n      for_both<S_builtin, T_builtin, builtin2builtin_c, builtin2udt_c, udt2builtin_c, udt2udt_c>::type\n        type ;\n  } ;\n\n} } } // namespace boost::numeric::convdetail\n\n#endif\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/int_float_mixture_enum.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP\n\nnamespace boost { namespace numeric\n{\n  enum int_float_mixture_enum\n  {\n     integral_to_integral\n    ,integral_to_float\n    ,float_to_integral\n    ,float_to_float\n  } ;\n\n} } // namespace boost::numeric\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/numeric_cast_traits.hpp",
    "content": "//\n//! Copyright (c) 2011\n//! Brandon Kohn\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n#ifndef BOOST_NUMERIC_CAST_TRAITS_HPP\n#define BOOST_NUMERIC_CAST_TRAITS_HPP\n\n#include <boost/numeric/conversion/converter_policies.hpp>\n\nnamespace boost { namespace numeric {\n\n    template <typename Target, typename Source, typename EnableIf = void>\n    struct numeric_cast_traits\n    {\n        typedef def_overflow_handler    overflow_policy;\n        typedef UseInternalRangeChecker range_checking_policy;\n        typedef Trunc<Source>           rounding_policy;\n    };\n\n}}//namespace boost::numeric;\n\n#if !defined( BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS )\n#include <boost/cstdint.hpp>\n#include <boost/numeric/conversion/detail/numeric_cast_traits.hpp>\n#endif//!defined BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS\n\n#endif//BOOST_NUMERIC_CAST_TRAITS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/sign_mixture_enum.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP\n\nnamespace boost { namespace numeric\n{\n  enum sign_mixture_enum\n  {\n     unsigned_to_unsigned\n    ,signed_to_signed\n    ,signed_to_unsigned\n    ,unsigned_to_signed\n  } ;\n\n} } // namespace boost::numeric\n\n#endif\n//\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp",
    "content": "//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004\n//  Use, modification, and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See library home page at http://www.boost.org/libs/numeric/conversion\n//\n// Contact the author at: fernando_cacciola@hotmail.com\n// \n#ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP\n#define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP\n\nnamespace boost { namespace numeric\n{\n  enum udt_builtin_mixture_enum\n  {\n     builtin_to_builtin\n    ,builtin_to_udt\n    ,udt_to_builtin\n    ,udt_to_udt\n  } ;\n\n} } // namespace boost::numeric\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/optional/optional.hpp",
    "content": "// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n// Revisions:\n// 27 Apr 2008 (improved swap) Fernando Cacciola, Niels Dekker, Thorsten Ottosen\n//\n#ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP\n#define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP\n\n#include <new>\n#include <algorithm>\n\n#include <boost/config.hpp>\n#include <boost/assert.hpp>\n#include <boost/type.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/type_traits/has_nothrow_constructor.hpp>\n#include <boost/type_traits/type_with_alignment.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/not.hpp>\n#include <boost/detail/reference_content.hpp>\n#include <boost/none.hpp>\n#include <boost/utility/swap.hpp>\n#include <boost/utility/addressof.hpp>\n#include <boost/utility/compare_pointees.hpp>\n#include <boost/utility/in_place_factory.hpp>\n\n#include <boost/optional/optional_fwd.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1200)\n// VC6.0 has the following bug:\n//   When a templated assignment operator exist, an implicit conversion\n//   constructing an optional<T> is used when assigment of the form:\n//     optional<T> opt ; opt = T(...);\n//   is compiled.\n//   However, optional's ctor is _explicit_ and the assignemt shouldn't compile.\n//   Therefore, for VC6.0 templated assignment is disabled.\n//\n#define BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)\n// VC7.0 has the following bug:\n//   When both a non-template and a template copy-ctor exist\n//   and the templated version is made 'explicit', the explicit is also\n//   given to the non-templated version, making the class non-implicitely-copyable.\n//\n#define BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)\n// AFAICT only VC7.1 correctly resolves the overload set\n// that includes the in-place factory taking functions,\n// so for the other VC versions, in-place factory support\n// is disabled\n#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT\n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)\n// BCB (5.5.1) cannot parse the nested template struct in an inplace factory.\n#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT\n#endif\n\n#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) \\\n    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581) )\n// BCB (up to 5.64) has the following bug:\n//   If there is a member function/operator template of the form\n//     template<class Expr> mfunc( Expr expr ) ;\n//   some calls are resolved to this even if there are other better matches.\n//   The effect of this bug is that calls to converting ctors and assignments\n//   are incrorrectly sink to this general catch-all member function template as shown above.\n#define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION\n#endif\n\n#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) > 302 \\\n    && !defined(__INTEL_COMPILER)\n// GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with\n// regard to violation of the strict aliasing rules. The optional< T > storage type is marked\n// with this attribute in order to let the compiler know that it will alias objects of type T\n// and silence compilation warnings.\n#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS\n#endif\n\n// Daniel Wallin discovered that bind/apply.hpp badly interacts with the apply<>\n// member template of a factory as used in the optional<> implementation.\n// He proposed this simple fix which is to move the call to apply<> outside\n// namespace boost.\nnamespace boost_optional_detail\n{\n  template <class T, class Factory>\n  inline void construct(Factory const& factory, void* address)\n  {\n    factory.BOOST_NESTED_TEMPLATE apply<T>(address);\n  }\n}\n\n\nnamespace boost {\n\nclass in_place_factory_base ;\nclass typed_in_place_factory_base ;\n\n// This forward is needed to refer to namespace scope swap from the member swap\ntemplate<class T> void swap ( optional<T>& x, optional<T>& y );\n\nnamespace optional_detail {\n\n// This local class is used instead of that in \"aligned_storage.hpp\"\n// because I've found the 'official' class to ICE BCB5.5\n// when some types are used with optional<>\n// (due to sizeof() passed down as a non-type template parameter)\ntemplate <class T>\nclass aligned_storage\n{\n    // Borland ICEs if unnamed unions are used for this!\n    union\n    // This works around GCC warnings about breaking strict aliasing rules when casting storage address to T*\n#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)\n    __attribute__((may_alias))\n#endif\n    dummy_u\n    {\n        char data[ sizeof(T) ];\n        BOOST_DEDUCED_TYPENAME type_with_alignment<\n          ::boost::alignment_of<T>::value >::type aligner_;\n    } dummy_ ;\n\n  public:\n\n#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)\n    void const* address() const { return &dummy_; }\n    void      * address()       { return &dummy_; }\n#else\n    void const* address() const { return dummy_.data; }\n    void      * address()       { return dummy_.data; }\n#endif\n} ;\n\ntemplate<class T>\nstruct types_when_isnt_ref\n{\n  typedef T const& reference_const_type ;\n  typedef T &      reference_type ;\n  typedef T const* pointer_const_type ;\n  typedef T *      pointer_type ;\n  typedef T const& argument_type ;\n} ;\ntemplate<class T>\nstruct types_when_is_ref\n{\n  typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type raw_type ;\n\n  typedef raw_type& reference_const_type ;\n  typedef raw_type& reference_type ;\n  typedef raw_type* pointer_const_type ;\n  typedef raw_type* pointer_type ;\n  typedef raw_type& argument_type ;\n} ;\n\nstruct optional_tag {} ;\n\ntemplate<class T>\nclass optional_base : public optional_tag\n{\n  private :\n\n    typedef\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    BOOST_DEDUCED_TYPENAME\n#endif\n    ::boost::detail::make_reference_content<T>::type internal_type ;\n\n    typedef aligned_storage<internal_type> storage_type ;\n\n    typedef types_when_isnt_ref<T> types_when_not_ref ;\n    typedef types_when_is_ref<T>   types_when_ref   ;\n\n    typedef optional_base<T> this_type ;\n\n  protected :\n\n    typedef T value_type ;\n\n    typedef mpl::true_  is_reference_tag ;\n    typedef mpl::false_ is_not_reference_tag ;\n\n    typedef BOOST_DEDUCED_TYPENAME is_reference<T>::type is_reference_predicate ;\n\n  public:\n    typedef BOOST_DEDUCED_TYPENAME mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;\n\n  protected:\n    typedef bool (this_type::*unspecified_bool_type)() const;\n\n    typedef BOOST_DEDUCED_TYPENAME types::reference_type       reference_type ;\n    typedef BOOST_DEDUCED_TYPENAME types::reference_const_type reference_const_type ;\n    typedef BOOST_DEDUCED_TYPENAME types::pointer_type         pointer_type ;\n    typedef BOOST_DEDUCED_TYPENAME types::pointer_const_type   pointer_const_type ;\n    typedef BOOST_DEDUCED_TYPENAME types::argument_type        argument_type ;\n\n    // Creates an optional<T> uninitialized.\n    // No-throw\n    optional_base()\n      :\n      m_initialized(false) {}\n\n    // Creates an optional<T> uninitialized.\n    // No-throw\n    optional_base ( none_t )\n      :\n      m_initialized(false) {}\n\n    // Creates an optional<T> initialized with 'val'.\n    // Can throw if T::T(T const&) does\n    optional_base ( argument_type val )\n      :\n      m_initialized(false)\n    {\n      construct(val);\n    }\n\n    // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialzed optional<T>.\n    // Can throw if T::T(T const&) does\n    optional_base ( bool cond, argument_type val )\n      :\n      m_initialized(false)\n    {\n      if ( cond )\n        construct(val);\n    }\n\n    // Creates a deep copy of another optional<T>\n    // Can throw if T::T(T const&) does\n    optional_base ( optional_base const& rhs )\n      :\n      m_initialized(false)\n    {\n      if ( rhs.is_initialized() )\n        construct(rhs.get_impl());\n    }\n\n\n    // This is used for both converting and in-place constructions.\n    // Derived classes use the 'tag' to select the appropriate\n    // implementation (the correct 'construct()' overload)\n    template<class Expr>\n    explicit optional_base ( Expr const& expr, Expr const* tag )\n      :\n      m_initialized(false)\n    {\n      construct(expr,tag);\n    }\n\n\n\n    // No-throw (assuming T::~T() doesn't)\n    ~optional_base() { destroy() ; }\n\n    // Assigns from another optional<T> (deep-copies the rhs value)\n    void assign ( optional_base const& rhs )\n    {\n      if (is_initialized())\n      {\n        if ( rhs.is_initialized() )\n             assign_value(rhs.get_impl(), is_reference_predicate() );\n        else destroy();\n      }\n      else\n      {\n        if ( rhs.is_initialized() )\n          construct(rhs.get_impl());\n      }\n    }\n\n    // Assigns from another _convertible_ optional<U> (deep-copies the rhs value)\n    template<class U>\n    void assign ( optional<U> const& rhs )\n    {\n      if (is_initialized())\n      {\n        if ( rhs.is_initialized() )\n             assign_value(static_cast<value_type>(rhs.get()), is_reference_predicate() );\n        else destroy();\n      }\n      else\n      {\n        if ( rhs.is_initialized() )\n          construct(static_cast<value_type>(rhs.get()));\n      }\n    }\n\n    // Assigns from a T (deep-copies the rhs value)\n    void assign ( argument_type val )\n    {\n      if (is_initialized())\n           assign_value(val, is_reference_predicate() );\n      else construct(val);\n    }\n\n    // Assigns from \"none\", destroying the current value, if any, leaving this UNINITIALIZED\n    // No-throw (assuming T::~T() doesn't)\n    void assign ( none_t ) { destroy(); }\n\n#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT\n    template<class Expr>\n    void assign_expr ( Expr const& expr, Expr const* tag )\n      {\n        if (is_initialized())\n             assign_expr_to_initialized(expr,tag);\n        else construct(expr,tag);\n      }\n#endif\n\n  public :\n\n    // Destroys the current value, if any, leaving this UNINITIALIZED\n    // No-throw (assuming T::~T() doesn't)\n    void reset() { destroy(); }\n\n    // Replaces the current value -if any- with 'val'\n    void reset ( argument_type val ) { assign(val); }\n\n    // Returns a pointer to the value if this is initialized, otherwise,\n    // returns NULL.\n    // No-throw\n    pointer_const_type get_ptr() const { return m_initialized ? get_ptr_impl() : 0 ; }\n    pointer_type       get_ptr()       { return m_initialized ? get_ptr_impl() : 0 ; }\n\n    bool is_initialized() const { return m_initialized ; }\n\n  protected :\n\n    void construct ( argument_type val )\n     {\n       new (m_storage.address()) internal_type(val) ;\n       m_initialized = true ;\n     }\n\n#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT\n    // Constructs in-place using the given factory\n    template<class Expr>\n    void construct ( Expr const& factory, in_place_factory_base const* )\n     {\n       BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;\n       boost_optional_detail::construct<value_type>(factory, m_storage.address());\n       m_initialized = true ;\n     }\n\n    // Constructs in-place using the given typed factory\n    template<class Expr>\n    void construct ( Expr const& factory, typed_in_place_factory_base const* )\n     {\n       BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;\n       factory.apply(m_storage.address()) ;\n       m_initialized = true ;\n     }\n\n    template<class Expr>\n    void assign_expr_to_initialized ( Expr const& factory, in_place_factory_base const* tag )\n     {\n       destroy();\n       construct(factory,tag);\n     }\n\n    // Constructs in-place using the given typed factory\n    template<class Expr>\n    void assign_expr_to_initialized ( Expr const& factory, typed_in_place_factory_base const* tag )\n     {\n       destroy();\n       construct(factory,tag);\n     }\n#endif\n\n    // Constructs using any expression implicitely convertible to the single argument\n    // of a one-argument T constructor.\n    // Converting constructions of optional<T> from optional<U> uses this function with\n    // 'Expr' being of type 'U' and relying on a converting constructor of T from U.\n    template<class Expr>\n    void construct ( Expr const& expr, void const* )\n     {\n       new (m_storage.address()) internal_type(expr) ;\n       m_initialized = true ;\n     }\n\n    // Assigns using a form any expression implicitely convertible to the single argument\n    // of a T's assignment operator.\n    // Converting assignments of optional<T> from optional<U> uses this function with\n    // 'Expr' being of type 'U' and relying on a converting assignment of T from U.\n    template<class Expr>\n    void assign_expr_to_initialized ( Expr const& expr, void const* )\n     {\n       assign_value(expr, is_reference_predicate());\n     }\n\n#ifdef BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION\n    // BCB5.64 (and probably lower versions) workaround.\n    //   The in-place factories are supported by means of catch-all constructors\n    //   and assignment operators (the functions are parameterized in terms of\n    //   an arbitrary 'Expr' type)\n    //   This compiler incorrectly resolves the overload set and sinks optional<T> and optional<U>\n    //   to the 'Expr'-taking functions even though explicit overloads are present for them.\n    //   Thus, the following overload is needed to properly handle the case when the 'lhs'\n    //   is another optional.\n    //\n    // For VC<=70 compilers this workaround dosen't work becasue the comnpiler issues and error\n    // instead of choosing the wrong overload\n    //\n    // Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)\n    template<class Expr>\n    void construct ( Expr const& expr, optional_tag const* )\n     {\n       if ( expr.is_initialized() )\n       {\n         // An exception can be thrown here.\n         // It it happens, THIS will be left uninitialized.\n         new (m_storage.address()) internal_type(expr.get()) ;\n         m_initialized = true ;\n       }\n     }\n#endif\n\n    void assign_value ( argument_type val, is_not_reference_tag ) { get_impl() = val; }\n    void assign_value ( argument_type val, is_reference_tag     ) { construct(val); }\n\n    void destroy()\n    {\n      if ( m_initialized )\n        destroy_impl(is_reference_predicate()) ;\n    }\n\n    unspecified_bool_type safe_bool() const { return m_initialized ? &this_type::is_initialized : 0 ; }\n\n    reference_const_type get_impl() const { return dereference(get_object(), is_reference_predicate() ) ; }\n    reference_type       get_impl()       { return dereference(get_object(), is_reference_predicate() ) ; }\n\n    pointer_const_type get_ptr_impl() const { return cast_ptr(get_object(), is_reference_predicate() ) ; }\n    pointer_type       get_ptr_impl()       { return cast_ptr(get_object(), is_reference_predicate() ) ; }\n\n  private :\n\n    // internal_type can be either T or reference_content<T>\n#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)\n    // This workaround is supposed to silence GCC warnings about broken strict aliasing rules\n    internal_type const* get_object() const\n    {\n        union { void const* ap_pvoid; internal_type const* as_ptype; } caster = { m_storage.address() };\n        return caster.as_ptype;\n    }\n    internal_type *      get_object()\n    {\n        union { void* ap_pvoid; internal_type* as_ptype; } caster = { m_storage.address() };\n        return caster.as_ptype;\n    }\n#else\n    internal_type const* get_object() const { return static_cast<internal_type const*>(m_storage.address()); }\n    internal_type *      get_object()       { return static_cast<internal_type *>     (m_storage.address()); }\n#endif\n\n    // reference_content<T> lacks an implicit conversion to T&, so the following is needed to obtain a proper reference.\n    reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *p ; }\n    reference_type       dereference( internal_type*       p, is_not_reference_tag )       { return *p ; }\n    reference_const_type dereference( internal_type const* p, is_reference_tag     ) const { return p->get() ; }\n    reference_type       dereference( internal_type*       p, is_reference_tag     )       { return p->get() ; }\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))\n    void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->internal_type::~internal_type() ; m_initialized = false ; }\n#else\n    void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->T::~T() ; m_initialized = false ; }\n#endif\n\n    void destroy_impl ( is_reference_tag     ) { m_initialized = false ; }\n\n    // If T is of reference type, trying to get a pointer to the held value must result in a compile-time error.\n    // Decent compilers should disallow conversions from reference_content<T>* to T*, but just in case,\n    // the following olverloads are used to filter out the case and guarantee an error in case of T being a reference.\n    pointer_const_type cast_ptr( internal_type const* p, is_not_reference_tag ) const { return p ; }\n    pointer_type       cast_ptr( internal_type *      p, is_not_reference_tag )       { return p ; }\n    pointer_const_type cast_ptr( internal_type const* p, is_reference_tag     ) const { return &p->get() ; }\n    pointer_type       cast_ptr( internal_type *      p, is_reference_tag     )       { return &p->get() ; }\n\n    bool m_initialized ;\n    storage_type m_storage ;\n} ;\n\n} // namespace optional_detail\n\ntemplate<class T>\nclass optional : public optional_detail::optional_base<T>\n{\n    typedef optional_detail::optional_base<T> base ;\n\n    typedef BOOST_DEDUCED_TYPENAME base::unspecified_bool_type  unspecified_bool_type ;\n\n  public :\n\n    typedef optional<T> this_type ;\n\n    typedef BOOST_DEDUCED_TYPENAME base::value_type           value_type ;\n    typedef BOOST_DEDUCED_TYPENAME base::reference_type       reference_type ;\n    typedef BOOST_DEDUCED_TYPENAME base::reference_const_type reference_const_type ;\n    typedef BOOST_DEDUCED_TYPENAME base::pointer_type         pointer_type ;\n    typedef BOOST_DEDUCED_TYPENAME base::pointer_const_type   pointer_const_type ;\n    typedef BOOST_DEDUCED_TYPENAME base::argument_type        argument_type ;\n\n    // Creates an optional<T> uninitialized.\n    // No-throw\n    optional() : base() {}\n\n    // Creates an optional<T> uninitialized.\n    // No-throw\n    optional( none_t none_ ) : base(none_) {}\n\n    // Creates an optional<T> initialized with 'val'.\n    // Can throw if T::T(T const&) does\n    optional ( argument_type val ) : base(val) {}\n\n    // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialized optional.\n    // Can throw if T::T(T const&) does\n    optional ( bool cond, argument_type val ) : base(cond,val) {}\n\n#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR\n    // NOTE: MSVC needs templated versions first\n\n    // Creates a deep copy of another convertible optional<U>\n    // Requires a valid conversion from U to T.\n    // Can throw if T::T(U const&) does\n    template<class U>\n    explicit optional ( optional<U> const& rhs )\n      :\n      base()\n    {\n      if ( rhs.is_initialized() )\n        this->construct(rhs.get());\n    }\n#endif\n\n#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT\n    // Creates an optional<T> with an expression which can be either\n    //  (a) An instance of InPlaceFactory (i.e. in_place(a,b,...,n);\n    //  (b) An instance of TypedInPlaceFactory ( i.e. in_place<T>(a,b,...,n);\n    //  (c) Any expression implicitely convertible to the single type\n    //      of a one-argument T's constructor.\n    //  (d*) Weak compilers (BCB) might also resolved Expr as optional<T> and optional<U>\n    //       even though explicit overloads are present for these.\n    // Depending on the above some T ctor is called.\n    // Can throw is the resolved T ctor throws.\n    template<class Expr>\n    explicit optional ( Expr const& expr ) : base(expr,boost::addressof(expr)) {}\n#endif\n\n    // Creates a deep copy of another optional<T>\n    // Can throw if T::T(T const&) does\n    optional ( optional const& rhs ) : base( static_cast<base const&>(rhs) ) {}\n\n   // No-throw (assuming T::~T() doesn't)\n    ~optional() {}\n\n#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)\n    // Assigns from an expression. See corresponding constructor.\n    // Basic Guarantee: If the resolved T ctor throws, this is left UNINITIALIZED\n    template<class Expr>\n    optional& operator= ( Expr const& expr )\n      {\n        this->assign_expr(expr,boost::addressof(expr));\n        return *this ;\n      }\n#endif\n\n\n#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT\n    // Assigns from another convertible optional<U> (converts && deep-copies the rhs value)\n    // Requires a valid conversion from U to T.\n    // Basic Guarantee: If T::T( U const& ) throws, this is left UNINITIALIZED\n    template<class U>\n    optional& operator= ( optional<U> const& rhs )\n      {\n        this->assign(rhs);\n        return *this ;\n      }\n#endif\n\n    // Assigns from another optional<T> (deep-copies the rhs value)\n    // Basic Guarantee: If T::T( T const& ) throws, this is left UNINITIALIZED\n    //  (NOTE: On BCB, this operator is not actually called and left is left UNMODIFIED in case of a throw)\n    optional& operator= ( optional const& rhs )\n      {\n        this->assign( static_cast<base const&>(rhs) ) ;\n        return *this ;\n      }\n\n    // Assigns from a T (deep-copies the rhs value)\n    // Basic Guarantee: If T::( T const& ) throws, this is left UNINITIALIZED\n    optional& operator= ( argument_type val )\n      {\n        this->assign( val ) ;\n        return *this ;\n      }\n\n    // Assigns from a \"none\"\n    // Which destroys the current value, if any, leaving this UNINITIALIZED\n    // No-throw (assuming T::~T() doesn't)\n    optional& operator= ( none_t none_ )\n      {\n        this->assign( none_ ) ;\n        return *this ;\n      }\n\n    void swap( optional & arg )\n      {\n        // allow for Koenig lookup\n        using boost::swap;\n        swap(*this, arg);\n      }\n\n\n    // Returns a reference to the value if this is initialized, otherwise,\n    // the behaviour is UNDEFINED\n    // No-throw\n    reference_const_type get() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }\n    reference_type       get()       { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }\n\n    // Returns a copy of the value if this is initialized, 'v' otherwise\n    reference_const_type get_value_or ( reference_const_type v ) const { return this->is_initialized() ? get() : v ; }\n    reference_type       get_value_or ( reference_type       v )       { return this->is_initialized() ? get() : v ; }\n\n    // Returns a pointer to the value if this is initialized, otherwise,\n    // the behaviour is UNDEFINED\n    // No-throw\n    pointer_const_type operator->() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }\n    pointer_type       operator->()       { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }\n\n    // Returns a reference to the value if this is initialized, otherwise,\n    // the behaviour is UNDEFINED\n    // No-throw\n    reference_const_type operator *() const { return this->get() ; }\n    reference_type       operator *()       { return this->get() ; }\n\n    // implicit conversion to \"bool\"\n    // No-throw\n    operator unspecified_bool_type() const { return this->safe_bool() ; }\n\n    // This is provided for those compilers which don't like the conversion to bool\n    // on some contexts.\n    bool operator!() const { return !this->is_initialized() ; }\n} ;\n\n// Returns optional<T>(v)\ntemplate<class T>\ninline\noptional<T> make_optional ( T const& v  )\n{\n  return optional<T>(v);\n}\n\n// Returns optional<T>(cond,v)\ntemplate<class T>\ninline\noptional<T> make_optional ( bool cond, T const& v )\n{\n  return optional<T>(cond,v);\n}\n\n// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.\n// No-throw\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::reference_const_type\nget ( optional<T> const& opt )\n{\n  return opt.get() ;\n}\n\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::reference_type\nget ( optional<T>& opt )\n{\n  return opt.get() ;\n}\n\n// Returns a pointer to the value if this is initialized, otherwise, returns NULL.\n// No-throw\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type\nget ( optional<T> const* opt )\n{\n  return opt->get_ptr() ;\n}\n\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::pointer_type\nget ( optional<T>* opt )\n{\n  return opt->get_ptr() ;\n}\n\n// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.\n// No-throw\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::reference_const_type\nget_optional_value_or ( optional<T> const& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type v )\n{\n  return opt.get_value_or(v) ;\n}\n\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::reference_type\nget_optional_value_or ( optional<T>& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_type v )\n{\n  return opt.get_value_or(v) ;\n}\n\n// Returns a pointer to the value if this is initialized, otherwise, returns NULL.\n// No-throw\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type\nget_pointer ( optional<T> const& opt )\n{\n  return opt.get_ptr() ;\n}\n\ntemplate<class T>\ninline\nBOOST_DEDUCED_TYPENAME optional<T>::pointer_type\nget_pointer ( optional<T>& opt )\n{\n  return opt.get_ptr() ;\n}\n\n// optional's relational operators ( ==, !=, <, >, <=, >= ) have deep-semantics (compare values).\n// WARNING: This is UNLIKE pointers. Use equal_pointees()/less_pointess() in generic code instead.\n\n\n//\n// optional<T> vs optional<T> cases\n//\n\ntemplate<class T>\ninline\nbool operator == ( optional<T> const& x, optional<T> const& y )\n{ return equal_pointees(x,y); }\n\ntemplate<class T>\ninline\nbool operator < ( optional<T> const& x, optional<T> const& y )\n{ return less_pointees(x,y); }\n\ntemplate<class T>\ninline\nbool operator != ( optional<T> const& x, optional<T> const& y )\n{ return !( x == y ) ; }\n\ntemplate<class T>\ninline\nbool operator > ( optional<T> const& x, optional<T> const& y )\n{ return y < x ; }\n\ntemplate<class T>\ninline\nbool operator <= ( optional<T> const& x, optional<T> const& y )\n{ return !( y < x ) ; }\n\ntemplate<class T>\ninline\nbool operator >= ( optional<T> const& x, optional<T> const& y )\n{ return !( x < y ) ; }\n\n\n//\n// optional<T> vs T cases\n//\ntemplate<class T>\ninline\nbool operator == ( optional<T> const& x, T const& y )\n{ return equal_pointees(x, optional<T>(y)); }\n\ntemplate<class T>\ninline\nbool operator < ( optional<T> const& x, T const& y )\n{ return less_pointees(x, optional<T>(y)); }\n\ntemplate<class T>\ninline\nbool operator != ( optional<T> const& x, T const& y )\n{ return !( x == y ) ; }\n\ntemplate<class T>\ninline\nbool operator > ( optional<T> const& x, T const& y )\n{ return y < x ; }\n\ntemplate<class T>\ninline\nbool operator <= ( optional<T> const& x, T const& y )\n{ return !( y < x ) ; }\n\ntemplate<class T>\ninline\nbool operator >= ( optional<T> const& x, T const& y )\n{ return !( x < y ) ; }\n\n//\n// T vs optional<T> cases\n//\n\ntemplate<class T>\ninline\nbool operator == ( T const& x, optional<T> const& y )\n{ return equal_pointees( optional<T>(x), y ); }\n\ntemplate<class T>\ninline\nbool operator < ( T const& x, optional<T> const& y )\n{ return less_pointees( optional<T>(x), y ); }\n\ntemplate<class T>\ninline\nbool operator != ( T const& x, optional<T> const& y )\n{ return !( x == y ) ; }\n\ntemplate<class T>\ninline\nbool operator > ( T const& x, optional<T> const& y )\n{ return y < x ; }\n\ntemplate<class T>\ninline\nbool operator <= ( T const& x, optional<T> const& y )\n{ return !( y < x ) ; }\n\ntemplate<class T>\ninline\nbool operator >= ( T const& x, optional<T> const& y )\n{ return !( x < y ) ; }\n\n\n//\n// optional<T> vs none cases\n//\n\ntemplate<class T>\ninline\nbool operator == ( optional<T> const& x, none_t )\n{ return equal_pointees(x, optional<T>() ); }\n\ntemplate<class T>\ninline\nbool operator < ( optional<T> const& x, none_t )\n{ return less_pointees(x,optional<T>() ); }\n\ntemplate<class T>\ninline\nbool operator != ( optional<T> const& x, none_t y )\n{ return !( x == y ) ; }\n\ntemplate<class T>\ninline\nbool operator > ( optional<T> const& x, none_t y )\n{ return y < x ; }\n\ntemplate<class T>\ninline\nbool operator <= ( optional<T> const& x, none_t y )\n{ return !( y < x ) ; }\n\ntemplate<class T>\ninline\nbool operator >= ( optional<T> const& x, none_t y )\n{ return !( x < y ) ; }\n\n//\n// none vs optional<T> cases\n//\n\ntemplate<class T>\ninline\nbool operator == ( none_t , optional<T> const& y )\n{ return equal_pointees(optional<T>() ,y); }\n\ntemplate<class T>\ninline\nbool operator < ( none_t , optional<T> const& y )\n{ return less_pointees(optional<T>() ,y); }\n\ntemplate<class T>\ninline\nbool operator != ( none_t x, optional<T> const& y )\n{ return !( x == y ) ; }\n\ntemplate<class T>\ninline\nbool operator > ( none_t x, optional<T> const& y )\n{ return y < x ; }\n\ntemplate<class T>\ninline\nbool operator <= ( none_t x, optional<T> const& y )\n{ return !( y < x ) ; }\n\ntemplate<class T>\ninline\nbool operator >= ( none_t x, optional<T> const& y )\n{ return !( x < y ) ; }\n\nnamespace optional_detail {\n\ntemplate<bool use_default_constructor> struct swap_selector;\n\ntemplate<>\nstruct swap_selector<true>\n{\n    template<class T>\n    static void optional_swap ( optional<T>& x, optional<T>& y )\n    {\n        const bool hasX = !!x;\n        const bool hasY = !!y;\n\n        if ( !hasX && !hasY )\n            return;\n\n        if( !hasX )\n            x = boost::in_place();\n        else if ( !hasY )\n            y = boost::in_place();\n\n        // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers\n        boost::swap(x.get(),y.get());\n\n        if( !hasX )\n            y = boost::none ;\n        else if( !hasY )\n            x = boost::none ;\n    }\n};\n\ntemplate<>\nstruct swap_selector<false>\n{\n    template<class T>\n    static void optional_swap ( optional<T>& x, optional<T>& y )\n    {\n        const bool hasX = !!x;\n        const bool hasY = !!y;\n\n        if ( !hasX && hasY )\n        {\n            x = y.get();\n            y = boost::none ;\n        }\n        else if ( hasX && !hasY )\n        {\n            y = x.get();\n            x = boost::none ;\n        }\n        else if ( hasX && hasY )\n        {\n            // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers\n            boost::swap(x.get(),y.get());\n        }\n    }\n};\n\n} // namespace optional_detail\n\ntemplate<class T>\nstruct optional_swap_should_use_default_constructor : has_nothrow_default_constructor<T> {} ;\n\ntemplate<class T> inline void swap ( optional<T>& x, optional<T>& y )\n{\n    optional_detail::swap_selector<optional_swap_should_use_default_constructor<T>::value>::optional_swap(x, y);\n}\n\n} // namespace boost\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/optional/optional_fwd.hpp",
    "content": "// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n// Revisions:\n// 10 May 2008 (added swap related forward declaration) Niels Dekker\n// \n#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP\n#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP\n\nnamespace boost {\n\ntemplate<class T> class optional ;\n\ntemplate<class T> void swap ( optional<T>& , optional<T>& ) ;\n\ntemplate<class T> struct optional_swap_should_use_default_constructor ;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/optional.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_OPTIONAL_FLC_19NOV2002_HPP\n#define BOOST_OPTIONAL_FLC_19NOV2002_HPP\n\n#include \"boost/optional/optional.hpp\"\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/add.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ADD */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ADD(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# else\n#    define BOOST_PP_ADD(x, y) BOOST_PP_ADD_I(x, y)\n#    define BOOST_PP_ADD_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# endif\n#\n# define BOOST_PP_ADD_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I xy\n# else\n#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))\n# endif\n#\n# define BOOST_PP_ADD_O_I(x, y) (BOOST_PP_INC(x), BOOST_PP_DEC(y))\n#\n# /* BOOST_PP_ADD_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# else\n#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_ADD_D_I(d, x, y)\n#    define BOOST_PP_ADD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/dec.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_DEC */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_DEC(x) BOOST_PP_DEC_I(x)\n# else\n#    define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x))\n#    define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par\n# endif\n#\n# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x\n#\n# define BOOST_PP_DEC_0 0\n# define BOOST_PP_DEC_1 0\n# define BOOST_PP_DEC_2 1\n# define BOOST_PP_DEC_3 2\n# define BOOST_PP_DEC_4 3\n# define BOOST_PP_DEC_5 4\n# define BOOST_PP_DEC_6 5\n# define BOOST_PP_DEC_7 6\n# define BOOST_PP_DEC_8 7\n# define BOOST_PP_DEC_9 8\n# define BOOST_PP_DEC_10 9\n# define BOOST_PP_DEC_11 10\n# define BOOST_PP_DEC_12 11\n# define BOOST_PP_DEC_13 12\n# define BOOST_PP_DEC_14 13\n# define BOOST_PP_DEC_15 14\n# define BOOST_PP_DEC_16 15\n# define BOOST_PP_DEC_17 16\n# define BOOST_PP_DEC_18 17\n# define BOOST_PP_DEC_19 18\n# define BOOST_PP_DEC_20 19\n# define BOOST_PP_DEC_21 20\n# define BOOST_PP_DEC_22 21\n# define BOOST_PP_DEC_23 22\n# define BOOST_PP_DEC_24 23\n# define BOOST_PP_DEC_25 24\n# define BOOST_PP_DEC_26 25\n# define BOOST_PP_DEC_27 26\n# define BOOST_PP_DEC_28 27\n# define BOOST_PP_DEC_29 28\n# define BOOST_PP_DEC_30 29\n# define BOOST_PP_DEC_31 30\n# define BOOST_PP_DEC_32 31\n# define BOOST_PP_DEC_33 32\n# define BOOST_PP_DEC_34 33\n# define BOOST_PP_DEC_35 34\n# define BOOST_PP_DEC_36 35\n# define BOOST_PP_DEC_37 36\n# define BOOST_PP_DEC_38 37\n# define BOOST_PP_DEC_39 38\n# define BOOST_PP_DEC_40 39\n# define BOOST_PP_DEC_41 40\n# define BOOST_PP_DEC_42 41\n# define BOOST_PP_DEC_43 42\n# define BOOST_PP_DEC_44 43\n# define BOOST_PP_DEC_45 44\n# define BOOST_PP_DEC_46 45\n# define BOOST_PP_DEC_47 46\n# define BOOST_PP_DEC_48 47\n# define BOOST_PP_DEC_49 48\n# define BOOST_PP_DEC_50 49\n# define BOOST_PP_DEC_51 50\n# define BOOST_PP_DEC_52 51\n# define BOOST_PP_DEC_53 52\n# define BOOST_PP_DEC_54 53\n# define BOOST_PP_DEC_55 54\n# define BOOST_PP_DEC_56 55\n# define BOOST_PP_DEC_57 56\n# define BOOST_PP_DEC_58 57\n# define BOOST_PP_DEC_59 58\n# define BOOST_PP_DEC_60 59\n# define BOOST_PP_DEC_61 60\n# define BOOST_PP_DEC_62 61\n# define BOOST_PP_DEC_63 62\n# define BOOST_PP_DEC_64 63\n# define BOOST_PP_DEC_65 64\n# define BOOST_PP_DEC_66 65\n# define BOOST_PP_DEC_67 66\n# define BOOST_PP_DEC_68 67\n# define BOOST_PP_DEC_69 68\n# define BOOST_PP_DEC_70 69\n# define BOOST_PP_DEC_71 70\n# define BOOST_PP_DEC_72 71\n# define BOOST_PP_DEC_73 72\n# define BOOST_PP_DEC_74 73\n# define BOOST_PP_DEC_75 74\n# define BOOST_PP_DEC_76 75\n# define BOOST_PP_DEC_77 76\n# define BOOST_PP_DEC_78 77\n# define BOOST_PP_DEC_79 78\n# define BOOST_PP_DEC_80 79\n# define BOOST_PP_DEC_81 80\n# define BOOST_PP_DEC_82 81\n# define BOOST_PP_DEC_83 82\n# define BOOST_PP_DEC_84 83\n# define BOOST_PP_DEC_85 84\n# define BOOST_PP_DEC_86 85\n# define BOOST_PP_DEC_87 86\n# define BOOST_PP_DEC_88 87\n# define BOOST_PP_DEC_89 88\n# define BOOST_PP_DEC_90 89\n# define BOOST_PP_DEC_91 90\n# define BOOST_PP_DEC_92 91\n# define BOOST_PP_DEC_93 92\n# define BOOST_PP_DEC_94 93\n# define BOOST_PP_DEC_95 94\n# define BOOST_PP_DEC_96 95\n# define BOOST_PP_DEC_97 96\n# define BOOST_PP_DEC_98 97\n# define BOOST_PP_DEC_99 98\n# define BOOST_PP_DEC_100 99\n# define BOOST_PP_DEC_101 100\n# define BOOST_PP_DEC_102 101\n# define BOOST_PP_DEC_103 102\n# define BOOST_PP_DEC_104 103\n# define BOOST_PP_DEC_105 104\n# define BOOST_PP_DEC_106 105\n# define BOOST_PP_DEC_107 106\n# define BOOST_PP_DEC_108 107\n# define BOOST_PP_DEC_109 108\n# define BOOST_PP_DEC_110 109\n# define BOOST_PP_DEC_111 110\n# define BOOST_PP_DEC_112 111\n# define BOOST_PP_DEC_113 112\n# define BOOST_PP_DEC_114 113\n# define BOOST_PP_DEC_115 114\n# define BOOST_PP_DEC_116 115\n# define BOOST_PP_DEC_117 116\n# define BOOST_PP_DEC_118 117\n# define BOOST_PP_DEC_119 118\n# define BOOST_PP_DEC_120 119\n# define BOOST_PP_DEC_121 120\n# define BOOST_PP_DEC_122 121\n# define BOOST_PP_DEC_123 122\n# define BOOST_PP_DEC_124 123\n# define BOOST_PP_DEC_125 124\n# define BOOST_PP_DEC_126 125\n# define BOOST_PP_DEC_127 126\n# define BOOST_PP_DEC_128 127\n# define BOOST_PP_DEC_129 128\n# define BOOST_PP_DEC_130 129\n# define BOOST_PP_DEC_131 130\n# define BOOST_PP_DEC_132 131\n# define BOOST_PP_DEC_133 132\n# define BOOST_PP_DEC_134 133\n# define BOOST_PP_DEC_135 134\n# define BOOST_PP_DEC_136 135\n# define BOOST_PP_DEC_137 136\n# define BOOST_PP_DEC_138 137\n# define BOOST_PP_DEC_139 138\n# define BOOST_PP_DEC_140 139\n# define BOOST_PP_DEC_141 140\n# define BOOST_PP_DEC_142 141\n# define BOOST_PP_DEC_143 142\n# define BOOST_PP_DEC_144 143\n# define BOOST_PP_DEC_145 144\n# define BOOST_PP_DEC_146 145\n# define BOOST_PP_DEC_147 146\n# define BOOST_PP_DEC_148 147\n# define BOOST_PP_DEC_149 148\n# define BOOST_PP_DEC_150 149\n# define BOOST_PP_DEC_151 150\n# define BOOST_PP_DEC_152 151\n# define BOOST_PP_DEC_153 152\n# define BOOST_PP_DEC_154 153\n# define BOOST_PP_DEC_155 154\n# define BOOST_PP_DEC_156 155\n# define BOOST_PP_DEC_157 156\n# define BOOST_PP_DEC_158 157\n# define BOOST_PP_DEC_159 158\n# define BOOST_PP_DEC_160 159\n# define BOOST_PP_DEC_161 160\n# define BOOST_PP_DEC_162 161\n# define BOOST_PP_DEC_163 162\n# define BOOST_PP_DEC_164 163\n# define BOOST_PP_DEC_165 164\n# define BOOST_PP_DEC_166 165\n# define BOOST_PP_DEC_167 166\n# define BOOST_PP_DEC_168 167\n# define BOOST_PP_DEC_169 168\n# define BOOST_PP_DEC_170 169\n# define BOOST_PP_DEC_171 170\n# define BOOST_PP_DEC_172 171\n# define BOOST_PP_DEC_173 172\n# define BOOST_PP_DEC_174 173\n# define BOOST_PP_DEC_175 174\n# define BOOST_PP_DEC_176 175\n# define BOOST_PP_DEC_177 176\n# define BOOST_PP_DEC_178 177\n# define BOOST_PP_DEC_179 178\n# define BOOST_PP_DEC_180 179\n# define BOOST_PP_DEC_181 180\n# define BOOST_PP_DEC_182 181\n# define BOOST_PP_DEC_183 182\n# define BOOST_PP_DEC_184 183\n# define BOOST_PP_DEC_185 184\n# define BOOST_PP_DEC_186 185\n# define BOOST_PP_DEC_187 186\n# define BOOST_PP_DEC_188 187\n# define BOOST_PP_DEC_189 188\n# define BOOST_PP_DEC_190 189\n# define BOOST_PP_DEC_191 190\n# define BOOST_PP_DEC_192 191\n# define BOOST_PP_DEC_193 192\n# define BOOST_PP_DEC_194 193\n# define BOOST_PP_DEC_195 194\n# define BOOST_PP_DEC_196 195\n# define BOOST_PP_DEC_197 196\n# define BOOST_PP_DEC_198 197\n# define BOOST_PP_DEC_199 198\n# define BOOST_PP_DEC_200 199\n# define BOOST_PP_DEC_201 200\n# define BOOST_PP_DEC_202 201\n# define BOOST_PP_DEC_203 202\n# define BOOST_PP_DEC_204 203\n# define BOOST_PP_DEC_205 204\n# define BOOST_PP_DEC_206 205\n# define BOOST_PP_DEC_207 206\n# define BOOST_PP_DEC_208 207\n# define BOOST_PP_DEC_209 208\n# define BOOST_PP_DEC_210 209\n# define BOOST_PP_DEC_211 210\n# define BOOST_PP_DEC_212 211\n# define BOOST_PP_DEC_213 212\n# define BOOST_PP_DEC_214 213\n# define BOOST_PP_DEC_215 214\n# define BOOST_PP_DEC_216 215\n# define BOOST_PP_DEC_217 216\n# define BOOST_PP_DEC_218 217\n# define BOOST_PP_DEC_219 218\n# define BOOST_PP_DEC_220 219\n# define BOOST_PP_DEC_221 220\n# define BOOST_PP_DEC_222 221\n# define BOOST_PP_DEC_223 222\n# define BOOST_PP_DEC_224 223\n# define BOOST_PP_DEC_225 224\n# define BOOST_PP_DEC_226 225\n# define BOOST_PP_DEC_227 226\n# define BOOST_PP_DEC_228 227\n# define BOOST_PP_DEC_229 228\n# define BOOST_PP_DEC_230 229\n# define BOOST_PP_DEC_231 230\n# define BOOST_PP_DEC_232 231\n# define BOOST_PP_DEC_233 232\n# define BOOST_PP_DEC_234 233\n# define BOOST_PP_DEC_235 234\n# define BOOST_PP_DEC_236 235\n# define BOOST_PP_DEC_237 236\n# define BOOST_PP_DEC_238 237\n# define BOOST_PP_DEC_239 238\n# define BOOST_PP_DEC_240 239\n# define BOOST_PP_DEC_241 240\n# define BOOST_PP_DEC_242 241\n# define BOOST_PP_DEC_243 242\n# define BOOST_PP_DEC_244 243\n# define BOOST_PP_DEC_245 244\n# define BOOST_PP_DEC_246 245\n# define BOOST_PP_DEC_247 246\n# define BOOST_PP_DEC_248 247\n# define BOOST_PP_DEC_249 248\n# define BOOST_PP_DEC_250 249\n# define BOOST_PP_DEC_251 250\n# define BOOST_PP_DEC_252 251\n# define BOOST_PP_DEC_253 252\n# define BOOST_PP_DEC_254 253\n# define BOOST_PP_DEC_255 254\n# define BOOST_PP_DEC_256 255\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/detail/div_base.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/comparison/less_equal.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_DIV_BASE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# else\n#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_DIV_BASE_I(x, y)\n#    define BOOST_PP_DIV_BASE_I(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_IM(d, BOOST_PP_TUPLE_REM_3 rxy)\n#    define BOOST_PP_DIV_BASE_P_IM(d, im) BOOST_PP_DIV_BASE_P_I(d, im)\n# else\n#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))\n# endif\n#\n# define BOOST_PP_DIV_BASE_P_I(d, r, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)\n#    define BOOST_PP_DIV_BASE_O_IM(d, im) BOOST_PP_DIV_BASE_O_I(d, im)\n# else\n#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))\n# endif\n#\n# define BOOST_PP_DIV_BASE_O_I(d, r, x, y) (BOOST_PP_INC(r), BOOST_PP_SUB_D(d, x, y), y)\n#\n# /* BOOST_PP_DIV_BASE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# else\n#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_DIV_BASE_D_I(d, x, y)\n#    define BOOST_PP_DIV_BASE_D_I(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/inc.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_INC */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_INC(x) BOOST_PP_INC_I(x)\n# else\n#    define BOOST_PP_INC(x) BOOST_PP_INC_OO((x))\n#    define BOOST_PP_INC_OO(par) BOOST_PP_INC_I ## par\n# endif\n#\n# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x\n#\n# define BOOST_PP_INC_0 1\n# define BOOST_PP_INC_1 2\n# define BOOST_PP_INC_2 3\n# define BOOST_PP_INC_3 4\n# define BOOST_PP_INC_4 5\n# define BOOST_PP_INC_5 6\n# define BOOST_PP_INC_6 7\n# define BOOST_PP_INC_7 8\n# define BOOST_PP_INC_8 9\n# define BOOST_PP_INC_9 10\n# define BOOST_PP_INC_10 11\n# define BOOST_PP_INC_11 12\n# define BOOST_PP_INC_12 13\n# define BOOST_PP_INC_13 14\n# define BOOST_PP_INC_14 15\n# define BOOST_PP_INC_15 16\n# define BOOST_PP_INC_16 17\n# define BOOST_PP_INC_17 18\n# define BOOST_PP_INC_18 19\n# define BOOST_PP_INC_19 20\n# define BOOST_PP_INC_20 21\n# define BOOST_PP_INC_21 22\n# define BOOST_PP_INC_22 23\n# define BOOST_PP_INC_23 24\n# define BOOST_PP_INC_24 25\n# define BOOST_PP_INC_25 26\n# define BOOST_PP_INC_26 27\n# define BOOST_PP_INC_27 28\n# define BOOST_PP_INC_28 29\n# define BOOST_PP_INC_29 30\n# define BOOST_PP_INC_30 31\n# define BOOST_PP_INC_31 32\n# define BOOST_PP_INC_32 33\n# define BOOST_PP_INC_33 34\n# define BOOST_PP_INC_34 35\n# define BOOST_PP_INC_35 36\n# define BOOST_PP_INC_36 37\n# define BOOST_PP_INC_37 38\n# define BOOST_PP_INC_38 39\n# define BOOST_PP_INC_39 40\n# define BOOST_PP_INC_40 41\n# define BOOST_PP_INC_41 42\n# define BOOST_PP_INC_42 43\n# define BOOST_PP_INC_43 44\n# define BOOST_PP_INC_44 45\n# define BOOST_PP_INC_45 46\n# define BOOST_PP_INC_46 47\n# define BOOST_PP_INC_47 48\n# define BOOST_PP_INC_48 49\n# define BOOST_PP_INC_49 50\n# define BOOST_PP_INC_50 51\n# define BOOST_PP_INC_51 52\n# define BOOST_PP_INC_52 53\n# define BOOST_PP_INC_53 54\n# define BOOST_PP_INC_54 55\n# define BOOST_PP_INC_55 56\n# define BOOST_PP_INC_56 57\n# define BOOST_PP_INC_57 58\n# define BOOST_PP_INC_58 59\n# define BOOST_PP_INC_59 60\n# define BOOST_PP_INC_60 61\n# define BOOST_PP_INC_61 62\n# define BOOST_PP_INC_62 63\n# define BOOST_PP_INC_63 64\n# define BOOST_PP_INC_64 65\n# define BOOST_PP_INC_65 66\n# define BOOST_PP_INC_66 67\n# define BOOST_PP_INC_67 68\n# define BOOST_PP_INC_68 69\n# define BOOST_PP_INC_69 70\n# define BOOST_PP_INC_70 71\n# define BOOST_PP_INC_71 72\n# define BOOST_PP_INC_72 73\n# define BOOST_PP_INC_73 74\n# define BOOST_PP_INC_74 75\n# define BOOST_PP_INC_75 76\n# define BOOST_PP_INC_76 77\n# define BOOST_PP_INC_77 78\n# define BOOST_PP_INC_78 79\n# define BOOST_PP_INC_79 80\n# define BOOST_PP_INC_80 81\n# define BOOST_PP_INC_81 82\n# define BOOST_PP_INC_82 83\n# define BOOST_PP_INC_83 84\n# define BOOST_PP_INC_84 85\n# define BOOST_PP_INC_85 86\n# define BOOST_PP_INC_86 87\n# define BOOST_PP_INC_87 88\n# define BOOST_PP_INC_88 89\n# define BOOST_PP_INC_89 90\n# define BOOST_PP_INC_90 91\n# define BOOST_PP_INC_91 92\n# define BOOST_PP_INC_92 93\n# define BOOST_PP_INC_93 94\n# define BOOST_PP_INC_94 95\n# define BOOST_PP_INC_95 96\n# define BOOST_PP_INC_96 97\n# define BOOST_PP_INC_97 98\n# define BOOST_PP_INC_98 99\n# define BOOST_PP_INC_99 100\n# define BOOST_PP_INC_100 101\n# define BOOST_PP_INC_101 102\n# define BOOST_PP_INC_102 103\n# define BOOST_PP_INC_103 104\n# define BOOST_PP_INC_104 105\n# define BOOST_PP_INC_105 106\n# define BOOST_PP_INC_106 107\n# define BOOST_PP_INC_107 108\n# define BOOST_PP_INC_108 109\n# define BOOST_PP_INC_109 110\n# define BOOST_PP_INC_110 111\n# define BOOST_PP_INC_111 112\n# define BOOST_PP_INC_112 113\n# define BOOST_PP_INC_113 114\n# define BOOST_PP_INC_114 115\n# define BOOST_PP_INC_115 116\n# define BOOST_PP_INC_116 117\n# define BOOST_PP_INC_117 118\n# define BOOST_PP_INC_118 119\n# define BOOST_PP_INC_119 120\n# define BOOST_PP_INC_120 121\n# define BOOST_PP_INC_121 122\n# define BOOST_PP_INC_122 123\n# define BOOST_PP_INC_123 124\n# define BOOST_PP_INC_124 125\n# define BOOST_PP_INC_125 126\n# define BOOST_PP_INC_126 127\n# define BOOST_PP_INC_127 128\n# define BOOST_PP_INC_128 129\n# define BOOST_PP_INC_129 130\n# define BOOST_PP_INC_130 131\n# define BOOST_PP_INC_131 132\n# define BOOST_PP_INC_132 133\n# define BOOST_PP_INC_133 134\n# define BOOST_PP_INC_134 135\n# define BOOST_PP_INC_135 136\n# define BOOST_PP_INC_136 137\n# define BOOST_PP_INC_137 138\n# define BOOST_PP_INC_138 139\n# define BOOST_PP_INC_139 140\n# define BOOST_PP_INC_140 141\n# define BOOST_PP_INC_141 142\n# define BOOST_PP_INC_142 143\n# define BOOST_PP_INC_143 144\n# define BOOST_PP_INC_144 145\n# define BOOST_PP_INC_145 146\n# define BOOST_PP_INC_146 147\n# define BOOST_PP_INC_147 148\n# define BOOST_PP_INC_148 149\n# define BOOST_PP_INC_149 150\n# define BOOST_PP_INC_150 151\n# define BOOST_PP_INC_151 152\n# define BOOST_PP_INC_152 153\n# define BOOST_PP_INC_153 154\n# define BOOST_PP_INC_154 155\n# define BOOST_PP_INC_155 156\n# define BOOST_PP_INC_156 157\n# define BOOST_PP_INC_157 158\n# define BOOST_PP_INC_158 159\n# define BOOST_PP_INC_159 160\n# define BOOST_PP_INC_160 161\n# define BOOST_PP_INC_161 162\n# define BOOST_PP_INC_162 163\n# define BOOST_PP_INC_163 164\n# define BOOST_PP_INC_164 165\n# define BOOST_PP_INC_165 166\n# define BOOST_PP_INC_166 167\n# define BOOST_PP_INC_167 168\n# define BOOST_PP_INC_168 169\n# define BOOST_PP_INC_169 170\n# define BOOST_PP_INC_170 171\n# define BOOST_PP_INC_171 172\n# define BOOST_PP_INC_172 173\n# define BOOST_PP_INC_173 174\n# define BOOST_PP_INC_174 175\n# define BOOST_PP_INC_175 176\n# define BOOST_PP_INC_176 177\n# define BOOST_PP_INC_177 178\n# define BOOST_PP_INC_178 179\n# define BOOST_PP_INC_179 180\n# define BOOST_PP_INC_180 181\n# define BOOST_PP_INC_181 182\n# define BOOST_PP_INC_182 183\n# define BOOST_PP_INC_183 184\n# define BOOST_PP_INC_184 185\n# define BOOST_PP_INC_185 186\n# define BOOST_PP_INC_186 187\n# define BOOST_PP_INC_187 188\n# define BOOST_PP_INC_188 189\n# define BOOST_PP_INC_189 190\n# define BOOST_PP_INC_190 191\n# define BOOST_PP_INC_191 192\n# define BOOST_PP_INC_192 193\n# define BOOST_PP_INC_193 194\n# define BOOST_PP_INC_194 195\n# define BOOST_PP_INC_195 196\n# define BOOST_PP_INC_196 197\n# define BOOST_PP_INC_197 198\n# define BOOST_PP_INC_198 199\n# define BOOST_PP_INC_199 200\n# define BOOST_PP_INC_200 201\n# define BOOST_PP_INC_201 202\n# define BOOST_PP_INC_202 203\n# define BOOST_PP_INC_203 204\n# define BOOST_PP_INC_204 205\n# define BOOST_PP_INC_205 206\n# define BOOST_PP_INC_206 207\n# define BOOST_PP_INC_207 208\n# define BOOST_PP_INC_208 209\n# define BOOST_PP_INC_209 210\n# define BOOST_PP_INC_210 211\n# define BOOST_PP_INC_211 212\n# define BOOST_PP_INC_212 213\n# define BOOST_PP_INC_213 214\n# define BOOST_PP_INC_214 215\n# define BOOST_PP_INC_215 216\n# define BOOST_PP_INC_216 217\n# define BOOST_PP_INC_217 218\n# define BOOST_PP_INC_218 219\n# define BOOST_PP_INC_219 220\n# define BOOST_PP_INC_220 221\n# define BOOST_PP_INC_221 222\n# define BOOST_PP_INC_222 223\n# define BOOST_PP_INC_223 224\n# define BOOST_PP_INC_224 225\n# define BOOST_PP_INC_225 226\n# define BOOST_PP_INC_226 227\n# define BOOST_PP_INC_227 228\n# define BOOST_PP_INC_228 229\n# define BOOST_PP_INC_229 230\n# define BOOST_PP_INC_230 231\n# define BOOST_PP_INC_231 232\n# define BOOST_PP_INC_232 233\n# define BOOST_PP_INC_233 234\n# define BOOST_PP_INC_234 235\n# define BOOST_PP_INC_235 236\n# define BOOST_PP_INC_236 237\n# define BOOST_PP_INC_237 238\n# define BOOST_PP_INC_238 239\n# define BOOST_PP_INC_239 240\n# define BOOST_PP_INC_240 241\n# define BOOST_PP_INC_241 242\n# define BOOST_PP_INC_242 243\n# define BOOST_PP_INC_243 244\n# define BOOST_PP_INC_244 245\n# define BOOST_PP_INC_245 246\n# define BOOST_PP_INC_246 247\n# define BOOST_PP_INC_247 248\n# define BOOST_PP_INC_248 249\n# define BOOST_PP_INC_249 250\n# define BOOST_PP_INC_250 251\n# define BOOST_PP_INC_251 252\n# define BOOST_PP_INC_252 253\n# define BOOST_PP_INC_253 254\n# define BOOST_PP_INC_254 255\n# define BOOST_PP_INC_255 256\n# define BOOST_PP_INC_256 256\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/mod.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP\n#\n# include <boost/preprocessor/arithmetic/detail/div_base.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_MOD */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MOD(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))\n# else\n#    define BOOST_PP_MOD(x, y) BOOST_PP_MOD_I(x, y)\n#    define BOOST_PP_MOD_I(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))\n# endif\n#\n# /* BOOST_PP_MOD_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))\n# else\n#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_MOD_D_I(d, x, y)\n#    define BOOST_PP_MOD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/arithmetic/sub.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP\n# define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_SUB */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SUB(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# else\n#    define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y)\n#    define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# endif\n#\n# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I xy\n# else\n#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))\n# endif\n#\n# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))\n#\n# /* BOOST_PP_SUB_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# else\n#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_SUB_D_I(d, x, y)\n#    define BOOST_PP_SUB_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/array/data.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_DATA_HPP\n# define BOOST_PREPROCESSOR_ARRAY_DATA_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_DATA */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_TUPLE_ELEM(2, 1, array)\n# else\n#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_ARRAY_DATA_I(array)\n#    define BOOST_PP_ARRAY_DATA_I(array) BOOST_PP_ARRAY_DATA_II array\n#    define BOOST_PP_ARRAY_DATA_II(size, data) data\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/array/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_ELEM_HPP\n# define BOOST_PREPROCESSOR_ARRAY_ELEM_HPP\n#\n# include <boost/preprocessor/array/data.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_ELEM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))\n# else\n#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_ARRAY_ELEM_I(i, array)\n#    define BOOST_PP_ARRAY_ELEM_I(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/array/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ARRAY_SIZE_HPP\n# define BOOST_PREPROCESSOR_ARRAY_SIZE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ARRAY_SIZE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_TUPLE_ELEM(2, 0, array)\n# else\n#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_ARRAY_SIZE_I(array)\n#    define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_II array\n#    define BOOST_PP_ARRAY_SIZE_II(size, data) size\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/cat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CAT_HPP\n# define BOOST_PREPROCESSOR_CAT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_CAT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)\n# else\n#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b))\n#    define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_CAT_I(a, b) a ## b\n# else\n#    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)\n#    define BOOST_PP_CAT_II(p, res) res\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/comma_if.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP\n# define BOOST_PREPROCESSOR_COMMA_IF_HPP\n#\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/comparison/less_equal.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP\n# define BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP\n#\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/not.hpp>\n#\n# /* BOOST_PP_LESS_EQUAL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))\n# else\n#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_LESS_EQUAL_I(x, y)\n#    define BOOST_PP_LESS_EQUAL_I(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))\n# endif\n#\n# /* BOOST_PP_LESS_EQUAL_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))\n# else\n#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D_I(d, x, y)\n#    define BOOST_PP_LESS_EQUAL_D_I(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/config/config.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP\n# define BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP\n#\n# /* BOOST_PP_CONFIG_FLAGS */\n#\n# define BOOST_PP_CONFIG_STRICT() 0x0001\n# define BOOST_PP_CONFIG_IDEAL() 0x0002\n#\n# define BOOST_PP_CONFIG_MSVC() 0x0004\n# define BOOST_PP_CONFIG_MWCC() 0x0008\n# define BOOST_PP_CONFIG_BCC() 0x0010\n# define BOOST_PP_CONFIG_EDG() 0x0020\n# define BOOST_PP_CONFIG_DMC() 0x0040\n#\n# ifndef BOOST_PP_CONFIG_FLAGS\n#    if defined(__GCCXML__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__WAVE__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__MWERKS__) && __MWERKS__ >= 0x3200\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__EDG__) || defined(__EDG_VERSION__)\n#        if defined(_MSC_VER) && __EDG_VERSION__ >= 308\n#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())\n#        else\n#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT())\n#        endif\n#    elif defined(__MWERKS__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MWCC())\n#    elif defined(__DMC__)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC())\n#    elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())\n#    elif defined(_MSC_VER)\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())\n#    else\n#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())\n#    endif\n# endif\n#\n# /* BOOST_PP_CONFIG_EXTENDED_LINE_INFO */\n#\n# ifndef BOOST_PP_CONFIG_EXTENDED_LINE_INFO\n#    define BOOST_PP_CONFIG_EXTENDED_LINE_INFO 0\n# endif\n#\n# /* BOOST_PP_CONFIG_ERRORS */\n#\n# ifndef BOOST_PP_CONFIG_ERRORS\n#    ifdef NDEBUG\n#        define BOOST_PP_CONFIG_ERRORS 0\n#    else\n#        define BOOST_PP_CONFIG_ERRORS 1\n#    endif\n# endif\n#\n# /* BOOST_PP_VARIADICS */\n#\n# if !defined BOOST_PP_VARIADICS\n#    /* variadic support explicitly disabled for all untested compilers */\n#    if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI\n#        define BOOST_PP_VARIADICS 0\n#    /* VC++ (C/C++) */\n#    elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__\n#        if _MSC_VER >= 1400\n#            define BOOST_PP_VARIADICS 1\n#            define BOOST_PP_VARIADICS_MSVC 1\n#        else\n#            define BOOST_PP_VARIADICS 0\n#        endif\n#    /* Wave (C/C++), GCC (C++) */\n#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__\n#        define BOOST_PP_VARIADICS 1\n#    /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */\n#    elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L\n#        define BOOST_PP_VARIADICS 1\n#    else\n#        define BOOST_PP_VARIADICS 0\n#    endif\n# elif !BOOST_PP_VARIADICS + 1 < 2\n#    undef BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADICS 1\n#    if defined _MSC_VER && _MSC_VER >= 1400 && !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI)\n#        define BOOST_PP_VARIADICS_MSVC 1\n#    endif\n# else\n#    undef BOOST_PP_VARIADICS\n#    define BOOST_PP_VARIADICS 0\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/deduce_d.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP\n#\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_DEDUCE_D */\n#\n# define BOOST_PP_DEDUCE_D() BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/detail/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s)\n# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s)\n# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s)\n# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)\n# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p(6, s)), p, o, s)\n# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p(7, s)), p, o, s)\n# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p(8, s)), p, o, s)\n# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p(9, s)), p, o, s)\n# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p(10, s)), p, o, s)\n# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p(11, s)), p, o, s)\n# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p(12, s)), p, o, s)\n# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p(13, s)), p, o, s)\n# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p(14, s)), p, o, s)\n# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p(15, s)), p, o, s)\n# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p(16, s)), p, o, s)\n# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p(17, s)), p, o, s)\n# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p(18, s)), p, o, s)\n# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p(19, s)), p, o, s)\n# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p(20, s)), p, o, s)\n# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p(21, s)), p, o, s)\n# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p(22, s)), p, o, s)\n# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p(23, s)), p, o, s)\n# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p(24, s)), p, o, s)\n# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p(25, s)), p, o, s)\n# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p(26, s)), p, o, s)\n# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p(27, s)), p, o, s)\n# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p(28, s)), p, o, s)\n# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p(29, s)), p, o, s)\n# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p(30, s)), p, o, s)\n# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p(31, s)), p, o, s)\n# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p(32, s)), p, o, s)\n# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p(33, s)), p, o, s)\n# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p(34, s)), p, o, s)\n# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p(35, s)), p, o, s)\n# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p(36, s)), p, o, s)\n# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p(37, s)), p, o, s)\n# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p(38, s)), p, o, s)\n# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p(39, s)), p, o, s)\n# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p(40, s)), p, o, s)\n# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p(41, s)), p, o, s)\n# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p(42, s)), p, o, s)\n# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p(43, s)), p, o, s)\n# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p(44, s)), p, o, s)\n# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p(45, s)), p, o, s)\n# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p(46, s)), p, o, s)\n# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p(47, s)), p, o, s)\n# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p(48, s)), p, o, s)\n# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p(49, s)), p, o, s)\n# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p(50, s)), p, o, s)\n# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p(51, s)), p, o, s)\n# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p(52, s)), p, o, s)\n# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p(53, s)), p, o, s)\n# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p(54, s)), p, o, s)\n# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p(55, s)), p, o, s)\n# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p(56, s)), p, o, s)\n# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p(57, s)), p, o, s)\n# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p(58, s)), p, o, s)\n# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p(59, s)), p, o, s)\n# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p(60, s)), p, o, s)\n# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p(61, s)), p, o, s)\n# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p(62, s)), p, o, s)\n# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p(63, s)), p, o, s)\n# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p(64, s)), p, o, s)\n# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p(65, s)), p, o, s)\n# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p(66, s)), p, o, s)\n# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p(67, s)), p, o, s)\n# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p(68, s)), p, o, s)\n# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p(69, s)), p, o, s)\n# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p(70, s)), p, o, s)\n# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p(71, s)), p, o, s)\n# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p(72, s)), p, o, s)\n# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p(73, s)), p, o, s)\n# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p(74, s)), p, o, s)\n# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p(75, s)), p, o, s)\n# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p(76, s)), p, o, s)\n# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p(77, s)), p, o, s)\n# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p(78, s)), p, o, s)\n# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p(79, s)), p, o, s)\n# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p(80, s)), p, o, s)\n# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p(81, s)), p, o, s)\n# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p(82, s)), p, o, s)\n# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p(83, s)), p, o, s)\n# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p(84, s)), p, o, s)\n# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p(85, s)), p, o, s)\n# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p(86, s)), p, o, s)\n# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p(87, s)), p, o, s)\n# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p(88, s)), p, o, s)\n# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p(89, s)), p, o, s)\n# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p(90, s)), p, o, s)\n# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p(91, s)), p, o, s)\n# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p(92, s)), p, o, s)\n# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p(93, s)), p, o, s)\n# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p(94, s)), p, o, s)\n# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p(95, s)), p, o, s)\n# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p(96, s)), p, o, s)\n# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p(97, s)), p, o, s)\n# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p(98, s)), p, o, s)\n# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p(99, s)), p, o, s)\n# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p(100, s)), p, o, s)\n# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p(101, s)), p, o, s)\n# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p(102, s)), p, o, s)\n# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p(103, s)), p, o, s)\n# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p(104, s)), p, o, s)\n# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p(105, s)), p, o, s)\n# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p(106, s)), p, o, s)\n# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p(107, s)), p, o, s)\n# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p(108, s)), p, o, s)\n# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p(109, s)), p, o, s)\n# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p(110, s)), p, o, s)\n# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p(111, s)), p, o, s)\n# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p(112, s)), p, o, s)\n# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p(113, s)), p, o, s)\n# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p(114, s)), p, o, s)\n# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p(115, s)), p, o, s)\n# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p(116, s)), p, o, s)\n# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p(117, s)), p, o, s)\n# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p(118, s)), p, o, s)\n# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p(119, s)), p, o, s)\n# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p(120, s)), p, o, s)\n# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p(121, s)), p, o, s)\n# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p(122, s)), p, o, s)\n# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p(123, s)), p, o, s)\n# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p(124, s)), p, o, s)\n# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p(125, s)), p, o, s)\n# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p(126, s)), p, o, s)\n# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p(127, s)), p, o, s)\n# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p(128, s)), p, o, s)\n# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p(129, s)), p, o, s)\n# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p(130, s)), p, o, s)\n# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p(131, s)), p, o, s)\n# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p(132, s)), p, o, s)\n# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p(133, s)), p, o, s)\n# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p(134, s)), p, o, s)\n# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p(135, s)), p, o, s)\n# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p(136, s)), p, o, s)\n# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p(137, s)), p, o, s)\n# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p(138, s)), p, o, s)\n# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p(139, s)), p, o, s)\n# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p(140, s)), p, o, s)\n# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p(141, s)), p, o, s)\n# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p(142, s)), p, o, s)\n# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p(143, s)), p, o, s)\n# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p(144, s)), p, o, s)\n# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p(145, s)), p, o, s)\n# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p(146, s)), p, o, s)\n# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p(147, s)), p, o, s)\n# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p(148, s)), p, o, s)\n# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p(149, s)), p, o, s)\n# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p(150, s)), p, o, s)\n# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p(151, s)), p, o, s)\n# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p(152, s)), p, o, s)\n# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p(153, s)), p, o, s)\n# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p(154, s)), p, o, s)\n# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p(155, s)), p, o, s)\n# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p(156, s)), p, o, s)\n# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p(157, s)), p, o, s)\n# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p(158, s)), p, o, s)\n# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p(159, s)), p, o, s)\n# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p(160, s)), p, o, s)\n# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p(161, s)), p, o, s)\n# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p(162, s)), p, o, s)\n# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p(163, s)), p, o, s)\n# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p(164, s)), p, o, s)\n# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p(165, s)), p, o, s)\n# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p(166, s)), p, o, s)\n# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p(167, s)), p, o, s)\n# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p(168, s)), p, o, s)\n# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p(169, s)), p, o, s)\n# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p(170, s)), p, o, s)\n# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p(171, s)), p, o, s)\n# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p(172, s)), p, o, s)\n# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p(173, s)), p, o, s)\n# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p(174, s)), p, o, s)\n# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p(175, s)), p, o, s)\n# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p(176, s)), p, o, s)\n# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p(177, s)), p, o, s)\n# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p(178, s)), p, o, s)\n# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p(179, s)), p, o, s)\n# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p(180, s)), p, o, s)\n# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p(181, s)), p, o, s)\n# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p(182, s)), p, o, s)\n# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p(183, s)), p, o, s)\n# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p(184, s)), p, o, s)\n# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p(185, s)), p, o, s)\n# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p(186, s)), p, o, s)\n# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p(187, s)), p, o, s)\n# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p(188, s)), p, o, s)\n# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p(189, s)), p, o, s)\n# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p(190, s)), p, o, s)\n# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p(191, s)), p, o, s)\n# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p(192, s)), p, o, s)\n# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p(193, s)), p, o, s)\n# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p(194, s)), p, o, s)\n# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p(195, s)), p, o, s)\n# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p(196, s)), p, o, s)\n# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p(197, s)), p, o, s)\n# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p(198, s)), p, o, s)\n# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p(199, s)), p, o, s)\n# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p(200, s)), p, o, s)\n# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p(201, s)), p, o, s)\n# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p(202, s)), p, o, s)\n# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p(203, s)), p, o, s)\n# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p(204, s)), p, o, s)\n# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p(205, s)), p, o, s)\n# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p(206, s)), p, o, s)\n# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p(207, s)), p, o, s)\n# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p(208, s)), p, o, s)\n# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p(209, s)), p, o, s)\n# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p(210, s)), p, o, s)\n# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p(211, s)), p, o, s)\n# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p(212, s)), p, o, s)\n# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p(213, s)), p, o, s)\n# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p(214, s)), p, o, s)\n# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p(215, s)), p, o, s)\n# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p(216, s)), p, o, s)\n# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p(217, s)), p, o, s)\n# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p(218, s)), p, o, s)\n# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p(219, s)), p, o, s)\n# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p(220, s)), p, o, s)\n# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p(221, s)), p, o, s)\n# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p(222, s)), p, o, s)\n# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p(223, s)), p, o, s)\n# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p(224, s)), p, o, s)\n# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p(225, s)), p, o, s)\n# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p(226, s)), p, o, s)\n# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p(227, s)), p, o, s)\n# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p(228, s)), p, o, s)\n# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p(229, s)), p, o, s)\n# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p(230, s)), p, o, s)\n# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p(231, s)), p, o, s)\n# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p(232, s)), p, o, s)\n# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p(233, s)), p, o, s)\n# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p(234, s)), p, o, s)\n# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p(235, s)), p, o, s)\n# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p(236, s)), p, o, s)\n# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p(237, s)), p, o, s)\n# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p(238, s)), p, o, s)\n# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p(239, s)), p, o, s)\n# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p(240, s)), p, o, s)\n# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p(241, s)), p, o, s)\n# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p(242, s)), p, o, s)\n# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p(243, s)), p, o, s)\n# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p(244, s)), p, o, s)\n# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p(245, s)), p, o, s)\n# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p(246, s)), p, o, s)\n# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p(247, s)), p, o, s)\n# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p(248, s)), p, o, s)\n# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p(249, s)), p, o, s)\n# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p(250, s)), p, o, s)\n# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p(251, s)), p, o, s)\n# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p(252, s)), p, o, s)\n# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p(253, s)), p, o, s)\n# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p(254, s)), p, o, s)\n# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p(255, s)), p, o, s)\n# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p(256, s)), p, o, s)\n# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p(257, s)), p, o, s)\n#\n# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s))\n# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s))\n# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s))\n# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s))\n# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(6, s))\n# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(7, s))\n# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(8, s))\n# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(9, s))\n# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(10, s))\n# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(11, s))\n# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(12, s))\n# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(13, s))\n# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(14, s))\n# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(15, s))\n# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(16, s))\n# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(17, s))\n# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(18, s))\n# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(19, s))\n# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(20, s))\n# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(21, s))\n# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(22, s))\n# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(23, s))\n# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(24, s))\n# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(25, s))\n# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(26, s))\n# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(27, s))\n# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(28, s))\n# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(29, s))\n# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(30, s))\n# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(31, s))\n# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(32, s))\n# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(33, s))\n# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(34, s))\n# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(35, s))\n# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(36, s))\n# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(37, s))\n# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(38, s))\n# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(39, s))\n# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(40, s))\n# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(41, s))\n# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(42, s))\n# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(43, s))\n# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(44, s))\n# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(45, s))\n# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(46, s))\n# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(47, s))\n# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(48, s))\n# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(49, s))\n# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(50, s))\n# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(51, s))\n# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(52, s))\n# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(53, s))\n# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(54, s))\n# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(55, s))\n# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(56, s))\n# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(57, s))\n# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(58, s))\n# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(59, s))\n# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(60, s))\n# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(61, s))\n# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(62, s))\n# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(63, s))\n# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(64, s))\n# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(65, s))\n# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(66, s))\n# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(67, s))\n# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(68, s))\n# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(69, s))\n# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(70, s))\n# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(71, s))\n# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(72, s))\n# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(73, s))\n# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(74, s))\n# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(75, s))\n# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(76, s))\n# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(77, s))\n# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(78, s))\n# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(79, s))\n# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(80, s))\n# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(81, s))\n# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(82, s))\n# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(83, s))\n# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(84, s))\n# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(85, s))\n# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(86, s))\n# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(87, s))\n# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(88, s))\n# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(89, s))\n# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(90, s))\n# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(91, s))\n# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(92, s))\n# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(93, s))\n# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(94, s))\n# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(95, s))\n# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(96, s))\n# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(97, s))\n# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(98, s))\n# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(99, s))\n# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(100, s))\n# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(101, s))\n# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(102, s))\n# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(103, s))\n# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(104, s))\n# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(105, s))\n# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(106, s))\n# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(107, s))\n# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(108, s))\n# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(109, s))\n# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(110, s))\n# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(111, s))\n# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(112, s))\n# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(113, s))\n# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(114, s))\n# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(115, s))\n# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(116, s))\n# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(117, s))\n# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(118, s))\n# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(119, s))\n# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(120, s))\n# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(121, s))\n# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(122, s))\n# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(123, s))\n# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(124, s))\n# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(125, s))\n# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(126, s))\n# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(127, s))\n# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(128, s))\n# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))\n# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(130, s))\n# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(131, s))\n# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(132, s))\n# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(133, s))\n# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(134, s))\n# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(135, s))\n# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(136, s))\n# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(137, s))\n# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(138, s))\n# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(139, s))\n# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(140, s))\n# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(141, s))\n# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(142, s))\n# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(143, s))\n# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(144, s))\n# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(145, s))\n# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(146, s))\n# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(147, s))\n# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(148, s))\n# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(149, s))\n# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(150, s))\n# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(151, s))\n# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(152, s))\n# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(153, s))\n# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(154, s))\n# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(155, s))\n# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(156, s))\n# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(157, s))\n# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(158, s))\n# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(159, s))\n# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(160, s))\n# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(161, s))\n# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(162, s))\n# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(163, s))\n# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(164, s))\n# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(165, s))\n# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(166, s))\n# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(167, s))\n# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(168, s))\n# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(169, s))\n# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(170, s))\n# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(171, s))\n# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(172, s))\n# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(173, s))\n# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(174, s))\n# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(175, s))\n# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(176, s))\n# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(177, s))\n# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(178, s))\n# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(179, s))\n# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(180, s))\n# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(181, s))\n# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(182, s))\n# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(183, s))\n# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(184, s))\n# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(185, s))\n# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(186, s))\n# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(187, s))\n# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(188, s))\n# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(189, s))\n# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(190, s))\n# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(191, s))\n# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(192, s))\n# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(193, s))\n# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(194, s))\n# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(195, s))\n# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(196, s))\n# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(197, s))\n# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(198, s))\n# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(199, s))\n# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(200, s))\n# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(201, s))\n# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(202, s))\n# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(203, s))\n# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(204, s))\n# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(205, s))\n# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(206, s))\n# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(207, s))\n# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(208, s))\n# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(209, s))\n# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(210, s))\n# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(211, s))\n# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(212, s))\n# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(213, s))\n# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(214, s))\n# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(215, s))\n# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(216, s))\n# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(217, s))\n# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(218, s))\n# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(219, s))\n# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(220, s))\n# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(221, s))\n# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(222, s))\n# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(223, s))\n# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(224, s))\n# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(225, s))\n# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(226, s))\n# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(227, s))\n# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(228, s))\n# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(229, s))\n# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(230, s))\n# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(231, s))\n# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(232, s))\n# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(233, s))\n# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(234, s))\n# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(235, s))\n# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(236, s))\n# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(237, s))\n# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(238, s))\n# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(239, s))\n# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(240, s))\n# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(241, s))\n# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(242, s))\n# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(243, s))\n# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(244, s))\n# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(245, s))\n# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(246, s))\n# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(247, s))\n# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(248, s))\n# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(249, s))\n# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(250, s))\n# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(251, s))\n# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(252, s))\n# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(253, s))\n# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(254, s))\n# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(255, s))\n# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(256, s))\n# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(257, s))\n#\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/expr_iif.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_EXPR_IIF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_I(bit, expr)\n# else\n#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr))\n#    define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par\n# endif\n#\n# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr)\n#\n# define BOOST_PP_EXPR_IIF_0(expr)\n# define BOOST_PP_EXPR_IIF_1(expr) expr\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/if.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_IF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n#\n# /* BOOST_PP_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)\n# else\n#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f)\n#    define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/iif.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_IIF_HPP\n# define BOOST_PREPROCESSOR_CONTROL_IIF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)\n# else\n#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f))\n#    define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)\n# else\n#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_II(BOOST_PP_IIF_ ## bit(t, f))\n#    define BOOST_PP_IIF_II(id) id\n# endif\n#\n# define BOOST_PP_IIF_0(t, f) f\n# define BOOST_PP_IIF_1(t, f) t\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/control/while.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP\n# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n#\n# /* BOOST_PP_WHILE */\n#\n# if 0\n#    define BOOST_PP_WHILE(pred, op, state)\n# endif\n#\n# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))))\n# else\n#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))\n# endif\n#\n# define BOOST_PP_WHILE_F(d, _) 0\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/control/detail/edg/while.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    include <boost/preprocessor/control/detail/msvc/while.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/control/detail/dmc/while.hpp>\n# else\n#    include <boost/preprocessor/control/detail/while.hpp>\n# endif\n#\n# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001)\n#\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0\n# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/debug/error.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DEBUG_ERROR_HPP\n# define BOOST_PREPROCESSOR_DEBUG_ERROR_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_ERROR */\n#\n# if BOOST_PP_CONFIG_ERRORS\n#    define BOOST_PP_ERROR(code) BOOST_PP_CAT(BOOST_PP_ERROR_, code)\n# endif\n#\n# define BOOST_PP_ERROR_0x0000 BOOST_PP_ERROR(0x0000, BOOST_PP_INDEX_OUT_OF_BOUNDS)\n# define BOOST_PP_ERROR_0x0001 BOOST_PP_ERROR(0x0001, BOOST_PP_WHILE_OVERFLOW)\n# define BOOST_PP_ERROR_0x0002 BOOST_PP_ERROR(0x0002, BOOST_PP_FOR_OVERFLOW)\n# define BOOST_PP_ERROR_0x0003 BOOST_PP_ERROR(0x0003, BOOST_PP_REPEAT_OVERFLOW)\n# define BOOST_PP_ERROR_0x0004 BOOST_PP_ERROR(0x0004, BOOST_PP_LIST_FOLD_OVERFLOW)\n# define BOOST_PP_ERROR_0x0005 BOOST_PP_ERROR(0x0005, BOOST_PP_SEQ_FOLD_OVERFLOW)\n# define BOOST_PP_ERROR_0x0006 BOOST_PP_ERROR(0x0006, BOOST_PP_ARITHMETIC_OVERFLOW)\n# define BOOST_PP_ERROR_0x0007 BOOST_PP_ERROR(0x0007, BOOST_PP_DIVISION_BY_ZERO)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/detail/auto_rec.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#     include <boost/preprocessor/detail/dmc/auto_rec.hpp>\n# else\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP\n#\n# include <boost/preprocessor/control/iif.hpp>\n#\n# /* BOOST_PP_AUTO_REC */\n#\n# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)\n#\n# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)\n# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)\n# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)\n#\n# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)\n#    define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)\n#        define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)\n#            define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)\n#                define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)\n#                    define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)\n#                        define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)\n#                            define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2)\n#                            define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p(3), 3, 4)\n#                        define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)\n#                            define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p(5), 5, 6)\n#                            define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p(7), 7, 8)\n#                    define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)\n#                        define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)\n#                            define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p(9), 9, 10)\n#                            define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p(11), 11, 12)\n#                        define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)\n#                            define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p(13), 13, 14)\n#                            define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p(15), 15, 16)\n#                define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)\n#                    define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)\n#                        define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)\n#                            define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p(17), 17, 18)\n#                            define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p(19), 19, 20)\n#                        define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)\n#                            define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p(21), 21, 22)\n#                            define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p(23), 23, 24)\n#                    define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)\n#                        define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)\n#                            define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p(25), 25, 26)\n#                            define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p(27), 27, 28)\n#                        define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)\n#                            define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p(29), 29, 30)\n#                            define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p(31), 31, 32)\n#            define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)\n#                define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)\n#                    define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)\n#                        define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)\n#                            define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p(33), 33, 34)\n#                            define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p(35), 35, 36)\n#                        define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)\n#                            define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p(37), 37, 38)\n#                            define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p(39), 39, 40)\n#                    define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)\n#                        define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)\n#                            define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p(41), 41, 42)\n#                            define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p(43), 43, 44)\n#                        define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)\n#                            define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p(45), 45, 46)\n#                            define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p(47), 47, 48)\n#                define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)\n#                    define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)\n#                        define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)\n#                            define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p(49), 49, 50)\n#                            define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p(51), 51, 52)\n#                        define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)\n#                            define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p(53), 53, 54)\n#                            define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p(55), 55, 56)\n#                    define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)\n#                        define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)\n#                            define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p(57), 57, 58)\n#                            define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p(59), 59, 60)\n#                        define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)\n#                            define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p(61), 61, 62)\n#                            define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p(63), 63, 64)\n#        define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)\n#            define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)\n#                define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)\n#                    define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)\n#                        define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)\n#                            define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p(65), 65, 66)\n#                            define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p(67), 67, 68)\n#                        define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)\n#                            define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p(69), 69, 70)\n#                            define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p(71), 71, 72)\n#                    define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)\n#                        define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)\n#                            define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p(73), 73, 74)\n#                            define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p(75), 75, 76)\n#                        define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)\n#                            define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p(77), 77, 78)\n#                            define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p(79), 79, 80)\n#                define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)\n#                    define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)\n#                        define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)\n#                            define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p(81), 81, 82)\n#                            define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p(83), 83, 84)\n#                        define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)\n#                            define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p(85), 85, 86)\n#                            define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p(87), 87, 88)\n#                    define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)\n#                        define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)\n#                            define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p(89), 89, 90)\n#                            define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p(91), 91, 92)\n#                        define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)\n#                            define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p(93), 93, 94)\n#                            define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p(95), 95, 96)\n#            define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)\n#                define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)\n#                    define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)\n#                        define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)\n#                            define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p(97), 97, 98)\n#                            define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p(99), 99, 100)\n#                        define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)\n#                            define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p(101), 101, 102)\n#                            define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p(103), 103, 104)\n#                    define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)\n#                        define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)\n#                            define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p(105), 105, 106)\n#                            define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p(107), 107, 108)\n#                        define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)\n#                            define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p(109), 109, 110)\n#                            define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p(111), 111, 112)\n#                define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)\n#                    define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)\n#                        define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)\n#                            define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p(113), 113, 114)\n#                            define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p(115), 115, 116)\n#                        define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)\n#                            define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p(117), 117, 118)\n#                            define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p(119), 119, 120)\n#                    define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)\n#                        define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)\n#                            define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p(121), 121, 122)\n#                            define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p(123), 123, 124)\n#                        define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)\n#                            define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p(125), 125, 126)\n#                            define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p(127), 127, 128)\n#    define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)\n#        define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)\n#            define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)\n#                define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)\n#                    define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)\n#                        define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)\n#                            define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p(129), 129, 130)\n#                            define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p(131), 131, 132)\n#                        define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)\n#                            define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p(133), 133, 134)\n#                            define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p(135), 135, 136)\n#                    define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)\n#                        define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)\n#                            define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p(137), 137, 138)\n#                            define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p(139), 139, 140)\n#                        define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)\n#                            define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p(141), 141, 142)\n#                            define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p(143), 143, 144)\n#                define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)\n#                    define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)\n#                        define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)\n#                            define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p(145), 145, 146)\n#                            define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p(147), 147, 148)\n#                        define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)\n#                            define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p(149), 149, 150)\n#                            define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p(151), 151, 152)\n#                    define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)\n#                        define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)\n#                            define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p(153), 153, 154)\n#                            define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p(155), 155, 156)\n#                        define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)\n#                            define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p(157), 157, 158)\n#                            define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p(159), 159, 160)\n#            define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)\n#                define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)\n#                    define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)\n#                        define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)\n#                            define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p(161), 161, 162)\n#                            define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p(163), 163, 164)\n#                        define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)\n#                            define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p(165), 165, 166)\n#                            define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p(167), 167, 168)\n#                    define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)\n#                        define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)\n#                            define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p(169), 169, 170)\n#                            define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p(171), 171, 172)\n#                        define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)\n#                            define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p(173), 173, 174)\n#                            define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p(175), 175, 176)\n#                define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)\n#                    define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)\n#                        define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)\n#                            define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p(177), 177, 178)\n#                            define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p(179), 179, 180)\n#                        define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)\n#                            define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p(181), 181, 182)\n#                            define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p(183), 183, 184)\n#                    define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)\n#                        define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)\n#                            define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p(185), 185, 186)\n#                            define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p(187), 187, 188)\n#                        define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)\n#                            define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p(189), 189, 190)\n#                            define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p(191), 191, 192)\n#        define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)\n#            define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)\n#                define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)\n#                    define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)\n#                        define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)\n#                            define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p(193), 193, 194)\n#                            define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p(195), 195, 196)\n#                        define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)\n#                            define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p(197), 197, 198)\n#                            define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p(199), 199, 200)\n#                    define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)\n#                        define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)\n#                            define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p(201), 201, 202)\n#                            define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p(203), 203, 204)\n#                        define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)\n#                            define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p(205), 205, 206)\n#                            define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p(207), 207, 208)\n#                define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)\n#                    define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)\n#                        define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)\n#                            define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p(209), 209, 210)\n#                            define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p(211), 211, 212)\n#                        define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)\n#                            define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p(213), 213, 214)\n#                            define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p(215), 215, 216)\n#                    define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)\n#                        define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)\n#                            define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p(217), 217, 218)\n#                            define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p(219), 219, 220)\n#                        define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)\n#                            define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p(221), 221, 222)\n#                            define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p(223), 223, 224)\n#            define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)\n#                define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)\n#                    define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)\n#                        define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)\n#                            define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p(225), 225, 226)\n#                            define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p(227), 227, 228)\n#                        define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)\n#                            define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p(229), 229, 230)\n#                            define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p(231), 231, 232)\n#                    define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)\n#                        define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)\n#                            define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p(233), 233, 234)\n#                            define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p(235), 235, 236)\n#                        define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)\n#                            define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p(237), 237, 238)\n#                            define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p(239), 239, 240)\n#                define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)\n#                    define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)\n#                        define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)\n#                            define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p(241), 241, 242)\n#                            define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p(243), 243, 244)\n#                        define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)\n#                            define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p(245), 245, 246)\n#                            define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p(247), 247, 248)\n#                    define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)\n#                        define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)\n#                            define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p(249), 249, 250)\n#                            define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p(251), 251, 252)\n#                        define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)\n#                            define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p(253), 253, 254)\n#                            define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p(255), 255, 256)\n#\n# endif\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/detail/check.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_CHECK_HPP\n# define BOOST_PREPROCESSOR_DETAIL_CHECK_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_CHECK */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_D(x, type)\n# else\n#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type))\n#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, type x))\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(res, _) res\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x)\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk))\n#    define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im)\n#    define BOOST_PP_CHECK_4(res, _) res\n#    define BOOST_PP_CHECK_5(res) res\n# else /* DMC */\n#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_OO((type x))\n#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_0 ## par\n#    define BOOST_PP_CHECK_0(chk) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, chk))\n#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)\n#    define BOOST_PP_CHECK_2(res, _) res\n# endif\n#\n# define BOOST_PP_CHECK_RESULT_1 1, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/detail/is_binary.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP\n# define BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/check.hpp>\n#\n# /* BOOST_PP_IS_BINARY */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_IS_BINARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)\n# else\n#    define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x)\n#    define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)\n# endif\n#\n# define BOOST_PP_IS_BINARY_CHECK(a, b) 1\n# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/empty.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_EMPTY_HPP\n# define BOOST_PREPROCESSOR_EMPTY_HPP\n#\n# include <boost/preprocessor/facilities/empty.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/facilities/empty.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP\n#\n# /* BOOST_PP_EMPTY */\n#\n# define BOOST_PP_EMPTY()\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/facilities/identity.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP\n#\n# include <boost/preprocessor/facilities/empty.hpp>\n#\n# /* BOOST_PP_IDENTITY */\n#\n# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/facilities/overload.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP\n# define BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_OVERLOAD */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_OVERLOAD(prefix, ...) BOOST_PP_CAT(prefix, BOOST_PP_VARIADIC_SIZE(__VA_ARGS__))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/identity.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_IDENTITY_HPP\n# define BOOST_PREPROCESSOR_IDENTITY_HPP\n#\n# include <boost/preprocessor/facilities/identity.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/inc.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_INC_HPP\n# define BOOST_PREPROCESSOR_INC_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_START_1\n#\n# undef BOOST_PP_ITERATION_START_1_DIGIT_1\n# undef BOOST_PP_ITERATION_START_1_DIGIT_2\n# undef BOOST_PP_ITERATION_START_1_DIGIT_3\n# undef BOOST_PP_ITERATION_START_1_DIGIT_4\n# undef BOOST_PP_ITERATION_START_1_DIGIT_5\n# undef BOOST_PP_ITERATION_START_1_DIGIT_6\n# undef BOOST_PP_ITERATION_START_1_DIGIT_7\n# undef BOOST_PP_ITERATION_START_1_DIGIT_8\n# undef BOOST_PP_ITERATION_START_1_DIGIT_9\n# undef BOOST_PP_ITERATION_START_1_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_START_1_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_START_1_DIGIT_3\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_1_DIGIT_3, BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)\n# elif BOOST_PP_ITERATION_START_1_DIGIT_2\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_START_1 BOOST_PP_ITERATION_START_1_DIGIT_1\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# include <boost/preprocessor/slot/detail/shared.hpp>\n#\n# undef BOOST_PP_ITERATION_FINISH_1\n#\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_1\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_2\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_3\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_4\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_5\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_6\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_7\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_8\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_9\n# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_10\n#\n# if BOOST_PP_SLOT_TEMP_3 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 0\n# elif BOOST_PP_SLOT_TEMP_3 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 1\n# elif BOOST_PP_SLOT_TEMP_3 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 2\n# elif BOOST_PP_SLOT_TEMP_3 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 3\n# elif BOOST_PP_SLOT_TEMP_3 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 4\n# elif BOOST_PP_SLOT_TEMP_3 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 5\n# elif BOOST_PP_SLOT_TEMP_3 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 6\n# elif BOOST_PP_SLOT_TEMP_3 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 7\n# elif BOOST_PP_SLOT_TEMP_3 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 8\n# elif BOOST_PP_SLOT_TEMP_3 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_2 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 0\n# elif BOOST_PP_SLOT_TEMP_2 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 1\n# elif BOOST_PP_SLOT_TEMP_2 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 2\n# elif BOOST_PP_SLOT_TEMP_2 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 3\n# elif BOOST_PP_SLOT_TEMP_2 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 4\n# elif BOOST_PP_SLOT_TEMP_2 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 5\n# elif BOOST_PP_SLOT_TEMP_2 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 6\n# elif BOOST_PP_SLOT_TEMP_2 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 7\n# elif BOOST_PP_SLOT_TEMP_2 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 8\n# elif BOOST_PP_SLOT_TEMP_2 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 9\n# endif\n#\n# if BOOST_PP_SLOT_TEMP_1 == 0\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 0\n# elif BOOST_PP_SLOT_TEMP_1 == 1\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 1\n# elif BOOST_PP_SLOT_TEMP_1 == 2\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 2\n# elif BOOST_PP_SLOT_TEMP_1 == 3\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 3\n# elif BOOST_PP_SLOT_TEMP_1 == 4\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 4\n# elif BOOST_PP_SLOT_TEMP_1 == 5\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 5\n# elif BOOST_PP_SLOT_TEMP_1 == 6\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 6\n# elif BOOST_PP_SLOT_TEMP_1 == 7\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 7\n# elif BOOST_PP_SLOT_TEMP_1 == 8\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 8\n# elif BOOST_PP_SLOT_TEMP_1 == 9\n#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 9\n# endif\n#\n# if BOOST_PP_ITERATION_FINISH_1_DIGIT_3\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_1_DIGIT_3, BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)\n# elif BOOST_PP_ITERATION_FINISH_1_DIGIT_2\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)\n# else\n#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_ITERATION_FINISH_1_DIGIT_1\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/iteration/detail/iter/forward1.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# if defined(BOOST_PP_ITERATION_LIMITS)\n#    if !defined(BOOST_PP_FILENAME_1)\n#        error BOOST_PP_ERROR:  depth #1 filename is not defined\n#    endif\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)\n#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>\n#    define BOOST_PP_ITERATION_FLAGS_1() 0\n#    undef BOOST_PP_ITERATION_LIMITS\n# elif defined(BOOST_PP_ITERATION_PARAMS_1)\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_1)\n#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>\n#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1)\n#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>\n#    define BOOST_PP_FILENAME_1 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_1)\n#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_1) >= 4\n#        define BOOST_PP_ITERATION_FLAGS_1() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_1)\n#    else\n#        define BOOST_PP_ITERATION_FLAGS_1() 0\n#    endif\n# else\n#    error BOOST_PP_ERROR:  depth #1 iteration boundaries or filename not defined\n# endif\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 1\n#\n# define BOOST_PP_IS_ITERATING 1\n#\n# if (BOOST_PP_ITERATION_START_1) > (BOOST_PP_ITERATION_FINISH_1)\n#    include <boost/preprocessor/iteration/detail/iter/reverse1.hpp>\n# else\n#    if BOOST_PP_ITERATION_START_1 <= 0 && BOOST_PP_ITERATION_FINISH_1 >= 0\n#        define BOOST_PP_ITERATION_1 0\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 1 && BOOST_PP_ITERATION_FINISH_1 >= 1\n#        define BOOST_PP_ITERATION_1 1\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 2 && BOOST_PP_ITERATION_FINISH_1 >= 2\n#        define BOOST_PP_ITERATION_1 2\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 3 && BOOST_PP_ITERATION_FINISH_1 >= 3\n#        define BOOST_PP_ITERATION_1 3\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 4 && BOOST_PP_ITERATION_FINISH_1 >= 4\n#        define BOOST_PP_ITERATION_1 4\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 5 && BOOST_PP_ITERATION_FINISH_1 >= 5\n#        define BOOST_PP_ITERATION_1 5\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 6 && BOOST_PP_ITERATION_FINISH_1 >= 6\n#        define BOOST_PP_ITERATION_1 6\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 7 && BOOST_PP_ITERATION_FINISH_1 >= 7\n#        define BOOST_PP_ITERATION_1 7\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 8 && BOOST_PP_ITERATION_FINISH_1 >= 8\n#        define BOOST_PP_ITERATION_1 8\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 9 && BOOST_PP_ITERATION_FINISH_1 >= 9\n#        define BOOST_PP_ITERATION_1 9\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 10 && BOOST_PP_ITERATION_FINISH_1 >= 10\n#        define BOOST_PP_ITERATION_1 10\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 11 && BOOST_PP_ITERATION_FINISH_1 >= 11\n#        define BOOST_PP_ITERATION_1 11\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 12 && BOOST_PP_ITERATION_FINISH_1 >= 12\n#        define BOOST_PP_ITERATION_1 12\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 13 && BOOST_PP_ITERATION_FINISH_1 >= 13\n#        define BOOST_PP_ITERATION_1 13\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 14 && BOOST_PP_ITERATION_FINISH_1 >= 14\n#        define BOOST_PP_ITERATION_1 14\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 15 && BOOST_PP_ITERATION_FINISH_1 >= 15\n#        define BOOST_PP_ITERATION_1 15\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 16 && BOOST_PP_ITERATION_FINISH_1 >= 16\n#        define BOOST_PP_ITERATION_1 16\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 17 && BOOST_PP_ITERATION_FINISH_1 >= 17\n#        define BOOST_PP_ITERATION_1 17\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 18 && BOOST_PP_ITERATION_FINISH_1 >= 18\n#        define BOOST_PP_ITERATION_1 18\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 19 && BOOST_PP_ITERATION_FINISH_1 >= 19\n#        define BOOST_PP_ITERATION_1 19\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 20 && BOOST_PP_ITERATION_FINISH_1 >= 20\n#        define BOOST_PP_ITERATION_1 20\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 21 && BOOST_PP_ITERATION_FINISH_1 >= 21\n#        define BOOST_PP_ITERATION_1 21\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 22 && BOOST_PP_ITERATION_FINISH_1 >= 22\n#        define BOOST_PP_ITERATION_1 22\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 23 && BOOST_PP_ITERATION_FINISH_1 >= 23\n#        define BOOST_PP_ITERATION_1 23\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 24 && BOOST_PP_ITERATION_FINISH_1 >= 24\n#        define BOOST_PP_ITERATION_1 24\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 25 && BOOST_PP_ITERATION_FINISH_1 >= 25\n#        define BOOST_PP_ITERATION_1 25\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 26 && BOOST_PP_ITERATION_FINISH_1 >= 26\n#        define BOOST_PP_ITERATION_1 26\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 27 && BOOST_PP_ITERATION_FINISH_1 >= 27\n#        define BOOST_PP_ITERATION_1 27\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 28 && BOOST_PP_ITERATION_FINISH_1 >= 28\n#        define BOOST_PP_ITERATION_1 28\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 29 && BOOST_PP_ITERATION_FINISH_1 >= 29\n#        define BOOST_PP_ITERATION_1 29\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 30 && BOOST_PP_ITERATION_FINISH_1 >= 30\n#        define BOOST_PP_ITERATION_1 30\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 31 && BOOST_PP_ITERATION_FINISH_1 >= 31\n#        define BOOST_PP_ITERATION_1 31\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 32 && BOOST_PP_ITERATION_FINISH_1 >= 32\n#        define BOOST_PP_ITERATION_1 32\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 33 && BOOST_PP_ITERATION_FINISH_1 >= 33\n#        define BOOST_PP_ITERATION_1 33\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 34 && BOOST_PP_ITERATION_FINISH_1 >= 34\n#        define BOOST_PP_ITERATION_1 34\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 35 && BOOST_PP_ITERATION_FINISH_1 >= 35\n#        define BOOST_PP_ITERATION_1 35\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 36 && BOOST_PP_ITERATION_FINISH_1 >= 36\n#        define BOOST_PP_ITERATION_1 36\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 37 && BOOST_PP_ITERATION_FINISH_1 >= 37\n#        define BOOST_PP_ITERATION_1 37\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 38 && BOOST_PP_ITERATION_FINISH_1 >= 38\n#        define BOOST_PP_ITERATION_1 38\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 39 && BOOST_PP_ITERATION_FINISH_1 >= 39\n#        define BOOST_PP_ITERATION_1 39\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 40 && BOOST_PP_ITERATION_FINISH_1 >= 40\n#        define BOOST_PP_ITERATION_1 40\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 41 && BOOST_PP_ITERATION_FINISH_1 >= 41\n#        define BOOST_PP_ITERATION_1 41\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 42 && BOOST_PP_ITERATION_FINISH_1 >= 42\n#        define BOOST_PP_ITERATION_1 42\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 43 && BOOST_PP_ITERATION_FINISH_1 >= 43\n#        define BOOST_PP_ITERATION_1 43\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 44 && BOOST_PP_ITERATION_FINISH_1 >= 44\n#        define BOOST_PP_ITERATION_1 44\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 45 && BOOST_PP_ITERATION_FINISH_1 >= 45\n#        define BOOST_PP_ITERATION_1 45\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 46 && BOOST_PP_ITERATION_FINISH_1 >= 46\n#        define BOOST_PP_ITERATION_1 46\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 47 && BOOST_PP_ITERATION_FINISH_1 >= 47\n#        define BOOST_PP_ITERATION_1 47\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 48 && BOOST_PP_ITERATION_FINISH_1 >= 48\n#        define BOOST_PP_ITERATION_1 48\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 49 && BOOST_PP_ITERATION_FINISH_1 >= 49\n#        define BOOST_PP_ITERATION_1 49\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 50 && BOOST_PP_ITERATION_FINISH_1 >= 50\n#        define BOOST_PP_ITERATION_1 50\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 51 && BOOST_PP_ITERATION_FINISH_1 >= 51\n#        define BOOST_PP_ITERATION_1 51\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 52 && BOOST_PP_ITERATION_FINISH_1 >= 52\n#        define BOOST_PP_ITERATION_1 52\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 53 && BOOST_PP_ITERATION_FINISH_1 >= 53\n#        define BOOST_PP_ITERATION_1 53\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 54 && BOOST_PP_ITERATION_FINISH_1 >= 54\n#        define BOOST_PP_ITERATION_1 54\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 55 && BOOST_PP_ITERATION_FINISH_1 >= 55\n#        define BOOST_PP_ITERATION_1 55\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 56 && BOOST_PP_ITERATION_FINISH_1 >= 56\n#        define BOOST_PP_ITERATION_1 56\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 57 && BOOST_PP_ITERATION_FINISH_1 >= 57\n#        define BOOST_PP_ITERATION_1 57\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 58 && BOOST_PP_ITERATION_FINISH_1 >= 58\n#        define BOOST_PP_ITERATION_1 58\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 59 && BOOST_PP_ITERATION_FINISH_1 >= 59\n#        define BOOST_PP_ITERATION_1 59\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 60 && BOOST_PP_ITERATION_FINISH_1 >= 60\n#        define BOOST_PP_ITERATION_1 60\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 61 && BOOST_PP_ITERATION_FINISH_1 >= 61\n#        define BOOST_PP_ITERATION_1 61\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 62 && BOOST_PP_ITERATION_FINISH_1 >= 62\n#        define BOOST_PP_ITERATION_1 62\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 63 && BOOST_PP_ITERATION_FINISH_1 >= 63\n#        define BOOST_PP_ITERATION_1 63\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 64 && BOOST_PP_ITERATION_FINISH_1 >= 64\n#        define BOOST_PP_ITERATION_1 64\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 65 && BOOST_PP_ITERATION_FINISH_1 >= 65\n#        define BOOST_PP_ITERATION_1 65\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 66 && BOOST_PP_ITERATION_FINISH_1 >= 66\n#        define BOOST_PP_ITERATION_1 66\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 67 && BOOST_PP_ITERATION_FINISH_1 >= 67\n#        define BOOST_PP_ITERATION_1 67\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 68 && BOOST_PP_ITERATION_FINISH_1 >= 68\n#        define BOOST_PP_ITERATION_1 68\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 69 && BOOST_PP_ITERATION_FINISH_1 >= 69\n#        define BOOST_PP_ITERATION_1 69\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 70 && BOOST_PP_ITERATION_FINISH_1 >= 70\n#        define BOOST_PP_ITERATION_1 70\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 71 && BOOST_PP_ITERATION_FINISH_1 >= 71\n#        define BOOST_PP_ITERATION_1 71\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 72 && BOOST_PP_ITERATION_FINISH_1 >= 72\n#        define BOOST_PP_ITERATION_1 72\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 73 && BOOST_PP_ITERATION_FINISH_1 >= 73\n#        define BOOST_PP_ITERATION_1 73\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 74 && BOOST_PP_ITERATION_FINISH_1 >= 74\n#        define BOOST_PP_ITERATION_1 74\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 75 && BOOST_PP_ITERATION_FINISH_1 >= 75\n#        define BOOST_PP_ITERATION_1 75\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 76 && BOOST_PP_ITERATION_FINISH_1 >= 76\n#        define BOOST_PP_ITERATION_1 76\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 77 && BOOST_PP_ITERATION_FINISH_1 >= 77\n#        define BOOST_PP_ITERATION_1 77\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 78 && BOOST_PP_ITERATION_FINISH_1 >= 78\n#        define BOOST_PP_ITERATION_1 78\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 79 && BOOST_PP_ITERATION_FINISH_1 >= 79\n#        define BOOST_PP_ITERATION_1 79\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 80 && BOOST_PP_ITERATION_FINISH_1 >= 80\n#        define BOOST_PP_ITERATION_1 80\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 81 && BOOST_PP_ITERATION_FINISH_1 >= 81\n#        define BOOST_PP_ITERATION_1 81\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 82 && BOOST_PP_ITERATION_FINISH_1 >= 82\n#        define BOOST_PP_ITERATION_1 82\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 83 && BOOST_PP_ITERATION_FINISH_1 >= 83\n#        define BOOST_PP_ITERATION_1 83\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 84 && BOOST_PP_ITERATION_FINISH_1 >= 84\n#        define BOOST_PP_ITERATION_1 84\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 85 && BOOST_PP_ITERATION_FINISH_1 >= 85\n#        define BOOST_PP_ITERATION_1 85\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 86 && BOOST_PP_ITERATION_FINISH_1 >= 86\n#        define BOOST_PP_ITERATION_1 86\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 87 && BOOST_PP_ITERATION_FINISH_1 >= 87\n#        define BOOST_PP_ITERATION_1 87\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 88 && BOOST_PP_ITERATION_FINISH_1 >= 88\n#        define BOOST_PP_ITERATION_1 88\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 89 && BOOST_PP_ITERATION_FINISH_1 >= 89\n#        define BOOST_PP_ITERATION_1 89\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 90 && BOOST_PP_ITERATION_FINISH_1 >= 90\n#        define BOOST_PP_ITERATION_1 90\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 91 && BOOST_PP_ITERATION_FINISH_1 >= 91\n#        define BOOST_PP_ITERATION_1 91\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 92 && BOOST_PP_ITERATION_FINISH_1 >= 92\n#        define BOOST_PP_ITERATION_1 92\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 93 && BOOST_PP_ITERATION_FINISH_1 >= 93\n#        define BOOST_PP_ITERATION_1 93\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 94 && BOOST_PP_ITERATION_FINISH_1 >= 94\n#        define BOOST_PP_ITERATION_1 94\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 95 && BOOST_PP_ITERATION_FINISH_1 >= 95\n#        define BOOST_PP_ITERATION_1 95\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 96 && BOOST_PP_ITERATION_FINISH_1 >= 96\n#        define BOOST_PP_ITERATION_1 96\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 97 && BOOST_PP_ITERATION_FINISH_1 >= 97\n#        define BOOST_PP_ITERATION_1 97\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 98 && BOOST_PP_ITERATION_FINISH_1 >= 98\n#        define BOOST_PP_ITERATION_1 98\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 99 && BOOST_PP_ITERATION_FINISH_1 >= 99\n#        define BOOST_PP_ITERATION_1 99\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 100 && BOOST_PP_ITERATION_FINISH_1 >= 100\n#        define BOOST_PP_ITERATION_1 100\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 101 && BOOST_PP_ITERATION_FINISH_1 >= 101\n#        define BOOST_PP_ITERATION_1 101\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 102 && BOOST_PP_ITERATION_FINISH_1 >= 102\n#        define BOOST_PP_ITERATION_1 102\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 103 && BOOST_PP_ITERATION_FINISH_1 >= 103\n#        define BOOST_PP_ITERATION_1 103\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 104 && BOOST_PP_ITERATION_FINISH_1 >= 104\n#        define BOOST_PP_ITERATION_1 104\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 105 && BOOST_PP_ITERATION_FINISH_1 >= 105\n#        define BOOST_PP_ITERATION_1 105\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 106 && BOOST_PP_ITERATION_FINISH_1 >= 106\n#        define BOOST_PP_ITERATION_1 106\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 107 && BOOST_PP_ITERATION_FINISH_1 >= 107\n#        define BOOST_PP_ITERATION_1 107\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 108 && BOOST_PP_ITERATION_FINISH_1 >= 108\n#        define BOOST_PP_ITERATION_1 108\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 109 && BOOST_PP_ITERATION_FINISH_1 >= 109\n#        define BOOST_PP_ITERATION_1 109\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 110 && BOOST_PP_ITERATION_FINISH_1 >= 110\n#        define BOOST_PP_ITERATION_1 110\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 111 && BOOST_PP_ITERATION_FINISH_1 >= 111\n#        define BOOST_PP_ITERATION_1 111\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 112 && BOOST_PP_ITERATION_FINISH_1 >= 112\n#        define BOOST_PP_ITERATION_1 112\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 113 && BOOST_PP_ITERATION_FINISH_1 >= 113\n#        define BOOST_PP_ITERATION_1 113\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 114 && BOOST_PP_ITERATION_FINISH_1 >= 114\n#        define BOOST_PP_ITERATION_1 114\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 115 && BOOST_PP_ITERATION_FINISH_1 >= 115\n#        define BOOST_PP_ITERATION_1 115\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 116 && BOOST_PP_ITERATION_FINISH_1 >= 116\n#        define BOOST_PP_ITERATION_1 116\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 117 && BOOST_PP_ITERATION_FINISH_1 >= 117\n#        define BOOST_PP_ITERATION_1 117\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 118 && BOOST_PP_ITERATION_FINISH_1 >= 118\n#        define BOOST_PP_ITERATION_1 118\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 119 && BOOST_PP_ITERATION_FINISH_1 >= 119\n#        define BOOST_PP_ITERATION_1 119\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 120 && BOOST_PP_ITERATION_FINISH_1 >= 120\n#        define BOOST_PP_ITERATION_1 120\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 121 && BOOST_PP_ITERATION_FINISH_1 >= 121\n#        define BOOST_PP_ITERATION_1 121\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 122 && BOOST_PP_ITERATION_FINISH_1 >= 122\n#        define BOOST_PP_ITERATION_1 122\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 123 && BOOST_PP_ITERATION_FINISH_1 >= 123\n#        define BOOST_PP_ITERATION_1 123\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 124 && BOOST_PP_ITERATION_FINISH_1 >= 124\n#        define BOOST_PP_ITERATION_1 124\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 125 && BOOST_PP_ITERATION_FINISH_1 >= 125\n#        define BOOST_PP_ITERATION_1 125\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 126 && BOOST_PP_ITERATION_FINISH_1 >= 126\n#        define BOOST_PP_ITERATION_1 126\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 127 && BOOST_PP_ITERATION_FINISH_1 >= 127\n#        define BOOST_PP_ITERATION_1 127\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 128 && BOOST_PP_ITERATION_FINISH_1 >= 128\n#        define BOOST_PP_ITERATION_1 128\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 129 && BOOST_PP_ITERATION_FINISH_1 >= 129\n#        define BOOST_PP_ITERATION_1 129\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 130 && BOOST_PP_ITERATION_FINISH_1 >= 130\n#        define BOOST_PP_ITERATION_1 130\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 131 && BOOST_PP_ITERATION_FINISH_1 >= 131\n#        define BOOST_PP_ITERATION_1 131\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 132 && BOOST_PP_ITERATION_FINISH_1 >= 132\n#        define BOOST_PP_ITERATION_1 132\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 133 && BOOST_PP_ITERATION_FINISH_1 >= 133\n#        define BOOST_PP_ITERATION_1 133\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 134 && BOOST_PP_ITERATION_FINISH_1 >= 134\n#        define BOOST_PP_ITERATION_1 134\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 135 && BOOST_PP_ITERATION_FINISH_1 >= 135\n#        define BOOST_PP_ITERATION_1 135\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 136 && BOOST_PP_ITERATION_FINISH_1 >= 136\n#        define BOOST_PP_ITERATION_1 136\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 137 && BOOST_PP_ITERATION_FINISH_1 >= 137\n#        define BOOST_PP_ITERATION_1 137\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 138 && BOOST_PP_ITERATION_FINISH_1 >= 138\n#        define BOOST_PP_ITERATION_1 138\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 139 && BOOST_PP_ITERATION_FINISH_1 >= 139\n#        define BOOST_PP_ITERATION_1 139\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 140 && BOOST_PP_ITERATION_FINISH_1 >= 140\n#        define BOOST_PP_ITERATION_1 140\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 141 && BOOST_PP_ITERATION_FINISH_1 >= 141\n#        define BOOST_PP_ITERATION_1 141\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 142 && BOOST_PP_ITERATION_FINISH_1 >= 142\n#        define BOOST_PP_ITERATION_1 142\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 143 && BOOST_PP_ITERATION_FINISH_1 >= 143\n#        define BOOST_PP_ITERATION_1 143\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 144 && BOOST_PP_ITERATION_FINISH_1 >= 144\n#        define BOOST_PP_ITERATION_1 144\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 145 && BOOST_PP_ITERATION_FINISH_1 >= 145\n#        define BOOST_PP_ITERATION_1 145\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 146 && BOOST_PP_ITERATION_FINISH_1 >= 146\n#        define BOOST_PP_ITERATION_1 146\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 147 && BOOST_PP_ITERATION_FINISH_1 >= 147\n#        define BOOST_PP_ITERATION_1 147\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 148 && BOOST_PP_ITERATION_FINISH_1 >= 148\n#        define BOOST_PP_ITERATION_1 148\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 149 && BOOST_PP_ITERATION_FINISH_1 >= 149\n#        define BOOST_PP_ITERATION_1 149\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 150 && BOOST_PP_ITERATION_FINISH_1 >= 150\n#        define BOOST_PP_ITERATION_1 150\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 151 && BOOST_PP_ITERATION_FINISH_1 >= 151\n#        define BOOST_PP_ITERATION_1 151\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 152 && BOOST_PP_ITERATION_FINISH_1 >= 152\n#        define BOOST_PP_ITERATION_1 152\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 153 && BOOST_PP_ITERATION_FINISH_1 >= 153\n#        define BOOST_PP_ITERATION_1 153\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 154 && BOOST_PP_ITERATION_FINISH_1 >= 154\n#        define BOOST_PP_ITERATION_1 154\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 155 && BOOST_PP_ITERATION_FINISH_1 >= 155\n#        define BOOST_PP_ITERATION_1 155\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 156 && BOOST_PP_ITERATION_FINISH_1 >= 156\n#        define BOOST_PP_ITERATION_1 156\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 157 && BOOST_PP_ITERATION_FINISH_1 >= 157\n#        define BOOST_PP_ITERATION_1 157\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 158 && BOOST_PP_ITERATION_FINISH_1 >= 158\n#        define BOOST_PP_ITERATION_1 158\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 159 && BOOST_PP_ITERATION_FINISH_1 >= 159\n#        define BOOST_PP_ITERATION_1 159\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 160 && BOOST_PP_ITERATION_FINISH_1 >= 160\n#        define BOOST_PP_ITERATION_1 160\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 161 && BOOST_PP_ITERATION_FINISH_1 >= 161\n#        define BOOST_PP_ITERATION_1 161\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 162 && BOOST_PP_ITERATION_FINISH_1 >= 162\n#        define BOOST_PP_ITERATION_1 162\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 163 && BOOST_PP_ITERATION_FINISH_1 >= 163\n#        define BOOST_PP_ITERATION_1 163\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 164 && BOOST_PP_ITERATION_FINISH_1 >= 164\n#        define BOOST_PP_ITERATION_1 164\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 165 && BOOST_PP_ITERATION_FINISH_1 >= 165\n#        define BOOST_PP_ITERATION_1 165\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 166 && BOOST_PP_ITERATION_FINISH_1 >= 166\n#        define BOOST_PP_ITERATION_1 166\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 167 && BOOST_PP_ITERATION_FINISH_1 >= 167\n#        define BOOST_PP_ITERATION_1 167\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 168 && BOOST_PP_ITERATION_FINISH_1 >= 168\n#        define BOOST_PP_ITERATION_1 168\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 169 && BOOST_PP_ITERATION_FINISH_1 >= 169\n#        define BOOST_PP_ITERATION_1 169\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 170 && BOOST_PP_ITERATION_FINISH_1 >= 170\n#        define BOOST_PP_ITERATION_1 170\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 171 && BOOST_PP_ITERATION_FINISH_1 >= 171\n#        define BOOST_PP_ITERATION_1 171\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 172 && BOOST_PP_ITERATION_FINISH_1 >= 172\n#        define BOOST_PP_ITERATION_1 172\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 173 && BOOST_PP_ITERATION_FINISH_1 >= 173\n#        define BOOST_PP_ITERATION_1 173\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 174 && BOOST_PP_ITERATION_FINISH_1 >= 174\n#        define BOOST_PP_ITERATION_1 174\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 175 && BOOST_PP_ITERATION_FINISH_1 >= 175\n#        define BOOST_PP_ITERATION_1 175\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 176 && BOOST_PP_ITERATION_FINISH_1 >= 176\n#        define BOOST_PP_ITERATION_1 176\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 177 && BOOST_PP_ITERATION_FINISH_1 >= 177\n#        define BOOST_PP_ITERATION_1 177\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 178 && BOOST_PP_ITERATION_FINISH_1 >= 178\n#        define BOOST_PP_ITERATION_1 178\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 179 && BOOST_PP_ITERATION_FINISH_1 >= 179\n#        define BOOST_PP_ITERATION_1 179\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 180 && BOOST_PP_ITERATION_FINISH_1 >= 180\n#        define BOOST_PP_ITERATION_1 180\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 181 && BOOST_PP_ITERATION_FINISH_1 >= 181\n#        define BOOST_PP_ITERATION_1 181\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 182 && BOOST_PP_ITERATION_FINISH_1 >= 182\n#        define BOOST_PP_ITERATION_1 182\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 183 && BOOST_PP_ITERATION_FINISH_1 >= 183\n#        define BOOST_PP_ITERATION_1 183\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 184 && BOOST_PP_ITERATION_FINISH_1 >= 184\n#        define BOOST_PP_ITERATION_1 184\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 185 && BOOST_PP_ITERATION_FINISH_1 >= 185\n#        define BOOST_PP_ITERATION_1 185\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 186 && BOOST_PP_ITERATION_FINISH_1 >= 186\n#        define BOOST_PP_ITERATION_1 186\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 187 && BOOST_PP_ITERATION_FINISH_1 >= 187\n#        define BOOST_PP_ITERATION_1 187\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 188 && BOOST_PP_ITERATION_FINISH_1 >= 188\n#        define BOOST_PP_ITERATION_1 188\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 189 && BOOST_PP_ITERATION_FINISH_1 >= 189\n#        define BOOST_PP_ITERATION_1 189\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 190 && BOOST_PP_ITERATION_FINISH_1 >= 190\n#        define BOOST_PP_ITERATION_1 190\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 191 && BOOST_PP_ITERATION_FINISH_1 >= 191\n#        define BOOST_PP_ITERATION_1 191\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 192 && BOOST_PP_ITERATION_FINISH_1 >= 192\n#        define BOOST_PP_ITERATION_1 192\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 193 && BOOST_PP_ITERATION_FINISH_1 >= 193\n#        define BOOST_PP_ITERATION_1 193\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 194 && BOOST_PP_ITERATION_FINISH_1 >= 194\n#        define BOOST_PP_ITERATION_1 194\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 195 && BOOST_PP_ITERATION_FINISH_1 >= 195\n#        define BOOST_PP_ITERATION_1 195\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 196 && BOOST_PP_ITERATION_FINISH_1 >= 196\n#        define BOOST_PP_ITERATION_1 196\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 197 && BOOST_PP_ITERATION_FINISH_1 >= 197\n#        define BOOST_PP_ITERATION_1 197\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 198 && BOOST_PP_ITERATION_FINISH_1 >= 198\n#        define BOOST_PP_ITERATION_1 198\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 199 && BOOST_PP_ITERATION_FINISH_1 >= 199\n#        define BOOST_PP_ITERATION_1 199\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 200 && BOOST_PP_ITERATION_FINISH_1 >= 200\n#        define BOOST_PP_ITERATION_1 200\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 201 && BOOST_PP_ITERATION_FINISH_1 >= 201\n#        define BOOST_PP_ITERATION_1 201\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 202 && BOOST_PP_ITERATION_FINISH_1 >= 202\n#        define BOOST_PP_ITERATION_1 202\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 203 && BOOST_PP_ITERATION_FINISH_1 >= 203\n#        define BOOST_PP_ITERATION_1 203\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 204 && BOOST_PP_ITERATION_FINISH_1 >= 204\n#        define BOOST_PP_ITERATION_1 204\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 205 && BOOST_PP_ITERATION_FINISH_1 >= 205\n#        define BOOST_PP_ITERATION_1 205\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 206 && BOOST_PP_ITERATION_FINISH_1 >= 206\n#        define BOOST_PP_ITERATION_1 206\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 207 && BOOST_PP_ITERATION_FINISH_1 >= 207\n#        define BOOST_PP_ITERATION_1 207\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 208 && BOOST_PP_ITERATION_FINISH_1 >= 208\n#        define BOOST_PP_ITERATION_1 208\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 209 && BOOST_PP_ITERATION_FINISH_1 >= 209\n#        define BOOST_PP_ITERATION_1 209\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 210 && BOOST_PP_ITERATION_FINISH_1 >= 210\n#        define BOOST_PP_ITERATION_1 210\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 211 && BOOST_PP_ITERATION_FINISH_1 >= 211\n#        define BOOST_PP_ITERATION_1 211\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 212 && BOOST_PP_ITERATION_FINISH_1 >= 212\n#        define BOOST_PP_ITERATION_1 212\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 213 && BOOST_PP_ITERATION_FINISH_1 >= 213\n#        define BOOST_PP_ITERATION_1 213\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 214 && BOOST_PP_ITERATION_FINISH_1 >= 214\n#        define BOOST_PP_ITERATION_1 214\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 215 && BOOST_PP_ITERATION_FINISH_1 >= 215\n#        define BOOST_PP_ITERATION_1 215\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 216 && BOOST_PP_ITERATION_FINISH_1 >= 216\n#        define BOOST_PP_ITERATION_1 216\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 217 && BOOST_PP_ITERATION_FINISH_1 >= 217\n#        define BOOST_PP_ITERATION_1 217\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 218 && BOOST_PP_ITERATION_FINISH_1 >= 218\n#        define BOOST_PP_ITERATION_1 218\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 219 && BOOST_PP_ITERATION_FINISH_1 >= 219\n#        define BOOST_PP_ITERATION_1 219\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 220 && BOOST_PP_ITERATION_FINISH_1 >= 220\n#        define BOOST_PP_ITERATION_1 220\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 221 && BOOST_PP_ITERATION_FINISH_1 >= 221\n#        define BOOST_PP_ITERATION_1 221\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 222 && BOOST_PP_ITERATION_FINISH_1 >= 222\n#        define BOOST_PP_ITERATION_1 222\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 223 && BOOST_PP_ITERATION_FINISH_1 >= 223\n#        define BOOST_PP_ITERATION_1 223\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 224 && BOOST_PP_ITERATION_FINISH_1 >= 224\n#        define BOOST_PP_ITERATION_1 224\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 225 && BOOST_PP_ITERATION_FINISH_1 >= 225\n#        define BOOST_PP_ITERATION_1 225\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 226 && BOOST_PP_ITERATION_FINISH_1 >= 226\n#        define BOOST_PP_ITERATION_1 226\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 227 && BOOST_PP_ITERATION_FINISH_1 >= 227\n#        define BOOST_PP_ITERATION_1 227\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 228 && BOOST_PP_ITERATION_FINISH_1 >= 228\n#        define BOOST_PP_ITERATION_1 228\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 229 && BOOST_PP_ITERATION_FINISH_1 >= 229\n#        define BOOST_PP_ITERATION_1 229\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 230 && BOOST_PP_ITERATION_FINISH_1 >= 230\n#        define BOOST_PP_ITERATION_1 230\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 231 && BOOST_PP_ITERATION_FINISH_1 >= 231\n#        define BOOST_PP_ITERATION_1 231\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 232 && BOOST_PP_ITERATION_FINISH_1 >= 232\n#        define BOOST_PP_ITERATION_1 232\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 233 && BOOST_PP_ITERATION_FINISH_1 >= 233\n#        define BOOST_PP_ITERATION_1 233\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 234 && BOOST_PP_ITERATION_FINISH_1 >= 234\n#        define BOOST_PP_ITERATION_1 234\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 235 && BOOST_PP_ITERATION_FINISH_1 >= 235\n#        define BOOST_PP_ITERATION_1 235\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 236 && BOOST_PP_ITERATION_FINISH_1 >= 236\n#        define BOOST_PP_ITERATION_1 236\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 237 && BOOST_PP_ITERATION_FINISH_1 >= 237\n#        define BOOST_PP_ITERATION_1 237\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 238 && BOOST_PP_ITERATION_FINISH_1 >= 238\n#        define BOOST_PP_ITERATION_1 238\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 239 && BOOST_PP_ITERATION_FINISH_1 >= 239\n#        define BOOST_PP_ITERATION_1 239\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 240 && BOOST_PP_ITERATION_FINISH_1 >= 240\n#        define BOOST_PP_ITERATION_1 240\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 241 && BOOST_PP_ITERATION_FINISH_1 >= 241\n#        define BOOST_PP_ITERATION_1 241\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 242 && BOOST_PP_ITERATION_FINISH_1 >= 242\n#        define BOOST_PP_ITERATION_1 242\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 243 && BOOST_PP_ITERATION_FINISH_1 >= 243\n#        define BOOST_PP_ITERATION_1 243\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 244 && BOOST_PP_ITERATION_FINISH_1 >= 244\n#        define BOOST_PP_ITERATION_1 244\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 245 && BOOST_PP_ITERATION_FINISH_1 >= 245\n#        define BOOST_PP_ITERATION_1 245\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 246 && BOOST_PP_ITERATION_FINISH_1 >= 246\n#        define BOOST_PP_ITERATION_1 246\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 247 && BOOST_PP_ITERATION_FINISH_1 >= 247\n#        define BOOST_PP_ITERATION_1 247\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 248 && BOOST_PP_ITERATION_FINISH_1 >= 248\n#        define BOOST_PP_ITERATION_1 248\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 249 && BOOST_PP_ITERATION_FINISH_1 >= 249\n#        define BOOST_PP_ITERATION_1 249\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 250 && BOOST_PP_ITERATION_FINISH_1 >= 250\n#        define BOOST_PP_ITERATION_1 250\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 251 && BOOST_PP_ITERATION_FINISH_1 >= 251\n#        define BOOST_PP_ITERATION_1 251\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 252 && BOOST_PP_ITERATION_FINISH_1 >= 252\n#        define BOOST_PP_ITERATION_1 252\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 253 && BOOST_PP_ITERATION_FINISH_1 >= 253\n#        define BOOST_PP_ITERATION_1 253\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 254 && BOOST_PP_ITERATION_FINISH_1 >= 254\n#        define BOOST_PP_ITERATION_1 254\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 255 && BOOST_PP_ITERATION_FINISH_1 >= 255\n#        define BOOST_PP_ITERATION_1 255\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n#    if BOOST_PP_ITERATION_START_1 <= 256 && BOOST_PP_ITERATION_FINISH_1 >= 256\n#        define BOOST_PP_ITERATION_1 256\n#        include BOOST_PP_FILENAME_1\n#        undef BOOST_PP_ITERATION_1\n#    endif\n# endif\n#\n# undef BOOST_PP_IS_ITERATING\n#\n# undef BOOST_PP_ITERATION_DEPTH\n# define BOOST_PP_ITERATION_DEPTH() 0\n#\n# undef BOOST_PP_ITERATION_START_1\n# undef BOOST_PP_ITERATION_FINISH_1\n# undef BOOST_PP_FILENAME_1\n#\n# undef BOOST_PP_ITERATION_FLAGS_1\n# undef BOOST_PP_ITERATION_PARAMS_1\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/iteration/iterate.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP\n# define BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/array/elem.hpp>\n# include <boost/preprocessor/array/size.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/slot/slot.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n#\n# /* BOOST_PP_ITERATION_DEPTH */\n#\n# define BOOST_PP_ITERATION_DEPTH() 0\n#\n# /* BOOST_PP_ITERATION */\n#\n# define BOOST_PP_ITERATION() BOOST_PP_CAT(BOOST_PP_ITERATION_, BOOST_PP_ITERATION_DEPTH())\n#\n# /* BOOST_PP_ITERATION_START && BOOST_PP_ITERATION_FINISH */\n#\n# define BOOST_PP_ITERATION_START() BOOST_PP_CAT(BOOST_PP_ITERATION_START_, BOOST_PP_ITERATION_DEPTH())\n# define BOOST_PP_ITERATION_FINISH() BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, BOOST_PP_ITERATION_DEPTH())\n#\n# /* BOOST_PP_ITERATION_FLAGS */\n#\n# define BOOST_PP_ITERATION_FLAGS() (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, BOOST_PP_ITERATION_DEPTH())())\n#\n# /* BOOST_PP_FRAME_ITERATION */\n#\n# define BOOST_PP_FRAME_ITERATION(i) BOOST_PP_CAT(BOOST_PP_ITERATION_, i)\n#\n# /* BOOST_PP_FRAME_START && BOOST_PP_FRAME_FINISH */\n#\n# define BOOST_PP_FRAME_START(i) BOOST_PP_CAT(BOOST_PP_ITERATION_START_, i)\n# define BOOST_PP_FRAME_FINISH(i) BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, i)\n#\n# /* BOOST_PP_FRAME_FLAGS */\n#\n# define BOOST_PP_FRAME_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, i)())\n#\n# /* BOOST_PP_RELATIVE_ITERATION */\n#\n# define BOOST_PP_RELATIVE_ITERATION(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_)\n#\n# define BOOST_PP_RELATIVE_0(m) BOOST_PP_CAT(m, BOOST_PP_ITERATION_DEPTH())\n# define BOOST_PP_RELATIVE_1(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))\n# define BOOST_PP_RELATIVE_2(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))\n# define BOOST_PP_RELATIVE_3(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))))\n# define BOOST_PP_RELATIVE_4(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))))\n#\n# /* BOOST_PP_RELATIVE_START && BOOST_PP_RELATIVE_FINISH */\n#\n# define BOOST_PP_RELATIVE_START(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_START_)\n# define BOOST_PP_RELATIVE_FINISH(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FINISH_)\n#\n# /* BOOST_PP_RELATIVE_FLAGS */\n#\n# define BOOST_PP_RELATIVE_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FLAGS_)())\n#\n# /* BOOST_PP_ITERATE */\n#\n# define BOOST_PP_ITERATE() BOOST_PP_CAT(BOOST_PP_ITERATE_, BOOST_PP_INC(BOOST_PP_ITERATION_DEPTH()))\n#\n# define BOOST_PP_ITERATE_1 <boost/preprocessor/iteration/detail/iter/forward1.hpp>\n# define BOOST_PP_ITERATE_2 <boost/preprocessor/iteration/detail/iter/forward2.hpp>\n# define BOOST_PP_ITERATE_3 <boost/preprocessor/iteration/detail/iter/forward3.hpp>\n# define BOOST_PP_ITERATE_4 <boost/preprocessor/iteration/detail/iter/forward4.hpp>\n# define BOOST_PP_ITERATE_5 <boost/preprocessor/iteration/detail/iter/forward5.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/adt.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  *\n#  * See http://www.boost.org for most recent version.\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_ADT_HPP\n# define BOOST_PREPROCESSOR_LIST_ADT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/detail/is_binary.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_LIST_CONS */\n#\n# define BOOST_PP_LIST_CONS(head, tail) (head, tail)\n#\n# /* BOOST_PP_LIST_NIL */\n#\n# define BOOST_PP_LIST_NIL BOOST_PP_NIL\n#\n# /* BOOST_PP_LIST_FIRST */\n#\n# define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list\n# else\n#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I ## list\n# endif\n#\n# define BOOST_PP_LIST_FIRST_I(head, tail) head\n#\n# /* BOOST_PP_LIST_REST */\n#\n# define BOOST_PP_LIST_REST(list) BOOST_PP_LIST_REST_D(list)\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I list\n# else\n#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I ## list\n# endif\n#\n# define BOOST_PP_LIST_REST_I(head, tail) tail\n#\n# /* BOOST_PP_LIST_IS_CONS */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()\n#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list)\n#    define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list\n#    define BOOST_PP_LIST_IS_CONS_(head, tail) 1\n#    define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0\n# else\n#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)\n# endif\n#\n# /* BOOST_PP_LIST_IS_NIL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()\n#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list))\n# else\n#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/append.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_APPEND_HPP\n# define BOOST_PREPROCESSOR_LIST_APPEND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n#\n# /* BOOST_PP_LIST_APPEND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)\n# else\n#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_APPEND_I(a, b)\n#    define BOOST_PP_LIST_APPEND_I(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)\n# endif\n#\n# define BOOST_PP_LIST_APPEND_O(d, s, x) (x, s)\n#\n# /* BOOST_PP_LIST_APPEND_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)\n# else\n#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_APPEND_D_I(d, a, b)\n#    define BOOST_PP_LIST_APPEND_D_I(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/detail/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/detail/fold_right.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/list/fold_left.hpp>\n# include <boost/preprocessor/list/reverse.hpp>\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1(o, s, BOOST_PP_LIST_REVERSE_D(1, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2(o, s, BOOST_PP_LIST_REVERSE_D(2, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3(o, s, BOOST_PP_LIST_REVERSE_D(3, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4(o, s, BOOST_PP_LIST_REVERSE_D(4, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5(o, s, BOOST_PP_LIST_REVERSE_D(5, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6(o, s, BOOST_PP_LIST_REVERSE_D(6, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7(o, s, BOOST_PP_LIST_REVERSE_D(7, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8(o, s, BOOST_PP_LIST_REVERSE_D(8, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9(o, s, BOOST_PP_LIST_REVERSE_D(9, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10(o, s, BOOST_PP_LIST_REVERSE_D(10, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11(o, s, BOOST_PP_LIST_REVERSE_D(11, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12(o, s, BOOST_PP_LIST_REVERSE_D(12, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13(o, s, BOOST_PP_LIST_REVERSE_D(13, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14(o, s, BOOST_PP_LIST_REVERSE_D(14, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15(o, s, BOOST_PP_LIST_REVERSE_D(15, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16(o, s, BOOST_PP_LIST_REVERSE_D(16, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17(o, s, BOOST_PP_LIST_REVERSE_D(17, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18(o, s, BOOST_PP_LIST_REVERSE_D(18, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19(o, s, BOOST_PP_LIST_REVERSE_D(19, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20(o, s, BOOST_PP_LIST_REVERSE_D(20, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21(o, s, BOOST_PP_LIST_REVERSE_D(21, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22(o, s, BOOST_PP_LIST_REVERSE_D(22, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23(o, s, BOOST_PP_LIST_REVERSE_D(23, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24(o, s, BOOST_PP_LIST_REVERSE_D(24, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25(o, s, BOOST_PP_LIST_REVERSE_D(25, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26(o, s, BOOST_PP_LIST_REVERSE_D(26, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27(o, s, BOOST_PP_LIST_REVERSE_D(27, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28(o, s, BOOST_PP_LIST_REVERSE_D(28, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29(o, s, BOOST_PP_LIST_REVERSE_D(29, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30(o, s, BOOST_PP_LIST_REVERSE_D(30, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31(o, s, BOOST_PP_LIST_REVERSE_D(31, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32(o, s, BOOST_PP_LIST_REVERSE_D(32, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33(o, s, BOOST_PP_LIST_REVERSE_D(33, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34(o, s, BOOST_PP_LIST_REVERSE_D(34, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35(o, s, BOOST_PP_LIST_REVERSE_D(35, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36(o, s, BOOST_PP_LIST_REVERSE_D(36, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37(o, s, BOOST_PP_LIST_REVERSE_D(37, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38(o, s, BOOST_PP_LIST_REVERSE_D(38, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39(o, s, BOOST_PP_LIST_REVERSE_D(39, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40(o, s, BOOST_PP_LIST_REVERSE_D(40, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41(o, s, BOOST_PP_LIST_REVERSE_D(41, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42(o, s, BOOST_PP_LIST_REVERSE_D(42, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43(o, s, BOOST_PP_LIST_REVERSE_D(43, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44(o, s, BOOST_PP_LIST_REVERSE_D(44, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45(o, s, BOOST_PP_LIST_REVERSE_D(45, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46(o, s, BOOST_PP_LIST_REVERSE_D(46, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47(o, s, BOOST_PP_LIST_REVERSE_D(47, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48(o, s, BOOST_PP_LIST_REVERSE_D(48, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49(o, s, BOOST_PP_LIST_REVERSE_D(49, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50(o, s, BOOST_PP_LIST_REVERSE_D(50, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51(o, s, BOOST_PP_LIST_REVERSE_D(51, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52(o, s, BOOST_PP_LIST_REVERSE_D(52, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53(o, s, BOOST_PP_LIST_REVERSE_D(53, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54(o, s, BOOST_PP_LIST_REVERSE_D(54, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55(o, s, BOOST_PP_LIST_REVERSE_D(55, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56(o, s, BOOST_PP_LIST_REVERSE_D(56, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57(o, s, BOOST_PP_LIST_REVERSE_D(57, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58(o, s, BOOST_PP_LIST_REVERSE_D(58, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59(o, s, BOOST_PP_LIST_REVERSE_D(59, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60(o, s, BOOST_PP_LIST_REVERSE_D(60, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61(o, s, BOOST_PP_LIST_REVERSE_D(61, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62(o, s, BOOST_PP_LIST_REVERSE_D(62, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63(o, s, BOOST_PP_LIST_REVERSE_D(63, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64(o, s, BOOST_PP_LIST_REVERSE_D(64, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65(o, s, BOOST_PP_LIST_REVERSE_D(65, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66(o, s, BOOST_PP_LIST_REVERSE_D(66, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67(o, s, BOOST_PP_LIST_REVERSE_D(67, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68(o, s, BOOST_PP_LIST_REVERSE_D(68, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69(o, s, BOOST_PP_LIST_REVERSE_D(69, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70(o, s, BOOST_PP_LIST_REVERSE_D(70, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71(o, s, BOOST_PP_LIST_REVERSE_D(71, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72(o, s, BOOST_PP_LIST_REVERSE_D(72, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73(o, s, BOOST_PP_LIST_REVERSE_D(73, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74(o, s, BOOST_PP_LIST_REVERSE_D(74, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75(o, s, BOOST_PP_LIST_REVERSE_D(75, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76(o, s, BOOST_PP_LIST_REVERSE_D(76, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77(o, s, BOOST_PP_LIST_REVERSE_D(77, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78(o, s, BOOST_PP_LIST_REVERSE_D(78, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79(o, s, BOOST_PP_LIST_REVERSE_D(79, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80(o, s, BOOST_PP_LIST_REVERSE_D(80, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81(o, s, BOOST_PP_LIST_REVERSE_D(81, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82(o, s, BOOST_PP_LIST_REVERSE_D(82, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83(o, s, BOOST_PP_LIST_REVERSE_D(83, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84(o, s, BOOST_PP_LIST_REVERSE_D(84, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85(o, s, BOOST_PP_LIST_REVERSE_D(85, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86(o, s, BOOST_PP_LIST_REVERSE_D(86, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87(o, s, BOOST_PP_LIST_REVERSE_D(87, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88(o, s, BOOST_PP_LIST_REVERSE_D(88, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89(o, s, BOOST_PP_LIST_REVERSE_D(89, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90(o, s, BOOST_PP_LIST_REVERSE_D(90, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91(o, s, BOOST_PP_LIST_REVERSE_D(91, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92(o, s, BOOST_PP_LIST_REVERSE_D(92, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93(o, s, BOOST_PP_LIST_REVERSE_D(93, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94(o, s, BOOST_PP_LIST_REVERSE_D(94, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95(o, s, BOOST_PP_LIST_REVERSE_D(95, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96(o, s, BOOST_PP_LIST_REVERSE_D(96, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97(o, s, BOOST_PP_LIST_REVERSE_D(97, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98(o, s, BOOST_PP_LIST_REVERSE_D(98, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99(o, s, BOOST_PP_LIST_REVERSE_D(99, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100(o, s, BOOST_PP_LIST_REVERSE_D(100, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101(o, s, BOOST_PP_LIST_REVERSE_D(101, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102(o, s, BOOST_PP_LIST_REVERSE_D(102, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103(o, s, BOOST_PP_LIST_REVERSE_D(103, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104(o, s, BOOST_PP_LIST_REVERSE_D(104, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105(o, s, BOOST_PP_LIST_REVERSE_D(105, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106(o, s, BOOST_PP_LIST_REVERSE_D(106, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107(o, s, BOOST_PP_LIST_REVERSE_D(107, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108(o, s, BOOST_PP_LIST_REVERSE_D(108, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109(o, s, BOOST_PP_LIST_REVERSE_D(109, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110(o, s, BOOST_PP_LIST_REVERSE_D(110, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111(o, s, BOOST_PP_LIST_REVERSE_D(111, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112(o, s, BOOST_PP_LIST_REVERSE_D(112, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113(o, s, BOOST_PP_LIST_REVERSE_D(113, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114(o, s, BOOST_PP_LIST_REVERSE_D(114, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115(o, s, BOOST_PP_LIST_REVERSE_D(115, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116(o, s, BOOST_PP_LIST_REVERSE_D(116, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117(o, s, BOOST_PP_LIST_REVERSE_D(117, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118(o, s, BOOST_PP_LIST_REVERSE_D(118, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119(o, s, BOOST_PP_LIST_REVERSE_D(119, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120(o, s, BOOST_PP_LIST_REVERSE_D(120, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121(o, s, BOOST_PP_LIST_REVERSE_D(121, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122(o, s, BOOST_PP_LIST_REVERSE_D(122, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123(o, s, BOOST_PP_LIST_REVERSE_D(123, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124(o, s, BOOST_PP_LIST_REVERSE_D(124, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125(o, s, BOOST_PP_LIST_REVERSE_D(125, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126(o, s, BOOST_PP_LIST_REVERSE_D(126, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127(o, s, BOOST_PP_LIST_REVERSE_D(127, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128(o, s, BOOST_PP_LIST_REVERSE_D(128, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129(o, s, BOOST_PP_LIST_REVERSE_D(129, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130(o, s, BOOST_PP_LIST_REVERSE_D(130, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131(o, s, BOOST_PP_LIST_REVERSE_D(131, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132(o, s, BOOST_PP_LIST_REVERSE_D(132, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133(o, s, BOOST_PP_LIST_REVERSE_D(133, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134(o, s, BOOST_PP_LIST_REVERSE_D(134, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135(o, s, BOOST_PP_LIST_REVERSE_D(135, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136(o, s, BOOST_PP_LIST_REVERSE_D(136, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137(o, s, BOOST_PP_LIST_REVERSE_D(137, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138(o, s, BOOST_PP_LIST_REVERSE_D(138, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139(o, s, BOOST_PP_LIST_REVERSE_D(139, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140(o, s, BOOST_PP_LIST_REVERSE_D(140, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141(o, s, BOOST_PP_LIST_REVERSE_D(141, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142(o, s, BOOST_PP_LIST_REVERSE_D(142, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143(o, s, BOOST_PP_LIST_REVERSE_D(143, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144(o, s, BOOST_PP_LIST_REVERSE_D(144, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145(o, s, BOOST_PP_LIST_REVERSE_D(145, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146(o, s, BOOST_PP_LIST_REVERSE_D(146, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147(o, s, BOOST_PP_LIST_REVERSE_D(147, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148(o, s, BOOST_PP_LIST_REVERSE_D(148, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149(o, s, BOOST_PP_LIST_REVERSE_D(149, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150(o, s, BOOST_PP_LIST_REVERSE_D(150, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151(o, s, BOOST_PP_LIST_REVERSE_D(151, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152(o, s, BOOST_PP_LIST_REVERSE_D(152, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153(o, s, BOOST_PP_LIST_REVERSE_D(153, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154(o, s, BOOST_PP_LIST_REVERSE_D(154, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155(o, s, BOOST_PP_LIST_REVERSE_D(155, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156(o, s, BOOST_PP_LIST_REVERSE_D(156, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157(o, s, BOOST_PP_LIST_REVERSE_D(157, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158(o, s, BOOST_PP_LIST_REVERSE_D(158, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159(o, s, BOOST_PP_LIST_REVERSE_D(159, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160(o, s, BOOST_PP_LIST_REVERSE_D(160, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161(o, s, BOOST_PP_LIST_REVERSE_D(161, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162(o, s, BOOST_PP_LIST_REVERSE_D(162, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163(o, s, BOOST_PP_LIST_REVERSE_D(163, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164(o, s, BOOST_PP_LIST_REVERSE_D(164, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165(o, s, BOOST_PP_LIST_REVERSE_D(165, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166(o, s, BOOST_PP_LIST_REVERSE_D(166, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167(o, s, BOOST_PP_LIST_REVERSE_D(167, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168(o, s, BOOST_PP_LIST_REVERSE_D(168, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169(o, s, BOOST_PP_LIST_REVERSE_D(169, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170(o, s, BOOST_PP_LIST_REVERSE_D(170, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171(o, s, BOOST_PP_LIST_REVERSE_D(171, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172(o, s, BOOST_PP_LIST_REVERSE_D(172, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173(o, s, BOOST_PP_LIST_REVERSE_D(173, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174(o, s, BOOST_PP_LIST_REVERSE_D(174, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175(o, s, BOOST_PP_LIST_REVERSE_D(175, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176(o, s, BOOST_PP_LIST_REVERSE_D(176, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177(o, s, BOOST_PP_LIST_REVERSE_D(177, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178(o, s, BOOST_PP_LIST_REVERSE_D(178, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179(o, s, BOOST_PP_LIST_REVERSE_D(179, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180(o, s, BOOST_PP_LIST_REVERSE_D(180, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181(o, s, BOOST_PP_LIST_REVERSE_D(181, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182(o, s, BOOST_PP_LIST_REVERSE_D(182, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183(o, s, BOOST_PP_LIST_REVERSE_D(183, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184(o, s, BOOST_PP_LIST_REVERSE_D(184, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185(o, s, BOOST_PP_LIST_REVERSE_D(185, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186(o, s, BOOST_PP_LIST_REVERSE_D(186, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187(o, s, BOOST_PP_LIST_REVERSE_D(187, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188(o, s, BOOST_PP_LIST_REVERSE_D(188, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189(o, s, BOOST_PP_LIST_REVERSE_D(189, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190(o, s, BOOST_PP_LIST_REVERSE_D(190, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191(o, s, BOOST_PP_LIST_REVERSE_D(191, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192(o, s, BOOST_PP_LIST_REVERSE_D(192, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193(o, s, BOOST_PP_LIST_REVERSE_D(193, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194(o, s, BOOST_PP_LIST_REVERSE_D(194, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195(o, s, BOOST_PP_LIST_REVERSE_D(195, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196(o, s, BOOST_PP_LIST_REVERSE_D(196, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197(o, s, BOOST_PP_LIST_REVERSE_D(197, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198(o, s, BOOST_PP_LIST_REVERSE_D(198, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199(o, s, BOOST_PP_LIST_REVERSE_D(199, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200(o, s, BOOST_PP_LIST_REVERSE_D(200, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201(o, s, BOOST_PP_LIST_REVERSE_D(201, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202(o, s, BOOST_PP_LIST_REVERSE_D(202, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203(o, s, BOOST_PP_LIST_REVERSE_D(203, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204(o, s, BOOST_PP_LIST_REVERSE_D(204, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205(o, s, BOOST_PP_LIST_REVERSE_D(205, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206(o, s, BOOST_PP_LIST_REVERSE_D(206, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207(o, s, BOOST_PP_LIST_REVERSE_D(207, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208(o, s, BOOST_PP_LIST_REVERSE_D(208, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209(o, s, BOOST_PP_LIST_REVERSE_D(209, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210(o, s, BOOST_PP_LIST_REVERSE_D(210, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211(o, s, BOOST_PP_LIST_REVERSE_D(211, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212(o, s, BOOST_PP_LIST_REVERSE_D(212, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213(o, s, BOOST_PP_LIST_REVERSE_D(213, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214(o, s, BOOST_PP_LIST_REVERSE_D(214, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215(o, s, BOOST_PP_LIST_REVERSE_D(215, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216(o, s, BOOST_PP_LIST_REVERSE_D(216, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217(o, s, BOOST_PP_LIST_REVERSE_D(217, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218(o, s, BOOST_PP_LIST_REVERSE_D(218, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219(o, s, BOOST_PP_LIST_REVERSE_D(219, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220(o, s, BOOST_PP_LIST_REVERSE_D(220, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221(o, s, BOOST_PP_LIST_REVERSE_D(221, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222(o, s, BOOST_PP_LIST_REVERSE_D(222, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223(o, s, BOOST_PP_LIST_REVERSE_D(223, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224(o, s, BOOST_PP_LIST_REVERSE_D(224, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225(o, s, BOOST_PP_LIST_REVERSE_D(225, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226(o, s, BOOST_PP_LIST_REVERSE_D(226, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227(o, s, BOOST_PP_LIST_REVERSE_D(227, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228(o, s, BOOST_PP_LIST_REVERSE_D(228, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229(o, s, BOOST_PP_LIST_REVERSE_D(229, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230(o, s, BOOST_PP_LIST_REVERSE_D(230, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231(o, s, BOOST_PP_LIST_REVERSE_D(231, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232(o, s, BOOST_PP_LIST_REVERSE_D(232, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233(o, s, BOOST_PP_LIST_REVERSE_D(233, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234(o, s, BOOST_PP_LIST_REVERSE_D(234, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235(o, s, BOOST_PP_LIST_REVERSE_D(235, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236(o, s, BOOST_PP_LIST_REVERSE_D(236, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237(o, s, BOOST_PP_LIST_REVERSE_D(237, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238(o, s, BOOST_PP_LIST_REVERSE_D(238, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239(o, s, BOOST_PP_LIST_REVERSE_D(239, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240(o, s, BOOST_PP_LIST_REVERSE_D(240, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241(o, s, BOOST_PP_LIST_REVERSE_D(241, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242(o, s, BOOST_PP_LIST_REVERSE_D(242, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243(o, s, BOOST_PP_LIST_REVERSE_D(243, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244(o, s, BOOST_PP_LIST_REVERSE_D(244, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245(o, s, BOOST_PP_LIST_REVERSE_D(245, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246(o, s, BOOST_PP_LIST_REVERSE_D(246, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247(o, s, BOOST_PP_LIST_REVERSE_D(247, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248(o, s, BOOST_PP_LIST_REVERSE_D(248, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249(o, s, BOOST_PP_LIST_REVERSE_D(249, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250(o, s, BOOST_PP_LIST_REVERSE_D(250, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251(o, s, BOOST_PP_LIST_REVERSE_D(251, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252(o, s, BOOST_PP_LIST_REVERSE_D(252, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253(o, s, BOOST_PP_LIST_REVERSE_D(253, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254(o, s, BOOST_PP_LIST_REVERSE_D(254, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255(o, s, BOOST_PP_LIST_REVERSE_D(255, l))\n# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256(o, s, BOOST_PP_LIST_REVERSE_D(256, l))\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/fold_left.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_LIST_FOLD_LEFT */\n#\n# if 0\n#    define BOOST_PP_LIST_FOLD_LEFT(op, state, list)\n# endif\n#\n# define BOOST_PP_LIST_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# define BOOST_PP_LIST_FOLD_LEFT_257(o, s, l) BOOST_PP_ERROR(0x0004)\n#\n# define BOOST_PP_LIST_FOLD_LEFT_D(d, o, s, l) BOOST_PP_LIST_FOLD_LEFT_ ## d(o, s, l)\n# define BOOST_PP_LIST_FOLD_LEFT_2ND BOOST_PP_LIST_FOLD_LEFT\n# define BOOST_PP_LIST_FOLD_LEFT_2ND_D BOOST_PP_LIST_FOLD_LEFT_D\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/list/detail/edg/fold_left.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/list/detail/dmc/fold_left.hpp>\n# else\n#    include <boost/preprocessor/list/detail/fold_left.hpp>\n# endif\n#\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) 0\n# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) 0\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/fold_right.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP\n# define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# if 0\n#    define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)\n# endif\n#\n# define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)\n#\n# define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)\n# define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT\n# define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/list/detail/edg/fold_right.hpp>\n# else\n#    include <boost/preprocessor/list/detail/fold_right.hpp>\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/for_each_i.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP\n# define BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP\n#\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/adt.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_FOR_EACH_I */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_FOR_EACH_I_P_D x\n#    define BOOST_PP_LIST_FOR_EACH_I_P_D(m, d, l, i) BOOST_PP_LIST_IS_CONS(l)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(4, 2, x))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) BOOST_PP_LIST_FOR_EACH_I_O_D x\n#    define BOOST_PP_LIST_FOR_EACH_I_O_D(m, d, l, i) (m, d, BOOST_PP_LIST_REST(l), BOOST_PP_INC(i))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) (BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(4, 2, x)), BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 3, x)))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_D(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_REM_4 x)\n#    define BOOST_PP_LIST_FOR_EACH_I_M_I(r, x_e) BOOST_PP_LIST_FOR_EACH_I_M_D(r, x_e)\n# endif\n#\n# define BOOST_PP_LIST_FOR_EACH_I_M_D(r, m, d, l, i) m(r, d, i, BOOST_PP_LIST_FIRST(l))\n#\n# /* BOOST_PP_LIST_FOR_EACH_I_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list)\n#    define BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/reverse.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_REVERSE_HPP\n# define BOOST_PREPROCESSOR_LIST_REVERSE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_left.hpp>\n#\n# /* BOOST_PP_LIST_REVERSE */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_REVERSE_I(list)\n#    define BOOST_PP_LIST_REVERSE_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# endif\n#\n# define BOOST_PP_LIST_REVERSE_O(d, s, x) (x, s)\n#\n# /* BOOST_PP_LIST_REVERSE_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# else\n#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_REVERSE_D_I(d, list)\n#    define BOOST_PP_LIST_REVERSE_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/list/transform.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP\n# define BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/list/fold_right.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_LIST_TRANSFORM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_LIST_TRANSFORM_I(op, data, list)\n#    define BOOST_PP_LIST_TRANSFORM_I(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, odr), BOOST_PP_TUPLE_ELEM(3, 1, odr), BOOST_PP_TUPLE_ELEM(3, 2, odr), elem)\n# else\n#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_I(d, BOOST_PP_TUPLE_REM_3 odr, elem)\n#    define BOOST_PP_LIST_TRANSFORM_O_I(d, im, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, im, elem)\n# endif\n#\n# define BOOST_PP_LIST_TRANSFORM_O_D(d, op, data, res, elem) (op, data, (op(d, data, elem), res))\n#\n# /* BOOST_PP_LIST_TRANSFORM_D */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# else\n#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list)\n#    define BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/logical/and.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_AND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/bitand.hpp>\n#\n# /* BOOST_PP_AND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_AND(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# else\n#    define BOOST_PP_AND(p, q) BOOST_PP_AND_I(p, q)\n#    define BOOST_PP_AND_I(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/logical/bitand.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BITAND */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_I(x, y)\n# else\n#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_OO((x, y))\n#    define BOOST_PP_BITAND_OO(par) BOOST_PP_BITAND_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y\n# else\n#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ID(BOOST_PP_BITAND_ ## x ## y)\n#    define BOOST_PP_BITAND_ID(res) res\n# endif\n#\n# define BOOST_PP_BITAND_00 0\n# define BOOST_PP_BITAND_01 0\n# define BOOST_PP_BITAND_10 0\n# define BOOST_PP_BITAND_11 1\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/logical/bool.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_BOOL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x)\n# else\n#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))\n#    define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par\n# endif\n#\n# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x\n#\n# define BOOST_PP_BOOL_0 0\n# define BOOST_PP_BOOL_1 1\n# define BOOST_PP_BOOL_2 1\n# define BOOST_PP_BOOL_3 1\n# define BOOST_PP_BOOL_4 1\n# define BOOST_PP_BOOL_5 1\n# define BOOST_PP_BOOL_6 1\n# define BOOST_PP_BOOL_7 1\n# define BOOST_PP_BOOL_8 1\n# define BOOST_PP_BOOL_9 1\n# define BOOST_PP_BOOL_10 1\n# define BOOST_PP_BOOL_11 1\n# define BOOST_PP_BOOL_12 1\n# define BOOST_PP_BOOL_13 1\n# define BOOST_PP_BOOL_14 1\n# define BOOST_PP_BOOL_15 1\n# define BOOST_PP_BOOL_16 1\n# define BOOST_PP_BOOL_17 1\n# define BOOST_PP_BOOL_18 1\n# define BOOST_PP_BOOL_19 1\n# define BOOST_PP_BOOL_20 1\n# define BOOST_PP_BOOL_21 1\n# define BOOST_PP_BOOL_22 1\n# define BOOST_PP_BOOL_23 1\n# define BOOST_PP_BOOL_24 1\n# define BOOST_PP_BOOL_25 1\n# define BOOST_PP_BOOL_26 1\n# define BOOST_PP_BOOL_27 1\n# define BOOST_PP_BOOL_28 1\n# define BOOST_PP_BOOL_29 1\n# define BOOST_PP_BOOL_30 1\n# define BOOST_PP_BOOL_31 1\n# define BOOST_PP_BOOL_32 1\n# define BOOST_PP_BOOL_33 1\n# define BOOST_PP_BOOL_34 1\n# define BOOST_PP_BOOL_35 1\n# define BOOST_PP_BOOL_36 1\n# define BOOST_PP_BOOL_37 1\n# define BOOST_PP_BOOL_38 1\n# define BOOST_PP_BOOL_39 1\n# define BOOST_PP_BOOL_40 1\n# define BOOST_PP_BOOL_41 1\n# define BOOST_PP_BOOL_42 1\n# define BOOST_PP_BOOL_43 1\n# define BOOST_PP_BOOL_44 1\n# define BOOST_PP_BOOL_45 1\n# define BOOST_PP_BOOL_46 1\n# define BOOST_PP_BOOL_47 1\n# define BOOST_PP_BOOL_48 1\n# define BOOST_PP_BOOL_49 1\n# define BOOST_PP_BOOL_50 1\n# define BOOST_PP_BOOL_51 1\n# define BOOST_PP_BOOL_52 1\n# define BOOST_PP_BOOL_53 1\n# define BOOST_PP_BOOL_54 1\n# define BOOST_PP_BOOL_55 1\n# define BOOST_PP_BOOL_56 1\n# define BOOST_PP_BOOL_57 1\n# define BOOST_PP_BOOL_58 1\n# define BOOST_PP_BOOL_59 1\n# define BOOST_PP_BOOL_60 1\n# define BOOST_PP_BOOL_61 1\n# define BOOST_PP_BOOL_62 1\n# define BOOST_PP_BOOL_63 1\n# define BOOST_PP_BOOL_64 1\n# define BOOST_PP_BOOL_65 1\n# define BOOST_PP_BOOL_66 1\n# define BOOST_PP_BOOL_67 1\n# define BOOST_PP_BOOL_68 1\n# define BOOST_PP_BOOL_69 1\n# define BOOST_PP_BOOL_70 1\n# define BOOST_PP_BOOL_71 1\n# define BOOST_PP_BOOL_72 1\n# define BOOST_PP_BOOL_73 1\n# define BOOST_PP_BOOL_74 1\n# define BOOST_PP_BOOL_75 1\n# define BOOST_PP_BOOL_76 1\n# define BOOST_PP_BOOL_77 1\n# define BOOST_PP_BOOL_78 1\n# define BOOST_PP_BOOL_79 1\n# define BOOST_PP_BOOL_80 1\n# define BOOST_PP_BOOL_81 1\n# define BOOST_PP_BOOL_82 1\n# define BOOST_PP_BOOL_83 1\n# define BOOST_PP_BOOL_84 1\n# define BOOST_PP_BOOL_85 1\n# define BOOST_PP_BOOL_86 1\n# define BOOST_PP_BOOL_87 1\n# define BOOST_PP_BOOL_88 1\n# define BOOST_PP_BOOL_89 1\n# define BOOST_PP_BOOL_90 1\n# define BOOST_PP_BOOL_91 1\n# define BOOST_PP_BOOL_92 1\n# define BOOST_PP_BOOL_93 1\n# define BOOST_PP_BOOL_94 1\n# define BOOST_PP_BOOL_95 1\n# define BOOST_PP_BOOL_96 1\n# define BOOST_PP_BOOL_97 1\n# define BOOST_PP_BOOL_98 1\n# define BOOST_PP_BOOL_99 1\n# define BOOST_PP_BOOL_100 1\n# define BOOST_PP_BOOL_101 1\n# define BOOST_PP_BOOL_102 1\n# define BOOST_PP_BOOL_103 1\n# define BOOST_PP_BOOL_104 1\n# define BOOST_PP_BOOL_105 1\n# define BOOST_PP_BOOL_106 1\n# define BOOST_PP_BOOL_107 1\n# define BOOST_PP_BOOL_108 1\n# define BOOST_PP_BOOL_109 1\n# define BOOST_PP_BOOL_110 1\n# define BOOST_PP_BOOL_111 1\n# define BOOST_PP_BOOL_112 1\n# define BOOST_PP_BOOL_113 1\n# define BOOST_PP_BOOL_114 1\n# define BOOST_PP_BOOL_115 1\n# define BOOST_PP_BOOL_116 1\n# define BOOST_PP_BOOL_117 1\n# define BOOST_PP_BOOL_118 1\n# define BOOST_PP_BOOL_119 1\n# define BOOST_PP_BOOL_120 1\n# define BOOST_PP_BOOL_121 1\n# define BOOST_PP_BOOL_122 1\n# define BOOST_PP_BOOL_123 1\n# define BOOST_PP_BOOL_124 1\n# define BOOST_PP_BOOL_125 1\n# define BOOST_PP_BOOL_126 1\n# define BOOST_PP_BOOL_127 1\n# define BOOST_PP_BOOL_128 1\n# define BOOST_PP_BOOL_129 1\n# define BOOST_PP_BOOL_130 1\n# define BOOST_PP_BOOL_131 1\n# define BOOST_PP_BOOL_132 1\n# define BOOST_PP_BOOL_133 1\n# define BOOST_PP_BOOL_134 1\n# define BOOST_PP_BOOL_135 1\n# define BOOST_PP_BOOL_136 1\n# define BOOST_PP_BOOL_137 1\n# define BOOST_PP_BOOL_138 1\n# define BOOST_PP_BOOL_139 1\n# define BOOST_PP_BOOL_140 1\n# define BOOST_PP_BOOL_141 1\n# define BOOST_PP_BOOL_142 1\n# define BOOST_PP_BOOL_143 1\n# define BOOST_PP_BOOL_144 1\n# define BOOST_PP_BOOL_145 1\n# define BOOST_PP_BOOL_146 1\n# define BOOST_PP_BOOL_147 1\n# define BOOST_PP_BOOL_148 1\n# define BOOST_PP_BOOL_149 1\n# define BOOST_PP_BOOL_150 1\n# define BOOST_PP_BOOL_151 1\n# define BOOST_PP_BOOL_152 1\n# define BOOST_PP_BOOL_153 1\n# define BOOST_PP_BOOL_154 1\n# define BOOST_PP_BOOL_155 1\n# define BOOST_PP_BOOL_156 1\n# define BOOST_PP_BOOL_157 1\n# define BOOST_PP_BOOL_158 1\n# define BOOST_PP_BOOL_159 1\n# define BOOST_PP_BOOL_160 1\n# define BOOST_PP_BOOL_161 1\n# define BOOST_PP_BOOL_162 1\n# define BOOST_PP_BOOL_163 1\n# define BOOST_PP_BOOL_164 1\n# define BOOST_PP_BOOL_165 1\n# define BOOST_PP_BOOL_166 1\n# define BOOST_PP_BOOL_167 1\n# define BOOST_PP_BOOL_168 1\n# define BOOST_PP_BOOL_169 1\n# define BOOST_PP_BOOL_170 1\n# define BOOST_PP_BOOL_171 1\n# define BOOST_PP_BOOL_172 1\n# define BOOST_PP_BOOL_173 1\n# define BOOST_PP_BOOL_174 1\n# define BOOST_PP_BOOL_175 1\n# define BOOST_PP_BOOL_176 1\n# define BOOST_PP_BOOL_177 1\n# define BOOST_PP_BOOL_178 1\n# define BOOST_PP_BOOL_179 1\n# define BOOST_PP_BOOL_180 1\n# define BOOST_PP_BOOL_181 1\n# define BOOST_PP_BOOL_182 1\n# define BOOST_PP_BOOL_183 1\n# define BOOST_PP_BOOL_184 1\n# define BOOST_PP_BOOL_185 1\n# define BOOST_PP_BOOL_186 1\n# define BOOST_PP_BOOL_187 1\n# define BOOST_PP_BOOL_188 1\n# define BOOST_PP_BOOL_189 1\n# define BOOST_PP_BOOL_190 1\n# define BOOST_PP_BOOL_191 1\n# define BOOST_PP_BOOL_192 1\n# define BOOST_PP_BOOL_193 1\n# define BOOST_PP_BOOL_194 1\n# define BOOST_PP_BOOL_195 1\n# define BOOST_PP_BOOL_196 1\n# define BOOST_PP_BOOL_197 1\n# define BOOST_PP_BOOL_198 1\n# define BOOST_PP_BOOL_199 1\n# define BOOST_PP_BOOL_200 1\n# define BOOST_PP_BOOL_201 1\n# define BOOST_PP_BOOL_202 1\n# define BOOST_PP_BOOL_203 1\n# define BOOST_PP_BOOL_204 1\n# define BOOST_PP_BOOL_205 1\n# define BOOST_PP_BOOL_206 1\n# define BOOST_PP_BOOL_207 1\n# define BOOST_PP_BOOL_208 1\n# define BOOST_PP_BOOL_209 1\n# define BOOST_PP_BOOL_210 1\n# define BOOST_PP_BOOL_211 1\n# define BOOST_PP_BOOL_212 1\n# define BOOST_PP_BOOL_213 1\n# define BOOST_PP_BOOL_214 1\n# define BOOST_PP_BOOL_215 1\n# define BOOST_PP_BOOL_216 1\n# define BOOST_PP_BOOL_217 1\n# define BOOST_PP_BOOL_218 1\n# define BOOST_PP_BOOL_219 1\n# define BOOST_PP_BOOL_220 1\n# define BOOST_PP_BOOL_221 1\n# define BOOST_PP_BOOL_222 1\n# define BOOST_PP_BOOL_223 1\n# define BOOST_PP_BOOL_224 1\n# define BOOST_PP_BOOL_225 1\n# define BOOST_PP_BOOL_226 1\n# define BOOST_PP_BOOL_227 1\n# define BOOST_PP_BOOL_228 1\n# define BOOST_PP_BOOL_229 1\n# define BOOST_PP_BOOL_230 1\n# define BOOST_PP_BOOL_231 1\n# define BOOST_PP_BOOL_232 1\n# define BOOST_PP_BOOL_233 1\n# define BOOST_PP_BOOL_234 1\n# define BOOST_PP_BOOL_235 1\n# define BOOST_PP_BOOL_236 1\n# define BOOST_PP_BOOL_237 1\n# define BOOST_PP_BOOL_238 1\n# define BOOST_PP_BOOL_239 1\n# define BOOST_PP_BOOL_240 1\n# define BOOST_PP_BOOL_241 1\n# define BOOST_PP_BOOL_242 1\n# define BOOST_PP_BOOL_243 1\n# define BOOST_PP_BOOL_244 1\n# define BOOST_PP_BOOL_245 1\n# define BOOST_PP_BOOL_246 1\n# define BOOST_PP_BOOL_247 1\n# define BOOST_PP_BOOL_248 1\n# define BOOST_PP_BOOL_249 1\n# define BOOST_PP_BOOL_250 1\n# define BOOST_PP_BOOL_251 1\n# define BOOST_PP_BOOL_252 1\n# define BOOST_PP_BOOL_253 1\n# define BOOST_PP_BOOL_254 1\n# define BOOST_PP_BOOL_255 1\n# define BOOST_PP_BOOL_256 1\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/logical/compl.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_COMPL */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_I(x)\n# else\n#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_OO((x))\n#    define BOOST_PP_COMPL_OO(par) BOOST_PP_COMPL_I ## par\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ ## x\n# else\n#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ID(BOOST_PP_COMPL_ ## x)\n#    define BOOST_PP_COMPL_ID(id) id\n# endif\n#\n# define BOOST_PP_COMPL_0 1\n# define BOOST_PP_COMPL_1 0\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/logical/not.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP\n# define BOOST_PREPROCESSOR_LOGICAL_NOT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/logical/compl.hpp>\n#\n# /* BOOST_PP_NOT */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_NOT(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))\n# else\n#    define BOOST_PP_NOT(x) BOOST_PP_NOT_I(x)\n#    define BOOST_PP_NOT_I(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/punctuation/comma.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP\n#\n# /* BOOST_PP_COMMA */\n#\n# define BOOST_PP_COMMA() ,\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/punctuation/comma_if.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n# include <boost/preprocessor/punctuation/comma.hpp>\n#\n# /* BOOST_PP_COMMA_IF */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()\n# else\n#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_COMMA_IF_I(cond)\n#    define BOOST_PP_COMMA_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/punctuation/paren.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP\n# define BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP\n#\n# /* BOOST_PP_LPAREN */\n#\n# define BOOST_PP_LPAREN() (\n#\n# /* BOOST_PP_RPAREN */\n#\n# define BOOST_PP_RPAREN() )\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repeat.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPEAT_HPP\n# define BOOST_PREPROCESSOR_REPEAT_HPP\n#\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/detail/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP\n#\n# include <boost/preprocessor/control/expr_iif.hpp>\n# include <boost/preprocessor/control/iif.hpp>\n# include <boost/preprocessor/logical/bool.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p(2, s)), s, p, o, m)\n# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p(3, s)), s, p, o, m)\n# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p(4, s)), s, p, o, m)\n# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p(5, s)), s, p, o, m)\n# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p(6, s)), s, p, o, m)\n# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p(7, s)), s, p, o, m)\n# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p(8, s)), s, p, o, m)\n# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p(9, s)), s, p, o, m)\n# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p(10, s)), s, p, o, m)\n# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p(11, s)), s, p, o, m)\n# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p(12, s)), s, p, o, m)\n# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p(13, s)), s, p, o, m)\n# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p(14, s)), s, p, o, m)\n# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p(15, s)), s, p, o, m)\n# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p(16, s)), s, p, o, m)\n# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p(17, s)), s, p, o, m)\n# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p(18, s)), s, p, o, m)\n# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p(19, s)), s, p, o, m)\n# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p(20, s)), s, p, o, m)\n# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p(21, s)), s, p, o, m)\n# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p(22, s)), s, p, o, m)\n# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p(23, s)), s, p, o, m)\n# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p(24, s)), s, p, o, m)\n# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p(25, s)), s, p, o, m)\n# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p(26, s)), s, p, o, m)\n# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p(27, s)), s, p, o, m)\n# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p(28, s)), s, p, o, m)\n# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p(29, s)), s, p, o, m)\n# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p(30, s)), s, p, o, m)\n# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p(31, s)), s, p, o, m)\n# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p(32, s)), s, p, o, m)\n# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p(33, s)), s, p, o, m)\n# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p(34, s)), s, p, o, m)\n# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p(35, s)), s, p, o, m)\n# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p(36, s)), s, p, o, m)\n# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p(37, s)), s, p, o, m)\n# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p(38, s)), s, p, o, m)\n# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p(39, s)), s, p, o, m)\n# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p(40, s)), s, p, o, m)\n# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p(41, s)), s, p, o, m)\n# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p(42, s)), s, p, o, m)\n# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p(43, s)), s, p, o, m)\n# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p(44, s)), s, p, o, m)\n# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p(45, s)), s, p, o, m)\n# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p(46, s)), s, p, o, m)\n# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p(47, s)), s, p, o, m)\n# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p(48, s)), s, p, o, m)\n# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p(49, s)), s, p, o, m)\n# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p(50, s)), s, p, o, m)\n# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p(51, s)), s, p, o, m)\n# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p(52, s)), s, p, o, m)\n# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p(53, s)), s, p, o, m)\n# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p(54, s)), s, p, o, m)\n# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p(55, s)), s, p, o, m)\n# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p(56, s)), s, p, o, m)\n# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p(57, s)), s, p, o, m)\n# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p(58, s)), s, p, o, m)\n# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p(59, s)), s, p, o, m)\n# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p(60, s)), s, p, o, m)\n# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p(61, s)), s, p, o, m)\n# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p(62, s)), s, p, o, m)\n# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p(63, s)), s, p, o, m)\n# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p(64, s)), s, p, o, m)\n# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p(65, s)), s, p, o, m)\n# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p(66, s)), s, p, o, m)\n# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p(67, s)), s, p, o, m)\n# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p(68, s)), s, p, o, m)\n# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p(69, s)), s, p, o, m)\n# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p(70, s)), s, p, o, m)\n# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p(71, s)), s, p, o, m)\n# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p(72, s)), s, p, o, m)\n# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p(73, s)), s, p, o, m)\n# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p(74, s)), s, p, o, m)\n# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p(75, s)), s, p, o, m)\n# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p(76, s)), s, p, o, m)\n# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p(77, s)), s, p, o, m)\n# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p(78, s)), s, p, o, m)\n# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p(79, s)), s, p, o, m)\n# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p(80, s)), s, p, o, m)\n# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p(81, s)), s, p, o, m)\n# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p(82, s)), s, p, o, m)\n# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p(83, s)), s, p, o, m)\n# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p(84, s)), s, p, o, m)\n# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p(85, s)), s, p, o, m)\n# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p(86, s)), s, p, o, m)\n# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p(87, s)), s, p, o, m)\n# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p(88, s)), s, p, o, m)\n# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p(89, s)), s, p, o, m)\n# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p(90, s)), s, p, o, m)\n# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p(91, s)), s, p, o, m)\n# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p(92, s)), s, p, o, m)\n# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p(93, s)), s, p, o, m)\n# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p(94, s)), s, p, o, m)\n# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p(95, s)), s, p, o, m)\n# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p(96, s)), s, p, o, m)\n# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p(97, s)), s, p, o, m)\n# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p(98, s)), s, p, o, m)\n# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p(99, s)), s, p, o, m)\n# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p(100, s)), s, p, o, m)\n# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p(101, s)), s, p, o, m)\n# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p(102, s)), s, p, o, m)\n# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p(103, s)), s, p, o, m)\n# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p(104, s)), s, p, o, m)\n# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p(105, s)), s, p, o, m)\n# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p(106, s)), s, p, o, m)\n# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p(107, s)), s, p, o, m)\n# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p(108, s)), s, p, o, m)\n# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p(109, s)), s, p, o, m)\n# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p(110, s)), s, p, o, m)\n# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p(111, s)), s, p, o, m)\n# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p(112, s)), s, p, o, m)\n# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p(113, s)), s, p, o, m)\n# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p(114, s)), s, p, o, m)\n# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p(115, s)), s, p, o, m)\n# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p(116, s)), s, p, o, m)\n# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p(117, s)), s, p, o, m)\n# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p(118, s)), s, p, o, m)\n# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p(119, s)), s, p, o, m)\n# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p(120, s)), s, p, o, m)\n# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p(121, s)), s, p, o, m)\n# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p(122, s)), s, p, o, m)\n# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p(123, s)), s, p, o, m)\n# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p(124, s)), s, p, o, m)\n# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p(125, s)), s, p, o, m)\n# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p(126, s)), s, p, o, m)\n# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p(127, s)), s, p, o, m)\n# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p(128, s)), s, p, o, m)\n# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p(129, s)), s, p, o, m)\n# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p(130, s)), s, p, o, m)\n# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p(131, s)), s, p, o, m)\n# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p(132, s)), s, p, o, m)\n# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p(133, s)), s, p, o, m)\n# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p(134, s)), s, p, o, m)\n# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p(135, s)), s, p, o, m)\n# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p(136, s)), s, p, o, m)\n# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p(137, s)), s, p, o, m)\n# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p(138, s)), s, p, o, m)\n# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p(139, s)), s, p, o, m)\n# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p(140, s)), s, p, o, m)\n# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p(141, s)), s, p, o, m)\n# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p(142, s)), s, p, o, m)\n# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p(143, s)), s, p, o, m)\n# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p(144, s)), s, p, o, m)\n# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p(145, s)), s, p, o, m)\n# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p(146, s)), s, p, o, m)\n# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p(147, s)), s, p, o, m)\n# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p(148, s)), s, p, o, m)\n# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p(149, s)), s, p, o, m)\n# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p(150, s)), s, p, o, m)\n# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p(151, s)), s, p, o, m)\n# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p(152, s)), s, p, o, m)\n# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p(153, s)), s, p, o, m)\n# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p(154, s)), s, p, o, m)\n# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p(155, s)), s, p, o, m)\n# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p(156, s)), s, p, o, m)\n# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p(157, s)), s, p, o, m)\n# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p(158, s)), s, p, o, m)\n# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p(159, s)), s, p, o, m)\n# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p(160, s)), s, p, o, m)\n# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p(161, s)), s, p, o, m)\n# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p(162, s)), s, p, o, m)\n# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p(163, s)), s, p, o, m)\n# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p(164, s)), s, p, o, m)\n# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p(165, s)), s, p, o, m)\n# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p(166, s)), s, p, o, m)\n# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p(167, s)), s, p, o, m)\n# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p(168, s)), s, p, o, m)\n# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p(169, s)), s, p, o, m)\n# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p(170, s)), s, p, o, m)\n# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p(171, s)), s, p, o, m)\n# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p(172, s)), s, p, o, m)\n# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p(173, s)), s, p, o, m)\n# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p(174, s)), s, p, o, m)\n# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p(175, s)), s, p, o, m)\n# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p(176, s)), s, p, o, m)\n# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p(177, s)), s, p, o, m)\n# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p(178, s)), s, p, o, m)\n# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p(179, s)), s, p, o, m)\n# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p(180, s)), s, p, o, m)\n# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p(181, s)), s, p, o, m)\n# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p(182, s)), s, p, o, m)\n# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p(183, s)), s, p, o, m)\n# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p(184, s)), s, p, o, m)\n# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p(185, s)), s, p, o, m)\n# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p(186, s)), s, p, o, m)\n# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p(187, s)), s, p, o, m)\n# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p(188, s)), s, p, o, m)\n# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p(189, s)), s, p, o, m)\n# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p(190, s)), s, p, o, m)\n# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p(191, s)), s, p, o, m)\n# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p(192, s)), s, p, o, m)\n# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p(193, s)), s, p, o, m)\n# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p(194, s)), s, p, o, m)\n# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p(195, s)), s, p, o, m)\n# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p(196, s)), s, p, o, m)\n# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p(197, s)), s, p, o, m)\n# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p(198, s)), s, p, o, m)\n# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p(199, s)), s, p, o, m)\n# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p(200, s)), s, p, o, m)\n# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p(201, s)), s, p, o, m)\n# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p(202, s)), s, p, o, m)\n# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p(203, s)), s, p, o, m)\n# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p(204, s)), s, p, o, m)\n# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p(205, s)), s, p, o, m)\n# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p(206, s)), s, p, o, m)\n# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p(207, s)), s, p, o, m)\n# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p(208, s)), s, p, o, m)\n# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p(209, s)), s, p, o, m)\n# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p(210, s)), s, p, o, m)\n# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p(211, s)), s, p, o, m)\n# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p(212, s)), s, p, o, m)\n# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p(213, s)), s, p, o, m)\n# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p(214, s)), s, p, o, m)\n# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p(215, s)), s, p, o, m)\n# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p(216, s)), s, p, o, m)\n# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p(217, s)), s, p, o, m)\n# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p(218, s)), s, p, o, m)\n# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p(219, s)), s, p, o, m)\n# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p(220, s)), s, p, o, m)\n# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p(221, s)), s, p, o, m)\n# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p(222, s)), s, p, o, m)\n# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p(223, s)), s, p, o, m)\n# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p(224, s)), s, p, o, m)\n# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p(225, s)), s, p, o, m)\n# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p(226, s)), s, p, o, m)\n# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p(227, s)), s, p, o, m)\n# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p(228, s)), s, p, o, m)\n# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p(229, s)), s, p, o, m)\n# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p(230, s)), s, p, o, m)\n# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p(231, s)), s, p, o, m)\n# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p(232, s)), s, p, o, m)\n# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p(233, s)), s, p, o, m)\n# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p(234, s)), s, p, o, m)\n# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p(235, s)), s, p, o, m)\n# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p(236, s)), s, p, o, m)\n# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p(237, s)), s, p, o, m)\n# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p(238, s)), s, p, o, m)\n# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p(239, s)), s, p, o, m)\n# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p(240, s)), s, p, o, m)\n# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p(241, s)), s, p, o, m)\n# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p(242, s)), s, p, o, m)\n# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p(243, s)), s, p, o, m)\n# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p(244, s)), s, p, o, m)\n# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p(245, s)), s, p, o, m)\n# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p(246, s)), s, p, o, m)\n# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p(247, s)), s, p, o, m)\n# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p(248, s)), s, p, o, m)\n# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p(249, s)), s, p, o, m)\n# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p(250, s)), s, p, o, m)\n# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p(251, s)), s, p, o, m)\n# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p(252, s)), s, p, o, m)\n# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p(253, s)), s, p, o, m)\n# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p(254, s)), s, p, o, m)\n# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p(255, s)), s, p, o, m)\n# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p(256, s)), s, p, o, m)\n# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p(257, s)), s, p, o, m)\n#\n# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)\n# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)\n# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)\n# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)\n# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)\n# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)\n# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)\n# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)\n# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)\n# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)\n# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)\n# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)\n# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)\n# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)\n# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)\n# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)\n# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)\n# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)\n# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)\n# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)\n# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)\n# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)\n# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)\n# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)\n# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)\n# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)\n# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)\n# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)\n# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)\n# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)\n# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)\n# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)\n# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)\n# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)\n# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)\n# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)\n# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)\n# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)\n# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)\n# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)\n# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)\n# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)\n# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)\n# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)\n# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)\n# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)\n# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)\n# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)\n# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)\n# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)\n# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)\n# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)\n# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)\n# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)\n# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)\n# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)\n# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)\n# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)\n# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)\n# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)\n# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)\n# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)\n# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)\n# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)\n# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)\n# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)\n# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)\n# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)\n# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)\n# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)\n# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)\n# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)\n# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)\n# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)\n# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)\n# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)\n# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)\n# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)\n# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)\n# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)\n# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)\n# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)\n# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)\n# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)\n# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)\n# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)\n# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)\n# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)\n# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)\n# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)\n# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)\n# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)\n# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)\n# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)\n# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)\n# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)\n# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)\n# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)\n# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)\n# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)\n# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)\n# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)\n# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)\n# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)\n# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)\n# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)\n# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)\n# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)\n# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)\n# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)\n# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)\n# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)\n# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)\n# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)\n# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)\n# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)\n# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)\n# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)\n# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)\n# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)\n# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)\n# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)\n# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)\n# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)\n# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)\n# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)\n# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)\n# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)\n# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)\n# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)\n# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)\n# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)\n# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)\n# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)\n# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)\n# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)\n# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)\n# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)\n# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)\n# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)\n# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)\n# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)\n# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)\n# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)\n# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)\n# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)\n# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)\n# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)\n# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)\n# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)\n# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)\n# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)\n# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)\n# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)\n# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)\n# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)\n# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)\n# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)\n# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)\n# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)\n# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)\n# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)\n# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)\n# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)\n# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)\n# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)\n# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)\n# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)\n# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)\n# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)\n# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)\n# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)\n# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)\n# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)\n# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)\n# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)\n# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)\n# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)\n# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)\n# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)\n# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)\n# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)\n# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)\n# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)\n# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)\n# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)\n# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)\n# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)\n# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)\n# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)\n# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)\n# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)\n# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)\n# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)\n# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)\n# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)\n# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)\n# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)\n# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)\n# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)\n# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)\n# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)\n# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)\n# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)\n# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)\n# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)\n# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)\n# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)\n# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)\n# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)\n# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)\n# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)\n# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)\n# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)\n# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)\n# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)\n# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)\n# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)\n# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)\n# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)\n# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)\n# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)\n# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)\n# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)\n# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)\n# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)\n# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)\n# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)\n# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)\n# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)\n# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)\n# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)\n# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)\n# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)\n# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)\n# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)\n# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)\n# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)\n# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)\n# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)\n# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)\n# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)\n# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)\n# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)\n# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)\n# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)\n# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)\n# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)\n# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)\n# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)\n# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)\n# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)\n# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)\n# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)\n# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)\n# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/enum.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM */\n#\n# if 0\n#    define BOOST_PP_ENUM(count, macro, data)\n# endif\n#\n# define BOOST_PP_ENUM BOOST_PP_CAT(BOOST_PP_ENUM_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))\n#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))\n#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))\n# else\n#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_ENUM_1_I(c, m, d)\n#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_ENUM_2_I(c, m, d)\n#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_ENUM_3_I(c, m, d)\n#    define BOOST_PP_ENUM_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))\n#    define BOOST_PP_ENUM_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))\n#    define BOOST_PP_ENUM_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))\n# endif\n#\n# define BOOST_PP_ENUM_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)\n#    define BOOST_PP_ENUM_M_1_IM(z, n, im) BOOST_PP_ENUM_M_1_I(z, n, im)\n#    define BOOST_PP_ENUM_M_2_IM(z, n, im) BOOST_PP_ENUM_M_2_I(z, n, im)\n#    define BOOST_PP_ENUM_M_3_IM(z, n, im) BOOST_PP_ENUM_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))\n# endif\n#\n# define BOOST_PP_ENUM_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n# define BOOST_PP_ENUM_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n# define BOOST_PP_ENUM_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/enum_binary_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_ENUM_BINARY_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, im)\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))\n# endif\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) BOOST_PP_COMMA_IF(n) p1 ## n p2 ## n\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)\n# endif\n#\n# /* BOOST_PP_ENUM_BINARY_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# else\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2)\n#    define BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/enum_params.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/punctuation/comma_if.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_ENUM_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_ENUM_PARAMS_I(count, param)\n#    define BOOST_PP_ENUM_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)\n# endif\n#\n# define BOOST_PP_ENUM_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) param ## n\n#\n# /* BOOST_PP_ENUM_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_ENUM_PARAMS_Z_I(z, count, param)\n#    define BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/enum_trailing_params.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP\n# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n#\n# /* BOOST_PP_ENUM_TRAILING_PARAMS */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param)\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# endif\n#\n# define BOOST_PP_ENUM_TRAILING_PARAMS_M(z, n, param) , param ## n\n#\n# /* BOOST_PP_ENUM_TRAILING_PARAMS_Z */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# else\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param)\n#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/for.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_FOR_HPP\n# define BOOST_PREPROCESSOR_REPETITION_FOR_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n#\n# /* BOOST_PP_FOR */\n#\n# if 0\n#    define BOOST_PP_FOR(state, pred, op, macro)\n# endif\n#\n# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256))\n#\n# define BOOST_PP_FOR_P(n) BOOST_PP_CAT(BOOST_PP_FOR_CHECK_, BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))\n#\n# define BOOST_PP_FOR_SR_P(r, s) s\n# define BOOST_PP_FOR_SR_O(r, s) 0\n# define BOOST_PP_FOR_SR_M(r, s) BOOST_PP_NIL\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    include <boost/preprocessor/repetition/detail/edg/for.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    include <boost/preprocessor/repetition/detail/msvc/for.hpp>\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    include <boost/preprocessor/repetition/detail/dmc/for.hpp>\n# else\n#    include <boost/preprocessor/repetition/detail/for.hpp>\n# endif\n#\n# define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002)\n#\n# define BOOST_PP_FOR_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_3(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_4(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_5(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_6(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_7(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_8(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_9(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_10(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_11(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_12(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_13(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_14(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_15(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_16(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_17(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_18(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_19(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_20(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_21(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_22(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_23(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_24(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_25(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_26(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_27(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_28(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_29(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_30(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_31(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_32(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_33(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_34(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_35(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_36(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_37(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_38(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_39(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_40(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_41(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_42(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_43(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_44(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_45(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_46(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_47(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_48(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_49(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_50(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_51(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_52(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_53(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_54(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_55(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_56(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_57(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_58(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_59(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_60(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_61(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_62(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_63(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_64(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_65(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_66(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_67(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_68(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_69(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_70(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_71(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_72(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_73(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_74(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_75(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_76(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_77(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_78(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_79(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_80(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_81(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_82(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_83(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_84(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_85(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_86(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_87(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_88(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_89(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_90(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_91(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_92(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_93(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_94(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_95(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_96(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_97(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_98(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_99(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_100(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_101(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_102(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_103(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_104(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_105(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_106(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_107(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_108(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_109(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_110(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_111(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_112(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_113(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_114(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_115(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_116(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_117(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_118(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_119(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_120(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_121(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_122(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_123(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_124(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_125(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_126(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_127(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_128(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_129(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_130(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_131(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_132(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_133(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_134(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_135(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_136(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_137(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_138(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_139(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_140(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_141(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_142(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_143(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_144(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_145(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_146(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_147(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_148(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_149(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_150(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_151(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_152(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_153(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_154(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_155(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_156(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_157(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_158(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_159(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_160(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_161(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_162(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_163(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_164(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_165(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_166(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_167(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_168(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_169(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_170(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_171(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_172(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_173(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_174(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_175(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_176(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_177(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_178(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_179(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_180(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_181(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_182(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_183(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_184(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_185(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_186(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_187(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_188(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_189(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_190(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_191(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_192(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_193(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_194(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_195(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_196(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_197(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_198(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_199(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_200(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_201(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_202(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_203(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_204(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_205(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_206(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_207(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_208(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_209(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_210(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_211(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_212(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_213(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_214(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_215(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_216(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_217(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_218(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_219(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_220(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_221(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_222(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_223(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_224(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_225(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_226(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_227(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_228(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_229(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_230(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_231(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_232(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_233(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_234(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_235(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_236(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_237(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_238(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_239(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_240(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_241(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_242(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_243(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_244(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_245(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_246(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_247(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_248(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_249(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_250(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_251(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_252(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_253(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_254(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_255(s, p, o, m) 0\n# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/repeat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP\n# define BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_REPEAT */\n#\n# if 0\n#    define BOOST_PP_REPEAT(count, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_REPEAT_CHECK_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3, BOOST_PP_NIL))\n#\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_NIL 1\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_1(c, m, d) 0\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_2(c, m, d) 0\n# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_3(c, m, d) 0\n#\n# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_REPEAT_1_I(c, m, d)\n# define BOOST_PP_REPEAT_2(c, m, d) BOOST_PP_REPEAT_2_I(c, m, d)\n# define BOOST_PP_REPEAT_3(c, m, d) BOOST_PP_REPEAT_3_I(c, m, d)\n# define BOOST_PP_REPEAT_4(c, m, d) BOOST_PP_ERROR(0x0003)\n#\n# define BOOST_PP_REPEAT_1_I(c, m, d) BOOST_PP_REPEAT_1_ ## c(m, d)\n# define BOOST_PP_REPEAT_2_I(c, m, d) BOOST_PP_REPEAT_2_ ## c(m, d)\n# define BOOST_PP_REPEAT_3_I(c, m, d) BOOST_PP_REPEAT_3_ ## c(m, d)\n#\n# define BOOST_PP_REPEAT_1ST BOOST_PP_REPEAT_1\n# define BOOST_PP_REPEAT_2ND BOOST_PP_REPEAT_2\n# define BOOST_PP_REPEAT_3RD BOOST_PP_REPEAT_3\n#\n# define BOOST_PP_REPEAT_1_0(m, d)\n# define BOOST_PP_REPEAT_1_1(m, d) m(2, 0, d)\n# define BOOST_PP_REPEAT_1_2(m, d) BOOST_PP_REPEAT_1_1(m, d) m(2, 1, d)\n# define BOOST_PP_REPEAT_1_3(m, d) BOOST_PP_REPEAT_1_2(m, d) m(2, 2, d)\n# define BOOST_PP_REPEAT_1_4(m, d) BOOST_PP_REPEAT_1_3(m, d) m(2, 3, d)\n# define BOOST_PP_REPEAT_1_5(m, d) BOOST_PP_REPEAT_1_4(m, d) m(2, 4, d)\n# define BOOST_PP_REPEAT_1_6(m, d) BOOST_PP_REPEAT_1_5(m, d) m(2, 5, d)\n# define BOOST_PP_REPEAT_1_7(m, d) BOOST_PP_REPEAT_1_6(m, d) m(2, 6, d)\n# define BOOST_PP_REPEAT_1_8(m, d) BOOST_PP_REPEAT_1_7(m, d) m(2, 7, d)\n# define BOOST_PP_REPEAT_1_9(m, d) BOOST_PP_REPEAT_1_8(m, d) m(2, 8, d)\n# define BOOST_PP_REPEAT_1_10(m, d) BOOST_PP_REPEAT_1_9(m, d) m(2, 9, d)\n# define BOOST_PP_REPEAT_1_11(m, d) BOOST_PP_REPEAT_1_10(m, d) m(2, 10, d)\n# define BOOST_PP_REPEAT_1_12(m, d) BOOST_PP_REPEAT_1_11(m, d) m(2, 11, d)\n# define BOOST_PP_REPEAT_1_13(m, d) BOOST_PP_REPEAT_1_12(m, d) m(2, 12, d)\n# define BOOST_PP_REPEAT_1_14(m, d) BOOST_PP_REPEAT_1_13(m, d) m(2, 13, d)\n# define BOOST_PP_REPEAT_1_15(m, d) BOOST_PP_REPEAT_1_14(m, d) m(2, 14, d)\n# define BOOST_PP_REPEAT_1_16(m, d) BOOST_PP_REPEAT_1_15(m, d) m(2, 15, d)\n# define BOOST_PP_REPEAT_1_17(m, d) BOOST_PP_REPEAT_1_16(m, d) m(2, 16, d)\n# define BOOST_PP_REPEAT_1_18(m, d) BOOST_PP_REPEAT_1_17(m, d) m(2, 17, d)\n# define BOOST_PP_REPEAT_1_19(m, d) BOOST_PP_REPEAT_1_18(m, d) m(2, 18, d)\n# define BOOST_PP_REPEAT_1_20(m, d) BOOST_PP_REPEAT_1_19(m, d) m(2, 19, d)\n# define BOOST_PP_REPEAT_1_21(m, d) BOOST_PP_REPEAT_1_20(m, d) m(2, 20, d)\n# define BOOST_PP_REPEAT_1_22(m, d) BOOST_PP_REPEAT_1_21(m, d) m(2, 21, d)\n# define BOOST_PP_REPEAT_1_23(m, d) BOOST_PP_REPEAT_1_22(m, d) m(2, 22, d)\n# define BOOST_PP_REPEAT_1_24(m, d) BOOST_PP_REPEAT_1_23(m, d) m(2, 23, d)\n# define BOOST_PP_REPEAT_1_25(m, d) BOOST_PP_REPEAT_1_24(m, d) m(2, 24, d)\n# define BOOST_PP_REPEAT_1_26(m, d) BOOST_PP_REPEAT_1_25(m, d) m(2, 25, d)\n# define BOOST_PP_REPEAT_1_27(m, d) BOOST_PP_REPEAT_1_26(m, d) m(2, 26, d)\n# define BOOST_PP_REPEAT_1_28(m, d) BOOST_PP_REPEAT_1_27(m, d) m(2, 27, d)\n# define BOOST_PP_REPEAT_1_29(m, d) BOOST_PP_REPEAT_1_28(m, d) m(2, 28, d)\n# define BOOST_PP_REPEAT_1_30(m, d) BOOST_PP_REPEAT_1_29(m, d) m(2, 29, d)\n# define BOOST_PP_REPEAT_1_31(m, d) BOOST_PP_REPEAT_1_30(m, d) m(2, 30, d)\n# define BOOST_PP_REPEAT_1_32(m, d) BOOST_PP_REPEAT_1_31(m, d) m(2, 31, d)\n# define BOOST_PP_REPEAT_1_33(m, d) BOOST_PP_REPEAT_1_32(m, d) m(2, 32, d)\n# define BOOST_PP_REPEAT_1_34(m, d) BOOST_PP_REPEAT_1_33(m, d) m(2, 33, d)\n# define BOOST_PP_REPEAT_1_35(m, d) BOOST_PP_REPEAT_1_34(m, d) m(2, 34, d)\n# define BOOST_PP_REPEAT_1_36(m, d) BOOST_PP_REPEAT_1_35(m, d) m(2, 35, d)\n# define BOOST_PP_REPEAT_1_37(m, d) BOOST_PP_REPEAT_1_36(m, d) m(2, 36, d)\n# define BOOST_PP_REPEAT_1_38(m, d) BOOST_PP_REPEAT_1_37(m, d) m(2, 37, d)\n# define BOOST_PP_REPEAT_1_39(m, d) BOOST_PP_REPEAT_1_38(m, d) m(2, 38, d)\n# define BOOST_PP_REPEAT_1_40(m, d) BOOST_PP_REPEAT_1_39(m, d) m(2, 39, d)\n# define BOOST_PP_REPEAT_1_41(m, d) BOOST_PP_REPEAT_1_40(m, d) m(2, 40, d)\n# define BOOST_PP_REPEAT_1_42(m, d) BOOST_PP_REPEAT_1_41(m, d) m(2, 41, d)\n# define BOOST_PP_REPEAT_1_43(m, d) BOOST_PP_REPEAT_1_42(m, d) m(2, 42, d)\n# define BOOST_PP_REPEAT_1_44(m, d) BOOST_PP_REPEAT_1_43(m, d) m(2, 43, d)\n# define BOOST_PP_REPEAT_1_45(m, d) BOOST_PP_REPEAT_1_44(m, d) m(2, 44, d)\n# define BOOST_PP_REPEAT_1_46(m, d) BOOST_PP_REPEAT_1_45(m, d) m(2, 45, d)\n# define BOOST_PP_REPEAT_1_47(m, d) BOOST_PP_REPEAT_1_46(m, d) m(2, 46, d)\n# define BOOST_PP_REPEAT_1_48(m, d) BOOST_PP_REPEAT_1_47(m, d) m(2, 47, d)\n# define BOOST_PP_REPEAT_1_49(m, d) BOOST_PP_REPEAT_1_48(m, d) m(2, 48, d)\n# define BOOST_PP_REPEAT_1_50(m, d) BOOST_PP_REPEAT_1_49(m, d) m(2, 49, d)\n# define BOOST_PP_REPEAT_1_51(m, d) BOOST_PP_REPEAT_1_50(m, d) m(2, 50, d)\n# define BOOST_PP_REPEAT_1_52(m, d) BOOST_PP_REPEAT_1_51(m, d) m(2, 51, d)\n# define BOOST_PP_REPEAT_1_53(m, d) BOOST_PP_REPEAT_1_52(m, d) m(2, 52, d)\n# define BOOST_PP_REPEAT_1_54(m, d) BOOST_PP_REPEAT_1_53(m, d) m(2, 53, d)\n# define BOOST_PP_REPEAT_1_55(m, d) BOOST_PP_REPEAT_1_54(m, d) m(2, 54, d)\n# define BOOST_PP_REPEAT_1_56(m, d) BOOST_PP_REPEAT_1_55(m, d) m(2, 55, d)\n# define BOOST_PP_REPEAT_1_57(m, d) BOOST_PP_REPEAT_1_56(m, d) m(2, 56, d)\n# define BOOST_PP_REPEAT_1_58(m, d) BOOST_PP_REPEAT_1_57(m, d) m(2, 57, d)\n# define BOOST_PP_REPEAT_1_59(m, d) BOOST_PP_REPEAT_1_58(m, d) m(2, 58, d)\n# define BOOST_PP_REPEAT_1_60(m, d) BOOST_PP_REPEAT_1_59(m, d) m(2, 59, d)\n# define BOOST_PP_REPEAT_1_61(m, d) BOOST_PP_REPEAT_1_60(m, d) m(2, 60, d)\n# define BOOST_PP_REPEAT_1_62(m, d) BOOST_PP_REPEAT_1_61(m, d) m(2, 61, d)\n# define BOOST_PP_REPEAT_1_63(m, d) BOOST_PP_REPEAT_1_62(m, d) m(2, 62, d)\n# define BOOST_PP_REPEAT_1_64(m, d) BOOST_PP_REPEAT_1_63(m, d) m(2, 63, d)\n# define BOOST_PP_REPEAT_1_65(m, d) BOOST_PP_REPEAT_1_64(m, d) m(2, 64, d)\n# define BOOST_PP_REPEAT_1_66(m, d) BOOST_PP_REPEAT_1_65(m, d) m(2, 65, d)\n# define BOOST_PP_REPEAT_1_67(m, d) BOOST_PP_REPEAT_1_66(m, d) m(2, 66, d)\n# define BOOST_PP_REPEAT_1_68(m, d) BOOST_PP_REPEAT_1_67(m, d) m(2, 67, d)\n# define BOOST_PP_REPEAT_1_69(m, d) BOOST_PP_REPEAT_1_68(m, d) m(2, 68, d)\n# define BOOST_PP_REPEAT_1_70(m, d) BOOST_PP_REPEAT_1_69(m, d) m(2, 69, d)\n# define BOOST_PP_REPEAT_1_71(m, d) BOOST_PP_REPEAT_1_70(m, d) m(2, 70, d)\n# define BOOST_PP_REPEAT_1_72(m, d) BOOST_PP_REPEAT_1_71(m, d) m(2, 71, d)\n# define BOOST_PP_REPEAT_1_73(m, d) BOOST_PP_REPEAT_1_72(m, d) m(2, 72, d)\n# define BOOST_PP_REPEAT_1_74(m, d) BOOST_PP_REPEAT_1_73(m, d) m(2, 73, d)\n# define BOOST_PP_REPEAT_1_75(m, d) BOOST_PP_REPEAT_1_74(m, d) m(2, 74, d)\n# define BOOST_PP_REPEAT_1_76(m, d) BOOST_PP_REPEAT_1_75(m, d) m(2, 75, d)\n# define BOOST_PP_REPEAT_1_77(m, d) BOOST_PP_REPEAT_1_76(m, d) m(2, 76, d)\n# define BOOST_PP_REPEAT_1_78(m, d) BOOST_PP_REPEAT_1_77(m, d) m(2, 77, d)\n# define BOOST_PP_REPEAT_1_79(m, d) BOOST_PP_REPEAT_1_78(m, d) m(2, 78, d)\n# define BOOST_PP_REPEAT_1_80(m, d) BOOST_PP_REPEAT_1_79(m, d) m(2, 79, d)\n# define BOOST_PP_REPEAT_1_81(m, d) BOOST_PP_REPEAT_1_80(m, d) m(2, 80, d)\n# define BOOST_PP_REPEAT_1_82(m, d) BOOST_PP_REPEAT_1_81(m, d) m(2, 81, d)\n# define BOOST_PP_REPEAT_1_83(m, d) BOOST_PP_REPEAT_1_82(m, d) m(2, 82, d)\n# define BOOST_PP_REPEAT_1_84(m, d) BOOST_PP_REPEAT_1_83(m, d) m(2, 83, d)\n# define BOOST_PP_REPEAT_1_85(m, d) BOOST_PP_REPEAT_1_84(m, d) m(2, 84, d)\n# define BOOST_PP_REPEAT_1_86(m, d) BOOST_PP_REPEAT_1_85(m, d) m(2, 85, d)\n# define BOOST_PP_REPEAT_1_87(m, d) BOOST_PP_REPEAT_1_86(m, d) m(2, 86, d)\n# define BOOST_PP_REPEAT_1_88(m, d) BOOST_PP_REPEAT_1_87(m, d) m(2, 87, d)\n# define BOOST_PP_REPEAT_1_89(m, d) BOOST_PP_REPEAT_1_88(m, d) m(2, 88, d)\n# define BOOST_PP_REPEAT_1_90(m, d) BOOST_PP_REPEAT_1_89(m, d) m(2, 89, d)\n# define BOOST_PP_REPEAT_1_91(m, d) BOOST_PP_REPEAT_1_90(m, d) m(2, 90, d)\n# define BOOST_PP_REPEAT_1_92(m, d) BOOST_PP_REPEAT_1_91(m, d) m(2, 91, d)\n# define BOOST_PP_REPEAT_1_93(m, d) BOOST_PP_REPEAT_1_92(m, d) m(2, 92, d)\n# define BOOST_PP_REPEAT_1_94(m, d) BOOST_PP_REPEAT_1_93(m, d) m(2, 93, d)\n# define BOOST_PP_REPEAT_1_95(m, d) BOOST_PP_REPEAT_1_94(m, d) m(2, 94, d)\n# define BOOST_PP_REPEAT_1_96(m, d) BOOST_PP_REPEAT_1_95(m, d) m(2, 95, d)\n# define BOOST_PP_REPEAT_1_97(m, d) BOOST_PP_REPEAT_1_96(m, d) m(2, 96, d)\n# define BOOST_PP_REPEAT_1_98(m, d) BOOST_PP_REPEAT_1_97(m, d) m(2, 97, d)\n# define BOOST_PP_REPEAT_1_99(m, d) BOOST_PP_REPEAT_1_98(m, d) m(2, 98, d)\n# define BOOST_PP_REPEAT_1_100(m, d) BOOST_PP_REPEAT_1_99(m, d) m(2, 99, d)\n# define BOOST_PP_REPEAT_1_101(m, d) BOOST_PP_REPEAT_1_100(m, d) m(2, 100, d)\n# define BOOST_PP_REPEAT_1_102(m, d) BOOST_PP_REPEAT_1_101(m, d) m(2, 101, d)\n# define BOOST_PP_REPEAT_1_103(m, d) BOOST_PP_REPEAT_1_102(m, d) m(2, 102, d)\n# define BOOST_PP_REPEAT_1_104(m, d) BOOST_PP_REPEAT_1_103(m, d) m(2, 103, d)\n# define BOOST_PP_REPEAT_1_105(m, d) BOOST_PP_REPEAT_1_104(m, d) m(2, 104, d)\n# define BOOST_PP_REPEAT_1_106(m, d) BOOST_PP_REPEAT_1_105(m, d) m(2, 105, d)\n# define BOOST_PP_REPEAT_1_107(m, d) BOOST_PP_REPEAT_1_106(m, d) m(2, 106, d)\n# define BOOST_PP_REPEAT_1_108(m, d) BOOST_PP_REPEAT_1_107(m, d) m(2, 107, d)\n# define BOOST_PP_REPEAT_1_109(m, d) BOOST_PP_REPEAT_1_108(m, d) m(2, 108, d)\n# define BOOST_PP_REPEAT_1_110(m, d) BOOST_PP_REPEAT_1_109(m, d) m(2, 109, d)\n# define BOOST_PP_REPEAT_1_111(m, d) BOOST_PP_REPEAT_1_110(m, d) m(2, 110, d)\n# define BOOST_PP_REPEAT_1_112(m, d) BOOST_PP_REPEAT_1_111(m, d) m(2, 111, d)\n# define BOOST_PP_REPEAT_1_113(m, d) BOOST_PP_REPEAT_1_112(m, d) m(2, 112, d)\n# define BOOST_PP_REPEAT_1_114(m, d) BOOST_PP_REPEAT_1_113(m, d) m(2, 113, d)\n# define BOOST_PP_REPEAT_1_115(m, d) BOOST_PP_REPEAT_1_114(m, d) m(2, 114, d)\n# define BOOST_PP_REPEAT_1_116(m, d) BOOST_PP_REPEAT_1_115(m, d) m(2, 115, d)\n# define BOOST_PP_REPEAT_1_117(m, d) BOOST_PP_REPEAT_1_116(m, d) m(2, 116, d)\n# define BOOST_PP_REPEAT_1_118(m, d) BOOST_PP_REPEAT_1_117(m, d) m(2, 117, d)\n# define BOOST_PP_REPEAT_1_119(m, d) BOOST_PP_REPEAT_1_118(m, d) m(2, 118, d)\n# define BOOST_PP_REPEAT_1_120(m, d) BOOST_PP_REPEAT_1_119(m, d) m(2, 119, d)\n# define BOOST_PP_REPEAT_1_121(m, d) BOOST_PP_REPEAT_1_120(m, d) m(2, 120, d)\n# define BOOST_PP_REPEAT_1_122(m, d) BOOST_PP_REPEAT_1_121(m, d) m(2, 121, d)\n# define BOOST_PP_REPEAT_1_123(m, d) BOOST_PP_REPEAT_1_122(m, d) m(2, 122, d)\n# define BOOST_PP_REPEAT_1_124(m, d) BOOST_PP_REPEAT_1_123(m, d) m(2, 123, d)\n# define BOOST_PP_REPEAT_1_125(m, d) BOOST_PP_REPEAT_1_124(m, d) m(2, 124, d)\n# define BOOST_PP_REPEAT_1_126(m, d) BOOST_PP_REPEAT_1_125(m, d) m(2, 125, d)\n# define BOOST_PP_REPEAT_1_127(m, d) BOOST_PP_REPEAT_1_126(m, d) m(2, 126, d)\n# define BOOST_PP_REPEAT_1_128(m, d) BOOST_PP_REPEAT_1_127(m, d) m(2, 127, d)\n# define BOOST_PP_REPEAT_1_129(m, d) BOOST_PP_REPEAT_1_128(m, d) m(2, 128, d)\n# define BOOST_PP_REPEAT_1_130(m, d) BOOST_PP_REPEAT_1_129(m, d) m(2, 129, d)\n# define BOOST_PP_REPEAT_1_131(m, d) BOOST_PP_REPEAT_1_130(m, d) m(2, 130, d)\n# define BOOST_PP_REPEAT_1_132(m, d) BOOST_PP_REPEAT_1_131(m, d) m(2, 131, d)\n# define BOOST_PP_REPEAT_1_133(m, d) BOOST_PP_REPEAT_1_132(m, d) m(2, 132, d)\n# define BOOST_PP_REPEAT_1_134(m, d) BOOST_PP_REPEAT_1_133(m, d) m(2, 133, d)\n# define BOOST_PP_REPEAT_1_135(m, d) BOOST_PP_REPEAT_1_134(m, d) m(2, 134, d)\n# define BOOST_PP_REPEAT_1_136(m, d) BOOST_PP_REPEAT_1_135(m, d) m(2, 135, d)\n# define BOOST_PP_REPEAT_1_137(m, d) BOOST_PP_REPEAT_1_136(m, d) m(2, 136, d)\n# define BOOST_PP_REPEAT_1_138(m, d) BOOST_PP_REPEAT_1_137(m, d) m(2, 137, d)\n# define BOOST_PP_REPEAT_1_139(m, d) BOOST_PP_REPEAT_1_138(m, d) m(2, 138, d)\n# define BOOST_PP_REPEAT_1_140(m, d) BOOST_PP_REPEAT_1_139(m, d) m(2, 139, d)\n# define BOOST_PP_REPEAT_1_141(m, d) BOOST_PP_REPEAT_1_140(m, d) m(2, 140, d)\n# define BOOST_PP_REPEAT_1_142(m, d) BOOST_PP_REPEAT_1_141(m, d) m(2, 141, d)\n# define BOOST_PP_REPEAT_1_143(m, d) BOOST_PP_REPEAT_1_142(m, d) m(2, 142, d)\n# define BOOST_PP_REPEAT_1_144(m, d) BOOST_PP_REPEAT_1_143(m, d) m(2, 143, d)\n# define BOOST_PP_REPEAT_1_145(m, d) BOOST_PP_REPEAT_1_144(m, d) m(2, 144, d)\n# define BOOST_PP_REPEAT_1_146(m, d) BOOST_PP_REPEAT_1_145(m, d) m(2, 145, d)\n# define BOOST_PP_REPEAT_1_147(m, d) BOOST_PP_REPEAT_1_146(m, d) m(2, 146, d)\n# define BOOST_PP_REPEAT_1_148(m, d) BOOST_PP_REPEAT_1_147(m, d) m(2, 147, d)\n# define BOOST_PP_REPEAT_1_149(m, d) BOOST_PP_REPEAT_1_148(m, d) m(2, 148, d)\n# define BOOST_PP_REPEAT_1_150(m, d) BOOST_PP_REPEAT_1_149(m, d) m(2, 149, d)\n# define BOOST_PP_REPEAT_1_151(m, d) BOOST_PP_REPEAT_1_150(m, d) m(2, 150, d)\n# define BOOST_PP_REPEAT_1_152(m, d) BOOST_PP_REPEAT_1_151(m, d) m(2, 151, d)\n# define BOOST_PP_REPEAT_1_153(m, d) BOOST_PP_REPEAT_1_152(m, d) m(2, 152, d)\n# define BOOST_PP_REPEAT_1_154(m, d) BOOST_PP_REPEAT_1_153(m, d) m(2, 153, d)\n# define BOOST_PP_REPEAT_1_155(m, d) BOOST_PP_REPEAT_1_154(m, d) m(2, 154, d)\n# define BOOST_PP_REPEAT_1_156(m, d) BOOST_PP_REPEAT_1_155(m, d) m(2, 155, d)\n# define BOOST_PP_REPEAT_1_157(m, d) BOOST_PP_REPEAT_1_156(m, d) m(2, 156, d)\n# define BOOST_PP_REPEAT_1_158(m, d) BOOST_PP_REPEAT_1_157(m, d) m(2, 157, d)\n# define BOOST_PP_REPEAT_1_159(m, d) BOOST_PP_REPEAT_1_158(m, d) m(2, 158, d)\n# define BOOST_PP_REPEAT_1_160(m, d) BOOST_PP_REPEAT_1_159(m, d) m(2, 159, d)\n# define BOOST_PP_REPEAT_1_161(m, d) BOOST_PP_REPEAT_1_160(m, d) m(2, 160, d)\n# define BOOST_PP_REPEAT_1_162(m, d) BOOST_PP_REPEAT_1_161(m, d) m(2, 161, d)\n# define BOOST_PP_REPEAT_1_163(m, d) BOOST_PP_REPEAT_1_162(m, d) m(2, 162, d)\n# define BOOST_PP_REPEAT_1_164(m, d) BOOST_PP_REPEAT_1_163(m, d) m(2, 163, d)\n# define BOOST_PP_REPEAT_1_165(m, d) BOOST_PP_REPEAT_1_164(m, d) m(2, 164, d)\n# define BOOST_PP_REPEAT_1_166(m, d) BOOST_PP_REPEAT_1_165(m, d) m(2, 165, d)\n# define BOOST_PP_REPEAT_1_167(m, d) BOOST_PP_REPEAT_1_166(m, d) m(2, 166, d)\n# define BOOST_PP_REPEAT_1_168(m, d) BOOST_PP_REPEAT_1_167(m, d) m(2, 167, d)\n# define BOOST_PP_REPEAT_1_169(m, d) BOOST_PP_REPEAT_1_168(m, d) m(2, 168, d)\n# define BOOST_PP_REPEAT_1_170(m, d) BOOST_PP_REPEAT_1_169(m, d) m(2, 169, d)\n# define BOOST_PP_REPEAT_1_171(m, d) BOOST_PP_REPEAT_1_170(m, d) m(2, 170, d)\n# define BOOST_PP_REPEAT_1_172(m, d) BOOST_PP_REPEAT_1_171(m, d) m(2, 171, d)\n# define BOOST_PP_REPEAT_1_173(m, d) BOOST_PP_REPEAT_1_172(m, d) m(2, 172, d)\n# define BOOST_PP_REPEAT_1_174(m, d) BOOST_PP_REPEAT_1_173(m, d) m(2, 173, d)\n# define BOOST_PP_REPEAT_1_175(m, d) BOOST_PP_REPEAT_1_174(m, d) m(2, 174, d)\n# define BOOST_PP_REPEAT_1_176(m, d) BOOST_PP_REPEAT_1_175(m, d) m(2, 175, d)\n# define BOOST_PP_REPEAT_1_177(m, d) BOOST_PP_REPEAT_1_176(m, d) m(2, 176, d)\n# define BOOST_PP_REPEAT_1_178(m, d) BOOST_PP_REPEAT_1_177(m, d) m(2, 177, d)\n# define BOOST_PP_REPEAT_1_179(m, d) BOOST_PP_REPEAT_1_178(m, d) m(2, 178, d)\n# define BOOST_PP_REPEAT_1_180(m, d) BOOST_PP_REPEAT_1_179(m, d) m(2, 179, d)\n# define BOOST_PP_REPEAT_1_181(m, d) BOOST_PP_REPEAT_1_180(m, d) m(2, 180, d)\n# define BOOST_PP_REPEAT_1_182(m, d) BOOST_PP_REPEAT_1_181(m, d) m(2, 181, d)\n# define BOOST_PP_REPEAT_1_183(m, d) BOOST_PP_REPEAT_1_182(m, d) m(2, 182, d)\n# define BOOST_PP_REPEAT_1_184(m, d) BOOST_PP_REPEAT_1_183(m, d) m(2, 183, d)\n# define BOOST_PP_REPEAT_1_185(m, d) BOOST_PP_REPEAT_1_184(m, d) m(2, 184, d)\n# define BOOST_PP_REPEAT_1_186(m, d) BOOST_PP_REPEAT_1_185(m, d) m(2, 185, d)\n# define BOOST_PP_REPEAT_1_187(m, d) BOOST_PP_REPEAT_1_186(m, d) m(2, 186, d)\n# define BOOST_PP_REPEAT_1_188(m, d) BOOST_PP_REPEAT_1_187(m, d) m(2, 187, d)\n# define BOOST_PP_REPEAT_1_189(m, d) BOOST_PP_REPEAT_1_188(m, d) m(2, 188, d)\n# define BOOST_PP_REPEAT_1_190(m, d) BOOST_PP_REPEAT_1_189(m, d) m(2, 189, d)\n# define BOOST_PP_REPEAT_1_191(m, d) BOOST_PP_REPEAT_1_190(m, d) m(2, 190, d)\n# define BOOST_PP_REPEAT_1_192(m, d) BOOST_PP_REPEAT_1_191(m, d) m(2, 191, d)\n# define BOOST_PP_REPEAT_1_193(m, d) BOOST_PP_REPEAT_1_192(m, d) m(2, 192, d)\n# define BOOST_PP_REPEAT_1_194(m, d) BOOST_PP_REPEAT_1_193(m, d) m(2, 193, d)\n# define BOOST_PP_REPEAT_1_195(m, d) BOOST_PP_REPEAT_1_194(m, d) m(2, 194, d)\n# define BOOST_PP_REPEAT_1_196(m, d) BOOST_PP_REPEAT_1_195(m, d) m(2, 195, d)\n# define BOOST_PP_REPEAT_1_197(m, d) BOOST_PP_REPEAT_1_196(m, d) m(2, 196, d)\n# define BOOST_PP_REPEAT_1_198(m, d) BOOST_PP_REPEAT_1_197(m, d) m(2, 197, d)\n# define BOOST_PP_REPEAT_1_199(m, d) BOOST_PP_REPEAT_1_198(m, d) m(2, 198, d)\n# define BOOST_PP_REPEAT_1_200(m, d) BOOST_PP_REPEAT_1_199(m, d) m(2, 199, d)\n# define BOOST_PP_REPEAT_1_201(m, d) BOOST_PP_REPEAT_1_200(m, d) m(2, 200, d)\n# define BOOST_PP_REPEAT_1_202(m, d) BOOST_PP_REPEAT_1_201(m, d) m(2, 201, d)\n# define BOOST_PP_REPEAT_1_203(m, d) BOOST_PP_REPEAT_1_202(m, d) m(2, 202, d)\n# define BOOST_PP_REPEAT_1_204(m, d) BOOST_PP_REPEAT_1_203(m, d) m(2, 203, d)\n# define BOOST_PP_REPEAT_1_205(m, d) BOOST_PP_REPEAT_1_204(m, d) m(2, 204, d)\n# define BOOST_PP_REPEAT_1_206(m, d) BOOST_PP_REPEAT_1_205(m, d) m(2, 205, d)\n# define BOOST_PP_REPEAT_1_207(m, d) BOOST_PP_REPEAT_1_206(m, d) m(2, 206, d)\n# define BOOST_PP_REPEAT_1_208(m, d) BOOST_PP_REPEAT_1_207(m, d) m(2, 207, d)\n# define BOOST_PP_REPEAT_1_209(m, d) BOOST_PP_REPEAT_1_208(m, d) m(2, 208, d)\n# define BOOST_PP_REPEAT_1_210(m, d) BOOST_PP_REPEAT_1_209(m, d) m(2, 209, d)\n# define BOOST_PP_REPEAT_1_211(m, d) BOOST_PP_REPEAT_1_210(m, d) m(2, 210, d)\n# define BOOST_PP_REPEAT_1_212(m, d) BOOST_PP_REPEAT_1_211(m, d) m(2, 211, d)\n# define BOOST_PP_REPEAT_1_213(m, d) BOOST_PP_REPEAT_1_212(m, d) m(2, 212, d)\n# define BOOST_PP_REPEAT_1_214(m, d) BOOST_PP_REPEAT_1_213(m, d) m(2, 213, d)\n# define BOOST_PP_REPEAT_1_215(m, d) BOOST_PP_REPEAT_1_214(m, d) m(2, 214, d)\n# define BOOST_PP_REPEAT_1_216(m, d) BOOST_PP_REPEAT_1_215(m, d) m(2, 215, d)\n# define BOOST_PP_REPEAT_1_217(m, d) BOOST_PP_REPEAT_1_216(m, d) m(2, 216, d)\n# define BOOST_PP_REPEAT_1_218(m, d) BOOST_PP_REPEAT_1_217(m, d) m(2, 217, d)\n# define BOOST_PP_REPEAT_1_219(m, d) BOOST_PP_REPEAT_1_218(m, d) m(2, 218, d)\n# define BOOST_PP_REPEAT_1_220(m, d) BOOST_PP_REPEAT_1_219(m, d) m(2, 219, d)\n# define BOOST_PP_REPEAT_1_221(m, d) BOOST_PP_REPEAT_1_220(m, d) m(2, 220, d)\n# define BOOST_PP_REPEAT_1_222(m, d) BOOST_PP_REPEAT_1_221(m, d) m(2, 221, d)\n# define BOOST_PP_REPEAT_1_223(m, d) BOOST_PP_REPEAT_1_222(m, d) m(2, 222, d)\n# define BOOST_PP_REPEAT_1_224(m, d) BOOST_PP_REPEAT_1_223(m, d) m(2, 223, d)\n# define BOOST_PP_REPEAT_1_225(m, d) BOOST_PP_REPEAT_1_224(m, d) m(2, 224, d)\n# define BOOST_PP_REPEAT_1_226(m, d) BOOST_PP_REPEAT_1_225(m, d) m(2, 225, d)\n# define BOOST_PP_REPEAT_1_227(m, d) BOOST_PP_REPEAT_1_226(m, d) m(2, 226, d)\n# define BOOST_PP_REPEAT_1_228(m, d) BOOST_PP_REPEAT_1_227(m, d) m(2, 227, d)\n# define BOOST_PP_REPEAT_1_229(m, d) BOOST_PP_REPEAT_1_228(m, d) m(2, 228, d)\n# define BOOST_PP_REPEAT_1_230(m, d) BOOST_PP_REPEAT_1_229(m, d) m(2, 229, d)\n# define BOOST_PP_REPEAT_1_231(m, d) BOOST_PP_REPEAT_1_230(m, d) m(2, 230, d)\n# define BOOST_PP_REPEAT_1_232(m, d) BOOST_PP_REPEAT_1_231(m, d) m(2, 231, d)\n# define BOOST_PP_REPEAT_1_233(m, d) BOOST_PP_REPEAT_1_232(m, d) m(2, 232, d)\n# define BOOST_PP_REPEAT_1_234(m, d) BOOST_PP_REPEAT_1_233(m, d) m(2, 233, d)\n# define BOOST_PP_REPEAT_1_235(m, d) BOOST_PP_REPEAT_1_234(m, d) m(2, 234, d)\n# define BOOST_PP_REPEAT_1_236(m, d) BOOST_PP_REPEAT_1_235(m, d) m(2, 235, d)\n# define BOOST_PP_REPEAT_1_237(m, d) BOOST_PP_REPEAT_1_236(m, d) m(2, 236, d)\n# define BOOST_PP_REPEAT_1_238(m, d) BOOST_PP_REPEAT_1_237(m, d) m(2, 237, d)\n# define BOOST_PP_REPEAT_1_239(m, d) BOOST_PP_REPEAT_1_238(m, d) m(2, 238, d)\n# define BOOST_PP_REPEAT_1_240(m, d) BOOST_PP_REPEAT_1_239(m, d) m(2, 239, d)\n# define BOOST_PP_REPEAT_1_241(m, d) BOOST_PP_REPEAT_1_240(m, d) m(2, 240, d)\n# define BOOST_PP_REPEAT_1_242(m, d) BOOST_PP_REPEAT_1_241(m, d) m(2, 241, d)\n# define BOOST_PP_REPEAT_1_243(m, d) BOOST_PP_REPEAT_1_242(m, d) m(2, 242, d)\n# define BOOST_PP_REPEAT_1_244(m, d) BOOST_PP_REPEAT_1_243(m, d) m(2, 243, d)\n# define BOOST_PP_REPEAT_1_245(m, d) BOOST_PP_REPEAT_1_244(m, d) m(2, 244, d)\n# define BOOST_PP_REPEAT_1_246(m, d) BOOST_PP_REPEAT_1_245(m, d) m(2, 245, d)\n# define BOOST_PP_REPEAT_1_247(m, d) BOOST_PP_REPEAT_1_246(m, d) m(2, 246, d)\n# define BOOST_PP_REPEAT_1_248(m, d) BOOST_PP_REPEAT_1_247(m, d) m(2, 247, d)\n# define BOOST_PP_REPEAT_1_249(m, d) BOOST_PP_REPEAT_1_248(m, d) m(2, 248, d)\n# define BOOST_PP_REPEAT_1_250(m, d) BOOST_PP_REPEAT_1_249(m, d) m(2, 249, d)\n# define BOOST_PP_REPEAT_1_251(m, d) BOOST_PP_REPEAT_1_250(m, d) m(2, 250, d)\n# define BOOST_PP_REPEAT_1_252(m, d) BOOST_PP_REPEAT_1_251(m, d) m(2, 251, d)\n# define BOOST_PP_REPEAT_1_253(m, d) BOOST_PP_REPEAT_1_252(m, d) m(2, 252, d)\n# define BOOST_PP_REPEAT_1_254(m, d) BOOST_PP_REPEAT_1_253(m, d) m(2, 253, d)\n# define BOOST_PP_REPEAT_1_255(m, d) BOOST_PP_REPEAT_1_254(m, d) m(2, 254, d)\n# define BOOST_PP_REPEAT_1_256(m, d) BOOST_PP_REPEAT_1_255(m, d) m(2, 255, d)\n#\n# define BOOST_PP_REPEAT_2_0(m, d)\n# define BOOST_PP_REPEAT_2_1(m, d) m(3, 0, d)\n# define BOOST_PP_REPEAT_2_2(m, d) BOOST_PP_REPEAT_2_1(m, d) m(3, 1, d)\n# define BOOST_PP_REPEAT_2_3(m, d) BOOST_PP_REPEAT_2_2(m, d) m(3, 2, d)\n# define BOOST_PP_REPEAT_2_4(m, d) BOOST_PP_REPEAT_2_3(m, d) m(3, 3, d)\n# define BOOST_PP_REPEAT_2_5(m, d) BOOST_PP_REPEAT_2_4(m, d) m(3, 4, d)\n# define BOOST_PP_REPEAT_2_6(m, d) BOOST_PP_REPEAT_2_5(m, d) m(3, 5, d)\n# define BOOST_PP_REPEAT_2_7(m, d) BOOST_PP_REPEAT_2_6(m, d) m(3, 6, d)\n# define BOOST_PP_REPEAT_2_8(m, d) BOOST_PP_REPEAT_2_7(m, d) m(3, 7, d)\n# define BOOST_PP_REPEAT_2_9(m, d) BOOST_PP_REPEAT_2_8(m, d) m(3, 8, d)\n# define BOOST_PP_REPEAT_2_10(m, d) BOOST_PP_REPEAT_2_9(m, d) m(3, 9, d)\n# define BOOST_PP_REPEAT_2_11(m, d) BOOST_PP_REPEAT_2_10(m, d) m(3, 10, d)\n# define BOOST_PP_REPEAT_2_12(m, d) BOOST_PP_REPEAT_2_11(m, d) m(3, 11, d)\n# define BOOST_PP_REPEAT_2_13(m, d) BOOST_PP_REPEAT_2_12(m, d) m(3, 12, d)\n# define BOOST_PP_REPEAT_2_14(m, d) BOOST_PP_REPEAT_2_13(m, d) m(3, 13, d)\n# define BOOST_PP_REPEAT_2_15(m, d) BOOST_PP_REPEAT_2_14(m, d) m(3, 14, d)\n# define BOOST_PP_REPEAT_2_16(m, d) BOOST_PP_REPEAT_2_15(m, d) m(3, 15, d)\n# define BOOST_PP_REPEAT_2_17(m, d) BOOST_PP_REPEAT_2_16(m, d) m(3, 16, d)\n# define BOOST_PP_REPEAT_2_18(m, d) BOOST_PP_REPEAT_2_17(m, d) m(3, 17, d)\n# define BOOST_PP_REPEAT_2_19(m, d) BOOST_PP_REPEAT_2_18(m, d) m(3, 18, d)\n# define BOOST_PP_REPEAT_2_20(m, d) BOOST_PP_REPEAT_2_19(m, d) m(3, 19, d)\n# define BOOST_PP_REPEAT_2_21(m, d) BOOST_PP_REPEAT_2_20(m, d) m(3, 20, d)\n# define BOOST_PP_REPEAT_2_22(m, d) BOOST_PP_REPEAT_2_21(m, d) m(3, 21, d)\n# define BOOST_PP_REPEAT_2_23(m, d) BOOST_PP_REPEAT_2_22(m, d) m(3, 22, d)\n# define BOOST_PP_REPEAT_2_24(m, d) BOOST_PP_REPEAT_2_23(m, d) m(3, 23, d)\n# define BOOST_PP_REPEAT_2_25(m, d) BOOST_PP_REPEAT_2_24(m, d) m(3, 24, d)\n# define BOOST_PP_REPEAT_2_26(m, d) BOOST_PP_REPEAT_2_25(m, d) m(3, 25, d)\n# define BOOST_PP_REPEAT_2_27(m, d) BOOST_PP_REPEAT_2_26(m, d) m(3, 26, d)\n# define BOOST_PP_REPEAT_2_28(m, d) BOOST_PP_REPEAT_2_27(m, d) m(3, 27, d)\n# define BOOST_PP_REPEAT_2_29(m, d) BOOST_PP_REPEAT_2_28(m, d) m(3, 28, d)\n# define BOOST_PP_REPEAT_2_30(m, d) BOOST_PP_REPEAT_2_29(m, d) m(3, 29, d)\n# define BOOST_PP_REPEAT_2_31(m, d) BOOST_PP_REPEAT_2_30(m, d) m(3, 30, d)\n# define BOOST_PP_REPEAT_2_32(m, d) BOOST_PP_REPEAT_2_31(m, d) m(3, 31, d)\n# define BOOST_PP_REPEAT_2_33(m, d) BOOST_PP_REPEAT_2_32(m, d) m(3, 32, d)\n# define BOOST_PP_REPEAT_2_34(m, d) BOOST_PP_REPEAT_2_33(m, d) m(3, 33, d)\n# define BOOST_PP_REPEAT_2_35(m, d) BOOST_PP_REPEAT_2_34(m, d) m(3, 34, d)\n# define BOOST_PP_REPEAT_2_36(m, d) BOOST_PP_REPEAT_2_35(m, d) m(3, 35, d)\n# define BOOST_PP_REPEAT_2_37(m, d) BOOST_PP_REPEAT_2_36(m, d) m(3, 36, d)\n# define BOOST_PP_REPEAT_2_38(m, d) BOOST_PP_REPEAT_2_37(m, d) m(3, 37, d)\n# define BOOST_PP_REPEAT_2_39(m, d) BOOST_PP_REPEAT_2_38(m, d) m(3, 38, d)\n# define BOOST_PP_REPEAT_2_40(m, d) BOOST_PP_REPEAT_2_39(m, d) m(3, 39, d)\n# define BOOST_PP_REPEAT_2_41(m, d) BOOST_PP_REPEAT_2_40(m, d) m(3, 40, d)\n# define BOOST_PP_REPEAT_2_42(m, d) BOOST_PP_REPEAT_2_41(m, d) m(3, 41, d)\n# define BOOST_PP_REPEAT_2_43(m, d) BOOST_PP_REPEAT_2_42(m, d) m(3, 42, d)\n# define BOOST_PP_REPEAT_2_44(m, d) BOOST_PP_REPEAT_2_43(m, d) m(3, 43, d)\n# define BOOST_PP_REPEAT_2_45(m, d) BOOST_PP_REPEAT_2_44(m, d) m(3, 44, d)\n# define BOOST_PP_REPEAT_2_46(m, d) BOOST_PP_REPEAT_2_45(m, d) m(3, 45, d)\n# define BOOST_PP_REPEAT_2_47(m, d) BOOST_PP_REPEAT_2_46(m, d) m(3, 46, d)\n# define BOOST_PP_REPEAT_2_48(m, d) BOOST_PP_REPEAT_2_47(m, d) m(3, 47, d)\n# define BOOST_PP_REPEAT_2_49(m, d) BOOST_PP_REPEAT_2_48(m, d) m(3, 48, d)\n# define BOOST_PP_REPEAT_2_50(m, d) BOOST_PP_REPEAT_2_49(m, d) m(3, 49, d)\n# define BOOST_PP_REPEAT_2_51(m, d) BOOST_PP_REPEAT_2_50(m, d) m(3, 50, d)\n# define BOOST_PP_REPEAT_2_52(m, d) BOOST_PP_REPEAT_2_51(m, d) m(3, 51, d)\n# define BOOST_PP_REPEAT_2_53(m, d) BOOST_PP_REPEAT_2_52(m, d) m(3, 52, d)\n# define BOOST_PP_REPEAT_2_54(m, d) BOOST_PP_REPEAT_2_53(m, d) m(3, 53, d)\n# define BOOST_PP_REPEAT_2_55(m, d) BOOST_PP_REPEAT_2_54(m, d) m(3, 54, d)\n# define BOOST_PP_REPEAT_2_56(m, d) BOOST_PP_REPEAT_2_55(m, d) m(3, 55, d)\n# define BOOST_PP_REPEAT_2_57(m, d) BOOST_PP_REPEAT_2_56(m, d) m(3, 56, d)\n# define BOOST_PP_REPEAT_2_58(m, d) BOOST_PP_REPEAT_2_57(m, d) m(3, 57, d)\n# define BOOST_PP_REPEAT_2_59(m, d) BOOST_PP_REPEAT_2_58(m, d) m(3, 58, d)\n# define BOOST_PP_REPEAT_2_60(m, d) BOOST_PP_REPEAT_2_59(m, d) m(3, 59, d)\n# define BOOST_PP_REPEAT_2_61(m, d) BOOST_PP_REPEAT_2_60(m, d) m(3, 60, d)\n# define BOOST_PP_REPEAT_2_62(m, d) BOOST_PP_REPEAT_2_61(m, d) m(3, 61, d)\n# define BOOST_PP_REPEAT_2_63(m, d) BOOST_PP_REPEAT_2_62(m, d) m(3, 62, d)\n# define BOOST_PP_REPEAT_2_64(m, d) BOOST_PP_REPEAT_2_63(m, d) m(3, 63, d)\n# define BOOST_PP_REPEAT_2_65(m, d) BOOST_PP_REPEAT_2_64(m, d) m(3, 64, d)\n# define BOOST_PP_REPEAT_2_66(m, d) BOOST_PP_REPEAT_2_65(m, d) m(3, 65, d)\n# define BOOST_PP_REPEAT_2_67(m, d) BOOST_PP_REPEAT_2_66(m, d) m(3, 66, d)\n# define BOOST_PP_REPEAT_2_68(m, d) BOOST_PP_REPEAT_2_67(m, d) m(3, 67, d)\n# define BOOST_PP_REPEAT_2_69(m, d) BOOST_PP_REPEAT_2_68(m, d) m(3, 68, d)\n# define BOOST_PP_REPEAT_2_70(m, d) BOOST_PP_REPEAT_2_69(m, d) m(3, 69, d)\n# define BOOST_PP_REPEAT_2_71(m, d) BOOST_PP_REPEAT_2_70(m, d) m(3, 70, d)\n# define BOOST_PP_REPEAT_2_72(m, d) BOOST_PP_REPEAT_2_71(m, d) m(3, 71, d)\n# define BOOST_PP_REPEAT_2_73(m, d) BOOST_PP_REPEAT_2_72(m, d) m(3, 72, d)\n# define BOOST_PP_REPEAT_2_74(m, d) BOOST_PP_REPEAT_2_73(m, d) m(3, 73, d)\n# define BOOST_PP_REPEAT_2_75(m, d) BOOST_PP_REPEAT_2_74(m, d) m(3, 74, d)\n# define BOOST_PP_REPEAT_2_76(m, d) BOOST_PP_REPEAT_2_75(m, d) m(3, 75, d)\n# define BOOST_PP_REPEAT_2_77(m, d) BOOST_PP_REPEAT_2_76(m, d) m(3, 76, d)\n# define BOOST_PP_REPEAT_2_78(m, d) BOOST_PP_REPEAT_2_77(m, d) m(3, 77, d)\n# define BOOST_PP_REPEAT_2_79(m, d) BOOST_PP_REPEAT_2_78(m, d) m(3, 78, d)\n# define BOOST_PP_REPEAT_2_80(m, d) BOOST_PP_REPEAT_2_79(m, d) m(3, 79, d)\n# define BOOST_PP_REPEAT_2_81(m, d) BOOST_PP_REPEAT_2_80(m, d) m(3, 80, d)\n# define BOOST_PP_REPEAT_2_82(m, d) BOOST_PP_REPEAT_2_81(m, d) m(3, 81, d)\n# define BOOST_PP_REPEAT_2_83(m, d) BOOST_PP_REPEAT_2_82(m, d) m(3, 82, d)\n# define BOOST_PP_REPEAT_2_84(m, d) BOOST_PP_REPEAT_2_83(m, d) m(3, 83, d)\n# define BOOST_PP_REPEAT_2_85(m, d) BOOST_PP_REPEAT_2_84(m, d) m(3, 84, d)\n# define BOOST_PP_REPEAT_2_86(m, d) BOOST_PP_REPEAT_2_85(m, d) m(3, 85, d)\n# define BOOST_PP_REPEAT_2_87(m, d) BOOST_PP_REPEAT_2_86(m, d) m(3, 86, d)\n# define BOOST_PP_REPEAT_2_88(m, d) BOOST_PP_REPEAT_2_87(m, d) m(3, 87, d)\n# define BOOST_PP_REPEAT_2_89(m, d) BOOST_PP_REPEAT_2_88(m, d) m(3, 88, d)\n# define BOOST_PP_REPEAT_2_90(m, d) BOOST_PP_REPEAT_2_89(m, d) m(3, 89, d)\n# define BOOST_PP_REPEAT_2_91(m, d) BOOST_PP_REPEAT_2_90(m, d) m(3, 90, d)\n# define BOOST_PP_REPEAT_2_92(m, d) BOOST_PP_REPEAT_2_91(m, d) m(3, 91, d)\n# define BOOST_PP_REPEAT_2_93(m, d) BOOST_PP_REPEAT_2_92(m, d) m(3, 92, d)\n# define BOOST_PP_REPEAT_2_94(m, d) BOOST_PP_REPEAT_2_93(m, d) m(3, 93, d)\n# define BOOST_PP_REPEAT_2_95(m, d) BOOST_PP_REPEAT_2_94(m, d) m(3, 94, d)\n# define BOOST_PP_REPEAT_2_96(m, d) BOOST_PP_REPEAT_2_95(m, d) m(3, 95, d)\n# define BOOST_PP_REPEAT_2_97(m, d) BOOST_PP_REPEAT_2_96(m, d) m(3, 96, d)\n# define BOOST_PP_REPEAT_2_98(m, d) BOOST_PP_REPEAT_2_97(m, d) m(3, 97, d)\n# define BOOST_PP_REPEAT_2_99(m, d) BOOST_PP_REPEAT_2_98(m, d) m(3, 98, d)\n# define BOOST_PP_REPEAT_2_100(m, d) BOOST_PP_REPEAT_2_99(m, d) m(3, 99, d)\n# define BOOST_PP_REPEAT_2_101(m, d) BOOST_PP_REPEAT_2_100(m, d) m(3, 100, d)\n# define BOOST_PP_REPEAT_2_102(m, d) BOOST_PP_REPEAT_2_101(m, d) m(3, 101, d)\n# define BOOST_PP_REPEAT_2_103(m, d) BOOST_PP_REPEAT_2_102(m, d) m(3, 102, d)\n# define BOOST_PP_REPEAT_2_104(m, d) BOOST_PP_REPEAT_2_103(m, d) m(3, 103, d)\n# define BOOST_PP_REPEAT_2_105(m, d) BOOST_PP_REPEAT_2_104(m, d) m(3, 104, d)\n# define BOOST_PP_REPEAT_2_106(m, d) BOOST_PP_REPEAT_2_105(m, d) m(3, 105, d)\n# define BOOST_PP_REPEAT_2_107(m, d) BOOST_PP_REPEAT_2_106(m, d) m(3, 106, d)\n# define BOOST_PP_REPEAT_2_108(m, d) BOOST_PP_REPEAT_2_107(m, d) m(3, 107, d)\n# define BOOST_PP_REPEAT_2_109(m, d) BOOST_PP_REPEAT_2_108(m, d) m(3, 108, d)\n# define BOOST_PP_REPEAT_2_110(m, d) BOOST_PP_REPEAT_2_109(m, d) m(3, 109, d)\n# define BOOST_PP_REPEAT_2_111(m, d) BOOST_PP_REPEAT_2_110(m, d) m(3, 110, d)\n# define BOOST_PP_REPEAT_2_112(m, d) BOOST_PP_REPEAT_2_111(m, d) m(3, 111, d)\n# define BOOST_PP_REPEAT_2_113(m, d) BOOST_PP_REPEAT_2_112(m, d) m(3, 112, d)\n# define BOOST_PP_REPEAT_2_114(m, d) BOOST_PP_REPEAT_2_113(m, d) m(3, 113, d)\n# define BOOST_PP_REPEAT_2_115(m, d) BOOST_PP_REPEAT_2_114(m, d) m(3, 114, d)\n# define BOOST_PP_REPEAT_2_116(m, d) BOOST_PP_REPEAT_2_115(m, d) m(3, 115, d)\n# define BOOST_PP_REPEAT_2_117(m, d) BOOST_PP_REPEAT_2_116(m, d) m(3, 116, d)\n# define BOOST_PP_REPEAT_2_118(m, d) BOOST_PP_REPEAT_2_117(m, d) m(3, 117, d)\n# define BOOST_PP_REPEAT_2_119(m, d) BOOST_PP_REPEAT_2_118(m, d) m(3, 118, d)\n# define BOOST_PP_REPEAT_2_120(m, d) BOOST_PP_REPEAT_2_119(m, d) m(3, 119, d)\n# define BOOST_PP_REPEAT_2_121(m, d) BOOST_PP_REPEAT_2_120(m, d) m(3, 120, d)\n# define BOOST_PP_REPEAT_2_122(m, d) BOOST_PP_REPEAT_2_121(m, d) m(3, 121, d)\n# define BOOST_PP_REPEAT_2_123(m, d) BOOST_PP_REPEAT_2_122(m, d) m(3, 122, d)\n# define BOOST_PP_REPEAT_2_124(m, d) BOOST_PP_REPEAT_2_123(m, d) m(3, 123, d)\n# define BOOST_PP_REPEAT_2_125(m, d) BOOST_PP_REPEAT_2_124(m, d) m(3, 124, d)\n# define BOOST_PP_REPEAT_2_126(m, d) BOOST_PP_REPEAT_2_125(m, d) m(3, 125, d)\n# define BOOST_PP_REPEAT_2_127(m, d) BOOST_PP_REPEAT_2_126(m, d) m(3, 126, d)\n# define BOOST_PP_REPEAT_2_128(m, d) BOOST_PP_REPEAT_2_127(m, d) m(3, 127, d)\n# define BOOST_PP_REPEAT_2_129(m, d) BOOST_PP_REPEAT_2_128(m, d) m(3, 128, d)\n# define BOOST_PP_REPEAT_2_130(m, d) BOOST_PP_REPEAT_2_129(m, d) m(3, 129, d)\n# define BOOST_PP_REPEAT_2_131(m, d) BOOST_PP_REPEAT_2_130(m, d) m(3, 130, d)\n# define BOOST_PP_REPEAT_2_132(m, d) BOOST_PP_REPEAT_2_131(m, d) m(3, 131, d)\n# define BOOST_PP_REPEAT_2_133(m, d) BOOST_PP_REPEAT_2_132(m, d) m(3, 132, d)\n# define BOOST_PP_REPEAT_2_134(m, d) BOOST_PP_REPEAT_2_133(m, d) m(3, 133, d)\n# define BOOST_PP_REPEAT_2_135(m, d) BOOST_PP_REPEAT_2_134(m, d) m(3, 134, d)\n# define BOOST_PP_REPEAT_2_136(m, d) BOOST_PP_REPEAT_2_135(m, d) m(3, 135, d)\n# define BOOST_PP_REPEAT_2_137(m, d) BOOST_PP_REPEAT_2_136(m, d) m(3, 136, d)\n# define BOOST_PP_REPEAT_2_138(m, d) BOOST_PP_REPEAT_2_137(m, d) m(3, 137, d)\n# define BOOST_PP_REPEAT_2_139(m, d) BOOST_PP_REPEAT_2_138(m, d) m(3, 138, d)\n# define BOOST_PP_REPEAT_2_140(m, d) BOOST_PP_REPEAT_2_139(m, d) m(3, 139, d)\n# define BOOST_PP_REPEAT_2_141(m, d) BOOST_PP_REPEAT_2_140(m, d) m(3, 140, d)\n# define BOOST_PP_REPEAT_2_142(m, d) BOOST_PP_REPEAT_2_141(m, d) m(3, 141, d)\n# define BOOST_PP_REPEAT_2_143(m, d) BOOST_PP_REPEAT_2_142(m, d) m(3, 142, d)\n# define BOOST_PP_REPEAT_2_144(m, d) BOOST_PP_REPEAT_2_143(m, d) m(3, 143, d)\n# define BOOST_PP_REPEAT_2_145(m, d) BOOST_PP_REPEAT_2_144(m, d) m(3, 144, d)\n# define BOOST_PP_REPEAT_2_146(m, d) BOOST_PP_REPEAT_2_145(m, d) m(3, 145, d)\n# define BOOST_PP_REPEAT_2_147(m, d) BOOST_PP_REPEAT_2_146(m, d) m(3, 146, d)\n# define BOOST_PP_REPEAT_2_148(m, d) BOOST_PP_REPEAT_2_147(m, d) m(3, 147, d)\n# define BOOST_PP_REPEAT_2_149(m, d) BOOST_PP_REPEAT_2_148(m, d) m(3, 148, d)\n# define BOOST_PP_REPEAT_2_150(m, d) BOOST_PP_REPEAT_2_149(m, d) m(3, 149, d)\n# define BOOST_PP_REPEAT_2_151(m, d) BOOST_PP_REPEAT_2_150(m, d) m(3, 150, d)\n# define BOOST_PP_REPEAT_2_152(m, d) BOOST_PP_REPEAT_2_151(m, d) m(3, 151, d)\n# define BOOST_PP_REPEAT_2_153(m, d) BOOST_PP_REPEAT_2_152(m, d) m(3, 152, d)\n# define BOOST_PP_REPEAT_2_154(m, d) BOOST_PP_REPEAT_2_153(m, d) m(3, 153, d)\n# define BOOST_PP_REPEAT_2_155(m, d) BOOST_PP_REPEAT_2_154(m, d) m(3, 154, d)\n# define BOOST_PP_REPEAT_2_156(m, d) BOOST_PP_REPEAT_2_155(m, d) m(3, 155, d)\n# define BOOST_PP_REPEAT_2_157(m, d) BOOST_PP_REPEAT_2_156(m, d) m(3, 156, d)\n# define BOOST_PP_REPEAT_2_158(m, d) BOOST_PP_REPEAT_2_157(m, d) m(3, 157, d)\n# define BOOST_PP_REPEAT_2_159(m, d) BOOST_PP_REPEAT_2_158(m, d) m(3, 158, d)\n# define BOOST_PP_REPEAT_2_160(m, d) BOOST_PP_REPEAT_2_159(m, d) m(3, 159, d)\n# define BOOST_PP_REPEAT_2_161(m, d) BOOST_PP_REPEAT_2_160(m, d) m(3, 160, d)\n# define BOOST_PP_REPEAT_2_162(m, d) BOOST_PP_REPEAT_2_161(m, d) m(3, 161, d)\n# define BOOST_PP_REPEAT_2_163(m, d) BOOST_PP_REPEAT_2_162(m, d) m(3, 162, d)\n# define BOOST_PP_REPEAT_2_164(m, d) BOOST_PP_REPEAT_2_163(m, d) m(3, 163, d)\n# define BOOST_PP_REPEAT_2_165(m, d) BOOST_PP_REPEAT_2_164(m, d) m(3, 164, d)\n# define BOOST_PP_REPEAT_2_166(m, d) BOOST_PP_REPEAT_2_165(m, d) m(3, 165, d)\n# define BOOST_PP_REPEAT_2_167(m, d) BOOST_PP_REPEAT_2_166(m, d) m(3, 166, d)\n# define BOOST_PP_REPEAT_2_168(m, d) BOOST_PP_REPEAT_2_167(m, d) m(3, 167, d)\n# define BOOST_PP_REPEAT_2_169(m, d) BOOST_PP_REPEAT_2_168(m, d) m(3, 168, d)\n# define BOOST_PP_REPEAT_2_170(m, d) BOOST_PP_REPEAT_2_169(m, d) m(3, 169, d)\n# define BOOST_PP_REPEAT_2_171(m, d) BOOST_PP_REPEAT_2_170(m, d) m(3, 170, d)\n# define BOOST_PP_REPEAT_2_172(m, d) BOOST_PP_REPEAT_2_171(m, d) m(3, 171, d)\n# define BOOST_PP_REPEAT_2_173(m, d) BOOST_PP_REPEAT_2_172(m, d) m(3, 172, d)\n# define BOOST_PP_REPEAT_2_174(m, d) BOOST_PP_REPEAT_2_173(m, d) m(3, 173, d)\n# define BOOST_PP_REPEAT_2_175(m, d) BOOST_PP_REPEAT_2_174(m, d) m(3, 174, d)\n# define BOOST_PP_REPEAT_2_176(m, d) BOOST_PP_REPEAT_2_175(m, d) m(3, 175, d)\n# define BOOST_PP_REPEAT_2_177(m, d) BOOST_PP_REPEAT_2_176(m, d) m(3, 176, d)\n# define BOOST_PP_REPEAT_2_178(m, d) BOOST_PP_REPEAT_2_177(m, d) m(3, 177, d)\n# define BOOST_PP_REPEAT_2_179(m, d) BOOST_PP_REPEAT_2_178(m, d) m(3, 178, d)\n# define BOOST_PP_REPEAT_2_180(m, d) BOOST_PP_REPEAT_2_179(m, d) m(3, 179, d)\n# define BOOST_PP_REPEAT_2_181(m, d) BOOST_PP_REPEAT_2_180(m, d) m(3, 180, d)\n# define BOOST_PP_REPEAT_2_182(m, d) BOOST_PP_REPEAT_2_181(m, d) m(3, 181, d)\n# define BOOST_PP_REPEAT_2_183(m, d) BOOST_PP_REPEAT_2_182(m, d) m(3, 182, d)\n# define BOOST_PP_REPEAT_2_184(m, d) BOOST_PP_REPEAT_2_183(m, d) m(3, 183, d)\n# define BOOST_PP_REPEAT_2_185(m, d) BOOST_PP_REPEAT_2_184(m, d) m(3, 184, d)\n# define BOOST_PP_REPEAT_2_186(m, d) BOOST_PP_REPEAT_2_185(m, d) m(3, 185, d)\n# define BOOST_PP_REPEAT_2_187(m, d) BOOST_PP_REPEAT_2_186(m, d) m(3, 186, d)\n# define BOOST_PP_REPEAT_2_188(m, d) BOOST_PP_REPEAT_2_187(m, d) m(3, 187, d)\n# define BOOST_PP_REPEAT_2_189(m, d) BOOST_PP_REPEAT_2_188(m, d) m(3, 188, d)\n# define BOOST_PP_REPEAT_2_190(m, d) BOOST_PP_REPEAT_2_189(m, d) m(3, 189, d)\n# define BOOST_PP_REPEAT_2_191(m, d) BOOST_PP_REPEAT_2_190(m, d) m(3, 190, d)\n# define BOOST_PP_REPEAT_2_192(m, d) BOOST_PP_REPEAT_2_191(m, d) m(3, 191, d)\n# define BOOST_PP_REPEAT_2_193(m, d) BOOST_PP_REPEAT_2_192(m, d) m(3, 192, d)\n# define BOOST_PP_REPEAT_2_194(m, d) BOOST_PP_REPEAT_2_193(m, d) m(3, 193, d)\n# define BOOST_PP_REPEAT_2_195(m, d) BOOST_PP_REPEAT_2_194(m, d) m(3, 194, d)\n# define BOOST_PP_REPEAT_2_196(m, d) BOOST_PP_REPEAT_2_195(m, d) m(3, 195, d)\n# define BOOST_PP_REPEAT_2_197(m, d) BOOST_PP_REPEAT_2_196(m, d) m(3, 196, d)\n# define BOOST_PP_REPEAT_2_198(m, d) BOOST_PP_REPEAT_2_197(m, d) m(3, 197, d)\n# define BOOST_PP_REPEAT_2_199(m, d) BOOST_PP_REPEAT_2_198(m, d) m(3, 198, d)\n# define BOOST_PP_REPEAT_2_200(m, d) BOOST_PP_REPEAT_2_199(m, d) m(3, 199, d)\n# define BOOST_PP_REPEAT_2_201(m, d) BOOST_PP_REPEAT_2_200(m, d) m(3, 200, d)\n# define BOOST_PP_REPEAT_2_202(m, d) BOOST_PP_REPEAT_2_201(m, d) m(3, 201, d)\n# define BOOST_PP_REPEAT_2_203(m, d) BOOST_PP_REPEAT_2_202(m, d) m(3, 202, d)\n# define BOOST_PP_REPEAT_2_204(m, d) BOOST_PP_REPEAT_2_203(m, d) m(3, 203, d)\n# define BOOST_PP_REPEAT_2_205(m, d) BOOST_PP_REPEAT_2_204(m, d) m(3, 204, d)\n# define BOOST_PP_REPEAT_2_206(m, d) BOOST_PP_REPEAT_2_205(m, d) m(3, 205, d)\n# define BOOST_PP_REPEAT_2_207(m, d) BOOST_PP_REPEAT_2_206(m, d) m(3, 206, d)\n# define BOOST_PP_REPEAT_2_208(m, d) BOOST_PP_REPEAT_2_207(m, d) m(3, 207, d)\n# define BOOST_PP_REPEAT_2_209(m, d) BOOST_PP_REPEAT_2_208(m, d) m(3, 208, d)\n# define BOOST_PP_REPEAT_2_210(m, d) BOOST_PP_REPEAT_2_209(m, d) m(3, 209, d)\n# define BOOST_PP_REPEAT_2_211(m, d) BOOST_PP_REPEAT_2_210(m, d) m(3, 210, d)\n# define BOOST_PP_REPEAT_2_212(m, d) BOOST_PP_REPEAT_2_211(m, d) m(3, 211, d)\n# define BOOST_PP_REPEAT_2_213(m, d) BOOST_PP_REPEAT_2_212(m, d) m(3, 212, d)\n# define BOOST_PP_REPEAT_2_214(m, d) BOOST_PP_REPEAT_2_213(m, d) m(3, 213, d)\n# define BOOST_PP_REPEAT_2_215(m, d) BOOST_PP_REPEAT_2_214(m, d) m(3, 214, d)\n# define BOOST_PP_REPEAT_2_216(m, d) BOOST_PP_REPEAT_2_215(m, d) m(3, 215, d)\n# define BOOST_PP_REPEAT_2_217(m, d) BOOST_PP_REPEAT_2_216(m, d) m(3, 216, d)\n# define BOOST_PP_REPEAT_2_218(m, d) BOOST_PP_REPEAT_2_217(m, d) m(3, 217, d)\n# define BOOST_PP_REPEAT_2_219(m, d) BOOST_PP_REPEAT_2_218(m, d) m(3, 218, d)\n# define BOOST_PP_REPEAT_2_220(m, d) BOOST_PP_REPEAT_2_219(m, d) m(3, 219, d)\n# define BOOST_PP_REPEAT_2_221(m, d) BOOST_PP_REPEAT_2_220(m, d) m(3, 220, d)\n# define BOOST_PP_REPEAT_2_222(m, d) BOOST_PP_REPEAT_2_221(m, d) m(3, 221, d)\n# define BOOST_PP_REPEAT_2_223(m, d) BOOST_PP_REPEAT_2_222(m, d) m(3, 222, d)\n# define BOOST_PP_REPEAT_2_224(m, d) BOOST_PP_REPEAT_2_223(m, d) m(3, 223, d)\n# define BOOST_PP_REPEAT_2_225(m, d) BOOST_PP_REPEAT_2_224(m, d) m(3, 224, d)\n# define BOOST_PP_REPEAT_2_226(m, d) BOOST_PP_REPEAT_2_225(m, d) m(3, 225, d)\n# define BOOST_PP_REPEAT_2_227(m, d) BOOST_PP_REPEAT_2_226(m, d) m(3, 226, d)\n# define BOOST_PP_REPEAT_2_228(m, d) BOOST_PP_REPEAT_2_227(m, d) m(3, 227, d)\n# define BOOST_PP_REPEAT_2_229(m, d) BOOST_PP_REPEAT_2_228(m, d) m(3, 228, d)\n# define BOOST_PP_REPEAT_2_230(m, d) BOOST_PP_REPEAT_2_229(m, d) m(3, 229, d)\n# define BOOST_PP_REPEAT_2_231(m, d) BOOST_PP_REPEAT_2_230(m, d) m(3, 230, d)\n# define BOOST_PP_REPEAT_2_232(m, d) BOOST_PP_REPEAT_2_231(m, d) m(3, 231, d)\n# define BOOST_PP_REPEAT_2_233(m, d) BOOST_PP_REPEAT_2_232(m, d) m(3, 232, d)\n# define BOOST_PP_REPEAT_2_234(m, d) BOOST_PP_REPEAT_2_233(m, d) m(3, 233, d)\n# define BOOST_PP_REPEAT_2_235(m, d) BOOST_PP_REPEAT_2_234(m, d) m(3, 234, d)\n# define BOOST_PP_REPEAT_2_236(m, d) BOOST_PP_REPEAT_2_235(m, d) m(3, 235, d)\n# define BOOST_PP_REPEAT_2_237(m, d) BOOST_PP_REPEAT_2_236(m, d) m(3, 236, d)\n# define BOOST_PP_REPEAT_2_238(m, d) BOOST_PP_REPEAT_2_237(m, d) m(3, 237, d)\n# define BOOST_PP_REPEAT_2_239(m, d) BOOST_PP_REPEAT_2_238(m, d) m(3, 238, d)\n# define BOOST_PP_REPEAT_2_240(m, d) BOOST_PP_REPEAT_2_239(m, d) m(3, 239, d)\n# define BOOST_PP_REPEAT_2_241(m, d) BOOST_PP_REPEAT_2_240(m, d) m(3, 240, d)\n# define BOOST_PP_REPEAT_2_242(m, d) BOOST_PP_REPEAT_2_241(m, d) m(3, 241, d)\n# define BOOST_PP_REPEAT_2_243(m, d) BOOST_PP_REPEAT_2_242(m, d) m(3, 242, d)\n# define BOOST_PP_REPEAT_2_244(m, d) BOOST_PP_REPEAT_2_243(m, d) m(3, 243, d)\n# define BOOST_PP_REPEAT_2_245(m, d) BOOST_PP_REPEAT_2_244(m, d) m(3, 244, d)\n# define BOOST_PP_REPEAT_2_246(m, d) BOOST_PP_REPEAT_2_245(m, d) m(3, 245, d)\n# define BOOST_PP_REPEAT_2_247(m, d) BOOST_PP_REPEAT_2_246(m, d) m(3, 246, d)\n# define BOOST_PP_REPEAT_2_248(m, d) BOOST_PP_REPEAT_2_247(m, d) m(3, 247, d)\n# define BOOST_PP_REPEAT_2_249(m, d) BOOST_PP_REPEAT_2_248(m, d) m(3, 248, d)\n# define BOOST_PP_REPEAT_2_250(m, d) BOOST_PP_REPEAT_2_249(m, d) m(3, 249, d)\n# define BOOST_PP_REPEAT_2_251(m, d) BOOST_PP_REPEAT_2_250(m, d) m(3, 250, d)\n# define BOOST_PP_REPEAT_2_252(m, d) BOOST_PP_REPEAT_2_251(m, d) m(3, 251, d)\n# define BOOST_PP_REPEAT_2_253(m, d) BOOST_PP_REPEAT_2_252(m, d) m(3, 252, d)\n# define BOOST_PP_REPEAT_2_254(m, d) BOOST_PP_REPEAT_2_253(m, d) m(3, 253, d)\n# define BOOST_PP_REPEAT_2_255(m, d) BOOST_PP_REPEAT_2_254(m, d) m(3, 254, d)\n# define BOOST_PP_REPEAT_2_256(m, d) BOOST_PP_REPEAT_2_255(m, d) m(3, 255, d)\n#\n# define BOOST_PP_REPEAT_3_0(m, d)\n# define BOOST_PP_REPEAT_3_1(m, d) m(4, 0, d)\n# define BOOST_PP_REPEAT_3_2(m, d) BOOST_PP_REPEAT_3_1(m, d) m(4, 1, d)\n# define BOOST_PP_REPEAT_3_3(m, d) BOOST_PP_REPEAT_3_2(m, d) m(4, 2, d)\n# define BOOST_PP_REPEAT_3_4(m, d) BOOST_PP_REPEAT_3_3(m, d) m(4, 3, d)\n# define BOOST_PP_REPEAT_3_5(m, d) BOOST_PP_REPEAT_3_4(m, d) m(4, 4, d)\n# define BOOST_PP_REPEAT_3_6(m, d) BOOST_PP_REPEAT_3_5(m, d) m(4, 5, d)\n# define BOOST_PP_REPEAT_3_7(m, d) BOOST_PP_REPEAT_3_6(m, d) m(4, 6, d)\n# define BOOST_PP_REPEAT_3_8(m, d) BOOST_PP_REPEAT_3_7(m, d) m(4, 7, d)\n# define BOOST_PP_REPEAT_3_9(m, d) BOOST_PP_REPEAT_3_8(m, d) m(4, 8, d)\n# define BOOST_PP_REPEAT_3_10(m, d) BOOST_PP_REPEAT_3_9(m, d) m(4, 9, d)\n# define BOOST_PP_REPEAT_3_11(m, d) BOOST_PP_REPEAT_3_10(m, d) m(4, 10, d)\n# define BOOST_PP_REPEAT_3_12(m, d) BOOST_PP_REPEAT_3_11(m, d) m(4, 11, d)\n# define BOOST_PP_REPEAT_3_13(m, d) BOOST_PP_REPEAT_3_12(m, d) m(4, 12, d)\n# define BOOST_PP_REPEAT_3_14(m, d) BOOST_PP_REPEAT_3_13(m, d) m(4, 13, d)\n# define BOOST_PP_REPEAT_3_15(m, d) BOOST_PP_REPEAT_3_14(m, d) m(4, 14, d)\n# define BOOST_PP_REPEAT_3_16(m, d) BOOST_PP_REPEAT_3_15(m, d) m(4, 15, d)\n# define BOOST_PP_REPEAT_3_17(m, d) BOOST_PP_REPEAT_3_16(m, d) m(4, 16, d)\n# define BOOST_PP_REPEAT_3_18(m, d) BOOST_PP_REPEAT_3_17(m, d) m(4, 17, d)\n# define BOOST_PP_REPEAT_3_19(m, d) BOOST_PP_REPEAT_3_18(m, d) m(4, 18, d)\n# define BOOST_PP_REPEAT_3_20(m, d) BOOST_PP_REPEAT_3_19(m, d) m(4, 19, d)\n# define BOOST_PP_REPEAT_3_21(m, d) BOOST_PP_REPEAT_3_20(m, d) m(4, 20, d)\n# define BOOST_PP_REPEAT_3_22(m, d) BOOST_PP_REPEAT_3_21(m, d) m(4, 21, d)\n# define BOOST_PP_REPEAT_3_23(m, d) BOOST_PP_REPEAT_3_22(m, d) m(4, 22, d)\n# define BOOST_PP_REPEAT_3_24(m, d) BOOST_PP_REPEAT_3_23(m, d) m(4, 23, d)\n# define BOOST_PP_REPEAT_3_25(m, d) BOOST_PP_REPEAT_3_24(m, d) m(4, 24, d)\n# define BOOST_PP_REPEAT_3_26(m, d) BOOST_PP_REPEAT_3_25(m, d) m(4, 25, d)\n# define BOOST_PP_REPEAT_3_27(m, d) BOOST_PP_REPEAT_3_26(m, d) m(4, 26, d)\n# define BOOST_PP_REPEAT_3_28(m, d) BOOST_PP_REPEAT_3_27(m, d) m(4, 27, d)\n# define BOOST_PP_REPEAT_3_29(m, d) BOOST_PP_REPEAT_3_28(m, d) m(4, 28, d)\n# define BOOST_PP_REPEAT_3_30(m, d) BOOST_PP_REPEAT_3_29(m, d) m(4, 29, d)\n# define BOOST_PP_REPEAT_3_31(m, d) BOOST_PP_REPEAT_3_30(m, d) m(4, 30, d)\n# define BOOST_PP_REPEAT_3_32(m, d) BOOST_PP_REPEAT_3_31(m, d) m(4, 31, d)\n# define BOOST_PP_REPEAT_3_33(m, d) BOOST_PP_REPEAT_3_32(m, d) m(4, 32, d)\n# define BOOST_PP_REPEAT_3_34(m, d) BOOST_PP_REPEAT_3_33(m, d) m(4, 33, d)\n# define BOOST_PP_REPEAT_3_35(m, d) BOOST_PP_REPEAT_3_34(m, d) m(4, 34, d)\n# define BOOST_PP_REPEAT_3_36(m, d) BOOST_PP_REPEAT_3_35(m, d) m(4, 35, d)\n# define BOOST_PP_REPEAT_3_37(m, d) BOOST_PP_REPEAT_3_36(m, d) m(4, 36, d)\n# define BOOST_PP_REPEAT_3_38(m, d) BOOST_PP_REPEAT_3_37(m, d) m(4, 37, d)\n# define BOOST_PP_REPEAT_3_39(m, d) BOOST_PP_REPEAT_3_38(m, d) m(4, 38, d)\n# define BOOST_PP_REPEAT_3_40(m, d) BOOST_PP_REPEAT_3_39(m, d) m(4, 39, d)\n# define BOOST_PP_REPEAT_3_41(m, d) BOOST_PP_REPEAT_3_40(m, d) m(4, 40, d)\n# define BOOST_PP_REPEAT_3_42(m, d) BOOST_PP_REPEAT_3_41(m, d) m(4, 41, d)\n# define BOOST_PP_REPEAT_3_43(m, d) BOOST_PP_REPEAT_3_42(m, d) m(4, 42, d)\n# define BOOST_PP_REPEAT_3_44(m, d) BOOST_PP_REPEAT_3_43(m, d) m(4, 43, d)\n# define BOOST_PP_REPEAT_3_45(m, d) BOOST_PP_REPEAT_3_44(m, d) m(4, 44, d)\n# define BOOST_PP_REPEAT_3_46(m, d) BOOST_PP_REPEAT_3_45(m, d) m(4, 45, d)\n# define BOOST_PP_REPEAT_3_47(m, d) BOOST_PP_REPEAT_3_46(m, d) m(4, 46, d)\n# define BOOST_PP_REPEAT_3_48(m, d) BOOST_PP_REPEAT_3_47(m, d) m(4, 47, d)\n# define BOOST_PP_REPEAT_3_49(m, d) BOOST_PP_REPEAT_3_48(m, d) m(4, 48, d)\n# define BOOST_PP_REPEAT_3_50(m, d) BOOST_PP_REPEAT_3_49(m, d) m(4, 49, d)\n# define BOOST_PP_REPEAT_3_51(m, d) BOOST_PP_REPEAT_3_50(m, d) m(4, 50, d)\n# define BOOST_PP_REPEAT_3_52(m, d) BOOST_PP_REPEAT_3_51(m, d) m(4, 51, d)\n# define BOOST_PP_REPEAT_3_53(m, d) BOOST_PP_REPEAT_3_52(m, d) m(4, 52, d)\n# define BOOST_PP_REPEAT_3_54(m, d) BOOST_PP_REPEAT_3_53(m, d) m(4, 53, d)\n# define BOOST_PP_REPEAT_3_55(m, d) BOOST_PP_REPEAT_3_54(m, d) m(4, 54, d)\n# define BOOST_PP_REPEAT_3_56(m, d) BOOST_PP_REPEAT_3_55(m, d) m(4, 55, d)\n# define BOOST_PP_REPEAT_3_57(m, d) BOOST_PP_REPEAT_3_56(m, d) m(4, 56, d)\n# define BOOST_PP_REPEAT_3_58(m, d) BOOST_PP_REPEAT_3_57(m, d) m(4, 57, d)\n# define BOOST_PP_REPEAT_3_59(m, d) BOOST_PP_REPEAT_3_58(m, d) m(4, 58, d)\n# define BOOST_PP_REPEAT_3_60(m, d) BOOST_PP_REPEAT_3_59(m, d) m(4, 59, d)\n# define BOOST_PP_REPEAT_3_61(m, d) BOOST_PP_REPEAT_3_60(m, d) m(4, 60, d)\n# define BOOST_PP_REPEAT_3_62(m, d) BOOST_PP_REPEAT_3_61(m, d) m(4, 61, d)\n# define BOOST_PP_REPEAT_3_63(m, d) BOOST_PP_REPEAT_3_62(m, d) m(4, 62, d)\n# define BOOST_PP_REPEAT_3_64(m, d) BOOST_PP_REPEAT_3_63(m, d) m(4, 63, d)\n# define BOOST_PP_REPEAT_3_65(m, d) BOOST_PP_REPEAT_3_64(m, d) m(4, 64, d)\n# define BOOST_PP_REPEAT_3_66(m, d) BOOST_PP_REPEAT_3_65(m, d) m(4, 65, d)\n# define BOOST_PP_REPEAT_3_67(m, d) BOOST_PP_REPEAT_3_66(m, d) m(4, 66, d)\n# define BOOST_PP_REPEAT_3_68(m, d) BOOST_PP_REPEAT_3_67(m, d) m(4, 67, d)\n# define BOOST_PP_REPEAT_3_69(m, d) BOOST_PP_REPEAT_3_68(m, d) m(4, 68, d)\n# define BOOST_PP_REPEAT_3_70(m, d) BOOST_PP_REPEAT_3_69(m, d) m(4, 69, d)\n# define BOOST_PP_REPEAT_3_71(m, d) BOOST_PP_REPEAT_3_70(m, d) m(4, 70, d)\n# define BOOST_PP_REPEAT_3_72(m, d) BOOST_PP_REPEAT_3_71(m, d) m(4, 71, d)\n# define BOOST_PP_REPEAT_3_73(m, d) BOOST_PP_REPEAT_3_72(m, d) m(4, 72, d)\n# define BOOST_PP_REPEAT_3_74(m, d) BOOST_PP_REPEAT_3_73(m, d) m(4, 73, d)\n# define BOOST_PP_REPEAT_3_75(m, d) BOOST_PP_REPEAT_3_74(m, d) m(4, 74, d)\n# define BOOST_PP_REPEAT_3_76(m, d) BOOST_PP_REPEAT_3_75(m, d) m(4, 75, d)\n# define BOOST_PP_REPEAT_3_77(m, d) BOOST_PP_REPEAT_3_76(m, d) m(4, 76, d)\n# define BOOST_PP_REPEAT_3_78(m, d) BOOST_PP_REPEAT_3_77(m, d) m(4, 77, d)\n# define BOOST_PP_REPEAT_3_79(m, d) BOOST_PP_REPEAT_3_78(m, d) m(4, 78, d)\n# define BOOST_PP_REPEAT_3_80(m, d) BOOST_PP_REPEAT_3_79(m, d) m(4, 79, d)\n# define BOOST_PP_REPEAT_3_81(m, d) BOOST_PP_REPEAT_3_80(m, d) m(4, 80, d)\n# define BOOST_PP_REPEAT_3_82(m, d) BOOST_PP_REPEAT_3_81(m, d) m(4, 81, d)\n# define BOOST_PP_REPEAT_3_83(m, d) BOOST_PP_REPEAT_3_82(m, d) m(4, 82, d)\n# define BOOST_PP_REPEAT_3_84(m, d) BOOST_PP_REPEAT_3_83(m, d) m(4, 83, d)\n# define BOOST_PP_REPEAT_3_85(m, d) BOOST_PP_REPEAT_3_84(m, d) m(4, 84, d)\n# define BOOST_PP_REPEAT_3_86(m, d) BOOST_PP_REPEAT_3_85(m, d) m(4, 85, d)\n# define BOOST_PP_REPEAT_3_87(m, d) BOOST_PP_REPEAT_3_86(m, d) m(4, 86, d)\n# define BOOST_PP_REPEAT_3_88(m, d) BOOST_PP_REPEAT_3_87(m, d) m(4, 87, d)\n# define BOOST_PP_REPEAT_3_89(m, d) BOOST_PP_REPEAT_3_88(m, d) m(4, 88, d)\n# define BOOST_PP_REPEAT_3_90(m, d) BOOST_PP_REPEAT_3_89(m, d) m(4, 89, d)\n# define BOOST_PP_REPEAT_3_91(m, d) BOOST_PP_REPEAT_3_90(m, d) m(4, 90, d)\n# define BOOST_PP_REPEAT_3_92(m, d) BOOST_PP_REPEAT_3_91(m, d) m(4, 91, d)\n# define BOOST_PP_REPEAT_3_93(m, d) BOOST_PP_REPEAT_3_92(m, d) m(4, 92, d)\n# define BOOST_PP_REPEAT_3_94(m, d) BOOST_PP_REPEAT_3_93(m, d) m(4, 93, d)\n# define BOOST_PP_REPEAT_3_95(m, d) BOOST_PP_REPEAT_3_94(m, d) m(4, 94, d)\n# define BOOST_PP_REPEAT_3_96(m, d) BOOST_PP_REPEAT_3_95(m, d) m(4, 95, d)\n# define BOOST_PP_REPEAT_3_97(m, d) BOOST_PP_REPEAT_3_96(m, d) m(4, 96, d)\n# define BOOST_PP_REPEAT_3_98(m, d) BOOST_PP_REPEAT_3_97(m, d) m(4, 97, d)\n# define BOOST_PP_REPEAT_3_99(m, d) BOOST_PP_REPEAT_3_98(m, d) m(4, 98, d)\n# define BOOST_PP_REPEAT_3_100(m, d) BOOST_PP_REPEAT_3_99(m, d) m(4, 99, d)\n# define BOOST_PP_REPEAT_3_101(m, d) BOOST_PP_REPEAT_3_100(m, d) m(4, 100, d)\n# define BOOST_PP_REPEAT_3_102(m, d) BOOST_PP_REPEAT_3_101(m, d) m(4, 101, d)\n# define BOOST_PP_REPEAT_3_103(m, d) BOOST_PP_REPEAT_3_102(m, d) m(4, 102, d)\n# define BOOST_PP_REPEAT_3_104(m, d) BOOST_PP_REPEAT_3_103(m, d) m(4, 103, d)\n# define BOOST_PP_REPEAT_3_105(m, d) BOOST_PP_REPEAT_3_104(m, d) m(4, 104, d)\n# define BOOST_PP_REPEAT_3_106(m, d) BOOST_PP_REPEAT_3_105(m, d) m(4, 105, d)\n# define BOOST_PP_REPEAT_3_107(m, d) BOOST_PP_REPEAT_3_106(m, d) m(4, 106, d)\n# define BOOST_PP_REPEAT_3_108(m, d) BOOST_PP_REPEAT_3_107(m, d) m(4, 107, d)\n# define BOOST_PP_REPEAT_3_109(m, d) BOOST_PP_REPEAT_3_108(m, d) m(4, 108, d)\n# define BOOST_PP_REPEAT_3_110(m, d) BOOST_PP_REPEAT_3_109(m, d) m(4, 109, d)\n# define BOOST_PP_REPEAT_3_111(m, d) BOOST_PP_REPEAT_3_110(m, d) m(4, 110, d)\n# define BOOST_PP_REPEAT_3_112(m, d) BOOST_PP_REPEAT_3_111(m, d) m(4, 111, d)\n# define BOOST_PP_REPEAT_3_113(m, d) BOOST_PP_REPEAT_3_112(m, d) m(4, 112, d)\n# define BOOST_PP_REPEAT_3_114(m, d) BOOST_PP_REPEAT_3_113(m, d) m(4, 113, d)\n# define BOOST_PP_REPEAT_3_115(m, d) BOOST_PP_REPEAT_3_114(m, d) m(4, 114, d)\n# define BOOST_PP_REPEAT_3_116(m, d) BOOST_PP_REPEAT_3_115(m, d) m(4, 115, d)\n# define BOOST_PP_REPEAT_3_117(m, d) BOOST_PP_REPEAT_3_116(m, d) m(4, 116, d)\n# define BOOST_PP_REPEAT_3_118(m, d) BOOST_PP_REPEAT_3_117(m, d) m(4, 117, d)\n# define BOOST_PP_REPEAT_3_119(m, d) BOOST_PP_REPEAT_3_118(m, d) m(4, 118, d)\n# define BOOST_PP_REPEAT_3_120(m, d) BOOST_PP_REPEAT_3_119(m, d) m(4, 119, d)\n# define BOOST_PP_REPEAT_3_121(m, d) BOOST_PP_REPEAT_3_120(m, d) m(4, 120, d)\n# define BOOST_PP_REPEAT_3_122(m, d) BOOST_PP_REPEAT_3_121(m, d) m(4, 121, d)\n# define BOOST_PP_REPEAT_3_123(m, d) BOOST_PP_REPEAT_3_122(m, d) m(4, 122, d)\n# define BOOST_PP_REPEAT_3_124(m, d) BOOST_PP_REPEAT_3_123(m, d) m(4, 123, d)\n# define BOOST_PP_REPEAT_3_125(m, d) BOOST_PP_REPEAT_3_124(m, d) m(4, 124, d)\n# define BOOST_PP_REPEAT_3_126(m, d) BOOST_PP_REPEAT_3_125(m, d) m(4, 125, d)\n# define BOOST_PP_REPEAT_3_127(m, d) BOOST_PP_REPEAT_3_126(m, d) m(4, 126, d)\n# define BOOST_PP_REPEAT_3_128(m, d) BOOST_PP_REPEAT_3_127(m, d) m(4, 127, d)\n# define BOOST_PP_REPEAT_3_129(m, d) BOOST_PP_REPEAT_3_128(m, d) m(4, 128, d)\n# define BOOST_PP_REPEAT_3_130(m, d) BOOST_PP_REPEAT_3_129(m, d) m(4, 129, d)\n# define BOOST_PP_REPEAT_3_131(m, d) BOOST_PP_REPEAT_3_130(m, d) m(4, 130, d)\n# define BOOST_PP_REPEAT_3_132(m, d) BOOST_PP_REPEAT_3_131(m, d) m(4, 131, d)\n# define BOOST_PP_REPEAT_3_133(m, d) BOOST_PP_REPEAT_3_132(m, d) m(4, 132, d)\n# define BOOST_PP_REPEAT_3_134(m, d) BOOST_PP_REPEAT_3_133(m, d) m(4, 133, d)\n# define BOOST_PP_REPEAT_3_135(m, d) BOOST_PP_REPEAT_3_134(m, d) m(4, 134, d)\n# define BOOST_PP_REPEAT_3_136(m, d) BOOST_PP_REPEAT_3_135(m, d) m(4, 135, d)\n# define BOOST_PP_REPEAT_3_137(m, d) BOOST_PP_REPEAT_3_136(m, d) m(4, 136, d)\n# define BOOST_PP_REPEAT_3_138(m, d) BOOST_PP_REPEAT_3_137(m, d) m(4, 137, d)\n# define BOOST_PP_REPEAT_3_139(m, d) BOOST_PP_REPEAT_3_138(m, d) m(4, 138, d)\n# define BOOST_PP_REPEAT_3_140(m, d) BOOST_PP_REPEAT_3_139(m, d) m(4, 139, d)\n# define BOOST_PP_REPEAT_3_141(m, d) BOOST_PP_REPEAT_3_140(m, d) m(4, 140, d)\n# define BOOST_PP_REPEAT_3_142(m, d) BOOST_PP_REPEAT_3_141(m, d) m(4, 141, d)\n# define BOOST_PP_REPEAT_3_143(m, d) BOOST_PP_REPEAT_3_142(m, d) m(4, 142, d)\n# define BOOST_PP_REPEAT_3_144(m, d) BOOST_PP_REPEAT_3_143(m, d) m(4, 143, d)\n# define BOOST_PP_REPEAT_3_145(m, d) BOOST_PP_REPEAT_3_144(m, d) m(4, 144, d)\n# define BOOST_PP_REPEAT_3_146(m, d) BOOST_PP_REPEAT_3_145(m, d) m(4, 145, d)\n# define BOOST_PP_REPEAT_3_147(m, d) BOOST_PP_REPEAT_3_146(m, d) m(4, 146, d)\n# define BOOST_PP_REPEAT_3_148(m, d) BOOST_PP_REPEAT_3_147(m, d) m(4, 147, d)\n# define BOOST_PP_REPEAT_3_149(m, d) BOOST_PP_REPEAT_3_148(m, d) m(4, 148, d)\n# define BOOST_PP_REPEAT_3_150(m, d) BOOST_PP_REPEAT_3_149(m, d) m(4, 149, d)\n# define BOOST_PP_REPEAT_3_151(m, d) BOOST_PP_REPEAT_3_150(m, d) m(4, 150, d)\n# define BOOST_PP_REPEAT_3_152(m, d) BOOST_PP_REPEAT_3_151(m, d) m(4, 151, d)\n# define BOOST_PP_REPEAT_3_153(m, d) BOOST_PP_REPEAT_3_152(m, d) m(4, 152, d)\n# define BOOST_PP_REPEAT_3_154(m, d) BOOST_PP_REPEAT_3_153(m, d) m(4, 153, d)\n# define BOOST_PP_REPEAT_3_155(m, d) BOOST_PP_REPEAT_3_154(m, d) m(4, 154, d)\n# define BOOST_PP_REPEAT_3_156(m, d) BOOST_PP_REPEAT_3_155(m, d) m(4, 155, d)\n# define BOOST_PP_REPEAT_3_157(m, d) BOOST_PP_REPEAT_3_156(m, d) m(4, 156, d)\n# define BOOST_PP_REPEAT_3_158(m, d) BOOST_PP_REPEAT_3_157(m, d) m(4, 157, d)\n# define BOOST_PP_REPEAT_3_159(m, d) BOOST_PP_REPEAT_3_158(m, d) m(4, 158, d)\n# define BOOST_PP_REPEAT_3_160(m, d) BOOST_PP_REPEAT_3_159(m, d) m(4, 159, d)\n# define BOOST_PP_REPEAT_3_161(m, d) BOOST_PP_REPEAT_3_160(m, d) m(4, 160, d)\n# define BOOST_PP_REPEAT_3_162(m, d) BOOST_PP_REPEAT_3_161(m, d) m(4, 161, d)\n# define BOOST_PP_REPEAT_3_163(m, d) BOOST_PP_REPEAT_3_162(m, d) m(4, 162, d)\n# define BOOST_PP_REPEAT_3_164(m, d) BOOST_PP_REPEAT_3_163(m, d) m(4, 163, d)\n# define BOOST_PP_REPEAT_3_165(m, d) BOOST_PP_REPEAT_3_164(m, d) m(4, 164, d)\n# define BOOST_PP_REPEAT_3_166(m, d) BOOST_PP_REPEAT_3_165(m, d) m(4, 165, d)\n# define BOOST_PP_REPEAT_3_167(m, d) BOOST_PP_REPEAT_3_166(m, d) m(4, 166, d)\n# define BOOST_PP_REPEAT_3_168(m, d) BOOST_PP_REPEAT_3_167(m, d) m(4, 167, d)\n# define BOOST_PP_REPEAT_3_169(m, d) BOOST_PP_REPEAT_3_168(m, d) m(4, 168, d)\n# define BOOST_PP_REPEAT_3_170(m, d) BOOST_PP_REPEAT_3_169(m, d) m(4, 169, d)\n# define BOOST_PP_REPEAT_3_171(m, d) BOOST_PP_REPEAT_3_170(m, d) m(4, 170, d)\n# define BOOST_PP_REPEAT_3_172(m, d) BOOST_PP_REPEAT_3_171(m, d) m(4, 171, d)\n# define BOOST_PP_REPEAT_3_173(m, d) BOOST_PP_REPEAT_3_172(m, d) m(4, 172, d)\n# define BOOST_PP_REPEAT_3_174(m, d) BOOST_PP_REPEAT_3_173(m, d) m(4, 173, d)\n# define BOOST_PP_REPEAT_3_175(m, d) BOOST_PP_REPEAT_3_174(m, d) m(4, 174, d)\n# define BOOST_PP_REPEAT_3_176(m, d) BOOST_PP_REPEAT_3_175(m, d) m(4, 175, d)\n# define BOOST_PP_REPEAT_3_177(m, d) BOOST_PP_REPEAT_3_176(m, d) m(4, 176, d)\n# define BOOST_PP_REPEAT_3_178(m, d) BOOST_PP_REPEAT_3_177(m, d) m(4, 177, d)\n# define BOOST_PP_REPEAT_3_179(m, d) BOOST_PP_REPEAT_3_178(m, d) m(4, 178, d)\n# define BOOST_PP_REPEAT_3_180(m, d) BOOST_PP_REPEAT_3_179(m, d) m(4, 179, d)\n# define BOOST_PP_REPEAT_3_181(m, d) BOOST_PP_REPEAT_3_180(m, d) m(4, 180, d)\n# define BOOST_PP_REPEAT_3_182(m, d) BOOST_PP_REPEAT_3_181(m, d) m(4, 181, d)\n# define BOOST_PP_REPEAT_3_183(m, d) BOOST_PP_REPEAT_3_182(m, d) m(4, 182, d)\n# define BOOST_PP_REPEAT_3_184(m, d) BOOST_PP_REPEAT_3_183(m, d) m(4, 183, d)\n# define BOOST_PP_REPEAT_3_185(m, d) BOOST_PP_REPEAT_3_184(m, d) m(4, 184, d)\n# define BOOST_PP_REPEAT_3_186(m, d) BOOST_PP_REPEAT_3_185(m, d) m(4, 185, d)\n# define BOOST_PP_REPEAT_3_187(m, d) BOOST_PP_REPEAT_3_186(m, d) m(4, 186, d)\n# define BOOST_PP_REPEAT_3_188(m, d) BOOST_PP_REPEAT_3_187(m, d) m(4, 187, d)\n# define BOOST_PP_REPEAT_3_189(m, d) BOOST_PP_REPEAT_3_188(m, d) m(4, 188, d)\n# define BOOST_PP_REPEAT_3_190(m, d) BOOST_PP_REPEAT_3_189(m, d) m(4, 189, d)\n# define BOOST_PP_REPEAT_3_191(m, d) BOOST_PP_REPEAT_3_190(m, d) m(4, 190, d)\n# define BOOST_PP_REPEAT_3_192(m, d) BOOST_PP_REPEAT_3_191(m, d) m(4, 191, d)\n# define BOOST_PP_REPEAT_3_193(m, d) BOOST_PP_REPEAT_3_192(m, d) m(4, 192, d)\n# define BOOST_PP_REPEAT_3_194(m, d) BOOST_PP_REPEAT_3_193(m, d) m(4, 193, d)\n# define BOOST_PP_REPEAT_3_195(m, d) BOOST_PP_REPEAT_3_194(m, d) m(4, 194, d)\n# define BOOST_PP_REPEAT_3_196(m, d) BOOST_PP_REPEAT_3_195(m, d) m(4, 195, d)\n# define BOOST_PP_REPEAT_3_197(m, d) BOOST_PP_REPEAT_3_196(m, d) m(4, 196, d)\n# define BOOST_PP_REPEAT_3_198(m, d) BOOST_PP_REPEAT_3_197(m, d) m(4, 197, d)\n# define BOOST_PP_REPEAT_3_199(m, d) BOOST_PP_REPEAT_3_198(m, d) m(4, 198, d)\n# define BOOST_PP_REPEAT_3_200(m, d) BOOST_PP_REPEAT_3_199(m, d) m(4, 199, d)\n# define BOOST_PP_REPEAT_3_201(m, d) BOOST_PP_REPEAT_3_200(m, d) m(4, 200, d)\n# define BOOST_PP_REPEAT_3_202(m, d) BOOST_PP_REPEAT_3_201(m, d) m(4, 201, d)\n# define BOOST_PP_REPEAT_3_203(m, d) BOOST_PP_REPEAT_3_202(m, d) m(4, 202, d)\n# define BOOST_PP_REPEAT_3_204(m, d) BOOST_PP_REPEAT_3_203(m, d) m(4, 203, d)\n# define BOOST_PP_REPEAT_3_205(m, d) BOOST_PP_REPEAT_3_204(m, d) m(4, 204, d)\n# define BOOST_PP_REPEAT_3_206(m, d) BOOST_PP_REPEAT_3_205(m, d) m(4, 205, d)\n# define BOOST_PP_REPEAT_3_207(m, d) BOOST_PP_REPEAT_3_206(m, d) m(4, 206, d)\n# define BOOST_PP_REPEAT_3_208(m, d) BOOST_PP_REPEAT_3_207(m, d) m(4, 207, d)\n# define BOOST_PP_REPEAT_3_209(m, d) BOOST_PP_REPEAT_3_208(m, d) m(4, 208, d)\n# define BOOST_PP_REPEAT_3_210(m, d) BOOST_PP_REPEAT_3_209(m, d) m(4, 209, d)\n# define BOOST_PP_REPEAT_3_211(m, d) BOOST_PP_REPEAT_3_210(m, d) m(4, 210, d)\n# define BOOST_PP_REPEAT_3_212(m, d) BOOST_PP_REPEAT_3_211(m, d) m(4, 211, d)\n# define BOOST_PP_REPEAT_3_213(m, d) BOOST_PP_REPEAT_3_212(m, d) m(4, 212, d)\n# define BOOST_PP_REPEAT_3_214(m, d) BOOST_PP_REPEAT_3_213(m, d) m(4, 213, d)\n# define BOOST_PP_REPEAT_3_215(m, d) BOOST_PP_REPEAT_3_214(m, d) m(4, 214, d)\n# define BOOST_PP_REPEAT_3_216(m, d) BOOST_PP_REPEAT_3_215(m, d) m(4, 215, d)\n# define BOOST_PP_REPEAT_3_217(m, d) BOOST_PP_REPEAT_3_216(m, d) m(4, 216, d)\n# define BOOST_PP_REPEAT_3_218(m, d) BOOST_PP_REPEAT_3_217(m, d) m(4, 217, d)\n# define BOOST_PP_REPEAT_3_219(m, d) BOOST_PP_REPEAT_3_218(m, d) m(4, 218, d)\n# define BOOST_PP_REPEAT_3_220(m, d) BOOST_PP_REPEAT_3_219(m, d) m(4, 219, d)\n# define BOOST_PP_REPEAT_3_221(m, d) BOOST_PP_REPEAT_3_220(m, d) m(4, 220, d)\n# define BOOST_PP_REPEAT_3_222(m, d) BOOST_PP_REPEAT_3_221(m, d) m(4, 221, d)\n# define BOOST_PP_REPEAT_3_223(m, d) BOOST_PP_REPEAT_3_222(m, d) m(4, 222, d)\n# define BOOST_PP_REPEAT_3_224(m, d) BOOST_PP_REPEAT_3_223(m, d) m(4, 223, d)\n# define BOOST_PP_REPEAT_3_225(m, d) BOOST_PP_REPEAT_3_224(m, d) m(4, 224, d)\n# define BOOST_PP_REPEAT_3_226(m, d) BOOST_PP_REPEAT_3_225(m, d) m(4, 225, d)\n# define BOOST_PP_REPEAT_3_227(m, d) BOOST_PP_REPEAT_3_226(m, d) m(4, 226, d)\n# define BOOST_PP_REPEAT_3_228(m, d) BOOST_PP_REPEAT_3_227(m, d) m(4, 227, d)\n# define BOOST_PP_REPEAT_3_229(m, d) BOOST_PP_REPEAT_3_228(m, d) m(4, 228, d)\n# define BOOST_PP_REPEAT_3_230(m, d) BOOST_PP_REPEAT_3_229(m, d) m(4, 229, d)\n# define BOOST_PP_REPEAT_3_231(m, d) BOOST_PP_REPEAT_3_230(m, d) m(4, 230, d)\n# define BOOST_PP_REPEAT_3_232(m, d) BOOST_PP_REPEAT_3_231(m, d) m(4, 231, d)\n# define BOOST_PP_REPEAT_3_233(m, d) BOOST_PP_REPEAT_3_232(m, d) m(4, 232, d)\n# define BOOST_PP_REPEAT_3_234(m, d) BOOST_PP_REPEAT_3_233(m, d) m(4, 233, d)\n# define BOOST_PP_REPEAT_3_235(m, d) BOOST_PP_REPEAT_3_234(m, d) m(4, 234, d)\n# define BOOST_PP_REPEAT_3_236(m, d) BOOST_PP_REPEAT_3_235(m, d) m(4, 235, d)\n# define BOOST_PP_REPEAT_3_237(m, d) BOOST_PP_REPEAT_3_236(m, d) m(4, 236, d)\n# define BOOST_PP_REPEAT_3_238(m, d) BOOST_PP_REPEAT_3_237(m, d) m(4, 237, d)\n# define BOOST_PP_REPEAT_3_239(m, d) BOOST_PP_REPEAT_3_238(m, d) m(4, 238, d)\n# define BOOST_PP_REPEAT_3_240(m, d) BOOST_PP_REPEAT_3_239(m, d) m(4, 239, d)\n# define BOOST_PP_REPEAT_3_241(m, d) BOOST_PP_REPEAT_3_240(m, d) m(4, 240, d)\n# define BOOST_PP_REPEAT_3_242(m, d) BOOST_PP_REPEAT_3_241(m, d) m(4, 241, d)\n# define BOOST_PP_REPEAT_3_243(m, d) BOOST_PP_REPEAT_3_242(m, d) m(4, 242, d)\n# define BOOST_PP_REPEAT_3_244(m, d) BOOST_PP_REPEAT_3_243(m, d) m(4, 243, d)\n# define BOOST_PP_REPEAT_3_245(m, d) BOOST_PP_REPEAT_3_244(m, d) m(4, 244, d)\n# define BOOST_PP_REPEAT_3_246(m, d) BOOST_PP_REPEAT_3_245(m, d) m(4, 245, d)\n# define BOOST_PP_REPEAT_3_247(m, d) BOOST_PP_REPEAT_3_246(m, d) m(4, 246, d)\n# define BOOST_PP_REPEAT_3_248(m, d) BOOST_PP_REPEAT_3_247(m, d) m(4, 247, d)\n# define BOOST_PP_REPEAT_3_249(m, d) BOOST_PP_REPEAT_3_248(m, d) m(4, 248, d)\n# define BOOST_PP_REPEAT_3_250(m, d) BOOST_PP_REPEAT_3_249(m, d) m(4, 249, d)\n# define BOOST_PP_REPEAT_3_251(m, d) BOOST_PP_REPEAT_3_250(m, d) m(4, 250, d)\n# define BOOST_PP_REPEAT_3_252(m, d) BOOST_PP_REPEAT_3_251(m, d) m(4, 251, d)\n# define BOOST_PP_REPEAT_3_253(m, d) BOOST_PP_REPEAT_3_252(m, d) m(4, 252, d)\n# define BOOST_PP_REPEAT_3_254(m, d) BOOST_PP_REPEAT_3_253(m, d) m(4, 253, d)\n# define BOOST_PP_REPEAT_3_255(m, d) BOOST_PP_REPEAT_3_254(m, d) m(4, 254, d)\n# define BOOST_PP_REPEAT_3_256(m, d) BOOST_PP_REPEAT_3_255(m, d) m(4, 255, d)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/repetition/repeat_from_to.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP\n# define BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP\n#\n# include <boost/preprocessor/arithmetic/add.hpp>\n# include <boost/preprocessor/arithmetic/sub.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/while.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/repetition/repeat.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_REPEAT_FROM_TO */\n#\n# if 0\n#    define BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# define BOOST_PP_REPEAT_FROM_TO_1(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_2(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_3(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_4(f, l, m, dt) BOOST_PP_ERROR(0x0003)\n#\n# define BOOST_PP_REPEAT_FROM_TO_1ST BOOST_PP_REPEAT_FROM_TO_1\n# define BOOST_PP_REPEAT_FROM_TO_2ND BOOST_PP_REPEAT_FROM_TO_2\n# define BOOST_PP_REPEAT_FROM_TO_3RD BOOST_PP_REPEAT_FROM_TO_3\n#\n# /* BOOST_PP_REPEAT_FROM_TO_D */\n#\n# if 0\n#    define BOOST_PP_REPEAT_FROM_TO_D(d, first, last, macro, data)\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO_D BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_D_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))\n# else\n#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt)\n#    define BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))\n#    define BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)\n#    define BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, im)\n#    define BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, im)\n#    define BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, im)\n# else\n#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))\n# endif\n#\n# define BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_1_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_2_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_3_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)\n#\n# define BOOST_PP_REPEAT_FROM_TO_M_1_II(z, n, m, dt) m(z, n, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_2_II(z, n, m, dt) m(z, n, dt)\n# define BOOST_PP_REPEAT_FROM_TO_M_3_II(z, n, m, dt) m(z, n, dt)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/cat.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_CAT_HPP\n# define BOOST_PREPROCESSOR_SEQ_CAT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/tuple/eat.hpp>\n#\n# /* BOOST_PP_SEQ_CAT */\n#\n# define BOOST_PP_SEQ_CAT(seq) \\\n    BOOST_PP_IF( \\\n        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \\\n        BOOST_PP_SEQ_CAT_I, \\\n        BOOST_PP_SEQ_HEAD \\\n    )(seq) \\\n    /**/\n# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))\n#\n# define BOOST_PP_SEQ_CAT_O(s, st, elem) BOOST_PP_SEQ_CAT_O_I(st, elem)\n# define BOOST_PP_SEQ_CAT_O_I(a, b) a ## b\n#\n# /* BOOST_PP_SEQ_CAT_S */\n#\n# define BOOST_PP_SEQ_CAT_S(s, seq) \\\n    BOOST_PP_IF( \\\n        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \\\n        BOOST_PP_SEQ_CAT_S_I_A, \\\n        BOOST_PP_SEQ_CAT_S_I_B \\\n    )(s, seq) \\\n    /**/\n# define BOOST_PP_SEQ_CAT_S_I_A(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))\n# define BOOST_PP_SEQ_CAT_S_I_B(s, seq) BOOST_PP_SEQ_HEAD(seq)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_ELEM_HPP\n# define BOOST_PREPROCESSOR_SEQ_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/empty.hpp>\n#\n# /* BOOST_PP_SEQ_ELEM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I(i, seq)\n# else\n#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I((i, seq))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II((BOOST_PP_SEQ_ELEM_ ## i seq))\n#    define BOOST_PP_SEQ_ELEM_II(res) BOOST_PP_SEQ_ELEM_IV(BOOST_PP_SEQ_ELEM_III res)\n#    define BOOST_PP_SEQ_ELEM_III(x, _) x BOOST_PP_EMPTY()\n#    define BOOST_PP_SEQ_ELEM_IV(x) x\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ELEM_I(par) BOOST_PP_SEQ_ELEM_II ## par\n#    define BOOST_PP_SEQ_ELEM_II(i, seq) BOOST_PP_SEQ_ELEM_III(BOOST_PP_SEQ_ELEM_ ## i ## seq)\n#    define BOOST_PP_SEQ_ELEM_III(im) BOOST_PP_SEQ_ELEM_IV(im)\n#    define BOOST_PP_SEQ_ELEM_IV(x, _) x\n# else\n#    if defined(__IBMC__) || defined(__IBMCPP__)\n#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM_ ## i, seq))\n#    else\n#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_SEQ_ELEM_ ## i seq)\n#    endif\n#    define BOOST_PP_SEQ_ELEM_II(im) BOOST_PP_SEQ_ELEM_III(im)\n#    define BOOST_PP_SEQ_ELEM_III(x, _) x\n# endif\n#\n# define BOOST_PP_SEQ_ELEM_0(x) x, BOOST_PP_NIL\n# define BOOST_PP_SEQ_ELEM_1(_) BOOST_PP_SEQ_ELEM_0\n# define BOOST_PP_SEQ_ELEM_2(_) BOOST_PP_SEQ_ELEM_1\n# define BOOST_PP_SEQ_ELEM_3(_) BOOST_PP_SEQ_ELEM_2\n# define BOOST_PP_SEQ_ELEM_4(_) BOOST_PP_SEQ_ELEM_3\n# define BOOST_PP_SEQ_ELEM_5(_) BOOST_PP_SEQ_ELEM_4\n# define BOOST_PP_SEQ_ELEM_6(_) BOOST_PP_SEQ_ELEM_5\n# define BOOST_PP_SEQ_ELEM_7(_) BOOST_PP_SEQ_ELEM_6\n# define BOOST_PP_SEQ_ELEM_8(_) BOOST_PP_SEQ_ELEM_7\n# define BOOST_PP_SEQ_ELEM_9(_) BOOST_PP_SEQ_ELEM_8\n# define BOOST_PP_SEQ_ELEM_10(_) BOOST_PP_SEQ_ELEM_9\n# define BOOST_PP_SEQ_ELEM_11(_) BOOST_PP_SEQ_ELEM_10\n# define BOOST_PP_SEQ_ELEM_12(_) BOOST_PP_SEQ_ELEM_11\n# define BOOST_PP_SEQ_ELEM_13(_) BOOST_PP_SEQ_ELEM_12\n# define BOOST_PP_SEQ_ELEM_14(_) BOOST_PP_SEQ_ELEM_13\n# define BOOST_PP_SEQ_ELEM_15(_) BOOST_PP_SEQ_ELEM_14\n# define BOOST_PP_SEQ_ELEM_16(_) BOOST_PP_SEQ_ELEM_15\n# define BOOST_PP_SEQ_ELEM_17(_) BOOST_PP_SEQ_ELEM_16\n# define BOOST_PP_SEQ_ELEM_18(_) BOOST_PP_SEQ_ELEM_17\n# define BOOST_PP_SEQ_ELEM_19(_) BOOST_PP_SEQ_ELEM_18\n# define BOOST_PP_SEQ_ELEM_20(_) BOOST_PP_SEQ_ELEM_19\n# define BOOST_PP_SEQ_ELEM_21(_) BOOST_PP_SEQ_ELEM_20\n# define BOOST_PP_SEQ_ELEM_22(_) BOOST_PP_SEQ_ELEM_21\n# define BOOST_PP_SEQ_ELEM_23(_) BOOST_PP_SEQ_ELEM_22\n# define BOOST_PP_SEQ_ELEM_24(_) BOOST_PP_SEQ_ELEM_23\n# define BOOST_PP_SEQ_ELEM_25(_) BOOST_PP_SEQ_ELEM_24\n# define BOOST_PP_SEQ_ELEM_26(_) BOOST_PP_SEQ_ELEM_25\n# define BOOST_PP_SEQ_ELEM_27(_) BOOST_PP_SEQ_ELEM_26\n# define BOOST_PP_SEQ_ELEM_28(_) BOOST_PP_SEQ_ELEM_27\n# define BOOST_PP_SEQ_ELEM_29(_) BOOST_PP_SEQ_ELEM_28\n# define BOOST_PP_SEQ_ELEM_30(_) BOOST_PP_SEQ_ELEM_29\n# define BOOST_PP_SEQ_ELEM_31(_) BOOST_PP_SEQ_ELEM_30\n# define BOOST_PP_SEQ_ELEM_32(_) BOOST_PP_SEQ_ELEM_31\n# define BOOST_PP_SEQ_ELEM_33(_) BOOST_PP_SEQ_ELEM_32\n# define BOOST_PP_SEQ_ELEM_34(_) BOOST_PP_SEQ_ELEM_33\n# define BOOST_PP_SEQ_ELEM_35(_) BOOST_PP_SEQ_ELEM_34\n# define BOOST_PP_SEQ_ELEM_36(_) BOOST_PP_SEQ_ELEM_35\n# define BOOST_PP_SEQ_ELEM_37(_) BOOST_PP_SEQ_ELEM_36\n# define BOOST_PP_SEQ_ELEM_38(_) BOOST_PP_SEQ_ELEM_37\n# define BOOST_PP_SEQ_ELEM_39(_) BOOST_PP_SEQ_ELEM_38\n# define BOOST_PP_SEQ_ELEM_40(_) BOOST_PP_SEQ_ELEM_39\n# define BOOST_PP_SEQ_ELEM_41(_) BOOST_PP_SEQ_ELEM_40\n# define BOOST_PP_SEQ_ELEM_42(_) BOOST_PP_SEQ_ELEM_41\n# define BOOST_PP_SEQ_ELEM_43(_) BOOST_PP_SEQ_ELEM_42\n# define BOOST_PP_SEQ_ELEM_44(_) BOOST_PP_SEQ_ELEM_43\n# define BOOST_PP_SEQ_ELEM_45(_) BOOST_PP_SEQ_ELEM_44\n# define BOOST_PP_SEQ_ELEM_46(_) BOOST_PP_SEQ_ELEM_45\n# define BOOST_PP_SEQ_ELEM_47(_) BOOST_PP_SEQ_ELEM_46\n# define BOOST_PP_SEQ_ELEM_48(_) BOOST_PP_SEQ_ELEM_47\n# define BOOST_PP_SEQ_ELEM_49(_) BOOST_PP_SEQ_ELEM_48\n# define BOOST_PP_SEQ_ELEM_50(_) BOOST_PP_SEQ_ELEM_49\n# define BOOST_PP_SEQ_ELEM_51(_) BOOST_PP_SEQ_ELEM_50\n# define BOOST_PP_SEQ_ELEM_52(_) BOOST_PP_SEQ_ELEM_51\n# define BOOST_PP_SEQ_ELEM_53(_) BOOST_PP_SEQ_ELEM_52\n# define BOOST_PP_SEQ_ELEM_54(_) BOOST_PP_SEQ_ELEM_53\n# define BOOST_PP_SEQ_ELEM_55(_) BOOST_PP_SEQ_ELEM_54\n# define BOOST_PP_SEQ_ELEM_56(_) BOOST_PP_SEQ_ELEM_55\n# define BOOST_PP_SEQ_ELEM_57(_) BOOST_PP_SEQ_ELEM_56\n# define BOOST_PP_SEQ_ELEM_58(_) BOOST_PP_SEQ_ELEM_57\n# define BOOST_PP_SEQ_ELEM_59(_) BOOST_PP_SEQ_ELEM_58\n# define BOOST_PP_SEQ_ELEM_60(_) BOOST_PP_SEQ_ELEM_59\n# define BOOST_PP_SEQ_ELEM_61(_) BOOST_PP_SEQ_ELEM_60\n# define BOOST_PP_SEQ_ELEM_62(_) BOOST_PP_SEQ_ELEM_61\n# define BOOST_PP_SEQ_ELEM_63(_) BOOST_PP_SEQ_ELEM_62\n# define BOOST_PP_SEQ_ELEM_64(_) BOOST_PP_SEQ_ELEM_63\n# define BOOST_PP_SEQ_ELEM_65(_) BOOST_PP_SEQ_ELEM_64\n# define BOOST_PP_SEQ_ELEM_66(_) BOOST_PP_SEQ_ELEM_65\n# define BOOST_PP_SEQ_ELEM_67(_) BOOST_PP_SEQ_ELEM_66\n# define BOOST_PP_SEQ_ELEM_68(_) BOOST_PP_SEQ_ELEM_67\n# define BOOST_PP_SEQ_ELEM_69(_) BOOST_PP_SEQ_ELEM_68\n# define BOOST_PP_SEQ_ELEM_70(_) BOOST_PP_SEQ_ELEM_69\n# define BOOST_PP_SEQ_ELEM_71(_) BOOST_PP_SEQ_ELEM_70\n# define BOOST_PP_SEQ_ELEM_72(_) BOOST_PP_SEQ_ELEM_71\n# define BOOST_PP_SEQ_ELEM_73(_) BOOST_PP_SEQ_ELEM_72\n# define BOOST_PP_SEQ_ELEM_74(_) BOOST_PP_SEQ_ELEM_73\n# define BOOST_PP_SEQ_ELEM_75(_) BOOST_PP_SEQ_ELEM_74\n# define BOOST_PP_SEQ_ELEM_76(_) BOOST_PP_SEQ_ELEM_75\n# define BOOST_PP_SEQ_ELEM_77(_) BOOST_PP_SEQ_ELEM_76\n# define BOOST_PP_SEQ_ELEM_78(_) BOOST_PP_SEQ_ELEM_77\n# define BOOST_PP_SEQ_ELEM_79(_) BOOST_PP_SEQ_ELEM_78\n# define BOOST_PP_SEQ_ELEM_80(_) BOOST_PP_SEQ_ELEM_79\n# define BOOST_PP_SEQ_ELEM_81(_) BOOST_PP_SEQ_ELEM_80\n# define BOOST_PP_SEQ_ELEM_82(_) BOOST_PP_SEQ_ELEM_81\n# define BOOST_PP_SEQ_ELEM_83(_) BOOST_PP_SEQ_ELEM_82\n# define BOOST_PP_SEQ_ELEM_84(_) BOOST_PP_SEQ_ELEM_83\n# define BOOST_PP_SEQ_ELEM_85(_) BOOST_PP_SEQ_ELEM_84\n# define BOOST_PP_SEQ_ELEM_86(_) BOOST_PP_SEQ_ELEM_85\n# define BOOST_PP_SEQ_ELEM_87(_) BOOST_PP_SEQ_ELEM_86\n# define BOOST_PP_SEQ_ELEM_88(_) BOOST_PP_SEQ_ELEM_87\n# define BOOST_PP_SEQ_ELEM_89(_) BOOST_PP_SEQ_ELEM_88\n# define BOOST_PP_SEQ_ELEM_90(_) BOOST_PP_SEQ_ELEM_89\n# define BOOST_PP_SEQ_ELEM_91(_) BOOST_PP_SEQ_ELEM_90\n# define BOOST_PP_SEQ_ELEM_92(_) BOOST_PP_SEQ_ELEM_91\n# define BOOST_PP_SEQ_ELEM_93(_) BOOST_PP_SEQ_ELEM_92\n# define BOOST_PP_SEQ_ELEM_94(_) BOOST_PP_SEQ_ELEM_93\n# define BOOST_PP_SEQ_ELEM_95(_) BOOST_PP_SEQ_ELEM_94\n# define BOOST_PP_SEQ_ELEM_96(_) BOOST_PP_SEQ_ELEM_95\n# define BOOST_PP_SEQ_ELEM_97(_) BOOST_PP_SEQ_ELEM_96\n# define BOOST_PP_SEQ_ELEM_98(_) BOOST_PP_SEQ_ELEM_97\n# define BOOST_PP_SEQ_ELEM_99(_) BOOST_PP_SEQ_ELEM_98\n# define BOOST_PP_SEQ_ELEM_100(_) BOOST_PP_SEQ_ELEM_99\n# define BOOST_PP_SEQ_ELEM_101(_) BOOST_PP_SEQ_ELEM_100\n# define BOOST_PP_SEQ_ELEM_102(_) BOOST_PP_SEQ_ELEM_101\n# define BOOST_PP_SEQ_ELEM_103(_) BOOST_PP_SEQ_ELEM_102\n# define BOOST_PP_SEQ_ELEM_104(_) BOOST_PP_SEQ_ELEM_103\n# define BOOST_PP_SEQ_ELEM_105(_) BOOST_PP_SEQ_ELEM_104\n# define BOOST_PP_SEQ_ELEM_106(_) BOOST_PP_SEQ_ELEM_105\n# define BOOST_PP_SEQ_ELEM_107(_) BOOST_PP_SEQ_ELEM_106\n# define BOOST_PP_SEQ_ELEM_108(_) BOOST_PP_SEQ_ELEM_107\n# define BOOST_PP_SEQ_ELEM_109(_) BOOST_PP_SEQ_ELEM_108\n# define BOOST_PP_SEQ_ELEM_110(_) BOOST_PP_SEQ_ELEM_109\n# define BOOST_PP_SEQ_ELEM_111(_) BOOST_PP_SEQ_ELEM_110\n# define BOOST_PP_SEQ_ELEM_112(_) BOOST_PP_SEQ_ELEM_111\n# define BOOST_PP_SEQ_ELEM_113(_) BOOST_PP_SEQ_ELEM_112\n# define BOOST_PP_SEQ_ELEM_114(_) BOOST_PP_SEQ_ELEM_113\n# define BOOST_PP_SEQ_ELEM_115(_) BOOST_PP_SEQ_ELEM_114\n# define BOOST_PP_SEQ_ELEM_116(_) BOOST_PP_SEQ_ELEM_115\n# define BOOST_PP_SEQ_ELEM_117(_) BOOST_PP_SEQ_ELEM_116\n# define BOOST_PP_SEQ_ELEM_118(_) BOOST_PP_SEQ_ELEM_117\n# define BOOST_PP_SEQ_ELEM_119(_) BOOST_PP_SEQ_ELEM_118\n# define BOOST_PP_SEQ_ELEM_120(_) BOOST_PP_SEQ_ELEM_119\n# define BOOST_PP_SEQ_ELEM_121(_) BOOST_PP_SEQ_ELEM_120\n# define BOOST_PP_SEQ_ELEM_122(_) BOOST_PP_SEQ_ELEM_121\n# define BOOST_PP_SEQ_ELEM_123(_) BOOST_PP_SEQ_ELEM_122\n# define BOOST_PP_SEQ_ELEM_124(_) BOOST_PP_SEQ_ELEM_123\n# define BOOST_PP_SEQ_ELEM_125(_) BOOST_PP_SEQ_ELEM_124\n# define BOOST_PP_SEQ_ELEM_126(_) BOOST_PP_SEQ_ELEM_125\n# define BOOST_PP_SEQ_ELEM_127(_) BOOST_PP_SEQ_ELEM_126\n# define BOOST_PP_SEQ_ELEM_128(_) BOOST_PP_SEQ_ELEM_127\n# define BOOST_PP_SEQ_ELEM_129(_) BOOST_PP_SEQ_ELEM_128\n# define BOOST_PP_SEQ_ELEM_130(_) BOOST_PP_SEQ_ELEM_129\n# define BOOST_PP_SEQ_ELEM_131(_) BOOST_PP_SEQ_ELEM_130\n# define BOOST_PP_SEQ_ELEM_132(_) BOOST_PP_SEQ_ELEM_131\n# define BOOST_PP_SEQ_ELEM_133(_) BOOST_PP_SEQ_ELEM_132\n# define BOOST_PP_SEQ_ELEM_134(_) BOOST_PP_SEQ_ELEM_133\n# define BOOST_PP_SEQ_ELEM_135(_) BOOST_PP_SEQ_ELEM_134\n# define BOOST_PP_SEQ_ELEM_136(_) BOOST_PP_SEQ_ELEM_135\n# define BOOST_PP_SEQ_ELEM_137(_) BOOST_PP_SEQ_ELEM_136\n# define BOOST_PP_SEQ_ELEM_138(_) BOOST_PP_SEQ_ELEM_137\n# define BOOST_PP_SEQ_ELEM_139(_) BOOST_PP_SEQ_ELEM_138\n# define BOOST_PP_SEQ_ELEM_140(_) BOOST_PP_SEQ_ELEM_139\n# define BOOST_PP_SEQ_ELEM_141(_) BOOST_PP_SEQ_ELEM_140\n# define BOOST_PP_SEQ_ELEM_142(_) BOOST_PP_SEQ_ELEM_141\n# define BOOST_PP_SEQ_ELEM_143(_) BOOST_PP_SEQ_ELEM_142\n# define BOOST_PP_SEQ_ELEM_144(_) BOOST_PP_SEQ_ELEM_143\n# define BOOST_PP_SEQ_ELEM_145(_) BOOST_PP_SEQ_ELEM_144\n# define BOOST_PP_SEQ_ELEM_146(_) BOOST_PP_SEQ_ELEM_145\n# define BOOST_PP_SEQ_ELEM_147(_) BOOST_PP_SEQ_ELEM_146\n# define BOOST_PP_SEQ_ELEM_148(_) BOOST_PP_SEQ_ELEM_147\n# define BOOST_PP_SEQ_ELEM_149(_) BOOST_PP_SEQ_ELEM_148\n# define BOOST_PP_SEQ_ELEM_150(_) BOOST_PP_SEQ_ELEM_149\n# define BOOST_PP_SEQ_ELEM_151(_) BOOST_PP_SEQ_ELEM_150\n# define BOOST_PP_SEQ_ELEM_152(_) BOOST_PP_SEQ_ELEM_151\n# define BOOST_PP_SEQ_ELEM_153(_) BOOST_PP_SEQ_ELEM_152\n# define BOOST_PP_SEQ_ELEM_154(_) BOOST_PP_SEQ_ELEM_153\n# define BOOST_PP_SEQ_ELEM_155(_) BOOST_PP_SEQ_ELEM_154\n# define BOOST_PP_SEQ_ELEM_156(_) BOOST_PP_SEQ_ELEM_155\n# define BOOST_PP_SEQ_ELEM_157(_) BOOST_PP_SEQ_ELEM_156\n# define BOOST_PP_SEQ_ELEM_158(_) BOOST_PP_SEQ_ELEM_157\n# define BOOST_PP_SEQ_ELEM_159(_) BOOST_PP_SEQ_ELEM_158\n# define BOOST_PP_SEQ_ELEM_160(_) BOOST_PP_SEQ_ELEM_159\n# define BOOST_PP_SEQ_ELEM_161(_) BOOST_PP_SEQ_ELEM_160\n# define BOOST_PP_SEQ_ELEM_162(_) BOOST_PP_SEQ_ELEM_161\n# define BOOST_PP_SEQ_ELEM_163(_) BOOST_PP_SEQ_ELEM_162\n# define BOOST_PP_SEQ_ELEM_164(_) BOOST_PP_SEQ_ELEM_163\n# define BOOST_PP_SEQ_ELEM_165(_) BOOST_PP_SEQ_ELEM_164\n# define BOOST_PP_SEQ_ELEM_166(_) BOOST_PP_SEQ_ELEM_165\n# define BOOST_PP_SEQ_ELEM_167(_) BOOST_PP_SEQ_ELEM_166\n# define BOOST_PP_SEQ_ELEM_168(_) BOOST_PP_SEQ_ELEM_167\n# define BOOST_PP_SEQ_ELEM_169(_) BOOST_PP_SEQ_ELEM_168\n# define BOOST_PP_SEQ_ELEM_170(_) BOOST_PP_SEQ_ELEM_169\n# define BOOST_PP_SEQ_ELEM_171(_) BOOST_PP_SEQ_ELEM_170\n# define BOOST_PP_SEQ_ELEM_172(_) BOOST_PP_SEQ_ELEM_171\n# define BOOST_PP_SEQ_ELEM_173(_) BOOST_PP_SEQ_ELEM_172\n# define BOOST_PP_SEQ_ELEM_174(_) BOOST_PP_SEQ_ELEM_173\n# define BOOST_PP_SEQ_ELEM_175(_) BOOST_PP_SEQ_ELEM_174\n# define BOOST_PP_SEQ_ELEM_176(_) BOOST_PP_SEQ_ELEM_175\n# define BOOST_PP_SEQ_ELEM_177(_) BOOST_PP_SEQ_ELEM_176\n# define BOOST_PP_SEQ_ELEM_178(_) BOOST_PP_SEQ_ELEM_177\n# define BOOST_PP_SEQ_ELEM_179(_) BOOST_PP_SEQ_ELEM_178\n# define BOOST_PP_SEQ_ELEM_180(_) BOOST_PP_SEQ_ELEM_179\n# define BOOST_PP_SEQ_ELEM_181(_) BOOST_PP_SEQ_ELEM_180\n# define BOOST_PP_SEQ_ELEM_182(_) BOOST_PP_SEQ_ELEM_181\n# define BOOST_PP_SEQ_ELEM_183(_) BOOST_PP_SEQ_ELEM_182\n# define BOOST_PP_SEQ_ELEM_184(_) BOOST_PP_SEQ_ELEM_183\n# define BOOST_PP_SEQ_ELEM_185(_) BOOST_PP_SEQ_ELEM_184\n# define BOOST_PP_SEQ_ELEM_186(_) BOOST_PP_SEQ_ELEM_185\n# define BOOST_PP_SEQ_ELEM_187(_) BOOST_PP_SEQ_ELEM_186\n# define BOOST_PP_SEQ_ELEM_188(_) BOOST_PP_SEQ_ELEM_187\n# define BOOST_PP_SEQ_ELEM_189(_) BOOST_PP_SEQ_ELEM_188\n# define BOOST_PP_SEQ_ELEM_190(_) BOOST_PP_SEQ_ELEM_189\n# define BOOST_PP_SEQ_ELEM_191(_) BOOST_PP_SEQ_ELEM_190\n# define BOOST_PP_SEQ_ELEM_192(_) BOOST_PP_SEQ_ELEM_191\n# define BOOST_PP_SEQ_ELEM_193(_) BOOST_PP_SEQ_ELEM_192\n# define BOOST_PP_SEQ_ELEM_194(_) BOOST_PP_SEQ_ELEM_193\n# define BOOST_PP_SEQ_ELEM_195(_) BOOST_PP_SEQ_ELEM_194\n# define BOOST_PP_SEQ_ELEM_196(_) BOOST_PP_SEQ_ELEM_195\n# define BOOST_PP_SEQ_ELEM_197(_) BOOST_PP_SEQ_ELEM_196\n# define BOOST_PP_SEQ_ELEM_198(_) BOOST_PP_SEQ_ELEM_197\n# define BOOST_PP_SEQ_ELEM_199(_) BOOST_PP_SEQ_ELEM_198\n# define BOOST_PP_SEQ_ELEM_200(_) BOOST_PP_SEQ_ELEM_199\n# define BOOST_PP_SEQ_ELEM_201(_) BOOST_PP_SEQ_ELEM_200\n# define BOOST_PP_SEQ_ELEM_202(_) BOOST_PP_SEQ_ELEM_201\n# define BOOST_PP_SEQ_ELEM_203(_) BOOST_PP_SEQ_ELEM_202\n# define BOOST_PP_SEQ_ELEM_204(_) BOOST_PP_SEQ_ELEM_203\n# define BOOST_PP_SEQ_ELEM_205(_) BOOST_PP_SEQ_ELEM_204\n# define BOOST_PP_SEQ_ELEM_206(_) BOOST_PP_SEQ_ELEM_205\n# define BOOST_PP_SEQ_ELEM_207(_) BOOST_PP_SEQ_ELEM_206\n# define BOOST_PP_SEQ_ELEM_208(_) BOOST_PP_SEQ_ELEM_207\n# define BOOST_PP_SEQ_ELEM_209(_) BOOST_PP_SEQ_ELEM_208\n# define BOOST_PP_SEQ_ELEM_210(_) BOOST_PP_SEQ_ELEM_209\n# define BOOST_PP_SEQ_ELEM_211(_) BOOST_PP_SEQ_ELEM_210\n# define BOOST_PP_SEQ_ELEM_212(_) BOOST_PP_SEQ_ELEM_211\n# define BOOST_PP_SEQ_ELEM_213(_) BOOST_PP_SEQ_ELEM_212\n# define BOOST_PP_SEQ_ELEM_214(_) BOOST_PP_SEQ_ELEM_213\n# define BOOST_PP_SEQ_ELEM_215(_) BOOST_PP_SEQ_ELEM_214\n# define BOOST_PP_SEQ_ELEM_216(_) BOOST_PP_SEQ_ELEM_215\n# define BOOST_PP_SEQ_ELEM_217(_) BOOST_PP_SEQ_ELEM_216\n# define BOOST_PP_SEQ_ELEM_218(_) BOOST_PP_SEQ_ELEM_217\n# define BOOST_PP_SEQ_ELEM_219(_) BOOST_PP_SEQ_ELEM_218\n# define BOOST_PP_SEQ_ELEM_220(_) BOOST_PP_SEQ_ELEM_219\n# define BOOST_PP_SEQ_ELEM_221(_) BOOST_PP_SEQ_ELEM_220\n# define BOOST_PP_SEQ_ELEM_222(_) BOOST_PP_SEQ_ELEM_221\n# define BOOST_PP_SEQ_ELEM_223(_) BOOST_PP_SEQ_ELEM_222\n# define BOOST_PP_SEQ_ELEM_224(_) BOOST_PP_SEQ_ELEM_223\n# define BOOST_PP_SEQ_ELEM_225(_) BOOST_PP_SEQ_ELEM_224\n# define BOOST_PP_SEQ_ELEM_226(_) BOOST_PP_SEQ_ELEM_225\n# define BOOST_PP_SEQ_ELEM_227(_) BOOST_PP_SEQ_ELEM_226\n# define BOOST_PP_SEQ_ELEM_228(_) BOOST_PP_SEQ_ELEM_227\n# define BOOST_PP_SEQ_ELEM_229(_) BOOST_PP_SEQ_ELEM_228\n# define BOOST_PP_SEQ_ELEM_230(_) BOOST_PP_SEQ_ELEM_229\n# define BOOST_PP_SEQ_ELEM_231(_) BOOST_PP_SEQ_ELEM_230\n# define BOOST_PP_SEQ_ELEM_232(_) BOOST_PP_SEQ_ELEM_231\n# define BOOST_PP_SEQ_ELEM_233(_) BOOST_PP_SEQ_ELEM_232\n# define BOOST_PP_SEQ_ELEM_234(_) BOOST_PP_SEQ_ELEM_233\n# define BOOST_PP_SEQ_ELEM_235(_) BOOST_PP_SEQ_ELEM_234\n# define BOOST_PP_SEQ_ELEM_236(_) BOOST_PP_SEQ_ELEM_235\n# define BOOST_PP_SEQ_ELEM_237(_) BOOST_PP_SEQ_ELEM_236\n# define BOOST_PP_SEQ_ELEM_238(_) BOOST_PP_SEQ_ELEM_237\n# define BOOST_PP_SEQ_ELEM_239(_) BOOST_PP_SEQ_ELEM_238\n# define BOOST_PP_SEQ_ELEM_240(_) BOOST_PP_SEQ_ELEM_239\n# define BOOST_PP_SEQ_ELEM_241(_) BOOST_PP_SEQ_ELEM_240\n# define BOOST_PP_SEQ_ELEM_242(_) BOOST_PP_SEQ_ELEM_241\n# define BOOST_PP_SEQ_ELEM_243(_) BOOST_PP_SEQ_ELEM_242\n# define BOOST_PP_SEQ_ELEM_244(_) BOOST_PP_SEQ_ELEM_243\n# define BOOST_PP_SEQ_ELEM_245(_) BOOST_PP_SEQ_ELEM_244\n# define BOOST_PP_SEQ_ELEM_246(_) BOOST_PP_SEQ_ELEM_245\n# define BOOST_PP_SEQ_ELEM_247(_) BOOST_PP_SEQ_ELEM_246\n# define BOOST_PP_SEQ_ELEM_248(_) BOOST_PP_SEQ_ELEM_247\n# define BOOST_PP_SEQ_ELEM_249(_) BOOST_PP_SEQ_ELEM_248\n# define BOOST_PP_SEQ_ELEM_250(_) BOOST_PP_SEQ_ELEM_249\n# define BOOST_PP_SEQ_ELEM_251(_) BOOST_PP_SEQ_ELEM_250\n# define BOOST_PP_SEQ_ELEM_252(_) BOOST_PP_SEQ_ELEM_251\n# define BOOST_PP_SEQ_ELEM_253(_) BOOST_PP_SEQ_ELEM_252\n# define BOOST_PP_SEQ_ELEM_254(_) BOOST_PP_SEQ_ELEM_253\n# define BOOST_PP_SEQ_ELEM_255(_) BOOST_PP_SEQ_ELEM_254\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/enum.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_ENUM_HPP\n# define BOOST_PREPROCESSOR_SEQ_ENUM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_ENUM */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(seq)\n#    define BOOST_PP_SEQ_ENUM_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq)\n#    define BOOST_PP_SEQ_ENUM_I(size, seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq\n# else\n#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq\n# endif\n#\n# define BOOST_PP_SEQ_ENUM_1(x) x\n# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1\n# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2\n# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3\n# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4\n# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5\n# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6\n# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7\n# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8\n# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9\n# define BOOST_PP_SEQ_ENUM_11(x) x, BOOST_PP_SEQ_ENUM_10\n# define BOOST_PP_SEQ_ENUM_12(x) x, BOOST_PP_SEQ_ENUM_11\n# define BOOST_PP_SEQ_ENUM_13(x) x, BOOST_PP_SEQ_ENUM_12\n# define BOOST_PP_SEQ_ENUM_14(x) x, BOOST_PP_SEQ_ENUM_13\n# define BOOST_PP_SEQ_ENUM_15(x) x, BOOST_PP_SEQ_ENUM_14\n# define BOOST_PP_SEQ_ENUM_16(x) x, BOOST_PP_SEQ_ENUM_15\n# define BOOST_PP_SEQ_ENUM_17(x) x, BOOST_PP_SEQ_ENUM_16\n# define BOOST_PP_SEQ_ENUM_18(x) x, BOOST_PP_SEQ_ENUM_17\n# define BOOST_PP_SEQ_ENUM_19(x) x, BOOST_PP_SEQ_ENUM_18\n# define BOOST_PP_SEQ_ENUM_20(x) x, BOOST_PP_SEQ_ENUM_19\n# define BOOST_PP_SEQ_ENUM_21(x) x, BOOST_PP_SEQ_ENUM_20\n# define BOOST_PP_SEQ_ENUM_22(x) x, BOOST_PP_SEQ_ENUM_21\n# define BOOST_PP_SEQ_ENUM_23(x) x, BOOST_PP_SEQ_ENUM_22\n# define BOOST_PP_SEQ_ENUM_24(x) x, BOOST_PP_SEQ_ENUM_23\n# define BOOST_PP_SEQ_ENUM_25(x) x, BOOST_PP_SEQ_ENUM_24\n# define BOOST_PP_SEQ_ENUM_26(x) x, BOOST_PP_SEQ_ENUM_25\n# define BOOST_PP_SEQ_ENUM_27(x) x, BOOST_PP_SEQ_ENUM_26\n# define BOOST_PP_SEQ_ENUM_28(x) x, BOOST_PP_SEQ_ENUM_27\n# define BOOST_PP_SEQ_ENUM_29(x) x, BOOST_PP_SEQ_ENUM_28\n# define BOOST_PP_SEQ_ENUM_30(x) x, BOOST_PP_SEQ_ENUM_29\n# define BOOST_PP_SEQ_ENUM_31(x) x, BOOST_PP_SEQ_ENUM_30\n# define BOOST_PP_SEQ_ENUM_32(x) x, BOOST_PP_SEQ_ENUM_31\n# define BOOST_PP_SEQ_ENUM_33(x) x, BOOST_PP_SEQ_ENUM_32\n# define BOOST_PP_SEQ_ENUM_34(x) x, BOOST_PP_SEQ_ENUM_33\n# define BOOST_PP_SEQ_ENUM_35(x) x, BOOST_PP_SEQ_ENUM_34\n# define BOOST_PP_SEQ_ENUM_36(x) x, BOOST_PP_SEQ_ENUM_35\n# define BOOST_PP_SEQ_ENUM_37(x) x, BOOST_PP_SEQ_ENUM_36\n# define BOOST_PP_SEQ_ENUM_38(x) x, BOOST_PP_SEQ_ENUM_37\n# define BOOST_PP_SEQ_ENUM_39(x) x, BOOST_PP_SEQ_ENUM_38\n# define BOOST_PP_SEQ_ENUM_40(x) x, BOOST_PP_SEQ_ENUM_39\n# define BOOST_PP_SEQ_ENUM_41(x) x, BOOST_PP_SEQ_ENUM_40\n# define BOOST_PP_SEQ_ENUM_42(x) x, BOOST_PP_SEQ_ENUM_41\n# define BOOST_PP_SEQ_ENUM_43(x) x, BOOST_PP_SEQ_ENUM_42\n# define BOOST_PP_SEQ_ENUM_44(x) x, BOOST_PP_SEQ_ENUM_43\n# define BOOST_PP_SEQ_ENUM_45(x) x, BOOST_PP_SEQ_ENUM_44\n# define BOOST_PP_SEQ_ENUM_46(x) x, BOOST_PP_SEQ_ENUM_45\n# define BOOST_PP_SEQ_ENUM_47(x) x, BOOST_PP_SEQ_ENUM_46\n# define BOOST_PP_SEQ_ENUM_48(x) x, BOOST_PP_SEQ_ENUM_47\n# define BOOST_PP_SEQ_ENUM_49(x) x, BOOST_PP_SEQ_ENUM_48\n# define BOOST_PP_SEQ_ENUM_50(x) x, BOOST_PP_SEQ_ENUM_49\n# define BOOST_PP_SEQ_ENUM_51(x) x, BOOST_PP_SEQ_ENUM_50\n# define BOOST_PP_SEQ_ENUM_52(x) x, BOOST_PP_SEQ_ENUM_51\n# define BOOST_PP_SEQ_ENUM_53(x) x, BOOST_PP_SEQ_ENUM_52\n# define BOOST_PP_SEQ_ENUM_54(x) x, BOOST_PP_SEQ_ENUM_53\n# define BOOST_PP_SEQ_ENUM_55(x) x, BOOST_PP_SEQ_ENUM_54\n# define BOOST_PP_SEQ_ENUM_56(x) x, BOOST_PP_SEQ_ENUM_55\n# define BOOST_PP_SEQ_ENUM_57(x) x, BOOST_PP_SEQ_ENUM_56\n# define BOOST_PP_SEQ_ENUM_58(x) x, BOOST_PP_SEQ_ENUM_57\n# define BOOST_PP_SEQ_ENUM_59(x) x, BOOST_PP_SEQ_ENUM_58\n# define BOOST_PP_SEQ_ENUM_60(x) x, BOOST_PP_SEQ_ENUM_59\n# define BOOST_PP_SEQ_ENUM_61(x) x, BOOST_PP_SEQ_ENUM_60\n# define BOOST_PP_SEQ_ENUM_62(x) x, BOOST_PP_SEQ_ENUM_61\n# define BOOST_PP_SEQ_ENUM_63(x) x, BOOST_PP_SEQ_ENUM_62\n# define BOOST_PP_SEQ_ENUM_64(x) x, BOOST_PP_SEQ_ENUM_63\n# define BOOST_PP_SEQ_ENUM_65(x) x, BOOST_PP_SEQ_ENUM_64\n# define BOOST_PP_SEQ_ENUM_66(x) x, BOOST_PP_SEQ_ENUM_65\n# define BOOST_PP_SEQ_ENUM_67(x) x, BOOST_PP_SEQ_ENUM_66\n# define BOOST_PP_SEQ_ENUM_68(x) x, BOOST_PP_SEQ_ENUM_67\n# define BOOST_PP_SEQ_ENUM_69(x) x, BOOST_PP_SEQ_ENUM_68\n# define BOOST_PP_SEQ_ENUM_70(x) x, BOOST_PP_SEQ_ENUM_69\n# define BOOST_PP_SEQ_ENUM_71(x) x, BOOST_PP_SEQ_ENUM_70\n# define BOOST_PP_SEQ_ENUM_72(x) x, BOOST_PP_SEQ_ENUM_71\n# define BOOST_PP_SEQ_ENUM_73(x) x, BOOST_PP_SEQ_ENUM_72\n# define BOOST_PP_SEQ_ENUM_74(x) x, BOOST_PP_SEQ_ENUM_73\n# define BOOST_PP_SEQ_ENUM_75(x) x, BOOST_PP_SEQ_ENUM_74\n# define BOOST_PP_SEQ_ENUM_76(x) x, BOOST_PP_SEQ_ENUM_75\n# define BOOST_PP_SEQ_ENUM_77(x) x, BOOST_PP_SEQ_ENUM_76\n# define BOOST_PP_SEQ_ENUM_78(x) x, BOOST_PP_SEQ_ENUM_77\n# define BOOST_PP_SEQ_ENUM_79(x) x, BOOST_PP_SEQ_ENUM_78\n# define BOOST_PP_SEQ_ENUM_80(x) x, BOOST_PP_SEQ_ENUM_79\n# define BOOST_PP_SEQ_ENUM_81(x) x, BOOST_PP_SEQ_ENUM_80\n# define BOOST_PP_SEQ_ENUM_82(x) x, BOOST_PP_SEQ_ENUM_81\n# define BOOST_PP_SEQ_ENUM_83(x) x, BOOST_PP_SEQ_ENUM_82\n# define BOOST_PP_SEQ_ENUM_84(x) x, BOOST_PP_SEQ_ENUM_83\n# define BOOST_PP_SEQ_ENUM_85(x) x, BOOST_PP_SEQ_ENUM_84\n# define BOOST_PP_SEQ_ENUM_86(x) x, BOOST_PP_SEQ_ENUM_85\n# define BOOST_PP_SEQ_ENUM_87(x) x, BOOST_PP_SEQ_ENUM_86\n# define BOOST_PP_SEQ_ENUM_88(x) x, BOOST_PP_SEQ_ENUM_87\n# define BOOST_PP_SEQ_ENUM_89(x) x, BOOST_PP_SEQ_ENUM_88\n# define BOOST_PP_SEQ_ENUM_90(x) x, BOOST_PP_SEQ_ENUM_89\n# define BOOST_PP_SEQ_ENUM_91(x) x, BOOST_PP_SEQ_ENUM_90\n# define BOOST_PP_SEQ_ENUM_92(x) x, BOOST_PP_SEQ_ENUM_91\n# define BOOST_PP_SEQ_ENUM_93(x) x, BOOST_PP_SEQ_ENUM_92\n# define BOOST_PP_SEQ_ENUM_94(x) x, BOOST_PP_SEQ_ENUM_93\n# define BOOST_PP_SEQ_ENUM_95(x) x, BOOST_PP_SEQ_ENUM_94\n# define BOOST_PP_SEQ_ENUM_96(x) x, BOOST_PP_SEQ_ENUM_95\n# define BOOST_PP_SEQ_ENUM_97(x) x, BOOST_PP_SEQ_ENUM_96\n# define BOOST_PP_SEQ_ENUM_98(x) x, BOOST_PP_SEQ_ENUM_97\n# define BOOST_PP_SEQ_ENUM_99(x) x, BOOST_PP_SEQ_ENUM_98\n# define BOOST_PP_SEQ_ENUM_100(x) x, BOOST_PP_SEQ_ENUM_99\n# define BOOST_PP_SEQ_ENUM_101(x) x, BOOST_PP_SEQ_ENUM_100\n# define BOOST_PP_SEQ_ENUM_102(x) x, BOOST_PP_SEQ_ENUM_101\n# define BOOST_PP_SEQ_ENUM_103(x) x, BOOST_PP_SEQ_ENUM_102\n# define BOOST_PP_SEQ_ENUM_104(x) x, BOOST_PP_SEQ_ENUM_103\n# define BOOST_PP_SEQ_ENUM_105(x) x, BOOST_PP_SEQ_ENUM_104\n# define BOOST_PP_SEQ_ENUM_106(x) x, BOOST_PP_SEQ_ENUM_105\n# define BOOST_PP_SEQ_ENUM_107(x) x, BOOST_PP_SEQ_ENUM_106\n# define BOOST_PP_SEQ_ENUM_108(x) x, BOOST_PP_SEQ_ENUM_107\n# define BOOST_PP_SEQ_ENUM_109(x) x, BOOST_PP_SEQ_ENUM_108\n# define BOOST_PP_SEQ_ENUM_110(x) x, BOOST_PP_SEQ_ENUM_109\n# define BOOST_PP_SEQ_ENUM_111(x) x, BOOST_PP_SEQ_ENUM_110\n# define BOOST_PP_SEQ_ENUM_112(x) x, BOOST_PP_SEQ_ENUM_111\n# define BOOST_PP_SEQ_ENUM_113(x) x, BOOST_PP_SEQ_ENUM_112\n# define BOOST_PP_SEQ_ENUM_114(x) x, BOOST_PP_SEQ_ENUM_113\n# define BOOST_PP_SEQ_ENUM_115(x) x, BOOST_PP_SEQ_ENUM_114\n# define BOOST_PP_SEQ_ENUM_116(x) x, BOOST_PP_SEQ_ENUM_115\n# define BOOST_PP_SEQ_ENUM_117(x) x, BOOST_PP_SEQ_ENUM_116\n# define BOOST_PP_SEQ_ENUM_118(x) x, BOOST_PP_SEQ_ENUM_117\n# define BOOST_PP_SEQ_ENUM_119(x) x, BOOST_PP_SEQ_ENUM_118\n# define BOOST_PP_SEQ_ENUM_120(x) x, BOOST_PP_SEQ_ENUM_119\n# define BOOST_PP_SEQ_ENUM_121(x) x, BOOST_PP_SEQ_ENUM_120\n# define BOOST_PP_SEQ_ENUM_122(x) x, BOOST_PP_SEQ_ENUM_121\n# define BOOST_PP_SEQ_ENUM_123(x) x, BOOST_PP_SEQ_ENUM_122\n# define BOOST_PP_SEQ_ENUM_124(x) x, BOOST_PP_SEQ_ENUM_123\n# define BOOST_PP_SEQ_ENUM_125(x) x, BOOST_PP_SEQ_ENUM_124\n# define BOOST_PP_SEQ_ENUM_126(x) x, BOOST_PP_SEQ_ENUM_125\n# define BOOST_PP_SEQ_ENUM_127(x) x, BOOST_PP_SEQ_ENUM_126\n# define BOOST_PP_SEQ_ENUM_128(x) x, BOOST_PP_SEQ_ENUM_127\n# define BOOST_PP_SEQ_ENUM_129(x) x, BOOST_PP_SEQ_ENUM_128\n# define BOOST_PP_SEQ_ENUM_130(x) x, BOOST_PP_SEQ_ENUM_129\n# define BOOST_PP_SEQ_ENUM_131(x) x, BOOST_PP_SEQ_ENUM_130\n# define BOOST_PP_SEQ_ENUM_132(x) x, BOOST_PP_SEQ_ENUM_131\n# define BOOST_PP_SEQ_ENUM_133(x) x, BOOST_PP_SEQ_ENUM_132\n# define BOOST_PP_SEQ_ENUM_134(x) x, BOOST_PP_SEQ_ENUM_133\n# define BOOST_PP_SEQ_ENUM_135(x) x, BOOST_PP_SEQ_ENUM_134\n# define BOOST_PP_SEQ_ENUM_136(x) x, BOOST_PP_SEQ_ENUM_135\n# define BOOST_PP_SEQ_ENUM_137(x) x, BOOST_PP_SEQ_ENUM_136\n# define BOOST_PP_SEQ_ENUM_138(x) x, BOOST_PP_SEQ_ENUM_137\n# define BOOST_PP_SEQ_ENUM_139(x) x, BOOST_PP_SEQ_ENUM_138\n# define BOOST_PP_SEQ_ENUM_140(x) x, BOOST_PP_SEQ_ENUM_139\n# define BOOST_PP_SEQ_ENUM_141(x) x, BOOST_PP_SEQ_ENUM_140\n# define BOOST_PP_SEQ_ENUM_142(x) x, BOOST_PP_SEQ_ENUM_141\n# define BOOST_PP_SEQ_ENUM_143(x) x, BOOST_PP_SEQ_ENUM_142\n# define BOOST_PP_SEQ_ENUM_144(x) x, BOOST_PP_SEQ_ENUM_143\n# define BOOST_PP_SEQ_ENUM_145(x) x, BOOST_PP_SEQ_ENUM_144\n# define BOOST_PP_SEQ_ENUM_146(x) x, BOOST_PP_SEQ_ENUM_145\n# define BOOST_PP_SEQ_ENUM_147(x) x, BOOST_PP_SEQ_ENUM_146\n# define BOOST_PP_SEQ_ENUM_148(x) x, BOOST_PP_SEQ_ENUM_147\n# define BOOST_PP_SEQ_ENUM_149(x) x, BOOST_PP_SEQ_ENUM_148\n# define BOOST_PP_SEQ_ENUM_150(x) x, BOOST_PP_SEQ_ENUM_149\n# define BOOST_PP_SEQ_ENUM_151(x) x, BOOST_PP_SEQ_ENUM_150\n# define BOOST_PP_SEQ_ENUM_152(x) x, BOOST_PP_SEQ_ENUM_151\n# define BOOST_PP_SEQ_ENUM_153(x) x, BOOST_PP_SEQ_ENUM_152\n# define BOOST_PP_SEQ_ENUM_154(x) x, BOOST_PP_SEQ_ENUM_153\n# define BOOST_PP_SEQ_ENUM_155(x) x, BOOST_PP_SEQ_ENUM_154\n# define BOOST_PP_SEQ_ENUM_156(x) x, BOOST_PP_SEQ_ENUM_155\n# define BOOST_PP_SEQ_ENUM_157(x) x, BOOST_PP_SEQ_ENUM_156\n# define BOOST_PP_SEQ_ENUM_158(x) x, BOOST_PP_SEQ_ENUM_157\n# define BOOST_PP_SEQ_ENUM_159(x) x, BOOST_PP_SEQ_ENUM_158\n# define BOOST_PP_SEQ_ENUM_160(x) x, BOOST_PP_SEQ_ENUM_159\n# define BOOST_PP_SEQ_ENUM_161(x) x, BOOST_PP_SEQ_ENUM_160\n# define BOOST_PP_SEQ_ENUM_162(x) x, BOOST_PP_SEQ_ENUM_161\n# define BOOST_PP_SEQ_ENUM_163(x) x, BOOST_PP_SEQ_ENUM_162\n# define BOOST_PP_SEQ_ENUM_164(x) x, BOOST_PP_SEQ_ENUM_163\n# define BOOST_PP_SEQ_ENUM_165(x) x, BOOST_PP_SEQ_ENUM_164\n# define BOOST_PP_SEQ_ENUM_166(x) x, BOOST_PP_SEQ_ENUM_165\n# define BOOST_PP_SEQ_ENUM_167(x) x, BOOST_PP_SEQ_ENUM_166\n# define BOOST_PP_SEQ_ENUM_168(x) x, BOOST_PP_SEQ_ENUM_167\n# define BOOST_PP_SEQ_ENUM_169(x) x, BOOST_PP_SEQ_ENUM_168\n# define BOOST_PP_SEQ_ENUM_170(x) x, BOOST_PP_SEQ_ENUM_169\n# define BOOST_PP_SEQ_ENUM_171(x) x, BOOST_PP_SEQ_ENUM_170\n# define BOOST_PP_SEQ_ENUM_172(x) x, BOOST_PP_SEQ_ENUM_171\n# define BOOST_PP_SEQ_ENUM_173(x) x, BOOST_PP_SEQ_ENUM_172\n# define BOOST_PP_SEQ_ENUM_174(x) x, BOOST_PP_SEQ_ENUM_173\n# define BOOST_PP_SEQ_ENUM_175(x) x, BOOST_PP_SEQ_ENUM_174\n# define BOOST_PP_SEQ_ENUM_176(x) x, BOOST_PP_SEQ_ENUM_175\n# define BOOST_PP_SEQ_ENUM_177(x) x, BOOST_PP_SEQ_ENUM_176\n# define BOOST_PP_SEQ_ENUM_178(x) x, BOOST_PP_SEQ_ENUM_177\n# define BOOST_PP_SEQ_ENUM_179(x) x, BOOST_PP_SEQ_ENUM_178\n# define BOOST_PP_SEQ_ENUM_180(x) x, BOOST_PP_SEQ_ENUM_179\n# define BOOST_PP_SEQ_ENUM_181(x) x, BOOST_PP_SEQ_ENUM_180\n# define BOOST_PP_SEQ_ENUM_182(x) x, BOOST_PP_SEQ_ENUM_181\n# define BOOST_PP_SEQ_ENUM_183(x) x, BOOST_PP_SEQ_ENUM_182\n# define BOOST_PP_SEQ_ENUM_184(x) x, BOOST_PP_SEQ_ENUM_183\n# define BOOST_PP_SEQ_ENUM_185(x) x, BOOST_PP_SEQ_ENUM_184\n# define BOOST_PP_SEQ_ENUM_186(x) x, BOOST_PP_SEQ_ENUM_185\n# define BOOST_PP_SEQ_ENUM_187(x) x, BOOST_PP_SEQ_ENUM_186\n# define BOOST_PP_SEQ_ENUM_188(x) x, BOOST_PP_SEQ_ENUM_187\n# define BOOST_PP_SEQ_ENUM_189(x) x, BOOST_PP_SEQ_ENUM_188\n# define BOOST_PP_SEQ_ENUM_190(x) x, BOOST_PP_SEQ_ENUM_189\n# define BOOST_PP_SEQ_ENUM_191(x) x, BOOST_PP_SEQ_ENUM_190\n# define BOOST_PP_SEQ_ENUM_192(x) x, BOOST_PP_SEQ_ENUM_191\n# define BOOST_PP_SEQ_ENUM_193(x) x, BOOST_PP_SEQ_ENUM_192\n# define BOOST_PP_SEQ_ENUM_194(x) x, BOOST_PP_SEQ_ENUM_193\n# define BOOST_PP_SEQ_ENUM_195(x) x, BOOST_PP_SEQ_ENUM_194\n# define BOOST_PP_SEQ_ENUM_196(x) x, BOOST_PP_SEQ_ENUM_195\n# define BOOST_PP_SEQ_ENUM_197(x) x, BOOST_PP_SEQ_ENUM_196\n# define BOOST_PP_SEQ_ENUM_198(x) x, BOOST_PP_SEQ_ENUM_197\n# define BOOST_PP_SEQ_ENUM_199(x) x, BOOST_PP_SEQ_ENUM_198\n# define BOOST_PP_SEQ_ENUM_200(x) x, BOOST_PP_SEQ_ENUM_199\n# define BOOST_PP_SEQ_ENUM_201(x) x, BOOST_PP_SEQ_ENUM_200\n# define BOOST_PP_SEQ_ENUM_202(x) x, BOOST_PP_SEQ_ENUM_201\n# define BOOST_PP_SEQ_ENUM_203(x) x, BOOST_PP_SEQ_ENUM_202\n# define BOOST_PP_SEQ_ENUM_204(x) x, BOOST_PP_SEQ_ENUM_203\n# define BOOST_PP_SEQ_ENUM_205(x) x, BOOST_PP_SEQ_ENUM_204\n# define BOOST_PP_SEQ_ENUM_206(x) x, BOOST_PP_SEQ_ENUM_205\n# define BOOST_PP_SEQ_ENUM_207(x) x, BOOST_PP_SEQ_ENUM_206\n# define BOOST_PP_SEQ_ENUM_208(x) x, BOOST_PP_SEQ_ENUM_207\n# define BOOST_PP_SEQ_ENUM_209(x) x, BOOST_PP_SEQ_ENUM_208\n# define BOOST_PP_SEQ_ENUM_210(x) x, BOOST_PP_SEQ_ENUM_209\n# define BOOST_PP_SEQ_ENUM_211(x) x, BOOST_PP_SEQ_ENUM_210\n# define BOOST_PP_SEQ_ENUM_212(x) x, BOOST_PP_SEQ_ENUM_211\n# define BOOST_PP_SEQ_ENUM_213(x) x, BOOST_PP_SEQ_ENUM_212\n# define BOOST_PP_SEQ_ENUM_214(x) x, BOOST_PP_SEQ_ENUM_213\n# define BOOST_PP_SEQ_ENUM_215(x) x, BOOST_PP_SEQ_ENUM_214\n# define BOOST_PP_SEQ_ENUM_216(x) x, BOOST_PP_SEQ_ENUM_215\n# define BOOST_PP_SEQ_ENUM_217(x) x, BOOST_PP_SEQ_ENUM_216\n# define BOOST_PP_SEQ_ENUM_218(x) x, BOOST_PP_SEQ_ENUM_217\n# define BOOST_PP_SEQ_ENUM_219(x) x, BOOST_PP_SEQ_ENUM_218\n# define BOOST_PP_SEQ_ENUM_220(x) x, BOOST_PP_SEQ_ENUM_219\n# define BOOST_PP_SEQ_ENUM_221(x) x, BOOST_PP_SEQ_ENUM_220\n# define BOOST_PP_SEQ_ENUM_222(x) x, BOOST_PP_SEQ_ENUM_221\n# define BOOST_PP_SEQ_ENUM_223(x) x, BOOST_PP_SEQ_ENUM_222\n# define BOOST_PP_SEQ_ENUM_224(x) x, BOOST_PP_SEQ_ENUM_223\n# define BOOST_PP_SEQ_ENUM_225(x) x, BOOST_PP_SEQ_ENUM_224\n# define BOOST_PP_SEQ_ENUM_226(x) x, BOOST_PP_SEQ_ENUM_225\n# define BOOST_PP_SEQ_ENUM_227(x) x, BOOST_PP_SEQ_ENUM_226\n# define BOOST_PP_SEQ_ENUM_228(x) x, BOOST_PP_SEQ_ENUM_227\n# define BOOST_PP_SEQ_ENUM_229(x) x, BOOST_PP_SEQ_ENUM_228\n# define BOOST_PP_SEQ_ENUM_230(x) x, BOOST_PP_SEQ_ENUM_229\n# define BOOST_PP_SEQ_ENUM_231(x) x, BOOST_PP_SEQ_ENUM_230\n# define BOOST_PP_SEQ_ENUM_232(x) x, BOOST_PP_SEQ_ENUM_231\n# define BOOST_PP_SEQ_ENUM_233(x) x, BOOST_PP_SEQ_ENUM_232\n# define BOOST_PP_SEQ_ENUM_234(x) x, BOOST_PP_SEQ_ENUM_233\n# define BOOST_PP_SEQ_ENUM_235(x) x, BOOST_PP_SEQ_ENUM_234\n# define BOOST_PP_SEQ_ENUM_236(x) x, BOOST_PP_SEQ_ENUM_235\n# define BOOST_PP_SEQ_ENUM_237(x) x, BOOST_PP_SEQ_ENUM_236\n# define BOOST_PP_SEQ_ENUM_238(x) x, BOOST_PP_SEQ_ENUM_237\n# define BOOST_PP_SEQ_ENUM_239(x) x, BOOST_PP_SEQ_ENUM_238\n# define BOOST_PP_SEQ_ENUM_240(x) x, BOOST_PP_SEQ_ENUM_239\n# define BOOST_PP_SEQ_ENUM_241(x) x, BOOST_PP_SEQ_ENUM_240\n# define BOOST_PP_SEQ_ENUM_242(x) x, BOOST_PP_SEQ_ENUM_241\n# define BOOST_PP_SEQ_ENUM_243(x) x, BOOST_PP_SEQ_ENUM_242\n# define BOOST_PP_SEQ_ENUM_244(x) x, BOOST_PP_SEQ_ENUM_243\n# define BOOST_PP_SEQ_ENUM_245(x) x, BOOST_PP_SEQ_ENUM_244\n# define BOOST_PP_SEQ_ENUM_246(x) x, BOOST_PP_SEQ_ENUM_245\n# define BOOST_PP_SEQ_ENUM_247(x) x, BOOST_PP_SEQ_ENUM_246\n# define BOOST_PP_SEQ_ENUM_248(x) x, BOOST_PP_SEQ_ENUM_247\n# define BOOST_PP_SEQ_ENUM_249(x) x, BOOST_PP_SEQ_ENUM_248\n# define BOOST_PP_SEQ_ENUM_250(x) x, BOOST_PP_SEQ_ENUM_249\n# define BOOST_PP_SEQ_ENUM_251(x) x, BOOST_PP_SEQ_ENUM_250\n# define BOOST_PP_SEQ_ENUM_252(x) x, BOOST_PP_SEQ_ENUM_251\n# define BOOST_PP_SEQ_ENUM_253(x) x, BOOST_PP_SEQ_ENUM_252\n# define BOOST_PP_SEQ_ENUM_254(x) x, BOOST_PP_SEQ_ENUM_253\n# define BOOST_PP_SEQ_ENUM_255(x) x, BOOST_PP_SEQ_ENUM_254\n# define BOOST_PP_SEQ_ENUM_256(x) x, BOOST_PP_SEQ_ENUM_255\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/fold_left.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/control/if.hpp>\n# include <boost/preprocessor/debug/error.hpp>\n# include <boost/preprocessor/detail/auto_rec.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n#\n# /* BOOST_PP_SEQ_FOLD_LEFT */\n#\n# if 0\n#    define BOOST_PP_SEQ_FOLD_LEFT(op, state, seq) ...\n# endif\n#\n# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))\n# define BOOST_PP_SEQ_FOLD_LEFT_P(n) BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_CHECK_, BOOST_PP_SEQ_FOLD_LEFT_I_ ## n(BOOST_PP_SEQ_FOLD_LEFT_O, BOOST_PP_NIL, (nil), 1))\n# define BOOST_PP_SEQ_FOLD_LEFT_O(s, st, _) st\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_257(op, st, ss) BOOST_PP_ERROR(0x0005)\n# define BOOST_PP_SEQ_FOLD_LEFT_I_257(op, st, ss, sz) BOOST_PP_ERROR(0x0005)\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_NIL 1\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) 0\n# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_F(op, st, ss, sz) st\n#\n# define BOOST_PP_SEQ_FOLD_LEFT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n# else\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/for_each.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FOR_EACH */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(3, 2, x)))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I x\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I(BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq) (macro, data, BOOST_PP_SEQ_TAIL(seq))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_IM(r, BOOST_PP_TUPLE_REM_3 x)\n#    define BOOST_PP_SEQ_FOR_EACH_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_M_I(r, im)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_I(r, BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_M_I(r, macro, data, seq) macro(r, data, BOOST_PP_SEQ_HEAD(seq))\n#\n# /* BOOST_PP_SEQ_FOR_EACH_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/for_each_i.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP\n# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP\n#\n# include <boost/preprocessor/arithmetic/dec.hpp>\n# include <boost/preprocessor/arithmetic/inc.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/repetition/for.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/seq/size.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_FOR_EACH_I */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_P(r, x) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 2, x)))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I x\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I(BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_O_I(macro, data, seq, i) (macro, data, BOOST_PP_SEQ_TAIL(seq), BOOST_PP_INC(i))\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, BOOST_PP_TUPLE_REM_4 x)\n#    define BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, im)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))\n# endif\n#\n# define BOOST_PP_SEQ_FOR_EACH_I_M_I(r, macro, data, seq, i) macro(r, data, i, BOOST_PP_SEQ_HEAD(seq))\n#\n# /* BOOST_PP_SEQ_FOR_EACH_I_R */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n# else\n#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq)\n#    define BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/seq.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_SEQ_HPP\n# define BOOST_PREPROCESSOR_SEQ_SEQ_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/elem.hpp>\n#\n# /* BOOST_PP_SEQ_HEAD */\n#\n# define BOOST_PP_SEQ_HEAD(seq) BOOST_PP_SEQ_ELEM(0, seq)\n#\n# /* BOOST_PP_SEQ_TAIL */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_1((seq))\n#    define BOOST_PP_SEQ_TAIL_1(par) BOOST_PP_SEQ_TAIL_2 ## par\n#    define BOOST_PP_SEQ_TAIL_2(seq) BOOST_PP_SEQ_TAIL_I ## seq\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_ID(BOOST_PP_SEQ_TAIL_I seq)\n#    define BOOST_PP_SEQ_TAIL_ID(id) id\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_D(seq)\n#    define BOOST_PP_SEQ_TAIL_D(seq) BOOST_PP_SEQ_TAIL_I seq\n# else\n#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_I seq\n# endif\n#\n# define BOOST_PP_SEQ_TAIL_I(x)\n#\n# /* BOOST_PP_SEQ_NIL */\n#\n# define BOOST_PP_SEQ_NIL(x) (x)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_SIZE_HPP\n# define BOOST_PREPROCESSOR_SEQ_SIZE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I((seq))\n#    define BOOST_PP_SEQ_SIZE_I(par) BOOST_PP_SEQ_SIZE_II ## par\n#    define BOOST_PP_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 ## seq)\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)\n#    define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)\n# elif defined(__IBMC__) || defined(__IBMCPP__)\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq))\n# else\n#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)\n# endif\n#\n# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1\n# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2\n# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3\n# define BOOST_PP_SEQ_SIZE_3(_) BOOST_PP_SEQ_SIZE_4\n# define BOOST_PP_SEQ_SIZE_4(_) BOOST_PP_SEQ_SIZE_5\n# define BOOST_PP_SEQ_SIZE_5(_) BOOST_PP_SEQ_SIZE_6\n# define BOOST_PP_SEQ_SIZE_6(_) BOOST_PP_SEQ_SIZE_7\n# define BOOST_PP_SEQ_SIZE_7(_) BOOST_PP_SEQ_SIZE_8\n# define BOOST_PP_SEQ_SIZE_8(_) BOOST_PP_SEQ_SIZE_9\n# define BOOST_PP_SEQ_SIZE_9(_) BOOST_PP_SEQ_SIZE_10\n# define BOOST_PP_SEQ_SIZE_10(_) BOOST_PP_SEQ_SIZE_11\n# define BOOST_PP_SEQ_SIZE_11(_) BOOST_PP_SEQ_SIZE_12\n# define BOOST_PP_SEQ_SIZE_12(_) BOOST_PP_SEQ_SIZE_13\n# define BOOST_PP_SEQ_SIZE_13(_) BOOST_PP_SEQ_SIZE_14\n# define BOOST_PP_SEQ_SIZE_14(_) BOOST_PP_SEQ_SIZE_15\n# define BOOST_PP_SEQ_SIZE_15(_) BOOST_PP_SEQ_SIZE_16\n# define BOOST_PP_SEQ_SIZE_16(_) BOOST_PP_SEQ_SIZE_17\n# define BOOST_PP_SEQ_SIZE_17(_) BOOST_PP_SEQ_SIZE_18\n# define BOOST_PP_SEQ_SIZE_18(_) BOOST_PP_SEQ_SIZE_19\n# define BOOST_PP_SEQ_SIZE_19(_) BOOST_PP_SEQ_SIZE_20\n# define BOOST_PP_SEQ_SIZE_20(_) BOOST_PP_SEQ_SIZE_21\n# define BOOST_PP_SEQ_SIZE_21(_) BOOST_PP_SEQ_SIZE_22\n# define BOOST_PP_SEQ_SIZE_22(_) BOOST_PP_SEQ_SIZE_23\n# define BOOST_PP_SEQ_SIZE_23(_) BOOST_PP_SEQ_SIZE_24\n# define BOOST_PP_SEQ_SIZE_24(_) BOOST_PP_SEQ_SIZE_25\n# define BOOST_PP_SEQ_SIZE_25(_) BOOST_PP_SEQ_SIZE_26\n# define BOOST_PP_SEQ_SIZE_26(_) BOOST_PP_SEQ_SIZE_27\n# define BOOST_PP_SEQ_SIZE_27(_) BOOST_PP_SEQ_SIZE_28\n# define BOOST_PP_SEQ_SIZE_28(_) BOOST_PP_SEQ_SIZE_29\n# define BOOST_PP_SEQ_SIZE_29(_) BOOST_PP_SEQ_SIZE_30\n# define BOOST_PP_SEQ_SIZE_30(_) BOOST_PP_SEQ_SIZE_31\n# define BOOST_PP_SEQ_SIZE_31(_) BOOST_PP_SEQ_SIZE_32\n# define BOOST_PP_SEQ_SIZE_32(_) BOOST_PP_SEQ_SIZE_33\n# define BOOST_PP_SEQ_SIZE_33(_) BOOST_PP_SEQ_SIZE_34\n# define BOOST_PP_SEQ_SIZE_34(_) BOOST_PP_SEQ_SIZE_35\n# define BOOST_PP_SEQ_SIZE_35(_) BOOST_PP_SEQ_SIZE_36\n# define BOOST_PP_SEQ_SIZE_36(_) BOOST_PP_SEQ_SIZE_37\n# define BOOST_PP_SEQ_SIZE_37(_) BOOST_PP_SEQ_SIZE_38\n# define BOOST_PP_SEQ_SIZE_38(_) BOOST_PP_SEQ_SIZE_39\n# define BOOST_PP_SEQ_SIZE_39(_) BOOST_PP_SEQ_SIZE_40\n# define BOOST_PP_SEQ_SIZE_40(_) BOOST_PP_SEQ_SIZE_41\n# define BOOST_PP_SEQ_SIZE_41(_) BOOST_PP_SEQ_SIZE_42\n# define BOOST_PP_SEQ_SIZE_42(_) BOOST_PP_SEQ_SIZE_43\n# define BOOST_PP_SEQ_SIZE_43(_) BOOST_PP_SEQ_SIZE_44\n# define BOOST_PP_SEQ_SIZE_44(_) BOOST_PP_SEQ_SIZE_45\n# define BOOST_PP_SEQ_SIZE_45(_) BOOST_PP_SEQ_SIZE_46\n# define BOOST_PP_SEQ_SIZE_46(_) BOOST_PP_SEQ_SIZE_47\n# define BOOST_PP_SEQ_SIZE_47(_) BOOST_PP_SEQ_SIZE_48\n# define BOOST_PP_SEQ_SIZE_48(_) BOOST_PP_SEQ_SIZE_49\n# define BOOST_PP_SEQ_SIZE_49(_) BOOST_PP_SEQ_SIZE_50\n# define BOOST_PP_SEQ_SIZE_50(_) BOOST_PP_SEQ_SIZE_51\n# define BOOST_PP_SEQ_SIZE_51(_) BOOST_PP_SEQ_SIZE_52\n# define BOOST_PP_SEQ_SIZE_52(_) BOOST_PP_SEQ_SIZE_53\n# define BOOST_PP_SEQ_SIZE_53(_) BOOST_PP_SEQ_SIZE_54\n# define BOOST_PP_SEQ_SIZE_54(_) BOOST_PP_SEQ_SIZE_55\n# define BOOST_PP_SEQ_SIZE_55(_) BOOST_PP_SEQ_SIZE_56\n# define BOOST_PP_SEQ_SIZE_56(_) BOOST_PP_SEQ_SIZE_57\n# define BOOST_PP_SEQ_SIZE_57(_) BOOST_PP_SEQ_SIZE_58\n# define BOOST_PP_SEQ_SIZE_58(_) BOOST_PP_SEQ_SIZE_59\n# define BOOST_PP_SEQ_SIZE_59(_) BOOST_PP_SEQ_SIZE_60\n# define BOOST_PP_SEQ_SIZE_60(_) BOOST_PP_SEQ_SIZE_61\n# define BOOST_PP_SEQ_SIZE_61(_) BOOST_PP_SEQ_SIZE_62\n# define BOOST_PP_SEQ_SIZE_62(_) BOOST_PP_SEQ_SIZE_63\n# define BOOST_PP_SEQ_SIZE_63(_) BOOST_PP_SEQ_SIZE_64\n# define BOOST_PP_SEQ_SIZE_64(_) BOOST_PP_SEQ_SIZE_65\n# define BOOST_PP_SEQ_SIZE_65(_) BOOST_PP_SEQ_SIZE_66\n# define BOOST_PP_SEQ_SIZE_66(_) BOOST_PP_SEQ_SIZE_67\n# define BOOST_PP_SEQ_SIZE_67(_) BOOST_PP_SEQ_SIZE_68\n# define BOOST_PP_SEQ_SIZE_68(_) BOOST_PP_SEQ_SIZE_69\n# define BOOST_PP_SEQ_SIZE_69(_) BOOST_PP_SEQ_SIZE_70\n# define BOOST_PP_SEQ_SIZE_70(_) BOOST_PP_SEQ_SIZE_71\n# define BOOST_PP_SEQ_SIZE_71(_) BOOST_PP_SEQ_SIZE_72\n# define BOOST_PP_SEQ_SIZE_72(_) BOOST_PP_SEQ_SIZE_73\n# define BOOST_PP_SEQ_SIZE_73(_) BOOST_PP_SEQ_SIZE_74\n# define BOOST_PP_SEQ_SIZE_74(_) BOOST_PP_SEQ_SIZE_75\n# define BOOST_PP_SEQ_SIZE_75(_) BOOST_PP_SEQ_SIZE_76\n# define BOOST_PP_SEQ_SIZE_76(_) BOOST_PP_SEQ_SIZE_77\n# define BOOST_PP_SEQ_SIZE_77(_) BOOST_PP_SEQ_SIZE_78\n# define BOOST_PP_SEQ_SIZE_78(_) BOOST_PP_SEQ_SIZE_79\n# define BOOST_PP_SEQ_SIZE_79(_) BOOST_PP_SEQ_SIZE_80\n# define BOOST_PP_SEQ_SIZE_80(_) BOOST_PP_SEQ_SIZE_81\n# define BOOST_PP_SEQ_SIZE_81(_) BOOST_PP_SEQ_SIZE_82\n# define BOOST_PP_SEQ_SIZE_82(_) BOOST_PP_SEQ_SIZE_83\n# define BOOST_PP_SEQ_SIZE_83(_) BOOST_PP_SEQ_SIZE_84\n# define BOOST_PP_SEQ_SIZE_84(_) BOOST_PP_SEQ_SIZE_85\n# define BOOST_PP_SEQ_SIZE_85(_) BOOST_PP_SEQ_SIZE_86\n# define BOOST_PP_SEQ_SIZE_86(_) BOOST_PP_SEQ_SIZE_87\n# define BOOST_PP_SEQ_SIZE_87(_) BOOST_PP_SEQ_SIZE_88\n# define BOOST_PP_SEQ_SIZE_88(_) BOOST_PP_SEQ_SIZE_89\n# define BOOST_PP_SEQ_SIZE_89(_) BOOST_PP_SEQ_SIZE_90\n# define BOOST_PP_SEQ_SIZE_90(_) BOOST_PP_SEQ_SIZE_91\n# define BOOST_PP_SEQ_SIZE_91(_) BOOST_PP_SEQ_SIZE_92\n# define BOOST_PP_SEQ_SIZE_92(_) BOOST_PP_SEQ_SIZE_93\n# define BOOST_PP_SEQ_SIZE_93(_) BOOST_PP_SEQ_SIZE_94\n# define BOOST_PP_SEQ_SIZE_94(_) BOOST_PP_SEQ_SIZE_95\n# define BOOST_PP_SEQ_SIZE_95(_) BOOST_PP_SEQ_SIZE_96\n# define BOOST_PP_SEQ_SIZE_96(_) BOOST_PP_SEQ_SIZE_97\n# define BOOST_PP_SEQ_SIZE_97(_) BOOST_PP_SEQ_SIZE_98\n# define BOOST_PP_SEQ_SIZE_98(_) BOOST_PP_SEQ_SIZE_99\n# define BOOST_PP_SEQ_SIZE_99(_) BOOST_PP_SEQ_SIZE_100\n# define BOOST_PP_SEQ_SIZE_100(_) BOOST_PP_SEQ_SIZE_101\n# define BOOST_PP_SEQ_SIZE_101(_) BOOST_PP_SEQ_SIZE_102\n# define BOOST_PP_SEQ_SIZE_102(_) BOOST_PP_SEQ_SIZE_103\n# define BOOST_PP_SEQ_SIZE_103(_) BOOST_PP_SEQ_SIZE_104\n# define BOOST_PP_SEQ_SIZE_104(_) BOOST_PP_SEQ_SIZE_105\n# define BOOST_PP_SEQ_SIZE_105(_) BOOST_PP_SEQ_SIZE_106\n# define BOOST_PP_SEQ_SIZE_106(_) BOOST_PP_SEQ_SIZE_107\n# define BOOST_PP_SEQ_SIZE_107(_) BOOST_PP_SEQ_SIZE_108\n# define BOOST_PP_SEQ_SIZE_108(_) BOOST_PP_SEQ_SIZE_109\n# define BOOST_PP_SEQ_SIZE_109(_) BOOST_PP_SEQ_SIZE_110\n# define BOOST_PP_SEQ_SIZE_110(_) BOOST_PP_SEQ_SIZE_111\n# define BOOST_PP_SEQ_SIZE_111(_) BOOST_PP_SEQ_SIZE_112\n# define BOOST_PP_SEQ_SIZE_112(_) BOOST_PP_SEQ_SIZE_113\n# define BOOST_PP_SEQ_SIZE_113(_) BOOST_PP_SEQ_SIZE_114\n# define BOOST_PP_SEQ_SIZE_114(_) BOOST_PP_SEQ_SIZE_115\n# define BOOST_PP_SEQ_SIZE_115(_) BOOST_PP_SEQ_SIZE_116\n# define BOOST_PP_SEQ_SIZE_116(_) BOOST_PP_SEQ_SIZE_117\n# define BOOST_PP_SEQ_SIZE_117(_) BOOST_PP_SEQ_SIZE_118\n# define BOOST_PP_SEQ_SIZE_118(_) BOOST_PP_SEQ_SIZE_119\n# define BOOST_PP_SEQ_SIZE_119(_) BOOST_PP_SEQ_SIZE_120\n# define BOOST_PP_SEQ_SIZE_120(_) BOOST_PP_SEQ_SIZE_121\n# define BOOST_PP_SEQ_SIZE_121(_) BOOST_PP_SEQ_SIZE_122\n# define BOOST_PP_SEQ_SIZE_122(_) BOOST_PP_SEQ_SIZE_123\n# define BOOST_PP_SEQ_SIZE_123(_) BOOST_PP_SEQ_SIZE_124\n# define BOOST_PP_SEQ_SIZE_124(_) BOOST_PP_SEQ_SIZE_125\n# define BOOST_PP_SEQ_SIZE_125(_) BOOST_PP_SEQ_SIZE_126\n# define BOOST_PP_SEQ_SIZE_126(_) BOOST_PP_SEQ_SIZE_127\n# define BOOST_PP_SEQ_SIZE_127(_) BOOST_PP_SEQ_SIZE_128\n# define BOOST_PP_SEQ_SIZE_128(_) BOOST_PP_SEQ_SIZE_129\n# define BOOST_PP_SEQ_SIZE_129(_) BOOST_PP_SEQ_SIZE_130\n# define BOOST_PP_SEQ_SIZE_130(_) BOOST_PP_SEQ_SIZE_131\n# define BOOST_PP_SEQ_SIZE_131(_) BOOST_PP_SEQ_SIZE_132\n# define BOOST_PP_SEQ_SIZE_132(_) BOOST_PP_SEQ_SIZE_133\n# define BOOST_PP_SEQ_SIZE_133(_) BOOST_PP_SEQ_SIZE_134\n# define BOOST_PP_SEQ_SIZE_134(_) BOOST_PP_SEQ_SIZE_135\n# define BOOST_PP_SEQ_SIZE_135(_) BOOST_PP_SEQ_SIZE_136\n# define BOOST_PP_SEQ_SIZE_136(_) BOOST_PP_SEQ_SIZE_137\n# define BOOST_PP_SEQ_SIZE_137(_) BOOST_PP_SEQ_SIZE_138\n# define BOOST_PP_SEQ_SIZE_138(_) BOOST_PP_SEQ_SIZE_139\n# define BOOST_PP_SEQ_SIZE_139(_) BOOST_PP_SEQ_SIZE_140\n# define BOOST_PP_SEQ_SIZE_140(_) BOOST_PP_SEQ_SIZE_141\n# define BOOST_PP_SEQ_SIZE_141(_) BOOST_PP_SEQ_SIZE_142\n# define BOOST_PP_SEQ_SIZE_142(_) BOOST_PP_SEQ_SIZE_143\n# define BOOST_PP_SEQ_SIZE_143(_) BOOST_PP_SEQ_SIZE_144\n# define BOOST_PP_SEQ_SIZE_144(_) BOOST_PP_SEQ_SIZE_145\n# define BOOST_PP_SEQ_SIZE_145(_) BOOST_PP_SEQ_SIZE_146\n# define BOOST_PP_SEQ_SIZE_146(_) BOOST_PP_SEQ_SIZE_147\n# define BOOST_PP_SEQ_SIZE_147(_) BOOST_PP_SEQ_SIZE_148\n# define BOOST_PP_SEQ_SIZE_148(_) BOOST_PP_SEQ_SIZE_149\n# define BOOST_PP_SEQ_SIZE_149(_) BOOST_PP_SEQ_SIZE_150\n# define BOOST_PP_SEQ_SIZE_150(_) BOOST_PP_SEQ_SIZE_151\n# define BOOST_PP_SEQ_SIZE_151(_) BOOST_PP_SEQ_SIZE_152\n# define BOOST_PP_SEQ_SIZE_152(_) BOOST_PP_SEQ_SIZE_153\n# define BOOST_PP_SEQ_SIZE_153(_) BOOST_PP_SEQ_SIZE_154\n# define BOOST_PP_SEQ_SIZE_154(_) BOOST_PP_SEQ_SIZE_155\n# define BOOST_PP_SEQ_SIZE_155(_) BOOST_PP_SEQ_SIZE_156\n# define BOOST_PP_SEQ_SIZE_156(_) BOOST_PP_SEQ_SIZE_157\n# define BOOST_PP_SEQ_SIZE_157(_) BOOST_PP_SEQ_SIZE_158\n# define BOOST_PP_SEQ_SIZE_158(_) BOOST_PP_SEQ_SIZE_159\n# define BOOST_PP_SEQ_SIZE_159(_) BOOST_PP_SEQ_SIZE_160\n# define BOOST_PP_SEQ_SIZE_160(_) BOOST_PP_SEQ_SIZE_161\n# define BOOST_PP_SEQ_SIZE_161(_) BOOST_PP_SEQ_SIZE_162\n# define BOOST_PP_SEQ_SIZE_162(_) BOOST_PP_SEQ_SIZE_163\n# define BOOST_PP_SEQ_SIZE_163(_) BOOST_PP_SEQ_SIZE_164\n# define BOOST_PP_SEQ_SIZE_164(_) BOOST_PP_SEQ_SIZE_165\n# define BOOST_PP_SEQ_SIZE_165(_) BOOST_PP_SEQ_SIZE_166\n# define BOOST_PP_SEQ_SIZE_166(_) BOOST_PP_SEQ_SIZE_167\n# define BOOST_PP_SEQ_SIZE_167(_) BOOST_PP_SEQ_SIZE_168\n# define BOOST_PP_SEQ_SIZE_168(_) BOOST_PP_SEQ_SIZE_169\n# define BOOST_PP_SEQ_SIZE_169(_) BOOST_PP_SEQ_SIZE_170\n# define BOOST_PP_SEQ_SIZE_170(_) BOOST_PP_SEQ_SIZE_171\n# define BOOST_PP_SEQ_SIZE_171(_) BOOST_PP_SEQ_SIZE_172\n# define BOOST_PP_SEQ_SIZE_172(_) BOOST_PP_SEQ_SIZE_173\n# define BOOST_PP_SEQ_SIZE_173(_) BOOST_PP_SEQ_SIZE_174\n# define BOOST_PP_SEQ_SIZE_174(_) BOOST_PP_SEQ_SIZE_175\n# define BOOST_PP_SEQ_SIZE_175(_) BOOST_PP_SEQ_SIZE_176\n# define BOOST_PP_SEQ_SIZE_176(_) BOOST_PP_SEQ_SIZE_177\n# define BOOST_PP_SEQ_SIZE_177(_) BOOST_PP_SEQ_SIZE_178\n# define BOOST_PP_SEQ_SIZE_178(_) BOOST_PP_SEQ_SIZE_179\n# define BOOST_PP_SEQ_SIZE_179(_) BOOST_PP_SEQ_SIZE_180\n# define BOOST_PP_SEQ_SIZE_180(_) BOOST_PP_SEQ_SIZE_181\n# define BOOST_PP_SEQ_SIZE_181(_) BOOST_PP_SEQ_SIZE_182\n# define BOOST_PP_SEQ_SIZE_182(_) BOOST_PP_SEQ_SIZE_183\n# define BOOST_PP_SEQ_SIZE_183(_) BOOST_PP_SEQ_SIZE_184\n# define BOOST_PP_SEQ_SIZE_184(_) BOOST_PP_SEQ_SIZE_185\n# define BOOST_PP_SEQ_SIZE_185(_) BOOST_PP_SEQ_SIZE_186\n# define BOOST_PP_SEQ_SIZE_186(_) BOOST_PP_SEQ_SIZE_187\n# define BOOST_PP_SEQ_SIZE_187(_) BOOST_PP_SEQ_SIZE_188\n# define BOOST_PP_SEQ_SIZE_188(_) BOOST_PP_SEQ_SIZE_189\n# define BOOST_PP_SEQ_SIZE_189(_) BOOST_PP_SEQ_SIZE_190\n# define BOOST_PP_SEQ_SIZE_190(_) BOOST_PP_SEQ_SIZE_191\n# define BOOST_PP_SEQ_SIZE_191(_) BOOST_PP_SEQ_SIZE_192\n# define BOOST_PP_SEQ_SIZE_192(_) BOOST_PP_SEQ_SIZE_193\n# define BOOST_PP_SEQ_SIZE_193(_) BOOST_PP_SEQ_SIZE_194\n# define BOOST_PP_SEQ_SIZE_194(_) BOOST_PP_SEQ_SIZE_195\n# define BOOST_PP_SEQ_SIZE_195(_) BOOST_PP_SEQ_SIZE_196\n# define BOOST_PP_SEQ_SIZE_196(_) BOOST_PP_SEQ_SIZE_197\n# define BOOST_PP_SEQ_SIZE_197(_) BOOST_PP_SEQ_SIZE_198\n# define BOOST_PP_SEQ_SIZE_198(_) BOOST_PP_SEQ_SIZE_199\n# define BOOST_PP_SEQ_SIZE_199(_) BOOST_PP_SEQ_SIZE_200\n# define BOOST_PP_SEQ_SIZE_200(_) BOOST_PP_SEQ_SIZE_201\n# define BOOST_PP_SEQ_SIZE_201(_) BOOST_PP_SEQ_SIZE_202\n# define BOOST_PP_SEQ_SIZE_202(_) BOOST_PP_SEQ_SIZE_203\n# define BOOST_PP_SEQ_SIZE_203(_) BOOST_PP_SEQ_SIZE_204\n# define BOOST_PP_SEQ_SIZE_204(_) BOOST_PP_SEQ_SIZE_205\n# define BOOST_PP_SEQ_SIZE_205(_) BOOST_PP_SEQ_SIZE_206\n# define BOOST_PP_SEQ_SIZE_206(_) BOOST_PP_SEQ_SIZE_207\n# define BOOST_PP_SEQ_SIZE_207(_) BOOST_PP_SEQ_SIZE_208\n# define BOOST_PP_SEQ_SIZE_208(_) BOOST_PP_SEQ_SIZE_209\n# define BOOST_PP_SEQ_SIZE_209(_) BOOST_PP_SEQ_SIZE_210\n# define BOOST_PP_SEQ_SIZE_210(_) BOOST_PP_SEQ_SIZE_211\n# define BOOST_PP_SEQ_SIZE_211(_) BOOST_PP_SEQ_SIZE_212\n# define BOOST_PP_SEQ_SIZE_212(_) BOOST_PP_SEQ_SIZE_213\n# define BOOST_PP_SEQ_SIZE_213(_) BOOST_PP_SEQ_SIZE_214\n# define BOOST_PP_SEQ_SIZE_214(_) BOOST_PP_SEQ_SIZE_215\n# define BOOST_PP_SEQ_SIZE_215(_) BOOST_PP_SEQ_SIZE_216\n# define BOOST_PP_SEQ_SIZE_216(_) BOOST_PP_SEQ_SIZE_217\n# define BOOST_PP_SEQ_SIZE_217(_) BOOST_PP_SEQ_SIZE_218\n# define BOOST_PP_SEQ_SIZE_218(_) BOOST_PP_SEQ_SIZE_219\n# define BOOST_PP_SEQ_SIZE_219(_) BOOST_PP_SEQ_SIZE_220\n# define BOOST_PP_SEQ_SIZE_220(_) BOOST_PP_SEQ_SIZE_221\n# define BOOST_PP_SEQ_SIZE_221(_) BOOST_PP_SEQ_SIZE_222\n# define BOOST_PP_SEQ_SIZE_222(_) BOOST_PP_SEQ_SIZE_223\n# define BOOST_PP_SEQ_SIZE_223(_) BOOST_PP_SEQ_SIZE_224\n# define BOOST_PP_SEQ_SIZE_224(_) BOOST_PP_SEQ_SIZE_225\n# define BOOST_PP_SEQ_SIZE_225(_) BOOST_PP_SEQ_SIZE_226\n# define BOOST_PP_SEQ_SIZE_226(_) BOOST_PP_SEQ_SIZE_227\n# define BOOST_PP_SEQ_SIZE_227(_) BOOST_PP_SEQ_SIZE_228\n# define BOOST_PP_SEQ_SIZE_228(_) BOOST_PP_SEQ_SIZE_229\n# define BOOST_PP_SEQ_SIZE_229(_) BOOST_PP_SEQ_SIZE_230\n# define BOOST_PP_SEQ_SIZE_230(_) BOOST_PP_SEQ_SIZE_231\n# define BOOST_PP_SEQ_SIZE_231(_) BOOST_PP_SEQ_SIZE_232\n# define BOOST_PP_SEQ_SIZE_232(_) BOOST_PP_SEQ_SIZE_233\n# define BOOST_PP_SEQ_SIZE_233(_) BOOST_PP_SEQ_SIZE_234\n# define BOOST_PP_SEQ_SIZE_234(_) BOOST_PP_SEQ_SIZE_235\n# define BOOST_PP_SEQ_SIZE_235(_) BOOST_PP_SEQ_SIZE_236\n# define BOOST_PP_SEQ_SIZE_236(_) BOOST_PP_SEQ_SIZE_237\n# define BOOST_PP_SEQ_SIZE_237(_) BOOST_PP_SEQ_SIZE_238\n# define BOOST_PP_SEQ_SIZE_238(_) BOOST_PP_SEQ_SIZE_239\n# define BOOST_PP_SEQ_SIZE_239(_) BOOST_PP_SEQ_SIZE_240\n# define BOOST_PP_SEQ_SIZE_240(_) BOOST_PP_SEQ_SIZE_241\n# define BOOST_PP_SEQ_SIZE_241(_) BOOST_PP_SEQ_SIZE_242\n# define BOOST_PP_SEQ_SIZE_242(_) BOOST_PP_SEQ_SIZE_243\n# define BOOST_PP_SEQ_SIZE_243(_) BOOST_PP_SEQ_SIZE_244\n# define BOOST_PP_SEQ_SIZE_244(_) BOOST_PP_SEQ_SIZE_245\n# define BOOST_PP_SEQ_SIZE_245(_) BOOST_PP_SEQ_SIZE_246\n# define BOOST_PP_SEQ_SIZE_246(_) BOOST_PP_SEQ_SIZE_247\n# define BOOST_PP_SEQ_SIZE_247(_) BOOST_PP_SEQ_SIZE_248\n# define BOOST_PP_SEQ_SIZE_248(_) BOOST_PP_SEQ_SIZE_249\n# define BOOST_PP_SEQ_SIZE_249(_) BOOST_PP_SEQ_SIZE_250\n# define BOOST_PP_SEQ_SIZE_250(_) BOOST_PP_SEQ_SIZE_251\n# define BOOST_PP_SEQ_SIZE_251(_) BOOST_PP_SEQ_SIZE_252\n# define BOOST_PP_SEQ_SIZE_252(_) BOOST_PP_SEQ_SIZE_253\n# define BOOST_PP_SEQ_SIZE_253(_) BOOST_PP_SEQ_SIZE_254\n# define BOOST_PP_SEQ_SIZE_254(_) BOOST_PP_SEQ_SIZE_255\n# define BOOST_PP_SEQ_SIZE_255(_) BOOST_PP_SEQ_SIZE_256\n# define BOOST_PP_SEQ_SIZE_256(_) BOOST_PP_SEQ_SIZE_257\n#\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_0 0\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_1 1\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_2 2\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 4\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_5 5\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_6 6\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_7 7\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_8 8\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_9 9\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_10 10\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_11 11\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_12 12\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_13 13\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_14 14\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_15 15\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_16 16\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_17 17\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_18 18\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_19 19\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_20 20\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_21 21\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_22 22\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_23 23\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_24 24\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_25 25\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_26 26\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_27 27\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_28 28\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_29 29\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_30 30\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_31 31\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_32 32\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_33 33\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_34 34\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_35 35\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_36 36\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_37 37\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_38 38\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_39 39\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_40 40\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_41 41\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_42 42\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_43 43\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_44 44\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_45 45\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_46 46\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_47 47\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_48 48\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_49 49\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_50 50\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_51 51\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_52 52\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_53 53\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_54 54\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_55 55\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_56 56\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_57 57\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_58 58\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_59 59\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_60 60\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_61 61\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_62 62\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_63 63\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_64 64\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_65 65\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_66 66\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_67 67\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_68 68\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_69 69\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_70 70\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_71 71\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_72 72\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_73 73\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_74 74\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_75 75\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_76 76\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_77 77\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_78 78\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_79 79\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_80 80\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_81 81\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_82 82\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_83 83\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_84 84\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_85 85\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_86 86\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_87 87\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_88 88\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_89 89\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_90 90\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_91 91\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_92 92\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_93 93\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_94 94\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_95 95\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_96 96\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_97 97\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_98 98\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_99 99\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_100 100\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_101 101\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_102 102\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_103 103\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_104 104\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_105 105\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_106 106\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_107 107\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_108 108\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_109 109\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_110 110\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_111 111\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_112 112\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_113 113\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_114 114\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_115 115\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_116 116\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_117 117\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_118 118\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_119 119\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_120 120\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_121 121\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_122 122\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_123 123\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_124 124\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_125 125\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_126 126\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_127 127\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_128 128\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_129 129\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_130 130\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_131 131\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_132 132\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_133 133\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_134 134\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_135 135\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_136 136\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_137 137\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_138 138\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_139 139\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_140 140\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_141 141\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_142 142\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_143 143\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_144 144\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_145 145\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_146 146\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_147 147\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_148 148\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_149 149\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_150 150\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_151 151\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_152 152\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_153 153\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_154 154\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_155 155\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_156 156\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_157 157\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_158 158\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_159 159\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_160 160\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_161 161\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_162 162\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_163 163\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_164 164\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_165 165\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_166 166\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_167 167\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_168 168\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_169 169\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_170 170\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_171 171\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_172 172\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_173 173\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_174 174\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_175 175\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_176 176\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_177 177\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_178 178\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_179 179\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_180 180\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_181 181\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_182 182\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_183 183\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_184 184\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_185 185\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_186 186\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_187 187\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_188 188\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_189 189\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_190 190\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_191 191\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_192 192\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_193 193\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_194 194\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_195 195\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_196 196\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_197 197\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_198 198\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_199 199\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_200 200\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_201 201\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_202 202\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_203 203\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_204 204\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_205 205\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_206 206\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_207 207\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_208 208\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_209 209\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_210 210\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_211 211\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_212 212\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_213 213\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_214 214\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_215 215\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_216 216\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_217 217\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_218 218\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_219 219\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_220 220\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_221 221\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_222 222\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_223 223\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_224 224\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_225 225\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_226 226\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_227 227\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_228 228\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_229 229\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_230 230\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_231 231\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_232 232\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_233 233\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_234 234\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_235 235\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_236 236\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_237 237\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_238 238\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_239 239\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_240 240\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_241 241\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_242 242\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_243 243\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_244 244\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_245 245\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_246 246\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_247 247\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_248 248\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_249 249\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_250 250\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_251 251\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_252 252\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_253 253\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_254 254\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_255 255\n# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_256 256\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/seq/transform.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP\n# define BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/seq/fold_left.hpp>\n# include <boost/preprocessor/seq/seq.hpp>\n# include <boost/preprocessor/tuple/elem.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n#\n# /* BOOST_PP_SEQ_TRANSFORM */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TRANSFORM_I(op, data, seq)\n#    define BOOST_PP_SEQ_TRANSFORM_I(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# endif\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()\n#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_IM(s, BOOST_PP_TUPLE_REM_3 state, elem)\n#    define BOOST_PP_SEQ_TRANSFORM_O_IM(s, im, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, im, elem)\n# else\n#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, state), BOOST_PP_TUPLE_ELEM(3, 1, state), BOOST_PP_TUPLE_ELEM(3, 2, state), elem)\n# endif\n#\n# define BOOST_PP_SEQ_TRANSFORM_O_I(s, op, data, res, elem) (op, data, res (op(s, data, elem)))\n#\n# /* BOOST_PP_SEQ_TRANSFORM_S */\n#\n# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# else\n#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq)\n#    define BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/slot/detail/def.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP\n# define BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP\n#\n# /* BOOST_PP_SLOT_OFFSET_x */\n#\n# define BOOST_PP_SLOT_OFFSET_10(x) (x) % 1000000000UL\n# define BOOST_PP_SLOT_OFFSET_9(x) BOOST_PP_SLOT_OFFSET_10(x) % 100000000UL\n# define BOOST_PP_SLOT_OFFSET_8(x) BOOST_PP_SLOT_OFFSET_9(x) % 10000000UL\n# define BOOST_PP_SLOT_OFFSET_7(x) BOOST_PP_SLOT_OFFSET_8(x) % 1000000UL\n# define BOOST_PP_SLOT_OFFSET_6(x) BOOST_PP_SLOT_OFFSET_7(x) % 100000UL\n# define BOOST_PP_SLOT_OFFSET_5(x) BOOST_PP_SLOT_OFFSET_6(x) % 10000UL\n# define BOOST_PP_SLOT_OFFSET_4(x) BOOST_PP_SLOT_OFFSET_5(x) % 1000UL\n# define BOOST_PP_SLOT_OFFSET_3(x) BOOST_PP_SLOT_OFFSET_4(x) % 100UL\n# define BOOST_PP_SLOT_OFFSET_2(x) BOOST_PP_SLOT_OFFSET_3(x) % 10UL\n#\n# /* BOOST_PP_SLOT_CC_x */\n#\n# define BOOST_PP_SLOT_CC_2(a, b) BOOST_PP_SLOT_CC_2_D(a, b)\n# define BOOST_PP_SLOT_CC_3(a, b, c) BOOST_PP_SLOT_CC_3_D(a, b, c)\n# define BOOST_PP_SLOT_CC_4(a, b, c, d) BOOST_PP_SLOT_CC_4_D(a, b, c, d)\n# define BOOST_PP_SLOT_CC_5(a, b, c, d, e) BOOST_PP_SLOT_CC_5_D(a, b, c, d, e)\n# define BOOST_PP_SLOT_CC_6(a, b, c, d, e, f) BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f)\n# define BOOST_PP_SLOT_CC_7(a, b, c, d, e, f, g) BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g)\n# define BOOST_PP_SLOT_CC_8(a, b, c, d, e, f, g, h) BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h)\n# define BOOST_PP_SLOT_CC_9(a, b, c, d, e, f, g, h, i) BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i)\n# define BOOST_PP_SLOT_CC_10(a, b, c, d, e, f, g, h, i, j) BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j)\n#\n# define BOOST_PP_SLOT_CC_2_D(a, b) a ## b\n# define BOOST_PP_SLOT_CC_3_D(a, b, c) a ## b ## c\n# define BOOST_PP_SLOT_CC_4_D(a, b, c, d) a ## b ## c ## d\n# define BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) a ## b ## c ## d ## e\n# define BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) a ## b ## c ## d ## e ## f\n# define BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) a ## b ## c ## d ## e ## f ## g\n# define BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) a ## b ## c ## d ## e ## f ## g ## h\n# define BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) a ## b ## c ## d ## e ## f ## g ## h ## i\n# define BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) a ## b ## c ## d ## e ## f ## g ## h ## i ## j\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/slot/detail/shared.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PP_VALUE\n#    error BOOST_PP_ERROR:  BOOST_PP_VALUE is not defined\n# endif\n#\n# undef BOOST_PP_SLOT_TEMP_1\n# undef BOOST_PP_SLOT_TEMP_2\n# undef BOOST_PP_SLOT_TEMP_3\n# undef BOOST_PP_SLOT_TEMP_4\n# undef BOOST_PP_SLOT_TEMP_5\n# undef BOOST_PP_SLOT_TEMP_6\n# undef BOOST_PP_SLOT_TEMP_7\n# undef BOOST_PP_SLOT_TEMP_8\n# undef BOOST_PP_SLOT_TEMP_9\n# undef BOOST_PP_SLOT_TEMP_10\n#\n# if (BOOST_PP_VALUE) / 1000000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_10 0\n# elif (BOOST_PP_VALUE) / 1000000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_10 1\n# elif (BOOST_PP_VALUE) / 1000000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_10 2\n# elif (BOOST_PP_VALUE) / 1000000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_10 3\n# elif (BOOST_PP_VALUE) / 1000000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_10 4\n# elif (BOOST_PP_VALUE) / 1000000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_10 5\n# elif (BOOST_PP_VALUE) / 1000000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_10 6\n# elif (BOOST_PP_VALUE) / 1000000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_10 7\n# elif (BOOST_PP_VALUE) / 1000000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_10 8\n# elif (BOOST_PP_VALUE) / 1000000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_10 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_9 0\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_9 1\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_9 2\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_9 3\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_9 4\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_9 5\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_9 6\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_9 7\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_9 8\n# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_9 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_8 0\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_8 1\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_8 2\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_8 3\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_8 4\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_8 5\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_8 6\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_8 7\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_8 8\n# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_8 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 0\n#    define BOOST_PP_SLOT_TEMP_7 0\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 1\n#    define BOOST_PP_SLOT_TEMP_7 1\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 2\n#    define BOOST_PP_SLOT_TEMP_7 2\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 3\n#    define BOOST_PP_SLOT_TEMP_7 3\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 4\n#    define BOOST_PP_SLOT_TEMP_7 4\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 5\n#    define BOOST_PP_SLOT_TEMP_7 5\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 6\n#    define BOOST_PP_SLOT_TEMP_7 6\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 7\n#    define BOOST_PP_SLOT_TEMP_7 7\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 8\n#    define BOOST_PP_SLOT_TEMP_7 8\n# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 9\n#    define BOOST_PP_SLOT_TEMP_7 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 0\n#    define BOOST_PP_SLOT_TEMP_6 0\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 1\n#    define BOOST_PP_SLOT_TEMP_6 1\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 2\n#    define BOOST_PP_SLOT_TEMP_6 2\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 3\n#    define BOOST_PP_SLOT_TEMP_6 3\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 4\n#    define BOOST_PP_SLOT_TEMP_6 4\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 5\n#    define BOOST_PP_SLOT_TEMP_6 5\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 6\n#    define BOOST_PP_SLOT_TEMP_6 6\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 7\n#    define BOOST_PP_SLOT_TEMP_6 7\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 8\n#    define BOOST_PP_SLOT_TEMP_6 8\n# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 9\n#    define BOOST_PP_SLOT_TEMP_6 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 0\n#    define BOOST_PP_SLOT_TEMP_5 0\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 1\n#    define BOOST_PP_SLOT_TEMP_5 1\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 2\n#    define BOOST_PP_SLOT_TEMP_5 2\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 3\n#    define BOOST_PP_SLOT_TEMP_5 3\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 4\n#    define BOOST_PP_SLOT_TEMP_5 4\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 5\n#    define BOOST_PP_SLOT_TEMP_5 5\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 6\n#    define BOOST_PP_SLOT_TEMP_5 6\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 7\n#    define BOOST_PP_SLOT_TEMP_5 7\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 8\n#    define BOOST_PP_SLOT_TEMP_5 8\n# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 9\n#    define BOOST_PP_SLOT_TEMP_5 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 0\n#    define BOOST_PP_SLOT_TEMP_4 0\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 1\n#    define BOOST_PP_SLOT_TEMP_4 1\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 2\n#    define BOOST_PP_SLOT_TEMP_4 2\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 3\n#    define BOOST_PP_SLOT_TEMP_4 3\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 4\n#    define BOOST_PP_SLOT_TEMP_4 4\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 5\n#    define BOOST_PP_SLOT_TEMP_4 5\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 6\n#    define BOOST_PP_SLOT_TEMP_4 6\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 7\n#    define BOOST_PP_SLOT_TEMP_4 7\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 8\n#    define BOOST_PP_SLOT_TEMP_4 8\n# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 9\n#    define BOOST_PP_SLOT_TEMP_4 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 0\n#    define BOOST_PP_SLOT_TEMP_3 0\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 1\n#    define BOOST_PP_SLOT_TEMP_3 1\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 2\n#    define BOOST_PP_SLOT_TEMP_3 2\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 3\n#    define BOOST_PP_SLOT_TEMP_3 3\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 4\n#    define BOOST_PP_SLOT_TEMP_3 4\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 5\n#    define BOOST_PP_SLOT_TEMP_3 5\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 6\n#    define BOOST_PP_SLOT_TEMP_3 6\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 7\n#    define BOOST_PP_SLOT_TEMP_3 7\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 8\n#    define BOOST_PP_SLOT_TEMP_3 8\n# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 9\n#    define BOOST_PP_SLOT_TEMP_3 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 0\n#    define BOOST_PP_SLOT_TEMP_2 0\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 1\n#    define BOOST_PP_SLOT_TEMP_2 1\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 2\n#    define BOOST_PP_SLOT_TEMP_2 2\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 3\n#    define BOOST_PP_SLOT_TEMP_2 3\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 4\n#    define BOOST_PP_SLOT_TEMP_2 4\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 5\n#    define BOOST_PP_SLOT_TEMP_2 5\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 6\n#    define BOOST_PP_SLOT_TEMP_2 6\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 7\n#    define BOOST_PP_SLOT_TEMP_2 7\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 8\n#    define BOOST_PP_SLOT_TEMP_2 8\n# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 9\n#    define BOOST_PP_SLOT_TEMP_2 9\n# endif\n#\n# if BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 0\n#    define BOOST_PP_SLOT_TEMP_1 0\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 1\n#    define BOOST_PP_SLOT_TEMP_1 1\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 2\n#    define BOOST_PP_SLOT_TEMP_1 2\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 3\n#    define BOOST_PP_SLOT_TEMP_1 3\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 4\n#    define BOOST_PP_SLOT_TEMP_1 4\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 5\n#    define BOOST_PP_SLOT_TEMP_1 5\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 6\n#    define BOOST_PP_SLOT_TEMP_1 6\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 7\n#    define BOOST_PP_SLOT_TEMP_1 7\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 8\n#    define BOOST_PP_SLOT_TEMP_1 8\n# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 9\n#    define BOOST_PP_SLOT_TEMP_1 9\n# endif\n#\n# undef BOOST_PP_VALUE\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/slot/slot.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002.\n#  *     Distributed under the Boost Software License, Version 1.0. (See\n#  *     accompanying file LICENSE_1_0.txt or copy at\n#  *     http://www.boost.org/LICENSE_1_0.txt)\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_SLOT_SLOT_HPP\n# define BOOST_PREPROCESSOR_SLOT_SLOT_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/slot/detail/def.hpp>\n#\n# /* BOOST_PP_ASSIGN_SLOT */\n#\n# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i)\n#\n# define BOOST_PP_ASSIGN_SLOT_1 <boost/preprocessor/slot/detail/slot1.hpp>\n# define BOOST_PP_ASSIGN_SLOT_2 <boost/preprocessor/slot/detail/slot2.hpp>\n# define BOOST_PP_ASSIGN_SLOT_3 <boost/preprocessor/slot/detail/slot3.hpp>\n# define BOOST_PP_ASSIGN_SLOT_4 <boost/preprocessor/slot/detail/slot4.hpp>\n# define BOOST_PP_ASSIGN_SLOT_5 <boost/preprocessor/slot/detail/slot5.hpp>\n#\n# /* BOOST_PP_SLOT */\n#\n# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)()\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/stringize.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP\n# define BOOST_PREPROCESSOR_STRINGIZE_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_STRINGIZE */\n#\n# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_A((text))\n#    define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_I arg\n# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_OO((text))\n#    define BOOST_PP_STRINGIZE_OO(par) BOOST_PP_STRINGIZE_I ## par\n# else\n#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_I(text)\n# endif\n#\n# define BOOST_PP_STRINGIZE_I(text) #text\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/tuple/eat.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP\n# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP\n#\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_EAT */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_EAT(...)\n# else\n#    define BOOST_PP_EAT(x)\n# endif\n#\n# /* BOOST_PP_TUPLE_EAT */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_TUPLE_EAT(size) BOOST_PP_EAT\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_I(size)\n#    else\n#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_OO((size))\n#        define BOOST_PP_TUPLE_EAT_OO(par) BOOST_PP_TUPLE_EAT_I ## par\n#    endif\n#    define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size\n# endif\n# define BOOST_PP_TUPLE_EAT_1(e0)\n# define BOOST_PP_TUPLE_EAT_2(e0, e1)\n# define BOOST_PP_TUPLE_EAT_3(e0, e1, e2)\n# define BOOST_PP_TUPLE_EAT_4(e0, e1, e2, e3)\n# define BOOST_PP_TUPLE_EAT_5(e0, e1, e2, e3, e4)\n# define BOOST_PP_TUPLE_EAT_6(e0, e1, e2, e3, e4, e5)\n# define BOOST_PP_TUPLE_EAT_7(e0, e1, e2, e3, e4, e5, e6)\n# define BOOST_PP_TUPLE_EAT_8(e0, e1, e2, e3, e4, e5, e6, e7)\n# define BOOST_PP_TUPLE_EAT_9(e0, e1, e2, e3, e4, e5, e6, e7, e8)\n# define BOOST_PP_TUPLE_EAT_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9)\n# define BOOST_PP_TUPLE_EAT_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)\n# define BOOST_PP_TUPLE_EAT_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)\n# define BOOST_PP_TUPLE_EAT_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)\n# define BOOST_PP_TUPLE_EAT_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)\n# define BOOST_PP_TUPLE_EAT_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)\n# define BOOST_PP_TUPLE_EAT_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)\n# define BOOST_PP_TUPLE_EAT_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)\n# define BOOST_PP_TUPLE_EAT_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)\n# define BOOST_PP_TUPLE_EAT_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)\n# define BOOST_PP_TUPLE_EAT_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)\n# define BOOST_PP_TUPLE_EAT_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)\n# define BOOST_PP_TUPLE_EAT_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)\n# define BOOST_PP_TUPLE_EAT_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)\n# define BOOST_PP_TUPLE_EAT_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)\n# define BOOST_PP_TUPLE_EAT_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24)\n# define BOOST_PP_TUPLE_EAT_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25)\n# define BOOST_PP_TUPLE_EAT_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26)\n# define BOOST_PP_TUPLE_EAT_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27)\n# define BOOST_PP_TUPLE_EAT_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28)\n# define BOOST_PP_TUPLE_EAT_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29)\n# define BOOST_PP_TUPLE_EAT_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30)\n# define BOOST_PP_TUPLE_EAT_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31)\n# define BOOST_PP_TUPLE_EAT_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32)\n# define BOOST_PP_TUPLE_EAT_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33)\n# define BOOST_PP_TUPLE_EAT_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34)\n# define BOOST_PP_TUPLE_EAT_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35)\n# define BOOST_PP_TUPLE_EAT_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36)\n# define BOOST_PP_TUPLE_EAT_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37)\n# define BOOST_PP_TUPLE_EAT_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38)\n# define BOOST_PP_TUPLE_EAT_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39)\n# define BOOST_PP_TUPLE_EAT_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40)\n# define BOOST_PP_TUPLE_EAT_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41)\n# define BOOST_PP_TUPLE_EAT_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42)\n# define BOOST_PP_TUPLE_EAT_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43)\n# define BOOST_PP_TUPLE_EAT_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44)\n# define BOOST_PP_TUPLE_EAT_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45)\n# define BOOST_PP_TUPLE_EAT_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46)\n# define BOOST_PP_TUPLE_EAT_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47)\n# define BOOST_PP_TUPLE_EAT_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48)\n# define BOOST_PP_TUPLE_EAT_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49)\n# define BOOST_PP_TUPLE_EAT_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50)\n# define BOOST_PP_TUPLE_EAT_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51)\n# define BOOST_PP_TUPLE_EAT_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52)\n# define BOOST_PP_TUPLE_EAT_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53)\n# define BOOST_PP_TUPLE_EAT_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54)\n# define BOOST_PP_TUPLE_EAT_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55)\n# define BOOST_PP_TUPLE_EAT_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56)\n# define BOOST_PP_TUPLE_EAT_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57)\n# define BOOST_PP_TUPLE_EAT_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58)\n# define BOOST_PP_TUPLE_EAT_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59)\n# define BOOST_PP_TUPLE_EAT_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60)\n# define BOOST_PP_TUPLE_EAT_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61)\n# define BOOST_PP_TUPLE_EAT_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62)\n# define BOOST_PP_TUPLE_EAT_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63)\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/tuple/elem.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP\n# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/tuple/rem.hpp>\n# include <boost/preprocessor/variadic/elem.hpp>\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)\n#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)\n#    else\n#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__)\n#    endif\n#    define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple)\n#    define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple)\n# else\n#    if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n), BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size), tuple))\n#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)\n#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)\n#    elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I_OO((size, n, tuple))\n#        define BOOST_PP_TUPLE_ELEM_I_OO(par) BOOST_PP_TUPLE_ELEM_I ## par\n#        define BOOST_PP_TUPLE_ELEM_I(size, n, tuple) BOOST_PP_TUPLE_ELEM_II((n, BOOST_PP_TUPLE_ELEM_E_ ## size ## tuple))\n#        define BOOST_PP_TUPLE_ELEM_II(par) BOOST_PP_TUPLE_ELEM_III_OO(par)\n#        define BOOST_PP_TUPLE_ELEM_III_OO(par) BOOST_PP_TUPLE_ELEM_III ## par\n#        define BOOST_PP_TUPLE_ELEM_III(n, etuple) BOOST_PP_TUPLE_ELEM_ ## n ## etuple\n#    else\n#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size) tuple)\n#        define BOOST_PP_TUPLE_ELEM_I(x) x\n#    endif\n#    define BOOST_PP_TUPLE_ELEM_E_1(e0) (e0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_2(e0, e1) (e0, e1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_3(e0, e1, e2) (e0, e1, e2, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_4(e0, e1, e2, e3) (e0, e1, e2, e3, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_5(e0, e1, e2, e3, e4) (e0, e1, e2, e3, e4, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_6(e0, e1, e2, e3, e4, e5) (e0, e1, e2, e3, e4, e5, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_7(e0, e1, e2, e3, e4, e5, e6) (e0, e1, e2, e3, e4, e5, e6, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, e1, e2, e3, e4, e5, e6, e7, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, e1, e2, e3, e4, e5, e6, e7, e8, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ?, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ?, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ?, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ?, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ?, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ?, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ?, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ?)\n#    define BOOST_PP_TUPLE_ELEM_E_64\n#    define BOOST_PP_TUPLE_ELEM_0(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0\n#    define BOOST_PP_TUPLE_ELEM_1(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e1\n#    define BOOST_PP_TUPLE_ELEM_2(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e2\n#    define BOOST_PP_TUPLE_ELEM_3(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e3\n#    define BOOST_PP_TUPLE_ELEM_4(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e4\n#    define BOOST_PP_TUPLE_ELEM_5(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e5\n#    define BOOST_PP_TUPLE_ELEM_6(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e6\n#    define BOOST_PP_TUPLE_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e7\n#    define BOOST_PP_TUPLE_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e8\n#    define BOOST_PP_TUPLE_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e9\n#    define BOOST_PP_TUPLE_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e10\n#    define BOOST_PP_TUPLE_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e11\n#    define BOOST_PP_TUPLE_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e12\n#    define BOOST_PP_TUPLE_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e13\n#    define BOOST_PP_TUPLE_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e14\n#    define BOOST_PP_TUPLE_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e15\n#    define BOOST_PP_TUPLE_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e16\n#    define BOOST_PP_TUPLE_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e17\n#    define BOOST_PP_TUPLE_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e18\n#    define BOOST_PP_TUPLE_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e19\n#    define BOOST_PP_TUPLE_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e20\n#    define BOOST_PP_TUPLE_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e21\n#    define BOOST_PP_TUPLE_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e22\n#    define BOOST_PP_TUPLE_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e23\n#    define BOOST_PP_TUPLE_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e24\n#    define BOOST_PP_TUPLE_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e25\n#    define BOOST_PP_TUPLE_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e26\n#    define BOOST_PP_TUPLE_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e27\n#    define BOOST_PP_TUPLE_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e28\n#    define BOOST_PP_TUPLE_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e29\n#    define BOOST_PP_TUPLE_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e30\n#    define BOOST_PP_TUPLE_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e31\n#    define BOOST_PP_TUPLE_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e32\n#    define BOOST_PP_TUPLE_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e33\n#    define BOOST_PP_TUPLE_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e34\n#    define BOOST_PP_TUPLE_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e35\n#    define BOOST_PP_TUPLE_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e36\n#    define BOOST_PP_TUPLE_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e37\n#    define BOOST_PP_TUPLE_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e38\n#    define BOOST_PP_TUPLE_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e39\n#    define BOOST_PP_TUPLE_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e40\n#    define BOOST_PP_TUPLE_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e41\n#    define BOOST_PP_TUPLE_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e42\n#    define BOOST_PP_TUPLE_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e43\n#    define BOOST_PP_TUPLE_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e44\n#    define BOOST_PP_TUPLE_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e45\n#    define BOOST_PP_TUPLE_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e46\n#    define BOOST_PP_TUPLE_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e47\n#    define BOOST_PP_TUPLE_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e48\n#    define BOOST_PP_TUPLE_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e49\n#    define BOOST_PP_TUPLE_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e50\n#    define BOOST_PP_TUPLE_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e51\n#    define BOOST_PP_TUPLE_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e52\n#    define BOOST_PP_TUPLE_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e53\n#    define BOOST_PP_TUPLE_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e54\n#    define BOOST_PP_TUPLE_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e55\n#    define BOOST_PP_TUPLE_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e56\n#    define BOOST_PP_TUPLE_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e57\n#    define BOOST_PP_TUPLE_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e58\n#    define BOOST_PP_TUPLE_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e59\n#    define BOOST_PP_TUPLE_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e60\n#    define BOOST_PP_TUPLE_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e61\n#    define BOOST_PP_TUPLE_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e62\n#    define BOOST_PP_TUPLE_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e63\n# endif\n#\n# /* directly used elsewhere in Boost... */\n#\n# define BOOST_PP_TUPLE_ELEM_1_0(a) a\n#\n# define BOOST_PP_TUPLE_ELEM_2_0(a, b) a\n# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b\n#\n# define BOOST_PP_TUPLE_ELEM_3_0(a, b, c) a\n# define BOOST_PP_TUPLE_ELEM_3_1(a, b, c) b\n# define BOOST_PP_TUPLE_ELEM_3_2(a, b, c) c\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/tuple/rem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Paul Mensonides 2002-2011.                             *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_REM_HPP\n# define BOOST_PREPROCESSOR_TUPLE_REM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n#\n# /* BOOST_PP_REM */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_REM(...) __VA_ARGS__\n# else\n#    define BOOST_PP_REM(x) x\n# endif\n#\n# /* BOOST_PP_TUPLE_REM */\n#\n# if BOOST_PP_VARIADICS\n#    define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_I(size)\n#    else\n#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_OO((size))\n#        define BOOST_PP_TUPLE_REM_OO(par) BOOST_PP_TUPLE_REM_I ## par\n#    endif\n#    define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size\n# endif\n# define BOOST_PP_TUPLE_REM_1(e0) e0\n# define BOOST_PP_TUPLE_REM_2(e0, e1) e0, e1\n# define BOOST_PP_TUPLE_REM_3(e0, e1, e2) e0, e1, e2\n# define BOOST_PP_TUPLE_REM_4(e0, e1, e2, e3) e0, e1, e2, e3\n# define BOOST_PP_TUPLE_REM_5(e0, e1, e2, e3, e4) e0, e1, e2, e3, e4\n# define BOOST_PP_TUPLE_REM_6(e0, e1, e2, e3, e4, e5) e0, e1, e2, e3, e4, e5\n# define BOOST_PP_TUPLE_REM_7(e0, e1, e2, e3, e4, e5, e6) e0, e1, e2, e3, e4, e5, e6\n# define BOOST_PP_TUPLE_REM_8(e0, e1, e2, e3, e4, e5, e6, e7) e0, e1, e2, e3, e4, e5, e6, e7\n# define BOOST_PP_TUPLE_REM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) e0, e1, e2, e3, e4, e5, e6, e7, e8\n# define BOOST_PP_TUPLE_REM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9\n# define BOOST_PP_TUPLE_REM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10\n# define BOOST_PP_TUPLE_REM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11\n# define BOOST_PP_TUPLE_REM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12\n# define BOOST_PP_TUPLE_REM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13\n# define BOOST_PP_TUPLE_REM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14\n# define BOOST_PP_TUPLE_REM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15\n# define BOOST_PP_TUPLE_REM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16\n# define BOOST_PP_TUPLE_REM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17\n# define BOOST_PP_TUPLE_REM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18\n# define BOOST_PP_TUPLE_REM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19\n# define BOOST_PP_TUPLE_REM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20\n# define BOOST_PP_TUPLE_REM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21\n# define BOOST_PP_TUPLE_REM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22\n# define BOOST_PP_TUPLE_REM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23\n# define BOOST_PP_TUPLE_REM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24\n# define BOOST_PP_TUPLE_REM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25\n# define BOOST_PP_TUPLE_REM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26\n# define BOOST_PP_TUPLE_REM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27\n# define BOOST_PP_TUPLE_REM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28\n# define BOOST_PP_TUPLE_REM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29\n# define BOOST_PP_TUPLE_REM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30\n# define BOOST_PP_TUPLE_REM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31\n# define BOOST_PP_TUPLE_REM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32\n# define BOOST_PP_TUPLE_REM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33\n# define BOOST_PP_TUPLE_REM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34\n# define BOOST_PP_TUPLE_REM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35\n# define BOOST_PP_TUPLE_REM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36\n# define BOOST_PP_TUPLE_REM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37\n# define BOOST_PP_TUPLE_REM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38\n# define BOOST_PP_TUPLE_REM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39\n# define BOOST_PP_TUPLE_REM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40\n# define BOOST_PP_TUPLE_REM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41\n# define BOOST_PP_TUPLE_REM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42\n# define BOOST_PP_TUPLE_REM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43\n# define BOOST_PP_TUPLE_REM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44\n# define BOOST_PP_TUPLE_REM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45\n# define BOOST_PP_TUPLE_REM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46\n# define BOOST_PP_TUPLE_REM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47\n# define BOOST_PP_TUPLE_REM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48\n# define BOOST_PP_TUPLE_REM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49\n# define BOOST_PP_TUPLE_REM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50\n# define BOOST_PP_TUPLE_REM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51\n# define BOOST_PP_TUPLE_REM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52\n# define BOOST_PP_TUPLE_REM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53\n# define BOOST_PP_TUPLE_REM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54\n# define BOOST_PP_TUPLE_REM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55\n# define BOOST_PP_TUPLE_REM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56\n# define BOOST_PP_TUPLE_REM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57\n# define BOOST_PP_TUPLE_REM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58\n# define BOOST_PP_TUPLE_REM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59\n# define BOOST_PP_TUPLE_REM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60\n# define BOOST_PP_TUPLE_REM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61\n# define BOOST_PP_TUPLE_REM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62\n# define BOOST_PP_TUPLE_REM_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63\n#\n# /* BOOST_PP_TUPLE_REM_CTOR */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args)\n#        define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,)\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__)\n#    endif\n#    define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple\n#    define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()\n#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_D(size, tuple)\n#        define BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)\n#    endif\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) ext tuple\n#    else\n#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) BOOST_PP_TUPLE_REM_CTOR_OO((ext, tuple))\n#        define BOOST_PP_TUPLE_REM_CTOR_OO(par) BOOST_PP_TUPLE_REM_CTOR_II ## par\n#        define BOOST_PP_TUPLE_REM_CTOR_II(ext, tuple) ext ## tuple\n#    endif\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/tuple/to_list.hpp",
    "content": "# /* Copyright (C) 2001\n#  * Housemarque Oy\n#  * http://www.housemarque.com\n#  *\n#  * Distributed under the Boost Software License, Version 1.0. (See\n#  * accompanying file LICENSE_1_0.txt or copy at\n#  * http://www.boost.org/LICENSE_1_0.txt)\n#  */\n#\n# /* Revised by Paul Mensonides (2002-2011) */\n# /* Revised by Edward Diener (2011) */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP\n# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n# include <boost/preprocessor/facilities/overload.hpp>\n# include <boost/preprocessor/variadic/size.hpp>\n#\n# /* BOOST_PP_TUPLE_TO_LIST */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__))\n#        define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args)\n#        define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)\n#    else\n#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__)\n#    endif\n#    define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple\n#    define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple)\n# else\n#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()\n#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_I(size, tuple)\n#        if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()\n#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s t\n#        else\n#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_II(BOOST_PP_TUPLE_TO_LIST_ ## s t)\n#            define BOOST_PP_TUPLE_TO_LIST_II(res) res\n#        endif\n#    else\n#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_OO((size, tuple))\n#        define BOOST_PP_TUPLE_TO_LIST_OO(par) BOOST_PP_TUPLE_TO_LIST_I ## par\n#        define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s ## t\n#    endif\n# endif\n#\n# define BOOST_PP_TUPLE_TO_LIST_1(e0) (e0, BOOST_PP_NIL)\n# define BOOST_PP_TUPLE_TO_LIST_2(e0, e1) (e0, (e1, BOOST_PP_NIL))\n# define BOOST_PP_TUPLE_TO_LIST_3(e0, e1, e2) (e0, (e1, (e2, BOOST_PP_NIL)))\n# define BOOST_PP_TUPLE_TO_LIST_4(e0, e1, e2, e3) (e0, (e1, (e2, (e3, BOOST_PP_NIL))))\n# define BOOST_PP_TUPLE_TO_LIST_5(e0, e1, e2, e3, e4) (e0, (e1, (e2, (e3, (e4, BOOST_PP_NIL)))))\n# define BOOST_PP_TUPLE_TO_LIST_6(e0, e1, e2, e3, e4, e5) (e0, (e1, (e2, (e3, (e4, (e5, BOOST_PP_NIL))))))\n# define BOOST_PP_TUPLE_TO_LIST_7(e0, e1, e2, e3, e4, e5, e6) (e0, (e1, (e2, (e3, (e4, (e5, (e6, BOOST_PP_NIL)))))))\n# define BOOST_PP_TUPLE_TO_LIST_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, BOOST_PP_NIL))))))))\n# define BOOST_PP_TUPLE_TO_LIST_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, BOOST_PP_NIL)))))))))\n# define BOOST_PP_TUPLE_TO_LIST_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, BOOST_PP_NIL))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, BOOST_PP_NIL)))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, BOOST_PP_NIL))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, BOOST_PP_NIL)))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, BOOST_PP_NIL))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, BOOST_PP_NIL)))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, BOOST_PP_NIL))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, BOOST_PP_NIL)))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, BOOST_PP_NIL))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, BOOST_PP_NIL)))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, BOOST_PP_NIL))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, BOOST_PP_NIL)))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, BOOST_PP_NIL))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, BOOST_PP_NIL)))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, BOOST_PP_NIL))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, BOOST_PP_NIL)))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, BOOST_PP_NIL))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, BOOST_PP_NIL)))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, BOOST_PP_NIL))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, BOOST_PP_NIL)))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, BOOST_PP_NIL))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, BOOST_PP_NIL)))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, BOOST_PP_NIL))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, BOOST_PP_NIL)))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, BOOST_PP_NIL))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n# define BOOST_PP_TUPLE_TO_LIST_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, (e43, (e44, (e45, (e46, (e47, (e48, (e49, (e50, (e51, (e52, (e53, (e54, (e55, (e56, (e57, (e58, (e59, (e60, (e61, (e62, (e63, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/variadic/elem.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_ELEM */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_VARIADIC_ELEM_I(n,__VA_ARGS__)\n#        define BOOST_PP_VARIADIC_ELEM_I(n, ...) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,),)\n#    else\n#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,)\n#    endif\n#    define BOOST_PP_VARIADIC_ELEM_0(e0, ...) e0\n#    define BOOST_PP_VARIADIC_ELEM_1(e0, e1, ...) e1\n#    define BOOST_PP_VARIADIC_ELEM_2(e0, e1, e2, ...) e2\n#    define BOOST_PP_VARIADIC_ELEM_3(e0, e1, e2, e3, ...) e3\n#    define BOOST_PP_VARIADIC_ELEM_4(e0, e1, e2, e3, e4, ...) e4\n#    define BOOST_PP_VARIADIC_ELEM_5(e0, e1, e2, e3, e4, e5, ...) e5\n#    define BOOST_PP_VARIADIC_ELEM_6(e0, e1, e2, e3, e4, e5, e6, ...) e6\n#    define BOOST_PP_VARIADIC_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7\n#    define BOOST_PP_VARIADIC_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8\n#    define BOOST_PP_VARIADIC_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9\n#    define BOOST_PP_VARIADIC_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10\n#    define BOOST_PP_VARIADIC_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11\n#    define BOOST_PP_VARIADIC_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12\n#    define BOOST_PP_VARIADIC_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13\n#    define BOOST_PP_VARIADIC_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14\n#    define BOOST_PP_VARIADIC_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15\n#    define BOOST_PP_VARIADIC_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16\n#    define BOOST_PP_VARIADIC_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17\n#    define BOOST_PP_VARIADIC_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18\n#    define BOOST_PP_VARIADIC_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19\n#    define BOOST_PP_VARIADIC_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20\n#    define BOOST_PP_VARIADIC_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21\n#    define BOOST_PP_VARIADIC_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22\n#    define BOOST_PP_VARIADIC_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23\n#    define BOOST_PP_VARIADIC_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24\n#    define BOOST_PP_VARIADIC_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25\n#    define BOOST_PP_VARIADIC_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26\n#    define BOOST_PP_VARIADIC_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27\n#    define BOOST_PP_VARIADIC_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28\n#    define BOOST_PP_VARIADIC_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29\n#    define BOOST_PP_VARIADIC_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30\n#    define BOOST_PP_VARIADIC_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31\n#    define BOOST_PP_VARIADIC_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32\n#    define BOOST_PP_VARIADIC_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33\n#    define BOOST_PP_VARIADIC_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34\n#    define BOOST_PP_VARIADIC_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35\n#    define BOOST_PP_VARIADIC_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36\n#    define BOOST_PP_VARIADIC_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37\n#    define BOOST_PP_VARIADIC_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38\n#    define BOOST_PP_VARIADIC_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39\n#    define BOOST_PP_VARIADIC_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40\n#    define BOOST_PP_VARIADIC_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41\n#    define BOOST_PP_VARIADIC_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42\n#    define BOOST_PP_VARIADIC_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43\n#    define BOOST_PP_VARIADIC_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44\n#    define BOOST_PP_VARIADIC_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45\n#    define BOOST_PP_VARIADIC_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46\n#    define BOOST_PP_VARIADIC_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47\n#    define BOOST_PP_VARIADIC_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48\n#    define BOOST_PP_VARIADIC_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49\n#    define BOOST_PP_VARIADIC_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50\n#    define BOOST_PP_VARIADIC_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51\n#    define BOOST_PP_VARIADIC_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52\n#    define BOOST_PP_VARIADIC_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53\n#    define BOOST_PP_VARIADIC_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54\n#    define BOOST_PP_VARIADIC_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55\n#    define BOOST_PP_VARIADIC_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56\n#    define BOOST_PP_VARIADIC_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57\n#    define BOOST_PP_VARIADIC_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58\n#    define BOOST_PP_VARIADIC_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59\n#    define BOOST_PP_VARIADIC_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60\n#    define BOOST_PP_VARIADIC_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61\n#    define BOOST_PP_VARIADIC_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62\n#    define BOOST_PP_VARIADIC_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/preprocessor/variadic/size.hpp",
    "content": "# /* **************************************************************************\n#  *                                                                          *\n#  *     (C) Copyright Edward Diener 2011.                                    *\n#  *     (C) Copyright Paul Mensonides 2011.                                  *\n#  *     Distributed under the Boost Software License, Version 1.0. (See      *\n#  *     accompanying file LICENSE_1_0.txt or copy at                         *\n#  *     http://www.boost.org/LICENSE_1_0.txt)                                *\n#  *                                                                          *\n#  ************************************************************************** */\n#\n# /* See http://www.boost.org for most recent version. */\n#\n# ifndef BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP\n# define BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP\n#\n# include <boost/preprocessor/cat.hpp>\n# include <boost/preprocessor/config/config.hpp>\n#\n# /* BOOST_PP_VARIADIC_SIZE */\n#\n# if BOOST_PP_VARIADICS\n#    if BOOST_PP_VARIADICS_MSVC\n#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)\n#    else\n#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)\n#    endif\n#    define BOOST_PP_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, size, ...) size\n# endif\n#\n# endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/progress.hpp",
    "content": "//  boost progress.hpp header file  ------------------------------------------//\n\n//  Copyright Beman Dawes 1994-99.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/timer for documentation.\n\n//  Revision History\n//   1 Dec 01  Add leading progress display strings (suggested by Toon Knapen)\n//  20 May 01  Introduce several static_casts<> to eliminate warning messages\n//             (Fixed by Beman, reported by Herve Bronnimann)\n//  12 Jan 01  Change to inline implementation to allow use without library\n//             builds. See docs for more rationale. (Beman Dawes) \n//  22 Jul 99  Name changed to .hpp\n//  16 Jul 99  Second beta\n//   6 Jul 99  Initial boost version\n\n#ifndef BOOST_PROGRESS_HPP\n#define BOOST_PROGRESS_HPP\n\n#include <boost/timer.hpp>\n#include <boost/utility.hpp>  // for noncopyable\n#include <boost/cstdint.hpp>  // for uintmax_t\n#include <iostream>           // for ostream, cout, etc\n#include <string>             // for string\n\nnamespace boost {\n\n//  progress_timer  ----------------------------------------------------------//\n\n//  A progress_timer behaves like a timer except that the destructor displays\n//  an elapsed time message at an appropriate place in an appropriate form.\n\nclass progress_timer : public timer, private noncopyable\n{\n  \n public:\n  explicit progress_timer( std::ostream & os = std::cout )\n     // os is hint; implementation may ignore, particularly in embedded systems\n     : m_os(os) {}\n  ~progress_timer()\n  {\n  //  A) Throwing an exception from a destructor is a Bad Thing.\n  //  B) The progress_timer destructor does output which may throw.\n  //  C) A progress_timer is usually not critical to the application.\n  //  Therefore, wrap the I/O in a try block, catch and ignore all exceptions.\n    try\n    {\n      // use istream instead of ios_base to workaround GNU problem (Greg Chicares)\n      std::istream::fmtflags old_flags = m_os.setf( std::istream::fixed,\n                                                   std::istream::floatfield );\n      std::streamsize old_prec = m_os.precision( 2 );\n      m_os << elapsed() << \" s\\n\" // \"s\" is System International d'Unites std\n                        << std::endl;\n      m_os.flags( old_flags );\n      m_os.precision( old_prec );\n    }\n\n    catch (...) {} // eat any exceptions\n  } // ~progress_timer\n\n private:\n  std::ostream & m_os;\n};\n\n\n//  progress_display  --------------------------------------------------------//\n\n//  progress_display displays an appropriate indication of \n//  progress at an appropriate place in an appropriate form.\n\n// NOTE: (Jan 12, 2001) Tried to change unsigned long to boost::uintmax_t, but\n// found some compilers couldn't handle the required conversion to double.\n// Reverted to unsigned long until the compilers catch up. \n\nclass progress_display : private noncopyable\n{\n public:\n  explicit progress_display( unsigned long expected_count,\n                             std::ostream & os = std::cout,\n                             const std::string & s1 = \"\\n\", //leading strings\n                             const std::string & s2 = \"\",\n                             const std::string & s3 = \"\" )\n   // os is hint; implementation may ignore, particularly in embedded systems\n   : m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count); }\n\n  void           restart( unsigned long expected_count )\n  //  Effects: display appropriate scale\n  //  Postconditions: count()==0, expected_count()==expected_count\n  {\n    _count = _next_tic_count = _tic = 0;\n    _expected_count = expected_count;\n\n    m_os << m_s1 << \"0%   10   20   30   40   50   60   70   80   90   100%\\n\"\n         << m_s2 << \"|----|----|----|----|----|----|----|----|----|----|\"\n         << std::endl  // endl implies flush, which ensures display\n         << m_s3;\n    if ( !_expected_count ) _expected_count = 1;  // prevent divide by zero\n  } // restart\n\n  unsigned long  operator+=( unsigned long increment )\n  //  Effects: Display appropriate progress tic if needed.\n  //  Postconditions: count()== original count() + increment\n  //  Returns: count().\n  {\n    if ( (_count += increment) >= _next_tic_count ) { display_tic(); }\n    return _count;\n  }\n\n  unsigned long  operator++()           { return operator+=( 1 ); }\n  unsigned long  count() const          { return _count; }\n  unsigned long  expected_count() const { return _expected_count; }\n\n  private:\n  std::ostream &     m_os;  // may not be present in all imps\n  const std::string  m_s1;  // string is more general, safer than \n  const std::string  m_s2;  //  const char *, and efficiency or size are\n  const std::string  m_s3;  //  not issues\n\n  unsigned long _count, _expected_count, _next_tic_count;\n  unsigned int  _tic;\n  void display_tic()\n  {\n    // use of floating point ensures that both large and small counts\n    // work correctly.  static_cast<>() is also used several places\n    // to suppress spurious compiler warnings. \n    unsigned int tics_needed =\n      static_cast<unsigned int>(\n        (static_cast<double>(_count)/_expected_count)*50.0 );\n    do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed );\n    _next_tic_count = \n      static_cast<unsigned long>((_tic/50.0)*_expected_count);\n    if ( _count == _expected_count ) {\n      if ( _tic < 51 ) m_os << '*';\n      m_os << std::endl;\n      }\n  } // display_tic\n};\n\n} // namespace boost\n\n#endif  // BOOST_PROGRESS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/algorithm/equal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED\n#define BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/range/concepts.hpp>\n#include <iterator>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        // An implementation of equality comparison that is optimized for iterator\n        // traversal categories less than RandomAccessTraversal.\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class IteratorCategoryTag1,\n                  class IteratorCategoryTag2 >\n        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,\n                                SinglePassTraversalReadableIterator1 last1,\n                                SinglePassTraversalReadableIterator2 first2,\n                                SinglePassTraversalReadableIterator2 last2,\n                                IteratorCategoryTag1,\n                                IteratorCategoryTag2 )\n        {\n            while (true)\n            {\n                // If we have reached the end of the left range then this is\n                // the end of the loop. They are equal if and only if we have\n                // simultaneously reached the end of the right range.\n                if (first1 == last1)\n                    return first2 == last2;\n\n                // If we have reached the end of the right range at this line\n                // it indicates that the right range is shorter than the left\n                // and hence the result is false.\n                if (first2 == last2)\n                    return false;\n\n                // continue looping if and only if the values are equal\n                if (*first1 != *first2)\n                    break;\n\n                ++first1;\n                ++first2;\n            }\n\n            // Reaching this line in the algorithm indicates that a value\n            // inequality has been detected.\n            return false;\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class IteratorCategoryTag1,\n                  class IteratorCategoryTag2,\n                  class BinaryPredicate >\n        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,\n                                SinglePassTraversalReadableIterator1 last1,\n                                SinglePassTraversalReadableIterator2 first2,\n                                SinglePassTraversalReadableIterator2 last2,\n                                BinaryPredicate                      pred,\n                                IteratorCategoryTag1,\n                                IteratorCategoryTag2 )\n        {\n            while (true)\n            {\n                // If we have reached the end of the left range then this is\n                // the end of the loop. They are equal if and only if we have\n                // simultaneously reached the end of the right range.\n                if (first1 == last1)\n                    return first2 == last2;\n\n                // If we have reached the end of the right range at this line\n                // it indicates that the right range is shorter than the left\n                // and hence the result is false.\n                if (first2 == last2)\n                    return false;\n\n                // continue looping if and only if the values are equal\n                if (!pred(*first1, *first2))\n                    break;\n\n                ++first1;\n                ++first2;\n            }\n\n            // Reaching this line in the algorithm indicates that a value\n            // inequality has been detected.\n            return false;\n        }\n\n        // An implementation of equality comparison that is optimized for\n        // random access iterators.\n        template< class RandomAccessTraversalReadableIterator1,\n                  class RandomAccessTraversalReadableIterator2 >\n        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,\n                                RandomAccessTraversalReadableIterator1 last1,\n                                RandomAccessTraversalReadableIterator2 first2,\n                                RandomAccessTraversalReadableIterator2 last2,\n                                std::random_access_iterator_tag,\n                                std::random_access_iterator_tag )\n        {\n            return ((last1 - first1) == (last2 - first2))\n                && std::equal(first1, last1, first2);\n        }\n\n        template< class RandomAccessTraversalReadableIterator1,\n                  class RandomAccessTraversalReadableIterator2,\n                  class BinaryPredicate >\n        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,\n                                RandomAccessTraversalReadableIterator1 last1,\n                                RandomAccessTraversalReadableIterator2 first2,\n                                RandomAccessTraversalReadableIterator2 last2,\n                                BinaryPredicate                        pred )\n        {\n            return ((last1 - first1) == (last2 - first2))\n                && std::equal(first1, last1, first2, pred);\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2 >\n        inline bool equal( SinglePassTraversalReadableIterator1 first1,\n                           SinglePassTraversalReadableIterator1 last1,\n                           SinglePassTraversalReadableIterator2 first2,\n                           SinglePassTraversalReadableIterator2 last2 )\n        {\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;\n\n            return equal_impl(first1, last1, first2, last2, tag1, tag2);\n        }\n\n        template< class SinglePassTraversalReadableIterator1,\n                  class SinglePassTraversalReadableIterator2,\n                  class BinaryPredicate >\n        inline bool equal( SinglePassTraversalReadableIterator1 first1,\n                           SinglePassTraversalReadableIterator1 last1,\n                           SinglePassTraversalReadableIterator2 first2,\n                           SinglePassTraversalReadableIterator2 last2,\n                           BinaryPredicate                      pred )\n        {\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;\n            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;\n\n            return equal_impl(first1, last1, first2, last2, pred, tag1, tag2);\n        }\n\n    } // namespace range_detail\n\n    namespace range\n    {\n\n        /// \\brief template function equal\n        ///\n        /// range-based version of the equal std algorithm\n        ///\n        /// \\pre SinglePassRange1 is a model of the SinglePassRangeConcept\n        /// \\pre SinglePassRange2 is a model of the SinglePassRangeConcept\n        /// \\pre BinaryPredicate is a model of the BinaryPredicateConcept\n        template< class SinglePassRange1, class SinglePassRange2 >\n        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2 )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::equal(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2) );\n        }\n\n        /// \\overload\n        template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >\n        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2,\n                           BinaryPredicate pred )\n        {\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));\n            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));\n\n            return ::boost::range_detail::equal(\n                ::boost::begin(rng1), ::boost::end(rng1),\n                ::boost::begin(rng2), ::boost::end(rng2),\n                pred);\n        }\n\n    } // namespace range\n    using ::boost::range::equal;\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/as_literal.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_AS_LITERAL_HPP\n#define BOOST_RANGE_AS_LITERAL_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/as_literal.hpp>\n#else\n\n#include <boost/range/iterator_range.hpp>\n#include <boost/range/detail/str_types.hpp>\n\n#include <boost/detail/workaround.hpp>\n\n#include <cstring>\n#ifndef BOOST_NO_CWCHAR\n#include <cwchar>\n#endif\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        inline std::size_t length( const char* s )\n        {\n            return strlen( s );\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline std::size_t length( const wchar_t* s )\n        {\n            return wcslen( s );\n        }\n#endif\n\n        //\n        // Remark: the compiler cannot choose between T* and T[sz]\n        // overloads, so we must put the T* internal to the\n        // unconstrained version.\n        //\n\n        inline bool is_char_ptr( char* )\n        {\n            return true;\n        }\n\n        inline bool is_char_ptr( const char* )\n        {\n            return true;\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline bool is_char_ptr( wchar_t* )\n        {\n            return true;\n        }\n\n        inline bool is_char_ptr( const wchar_t* )\n        {\n            return true;\n        }\n#endif\n\n        template< class T >\n        inline long is_char_ptr( const T& /* r */ )\n        {\n            return 0L;\n        }\n\n        template< class T >\n        inline iterator_range<T*>\n        make_range( T* const r, bool )\n        {\n            return iterator_range<T*>( r, r + length(r) );\n        }\n\n        template< class T >\n        inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>\n        make_range( T& r, long )\n        {\n            return boost::make_iterator_range( r );\n        }\n\n    }\n\n    template< class Range >\n    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>\n    as_literal( Range& r )\n    {\n        return range_detail::make_range( r, range_detail::is_char_ptr(r) );\n    }\n\n    template< class Range >\n    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>\n    as_literal( const Range& r )\n    {\n        return range_detail::make_range( r, range_detail::is_char_ptr(r) );\n    }\n\n    template< class Char, std::size_t sz >\n    inline iterator_range<Char*> as_literal( Char (&arr)[sz] )\n    {\n        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );\n    }\n\n    template< class Char, std::size_t sz >\n    inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )\n    {\n        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );\n    }\n}\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/begin.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_BEGIN_HPP\n#define BOOST_RANGE_BEGIN_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/begin.hpp>\n#else\n\n#include <boost/range/iterator.hpp>\n\nnamespace boost\n{\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\nnamespace range_detail\n{\n#endif\n\n    //////////////////////////////////////////////////////////////////////\n    // primary template\n    //////////////////////////////////////////////////////////////////////\n\n    template< typename C >\n    inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type\n    range_begin( C& c )\n    {\n        //\n        // If you get a compile-error here, it is most likely because\n        // you have not implemented range_begin() properly in\n        // the namespace of C\n        //\n        return c.begin();\n    }\n\n    //////////////////////////////////////////////////////////////////////\n    // pair\n    //////////////////////////////////////////////////////////////////////\n\n    template< typename Iterator >\n    inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )\n    {\n        return p.first;\n    }\n\n    template< typename Iterator >\n    inline Iterator range_begin( std::pair<Iterator,Iterator>& p )\n    {\n        return p.first;\n    }\n\n    //////////////////////////////////////////////////////////////////////\n    // array\n    //////////////////////////////////////////////////////////////////////\n\n    //\n    // May this be discarded? Or is it needed for bad compilers?\n    //\n    template< typename T, std::size_t sz >\n    inline const T* range_begin( const T (&a)[sz] )\n    {\n        return a;\n    }\n\n    template< typename T, std::size_t sz >\n    inline T* range_begin( T (&a)[sz] )\n    {\n        return a;\n    }\n\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n} // namespace 'range_detail'\n#endif\n\n// Use a ADL namespace barrier to avoid ambiguity with other unqualified\n// calls. This is particularly important with C++0x encouraging\n// unqualified calls to begin/end.\nnamespace range_adl_barrier\n{\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<T>::type begin( T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n    using namespace range_detail;\n#endif\n    return range_begin( r );\n}\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type begin( const T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n    using namespace range_detail;\n#endif\n    return range_begin( r );\n}\n\n    } // namespace range_adl_barrier\n} // namespace boost\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace boost\n{\n    namespace range_adl_barrier\n    {\n        template< class T >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type\n        const_begin( const T& r )\n        {\n            return boost::range_adl_barrier::begin( r );\n        }\n    } // namespace range_adl_barrier\n\n    using namespace range_adl_barrier;\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/concepts.hpp",
    "content": "// Boost.Range library concept checks\n//\n//  Copyright Neil Groves 2009. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Copyright Daniel Walker 2006. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONCEPTS_HPP\n#define BOOST_RANGE_CONCEPTS_HPP\n\n#include <boost/concept_check.hpp>\n#include <boost/iterator/iterator_concepts.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/value_type.hpp>\n#include <boost/range/detail/misc_concept.hpp>\n\n/*!\n * \\file\n * \\brief Concept checks for the Boost Range library.\n *\n * The structures in this file may be used in conjunction with the\n * Boost Concept Check library to insure that the type of a function\n * parameter is compatible with a range concept. If not, a meaningful\n * compile time error is generated. Checks are provided for the range\n * concepts related to iterator traversal categories. For example, the\n * following line checks that the type T models the ForwardRange\n * concept.\n *\n * \\code\n * BOOST_CONCEPT_ASSERT((ForwardRangeConcept<T>));\n * \\endcode\n *\n * A different concept check is required to ensure writeable value\n * access. For example to check for a ForwardRange that can be written\n * to, the following code is required.\n *\n * \\code\n * BOOST_CONCEPT_ASSERT((WriteableForwardRangeConcept<T>));\n * \\endcode\n *\n * \\see http://www.boost.org/libs/range/doc/range.html for details\n * about range concepts.\n * \\see http://www.boost.org/libs/iterator/doc/iterator_concepts.html\n * for details about iterator concepts.\n * \\see http://www.boost.org/libs/concept_check/concept_check.htm for\n * details about concept checks.\n */\n\nnamespace boost {\n\n    namespace range_detail {\n\n#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n\n// List broken compiler versions here:\n    #ifdef __GNUC__\n        // GNUC 4.2 has strange issues correctly detecting compliance with the Concepts\n        // hence the least disruptive approach is to turn-off the concept checking for\n        // this version of the compiler.\n        #if __GNUC__ == 4 && __GNUC_MINOR__ == 2\n            #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n        #endif\n    #endif\n\n    #ifdef __BORLANDC__\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n    #endif\n\n    #ifdef __PATHCC__\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0\n    #endif\n\n// Default to using the concept asserts unless we have defined it off\n// during the search for black listed compilers.\n    #ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1\n    #endif\n\n#endif\n\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n    #define BOOST_RANGE_CONCEPT_ASSERT( x ) BOOST_CONCEPT_ASSERT( x )\n#else\n    #define BOOST_RANGE_CONCEPT_ASSERT( x )\n#endif\n\n        // Rationale for the inclusion of redefined iterator concept\n        // classes:\n        //\n        // The Range algorithms often do not require that the iterators are\n        // Assignable or default constructable, but the correct standard\n        // conformant iterators do require the iterators to be a model of the\n        // Assignable concept.\n        // Iterators that contains a functor that is not assignable therefore\n        // are not correct models of the standard iterator concepts,\n        // despite being adequate for most algorithms. An example of this\n        // use case is the combination of the boost::adaptors::filtered\n        // class with a boost::lambda::bind generated functor.\n        // Ultimately modeling the range concepts using composition\n        // with the Boost.Iterator concepts would render the library\n        // incompatible with many common Boost.Lambda expressions.\n        template<class Iterator>\n        struct IncrementableIteratorConcept : CopyConstructible<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            typedef BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator>::type traversal_category;\n\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    traversal_category,\n                    incrementable_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(IncrementableIteratorConcept)\n            {\n                ++i;\n                (void)i++;\n            }\n        private:\n            Iterator i;\n#endif\n        };\n\n        template<class Iterator>\n        struct SinglePassIteratorConcept\n            : IncrementableIteratorConcept<Iterator>\n            , EqualityComparable<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category,\n                    single_pass_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(SinglePassIteratorConcept)\n            {\n                Iterator i2(++i);\n                boost::ignore_unused_variable_warning(i2);\n\n                // deliberately we are loose with the postfix version for the single pass\n                // iterator due to the commonly poor adherence to the specification means that\n                // many algorithms would be unusable, whereas actually without the check they\n                // work\n                (void)(i++);\n\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r1(*i);\n                boost::ignore_unused_variable_warning(r1);\n\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r2(*(++i));\n                boost::ignore_unused_variable_warning(r2);\n            }\n        private:\n            Iterator i;\n#endif\n        };\n\n        template<class Iterator>\n        struct ForwardIteratorConcept\n            : SinglePassIteratorConcept<Iterator>\n            , DefaultConstructible<Iterator>\n        {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n            typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::difference_type difference_type;\n\n            BOOST_MPL_ASSERT((is_integral<difference_type>));\n            BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);\n\n            BOOST_RANGE_CONCEPT_ASSERT((\n                Convertible<\n                    BOOST_DEDUCED_TYPENAME ForwardIteratorConcept::traversal_category,\n                    forward_traversal_tag\n                >));\n\n            BOOST_CONCEPT_USAGE(ForwardIteratorConcept)\n            {\n                // See the above note in the SinglePassIteratorConcept about the handling of the\n                // postfix increment. Since with forward and better iterators there is no need\n                // for a proxy, we can sensibly require that the dereference result\n                // is convertible to reference.\n                Iterator i2(i++);\n                boost::ignore_unused_variable_warning(i2);\n                BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference r(*(i++));\n                boost::ignore_unused_variable_warning(r);\n            }\n        private:\n            Iterator i;\n#endif\n         };\n\n         template<class Iterator>\n         struct BidirectionalIteratorConcept\n             : ForwardIteratorConcept<Iterator>\n         {\n #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n             BOOST_RANGE_CONCEPT_ASSERT((\n                 Convertible<\n                     BOOST_DEDUCED_TYPENAME BidirectionalIteratorConcept::traversal_category,\n                     bidirectional_traversal_tag\n                 >));\n\n             BOOST_CONCEPT_USAGE(BidirectionalIteratorConcept)\n             {\n                 --i;\n                 (void)i--;\n             }\n         private:\n             Iterator i;\n #endif\n         };\n\n         template<class Iterator>\n         struct RandomAccessIteratorConcept\n             : BidirectionalIteratorConcept<Iterator>\n         {\n #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n             BOOST_RANGE_CONCEPT_ASSERT((\n                 Convertible<\n                     BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::traversal_category,\n                     random_access_traversal_tag\n                 >));\n\n             BOOST_CONCEPT_USAGE(RandomAccessIteratorConcept)\n             {\n                 i += n;\n                 i = i + n;\n                 i = n + i;\n                 i -= n;\n                 i = i - n;\n                 n = i - j;\n             }\n         private:\n             BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::difference_type n;\n             Iterator i;\n             Iterator j;\n #endif\n         };\n\n    } // namespace range_detail\n\n    //! Check if a type T models the SinglePassRange range concept.\n    template<class T>\n    struct SinglePassRangeConcept\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n         typedef BOOST_DEDUCED_TYPENAME range_iterator<T const>::type  const_iterator;\n         typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type        iterator;\n\n         BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<iterator>));\n         BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<const_iterator>));\n\n         BOOST_CONCEPT_USAGE(SinglePassRangeConcept)\n         {\n            // This has been modified from assigning to this->i\n            // (where i was a member variable) to improve\n            // compatibility with Boost.Lambda\n            iterator i1 = boost::begin(*m_range);\n            iterator i2 = boost::end(*m_range);\n\n            ignore_unused_variable_warning(i1);\n            ignore_unused_variable_warning(i2);\n\n            const_constraints(*m_range);\n        }\n\n    private:\n        void const_constraints(const T& const_range)\n        {\n            const_iterator ci1 = boost::begin(const_range);\n            const_iterator ci2 = boost::end(const_range);\n\n            ignore_unused_variable_warning(ci1);\n            ignore_unused_variable_warning(ci2);\n        }\n\n       // Rationale:\n       // The type of m_range is T* rather than T because it allows\n       // T to be an abstract class. The other obvious alternative of\n       // T& produces a warning on some compilers.\n       T* m_range;\n#endif\n    };\n\n    //! Check if a type T models the ForwardRange range concept.\n    template<class T>\n    struct ForwardRangeConcept : SinglePassRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::const_iterator>));\n#endif\n    };\n\n    template<class Range>\n    struct WriteableRangeConcept\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        typedef BOOST_DEDUCED_TYPENAME range_iterator<Range>::type iterator;\n\n        BOOST_CONCEPT_USAGE(WriteableRangeConcept)\n        {\n            *i = v;\n        }\n    private:\n        iterator i;\n        BOOST_DEDUCED_TYPENAME range_value<Range>::type v;\n#endif\n    };\n\n    //! Check if a type T models the WriteableForwardRange range concept.\n    template<class T>\n    struct WriteableForwardRangeConcept\n        : ForwardRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n    //! Check if a type T models the BidirectionalRange range concept.\n    template<class T>\n    struct BidirectionalRangeConcept : ForwardRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));\n#endif\n    };\n\n    //! Check if a type T models the WriteableBidirectionalRange range concept.\n    template<class T>\n    struct WriteableBidirectionalRangeConcept\n        : BidirectionalRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n    //! Check if a type T models the RandomAccessRange range concept.\n    template<class T>\n    struct RandomAccessRangeConcept : BidirectionalRangeConcept<T>\n    {\n#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT\n        BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));\n        BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));\n#endif\n    };\n\n    //! Check if a type T models the WriteableRandomAccessRange range concept.\n    template<class T>\n    struct WriteableRandomAccessRangeConcept\n        : RandomAccessRangeConcept<T>\n        , WriteableRangeConcept<T>\n    {\n    };\n\n} // namespace boost\n\n#endif // BOOST_RANGE_CONCEPTS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/config.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONFIG_HPP\n#define BOOST_RANGE_CONFIG_HPP\n\n#include <boost/detail/workaround.hpp>\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_RANGE_DEDUCED_TYPENAME\n#error \"macro already defined!\"\n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n# define BOOST_RANGE_DEDUCED_TYPENAME typename\n#else\n# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) && !defined(_MSC_EXTENSIONS)\n#  define BOOST_RANGE_DEDUCED_TYPENAME typename\n# else\n#  define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME\n# endif\n#endif\n\n#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT\n#error \"macro already defined!\"\n#endif\n\n#if BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) || BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )\n#define BOOST_RANGE_NO_ARRAY_SUPPORT 1\n#endif\n\n#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT\n#define BOOST_RANGE_ARRAY_REF() (boost_range_array)\n#define BOOST_RANGE_NO_STATIC_ASSERT\n#else\n#define BOOST_RANGE_ARRAY_REF() (&boost_range_array)\n#endif\n\n\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/const_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_CONST_ITERATOR_HPP\n#define BOOST_RANGE_CONST_ITERATOR_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/range/detail/const_iterator.hpp>\n#else\n\n#include <boost/range/detail/extract_optional_type.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    namespace range_detail {\n        BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )\n    }\n\n    template< typename C >\n    struct range_const_iterator : range_detail::extract_const_iterator<C>\n    {};\n    \n    //////////////////////////////////////////////////////////////////////////\n    // pair\n    //////////////////////////////////////////////////////////////////////////\n\n    template< typename Iterator >\n    struct range_const_iterator< std::pair<Iterator,Iterator> >\n    {\n        typedef Iterator type;\n    };\n    \n    //////////////////////////////////////////////////////////////////////////\n    // array\n    //////////////////////////////////////////////////////////////////////////\n\n    template< typename T, std::size_t sz >\n    struct range_const_iterator< T[sz] >\n    {\n        typedef const T* type;\n    };\n\n} // namespace boost\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/common.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_COMMON_HPP\n#define BOOST_RANGE_DETAIL_COMMON_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/detail/sfinae.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/mpl/if.hpp>\n#include <boost/mpl/int.hpp>\n#include <cstddef>\n\n//////////////////////////////////////////////////////////////////////////////\n// missing partial specialization  workaround.\n//////////////////////////////////////////////////////////////////////////////\n\nnamespace boost \n{\n    namespace range_detail \n    {        \n        // 1 = std containers\n        // 2 = std::pair\n        // 3 = const std::pair\n        // 4 = array\n        // 5 = const array\n        // 6 = char array\n        // 7 = wchar_t array\n        // 8 = char*\n        // 9 = const char*\n        // 10 = whar_t*\n        // 11 = const wchar_t*\n        // 12 = string\n        \n        typedef mpl::int_<1>::type    std_container_;\n        typedef mpl::int_<2>::type    std_pair_;\n        typedef mpl::int_<3>::type    const_std_pair_;\n        typedef mpl::int_<4>::type    array_;\n        typedef mpl::int_<5>::type    const_array_;\n        typedef mpl::int_<6>::type    char_array_;\n        typedef mpl::int_<7>::type    wchar_t_array_;\n        typedef mpl::int_<8>::type    char_ptr_;\n        typedef mpl::int_<9>::type    const_char_ptr_;\n        typedef mpl::int_<10>::type   wchar_t_ptr_;\n        typedef mpl::int_<11>::type   const_wchar_t_ptr_;\n        typedef mpl::int_<12>::type   string_;\n        \n        template< typename C >\n        struct range_helper\n        {\n            static C* c;\n            static C  ptr;\n\n            BOOST_STATIC_CONSTANT( bool, is_pair_                = sizeof( boost::range_detail::is_pair_impl( c ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_char_ptr_            = sizeof( boost::range_detail::is_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_const_char_ptr_      = sizeof( boost::range_detail::is_const_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_wchar_t_ptr_         = sizeof( boost::range_detail::is_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_const_wchar_t_ptr_   = sizeof( boost::range_detail::is_const_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_char_array_          = sizeof( boost::range_detail::is_char_array_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_wchar_t_array_       = sizeof( boost::range_detail::is_wchar_t_array_impl( ptr ) ) == sizeof( yes_type ) );\n            BOOST_STATIC_CONSTANT( bool, is_string_              = (boost::type_traits::ice_or<is_const_char_ptr_, is_const_wchar_t_ptr_>::value ));\n            BOOST_STATIC_CONSTANT( bool, is_array_               = boost::is_array<C>::value );\n            \n        };\n        \n        template< typename C >\n        class range\n        {\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_pair_,\n                                                                  boost::range_detail::std_pair_,\n                                                                  void >::type pair_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_array_,\n                                                                    boost::range_detail::array_,\n                                                                    pair_t >::type array_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_string_,\n                                                                    boost::range_detail::string_,\n                                                                    array_t >::type string_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_char_ptr_,\n                                                                    boost::range_detail::const_char_ptr_,\n                                                                    string_t >::type const_char_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_ptr_,\n                                                                    boost::range_detail::char_ptr_,\n                                                                    const_char_ptr_t >::type char_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_wchar_t_ptr_,\n                                                                    boost::range_detail::const_wchar_t_ptr_,\n                                                                    char_ptr_t >::type const_wchar_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_ptr_,\n                                                                    boost::range_detail::wchar_t_ptr_,\n                                                                    const_wchar_ptr_t >::type wchar_ptr_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_array_,\n                                                                    boost::range_detail::wchar_t_array_,\n                                                                    wchar_ptr_t >::type wchar_array_t;\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_array_,\n                                                                    boost::range_detail::char_array_,\n                                                                    wchar_array_t >::type char_array_t;\n        public:\n            typedef BOOST_RANGE_DEDUCED_TYPENAME   boost::mpl::if_c< ::boost::is_void<char_array_t>::value,\n                                                                    boost::range_detail::std_container_,\n                                                                    char_array_t >::type type;  \n        }; // class 'range' \n    }\n}\n        \n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/extract_optional_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Arno Schoedl & Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n\n#ifdef BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION\n\n#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                         \\\n    template< typename C >                                                     \\\n    struct extract_ ## a_typedef                                               \\\n    {                                                                          \\\n        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                      \\\n    };\n\n#else\n\nnamespace boost {\n    namespace range_detail {\n        template< typename T > struct exists { typedef void type; };\n    }\n}\n\n// Defines extract_some_typedef<T> which exposes T::some_typedef as\n// extract_some_typedef<T>::type if T::some_typedef exists. Otherwise\n// extract_some_typedef<T> is empty.\n#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                         \\\n    template< typename C, typename Enable=void >                               \\\n    struct extract_ ## a_typedef                                               \\\n    {};                                                                        \\\n    template< typename C >                                                     \\\n    struct extract_ ## a_typedef< C                                            \\\n    , BOOST_DEDUCED_TYPENAME boost::range_detail::exists< BOOST_DEDUCED_TYPENAME C::a_typedef >::type \\\n    > {                                                                        \\\n        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                      \\\n    };\n\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/implementation_help.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP\n#define BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP\n\n#include <boost/range/config.hpp>\n#include <boost/range/detail/common.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <cstddef>\n#include <string.h>\n\n#ifndef BOOST_NO_CWCHAR\n#include <wchar.h>\n#endif\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template <typename T>\n        inline void boost_range_silence_warning( const T& ) { }\n\n        /////////////////////////////////////////////////////////////////////\n        // end() help\n        /////////////////////////////////////////////////////////////////////\n\n        inline const char* str_end( const char* s, const char* )\n        {\n            return s + strlen( s );\n        }\n\n#ifndef BOOST_NO_CWCHAR\n        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )\n        {\n            return s + wcslen( s );\n        }\n#else\n        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )\n        {\n            if( s == 0 || s[0] == 0 )\n                return s;\n            while( *++s != 0 )\n                ;\n            return s;\n        }\n#endif\n\n        template< class Char >\n        inline Char* str_end( Char* s )\n        {\n            return const_cast<Char*>( str_end( s, s ) );\n        }\n\n        template< class T, std::size_t sz >\n        inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            return boost_range_array + sz;\n        }\n\n        template< class T, std::size_t sz >\n        inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            return boost_range_array + sz;\n        }\n\n        /////////////////////////////////////////////////////////////////////\n        // size() help\n        /////////////////////////////////////////////////////////////////////\n\n        template< class Char >\n        inline std::size_t str_size( const Char* const& s )\n        {\n            return str_end( s ) - s;\n        }\n\n        template< class T, std::size_t sz >\n        inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            boost_range_silence_warning( boost_range_array );\n            return sz;\n        }\n\n        template< class T, std::size_t sz >\n        inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )\n        {\n            boost_range_silence_warning( boost_range_array );\n            return sz;\n        }\n\n    } // namespace 'range_detail'\n\n} // namespace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/misc_concept.hpp",
    "content": "// Boost.Range library concept checks\n//\n//  Copyright Neil Groves 2009. Use, modification and distribution\n//  are subject to the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n#ifndef BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED\n#define BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED\n\n#include <boost/concept_check.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<typename T1, typename T2>\n        class SameTypeConcept\n        {\n        public:\n            BOOST_CONCEPT_USAGE(SameTypeConcept)\n            {\n                same_type(a,b);\n            }\n        private:\n            template<typename T> void same_type(T,T) {}\n            T1 a;\n            T2 b;\n        };\n    }\n}\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/safe_bool.hpp",
    "content": "//  This header intentionally has no include guards.\n//\n//  Copyright (c) 2010 Neil Groves\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n// This code utilises the experience gained during the evolution of\n// <boost/smart_ptr/operator_bool.hpp>\n#ifndef BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP\n#define BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP\n\n#include <boost/config.hpp>\n#include <boost/range/config.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n\ntemplate<class DataMemberPtr>\nclass safe_bool\n{\npublic:\n    typedef safe_bool this_type;\n\n#if (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570)) || defined(__CINT_)\n    typedef bool unspecified_bool_type;\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x;\n    }\n#elif defined(_MANAGED)\n    static void unspecified_bool(this_type***)\n    {\n    }\n    typedef void(*unspecified_bool_type)(this_type***);\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x ? unspecified_bool : 0;\n    }\n#elif \\\n    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \\\n    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \\\n    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )\n\n    typedef bool (this_type::*unspecified_bool_type)() const;\n\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)\n    {\n        return x ? &this_type::detail_safe_bool_member_fn : 0;\n    }\nprivate:\n    bool detail_safe_bool_member_fn() const { return false; }\n#else\n    typedef DataMemberPtr unspecified_bool_type;\n    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr p)\n    {\n        return x ? p : 0;\n    }\n#endif\nprivate:\n    safe_bool();\n    safe_bool(const safe_bool&);\n    void operator=(const safe_bool&);\n    ~safe_bool();\n};\n\n    } // namespace range_detail\n} // namespace boost\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/sfinae.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP\n#define BOOST_RANGE_DETAIL_SFINAE_HPP\n\n#include <boost/range/config.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <utility>\n\n\nnamespace boost \n{\n    namespace range_detail\n    {          \n        using type_traits::yes_type;\n        using type_traits::no_type;\n\n        //////////////////////////////////////////////////////////////////////\n        // string\n        //////////////////////////////////////////////////////////////////////\n        \n        yes_type is_string_impl( const char* const );\n        yes_type is_string_impl( const wchar_t* const );\n        no_type  is_string_impl( ... );\n        \n        template< std::size_t sz >\n        yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );\n        template< std::size_t sz >\n        yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );\n        no_type  is_char_array_impl( ... );\n        \n        template< std::size_t sz >\n        yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );\n        template< std::size_t sz >\n        yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );\n        no_type  is_wchar_t_array_impl( ... );\n                                     \n        yes_type is_char_ptr_impl( char* const );\n        no_type  is_char_ptr_impl( ... );\n        \n        yes_type is_const_char_ptr_impl( const char* const );\n        no_type  is_const_char_ptr_impl( ... );\n\n        yes_type is_wchar_t_ptr_impl( wchar_t* const );\n        no_type  is_wchar_t_ptr_impl( ... );\n        \n        yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );\n        no_type  is_const_wchar_t_ptr_impl( ... );\n        \n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename Iterator >\n        yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );\n        no_type  is_pair_impl( ... );\n\n        //////////////////////////////////////////////////////////////////////\n        // tags\n        //////////////////////////////////////////////////////////////////////\n\n        struct char_or_wchar_t_array_tag {};\n        \n    } // namespace 'range_detail'\n    \n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/detail/str_types.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DETAIL_STR_TYPES_HPP\n#define BOOST_RANGE_DETAIL_STR_TYPES_HPP\n\n#include <boost/range/size_type.hpp>\n#include <boost/range/iterator.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_mutable_iterator<T*>\n    {\n        typedef T* type;\n    };\n\n    template< class T >\n    struct range_const_iterator<T*>\n    {\n        typedef const T* type;\n    };\n\n    template< class T >\n    struct range_size<T*>\n    {\n       typedef std::size_t type;\n    };    \n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/difference_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DIFFERENCE_TYPE_HPP\n#define BOOST_RANGE_DIFFERENCE_TYPE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_difference : iterator_difference< typename range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/distance.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_DISTANCE_HPP\n#define BOOST_RANGE_DISTANCE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/difference_type.hpp>\n\nnamespace boost \n{\n\n    template< class T >\n    inline BOOST_DEDUCED_TYPENAME range_difference<T>::type \n    distance( const T& r )\n    {\n        return std::distance( boost::begin( r ), boost::end( r ) );\n    }\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/empty.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_EMPTY_HPP\n#define BOOST_RANGE_EMPTY_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n\nnamespace boost \n{ \n\n    template< class T >\n    inline bool empty( const T& r )\n    {\n        return boost::begin( r ) == boost::end( r );\n    }\n\n} // namepace 'boost'\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/end.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_END_HPP\n#define BOOST_RANGE_END_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#include <boost/range/detail/end.hpp>\n#else\n\n#include <boost/range/detail/implementation_help.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n\nnamespace boost\n{\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\nnamespace range_detail\n{\n#endif\n\n        //////////////////////////////////////////////////////////////////////\n        // primary template\n        //////////////////////////////////////////////////////////////////////\n        template< typename C >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type\n        range_end( C& c )\n        {\n            //\n            // If you get a compile-error here, it is most likely because\n            // you have not implemented range_begin() properly in\n            // the namespace of C\n            //\n            return c.end();\n        }\n\n        //////////////////////////////////////////////////////////////////////\n        // pair\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename Iterator >\n        inline Iterator range_end( const std::pair<Iterator,Iterator>& p )\n        {\n            return p.second;\n        }\n\n        template< typename Iterator >\n        inline Iterator range_end( std::pair<Iterator,Iterator>& p )\n        {\n            return p.second;\n        }\n\n        //////////////////////////////////////////////////////////////////////\n        // array\n        //////////////////////////////////////////////////////////////////////\n\n        template< typename T, std::size_t sz >\n        inline const T* range_end( const T (&a)[sz] )\n        {\n            return range_detail::array_end<T,sz>( a );\n        }\n\n        template< typename T, std::size_t sz >\n        inline T* range_end( T (&a)[sz] )\n        {\n            return range_detail::array_end<T,sz>( a );\n        }\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n} // namespace 'range_detail'\n#endif\n\nnamespace range_adl_barrier\n{\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n    using namespace range_detail;\n#endif\n    return range_end( r );\n}\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r )\n{\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n    using namespace range_detail;\n#endif\n    return range_end( r );\n}\n\n    } // namespace range_adl_barrier\n} // namespace 'boost'\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\nnamespace boost\n{\n    namespace range_adl_barrier\n    {\n        template< class T >\n        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type\n        const_end( const T& r )\n        {\n            return boost::range_adl_barrier::end( r );\n        }\n    } // namespace range_adl_barrier\n    using namespace range_adl_barrier;\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/functions.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2006. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_FUNCTIONS_HPP\n#define BOOST_RANGE_FUNCTIONS_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/size.hpp>\n#include <boost/range/distance.hpp>\n#include <boost/range/empty.hpp>\n#include <boost/range/rbegin.hpp>\n#include <boost/range/rend.hpp>\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_ITERATOR_HPP\n#define BOOST_RANGE_ITERATOR_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/mutable_iterator.hpp>\n#include <boost/range/const_iterator.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/mpl/eval_if.hpp>\n\nnamespace boost\n{\n\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n\n    namespace range_detail_vc7_1\n    {\n       template< typename C, typename Sig = void(C) >\n       struct range_iterator\n       {\n           typedef BOOST_RANGE_DEDUCED_TYPENAME\n               mpl::eval_if_c< is_const<C>::value,\n                               range_const_iterator< typename remove_const<C>::type >,\n                               range_mutable_iterator<C> >::type type;\n       };\n\n       template< typename C, typename T >\n       struct range_iterator< C, void(T[]) >\n       {\n           typedef T* type;\n       };\n    }\n\n#endif\n\n    template< typename C >\n    struct range_iterator\n    {\n#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)\n\n        typedef BOOST_RANGE_DEDUCED_TYPENAME\n               range_detail_vc7_1::range_iterator<C>::type type;\n\n#else\n\n        typedef BOOST_RANGE_DEDUCED_TYPENAME\n            mpl::eval_if_c< is_const<C>::value,\n                            range_const_iterator< typename remove_const<C>::type >,\n                            range_mutable_iterator<C> >::type type;\n\n#endif\n    };\n\n} // namespace boost\n\n//#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/iterator_range.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED\n\n#include \"boost/range/iterator_range_core.hpp\"\n#include \"boost/range/iterator_range_io.hpp\"\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/iterator_range_core.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves & Thorsten Ottosen & Pavol Droba 2003-2004.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED\n\n#include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( push )\n    #pragma warning( disable : 4996 )\n#endif\n\n#include <boost/assert.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <boost/iterator/iterator_facade.hpp>\n#include <boost/type_traits/is_abstract.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/range/functions.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/range/difference_type.hpp>\n#include <boost/range/algorithm/equal.hpp>\n#include <boost/range/detail/safe_bool.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <iterator>\n#include <algorithm>\n#include <cstddef>\n\n/*! \\file\n    Defines the \\c iterator_class and related functions.\n    \\c iterator_range is a simple wrapper of iterator pair idiom. It provides\n    a rich subset of Container interface.\n*/\n\n\nnamespace boost\n{\n    namespace iterator_range_detail\n    {\n        //\n        // The functions adl_begin and adl_end are implemented in a separate\n        // class for gcc-2.9x\n        //\n        template<class IteratorT>\n        struct iterator_range_impl {\n            template< class ForwardRange >\n            static IteratorT adl_begin( ForwardRange& r )\n            {\n                return static_cast<IteratorT>( boost::begin( r ) );\n            }\n\n            template< class ForwardRange >\n            static IteratorT adl_end( ForwardRange& r )\n            {\n                return static_cast<IteratorT>( boost::end( r ) );\n            }\n        };\n\n        template< class Left, class Right >\n        inline bool less_than( const Left& l, const Right& r )\n        {\n            return std::lexicographical_compare( boost::begin(l),\n                                                 boost::end(l),\n                                                 boost::begin(r),\n                                                 boost::end(r) );\n        }\n        \n        template< class Left, class Right >\n        inline bool greater_than( const Left& l, const Right& r )\n        {\n            return less_than(r,l);\n        }\n        \n        template< class Left, class Right >\n        inline bool less_or_equal_than( const Left& l, const Right& r )\n        {\n            return !iterator_range_detail::less_than(r,l);\n        }\n        \n        template< class Left, class Right >\n        inline bool greater_or_equal_than( const Left& l, const Right& r )\n        {\n            return !iterator_range_detail::less_than(l,r);\n        }\n\n        // This version is maintained since it is used in other boost libraries\n        // such as Boost.Assign\n        template< class Left, class Right >\n        inline bool equal(const Left& l, const Right& r)\n        {\n            return boost::equal(l, r);\n        }\n\n        struct range_tag { };\n        struct const_range_tag { };\n    }\n\n//  iterator range template class -----------------------------------------//\n\n        //! iterator_range class\n        /*!\n            An \\c iterator_range delimits a range in a sequence by beginning and ending iterators.\n            An iterator_range can be passed to an algorithm which requires a sequence as an input.\n            For example, the \\c toupper() function may be used most frequently on strings,\n            but can also be used on iterator_ranges:\n\n            \\code\n                boost::tolower( find( s, \"UPPERCASE STRING\" ) );\n            \\endcode\n\n            Many algorithms working with sequences take a pair of iterators,\n            delimiting a working range, as an arguments. The \\c iterator_range class is an\n            encapsulation of a range identified by a pair of iterators.\n            It provides a collection interface,\n            so it is possible to pass an instance to an algorithm requiring a collection as an input.\n        */\n        template<class IteratorT>\n        class iterator_range\n        {\n            typedef range_detail::safe_bool< IteratorT iterator_range<IteratorT>::* > safe_bool_t;\n        protected: // Used by sub_range\n            //! implementation class\n            typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;\n        public:\n            //! this type\n            typedef iterator_range<IteratorT> type;\n            typedef BOOST_DEDUCED_TYPENAME safe_bool_t::unspecified_bool_type unspecified_bool_type;\n            //BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(value_type);\n\n            //! Encapsulated value type\n            typedef BOOST_DEDUCED_TYPENAME\n                iterator_value<IteratorT>::type value_type;\n\n            //! Difference type\n            typedef BOOST_DEDUCED_TYPENAME\n                iterator_difference<IteratorT>::type difference_type;\n\n            //! Size type\n            typedef std::size_t size_type; // note: must be unsigned\n\n            //! This type\n            typedef iterator_range<IteratorT> this_type;\n\n            //! Reference type\n            //\n            // Needed because value-type is the same for\n            // const and non-const iterators\n            //\n            typedef BOOST_DEDUCED_TYPENAME\n                iterator_reference<IteratorT>::type reference;\n\n            //! const_iterator type\n            /*!\n                There is no distinction between const_iterator and iterator.\n                These typedefs are provides to fulfill container interface\n            */\n            typedef IteratorT const_iterator;\n            //! iterator type\n            typedef IteratorT iterator;\n\n        private: // for return value of operator()()\n            typedef BOOST_DEDUCED_TYPENAME\n                boost::mpl::if_< boost::is_abstract<value_type>,\n                                 reference, value_type >::type abstract_value_type;\n\n        public:\n            iterator_range() : m_Begin( iterator() ), m_End( iterator() )\n            { }\n\n            //! Constructor from a pair of iterators\n            template< class Iterator >\n            iterator_range( Iterator Begin, Iterator End ) :\n                m_Begin(Begin), m_End(End)\n            {}\n\n            //! Constructor from a Range\n            template< class Range >\n            iterator_range( const Range& r ) :\n                m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )\n            {}\n\n            //! Constructor from a Range\n            template< class Range >\n            iterator_range( Range& r ) :\n                m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )\n            {}\n\n            //! Constructor from a Range\n            template< class Range >\n            iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :\n                m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )\n            {}\n\n            //! Constructor from a Range\n            template< class Range >\n            iterator_range( Range& r, iterator_range_detail::range_tag ) :\n                m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )\n            {}\n\n            #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n            this_type& operator=( const this_type& r )\n            {\n                m_Begin  = r.begin();\n                m_End    = r.end();\n                return *this;\n            }\n            #endif\n\n            template< class Iterator >\n            iterator_range& operator=( const iterator_range<Iterator>& r )\n            {\n                m_Begin  = r.begin();\n                m_End    = r.end();\n                return *this;\n            }\n\n            template< class ForwardRange >\n            iterator_range& operator=( ForwardRange& r )\n            {\n                m_Begin  = impl::adl_begin( r );\n                m_End    = impl::adl_end( r );\n                return *this;\n            }\n\n            template< class ForwardRange >\n            iterator_range& operator=( const ForwardRange& r )\n            {\n                m_Begin  = impl::adl_begin( r );\n                m_End    = impl::adl_end( r );\n                return *this;\n            }\n\n            IteratorT begin() const\n            {\n                return m_Begin;\n            }\n\n            IteratorT end() const\n            {\n                return m_End;\n            }\n\n            difference_type size() const\n            {\n                return m_End - m_Begin;\n            }\n\n            bool empty() const\n            {\n                return m_Begin == m_End;\n            }\n\n            operator unspecified_bool_type() const\n            {\n                return safe_bool_t::to_unspecified_bool(m_Begin != m_End, &iterator_range::m_Begin);\n            }\n\n            bool operator!() const\n            {\n                return empty();\n            }\n\n            bool equal( const iterator_range& r ) const\n            {\n                return m_Begin == r.m_Begin && m_End == r.m_End;\n            }\n\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n            bool operator==( const iterator_range& r ) const\n            {\n                return boost::equal( *this, r );\n            }\n\n            bool operator!=( const iterator_range& r ) const\n            {\n                return !operator==(r);\n            }\n\n           bool operator<( const iterator_range& r ) const\n           {\n               return iterator_range_detail::less_than( *this, r );\n           }\n           \n           bool operator>( const iterator_range& r ) const\n           {\n               return iterator_range_detail::greater_than( *this, r );\n           }\n           \n           bool operator<=( const iterator_range& r ) const\n           {\n               return iterator_range_detail::less_or_equal_than( *this, r );\n           }\n           \n           bool operator>=( const iterator_range& r ) const\n           {\n               return iterator_range_detail::greater_or_equal_than( *this, r );\n           }\n\n#endif\n\n        public: // convenience\n           reference front() const\n           {\n               BOOST_ASSERT( !empty() );\n               return *m_Begin;\n           }\n\n           reference back() const\n           {\n               BOOST_ASSERT( !empty() );\n               IteratorT last( m_End );\n               return *--last;\n           }\n\n           // pop_front() - added to model the SinglePassRangePrimitiveConcept\n           void pop_front()\n           {\n               BOOST_ASSERT( !empty() );\n               ++m_Begin;\n           }\n\n           // pop_back() - added to model the BidirectionalRangePrimitiveConcept\n           void pop_back()\n           {\n               BOOST_ASSERT( !empty() );\n               --m_End;\n           }\n\n           reference operator[]( difference_type at ) const\n           {\n               BOOST_ASSERT( at >= 0 && at < size() );\n               return m_Begin[at];\n           }\n\n           //\n           // When storing transform iterators, operator[]()\n           // fails because it returns by reference. Therefore\n           // operator()() is provided for these cases.\n           //\n           abstract_value_type operator()( difference_type at ) const\n           {\n               BOOST_ASSERT( at >= 0 && at < size() );\n               return m_Begin[at];\n           }\n\n           iterator_range& advance_begin( difference_type n )\n           {\n               std::advance( m_Begin, n );\n               return *this;\n           }\n\n           iterator_range& advance_end( difference_type n )\n           {\n               std::advance( m_End, n );\n               return *this;\n           }\n\n        private:\n            // begin and end iterators\n            IteratorT m_Begin;\n            IteratorT m_End;\n\n        protected:\n            //\n            // Allow subclasses an easy way to access the\n            // base type\n            //\n            typedef iterator_range iterator_range_;\n        };\n\n//  iterator range free-standing operators ---------------------------//\n\n        /////////////////////////////////////////////////////////////////////\n        // comparison operators\n        /////////////////////////////////////////////////////////////////////\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator==( const ForwardRange& l,\n                                const iterator_range<IteratorT>& r )\n        {\n            return boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator!=( const ForwardRange& l,\n                                const iterator_range<IteratorT>& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator<( const ForwardRange& l,\n                               const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator<=( const ForwardRange& l,\n                                const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator>( const ForwardRange& l,\n                               const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator>=( const ForwardRange& l,\n                                const iterator_range<IteratorT>& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n#else\n        template< class Iterator1T, class Iterator2T >\n        inline bool operator==( const iterator_range<Iterator1T>& l,\n                                const iterator_range<Iterator2T>& r )\n        {\n            return boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator==( const iterator_range<IteratorT>& l,\n                                const ForwardRange& r )\n        {\n            return boost::equal( l, r );\n        }\n\n\n        template< class Iterator1T, class Iterator2T >\n        inline bool operator!=( const iterator_range<Iterator1T>& l,\n                                const iterator_range<Iterator2T>& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator!=( const iterator_range<IteratorT>& l,\n                                const ForwardRange& r )\n        {\n            return !boost::equal( l, r );\n        }\n\n\n        template< class Iterator1T, class Iterator2T >\n        inline bool operator<( const iterator_range<Iterator1T>& l,\n                               const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n\n        template< class IteratorT, class ForwardRange >\n        inline bool operator<( const iterator_range<IteratorT>& l,\n                               const ForwardRange& r )\n        {\n            return iterator_range_detail::less_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool operator<=( const iterator_range<Iterator1T>& l,\n                                const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator<=( const iterator_range<IteratorT>& l,\n                                const ForwardRange& r )\n        {\n            return iterator_range_detail::less_or_equal_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool operator>( const iterator_range<Iterator1T>& l,\n                               const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator>( const iterator_range<IteratorT>& l,\n                               const ForwardRange& r )\n        {\n            return iterator_range_detail::greater_than( l, r );\n        }\n        \n        template< class Iterator1T, class Iterator2T >\n        inline bool operator>=( const iterator_range<Iterator1T>& l,\n                                const iterator_range<Iterator2T>& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n        \n        template< class IteratorT, class ForwardRange >\n        inline bool operator>=( const iterator_range<IteratorT>& l,\n                                const ForwardRange& r )\n        {\n            return iterator_range_detail::greater_or_equal_than( l, r );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n//  iterator range utilities -----------------------------------------//\n\n        //! iterator_range construct helper\n        /*!\n            Construct an \\c iterator_range from a pair of iterators\n\n            \\param Begin A begin iterator\n            \\param End An end iterator\n            \\return iterator_range object\n        */\n        template< typename IteratorT >\n        inline iterator_range< IteratorT >\n        make_iterator_range( IteratorT Begin, IteratorT End )\n        {\n            return iterator_range<IteratorT>( Begin, End );\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        template< typename Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r )\n        {\n            return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n                ( boost::begin( r ), boost::end( r ) );\n        }\n\n#else\n        //! iterator_range construct helper\n        /*!\n            Construct an \\c iterator_range from a \\c Range containing the begin\n            and end iterators.\n        */\n        template< class ForwardRange >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >\n        make_iterator_range( ForwardRange& r )\n        {\n           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >\n                ( r, iterator_range_detail::range_tag() );\n        }\n\n        template< class ForwardRange >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >\n        make_iterator_range( const ForwardRange& r )\n        {\n           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >\n                ( r, iterator_range_detail::const_range_tag() );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        namespace iterator_range_detail\n        {\n            template< class Range >\n            inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n            make_range_impl( Range& r,\n                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n            {\n                //\n                // Not worth the effort\n                //\n                //if( advance_begin == 0 && advance_end == 0 )\n                //    return make_iterator_range( r );\n                //\n\n                BOOST_DEDUCED_TYPENAME range_iterator<Range>::type\n                    new_begin = boost::begin( r ),\n                    new_end   = boost::end( r );\n                std::advance( new_begin, advance_begin );\n                std::advance( new_end, advance_end );\n                return make_iterator_range( new_begin, new_end );\n            }\n        }\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            //BOOST_ASSERT( advance_begin - advance_end <= size(r) && \"creating invalid range\" );\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n#else\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >\n        make_iterator_range( Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            //BOOST_ASSERT( advance_begin - advance_end <= size(r) && \"creating invalid range\" );\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n        template< class Range >\n        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type >\n        make_iterator_range( const Range& r,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,\n                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )\n        {\n            //BOOST_ASSERT( advance_begin - advance_end <= size(r) && \"creating invalid range\" );\n            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );\n        }\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\n        //! copy a range into a sequence\n        /*!\n            Construct a new sequence of the specified type from the elements\n            in the given range\n\n            \\param Range An input range\n            \\return New sequence\n        */\n        template< typename SeqT, typename Range >\n        inline SeqT copy_range( const Range& r )\n        {\n            return SeqT( boost::begin( r ), boost::end( r ) );\n        }\n\n} // namespace 'boost'\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( pop )\n#endif\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/iterator_range_io.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Neil Groves 2009.\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n#ifndef BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED\n#define BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning( push )\n    #pragma warning( disable : 4996 )\n#endif\n\n// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.\n#ifndef BOOST_OLD_IOSTREAMS \n# if defined(__STL_CONFIG_H) && \\\n    !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \\\n    /**/\n#  define BOOST_OLD_IOSTREAMS\n# endif\n#endif // #ifndef BOOST_OLD_IOSTREAMS\n\n#ifndef _STLP_NO_IOSTREAMS\n# ifndef BOOST_OLD_IOSTREAMS\n#  include <ostream>\n# else\n#  include <ostream.h>\n# endif\n#endif // _STLP_NO_IOSTREAMS\n\n#include <boost/range/iterator_range_core.hpp>\n#include <iterator>\n#include <algorithm>\n#include <cstddef>\n\nnamespace boost\n{\n\n#ifndef _STLP_NO_IOSTREAMS\n# ifndef BOOST_OLD_IOSTREAMS   \n\n        //! iterator_range output operator\n        /*!\n            Output the range to an ostream. Elements are outputed\n            in a sequence without separators.\n        */\n        template< typename IteratorT, typename Elem, typename Traits >\n        inline std::basic_ostream<Elem,Traits>& operator<<( \n                    std::basic_ostream<Elem, Traits>& Os,\n                    const iterator_range<IteratorT>& r )\n        {\n            std::copy( r.begin(), r.end(), \n                       std::ostream_iterator< BOOST_DEDUCED_TYPENAME \n                                              iterator_value<IteratorT>::type, \n                                              Elem, Traits>(Os) );\n            return Os;\n        }\n\n# else\n\n        //! iterator_range output operator\n        /*!\n            Output the range to an ostream. Elements are outputed\n            in a sequence without separators.\n        */\n        template< typename IteratorT >\n        inline std::ostream& operator<<( \n                    std::ostream& Os,\n                    const iterator_range<IteratorT>& r )\n        {\n            std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os));\n            return Os;\n        }\n\n# endif\n#endif // _STLP_NO_IOSTREAMS\n\n} // namespace boost\n\n#undef BOOST_OLD_IOSTREAMS\n\n#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))\n    #pragma warning(pop)\n#endif\n\n#endif // include guard\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/mutable_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP\n#define BOOST_RANGE_MUTABLE_ITERATOR_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/range/detail/iterator.hpp>\n#else\n\n#include <boost/range/detail/extract_optional_type.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    namespace range_detail {\n        BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )\n    }\n\n    template< typename C >\n    struct range_mutable_iterator : range_detail::extract_iterator<C>\n    {};\n    \n    //////////////////////////////////////////////////////////////////////////\n    // pair\n    //////////////////////////////////////////////////////////////////////////\n\n    template< typename Iterator >\n    struct range_mutable_iterator< std::pair<Iterator,Iterator> >\n    {\n        typedef Iterator type;\n    };\n\n    //////////////////////////////////////////////////////////////////////////\n    // array\n    //////////////////////////////////////////////////////////////////////////\n\n    template< typename T, std::size_t sz >\n    struct range_mutable_iterator< T[sz] >\n    {\n        typedef T* type;\n    };\n\n} // namespace boost\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/rbegin.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_RBEGIN_HPP\n#define BOOST_RANGE_RBEGIN_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/end.hpp>\n#include <boost/range/reverse_iterator.hpp>\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrbegin( C& c )\n{\n    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( boost::end( c ) );\n}\n\n#else\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrbegin( C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\n        iter_type;\n    return iter_type( boost::end( c ) );\n}\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\nrbegin( const C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\n        iter_type;\n    return iter_type( boost::end( c ) );\n}\n\n#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type\nconst_rbegin( const T& r )\n{\n    return boost::rbegin( r );\n}\n\n} // namespace 'boost'\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/rend.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REND_HPP\n#define BOOST_RANGE_REND_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/begin.hpp>\n#include <boost/range/reverse_iterator.hpp>\n\nnamespace boost\n{\n\n#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrend( C& c )\n{\n    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( boost::begin( c ) );\n}\n\n#else\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\nrend( C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type\n               iter_type;\n    return iter_type( boost::begin( c ) );\n}\n\ntemplate< class C >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\nrend( const C& c )\n{\n    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type\n        iter_type;\n    return iter_type( boost::begin( c ) );\n}\n\n#endif\n\ntemplate< class T >\ninline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type\nconst_rend( const T& r )\n{\n    return boost::rend( r );\n}\n\n} // namespace 'boost'\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/reverse_iterator.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_REVERSE_ITERATOR_HPP\n#define BOOST_RANGE_REVERSE_ITERATOR_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n#include <boost/iterator/reverse_iterator.hpp>\n\n\nnamespace boost\n{\n    //////////////////////////////////////////////////////////////////////////\n    // default\n    //////////////////////////////////////////////////////////////////////////\n    \n    template< typename C >\n    struct range_reverse_iterator\n    {\n        typedef reverse_iterator< \n            BOOST_DEDUCED_TYPENAME range_iterator<C>::type > type;\n    };\n    \n\n} // namespace boost\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/size.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_SIZE_HPP\n#define BOOST_RANGE_SIZE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/begin.hpp>\n#include <boost/range/end.hpp>\n#include <boost/range/size_type.hpp>\n#include <boost/assert.hpp>\n\nnamespace boost\n{\n    namespace range_detail\n    {\n        template<class SinglePassRange>\n        inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type\n        range_calculate_size(const SinglePassRange& rng)\n        {\n            BOOST_ASSERT( (boost::end(rng) - boost::begin(rng)) >= 0 &&\n                          \"reachability invariant broken!\" );\n            return boost::end(rng) - boost::begin(rng);\n        }\n    }\n\n    template<class SinglePassRange>\n    inline BOOST_DEDUCED_TYPENAME range_size<const SinglePassRange>::type\n    size(const SinglePassRange& rng)\n    {\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(__GNUC__, < 3) \\\n    /**/\n        using namespace range_detail;\n#endif\n        return range_calculate_size(rng);\n    }\n\n} // namespace 'boost'\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/size_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_SIZE_TYPE_HPP\n#define BOOST_RANGE_SIZE_TYPE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/difference_type.hpp>\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/range/detail/size_type.hpp>\n#else\n\n#include <boost/utility/enable_if.hpp>\n#include <boost/type_traits/make_unsigned.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <cstddef>\n#include <utility>\n\nnamespace boost\n{\n    namespace detail\n    {\n\n        //////////////////////////////////////////////////////////////////////////\n        // default\n        //////////////////////////////////////////////////////////////////////////\n\n        template<typename T>\n        class has_size_type\n        {\n            typedef char no_type;\n            struct yes_type { char dummy[2]; };\n\n            template<typename C>\n            static yes_type test(BOOST_DEDUCED_TYPENAME C::size_type x);\n\n            template<typename C, typename Arg>\n            static no_type test(Arg x);\n\n        public:\n            static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);\n        };\n\n        template<typename C, typename Enabler=void>\n        struct range_size\n        {\n            typedef BOOST_DEDUCED_TYPENAME make_unsigned<\n                BOOST_DEDUCED_TYPENAME range_difference<C>::type\n            >::type type;\n        };\n\n        template<typename C>\n        struct range_size<\n            C,\n            BOOST_DEDUCED_TYPENAME enable_if<has_size_type<C>, void>::type\n        >\n        {\n            typedef BOOST_DEDUCED_TYPENAME C::size_type type;\n        };\n\n    }\n\n    template< class T >\n    struct range_size :\n        detail::range_size<T>\n    { };\n\n    template< class T >\n    struct range_size<const T >\n        : detail::range_size<T>\n    { };\n\n} // namespace boost\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/range/value_type.hpp",
    "content": "// Boost.Range library\n//\n//  Copyright Thorsten Ottosen 2003-2004. Use, modification and\n//  distribution is subject to the Boost Software License, Version\n//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n// For more information, see http://www.boost.org/libs/range/\n//\n\n#ifndef BOOST_RANGE_VALUE_TYPE_HPP\n#define BOOST_RANGE_VALUE_TYPE_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1200)\n# pragma once\n#endif\n\n#include <boost/range/config.hpp>\n#include <boost/range/iterator.hpp>\n\n//#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n//#include <boost/range/detail/value_type.hpp>\n//#else\n\n#include <boost/iterator/iterator_traits.hpp>\n\nnamespace boost\n{\n    template< class T >\n    struct range_value : iterator_value< typename range_iterator<T>::type >\n    { };\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/ref.hpp",
    "content": "#ifndef BOOST_REF_HPP_INCLUDED\n#define BOOST_REF_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n#include <boost/config.hpp>\n#include <boost/utility/addressof.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/detail/workaround.hpp>\n\n//\n//  ref.hpp - ref/cref, useful helper functions\n//\n//  Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//  Copyright (C) 2001, 2002 Peter Dimov\n//  Copyright (C) 2002 David Abrahams\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/bind/ref.html for documentation.\n//\n\nnamespace boost\n{\n\ntemplate<class T> class reference_wrapper\n{ \npublic:\n    typedef T type;\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )\n\n    explicit reference_wrapper(T& t): t_(&t) {}\n\n#else\n\n    explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}\n\n#endif\n\n    operator T& () const { return *t_; }\n\n    T& get() const { return *t_; }\n\n    T* get_pointer() const { return t_; }\n\nprivate:\n\n    T* t_;\n};\n\n# if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )\n#  define BOOST_REF_CONST\n# else\n#  define BOOST_REF_CONST const\n# endif\n\ntemplate<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t)\n{ \n    return reference_wrapper<T>(t);\n}\n\ntemplate<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)\n{\n    return reference_wrapper<T const>(t);\n}\n\n# undef BOOST_REF_CONST\n\n# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate<typename T>\nclass is_reference_wrapper\n    : public mpl::false_\n{\n};\n\ntemplate<typename T>\nclass unwrap_reference\n{\n public:\n    typedef T type;\n};\n\n#  define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \\\ntemplate<typename T> \\\nclass is_reference_wrapper< X > \\\n    : public mpl::true_ \\\n{ \\\n}; \\\n\\\ntemplate<typename T> \\\nclass unwrap_reference< X > \\\n{ \\\n public: \\\n    typedef T type; \\\n}; \\\n/**/\n\nAUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T>)\n#if !defined(BOOST_NO_CV_SPECIALIZATIONS)\nAUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const)\nAUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> volatile)\nAUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const volatile)\n#endif\n\n#  undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF\n\n# else // no partial specialization\n\n} // namespace boost\n\n#include <boost/type.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n  typedef char (&yes_reference_wrapper_t)[1];\n  typedef char (&no_reference_wrapper_t)[2];\n      \n  no_reference_wrapper_t is_reference_wrapper_test(...);\n\n  template<typename T>\n  yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper<T> >);\n\n  template<bool wrapped>\n  struct reference_unwrapper\n  {\n      template <class T>\n      struct apply\n      {\n          typedef T type;\n      };\n  };\n\n  template<>\n  struct reference_unwrapper<true>\n  {\n      template <class T>\n      struct apply\n      {\n          typedef typename T::type type;\n      };\n  };\n}\n\ntemplate<typename T>\nclass is_reference_wrapper\n{\n public:\n    BOOST_STATIC_CONSTANT(\n        bool, value = (\n             sizeof(detail::is_reference_wrapper_test(type<T>()))\n            == sizeof(detail::yes_reference_wrapper_t)));\n    \n    typedef ::boost::mpl::bool_<value> type;\n};\n\ntemplate <typename T>\nclass unwrap_reference\n    : public detail::reference_unwrapper<\n        is_reference_wrapper<T>::value\n      >::template apply<T>\n{};\n\n# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate <class T> inline typename unwrap_reference<T>::type&\nunwrap_ref(T& t)\n{\n    return t;\n}\n\ntemplate<class T> inline T* get_pointer( reference_wrapper<T> const & r )\n{\n    return r.get_pointer();\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_REF_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/scoped_array.hpp",
    "content": "#ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED\n#define BOOST_SCOPED_ARRAY_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_array.htm\n//\n\n#include <boost/smart_ptr/scoped_array.hpp>\n\n#endif  // #ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/scoped_ptr.hpp",
    "content": "#ifndef BOOST_SCOPED_PTR_HPP_INCLUDED\n#define BOOST_SCOPED_PTR_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm\n//\n\n#include <boost/smart_ptr/scoped_ptr.hpp>\n\n#endif // #ifndef BOOST_SCOPED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/shared_array.hpp",
    "content": "#ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED\n#define BOOST_SHARED_ARRAY_HPP_INCLUDED\n\n//\n//  shared_array.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.\n//\n\n#include <boost/smart_ptr/shared_array.hpp>\n\n#endif  // #ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/shared_ptr.hpp",
    "content": "#ifndef BOOST_SHARED_PTR_HPP_INCLUDED\n#define BOOST_SHARED_PTR_HPP_INCLUDED\n\n//\n//  shared_ptr.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.\n//\n\n#include <boost/smart_ptr/shared_ptr.hpp>\n\n#endif  // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/bad_weak_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/smart_ptr/bad_weak_ptr.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <exception>\n\n#ifdef __BORLANDC__\n# pragma warn -8026     // Functions with excep. spec. are not expanded inline\n#endif\n\nnamespace boost\n{\n\n// The standard library that comes with Borland C++ 5.5.1, 5.6.4\n// defines std::exception and its members as having C calling\n// convention (-pc). When the definition of bad_weak_ptr\n// is compiled with -ps, the compiler issues an error.\n// Hence, the temporary #pragma option -pc below.\n\n#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564\n# pragma option push -pc\n#endif\n\nclass bad_weak_ptr: public std::exception\n{\npublic:\n\n    virtual char const * what() const throw()\n    {\n        return \"tr1::bad_weak_ptr\";\n    }\n};\n\n#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564\n# pragma option pop\n#endif\n\n} // namespace boost\n\n#ifdef __BORLANDC__\n# pragma warn .8026     // Functions with excep. spec. are not expanded inline\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/operator_bool.hpp",
    "content": "//  This header intentionally has no include guards.\n//\n//  Copyright (c) 2001-2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#if ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)\n\n    operator bool () const\n    {\n        return px != 0;\n    }\n\n#elif defined( _MANAGED )\n\n    static void unspecified_bool( this_type*** )\n    {\n    }\n\n    typedef void (*unspecified_bool_type)( this_type*** );\n\n    operator unspecified_bool_type() const // never throws\n    {\n        return px == 0? 0: unspecified_bool;\n    }\n\n#elif \\\n    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \\\n    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \\\n    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )\n\n    typedef T * (this_type::*unspecified_bool_type)() const;\n\n    operator unspecified_bool_type() const // never throws\n    {\n        return px == 0? 0: &this_type::get;\n    }\n\n#else\n\n    typedef T * this_type::*unspecified_bool_type;\n\n    operator unspecified_bool_type() const // never throws\n    {\n        return px == 0? 0: &this_type::px;\n    }\n\n#endif\n\n    // operator! is redundant, but some compilers need it\n    bool operator! () const // never throws\n    {\n        return px == 0;\n    }\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/shared_count.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/shared_count.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#ifdef __BORLANDC__\n# pragma warn -8027     // Functions containing try are not expanded inline\n#endif\n\n#include <boost/config.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/smart_ptr/bad_weak_ptr.hpp>\n#include <boost/smart_ptr/detail/sp_counted_base.hpp>\n#include <boost/smart_ptr/detail/sp_counted_impl.hpp>\n#include <boost/detail/workaround.hpp>\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n#include <functional>       // std::less\n#include <new>              // std::bad_alloc\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nint const shared_count_id = 0x2C35F101;\nint const   weak_count_id = 0x298C38A4;\n\n#endif\n\nstruct sp_nothrow_tag {};\n\ntemplate< class D > struct sp_inplace_tag\n{\n};\n\nclass weak_count;\n\nclass shared_count\n{\nprivate:\n\n    sp_counted_base * pi_;\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n    int id_;\n#endif\n\n    friend class weak_count;\n\npublic:\n\n    shared_count(): pi_(0) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n    }\n\n    template<class Y> explicit shared_count( Y * p ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_p<Y>( p );\n        }\n        catch(...)\n        {\n            boost::checked_delete( p );\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_p<Y>( p );\n\n        if( pi_ == 0 )\n        {\n            boost::checked_delete( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n    }\n\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )\n    template<class Y, class D> shared_count( Y * p, D d ): pi_(0)\n#else\n    template<class P, class D> shared_count( P p, D d ): pi_(0)\n#endif\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )\n        typedef Y* P;\n#endif\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_pd<P, D>(p, d);\n        }\n        catch(...)\n        {\n            d(p); // delete p\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_pd<P, D>(p, d);\n\n        if(pi_ == 0)\n        {\n            d(p); // delete p\n            boost::throw_exception(std::bad_alloc());\n        }\n\n#endif\n    }\n\n#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template< class P, class D > shared_count( P p, sp_inplace_tag<D> ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = new sp_counted_impl_pd< P, D >( p );\n        }\n        catch( ... )\n        {\n            D()( p ); // delete p\n            throw;\n        }\n\n#else\n\n        pi_ = new sp_counted_impl_pd< P, D >( p );\n\n        if( pi_ == 0 )\n        {\n            D()( p ); // delete p\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif // #ifndef BOOST_NO_EXCEPTIONS\n    }\n\n#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template<class P, class D, class A> shared_count( P p, D d, A a ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef sp_counted_impl_pda<P, D, A> impl_type;\n        typedef typename A::template rebind< impl_type >::other A2;\n\n        A2 a2( a );\n\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n            new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );\n        }\n        catch(...)\n        {\n            d( p );\n\n            if( pi_ != 0 )\n            {\n                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );\n            }\n\n            throw;\n        }\n\n#else\n\n        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n\n        if( pi_ != 0 )\n        {\n            new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );\n        }\n        else\n        {\n            d( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif\n    }\n\n#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n    template< class P, class D, class A > shared_count( P p, sp_inplace_tag< D >, A a ): pi_( 0 )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        typedef sp_counted_impl_pda< P, D, A > impl_type;\n        typedef typename A::template rebind< impl_type >::other A2;\n\n        A2 a2( a );\n\n#ifndef BOOST_NO_EXCEPTIONS\n\n        try\n        {\n            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n            new( static_cast< void* >( pi_ ) ) impl_type( p, a );\n        }\n        catch(...)\n        {\n            D()( p );\n\n            if( pi_ != 0 )\n            {\n                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );\n            }\n\n            throw;\n        }\n\n#else\n\n        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );\n\n        if( pi_ != 0 )\n        {\n            new( static_cast< void* >( pi_ ) ) impl_type( p, a );\n        }\n        else\n        {\n            D()( p );\n            boost::throw_exception( std::bad_alloc() );\n        }\n\n#endif // #ifndef BOOST_NO_EXCEPTIONS\n    }\n\n#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    // auto_ptr<Y> is special cased to provide the strong guarantee\n\n    template<class Y>\n    explicit shared_count( std::auto_ptr<Y> & r ): pi_( new sp_counted_impl_p<Y>( r.get() ) )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n#ifdef BOOST_NO_EXCEPTIONS\n\n        if( pi_ == 0 )\n        {\n            boost::throw_exception(std::bad_alloc());\n        }\n\n#endif\n\n        r.release();\n    }\n\n#endif \n\n    ~shared_count() // nothrow\n    {\n        if( pi_ != 0 ) pi_->release();\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        id_ = 0;\n#endif\n    }\n\n    shared_count(shared_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        if( pi_ != 0 ) pi_->add_ref_copy();\n    }\n\n#if defined( BOOST_HAS_RVALUE_REFS )\n\n    shared_count(shared_count && r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n    {\n        r.pi_ = 0;\n    }\n\n#endif\n\n    explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0\n    shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this when r.use_count() == 0\n\n    shared_count & operator= (shared_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if( tmp != 0 ) tmp->add_ref_copy();\n            if( pi_ != 0 ) pi_->release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    void swap(shared_count & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n        r.pi_ = pi_;\n        pi_ = tmp;\n    }\n\n    long use_count() const // nothrow\n    {\n        return pi_ != 0? pi_->use_count(): 0;\n    }\n\n    bool unique() const // nothrow\n    {\n        return use_count() == 1;\n    }\n\n    bool empty() const // nothrow\n    {\n        return pi_ == 0;\n    }\n\n    friend inline bool operator==(shared_count const & a, shared_count const & b)\n    {\n        return a.pi_ == b.pi_;\n    }\n\n    friend inline bool operator<(shared_count const & a, shared_count const & b)\n    {\n        return std::less<sp_counted_base *>()( a.pi_, b.pi_ );\n    }\n\n    void * get_deleter( sp_typeinfo const & ti ) const\n    {\n        return pi_? pi_->get_deleter( ti ): 0;\n    }\n};\n\n\nclass weak_count\n{\nprivate:\n\n    sp_counted_base * pi_;\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n    int id_;\n#endif\n\n    friend class shared_count;\n\npublic:\n\n    weak_count(): pi_(0) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n    }\n\n    weak_count(shared_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        if(pi_ != 0) pi_->weak_add_ref();\n    }\n\n    weak_count(weak_count const & r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        if(pi_ != 0) pi_->weak_add_ref();\n    }\n\n// Move support\n\n#if defined( BOOST_HAS_RVALUE_REFS )\n\n    weak_count(weak_count && r): pi_(r.pi_) // nothrow\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(weak_count_id)\n#endif\n    {\n        r.pi_ = 0;\n    }\n\n#endif\n\n    ~weak_count() // nothrow\n    {\n        if(pi_ != 0) pi_->weak_release();\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        id_ = 0;\n#endif\n    }\n\n    weak_count & operator= (shared_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if(tmp != 0) tmp->weak_add_ref();\n            if(pi_ != 0) pi_->weak_release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    weak_count & operator= (weak_count const & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n\n        if( tmp != pi_ )\n        {\n            if(tmp != 0) tmp->weak_add_ref();\n            if(pi_ != 0) pi_->weak_release();\n            pi_ = tmp;\n        }\n\n        return *this;\n    }\n\n    void swap(weak_count & r) // nothrow\n    {\n        sp_counted_base * tmp = r.pi_;\n        r.pi_ = pi_;\n        pi_ = tmp;\n    }\n\n    long use_count() const // nothrow\n    {\n        return pi_ != 0? pi_->use_count(): 0;\n    }\n\n    bool empty() const // nothrow\n    {\n        return pi_ == 0;\n    }\n\n    friend inline bool operator==(weak_count const & a, weak_count const & b)\n    {\n        return a.pi_ == b.pi_;\n    }\n\n    friend inline bool operator<(weak_count const & a, weak_count const & b)\n    {\n        return std::less<sp_counted_base *>()(a.pi_, b.pi_);\n    }\n};\n\ninline shared_count::shared_count( weak_count const & r ): pi_( r.pi_ )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n{\n    if( pi_ == 0 || !pi_->add_ref_lock() )\n    {\n        boost::throw_exception( boost::bad_weak_ptr() );\n    }\n}\n\ninline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_( r.pi_ )\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        , id_(shared_count_id)\n#endif\n{\n    if( pi_ != 0 && !pi_->add_ref_lock() )\n    {\n        pi_ = 0;\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#ifdef __BORLANDC__\n# pragma warn .8027     // Functions containing try are not expanded inline\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_convertible.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//  detail/sp_convertible.hpp\n//\n//  Copyright 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n\n#include <boost/config.hpp>\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( BOOST_NO_SFINAE )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x630 )\n# define BOOST_SP_NO_SP_CONVERTIBLE\n#endif\n\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< class Y, class T > struct sp_convertible\n{\n    typedef char (&yes) [1];\n    typedef char (&no)  [2];\n\n    static yes f( T* );\n    static no  f( ... );\n\n    enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };\n};\n\nstruct sp_empty\n{\n};\n\ntemplate< bool > struct sp_enable_if_convertible_impl;\n\ntemplate<> struct sp_enable_if_convertible_impl<true>\n{\n    typedef sp_empty type;\n};\n\ntemplate<> struct sp_enable_if_convertible_impl<false>\n{\n};\n\ntemplate< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value >\n{\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif // !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_counted_base.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base.hpp\n//\n//  Copyright 2005, 2006 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/sp_has_sync.hpp>\n\n#if defined( BOOST_SP_DISABLE_THREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#elif defined( BOOST_SP_USE_SPINLOCK )\n# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>\n\n#elif defined( BOOST_SP_USE_PTHREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_pt.hpp>\n\n#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp>\n\n#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp>\n\n#elif defined(__HP_aCC) && defined(__ia64)\n# include <boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp>\n\n#elif defined( __IBMCPP__ ) && defined( __powerpc )\n# include <boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp>\n\n#elif defined( __MWERKS__ ) && defined( __POWERPC__ )\n# include <boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp>\n\n#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp>\n\n#elif defined( BOOST_SP_HAS_SYNC )\n# include <boost/smart_ptr/detail/sp_counted_base_sync.hpp>\n\n#elif defined(__GNUC__) && ( defined( __sparcv9 ) || ( defined( __sparcv8 ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 402 ) ) )\n# include <boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp>\n\n#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)\n# include <boost/smart_ptr/detail/sp_counted_base_w32.hpp>\n\n#elif !defined( BOOST_HAS_THREADS )\n# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>\n\n#else\n# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>\n\n#endif\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp",
    "content": "#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS\n//\n//  Copyright (c) 2009, Spirent Communications, Inc.\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void atomic_increment( int * pw )\n{\n    // ++*pw;\n\n    int tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %0, %1\\n\\t\"\n        \"addiu %0, 1\\n\\t\"\n        \"sc %0, %1\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %0, 0b\":\n        \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw )\n    );\n}\n\ninline int atomic_decrement( int * pw )\n{\n    // return --*pw;\n\n    int rv, tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %1, %2\\n\\t\"\n        \"addiu %0, %1, -1\\n\\t\"\n        \"sc %0, %2\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %0, 0b\\n\\t\"\n        \"addiu %0, %1, -1\":\n        \"=&r\"( rv ), \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw ):\n        \"memory\"\n    );\n\n    return rv;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // if( *pw != 0 ) ++*pw;\n    // return *pw;\n\n    int rv, tmp;\n\n    __asm__ __volatile__\n    (\n        \"0:\\n\\t\"\n        \".set push\\n\\t\"\n        \".set mips2\\n\\t\"\n        \"ll %0, %2\\n\\t\"\n        \"beqz %0, 1f\\n\\t\"\n        \"addiu %1, %0, 1\\n\\t\"\n        \"sc %1, %2\\n\\t\"\n        \".set pop\\n\\t\"\n        \"beqz %1, 0b\\n\\t\"\n        \"addiu %0, %0, 1\\n\\t\"\n        \"1:\":\n        \"=&r\"( rv ), \"=&r\"( tmp ), \"=m\"( *pw ):\n        \"m\"( *pw ):\n        \"memory\"\n    );\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_decrement( &use_count_ ) == 0 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_decrement( &weak_count_ ) == 0 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_gcc_x86.hpp - g++ on 486+ or AMD64\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//\n//  Lock-free algorithm by Alexander Terekhov\n//\n//  Thanks to Ben Hitchings for the #weak + (#shared != 0)\n//  formulation\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int atomic_exchange_and_add( int * pw, int dv )\n{\n    // int r = *pw;\n    // *pw += dv;\n    // return r;\n\n    int r;\n\n    __asm__ __volatile__\n    (\n        \"lock\\n\\t\"\n        \"xadd %1, %0\":\n        \"=m\"( *pw ), \"=r\"( r ): // outputs (%0, %1)\n        \"m\"( *pw ), \"1\"( dv ): // inputs (%2, %3 == %1)\n        \"memory\", \"cc\" // clobbers\n    );\n\n    return r;\n}\n\ninline void atomic_increment( int * pw )\n{\n    //atomic_exchange_and_add( pw, 1 );\n\n    __asm__\n    (\n        \"lock\\n\\t\"\n        \"incl %0\":\n        \"=m\"( *pw ): // output (%0)\n        \"m\"( *pw ): // input (%1)\n        \"cc\" // clobbers\n    );\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    // int rv = *pw;\n    // if( rv != 0 ) ++*pw;\n    // return rv;\n\n    int rv, tmp;\n\n    __asm__\n    (\n        \"movl %0, %%eax\\n\\t\"\n        \"0:\\n\\t\"\n        \"test %%eax, %%eax\\n\\t\"\n        \"je 1f\\n\\t\"\n        \"movl %%eax, %2\\n\\t\"\n        \"incl %2\\n\\t\"\n        \"lock\\n\\t\"\n        \"cmpxchgl %2, %0\\n\\t\"\n        \"jne 0b\\n\\t\"\n        \"1:\":\n        \"=m\"( *pw ), \"=&a\"( rv ), \"=&r\"( tmp ): // outputs (%0, %1, %2)\n        \"m\"( *pw ): // input (%3)\n        \"cc\" // clobbers\n    );\n\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        return static_cast<int const volatile &>( use_count_ );\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_base_spin.hpp - spinlock pool atomic emulation\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/detail/sp_typeinfo.hpp>\n#include <boost/smart_ptr/detail/spinlock_pool.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline int atomic_exchange_and_add( int * pw, int dv )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n\n    int r = *pw;\n    *pw += dv;\n    return r;\n}\n\ninline void atomic_increment( int * pw )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n    ++*pw;\n}\n\ninline int atomic_conditional_increment( int * pw )\n{\n    spinlock_pool<1>::scoped_lock lock( pw );\n\n    int rv = *pw;\n    if( rv != 0 ) ++*pw;\n    return rv;\n}\n\nclass sp_counted_base\n{\nprivate:\n\n    sp_counted_base( sp_counted_base const & );\n    sp_counted_base & operator= ( sp_counted_base const & );\n\n    int use_count_;        // #shared\n    int weak_count_;       // #weak + (#shared != 0)\n\npublic:\n\n    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )\n    {\n    }\n\n    virtual ~sp_counted_base() // nothrow\n    {\n    }\n\n    // dispose() is called when use_count_ drops to zero, to release\n    // the resources managed by *this.\n\n    virtual void dispose() = 0; // nothrow\n\n    // destroy() is called when weak_count_ drops to zero.\n\n    virtual void destroy() // nothrow\n    {\n        delete this;\n    }\n\n    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;\n\n    void add_ref_copy()\n    {\n        atomic_increment( &use_count_ );\n    }\n\n    bool add_ref_lock() // true on success\n    {\n        return atomic_conditional_increment( &use_count_ ) != 0;\n    }\n\n    void release() // nothrow\n    {\n        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )\n        {\n            dispose();\n            weak_release();\n        }\n    }\n\n    void weak_add_ref() // nothrow\n    {\n        atomic_increment( &weak_count_ );\n    }\n\n    void weak_release() // nothrow\n    {\n        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )\n        {\n            destroy();\n        }\n    }\n\n    long use_count() const // nothrow\n    {\n        spinlock_pool<1>::scoped_lock lock( &use_count_ );\n        return use_count_;\n    }\n};\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_counted_impl.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  detail/sp_counted_impl.hpp\n//\n//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.\n//  Copyright 2004-2005 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible.\n#endif\n\n#include <boost/checked_delete.hpp>\n#include <boost/smart_ptr/detail/sp_counted_base.hpp>\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n#include <boost/smart_ptr/detail/quick_allocator.hpp>\n#endif\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n#include <memory>           // std::allocator\n#endif\n\n#include <cstddef>          // std::size_t\n\nnamespace boost\n{\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_scalar_constructor_hook( void * px, std::size_t size, void * pn );\nvoid sp_scalar_destructor_hook( void * px, std::size_t size, void * pn );\n\n#endif\n\nnamespace detail\n{\n\ntemplate<class X> class sp_counted_impl_p: public sp_counted_base\n{\nprivate:\n\n    X * px_;\n\n    sp_counted_impl_p( sp_counted_impl_p const & );\n    sp_counted_impl_p & operator= ( sp_counted_impl_p const & );\n\n    typedef sp_counted_impl_p<X> this_type;\n\npublic:\n\n    explicit sp_counted_impl_p( X * px ): px_( px )\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px, sizeof(X), this );\n#endif\n    }\n\n    virtual void dispose() // nothrow\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_destructor_hook( px_, sizeof(X), this );\n#endif\n        boost::checked_delete( px_ );\n    }\n\n    virtual void * get_deleter( detail::sp_typeinfo const & )\n    {\n        return 0;\n    }\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );\n    }\n\n    void operator delete( void * p )\n    {\n        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );\n    }\n\n#endif\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return quick_allocator<this_type>::alloc();\n    }\n\n    void operator delete( void * p )\n    {\n        quick_allocator<this_type>::dealloc( p );\n    }\n\n#endif\n};\n\n//\n// Borland's Codeguard trips up over the -Vx- option here:\n//\n#ifdef __CODEGUARD__\n# pragma option push -Vx-\n#endif\n\ntemplate<class P, class D> class sp_counted_impl_pd: public sp_counted_base\n{\nprivate:\n\n    P ptr; // copy constructor must not throw\n    D del; // copy constructor must not throw\n\n    sp_counted_impl_pd( sp_counted_impl_pd const & );\n    sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );\n\n    typedef sp_counted_impl_pd<P, D> this_type;\n\npublic:\n\n    // pre: d(p) must not throw\n\n    sp_counted_impl_pd( P p, D & d ): ptr( p ), del( d )\n    {\n    }\n\n    sp_counted_impl_pd( P p ): ptr( p ), del()\n    {\n    }\n\n    virtual void dispose() // nothrow\n    {\n        del( ptr );\n    }\n\n    virtual void * get_deleter( detail::sp_typeinfo const & ti )\n    {\n        return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast<char&>( del ): 0;\n    }\n\n#if defined(BOOST_SP_USE_STD_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );\n    }\n\n    void operator delete( void * p )\n    {\n        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );\n    }\n\n#endif\n\n#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)\n\n    void * operator new( std::size_t )\n    {\n        return quick_allocator<this_type>::alloc();\n    }\n\n    void operator delete( void * p )\n    {\n        quick_allocator<this_type>::dealloc( p );\n    }\n\n#endif\n};\n\ntemplate<class P, class D, class A> class sp_counted_impl_pda: public sp_counted_base\n{\nprivate:\n\n    P p_; // copy constructor must not throw\n    D d_; // copy constructor must not throw\n    A a_; // copy constructor must not throw\n\n    sp_counted_impl_pda( sp_counted_impl_pda const & );\n    sp_counted_impl_pda & operator= ( sp_counted_impl_pda const & );\n\n    typedef sp_counted_impl_pda<P, D, A> this_type;\n\npublic:\n\n    // pre: d( p ) must not throw\n\n    sp_counted_impl_pda( P p, D & d, A a ): p_( p ), d_( d ), a_( a )\n    {\n    }\n\n    sp_counted_impl_pda( P p, A a ): p_( p ), d_(), a_( a )\n    {\n    }\n\n    virtual void dispose() // nothrow\n    {\n        d_( p_ );\n    }\n\n    virtual void destroy() // nothrow\n    {\n        typedef typename A::template rebind< this_type >::other A2;\n\n        A2 a2( a_ );\n\n        this->~this_type();\n        a2.deallocate( this, 1 );\n    }\n\n    virtual void * get_deleter( detail::sp_typeinfo const & ti )\n    {\n        return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast<char&>( d_ ): 0;\n    }\n};\n\n#ifdef __CODEGUARD__\n# pragma option pop\n#endif\n\n} // namespace detail\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/sp_has_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/smart_ptr/detail/sp_has_sync.hpp\n//\n//  Copyright (c) 2008, 2009 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  Defines the BOOST_SP_HAS_SYNC macro if the __sync_* intrinsics\n//  are available.\n//\n\n#if defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) && !defined( BOOST_SP_NO_SYNC )\n\n#define BOOST_SP_HAS_SYNC\n\n#if defined( __arm__ )  || defined( __armel__ ) || defined( __aarch64__)\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __hppa ) || defined( __hppa__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __m68k__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __sh__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __sparc__ )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1100 )\n#undef BOOST_SP_HAS_SYNC\n#endif\n\n#endif // __GNUC__ * 100 + __GNUC_MINOR__ >= 401\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/spinlock.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/spinlock.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  struct spinlock\n//  {\n//      void lock();\n//      bool try_lock();\n//      void unlock();\n//\n//      class scoped_lock;\n//  };\n//\n//  #define BOOST_DETAIL_SPINLOCK_INIT <unspecified>\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/sp_has_sync.hpp>\n\n#if defined( BOOST_SP_USE_PTHREADS )\n#  include <boost/smart_ptr/detail/spinlock_pt.hpp>\n\n#elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )\n#  include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp>\n\n#elif defined( BOOST_SP_HAS_SYNC )\n#  include <boost/smart_ptr/detail/spinlock_sync.hpp>\n\n#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n#  include <boost/smart_ptr/detail/spinlock_w32.hpp>\n\n#elif defined(BOOST_HAS_PTHREADS)\n#  include <boost/smart_ptr/detail/spinlock_pt.hpp>\n\n#elif !defined(BOOST_HAS_THREADS)\n#  include <boost/smart_ptr/detail/spinlock_nt.hpp>\n\n#else\n#  error Unrecognized threading platform\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/spinlock_pool.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/detail/spinlock_pool.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  spinlock_pool<0> is reserved for atomic<>, when/if it arrives\n//  spinlock_pool<1> is reserved for shared_ptr reference counts\n//  spinlock_pool<2> is reserved for shared_ptr atomic access\n//\n\n#include <boost/config.hpp>\n#include <boost/smart_ptr/detail/spinlock.hpp>\n#include <cstddef>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate< int I > class spinlock_pool\n{\nprivate:\n\n    static spinlock pool_[ 41 ];\n\npublic:\n\n    static spinlock & spinlock_for( void const * pv )\n    {\n#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64  \n        std::size_t i = reinterpret_cast< unsigned long long >( pv ) % 41;\n#else  \n        std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41;\n#endif  \n        return pool_[ i ];\n    }\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) )\n        {\n            sp_.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\ntemplate< int I > spinlock spinlock_pool< I >::pool_[ 41 ] =\n{\n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, \n    BOOST_DETAIL_SPINLOCK_INIT\n};\n\n} // namespace detail\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/spinlock_pt.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <pthread.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    pthread_mutex_t v_;\n\npublic:\n\n    bool try_lock()\n    {\n        return pthread_mutex_trylock( &v_ ) == 0;\n    }\n\n    void lock()\n    {\n        pthread_mutex_lock( &v_ );\n    }\n\n    void unlock()\n    {\n        pthread_mutex_unlock( &v_ );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER }\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/spinlock_sync.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n\n#include <boost/smart_ptr/detail/yield_k.hpp>\n\n#if defined( __ia64__ ) && defined( __INTEL_COMPILER )\n# include <ia64intrin.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\nclass spinlock\n{\npublic:\n\n    int v_;\n\npublic:\n\n    bool try_lock()\n    {\n        int r = __sync_lock_test_and_set( &v_, 1 );\n        return r == 0;\n    }\n\n    void lock()\n    {\n        for( unsigned k = 0; !try_lock(); ++k )\n        {\n            boost::detail::yield( k );\n        }\n    }\n\n    void unlock()\n    {\n        __sync_lock_release( &v_ );\n    }\n\npublic:\n\n    class scoped_lock\n    {\n    private:\n\n        spinlock & sp_;\n\n        scoped_lock( scoped_lock const & );\n        scoped_lock & operator=( scoped_lock const & );\n\n    public:\n\n        explicit scoped_lock( spinlock & sp ): sp_( sp )\n        {\n            sp.lock();\n        }\n\n        ~scoped_lock()\n        {\n            sp_.unlock();\n        }\n    };\n};\n\n} // namespace detail\n} // namespace boost\n\n#define BOOST_DETAIL_SPINLOCK_INIT {0}\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/detail/yield_k.hpp",
    "content": "#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  yield_k.hpp\n//\n//  Copyright (c) 2008 Peter Dimov\n//\n//  void yield( unsigned k );\n//\n//  Typical use:\n//\n//  for( unsigned k = 0; !try_lock(); ++k ) yield( k );\n//\n//  Distributed under the Boost Software License, Version 1.0.\n//  See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt\n//\n\n#include <boost/config.hpp>\n\n// BOOST_SMT_PAUSE\n\n#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )\n\nextern \"C\" void _mm_pause();\n#pragma intrinsic( _mm_pause )\n\n#define BOOST_SMT_PAUSE _mm_pause();\n\n#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) )\n\n#define BOOST_SMT_PAUSE __asm__ __volatile__( \"rep; nop\" : : : \"memory\" );\n\n#endif\n\n//\n\n#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )\n\n#if defined( BOOST_USE_WINDOWS_H )\n# include <windows.h>\n#endif\n\nnamespace boost\n{\n\nnamespace detail\n{\n\n#if !defined( BOOST_USE_WINDOWS_H )\n  extern \"C\" void __stdcall Sleep( unsigned long ms );\n#endif\n\ninline void yield( unsigned k )\n{\n    if( k < 4 )\n    {\n    }\n#if defined( BOOST_SMT_PAUSE )\n    else if( k < 16 )\n    {\n        BOOST_SMT_PAUSE\n    }\n#endif\n    else if( k < 32 )\n    {\n        Sleep( 0 );\n    }\n    else\n    {\n        Sleep( 1 );\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#elif defined( BOOST_HAS_PTHREADS )\n\n#include <sched.h>\n#include <time.h>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void yield( unsigned k )\n{\n    if( k < 4 )\n    {\n    }\n#if defined( BOOST_SMT_PAUSE )\n    else if( k < 16 )\n    {\n        BOOST_SMT_PAUSE\n    }\n#endif\n    else if( k < 32 || k & 1 )\n    {\n        sched_yield();\n    }\n    else\n    {\n        // g++ -Wextra warns on {} or {0}\n        struct timespec rqtp = { 0, 0 };\n\n        // POSIX says that timespec has tv_sec and tv_nsec\n        // But it doesn't guarantee order or placement\n\n        rqtp.tv_sec = 0;\n        rqtp.tv_nsec = 1000;\n\n        nanosleep( &rqtp, 0 );\n    }\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#else\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ninline void yield( unsigned )\n{\n}\n\n} // namespace detail\n\n} // namespace boost\n\n#endif\n\n#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/scoped_array.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n#define BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_array.htm\n//\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/config.hpp>   // in case ptrdiff_t not in std\n\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>            // for std::ptrdiff_t\n\nnamespace boost\n{\n\n// Debug hooks\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_array_constructor_hook(void * p);\nvoid sp_array_destructor_hook(void * p);\n\n#endif\n\n//  scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to\n//  is guaranteed, either on destruction of the scoped_array or via an explicit\n//  reset(). Use shared_array or std::vector if your needs are more complex.\n\ntemplate<class T> class scoped_array // noncopyable\n{\nprivate:\n\n    T * px;\n\n    scoped_array(scoped_array const &);\n    scoped_array & operator=(scoped_array const &);\n\n    typedef scoped_array<T> this_type;\n\n    void operator==( scoped_array const& ) const;\n    void operator!=( scoped_array const& ) const;\n\npublic:\n\n    typedef T element_type;\n\n    explicit scoped_array( T * p = 0 ) : px( p ) // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_array_constructor_hook( px );\n#endif\n    }\n\n    ~scoped_array() // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_array_destructor_hook( px );\n#endif\n        boost::checked_array_delete( px );\n    }\n\n    void reset(T * p = 0) // never throws\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type(p).swap(*this);\n    }\n\n    T & operator[](std::ptrdiff_t i) const // never throws\n    {\n        BOOST_ASSERT( px != 0 );\n        BOOST_ASSERT( i >= 0 );\n        return px[i];\n    }\n\n    T * get() const // never throws\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    void swap(scoped_array & b) // never throws\n    {\n        T * tmp = b.px;\n        b.px = px;\n        px = tmp;\n    }\n};\n\ntemplate<class T> inline void swap(scoped_array<T> & a, scoped_array<T> & b) // never throws\n{\n    a.swap(b);\n}\n\n} // namespace boost\n\n#endif  // #ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/scoped_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm\n//\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_AUTO_PTR\n# include <memory>          // for std::auto_ptr\n#endif\n\nnamespace boost\n{\n\n// Debug hooks\n\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n\nvoid sp_scalar_constructor_hook(void * p);\nvoid sp_scalar_destructor_hook(void * p);\n\n#endif\n\n//  scoped_ptr mimics a built-in pointer except that it guarantees deletion\n//  of the object pointed to, either on destruction of the scoped_ptr or via\n//  an explicit reset(). scoped_ptr is a simple solution for simple needs;\n//  use shared_ptr or std::auto_ptr if your needs are more complex.\n\ntemplate<class T> class scoped_ptr // noncopyable\n{\nprivate:\n\n    T * px;\n\n    scoped_ptr(scoped_ptr const &);\n    scoped_ptr & operator=(scoped_ptr const &);\n\n    typedef scoped_ptr<T> this_type;\n\n    void operator==( scoped_ptr const& ) const;\n    void operator!=( scoped_ptr const& ) const;\n\npublic:\n\n    typedef T element_type;\n\n    explicit scoped_ptr( T * p = 0 ): px( p ) // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px );\n#endif\n    }\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    explicit scoped_ptr( std::auto_ptr<T> p ): px( p.release() ) // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_constructor_hook( px );\n#endif\n    }\n\n#endif\n\n    ~scoped_ptr() // never throws\n    {\n#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)\n        boost::sp_scalar_destructor_hook( px );\n#endif\n        boost::checked_delete( px );\n    }\n\n    void reset(T * p = 0) // never throws\n    {\n        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors\n        this_type(p).swap(*this);\n    }\n\n    T & operator*() const // never throws\n    {\n        BOOST_ASSERT( px != 0 );\n        return *px;\n    }\n\n    T * operator->() const // never throws\n    {\n        BOOST_ASSERT( px != 0 );\n        return px;\n    }\n\n    T * get() const // never throws\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    void swap(scoped_ptr & b) // never throws\n    {\n        T * tmp = b.px;\n        b.px = px;\n        px = tmp;\n    }\n};\n\ntemplate<class T> inline void swap(scoped_ptr<T> & a, scoped_ptr<T> & b) // never throws\n{\n    a.swap(b);\n}\n\n// get_pointer(p) is a generic way to say p.get()\n\ntemplate<class T> inline T * get_pointer(scoped_ptr<T> const & p)\n{\n    return p.get();\n}\n\n} // namespace boost\n\n#endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/shared_array.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n\n//\n//  shared_array.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001, 2002 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.\n//\n\n#include <boost/config.hpp>   // for broken compiler workarounds\n\n#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n#include <boost/smart_ptr/detail/shared_array_nmt.hpp>\n#else\n\n#include <memory>             // TR1 cyclic inclusion fix\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n\n#include <boost/smart_ptr/detail/shared_count.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>            // for std::ptrdiff_t\n#include <algorithm>          // for std::swap\n#include <functional>         // for std::less\n\nnamespace boost\n{\n\n//\n//  shared_array\n//\n//  shared_array extends shared_ptr to arrays.\n//  The array pointed to is deleted when the last shared_array pointing to it\n//  is destroyed or reset.\n//\n\ntemplate<class T> class shared_array\n{\nprivate:\n\n    // Borland 5.5.1 specific workarounds\n    typedef checked_array_deleter<T> deleter;\n    typedef shared_array<T> this_type;\n\npublic:\n\n    typedef T element_type;\n\n    explicit shared_array(T * p = 0): px(p), pn(p, deleter())\n    {\n    }\n\n    //\n    // Requirements: D's copy constructor must not throw\n    //\n    // shared_array will release p by calling d(p)\n    //\n\n    template<class D> shared_array(T * p, D d): px(p), pn(p, d)\n    {\n    }\n\n//  generated copy constructor, destructor are fine...\n\n#if defined( BOOST_HAS_RVALUE_REFS )\n\n// ... except in C++0x, move disables the implicit copy\n\n    shared_array( shared_array const & r ): px( r.px ), pn( r.pn ) // never throws\n    {\n    }\n\n#endif\n\n    // assignment\n\n    shared_array & operator=( shared_array const & r ) // never throws\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n    void reset(T * p = 0)\n    {\n        BOOST_ASSERT(p == 0 || p != px);\n        this_type(p).swap(*this);\n    }\n\n    template <class D> void reset(T * p, D d)\n    {\n        this_type(p, d).swap(*this);\n    }\n\n    T & operator[] (std::ptrdiff_t i) const // never throws\n    {\n        BOOST_ASSERT(px != 0);\n        BOOST_ASSERT(i >= 0);\n        return px[i];\n    }\n    \n    T * get() const // never throws\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    bool unique() const // never throws\n    {\n        return pn.unique();\n    }\n\n    long use_count() const // never throws\n    {\n        return pn.use_count();\n    }\n\n    void swap(shared_array<T> & other) // never throws\n    {\n        std::swap(px, other.px);\n        pn.swap(other.pn);\n    }\n\n    void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const\n    {\n        return pn.get_deleter( ti );\n    }\n\nprivate:\n\n    T * px;                     // contained pointer\n    detail::shared_count pn;    // reference counter\n\n};  // shared_array\n\ntemplate<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) // never throws\n{\n    return a.get() == b.get();\n}\n\ntemplate<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) // never throws\n{\n    return a.get() != b.get();\n}\n\ntemplate<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) // never throws\n{\n    return std::less<T*>()(a.get(), b.get());\n}\n\ntemplate<class T> void swap(shared_array<T> & a, shared_array<T> & b) // never throws\n{\n    a.swap(b);\n}\n\ntemplate< class D, class T > D * get_deleter( shared_array<T> const & p )\n{\n    return static_cast< D * >( p._internal_get_deleter( BOOST_SP_TYPEID(D) ) );\n}\n\n} // namespace boost\n\n#endif  // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n\n#endif  // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/smart_ptr/shared_ptr.hpp",
    "content": "#ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n#define BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n\n//\n//  shared_ptr.hpp\n//\n//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\n//  Copyright (c) 2001-2008 Peter Dimov\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.\n//\n\n#include <boost/config.hpp>   // for broken compiler workarounds\n\n#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n#include <boost/smart_ptr/detail/shared_ptr_nmt.hpp>\n#else\n\n// In order to avoid circular dependencies with Boost.TR1\n// we make sure that our include of <memory> doesn't try to\n// pull in the TR1 headers: that's why we use this header \n// rather than including <memory> directly:\n#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr\n\n#include <boost/assert.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/throw_exception.hpp>\n#include <boost/smart_ptr/detail/shared_count.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/smart_ptr/detail/sp_convertible.hpp>\n\n#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n#include <boost/smart_ptr/detail/spinlock_pool.hpp>\n#include <boost/memory_order.hpp>\n#endif\n\n#include <algorithm>            // for std::swap\n#include <functional>           // for std::less\n#include <typeinfo>             // for std::bad_cast\n#include <cstddef>              // for std::size_t\n\n#if !defined(BOOST_NO_IOSTREAM)\n#if !defined(BOOST_NO_IOSFWD)\n#include <iosfwd>               // for std::basic_ostream\n#else\n#include <ostream>\n#endif\n#endif\n\nnamespace boost\n{\n\ntemplate<class T> class shared_ptr;\ntemplate<class T> class weak_ptr;\ntemplate<class T> class enable_shared_from_this;\ntemplate<class T> class enable_shared_from_this2;\n\nnamespace detail\n{\n\nstruct static_cast_tag {};\nstruct const_cast_tag {};\nstruct dynamic_cast_tag {};\nstruct polymorphic_cast_tag {};\n\ntemplate<class T> struct shared_ptr_traits\n{\n    typedef T & reference;\n};\n\ntemplate<> struct shared_ptr_traits<void>\n{\n    typedef void reference;\n};\n\n#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)\n\ntemplate<> struct shared_ptr_traits<void const>\n{\n    typedef void reference;\n};\n\ntemplate<> struct shared_ptr_traits<void volatile>\n{\n    typedef void reference;\n};\n\ntemplate<> struct shared_ptr_traits<void const volatile>\n{\n    typedef void reference;\n};\n\n#endif\n\n// enable_shared_from_this support\n\ntemplate< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr<X> const * ppx, Y const * py, boost::enable_shared_from_this< T > const * pe )\n{\n    if( pe != 0 )\n    {\n        pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );\n    }\n}\n\ntemplate< class X, class Y, class T > inline void sp_enable_shared_from_this( boost::shared_ptr<X> * ppx, Y const * py, boost::enable_shared_from_this2< T > const * pe )\n{\n    if( pe != 0 )\n    {\n        pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );\n    }\n}\n\n#ifdef _MANAGED\n\n// Avoid C4793, ... causes native code generation\n\nstruct sp_any_pointer\n{\n    template<class T> sp_any_pointer( T* ) {}\n};\n\ninline void sp_enable_shared_from_this( sp_any_pointer, sp_any_pointer, sp_any_pointer )\n{\n}\n\n#else // _MANAGED\n\ninline void sp_enable_shared_from_this( ... )\n{\n}\n\n#endif // _MANAGED\n\n#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_AUTO_PTR )\n\n// rvalue auto_ptr support based on a technique by Dave Abrahams\n\ntemplate< class T, class R > struct sp_enable_if_auto_ptr\n{\n};\n\ntemplate< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R >\n{\n    typedef R type;\n}; \n\n#endif\n\n} // namespace detail\n\n\n//\n//  shared_ptr\n//\n//  An enhanced relative of scoped_ptr with reference counted copy semantics.\n//  The object pointed to is deleted when the last shared_ptr pointing to it\n//  is destroyed or reset.\n//\n\ntemplate<class T> class shared_ptr\n{\nprivate:\n\n    // Borland 5.5.1 specific workaround\n    typedef shared_ptr<T> this_type;\n\npublic:\n\n    typedef T element_type;\n    typedef T value_type;\n    typedef T * pointer;\n    typedef typename boost::detail::shared_ptr_traits<T>::reference reference;\n\n    shared_ptr(): px(0), pn() // never throws in 1.30+\n    {\n    }\n\n    template<class Y>\n    explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete\n    {\n        boost::detail::sp_enable_shared_from_this( this, p, p );\n    }\n\n    //\n    // Requirements: D's copy constructor must not throw\n    //\n    // shared_ptr will release p by calling d(p)\n    //\n\n    template<class Y, class D> shared_ptr(Y * p, D d): px(p), pn(p, d)\n    {\n        boost::detail::sp_enable_shared_from_this( this, p, p );\n    }\n\n    // As above, but with allocator. A's copy constructor shall not throw.\n\n    template<class Y, class D, class A> shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a )\n    {\n        boost::detail::sp_enable_shared_from_this( this, p, p );\n    }\n\n//  generated copy constructor, destructor are fine...\n\n#if defined( BOOST_HAS_RVALUE_REFS )\n\n// ... except in C++0x, move disables the implicit copy\n\n    shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws\n    {\n    }\n\n#endif\n\n    template<class Y>\n    explicit shared_ptr(weak_ptr<Y> const & r): pn(r.pn) // may throw\n    {\n        // it is now safe to copy r.px, as pn(r.pn) did not throw\n        px = r.px;\n    }\n\n    template<class Y>\n    shared_ptr( weak_ptr<Y> const & r, boost::detail::sp_nothrow_tag ): px( 0 ), pn( r.pn, boost::detail::sp_nothrow_tag() ) // never throws\n    {\n        if( !pn.empty() )\n        {\n            px = r.px;\n        }\n    }\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    shared_ptr( shared_ptr<Y> const & r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    shared_ptr( shared_ptr<Y> const & r )\n\n#endif\n    : px( r.px ), pn( r.pn ) // never throws\n    {\n    }\n\n    // aliasing\n    template< class Y >\n    shared_ptr( shared_ptr<Y> const & r, T * p ): px( p ), pn( r.pn ) // never throws\n    {\n    }\n\n    template<class Y>\n    shared_ptr(shared_ptr<Y> const & r, boost::detail::static_cast_tag): px(static_cast<element_type *>(r.px)), pn(r.pn)\n    {\n    }\n\n    template<class Y>\n    shared_ptr(shared_ptr<Y> const & r, boost::detail::const_cast_tag): px(const_cast<element_type *>(r.px)), pn(r.pn)\n    {\n    }\n\n    template<class Y>\n    shared_ptr(shared_ptr<Y> const & r, boost::detail::dynamic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)\n    {\n        if(px == 0) // need to allocate new counter -- the cast failed\n        {\n            pn = boost::detail::shared_count();\n        }\n    }\n\n    template<class Y>\n    shared_ptr(shared_ptr<Y> const & r, boost::detail::polymorphic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)\n    {\n        if(px == 0)\n        {\n            boost::throw_exception(std::bad_cast());\n        }\n    }\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    template<class Y>\n    explicit shared_ptr(std::auto_ptr<Y> & r): px(r.get()), pn()\n    {\n        Y * tmp = r.get();\n        pn = boost::detail::shared_count(r);\n        boost::detail::sp_enable_shared_from_this( this, tmp, tmp );\n    }\n\n#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n    template<class Ap>\n    explicit shared_ptr( Ap r, typename boost::detail::sp_enable_if_auto_ptr<Ap, int>::type = 0 ): px( r.get() ), pn()\n    {\n        typename Ap::element_type * tmp = r.get();\n        pn = boost::detail::shared_count( r );\n        boost::detail::sp_enable_shared_from_this( this, tmp, tmp );\n    }\n\n\n#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_NO_AUTO_PTR\n\n    // assignment\n\n    shared_ptr & operator=( shared_ptr const & r ) // never throws\n    {\n        this_type(r).swap(*this);\n        return *this;\n    }\n\n#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400)\n\n    template<class Y>\n    shared_ptr & operator=(shared_ptr<Y> const & r) // never throws\n    {\n        this_type(r).swap(*this);\n        return *this;\n    }\n\n#endif\n\n#ifndef BOOST_NO_AUTO_PTR\n\n    template<class Y>\n    shared_ptr & operator=( std::auto_ptr<Y> & r )\n    {\n        this_type(r).swap(*this);\n        return *this;\n    }\n\n#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )\n\n    template<class Ap>\n    typename boost::detail::sp_enable_if_auto_ptr< Ap, shared_ptr & >::type operator=( Ap r )\n    {\n        this_type( r ).swap( *this );\n        return *this;\n    }\n\n\n#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_NO_AUTO_PTR\n\n// Move support\n\n#if defined( BOOST_HAS_RVALUE_REFS )\n\n    shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws\n    {\n        pn.swap( r.pn );\n        r.px = 0;\n    }\n\n    template<class Y>\n#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )\n\n    shared_ptr( shared_ptr<Y> && r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )\n\n#else\n\n    shared_ptr( shared_ptr<Y> && r )\n\n#endif\n    : px( r.px ), pn() // never throws\n    {\n        pn.swap( r.pn );\n        r.px = 0;\n    }\n\n    shared_ptr & operator=( shared_ptr && r ) // never throws\n    {\n        this_type( static_cast< shared_ptr && >( r ) ).swap( *this );\n        return *this;\n    }\n\n    template<class Y>\n    shared_ptr & operator=( shared_ptr<Y> && r ) // never throws\n    {\n        this_type( static_cast< shared_ptr<Y> && >( r ) ).swap( *this );\n        return *this;\n    }\n\n#endif\n\n    void reset() // never throws in 1.30+\n    {\n        this_type().swap(*this);\n    }\n\n    template<class Y> void reset(Y * p) // Y must be complete\n    {\n        BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors\n        this_type(p).swap(*this);\n    }\n\n    template<class Y, class D> void reset( Y * p, D d )\n    {\n        this_type( p, d ).swap( *this );\n    }\n\n    template<class Y, class D, class A> void reset( Y * p, D d, A a )\n    {\n        this_type( p, d, a ).swap( *this );\n    }\n\n    template<class Y> void reset( shared_ptr<Y> const & r, T * p )\n    {\n        this_type( r, p ).swap( *this );\n    }\n\n    reference operator* () const // never throws\n    {\n        BOOST_ASSERT(px != 0);\n        return *px;\n    }\n\n    T * operator-> () const // never throws\n    {\n        BOOST_ASSERT(px != 0);\n        return px;\n    }\n\n    T * get() const // never throws\n    {\n        return px;\n    }\n\n// implicit conversion to \"bool\"\n#include <boost/smart_ptr/detail/operator_bool.hpp>\n\n    bool unique() const // never throws\n    {\n        return pn.unique();\n    }\n\n    long use_count() const // never throws\n    {\n        return pn.use_count();\n    }\n\n    void swap(shared_ptr<T> & other) // never throws\n    {\n        std::swap(px, other.px);\n        pn.swap(other.pn);\n    }\n\n    template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const\n    {\n        return pn < rhs.pn;\n    }\n\n    template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const\n    {\n        return pn < rhs.pn;\n    }\n\n    void * _internal_get_deleter( boost::detail::sp_typeinfo const & ti ) const\n    {\n        return pn.get_deleter( ti );\n    }\n\n    bool _internal_equiv( shared_ptr const & r ) const\n    {\n        return px == r.px && pn == r.pn;\n    }\n\n// Tasteless as this may seem, making all members public allows member templates\n// to work in the absence of member template friends. (Matthew Langston)\n\n#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\n\nprivate:\n\n    template<class Y> friend class shared_ptr;\n    template<class Y> friend class weak_ptr;\n\n\n#endif\n\n    T * px;                     // contained pointer\n    boost::detail::shared_count pn;    // reference counter\n\n};  // shared_ptr\n\ntemplate<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)\n{\n    return a.get() == b.get();\n}\n\ntemplate<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)\n{\n    return a.get() != b.get();\n}\n\n#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96\n\n// Resolve the ambiguity between our op!= and the one in rel_ops\n\ntemplate<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b)\n{\n    return a.get() != b.get();\n}\n\n#endif\n\ntemplate<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b)\n{\n    return a.owner_before( b );\n}\n\ntemplate<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b)\n{\n    a.swap(b);\n}\n\ntemplate<class T, class U> shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::static_cast_tag());\n}\n\ntemplate<class T, class U> shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::const_cast_tag());\n}\n\ntemplate<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::dynamic_cast_tag());\n}\n\n// shared_*_cast names are deprecated. Use *_pointer_cast instead.\n\ntemplate<class T, class U> shared_ptr<T> shared_static_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::static_cast_tag());\n}\n\ntemplate<class T, class U> shared_ptr<T> shared_dynamic_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::dynamic_cast_tag());\n}\n\ntemplate<class T, class U> shared_ptr<T> shared_polymorphic_cast(shared_ptr<U> const & r)\n{\n    return shared_ptr<T>(r, boost::detail::polymorphic_cast_tag());\n}\n\ntemplate<class T, class U> shared_ptr<T> shared_polymorphic_downcast(shared_ptr<U> const & r)\n{\n    BOOST_ASSERT(dynamic_cast<T *>(r.get()) == r.get());\n    return shared_static_cast<T>(r);\n}\n\n// get_pointer() enables boost::mem_fn to recognize shared_ptr\n\ntemplate<class T> inline T * get_pointer(shared_ptr<T> const & p)\n{\n    return p.get();\n}\n\n// operator<<\n\n#if !defined(BOOST_NO_IOSTREAM)\n\n#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&  (__GNUC__ < 3) )\n\ntemplate<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)\n{\n    os << p.get();\n    return os;\n}\n\n#else\n\n// in STLport's no-iostreams mode no iostream symbols can be used\n#ifndef _STLP_NO_IOSTREAMS\n\n# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)\n// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL\nusing std::basic_ostream;\ntemplate<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n# else\ntemplate<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n# endif\n{\n    os << p.get();\n    return os;\n}\n\n#endif // _STLP_NO_IOSTREAMS\n\n#endif // __GNUC__ < 3\n\n#endif // !defined(BOOST_NO_IOSTREAM)\n\n// get_deleter\n\n#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \\\n    ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \\\n    ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) )\n\n// g++ 2.9x doesn't allow static_cast<X const *>(void *)\n// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it\n\ntemplate<class D, class T> D * get_deleter(shared_ptr<T> const & p)\n{\n    void const * q = p._internal_get_deleter(BOOST_SP_TYPEID(D));\n    return const_cast<D *>(static_cast<D const *>(q));\n}\n\n#else\n\ntemplate<class D, class T> D * get_deleter(shared_ptr<T> const & p)\n{\n    return static_cast<D *>(p._internal_get_deleter(BOOST_SP_TYPEID(D)));\n}\n\n#endif\n\n// atomic access\n\n#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n\ntemplate<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ )\n{\n    return false;\n}\n\ntemplate<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p )\n{\n    boost::detail::spinlock_pool<2>::scoped_lock lock( p );\n    return *p;\n}\n\ntemplate<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, memory_order /*mo*/ )\n{\n    return atomic_load( p );\n}\n\ntemplate<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )\n{\n    boost::detail::spinlock_pool<2>::scoped_lock lock( p );\n    p->swap( r );\n}\n\ntemplate<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )\n{\n    atomic_store( p, r ); // std::move( r )\n}\n\ntemplate<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T> r )\n{\n    boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p );\n\n    sp.lock();\n    p->swap( r );\n    sp.unlock();\n\n    return r; // return std::move( r )\n}\n\ntemplate<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, memory_order /*mo*/ )\n{\n    return atomic_exchange( p, r ); // std::move( r )\n}\n\ntemplate<class T> bool atomic_compare_exchange( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w )\n{\n    boost::detail::spinlock & sp = boost::detail::spinlock_pool<2>::spinlock_for( p );\n\n    sp.lock();\n\n    if( p->_internal_equiv( *v ) )\n    {\n        p->swap( w );\n\n        sp.unlock();\n\n        return true;\n    }\n    else\n    {\n        shared_ptr<T> tmp( *p );\n\n        sp.unlock();\n\n        tmp.swap( *v );\n        return false;\n    }\n}\n\ntemplate<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, memory_order /*success*/, memory_order /*failure*/ )\n{\n    return atomic_compare_exchange( p, v, w ); // std::move( w )\n}\n\n#endif // !defined(BOOST_SP_NO_ATOMIC_ACCESS)\n\n// hash_value\n\ntemplate< class T > struct hash;\n\ntemplate< class T > std::size_t hash_value( boost::shared_ptr<T> const & p )\n{\n    return boost::hash< T* >()( p.get() );\n}\n\n} // namespace boost\n\n#endif  // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n\n#endif  // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/static_assert.hpp",
    "content": "//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/static_assert for documentation.\n\n/*\n Revision history:\n   02 August 2000\n      Initial version.\n*/\n\n#ifndef BOOST_STATIC_ASSERT_HPP\n#define BOOST_STATIC_ASSERT_HPP\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_STATIC_ASSERT\n#  define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert(B, Msg)\n#else\n#  define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )\n#endif\n\n#ifdef __BORLANDC__\n//\n// workaround for buggy integral-constant expression support:\n#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS\n#endif\n\n#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4))\n// gcc 3.3 and 3.4 don't produce good error messages with the default version:\n#  define BOOST_SA_GCC_WORKAROUND\n#endif\n\n//\n// If the compiler issues warnings about old C style casts,\n// then enable this:\n//\n#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))\n#  define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)\n#else\n#  define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)\n#endif\n\n#ifndef BOOST_NO_STATIC_ASSERT\n#  define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)\n#else\n\nnamespace boost{\n\n// HP aCC cannot deal with missing names for template value parameters\ntemplate <bool x> struct STATIC_ASSERTION_FAILURE;\n\ntemplate <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };\n\n// HP aCC cannot deal with missing names for template value parameters\ntemplate<int x> struct static_assert_test{};\n\n}\n\n//\n// Implicit instantiation requires that all member declarations be\n// instantiated, but that the definitions are *not* instantiated.\n//\n// It's not particularly clear how this applies to enum's or typedefs;\n// both are described as declarations [7.1.3] and [7.2] in the standard,\n// however some compilers use \"delayed evaluation\" of one or more of\n// these when implicitly instantiating templates.  We use typedef declarations\n// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum\n// version gets better results from your compiler...\n//\n// Implementation:\n// Both of these versions rely on sizeof(incomplete_type) generating an error\n// message containing the name of the incomplete type.  We use\n// \"STATIC_ASSERTION_FAILURE\" as the type name here to generate\n// an eye catching error message.  The result of the sizeof expression is either\n// used as an enum initialiser, or as a template argument depending which version\n// is in use...\n// Note that the argument to the assert is explicitly cast to bool using old-\n// style casts: too many compilers currently have problems with static_cast\n// when used inside integral constant expressions.\n//\n#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)\n\n#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)\n// __LINE__ macro broken when -ZI is used see Q199057\n// fortunately MSVC ignores duplicate typedef's.\n#define BOOST_STATIC_ASSERT( B ) \\\n   typedef ::boost::static_assert_test<\\\n      sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\\\n      > boost_static_assert_typedef_\n#elif defined(BOOST_MSVC)\n#define BOOST_STATIC_ASSERT( B ) \\\n   typedef ::boost::static_assert_test<\\\n      sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)\n#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)\n// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error \n// instead of warning in case of failure\n# define BOOST_STATIC_ASSERT( B ) \\\n    typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \\\n        [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]\n#elif defined(__sgi)\n// special version for SGI MIPSpro compiler\n#define BOOST_STATIC_ASSERT( B ) \\\n   BOOST_STATIC_CONSTANT(bool, \\\n     BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \\\n   typedef ::boost::static_assert_test<\\\n     sizeof(::boost::STATIC_ASSERTION_FAILURE< \\\n       BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __LINE__)\n#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003)\n// special version for CodeWarrior <= 8.x\n#define BOOST_STATIC_ASSERT( B ) \\\n   BOOST_STATIC_CONSTANT(int, \\\n     BOOST_JOIN(boost_static_assert_test_, __LINE__) = \\\n       sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )\n#else\n// generic version\n#define BOOST_STATIC_ASSERT( B ) \\\n   typedef ::boost::static_assert_test<\\\n      sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\\\n         BOOST_JOIN(boost_static_assert_typedef_, __LINE__)\n#endif\n\n#else\n// alternative enum based implementation:\n#define BOOST_STATIC_ASSERT( B ) \\\n   enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \\\n      = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }\n#endif\n#endif // defined(BOOST_NO_STATIC_ASSERT)\n\n#endif // BOOST_STATIC_ASSERT_HPP\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/swap.hpp",
    "content": "// Copyright (C) 2007 Joseph Gauterin\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_SWAP_HPP\n#define BOOST_SWAP_HPP\n\n#include \"boost/utility/swap.hpp\"\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/debug.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2006-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines portable debug interfaces\n// ***************************************************************************\n\n#ifndef BOOST_TEST_DEBUG_API_HPP_112006GER\n#define BOOST_TEST_DEBUG_API_HPP_112006GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n\n// STL\n#include <string>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace debug {\n\n// ************************************************************************** //\n// **************  check if program is running under debugger  ************** //\n// ************************************************************************** //\n\nbool BOOST_TEST_DECL under_debugger();\n\n// ************************************************************************** //\n// **************       cause program to break execution       ************** //\n// **************           in debugger at call point          ************** //\n// ************************************************************************** //\n\nvoid BOOST_TEST_DECL debugger_break();\n\n// ************************************************************************** //\n// **************              gui debugger setup              ************** //\n// ************************************************************************** //\n\nstruct dbg_startup_info {\n    long                    pid;\n    bool                    break_or_continue;\n    unit_test::const_string binary_path;\n    unit_test::const_string display;\n    unit_test::const_string init_done_lock;\n};\n\ntypedef unit_test::callback1<dbg_startup_info const&> dbg_starter;\n\n// ************************************************************************** //\n// **************                debugger setup                ************** //\n// ************************************************************************** //\n\n#if BOOST_WORKAROUND( BOOST_MSVC, <1300)\n\nstd::string BOOST_TEST_DECL set_debugger( unit_test::const_string dbg_id );\n\n#else \n\nstd::string BOOST_TEST_DECL set_debugger( unit_test::const_string dbg_id, dbg_starter s = dbg_starter() );\n\n#endif\n\n\n// ************************************************************************** //\n// **************    attach debugger to the current process    ************** //\n// ************************************************************************** //\n\nbool BOOST_TEST_DECL attach_debugger( bool break_or_continue = true );\n\n// ************************************************************************** //\n// **************   switch on/off detect memory leaks feature  ************** //\n// ************************************************************************** //\n\nvoid BOOST_TEST_DECL detect_memory_leaks( bool on_off );\n\n// ************************************************************************** //\n// **************      cause program to break execution in     ************** //\n// **************     debugger at specific allocation point    ************** //\n// ************************************************************************** //\n\nvoid BOOST_TEST_DECL break_memory_alloc( long mem_alloc_order_num );\n\n} // namespace debug\n\n} // namespace boost\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/debug_config.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2006-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : user's config for Boost.Test debugging support\n// ***************************************************************************\n\n#ifndef BOOST_TEST_DEBUG_CONFIG_HPP_112006GER\n#define BOOST_TEST_DEBUG_CONFIG_HPP_112006GER\n\n// ';' separated list of supported debuggers\n// #define BOOST_TEST_DBG_LIST gdb;dbx\n\n// maximum size of /proc/pid/stat file\n// #define BOOST_TEST_STAT_LINE_MAX\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/config.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 63441 $\n//\n//  Description : as a central place for global configuration switches\n// ***************************************************************************\n\n#ifndef BOOST_TEST_CONFIG_HPP_071894GER\n#define BOOST_TEST_CONFIG_HPP_071894GER\n\n// Boost\n#include <boost/config.hpp> // compilers workarounds\n#include <boost/detail/workaround.hpp>\n\n//____________________________________________________________________________//\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)) || \\\n    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))     || \\\n    (defined __sgi && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(730)))\n#  define BOOST_TEST_SHIFTED_LINE\n#endif\n\n//____________________________________________________________________________//\n\n#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))\n#  define BOOST_TEST_CALL_DECL __cdecl\n#else\n#  define BOOST_TEST_CALL_DECL /**/\n#endif\n\n//____________________________________________________________________________//\n\n#if !defined(BOOST_NO_STD_LOCALE) &&            \\\n    !BOOST_WORKAROUND(BOOST_MSVC, < 1310)  &&   \\\n    !defined(__MWERKS__) \n#  define BOOST_TEST_USE_STD_LOCALE 1\n#endif\n\n//____________________________________________________________________________//\n\n#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570)            || \\\n    BOOST_WORKAROUND( __COMO__, <= 0x433 )              || \\\n    BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 )        || \\\n    defined(__sgi) && _COMPILER_VERSION <= 730          || \\\n    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))  || \\\n    defined(__DECCXX)                                   || \\\n    defined(__DMC__)\n#  define BOOST_TEST_NO_PROTECTED_USING\n#endif\n\n//____________________________________________________________________________//\n\n#if defined(__GNUC__) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)\n#define BOOST_TEST_PROTECTED_VIRTUAL virtual\n#else\n#define BOOST_TEST_PROTECTED_VIRTUAL\n#endif\n\n//____________________________________________________________________________//\n\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \\\n    !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \\\n    !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))\n#  define BOOST_TEST_SUPPORT_INTERACTION_TESTING 1\n#endif\n\n//____________________________________________________________________________//\n\n#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_TEST_DYN_LINK)\n#  define BOOST_TEST_DYN_LINK\n#endif\n\n#if defined(BOOST_TEST_INCLUDED)\n#  undef BOOST_TEST_DYN_LINK\n#endif\n\n#if defined(BOOST_TEST_DYN_LINK)\n#  define BOOST_TEST_ALTERNATIVE_INIT_API\n\n#  ifdef BOOST_TEST_SOURCE\n#    define BOOST_TEST_DECL BOOST_SYMBOL_EXPORT\n#  else\n#    define BOOST_TEST_DECL BOOST_SYMBOL_IMPORT\n#  endif  // BOOST_TEST_SOURCE\n#else\n#  define BOOST_TEST_DECL\n#endif\n\n#if !defined(BOOST_TEST_MAIN) && defined(BOOST_AUTO_TEST_MAIN)\n#define BOOST_TEST_MAIN BOOST_AUTO_TEST_MAIN\n#endif\n\n#if !defined(BOOST_TEST_MAIN) && defined(BOOST_TEST_MODULE)\n#define BOOST_TEST_MAIN BOOST_TEST_MODULE\n#endif\n\n#endif // BOOST_TEST_CONFIG_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/enable_warnings.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : enable previosly suppressed warnings\n// ***************************************************************************\n\n#ifdef BOOST_MSVC\n# pragma warning(default: 4511) // copy constructor can't not be generated\n# pragma warning(default: 4512) // assignment operator can't not be generated\n# pragma warning(default: 4100) // unreferenced formal parameter \n# pragma warning(default: 4996) // <symbol> was declared deprecated \n# pragma warning(default: 4355) // 'this' : used in base member initializer list\n# pragma warning(default: 4706) // assignment within conditional expression\n# pragma warning(default: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'\n# pragma warning(default: 4127) // conditional expression is constant\n# pragma warning(default: 4290) // C++ exception specification ignored except to ...\n# pragma warning(default: 4180) // qualifier applied to function type has no meaning; ignored\n# pragma warning(default: 4275) // non dll-interface class ... used as base for dll-interface class ...\n# pragma warning(default: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data\n# pragma warning(default: 4511) // 'class' : copy constructor could not be generated\n# pragma warning(pop)\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/fwd_decl.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : contains forward eclarations for Boost.Test data types\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FWD_DECL_HPP_011605GER\n#define BOOST_TEST_FWD_DECL_HPP_011605GER\n\nnamespace boost {\n\nclass  execution_monitor;\nclass  execution_exception;\n\nnamespace unit_test {\n\nclass  test_unit;\nclass  test_case;\nclass  test_suite;\nclass  master_test_suite_t;\n\nclass  test_tree_visitor;\nclass  test_observer;\n\n// singletons\nclass  unit_test_monitor_t;\nclass  unit_test_log_t;\n\nclass  unit_test_log_formatter;\nstruct log_entry_data;\nstruct log_checkpoint_data;\n\nclass lazy_ostream;\n\n} // namespace unit_test\n\n} // namespace boost\n\n#endif // BOOST_TEST_FWD_DECL_HPP_011605GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/global_typedef.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : some trivial global typedefs\n// ***************************************************************************\n\n#ifndef BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER\n#define BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER\n\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n#define BOOST_TEST_L( s )         boost::unit_test::const_string( s, sizeof( s ) - 1 )\n#define BOOST_TEST_STRINGIZE( s ) BOOST_TEST_L( BOOST_STRINGIZE( s ) )\n#define BOOST_TEST_EMPTY_STRING   BOOST_TEST_L( \"\" )\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\ntypedef unsigned long   counter_t;\n\n//____________________________________________________________________________//\n\nenum report_level  { INV_REPORT_LEVEL, CONFIRMATION_REPORT, SHORT_REPORT, DETAILED_REPORT, NO_REPORT };\n\n//____________________________________________________________________________//\n\nenum output_format { INV_OF, CLF /* compiler log format */, XML /* XML */ };\n\n//____________________________________________________________________________//\n\nenum test_unit_type { tut_case = 0x01, tut_suite = 0x10, tut_any = 0x11 };\n\n//____________________________________________________________________________//\n\ntypedef unsigned long   test_unit_id;\n\nconst test_unit_id INV_TEST_UNIT_ID  = 0xFFFFFFFF;\nconst test_unit_id MAX_TEST_CASE_ID  = 0xFFFFFFFE;\nconst test_unit_id MIN_TEST_CASE_ID  = 0x00010000;\nconst test_unit_id MAX_TEST_SUITE_ID = 0x0000FF00;\nconst test_unit_id MIN_TEST_SUITE_ID = 0x00000001;\n\n//____________________________________________________________________________//\n\nnamespace ut_detail {\n\ninline test_unit_type\ntest_id_2_unit_type( test_unit_id id )\n{\n    return (id & 0xFFFF0000) != 0 ? tut_case : tut_suite;\n}\n\n//____________________________________________________________________________//\n\n// helper templates to prevent ODR violations \ntemplate<class T> \nstruct static_constant { \n    static T value; \n}; \n\ntemplate<class T> \nT static_constant<T>::value; \n\n//____________________________________________________________________________// \n\n} // namespace ut_detail\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/log_level.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : shared definition for unit test log levels\n// ***************************************************************************\n\n#ifndef BOOST_TEST_LOG_LEVEL_HPP_011605GER\n#define BOOST_TEST_LOG_LEVEL_HPP_011605GER\n\nnamespace boost {\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                   log levels                 ************** //\n// ************************************************************************** //\n\n//  each log level includes all subsequent higher loging levels\nenum            log_level {\n    invalid_log_level        = -1,\n    log_successful_tests     = 0,\n    log_test_units           = 1,\n    log_messages             = 2,\n    log_warnings             = 3,\n    log_all_errors           = 4, // reported by unit test macros\n    log_cpp_exception_errors = 5, // uncaught C++ exceptions\n    log_system_errors        = 6, // including timeouts, signals, traps\n    log_fatal_errors         = 7, // including unit test macros or\n                                  // fatal system errors\n    log_nothing              = 8\n};\n\n} // namespace unit_test\n} // namespace boost\n\n#endif // BOOST_TEST_LOG_LEVEL_HPP_011605GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/suppress_warnings.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : suppress some warnings \n// ***************************************************************************\n\n#ifdef BOOST_MSVC\n# pragma warning(push)\n# pragma warning(disable: 4511) // copy constructor can't not be generated\n# pragma warning(disable: 4512) // assignment operator can't not be generated\n# pragma warning(disable: 4100) // unreferenced formal parameter \n# pragma warning(disable: 4996) // <symbol> was declared deprecated \n# pragma warning(disable: 4355) // 'this' : used in base member initializer list\n# pragma warning(disable: 4706) // assignment within conditional expression\n# pragma warning(disable: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'\n# pragma warning(disable: 4127) // conditional expression is constant\n# pragma warning(disable: 4290) // C++ exception specification ignored except to ...\n# pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored\n# pragma warning(disable: 4275) // non dll-interface class ... used as base for dll-interface class ...\n# pragma warning(disable: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data\n# pragma warning(disable: 4511) // 'class' : copy constructor could not be generated\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/unit_test_parameters.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : storage for unit test framework parameters information\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER\n\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/log_level.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// STL\n#include <iosfwd>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                 runtime_config               ************** //\n// ************************************************************************** //\n\nnamespace runtime_config {\n\nBOOST_TEST_DECL void                     init( int& argc, char** argv );\n\nBOOST_TEST_DECL unit_test::log_level     log_level();\nBOOST_TEST_DECL bool                     no_result_code();\nBOOST_TEST_DECL unit_test::report_level  report_level();\nBOOST_TEST_DECL const_string             test_to_run();\nBOOST_TEST_DECL const_string             break_exec_path();\nBOOST_TEST_DECL bool                     save_pattern();\nBOOST_TEST_DECL bool                     show_build_info();\nBOOST_TEST_DECL bool                     show_progress();\nBOOST_TEST_DECL bool                     catch_sys_errors();\nBOOST_TEST_DECL bool                     auto_start_dbg();\nBOOST_TEST_DECL bool                     use_alt_stack();\nBOOST_TEST_DECL bool                     detect_fp_exceptions();\nBOOST_TEST_DECL output_format            report_format();\nBOOST_TEST_DECL output_format            log_format();\nBOOST_TEST_DECL std::ostream*            report_sink();\nBOOST_TEST_DECL std::ostream*            log_sink();\nBOOST_TEST_DECL long                     detect_memory_leaks();\nBOOST_TEST_DECL int                      random_seed();\n\n} // namespace runtime_config\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/detail/workaround.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : contains mics. workarounds \n// ***************************************************************************\n\n#ifndef BOOST_TEST_WORKAROUND_HPP_021005GER\n#define BOOST_TEST_WORKAROUND_HPP_021005GER\n\n// Boost\n#include <boost/config.hpp> // compilers workarounds and std::ptrdiff_t\n\n// STL\n#include <iterator>     // for std::distance\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace ut_detail {\n\n#ifdef BOOST_NO_STD_DISTANCE\ntemplate <class T>\nstd::ptrdiff_t distance( T const& x_, T const& y_ )\n{ \n    std::ptrdiff_t res = 0;\n\n    std::distance( x_, y_, res );\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\n#else\nusing std::distance;\n#endif\n\ntemplate <class T> inline void ignore_unused_variable_warning(const T&) {}\n\n} // namespace ut_detail\n\n} // namespace unit_test\n\nnamespace unit_test_framework = unit_test;\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_WORKAROUND_HPP_021005GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/execution_monitor.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  (C) Copyright Beman Dawes 2001.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines abstract monitor interfaces and implements execution exception\n//  The original Boost Test Library included an implementation detail function\n//  named catch_exceptions() which caught otherwise uncaught C++ exceptions.\n//  It was derived from an existing test framework by Beman Dawes.  The\n//  intent was to expand later to catch other detectable but platform dependent\n//  error events like Unix signals or Windows structured C exceptions.\n//\n//  Requests from early adopters of the Boost Test Library included\n//  configurable levels of error message detail, elimination of templates,\n//  separation of error reporting, and making the catch_exceptions() facilities\n//  available as a public interface.  Support for unit testing also stretched\n//  the function based design.  Implementation within the header became less\n//  attractive due to the need to include many huge system dependent headers,\n//  although still preferable in certain cases.\n//\n//  All those issues have been addressed by introducing the class-based\n//  design presented here.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER\n#define BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/utils/class_properties.hpp>\n\n// Boost\n#include <boost/scoped_ptr.hpp>\n#include <boost/scoped_array.hpp>\n#include <boost/type.hpp>\n#include <boost/cstdlib.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace detail {\n\n// ************************************************************************** //\n// **************       detail::translate_exception_base       ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL translate_exception_base {\npublic:\n    // Constructor\n    explicit    translate_exception_base( boost::scoped_ptr<translate_exception_base>& next )\n    {\n        next.swap( m_next );\n    }\n\n    // Destructor\n    virtual     ~translate_exception_base() {}\n\n    virtual int operator()( unit_test::callback0<int> const& F ) = 0;\n\nprotected:\n    // Data members\n    boost::scoped_ptr<translate_exception_base> m_next;\n};\n\n} // namespace detail\n\n// ************************************************************************** //\n// **************              execution_exception             ************** //\n// ************************************************************************** //\n    \n//  design rationale: fear of being out (or nearly out) of memory.\n    \nclass BOOST_TEST_DECL execution_exception {\n    typedef boost::unit_test::const_string const_string;\npublic:\n    enum error_code {\n        //  These values are sometimes used as program return codes.\n        //  The particular values have been chosen to avoid conflicts with\n        //  commonly used program return codes: values < 100 are often user\n        //  assigned, values > 255 are sometimes used to report system errors.\n        //  Gaps in values allow for orderly expansion.\n        \n        no_error               = 0,   // for completeness only; never returned\n        user_error             = 200, // user reported non-fatal error\n        cpp_exception_error    = 205, // see note (1) below\n        system_error           = 210, // see note (2) below\n        timeout_error          = 215, // only detectable on certain platforms\n        user_fatal_error       = 220, // user reported fatal error\n        system_fatal_error     = 225  // see note (2) below\n        \n        //  Note 1: Only uncaught C++ exceptions are treated as errors.\n        //  If the application catches a C++ exception, it will never reach\n        //  the execution_monitor.\n        \n        //  Note 2: These errors include Unix signals and Windows structured\n        //  exceptions.  They are often initiated by hardware traps.\n        //\n        //  The implementation decides what is a fatal_system_exception and what is\n        //  just a system_exception.  Fatal errors are so likely to have corrupted\n        //  machine state (like a stack overflow or addressing exception) that it\n        //  is unreasonable to continue execution.\n    };\n    \n    struct BOOST_TEST_DECL location {\n        explicit    location( char const* file_name = 0, size_t line_num = 0, char const* func = 0 );\n\n        const_string    m_file_name;\n        size_t          m_line_num;\n        const_string    m_function;\n    };\n\n    // Constructor\n    execution_exception( error_code ec_, const_string what_msg_, location const& location_ ); // max length 256 inc '\\0'\n\n    // Access methods\n    error_code      code() const    { return m_error_code; }\n    const_string    what() const    { return m_what; }\n    location const& where() const   { return m_location; }\n\nprivate:\n    // Data members\n    error_code      m_error_code;\n    const_string    m_what;\n    location        m_location;\n}; // execution_exception\n\n// ************************************************************************** //\n// **************               execution_monitor              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL execution_monitor {\npublic:\n    // Constructor\n    execution_monitor()\n    : p_catch_system_errors( true )\n    , p_auto_start_dbg( false )\n    , p_timeout( 0 )\n    , p_use_alt_stack( true )\n    , p_detect_fp_exceptions( false )\n    {}\n\n    // Public properties\n    \n    //  The p_catch_system_errors parameter specifies whether the monitor should \n    //  try to catch system errors/exceptions that would cause program to crash \n    //  in regular case\n    unit_test::readwrite_property<bool> p_catch_system_errors; \n    //  The p_auto_start_dbg parameter specifies whether the monitor should \n    //  try to attach debugger in case of caught system error\n    unit_test::readwrite_property<bool> p_auto_start_dbg;\n    //  The p_timeout parameter specifies the seconds that elapse before\n    //  a timer_error occurs.  May be ignored on some platforms.\n    unit_test::readwrite_property<int>  p_timeout;\n    //  The p_use_alt_stack parameter specifies whether the monitor should\n    //  use alternative stack for the signal catching\n    unit_test::readwrite_property<bool> p_use_alt_stack;\n    //  The p_detect_fp_exceptions parameter specifies whether the monitor should\n    //  try to detect hardware floating point exceptions\n    unit_test::readwrite_property<bool> p_detect_fp_exceptions;\n\n    int         execute( unit_test::callback0<int> const& F ); \n    //  Returns:  Value returned by function call F().\n    //\n    //  Effects:  Calls executes supplied function F inside a try/catch block which also may\n    //  include other unspecified platform dependent error detection code.\n    //\n    //  Throws: execution_exception on an uncaught C++ exception,\n    //  a hardware or software signal, trap, or other exception.\n    //\n    //  Note: execute() doesn't consider it an error for F to return a non-zero value.\n    \n    // register custom (user supplied) exception translator\n    template<typename Exception, typename ExceptionTranslator>\n    void        register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* = 0 );\n\nprivate:\n    // implementation helpers\n    int         catch_signals( unit_test::callback0<int> const& F );\n\n    // Data members\n    boost::scoped_ptr<detail::translate_exception_base> m_custom_translators;\n    boost::scoped_array<char>                           m_alt_stack;\n}; // execution_monitor\n\nnamespace detail {\n\n// ************************************************************************** //\n// **************         detail::translate_exception          ************** //\n// ************************************************************************** //\n\ntemplate<typename Exception, typename ExceptionTranslator>\nclass translate_exception : public translate_exception_base\n{\n    typedef boost::scoped_ptr<translate_exception_base> base_ptr;\npublic:\n    explicit    translate_exception( ExceptionTranslator const& tr, base_ptr& next )\n    : translate_exception_base( next ), m_translator( tr ) {}\n\n    int operator()( unit_test::callback0<int> const& F )\n    {\n        try {\n            return m_next ? (*m_next)( F ) : F();\n        } catch( Exception const& e ) {\n            m_translator( e );\n            return boost::exit_exception_failure;\n        }\n    }\n\nprivate:\n    // Data members\n    ExceptionTranslator m_translator;\n};\n\n} // namespace detail\n\ntemplate<typename Exception, typename ExceptionTranslator>\nvoid\nexecution_monitor::register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* )\n{\n    m_custom_translators.reset( \n        new detail::translate_exception<Exception,ExceptionTranslator>( tr,m_custom_translators ) );\n}\n\n// ************************************************************************** //\n// **************               execution_aborted              ************** //\n// ************************************************************************** //\n\nstruct execution_aborted {};\n\n// ************************************************************************** //\n// **************                  system_error                ************** //\n// ************************************************************************** //\n\nclass system_error {\npublic:\n    // Constructor\n    explicit    system_error( char const* exp );\n\n    unit_test::readonly_property<long>          p_errno; \n    unit_test::readonly_property<char const*>   p_failed_exp; \n};\n\n#define BOOST_TEST_SYS_ASSERT( exp ) if( (exp) ) ; else throw ::boost::system_error( BOOST_STRINGIZE( exp ) )\n\n}  // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/floating_point_comparison.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines algoirthms for comparing 2 floating point values\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER\n#define BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/predicate_result.hpp>\n\n// Boost\n#include <boost/limits.hpp>  // for std::numeric_limits\n#include <boost/numeric/conversion/conversion_traits.hpp> // for numeric::conversion_traits\n#include <boost/static_assert.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace test_tools {\n\nusing unit_test::readonly_property;\n\n// ************************************************************************** //\n// **************        floating_point_comparison_type        ************** //\n// ************************************************************************** //\n\nenum floating_point_comparison_type {\n    FPC_STRONG, // \"Very close\"   - equation 1' in docs, the default\n    FPC_WEAK    // \"Close enough\" - equation 2' in docs.\n\n};\n\n// ************************************************************************** //\n// **************                    details                   ************** //\n// ************************************************************************** //\n\nnamespace tt_detail {\n\n// FPT is Floating-Point Type: float, double, long double or User-Defined.\ntemplate<typename FPT>\ninline FPT\nfpt_abs( FPT fpv ) \n{\n    return fpv < static_cast<FPT>(0) ? -fpv : fpv;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename FPT>\nstruct fpt_limits {\n    static FPT    min_value()\n    {\n        return std::numeric_limits<FPT>::is_specialized\n                    ? (std::numeric_limits<FPT>::min)()\n                    : 0;\n    }\n    static FPT    max_value()\n    {\n        return std::numeric_limits<FPT>::is_specialized\n                    ? (std::numeric_limits<FPT>::max)()\n                    : static_cast<FPT>(1000000); // for the our purpuses it doesn't really matter what value is returned here\n    }\n};\n\n//____________________________________________________________________________//\n\n// both f1 and f2 are unsigned here\ntemplate<typename FPT>\ninline FPT\nsafe_fpt_division( FPT f1, FPT f2 )\n{\n    // Avoid overflow.\n    if( (f2 < static_cast<FPT>(1))  && (f1 > f2*fpt_limits<FPT>::max_value()) )\n        return fpt_limits<FPT>::max_value();\n\n    // Avoid underflow.\n    if( (f1 == static_cast<FPT>(0)) ||\n        ((f2 > static_cast<FPT>(1)) && (f1 < f2*fpt_limits<FPT>::min_value())) )\n        return static_cast<FPT>(0);\n\n    return f1/f2;\n}\n\n//____________________________________________________________________________//\n\n} // namespace tt_detail\n\n// ************************************************************************** //\n// **************         tolerance presentation types         ************** //\n// ************************************************************************** //\n\ntemplate<typename FPT>\nstruct percent_tolerance_t {\n    explicit    percent_tolerance_t( FPT v ) : m_value( v ) {}\n\n    FPT m_value;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename Out,typename FPT>\nOut& operator<<( Out& out, percent_tolerance_t<FPT> t )\n{\n    return out << t.m_value;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename FPT>\ninline percent_tolerance_t<FPT>\npercent_tolerance( FPT v )\n{\n    return percent_tolerance_t<FPT>( v );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename FPT>\nstruct fraction_tolerance_t {\n    explicit fraction_tolerance_t( FPT v ) : m_value( v ) {}\n\n    FPT m_value;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename Out,typename FPT>\nOut& operator<<( Out& out, fraction_tolerance_t<FPT> t )\n{\n    return out << t.m_value;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename FPT>\ninline fraction_tolerance_t<FPT>\nfraction_tolerance( FPT v )\n{\n    return fraction_tolerance_t<FPT>( v );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************             close_at_tolerance               ************** //\n// ************************************************************************** //\n\ntemplate<typename FPT>\nclass close_at_tolerance {\npublic:\n    // Public typedefs\n    typedef bool result_type;\n\n    // Constructor\n    template<typename ToleranceBaseType>\n    explicit    close_at_tolerance( percent_tolerance_t<ToleranceBaseType>  tolerance, \n                                    floating_point_comparison_type          fpc_type = FPC_STRONG ) \n    : p_fraction_tolerance( tt_detail::fpt_abs( static_cast<FPT>(0.01)*tolerance.m_value ) )\n    , p_strong_or_weak( fpc_type ==  FPC_STRONG )\n    , m_report_modifier( 100. )\n    {}\n    template<typename ToleranceBaseType>\n    explicit    close_at_tolerance( fraction_tolerance_t<ToleranceBaseType> tolerance, \n                                    floating_point_comparison_type          fpc_type = FPC_STRONG ) \n    : p_fraction_tolerance( tt_detail::fpt_abs( tolerance.m_value ) )\n    , p_strong_or_weak( fpc_type ==  FPC_STRONG )\n    , m_report_modifier( 1. )\n    {}\n\n    predicate_result        operator()( FPT left, FPT right ) const\n    {\n        FPT diff = tt_detail::fpt_abs( left - right );\n        FPT d1   = tt_detail::safe_fpt_division( diff, tt_detail::fpt_abs( right ) );\n        FPT d2   = tt_detail::safe_fpt_division( diff, tt_detail::fpt_abs( left ) );\n        \n        predicate_result res( p_strong_or_weak \n            ? (d1 <= p_fraction_tolerance.get() && d2 <= p_fraction_tolerance.get()) \n            : (d1 <= p_fraction_tolerance.get() || d2 <= p_fraction_tolerance.get()) );\n\n        if( !res )\n            res.message() << (( d1 <= p_fraction_tolerance.get() ? d2 : d1 ) * m_report_modifier);\n\n        return res;\n    }\n\n    // Public properties\n    readonly_property<FPT>  p_fraction_tolerance;\n    readonly_property<bool> p_strong_or_weak;\nprivate:\n    // Data members\n    FPT                     m_report_modifier;\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               check_is_close                 ************** //\n// ************************************************************************** //\n\nstruct BOOST_TEST_DECL check_is_close_t {\n    // Public typedefs\n    typedef bool result_type;\n\n    template<typename FPT1, typename FPT2, typename ToleranceBaseType>\n    predicate_result\n    operator()( FPT1 left, FPT2 right, percent_tolerance_t<ToleranceBaseType> tolerance, \n                floating_point_comparison_type fpc_type = FPC_STRONG ) const\n    {\n        // deduce \"better\" type from types of arguments being compared\n        // if one type is floating and the second integral we use floating type and \n        // value of integral type is promoted to the floating. The same for float and double\n        // But we don't want to compare two values of integral types using this tool.\n        typedef typename numeric::conversion_traits<FPT1,FPT2>::supertype FPT;\n        BOOST_STATIC_ASSERT( !is_integral<FPT>::value );\n\n        close_at_tolerance<FPT> pred( tolerance, fpc_type );\n\n        return pred( left, right );\n    }\n    template<typename FPT1, typename FPT2, typename ToleranceBaseType>\n    predicate_result\n    operator()( FPT1 left, FPT2 right, fraction_tolerance_t<ToleranceBaseType> tolerance, \n                floating_point_comparison_type fpc_type = FPC_STRONG ) const\n    {\n        // same as in a comment above\n        typedef typename numeric::conversion_traits<FPT1,FPT2>::supertype FPT;\n        BOOST_STATIC_ASSERT( !is_integral<FPT>::value );\n\n        close_at_tolerance<FPT> pred( tolerance, fpc_type );\n\n        return pred( left, right );\n    }\n};\n\nnamespace {\ncheck_is_close_t const& check_is_close = unit_test::ut_detail::static_constant<check_is_close_t>::value;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               check_is_small                 ************** //\n// ************************************************************************** //\n\nstruct BOOST_TEST_DECL check_is_small_t {\n    // Public typedefs\n    typedef bool result_type;\n\n    template<typename FPT>\n    bool\n    operator()( FPT fpv, FPT tolerance ) const\n    {\n        return tt_detail::fpt_abs( fpv ) < tt_detail::fpt_abs( tolerance );\n    }\n};\n\nnamespace {\ncheck_is_small_t const& check_is_small = unit_test::ut_detail::static_constant<check_is_small_t>::value;\n}\n\n//____________________________________________________________________________//\n\n} // namespace test_tools\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_FLOATING_POINT_COMAPARISON_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/framework.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines framework interface\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FRAMEWORK_HPP_020805GER\n#define BOOST_TEST_FRAMEWORK_HPP_020805GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n#include <boost/test/utils/trivial_singleton.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// STL\n#include <stdexcept>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************              init_unit_test_func             ************** //\n// ************************************************************************** //\n\n#ifdef BOOST_TEST_ALTERNATIVE_INIT_API\ntypedef bool        (*init_unit_test_func)();\n#else\ntypedef test_suite* (*init_unit_test_func)( int, char* [] );\n#endif\n\n// ************************************************************************** //\n// **************                   framework                  ************** //\n// ************************************************************************** //\n\nnamespace framework {\n\n// initialization\nBOOST_TEST_DECL void    init( init_unit_test_func init_func, int argc, char* argv[] );\nBOOST_TEST_DECL bool    is_initialized();\n\n// mutation access methods\nBOOST_TEST_DECL void    register_test_unit( test_case* tc );\nBOOST_TEST_DECL void    register_test_unit( test_suite* ts );\nBOOST_TEST_DECL void    deregister_test_unit( test_unit* tu );\nBOOST_TEST_DECL void    clear();\n\nBOOST_TEST_DECL void    register_observer( test_observer& );\nBOOST_TEST_DECL void    deregister_observer( test_observer& );\nBOOST_TEST_DECL void    reset_observers();\n\nBOOST_TEST_DECL master_test_suite_t& master_test_suite();\n\n// constant access methods\nBOOST_TEST_DECL test_case const&    current_test_case();\n\nBOOST_TEST_DECL test_unit&  get( test_unit_id, test_unit_type );\ntemplate<typename UnitType>\nUnitType&               get( test_unit_id id )\n{\n    return static_cast<UnitType&>( get( id, static_cast<test_unit_type>(UnitType::type) ) );\n}\n\n// test initiation\nBOOST_TEST_DECL void    run( test_unit_id = INV_TEST_UNIT_ID, bool continue_test = true );\nBOOST_TEST_DECL void    run( test_unit const*, bool continue_test = true );\n\n// public test events dispatchers\nBOOST_TEST_DECL void    assertion_result( bool passed );\nBOOST_TEST_DECL void    exception_caught( execution_exception const& );\nBOOST_TEST_DECL void    test_unit_aborted( test_unit const& );\n\n// ************************************************************************** //\n// **************                framework errors              ************** //\n// ************************************************************************** //\n\nstruct internal_error : std::runtime_error {\n    internal_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}\n};\n\nstruct setup_error : std::runtime_error {\n    setup_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}\n};\n\n#define BOOST_TEST_SETUP_ASSERT( cond, msg ) if( cond ) {} else throw unit_test::framework::setup_error( msg )\n\nstruct nothing_to_test {}; // not really an error\n\n} // namespace framework\n\n} // unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_FRAMEWORK_HPP_020805GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/compiler_log_formatter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implements compiler like Log formatter\n// ***************************************************************************\n\n#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER\n#define BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/output/compiler_log_formatter.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/lazy_ostream.hpp>\n\n// Boost\n#include <boost/version.hpp>\n\n// STL\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\n// ************************************************************************** //\n// **************            compiler_log_formatter            ************** //\n// ************************************************************************** //\n\nnamespace {\n\nconst_string\ntest_phase_identifier()\n{\n    return framework::is_initialized() \n            ? const_string( framework::current_test_case().p_name.get() )\n            : BOOST_TEST_L( \"Test setup\" );\n}\n\n} // local namespace\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_start( std::ostream& output, counter_t test_cases_amount )\n{\n    if( test_cases_amount > 0 )\n        output  << \"Running \" << test_cases_amount << \" test \"\n                << (test_cases_amount > 1 ? \"cases\" : \"case\") << \"...\\n\";\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_finish( std::ostream& ostr )\n{\n    ostr.flush();\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_build_info( std::ostream& output )\n{\n    output  << \"Platform: \" << BOOST_PLATFORM            << '\\n'\n            << \"Compiler: \" << BOOST_COMPILER            << '\\n'\n            << \"STL     : \" << BOOST_STDLIB              << '\\n'\n            << \"Boost   : \" << BOOST_VERSION/100000      << \".\"\n                            << BOOST_VERSION/100 % 1000  << \".\"\n                            << BOOST_VERSION % 100       << std::endl;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::test_unit_start( std::ostream& output, test_unit const& tu )\n{\n    output << \"Entering test \" << tu.p_type_name << \" \\\"\" << tu.p_name << \"\\\"\" << std::endl;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::test_unit_finish( std::ostream& output, test_unit const& tu, unsigned long elapsed )\n{\n    output << \"Leaving test \" << tu.p_type_name << \" \\\"\" << tu.p_name << \"\\\"\";\n\n    if( elapsed > 0 ) {\n        output << \"; testing time: \";\n        if( elapsed % 1000 == 0 )\n            output << elapsed/1000 << \"ms\";\n        else\n            output << elapsed << \"mks\";\n    }\n\n    output << std::endl;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::test_unit_skipped( std::ostream& output, test_unit const& tu )\n{\n    output  << \"Test \" << tu.p_type_name << \" \\\"\" << tu.p_name << \"\\\"\" << \"is skipped\" << std::endl;\n}\n    \n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_exception( std::ostream& output, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )\n{\n    execution_exception::location const& loc = ex.where();\n    print_prefix( output, loc.m_file_name, loc.m_line_num );\n\n    output << \"fatal error in \\\"\" << (loc.m_function.is_empty() ? test_phase_identifier() : loc.m_function ) << \"\\\": \";\n\n    output << ex.what();\n\n    if( !checkpoint_data.m_file_name.is_empty() ) {\n        output << '\\n';\n        print_prefix( output, checkpoint_data.m_file_name, checkpoint_data.m_line_num );\n        output << \"last checkpoint\";\n        if( !checkpoint_data.m_message.empty() )\n            output << \": \" << checkpoint_data.m_message;\n    }\n    \n    output << std::endl;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_entry_start( std::ostream& output, log_entry_data const& entry_data, log_entry_types let )\n{\n    switch( let ) {\n        case BOOST_UTL_ET_INFO:\n            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );\n            output << \"info: \";\n            break;\n        case BOOST_UTL_ET_MESSAGE:\n            break;\n        case BOOST_UTL_ET_WARNING:\n            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );\n            output << \"warning in \\\"\" << test_phase_identifier() << \"\\\": \";\n            break;\n        case BOOST_UTL_ET_ERROR:\n            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );\n            output << \"error in \\\"\" << test_phase_identifier() << \"\\\": \";\n            break;\n        case BOOST_UTL_ET_FATAL_ERROR:\n            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );\n            output << \"fatal error in \\\"\" << test_phase_identifier() << \"\\\": \";\n            break;\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_entry_value( std::ostream& output, const_string value )\n{\n    output << value;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_entry_value( std::ostream& output, lazy_ostream const& value )\n{\n    output << value;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::log_entry_finish( std::ostream& output )\n{\n    output << std::endl;\n}\n\n//____________________________________________________________________________//\n\nvoid\ncompiler_log_formatter::print_prefix( std::ostream& output, const_string file, std::size_t line )\n{\n#ifdef __APPLE_CC__\n    // Xcode-compatible logging format, idea by Richard Dingwall at \n    // <http://richarddingwall.name/2008/06/01/using-the-boost-unit-test-framework-with-xcode-3/>. \n    output << file << ':' << line << \": \";\n#else\n    output << file << '(' << line << \"): \";\n#endif\n}\n\n//____________________________________________________________________________//\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/debug.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2006-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : debug interfaces implementation\n// ***************************************************************************\n\n#ifndef BOOST_TEST_DEBUG_API_IPP_112006GER\n#define BOOST_TEST_DEBUG_API_IPP_112006GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/detail/workaround.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n\n#include <boost/test/debug.hpp>\n#include <boost/test/debug_config.hpp>\n\n// Implementation on Windows\n#if defined(_WIN32) && !defined(UNDER_CE) && !defined(BOOST_DISABLE_WIN32) // ******* WIN32\n\n#  define BOOST_WIN32_BASED_DEBUG\n\n// SYSTEM API\n#  include <windows.h>\n#  include <winreg.h>\n#  include <cstdio>\n#  include <cstring>\n\n#  if !defined(NDEBUG) && defined(_MSC_VER)\n#    define BOOST_MS_CRT_BASED_DEBUG\n#    include <crtdbg.h>\n#  endif\n\n\n#  if BOOST_WORKAROUND( BOOST_MSVC, <1300)\n#    define snprintf _snprintf\n#  endif\n\n#  ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::memset; using ::sprintf; }\n#  endif\n\n#elif defined(unix) || defined(__unix) // ********************* UNIX\n\n#  define BOOST_UNIX_BASED_DEBUG\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/algorithm.hpp>\n\n// STL\n#include <cstring>  // std::memcpy\n#include <map>\n#include <cstdio>\n#include <stdarg.h> // !! ?? cstdarg\n\n// SYSTEM API\n#  include <unistd.h>\n#  include <signal.h>\n#  include <fcntl.h>\n\n#  include <sys/types.h>\n#  include <sys/stat.h>\n#  include <sys/wait.h>\n#  include <sys/time.h>\n#  include <stdio.h>\n#  include <stdlib.h>\n\n#  if defined(sun) || defined(__sun)\n\n#    define BOOST_SUN_BASED_DEBUG\n\n#    ifndef BOOST_TEST_DBG_LIST\n#      define BOOST_TEST_DBG_LIST dbx;gdb\n#    endif\n\n#    define BOOST_TEST_CNL_DBG  dbx\n#    define BOOST_TEST_GUI_DBG  dbx-ddd\n\n#    include <procfs.h>\n\n#  elif defined(linux) || defined(__linux)\n\n#    define BOOST_LINUX_BASED_DEBUG\n\n#    include <sys/ptrace.h>\n\n#    ifndef BOOST_TEST_STAT_LINE_MAX\n#      define BOOST_TEST_STAT_LINE_MAX 500\n#    endif\n\n#    ifndef BOOST_TEST_DBG_LIST\n#      define BOOST_TEST_DBG_LIST gdb\n#    endif\n\n#    define BOOST_TEST_CNL_DBG  gdb\n#    define BOOST_TEST_GUI_DBG  gdb-xterm\n\n#  endif\n\n#endif\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace debug {\n\nusing unit_test::const_string;\n\n// ************************************************************************** //\n// **************                debug::info_t                 ************** //\n// ************************************************************************** //\n\nnamespace {\n\n#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32\n\ntemplate<typename T>\ninline void\ndyn_symbol( T& res, char const* module_name, char const* symbol_name )\n{\n    HMODULE m = ::GetModuleHandleA( module_name );\n\n    if( !m )\n        m = ::LoadLibraryA( module_name );\n\n    res = reinterpret_cast<T>( ::GetProcAddress( m, symbol_name ) );\n}\n\n//____________________________________________________________________________//\n\nstatic struct info_t {\n    typedef BOOL (WINAPI* IsDebuggerPresentT)();\n    typedef LONG (WINAPI* RegQueryValueExT)( HKEY, char const* /*LPTSTR*/, LPDWORD, LPDWORD, LPBYTE, LPDWORD );\n    typedef LONG (WINAPI* RegOpenKeyT)( HKEY, char const* /*LPCTSTR*/, PHKEY );\n    typedef LONG (WINAPI* RegCloseKeyT)( HKEY );\n\n    info_t();\n\n    IsDebuggerPresentT  m_is_debugger_present;\n    RegOpenKeyT         m_reg_open_key;\n    RegQueryValueExT    m_reg_query_value;\n    RegCloseKeyT        m_reg_close_key;\n\n} s_info;\n\n//____________________________________________________________________________//\n\ninfo_t::info_t()\n{\n    dyn_symbol( m_is_debugger_present, \"kernel32\", \"IsDebuggerPresent\" );\n    dyn_symbol( m_reg_open_key, \"advapi32\", \"RegOpenKeyA\" );\n    dyn_symbol( m_reg_query_value, \"advapi32\", \"RegQueryValueExA\" );\n    dyn_symbol( m_reg_close_key, \"advapi32\", \"RegCloseKey\" );\n}\n\n//____________________________________________________________________________//\n\n#elif defined(BOOST_UNIX_BASED_DEBUG)\n\n// ************************************************************************** //\n// **************                   fd_holder                  ************** //\n// ************************************************************************** //\n\nstruct fd_holder {\n    explicit fd_holder( int fd ) : m_fd( fd ) {}\n    ~fd_holder()\n    {\n        if( m_fd != -1 )\n            ::close( m_fd );\n    }\n\n    operator int() { return m_fd; }\n\nprivate:\n    // Data members\n    int m_fd;\n};\n\n\n// ************************************************************************** //\n// **************                 process_info                 ************** //\n// ************************************************************************** //\n\nstruct process_info {\n    // Constructor\n    explicit        process_info( int pid );\n\n    // access methods\n    int             parent_pid() const  { return m_parent_pid; }\n    const_string    binary_name() const { return m_binary_name; }\n    const_string    binary_path() const { return m_binary_path; }\n\nprivate:\n    // Data members\n    int             m_parent_pid;\n    const_string    m_binary_name;\n    const_string    m_binary_path;\n\n#if defined(BOOST_SUN_BASED_DEBUG)\n    struct psinfo   m_psi;\n#elif defined(BOOST_LINUX_BASED_DEBUG)\n    char            m_stat_line[BOOST_TEST_STAT_LINE_MAX+1];\n#endif\n    char            m_binary_path_buff[500+1]; // !! ??\n};\n\n//____________________________________________________________________________//\n\nprocess_info::process_info( int pid )\n: m_parent_pid( 0 )\n{\n#if defined(BOOST_SUN_BASED_DEBUG)\n    char fname_buff[30];\n\n    ::snprintf( fname_buff, sizeof(fname_buff), \"/proc/%d/psinfo\", pid );\n\n    fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) );\n\n    if( psinfo_fd == -1 )\n        return;\n\n    if( ::read( psinfo_fd, &m_psi, sizeof(m_psi) ) == -1 )\n        return;\n\n    m_parent_pid = m_psi.pr_ppid;\n\n    m_binary_name.assign( m_psi.pr_fname );\n\n    //-------------------------- //\n    \n    ::snprintf( fname_buff, sizeof(fname_buff), \"/proc/%d/as\", pid );\n\n    fd_holder as_fd( ::open( fname_buff, O_RDONLY ) );\n    uintptr_t   binary_name_pos;\n  \n    // !! ?? could we avoid reading whole m_binary_path_buff?\n    if( as_fd == -1 ||\n        ::lseek( as_fd, m_psi.pr_argv, SEEK_SET ) == -1 ||\n        ::read ( as_fd, &binary_name_pos, sizeof(binary_name_pos) ) == -1 ||\n        ::lseek( as_fd, binary_name_pos, SEEK_SET ) == -1 ||\n        ::read ( as_fd, m_binary_path_buff, sizeof(m_binary_path_buff) ) == -1 )\n        return;\n        \n    m_binary_path.assign( m_binary_path_buff );\n        \n#elif defined(BOOST_LINUX_BASED_DEBUG)\n    char fname_buff[30];\n\n    ::snprintf( fname_buff, sizeof(fname_buff), \"/proc/%d/stat\", pid );\n\n    fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) );\n\n    if( psinfo_fd == -1 )\n        return;\n\n    ssize_t num_read = ::read( psinfo_fd, m_stat_line, sizeof(m_stat_line)-1 );\n    if( num_read == -1 )\n        return;\n\n    m_stat_line[num_read] = 0;\n\n    char const* name_beg = m_stat_line;\n    while( *name_beg && *name_beg != '(' )\n        ++name_beg;\n\n    char const* name_end = name_beg+1;\n    while( *name_end && *name_end != ')' )\n        ++name_end;\n\n    std::sscanf( name_end+1, \"%*s%d\", &m_parent_pid );\n\n    m_binary_name.assign( name_beg+1, name_end );\n\n    ::snprintf( fname_buff, sizeof(fname_buff), \"/proc/%d/exe\", pid );\n    num_read = ::readlink( fname_buff, m_binary_path_buff, sizeof(m_binary_path_buff)-1 );\n\n    if( num_read == -1 )\n        return;\n\n    m_binary_path_buff[num_read] = 0;\n    m_binary_path.assign( m_binary_path_buff, num_read );\n#endif\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************             prepare_window_title             ************** //\n// ************************************************************************** //\n\nstatic char*\nprepare_window_title( dbg_startup_info const& dsi )\n{\n    typedef unit_test::const_string str_t;\n\n    static char title_str[50];\n\n    str_t path_sep( \"\\\\/\" );\n\n    str_t::iterator  it = unit_test::find_last_of( dsi.binary_path.begin(), dsi.binary_path.end(),\n                                                   path_sep.begin(), path_sep.end() );\n\n    if( it == dsi.binary_path.end() )\n        it = dsi.binary_path.begin();\n    else\n        ++it;\n\n    ::snprintf( title_str, sizeof(title_str), \"%*s %ld\", (int)(dsi.binary_path.end()-it), it, dsi.pid );\n\n    return title_str;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  save_execlp                 ************** //\n// ************************************************************************** //\n\ntypedef unit_test::basic_cstring<char> mbuffer;\n\ninline char*\ncopy_arg( mbuffer& dest, const_string arg )\n{\n    if( dest.size() < arg.size()+1 )\n        return 0;\n\n    char* res = dest.begin();\n\n    std::memcpy( res, arg.begin(), arg.size()+1 );\n\n    dest.trim_left( arg.size()+1 );\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\nbool\nsafe_execlp( char const* file, ... )\n{\n    static char* argv_buff[200];\n\n    va_list     args;\n    char const* arg;\n\n    // first calculate actual number of arguments\n    int         num_args = 2; // file name and 0 at least\n\n    va_start( args, file );\n    while( !!(arg = va_arg( args, char const* )) )\n        num_args++;\n    va_end( args );\n\n    // reserve space for the argument pointers array\n    char**      argv_it  = argv_buff;\n    mbuffer     work_buff( reinterpret_cast<char*>(argv_buff), sizeof(argv_buff) );\n    work_buff.trim_left( num_args * sizeof(char*) );\n\n    // copy all the argument values into local storage\n    if( !(*argv_it++ = copy_arg( work_buff, file )) )\n        return false;\n\n    printf( \"!! %s\\n\", file );\n\n    va_start( args, file );\n    while( !!(arg = va_arg( args, char const* )) ) {\n        printf( \"!! %s\\n\", arg );\n        if( !(*argv_it++ = copy_arg( work_buff, arg )) )\n            return false;\n    }\n    va_end( args );\n\n    *argv_it = 0;\n\n    return ::execvp( file, argv_buff ) != -1;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************            start_debugger_in_emacs           ************** //\n// ************************************************************************** //\n\nstatic void\nstart_debugger_in_emacs( dbg_startup_info const& dsi, char const* emacs_name, char const* dbg_command )\n{\n    char const* title = prepare_window_title( dsi );\n\n    if( !title )\n        return;\n\n    dsi.display.is_empty()\n        ? safe_execlp( emacs_name, \"-title\", title, \"--eval\", dbg_command, 0 )\n        : safe_execlp( emacs_name, \"-title\", title, \"-display\", dsi.display.begin(), \"--eval\", dbg_command, 0 );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                 gdb starters                 ************** //\n// ************************************************************************** //\n\nstatic char const*\nprepare_gdb_cmnd_file( dbg_startup_info const& dsi )\n{\n    // prepare pid value\n    char pid_buff[16];\n    ::snprintf( pid_buff, sizeof(pid_buff), \"%ld\", dsi.pid );\n    unit_test::const_string pid_str( pid_buff );\n\n    static char cmd_file_name[] = \"/tmp/btl_gdb_cmd_XXXXXX\"; // !! ??\n\n    // prepare commands\n    fd_holder cmd_fd( ::mkstemp( cmd_file_name ) );\n\n    if( cmd_fd == -1 )\n        return 0;\n\n#define WRITE_STR( str )  if( ::write( cmd_fd, str.begin(), str.size() ) == -1 ) return 0;\n#define WRITE_CSTR( str ) if( ::write( cmd_fd, str, sizeof( str )-1 ) == -1 ) return 0;\n\n    WRITE_CSTR( \"file \" );\n    WRITE_STR( dsi.binary_path );\n    WRITE_CSTR( \"\\nattach \" );\n    WRITE_STR( pid_str );\n    WRITE_CSTR( \"\\nshell unlink \" );\n    WRITE_STR( dsi.init_done_lock );\n    WRITE_CSTR( \"\\ncont\" );\n    if( dsi.break_or_continue )\n        WRITE_CSTR( \"\\nup 4\" );\n            \n    WRITE_CSTR( \"\\necho \\\\n\" ); // !! ??\n    WRITE_CSTR( \"\\nlist -\" );\n    WRITE_CSTR( \"\\nlist\" );\n    WRITE_CSTR( \"\\nshell unlink \" );\n    WRITE_CSTR( cmd_file_name );\n\n    return cmd_file_name;\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_gdb_in_console( dbg_startup_info const& dsi )\n{\n    char const* cmnd_file_name = prepare_gdb_cmnd_file( dsi );\n\n    if( !cmnd_file_name )\n        return;\n\n    safe_execlp( \"gdb\", \"-q\", \"-x\", cmnd_file_name, 0 );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_gdb_in_xterm( dbg_startup_info const& dsi )\n{\n    char const* title           = prepare_window_title( dsi );\n    char const* cmnd_file_name  = prepare_gdb_cmnd_file( dsi );\n\n    if( !title || !cmnd_file_name )\n        return;\n\n    safe_execlp( \"xterm\", \"-T\", title, \"-display\", dsi.display.begin(),\n                    \"-bg\", \"black\", \"-fg\", \"white\", \"-geometry\", \"88x30+10+10\", \"-fn\", \"9x15\", \"-e\",\n                 \"gdb\", \"-q\", \"-x\", cmnd_file_name, 0 );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_gdb_in_emacs( dbg_startup_info const& dsi )\n{\n    char const* cmnd_file_name  = prepare_gdb_cmnd_file( dsi );\n    if( !cmnd_file_name )\n        return;\n\n    char dbg_cmd_buff[500]; // !! ??\n    ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), \"(progn (gdb \\\"gdb -q -x %s\\\"))\", cmnd_file_name );\n\n    start_debugger_in_emacs( dsi, \"emacs\", dbg_cmd_buff );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_gdb_in_xemacs( dbg_startup_info const& )\n{\n    // !! ??\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                 dbx starters                 ************** //\n// ************************************************************************** //\n\nstatic char const*\nprepare_dbx_cmd_line( dbg_startup_info const& dsi, bool list_source = true )\n{\n    static char cmd_line_buff[500]; // !! ??\n\n    ::snprintf( cmd_line_buff, sizeof(cmd_line_buff), \"unlink %s;cont;%s%s\", \n                   dsi.init_done_lock.begin(), \n                   dsi.break_or_continue ? \"up 2;\": \"\", \n                   list_source ? \"echo \\\" \\\";list -w3;\" : \"\" );\n\n    return cmd_line_buff;\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_dbx_in_console( dbg_startup_info const& dsi )\n{\n    char pid_buff[16];\n    ::snprintf( pid_buff, sizeof(pid_buff), \"%ld\", dsi.pid );\n\n    safe_execlp( \"dbx\", \"-q\", \"-c\", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_dbx_in_xterm( dbg_startup_info const& dsi )\n{\n    char const* title = prepare_window_title( dsi );\n    if( !title )\n        return;\n\n    char pid_buff[16]; // !! ??\n    ::snprintf( pid_buff, sizeof(pid_buff), \"%ld\", dsi.pid );\n    \n    safe_execlp( \"xterm\", \"-T\", title, \"-display\", dsi.display.begin(), \n                    \"-bg\", \"black\", \"-fg\", \"white\", \"-geometry\", \"88x30+10+10\", \"-fn\", \"9x15\", \"-e\",\n                 \"dbx\", \"-q\", \"-c\", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_dbx_in_emacs( dbg_startup_info const& /*dsi*/ )\n{\n//    char dbg_cmd_buff[500]; // !! ??\n//\n//    ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), \"(progn (dbx \\\"dbx -q -c cont %s %ld\\\"))\", dsi.binary_path.begin(), dsi.pid );\n\n//    start_debugger_in_emacs( dsi, \"emacs\", dbg_cmd_buff );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_dbx_in_xemacs( dbg_startup_info const& )\n{\n    // !! ??\n}\n\n//____________________________________________________________________________//\n\nstatic void\nstart_dbx_in_ddd( dbg_startup_info const& dsi )\n{\n    char const* title = prepare_window_title( dsi );\n    if( !title )\n        return;\n\n    char pid_buff[16]; // !! ??\n    ::snprintf( pid_buff, sizeof(pid_buff), \"%ld\", dsi.pid );\n    \n    safe_execlp( \"ddd\", \"-display\", dsi.display.begin(),\n                 \"--dbx\", \"-q\", \"-c\", prepare_dbx_cmd_line( dsi, false ), dsi.binary_path.begin(), pid_buff, 0 );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                debug::info_t                 ************** //\n// ************************************************************************** //\n\nstatic struct info_t {\n    // Constructor\n    info_t();\n\n    // Public properties\n    unit_test::readwrite_property<std::string>  p_dbg;\n    \n    // Data members\n    std::map<std::string,dbg_starter>           m_dbg_starter_reg;\n} s_info;\n\n//____________________________________________________________________________//\n\ninfo_t::info_t()\n{\n    p_dbg.value = ::getenv( \"DISPLAY\" )\n        ? std::string( BOOST_STRINGIZE( BOOST_TEST_GUI_DBG ) )\n        : std::string( BOOST_STRINGIZE( BOOST_TEST_CNL_DBG ) );\n        \n    m_dbg_starter_reg[std::string(\"gdb\")]           = &start_gdb_in_console;\n    m_dbg_starter_reg[std::string(\"gdb-emacs\")]     = &start_gdb_in_emacs;\n    m_dbg_starter_reg[std::string(\"gdb-xterm\")]     = &start_gdb_in_xterm;\n    m_dbg_starter_reg[std::string(\"gdb-xemacs\")]    = &start_gdb_in_xemacs;\n\n    m_dbg_starter_reg[std::string(\"dbx\")]           = &start_dbx_in_console;\n    m_dbg_starter_reg[std::string(\"dbx-emacs\")]     = &start_dbx_in_emacs;\n    m_dbg_starter_reg[std::string(\"dbx-xterm\")]     = &start_dbx_in_xterm;\n    m_dbg_starter_reg[std::string(\"dbx-xemacs\")]    = &start_dbx_in_xemacs;\n    m_dbg_starter_reg[std::string(\"dbx-ddd\")]       = &start_dbx_in_ddd;\n}\n\n//____________________________________________________________________________//\n\n#endif\n\n} // local namespace\n\n// ************************************************************************** //\n// **************  check if program is running under debugger  ************** //\n// ************************************************************************** //\n\nbool\nunder_debugger()\n{\n#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32\n\n    return !!s_info.m_is_debugger_present && s_info.m_is_debugger_present();\n\n#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX\n\n    // !! ?? could/should we cache the result somehow?\n    const_string    dbg_list = BOOST_TEST_STRINGIZE( BOOST_TEST_DBG_LIST );\n\n    pid_t pid = ::getpid();\n\n    while( pid != 0 ) {\n        process_info pi( pid );\n\n        // !! ?? should we use tokenizer here instead?\n        if( dbg_list.find( pi.binary_name() ) != const_string::npos )\n            return true;\n\n        pid = (pi.parent_pid() == pid ? 0 : pi.parent_pid());\n    }\n\n    return false;\n\n#else // ****************************************************** default\n\n    return false;\n\n#endif\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************       cause program to break execution       ************** //\n// **************           in debugger at call point          ************** //\n// ************************************************************************** //\n\nvoid\ndebugger_break()\n{\n    // !! ?? auto-start debugger?\n\n#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32\n\n#if BOOST_WORKAROUND(BOOST_MSVC, >= 1300)                       ||  \\\n    BOOST_WORKAROUND(__GNUC__, >= 3) && !defined(__MINGW32__)   ||  \\\n    defined(__INTEL_COMPILER)\n#   define BOOST_DEBUG_BREAK    __debugbreak\n#else\n#   define BOOST_DEBUG_BREAK    DebugBreak\n#endif\n\n#ifndef __MINGW32__\n    if( !under_debugger() ) {\n        __try {\n            __try {\n                BOOST_DEBUG_BREAK();\n            }\n            __except( UnhandledExceptionFilter(GetExceptionInformation()) )\n            {\n                // User opted to ignore the breakpoint\n                return;\n            }\n        }\n        __except (EXCEPTION_EXECUTE_HANDLER)\n        {\n            // If we got here, the user has pushed Debug. Debugger is already attached to our process and we\n            // continue to let the another BOOST_DEBUG_BREAK to be called.\n        }\n    }\n#endif\n\n    BOOST_DEBUG_BREAK();\n\n#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX\n\n    ::kill( ::getpid(), SIGTRAP );\n\n#else // ****************************************************** default\n\n#endif\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************            console debugger setup            ************** //\n// ************************************************************************** //\n\n#if defined(BOOST_UNIX_BASED_DEBUG) // ************************ UNIX\n\nstd::string\nset_debugger( unit_test::const_string dbg_id, dbg_starter s )\n{\n    std::string old = s_info.p_dbg;\n\n    assign_op( s_info.p_dbg.value, dbg_id, 0 );\n\n    if( !!s )\n        s_info.m_dbg_starter_reg[s_info.p_dbg] = s;\n\n    return old;\n}\n\n#else  // ***************************************************** default\n\nstd::string\nset_debugger( unit_test::const_string, dbg_starter )\n{\n    return std::string();\n}\n\n#endif\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************    attach debugger to the current process    ************** //\n// ************************************************************************** //\n\nbool\nattach_debugger( bool break_or_continue )\n{\n    if( under_debugger() )\n        return false;\n\n#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32\n\n    const int MAX_CMD_LINE = 200;\n\n    // *************************************************** //\n    // Debugger \"ready\" event\n\n    SECURITY_ATTRIBUTES attr;\n    attr.nLength                = sizeof(attr);\n    attr.lpSecurityDescriptor   = NULL;\n    attr.bInheritHandle         = true;\n\n    // manual resettable, initially non signaled, unnamed event,\n    // that will signal me that debugger initialization is done\n    HANDLE dbg_init_done_ev = ::CreateEvent(\n        &attr,          // pointer to security attributes\n        true,           // flag for manual-reset event\n        false,          // flag for initial state\n        NULL            // pointer to event-object name\n    );\n\n    if( !dbg_init_done_ev )\n        return false;\n\n    // *************************************************** //\n    // Debugger command line format\n\n    HKEY reg_key;\n\n    if( !s_info.m_reg_open_key || (*s_info.m_reg_open_key)(\n            HKEY_LOCAL_MACHINE,                                         // handle of open key\n            \"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AeDebug\", // name of subkey to open\n            &reg_key ) != ERROR_SUCCESS )                               // address of handle of open key\n        return false;\n\n    char  format[MAX_CMD_LINE];\n    DWORD format_size = MAX_CMD_LINE;\n    DWORD type = REG_SZ;\n\n    if( !s_info.m_reg_query_value || (*s_info.m_reg_query_value)(\n            reg_key,                            // handle of open key\n            \"Debugger\",                         // name of subkey to query\n            0,                                  // reserved\n            &type,                              // value type\n            (LPBYTE)format,                     // buffer for returned string\n            &format_size ) != ERROR_SUCCESS )   // in: buffer size; out: actual size of returned string\n        return false;\n\n    if( !s_info.m_reg_close_key || (*s_info.m_reg_close_key)( reg_key ) != ERROR_SUCCESS )\n        return false;\n\n    // *************************************************** //\n    // Debugger command line\n\n    char cmd_line[MAX_CMD_LINE];\n    std::sprintf( cmd_line, format, ::GetCurrentProcessId(), dbg_init_done_ev );\n\n    // *************************************************** //\n    // Debugger window parameters\n\n    STARTUPINFOA    startup_info;\n    std::memset( &startup_info, 0, sizeof(startup_info) );\n\n    startup_info.cb             = sizeof(startup_info);\n    startup_info.dwFlags        = STARTF_USESHOWWINDOW;\n    startup_info.wShowWindow    = SW_SHOWNORMAL;\n\n    // debugger process s_info\n    PROCESS_INFORMATION debugger_info;\n\n    bool created = !!::CreateProcessA(\n        NULL,           // pointer to name of executable module; NULL - use the one in command line\n        cmd_line,       // pointer to command line string\n        NULL,           // pointer to process security attributes; NULL - debugger's handle can't be inherited\n        NULL,           // pointer to thread security attributes; NULL - debugger's handle can't be inherited\n        true,           // debugger inherit opened handles\n        0,              // priority flags; 0 - normal priority\n        NULL,           // pointer to new environment block; NULL - use this process environment\n        NULL,           // pointer to current directory name; NULL - use this process correct directory\n        &startup_info,  // pointer to STARTUPINFO that specifies main window appearance\n        &debugger_info  // pointer to PROCESS_INFORMATION that will contain the new process identification\n    );\n\n    if( created )\n        ::WaitForSingleObject( dbg_init_done_ev, INFINITE );\n\n    ::CloseHandle( dbg_init_done_ev );\n\n    if( !created )\n        return false;\n\n    if( break_or_continue )\n        debugger_break();\n\n    return true;\n\n#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX\n\n    char init_done_lock_fn[] = \"/tmp/btl_dbg_init_done_XXXXXX\";\n    fd_holder init_done_lock_fd( ::mkstemp( init_done_lock_fn ) );\n\n    if( init_done_lock_fd == -1 )\n        return false;\n    \n    pid_t child_pid = fork();\n\n    if( child_pid == -1 )\n        return false;\n\n    if( child_pid != 0 ) { // parent process - here we will start the debugger\n        dbg_startup_info dsi;\n    \n        process_info pi( child_pid );\n        if( pi.binary_path().is_empty() )\n            ::exit( -1 );\n\n        dsi.pid                 = child_pid;\n        dsi.break_or_continue   = break_or_continue;\n        dsi.binary_path         = pi.binary_path();\n        dsi.display             = ::getenv( \"DISPLAY\" );\n        dsi.init_done_lock      = init_done_lock_fn;\n        \n        dbg_starter starter = s_info.m_dbg_starter_reg[s_info.p_dbg];\n        if( !!starter )\n            starter( dsi );\n\n        ::perror( \"Boost.Test execution monitor failed to start a debugger:\" );\n\n        ::exit( -1 );\n    }\n\n    // child process - here we will continue our test module execution ; // !! ?? should it be vice versa\n\n    while( ::access( init_done_lock_fn, F_OK ) == 0 ) {\n        struct timeval to = { 0, 100 };\n\n        ::select( 0, 0, 0, 0, &to );\n    }\n\n//    char dummy;\n//    while( ::read( init_done_lock_fd, &dummy, sizeof(char) ) == 0 );\n\n    if( break_or_continue )\n        debugger_break();\n\n    return true;\n\n#else // ****************************************************** default\n\n    return false;\n\n#endif\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************   switch on/off detect memory leaks feature  ************** //\n// ************************************************************************** //\n\nvoid\ndetect_memory_leaks( bool on_off )\n{\n    unit_test::ut_detail::ignore_unused_variable_warning( on_off );\n\n#ifdef BOOST_MS_CRT_BASED_DEBUG\n    int flags = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );\n\n    if( !on_off )\n        flags &= ~_CRTDBG_LEAK_CHECK_DF;\n    else  {\n        flags |= _CRTDBG_LEAK_CHECK_DF;\n        _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);\n        _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);\n    }\n\n    _CrtSetDbgFlag ( flags );\n#endif // BOOST_MS_CRT_BASED_DEBUG\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************      cause program to break execution in     ************** //\n// **************     debugger at specific allocation point    ************** //\n// ************************************************************************** //\n\nvoid\nbreak_memory_alloc( long mem_alloc_order_num )\n{\n    unit_test::ut_detail::ignore_unused_variable_warning( mem_alloc_order_num );\n\n#ifdef BOOST_MS_CRT_BASED_DEBUG\n    _CrtSetBreakAlloc( mem_alloc_order_num );\n#endif // BOOST_MS_CRT_BASED_DEBUG\n}\n\n} // namespace debug\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_DEBUG_API_IPP_112006GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/exception_safety.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : Facilities to perform exception safety tests\n// ***************************************************************************\n\n#ifndef BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER\n#define BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n#if BOOST_TEST_SUPPORT_INTERACTION_TESTING\n\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/utils/iterator/token_iterator.hpp>\n\n#include <boost/test/interaction_based.hpp>\n#include <boost/test/test_tools.hpp>\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/test_observer.hpp>\n#include <boost/test/debug.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// Boost\n#include <boost/lexical_cast.hpp>\n\n// STL\n#include <vector>\n#include <cstdlib>\n#include <map>\n#include <iomanip>\n#include <cctype>\n#include <boost/limits.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nusing namespace ::boost::unit_test;\n \nnamespace itest {\n\n// ************************************************************************** //\n// **************             execution_path_point             ************** //\n// ************************************************************************** //\n\nenum exec_path_point_type { EPP_SCOPE, EPP_EXCEPT, EPP_DECISION, EPP_ALLOC };\n\nstruct execution_path_point {\n    execution_path_point( exec_path_point_type t, const_string file, std::size_t line_num )\n    : m_type( t )\n    , m_file_name( file )\n    , m_line_num( line_num )\n    {}\n\n    exec_path_point_type    m_type;\n    const_string             m_file_name;\n    std::size_t             m_line_num;\n\n    // Execution path point specific\n    struct decision_data {\n        bool            value;\n        unsigned        forced_exception_point;\n    };\n    struct scope_data {\n        unsigned        size;\n        char const*     name;\n    };\n    struct except_data {\n        char const*     description;\n    };\n    struct alloc_data {\n        void*           ptr;\n        std::size_t     size;\n    };\n\n    union {\n        struct decision_data    m_decision;\n        struct scope_data       m_scope;\n        struct except_data      m_except;\n        struct alloc_data       m_alloc;\n    };\n};\n\n// ************************************************************************** //\n// **************     exception safety test implementation     ************** //\n// ************************************************************************** //\n\nstruct exception_safety_tester : itest::manager, test_observer {\n    // helpers types\n    struct unique_exception {};\n\n    // Constructor\n    explicit            exception_safety_tester( const_string test_name );\n    ~exception_safety_tester();\n\n    // check last run and prepare for next\n    bool                next_execution_path();\n\n    // memory tracking\n\n    // manager interface implementation\n    virtual void        exception_point( const_string file, std::size_t line_num, const_string description );\n    virtual bool        decision_point( const_string file, std::size_t line_num );\n    virtual unsigned    enter_scope( const_string file, std::size_t line_num, const_string scope_name );\n    virtual void        leave_scope( unsigned enter_scope_point );\n    virtual void        allocated( const_string file, std::size_t line_num, void* p, std::size_t s );\n    virtual void        freed( void* p );\n\n    // test observer interface\n    virtual void        assertion_result( bool passed );\n    virtual int         priority() { return (std::numeric_limits<int>::max)(); } // we want this observer to run the last\n\nprivate:\n    void                failure_point();\n    void                report_error();\n\n    typedef std::vector<execution_path_point>   exec_path;\n    typedef std::map<void*,unsigned>            registry;\n\n    // Data members\n    bool        m_internal_activity;\n    \n    unsigned    m_exception_point_counter;\n    unsigned    m_forced_exception_point;\n\n    unsigned    m_exec_path_point;\n    exec_path   m_execution_path;\n\n    unsigned    m_exec_path_counter;\n    unsigned    m_break_exec_path;\n    \n    bool        m_invairant_failed;\n    registry    m_memory_in_use;\n};\n\n//____________________________________________________________________________//\n\nstruct activity_guard {\n    bool& m_v;\n\n    activity_guard( bool& v ) : m_v( v )    { m_v = true; }\n    ~activity_guard()                       { m_v = false; }\n};\n\n//____________________________________________________________________________//\n\nexception_safety_tester::exception_safety_tester( const_string test_name )\n: m_internal_activity( true )\n, m_exception_point_counter( 0 )\n, m_forced_exception_point( 1 )\n, m_exec_path_point( 0 )\n, m_exec_path_counter( 1 )\n, m_break_exec_path( static_cast<unsigned>(-1) )\n, m_invairant_failed( false )\n{\n    framework::register_observer( *this );\n\n    if( !runtime_config::break_exec_path().is_empty() ) {\n        using namespace unit_test;\n        \n        string_token_iterator tit( runtime_config::break_exec_path(), \n                                   (dropped_delimeters = \":\",kept_delimeters = \" \") );\n        \n        const_string test_to_break = *tit;\n        \n        if( test_to_break == test_name ) {\n            ++tit;\n            \n            m_break_exec_path = lexical_cast<unsigned>( *tit );\n        }\n    }\n    \n    m_internal_activity = false;\n}\n\n//____________________________________________________________________________//\n\nexception_safety_tester::~exception_safety_tester()\n{\n    m_internal_activity = true;\n    \n    framework::deregister_observer( *this );\n}\n\n//____________________________________________________________________________//\n\nbool\nexception_safety_tester::next_execution_path()\n{\n    activity_guard ag( m_internal_activity );\n\n    // check memory usage\n    if( m_execution_path.size() > 0 ) {\n        bool errors_detected = m_invairant_failed || (m_memory_in_use.size() != 0);\n        framework::assertion_result( !errors_detected );\n\n        if( errors_detected )\n            report_error();\n\n        m_memory_in_use.clear();\n    }\n\n    m_exec_path_point           = 0;\n    m_exception_point_counter   = 0;\n    m_invairant_failed          = false;\n    ++m_exec_path_counter;\n\n    while( m_execution_path.size() > 0 ) {\n        switch( m_execution_path.back().m_type ) {\n        case EPP_SCOPE:\n        case EPP_ALLOC:\n            m_execution_path.pop_back();\n            break;\n\n        case EPP_DECISION:\n            if( !m_execution_path.back().m_decision.value ) {\n                m_execution_path.pop_back();\n                break;\n            }\n\n            m_execution_path.back().m_decision.value = false;\n            m_forced_exception_point = m_execution_path.back().m_decision.forced_exception_point;\n            return true;\n\n        case EPP_EXCEPT:\n            m_execution_path.pop_back();\n            ++m_forced_exception_point;\n            return true;\n        }\n    }\n\n    BOOST_TEST_MESSAGE( \"Total tested \" << --m_exec_path_counter << \" execution path\" );\n\n    return false;\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::exception_point( const_string file, std::size_t line_num, const_string description )\n{\n    activity_guard ag( m_internal_activity );\n\n    if( ++m_exception_point_counter == m_forced_exception_point ) {\n        m_execution_path.push_back(\n            execution_path_point( EPP_EXCEPT, file, line_num ) );\n\n        m_execution_path.back().m_except.description = description.begin();\n\n        ++m_exec_path_point;\n\n        failure_point();\n    }\n}\n\n//____________________________________________________________________________//\n\nbool\nexception_safety_tester::decision_point( const_string file, std::size_t line_num )\n{\n    activity_guard ag( m_internal_activity );\n\n    if( m_exec_path_point < m_execution_path.size() ) {\n        BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_DECISION &&\n                               m_execution_path[m_exec_path_point].m_file_name == file &&\n                               m_execution_path[m_exec_path_point].m_line_num == line_num,\n                               \"Function under test exibit non-deterministic behavior\" );\n    }\n    else {\n        m_execution_path.push_back(\n            execution_path_point( EPP_DECISION, file, line_num ) );\n\n        m_execution_path.back().m_decision.value = true;\n        m_execution_path.back().m_decision.forced_exception_point = m_forced_exception_point;\n    }\n\n    return m_execution_path[m_exec_path_point++].m_decision.value;\n}\n\n//____________________________________________________________________________//\n\nunsigned\nexception_safety_tester::enter_scope( const_string file, std::size_t line_num, const_string scope_name )\n{\n    activity_guard ag( m_internal_activity );\n\n    if( m_exec_path_point < m_execution_path.size() ) {\n        BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_SCOPE &&\n                               m_execution_path[m_exec_path_point].m_file_name == file &&\n                               m_execution_path[m_exec_path_point].m_line_num == line_num,\n                               \"Function under test exibit non-deterministic behavior\" );\n    }\n    else {\n        m_execution_path.push_back(\n            execution_path_point( EPP_SCOPE, file, line_num ) );\n    }\n\n    m_execution_path[m_exec_path_point].m_scope.size = 0;\n    m_execution_path[m_exec_path_point].m_scope.name = scope_name.begin();\n\n    return m_exec_path_point++;\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::leave_scope( unsigned enter_scope_point )\n{\n    activity_guard ag( m_internal_activity );\n\n    BOOST_REQUIRE_MESSAGE( m_execution_path[enter_scope_point].m_type == EPP_SCOPE,\n                           \"Function under test exibit non-deterministic behavior\" );\n\n    m_execution_path[enter_scope_point].m_scope.size = m_exec_path_point - enter_scope_point;\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::allocated( const_string file, std::size_t line_num, void* p, std::size_t s )\n{\n    if( m_internal_activity )\n        return;\n\n    activity_guard ag( m_internal_activity );\n\n    if( m_exec_path_point < m_execution_path.size() )\n        BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_ALLOC,\n                               \"Function under test exibit non-deterministic behavior\" );\n    else\n        m_execution_path.push_back(\n            execution_path_point( EPP_ALLOC, file, line_num ) );\n\n    m_execution_path[m_exec_path_point].m_alloc.ptr  = p;\n    m_execution_path[m_exec_path_point].m_alloc.size = s;\n\n    m_memory_in_use.insert( std::make_pair( p, m_exec_path_point++ ) );\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::freed( void* p )\n{\n    if( m_internal_activity )\n        return;\n\n    activity_guard ag( m_internal_activity );\n\n    registry::iterator it = m_memory_in_use.find( p );\n    if( it != m_memory_in_use.end() ) {\n        m_execution_path[it->second].m_alloc.ptr = 0;\n        m_memory_in_use.erase( it );\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::assertion_result( bool passed )\n{\n    if( !m_internal_activity && !passed ) {\n        m_invairant_failed = true;\n\n        failure_point();\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_safety_tester::failure_point()\n{\n    if( m_exec_path_counter == m_break_exec_path )\n        debug::debugger_break();\n    \n    throw unique_exception();\n}\n\n//____________________________________________________________________________//\n    \nnamespace {\n\ninline void\nformat_location( wrap_stringstream& formatter, execution_path_point const& /*p*/, unsigned indent )\n{\n    if( indent )\n        formatter << std::left << std::setw( indent ) << \"\";\n\n// !! ?? optional   if( p.m_file_name )\n//        formatter << p.m_file_name << '(' << p.m_line_num << \"): \";\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename ExecPathIt>\ninline void\nformat_execution_path( wrap_stringstream& formatter, ExecPathIt it, ExecPathIt end, unsigned indent = 0 )\n{\n    while( it != end ) {\n        switch( it->m_type ) {\n        case EPP_SCOPE:\n            format_location( formatter, *it, indent );\n            formatter << \"> \\\"\" << it->m_scope.name << \"\\\"\\n\";\n            format_execution_path( formatter, it+1, it + it->m_scope.size, indent + 2 );\n            format_location( formatter, *it, indent );\n            formatter << \"< \\\"\" << it->m_scope.name << \"\\\"\\n\";\n            it += it->m_scope.size;\n            break;\n\n        case EPP_DECISION:\n            format_location( formatter, *it, indent );\n            formatter << \"Decision made as \" << std::boolalpha << it->m_decision.value << '\\n';\n            ++it;\n            break;\n\n        case EPP_EXCEPT:\n            format_location( formatter, *it, indent );\n            formatter << \"Forced failure\";\n            if( it->m_except.description )\n                formatter << \": \" << it->m_except.description;\n            formatter << \"\\n\";\n            ++it;\n            break;\n\n        case EPP_ALLOC:\n            if( it->m_alloc.ptr ) {\n                format_location( formatter, *it, indent );\n                formatter << \"Allocated memory block 0x\" << std::uppercase << it->m_alloc.ptr \n                          << \", \" << it->m_alloc.size << \" bytes long: <\";\n\n                unsigned i;\n                for( i = 0; i < std::min<std::size_t>( it->m_alloc.size, 8 ); i++ ) {\n                    unsigned char c = static_cast<unsigned char*>(it->m_alloc.ptr)[i];\n                    if( (std::isprint)( c ) )\n                        formatter << c;\n                    else\n                        formatter << '.';\n                }\n\n                formatter << \"> \";\n\n                for( i = 0; i < std::min<std::size_t>( it->m_alloc.size, 8 ); i++ ) {\n                    unsigned c = static_cast<unsigned char*>(it->m_alloc.ptr)[i];\n                    formatter << std::hex << std::uppercase << c << ' ';\n                }\n\n                formatter << \"\\n\";\n            }\n            ++it;\n            break;\n        }\n    }\n}\n\n//____________________________________________________________________________//\n\n} // local namespace\n\nvoid\nexception_safety_tester::report_error()\n{\n    activity_guard ag( m_internal_activity );\n\n    unit_test_log << unit_test::log::begin( m_execution_path.back().m_file_name,\n                                            m_execution_path.back().m_line_num )\n                  << log_all_errors;\n\n    wrap_stringstream formatter;\n\n    if( m_invairant_failed )\n        formatter << \"Failed invariant\";\n\n    if( m_memory_in_use.size() != 0 ) {\n        if( m_invairant_failed )\n            formatter << \" and \";\n\n        formatter << static_cast<unsigned int>(m_memory_in_use.size()) << \" memory leak\";\n        if( m_memory_in_use.size() > 1 )\n            formatter << 's';\n    }\n    formatter << \" detected in the execution path \" << m_exec_path_counter << \":\\n\";\n\n    format_execution_path( formatter, m_execution_path.begin(), m_execution_path.end() );\n\n    unit_test_log << const_string( formatter.str() ) << unit_test::log::end();\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************             exception safety test            ************** //\n// ************************************************************************** //\n\nvoid BOOST_TEST_DECL\nexception_safety( callback0<> const& F, const_string test_name )\n{\n    exception_safety_tester est( test_name );\n\n    do {\n        try {\n            F();\n        }\n        catch( exception_safety_tester::unique_exception const& ) {}\n\n    } while( est.next_execution_path() );\n}\n\n//____________________________________________________________________________//\n\n}  // namespace itest\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // non-ancient compiler\n\n#endif // BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/execution_monitor.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  (C) Copyright Beman Dawes and Ullrich Koethe 1995-2001.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : provides execution monitor implementation for all supported\n//  configurations, including Microsoft structured exception based, unix signals\n//  based and special workarounds for borland\n//\n//  Note that when testing requirements or user wishes preclude use of this\n//  file as a separate compilation unit, it may be included as a header file.\n//\n//  Header dependencies are deliberately restricted to reduce coupling to other\n//  boost libraries.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER\n#define BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/detail/workaround.hpp>\n#include <boost/test/execution_monitor.hpp>\n#include <boost/test/debug.hpp>\n\n// Boost\n#include <boost/cstdlib.hpp>    // for exit codes\n#include <boost/config.hpp>     // for workarounds\n#include <boost/exception/get_error_info.hpp> // for get_error_info\n#include <boost/exception/current_exception_cast.hpp> // for current_exception_cast\n\n// STL\n#include <string>               // for std::string\n#include <new>                  // for std::bad_alloc\n#include <typeinfo>             // for std::bad_cast, std::bad_typeid\n#include <exception>            // for std::exception, std::bad_exception\n#include <stdexcept>            // for std exception hierarchy\n#include <cstring>              // for C string API\n#include <cassert>              // for assert\n#include <cstddef>              // for NULL\n#include <cstdio>               // for vsnprintf\n#include <cstdarg>              // for varargs\n\n#ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::strerror; using ::strlen; using ::strncat; }\n#endif\n\n// to use vsnprintf\n#if defined(__SUNPRO_CC) || defined(__SunOS)\n#  include <stdio.h>\n#  include <stdarg.h>\nusing std::va_list;\n#endif\n\n// to use vsnprintf \n#if defined(__QNXNTO__) \n#  include <stdio.h> \n#endif\n\n#if defined(_WIN32) && !defined(BOOST_DISABLE_WIN32) &&                  \\\n    (!defined(__COMO__) && !defined(__MWERKS__) && !defined(__GNUC__) || \\\n     BOOST_WORKAROUND(__MWERKS__, >= 0x3000))\n\n#  define BOOST_SEH_BASED_SIGNAL_HANDLING\n\n#  include <windows.h>\n\n#  if defined(__MWERKS__) || (defined(_MSC_VER) && !defined(UNDER_CE))\n#    include <eh.h>\n#  endif\n\n#  if defined(__BORLANDC__) && __BORLANDC__ >= 0x560 || defined(__MWERKS__)\n#    include <stdint.h>\n#  endif\n\n#  if defined(__BORLANDC__) && __BORLANDC__ < 0x560\n    typedef unsigned uintptr_t;\n#  endif\n\n#  if BOOST_WORKAROUND(_MSC_VER,  < 1300 ) || defined(UNDER_CE)\ntypedef void* uintptr_t;\n#  endif\n\n// for the FP control routines\n#include <float.h>\n\n#ifndef EM_INVALID\n#define EM_INVALID _EM_INVALID\n#endif\n\n#ifndef EM_DENORMAL\n#define EM_DENORMAL _EM_DENORMAL\n#endif\n\n#ifndef EM_ZERODIVIDE\n#define EM_ZERODIVIDE _EM_ZERODIVIDE\n#endif\n\n#ifndef EM_OVERFLOW\n#define EM_OVERFLOW _EM_OVERFLOW\n#endif\n\n#ifndef EM_UNDERFLOW\n#define EM_UNDERFLOW _EM_UNDERFLOW\n#endif\n\n#ifndef MCW_EM\n#define MCW_EM _MCW_EM\n#endif\n\n#  if !defined(NDEBUG) && defined(_MSC_VER) && !defined(UNDER_CE)\n#    include <crtdbg.h>\n#    define BOOST_TEST_CRT_HOOK_TYPE    _CRT_REPORT_HOOK\n#    define BOOST_TEST_CRT_ASSERT       _CRT_ASSERT\n#    define BOOST_TEST_CRT_ERROR        _CRT_ERROR\n#    define BOOST_TEST_CRT_SET_HOOK(H)  _CrtSetReportHook(H)\n#  else\n#    define BOOST_TEST_CRT_HOOK_TYPE    void*\n#    define BOOST_TEST_CRT_ASSERT       2\n#    define BOOST_TEST_CRT_ERROR        1\n#    define BOOST_TEST_CRT_SET_HOOK(H)  (void*)(H)\n#  endif\n\n#  if !BOOST_WORKAROUND(_MSC_VER,  >= 1400 ) || defined(UNDER_CE)\n\ntypedef void* _invalid_parameter_handler;\n\ninline _invalid_parameter_handler\n_set_invalid_parameter_handler( _invalid_parameter_handler arg )\n{\n    return arg;\n}\n\n#  endif\n\n#  if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) || defined(UNDER_CE)\n\nnamespace { void _set_se_translator( void* ) {} }\n\n#  endif\n\n#elif defined(BOOST_HAS_SIGACTION)\n\n#  define BOOST_SIGACTION_BASED_SIGNAL_HANDLING\n\n#  include <unistd.h>\n#  include <signal.h>\n#  include <setjmp.h>\n\n#  if defined(__FreeBSD__)  \n\n#    ifndef SIGPOLL\n#      define SIGPOLL SIGIO\n#    endif\n\n#    if (__FreeBSD_version < 70100)\n\n#      define ILL_ILLADR 0 // ILL_RESAD_FAULT\n#      define ILL_PRVOPC ILL_PRIVIN_FAULT\n#      define ILL_ILLOPN 2 // ILL_RESOP_FAULT\n#      define ILL_COPROC ILL_FPOP_FAULT\n\n#      define BOOST_TEST_LIMITED_SIGNAL_DETAILS\n#      define BOOST_TEST_IGNORE_SIGCHLD\n\n#    endif \n#  endif \n\n#  if !defined(__CYGWIN__) && !defined(__QNXNTO__)\n#   define BOOST_TEST_USE_ALT_STACK\n#  endif\n\n#  if defined(SIGPOLL) && !defined(__CYGWIN__)                              && \\\n      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))  && \\\n      !defined(__NetBSD__)                                                  && \\\n      !defined(__QNXNTO__)\n#    define BOOST_TEST_CATCH_SIGPOLL\n#  endif\n\n#  ifdef BOOST_TEST_USE_ALT_STACK\n#    define BOOST_TEST_ALT_STACK_SIZE SIGSTKSZ\n#  endif\n\n#else\n\n#  define BOOST_NO_SIGNAL_HANDLING\n\n#endif\n\n#ifndef UNDER_CE\n#include <errno.h>\n#endif\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\n// ************************************************************************** //\n// **************                  report_error                ************** //\n// ************************************************************************** //\n\nnamespace detail {\n\n#ifdef __BORLANDC__\n#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) std::vsnprintf( (a1), (a2), (a3), (a4) )\n#elif BOOST_WORKAROUND(_MSC_VER, <= 1310) || \\\n      BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3000)) || \\\n      defined(UNDER_CE)\n#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) _vsnprintf( (a1), (a2), (a3), (a4) )\n#else\n#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) vsnprintf( (a1), (a2), (a3), (a4) )\n#endif\n\ntemplate <typename ErrorInfo>\ntypename ErrorInfo::value_type\nextract( boost::exception const* ex )\n{\n    if( !ex )\n        return 0;\n\n    typename ErrorInfo::value_type const * val = boost::get_error_info<ErrorInfo>( *ex );\n\n    return val ? *val : 0;\n}\n\n//____________________________________________________________________________//\n\nstatic void\nreport_error( execution_exception::error_code ec, boost::exception const* be, char const* format, va_list* args )\n{\n    static const int REPORT_ERROR_BUFFER_SIZE = 512;\n    static char buf[REPORT_ERROR_BUFFER_SIZE];\n\n    BOOST_TEST_VSNPRINTF( buf, sizeof(buf)-1, format, *args ); \n    buf[sizeof(buf)-1] = 0;\n\n    va_end( *args );\n\n    throw execution_exception( ec, buf, execution_exception::location( extract<throw_file>( be ), \n                                                                       extract<throw_line>( be ),\n                                                                       extract<throw_function>( be ) ) );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nreport_error( execution_exception::error_code ec, char const* format, ... )\n{\n    va_list args;\n    va_start( args, format );\n\n    report_error( ec, 0, format, &args );\n}\n\n//____________________________________________________________________________//\n\nstatic void\nreport_error( execution_exception::error_code ec, boost::exception const* be, char const* format, ... )\n{\n    va_list args;\n    va_start( args, format );\n\n    report_error( ec, be, format, &args );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename Tr,typename Functor>\ninline int\ndo_invoke( Tr const& tr, Functor const& F )\n{\n    return tr ? (*tr)( F ) : F();\n}\n\n//____________________________________________________________________________//\n\n} // namespace detail\n\n#if defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING)\n\n// ************************************************************************** //\n// **************       Sigaction based signal handling        ************** //\n// ************************************************************************** //\n\nnamespace detail {\n\n// ************************************************************************** //\n// **************    boost::detail::system_signal_exception    ************** //\n// ************************************************************************** //\n\nclass system_signal_exception {\npublic:\n    // Constructor\n    system_signal_exception()\n    : m_sig_info( 0 )\n    , m_context( 0 )\n    {}\n\n    // Access methods\n    void        operator()( siginfo_t* i, void* c )\n    {\n        m_sig_info  = i;\n        m_context   = c;\n    }\n    void        report() const;\n\nprivate:\n    // Data members\n    siginfo_t*  m_sig_info; // system signal detailed info\n    void*       m_context;  // signal context\n};\n\n//____________________________________________________________________________//\n\nvoid\nsystem_signal_exception::report() const\n{\n    if( !m_sig_info )\n        return; // no error actually occur?\n\n    switch( m_sig_info->si_code ) {\n    case SI_USER:\n        report_error( execution_exception::system_error,\n                      \"signal: generated by kill() (or family); uid=%d; pid=%d\",\n                      (int)m_sig_info->si_uid, (int)m_sig_info->si_pid );\n        break;\n    case SI_QUEUE:\n        report_error( execution_exception::system_error,\n                      \"signal: sent by sigqueue()\" );\n        break;\n    case SI_TIMER:\n        report_error( execution_exception::system_error,\n                      \"signal: the expiration of a timer set by timer_settimer()\" );\n        break;\n    case SI_ASYNCIO:\n        report_error( execution_exception::system_error,\n                      \"signal: generated by the completion of an asynchronous I/O request\" );\n        break;\n    case SI_MESGQ:\n        report_error( execution_exception::system_error,\n                      \"signal: generated by the the arrival of a message on an empty message queue\" );\n        break;\n    default:\n        break;\n    }\n\n    switch( m_sig_info->si_signo ) {\n    case SIGILL:\n        switch( m_sig_info->si_code ) {\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n        case ILL_ILLOPC:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: illegal opcode; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_ILLTRP:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: illegal trap; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_PRVREG:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: privileged register; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_BADSTK:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: internal stack error; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n#endif\n        case ILL_ILLOPN:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: illegal operand; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_ILLADR:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: illegal addressing mode; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_PRVOPC:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: privileged opcode; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case ILL_COPROC:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: co-processor error; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        default: \n            report_error( execution_exception::system_fatal_error, \n                          \"signal: SIGILL, si_code: %d (illegal instruction; address of failing instruction: 0x%08lx)\", \n                          m_sig_info->si_addr, m_sig_info->si_code ); \n            break;\n        }\n        break;\n\n    case SIGFPE:\n        switch( m_sig_info->si_code ) {\n        case FPE_INTDIV:\n            report_error( execution_exception::system_error,\n                          \"signal: integer divide by zero; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_INTOVF:\n            report_error( execution_exception::system_error,\n                          \"signal: integer overflow; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTDIV:\n            report_error( execution_exception::system_error,\n                          \"signal: floating point divide by zero; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTOVF:\n            report_error( execution_exception::system_error,\n                          \"signal: floating point overflow; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTUND:\n            report_error( execution_exception::system_error,\n                          \"signal: floating point underflow; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTRES:\n            report_error( execution_exception::system_error,\n                          \"signal: floating point inexact result; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTINV:\n            report_error( execution_exception::system_error,\n                          \"signal: invalid floating point operation; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        case FPE_FLTSUB:\n            report_error( execution_exception::system_error,\n                          \"signal: subscript out of range; address of failing instruction: 0x%08lx\",\n                          m_sig_info->si_addr );\n            break;\n        default:\n            report_error( execution_exception::system_error,\n                          \"signal: SIGFPE, si_code: %d (errnoneous arithmetic operations; address of failing instruction: 0x%08lx)\",\n                          m_sig_info->si_addr, m_sig_info->si_code );\n            break;\n        }\n        break;\n\n    case SIGSEGV:\n        switch( m_sig_info->si_code ) {\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n        case SEGV_MAPERR:\n            report_error( execution_exception::system_fatal_error,\n                          \"memory access violation at address: 0x%08lx: no mapping at fault address\",\n                          m_sig_info->si_addr );\n            break;\n        case SEGV_ACCERR:\n            report_error( execution_exception::system_fatal_error,\n                          \"memory access violation at address: 0x%08lx: invalid permissions\",\n                          m_sig_info->si_addr );\n            break;\n#endif\n        default:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)\",\n                          m_sig_info->si_addr, m_sig_info->si_code );\n            break;\n        }\n        break;\n\n    case SIGBUS:\n        switch( m_sig_info->si_code ) {\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n        case BUS_ADRALN:\n            report_error( execution_exception::system_fatal_error,\n                          \"memory access violation at address: 0x%08lx: invalid address alignment\",\n                          m_sig_info->si_addr );\n            break;\n        case BUS_ADRERR:\n            report_error( execution_exception::system_fatal_error,\n                          \"memory access violation at address: 0x%08lx: non-existent physical address\",\n                          m_sig_info->si_addr );\n            break;\n        case BUS_OBJERR:\n            report_error( execution_exception::system_fatal_error,\n                          \"memory access violation at address: 0x%08lx: object specific hardware error\",\n                          m_sig_info->si_addr );\n            break;\n#endif\n        default:\n            report_error( execution_exception::system_fatal_error,\n                          \"signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)\",\n                          m_sig_info->si_addr, m_sig_info->si_code );\n            break;\n        }\n        break;\n\n    case SIGCHLD:\n        switch( m_sig_info->si_code ) {\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n        case CLD_EXITED:\n            report_error( execution_exception::system_error,\n                          \"child has exited; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n        case CLD_KILLED:\n            report_error( execution_exception::system_error,\n                          \"child was killed; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n        case CLD_DUMPED:\n            report_error( execution_exception::system_error,\n                          \"child terminated abnormally; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n        case CLD_TRAPPED:\n            report_error( execution_exception::system_error,\n                          \"traced child has trapped; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n        case CLD_STOPPED:\n            report_error( execution_exception::system_error,\n                          \"child has stopped; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n        case CLD_CONTINUED:\n            report_error( execution_exception::system_error,\n                          \"stopped child had continued; pid: %d; uid: %d; exit value: %d\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status );\n            break;\n#endif\n        default:\n            report_error( execution_exception::system_error,\n                          \"signal: SIGCHLD, si_code: %d (child process has terminated; pid: %d; uid: %d; exit value: %d)\",\n                          (int)m_sig_info->si_pid, (int)m_sig_info->si_uid, (int)m_sig_info->si_status, m_sig_info->si_code );\n            break;\n        }\n        break;\n\n#if defined(BOOST_TEST_CATCH_SIGPOLL)\n\n    case SIGPOLL:\n        switch( m_sig_info->si_code ) {\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n        case POLL_IN:\n            report_error( execution_exception::system_error,\n                          \"data input available; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n        case POLL_OUT:\n            report_error( execution_exception::system_error,\n                          \"output buffers available; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n        case POLL_MSG:\n            report_error( execution_exception::system_error,\n                          \"input message available; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n        case POLL_ERR:\n            report_error( execution_exception::system_error,\n                          \"i/o error; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n        case POLL_PRI:\n            report_error( execution_exception::system_error,\n                          \"high priority input available; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n#if defined(POLL_ERR) && defined(POLL_HUP) && (POLL_ERR - POLL_HUP)\n        case POLL_HUP:\n            report_error( execution_exception::system_error,\n                          \"device disconnected; band event %d\",\n                          (int)m_sig_info->si_band );\n            break;\n#endif\n#endif\n        default: \n            report_error( execution_exception::system_error, \n                          \"signal: SIGPOLL, si_code: %d (asynchronous I/O event occured; band event %d)\", \n                          (int)m_sig_info->si_band, m_sig_info->si_code ); \n            break; \n        }\n        break;\n\n#endif\n\n    case SIGABRT:\n        report_error( execution_exception::system_error,\n                      \"signal: SIGABRT (application abort requested)\" );\n        break;\n\n    case SIGALRM:\n        report_error( execution_exception::timeout_error,\n                      \"signal: SIGALRM (timeout while executing function)\" );\n        break;\n\n    default:\n        report_error( execution_exception::system_error, \"unrecognized signal\" );\n    }\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************         boost::detail::signal_action         ************** //\n// ************************************************************************** //\n\n// Forward declaration\nextern \"C\" {\nstatic void execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context );\nstatic void execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context );\n}\n\nclass signal_action {\n    typedef struct sigaction* sigaction_ptr;\npublic:\n    //Constructor\n    signal_action();\n    signal_action( int sig, bool install, bool attach_dbg, char* alt_stack );\n    ~signal_action();\n\nprivate:\n    // Data members\n    int                 m_sig;\n    bool                m_installed;\n    struct sigaction    m_new_action;\n    struct sigaction    m_old_action;\n};\n\n//____________________________________________________________________________//\n\nsignal_action::signal_action()\n: m_installed( false )\n{}\n\n//____________________________________________________________________________//\n\nsignal_action::signal_action( int sig, bool install, bool attach_dbg, char* alt_stack )\n: m_sig( sig )\n, m_installed( install )\n{\n    if( !install )\n        return;\n\n    std::memset( &m_new_action, 0, sizeof(struct sigaction) );\n\n    BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig , sigaction_ptr(), &m_new_action ) != -1 );\n\n    if( m_new_action.sa_sigaction || m_new_action.sa_handler ) {\n        m_installed = false;\n        return;\n    }\n\n    m_new_action.sa_flags     |= SA_SIGINFO;\n    m_new_action.sa_sigaction  = attach_dbg ? &execution_monitor_attaching_signal_handler\n                                            : &execution_monitor_jumping_signal_handler;\n    BOOST_TEST_SYS_ASSERT( sigemptyset( &m_new_action.sa_mask ) != -1 );\n\n#ifdef BOOST_TEST_USE_ALT_STACK\n    if( alt_stack )\n        m_new_action.sa_flags |= SA_ONSTACK;\n#endif\n\n    BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig, &m_new_action, &m_old_action ) != -1 );\n}\n\n//____________________________________________________________________________//\n\nsignal_action::~signal_action()\n{\n    if( m_installed )\n        ::sigaction( m_sig, &m_old_action , sigaction_ptr() );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************        boost::detail::signal_handler         ************** //\n// ************************************************************************** //\n\nclass signal_handler {\npublic:\n    // Constructor\n    explicit signal_handler( bool catch_system_errors, int timeout, bool attach_dbg, char* alt_stack );\n\n    // Destructor\n    ~signal_handler();\n\n    // access methods\n    static sigjmp_buf&      jump_buffer()\n    {\n        assert( !!s_active_handler );\n\n        return s_active_handler->m_sigjmp_buf;\n    }\n\n    static system_signal_exception&  sys_sig()\n    {\n        assert( !!s_active_handler );\n\n        return s_active_handler->m_sys_sig;\n    }\n\nprivate:\n    // Data members\n    signal_handler*         m_prev_handler;\n    int                     m_timeout;\n\n    signal_action           m_ILL_action;\n    signal_action           m_FPE_action;\n    signal_action           m_SEGV_action;\n    signal_action           m_BUS_action;\n    signal_action           m_CHLD_action;\n    signal_action           m_POLL_action;\n    signal_action           m_ABRT_action;\n    signal_action           m_ALRM_action;\n\n    sigjmp_buf              m_sigjmp_buf;\n    system_signal_exception m_sys_sig;\n\n    static signal_handler*  s_active_handler;\n};\n\n// !! need to be placed in thread specific storage\ntypedef signal_handler* signal_handler_ptr;\nsignal_handler* signal_handler::s_active_handler = signal_handler_ptr();\n\n//____________________________________________________________________________//\n\nsignal_handler::signal_handler( bool catch_system_errors, int timeout, bool attach_dbg, char* alt_stack )\n: m_prev_handler( s_active_handler )\n, m_timeout( timeout )\n, m_ILL_action ( SIGILL , catch_system_errors, attach_dbg, alt_stack )\n, m_FPE_action ( SIGFPE , catch_system_errors, attach_dbg, alt_stack )\n, m_SEGV_action( SIGSEGV, catch_system_errors, attach_dbg, alt_stack )\n, m_BUS_action ( SIGBUS , catch_system_errors, attach_dbg, alt_stack )\n#ifndef BOOST_TEST_IGNORE_SIGCHLD\n, m_CHLD_action( SIGCHLD, catch_system_errors, attach_dbg, alt_stack )\n#endif\n#ifdef BOOST_TEST_CATCH_SIGPOLL\n, m_POLL_action( SIGPOLL, catch_system_errors, attach_dbg, alt_stack )\n#endif\n, m_ABRT_action( SIGABRT, catch_system_errors, attach_dbg, alt_stack )\n, m_ALRM_action( SIGALRM, timeout > 0        , attach_dbg, alt_stack )\n{\n    s_active_handler = this;\n\n    if( m_timeout > 0 ) {\n        ::alarm( 0 );\n        ::alarm( timeout );\n    }\n\n#ifdef BOOST_TEST_USE_ALT_STACK\n    if( alt_stack ) {\n        stack_t sigstk;\n        std::memset( &sigstk, 0, sizeof(stack_t) );\n\n        BOOST_TEST_SYS_ASSERT( ::sigaltstack( 0, &sigstk ) != -1 );\n\n        if( sigstk.ss_flags & SS_DISABLE ) {\n            sigstk.ss_sp    = alt_stack;\n            sigstk.ss_size  = BOOST_TEST_ALT_STACK_SIZE;\n            sigstk.ss_flags = 0;\n            BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 );\n        }\n    }\n#endif\n}\n\n//____________________________________________________________________________//\n\nsignal_handler::~signal_handler()\n{\n    assert( s_active_handler == this );\n\n    if( m_timeout > 0 )\n        ::alarm( 0 );\n\n#ifdef BOOST_TEST_USE_ALT_STACK\n#ifdef __GNUC__\n    // We shouldn't need to explicitly initialize all the members here,\n    // but gcc warns if we don't, so add initializers for each of the\n    // members specified in the POSIX std:\n    stack_t sigstk = { 0, 0, 0 };\n#else\n    stack_t sigstk = { };\n#endif\n\n    sigstk.ss_size  = MINSIGSTKSZ;\n    sigstk.ss_flags = SS_DISABLE;\n    BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 );\n#endif\n\n    s_active_handler = m_prev_handler;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************       execution_monitor_signal_handler       ************** //\n// ************************************************************************** //\n\nextern \"C\" {\n\nstatic bool ignore_sigchild( siginfo_t* info )\n{\n    return info->si_signo == SIGCHLD\n#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS\n            && info->si_code == CLD_EXITED \n#endif\n#ifdef BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE\n            ;\n#else\n            && (int)info->si_status == 0;\n#endif\n}\n\n//____________________________________________________________________________//\n\nstatic void execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context )\n{\n    if( ignore_sigchild( info ) )\n        return;\n\n    signal_handler::sys_sig()( info, context );\n\n    siglongjmp( signal_handler::jump_buffer(), sig );\n}\n\n//____________________________________________________________________________//\n\nstatic void execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context )\n{\n    if( ignore_sigchild( info ) )\n        return;\n\n    if( !debug::attach_debugger( false ) )\n        execution_monitor_jumping_signal_handler( sig, info, context );\n\n    // debugger attached; it will handle the signal\n    BOOST_TEST_SYS_ASSERT( ::signal( sig, SIG_DFL ) != SIG_ERR );\n}\n\n//____________________________________________________________________________//\n\n}\n\n} // namespace detail\n\n// ************************************************************************** //\n// **************        execution_monitor::catch_signals      ************** //\n// ************************************************************************** //\n\nint\nexecution_monitor::catch_signals( unit_test::callback0<int> const& F )\n{\n    using namespace detail;\n\n#if defined(__CYGWIN__)\n    p_catch_system_errors.value = false;\n#endif\n\n#ifdef BOOST_TEST_USE_ALT_STACK\n    if( !!p_use_alt_stack && !m_alt_stack )\n        m_alt_stack.reset( new char[BOOST_TEST_ALT_STACK_SIZE] );\n#else\n    p_use_alt_stack.value = false;\n#endif\n\n    signal_handler local_signal_handler( p_catch_system_errors, p_timeout, p_auto_start_dbg, \n                                         !p_use_alt_stack ? 0 : m_alt_stack.get() );\n\n    if( !sigsetjmp( signal_handler::jump_buffer(), 1 ) )\n        return detail::do_invoke( m_custom_translators , F );\n    else\n        throw local_signal_handler.sys_sig();\n}\n\n//____________________________________________________________________________//\n\n#elif defined(BOOST_SEH_BASED_SIGNAL_HANDLING)\n\n// ************************************************************************** //\n// **************   Microsoft structured exception handling    ************** //\n// ************************************************************************** //\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564))\nnamespace { void _set_se_translator( void* ) {} }\n#endif\n\nnamespace detail {\n\n// ************************************************************************** //\n// **************    boost::detail::system_signal_exception    ************** //\n// ************************************************************************** //\n\nclass system_signal_exception {\npublic:\n    // Constructor\n    explicit            system_signal_exception( execution_monitor* em )\n    : m_em( em )\n    , m_se_id( 0 )\n    , m_fault_address( 0 )\n    , m_dir( false )\n    {}\n\n    void                report() const;\n    int                 operator()( unsigned int id, _EXCEPTION_POINTERS* exps );\n\nprivate:\n    // Data members\n    execution_monitor*  m_em;\n\n    unsigned int        m_se_id;\n    void*               m_fault_address;\n    bool                m_dir;\n};\n\nstatic void\nseh_catch_preventer( unsigned int /* id */, _EXCEPTION_POINTERS* /* exps */ )\n{\n    throw;\n}\n\n//____________________________________________________________________________//\n\nint\nsystem_signal_exception::operator()( unsigned int id, _EXCEPTION_POINTERS* exps )\n{\n    const unsigned int MSFT_CPP_EXCEPT = 0xE06d7363; // EMSC\n\n    if( !m_em->p_catch_system_errors || (id == MSFT_CPP_EXCEPT) )\n        return EXCEPTION_CONTINUE_SEARCH;\n\n    if( !!m_em->p_auto_start_dbg && debug::attach_debugger( false ) ) {\n        m_em->p_catch_system_errors.value = false;\n        _set_se_translator( &seh_catch_preventer );\n\n        return EXCEPTION_CONTINUE_EXECUTION;\n    }\n\n    m_se_id = id;\n    if( m_se_id == EXCEPTION_ACCESS_VIOLATION && exps->ExceptionRecord->NumberParameters == 2 ) {\n        m_fault_address = (void*)exps->ExceptionRecord->ExceptionInformation[1];\n        m_dir           = exps->ExceptionRecord->ExceptionInformation[0] == 0;\n    }\n\n    return EXCEPTION_EXECUTE_HANDLER;\n}\n\n//____________________________________________________________________________//\n\nvoid\nsystem_signal_exception::report() const\n{\n    switch( m_se_id ) {\n    // cases classified as system_fatal_error\n    case EXCEPTION_ACCESS_VIOLATION: {\n        if( !m_fault_address )\n            detail::report_error( execution_exception::system_fatal_error, \"memory access violation\" );\n        else\n            detail::report_error(\n                execution_exception::system_fatal_error,\n                    \"memory access violation occurred at address 0x%08lx, while attempting to %s\",\n                    m_fault_address,\n                    m_dir ? \" read inaccessible data\"\n                          : \" write to an inaccessible (or protected) address\"\n                    );\n        break;\n    }\n\n    case EXCEPTION_ILLEGAL_INSTRUCTION:\n        detail::report_error( execution_exception::system_fatal_error, \"illegal instruction\" );\n        break;\n\n    case EXCEPTION_PRIV_INSTRUCTION:\n        detail::report_error( execution_exception::system_fatal_error, \"tried to execute an instruction whose operation is not allowed in the current machine mode\" );\n        break;\n\n    case EXCEPTION_IN_PAGE_ERROR:\n        detail::report_error( execution_exception::system_fatal_error, \"access to a memory page that is not present\" );\n        break;\n\n    case EXCEPTION_STACK_OVERFLOW:\n        detail::report_error( execution_exception::system_fatal_error, \"stack overflow\" );\n        break;\n\n    case EXCEPTION_NONCONTINUABLE_EXCEPTION:\n        detail::report_error( execution_exception::system_fatal_error, \"tried to continue execution after a non continuable exception occurred\" );\n        break;\n\n    // cases classified as (non-fatal) system_trap\n    case EXCEPTION_DATATYPE_MISALIGNMENT:\n        detail::report_error( execution_exception::system_error, \"data misalignment\" );\n        break;\n\n    case EXCEPTION_INT_DIVIDE_BY_ZERO:\n        detail::report_error( execution_exception::system_error, \"integer divide by zero\" );\n        break;\n\n    case EXCEPTION_INT_OVERFLOW:\n        detail::report_error( execution_exception::system_error, \"integer overflow\" );\n        break;\n\n    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:\n        detail::report_error( execution_exception::system_error, \"array bounds exceeded\" );\n        break;\n\n    case EXCEPTION_FLT_DIVIDE_BY_ZERO:\n        detail::report_error( execution_exception::system_error, \"floating point divide by zero\" );\n        break;\n\n    case EXCEPTION_FLT_STACK_CHECK:\n        detail::report_error( execution_exception::system_error,\n                              \"stack overflowed or underflowed as the result of a floating-point operation\" );\n        break;\n\n    case EXCEPTION_FLT_DENORMAL_OPERAND:\n        detail::report_error( execution_exception::system_error,\n                              \"operand of floating point operation is denormal\" );\n        break;\n\n# if 0 // !! ?? \n    case EXCEPTION_FLT_INEXACT_RESULT:\n        detail::report_error( execution_exception::system_error,\n                              \"result of a floating-point operation cannot be represented exactly\" );\n        break;\n#endif\n\n    case EXCEPTION_FLT_OVERFLOW:\n        detail::report_error( execution_exception::system_error,\n                              \"exponent of a floating-point operation is greater than the magnitude allowed by the corresponding type\" );\n        break;\n\n    case EXCEPTION_FLT_UNDERFLOW:\n        detail::report_error( execution_exception::system_error,\n                              \"exponent of a floating-point operation is less than the magnitude allowed by the corresponding type\" );\n        break;\n\n    case EXCEPTION_FLT_INVALID_OPERATION:\n        detail::report_error( execution_exception::system_error, \"floating point error\" );\n        break;\n\n    case EXCEPTION_BREAKPOINT:\n        detail::report_error( execution_exception::system_error, \"breakpoint encountered\" );\n        break;\n\n    default:\n        detail::report_error( execution_exception::system_error, \"unrecognized exception. Id: 0x%08lx\", m_se_id );\n        break;\n    }\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************          assert_reporting_function           ************** //\n// ************************************************************************** //\n\nint BOOST_TEST_CALL_DECL\nassert_reporting_function( int reportType, char* userMessage, int* )\n{\n    switch( reportType ) {\n    case BOOST_TEST_CRT_ASSERT:\n        detail::report_error( execution_exception::user_error, userMessage );\n\n        return 1; // return value and retVal are not important since we never reach this line\n    case BOOST_TEST_CRT_ERROR:\n        detail::report_error( execution_exception::system_error, userMessage );\n\n        return 1; // return value and retVal are not important since we never reach this line\n    default:\n        return 0; // use usual reporting method\n    }\n} // assert_reporting_function\n\n//____________________________________________________________________________//\n\nvoid BOOST_TEST_CALL_DECL\ninvalid_param_handler( wchar_t const* /* expr */, \n                       wchar_t const* /* func */, \n                       wchar_t const* /* file */, \n                       unsigned int   /* line */,\n                       uintptr_t      /* reserved */)\n{\n    detail::report_error( execution_exception::user_error, \n                          \"Invalid parameter detected by C runtime library\" );\n}\n\n//____________________________________________________________________________//\n\nvoid BOOST_TEST_CALL_DECL\nswitch_fp_exceptions( bool on_off )\n{\n    if( !on_off )\n        _clearfp();\n\n    int cw = ::_controlfp( 0, 0 );\n\n    int exceptions_mask = EM_INVALID|EM_DENORMAL|EM_ZERODIVIDE|EM_OVERFLOW|EM_UNDERFLOW;\n\n    if( on_off )\n        cw &= ~exceptions_mask; // Set the exception masks on, turn exceptions off\n    else\n        cw |= exceptions_mask;  // Set the exception masks off, turn exceptions on\n\n    if( on_off )\n        _clearfp();\n        \n    // Set the control word\n    ::_controlfp( cw, MCW_EM );\n}\n\n//____________________________________________________________________________//\n\n} // namespace detail\n\n// ************************************************************************** //\n// **************        execution_monitor::catch_signals      ************** //\n// ************************************************************************** //\n\nint\nexecution_monitor::catch_signals( unit_test::callback0<int> const& F )\n{\n    _invalid_parameter_handler old_iph = _invalid_parameter_handler();\n    BOOST_TEST_CRT_HOOK_TYPE old_crt_hook = 0;\n\n    if( !p_catch_system_errors )\n        _set_se_translator( &detail::seh_catch_preventer );\n    else {\n        if( !!p_detect_fp_exceptions )\n            detail::switch_fp_exceptions( true );\n\n       old_crt_hook = BOOST_TEST_CRT_SET_HOOK( &detail::assert_reporting_function );\n\n       old_iph = _set_invalid_parameter_handler( \n           reinterpret_cast<_invalid_parameter_handler>( &detail::invalid_param_handler ) );\n    }\n\n    detail::system_signal_exception SSE( this );\n    \n    int ret_val = 0;\n\n    __try {\n        __try {\n            ret_val = detail::do_invoke( m_custom_translators, F );\n        }\n        __except( SSE( GetExceptionCode(), GetExceptionInformation() ) ) {\n            throw SSE;\n        }\n    }\n    __finally {\n        if( !!p_catch_system_errors ) {\n            if( !!p_detect_fp_exceptions )\n                detail::switch_fp_exceptions( false );\n\n            BOOST_TEST_CRT_SET_HOOK( old_crt_hook );\n\n           _set_invalid_parameter_handler( old_iph );\n        }\n    }\n\n    return ret_val;\n}\n\n//____________________________________________________________________________//\n\n#else  // default signal handler\n\nnamespace detail {\n\nclass system_signal_exception {\npublic:\n    void   report() const {}\n};\n\n} // namespace detail\n\nint\nexecution_monitor::catch_signals( unit_test::callback0<int> const& F )\n{\n    return detail::do_invoke( m_custom_translators , F );\n}\n\n//____________________________________________________________________________//\n\n#endif  // choose signal handler\n\n// ************************************************************************** //\n// **************          execution_monitor::execute          ************** //\n// ************************************************************************** //\n\nint\nexecution_monitor::execute( unit_test::callback0<int> const& F )\n{\n    if( debug::under_debugger() )\n        p_catch_system_errors.value = false;\n\n    try {\n        return catch_signals( F );\n    }\n\n    //  Catch-clause reference arguments are a bit different from function\n    //  arguments (ISO 15.3 paragraphs 18 & 19).  Apparently const isn't\n    //  required.  Programmers ask for const anyhow, so we supply it.  That's\n    //  easier than answering questions about non-const usage.\n\n    catch( char const* ex )\n      { detail::report_error( execution_exception::cpp_exception_error,\n                              \"C string: %s\", ex ); }\n    catch( std::string const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              \"std::string: %s\", ex.c_str() ); }\n\n    //  std:: exceptions\n\n    catch( std::bad_alloc const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_alloc: %s\", ex.what() ); }\n\n#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)\n    catch( std::bad_cast const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_cast\" ); }\n    catch( std::bad_typeid const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_typeid\" ); }\n#else\n    catch( std::bad_cast const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_cast: %s\", ex.what() ); }\n    catch( std::bad_typeid const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_typeid: %s\", ex.what() ); }\n#endif\n\n    catch( std::bad_exception const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::bad_exception: %s\", ex.what() ); }\n    catch( std::domain_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::domain_error: %s\", ex.what() ); }\n    catch( std::invalid_argument const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::invalid_argument: %s\", ex.what() ); }\n    catch( std::length_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::length_error: %s\", ex.what() ); }\n    catch( std::out_of_range const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::out_of_range: %s\", ex.what() ); }\n    catch( std::range_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::range_error: %s\", ex.what() ); }\n    catch( std::overflow_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::overflow_error: %s\", ex.what() ); }\n    catch( std::underflow_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::underflow_error: %s\", ex.what() ); }\n    catch( std::logic_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::logic_error: %s\", ex.what() ); }\n    catch( std::runtime_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::runtime_error: %s\", ex.what() ); }\n    catch( std::exception const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              current_exception_cast<boost::exception const>(),\n                              \"std::exception: %s\", ex.what() ); }\n\n    catch( boost::exception const& ex )\n    { detail::report_error( execution_exception::cpp_exception_error, \n                            &ex,\n                            \"unknown boost::exception\" ); }\n\n    // system errors\n    catch( system_error const& ex )\n      { detail::report_error( execution_exception::cpp_exception_error, \n                              \"system_error produced by: %s: %s\", ex.p_failed_exp.get(), std::strerror( ex.p_errno ) ); }\n    catch( detail::system_signal_exception const& ex )\n      { ex.report(); }\n\n    // not an error\n    catch( execution_aborted const& )\n      { return 0; }\n\n    // just forward\n    catch( execution_exception const& )\n      { throw; }\n\n    // unknown error\n    catch( ... )\n      { detail::report_error( execution_exception::cpp_exception_error, \"unknown type\" ); }\n\n    return 0;  // never reached; supplied to quiet compiler warnings\n} // execute\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  system_error                ************** //\n// ************************************************************************** //\n\nsystem_error::system_error( char const* exp )\n#ifdef UNDER_CE\n: p_errno( GetLastError() )\n#else\n: p_errno( errno )\n#endif\n, p_failed_exp( exp )\n{}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************              execution_exception             ************** //\n// ************************************************************************** //\n\nexecution_exception::execution_exception( error_code ec_, const_string what_msg_, location const& location_ )\n: m_error_code( ec_ )\n, m_what( what_msg_.empty() ? BOOST_TEST_L( \"uncaught exception, system error or abort requested\" ) : what_msg_ )\n, m_location( location_ )\n{}\n\n//____________________________________________________________________________//\n\nexecution_exception::location::location( char const* file_name, size_t line_num, char const* func )\n: m_file_name( file_name ? file_name : \"unknown location\" )\n, m_line_num( line_num )\n, m_function( func )\n{}\n\n//____________________________________________________________________________//\n\n} // namespace boost\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/framework.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57991 $\n//\n//  Description : implements framework API - main driver for the test\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FRAMEWORK_IPP_021005GER\n#define BOOST_TEST_FRAMEWORK_IPP_021005GER\n\n// Boost.Test\n#include <boost/test/framework.hpp>\n#include <boost/test/execution_monitor.hpp>\n#include <boost/test/debug.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/unit_test_monitor.hpp>\n#include <boost/test/test_observer.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/progress_monitor.hpp>\n#include <boost/test/results_reporter.hpp>\n#include <boost/test/test_tools.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n\n#include <boost/test/utils/foreach.hpp>\n\n// Boost\n#include <boost/timer.hpp>\n\n// STL\n#include <map>\n#include <set>\n#include <cstdlib>\n#include <ctime>\n\n#ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::time; using ::srand; }\n#endif\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************            test_start calls wrapper          ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nstruct test_start_caller {\n    test_start_caller( test_observer* to, counter_t tc_amount )\n    : m_to( to )\n    , m_tc_amount( tc_amount )\n    {}\n\n    int operator()()\n    {\n        m_to->test_start( m_tc_amount );\n        return 0;\n    }\n\nprivate:\n    // Data members\n    test_observer*  m_to;\n    counter_t       m_tc_amount;\n};\n\n//____________________________________________________________________________//\n\nstruct test_init_caller {\n    explicit    test_init_caller( init_unit_test_func init_func ) \n    : m_init_func( init_func )\n    {}\n    int         operator()()\n    {\n#ifdef BOOST_TEST_ALTERNATIVE_INIT_API\n        if( !(*m_init_func)() )\n            throw std::runtime_error( \"test module initialization failed\" );\n#else\n        test_suite*  manual_test_units = (*m_init_func)( framework::master_test_suite().argc, framework::master_test_suite().argv );\n\n        if( manual_test_units )\n            framework::master_test_suite().add( manual_test_units );\n#endif\n        return 0;\n    }\n\n    // Data members\n    init_unit_test_func m_init_func;\n};\n\n}\n\n// ************************************************************************** //\n// **************                   framework                  ************** //\n// ************************************************************************** //\n\nclass framework_impl : public test_tree_visitor {\npublic:\n    framework_impl()\n    : m_master_test_suite( 0 )\n    , m_curr_test_case( INV_TEST_UNIT_ID )\n    , m_next_test_case_id( MIN_TEST_CASE_ID )\n    , m_next_test_suite_id( MIN_TEST_SUITE_ID )\n    , m_is_initialized( false )\n    , m_test_in_progress( false )\n    {}\n\n    ~framework_impl() { clear(); }\n\n    void            clear()\n    {\n        while( !m_test_units.empty() ) {\n            test_unit_store::value_type const& tu     = *m_test_units.begin();\n            test_unit*                         tu_ptr = tu.second;\n\n            // the delete will erase this element from map\n            if( ut_detail::test_id_2_unit_type( tu.second->p_id ) == tut_suite )\n                delete  (test_suite const*)tu_ptr;\n            else\n                delete  (test_case const*)tu_ptr;\n        }\n    }\n\n    void            set_tu_id( test_unit& tu, test_unit_id id ) { tu.p_id.value = id; }\n\n    // test_tree_visitor interface implementation\n    void            visit( test_case const& tc )\n    {\n        if( !tc.check_dependencies() ) {\n            BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n                to->test_unit_skipped( tc );\n\n            return;\n        }\n\n        BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n            to->test_unit_start( tc );\n\n        boost::timer tc_timer;\n        test_unit_id bkup = m_curr_test_case;\n        m_curr_test_case = tc.p_id;\n        unit_test_monitor_t::error_level run_result = unit_test_monitor.execute_and_translate( tc );\n\n        unsigned long elapsed = static_cast<unsigned long>( tc_timer.elapsed() * 1e6 );\n\n        if( unit_test_monitor.is_critical_error( run_result ) ) {\n            BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n                to->test_aborted();\n        }\n\n        BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n            to->test_unit_finish( tc, elapsed );\n\n        m_curr_test_case = bkup;\n\n        if( unit_test_monitor.is_critical_error( run_result ) )\n            throw test_being_aborted();\n    }\n\n    bool            test_suite_start( test_suite const& ts )\n    {\n        if( !ts.check_dependencies() ) {\n            BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n                to->test_unit_skipped( ts );\n\n            return false;\n        }\n\n        BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n            to->test_unit_start( ts );\n\n        return true;\n    }\n\n    void            test_suite_finish( test_suite const& ts )\n    {\n        BOOST_TEST_FOREACH( test_observer*, to, m_observers )\n            to->test_unit_finish( ts, 0 );\n    }\n\n    //////////////////////////////////////////////////////////////////\n    struct priority_order {\n        bool operator()( test_observer* lhs, test_observer* rhs ) const\n        {\n            return (lhs->priority() < rhs->priority()) || ((lhs->priority() == rhs->priority()) && (lhs < rhs));\n        }\n    };\n\n    typedef std::map<test_unit_id,test_unit*>       test_unit_store;\n    typedef std::set<test_observer*,priority_order> observer_store;\n\n    master_test_suite_t* m_master_test_suite;\n    test_unit_id    m_curr_test_case;\n    test_unit_store m_test_units;\n\n    test_unit_id    m_next_test_case_id;\n    test_unit_id    m_next_test_suite_id;\n\n    bool            m_is_initialized;\n    bool            m_test_in_progress;\n\n    observer_store  m_observers;\n};\n\n//____________________________________________________________________________//\n\nnamespace {\n\n#if defined(__CYGWIN__)\nframework_impl& s_frk_impl() { static framework_impl* the_inst = 0; if(!the_inst) the_inst = new framework_impl; return *the_inst; }\n#else\nframework_impl& s_frk_impl() { static framework_impl the_inst; return the_inst; }\n#endif\n\n} // local namespace\n\n//____________________________________________________________________________//\n\nnamespace framework {\n\nvoid\ninit( init_unit_test_func init_func, int argc, char* argv[] )\n{\n    runtime_config::init( argc, argv );\n\n    // set the log level and format\n    unit_test_log.set_threshold_level( runtime_config::log_level() );\n    unit_test_log.set_format( runtime_config::log_format() );\n\n    // set the report level and format\n    results_reporter::set_level( runtime_config::report_level() );\n    results_reporter::set_format( runtime_config::report_format() );\n\n    register_observer( results_collector );\n    register_observer( unit_test_log );\n\n    if( runtime_config::show_progress() )\n        register_observer( progress_monitor );\n\n    if( runtime_config::detect_memory_leaks() > 0 ) {\n        debug::detect_memory_leaks( true );\n        debug::break_memory_alloc( runtime_config::detect_memory_leaks() );\n    }\n\n    // init master unit test suite\n    master_test_suite().argc = argc;\n    master_test_suite().argv = argv;\n\n    try {\n        boost::execution_monitor em;\n\n        ut_detail::test_init_caller tic( init_func );\n\n        em.execute( tic );\n    }\n    catch( execution_exception const& ex )  {\n        throw setup_error( ex.what() );\n    }\n\n    s_frk_impl().m_is_initialized = true;\n}\n\n//____________________________________________________________________________//\n\nbool\nis_initialized()\n{\n    return  s_frk_impl().m_is_initialized;\n}\n\n//____________________________________________________________________________//\n\nvoid\nregister_test_unit( test_case* tc )\n{\n    BOOST_TEST_SETUP_ASSERT( tc->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( \"test case already registered\" ) );\n\n    test_unit_id new_id = s_frk_impl().m_next_test_case_id;\n\n    BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_CASE_ID, BOOST_TEST_L( \"too many test cases\" ) );\n\n    typedef framework_impl::test_unit_store::value_type map_value_type;\n\n    s_frk_impl().m_test_units.insert( map_value_type( new_id, tc ) );\n    s_frk_impl().m_next_test_case_id++;\n\n    s_frk_impl().set_tu_id( *tc, new_id );\n}\n\n//____________________________________________________________________________//\n\nvoid\nregister_test_unit( test_suite* ts )\n{\n    BOOST_TEST_SETUP_ASSERT( ts->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( \"test suite already registered\" ) );\n\n    test_unit_id new_id = s_frk_impl().m_next_test_suite_id;\n\n    BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_SUITE_ID, BOOST_TEST_L( \"too many test suites\" ) );\n\n    typedef framework_impl::test_unit_store::value_type map_value_type;\n    s_frk_impl().m_test_units.insert( map_value_type( new_id, ts ) );\n    s_frk_impl().m_next_test_suite_id++;\n\n    s_frk_impl().set_tu_id( *ts, new_id );\n}\n\n//____________________________________________________________________________//\n\nvoid\nderegister_test_unit( test_unit* tu )\n{\n    s_frk_impl().m_test_units.erase( tu->p_id );\n}\n\n//____________________________________________________________________________//\n\nvoid\nclear()\n{\n    s_frk_impl().clear();\n}\n\n//____________________________________________________________________________//\n\nvoid\nregister_observer( test_observer& to )\n{\n    s_frk_impl().m_observers.insert( &to );\n}\n\n//____________________________________________________________________________//\n\nvoid\nderegister_observer( test_observer& to )\n{\n    s_frk_impl().m_observers.erase( &to );\n}\n\n//____________________________________________________________________________//\n\nvoid\nreset_observers()\n{\n    s_frk_impl().m_observers.clear();\n}\n\n//____________________________________________________________________________//\n\nmaster_test_suite_t&\nmaster_test_suite()\n{\n    if( !s_frk_impl().m_master_test_suite )\n        s_frk_impl().m_master_test_suite = new master_test_suite_t;\n\n    return *s_frk_impl().m_master_test_suite;\n}\n\n//____________________________________________________________________________//\n\ntest_case const&\ncurrent_test_case()\n{\n    return get<test_case>( s_frk_impl().m_curr_test_case );\n}\n\n//____________________________________________________________________________//\n\ntest_unit&\nget( test_unit_id id, test_unit_type t )\n{\n    test_unit* res = s_frk_impl().m_test_units[id];\n\n    if( (res->p_type & t) == 0 )\n        throw internal_error( \"Invalid test unit type\" );\n\n    return *res;\n}\n\n//____________________________________________________________________________//\n\nvoid\nrun( test_unit_id id, bool continue_test )\n{\n    if( id == INV_TEST_UNIT_ID )\n        id = master_test_suite().p_id;\n\n    test_case_counter tcc;\n    traverse_test_tree( id, tcc );\n\n    BOOST_TEST_SETUP_ASSERT( tcc.p_count != 0 , runtime_config::test_to_run().is_empty() \n        ? BOOST_TEST_L( \"test tree is empty\" ) \n        : BOOST_TEST_L( \"no test cases matching filter\" ) );\n\n    bool    call_start_finish   = !continue_test || !s_frk_impl().m_test_in_progress;\n    bool    was_in_progress     = s_frk_impl().m_test_in_progress;\n\n    s_frk_impl().m_test_in_progress = true;\n\n    if( call_start_finish ) {\n        BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers ) {\n            boost::execution_monitor em;\n\n            try {\n                em.execute( ut_detail::test_start_caller( to, tcc.p_count ) );\n            }\n            catch( execution_exception const& ex )  {\n                throw setup_error( ex.what() );\n            }\n        }\n    }\n\n    switch( runtime_config::random_seed() ) {\n    case 0:\n        break;\n    case 1: {\n        unsigned int seed = static_cast<unsigned int>( std::time( 0 ) );\n        BOOST_TEST_MESSAGE( \"Test cases order is shuffled using seed: \" << seed );\n        std::srand( seed );\n        break;\n    }\n    default:\n        BOOST_TEST_MESSAGE( \"Test cases order is shuffled using seed: \" << runtime_config::random_seed() );\n        std::srand( runtime_config::random_seed() );\n    }\n\n    try {\n        traverse_test_tree( id, s_frk_impl() );\n    }\n    catch( test_being_aborted const& ) {\n        // abort already reported\n    }\n\n    if( call_start_finish ) {\n        BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )\n            to->test_finish();\n    }\n\n    s_frk_impl().m_test_in_progress = was_in_progress;\n}\n\n//____________________________________________________________________________//\n\nvoid\nrun( test_unit const* tu, bool continue_test )\n{\n    run( tu->p_id, continue_test );\n}\n\n//____________________________________________________________________________//\n\nvoid\nassertion_result( bool passed )\n{\n    BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )\n        to->assertion_result( passed );\n}\n\n//____________________________________________________________________________//\n\nvoid\nexception_caught( execution_exception const& ex )\n{\n    BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )\n        to->exception_caught( ex );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_unit_aborted( test_unit const& tu )\n{\n    BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )\n        to->test_unit_aborted( tu );\n}\n\n//____________________________________________________________________________//\n\n} // namespace framework\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_FRAMEWORK_IPP_021005GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/interaction_based.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : Facilities to perform interaction-based testing\n// ***************************************************************************\n\n#ifndef BOOST_TEST_INTERACTION_BASED_IPP_112105GER\n#define BOOST_TEST_INTERACTION_BASED_IPP_112105GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n#if BOOST_TEST_SUPPORT_INTERACTION_TESTING\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/interaction_based.hpp>\n#include <boost/test/mock_object.hpp>\n#include <boost/test/framework.hpp>     // for setup_error\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// STL\n#include <stdexcept>\n#include <string>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace itest { // interaction-based testing\n\n// ************************************************************************** //\n// **************                    manager                   ************** //\n// ************************************************************************** //\n\nmanager::manager()\n{\n    instance_ptr( true, this );\n}\n\n//____________________________________________________________________________//\n\nmanager::~manager()\n{\n    instance_ptr( true );\n}\n\n//____________________________________________________________________________//\n    \nmanager*\nmanager::instance_ptr( bool reset, manager* new_ptr )\n{\n    static manager dummy( 0 );\n    \n    static manager* ptr = &dummy;\n    \n    if( reset ) {\n        if( new_ptr ) {\n            BOOST_TEST_SETUP_ASSERT( ptr == &dummy, BOOST_TEST_L( \"Can't run two interation based test the same time\" ) );\n                \n            ptr = new_ptr;\n        }\n        else\n            ptr = &dummy;\n    }\n    \n    return ptr;\n}\n    \n}  // namespace itest\n\n}  // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // not ancient compiler\n\n#endif // BOOST_TEST_INTERACTION_BASED_IPP_112105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/logged_expectations.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, ELOG_VER 1.0. (See accompanying file\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : Facilities to perform interaction based testng of logged expectations\n// ***************************************************************************\n\n#ifndef BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER\n#define BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n#if BOOST_TEST_SUPPORT_INTERACTION_TESTING\n\n#include <boost/test/detail/global_typedef.hpp>\n\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/utils/iterator/token_iterator.hpp>\n\n#include <boost/test/interaction_based.hpp>\n#include <boost/test/test_tools.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// Boost\n#include <boost/lexical_cast.hpp>\n\n// STL\n#include <fstream>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nusing namespace ::boost::unit_test;\n\nnamespace itest {\n\n// ************************************************************************** //\n// **************    logged expectation test implementation    ************** //\n// ************************************************************************** //\n\nstruct expectations_logger : itest::manager {\n    // Constructor\n    expectations_logger( const_string log_file_name, bool test_or_log );\n\n    virtual bool        decision_point( const_string, std::size_t );\n    virtual unsigned    enter_scope( const_string, std::size_t, const_string scope_name );\n    virtual void        allocated( const_string, std::size_t, void*, std::size_t s );\n    virtual void        data_flow( const_string d );\n    virtual std::string return_value( const_string default_value );\n    \nprivate:\n    // Data members\n    bool            m_test_or_log;\n    std::fstream    m_log_file;\n};\n\nliteral_string ELOG_VER     = \"1.0\";\nliteral_string CLMN_SEP     = \"|\";\nstatic const char LINE_SEP  = '\\n';\n\nliteral_string FILE_SIG     = \"ELOG\";\nliteral_string SCOPE_SIG    = \"SCOPE\";\nliteral_string ALLOC_SIG    = \"ALLOC\";\nliteral_string DP_SIG       = \"SWITCH\";\nliteral_string DATA_SIG     = \"DATA\";\nliteral_string RETURN_SIG   = \"RETURN\";\n\n//____________________________________________________________________________//\n\nexpectations_logger::expectations_logger( const_string log_file_name, bool test_or_log )\n: m_test_or_log( test_or_log )\n{\n    BOOST_REQUIRE_MESSAGE( !log_file_name.is_empty(), \"Empty expectations log file name\" );\n\n    m_log_file.open( log_file_name.begin(), test_or_log ? std::ios::in : std::ios::out );\n\n    BOOST_REQUIRE_MESSAGE( m_log_file.is_open(),\n                           \"Can't open expectations log file \" << log_file_name\n                                << \" for \" << ( m_test_or_log ? \"reading\" : \"writing\") );\n\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n\n        BOOST_CHECK_EQUAL( *tit, FILE_SIG ); \n        ++tit;\n        BOOST_CHECK_EQUAL( *tit, ELOG_VER );\n    }\n    else {\n        m_log_file << FILE_SIG << CLMN_SEP << ELOG_VER << LINE_SEP;\n    }\n}\n\n//____________________________________________________________________________//\n\nbool\nexpectations_logger::decision_point( const_string, std::size_t )\n{\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n        \n        BOOST_CHECK_EQUAL( *tit, DP_SIG ); ++tit;\n        return lexical_cast<bool>( *tit );\n    }\n    else {\n        m_log_file << DP_SIG << CLMN_SEP << std::boolalpha << true << LINE_SEP;\n        \n        return true;\n    }\n}\n\n//____________________________________________________________________________//\n    \nunsigned\nexpectations_logger::enter_scope( const_string, std::size_t, const_string scope_name )\n{\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n        \n        BOOST_CHECK_EQUAL( *tit, SCOPE_SIG ); ++tit;\n        BOOST_CHECK_EQUAL( *tit, scope_name );\n    }\n    else {\n        m_log_file << SCOPE_SIG << CLMN_SEP << scope_name << LINE_SEP;\n    }\n    \n    return 0;\n}\n    \n//____________________________________________________________________________//\n\nvoid\nexpectations_logger::allocated( const_string, std::size_t, void*, std::size_t s )\n{\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n        \n        BOOST_CHECK_EQUAL( *tit, ALLOC_SIG ); ++tit;\n        BOOST_CHECK_EQUAL( lexical_cast<std::size_t>( *tit ), s );\n    }\n    else {\n        m_log_file << ALLOC_SIG << CLMN_SEP << s << LINE_SEP;\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nexpectations_logger::data_flow( const_string d )\n{\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n        \n        BOOST_CHECK_EQUAL( *tit, DATA_SIG ); ++tit;\n        BOOST_CHECK_EQUAL( *tit, d );\n    }\n    else {\n        m_log_file << DATA_SIG << CLMN_SEP << d << LINE_SEP;\n    }\n}\n\n//____________________________________________________________________________//\n\nstd::string\nexpectations_logger::return_value( const_string default_value )\n{\n    if( m_test_or_log ) {\n        std::string line;\n        \n        std::getline( m_log_file, line, LINE_SEP );\n        \n        const_string cline( line );\n        string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));\n        \n        BOOST_CHECK_EQUAL( *tit, RETURN_SIG ); ++tit;\n        \n        return std::string( tit->begin(), tit->size() );\n    }\n    else {\n        m_log_file << RETURN_SIG << CLMN_SEP << default_value << LINE_SEP;\n                                 \n        return std::string();\n    }\n}\n\n//____________________________________________________________________________//\n    \n// ************************************************************************** //\n// **************           logged expectations test           ************** //\n// ************************************************************************** //\n\nvoid BOOST_TEST_DECL\nlogged_expectations( callback0<> const& F, const_string log_file_name, bool test_or_log )\n{\n    expectations_logger el( log_file_name, test_or_log );\n\n    F();\n}\n\n//____________________________________________________________________________//\n\n}  // namespace itest\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // not ancient compiler\n\n#endif // BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/plain_report_formatter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : plain report formatter definition\n// ***************************************************************************\n\n#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER\n#define BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/output/plain_report_formatter.hpp>\n#include <boost/test/utils/custom_manip.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n// STL\n#include <iomanip>\n#include <boost/config/no_tr1/cmath.hpp>\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n# ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::log10; }\n# endif\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\nnamespace {\n\ntypedef custom_manip<struct quote_t> quote;\n\ntemplate<typename T>\ninline std::ostream&\noperator<<( custom_printer<quote> const& p, T const& value )\n{\n    *p << '\"' << value << '\"';\n\n    return *p;\n}\n\n//____________________________________________________________________________//\n\nvoid\nprint_stat_value( std::ostream& ostr, counter_t v, counter_t indent, counter_t total,\n                  const_string name, const_string res )\n{\n    if( v > 0 ) {\n        ostr << std::setw( indent ) << \"\"\n             << v << ' ' << name << ( v != 1 ? \"s\" : \"\" );\n        if( total > 0 )\n            ostr << \" out of \" << total;\n\n        ostr << ' ' << res << '\\n';\n    }\n}\n\n//____________________________________________________________________________//\n\n} // local namespace\n\n// ************************************************************************** //\n// **************             plain_report_formatter           ************** //\n// ************************************************************************** //\n\nvoid\nplain_report_formatter::results_report_start( std::ostream& ostr )\n{\n    m_indent = 0;\n    ostr << '\\n';\n}\n\n//____________________________________________________________________________//\n\nvoid\nplain_report_formatter::results_report_finish( std::ostream& ostr )\n{\n    ostr.flush();\n}\n\n//____________________________________________________________________________//\n\nvoid\nplain_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )\n{\n    test_results const& tr = results_collector.results( tu.p_id );\n\n    const_string descr;\n\n    if( tr.passed() )\n        descr = \"passed\";\n    else if( tr.p_skipped )\n        descr = \"skipped\";\n    else if( tr.p_aborted )\n        descr = \"aborted\";\n    else\n        descr = \"failed\";\n\n    ostr << std::setw( m_indent ) << \"\"\n         << \"Test \" << (tu.p_type == tut_case ? \"case \" : \"suite \" ) << quote() << tu.p_name << ' ' << descr;\n\n    if( tr.p_skipped ) {\n        ostr << \" due to \" << (tu.check_dependencies() ? \"test aborting\\n\" : \"failed dependancy\\n\" );\n        m_indent += 2;\n        return;\n    }\n    \n    counter_t total_assertions  = tr.p_assertions_passed + tr.p_assertions_failed;\n    counter_t total_tc          = tr.p_test_cases_passed + tr.p_test_cases_failed + tr.p_test_cases_skipped;\n\n    if( total_assertions > 0 || total_tc > 0 )\n        ostr << \" with:\";\n\n    ostr << '\\n';\n    m_indent += 2;\n\n    print_stat_value( ostr, tr.p_assertions_passed, m_indent, total_assertions, \"assertion\", \"passed\" );\n    print_stat_value( ostr, tr.p_assertions_failed, m_indent, total_assertions, \"assertion\", \"failed\" );\n    print_stat_value( ostr, tr.p_expected_failures, m_indent, 0               , \"failure\"  , \"expected\" );\n    print_stat_value( ostr, tr.p_test_cases_passed, m_indent, total_tc        , \"test case\", \"passed\" );\n    print_stat_value( ostr, tr.p_test_cases_failed, m_indent, total_tc        , \"test case\", \"failed\" );\n    print_stat_value( ostr, tr.p_test_cases_skipped, m_indent, total_tc       , \"test case\", \"skipped\" );\n    print_stat_value( ostr, tr.p_test_cases_aborted, m_indent, total_tc       , \"test case\", \"aborted\" );\n    \n    ostr << '\\n';\n}\n\n//____________________________________________________________________________//\n\nvoid\nplain_report_formatter::test_unit_report_finish( test_unit const&, std::ostream& )\n{\n    m_indent -= 2;\n}\n\n//____________________________________________________________________________//\n\nvoid\nplain_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )\n{\n    test_results const& tr = results_collector.results( tu.p_id );\n    \n    if( tr.passed() ) {\n        ostr << \"*** No errors detected\\n\";\n        return;\n    }\n        \n    if( tr.p_skipped ) {\n        ostr << \"*** Test \" << tu.p_type_name << \" skipped due to \" \n             << (tu.check_dependencies() ? \"test aborting\\n\" : \"failed dependancy\\n\" );\n        return;\n    }\n\n    if( tr.p_assertions_failed == 0 ) {\n        ostr << \"*** errors detected in test \" << tu.p_type_name << \" \" << quote() << tu.p_name\n             << \"; see standard output for details\\n\";\n        return;\n    }\n\n    counter_t num_failures = tr.p_assertions_failed;\n    \n    ostr << \"*** \" << num_failures << \" failure\" << ( num_failures != 1 ? \"s\" : \"\" ) << \" detected\";\n    \n    if( tr.p_expected_failures > 0 )\n        ostr << \" (\" << tr.p_expected_failures << \" failure\" << ( tr.p_expected_failures != 1 ? \"s\" : \"\" ) << \" expected)\";\n    \n    ostr << \" in test \" << tu.p_type_name << \" \" << quote() << tu.p_name << \"\\n\";\n}\n\n//____________________________________________________________________________//\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/progress_monitor.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implements simple text based progress monitor\n// ***************************************************************************\n\n#ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER\n#define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/progress_monitor.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n// Boost\n#include <boost/progress.hpp>\n#include <boost/scoped_ptr.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                progress_monitor              ************** //\n// ************************************************************************** //\n\nnamespace {\n\nstruct progress_monitor_impl {\n    // Constructor\n    progress_monitor_impl()\n        : m_stream( runtime_config::log_sink() )\n    {}\n\n    std::ostream*                m_stream;\n    scoped_ptr<progress_display> m_progress_display;\n};\n\nprogress_monitor_impl& s_pm_impl() { static progress_monitor_impl the_inst; return the_inst; }\n\n} // local namespace\n\n//____________________________________________________________________________//\n\nvoid\nprogress_monitor_t::test_start( counter_t test_cases_amount )\n{\n    s_pm_impl().m_progress_display.reset( new progress_display( test_cases_amount, *s_pm_impl().m_stream ) );\n}\n\n//____________________________________________________________________________//\n\nvoid\nprogress_monitor_t::test_aborted()\n{\n    (*s_pm_impl().m_progress_display) += s_pm_impl().m_progress_display->count();\n}\n\n//____________________________________________________________________________//\n\nvoid\nprogress_monitor_t::test_unit_finish( test_unit const& tu, unsigned long )\n{\n    if( tu.p_type == tut_case )\n        ++(*s_pm_impl().m_progress_display);\n}\n\n//____________________________________________________________________________//\n\nvoid\nprogress_monitor_t::test_unit_skipped( test_unit const& tu )\n{\n    test_case_counter tcc;\n    traverse_test_tree( tu, tcc );\n    \n    (*s_pm_impl().m_progress_display) += tcc.p_count;\n}\n\n//____________________________________________________________________________//\n\nvoid\nprogress_monitor_t::set_stream( std::ostream& ostr )\n{\n    s_pm_impl().m_stream = &ostr;\n}\n\n//____________________________________________________________________________//\n    \n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/results_collector.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implements Unit Test results collecting facility.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER\n#define BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER\n\n// Boost.Test\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/framework.hpp>\n\n// Boost\n#include <boost/cstdlib.hpp>\n\n// STL\n#include <map>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                 test_results                 ************** //\n// ************************************************************************** //\n\ntest_results::test_results()\n{\n    clear();\n}\n\n//____________________________________________________________________________//\n\nbool\ntest_results::passed() const\n{\n    return  !p_skipped                                  &&\n            p_test_cases_failed == 0                    &&\n            p_assertions_failed <= p_expected_failures  &&\n            !p_aborted;\n}\n\n//____________________________________________________________________________//\n\nint\ntest_results::result_code() const\n{\n    return passed() ? exit_success\n           : ( (p_assertions_failed > p_expected_failures || p_skipped )\n                    ? exit_test_failure\n                    : exit_exception_failure );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_results::operator+=( test_results const& tr )\n{\n    p_assertions_passed.value   += tr.p_assertions_passed;\n    p_assertions_failed.value   += tr.p_assertions_failed;\n    p_test_cases_passed.value   += tr.p_test_cases_passed;\n    p_test_cases_failed.value   += tr.p_test_cases_failed;\n    p_test_cases_skipped.value  += tr.p_test_cases_skipped;\n    p_test_cases_aborted.value  += tr.p_test_cases_aborted;\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_results::clear()\n{\n    p_assertions_passed.value    = 0;\n    p_assertions_failed.value    = 0;\n    p_expected_failures.value    = 0;\n    p_test_cases_passed.value    = 0;\n    p_test_cases_failed.value    = 0;\n    p_test_cases_skipped.value   = 0;\n    p_test_cases_aborted.value   = 0;\n    p_aborted.value              = false;\n    p_skipped.value              = true;\n}\n\n//____________________________________________________________________________//\n    \n// ************************************************************************** //\n// **************               results_collector              ************** //\n// ************************************************************************** //\n\n#if !BOOST_WORKAROUND(BOOST_MSVC, <1300)\n\nnamespace {\n\nstruct results_collector_impl {\n    std::map<test_unit_id,test_results> m_results_store;\n};\n\nresults_collector_impl& s_rc_impl() { static results_collector_impl the_inst; return the_inst; }\n\n} // local namespace\n\n#else\n\nstruct results_collector_impl {\n    std::map<test_unit_id,test_results> m_results_store;\n};\n\nstatic results_collector_impl& s_rc_impl() { static results_collector_impl the_inst; return the_inst; }\n\n#endif\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_start( counter_t )\n{\n    s_rc_impl().m_results_store.clear();\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_finish()\n{\n    // do nothing\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_aborted()\n{\n    // do nothing\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_unit_start( test_unit const& tu )\n{\n    // init test_results entry\n    test_results& tr = s_rc_impl().m_results_store[tu.p_id];\n\n    tr.clear();\n    \n    tr.p_expected_failures.value    = tu.p_expected_failures;\n    tr.p_skipped.value              = false;\n}\n\n//____________________________________________________________________________//\n\nclass results_collect_helper : public test_tree_visitor {\npublic:\n    explicit results_collect_helper( test_results& tr, test_unit const& ts ) : m_tr( tr ), m_ts( ts ) {}\n\n    void    visit( test_case const& tc )\n    {\n        test_results const& tr = results_collector.results( tc.p_id );\n        m_tr += tr;\n\n        if( tr.passed() )\n            m_tr.p_test_cases_passed.value++;\n        else if( tr.p_skipped )\n            m_tr.p_test_cases_skipped.value++;\n        else {\n            if( tr.p_aborted )\n                m_tr.p_test_cases_aborted.value++;\n            m_tr.p_test_cases_failed.value++;\n        }\n    }\n    bool    test_suite_start( test_suite const& ts )\n    {\n        if( m_ts.p_id == ts.p_id )\n            return true;\n        else {\n            m_tr += results_collector.results( ts.p_id );\n            return false;\n        }\n    }\n\nprivate:\n    // Data members\n    test_results&       m_tr;\n    test_unit const&    m_ts;\n};\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_unit_finish( test_unit const& tu, unsigned long )\n{\n    if( tu.p_type == tut_suite ) {\n        results_collect_helper ch( s_rc_impl().m_results_store[tu.p_id], tu );\n\n        traverse_test_tree( tu, ch );\n    }\n    else {\n        test_results const& tr = s_rc_impl().m_results_store[tu.p_id];\n        \n        bool num_failures_match = tr.p_aborted || tr.p_assertions_failed >= tr.p_expected_failures;\n        if( !num_failures_match )\n            BOOST_TEST_MESSAGE( \"Test case \" << tu.p_name << \" has fewer failures than expected\" );\n\n        bool check_any_assertions = tr.p_aborted || (tr.p_assertions_failed != 0) || (tr.p_assertions_passed != 0);\n        if( !check_any_assertions )\n            BOOST_TEST_MESSAGE( \"Test case \" << tu.p_name << \" did not check any assertions\" );\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_unit_skipped( test_unit const& tu )\n{\n    if( tu.p_type == tut_suite ) {\n        test_case_counter tcc;\n        traverse_test_tree( tu, tcc );\n\n        test_results& tr = s_rc_impl().m_results_store[tu.p_id];\n\n        tr.clear();\n    \n        tr.p_skipped.value              = true;\n        tr.p_test_cases_skipped.value   = tcc.p_count;\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::assertion_result( bool passed )\n{\n    test_results& tr = s_rc_impl().m_results_store[framework::current_test_case().p_id];\n\n    if( passed )\n        tr.p_assertions_passed.value++;\n    else\n        tr.p_assertions_failed.value++;\n\n    if( tr.p_assertions_failed == 1 )\n        first_failed_assertion();\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::exception_caught( execution_exception const& )\n{\n    test_results& tr = s_rc_impl().m_results_store[framework::current_test_case().p_id];\n\n    tr.p_assertions_failed.value++;\n}\n\n//____________________________________________________________________________//\n\nvoid\nresults_collector_t::test_unit_aborted( test_unit const& tu )\n{\n    s_rc_impl().m_results_store[tu.p_id].p_aborted.value = true;\n}\n\n//____________________________________________________________________________//\n\ntest_results const&\nresults_collector_t::results( test_unit_id id ) const\n{\n    return s_rc_impl().m_results_store[id];\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/results_reporter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : result reporting facilties\n// ***************************************************************************\n\n#ifndef BOOST_TEST_RESULTS_REPORTER_IPP_020105GER\n#define BOOST_TEST_RESULTS_REPORTER_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/results_reporter.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/output/plain_report_formatter.hpp>\n#include <boost/test/output/xml_report_formatter.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n// Boost\n#include <boost/scoped_ptr.hpp>\n#include <boost/io/ios_state.hpp>\ntypedef ::boost::io::ios_base_all_saver io_saver_type;\n\n// STL\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace results_reporter {\n\n// ************************************************************************** //\n// **************        result reporter implementation        ************** //\n// ************************************************************************** //\n\nnamespace {\n\nstruct results_reporter_impl : test_tree_visitor {\n    // Constructor\n    results_reporter_impl()\n    : m_output( runtime_config::report_sink() )\n    , m_stream_state_saver( new io_saver_type( *m_output ) )\n    , m_report_level( CONFIRMATION_REPORT )\n    , m_formatter( new output::plain_report_formatter )\n    {}\n\n    // test tree visitor interface implementation\n    void    visit( test_case const& tc )\n    {\n        m_formatter->test_unit_report_start( tc, *m_output );\n        m_formatter->test_unit_report_finish( tc, *m_output );\n    }\n    bool    test_suite_start( test_suite const& ts )\n    {\n        m_formatter->test_unit_report_start( ts, *m_output );\n\n        if( m_report_level == DETAILED_REPORT && !results_collector.results( ts.p_id ).p_skipped )\n            return true;\n\n        m_formatter->test_unit_report_finish( ts, *m_output );\n        return false;\n    }\n    void    test_suite_finish( test_suite const& ts )\n    {\n        m_formatter->test_unit_report_finish( ts, *m_output );\n    }\n\n    typedef scoped_ptr<io_saver_type> saver_ptr;\n\n    // Data members\n    std::ostream*       m_output;\n    saver_ptr           m_stream_state_saver;\n    report_level        m_report_level;\n    scoped_ptr<format>  m_formatter;\n};\n\nresults_reporter_impl& s_rr_impl() { static results_reporter_impl the_inst; return the_inst; }\n\n} // local namespace\n\n// ************************************************************************** //\n// **************              report configuration            ************** //\n// ************************************************************************** //\n\nvoid\nset_level( report_level l )\n{\n    if( l != INV_REPORT_LEVEL )\n        s_rr_impl().m_report_level = l;\n}\n\n//____________________________________________________________________________//\n\nvoid\nset_stream( std::ostream& ostr )\n{\n    s_rr_impl().m_output = &ostr;\n    s_rr_impl().m_stream_state_saver.reset( new io_saver_type( ostr ) );\n}\n\n//____________________________________________________________________________//\n\nstd::ostream&\nget_stream()\n{\n    return *s_rr_impl().m_output;\n}\n\n//____________________________________________________________________________//\n\nvoid\nset_format( output_format rf )\n{\n    switch( rf ) {\n    case CLF:\n        set_format( new output::plain_report_formatter );\n        break;\n    case XML:\n        set_format( new output::xml_report_formatter );\n        break;\n    default:\n        break;\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nset_format( results_reporter::format* f )\n{\n    if( f )\n        s_rr_impl().m_formatter.reset( f );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               report initiation              ************** //\n// ************************************************************************** //\n\nvoid\nmake_report( report_level l, test_unit_id id )\n{\n    if( l == INV_REPORT_LEVEL )\n        l = s_rr_impl().m_report_level;\n\n    if( l == NO_REPORT )\n        return;\n\n    if( id == INV_TEST_UNIT_ID )\n        id = framework::master_test_suite().p_id;\n\n    s_rr_impl().m_stream_state_saver->restore();\n\n    report_level bkup = s_rr_impl().m_report_level;\n    s_rr_impl().m_report_level = l;\n\n    s_rr_impl().m_formatter->results_report_start( *s_rr_impl().m_output );\n\n    switch( l ) {\n    case CONFIRMATION_REPORT:\n        s_rr_impl().m_formatter->do_confirmation_report( framework::get<test_unit>( id ), *s_rr_impl().m_output );\n        break;\n    case SHORT_REPORT:\n    case DETAILED_REPORT:\n        traverse_test_tree( id, s_rr_impl() );\n        break;\n    default:\n        break;\n    }\n\n    s_rr_impl().m_formatter->results_report_finish( *s_rr_impl().m_output );\n    s_rr_impl().m_report_level = bkup;\n}\n\n//____________________________________________________________________________//\n\n} // namespace results_reporter\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/test_tools.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : supplies offline implementation for the Test Tools\n// ***************************************************************************\n\n#ifndef BOOST_TEST_TEST_TOOLS_IPP_012205GER\n#define BOOST_TEST_TEST_TOOLS_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/test_tools.hpp>\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/output_test_stream.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/execution_monitor.hpp> // execution_aborted\n#include <boost/test/unit_test_suite_impl.hpp>\n\n// Boost\n#include <boost/config.hpp>\n\n// STL\n#include <fstream>\n#include <string>\n#include <cstring>\n#include <cctype>\n#include <cwchar>\n#include <stdexcept>\n#include <ios>\n\n// !! should we use #include <cstdarg>\n#include <stdarg.h>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n# ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::strcmp; using ::strlen; using ::isprint; }\n#if !defined( BOOST_NO_CWCHAR )\nnamespace std { using ::wcscmp; }\n#endif\n# endif\n\nnamespace boost {\n\nnamespace test_tools {\n\n// ************************************************************************** //\n// **************                print_log_value               ************** //\n// ************************************************************************** //\n\nvoid\nprint_log_value<char>::operator()( std::ostream& ostr, char t )\n{\n    if( (std::isprint)( static_cast<unsigned char>(t) ) )\n        ostr << '\\'' << t << '\\'';\n    else\n        ostr << std::hex\n#if BOOST_TEST_USE_STD_LOCALE\n        << std::showbase\n#else\n        << \"0x\"\n#endif\n        << static_cast<int>(t);\n}\n\n//____________________________________________________________________________//\n\nvoid\nprint_log_value<unsigned char>::operator()( std::ostream& ostr, unsigned char t )\n{\n    ostr << std::hex\n        // showbase is only available for new style streams:\n#if BOOST_TEST_USE_STD_LOCALE\n        << std::showbase\n#else\n        << \"0x\"\n#endif\n        << static_cast<int>(t);\n}\n\n//____________________________________________________________________________//\n\nvoid\nprint_log_value<char const*>::operator()( std::ostream& ostr, char const* t )\n{\n    ostr << ( t ? t : \"null string\" );\n}\n\n//____________________________________________________________________________//\n\nvoid\nprint_log_value<wchar_t const*>::operator()( std::ostream& ostr, wchar_t const* t )\n{\n    ostr << ( t ? t : L\"null string\" );\n}\n\n//____________________________________________________________________________//\n\nnamespace tt_detail {\n\n// ************************************************************************** //\n// **************            TOOL BOX Implementation           ************** //\n// ************************************************************************** //\n\nusing ::boost::unit_test::lazy_ostream;\n\nbool\ncheck_impl( predicate_result const& pr, lazy_ostream const& check_descr,\n            const_string file_name, std::size_t line_num,\n            tool_level tl, check_type ct,\n            std::size_t num_of_args, ... )\n{\n    using namespace unit_test;\n\n    if( !framework::is_initialized() )\n        throw std::runtime_error( \"can't use testing tools before framework is initialized\" );\n\n    if( !!pr )\n        tl = PASS;\n\n    log_level    ll;\n    char const*  prefix;\n    char const*  suffix;\n       \n    switch( tl ) {\n    case PASS:\n        ll      = log_successful_tests;\n        prefix  = \"check \";\n        suffix  = \" passed\";\n        break;\n    case WARN:\n        ll      = log_warnings;\n        prefix  = \"condition \";\n        suffix  = \" is not satisfied\";\n        break;\n    case CHECK:\n        ll      = log_all_errors;\n        prefix  = \"check \";\n        suffix  = \" failed\";\n        break;\n    case REQUIRE:\n        ll      = log_fatal_errors;\n        prefix  = \"critical check \";\n        suffix  = \" failed\";\n        break;\n    default:\n        return true;\n    }\n\n    switch( ct ) {\n    case CHECK_PRED:\n        unit_test_log << unit_test::log::begin( file_name, line_num ) \n                      << ll << prefix << check_descr << suffix;\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n        \n        unit_test_log << unit_test::log::end();\n        break;\n\n    case CHECK_MSG:\n        unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;\n        \n        if( tl == PASS )\n            unit_test_log << prefix << \"'\" << check_descr << \"'\" << suffix;\n        else\n            unit_test_log << check_descr;\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n\n    case CHECK_EQUAL: \n    case CHECK_NE: \n    case CHECK_LT: \n    case CHECK_LE: \n    case CHECK_GT: \n    case CHECK_GE: {\n        static char const* check_str [] = { \" == \", \" != \", \" < \" , \" <= \", \" > \" , \" >= \" };\n        static char const* rever_str [] = { \" != \", \" == \", \" >= \", \" > \" , \" <= \", \" < \"  };\n\n        va_list args;\n\n        va_start( args, num_of_args );\n        char const*         arg1_descr  = va_arg( args, char const* );\n        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );\n        char const*         arg2_descr  = va_arg( args, char const* );\n        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );\n\n        unit_test_log << unit_test::log::begin( file_name, line_num ) \n                      << ll << prefix << arg1_descr << check_str[ct-CHECK_EQUAL] << arg2_descr << suffix;\n\n        if( tl != PASS )\n            unit_test_log << \" [\" << *arg1_val << rever_str[ct-CHECK_EQUAL] << *arg2_val << \"]\" ;\n\n        va_end( args );\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n    }\n\n    case CHECK_CLOSE:\n    case CHECK_CLOSE_FRACTION: {\n        va_list args;\n\n        va_start( args, num_of_args );\n        char const*         arg1_descr  = va_arg( args, char const* );\n        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );\n        char const*         arg2_descr  = va_arg( args, char const* );\n        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );\n        /* toler_descr = */               va_arg( args, char const* );\n        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );\n\n        unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;\n\n        unit_test_log << \"difference{\" << pr.message() << (ct == CHECK_CLOSE ? \"%\" : \"\")\n                      << \"} between \" << arg1_descr << \"{\" << *arg1_val\n                      << \"} and \"               << arg2_descr << \"{\" << *arg2_val\n                      << ( tl == PASS ? \"} doesn't exceed \" : \"} exceeds \" )\n                      << *toler_val;\n        if( ct == CHECK_CLOSE )\n            unit_test_log << \"%\";\n\n        va_end( args );\n        \n        unit_test_log << unit_test::log::end();\n        break;\n    }\n    case CHECK_SMALL: {\n        va_list args;\n\n        va_start( args, num_of_args );\n        char const*         arg1_descr  = va_arg( args, char const* );\n        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );\n        /* toler_descr = */               va_arg( args, char const* );\n        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );\n\n        unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;\n\n        unit_test_log << \"absolute value of \" << arg1_descr << \"{\" << *arg1_val << \"}\" \n                      << ( tl == PASS ? \" doesn't exceed \" : \" exceeds \" )\n                      << *toler_val;\n\n        va_end( args );\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n    }\n\n    case CHECK_PRED_WITH_ARGS: {\n        unit_test_log << unit_test::log::begin( file_name, line_num ) \n                      << ll << prefix << check_descr;\n\n        // print predicate call description\n        {\n            va_list args;\n            va_start( args, num_of_args );\n\n            unit_test_log << \"( \";\n            for( std::size_t i = 0; i < num_of_args; ++i ) {\n                unit_test_log << va_arg( args, char const* );\n                va_arg( args, lazy_ostream const* ); // skip argument value;\n                \n                if( i != num_of_args-1 )\n                    unit_test_log << \", \";\n            }\n            unit_test_log << \" )\" << suffix;\n            va_end( args );\n        }\n                        \n        if( tl != PASS ) {\n            va_list args;\n            va_start( args, num_of_args );\n\n            unit_test_log << \" for ( \";\n            for( std::size_t i = 0; i < num_of_args; ++i ) {\n                va_arg( args, char const* ); // skip argument description;            \n                unit_test_log << *va_arg( args, lazy_ostream const* );\n                \n                if( i != num_of_args-1 )\n                    unit_test_log << \", \";\n            }\n            unit_test_log << \" )\";\n            va_end( args );\n        }\n       \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n    }\n\n    case CHECK_EQUAL_COLL: {\n        va_list args;\n\n        va_start( args, num_of_args );\n        char const* left_begin_descr    = va_arg( args, char const* );\n        char const* left_end_descr      = va_arg( args, char const* );\n        char const* right_begin_descr   = va_arg( args, char const* );\n        char const* right_end_descr     = va_arg( args, char const* );\n\n        unit_test_log << unit_test::log::begin( file_name, line_num ) \n                      << ll << prefix \n                      << \"{ \" << left_begin_descr  << \", \" << left_end_descr  << \" } == { \" \n                              << right_begin_descr << \", \" << right_end_descr << \" }\"\n                      << suffix;\n\n        va_end( args );\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n    }\n\n    case CHECK_BITWISE_EQUAL: {\n        va_list args;\n\n        va_start( args, num_of_args );\n        char const* left_descr    = va_arg( args, char const* );\n        char const* right_descr   = va_arg( args, char const* );\n\n        unit_test_log << unit_test::log::begin( file_name, line_num )\n                      << ll << prefix << left_descr  << \" =.= \" << right_descr << suffix;\n\n        va_end( args );\n        \n        if( !pr.has_empty_message() )\n            unit_test_log << \". \" << pr.message();\n\n        unit_test_log << unit_test::log::end();\n        break;\n    }\n    }\n\n    switch( tl ) {\n    case PASS:\n        framework::assertion_result( true );\n        return true;\n\n    case WARN:\n        return false;\n\n    case CHECK:\n        framework::assertion_result( false );\n        return false;\n        \n    case REQUIRE:\n        framework::assertion_result( false );\n\n        framework::test_unit_aborted( framework::current_test_case() );\n\n        throw execution_aborted();\n    }\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\npredicate_result\nequal_impl( char const* left, char const* right )\n{\n    return (left && right) ? std::strcmp( left, right ) == 0 : (left == right);\n}\n\n//____________________________________________________________________________//\n\n#if !defined( BOOST_NO_CWCHAR )\n\npredicate_result\nequal_impl( wchar_t const* left, wchar_t const* right )\n{\n    return (left && right) ? std::wcscmp( left, right ) == 0 : (left == right);\n}\n\n#endif // !defined( BOOST_NO_CWCHAR )\n\n//____________________________________________________________________________//\n\nbool\nis_defined_impl( const_string symbol_name, const_string symbol_value )\n{\n    symbol_value.trim_left( 2 );\n    return symbol_name != symbol_value;\n}\n\n//____________________________________________________________________________//\n\n} // namespace tt_detail\n\n// ************************************************************************** //\n// **************               output_test_stream             ************** //\n// ************************************************************************** //\n\nstruct output_test_stream::Impl\n{\n    std::fstream    m_pattern;\n    bool            m_match_or_save;\n    bool            m_text_or_binary;\n    std::string     m_synced_string;\n\n    char            get_char()\n    {\n        char res;\n        do {\n            m_pattern.get( res );\n        } while( m_text_or_binary && res == '\\r' && !m_pattern.fail() && !m_pattern.eof() );\n\n        return res;\n    }\n\n    void            check_and_fill( predicate_result& res )\n    {\n        if( !res.p_predicate_value )\n            res.message() << \"Output content: \\\"\" << m_synced_string << '\\\"';\n    }\n};\n\n//____________________________________________________________________________//\n\noutput_test_stream::output_test_stream( const_string pattern_file_name, bool match_or_save, bool text_or_binary )\n: m_pimpl( new Impl )\n{\n    if( !pattern_file_name.is_empty() ) {\n        std::ios::openmode m = match_or_save ? std::ios::in : std::ios::out;\n        if( !text_or_binary )\n            m |= std::ios::binary;\n\n        m_pimpl->m_pattern.open( pattern_file_name.begin(), m );\n\n        BOOST_WARN_MESSAGE( m_pimpl->m_pattern.is_open(),\n                             \"Can't open pattern file \" << pattern_file_name\n                                << \" for \" << (match_or_save ? \"reading\" : \"writing\") );\n    }\n\n    m_pimpl->m_match_or_save    = match_or_save;\n    m_pimpl->m_text_or_binary   = text_or_binary;\n}\n\n//____________________________________________________________________________//\n\noutput_test_stream::~output_test_stream()\n{\n    delete m_pimpl;\n}\n\n//____________________________________________________________________________//\n\npredicate_result\noutput_test_stream::is_empty( bool flush_stream )\n{\n    sync();\n\n    result_type res( m_pimpl->m_synced_string.empty() );\n\n    m_pimpl->check_and_fill( res );\n\n    if( flush_stream )\n        flush();\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\npredicate_result\noutput_test_stream::check_length( std::size_t length_, bool flush_stream )\n{\n    sync();\n\n    result_type res( m_pimpl->m_synced_string.length() == length_ );\n\n    m_pimpl->check_and_fill( res );\n\n    if( flush_stream )\n        flush();\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\npredicate_result\noutput_test_stream::is_equal( const_string arg, bool flush_stream )\n{\n    sync();\n\n    result_type res( const_string( m_pimpl->m_synced_string ) == arg );\n\n    m_pimpl->check_and_fill( res );\n\n    if( flush_stream )\n        flush();\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\npredicate_result\noutput_test_stream::match_pattern( bool flush_stream )\n{\n    sync();\n\n    result_type result( true );\n\n    if( !m_pimpl->m_pattern.is_open() ) {\n        result = false;\n        result.message() << \"Pattern file can't be opened!\";\n    }\n    else {\n        if( m_pimpl->m_match_or_save ) {\n            for ( std::string::size_type i = 0; i < m_pimpl->m_synced_string.length(); ++i ) {\n                char c = m_pimpl->get_char();\n\n                result = !m_pimpl->m_pattern.fail() &&\n                         !m_pimpl->m_pattern.eof()  &&\n                         (m_pimpl->m_synced_string[i] == c);\n\n                if( !result ) {\n                    std::string::size_type suffix_size  = (std::min)( m_pimpl->m_synced_string.length() - i,\n                                                                    static_cast<std::string::size_type>(5) );\n\n                    // try to log area around the mismatch\n                    result.message() << \"Mismatch at position \" << i << '\\n'\n                        << \"...\" << m_pimpl->m_synced_string.substr( i, suffix_size ) << \"...\" << '\\n'\n                        << \"...\" << c;\n\n                    std::string::size_type counter = suffix_size;\n                    while( --counter ) {\n                        char c = m_pimpl->get_char();\n\n                        if( m_pimpl->m_pattern.fail() || m_pimpl->m_pattern.eof() )\n                            break;\n\n                        result.message() << c;\n                    }\n\n                    result.message() << \"...\";\n\n                    // skip rest of the bytes. May help for further matching\n                    m_pimpl->m_pattern.ignore( \n                        static_cast<std::streamsize>( m_pimpl->m_synced_string.length() - i - suffix_size) );\n                    break;\n                }\n            }\n        }\n        else {\n            m_pimpl->m_pattern.write( m_pimpl->m_synced_string.c_str(),\n                                      static_cast<std::streamsize>( m_pimpl->m_synced_string.length() ) );\n            m_pimpl->m_pattern.flush();\n        }\n    }\n\n    if( flush_stream )\n        flush();\n\n    return result;\n}\n\n//____________________________________________________________________________//\n\nvoid\noutput_test_stream::flush()\n{\n    m_pimpl->m_synced_string.erase();\n\n#ifndef BOOST_NO_STRINGSTREAM\n    str( std::string() );\n#else\n    seekp( 0, std::ios::beg );\n#endif\n}\n\n//____________________________________________________________________________//\n\nstd::size_t\noutput_test_stream::length()\n{\n    sync();\n\n    return m_pimpl->m_synced_string.length();\n}\n\n//____________________________________________________________________________//\n\nvoid\noutput_test_stream::sync()\n{\n#ifdef BOOST_NO_STRINGSTREAM\n    m_pimpl->m_synced_string.assign( str(), pcount() );\n    freeze( false );\n#else\n    m_pimpl->m_synced_string = str();\n#endif\n}\n\n//____________________________________________________________________________//\n\n} // namespace test_tools\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_TEST_TOOLS_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/unit_test_log.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implemets Unit Test Log\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER\n#define BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/unit_test_log_formatter.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/execution_monitor.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n#include <boost/test/utils/basic_cstring/compare.hpp>\n\n#include <boost/test/output/compiler_log_formatter.hpp>\n#include <boost/test/output/xml_log_formatter.hpp>\n\n// Boost\n#include <boost/scoped_ptr.hpp>\n#include <boost/io/ios_state.hpp>\ntypedef ::boost::io::ios_base_all_saver io_saver_type;\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************             entry_value_collector            ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nentry_value_collector const&\nentry_value_collector::operator<<( lazy_ostream const& v ) const\n{\n    unit_test_log << v;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nentry_value_collector const& \nentry_value_collector::operator<<( const_string v ) const\n{\n    unit_test_log << v;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nentry_value_collector::~entry_value_collector()\n{\n    if( m_last )\n        unit_test_log << log::end();\n}\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                 unit_test_log                ************** //\n// ************************************************************************** //\n\nnamespace {\n\nstruct unit_test_log_impl {\n    // Constructor\n    unit_test_log_impl()\n    : m_stream( runtime_config::log_sink() )\n    , m_stream_state_saver( new io_saver_type( *m_stream ) )\n    , m_threshold_level( log_all_errors )\n    , m_log_formatter( new output::compiler_log_formatter )\n    {\n    }\n\n    // log data\n    typedef scoped_ptr<unit_test_log_formatter> formatter_ptr;\n    typedef scoped_ptr<io_saver_type>           saver_ptr;\n\n    std::ostream*       m_stream;\n    saver_ptr           m_stream_state_saver;\n    log_level           m_threshold_level;\n    formatter_ptr       m_log_formatter;\n\n    // entry data\n    bool                m_entry_in_progress;\n    bool                m_entry_started;\n    log_entry_data      m_entry_data;\n\n    // check point data\n    log_checkpoint_data m_checkpoint_data;\n\n    // helper functions\n    std::ostream&       stream()            { return *m_stream; }\n    void                set_checkpoint( const_string file, std::size_t line_num, const_string msg )\n    {\n        assign_op( m_checkpoint_data.m_message, msg, 0 );\n        m_checkpoint_data.m_file_name    = file;\n        m_checkpoint_data.m_line_num    = line_num;\n    }\n};\n\nunit_test_log_impl& s_log_impl() { static unit_test_log_impl the_inst; return the_inst; }\n\n} // local namespace\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_start( counter_t test_cases_amount )\n{\n    if( s_log_impl().m_threshold_level == log_nothing )\n        return;\n\n    s_log_impl().m_log_formatter->log_start( s_log_impl().stream(), test_cases_amount );\n\n    if( runtime_config::show_build_info() )\n        s_log_impl().m_log_formatter->log_build_info( s_log_impl().stream() );\n\n    s_log_impl().m_entry_in_progress = false;\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_finish()\n{\n    if( s_log_impl().m_threshold_level == log_nothing )\n        return;\n\n    s_log_impl().m_log_formatter->log_finish( s_log_impl().stream() );\n\n    s_log_impl().stream().flush();\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_aborted()\n{\n    BOOST_TEST_LOG_ENTRY( log_messages ) << \"Test is aborted\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_unit_start( test_unit const& tu )\n{\n    if( s_log_impl().m_threshold_level > log_test_units )\n        return;\n\n    if( s_log_impl().m_entry_in_progress )\n        *this << log::end();\n\n    s_log_impl().m_log_formatter->test_unit_start( s_log_impl().stream(), tu );\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_unit_finish( test_unit const& tu, unsigned long elapsed )\n{\n    if( s_log_impl().m_threshold_level > log_test_units )\n        return;\n\n    s_log_impl().m_checkpoint_data.clear();\n\n    if( s_log_impl().m_entry_in_progress )\n        *this << log::end();\n\n    s_log_impl().m_log_formatter->test_unit_finish( s_log_impl().stream(), tu, elapsed );\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_unit_skipped( test_unit const& tu )\n{\n    if( s_log_impl().m_threshold_level > log_test_units )\n        return;\n\n    if( s_log_impl().m_entry_in_progress )\n        *this << log::end();\n\n    s_log_impl().m_log_formatter->test_unit_skipped( s_log_impl().stream(), tu );\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::test_unit_aborted( test_unit const& )\n{\n    // do nothing\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::assertion_result( bool )\n{\n    // do nothing\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::exception_caught( execution_exception const& ex )\n{\n    log_level l =\n        ex.code() <= execution_exception::cpp_exception_error   ? log_cpp_exception_errors :\n        (ex.code() <= execution_exception::timeout_error        ? log_system_errors\n                                                                : log_fatal_errors );\n\n    if( l >= s_log_impl().m_threshold_level ) {\n        if( s_log_impl().m_entry_in_progress )\n            *this << log::end();\n\n        s_log_impl().m_log_formatter->log_exception( s_log_impl().stream(), s_log_impl().m_checkpoint_data, ex );\n    }\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::set_checkpoint( const_string file, std::size_t line_num, const_string msg )\n{\n    s_log_impl().set_checkpoint( file, line_num, msg );\n}\n\n//____________________________________________________________________________//\n\nchar\nset_unix_slash( char in )\n{\n    return in == '\\\\' ? '/' : in;\n}\n    \nunit_test_log_t&\nunit_test_log_t::operator<<( log::begin const& b )\n{\n    if( s_log_impl().m_entry_in_progress )\n        *this << log::end();\n\n    s_log_impl().m_stream_state_saver->restore();\n\n    s_log_impl().m_entry_data.clear();\n\n    assign_op( s_log_impl().m_entry_data.m_file_name, b.m_file_name, 0 );\n\n    // normalize file name\n    std::transform( s_log_impl().m_entry_data.m_file_name.begin(), s_log_impl().m_entry_data.m_file_name.end(),\n                    s_log_impl().m_entry_data.m_file_name.begin(),\n                    &set_unix_slash );\n\n    s_log_impl().m_entry_data.m_line_num = b.m_line_num;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nunit_test_log_t&\nunit_test_log_t::operator<<( log::end const& )\n{\n    if( s_log_impl().m_entry_in_progress )\n        s_log_impl().m_log_formatter->log_entry_finish( s_log_impl().stream() );\n\n    s_log_impl().m_entry_in_progress = false;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nunit_test_log_t&\nunit_test_log_t::operator<<( log_level l )\n{\n    s_log_impl().m_entry_data.m_level = l;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nut_detail::entry_value_collector\nunit_test_log_t::operator()( log_level l )\n{\n    *this << l;\n\n    return ut_detail::entry_value_collector();\n}\n\n//____________________________________________________________________________//\n\nbool\nunit_test_log_t::log_entry_start()\n{\n    if( s_log_impl().m_entry_in_progress ) \n        return true;\n\n    switch( s_log_impl().m_entry_data.m_level ) {\n    case log_successful_tests:\n        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,\n                                                       unit_test_log_formatter::BOOST_UTL_ET_INFO );\n        break;\n    case log_messages:\n        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,\n                                                       unit_test_log_formatter::BOOST_UTL_ET_MESSAGE );\n        break;\n    case log_warnings:\n        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,\n                                                       unit_test_log_formatter::BOOST_UTL_ET_WARNING );\n        break;\n    case log_all_errors:\n    case log_cpp_exception_errors:\n    case log_system_errors:\n        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,\n                                                       unit_test_log_formatter::BOOST_UTL_ET_ERROR );\n        break;\n    case log_fatal_errors:\n        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,\n                                                       unit_test_log_formatter::BOOST_UTL_ET_FATAL_ERROR );\n        break;\n    case log_nothing:\n    case log_test_units:\n    case invalid_log_level:\n        return false;\n    }\n\n    s_log_impl().m_entry_in_progress = true;\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\nunit_test_log_t&\nunit_test_log_t::operator<<( const_string value )\n{\n    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )\n        s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nunit_test_log_t&\nunit_test_log_t::operator<<( lazy_ostream const& value )\n{\n    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )\n        s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::set_stream( std::ostream& str )\n{\n    if( s_log_impl().m_entry_in_progress )\n        return;\n\n    s_log_impl().m_stream = &str;\n    s_log_impl().m_stream_state_saver.reset( new io_saver_type( str ) );\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::set_threshold_level( log_level lev )\n{\n    if( s_log_impl().m_entry_in_progress || lev == invalid_log_level )\n        return;\n\n    s_log_impl().m_threshold_level = lev;\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::set_format( output_format log_format )\n{\n    if( s_log_impl().m_entry_in_progress )\n        return;\n\n    if( log_format == CLF )\n        set_formatter( new output::compiler_log_formatter );\n    else\n        set_formatter( new output::xml_log_formatter );\n}\n\n//____________________________________________________________________________//\n\nvoid\nunit_test_log_t::set_formatter( unit_test_log_formatter* the_formatter )\n{\n    s_log_impl().m_log_formatter.reset( the_formatter );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************            unit_test_log_formatter           ************** //\n// ************************************************************************** //\n\nvoid\nunit_test_log_formatter::log_entry_value( std::ostream& ostr, lazy_ostream const& value )\n{\n    log_entry_value( ostr, (wrap_stringstream().ref() << value).str() );\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/unit_test_main.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : main function implementation for Unit Test Framework\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER\n#define BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/framework.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/results_reporter.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n#if !defined(__BORLANDC__) && !BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) && !BOOST_WORKAROUND( __SUNPRO_CC, < 0x5100 )\n#define BOOST_TEST_SUPPORT_RUN_BY_NAME\n#include <boost/test/utils/iterator/token_iterator.hpp>\n#endif\n\n// Boost\n#include <boost/cstdlib.hpp>\n#include <boost/bind.hpp>\n\n// STL\n#include <stdexcept>\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                 test_case_filter             ************** //\n// ************************************************************************** //\n\nclass test_case_filter : public test_tree_visitor {\npublic:\n    struct single_filter {\n        single_filter( const_string in )\n        {\n            if( in == \"*\" )\n                m_kind  = SFK_ALL;\n            else if( first_char( in ) == '*' && last_char( in ) == '*' ) {\n                m_kind  = SFK_SUBSTR;\n                m_value = in.substr( 1, in.size()-1 );\n            }\n            else if( first_char( in ) == '*' ) {\n                m_kind  = SFK_TRAILING;\n                m_value = in.substr( 1 );\n            }\n            else if( last_char( in ) == '*' ) {\n                m_kind  = SFK_LEADING;\n                m_value = in.substr( 0, in.size()-1 );\n            }\n            else {\n                m_kind  = SFK_MATCH;\n                m_value = in;\n            }\n        };\n\n        bool            pass( test_unit const& tu ) const\n        {\n            const_string name( tu.p_name );\n    \n            switch( m_kind ) {\n            default:\n            case SFK_ALL:\n                return true;\n\n            case SFK_LEADING:\n                return name.substr( 0, m_value.size() ) == m_value;\n\n            case SFK_TRAILING:\n                return name.size() >= m_value.size() && name.substr( name.size() - m_value.size() ) == m_value;\n\n            case SFK_SUBSTR:\n                return name.find( m_value ) != const_string::npos;\n\n            case SFK_MATCH:\n                return m_value == tu.p_name.get();\n            }\n        }\n        enum kind { SFK_ALL, SFK_LEADING, SFK_TRAILING, SFK_SUBSTR, SFK_MATCH };\n\n        kind            m_kind;\n        const_string    m_value;\n    };\n    // Constructor\n#ifndef BOOST_TEST_SUPPORT_RUN_BY_NAME\n    explicit        test_case_filter( const_string ) : m_depth( 0 ) {}\n#else\n    explicit        test_case_filter( const_string tc_to_run ) \n    : m_depth( 0 )\n    {\n        string_token_iterator tit( tc_to_run, (dropped_delimeters = \"/\", kept_delimeters = dt_none) );\n\n        while( tit != string_token_iterator() ) {\n            m_filters.push_back( \n                std::vector<single_filter>( string_token_iterator( *tit, (dropped_delimeters = \",\", kept_delimeters = dt_none)  ), \n                                            string_token_iterator() ) );\n\n            ++tit;           \n        }\n    }\n#endif\n    \n    void            filter_unit( test_unit const& tu )\n    {\n        if( (++m_depth - 1) > m_filters.size() ) {\n            tu.p_enabled.value = true;\n            return;\n        }\n\n        if( m_depth == 1 )\n            return;\n\n        std::vector<single_filter> const& filters = m_filters[m_depth-2];\n\n        tu.p_enabled.value =\n            std::find_if( filters.begin(), filters.end(), bind( &single_filter::pass, _1, boost::ref(tu) ) ) != filters.end();\n    }\n\n    // test tree visitor interface\n    virtual void    visit( test_case const& tc )\n    {\n        if( m_depth < m_filters.size() ) {\n            tc.p_enabled.value = false;\n            return;\n        }\n\n        filter_unit( tc );\n\n        --m_depth;\n    }\n\n    virtual bool    test_suite_start( test_suite const& ts )\n    { \n        filter_unit( ts );\n\n        if( !ts.p_enabled )\n            --m_depth;\n\n        return ts.p_enabled;\n    }\n\n    virtual void    test_suite_finish( test_suite const& )  { --m_depth; }\n\nprivate:\n    // Data members\n    std::vector<std::vector<single_filter> >    m_filters;\n    unsigned                                    m_depth;\n};\n\n// ************************************************************************** //\n// **************                  unit_test_main              ************** //\n// ************************************************************************** //\n\nint BOOST_TEST_DECL\nunit_test_main( init_unit_test_func init_func, int argc, char* argv[] )\n{\n    try {\n        framework::init( init_func, argc, argv );\n\n        if( !runtime_config::test_to_run().is_empty() ) {\n            test_case_filter filter( runtime_config::test_to_run() );\n\n            traverse_test_tree( framework::master_test_suite().p_id, filter );\n        }\n\n        framework::run();\n\n        results_reporter::make_report();\n\n        return runtime_config::no_result_code() \n                    ? boost::exit_success\n                    : results_collector.results( framework::master_test_suite().p_id ).result_code();\n    }\n    catch( framework::nothing_to_test const& ) {\n        return boost::exit_success;\n    }\n    catch( framework::internal_error const& ex ) {\n        results_reporter::get_stream() << \"Boost.Test framework internal error: \" << ex.what() << std::endl;\n        \n        return boost::exit_exception_failure;\n    }\n    catch( framework::setup_error const& ex ) {\n        results_reporter::get_stream() << \"Test setup error: \" << ex.what() << std::endl;\n        \n        return boost::exit_exception_failure;\n    }\n    catch( ... ) {\n        results_reporter::get_stream() << \"Boost.Test framework internal error: unknown reason\" << std::endl;\n        \n        return boost::exit_exception_failure;\n    }\n}\n\n} // namespace unit_test\n\n} // namespace boost\n\n#if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)\n\n// ************************************************************************** //\n// **************        main function for tests using lib     ************** //\n// ************************************************************************** //\n\nint BOOST_TEST_CALL_DECL\nmain( int argc, char* argv[] )\n{\n    // prototype for user's unit test init function\n#ifdef BOOST_TEST_ALTERNATIVE_INIT_API\n    extern bool init_unit_test();\n\n    boost::unit_test::init_unit_test_func init_func = &init_unit_test;\n#else\n    extern ::boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] );\n\n    boost::unit_test::init_unit_test_func init_func = &init_unit_test_suite;\n#endif\n\n    return ::boost::unit_test::unit_test_main( init_func, argc, argv );\n}\n\n#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/unit_test_monitor.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : implements specific subclass of Executon Monitor used by Unit\n//  Test Framework to monitor test cases run.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER\n#define BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/unit_test_monitor.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/test_tools.hpp>\n#include <boost/test/framework.hpp>\n\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace {\n\ntemplate<typename F>\nstruct zero_return_wrapper_t {\n    explicit zero_return_wrapper_t( F const& f ) : m_f( f ) {}\n    \n    int operator()() { m_f(); return 0; }\n    \n    F const& m_f;\n};\n\ntemplate<typename F>\nzero_return_wrapper_t<F>\nzero_return_wrapper( F const& f )\n{\n    return zero_return_wrapper_t<F>( f );\n}\n\n}\n\n// ************************************************************************** //\n// **************               unit_test_monitor              ************** //\n// ************************************************************************** //\n\nunit_test_monitor_t::error_level\nunit_test_monitor_t::execute_and_translate( test_case const& tc )\n{\n    try {\n        p_catch_system_errors.value     = runtime_config::catch_sys_errors();\n        p_timeout.value                 = tc.p_timeout.get();\n        p_auto_start_dbg.value          = runtime_config::auto_start_dbg();\n        p_use_alt_stack.value           = runtime_config::use_alt_stack();\n        p_detect_fp_exceptions.value    = runtime_config::detect_fp_exceptions();\n\n        execute( callback0<int>( zero_return_wrapper( tc.test_func() ) ) );\n    }\n    catch( execution_exception const& ex ) {\n        framework::exception_caught( ex );\n        framework::test_unit_aborted( framework::current_test_case() );\n\n        // translate execution_exception::error_code to error_level\n        switch( ex.code() ) {\n        case execution_exception::no_error:             return test_ok;\n        case execution_exception::user_error:           return unexpected_exception;\n        case execution_exception::cpp_exception_error:  return unexpected_exception;\n        case execution_exception::system_error:         return os_exception;\n        case execution_exception::timeout_error:        return os_timeout;\n        case execution_exception::user_fatal_error:\n        case execution_exception::system_fatal_error:   return fatal_error;\n        default:                                        return unexpected_exception;\n        }\n    }\n\n    return test_ok;\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/unit_test_parameters.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 63640 $\n//\n//  Description : simple implementation for Unit Test Framework parameter\n//  handling routines. May be rewritten in future to use some kind of\n//  command-line arguments parsing facility and environment variable handling\n//  facility\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER\n#define BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER\n\n// Boost.Test\n#include <boost/test/detail/unit_test_parameters.hpp>\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n#include <boost/test/utils/basic_cstring/compare.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/fixed_mapping.hpp>\n#include <boost/test/debug.hpp>\n#include <boost/test/framework.hpp>\n\n// Boost.Runtime.Param\n#include <boost/test/utils/runtime/cla/dual_name_parameter.hpp>\n#include <boost/test/utils/runtime/cla/parser.hpp>\n\nnamespace rt  = boost::runtime;\nnamespace cla = rt::cla;\n\n\n#ifndef UNDER_CE\n#include <boost/test/utils/runtime/env/variable.hpp>\n\nnamespace env = rt::env;\n#endif\n\n\n// Boost\n#include <boost/config.hpp>\n#include <boost/test/detail/suppress_warnings.hpp>\n#include <boost/lexical_cast.hpp>\n#include <boost/test/detail/enable_warnings.hpp>\n\n// STL\n#include <map>\n#include <cstdlib>\n#include <iostream>\n#include <fstream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n# ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::getenv; using ::strncmp; using ::strcmp; }\n# endif\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************    input operations for unit_test's enums    ************** //\n// ************************************************************************** //\n\nstd::istream&\noperator>>( std::istream& in, unit_test::log_level& ll )\n{\n    static fixed_mapping<const_string,unit_test::log_level,case_ins_less<char const> > log_level_name(\n        \"all\"           , log_successful_tests,\n        \"success\"       , log_successful_tests,\n        \"test_suite\"    , log_test_units,\n        \"unit_scope\"    , log_test_units,\n        \"message\"       , log_messages,\n        \"warning\"       , log_warnings,\n        \"error\"         , log_all_errors,\n        \"cpp_exception\" , log_cpp_exception_errors,\n        \"system_error\"  , log_system_errors,\n        \"fatal_error\"   , log_fatal_errors,\n        \"nothing\"       , log_nothing,\n\n        invalid_log_level\n        );\n\n    std::string val;\n    in >> val;\n\n    ll = log_level_name[val];\n    BOOST_TEST_SETUP_ASSERT( ll != unit_test::invalid_log_level, \"invalid log level \" + val );\n\n    return in;\n}\n\n//____________________________________________________________________________//\n\nstd::istream&\noperator>>( std::istream& in, unit_test::report_level& rl )\n{\n    fixed_mapping<const_string,unit_test::report_level,case_ins_less<char const> > report_level_name (\n        \"confirm\",  CONFIRMATION_REPORT,\n        \"short\",    SHORT_REPORT,\n        \"detailed\", DETAILED_REPORT,\n        \"no\",       NO_REPORT,\n\n        INV_REPORT_LEVEL\n        );\n\n    std::string val;\n    in >> val;\n\n    rl = report_level_name[val];\n    BOOST_TEST_SETUP_ASSERT( rl != INV_REPORT_LEVEL, \"invalid report level \" + val );\n\n    return in;\n}\n\n//____________________________________________________________________________//\n\nstd::istream&\noperator>>( std::istream& in, unit_test::output_format& of )\n{\n    fixed_mapping<const_string,unit_test::output_format,case_ins_less<char const> > output_format_name (\n        \"HRF\", unit_test::CLF,\n        \"CLF\", unit_test::CLF,\n        \"XML\", unit_test::XML,\n\n        unit_test::INV_OF\n        );\n\n    std::string val;\n    in >> val;\n\n    of = output_format_name[val];\n    BOOST_TEST_SETUP_ASSERT( of != unit_test::INV_OF, \"invalid output format \" + val );\n\n    return in;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                 runtime_config               ************** //\n// ************************************************************************** //\n\nnamespace runtime_config {\n\nnamespace {\n\n// framework parameters and corresponding command-line arguments\nstd::string AUTO_START_DBG    = \"auto_start_dbg\";\nstd::string BREAK_EXEC_PATH   = \"break_exec_path\";\nstd::string BUILD_INFO        = \"build_info\";\nstd::string CATCH_SYS_ERRORS  = \"catch_system_errors\";\nstd::string DETECT_FP_EXCEPT  = \"detect_fp_exceptions\";\nstd::string DETECT_MEM_LEAKS  = \"detect_memory_leaks\";\nstd::string LOG_FORMAT        = \"log_format\";\nstd::string LOG_LEVEL         = \"log_level\";\nstd::string LOG_SINK          = \"log_sink\";\nstd::string OUTPUT_FORMAT     = \"output_format\";\nstd::string RANDOM_SEED       = \"random\";\nstd::string REPORT_FORMAT     = \"report_format\";\nstd::string REPORT_LEVEL      = \"report_level\";\nstd::string REPORT_SINK       = \"report_sink\";\nstd::string RESULT_CODE       = \"result_code\";\nstd::string TESTS_TO_RUN      = \"run_test\";\nstd::string SAVE_TEST_PATTERN = \"save_pattern\";\nstd::string SHOW_PROGRESS     = \"show_progress\";\nstd::string USE_ALT_STACK     = \"use_alt_stack\";\n\nfixed_mapping<const_string,const_string> parameter_2_env_var(\n    AUTO_START_DBG    , \"BOOST_TEST_AUTO_START_DBG\",\n    BREAK_EXEC_PATH   , \"BOOST_TEST_BREAK_EXEC_PATH\",\n    BUILD_INFO        , \"BOOST_TEST_BUILD_INFO\",\n    CATCH_SYS_ERRORS  , \"BOOST_TEST_CATCH_SYSTEM_ERRORS\",\n    DETECT_FP_EXCEPT  , \"BOOST_TEST_DETECT_FP_EXCEPTIONS\",\n    DETECT_MEM_LEAKS  , \"BOOST_TEST_DETECT_MEMORY_LEAK\",\n    LOG_FORMAT        , \"BOOST_TEST_LOG_FORMAT\",\n    LOG_LEVEL         , \"BOOST_TEST_LOG_LEVEL\",\n    LOG_SINK          , \"BOOST_TEST_LOG_SINK\",\n    OUTPUT_FORMAT     , \"BOOST_TEST_OUTPUT_FORMAT\",\n    RANDOM_SEED       , \"BOOST_TEST_RANDOM\",\n    REPORT_FORMAT     , \"BOOST_TEST_REPORT_FORMAT\",\n    REPORT_LEVEL      , \"BOOST_TEST_REPORT_LEVEL\",\n    REPORT_SINK       , \"BOOST_TEST_REPORT_SINK\",\n    RESULT_CODE       , \"BOOST_TEST_RESULT_CODE\",\n    TESTS_TO_RUN      , \"BOOST_TESTS_TO_RUN\",\n    SAVE_TEST_PATTERN , \"BOOST_TEST_SAVE_PATTERN\",\n    SHOW_PROGRESS     , \"BOOST_TEST_SHOW_PROGRESS\",\n    USE_ALT_STACK     , \"BOOST_TEST_USE_ALT_STACK\",\n\n    \"\"\n);\n\n//____________________________________________________________________________//\n\n// storage for the CLAs\ncla::parser     s_cla_parser;\nstd::string     s_empty;\n\noutput_format   s_report_format;\noutput_format   s_log_format;\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\nT\nretrieve_parameter( const_string parameter_name, cla::parser const& s_cla_parser, T const& default_value = T(), T const& optional_value = T() )\n{\n    rt::const_argument_ptr arg = s_cla_parser[parameter_name];\n    if( arg ) {\n        if( rtti::type_id<T>() == rtti::type_id<bool>() ||\n            !static_cast<cla::parameter const&>( arg->p_formal_parameter.get() ).p_optional_value )\n            return s_cla_parser.get<T>( parameter_name );\n\n        optional<T> val = s_cla_parser.get<optional<T> >( parameter_name );\n        if( val )\n            return *val;\n        else\n            return optional_value;\n    }\n\n    boost::optional<T> v;\n\n#ifndef UNDER_CE\n    env::get( parameter_2_env_var[parameter_name], v );\n#endif\n\n    if( v )\n        return *v;\n    else\n        return default_value;\n}\n\n//____________________________________________________________________________//\n\n} // local namespace \n\nvoid\ninit( int& argc, char** argv )\n{\n    using namespace cla;\n\n    try {\n        s_cla_parser - cla::ignore_mismatch\n          << cla::dual_name_parameter<bool>( AUTO_START_DBG + \"|d\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Automatically starts debugger if system level error (signal) occurs\")\n          << cla::named_parameter<std::string>( BREAK_EXEC_PATH )\n            - (cla::prefix = \"--\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"For the exception safety testing allows to break at specific execution path\")\n          << cla::dual_name_parameter<bool>( BUILD_INFO + \"|i\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Shows library build information\" )\n          << cla::dual_name_parameter<bool>( CATCH_SYS_ERRORS + \"|s\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Allows to switch between catching and ignoring system errors (signals)\")\n          << cla::named_parameter<bool>( DETECT_FP_EXCEPT )\n            - (cla::prefix = \"--\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"Allows to switch between catching and ignoring floating point exceptions\")\n          << cla::named_parameter<long>( DETECT_MEM_LEAKS )\n            - (cla::prefix = \"--\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"Allows to switch between catching and ignoring memory leaks\")\n          << cla::dual_name_parameter<unit_test::output_format>( LOG_FORMAT + \"|f\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies log format\")\n          << cla::dual_name_parameter<unit_test::log_level>( LOG_LEVEL + \"|l\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies log level\")\n          << cla::dual_name_parameter<std::string>( LOG_SINK + \"|k\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies log sink:stdout(default),stderr or file name\")\n          << cla::dual_name_parameter<unit_test::output_format>( OUTPUT_FORMAT + \"|o\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies output format (both log and report)\")\n          << cla::dual_name_parameter<int>( RANDOM_SEED + \"|a\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,cla::optional_value,\n               cla::description = \"Allows to switch between sequential and random order of test units execution.\\n\"\n                                  \"Optionally allows to specify concrete seed for random number generator\")\n          << cla::dual_name_parameter<unit_test::output_format>( REPORT_FORMAT + \"|m\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies report format\")\n          << cla::dual_name_parameter<unit_test::report_level>(REPORT_LEVEL + \"|r\")\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies report level\")\n          << cla::dual_name_parameter<std::string>( REPORT_SINK + \"|e\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Specifies report sink:stderr(default),stdout or file name\")\n          << cla::dual_name_parameter<bool>( RESULT_CODE + \"|c\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Allows to disable test modules's result code generation\")\n          << cla::dual_name_parameter<std::string>( TESTS_TO_RUN + \"|t\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Allows to filter which test units to run\")\n          << cla::named_parameter<bool>( SAVE_TEST_PATTERN )\n            - (cla::prefix = \"--\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"Allows to switch between saving and matching against test pattern file\")\n          << cla::dual_name_parameter<bool>( SHOW_PROGRESS + \"|p\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=| \",cla::guess_name,cla::optional,\n               cla::description = \"Turns on progress display\")\n          << cla::named_parameter<bool>( USE_ALT_STACK )\n            - (cla::prefix = \"--\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"Turns on/off usage of an alternative stack for signal handling\")\n\n          << cla::dual_name_parameter<bool>( \"help|?\" )\n            - (cla::prefix = \"--|-\",cla::separator = \"=\",cla::guess_name,cla::optional,\n               cla::description = \"this help message\")\n            ;\n\n        s_cla_parser.parse( argc, argv );\n\n        if( s_cla_parser[\"help\"] ) {\n            s_cla_parser.help( std::cout );\n            throw framework::nothing_to_test();\n        }\n\n        s_report_format     = retrieve_parameter( REPORT_FORMAT, s_cla_parser, unit_test::CLF );\n        s_log_format        = retrieve_parameter( LOG_FORMAT, s_cla_parser, unit_test::CLF );\n\n        unit_test::output_format of = retrieve_parameter( OUTPUT_FORMAT, s_cla_parser, unit_test::INV_OF );\n\n        if( of != unit_test::INV_OF )\n            s_report_format = s_log_format = of;\n    }\n    catch( rt::logic_error const& ex ) {\n        std::ostringstream err;\n        \n        err << \"Fail to process runtime parameters: \" << ex.msg() << std::endl;\n        s_cla_parser.usage( err );\n\n        throw framework::setup_error( err.str() );\n    }\n}\n\n//____________________________________________________________________________//\n\nunit_test::log_level\nlog_level()\n{\n    return retrieve_parameter( LOG_LEVEL, s_cla_parser, unit_test::log_all_errors );\n}\n\n//____________________________________________________________________________//\n\nbool\nno_result_code()\n{\n    return !retrieve_parameter( RESULT_CODE, s_cla_parser, true );\n}\n\n//____________________________________________________________________________//\n\nunit_test::report_level\nreport_level()\n{\n    return retrieve_parameter( REPORT_LEVEL, s_cla_parser, unit_test::CONFIRMATION_REPORT );\n}\n\n//____________________________________________________________________________//\n\nconst_string\ntest_to_run()\n{\n    static std::string s_test_to_run = retrieve_parameter( TESTS_TO_RUN, s_cla_parser, s_empty );\n\n    return s_test_to_run;\n}\n\n//____________________________________________________________________________//\n\nconst_string\nbreak_exec_path()\n{\n    static std::string s_break_exec_path = retrieve_parameter( BREAK_EXEC_PATH, s_cla_parser, s_empty );\n\n    return s_break_exec_path;\n}\n\n//____________________________________________________________________________//\n\nbool\nsave_pattern()\n{\n    return retrieve_parameter( SAVE_TEST_PATTERN, s_cla_parser, false );\n}\n\n//____________________________________________________________________________//\n\nbool\nshow_progress()\n{\n    return retrieve_parameter( SHOW_PROGRESS, s_cla_parser, false );\n}\n\n//____________________________________________________________________________//\n\nbool\nshow_build_info()\n{\n    return retrieve_parameter( BUILD_INFO, s_cla_parser, false );\n}\n\n//____________________________________________________________________________//\n\nbool\ncatch_sys_errors()\n{\n    return retrieve_parameter( CATCH_SYS_ERRORS, s_cla_parser, \n#ifdef BOOST_TEST_DEFAULTS_TO_CORE_DUMP\n        false\n#else\n        true \n#endif\n        );\n}\n\n//____________________________________________________________________________//\n\nbool\nauto_start_dbg()\n{\n    // !! set debugger as an option\n    return retrieve_parameter( AUTO_START_DBG, s_cla_parser, false );\n;\n}\n\n//____________________________________________________________________________//\n\nbool\nuse_alt_stack()\n{\n    return retrieve_parameter( USE_ALT_STACK, s_cla_parser, true );\n}\n\n//____________________________________________________________________________//\n\nbool\ndetect_fp_exceptions()\n{\n    return retrieve_parameter( DETECT_FP_EXCEPT, s_cla_parser, false );\n}\n\n//____________________________________________________________________________//\n\noutput_format\nreport_format()\n{\n    return s_report_format;\n}\n\n//____________________________________________________________________________//\n\noutput_format\nlog_format()\n{\n    return s_log_format;\n}\n\n//____________________________________________________________________________//\n\nstd::ostream*\nreport_sink()\n{\n    std::string sink_name = retrieve_parameter( REPORT_SINK, s_cla_parser, s_empty );\n\n    if( sink_name.empty() || sink_name == \"stderr\" )\n        return &std::cerr;    \n    \n    if( sink_name == \"stdout\" )\n        return &std::cout;\n\n    static std::ofstream log_file( sink_name.c_str() );\n    return &log_file;\n}\n\n//____________________________________________________________________________//\n\nstd::ostream*\nlog_sink()\n{\n    std::string sink_name = retrieve_parameter( LOG_SINK, s_cla_parser, s_empty );\n\n    if( sink_name.empty() || sink_name == \"stdout\" )\n        return &std::cout;    \n\n    if( sink_name == \"stderr\" )\n        return &std::cerr;    \n\n    static std::ofstream report_file( sink_name.c_str() );\n    return &report_file;\n}\n\n//____________________________________________________________________________//\n\nlong\ndetect_memory_leaks()\n{\n    return retrieve_parameter( DETECT_MEM_LEAKS, s_cla_parser, static_cast<long>(1) );\n}\n\n//____________________________________________________________________________//\n\nint\nrandom_seed()\n{\n    return retrieve_parameter( RANDOM_SEED, s_cla_parser, 0, 1 );\n}\n\n//____________________________________________________________________________//\n\n} // namespace runtime_config\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/unit_test_suite.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : privides core implementation for Unit Test Framework.\n//                Extensions can be provided in separate files\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER\n#define BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER\n\n// Boost.Test\n#include <boost/detail/workaround.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/utils/foreach.hpp>\n#include <boost/test/results_collector.hpp>\n#include <boost/test/detail/unit_test_parameters.hpp>\n\n// Boost\n#include <boost/timer.hpp>\n\n// STL\n#include <algorithm>\n#include <vector>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \\\n    BOOST_WORKAROUND(_STLPORT_VERSION, <= 0x450) \\\n    /**/\n    using std::rand; // rand is in std and random_shuffle is in _STL\n#endif\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                   test_unit                  ************** //\n// ************************************************************************** //\n\ntest_unit::test_unit( const_string name, test_unit_type t )\n: p_type( t )\n, p_type_name( t == tut_case ? \"case\" : \"suite\" )\n, p_id( INV_TEST_UNIT_ID )\n, p_name( std::string( name.begin(), name.size() ) )\n, p_enabled( true )\n{\n}\n\n//____________________________________________________________________________//\n\ntest_unit::~test_unit()\n{\n    framework::deregister_test_unit( this );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_unit::depends_on( test_unit* tu )\n{\n    m_dependencies.push_back( tu->p_id );\n}\n\n//____________________________________________________________________________//\n\nbool\ntest_unit::check_dependencies() const\n{\n    BOOST_TEST_FOREACH( test_unit_id, tu_id, m_dependencies ) {\n        if( !unit_test::results_collector.results( tu_id ).passed() )\n            return false;\n    }\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_unit::increase_exp_fail( unsigned num )\n{\n    p_expected_failures.value += num;\n\n    if( p_parent_id != 0 )\n        framework::get<test_suite>( p_parent_id ).increase_exp_fail( num );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                   test_case                  ************** //\n// ************************************************************************** //\n\ntest_case::test_case( const_string name, callback0<> const& test_func )\n: test_unit( name, static_cast<test_unit_type>(type) )\n, m_test_func( test_func )\n{\n     // !! weirdest MSVC BUG; try to remove this statement; looks like it eats first token of next statement   \n#if BOOST_WORKAROUND(BOOST_MSVC,<1300)   \n     0;   \n#endif \n    framework::register_test_unit( this );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  test_suite                  ************** //\n// ************************************************************************** //\n\n//____________________________________________________________________________//\n\ntest_suite::test_suite( const_string name )\n: test_unit( name, static_cast<test_unit_type>(type) )\n{\n    framework::register_test_unit( this );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_suite::add( test_unit* tu, counter_t expected_failures, unsigned timeout )\n{\n    if( timeout != 0 )\n        tu->p_timeout.value = timeout;\n\n    m_members.push_back( tu->p_id );\n    tu->p_parent_id.value = p_id;\n\n    if( tu->p_expected_failures )\n        increase_exp_fail( tu->p_expected_failures );\n\n    if( expected_failures )\n        tu->increase_exp_fail( expected_failures );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_suite::add( test_unit_generator const& gen, unsigned timeout )\n{\n    test_unit* tu;\n    while((tu = gen.next(), tu))\n        add( tu, 0, timeout );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntest_suite::remove( test_unit_id id )\n{\n    std::vector<test_unit_id>::iterator it = std::find( m_members.begin(), m_members.end(), id );\n\n    if( it != m_members.end() )\n        m_members.erase( it );\n}\n\n//____________________________________________________________________________//\n\ntest_unit_id\ntest_suite::get( const_string tu_name ) const\n{\n    BOOST_TEST_FOREACH( test_unit_id, id, m_members ) {\n        if( tu_name == framework::get( id, ut_detail::test_id_2_unit_type( id ) ).p_name.get() )\n            return id;\n    }\n\n    return INV_TEST_UNIT_ID;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               traverse_test_tree             ************** //\n// ************************************************************************** //\n\nvoid\ntraverse_test_tree( test_case const& tc, test_tree_visitor& V )\n{\n    if( tc.p_enabled )\n    V.visit( tc );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntraverse_test_tree( test_suite const& suite, test_tree_visitor& V )\n{\n    if( !suite.p_enabled || !V.test_suite_start( suite ) )\n        return;\n\n    try {\n        if( runtime_config::random_seed() == 0 ) {\n            BOOST_TEST_FOREACH( test_unit_id, id, suite.m_members )\n                traverse_test_tree( id, V );\n        }\n        else {\n            std::vector<test_unit_id> members( suite.m_members );\n            std::random_shuffle( members.begin(), members.end() );\n            BOOST_TEST_FOREACH( test_unit_id, id, members )\n                traverse_test_tree( id, V );\n        }\n        \n    } catch( test_being_aborted const& ) {\n        V.test_suite_finish( suite );\n        framework::test_unit_aborted( suite );\n\n        throw;\n    }\n\n    V.test_suite_finish( suite );\n}\n\n//____________________________________________________________________________//\n\nvoid\ntraverse_test_tree( test_unit_id id, test_tree_visitor& V )\n{\n    if( ut_detail::test_id_2_unit_type( id ) == tut_case )\n        traverse_test_tree( framework::get<test_case>( id ), V );\n    else\n        traverse_test_tree( framework::get<test_suite>( id ), V );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                test_case_counter             ************** //\n// ************************************************************************** //\n\nvoid\ntest_case_counter::visit( test_case const& tc )\n{\n    if( tc.p_enabled )\n        ++p_count.value;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               object generators              ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nstd::string\nnormalize_test_case_name( const_string name )\n{\n    return ( name[0] == '&'\n                ? std::string( name.begin()+1, name.size()-1 )\n                : std::string( name.begin(), name.size() ) );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************           auto_test_unit_registrar           ************** //\n// ************************************************************************** //\n\nauto_test_unit_registrar::auto_test_unit_registrar( test_case* tc, counter_t exp_fail )\n{\n    curr_ts_store().back()->add( tc, exp_fail );\n}\n\n//____________________________________________________________________________//\n\nauto_test_unit_registrar::auto_test_unit_registrar( const_string ts_name )\n{\n    test_unit_id id = curr_ts_store().back()->get( ts_name );\n\n    test_suite* ts;\n\n    if( id != INV_TEST_UNIT_ID ) {\n        ts = &framework::get<test_suite>( id ); // !! test for invalid tu type\n        BOOST_ASSERT( ts->p_parent_id == curr_ts_store().back()->p_id );\n    }\n    else {\n        ts = new test_suite( ts_name );\n        curr_ts_store().back()->add( ts );\n    }\n\n    curr_ts_store().push_back( ts );\n}\n\n//____________________________________________________________________________//\n\nauto_test_unit_registrar::auto_test_unit_registrar( test_unit_generator const& tc_gen )\n{\n    curr_ts_store().back()->add( tc_gen );\n}\n\n//____________________________________________________________________________//\n\nauto_test_unit_registrar::auto_test_unit_registrar( int )\n{\n    if( curr_ts_store().size() == 0 )\n        return; // report error?\n\n    curr_ts_store().pop_back();\n}\n\n//____________________________________________________________________________//\n\nstd::list<test_suite*>&\nauto_test_unit_registrar::curr_ts_store()\n{\n    static std::list<test_suite*> inst( 1, &framework::master_test_suite() );\n    return inst;\n}\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                global_fixture                ************** //\n// ************************************************************************** //\n\nglobal_fixture::global_fixture()\n{\n    framework::register_observer( *this );\n} \n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/xml_log_formatter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implements XML Log formatter\n// ***************************************************************************\n\n#ifndef BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER\n#define BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/output/xml_log_formatter.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/framework.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n#include <boost/test/utils/xml_printer.hpp>\n\n// Boost\n#include <boost/version.hpp>\n\n// STL\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\nstatic const_string tu_type_name( test_unit const& tu )\n{\n    return tu.p_type == tut_case ? \"TestCase\" : \"TestSuite\";\n}\n\n// ************************************************************************** //\n// **************               xml_log_formatter              ************** //\n// ************************************************************************** //\n\nvoid\nxml_log_formatter::log_start( std::ostream& ostr, counter_t )\n{\n    ostr  << \"<TestLog>\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_finish( std::ostream& ostr )\n{\n    ostr  << \"</TestLog>\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_build_info( std::ostream& ostr )\n{\n    ostr  << \"<BuildInfo\"\n            << \" platform\"  << attr_value() << BOOST_PLATFORM\n            << \" compiler\"  << attr_value() << BOOST_COMPILER\n            << \" stl\"       << attr_value() << BOOST_STDLIB\n            << \" boost=\\\"\"  << BOOST_VERSION/100000     << \".\"\n                            << BOOST_VERSION/100 % 1000 << \".\"\n                            << BOOST_VERSION % 100      << '\\\"'\n            << \"/>\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::test_unit_start( std::ostream& ostr, test_unit const& tu )\n{\n    ostr << \"<\" << tu_type_name( tu ) << \" name\" << attr_value() << tu.p_name.get() << \">\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::test_unit_finish( std::ostream& ostr, test_unit const& tu, unsigned long elapsed )\n{\n    if( tu.p_type == tut_case )\n        ostr << \"<TestingTime>\" << elapsed << \"</TestingTime>\";\n        \n    ostr << \"</\" << tu_type_name( tu ) << \">\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::test_unit_skipped( std::ostream& ostr, test_unit const& tu )\n{\n    ostr << \"<\" << tu_type_name( tu )\n         << \" name\"    << attr_value() << tu.p_name.get()\n         << \" skipped\" << attr_value() << \"yes\"\n         << \"/>\";\n}\n    \n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_exception( std::ostream& ostr, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )\n{\n    execution_exception::location const& loc = ex.where();\n\n    ostr << \"<Exception file\" << attr_value() << loc.m_file_name\n         << \" line\"           << attr_value() << loc.m_line_num;\n\n    if( !loc.m_function.is_empty() )\n        ostr << \" function\"   << attr_value() << loc.m_function;\n\n    ostr << \">\" << cdata() << ex.what();\n\n    if( !checkpoint_data.m_file_name.is_empty() ) {\n        ostr << \"<LastCheckpoint file\" << attr_value() << checkpoint_data.m_file_name\n             << \" line\"                << attr_value() << checkpoint_data.m_line_num\n             << \">\"\n             << cdata() << checkpoint_data.m_message\n             << \"</LastCheckpoint>\";\n    }\n\n    ostr << \"</Exception>\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const& entry_data, log_entry_types let )\n{\n    static literal_string xml_tags[] = { \"Info\", \"Message\", \"Warning\", \"Error\", \"FatalError\" };\n\n    m_curr_tag = xml_tags[let];\n    ostr << '<' << m_curr_tag\n         << BOOST_TEST_L( \" file\" ) << attr_value() << entry_data.m_file_name\n         << BOOST_TEST_L( \" line\" ) << attr_value() << entry_data.m_line_num\n         << BOOST_TEST_L( \"><![CDATA[\" );\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_entry_value( std::ostream& ostr, const_string value )\n{\n    ostr << value;\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_log_formatter::log_entry_finish( std::ostream& ostr )\n{\n    ostr << BOOST_TEST_L( \"]]></\" ) << m_curr_tag << BOOST_TEST_L( \">\" );\n\n    m_curr_tag.clear();\n}\n\n//____________________________________________________________________________//\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/impl/xml_report_formatter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : XML report formatter\n// ***************************************************************************\n\n#ifndef BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER\n#define BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER\n\n// Boost.Test\n#include <boost/test/results_collector.hpp>\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/output/xml_report_formatter.hpp>\n\n#include <boost/test/utils/xml_printer.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\nvoid\nxml_report_formatter::results_report_start( std::ostream& ostr )\n{\n    ostr << \"<TestResult>\";\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_report_formatter::results_report_finish( std::ostream& ostr )\n{\n    ostr << \"</TestResult>\";\n}\n\n\n//____________________________________________________________________________//\n\nvoid\nxml_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )\n{\n    test_results const& tr = results_collector.results( tu.p_id );\n\n    const_string descr;\n\n    if( tr.passed() )\n        descr = \"passed\";\n    else if( tr.p_skipped )\n        descr = \"skipped\";\n    else if( tr.p_aborted )\n        descr = \"aborted\";\n    else\n        descr = \"failed\";\n\n    ostr << '<' << ( tu.p_type == tut_case ? \"TestCase\" : \"TestSuite\" ) \n         << \" name\"     << attr_value() << tu.p_name.get()\n         << \" result\"   << attr_value() << descr\n         << \" assertions_passed\"        << attr_value() << tr.p_assertions_passed\n         << \" assertions_failed\"        << attr_value() << tr.p_assertions_failed\n         << \" expected_failures\"        << attr_value() << tr.p_expected_failures;\n\n    if( tu.p_type == tut_suite )\n        ostr << \" test_cases_passed\"    << attr_value() << tr.p_test_cases_passed\n             << \" test_cases_failed\"    << attr_value() << tr.p_test_cases_failed\n             << \" test_cases_skipped\"   << attr_value() << tr.p_test_cases_skipped\n             << \" test_cases_aborted\"   << attr_value() << tr.p_test_cases_aborted;\n             \n    \n    ostr << '>';\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_report_formatter::test_unit_report_finish( test_unit const& tu, std::ostream& ostr )\n{\n    ostr << \"</\" << ( tu.p_type == tut_case ? \"TestCase\" : \"TestSuite\" ) << '>';\n}\n\n//____________________________________________________________________________//\n\nvoid\nxml_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )\n{\n    test_unit_report_start( tu, ostr );\n    test_unit_report_finish( tu, ostr );    \n}\n\n//____________________________________________________________________________//\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/included/unit_test.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : included (vs. linked) version of Unit Test Framework\n// ***************************************************************************\n\n#ifndef BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER\n#define BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER\n\n#include <boost/test/impl/compiler_log_formatter.ipp>\n#include <boost/test/impl/debug.ipp>\n#include <boost/test/impl/framework.ipp>\n#include <boost/test/impl/exception_safety.ipp>\n#include <boost/test/impl/execution_monitor.ipp>\n#include <boost/test/impl/interaction_based.ipp>\n#include <boost/test/impl/logged_expectations.ipp>\n#include <boost/test/impl/plain_report_formatter.ipp>\n#include <boost/test/impl/progress_monitor.ipp>\n#include <boost/test/impl/results_collector.ipp>\n#include <boost/test/impl/results_reporter.ipp>\n#include <boost/test/impl/test_tools.ipp>\n#include <boost/test/impl/unit_test_log.ipp>\n#include <boost/test/impl/unit_test_main.ipp>\n#include <boost/test/impl/unit_test_monitor.ipp>\n#include <boost/test/impl/unit_test_parameters.ipp>\n#include <boost/test/impl/unit_test_suite.ipp>\n#include <boost/test/impl/xml_log_formatter.ipp>\n#include <boost/test/impl/xml_report_formatter.ipp>\n\n#define BOOST_TEST_INCLUDED\n#include <boost/test/unit_test.hpp>\n\n#endif // BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/interaction_based.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : Facilities to perform interaction-based testing\n// ***************************************************************************\n\n#ifndef BOOST_TEST_INTERACTION_BASED_HPP_112105GER\n#define BOOST_TEST_INTERACTION_BASED_HPP_112105GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n\n#include <boost/test/utils/wrap_stringstream.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n// Boost\n#include <boost/lexical_cast.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               BOOST_ITEST_EPOINT             ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_EPOINT( description ) \\\n    ::boost::itest::manager::instance().exception_point( BOOST_TEST_L(__FILE__), __LINE__, description )\n/**/\n\n// ************************************************************************** //\n// **************               BOOST_ITEST_DPOINT             ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_DPOINT() \\\n    ::boost::itest::manager::instance().decision_point( BOOST_TEST_L(__FILE__), __LINE__ )\n/**/\n\n// ************************************************************************** //\n// **************                BOOST_ITEST_SCOPE             ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_SCOPE( scope_name ) \\\n    ::boost::itest::scope_guard itest_scope_guard ## __LINE__( BOOST_TEST_L(__FILE__), __LINE__, BOOST_STRINGIZE(scope_name) )\n/**/\n\n// ************************************************************************** //\n// **************                 BOOST_ITEST_NEW              ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_NEW( type_name ) \\\n    new ( ::boost::itest::location( BOOST_TEST_L(__FILE__), __LINE__ ) ) type_name\n/**/\n\n// ************************************************************************** //\n// **************              BOOST_ITEST_DATA_FLOW           ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_DATA_FLOW( v ) \\\n    ::boost::itest::manager::instance().generic_data_flow( v )\n/**/\n\n// ************************************************************************** //\n// **************               BOOST_ITEST_RETURN             ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_RETURN( type, default_value ) \\\n    ::boost::itest::manager::instance().generic_return<type>( default_value )\n/**/\n\n// ************************************************************************** //\n// **************              BOOST_ITEST_MOCK_FUNC           ************** //\n// ************************************************************************** //\n\n#define BOOST_ITEST_MOCK_FUNC( function_name )          \\\n    BOOST_ITEST_SCOPE( function_name );                 \\\n    BOOST_ITEST_EPOINT( 0 );                            \\\n    return ::boost::itest::mock_object<>::prototype();  \\\n/**/\n\nnamespace boost {\n\nnamespace itest { // interaction-based testing\n\nusing unit_test::const_string;\n\n// ************************************************************************** //\n// **************                    manager                   ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL manager {\npublic:\n    // instance access\n    static manager&     instance() { return *instance_ptr(); }\n\n    // Mock objects interface hooks\n    virtual void        exception_point( const_string /*file*/, \n                                         std::size_t /*line_num*/, \n                                         const_string /*descr*/ ){}\n    virtual bool        decision_point( const_string /*file*/, \n                                        std::size_t /*line_num*/ )          { return true; }\n    virtual unsigned    enter_scope( const_string /*file*/, \n                                     std::size_t /*line_num*/,\n                                     const_string /*scope_name*/){ return 0; }\n    virtual void        leave_scope( unsigned )                             {}\n    virtual void        allocated( const_string /*file*/, \n                                   std::size_t /*line_num*/, \n                                   void* /*p*/, std::size_t /*s*/ )         {}\n    virtual void        freed( void* /*p*/ )                                {}\n    virtual void        data_flow( const_string /*d*/ )                     {}\n    virtual std::string return_value( const_string /*default_value */ )     { return \"\"; }\n\n    template<typename T>\n    void                generic_data_flow( T const& t )\n    {\n        wrap_stringstream ws;\n\n        data_flow( (ws << t).str() );\n    }\n    template<typename T, typename DefaultValueType>\n    T                   generic_return( DefaultValueType const& dv )\n    {\n        wrap_stringstream ws;\n\n        std::string const& res = return_value( (ws << dv).str() );\n\n        if( res.empty() )\n            return dv;\n\n        return lexical_cast<T>( res );\n    }\n\nprotected:\n    manager();\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \npublic:\n#endif\n    BOOST_TEST_PROTECTED_VIRTUAL ~manager();\n\nprivate:\n    struct dummy_constr{};\n    explicit manager( dummy_constr* ) {}\n\n    static manager*     instance_ptr( bool reset = false, manager* ptr = 0 );\n}; // manager\n\n// ************************************************************************** //\n// **************                  scope_guard                 ************** //\n// ************************************************************************** //\n\nclass scope_guard {\npublic:\n    // Constructor\n    scope_guard( const_string file, std::size_t line_num, const_string scope_name )\n    {\n        m_scope_index = manager::instance().enter_scope( file, line_num, scope_name );\n    }\n    ~scope_guard()\n    {\n        manager::instance().leave_scope( m_scope_index );\n    }\n\n    unsigned m_scope_index;\n};\n\n// ************************************************************************** //\n// **************                    location                  ************** //\n// ************************************************************************** //\n\nstruct location {\n    location( const_string file, std::size_t line ) \n    : m_file_name( file )\n    , m_line_num( line )\n    {}\n\n    const_string    m_file_name;\n    std::size_t     m_line_num;\n};\n\n}  // namespace itest\n\n} // namespace boost\n\n// ************************************************************************** //\n// **************              operator new overload           ************** //\n// ************************************************************************** //\n\n#if !defined(BOOST_ITEST_NO_NEW_OVERLOADS)\n\n// STL\n#include <cstdlib>\n\n# ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::malloc; using ::free; }\n# endif\n# ifdef _CRTDBG_MAP_ALLOC\nnamespace std { using ::_malloc_dbg; using ::_free_dbg; }\n# endif\n\ninline void*\noperator new( std::size_t s, ::boost::itest::location const& l )\n{\n    void* res = std::malloc(s ? s : 1);\n\n    if( res )\n        ::boost::itest::manager::instance().allocated( l.m_file_name, l.m_line_num, res, s );\n    else\n        throw std::bad_alloc();\n        \n    return res;\n}\n\n//____________________________________________________________________________//\n\ninline void*\noperator new[]( std::size_t s, ::boost::itest::location const& l )\n{\n    void* res = std::malloc(s ? s : 1);\n\n    if( res )\n        ::boost::itest::manager::instance().allocated( l.m_file_name, l.m_line_num, res, s );\n    else\n        throw std::bad_alloc();\n        \n    return res;\n}\n\n//____________________________________________________________________________//\n\ninline void\noperator delete( void* p, ::boost::itest::location const& )\n{\n    ::boost::itest::manager::instance().freed( p );\n\n    std::free( p );\n}\n\n//____________________________________________________________________________//\n\ninline void\noperator delete[]( void* p, ::boost::itest::location const& )\n{\n    ::boost::itest::manager::instance().freed( p );\n\n    std::free( p );\n}\n\n//____________________________________________________________________________//\n\n#endif\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_INTERACTION_BASED_HPP_112105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/mock_object.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : Facilities to perform exception safety_tests\n// ***************************************************************************\n\n#ifndef BOOST_TEST_MOCK_OBJECT_HPP_112205GER\n#define BOOST_TEST_MOCK_OBJECT_HPP_112205GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/interaction_based.hpp>\n\n// Boost\n#include <boost/preprocessor/punctuation/comma.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace itest {\n\n// ************************************************************************** //\n// **************                mock_object_base              ************** //\n// ************************************************************************** //\n\nclass mock_object_base {\npublic:\n    mock_object_base() {}\n\n    template<typename T1>\n    mock_object_base( T1 const& ) {}\n\n    template<typename T1, typename T2>\n    mock_object_base( T1 const&, T2 const& ) {}\n\n    template<typename T1, typename T2, typename T3>\n    mock_object_base( T1 const&, T2 const&, T3 const& ) {}\n\n    template<typename T1, typename T2, typename T3, typename T4>\n    mock_object_base( T1 const&, T2 const&, T3 const&, T4 const& ) {}\n\n    template<typename T1, typename T2, typename T3, typename T4, typename T5>\n    mock_object_base( T1 const&, T2 const&, T3 const&, T4 const&, T5 const& ) {}\n};\n\n// ************************************************************************** //\n// **************      mock_object implementation helpers      ************** //\n// ************************************************************************** //\n\n#define MO_OP_IMPL( op, descr, ret )                        \\\n    BOOST_ITEST_SCOPE( mock_object::operator op );          \\\n    BOOST_ITEST_EPOINT( descr );                            \\\n    return ret                                              \\\n/**/\n\n#define MO_UNARY_OP( op, descr )                            \\\nself_type const& operator op() const                        \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, prototype() );                   \\\n}                                                           \\\n/**/\n\n#define MO_UNARY_BOOL_OP( op, descr )                       \\\nbool operator op() const                                    \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, (!!BOOST_ITEST_DPOINT()) );      \\\n}                                                           \\\n/**/\n\n#define MO_BINARY_OP( op, descr )                           \\\ntemplate<int i1, typename Base1,int i2, typename Base2>     \\\ninline mock_object<i1,Base1> const&                         \\\noperator op( mock_object<i1,Base1> const& mo,               \\\n             mock_object<i2,Base2> const& )                 \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, mo );                            \\\n}                                                           \\\n                                                            \\\ntemplate<int i, typename Base, typename T>                  \\\ninline mock_object<i,Base> const&                           \\\noperator op( mock_object<i,Base> const& mo, T const& )      \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, mo );                            \\\n}                                                           \\\n                                                            \\\ntemplate<int i, typename Base, typename T>                  \\\ninline mock_object<i,Base> const&                           \\\noperator op( T const&, mock_object<i,Base> const& mo )      \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, mo );                            \\\n}                                                           \\\n/**/\n\n#define MO_BINARY_BOOL_OP( op, descr )                      \\\ntemplate<int i1, typename Base1,int i2, typename Base2>     \\\ninline bool                                                 \\\noperator op( mock_object<i1,Base1> const&,                  \\\n             mock_object<i2,Base2> const& )                 \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() );          \\\n}                                                           \\\n                                                            \\\ntemplate<int i, typename Base, typename T>                  \\\ninline bool                                                 \\\noperator op( mock_object<i,Base> const&, T const& )         \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() );          \\\n}                                                           \\\n                                                            \\\ntemplate<int i, typename Base, typename T>                  \\\ninline bool                                                 \\\noperator op( T const&, mock_object<i,Base> const& )         \\\n{                                                           \\\n    MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() );          \\\n}                                                           \\\n/**/\n\n// ************************************************************************** //\n// **************                  mock_object                 ************** //\n// ************************************************************************** //\n\ntemplate<int i = 0, typename Base=mock_object_base>\nclass mock_object;\n\ntemplate<int i, typename Base>\nclass mock_object : public Base {\n    // Private typeefs\n    typedef mock_object<i,Base> self_type;\n    struct dummy { void nonnull() {}; };\n    typedef void (dummy::*safe_bool)();\n\n    // prototype constructor\n    mock_object( dummy* ) {}\n\npublic:\n    static mock_object& prototype()\n    {\n        static mock_object p( reinterpret_cast<dummy*>(0) ); \n        return p;\n    }\n\n    // Constructors\n    mock_object()\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object default constructor\" );\n    }\n\n    template<typename T1>\n    mock_object( T1 const& arg1 )\n    : mock_object_base( arg1 )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object constructor\" );\n    }\n\n    template<typename T1, typename T2>\n    mock_object( T1 const& arg1, T2 const& arg2 )\n    : mock_object_base( arg1, arg2 )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object constructor\" );\n    }\n\n    template<typename T1, typename T2, typename T3>\n    mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3 )\n    : mock_object_base( arg1, arg2, arg3 )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object constructor\" );\n    }\n\n    template<typename T1, typename T2, typename T3, typename T4>\n    mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3, T4 const& arg4 )\n    : mock_object_base( arg1, arg2, arg3, arg4 )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object constructor\" );\n    }\n\n    template<typename T1, typename T2, typename T3, typename T4, typename T5>\n    mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3, T4 const& arg4, T5 const& arg5 )\n    : mock_object_base( arg1, arg2, arg3, arg4, arg5 )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object constructor\" );\n    }\n\n    mock_object( mock_object const& )\n    {\n        BOOST_ITEST_SCOPE( mock_object::mock_object );\n        BOOST_ITEST_EPOINT( \"Mock object copy constructor\" );\n    }\n\n    // assignment\n    self_type const&    operator =( mock_object const& ) const\n    {\n        MO_OP_IMPL( =, \"Copy assignment\", prototype() );\n    }\n\n    template <typename T>\n    self_type const&    operator =( T const& ) const\n    {\n        MO_OP_IMPL( =, \"Copy assignment\", prototype() );\n    }\n\n    // Unary operators\n    MO_UNARY_BOOL_OP( !, \"Logical NOT operator\" )\n    MO_UNARY_OP( &, \"Address-of operator\" )\n    MO_UNARY_OP( ~, \"One's complement operator\" )\n    MO_UNARY_OP( *, \"Pointer dereference\" )\n    MO_UNARY_OP( +, \"Unary plus\" )\n\n    // Increment and Decrement\n    MO_UNARY_OP( ++, \"Prefix increment\" )\n    MO_UNARY_OP( --, \"Prefix decrement\" )\n    self_type const&    operator ++(int) const\n    {\n        MO_OP_IMPL( ++, \"Postfix increment\", prototype() );\n    }\n    self_type const&    operator --(int) const\n    {\n        MO_OP_IMPL( --, \"Postfix decrement\", prototype() );\n    }\n\n    // Bool context convertion\n    operator safe_bool() const\n    {\n        MO_OP_IMPL( safe_bool, \"Bool context conversion\",\n                    (BOOST_ITEST_DPOINT() ? 0 : &dummy::nonnull) );\n    }\n\n    // Function-call operators\n    self_type const&    operator ()() const\n    {\n        MO_OP_IMPL( (), \"0-arity function-call\", prototype() );\n    }\n    template<typename T1>\n    self_type const&    operator ()( T1 const& arg1 ) const\n    {\n        MO_OP_IMPL( (), \"1-arity function-call\", prototype() );\n    }\n    template<typename T1, typename T2>\n    self_type const&    operator ()( T1 const&, T2 const& ) const\n    {\n        MO_OP_IMPL( (), \"2-arity function-call\", prototype() );\n    }\n    template<typename T1, typename T2, typename T3>\n    self_type const&    operator ()( T1 const&, T2 const&, T3 const& ) const\n    {\n        MO_OP_IMPL( (), \"3-arity function-call\", prototype() );\n    }\n    template<typename T1, typename T2, typename T3, typename T4>\n    self_type const&    operator ()( T1 const&, T2 const&, T3 const&, T4 const& ) const\n    {\n        MO_OP_IMPL( (), \"4-arity function-call\", prototype() );\n    }\n    template<typename T1, typename T2, typename T3, typename T4, typename T5>\n    self_type const&    operator ()( T1 const&, T2 const&, T3 const&, T4 const&, T5 const& ) const\n    {\n        MO_OP_IMPL( (), \"5-arity function-call\", prototype() );\n    }\n\n    // Substripting\n    template<typename T>\n    self_type const&    operator []( T const& ) const\n    {\n        MO_OP_IMPL( [], \"Substripting\", prototype() );\n    }\n\n    // Class member access\n    self_type const*    operator->() const\n    {\n        MO_OP_IMPL( ->, \"Class member access\", this );\n    }\n};\n\n// !! MO_BINARY_OP( BOOST_PP_COMMA(), \"Comma operator\" )\n\nMO_BINARY_BOOL_OP( !=, \"Inequality\" )\nMO_BINARY_OP( %, \"Modulus\" )\nMO_BINARY_OP( %=, \"Modulus/assignment\" )\nMO_BINARY_OP( &, \"Bitwise AND\" )\nMO_BINARY_BOOL_OP( &&, \"Logical AND\" )\nMO_BINARY_OP( &=, \"Bitwise AND/assignment\" )\nMO_BINARY_OP( *, \"Multiplication\" )\nMO_BINARY_OP( *=, \"Multiplication/assignment\" )\nMO_BINARY_OP( +, \"Addition\" )\nMO_BINARY_OP( +=, \"Addition/assignment\" )\n//MO_BINARY_OP( -, \"Subtraction\" )\nMO_BINARY_OP( -=, \"Subtraction/assignment\" )\nMO_BINARY_OP( ->*, \"Pointer-to-member selection\" )\nMO_BINARY_OP( /, \"Division\" )\nMO_BINARY_OP( /=, \"Division/assignment\" )\nMO_BINARY_BOOL_OP( <, \"Less than\" )\nMO_BINARY_OP( <<=, \"Left shift/assignment\" )\nMO_BINARY_BOOL_OP( <=, \"Less than or equal to\" )\nMO_BINARY_BOOL_OP( ==, \"Equality\" )\nMO_BINARY_BOOL_OP( >, \"Greater than\" )\nMO_BINARY_BOOL_OP( >=, \"Greater than or equal to\" )\nMO_BINARY_OP( >>=, \"Right shift/assignment\" )\nMO_BINARY_OP( ^, \"Exclusive OR\" )\nMO_BINARY_OP( ^=, \"Exclusive OR/assignment\" )\nMO_BINARY_OP( |, \"Bitwise inclusive OR\" )\nMO_BINARY_OP( |=, \"Bitwise inclusive OR/assignment\" )\nMO_BINARY_BOOL_OP( ||, \"Logical OR\" )\n\nMO_BINARY_OP( <<, \"Left shift\" )\nMO_BINARY_OP( >>, \"Right shift\" )\n\n} // namespace itest\n\n} // namespace boost\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_MOCK_OBJECT_HPP_112205GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/output/compiler_log_formatter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : contains compiler like Log formatter definition\n// ***************************************************************************\n\n#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER\n#define BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/unit_test_log_formatter.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\n// ************************************************************************** //\n// **************             compiler_log_formatter           ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL compiler_log_formatter : public unit_test_log_formatter {\npublic:\n    // Formatter interface\n    void    log_start( std::ostream&, counter_t test_cases_amount );\n    void    log_finish( std::ostream& );\n    void    log_build_info( std::ostream& );\n\n    void    test_unit_start( std::ostream&, test_unit const& tu );\n    void    test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );\n    void    test_unit_skipped( std::ostream&, test_unit const& tu );\n\n    void    log_exception( std::ostream&, log_checkpoint_data const&, execution_exception const& ex );\n\n    void    log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );\n    void    log_entry_value( std::ostream&, const_string value );\n    void    log_entry_value( std::ostream&, lazy_ostream const& value );\n    void    log_entry_finish( std::ostream& );\n\nprotected:\n    virtual void    print_prefix( std::ostream&, const_string file, std::size_t line );\n};\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/output/plain_report_formatter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : plain report formatter implementation\n// ***************************************************************************\n\n#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER\n#define BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/results_reporter.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\n// ************************************************************************** //\n// **************             plain_report_formatter           ************** //\n// ************************************************************************** //\n\nclass plain_report_formatter : public results_reporter::format {\npublic:\n    // Formatter interface\n    void    results_report_start( std::ostream& ostr );\n    void    results_report_finish( std::ostream& ostr );\n\n    void    test_unit_report_start( test_unit const&, std::ostream& ostr );\n    void    test_unit_report_finish( test_unit const&, std::ostream& ostr );\n\n    void    do_confirmation_report( test_unit const&, std::ostream& ostr );\n\nprivate:\n    // Data members\n    counter_t m_indent;\n};\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/output/xml_log_formatter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : contains XML Log formatter definition\n// ***************************************************************************\n\n#ifndef BOOST_TEST_XML_LOG_FORMATTER_020105GER\n#define BOOST_TEST_XML_LOG_FORMATTER_020105GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/unit_test_log_formatter.hpp>\n\n// STL\n#include <cstddef> // std::size_t\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\n// ************************************************************************** //\n// **************               xml_log_formatter              ************** //\n// ************************************************************************** //\n\nclass xml_log_formatter : public unit_test_log_formatter {\npublic:\n    // Formatter interface\n    void    log_start( std::ostream&, counter_t test_cases_amount );\n    void    log_finish( std::ostream& );\n    void    log_build_info( std::ostream& );\n\n    void    test_unit_start( std::ostream&, test_unit const& tu );\n    void    test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );\n    void    test_unit_skipped( std::ostream&, test_unit const& tu );\n\n    void    log_exception( std::ostream&, log_checkpoint_data const&, execution_exception const& ex );\n\n    void    log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );\n    using   unit_test_log_formatter::log_entry_value; // bring base class functions into overload set\n    void    log_entry_value( std::ostream&, const_string value );\n    void    log_entry_finish( std::ostream& );\n\nprivate:\n    // Data members\n    const_string    m_curr_tag;\n};\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_XML_LOG_FORMATTER_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/output/xml_report_formatter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : XML report formatter implementation\n// ***************************************************************************\n\n#ifndef BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER\n#define BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/results_reporter.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace output {\n\n// ************************************************************************** //\n// **************              xml_report_formatter            ************** //\n// ************************************************************************** //\n\nclass xml_report_formatter : public results_reporter::format {\npublic:\n    // Formatter interface\n    void    results_report_start( std::ostream& ostr );\n    void    results_report_finish( std::ostream& ostr );\n\n    void    test_unit_report_start( test_unit const&, std::ostream& ostr );\n    void    test_unit_report_finish( test_unit const&, std::ostream& ostr );\n\n    void    do_confirmation_report( test_unit const&, std::ostream& ostr );\n};\n\n} // namespace output\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/output_test_stream.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : output_test_stream class definition\n// ***************************************************************************\n\n#ifndef BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER\n#define BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/predicate_result.hpp>\n\n// STL\n#include <cstddef>          // for std::size_t\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************               output_test_stream             ************** //\n// ************************************************************************** //\n\n// class to be used to simplify testing of ostream-based output operations\n\nnamespace boost {\n\nnamespace test_tools {\n\nclass BOOST_TEST_DECL output_test_stream : public wrap_stringstream::wrapped_stream {\n    typedef unit_test::const_string const_string;\n    typedef predicate_result        result_type;\npublic:\n    // Constructor\n    explicit        output_test_stream( const_string    pattern_file_name = const_string(),\n                                        bool            match_or_save     = true,\n                                        bool            text_or_binary    = true );\n\n    // Destructor\n    ~output_test_stream();\n\n    // checking function\n    result_type     is_empty( bool flush_stream = true );\n    result_type     check_length( std::size_t length, bool flush_stream = true );\n    result_type     is_equal( const_string arg_, bool flush_stream = true );\n    result_type     match_pattern( bool flush_stream = true );\n\n    // explicit flush\n    void            flush();\n\nprivate:\n    // helper functions\n    std::size_t     length();\n    void            sync();\n\n    struct Impl;\n    Impl*           m_pimpl;\n};\n\n} // namespace test_tools\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/predicate_result.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : enhanced result for test predicate that include message explaining failure\n// ***************************************************************************\n\n#ifndef BOOST_TEST_PREDICATE_RESULT_HPP_012705GER\n#define BOOST_TEST_PREDICATE_RESULT_HPP_012705GER\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n\n// Boost\n#include <boost/shared_ptr.hpp>\n#include <boost/detail/workaround.hpp>\n\n// STL\n#include <cstddef>          // for std::size_t\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace test_tools {\n\n// ************************************************************************** //\n// **************                predicate_result              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL predicate_result {\n    typedef unit_test::const_string      const_string;\n    struct dummy { void nonnull() {}; };\n    typedef void (dummy::*safe_bool)();\n\npublic:\n    // Constructor\n    predicate_result( bool pv_ ) \n    : p_predicate_value( pv_ )\n    {}\n\n    template<typename BoolConvertable>\n    predicate_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {}\n\n    // Access methods\n    bool                operator!() const           { return !p_predicate_value; }\n    void                operator=( bool pv_ )       { p_predicate_value.value = pv_; }\n    operator            safe_bool() const           { return !!p_predicate_value ? &dummy::nonnull : 0; }\n\n    // Public properties\n    BOOST_READONLY_PROPERTY( bool, (predicate_result) ) p_predicate_value;\n\n    // Access methods\n    bool                has_empty_message() const   { return !m_message; }\n    wrap_stringstream&  message()\n    {\n        if( !m_message )\n            m_message.reset( new wrap_stringstream );\n\n        return *m_message;\n    }\n    const_string        message() const                   { return !m_message ? const_string() : const_string( m_message->str() ); }\n\nprivate:\n    // Data members\n    shared_ptr<wrap_stringstream> m_message;\n};\n\n} // namespace test_tools\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/progress_monitor.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines simple text based progress monitor\n// ***************************************************************************\n\n#ifndef BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER\n#define BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER\n\n// Boost.Test\n#include <boost/test/test_observer.hpp>\n#include <boost/test/utils/trivial_singleton.hpp>\n\n// STL\n#include <iosfwd>   // for std::ostream&\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                progress_monitor              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL progress_monitor_t : public test_observer, public singleton<progress_monitor_t> {\npublic:\n    // test observer interface\n    void    test_start( counter_t test_cases_amount );\n    void    test_finish() {}\n    void    test_aborted();\n\n    void    test_unit_start( test_unit const& ) {}\n    void    test_unit_finish( test_unit const&, unsigned long );\n    void    test_unit_skipped( test_unit const& );\n    void    test_unit_aborted( test_unit const& ) {}\n\n    void    assertion_result( bool ) {}\n    void    exception_caught( execution_exception const& ) {}\n\n    // configuration\n    void    set_stream( std::ostream& );\n\nprivate:\n    BOOST_TEST_SINGLETON_CONS( progress_monitor_t );\n}; // progress_monitor_t\n\nBOOST_TEST_SINGLETON_INST( progress_monitor )\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/results_collector.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines class unit_test_result that is responsible for \n//  gathering test results and presenting this information to end-user\n// ***************************************************************************\n\n#ifndef BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER\n#define BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/test_observer.hpp>\n\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n\n#include <boost/test/utils/trivial_singleton.hpp>\n#include <boost/test/utils/class_properties.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************      first failed assertion debugger hook    ************** //\n// ************************************************************************** //\n\nnamespace {\ninline void first_failed_assertion() {}\n}\n\n// ************************************************************************** //\n// **************                 test_results                 ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_results {\npublic:\n    test_results();\n\n    typedef BOOST_READONLY_PROPERTY( counter_t, (results_collector_t)(test_results)(results_collect_helper) ) counter_prop;\n    typedef BOOST_READONLY_PROPERTY( bool,      (results_collector_t)(test_results)(results_collect_helper) ) bool_prop;\n\n    counter_prop    p_assertions_passed;\n    counter_prop    p_assertions_failed;\n    counter_prop    p_expected_failures;\n    counter_prop    p_test_cases_passed;\n    counter_prop    p_test_cases_failed;\n    counter_prop    p_test_cases_skipped;\n    counter_prop    p_test_cases_aborted;\n    bool_prop       p_aborted;\n    bool_prop       p_skipped;\n\n    // \"conclusion\" methods\n    bool            passed() const;\n    int             result_code() const;\n\n    // collection helper\n    void            operator+=( test_results const& );\n\n    void            clear();\n};\n\n// ************************************************************************** //\n// **************               results_collector              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL results_collector_t : public test_observer, public singleton<results_collector_t> {\npublic:\n    // test_observer interface implementation\n    void                test_start( counter_t test_cases_amount );\n    void                test_finish();\n    void                test_aborted();\n\n    void                test_unit_start( test_unit const& );\n    void                test_unit_finish( test_unit const&, unsigned long elapsed );\n    void                test_unit_skipped( test_unit const& );\n    void                test_unit_aborted( test_unit const& );\n\n    void                assertion_result( bool passed );\n    void                exception_caught( execution_exception const& );\n\n    // results access\n    test_results const& results( test_unit_id ) const;\n\nprivate:\n    BOOST_TEST_SINGLETON_CONS( results_collector_t );\n};\n\nBOOST_TEST_SINGLETON_INST( results_collector )\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/results_reporter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines class unit_test_result that is responsible for \n//  gathering test results and presenting this information to end-user\n// ***************************************************************************\n\n#ifndef BOOST_TEST_RESULTS_REPORTER_HPP_021205GER\n#define BOOST_TEST_RESULTS_REPORTER_HPP_021205GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n\n// STL\n#include <iosfwd>   // for std::ostream&\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace results_reporter {\n\n// ************************************************************************** //\n// **************              formatter interface             ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL format {\npublic:\n    // Destructor\n    virtual ~format() {}\n\n    virtual void    results_report_start( std::ostream& ostr ) = 0;\n    virtual void    results_report_finish( std::ostream& ostr ) = 0;\n\n    virtual void    test_unit_report_start( test_unit const&, std::ostream& ostr ) = 0;\n    virtual void    test_unit_report_finish( test_unit const&, std::ostream& ostr ) = 0;\n\n    virtual void    do_confirmation_report( test_unit const&, std::ostream& ostr ) = 0;\n};\n\n// ************************************************************************** //\n// **************              report configuration            ************** //\n// ************************************************************************** //\n\nBOOST_TEST_DECL void    set_level( report_level );\nBOOST_TEST_DECL void    set_stream( std::ostream& );\nBOOST_TEST_DECL void    set_format( output_format );\nBOOST_TEST_DECL void    set_format( results_reporter::format* );\n\nBOOST_TEST_DECL std::ostream& get_stream();\n\n// ************************************************************************** //\n// **************               report initiation              ************** //\n// ************************************************************************** //\n\nBOOST_TEST_DECL void    make_report( report_level l = INV_REPORT_LEVEL, test_unit_id = INV_TEST_UNIT_ID );\ninline void             confirmation_report( test_unit_id id = INV_TEST_UNIT_ID )   \n{ make_report( CONFIRMATION_REPORT, id ); }\ninline void             short_report( test_unit_id id = INV_TEST_UNIT_ID )\n{ make_report( SHORT_REPORT, id ); }\ninline void             detailed_report( test_unit_id id = INV_TEST_UNIT_ID )\n{ make_report( DETAILED_REPORT, id ); }\n\n} // namespace results_reporter\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_RESULTS_REPORTER_HPP_021205GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/test_observer.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines abstract interface for test observer\n// ***************************************************************************\n\n#ifndef BOOST_TEST_TEST_OBSERVER_HPP_021005GER\n#define BOOST_TEST_TEST_OBSERVER_HPP_021005GER\n\n// Boost.Test\n#include <boost/test/detail/fwd_decl.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/config.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                 test_observer                ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_observer {\npublic:\n    // test observer interface\n    virtual void    test_start( counter_t /* test_cases_amount */ ) {}\n    virtual void    test_finish() {}\n    virtual void    test_aborted() {}\n\n    virtual void    test_unit_start( test_unit const& ) {}\n    virtual void    test_unit_finish( test_unit const&, unsigned long /* elapsed */ ) {}\n    virtual void    test_unit_skipped( test_unit const& ) {}\n    virtual void    test_unit_aborted( test_unit const& ) {}\n\n    virtual void    assertion_result( bool /* passed */ ) {}\n    virtual void    exception_caught( execution_exception const& ) {}\n\n    virtual int     priority() { return 0; }\n\nprotected:\n    BOOST_TEST_PROTECTED_VIRTUAL ~test_observer() {}\n};\n\n} // unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_TEST_OBSERVER_HPP_021005GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/test_tools.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : contains definition for all test tools in test toolbox\n// ***************************************************************************\n\n#ifndef BOOST_TEST_TEST_TOOLS_HPP_012705GER\n#define BOOST_TEST_TEST_TOOLS_HPP_012705GER\n\n// Boost.Test\n#include <boost/test/predicate_result.hpp>\n#include <boost/test/unit_test_log.hpp>\n#include <boost/test/floating_point_comparison.hpp>\n\n#include <boost/test/detail/config.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/workaround.hpp>\n\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/lazy_ostream.hpp>\n\n// Boost\n#include <boost/preprocessor/seq/for_each.hpp>\n#include <boost/preprocessor/seq/size.hpp>\n#include <boost/preprocessor/seq/enum.hpp> \n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/punctuation/comma_if.hpp>\n#include <boost/preprocessor/arithmetic/add.hpp>\n\n#include <boost/limits.hpp>\n\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/is_abstract.hpp>\n\n#include <boost/mpl/or.hpp>\n\n// STL\n#include <cstddef>          // for std::size_t\n#include <iosfwd>\n#include <ios>              // for std::boolalpha\n#include <climits>          // for CHAR_BIT\n\n#ifdef BOOST_MSVC\n# pragma warning(disable: 4127) // conditional expression is constant\n#endif\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                    TOOL BOX                  ************** //\n// ************************************************************************** //\n\n// In macros below following argument abbreviations are used:\n// P - predicate\n// M - message\n// S - statement\n// E - exception\n// L - left argument\n// R - right argument\n// TL - tool level\n// CT - check type\n// ARGS - arguments list\n\n#define BOOST_TEST_TOOL_IMPL( func, P, check_descr, TL, CT )            \\\n    ::boost::test_tools::tt_detail::func(                               \\\n        P,                                                              \\\n        ::boost::unit_test::lazy_ostream::instance() << check_descr,    \\\n        BOOST_TEST_L(__FILE__),                                         \\\n        static_cast<std::size_t>(__LINE__),                             \\\n        ::boost::test_tools::tt_detail::TL,                             \\\n        ::boost::test_tools::tt_detail::CT                              \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_CHECK_IMPL( P, check_descr, TL, CT )                  \\\ndo {                                                                \\\n    BOOST_TEST_PASSPOINT();                                         \\\n    BOOST_TEST_TOOL_IMPL( check_impl, P, check_descr, TL, CT ), 0 );\\\n} while( ::boost::test_tools::dummy_cond )                          \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_TEST_PASS_ARG_INFO( r, data, arg ) , arg, BOOST_STRINGIZE( arg )\n\n#define BOOST_CHECK_WITH_ARGS_IMPL( P, check_descr, TL, CT, ARGS )  \\\ndo {                                                                \\\n    BOOST_TEST_PASSPOINT();                                         \\\n    BOOST_TEST_TOOL_IMPL( check_frwd, P, check_descr, TL, CT )      \\\n    BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_PASS_ARG_INFO, '_', ARGS ) ); \\\n} while( ::boost::test_tools::dummy_cond )                          \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN( P )                     BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED )\n#define BOOST_CHECK( P )                    BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED )\n#define BOOST_REQUIRE( P )                  BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_MESSAGE( P, M )          BOOST_CHECK_IMPL( (P), M, WARN, CHECK_MSG )\n#define BOOST_CHECK_MESSAGE( P, M )         BOOST_CHECK_IMPL( (P), M, CHECK, CHECK_MSG )\n#define BOOST_REQUIRE_MESSAGE( P, M )       BOOST_CHECK_IMPL( (P), M, REQUIRE, CHECK_MSG )\n\n//____________________________________________________________________________//\n\n#define BOOST_ERROR( M )                    BOOST_CHECK_MESSAGE( false, M )\n#define BOOST_FAIL( M )                     BOOST_REQUIRE_MESSAGE( false, M )\n\n//____________________________________________________________________________//\n\n#define BOOST_CHECK_THROW_IMPL( S, E, P, prefix, TL )                                                   \\\n    try {                                                                                               \\\n        BOOST_TEST_PASSPOINT();                                                                         \\\n        S;                                                                                              \\\n        BOOST_CHECK_IMPL( false, \"exception \" BOOST_STRINGIZE( E ) \" is expected\", TL, CHECK_MSG ); }   \\\n    catch( E const& ex ) {                                                                              \\\n        ::boost::unit_test::ut_detail::ignore_unused_variable_warning( ex );                            \\\n        BOOST_CHECK_IMPL( P, prefix BOOST_STRINGIZE( E ) \" is caught\", TL, CHECK_MSG );                 \\\n    }                                                                                                   \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_THROW( S, E )            BOOST_CHECK_THROW_IMPL( S, E, true, \"exception \", WARN )\n#define BOOST_CHECK_THROW( S, E )           BOOST_CHECK_THROW_IMPL( S, E, true, \"exception \", CHECK )\n#define BOOST_REQUIRE_THROW( S, E )         BOOST_CHECK_THROW_IMPL( S, E, true, \"exception \", REQUIRE )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_EXCEPTION( S, E, P )     BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \"incorrect exception \", WARN )\n#define BOOST_CHECK_EXCEPTION( S, E, P )    BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \"incorrect exception \", CHECK )\n#define BOOST_REQUIRE_EXCEPTION( S, E, P )  BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \"incorrect exception \", REQUIRE )\n\n//____________________________________________________________________________//\n\n#define BOOST_CHECK_NO_THROW_IMPL( S, TL )                                                          \\\n    try {                                                                                           \\\n        S;                                                                                          \\\n        BOOST_CHECK_IMPL( true, \"no exceptions thrown by \" BOOST_STRINGIZE( S ), TL, CHECK_MSG ); } \\\n    catch( ... ) {                                                                                  \\\n        BOOST_CHECK_IMPL( false, \"exception thrown by \" BOOST_STRINGIZE( S ), TL, CHECK_MSG );      \\\n    }                                                                                               \\\n/**/\n\n#define BOOST_WARN_NO_THROW( S )            BOOST_CHECK_NO_THROW_IMPL( S, WARN )\n#define BOOST_CHECK_NO_THROW( S )           BOOST_CHECK_NO_THROW_IMPL( S, CHECK )\n#define BOOST_REQUIRE_NO_THROW( S )         BOOST_CHECK_NO_THROW_IMPL( S, REQUIRE )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_EQUAL( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), \"\", WARN, CHECK_EQUAL, (L)(R) )\n#define BOOST_CHECK_EQUAL( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), \"\", CHECK, CHECK_EQUAL, (L)(R) )\n#define BOOST_REQUIRE_EQUAL( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), \"\", REQUIRE, CHECK_EQUAL, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_NE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), \"\", WARN, CHECK_NE, (L)(R) )\n#define BOOST_CHECK_NE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), \"\", CHECK, CHECK_NE, (L)(R) )\n#define BOOST_REQUIRE_NE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ne_impl(), \"\", REQUIRE, CHECK_NE, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_LT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), \"\", WARN, CHECK_LT, (L)(R) )\n#define BOOST_CHECK_LT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), \"\", CHECK, CHECK_LT, (L)(R) )\n#define BOOST_REQUIRE_LT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::lt_impl(), \"\", REQUIRE, CHECK_LT, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_LE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), \"\", WARN, CHECK_LE, (L)(R) )\n#define BOOST_CHECK_LE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), \"\", CHECK, CHECK_LE, (L)(R) )\n#define BOOST_REQUIRE_LE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::le_impl(), \"\", REQUIRE, CHECK_LE, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_GT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), \"\", WARN, CHECK_GT, (L)(R) )\n#define BOOST_CHECK_GT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), \"\", CHECK, CHECK_GT, (L)(R) )\n#define BOOST_REQUIRE_GT( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::gt_impl(), \"\", REQUIRE, CHECK_GT, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_GE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), \"\", WARN, CHECK_GE, (L)(R) )\n#define BOOST_CHECK_GE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), \"\", CHECK, CHECK_GE, (L)(R) )\n#define BOOST_REQUIRE_GE( L, R ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::ge_impl(), \"\", REQUIRE, CHECK_GE, (L)(R) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_CLOSE( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", WARN, CHECK_CLOSE, \\\n        (L)(R)(::boost::test_tools::percent_tolerance(T)) )\n#define BOOST_CHECK_CLOSE( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", CHECK, CHECK_CLOSE, \\\n        (L)(R)(::boost::test_tools::percent_tolerance(T)) )\n#define BOOST_REQUIRE_CLOSE( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", REQUIRE, CHECK_CLOSE, \\\n        (L)(R)(::boost::test_tools::percent_tolerance(T)) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_CLOSE_FRACTION( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", WARN, CHECK_CLOSE_FRACTION, \\\n    (L)(R)(::boost::test_tools::fraction_tolerance(T)) )\n#define BOOST_CHECK_CLOSE_FRACTION( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", CHECK, CHECK_CLOSE_FRACTION, \\\n    (L)(R)(::boost::test_tools::fraction_tolerance(T)) )\n#define BOOST_REQUIRE_CLOSE_FRACTION( L, R, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, \"\", REQUIRE, CHECK_CLOSE_FRACTION, \\\n    (L)(R)(::boost::test_tools::fraction_tolerance(T)) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_SMALL( FPV, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, \"\", WARN, CHECK_SMALL, (FPV)(T) )\n#define BOOST_CHECK_SMALL( FPV, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, \"\", CHECK, CHECK_SMALL, (FPV)(T) )\n#define BOOST_REQUIRE_SMALL( FPV, T ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, \"\", REQUIRE, CHECK_SMALL, (FPV)(T) )\n\n//____________________________________________________________________________//\n\n#define BOOST_WARN_PREDICATE( P, ARGS ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED_WITH_ARGS, ARGS )\n#define BOOST_CHECK_PREDICATE( P, ARGS ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED_WITH_ARGS, ARGS )\n#define BOOST_REQUIRE_PREDICATE( P, ARGS ) \\\n    BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED_WITH_ARGS, ARGS )\n\n//____________________________________________________________________________//\n\n#define BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, TL )      \\\n    BOOST_TEST_TOOL_IMPL( check_impl, ::boost::test_tools::tt_detail::equal_coll_impl( \\\n        (L_begin), (L_end), (R_begin), (R_end) ), \"\", TL, CHECK_EQUAL_COLL ),   \\\n    4,                                                                          \\\n    BOOST_STRINGIZE( L_begin ), BOOST_STRINGIZE( L_end ),                       \\\n    BOOST_STRINGIZE( R_begin ), BOOST_STRINGIZE( R_end ) )                      \\\n/**/\n\n#define BOOST_WARN_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )          \\\n    BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, WARN )\n#define BOOST_CHECK_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )         \\\n    BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, CHECK )\n#define BOOST_REQUIRE_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )       \\\n    BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, REQUIRE )\n\n//____________________________________________________________________________//\n\n#define BOOST_BITWISE_EQUAL_IMPL( L, R, TL )                                    \\\n    BOOST_TEST_TOOL_IMPL( check_impl,                                           \\\n      ::boost::test_tools::tt_detail::bitwise_equal_impl( (L), (R) ),           \\\n      \"\", TL, CHECK_BITWISE_EQUAL ),                                            \\\n    2, BOOST_STRINGIZE( L ), BOOST_STRINGIZE( R ) )                             \\\n/**/\n\n#define BOOST_WARN_BITWISE_EQUAL( L, R )    BOOST_BITWISE_EQUAL_IMPL( L, R, WARN )\n#define BOOST_CHECK_BITWISE_EQUAL( L, R )   BOOST_BITWISE_EQUAL_IMPL( L, R, CHECK )\n#define BOOST_REQUIRE_BITWISE_EQUAL( L, R ) BOOST_BITWISE_EQUAL_IMPL( L, R, REQUIRE )\n\n//____________________________________________________________________________//\n\n#define BOOST_IS_DEFINED( symb )            ::boost::test_tools::tt_detail::is_defined_impl( #symb, BOOST_STRINGIZE(= symb) )\n\n//____________________________________________________________________________//\n\n// ***************************** //\n// deprecated interface\n\n#define BOOST_BITWISE_EQUAL( L, R )         BOOST_CHECK_BITWISE_EQUAL( L, R )\n#define BOOST_MESSAGE( M )                  BOOST_TEST_MESSAGE( M )\n#define BOOST_CHECKPOINT( M )               BOOST_TEST_CHECKPOINT( M )\n\nnamespace boost {\n\nnamespace test_tools {\n\ntypedef unit_test::const_string      const_string;\n\nnamespace { bool dummy_cond = false; }\n\n// ************************************************************************** //\n// **************                print_log_value               ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nstruct print_log_value {\n    void    operator()( std::ostream& ostr, T const& t )\n    {\n        // avoid warning: 'boost::test_tools::<unnamed>::dummy_cond' defined but not used \n        if (::boost::test_tools::dummy_cond) {}\n\n        typedef typename mpl::or_<is_array<T>,is_function<T>,is_abstract<T> >::type cant_use_nl;\n\n        set_precision( ostr, cant_use_nl() );\n\n        ostr << t; // by default print the value\n    }\n\n    void set_precision( std::ostream& ostr, mpl::false_ )\n    {\n        if( std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::radix == 2 )\n            ostr.precision( 2 + std::numeric_limits<T>::digits * 301/1000 ); \n    }\n\n    void set_precision( std::ostream&, mpl::true_ ) {}\n};\n\n//____________________________________________________________________________//\n\n#define BOOST_TEST_DONT_PRINT_LOG_VALUE( the_type )         \\\nnamespace boost { namespace test_tools {                    \\\ntemplate<>                                                  \\\nstruct print_log_value<the_type > {                         \\\n    void operator()( std::ostream&, the_type const& ) {}    \\\n};                                                          \\\n}}                                                          \\\n/**/\n\n//____________________________________________________________________________//\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\ntemplate<typename T, std::size_t N >\nstruct print_log_value< T[N] > {\n    void    operator()( std::ostream& ostr, T const* t )\n    {\n        ostr << t;\n    }\n};\n#endif\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct BOOST_TEST_DECL print_log_value<bool> {\n    void    operator()( std::ostream& ostr, bool t )\n    {\n         ostr << std::boolalpha << t;\n    }\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct BOOST_TEST_DECL print_log_value<char> {\n    void    operator()( std::ostream& ostr, char t );\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct BOOST_TEST_DECL print_log_value<unsigned char> {\n    void    operator()( std::ostream& ostr, unsigned char t );\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct BOOST_TEST_DECL print_log_value<char const*> {\n    void    operator()( std::ostream& ostr, char const* t );\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct BOOST_TEST_DECL print_log_value<wchar_t const*> {\n    void    operator()( std::ostream& ostr, wchar_t const* t );\n};\n\n//____________________________________________________________________________//\n\nnamespace tt_detail {\n\n// ************************************************************************** //\n// **************              tools classification            ************** //\n// ************************************************************************** //\n\nenum check_type {\n    CHECK_PRED, \n    CHECK_MSG,\n    CHECK_EQUAL,\n    CHECK_NE,\n    CHECK_LT,\n    CHECK_LE,\n    CHECK_GT,\n    CHECK_GE,\n    CHECK_CLOSE,\n    CHECK_CLOSE_FRACTION,\n    CHECK_SMALL,\n    CHECK_BITWISE_EQUAL,\n    CHECK_PRED_WITH_ARGS,\n    CHECK_EQUAL_COLL\n};\n\nenum tool_level {\n    WARN, CHECK, REQUIRE, PASS\n};\n\n// ************************************************************************** //\n// **************                 print_helper                 ************** //\n// ************************************************************************** //\n// Adds level of indirection to the output operation, allowing us to customize \n// it for types that do not support operator << directly or for any other reason\n\ntemplate<typename T>\nstruct print_helper_t {\n    explicit    print_helper_t( T const& t ) : m_t( t ) {}\n\n    T const&    m_t;\n};\n\n//____________________________________________________________________________//\n\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \n// Borland suffers premature pointer decay passing arrays by reference\ntemplate<typename T, std::size_t N >\nstruct print_helper_t< T[N] > {\n    explicit    print_helper_t( T const * t ) : m_t( t ) {}\n\n    T const *   m_t;\n};\n#endif\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline print_helper_t<T> print_helper( T const& t )\n{\n    return print_helper_t<T>( t );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline std::ostream& \noperator<<( std::ostream& ostr, print_helper_t<T> const& ph )\n{\n    print_log_value<T>()( ostr, ph.m_t );\n\n    return ostr;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************            TOOL BOX Implementation           ************** //\n// ************************************************************************** //\n\nBOOST_TEST_DECL \nbool check_impl( predicate_result const& pr, ::boost::unit_test::lazy_ostream const& check_descr,\n                 const_string file_name, std::size_t line_num,\n                 tool_level tl, check_type ct,\n                 std::size_t num_args, ... );\n\n//____________________________________________________________________________//\n\n#define TEMPL_PARAMS( z, m, dummy ) , typename BOOST_JOIN( Arg, m )\n#define FUNC_PARAMS( z, m, dummy )                                                  \\\n , BOOST_JOIN( Arg, m ) const& BOOST_JOIN( arg, m )                                 \\\n , char const* BOOST_JOIN( BOOST_JOIN( arg, m ), _descr )                           \\\n/**/\n\n#define PRED_PARAMS( z, m, dummy ) BOOST_PP_COMMA_IF( m ) BOOST_JOIN( arg, m ) \n\n#define ARG_INFO( z, m, dummy )                                                     \\\n , BOOST_JOIN( BOOST_JOIN( arg, m ), _descr )                                       \\\n , &static_cast<const unit_test::lazy_ostream&>(unit_test::lazy_ostream::instance() \\\n        << ::boost::test_tools::tt_detail::print_helper( BOOST_JOIN( arg, m ) ))    \\\n/**/\n\n#define IMPL_FRWD( z, n, dummy )                                                    \\\ntemplate<typename Pred                                                              \\\n         BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), TEMPL_PARAMS, _ )>            \\\ninline bool                                                                         \\\ncheck_frwd( Pred P, unit_test::lazy_ostream const& check_descr,                     \\\n            const_string file_name, std::size_t line_num,                           \\\n            tool_level tl, check_type ct                                            \\\n            BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), FUNC_PARAMS, _ )           \\\n)                                                                                   \\\n{                                                                                   \\\n    return                                                                          \\\n    check_impl( P( BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), PRED_PARAMS, _ ) ), \\\n                check_descr, file_name, line_num, tl, ct,                           \\\n                BOOST_PP_ADD( n, 1 )                                                \\\n                BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), ARG_INFO, _ )          \\\n    );                                                                              \\\n}                                                                                   \\\n/**/\n\n#ifndef BOOST_TEST_MAX_PREDICATE_ARITY\n#define BOOST_TEST_MAX_PREDICATE_ARITY 5\n#endif\n\nBOOST_PP_REPEAT( BOOST_TEST_MAX_PREDICATE_ARITY, IMPL_FRWD, _ )\n\n#undef TEMPL_PARAMS\n#undef FUNC_PARAMS\n#undef PRED_INFO\n#undef ARG_INFO\n#undef IMPL_FRWD\n\n//____________________________________________________________________________//\n\ntemplate <class Left, class Right>\npredicate_result equal_impl( Left const& left, Right const& right )\n{\n    return left == right;\n}\n\n//____________________________________________________________________________//\n\npredicate_result        BOOST_TEST_DECL equal_impl( char const* left, char const* right );\ninline predicate_result equal_impl( char* left, char const* right ) { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }\ninline predicate_result equal_impl( char const* left, char* right ) { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }\ninline predicate_result equal_impl( char* left, char* right )       { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }\n\n#if !defined( BOOST_NO_CWCHAR )\npredicate_result        BOOST_TEST_DECL equal_impl( wchar_t const* left, wchar_t const* right );\ninline predicate_result equal_impl( wchar_t* left, wchar_t const* right ) { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }\ninline predicate_result equal_impl( wchar_t const* left, wchar_t* right ) { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }\ninline predicate_result equal_impl( wchar_t* left, wchar_t* right )       { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }\n#endif\n\n//____________________________________________________________________________//\n\nstruct equal_impl_frwd {\n    template <typename Left, typename Right>\n    inline predicate_result\n    call_impl( Left const& left, Right const& right, mpl::false_ ) const\n    {\n        return equal_impl( left, right );\n    }\n\n    template <typename Left, typename Right>\n    inline predicate_result\n    call_impl( Left const& left, Right const& right, mpl::true_ ) const\n    {\n        return (*this)( right, &left[0] );\n    }\n\n    template <typename Left, typename Right>\n    inline predicate_result\n    operator()( Left const& left, Right const& right ) const\n    {\n        typedef typename is_array<Left>::type left_is_array;\n        return call_impl( left, right, left_is_array() );\n    }\n};\n\n//____________________________________________________________________________//\n\nstruct ne_impl {\n    template <class Left, class Right>\n    predicate_result operator()( Left const& left, Right const& right )\n    {\n        return !equal_impl_frwd()( left, right );\n    }\n};\n\n//____________________________________________________________________________//\n\nstruct lt_impl {\n    template <class Left, class Right>\n    predicate_result operator()( Left const& left, Right const& right )\n    {\n        return left < right;\n    }\n};\n\n//____________________________________________________________________________//\n\nstruct le_impl {\n    template <class Left, class Right>\n    predicate_result operator()( Left const& left, Right const& right )\n    {\n        return left <= right;\n    }\n};\n\n//____________________________________________________________________________//\n\nstruct gt_impl {\n    template <class Left, class Right>\n    predicate_result operator()( Left const& left, Right const& right )\n    {\n        return left > right;\n    }\n};\n\n//____________________________________________________________________________//\n\nstruct ge_impl {\n    template <class Left, class Right>\n    predicate_result operator()( Left const& left, Right const& right )\n    {\n        return left >= right;\n    }\n};\n\n//____________________________________________________________________________//\n\ntemplate <typename Left, typename Right>\ninline predicate_result\nequal_coll_impl( Left left_begin, Left left_end, Right right_begin, Right right_end )\n{\n    predicate_result    res( true );\n    std::size_t         pos = 0;\n\n    for( ; left_begin != left_end && right_begin != right_end; ++left_begin, ++right_begin, ++pos ) {\n        if( *left_begin != *right_begin ) {\n            res = false;\n            res.message() << \"\\nMismatch in a position \" << pos << \": \"  << *left_begin << \" != \" << *right_begin;\n        }\n    }\n\n    if( left_begin != left_end ) {\n        std::size_t r_size = pos;\n        while( left_begin != left_end ) {\n            ++pos;\n            ++left_begin;\n        }\n\n        res = false;\n        res.message() << \"\\nCollections size mismatch: \" << pos << \" != \" << r_size;\n    }\n\n    if( right_begin != right_end ) {\n        std::size_t l_size = pos;\n        while( right_begin != right_end ) {\n            ++pos;\n            ++right_begin;\n        }\n\n        res = false;\n        res.message() << \"\\nCollections size mismatch: \" << l_size << \" != \" << pos;\n    }\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\ntemplate <class Left, class Right>\ninline predicate_result\nbitwise_equal_impl( Left const& left, Right const& right )\n{\n    predicate_result    res( true );\n\n    std::size_t left_bit_size  = sizeof(Left)*CHAR_BIT;\n    std::size_t right_bit_size = sizeof(Right)*CHAR_BIT;\n\n    static Left const leftOne( 1 );\n    static Right const rightOne( 1 );\n\n    std::size_t total_bits = left_bit_size < right_bit_size ? left_bit_size : right_bit_size;\n\n    for( std::size_t counter = 0; counter < total_bits; ++counter ) {\n        if( ( left & ( leftOne << counter ) ) != ( right & ( rightOne << counter ) ) ) {\n            res = false;\n            res.message() << \"\\nMismatch in a position \" << counter;\n        }\n    }\n\n    if( left_bit_size != right_bit_size ) {\n        res = false;\n        res.message() << \"\\nOperands bit sizes mismatch: \" << left_bit_size << \" != \" << right_bit_size;\n    }\n\n    return res;\n}\n\n//____________________________________________________________________________//\n\nbool BOOST_TEST_DECL is_defined_impl( const_string symbol_name, const_string symbol_value );\n\n//____________________________________________________________________________//\n\n} // namespace tt_detail\n\n} // namespace test_tools\n\nnamespace test_toolbox = test_tools;\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_TEST_TOOLS_HPP_012705GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : Entry point for the end user into the Unit Test Framework.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/test_tools.hpp>\n#include <boost/test/unit_test_suite.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                 Auto Linking                 ************** //\n// ************************************************************************** //\n\n#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \\\n    !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)\n#  define BOOST_LIB_NAME boost_unit_test_framework\n\n#  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)\n#    define BOOST_DYN_LINK\n#  endif\n\n#  include <boost/config/auto_link.hpp>\n\n#endif  // auto-linking disabled\n\n// ************************************************************************** //\n// **************                  unit_test_main              ************** //\n// ************************************************************************** //\n\nnamespace boost { namespace unit_test {\n\nint BOOST_TEST_DECL unit_test_main( init_unit_test_func init_func, int argc, char* argv[] );\n\n}}\n\n#if defined(BOOST_TEST_DYN_LINK) && defined(BOOST_TEST_MAIN) && !defined(BOOST_TEST_NO_MAIN)\n\n// ************************************************************************** //\n// **************        main function for tests using dll     ************** //\n// ************************************************************************** //\n\nint BOOST_TEST_CALL_DECL\nmain( int argc, char* argv[] )\n{\n    return ::boost::unit_test::unit_test_main( &init_unit_test, argc, argv );\n}\n\n//____________________________________________________________________________//\n\n#endif // BOOST_TEST_DYN_LINK && BOOST_TEST_MAIN && !BOOST_TEST_NO_MAIN\n\n#endif // BOOST_TEST_UNIT_TEST_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test_log.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines singleton class unit_test_log and all manipulators.\n//  unit_test_log has output stream like interface. It's implementation is\n//  completely hidden with pimple idiom\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/test_observer.hpp>\n\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/log_level.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/utils/trivial_singleton.hpp>\n#include <boost/test/utils/lazy_ostream.hpp>\n\n// Boost\n#include <boost/utility.hpp>\n\n// STL\n#include <iosfwd>   // for std::ostream&\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                log manipulators              ************** //\n// ************************************************************************** //\n\nnamespace log {\n\nstruct BOOST_TEST_DECL begin {\n    begin( const_string fn, std::size_t ln )\n    : m_file_name( fn )\n    , m_line_num( ln )\n    {}\n\n    const_string m_file_name;\n    std::size_t m_line_num;\n};\n\nstruct end {};\n\n} // namespace log\n\n// ************************************************************************** //\n// **************             entry_value_collector            ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nclass BOOST_TEST_DECL entry_value_collector {\npublic:\n    // Constructors\n    entry_value_collector() : m_last( true ) {}\n    entry_value_collector( entry_value_collector const& rhs ) : m_last( true ) { rhs.m_last = false; }\n    ~entry_value_collector();\n\n    // collection interface\n    entry_value_collector const& operator<<( lazy_ostream const& ) const;\n    entry_value_collector const& operator<<( const_string ) const;\n\nprivate:\n    // Data members\n    mutable bool    m_last;\n};\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                 unit_test_log                ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL unit_test_log_t : public test_observer, public singleton<unit_test_log_t> {\npublic:\n    // test_observer interface implementation\n    void                test_start( counter_t test_cases_amount );\n    void                test_finish();\n    void                test_aborted();\n\n    void                test_unit_start( test_unit const& );\n    void                test_unit_finish( test_unit const&, unsigned long elapsed );\n    void                test_unit_skipped( test_unit const& );\n    void                test_unit_aborted( test_unit const& );\n\n    void                assertion_result( bool passed );\n    void                exception_caught( execution_exception const& );\n\n    virtual int         priority() { return 1; }\n\n    // log configuration methods\n    void                set_stream( std::ostream& );\n    void                set_threshold_level( log_level );\n    void                set_format( output_format );\n    void                set_formatter( unit_test_log_formatter* );\n\n    // test progress logging\n    void                set_checkpoint( const_string file, std::size_t line_num, const_string msg = const_string() );\n\n    // entry logging\n    unit_test_log_t&    operator<<( log::begin const& );        // begin entry \n    unit_test_log_t&    operator<<( log::end const& );          // end entry\n    unit_test_log_t&    operator<<( log_level );                // set entry level\n    unit_test_log_t&    operator<<( const_string );             // log entry value\n    unit_test_log_t&    operator<<( lazy_ostream const& );      // log entry value\n\n    ut_detail::entry_value_collector operator()( log_level );   // initiate entry collection\n\nprivate:\n    bool            log_entry_start();\n\n    BOOST_TEST_SINGLETON_CONS( unit_test_log_t );\n}; // unit_test_log_t\n\nBOOST_TEST_SINGLETON_INST( unit_test_log )\n\n// helper macros\n#define BOOST_TEST_LOG_ENTRY( ll )                                                  \\\n    (::boost::unit_test::unit_test_log                                              \\\n        << ::boost::unit_test::log::begin( BOOST_TEST_L(__FILE__), __LINE__ ))(ll)  \\\n/**/\n\n} // namespace unit_test\n\n} // namespace boost\n\n// ************************************************************************** //\n// **************       Unit test log interface helpers        ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_MESSAGE( M )                                 \\\n    BOOST_TEST_LOG_ENTRY( ::boost::unit_test::log_messages )    \\\n    << (::boost::unit_test::lazy_ostream::instance() << M)      \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_TEST_PASSPOINT()                                  \\\n    ::boost::unit_test::unit_test_log.set_checkpoint(           \\\n        BOOST_TEST_L(__FILE__),                                 \\\n        static_cast<std::size_t>(__LINE__) )                    \\\n/**/\n\n//____________________________________________________________________________//\n\n#define BOOST_TEST_CHECKPOINT( M )                              \\\n    ::boost::unit_test::unit_test_log.set_checkpoint(           \\\n        BOOST_TEST_L(__FILE__),                                 \\\n        static_cast<std::size_t>(__LINE__),                     \\\n        (::boost::wrap_stringstream().ref() << M).str() )       \\\n/**/\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test_log_formatter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2003-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : \n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/detail/log_level.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n\n#include <boost/test/execution_monitor.hpp>\n\n// STL\n#include <iosfwd>\n#include <string> // for std::string\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                log_entry_data                ************** //\n// ************************************************************************** //\n\nstruct BOOST_TEST_DECL log_entry_data {\n    log_entry_data()\n    {\n        m_file_name.reserve( 200 );\n    }\n\n    std::string     m_file_name;\n    std::size_t     m_line_num;\n    log_level       m_level;\n\n    void clear()\n    {\n        m_file_name.erase();\n        m_line_num      = 0;\n        m_level     = log_nothing;\n    }\n};\n\n// ************************************************************************** //\n// **************                checkpoint_data               ************** //\n// ************************************************************************** //\n\nstruct BOOST_TEST_DECL log_checkpoint_data\n{\n    const_string    m_file_name;\n    std::size_t     m_line_num;\n    std::string     m_message;\n\n    void clear()\n    {\n        m_file_name.clear();\n        m_line_num    = 0;\n        m_message = std::string();\n    }\n};\n\n// ************************************************************************** //\n// **************            unit_test_log_formatter           ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL unit_test_log_formatter {\npublic:\n    enum log_entry_types { BOOST_UTL_ET_INFO, \n                           BOOST_UTL_ET_MESSAGE,\n                           BOOST_UTL_ET_WARNING,\n                           BOOST_UTL_ET_ERROR,\n                           BOOST_UTL_ET_FATAL_ERROR };\n\n    // Destructor\n    virtual             ~unit_test_log_formatter() {}\n\n    // Formatter interface\n    virtual void        log_start( std::ostream&, counter_t test_cases_amount ) = 0;\n    virtual void        log_finish( std::ostream& ) = 0;\n    virtual void        log_build_info( std::ostream& ) = 0;\n\n    virtual void        test_unit_start( std::ostream&, test_unit const& tu ) = 0;\n    virtual void        test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed ) = 0;\n    virtual void        test_unit_skipped( std::ostream&, test_unit const& ) = 0;\n\n    virtual void        log_exception( std::ostream& os, log_checkpoint_data const& cd, execution_exception const& ex )\n    {\n        // for backward compatibility\n        log_exception( os, cd, ex.what() );\n    }\n    virtual void        log_exception( std::ostream&, log_checkpoint_data const&, const_string /* explanation */ ) {}\n\n    virtual void        log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let ) = 0;\n    virtual void        log_entry_value( std::ostream&, const_string value ) = 0;\n    virtual void        log_entry_value( std::ostream&, lazy_ostream const& value ); // there is a default impl\n    virtual void        log_entry_finish( std::ostream& ) = 0;\n};\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test_monitor.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines specific version of execution monitor used to managed \n//  run unit of test cases. Translates execution exception into error level\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER\n#define BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER\n\n// Boost.Test\n#include <boost/test/execution_monitor.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n#include <boost/test/utils/trivial_singleton.hpp>\n#include <boost/test/utils/callback.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************               unit_test_monitor              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL unit_test_monitor_t : public singleton<unit_test_monitor_t>, public execution_monitor {\npublic:\n    enum error_level { \n        test_fail               =  1,\n        test_ok                 =  0,\n        constructor_error       = -1, \n        unexpected_exception    = -2, \n        os_exception            = -3, \n        os_timeout              = -4, \n        fatal_error             = -5,  // includes both system and user\n        destructor_error        = -6\n    };\n\n    static bool is_critical_error( error_level e ) { return e <= fatal_error; }\n\n    // monitor method\n    error_level execute_and_translate( test_case const& );\n\nprivate:\n    BOOST_TEST_SINGLETON_CONS( unit_test_monitor_t );\n};\n\nBOOST_TEST_SINGLETON_INST( unit_test_monitor )\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test_suite.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines Unit Test Framework public API\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/unit_test_suite_impl.hpp>\n#include <boost/test/framework.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************    Non-auto (explicit) test case interface   ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_CASE( test_function ) \\\nboost::unit_test::make_test_case( boost::unit_test::callback0<>(test_function), BOOST_TEST_STRINGIZE( test_function ) )\n#define BOOST_CLASS_TEST_CASE( test_function, tc_instance ) \\\nboost::unit_test::make_test_case((test_function), BOOST_TEST_STRINGIZE( test_function ), tc_instance )\n\n// ************************************************************************** //\n// **************               BOOST_TEST_SUITE               ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_SUITE( testsuite_name ) \\\n( new boost::unit_test::test_suite( testsuite_name ) )\n\n// ************************************************************************** //\n// **************             BOOST_AUTO_TEST_SUITE            ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TEST_SUITE( suite_name )                             \\\nnamespace suite_name {                                                  \\\nBOOST_AUTO_TU_REGISTRAR( suite_name )( BOOST_STRINGIZE( suite_name ) ); \\\n/**/\n\n// ************************************************************************** //\n// **************            BOOST_FIXTURE_TEST_SUITE          ************** //\n// ************************************************************************** //\n\n#define BOOST_FIXTURE_TEST_SUITE( suite_name, F )                       \\\nBOOST_AUTO_TEST_SUITE( suite_name )                                     \\\ntypedef F BOOST_AUTO_TEST_CASE_FIXTURE;                                 \\\n/**/\n\n// ************************************************************************** //\n// **************           BOOST_AUTO_TEST_SUITE_END          ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TEST_SUITE_END()                                     \\\nBOOST_AUTO_TU_REGISTRAR( BOOST_JOIN( end_suite, __LINE__ ) )( 1 );      \\\n}                                                                       \\\n/**/\n\n// ************************************************************************** //\n// **************    BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES    ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( test_name, n )          \\\nstruct BOOST_AUTO_TC_UNIQUE_ID( test_name );                            \\\n                                                                        \\\nstatic struct BOOST_JOIN( test_name, _exp_fail_num_spec )               \\\n: boost::unit_test::ut_detail::                                         \\\n  auto_tc_exp_fail<BOOST_AUTO_TC_UNIQUE_ID( test_name ) >               \\\n{                                                                       \\\n    BOOST_JOIN( test_name, _exp_fail_num_spec )()                       \\\n    : boost::unit_test::ut_detail::                                     \\\n      auto_tc_exp_fail<BOOST_AUTO_TC_UNIQUE_ID( test_name ) >( n )      \\\n    {}                                                                  \\\n} BOOST_JOIN( test_name, _exp_fail_num_spec_inst );                     \\\n                                                                        \\\n/**/\n\n// ************************************************************************** //\n// **************            BOOST_FIXTURE_TEST_CASE           ************** //\n// ************************************************************************** //\n\n#define BOOST_FIXTURE_TEST_CASE( test_name, F )                         \\\nstruct test_name : public F { void test_method(); };                    \\\n                                                                        \\\nstatic void BOOST_AUTO_TC_INVOKER( test_name )()                        \\\n{                                                                       \\\n    test_name t;                                                        \\\n    t.test_method();                                                    \\\n}                                                                       \\\n                                                                        \\\nstruct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {};                         \\\n                                                                        \\\nBOOST_AUTO_TU_REGISTRAR( test_name )(                                   \\\n    boost::unit_test::make_test_case(                                   \\\n        &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ),              \\\n    boost::unit_test::ut_detail::auto_tc_exp_fail<                      \\\n        BOOST_AUTO_TC_UNIQUE_ID( test_name )>::instance()->value() );   \\\n                                                                        \\\nvoid test_name::test_method()                                           \\\n/**/\n\n// ************************************************************************** //\n// **************             BOOST_AUTO_TEST_CASE             ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TEST_CASE( test_name )                               \\\nBOOST_FIXTURE_TEST_CASE( test_name, BOOST_AUTO_TEST_CASE_FIXTURE )\n/**/\n\n// ************************************************************************** //\n// **************       BOOST_FIXTURE_TEST_CASE_TEMPLATE       ************** //\n// ************************************************************************** //\n\n#define BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, F ) \\\ntemplate<typename type_name>                                            \\\nstruct test_name : public F                                             \\\n{ void test_method(); };                                                \\\n                                                                        \\\nstruct BOOST_AUTO_TC_INVOKER( test_name ) {                             \\\n    template<typename TestType>                                         \\\n    static void run( boost::type<TestType>* = 0 )                       \\\n    {                                                                   \\\n        test_name<TestType> t;                                          \\\n        t.test_method();                                                \\\n    }                                                                   \\\n};                                                                      \\\n                                                                        \\\nBOOST_AUTO_TU_REGISTRAR( test_name )(                                   \\\n    boost::unit_test::ut_detail::template_test_case_gen<                \\\n        BOOST_AUTO_TC_INVOKER( test_name ),TL >(                        \\\n          BOOST_STRINGIZE( test_name ) ) );                             \\\n                                                                        \\\ntemplate<typename type_name>                                            \\\nvoid test_name<type_name>::test_method()                                \\\n/**/\n\n// ************************************************************************** //\n// **************        BOOST_AUTO_TEST_CASE_TEMPLATE         ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL )       \\\nBOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, BOOST_AUTO_TEST_CASE_FIXTURE )\n\n// ************************************************************************** //\n// **************           BOOST_TEST_CASE_TEMPLATE           ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_CASE_TEMPLATE( name, typelist )                          \\\n    boost::unit_test::ut_detail::template_test_case_gen<name,typelist >(    \\\n        BOOST_TEST_STRINGIZE( name ) )                                      \\\n/**/\n\n// ************************************************************************** //\n// **************      BOOST_TEST_CASE_TEMPLATE_FUNCTION       ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name )    \\\ntemplate<typename type_name>                                    \\\nvoid BOOST_JOIN( name, _impl )( boost::type<type_name>* );      \\\n                                                                \\\nstruct name {                                                   \\\n    template<typename TestType>                                 \\\n    static void run( boost::type<TestType>* frwrd = 0 )         \\\n    {                                                           \\\n       BOOST_JOIN( name, _impl )( frwrd );                      \\\n    }                                                           \\\n};                                                              \\\n                                                                \\\ntemplate<typename type_name>                                    \\\nvoid BOOST_JOIN( name, _impl )( boost::type<type_name>* )       \\\n/**/\n\n// ************************************************************************** //\n// **************              BOOST_GLOBAL_FIXURE             ************** //\n// ************************************************************************** //\n\n#define BOOST_GLOBAL_FIXTURE( F ) \\\nstatic boost::unit_test::ut_detail::global_fixture_impl<F> BOOST_JOIN( gf_, F ) ; \\\n/**/\n\n// ************************************************************************** //\n// **************         BOOST_AUTO_TEST_CASE_FIXTURE         ************** //\n// ************************************************************************** //\n\nnamespace boost { namespace unit_test { namespace ut_detail {\n\nstruct nil_t {};\n\n} // namespace ut_detail\n} // unit_test\n} // namespace boost\n\n// Intentionally is in global namespace, so that FIXURE_TEST_SUITE can reset it in user code.\ntypedef ::boost::unit_test::ut_detail::nil_t BOOST_AUTO_TEST_CASE_FIXTURE;\n\n// ************************************************************************** //\n// **************   Auto registration facility helper macros   ************** //\n// ************************************************************************** //\n\n#define BOOST_AUTO_TU_REGISTRAR( test_name )    \\\nstatic boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ )\n#define BOOST_AUTO_TC_INVOKER( test_name )      BOOST_JOIN( test_name, _invoker )\n#define BOOST_AUTO_TC_UNIQUE_ID( test_name )    BOOST_JOIN( test_name, _id )\n\n// ************************************************************************** //\n// **************                BOOST_TEST_MAIN               ************** //\n// ************************************************************************** //\n\n#if defined(BOOST_TEST_MAIN)\n\n#ifdef BOOST_TEST_ALTERNATIVE_INIT_API\nbool init_unit_test()                   {\n#else\n::boost::unit_test::test_suite*\ninit_unit_test_suite( int, char* [] )   {\n#endif\n\n#ifdef BOOST_TEST_MODULE\n    using namespace ::boost::unit_test;\n    assign_op( framework::master_test_suite().p_name.value, BOOST_TEST_STRINGIZE( BOOST_TEST_MODULE ).trim( \"\\\"\" ), 0 );\n    \n#endif\n\n#ifdef BOOST_TEST_ALTERNATIVE_INIT_API\n    return true;\n}\n#else\n    return 0;\n}\n#endif\n\n#endif\n\n//____________________________________________________________________________//\n\n#endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/unit_test_suite_impl.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines test_unit, test_case, test_case_results, test_suite and test_tree_visitor\n// ***************************************************************************\n\n#ifndef BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER\n#define BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/detail/global_typedef.hpp>\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/callback.hpp>\n#include <boost/test/detail/fwd_decl.hpp>\n#include <boost/test/detail/workaround.hpp>\n#include <boost/test/test_observer.hpp>\n\n// Boost\n#include <boost/shared_ptr.hpp>\n#include <boost/mpl/for_each.hpp>\n#include <boost/mpl/identity.hpp>\n#include <boost/type.hpp>\n#include <boost/type_traits/is_const.hpp>\n\n// STL\n#include <typeinfo> // for typeid\n#include <string>   // for std::string\n#include <list>     // for std::list\n#include <vector>   // for std::vector\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                   test_unit                  ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_unit {\npublic:\n    enum { type = tut_any };\n\n    // Constructor\n    test_unit( const_string tu_name, test_unit_type t );\n\n    // dependencies management\n    void    depends_on( test_unit* tu );\n    bool    check_dependencies() const;\n\n    // Public r/o properties\n    typedef BOOST_READONLY_PROPERTY(test_unit_id,(framework_impl))  id_t;\n    typedef BOOST_READONLY_PROPERTY(test_unit_id,(test_suite))      parent_id_t;\n    readonly_property<test_unit_type>   p_type;                 // type for this test unit\n    readonly_property<const_string>     p_type_name;            // \"case\"/\"suite\"\n    id_t                                p_id;                   // unique id for this test unit\n    parent_id_t                         p_parent_id;            // parent test suite id\n\n    // Public r/w properties\n    readwrite_property<std::string>     p_name;                 // name for this test unit\n    readwrite_property<unsigned>        p_timeout;              // timeout for the test unit execution \n    readwrite_property<counter_t>       p_expected_failures;    // number of expected failures in this test unit\n    mutable readwrite_property<bool>    p_enabled;              // enabled status for this unit\n\n    void                                increase_exp_fail( unsigned num );\n\nprotected:\n    ~test_unit();\n\nprivate:\n    // Data members\n    std::list<test_unit_id>             m_dependencies;\n};\n\n// ************************************************************************** //\n// **************              test_case_generator             ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_unit_generator {\npublic:\n    virtual test_unit*  next() const = 0;\n\nprotected:\n    BOOST_TEST_PROTECTED_VIRTUAL ~test_unit_generator() {}\n};\n\n// ************************************************************************** //\n// **************                   test_case                  ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_case : public test_unit {\npublic:\n    enum { type = tut_case };\n\n    // Constructor\n    test_case( const_string tc_name, callback0<> const& test_func );\n\n    // Access methods\n    callback0<> const&  test_func() const { return m_test_func; }\n\nprivate:\n    friend class framework_impl;\n    ~test_case() {}\n\n    // BOOST_MSVC <= 1200 have problems with callback as property\n    // Data members\n    callback0<> m_test_func;\n};\n\n// ************************************************************************** //\n// **************                  test_suite                  ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_suite : public test_unit {\npublic:\n    enum { type = tut_suite };\n\n    // Constructor\n    explicit        test_suite( const_string ts_name );\n\n    // test unit list management\n    void            add( test_unit* tu, counter_t expected_failures = 0, unsigned timeout = 0 );\n    void            add( test_unit_generator const& gen, unsigned timeout = 0 );\n    void            remove( test_unit_id id );\n\n    // access methods\n    test_unit_id    get( const_string tu_name ) const;\n    std::size_t     size() const { return m_members.size(); }\n\nprotected:\n    friend BOOST_TEST_DECL \n    void        traverse_test_tree( test_suite const&, test_tree_visitor& );\n    friend class framework_impl;\n    virtual     ~test_suite() {}\n\n    // Data members\n    std::vector<test_unit_id> m_members;\n};\n\n// ************************************************************************** //\n// **************               master_test_suite              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL master_test_suite_t : public test_suite {\npublic:\n    master_test_suite_t() : test_suite( \"Master Test Suite\" )\n    , argc( 0 )\n    , argv( 0 )\n    {}\n    \n    // Data members    \n    int      argc;\n    char**   argv;\n};\n\n\n// ************************************************************************** //\n// **************               test_tree_visitor              ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL test_tree_visitor {\npublic:\n    // test tree visitor interface\n    virtual void    visit( test_case const& )               {}\n    virtual bool    test_suite_start( test_suite const& )   { return true; }\n    virtual void    test_suite_finish( test_suite const& )  {}\n\nprotected:\n    BOOST_TEST_PROTECTED_VIRTUAL ~test_tree_visitor() {}\n};\n\n// ************************************************************************** //\n// **************               traverse_test_tree             ************** //\n// ************************************************************************** //\n\nBOOST_TEST_DECL void    traverse_test_tree( test_case const&, test_tree_visitor& );\nBOOST_TEST_DECL void    traverse_test_tree( test_suite const&, test_tree_visitor& );\nBOOST_TEST_DECL void    traverse_test_tree( test_unit_id     , test_tree_visitor& );\n\n//____________________________________________________________________________//\n\ninline void\ntraverse_test_tree( test_unit const& tu, test_tree_visitor& V )\n{\n    if( tu.p_type == tut_case )\n        traverse_test_tree( static_cast<test_case const&>( tu ), V );\n    else\n        traverse_test_tree( static_cast<test_suite const&>( tu ), V );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                test_case_counter             ************** //\n// ************************************************************************** //\n\nclass test_case_counter : public test_tree_visitor {\npublic:\n    // Constructor\n    test_case_counter() : p_count( 0 ) {}\n\n    BOOST_READONLY_PROPERTY( counter_t, (test_case_counter)) p_count;\nprivate:\n    // test tree visitor interface\n    virtual void    visit( test_case const& );\n    virtual bool    test_suite_start( test_suite const& ts )    { return ts.p_enabled; }\n};\n\n// ************************************************************************** //\n// **************               test_being_aborted             ************** //\n// ************************************************************************** //\n\nstruct BOOST_TEST_DECL test_being_aborted {};\n\n// ************************************************************************** //\n// **************               object generators              ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nBOOST_TEST_DECL std::string normalize_test_case_name( const_string tu_name );\n\ntemplate<typename InstanceType,typename UserTestCase>\nstruct user_tc_method_invoker {\n    typedef void (UserTestCase::*TestMethod )();\n\n    user_tc_method_invoker( shared_ptr<InstanceType> inst, TestMethod test_method )\n    : m_inst( inst ), m_test_method( test_method ) {}\n\n    void operator()() { ((*m_inst).*m_test_method)(); }\n\n    shared_ptr<InstanceType> m_inst;\n    TestMethod               m_test_method;\n};\n\n} // namespace ut_detail\n\n//____________________________________________________________________________//\n\ninline test_case*\nmake_test_case( callback0<> const& test_func, const_string tc_name )\n{\n    return new test_case( ut_detail::normalize_test_case_name( tc_name ), test_func );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename UserTestCase, typename InstanceType>\ninline test_case*\nmake_test_case( void (UserTestCase::*           test_method )(),\n                const_string                    tc_name,\n                boost::shared_ptr<InstanceType> user_test_case )\n{\n    return new test_case( ut_detail::normalize_test_case_name( tc_name ), \n                          ut_detail::user_tc_method_invoker<InstanceType,UserTestCase>( user_test_case, test_method ) );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************           auto_test_unit_registrar           ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\nstruct BOOST_TEST_DECL auto_test_unit_registrar\n{\n    // Constructors\n                auto_test_unit_registrar( test_case* tc, counter_t exp_fail );\n    explicit    auto_test_unit_registrar( const_string ts_name );\n    explicit    auto_test_unit_registrar( test_unit_generator const& tc_gen );\n    explicit    auto_test_unit_registrar( int );\n\nprivate:\n    static std::list<test_suite*>& curr_ts_store();\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\nstruct auto_tc_exp_fail {\n    auto_tc_exp_fail() : m_value( 0 ) {}\n\n    explicit    auto_tc_exp_fail( unsigned v )\n    : m_value( v )\n    {\n        instance() = this;\n    }\n\n    static auto_tc_exp_fail*& instance() \n    {\n        static auto_tc_exp_fail     inst; \n        static auto_tc_exp_fail*    inst_ptr = &inst; \n\n        return inst_ptr;\n    }\n\n    unsigned    value() const { return m_value; }\n\nprivate:\n    // Data members\n    unsigned    m_value;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                global_fixture                ************** //\n// ************************************************************************** //\n\nclass BOOST_TEST_DECL global_fixture : public test_observer { \npublic: \n    // Constructor\n    global_fixture();\n}; \n\n//____________________________________________________________________________//\n\nnamespace ut_detail {\n\ntemplate<typename F> \nstruct global_fixture_impl : public global_fixture {\n    // Constructor\n    global_fixture_impl(): m_fixure( 0 )    {}\n\n    // test observer interface\n    virtual void    test_start( counter_t ) { m_fixure = new F; }\n    virtual void    test_finish()           { delete m_fixure; m_fixure = 0; } \n    virtual void    test_aborted()          { delete m_fixure; m_fixure = 0; } \n\nprivate:\n    // Data members\n    F*  m_fixure;\n}; \n\n// ************************************************************************** //\n// **************          test_case_template_invoker          ************** //\n// ************************************************************************** //\n\ntemplate<typename TestCaseTemplate,typename TestType>\nclass test_case_template_invoker {\npublic:\n    void    operator()()    { TestCaseTemplate::run( (boost::type<TestType>*)0 ); }\n};\n\n// ************************************************************************** //\n// **************           generate_test_case_4_type          ************** //\n// ************************************************************************** //\n\ntemplate<typename Generator,typename TestCaseTemplate>\nstruct generate_test_case_4_type {\n    explicit    generate_test_case_4_type( const_string tc_name, Generator& G )\n    : m_test_case_name( tc_name )\n    , m_holder( G )\n    {}\n\n    template<typename TestType>\n    void        operator()( mpl::identity<TestType> )\n    {\n        std::string full_name;\n        assign_op( full_name, m_test_case_name, 0 );\n        full_name += '<';\n        full_name += typeid(TestType).name();\n        if( boost::is_const<TestType>::value )\n            full_name += \" const\";\n        full_name += '>';\n\n        m_holder.m_test_cases.push_back( \n            new test_case( full_name, test_case_template_invoker<TestCaseTemplate,TestType>() ) );\n    }\n\nprivate:\n    // Data members\n    const_string    m_test_case_name;\n    Generator&      m_holder;\n};\n\n// ************************************************************************** //\n// **************              test_case_template              ************** //\n// ************************************************************************** //\n\ntemplate<typename TestCaseTemplate,typename TestTypesList>\nclass template_test_case_gen : public test_unit_generator {\npublic:\n    // Constructor\n    template_test_case_gen( const_string tc_name )\n    {\n        typedef generate_test_case_4_type<template_test_case_gen<TestCaseTemplate,TestTypesList>,\n                                          TestCaseTemplate\n        > single_test_gen;\n        mpl::for_each<TestTypesList,mpl::make_identity<mpl::_> >( single_test_gen( tc_name, *this ) );\n    }\n\n    virtual test_unit* next() const\n    {\n        if( m_test_cases.empty() )\n            return 0;\n    \n        test_unit* res = m_test_cases.front();\n        m_test_cases.pop_front();\n\n        return res;\n    }\n\n    // Data members\n    mutable std::list<test_unit*> m_test_cases;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\n} // unit_test\n\n} // namespace boost\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/algorithm.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : addition to STL algorithms\n// ***************************************************************************\n\n#ifndef BOOST_ALGORITHM_HPP_062304GER\n#define BOOST_ALGORITHM_HPP_062304GER\n\n#include <utility>\n#include <algorithm> // std::find\n#include <functional> // std::bind1st\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair\n/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\ntemplate <class InputIter1, class InputIter2>\ninline std::pair<InputIter1, InputIter2>\nmismatch( InputIter1 first1, InputIter1 last1,\n          InputIter2 first2, InputIter2 last2 )\n{\n    while( first1 != last1 && first2 != last2 && *first1 == *first2 ) {\n        ++first1;\n        ++first2;\n    }\n\n    return std::pair<InputIter1, InputIter2>(first1, first2);\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair\n/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one. This algorithms\n/// uses supplied predicate for collection elements comparison\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\n/// @param pred - predicate to be used for search\ntemplate <class InputIter1, class InputIter2, class Predicate>\ninline std::pair<InputIter1, InputIter2>\nmismatch( InputIter1 first1, InputIter1 last1,\n          InputIter2 first2, InputIter2 last2,\n          Predicate pred )\n{\n    while( first1 != last1 && first2 != last2 && pred( *first1, *first2 ) ) {\n        ++first1;\n        ++first2;\n    }\n\n    return std::pair<InputIter1, InputIter2>(first1, first2);\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for first element that does not belong a second one\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\ntemplate<class ForwardIterator1, class ForwardIterator2>\ninline ForwardIterator1\nfind_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1, \n                   ForwardIterator2 first2, ForwardIterator2 last2 )\n{\n    while( first1 != last1 ) {\n        if( std::find( first2, last2, *first1 ) == last2 )\n            break;\n        ++first1;\n    }\n\n    return first1;\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for first element that does not satisfy binary \n/// predicate in conjunction will any element in second collection\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\n/// @param pred - predicate to be used for search\ntemplate<class ForwardIterator1, class ForwardIterator2, class Predicate>\ninline ForwardIterator1\nfind_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1, \n                   ForwardIterator2 first2, ForwardIterator2 last2, \n                   Predicate pred )\n{\n    while( first1 != last1 ) {\n        if( std::find_if( first2, last2, std::bind1st( pred, *first1 ) ) == last2 )\n            break;\n        ++first1;\n    }\n\n    return first1;\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for last element that belongs to a second one\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\ntemplate<class BidirectionalIterator1, class ForwardIterator2>\ninline BidirectionalIterator1\nfind_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1, \n              ForwardIterator2 first2, ForwardIterator2 last2 )\n{\n    if( first1 == last1 || first2 == last2 )\n        return last1;\n\n    BidirectionalIterator1 it1 = last1;\n    while( --it1 != first1 && std::find( first2, last2, *it1 ) == last2 ) {}\n\n    return it1 == first1 && std::find( first2, last2, *it1 ) == last2 ? last1 : it1;\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for last element that satisfy binary \n/// predicate in conjunction will at least one element in second collection\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\n/// @param pred - predicate to be used for search\ntemplate<class BidirectionalIterator1, class ForwardIterator2, class Predicate>\ninline BidirectionalIterator1\nfind_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1, \n              ForwardIterator2 first2, ForwardIterator2 last2, \n              Predicate pred )\n{\n    if( first1 == last1 || first2 == last2 )\n        return last1;\n\n    BidirectionalIterator1 it1 = last1;\n    while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ) {}\n\n    return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for last element that does not belong to a second one\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\ntemplate<class BidirectionalIterator1, class ForwardIterator2>\ninline BidirectionalIterator1\nfind_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1, \n                  ForwardIterator2 first2, ForwardIterator2 last2 )\n{\n    if( first1 == last1 || first2 == last2 )\n        return last1;\n\n    BidirectionalIterator1 it1 = last1;\n    while( --it1 != first1 && std::find( first2, last2, *it1 ) != last2 ) {}\n\n    return it1 == first1 && std::find( first2, last2, *it1 ) != last2 ? last1 : it1;\n}\n\n//____________________________________________________________________________//\n\n/// @brief this algorithm search through first collection for last element that does not satisfy binary \n/// predicate in conjunction will any element in second collection\n\n/// @param first1 - first collection begin iterator\n/// @param last1 - first collection end iterator\n/// @param first2 - second collection begin iterator\n/// @param last2 - second collection end iterator\n/// @param pred - predicate to be used for search\ntemplate<class BidirectionalIterator1, class ForwardIterator2, class Predicate>\ninline BidirectionalIterator1\nfind_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1, \n                  ForwardIterator2 first2, ForwardIterator2 last2, \n                  Predicate pred )\n{\n    if( first1 == last1 || first2 == last2 )\n        return last1;\n\n    BidirectionalIterator1 it1 = last1;\n    while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) != last2 ) {}\n\n    return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_ALGORITHM_HPP_062304GER\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/assign_op.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : overloadable assignment\n// ***************************************************************************\n\n#ifndef BOOST_TEST_ASSIGN_OP_033005GER\n#define BOOST_TEST_ASSIGN_OP_033005GER\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************             generic assign operator          ************** //\n// ************************************************************************** //\n\n// generic\ntemplate<typename T,typename S>\ninline void\nassign_op( T& t, S const& s, long )\n{\n    t = s;\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n#endif // BOOST_TEST_ASSIGN_OP_033005GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/basic_cstring/basic_cstring.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : class basic_cstring wraps C string and provide std_string like \n//                interface\n// ***************************************************************************\n\n#ifndef BOOST_TEST_BASIC_CSTRING_HPP_071894GER\n#define BOOST_TEST_BASIC_CSTRING_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/basic_cstring_fwd.hpp>\n#include <boost/test/utils/basic_cstring/bcs_char_traits.hpp>\n\n// STL\n#include <string>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                basic_cstring                 ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\nclass basic_cstring {\n    typedef basic_cstring<CharT>                        self_type;\npublic:\n    // Subtypes\n    typedef ut_detail::bcs_char_traits<CharT>           traits_type;\n    typedef typename ut_detail::bcs_char_traits<CharT>::std_string  std_string;\n\n    typedef CharT                                       value_type;\n    typedef value_type*                                 pointer;\n    typedef value_type const*                           const_pointer;\n    typedef value_type&                                 reference;\n    typedef const value_type&                           const_reference;\n    typedef std::size_t                                 size_type;\n    typedef std::ptrdiff_t                              difference_type;\n\n    typedef value_type const*                           const_iterator;\n    typedef value_type*                                 iterator;\n\n    // !! should also present reverse_iterator, const_reverse_iterator\n\n#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n    enum npos_type { npos = static_cast<size_type>(-1) };\n#else\n    // IBM/VisualAge version 6 is not able to handle enums larger than 4 bytes.\n    // But size_type is 8 bytes in 64bit mode.\n    static const size_type npos = -1 ;\n#endif\n\n    static pointer  null_str();\n\n    // Constructors; default copy constructor is generated by compiler\n    basic_cstring();\n    basic_cstring( std_string const& s );\n    basic_cstring( pointer s );\n    basic_cstring( pointer s, size_type arg_size );\n    basic_cstring( pointer first, pointer last );\n\n    // data access methods\n    value_type      operator[]( size_type index ) const;\n    value_type      at( size_type index ) const;\n\n    // size operators\n    size_type       size() const;\n    bool            is_empty() const;\n    void            clear();\n    void            resize( size_type new_len );\n\n    // !! only for STL container conformance use is_empty instead\n    bool            empty() const; \n\n    // Trimming\n    self_type&      trim_right( size_type trim_size );\n    self_type&      trim_left( size_type trim_size );\n    self_type&      trim_right( iterator it );\n    self_type&      trim_left( iterator it );\n#ifndef __IBMCPP__\n    self_type&      trim_left( self_type exclusions = self_type() ) ;\n    self_type&      trim_right( self_type exclusions = self_type() ) ;\n    self_type&      trim( self_type exclusions = self_type() ) ;\n#else\n    // VisualAge version 6 has in this case a problem with the default arguments.\n    self_type&      trim_left( self_type exclusions ) ;\n    self_type&      trim_right( self_type exclusions ) ;\n    self_type&      trim( self_type exclusions ) ;\n    self_type&      trim_left() { trim_left( self_type() ) ; }\n    self_type&      trim_right() { trim_right( self_type() ) ; }\n    self_type&      trim() { trim( self_type() ) ; }\n#endif\n\n    // Assignment operators\n    basic_cstring&  operator=( self_type const& s );\n    basic_cstring&  operator=( std_string const& s );\n    basic_cstring&  operator=( pointer s );\n\n    template<typename CharT2>\n    basic_cstring&  assign( basic_cstring<CharT2> const& s ) { *this = basic_cstring<CharT>( s.begin(), s.end() ); return *this; }\n    basic_cstring&  assign( self_type const& s, size_type pos, size_type len );\n    basic_cstring&  assign( std_string const& s );\n    basic_cstring&  assign( std_string const& s, size_type pos, size_type len );\n    basic_cstring&  assign( pointer s );\n    basic_cstring&  assign( pointer s, size_type len );\n    basic_cstring&  assign( pointer f, pointer l );\n\n    // swapping\n    void            swap( self_type& s );\n\n    // Iterators\n    iterator        begin();\n    const_iterator  begin() const;\n    iterator        end();\n    const_iterator  end() const;\n\n    // !! should have rbegin, rend\n\n    // substring search operation\n    size_type       find( basic_cstring ) const;\n    size_type       rfind( basic_cstring ) const;\n    self_type       substr( size_type beg_index, size_type end_index = npos ) const;\n\nprivate:\n    static self_type default_trim_ex();\n\n    // Data members\n    iterator        m_begin;\n    iterator        m_end;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::pointer\nbasic_cstring<CharT>::null_str()\n{\n    static CharT null = 0;\n    return &null;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline\nbasic_cstring<CharT>::basic_cstring()\n: m_begin( null_str() )\n, m_end( m_begin )\n{\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline\nbasic_cstring<CharT>::basic_cstring( std_string const& s )\n: m_begin( s.c_str() )\n, m_end( m_begin + s.size() )\n{\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline\nbasic_cstring<CharT>::basic_cstring( pointer s )\n: m_begin( s ? s : null_str() )\n, m_end  ( m_begin + (s ? traits_type::length( s ) : 0 ) )\n{\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline\nbasic_cstring<CharT>::basic_cstring( pointer s, size_type arg_size )\n: m_begin( s ), m_end( m_begin + arg_size )\n{\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline\nbasic_cstring<CharT>::basic_cstring( pointer first, pointer last )\n: m_begin( first )\n, m_end( last )\n{\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::value_type\nbasic_cstring<CharT>::operator[]( size_type index ) const\n{\n    return m_begin[index];\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::value_type\nbasic_cstring<CharT>::at( size_type index ) const\n{\n    if( m_begin + index >= m_end )\n        return static_cast<value_type>(0);\n\n    return m_begin[index];\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::size_type\nbasic_cstring<CharT>::size() const\n{\n    return m_end - m_begin;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\nbasic_cstring<CharT>::is_empty() const\n{\n    return m_end == m_begin;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\nbasic_cstring<CharT>::empty() const\n{\n    return is_empty();\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline void\nbasic_cstring<CharT>::clear()\n{\n    m_begin = m_end;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline void\nbasic_cstring<CharT>::resize( size_type new_len )\n{\n    if( m_begin + new_len < m_end )\n        m_end = m_begin + new_len;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_left( size_type trim_size )\n{\n    m_begin += trim_size;\n    if( m_end <= m_begin )\n        clear();\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_left( iterator it )\n{\n    m_begin = it;\n    if( m_end <= m_begin )\n        clear();\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_left( basic_cstring exclusions )\n{\n    if( exclusions.is_empty() )\n        exclusions = default_trim_ex();\n\n    iterator it;\n    for( it = begin(); it != end(); ++it ) {\n        if( traits_type::find( exclusions.begin(), exclusions.size(), *it ) == reinterpret_cast<pointer>(0) )\n            break;\n    }\n    \n    return trim_left( it );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_right( size_type trim_size )\n{\n    m_end  -= trim_size;\n    if( m_end <= m_begin )\n        clear();\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_right( iterator it )\n{\n    m_end = it;\n    if( m_end <= m_begin )\n        clear();\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim_right( basic_cstring exclusions )\n{\n    if( exclusions.is_empty() )\n        exclusions = default_trim_ex();\n\n    iterator it;\n\n    for( it = end()-1; it != begin()-1; --it ) {\n        if( self_type::traits_type::find( exclusions.begin(),  exclusions.size(), *it ) == reinterpret_cast<pointer>(0) )\n            break;\n    }\n    \n    return trim_right( it+1 );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::trim( basic_cstring exclusions )\n{\n    trim_left( exclusions );\n    trim_right( exclusions );\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::operator=( basic_cstring<CharT> const& s )\n{\n    m_begin = s.m_begin;\n    m_end   = s.m_end;\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::operator=( std_string const& s )\n{\n    return *this = self_type( s );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::operator=( pointer s )\n{\n    return *this = self_type( s );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( basic_cstring<CharT> const& s, size_type pos, size_type len )\n{\n    return *this = self_type( s.m_begin + pos, len );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( std_string const& s )\n{\n    return *this = self_type( s );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( std_string const& s, size_type pos, size_type len )\n{\n    return *this = self_type( s.c_str() + pos, len );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( pointer s )\n{\n    return *this = self_type( s );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( pointer s, size_type len )\n{\n    return *this = self_type( s, len );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>&\nbasic_cstring<CharT>::assign( pointer f, pointer l )\n{\n    return *this = self_type( f, l );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline void\nbasic_cstring<CharT>::swap( basic_cstring<CharT>& s )\n{\n    // do not want to include alogrithm\n    pointer tmp1    = m_begin;\n    pointer tmp2    = m_end;\n\n    m_begin         = s.m_begin;\n    m_end           = s.m_end;\n\n    s.m_begin       = tmp1;\n    s.m_end         = tmp2;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::iterator\nbasic_cstring<CharT>::begin()\n{\n    return m_begin;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::const_iterator\nbasic_cstring<CharT>::begin() const\n{\n    return m_begin;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::iterator\nbasic_cstring<CharT>::end()\n{\n    return m_end;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::const_iterator\nbasic_cstring<CharT>::end() const\n{\n    return m_end;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::size_type\nbasic_cstring<CharT>::find( basic_cstring<CharT> str ) const\n{\n    if( str.is_empty() || str.size() > size() )\n        return static_cast<size_type>(npos);\n\n    const_iterator it   = begin();\n    const_iterator last = end() - str.size() + 1;\n\n    while( it != last ) {\n        if( traits_type::compare( it, str.begin(), str.size() ) == 0 )\n            break;\n\n        ++it;\n    }\n\n    return it == last ? static_cast<size_type>(npos) : it - begin();\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::size_type\nbasic_cstring<CharT>::rfind( basic_cstring<CharT> str ) const\n{\n    if( str.is_empty() || str.size() > size() )\n        return static_cast<size_type>(npos);\n\n    const_iterator it   = end() - str.size();\n    const_iterator last = begin()-1;\n\n    while( it != last ) {\n        if( traits_type::compare( it, str.begin(), str.size() ) == 0 )\n            break;\n\n        --it;\n    }\n\n    return it == last ? static_cast<size_type>(npos) : static_cast<size_type>(it - begin());\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>\nbasic_cstring<CharT>::substr( size_type beg_index, size_type end_index ) const\n{\n    return beg_index > size()\n            ?       self_type()\n            : end_index > size()\n                ?   self_type( m_begin + beg_index, m_end )\n                :   self_type( m_begin + beg_index, m_begin + end_index );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline basic_cstring<CharT>\nbasic_cstring<CharT>::default_trim_ex()\n{\n    static CharT ws[3] = { CharT(' '), CharT('\\t'), CharT('\\n') }; // !! wide case\n\n    return self_type( ws, 3 );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************             comparison operators             ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT1,typename CharT2>\ninline bool\noperator==( basic_cstring<CharT1> const& s1, basic_cstring<CharT2> const& s2 )\n{\n    typedef typename basic_cstring<CharT1>::traits_type traits_type;\n    return s1.size() == s2.size() && \n               traits_type::compare( s1.begin(), s2.begin(), s1.size() ) == 0;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT1,typename CharT2>\ninline bool\noperator==( basic_cstring<CharT1> const& s1, CharT2* s2 )\n{\n#if !defined(__DMC__)\n    return s1 == basic_cstring<CharT2>( s2 );\n#else\n    return s1 == basic_cstring<CharT2 const>( s2 );\n#endif\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator==( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )\n{\n    return s1 == basic_cstring<CharT>( s2 );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT1,typename CharT2>\ninline bool\noperator==( CharT1* s2, basic_cstring<CharT2> const& s1 )\n{\n    return s1 == s2;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator==( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )\n{\n    return s1 == s2;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator!=( basic_cstring<CharT> const& s1, CharT* s2 )\n{\n    return !(s1 == s2);\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator!=( CharT* s2, basic_cstring<CharT> const& s1 )\n{\n    return !(s1 == s2);\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator!=( basic_cstring<CharT> const& s1, basic_cstring<CharT> const& s2 )\n{\n    return !(s1 == s2);\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator!=( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )\n{\n    return !(s1 == s2);\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT>\ninline bool\noperator!=( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )\n{\n    return !(s1 == s2);\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  first_char                  ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::value_type\nfirst_char( basic_cstring<CharT> source )\n{\n    typedef typename basic_cstring<CharT>::value_type string_value_type;\n\n    return source.is_empty() ? static_cast<string_value_type>(0) : *source.begin();\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  last_char                   ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\ninline typename basic_cstring<CharT>::value_type\nlast_char( basic_cstring<CharT> source )\n{\n    typedef typename basic_cstring<CharT>::value_type string_value_type;\n\n    return source.is_empty() ? static_cast<string_value_type>(0) : *(source.end()-1);\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  assign_op                   ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT1, typename CharT2>\ninline void\nassign_op( std::basic_string<CharT1>& target, basic_cstring<CharT2> src, int )\n{\n    target.assign( src.begin(), src.size() );\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_BASIC_CSTRING_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : basic_cstring class wrap C string and provide std_string like \n//                interface\n// ***************************************************************************\n\n#ifndef BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER\n#define BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER\n\n#include <boost/detail/workaround.hpp>\n\nnamespace boost {\n\nnamespace unit_test {\n\ntemplate<typename CharT> class      basic_cstring;\ntypedef basic_cstring<char const>   const_string;\n#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))\ntypedef const_string                literal_string;\n#else\ntypedef const_string const          literal_string;\n#endif\n\ntypedef char const* const           c_literal_string;\n\n} // namespace unit_test\n\n} // namespace boost\n\n#endif // BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : generic char traits class; wraps std::char_traits\n// ***************************************************************************\n\n#ifndef BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER\n#define BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER\n\n// Boost\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/test/detail/config.hpp>\n#include <boost/type_traits/add_const.hpp>\n\n// STL\n#include <string>                       // std::char_traits\n#include <cstddef>                      // std::size_t\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace ut_detail {\n\ntemplate<typename CharT> struct bcs_base_char           { typedef CharT type; };\n\ntemplate<> struct bcs_base_char<char const>             { typedef char type; };\ntemplate<> struct bcs_base_char<unsigned char>          { typedef char type; };\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\ntemplate<> struct bcs_base_char<unsigned char const>    { typedef char type; };\n#endif\n\ntemplate<> struct bcs_base_char<wchar_t const>          { typedef wchar_t type; };\n\n// ************************************************************************** //\n// **************               bcs_char_traits                ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\nstruct bcs_char_traits_impl\n{\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\n    typedef CharT const const_char;\n#else\n    typedef typename boost::add_const<CharT>::type const_char;\n#endif\n    static bool eq( CharT c1, CharT c2 )\n    {\n        return c1 == c2;\n    }\n    static bool lt( CharT c1, CharT c2 )\n    {\n        return c1 < c2;\n    }\n\n    static int compare( const_char* cstr1, const_char* cstr2, std::size_t n )\n    {\n        while( n > 0 ) {\n            if( !eq( *cstr1, *cstr2 ) )\n                return lt( *cstr1, *cstr2 ) ? -1 : 1;\n            ++cstr1;\n            ++cstr2;\n            --n;\n        }\n\n        return 0;\n    }\n\n    static std::size_t length( const_char* cstr )\n    {\n        const_char null_char = CharT();\n\n        const_char* ptr = cstr;\n        while( !eq( *ptr, null_char ) )\n            ++ptr;\n\n        return ptr - cstr;\n    }\n\n    static const_char* find( const_char* s, std::size_t n, CharT c )\n    {\n        while( n > 0 ) {\n            if( eq( *s, c ) )\n                return s;\n\n            ++s;\n            --n;\n        }\n        return 0;\n    }\n};\n\n#ifdef BOOST_CLASSIC_IOSTREAMS\ntemplate<typename CharT>\nstruct char_traits_with_find : std::string_char_traits<CharT> {\n    static CharT const* find( CharT const* s, std::size_t n, CharT c )\n    {\n        while( n > 0 ) {\n            if( eq( *s, c ) )\n                return s;\n\n            ++s;\n            --n;\n        }\n        return 0;\n    }\n};\n\ntemplate<> struct bcs_char_traits_impl<char> : char_traits_with_find<char> {};\ntemplate<> struct bcs_char_traits_impl<wchar_t> : char_traits_with_find<wchar_t> {};\n#else\ntemplate<> struct bcs_char_traits_impl<char> : std::char_traits<char> {};\ntemplate<> struct bcs_char_traits_impl<wchar_t> : std::char_traits<wchar_t> {};\n#endif\n\ntemplate<typename CharT>\nclass bcs_char_traits : public bcs_char_traits_impl<CharT> {\n    typedef typename ut_detail::bcs_base_char<CharT>::type                              the_base_char;\npublic:\n#ifdef BOOST_CLASSIC_IOSTREAMS\n    typedef std::basic_string<the_base_char, std::string_char_traits<the_base_char> >   std_string;\n#else\n    typedef std::basic_string<the_base_char, std::char_traits<the_base_char> >          std_string;\n#endif\n};\n\n} // namespace ut_detail\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/basic_cstring/compare.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : class basic_cstring comparisons implementation\n// ***************************************************************************\n\n#ifndef  BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER\n#define  BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n\n// STL\n#include <functional>\n#include <cctype>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570)\nnamespace std { using ::toupper; }\n# endif\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                case_ins_compare              ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\ntemplate<class CharT>\nstruct case_ins\n{\n    static bool         eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); }\n    static bool         lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) <  (std::toupper)( c2 ); }\n\n    static int          compare( CharT const* s1, CharT const* s2, std::size_t n )\n    {\n        for( std::size_t i = 0; i < n; ++i ) {\n            if( !eq( s1[i], s2[i] ) )\n                return lt( s1[i], s2[i] ) ? -1 : 1;\n        }\n        return 0;\n    }\n};\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                  case_ins_eq                 ************** //\n// ************************************************************************** //\n\ntemplate<class CharT>\ninline bool\ncase_ins_eq( basic_cstring<CharT> x, basic_cstring<CharT> y )\n{\n    return x.size() == y.size() && ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) == 0;\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                 case_ins_less                ************** //\n// ************************************************************************** //\n\ntemplate<class CharT>\nclass case_ins_less : public std::binary_function<basic_cstring<CharT>,basic_cstring<CharT>,bool>\n{\npublic:\n    bool operator()( basic_cstring<CharT> x, basic_cstring<CharT> y ) const\n    {\n        return x.size() != y.size() \n                ? x.size() < y.size() \n                : ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) < 0;\n    }\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  operator <                  ************** //\n// ************************************************************************** //\n\ntemplate<class CharT>\ninline bool\noperator <( boost::unit_test::basic_cstring<CharT> const& x,\n            boost::unit_test::basic_cstring<CharT> const& y )\n{\n    typedef typename boost::unit_test::basic_cstring<CharT>::traits_type traits_type;\n    return x.size() != y.size() \n            ? x.size() < y.size() \n            : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0;\n}\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/basic_cstring/io.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : basic_cstring i/o implementation\n// ***************************************************************************\n\n#ifndef  BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER\n#define  BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n\n// STL\n#include <iosfwd>\n#include <string>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n#ifdef BOOST_CLASSIC_IOSTREAMS\n\ntemplate<typename CharT>\ninline std::ostream&\noperator<<( std::ostream& os, basic_cstring<CharT> const& str )\n{\n    typedef typename ut_detail::bcs_base_char<CharT>::type char_type;\n    char_type const* const beg = reinterpret_cast<char_type const* const>( str.begin() );\n    char_type const* const end = reinterpret_cast<char_type const* const>( str.end() );\n    os << std::basic_string<char_type>( beg, end - beg );\n\n    return os;\n}\n\n#else\n\ntemplate<typename CharT1, typename Tr,typename CharT2>\ninline std::basic_ostream<CharT1,Tr>&\noperator<<( std::basic_ostream<CharT1,Tr>& os, basic_cstring<CharT2> const& str )\n{\n    CharT1 const* const beg = reinterpret_cast<CharT1 const*>( str.begin() ); // !!\n    CharT1 const* const end = reinterpret_cast<CharT1 const*>( str.end() );\n    os << std::basic_string<CharT1,Tr>( beg, end - beg );\n\n    return os;\n}\n\n#endif\n\n//____________________________________________________________________________//\n\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/callback.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : \n// ***************************************************************************\n\n#ifndef BOOST_TEST_CALLBACK_020505GER\n#define BOOST_TEST_CALLBACK_020505GER\n\n// Boost\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/shared_ptr.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(BOOST_INTEL, <= 700)\n#  define BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n#endif\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace ut_detail {\n\nstruct unused {};\n\ntemplate<typename R>\nstruct invoker {\n    template<typename Functor>\n    R       invoke( Functor& f )                        { return f(); }\n    template<typename Functor, typename T1>\n    R       invoke( Functor& f, T1 t1 )                 { return f( t1 ); }\n    template<typename Functor, typename T1, typename T2>\n    R       invoke( Functor& f, T1 t1, T2 t2 )          { return f( t1, t2 ); }\n    template<typename Functor, typename T1, typename T2, typename T3>\n    R       invoke( Functor& f, T1 t1, T2 t2, T3 t3 )   { return f( t1, t2, t3 ); }\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct invoker<unused> {\n    template<typename Functor>\n    unused  invoke( Functor& f )                        { f(); return unused(); }\n    template<typename Functor, typename T1>\n    unused  invoke( Functor& f, T1 t1 )                 { f( t1 ); return unused(); }\n    template<typename Functor, typename T1, typename T2>\n    unused  invoke( Functor& f, T1 t1, T2 t2 )          { f( t1, t2 ); return unused(); }\n    template<typename Functor, typename T1, typename T2, typename T3>\n    unused  invoke( Functor& f, T1 t1, T2 t2, T3 t3 )   { f( t1, t2, t3 ); return unused(); }\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************             unit_test::callback0             ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\ntemplate<typename R>\nstruct callback0_impl {\n    virtual ~callback0_impl() {}\n\n    virtual R invoke() = 0;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename R, typename Functor>\nstruct callback0_impl_t : callback0_impl<R> {\n    // Constructor\n    explicit callback0_impl_t( Functor f ) : m_f( f ) {}\n\n    virtual R invoke() { return invoker<R>().invoke( m_f ); }\n\nprivate:\n    // Data members\n    Functor m_f;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\ntemplate<typename R = ut_detail::unused>\nclass callback0 {\npublic:\n    // Constructors\n    callback0() {}\n#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n    callback0( callback0 const& rhs ) : m_impl( rhs.m_impl ) {}\n#endif\n\n    template<typename Functor>\n    callback0( Functor f )\n    : m_impl( new ut_detail::callback0_impl_t<R,Functor>( f ) ) {}\n    \n    void        operator=( callback0 const& rhs ) { m_impl = rhs.m_impl; }\n\n    template<typename Functor>\n    void        operator=( Functor f ) { m_impl.reset( new ut_detail::callback0_impl_t<R,Functor>( f ) );  }\n\n    R           operator()() const { return m_impl->invoke(); }\n\n    bool        operator!() const { return !m_impl; }\n\nprivate:\n    // Data members\n    boost::shared_ptr<ut_detail::callback0_impl<R> > m_impl;\n};\n\n// ************************************************************************** //\n// **************             unit_test::callback1             ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\ntemplate<typename R, typename T1>\nstruct callback1_impl {\n    virtual ~callback1_impl() {}\n\n    virtual R invoke( T1 t1 ) = 0;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename R, typename T1,typename Functor>\nstruct callback1_impl_t : callback1_impl<R,T1> {\n    // Constructor\n    explicit callback1_impl_t( Functor f ) : m_f( f ) {}\n\n    virtual R invoke( T1 t1 ) { return invoker<R>().invoke( m_f, t1 ); }\n\nprivate:\n    // Data members\n    Functor m_f;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\ntemplate<typename T1,typename R = ut_detail::unused>\nclass callback1 {\npublic:\n    // Constructors\n    callback1() {}\n#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n    callback1( callback1 const& rhs ) : m_impl( rhs.m_impl ) {}\n#endif\n\n    template<typename Functor>\n    callback1( Functor f )\n    : m_impl( new ut_detail::callback1_impl_t<R,T1,Functor>( f ) ) {}\n\n    void        operator=( callback1 const& rhs ) { m_impl = rhs.m_impl; }\n\n    template<typename Functor>\n    void        operator=( Functor f ) { m_impl.reset( new ut_detail::callback1_impl_t<R,T1,Functor>( f ) );  }\n\n    R           operator()( T1 t1 ) const { return m_impl->invoke( t1 ); }\n\n    bool        operator!() const { return !m_impl; }\n\nprivate:\n    // Data members\n    boost::shared_ptr<ut_detail::callback1_impl<R,T1> > m_impl;\n};\n\n// ************************************************************************** //\n// **************             unit_test::callback2             ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\ntemplate<typename R, typename T1,typename T2>\nstruct callback2_impl {\n    virtual ~callback2_impl() {}\n\n    virtual R invoke( T1 t1, T2 t2 ) = 0;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename R, typename T1, typename T2, typename Functor>\nstruct callback2_impl_t : callback2_impl<R,T1,T2> {\n    // Constructor\n    explicit callback2_impl_t( Functor f ) : m_f( f ) {}\n\n    virtual R invoke( T1 t1, T2 t2 ) { return invoker<R>().template invoke<Functor,T1,T2>( m_f, t1, t2 ); }\n\nprivate:\n    // Data members\n    Functor m_f;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\ntemplate<typename T1,typename T2, typename R = ut_detail::unused>\nclass callback2 {\npublic:\n    // Constructors\n    callback2() {}\n#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n    callback2( callback2 const& rhs ) : m_impl( rhs.m_impl ) {}\n#endif\n\n    template<typename Functor>\n                callback2( Functor f ) : m_impl( new ut_detail::callback2_impl_t<R,T1,T2,Functor>( f ) ) {}\n\n    void        operator=( callback2 const& rhs ) { m_impl = rhs.m_impl; }\n\n    template<typename Functor>\n    void        operator=( Functor f ) { m_impl.reset( new ut_detail::callback2_impl_t<R,T1,T2,Functor>( f ) );  }\n\n    R           operator()( T1 t1, T2 t2 ) const { return m_impl->invoke( t1, t2 ); }\n\n    bool        operator!() const { return !m_impl; }\n\nprivate:\n    // Data members\n    boost::shared_ptr<ut_detail::callback2_impl<R,T1,T2> > m_impl;\n};\n\n// ************************************************************************** //\n// **************             unit_test::callback3             ************** //\n// ************************************************************************** //\n\nnamespace ut_detail {\n\ntemplate<typename R, typename T1, typename T2, typename T3>\nstruct callback3_impl {\n    virtual ~callback3_impl() {}\n\n    virtual R invoke( T1 t1, T2 t2, T3 t3 ) = 0;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename Functor>\nstruct callback3_impl_t : callback3_impl<R,T1,T2,T3> {\n    // Constructor\n    explicit callback3_impl_t( Functor f ) : m_f( f ) {}\n\n    virtual R invoke( T1 t1, T2 t2, T3 t3 ) { return invoker<R>().invoke( m_f, t1, t2, t3 ); }\n\nprivate:\n    // Data members\n    Functor m_f;\n};\n\n//____________________________________________________________________________//\n\n} // namespace ut_detail\n\ntemplate<typename T1,typename T2, typename T3, typename R = ut_detail::unused>\nclass callback3 {\npublic:\n    // Constructors\n    callback3() {}\n#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n    callback3( callback3 const& rhs ) : m_impl( rhs.m_impl ) {}\n#endif\n\n    template<typename Functor>\n    callback3( Functor f )\n    : m_impl( new ut_detail::callback3_impl_t<R,T1,T2,T3,Functor>( f ) ) {}\n\n    void        operator=( callback3 const& rhs ) { m_impl = rhs.m_impl; }\n\n    template<typename Functor>\n    void        operator=( Functor f ) { m_impl.reset( new ut_detail::callback3_impl_t<R,T1,T2,T3,Functor>( f ) );  }\n\n    R           operator()( T1 t1, T2 t2, T3 t3 ) const { return m_impl->invoke( t1, t2, t3 ); }\n\n    bool        operator!() const { return !m_impl; }\n\nprivate:\n    // Data members\n    boost::shared_ptr<ut_detail::callback3_impl<R,T1,T2,T3> > m_impl;\n};\n\n} // namespace unit_test\n\n} // namespace boost\n\n#undef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_CALLBACK_020505GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/class_properties.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : simple facility that mimmic notion of read-only read-write \n//  properties in C++ classes. Original idea by Henrik Ravn.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER\n#define BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n// Boost\n#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n#include <boost/preprocessor/seq/for_each.hpp>\n#endif\n#include <boost/call_traits.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/utility/addressof.hpp>\n\n// STL\n#include <iosfwd>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                 class_property               ************** //\n// ************************************************************************** //\n\ntemplate<class PropertyType>\nclass class_property {\nprotected:\n    typedef typename call_traits<PropertyType>::const_reference     read_access_t;\n    typedef typename call_traits<PropertyType>::param_type          write_param_t;\n    typedef typename add_pointer<typename add_const<PropertyType>::type>::type address_res_t;\npublic:\n    // Constructor\n                    class_property() : value( PropertyType() ) {}\n    explicit        class_property( write_param_t init_value )\n    : value( init_value ) {}\n\n    // Access methods\n    operator        read_access_t() const   { return value; }\n    read_access_t   get() const             { return value; }\n    bool            operator!() const       { return !value; }\n    address_res_t   operator&() const       { return &value; }\n\n    // Data members\n#ifndef BOOST_TEST_NO_PROTECTED_USING\nprotected:\n#endif\n    PropertyType        value;\n};\n\n//____________________________________________________________________________//\n\n#ifdef BOOST_CLASSIC_IOSTREAMS\n\ntemplate<class PropertyType>\ninline std::ostream&\noperator<<( std::ostream& os, class_property<PropertyType> const& p )\n\n#else\n\ntemplate<typename CharT1, typename Tr,class PropertyType>\ninline std::basic_ostream<CharT1,Tr>&\noperator<<( std::basic_ostream<CharT1,Tr>& os, class_property<PropertyType> const& p )\n\n#endif\n{\n    return os << p.get();\n}\n\n//____________________________________________________________________________//\n\n#define DEFINE_PROPERTY_FREE_BINARY_OPERATOR( op )                              \\\ntemplate<class PropertyType>                                                    \\\ninline bool                                                                     \\\noperator op( PropertyType const& lhs, class_property<PropertyType> const& rhs ) \\\n{                                                                               \\\n    return lhs op rhs.get();                                                    \\\n}                                                                               \\\ntemplate<class PropertyType>                                                    \\\ninline bool                                                                     \\\noperator op( class_property<PropertyType> const& lhs, PropertyType const& rhs ) \\\n{                                                                               \\\n    return lhs.get() op rhs;                                                    \\\n}                                                                               \\\ntemplate<class PropertyType>                                                    \\\ninline bool                                                                     \\\noperator op( class_property<PropertyType> const& lhs,                           \\\n             class_property<PropertyType> const& rhs )                          \\\n{                                                                               \\\n    return lhs.get() op rhs.get();                                              \\\n}                                                                               \\\n/**/\n\nDEFINE_PROPERTY_FREE_BINARY_OPERATOR( == )\nDEFINE_PROPERTY_FREE_BINARY_OPERATOR( != )\n\n#undef DEFINE_PROPERTY_FREE_BINARY_OPERATOR\n\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n\n#define DEFINE_PROPERTY_LOGICAL_OPERATOR( op )                                  \\\ntemplate<class PropertyType>                                                    \\\ninline bool                                                                     \\\noperator op( bool b, class_property<PropertyType> const& p )                    \\\n{                                                                               \\\n    return b op p.get();                                                        \\\n}                                                                               \\\ntemplate<class PropertyType>                                                    \\\ninline bool                                                                     \\\noperator op( class_property<PropertyType> const& p, bool b )                    \\\n{                                                                               \\\n    return b op p.get();                                                        \\\n}                                                                               \\\n/**/\n\nDEFINE_PROPERTY_LOGICAL_OPERATOR( && )\nDEFINE_PROPERTY_LOGICAL_OPERATOR( || )\n\n#endif\n\n// ************************************************************************** //\n// **************               readonly_property              ************** //\n// ************************************************************************** //\n\ntemplate<class PropertyType>\nclass readonly_property : public class_property<PropertyType> {\n    typedef class_property<PropertyType>         base_prop;\n    typedef typename base_prop::address_res_t    arrow_res_t;\nprotected:\n    typedef typename base_prop::write_param_t    write_param_t;\npublic:\n    // Constructor\n                    readonly_property() {}\n    explicit        readonly_property( write_param_t init_value ) : base_prop( init_value ) {}\n\n    // access methods\n    arrow_res_t     operator->() const      { return boost::addressof( base_prop::value ); }\n};\n\n//____________________________________________________________________________//\n\n#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))\n\n#define BOOST_READONLY_PROPERTY( property_type, friends ) boost::unit_test::readwrite_property<property_type >\n\n#else\n\n#define BOOST_READONLY_PROPERTY_DECLARE_FRIEND(r, data, elem) friend class elem;\n\n#define BOOST_READONLY_PROPERTY( property_type, friends )                           \\\nclass BOOST_JOIN( readonly_property, __LINE__ )                                     \\\n: public boost::unit_test::readonly_property<property_type > {                      \\\n    typedef boost::unit_test::readonly_property<property_type > base_prop;          \\\n    BOOST_PP_SEQ_FOR_EACH( BOOST_READONLY_PROPERTY_DECLARE_FRIEND, ' ', friends )   \\\n    typedef base_prop::write_param_t  write_param_t;                                \\\npublic:                                                                             \\\n                BOOST_JOIN( readonly_property, __LINE__ )() {}                      \\\n    explicit    BOOST_JOIN( readonly_property, __LINE__ )( write_param_t init_v  )  \\\n    : base_prop( init_v ) {}                                                        \\\n}                                                                                   \\\n/**/\n\n#endif\n\n// ************************************************************************** //\n// **************              readwrite_property              ************** //\n// ************************************************************************** //\n\ntemplate<class PropertyType>\nclass readwrite_property : public class_property<PropertyType> {\n    typedef class_property<PropertyType>                base_prop;\n    typedef typename add_pointer<PropertyType>::type    arrow_res_t;\n    typedef typename base_prop::address_res_t           const_arrow_res_t;\n    typedef typename base_prop::write_param_t           write_param_t;\npublic:\n                    readwrite_property() : base_prop() {}\n    explicit        readwrite_property( write_param_t init_value ) : base_prop( init_value ) {}\n\n    // access methods\n    void            set( write_param_t v )  { base_prop::value = v; }\n    arrow_res_t     operator->()            { return boost::addressof( base_prop::value ); }\n    const_arrow_res_t operator->() const    { return boost::addressof( base_prop::value ); }\n\n#ifndef BOOST_TEST_NO_PROTECTED_USING\n    using           base_prop::value;\n#endif\n};\n\n//____________________________________________________________________________//\n\n} // unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#undef BOOST_TEST_NO_PROTECTED_USING\n\n#endif // BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/custom_manip.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : simple helpers for creating cusom output manipulators\n// ***************************************************************************\n\n#ifndef BOOST_TEST_CUSTOM_MANIP_HPP_071894GER\n#define BOOST_TEST_CUSTOM_MANIP_HPP_071894GER\n\n// STL\n#include <iosfwd>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************          custom manipulators helpers         ************** //\n// ************************************************************************** //\n\ntemplate<typename Manip>\nstruct custom_printer {\n    explicit custom_printer( std::ostream& ostr ) : m_ostr( &ostr ) {}\n\n    std::ostream& operator*() const { return *m_ostr; }\n\nprivate:\n    std::ostream* const m_ostr;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename Uniq> struct custom_manip {};\n\n//____________________________________________________________________________//\n\ntemplate<typename Uniq>\ninline custom_printer<custom_manip<Uniq> >\noperator<<( std::ostream& ostr, custom_manip<Uniq> const& ) { return custom_printer<custom_manip<Uniq> >( ostr ); }\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_CUSTOM_MANIP_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/fixed_mapping.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2001-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : fixed sized mapping with specified invalid value\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FIXED_MAPPING_HPP_071894GER\n#define BOOST_TEST_FIXED_MAPPING_HPP_071894GER\n\n// Boost\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/arithmetic/add.hpp>\n#include <boost/call_traits.hpp>\n#include <boost/detail/binary_search.hpp>\n\n// STL\n#include <vector>\n#include <functional>\n#include <algorithm>\n#include <utility>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// configurable maximum fixed sized mapping size supported by this header.\n// You can redefine it before inclusion of this file.\n#ifndef MAX_MAP_SIZE\n#define MAX_MAP_SIZE 20\n#endif\n\n#define CONSTR_DECL_MID( z, i, dummy1 ) key_param_type key##i, value_param_type v##i,\n#define CONSTR_BODY_MID( z, i, dummy1 ) add_pair( key##i, v##i );\n\n#define CONSTR_DECL( z, n, dummy1 )                                 \\\n    fixed_mapping( BOOST_PP_REPEAT_ ## z( n, CONSTR_DECL_MID, \"\" )  \\\n                         value_param_type invalid_value )           \\\n    : m_invalid_value( invalid_value )                              \\\n    {                                                               \\\n        BOOST_PP_REPEAT_ ## z( n, CONSTR_BODY_MID, \"\" )             \\\n        init();                                                     \\\n    }                                                               \\\n/**/\n\n#define CONTRUCTORS( n ) BOOST_PP_REPEAT( n, CONSTR_DECL, \"\" )\n\ntemplate<typename Key, typename Value, typename Compare = std::less<Key> >\nclass fixed_mapping\n{\n    typedef std::pair<Key,Value>                            elem_type;\n    typedef std::vector<elem_type>                          map_type;\n    typedef typename std::vector<elem_type>::const_iterator iterator;\n\n    typedef typename call_traits<Key>::param_type           key_param_type;\n    typedef typename call_traits<Value>::param_type         value_param_type;\n    typedef typename call_traits<Value>::const_reference    value_ref_type;\n\n#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))\n    struct p1; friend struct p1;\n    struct p2; friend struct p2;\n#endif\n\n    // bind( Compare(), bind(select1st<elem_type>(), _1),  bind(identity<Key>(), _2) )\n    struct p1 : public std::binary_function<elem_type,Key,bool>\n    {\n        bool operator()( elem_type const& x, Key const& y ) const { return Compare()( x.first, y ); }\n    };\n\n    // bind( Compare(), bind(select1st<elem_type>(), _1), bind(select1st<elem_type>(), _2) )\n    struct p2 : public std::binary_function<elem_type,elem_type,bool>\n    {\n        bool operator()( elem_type const& x, elem_type const& y ) const { return Compare()( x.first, y.first ); }\n    };\n\npublic:\n    // Constructors\n    CONTRUCTORS( BOOST_PP_ADD( MAX_MAP_SIZE, 1 ) )\n\n    // key -> value access\n    value_ref_type  operator[]( key_param_type key ) const\n    {\n        iterator it = boost::detail::lower_bound( m_map.begin(), m_map.end(), key, p1() );\n\n        return (it == m_map.end() || Compare()( key, it->first ) ) ? m_invalid_value : it->second;\n    }\n\nprivate:\n    // Implementation\n    void            init()                                                  { std::sort( m_map.begin(), m_map.end(), p2() ); }\n    void            add_pair( key_param_type key, value_param_type value )  { m_map.push_back( elem_type( key, value ) ); }\n\n    // Data members\n    Value           m_invalid_value;\n    map_type        m_map;\n};\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#undef MAX_MAP_SIZE\n#undef CONSTR_DECL_MID\n#undef CONSTR_BODY_MID\n#undef CONSTR_DECL\n#undef CONTRUCTORS\n\n#endif // BOOST_TEST_FIXED_MAPPING_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/foreach.hpp",
    "content": "//  (C) Copyright Eric Niebler 2004-2005\n//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : this is an abridged version of an excelent BOOST_FOREACH facility\n//  presented by Eric Niebler. I am so fond of it so I can't wait till it \n//  going to be accepted into Boost. Also I need version with less number of dependencies \n//  and more portable. This version doesn't support rvalues and will reeveluate it's \n//  parameters, but should be good enough for my purposes.\n// ***************************************************************************\n\n#ifndef BOOST_TEST_FOREACH_HPP_021005GER\n#define BOOST_TEST_FOREACH_HPP_021005GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n// Boost\n#include <boost/type.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/test/detail/workaround.hpp>\n\n#include <boost/type_traits/is_const.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\nnamespace for_each {\n\n// ************************************************************************** //\n// **************                  static_any                  ************** //\n// ************************************************************************** //\n\nstruct static_any_base\n{\n    operator bool() const { return false; }\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename Iter>\nstruct static_any : static_any_base\n{\n    static_any( Iter const& t ) : m_it( t ) {}\n\n    mutable Iter m_it;\n};\n\n//____________________________________________________________________________//\n\ntypedef static_any_base const& static_any_t;\n\n//____________________________________________________________________________//\n\ntemplate<typename Iter>\ninline Iter&\nstatic_any_cast( static_any_t a, Iter* = 0 )\n{\n    return static_cast<Iter&>( static_cast<static_any<Iter> const&>( a ).m_it );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                   is_const                   ************** //\n// ************************************************************************** //\n\ntemplate<typename C>\ninline is_const<C>\nis_const_coll( C& )\n{\n    return is_const<C>();\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                     begin                    ************** //\n// ************************************************************************** //\n\ntemplate<typename C>\ninline static_any<BOOST_DEDUCED_TYPENAME C::iterator>\nbegin( C& t, mpl::false_ )\n{\n    return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.begin() );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename C>\ninline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>\nbegin( C const& t, mpl::true_ )\n{\n    return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.begin() );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                      end                     ************** //\n// ************************************************************************** //\n\ntemplate<typename C>\ninline static_any<BOOST_DEDUCED_TYPENAME C::iterator>\nend( C& t, mpl::false_ )\n{\n    return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.end() );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename C>\ninline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>\nend( C const& t, mpl::true_ )\n{\n    return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.end() );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                      done                    ************** //\n// ************************************************************************** //\n\ntemplate<typename C>\ninline bool\ndone( static_any_t cur, static_any_t end, C&, mpl::false_ )\n{\n    return  static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur ) ==\n            static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( end );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename C>\ninline bool\ndone( static_any_t cur, static_any_t end, C const&, mpl::true_ )\n{\n    return  static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur ) ==\n            static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( end );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                      next                    ************** //\n// ************************************************************************** //\n\ntemplate<typename C>\ninline void\nnext( static_any_t cur, C&, mpl::false_ )\n{\n    ++static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename C>\ninline void\nnext( static_any_t cur, C const&, mpl::true_ )\n{\n    ++static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                      deref                   ************** //\n// ************************************************************************** //\n\ntemplate<class RefType,typename C>\ninline RefType\nderef( static_any_t cur, C&, ::boost::type<RefType>, mpl::false_ )\n{\n    return *static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );\n}\n\n//____________________________________________________________________________//\n\ntemplate<class RefType,typename C>\ninline RefType\nderef( static_any_t cur, C const&, ::boost::type<RefType>, mpl::true_ )\n{\n    return *static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************              BOOST_TEST_FOREACH              ************** //\n// ************************************************************************** //\n\n#define BOOST_TEST_FE_ANY                   ::boost::unit_test::for_each::static_any_t\n#define BOOST_TEST_FE_IS_CONST( COL )       ::boost::unit_test::for_each::is_const_coll( COL )\n\n#define BOOST_TEST_FE_BEG( COL )            \\\n    ::boost::unit_test::for_each::begin(    \\\n        COL,                                \\\n        BOOST_TEST_FE_IS_CONST( COL ) )     \\\n/**/\n\n#define BOOST_TEST_FE_END( COL )            \\\n    ::boost::unit_test::for_each::end(      \\\n        COL,                                \\\n        BOOST_TEST_FE_IS_CONST( COL ) )     \\\n/**/\n\n#define BOOST_TEST_FE_DONE( COL )           \\\n    ::boost::unit_test::for_each::done(     \\\n        BOOST_TEST_FE_CUR_VAR,              \\\n        BOOST_TEST_FE_END_VAR,              \\\n        COL,                                \\\n        BOOST_TEST_FE_IS_CONST( COL ) )     \\\n/**/\n\n#define BOOST_TEST_FE_NEXT( COL )           \\\n    ::boost::unit_test::for_each::next(     \\\n        BOOST_TEST_FE_CUR_VAR,              \\\n        COL,                                \\\n        BOOST_TEST_FE_IS_CONST( COL ) )     \\\n/**/\n\n#define BOOST_FOREACH_NOOP(COL)             \\\n    ((void)&(COL))\n\n#define BOOST_TEST_FE_DEREF( COL, RefType ) \\\n    ::boost::unit_test::for_each::deref(    \\\n        BOOST_TEST_FE_CUR_VAR,              \\\n        COL,                                \\\n        ::boost::type<RefType >(),          \\\n        BOOST_TEST_FE_IS_CONST( COL ) )     \\\n/**/\n\n#if BOOST_WORKAROUND( BOOST_MSVC, == 1310 )\n#define BOOST_TEST_LINE_NUM\n#else\n#define BOOST_TEST_LINE_NUM     __LINE__\n#endif\n\n#define BOOST_TEST_FE_CUR_VAR   BOOST_JOIN( _fe_cur_, BOOST_TEST_LINE_NUM )\n#define BOOST_TEST_FE_END_VAR   BOOST_JOIN( _fe_end_, BOOST_TEST_LINE_NUM )\n#define BOOST_TEST_FE_CON_VAR   BOOST_JOIN( _fe_con_, BOOST_TEST_LINE_NUM )\n\n#define BOOST_TEST_FOREACH( RefType, var, COL )                                             \\\nif( BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ) ) {} else            \\\nif( BOOST_TEST_FE_ANY BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL ) ) {} else            \\\nfor( bool BOOST_TEST_FE_CON_VAR = true;                                                     \\\n          BOOST_TEST_FE_CON_VAR && !BOOST_TEST_FE_DONE( COL );                              \\\n          BOOST_TEST_FE_CON_VAR ? BOOST_TEST_FE_NEXT( COL ) : BOOST_FOREACH_NOOP( COL ))    \\\n                                                                                            \\\n    if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else                                    \\\n    for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType );                                 \\\n         !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true )                             \\\n/**/\n\n//____________________________________________________________________________//\n\n} // namespace for_each\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_FOREACH_HPP_021005GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/iterator/input_iterator_facade.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : Input iterator facade \n// ***************************************************************************\n\n#ifndef BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER\n#define BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER\n\n// Boost\n#include <boost/iterator/iterator_facade.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************          input_iterator_core_access          ************** //\n// ************************************************************************** //\n\nclass input_iterator_core_access\n{\n#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))\npublic:\n#else\n    template <class I, class V, class R, class TC> friend class input_iterator_facade;\n#endif\n\n    template <class Facade>\n    static bool get( Facade& f )\n    {\n        return f.get();\n    }\n\nprivate:\n    // objects of this class are useless\n    input_iterator_core_access(); //undefined\n};\n\n// ************************************************************************** //\n// **************            input_iterator_facade             ************** //\n// ************************************************************************** //\n\ntemplate<typename Derived,\n         typename ValueType,\n         typename Reference = ValueType const&,\n         typename Traversal = single_pass_traversal_tag>\nclass input_iterator_facade : public iterator_facade<Derived,ValueType,Traversal,Reference>\n{\npublic:\n    // Constructor\n    input_iterator_facade() : m_valid( false ), m_value() {}\n\nprotected: // provide access to the Derived\n    void                init()\n    {\n        m_valid = true;\n        increment();\n    }\n\n    // Data members\n    mutable bool        m_valid;\n    ValueType           m_value;\n\nprivate:\n    friend class boost::iterator_core_access;\n\n    // iterator facade interface implementation\n    void                increment()\n    {\n        // we make post-end incrementation indefinetly safe \n        if( m_valid )\n            m_valid = input_iterator_core_access::get( *static_cast<Derived*>(this) );\n    }\n    Reference           dereference() const\n    {\n        return m_value;\n    }\n\n    // iterator facade interface implementation\n    bool                equal( input_iterator_facade const& rhs ) const\n    {\n        // two invalid iterator equals, inequal otherwise\n        return !m_valid && !rhs.m_valid;\n    }\n};\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/iterator/token_iterator.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : token iterator for string and range tokenization\n// ***************************************************************************\n\n#ifndef BOOST_TOKEN_ITERATOR_HPP_071894GER\n#define BOOST_TOKEN_ITERATOR_HPP_071894GER\n\n// Boost\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <boost/iterator/iterator_categories.hpp>\n#include <boost/iterator/iterator_traits.hpp>\n\n#include <boost/test/utils/iterator/input_iterator_facade.hpp>\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n#include <boost/test/utils/named_params.hpp>\n#include <boost/test/utils/foreach.hpp>\n\n// STL\n#include <iosfwd>\n#include <cctype>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n#ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std{ using ::ispunct; using ::isspace; }\n#endif\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************               ti_delimeter_type              ************** //\n// ************************************************************************** //\n\nenum ti_delimeter_type { \n    dt_char,        // character is delimeter if it among explicit list of some characters\n    dt_ispunct,     // character is delimeter if it satisfies ispunct functor\n    dt_isspace,     // character is delimeter if it satisfies isspace functor\n    dt_none         // no character is delimeter\n};\n\nnamespace ut_detail {\n\n// ************************************************************************** //\n// **************             default_char_compare             ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\nclass default_char_compare {\npublic:\n    bool operator()( CharT c1, CharT c2 )\n    {\n#ifdef BOOST_CLASSIC_IOSTREAMS\n        return std::string_char_traits<CharT>::eq( c1, c2 );\n#else\n        return std::char_traits<CharT>::eq( c1, c2 );\n#endif\n    }\n};\n\n// ************************************************************************** //\n// **************                 delim_policy                 ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT,typename CharCompare>\nclass delim_policy {\n    typedef basic_cstring<CharT const> cstring;\npublic:\n    // Constructor\n    explicit    delim_policy( ti_delimeter_type t = dt_char, cstring d = cstring() )\n    : m_type( t )\n    {\n        set_delimeters( d );\n    }\n\n    void        set_delimeters( ti_delimeter_type t ) { m_type = t; }\n    template<typename Src>\n    void        set_delimeters( Src d )\n    {\n        nfp::optionally_assign( m_delimeters, d );\n        \n        if( !m_delimeters.is_empty() )\n            m_type = dt_char;\n    }\n\n    bool        operator()( CharT c )\n    {\n        switch( m_type ) {\n        case dt_char: {\n            BOOST_TEST_FOREACH( CharT, delim, m_delimeters )\n                if( CharCompare()( delim, c ) )\n                    return true;\n\n            return false;\n        }\n        case dt_ispunct:\n            return (std::ispunct)( c ) != 0;\n        case dt_isspace:\n            return (std::isspace)( c ) != 0;\n        case dt_none:\n            return false;\n        }\n\n        return false;\n    }\n\nprivate:\n    // Data members\n    cstring             m_delimeters;\n    ti_delimeter_type   m_type;\n};\n\n// ************************************************************************** //\n// **************                 token_assigner               ************** //\n// ************************************************************************** //\n\ntemplate<typename TraversalTag>\nstruct token_assigner {\n#if BOOST_WORKAROUND( BOOST_DINKUMWARE_STDLIB, < 306 )\n    template<typename Iterator, typename C, typename T>\n    static void assign( Iterator b, Iterator e, std::basic_string<C,T>& t )\n    { for( ; b != e; ++b ) t += *b; }\n    \n    template<typename Iterator, typename C>\n    static void assign( Iterator b, Iterator e, basic_cstring<C>& t )  { t.assign( b, e ); }\n#else\n    template<typename Iterator, typename Token>\n    static void assign( Iterator b, Iterator e, Token& t )  { t.assign( b, e ); }\n#endif\n    template<typename Iterator, typename Token>\n    static void append_move( Iterator& b, Token& )          { ++b; }\n};\n\n//____________________________________________________________________________//\n\ntemplate<>\nstruct token_assigner<single_pass_traversal_tag> {\n    template<typename Iterator, typename Token>\n    static void assign( Iterator b, Iterator e, Token& t )  {}\n\n    template<typename Iterator, typename Token>\n    static void append_move( Iterator& b, Token& t )        { t += *b; ++b; }\n};\n\n} // namespace ut_detail\n\n// ************************************************************************** //\n// **************                  modifiers                   ************** //\n// ************************************************************************** //\n\nnamespace {\nnfp::keyword<struct dropped_delimeters_t >           dropped_delimeters;\nnfp::keyword<struct kept_delimeters_t >              kept_delimeters;\nnfp::typed_keyword<bool,struct keep_empty_tokens_t > keep_empty_tokens;\nnfp::typed_keyword<std::size_t,struct max_tokens_t > max_tokens;\n}\n\n// ************************************************************************** //\n// **************             token_iterator_base              ************** //\n// ************************************************************************** //\n\ntemplate<typename Derived,\n         typename CharT,\n         typename CharCompare   = ut_detail::default_char_compare<CharT>,\n         typename ValueType     = basic_cstring<CharT const>,\n         typename Reference     = basic_cstring<CharT const>,\n         typename Traversal     = forward_traversal_tag>\nclass token_iterator_base\n: public input_iterator_facade<Derived,ValueType,Reference,Traversal> {\n    typedef basic_cstring<CharT const>                                      cstring;\n    typedef ut_detail::delim_policy<CharT,CharCompare>                      delim_policy;\n    typedef input_iterator_facade<Derived,ValueType,Reference,Traversal>    base;\n\nprotected:\n    // Constructor\n    explicit    token_iterator_base()\n    : m_is_dropped( dt_isspace )\n    , m_is_kept( dt_ispunct )\n    , m_keep_empty_tokens( false )\n    , m_tokens_left( static_cast<std::size_t>(-1) )\n    , m_token_produced( false )\n    {\n    }\n\n    template<typename Modifier>\n    void\n    apply_modifier( Modifier const& m )\n    {\n        if( m.has( dropped_delimeters ) )\n            m_is_dropped.set_delimeters( m[dropped_delimeters] );\n\n        if( m.has( kept_delimeters ) )\n            m_is_kept.set_delimeters( m[kept_delimeters] );\n\n        if( m.has( keep_empty_tokens ) )\n            m_keep_empty_tokens = true;\n\n        nfp::optionally_assign( m_tokens_left, m, max_tokens );\n    }\n\n    template<typename Iter> \n    bool                    get( Iter& begin, Iter end )\n    {\n        typedef ut_detail::token_assigner<BOOST_DEDUCED_TYPENAME iterator_traversal<Iter>::type> Assigner;\n        Iter check_point;\n\n        this->m_value.clear();\n\n        if( !m_keep_empty_tokens ) {\n            while( begin != end && m_is_dropped( *begin ) )\n                ++begin;\n\n            if( begin == end )\n                return false;\n\n            check_point = begin;\n\n            if( m_tokens_left == 1 )\n                while( begin != end )\n                    Assigner::append_move( begin, this->m_value );\n            else if( m_is_kept( *begin ) )\n                Assigner::append_move( begin, this->m_value );\n            else\n                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )\n                    Assigner::append_move( begin, this->m_value );\n\n            --m_tokens_left;\n        } \n        else { // m_keep_empty_tokens is true\n            check_point = begin;\n\n            if( begin == end ) {\n                if( m_token_produced ) \n                    return false;\n\n                m_token_produced = true;\n            }\n            if( m_is_kept( *begin ) ) {\n                if( m_token_produced ) \n                    Assigner::append_move( begin, this->m_value );\n\n                m_token_produced = !m_token_produced;\n            } \n            else if( !m_token_produced && m_is_dropped( *begin ) )\n                m_token_produced = true;\n            else {\n                if( m_is_dropped( *begin ) )\n                    check_point = ++begin;\n\n                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )\n                    Assigner::append_move( begin, this->m_value );\n\n                m_token_produced = true;\n            }\n        }\n\n        Assigner::assign( check_point, begin, this->m_value );\n\n        return true;\n    }\n\nprivate:\n    // Data members\n    delim_policy            m_is_dropped;\n    delim_policy            m_is_kept;\n    bool                    m_keep_empty_tokens;\n    std::size_t             m_tokens_left;\n    bool                    m_token_produced;\n};\n\n// ************************************************************************** //\n// **************          basic_string_token_iterator         ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT,\n         typename CharCompare = ut_detail::default_char_compare<CharT> >\nclass basic_string_token_iterator\n: public token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> {\n    typedef basic_cstring<CharT const> cstring;\n    typedef token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> base;\npublic:\n    explicit    basic_string_token_iterator() {}\n    explicit    basic_string_token_iterator( cstring src )\n    : m_src( src )\n    {\n        this->init();\n    }\n\n    template<typename Src, typename Modifier>\n    basic_string_token_iterator( Src src, Modifier const& m )\n    : m_src( src )\n    {\n        this->apply_modifier( m );\n\n        this->init();\n    }\n\nprivate:\n    friend class input_iterator_core_access;\n\n    // input iterator implementation\n    bool        get()\n    {\n        typename cstring::iterator begin = m_src.begin();\n        bool res = base::get( begin, m_src.end() );\n\n        m_src.assign( begin, m_src.end() );\n\n        return res;\n    }\n\n    // Data members\n    cstring     m_src;\n};\n\ntypedef basic_string_token_iterator<char>       string_token_iterator;\ntypedef basic_string_token_iterator<wchar_t>    wstring_token_iterator;\n\n// ************************************************************************** //\n// **************              range_token_iterator            ************** //\n// ************************************************************************** //\n\ntemplate<typename Iter,\n         typename CharCompare = ut_detail::default_char_compare<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,\n         typename ValueType   = std::basic_string<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,\n         typename Reference   = ValueType const&>\nclass range_token_iterator\n: public token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,\n                             typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> {\n    typedef basic_cstring<typename ValueType::value_type> cstring;\n    typedef token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,\n                                typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> base;\npublic:\n    explicit    range_token_iterator() {}\n    explicit    range_token_iterator( Iter begin, Iter end = Iter() )\n    : m_begin( begin ), m_end( end )\n    {\n        this->init();\n    }\n    range_token_iterator( range_token_iterator const& rhs )\n    : base( rhs )\n    {\n        if( this->m_valid ) {\n            m_begin = rhs.m_begin;\n            m_end   = rhs.m_end;\n        }\n    }\n\n    template<typename Modifier>\n    range_token_iterator( Iter begin, Iter end, Modifier const& m )\n    : m_begin( begin ), m_end( end )\n    {\n        this->apply_modifier( m );\n\n        this->init();\n    }\n\nprivate:\n    friend class input_iterator_core_access;\n\n    // input iterator implementation\n    bool        get()\n    {\n        return base::get( m_begin, m_end );\n    }\n\n    // Data members\n    Iter m_begin;\n    Iter m_end;\n};\n\n// ************************************************************************** //\n// **************            make_range_token_iterator         ************** //\n// ************************************************************************** //\n\ntemplate<typename Iter>\ninline range_token_iterator<Iter>\nmake_range_token_iterator( Iter begin, Iter end = Iter() )\n{\n    return range_token_iterator<Iter>( begin, end );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename Iter,typename Modifier>\ninline range_token_iterator<Iter>\nmake_range_token_iterator( Iter begin, Iter end, Modifier const& m )\n{\n    return range_token_iterator<Iter>( begin, end, m );\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TOKEN_ITERATOR_HPP_071894GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/lazy_ostream.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : contains definition for all test tools in test toolbox\n// ***************************************************************************\n\n#ifndef BOOST_TEST_LAZY_OSTREAM_HPP_070708GER\n#define BOOST_TEST_LAZY_OSTREAM_HPP_070708GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n// STL\n#include <iosfwd>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  lazy_ostream                ************** //\n// ************************************************************************** //\n\nnamespace boost {\n\nnamespace unit_test {\n\nclass lazy_ostream {\npublic:\n    static lazy_ostream&    instance()                                              { static lazy_ostream inst; return inst; }\n\n    friend std::ostream&    operator<<( std::ostream& ostr, lazy_ostream const& o ) { return o( ostr ); }\n\n    // access method\n    bool                    empty() const                                           { return m_empty; }\n\n    // actual printing interface; to be accessed only by this class and children\n    virtual std::ostream&   operator()( std::ostream& ostr ) const                  { return ostr; }\nprotected:\n    explicit                lazy_ostream( bool empty = true ) : m_empty( empty )    {}\n\n    // protected destructor to make sure right one is called\n#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))\npublic:\n#endif\n    BOOST_TEST_PROTECTED_VIRTUAL ~lazy_ostream()                                    {}\n\nprivate:\n    // Data members\n    bool                    m_empty;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\nclass lazy_ostream_impl : public lazy_ostream {\npublic:\n    lazy_ostream_impl( lazy_ostream const& prev, T value )\n    : lazy_ostream( false )\n    , m_prev( prev )\n    , m_value( value )\n    {}\nprivate:\n    virtual std::ostream&   operator()( std::ostream& ostr ) const\n    {\n        return m_prev(ostr) << m_value;\n    }\n\n    // Data members\n    lazy_ostream const&     m_prev;\n    T                       m_value;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline lazy_ostream_impl<T const&>\noperator<<( lazy_ostream const& prev, T const& v )\n{\n    return lazy_ostream_impl<T const&>( prev, v );\n}\n\n//____________________________________________________________________________//\n\n#if BOOST_TEST_USE_STD_LOCALE\n\ntemplate<typename R,typename S>\ninline lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>\noperator<<( lazy_ostream const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) )\n{\n    return lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>( prev, man );\n}\n\n//____________________________________________________________________________//\n\n#endif\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_LAZY_OSTREAM_HPP_070708GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/named_params.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : facilities for named function parameters support\n// ***************************************************************************\n\n#ifndef BOOST_TEST_NAMED_PARAM_022505GER\n#define BOOST_TEST_NAMED_PARAM_022505GER\n\n// Boost\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n// Boost.Test\n#include <boost/test/utils/rtti.hpp>\n#include <boost/test/utils/assign_op.hpp>\n\n#include <boost/type_traits/remove_reference.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace nfp { // named function parameters\n\n// ************************************************************************** //\n// **************              forward declarations            ************** //\n// ************************************************************************** //\n\ntemplate<typename T, typename unique_id,typename RefType>   struct named_parameter;\ntemplate<typename unique_id,bool required>                  struct keyword;\n\nnamespace nfp_detail {\n\ntemplate<typename NP1,typename NP2>        struct named_parameter_combine;\n\n// ************************************************************************** //\n// **************          access_to_invalid_parameter         ************** //\n// ************************************************************************** //\n\nstruct access_to_invalid_parameter {};\n\n//____________________________________________________________________________//\n\ninline void \nreport_access_to_invalid_parameter()\n{\n    throw access_to_invalid_parameter();\n}\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                       nil                    ************** //\n// ************************************************************************** //\n\nstruct nil {\n    template<typename T>\n#if defined(__GNUC__) || defined(__HP_aCC) || defined(__EDG__) || defined(__SUNPRO_CC)\n    operator T() const\n#else\n    operator T const&() const\n#endif\n    { report_access_to_invalid_parameter(); static T* v = 0; return *v; }\n\n    template<typename T>\n    T any_cast() const\n    { report_access_to_invalid_parameter(); static typename remove_reference<T>::type* v = 0; return *v; }\n\n    template<typename Arg1>\n    nil operator()( Arg1 const& )\n    { report_access_to_invalid_parameter(); return nil(); }\n\n    template<typename Arg1,typename Arg2>\n    nil operator()( Arg1 const&, Arg2 const& )\n    { report_access_to_invalid_parameter(); return nil(); }\n\n    template<typename Arg1,typename Arg2,typename Arg3>\n    nil operator()( Arg1 const&, Arg2 const&, Arg3 const& )\n    { report_access_to_invalid_parameter(); return nil(); }\n\n    // Visitation support\n    template<typename Visitor>\n    void            apply_to( Visitor& V ) const {}\n\n    static nil&     inst() { static nil s_inst; return s_inst; }\nprivate:\n    nil() {}\n};\n    \n// ************************************************************************** //\n// **************              named_parameter_base            ************** //\n// ************************************************************************** //\n\ntemplate<typename Derived>\nstruct named_parameter_base {\n    template<typename NP>\n    named_parameter_combine<NP,Derived>\n    operator,( NP const& np ) const { return named_parameter_combine<NP,Derived>( np, *static_cast<Derived const*>(this) ); }\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************             named_parameter_combine          ************** //\n// ************************************************************************** //\n\ntemplate<typename NP, typename Rest = nil>\nstruct named_parameter_combine \n: Rest\n, named_parameter_base<named_parameter_combine<NP,Rest> > {\n    typedef typename NP::ref_type  res_type;\n    typedef named_parameter_combine<NP,Rest> self_type;\n\n    // Constructor\n    named_parameter_combine( NP const& np, Rest const& r )\n    : Rest( r )\n    , m_param( np )\n    {}\n\n    // Access methods\n    res_type    operator[]( keyword<typename NP::id,true> kw ) const    { return m_param[kw]; }\n    res_type    operator[]( keyword<typename NP::id,false> kw ) const   { return m_param[kw]; }\n    using       Rest::operator[];\n\n    bool        has( keyword<typename NP::id,false> kw ) const          { return m_param.has( kw ); }\n    using       Rest::has;\n\n    void        erase( keyword<typename NP::id,false> kw ) const        { m_param.erase( kw ); }\n    using       Rest::erase;\n\n#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) || \\\n    BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0610))\n    template<typename NP>\n    named_parameter_combine<NP,self_type> operator,( NP const& np ) const\n    { return named_parameter_combine<NP,self_type>( np, *this ); }\n#else\n    using       named_parameter_base<named_parameter_combine<NP,Rest> >::operator,;\n#endif\n\n    // Visitation support\n    template<typename Visitor>\n    void            apply_to( Visitor& V ) const\n    {\n        m_param.apply_to( V );\n\n        Rest::apply_to( V );\n    }\nprivate:\n    // Data members\n    NP          m_param;\n};\n\n} // namespace nfp_detail\n\n// ************************************************************************** //\n// **************                 named_parameter              ************** //\n// ************************************************************************** //\n\ntemplate<typename T, typename unique_id,typename ReferenceType=T&>\nstruct named_parameter\n: nfp_detail::named_parameter_base<named_parameter<T, unique_id,ReferenceType> >\n{\n    typedef nfp_detail::nil nil_t;\n    typedef T               data_type;\n    typedef ReferenceType   ref_type;\n    typedef unique_id       id;\n\n    // Constructor\n    explicit        named_parameter( ref_type v ) \n    : m_value( v )\n    , m_erased( false )\n    {}\n    named_parameter( named_parameter const& np )\n    : m_value( np.m_value )\n    , m_erased( np.m_erased )\n    {}\n\n    // Access methods\n    ref_type        operator[]( keyword<unique_id,true> ) const     { return m_erased ? nil_t::inst().template any_cast<ref_type>() :  m_value; }\n    ref_type        operator[]( keyword<unique_id,false> ) const    { return m_erased ? nil_t::inst().template any_cast<ref_type>() :  m_value; }\n    template<typename UnknownId>\n    nil_t           operator[]( keyword<UnknownId,false> ) const    { return nil_t::inst(); }\n\n    bool            has( keyword<unique_id,false> ) const           { return !m_erased; }\n    template<typename UnknownId>\n    bool            has( keyword<UnknownId,false> ) const           { return false; }\n\n    void            erase( keyword<unique_id,false> ) const         { m_erased = true; }\n    template<typename UnknownId>\n    void            erase( keyword<UnknownId,false> ) const         {}\n\n    // Visitation support\n    template<typename Visitor>\n    void            apply_to( Visitor& V ) const\n    {\n        V.set_parameter( rtti::type_id<unique_id>(), m_value );\n    }\n\nprivate:\n    // Data members\n    ref_type        m_value;\n    mutable bool    m_erased;\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                    no_params                 ************** //\n// ************************************************************************** //\n\nnamespace nfp_detail {\ntypedef named_parameter<char, struct no_params_type_t,char> no_params_type;\n} // namespace nfp_detail\n\nnamespace {\nnfp_detail::no_params_type no_params( '\\0' );\n} // local namespace\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                     keyword                  ************** //\n// ************************************************************************** //\n\ntemplate<typename unique_id, bool required = false>\nstruct keyword {\n    typedef unique_id id;\n\n    template<typename T>\n    named_parameter<T const,unique_id>\n    operator=( T const& t ) const       { return named_parameter<T const,unique_id>( t ); }\n\n    template<typename T>\n    named_parameter<T,unique_id>\n    operator=( T& t ) const   { return named_parameter<T,unique_id>( t ); }\n\n    named_parameter<char const*,unique_id,char const*>\n    operator=( char const* t ) const   { return named_parameter<char const*,unique_id,char const*>( t ); }\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                  typed_keyword               ************** //\n// ************************************************************************** //\n\ntemplate<typename T, typename unique_id, bool required = false>\nstruct typed_keyword : keyword<unique_id,required> {\n    named_parameter<T const,unique_id>\n    operator=( T const& t ) const       { return named_parameter<T const,unique_id>( t ); }\n\n    named_parameter<T,unique_id>\n    operator=( T& t ) const             { return named_parameter<T,unique_id>( t ); }\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename unique_id>\nstruct typed_keyword<bool,unique_id,false>\n: keyword<unique_id,false>\n, named_parameter<bool,unique_id,bool> {\n    typedef unique_id id;\n\n    typed_keyword() : named_parameter<bool,unique_id,bool>( true ) {}\n\n    named_parameter<bool,unique_id,bool>\n    operator!() const           { return named_parameter<bool,unique_id,bool>( false ); }\n};\n\n//____________________________________________________________________________//\n\n// ************************************************************************** //\n// **************                optionally_assign             ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\ninline void\noptionally_assign( T&, nfp_detail::nil )\n{\n    nfp_detail::report_access_to_invalid_parameter();\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename Source>\ninline void\n#if BOOST_WORKAROUND( __MWERKS__, BOOST_TESTED_AT( 0x3003 ) ) \\\n    || BOOST_WORKAROUND( __DECCXX_VER, BOOST_TESTED_AT(60590042) )\noptionally_assign( T& target, Source src )\n#else\noptionally_assign( T& target, Source const& src )\n#endif\n{\n    using namespace unit_test;\n\n    assign_op( target, src, static_cast<int>(0) );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename Params, typename Keyword>\ninline void\noptionally_assign( T& target, Params const& p, Keyword k )\n{\n    if( p.has(k) )\n        optionally_assign( target, p[k] );\n}\n\n//____________________________________________________________________________//\n\n} // namespace nfp\n\n} // namespace boost\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_NAMED_PARAM_022505GER\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/rtti.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : simple facilities for accessing type information at runtime\n// ***************************************************************************\n\n#ifndef BOOST_TEST_RTTI_HPP_062604GER\n#define BOOST_TEST_RTTI_HPP_062604GER\n\n#include <cstddef>\n\nnamespace boost {\n\nnamespace rtti {\n\n// ************************************************************************** //\n// **************                   rtti::type_id              ************** //\n// ************************************************************************** //\n\ntypedef std::ptrdiff_t id_t;\n\nnamespace rtti_detail {\n\ntemplate<typename T>\nstruct rttid_holder {\n    static id_t id() { return reinterpret_cast<id_t>( &inst() ); }\n\nprivate:\n    struct rttid {};\n\n    static rttid const& inst() { static rttid s_inst;  return s_inst; }\n};\n\n} // namespace rtti_detail\n\n//____________________________________________________________________________//\n\ntemplate<typename T>   \ninline id_t\ntype_id()\n{\n    return rtti_detail::rttid_holder<T>::id();\n}\n\n//____________________________________________________________________________//\n\n#define BOOST_RTTI_SWITCH( type_id_ ) if( ::boost::rtti::id_t switch_by_id = type_id_ )\n#define BOOST_RTTI_CASE( type )       if( switch_by_id == ::boost::rtti::type_id<type>() )\n\n//____________________________________________________________________________//\n\n} // namespace rtti\n\n} // namespace boost\n\n#endif // BOOST_RT_RTTI_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/argument.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : model of actual argument (both typed and abstract interface)\n// ***************************************************************************\n\n#ifndef BOOST_RT_ARGUMENT_HPP_062604GER\n#define BOOST_RT_ARGUMENT_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/rtti.hpp>\n\n// STL\n#include <cassert>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n// ************************************************************************** //\n// **************              runtime::argument               ************** //\n// ************************************************************************** //\n\n#ifdef BOOST_MSVC\n#  pragma warning(push)\n#  pragma warning(disable:4244)\n#endif\n\nclass argument {\npublic:\n    // Constructor\n    argument( parameter const& p, rtti::id_t value_type )\n    : p_formal_parameter( p )\n    , p_value_type( value_type )\n    {}\n\n    // Destructor\n    virtual     ~argument()  {}\n\n    // Public properties\n    unit_test::readonly_property<parameter const&> p_formal_parameter;\n    unit_test::readonly_property<rtti::id_t>       p_value_type;\n};\n\n// ************************************************************************** //\n// **************             runtime::typed_argument          ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass typed_argument : public argument {\npublic:\n    // Constructor\n    explicit typed_argument( parameter const& p )\n    : argument( p, rtti::type_id<T>() )\n    {}\n    typed_argument( parameter const& p, T const& t )\n    : argument( p, rtti::type_id<T>() )\n    , p_value( t )\n    {}\n\n    unit_test::readwrite_property<T>    p_value;\n};\n\n// ************************************************************************** //\n// **************               runtime::arg_value             ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\ninline T const&\narg_value( argument const& arg_ )\n{\n    assert( arg_.p_value_type == rtti::type_id<T>() ); // detect logic error\n\n    return static_cast<typed_argument<T> const&>( arg_ ).p_value.value;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline T&\narg_value( argument& arg_ )\n{\n    assert( arg_.p_value_type == rtti::type_id<T>() ); // detect logic error\n\n    return static_cast<typed_argument<T>&>( arg_ ).p_value.value;\n}\n\n#ifdef BOOST_MSVC\n#  pragma warning(pop)\n#endif\n\n//____________________________________________________________________________//\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_ARGUMENT_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/argument_factory.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : generic typed_argument_factory implementation\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER\n#define BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n#include <boost/test/utils/runtime/argument.hpp>\n#include <boost/test/utils/runtime/trace.hpp>\n#include <boost/test/utils/runtime/interpret_argument_value.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n#include <boost/test/utils/runtime/cla/value_generator.hpp>\n#include <boost/test/utils/runtime/cla/value_handler.hpp>\n#include <boost/test/utils/runtime/cla/validation.hpp>\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n#include <boost/test/utils/runtime/cla/detail/argument_value_usage.hpp>\n\n#include <boost/test/utils/runtime/cla/iface/argument_factory.hpp>\n\n// Boost.Test\n#include <boost/test/utils/callback.hpp>\n\n// Boost\n#include <boost/optional.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************           default_value_interpreter          ************** //\n// ************************************************************************** //\n\nnamespace rt_cla_detail {\n\nstruct default_value_interpreter {\n    template<typename T>\n    void operator()( argv_traverser& tr, boost::optional<T>& value )\n    {\n        if( interpret_argument_value( tr.token(), value, 0 ) )\n            tr.next_token();\n    }\n};\n\n} // namespace rt_cla_detail\n\n// ************************************************************************** //\n// **************             typed_argument_factory           ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nstruct typed_argument_factory : public argument_factory {\n    // Constructor\n    typed_argument_factory()\n    : m_value_interpreter( rt_cla_detail::default_value_interpreter() )\n    {}\n    BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~typed_argument_factory() {}\n\n    // properties modification\n    template<typename Modifier>\n    void                accept_modifier( Modifier const& m )\n    {\n        optionally_assign( m_value_handler, m, handler );\n        optionally_assign( m_value_interpreter, m, interpreter );\n\n        if( m.has( default_value ) ) {\n            BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator, \n                BOOST_RT_PARAM_LITERAL( \"multiple value generators for parameter\" ) );\n\n            T const& dv_ref = m[default_value];\n            m_value_generator = rt_cla_detail::const_generator<T>( dv_ref );\n        }\n\n        if( m.has( default_refer_to ) ) {\n            BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator, \n                BOOST_RT_PARAM_LITERAL( \"multiple value generators for parameter\" ) );\n\n            cstring ref_id = m[default_refer_to];\n            m_value_generator = rt_cla_detail::ref_generator<T>( ref_id );\n        }\n\n        if( m.has( assign_to ) ) {\n            BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_handler, \n                BOOST_RT_PARAM_LITERAL( \"multiple value handlers for parameter\" ) );\n\n            m_value_handler = rt_cla_detail::assigner<T>( m[assign_to] );\n        }\n    }\n\n    // Argument factory implementation\n    virtual argument_ptr produce_using( parameter& p, argv_traverser& tr );\n    virtual argument_ptr produce_using( parameter& p, parser const& );\n    virtual void         argument_usage_info( format_stream& fs );\n\n// !! private?\n    // Data members\n    unit_test::callback2<parameter const&,T&>                   m_value_handler;\n    unit_test::callback2<parser const&,boost::optional<T>&>     m_value_generator;\n    unit_test::callback2<argv_traverser&,boost::optional<T>&>   m_value_interpreter;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline argument_ptr\ntyped_argument_factory<T>::produce_using( parameter& p, argv_traverser& tr )\n{\n    boost::optional<T> value;\n\n    try {\n        m_value_interpreter( tr, value );\n    }\n    catch( ... ) { // !! should we do that?\n        BOOST_RT_PARAM_TRACE( \"Fail to parse argument value\" );\n\n        if( !p.p_optional_value )\n            throw;\n    }\n\n    argument_ptr actual_arg = p.actual_argument();\n\n    BOOST_RT_CLA_VALIDATE_INPUT( !!value || p.p_optional_value, tr, \n        BOOST_RT_PARAM_LITERAL( \"Argument value missing for parameter \" ) << p.id_2_report() );\n\n    BOOST_RT_CLA_VALIDATE_INPUT( !actual_arg || p.p_multiplicable, tr, \n        BOOST_RT_PARAM_LITERAL( \"Unexpected repetition of the parameter \" ) << p.id_2_report() );\n\n    if( !!value && !!m_value_handler )\n        m_value_handler( p, *value );\n\n    if( !p.p_multiplicable )\n        actual_arg.reset( p.p_optional_value && (rtti::type_id<T>() != rtti::type_id<bool>())\n            ? static_cast<argument*>(new typed_argument<boost::optional<T> >( p, value ))\n            : static_cast<argument*>(new typed_argument<T>( p, *value )) );\n    else {\n        typedef std::list<boost::optional<T> > optional_list;\n\n        if( !actual_arg )\n            actual_arg.reset( p.p_optional_value \n                ? static_cast<argument*>(new typed_argument<optional_list>( p ))\n                : static_cast<argument*>(new typed_argument<std::list<T> >( p )) );\n\n        if( p.p_optional_value ) {\n            optional_list& values = arg_value<optional_list>( *actual_arg );\n\n            values.push_back( value );\n        }\n        else {\n            std::list<T>& values = arg_value<std::list<T> >( *actual_arg );\n            \n            values.push_back( *value );\n        }\n    }\n\n    return actual_arg;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline argument_ptr \ntyped_argument_factory<T>::produce_using( parameter& p, parser const& pa )\n{\n    argument_ptr actual_arg;\n\n    if( !m_value_generator )\n        return actual_arg;\n\n    boost::optional<T> value;\n    m_value_generator( pa, value );\n\n    if( !value )\n        return actual_arg;\n\n    if( !!m_value_handler )\n        m_value_handler( p, *value );\n\n    actual_arg.reset( new typed_argument<T>( p, *value ) );\n\n    return actual_arg;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline void\ntyped_argument_factory<T>::argument_usage_info( format_stream& fs )\n{\n    rt_cla_detail::argument_value_usage( fs, 0, reinterpret_cast<T*>(0) );\n}\n\n//____________________________________________________________________________//\n\n} // namespace boost\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace cla\n\n#endif // BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/argv_traverser.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines facility to hide input traversing details\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER\n#define BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n\n// Boost\n#include <boost/noncopyable.hpp>\n#include <boost/shared_array.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************          runtime::cla::argv_traverser        ************** //\n// ************************************************************************** //\n\nclass argv_traverser : noncopyable {\n    class parser;\npublic:\n    // Constructor\n    argv_traverser();\n\n    // public_properties\n    unit_test::readwrite_property<bool>         p_ignore_mismatch;\n    unit_test::readwrite_property<char_type>    p_separator;\n\n    // argc+argv <-> internal buffer exchange\n    void            init( int argc, char_type** argv );\n    void            remainder( int& argc, char_type** argv );\n\n    // token based parsing\n    cstring         token() const;\n    void            next_token();\n\n    // whole input parsing\n    cstring         input() const;\n    void            trim( std::size_t size );\n    bool            match_front( cstring );\n    bool            match_front( char_type c );\n    bool            eoi() const;\n\n    // transaction logic support\n    void            commit();\n    void            rollback();\n\n    // current position access; used to save some reference points in input\n    std::size_t     input_pos() const;\n\n    // returns true if mismatch detected during input parsing handled successfully\n    bool            handle_mismatch();\n\nprivate:\n    // Data members\n    dstring                 m_buffer;\n    cstring                 m_work_buffer;\n\n    cstring                 m_token;\n    cstring::iterator       m_commited_end;\n\n    shared_array<char_type> m_remainder;\n    std::size_t             m_remainder_size;\n};\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/argv_traverser.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/argv_traverser.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : implements facility to hide input traversing details\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER\n#define BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/trace.hpp>\n\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n\n// STL\n#include <memory>\n#include <cstring>\n\n#ifdef BOOST_NO_STDC_NAMESPACE\nnamespace std { using ::memcpy; }\n#endif\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************          runtime::cla::argv_traverser        ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE\nargv_traverser::argv_traverser()\n: p_ignore_mismatch( false ), p_separator( BOOST_RT_PARAM_LITERAL( ' ' ) )\n{\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::init( int argc, char_type** argv )\n{\n    for( int index = 1; index < argc; ++index ) {\n        m_buffer += argv[index];\n        if( index != argc-1 )\n            m_buffer += BOOST_RT_PARAM_LITERAL( ' ' );\n    }\n\n    m_remainder.reset( new char_type[m_buffer.size()+1] );\n    m_remainder_size    = 0;\n    m_work_buffer       = m_buffer;\n    m_commited_end      = m_work_buffer.begin();\n\n    BOOST_RT_PARAM_TRACE( \"Input buffer: \" << m_buffer );\n\n    next_token();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::remainder( int& argc, char_type** argv )\n{\n    argc = 1;\n    std::size_t pos = 0;\n    while(pos < m_remainder_size ) {\n        argv[argc++] = m_remainder.get() + pos;\n\n        pos = std::find( m_remainder.get() + pos, m_remainder.get() + m_remainder_size, \n                         BOOST_RT_PARAM_LITERAL( ' ' ) ) - m_remainder.get();\n        m_remainder[pos++] = BOOST_RT_PARAM_LITERAL( '\\0' );\n    }\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE cstring\nargv_traverser::token() const\n{\n    return m_token;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::next_token()\n{\n    if( m_work_buffer.is_empty() )\n        return;\n\n    m_work_buffer.trim_left( m_token.size() ); // skip remainder of current token\n\n    if( m_work_buffer.size() != m_buffer.size() ) // !! is there a better way to identify first token\n        m_work_buffer.trim_left( 1 ); // skip separator if not first token;\n\n    m_token.assign( m_work_buffer.begin(),\n                    std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE cstring\nargv_traverser::input() const\n{\n    return m_work_buffer;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::trim( std::size_t size )\n{\n    m_work_buffer.trim_left( size );\n\n    if( size <= m_token.size() )\n        m_token.trim_left( size );\n    else {\n        m_token.assign( m_work_buffer.begin(),\n                        std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );\n    }\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nargv_traverser::match_front( cstring str )\n{\n    return m_work_buffer.size() < str.size() ? false : m_work_buffer.substr( 0, str.size() ) == str;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nargv_traverser::match_front( char_type c )\n{\n    return first_char( m_work_buffer ) == c;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nargv_traverser::eoi() const\n{\n    return m_work_buffer.is_empty();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::commit()\n{\n    m_commited_end = m_work_buffer.begin();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nargv_traverser::rollback()\n{\n    m_work_buffer.assign( m_commited_end, m_work_buffer.end() );\n    m_token.assign( m_work_buffer.begin(),\n                    std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );\n\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE std::size_t\nargv_traverser::input_pos() const\n{\n    return m_work_buffer.begin() - m_commited_end;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nargv_traverser::handle_mismatch()\n{\n    if( !p_ignore_mismatch )\n        return false;\n\n    std::memcpy( m_remainder.get() + m_remainder_size, token().begin(), token().size() );\n    m_remainder_size += token().size();\n    m_remainder[m_remainder_size++] = p_separator;\n\n    next_token();\n    commit();\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/basic_parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : generic custom parameter generator\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/typed_parameter.hpp>\n\n// Boost.Test\n#include <boost/test/utils/rtti.hpp>\n\n// Boost\n#include <boost/utility/base_from_member.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************         runtime::cla::basic_parameter        ************** //\n// ************************************************************************** //\n\ntemplate<typename T, typename IdPolicy>\nclass basic_parameter : private base_from_member<IdPolicy>, public typed_parameter<T> {\npublic:\n    // Constructors\n    explicit    basic_parameter( cstring n ) \n    : base_from_member<IdPolicy>()\n    , typed_parameter<T>( base_from_member<IdPolicy>::member )\n    {\n        this->accept_modifier( name = n );\n    }\n\n    // parameter properties modification\n    template<typename Modifier>\n    void        accept_modifier( Modifier const& m )\n    {\n        typed_parameter<T>::accept_modifier( m );\n\n        base_from_member<IdPolicy>::member.accept_modifier( m );\n    }\n};\n\n//____________________________________________________________________________//\n\n#define BOOST_RT_CLA_NAMED_PARAM_GENERATORS( param_type )                                       \\\ntemplate<typename T>                                                                            \\\ninline shared_ptr<param_type ## _t<T> >                                                         \\\nparam_type( cstring name = cstring() )                                                          \\\n{                                                                                               \\\n    return shared_ptr<param_type ## _t<T> >( new param_type ## _t<T>( name ) );                 \\\n}                                                                                               \\\n                                                                                                \\\ninline shared_ptr<param_type ## _t<cstring> >                                                   \\\nparam_type( cstring name = cstring() )                                                          \\\n{                                                                                               \\\n    return shared_ptr<param_type ## _t<cstring> >( new param_type ## _t<cstring>( name ) );     \\\n}                                                                                               \\\n/**/\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/char_parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines model of parameter with single char name\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n#include <boost/test/utils/runtime/cla/basic_parameter.hpp>\n#include <boost/test/utils/runtime/cla/id_policy.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************               char_name_policy               ************** //\n// ************************************************************************** //\n\nclass char_name_policy : public basic_naming_policy {\npublic:\n    // Constructor\n    char_name_policy();\n    BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~char_name_policy() {}\n\n    // policy interface\n    virtual bool    conflict_with( identification_policy const& ) const;\n\n    // Accept modifier\n    template<typename Modifier>\n    void            accept_modifier( Modifier const& m )\n    {\n        basic_naming_policy::accept_modifier( m );\n\n        BOOST_RT_PARAM_VALIDATE_LOGIC( p_name->size() <= 1, \"Invalid parameter name \"  << p_name );\n    }\n};\n\n// ************************************************************************** //\n// **************          runtime::cla::char_parameter        ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass char_parameter_t : public basic_parameter<T,char_name_policy> {\n    typedef basic_parameter<T,char_name_policy> base;\npublic:\n    // Constructors\n    explicit    char_parameter_t( char_type name ) : base( cstring( &name, 1 ) ) {}\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline shared_ptr<char_parameter_t<T> >\nchar_parameter( char_type name )\n{\n    return shared_ptr<char_parameter_t<T> >( new char_parameter_t<T>( name ) );\n}\n\n//____________________________________________________________________________//\n\ninline shared_ptr<char_parameter_t<cstring> >\nchar_parameter( char_type name )\n{\n    return shared_ptr<char_parameter_t<cstring> >( new char_parameter_t<cstring>( name ) );\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/char_parameter.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/char_parameter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : implements model of parameter with single char name\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER\n#define BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/char_parameter.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************               char_name_policy               ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE \nchar_name_policy::char_name_policy()\n: basic_naming_policy( rtti::type_id<char_name_policy>() )\n{\n    assign_op( p_prefix.value, BOOST_RT_PARAM_CSTRING_LITERAL( \"-\" ), 0 );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nchar_name_policy::conflict_with( identification_policy const& id ) const\n{\n    return id.p_type_id == p_type_id && \n           p_name == static_cast<char_name_policy const&>( id ).p_name;\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Permission to copy, use, modify, sell and distribute this software\n//  is granted provided this copyright notice appears in all copies.\n//  This software is provided \"as is\" without express or implied warranty,\n//  and with no claim as to its suitability for any purpose.\n  \n//  See http://www.boost.org for updates, documentation, and revision history.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : argument usage printing helpers\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER\n#define BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/basic_cstring/compare.hpp>\n\n#include <boost/lexical_cast.hpp>\n\n// STL\n// !! can we eliminate these includes?\n#include <list>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\nnamespace rt_cla_detail {\n\n// ************************************************************************** //\n// **************             argument_value_usage             ************** //\n// ************************************************************************** //\n\n// generic case\ntemplate<typename T>\ninline void\nargument_value_usage( format_stream& fs, long, T* = 0 )\n{\n    fs << BOOST_RT_PARAM_CSTRING_LITERAL( \"<value>\" );\n}\n\n//____________________________________________________________________________//\n\n// specialization for list of values\ntemplate<typename T>\ninline void\nargument_value_usage( format_stream& fs, int, std::list<T>* = 0 )\n{\n    fs << BOOST_RT_PARAM_CSTRING_LITERAL( \"(<value1>, ..., <valueN>)\" );\n}\n\n//____________________________________________________________________________//\n\n// specialization for type bool\ninline void\nargument_value_usage( format_stream& fs,  int, bool* = 0 )\n{\n    fs << BOOST_RT_PARAM_CSTRING_LITERAL( \"yes|y|no|n\" );\n}\n\n//____________________________________________________________________________//\n\n} // namespace rt_cla_detail\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines model of generic parameter with dual naming\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/named_parameter.hpp>\n#include <boost/test/utils/runtime/cla/char_parameter.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************               dual_name_policy               ************** //\n// ************************************************************************** //\n\nclass dual_name_policy : public dual_id_policy<dual_name_policy,string_name_policy,char_name_policy> {\npublic:\n    dual_name_policy();\n\n    // Accept modifier\n    template<typename Modifier>\n    void    accept_modifier( Modifier const& m )\n    {\n        if( m.has( prefix ) ) {\n            set_prefix( m[prefix] );\n            m.erase( prefix );\n        }\n\n        if( m.has( name ) ) {\n            set_name( m[name] );\n            m.erase( name );\n        }\n\n        if( m.has( separator ) ) {\n            set_separator( m[separator] );\n            m.erase( separator );\n        }\n\n        dual_id_policy<dual_name_policy,string_name_policy,char_name_policy>::accept_modifier( m );\n    }\nprivate:\n    void    set_prefix( cstring );\n    void    set_name( cstring );\n    void    set_separator( cstring );\n};\n\n// ************************************************************************** //\n// **************       runtime::cla::dual_name_parameter      ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass dual_name_parameter_t : public basic_parameter<T,dual_name_policy> {\n    typedef basic_parameter<T,dual_name_policy> base;\npublic:\n    // Constructors\n    explicit    dual_name_parameter_t( cstring name ) : base( name ) {}\n};\n\n//____________________________________________________________________________//\n\nBOOST_RT_CLA_NAMED_PARAM_GENERATORS( dual_name_parameter )\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/dual_name_parameter.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : implements model of generic parameter with dual naming\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER\n#define BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n#include <boost/test/utils/runtime/cla/dual_name_parameter.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************               dual_name_policy               ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE \ndual_name_policy::dual_name_policy()\n{\n    m_primary.accept_modifier( prefix = BOOST_RT_PARAM_CSTRING_LITERAL( \"--\" ) );\n    m_secondary.accept_modifier( prefix = BOOST_RT_PARAM_CSTRING_LITERAL( \"-\" ) );\n}\n\n//____________________________________________________________________________//\n\nnamespace {\n\ntemplate<typename K>\ninline void\nsplit( string_name_policy& snp, char_name_policy& cnp, cstring src, K const& k )\n{\n    cstring::iterator sep = std::find( src.begin(), src.end(), BOOST_RT_PARAM_LITERAL( '|' ) );\n    \n    if( sep != src.begin() )\n        snp.accept_modifier( k = cstring( src.begin(), sep ) );\n\n    if( sep != src.end() )\n        cnp.accept_modifier( k = cstring( sep+1, src.end() ) );\n}\n\n} // local namespace\n\nBOOST_RT_PARAM_INLINE void\ndual_name_policy::set_prefix( cstring src )\n{\n    split( m_primary, m_secondary, src, prefix );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\ndual_name_policy::set_name( cstring src )\n{\n    split( m_primary, m_secondary, src, name );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\ndual_name_policy::set_separator( cstring src )\n{\n    split( m_primary, m_secondary, src, separator );\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/fwd.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : cla subsystem forward declarations\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_FWD_HPP_062604GER\n#define BOOST_RT_CLA_FWD_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost\n#include <boost/shared_ptr.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\nclass parser;\nclass parameter;\ntypedef shared_ptr<parameter> parameter_ptr;\nclass naming_policy;\ntypedef shared_ptr<naming_policy> naming_policy_ptr;\nclass argv_traverser;\n\nnamespace rt_cla_detail {\n\ntemplate<typename T> class const_generator;\ntemplate<typename T> class ref_generator;\n\ntemplate<typename T> class assigner;\n\nclass named_parameter_base;\nclass positional_parameter_base;\n\n} // namespace rt_cla_detail\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_FWD_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/id_policy.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : some generic identification policies definition\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ID_POLICY_HPP_062604GER\n#define BOOST_RT_CLA_ID_POLICY_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n#include <boost/test/utils/runtime/cla/modifier.hpp>\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n\n#include <boost/test/utils/runtime/cla/iface/id_policy.hpp>\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/rtti.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************               naming_policy_base             ************** //\n// ************************************************************************** //\n// model: <prefix> <name> <separtor>\n\nclass basic_naming_policy : public identification_policy {\npublic:\n    // Public properties\n    unit_test::readwrite_property<dstring>    p_prefix;\n    unit_test::readwrite_property<dstring>    p_name;\n    unit_test::readwrite_property<dstring>    p_separator;\n\n    // Policy interface\n    virtual bool    responds_to( cstring name ) const       { return p_name == name; }\n    virtual cstring id_2_report() const                     { return p_name.get(); }\n    virtual void    usage_info( format_stream& fs ) const;\n    virtual bool    matching( parameter const& p, argv_traverser& tr, bool primary ) const;\n\n    // Accept modifier\n    template<typename Modifier>\n    void            accept_modifier( Modifier const& m )\n    {\n        nfp::optionally_assign( p_prefix.value,    m, prefix );\n        nfp::optionally_assign( p_name.value,      m, name );\n        nfp::optionally_assign( p_separator.value, m, separator );\n    }\n\nprotected:\n    explicit basic_naming_policy( rtti::id_t dyn_type )\n    : identification_policy( dyn_type )\n    {}\n    BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~basic_naming_policy() {}\n\n    // Naming policy interface\n    virtual bool    match_prefix( argv_traverser& tr ) const;\n    virtual bool    match_name( argv_traverser& tr ) const;\n    virtual bool    match_separator( argv_traverser& tr, bool optional_value ) const;\n};\n\n// ************************************************************************** //\n// **************                 dual_id_policy               ************** //\n// ************************************************************************** //\n\ntemplate<typename MostDerived,typename PrimaryId,typename SecondId>\nclass dual_id_policy : public identification_policy {\npublic:\n    // Constructor\n    dual_id_policy()\n    : identification_policy( rtti::type_id<MostDerived>() )\n    , m_primary()\n    , m_secondary()\n    {}\n\n    // Policy interface\n    virtual bool    responds_to( cstring name ) const\n    {\n        return m_primary.responds_to( name ) || m_secondary.responds_to( name );\n    }\n    virtual bool    conflict_with( identification_policy const& id_p ) const\n    {\n        return id_p.conflict_with( m_primary ) || id_p.conflict_with( m_secondary );\n    }\n    virtual cstring id_2_report() const\n    {\n        return m_primary.id_2_report();\n    }\n    virtual void    usage_info( format_stream& fs ) const\n    {\n        fs << BOOST_RT_PARAM_LITERAL( '{' );\n        m_primary.usage_info( fs );\n        fs << BOOST_RT_PARAM_LITERAL( '|' );\n        m_secondary.usage_info( fs );\n        fs << BOOST_RT_PARAM_LITERAL( '}' );\n    }\n    virtual bool    matching( parameter const& p, argv_traverser& tr, bool primary ) const\n    {\n        return m_primary.matching( p, tr, primary ) || m_secondary.matching( p, tr, primary );\n    }\n\n    // Accept modifier\n    template<typename Modifier>\n    void    accept_modifier( Modifier const& m )\n    {\n        m_primary.accept_modifier( m );\n        m_secondary.accept_modifier( m );\n    }\n\nprotected:\n    BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~dual_id_policy() {}\n\n    // Data members\n    PrimaryId       m_primary;\n    SecondId        m_secondary;\n};\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/id_policy.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/id_policy.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : some generic identification policies implementation\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_ID_POLICY_IPP_062904GER\n#define BOOST_RT_CLA_ID_POLICY_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/id_policy.hpp>\n#include <boost/test/utils/runtime/cla/parameter.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************              basic_naming_policy             ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE void\nbasic_naming_policy::usage_info( format_stream& fs ) const\n{\n    fs << p_prefix << p_name << p_separator;\n\n    if( p_separator->empty() )\n        fs << BOOST_RT_PARAM_LITERAL( ' ' );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nbasic_naming_policy::match_prefix( argv_traverser& tr ) const\n{\n    if( !tr.match_front( p_prefix.get() ) )\n        return false;\n\n    tr.trim( p_prefix->size() );\n    return true;\n}\n\n//____________________________________________________________________________//\n    \nBOOST_RT_PARAM_INLINE bool\nbasic_naming_policy::match_name( argv_traverser& tr ) const\n{\n    if( !tr.match_front( p_name.get() ) )\n        return false;\n\n    tr.trim( p_name->size() );\n    return true;\n}\n\n//____________________________________________________________________________//\n    \nBOOST_RT_PARAM_INLINE bool\nbasic_naming_policy::match_separator( argv_traverser& tr, bool optional_value ) const\n{\n    if( p_separator->empty() ) {\n        if( !tr.token().is_empty() )\n            return false;\n\n        tr.trim( 1 );\n    }\n    else {\n        if( !tr.match_front( p_separator.get() ) ) {\n            // if parameter has optional value separator is optional as well\n            if( optional_value && ( tr.eoi() || tr.match_front( ' ' ) ) ) {\n                return true;\n            }\n            return false;\n        }\n\n        tr.trim( p_separator->size() );\n    }\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nbasic_naming_policy::matching( parameter const& p, argv_traverser& tr, bool ) const\n{\n    if( !match_prefix( tr ) )\n        return false;\n        \n    if( !match_name( tr ) )\n        return false;\n\n    if( !match_separator( tr, p.p_optional_value ) )\n        return false;\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_ID_POLICY_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines interface for argument_factory\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER\n#define BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/fwd.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************                argument_factory              ************** //\n// ************************************************************************** //\n// another name can be argument production policy\n\nclass argument_factory {\npublic:\n    // Argument factory interface\n    virtual argument_ptr produce_using( parameter& p, argv_traverser& tr ) = 0;  /// produce argument based on input\n    virtual argument_ptr produce_using( parameter& p, parser const& )      = 0;  /// produce argument based on internal generator and/or values of other parameters\n    virtual void         argument_usage_info( format_stream& fs )          = 0;  /// argument value format information\nprotected:\n    BOOST_TEST_PROTECTED_VIRTUAL ~argument_factory() {}\n};\n\n} // namespace boost\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace cla\n\n#endif // BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines interface for identification_policy\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER\n#define BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n#include <boost/test/utils/rtti.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************             identification_policy            ************** //\n// ************************************************************************** //\n\n#ifdef BOOST_MSVC\n#  pragma warning(push)\n#  pragma warning(disable:4244)\n#endif\n\nclass identification_policy {\npublic:\n    // Public properties\n    unit_test::readwrite_property<rtti::id_t>    p_type_id;\n\n    // Policy interface\n    virtual bool    responds_to( cstring name ) const = 0;\n    virtual cstring id_2_report() const = 0;\n    virtual void    usage_info( format_stream& fs ) const = 0;\n    virtual bool    matching( parameter const& p, argv_traverser& tr, bool primary ) const = 0;\n\n    virtual bool    conflict_with( identification_policy const& ) const = 0;\n\nprotected:\n    // Constructor\n    explicit        identification_policy( rtti::id_t dyn_type )\n    : p_type_id( dyn_type )\n    {}\n    BOOST_TEST_PROTECTED_VIRTUAL ~identification_policy() {}\n};\n\n#ifdef BOOST_MSVC\n#  pragma warning(pop)\n#endif\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/modifier.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : parameter modifiers\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_MODIFIER_HPP_062604GER\n#define BOOST_RT_CLA_MODIFIER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost.Test\n#include <boost/test/utils/named_params.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************         environment variable modifiers       ************** //\n// ************************************************************************** //\n\nnamespace {\n\nnfp::typed_keyword<bool,struct optional_t>              optional_m;\nnfp::named_parameter<bool,optional_t,bool>              optional( true );\nnfp::typed_keyword<bool,struct required_t>              required_m;\nnfp::named_parameter<bool,required_t,bool>              required( true );\nnfp::typed_keyword<bool,struct multiplicable_t>         multiplicable_m;\nnfp::named_parameter<bool,multiplicable_t,bool>         multiplicable( true );\nnfp::typed_keyword<bool,struct guess_name_t>            guess_name_m;\nnfp::named_parameter<bool,guess_name_t,bool>            guess_name( true );\nnfp::typed_keyword<bool,struct ignore_mismatch_t>       ignore_mismatch_m;\nnfp::named_parameter<bool,ignore_mismatch_t,bool>       ignore_mismatch( true );\nnfp::typed_keyword<bool,struct optional_value_t>        optional_value_m;\nnfp::named_parameter<bool,optional_value_t,bool>        optional_value( true );\n\nnfp::typed_keyword<char_type,struct input_separator_t>  input_separator;\nnfp::typed_keyword<cstring,struct prefix_t>             prefix;\nnfp::typed_keyword<cstring,struct name_t>               name;\nnfp::typed_keyword<cstring,struct separator_t>          separator;\nnfp::typed_keyword<cstring,struct description_t>        description;\nnfp::typed_keyword<cstring,struct refer_to_t>           default_refer_to;\n\nnfp::keyword<struct default_value_t>                    default_value;\nnfp::keyword<struct handler_t>                          handler;\nnfp::keyword<struct interpreter_t>                      interpreter;\nnfp::keyword<struct assign_to_t>                        assign_to;\n\n} // local namespace\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_MODIFIER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/named_parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines model of named parameter\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/basic_parameter.hpp>\n#include <boost/test/utils/runtime/cla/id_policy.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************              string_name_policy              ************** //\n// ************************************************************************** //\n\nclass string_name_policy : public basic_naming_policy {\npublic:\n    // Constructor\n    string_name_policy();\n    BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~string_name_policy() {}\n\n    // policy interface\n    virtual bool    responds_to( cstring name ) const;\n    virtual bool    conflict_with( identification_policy const& ) const;\n\n    // Accept modifier\n    template<typename Modifier>\n    void            accept_modifier( Modifier const& m )\n    {\n        basic_naming_policy::accept_modifier( m );\n\n        if( m.has( guess_name_m ) )\n            m_guess_name = true;\n    }\n\nprivate:\n    // Naming policy interface\n    virtual bool    match_name( argv_traverser& tr ) const;\n\n    // Data members\n    bool            m_guess_name;\n};\n\n// ************************************************************************** //\n// **************         runtime::cla::named_parameter        ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass named_parameter_t : public basic_parameter<T,string_name_policy> {\n    typedef basic_parameter<T,string_name_policy> base;\npublic:\n    // Constructors\n    explicit    named_parameter_t( cstring name ) : base( name ) {}\n};\n\n//____________________________________________________________________________//\n\nBOOST_RT_CLA_NAMED_PARAM_GENERATORS( named_parameter )\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/named_parameter.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/named_parameter.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : implements model of named parameter\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER\n#define BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/named_parameter.hpp>\n#include <boost/test/utils/runtime/cla/char_parameter.hpp>\n\n// Boost.Test\n#include <boost/test/utils/algorithm.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************              string_name_policy              ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE \nstring_name_policy::string_name_policy()\n: basic_naming_policy( rtti::type_id<string_name_policy>() )\n, m_guess_name( false )\n{\n    assign_op( p_prefix.value, BOOST_RT_PARAM_CSTRING_LITERAL( \"-\" ), 0 );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nstring_name_policy::responds_to( cstring name ) const\n{\n    std::pair<cstring::iterator,dstring::const_iterator> mm_pos;\n\n    mm_pos = unit_test::mismatch( name.begin(), name.end(), p_name->begin(), p_name->end() );\n\n    return mm_pos.first == name.end() && (m_guess_name || (mm_pos.second == p_name->end()) );\n}\n\n//____________________________________________________________________________//\n\n#ifdef BOOST_MSVC\n#  pragma warning(push)\n#  pragma warning(disable:4244)\n#endif\n\nBOOST_RT_PARAM_INLINE bool\nstring_name_policy::conflict_with( identification_policy const& id ) const\n{\n    if( id.p_type_id == p_type_id ) {\n        string_name_policy const& snp = static_cast<string_name_policy const&>( id );\n\n        if( p_name->empty() || snp.p_name->empty() )\n            return false;\n\n        if( p_prefix != snp.p_prefix )\n            return false;\n\n        std::pair<dstring::const_iterator,dstring::const_iterator> mm_pos =\n            unit_test::mismatch( p_name->begin(), p_name->end(), snp.p_name->begin(), snp.p_name->end() );\n\n        return mm_pos.first != p_name->begin()                              &&  // there is common substring\n                ((m_guess_name    && (mm_pos.second == snp.p_name->end()) ) ||  // that match other guy and I am guessing\n                (snp.m_guess_name && (mm_pos.first  == p_name->end()) ));       // or me and the other guy is\n    }\n    \n    if( id.p_type_id == rtti::type_id<char_name_policy>() ) {\n        char_name_policy const& cnp = static_cast<char_name_policy const&>( id );\n\n        return m_guess_name                 && \n               (p_prefix == cnp.p_prefix)   && \n               unit_test::first_char( cstring( p_name ) ) == unit_test::first_char( cstring( cnp.p_name ) );\n    }\n    \n    return false;    \n}\n\n#ifdef BOOST_MSVC\n#  pragma warning(pop)\n#endif\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE bool\nstring_name_policy::match_name( argv_traverser& tr ) const\n{\n    if( !m_guess_name )\n        return basic_naming_policy::match_name( tr );\n\n    cstring in = tr.input();\n\n    std::pair<cstring::iterator,dstring::const_iterator> mm_pos;\n    \n    mm_pos = unit_test::mismatch( in.begin(), in.end(), p_name->begin(), p_name->end() );\n\n    if( mm_pos.first == in.begin() )\n        return false;\n\n    tr.trim( mm_pos.first - in.begin() );\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines model of formal parameter\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/parameter.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n#include <boost/test/utils/runtime/cla/modifier.hpp>\n#include <boost/test/utils/runtime/cla/iface/argument_factory.hpp>\n#include <boost/test/utils/runtime/cla/iface/id_policy.hpp>\n\n// Boost.Test\n#include <boost/test/utils/rtti.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************            runtime::cla::parameter           ************** //\n// ************************************************************************** //\n\nclass parameter : public BOOST_RT_PARAM_NAMESPACE::parameter {\npublic:\n    parameter( identification_policy& ID, argument_factory& F, bool optional_value = false )\n    : p_optional( false )\n    , p_multiplicable( false )\n    , p_optional_value( optional_value )\n    , m_id_policy( ID )\n    , m_arg_factory( F )\n    {}\n\n    // Destructor\n    virtual         ~parameter()                                {}\n\n    unit_test::readwrite_property<bool>      p_optional;\n    unit_test::readwrite_property<bool>      p_multiplicable;\n    unit_test::readwrite_property<bool>      p_optional_value;\n    unit_test::readwrite_property<dstring>   p_description;\n\n    // parameter properties modification\n    template<typename Modifier>\n    void            accept_modifier( Modifier const& m )\n    {\n        if( m.has( optional_m ) )\n            p_optional.value = true;\n\n        if( m.has( required_m ) )\n            p_optional.value = false;\n\n        if( m.has( multiplicable_m ) )\n            p_multiplicable.value = true;\n\n        if( m.has( optional_value_m ) )\n            p_optional_value.value = true;\n\n        nfp::optionally_assign( p_description.value, m, description );\n    }\n\n    // access methods\n    bool            has_argument() const                        { return m_actual_argument; }\n    argument const& actual_argument() const                     { return *m_actual_argument; }\n    argument_ptr    actual_argument()                           { return m_actual_argument; }\n\n\n    // identification interface\n    bool            responds_to( cstring name ) const           { return m_id_policy.responds_to( name ); }\n    bool            conflict_with( parameter const& p ) const\n    {\n        return (id_2_report() == p.id_2_report() && !id_2_report().is_empty())  ||\n               m_id_policy.conflict_with( p.m_id_policy )                       || \n               ((m_id_policy.p_type_id != p.m_id_policy.p_type_id) && p.m_id_policy.conflict_with( m_id_policy ));\n    }\n    cstring         id_2_report() const                         { return m_id_policy.id_2_report(); }\n    void            usage_info( format_stream& fs ) const\n    { \n        m_id_policy.usage_info( fs );\n        if( p_optional_value )\n            fs << BOOST_RT_PARAM_LITERAL( '[' );\n\n        m_arg_factory.argument_usage_info( fs );\n\n        if( p_optional_value )\n            fs << BOOST_RT_PARAM_LITERAL( ']' );\n    }\n\n    // argument match/produce based on input\n    bool            matching( argv_traverser& tr, bool primary ) const\n    {\n        return m_id_policy.matching( *this, tr, primary );\n    }\n\n    // argument production based on different source\n    void            produce_argument( argv_traverser& tr )\n    {\n        m_id_policy.matching( *this, tr, true ); // !! can we save this position somehow\n        m_actual_argument = m_arg_factory.produce_using( *this, tr );\n    }\n    void            produce_argument( parser const& p )\n    {\n        m_actual_argument = m_arg_factory.produce_using( *this, p );\n    }\n\nprivate:\n    //Data members\n    identification_policy&  m_id_policy;\n    argument_factory&       m_arg_factory;\n    argument_ptr            m_actual_argument;\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename Parameter,typename Modifier>\ninline shared_ptr<Parameter>\noperator-( shared_ptr<Parameter> p, Modifier const& m )\n{\n    p->accept_modifier( m );\n\n    return p;\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/parser.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : defines parser - public interface for CLA parsing and accessing\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_PARSER_HPP_062604GER\n#define BOOST_RT_CLA_PARSER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/argument.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n#include <boost/test/utils/runtime/cla/modifier.hpp>\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n\n// Boost\n#include <boost/optional.hpp>\n\n// STL\n#include <list>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************             runtime::cla::parser             ************** //\n// ************************************************************************** //\n\nnamespace cla_detail {\n\ntemplate<typename Modifier>\nclass global_mod_parser {\npublic:\n    global_mod_parser( parser& p, Modifier const& m )\n    : m_parser( p )\n    , m_modifiers( m )\n    {}\n\n    template<typename Param>\n    global_mod_parser const&\n    operator<<( shared_ptr<Param> param ) const\n    {\n        param->accept_modifier( m_modifiers );\n\n        m_parser << param;\n\n        return *this;\n    }\n\nprivate:\n    // Data members;\n    parser&             m_parser;\n    Modifier const&     m_modifiers;\n};\n\n}\n\n// ************************************************************************** //\n// **************             runtime::cla::parser             ************** //\n// ************************************************************************** //\n\nclass parser {\npublic:\n    typedef std::list<parameter_ptr>::const_iterator param_iterator;\n\n    // Constructor\n    explicit            parser( cstring program_name = cstring() );\n\n    // parameter list construction interface\n    parser&             operator<<( parameter_ptr param );\n\n    // parser and global parameters modifiers\n    template<typename Modifier>\n    cla_detail::global_mod_parser<Modifier>\n    operator-( Modifier const& m )\n    {\n        nfp::optionally_assign( m_traverser.p_separator.value, m, input_separator );\n        nfp::optionally_assign( m_traverser.p_ignore_mismatch.value, m, ignore_mismatch_m );\n\n        return cla_detail::global_mod_parser<Modifier>( *this, m );\n    }\n\n    // input processing method\n    void                parse( int& argc, char_type** argv );\n\n    // parameters access\n    param_iterator      first_param() const;\n    param_iterator      last_param() const;\n\n    // arguments access\n    const_argument_ptr  operator[]( cstring string_id ) const;\n    cstring             get( cstring string_id ) const;    \n\n    template<typename T>\n    T const&            get( cstring string_id ) const\n    {\n        return arg_value<T>( valid_argument( string_id ) );\n    }\n\n    template<typename T>\n    void                get( cstring string_id, boost::optional<T>& res ) const\n    {\n        const_argument_ptr actual_arg = (*this)[string_id];\n\n        if( actual_arg )\n            res = arg_value<T>( *actual_arg );\n        else\n            res.reset();\n    }\n\n    // help/usage\n    void                usage( out_stream& ostr );\n    void                help(  out_stream& ostr );\n\nprivate:\n    argument const&     valid_argument( cstring string_id ) const;\n\n    // Data members\n    argv_traverser              m_traverser;\n    std::list<parameter_ptr>    m_parameters;\n    dstring                     m_program_name;\n};\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/parser.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_PARSER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/parser.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : implements parser - public interface for CLA parsing and accessing\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_PARSER_IPP_062904GER\n#define BOOST_RT_CLA_PARSER_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/trace.hpp>\n#include <boost/test/utils/runtime/argument.hpp>\n\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n#include <boost/test/utils/runtime/cla/parameter.hpp>\n#include <boost/test/utils/runtime/cla/modifier.hpp>\n#include <boost/test/utils/runtime/cla/validation.hpp>\n#include <boost/test/utils/runtime/cla/parser.hpp>\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/foreach.hpp>\n\n// Boost\n#include <boost/lexical_cast.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************             runtime::cla::parser             ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE\nparser::parser( cstring program_name )\n{\n    assign_op( m_program_name, program_name, 0 );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE parser::param_iterator\nparser::first_param() const\n{\n    return m_parameters.begin();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE parser::param_iterator\nparser::last_param() const\n{\n    return m_parameters.end();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE argument const&\nparser::valid_argument( cstring string_id ) const\n{\n    const_argument_ptr arg = (*this)[string_id];\n\n    BOOST_RT_PARAM_VALIDATE_LOGIC( !!arg, \"Actual argument for parameter \" << string_id << \" is not present\" );\n\n    return *arg;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE parser&\nparser::operator<<( parameter_ptr new_param )\n{\n    BOOST_TEST_FOREACH( parameter_ptr, old_param, m_parameters ) {\n        BOOST_RT_PARAM_VALIDATE_LOGIC( !old_param->conflict_with( *new_param ),\n            BOOST_RT_PARAM_LITERAL( \"Definition of parameter \" )                << new_param->id_2_report() << \n            BOOST_RT_PARAM_LITERAL( \" conflicts with defintion of parameter \" ) << old_param->id_2_report() );\n    }\n\n    m_parameters.push_back( new_param );\n\n    return *this;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nparser::parse( int& argc, char_type** argv )\n{\n    if( m_program_name.empty() ) {\n        m_program_name.assign( argv[0] );\n        dstring::size_type pos = m_program_name.find_last_of( BOOST_RT_PARAM_LITERAL( \"/\\\\\" ) );\n\n        if( pos != static_cast<dstring::size_type>(cstring::npos) )\n            m_program_name.erase( 0, pos+1 );\n    }\n\n    m_traverser.init( argc, argv );\n\n    try {\n        while( !m_traverser.eoi() ) {\n            parameter_ptr found_param;\n\n            BOOST_RT_PARAM_TRACE( \"Total \" << m_parameters.size() << \" parameters registered\" );\n\n            BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {\n                BOOST_RT_PARAM_TRACE( \"Try parameter \" << curr_param->id_2_report() );\n\n                if( curr_param->matching( m_traverser, !found_param ) ) {\n                    BOOST_RT_PARAM_TRACE( \"Match found\" );\n                    BOOST_RT_CLA_VALIDATE_INPUT( !found_param, (m_traverser.rollback(),m_traverser), \"Ambiguous input\" );\n\n                    found_param = curr_param;\n                }\n\n                m_traverser.rollback();\n            }\n\n            if( !found_param ) {\n                BOOST_RT_PARAM_TRACE( \"No match found\" );\n                BOOST_RT_CLA_VALIDATE_INPUT( m_traverser.handle_mismatch(), m_traverser,\n                                             BOOST_RT_PARAM_LITERAL( \"Unexpected input\" ) );\n\n                continue;\n            }\n\n            BOOST_RT_PARAM_TRACE( \"Parse argument value\" );\n            found_param->produce_argument( m_traverser );\n\n            m_traverser.commit();\n        }\n\n        BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {\n            if( !curr_param->p_optional && !curr_param->actual_argument() ) {\n                curr_param->produce_argument( *this );\n\n                BOOST_RT_PARAM_VALIDATE_LOGIC( curr_param->actual_argument(),\n                    BOOST_RT_PARAM_LITERAL( \"Required argument for parameter \" ) << curr_param->id_2_report()\n                        << BOOST_RT_PARAM_LITERAL( \" is missing\" ) );\n            }\n        }\n    }\n    catch( bad_lexical_cast const& ) {\n        BOOST_RT_PARAM_REPORT_LOGIC_ERROR( \n            BOOST_RT_PARAM_LITERAL( \"String to value convertion error during input parsing\" ) );\n    }\n\n    m_traverser.remainder( argc, argv );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE const_argument_ptr\nparser::operator[]( cstring string_id ) const\n{\n    parameter_ptr found_param;\n\n    BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {\n        if( curr_param->responds_to( string_id ) ) {\n            BOOST_RT_PARAM_VALIDATE_LOGIC( !found_param,\n                                           BOOST_RT_PARAM_LITERAL( \"Ambiguous parameter string id: \" ) << string_id );\n\n            found_param = curr_param;\n        }\n    }\n\n    return found_param ? found_param->actual_argument() : argument_ptr();\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE cstring\nparser::get( cstring string_id ) const\n{\n    return get<cstring>( string_id );\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nparser::usage( out_stream& ostr )\n{\n    if( m_program_name.empty() )\n        assign_op( m_program_name, BOOST_RT_PARAM_CSTRING_LITERAL( \"<program>\" ), 0 );\n\n    format_stream fs;\n\n    fs << m_program_name;\n\n    BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {\n        fs << BOOST_RT_PARAM_LITERAL( ' ' );\n\n        if( curr_param->p_optional )\n            fs << BOOST_RT_PARAM_LITERAL( '[' );\n\n        curr_param->usage_info( fs );\n\n        if( curr_param->p_optional )\n            fs << BOOST_RT_PARAM_LITERAL( ']' );\n\n        if( curr_param->p_multiplicable ) {\n            fs << BOOST_RT_PARAM_CSTRING_LITERAL( \" ... \" );\n            \n            if( curr_param->p_optional )\n                fs << BOOST_RT_PARAM_LITERAL( '[' );\n\n            curr_param->usage_info( fs );\n\n            if( curr_param->p_optional )\n                fs << BOOST_RT_PARAM_LITERAL( ']' );\n        }\n    }\n\n    ostr << BOOST_RT_PARAM_CSTRING_LITERAL( \"Usage:\\n\" ) << fs.str() << std::endl;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nparser::help( out_stream& ostr )\n{\n    usage( ostr );\n\n    bool need_where = true;\n\n    BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {\n        if( curr_param->p_description->empty() )\n            continue;\n\n        if( need_where ) {\n            ostr << BOOST_RT_PARAM_CSTRING_LITERAL( \"where:\\n\" );\n            need_where = false;\n        }\n\n        ostr << curr_param->id_2_report() << BOOST_RT_PARAM_CSTRING_LITERAL( \" - \" ) << curr_param->p_description << std::endl;\n    }\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_PARSER_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/typed_parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : generic typed parameter model\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER\n#define BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n#include <boost/test/utils/runtime/cla/parameter.hpp>\n#include <boost/test/utils/runtime/cla/argument_factory.hpp>\n\n// Boost.Test\n#include <boost/test/utils/rtti.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************         runtime::cla::typed_parameter        ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass typed_parameter : public cla::parameter {\npublic:\n    explicit typed_parameter( identification_policy& ID ) \n    : cla::parameter( ID, m_arg_factory, rtti::type_id<T>() == rtti::type_id<bool>() ) \n    {}\n\n    // parameter properties modification\n    template<typename Modifier>\n    void    accept_modifier( Modifier const& m )\n    {\n        cla::parameter::accept_modifier( m );\n\n        m_arg_factory.accept_modifier( m );\n\n        BOOST_RT_PARAM_VALIDATE_LOGIC( !p_optional || !m_arg_factory.m_value_generator,\n            BOOST_RT_PARAM_LITERAL( \"can't define a value generator for optional parameter \" ) << id_2_report() );\n    }\n\nprivate:\n    // Data members\n    typed_argument_factory<T>   m_arg_factory;\n};\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/validation.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : input validation helpers definition\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_VALIDATION_HPP_062604GER\n#define BOOST_RT_CLA_VALIDATION_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************       runtime::cla::report_input_error       ************** //\n// ************************************************************************** //\n\nvoid report_input_error( argv_traverser const& tr, format_stream& msg );\n\n//____________________________________________________________________________//\n\n#define BOOST_RT_CLA_VALIDATE_INPUT( b, tr, msg ) \\\n    if( b ) ; else ::boost::BOOST_RT_PARAM_NAMESPACE::cla::report_input_error( tr, format_stream().ref() << msg )\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#  define BOOST_RT_PARAM_INLINE inline\n#  include <boost/test/utils/runtime/cla/validation.ipp>\n\n#endif\n\n#endif // BOOST_RT_CLA_VALIDATION_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/validation.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : input validation helpers implementation\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_VALIDATION_IPP_070604GER\n#define BOOST_RT_CLA_VALIDATION_IPP_070604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/argv_traverser.hpp>\n#include <boost/test/utils/runtime/cla/validation.hpp>\n#include <boost/test/utils/runtime/validation.hpp> // BOOST_RT_PARAM_NAMESPACE::logic_error\n\n// Boost\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n// STL\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\n// ************************************************************************** //\n// **************           runtime::cla::validation           ************** //\n// ************************************************************************** //\n\nBOOST_RT_PARAM_INLINE void\nreport_input_error( argv_traverser const& tr, format_stream& msg )\n{\n    if( tr.eoi() )\n        msg << BOOST_RT_PARAM_LITERAL( \" at the end of input\" );\n    else {\n        msg << BOOST_RT_PARAM_LITERAL( \" in the following position: \" );\n\n        if( tr.input().size() > 5 )\n            msg << tr.input().substr( 0, 5 ) << BOOST_RT_PARAM_LITERAL( \"...\" );\n        else\n            msg << tr.input();\n    }\n\n    throw BOOST_RT_PARAM_NAMESPACE::logic_error( msg.str() );\n}\n\n//____________________________________________________________________________//\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_VALIDATION_IPP_070604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/value_generator.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : specific value generators\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER\n#define BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n#include <boost/test/utils/runtime/cla/parser.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\nnamespace rt_cla_detail {\n\n// ************************************************************************** //\n// **************        runtime::cla::const_generator         ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass const_generator {\npublic:\n    // Constructor\n    explicit    const_generator( T const& t ) : m_const_value( t ) {}\n\n    // generator interface\n    void        operator()( parser const&, boost::optional<T>& t ) const   { t = m_const_value; }\n\nprivate:\n    // Data members\n    T           m_const_value;\n};\n\n// ************************************************************************** //\n// **************         runtime::cla::ref_generator          ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass ref_generator {\npublic:\n    // Constructor\n    explicit    ref_generator( cstring ref_id ) : m_ref_id( ref_id ) {}\n\n    // generator interface\n    void        operator()( parser const& p, boost::optional<T>& t ) const\n    {\n        p.get( m_ref_id, t );\n    }\n\nprivate:\n    // Data members\n    cstring     m_ref_id;\n};\n\n//____________________________________________________________________________//\n\n} // namespace rt_cla_detail\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/cla/value_handler.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : specific value handlers\n// ***************************************************************************\n\n#ifndef BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER\n#define BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#include <boost/test/utils/runtime/cla/fwd.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace cla {\n\nnamespace rt_cla_detail {\n\n// ************************************************************************** //\n// **************            runtime::cla::assigner            ************** //\n// ************************************************************************** //\n\ntemplate<typename T>\nclass assigner {\npublic:\n    // Constructor\n    explicit    assigner( T& loc ) : m_target( loc )    {}\n\n    // value handler implementation\n    void        operator()( parameter const&, T& t )  { m_target = t; }\n\nprivate:\n    // Data members\n    T&          m_target;\n};\n\n} // namespace rt_cla_detail\n\n} // namespace cla\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/config.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : Runtime.Param library configuration\n// ***************************************************************************\n\n#ifndef BOOST_RT_CONFIG_HPP_062604GER\n#define BOOST_RT_CONFIG_HPP_062604GER\n\n// Boost\n#include <boost/config.hpp>\n#ifdef BOOST_MSVC\n# pragma warning(disable: 4511) // copy constructor could not be generated\n# pragma warning(disable: 4512) // assignment operator could not be generated\n# pragma warning(disable: 4181) // qualifier applied to reference type; ignored\n# pragma warning(disable: 4675) // resolved overload was found by argument-dependent lookup\n#endif\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n#include <boost/test/utils/wrap_stringstream.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp> // operator<<(boost::runtime::cstring)\n\n// STL\n#include <string>\n#include <cstdlib>\n\n//____________________________________________________________________________//\n\n#ifndef BOOST_RT_PARAM_CUSTOM_STRING\n#  ifndef BOOST_RT_PARAM_WIDE_STRING\n#    define BOOST_RT_PARAM_NAMESPACE                            runtime\n#  else\n#    define BOOST_RT_PARAM_NAMESPACE                            wide_runtime\n#  endif\n#endif\n\n#ifdef __SUNPRO_CC\nextern int putenv(char*);\n#endif\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n#ifndef BOOST_RT_PARAM_CUSTOM_STRING\n#  ifndef BOOST_RT_PARAM_WIDE_STRING\n\ntypedef char                                                    char_type;\ntypedef std::string                                             dstring;\ntypedef unit_test::const_string                                 cstring;\ntypedef unit_test::literal_string                               literal_cstring;\ntypedef wrap_stringstream                                       format_stream;\n\n#ifdef BOOST_CLASSIC_IOSTREAMS\ntypedef std::ostream                                            out_stream;\n#else\ntypedef std::basic_ostream<char_type>                           out_stream;\n#endif\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4996) // putenv\n#endif\n\n#ifndef UNDER_CE\n#if defined(__COMO__) && 0\ninline void\nputenv_impl( cstring name, cstring value )\n{\n    using namespace std;\n    // !! this may actually fail. What should we do?\n    setenv( name.begin(), value.begin(), 1 );\n}\n#else\ninline void\nputenv_impl( cstring name, cstring value )\n{\n    format_stream fs;\n\n    fs << name << '=' << value;\n\n    // !! this may actually fail. What should we do?\n    // const_cast is used to satisfy putenv interface\n    using namespace std;\n    putenv( const_cast<char*>( fs.str().c_str() ) );\n}\n#endif\n#endif\n\n#ifdef BOOST_MSVC \n#pragma warning(pop) \n#endif \n\n#define BOOST_RT_PARAM_LITERAL( l ) l\n#define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( l, sizeof( l ) - 1 )\n#define BOOST_RT_PARAM_GETENV getenv\n#define BOOST_RT_PARAM_PUTENV ::boost::BOOST_RT_PARAM_NAMESPACE::putenv_impl\n#define BOOST_RT_PARAM_EXCEPTION_INHERIT_STD\n\n//____________________________________________________________________________//\n\n#  else\n\ntypedef wchar_t                                                 char_type;\ntypedef std::basic_string<char_type>                            dstring;\ntypedef unit_test::basic_cstring<wchar_t const>                 cstring;\ntypedef const unit_test::basic_cstring<wchar_t const>           literal_cstring;\ntypedef wrap_wstringstream                                      format_stream;\ntypedef std::wostream                                           out_stream;\n\n#ifndef UNDER_CE\ninline void\nputenv_impl( cstring name, cstring value )\n{\n    format_stream fs;\n\n    fs << name << '=' << value;\n\n    // !! this may actually fail. What should we do?\n    // const_cast is used to satisfy putenv interface\n    using namespace std;\n    wputenv( const_cast<wchar_t*>( fs.str().c_str() ) );\n}\n#endif\n\n#define BOOST_RT_PARAM_LITERAL( l ) L ## l\n#define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( L ## l, sizeof( L ## l )/sizeof(wchar_t) - 1 )\n#define BOOST_RT_PARAM_GETENV wgetenv\n#define BOOST_RT_PARAM_PUTENV putenv_impl\n\n#  endif\n#endif\n\n#ifdef __GNUC__\n#define BOOST_RT_PARAM_UNNEEDED_VIRTUAL virtual\n#else\n#define BOOST_RT_PARAM_UNNEEDED_VIRTUAL\n#endif\n\n//____________________________________________________________________________//\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_CONFIG_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/env/environment.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines and implements inline model of program environment \n// ***************************************************************************\n\n#ifndef BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER\n#define BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER\n\n#ifdef UNDER_CE\n#error Windows CE does not support environment variables.\n#endif\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/argument.hpp>\n#include <boost/test/utils/runtime/interpret_argument_value.hpp>\n\n#include <boost/test/utils/runtime/env/fwd.hpp>\n#include <boost/test/utils/runtime/env/modifier.hpp>\n#include <boost/test/utils/runtime/env/variable.hpp>\n\n// Boost.Test\n#include <boost/test/utils/callback.hpp>\n\n// Boost\n#include <boost/optional.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n// ************************************************************************** //\n// **************      runtime::environment implementation     ************** //\n// ************************************************************************** //\n\nnamespace environment {\n\nnamespace rt_env_detail {\n\ntemplate<typename T, typename Modifiers>\nvariable_data&\ninit_new_var( cstring var_name, Modifiers m = nfp::no_params )\n{\n    rt_env_detail::variable_data& new_vd = new_var_record( var_name );\n\n    cstring str_value = sys_read_var( new_vd.m_var_name );\n\n    if( !str_value.is_empty() ) {\n        try {\n            boost::optional<T> value;\n\n            if( m.has( interpreter ) )\n                m[interpreter]( str_value, value );\n            else\n                interpret_argument_value( str_value, value, 0 );\n\n            if( !!value ) {\n                new_vd.m_value.reset( new typed_argument<T>( new_vd ) );\n\n                arg_value<T>( *new_vd.m_value ) = *value;\n            }\n        }\n        catch( ... ) { // !! could we do that\n            // !! should we report an error?\n        }\n    }\n\n    if( !new_vd.m_value && m.has( default_value ) ) {\n        new_vd.m_value.reset( new typed_argument<T>( new_vd ) );\n\n        nfp::optionally_assign( arg_value<T>( *new_vd.m_value ), m[default_value] );\n    }\n\n    nfp::optionally_assign( new_vd.m_global_id, m, global_id );\n\n    return new_vd;\n}\n\n//____________________________________________________________________________//\n\n} // namespace rt_env_detail\n\n} // namespace environment\n\n// ************************************************************************** //\n// **************             runtime::environment             ************** //\n// ************************************************************************** //\n\nnamespace environment {\n\n    // variable access\n    variable_base\n    var( cstring var_name );\n\n    //________________________________________________________________________//\n\n    template<typename T>\n    inline variable<T>\n    var( cstring var_name )\n    {\n        rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );\n\n        return environment::variable<T>( !vd ? rt_env_detail::init_new_var<T>( var_name, nfp::no_params ) : *vd );\n    }\n\n    //________________________________________________________________________//\n\n    template<typename T, typename Modifiers>\n    inline variable<T>\n    var( cstring var_name, Modifiers const& m )\n    {\n        rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );\n\n        return environment::variable<T>( !vd ? rt_env_detail::init_new_var<T>( var_name, m ) : *vd );\n    }\n\n    //________________________________________________________________________//\n\n    // direct variable value access\n    inline cstring\n    get( cstring var_name )\n    {\n        return environment::var<cstring>( var_name ).value();\n    }\n\n    //________________________________________________________________________//\n\n    template<typename T>\n    inline T const&\n    get( cstring var_name )\n    {\n        return environment::var<T>( var_name ).value();\n    }\n\n    //________________________________________________________________________//\n\n    template<typename T>\n    inline void\n    get( cstring var_name, boost::optional<T>& res )\n    {\n        variable<T> const& v = environment::var<T>( var_name );\n        v.value( res );\n    }\n\n    //________________________________________________________________________//\n\n} // namespace environment\n\nnamespace env = environment;\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#ifndef BOOST_RT_PARAM_OFFLINE\n\n#define BOOST_RT_PARAM_INLINE inline\n#include <boost/test/utils/runtime/env/environment.ipp>\n\n#endif\n\n#endif // BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/env/environment.ipp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : implements model of program environment \n// ***************************************************************************\n\n#ifndef BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER\n#define BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/validation.hpp>\n\n#include <boost/test/utils/runtime/env/variable.hpp>\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/compare.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n// STL\n#include <map>\n#include <list>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace environment {\n\n// ************************************************************************** //\n// **************             runtime::environment             ************** //\n// ************************************************************************** //\n\nnamespace rt_env_detail {\n\ntypedef std::map<cstring,rt_env_detail::variable_data> registry;\ntypedef std::list<dstring> keys;\n\nBOOST_RT_PARAM_INLINE registry& s_registry()    { static registry instance; return instance; }\nBOOST_RT_PARAM_INLINE keys&     s_keys()        { static keys instance; return instance; }\n\nBOOST_RT_PARAM_INLINE variable_data&\nnew_var_record( cstring var_name )\n{\n    // save the name in list of keys\n    s_keys().push_back( dstring() );\n    dstring& key = s_keys().back();\n    assign_op( key, var_name, 0 );\n\n    // create and return new record\n    variable_data& new_var_data = s_registry()[key];\n    \n    new_var_data.m_var_name = key;\n    \n    return new_var_data;\n}\n\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE variable_data*\nfind_var_record( cstring var_name )\n{\n    registry::iterator it = s_registry().find( var_name );\n\n    return it == s_registry().end() ? 0 : &(it->second);\n}\n\n//____________________________________________________________________________//\n\n#ifdef BOOST_MSVC \n#pragma warning(push) \n#pragma warning(disable:4996) // getenv\n#endif\n\nBOOST_RT_PARAM_INLINE cstring\nsys_read_var( cstring var_name )\n{\n    using namespace std;\n    return BOOST_RT_PARAM_GETENV( var_name.begin() );\n}\n\n#ifdef BOOST_MSVC \n#pragma warning(pop) \n#endif\n//____________________________________________________________________________//\n\nBOOST_RT_PARAM_INLINE void\nsys_write_var( cstring var_name, format_stream& var_value )\n{\n    BOOST_RT_PARAM_PUTENV( var_name, cstring( var_value.str() ) );\n}\n\n//____________________________________________________________________________//\n\n} // namespace rt_env_detail\n\nBOOST_RT_PARAM_INLINE variable_base\nvar( cstring var_name )\n{\n    rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );\n\n    BOOST_RT_PARAM_VALIDATE_LOGIC( !!vd,\n                                   BOOST_RT_PARAM_LITERAL( \"First access to the environment variable \" ) \n                                        << var_name << BOOST_RT_PARAM_LITERAL( \" should be typed\" ) );\n\n    return variable_base( *vd );\n}\n\n//____________________________________________________________________________//\n\n} // namespace environment\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/env/fwd.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : environment subsystem forward declarations\n// ***************************************************************************\n\n#ifndef BOOST_RT_ENV_FWD_HPP_062604GER\n#define BOOST_RT_ENV_FWD_HPP_062604GER\n\n#ifdef UNDER_CE\n#error Windows CE does not support environment variables.\n#endif\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace environment {\n\nclass variable_base;\nvariable_base var( cstring var_name );\n\nnamespace rt_env_detail {\n\nstruct variable_data;\n\nvariable_data&  new_var_record( cstring var_name );\nvariable_data*  find_var_record( cstring var_name );\n\ncstring         sys_read_var( cstring var_name );\nvoid            sys_write_var( cstring var_name, format_stream& var_value );\n\n}\n\ntemplate <typename T> class variable;\n\n} // namespace environment\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_ENV_FWD_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/env/modifier.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Use, modification, and distribution are subject to the\n//  Boost Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines variable modifiers\n// ***************************************************************************\n\n#ifndef BOOST_RT_ENV_MODIFIER_HPP_062604GER\n#define BOOST_RT_ENV_MODIFIER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost.Test\n#include <boost/test/utils/named_params.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace environment {\n\n// ************************************************************************** //\n// **************         environment variable modifiers       ************** //\n// ************************************************************************** //\n\nnamespace {\n\nnfp::typed_keyword<cstring,struct global_id_t>   global_id;\nnfp::keyword<struct default_value_t>             default_value;\nnfp::keyword<struct interpreter_t>               interpreter;\n\n} // local namespace\n} // namespace environment\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_ENV_MODIFIER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/env/variable.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 54633 $\n//\n//  Description : defines model of program environment variable\n// ***************************************************************************\n\n#ifndef BOOST_RT_ENV_VARIABLE_HPP_062604GER\n#define BOOST_RT_ENV_VARIABLE_HPP_062604GER\n\n#ifdef UNDER_CE\n#error Windows CE does not support environment variables.\n#endif\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/fwd.hpp>\n#include <boost/test/utils/runtime/parameter.hpp>\n#include <boost/test/utils/runtime/argument.hpp>\n\n#include <boost/test/utils/runtime/env/fwd.hpp>\n\n// Boost\n#include <boost/optional.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace environment {\n\n// ************************************************************************** //\n// **************      runtime::environment::variable_data     ************** //\n// ************************************************************************** //\n\nnamespace rt_env_detail {\n\nstruct variable_data : public runtime::parameter {\n    cstring         m_var_name;\n    dstring         m_global_id;\n    argument_ptr    m_value;\n};\n\n} // namespace rt_env_detail\n\n// ************************************************************************** //\n// **************     runtime::environment::variable_base      ************** //\n// ************************************************************************** //\n\nclass variable_base {\npublic:\n    explicit    variable_base( rt_env_detail::variable_data& data ) : m_data( &data ) {}\n\n    // arguments access\n    template<typename T>\n    T const&    value() const\n    {\n        return arg_value<T>( *m_data->m_value );\n    }\n\n    template<typename T>\n    void        value( boost::optional<T>& res ) const\n    {\n        if( has_value() )\n            res = arg_value<T>( *m_data->m_value );\n        else\n            res.reset();\n    }\n\n    bool        has_value() const   { return m_data->m_value; }\n    cstring     name() const        { return m_data->m_var_name; }\n\nprotected:\n    // Data members\n    rt_env_detail::variable_data*  m_data;\n} ;\n\n// ************************************************************************** //\n// **************        runtime::environment::variable        ************** //\n// ************************************************************************** //\n\ntemplate<typename T = cstring>\nclass variable : public variable_base {\npublic:\n    // Constructors\n    explicit    variable( cstring var_name );\n\n    template<typename Modifiers>\n    explicit    variable( cstring var_name, Modifiers const& m );\n\n    explicit    variable( rt_env_detail::variable_data& data ) \n    : variable_base( data )                                 {}\n\n    // other variable assignment\n    void        operator=( variable const& v )              { m_data = v.m_data; }\n\n    // access methods\n    T const&    value() const                               { return variable_base::value<T>(); }\n\n#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) || \\\n    BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0593))\n    template<typename T>\n    void        value( boost::optional<T>& res ) const      { variable_base::value( res ); }\n#else\n    using       variable_base::value;\n#endif\n\n    // Value assignment\n    template<typename V>\n    void        operator=( V const& v )\n    {\n        if( !has_value() )\n            m_data->m_value.reset( new typed_argument<T>( *m_data ) );\n\n        arg_value<T>( *m_data->m_value ) = v;\n\n        rt_env_detail::sys_write_var( m_data->m_var_name, format_stream().ref() << value() );\n    }\n}; // class variable\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT, typename Tr,typename T>\ninline std::basic_ostream<CharT,Tr>&\noperator<<( std::basic_ostream<CharT,Tr>& os, variable<T> const& v )\n{\n    os << v.name() << '=';\n\n    if( v.has_value() )\n        os << v.value();\n\n    return os;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename V>\ninline bool\noperator==( variable<T> ev, V const& v )\n{\n    return ev.has_value() && ev.value() == v;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename V>\ninline bool\noperator==( V const& v, variable<T> ev )\n{\n    return ev.has_value() && ev.value() == v;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename V>\ninline bool\noperator!=( variable<T> ev, V const& v )\n{\n    return !ev.has_value() || ev.value() != v;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T, typename V>\ninline bool\noperator!=( V const& v, variable<T> ev )\n{\n    return !ev.has_value() || ev.value() != v;\n}\n\n//____________________________________________________________________________//\n\n} // namespace environment\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n// ************************************************************************** //\n// ************************************************************************** //\n// Implementation\n\n#include <boost/test/utils/runtime/env/environment.hpp>\n\n// ************************************************************************** //\n// **************        runtime::environment::variable        ************** //\n// ************************************************************************** //\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nnamespace environment {\n\ntemplate<typename T>\nvariable<T>::variable( cstring var_name )\n: variable_base( environment::var<T>( var_name ) )\n{}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ntemplate<typename Modifiers>\nvariable<T>::variable( cstring var_name, Modifiers const& m )\n: variable_base( environment::var<T>( var_name, m ) )\n{}\n\n//____________________________________________________________________________//\n\n} // namespace environment\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_ENV_VARIABLE_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/fwd.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : global framework level forward declaration\n// ***************************************************************************\n\n#ifndef BOOST_RT_FWD_HPP_062604GER\n#define BOOST_RT_FWD_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost\n#include <boost/shared_ptr.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\nclass parameter;\n\nclass argument;\ntypedef shared_ptr<argument> argument_ptr;\ntypedef shared_ptr<argument const> const_argument_ptr;\n\ntemplate<typename T> class value_interpreter;\ntemplate<typename T> class typed_argument;\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_FWD_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/interpret_argument_value.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : default algorithms for string to specific type convertions\n// ***************************************************************************\n\n#ifndef BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER\n#define BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n#include <boost/test/utils/runtime/trace.hpp>\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/io.hpp>\n#include <boost/test/utils/basic_cstring/compare.hpp>\n\n// Boost\n#include <boost/optional.hpp>\n#include <boost/lexical_cast.hpp>\n\n// STL\n// !! could we eliminate these includes?\n#include <list>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n// ************************************************************************** //\n// **************       runtime::interpret_argument_value      ************** //\n// ************************************************************************** //\n// returns true if source is used false otherwise\n\n// generic case\ntemplate<typename T>\nstruct interpret_argument_value_impl {\n    static bool _( cstring source, boost::optional<T>& res )\n    {\n        BOOST_RT_PARAM_TRACE( \"In interpret_argument_value_impl<\" << typeid(T).name() << \">\" );\n\n        res = lexical_cast<T>( source );\n\n        BOOST_RT_PARAM_TRACE( \"String \" << source << \" is interpreted as \" << *res );\n        return true;\n    }\n};\n\n\n//____________________________________________________________________________//\n\n// dstring case\ntemplate<>\nstruct interpret_argument_value_impl<dstring> {\n    static bool _( cstring source, boost::optional<dstring>& res )\n    {\n        BOOST_RT_PARAM_TRACE( \"In interpret_argument_value_impl<dstring>\" );\n\n        res = dstring();\n        assign_op( *res, source, 0 );\n\n        return true;\n    }\n};\n\n//____________________________________________________________________________//\n\n// cstring case\ntemplate<>\nstruct interpret_argument_value_impl<cstring> {\n    static bool _( cstring source, boost::optional<cstring>& res )\n    {\n        BOOST_RT_PARAM_TRACE( \"In interpret_argument_value_impl<cstring>\" );\n\n        res = source;\n\n        return true;\n    }\n};\n\n//____________________________________________________________________________//\n\n// specialization for type bool\ntemplate<>\nstruct interpret_argument_value_impl<bool> {\n    static bool _( cstring source, boost::optional<bool>& res )\n    {\n        BOOST_RT_PARAM_TRACE( \"In interpret_argument_value_impl<bool>\" );\n\n        static literal_cstring YES( BOOST_RT_PARAM_CSTRING_LITERAL( \"YES\" ) );\n        static literal_cstring Y( BOOST_RT_PARAM_CSTRING_LITERAL( \"Y\" ) );\n        static literal_cstring NO( BOOST_RT_PARAM_CSTRING_LITERAL( \"NO\" ) );\n        static literal_cstring N( BOOST_RT_PARAM_CSTRING_LITERAL( \"N\" ) );\n        static literal_cstring one( BOOST_RT_PARAM_CSTRING_LITERAL( \"1\" ) );\n        static literal_cstring zero( BOOST_RT_PARAM_CSTRING_LITERAL( \"0\" ) );\n\n        source.trim();\n\n        if( case_ins_eq( source, YES ) || case_ins_eq( source, Y ) || case_ins_eq( source, one ) ) {\n            res = true;\n            return true;\n        }\n        else if( case_ins_eq( source, NO ) || case_ins_eq( source, N ) || case_ins_eq( source, zero ) ) {\n            res = false;\n            return true;\n        }\n        else {\n            res = true;\n            return false;\n        }\n    }\n};\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline bool\ninterpret_argument_value( cstring source, boost::optional<T>& res, long )\n{\n    return interpret_argument_value_impl<T>::_( source, res );\n}\n\n//____________________________________________________________________________//\n\n// specialization for list of values\ntemplate<typename T>\ninline bool\ninterpret_argument_value( cstring source, boost::optional<std::list<T> >& res, int )\n{\n    BOOST_RT_PARAM_TRACE( \"In interpret_argument_value<std::list<T>>\" );\n\n    res = std::list<T>();\n\n    while( !source.is_empty() ) {\n        // !! should we use token_iterator\n        cstring::iterator single_value_end = std::find( source.begin(), source.end(), BOOST_RT_PARAM_LITERAL( ',' ) );\n\n        boost::optional<T> value;\n        interpret_argument_value( cstring( source.begin(), single_value_end ), value, 0 );\n\n        res->push_back( *value );\n\n        source.trim_left( single_value_end + 1 );\n    }\n\n    return true;\n}\n\n//____________________________________________________________________________//\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/parameter.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : abstract interface for the formal parameter\n// ***************************************************************************\n\n#ifndef BOOST_RT_PARAMETER_HPP_062604GER\n#define BOOST_RT_PARAMETER_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n// ************************************************************************** //\n// **************              runtime::parameter              ************** //\n// ************************************************************************** //\n\nclass parameter {\npublic:\n    virtual ~parameter() {}\n};\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_PARAMETER_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/trace.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : optional internal tracing\n// ***************************************************************************\n\n#ifndef BOOST_RT_TRACE_HPP_062604GER\n#define BOOST_RT_TRACE_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n#ifdef BOOST_RT_PARAM_DEBUG\n\n#include <iostream>\n\n#  define BOOST_RT_PARAM_TRACE( str ) std::cerr << str << std::endl\n#else\n#  define BOOST_RT_PARAM_TRACE( str )\n#endif\n\n#endif // BOOST_RT_TRACE_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/runtime/validation.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : defines exceptions and validation tools\n// ***************************************************************************\n\n#ifndef BOOST_RT_VALIDATION_HPP_062604GER\n#define BOOST_RT_VALIDATION_HPP_062604GER\n\n// Boost.Runtime.Parameter\n#include <boost/test/utils/runtime/config.hpp>\n\n// Boost.Test\n#include <boost/test/utils/class_properties.hpp>\n\n// Boost\n#include <boost/shared_ptr.hpp>\n\n// STL\n#ifdef BOOST_RT_PARAM_EXCEPTION_INHERIT_STD\n#include <stdexcept>\n#endif\n\nnamespace boost {\n\nnamespace BOOST_RT_PARAM_NAMESPACE {\n\n// ************************************************************************** //\n// **************             runtime::logic_error             ************** //\n// ************************************************************************** //\n\nclass logic_error \n#ifdef BOOST_RT_PARAM_EXCEPTION_INHERIT_STD\n: public std::exception\n#endif\n{\n    typedef shared_ptr<dstring> dstring_ptr;\npublic:\n    // Constructor // !! could we eliminate shared_ptr\n    explicit    logic_error( cstring msg ) : m_msg( new dstring( msg.begin(), msg.size() ) ) {}\n    ~logic_error() throw()                          {}\n\n    dstring const&   msg() const                    { return *m_msg; }\n    virtual char_type const* what() const throw()   { return m_msg->c_str(); }\n\nprivate:\n    dstring_ptr m_msg;\n};\n\n// ************************************************************************** //\n// **************          runtime::report_logic_error         ************** //\n// ************************************************************************** //\n\ninline void\nreport_logic_error( format_stream& msg )\n{\n    throw BOOST_RT_PARAM_NAMESPACE::logic_error( msg.str() );\n}\n\n//____________________________________________________________________________//\n\n#define BOOST_RT_PARAM_REPORT_LOGIC_ERROR( msg ) \\\n    boost::BOOST_RT_PARAM_NAMESPACE::report_logic_error( format_stream().ref() << msg )\n\n#define BOOST_RT_PARAM_VALIDATE_LOGIC( b, msg ) \\\n    if( b ) {} else BOOST_RT_PARAM_REPORT_LOGIC_ERROR( msg )\n\n//____________________________________________________________________________//\n\n} // namespace BOOST_RT_PARAM_NAMESPACE\n\n} // namespace boost\n\n#endif // BOOST_RT_VALIDATION_HPP_062604GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/trivial_singleton.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2005-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : simple helpers for creating cusom output manipulators\n// ***************************************************************************\n\n#ifndef BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER\n#define BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <boost/noncopyable.hpp>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************                   singleton                  ************** //\n// ************************************************************************** //\n\ntemplate<typename Derived>\nclass singleton : private boost::noncopyable {\npublic:\n    static Derived& instance() { static Derived the_inst; return the_inst; }    \nprotected:\n    singleton()  {}\n    ~singleton() {}\n};\n\n} // namespace unit_test\n\n#define BOOST_TEST_SINGLETON_CONS( type )       \\\nfriend class boost::unit_test::singleton<type>; \\\ntype() {}                                       \\\n/**/\n\n#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))\n\n#define BOOST_TEST_SINGLETON_INST( inst ) \\\ntemplate class unit_test::singleton< BOOST_JOIN( inst, _t ) > ; \\\nnamespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }\n\n#elif defined(__APPLE_CC__) && defined(__GNUC__) && __GNUC__ < 4\n#define BOOST_TEST_SINGLETON_INST( inst ) \\\nstatic BOOST_JOIN( inst, _t)& inst = BOOST_JOIN (inst, _t)::instance();\n\n#else\n\n#define BOOST_TEST_SINGLETON_INST( inst ) \\\nnamespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }\n\n#endif\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/wrap_stringstream.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2002-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at \n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 49312 $\n//\n//  Description : wraps strstream and stringstream (depends with one is present)\n//                to provide the unified interface\n// ***************************************************************************\n\n#ifndef BOOST_WRAP_STRINGSTREAM_HPP_071894GER\n#define BOOST_WRAP_STRINGSTREAM_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/detail/config.hpp>\n\n// STL\n#ifdef BOOST_NO_STRINGSTREAM\n#include <strstream>        // for std::ostrstream\n#else\n#include <sstream>          // for std::ostringstream\n#endif // BOOST_NO_STRINGSTREAM\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\n// ************************************************************************** //\n// **************            basic_wrap_stringstream           ************** //\n// ************************************************************************** //\n\ntemplate<typename CharT>\nclass basic_wrap_stringstream {\npublic:\n#if defined(BOOST_CLASSIC_IOSTREAMS)\n    typedef std::ostringstream               wrapped_stream;\n#elif defined(BOOST_NO_STRINGSTREAM)\n    typedef std::basic_ostrstream<CharT>     wrapped_stream;\n#else\n    typedef std::basic_ostringstream<CharT>  wrapped_stream;\n#endif // BOOST_NO_STRINGSTREAM\n    // Access methods\n    basic_wrap_stringstream&        ref();\n    wrapped_stream&                 stream();\n    std::basic_string<CharT> const& str();\n\nprivate:\n    // Data members\n    wrapped_stream                  m_stream;\n    std::basic_string<CharT>        m_str;\n};\n\n//____________________________________________________________________________//\n\ntemplate <typename CharT, typename T>\ninline basic_wrap_stringstream<CharT>&\noperator<<( basic_wrap_stringstream<CharT>& targ, T const& t )\n{\n    targ.stream() << t;\n    return targ;\n}\n\n//____________________________________________________________________________//\n\ntemplate <typename CharT>\ninline typename basic_wrap_stringstream<CharT>::wrapped_stream&\nbasic_wrap_stringstream<CharT>::stream()\n{\n    return m_stream;\n}\n\n//____________________________________________________________________________//\n\ntemplate <typename CharT>\ninline basic_wrap_stringstream<CharT>&\nbasic_wrap_stringstream<CharT>::ref()\n{ \n    return *this;\n}\n\n//____________________________________________________________________________//\n\ntemplate <typename CharT>\ninline std::basic_string<CharT> const&\nbasic_wrap_stringstream<CharT>::str()\n{\n\n#ifdef BOOST_NO_STRINGSTREAM\n    m_str.assign( m_stream.str(), m_stream.pcount() );\n    m_stream.freeze( false );\n#else\n    m_str = m_stream.str();\n#endif\n\n    return m_str;\n}\n\n//____________________________________________________________________________//\n\ntemplate <typename CharT>\ninline basic_wrap_stringstream<CharT>&\noperator<<( basic_wrap_stringstream<CharT>& targ, basic_wrap_stringstream<CharT>& src )\n{\n    targ << src.str();\n    return targ;\n}\n\n//____________________________________________________________________________//\n\n#if BOOST_TEST_USE_STD_LOCALE \n\ntemplate <typename CharT>\ninline basic_wrap_stringstream<CharT>&\noperator<<( basic_wrap_stringstream<CharT>& targ, std::ios_base& (BOOST_TEST_CALL_DECL *man)(std::ios_base&) )\n{\n    targ.stream() << man;\n    return targ;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT,typename Elem,typename Tr>\ninline basic_wrap_stringstream<CharT>&\noperator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ostream<Elem,Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ostream<Elem, Tr>&) )\n{\n    targ.stream() << man;\n    return targ;\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename CharT,typename Elem,typename Tr>\ninline basic_wrap_stringstream<CharT>&\noperator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ios<Elem, Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ios<Elem, Tr>&) )\n{\n    targ.stream() << man;\n    return targ;\n}\n\n//____________________________________________________________________________//\n\n#endif\n\n// ************************************************************************** //\n// **************               wrap_stringstream              ************** //\n// ************************************************************************** //\n\ntypedef basic_wrap_stringstream<char>       wrap_stringstream;\ntypedef basic_wrap_stringstream<wchar_t>    wrap_wstringstream;\n\n}  // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif  // BOOST_WRAP_STRINGSTREAM_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/test/utils/xml_printer.hpp",
    "content": "//  (C) Copyright Gennadiy Rozental 2004-2008.\n//  Distributed under the Boost Software License, Version 1.0.\n//  (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/test for the library home page.\n//\n//  File        : $RCSfile$\n//\n//  Version     : $Revision: 57992 $\n//\n//  Description : common code used by any agent serving as XML printer\n// ***************************************************************************\n\n#ifndef BOOST_TEST_XML_PRINTER_HPP_071894GER\n#define BOOST_TEST_XML_PRINTER_HPP_071894GER\n\n// Boost.Test\n#include <boost/test/utils/basic_cstring/basic_cstring.hpp>\n#include <boost/test/utils/fixed_mapping.hpp>\n#include <boost/test/utils/custom_manip.hpp>\n#include <boost/test/utils/foreach.hpp>\n#include <boost/test/utils/basic_cstring/io.hpp>\n\n// Boost\n#include <boost/config.hpp>\n\n// STL\n#include <iostream>\n\n#include <boost/test/detail/suppress_warnings.hpp>\n\n//____________________________________________________________________________//\n\nnamespace boost {\n\nnamespace unit_test {\n\n// ************************************************************************** //\n// **************               xml print helpers              ************** //\n// ************************************************************************** //\n\ninline void\nprint_escaped( std::ostream& where_to, const_string value )\n{\n    static fixed_mapping<char,char const*> char_type(\n        '<' , \"lt\",\n        '>' , \"gt\",\n        '&' , \"amp\",\n        '\\'', \"apos\" ,\n        '\"' , \"quot\",\n\n        0\n    );\n\n    BOOST_TEST_FOREACH( char, c, value ) {\n        char const* ref = char_type[c];\n\n        if( ref )\n            where_to << '&' << ref << ';';\n        else\n            where_to << c;\n    }\n}\n\n//____________________________________________________________________________//\n\ninline void\nprint_escaped( std::ostream& where_to, std::string const& value )\n{\n    print_escaped( where_to, const_string( value ) );\n}\n\n//____________________________________________________________________________//\n\ntemplate<typename T>\ninline void\nprint_escaped( std::ostream& where_to, T const& value )\n{\n    where_to << value;\n}\n\n//____________________________________________________________________________//\n\ntypedef custom_manip<struct attr_value_t> attr_value;\n\ntemplate<typename T>\ninline std::ostream&\noperator<<( custom_printer<attr_value> const& p, T const& value )\n{\n    *p << \"=\\\"\";\n    print_escaped( *p, value );\n    *p << '\"';\n\n    return *p;\n}\n\n//____________________________________________________________________________//\n\ntypedef custom_manip<struct cdata_t> cdata;\n\ninline std::ostream&\noperator<<( custom_printer<cdata> const& p, const_string value )\n{\n    return *p << BOOST_TEST_L( \"<![CDATA[\" ) << value << BOOST_TEST_L( \"]]>\" );\n}\n\n//____________________________________________________________________________//\n\n} // namespace unit_test\n\n} // namespace boost\n\n//____________________________________________________________________________//\n\n#include <boost/test/detail/enable_warnings.hpp>\n\n#endif // BOOST_TEST_XML_PRINTER_HPP_071894GER\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/throw_exception.hpp",
    "content": "#ifndef UUID_AA15E74A856F11E08B8D93F24824019B\n#define UUID_AA15E74A856F11E08B8D93F24824019B\n#if defined(__GNUC__) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma GCC system_header\n#endif\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(push,1)\n#endif\n\n// MS compatible compilers support #pragma once\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n//\n//  boost/throw_exception.hpp\n//\n//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.\n//  Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.\n//\n//  Distributed under the Boost Software License, Version 1.0. (See\n//  accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//\n//  http://www.boost.org/libs/utility/throw_exception.html\n//\n\n#include <boost/exception/detail/attribute_noreturn.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/config.hpp>\n#include <exception>\n\n#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) )\n# define BOOST_EXCEPTION_DISABLE\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 )\n# define BOOST_EXCEPTION_DISABLE\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE )\n# include <boost/exception/exception.hpp>\n# include <boost/current_function.hpp>\n# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_CURRENT_FUNCTION,__FILE__,__LINE__)\n#else\n# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)\n#endif\n\nnamespace boost\n{\n#ifdef BOOST_NO_EXCEPTIONS\n\nvoid throw_exception( std::exception const & e ); // user defined\n\n#else\n\ninline void throw_exception_assert_compatibility( std::exception const & ) { }\n\ntemplate<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e )\n{\n    //All boost exceptions are required to derive from std::exception,\n    //to ensure compatibility with BOOST_NO_EXCEPTIONS.\n    throw_exception_assert_compatibility(e);\n\n#ifndef BOOST_EXCEPTION_DISABLE\n    throw enable_current_exception(enable_error_info(e));\n#else\n    throw e;\n#endif\n}\n\n#endif\n\n#if !defined( BOOST_EXCEPTION_DISABLE )\n    namespace\n    exception_detail\n    {\n        template <class E>\n        BOOST_ATTRIBUTE_NORETURN\n        void\n        throw_exception_( E const & x, char const * current_function, char const * file, int line )\n        {\n            boost::throw_exception(\n                set_info(\n                    set_info(\n                        set_info(\n                            enable_error_info(x),\n                            throw_function(current_function)),\n                        throw_file(file)),\n                    throw_line(line)));\n        }\n    }\n#endif\n} // namespace boost\n\n#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)\n#pragma warning(pop)\n#endif\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/timer.hpp",
    "content": "//  boost timer.hpp header file  ---------------------------------------------//\n\n//  Copyright Beman Dawes 1994-99.  Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/timer for documentation.\n\n//  Revision History\n//  01 Apr 01  Modified to use new <boost/limits.hpp> header. (JMaddock)\n//  12 Jan 01  Change to inline implementation to allow use without library\n//             builds. See docs for more rationale. (Beman Dawes) \n//  25 Sep 99  elapsed_max() and elapsed_min() added (John Maddock)\n//  16 Jul 99  Second beta\n//   6 Jul 99  Initial boost version\n\n#ifndef BOOST_TIMER_HPP\n#define BOOST_TIMER_HPP\n\n#include <boost/config.hpp>\n#include <ctime>\n#include <boost/limits.hpp>\n\n# ifdef BOOST_NO_STDC_NAMESPACE\n    namespace std { using ::clock_t; using ::clock; }\n# endif\n\n\nnamespace boost {\n\n//  timer  -------------------------------------------------------------------//\n\n//  A timer object measures elapsed time.\n\n//  It is recommended that implementations measure wall clock rather than CPU\n//  time since the intended use is performance measurement on systems where\n//  total elapsed time is more important than just process or CPU time.\n\n//  Warnings: The maximum measurable elapsed time may well be only 596.5+ hours\n//  due to implementation limitations.  The accuracy of timings depends on the\n//  accuracy of timing information provided by the underlying platform, and\n//  this varies a great deal from platform to platform.\n\nclass timer\n{\n public:\n         timer() { _start_time = std::clock(); } // postcondition: elapsed()==0\n//         timer( const timer& src );      // post: elapsed()==src.elapsed()\n//        ~timer(){}\n//  timer& operator=( const timer& src );  // post: elapsed()==src.elapsed()\n  void   restart() { _start_time = std::clock(); } // post: elapsed()==0\n  double elapsed() const                  // return elapsed time in seconds\n    { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }\n\n  double elapsed_max() const   // return estimated maximum value for elapsed()\n  // Portability warning: elapsed_max() may return too high a value on systems\n  // where std::clock_t overflows or resets at surprising values.\n  {\n    return (double((std::numeric_limits<std::clock_t>::max)())\n       - double(_start_time)) / double(CLOCKS_PER_SEC); \n  }\n\n  double elapsed_min() const            // return minimum value for elapsed()\n   { return double(1)/double(CLOCKS_PER_SEC); }\n\n private:\n  std::clock_t _start_time;\n}; // timer\n\n} // namespace boost\n\n#endif  // BOOST_TIMER_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type.hpp",
    "content": "// (C) Copyright David Abrahams 2001.\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_TYPE_DWA20010120_HPP\n# define BOOST_TYPE_DWA20010120_HPP\n\nnamespace boost {\n\n  // Just a simple \"type envelope\". Useful in various contexts, mostly to work\n  // around some MSVC deficiencies.\n  template <class T>\n  struct type {};\n\n}\n\n#endif // BOOST_TYPE_DWA20010120_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED\n#define BOOST_TT_ADD_CONST_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n// * convert a type T to const type - add_const<T>\n// this is not required since the result is always\n// the same as \"T const\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_const is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_const,T,T const)\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_const,T&,T&)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_cv.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_ADD_CV_HPP_INCLUDED\n#define BOOST_TT_ADD_CV_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n// * convert a type T to a const volatile type - add_cv<T>\n// this is not required since the result is always\n// the same as \"T const volatile\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_volatile is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_cv,T,T const volatile)\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_cv,T&,T&)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_CV_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_pointer.hpp",
    "content": "\n// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_POINTER_HPP_INCLUDED\n#define BOOST_TT_ADD_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/remove_reference.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0)\n//\n// For some reason this implementation stops Borlands compiler\n// from dropping cv-qualifiers, it still fails with references\n// to arrays for some reason though (shrug...) (JM 20021104)\n//\ntemplate <typename T>\nstruct add_pointer_impl\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer_impl<T&>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer_impl<T&const>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer_impl<T&volatile>\n{\n    typedef T* type;\n};\ntemplate <typename T>\nstruct add_pointer_impl<T&const volatile>\n{\n    typedef T* type;\n};\n\n#else\n\ntemplate <typename T>\nstruct add_pointer_impl\n{\n    typedef typename remove_reference<T>::type no_ref_type;\n    typedef no_ref_type* type;\n};\n\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_pointer,T,typename boost::detail::add_pointer_impl<T>::type)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_reference.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/detail/workaround.hpp>\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && defined(BOOST_MSVC6_MEMBER_TEMPLATES)\n\ntemplate <bool x>\nstruct reference_adder\n{\n    template <typename T> struct result_\n    {\n        typedef T& type;\n    };\n};\n\ntemplate <>\nstruct reference_adder<true>\n{\n    template <typename T> struct result_\n    {\n        typedef T type;\n    };\n};\n\ntemplate <typename T>\nstruct add_reference_impl\n{\n    typedef typename reference_adder<\n          ::boost::is_reference<T>::value\n        >::template result_<T> result;\n\n    typedef typename result::type type;\n};\n\n#else\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\n\ntemplate <typename T>\nstruct add_reference_rvalue_layer\n{\n    typedef T& type;\n};\n\n#ifndef BOOST_NO_RVALUE_REFERENCES\ntemplate <typename T>\nstruct add_reference_rvalue_layer<T&&>\n{\n    typedef T&& type;\n};\n#endif\n\ntemplate <typename T>\nstruct add_reference_impl\n{\n    typedef typename add_reference_rvalue_layer<T>::type type;\n};\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)\n#endif\n\n#endif\n\n// these full specialisations are always required:\nBOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void,void)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const,void const)\nBOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void volatile,void volatile)\nBOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const volatile,void const volatile)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_reference,T,typename boost::detail::add_reference_impl<T>::type)\n\n// agurt, 07/mar/03: workaround Borland's ill-formed sensitivity to an additional\n// level of indirection, here\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_rvalue_reference.hpp",
    "content": "//  add_rvalue_reference.hpp  ---------------------------------------------------------//\n\n//  Copyright 2010 Vicente J. Botet Escriba\n\n//  Distributed under the Boost Software License, Version 1.0.\n//  See http://www.boost.org/LICENSE_1_0.txt\n\n#ifndef BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n#define BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n\n#include <boost/config.hpp>\n\n//----------------------------------------------------------------------------//\n\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_reference.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\n//----------------------------------------------------------------------------//\n//                                                                            //\n//                           C++03 implementation of                          //\n//             20.7.6.2 Reference modifications [meta.trans.ref]              //\n//                          Written by Vicente J. Botet Escriba               //\n//                                                                            //\n// If T names an object or function type then the member typedef type\n// shall name T&&; otherwise, type shall name T. [ Note: This rule reflects\n// the semantics of reference collapsing. For example, when a type T names\n// a type T1&, the type add_rvalue_reference<T>::type is not an rvalue\n// reference. -end note ]\n//----------------------------------------------------------------------------//\n\nnamespace boost {\n\nnamespace type_traits_detail {\n\n    template <typename T, bool b>\n    struct add_rvalue_reference_helper\n    { typedef T   type; };\n\n#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n    template <typename T>\n    struct add_rvalue_reference_helper<T, true>\n    {\n        typedef T&&   type;\n    };\n#endif\n\n    template <typename T>\n    struct add_rvalue_reference_imp\n    { \n       typedef typename boost::type_traits_detail::add_rvalue_reference_helper\n                  <T, (!is_void<T>::value && !is_reference<T>::value) >::type type; \n    };\n\n}\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_rvalue_reference,T,typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type)\n\n}  // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif  // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/add_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n// * convert a type T to volatile type - add_volatile<T>\n// this is not required since the result is always\n// the same as \"T volatile\", but it does suppress warnings\n// from some compilers:\n\n#if defined(BOOST_MSVC)\n// This bogus warning will appear when add_volatile is applied to a\n// const volatile reference because we can't detect const volatile\n// references with MSVC6.\n#   pragma warning(push)\n#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored\n#endif \n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(add_volatile,T,T volatile)\n\n#if defined(BOOST_MSVC)\n#   pragma warning(pop)\n#endif \n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_volatile,T&,T&)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/alignment_of.hpp",
    "content": "\n//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <cstddef>\n\n#include <boost/type_traits/intrinsics.hpp>\n// should be the last #include\n#include <boost/type_traits/detail/size_t_trait_def.hpp>\n\n#ifdef BOOST_MSVC\n#   pragma warning(push)\n#   pragma warning(disable: 4121 4512) // alignment is sensitive to packing\n#endif\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n#pragma option push -Vx- -Ve-\n#endif\n\nnamespace boost {\n\ntemplate <typename T> struct alignment_of;\n\n// get the alignment of some arbitrary type:\nnamespace detail {\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4324) // structure was padded due to __declspec(align())\n#endif\ntemplate <typename T>\nstruct alignment_of_hack\n{\n    char c;\n    T t;\n    alignment_of_hack();\n};\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\ntemplate <unsigned A, unsigned S>\nstruct alignment_logic\n{\n    BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S);\n};\n\n\ntemplate< typename T >\nstruct alignment_of_impl\n{\n#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)\n    //\n    // With MSVC both the native __alignof operator\n    // and our own logic gets things wrong from time to time :-(\n    // Using a combination of the two seems to make the most of a bad job:\n    //\n    BOOST_STATIC_CONSTANT(std::size_t, value =\n        (::boost::detail::alignment_logic<\n            sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T),\n            __alignof(T)\n        >::value));\n#elif !defined(BOOST_ALIGNMENT_OF)\n    BOOST_STATIC_CONSTANT(std::size_t, value =\n        (::boost::detail::alignment_logic<\n            sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T),\n            sizeof(T)\n        >::value));\n#else\n   //\n   // We put this here, rather than in the definition of\n   // alignment_of below, because MSVC's __alignof doesn't\n   // always work in that context for some unexplained reason.\n   // (See type_with_alignment tests for test cases).\n   //\n   BOOST_STATIC_CONSTANT(std::size_t, value = BOOST_ALIGNMENT_OF(T));\n#endif\n};\n\n} // namespace detail\n\nBOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl<T>::value)\n\n// references have to be treated specially, assume\n// that a reference is just a special pointer:\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate <typename T>\nstruct alignment_of<T&>\n    : public alignment_of<T*>\n{\n};\n#endif\n#ifdef __BORLANDC__\n// long double gives an incorrect value of 10 (!)\n// unless we do this...\nstruct long_double_wrapper{ long double ld; };\ntemplate<> struct alignment_of<long double>\n   : public alignment_of<long_double_wrapper>{};\n#endif\n\n// void has to be treated specially:\nBOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void,0)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const,0)\nBOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void volatile,0)\nBOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0)\n#endif\n\n} // namespace boost\n\n#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n#pragma option pop\n#endif\n#ifdef BOOST_MSVC\n#   pragma warning(pop)\n#endif\n\n#include <boost/type_traits/detail/size_t_trait_undef.hpp>\n\n#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/broken_compiler_spec.hpp",
    "content": "\n//  Copyright 2001-2003 Aleksey Gurtovoy.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED\n#define BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED\n\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/config.hpp>\n\n// these are needed regardless of BOOST_TT_NO_BROKEN_COMPILER_SPEC \n#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\nnamespace boost { namespace detail {\ntemplate< typename T > struct remove_const_impl     { typedef T type; };\ntemplate< typename T > struct remove_volatile_impl  { typedef T type; };\ntemplate< typename T > struct remove_pointer_impl   { typedef T type; };\ntemplate< typename T > struct remove_reference_impl { typedef T type; };\ntypedef int invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces;\n}}\n#endif\n\n// agurt, 27/jun/03: disable the workaround if user defined \n// BOOST_TT_NO_BROKEN_COMPILER_SPEC\n#if    !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n    || defined(BOOST_TT_NO_BROKEN_COMPILER_SPEC)\n\n#   define BOOST_TT_BROKEN_COMPILER_SPEC(T) /**/\n\n#else\n\n// same as BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1 macro, except that it\n// never gets #undef-ined\n#   define BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(trait,spec,result) \\\ntemplate<> struct trait##_impl<spec> \\\n{ \\\n    typedef result type; \\\n}; \\\n/**/\n\n#   define BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T)                         \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const,T)                    \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const volatile,T volatile)  \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T volatile,T)              \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T const volatile,T const)  \\\n    /**/\n\n#   define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T)                               \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*,T)                       \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const,T)                  \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*volatile,T)               \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const volatile,T)         \\\n    BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_reference,T&,T)                     \\\n    /**/\n\n#   define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T)                               \\\n    BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T)                                      \\\n    BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const)                                \\\n    BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T volatile)                             \\\n    BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const volatile)                       \\\n    /**/\n\n#   define BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T)                                   \\\n    BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T)                                      \\\n    BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T)                                \\\n    /**/\n\n#   define BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T)                                   \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T*)                                         \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const*)                                   \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T volatile*)                                \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const volatile*)                          \\\n    /**/\n\n#   define BOOST_TT_BROKEN_COMPILER_SPEC(T)                                         \\\n    namespace boost { namespace detail {                                            \\\n    typedef invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces             \\\n      please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces;           \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T)                                          \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T)                                          \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T*)                                         \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const*)                                   \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T volatile*)                                \\\n    BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const volatile*)                          \\\n    }}                                                                              \\\n    /**/\n\n#   include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_TT_BROKEN_COMPILER_SPEC(bool)\nBOOST_TT_BROKEN_COMPILER_SPEC(char)\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\nBOOST_TT_BROKEN_COMPILER_SPEC(wchar_t)\n#endif\nBOOST_TT_BROKEN_COMPILER_SPEC(signed char)\nBOOST_TT_BROKEN_COMPILER_SPEC(unsigned char)\nBOOST_TT_BROKEN_COMPILER_SPEC(signed short)\nBOOST_TT_BROKEN_COMPILER_SPEC(unsigned short)\nBOOST_TT_BROKEN_COMPILER_SPEC(signed int)\nBOOST_TT_BROKEN_COMPILER_SPEC(unsigned int)\nBOOST_TT_BROKEN_COMPILER_SPEC(signed long)\nBOOST_TT_BROKEN_COMPILER_SPEC(unsigned long)\nBOOST_TT_BROKEN_COMPILER_SPEC(float)\nBOOST_TT_BROKEN_COMPILER_SPEC(double)\n//BOOST_TT_BROKEN_COMPILER_SPEC(long double)\n\n// for backward compatibility\n#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(T) \\\n    BOOST_TT_BROKEN_COMPILER_SPEC(T) \\\n/**/\n\n#endif // BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/config.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_CONFIG_HPP_INCLUDED\n#define BOOST_TT_CONFIG_HPP_INCLUDED\n\n#ifndef BOOST_CONFIG_HPP\n#include <boost/config.hpp>\n#endif\n\n#include <boost/detail/workaround.hpp>\n\n//\n// whenever we have a conversion function with elipses\n// it needs to be declared __cdecl to suppress compiler\n// warnings from MS and Borland compilers (this *must*\n// appear before we include is_same.hpp below):\n#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))\n#   define BOOST_TT_DECL __cdecl\n#else\n#   define BOOST_TT_DECL /**/\n#endif\n\n# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000)                         \\\n    || BOOST_WORKAROUND(BOOST_MSVC, <= 1301)                        \\\n    || !defined(__EDG_VERSION__) && BOOST_WORKAROUND(__GNUC__, < 3) \\\n    || BOOST_WORKAROUND(__IBMCPP__, < 600 )                         \\\n    || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)                      \\\n    || defined(__ghs)                                               \\\n    || BOOST_WORKAROUND(__HP_aCC, < 60700)           \\\n    || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890))          \\\n    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)))       \\\n    && defined(BOOST_NO_IS_ABSTRACT)\n\n#   define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1\n\n#endif\n\n#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION\n# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1\n#endif\n\n//\n// Define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING \n// when we can't test for function types with elipsis:\n//\n#if BOOST_WORKAROUND(__GNUC__, < 3)\n#  define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\n#endif\n\n//\n// define BOOST_TT_TEST_MS_FUNC_SIGS\n// when we want to test __stdcall etc function types with is_function etc\n// (Note, does not work with Borland, even though it does support __stdcall etc):\n//\n#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)\n#  define BOOST_TT_TEST_MS_FUNC_SIGS\n#endif\n\n//\n// define BOOST_TT_NO_CV_FUNC_TEST\n// if tests for cv-qualified member functions don't \n// work in is_member_function_pointer\n//\n#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)\n#  define BOOST_TT_NO_CV_FUNC_TEST\n#endif\n\n#endif // BOOST_TT_CONFIG_HPP_INCLUDED\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/conversion_traits.hpp",
    "content": "\n// Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)\n// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n#define BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/is_convertible.hpp>\n\n#endif // BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/cv_traits.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  defines traits classes for cv-qualified types:\n//  is_const, is_volatile, remove_const, remove_volatile, remove_cv.\n\n#ifndef BOOST_TT_CV_TRAITS_HPP_INCLUDED\n#define BOOST_TT_CV_TRAITS_HPP_INCLUDED\n\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/type_traits/add_cv.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/remove_const.hpp>\n#include <boost/type_traits/remove_volatile.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n\n#endif // BOOST_TT_CV_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/bool_trait_def.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2011-10-09 15:28:33 -0700 (Sun, 09 Oct 2011) $\n// $Revision: 74865 $\n\n#include <boost/type_traits/detail/template_arity_spec.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/config.hpp>\n\n//\n// Unfortunately some libraries have started using this header without\n// cleaning up afterwards: so we'd better undef the macros just in case \n// they've been defined already....\n//\n#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_C_BASE\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1\n#endif\n\n#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x570)\n#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    typedef ::boost::integral_constant<bool,C> type; \\\n    enum { value = type::value }; \\\n    /**/\n#   define BOOST_TT_AUX_BOOL_C_BASE(C)\n\n#elif defined(BOOST_MSVC) && BOOST_MSVC < 1300\n\n#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    typedef ::boost::integral_constant<bool,C> base_; \\\n    using base_::value; \\\n    /**/\n\n#endif\n\n#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/\n#endif\n\n#ifndef BOOST_TT_AUX_BOOL_C_BASE\n#   define BOOST_TT_AUX_BOOL_C_BASE(C) : public ::boost::integral_constant<bool,C>\n#endif \n\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \\\ntemplate< typename T > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \\\n/**/\n\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \\\ntemplate< typename T1, typename T2 > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,trait,(T1,T2)) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_DEF3(trait,T1,T2,T3,C) \\\ntemplate< typename T1, typename T2, typename T3 > struct trait \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,trait,(T1,T2,T3)) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(3,trait) \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \\\ntemplate<> struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(sp)) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \\\ntemplate<> struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \\\ntemplate<> struct trait##_impl< sp > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \\\ntemplate<> struct trait##_impl< sp1,sp2 > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \\\ntemplate< param > struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \\\ntemplate< param1, param2 > struct trait< sp > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \\\ntemplate< param > struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \\\ntemplate< param1, param2 > struct trait< sp1,sp2 > \\\n    BOOST_TT_AUX_BOOL_C_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \\\ntemplate< param > struct trait##_impl< sp1,sp2 > \\\n{ \\\npublic:\\\n    BOOST_STATIC_CONSTANT(bool, value = (C)); \\\n}; \\\n/**/\n\n#ifndef BOOST_NO_CV_SPECIALIZATIONS\n#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \\\n    /**/\n#else\n#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \\\n    /**/\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/bool_trait_undef.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2011-10-09 15:28:33 -0700 (Sun, 09 Oct 2011) $\n// $Revision: 74865 $\n\n#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL\n#undef BOOST_TT_AUX_BOOL_C_BASE\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2\n#undef BOOST_TT_AUX_BOOL_TRAIT_DEF3\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2\n#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1\n#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/cv_traits_impl.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED\n#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n// implementation helper:\n\n\n#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2))\nnamespace boost {\nnamespace detail {\n#else\n#include <boost/type_traits/detail/yes_no_type.hpp>\nnamespace boost {\nnamespace type_traits {\nnamespace gcc8503 {\n#endif\n\ntemplate <typename T> struct cv_traits_imp {};\n\ntemplate <typename T>\nstruct cv_traits_imp<T*>\n{\n    BOOST_STATIC_CONSTANT(bool, is_const = false);\n    BOOST_STATIC_CONSTANT(bool, is_volatile = false);\n    typedef T unqualified_type;\n};\n\ntemplate <typename T>\nstruct cv_traits_imp<const T*>\n{\n    BOOST_STATIC_CONSTANT(bool, is_const = true);\n    BOOST_STATIC_CONSTANT(bool, is_volatile = false);\n    typedef T unqualified_type;\n};\n\ntemplate <typename T>\nstruct cv_traits_imp<volatile T*>\n{\n    BOOST_STATIC_CONSTANT(bool, is_const = false);\n    BOOST_STATIC_CONSTANT(bool, is_volatile = true);\n    typedef T unqualified_type;\n};\n\ntemplate <typename T>\nstruct cv_traits_imp<const volatile T*>\n{\n    BOOST_STATIC_CONSTANT(bool, is_const = true);\n    BOOST_STATIC_CONSTANT(bool, is_volatile = true);\n    typedef T unqualified_type;\n};\n\n#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)\n// We have to exclude function pointers \n// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503)\nyes_type mini_funcptr_tester(...);\nno_type  mini_funcptr_tester(const volatile void*);\n\n} // namespace gcc8503\n} // namespace type_traits\n\nnamespace detail {\n\n// Use the implementation above for non function pointers\ntemplate <typename T, unsigned Select \n  = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) >\nstruct cv_traits_imp : public ::boost::type_traits::gcc8503::cv_traits_imp<T> { };\n\n// Functions are never cv-qualified\ntemplate <typename T> struct cv_traits_imp<T*,1>\n{\n    BOOST_STATIC_CONSTANT(bool, is_const = false);\n    BOOST_STATIC_CONSTANT(bool, is_volatile = false);\n    typedef T unqualified_type;\n};\n\n#endif\n\n} // namespace detail\n} // namespace boost \n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/false_result.hpp",
    "content": "//  Copyright David Abrahams 2002. \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED\n#define BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\nnamespace type_traits {\n\n// Utility class which always \"returns\" false\nstruct false_result\n{\n    template <typename T> struct result_\n    {\n        BOOST_STATIC_CONSTANT(bool, value = false);\n    };\n};\n\n}} // namespace boost::type_traits\n\n#endif // BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/ice_and.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>\nstruct ice_and;\n\ntemplate <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>\nstruct ice_and\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\ntemplate <>\nstruct ice_and<true, true, true, true, true, true, true>\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/ice_eq.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <int b1, int b2>\nstruct ice_eq\n{\n    BOOST_STATIC_CONSTANT(bool, value = (b1 == b2));\n};\n\ntemplate <int b1, int b2>\nstruct ice_ne\n{\n    BOOST_STATIC_CONSTANT(bool, value = (b1 != b2));\n};\n\n#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION\ntemplate <int b1, int b2> bool const ice_eq<b1,b2>::value;\ntemplate <int b1, int b2> bool const ice_ne<b1,b2>::value;\n#endif\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/ice_not.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b>\nstruct ice_not\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate <>\nstruct ice_not<true>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/ice_or.hpp",
    "content": "//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n#define BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>\nstruct ice_or;\n\ntemplate <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>\nstruct ice_or\n{\n    BOOST_STATIC_CONSTANT(bool, value = true);\n};\n\ntemplate <>\nstruct ice_or<false, false, false, false, false, false, false>\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/is_function_ptr_helper.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/enum_params.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <class R>\nstruct is_function_ptr_helper\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// preprocessor-generated part, don't edit by hand!\n\ntemplate <class R >\nstruct is_function_ptr_helper<R (*)()> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R >\nstruct is_function_ptr_helper<R (*)( ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0>\nstruct is_function_ptr_helper<R (*)( T0)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0>\nstruct is_function_ptr_helper<R (*)( T0 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1>\nstruct is_function_ptr_helper<R (*)( T0 , T1)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1>\nstruct is_function_ptr_helper<R (*)( T0 , T1 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#else\n\n#undef BOOST_STATIC_CONSTANT\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_function_ptr_helper.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))> { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#if !defined(BOOST_PP_IS_ITERATING)\n\n///// header body\n\n#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n#if defined(BOOST_TT_PREPROCESSING_MODE)\n#   include <boost/preprocessor/iterate.hpp>\n#   include <boost/preprocessor/enum_params.hpp>\n#   include <boost/preprocessor/comma_if.hpp>\n#endif\n\nnamespace boost {\nnamespace type_traits {\n\ntemplate <typename T>\nstruct is_mem_fun_pointer_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#if !defined(BOOST_TT_PREPROCESSING_MODE)\n// pre-processed code, don't edit, try GNU cpp with \n// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)() const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T >\nstruct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n\n#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>\nstruct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n#endif\n#endif\n\n#else\n\n#undef BOOST_STATIC_CONSTANT\n#define BOOST_PP_ITERATION_PARAMS_1 \\\n    (3, (0, 25, \"boost/type_traits/detail/is_mem_fun_pointer_impl.hpp\"))\n#include BOOST_PP_ITERATE()\n\n#endif // BOOST_TT_PREPROCESSING_MODE\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED\n\n///// iteration\n\n#else\n#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n\n@#if !defined(BOOST_TT_NO_CV_FUNC_TEST)\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\n@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n\ntemplate <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>\nstruct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };\n@#endif\n@#endif\n\n#undef BOOST_PP_COUNTER\n#endif // BOOST_PP_IS_ITERATING\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/size_t_trait_def.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2011-04-25 05:26:48 -0700 (Mon, 25 Apr 2011) $\n// $Revision: 71481 $\n\n#include <boost/type_traits/detail/template_arity_spec.hpp>\n#include <boost/type_traits/integral_constant.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n#include <boost/mpl/size_t.hpp>\n\n#include <cstddef>\n\n#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300\n#   define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::integral_constant<std::size_t,C>\n#   define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/\n#else\n#   define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::mpl::size_t<C>\n#   define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \\\n    typedef ::boost::mpl::size_t<C> base_; \\\n    using base_::value; \\\n    /**/\n#endif\n\n\n#define BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(trait,T,C) \\\ntemplate< typename T > struct trait \\\n    : BOOST_TT_AUX_SIZE_T_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \\\n/**/\n\n#define BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(trait,spec,C) \\\ntemplate<> struct trait<spec> \\\n    : BOOST_TT_AUX_SIZE_T_BASE(C) \\\n{ \\\npublic:\\\n    BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,C) \\\ntemplate< param > struct trait<spec> \\\n    : BOOST_TT_AUX_SIZE_T_BASE(C) \\\n{ \\\n}; \\\n/**/\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/size_t_trait_undef.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2004-09-02 08:41:37 -0700 (Thu, 02 Sep 2004) $\n// $Revision: 24874 $\n\n#undef BOOST_TT_AUX_SIZE_T_TRAIT_DEF1\n#undef BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1\n#undef BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/template_arity_spec.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n#include <boost/mpl/int.hpp>\n#include <boost/mpl/aux_/template_arity_fwd.hpp>\n#include <boost/mpl/aux_/preprocessor/params.hpp>\n#include <boost/mpl/aux_/config/lambda.hpp>\n#include <boost/mpl/aux_/config/overload_resolution.hpp>\n\n#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \\\n    && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)\n#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) \\\nnamespace mpl { namespace aux { \\\ntemplate< BOOST_MPL_PP_PARAMS(i, typename T) > \\\nstruct template_arity< \\\n          name< BOOST_MPL_PP_PARAMS(i, T) > \\\n        > \\\n    : int_<i> \\\n{ \\\n}; \\\n}} \\\n/**/\n#else\n#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/type_trait_def.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2011-04-25 05:26:48 -0700 (Mon, 25 Apr 2011) $\n// $Revision: 71481 $\n\n#include <boost/type_traits/detail/template_arity_spec.hpp>\n#include <boost/mpl/aux_/lambda_support.hpp>\n\n#define BOOST_TT_AUX_TYPE_TRAIT_DEF1(trait,T,result) \\\ntemplate< typename T > struct trait \\\n{ \\\npublic:\\\n    typedef result type; \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \\\n}; \\\n\\\nBOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \\\n/**/\n\n#define BOOST_TT_AUX_TYPE_TRAIT_SPEC1(trait,spec,result) \\\ntemplate<> struct trait<spec> \\\n{ \\\npublic:\\\n    typedef result type; \\\n    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(trait,spec,result) \\\ntemplate<> struct trait##_impl<spec> \\\n{ \\\npublic:\\\n    typedef result type; \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,result) \\\ntemplate< param > struct trait<spec> \\\n{ \\\npublic:\\\n    typedef result type; \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,spec,result) \\\ntemplate< param1, param2 > struct trait<spec> \\\n{ \\\npublic:\\\n    typedef result; \\\n}; \\\n/**/\n\n#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(param,trait,spec,result) \\\ntemplate< param > struct trait##_impl<spec> \\\n{ \\\npublic:\\\n    typedef result type; \\\n}; \\\n/**/\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/type_trait_undef.hpp",
    "content": "\n// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\n\n// Copyright Aleksey Gurtovoy 2002-2004\n//\n// Distributed under the Boost Software License, Version 1.0. \n// (See accompanying file LICENSE_1_0.txt or copy at \n// http://www.boost.org/LICENSE_1_0.txt)\n\n// $Source$\n// $Date: 2004-09-02 08:41:37 -0700 (Thu, 02 Sep 2004) $\n// $Revision: 24874 $\n\n#undef BOOST_TT_AUX_TYPE_TRAIT_DEF1\n#undef BOOST_TT_AUX_TYPE_TRAIT_SPEC1\n#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1\n#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1\n#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2\n#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/detail/yes_no_type.hpp",
    "content": "\n//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  macros and helpers for working with integral-constant-expressions.\n\n#ifndef BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n#define BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n\nnamespace boost {\nnamespace type_traits {\n\ntypedef char yes_type;\nstruct no_type\n{\n   char padding[8];\n};\n\n} // namespace type_traits\n} // namespace boost\n\n#endif // BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/function_traits.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n#define BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/add_pointer.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nnamespace detail {\n\ntemplate<typename Function> struct function_traits_helper;\n\ntemplate<typename R>\nstruct function_traits_helper<R (*)(void)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 0);\n  typedef R result_type;\n};\n\ntemplate<typename R, typename T1>\nstruct function_traits_helper<R (*)(T1)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 1);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T1 argument_type;\n};\n\ntemplate<typename R, typename T1, typename T2>\nstruct function_traits_helper<R (*)(T1, T2)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 2);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T1 first_argument_type;\n  typedef T2 second_argument_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3>\nstruct function_traits_helper<R (*)(T1, T2, T3)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 3);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 4);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 5);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 6);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 7);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 8);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 9);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n  typedef T9 arg9_type;\n};\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9,\n         typename T10>\nstruct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = 10);\n  typedef R result_type;\n  typedef T1 arg1_type;\n  typedef T2 arg2_type;\n  typedef T3 arg3_type;\n  typedef T4 arg4_type;\n  typedef T5 arg5_type;\n  typedef T6 arg6_type;\n  typedef T7 arg7_type;\n  typedef T8 arg8_type;\n  typedef T9 arg9_type;\n  typedef T10 arg10_type;\n};\n\n} // end namespace detail\n\ntemplate<typename Function>\nstruct function_traits : \n  public boost::detail::function_traits_helper<typename boost::add_pointer<Function>::type>\n{\n};\n\n#else\n\nnamespace detail {\n\ntemplate<unsigned N> \nstruct type_of_size\n{\n  char elements[N];\n};\n\ntemplate<typename R>\ntype_of_size<1> function_arity_helper(R (*f)());\n\ntemplate<typename R, typename T1>\ntype_of_size<2> function_arity_helper(R (*f)(T1));\n\ntemplate<typename R, typename T1, typename T2>\ntype_of_size<3> function_arity_helper(R (*f)(T1, T2));\n\ntemplate<typename R, typename T1, typename T2, typename T3>\ntype_of_size<4> function_arity_helper(R (*f)(T1, T2, T3));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4>\ntype_of_size<5> function_arity_helper(R (*f)(T1, T2, T3, T4));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5>\ntype_of_size<6> function_arity_helper(R (*f)(T1, T2, T3, T4, T5));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6>\ntype_of_size<7> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7>\ntype_of_size<8> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8>\ntype_of_size<9> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9>\ntype_of_size<10> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8, \n                                              T9));\n\ntemplate<typename R, typename T1, typename T2, typename T3, typename T4,\n         typename T5, typename T6, typename T7, typename T8, typename T9,\n         typename T10>\ntype_of_size<11> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8, \n                                              T9, T10));\n} // end namespace detail\n\n// Won't work with references\ntemplate<typename Function>\nstruct function_traits\n{\n  BOOST_STATIC_CONSTANT(unsigned, arity = (sizeof(boost::detail::function_arity_helper((Function*)0))-1));\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n}\n\n#endif // BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/has_nothrow_constructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/has_trivial_constructor.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail{\n\ntemplate <class T>\nstruct has_nothrow_constructor_imp{\n#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR\n   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_CONSTRUCTOR(T));\n#else\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_constructor<T>::value);\n#endif\n};\n\n}\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_default_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void volatile,false)\n#endif\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void volatile,false)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/has_nothrow_copy.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n#define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n\n#include <boost/type_traits/has_trivial_copy.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail{\n\ntemplate <class T>\nstruct has_nothrow_copy_imp{\n#ifdef BOOST_HAS_NOTHROW_COPY\n   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T));\n#else\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_copy<T>::value);\n#endif\n};\n\n}\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy,T,::boost::detail::has_nothrow_copy_imp<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy_constructor,T,::boost::detail::has_nothrow_copy_imp<T>::value)\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void volatile,false)\n#endif\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void volatile,false)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/has_trivial_constructor.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate <typename T>\nstruct has_trivial_ctor_impl\n{\n#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_or<\n         ::boost::is_pod<T>::value,\n         BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)\n      >::value));\n#else\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_or<\n         ::boost::is_pod<T>::value,\n         false\n      >::value));\n#endif\n};\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_constructor,T,::boost::detail::has_trivial_ctor_impl<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_default_constructor,T,::boost::detail::has_trivial_ctor_impl<T>::value)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/has_trivial_copy.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n#define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/type_traits/detail/ice_not.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate <typename T>\nstruct has_trivial_copy_impl\n{\n#ifdef BOOST_HAS_TRIVIAL_COPY\n   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_COPY(T));\n#else\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_and<\n         ::boost::is_pod<T>::value,\n         ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value\n      >::value));\n#endif\n};\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy,T,::boost::detail::has_trivial_copy_impl<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy_constructor,T,::boost::detail::has_trivial_copy_impl<T>::value)\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void volatile,false)\n#endif\n\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void volatile,false)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/ice.hpp",
    "content": "\n//  (C) Copyright John Maddock and Steve Cleary 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n//\n//  macros and helpers for working with integral-constant-expressions.\n\n#ifndef BOOST_TT_ICE_HPP_INCLUDED\n#define BOOST_TT_ICE_HPP_INCLUDED\n\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/detail/ice_not.hpp>\n#include <boost/type_traits/detail/ice_eq.hpp>\n\n#endif // BOOST_TT_ICE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/integral_constant.hpp",
    "content": "//  (C) Copyright John Maddock 2005. \n//  Use, modification and distribution are subject to the \n//  Boost Software License, Version 1.0. (See accompanying file \n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP\n#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP\n\n#include <boost/config.hpp>\n#include <boost/mpl/bool.hpp>\n#include <boost/mpl/integral_c.hpp>\n\nnamespace boost{\n\n#if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__)\ntemplate <class T, int val>\n#else\ntemplate <class T, T val>\n#endif\nstruct integral_constant : public mpl::integral_c<T, val>\n{\n   typedef integral_constant<T,val> type;\n};\n\ntemplate<> struct integral_constant<bool,true> : public mpl::true_ \n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n# pragma warning(push)\n# pragma warning(disable:4097)\n   typedef mpl::true_ base_;\n   using base_::value;\n# pragma warning(pop)\n#endif\n   typedef integral_constant<bool,true> type;\n};\ntemplate<> struct integral_constant<bool,false> : public mpl::false_ \n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)\n# pragma warning(push)\n# pragma warning(disable:4097)\n   typedef mpl::false_ base_;\n   using base_::value;\n# pragma warning(pop)\n#endif\n   typedef integral_constant<bool,false> type;\n};\n\ntypedef integral_constant<bool,true> true_type;\ntypedef integral_constant<bool,false> false_type;\n\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/intrinsics.hpp",
    "content": "//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED\n#define BOOST_TT_INTRINSICS_HPP_INCLUDED\n\n#ifndef BOOST_TT_CONFIG_HPP_INCLUDED\n#include <boost/type_traits/config.hpp>\n#endif\n\n//\n// Helper macros for builtin compiler support.\n// If your compiler has builtin support for any of the following\n// traits concepts, then redefine the appropriate macros to pick\n// up on the compiler support:\n//\n// (these should largely ignore cv-qualifiers)\n// BOOST_IS_UNION(T) should evaluate to true if T is a union type\n// BOOST_IS_POD(T) should evaluate to true if T is a POD type\n// BOOST_IS_EMPTY(T) should evaluate to true if T is an empty class type (and not a union)\n// BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if \"T x;\" has no effect\n// BOOST_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy\n// BOOST_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy\n// BOOST_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect\n// BOOST_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if \"T x;\" can not throw\n// BOOST_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw\n// BOOST_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw\n// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor\n//\n// The following can also be defined: when detected our implementation is greatly simplified.\n//\n// BOOST_IS_ABSTRACT(T) true if T is an abstract type\n// BOOST_IS_BASE_OF(T,U) true if T is a base class of U\n// BOOST_IS_CLASS(T) true if T is a class type (and not a union)\n// BOOST_IS_CONVERTIBLE(T,U) true if T is convertible to U\n// BOOST_IS_ENUM(T) true is T is an enum\n// BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type\n// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.\n\n#ifdef BOOST_HAS_SGI_TYPE_TRAITS\n    // Hook into SGI's __type_traits class, this will pick up user supplied\n    // specializations as well as SGI - compiler supplied specializations.\n#   include <boost/type_traits/is_same.hpp>\n#   ifdef __NetBSD__\n      // There are two different versions of type_traits.h on NetBSD on Spark\n      // use an implicit include via algorithm instead, to make sure we get\n      // the same version as the std lib:\n#     include <algorithm>\n#   else\n#    include <type_traits.h>\n#   endif\n#   define BOOST_IS_POD(T) ::boost::is_same< typename ::__type_traits<T>::is_POD_type, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_default_constructor, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_COPY(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_copy_constructor, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_assignment_operator, ::__true_type>::value\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_destructor, ::__true_type>::value\n\n#   ifdef __sgi\n#      define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#   endif\n#endif\n\n#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)\n    // Metrowerks compiler is acquiring intrinsic type traits support\n    // post version 8.  We hook into the published interface to pick up\n    // user defined specializations as well as compiler intrinsics as \n    // and when they become available:\n#   include <msl_utility>\n#   define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value\n#   define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value\n#   define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215)\n#   include <boost/type_traits/is_same.hpp>\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T)|| ( ::boost::is_pod<T>::value && !::boost::is_volatile<T>::value))\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::boost::is_pod<T>::value && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value))\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::boost::is_pod<T>::value)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::boost::has_trivial_constructor<T>::value)\n#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) || ::boost::has_trivial_copy<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::boost::has_trivial_assign<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || is_same<T,U>::value) && !__is_abstract(U))\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n//  This one doesn't quite always do the right thing:\n//  #   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n//  This one fails if the default alignment has been changed with /Zp:\n//  #   define BOOST_ALIGNMENT_OF(T) __alignof(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__DMC__) && (__DMC__ >= 0x848)\n// For Digital Mars C++, www.digitalmars.com\n#   define BOOST_IS_UNION(T) (__typeinfo(T) & 0x400)\n#   define BOOST_IS_POD(T) (__typeinfo(T) & 0x800)\n#   define BOOST_IS_EMPTY(T) (__typeinfo(T) & 0x1000)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__typeinfo(T) & 0x10)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__typeinfo(T) & 0x20)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__typeinfo(T) & 0x40)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__typeinfo(T) & 0x8)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__typeinfo(T) & 0x80)\n#   define BOOST_HAS_NOTHROW_COPY(T) (__typeinfo(T) & 0x100)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__typeinfo(T) & 0x200)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) (__typeinfo(T) & 0x4)\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(BOOST_CLANG) && defined(__has_feature)\n#   include <cstddef>\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n\n#   if __has_feature(is_union)\n#     define BOOST_IS_UNION(T) __is_union(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_pod)\n#     define BOOST_IS_POD(T) __is_pod(T)\n#   endif\n#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_empty)\n#     define BOOST_IS_EMPTY(T) __is_empty(T)\n#   endif\n#   if __has_feature(has_trivial_constructor)\n#     define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   endif\n#   if __has_feature(has_trivial_copy)\n#     define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && !is_volatile<T>::value)\n#   endif\n#   if __has_feature(has_trivial_assign)\n#     define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)\n#   endif\n#   if __has_feature(has_trivial_destructor)\n#     define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)\n#   endif\n#   if __has_feature(has_nothrow_constructor)\n#     define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)\n#   endif\n#   if __has_feature(has_nothrow_copy)\n#     define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   endif\n#   if __has_feature(has_nothrow_assign)\n#     define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)\n#   endif\n#   if __has_feature(has_virtual_destructor)\n#     define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n#   endif\n#   if __has_feature(is_abstract)\n#     define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   endif\n#   if __has_feature(is_base_of)\n#     define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   endif\n#   if __has_feature(is_class)\n#     define BOOST_IS_CLASS(T) __is_class(T)\n#   endif\n#   if __has_feature(is_convertible_to)\n#     include <boost/type_traits/is_abstract.hpp>\n#     define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible_to(T,U) && !::boost::is_abstract<U>::value)\n#   endif\n#   if __has_feature(is_enum)\n#     define BOOST_IS_ENUM(T) __is_enum(T)\n#   endif\n#   if __has_feature(is_polymorphic)\n#     define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   endif\n#   define BOOST_ALIGNMENT_OF(T) __alignof(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n\n#ifdef BOOST_INTEL\n#  define BOOST_INTEL_TT_OPTS || is_pod<T>::value\n#else\n#  define BOOST_INTEL_TT_OPTS\n#endif\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference<T>::value && ! ::boost::is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_INTEL_TT_OPTS)\n#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__)\n      // GCC sometimes lies about alignment requirements\n      // of type double on 32-bit unix platforms, use the\n      // old implementation instead in that case:\n#     define BOOST_ALIGNMENT_OF(T) __alignof__(T)\n#   endif\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && !is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)\n#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   define BOOST_ALIGNMENT_OF(T) __alignof__(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n# if defined(__CODEGEARC__)\n#   include <boost/type_traits/is_same.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_volatile.hpp>\n#   include <boost/type_traits/is_void.hpp>\n\n#   define BOOST_IS_UNION(T) __is_union(T)\n#   define BOOST_IS_POD(T) __is_pod(T)\n#   define BOOST_IS_EMPTY(T) __is_empty(T)\n#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))\n#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))\n#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))\n#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)\n#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)\n#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)\n\n#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)\n#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_void<T>::value && !is_void<U>::value)\n#   define BOOST_IS_CLASS(T) __is_class(T)\n#   define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible(T,U) || is_void<U>::value)\n#   define BOOST_IS_ENUM(T) __is_enum(T)\n#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)\n#   define BOOST_ALIGNMENT_OF(T) alignof(T)\n\n#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS\n#endif\n\n#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED\n\n\n\n\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_abstract.hpp",
    "content": "#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP\n#define BOOST_TT_IS_ABSTRACT_CLASS_HPP\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n# pragma once\n#endif\n\n/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8\n// is_abstract_class.hpp:\n//\n//  (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey\n//  Use, modification and distribution is subject to the Boost Software\n//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt)\n//  \n//  See http://www.boost.org for updates, documentation, and revision history.\n//\n\n// Compile type discovery whether given type is abstract class or not.\n//\n//   Requires DR 337 to be supported by compiler\n//   (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_active.html#337).\n//\n//\n// Believed (Jan 2004) to work on:\n//  - GCC 3.4\n//  - VC++ 7.1\n//  - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2)\n//\n// Doesn't work on:\n//  - VC++6, VC++7.0 and less\n//  - GCC 3.3.X and less\n//  - Borland C++ 6 and less\n//      \n//\n// History:\n//  - Originally written by Rani Sharoni, see\n//    http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com\n//    At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1.\n//  - Adapted and added into Boost.Serialization library by Robert Ramey \n//    (starting with submission #10).\n//  - Jan 2004: GCC 3.4 fixed to suport DR337 (Giovanni Bajo).\n//  - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek).\n//  - Nov 2004: Christoph Ludwig found that the implementation did not work with\n//              template types and gcc-3.4 or VC7.1, fix due to Christoph Ludwig\n//              and John Maddock.\n//  - Dec 2004: Added new config macro BOOST_NO_IS_ABSTRACT which causes the template\n//              to degrade gracefully, rather than trash the compiler (John Maddock).\n//\n\n#include <boost/type_traits/intrinsics.hpp>\n#ifndef BOOST_IS_ABSTRACT\n#include <boost/static_assert.hpp>\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/is_class.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#ifdef BOOST_NO_IS_ABSTRACT\n#include <boost/type_traits/is_polymorphic.hpp>\n#endif\n#endif\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\n\nnamespace boost {\nnamespace detail{\n\n#ifdef BOOST_IS_ABSTRACT\ntemplate <class T>\nstruct is_abstract_imp\n{\n   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_ABSTRACT(T));\n};\n#elif !defined(BOOST_NO_IS_ABSTRACT)\ntemplate<class T>\nstruct is_abstract_imp2\n{\n   // Deduction fails if T is void, function type, \n   // reference type (14.8.2/2)or an abstract class type \n   // according to review status issue #337\n   //\n   template<class U>\n   static type_traits::no_type check_sig(U (*)[1]);\n   template<class U>\n   static type_traits::yes_type check_sig(...);\n   //\n   // T must be a complete type, further if T is a template then\n   // it must be instantiated in order for us to get the right answer:\n   //\n   BOOST_STATIC_ASSERT(sizeof(T) != 0);\n\n   // GCC2 won't even parse this template if we embed the computation\n   // of s1 in the computation of value.\n#ifdef __GNUC__\n   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(is_abstract_imp2<T>::template check_sig<T>(0)));\n#else\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(check_sig<T>(0)));\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n#endif\n    \n   BOOST_STATIC_CONSTANT(bool, value = \n      (s1 == sizeof(type_traits::yes_type)));\n};\n\ntemplate <bool v>\nstruct is_abstract_select\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_abstract_imp2<T> type;\n   };\n};\ntemplate <>\nstruct is_abstract_select<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_abstract_imp\n{\n   typedef is_abstract_select< ::boost::is_class<T>::value> selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n};\n\n#endif\n}\n\n#ifndef BOOST_NO_IS_ABSTRACT\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_abstract_imp<T>::value)\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_polymorphic_imp<T>::value)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_arithmetic.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n#define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n\n#if !defined( __CODEGEARC__ )\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_float.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/config.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if !defined(__CODEGEARC__)\nnamespace detail {\n\ntemplate< typename T >\nstruct is_arithmetic_impl\n{ \n    BOOST_STATIC_CONSTANT(bool, value = \n        (::boost::type_traits::ice_or< \n            ::boost::is_integral<T>::value,\n            ::boost::is_float<T>::value\n        >::value)); \n};\n\n} // namespace detail\n#endif\n\n//* is a type T an arithmetic type described in the standard (3.9.1p8)\n#if defined(__CODEGEARC__)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,__is_arithmetic(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,::boost::detail::is_arithmetic_impl<T>::value)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_array.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n// Some fixes for is_array are based on a newgroup posting by Jonathan Lundquist.\n\n\n#ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED\n#define BOOST_TT_IS_ARRAY_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/wrap.hpp>\n#endif\n\n#include <cstddef>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,__is_array(T))\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,false)\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T[N],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const[N],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T volatile[N],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const volatile[N],true)\n#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T[],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const[],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T volatile[],true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],true)\n#endif\n#endif\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail {\n\nusing ::boost::type_traits::yes_type;\nusing ::boost::type_traits::no_type;\nusing ::boost::type_traits::wrap;\n\ntemplate< typename T > T(* is_array_tester1(wrap<T>) )(wrap<T>);\nchar BOOST_TT_DECL is_array_tester1(...);\n\ntemplate< typename T> no_type is_array_tester2(T(*)(wrap<T>));\nyes_type BOOST_TT_DECL is_array_tester2(...);\n\ntemplate< typename T >\nstruct is_array_impl\n{ \n    BOOST_STATIC_CONSTANT(bool, value = \n        sizeof(::boost::detail::is_array_tester2(\n            ::boost::detail::is_array_tester1(\n                ::boost::type_traits::wrap<T>()\n                )\n        )) == 1\n    );\n};\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,::boost::detail::is_array_impl<T>::value)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_class.hpp",
    "content": "//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000-2003.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED\n#define BOOST_TT_IS_CLASS_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n#ifndef BOOST_IS_CLASS\n#   include <boost/type_traits/is_union.hpp>\n#   include <boost/type_traits/detail/ice_and.hpp>\n#   include <boost/type_traits/detail/ice_not.hpp>\n\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#else\n#   include <boost/type_traits/is_scalar.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_void.hpp>\n#   include <boost/type_traits/is_function.hpp>\n#endif\n\n#endif // BOOST_IS_CLASS\n\n#ifdef __EDG_VERSION__\n#   include <boost/type_traits/remove_cv.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\n#ifndef BOOST_IS_CLASS\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n\n// This is actually the conforming implementation which works with\n// abstract classes.  However, enough compilers have trouble with\n// it that most will use the one in\n// boost/type_traits/object_traits.hpp. This implementation\n// actually works with VC7.0, but other interactions seem to fail\n// when we use it.\n\n// is_class<> metafunction due to Paul Mensonides\n// (leavings@attbi.com). For more details:\n// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1\n#if defined(__GNUC__)  && !defined(__EDG_VERSION__)\n\ntemplate <class U> ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));\ntemplate <class U> ::boost::type_traits::no_type is_class_tester(...);\n\ntemplate <typename T>\nstruct is_class_impl\n{\n\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::type_traits::ice_and<\n            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),\n            ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value\n        >::value)\n        );\n};\n\n#else\n\ntemplate <typename T>\nstruct is_class_impl\n{\n    template <class U> static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));\n    template <class U> static ::boost::type_traits::no_type is_class_tester(...);\n\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::type_traits::ice_and<\n            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),\n            ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value\n        >::value)\n        );\n};\n\n#endif\n\n#else\n\ntemplate <typename T>\nstruct is_class_impl\n{\n#   ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n    BOOST_STATIC_CONSTANT(bool, value =\n    (::boost::type_traits::ice_and<\n        ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,\n        ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_function<T>::value >::value\n        >::value));\n#   else\n    BOOST_STATIC_CONSTANT(bool, value =\n    (::boost::type_traits::ice_and<\n        ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,\n        ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,\n        ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value\n        >::value));\n#   endif\n};\n\n# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n# else // BOOST_IS_CLASS\ntemplate <typename T>\nstruct is_class_impl\n{\n    BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T));\n};\n# endif // BOOST_IS_CLASS\n\n} // namespace detail\n\n# ifdef __EDG_VERSION__\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(\n   is_class,T, boost::detail::is_class_impl<typename boost::remove_cv<T>::type>::value)\n# else \nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl<T>::value)\n# endif\n    \n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_CONST_HPP_INCLUDED\n#define BOOST_TT_IS_CONST_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/type_traits/detail/cv_traits_impl.hpp>\n#   ifdef __GNUC__\n#       include <boost/type_traits/is_reference.hpp>\n#   endif\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1400)\n#       include <boost/type_traits/remove_bounds.hpp>\n#   endif\n#else\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/false_result.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T))\n\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace detail{\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <class T>\nstruct is_const_rvalue_filter\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_const);\n#else\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<T*>::is_const);\n#endif\n};\n#ifndef BOOST_NO_RVALUE_REFERENCES\ntemplate <class T>\nstruct is_const_rvalue_filter<T&&>\n{\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n#endif\n}\n\n//* is a type T  declared const - is_const<T>\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_rvalue_filter<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false)\n\n#if  defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false)\n#endif\n\n#if defined(__GNUC__) && (__GNUC__ < 3)\n// special case for gcc where illegally cv-qualified reference types can be\n// generated in some corner cases:\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T const,!(::boost::is_reference<T>::value))\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T volatile const,!(::boost::is_reference<T>::value))\n#endif\n\n#else\n\nnamespace detail {\n\nusing ::boost::type_traits::yes_type;\nusing ::boost::type_traits::no_type;\n\nyes_type is_const_tester(const volatile void*);\nno_type is_const_tester(volatile void *);\n\ntemplate <bool is_ref, bool array>\nstruct is_const_helper\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_const_helper<false,false>\n{\n    template <typename T> struct result_\n    {\n        static T* t;\n        BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(t))\n            ));\n    };\n};\n\ntemplate <>\nstruct is_const_helper<false,true>\n{\n    template <typename T> struct result_\n    {\n        static T t;\n        BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_const_tester(&t))\n            ));\n    };\n};\n\ntemplate <typename T>\nstruct is_const_impl\n    : public is_const_helper<\n          is_reference<T>::value\n        , is_array<T>::value\n        >::template result_<T>\n{\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const volatile,true)\n#endif\n\n} // namespace detail\n\n//* is a type T  declared const - is_const<T>\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_impl<T>::value)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_CONST_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_convertible.hpp",
    "content": "\n// Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)\n// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n#define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#ifndef BOOST_IS_CONVERTIBLE\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/is_array.hpp>\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/ice.hpp>\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_void.hpp>\n#ifndef BOOST_NO_IS_ABSTRACT\n#include <boost/type_traits/is_abstract.hpp>\n#endif\n#include <boost/type_traits/add_rvalue_reference.hpp>\n\n#if defined(__MWERKS__)\n#include <boost/type_traits/is_function.hpp>\n#include <boost/type_traits/remove_reference.hpp>\n#endif\n\n#endif // BOOST_IS_CONVERTIBLE\n\n// should be always the last #include directive\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_IS_CONVERTIBLE\n\n// is one type convertable to another?\n//\n// there are multiple versions of the is_convertible\n// template, almost every compiler seems to require its\n// own version.\n//\n// Thanks to Andrei Alexandrescu for the original version of the\n// conversion detection technique!\n//\n\nnamespace detail {\n\n// MS specific version:\n\n#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)\n\n// This workaround is necessary to handle when From is void\n// which is normally taken care of by the partial specialization\n// of the is_convertible typename.\nusing ::boost::type_traits::yes_type;\nusing ::boost::type_traits::no_type;\n\ntemplate< typename From >\nstruct does_conversion_exist\n{\n    template< typename To > struct result_\n    {\n        static no_type BOOST_TT_DECL _m_check(...);\n        static yes_type BOOST_TT_DECL _m_check(To);\n        static typename add_rvalue_reference<From>::type  _m_from;\n        enum { value = sizeof( _m_check(_m_from) ) == sizeof(yes_type) };\n    };\n};\n\ntemplate<>\nstruct does_conversion_exist<void>\n{\n    template< typename To > struct result_\n    {\n        enum { value = ::boost::is_void<To>::value };\n    };\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n    : public does_conversion_exist<From>::template result_<To>\n{\n};\n\n#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560)\n//\n// special version for Borland compilers\n// this version breaks when used for some\n// UDT conversions:\n//\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n#pragma option push -w-8074\n    // This workaround for Borland breaks the EDG C++ frontend,\n    // so we only use it for Borland.\n    template <typename T> struct checker\n    {\n        static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n        static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(T);\n    };\n\n    static typename add_rvalue_reference<From>::type  _m_from;\n    static bool const value = sizeof( checker<To>::_m_check(_m_from) )\n        == sizeof(::boost::type_traits::yes_type);\n#pragma option pop\n};\n\n#elif defined(__GNUC__) || defined(__BORLANDC__) && (__BORLANDC__ < 0x600)\n// special version for gcc compiler + recent Borland versions\n// note that this does not pass UDT's through (...)\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename T> struct checker\n{\n    static boost::type_traits::no_type _m_check(any_conversion ...);\n    static boost::type_traits::yes_type _m_check(T, int);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    static typename add_rvalue_reference<From>::type  _m_from;\n    static bool const value = sizeof( boost::detail::checker<To>::_m_check(_m_from, 0) )\n        == sizeof(::boost::type_traits::yes_type);\n};\n\n#elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \\\n      || defined(__IBMCPP__) || defined(__HP_aCC)\n//\n// This is *almost* an ideal world implementation as it doesn't rely\n// on undefined behaviour by passing UDT's through (...).\n// Unfortunately it doesn't quite pass all the tests for most compilers (sigh...)\n// Enable this for your compiler if is_convertible_test.cpp will compile it...\n//\n// Note we do not enable this for VC7.1, because even though it passes all the\n// type_traits tests it is known to cause problems when instantiation occurs\n// deep within the instantiation tree :-(\n//\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    // we need this constructor to catch references to functions\n    // (which can not be cv-qualified):\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);\n    static typename add_rvalue_reference<From>::type  _m_from;\n\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n};\n\n#elif defined(__DMC__)\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n    // we need this constructor to catch references to functions\n    // (which can not be cv-qualified):\n    template <typename T> any_conversion(T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    // Using '...' doesn't always work on Digital Mars. This version seems to.\n    template <class T>\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion,  float, T);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int, int);\n    static typename add_rvalue_reference<From>::type  _m_from;\n\n    // Static constants sometime cause the conversion of _m_from to To to be\n    // called. This doesn't happen with an enum.\n    enum { value =\n        sizeof( _m_check(_m_from, 0, 0) ) == sizeof(::boost::type_traits::yes_type)\n        };\n};\n\n#elif defined(__MWERKS__)\n// \n// CW works with the technique implemented above for EDG, except when From\n// is a function type (or a reference to such a type), in which case\n// any_conversion won't be accepted as a valid conversion. We detect this\n// exceptional situation and channel it through an alternative algorithm.\n//\n\ntemplate <typename From, typename To,bool FromIsFunctionRef>\nstruct is_convertible_basic_impl_aux;\n\nstruct any_conversion\n{\n    template <typename T> any_conversion(const volatile T&);\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl_aux<From,To,false /*FromIsFunctionRef*/>\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);\n    static typename add_rvalue_reference<From>::type  _m_from;\n\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)\n        );\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl_aux<From,To,true /*FromIsFunctionRef*/>\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);\n    static typename add_rvalue_reference<From>::type  _m_from;\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)\n        );\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl:\n  is_convertible_basic_impl_aux<\n    From,To,\n    ::boost::is_function<typename ::boost::remove_reference<From>::type>::value\n  >\n{};\n\n#else\n\n//\n// This version seems to work pretty well for a wide spectrum of compilers,\n// however it does rely on undefined behaviour by passing UDT's through (...).\n//\ntemplate <typename From, typename To>\nstruct is_convertible_basic_impl\n{\n    static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);\n    static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);\n    static typename add_rvalue_reference<From>::type  _m_from;\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#pragma warning(disable:4244)\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(disable:6334)\n#endif\n#endif\n    BOOST_STATIC_CONSTANT(bool, value =\n        sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)\n        );\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n};\n\n#endif // is_convertible_impl\n\n#if defined(__DMC__)\n// As before, a static constant sometimes causes errors on Digital Mars.\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n    typedef typename add_reference<From>::type ref_type;\n    enum { value =\n        (::boost::type_traits::ice_and<\n            ::boost::type_traits::ice_or<\n               ::boost::detail::is_convertible_basic_impl<ref_type,To>::value,\n               ::boost::is_void<To>::value\n            >::value,\n            ::boost::type_traits::ice_not<\n               ::boost::is_array<To>::value\n            >::value\n        >::value) };\n};\n#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551\ntemplate <typename From, typename To>\nstruct is_convertible_impl\n{\n    typedef typename add_reference<From>::type ref_type;\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::type_traits::ice_and<\n            ::boost::type_traits::ice_or<\n               ::boost::detail::is_convertible_basic_impl<ref_type,To>::value,\n               ::boost::is_void<To>::value\n            >::value,\n            ::boost::type_traits::ice_not<\n               ::boost::is_array<To>::value\n            >::value\n        >::value)\n        );\n};\n#endif\n\ntemplate <bool trivial1, bool trivial2, bool abstract_target>\nstruct is_convertible_impl_select\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef is_convertible_impl<From, To> type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<true, true, false>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef true_type type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<false, false, true>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <>\nstruct is_convertible_impl_select<true, false, true>\n{\n   template <class From, class To>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_impl_dispatch_base\n{\n#if !BOOST_WORKAROUND(__HP_aCC, < 60700)\n   typedef is_convertible_impl_select< \n      ::boost::is_arithmetic<From>::value, \n      ::boost::is_arithmetic<To>::value,\n#ifndef BOOST_NO_IS_ABSTRACT\n      ::boost::is_abstract<To>::value\n#else\n      false\n#endif\n   > selector;\n#else\n   typedef is_convertible_impl_select<false, false, false> selector;\n#endif\n   typedef typename selector::template rebind<From, To> isc_binder;\n   typedef typename isc_binder::type type;\n};\n\ntemplate <typename From, typename To>\nstruct is_convertible_impl_dispatch \n   : public is_convertible_impl_dispatch_base<From, To>::type\n{};\n\n//\n// Now add the full and partial specialisations\n// for void types, these are common to all the\n// implementation above:\n//\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\n#   define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 volatile,value) \\\n    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const volatile,value) \\\n    /**/\n\n#   define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(trait,spec1,spec2,value) \\\n    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \\\n    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const,spec2,value) \\\n    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 volatile,spec2,value) \\\n    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const volatile,spec2,value) \\\n    /**/\n\n    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(is_convertible,void,void,true)\n\n#   undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2\n#   undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1\n\n#else\n    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(is_convertible,void,void,true)\n#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void,To,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const,To,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void volatile,To,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const volatile,To,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,false)\n#endif\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,(::boost::detail::is_convertible_impl_dispatch<From,To>::value))\n\n#else\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,BOOST_IS_CONVERTIBLE(From,To))\n\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_enum.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_ENUM_HPP_INCLUDED\n#define BOOST_TT_IS_ENUM_HPP_INCLUDED\n\n#include <boost/type_traits/intrinsics.hpp>\n#ifndef BOOST_IS_ENUM\n#include <boost/type_traits/add_reference.hpp>\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/is_convertible.hpp>\n#include <boost/type_traits/is_array.hpp>\n#ifdef __GNUC__\n#include <boost/type_traits/is_function.hpp>\n#endif\n#include <boost/type_traits/config.hpp>\n#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) \n#  include <boost/type_traits/is_class.hpp>\n#  include <boost/type_traits/is_union.hpp>\n#endif\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_IS_ENUM\n#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551))\n\nnamespace detail {\n\n#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) \n\ntemplate <typename T>\nstruct is_class_or_union\n{\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_or<\n           ::boost::is_class<T>::value\n         , ::boost::is_union<T>::value\n      >::value));\n};\n\n#else\n\ntemplate <typename T>\nstruct is_class_or_union\n{\n# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.\n    BOOST_STATIC_CONSTANT(bool, value = false);\n# else\n    template <class U> static ::boost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void));\n\n#  if BOOST_WORKAROUND(BOOST_MSVC, == 1300)                 \\\n    || BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE\n    static ::boost::type_traits::no_type is_class_or_union_tester(...);\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type));\n#  else\n    template <class U>\n    static ::boost::type_traits::no_type is_class_or_union_tester(...);\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(::boost::type_traits::yes_type));\n#  endif\n# endif\n};\n#endif\n\nstruct int_convertible\n{\n    int_convertible(int);\n};\n\n// Don't evaluate convertibility to int_convertible unless the type\n// is non-arithmetic. This suppresses warnings with GCC.\ntemplate <bool is_typename_arithmetic_or_reference = true>\nstruct is_enum_helper\n{\n    template <typename T> struct type\n    {\n        BOOST_STATIC_CONSTANT(bool, value = false);\n    };\n};\n\ntemplate <>\nstruct is_enum_helper<false>\n{\n    template <typename T> struct type\n       : public ::boost::is_convertible<typename boost::add_reference<T>::type,::boost::detail::int_convertible>\n    {\n    };\n};\n\ntemplate <typename T> struct is_enum_impl\n{\n   //typedef ::boost::add_reference<T> ar_t;\n   //typedef typename ar_t::type r_type;\n\n#if defined(__GNUC__)\n\n#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n    \n   // We MUST check for is_class_or_union on conforming compilers in\n   // order to correctly deduce that noncopyable types are not enums\n   // (dwa 2002/04/15)...\n   BOOST_STATIC_CONSTANT(bool, selector =\n      (::boost::type_traits::ice_or<\n           ::boost::is_arithmetic<T>::value\n         , ::boost::is_reference<T>::value\n         , ::boost::is_function<T>::value\n         , is_class_or_union<T>::value\n         , is_array<T>::value\n      >::value));\n#else\n   // ...however, not checking is_class_or_union on non-conforming\n   // compilers prevents a dependency recursion.\n   BOOST_STATIC_CONSTANT(bool, selector =\n      (::boost::type_traits::ice_or<\n           ::boost::is_arithmetic<T>::value\n         , ::boost::is_reference<T>::value\n         , ::boost::is_function<T>::value\n         , is_array<T>::value\n      >::value));\n#endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION\n\n#else // !defined(__GNUC__):\n    \n   BOOST_STATIC_CONSTANT(bool, selector =\n      (::boost::type_traits::ice_or<\n           ::boost::is_arithmetic<T>::value\n         , ::boost::is_reference<T>::value\n         , is_class_or_union<T>::value\n         , is_array<T>::value\n      >::value));\n    \n#endif\n\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n    typedef ::boost::detail::is_enum_helper<\n          ::boost::detail::is_enum_impl<T>::selector\n        > se_t;\n#else\n    typedef ::boost::detail::is_enum_helper<selector> se_t;\n#endif\n\n    typedef typename se_t::template type<T> helper;\n    BOOST_STATIC_CONSTANT(bool, value = helper::value);\n};\n\n// these help on compilers with no partial specialization support:\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,::boost::detail::is_enum_impl<T>::value)\n\n#else // __BORLANDC__\n//\n// buggy is_convertible prevents working\n// implementation of is_enum:\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,false)\n\n#endif\n\n#else // BOOST_IS_ENUM\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,BOOST_IS_ENUM(T))\n\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_float.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n//* is a type T a floating-point type described in the standard (3.9.1p8)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_float,T,false)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,float,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,double,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,long double,true)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_floating_point.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED\n#define BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n//* is a type T a floating-point type described in the standard (3.9.1p8)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_floating_point,T,false)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,float,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,double,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,long double,true)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_function.hpp",
    "content": "\n//  Copyright 2000 John Maddock (john@johnmaddock.co.uk)\n//  Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)\n//\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n#define BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n\n#include <boost/type_traits/is_reference.hpp>\n#include <boost/type_traits/detail/false_result.hpp>\n#include <boost/config.hpp>\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n#   include <boost/type_traits/detail/is_function_ptr_helper.hpp>\n#else\n#   include <boost/type_traits/detail/is_function_ptr_tester.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\n// is a type a function?\n// Please note that this implementation is unnecessarily complex:\n// we could just use !is_convertible<T*, const volatile void*>::value,\n// except that some compilers erroneously allow conversions from\n// function pointers to void*.\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\nnamespace detail {\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\ntemplate<bool is_ref = true>\nstruct is_function_chooser\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_function_chooser<false>\n{\n    template< typename T > struct result_\n        : public ::boost::type_traits::is_function_ptr_helper<T*>\n    {\n    };\n};\n\ntemplate <typename T>\nstruct is_function_impl\n    : public is_function_chooser< ::boost::is_reference<T>::value >\n        ::BOOST_NESTED_TEMPLATE result_<T>\n{\n};\n\n#else\n\ntemplate <typename T>\nstruct is_function_impl\n{\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n    static T* t;\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(::boost::type_traits::is_function_ptr_tester(t))\n        == sizeof(::boost::type_traits::yes_type)\n        );\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n};\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\ntemplate <typename T>\nstruct is_function_impl<T&> : public false_type\n{};\n#endif\n\n#endif\n\n} // namespace detail\n\n#endif // !defined( __CODEGEARC__ )\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,__is_function(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,::boost::detail::is_function_impl<T>::value)\n#ifndef BOOST_NO_RVALUE_REFERENCES\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_function,T&&,false)\n#endif\n#endif\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_integral.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n#define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)\n// as an extention we include long long, as this is likely to be added to the\n// standard at a later date\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,__is_integral(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,false)\n\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned char,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned short,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned int,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned long,true)\n\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed char,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed short,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed int,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed long,true)\n\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,bool,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char,true)\n\n#ifndef BOOST_NO_INTRINSIC_WCHAR_T\n// If the following line fails to compile and you're using the Intel\n// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,\n// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true)\n#endif\n\n// Same set of integral types as in boost/type_traits/integral_promotion.hpp.\n// Please, keep in sync. -- Alexander Nasonov\n#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \\\n    || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \\\n    || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int8,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int8,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int16,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int16,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int32,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int32,true)\n#ifdef __BORLANDC__\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)\n#endif\n#endif\n\n# if defined(BOOST_HAS_LONG_LONG)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::ulong_long_type,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::long_long_type,true)\n#elif defined(BOOST_HAS_MS_INT64)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)\nBOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)\n#endif\n\n#endif  // non-CodeGear implementation\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_lvalue_reference.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_lvalue_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/wrap.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,__is_reference(T))\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true)\n\n#if  defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& const,true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& volatile,true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& const volatile,true)\n#endif\n\n#if defined(__GNUC__) && (__GNUC__ < 3)\n// these allow us to work around illegally cv-qualified reference\n// types.\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T const ,::boost::is_lvalue_reference<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T volatile ,::boost::is_lvalue_reference<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T const volatile ,::boost::is_lvalue_reference<T>::value)\n// However, the above specializations confuse gcc 2.96 unless we also\n// supply these specializations for array types\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,T[N],false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,const T[N],false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,volatile T[N],false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_lvalue_reference,const volatile T[N],false)\n#endif\n\n#else\n\n#ifdef BOOST_MSVC\n#   pragma warning(push)\n#   pragma warning(disable: 4181 4097)\n#endif\n\nnamespace detail {\n\nusing ::boost::type_traits::yes_type;\nusing ::boost::type_traits::no_type;\nusing ::boost::type_traits::wrap;\n\ntemplate <class T> T&(* is_lvalue_reference_helper1(wrap<T>) )(wrap<T>);\nchar is_lvalue_reference_helper1(...);\n\ntemplate <class T> no_type is_lvalue_reference_helper2(T&(*)(wrap<T>));\nyes_type is_lvalue_reference_helper2(...);\n\ntemplate <typename T>\nstruct is_lvalue_reference_impl\n{\n    BOOST_STATIC_CONSTANT(\n        bool, value = sizeof(\n            ::boost::detail::is_lvalue_reference_helper2(\n                ::boost::detail::is_lvalue_reference_helper1(::boost::type_traits::wrap<T>()))) == 1\n        );\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_lvalue_reference,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,::boost::detail::is_lvalue_reference_impl<T>::value)\n\n#ifdef BOOST_MSVC\n#   pragma warning(pop)\n#endif\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_member_function_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \\\n   && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n   //\n   // Note: we use the \"workaround\" version for MSVC because it works for \n   // __stdcall etc function types, where as the partial specialisation\n   // version does not do so.\n   //\n#   include <boost/type_traits/detail/is_mem_fun_pointer_impl.hpp>\n#   include <boost/type_traits/remove_cv.hpp>\n#else\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/false_result.hpp>\n#   include <boost/type_traits/detail/ice_or.hpp>\n#   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,__is_member_function_pointer( T ))\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(\n      is_member_function_pointer\n    , T\n    , ::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value\n    )\n\n#else\n\nnamespace detail {\n\n#ifndef __BORLANDC__\n\ntemplate <bool>\nstruct is_mem_fun_pointer_select\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_mem_fun_pointer_select<false>\n{\n    template <typename T> struct result_\n    {\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(push)\n#pragma warning(disable:6334)\n#endif\n        static T* make_t;\n        typedef result_<T> self_type;\n\n        BOOST_STATIC_CONSTANT(\n            bool, value = (\n                1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t))\n            ));\n#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)\n#pragma warning(pop)\n#endif\n    };\n};\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl\n    : public is_mem_fun_pointer_select<\n          ::boost::type_traits::ice_or<\n              ::boost::is_reference<T>::value\n            , ::boost::is_array<T>::value\n            >::value\n        >::template result_<T>\n{\n};\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate <typename T>\nstruct is_member_function_pointer_impl<T&> : public false_type{};\n#endif\n\n#else // Borland C++\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl\n{\n   static T* m_t;\n   BOOST_STATIC_CONSTANT(\n              bool, value =\n               (1 == sizeof(type_traits::is_mem_fun_pointer_tester(m_t))) );\n};\n\ntemplate <typename T>\nstruct is_member_function_pointer_impl<T&>\n{\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#endif\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_member_function_pointer_impl<T>::value)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_member_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n#   include <boost/type_traits/is_member_function_pointer.hpp>\n#else\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/false_result.hpp>\n#   include <boost/type_traits/detail/ice_or.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,__is_member_pointer(T))\n#elif BOOST_WORKAROUND(__BORLANDC__, < 0x600)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)\n\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)\n\n#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) && !BOOST_WORKAROUND(__IBMCPP__, <=600)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const,true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*volatile,true)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true)\n#endif\n\n#else // no partial template specialization\n\nnamespace detail {\n\ntemplate <typename R, typename T>\n::boost::type_traits::yes_type BOOST_TT_DECL is_member_pointer_tester(R T::*const volatile*);\n::boost::type_traits::no_type BOOST_TT_DECL is_member_pointer_tester(...);\n\ntemplate <bool>\nstruct is_member_pointer_select\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_member_pointer_select<false>\n{\n    template <typename T> struct result_\n    {\n        static T* make_t();\n        BOOST_STATIC_CONSTANT(\n            bool, value =\n            (::boost::type_traits::ice_or<\n                (1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(make_t()))),\n                (1 == sizeof(is_member_pointer_tester(make_t())))\n            >::value) );\n    };\n};\n\ntemplate <typename T>\nstruct is_member_pointer_impl\n    : public is_member_pointer_select<\n          ::boost::type_traits::ice_or<\n              ::boost::is_reference<T>::value\n            , ::boost::is_array<T>::value\n            >::value\n        >::template result_<T>\n{\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::detail::is_member_pointer_impl<T>::value)\n\n#endif // __BORLANDC__\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_pod.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_POD_HPP_INCLUDED\n#define BOOST_TT_IS_POD_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/is_void.hpp>\n#include <boost/type_traits/is_scalar.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/type_traits/intrinsics.hpp>\n\n#include <cstddef>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\n#ifndef BOOST_IS_POD\n#define BOOST_INTERNAL_IS_POD(T) false\n#else\n#define BOOST_INTERNAL_IS_POD(T) BOOST_IS_POD(T)\n#endif\n\nnamespace boost {\n\n// forward declaration, needed by 'is_pod_array_helper' template below\ntemplate< typename T > struct is_POD;\n\nnamespace detail {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\ntemplate <typename T> struct is_pod_impl\n{ \n    BOOST_STATIC_CONSTANT(\n        bool, value =\n        (::boost::type_traits::ice_or<\n            ::boost::is_scalar<T>::value,\n            ::boost::is_void<T>::value,\n            BOOST_INTERNAL_IS_POD(T)\n         >::value));\n};\n\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\ntemplate <typename T, std::size_t sz>\nstruct is_pod_impl<T[sz]>\n    : public is_pod_impl<T>\n{\n};\n#endif\n\n#else\n\ntemplate <bool is_array = false>\nstruct is_pod_helper\n{\n    template <typename T> struct result_\n    {\n        BOOST_STATIC_CONSTANT(\n            bool, value =\n            (::boost::type_traits::ice_or<\n                ::boost::is_scalar<T>::value,\n                ::boost::is_void<T>::value,\n                BOOST_INTERNAL_IS_POD(T)\n            >::value));\n    };\n};\n\ntemplate <bool b>\nstruct bool_to_yes_no_type\n{\n    typedef ::boost::type_traits::no_type type;\n};\n\ntemplate <>\nstruct bool_to_yes_no_type<true>\n{\n    typedef ::boost::type_traits::yes_type type;\n};\n\ntemplate <typename ArrayType>\nstruct is_pod_array_helper\n{\n    enum { is_pod = ::boost::is_POD<ArrayType>::value }; // MSVC workaround\n    typedef typename bool_to_yes_no_type<is_pod>::type type;\n    type instance() const;\n};\n\ntemplate <typename T>\nis_pod_array_helper<T> is_POD_array(T*);\n\ntemplate <>\nstruct is_pod_helper<true>\n{\n    template <typename T> struct result_\n    {\n        static T& help();\n        BOOST_STATIC_CONSTANT(bool, value =\n            sizeof(is_POD_array(help()).instance()) == sizeof(::boost::type_traits::yes_type)\n            );\n    };\n};\n\n\ntemplate <typename T> struct is_pod_impl\n{ \n   BOOST_STATIC_CONSTANT(\n       bool, value = (\n           ::boost::detail::is_pod_helper<\n              ::boost::is_array<T>::value\n           >::template result_<T>::value\n           )\n       );\n};\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n// the following help compilers without partial specialization support:\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void,true)\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void volatile,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const volatile,true)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_POD,T,::boost::detail::is_pod_impl<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl<T>::value)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#undef BOOST_INTERNAL_IS_POD\n\n#endif // BOOST_TT_IS_POD_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_pointer.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED\n#define BOOST_TT_IS_POINTER_HPP_INCLUDED\n\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/detail/ice_not.hpp>\n#include <boost/type_traits/config.hpp>\n#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/remove_cv.hpp>\n#endif\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/is_function_ptr_tester.hpp>\n#   include <boost/type_traits/detail/false_result.hpp>\n#   include <boost/type_traits/detail/ice_or.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T))\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nnamespace detail {\n\ntemplate< typename T > struct is_pointer_helper\n{\n    BOOST_STATIC_CONSTANT(bool, value = false);\n};\n\n#   define TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(helper,sp,result) \\\ntemplate< typename T > struct helper<sp> \\\n{ \\\n    BOOST_STATIC_CONSTANT(bool, value = result); \\\n}; \\\n/**/\n\nTT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true)\n\n#   undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC\n\ntemplate< typename T >\nstruct is_pointer_impl\n{\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::type_traits::ice_and<\n              ::boost::detail::is_pointer_helper<T>::value\n            , ::boost::type_traits::ice_not<\n                ::boost::is_member_pointer<T>::value\n                >::value\n            >::value)\n        );\n#else\n    BOOST_STATIC_CONSTANT(bool, value =\n        (::boost::type_traits::ice_and<\n        ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value\n            , ::boost::type_traits::ice_not<\n                ::boost::is_member_pointer<T>::value\n                >::value\n            >::value)\n        );\n#endif\n};\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)\n\n#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T&,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false)\n#endif\n\n#else // no partial template specialization\n\nnamespace detail {\n\nstruct pointer_helper\n{\n    pointer_helper(const volatile void*);\n};\n\nyes_type BOOST_TT_DECL is_pointer_tester(pointer_helper);\nno_type BOOST_TT_DECL is_pointer_tester(...);\n\ntemplate <bool>\nstruct is_pointer_select\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_pointer_select<false>\n{\n    template <typename T> struct result_\n    {\n        static T& make_t();\n        BOOST_STATIC_CONSTANT(bool, value =\n                (::boost::type_traits::ice_or<\n                    (1 == sizeof(is_pointer_tester(make_t()))),\n                    (1 == sizeof(type_traits::is_function_ptr_tester(make_t())))\n                >::value));\n    };\n};\n\ntemplate <typename T>\nstruct is_pointer_impl\n    : public is_pointer_select<\n          ::boost::type_traits::ice_or<\n              ::boost::is_reference<T>::value\n            , ::boost::is_array<T>::value\n            >::value\n        >::template result_<T>\n{\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const volatile,false)\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_reference.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000, 2010. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#include <boost/type_traits/is_lvalue_reference.hpp>\n#include <boost/type_traits/is_rvalue_reference.hpp>\n#include <boost/type_traits/ice.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate <typename T>\nstruct is_reference_impl\n{\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_or<\n         ::boost::is_lvalue_reference<T>::value, ::boost::is_rvalue_reference<T>::value\n       >::value));\n};\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl<T>::value)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_rvalue_reference.hpp",
    "content": "\n//  (C) John Maddock 2010. \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_rvalue_reference,T,false)\n#ifndef BOOST_NO_RVALUE_REFERENCES\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_rvalue_reference,T&&,true)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_same.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_SAME_HPP_INCLUDED\n#define BOOST_TT_IS_SAME_HPP_INCLUDED\n\n#include <boost/type_traits/config.hpp>\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/type_traits/detail/yes_no_type.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/is_reference.hpp>\n#endif\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)\n#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)\n// without this, Borland's compiler gives the wrong answer for\n// references to arrays:\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true)\n#endif\n\n#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail {\n\n#ifdef BOOST_MSVC\n// the following VC6 specific implementation is *NOT* legal\n// C++, but has the advantage that it works for incomplete\n// types.\n\ntemplate< typename T1 >\nstruct is_same_part_1\n{\n    template<typename T2>  struct part_2     { enum { value = false }; };\n    template<>             struct part_2<T1> { enum { value = true }; };\n};\n\ntemplate< typename T1, typename T2 >\nstruct is_same_impl\n{\n    enum { value = boost::detail::is_same_part_1<T1>::template part_2<T2>::value };\n};\n\n#else // generic \"no-partial-specialization\" version\n\ntemplate <typename T>\n::boost::type_traits::yes_type\nBOOST_TT_DECL is_same_tester(T*, T*);\n\n::boost::type_traits::no_type\nBOOST_TT_DECL is_same_tester(...);\n\ntemplate <typename T, typename U>\nstruct is_same_impl\n{\n   static T t;\n   static U u;\n\n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_and<\n         (sizeof(type_traits::yes_type) == sizeof(boost::detail::is_same_tester(&t,&u))),\n         (::boost::is_reference<T>::value == ::boost::is_reference<U>::value),\n         (sizeof(T) == sizeof(U))\n        >::value));\n};\n\n#endif // BOOST_MSVC\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,(::boost::detail::is_same_impl<T,U>::value))\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif  // BOOST_TT_IS_SAME_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_scalar.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_SCALAR_HPP_INCLUDED\n#define BOOST_TT_IS_SCALAR_HPP_INCLUDED\n\n#include <boost/type_traits/is_arithmetic.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#include <boost/type_traits/is_member_pointer.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate <typename T>\nstruct is_scalar_impl\n{ \n   BOOST_STATIC_CONSTANT(bool, value =\n      (::boost::type_traits::ice_or<\n         ::boost::is_arithmetic<T>::value,\n         ::boost::is_enum<T>::value,\n         ::boost::is_pointer<T>::value,\n         ::boost::is_member_pointer<T>::value\n      >::value));\n};\n\n// these specializations are only really needed for compilers \n// without partial specialization support:\ntemplate <> struct is_scalar_impl<void>{ BOOST_STATIC_CONSTANT(bool, value = false ); };\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\ntemplate <> struct is_scalar_impl<void const>{ BOOST_STATIC_CONSTANT(bool, value = false ); };\ntemplate <> struct is_scalar_impl<void volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };\ntemplate <> struct is_scalar_impl<void const volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scalar,T,::boost::detail::is_scalar_impl<T>::value)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_signed.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_SIGNED_HPP_INCLUDED\n#define BOOST_TT_IS_SIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\nnamespace detail{\n\n#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\n\ntemplate <class T>\nstruct is_signed_values\n{\n   //\n   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's\n   // rather than \"real\" static constants simply doesn't work or give\n   // the correct answer.\n   //\n   typedef typename remove_cv<T>::type no_cv_t;\n   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));\n   static const no_cv_t zero = (static_cast<no_cv_t>(0));\n};\n\ntemplate <class T>\nstruct is_signed_helper\n{\n   typedef typename remove_cv<T>::type no_cv_t;\n   BOOST_STATIC_CONSTANT(bool, value = (!(::boost::detail::is_signed_values<T>::minus_one  > boost::detail::is_signed_values<T>::zero)));\n};\n\ntemplate <bool integral_type>\nstruct is_signed_select_helper\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_signed_helper<T> type;\n   };\n};\n\ntemplate <>\nstruct is_signed_select_helper<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_signed_imp\n{\n   typedef is_signed_select_helper< \n      ::boost::type_traits::ice_or<\n         ::boost::is_integral<T>::value,\n         ::boost::is_enum<T>::value>::value \n   > selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)\n   BOOST_STATIC_CONSTANT(bool, value = is_signed_imp<T>::type::value);\n#else\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n#endif\n};\n\n#else\n\ntemplate <class T> struct is_signed_imp : public false_type{};\ntemplate <> struct is_signed_imp<signed char> : public true_type{};\ntemplate <> struct is_signed_imp<const signed char> : public true_type{};\ntemplate <> struct is_signed_imp<volatile signed char> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile signed char> : public true_type{};\ntemplate <> struct is_signed_imp<short> : public true_type{};\ntemplate <> struct is_signed_imp<const short> : public true_type{};\ntemplate <> struct is_signed_imp<volatile short> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile short> : public true_type{};\ntemplate <> struct is_signed_imp<int> : public true_type{};\ntemplate <> struct is_signed_imp<const int> : public true_type{};\ntemplate <> struct is_signed_imp<volatile int> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile int> : public true_type{};\ntemplate <> struct is_signed_imp<long> : public true_type{};\ntemplate <> struct is_signed_imp<const long> : public true_type{};\ntemplate <> struct is_signed_imp<volatile long> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile long> : public true_type{};\n#ifdef BOOST_HAS_LONG_LONG\ntemplate <> struct is_signed_imp<long long> : public true_type{};\ntemplate <> struct is_signed_imp<const long long> : public true_type{};\ntemplate <> struct is_signed_imp<volatile long long> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile long long> : public true_type{};\n#endif\n#if defined(CHAR_MIN) && (CHAR_MIN != 0)\ntemplate <> struct is_signed_imp<char> : public true_type{};\ntemplate <> struct is_signed_imp<const char> : public true_type{};\ntemplate <> struct is_signed_imp<volatile char> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile char> : public true_type{};\n#endif\n#if defined(WCHAR_MIN) && (WCHAR_MIN != 0)\ntemplate <> struct is_signed_imp<wchar_t> : public true_type{};\ntemplate <> struct is_signed_imp<const wchar_t> : public true_type{};\ntemplate <> struct is_signed_imp<volatile wchar_t> : public true_type{};\ntemplate <> struct is_signed_imp<const volatile wchar_t> : public true_type{};\n#endif\n\n#endif\n\n}\n\n#endif // !defined( __CODEGEARC__ )\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,__is_signed(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,::boost::detail::is_signed_imp<T>::value)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_unsigned.hpp",
    "content": "\n//  (C) Copyright John Maddock 2005.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED\n#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED\n\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n#if !defined( __CODEGEARC__ )\n\nnamespace detail{\n\n#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\n\ntemplate <class T>\nstruct is_unsigned_values\n{\n   //\n   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's\n   // rather than \"real\" static constants simply doesn't work or give\n   // the correct answer.\n   //\n   typedef typename remove_cv<T>::type no_cv_t;\n   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));\n   static const no_cv_t zero = (static_cast<no_cv_t>(0));\n};\n\ntemplate <class T>\nstruct is_ununsigned_helper\n{\n   BOOST_STATIC_CONSTANT(bool, value = (::boost::detail::is_unsigned_values<T>::minus_one > ::boost::detail::is_unsigned_values<T>::zero));\n};\n\ntemplate <bool integral_type>\nstruct is_ununsigned_select_helper\n{\n   template <class T>\n   struct rebind\n   {\n      typedef is_ununsigned_helper<T> type;\n   };\n};\n\ntemplate <>\nstruct is_ununsigned_select_helper<false>\n{\n   template <class T>\n   struct rebind\n   {\n      typedef false_type type;\n   };\n};\n\ntemplate <class T>\nstruct is_unsigned_imp\n{\n   typedef is_ununsigned_select_helper< \n      ::boost::type_traits::ice_or<\n         ::boost::is_integral<T>::value,\n         ::boost::is_enum<T>::value>::value \n   > selector;\n   typedef typename selector::template rebind<T> binder;\n   typedef typename binder::type type;\n   BOOST_STATIC_CONSTANT(bool, value = type::value);\n};\n\n#else\n\ntemplate <class T> struct is_unsigned_imp : public false_type{};\ntemplate <> struct is_unsigned_imp<unsigned char> : public true_type{};\ntemplate <> struct is_unsigned_imp<const unsigned char> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile unsigned char> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile unsigned char> : public true_type{};\ntemplate <> struct is_unsigned_imp<unsigned short> : public true_type{};\ntemplate <> struct is_unsigned_imp<const unsigned short> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile unsigned short> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile unsigned short> : public true_type{};\ntemplate <> struct is_unsigned_imp<unsigned int> : public true_type{};\ntemplate <> struct is_unsigned_imp<const unsigned int> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile unsigned int> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile unsigned int> : public true_type{};\ntemplate <> struct is_unsigned_imp<unsigned long> : public true_type{};\ntemplate <> struct is_unsigned_imp<const unsigned long> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile unsigned long> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile unsigned long> : public true_type{};\n#ifdef BOOST_HAS_LONG_LONG\ntemplate <> struct is_unsigned_imp<unsigned long long> : public true_type{};\ntemplate <> struct is_unsigned_imp<const unsigned long long> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile unsigned long long> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile unsigned long long> : public true_type{};\n#endif\n#if defined(CHAR_MIN) && (CHAR_MIN == 0)\ntemplate <> struct is_unsigned_imp<char> : public true_type{};\ntemplate <> struct is_unsigned_imp<const char> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile char> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile char> : public true_type{};\n#endif\n#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)\ntemplate <> struct is_unsigned_imp<wchar_t> : public true_type{};\ntemplate <> struct is_unsigned_imp<const wchar_t> : public true_type{};\ntemplate <> struct is_unsigned_imp<volatile wchar_t> : public true_type{};\ntemplate <> struct is_unsigned_imp<const volatile wchar_t> : public true_type{};\n#endif\n\n#endif\n\n}\n\n#endif // !defined( __CODEGEARC__ )\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,__is_unsigned(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp<T>::value)\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_void.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_IS_VOID_HPP_INCLUDED\n#define BOOST_TT_IS_VOID_HPP_INCLUDED\n\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\n//* is a type T void - is_void<T>\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,__is_void(T))\n#else\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,false)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void,true)\n\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const,true)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void volatile,true)\nBOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const volatile,true)\n#endif\n\n#endif  // non-CodeGear implementation\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_VOID_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/is_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, \n//      Howard Hinnant and John Maddock 2000. \n//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001\n\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, \n//    is_member_pointer based on the Simulated Partial Specialization work \n//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or \n//    http://groups.yahoo.com/group/boost/message/5441 \n//    Some workarounds in here use ideas suggested from \"Generic<Programming>: \n//    Mappings between Types and Values\" \n//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).\n\n\n#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#   include <boost/type_traits/detail/cv_traits_impl.hpp>\n#   if BOOST_WORKAROUND(BOOST_MSVC, < 1400)\n#       include <boost/type_traits/remove_bounds.hpp>\n#   endif\n#else\n#   include <boost/type_traits/is_reference.hpp>\n#   include <boost/type_traits/is_array.hpp>\n#   include <boost/type_traits/detail/yes_no_type.hpp>\n#   include <boost/type_traits/detail/false_result.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail{\ntemplate <class T>\nstruct is_volatile_rval_filter\n{\n#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_volatile);\n#else\n   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<T*>::is_volatile);\n#endif\n};\n#ifndef BOOST_NO_RVALUE_REFERENCES\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <class T>\nstruct is_volatile_rval_filter<T&&>\n{\n   BOOST_STATIC_CONSTANT(bool, value = false);\n};\n#endif\n}\n\n#if defined( __CODEGEARC__ )\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T))\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\n//* is a type T declared volatile - is_volatile<T>\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_rval_filter<T>::value)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false)\n\n#if  defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false)\nBOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false)\n#endif\n\n#else\n\nnamespace detail {\n\nusing ::boost::type_traits::yes_type;\nusing ::boost::type_traits::no_type;\n\nyes_type is_volatile_tester(void const volatile*);\nno_type is_volatile_tester(void const*);\n\ntemplate <bool is_ref, bool array>\nstruct is_volatile_helper\n    : public ::boost::type_traits::false_result\n{\n};\n\ntemplate <>\nstruct is_volatile_helper<false,false>\n{\n    template <typename T> struct result_\n    {\n        static T* t;\n        BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(t))\n            ));\n    };\n};\n\ntemplate <>\nstruct is_volatile_helper<false,true>\n{\n    template <typename T> struct result_\n    {\n        static T t;\n        BOOST_STATIC_CONSTANT(bool, value = (\n            sizeof(boost::detail::yes_type) == sizeof(boost::detail::is_volatile_tester(&t))\n            ));\n    };\n};\n\ntemplate <typename T>\nstruct is_volatile_impl\n    : public is_volatile_helper<\n          is_reference<T>::value\n        , is_array<T>::value\n        >::template result_<T>\n{\n};\n\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void,false)\n#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const,false)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void volatile,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const volatile,true)\n#endif\n\n} // namespace detail\n\n//* is a type T declared volatile - is_volatile<T>\nBOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_impl<T>::value)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/make_unsigned.hpp",
    "content": "\n//  (C) Copyright John Maddock 2007.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED\n#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED\n\n#include <boost/mpl/if.hpp>\n#include <boost/type_traits/is_integral.hpp>\n#include <boost/type_traits/is_signed.hpp>\n#include <boost/type_traits/is_unsigned.hpp>\n#include <boost/type_traits/is_enum.hpp>\n#include <boost/type_traits/is_same.hpp>\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/add_const.hpp>\n#include <boost/type_traits/add_volatile.hpp>\n#include <boost/type_traits/detail/ice_or.hpp>\n#include <boost/type_traits/detail/ice_and.hpp>\n#include <boost/type_traits/detail/ice_not.hpp>\n#include <boost/static_assert.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\nnamespace detail {\n\ntemplate <class T>\nstruct make_unsigned_imp\n{\n   BOOST_STATIC_ASSERT(\n      (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value));\n#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300)\n   BOOST_STATIC_ASSERT(\n      (::boost::type_traits::ice_not< ::boost::is_same<\n         typename remove_cv<T>::type, bool>::value>::value));\n#endif\n\n   typedef typename remove_cv<T>::type t_no_cv;\n   typedef typename mpl::if_c<\n      (::boost::type_traits::ice_and< \n         ::boost::is_unsigned<T>::value,\n         ::boost::is_integral<T>::value,\n         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,\n         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,\n         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),\n      T,\n      typename mpl::if_c<\n         (::boost::type_traits::ice_and< \n            ::boost::is_integral<T>::value,\n            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,\n            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,\n            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>\n         ::value),\n         typename mpl::if_<\n            is_same<t_no_cv, signed char>,\n            unsigned char,\n            typename mpl::if_<\n               is_same<t_no_cv, short>,\n               unsigned short,\n               typename mpl::if_<\n                  is_same<t_no_cv, int>,\n                  unsigned int,\n                  typename mpl::if_<\n                     is_same<t_no_cv, long>,\n                     unsigned long,\n#if defined(BOOST_HAS_LONG_LONG)\n                     boost::ulong_long_type\n#elif defined(BOOST_HAS_MS_INT64)\n                     unsigned __int64\n#else\n                     unsigned long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type,\n         // Not a regular integer type:\n         typename mpl::if_c<\n            sizeof(t_no_cv) == sizeof(unsigned char),\n            unsigned char,\n            typename mpl::if_c<\n               sizeof(t_no_cv) == sizeof(unsigned short),\n               unsigned short,\n               typename mpl::if_c<\n                  sizeof(t_no_cv) == sizeof(unsigned int),\n                  unsigned int,\n                  typename mpl::if_c<\n                     sizeof(t_no_cv) == sizeof(unsigned long),\n                     unsigned long,\n#if defined(BOOST_HAS_LONG_LONG)\n                     boost::ulong_long_type\n#elif defined(BOOST_HAS_MS_INT64)\n                     unsigned __int64\n#else\n                     unsigned long\n#endif\n                  >::type\n               >::type\n            >::type\n         >::type\n      >::type\n   >::type base_integer_type;\n   \n   // Add back any const qualifier:\n   typedef typename mpl::if_<\n      is_const<T>,\n      typename add_const<base_integer_type>::type,\n      base_integer_type\n   >::type const_base_integer_type;\n   \n   // Add back any volatile qualifier:\n   typedef typename mpl::if_<\n      is_volatile<T>,\n      typename add_volatile<const_base_integer_type>::type,\n      const_base_integer_type\n   >::type type;\n};\n\n\n} // namespace detail\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(make_unsigned,T,typename boost::detail::make_unsigned_imp<T>::type)\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/remove_const.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n\n#include <boost/type_traits/is_volatile.hpp>\n#include <boost/type_traits/broken_compiler_spec.hpp>\n#include <boost/type_traits/detail/cv_traits_impl.hpp>\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>\n\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/msvc/remove_const.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail {\n\ntemplate <typename T, bool is_vol>\nstruct remove_const_helper\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct remove_const_helper<T, true>\n{\n    typedef T volatile type;\n};\n\n\ntemplate <typename T>\nstruct remove_const_impl\n{\n    typedef typename remove_const_helper<\n          typename cv_traits_imp<T*>::unqualified_type\n        , ::boost::is_volatile<T>::value\n        >::type type;\n};\n\n#ifndef BOOST_NO_RVALUE_REFERENCES\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <typename T>\nstruct remove_const_impl<T&&>\n{\n    typedef T&& type;\n};\n#endif\n\n} // namespace detail\n\n// * convert a type T to non-const type - remove_const<T>\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_const,T&,T&)\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const[N],T type[N])\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const volatile[N],T volatile type[N])\n#endif\n\n#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/remove_cv.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED\n#define BOOST_TT_REMOVE_CV_HPP_INCLUDED\n\n#include <boost/type_traits/broken_compiler_spec.hpp>\n#include <boost/type_traits/detail/cv_traits_impl.hpp>\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>\n\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/msvc/remove_cv.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail{\n\ntemplate <class T>\nstruct rvalue_ref_filter_rem_cv\n{\n   typedef typename boost::detail::cv_traits_imp<T*>::unqualified_type type;\n};\n\n#ifndef BOOST_NO_RVALUE_REFERENCES\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <class T>\nstruct rvalue_ref_filter_rem_cv<T&&>\n{\n   typedef T&& type;\n};\n#endif\n\n}\n\n\n//  convert a type T to a non-cv-qualified type - remove_cv<T>\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::rvalue_ref_filter_rem_cv<T>::type)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_cv,T&,T&)\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const[N],T type[N])\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T volatile[N],T type[N])\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const volatile[N],T type[N])\n#endif\n\n#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n\nnamespace detail {\ntemplate <typename T>\nstruct remove_cv_impl\n{\n    typedef typename remove_volatile_impl< \n          typename remove_const_impl<T>::type\n        >::type type;\n};\n}\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::remove_cv_impl<T>::type)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/remove_pointer.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n#define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n#include <boost/type_traits/broken_compiler_spec.hpp>\n#endif\n\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/msvc/remove_pointer.hpp>\n#elif defined(BOOST_MSVC)\n#include <boost/type_traits/remove_cv.hpp>\n#include <boost/type_traits/is_pointer.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n#ifdef BOOST_MSVC\n\nnamespace detail{\n\n   //\n   // We need all this crazy indirection because a type such as:\n   //\n   // T (*const)(U)\n   //\n   // Does not bind to a <T*> or <T*const> partial specialization with VC10 and earlier\n   //\n   template <class T> \n   struct remove_pointer_imp\n   {\n      typedef T type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp<T*>\n   {\n      typedef T type;\n   };\n\n   template <class T, bool b> \n   struct remove_pointer_imp3\n   {\n      typedef typename remove_pointer_imp<typename boost::remove_cv<T>::type>::type type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp3<T, false>\n   {\n      typedef T type;\n   };\n\n   template <class T> \n   struct remove_pointer_imp2\n   {\n      typedef typename remove_pointer_imp3<T, ::boost::is_pointer<T>::value>::type type;\n   };\n}\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_imp2<T>::type)\n\n#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* volatile,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const volatile,T)\n\n#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_impl<T>::type)\n\n#endif\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/remove_reference.hpp",
    "content": "\n//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n\n#include <boost/type_traits/broken_compiler_spec.hpp>\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/msvc/remove_reference.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail{\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\ntemplate <class T>\nstruct remove_rvalue_ref\n{\n   typedef T type;\n};\n#ifndef BOOST_NO_RVALUE_REFERENCES\ntemplate <class T>\nstruct remove_rvalue_ref<T&&>\n{\n   typedef T type;\n};\n#endif\n\n} // namespace detail\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_rvalue_ref<T>::type)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T)\n\n#if defined(BOOST_ILLEGAL_CV_REFERENCES)\n// these are illegal specialisations; cv-qualifies applied to\n// references have no effect according to [8.3.2p1],\n// C++ Builder requires them though as it treats cv-qualified\n// references as distinct types...\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)\n#endif\n\n#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_reference_impl<T>::type)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/remove_volatile.hpp",
    "content": "\n//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard\n//  Hinnant & John Maddock 2000.  \n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n\n#ifndef BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n#define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n\n#include <boost/type_traits/is_const.hpp>\n#include <boost/type_traits/broken_compiler_spec.hpp>\n#include <boost/type_traits/detail/cv_traits_impl.hpp>\n#include <boost/config.hpp>\n#include <boost/detail/workaround.hpp>\n\n#include <cstddef>\n\n#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n#include <boost/type_traits/msvc/remove_volatile.hpp>\n#endif\n\n// should be the last #include\n#include <boost/type_traits/detail/type_trait_def.hpp>\n\nnamespace boost {\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\nnamespace detail {\n\ntemplate <typename T, bool is_const>\nstruct remove_volatile_helper\n{\n    typedef T type;\n};\n\ntemplate <typename T>\nstruct remove_volatile_helper<T,true>\n{\n    typedef T const type;\n};\n\ntemplate <typename T>\nstruct remove_volatile_impl\n{\n    typedef typename remove_volatile_helper<\n          typename cv_traits_imp<T*>::unqualified_type\n        , ::boost::is_const<T>::value\n        >::type type;\n};\n\n//\n// We can't filter out rvalue_references at the same level as\n// references or we get ambiguities from msvc:\n//\n#ifndef BOOST_NO_RVALUE_REFERENCES\ntemplate <typename T>\nstruct remove_volatile_impl<T&&>\n{\n    typedef T&& type;\n};\n#endif\n} // namespace detail\n\n// * convert a type T to a non-volatile type - remove_volatile<T>\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_volatile,T&,T&)\n#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T volatile[N],T type[N])\nBOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T const volatile[N],T const type[N])\n#endif\n\n#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)\n\nBOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)\n\n#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\n\n} // namespace boost\n\n#include <boost/type_traits/detail/type_trait_undef.hpp>\n\n#endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/type_traits/type_with_alignment.hpp",
    "content": "//  (C) Copyright John Maddock 2000.\n//  Use, modification and distribution are subject to the Boost Software License,\n//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n//  http://www.boost.org/LICENSE_1_0.txt).\n//\n//  See http://www.boost.org/libs/type_traits for most recent version including documentation.\n\n#ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n#define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n\n#include <boost/mpl/if.hpp>\n#include <boost/preprocessor/list/for_each_i.hpp>\n#include <boost/preprocessor/tuple/to_list.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/list/transform.hpp>\n#include <boost/preprocessor/list/append.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/type_traits/is_pod.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/config.hpp>\n\n// should be the last #include\n#include <boost/type_traits/detail/bool_trait_def.hpp>\n\n#include <cstddef>\n\n#ifdef BOOST_MSVC\n#   pragma warning(push)\n#   pragma warning(disable: 4121) // alignment is sensitive to packing\n#endif\n\nnamespace boost {\n\n#ifndef __BORLANDC__\n\nnamespace detail {\n\nclass alignment_dummy;\ntypedef void (*function_ptr)();\ntypedef int (alignment_dummy::*member_ptr);\ntypedef int (alignment_dummy::*member_function_ptr)();\n\n#ifdef BOOST_HAS_LONG_LONG\n#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \\\n        12, ( \\\n        char, short, int, long,  ::boost::long_long_type, float, double, long double \\\n        , void*, function_ptr, member_ptr, member_function_ptr))\n#else\n#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \\\n        11, ( \\\n        char, short, int, long, float, double, long double \\\n        , void*, function_ptr, member_ptr, member_function_ptr))\n#endif\n\n#define BOOST_TT_HAS_ONE_T(D,Data,T) boost::detail::has_one_T< T >\n\n#define BOOST_TT_ALIGNMENT_STRUCT_TYPES                         \\\n        BOOST_PP_LIST_TRANSFORM(BOOST_TT_HAS_ONE_T,             \\\n                                X,                              \\\n                                BOOST_TT_ALIGNMENT_BASE_TYPES)\n\n#define BOOST_TT_ALIGNMENT_TYPES                                \\\n        BOOST_PP_LIST_APPEND(BOOST_TT_ALIGNMENT_BASE_TYPES,     \\\n                             BOOST_TT_ALIGNMENT_STRUCT_TYPES)\n\n//\n// lower_alignment_helper --\n//\n// This template gets instantiated a lot, so use partial\n// specialization when available to reduce the compiler burden.\n//\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate <bool found = true>\nstruct lower_alignment_helper_impl\n{\n    template <std::size_t, class>\n    struct apply\n    {\n        typedef char type;\n        enum { value = true };\n    };\n};\n\ntemplate <>\nstruct lower_alignment_helper_impl<false>\n{\n    template <std::size_t target, class TestType>\n    struct apply\n      : public mpl::if_c<(alignment_of<TestType>::value == target), TestType, char>\n    {\n        enum { value = (alignment_of<TestType>::value == target) };\n    };\n};\n\ntemplate <bool found, std::size_t target, class TestType>\nstruct lower_alignment_helper\n  : public lower_alignment_helper_impl<found>::template apply<target,TestType>\n{\n};\n#else\ntemplate <bool found, std::size_t target, class TestType>\nstruct lower_alignment_helper\n{\n    typedef char type;\n    enum { value = true };\n};\n\ntemplate <std::size_t target, class TestType>\nstruct lower_alignment_helper<false,target,TestType>\n{\n    enum { value = (alignment_of<TestType>::value == target) };\n    typedef typename mpl::if_c<value, TestType, char>::type type;\n};\n#endif\n\n#define BOOST_TT_CHOOSE_MIN_ALIGNMENT(R,P,I,T)                                  \\\n        typename lower_alignment_helper<                                        \\\n          BOOST_PP_CAT(found,I),target,T                                        \\\n        >::type BOOST_PP_CAT(t,I);                                              \\\n        enum {                                                                  \\\n            BOOST_PP_CAT(found,BOOST_PP_INC(I))                                 \\\n              = lower_alignment_helper<BOOST_PP_CAT(found,I),target,T >::value  \\\n        };\n\n#define BOOST_TT_CHOOSE_T(R,P,I,T) T BOOST_PP_CAT(t,I);\n\ntemplate <typename T>\nstruct has_one_T\n{\n  T data;\n};\n\ntemplate <std::size_t target>\nunion lower_alignment\n{\n    enum { found0 = false };\n\n    BOOST_PP_LIST_FOR_EACH_I(\n          BOOST_TT_CHOOSE_MIN_ALIGNMENT\n        , ignored\n        , BOOST_TT_ALIGNMENT_TYPES\n        )\n};\n\nunion max_align\n{\n    BOOST_PP_LIST_FOR_EACH_I(\n          BOOST_TT_CHOOSE_T\n        , ignored\n        , BOOST_TT_ALIGNMENT_TYPES\n        )\n};\n\n#undef BOOST_TT_ALIGNMENT_BASE_TYPES\n#undef BOOST_TT_HAS_ONE_T\n#undef BOOST_TT_ALIGNMENT_STRUCT_TYPES\n#undef BOOST_TT_ALIGNMENT_TYPES\n#undef BOOST_TT_CHOOSE_MIN_ALIGNMENT\n#undef BOOST_TT_CHOOSE_T\n\ntemplate<std::size_t TAlign, std::size_t Align>\nstruct is_aligned\n{\n    BOOST_STATIC_CONSTANT(bool,\n        value = (TAlign >= Align) & (TAlign % Align == 0)\n        );\n};\n\n#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::max_align,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<1> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<2> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<4> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<8> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<10> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<16> ,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<32> ,true)\n#endif\n\n} // namespace detail\n\n#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\ntemplate<std::size_t Align>\nstruct is_pod< ::boost::detail::lower_alignment<Align> >\n{\n        BOOST_STATIC_CONSTANT(std::size_t, value = true);\n};\n#endif\n\n// This alignment method originally due to Brian Parker, implemented by David\n// Abrahams, and then ported here by Doug Gregor.\nnamespace detail{\n\ntemplate <std::size_t Align>\nclass type_with_alignment_imp\n{\n    typedef ::boost::detail::lower_alignment<Align> t1;\n    typedef typename mpl::if_c<\n          ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value\n        , t1\n        , ::boost::detail::max_align\n        >::type align_t;\n\n    BOOST_STATIC_CONSTANT(std::size_t, found = alignment_of<align_t>::value);\n\n    BOOST_STATIC_ASSERT(found >= Align);\n    BOOST_STATIC_ASSERT(found % Align == 0);\n\n public:\n    typedef align_t type;\n};\n\n}\n\ntemplate <std::size_t Align>\nclass type_with_alignment \n  : public ::boost::detail::type_with_alignment_imp<Align>\n{\n};\n\n#if defined(__GNUC__)\nnamespace align {\nstruct __attribute__((__aligned__(2))) a2 {};\nstruct __attribute__((__aligned__(4))) a4 {};\nstruct __attribute__((__aligned__(8))) a8 {};\nstruct __attribute__((__aligned__(16))) a16 {};\nstruct __attribute__((__aligned__(32))) a32 {};\nstruct __attribute__((__aligned__(64))) a64 {};\nstruct __attribute__((__aligned__(128))) a128 {};\n}\n\ntemplate<> class type_with_alignment<1>  { public: typedef char type; };\ntemplate<> class type_with_alignment<2>  { public: typedef align::a2 type; };\ntemplate<> class type_with_alignment<4>  { public: typedef align::a4 type; };\ntemplate<> class type_with_alignment<8>  { public: typedef align::a8 type; };\ntemplate<> class type_with_alignment<16> { public: typedef align::a16 type; };\ntemplate<> class type_with_alignment<32> { public: typedef align::a32 type; };\ntemplate<> class type_with_alignment<64> { public: typedef align::a64 type; };\ntemplate<> class type_with_alignment<128> { public: typedef align::a128 type; };\n\nnamespace detail {\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)\n}\n#endif\n#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && _MSC_VER >= 1300\n//\n// MSVC supports types which have alignments greater than the normal\n// maximum: these are used for example in the types __m64 and __m128\n// to provide types with alignment requirements which match the SSE\n// registers.  Therefore we extend type_with_alignment<> to support\n// such types, however, we have to be careful to use a builtin type\n// whenever possible otherwise we break previously working code:\n// see http://article.gmane.org/gmane.comp.lib.boost.devel/173011\n// for an example and test case.  Thus types like a8 below will\n// be used *only* if the existing implementation can't provide a type\n// with suitable alignment.  This does mean however, that type_with_alignment<>\n// may return a type which cannot be passed through a function call\n// by value (and neither can any type containing such a type like\n// Boost.Optional).  However, this only happens when we have no choice \n// in the matter because no other \"ordinary\" type is available.\n//\nnamespace align {\nstruct __declspec(align(8)) a8 { \n   char m[8]; \n   typedef a8 type;\n};\nstruct __declspec(align(16)) a16 { \n   char m[16]; \n   typedef a16 type;\n};\nstruct __declspec(align(32)) a32 { \n   char m[32]; \n   typedef a32 type;\n};\nstruct __declspec(align(64)) a64 \n{ \n   char m[64]; \n   typedef a64 type;\n};\nstruct __declspec(align(128)) a128 { \n   char m[128]; \n   typedef a128 type;\n};\n}\n\ntemplate<> class type_with_alignment<8>  \n{ \n   typedef mpl::if_c<\n      ::boost::alignment_of<boost::detail::max_align>::value < 8,\n      align::a8,\n      boost::detail::type_with_alignment_imp<8> >::type t1; \npublic: \n   typedef t1::type type;\n};\ntemplate<> class type_with_alignment<16> \n{ \n   typedef mpl::if_c<\n      ::boost::alignment_of<boost::detail::max_align>::value < 16,\n      align::a16,\n      boost::detail::type_with_alignment_imp<16> >::type t1; \npublic: \n   typedef t1::type type;\n};\ntemplate<> class type_with_alignment<32> \n{ \n   typedef mpl::if_c<\n      ::boost::alignment_of<boost::detail::max_align>::value < 32,\n      align::a32,\n      boost::detail::type_with_alignment_imp<32> >::type t1; \npublic: \n   typedef t1::type type;\n};\ntemplate<> class type_with_alignment<64> {\n   typedef mpl::if_c<\n      ::boost::alignment_of<boost::detail::max_align>::value < 64,\n      align::a64,\n      boost::detail::type_with_alignment_imp<64> >::type t1; \npublic: \n   typedef t1::type type;\n};\ntemplate<> class type_with_alignment<128> {\n   typedef mpl::if_c<\n      ::boost::alignment_of<boost::detail::max_align>::value < 128,\n      align::a128,\n      boost::detail::type_with_alignment_imp<128> >::type t1; \npublic: \n   typedef t1::type type;\n};\n\nnamespace detail {\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a64,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a128,true)\n}\n#endif\n\n#else\n\n//\n// Borland specific version, we have this for two reasons:\n// 1) The version above doesn't always compile (with the new test cases for example)\n// 2) Because of Borlands #pragma option we can create types with alignments that are\n//    greater that the largest aligned builtin type.\n\nnamespace align{\n#pragma option push -a16\nstruct a2{ short s; };\nstruct a4{ int s; };\nstruct a8{ double s; };\nstruct a16{ long double s; };\n#pragma option pop\n}\n\nnamespace detail {\n\ntypedef ::boost::align::a16 max_align;\n\n//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)\nBOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)\n//#endif\n}\n\ntemplate <std::size_t N> struct type_with_alignment\n{\n   // We should never get to here, but if we do use the maximally\n   // aligned type:\n   // BOOST_STATIC_ASSERT(0);\n   typedef align::a16 type;\n};\ntemplate <> struct type_with_alignment<1>{ typedef char type; };\ntemplate <> struct type_with_alignment<2>{ typedef align::a2 type; };\ntemplate <> struct type_with_alignment<4>{ typedef align::a4 type; };\ntemplate <> struct type_with_alignment<8>{ typedef align::a8 type; };\ntemplate <> struct type_with_alignment<16>{ typedef align::a16 type; };\n\n#endif\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n#   pragma warning(pop)\n#endif\n\n#include <boost/type_traits/detail/bool_trait_undef.hpp>\n\n#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED\n\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/units/detail/utility.hpp",
    "content": "// Boost.Units - A C++ library for zero-overhead dimensional analysis and \n// unit/quantity manipulation and conversion\n//\n// Copyright (C) 2003-2008 Matthias Christian Schabel\n// Copyright (C) 2008 Steven Watanabe\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n#ifndef BOOST_UNITS_UTILITY_HPP\n#define BOOST_UNITS_UTILITY_HPP\n\n#include <cstdlib>\n#include <typeinfo>\n#include <string>\n\n#if defined(__GLIBCXX__) || defined(__GLIBCPP__)\n#define BOOST_UNITS_USE_DEMANGLING\n#include <cxxabi.h>\n#endif // __GNUC__\n\n#ifdef BOOST_UNITS_USE_DEMANGLING\n\n#include <boost/algorithm/string/replace.hpp>\n\nnamespace boost {\n\nnamespace units {\n\nnamespace detail {\n\ninline\nstd::string\ndemangle(const char* name)\n{\n    // need to demangle C++ symbols\n    char*       realname;\n    std::size_t len; \n    int         stat;\n     \n    realname = abi::__cxa_demangle(name,NULL,&len,&stat);\n    \n    if (realname != NULL)\n    {\n        std::string   out(realname);\n        \n        std::free(realname);\n        \n        boost::replace_all(out,\"boost::units::\",\"\");\n        \n        return out;\n    }\n    \n    return std::string(\"demangle :: error - unable to demangle specified symbol\");\n}\n\n} // namespace detail\n\ntemplate<class L>\nstd::string simplify_typename(const L& /*source*/)\n{\n    const std::string   demangled = detail::demangle(typeid(L).name());\n\n    return demangled;\n}\n\n} // namespace units\n\n} // namespace boost\n\n#else // BOOST_UNITS_USE_DEMANGLING\n\nnamespace boost {\n\nnamespace units {\n\nnamespace detail {\n\ninline\nstd::string\ndemangle(const char* name)\n{\n    return name;\n}\n\n} // namespace detail\n\ntemplate<class L>\nstd::string simplify_typename(const L& /*source*/)\n{\n    return std::string(typeid(L).name());\n}\n\n} // namespace units\n\n} // namespace boost\n\n// To get system-specific predefined macros:\n// gcc -arch ppc -dM -E - < /dev/null | sort \n\n#endif // BOOST_UNITS_USE_DEMANGLING\n\n#endif // BOOST_UNITS_UTILITY_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/addressof.hpp",
    "content": "// Copyright (C) 2002 Brad King (brad.king@kitware.com) \n//                    Douglas Gregor (gregod@cs.rpi.edu)\n//\n// Copyright (C) 2002, 2008 Peter Dimov\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org\n\n#ifndef BOOST_UTILITY_ADDRESSOF_HPP\n# define BOOST_UTILITY_ADDRESSOF_HPP\n\n# include <boost/config.hpp>\n# include <boost/detail/workaround.hpp>\n\nnamespace boost\n{\n\nnamespace detail\n{\n\ntemplate<class T> struct addr_impl_ref\n{\n    T & v_;\n\n    inline addr_impl_ref( T & v ): v_( v ) {}\n    inline operator T& () const { return v_; }\n\nprivate:\n    addr_impl_ref & operator=(const addr_impl_ref &);\n};\n\ntemplate<class T> struct addressof_impl\n{\n    static inline T * f( T & v, long )\n    {\n        return reinterpret_cast<T*>(\n            &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));\n    }\n\n    static inline T * f( T * v, int )\n    {\n        return v;\n    }\n};\n\n} // namespace detail\n\ntemplate<class T> T * addressof( T & v )\n{\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) )\n\n    return boost::detail::addressof_impl<T>::f( v, 0 );\n\n#else\n\n    return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );\n\n#endif\n}\n\n#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) )\n\nnamespace detail\n{\n\ntemplate<class T> struct addressof_addp\n{\n    typedef T * type;\n};\n\n} // namespace detail\n\ntemplate< class T, std::size_t N >\ntypename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] )\n{\n    return &t;\n}\n\n#endif\n\n// Borland doesn't like casting an array reference to a char reference\n// but these overloads work around the problem.\n#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))\ntemplate<typename T,std::size_t N>\nT (*addressof(T (&t)[N]))[N]\n{\n   return reinterpret_cast<T(*)[N]>(&t);\n}\n\ntemplate<typename T,std::size_t N>\nconst T (*addressof(const T (&t)[N]))[N]\n{\n   return reinterpret_cast<const T(*)[N]>(&t);\n}\n#endif\n\n} // namespace boost\n\n#endif // BOOST_UTILITY_ADDRESSOF_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/base_from_member.hpp",
    "content": "//  boost utility/base_from_member.hpp header file  --------------------------//\n\n//  Copyright 2001, 2003, 2004 Daryle Walker.  Use, modification, and\n//  distribution are subject to the Boost Software License, Version 1.0.  (See\n//  accompanying file LICENSE_1_0.txt or a copy at\n//  <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/utility/> for the library's home page.\n\n#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n\n#include <boost/preprocessor/arithmetic/inc.hpp>\n#include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/repeat_from_to.hpp>\n\n\n//  Base-from-member arity configuration macro  ------------------------------//\n\n// The following macro determines how many arguments will be in the largest\n// constructor template of base_from_member.  Constructor templates will be\n// generated from one argument to this maximum.  Code from other files can read\n// this number if they need to always match the exact maximum base_from_member\n// uses.  The maximum constructor length can be changed by overriding the\n// #defined constant.  Make sure to apply the override, if any, for all source\n// files during project compiling for consistency.\n\n// Contributed by Jonathan Turkanis\n\n#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY\n#define BOOST_BASE_FROM_MEMBER_MAX_ARITY  10\n#endif\n\n\n//  An iteration of a constructor template for base_from_member  -------------//\n\n// A macro that should expand to:\n//     template < typename T1, ..., typename Tn >\n//     base_from_member( T1 x1, ..., Tn xn )\n//         : member( x1, ..., xn )\n//         {}\n// This macro should only persist within this file.\n\n#define BOOST_PRIVATE_CTR_DEF( z, n, data )                            \\\n    template < BOOST_PP_ENUM_PARAMS(n, typename T) >                   \\\n    explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) )  \\\n        : member( BOOST_PP_ENUM_PARAMS(n, x) )                         \\\n        {}                                                             \\\n    /**/\n\n\nnamespace boost\n{\n\n//  Base-from-member class template  -----------------------------------------//\n\n// Helper to initialize a base object so a derived class can use this\n// object in the initialization of another base class.  Used by\n// Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a\n// base class needing to be initialized by a member.\n\n// Contributed by Daryle Walker\n\ntemplate < typename MemberType, int UniqueID = 0 >\nclass base_from_member\n{\nprotected:\n    MemberType  member;\n\n    base_from_member()\n        : member()\n        {}\n\n    BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),\n     BOOST_PRIVATE_CTR_DEF, _ )\n\n};  // boost::base_from_member\n\n}  // namespace boost\n\n\n// Undo any private macros\n#undef BOOST_PRIVATE_CTR_DEF\n\n\n#endif  // BOOST_UTILITY_BASE_FROM_MEMBER_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/binary.hpp",
    "content": "/*=============================================================================\n    Copyright (c) 2005 Matthew Calabrese\n\n    Use, modification and distribution is subject to the Boost Software\n    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n    http://www.boost.org/LICENSE_1_0.txt)\n==============================================================================*/\n\n#ifndef BOOST_UTILITY_BINARY_HPP\n#define BOOST_UTILITY_BINARY_HPP\n\n/*=============================================================================\n\n    Binary Literal Utility\n    ______________________\n\n\n    The following code works by converting the input bit pattern into a\n    Boost.Preprocessor sequence, then converting groupings of 3 bits each into\n    the corresponding octal digit, and finally concatenating all of the digits\n    together along with a leading zero. This yields a standard octal literal\n    with the desired value as specified in bits.\n\n==============================================================================*/\n\n#include <boost/preprocessor/control/deduce_d.hpp>\n#include <boost/preprocessor/facilities/identity.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/seq/cat.hpp>\n#include <boost/preprocessor/seq/transform.hpp>\n#include <boost/preprocessor/arithmetic/mod.hpp>\n#include <boost/preprocessor/seq/size.hpp>\n#include <boost/preprocessor/facilities/empty.hpp>\n#include <boost/preprocessor/control/while.hpp>\n\n#define BOOST_BINARY( bit_groupings )                                          \\\n  BOOST_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings ) \n\n#define BOOST_BINARY_U( bit_groupings )                                        \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, U ) \n\n#define BOOST_BINARY_L( bit_groupings )                                        \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, L ) \n\n#define BOOST_BINARY_UL( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, UL ) \n\n#define BOOST_BINARY_LU( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LU ) \n\n#define BOOST_BINARY_LL( bit_groupings )                                       \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LL ) \n\n#define BOOST_BINARY_ULL( bit_groupings )                                      \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, ULL ) \n\n#define BOOST_BINARY_LLU( bit_groupings )                                      \\\n  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LLU ) \n\n#define BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, suffix )                 \\\n  BOOST_SUFFIXED_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings, suffix ) \n\n#define BOOST_SUFFIXED_BINARY_LITERAL_D( d, bit_groupings, suffix )            \\\n  BOOST_PP_CAT( BOOST_BINARY_LITERAL_D( d, bit_groupings ), suffix ) \n\n#define BOOST_BINARY_LITERAL_D( d, bit_groupings )                             \\\n  BOOST_PP_SEQ_CAT                                                             \\\n  ( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \\\n  ) \n\n#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \\\n  BOOST_PP_SEQ_TRANSFORM                                                       \\\n  ( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION                                     \\\n  , BOOST_PP_NIL                                                               \\\n  , BOOST_PP_IDENTITY( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE )()\\\n    ( BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE                                    \\\n      (                                                                        \\\n        d                                                                      \\\n      , BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \\\n      )                                                                        \\\n    )                                                                          \\\n  ) \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE( bit_sequence )   \\\n  BOOST_PP_CAT                                                                 \\\n  ( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 bit_sequence      \\\n  , END_BIT                                                                    \\\n  ) \n\n#define BOOST_DETAIL_BITS_PER_OCTIT 3\n\n#define BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE( d, incomplete_nibble_sequence ) \\\n  BOOST_PP_CAT                                                                 \\\n  ( BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_                            \\\n  , BOOST_PP_MOD_D( d                                                          \\\n                  , BOOST_PP_SEQ_SIZE( incomplete_nibble_sequence )            \\\n                  , BOOST_DETAIL_BITS_PER_OCTIT                                \\\n                  )                                                            \\\n  )                                                                            \\\n  incomplete_nibble_sequence \n\n#define BOOST_DETAIL_FIXED_COMPL( bit )                                        \\\n  BOOST_PP_CAT( BOOST_DETAIL_FIXED_COMPL_, bit )\n\n#define BOOST_DETAIL_FIXED_COMPL_0 1 \n\n#define BOOST_DETAIL_FIXED_COMPL_1 0 \n\n#define BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \\\n  BOOST_PP_EMPTY                                                               \\\n  BOOST_PP_CAT( BOOST_PP_WHILE_, d )                                           \\\n  ( BOOST_DETAIL_BINARY_LITERAL_PREDICATE                                      \\\n  , BOOST_DETAIL_BINARY_LITERAL_OPERATION                                      \\\n  , bit_groupings ()                                                           \\\n  ) \n\n#define BOOST_DETAIL_BINARY_LITERAL_PREDICATE( d, state )                      \\\n  BOOST_DETAIL_FIXED_COMPL( BOOST_DETAIL_IS_NULLARY_ARGS( state ) ) \n\n#define BOOST_DETAIL_BINARY_LITERAL_OPERATION( d, state )                      \\\n  BOOST_DETAIL_SPLIT_AND_SWAP                                                  \\\n  ( BOOST_PP_CAT( BOOST_DETAIL_BINARY_LITERAL_ELEMENT_, state ) ) \n\n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION( s, dummy_param, tuple )        \\\n  BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL tuple \n\n#define BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL( bit2, bit1, bit0 )               \\\n  BOOST_DETAIL_TRIPLE_TO_OCTAL_ ## bit2 ## bit1 ## bit0 \n\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_1 (0)(0)\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_2 (0)\n#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_0  \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1END_BIT  \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1( bit )        \\\n  ( ( bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2 \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2( bit )        \\\n  bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3 \n\n#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3( bit )        \\\n  bit ) ) BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 \n\n#define BOOST_DETAIL_SPLIT_AND_SWAP( params )                                  \\\n  BOOST_PP_IDENTITY( BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS )()( params )\n\n#define BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS( first_param, second_param )        \\\n  second_param first_param \n\n#define BOOST_DETAIL_LEFT_OF_COMMA( params )                                   \\\n  BOOST_PP_IDENTITY( BOOST_DETAIL_FIRST_MACRO_PARAM )()( params ) \n\n#define BOOST_DETAIL_FIRST_MACRO_PARAM( first_param, second_param )            \\\n  first_param \n\n/* Begin derived concepts from Chaos by Paul Mensonides */\n\n#define BOOST_DETAIL_IS_NULLARY_ARGS( param )                                  \\\n  BOOST_DETAIL_LEFT_OF_COMMA                                                   \\\n  ( BOOST_PP_CAT( BOOST_DETAIL_IS_NULLARY_ARGS_R_                              \\\n                , BOOST_DETAIL_IS_NULLARY_ARGS_C param                         \\\n                )                                                              \\\n  ) \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_C()                                       \\\n  1 \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_R_1                                       \\\n  1, BOOST_PP_NIL \n\n#define BOOST_DETAIL_IS_NULLARY_ARGS_R_BOOST_DETAIL_IS_NULLARY_ARGS_C          \\\n  0, BOOST_PP_NIL \n\n/* End derived concepts from Chaos by Paul Mensonides */\n\n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_000 0 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_001 1 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_010 2 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_011 3 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_100 4 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_101 5 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_110 6 \n#define BOOST_DETAIL_TRIPLE_TO_OCTAL_111 7 \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0 (0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1 (1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000 (0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001 (0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010 (0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011 (0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100 (1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101 (1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110 (1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111 (1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000 (0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001 (0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010 (0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011 (0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100 (0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101 (0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110 (0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111 (0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000 (1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001 (1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010 (1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011 (1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100 (1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101 (1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110 (1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111 (1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000 (0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001 (0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010 (0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011 (0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100 (0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101 (0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110 (0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111 (0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000 (0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001 (0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010 (0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011 (0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100 (0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101 (0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110 (0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111 (0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000 (1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001 (1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010 (1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011 (1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100 (1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101 (1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110 (1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111 (1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000 (1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001 (1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010 (1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011 (1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100 (1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101 (1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110 (1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111 (1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000000 (0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000001 (0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000010 (0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000011 (0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000100 (0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000101 (0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000110 (0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000111 (0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001000 (0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001001 (0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001010 (0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001011 (0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001100 (0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001101 (0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001110 (0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001111 (0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010000 (0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010001 (0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010010 (0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010011 (0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010100 (0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010101 (0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010110 (0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010111 (0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011000 (0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011001 (0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011010 (0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011011 (0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011100 (0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011101 (0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011110 (0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011111 (0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100000 (1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100001 (1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100010 (1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100011 (1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100100 (1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100101 (1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100110 (1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100111 (1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101000 (1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101001 (1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101010 (1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101011 (1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101100 (1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101101 (1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101110 (1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101111 (1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110000 (1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110001 (1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110010 (1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110011 (1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110100 (1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110101 (1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110110 (1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110111 (1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111000 (1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111001 (1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111010 (1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111011 (1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111100 (1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111101 (1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111110 (1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111111 (1)(1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000000 (0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000001 (0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000010 (0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000011 (0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000100 (0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000101 (0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000110 (0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000111 (0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001000 (0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001001 (0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001010 (0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001011 (0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001100 (0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001101 (0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001110 (0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001111 (0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010000 (0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010001 (0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010010 (0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010011 (0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010100 (0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010101 (0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010110 (0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010111 (0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011000 (0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011001 (0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011010 (0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011011 (0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011100 (0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011101 (0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011110 (0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011111 (0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100000 (0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100001 (0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100010 (0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100011 (0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100100 (0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100101 (0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100110 (0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100111 (0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101000 (0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101001 (0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101010 (0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101011 (0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101100 (0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101101 (0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101110 (0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101111 (0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110000 (0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110001 (0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110010 (0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110011 (0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110100 (0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110101 (0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110110 (0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110111 (0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111000 (0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111001 (0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111010 (0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111011 (0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111100 (0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111101 (0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111110 (0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111111 (0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000000 (1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000001 (1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000010 (1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000011 (1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000100 (1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000101 (1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000110 (1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000111 (1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001000 (1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001001 (1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001010 (1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001011 (1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001100 (1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001101 (1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001110 (1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001111 (1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010000 (1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010001 (1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010010 (1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010011 (1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010100 (1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010101 (1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010110 (1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010111 (1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011000 (1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011001 (1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011010 (1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011011 (1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011100 (1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011101 (1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011110 (1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011111 (1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100000 (1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100001 (1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100010 (1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100011 (1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100100 (1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100101 (1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100110 (1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100111 (1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101000 (1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101001 (1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101010 (1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101011 (1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101100 (1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101101 (1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101110 (1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101111 (1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110000 (1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110001 (1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110010 (1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110011 (1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110100 (1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110101 (1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110110 (1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110111 (1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111000 (1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111001 (1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111010 (1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111011 (1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111100 (1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111101 (1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111110 (1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111111 (1)(1)(1)(1)(1)(1)(1), \n\n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000000 (0)(0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000001 (0)(0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000010 (0)(0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000011 (0)(0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000100 (0)(0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000101 (0)(0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000110 (0)(0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000111 (0)(0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001000 (0)(0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001001 (0)(0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001010 (0)(0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001011 (0)(0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001100 (0)(0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001101 (0)(0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001110 (0)(0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001111 (0)(0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010000 (0)(0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010001 (0)(0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010010 (0)(0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010011 (0)(0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010100 (0)(0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010101 (0)(0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010110 (0)(0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010111 (0)(0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011000 (0)(0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011001 (0)(0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011010 (0)(0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011011 (0)(0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011100 (0)(0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011101 (0)(0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011110 (0)(0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011111 (0)(0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100000 (0)(0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100001 (0)(0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100010 (0)(0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100011 (0)(0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100100 (0)(0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100101 (0)(0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100110 (0)(0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100111 (0)(0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101000 (0)(0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101001 (0)(0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101010 (0)(0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101011 (0)(0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101100 (0)(0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101101 (0)(0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101110 (0)(0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101111 (0)(0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110000 (0)(0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110001 (0)(0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110010 (0)(0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110011 (0)(0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110100 (0)(0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110101 (0)(0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110110 (0)(0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110111 (0)(0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111000 (0)(0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111001 (0)(0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111010 (0)(0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111011 (0)(0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111100 (0)(0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111101 (0)(0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111110 (0)(0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111111 (0)(0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000000 (0)(1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000001 (0)(1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000010 (0)(1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000011 (0)(1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000100 (0)(1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000101 (0)(1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000110 (0)(1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000111 (0)(1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001000 (0)(1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001001 (0)(1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001010 (0)(1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001011 (0)(1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001100 (0)(1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001101 (0)(1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001110 (0)(1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001111 (0)(1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010000 (0)(1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010001 (0)(1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010010 (0)(1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010011 (0)(1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010100 (0)(1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010101 (0)(1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010110 (0)(1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010111 (0)(1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011000 (0)(1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011001 (0)(1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011010 (0)(1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011011 (0)(1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011100 (0)(1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011101 (0)(1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011110 (0)(1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011111 (0)(1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100000 (0)(1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100001 (0)(1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100010 (0)(1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100011 (0)(1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100100 (0)(1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100101 (0)(1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100110 (0)(1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100111 (0)(1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101000 (0)(1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101001 (0)(1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101010 (0)(1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101011 (0)(1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101100 (0)(1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101101 (0)(1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101110 (0)(1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101111 (0)(1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110000 (0)(1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110001 (0)(1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110010 (0)(1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110011 (0)(1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110100 (0)(1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110101 (0)(1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110110 (0)(1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110111 (0)(1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111000 (0)(1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111001 (0)(1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111010 (0)(1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111011 (0)(1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111100 (0)(1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111101 (0)(1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111110 (0)(1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111111 (0)(1)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000000 (1)(0)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000001 (1)(0)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000010 (1)(0)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000011 (1)(0)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000100 (1)(0)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000101 (1)(0)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000110 (1)(0)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000111 (1)(0)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001000 (1)(0)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001001 (1)(0)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001010 (1)(0)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001011 (1)(0)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001100 (1)(0)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001101 (1)(0)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001110 (1)(0)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001111 (1)(0)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010000 (1)(0)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010001 (1)(0)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010010 (1)(0)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010011 (1)(0)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010100 (1)(0)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010101 (1)(0)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010110 (1)(0)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010111 (1)(0)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011000 (1)(0)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011001 (1)(0)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011010 (1)(0)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011011 (1)(0)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011100 (1)(0)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011101 (1)(0)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011110 (1)(0)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011111 (1)(0)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100000 (1)(0)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100001 (1)(0)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100010 (1)(0)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100011 (1)(0)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100100 (1)(0)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100101 (1)(0)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100110 (1)(0)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100111 (1)(0)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101000 (1)(0)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101001 (1)(0)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101010 (1)(0)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101011 (1)(0)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101100 (1)(0)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101101 (1)(0)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101110 (1)(0)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101111 (1)(0)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110000 (1)(0)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110001 (1)(0)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110010 (1)(0)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110011 (1)(0)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110100 (1)(0)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110101 (1)(0)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110110 (1)(0)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110111 (1)(0)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111000 (1)(0)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111001 (1)(0)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111010 (1)(0)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111011 (1)(0)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111100 (1)(0)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111101 (1)(0)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111110 (1)(0)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111111 (1)(0)(1)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000000 (1)(1)(0)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000001 (1)(1)(0)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000010 (1)(1)(0)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000011 (1)(1)(0)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000100 (1)(1)(0)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000101 (1)(1)(0)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000110 (1)(1)(0)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000111 (1)(1)(0)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001000 (1)(1)(0)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001001 (1)(1)(0)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001010 (1)(1)(0)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001011 (1)(1)(0)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001100 (1)(1)(0)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001101 (1)(1)(0)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001110 (1)(1)(0)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001111 (1)(1)(0)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010000 (1)(1)(0)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010001 (1)(1)(0)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010010 (1)(1)(0)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010011 (1)(1)(0)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010100 (1)(1)(0)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010101 (1)(1)(0)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010110 (1)(1)(0)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010111 (1)(1)(0)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011000 (1)(1)(0)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011001 (1)(1)(0)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011010 (1)(1)(0)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011011 (1)(1)(0)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011100 (1)(1)(0)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011101 (1)(1)(0)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011110 (1)(1)(0)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011111 (1)(1)(0)(1)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100000 (1)(1)(1)(0)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100001 (1)(1)(1)(0)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100010 (1)(1)(1)(0)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100011 (1)(1)(1)(0)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100100 (1)(1)(1)(0)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100101 (1)(1)(1)(0)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100110 (1)(1)(1)(0)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100111 (1)(1)(1)(0)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101000 (1)(1)(1)(0)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101001 (1)(1)(1)(0)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101010 (1)(1)(1)(0)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101011 (1)(1)(1)(0)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101100 (1)(1)(1)(0)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101101 (1)(1)(1)(0)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101110 (1)(1)(1)(0)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101111 (1)(1)(1)(0)(1)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110000 (1)(1)(1)(1)(0)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110001 (1)(1)(1)(1)(0)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110010 (1)(1)(1)(1)(0)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110011 (1)(1)(1)(1)(0)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110100 (1)(1)(1)(1)(0)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110101 (1)(1)(1)(1)(0)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110110 (1)(1)(1)(1)(0)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110111 (1)(1)(1)(1)(0)(1)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111000 (1)(1)(1)(1)(1)(0)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111001 (1)(1)(1)(1)(1)(0)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111010 (1)(1)(1)(1)(1)(0)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111011 (1)(1)(1)(1)(1)(0)(1)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0), \n#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1), \n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/compare_pointees.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP\n#define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP\n\n#include<functional>\n\nnamespace boost {\n\n// template<class OP> bool equal_pointees(OP const& x, OP const& y);\n// template<class OP> struct equal_pointees_t;\n//\n// Being OP a model of OptionalPointee (either a pointer or an optional):\n//\n// If both x and y have valid pointees, returns the result of (*x == *y)\n// If only one has a valid pointee, returns false.\n// If none have valid pointees, returns true.\n// No-throw\ntemplate<class OptionalPointee>\ninline\nbool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )\n{\n  return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;\n}\n\ntemplate<class OptionalPointee>\nstruct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>\n{\n  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const\n    { return equal_pointees(x,y) ; }\n} ;\n\n// template<class OP> bool less_pointees(OP const& x, OP const& y);\n// template<class OP> struct less_pointees_t;\n//\n// Being OP a model of OptionalPointee (either a pointer or an optional):\n//\n// If y has not a valid pointee, returns false.\n// ElseIf x has not a valid pointee, returns true.\n// ElseIf both x and y have valid pointees, returns the result of (*x < *y)\n// No-throw\ntemplate<class OptionalPointee>\ninline\nbool less_pointees ( OptionalPointee const& x, OptionalPointee const& y )\n{\n  return !y ? false : ( !x ? true : (*x) < (*y) ) ;\n}\n\ntemplate<class OptionalPointee>\nstruct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>\n{\n  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const\n    { return less_pointees(x,y) ; }\n} ;\n\n} // namespace boost\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/detail/in_place_factory_prefix.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n\n#include <new>\n#include <cstddef>\n#include <boost/config.hpp>\n#include <boost/preprocessor/cat.hpp>\n#include <boost/preprocessor/punctuation/paren.hpp>\n#include <boost/preprocessor/iteration/iterate.hpp>\n#include <boost/preprocessor/repetition/repeat.hpp>\n#include <boost/preprocessor/repetition/enum.hpp>\n#include <boost/preprocessor/repetition/enum_params.hpp>\n#include <boost/preprocessor/repetition/enum_binary_params.hpp>\n#include <boost/preprocessor/repetition/enum_trailing_params.hpp>\n\n#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT(z,n,_) BOOST_PP_CAT(m_a,n) BOOST_PP_LPAREN() BOOST_PP_CAT(a,n) BOOST_PP_RPAREN()\n#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL(z,n,_) BOOST_PP_CAT(A,n) const& BOOST_PP_CAT(m_a,n);\n\n#define BOOST_MAX_INPLACE_FACTORY_ARITY 10\n\n#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/detail/in_place_factory_suffix.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_04APR2007_HPP\n\n#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT\n#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL\n#undef BOOST_MAX_INPLACE_FACTORY_ARITY\n\n#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_04APR2007_HPP\n\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/enable_if.hpp",
    "content": "// Boost enable_if library\n\n// Copyright 2003 (c) The Trustees of Indiana University.\n\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n//    Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)\n//             Jeremiah Willcock (jewillco at osl.iu.edu)\n//             Andrew Lumsdaine (lums at osl.iu.edu)\n\n\n#ifndef BOOST_UTILITY_ENABLE_IF_HPP\n#define BOOST_UTILITY_ENABLE_IF_HPP\n\n#include \"boost/config.hpp\"\n\n// Even the definition of enable_if causes problems on some compilers,\n// so it's macroed out for all compilers that do not support SFINAE\n\n#ifndef BOOST_NO_SFINAE\n\nnamespace boost\n{\n \n  template <bool B, class T = void>\n  struct enable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct enable_if_c<false, T> {};\n\n  template <class Cond, class T = void> \n  struct enable_if : public enable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_enable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_enable_if_c<false, T> {};\n\n  template <class Cond, class T> \n  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};\n\n\n  template <bool B, class T = void>\n  struct disable_if_c {\n    typedef T type;\n  };\n\n  template <class T>\n  struct disable_if_c<true, T> {};\n\n  template <class Cond, class T = void> \n  struct disable_if : public disable_if_c<Cond::value, T> {};\n\n  template <bool B, class T>\n  struct lazy_disable_if_c {\n    typedef typename T::type type;\n  };\n\n  template <class T>\n  struct lazy_disable_if_c<true, T> {};\n\n  template <class Cond, class T> \n  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};\n\n} // namespace boost\n\n#else\n\nnamespace boost {\n\n  namespace detail { typedef void enable_if_default_T; }\n\n  template <typename T>\n  struct enable_if_does_not_work_on_this_compiler;\n\n  template <bool B, class T = detail::enable_if_default_T>\n  struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <bool B, class T = detail::enable_if_default_T> \n  struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n  template <class Cond, class T = detail::enable_if_default_T> \n  struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>\n  { };\n\n} // namespace boost\n\n#endif // BOOST_NO_SFINAE\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/identity_type.hpp",
    "content": "\n// Copyright (C) 2009-2012 Lorenzo Caminiti\n// Distributed under the Boost Software License, Version 1.0\n// (see accompanying file LICENSE_1_0.txt or a copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// Home at http://www.boost.org/libs/utility/identity_type\n\n/** @file\nWrap type expressions with round parenthesis so they can be passed to macros\neven if they contain commas.\n*/\n\n#ifndef BOOST_IDENTITY_TYPE_HPP_\n#define BOOST_IDENTITY_TYPE_HPP_\n\n#include <boost/type_traits/function_traits.hpp>\n\n/**\n@brief This macro allows to wrap the specified type expression within extra\nround parenthesis so the type can be passed as a single macro parameter even if\nit contains commas (not already wrapped within round parenthesis).\n\n@Params\n@Param{parenthesized_type,\nThe type expression to be passed as macro parameter wrapped by a single set\nof round parenthesis <c>(...)</c>.\nThis type expression can contain an arbitrary number of commas.\n}\n@EndParams\n\nThis macro works on any C++03 compiler (it does not use variadic macros).\n\nThis macro must be prefixed by <c>typename</c> when used within templates.\nNote that the compiler will not be able to automatically determine function\ntemplate parameters when they are wrapped with this macro (these parameters\nneed to be explicitly specified when calling the function template).\n\nOn some compilers (like GCC), using this macro on abstract types requires to\nadd and remove a reference to the specified type.\n*/\n#define BOOST_IDENTITY_TYPE(parenthesized_type) \\\n    /* must NOT prefix this with `::` to work with parenthesized syntax */ \\\n    boost::function_traits< void parenthesized_type >::arg1_type\n\n#endif // #include guard\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/in_place_factory.hpp",
    "content": "// Copyright (C) 2003, Fernando Luis Cacciola Carballal.\n// Copyright (C) 2007, Tobias Schwinger.\n//\n// Use, modification, and distribution is subject to the Boost Software\n// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/optional for documentation.\n//\n// You are welcome to contact the author at:\n//  fernando_cacciola@hotmail.com\n//\n#ifndef BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP\n#ifndef BOOST_PP_IS_ITERATING\n\n#include <boost/utility/detail/in_place_factory_prefix.hpp>\n\nnamespace boost {\n\nclass in_place_factory_base {} ;\n\n#define  BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)\n#define  BOOST_PP_FILENAME_1 <boost/utility/in_place_factory.hpp>\n#include BOOST_PP_ITERATE()\n\n} // namespace boost\n\n#include <boost/utility/detail/in_place_factory_suffix.hpp>\n\n#define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP\n#else\n#define N BOOST_PP_ITERATION()\n\n#if N\ntemplate< BOOST_PP_ENUM_PARAMS(N, class A) >\n#endif\nclass BOOST_PP_CAT(in_place_factory,N)\n  : \n  public in_place_factory_base\n{\npublic:\n\n  explicit BOOST_PP_CAT(in_place_factory,N)\n      ( BOOST_PP_ENUM_BINARY_PARAMS(N,A,const& a) )\n#if N > 0\n    : BOOST_PP_ENUM(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _)\n#endif\n  {}\n\n  template<class T>\n  void* apply(void* address\n      BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const\n  {\n    return new(address) T( BOOST_PP_ENUM_PARAMS(N, m_a) );\n  }\n\n  template<class T>\n  void* apply(void* address, std::size_t n\n      BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)) const\n  {\n    for(char* next = address = this->BOOST_NESTED_TEMPLATE apply<T>(address);\n        !! --n;)\n      this->BOOST_NESTED_TEMPLATE apply<T>(next = next+sizeof(T));\n    return address; \n  }\n\n  BOOST_PP_REPEAT(N, BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _)\n};\n\n#if N > 0\ntemplate< BOOST_PP_ENUM_PARAMS(N, class A) >\ninline BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >\nin_place( BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) )\n{\n  return BOOST_PP_CAT(in_place_factory,N)< BOOST_PP_ENUM_PARAMS(N, A) >\n      ( BOOST_PP_ENUM_PARAMS(N, a) );\n}\n#else\ninline in_place_factory0 in_place()\n{\n  return in_place_factory0();\n}\n#endif\n\n#undef N\n#endif\n#endif\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/swap.hpp",
    "content": "// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n// For more information, see http://www.boost.org\n\n\n#ifndef BOOST_UTILITY_SWAP_HPP\n#define BOOST_UTILITY_SWAP_HPP\n\n// Note: the implementation of this utility contains various workarounds:\n// - swap_impl is put outside the boost namespace, to avoid infinite\n// recursion (causing stack overflow) when swapping objects of a primitive\n// type.\n// - swap_impl has a using-directive, rather than a using-declaration,\n// because some compilers (including MSVC 7.1, Borland 5.9.3, and\n// Intel 8.1) don't do argument-dependent lookup when it has a\n// using-declaration instead.\n// - boost::swap has two template arguments, instead of one, to\n// avoid ambiguity when swapping objects of a Boost type that does\n// not have its own boost::swap overload.\n\n#include <algorithm> //for std::swap\n#include <cstddef> //for std::size_t\n\nnamespace boost_swap_impl\n{\n  template<class T>\n  void swap_impl(T& left, T& right)\n  {\n    using namespace std;//use std::swap if argument dependent lookup fails\n    swap(left,right);\n  }\n\n  template<class T, std::size_t N>\n  void swap_impl(T (& left)[N], T (& right)[N])\n  {\n    for (std::size_t i = 0; i < N; ++i)\n    {\n      ::boost_swap_impl::swap_impl(left[i], right[i]);\n    }\n  }\n}\n\nnamespace boost\n{\n  template<class T1, class T2>\n  void swap(T1& left, T2& right)\n  {\n    ::boost_swap_impl::swap_impl(left, right);\n  }\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility/value_init.hpp",
    "content": "// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.\n//\n// Distributed under the Boost Software License, Version 1.0. (See\n// accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n//\n// 21 Ago 2002 (Created) Fernando Cacciola\n// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker\n// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola\n// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola\n// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola\n// 03 Apr 2010 (Added initialized<T>, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker\n// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker\n//\n#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP\n#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP\n\n// Note: The implementation of boost::value_initialized had to deal with the\n// fact that various compilers haven't fully implemented value-initialization.\n// The constructor of boost::value_initialized<T> works around these compiler\n// issues, by clearing the bytes of T, before constructing the T object it\n// contains. More details on these issues are at libs/utility/value_init.htm\n\n#include <boost/aligned_storage.hpp>\n#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.\n#include <boost/detail/workaround.hpp>\n#include <boost/static_assert.hpp>\n#include <boost/type_traits/cv_traits.hpp>\n#include <boost/type_traits/alignment_of.hpp>\n#include <boost/swap.hpp>\n#include <cstring>\n#include <new>\n\n#ifdef BOOST_MSVC\n#pragma warning(push)\n#if _MSC_VER >= 1310\n// It is safe to ignore the following warning from MSVC 7.1 or higher:\n// \"warning C4351: new behavior: elements of array will be default initialized\"\n#pragma warning(disable: 4351)\n// It is safe to ignore the following MSVC warning, which may pop up when T is \n// a const type: \"warning C4512: assignment operator could not be generated\".\n#pragma warning(disable: 4512)\n#endif\n#endif\n\n#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION\n  // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED \n  // suggests that a workaround should be applied, because of compiler issues \n  // regarding value-initialization.\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED\n#endif\n\n// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND\n// switches the value-initialization workaround either on or off.\n#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND\n  #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1\n  #else\n  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0\n  #endif\n#endif\n\nnamespace boost {\n\ntemplate<class T>\nclass initialized\n{\n  private :\n    struct wrapper\n    {\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))\n      typename\n#endif \n      remove_const<T>::type data;\n\n      wrapper()\n      :\n      data()\n      {\n      }\n\n      wrapper(T const & arg)\n      :\n      data(arg)\n      {\n      }\n    };\n\n    mutable\n#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))\n      typename\n#endif \n      aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;\n\n    wrapper * wrapper_address() const\n    {\n      return static_cast<wrapper *>( static_cast<void*>(&x));\n    }\n\n  public :\n\n    initialized()\n    {\n#if BOOST_DETAIL_VALUE_INIT_WORKAROUND\n      std::memset(&x, 0, sizeof(x));\n#endif\n      new (wrapper_address()) wrapper();\n    }\n\n    initialized(initialized const & arg)\n    {\n      new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));\n    }\n\n    explicit initialized(T const & arg)\n    {\n      new (wrapper_address()) wrapper(arg);\n    }\n\n    initialized & operator=(initialized const & arg)\n    {\n      // Assignment is only allowed when T is non-const.\n      BOOST_STATIC_ASSERT( ! is_const<T>::value );\n      *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));\n      return *this;\n    }\n\n    ~initialized()\n    {\n      wrapper_address()->wrapper::~wrapper();\n    }\n\n    T const & data() const\n    {\n      return wrapper_address()->data;\n    }\n\n    T& data()\n    {\n      return wrapper_address()->data;\n    }\n\n    void swap(initialized & arg)\n    {\n      ::boost::swap( this->data(), arg.data() );\n    }\n\n    operator T const &() const\n    {\n      return wrapper_address()->data;\n    }\n\n    operator T&()\n    {\n      return wrapper_address()->data;\n    }\n\n} ;\n\ntemplate<class T>\nT const& get ( initialized<T> const& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nT& get ( initialized<T>& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nvoid swap ( initialized<T> & lhs, initialized<T> & rhs )\n{\n  lhs.swap(rhs) ;\n}\n\ntemplate<class T>\nclass value_initialized\n{\n  private :\n\n    // initialized<T> does value-initialization by default.\n    initialized<T> m_data;\n\n  public :\n    \n    value_initialized()\n    :\n    m_data()\n    { }\n    \n    T const & data() const\n    {\n      return m_data.data();\n    }\n\n    T& data()\n    {\n      return m_data.data();\n    }\n\n    void swap(value_initialized & arg)\n    {\n      m_data.swap(arg.m_data);\n    }\n\n    operator T const &() const\n    {\n      return m_data;\n    }\n\n    operator T&()\n    {\n      return m_data;\n    }\n} ;\n\n\ntemplate<class T>\nT const& get ( value_initialized<T> const& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nT& get ( value_initialized<T>& x )\n{\n  return x.data() ;\n}\n\ntemplate<class T>\nvoid swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )\n{\n  lhs.swap(rhs) ;\n}\n\n\nclass initialized_value_t\n{\n  public :\n    \n    template <class T> operator T() const\n    {\n      return initialized<T>().data();\n    }\n};\n\ninitialized_value_t const initialized_value = {} ;\n\n\n} // namespace boost\n\n#ifdef BOOST_MSVC\n#pragma warning(pop)\n#endif\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/utility.hpp",
    "content": "//  Boost utility.hpp header file  -------------------------------------------//\n\n//  Copyright 1999-2003 Aleksey Gurtovoy.  Use, modification, and distribution are\n//  subject to the Boost Software License, Version 1.0.  (See accompanying file\n//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)\n\n//  See <http://www.boost.org/libs/utility/> for the library's home page.\n\n#ifndef BOOST_UTILITY_HPP\n#define BOOST_UTILITY_HPP\n\n#include <boost/utility/addressof.hpp>\n#include <boost/utility/base_from_member.hpp>\n#include <boost/utility/binary.hpp>\n#include <boost/utility/enable_if.hpp>\n#include <boost/utility/identity_type.hpp>\n#include <boost/checked_delete.hpp>\n#include <boost/next_prior.hpp>\n#include <boost/noncopyable.hpp>\n\n#endif  // BOOST_UTILITY_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/version.hpp",
    "content": "//  Boost version.hpp configuration header file  ------------------------------//\n\n//  (C) Copyright John maddock 1999. Distributed under the Boost\n//  Software License, Version 1.0. (See accompanying file\n//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n//  See http://www.boost.org/libs/config for documentation\n\n#ifndef BOOST_VERSION_HPP\n#define BOOST_VERSION_HPP\n\n//\n//  Caution, this is the only boost header that is guarenteed\n//  to change with every boost release, including this header\n//  will cause a recompile every time a new boost version is\n//  released.\n//\n//  BOOST_VERSION % 100 is the patch level\n//  BOOST_VERSION / 100 % 1000 is the minor version\n//  BOOST_VERSION / 100000 is the major version\n\n#define BOOST_VERSION 105200\n\n//\n//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION\n//  but as a *string* in the form \"x_y[_z]\" where x is the major version\n//  number, y is the minor version number, and z is the patch level if not 0.\n//  This is used by <config/auto_link.hpp> to select which library version to link to.\n\n#define BOOST_LIB_VERSION \"1_52\"\n\n#endif\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/boost/boost/visit_each.hpp",
    "content": "// Boost.Signals library\n\n// Copyright Douglas Gregor 2001-2003. Use, modification and\n// distribution is subject to the Boost Software License, Version\n// 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n// http://www.boost.org/LICENSE_1_0.txt)\n\n// For more information, see http://www.boost.org/libs/signals\n\n#ifndef BOOST_VISIT_EACH_HPP\n#define BOOST_VISIT_EACH_HPP\n\n#include <boost/config.hpp>\n\nnamespace boost {\n  template<typename Visitor, typename T>\n  inline void visit_each(Visitor& visitor, const T& t, long)\n  {\n    visitor(t);\n  }\n\n  template<typename Visitor, typename T>\n  inline void visit_each(Visitor& visitor, const T& t)\n  {\n    visit_each(visitor, t, 0);\n  }\n}\n\n#endif // BOOST_VISIT_EACH_HPP\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/jni/main.cpp",
    "content": "#include <ostream>\n#include <sstream>\n#include <string>\n\n#define BOOST_TEST_NO_MAIN\n#define BOOST_TEST_ALTERNATIVE_INIT_API\n#include <boost/test/included/unit_test.hpp>\n\nstatic bool my_init_function()\n{\n    return true;\n}\n\nvoid X()\n{\n     char *apArgVals[] =\n        {\n                \"AndroidSDKTest\",\n                 \"--log_level=warning\",\n                 \"--show_progress=yes\",\n                0\n        };\n    int nArgc = 3;\n    ::boost::unit_test::unit_test_main(::my_init_function, nArgc, apArgVals);\n}\n\nint main(int argc, char *argv[])\n{\n#ifdef CALL_X\n    X();\n#else\n    ::boost::unit_test::unit_test_main(::my_init_function, argc, argv);\n#endif\n    return 0;\n}\n\n"
  },
  {
    "path": "tests/device/issue42891-boost-1_52/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    return 'all', 'http://b/27433401'\n"
  },
  {
    "path": "tests/device/issue46718-iostream-crash-gnustl/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue46718-iostream-crash-gnustl\nLOCAL_SRC_FILES := issue46718-iostream-crash.cpp\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/issue46718-iostream-crash-gnustl/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/issue46718-iostream-crash-gnustl/jni/issue46718-iostream-crash.cpp",
    "content": "#include <cerrno>\n#include <cstddef>\n#include <cstdio>\n#include <sstream>\n\nint main(void)\n{\n    const char* inputTest = \"0\";\n\n    double f = 6;\n    std::istringstream ss(inputTest);\n    printf (\"Doing the read\\n\");\n    ss >> f; //Crash in 4.7, fine in 4.6\n    printf (\"Here it is %f\\n\", f);\n}\n"
  },
  {
    "path": "tests/device/issue61659-neon-assignment/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue61659-neon-assignment\nLOCAL_SRC_FILES := issue61659-neon-assignment.c.neon\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue61659-neon-assignment/jni/Application.mk",
    "content": "APP_ABI := armeabi-v7a armeabi-v7a-hard\n"
  },
  {
    "path": "tests/device/issue61659-neon-assignment/jni/issue61659-neon-assignment.c",
    "content": "#include <stdio.h>\n#include <arm_neon.h>\n\nint fail_count = 0;\n\nvoid dump_and_check(unsigned long long v, unsigned long long expected)\n{\n   printf(\"%016llx\\n\", v);\n   fail_count += (v != expected);\n}\n\nstatic const uint8x8_t v00FF8 = { 0,0,0,0, 0xff,0xff,0xff,0xff }; // wrong\nstatic const uint8x8_t vFF008 = { 0xff,0xff,0xff,0xff, 0,0,0,0 };\n\nvoid test1()\n{\n    uint8x8_t v = v00FF8;\n    dump_and_check(*(unsigned long long *)&v, 0xffffffff00000000ULL);\n}\n\nvoid test2()\n{\n    static const uint64_t local_Mask2 = { 0xffffffff00000000ULL };\n    uint8x8_t v00FF8 = vcreate_u8(local_Mask2); //{ 0,0,0,0,0xff,0xff,0xff,0xff };\n    dump_and_check(*(unsigned long long *)&v00FF8, 0xffffffff00000000ULL);\n}\n\nvoid test3()\n{\n    static const uint32_t vFF_ = { 0xFFFFFFFF };\n    static const uint32_t v00_ = { 0x00000000 };\n    static uint32x2_t v00FF_;\n    v00FF_ = vset_lane_u32( vFF_, v00FF_, 1);\n    v00FF_ = vset_lane_u32( v00_, v00FF_, 0);\n    uint8x8_t v00FF8 = (uint8x8_t)v00FF_;\n    dump_and_check(*(unsigned long long *)&v00FF8, 0xffffffff00000000ULL);\n}\n\nvoid test4()\n{\n    uint8x8_t mask_high = vcreate_u8(0xFFFFFFFF00000000ULL);\n    uint8x8_t mask_low = vcreate_u8(0x00000000FFFFFFFFULL);\n    uint8x8_t va = vdup_n_u8 ('a');\n    uint8x8_t vb = vdup_n_u8 ('b');\n    uint8x8_t in = vorr_u8(vand_u8 (va, mask_low), vand_u8 (vb, mask_high));\n    dump_and_check(*(unsigned long long *)&in, 0x6262626261616161ULL);\n}\n\n\nint main()\n{\n    test1();\n    test2();\n    test3();\n    test4();\n    printf(\"fail_count = %d\\n\", fail_count);\n    return (fail_count == 0)? 0 : 1;\n}\n"
  },
  {
    "path": "tests/device/issue61659-neon-assignment/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi not in ('armeabi-v7a', 'armeabi-v7a-hard'):\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/issue62910-gcc4.8.2-libstdc++-nth-element-segfault/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := issue62910-gcc4.8.2-libstdc++-nth-element-segfault\nLOCAL_SRC_FILES := issue62910-gcc4.8.2-libstdc++-nth-element-segfault.cpp\nLOCAL_CPPFLAGS += -std=gnu++11\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/issue62910-gcc4.8.2-libstdc++-nth-element-segfault/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static"
  },
  {
    "path": "tests/device/issue62910-gcc4.8.2-libstdc++-nth-element-segfault/jni/issue62910-gcc4.8.2-libstdc++-nth-element-segfault.cpp",
    "content": "#include <algorithm>\n#include <stdint.h>\n#include <iostream>\n#include <vector>\n\ndouble to_double(uint64_t x)\n{\n        union {double d; uint64_t x;} u;\n        u.x = x;\n        return u.d;\n}\n\nint main()\n{\n        std::vector<double> v = {\n                to_double(4606672070890243784),\n                to_double(4606672025854247510),\n                to_double(4606671800674266141),\n                to_double(4606671575494284772),\n                to_double(4606672115926240057),\n                to_double(4606672160962236330),\n                to_double(4606672070890243784),\n        };\n\n        for (auto i : v)\n                std::cout << i << std::endl;\n\n        std::nth_element(v.begin(), v.begin() + 3, v.end());\n        return 0;\n}\n"
  },
  {
    "path": "tests/device/libcxx-relocs/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := libfoo\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_LDLIBS := -latomic\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := bar\nLOCAL_SRC_FILES := bar.cpp\nLOCAL_SHARED_LIBRARIES := libfoo\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/libcxx-relocs/jni/Application.mk",
    "content": "APP_STL := c++_static\n"
  },
  {
    "path": "tests/device/libcxx-relocs/jni/bar.cpp",
    "content": "/*\n * Copyright (C) 2016 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nextern void foo();\n\nint main(int, char**) {\n    foo();\n}\n"
  },
  {
    "path": "tests/device/libcxx-relocs/jni/foo.cpp",
    "content": "/*\n * Copyright (C) 2016 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n#include <iostream>\n#include <string>\n\nvoid foo() {\n    std::string message = \"Hello, world!\";\n    std::cout << message << std::endl;\n}\n"
  },
  {
    "path": "tests/device/libcxx-relocs/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/device/libcxx-unwind/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := foo.cpp\nLOCAL_CPPFLAGS := -std=c++11 -fexceptions -frtti -UNDEBUG -O0\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/libcxx-unwind/jni/Application.mk",
    "content": "APP_STL := c++_shared\nAPP_ABI := armeabi-v7a\nAPP_PLATFORM := android-21\nNDK_TOOLCHAIN_VERSION := clang\n"
  },
  {
    "path": "tests/device/libcxx-unwind/jni/foo.cpp",
    "content": "//===----------------------------------------------------------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <cassert>\n#include <map>\n\nint main() {\n  typedef std::pair<const int, double> V;\n  V ar[] = {\n      V(1, 1.5), V(2, 2.5), V(3, 3.5), V(4, 4.5),\n      V(5, 5.5), V(7, 7.5), V(8, 8.5),\n  };\n  std::map<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));\n  m.at(1) = -1.5;\n  try {\n    m.at(6);\n    assert(0);\n  } catch (std::out_of_range &) {\n  }\n}\n"
  },
  {
    "path": "tests/device/libcxx-unwind/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if abi.startswith('armeabi') and device_platform <= 10:\n        return '{} {}'.format(abi, device_platform), 'http://b/28044141'\n    return None, None\n"
  },
  {
    "path": "tests/device/math/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := math_c\nLOCAL_SRC_FILES := math.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := math_cpp\nLOCAL_SRC_FILES := math.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/math/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/math/jni/math.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <android/api-level.h>\n#include <features.h>\n#include <math.h>\n#include <stdio.h>\n\nlong double ld, ld1, ldn;\ndouble d, d1, dn;\nfloat f, f1, fn;\nint fail_count = 0;\n\nvoid TEST_EQ(long double a, long double b)\n{\n    long double diff = a - b;\n    if (diff < 0)\n       diff = -diff;\n    if (diff > 0.0000001)\n       fail_count ++;\n}\n\nint main()\n{\n#if __ANDROID_API__ >= 9\n    sincosl(0.73, &ld, &ld1);\n    sincos(0.72, &d, &d1);\n    sincosf(0.71f, &f, &f1);\n    TEST_EQ(ld, 0.6668696L);\n    TEST_EQ(ld1, 0.7451744L);\n    TEST_EQ(d, 0.6593847);\n    TEST_EQ(d1, 0.7518057);\n    TEST_EQ(f, 0.6518338f);\n    TEST_EQ(f1, 0.7583619f);\n    ldn = nanl(\"\");\n    dn = nan(\"\");\n    fn = nanf(\"\");\n    ld = 1234L;\n    ld = logbl(ld);\n    TEST_EQ(ld, 10L);\n    ld = log2l(ld);\n    TEST_EQ(ld, 3.321928L);\n    d  = 56.78;\n    d = log2(d);\n    TEST_EQ(d, 5.827311);\n    f  = 0.9012f;\n    f = log2f(f);\n    TEST_EQ(f, -.1500808f);\n    ld = nexttowardl(ld, 0);\n    d = nexttoward(d, 0);\n#endif\n    if (fail_count)\n        printf(\"fail_count = %d\\n\", fail_count);\n\n    return fail_count;\n}\n"
  },
  {
    "path": "tests/device/math/jni/math.cpp",
    "content": "#include \"math.c\"\n"
  },
  {
    "path": "tests/device/math/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if device_platform < 18:\n        return device_platform\n    return None\n"
  },
  {
    "path": "tests/device/multi-static-instances/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_multi_static_instances\nLOCAL_SRC_FILES := main.cpp\nLOCAL_STATIC_LIBRARIES := libstdc++\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_multi_static_instances_gnustl\nLOCAL_SRC_FILES := main.cpp\nLOCAL_STATIC_LIBRARIES := gnustl_static\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,cxx-stl/gnu-libstdc++)\n$(call import-module,cxx-stl/system)\n"
  },
  {
    "path": "tests/device/multi-static-instances/jni/Application.mk",
    "content": "APP_ABI := all\n\n# This is a trick to allow use to build three executables\n# that are linked to different STL runtimes.\nAPP_STL := none\n"
  },
  {
    "path": "tests/device/multi-static-instances/jni/main.cpp",
    "content": "/* This file is here to check for the following bug report:\n *   http://code.google.com/p/android/issues/detail?id=16010\n */\n#include <stdio.h>\n\nclass A {\npublic:\n  static A* instance() {\n    static A _instance;\n    return &_instance;\n  }\n};\n\nint main() {\n    A* first = A::instance();\n    A* second = A::instance();\n\n    if (first != second) {\n        fprintf(stderr, \"ERROR: instance() returned two distinct addresses: %p %p\\n\", first, second);\n        return 1;\n    }\n    printf(\"OK: instance() returned the same address twice: %p\\n\", first);\n   return 0;\n}\n"
  },
  {
    "path": "tests/device/stat/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := stat\nLOCAL_SRC_FILES := stat.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/stat/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/stat/jni/stat.c",
    "content": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <stdio.h>\n\nint main()\n{\n    int i;\n    struct stat sb;\n    char *paths[] = {\n        \"/system\", \"/dev/null\", \"doesn't exit\", \"stat\"\n    };\n\n    for(i=0; i<sizeof(paths)/sizeof(paths[0]); i++)\n    {\n        if (stat(paths[i], &sb) != 0)\n            printf(\"Can't stat path %s\\n\", paths[i]);\n        else\n        {\n            printf(\"%14s %6lld: %s%s%s %s %s %s %s\\n\", paths[i], sb.st_size,\n                   ((sb.st_mode & S_IRUSR)? \"r\" : \" \"),\n                   ((sb.st_mode & S_IWUSR)? \"w\" : \" \"),\n                   ((sb.st_mode & S_IXUSR)? \"x\" : \" \"),\n                   (((sb.st_mode & S_IFMT) == S_IFREG)? \"REG\" : \"   \"),\n                   (((sb.st_mode & S_IFMT) == S_IFDIR)? \"DIR\" : \"   \"),\n                   (((sb.st_mode & S_IFMT) == S_IFLNK)? \"LNK\" : \"   \"),\n                   (((sb.st_mode & S_IFMT) == S_IFCHR)? \"CHR\" : \"   \"));\n        }\n    }\n   return 0;\n}\n"
  },
  {
    "path": "tests/device/static-executable/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := static-executable\nLOCAL_SRC_FILES := main.cxx\nLOCAL_CFLAGS += -fexceptions\n\n# Note that by default ndk-build system doesn't support static executable,\n# but option \"-static\" can instruct gcc to link with proper crt*o files to\n# generate static executable.\nLOCAL_LDFLAGS += -static\n\n# Be aware that -Wl,--eh-frame-hdr is also needed for \"-static\" (at least for\n# x86 and mips which use eh frames) since crt files are now in C, and the trick\n# in the previous *S file to iterate all eh frames and record ranges is gone\nLOCAL_LDFLAGS += -Wl,--eh-frame-hdr\n\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/static-executable/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := system\n"
  },
  {
    "path": "tests/device/static-executable/jni/main.cxx",
    "content": "#include <stdio.h>\nint main()\n{\n    printf (\"Hello 1\\n\");\n    try {\n        throw 20;\n    } catch(...) {\n        printf (\"catch\\n\");\n    }\n    printf (\"Hello 2\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/static-executable/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    lp64_abis = ('arm64-v8a', 'mips64', 'x86_64')\n    if platform is not None:\n        platform_version = int(platform.split('-')[1])\n        if platform_version >= 21:\n            return platform, 'http://b/24468267'\n    elif abi in lp64_abis:\n        # If platform isn't provided we're going to use the default platform\n        # level. For 32-bit ABIs the default is old enough that we'll pass, but\n        # 64-bit ABIs will fail.\n        return 'android-21', 'http://b/24468267'\n    return None, None\n"
  },
  {
    "path": "tests/device/test-basic-exceptions/README",
    "content": "This test is meant to test the most basic level of exception support\neven if you are not using a regular C++ STL. No <stdexcept> required.\n\nNormally, the only thing needed is adding -fexceptions to your LOCAL_CFLAGS\nand that's it. Alternatively, use it in APP_CFLAGS to add the flag to all your\nmodules at the same time.\n\nThis is really a way to check that the C++ compiler properly links against\nlibsupc++.a without any kind of conflict, and that the try / throw / catch\nfeatures do really work.\n\n"
  },
  {
    "path": "tests/device/test-basic-exceptions/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_basic_exceptions\nLOCAL_SRC_FILES := test_basic_exceptions.cpp\nLOCAL_CPPFLAGS := -fexceptions\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-basic-exceptions/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/test-basic-exceptions/jni/test_basic_exceptions.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <cstdio>\n#include <new>\n\nint main()\n{\n    char *buf;\n    try\n    {\n        buf = new char[512];\n        throw \"Memory allocation failure!\";\n\n        std::fprintf(stderr,\"KO: Exception *not* raised!\\n\");\n        return 1;\n    }\n    catch( char const* str )\n    {\n        std::printf(\"OK: Exception raised: %s\\n\", str);\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-basic-rtti/README",
    "content": "This test is meant to test the most basic level of RTTI support\neven if you are not using a regular C++ STL. No <typeinfo> required.\n\nThis is really a way to check that the C++ compiler properly links against\nlibsupc++.a without any kind of conflict, and that the dynamic_cast<>\nreally works.\n\n"
  },
  {
    "path": "tests/device/test-basic-rtti/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_basic_rtti\nLOCAL_SRC_FILES := test_basic_rtti.cpp\nLOCAL_CPPFLAGS := -frtti\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-basic-rtti/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/test-basic-rtti/jni/test_basic_rtti.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <cstdio>\n\nclass Foo\n{\npublic:\n  virtual ~Foo() { }\n  virtual void print()\n  {\n    std::printf(\"in Foo!\\n\");\n  }\n};\n\nclass Bar: public Foo\n{\n  public:\n  void print()\n  {\n    std::printf(\"in Bar!\\n\");\n  }\n};\n\nint main()\n{\n    Foo* foo = new Bar();\n    Bar* bar;\n\n    bar = dynamic_cast<Bar*>(foo);\n    if (bar != NULL) {\n        printf(\"OK: 'foo' is pointing to a Bar class instance.\\n\");\n    } else {\n        fprintf(stderr, \"KO: Could not dynamically cast 'foo' to a 'Bar*'\\n\");\n        return 1;\n    }\n\n    delete foo;\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-compiler-bug-1/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_compiler_bug1\nLOCAL_SRC_FILES := main.c\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-compiler-bug-1/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/test-compiler-bug-1/jni/main.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* This program tests for a compiler bug that was found in the\n * arm-linux-androideabi-4.4.3 toolchain and fixed by the change at\n * https://review.source.android.com/#change,19474\n *\n * The bug generated an invalid sequence of thumb machine instructions\n * when signed chars were being used.\n */\n#include <stdio.h>\n\nint test(signed char anim_col)\n{\n    if (anim_col >= 31) {\n        return 1;\n    } else if (anim_col <= -15) {\n        return -2;\n    }\n    return 0;\n}\n\nint main(void)\n{\n    const int testval = -7;\n    const int expected = 0;\n    int ret = test(testval);\n\n    if (ret != expected) {\n        fprintf(stderr, \"ERROR: test(%d) returned %d instead of %d\\n\",\n                        testval, ret, expected);\n        return 1;\n    }\n    printf(\"OK: test(%d) returned %d\\n\", testval, expected);\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_cpufeatures\nLOCAL_SRC_FILES := test_cpufeatures.c\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_android_setCpu_1\nLOCAL_SRC_FILES := test_android_setCpu_1.c\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_android_setCpu_2\nLOCAL_SRC_FILES := test_android_setCpu_2.c\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\n\nifeq ($(TARGET_ARCH),arm)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_android_setCpuArm_1\nLOCAL_SRC_FILES := test_android_setCpuArm_1.c\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\nendif\n\n# Disable the following tests for GCC4.6/binutils-2.21 as well because\n# platform libs are now built with the new default GCC4.8/binutils-2.24, and crt*.o\n# generated by it can't be used by GCC4.6/binutils-2.21 due to inconsistency in\n# usage of Tag involves DIV\n#\nifeq ($(TARGET_ARCH),arm)\nifeq ($(TARGET_ARCH_ABI),armeabi-v7a)\nifneq ($(NDK_TOOLCHAIN_VERSION),4.6)\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_arm_idiv_support\nLOCAL_SRC_FILES := test_arm_idiv.c\nLOCAL_CFLAGS := -mcpu=cortex-a15\n# filter-out -march=armv7-a which isn't compatible with -mcpu=cortex-a15\nTARGET_CFLAGS := $(filter-out -march=armv7-a, $(TARGET_CFLAGS))\nLOCAL_ARM_MODE := arm\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_thumb_idiv_support\nLOCAL_SRC_FILES := test_arm_idiv.c\nLOCAL_CFLAGS := -mcpu=cortex-a15\n# filter-out -march=armv7-a which isn't compatible with -mcpu=cortex-a15\nTARGET_CFLAGS := $(filter-out -march=armv7-a, $(TARGET_CFLAGS))\nLOCAL_ARM_MODE := thumb\nLOCAL_STATIC_LIBRARIES := cpufeatures\ninclude $(BUILD_EXECUTABLE)\nendif\nendif\nendif\n\n$(call import-module,android/cpufeatures)\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/test_android_setCpuArm_1.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cpu-features.h\"\n\n#ifndef __arm__\n#error \"This source file should only be compiled on ARM!\"\n#endif\n\nstatic void panic(const char* msg) {\n  fprintf(stderr, \"ERROR: %s\\n\", msg);\n  exit(1);\n}\n\nint main(void) {\n  int count, cpu_count = 10;\n  uint64_t features, cpu_features = 0xaabdedf012934839ULL;\n  uint32_t id, cpu_id = 0x436723ee;\n\n  // Check that android_setCpuArm() can be called at program startup\n  // and that android_getCpuCount() and android_getCpuFeatures()\n  // will return the corresponding values.\n  //\n  printf(\"Setting cpu_count=%d, features=%08llx cpu_id=%08x\\n\",\n         cpu_count, cpu_features, cpu_id);\n\n  if (!android_setCpuArm(cpu_count, cpu_features, cpu_id))\n    panic(\"Cannot call android_setCpu() at program startup!\");\n\n  count = android_getCpuCount();\n  features = android_getCpuFeatures();\n  id = android_getCpuIdArm();\n\n  printf(\"Retrieved cpu_count=%d, features=%08llx cpu_id=%08x\\n\",\n         count, features, id);\n\n  if (count != cpu_count)\n    panic(\"android_getCpuCount() didn't return expected value!\");\n\n  if (features != cpu_features)\n    panic(\"android_getCpuFeatures() didn't return expected value!\");\n\n  if (id != cpu_id)\n    panic(\"android_getCpuIdArm() didn't return expected value!\");\n\n  // Once one of the android_getXXX functions has been called,\n  // android_setCpu() should always fail.\n  if (android_setCpuArm(cpu_count, cpu_features, cpu_id))\n    panic(\"android_setCpuArm() could be called twice!\");\n\n  printf(\"Second call to android_setCpu() failed as expected.\\n\");\n\n  if (android_setCpu(cpu_count, cpu_features))\n    panic(\"android_setCpu() could be called after android_setCpuArm()!\");\n\n  printf(\"Call to android_setCpu() failed as expected.\\n\");\n\n  return 0;\n}\n\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/test_android_setCpu_1.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cpu-features.h\"\n\nstatic void panic(const char* msg) {\n  fprintf(stderr, \"ERROR: %s\\n\", msg);\n  exit(1);\n}\n\nint main(void) {\n  int count, cpu_count = 10;\n  uint64_t features, cpu_features = 0xaabdedf012934839ULL;\n\n  // Check that android_setCpu() can be called at program startup\n  // and that android_getCpuCount() and android_getCpuFeatures()\n  // will return the corresponding values.\n  //\n  printf(\"Setting cpu_count=%d, features=%08llx\\n\",\n         cpu_count,\n         cpu_features);\n  if (!android_setCpu(cpu_count, cpu_features))\n    panic(\"Cannot call android_setCpu() at program startup!\");\n\n  count = android_getCpuCount();\n  features = android_getCpuFeatures();\n\n  printf(\"Retrieved cpu_count=%d, features=%08llx\\n\",\n         count, features);\n\n  if (count != cpu_count)\n    panic(\"android_getCpuCount() didn't return expected value!\");\n\n  if (features != cpu_features)\n    panic(\"android_getCpuFeatures() didn't return expected value!\");\n\n  // Once one of the android_getXXX functions has been called,\n  // android_setCpu() should always fail.\n  if (android_setCpu(cpu_count, cpu_features))\n    panic(\"android_setCpu() could be called twice!\");\n\n  printf(\"Second call to android_setCpu() failed as expected.\\n\");\n  return 0;\n}\n\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/test_android_setCpu_2.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cpu-features.h\"\n\nstatic void panic(const char* msg) {\n  fprintf(stderr, \"ERROR: %s\\n\", msg);\n  exit(1);\n}\n\nint main(void) {\n  int count, cpu_count = 10;\n  uint64_t features, cpu_features = 0xaabdedf012934839ULL;\n\n  count = android_getCpuCount();\n  features = android_getCpuFeatures();\n\n  printf(\"Retrieved cpu_count=%d, features=%08llx\\n\",\n         count, features);\n\n  // Check that android_setCpu() will fail when it is called after\n  // android_getCpuCount / android_getCpuFeatures.\n  //\n  printf(\"Trying to set cpu_count=%d, features=%08llx\\n\",\n         cpu_count,\n         cpu_features);\n\n  if (android_setCpu(cpu_count, cpu_features))\n    panic(\"android_setCpu() call should have failed!\");\n\n  printf(\"android_setCpu() call fail as expected.\\n\");\n  return 0;\n}\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/test_arm_idiv.c",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <cpu-features.h>\n#include <setjmp.h>\n#include <stdio.h>\n#include <signal.h>\n\n#ifndef __arm__\n#error \"Only compile this file for an ARM target\"\n#endif\n\nstatic int volatile g_signal_raised;\nstatic sigjmp_buf g_jumper;\n\nstatic void my_signal_handler(int signum) {\n    g_signal_raised = 1;\n    siglongjmp(g_jumper, 1);\n}\n\nstatic int32_t do_idiv(int32_t a, int32_t b) {\n  __asm__ __volatile__(\n      \"sdiv %0, %0, %1\\n\\t\"\n      : \"=&r\"(a)\n      : \"r\"(b)\n      : \"cc\");\n  return a;\n}\n\n// Check that the ARM idiv instruction is supported.\n// Returns 1 on success, 0 otherwise.\nstatic int check_idiv(void) {\n    // Setup SIGILL signal handler.\n    struct sigaction old_handler, new_handler;\n    memset(&new_handler, 0, sizeof(new_handler));\n    new_handler.sa_handler = my_signal_handler;\n    sigaction(SIGILL, &new_handler, &old_handler);\n\n    // Do the division.\n    g_signal_raised = 0;\n    if (sigsetjmp(g_jumper, 0) == 0)\n        do_idiv(12345, 17);\n\n    // Restore SIGILL handler.\n    sigaction(SIGILL, &old_handler, NULL);\n\n    return g_signal_raised == 0;\n}\n\nint main(void)\n{\n    if (android_getRuntimeCpuFamily() != ANDROID_CPU_FAMILY_ARM) {\n        printf(\"This is emulated ARM device, skip this test\\n\");\n        return 0;\n    }\n\n    uint32_t cpu_id = android_getCpuIdArm();\n    printf(\"cpu-features reports the following CPUID: 0x%08x\\n\",\n           cpu_id);\n\n    uint64_t features = android_getCpuFeatures();\n#ifdef __thumb2__\n    const uint64_t idiv_flag = ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2;\n    const char* variant = \"thumb\";\n#else\n    const uint64_t idiv_flag = ANDROID_CPU_ARM_FEATURE_IDIV_ARM;\n    const char* variant = \"arm\";\n#endif\n\n    printf(\"status of %s idiv instruction:\\n\", variant);\n    int idiv_reported = (features & idiv_flag) != 0;\n    printf(\"  reported      : %s\\n\",\n           idiv_reported ? \"supported\" : \"unsupported\");\n\n    int idiv_checked = check_idiv();\n    printf(\"  runtime check : %s\\n\",\n           idiv_checked ? \"supported\" : \"unsupported\");\n\n    return (idiv_reported != idiv_checked);\n}\n"
  },
  {
    "path": "tests/device/test-cpufeatures/jni/test_cpufeatures.c",
    "content": "/*\n * Copyright (C) 2010, 2016 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#define __STDC_FORMAT_MACROS 1\n\n#include <cpu-features.h>\n#include <inttypes.h>\n#include <stdio.h>\n\nint main(void)\n{\n    AndroidCpuFamily family = android_getCpuFamily();\n    switch (family) {\n    case ANDROID_CPU_FAMILY_ARM:\n        printf(\"CPU family is ARM\\n\");\n        break;\n    case ANDROID_CPU_FAMILY_X86:\n        printf(\"CPU family is x86\\n\");\n        break;\n    case ANDROID_CPU_FAMILY_MIPS:\n        printf(\"CPU family is MIPS\\n\");\n        break;\n    case ANDROID_CPU_FAMILY_ARM64:\n        printf(\"CPU family is ARM64\\n\");\n        break;\n    case ANDROID_CPU_FAMILY_X86_64:\n        printf(\"CPU family is x86_64\\n\");\n        break;\n    case ANDROID_CPU_FAMILY_MIPS64:\n        printf(\"CPU family is MIPS64\\n\");\n        break;\n    default:\n        fprintf(stderr, \"Unsupported CPU family: %d\\n\", family);\n        return 1;\n    }\n\n#define CHECK(arch, name) \\\n    if ((features & ANDROID_CPU_## arch ##_FEATURE_## name) != 0) { \\\n        printf( \"  \"#name\"\\n\" ); \\\n    }\n\n    uint64_t features = android_getCpuFeatures();\n    int result = 0;\n    switch(family) {\n    case ANDROID_CPU_FAMILY_ARM:\n        printf( \"Supported ARM features:\\n\");\n        CHECK(ARM, ARMv7)\n        CHECK(ARM, VFPv3)\n        CHECK(ARM, NEON)\n        CHECK(ARM, LDREX_STREX)\n        CHECK(ARM, VFPv2)\n        CHECK(ARM, VFP_D32)\n        CHECK(ARM, VFP_FP16)\n        CHECK(ARM, VFP_FMA)\n        CHECK(ARM, NEON_FMA)\n        CHECK(ARM, IDIV_ARM)\n        CHECK(ARM, IDIV_THUMB2)\n        CHECK(ARM, iWMMXt)\n        CHECK(ARM, AES)\n        CHECK(ARM, PMULL)\n        CHECK(ARM, SHA1)\n        CHECK(ARM, SHA2)\n        CHECK(ARM, CRC32)\n        break;\n    case ANDROID_CPU_FAMILY_ARM64:\n        CHECK(ARM64, FP)\n        CHECK(ARM64, ASIMD)\n        CHECK(ARM64, AES)\n        CHECK(ARM64, PMULL)\n        CHECK(ARM64, SHA1)\n        CHECK(ARM64, SHA2)\n        CHECK(ARM64, CRC32)\n        break;\n    case ANDROID_CPU_FAMILY_X86:\n    case ANDROID_CPU_FAMILY_X86_64:\n        printf( \"Supported x86 features:\\n\");\n        CHECK(X86, SSSE3)\n        CHECK(X86, POPCNT)\n        CHECK(X86, MOVBE)\n        CHECK(X86, SSE4_1)\n        CHECK(X86, SSE4_2)\n        break;\n    case ANDROID_CPU_FAMILY_MIPS:\n    case ANDROID_CPU_FAMILY_MIPS64:\n        printf( \"Supported MIPS features:\\n\");\n        CHECK(MIPS, R6)\n        CHECK(MIPS, MSA)\n        break;\n    default:\n        if (features != 0) {\n            printf(\"ERROR: Unexpected CPU features mask: %016\" PRIX64 \"\\n\",\n                   features);\n            result = 1;\n        }\n    }\n\n#ifdef __arm__\n    uint32_t cpu_id = android_getCpuIdArm();\n    printf( \"ARM CpuID: %08x\\n\", cpu_id);\n    printf( \"   implementer: %02x\\n\", (cpu_id >> 24) & 0xff);\n    printf( \"   variant    : %02x\\n\", (cpu_id >> 20) & 0x0f);\n    printf( \"   part       : %03x\\n\", (cpu_id >> 4) & 0xfff);\n    printf( \"   revision   : %x\\n\",    cpu_id & 0x0f);\n#endif\n\n/* zuav todo: check if we need the code below or it can be removed as done by Google */\n/*\n    if (family == ANDROID_CPU_FAMILY_X86) {\n        uint64_t features = android_getCpuFeatures();\n        printf( \"Supported x86 features:\\n\");\n#define CHECK(name) \\\n        if ((features & ANDROID_CPU_X86_FEATURE_## name) != 0) { \\\n            printf( \"  \"#name\"\\n\" ); \\\n        }\n        CHECK(SSSE3)\n        CHECK(POPCNT)\n        CHECK(MOVBE)\n#undef CHECK\n    }\n\n    int result = 0;\n\n    // Check that the CPU features mask is empty for anything that isn't\n    // 32/64-bit ARM or 32/64-bit x86.\n    if (family != ANDROID_CPU_FAMILY_ARM &&\n        family != ANDROID_CPU_FAMILY_ARM64 &&\n        family != ANDROID_CPU_FAMILY_X86 &&\n        family != ANDROID_CPU_FAMILY_X86_64) {\n        uint64_t features = android_getCpuFeatures();\n        if (features != 0) {\n            printf(\"ERROR: Unexpected CPU features mask: %016\" PRIX64 \"\\n\",\n                   features);\n            result = 1;\n        }\n    }\n*/\n    int count = android_getCpuCount();\n    printf( \"Number of CPU cores: %d\\n\", count);\n    return result;\n}\n"
  },
  {
    "path": "tests/device/test-cxx-init-array/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_cxx_init_array\nLOCAL_SRC_FILES := test.cpp global_ctor.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-cxx-init-array/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/test-cxx-init-array/jni/global_ctor.cpp",
    "content": "#include \"global_ctor.h\"\n\nGlobalCtor::GlobalCtor() : Value(42) { }\n"
  },
  {
    "path": "tests/device/test-cxx-init-array/jni/global_ctor.h",
    "content": "#ifndef GLOBAL_CTOR_H\n#define GLOBAL_CTOR_H\n\nclass GlobalCtor\n{\nprivate:\n    int Value;\n\npublic:\n    GlobalCtor();\n\n    bool IsInitialized() const\n    {\n        return (Value == 42);\n    }\n};\n\n#endif // GLOBAL_CTOR_H\n"
  },
  {
    "path": "tests/device/test-cxx-init-array/jni/test.cpp",
    "content": "#include <stdio.h>\n#include \"global_ctor.h\"\n\nGlobalCtor Obj;\n\nint main(void)\n{\n    if (Obj.IsInitialized())\n    {\n        puts(\"Passed\");\n        return 0;\n    }\n    else\n    {\n        puts(\"ERROR: Global variables are NOT initialized.\");\n        return 1;\n    }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-1/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl_1\nLOCAL_SRC_FILES := hello.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-gnustl-1/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\nAPP_CPPFLAGS := -fexceptions\n"
  },
  {
    "path": "tests/device/test-gnustl-1/jni/hello.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nint main(void)\n{\n    try {\n        if (std::getenv(\"UNKNOWN_VARIABLE\") == NULL)\n            throw std::runtime_error(\"OK: Hello, world (with full C++ support) !\");\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-2/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl_locale\nLOCAL_SRC_FILES := hello.cpp\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-gnustl-2/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/test-gnustl-2/jni/hello.cpp",
    "content": "#include <iostream>\n\nint main(void)\n{\n    time_t  now = 0;\n\n    std::cout << \"Hello \";\n    std::cout << 1.0;\n    std::cout << now;\n    std::cout << \" World\" << std::endl;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-copy_vector_into_a_set/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := gnustl_test_copy_vector_into_a_set\nLOCAL_SRC_FILES := copy_vector_into_a_set.cpp\nLOCAL_CFLAGS += -DBUG=1\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-gnustl-copy_vector_into_a_set/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/test-gnustl-copy_vector_into_a_set/jni/copy_vector_into_a_set.cpp",
    "content": "#include <iostream>\n#include <vector>\n#include <set>\n\nusing namespace std;\nstruct PasswordFormData {\n  const char* signon_realm;\n};\n\nstruct PasswordForm {\n  std::string signon_realm;\n  PasswordForm();\n  ~PasswordForm();\n};\n\n\nPasswordForm::PasswordForm(){\n}\n\nPasswordForm::~PasswordForm() {\n}\n\nPasswordForm* CreatePasswordFormFromData(\n    const PasswordFormData& form_data) {\n  PasswordForm* form = new PasswordForm();\n  if (form_data.signon_realm) {\n    form->signon_realm = \"http://foo.example.com\";\n  }\n  return form;\n}\n\ntypedef std::set<const PasswordForm*> SetOfForms;\n\nint main()\n{\n  static const PasswordFormData form_data[] = {\n      { \"http://foo.example.com\"},\n    };\n  std::vector<PasswordForm*> vector1;\n  for (int i = 0; i < sizeof(form_data)/sizeof(form_data[0]); ++i) {\n    PasswordForm* form = CreatePasswordFormFromData(form_data[i]);\n    vector1.push_back(form);\n  }\n\n#if BUG\n  SetOfForms set1(vector1.begin(), vector1.end());\n#else\n  SetOfForms set1;\n  std::copy(vector1.begin(), vector1.end(), std::inserter(set1, set1.begin()));\n#endif   \n  for(std::vector<PasswordForm*>::iterator iter = vector1.begin(); iter != vector1.end(); ++iter) {\n    const PasswordForm* value = *iter;\n    cout << \"************************************************ vector value \" << value->signon_realm << std::endl;\n  }\n  cout<<\"******************************************** set size \"<< set1.size() << std::endl;\n  for(SetOfForms::iterator iter = set1.begin(); iter != set1.end(); ++iter) {\n    const PasswordForm* value = *iter;\n    cout << \"************************************************ set value \" << value << std::endl;\n    cout << \"************************************************ set value \" << value->signon_realm << std::endl;\n  }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/jni/Android.mk",
    "content": "# The source files are actually located under ../unit\nLOCAL_PATH := $(dir $(call my-dir))\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_gnustl\n\nunit_path := $(LOCAL_PATH)/unit\nsources := $(wildcard $(unit_path)/*.cpp $(unit_path)/*.c)\nsources := $(sources:$(unit_path)/%=%)\n\n# Both a C and a C++ source file with the same basename\nsources := $(filter-out string_header_test.c,$(sources))\n\n# Exceptions are disabled for now\nsources := $(filter-out exception_test.cpp,$(sources))\n\n# This test enters an infinit loop for unknown reasons!\nsources := $(filter-out codecvt_test.cpp,$(sources))\n\nLOCAL_SRC_FILES := $(sources:%=unit/%)\nLOCAL_SRC_FILES += unit/cppunit/test_main.cpp\n\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-gnustl-full/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\nAPP_PLATFORM := android-9"
  },
  {
    "path": "tests/device/test-gnustl-full/properties.json",
    "content": "{\n    \"broken\": true,\n    \"long\": true\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    return toolchain, 'http://b/24613808'\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/_template.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass Test : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(Test);\n  CPPUNIT_TEST(test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(Test);\n\n//\n// tests implementation\n//\nvoid Test::test()\n{\n  CPPUNIT_ASSERT(true);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/accum_test.cpp",
    "content": "#include <vector>\n#include <numeric>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass AccumTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(AccumTest);\n  CPPUNIT_TEST(accum1);\n  CPPUNIT_TEST(accum2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void accum1();\n  void accum2();\n  static int mult(int initial_, int element_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(AccumTest);\n\n//\n// tests implementation\n//\nvoid AccumTest::accum1()\n{\n  vector<int> v(5);\n  for(int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i + 1;\n  int sum = accumulate(v.begin(), v.end(), 0);\n  CPPUNIT_ASSERT(sum==15);\n}\nvoid AccumTest::accum2()\n{\n  vector<int> v(5);\n  for(int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i + 1;\n  int prod = accumulate(v.begin(), v.end(), 1, mult);\n  CPPUNIT_ASSERT(prod==120);\n}\nint AccumTest::mult(int initial_, int element_)\n{\n  return initial_ * element_;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/adj_test.cpp",
    "content": "#include <vector>\n#include <numeric>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass AdjTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(AdjTest);\n  CPPUNIT_TEST(adjfind0);\n  CPPUNIT_TEST(adjfind1);\n  CPPUNIT_TEST(adjfind2);\n  CPPUNIT_TEST(adjdiff0);\n  CPPUNIT_TEST(adjdiff1);\n  CPPUNIT_TEST(adjdiff2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void adjfind0();\n  void adjfind1();\n  void adjfind2();\n  void adjdiff0();\n  void adjdiff1();\n  void adjdiff2();\n  static int equal_length(const char* v1_, const char* v2_);\n  static int mult(int a_, int b_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(AdjTest);\n\n//\n// tests implementation\n//\nvoid AdjTest::adjfind0()\n{\n  int numbers1 [5] = { 1, 2, 4, 8, 16 };\n  int numbers2 [5] = { 5, 3, 2, 1, 1 };\n\n  int* location = adjacent_find((int*)numbers1, (int*)numbers1 + 5);\n  CPPUNIT_ASSERT(location == numbers1 + 5); // no adj so loc should be _last\n\n  location = adjacent_find((int*)numbers2, (int*)numbers2 + 5);\n  CPPUNIT_ASSERT(location != numbers2 + 5); // adj location off should be 3 (first 1)\n  CPPUNIT_ASSERT((location - numbers2)==3);\n}\nvoid AdjTest::adjfind1()\n{\n  typedef vector<int> IntVector;\n  IntVector v(10);\n  for (int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i;\n  IntVector::iterator location;\n  location = adjacent_find(v.begin(), v.end());\n  CPPUNIT_ASSERT(location == v.end());\n  v[6] = 7;\n  location = adjacent_find(v.begin(), v.end());\n  CPPUNIT_ASSERT(location != v.end());\n}\nvoid AdjTest::adjfind2()\n{\n  typedef vector <const char*> CStrVector;\n\n  const char* names[] = { \"Brett\", \"Graham\", \"Jack\", \"Mike\", \"Todd\" };\n\n  const int nameCount = sizeof(names)/sizeof(names[0]);\n  CStrVector v(nameCount);\n  for(int i = 0; i < nameCount; i++)\n    v[i] = names[i];\n  CStrVector::iterator location;\n  location = adjacent_find(v.begin(), v.end(), equal_length);\n\n  CPPUNIT_ASSERT(location != v.end());\n}\nint AdjTest::equal_length(const char* v1_, const char* v2_)\n{\n  return ::strlen(v1_) == ::strlen(v2_);\n}\nvoid AdjTest::adjdiff0()\n{\n  int numbers[5] = { 1, 2, 4, 8, 16 };\n  int difference[5];\n  adjacent_difference(numbers, numbers + 5, (int*)difference);\n  CPPUNIT_ASSERT(difference[0]==1);\n  CPPUNIT_ASSERT(difference[1]==1);\n  CPPUNIT_ASSERT(difference[2]==2);\n  CPPUNIT_ASSERT(difference[3]==4);\n  CPPUNIT_ASSERT(difference[4]==8);\n}\nvoid AdjTest::adjdiff1()\n{\n  vector <int> v(10);\n  for(int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i * i;\n  vector<int> result(v.size());\n  adjacent_difference(v.begin(), v.end(), result.begin());\n  CPPUNIT_ASSERT(result[0]==0)\n  CPPUNIT_ASSERT(result[1]==1)\n  CPPUNIT_ASSERT(result[2]==3)\n  CPPUNIT_ASSERT(result[3]==5)\n  CPPUNIT_ASSERT(result[4]==7)\n  CPPUNIT_ASSERT(result[5]==9)\n  CPPUNIT_ASSERT(result[6]==11)\n  CPPUNIT_ASSERT(result[7]==13)\n  CPPUNIT_ASSERT(result[8]==15)\n  CPPUNIT_ASSERT(result[9]==17)\n}\nvoid AdjTest::adjdiff2()\n{\n  vector <int> v(10);\n  for (int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i + 1;\n  vector <int> result(v.size());\n  adjacent_difference(v.begin(), v.end(), result.begin(), mult);\n  CPPUNIT_ASSERT(result[0]==1)\n  CPPUNIT_ASSERT(result[1]==2)\n  CPPUNIT_ASSERT(result[2]==6)\n  CPPUNIT_ASSERT(result[3]==12)\n  CPPUNIT_ASSERT(result[4]==20)\n  CPPUNIT_ASSERT(result[5]==30)\n  CPPUNIT_ASSERT(result[6]==42)\n  CPPUNIT_ASSERT(result[7]==56)\n  CPPUNIT_ASSERT(result[8]==72)\n  CPPUNIT_ASSERT(result[9]==90)\n}\nint AdjTest::mult(int a_, int b_)\n{\n  return a_ * b_;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/advance_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass AdvanceTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(AdvanceTest);\n  CPPUNIT_TEST(adv);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void adv();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(AdvanceTest);\n\n//\n// tests implementation\n//\nvoid AdvanceTest::adv()\n{\n  typedef vector <int> IntVector;\n  IntVector v(10);\n  for (int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i;\n  IntVector::iterator location = v.begin();\n  CPPUNIT_ASSERT(*location==0);\n  advance(location, 5);\n  CPPUNIT_ASSERT(*location==5);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/alg_test.cpp",
    "content": "#include <list>\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <slist>\n#endif\n#include <deque>\n#include <vector>\n#include <algorithm>\n#include <functional>\n#include <map>\n#include <string>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass AlgTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(AlgTest);\n  CPPUNIT_TEST(min_max);\n  CPPUNIT_TEST(count_test);\n  CPPUNIT_TEST(sort_test);\n  CPPUNIT_TEST(search_n_test);\n  CPPUNIT_TEST(find_first_of_test);\n  CPPUNIT_TEST(find_first_of_nsc_test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void min_max();\n  void count_test();\n  void sort_test();\n  void search_n_test();\n  void find_first_of_test();\n  void find_first_of_nsc_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(AlgTest);\n\n//\n// tests implementation\n//\nvoid AlgTest::min_max()\n{\n  int i = min(4, 7);\n  CPPUNIT_ASSERT( i == 4 );\n  char c = max('a', 'z');\n  CPPUNIT_ASSERT( c == 'z' );\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  c = min('a', 'z', greater<char>());\n  CPPUNIT_ASSERT( c == 'z' );\n  i = max(4, 7, greater<int>());\n  CPPUNIT_ASSERT( i == 4 );\n#endif\n}\n\nvoid AlgTest::count_test()\n{\n  {\n    int i[] = { 1, 4, 2, 8, 2, 2 };\n    int n = count(i, i + 6, 2);\n    CPPUNIT_ASSERT(n==3);\n#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)\n    n = 0;\n    count(i, i + 6, 2, n);\n    CPPUNIT_ASSERT(n==3);\n#endif\n  }\n  {\n    vector<int> i;\n    i.push_back(1);\n    i.push_back(4);\n    i.push_back(2);\n    i.push_back(8);\n    i.push_back(2);\n    i.push_back(2);\n    int n = count(i.begin(), i.end(), 2);\n    CPPUNIT_ASSERT(n==3);\n#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)\n    n = 0;\n    count(i.begin(), i.end(), 2, n);\n    CPPUNIT_ASSERT(n==3);\n#endif\n  }\n}\n\nvoid AlgTest::sort_test()\n{\n  {\n    vector<int> years;\n    years.push_back(1962);\n    years.push_back(1992);\n    years.push_back(2001);\n    years.push_back(1999);\n    sort(years.begin(), years.end());\n    CPPUNIT_ASSERT(years[0]==1962);\n    CPPUNIT_ASSERT(years[1]==1992);\n    CPPUNIT_ASSERT(years[2]==1999);\n    CPPUNIT_ASSERT(years[3]==2001);\n  }\n  {\n    deque<int> years;\n    years.push_back(1962);\n    years.push_back(1992);\n    years.push_back(2001);\n    years.push_back(1999);\n    sort(years.begin(), years.end()); // <-- changed!\n    CPPUNIT_ASSERT(years[0]==1962);\n    CPPUNIT_ASSERT(years[1]==1992);\n    CPPUNIT_ASSERT(years[2]==1999);\n    CPPUNIT_ASSERT(years[3]==2001);\n  }\n}\n\n#define ARRAY_SIZE(arr) sizeof(arr) / sizeof(arr[0])\n\nvoid AlgTest::search_n_test()\n{\n  int ints[] = {0, 1, 2, 3, 3, 4, 4, 4, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  //search_n\n  //Forward iterator\n  {\n    slist<int> slint(ints, ints + ARRAY_SIZE(ints));\n    slist<int>::iterator slit = search_n(slint.begin(), slint.end(), 2, 2);\n    CPPUNIT_ASSERT( slit != slint.end() );\n    CPPUNIT_ASSERT( *(slit++) == 2 );\n    CPPUNIT_ASSERT( *slit == 2 );\n  }\n#endif\n\n  //Bidirectionnal iterator\n  {\n    list<int> lint(ints, ints + ARRAY_SIZE(ints));\n    list<int>::iterator lit = search_n(lint.begin(), lint.end(), 3, 3);\n    CPPUNIT_ASSERT( lit != lint.end() );\n    CPPUNIT_ASSERT( *(lit++) == 3 );\n    CPPUNIT_ASSERT( *(lit++) == 3 );\n    CPPUNIT_ASSERT( *lit == 3 );\n  }\n\n  //Random access iterator\n  {\n    deque<int> dint(ints, ints + ARRAY_SIZE(ints));\n    deque<int>::iterator dit = search_n(dint.begin(), dint.end(), 4, 4);\n    CPPUNIT_ASSERT( dit != dint.end() );\n    CPPUNIT_ASSERT( *(dit++) == 4 );\n    CPPUNIT_ASSERT( *(dit++) == 4 );\n    CPPUNIT_ASSERT( *(dit++) == 4 );\n    CPPUNIT_ASSERT( *dit == 4 );\n  }\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  //search_n with predicate\n  //Forward iterator\n  {\n    slist<int> slint(ints, ints + ARRAY_SIZE(ints));\n    slist<int>::iterator slit = search_n(slint.begin(), slint.end(), 2, 1, greater<int>());\n    CPPUNIT_ASSERT( slit != slint.end() );\n    CPPUNIT_ASSERT( *(slit++) > 1 );\n    CPPUNIT_ASSERT( *slit > 2 );\n  }\n#endif\n\n  //Bidirectionnal iterator\n  {\n    list<int> lint(ints, ints + ARRAY_SIZE(ints));\n    list<int>::iterator lit = search_n(lint.begin(), lint.end(), 3, 2, greater<int>());\n    CPPUNIT_ASSERT( lit != lint.end() );\n    CPPUNIT_ASSERT( *(lit++) > 2 );\n    CPPUNIT_ASSERT( *(lit++) > 2 );\n    CPPUNIT_ASSERT( *lit > 2 );\n  }\n\n  //Random access iterator\n  {\n    deque<int> dint(ints, ints + ARRAY_SIZE(ints));\n    deque<int>::iterator dit = search_n(dint.begin(), dint.end(), 4, 3, greater<int>());\n    CPPUNIT_ASSERT( dit != dint.end() );\n    CPPUNIT_ASSERT( *(dit++) > 3 );\n    CPPUNIT_ASSERT( *(dit++) > 3 );\n    CPPUNIT_ASSERT( *(dit++) > 3 );\n    CPPUNIT_ASSERT( *dit > 3 );\n  }\n\n  // test for bug reported by Jim Xochellis\n  {\n    int array[] = {0, 0, 1, 0, 1, 1};\n    int* array_end = array + sizeof(array) / sizeof(*array);\n    CPPUNIT_ASSERT(search_n(array, array_end, 3, 1) == array_end);\n  }\n\n  // test for bug with counter == 1, reported by Timmie Smith\n  {\n    int array[] = {0, 1, 2, 3, 4, 5};\n    int* array_end = array + sizeof(array) / sizeof(*array);\n    CPPUNIT_ASSERT( search_n(array, array_end, 1, 1, equal_to<int>() ) == &array[1] );\n  }\n}\n\nstruct MyIntComparable {\n  MyIntComparable(int val) : _val(val) {}\n  bool operator == (const MyIntComparable& other) const\n  { return _val == other._val; }\n\nprivate:\n  int _val;\n};\n\nvoid AlgTest::find_first_of_test()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  slist<int> intsl;\n  intsl.push_front(1);\n  intsl.push_front(2);\n\n  {\n    vector<int> intv;\n    intv.push_back(0);\n    intv.push_back(1);\n    intv.push_back(2);\n    intv.push_back(3);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), intsl.begin(), intsl.end());\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 1 );\n  }\n  {\n    vector<int> intv;\n    intv.push_back(3);\n    intv.push_back(2);\n    intv.push_back(1);\n    intv.push_back(0);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), intsl.begin(), intsl.end());\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 2 );\n  }\n#endif\n\n  list<int> intl;\n  intl.push_front(1);\n  intl.push_front(2);\n\n  {\n    vector<int> intv;\n    intv.push_back(0);\n    intv.push_back(1);\n    intv.push_back(2);\n    intv.push_back(3);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), intl.begin(), intl.end());\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 1 );\n  }\n  {\n    vector<int> intv;\n    intv.push_back(3);\n    intv.push_back(2);\n    intv.push_back(1);\n    intv.push_back(0);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), intl.begin(), intl.end());\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 2 );\n  }\n  {\n    char chars[] = {1, 2};\n\n    vector<int> intv;\n    intv.push_back(0);\n    intv.push_back(1);\n    intv.push_back(2);\n    intv.push_back(3);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars));\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 1 );\n  }\n  {\n    unsigned char chars[] = {1, 2, 255};\n\n    vector<int> intv;\n    intv.push_back(-10);\n    intv.push_back(1029);\n    intv.push_back(255);\n    intv.push_back(4);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars));\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 255 );\n  }\n  {\n    signed char chars[] = {93, 2, -101, 13};\n\n    vector<int> intv;\n    intv.push_back(-10);\n    intv.push_back(1029);\n    intv.push_back(-2035);\n    intv.push_back(-101);\n    intv.push_back(4);\n\n    vector<int>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars));\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == -101 );\n  }\n  {\n    char chars[] = {1, 2};\n\n    vector<MyIntComparable> intv;\n    intv.push_back(0);\n    intv.push_back(1);\n    intv.push_back(2);\n    intv.push_back(3);\n\n    vector<MyIntComparable>::iterator first;\n    first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars));\n    CPPUNIT_ASSERT( first != intv.end() );\n    CPPUNIT_ASSERT( *first == 1 );\n  }\n}\n\ntypedef pair<int, string> Pair;\n\nstruct ValueFinder :\n    public binary_function<const Pair&, const string&, bool>\n{\n    bool operator () ( const Pair &p, const string& value ) const\n      { return p.second == value; }\n};\n\nvoid AlgTest::find_first_of_nsc_test()\n{\n  // Non-symmetrical comparator\n\n  map<int, string> m;\n  vector<string> values;\n\n  m[1] = \"one\";\n  m[4] = \"four\";\n  m[10] = \"ten\";\n  m[20] = \"twenty\";\n\n  values.push_back( \"four\" );\n  values.push_back( \"ten\" );\n\n  map<int, string>::iterator i = find_first_of(m.begin(), m.end(), values.begin(), values.end(), ValueFinder());\n\n  CPPUNIT_ASSERT( i != m.end() );\n  CPPUNIT_ASSERT( i->first == 4 || i->first == 10 );\n  CPPUNIT_ASSERT( i->second == \"four\" || i->second == \"ten\" );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/algorithm_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <algorithm>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/allocator_test.cpp",
    "content": "#include <memory>\n#include <vector>\n\n#include <cstdio>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass AllocatorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(AllocatorTest);\n  CPPUNIT_TEST(zero_allocation);\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_TEST(bad_alloc_test);\n#endif\n#if defined (STLPORT) && defined (_STLP_THREADS) && defined (_STLP_USE_PERTHREAD_ALLOC)\n  CPPUNIT_TEST(per_thread_alloc);\n#endif\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void zero_allocation();\n  void bad_alloc_test();\n  void per_thread_alloc();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(AllocatorTest);\n\n//\n// tests implementation\n//\nvoid AllocatorTest::zero_allocation()\n{\n  typedef allocator<char> CharAllocator;\n  CharAllocator charAllocator;\n\n  char* buf = charAllocator.allocate(0);\n  charAllocator.deallocate(buf, 0);\n\n  charAllocator.deallocate(0, 0);\n}\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n\nstruct BigStruct\n{\n  char _data[4096];\n};\n\nvoid AllocatorTest::bad_alloc_test()\n{\n  typedef allocator<BigStruct> BigStructAllocType;\n  BigStructAllocType bigStructAlloc;\n\n  try {\n    //Lets try to allocate almost 4096 Go (on most of the platforms) of memory:\n    BigStructAllocType::pointer pbigStruct = bigStructAlloc.allocate(1024 * 1024 * 1024);\n\n    //Allocation failed but no exception thrown\n    CPPUNIT_ASSERT( pbigStruct != 0 );\n\n    // Just it case it succeeds:\n    bigStructAlloc.deallocate(pbigStruct, 1024 * 1024 * 1024);\n  }\n  catch (bad_alloc const&) {\n  }\n  catch (...) {\n    //We shouldn't be there:\n    //Not bad_alloc exception thrown.\n    CPPUNIT_FAIL;\n  }\n}\n#endif\n\n#if defined (STLPORT) && defined (_STLP_THREADS) && defined (_STLP_USE_PERTHREAD_ALLOC)\n#  include <pthread.h>\n\nclass SharedDatas\n{\npublic:\n  typedef vector<int, per_thread_allocator<int> > thread_vector;\n\n  SharedDatas(size_t nbElems) : threadVectors(nbElems, (thread_vector*)0) {\n    pthread_mutex_init(&mutex, 0);\n    pthread_cond_init(&condition, 0);\n  }\n\n  ~SharedDatas() {\n    for (size_t i = 0; i < threadVectors.size(); ++i) {\n      delete threadVectors[i];\n    }\n  }\n\n  size_t initThreadVector() {\n    size_t ret;\n\n    pthread_mutex_lock(&mutex);\n\n    for (size_t i = 0; i < threadVectors.size(); ++i) {\n      if (threadVectors[i] == 0) {\n        threadVectors[i] = new thread_vector();\n        ret = i;\n        break;\n      }\n    }\n\n    if (ret != threadVectors.size() - 1) {\n      //We wait for other thread(s) to call this method too:\n      printf(\"Thread %d wait\\n\", ret);\n      pthread_cond_wait(&condition, &mutex);\n    }\n    else {\n      //We are the last thread calling this method, we signal this\n      //to the other thread(s) that might be waiting:\n      printf(\"Thread %d signal\\n\", ret);\n      pthread_cond_signal(&condition);\n    }\n\n    pthread_mutex_unlock(&mutex);\n\n    return ret;\n  }\n\n  thread_vector& getThreadVector(size_t index) {\n    //We return other thread thread_vector instance:\n    return *threadVectors[(index + 1 == threadVectors.size()) ? 0 : index + 1];\n  }\n\nprivate:\n  pthread_mutex_t mutex;\n  pthread_cond_t condition;\n  vector<thread_vector*> threadVectors;\n};\n\nvoid* f(void* pdatas) {\n  SharedDatas *psharedDatas = (SharedDatas*)pdatas;\n\n  int threadIndex = psharedDatas->initThreadVector();\n\n  for (int i = 0; i < 100; ++i) {\n    psharedDatas->getThreadVector(threadIndex).push_back(i);\n  }\n\n  return 0;\n}\n\nvoid AllocatorTest::per_thread_alloc()\n{\n  const size_t nth = 2;\n  SharedDatas datas(nth);\n  pthread_t t[nth];\n\n  size_t i;\n  for (i = 0; i < nth; ++i) {\n    pthread_create(&t[i], 0, f, &datas);\n  }\n\n  for (i = 0; i < nth; ++i ) {\n    pthread_join(t[i], 0);\n  }\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/assert_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <assert.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bcompos_test.cpp",
    "content": "#include <algorithm>\n#include \"unary.h\"\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BcomposTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BcomposTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(bcompos1);\n  CPPUNIT_TEST(bcompos2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bcompos1();\n  void bcompos2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BcomposTest);\n\n//\n// tests implementation\n//\nvoid BcomposTest::bcompos1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int array [6] = { -2, -1, 0, 1, 2, 3 };\n\n  binary_compose<logical_and<bool>, odd, positive>\n  b = binary_compose<logical_and<bool>, odd, positive>(logical_and<bool>(), odd(), positive());\n\n  int* p = find_if((int*)array, (int*)array + 6, b);\n  CPPUNIT_ASSERT(p != array + 6);\n#endif\n}\n\nvoid BcomposTest::bcompos2()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int array [6] = { -2, -1 , 0, 1, 2, 3 };\n\n  int* p = find_if((int*)array, (int*)array + 6,\n  compose2(logical_and<bool>(), odd(), positive()));\n  CPPUNIT_ASSERT(p != array + 6);\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bind_test.cpp",
    "content": "#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BindTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BindTest);\n  CPPUNIT_TEST(bind1st1);\n  CPPUNIT_TEST(bind2nd1);\n  CPPUNIT_TEST(bind2nd2);\n#if !defined (STLPORT) || \\\n    defined (_STLP_NO_EXTENSIONS) || !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(bind2nd3);\n  CPPUNIT_TEST(bind_memfn);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bind1st1();\n  void bind2nd1();\n  void bind2nd2();\n  void bind2nd3();\n  void bind_memfn();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BindTest);\n\nclass pre_increment : public binary_function<int, int, int> {\npublic:\n  int operator()(int incr, int& val) const\n  { return val += incr; }\n};\n\nclass post_increment : public binary_function<int, int, int> {\npublic:\n  int operator()(int& val, int incr) const\n  { return val += incr; }\n};\n\n\n//\n// tests implementation\n//\nvoid BindTest::bind1st1()\n{\n  int array [3] = { 1, 2, 3 };\n  int* p = remove_if((int*)array, (int*)array + 3, bind1st(less<int>(), 2));\n\n  CPPUNIT_ASSERT(p == &array[2]);\n  CPPUNIT_ASSERT(array[0] == 1);\n  CPPUNIT_ASSERT(array[1] == 2);\n\n  for_each((int*)array, (int*)array + 3, bind1st(pre_increment(), 1));\n  CPPUNIT_ASSERT(array[0] == 2);\n  CPPUNIT_ASSERT(array[1] == 3);\n  CPPUNIT_ASSERT(array[2] == 4);\n\n  for_each((int*)array, (int*)array + 3, bind2nd(post_increment(), 1));\n  CPPUNIT_ASSERT(array[0] == 3);\n  CPPUNIT_ASSERT(array[1] == 4);\n  CPPUNIT_ASSERT(array[2] == 5);\n}\n\nvoid BindTest::bind2nd1()\n{\n  int array [3] = { 1, 2, 3 };\n  replace_if(array, array + 3, binder2nd<greater<int> >(greater<int>(), 2), 4);\n\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==2);\n  CPPUNIT_ASSERT(array[2]==4);\n}\nvoid BindTest::bind2nd2()\n{\n  int array [3] = { 1, 2, 3 };\n  replace_if(array, array + 3, bind2nd(greater<int>(), 2), 4);\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==2);\n  CPPUNIT_ASSERT(array[2]==4);\n}\n\nint test_func1 (const int &param1, const int &param2) {\n  return param1 + param2;\n}\n\nint test_func2 (int &param1, int param2) {\n  param1 += param2;\n  return param1 + param2;\n}\n\nvoid BindTest::bind2nd3()\n{\n#if defined (STLPORT) && \\\n    !defined (_STLP_NO_EXTENSIONS) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  int array[3] = { 1, 2, 3 };\n  transform(array, array + 3, array, bind2nd(ptr_fun(test_func1), 1));\n  transform(array, array + 3, array, bind1st(ptr_fun(test_func1), -1));\n  CPPUNIT_ASSERT(array[0] == 1);\n  CPPUNIT_ASSERT(array[1] == 2);\n  CPPUNIT_ASSERT(array[2] == 3);\n\n  transform(array, array + 3, array, bind2nd(ptr_fun(test_func2), 10));\n  CPPUNIT_ASSERT(array[0] == 21);\n  CPPUNIT_ASSERT(array[1] == 22);\n  CPPUNIT_ASSERT(array[2] == 23);\n#endif\n}\n\nclass A\n{\n  public:\n    A() : m_n( 0 )\n    {}\n\n    void f( int n ) const {\n#if defined (STLPORT)\n      _STLP_MUTABLE(A, m_n) = n;\n#else\n      m_n = n;\n#endif\n    }\n\n    int v() const\n    { return m_n; }\n\n  private:\n    mutable int m_n;\n};\n\nvoid BindTest::bind_memfn()\n{\n#if defined (STLPORT) && \\\n    !defined (_STLP_NO_EXTENSIONS) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  A array[3];\n\n  for_each( array, array + 3, bind2nd( mem_fun_ref(&A::f), 12 ) );\n\n  CPPUNIT_CHECK( array[0].v() == 12 );\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/binsert_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BinsertTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BinsertTest);\n  CPPUNIT_TEST(binsert1);\n  CPPUNIT_TEST(binsert2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void binsert1();\n  void binsert2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BinsertTest);\n\n//\n// tests implementation\n//\nvoid BinsertTest::binsert1()\n{\n  const char* array [] = { \"laurie\", \"jennifer\", \"leisa\" };\n  vector<const char*> names;\n  back_insert_iterator<vector<const char*> > bit(names);\n  bit = copy(array, array + 3, bit);\n\n  CPPUNIT_ASSERT(!strcmp(names[0],array[0]));\n  CPPUNIT_ASSERT(!strcmp(names[1],array[1]));\n  CPPUNIT_ASSERT(!strcmp(names[2],array[2]));\n\n  copy(array, array + 3, bit);\n  CPPUNIT_ASSERT(!strcmp(names[3],array[0]));\n  CPPUNIT_ASSERT(!strcmp(names[4],array[1]));\n  CPPUNIT_ASSERT(!strcmp(names[5],array[2]));\n}\nvoid BinsertTest::binsert2()\n{\n  const char* array [] = { \"laurie\", \"jennifer\", \"leisa\" };\n  vector<const char*> names;\n  copy(array, array + 3, back_inserter(names));\n  CPPUNIT_ASSERT(!strcmp(names[0],array[0]));\n  CPPUNIT_ASSERT(!strcmp(names[1],array[1]));\n  CPPUNIT_ASSERT(!strcmp(names[2],array[2]));\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bitset_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <bitset>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bitset_test.cpp",
    "content": "#include <bitset>\n#include <algorithm>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BitsetTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BitsetTest);\n  CPPUNIT_TEST(bitset1);\n#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(iostream);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bitset1();\n  void iostream();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BitsetTest);\n\n//\n// tests implementation\n//\nvoid BitsetTest::bitset1()\n{\n  bitset<13U> b1(0xFFFF);\n  bitset<13U> b2(0x1111);\n  CPPUNIT_ASSERT(b1.size() == 13);\n  CPPUNIT_ASSERT(b1 == 0x1FFF);\n  CPPUNIT_ASSERT(b2.size() == 13);\n  CPPUNIT_ASSERT(b2 == 0x1111);\n\n#if !defined (STLPORT) || !defined (_STLP_NON_TYPE_TMPL_PARAM_BUG)\n  b1 = b1 ^ (b2 << 2);\n  CPPUNIT_ASSERT(b1 == 0x1BBB);\n\n  CPPUNIT_ASSERT(b1.count() == 10);\n  CPPUNIT_ASSERT(b2.count() == 4);\n\n#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  size_t __pos = b2._Find_first();\n  CPPUNIT_ASSERT( __pos == 0 );\n  __pos = b2._Find_next(__pos);\n  CPPUNIT_ASSERT( __pos == 4 );\n  __pos = b2._Find_next(__pos);\n  CPPUNIT_ASSERT( __pos == 8 );\n  __pos = b2._Find_next(__pos);\n  CPPUNIT_ASSERT( __pos == 12 );\n  __pos = b2._Find_next(__pos);\n  CPPUNIT_ASSERT( __pos == 13 );\n#  endif\n#endif\n\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)\n  string representation = b2.to_string<char, char_traits<char>, allocator<char> >();\n  CPPUNIT_ASSERT( representation == \"1000100010001\" );\n#  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n  wstring wrepresentation = b2.to_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >();\n  CPPUNIT_ASSERT( wrepresentation == L\"1000100010001\" );\n#  endif\n#else\n  CPPUNIT_ASSERT( b2.to_string() == \"1000100010001\" );\n#endif\n}\n\nvoid BitsetTest::iostream()\n{\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n  {\n    stringstream sstr;\n    bitset<13U> b(0x1111);\n    sstr << b;\n    CPPUNIT_ASSERT( sstr.str() == \"1000100010001\" );\n\n    bitset<13U> b1;\n    sstr >> b1;\n    CPPUNIT_ASSERT( b1.test(0) );\n    CPPUNIT_ASSERT( b1.test(4) );\n    CPPUNIT_ASSERT( b1.test(8) );\n    CPPUNIT_ASSERT( b1.test(12) );\n  }\n#  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n  {\n    wstringstream sstr;\n    bitset<13U> b(0x1111);\n    sstr << b;\n    CPPUNIT_ASSERT( sstr.str() == L\"1000100010001\" );\n\n    bitset<13U> b1;\n    sstr >> b1;\n    CPPUNIT_ASSERT( b1.test(0) );\n    CPPUNIT_ASSERT( b1.test(4) );\n    CPPUNIT_ASSERT( b1.test(8) );\n    CPPUNIT_ASSERT( b1.test(12) );\n  }\n#  endif\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bnegate_test.cpp",
    "content": "#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BnegateTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BnegateTest);\n  CPPUNIT_TEST(bnegate1);\n  CPPUNIT_TEST(bnegate2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bnegate1();\n  void bnegate2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BnegateTest);\n\n//\n// tests implementation\n//\nvoid BnegateTest::bnegate1()\n{\n  int array [4] = { 4, 9, 7, 1 };\n\n  sort(array, array + 4, binary_negate<greater<int> >(greater<int>()));\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==4);\n  CPPUNIT_ASSERT(array[2]==7);\n  CPPUNIT_ASSERT(array[3]==9);\n}\nvoid BnegateTest::bnegate2()\n{\n  int array [4] = { 4, 9, 7, 1 };\n  sort(array, array + 4, not2(greater<int>()));\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==4);\n  CPPUNIT_ASSERT(array[2]==7);\n  CPPUNIT_ASSERT(array[3]==9);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/boost_check.cpp",
    "content": "#ifndef WITHOUT_STLPORT \n#include <stl/config/user_config.h>\n\n#ifdef _STLP_USE_BOOST_SUPPORT\n\n#include <boost/config.hpp>\n\n#endif // _STLP_USE_BOOST_SUPPORT\n\n#else\n\n#if 0 // Problem 1:\n/* *******************************\n../../../stlport/functional:63: error: 'boost::mem_fn' has not been declared\n../../../stlport/functional:64: error: 'boost::bind' has not been declared\n../../../stlport/functional:67: error: '::_1' has not been declared\n../../../stlport/functional:68: error: '::_2' has not been declared\n../../../stlport/functional:69: error: '::_3' has not been declared\n../../../stlport/functional:70: error: '::_4' has not been declared\n../../../stlport/functional:71: error: '::_5' has not been declared\n../../../stlport/functional:72: error: '::_6' has not been declared\n../../../stlport/functional:73: error: '::_7' has not been declared\n../../../stlport/functional:74: error: '::_8' has not been declared\n../../../stlport/functional:75: error: '::_9' has not been declared\n   ******************************* */\n\n#include <boost/bind.hpp>\n\n#endif // Problem 1\n\n#if 0 // Problem 2\n\n#include <boost/function.hpp>\n\n#endif // Problem 2\n\n#if 0 // Problem 3\n\n#include <boost/function/function_base.hpp>\n\n#endif // Problem 3\n\n#if 0 // Problem 4\n\n#include <boost/function/function1.hpp>\n\n#endif // Problem 4\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bound_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BoundTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BoundTest);\n  CPPUNIT_TEST(lwrbnd1);\n  CPPUNIT_TEST(lwrbnd2);\n  CPPUNIT_TEST(uprbnd1);\n  CPPUNIT_TEST(uprbnd2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void lwrbnd1();\n  void lwrbnd2();\n  void uprbnd1();\n  void uprbnd2();\n\n  static bool char_str_less(const char* a_, const char* b_)\n  {\n    return strcmp(a_, b_) < 0 ? 1 : 0;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BoundTest);\n\n//\n// tests implementation\n//\nvoid BoundTest::uprbnd1()\n{\n  int arr[20];\n  for(int i = 0; i < 20; i++)\n  {\n    arr[i] = i/4;\n  }\n  int location = upper_bound((int*)arr, (int*)arr + 20, 3) - arr;\n  CPPUNIT_ASSERT(location==16);\n}\n\nvoid BoundTest::uprbnd2()\n{\n  char const* str [] = { \"a\", \"a\", \"b\", \"b\", \"q\", \"w\", \"z\" };\n\n  const unsigned strCt = sizeof(str)/sizeof(str[0]);\n\n  int location = (upper_bound((char const**)str,  (char const**)str + strCt, (const char *)\"d\", char_str_less) - str);\n  CPPUNIT_ASSERT(location==4);\n}\nvoid BoundTest::lwrbnd1()\n{\n  vector <int> v1(20);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n  {\n    v1[i] = i/4;\n  }\n  // 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4\n  vector<int>::iterator location = lower_bound(v1.begin(), v1.end(), 3);\n\n  CPPUNIT_ASSERT((location - v1.begin())==12);\n}\n\nvoid BoundTest::lwrbnd2()\n{\n  char const* str [] = { \"a\", \"a\", \"b\", \"b\", \"q\", \"w\", \"z\" };\n\n  const unsigned strCt = sizeof(str)/sizeof(str[0]);\n  char const** location = lower_bound((char const**)str,  (char const**)str + strCt, (const char *)\"d\", char_str_less);\n\n  CPPUNIT_ASSERT((location - str) == 4);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bsearch_test.cpp",
    "content": "#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BsearchTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BsearchTest);\n  CPPUNIT_TEST(bsearch1);\n  CPPUNIT_TEST(bsearch2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bsearch1();\n  void bsearch2();\n  static bool str_compare(const char* a_, const char* b_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BsearchTest);\n\n//\n// tests implementation\n//\nvoid BsearchTest::bsearch1()\n{\n  int vector[100];\n  for(int i = 0; i < 100; i++)\n    vector[i] = i;\n  CPPUNIT_ASSERT(binary_search(vector, vector + 100, 42));\n}\n\nvoid BsearchTest::bsearch2()\n{\n  char const* labels[] = { \"aa\", \"dd\", \"ff\", \"jj\", \"ss\", \"zz\" };\n  const unsigned count = sizeof(labels) / sizeof(labels[0]);\n  // DEC C++ generates incorrect template instatiation code\n  // for \"ff\" so must cast\n  CPPUNIT_ASSERT(binary_search(labels, labels + count, (const char *)\"ff\", str_compare));\n}\nbool BsearchTest::str_compare(const char* a_, const char* b_)\n{\n  return strcmp(a_, b_) < 0 ? 1 : 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/bvector_test.cpp",
    "content": "#include <vector>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass BvectorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(BvectorTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(bvec1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void bvec1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(BvectorTest);\n\n//\n// tests implementation\n//\nvoid BvectorTest::bvec1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  bool ii[3]= {1,0,1};\n  bit_vector b(3);\n\n  CPPUNIT_ASSERT(b[0]==0);\n  CPPUNIT_ASSERT(b[1]==0);\n  CPPUNIT_ASSERT(b[2]==0);\n\n  b[0] = b[2] = 1;\n\n  CPPUNIT_ASSERT(b[0]==1);\n  CPPUNIT_ASSERT(b[1]==0);\n  CPPUNIT_ASSERT(b[2]==1);\n\n  b.insert(b.begin(),(bool*)ii, ii+2);\n\n  CPPUNIT_ASSERT(b[0]==1);\n  CPPUNIT_ASSERT(b[1]==0);\n  CPPUNIT_ASSERT(b[2]==1);\n  CPPUNIT_ASSERT(b[3]==0);\n  CPPUNIT_ASSERT(b[4]==1);\n\n  bit_vector bb = b;\n  if (bb != b)\n    exit(1);\n\n  b[0] |= 0;\n  b[1] |= 0;\n  b[2] |= 1;\n  b[3] |= 1;\n  CPPUNIT_ASSERT(!((b[0] != 1) || (b[1] != 0) || (b[2] != 1) || (b[3] != 1)));\n\n\n  bb[0] &= 0;\n  bb[1] &= 0;\n  bb[2] &= 1;\n  bb[3] &= 1;\n  CPPUNIT_ASSERT(!((bb[0] != 0) || (bb[1] != 0) || (bb[2] != 1) || (bb[3] != 0)));\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/c_limits_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <limits.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/c_locale_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <locale.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cassert_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cassert>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cctype_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cctype>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cerrno_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cerrno>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cfloat_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cfloat>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ciso646_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <ciso646>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/climits_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <climits>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/clocale_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <clocale>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cmath_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cmath>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cmath_test.cpp",
    "content": "#define _STLP_DO_IMPORT_CSTD_FUNCTIONS\n\n#include <limits>\n#include <cmath>\n//We also test math functions imported from stdlib.h or\n//defined in cstdlib\n#include <cstdlib>\n\n#include \"math_aux.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n//This test purpose is to check the right import of math.h C symbols\n//into the std namespace so we do not use the using namespace std\n//specification\n\n//\n// TestCase class\n//\nclass CMathTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(CMathTest);\n#if defined (STLPORT) && !defined (_STLP_USE_NAMESPACES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(import_checks);\n  CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void import_checks();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(CMathTest);\n\n//\n// tests implementation\n//\nvoid CMathTest::import_checks()\n{\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n  int int_val = -1;\n  long long_val = -1l;\n  float float_val = -1.0f;\n  double double_val = -1.0;\n#  if !defined (_STLP_NO_LONG_DOUBLE)\n  long double long_double_val = -1.0l;\n#  endif\n\n  CPPUNIT_CHECK( are_equals(std::abs(int_val), -int_val) );\n  CPPUNIT_CHECK( are_equals(std::abs(long_val), -long_val) );\n  CPPUNIT_CHECK( are_equals(std::labs(long_val), -long_val) );\n  CPPUNIT_CHECK( are_equals(std::abs(float_val), -float_val) );\n  CPPUNIT_CHECK( are_equals(std::abs(double_val), -double_val) );\n#  if !defined (_STLP_NO_LONG_DOUBLE)\n  CPPUNIT_CHECK( are_equals(std::abs(long_double_val), -long_double_val) );\n#  endif\n\n  CPPUNIT_CHECK( are_equals(std::fabs(float_val), -float_val) );\n  CPPUNIT_CHECK( are_equals(std::fabs(double_val), -double_val) );\n#  if !defined (_STLP_NO_LONG_DOUBLE)\n  CPPUNIT_CHECK( are_equals(std::fabs(long_double_val), -long_double_val) );\n#  endif\n\n  std::div_t div_res = std::div(3, 2);\n  CPPUNIT_CHECK( div_res.quot == 1 );\n  CPPUNIT_CHECK( div_res.rem == 1 );\n  std::ldiv_t ldiv_res = std::ldiv(3l, 2l);\n  CPPUNIT_CHECK( ldiv_res.quot == 1l );\n  CPPUNIT_CHECK( ldiv_res.rem == 1l );\n  ldiv_res = std::div(3l, 2l);\n  CPPUNIT_CHECK( ldiv_res.quot == 1l );\n  CPPUNIT_CHECK( ldiv_res.rem == 1l );\n\n  std::srand(2);\n  int rand_val = std::rand();\n  CPPUNIT_CHECK( rand_val >= 0 && rand_val <= RAND_MAX );\n\n  CPPUNIT_CHECK( are_equals(std::floor(1.5), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::ceil(1.5), 2.0) );\n  CPPUNIT_CHECK( are_equals(std::fmod(1.5, 1.0), 0.5) );\n  CPPUNIT_CHECK( are_equals(std::sqrt(4.0), 2.0) );\n  CPPUNIT_CHECK( are_equals(std::pow(2.0, 2), 4.0) );\n  /*\n   * Uncomment the following to check that it generates an ambiguous call\n   * as there is no Standard pow(int, int) function only pow(double, int),\n   * pow(float, int) and some others...\n   * If it do not generate a compile time error it should at least give\n   * the good result.\n   */\n  //CPPUNIT_CHECK( are_equals(std::pow(10, -2), 0.01) );\n  CPPUNIT_CHECK( are_equals(std::pow(10.0, -2), 0.01) );\n  CPPUNIT_CHECK( are_equals(std::exp(0.0), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0)), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::log10(100.0), 2.0) );\n#  if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)\n  CPPUNIT_CHECK( are_equals(std::modf(100.5, &double_val), 0.5) );\n  CPPUNIT_CHECK( are_equals(double_val, 100.0) );\n#  endif\n  double_val = std::frexp(8.0, &int_val);\n  CPPUNIT_CHECK( are_equals(double_val * std::pow(2.0, int_val), 8.0) );\n  CPPUNIT_CHECK( are_equals(std::ldexp(1.0, 2), 4.0) );\n  CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0)), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0)), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::tan(std::atan(1.0)), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::tan(std::atan2(1.0, 1.0)), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::cosh(0.0), 1.0) );\n  CPPUNIT_CHECK( are_equals(std::sinh(0.0), 0.0) );\n#  if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n  CPPUNIT_CHECK( are_equals(std::tanh(0.0), 0.0) );\n#  endif\n\n  CPPUNIT_CHECK( are_equals(std::floor(1.5f), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::ceil(1.5f), 2.0f) );\n  CPPUNIT_CHECK( are_equals(std::fmod(1.5f, 1.0f), 0.5f) );\n  CPPUNIT_CHECK( are_equals(std::sqrt(4.0f), 2.0f) );\n  CPPUNIT_CHECK( are_equals(std::pow(2.0f, 2), 4.0f) );\n  CPPUNIT_CHECK( are_equals(std::exp(0.0f), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0f)), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::log10(100.0f), 2.0f) );\n#  if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)\n  CPPUNIT_CHECK( are_equals(std::modf(100.5f, &float_val), 0.5f) );\n  CPPUNIT_CHECK( are_equals(float_val, 100.0f) );\n#  endif\n  float_val = std::frexp(8.0f, &int_val);\n  CPPUNIT_CHECK( are_equals(float_val * std::pow(2.0f, int_val), 8.0f) );\n  CPPUNIT_CHECK( are_equals(std::ldexp(1.0f, 2), 4.0f) );\n  CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0f)), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0f)), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::tan(std::atan(1.0f)), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::tan(std::atan2(1.0f, 1.0f)), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::cosh(0.0f), 1.0f) );\n  CPPUNIT_CHECK( are_equals(std::sinh(0.0f), 0.0f) );\n#  if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n  CPPUNIT_CHECK( are_equals(std::tanh(0.0f), 0.0f) );\n#  endif\n\n#  if !defined (_STLP_NO_LONG_DOUBLE)\n  CPPUNIT_CHECK( are_equals(std::floor(1.5l), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::ceil(1.5l), 2.0l) );\n  CPPUNIT_CHECK( are_equals(std::fmod(1.5l, 1.0l), 0.5l) );\n  CPPUNIT_CHECK( are_equals(std::sqrt(4.0l), 2.0l) );\n  CPPUNIT_CHECK( are_equals(std::pow(2.0l, 2), 4.0l) );\n  CPPUNIT_CHECK( are_equals(std::exp(0.0l), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0l)), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::log10(100.0l), 2.0l) );\n#    if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)\n  CPPUNIT_CHECK( are_equals(std::modf(100.5l, &long_double_val), 0.5l) );\n  CPPUNIT_CHECK( are_equals(long_double_val, 100.0l) );\n#    endif\n  long_double_val = std::frexp(8.0l, &int_val);\n  CPPUNIT_CHECK( are_equals(long_double_val * std::pow(2.0l, int_val), 8.0l) );\n  CPPUNIT_CHECK( are_equals(std::ldexp(1.0l, 2), 4.0l) );\n  CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0l)), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0l)), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::tan(0.0l), 0.0l) );\n  CPPUNIT_CHECK( are_equals(std::atan(0.0l), 0.0l) );\n  CPPUNIT_CHECK( are_equals(std::atan2(0.0l, 1.0l), 0.0l) );\n  CPPUNIT_CHECK( are_equals(std::cosh(0.0l), 1.0l) );\n  CPPUNIT_CHECK( are_equals(std::sinh(0.0l), 0.0l) );\n#    if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n  CPPUNIT_CHECK( are_equals(std::tanh(0.0l), 0.0l) );\n#    endif\n#  endif\n\n  CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0))), 2.0) );\n  CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0f))), 2.0f) );\n#  if !defined (_STLP_NO_LONG_DOUBLE)\n  CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0l))), 2.0l) );\n#  endif\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/codecvt_test.cpp",
    "content": "#include <string>\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <fstream>\n#  include <locale>\n#  include <stdexcept>\n#  include <cstdio> // for WEOF\n\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// TestCase class\n//\nclass CodecvtTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(CodecvtTest);\n#if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(variable_encoding);\n  CPPUNIT_STOP_IGNORE;\n#if defined (STLPORT) && (defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(in_out_test);\n  CPPUNIT_TEST(length_test);\n  CPPUNIT_TEST(imbue_while_reading);\n  CPPUNIT_TEST(special_encodings);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void variable_encoding();\n  void in_out_test();\n  void length_test();\n  void imbue_while_reading();\n  void special_encodings();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(CodecvtTest);\n\n#if defined (STLPORT)\n#  define __NO_THROW _STLP_NOTHROW\n#else\n#  define __NO_THROW throw()\n#endif\n\n\n/* Codecvt facet eating some characters from the external buffer.\n * Transform '01' in 'a'\n */\nstruct eater_codecvt : public codecvt<char, char, mbstate_t> {\n  typedef codecvt<char,char,mbstate_t> base;\n\n  explicit eater_codecvt(size_t refs = 0) : base(refs) {}\n\n  // primitive conversion\n  virtual base::result\n  do_in(mbstate_t& mb,\n        const char* ebegin, const char* eend, const char*& ecur,\n        char* ibegin, char* iend, char*& icur) const __NO_THROW {\n      char *state = (char*)&mb;\n      ecur = ebegin;\n      icur = ibegin;\n\n      while (ecur != eend) {\n          if (icur == iend)\n              return partial;\n          if (*ecur == '0' || *state == 1) {\n            if (*state != 1) {\n              ++ecur;\n            }\n            if (ecur == eend) {\n              *state = 1;\n              return ok;\n            }\n\n            if (*ecur == '1') {\n              *icur = 'a';\n            }\n            else {\n              *(icur++) = '0';\n              if (icur == iend) {\n                if (*state != 1) {\n                  --ecur;\n                }\n                return partial;\n              }\n              *icur = *ecur;\n            }\n          }\n          else {\n            *icur = *ecur;\n          }\n\n          *state = 0;\n          ++icur;\n          ++ecur;\n      }\n\n      return ok;\n  }\n\n  // claim it's not a null-conversion\n  virtual bool do_always_noconv() const __NO_THROW\n  { return false; }\n\n  // claim it doesn't have a fixed-length encoding\n  virtual int do_encoding() const __NO_THROW\n  { return 0; }\n\n  // implemented for consistency with do_in overload\n  virtual int do_length(mbstate_t &state,\n                        const char *efrom, const char *eend, size_t m) const {\n    char *ibegin = new char[m];\n    const char *ecur = efrom;\n    char *icur = ibegin;\n    mbstate_t tmp = state;\n    do_in(tmp, efrom, eend, ecur, ibegin, ibegin + m, icur);\n    delete[] ibegin;\n    return ecur - efrom;\n  }\n\n  virtual int do_max_length() const __NO_THROW\n  { return 2; }\n\n#ifdef __DMC__\n  static locale::id id;\n#endif\n};\n\n#ifdef __DMC__\nlocale::id eater_codecvt::id;\n\nlocale::id& _GetFacetId(const eater_codecvt*)\n{ return eater_codecvt::id; }\n#endif\n\n/* Codecvt facet generating more characters than the ones read from the\n * external buffer, transform '01' in 'abc'\n * This kind of facet do not allow systematical positionning in the external\n * buffer (tellg -> -1), when you just read a 'a' you are at an undefined\n * external buffer position.\n */\nstruct generator_codecvt : public codecvt<char, char, mbstate_t> {\n  typedef codecvt<char,char,mbstate_t> base;\n\n  explicit generator_codecvt(size_t refs = 0) : base(refs) {}\n\n  // primitive conversion\n  virtual base::result\n  do_in(mbstate_t& mb,\n        const char* ebegin, const char* eend, const char*& ecur,\n        char* ibegin, char* iend, char*& icur) const __NO_THROW {\n      //Access the mbstate information in a portable way:\n      char *state = (char*)&mb;\n      ecur = ebegin;\n      icur = ibegin;\n\n      if (icur == iend) return ok;\n\n      if (*state == 2) {\n        *(icur++) = 'b';\n        if (icur == iend) {\n          *state = 3;\n          return ok;\n        }\n        *(icur++) = 'c';\n        *state = 0;\n      }\n      else if (*state == 3) {\n        *(icur++) = 'c';\n        *state = 0;\n      }\n\n      while (ecur != eend) {\n          if (icur == iend)\n              return ok;\n          if (*ecur == '0' || *state == 1) {\n            if (*state != 1) {\n              ++ecur;\n            }\n            if (ecur == eend) {\n              *state = 1;\n              return partial;\n            }\n\n            if (*ecur == '1') {\n              *(icur++) = 'a';\n              if (icur == iend) {\n                *state = 2;\n                return ok;\n              }\n              *(icur++) = 'b';\n              if (icur == iend) {\n                *state = 3;\n                return ok;\n              }\n              *icur = 'c';\n            }\n            else {\n              *(icur++) = '0';\n              if (icur == iend) {\n                if (*state != 1) {\n                  --ecur;\n                }\n                return ok;\n              }\n              *icur = *ecur;\n            }\n          }\n          else {\n            *icur = *ecur;\n          }\n\n          *state = 0;\n          ++icur;\n          ++ecur;\n      }\n\n      return ok;\n  }\n\n  // claim it's not a null-conversion\n  virtual bool do_always_noconv() const __NO_THROW\n  { return false; }\n\n  // claim it doesn't have a fixed-length encoding\n  virtual int do_encoding() const __NO_THROW\n  { return 0; }\n\n  // implemented for consistency with do_in overload\n  virtual int do_length(mbstate_t &mb,\n                        const char *efrom, const char *eend, size_t m) const {\n    const char *state = (const char*)&mb;\n    int offset = 0;\n    if (*state == 2)\n      offset = 2;\n    else if (*state == 3)\n      offset = 1;\n\n    char *ibegin = new char[m + offset];\n    const char *ecur = efrom;\n    char *icur = ibegin;\n    mbstate_t tmpState = mb;\n    do_in(tmpState, efrom, eend, ecur, ibegin, ibegin + m + offset, icur);\n    /*\n    char *state = (char*)&tmpState;\n    if (*state != 0) {\n      if (*state == 1)\n        --ecur;\n      else if (*state == 2 || *state == 3) {\n        //Undefined position, we return -1:\n        ecur = efrom - 1;\n      }\n    }\n    else {\n      if (*((char*)&mb) != 0) {\n        //We take into account the character that hasn't been counted yet in\n        //the previous decoding step:\n        ecur++;\n      }\n    }\n    */\n    delete[] ibegin;\n    return (int)min((size_t)(ecur - efrom), m);\n  }\n\n  virtual int do_max_length() const __NO_THROW\n  { return 0; }\n#ifdef __DMC__\n  static locale::id id;\n#endif\n};\n\n#ifdef __DMC__\nlocale::id generator_codecvt::id;\n\nlocale::id& _GetFacetId(const generator_codecvt*)\n{ return generator_codecvt::id; }\n#endif\n\n//\n// tests implementation\n//\n#include <iostream>\nvoid CodecvtTest::variable_encoding()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  //We first generate the file used for test:\n  const char* fileName = \"test_file.txt\";\n  {\n    ofstream ostr(fileName);\n    //Maybe we simply do not have write access to repository\n    CPPUNIT_ASSERT( ostr.good() );\n    for (int i = 0; i < 2048; ++i) {\n      ostr << \"0123456789\";\n    }\n    CPPUNIT_ASSERT( ostr.good() );\n  }\n\n  {\n    ifstream istr(fileName);\n    CPPUNIT_ASSERT( istr.good() );\n    CPPUNIT_ASSERT( !istr.eof() );\n\n    eater_codecvt codec(1);\n    locale loc(locale::classic(), &codec);\n\n    istr.imbue(loc);\n    CPPUNIT_ASSERT( istr.good() );\n    CPPUNIT_ASSERT( (int)istr.tellg() == 0 );\n\n    int theoricalPos = 0;\n    do {\n      int c = istr.get();\n      if (char_traits<char>::eq_int_type(c, char_traits<char>::eof())) {\n        break;\n      }\n      ++theoricalPos;\n      if (c == 'a') {\n        ++theoricalPos;\n      }\n\n      CPPUNIT_ASSERT( (int)istr.tellg() == theoricalPos );\n    }\n    while (!istr.eof());\n    cerr << \"out!\\n\";\n    CPPUNIT_ASSERT( istr.eof() );\n    cerr << \"fin!\\n\";\n  }\n\n#  if 0\n  /* This test is broken, not sure if it is really possible to get a position in\n   * a locale having a codecvt such as generator_codecvt. Maybe generator_codecvt\n   * is not a valid theorical example of codecvt implementation. */\n  {\n    ifstream istr(fileName);\n    CPPUNIT_ASSERT( istr.good() );\n    CPPUNIT_ASSERT( !istr.eof() );\n\n    generator_codecvt codec(1);\n    locale loc(locale::classic(), &codec);\n\n    istr.imbue(loc);\n    CPPUNIT_ASSERT( istr.good() );\n    CPPUNIT_ASSERT( (int)istr.tellg() == 0 );\n\n    int theoricalPos = 0;\n    int theoricalTellg;\n    do {\n      char c = istr.get();\n      if (c == char_traits<char>::eof()) {\n        break;\n      }\n      switch (c) {\n        case 'a':\n        case 'b':\n          theoricalTellg = -1;\n          break;\n        case 'c':\n          ++theoricalPos;\n        default:\n          ++theoricalPos;\n          theoricalTellg = theoricalPos;\n          break;\n      }\n\n      if ((int)istr.tellg() != theoricalTellg) {\n        CPPUNIT_ASSERT( (int)istr.tellg() == theoricalTellg );\n      }\n    }\n    while (!istr.eof());\n\n    CPPUNIT_ASSERT( istr.eof() );\n  }\n#  endif\n#endif\n}\n\nvoid CodecvtTest::in_out_test()\n{\n#if !defined (STLPORT) || !(defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\n  try {\n    locale loc(\"\");\n\n    typedef codecvt<wchar_t, char, mbstate_t> cdecvt_type;\n    if (has_facet<cdecvt_type>(loc)) {\n      cdecvt_type const& cdect = use_facet<cdecvt_type>(loc);\n      {\n        cdecvt_type::state_type state;\n        memset(&state, 0, sizeof(cdecvt_type::state_type));\n        string from(\"abcdef\");\n        const char* next_from;\n        wchar_t to[1];\n        wchar_t *next_to;\n        cdecvt_type::result res = cdect.in(state, from.data(), from.data() + from.size(), next_from,\n                                           to, to + sizeof(to) / sizeof(wchar_t), next_to);\n        CPPUNIT_ASSERT( res == cdecvt_type::ok );\n        CPPUNIT_ASSERT( next_from == from.data() + 1 );\n        CPPUNIT_ASSERT( next_to == &to[0] + 1 );\n        CPPUNIT_ASSERT( to[0] == L'a');\n      }\n      {\n        cdecvt_type::state_type state;\n        memset(&state, 0, sizeof(cdecvt_type::state_type));\n        wstring from(L\"abcdef\");\n        const wchar_t* next_from;\n        char to[1];\n        char *next_to;\n        cdecvt_type::result res = cdect.out(state, from.data(), from.data() + from.size(), next_from,\n                                            to, to + sizeof(to) / sizeof(char), next_to);\n        CPPUNIT_ASSERT( res == cdecvt_type::ok );\n        CPPUNIT_ASSERT( next_from == from.data() + 1 );\n        CPPUNIT_ASSERT( next_to == &to[0] + 1 );\n        CPPUNIT_ASSERT( to[0] == 'a');\n      }\n    }\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid CodecvtTest::length_test()\n{\n#if !defined (STLPORT) || !(defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\n  try {\n    locale loc(\"\");\n\n    typedef codecvt<wchar_t, char, mbstate_t> cdecvt_type;\n    if (has_facet<cdecvt_type>(loc)) {\n      cdecvt_type const& cdect = use_facet<cdecvt_type>(loc);\n      {\n        cdecvt_type::state_type state;\n        memset(&state, 0, sizeof(cdecvt_type::state_type));\n        string from(\"abcdef\");\n        int res = cdect.length(state, from.data(), from.data() + from.size(), from.size());\n        CPPUNIT_ASSERT( (size_t)res == from.size() );\n      }\n    }\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\n#if !defined (STLPORT) || !(defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\ntypedef std::codecvt<wchar_t, char, mbstate_t> my_codecvt_base;\n\nclass my_codecvt : public my_codecvt_base {\npublic:\n  explicit my_codecvt(size_t r = 0)\n   : my_codecvt_base(r) {}\n\nprotected:\n  virtual result do_in(state_type& /*state*/, const extern_type* first1,\n                       const extern_type* last1, const extern_type*& next1,\n                       intern_type* first2, intern_type* last2,\n                       intern_type*& next2) const {\n    for ( next1 = first1, next2 = first2; next1 < last1; next1 += 2 ) {\n      if ( (last1 - next1) < 2 || (last2 - next2) < 1 )\n        return partial;\n      *next2++ = (intern_type)((*(next1 + 1) << 8) | (*next1 & 255));\n    }\n    return ok;\n  }\n  virtual bool do_always_noconv() const __NO_THROW\n  { return false; }\n  virtual int do_max_length() const __NO_THROW\n  { return 2; }\n  virtual int do_encoding() const __NO_THROW\n  { return 2; }\n};\n#endif\n\nvoid CodecvtTest::imbue_while_reading()\n{\n#if !defined (STLPORT) || !(defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\n  {\n    wofstream ofs( \"test.txt\" );\n    const wchar_t buf[] = L\" \";\n    for ( int i = 0; i < 4098; ++i ) {\n      ofs << buf[0];\n    }\n  }\n\n  wifstream ifs(\"test.txt\"); // a file containing 4098 wchars\n\n  ifs.imbue( locale(locale(), new my_codecvt) );\n  ifs.get();\n  ifs.seekg(0);\n  ifs.imbue( locale() );\n  ifs.ignore(4096);\n  int ch = ifs.get();\n  CPPUNIT_CHECK( ch != (int)WEOF );\n#endif\n}\n\nvoid CodecvtTest::special_encodings()\n{\n#if !defined (STLPORT) || (!defined (_STLP_NO_WCHAR_T) && defined (_STLP_USE_EXCEPTIONS))\n  {\n    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(\"C\"));\n    codecvt<wchar_t, char, mbstate_t> const& cvt = use_facet<codecvt<wchar_t, char, mbstate_t> >(loc);\n    mbstate_t state;\n    memset(&state, 0, sizeof(mbstate_t));\n    char c = '0';\n    const char *from_next;\n    wchar_t wc;\n    wchar_t *to_next;\n    CPPUNIT_ASSERT( cvt.in(state, &c, &c + 1, from_next, &wc, &wc, to_next) == codecvt_base::ok );\n    CPPUNIT_ASSERT( to_next == &wc );\n    CPPUNIT_ASSERT( cvt.in(state, &c, &c + 1, from_next, &wc, &wc + 1, to_next) == codecvt_base::ok );\n    CPPUNIT_ASSERT( wc == L'0' );\n    CPPUNIT_ASSERT( to_next == &wc + 1 );\n  }\n  try\n  {\n    wstring cp936_wstr;\n    const string cp936_str = \"\\xd6\\xd0\\xb9\\xfa\\xc9\\xe7\\xbb\\xe1\\xbf\\xc6\\xd1\\xa7\\xd4\\xba\\xb7\\xa2\\xb2\\xbc\\x32\\x30\\x30\\x38\\xc4\\xea\\xa1\\xb6\\xbe\\xad\\xbc\\xc3\\xc0\\xb6\\xc6\\xa4\\xca\\xe9\\xa1\\xb7\\xd6\\xb8\\xb3\\xf6\\xa3\\xac\\x32\\x30\\x30\\x37\\xc4\\xea\\xd6\\xd0\\xb9\\xfa\\xbe\\xad\\xbc\\xc3\\xd4\\xf6\\xb3\\xa4\\xd3\\xc9\\xc6\\xab\\xbf\\xec\\xd7\\xaa\\xcf\\xf2\\xb9\\xfd\\xc8\\xc8\\xb5\\xc4\\xc7\\xf7\\xca\\xc6\\xc3\\xf7\\xcf\\xd4\\xd4\\xa4\\xbc\\xc6\\xc8\\xab\\xc4\\xea\\x47\\x44\\x50\\xd4\\xf6\\xcb\\xd9\\xbd\\xab\\xb4\\xef\\x31\\x31\\x2e\\x36\\x25\\xa1\\xa3\";\n    locale loc(locale::classic(), \".936\", locale::ctype);\n    codecvt<wchar_t, char, mbstate_t> const& cvt = use_facet<codecvt<wchar_t, char, mbstate_t> >(loc);\n    mbstate_t state;\n    memset(&state, 0, sizeof(mbstate_t));\n\n    codecvt_base::result res;\n\n    {\n      wchar_t wbuf[4096];\n      // Check we will have enough room for the generated wide string generated from the whole char buffer:\n      int len = cvt.length(state, cp936_str.data(), cp936_str.data() + cp936_str.size(), sizeof(wbuf) / sizeof(wchar_t));\n      CPPUNIT_ASSERT( cp936_str.size() == (size_t)len );\n\n      const char *from_next;\n      wchar_t *to_next;\n      res = cvt.in(state, cp936_str.data(), cp936_str.data() + cp936_str.size(), from_next,\n                          wbuf, wbuf + sizeof(wbuf) / sizeof(wchar_t), to_next);\n      CPPUNIT_ASSERT( res == codecvt_base::ok );\n      CPPUNIT_ASSERT( from_next == cp936_str.data() + cp936_str.size() );\n      cp936_wstr.assign(wbuf, to_next);\n    }\n\n    {\n      const wchar_t *from_next;\n      char buf[4096];\n      char *to_next;\n      res = cvt.out(state, cp936_wstr.data(), cp936_wstr.data() + cp936_wstr.size(), from_next,\n                           buf, buf + sizeof(buf), to_next);\n      CPPUNIT_ASSERT( res == codecvt_base::ok );\n      CPPUNIT_CHECK( string(buf, to_next) == cp936_str );\n    }\n  }\n  catch (const runtime_error&)\n  {\n    CPPUNIT_MESSAGE(\"Not enough platform localization support to check 936 code page encoding.\");\n  }\n  try\n  {\n    const string utf8_str = \"\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe7\\xa4\\xbe\\xe4\\xbc\\x9a\\xe7\\xa7\\x91\\xe5\\xad\\xa6\\xe9\\x99\\xa2\\xe5\\x8f\\x91\\xe5\\xb8\\x83\\x32\\x30\\x30\\x38\\xe5\\xb9\\xb4\\xe3\\x80\\x8a\\xe7\\xbb\\x8f\\xe6\\xb5\\x8e\\xe8\\x93\\x9d\\xe7\\x9a\\xae\\xe4\\xb9\\xa6\\xe3\\x80\\x8b\\xe6\\x8c\\x87\\xe5\\x87\\xba\\xef\\xbc\\x8c\\x32\\x30\\x30\\x37\\xe5\\xb9\\xb4\\xe4\\xb8\\xad\\xe5\\x9b\\xbd\\xe7\\xbb\\x8f\\xe6\\xb5\\x8e\\xe5\\xa2\\x9e\\xe9\\x95\\xbf\\xe7\\x94\\xb1\\xe5\\x81\\x8f\\xe5\\xbf\\xab\\xe8\\xbd\\xac\\xe5\\x90\\x91\\xe8\\xbf\\x87\\xe7\\x83\\xad\\xe7\\x9a\\x84\\xe8\\xb6\\x8b\\xe5\\x8a\\xbf\\xe6\\x98\\x8e\\xe6\\x98\\xbe\\xe9\\xa2\\x84\\xe8\\xae\\xa1\\xe5\\x85\\xa8\\xe5\\xb9\\xb4\\x47\\x44\\x50\\xe5\\xa2\\x9e\\xe9\\x80\\x9f\\xe5\\xb0\\x86\\xe8\\xbe\\xbe\\x31\\x31\\x2e\\x36\\x25\\xe3\\x80\\x82\";\n    wstring utf8_wstr;\n    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(\".utf8\"));\n    codecvt<wchar_t, char, mbstate_t> const& cvt = use_facet<codecvt<wchar_t, char, mbstate_t> >(loc);\n    mbstate_t state;\n    memset(&state, 0, sizeof(mbstate_t));\n\n    codecvt_base::result res;\n\n    {\n      wchar_t wbuf[4096];\n      // Check we will have enough room for the wide string generated from the whole char buffer:\n      int len = cvt.length(state, utf8_str.data(), utf8_str.data() + utf8_str.size(), sizeof(wbuf) / sizeof(wchar_t));\n      CPPUNIT_ASSERT( utf8_str.size() == (size_t)len );\n\n      const char *from_next;\n      wchar_t *to_next;\n      res = cvt.in(state, utf8_str.data(), utf8_str.data() + utf8_str.size(), from_next,\n                          wbuf, wbuf + sizeof(wbuf) / sizeof(wchar_t), to_next);\n      CPPUNIT_ASSERT( res == codecvt_base::ok );\n      CPPUNIT_ASSERT( from_next == utf8_str.data() + utf8_str.size() );\n      utf8_wstr.assign(wbuf, to_next);\n\n      // Try to read one char after the other:\n      wchar_t wc;\n      const char* from = utf8_str.data();\n      const char* from_end = from + utf8_str.size();\n      from_next = utf8_str.data();\n      size_t length = 1;\n      size_t windex = 0;\n      while (from + length <= from_end) {\n        res = cvt.in(state, from, from + length, from_next,\n                            &wc, &wc + 1, to_next);\n        switch (res) {\n          case codecvt_base::ok:\n            // reset length:\n            from = from_next;\n            length = 1;\n            CPPUNIT_ASSERT( wc == utf8_wstr[windex++] );\n            wc = 0;\n            break;\n          case codecvt_base::partial:\n            if (from_next == from)\n              // from_next hasn't move so we have to pass more chars\n              ++length;\n            else\n              // char between from and from_next has been eaten, we simply restart\n              // conversion from from_next:\n              from = from_next;\n            continue;\n          case codecvt_base::error:\n          case codecvt_base::noconv:\n            CPPUNIT_FAIL;\n            //break;\n        }\n      }\n      CPPUNIT_ASSERT( windex == utf8_wstr.size() );\n    }\n\n    {\n      const wchar_t *from_next;\n      char buf[4096];\n      char *to_next;\n      res = cvt.out(state, utf8_wstr.data(), utf8_wstr.data() + utf8_wstr.size(), from_next,\n                           buf, buf + sizeof(buf), to_next);\n      CPPUNIT_ASSERT( res == codecvt_base::ok );\n      CPPUNIT_CHECK( string(buf, to_next) == utf8_str );\n    }\n\n    {\n      // Check that an obviously wrong UTF8 encoded string is correctly detected:\n      const string bad_utf8_str(\"\\xdf\\xdf\\xdf\\xdf\\xdf\");\n      wchar_t wc;\n      const char *from_next;\n      wchar_t *to_next;\n      res = cvt.in(state, bad_utf8_str.data(), bad_utf8_str.data() + bad_utf8_str.size(), from_next,\n                          &wc, &wc + 1, to_next);\n      CPPUNIT_ASSERT( res == codecvt_base::error );\n    }\n  }\n  catch (const runtime_error&)\n  {\n    CPPUNIT_MESSAGE(\"Not enough platform localization support to check UTF8 encoding.\");\n  }\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/collate_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <stdexcept>\n#  include <algorithm>\n#  include <vector>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// tests implementation\n//\nvoid LocaleTest::collate_facet()\n{\n  {\n    CPPUNIT_ASSERT( has_facet<collate<char> >(locale::classic()) );\n    collate<char> const& col = use_facet<collate<char> >(locale::classic());\n\n    char const str1[] = \"abcdef1\";\n    char const str2[] = \"abcdef2\";\n    const size_t size1 = sizeof(str1) / sizeof(str1[0]) - 1;\n    const size_t size2 = sizeof(str2) / sizeof(str2[0]) - 1;\n\n    CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 1) == 0 );\n    CPPUNIT_ASSERT( col.compare(str1, str1 + size1, str2, str2 + size2) == -1 );\n\n    //Smallest string should be before largest one:\n    CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 2, str2, str2 + size2 - 1) == -1 );\n    CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 2) == 1 );\n  }\n\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    locale loc(\"fr_FR\");\n    {\n      CPPUNIT_ASSERT( has_facet<collate<char> >(loc) );\n      collate<char> const& col = use_facet<collate<char> >(loc);\n\n      char const str1[] = \"abcdef1\";\n      char const str2[] = \"abcdef2\";\n      const size_t size1 = sizeof(str1) / sizeof(str1[0]) - 1;\n      const size_t size2 = sizeof(str2) / sizeof(str2[0]) - 1;\n\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 1) == 0 );\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1, str2, str2 + size2) == -1 );\n\n      //Smallest string should be before largest one:\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 2, str2, str2 + size2 - 1) == -1 );\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 2) == 1 );\n    }\n    {\n      CPPUNIT_ASSERT( has_facet<collate<char> >(loc) );\n      collate<char> const& col = use_facet<collate<char> >(loc);\n\n      string strs[] = {\"abdd\", \"abd\", \"abbd\", \"abcd\"};\n\n      string transformed[4];\n      for (size_t i = 0; i < 4; ++i) {\n        transformed[i] = col.transform(strs[i].data(), strs[i].data() + strs[i].size());\n      }\n\n      sort(strs, strs + 4, loc);\n      CPPUNIT_ASSERT( strs[0] == \"abbd\" );\n      CPPUNIT_ASSERT( strs[1] == \"abcd\" );\n      CPPUNIT_ASSERT( strs[2] == \"abd\" );\n      CPPUNIT_ASSERT( strs[3] == \"abdd\" );\n\n      sort(transformed, transformed + 4);\n\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data() + strs[0].size()) == transformed[0] );\n      CPPUNIT_ASSERT( col.transform(strs[1].data(), strs[1].data() + strs[1].size()) == transformed[1] );\n      CPPUNIT_ASSERT( col.transform(strs[2].data(), strs[2].data() + strs[2].size()) == transformed[2] );\n      CPPUNIT_ASSERT( col.transform(strs[3].data(), strs[3].data() + strs[3].size()) == transformed[3] );\n\n      // Check empty string result in empty key.\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data()).empty() );\n\n      // Check that only characters that matter are taken into accout to build the key.\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data() + 2) == col.transform(strs[1].data(), strs[1].data() + 2) );\n    }\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n    {\n      CPPUNIT_ASSERT( has_facet<collate<wchar_t> >(loc) );\n      collate<wchar_t> const& col = use_facet<collate<wchar_t> >(loc);\n\n      wchar_t const str1[] = L\"abcdef1\";\n      wchar_t const str2[] = L\"abcdef2\";\n      const size_t size1 = sizeof(str1) / sizeof(str1[0]) - 1;\n      const size_t size2 = sizeof(str2) / sizeof(str2[0]) - 1;\n\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 1) == 0 );\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1, str2, str2 + size2) == -1 );\n\n      //Smallest string should be before largest one:\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 2, str2, str2 + size2 - 1) == -1 );\n      CPPUNIT_ASSERT( col.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 2) == 1 );\n    }\n    {\n      size_t i;\n      CPPUNIT_ASSERT( has_facet<collate<wchar_t> >(loc) );\n      collate<wchar_t> const& col = use_facet<collate<wchar_t> >(loc);\n\n      // Here we would like to use L\"abd\" but it looks like all compilers\n      // do not support storage of unicode characters in exe resulting in\n      // compilation error. We avoid this test for the moment.\n      wstring strs[] = {L\"abdd\", L\"abcd\", L\"abbd\", L\"abcd\"};\n\n      wstring transformed[4];\n      for (i = 0; i < 4; ++i) {\n        transformed[i] = col.transform(strs[i].data(), strs[i].data() + strs[i].size());\n      }\n\n      sort(strs, strs + 4, loc);\n      CPPUNIT_ASSERT( strs[0] == L\"abbd\" );\n      CPPUNIT_ASSERT( strs[1] == L\"abcd\" );\n      CPPUNIT_ASSERT( strs[2] == L\"abcd\" );\n      CPPUNIT_ASSERT( strs[3] == L\"abdd\" );\n\n      sort(transformed, transformed + 4);\n\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data() + strs[0].size()) == transformed[0] );\n      CPPUNIT_ASSERT( col.transform(strs[1].data(), strs[1].data() + strs[1].size()) == transformed[1] );\n      CPPUNIT_ASSERT( col.transform(strs[2].data(), strs[2].data() + strs[2].size()) == transformed[2] );\n      CPPUNIT_ASSERT( col.transform(strs[3].data(), strs[3].data() + strs[3].size()) == transformed[3] );\n\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data()).empty() );\n\n      CPPUNIT_ASSERT( col.transform(strs[0].data(), strs[0].data() + 2) == col.transform(strs[1].data(), strs[1].data() + 2) );\n    }\n#    endif\n  }\n  catch (runtime_error const&) {\n    CPPUNIT_MESSAGE(\"No french locale to check collate facet\");\n  }\n#  endif\n}\n\nvoid LocaleTest::collate_by_name()\n{\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#    if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new collate_byname<char>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new collate_byname<char>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_COLLATE=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new collate_byname<char>(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), \"C\", locale::collate);\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" facet.\n    locale loc(locale::classic(), \"\", locale::collate);\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new collate_byname<char>(\"C\"));\n\n    //We check that the C locale gives a lexicographical comparison:\n    collate<char> const& cfacet_byname = use_facet<collate<char> >(loc);\n    collate<char> const& cfacet = use_facet<collate<char> >(locale::classic());\n\n    char const str1[] = \"abcdef1\";\n    char const str2[] = \"abcdef2\";\n    const size_t size1 = sizeof(str1) / sizeof(str1[0]) - 1;\n    const size_t size2 = sizeof(str2) / sizeof(str2[0]) - 1;\n\n    CPPUNIT_ASSERT( cfacet_byname.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 1) ==\n                    cfacet.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 1) );\n    CPPUNIT_ASSERT( cfacet_byname.compare(str1, str1 + size1, str2, str2 + size2) ==\n                    cfacet.compare(str1, str1 + size1, str2, str2 + size2) );\n\n    //Smallest string should be before largest one:\n    CPPUNIT_ASSERT( cfacet_byname.compare(str1, str1 + size1 - 2, str2, str2 + size2 - 1) ==\n                    cfacet.compare(str1, str1 + size1 - 2, str2, str2 + size2 - 1) );\n    CPPUNIT_ASSERT( cfacet_byname.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 2) ==\n                    cfacet.compare(str1, str1 + size1 - 1, str2, str2 + size2 - 2) );\n\n    // We cannot play with '' char here because doing so would make test result\n    // dependant on char being consider as signed or not...\n    string strs[] = {\"abdd\", /* \"abd\",*/ \"abbd\", \"abcd\"};\n\n    vector<string> v1(strs, strs + sizeof(strs) / sizeof(strs[0]));\n    sort(v1.begin(), v1.end(), loc);\n    vector<string> v2(strs, strs + sizeof(strs) / sizeof(strs[0]));\n    sort(v2.begin(), v2.end(), locale::classic());\n    CPPUNIT_ASSERT( v1 == v2 );\n\n    CPPUNIT_ASSERT( (cfacet_byname.transform(v1[0].data(), v1[0].data() + v1[0].size()).compare(cfacet_byname.transform(v1[1].data(), v1[1].data() + v1[1].size())) ==\n                    v1[0].compare(v1[1])) );\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#      if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new collate_byname<wchar_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new collate_byname<wchar_t>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/complete_digits.h",
    "content": "#ifndef STLP_DIGITS_H\n#define STLP_DIGITS_H\n\n#include <string>\n\ninline void \n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\ncomplete_digits(std::string &digits)\n#else\ncomplete_digits(string &digits)\n#endif\n{\n  while (digits.size() < 2)\n  {\n    digits.insert(digits.begin(), '0');\n  }\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/complex_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <complex>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/config_test.cpp",
    "content": "#include <new>\n#include <vector>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ConfigTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ConfigTest);\n#if !defined (STLPORT)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(placement_new_bug);\n  CPPUNIT_TEST(endianess);\n  CPPUNIT_TEST(template_function_partial_ordering);\n#if !defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(new_throw_bad_alloc);\n  CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void placement_new_bug();\n    void endianess();\n    void template_function_partial_ordering();\n    void new_throw_bad_alloc();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ConfigTest);\n\nvoid ConfigTest::placement_new_bug()\n{\n#if defined (STLPORT)\n  int int_val = 1;\n  int *pint;\n  pint = new(&int_val) int();\n  CPPUNIT_ASSERT( pint == &int_val );\n#  if defined (_STLP_DEF_CONST_PLCT_NEW_BUG)\n  CPPUNIT_ASSERT( int_val != 0 );\n#  else\n  CPPUNIT_ASSERT( int_val == 0 );\n#  endif\n#endif\n}\n\nvoid ConfigTest::endianess()\n{\n#if defined (STLPORT)\n  int val = 0x01020304;\n  char *ptr = (char*)(&val);\n#  if defined (_STLP_BIG_ENDIAN)\n  //This test only work if sizeof(int) == 4, this is a known limitation\n  //that will be handle the day we find a compiler for which it is false.\n  CPPUNIT_ASSERT( *ptr == 0x01 ||\n                  sizeof(int) > 4 && *ptr == 0x00 );\n#  elif defined (_STLP_LITTLE_ENDIAN)\n  CPPUNIT_ASSERT( *ptr == 0x04 );\n#  endif\n#endif\n}\n\nvoid ConfigTest::template_function_partial_ordering()\n{\n#if defined (STLPORT)\n  vector<int> vect1(10, 0);\n  int* pvect1Front = &vect1.front();\n  vector<int> vect2(10, 0);\n  int* pvect2Front = &vect2.front();\n\n  swap(vect1, vect2);\n\n#  if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) || defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)\n  CPPUNIT_ASSERT( pvect1Front == &vect2.front() );\n  CPPUNIT_ASSERT( pvect2Front == &vect1.front() );\n#  else\n  CPPUNIT_ASSERT( pvect1Front != &vect2.front() );\n  CPPUNIT_ASSERT( pvect2Front != &vect1.front() );\n#  endif\n#endif\n}\n\nvoid ConfigTest::new_throw_bad_alloc()\n{\n#if defined (STLPORT) && defined (_STLP_USE_EXCEPTIONS)\n  try\n  {\n  /* We try to exhaust heap memory. However, we don't actually use the\n    largest possible size_t value bus slightly less in order to avoid\n    triggering any overflows due to the allocator adding some more for\n    its internal data structures. */\n    size_t const huge_amount = size_t(-1) - 1024;\n    void* pvoid = operator new (huge_amount);\n#if !defined (_STLP_NEW_DONT_THROW_BAD_ALLOC)\n    // Allocation should have fail\n    CPPUNIT_ASSERT( pvoid != 0 );\n#endif\n    // Just in case it succeeds:\n    operator delete(pvoid);\n  }\n  catch (const bad_alloc&)\n  {\n#if defined (_STLP_NEW_DONT_THROW_BAD_ALLOC)\n    // Looks like your compiler new operator finally throw bad_alloc, you can fix\n    // configuration.\n    CPPUNIT_FAIL;\n#endif\n  }\n  catch (...)\n  {\n    //We shouldn't be there:\n    //Not bad_alloc exception thrown.\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/copy_test.cpp",
    "content": "#include <algorithm>\n#include <cstring>\n#include <vector>\n#include <iterator>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass CopyTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(CopyTest);\n  CPPUNIT_TEST(copy_array);\n  CPPUNIT_TEST(copy_volatile);\n  CPPUNIT_TEST(copy_vector);\n  CPPUNIT_TEST(copy_insert);\n  CPPUNIT_TEST(copy_back);\n  CPPUNIT_TEST(copy_back_array);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void copy_array();\n  void copy_volatile();\n  void copy_vector();\n  void copy_insert();\n  void copy_back();\n  void copy_back_array();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(CopyTest);\n\n//\n// tests implementation\n//\nvoid CopyTest::copy_array()\n{\n  char string[23] = \"A string to be copied.\";\n  char result[23];\n  copy(string, string + 23, result);\n  CPPUNIT_ASSERT(!strncmp(string, result, 23));\n}\n\nvoid CopyTest::copy_volatile()\n{\n  {\n    int a[] = {0, 1, 2, 3, 4, 5};\n    const size_t size = sizeof(a) / sizeof(a[0]);\n    volatile int va[size]; \n    copy(a, a + size, va);\n    for (size_t i = 0; i != size; ++i) {\n      CPPUNIT_ASSERT( a[i] == va[i] );\n    }\n  }\n\n  {\n    const int a[] = {0, 1, 2, 3, 4, 5};\n    const size_t size = sizeof(a) / sizeof(a[0]);\n    volatile int va[size]; \n    copy(a, a + size, va);\n    for (size_t i = 0; i != size; ++i) {\n      CPPUNIT_ASSERT( a[i] == va[i] );\n    }\n  }\n\n  // Following code can be activated to check that it doesn't compiled\n#if 0\n  {\n    int a[] = {0, 1, 2, 3, 4, 5};\n    const size_t size = sizeof(a) / sizeof(a[0]);\n    const volatile int va[size] = {5, 4, 3, 2, 1, 0}; \n    copy(a, a + size, va);\n    for (size_t i = 0; i != size; ++i) {\n      CPPUNIT_ASSERT( a[i] == va[i] );\n    }\n  }\n#endif\n}\n\nvoid CopyTest::copy_vector()\n{\n  vector<int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i;\n\n  vector<int> v2(v1.size());\n  copy(v1.begin(), v1.end(), v2.begin());\n\n  CPPUNIT_ASSERT( v2 == v1 );\n}\n\nvoid CopyTest::copy_insert() {\n  vector<int> v1(10);\n  for (int loc = 0; (size_t)loc < v1.size(); ++loc)\n    v1[loc] = loc;\n  vector<int> v2;\n  insert_iterator<vector<int> > i(v2, v2.begin());\n  copy(v1.begin(), v1.end(), i);\n\n  CPPUNIT_ASSERT( v2 == v1 );\n}\n\nvoid CopyTest::copy_back()\n{\n  vector<int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i;\n  vector<int> v2(v1.size());\n  copy_backward(v1.begin(), v1.end(), v2.end());\n\n  CPPUNIT_ASSERT( v2 == v1 );\n}\n\nvoid CopyTest::copy_back_array()\n{\n  int numbers[5] = { 1, 2, 3, 4, 5 };\n\n  int result[5];\n  copy_backward(numbers, numbers + 5, (int*)result + 5);\n  CPPUNIT_ASSERT(result[0]==numbers[0]);\n  CPPUNIT_ASSERT(result[1]==numbers[1]);\n  CPPUNIT_ASSERT(result[2]==numbers[2]);\n  CPPUNIT_ASSERT(result[3]==numbers[3]);\n  CPPUNIT_ASSERT(result[4]==numbers[4]);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/count_test.cpp",
    "content": "#include <algorithm>\n#include <vector>\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass CountTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(CountTest);\n  CPPUNIT_TEST(count0);\n  CPPUNIT_TEST(count1);\n  CPPUNIT_TEST(countif1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void count0();\n  void count1();\n  void countif1();\n  static int odd(int a_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(CountTest);\n\n//\n// tests implementation\n//\nvoid CountTest::count0()\n{\n  int numbers[10] = { 1, 2, 4, 1, 2, 4, 1, 2, 4, 1 };\n\n  int result = count(numbers, numbers + 10, 1);\n  CPPUNIT_ASSERT(result==4);\n#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)\n  result = 0;\n  count(numbers, numbers + 10, 1, result);\n  CPPUNIT_ASSERT(result==4);\n#endif\n}\nvoid CountTest::count1()\n{\n  vector <int> numbers(100);\n  for(int i = 0; i < 100; i++)\n  numbers[i] = i % 3;\n  int elements = count(numbers.begin(), numbers.end(), 2);\n  CPPUNIT_ASSERT(elements==33);\n#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)\n  elements = 0;\n  count(numbers.begin(), numbers.end(), 2, elements);\n  CPPUNIT_ASSERT(elements==33);\n#endif\n}\nvoid CountTest::countif1()\n{\n  vector <int> numbers(100);\n  for(int i = 0; i < 100; i++)\n    numbers[i] = i % 3;\n  int elements = count_if(numbers.begin(), numbers.end(), odd);\n  CPPUNIT_ASSERT(elements==33);\n#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)\n  elements = 0;\n  count_if(numbers.begin(), numbers.end(), odd, elements);\n  CPPUNIT_ASSERT(elements==33);\n#endif\n}\nint CountTest::odd(int a_)\n{\n  return a_ % 2;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cppunit/cppunit_mini.h",
    "content": "/*\n * Copyright (c) 2003, 2004\n * Zdenek Nemec\n *\n * This material is provided \"as is\", with absolutely no warranty expressed\n * or implied. Any use is at your own risk.\n *\n * Permission to use or copy this software for any purpose is hereby granted\n * without fee, provided the above notices are retained on all copies.\n * Permission to modify the code and to distribute modified code is granted,\n * provided the above notices are retained, and a notice that the code was\n * modified is included with the above copyright notice.\n *\n */\n\n/* $Id$ */\n\n#ifndef _CPPUNITMPFR_H_\n#define _CPPUNITMPFR_H_\n\n#if 0\n#  define CPPUNIT_NS CppUnitMini\n#else\n#  define CPPUNIT_NS\n#endif\n\n#include <string.h>\n\n#if 0\nnamespace CPPUNIT_NS\n{\n#endif\n  class Reporter {\n  public:\n    virtual ~Reporter() {}\n    virtual void error(const char * /*macroName*/, const char * /*in_macro*/, const char * /*in_file*/, int /*in_line*/) {}\n    virtual void message( const char * /*msg*/ ) {}\n    virtual void progress( const char * /*in_className*/, const char * /*in_testName*/, bool /*ignored*/, bool /* explicit */) {}\n    virtual void end() {}\n    virtual void printSummary() {}\n  };\n\n  class TestFixture {\n  public:\n    virtual ~TestFixture() {}\n\n    //! \\brief Set up context before running a test.\n    virtual void setUp() {}\n\n    //! Clean up after the test run.\n    virtual void tearDown() {}\n  };\n\n  class TestCase : public TestFixture {\n  public:\n    TestCase() { registerTestCase(this); }\n\n    void setUp() { m_failed = false; }\n    static int run(Reporter *in_reporter = 0, const char *in_testName = \"\", bool invert = false);\n    int numErrors() { return m_numErrors; }\n    static void registerTestCase(TestCase *in_testCase);\n\n    virtual void myRun(const char * /*in_name*/, bool /*invert*/ = false) {}\n\n    virtual void error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line) {\n      m_failed = true;\n      if (m_reporter) {\n        m_reporter->error(in_macroName, in_macro, in_file, in_line);\n      }\n    }\n\n    static void message(const char *msg) {\n      if (m_reporter) {\n        m_reporter->message(msg);\n      }\n    }\n\n    bool equalDoubles(double in_expected, double in_real, double in_maxErr) {\n      double diff = in_expected - in_real;\n      if (diff < 0.) {\n        diff = -diff;\n      }\n      return diff < in_maxErr;\n    }\n\n    virtual void progress(const char *in_className, const char *in_functionName, bool ignored, bool explicitTest) {\n      ++m_numTests;\n      if (m_reporter) {\n        m_reporter->progress(in_className, in_functionName, ignored, explicitTest);\n      }\n    }\n\n    bool shouldRunThis(const char *in_desiredTest, const char *in_className, const char *in_functionName,\n                       bool invert, bool explicit_test, bool &do_progress) {\n      if ((in_desiredTest) && (in_desiredTest[0] != '\\0')) {\n        do_progress = false;\n        const char *ptr = strstr(in_desiredTest, \"::\");\n        if (ptr) {\n          bool match = (strncmp(in_desiredTest, in_className, strlen(in_className)) == 0) &&\n                       (strncmp(ptr + 2, in_functionName, strlen(in_functionName)) == 0);\n          // Invert shall not make explicit test run:\n          return invert ? (match ? !match : !explicit_test)\n                        : match;\n        }\n        bool match = (strcmp(in_desiredTest, in_className) == 0);\n        do_progress = match;\n        return !explicit_test && (match == !invert);\n      }\n      do_progress = true;\n      return !explicit_test;\n    }\n\n    void tearDown() {\n      if (m_failed)\n        ++m_numErrors;\n      m_reporter->end();\n    }\n\n  protected:\n    static int m_numErrors;\n    static int m_numTests;\n\n  private:\n    static TestCase *m_root;\n    TestCase *m_next;\n    bool m_failed;\n\n    static Reporter *m_reporter;\n  };\n#if 0\n}\n#endif\n\n#if !defined (CPPUNIT_MINI_HIDE_UNUSED_VARIABLE)\n#  if defined (_MSC_VER)\n#    define CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(v) (v);\n#  else\n#    define CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(v)\n#  endif\n#endif\n\n#define CPPUNIT_TEST_SUITE(X) \\\n  typedef CPPUNIT_NS::TestCase Base; \\\n  virtual void myRun(const char *in_name, bool invert = false) { \\\n    const char *className = #X; CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(className) \\\n    bool ignoring = false; CPPUNIT_MINI_HIDE_UNUSED_VARIABLE(ignoring)\n\n#if defined CPPUNIT_MINI_USE_EXCEPTIONS\n#  define CPPUNIT_TEST_BASE(X, Y) \\\n  { \\\n    bool do_progress; \\\n    bool shouldRun = shouldRunThis(in_name, className, #X, invert, Y, do_progress); \\\n    if (shouldRun || do_progress) { \\\n      setUp(); \\\n      progress(className, #X, ignoring || !shouldRun, !ignoring && Y); \\\n      if (shouldRun && !ignoring) { \\\n        try { \\\n          X(); \\\n        } \\\n        catch(...) { \\\n          Base::error(\"Test Failed: An Exception was thrown.\", #X, __FILE__, __LINE__); \\\n        } \\\n      } \\\n      tearDown(); \\\n    } \\\n  }\n#else\n#  define CPPUNIT_TEST_BASE(X, Y) \\\n  { \\\n    bool do_progress; \\\n    bool shouldRun = shouldRunThis(in_name, className, #X, invert, Y, do_progress); \\\n    if (shouldRun || do_progress) { \\\n      setUp(); \\\n      progress(className, #X, ignoring || !shouldRun, !ignoring && Y); \\\n      if (shouldRun && !ignoring) \\\n        X(); \\\n      tearDown(); \\\n    } \\\n  }\n#endif\n\n#define CPPUNIT_TEST(X) CPPUNIT_TEST_BASE(X, false)\n#define CPPUNIT_EXPLICIT_TEST(X) CPPUNIT_TEST_BASE(X, true)\n\n#define CPPUNIT_IGNORE \\\n  ignoring = true\n\n#define CPPUNIT_STOP_IGNORE \\\n  ignoring = false\n\n#define CPPUNIT_TEST_SUITE_END() }\n\n#define CPPUNIT_TEST_SUITE_REGISTRATION(X) static X local\n\n#define CPPUNIT_CHECK(X) \\\n  if (!(X)) { \\\n    Base::error(\"CPPUNIT_CHECK\", #X, __FILE__, __LINE__); \\\n  }\n\n#define CPPUNIT_ASSERT(X) \\\n  if (!(X)) { \\\n    Base::error(\"CPPUNIT_ASSERT\", #X, __FILE__, __LINE__); \\\n    return; \\\n  }\n\n#define CPPUNIT_FAIL { \\\n    Base::error(\"CPPUNIT_FAIL\", \"\", __FILE__, __LINE__); \\\n    return; \\\n  }\n\n#define CPPUNIT_ASSERT_EQUAL(X, Y) \\\n  if ((X) != (Y)) { \\\n    Base::error(\"CPPUNIT_ASSERT_EQUAL\", #X\",\"#Y, __FILE__, __LINE__); \\\n    return; \\\n  }\n\n#define CPPUNIT_ASSERT_DOUBLES_EQUAL(X, Y, Z) \\\n  if (!equalDoubles((X), (Y), (Z))) { \\\n    Base::error(\"CPPUNIT_ASSERT_DOUBLES_EQUAL\", #X\",\"#Y\",\"#Z, __FILE__, __LINE__); \\\n    return; \\\n  }\n\n#define CPPUNIT_MESSAGE(m) CPPUNIT_NS::TestCase::message(m)\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cppunit/cppunit_proxy.h",
    "content": "/*\n * Copyright (c) 2003, 2004\n * Zdenek Nemec\n *\n * This material is provided \"as is\", with absolutely no warranty expressed\n * or implied. Any use is at your own risk.\n *\n * Permission to use or copy this software for any purpose is hereby granted\n * without fee, provided the above notices are retained on all copies.\n * Permission to modify the code and to distribute modified code is granted,\n * provided the above notices are retained, and a notice that the code was\n * modified is included with the above copyright notice.\n *\n */\n\n/* $Id$ */\n\n#ifndef _CPPUNITPROXYINTERFACE_H_\n#define _CPPUNITPROXYINTERFACE_H_\n\n/*\n * STLport specific\n */\n#if !defined (CPPUNIT_MINI_USE_EXCEPTIONS) && \\\n    (!defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS))\n#  define CPPUNIT_MINI_USE_EXCEPTIONS\n#endif\n\n#include \"cppunit_mini.h\"\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cppunit/cppunit_timer.h",
    "content": "/*\n * Copyright (c) 2006\n * Francois Dumont\n *\n * This material is provided \"as is\", with absolutely no warranty expressed\n * or implied. Any use is at your own risk.\n *\n * Permission to use or copy this software for any purpose is hereby granted\n * without fee, provided the above notices are retained on all copies.\n * Permission to modify the code and to distribute modified code is granted,\n * provided the above notices are retained, and a notice that the code was\n * modified is included with the above copyright notice.\n *\n */\n\n#ifndef CPPUNIT_TIMER_H\n#define CPPUNIT_TIMER_H\n\n#if defined (_WIN32)\n#  define CPPUNIT_WIN32_TIMER\n#  include <windows.h>\n#endif\n\nclass Timer {\npublic:\n  Timer() {\n#if defined (CPPUNIT_WIN32_TIMER)\n    m_start.LowPart = m_restart.LowPart = m_stop.LowPart = 0;\n    m_start.HighPart = m_restart.HighPart = m_stop.HighPart = 0;\n    QueryPerformanceFrequency(&m_frequency);\n#endif\n  }\n\n  void start() {\n#if defined (CPPUNIT_WIN32_TIMER)\n    QueryPerformanceCounter(&m_start);\n#endif\n  }\n\n  void restart() {\n#if defined (CPPUNIT_WIN32_TIMER)\n    QueryPerformanceCounter(&m_restart);\n    if (m_start.HighPart == 0 && m_start.LowPart == 0) {\n      m_start = m_restart;\n    }\n#endif\n  }\n\n  void stop() {\n#if defined (CPPUNIT_WIN32_TIMER)\n    LARGE_INTEGER stop;\n    QueryPerformanceCounter(&stop);\n    if ((m_stop.HighPart != 0 || m_stop.LowPart != 0) &&\n        m_restart.HighPart != 0 && m_restart.LowPart != 0) {\n      m_stop.HighPart += (stop.HighPart - m_restart.HighPart);\n      if (stop.LowPart < m_restart.LowPart) {\n        if (m_restart.LowPart - stop.LowPart > m_stop.LowPart) {\n          m_stop.HighPart -= 1;\n        }\n        m_stop.LowPart -= m_restart.LowPart - stop.LowPart;\n      }\n      else {\n        if (stop.LowPart - m_restart.LowPart > 0xFFFFFFFF - m_stop.LowPart) {\n          m_stop.HighPart += 1;\n        }\n        m_stop.LowPart += stop.LowPart - m_restart.LowPart;\n      }\n    }\n    else {\n      m_stop = stop;\n    }\n#endif\n  }\n\n  double elapsedMilliseconds() const {\n#if defined (CPPUNIT_WIN32_TIMER)\n    LARGE_INTEGER elapsed;\n    elapsed.HighPart = m_stop.HighPart - m_start.HighPart;\n    elapsed.LowPart = m_stop.LowPart - m_start.LowPart;\n    return (double)elapsed.QuadPart / (double)m_frequency.QuadPart * 1000;\n#else\n    return 0;\n#endif\n  }\n\n  static bool supported() {\n#if defined (CPPUNIT_WIN32_TIMER)\n    return true;\n#else\n    return false;\n#endif\n  }\n\nprivate:\n#if defined (CPPUNIT_WIN32_TIMER)\n  LARGE_INTEGER m_frequency;\n  LARGE_INTEGER m_start, m_stop, m_restart;\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cppunit/file_reporter.h",
    "content": "/*\n * Copyright (c) 2003, 2004\n * Zdenek Nemec\n *\n * This material is provided \"as is\", with absolutely no warranty expressed\n * or implied. Any use is at your own risk.\n *\n * Permission to use or copy this software for any purpose is hereby granted\n * without fee, provided the above notices are retained on all copies.\n * Permission to modify the code and to distribute modified code is granted,\n * provided the above notices are retained, and a notice that the code was\n * modified is included with the above copyright notice.\n *\n */\n\n/* $Id$ */\n\n#ifndef _CPPUNITMINIFILEREPORTERINTERFACE_H_\n#define _CPPUNITMINIFILEREPORTERINTERFACE_H_\n\n#include <stdio.h>\n\n#include \"cppunit_timer.h\"\n\n//\n// CppUnit mini file(stream) reporter\n//\nclass FileReporter : public CPPUNIT_NS::Reporter {\nprivate:\n  FileReporter(const FileReporter&);\n  FileReporter& operator=(const FileReporter&);\npublic:\n  // reporting to stderr\n  explicit FileReporter(bool doMonitor = false):\n      m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(false),\n      m_failed(false), m_doMonitor(doMonitor)\n  { _file = stderr; }\n\n  // reporting to the file with the given name\n  explicit FileReporter(const char* file, bool doMonitor = false):\n      m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(true),\n      m_failed(false), m_doMonitor(doMonitor)\n  {\n#ifndef _STLP_USE_SAFE_STRING_FUNCTIONS\n    _file = fopen(file, \"w\");\n#else\n    fopen_s(&_file, file, \"w\");\n#endif\n  }\n\n  // reporting to the given file\n  explicit FileReporter(FILE* stream, bool doMonitor = false):\n      m_numErrors(0), m_numIgnored(0), m_numExplicit(0), m_numTests(0), _myStream(false),\n      m_failed(false), m_doMonitor(doMonitor)\n  { _file = stream; }\n\n  virtual ~FileReporter() {\n    if (_myStream)\n      fclose(_file);\n    else\n      fflush(_file);\n  }\n\n  virtual void error(const char *in_macroName, const char *in_macro, const char *in_file, int in_line) {\n    // Error might be called several times between 2 progress calls, we shouldn't however consider\n    // that a test failed twice so we simply keep the info that test failed, number of failed tests\n    // is computed later in end method.\n    m_failed = true;\n    fprintf(_file, \"\\n\\n%s(%d) : %s(%s);\", in_file, in_line, in_macroName, in_macro);\n  }\n\n  virtual void message( const char *msg )\n  { fprintf(_file, \"\\n\\t%s\", msg ); }\n\n  virtual void progress(const char *in_className, const char *in_shortTestName, bool ignored, bool explicitTest) {\n    if (m_doMonitor) {\n      m_globalTimer.restart();\n      m_testTimer.start();\n    }\n    ++m_numTests;\n    m_failed = false;\n    if (ignored)\n      ++m_numIgnored;\n    fprintf(_file, \"%s::%s\", in_className, in_shortTestName);\n    if (ignored) {\n      const char *ignoredReason;\n      if (explicitTest) {\n        ++m_numExplicit;\n        ignoredReason = \" EXPLICIT\";\n      }\n      else\n        ignoredReason = \" IGNORED\";\n\n      fprintf(_file, \"%s\", ignoredReason);\n    }\n  }\n\n  virtual void end() {\n    if (m_doMonitor) {\n      m_globalTimer.stop();\n      m_testTimer.stop();\n      fprintf(_file, \" %f msec\", m_testTimer.elapsedMilliseconds());\n    }\n    if (m_failed) {\n      ++m_numErrors;\n    }\n    fprintf(_file, \"\\n\");\n  }\n\n  virtual void printSummary() {\n    if (m_numErrors > 0) {\n      fprintf(_file, \"\\nThere were errors! %d of %d tests\", m_numErrors, m_numTests);\n    }\n    else {\n      fprintf(_file, \"\\nOK %d tests\", m_numTests);\n    }\n\n    if (m_numIgnored > 0) {\n      fprintf(_file, \", %d ignored\", m_numIgnored);\n    }\n\n    if (m_numExplicit > 0) {\n      fprintf(_file, \" (%d explicit)\", m_numExplicit);\n    }\n\n    if (m_doMonitor) {\n      fprintf(_file, \" %f msec\", m_globalTimer.elapsedMilliseconds());\n    }\n\n    fprintf(_file, \"\\n\\n\");\n  }\nprivate:\n  int m_numErrors;\n  int m_numIgnored;\n  int m_numExplicit;\n  int m_numTests;\n  // flag whether we own '_file' and are thus responsible for releasing it in the destructor\n  bool  _myStream;\n  bool m_failed;\n  bool m_doMonitor;\n  Timer m_globalTimer, m_testTimer;\n  FILE* _file;\n};\n\n#endif /*_CPPUNITMINIFILEREPORTERINTERFACE_H_*/\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cppunit/test_main.cpp",
    "content": "/*\n * Copyright (c) 2003, 2004\n * Zdenek Nemec\n *\n * This material is provided \"as is\", with absolutely no warranty expressed\n * or implied. Any use is at your own risk.\n *\n * Permission to use or copy this software for any purpose is hereby granted\n * without fee, provided the above notices are retained on all copies.\n * Permission to modify the code and to distribute modified code is granted,\n * provided the above notices are retained, and a notice that the code was\n * modified is included with the above copyright notice.\n *\n */\n\n#include \"cppunit_proxy.h\"\n#include \"file_reporter.h\"\n#include \"cppunit_timer.h\"\n\n#include \"stdio.h\"\n\n#if 0\nnamespace CPPUNIT_NS\n{\n#endif\n  int TestCase::m_numErrors = 0;\n  int TestCase::m_numTests = 0;\n\n  TestCase *TestCase::m_root = 0;\n  Reporter *TestCase::m_reporter = 0;\n\n  void TestCase::registerTestCase(TestCase *in_testCase) {\n    in_testCase->m_next = m_root;\n    m_root = in_testCase;\n  }\n\n  int TestCase::run(Reporter *in_reporter, const char *in_testName, bool invert) {\n    TestCase::m_reporter = in_reporter;\n\n    m_numErrors = 0;\n    m_numTests = 0;\n\n    TestCase *tmp = m_root;\n    while (tmp != 0) {\n      tmp->myRun(in_testName, invert);\n      tmp = tmp->m_next;\n    }\n    return m_numErrors;\n  }\n#if 0\n}\n#endif\n\nstatic void usage(const char* name)\n{\n  printf(\"Usage : %s [-t=<class>[::<test>]] [-x=<class>[::<test>]] [-f=<file>]%s\\n\",\n         name, Timer::supported() ? \" [-m]\": \"\");\n  printf(\"\\t[-t=<class>[::<test>]] : test class or class::test to execute;\\n\");\n  printf(\"\\t[-x=<class>[::<test>]] : test class or class::test to exclude from execution;\\n\");\n  printf(\"\\t[-f=<file>] : output file\");\n  if (Timer::supported())\n    printf(\";\\n\\t[-m] : monitor test execution, display time duration for each test\\n\");\n  else\n    printf(\"\\n\");\n}\n\nint main(int argc, char** argv) {\n\n  // CppUnit(mini) test launcher\n  // command line option syntax:\n  // test [OPTIONS]\n  // where OPTIONS are\n  //  -t=CLASS[::TEST]    run the test class CLASS or member test CLASS::TEST\n  //  -x=CLASS[::TEST]    run all except the test class CLASS or member test CLASS::TEST\n  //  -f=FILE             save output in file FILE instead of stdout\n  //  -m                  monitor test(s) execution\n  const char *fileName = 0;\n  const char *testName = \"\";\n  const char *xtestName = \"\";\n  bool doMonitoring = false;\n\n  for (int i = 1; i < argc; ++i) {\n    if (argv[i][0] == '-') {\n      if (!strncmp(argv[i], \"-t=\", 3)) {\n        testName = argv[i]+3;\n        continue;\n      }\n      else if (!strncmp(argv[i], \"-f=\", 3)) {\n        fileName = argv[i]+3;\n        continue;\n      }\n      else if (!strncmp(argv[i], \"-x=\", 3)) {\n        xtestName = argv[i]+3;\n        continue;\n      }\n      else if (Timer::supported() && !strncmp(argv[i], \"-m\", 2)) {\n        doMonitoring = true;\n        continue;\n      }\n    }\n\n\t\t// invalid option, we display normal usage.\n    usage(argv[0]);\n    return 1;\n  }\n\n  CPPUNIT_NS::Reporter* reporter;\n  if (fileName != 0)\n    reporter = new FileReporter(fileName, doMonitoring);\n  else\n    reporter = new FileReporter(stdout, doMonitoring);\n\n  int num_errors;\n  if (xtestName[0] != 0) {\n    num_errors = CPPUNIT_NS::TestCase::run(reporter, xtestName, true);\n  } else {\n    num_errors = CPPUNIT_NS::TestCase::run(reporter, testName);\n  }\n\n  reporter->printSummary();\n  delete reporter;\n\n  return num_errors;\n}\n\n// See doc/README.intel for explanation about this code\n#if defined (STLPORT) && defined (__ICL) && (__ICL >= 900) && \\\n            (_STLP_MSVC_LIB < 1300) && defined (_STLP_USE_DYNAMIC_LIB)\n#  include <exception>\n\n#  undef std\nnamespace std\n{\n  void _STLP_CALL unexpected() {\n    unexpected_handler hdl;\n    set_unexpected(hdl = set_unexpected((unexpected_handler)0));\n    hdl();\n  }\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/csetjmp_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <csetjmp>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/csignal_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <csignal>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstdarg_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cstdarg>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstddef_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cstddef>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstdio_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cstdio>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstdlib_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cstdlib>\n\n//Just an additionnal compilation test for Borland that used to fail here.\n#if defined (__BORLANDC__)\n#  include <process.h>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstring_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cstring>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cstring_test.cpp",
    "content": "#define _STLP_DO_IMPORT_CSTD_FUNCTIONS\n\n#include <cstring>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n//This test purpose is to check the right import of math.h C symbols\n//into the std namespace so we do not use the using namespace std\n//specification\n\n//\n// TestCase class\n//\nclass CStringTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(CStringTest);\n#if defined (STLPORT) && !defined (_STLP_USE_NAMESPACES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(import_checks);\n  CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void import_checks();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(CStringTest);\n\n#if defined (_MSC_VER) && (_MSC_VER >= 1400)\n//For deprecated symbols like strcat, strtok...\n#  pragma warning (disable : 4996)\n#endif\n\n//\n// tests implementation\n//\nvoid CStringTest::import_checks()\n{\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n  std::size_t bar = 0;\n  CPPUNIT_CHECK( bar == 0 );\n\n  CPPUNIT_CHECK( std::memchr(\"foo\", 'o', 3) != NULL );\n  CPPUNIT_CHECK( std::memcmp(\"foo1\", \"foo2\", 3) == 0 );\n  char buf1[1], buf2[1];\n  CPPUNIT_CHECK( std::memcpy(buf1, buf2, 0) != NULL );\n  CPPUNIT_CHECK( std::memmove(buf1, buf2, 0) != NULL );\n  CPPUNIT_CHECK( std::memset(buf1, 0, 1) != NULL );\n  char buf[16]; buf[0] = 0;\n  const char* foo = \"foo\";\n#  if !defined(_WIN32_WCE)\n  CPPUNIT_CHECK( std::strcoll(\"foo\", \"foo\") == 0 );\n  CPPUNIT_CHECK( std::strerror(0) != NULL );\n#  endif\n  CPPUNIT_CHECK( std::strcat((char*)buf, foo) == (char*)buf ); // buf <- foo\n  CPPUNIT_CHECK( std::strchr(foo, 'o') != NULL );\n  CPPUNIT_CHECK( std::strcmp(\"foo1\", \"foo2\") < 0 );\n  CPPUNIT_CHECK( std::strcpy((char*)buf, foo) == (char*)buf ); // buf <- foo\n  CPPUNIT_CHECK( std::strcspn(\"foo\", \"o\") == 1 );\n  CPPUNIT_CHECK( std::strlen(\"foo\") == 3 );\n  CPPUNIT_CHECK( std::strncat((char*)buf, foo, 2) == (char*)buf ); // buf <- foofo\n  CPPUNIT_CHECK( std::strncmp(\"foo1\", \"foo2\", 3) == 0 );\n  CPPUNIT_CHECK( std::strncpy((char*)buf, foo, 3) == (char*)buf ); // buf <- foo\n  CPPUNIT_CHECK( std::strpbrk(foo, \"abcdo\") == foo + 1 );\n  const char* foofoo = \"foofoo\";\n  CPPUNIT_CHECK( std::strrchr(foofoo, 'f') == foofoo + 3 );\n  CPPUNIT_CHECK( std::strspn(foofoo, \"aofz\") == 6 );\n  CPPUNIT_CHECK( std::strstr(foo, \"\") == foo );\n  char foofoobuf[] = \"foofoo\";\n  CPPUNIT_CHECK( std::strtok(foofoobuf, \"z\") != NULL );\n#  if !defined(_WIN32_WCE)\n  CPPUNIT_CHECK( std::strxfrm((char*)buf, foo, 3) != 0 );\n#  endif\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ctime_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <ctime>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ctype_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <stdexcept>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nstatic const char* tested_locales[] = {\n//name,\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  // We need exception support to check support of the following localizations.\n  \"fr_FR\",\n  \"ru_RU.koi8r\",\n  \"en_GB\",\n  \"en_US\",\n#  endif\n  \"\",\n  \"C\"\n};\n\n//\n// tests implementation\n//\nvoid LocaleTest::_ctype_facet( const locale& loc)\n{\n  CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );\n  ctype<char> const& ct = use_facet<ctype<char> >(loc);\n  //is\n  {\n    CPPUNIT_ASSERT( ct.is(ctype_base::digit, '0') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::upper, 'A') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::lower, 'a') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::alpha, 'A') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::space, ' ') );\n    CPPUNIT_ASSERT( !ct.is(ctype_base::space, '2') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::punct, '.') );\n    CPPUNIT_ASSERT( ct.is(ctype_base::xdigit, 'a') );\n  }\n\n  //is range\n  {\n    char values[] = \"0Aa .\";\n    ctype_base::mask res[sizeof(values)];\n    ct.is(values, values + sizeof(values), res);\n    // '0'\n    CPPUNIT_ASSERT( (res[0] & ctype_base::print) != 0 );\n    CPPUNIT_ASSERT( (res[0] & ctype_base::digit) != 0 );\n    CPPUNIT_ASSERT( (res[0] & ctype_base::xdigit) != 0 );\n    // 'A'\n    CPPUNIT_ASSERT( (res[1] & ctype_base::print) != 0 );\n    CPPUNIT_ASSERT( (res[1] & ctype_base::alpha) != 0 );\n    CPPUNIT_ASSERT( (res[1] & ctype_base::xdigit) != 0 );\n    CPPUNIT_ASSERT( (res[1] & ctype_base::upper) != 0 );\n    // 'a'\n    CPPUNIT_ASSERT( (res[2] & ctype_base::print) != 0 );\n    CPPUNIT_ASSERT( (res[2] & ctype_base::alpha) != 0 );\n    CPPUNIT_ASSERT( (res[2] & ctype_base::xdigit) != 0 );\n    CPPUNIT_ASSERT( (res[2] & ctype_base::lower) != 0 );\n    CPPUNIT_ASSERT( (res[2] & ctype_base::space) == 0 );\n    // ' '\n    CPPUNIT_ASSERT( (res[3] & ctype_base::print) != 0 );\n    CPPUNIT_ASSERT( (res[3] & ctype_base::space) != 0 );\n    CPPUNIT_ASSERT( (res[3] & ctype_base::digit) == 0 );\n    // '.'\n    CPPUNIT_ASSERT( (res[4] & ctype_base::print) != 0 );\n    CPPUNIT_ASSERT( (res[4] & ctype_base::punct) != 0 );\n    CPPUNIT_ASSERT( (res[4] & ctype_base::digit) == 0 );\n  }\n\n  //scan_is\n  {\n    char range[] = \"abAc123 .\";\n    const char *rbeg = range;\n    const char *rend = range + sizeof(range);\n\n    const char *res;\n    res = ct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == 'a' );\n\n    res = ct.scan_is(ctype_base::upper, rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == 'A' );\n\n    res = ct.scan_is(ctype_base::punct, rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == '.' );\n  }\n\n  //scan_not\n  {\n    char range[] = \"abAc123 .\";\n    const char *rbeg = range;\n    const char *rend = range + sizeof(range);\n\n    const char *res;\n    res = ct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == '1' );\n\n    res = ct.scan_not(ctype_base::alpha, rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == '1' );\n\n    res = ct.scan_not(ctype_base::punct, rbeg, rend);\n    CPPUNIT_ASSERT( res != rend );\n    CPPUNIT_ASSERT( *res == 'a' );\n  }\n\n  //toupper\n  {\n    CPPUNIT_ASSERT( ct.toupper('a') == 'A' );\n    CPPUNIT_ASSERT( ct.toupper('A') == 'A' );\n    CPPUNIT_ASSERT( ct.toupper('1') == '1' );\n  }\n\n  //toupper range\n  {\n    char range[] = \"abAc1\";\n    char expected_range[] = \"ABAC1\";\n    ct.toupper(range, range + sizeof(range));\n    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );\n  }\n\n  //tolower\n  {\n    CPPUNIT_ASSERT( ct.tolower('A') == 'a' );\n    CPPUNIT_ASSERT( ct.tolower('a') == 'a' );\n    CPPUNIT_ASSERT( ct.tolower('1') == '1' );\n  }\n\n  //tolower range\n  {\n    char range[] = \"ABaC1\";\n    char expected_range[] = \"abac1\";\n    ct.tolower(range, range + sizeof(range));\n    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );\n  }\n\n  //widen\n  {\n    CPPUNIT_ASSERT( ct.widen('a') == 'a' );\n  }\n\n  //widen range\n  {\n    char range[] = \"ABaC1\";\n    char res[sizeof(range)];\n    ct.widen(range, range + sizeof(range), res);\n    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );\n  }\n\n  //narrow\n  {\n    CPPUNIT_ASSERT( ct.narrow('a', 'b') == 'a' );\n  }\n\n  //narrow range\n  {\n    char range[] = \"ABaC1\";\n    char res[sizeof(range)];\n    ct.narrow(range, range + sizeof(range), 'b', res);\n    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );\n  }\n}\n\nvoid LocaleTest::_ctype_facet_w( const locale& loc )\n{\n# ifndef _STLP_NO_WCHAR_T\n  CPPUNIT_ASSERT( has_facet<ctype<wchar_t> >(loc) );\n  ctype<wchar_t> const& wct = use_facet<ctype<wchar_t> >(loc);\n  //is\n  {\n    CPPUNIT_CHECK( wct.is(ctype_base::digit, L'0') );\n    CPPUNIT_CHECK( wct.is(ctype_base::upper, L'A') );\n    CPPUNIT_CHECK( wct.is(ctype_base::lower, L'a') );\n    CPPUNIT_CHECK( wct.is(ctype_base::alpha, L'A') );\n    CPPUNIT_CHECK( wct.is(ctype_base::space, L' ') );\n    CPPUNIT_CHECK( !wct.is(ctype_base::space, L'2') );\n    CPPUNIT_CHECK( wct.is(ctype_base::punct, L'.') );\n    CPPUNIT_CHECK( wct.is(ctype_base::xdigit, L'a') );\n  }\n\n  //is range\n  {\n    wchar_t values[] = L\"0Aa .\";\n    ctype_base::mask res[sizeof(values) / sizeof(wchar_t)];\n    wct.is(values, values + (sizeof(values) / sizeof(wchar_t)), res);\n    // '0'\n    CPPUNIT_CHECK( (res[0] & ctype_base::print) != 0 );\n    CPPUNIT_CHECK( (res[0] & ctype_base::digit) != 0 );\n    CPPUNIT_CHECK( (res[0] & ctype_base::xdigit) != 0 );\n    // 'A'\n    CPPUNIT_CHECK( (res[1] & ctype_base::print) != 0 );\n    CPPUNIT_CHECK( (res[1] & ctype_base::alpha) != 0 );\n    CPPUNIT_CHECK( (res[1] & ctype_base::xdigit) != 0 );\n    CPPUNIT_CHECK( (res[1] & ctype_base::upper) != 0 );\n    // 'a'\n    CPPUNIT_CHECK( (res[2] & ctype_base::print) != 0 );\n    CPPUNIT_CHECK( (res[2] & ctype_base::alpha) != 0 );\n    CPPUNIT_CHECK( (res[2] & ctype_base::xdigit) != 0 );\n    CPPUNIT_CHECK( (res[2] & ctype_base::lower) != 0 );\n    CPPUNIT_CHECK( (res[2] & ctype_base::space) == 0 );\n    // ' '\n    CPPUNIT_CHECK( (res[3] & ctype_base::print) != 0 );\n    CPPUNIT_CHECK( (res[3] & ctype_base::space) != 0 );\n    CPPUNIT_CHECK( (res[3] & ctype_base::digit) == 0 );\n    // '.'\n    CPPUNIT_CHECK( (res[4] & ctype_base::print) != 0 );\n    CPPUNIT_CHECK( (res[4] & ctype_base::punct) != 0 );\n    CPPUNIT_CHECK( (res[4] & ctype_base::digit) == 0 );\n  }\n\n  //scan_is\n  {\n    wchar_t range[] = L\"abAc123 .\";\n    const wchar_t *rbeg = range;\n    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));\n\n    const wchar_t *res;\n    res = wct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'a' );\n\n    res = wct.scan_is(ctype_base::upper, rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'A' );\n\n    res = wct.scan_is(ctype_base::punct, rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'.' );\n  }\n\n  //scan_not\n  {\n    wchar_t range[] = L\"abAc123 .\";\n    const wchar_t *rbeg = range;\n    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));\n\n    const wchar_t *res;\n    res = wct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'1' );\n\n    res = wct.scan_not(ctype_base::alpha, rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'1' );\n\n    res = wct.scan_not(ctype_base::punct, rbeg, rend);\n    CPPUNIT_CHECK( res != rend );\n    CPPUNIT_CHECK( *res == L'a' );\n  }\n\n  //toupper\n  {\n    CPPUNIT_CHECK( wct.toupper(L'a') == L'A' );\n    CPPUNIT_CHECK( wct.toupper(L'A') == L'A' );\n    CPPUNIT_CHECK( wct.toupper(L'1') == L'1' );\n  }\n\n  //toupper range\n  {\n    wchar_t range[] = L\"abAc1\";\n    wchar_t expected_range[] = L\"ABAC1\";\n    wct.toupper(range, range + sizeof(range) / sizeof(wchar_t));\n    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );\n  }\n\n  //tolower\n  {\n    CPPUNIT_CHECK( wct.tolower(L'A') == L'a' );\n    CPPUNIT_CHECK( wct.tolower(L'a') == L'a' );\n    CPPUNIT_CHECK( wct.tolower(L'1') == L'1' );\n  }\n\n  //tolower range\n  {\n    wchar_t range[] = L\"ABaC1\";\n    wchar_t expected_range[] = L\"abac1\";\n    wct.tolower(range, range + sizeof(range) / sizeof(wchar_t));\n    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );\n  }\n\n  //widen\n  {\n    CPPUNIT_CHECK( wct.widen('a') == L'a' );\n  }\n\n  //widen range\n  {\n    char range[] = \"ABaC1\";\n    wchar_t res[sizeof(range)];\n    wchar_t expected_res[] = L\"ABaC1\";\n    wct.widen(range, range + sizeof(range), res);\n    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range), res) );\n  }\n\n  //narrow\n  {\n    CPPUNIT_CHECK( wct.narrow(L'a', 'b') == L'a' );\n  }\n\n  //narrow range\n  {\n    wchar_t range[] = L\"ABaC1\";\n    char res[sizeof(range) / sizeof(wchar_t)];\n    char expected_res[] = \"ABaC1\";\n    wct.narrow(range, range + sizeof(range) / sizeof(wchar_t), 'b', res);\n    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range) / sizeof(wchar_t), res) );\n  }\n# endif\n}\n\n\ntypedef void (LocaleTest::*_Test) (const locale&);\nstatic void test_supported_locale(LocaleTest& inst, _Test __test) {\n  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);\n  for (size_t i = 0; i < n; ++i) {\n    locale loc;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try\n#  endif\n    {\n      locale tmp(tested_locales[i]);\n      loc = tmp;\n    }\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n#  endif\n\n    CPPUNIT_MESSAGE( loc.name().c_str() );\n    (inst.*__test)(loc);\n\n    {\n      locale tmp(locale::classic(), tested_locales[i], locale::ctype);\n      loc = tmp;\n    }\n    (inst.*__test)(loc);\n\n    {\n      locale tmp(locale::classic(), new ctype_byname<char>(tested_locales[i]));\n#ifndef _STLP_NO_WCHAR_T\n      locale tmp0(tmp, new ctype_byname<wchar_t>(tested_locales[i]));\n      tmp = tmp0;\n#endif\n      loc = tmp;\n    }\n    (inst.*__test)(loc);\n  }\n}\n\nvoid LocaleTest::ctype_facet()\n{\n  test_supported_locale(*this, &LocaleTest::_ctype_facet);\n#ifndef _STLP_NO_WCHAR_T\n  test_supported_locale(*this, &LocaleTest::_ctype_facet_w);\n#endif\n}\n\nvoid LocaleTest::ctype_by_name()\n{\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#    if  defined (STLPORT) || (!defined(__GNUC__) && (!defined (_MSC_VER) || (_MSC_VER > 1400)))\n   // libstdc++ call freelocate on bad locale\n  try {\n    locale loc(locale::classic(), new ctype_byname<char>(static_cast<char const*>(0)));\n    CPPUNIT_ASSERT( false );\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_ASSERT( false );\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new ctype_byname<char>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if  defined(STLPORT) || !defined(__GNUC__)\n  try {\n    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(\"yasli_language\"));\n    //STLport implementation do not care about name pass to this facet.\n#    if !defined (STLPORT)\n    CPPUNIT_FAIL;\n#    endif\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new ctype_byname<char>(\"fr_FR\"));\n    CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );\n    ctype<char> const& ct = use_facet<ctype<char> >(loc);\n    CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '') );\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new ctype_byname<char>(\"C\"));\n    ctype<char> const& cfacet_byname = use_facet<ctype<char> >(loc);\n    ctype<char> const& cfacet = use_facet<ctype<char> >(locale::classic());\n\n    for (char c = 0;; ++c) {\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::space, c) == cfacet.is(ctype_base::space, c));\n      if (cfacet_byname.is(ctype_base::print, c) != cfacet.is(ctype_base::print, c))\n      {\n        CPPUNIT_CHECK(cfacet_byname.is(ctype_base::print, c) == cfacet.is(ctype_base::print, c));\n      }\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::cntrl, c) == cfacet.is(ctype_base::cntrl, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::upper, c) == cfacet.is(ctype_base::upper, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::lower, c) == cfacet.is(ctype_base::lower, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alpha, c) == cfacet.is(ctype_base::alpha, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::digit, c) == cfacet.is(ctype_base::digit, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::punct, c) == cfacet.is(ctype_base::punct, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::xdigit, c) == cfacet.is(ctype_base::xdigit, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alnum, c) == cfacet.is(ctype_base::alnum, c));\n      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::graph, c) == cfacet.is(ctype_base::graph, c));\n      if (c == 127) break;\n    }\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#      if  defined(STLPORT) || !defined(__GNUC__)\n  try {\n    locale loc(locale::classic(), new ctype_byname<wchar_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new ctype_byname<wchar_t>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#      if  defined(STLPORT) || !defined(__GNUC__)\n  try {\n    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ctype_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <ctype.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cwchar_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cwchar>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/cwctype_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <cwctype>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/deque_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <deque>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/deque_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <deque>\n#include <algorithm>\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n# include <stdexcept>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass DequeTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(DequeTest);\n  CPPUNIT_TEST(deque1);\n  CPPUNIT_TEST(at);\n  CPPUNIT_TEST(insert);\n  CPPUNIT_TEST(erase);\n  CPPUNIT_TEST(auto_ref);\n  CPPUNIT_TEST(allocator_with_state);\n#if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(optimizations_check);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void deque1();\n  void insert();\n  void erase();\n  void at();\n  void auto_ref();\n  void allocator_with_state();\n  void optimizations_check();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(DequeTest);\n\n//\n// tests implementation\n//\nvoid DequeTest::deque1()\n{\n  deque<int> d;\n  d.push_back(4);\n  d.push_back(9);\n  d.push_back(16);\n  d.push_front(1);\n\n  CPPUNIT_ASSERT( d[0] == 1 );\n  CPPUNIT_ASSERT( d[1] == 4 );\n  CPPUNIT_ASSERT( d[2] == 9 );\n  CPPUNIT_ASSERT( d[3] == 16 );\n\n  d.pop_front();\n  d[2] = 25;\n\n  CPPUNIT_ASSERT( d[0] == 4 );\n  CPPUNIT_ASSERT( d[1] == 9 );\n  CPPUNIT_ASSERT( d[2] == 25 );\n\n  //Some compile time tests:\n  deque<int>::iterator dit = d.begin();\n  deque<int>::const_iterator cdit(d.begin());\n  CPPUNIT_ASSERT( (dit - cdit) == 0 );\n  CPPUNIT_ASSERT( (cdit - dit) == 0 );\n  CPPUNIT_ASSERT( (dit - dit) == 0 );\n  CPPUNIT_ASSERT( (cdit - cdit) == 0 );\n  CPPUNIT_ASSERT(!((dit < cdit) || (dit > cdit) || (dit != cdit) || !(dit <= cdit) || !(dit >= cdit)));\n}\n\nvoid DequeTest::insert()\n{\n  deque<int> d;\n  d.push_back(0);\n  d.push_back(1);\n  d.push_back(2);\n  CPPUNIT_ASSERT( d.size() == 3 );\n\n  deque<int>::iterator dit;\n\n  //Insertion before begin:\n  dit = d.insert(d.begin(), 3);\n  CPPUNIT_ASSERT( dit != d.end() );\n  CPPUNIT_CHECK( *dit == 3 );\n  CPPUNIT_ASSERT( d.size() == 4 );\n  CPPUNIT_ASSERT( d[0] == 3 );\n\n  //Insertion after begin:\n  dit = d.insert(d.begin() + 1, 4);\n  CPPUNIT_ASSERT( dit != d.end() );\n  CPPUNIT_CHECK( *dit == 4 );\n  CPPUNIT_ASSERT( d.size() == 5 );\n  CPPUNIT_ASSERT( d[1] == 4 );\n\n  //Insertion at end:\n  dit = d.insert(d.end(), 5);\n  CPPUNIT_ASSERT( dit != d.end() );\n  CPPUNIT_CHECK( *dit == 5 );\n  CPPUNIT_ASSERT( d.size() == 6 );\n  CPPUNIT_ASSERT( d[5] == 5 );\n\n  //Insertion before last element:\n  dit = d.insert(d.end() - 1, 6);\n  CPPUNIT_ASSERT( dit != d.end() );\n  CPPUNIT_CHECK( *dit == 6 );\n  CPPUNIT_ASSERT( d.size() == 7 );\n  CPPUNIT_ASSERT( d[5] == 6 );\n\n  //Insertion of several elements before begin\n  d.insert(d.begin(), 2, 7);\n  CPPUNIT_ASSERT( d.size() == 9 );\n  CPPUNIT_ASSERT( d[0] == 7 );\n  CPPUNIT_ASSERT( d[1] == 7 );\n\n  //Insertion of several elements after begin\n  //There is more elements to insert than elements before insertion position\n  d.insert(d.begin() + 1, 2, 8);\n  CPPUNIT_ASSERT( d.size() == 11 );\n  CPPUNIT_ASSERT( d[1] == 8 );\n  CPPUNIT_ASSERT( d[2] == 8 );\n\n  //There is less elements to insert than elements before insertion position\n  d.insert(d.begin() + 3, 2, 9);\n  CPPUNIT_ASSERT( d.size() == 13 );\n  CPPUNIT_ASSERT( d[3] == 9 );\n  CPPUNIT_ASSERT( d[4] == 9 );\n\n  //Insertion of several elements at end:\n  d.insert(d.end(), 2, 10);\n  CPPUNIT_ASSERT( d.size() == 15 );\n  CPPUNIT_ASSERT( d[14] == 10 );\n  CPPUNIT_ASSERT( d[13] == 10 );\n\n  //Insertion of several elements before last:\n  //There is more elements to insert than elements after insertion position\n  d.insert(d.end() - 1, 2, 11);\n  CPPUNIT_ASSERT( d.size() == 17 );\n  CPPUNIT_ASSERT( d[15] == 11 );\n  CPPUNIT_ASSERT( d[14] == 11 );\n\n  //There is less elements to insert than elements after insertion position\n  d.insert(d.end() - 3, 2, 12);\n  CPPUNIT_ASSERT( d.size() == 19 );\n  CPPUNIT_ASSERT( d[15] == 12 );\n  CPPUNIT_ASSERT( d[14] == 12 );\n}\n\nvoid DequeTest::at() {\n  deque<int> d;\n  deque<int> const& cd = d;\n\n  d.push_back(10);\n  CPPUNIT_ASSERT( d.at(0) == 10 );\n  d.at(0) = 20;\n  CPPUNIT_ASSERT( cd.at(0) == 20 );\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  for (;;) {\n    try {\n      d.at(1) = 20;\n      CPPUNIT_ASSERT(false);\n    }\n    catch (out_of_range const&) {\n      return;\n    }\n    catch (...) {\n      CPPUNIT_ASSERT(false);\n    }\n  }\n#endif\n}\n\nvoid DequeTest::auto_ref()\n{\n  int i;\n  deque<int> ref;\n  for (i = 0; i < 5; ++i) {\n    ref.push_back(i);\n  }\n\n  deque<deque<int> > d_d_int(1, ref);\n  d_d_int.push_back(d_d_int[0]);\n  d_d_int.push_back(ref);\n  d_d_int.push_back(d_d_int[0]);\n  d_d_int.push_back(d_d_int[0]);\n  d_d_int.push_back(ref);\n\n  for (i = 0; i < 5; ++i) {\n    CPPUNIT_ASSERT( d_d_int[i] == ref );\n  }\n}\n\nvoid DequeTest::allocator_with_state()\n{\n  char buf1[1024];\n  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n  {\n    typedef deque<int, StackAllocator<int> > DequeInt;\n    DequeInt dint1(10, 0, stack1);\n    DequeInt dint1Cpy(dint1);\n\n    DequeInt dint2(10, 1, stack2);\n    DequeInt dint2Cpy(dint2);\n\n    dint1.swap(dint2);\n\n    CPPUNIT_ASSERT( dint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( dint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( dint1 == dint2Cpy );\n    CPPUNIT_ASSERT( dint2 == dint1Cpy );\n    CPPUNIT_ASSERT( dint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( dint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n}\n\nstruct Point {\n  int x, y;\n};\n\nstruct PointEx : public Point {\n  PointEx() : builtFromBase(false) {}\n  PointEx(const Point&) : builtFromBase(true) {}\n\n  bool builtFromBase;\n};\n\n#if defined (STLPORT)\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<PointEx> {\n    typedef __false_type has_trivial_default_constructor;\n    typedef __true_type has_trivial_copy_constructor;\n    typedef __true_type has_trivial_assignment_operator;\n    typedef __true_type has_trivial_destructor;\n    typedef __true_type is_POD_type;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\n//This test check that deque implementation do not over optimize\n//operation as PointEx copy constructor is trivial\nvoid DequeTest::optimizations_check()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  deque<Point> d1(1);\n  CPPUNIT_ASSERT( d1.size() == 1 );\n\n  deque<PointEx> d2(d1.begin(), d1.end());\n  CPPUNIT_ASSERT( d2.size() == 1 );\n  CPPUNIT_ASSERT( d2[0].builtFromBase == true );\n\n  d2.insert(d2.end(), d1.begin(), d1.end());\n  CPPUNIT_ASSERT( d2.size() == 2 );\n  CPPUNIT_ASSERT( d2[1].builtFromBase == true );\n#endif\n}\n\nvoid DequeTest::erase()\n{\n  deque<int> dint;\n  dint.push_back(3);\n  dint.push_front(2);\n  dint.push_back(4);\n  dint.push_front(1);\n  dint.push_back(5);\n  dint.push_front(0);\n  dint.push_back(6);\n\n  deque<int>::iterator it(dint.begin() + 1);\n  CPPUNIT_ASSERT( *it == 1 );\n\n  dint.erase(dint.begin());\n  CPPUNIT_ASSERT( *it == 1 );\n\n  it = dint.end() - 2;\n  CPPUNIT_ASSERT( *it == 5 );\n\n  dint.erase(dint.end() - 1);\n  CPPUNIT_ASSERT( *it == 5 );\n\n  dint.push_back(6);\n  dint.push_front(0);\n\n  it = dint.begin() + 2;\n  CPPUNIT_ASSERT( *it == 2 );\n\n  dint.erase(dint.begin(), dint.begin() + 2);\n  CPPUNIT_ASSERT( *it == 2 );\n\n  it = dint.end() - 3;\n  CPPUNIT_ASSERT( *it == 4 );\n\n  dint.erase(dint.end() - 2, dint.end());\n  CPPUNIT_ASSERT( *it == 4 );\n}\n\n#if (!defined (STLPORT) || \\\n    (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION))) && \\\n     (!defined (_MSC_VER) || (_MSC_VER > 1400)) && \\\n     (!defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC_MINOR__ < 3))\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  deque<IncompleteClass> instances;\n  typedef deque<IncompleteClass>::size_type size;\n};\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/divides_test.cpp",
    "content": "#include <numeric>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass DivideTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(DivideTest);\n  CPPUNIT_TEST(div);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void div();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(DivideTest);\n\n//\n// tests implementation\n//\nvoid DivideTest::div()\n{\n  int input [3] = { 2, 3, 4 };\n  int result = accumulate(input, input + 3, 48, divides<int>());\n  CPPUNIT_ASSERT(result==2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/epilog_test.cpp",
    "content": "#include <time.h>\n#include <string>\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\n\nstruct some_struct {\n    std::string s; // if std not properly redefined, error will be here\n};\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/equal_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass EqualTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(EqualTest);\n  CPPUNIT_TEST(equal_range0);\n  CPPUNIT_TEST(equal_range1);\n  CPPUNIT_TEST(equal_range2);\n  CPPUNIT_TEST(equal0);\n  CPPUNIT_TEST(equal1);\n  CPPUNIT_TEST(equal2);\n  CPPUNIT_TEST(equalto);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void equal_range0();\n  void equal_range1();\n  void equal_range2();\n  void equal0();\n  void equal1();\n  void equal2();\n  void equalto();\n  static bool values_squared(int a_, int b_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(EqualTest);\n\n//\n// tests implementation\n//\nvoid EqualTest::equal_range0()\n{\n  int numbers[10] = { 0, 0, 1, 1, 2, 2, 2, 2, 3, 3 };\n  pair<int*, int*> range = equal_range((int*)numbers, (int*)numbers + 10, 2);\n  CPPUNIT_ASSERT( (range.first - numbers) == 4 );\n  CPPUNIT_ASSERT( (range.second - numbers) == 8 );\n}\n\nvoid EqualTest::equal_range1()\n{\n  typedef vector <int> IntVec;\n  IntVec v(10);\n  for (int i = 0; (size_t)i < v.size(); ++i)\n    v[i] = i / 3;\n\n  pair<IntVec::iterator, IntVec::iterator> range = equal_range(v.begin(), v.end(), 2);\n  CPPUNIT_ASSERT( (range.first - v.begin()) == 6 );\n  CPPUNIT_ASSERT( (range.second - v.begin()) == 9 );\n  for (; range.first != range.second; ++range.first)\n    CPPUNIT_ASSERT( *range.first == 2 );\n\n  range = equal_range(v.begin(), v.end(), 4);\n  CPPUNIT_ASSERT( range.first == range.second );\n  CPPUNIT_ASSERT( range.first == v.end() );\n}\n\nstruct Test {\n#if defined (__DMC__)\n  Test();\n#endif\n\n  Test(int val) : value(val) {}\n  int value;\n\n  bool operator == (int i) const\n  { return value == i; }\n};\n\nbool operator < (const Test& v1, int v2)\n{ return v1.value < v2; }\n\nbool operator < (int v1, const Test& v2)\n{ return v1 < v2.value; }\n\n#if defined (_MSC_VER) && !defined (STLPORT)\nbool operator < (const Test& v1, const Test& v2)\n{ return v1.value < v2.value; }\n#endif\n\nvoid EqualTest::equal_range2()\n{\n  char chars[] = \"aabbccddggghhklllmqqqqssyyzz\";\n\n  const unsigned count = sizeof(chars) - 1;\n  pair<char*, char*> range = equal_range((char*)chars, (char*)chars + count, 'q', less<char>());\n  CPPUNIT_ASSERT( (range.first - chars) == 18 );\n  CPPUNIT_ASSERT( (range.second - chars) == 22 );\n  for (; range.first != range.second; ++range.first)\n    CPPUNIT_ASSERT( *range.first == 'q' );\n\n  range = equal_range((char*)chars, (char*)chars + count, 'm', less<char>());\n  CPPUNIT_ASSERT( (range.second - range.first) == 1 );\n  CPPUNIT_ASSERT( *range.first == 'm' );\n\n  vector<Test> tv;\n  vector<Test>::iterator it;\n  pair<vector<Test>::iterator, vector<Test>::iterator> p;\n\n  for (int i = 0; i < 10; ++i) {\n    tv.push_back(i);\n  }\n\n  it = upper_bound(tv.begin(), tv.end(), 5);\n  CPPUNIT_ASSERT( it != tv.end() );\n  CPPUNIT_ASSERT( *it == 6 );\n\n  it = lower_bound(tv.begin(), tv.end(), 5);\n  CPPUNIT_ASSERT( it != tv.end() );\n  CPPUNIT_ASSERT( *it == 5 );\n\n  p = equal_range(tv.begin(), tv.end(), 5);\n  CPPUNIT_ASSERT( p.first != p.second );\n  CPPUNIT_ASSERT( p.first != tv.end() );\n  CPPUNIT_ASSERT( p.second != tv.end() );\n  CPPUNIT_ASSERT( *p.first == 5 );\n  CPPUNIT_ASSERT( *p.second == 6 );\n}\n\nvoid EqualTest::equal0()\n{\n  int numbers1[5] = { 1, 2, 3, 4, 5 };\n  int numbers2[5] = { 1, 2, 4, 8, 16 };\n  int numbers3[2] = { 1, 2 };\n\n  CPPUNIT_ASSERT( !equal(numbers1, numbers1 + 5, numbers2) );\n  CPPUNIT_ASSERT( equal(numbers3, numbers3 + 2, numbers1) );\n}\n\nvoid EqualTest::equal1()\n{\n  vector <int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i;\n  vector <int> v2(10);\n  CPPUNIT_ASSERT( !equal(v1.begin(), v1.end(), v2.begin()) );\n\n  copy(v1.begin(), v1.end(), v2.begin());\n  CPPUNIT_ASSERT( equal(v1.begin(), v1.end(), v2.begin()) )\n}\n\nvoid EqualTest::equal2()\n{\n  vector <int> v1(10);\n  vector <int> v2(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i) {\n    v1[i] = i;\n    v2[i] = i * i;\n  }\n  CPPUNIT_ASSERT( equal(v1.begin(), v1.end(), v2.begin(), values_squared) );\n}\n\nvoid EqualTest::equalto()\n{\n  int input1 [4] = { 1, 7, 2, 2 };\n  int input2 [4] = { 1, 6, 2, 3 };\n\n  int output [4];\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, equal_to<int>());\n  CPPUNIT_ASSERT( output[0] == 1 );\n  CPPUNIT_ASSERT( output[1] == 0 );\n  CPPUNIT_ASSERT( output[2] == 1 );\n  CPPUNIT_ASSERT( output[3] == 0 );\n}\n\nbool EqualTest::values_squared(int a_, int b_)\n{\n  return (a_ * a_ == b_);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/errno_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <errno.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/exception_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <exception>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/exception_test.cpp",
    "content": "#include <exception>\n#include <stdexcept>\n#include <string>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined (STLPORT) && defined (_STLP_USE_NAMESPACES)\n/*\n * This test case purpose is to check that the exception handling\n * functions are correctly imported to the STLport namespace only\n * if they have a right behavior.\n * Otherwise they are not imported to report the problem as a compile\n * time error.\n */\n\n//\n// TestCase class\n//\nclass ExceptionTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ExceptionTest);\n#if defined (STLPORT) && !defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(what);\n#if defined (STLPORT) && defined (_STLP_NO_UNEXPECTED_EXCEPT_SUPPORT)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(unexpected_except);\n#if defined (STLPORT) && defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_STOP_IGNORE;\n#endif\n#if defined (STLPORT) && defined (_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(uncaught_except);\n#if defined (STLPORT) && defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_STOP_IGNORE;\n#endif\n  CPPUNIT_TEST(exception_emission);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void what();\n  void unexpected_except();\n  void uncaught_except();\n  void exception_emission();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ExceptionTest);\n\n#if !defined (STLPORT) || !defined (_STLP_NO_UNEXPECTED_EXCEPT_SUPPORT)\nbool g_unexpected_called = false;\nvoid unexpected_hdl() {\n  g_unexpected_called = true;\n  throw std::bad_exception();\n}\n\nstruct special_except {};\nvoid throw_func() {\n  throw special_except();\n}\n\nvoid throw_except_func() throw(std::exception) {\n  throw_func();\n}\n#endif\n\nvoid ExceptionTest::what()\n{\n  try {\n    throw std::runtime_error( std::string( \"message\" ) );\n  }\n  catch ( std::runtime_error& err ) {\n    CPPUNIT_CHECK( strcmp( err.what(), \"message\" ) == 0 );\n  }\n}\n\nvoid ExceptionTest::unexpected_except()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_UNEXPECTED_EXCEPT_SUPPORT)\n  std::unexpected_handler hdl = &unexpected_hdl;\n  std::set_unexpected(hdl);\n\n  try {\n    throw_except_func();\n  }\n  catch (std::bad_exception const&) {\n    CPPUNIT_ASSERT( true );\n  }\n  catch (special_except) {\n    CPPUNIT_ASSERT( false );\n  }\n  CPPUNIT_ASSERT( g_unexpected_called );\n#endif\n}\n\n#if !defined (STLPORT) || !defined (_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT)\nstruct UncaughtClassTest\n{\n  UncaughtClassTest(int &res) : _res(res)\n  {}\n\n  ~UncaughtClassTest() {\n    _res = std::uncaught_exception()?1:0;\n  }\n\n  int &_res;\n};\n#endif\n\nvoid ExceptionTest::uncaught_except()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_UNCAUGHT_EXCEPT_SUPPORT)\n  int uncaught_result = -1;\n  {\n    UncaughtClassTest test_inst(uncaught_result);\n    CPPUNIT_ASSERT( uncaught_result == -1 );\n  }\n  CPPUNIT_ASSERT( uncaught_result == 0 );\n\n  {\n    try {\n      uncaught_result = -1;\n      UncaughtClassTest test_inst(uncaught_result);\n      throw \"exception\";\n    }\n    catch (...) {\n    }\n  }\n  CPPUNIT_ASSERT( uncaught_result == 1 );\n#endif\n}\n\nvoid ExceptionTest::exception_emission()\n{\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  std::string foo = \"foo\";\n  try {\n    throw std::runtime_error(foo);\n  }\n  catch (std::runtime_error const& e) {\n    CPPUNIT_ASSERT( foo == e.what() );\n    std::runtime_error clone(\"\");\n    clone = e;\n    CPPUNIT_ASSERT(foo == clone.what() );\n  }\n  catch (...) {\n    CPPUNIT_ASSERT( false );\n  }\n\n  try {\n    throw std::runtime_error(foo);\n  }\n  catch (std::runtime_error e) {\n    CPPUNIT_ASSERT( foo == e.what() );\n    std::runtime_error clone(\"\");\n    clone = e;\n    CPPUNIT_ASSERT(foo == clone.what() );\n  }\n  catch (...) {\n    CPPUNIT_ASSERT( false );\n  }\n\n  std::string msg(512, 'a');\n  try {\n    throw std::runtime_error(msg);\n  }\n  catch (std::runtime_error const& e) {\n    CPPUNIT_ASSERT(msg == e.what() );\n    std::runtime_error clone(\"\");\n    clone = e;\n    CPPUNIT_ASSERT(msg == clone.what() );\n  }\n  catch (...) {\n    CPPUNIT_ASSERT( false );\n  }\n\n  try {\n    throw std::runtime_error(msg);\n  }\n  catch (std::runtime_error e) {\n    CPPUNIT_ASSERT(msg == e.what() );\n    std::runtime_error clone(\"\");\n    clone = e;\n    CPPUNIT_ASSERT(msg == clone.what() );\n  }\n  catch (...) {\n    CPPUNIT_ASSERT( false );\n  }\n#endif\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/fadapter.h",
    "content": "#ifndef _fadapter_h_\n#define _fadapter_h_\n\n#include <functional>\n\n// used as adaptor's return/argument type,\n// to allow binders/composers usage\nstruct __void_tag {};\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nusing std::unary_function;\n#endif\n\ntemplate <class Result>\nclass pointer_to_void_function {\nprotected:\n  Result (*ptr)();\npublic:\n  explicit pointer_to_void_function(Result (*x)()) : ptr(x) {}\n  Result operator()() const { return ptr(); }\n  Result operator()(__void_tag) const { return ptr(); }\n};\n\n// to feed composers\ntemplate <class Arg1>\nstruct projectvoid : public unary_function<Arg1,__void_tag> {\n  __void_tag operator()(const Arg1& x) const { return __void_tag(); }\n};\n\n#if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)\n\ntemplate <class Result>\npointer_to_void_function<Result> ptr_fun(Result (*x)()) {\n  return pointer_to_void_function<Result>(x);\n}\n\n// alternate name\ntemplate <class Result>\npointer_to_void_function<Result> ptr_gen(Result (*x)()) {\n  return pointer_to_void_function<Result>(x);\n}\n\n#endif /*  !defined (_STLP_MEMBER_POINTER_PARAM_BUG) */\n\ntemplate <class Arg>\nclass pointer_to_unary_procedure /* :public unary_function<Arg, __void_tag> */ {\nprotected:\n  typedef void (*fun_type)(Arg);\n  fun_type ptr;\npublic:\n  typedef Arg argument_type;\n  pointer_to_unary_procedure() {}\n  pointer_to_unary_procedure(fun_type x) : ptr(x) {}\n  void operator() (Arg x) const { ptr(x); }\n};\n\ntemplate <class Arg>\ninline pointer_to_unary_procedure<Arg> ptr_proc(void (*x)(Arg)) {\n  return pointer_to_unary_procedure<Arg>(x);\n}\n\ntemplate <class Arg1, class Arg2>\nclass pointer_to_binary_procedure /* : public unary_function<Arg1, Arg2, __void_tag> */ {\nprotected:\n  typedef void (*fun_type)(Arg1, Arg2);\n  fun_type ptr;\npublic:\n  typedef Arg1 first_argument_type;\n  typedef Arg2 second_argument_type;\n  pointer_to_binary_procedure() {}\n  pointer_to_binary_procedure(fun_type x) : ptr(x) {}\n  void operator() (Arg1 x, Arg2 y) const { ptr(x, y); }\n};\n\ntemplate <class Arg1, class Arg2>\ninline pointer_to_binary_procedure<Arg1, Arg2> ptr_proc(void (*x)(Arg1, Arg2)) {\n  return pointer_to_binary_procedure<Arg1, Arg2>(x);\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/fib.h",
    "content": "#ifndef _fib_h\n#define _fib_h\nclass Fibonacci\n{\n  public:\n    Fibonacci() : v1(0), v2(1) {}\n    inline int operator()();\n  private:\n    int v1;\n    int v2;\n};\n\ninline int\nFibonacci::operator()()\n{\n  int r = v1 + v2;\n  v1 = v2;\n  v2 = r;\n  return v1;\n}\n#endif // _fib_h\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/fill_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass FillTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(FillTest);\n  CPPUNIT_TEST(fill1);\n  CPPUNIT_TEST(filln1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void fill1();\n  void filln1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(FillTest);\n\n//\n// tests implementation\n//\nvoid FillTest::fill1()\n{\n  vector <int> v(10);\n  fill(v.begin(), v.end(), 42);\n\n  CPPUNIT_ASSERT(v[0]==42);\n  CPPUNIT_ASSERT(v[1]==42);\n  CPPUNIT_ASSERT(v[2]==42);\n  CPPUNIT_ASSERT(v[3]==42);\n  CPPUNIT_ASSERT(v[4]==42);\n  CPPUNIT_ASSERT(v[5]==42);\n  CPPUNIT_ASSERT(v[6]==42);\n  CPPUNIT_ASSERT(v[7]==42);\n  CPPUNIT_ASSERT(v[8]==42);\n  CPPUNIT_ASSERT(v[9]==42);\n}\nvoid FillTest::filln1()\n{\n  vector <int> v(10);\n  fill_n(v.begin(), v.size(), 42);\n\n  CPPUNIT_ASSERT(v[0]==42);\n  CPPUNIT_ASSERT(v[1]==42);\n  CPPUNIT_ASSERT(v[2]==42);\n  CPPUNIT_ASSERT(v[3]==42);\n  CPPUNIT_ASSERT(v[4]==42);\n  CPPUNIT_ASSERT(v[5]==42);\n  CPPUNIT_ASSERT(v[6]==42);\n  CPPUNIT_ASSERT(v[7]==42);\n  CPPUNIT_ASSERT(v[8]==42);\n  CPPUNIT_ASSERT(v[9]==42);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/find_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass FindTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(FindTest);\n  CPPUNIT_TEST(find0);\n  CPPUNIT_TEST(find1);\n  CPPUNIT_TEST(findif0);\n  CPPUNIT_TEST(findif1);\n  CPPUNIT_TEST(find_char);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void find0();\n  void find1();\n  void findif0();\n  void findif1();\n  void find_char();\n  static bool odd(int a_);\n  static bool div_3(int a_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(FindTest);\n\n//\n// tests implementation\n//\nvoid FindTest::find0()\n{\n  int numbers[10] = { 0, 1, 4, 9, 16, 25, 36, 49, 64 };\n\n  int *location = find((int*)numbers, (int*)numbers + 10, 25);\n\n  CPPUNIT_ASSERT((location - numbers)==5);\n\n  int *out_range = find((int*)numbers, (int*)numbers + 10, 128);\n\n  CPPUNIT_ASSERT( out_range == (int *)(numbers + 10) );\n}\n\nstruct Key\n{\n  int data;\n\n  /* This operator should rather be global and commutative\n     but implementing it this way show that STLport used to\n     ask too much from the user code. */\n  bool operator == (int d) const\n  {\n    return data == d;\n  }\n};\n\nvoid FindTest::find1()\n{\n  int years[] = { 1942, 1952, 1962, 1972, 1982, 1992 };\n\n  const unsigned yearCount = sizeof(years) / sizeof(years[0]);\n  int* location = find((int*)years, (int*)years + yearCount, 1972);\n\n  CPPUNIT_ASSERT((location - years)==3);\n}\n\nvoid FindTest::findif0()\n{\n  {\n    int numbers[6] = { 2, 4, 8, 15, 32, 64 };\n    int *location = find_if((int*)numbers, (int*)numbers + 6, odd);\n\n    CPPUNIT_ASSERT((location - numbers)==3);\n\n    int numbers_even[6] = { 2, 4, 8, 16, 32, 64 };\n\n    int *out_range = find_if((int*)numbers_even, (int*)numbers_even + 6, odd);\n\n    CPPUNIT_ASSERT( out_range == (int *)(numbers_even + 6) );\n  }\n\n  {\n    Key keys[10] = { {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0} };\n    Key const* k = find(keys + 0, keys + 10, 5);\n    CPPUNIT_ASSERT( k == keys + 10 );\n  }\n}\n\nvoid FindTest::findif1()\n{\n  typedef vector <int> IntVec;\n  IntVec v(10);\n  for(int i = 0; (size_t)i < v.size(); ++i)\n    v[i] =(i + 1) *(i + 1);\n  IntVec::iterator iter;\n  iter = find_if(v.begin(), v.end(), div_3);\n  CPPUNIT_ASSERT((iter - v.begin())==2);\n}\n\nbool FindTest::odd(int a_)\n{\n  return (a_ % 2) != 0;\n}\n\nbool FindTest::div_3(int a_)\n{\n  return a_ % 3 ? 0 : 1;\n}\n\nvoid FindTest::find_char()\n{\n  char str[] = \"abcdefghij\";\n  char *pstr = (char*)str;\n  const char* cpstr = (const char*)str;\n  size_t str_size = sizeof(str) / sizeof(char);\n\n  char *d = find(pstr, pstr + str_size, 'd');\n  CPPUNIT_ASSERT( *d == 'd' );\n\n  const char *e = find(cpstr, cpstr + str_size, 'e');\n  CPPUNIT_ASSERT( *e == 'e' );\n\n  char *last = find(pstr, pstr + str_size, 'x');\n  CPPUNIT_ASSERT( last == pstr + str_size );\n\n  const char *clast = find(cpstr, cpstr + str_size, 'x');\n  CPPUNIT_ASSERT( clast == cpstr + str_size );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/finsert_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <deque>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass FinsertTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(FinsertTest);\n  CPPUNIT_TEST(finsert1);\n  CPPUNIT_TEST(finsert2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void finsert1();\n  void finsert2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(FinsertTest);\n\n//\n// tests implementation\n//\nvoid FinsertTest::finsert1()\n{\n  char const* array [] = { \"laurie\", \"jennifer\", \"leisa\" };\n  deque<char const*> names;\n  front_insert_iterator<deque<char const*> > fit(names);\n  fit = copy(array, array + 3, front_insert_iterator<deque <char const*> >(names));\n\n  CPPUNIT_ASSERT(names[0]==array[2]);\n  CPPUNIT_ASSERT(names[1]==array[1]);\n  CPPUNIT_ASSERT(names[2]==array[0]);\n\n  copy(array, array + 3, fit);\n  CPPUNIT_ASSERT(names[3]==array[2]);\n  CPPUNIT_ASSERT(names[4]==array[1]);\n  CPPUNIT_ASSERT(names[5]==array[0]);\n}\n\nvoid FinsertTest::finsert2()\n{\n  char const* array [] = { \"laurie\", \"jennifer\", \"leisa\" };\n\n  deque<char const*> names;\n  copy(array, array + 3, front_inserter(names));\n\n  CPPUNIT_ASSERT(names[0]==array[2]);\n  CPPUNIT_ASSERT(names[1]==array[1]);\n  CPPUNIT_ASSERT(names[2]==array[0]);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/float_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <float.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/foreach_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include \"fadapter.h\"\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ForeachTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ForeachTest);\n  CPPUNIT_TEST(foreach0);\n  CPPUNIT_TEST(foreach1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void foreach0();\n  void foreach1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ForeachTest);\n\n//\n// tests implementation\n//\nstatic void increase(int& a_)\n{\n  a_ += 1;\n}\nvoid ForeachTest::foreach0()\n{\n  int numbers[10] = { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 };\n\n  for_each(numbers, numbers + 10, ptr_fun(increase));\n\n  CPPUNIT_ASSERT(numbers[0]==2);\n  CPPUNIT_ASSERT(numbers[1]==2);\n  CPPUNIT_ASSERT(numbers[2]==3);\n  CPPUNIT_ASSERT(numbers[3]==4);\n  CPPUNIT_ASSERT(numbers[4]==6);\n  CPPUNIT_ASSERT(numbers[5]==9);\n  CPPUNIT_ASSERT(numbers[6]==14);\n  CPPUNIT_ASSERT(numbers[7]==22);\n  CPPUNIT_ASSERT(numbers[8]==35);\n  CPPUNIT_ASSERT(numbers[9]==56);\n}\nstatic void sqr(int& a_)\n{\n  a_ = a_ * a_;\n}\nvoid ForeachTest::foreach1()\n{\n  vector<int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i;\n  for_each(v1.begin(), v1.end(), ptr_fun(sqr) );\n\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==4);\n  CPPUNIT_ASSERT(v1[3]==9);\n  CPPUNIT_ASSERT(v1[4]==16);\n  CPPUNIT_ASSERT(v1[5]==25);\n  CPPUNIT_ASSERT(v1[6]==36);\n  CPPUNIT_ASSERT(v1[7]==49);\n  CPPUNIT_ASSERT(v1[8]==64);\n  CPPUNIT_ASSERT(v1[9]==81);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/fstream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <fstream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/fstream_test.cpp",
    "content": "#include <string>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <fstream>\n#  include <iostream>\n#  include <iomanip>\n#  include <sstream>\n#  include <vector>\n#  include <stdexcept>\n\n#include <stdio.h>\n\n#  include \"full_streambuf.h\"\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//The macro value gives approximately the generated file\n//size in Go\n//#define CHECK_BIG_FILE 4\n\n#  if (!defined(STLPORT) && (defined (__GNUC__) && (__GNUC__ > 3))) || \\\n      (defined (STLPORT) && !defined (_STLP_NO_CUSTOM_IO) && !defined (_STLP_NO_MEMBER_TEMPLATES) && \\\n                            !((defined (_STLP_MSVC) && (_STLP_MSVC < 1300)) || \\\n                              (defined (__GNUC__) && (__GNUC__ < 3)) || \\\n                              (defined (__SUNPRO_CC)) || \\\n                              (defined (__DMC__) && defined (_DLL))))\n#    define DO_CUSTOM_FACET_TEST\n#  endif\n\n//\n// TestCase class\n//\nclass FstreamTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(FstreamTest);\n  CPPUNIT_TEST(output);\n  CPPUNIT_TEST(input);\n  CPPUNIT_TEST(input_char);\n  CPPUNIT_TEST(io);\n  CPPUNIT_TEST(err);\n  CPPUNIT_TEST(tellg);\n  CPPUNIT_TEST(tellp);\n  CPPUNIT_TEST(seek);\n  CPPUNIT_TEST(buf);\n  CPPUNIT_TEST(rdbuf);\n  CPPUNIT_TEST(streambuf_output);\n  CPPUNIT_TEST(win32_file_format);\n  CPPUNIT_TEST(null_stream);\n#  if defined (STLPORT) && (defined (_STLP_NO_WCHAR_T) || !defined (_STLP_USE_EXCEPTIONS))\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(null_buf);\n#  if !defined (STLPORT) || !defined (_STLP_WIN32)\n  CPPUNIT_TEST(offset);\n#  endif\n#  if defined (CHECK_BIG_FILE)\n  CPPUNIT_TEST(big_file);\n#  endif\n#  if !defined (DO_CUSTOM_FACET_TEST)\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(custom_facet);\n  CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void output();\n    void input();\n    void input_char();\n    void io();\n    void err();\n    void tellg();\n    void tellp();\n    void seek();\n    void buf();\n    void rdbuf();\n    void streambuf_output();\n    void win32_file_format();\n    void null_stream();\n    void null_buf();\n#  if !defined (STLPORT) || !defined (_STLP_WIN32)\n    void offset();\n#  endif\n    void custom_facet();\n#  if defined (CHECK_BIG_FILE)\n    void big_file();\n#  endif\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(FstreamTest);\n\n//\n// tests implementation\n//\nvoid FstreamTest::output()\n{\n  ofstream f( \"test_file.txt\" );\n\n#if 1\n  CPPUNIT_ASSERT (f.good());\n  f << 1;\n  CPPUNIT_ASSERT (f.good());\n  f << '\\n';\n  CPPUNIT_ASSERT (f.good());\n  f << 2.0;\n  CPPUNIT_ASSERT (f.good());\n  f << '\\n';\n  CPPUNIT_ASSERT (f.good());\n  f << \"abcd\\n\";\n  CPPUNIT_ASSERT (f.good());\n  f << \"ghk lm\\n\";\n  CPPUNIT_ASSERT (f.good());\n  f << \"abcd ef\";\n  CPPUNIT_ASSERT (f.good());\n#else\n  f << 1 << '\\n' << 2.0 << '\\n' << \"abcd\\n\" << \"ghk lm\\n\" << \"abcd ef\";\n  CPPUNIT_ASSERT (f.good());\n#endif\n  // CPPUNIT_ASSERT( s.str() == \"1\\n2\\nabcd\\nghk lm\\nabcd ef\" );\n}\n\nvoid FstreamTest::input()\n{\n  {\n    ifstream f( \"test_file.txt\" );\n    int i = 0;\n    f >> i;\n    CPPUNIT_ASSERT( f.good() );\n    CPPUNIT_ASSERT( i == 1 );\n    double d = 0.0;\n    f >> d;\n    CPPUNIT_ASSERT( f.good() );\n    CPPUNIT_ASSERT( d == 2.0 );\n    string str;\n    f >> str;\n    CPPUNIT_ASSERT( f.good() );\n    CPPUNIT_ASSERT( str == \"abcd\" );\n    char c;\n    f.get(c); // extract newline, that not extracted by operator >>\n    CPPUNIT_ASSERT( f.good() );\n    CPPUNIT_ASSERT( c == '\\n' );\n    getline( f, str );\n    CPPUNIT_ASSERT( f.good() );\n    CPPUNIT_ASSERT( str == \"ghk lm\" );\n    getline( f, str );\n    CPPUNIT_ASSERT( f.eof() );\n    CPPUNIT_ASSERT( str == \"abcd ef\" );\n  }\n#if defined (STLPORT) && !defined (_STLP_USE_WIN32_IO)\n  {\n    ifstream in(\"/tmp\");\n    if (in.good()) {\n      string s;\n      getline(in, s);\n      CPPUNIT_ASSERT( in.fail() );\n    }\n  }\n#endif\n}\n\nvoid FstreamTest::input_char()\n{\n  char buf[16] = { 0, '1', '2', '3' };\n  ifstream s( \"test_file.txt\" );\n  s >> buf;\n\n  CPPUNIT_ASSERT( buf[0] == '1' );\n  CPPUNIT_ASSERT( buf[1] == 0 );\n  CPPUNIT_ASSERT( buf[2] == '2' );\n}\n\nvoid FstreamTest::io()\n{\n  basic_fstream<char,char_traits<char> > f( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::trunc );\n\n  CPPUNIT_ASSERT( f.is_open() );\n\n  f << 1 << '\\n' << 2.0 << '\\n' << \"abcd\\n\" << \"ghk lm\\n\" << \"abcd ef\";\n\n  // f.flush();\n  f.seekg( 0, ios_base::beg );\n\n  int i = 0;\n  f >> i;\n  CPPUNIT_ASSERT( f.good() );\n  CPPUNIT_ASSERT( i == 1 );\n  double d = 0.0;\n  f >> d;\n  CPPUNIT_ASSERT( d == 2.0 );\n  string s;\n  f >> s;\n  CPPUNIT_ASSERT( f.good() );\n  CPPUNIT_ASSERT( s == \"abcd\" );\n  char c;\n  f.get(c); // extract newline, that not extracted by operator >>\n  CPPUNIT_ASSERT( f.good() );\n  CPPUNIT_ASSERT( c == '\\n' );\n  getline( f, s );\n  CPPUNIT_ASSERT( f.good() );\n  CPPUNIT_ASSERT( s == \"ghk lm\" );\n  getline( f, s );\n  CPPUNIT_ASSERT( !f.fail() );\n  CPPUNIT_ASSERT( s == \"abcd ef\" );\n  CPPUNIT_ASSERT( f.eof() );\n}\n\nvoid FstreamTest::err()\n{\n  basic_fstream<char,char_traits<char> > f( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::trunc );\n\n  CPPUNIT_ASSERT( f.is_open() );\n\n  int i = 9;\n  f << i;\n  CPPUNIT_ASSERT( f.good() );\n  i = 0;\n  f.seekg( 0, ios_base::beg );\n  f >> i;\n  CPPUNIT_ASSERT( !f.fail() );\n  CPPUNIT_ASSERT( i == 9 );\n  f >> i;\n  CPPUNIT_ASSERT( f.fail() );\n  CPPUNIT_ASSERT( f.eof() );\n  CPPUNIT_ASSERT( i == 9 );\n}\n\nvoid FstreamTest::tellg()\n{\n  {\n    // bogus ios_base::binary is for Wins\n    ofstream of(\"test_file.txt\", ios_base::out | ios_base::binary | ios_base::trunc);\n    CPPUNIT_ASSERT( of.is_open() );\n\n    for (int i = 0; i < 50; ++i) {\n      of << \"line \" << setiosflags(ios_base::right) << setfill('0') << setw(2) << i << \"\\n\";\n      CPPUNIT_ASSERT( !of.fail() );\n    }\n    of.close();\n  }\n\n  {\n    // bogus ios_base::binary is for Wins\n    ifstream is(\"test_file.txt\", ios_base::in | ios_base::binary);\n    CPPUNIT_ASSERT( is.is_open() );\n    char buf[64];\n\n    // CPPUNIT_ASSERT( is.tellg() == 0 );\n    streampos p = 0;\n    for (int i = 0; i < 50; ++i) {\n      is.read(buf, 0);\n      CPPUNIT_ASSERT( is.gcount() == 0 );\n      CPPUNIT_ASSERT( is.tellg() == p );\n      is.read( buf, 8 );\n      CPPUNIT_ASSERT( !is.fail() );\n      CPPUNIT_ASSERT( is.gcount() == 8 );\n      p += 8;\n    }\n  }\n\n  {\n    // bogus ios_base::binary is for Wins\n    ifstream is(\"test_file.txt\", ios_base::in | ios_base::binary);\n    CPPUNIT_ASSERT( is.is_open() );\n\n    streampos p = 0;\n    for (int i = 0; i < 50; ++i) {\n      CPPUNIT_ASSERT( !is.fail() );\n      is.tellg();\n      CPPUNIT_ASSERT( is.tellg() == p );\n      p += 8;\n      is.seekg( p, ios_base::beg  );\n      CPPUNIT_ASSERT( !is.fail() );\n    }\n  }\n\n  {\n    // bogus ios_base::binary is for Wins\n    ifstream is(\"test_file.txt\", ios_base::in | ios_base::binary);\n    CPPUNIT_ASSERT( is.is_open() );\n\n    streampos p = 0;\n    for (int i = 0; i < 50; ++i) {\n      CPPUNIT_ASSERT( is.tellg() == p );\n      p += 8;\n      is.seekg( 8, ios_base::cur );\n      CPPUNIT_ASSERT( !is.fail() );\n    }\n  }\n}\n\nvoid FstreamTest::tellp()\n{\n  {\n    ofstream o( \"test_file.txt\" );\n\n    o << \"123456\";\n\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == ofstream::pos_type(6) );\n    CPPUNIT_CHECK( o.tellp() == ofstream::pos_type(6) );\n  }\n  {\n    ofstream o( \"test_file.txt\" );\n\n    o << \"123456789\";\n\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == ofstream::pos_type(9) );\n    CPPUNIT_CHECK( o.tellp() == ofstream::pos_type(9) );\n  }\n  /* According to the standard\n     ofstream o( \"test_file.txt\", ios_base::app | ios_base::out )\n     should give the same effect as fopen( \"test_file.txt\", \"a\" ).\n     Problem is fopen( \"test_file.txt\", \"a\" ) has a bit different behaviour\n     on different platforms, and this difference is not covered by specification.\n     After fopen( \"test_file.txt\", \"a\" ) in this context ftell( f ) == 9 for\n     Linux and Mac OS X (I expect the same for others POSIX-like platforms too);\n     on Windows (independently from version?) ftell( f ) == 0, i.e. write pointer not\n     shifted to EOF (but shifted to EOF just before write, as described in the specs).\n\n     It isn't specifications violation, neither for Linux and Mac OS X nor for Windows.\n\n     The code below is intended to demonstrate ambiguity (dependance from fopen implementation).\n   */\n  {\n    #ifdef WIN32\n    //In Windows, stlport and fopen use kernel32.CreateFile for open.\n    //File position is at BOF after open, unless we open with ios_base::ate\n    long expected_pos = 0;\n    #else\n    //On UNIX flavours, stlport and fopen use unix's open\n    //File position is at EOF after open\n    //\n    //3rd possible scenario, \"other platforms\" - _STLP_USE_STDIO_IO\n    //stlport uses fopen here. This case may fail this test, since the file position after\n    //fopen is implementation-dependent\n    long expected_pos = 9;\n    #endif\n    ofstream o( \"test_file.txt\", ios_base::app | ios_base::out );\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == ofstream::pos_type(expected_pos) );\n    CPPUNIT_CHECK( o.tellp() == ofstream::pos_type(expected_pos) );\n  }\n  { // for reference, to test fopen/ftell behaviour in append mode:\n    #ifdef WIN32\n    long expected_pos = 0;\n    #else\n    long expected_pos = 9;\n    #endif\n    FILE* f = fopen( \"test_file.txt\", \"a\" );\n    CPPUNIT_ASSERT( f != NULL );\n    CPPUNIT_CHECK( ftell( f ) == expected_pos );\n    fclose( f );\n  }\n  {\n    //In append mode, file is positioned at EOF just before a write.\n    // After a write, file is at EOF. This is implementation-independent.\n    ofstream o( \"test_file.txt\", ios_base::app | ios_base::out );\n    o << \"X\";\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == ofstream::pos_type(10) );\n    CPPUNIT_CHECK( o.tellp() == ofstream::pos_type(10) );\n  }\n}\n\nvoid FstreamTest::buf()\n{\n  fstream ss( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );\n\n  ss << \"1234567\\n89\\n\";\n  ss.seekg( 0, ios_base::beg );\n  char buf[10];\n  buf[7] = 'x';\n  ss.get( buf, 10 );\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( buf[0] == '1' );\n  CPPUNIT_ASSERT( buf[1] == '2' );\n  CPPUNIT_ASSERT( buf[2] == '3' );\n  CPPUNIT_ASSERT( buf[3] == '4' );\n  CPPUNIT_ASSERT( buf[4] == '5' );\n  CPPUNIT_ASSERT( buf[5] == '6' );\n  CPPUNIT_ASSERT( buf[6] == '7' ); // 27.6.1.3 paragraph 10, paragraph 7\n  CPPUNIT_ASSERT( buf[7] == 0 ); // 27.6.1.3 paragraph 8\n  char c;\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '\\n' ); // 27.6.1.3 paragraph 10, paragraph 7\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '8' );\n}\n\nvoid FstreamTest::seek()\n{\n  {\n    // Test in binary mode:\n    {\n      fstream s( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );\n      CPPUNIT_ASSERT( s );\n\n      s << \"1234567890\\n\";\n      CPPUNIT_ASSERT( s );\n    }\n\n    char b1[] = { 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x' };\n    fstream s( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::binary );\n    CPPUNIT_ASSERT( s );\n\n    int chars_read = (int)s.rdbuf()->sgetn( b1, sizeof(b1) );\n    CPPUNIT_CHECK( chars_read == 11 );\n    CPPUNIT_CHECK( b1[9] == '0' );\n    CPPUNIT_ASSERT( s.rdbuf()->pubseekoff( 0, ios_base::cur ) == fstream::pos_type(chars_read) );\n    CPPUNIT_ASSERT( s.rdbuf()->pubseekoff( -chars_read, ios_base::cur ) == fstream::pos_type(0) );\n\n    char b2[10] = { 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y' };\n\n    CPPUNIT_ASSERT( s.rdbuf()->sgetn( b2, 10 ) == 10 );\n    CPPUNIT_CHECK( b2[9] == '0' );\n  }\n\n  {\n    // Test in text mode:\n    {\n      fstream s( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::trunc );\n      CPPUNIT_ASSERT( s );\n\n      s << \"1234567890\\n\";\n      CPPUNIT_ASSERT( s );\n    }\n\n    char b1[] = { 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x' };\n    fstream s( \"test_file.txt\", ios_base::in | ios_base::out );\n    CPPUNIT_ASSERT( s );\n\n    int chars_read = (int)s.rdbuf()->sgetn( b1, sizeof(b1) );\n    CPPUNIT_CHECK( chars_read == 11 );\n    CPPUNIT_CHECK( b1[9] == '0' );\n\n    fstream::pos_type pos = s.rdbuf()->pubseekoff(0, ios_base::cur);\n    // Depending on how '\\n' is written in file, file position can be greater or equal to the number of chars_read read.\n    streamoff offset = pos;\n    CPPUNIT_ASSERT( offset >= chars_read );\n    offset = s.rdbuf()->pubseekoff( -offset, ios_base::cur );\n    CPPUNIT_ASSERT( offset == 0 );\n\n    char b2[10] = { 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y' };\n\n    CPPUNIT_ASSERT( s.rdbuf()->sgetn( b2, 5 ) == 5 );\n    CPPUNIT_CHECK( b2[4] == '5' );\n\n    pos = s.rdbuf()->pubseekoff(0, ios_base::cur);\n    CPPUNIT_ASSERT( pos == fstream::pos_type(5) );\n    CPPUNIT_ASSERT( s.rdbuf()->pubseekoff(-5, ios_base::cur) == fstream::pos_type(0) );\n  }\n\n#if !defined (STLPORT) || \\\n    (!defined (_STLP_NO_WCHAR_T) && defined (_STLP_USE_EXCEPTIONS))\n  {\n    // Test with a wariable encoding:\n    locale loc;\n    try\n    {\n      locale tmp(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(\".UTF8\"));\n      loc = tmp;\n    }\n    catch (const runtime_error&)\n    {\n      // Localization no supported so no test:\n      return;\n    }\n\n    {\n      wfstream s( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::trunc );\n      CPPUNIT_ASSERT( s );\n      s.imbue(loc);\n      CPPUNIT_ASSERT( s );\n\n      s << L\"1234567890\\n\";\n      CPPUNIT_ASSERT( s );\n    }\n\n    wchar_t b1[] = { L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x', L'x' };\n    wfstream s( \"test_file.txt\", ios_base::in | ios_base::out );\n    CPPUNIT_ASSERT( s );\n    s.imbue(loc);\n    CPPUNIT_ASSERT( s );\n\n    int chars_read = (int)s.rdbuf()->sgetn( b1, sizeof(b1) / sizeof(wchar_t) );\n    CPPUNIT_CHECK( chars_read == 11 );\n    CPPUNIT_CHECK( b1[9] == L'0' );\n\n    fstream::pos_type pos = s.rdbuf()->pubseekoff(0, ios_base::cur);\n    // Depending on how '\\n' is written in file, file position can be greater or equal to the number of chars_read read.\n    streamoff off = pos;\n    CPPUNIT_ASSERT( off >= chars_read );\n    off = s.rdbuf()->pubseekoff(-off, ios_base::cur);\n    CPPUNIT_ASSERT( off == -1 );\n    off = s.rdbuf()->pubseekoff(0, ios_base::beg);\n    CPPUNIT_ASSERT( off == 0 );\n\n    wchar_t b2[10] = { L'y', L'y', L'y', L'y', L'y', L'y', L'y', L'y', L'y', L'y' };\n\n    CPPUNIT_ASSERT( s.rdbuf()->sgetn( b2, 5 ) == 5 );\n    CPPUNIT_CHECK( b2[4] == L'5' );\n\n    pos = s.rdbuf()->pubseekoff(0, ios_base::cur);\n    CPPUNIT_ASSERT( pos == fstream::pos_type(5) );\n    //CPPUNIT_ASSERT( s.rdbuf()->pubseekoff(-5, ios_base::cur) == fstream::pos_type(0) );\n  }\n#endif\n}\n\nvoid FstreamTest::rdbuf()\n{\n  fstream ss( \"test_file.txt\", ios_base::in | ios_base::out | ios_base::binary | ios_base::trunc );\n\n  ss << \"1234567\\n89\\n\";\n  ss.seekg( 0, ios_base::beg );\n\n  ostringstream os;\n  ss.get( *os.rdbuf(), '\\n' );\n  CPPUNIT_ASSERT( !ss.fail() );\n  char c;\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '\\n' ); // 27.6.1.3 paragraph 12\n  CPPUNIT_ASSERT( os.str() == \"1234567\" );\n}\n\nvoid FstreamTest::streambuf_output()\n{\n  {\n    ofstream ofstr(\"test_file.txt\", ios_base::binary);\n    if (!ofstr)\n      //No test if we cannot create the file\n      return;\n    ofstr << \"01234567890123456789\";\n    CPPUNIT_ASSERT( ofstr );\n  }\n\n  {\n    ifstream in(\"test_file.txt\", ios_base::binary);\n    CPPUNIT_ASSERT( in );\n\n    full_streambuf full_buf(10);\n    ostream out(&full_buf);\n    CPPUNIT_ASSERT( out );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out );\n    CPPUNIT_ASSERT( in );\n    CPPUNIT_ASSERT( full_buf.str() == \"0123456789\" );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.fail() );\n    CPPUNIT_ASSERT( in );\n\n    ostringstream ostr;\n    ostr << in.rdbuf();\n    CPPUNIT_ASSERT( ostr );\n    CPPUNIT_ASSERT( in );\n    CPPUNIT_ASSERT( ostr.str() == \"0123456789\" );\n  }\n\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  {\n    //If the output stream buffer throws:\n    ifstream in(\"test_file.txt\", ios_base::binary);\n    CPPUNIT_ASSERT( in );\n\n    full_streambuf full_buf(10, true);\n    ostream out(&full_buf);\n    CPPUNIT_ASSERT( out );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.bad() );\n    CPPUNIT_ASSERT( in );\n    //out is bad we have no guaranty on what has been extracted:\n    //CPPUNIT_ASSERT( full_buf.str() == \"0123456789\" );\n\n    out.clear();\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.fail() && out.bad() );\n    CPPUNIT_ASSERT( in );\n\n    ostringstream ostr;\n    ostr << in.rdbuf();\n    CPPUNIT_ASSERT( ostr );\n    CPPUNIT_ASSERT( in );\n    CPPUNIT_ASSERT( ostr.str() == \"0123456789\" );\n  }\n#  endif\n}\n\nvoid FstreamTest::win32_file_format()\n{\n  const char* file_name = \"win32_file_format.tmp\";\n  const size_t nb_lines = 2049;\n  {\n    ofstream out(file_name);\n    CPPUNIT_ASSERT( out.good() );\n    out << 'a';\n    for (size_t i = 0; i < nb_lines - 1; ++i) {\n      out << '\\n';\n    }\n    out << '\\r';\n    CPPUNIT_ASSERT( out.good() );\n  }\n  {\n    ifstream in(file_name);\n    CPPUNIT_ASSERT( in.good() );\n    string line, last_line;\n    size_t nb_read_lines = 0;\n    while (getline(in, line)) {\n      ++nb_read_lines;\n      last_line = line;\n    }\n    CPPUNIT_ASSERT( in.eof() );\n    CPPUNIT_ASSERT( nb_read_lines == nb_lines );\n    CPPUNIT_ASSERT( !last_line.empty() && (last_line[0] == '\\r') );\n  }\n}\n\n#if defined (DO_CUSTOM_FACET_TEST)\nstruct my_state {\n  char dummy;\n};\n\nstruct my_traits : public char_traits<char> {\n  typedef my_state state_type;\n  typedef fpos<state_type> pos_type;\n};\n\n#if !defined (STLPORT)\n//STLport grant a default implementation, other Standard libs implementation\n//do not necessarily do the same:\nnamespace std {\n  template <>\n  class codecvt<char, char, my_state>\n    : public locale::facet, public codecvt_base {\n  public:\n    typedef char intern_type;\n    typedef char extern_type;\n    typedef my_state state_type;\n\n    explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}\n    result out(state_type&,\n               const intern_type*  __from,\n               const intern_type*,\n               const intern_type*& __from_next,\n               extern_type*        __to,\n               extern_type*,\n               extern_type*&       __to_next) const\n    { __from_next = __from; __to_next   = __to; return noconv; }\n\n    result in (state_type&,\n               const extern_type*  __from,\n               const extern_type*,\n               const extern_type*& __from_next,\n               intern_type*        __to,\n               intern_type*,\n               intern_type*&       __to_next) const\n    { __from_next = __from; __to_next = __to; return noconv; }\n\n    result unshift(state_type&,\n                   extern_type* __to,\n                   extern_type*,\n                   extern_type*& __to_next) const\n    { __to_next = __to; return noconv; }\n\n    int encoding() const throw()\n    { return 1; }\n\n    bool always_noconv() const throw()\n    { return true; }\n\n    int length(const state_type&,\n               const extern_type* __from,\n               const extern_type* __end,\n               size_t __max) const\n    { return (int)min(static_cast<size_t>(__end - __from), __max); }\n\n    int max_length() const throw()\n    { return 1; }\n\n    static locale::id id;\n  };\n\n  locale::id codecvt<char, char, my_state>::id;\n}\n#  else\n#    if defined (__BORLANDC__) && (__BORLANDC__ < 0x590)\ntemplate <>\nlocale::id codecvt<char, char, my_state>::id;\n#    endif\n#  endif\n#endif\n\nvoid FstreamTest::custom_facet()\n{\n#if defined (DO_CUSTOM_FACET_TEST)\n  const char* fileName = \"test_file.txt\";\n  //File preparation:\n  {\n    ofstream ofstr(fileName, ios_base::binary);\n    ofstr << \"0123456789\";\n    CPPUNIT_ASSERT( ofstr );\n  }\n\n  {\n    typedef basic_ifstream<char, my_traits> my_ifstream;\n    typedef basic_string<char, my_traits> my_string;\n\n    my_ifstream ifstr(fileName);\n    CPPUNIT_ASSERT( ifstr );\n\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    ifstr.imbue(locale::classic());\n    CPPUNIT_ASSERT( ifstr.fail() && !ifstr.bad() );\n    ifstr.clear();\n#  endif\n    typedef codecvt<char, char, my_state> my_codecvt;\n    locale my_loc(locale::classic(), new my_codecvt());\n    // Check that my_codecvt has not replace default codecvt:\n    CPPUNIT_ASSERT( (has_facet<my_codecvt>(my_loc)) );\n    CPPUNIT_ASSERT( (has_facet<codecvt<char, char, mbstate_t> >(my_loc)) );\n#  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n    CPPUNIT_ASSERT( (has_facet<codecvt<wchar_t, char, mbstate_t> >(my_loc)) );\n#  endif\n    ifstr.imbue(my_loc);\n    CPPUNIT_ASSERT( ifstr.good() );\n    /*\n    my_string res;\n    ifstr >> res;\n    CPPUNIT_ASSERT( !ifstr.fail() );\n    CPPUNIT_ASSERT( !ifstr.bad() );\n    CPPUNIT_ASSERT( ifstr.eof() );\n    CPPUNIT_ASSERT( res == \"0123456789\" );\n    */\n  }\n#endif\n}\n\n#  if defined (CHECK_BIG_FILE)\nvoid FstreamTest::big_file()\n{\n  vector<pair<streamsize, streamoff> > file_pos;\n\n  //Big file creation:\n  {\n    ofstream out(\"big_file.txt\");\n    CPPUNIT_ASSERT( out );\n\n    //We are going to generate a file with the following schema for the content:\n    //0(1019 times)0000  //1023 characters + 1 charater for \\n (for some platforms it will be a 1 ko line)\n    //0(1019 times)0001\n    //...\n    //0(1019 times)1234\n    //...\n\n    //Generation of the number of loop:\n    streamoff nb = 1;\n    for (int i = 0; i < 20; ++i) {\n      //This assertion check that the streamoff can at least represent the necessary integers values\n      //for this test:\n      CPPUNIT_ASSERT( (nb << 1) > nb );\n      nb <<= 1;\n    }\n    CPPUNIT_ASSERT( nb * CHECK_BIG_FILE >= nb );\n    nb *= CHECK_BIG_FILE;\n\n    //Preparation of the ouput stream state:\n    out << setiosflags(ios_base::right) << setfill('*');\n    for (streamoff index = 0; index < nb; ++index) {\n      if (index % 1024 == 0) {\n        file_pos.push_back(make_pair(out.tellp(), index));\n        CPPUNIT_ASSERT( file_pos.back().first != streamsize(-1) );\n        if (file_pos.size() > 1) {\n          CPPUNIT_ASSERT( file_pos[file_pos.size() - 1].first > file_pos[file_pos.size() - 2].first );\n        }\n      }\n      out << setw(1023) << index << '\\n';\n    }\n  }\n\n  {\n    ifstream in(\"big_file.txt\");\n    CPPUNIT_ASSERT( in );\n\n    string line;\n    vector<pair<streamsize, streamsize> >::const_iterator pit(file_pos.begin()),\n                                                          pitEnd(file_pos.end());\n    for (; pit != pitEnd; ++pit) {\n      in.seekg((*pit).first);\n      CPPUNIT_ASSERT( in );\n      in >> line;\n      size_t lastStarPos = line.rfind('*');\n      CPPUNIT_ASSERT( atoi(line.substr(lastStarPos + 1).c_str()) == (*pit).second );\n    }\n  }\n\n  /*\n  The following test has been used to check that STLport do not generate\n  an infinite loop when the file size is larger than the streamsize and\n  streamoff representation (32 bits or 64 bits).\n  {\n    ifstream in(\"big_file.txt\");\n    CPPUNIT_ASSERT( in );\n    char tmp[4096];\n    streamsize nb_reads = 0;\n    while ((!in.eof()) && in.good()){\n      in.read(tmp, 4096);\n      nb_reads += in.gcount();\n    }\n  }\n  */\n}\n#  endif\n\nvoid FstreamTest::null_stream()\n{\n#  if (defined (STLPORT) && defined (_STLP_USE_WIN32_IO)) || \\\n      (!defined (STLPORT) && (defined (WIN32) || defined (_WIN32)))\n  const char* nullStreamName = \"NUL\";\n#  else\n  const char* nullStreamName = \"/dev/null\";\n#  endif\n  {\n    ofstream nullStream(nullStreamName);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    ofstream nullStream(nullStreamName, ios_base::ate);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    ofstream nullStream(nullStreamName, ios_base::trunc);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    ofstream nullStream(nullStreamName, ios_base::app);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    ifstream nullStream(nullStreamName);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    ifstream nullStream(nullStreamName, ios_base::ate);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    fstream nullStream(nullStreamName);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    fstream nullStream(nullStreamName, ios_base::in | ios_base::out | ios_base::ate);\n    CPPUNIT_CHECK( nullStream );\n  }\n\n  {\n    fstream nullStream(nullStreamName, ios_base::in | ios_base::out | ios_base::trunc);\n    CPPUNIT_CHECK( nullStream );\n  }\n}\n\nvoid FstreamTest::null_buf()\n{\n  /* **********************************************************************************\n\n  testcase for bug #1830513:\n  in _istream.c\n\n  template < class _CharT, class _Traits, class _Is_Delim>\n  streamsize _STLP_CALL __read_unbuffered(basic_istream<_CharT, _Traits>* __that,\n                                          basic_streambuf<_CharT, _Traits>* __buf,\n                                          streamsize _Num, _CharT* __s,\n                                          _Is_Delim __is_delim,\n                                          bool __extract_delim, bool __append_null,\n                                          bool __is_getline)\n\n  can't accept _Num == 0; this is legal case, and may happen from\n\n  template <class _CharT, class _Traits>\n  basic_istream<_CharT, _Traits>&\n  basic_istream<_CharT, _Traits>::getline(_CharT* __s, streamsize __n, _CharT __delim)\n\n  *********************************************************************************** */\n\n  fstream f( \"test.txt\", ios_base::in | ios_base::out | ios_base::trunc );\n  // string line;\n\n  for ( int i = 0; i < 0x200; ++i ) {\n    f.put( ' ' );\n  }\n\n  // const streambuf *b = f.rdbuf();\n\n  // string s;\n  char buf[1024];\n  buf[0] = 'a';\n  buf[1] = 'b';\n  buf[2] = 'c';\n\n  // getline( f, s );\n  // cerr << f.good() << endl;\n  f.seekg( 0, ios_base::beg );\n  // f.seekg( 0, ios_base::end );\n  // buf[0] = f.get();\n\n  // cerr << (void *)(b->_M_gptr()) << \" \" << (void *)(b->_M_egptr()) << endl;\n  // cerr << f.good() << endl;\n  // getline( f, s );\n  f.getline( buf, 1 ); // <-- key line\n  CPPUNIT_CHECK( buf[0] == 0 );\n  CPPUNIT_CHECK( f.fail() ); // due to delimiter not found while buffer was exhausted\n}\n\n#  if !defined (STLPORT) || !defined (_STLP_WIN32)\nvoid FstreamTest::offset()\n{\n#    if (defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE)) && !defined(_STLP_USE_DEFAULT_FILE_OFFSET)\n  CPPUNIT_CHECK( sizeof(streamoff) == 8 );\n#    else\n  CPPUNIT_CHECK( sizeof(streamoff) == sizeof(off_t) );\n#    endif\n}\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/full_streambuf.h",
    "content": "#ifndef _FULL_STREAM_H\n#define _FULL_STREAM_H\n\n#include <streambuf>\n\n/*\n * This full_streambuf purpose is to act like a full disk to check the right behavior\n * of the STLport code in such a case.\n */\n\nclass full_streambuf : public std::streambuf {\npublic:\n  typedef std::streambuf _Base;\n\n  typedef _Base::int_type int_type;\n  typedef _Base::traits_type traits_type;\n\n  full_streambuf(size_t nb_output, bool do_throw = false)\n    : _nb_output(nb_output), _do_throw(do_throw)\n  {}\n\n  std::string const& str() const\n  { return _buf; }\n\nprotected:\n  int_type overflow(int_type c) {\n    if (_nb_output == 0) {\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n      if (_do_throw) {\n        throw \"streambuf full\";\n      }\n#endif\n      return traits_type::eof();\n    }\n    --_nb_output;\n    _buf += traits_type::to_char_type(c);\n    return c;\n  }\n\nprivate:\n  size_t _nb_output;\n  bool _do_throw;\n  std::string _buf;\n};\n\n#endif //_FULL_STREAM_H\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/func_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass FuncTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(FuncTest);\n  CPPUNIT_TEST(func1);\n  CPPUNIT_TEST(func2);\n  CPPUNIT_TEST(func3);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void func1();\n  void func2();\n  void func3();\n  static bool bigger(int i_);\n  static bool bigger_than(int x_, int y_);\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(FuncTest);\n\n//\n// tests implementation\n//\nbool FuncTest::bigger(int i_)\n{\n  return i_ > 3;\n}\nbool FuncTest::bigger_than(int x_, int y_)\n{\n    return x_ > y_;\n}\nvoid FuncTest::func1()\n{\n  vector<int>v;\n  v.push_back(4);\n  v.push_back(1);\n  v.push_back(5);\n  int n = count_if(v.begin(), v.end(), bigger);\n  CPPUNIT_ASSERT( n == 2 )\n}\n\nvoid FuncTest::func2()\n{\n  vector<int> v;\n  v.push_back(4);\n  v.push_back(1);\n  v.push_back(5);\n  sort(v.begin(), v.end(), bigger_than);\n\n  CPPUNIT_ASSERT( v[0] == 5 );\n  CPPUNIT_ASSERT( v[1] == 4 );\n  CPPUNIT_ASSERT( v[2] == 1 );\n}\nvoid FuncTest::func3()\n{\n  vector<int> v;\n  v.push_back(4);\n  v.push_back(1);\n  v.push_back(5);\n  sort(v.begin(), v.end(), greater<int>());\n\n  CPPUNIT_ASSERT( v[0] == 5 );\n  CPPUNIT_ASSERT( v[1] == 4 );\n  CPPUNIT_ASSERT( v[2] == 1 );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/functional_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <functional>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/generator_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include \"fadapter.h\"\n#include \"fib.h\"\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass GeneratorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(GeneratorTest);\n  CPPUNIT_TEST(gener1);\n  CPPUNIT_TEST(gener2);\n  CPPUNIT_TEST(genern1);\n  CPPUNIT_TEST(genern2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void gener1();\n  void gener2();\n  void genern1();\n  void genern2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(GeneratorTest);\n\n//\n// tests implementation\n//\n\nstatic  int cxxrand() { return rand();}\n\nvoid GeneratorTest::gener1()\n{\n  int numbers[10];\n#if defined(__MVS__)\n  generate(numbers, numbers + 10, ptr_gen(cxxrand));\n#else\n  generate(numbers, numbers + 10, cxxrand);\n#endif\n  // any suggestions?\n}\nvoid GeneratorTest::gener2()\n{\n  vector <int> v1(10);\n  Fibonacci generator;\n  generate(v1.begin(), v1.end(), generator);\n\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==8);\n  CPPUNIT_ASSERT(v1[6]==13);\n  CPPUNIT_ASSERT(v1[7]==21);\n  CPPUNIT_ASSERT(v1[8]==34);\n  CPPUNIT_ASSERT(v1[9]==55);\n}\nvoid GeneratorTest::genern1()\n{\n#if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)\n  //*TY 07/18/98 - added conditional\n  // since ptr_gen() is not defined under this condition\n  // (see xfunction.h)\n  vector <int> v1(10);\n  generate_n(v1.begin(), v1.size(), ptr_gen(cxxrand));\n#endif  //_STLP_MEMBER_POINTER_PARAM_BUG  //*TY 07/18/98 - added\n}\nvoid GeneratorTest::genern2()\n{\n  vector <int> v1(10);\n  Fibonacci generator;\n  generate_n(v1.begin(), v1.size(), generator);\n\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==8);\n  CPPUNIT_ASSERT(v1[6]==13);\n  CPPUNIT_ASSERT(v1[7]==21);\n  CPPUNIT_ASSERT(v1[8]==34);\n  CPPUNIT_ASSERT(v1[9]==55);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/greater_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass GreaterTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(GreaterTest);\n  CPPUNIT_TEST(greatert);\n  CPPUNIT_TEST(greatereq);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void greatert();\n  void greatereq();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(GreaterTest);\n\n//\n// tests implementation\n//\nvoid GreaterTest::greatert()\n{\n  int array[4] = { 3, 1, 4, 2 };\n  sort(array, array + 4, greater<int>() );\n\n  CPPUNIT_ASSERT(array[0]==4);\n  CPPUNIT_ASSERT(array[1]==3);\n  CPPUNIT_ASSERT(array[2]==2);\n  CPPUNIT_ASSERT(array[3]==1);\n}\nvoid GreaterTest::greatereq()\n{\n  int array [4] = { 3, 1, 4, 2 };\n  sort(array, array + 4, greater_equal<int>());\n  CPPUNIT_ASSERT(array[0]==4);\n  CPPUNIT_ASSERT(array[1]==3);\n  CPPUNIT_ASSERT(array[2]==2);\n  CPPUNIT_ASSERT(array[3]==1);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/hash_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <vector>\n#include <algorithm>\n#include <map>\n#include <set>\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <hash_map>\n#  include <hash_set>\n#  include <rope>\n#endif\n\n#include <string>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined (__MVS__)\nconst char star = 92;\n#else\nconst char star = 42;\n#endif\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass HashTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(HashTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(hmap1);\n  CPPUNIT_TEST(hmmap1);\n  CPPUNIT_TEST(hmmap2);\n  CPPUNIT_TEST(hmset1);\n  CPPUNIT_TEST(hset2);\n  CPPUNIT_TEST(insert_erase);\n  CPPUNIT_TEST(allocator_with_state);\n  //CPPUNIT_TEST(equality);\n  CPPUNIT_TEST_SUITE_END();\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  typedef hash_multiset<char, hash<char>, equal_to<char> > hmset;\n#endif\n\nprotected:\n  void hmap1();\n  void hmmap1();\n  void hmmap2();\n  void hmset1();\n  void hset2();\n  void insert_erase();\n  //void equality();\n  void allocator_with_state();\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  typedef hash_multimap<int, int> hashType;\n  typedef multimap<int, int> mapType;\n\n  void check_keys( hashType& h, mapType& m );\n#endif\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(HashTest);\n\n//\n// tests implementation\n//\nvoid HashTest::hmap1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  typedef hash_map<char, crope, hash<char>, equal_to<char> > maptype;\n  maptype m;\n  // Store mappings between roman numerals and decimals.\n  m['l'] = \"50\";\n  m['x'] = \"20\"; // Deliberate mistake.\n  m['v'] = \"5\";\n  m['i'] = \"1\";\n  CPPUNIT_ASSERT( !strcmp(m['x'].c_str(),\"20\") );\n  m['x'] = \"10\"; // Correct mistake.\n  CPPUNIT_ASSERT( !strcmp(m['x'].c_str(),\"10\") );\n\n  CPPUNIT_ASSERT( !strcmp(m['z'].c_str(),\"\") );\n\n  CPPUNIT_ASSERT( m.count('z')==1 );\n  pair<maptype::iterator, bool> p = m.insert(pair<const char, crope>('c', crope(\"100\")));\n\n  CPPUNIT_ASSERT(p.second);\n\n  p = m.insert(pair<const char, crope>('c', crope(\"100\")));\n  CPPUNIT_ASSERT(!p.second);\n\n  //Some iterators compare check, really compile time checks\n  maptype::iterator ite(m.begin());\n  maptype::const_iterator cite(m.begin());\n  cite = m.begin();\n  maptype const& cm = m;\n  cite = cm.begin();\n  CPPUNIT_ASSERT( ite == cite );\n  CPPUNIT_ASSERT( !(ite != cite) );\n  CPPUNIT_ASSERT( cite == ite );\n  CPPUNIT_ASSERT( !(cite != ite) );\n#endif\n}\n\nvoid HashTest::hmmap1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  typedef hash_multimap<char, int, hash<char>,equal_to<char> > mmap;\n  mmap m;\n  CPPUNIT_ASSERT(m.count('X')==0);\n  m.insert(pair<const char,int>('X', 10)); // Standard way.\n  CPPUNIT_ASSERT(m.count('X')==1);\n//  m.insert('X', 20); // Non-standard, but very convenient!\n  m.insert(pair<const char,int>('X', 20));  // jbuck: standard way\n  CPPUNIT_ASSERT(m.count('X')==2);\n//  m.insert('Y', 32);\n  m.insert(pair<const char,int>('Y', 32));  // jbuck: standard way\n  mmap::iterator i = m.find('X'); // Find first match.\n\n  CPPUNIT_ASSERT((*i).first=='X');\n  CPPUNIT_ASSERT((*i).second==10);\n  i++;\n  CPPUNIT_ASSERT((*i).first=='X');\n  CPPUNIT_ASSERT((*i).second==20);\n  i++;\n  CPPUNIT_ASSERT((*i).first=='Y');\n  CPPUNIT_ASSERT((*i).second==32);\n  i++;\n  CPPUNIT_ASSERT(i==m.end());\n\n  size_t count = m.erase('X');\n  CPPUNIT_ASSERT(count==2);\n\n  //Some iterators compare check, really compile time checks\n  mmap::iterator ite(m.begin());\n  mmap::const_iterator cite(m.begin());\n  CPPUNIT_ASSERT( ite == cite );\n  CPPUNIT_ASSERT( !(ite != cite) );\n  CPPUNIT_ASSERT( cite == ite );\n  CPPUNIT_ASSERT( !(cite != ite) );\n\n  typedef hash_multimap<size_t, size_t> HMapType;\n  HMapType hmap;\n\n  //We fill the map to implicitely start a rehash.\n  for (size_t counter = 0; counter < 3077; ++counter)\n    hmap.insert(HMapType::value_type(1, counter));\n\n  hmap.insert(HMapType::value_type(12325, 1));\n  hmap.insert(HMapType::value_type(12325, 2));\n\n  CPPUNIT_ASSERT( hmap.count(12325) == 2 );\n\n  //At this point 23 goes to the same bucket as 12325, it used to reveal a bug.\n  hmap.insert(HMapType::value_type(23, 0));\n\n  CPPUNIT_ASSERT( hmap.count(12325) == 2 );\n#endif\n}\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n// Short demonstrator that helps reproducing a bug in the hash-table implementation\n// of STLPort 5.0.1/5.0.2.\n//\n// Problem: Fill a hash_multimap with entries of which many have the same key\n//          Internally, entries with the same key are kept as one block within the same bucket.\n//          Thus, when calling equal_range(key) the begin/end of that block is returned.\n//          However, this code shows that for key =3, that block is destroyed after inserting the 194th element.\n//          According to _hashtable.c we will have a rehash from size 193 to size 389 in that situation.\n//          After that rehash,  equal_range only returns 2 elements with key = 3 whereas there are 65 in it.\n// Reproduction:\n//          In the main()-method we fill a hash_multimap as well as a multi_map with the same <key, data> pairs\n//          After each insertion we call check_keys(...) to assure validity of these two containers.\n//          This works fine up to the 193th insertion. Insertion 194 generates the bug.\n//\n//          check_keys() works as follows:\n//          (a) we check whether both containers contain the same number of elements.\n//          (b) Assuming that the multi_map works correctly, we iterate over all its elements and check\n//              whether we can find that key also in the hash_multimap. We collect all data for that specific\n//              key in in a set (\"collection\"). Notice that data is unique by construction in main(), thus the\n//              number of elements in the set must equal the number of entries in the hash_multimap and in the multimap\n//          (c) We check if we have seen as many data elements in collection as we have seen in the multimap.\n//              if so, we print \"OK\", otherwise we print a detailed key/data overview and assert.\n// Caution:\n//        There are several configurations of the program that will NOT fail. (see comment in code below)\n//        E.g. it seems that whenever the keys are more or less sorted, the problem does not occur.\n//        Also, using numbers from 200 downto 1 or from 300 downto 1 cannot generate the problem,\n//        whereas using 400 downto 1 will fail.\n//        Finally, if we use key 1 (rather than key 3) we cannot generate a problem.\n\nvoid HashTest::check_keys( HashTest::hashType& h, HashTest::mapType& m )\n{\n  set<int> collection;\n\n  // (a) check sizes\n  CPPUNIT_CHECK( h.size() == m.size() );\n\n  // (b) iterate over multi_map\n  for ( mapType::iterator i = m.begin(); i != m.end(); ++i ) {\n    // look up that key in hash-table and keep all data in the set\n    pair<hashType::iterator,hashType::iterator> range = h.equal_range( i->first );\n    for ( hashType::iterator j = range.first; j != range.second; ++j ) {\n      collection.insert( j->second );\n    }\n  }\n  // (c) we should have seen as many elements as there are in the hash-table\n#if 0\n  if (collection.size() == h.size()) cout << \" OK\" << endl;\n  else {\n    // if not, please report\n    cout << \" FAILED: \" << endl;\n    int lastKey  = -1;\n    // iterate over all elements in multi_map\n    for (mapType::iterator mIter = m.begin(); mIter != m.end(); mIter++) {\n      // new key? print a new status line\n      if (mIter->first != lastKey) {\n        cout << endl << \"Key : \" << mIter->first << endl;\n        lastKey = mIter->first;\n\n        // print all hashed values for that key\n        cout << \" data in hash: \";\n        pair<hashType::iterator,hashType::iterator> range = h.equal_range(mIter->first);\n\n        for (hashType::iterator h = range.first; h != range.second; h++) {\n          assert (h->first == lastKey);\n          cerr << h->second << \", \"; // print all data for that key in Hash-Table\n        }\n        cout << endl << \" data in map:  \";\n      }\n      // and print all member in multi-map until the next key occurs\n      cout << mIter->second << \", \" ;  // print all data for that key in Map\n    }\n  }\n#endif\n  CPPUNIT_CHECK( collection.size() == h.size() );\n}\n\n#endif\n\nvoid HashTest::hmmap2()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  hashType h;\n  mapType m;\n\n  // CAUTION the following configurations WORKS in our setting\n  //      for (int id = 1; id != 400; id ++)   and int key = (id %3 == 0 ? 3 : id)\n  //      for (int id = 200; id != 1; id --)   and int key = (id %3 == 0 ? 3 : id)\n  //      for (int id = 300; id != 1; id --)   and int key = (id %3 == 0 ? 3 : id)\n  //      for (int id = 400; id != 1; id --)   and int key = (id %3 == 0 ? 1 : id)\n  //      for (int id = 4000; id != 1; id --)  and int key = (id %3 == 0 ? 1 : id)\n  //\n  // whereas these will FAIL\n  //      for (int id = 400; id != 1; id --)   and int key = (id %3 == 0 ? 3 : id)\n  //      for (int id = 4000; id != 1; id --)  and int key = (id %3 == 0 ? 3 : id)\n  //\n\n  for ( int id = 400; id != 1; id-- ) {\n    // generate many entries with key 3, fill up with unique keys. Data is unique (needed in check_keys())\n    int key = (id % 3 == 0 ? 3 : id);\n\n    // keep hash_multi_map and multimap in sync\n    h.insert(make_pair(key, id));\n    m.insert(make_pair(key, id));\n\n    // check whether both contain the same elements\n    check_keys( h, m );\n  }\n#endif\n}\n\nvoid HashTest::hmset1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  hmset s;\n  CPPUNIT_ASSERT( s.count(star) == 0 );\n  s.insert(star);\n  CPPUNIT_ASSERT( s.count(star) == 1 );\n  s.insert(star);\n  CPPUNIT_ASSERT( s.count(star) == 2 );\n  hmset::iterator i = s.find(char(40));\n  CPPUNIT_ASSERT( i == s.end() );\n\n  i = s.find(star);\n  CPPUNIT_ASSERT( i != s.end() )\n  CPPUNIT_ASSERT( *i == '*' );\n  CPPUNIT_ASSERT( s.erase(star) == 2 );\n#endif\n}\nvoid HashTest::hset2()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  hash_set<int, hash<int>, equal_to<int> > s;\n  pair<hash_set<int, hash<int>, equal_to<int> >::iterator, bool> p = s.insert(42);\n  CPPUNIT_ASSERT( p.second );\n  CPPUNIT_ASSERT( *(p.first) == 42 );\n\n  p = s.insert(42);\n  CPPUNIT_ASSERT( !p.second );\n#endif\n}\n\nvoid HashTest::insert_erase()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  typedef hash_map<string, size_t, hash<string>, equal_to<string> > hmap;\n  typedef hmap::value_type val_type;\n  {\n    hmap values;\n#  if !defined (__BORLANDC__) || (__BORLANDC__ >= 0x564)\n    CPPUNIT_ASSERT( values.insert(val_type(\"foo\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(val_type(\"bar\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(val_type(\"abc\", 0)).second );\n#  else\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"foo\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"bar\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"abc\", 0)).second );\n#  endif\n\n    CPPUNIT_ASSERT( values.erase(\"foo\") == 1 );\n    CPPUNIT_ASSERT( values.erase(\"bar\") == 1 );\n    CPPUNIT_ASSERT( values.erase(\"abc\") == 1 );\n  }\n\n  {\n    hmap values;\n#  if !defined (__BORLANDC__) || (__BORLANDC__ >= 0x564)\n    CPPUNIT_ASSERT( values.insert(val_type(\"foo\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(val_type(\"bar\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(val_type(\"abc\", 0)).second );\n#  else\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"foo\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"bar\", 0)).second );\n    CPPUNIT_ASSERT( values.insert(hmap::value_type(\"abc\", 0)).second );\n#  endif\n\n    CPPUNIT_ASSERT( values.erase(\"abc\") == 1 );\n    CPPUNIT_ASSERT( values.erase(\"bar\") == 1 );\n    CPPUNIT_ASSERT( values.erase(\"foo\") == 1 );\n  }\n#endif\n}\n\n/*\n * Here is the test showing why equality operator on hash containers\n * has no meaning:\n\nstruct equality_hash_func {\n  size_t operator () (size_t val) const {\n    return val % 10;\n  }\n};\n\nvoid HashTest::equality()\n{\n  hash_set<size_t, equality_hash_func, equal_to<size_t> > s1, s2;\n\n  s1.insert(10);\n  s1.insert(20);\n\n  s2.insert(20);\n  s2.insert(10);\n\n  //s1 and s2 contains both 10 and 20:\n  CPPUNIT_ASSERT( s1 == s2 );\n}\n*/\n\nvoid HashTest::allocator_with_state()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  char buf1[2048];\n  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[2048];\n  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n  {\n    typedef hash_set<int, hash<int>, equal_to<int>, StackAllocator<int> > HashSetInt;\n    HashSetInt hint1(10, hash<int>(), equal_to<int>(), stack1);\n\n    int i;\n    for (i = 0; i < 5; ++i)\n      hint1.insert(i);\n    HashSetInt hint1Cpy(hint1);\n\n    HashSetInt hint2(10, hash<int>(), equal_to<int>(), stack2);\n    for (; i < 10; ++i)\n      hint2.insert(i);\n    HashSetInt hint2Cpy(hint2);\n\n    hint1.swap(hint2);\n\n    CPPUNIT_ASSERT( hint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( hint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( hint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( hint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n#endif\n}\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \\\n   (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION))\n#  if !defined (__DMC__)\n\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  hash_set<IncompleteClass> hsinstances;\n  typedef hash_set<IncompleteClass>::iterator hsit;\n  hash_multiset<IncompleteClass> hsminstances;\n  typedef hash_multiset<IncompleteClass>::iterator hsmit;\n\n  hash_map<IncompleteClass, IncompleteClass> hminstances;\n  typedef hash_map<IncompleteClass, IncompleteClass>::iterator hmit;\n  hash_multimap<IncompleteClass, IncompleteClass> hmminstances;\n  typedef hash_multimap<IncompleteClass, IncompleteClass>::iterator hmmit;\n};\n#  endif\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/heap_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass HeapTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(HeapTest);\n  CPPUNIT_TEST(mkheap0);\n  CPPUNIT_TEST(mkheap1);\n  CPPUNIT_TEST(pheap1);\n  CPPUNIT_TEST(pheap2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void mkheap0();\n  void mkheap1();\n  void pheap1();\n  void pheap2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(HeapTest);\n\n//\n// tests implementation\n//\nvoid HeapTest::mkheap0()\n{\n  int numbers[6] = { 5, 10, 4, 13, 11, 19 };\n\n  make_heap(numbers, numbers + 6);\n  CPPUNIT_ASSERT(numbers[0]==19)\n  pop_heap(numbers, numbers + 6);\n  CPPUNIT_ASSERT(numbers[0]==13)\n  pop_heap(numbers, numbers + 5);\n  CPPUNIT_ASSERT(numbers[0]==11)\n  pop_heap(numbers, numbers + 4);\n  CPPUNIT_ASSERT(numbers[0]==10)\n  pop_heap(numbers, numbers + 3);\n  CPPUNIT_ASSERT(numbers[0]==5)\n  pop_heap(numbers, numbers + 2);\n  CPPUNIT_ASSERT(numbers[0]==4)\n  pop_heap(numbers, numbers + 1);\n}\nvoid HeapTest::mkheap1()\n{\n  int numbers[6] = { 5, 10, 4, 13, 11, 19 };\n\n  make_heap(numbers, numbers + 6, greater<int>());\n\n  CPPUNIT_ASSERT(numbers[0]==4)\n  pop_heap(numbers, numbers + 6, greater<int>());\n  CPPUNIT_ASSERT(numbers[0]==5)\n  pop_heap(numbers, numbers + 5, greater<int>());\n  CPPUNIT_ASSERT(numbers[0]==10)\n  pop_heap(numbers, numbers + 4, greater<int>());\n  CPPUNIT_ASSERT(numbers[0]==11)\n  pop_heap(numbers, numbers + 3, greater<int>());\n  CPPUNIT_ASSERT(numbers[0]==13)\n  pop_heap(numbers, numbers + 2, greater<int>());\n  CPPUNIT_ASSERT(numbers[0]==19)\n}\nvoid HeapTest::pheap1()\n{\n  vector<int> v;\n\n  v.push_back(1);\n  v.push_back(20);\n  v.push_back(4);\n  make_heap(v.begin(), v.end());\n\n  v.push_back(7);\n  push_heap(v.begin(), v.end());\n\n  sort_heap(v.begin(), v.end());\n\n  CPPUNIT_ASSERT(v[0]==1);\n  CPPUNIT_ASSERT(v[1]==4);\n  CPPUNIT_ASSERT(v[2]==7);\n  CPPUNIT_ASSERT(v[3]==20);\n}\nvoid HeapTest::pheap2()\n{\n  vector<int> v;\n\n  v.push_back(1);\n  v.push_back(20);\n  v.push_back(4);\n  make_heap(v.begin(), v.end(), greater<int>());\n\n  v.push_back(7);\n  push_heap(v.begin(), v.end(), greater<int>());\n\n  sort_heap(v.begin(), v.end(), greater<int>());\n\n  CPPUNIT_ASSERT(v[0]==20);\n  CPPUNIT_ASSERT(v[1]==7);\n  CPPUNIT_ASSERT(v[2]==4);\n  CPPUNIT_ASSERT(v[3]==1);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/includes_test.cpp",
    "content": "#include <cstring>\n#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass IncludesTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IncludesTest);\n  CPPUNIT_TEST(incl0);\n  CPPUNIT_TEST(incl1);\n  CPPUNIT_TEST(incl2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void incl0();\n  void incl1();\n  void incl2();\n\n  static bool compare_strings(const char* s1_, const char* s2_)\n  {\n    return strcmp(s1_, s2_) < 0 ? 1 : 0;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IncludesTest);\n\n//\n// tests implementation\n//\nvoid IncludesTest::incl0()\n{\n  int numbers1[5] = { 1, 2, 3, 4, 5 };\n  //int numbers2[5] = { 1, 2, 4, 8, 16 };\n  int numbers3[2] = { 4, 8 };\n  bool r1=includes(numbers1, numbers1 + 5, numbers3, numbers3 + 2);\n  CPPUNIT_ASSERT(!r1);\n}\nvoid IncludesTest::incl1()\n{\n  vector<int> v1(10);\n  vector<int> v2(3);\n  int i;\n  for (i = 0; (size_t)i < v1.size(); ++i) {\n    v1[i] = i;\n  }\n\n  bool r1=includes(v1.begin(), v1.end(), v2.begin(), v2.end());\n  CPPUNIT_ASSERT(!r1);\n\n  for (i = 0; (size_t)i < v2.size(); ++i)\n    v2[i] = i + 3;\n\n  bool r2=includes(v1.begin(), v1.end(), v2.begin(), v2.end());\n  CPPUNIT_ASSERT(r2);\n}\nvoid IncludesTest::incl2()\n{\n  char const* names[] = {  \"Todd\", \"Mike\", \"Graham\", \"Jack\", \"Brett\"};\n\n  const unsigned nameSize = sizeof(names)/sizeof(names[0]);\n  vector <char const*> v1(nameSize);\n  for (int i = 0; (size_t)i < v1.size(); ++i) {\n    v1[i] = names[i];\n  }\n  vector <char const*> v2(2);\n\n  v2[0] = \"foo\";\n  v2[1] = \"bar\";\n  sort(v1.begin(), v1.end(), compare_strings);\n  sort(v2.begin(), v2.end(), compare_strings);\n\n  bool r1 = includes(v1.begin(), v1.end(), v2.begin(), v2.end(), compare_strings);\n  CPPUNIT_ASSERT(!r1);\n\n  v2[0] = \"Brett\";\n  v2[1] = \"Todd\";\n  bool r2 = includes(v1.begin(), v1.end(), v2.begin(), v2.end(), compare_strings);\n  CPPUNIT_ASSERT(r2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/innerprod_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <numeric>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass InnerprodTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(InnerprodTest);\n  CPPUNIT_TEST(inprod0);\n  CPPUNIT_TEST(inprod1);\n  CPPUNIT_TEST(inprod2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void inprod0();\n  void inprod1();\n  void inprod2();\n\n  static size_t add(size_t a_, size_t b_) {\n    return a_ + b_;\n  }\n\n  static size_t mult(size_t a_, size_t b_) {\n    return a_ * b_;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(InnerprodTest);\n\n//\n// tests implementation\n//\nvoid InnerprodTest::inprod0()\n{\n  int vector1[5] = { 1, 2, 3, 4, 5 };\n  int vector2[5] = { 1, 2, 3, 4, 5 };\n\n  int result;\n  result = inner_product(vector1, vector1 + 5, vector2, 0);\n  CPPUNIT_ASSERT(result==55);\n}\nvoid InnerprodTest::inprod1()\n{\n  vector<size_t> v1(3);\n  vector<size_t> v2(v1.size());\n  for (size_t i = 0; i < v1.size(); ++i) {\n    v1[i] = i + 1;\n    v2[i] = v1.size() - i;\n  }\n  size_t result = inner_product(v1.begin(), v1.end(), v2.begin(), (size_t)0);\n  CPPUNIT_ASSERT(result == 10);\n}\nvoid InnerprodTest::inprod2()\n{\n  vector<size_t> v1(3);\n  vector<size_t> v2(v1.size());\n  for(size_t i = 0; i < v1.size(); ++i) {\n    v1[i] = i + 1;\n    v2[i] = v1.size() - i;\n  }\n  size_t result=inner_product(v1.begin(), v1.end(), v2.begin(), (size_t)1, mult, add);\n\n  CPPUNIT_ASSERT(result == 64);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/inplace_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass InplaceTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(InplaceTest);\n  CPPUNIT_TEST(inplmrg1);\n  CPPUNIT_TEST(inplmrg2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void inplmrg1();\n  void inplmrg2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(InplaceTest);\n\n//\n// tests implementation\n//\nvoid InplaceTest::inplmrg1()\n{\n  int numbers[6] = { 1, 10, 42, 3, 16, 32 };\n  inplace_merge(numbers, numbers + 3, numbers + 6);\n\n  CPPUNIT_ASSERT(numbers[0]==1);\n  CPPUNIT_ASSERT(numbers[1]==3);\n  CPPUNIT_ASSERT(numbers[2]==10);\n  CPPUNIT_ASSERT(numbers[3]==16);\n  CPPUNIT_ASSERT(numbers[4]==32);\n  CPPUNIT_ASSERT(numbers[5]==42);\n}\nvoid InplaceTest::inplmrg2()\n{\n  vector<size_t> v1(10);\n  for(size_t i = 0; i < v1.size(); ++i)\n    v1[i] =(v1.size() - i - 1) % 5;\n\n  inplace_merge(v1.begin(), v1.begin() + 5, v1.end(), greater<size_t>());\n\n  CPPUNIT_ASSERT(v1[0]==4);\n  CPPUNIT_ASSERT(v1[1]==4);\n  CPPUNIT_ASSERT(v1[2]==3);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==2);\n  CPPUNIT_ASSERT(v1[5]==2);\n  CPPUNIT_ASSERT(v1[6]==1);\n  CPPUNIT_ASSERT(v1[7]==1);\n  CPPUNIT_ASSERT(v1[8]==0);\n  CPPUNIT_ASSERT(v1[9]==0);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/insert_test.cpp",
    "content": "#include <deque>\n#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass InsertTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(InsertTest);\n  CPPUNIT_TEST(insert1);\n  CPPUNIT_TEST(insert2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void insert1();\n  void insert2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(InsertTest);\n\n//\n// tests implementation\n//\nvoid InsertTest::insert1()\n{\n  char const* array1 [] = { \"laurie\", \"jennifer\", \"leisa\" };\n  char const* array2 [] = { \"amanda\", \"saskia\", \"carrie\" };\n\n  deque<char const*> names(array1, array1 + 3);\n  deque<char const*>::iterator i = names.begin() + 2;\n\n  insert_iterator<deque <char const*> > itd(names, i);\n  itd = copy(array2, array2 + 3, insert_iterator<deque <char const*> >(names, i));\n\n  CPPUNIT_ASSERT( !strcmp(names[0], \"laurie\") );\n  CPPUNIT_ASSERT( !strcmp(names[1], \"jennifer\") );\n  CPPUNIT_ASSERT( !strcmp(names[2], \"amanda\") );\n  CPPUNIT_ASSERT( !strcmp(names[3], \"saskia\") );\n  CPPUNIT_ASSERT( !strcmp(names[4], \"carrie\") );\n  CPPUNIT_ASSERT( !strcmp(names[5], \"leisa\") );\n\n  copy(array1, array1 + 3, itd);\n  CPPUNIT_ASSERT( !strcmp(names[5], \"laurie\") );\n  CPPUNIT_ASSERT( !strcmp(names[6], \"jennifer\") );\n  CPPUNIT_ASSERT( !strcmp(names[7], \"leisa\") );\n  CPPUNIT_ASSERT( !strcmp(names[8], \"leisa\") );\n}\nvoid InsertTest::insert2()\n{\n  char const* array1 [] = { \"laurie\", \"jennifer\", \"leisa\" };\n  char const* array2 [] = { \"amanda\", \"saskia\", \"carrie\" };\n\n  deque<char const*> names(array1, array1 + 3);\n  deque<char const*>::iterator i = names.begin() + 2;\n  copy(array2, array2 + 3, inserter(names, i));\n\n  CPPUNIT_ASSERT( !strcmp(names[0], \"laurie\") );\n  CPPUNIT_ASSERT( !strcmp(names[1], \"jennifer\") );\n  CPPUNIT_ASSERT( !strcmp(names[2], \"amanda\") );\n  CPPUNIT_ASSERT( !strcmp(names[3], \"saskia\") );\n  CPPUNIT_ASSERT( !strcmp(names[4], \"carrie\") );\n  CPPUNIT_ASSERT( !strcmp(names[5], \"leisa\") );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ioiter_test.cpp",
    "content": "#include <string>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#include <sstream>\n#include <vector>\n#include <iterator>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nclass IoiterTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IoiterTest);\n  CPPUNIT_TEST(ioiter_test);\n  CPPUNIT_TEST(assign_test);\n  CPPUNIT_TEST(assign2_test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void ioiter_test();\n  void assign_test();\n  void assign2_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IoiterTest);\n\nvoid IoiterTest::ioiter_test()\n{\n\n  char c;\n  const char *pc;\n  const char *strorg = \"abcd\";\n  string tmp;\n\n  string objStr(strorg);\n\n  istringstream objIStrStrm1(objStr);\n  istringstream objIStrStrm2(objStr);\n  istringstream objIStrStrm3(objStr);\n\n  pc = strorg;\n  string::size_type sz = strlen(strorg);\n  string::size_type i;\n  for ( i = 0; i < sz; ++i ) {\n    c = *pc++;\n    tmp += c;\n  }\n  CPPUNIT_ASSERT( tmp == \"abcd\" );\n\n  istreambuf_iterator<char, char_traits<char> > objIStrmbIt1( objIStrStrm1.rdbuf() );\n  istreambuf_iterator<char, char_traits<char> > end;\n\n  tmp.clear();\n\n  for ( i = 0; i < sz /* objIStrmbIt1 != end */; ++i ) {\n    c = *objIStrmbIt1++;\n    tmp += c;\n  }\n  CPPUNIT_ASSERT( tmp == \"abcd\" );\n\n  tmp.clear();\n\n  istreambuf_iterator<char, char_traits<char> > objIStrmbIt2( objIStrStrm2.rdbuf() );\n  for ( i = 0; i < sz; ++i ) {\n    c = *objIStrmbIt2;\n    tmp += c;\n    objIStrmbIt2++;\n  }\n  CPPUNIT_ASSERT( tmp == \"abcd\" );\n\n  tmp.clear();\n\n  istreambuf_iterator<char, char_traits<char> > objIStrmbIt3( objIStrStrm3.rdbuf() );\n\n  while ( objIStrmbIt3 != end ) {\n    c = *objIStrmbIt3++;\n    tmp += c;\n  }\n  CPPUNIT_ASSERT( tmp == \"abcd\" );\n}\n\nvoid IoiterTest::assign_test()\n{\n  stringstream s( \"1234567890\" );\n  vector<char> v;\n\n  v.assign( istreambuf_iterator<char>(s), istreambuf_iterator<char>() );\n  CPPUNIT_CHECK( v.size() == 10 );\n  if ( v.size() == 10 ) {\n    CPPUNIT_CHECK( v[0] == '1' );\n    CPPUNIT_CHECK( v[9] == '0' );\n  }\n}\n\nvoid IoiterTest::assign2_test()\n{\n  stringstream s( \"1234567890\" );\n  vector<char> v;\n\n  v.assign( istreambuf_iterator<char>(s.rdbuf()), istreambuf_iterator<char>() );\n  CPPUNIT_CHECK( v.size() == 10 );\n  if ( v.size() == 10 ) {\n    CPPUNIT_CHECK( v[0] == '1' );\n    CPPUNIT_CHECK( v[9] == '0' );\n  }\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iomanip_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <iomanip>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ios_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <ios>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iosfwd_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#ifndef _STLP_NO_IOSTREAMS\n#  include <iosfwd>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iostream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <iostream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iostream_test.cpp",
    "content": "#include <string>\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n//#  include <locale>\n#  include <iostream>\n//#  include <stdexcept>\n\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// TestCase class\n//\nclass IOStreamTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IOStreamTest);\n  CPPUNIT_TEST(manipulators);\n  CPPUNIT_TEST(in_avail);\n//#if defined (STLPORT) && defined (_STLP_NO_WCHAR_T)\n  //CPPUNIT_IGNORE;\n//#endif\n  //CPPUNIT_TEST(wimbue);\n  CPPUNIT_TEST_SUITE_END();\n\nprivate:\n  void manipulators();\n  void in_avail();\n  //void wimbue();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IOStreamTest);\n\n//\n// tests implementation\n//\nvoid IOStreamTest::manipulators()\n{\n  {\n    istringstream istr;\n    istr.str(\"bar\");\n\n    istr >> ws;\n    CPPUNIT_ASSERT( istr.good() );\n\n    string foo;\n    istr >> foo;\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( foo == \"bar\" );\n\n    istr >> ws;\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( !istr.fail() );\n    istr.clear();\n  }\n\n  {\n    istringstream istr;\n    istr.str(\"  bar  \");\n\n    istr >> ws;\n    CPPUNIT_ASSERT( istr.good() );\n\n    string foo;\n    istr >> foo;\n    CPPUNIT_ASSERT( !istr.eof() );\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( foo == \"bar\" );\n\n    istr >> ws;\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( !istr.fail() );\n    istr.clear();\n  }\n}\n\n\nvoid IOStreamTest::in_avail()\n{\n  CPPUNIT_CHECK( cin.rdbuf()->in_avail() == 0 );\n  CPPUNIT_CHECK( cout.rdbuf()->in_avail() == -1 );\n  CPPUNIT_CHECK( clog.rdbuf()->in_avail() == -1 );\n  CPPUNIT_CHECK( cerr.rdbuf()->in_avail() == -1 );\n\n#if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n  CPPUNIT_CHECK( wcin.rdbuf()->in_avail() == 0 );\n  CPPUNIT_CHECK( wcout.rdbuf()->in_avail() == 0 );\n  CPPUNIT_CHECK( wclog.rdbuf()->in_avail() == 0 );\n  CPPUNIT_CHECK( wcerr.rdbuf()->in_avail() == 0 );\n#endif\n}\n\n//void IOStreamTest::wimbue()\n//{\n//#if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n//  locale loc;\n//  try {\n//    locale tmp(\".866\");\n//    loc = tmp;\n//  }\n//  catch (const runtime_error&) {\n//    return;\n//  }\n//\n//  wcout.imbue(loc);\n//  wcout << L\"Hello world\" << endl;\n//  wcout.imbue(loc);\n//  wcout << L\"Hello world\" << endl;\n//#endif\n//}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iota.h",
    "content": "#ifndef IOTA_H\n#define IOTA_H\n\n#include <numeric>\n\n//iota definition used in unit test\ntemplate <typename _It, typename _Tp>\nvoid __iota(_It __first, _It __last, _Tp __val) {\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  iota(__first, __last, __val);\n#else\n  while (__first != __last) {\n    *__first++ = __val++;\n  }\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iota_test.cpp",
    "content": "#include <vector>\n#include <numeric>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass IotaTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IotaTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(iota1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void iota1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IotaTest);\n\n//\n// tests implementation\n//\nvoid IotaTest::iota1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int numbers[10];\n  iota(numbers, numbers + 10, 42);\n  CPPUNIT_ASSERT(numbers[0]==42);\n  CPPUNIT_ASSERT(numbers[1]==43);\n  CPPUNIT_ASSERT(numbers[2]==44);\n  CPPUNIT_ASSERT(numbers[3]==45);\n  CPPUNIT_ASSERT(numbers[4]==46);\n  CPPUNIT_ASSERT(numbers[5]==47);\n  CPPUNIT_ASSERT(numbers[6]==48);\n  CPPUNIT_ASSERT(numbers[7]==49);\n  CPPUNIT_ASSERT(numbers[8]==50);\n  CPPUNIT_ASSERT(numbers[9]==51);\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iso646_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <iso646.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/istmit_test.cpp",
    "content": "#include <algorithm>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n#  include <functional>\n#  include <iterator>\n#  include <vector>\n#  include <string>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass IStreamIteratorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IStreamIteratorTest);\n#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(istmit1);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(copy_n_test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void istmit1();\n  void copy_n_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IStreamIteratorTest);\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  if !defined (STLPORT) || !defined (_STLP_LIMITED_DEFAULT_TEMPLATES)\ntypedef istream_iterator<char> istream_char_ite;\ntypedef istream_iterator<int> istream_int_ite;\ntypedef istream_iterator<string> istream_string_ite;\n#  else\ntypedef istream_iterator<char, ptrdiff_t> istream_char_ite;\ntypedef istream_iterator<int, ptrdiff_t> istream_int_ite;\ntypedef istream_iterator<string, ptrdiff_t> istream_string_ite;\n#  endif\n#endif\n\n//\n// tests implementation\n//\nvoid IStreamIteratorTest::istmit1()\n{\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n  const char* buff = \"MyString\";\n  istringstream istr(buff);\n\n  char buffer[100];\n  size_t i = 0;\n  istr.unsetf(ios::skipws); // Disable white-space skipping.\n  istream_char_ite s(istr), meos;\n  while (!(s == meos)  &&\n  //*TY 01/10/1999 - added end of stream check\n  // NOTE operator!= should not be used here ifndef _STLP_FUNCTION_TMPL_PARTIAL_ORDER\n         (*s != '\\n') &&\n         (i < sizeof(buffer) / sizeof(buffer[0]))) {  //*TY 07/28/98 - added index check\n    buffer[i++] = *s++;\n  }\n  buffer[i] = '\\0'; // Null terminate buffer.\n\n  CPPUNIT_ASSERT(!strcmp(buffer, buff));\n\n  {\n    istringstream empty_istr;\n    CPPUNIT_ASSERT( istream_char_ite(empty_istr) == istream_char_ite() );\n  }\n#endif\n}\n\nvoid IStreamIteratorTest::copy_n_test()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && !defined (_STLP_USE_NO_IOSTREAMS)\n  //This test check that no character is lost while reading the istream\n  //through a istream_iterator.\n  {\n    istringstream istr(\"aabbcd\");\n    string chars;\n    istream_char_ite ite = copy_n(copy_n(istream_char_ite(istr),\n                                         2, back_inserter(chars)).first,\n                                  2, back_inserter(chars)).first;\n    CPPUNIT_ASSERT( chars == \"aabb\" );\n    copy_n(ite, 2, back_inserter(chars));\n    CPPUNIT_ASSERT( chars == \"aabbcd\" );\n  }\n\n  {\n    istringstream istr(\"11 22 AA BB 33 44 CC DD\");\n    vector<int> ints;\n    vector<string> strings;\n\n    copy_n(istream_int_ite(istr), 2, back_inserter(ints));\n    CPPUNIT_ASSERT( ints.size() == 2 );\n    CPPUNIT_ASSERT( ints[0] == 11 );\n    CPPUNIT_ASSERT( ints[1] == 22 );\n    ints.clear();\n    istr.clear();\n    copy_n(istream_string_ite(istr), 2, back_inserter(strings));\n    CPPUNIT_ASSERT( strings.size() == 2 );\n    CPPUNIT_ASSERT( strings[0] == \"AA\" );\n    CPPUNIT_ASSERT( strings[1] == \"BB\" );\n    strings.clear();\n    istr.clear();\n    /* The following code cannot work, '33' is extracted as a string\n     * in the previous copy_n call, this value is returned in the pair\n     * returned by copy_n but is lost as this istream_iterator is not used.\n     * copy_n and istream_iterator can only be combined safely if:\n     * - you always extract the same type of istream_iterator and you always reuse\n     * the istream_iterator returned by copy_n (see previous test with \"aabbcd\")\n     * - you extract different type of object and no object is convertible to an other\n     * as in this current test when you extract int and string (when you extract ints\n     * again it fails as int can be converted to strings.\n     *\n    copy_n(istream_int_ite(istr), 2, back_inserter(ints));\n    CPPUNIT_ASSERT( ints.size() == 2 );\n    CPPUNIT_ASSERT( ints[0] == 33 );\n    CPPUNIT_ASSERT( ints[1] == 44 );\n    istr.clear();\n    copy_n(istream_string_ite(istr), 2, back_inserter(strings));\n    CPPUNIT_ASSERT( strings.size() == 2 );\n    CPPUNIT_ASSERT( strings[0] == \"CC\" );\n    CPPUNIT_ASSERT( strings[1] == \"DD\" );\n    */\n  }\n\n  {\n    istringstream is(\"1 2 3 4 5 6 7 8 9 10\");\n    vector<int> ints;\n    istream_iterator<int> itr(is);\n    itr = copy_n(itr, 0, back_inserter(ints)).first;\n    CPPUNIT_ASSERT( ints.empty() );\n    itr = copy_n(itr, -1, back_inserter(ints)).first;\n    CPPUNIT_ASSERT( ints.empty() );\n    itr = copy_n(itr, 2, back_inserter(ints)).first;\n    CPPUNIT_ASSERT( ints.size() == 2 );\n    CPPUNIT_ASSERT( ints[0] == 1 );\n    CPPUNIT_ASSERT( ints[1] == 2 );\n    itr = copy_n(itr, 2, back_inserter(ints)).first;\n    CPPUNIT_ASSERT( ints.size() == 4 );\n    CPPUNIT_ASSERT( ints[2] == 3 );\n    CPPUNIT_ASSERT( ints[3] == 4 );\n    itr = copy_n(itr, 2, back_inserter(ints)).first;\n    CPPUNIT_ASSERT( ints.size() == 6 );\n    CPPUNIT_ASSERT( ints[4] == 5 );\n    CPPUNIT_ASSERT( ints[5] == 6 );\n  }\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/istream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <istream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iter_test.cpp",
    "content": "#include <vector>\n#include <list>\n#include <algorithm>\n#include <numeric>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass IterTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(IterTest);\n  CPPUNIT_TEST(iter1);\n  CPPUNIT_TEST(iter3);\n  CPPUNIT_TEST(iter4);\n  CPPUNIT_TEST(iterswp0);\n  CPPUNIT_TEST(iterswp1);\n  CPPUNIT_TEST(iterswp2);\n  CPPUNIT_TEST(iterswp3);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void iter1();\n  void iter3();\n  void iter4();\n  void iterswp0();\n  void iterswp1();\n  void iterswp2();\n  void iterswp3();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(IterTest);\n\n//\n// tests implementation\n//\nvoid IterTest::iter1()\n{\n  vector<const char*> v; // Vector of character strings.\n  v.push_back(\"zippy\"); // First element.\n  v.push_back(\"motorboy\"); // Second element.\n  typedef vector<const char*> vec;\n  unsigned counter = 0;\n  for (vec::iterator i = v.begin(); i != v.end(); ++i, ++counter) {\n    switch (counter) {\n      case 0:\n        CPPUNIT_ASSERT(!strcmp(*i, \"zippy\"));\n        break;\n      case 1:\n        CPPUNIT_ASSERT(!strcmp(*i, \"motorboy\"));\n        break;\n      default:\n        CPPUNIT_FAIL;\n    }\n  }\n}\nvoid IterTest::iter3()\n{\n  typedef vector<const char*> Vec;\n  Vec v; // Vector of character strings.\n  v.push_back(\"zippy\"); // First element.\n  v.push_back(\"motorboy\"); // Second element.\n  Vec::reverse_iterator it;\n  unsigned counter = 0;\n  for (it = v.rbegin(); it != v.rend(); ++it, ++counter) {\n    switch (counter) {\n      case 1:\n        CPPUNIT_ASSERT(!strcmp(*it, \"zippy\"));\n        break;\n      case 0:\n        CPPUNIT_ASSERT(!strcmp(*it, \"motorboy\"));\n        break;\n      default:\n        CPPUNIT_FAIL;\n    }\n  }\n}\nvoid IterTest::iter4()\n{\n  vector<int> v; // Empty vector of integers.\n  v.push_back(1);\n  v.push_back(2);\n  v.push_back(3);\n  // Position immediately after last item.\n  vector<int>::iterator i = v.end();\n  // Move back one and then access.\n  CPPUNIT_ASSERT((*--i)==3);\n  i -= 2; // Jump back two items.\n  CPPUNIT_ASSERT((*i)==1);\n}\nvoid IterTest::iterswp0()\n{\n  int numbers[6] = { 0, 1, 2, 3, 4, 5 };\n\n  iter_swap(numbers, numbers + 3);\n\n  CPPUNIT_ASSERT(numbers[0]==3);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==2);\n  CPPUNIT_ASSERT(numbers[3]==0);\n  CPPUNIT_ASSERT(numbers[4]==4);\n  CPPUNIT_ASSERT(numbers[5]==5);\n\n}\nvoid IterTest::iterswp1()\n{\n  vector<int> v1(6);\n  __iota(v1.begin(), v1.end(), 0);\n  iter_swap( v1.begin(), v1.begin() + 3 );\n\n  CPPUNIT_ASSERT(v1[0]==3);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==0);\n  CPPUNIT_ASSERT(v1[4]==4);\n  CPPUNIT_ASSERT(v1[5]==5);\n}\nvoid IterTest::iterswp2()\n{\n  vector<bool> boolVector;\n\n  boolVector.push_back( true );\n  boolVector.push_back( false );\n\n  vector<bool>::iterator i1 = boolVector.begin();\n  vector<bool>::iterator i2 = boolVector.begin();\n  ++i2;\n\n  bool v0 = *i1;\n  bool v1 = *i2;\n\n  iter_swap( i1, i2 );\n\n  CPPUNIT_ASSERT(( *i1 == v1 && *i2 == v0 ));\n}\n\n\nvoid IterTest::iterswp3()\n{\n  vector<int> vvref(10, 10);\n  vector<int> lvref(10, 20);\n\n  vector<vector<int> > vvints(4, vvref);\n  list<vector<int> > lvints(4, lvref);\n\n  iter_swap(vvints.begin(), lvints.begin());\n  CPPUNIT_CHECK( vvints.front() == lvref );\n  CPPUNIT_CHECK( lvints.front() == vvref );\n\n  //const vector<vector<int> > &cvvints = vvints;\n  //iter_swap(cvvints.begin(), lvints.begin());\n  //iter_swap(lvints.begin(), cvvints.begin());\n\n#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  int *pvvint = &vvints.front().front();\n  int *plvint = &lvints.front().front();\n\n  iter_swap(vvints.begin(), lvints.begin());\n  //Check that elements have been swaped:\n  CPPUNIT_CHECK( pvvint == &lvints.front().front() );\n  CPPUNIT_CHECK( plvint == &vvints.front().front() );\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/iterator_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <iterator>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/less_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass LessTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(LessTest);\n  CPPUNIT_TEST(lesst);\n  CPPUNIT_TEST(lesseqt);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void lesst();\n  void lesseqt();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(LessTest);\n\n//\n// tests implementation\n//\nvoid LessTest::lesst()\n{\n  int array [4] = { 3, 1, 4, 2 };\n  sort(array, array + 4, less<int>());\n\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==2);\n  CPPUNIT_ASSERT(array[2]==3);\n  CPPUNIT_ASSERT(array[3]==4);\n}\nvoid LessTest::lesseqt()\n{\n  int array [4] = { 3, 1, 4, 2 };\n  sort(array, array + 4, less_equal<int>());\n\n  CPPUNIT_ASSERT(array[0]==1);\n  CPPUNIT_ASSERT(array[1]==2);\n  CPPUNIT_ASSERT(array[2]==3);\n  CPPUNIT_ASSERT(array[3]==4);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/lexcmp_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass LexcmpTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(LexcmpTest);\n  CPPUNIT_TEST(lexcmp1);\n  CPPUNIT_TEST(lexcmp2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void lexcmp1();\n  void lexcmp2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(LexcmpTest);\n\n//\n// tests implementation\n//\nvoid LexcmpTest::lexcmp1()\n{\n  const unsigned size = 6;\n  char n1[size] = \"shoe\";\n  char n2[size] = \"shine\";\n\n  bool before = lexicographical_compare(n1, n1 + size, n2, n2 + size);\n  CPPUNIT_ASSERT(!before);\n}\nvoid LexcmpTest::lexcmp2()\n{\n  const unsigned size = 6;\n  char n1[size] = \"shoe\";\n  char n2[size] = \"shine\";\n\n  bool before = lexicographical_compare(n1, n1 + size, n2, n2 + size, greater<char>());\n  CPPUNIT_ASSERT(before);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/limits_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <limits>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/limits_test.cpp",
    "content": "/* boost limits_test.cpp   test your <limits> file for important\n *\n * Copyright Jens Maurer 2000\n * Permission to use, copy, modify, sell, and distribute this software\n * is hereby granted without fee provided that the above copyright notice\n * appears in all copies and that both that copyright notice and this\n * permission notice appear in supporting documentation,\n *\n * Jens Maurer makes no representations about the suitability of this\n * software for any purpose. It is provided \"as is\" without express or\n * implied warranty.\n *\n */\n\n#include <limits>\n//#include <sstream>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass LimitTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(LimitTest);\n#  if defined (__BORLANDC__)\n  /* Ignore FPU exceptions, set FPU precision to 64 bits */\n  unsigned int _float_control_word = _control87(0, 0);\n  _control87(PC_64|MCW_EM|IC_AFFINE, MCW_PC|MCW_EM|MCW_IC);\n#  endif\n  CPPUNIT_TEST(test);\n  CPPUNIT_TEST(qnan_test);\n#  if defined (__BORLANDC__)\n  /* Reset floating point control word */\n  _clear87();\n  _control87(_float_control_word, MCW_PC|MCW_EM|MCW_IC);\n#  endif\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void test();\n  void qnan_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(LimitTest);\n\n#if defined (STLPORT) && defined (_STLP_STATIC_CONST_INIT_BUG)\n#  define CHECK_COND(X) if (!(X))  { CPPUNIT_MESSAGE(#X); return false; }\n#else\n//This version force to have external linkage on static constant which might\n//reveal that _STLP_NO_STATIC_CONST_DEFINITION should be commented.\nbool check_cond(const bool& cond) { return cond; }\n#  define CHECK_COND(X) if (!check_cond(X)) { CPPUNIT_MESSAGE(#X); return false; }\n#endif\n\nbool valid_sign_info(bool, bool)\n{ return true; }\n\ntemplate <class _Tp>\nbool valid_sign_info(bool limit_is_signed, const _Tp &) {\n  return (limit_is_signed && _Tp(-1) < 0) ||\n         (!limit_is_signed && _Tp(-1) > 0);\n}\n\ntemplate <class _Tp>\nbool test_integral_limits_base(const _Tp &, bool unknown_sign = true, bool is_signed = true) {\n  typedef numeric_limits<_Tp> lim;\n\n  CHECK_COND(lim::is_specialized);\n  CHECK_COND(lim::is_exact);\n  CHECK_COND(lim::is_integer);\n  CHECK_COND(!lim::is_iec559);\n  CHECK_COND(lim::min() < lim::max());\n  CHECK_COND((unknown_sign && ((lim::is_signed && (lim::min() != 0)) || (!lim::is_signed && (lim::min() == 0)))) ||\n             (!unknown_sign && ((lim::is_signed && is_signed) || (!lim::is_signed && !is_signed))));\n\n  if (unknown_sign) {\n    CHECK_COND(valid_sign_info(lim::is_signed, _Tp()));\n  }\n  return true;\n}\n\ntemplate <class _Tp>\nbool test_integral_limits(const _Tp &val, bool unknown_sign = true, bool is_signed = true) {\n  if (!test_integral_limits_base(val, unknown_sign, is_signed))\n    return false;\n\n  typedef numeric_limits<_Tp> lim;\n\n  CHECK_COND(lim::is_modulo);\n\n  if (lim::is_bounded ||\n     (!lim::is_bounded && !lim::is_signed)) {\n    _Tp tmp = lim::min();\n    CHECK_COND( --tmp > lim::min() );\n  }\n\n  if (lim::is_bounded) {\n    _Tp tmp = lim::max();\n    CHECK_COND( ++tmp < lim::max() );\n  }\n\n  return true;\n}\n\ntemplate <class _Tp>\nbool test_signed_integral_limits(const _Tp &__val) {\n  return test_integral_limits(__val, false, true);\n}\ntemplate <class _Tp>\nbool test_unsigned_integral_limits(const _Tp &__val) {\n  return test_integral_limits(__val, false, false);\n}\n\ntemplate <class _Tp>\nbool test_float_values(_Tp lhs, _Tp rhs)\n{ return lhs == rhs; }\n\ntemplate <class _Tp>\nbool test_float_limits(const _Tp &) {\n  typedef numeric_limits<_Tp> lim;\n  CHECK_COND(lim::is_specialized);\n  CHECK_COND(!lim::is_modulo);\n  CHECK_COND(!lim::is_integer);\n  CHECK_COND(lim::is_signed);\n\n  CHECK_COND(lim::max() > 1000);\n  CHECK_COND(lim::min() > 0);\n  CHECK_COND(lim::min() < 0.001);\n  CHECK_COND(lim::epsilon() > 0);\n\n  if (lim::is_iec559) {\n    CHECK_COND(lim::has_infinity);\n    CHECK_COND(lim::has_quiet_NaN);\n    CHECK_COND(lim::has_signaling_NaN);\n    CHECK_COND(lim::has_denorm == denorm_present);\n  }\n\n  if (lim::has_denorm == denorm_absent) {\n    CHECK_COND(lim::denorm_min() == lim::min());\n    _Tp tmp = lim::min();\n    tmp /= 2;\n    if (tmp > 0 && tmp < lim::min()) {\n      // has_denorm could be denorm_present\n      CPPUNIT_MESSAGE(\"It looks like your compiler/platform supports denormalized floating point representation.\");\n    }\n  }\n  else if (lim::has_denorm == denorm_present) {\n    CHECK_COND(lim::denorm_min() > 0);\n    CHECK_COND(lim::denorm_min() < lim::min());\n\n    _Tp tmp = lim::min();\n    while (tmp != 0) {\n      _Tp old_tmp = tmp;\n      tmp /= 2;\n      CHECK_COND(tmp < old_tmp);\n      CHECK_COND(tmp >= lim::denorm_min() || tmp == (_Tp)0);\n      //ostringstream str;\n      //str << \"denorm_min = \" << lim::denorm_min() << \", tmp = \" << tmp;\n      //CPPUNIT_MESSAGE(str.str().c_str());\n    }\n  }\n\n  if (lim::has_infinity) {\n    const _Tp infinity = lim::infinity();\n    /* Make sure those values are not 0 or similar nonsense.\n     * Infinity must compare as if larger than the maximum representable value. */\n\n    _Tp val = lim::max();\n    val *= 2;\n\n    /* We use test_float_values because without it some compilers (gcc) perform weird\n     * optimization on the test giving unexpected result. */\n    CHECK_COND(test_float_values(val, infinity));\n\n    /*\n    ostringstream str;\n    str << \"lim::max() = \" << lim::max() << \", val = \" << val << \", infinity = \" << infinity;\n    CPPUNIT_MESSAGE( str.str().c_str() );\n    str.str(string());\n    str << \"sizeof(_Tp) = \" << sizeof(_Tp);\n    CPPUNIT_MESSAGE( str.str().c_str() );\n    if (sizeof(_Tp) == 4) {\n      str.str(string());\n      str << \"val in hexa: \" << showbase << hex << *((const unsigned int*)&val);\n      str << \", infinity in hexa: \" << showbase << hex << *((const unsigned int*)&infinity);\n    }\n#if defined (_STLP_LONG_LONG)\n    else if (sizeof(_Tp) == sizeof(_STLP_LONG_LONG)) {\n      str.str(string());\n      str << \"val in hexa: \" << showbase << hex << *((const unsigned _STLP_LONG_LONG*)&val);\n      str << \", infinity in hexa: \" << showbase << hex << *((const unsigned _STLP_LONG_LONG*)&infinity);\n    }\n#endif\n    else {\n      str.str(string());\n      str << \"val: \";\n      for (int i = 0; i != sizeof(_Tp) /  sizeof(unsigned short); ++i) {\n        if (i != 0) str << ' ';\n        str << showbase << hex << setw(4) << setfill('0') << *((const unsigned short*)&val + i);\n      }\n      str << \", infinity: \";\n      for (int i = 0; i != sizeof(_Tp) /  sizeof(unsigned short); ++i) {\n        if (i != 0) str << ' ';\n        str << showbase << hex << setw(4) << setfill('0') << *((const unsigned short*)&infinity + i);\n      }\n    }\n    CPPUNIT_MESSAGE( str.str().c_str() );\n    str.str(string());\n    str << dec;\n    str << \"lim::digits = \" << lim::digits << \", lim::digits10 = \" << lim::digits10 << endl;\n    str << \"lim::min_exponent = \" << lim::min_exponent << \", lim::min_exponent10 = \" << lim::min_exponent10 << endl;\n    str << \"lim::max_exponent = \" << lim::max_exponent << \", lim::max_exponent10 = \" << lim::max_exponent10 << endl;\n    CPPUNIT_MESSAGE( str.str().c_str() );\n    */\n\n    CHECK_COND(infinity == infinity);\n    CHECK_COND(infinity > lim::max());\n    CHECK_COND(-infinity < -lim::max());\n  }\n\n  return true;\n}\n\n//float generate_nan(float f) {\n//  return 0.0f / f;\n//}\ntemplate <class _Tp>\nbool test_qnan(const _Tp &) {\n  typedef numeric_limits<_Tp> lim;\n  if (lim::has_quiet_NaN) {\n    const _Tp qnan = lim::quiet_NaN();\n\n    //if (sizeof(_Tp) == 4) {\n    //  ostringstream str;\n    //  str << \"qnan \" << qnan << \", in hexa: \" << showbase << hex << *((unsigned int*)&qnan);\n    //  CPPUNIT_MESSAGE( str.str().c_str() );\n    //  str.str(\"\");\n    //  float val = generate_nan(0.0f);\n    //  str << \"val \" << val << \", in hexa: \" << showbase << hex << *((unsigned int*)&val);\n    //  CPPUNIT_MESSAGE( str.str().c_str() );\n    //  str.str(\"\");\n    //  val = -qnan;\n    //  str << \"-qnan \" << val << \", in hexa: \" << showbase << hex << *((unsigned int*)&val);\n    //  CPPUNIT_MESSAGE( str.str().c_str() );\n    //}\n    /* NaNs shall always compare \"false\" when compared for equality\n    * If one of these fail, your compiler may be optimizing incorrectly,\n    * or the STLport is incorrectly configured.\n    */\n    CHECK_COND(! (qnan == 42));\n    CHECK_COND(! (qnan == qnan));\n    CHECK_COND(qnan != 42);\n    CHECK_COND(qnan != qnan);\n\n    /* The following tests may cause arithmetic traps.\n    * CHECK_COND(! (qnan < 42));\n    * CHECK_COND(! (qnan > 42));\n    * CHECK_COND(! (qnan <= 42));\n    * CHECK_COND(! (qnan >= 42));\n    */\n  }\n  return true;\n}\n\n\nclass ArbitraryType\n{};\n\nvoid LimitTest::test() {\n  CPPUNIT_CHECK(test_integral_limits_base(bool()));\n  CPPUNIT_CHECK(test_integral_limits(char()));\n  typedef signed char signed_char;\n  CPPUNIT_CHECK(test_signed_integral_limits(signed_char()));\n  typedef unsigned char unsigned_char;\n  CPPUNIT_CHECK(test_unsigned_integral_limits(unsigned_char()));\n#  if defined (_STLP_HAS_WCHAR_T) && !defined (_STLP_WCHAR_T_IS_USHORT)\n  CPPUNIT_CHECK(test_integral_limits(wchar_t()));\n#  endif\n  CPPUNIT_CHECK(test_signed_integral_limits(short()));\n  typedef unsigned short unsigned_short;\n  CPPUNIT_CHECK(test_unsigned_integral_limits(unsigned_short()));\n  CPPUNIT_CHECK(test_signed_integral_limits(int()));\n  typedef unsigned int unsigned_int;\n  CPPUNIT_CHECK(test_unsigned_integral_limits(unsigned_int()));\n  CPPUNIT_CHECK(test_signed_integral_limits(long()));\n  typedef unsigned long unsigned_long;\n  CPPUNIT_CHECK(test_unsigned_integral_limits(unsigned_long()));\n#  if defined (_STLP_LONG_LONG)\n  typedef _STLP_LONG_LONG long_long;\n  CPPUNIT_CHECK(test_signed_integral_limits(long_long()));\n  typedef unsigned _STLP_LONG_LONG unsigned_long_long;\n  CPPUNIT_CHECK(test_unsigned_integral_limits(unsigned_long_long()));\n#endif\n\n  CPPUNIT_CHECK(test_float_limits(float()));\n  CPPUNIT_CHECK(test_float_limits(double()));\n#  if !defined ( _STLP_NO_LONG_DOUBLE )\n  typedef long double long_double;\n  CPPUNIT_CHECK(test_float_limits(long_double()));\n#  endif\n\n  CPPUNIT_ASSERT( !numeric_limits<ArbitraryType>::is_specialized );\n}\n\nvoid LimitTest::qnan_test() {\n  CPPUNIT_CHECK(test_qnan(float()));\n  CPPUNIT_CHECK(test_qnan(double()));\n#  if !defined ( _STLP_NO_LONG_DOUBLE )\n  typedef long double long_double;\n  CPPUNIT_CHECK(test_qnan(long_double()));\n#  endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/list_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <list>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/list_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <list>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ListTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ListTest);\n  CPPUNIT_TEST(list1);\n  CPPUNIT_TEST(list2);\n  CPPUNIT_TEST(list3);\n  CPPUNIT_TEST(list4);\n  CPPUNIT_TEST(erase);\n  CPPUNIT_TEST(resize);\n  CPPUNIT_TEST(push_back);\n  CPPUNIT_TEST(push_front);\n  CPPUNIT_TEST(allocator_with_state);\n  CPPUNIT_TEST(swap);\n  CPPUNIT_TEST(adl);\n  //CPPUNIT_TEST(const_list);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void list1();\n  void list2();\n  void list3();\n  void list4();\n  void erase();\n  void resize();\n  void push_back();\n  void push_front();\n  void allocator_with_state();\n  void swap();\n  void adl();\n  //void const_list();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ListTest);\n\n//\n// tests implementation\n//\nvoid ListTest::list1()\n{\n  int array1 [] = { 9, 16, 36 };\n  int array2 [] = { 1, 4 };\n\n  list<int> l1(array1, array1 + 3);\n  list<int> l2(array2, array2 + 2);\n  list<int>::iterator i1 = l1.begin();\n  list<int>::iterator i2 = l2.begin();\n  list<int>::const_iterator ci(i1);\n  list<int>::const_iterator ci1(ci);\n  l1.splice(i1, l2);\n  i1 = l1.begin();\n  CPPUNIT_ASSERT( *i1++ == 1 );\n  CPPUNIT_ASSERT( *i1++ == 4 );\n  CPPUNIT_ASSERT( *i1++ == 9 );\n  CPPUNIT_ASSERT( *i1++ == 16 );\n  CPPUNIT_ASSERT( *i1++ == 36 );\n\n#if defined (STLPORT) && \\\n   (!defined (_STLP_DEBUG) || (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL))\n  CPPUNIT_ASSERT( i2 == l1.begin() );\n#endif\n\n  //Default construct check (_STLP_DEF_CONST_PLCT_NEW_BUG)\n  list<int> l(2);\n  i1 = l.begin();\n  CPPUNIT_ASSERT( *(i1++) == 0 );\n  CPPUNIT_ASSERT( *i1 == 0 );\n#if 0\n  //A small compilation time check to be activated from time to time,\n  //compilation should fail.\n  {\n    list<char>::iterator l_char_ite;\n    list<int>::iterator l_int_ite;\n    CPPUNIT_ASSERT( l_char_ite != l_int_ite );\n  }\n#endif\n}\n\nvoid ListTest::list2()\n{\n  int array1 [] = { 1, 16 };\n  int array2 [] = { 4, 9 };\n\n  list<int> l1(array1, array1 + 2);\n  list<int> l2(array2, array2 + 2);\n  list<int>::iterator i = l1.begin();\n  i++;\n  l1.splice(i, l2, l2.begin(), l2.end());\n  i = l1.begin();\n  CPPUNIT_ASSERT(*i++==1);\n  CPPUNIT_ASSERT(*i++==4);\n  CPPUNIT_ASSERT(*i++==9);\n  CPPUNIT_ASSERT(*i++==16);\n}\n\nvoid ListTest::list3()\n{\n  char array [] = { 'x', 'l', 'x', 't', 's', 's' };\n\n  list<char> str(array, array + 6);\n  list<char>::iterator i;\n\n  str.reverse();\n  i = str.begin();\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='t');\n  CPPUNIT_ASSERT(*i++=='x');\n  CPPUNIT_ASSERT(*i++=='l');\n  CPPUNIT_ASSERT(*i++=='x');\n\n  str.remove('x');\n  i = str.begin();\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='t');\n  CPPUNIT_ASSERT(*i++=='l');\n\n  str.unique();\n  i = str.begin();\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='t');\n  CPPUNIT_ASSERT(*i++=='l');\n\n  str.sort();\n  i = str.begin();\n  CPPUNIT_ASSERT(*i++=='l');\n  CPPUNIT_ASSERT(*i++=='s');\n  CPPUNIT_ASSERT(*i++=='t');\n}\n\nvoid ListTest::list4()\n{\n  int array1 [] = { 1, 3, 6, 7 };\n  int array2 [] = { 2, 4 };\n\n  list<int> l1(array1, array1 + 4);\n  list<int> l2(array2, array2 + 2);\n  l1.merge(l2);\n  list<int>::iterator i = l1.begin();\n  CPPUNIT_ASSERT(*i++==1);\n  CPPUNIT_ASSERT(*i++==2);\n  CPPUNIT_ASSERT(*i++==3);\n  CPPUNIT_ASSERT(*i++==4);\n  CPPUNIT_ASSERT(*i++==6);\n  CPPUNIT_ASSERT(*i++==7);\n\n  //We use distance to avoid a simple call to an internal counter\n  CPPUNIT_ASSERT(distance(l1.begin(), l1.end()) == 6);\n  CPPUNIT_ASSERT(distance(l2.begin(), l2.end()) == 0);\n\n  l1.swap(l2);\n\n  CPPUNIT_ASSERT(distance(l1.begin(), l1.end()) == 0);\n  CPPUNIT_ASSERT(distance(l2.begin(), l2.end()) == 6);\n}\n\nvoid ListTest::erase()\n{\n  list<int> l;\n  l.push_back( 1 );\n  l.erase(l.begin());\n  CPPUNIT_ASSERT( l.empty() );\n\n  int array[] = { 0, 1, 2, 3 };\n  l.assign(array, array + 4);\n  list<int>::iterator lit;\n  lit = l.erase(l.begin());\n  CPPUNIT_ASSERT( *lit == 1 );\n\n  lit = l.erase(l.begin(), --l.end());\n  CPPUNIT_ASSERT( *lit == 3 );\n\n  l.clear();\n  CPPUNIT_ASSERT( l.empty() );\n}\n\n\nvoid ListTest::resize()\n{\n  {\n    list<int> l;\n    l.resize(5, 1);\n\n    size_t i;\n    list<int>::iterator lit(l.begin());\n    for (i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( lit != l.end() );\n      CPPUNIT_ASSERT( *(lit++) == 1 );\n    }\n    CPPUNIT_ASSERT( lit == l.end() );\n\n    l.resize(3);\n    lit = l.begin();\n    for (i = 0; i < 3; ++i) {\n      CPPUNIT_ASSERT( lit != l.end() );\n      CPPUNIT_ASSERT( *(lit++) == 1 );\n    }\n    CPPUNIT_ASSERT( lit == l.end() );\n  }\n\n  {\n    list<int> l;\n    l.resize(5);\n\n    size_t i;\n    list<int>::iterator lit(l.begin());\n    for (i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( lit != l.end() );\n      CPPUNIT_ASSERT( *(lit++) == 0 );\n    }\n    CPPUNIT_ASSERT( lit == l.end() );\n  }\n}\n\nvoid ListTest::push_back()\n{\n  list<int> l;\n  l.push_back( 1 );\n  l.push_back( 2 );\n  l.push_back( 3 );\n\n  list<int>::reverse_iterator r = l.rbegin();\n\n  CPPUNIT_ASSERT( *r == 3 );\n  l.push_back( 4 );\n  /*\n   * Following lines are commented, because ones show standard contradiction\n   * (24.4.1 and 23.2.2.3); but present behaviour is valid, 24.4.1, paragraphs 1 and 2,\n   * 24.4.1.3.3 and 23.1 paragraph 9 (Table 66). The 24.4.1 is more common rule,\n   * so it has preference under 23.2.2.3, by my opinion.\n   *\n   *      - ptr\n   */\n  // CPPUNIT_ASSERT( *r == 3 );\n  // ++r;\n  // CPPUNIT_ASSERT( *r == 2 );\n}\n\nvoid ListTest::push_front()\n{\n  list<int> l;\n  l.push_back( 1 );\n  l.push_back( 2 );\n  l.push_back( 3 );\n\n  list<int>::iterator i = l.begin();\n\n  CPPUNIT_ASSERT( *i == 1 );\n  l.push_front( 0 );\n  CPPUNIT_ASSERT( *i == 1 );\n  ++i;\n  CPPUNIT_ASSERT( *i == 2 );\n}\n\nvoid ListTest::allocator_with_state()\n{\n  char buf1[1024];\n  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n  typedef list<int, StackAllocator<int> > ListInt;\n  {\n    //Swap with both list non empty\n    ListInt lint1(10, 0, stack1);\n    ListInt lint1Cpy(lint1);\n\n    ListInt lint2(10, 1, stack2);\n    ListInt lint2Cpy(lint2);\n\n    lint1.swap(lint2);\n\n    CPPUNIT_ASSERT( lint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( lint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( lint1 == lint2Cpy );\n    CPPUNIT_ASSERT( lint2 == lint1Cpy );\n    CPPUNIT_ASSERT( lint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( lint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    //Swap with empty calle list\n    ListInt lint1(10, 0, stack1);\n    ListInt lint1Cpy(lint1);\n\n    ListInt lint2(stack2);\n    ListInt lint2Cpy(lint2);\n\n    lint1.swap(lint2);\n\n    CPPUNIT_ASSERT( lint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( lint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( lint1 == lint2Cpy );\n    CPPUNIT_ASSERT( lint2 == lint1Cpy );\n    CPPUNIT_ASSERT( lint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( lint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    //Swap with empty caller list\n    ListInt lint1(stack1);\n    ListInt lint1Cpy(lint1);\n\n    ListInt lint2(10, 0, stack2);\n    ListInt lint2Cpy(lint2);\n\n    lint1.swap(lint2);\n\n    CPPUNIT_ASSERT( lint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( lint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( lint1 == lint2Cpy );\n    CPPUNIT_ASSERT( lint2 == lint1Cpy );\n    CPPUNIT_ASSERT( lint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( lint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    ListInt lint1(10, 0, stack1);\n    ListInt lint2(10, 1, stack2);\n\n    lint1.splice(lint1.begin(), lint2);\n    CPPUNIT_ASSERT( lint1.size() == 20 );\n    CPPUNIT_ASSERT( lint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    ListInt lint1(10, 0, stack1);\n    ListInt lint2(10, 1, stack2);\n\n    lint1.splice(lint1.begin(), lint2, lint2.begin());\n    CPPUNIT_ASSERT( lint1.size() == 11 );\n    CPPUNIT_ASSERT( lint2.size() == 9 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    ListInt lint1(10, 0, stack1);\n    ListInt lint2(10, 1, stack2);\n\n    ListInt::iterator lit(lint2.begin());\n    advance(lit, 5);\n    lint1.splice(lint1.begin(), lint2, lint2.begin(), lit);\n    CPPUNIT_ASSERT( lint1.size() == 15 );\n    CPPUNIT_ASSERT( lint2.size() == 5 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    ListInt lint1(10, 0, stack1);\n    ListInt lint2(10, 1, stack2);\n\n    ListInt lintref(stack2);\n    lintref.insert(lintref.begin(), 10, 1);\n    lintref.insert(lintref.begin(), 10, 0);\n\n    lint1.merge(lint2);\n    CPPUNIT_ASSERT( lint1.size() == 20 );\n    CPPUNIT_ASSERT( lint1 == lintref );\n    CPPUNIT_ASSERT( lint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n\n#if defined (STLPORT) && !defined (_STLP_NO_MEMBER_TEMPLATES) && \\\n    (!defined (_MSC_VER) || (_MSC_VER >= 1300))\n  {\n    //This is a compile time test.\n    //We check that sort implementation is correct when list is instanciated\n    //with an allocator that do not have a default constructor.\n    ListInt lint1(10, 0, stack1);\n    lint1.sort();\n    lint1.sort(greater<int>());\n  }\n#endif\n}\n\n/*\nvoid ListTest::const_list()\n{\n  list<const int> cint_list;\n  cint_list.push_back(1);\n  cint_list.push_front(2);\n}\n*/\nvoid ListTest::swap()\n{\n  list<int> lst1;\n  list<int> lst2;\n\n  lst1.push_back(1);\n  lst2.push_back(2);\n\n  lst1.swap( lst2 );\n\n  CPPUNIT_CHECK( lst1.front() == 2 );\n  CPPUNIT_CHECK( lst2.front() == 1 );\n  CPPUNIT_CHECK( lst1.size() == 1 );\n  CPPUNIT_CHECK( lst2.size() == 1 );\n\n  lst1.pop_front();\n  lst2.pop_front();\n\n  CPPUNIT_CHECK( lst1.empty() );\n  CPPUNIT_CHECK( lst2.empty() );\n}\n\nnamespace foo {\n  class bar {};\n\n  template <class _It>\n  size_t distance(_It, _It);\n}\n\nvoid ListTest::adl()\n{\n  list<foo::bar> lbar;\n  CPPUNIT_ASSERT( lbar.size() == 0);\n}\n\n#if !defined (STLPORT) || \\\n    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  list<IncompleteClass> instances;\n  typedef list<IncompleteClass>::iterator it;\n};\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/locale_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <locale>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/locale_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n#  include <locale>\n#  include <stdexcept>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nstatic const char* tested_locales[] = {\n//name,\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  \"fr_FR\",\n  \"ru_RU.koi8r\",\n  \"en_GB\",\n  \"en_US\",\n#  endif\n  \"\",\n  \"C\"\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(LocaleTest);\n\n//\n// tests implementation\n//\ntypedef void (LocaleTest::*_Test) (const locale&);\nstatic void test_supported_locale(LocaleTest &inst, _Test __test) {\n  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);\n  for (size_t i = 0; i < n; ++i) {\n    locale loc;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try {\n#  endif\n      locale tmp(tested_locales[i]);\n      loc = tmp;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    }\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n#  endif\n    CPPUNIT_MESSAGE( loc.name().c_str() );\n    (inst.*__test)(loc);\n  }\n}\n\nvoid LocaleTest::locale_by_name() {\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n  try {\n    locale loc(static_cast<char const*>(0));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(\"yasli_language\");\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string very_large_locale_name(1024, '?');\n    locale loc(very_large_locale_name.c_str());\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#if defined (STLPORT) || !defined (_MSC_VER) || (_MSC_VER > 1400)\n  try {\n    string very_large_locale_name(\"LC_CTYPE=\");\n    very_large_locale_name.append(1024, '?');\n    locale loc(very_large_locale_name.c_str());\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string very_large_locale_name(\"LC_ALL=\");\n    very_large_locale_name.append(1024, '?');\n    locale loc(very_large_locale_name.c_str());\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#endif\n\n  try {\n    locale loc(\"C\");\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" locale facet.\n    locale loc(\"\");\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#  endif\n}\n\nvoid LocaleTest::loc_has_facet() {\n  locale loc(\"C\");\n  typedef numpunct<char> implemented_facet;\n  CPPUNIT_ASSERT( has_facet<implemented_facet>(loc) );\n  /*\n  typedef num_put<char, back_insert_iterator<string> > not_implemented_facet;\n  CPPUNIT_ASSERT( !has_facet<not_implemented_facet>(loc) );\n  */\n}\n\nvoid LocaleTest::locale_init_problem() {\n#  if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  test_supported_locale(*this, &LocaleTest::_locale_init_problem);\n#  endif\n}\n\n/*\n * Creation of a locale instance imply initialization of some STLport internal\n * static objects first. We use a static instance of locale to check that this\n * initialization is done correctly.\n */\nstatic locale global_loc;\nstatic locale other_loc(\"\");\n\n#  if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\nvoid LocaleTest::_locale_init_problem( const locale& loc)\n{\n#    if !defined (__APPLE__) && !defined (__FreeBSD__) || \\\n        !defined(__GNUC__) || ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__> 3)))\n  typedef codecvt<char,char,mbstate_t> my_facet;\n#    else\n// std::mbstate_t required for gcc 3.3.2 on FreeBSD...\n// I am not sure what key here---FreeBSD or 3.3.2...\n//      - ptr 2005-04-04\n  typedef codecvt<char,char,std::mbstate_t> my_facet;\n#    endif\n\n  locale loc_ref(global_loc);\n  {\n    locale gloc( loc_ref, new my_facet() );\n    CPPUNIT_ASSERT( has_facet<my_facet>( gloc ) );\n    //The following code is just here to try to confuse the reference counting underlying mecanism:\n    locale::global( locale::classic() );\n    locale::global( gloc );\n  }\n\n#      if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n#      endif\n    ostringstream os(\"test\") ;\n    locale loc2( loc, new my_facet() );\n    CPPUNIT_ASSERT( has_facet<my_facet>( loc2 ) );\n    os.imbue( loc2 );\n#      if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  }\n  catch ( runtime_error& ) {\n    CPPUNIT_FAIL;\n  }\n  catch ( ... ) {\n   CPPUNIT_FAIL;\n  }\n#      endif\n\n#      if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n#      endif\n    ostringstream os2(\"test2\");\n#      if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  }\n  catch ( runtime_error& ) {\n    CPPUNIT_FAIL;\n  }\n  catch ( ... ) {\n    CPPUNIT_FAIL;\n  }\n#  endif\n}\n#endif\n\nvoid LocaleTest::default_locale()\n{\n  locale loc( \"\" );\n}\n\nclass dummy_facet : public locale::facet {\npublic:\n  static locale::id id;\n};\n\nlocale::id dummy_facet::id;\n\nvoid LocaleTest::combine()\n{\n#  if (!defined (STLPORT) || \\\n       (defined (_STLP_USE_EXCEPTIONS) && !defined (_STLP_NO_MEMBER_TEMPLATES) && !defined (_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)))\n  {\n    try {\n      locale loc(\"\");\n      if (!has_facet<messages<char> >(loc)) {\n        loc.combine<messages<char> >(loc);\n        CPPUNIT_FAIL;\n      }\n    }\n    catch (const runtime_error & /* e */) {\n      /* CPPUNIT_MESSAGE( e.what() ); */\n    }\n\n    try {\n      locale loc;\n      if (!has_facet<dummy_facet>(loc)) {\n        loc.combine<dummy_facet>(loc);\n        CPPUNIT_FAIL;\n      }\n    }\n    catch (const runtime_error & /* e */) {\n      /* CPPUNIT_MESSAGE( e.what() ); */\n    }\n  }\n\n  locale loc1(locale::classic()), loc2;\n  size_t loc1_index = 0;\n  for (size_t i = 0; _get_ref_monetary(i) != 0; ++i) {\n    try {\n      {\n        locale loc(_get_ref_monetary_name(_get_ref_monetary(i)));\n        if (loc1 == locale::classic())\n        {\n          loc1 = loc;\n          loc1_index = i;\n          continue;\n        }\n        else\n        {\n          loc2 = loc;\n        }\n      }\n\n      //We can start the test\n      ostringstream ostr;\n      ostr << \"combining '\" << loc2.name() << \"' money facets with '\" << loc1.name() << \"'\";\n      CPPUNIT_MESSAGE( ostr.str().c_str() );\n\n      //We are going to combine money facets as all formats are different.\n      {\n        //We check that resulting locale has correctly acquire loc2 facets.\n        locale loc = loc1.combine<moneypunct<char, true> >(loc2);\n        loc = loc.combine<moneypunct<char, false> >(loc2);\n        loc = loc.combine<money_put<char> >(loc2);\n        loc = loc.combine<money_get<char> >(loc2);\n\n        //Check loc has the correct facets:\n        _money_put_get2(loc2, loc, _get_ref_monetary(i));\n\n        //Check loc1 has not been impacted:\n        _money_put_get2(loc1, loc1, _get_ref_monetary(loc1_index));\n\n        //Check loc2 has not been impacted:\n        _money_put_get2(loc2, loc2, _get_ref_monetary(i));\n      }\n      {\n        //We check that resulting locale has not wrongly acquire loc1 facets that hasn't been combine:\n        locale loc = loc2.combine<numpunct<char> >(loc1);\n        loc = loc.combine<time_put<char> >(loc1);\n        loc = loc.combine<time_get<char> >(loc1);\n\n        //Check loc has the correct facets:\n        _money_put_get2(loc2, loc, _get_ref_monetary(i));\n\n        //Check loc1 has not been impacted:\n        _money_put_get2(loc1, loc1, _get_ref_monetary(loc1_index));\n\n        //Check loc2 has not been impacted:\n        _money_put_get2(loc2, loc2, _get_ref_monetary(i));\n      }\n\n      {\n        // Check auto combination do not result in weird reference counting behavior \n        // (might generate a crash).\n        loc1.combine<numpunct<char> >(loc1);\n      }\n\n      loc1 = loc2;\n      loc1_index = i;\n    }\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n  }\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/locale_test.h",
    "content": "#include <string>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <iosfwd>\n\n#  include \"cppunit/cppunit_proxy.h\"\n#  include <locale>\n\nstruct ref_monetary;\nstruct ref_locale;\n\n#  if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n#    define STD std::\n#  else\n#    define STD\n#  endif\n\n//\n// TestCase class\n//\nclass LocaleTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(LocaleTest);\n#  if defined (STLPORT) && !defined (_STLP_USE_EXCEPTIONS)\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(locale_by_name);\n  CPPUNIT_TEST(moneypunct_by_name);\n  CPPUNIT_TEST(time_by_name);\n  CPPUNIT_TEST(numpunct_by_name);\n  CPPUNIT_TEST(ctype_by_name);\n  CPPUNIT_TEST(collate_by_name);\n  CPPUNIT_TEST(messages_by_name);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(loc_has_facet);\n  CPPUNIT_TEST(num_put_get);\n  CPPUNIT_TEST(money_put_get);\n  CPPUNIT_TEST(money_put_X_bug);\n  CPPUNIT_TEST(time_put_get);\n  CPPUNIT_TEST(collate_facet);\n  CPPUNIT_TEST(ctype_facet);\n#  if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES)\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(locale_init_problem);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(default_locale);\n#  if !defined (STLPORT)\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_STOP_IGNORE;\n#if (defined (STLPORT) && \\\n   (!defined (_STLP_USE_EXCEPTIONS) || defined (_STLP_NO_MEMBER_TEMPLATES) || defined (_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)))\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(combine);\n  CPPUNIT_TEST_SUITE_END();\n\npublic:\n  void locale_by_name();\n  void loc_has_facet();\n  void num_put_get();\n  void numpunct_by_name();\n  void time_put_get();\n  void time_by_name();\n  void collate_facet();\n  void collate_by_name();\n  void ctype_facet();\n  void ctype_by_name();\n  void locale_init_problem();\n  void money_put_get();\n  void money_put_X_bug();\n  void moneypunct_by_name();\n  void default_locale();\n  void combine();\n  void messages_by_name();\nprivate:\n  void _loc_has_facet( const STD locale& );\n  void _num_put_get( const STD locale&, const ref_locale* );\n  void _time_put_get( const STD locale& );\n  void _ctype_facet( const STD locale& );\n  void _ctype_facet_w( const STD locale& );\n  void _locale_init_problem( const STD locale& );\n\n  static const ref_monetary* _get_ref_monetary(size_t);\n  static const char* _get_ref_monetary_name(const ref_monetary*);\n\n  void _money_put_get( const STD locale&, const ref_monetary* );\n  void _money_put_get2( const STD locale& loc, const STD locale& streamLoc, const ref_monetary* );\n  void _money_put_X_bug( const STD locale&, const ref_monetary* );\n};\n\n#  undef STD\n#endif\n\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/logic_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass LogicTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(LogicTest);\n  CPPUNIT_TEST(logicand);\n  CPPUNIT_TEST(logicnot);\n  CPPUNIT_TEST(logicor);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void logicand();\n  void logicnot();\n  void logicor();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(LogicTest);\n\n//\n// tests implementation\n//\nvoid LogicTest::logicand()\n{\n  bool input1 [4] = { true, true, false, true };\n  bool input2 [4] = { false, true, false, false };\n\n  bool output [4];\n  transform((bool*)input1, (bool*)input1 + 4, (bool*)input2, (bool*)output, logical_and<bool>());\n\n  CPPUNIT_ASSERT(output[0]==false);\n  CPPUNIT_ASSERT(output[1]==true);\n  CPPUNIT_ASSERT(output[2]==false);\n  CPPUNIT_ASSERT(output[3]==false);\n}\nvoid LogicTest::logicnot()\n{\n  bool input [7] = { 1, 0, 0, 1, 1, 1, 1 };\n\n  int n = count_if(input, input + 7, logical_not<bool>());\n  CPPUNIT_ASSERT( n == 2 );\n}\nvoid LogicTest::logicor()\n{\n  bool input1 [4] = { true, true, false, true };\n  bool input2 [4] = { false, true, false, false };\n\n  bool output [4];\n  transform((bool*)input1, (bool*)input1 + 4, (bool*)input2, (bool*)output, logical_or<bool>());\n\n  CPPUNIT_ASSERT(output[0]==true);\n  CPPUNIT_ASSERT(output[1]==true);\n  CPPUNIT_ASSERT(output[2]==false);\n  CPPUNIT_ASSERT(output[3]==true);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/macro_checks.cpp",
    "content": "#include <cstdio>\n#include <cwchar>\n#include <climits>\n\n#if !defined (CHAR_BIT)\n#  error Missing CHAR_BIT definition.\n#endif\n\n#if (CHAR_BIT < 0)\n#  error Weird WCHAR_BIT value.\n#endif\n\n#if !defined (CHAR_MAX)\n#  error Missing CHAR_MAX definition.\n#endif\n\n#if !defined (CHAR_MIN)\n#  error Missing CHAR_MIN definition.\n#endif\n\n#if !(CHAR_MIN < CHAR_MAX)\n#  error Weird CHAR_MIN or CHAR_MAX macro values.\n#endif\n\n#if !defined (INT_MAX)\n#  error Missing INT_MAX definition.\n#endif\n\n#if !defined (INT_MIN)\n#  error Missing INT_MIN definition.\n#endif\n\n#if !(INT_MIN < INT_MAX)\n#  error Weird INT_MIN or INT_MAX macro values.\n#endif\n\n#if !defined (LONG_MAX)\n#  error Missing LONG_MAX definition.\n#endif\n\n#if !defined (LONG_MIN)\n#  error Missing LONG_MIN definition.\n#endif\n\n#if !(LONG_MIN < LONG_MAX)\n#  error Weird LONG_MIN or LONG_MAX macro values.\n#endif\n\n#if !defined (SCHAR_MAX)\n#  error Missing SCHAR_MAX definition.\n#endif\n\n#if !defined (SCHAR_MIN)\n#  error Missing SCHAR_MIN definition.\n#endif\n\n#if !(SCHAR_MIN < SCHAR_MAX)\n#  error Weird SCHAR_MIN or SCHAR_MAX macro values.\n#endif\n\n#if !defined (SHRT_MAX)\n#  error Missing SHRT_MAX definition.\n#endif\n\n#if !defined (SHRT_MIN)\n#  error Missing SHRT_MIN definition.\n#endif\n\n#if !(SHRT_MIN < SHRT_MAX)\n#  error Weird SHRT_MIN or SHRT_MAX macro values.\n#endif\n\n#if !defined (WCHAR_MIN)\n#  error Missing WCHAR_MIN definition.\n#endif\n\n#if !defined (WCHAR_MAX)\n#  error Missing WCHAR_MAX definition.\n#endif\n\n#if !(WCHAR_MIN < WCHAR_MAX)\n#  error Weird WCHAR_MIN or WCHAR_MAX macro value.\n#endif\n\n#if !defined (UCHAR_MAX)\n#  error Missing UCHAR_MAX definition.\n#endif\n\n#if (UCHAR_MAX < 0)\n#  error Weird UCHAR_MAX macro value.\n#endif\n\n#if !defined (UINT_MAX)\n#  error Missing UINT_MAX definition.\n#endif\n\n#if (UINT_MAX < 0)\n#  error Weird UINT_MAX macro value.\n#endif\n\n#if !defined (ULONG_MAX)\n#  error Missing ULONG_MAX definition.\n#endif\n\n#if (ULONG_MAX < 0)\n#  error Weird ULONG_MAX macro value.\n#endif\n\n#if !defined (USHRT_MAX)\n#  error Missing USHRT_MAX definition.\n#endif\n\n#if (USHRT_MAX < 0)\n#  error Weird USHRT_MAX macro value.\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/map_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <map>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/map_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <map>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MapTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MapTest);\n  CPPUNIT_TEST(map1);\n  CPPUNIT_TEST(mmap1);\n  CPPUNIT_TEST(mmap2);\n  CPPUNIT_TEST(iterators);\n  CPPUNIT_TEST(equal_range);\n  CPPUNIT_TEST(allocator_with_state);\n#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(template_methods);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void map1();\n  void mmap1();\n  void mmap2();\n  void iterators();\n  void equal_range();\n  void allocator_with_state();\n  void template_methods();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MapTest);\n\n//\n// tests implementation\n//\nvoid MapTest::map1()\n{\n  typedef map<char, int, less<char> > maptype;\n  maptype m;\n  // Store mappings between roman numerals and decimals.\n  m['l'] = 50;\n  m['x'] = 20; // Deliberate mistake.\n  m['v'] = 5;\n  m['i'] = 1;\n//  cout << \"m['x'] = \" << m['x'] << endl;\n  CPPUNIT_ASSERT( m['x']== 20 );\n  m['x'] = 10; // Correct mistake.\n  CPPUNIT_ASSERT( m['x']== 10 );\n  CPPUNIT_ASSERT( m['z']== 0 );\n  //cout << \"m['z'] = \" << m['z'] << endl; // Note default value is added.\n  CPPUNIT_ASSERT( m.count('z') == 1 );\n  //cout << \"m.count('z') = \" << m.count('z') << endl;\n  pair<maptype::iterator, bool> p = m.insert(pair<const char, int>('c', 100));\n  CPPUNIT_ASSERT( p.second );\n  CPPUNIT_ASSERT( p.first != m.end() );\n  CPPUNIT_ASSERT( (*p.first).first == 'c' );\n  CPPUNIT_ASSERT( (*p.first).second == 100 );\n\n  p = m.insert(pair<const char, int>('c', 100));\n  CPPUNIT_ASSERT( !p.second ); // already existing pair\n  CPPUNIT_ASSERT( p.first != m.end() );\n  CPPUNIT_ASSERT( (*p.first).first == 'c' );\n  CPPUNIT_ASSERT( (*p.first).second == 100 );\n}\n\nvoid MapTest::mmap1()\n{\n  typedef multimap<char, int, less<char> > mmap;\n  mmap m;\n  CPPUNIT_ASSERT(m.count('X')==0);\n\n  m.insert(pair<const char, int>('X', 10)); // Standard way.\n  CPPUNIT_ASSERT(m.count('X')==1);\n\n  m.insert(pair<const char, int>('X', 20)); // jbuck: standard way\n  CPPUNIT_ASSERT(m.count('X')==2);\n\n  m.insert(pair<const char, int>('Y', 32)); // jbuck: standard way\n  mmap::iterator i = m.find('X'); // Find first match.\n#ifndef _STLP_CONST\n#  define _STLP_CONST const\n#endif\n  pair<_STLP_CONST char, int> p('X', 10);\n  CPPUNIT_ASSERT(*i == p);\n  CPPUNIT_ASSERT((*i).first == 'X');\n  CPPUNIT_ASSERT((*i).second == 10);\n  i++;\n  CPPUNIT_ASSERT((*i).first == 'X');\n  CPPUNIT_ASSERT((*i).second == 20);\n  i++;\n  CPPUNIT_ASSERT((*i).first == 'Y');\n  CPPUNIT_ASSERT((*i).second == 32);\n  i++;\n  CPPUNIT_ASSERT(i == m.end());\n\n  size_t count = m.erase('X');\n  CPPUNIT_ASSERT(count==2);\n}\nvoid MapTest::mmap2()\n{\n  typedef pair<const int, char> pair_type;\n\n  pair_type p1(3, 'c');\n  pair_type p2(6, 'f');\n  pair_type p3(1, 'a');\n  pair_type p4(2, 'b');\n  pair_type p5(3, 'x');\n  pair_type p6(6, 'f');\n\n  typedef multimap<int, char, less<int> > mmap;\n\n  pair_type array [] = {\n    p1,\n    p2,\n    p3,\n    p4,\n    p5,\n    p6\n  };\n\n  mmap m(array + 0, array + 6);\n  mmap::iterator i;\n  i = m.lower_bound(3);\n  CPPUNIT_ASSERT((*i).first==3);\n  CPPUNIT_ASSERT((*i).second=='c');\n\n  i = m.upper_bound(3);\n  CPPUNIT_ASSERT((*i).first==6);\n  CPPUNIT_ASSERT((*i).second=='f');\n}\n\n\nvoid MapTest::iterators()\n{\n  typedef map<int, char, less<int> > int_map;\n  int_map imap;\n  {\n    int_map::iterator ite(imap.begin());\n    int_map::const_iterator cite(imap.begin());\n    CPPUNIT_ASSERT( ite == cite );\n    CPPUNIT_ASSERT( !(ite != cite) );\n    CPPUNIT_ASSERT( cite == ite );\n    CPPUNIT_ASSERT( !(cite != ite) );\n  }\n\n  typedef multimap<int, char, less<int> > mmap;\n  typedef mmap::value_type pair_type;\n\n  pair_type p1(3, 'c');\n  pair_type p2(6, 'f');\n  pair_type p3(1, 'a');\n  pair_type p4(2, 'b');\n  pair_type p5(3, 'x');\n  pair_type p6(6, 'f');\n\n  pair_type array [] = {\n    p1,\n    p2,\n    p3,\n    p4,\n    p5,\n    p6\n  };\n\n  mmap m(array+0, array + 6);\n\n  {\n    mmap::iterator ite(m.begin());\n    mmap::const_iterator cite(m.begin());\n    //test compare between const_iterator and iterator\n    CPPUNIT_ASSERT( ite == cite );\n    CPPUNIT_ASSERT( !(ite != cite) );\n    CPPUNIT_ASSERT( cite == ite );\n    CPPUNIT_ASSERT( !(cite != ite) );\n  }\n\n#if 0\n  /*\n   * A check that map and multimap iterators are NOT comparable\n   * the following code should generate a compile time error\n   */\n  {\n    int_map::iterator mite(imap.begin());\n    int_map::const_iterator mcite(imap.begin());\n    mmap::iterator mmite(m.begin());\n    mmap::const_iterator mmcite(m.begin());\n    CPPUNIT_ASSERT( !(mite == mmite) );\n    CPPUNIT_ASSERT( !(mcite == mmcite) );\n    CPPUNIT_ASSERT( mite != mmite );\n    CPPUNIT_ASSERT( mcite != mmcite );\n    CPPUNIT_ASSERT( !(mite == mmcite) );\n    CPPUNIT_ASSERT( !(mite == mmcite) );\n    CPPUNIT_ASSERT( mite != mmcite );\n    CPPUNIT_ASSERT( mite != mmcite );\n  }\n\n#endif\n\n  mmap::reverse_iterator ri = m.rbegin();\n  CPPUNIT_ASSERT( ri != m.rend() );\n  CPPUNIT_ASSERT( ri == m.rbegin() );\n  CPPUNIT_ASSERT( (*ri).first == 6 );\n  CPPUNIT_ASSERT( (*ri++).second == 'f' );\n  CPPUNIT_ASSERT( (*ri).first == 6 );\n  CPPUNIT_ASSERT( (*ri).second == 'f' );\n\n  mmap const& cm = m;\n  mmap::const_reverse_iterator rci = cm.rbegin();\n  CPPUNIT_ASSERT( rci != cm.rend() );\n  CPPUNIT_ASSERT( (*rci).first == 6 );\n  CPPUNIT_ASSERT( (*rci++).second == 'f' );\n  CPPUNIT_ASSERT( (*rci).first == 6 );\n  CPPUNIT_ASSERT( (*rci).second == 'f' );\n}\n\nvoid MapTest::equal_range()\n{\n  typedef map<char, int, less<char> > maptype;\n  {\n    maptype m;\n    m['x'] = 10;\n\n    pair<maptype::iterator, maptype::iterator> ret;\n    ret = m.equal_range('x');\n    CPPUNIT_ASSERT( ret.first != ret.second );\n    CPPUNIT_ASSERT( (*(ret.first)).first == 'x' );\n    CPPUNIT_ASSERT( (*(ret.first)).second == 10 );\n    CPPUNIT_ASSERT( ++(ret.first) == ret.second );\n  }\n  {\n    {\n      maptype m;\n\n      maptype::iterator i = m.lower_bound( 'x' );\n      CPPUNIT_ASSERT( i == m.end() );\n\n      i = m.upper_bound( 'x' );\n      CPPUNIT_ASSERT( i == m.end() );\n\n      pair<maptype::iterator, maptype::iterator> ret;\n      ret = m.equal_range('x');\n      CPPUNIT_ASSERT( ret.first == ret.second );\n      CPPUNIT_ASSERT( ret.first == m.end() );\n    }\n\n    {\n      const maptype m;\n      pair<maptype::const_iterator, maptype::const_iterator> ret;\n      ret = m.equal_range('x');\n      CPPUNIT_ASSERT( ret.first == ret.second );\n      CPPUNIT_ASSERT( ret.first == m.end() );\n    }\n  }\n}\n\nvoid MapTest::allocator_with_state()\n{\n  char buf1[1024];\n  StackAllocator<pair<const int, int> > stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<pair<const int, int> > stack2(buf2, buf2 + sizeof(buf2));\n\n  {\n    typedef map<int, int, less<int>, StackAllocator<pair<const int, int> > > MapInt;\n    less<int> intLess;\n    MapInt mint1(intLess, stack1);\n    int i;\n    for (i = 0; i < 5; ++i)\n      mint1.insert(MapInt::value_type(i, i));\n    MapInt mint1Cpy(mint1);\n\n    MapInt mint2(intLess, stack2);\n    for (; i < 10; ++i)\n      mint2.insert(MapInt::value_type(i, i));\n    MapInt mint2Cpy(mint2);\n\n    mint1.swap(mint2);\n\n    CPPUNIT_ASSERT( mint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( mint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( mint1 == mint2Cpy );\n    CPPUNIT_ASSERT( mint2 == mint1Cpy );\n    CPPUNIT_ASSERT( mint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( mint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n}\n\nstruct Key\n{\n  Key() : m_data(0) {}\n  explicit Key(int data) : m_data(data) {}\n\n  int m_data;\n};\n\nstruct KeyCmp\n{\n  bool operator () (Key lhs, Key rhs) const\n  { return lhs.m_data < rhs.m_data; }\n\n  bool operator () (Key lhs, int rhs) const\n  { return lhs.m_data < rhs; }\n\n  bool operator () (int lhs, Key rhs) const\n  { return lhs < rhs.m_data; }\n};\n\nstruct KeyCmpPtr\n{\n  bool operator () (Key const volatile *lhs, Key const volatile *rhs) const\n  { return (*lhs).m_data < (*rhs).m_data; }\n\n  bool operator () (Key const volatile *lhs, int rhs) const\n  { return (*lhs).m_data < rhs; }\n\n  bool operator () (int lhs, Key const volatile *rhs) const\n  { return lhs < (*rhs).m_data; }\n};\n\nvoid MapTest::template_methods()\n{\n#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)\n  {\n    typedef map<Key, int, KeyCmp> Container;\n    typedef Container::value_type value;\n    Container cont;\n    cont.insert(value(Key(1), 1));\n    cont.insert(value(Key(2), 2));\n    cont.insert(value(Key(3), 3));\n    cont.insert(value(Key(4), 4));\n\n    CPPUNIT_ASSERT( cont.count(Key(1)) == 1 );\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.end(), ccont.end()) );\n  }\n\n  {\n    typedef map<Key*, int, KeyCmpPtr> Container;\n    typedef Container::value_type value;\n    Container cont;\n    Key key1(1), key2(2), key3(3), key4(4);\n    cont.insert(value(&key1, 1));\n    cont.insert(value(&key2, 2));\n    cont.insert(value(&key3, 3));\n    cont.insert(value(&key4, 4));\n\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );\n  }\n  {\n    typedef multimap<Key, int, KeyCmp> Container;\n    typedef Container::value_type value;\n    Container cont;\n    cont.insert(value(Key(1), 1));\n    cont.insert(value(Key(2), 2));\n    cont.insert(value(Key(3), 3));\n    cont.insert(value(Key(4), 4));\n\n    CPPUNIT_ASSERT( cont.count(Key(1)) == 1 );\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.end(), ccont.end()) );\n  }\n\n  {\n    typedef multimap<Key const volatile*, int, KeyCmpPtr> Container;\n    typedef Container::value_type value;\n    Container cont;\n    Key key1(1), key2(2), key3(3), key4(4);\n    cont.insert(value(&key1, 1));\n    cont.insert(value(&key2, 2));\n    cont.insert(value(&key3, 3));\n    cont.insert(value(&key4, 4));\n\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );\n  }\n#endif\n}\n\n#if !defined (STLPORT) || \\\n    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n#  if !defined (__DMC__)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  map<IncompleteClass, IncompleteClass> instances;\n  typedef map<IncompleteClass, IncompleteClass>::iterator it;\n  multimap<IncompleteClass, IncompleteClass> minstances;\n  typedef multimap<IncompleteClass, IncompleteClass>::iterator mit;\n};\n#  endif\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/math_aux.h",
    "content": "#ifndef __MATH_AUX_H\n#define __MATH_AUX_H\n\n#include <limits>\n\n#undef __STD\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n#  define __STD std::\n#else\n#  define __STD\n#endif\n\n/*\n * This function is not only used to compare floating point values with a tolerance,\n * it also leads to ambiguity problems if the called functions do not have the\n * right prototype.\n */\ntemplate <class _Tp>\nbool are_equals(_Tp val, _Tp ref) {\n  if (val < ref) {\n    return (ref - val) <= __STD numeric_limits<_Tp>::epsilon();\n  }\n  else {\n    return (val - ref) <= __STD numeric_limits<_Tp>::epsilon();\n  }\n}\n\n#undef __STD\n\n#endif // __MATH_AUX_H\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/math_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <math.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/max_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MaxTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MaxTest);\n  CPPUNIT_TEST(max1);\n  CPPUNIT_TEST(max2);\n  CPPUNIT_TEST(maxelem1);\n  CPPUNIT_TEST(maxelem2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void max1();\n  void max2();\n  void maxelem1();\n  void maxelem2();\n\n  static bool str_compare(const char* a_, const char* b_)\n  { return strcmp(a_, b_) < 0 ? 1 : 0; }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MaxTest);\n\n//\n// tests implementation\n//\nvoid MaxTest::max1()\n{\n  int r = max(42, 100);\n  CPPUNIT_ASSERT( r == 100 );\n\n  int t = max(++r, 0);\n  CPPUNIT_ASSERT( t == 101 );\n}\nvoid MaxTest::max2()\n{\n  const char* r = max((const char*)\"shoe\", (const char*)\"shine\", str_compare);\n  CPPUNIT_ASSERT(!strcmp(r, \"shoe\"));\n}\nvoid MaxTest::maxelem1()\n{\n  int numbers[6] = { 4, 10, 56, 11, -42, 19 };\n\n  int* r = max_element((int*)numbers, (int*)numbers + 6);\n  CPPUNIT_ASSERT(*r==56);\n}\nvoid MaxTest::maxelem2()\n{\n  const char* names[] = { \"Brett\", \"Graham\", \"Jack\", \"Mike\", \"Todd\" };\n\n  const unsigned namesCt = sizeof(names) / sizeof(names[0]);\n  const char** r = max_element((const char**)names, (const char**)names + namesCt, str_compare);\n  CPPUNIT_ASSERT(!strcmp(*r, \"Todd\"));\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/memory_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <memory>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/memory_test.cpp",
    "content": "#include <memory>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MemoryTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MemoryTest);\n#if defined (_STLP_MSVC) && (_STLP_MSVC < 1310)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(auto_ptr_test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void auto_ptr_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MemoryTest);\n\n#if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1310)\nauto_ptr<int> CreateAutoPtr(int val)\n{ return auto_ptr<int>(new int(val)); }\n\nbool CheckEquality(auto_ptr<int> pint, int val)\n{ return *pint == val; }\n#endif\n\n//\n// tests implementation\n//\nvoid MemoryTest::auto_ptr_test()\n{\n#if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1310)\n  {\n    auto_ptr<int> pint(new int(1));\n    CPPUNIT_ASSERT( *pint == 1 );\n    *pint = 2;\n    CPPUNIT_ASSERT( *pint == 2 );\n  }\n\n  {\n    auto_ptr<int> pint(CreateAutoPtr(3));\n    CPPUNIT_ASSERT( *pint == 3 );\n    CPPUNIT_ASSERT( CheckEquality(pint, 3) );\n  }\n\n  {\n    auto_ptr<const int> pint(new int(2));\n    CPPUNIT_ASSERT( *pint == 2 );\n  }\n  {\n    auto_ptr<volatile int> pint(new int(2));\n    CPPUNIT_ASSERT( *pint == 2 );\n  }\n  {\n    auto_ptr<const volatile int> pint(new int(2));\n    CPPUNIT_ASSERT( *pint == 2 );\n  }\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/merge_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n#include <numeric>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MergeTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MergeTest);\n  CPPUNIT_TEST(merge0);\n  CPPUNIT_TEST(merge1);\n  CPPUNIT_TEST(merge2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void merge0();\n  void merge1();\n  void merge2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MergeTest);\n\n//\n// tests implementation\n//\nvoid MergeTest::merge0()\n{\n  int numbers1[5] = { 1, 6, 13, 25, 101 };\n  int numbers2[5] = {-5, 26, 36, 46, 99 };\n\n  int result[10];\n  merge((int*)numbers1, (int*)numbers1 + 5, (int*)numbers2, (int*)numbers2 + 5, (int*)result);\n\n  CPPUNIT_ASSERT(result[0]==-5);\n  CPPUNIT_ASSERT(result[1]==1);\n  CPPUNIT_ASSERT(result[2]==6);\n  CPPUNIT_ASSERT(result[3]==13);\n  CPPUNIT_ASSERT(result[4]==25);\n  CPPUNIT_ASSERT(result[5]==26);\n  CPPUNIT_ASSERT(result[6]==36);\n  CPPUNIT_ASSERT(result[7]==46);\n  CPPUNIT_ASSERT(result[8]==99);\n  CPPUNIT_ASSERT(result[9]==101);\n}\nvoid MergeTest::merge1()\n{\n  vector<int> v1(5);\n  vector<int> v2(v1.size());\n  __iota(v1.begin(), v1.end(), 0);\n  __iota(v2.begin(), v2.end(), 3);\n\n  vector <int> result(v1.size() + v2.size());\n  merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());\n\n  CPPUNIT_ASSERT(result[0]==0);\n  CPPUNIT_ASSERT(result[1]==1);\n  CPPUNIT_ASSERT(result[2]==2);\n  CPPUNIT_ASSERT(result[3]==3);\n  CPPUNIT_ASSERT(result[4]==3);\n  CPPUNIT_ASSERT(result[5]==4);\n  CPPUNIT_ASSERT(result[6]==4);\n  CPPUNIT_ASSERT(result[7]==5);\n  CPPUNIT_ASSERT(result[8]==6);\n  CPPUNIT_ASSERT(result[9]==7);\n\n}\nvoid MergeTest::merge2()\n{\n  vector <int> v1(5);\n  vector <int> v2(v1.size());\n  for (int i = 0; (size_t)i < v1.size(); ++i) {\n    v1[i] = 10 - i;\n    v2[i] =  7 - i;\n  }\n  vector<int> result(v1.size() + v2.size());\n  merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin(), greater<int>() );\n\n  CPPUNIT_ASSERT(result[0]==10);\n  CPPUNIT_ASSERT(result[1]==9);\n  CPPUNIT_ASSERT(result[2]==8);\n  CPPUNIT_ASSERT(result[3]==7);\n  CPPUNIT_ASSERT(result[4]==7);\n  CPPUNIT_ASSERT(result[5]==6);\n  CPPUNIT_ASSERT(result[6]==6);\n  CPPUNIT_ASSERT(result[7]==5);\n  CPPUNIT_ASSERT(result[8]==4);\n  CPPUNIT_ASSERT(result[9]==3);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/messages_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <stdexcept>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// tests implementation\n//\nvoid LocaleTest::messages_by_name()\n{\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#    if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new messages_byname<char>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new messages_byname<char>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  /*\n  try {\n    locale loc(locale::classic(), new messages_byname<char>(\"\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n  */\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#      if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new messages_byname<wchar_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new messages_byname<wchar_t>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mfunptr_test.cpp",
    "content": "#include <functional>\n#include <memory>\n#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MemFunPtrTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MemFunPtrTest);\n  CPPUNIT_TEST(mem_ptr_fun);\n#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  //This test require partial template specialization feature to avoid the\n  //reference to reference problem. No workaround yet for limited compilers.\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(find);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  // compile test not neccessary to run but...\n  void mem_ptr_fun();\n  void find();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MemFunPtrTest);\n\n#if defined(_STLP_DONT_RETURN_VOID) && (defined(_STLP_NO_MEMBER_TEMPLATE_CLASSES) && defined(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION))\n#  define _STLP_DONT_TEST_RETURN_VOID\n#endif\n//else there is no workaround for the return void bug\n\nstruct S1 { } s1;\nstruct S2 { } s2;\n\nint f1(S1&);\nint f2(S1&, S2&);\nint f1c(const S1&);\nint f2c(const S1&, const S2&);\n\nvoid vf1(S1&);\nvoid vf2(S1&, S2&);\nvoid vf1c(const S1&);\nvoid vf2c(const S1&, const S2&);\n\nclass Class {\npublic:\n  int f0();\n  int f1(const S1&);\n\n  void vf0();\n  void vf1(const S1&);\n\n  int f0c() const;\n  int f1c(const S1&) const;\n\n  void vf0c() const;\n  void vf1c(const S1&) const;\n};\n\n//\n// tests implementation\n//\nvoid MemFunPtrTest::mem_ptr_fun()\n{\n  Class obj;\n  const Class& objc = obj;\n\n  // ptr_fun\n\n  ptr_fun(f1)(s1);\n  ptr_fun(f2)(s1, s2);\n\n  ptr_fun(f1c)(s1);\n  ptr_fun(f2c)(s1, s2);\n\n#ifndef _STLP_DONT_TEST_RETURN_VOID\n  ptr_fun(vf1)(s1);\n  ptr_fun(vf2)(s1, s2);\n\n  ptr_fun(vf1c)(s1);\n  ptr_fun(vf2c)(s1, s2);\n#endif /* _STLP_DONT_TEST_RETURN_VOID */\n\n  // mem_fun\n\n  mem_fun(&Class::f0)(&obj);\n  mem_fun(&Class::f1)(&obj, s1);\n\n#ifndef _STLP_DONT_TEST_RETURN_VOID\n  mem_fun(&Class::vf0)(&obj);\n  mem_fun(&Class::vf1)(&obj, s1);\n#endif /* _STLP_DONT_TEST_RETURN_VOID */\n\n  // mem_fun (const)\n\n  mem_fun(&Class::f0c)(&objc);\n  mem_fun(&Class::f1c)(&objc, s1);\n\n#ifndef _STLP_DONT_TEST_RETURN_VOID\n  mem_fun(&Class::vf0c)(&objc);\n  mem_fun(&Class::vf1c)(&objc, s1);\n#endif /* _STLP_DONT_TEST_RETURN_VOID */\n\n  // mem_fun_ref\n\n  mem_fun_ref(&Class::f0)(obj);\n  mem_fun_ref(&Class::f1)(obj, s1);\n\n#ifndef _STLP_DONT_TEST_RETURN_VOID\n  mem_fun_ref(&Class::vf0)(obj);\n  mem_fun_ref(&Class::vf1)(obj, s1);\n#endif /* _STLP_DONT_TEST_RETURN_VOID */\n\n  // mem_fun_ref (const)\n  mem_fun_ref(&Class::f0c)(objc);\n  mem_fun_ref(&Class::f1c)(objc, s1);\n\n#ifndef _STLP_DONT_TEST_RETURN_VOID\n  mem_fun_ref(&Class::vf0c)(objc);\n  mem_fun_ref(&Class::vf1c)(objc, s1);\n#endif /* _STLP_DONT_TEST_RETURN_VOID */\n}\nint f1(S1&)\n{return 1;}\n\nint f2(S1&, S2&)\n{return 2;}\n\nint f1c(const S1&)\n{return 1;}\n\nint f2c(const S1&, const S2&)\n{return 2;}\n\nvoid vf1(S1&)\n{}\n\nvoid vf2(S1&, S2&)\n{}\n\nvoid vf1c(const S1&)\n{}\n\nvoid vf2c(const S1&, const S2&)\n{}\n\nint Class::f0()\n{return 0;}\n\nint Class::f1(const S1&)\n{return 1;}\n\nvoid Class::vf0()\n{}\n\nvoid Class::vf1(const S1&)\n{}\n\nint Class::f0c() const\n{return 0;}\n\nint Class::f1c(const S1&) const\n{return 1;}\n\nvoid Class::vf0c() const\n{}\n\nvoid Class::vf1c(const S1&) const\n{}\n\nstruct V {\n  public:\n    V(int _v) :\n      v(_v)\n    { }\n\n  bool f( int _v ) const { return (v == _v); }\n\n  int v;\n#if defined (__DMC__)\n  V(){}\n#endif\n};\n\nvoid MemFunPtrTest::find()\n{\n#if !defined (STLPORT) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  vector<V> v;\n\n  v.push_back( V(1) );\n  v.push_back( V(2) );\n  v.push_back( V(3) );\n\n  // step-by-step complication of work for compiler:\n\n  // step 1:\n  const_mem_fun1_ref_t<bool,V,int> pmf = mem_fun_ref( &V::f );\n  binder2nd<const_mem_fun1_ref_t<bool,V,int> > b(pmf, 2);\n  vector<V>::iterator i = find_if( v.begin(), v.end(), b );\n  CPPUNIT_ASSERT(i != v.end());\n  CPPUNIT_ASSERT(i->v == 2);\n\n  // step 2, just check that compiler understand what pass to bind2nd:\n  binder2nd<const_mem_fun1_ref_t<bool,V,int> > b2 = bind2nd( pmf, 2 );\n\n  // step 3, the same as step 1, but more intellect from compiler required:\n  binder2nd<const_mem_fun1_ref_t<bool,V,int> > b3 = bind2nd( mem_fun_ref( &V::f ), 2 );\n\n  vector<V>::iterator j = find_if( v.begin(), v.end(), b3 );\n  CPPUNIT_ASSERT(j != v.end());\n  CPPUNIT_ASSERT(j->v == 2);\n\n  // step 4, more brief, more complex:\n  vector<V>::iterator k = find_if( v.begin(), v.end(), bind2nd( mem_fun_ref( &V::f ), 2 ) );\n  CPPUNIT_ASSERT(k != v.end());\n  CPPUNIT_ASSERT(k->v == 2);\n#endif\n}\n\n#ifdef _STLP_DONT_TEST_RETURN_VOID\n#  undef _STLP_DONT_TEST_RETURN_VOID\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/min_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MinTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MinTest);\n  CPPUNIT_TEST(min1);\n  CPPUNIT_TEST(min2);\n  CPPUNIT_TEST(minelem1);\n  CPPUNIT_TEST(minelem2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void min1();\n  void min2();\n  void minelem1();\n  void minelem2();\n  static bool str_compare(const char* a_, const char* b_)\n  { return strcmp(a_, b_) < 0 ? 1 : 0; }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MinTest);\n\n//\n// tests implementation\n//\nvoid MinTest::min1()\n{\n  int r = min(42, 100);\n  CPPUNIT_ASSERT( r == 42 );\n\n  r = min(--r, r);\n  CPPUNIT_ASSERT( r == 41 );\n}\nvoid MinTest::min2()\n{\n  const char* r = min((const char*)\"shoe\", (const char*)\"shine\", str_compare);\n  CPPUNIT_ASSERT(!strcmp(r, \"shine\"));\n}\nvoid MinTest::minelem1()\n{\n  int numbers[6] = { -10, 15, -100, 36, -242, 42 };\n  int* r = min_element((int*)numbers, (int*)numbers + 6);\n  CPPUNIT_ASSERT(*r==-242);\n}\nvoid MinTest::minelem2()\n{\n  const char* names[] = { \"Brett\", \"Graham\", \"Jack\", \"Mike\", \"Todd\" };\n\n  const unsigned namesCt = sizeof(names) / sizeof(names[0]);\n  const char** r = min_element((const char**)names, (const char**)names + namesCt, str_compare);\n  CPPUNIT_ASSERT(!strcmp(*r, \"Brett\"));\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mismatch_test.cpp",
    "content": "#include <numeric>\n#include <vector>\n#include <algorithm>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MismatchTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MismatchTest);\n  CPPUNIT_TEST(mismatch0);\n  CPPUNIT_TEST(mismatch1);\n  CPPUNIT_TEST(mismatch2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void mismatch0();\n  void mismatch1();\n  void mismatch2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MismatchTest);\n\n//\n// tests implementation\n//\nbool str_equal(const char* a_, const char* b_)\n{\n  return strcmp(a_, b_) == 0 ? 1 : 0;\n}\nvoid MismatchTest::mismatch0()\n{\n  int n1[5] = { 1, 2, 3, 4, 5 };\n  int n2[5] = { 1, 2, 3, 4, 5 };\n  int n3[5] = { 1, 2, 3, 2, 1 };\n\n  pair <int*, int*> result = mismatch((int*)n1, (int*)n1 + 5, (int*)n2);\n  CPPUNIT_ASSERT(result.first ==(n1 + 5) && result.second ==(n2 + 5));\n\n  result = mismatch((int*)n1, (int*)n1 + 5, (int*)n3);\n  CPPUNIT_ASSERT(!(result.first ==(n1 + 5) && result.second ==(n3 + 5)));\n  CPPUNIT_ASSERT((result.first - n1)==3);\n}\nvoid MismatchTest::mismatch1()\n{\n  typedef vector<int> IntVec;\n  IntVec v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  IntVec v2(v1);\n\n  pair <IntVec::iterator, IntVec::iterator> result = mismatch(v1.begin(), v1.end(), v2.begin());\n\n  CPPUNIT_ASSERT(result.first == v1.end() && result.second == v2.end());\n\n  v2[v2.size()/2] = 42;\n  result = mismatch(v1.begin(), v1.end(), v2.begin());\n  CPPUNIT_ASSERT(!(result.first == v1.end() && result.second == v2.end()));\n  CPPUNIT_ASSERT((result.first - v1.begin())==5);\n}\nvoid MismatchTest::mismatch2()\n{\n  const unsigned size = 5;\n  char const* n1[size] = { \"Brett\", \"Graham\", \"Jack\", \"Mike\", \"Todd\" };\n\n  char const* n2[size];\n  copy(n1, n1 + 5, (char const**)n2);\n  pair <char const**, char const**> result = mismatch((char const**)n1, (char const**)n1 + size, (char const**)n2, str_equal);\n\n  CPPUNIT_ASSERT(result.first == n1 + size && result.second == n2 + size);\n\n  n2[2] = \"QED\";\n  result = mismatch((char const**)n1, (char const**)n1 + size, (char const**)n2, str_equal);\n  CPPUNIT_ASSERT(!(result.first == n2 + size && result.second == n2 + size));\n  CPPUNIT_ASSERT((result.first - n1)==2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/modulus_test.cpp",
    "content": "#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ModulusTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ModulusTest);\n  CPPUNIT_TEST(modulus0);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void modulus0();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ModulusTest);\n\n//\n// tests implementation\n//\nvoid ModulusTest::modulus0()\n{\n  int input1 [4] = { 6, 8, 10, 2 };\n  int input2 [4] = { 4, 2, 11, 3 };\n\n  int output [4];\n\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, modulus<int>());\n  CPPUNIT_ASSERT(output[0]==2);\n  CPPUNIT_ASSERT(output[1]==0);\n  CPPUNIT_ASSERT(output[2]==10);\n  CPPUNIT_ASSERT(output[3]==2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/money_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <sstream>\n#  include <stdexcept>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nstruct ref_monetary {\n  const char *name;\n  const char *money_int_prefix;\n  const char *money_int_prefix_old;\n  const char *money_prefix;\n  const char *money_suffix;\n  const char *money_decimal_point;\n  const char *money_thousands_sep;\n};\n\nstatic const ref_monetary tested_locales[] = {\n//{  name,         money_int_prefix, money_int_prefix_old, money_prefix, money_suffix, money_decimal_point, money_thousands_sep},\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  { \"fr_FR\",       \"EUR \",           \"FRF \",               \"\",           \"\",           \",\",\n#    if defined (WIN32) || defined (_WIN32)\n                                                                                                            \"\\xa0\" },\n#    else\n                                                                                                            \" \" },\n#    endif\n  { \"ru_RU.koi8r\", \"RUB \",           \"RUR \",               \"\",           \"\\xd2\\xd5\\xc2\", \".\",               \" \" },\n  { \"en_GB\",       \"GBP \",           \"\",                   \"\\xa3\",       \"\",           \".\",                 \",\" },\n  { \"en_US\",       \"USD \",           \"\",                   \"$\",          \"\",           \".\",                 \",\" },\n#  endif\n  { \"C\",           \"\",               \"\",                   \"\",           \"\",           \" \",                 \" \" },\n};\n\n\nconst ref_monetary* LocaleTest::_get_ref_monetary(size_t i)\n{\n  if (i < sizeof(tested_locales) / sizeof(tested_locales[0])) {\n    return tested_locales + i;\n  }\n  return 0;\n}\n\nconst char* LocaleTest::_get_ref_monetary_name(const ref_monetary* _ref)\n{\n  return _ref->name;\n}\n\nvoid LocaleTest::_money_put_get( const locale& loc, const ref_monetary* rl )\n{\n  _money_put_get2(loc, loc, rl);\n}\n\nvoid LocaleTest::_money_put_get2( const locale& loc, const locale& streamLoc, const ref_monetary* prl )\n{\n  const ref_monetary &rl = *prl;\n  CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );\n  money_put<char> const& fmp = use_facet<money_put<char> >(loc);\n  CPPUNIT_ASSERT( has_facet<money_get<char> >(loc) );\n  money_get<char> const& fmg = use_facet<money_get<char> >(loc);\n\n  ostringstream ostr;\n  ostr.imbue(streamLoc);\n  ostr << showbase;\n\n  //Check a positive value (international format)\n  {\n    string str_res;\n    //money_put\n    {\n      CPPUNIT_ASSERT( (has_facet<moneypunct<char, true> >(loc)) );\n      moneypunct<char, true> const& intl_fmp = use_facet<moneypunct<char, true> >(loc);\n\n      ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, true, ostr, ' ', 123456);\n\n      CPPUNIT_ASSERT( !res.failed() );\n      str_res = ostr.str();\n      //CPPUNIT_MESSAGE(str_res.c_str());\n\n      size_t fieldIndex = 0;\n      size_t index = 0;\n\n      //On a positive value we skip the sign field if exists:\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        ++fieldIndex;\n      }\n      // international currency abbreviation, if it is before value\n\n      /*\n       * int_curr_symbol\n       *\n       *   The international currency symbol. The operand is a four-character\n       *   string, with the first three characters containing the alphabetic\n       *   international currency symbol in accordance with those specified\n       *   in the ISO 4217 specification. The fourth character is the character used\n       *   to separate the international currency symbol from the monetary quantity.\n       *\n       * (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html)\n       */\n      string::size_type p = strlen( rl.money_int_prefix );\n      if (p != 0) {\n        CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::symbol );\n        string::size_type p_old = strlen( rl.money_int_prefix_old );\n        CPPUNIT_ASSERT( (str_res.substr(index, p) == rl.money_int_prefix) ||\n                        ((p_old != 0) &&\n                         (str_res.substr(index, p_old) == rl.money_int_prefix_old)) );\n        if ( str_res.substr(index, p) == rl.money_int_prefix ) {\n          index += p;\n        } else {\n          index += p_old;\n        }\n        ++fieldIndex;\n      }\n\n      // space after currency\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ||\n          intl_fmp.pos_format().field[fieldIndex] == money_base::none) {\n        // iternational currency symobol has four chars, one of these chars\n        // is separator, so if format has space on this place, it should\n        // be skipped.\n        ++fieldIndex;\n      }\n\n      // sign\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        ++fieldIndex;\n      }\n\n      // value\n      CPPUNIT_ASSERT( str_res[index++] == '1' );\n      if (!intl_fmp.grouping().empty()) {\n        CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.thousands_sep() */ *rl.money_thousands_sep );\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '2' );\n      CPPUNIT_ASSERT( str_res[index++] == '3' );\n      CPPUNIT_ASSERT( str_res[index++] == '4' );\n      if (intl_fmp.frac_digits() != 0) {\n        CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.decimal_point() */ *rl.money_decimal_point );\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '5' );\n      CPPUNIT_ASSERT( str_res[index++] == '6' );\n      ++fieldIndex;\n\n      // sign\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        ++fieldIndex;\n      }\n\n      // space\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n\n      // sign\n      if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        ++fieldIndex;\n      }\n\n      //as space cannot be last the only left format can be none:\n      while ( fieldIndex < 3 ) {\n        CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::none );\n        ++fieldIndex;\n      }\n    }\n\n    //money_get\n    {\n      ios_base::iostate err = ios_base::goodbit;\n      string digits;\n\n      istringstream istr(str_res);\n      ostr.str( \"\" );\n      ostr.clear();\n      fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), true, ostr, err, digits);\n      CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );\n      CPPUNIT_ASSERT( digits == \"123456\" );\n    }\n  }\n\n  ostr.str(\"\");\n  //Check a negative value (national format)\n  {\n    CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );\n    moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);\n    string str_res;\n    //Check money_put\n    {\n      ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', -123456);\n\n      CPPUNIT_ASSERT( !res.failed() );\n      str_res = ostr.str();\n      //CPPUNIT_MESSAGE(str_res.c_str());\n\n      size_t fieldIndex = 0;\n      size_t index = 0;\n\n      if (dom_fmp.neg_format().field[fieldIndex] == money_base::sign) {\n        CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.negative_sign().size()) == dom_fmp.negative_sign() );\n        index += dom_fmp.negative_sign().size();\n        ++fieldIndex;\n      }\n\n      string::size_type p = strlen( rl.money_prefix );\n      if (p != 0) {\n        CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );\n        index += p;\n        ++fieldIndex;\n      }\n      if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||\n          dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n\n      CPPUNIT_ASSERT( str_res[index++] == '1' );\n      if (!dom_fmp.grouping().empty()) {\n        CPPUNIT_ASSERT( str_res[index++] == dom_fmp.thousands_sep() );\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '2' );\n      CPPUNIT_ASSERT( str_res[index++] == '3' );\n      CPPUNIT_ASSERT( str_res[index++] == '4' );\n      if (dom_fmp.frac_digits() != 0) {\n        CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '5' );\n      CPPUNIT_ASSERT( str_res[index++] == '6' );\n      ++fieldIndex;\n\n      //space cannot be last:\n      if ((fieldIndex < 3) &&\n          dom_fmp.neg_format().field[fieldIndex] == money_base::space) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n\n      if (fieldIndex == 3) {\n        //If none is last we should not add anything to the resulting string:\n        if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n          CPPUNIT_ASSERT( index == str_res.size() );\n        } else {\n          CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );\n          CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );\n        }\n      }\n    }\n\n    //money_get\n    {\n      ios_base::iostate err = ios_base::goodbit;\n#  if defined (STLPORT)\n      _STLP_LONGEST_FLOAT_TYPE val;\n#  else\n      long double val;\n#  endif\n\n      istringstream istr(str_res);\n      fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), false, ostr, err, val);\n      CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );\n      if (dom_fmp.negative_sign().empty()) {\n        //Without negative sign there is no way to guess the resulting amount sign (\"C\" locale):\n        CPPUNIT_ASSERT( val == 123456 );\n      }\n      else {\n        CPPUNIT_ASSERT( val == -123456 );\n      }\n    }\n  }\n}\n\n\n// Test for bug in case when number of digits in value less then number\n// of digits in fraction. I.e. '9' should be printed as '0.09',\n// if x.frac_digits() == 2.\n\nvoid LocaleTest::_money_put_X_bug( const locale& loc, const ref_monetary* prl )\n{\n  const ref_monetary &rl = *prl;\n  CPPUNIT_ASSERT( has_facet<money_put<char> >(loc) );\n  money_put<char> const& fmp = use_facet<money_put<char> >(loc);\n\n  ostringstream ostr;\n  ostr.imbue(loc);\n  ostr << showbase;\n\n  // ostr.str(\"\");\n  // Check value with one decimal digit:\n  {\n    CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );\n    moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);\n    string str_res;\n    // Check money_put\n    {\n      ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 9);\n\n      CPPUNIT_ASSERT( !res.failed() );\n      str_res = ostr.str();\n\n      size_t fieldIndex = 0;\n      size_t index = 0;\n\n      if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );\n        index += dom_fmp.positive_sign().size();\n        ++fieldIndex;\n      }\n\n      string::size_type p = strlen( rl.money_prefix );\n      if (p != 0) {\n        CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );\n        index += p;\n        ++fieldIndex;\n      }\n      if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||\n          dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n      if (dom_fmp.frac_digits() != 0) {\n        CPPUNIT_ASSERT( str_res[index++] == '0' );\n        CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );\n        for ( int fd = 1; fd < dom_fmp.frac_digits(); ++fd ) {\n          CPPUNIT_ASSERT( str_res[index++] == '0' );\n        }\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '9' );\n      ++fieldIndex;\n\n      //space cannot be last:\n      if ((fieldIndex < 3) &&\n          dom_fmp.neg_format().field[fieldIndex] == money_base::space) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n\n      if (fieldIndex == 3) {\n        //If none is last we should not add anything to the resulting string:\n        if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n          CPPUNIT_ASSERT( index == str_res.size() );\n        } else {\n          CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );\n          CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );\n        }\n      }\n    }\n  }\n\n  ostr.str(\"\");\n  // Check value with two decimal digit:\n  {\n    CPPUNIT_ASSERT( (has_facet<moneypunct<char, false> >(loc)) );\n    moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);\n    string str_res;\n    // Check money_put\n    {\n      ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 90);\n\n      CPPUNIT_ASSERT( !res.failed() );\n      str_res = ostr.str();\n\n      size_t fieldIndex = 0;\n      size_t index = 0;\n\n      if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {\n        CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );\n        index += dom_fmp.positive_sign().size();\n        ++fieldIndex;\n      }\n\n      string::size_type p = strlen( rl.money_prefix );\n      if (p != 0) {\n        CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );\n        index += p;\n        ++fieldIndex;\n      }\n      if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||\n          dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n      if (dom_fmp.frac_digits() != 0) {\n        CPPUNIT_ASSERT( str_res[index++] == '0' );\n        CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );\n        for ( int fd = 1; fd < dom_fmp.frac_digits() - 1; ++fd ) {\n          CPPUNIT_ASSERT( str_res[index++] == '0' );\n        }\n      }\n      CPPUNIT_ASSERT( str_res[index++] == '9' );\n      if (dom_fmp.frac_digits() != 0) {\n        CPPUNIT_ASSERT( str_res[index++] == '0' );\n      }\n      ++fieldIndex;\n\n      //space cannot be last:\n      if ((fieldIndex < 3) &&\n          dom_fmp.neg_format().field[fieldIndex] == money_base::space) {\n        CPPUNIT_ASSERT( str_res[index++] == ' ' );\n        ++fieldIndex;\n      }\n\n      if (fieldIndex == 3) {\n        //If none is last we should not add anything to the resulting string:\n        if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {\n          CPPUNIT_ASSERT( index == str_res.size() );\n        } else {\n          CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );\n          CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );\n        }\n      }\n    }\n  }\n}\n\ntypedef void (LocaleTest::*_Test) (const locale&, const ref_monetary*);\nstatic void test_supported_locale(LocaleTest& inst, _Test __test) {\n  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);\n  for (size_t i = 0; i < n; ++i) {\n    locale loc;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try\n#  endif\n    {\n      locale tmp(tested_locales[i].name);\n      loc = tmp;\n    }\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n#  endif\n    CPPUNIT_MESSAGE( loc.name().c_str() );\n    (inst.*__test)(loc, tested_locales + i);\n\n    {\n      locale tmp(locale::classic(), tested_locales[i].name, locale::monetary);\n      loc = tmp;\n    }\n    (inst.*__test)(loc, tested_locales + i);\n\n    {\n      locale tmp0(locale::classic(), new moneypunct_byname<char, true>(tested_locales[i].name));\n      locale tmp1(tmp0, new moneypunct_byname<char, false>(tested_locales[i].name));\n      loc = tmp1;\n    }\n    (inst.*__test)(loc, tested_locales + i);\n  }\n}\n\nvoid LocaleTest::money_put_get()\n{ test_supported_locale(*this, &LocaleTest::_money_put_get); }\n\nvoid LocaleTest::money_put_X_bug()\n{ test_supported_locale(*this, &LocaleTest::_money_put_X_bug); }\n\nvoid LocaleTest::moneypunct_by_name()\n{\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#    if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, true>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, true>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_MONETARY=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new moneypunct_byname<char, true>(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, false>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, false>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_MONETARY=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new moneypunct_byname<char, false>(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, false>(\"C\"));\n    moneypunct<char, false> const& cfacet_byname = use_facet<moneypunct<char, false> >(loc);\n    moneypunct<char, false> const& cfacet = use_facet<moneypunct<char, false> >(locale::classic());\n\n    money_base::pattern cp = cfacet.pos_format();\n    money_base::pattern cp_bn = cfacet_byname.pos_format();\n    CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );\n    CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );\n    CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );\n    CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );\n\n    CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );\n    if (cfacet_byname.frac_digits() != 0)\n      CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );\n    CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );\n    if (!cfacet_byname.grouping().empty())\n      CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );\n    CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );\n    CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<char, true>(\"C\"));\n    moneypunct<char, true> const& cfacet_byname = use_facet<moneypunct<char, true> >(loc);\n    moneypunct<char, true> const& cfacet = use_facet<moneypunct<char, true> >(locale::classic());\n\n    money_base::pattern cp = cfacet.pos_format();\n    money_base::pattern cp_bn = cfacet_byname.pos_format();\n    CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );\n    CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );\n    CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );\n    CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );\n\n    CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );\n    if (cfacet_byname.frac_digits() != 0)\n      CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );\n    CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );\n    if (!cfacet_byname.grouping().empty())\n      CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );\n    CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );\n    CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" locale facet.\n    locale loc(locale::classic(), new moneypunct_byname<char, false>(\"\"));\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#      if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#      if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/multiset_test.cpp",
    "content": "#include <set>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass MultisetTest : public CPPUNIT_NS::TestCase\n{\n  typedef multiset<int, less<int> > mset;\n\n  CPPUNIT_TEST_SUITE(MultisetTest);\n  CPPUNIT_TEST(mset1);\n  CPPUNIT_TEST(mset3);\n  CPPUNIT_TEST(mset5);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void mset1();\n  void mset3();\n  void mset5();\n\n  static bool less_than(int a_, int b_)\n  {\n    return a_ < b_;\n  }\n\n  static bool greater_than(int a_, int b_)\n  {\n    return a_ > b_;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MultisetTest);\n\n//\n// tests implementation\n//\nvoid MultisetTest::mset1()\n{\n  mset s;\n  CPPUNIT_ASSERT(s.count(42) == 0);\n  s.insert(42);\n  CPPUNIT_ASSERT(s.count(42) == 1);\n  s.insert(42);\n  CPPUNIT_ASSERT(s.count(42) == 2);\n\n  mset::iterator i = s.find(40);\n  CPPUNIT_ASSERT(i == s.end());\n\n  i = s.find(42);\n  CPPUNIT_ASSERT(i != s.end());\n  size_t count = s.erase(42);\n  CPPUNIT_ASSERT(count == 2);\n}\nvoid MultisetTest::mset3()\n{\n  int array [] = { 3, 6, 1, 2, 3, 2, 6, 7, 9 };\n\n  //Check iterator on a mutable set\n  mset s(array, array + 9);\n  mset::iterator i;\n  i = s.lower_bound(3);\n  CPPUNIT_ASSERT(*i == 3);\n  i = s.upper_bound(3);\n  CPPUNIT_ASSERT(*i == 6);\n  pair<mset::iterator, mset::iterator> p = s.equal_range(5);\n  CPPUNIT_ASSERT(*(p.first) == 6);\n  CPPUNIT_ASSERT(*(p.second) == 6);\n\n  //Check const_iterator on a mutable multiset\n  mset::const_iterator ci;\n  ci = s.lower_bound(3);\n  CPPUNIT_ASSERT(*ci == 3);\n  ci = s.upper_bound(3);\n  CPPUNIT_ASSERT(*ci == 6);\n  pair<mset::const_iterator, mset::const_iterator> cp;\n#ifdef _STLP_MEMBER_TEMPLATES\n  cp = s.equal_range(5);\n  CPPUNIT_ASSERT(*(cp.first) == 6);\n  CPPUNIT_ASSERT(*(cp.second) == 6);\n#endif\n\n  //Check const_iterator on a const multiset\n  mset const& crs = s;\n  ci = crs.lower_bound(3);\n  CPPUNIT_ASSERT(*ci == 3);\n  ci = crs.upper_bound(3);\n  CPPUNIT_ASSERT(*ci == 6);\n  cp = crs.equal_range(5);\n  CPPUNIT_ASSERT(*(cp.first) == 6);\n  CPPUNIT_ASSERT(*(cp.second) == 6);\n}\nvoid MultisetTest::mset5()\n{\n  int array [] = { 3, 6, 1, 9 };\n  int j;\n\n  typedef pointer_to_binary_function<int, int, bool> fn_type;\n  typedef multiset<int, fn_type, allocator<int> > fn_mset;\n\n  fn_type f(less_than);\n  fn_mset s1(array+0, array + 4 , f );\n  fn_mset::const_iterator i = s1.begin();\n  for (j = 0; i != s1.end(); ++i, ++j) {\n    CPPUNIT_ASSERT(j != 0 || *i == 1);\n    CPPUNIT_ASSERT(j != 1 || *i == 3);\n    CPPUNIT_ASSERT(j != 2 || *i == 6);\n    CPPUNIT_ASSERT(j != 3 || *i == 9);\n  }\n\n  fn_type g(greater_than);\n  fn_mset s2(array, array + 4, g);\n  i = s2.begin();\n  for (j = 0; i != s2.end(); ++i, ++j) {\n    CPPUNIT_ASSERT(j != 0 || *i == 9);\n    CPPUNIT_ASSERT(j != 1 || *i == 6);\n    CPPUNIT_ASSERT(j != 2 || *i == 3);\n    CPPUNIT_ASSERT(j != 3 || *i == 1);\n  }\n\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mvctor_declaration_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <string>\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <rope>\n#endif\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <slist>\n#endif\n#include <list>\n#include <deque>\n#include <set>\n#include <map>\n#if defined (STLPORT)\n#  include <unordered_set>\n#  include <unordered_map>\n#endif\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <hash_set>\n#  include <hash_map>\n#endif\n#include <queue>\n#include <stack>\n\n#include \"mvctor_test.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  if defined (STLPORT)\nusing namespace std::tr1;\n#  endif\n#endif\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n\n#  if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)\n// libstdc++ sometimes exposed its own __true_type in\n// global namespace resulting in an ambiguity.\n#    define __true_type std::__true_type\n#    define __false_type std::__false_type\n#  endif\n\nstatic bool type_to_bool(__true_type)\n{ return true; }\nstatic bool type_to_bool(__false_type)\n{ return false; }\n\ntemplate <class _Tp>\nstatic bool is_movable(const _Tp&) {\n  typedef typename __move_traits<_Tp>::implemented _MovableTp;\n  return type_to_bool(_MovableTp());\n}\n\ntemplate <class _Tp>\nstatic bool is_move_complete(const _Tp&) {\n  typedef __move_traits<_Tp> _TpMoveTraits;\n  typedef typename _TpMoveTraits::complete _TpMoveComplete;\n  return type_to_bool(_TpMoveComplete());\n}\n\nstruct specially_allocated_struct {\n  bool operator < (const specially_allocated_struct&) const;\n#  if defined (__DMC__) // slist<_Tp,_Alloc>::remove error\n  bool operator==(const specially_allocated_struct&) const;\n#  endif\n};\n\n#if defined (__DMC__)\nbool specially_allocated_struct::operator < (const specially_allocated_struct&) const\n{ return false; }\n#endif\n\nstruct struct_with_specialized_less {};\n\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  class allocator<specially_allocated_struct> {\n    //This allocator just represent what a STLport could do and in this\n    //case the STL containers implemented with it should still be movable\n    //but not completely as we cannot do any hypothesis on what is in this\n    //allocator.\n  public:\n    typedef specially_allocated_struct value_type;\n    typedef value_type *       pointer;\n    typedef const value_type* const_pointer;\n    typedef value_type&       reference;\n    typedef const value_type& const_reference;\n    typedef size_t     size_type;\n    typedef ptrdiff_t  difference_type;\n#  if defined (_STLP_MEMBER_TEMPLATE_CLASSES)\n    template <class _Tp1> struct rebind {\n      typedef allocator<_Tp1> other;\n    };\n#  endif\n    allocator() _STLP_NOTHROW {}\n#  if defined (_STLP_MEMBER_TEMPLATES)\n    template <class _Tp1> allocator(const allocator<_Tp1>&) _STLP_NOTHROW {}\n#  endif\n    allocator(const allocator&) _STLP_NOTHROW {}\n    ~allocator() _STLP_NOTHROW {}\n    pointer address(reference __x) const { return &__x; }\n    const_pointer address(const_reference __x) const { return &__x; }\n    pointer allocate(size_type, const void* = 0) { return 0; }\n    void deallocate(pointer, size_type) {}\n    size_type max_size() const _STLP_NOTHROW  { return 0; }\n    void construct(pointer, const_reference) {}\n    void destroy(pointer) {}\n  };\n\n  _STLP_TEMPLATE_NULL\n  struct less<struct_with_specialized_less> {\n    bool operator() (struct_with_specialized_less const&,\n                     struct_with_specialized_less const&) const;\n  };\n\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n#    if !defined (_STLP_NO_MOVE_SEMANTIC)\n#      if defined (__BORLANDC__) && (__BORLANDC__ >= 0x564)\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<vector<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<deque<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<list<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<slist<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<less<struct_with_specialized_less> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<set<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<multiset<specially_allocated_struct> > {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n#      endif\n#    endif\n#  endif\n\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\nvoid MoveConstructorTest::movable_declaration()\n{\n#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \\\n                         !defined (_STLP_NO_MOVE_SEMANTIC)\n  //This test purpose is to check correct detection of the STL movable\n  //traits declaration\n  {\n    //string, wstring:\n    CPPUNIT_ASSERT( is_movable(string()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(string()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(string()) );\n#  endif\n#  if defined (_STLP_HAS_WCHAR_T)\n    CPPUNIT_ASSERT( is_movable(wstring()) );\n#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(wstring()) );\n#    else\n    CPPUNIT_ASSERT( !is_move_complete(wstring()) );\n#    endif\n#  endif\n  }\n\n#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  {\n    //crope, wrope:\n    CPPUNIT_ASSERT( is_movable(crope()) );\n#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(crope()) );\n#    else\n    CPPUNIT_ASSERT( !is_move_complete(crope()) );\n#    endif\n#    if defined (_STLP_HAS_WCHAR_T)\n    CPPUNIT_ASSERT( is_movable(wrope()) );\n#      if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(wrope()) );\n#      else\n    CPPUNIT_ASSERT( !is_move_complete(wrope()) );\n#      endif\n#    endif\n  }\n#  endif\n\n  {\n    //vector:\n    CPPUNIT_ASSERT( is_movable(vector<char>()) );\n    CPPUNIT_ASSERT( is_movable(vector<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(vector<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(vector<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(vector<char>()) );\n#  endif\n  }\n\n  {\n    //deque:\n    CPPUNIT_ASSERT( is_movable(deque<char>()) );\n    CPPUNIT_ASSERT( is_movable(deque<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(deque<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(deque<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(deque<char>()) );\n#  endif\n  }\n\n  {\n    //list:\n    CPPUNIT_ASSERT( is_movable(list<char>()) );\n    CPPUNIT_ASSERT( is_movable(list<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(list<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(list<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(list<char>()) );\n#  endif\n  }\n\n#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  {\n    //slist:\n    CPPUNIT_ASSERT( is_movable(slist<char>()) );\n    CPPUNIT_ASSERT( is_movable(slist<specially_allocated_struct>()) );\n#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(slist<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(slist<specially_allocated_struct>()) );\n#    else\n    CPPUNIT_ASSERT( !is_move_complete(slist<char>()) );\n#    endif\n  }\n#  endif\n\n  {\n    //queue:\n    CPPUNIT_ASSERT( is_movable(queue<char>()) );\n    CPPUNIT_ASSERT( is_movable(queue<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(queue<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(queue<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(queue<char>()) );\n#  endif\n  }\n\n  {\n    //stack:\n    CPPUNIT_ASSERT( is_movable(stack<char>()) );\n    CPPUNIT_ASSERT( is_movable(stack<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(stack<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(stack<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(stack<char>()) );\n#  endif\n  }\n\n#endif\n}\n\nvoid MoveConstructorTest::movable_declaration_assoc()\n{\n#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \\\n                         !defined (_STLP_NO_MOVE_SEMANTIC)\n  {\n    //associative containers, set multiset, map, multimap:\n\n    //For associative containers it is important that less is correctly recognize as\n    //the STLport less or a user specialized less:\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(less<char>()) );\n#  endif\n    CPPUNIT_ASSERT( !is_move_complete(less<struct_with_specialized_less>()) );\n\n    //set\n    CPPUNIT_ASSERT( is_movable(set<char>()) );\n    CPPUNIT_ASSERT( is_movable(set<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(set<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(set<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(set<char>()) );\n#  endif\n\n    //multiset\n    CPPUNIT_ASSERT( is_movable(multiset<char>()) );\n    CPPUNIT_ASSERT( is_movable(multiset<specially_allocated_struct>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(multiset<char>()) );\n    CPPUNIT_ASSERT( !is_move_complete(multiset<specially_allocated_struct>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(multiset<char>()) );\n#  endif\n\n    //map\n    CPPUNIT_ASSERT( is_movable(map<char, char>()) );\n    CPPUNIT_ASSERT( is_movable(map<specially_allocated_struct, char>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(map<char, char>()) );\n    //Here even if allocator has been specialized for specially_allocated_struct\n    //this pecialization won't be used in default map instanciation as the default\n    //allocator is allocator<pair<specially_allocated_struct, char> >\n    CPPUNIT_ASSERT( is_move_complete(map<specially_allocated_struct, char>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(map<char, char>()) );\n#  endif\n\n    //multimap\n    CPPUNIT_ASSERT( is_movable(multimap<char, char>()) );\n    CPPUNIT_ASSERT( is_movable(multimap<specially_allocated_struct, char>()) );\n#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n    CPPUNIT_ASSERT( is_move_complete(multimap<char, char>()) );\n    //Idem map remark\n    CPPUNIT_ASSERT( is_move_complete(multimap<specially_allocated_struct, char>()) );\n#  else\n    CPPUNIT_ASSERT( !is_move_complete(multimap<char, char>()) );\n#  endif\n  }\n#endif\n}\n\nvoid MoveConstructorTest::movable_declaration_hash()\n{\n#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \\\n                         !defined (_STLP_NO_MOVE_SEMANTIC)\n  {\n    //hashed containers, unordered_set unordered_multiset, unordered_map, unordered_multimap,\n    //                   hash_set, hash_multiset, hash_map, hash_multimap:\n\n    //We only check that they are movable, completness is not yet supported\n    CPPUNIT_ASSERT( is_movable(unordered_set<char>()) );\n    CPPUNIT_ASSERT( is_movable(unordered_multiset<char>()) );\n    CPPUNIT_ASSERT( is_movable(unordered_map<char, char>()) );\n    CPPUNIT_ASSERT( is_movable(unordered_multimap<char, char>()) );\n#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n    CPPUNIT_ASSERT( is_movable(hash_set<char>()) );\n    CPPUNIT_ASSERT( is_movable(hash_multiset<char>()) );\n    CPPUNIT_ASSERT( is_movable(hash_map<char, char>()) );\n    CPPUNIT_ASSERT( is_movable(hash_multimap<char, char>()) );\n#  endif\n  }\n#endif\n}\n\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mvctor_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <string>\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <slist>\n#endif\n#include <list>\n#include <deque>\n#include <set>\n#if defined (STLPORT)\n#  include <unordered_set>\n#endif\n\n#include \"mvctor_test.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  if defined (STLPORT)\nusing namespace std::tr1;\n#  endif\n#endif\n\nCPPUNIT_TEST_SUITE_REGISTRATION(MoveConstructorTest);\n\n//\n// tests implementation\n//\nvoid MoveConstructorTest::move_construct_test()\n{\n  //cout << \"vector<vector<int>>\";\n  vector<int> const ref_vec(10, 0);\n  vector<vector<int> > v_v_ints(1, ref_vec);\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  int *pint = &(v_v_ints.front().front());\n#endif\n\n  size_t cur_capacity = v_v_ints.capacity();\n  while (v_v_ints.capacity() <= cur_capacity) {\n    v_v_ints.push_back(ref_vec);\n  }\n\n  //v_v_ints has been resized\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CPPUNIT_ASSERT((pint == &v_v_ints.front().front()));\n#endif\n\n  //cout << \"vector<vector<int>>::erase\";\n  //We need at least 3 elements:\n  while (v_v_ints.size() < 3) {\n    v_v_ints.push_back(ref_vec);\n  }\n\n  //We erase the 2nd\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  pint = &v_v_ints[2].front();\n#endif\n  v_v_ints.erase(v_v_ints.begin() + 1);\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CPPUNIT_ASSERT((pint == &v_v_ints[1].front()));\n#endif\n\n  //cout << \"vector<string>\";\n  string const ref_str(\"ref string, big enough to be a dynamic one\");\n  vector<string> vec_strs(1, ref_str);\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  char const* pstr = vec_strs.front().c_str();\n#endif\n  cur_capacity = vec_strs.capacity();\n  while (vec_strs.capacity() <= cur_capacity) {\n    vec_strs.push_back(ref_str);\n  }\n\n  //vec_str has been resized\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CPPUNIT_ASSERT((pstr == vec_strs.front().c_str()));\n#endif\n\n  //cout << \"vector<string>::erase\";\n  //We need at least 3 elements:\n  while (vec_strs.size() < 3) {\n    vec_strs.push_back(ref_str);\n  }\n\n  //We erase the 2nd\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  pstr = vec_strs[2].c_str();\n#endif\n  vec_strs.erase(vec_strs.begin() + 1);\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CPPUNIT_ASSERT((pstr == vec_strs[1].c_str()));\n#endif\n\n  //cout << \"swap(vector<int>, vector<int>)\";\n  vector<int> elem1(10, 0), elem2(10, 0);\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  int *p1 = &elem1.front();\n  int *p2 = &elem2.front();\n#endif\n  swap(elem1, elem2);\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CPPUNIT_ASSERT(((p1 == &elem2.front()) && (p2 == &elem1.front())));\n#endif\n\n  {\n    vector<bool> bit_vec(5, true);\n    bit_vec.insert(bit_vec.end(), 5, false);\n    vector<vector<bool> > v_v_bits(1, bit_vec);\n\n    /*\n     * This is a STLport specific test as we are using internal implementation\n     * details to check that the move has been correctly handled. For other\n     * STL implementation it is only a compile check.\n     */\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n#  if defined (_STLP_DEBUG)\n    unsigned int *punit = v_v_bits.front().begin()._M_iterator._M_p;\n#  else\n    unsigned int *punit = v_v_bits.front().begin()._M_p;\n#  endif\n#endif\n\n    cur_capacity = v_v_bits.capacity();\n    while (v_v_bits.capacity() <= cur_capacity) {\n      v_v_bits.push_back(bit_vec);\n    }\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n    //v_v_bits has been resized\n#  if defined (_STLP_DEBUG)\n    CPPUNIT_ASSERT( punit == v_v_bits.front().begin()._M_iterator._M_p );\n#  else\n    CPPUNIT_ASSERT( punit == v_v_bits.front().begin()._M_p );\n#  endif\n#endif\n  }\n\n  // zero: don't like this kind of tests\n  // because of template test function\n  // we should find another way to provide\n  // move constructor testing...\n\n/*\n  standard_test1(list<int>(10));\n\n\n  standard_test1(slist<int>(10));\n\n  standard_test1(deque<int>(10));\n*/\n\n  /*\n  int int_values[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\n\n  set<int> int_set(int_values, int_values + sizeof(in_values) / sizeof(int));\n  standard_test1(int_set);\n\n  multiset<int> int_multiset(int_values, int_values + sizeof(in_values) / sizeof(int));\n  standard_test1(int_multiset);\n  */\n\n  /*\n  CheckFullMoveSupport(string());\n  CheckFullMoveSupport(vector<int>());\n  CheckFullMoveSupport(deque<int>());\n  CheckFullMoveSupport(list<int>());\n  CheckFullMoveSupport(slist<int>());\n  */\n}\n\nvoid MoveConstructorTest::deque_test()\n{\n  //Check the insert range method.\n  //To the front:\n  {\n#  if !defined (STLPORT) || !defined (_STLP_DEBUG) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n    deque<vector<int> > vect_deque;\n    vector<int*> bufs;\n    vect_deque.assign(3, vector<int>(10));\n    bufs.push_back(&vect_deque[0].front());\n    bufs.push_back(&vect_deque[1].front());\n    bufs.push_back(&vect_deque[2].front());\n\n    int nb_insert = 5;\n    //Initialize to 1 to generate a front insertion:\n    int pos = 1;\n    while (nb_insert--) {\n      vector<vector<int> > vect_vect(2, vector<int>(10));\n      vect_deque.insert(vect_deque.begin() + pos, vect_vect.begin(), vect_vect.end());\n      bufs.insert(bufs.begin() + pos, &vect_deque[pos].front());\n      bufs.insert(bufs.begin() + pos + 1, &vect_deque[pos + 1].front());\n      ++pos;\n    }\n    CPPUNIT_ASSERT( vect_deque.size() == 13 );\n#    if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n    for (int i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( bufs[i] == &vect_deque[i].front() );\n      CPPUNIT_ASSERT( bufs[11 - i] == &vect_deque[11 - i].front() );\n    }\n#    endif\n#  endif\n  }\n\n  //To the back\n  {\n#  if !defined (STLPORT) || !defined (_STLP_DEBUG) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n    deque<vector<int> > vect_deque;\n    vector<int*> bufs;\n    vect_deque.assign(3, vector<int>(10));\n    bufs.push_back(&vect_deque[0].front());\n    bufs.push_back(&vect_deque[1].front());\n    bufs.push_back(&vect_deque[2].front());\n\n    int nb_insert = 5;\n    //Initialize to 2 to generate a back insertion:\n    int pos = 2;\n    while (nb_insert--) {\n      vector<vector<int> > vect_vect(2, vector<int>(10));\n      vect_deque.insert(vect_deque.begin() + pos, vect_vect.begin(), vect_vect.end());\n      bufs.insert(bufs.begin() + pos, &vect_deque[pos].front());\n      bufs.insert(bufs.begin() + pos + 1, &vect_deque[pos + 1].front());\n      ++pos;\n    }\n    CPPUNIT_ASSERT( vect_deque.size() == 13 );\n#    if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n    for (int i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( bufs[i + 1] == &vect_deque[i + 1].front() );\n      CPPUNIT_ASSERT( bufs[12 - i] == &vect_deque[12 - i].front() );\n    }\n#    endif\n#  endif\n  }\n\n  //Check the different erase methods.\n  {\n    deque<vector<int> > vect_deque;\n    vect_deque.assign(20, vector<int>(10));\n    deque<vector<int> >::iterator vdit(vect_deque.begin()), vditEnd(vect_deque.end());\n    vector<int*> bufs;\n    for (; vdit != vditEnd; ++vdit) {\n      bufs.push_back(&vdit->front());\n    }\n\n    {\n      // This check, repeated after each operation, check the deque consistency:\n      deque<vector<int> >::iterator it = vect_deque.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //erase in front:\n      vect_deque.erase(vect_deque.begin() + 2);\n      bufs.erase(bufs.begin() + 2);\n      CPPUNIT_ASSERT( vect_deque.size() == 19 );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      deque<vector<int> >::iterator it = vect_deque.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //erase in the back:\n      vect_deque.erase(vect_deque.end() - 2);\n      bufs.erase(bufs.end() - 2);\n      CPPUNIT_ASSERT( vect_deque.size() == 18 );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      deque<vector<int> >::iterator it = vect_deque.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_deque.end() && nb_incr < 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //range erase in front\n      vect_deque.erase(vect_deque.begin() + 3, vect_deque.begin() + 5);\n      bufs.erase(bufs.begin() + 3, bufs.begin() + 5);\n      CPPUNIT_ASSERT( vect_deque.size() == 16 );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      deque<vector<int> >::iterator it = vect_deque.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //range erase in back\n      vect_deque.erase(vect_deque.end() - 5, vect_deque.end() - 3);\n      bufs.erase(bufs.end() - 5, bufs.end() - 3);\n      CPPUNIT_ASSERT( vect_deque.size() == 14 );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n  }\n\n  //Check the insert value(s)\n  {\n    deque<vector<int> > vect_deque;\n    vect_deque.assign(20, vector<int>(10));\n    deque<vector<int> >::iterator vdit(vect_deque.begin()), vditEnd(vect_deque.end());\n    vector<int*> bufs;\n    for (; vdit != vditEnd; ++vdit) {\n      bufs.push_back(&vdit->front());\n    }\n\n    {\n      //2 values in front:\n      vect_deque.insert(vect_deque.begin() + 2, 2, vector<int>(10));\n      bufs.insert(bufs.begin() + 2, &vect_deque[2].front());\n      bufs.insert(bufs.begin() + 3, &vect_deque[3].front());\n      CPPUNIT_ASSERT( vect_deque.size() == 22 );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //2 values in back:\n      vect_deque.insert(vect_deque.end() - 2, 2, vector<int>(10));\n      bufs.insert(bufs.end() - 2, &vect_deque[20].front());\n      bufs.insert(bufs.end() - 2, &vect_deque[21].front());\n      CPPUNIT_ASSERT( vect_deque.size() == 24 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //1 value in front:\n      deque<vector<int> >::iterator ret;\n      ret = vect_deque.insert(vect_deque.begin() + 2, vector<int>(10));\n      bufs.insert(bufs.begin() + 2, &vect_deque[2].front());\n      CPPUNIT_ASSERT( vect_deque.size() == 25 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( &ret->front() == bufs[2] );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //1 value in back:\n      deque<vector<int> >::iterator ret;\n      ret = vect_deque.insert(vect_deque.end() - 2, vector<int>(10));\n      bufs.insert(bufs.end() - 2, &vect_deque[23].front());\n      CPPUNIT_ASSERT( vect_deque.size() == 26 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( &ret->front() == bufs[23] );\n      deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n  }\n}\n\nvoid MoveConstructorTest::vector_test()\n{\n  //Check the insert range method.\n  //To the front:\n  {\n    vector<vector<int> > vect_vector;\n    vector<int*> bufs;\n    vect_vector.assign(3, vector<int>(10));\n    bufs.push_back(&vect_vector[0].front());\n    bufs.push_back(&vect_vector[1].front());\n    bufs.push_back(&vect_vector[2].front());\n\n    int nb_insert = 5;\n    int pos = 1;\n    while (nb_insert--) {\n      vector<vector<int> > vect_vect(2, vector<int>(10));\n      vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end());\n      bufs.insert(bufs.begin() + pos, &vect_vector[pos].front());\n      bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front());\n      ++pos;\n    }\n    CPPUNIT_ASSERT( vect_vector.size() == 13 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n    for (int i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( bufs[i] == &vect_vector[i].front() );\n      CPPUNIT_ASSERT( bufs[11 - i] == &vect_vector[11 - i].front() );\n    }\n#endif\n  }\n\n  //To the back\n  {\n    vector<vector<int> > vect_vector;\n    vector<int*> bufs;\n    vect_vector.assign(3, vector<int>(10));\n    bufs.push_back(&vect_vector[0].front());\n    bufs.push_back(&vect_vector[1].front());\n    bufs.push_back(&vect_vector[2].front());\n\n    int nb_insert = 5;\n    //Initialize to 2 to generate a back insertion:\n    int pos = 2;\n    while (nb_insert--) {\n      vector<vector<int> > vect_vect(2, vector<int>(10));\n      vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end());\n      bufs.insert(bufs.begin() + pos, &vect_vector[pos].front());\n      bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front());\n      ++pos;\n    }\n    CPPUNIT_ASSERT( vect_vector.size() == 13 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n    for (int i = 0; i < 5; ++i) {\n      CPPUNIT_ASSERT( bufs[i + 1] == &vect_vector[i + 1].front() );\n      CPPUNIT_ASSERT( bufs[12 - i] == &vect_vector[12 - i].front() );\n    }\n#endif\n  }\n\n  //Check the different erase methods.\n  {\n    vector<vector<int> > vect_vector;\n    vect_vector.assign(20, vector<int>(10));\n    vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end());\n    vector<int*> bufs;\n    for (; vdit != vditEnd; ++vdit) {\n      bufs.push_back(&vdit->front());\n    }\n\n    {\n      // This check, repeated after each operation, check the vector consistency:\n      vector<vector<int> >::iterator it = vect_vector.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //erase in front:\n      vect_vector.erase(vect_vector.begin() + 2);\n      bufs.erase(bufs.begin() + 2);\n      CPPUNIT_ASSERT( vect_vector.size() == 19 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      vector<vector<int> >::iterator it = vect_vector.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //erase in the back:\n      vect_vector.erase(vect_vector.end() - 2);\n      bufs.erase(bufs.end() - 2);\n      CPPUNIT_ASSERT( vect_vector.size() == 18 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      vector<vector<int> >::iterator it = vect_vector.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_vector.end() && nb_incr < 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //range erase in front\n      vect_vector.erase(vect_vector.begin() + 3, vect_vector.begin() + 5);\n      bufs.erase(bufs.begin() + 3, bufs.begin() + 5);\n      CPPUNIT_ASSERT( vect_vector.size() == 16 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      vector<vector<int> >::iterator it = vect_vector.end() - 5;\n      int nb_incr = 0;\n      for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {}\n      CPPUNIT_ASSERT( nb_incr == 5 );\n    }\n\n    {\n      //range erase in back\n      vect_vector.erase(vect_vector.end() - 5, vect_vector.end() - 3);\n      bufs.erase(bufs.end() - 5, bufs.end() - 3);\n      CPPUNIT_ASSERT( vect_vector.size() == 14 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n  }\n\n  //Check the insert value(s)\n  {\n    vector<vector<int> > vect_vector;\n    vect_vector.assign(20, vector<int>(10));\n    vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end());\n    vector<int*> bufs;\n    for (; vdit != vditEnd; ++vdit) {\n      bufs.push_back(&vdit->front());\n    }\n\n    {\n      //2 values in front:\n      vect_vector.insert(vect_vector.begin() + 2, 2, vector<int>(10));\n      bufs.insert(bufs.begin() + 2, &vect_vector[2].front());\n      bufs.insert(bufs.begin() + 3, &vect_vector[3].front());\n      CPPUNIT_ASSERT( vect_vector.size() == 22 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //2 values in back:\n      vect_vector.insert(vect_vector.end() - 2, 2, vector<int>(10));\n      bufs.insert(bufs.end() - 2, &vect_vector[20].front());\n      bufs.insert(bufs.end() - 2, &vect_vector[21].front());\n      CPPUNIT_ASSERT( vect_vector.size() == 24 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //1 value in front:\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator ret =\n#endif\n      vect_vector.insert(vect_vector.begin() + 2, vector<int>(10));\n      bufs.insert(bufs.begin() + 2, &vect_vector[2].front());\n      CPPUNIT_ASSERT( vect_vector.size() == 25 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( &ret->front() == bufs[2] );\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n\n    {\n      //1 value in back:\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      vector<vector<int> >::iterator ret =\n#endif\n      vect_vector.insert(vect_vector.end() - 2, vector<int>(10));\n      bufs.insert(bufs.end() - 2, &vect_vector[23].front());\n      CPPUNIT_ASSERT( vect_vector.size() == 26 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( &ret->front() == bufs[23] );\n      vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end());\n      for (size_t i = 0; dit != ditEnd; ++dit, ++i) {\n        CPPUNIT_ASSERT( bufs[i] == &dit->front() );\n      }\n#endif\n    }\n  }\n\n  //The following tests are checking move contructor implementations:\n  const string long_str(\"long enough string to force dynamic allocation\");\n  {\n    //vector move contructor:\n    vector<vector<string> > vect(10, vector<string>(10, long_str));\n    vector<string> strs;\n    size_t index = 0;\n    for (;;) {\n      vector<vector<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(it->front());\n      it->erase(it->begin());\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n\n  {\n    //deque move contructor:\n#  if !defined (__DMC__)\n    vector<deque<string> > vect(10, deque<string>(10, long_str));\n#  else\n    deque<string> deq_str = deque<string>(10, long_str);\n    vector<deque<string> > vect(10, deq_str);\n#  endif\n    vector<string> strs;\n    size_t index = 0;\n    for (;;) {\n      vector<deque<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(it->front());\n      it->pop_front();\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n\n  {\n    //list move contructor:\n    vector<list<string> > vect(10, list<string>(10, long_str));\n    vector<string> strs;\n    size_t index = 0;\n    for (;;) {\n      vector<list<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(it->front());\n      it->pop_front();\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  {\n    //slist move contructor:\n    vector<slist<string> > vect(10, slist<string>(10, long_str));\n    vector<string> strs;\n    size_t index = 0;\n    while (true) {\n      vector<slist<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(it->front());\n      it->pop_front();\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n#endif\n\n  {\n    //binary tree move contructor:\n    multiset<string> ref;\n    for (size_t i = 0; i < 10; ++i) {\n      ref.insert(long_str);\n    }\n    vector<multiset<string> > vect(10, ref);\n    vector<string> strs;\n    size_t index = 0;\n    for (;;) {\n      vector<multiset<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(*it->begin());\n      it->erase(it->begin());\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n\n#if defined (STLPORT)\n#  if !defined (__DMC__)\n  {\n    //hash container move contructor:\n    unordered_multiset<string> ref;\n    for (size_t i = 0; i < 10; ++i) {\n      ref.insert(long_str);\n    }\n    vector<unordered_multiset<string> > vect(10, ref);\n    vector<string> strs;\n    size_t index = 0;\n    while (true) {\n      vector<unordered_multiset<string> >::iterator it(vect.begin());\n      advance(it, index % vect.size());\n      strs.push_back(*it->begin());\n      it->erase(it->begin());\n      if (it->empty()) {\n        vect.erase(it);\n        if (vect.empty())\n          break;\n      }\n      index += 3;\n    }\n    CPPUNIT_ASSERT( strs.size() == 10 * 10 );\n    vector<string>::iterator it(strs.begin()), itEnd(strs.end());\n    for (; it != itEnd; ++it) {\n      CPPUNIT_ASSERT( *it == long_str );\n    }\n  }\n#  endif\n#endif\n}\n\n#if defined (__BORLANDC__)\n/* Specific Borland test case to show a really weird compiler behavior.\n */\nclass Standalone\n{\npublic:\n  //Uncomment following to pass the test\n  //Standalone() {}\n  ~Standalone() {}\n\n  MovableStruct movableStruct;\n  vector<int> intVector;\n};\n\nvoid MoveConstructorTest::nb_destructor_calls()\n{\n  MovableStruct::reset();\n\n  try\n  {\n    Standalone standalone;\n    throw \"some exception\";\n    MovableStruct movableStruct;\n  }\n  catch (const char*)\n  {\n    CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 1 );\n    CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 );\n  }\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mvctor_test.h",
    "content": "#include <cstdio> //size_t and STLport macros\n\n#include \"cppunit/cppunit_proxy.h\"\n\n//\n// TestCase class\n//\nclass MoveConstructorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(MoveConstructorTest);\n  CPPUNIT_TEST(move_construct_test);\n  CPPUNIT_TEST(deque_test);\n  CPPUNIT_TEST(vector_test);\n  CPPUNIT_TEST(move_traits);\n#if !defined (STLPORT) || defined (_STLP_NO_MOVE_SEMANTIC) || \\\n    defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) || \\\n    (defined (__BORLANDC__) && (__BORLANDC__ < 0x564))\n  CPPUNIT_IGNORE;\n#  endif\n  CPPUNIT_TEST(movable_declaration)\n  CPPUNIT_TEST(movable_declaration_assoc)\n  CPPUNIT_TEST(movable_declaration_hash)\n#if defined (__BORLANDC__)\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(nb_destructor_calls);\n#endif\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void move_construct_test();\n  void deque_test();\n  void vector_test();\n  void move_traits();\n  void movable_declaration();\n  void movable_declaration_assoc();\n  void movable_declaration_hash();\n  void nb_destructor_calls();\n\n  /*\n  template <class _Container>\n  void standard_test1(_Container const& ref_cont) {\n    vector<_Container> vec_cont(1, ref_cont);\n    typedef typename _Container::value_type value_type;\n    value_type *pvalue = &(*vec_cont.front().begin());\n    size_t cur_capacity= vec_cont.capacity();\n    //force reallocation\n    while (cur_capacity == vec_cont.capacity()) {\n      vec_cont.push_back(ref_cont);\n    }\n    bool b=( (pvalue==(&(*vec_cont.front().begin()))) );\n    CPPUNIT_ASSERT(b);\n  }\n  */\n\nprivate:\n  void move_traits_vec();\n  void move_traits_vec_complete();\n  void move_traits_deq();\n  void move_traits_deq_complete();\n};\n\nstruct MovableStruct {\n  MovableStruct() { ++nb_dft_construct_call; }\n  MovableStruct(MovableStruct const&) { ++nb_cpy_construct_call; }\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n#  if defined (_STLP_USE_NAMESPACES)\n  MovableStruct(std::__move_source<MovableStruct>)\n#  else\n  MovableStruct(__move_source<MovableStruct>)\n#  endif\n  { ++nb_mv_construct_call; }\n#endif\n  ~MovableStruct() { ++nb_destruct_call; }\n\n  MovableStruct& operator = (const MovableStruct&) {\n    ++nb_assignment_call;\n    return *this;\n  }\n\n  static void reset() {\n    nb_dft_construct_call = nb_cpy_construct_call = nb_mv_construct_call = 0;\n    nb_assignment_call = 0;\n    nb_destruct_call = 0;\n  }\n\n  static size_t nb_dft_construct_call;\n  static size_t nb_cpy_construct_call;\n  static size_t nb_mv_construct_call;\n  static size_t nb_assignment_call;\n  static size_t nb_destruct_call;\n\n  //Dummy data just to control struct sizeof\n  //As node allocator implementation align memory blocks on 2 * sizeof(void*)\n  //we give MovableStruct the same size in order to have expected allocation\n  //and not more\n  void* dummy_data[2];\n};\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/mvctor_traits_test.cpp",
    "content": "#include <vector>\n#include <deque>\n\n#include \"mvctor_test.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nsize_t MovableStruct::nb_dft_construct_call = 0;\nsize_t MovableStruct::nb_cpy_construct_call = 0;\nsize_t MovableStruct::nb_mv_construct_call = 0;\nsize_t MovableStruct::nb_assignment_call = 0;\nsize_t MovableStruct::nb_destruct_call = 0;\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<MovableStruct> {\n    typedef __true_type implemented;\n    typedef __false_type complete;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\nstruct CompleteMovableStruct {\n  CompleteMovableStruct() { ++nb_dft_construct_call; }\n  CompleteMovableStruct(CompleteMovableStruct const&) { ++nb_cpy_construct_call; }\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n  CompleteMovableStruct(__move_source<CompleteMovableStruct>) { ++nb_mv_construct_call; }\n#endif\n  ~CompleteMovableStruct() { ++nb_destruct_call; }\n\n  CompleteMovableStruct& operator = (const CompleteMovableStruct&) {\n    ++nb_assignment_call;\n    return *this;\n  }\n  static void reset() {\n    nb_dft_construct_call = nb_cpy_construct_call = nb_mv_construct_call = 0;\n    nb_assignment_call = 0;\n    nb_destruct_call = 0;\n  }\n\n  static size_t nb_dft_construct_call;\n  static size_t nb_cpy_construct_call;\n  static size_t nb_mv_construct_call;\n  static size_t nb_assignment_call;\n  static size_t nb_destruct_call;\n\n  //See MovableStruct\n  void* dummy_data[2];\n};\n\nsize_t CompleteMovableStruct::nb_dft_construct_call = 0;\nsize_t CompleteMovableStruct::nb_cpy_construct_call = 0;\nsize_t CompleteMovableStruct::nb_mv_construct_call = 0;\nsize_t CompleteMovableStruct::nb_assignment_call = 0;\nsize_t CompleteMovableStruct::nb_destruct_call = 0;\n\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __move_traits<CompleteMovableStruct> {\n    typedef __true_type implemented;\n    typedef __true_type complete;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\nvoid MoveConstructorTest::move_traits()\n{\n  move_traits_vec();\n  move_traits_vec_complete();\n  move_traits_deq();\n  move_traits_deq_complete();\n}\n\nvoid MoveConstructorTest::move_traits_vec()\n{\n  {\n    {\n      vector<MovableStruct> vect;\n      vect.push_back(MovableStruct());\n      vect.push_back(MovableStruct());\n      vect.push_back(MovableStruct());\n      vect.push_back(MovableStruct());\n\n      // vect contains 4 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );\n#if defined (STLPORT)\n#  if !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 );\n#  else\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 );\n#  endif\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 );\n#elif !defined (_MSC_VER)\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 14 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 14 );\n#endif\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );\n\n      // Following test violate requirements to sequiences (23.1.1 Table 67)\n      /*\n      vect.insert(vect.begin() + 2, vect.begin(), vect.end());\n      // vect contains 8 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 );\n      */\n\n      MovableStruct::reset();\n      vector<MovableStruct> v2 = vect;\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );\n\n      MovableStruct::reset();\n      vect.insert(vect.begin() + 2, v2.begin(), v2.end() );\n\n      // vect contains 8 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 4 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );\n#endif\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );\n\n      MovableStruct::reset();\n      vect.erase(vect.begin(), vect.begin() + 2 );\n\n      // vect contains 6 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 6 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 8 );\n#else\n      CPPUNIT_ASSERT_EQUAL( MovableStruct::nb_assignment_call, 6 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );\n#endif\n\n      MovableStruct::reset();\n      vect.erase(vect.end() - 2, vect.end());\n\n      // vect contains 4 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );\n\n      MovableStruct::reset();\n      vect.erase(vect.begin());\n\n      // vect contains 3 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 3 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 );\n#endif\n\n      MovableStruct::reset();\n    }\n    //vect with 3 elements and v2 with 4 elements are now out of scope\n    CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 );\n  }\n}\n\nvoid MoveConstructorTest::move_traits_vec_complete()\n{\n  {\n    {\n      vector<CompleteMovableStruct> vect;\n      vect.push_back(CompleteMovableStruct());\n      vect.push_back(CompleteMovableStruct());\n      vect.push_back(CompleteMovableStruct());\n      vect.push_back(CompleteMovableStruct());\n\n      // vect contains 4 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );\n#if defined (STLPORT)\n#  if !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );\n#  else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 );\n#  endif\n#elif !defined (_MSC_VER)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 14 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 14 );\n#endif\n\n      // Following test violate requirements to sequiences (23.1.1 Table 67)\n      /*\n      vect.insert(vect.begin() + 2, vect.begin(), vect.end());\n\n      // vect contains 8 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );\n      */\n\n      CompleteMovableStruct::reset();\n      vector<CompleteMovableStruct> v2 = vect;\n\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );\n\n      CompleteMovableStruct::reset();\n      vect.insert(vect.begin() + 2, v2.begin(), v2.end());\n\n      // vect contains 8 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );\n#endif\n\n      CompleteMovableStruct::reset();\n      vect.erase(vect.begin(), vect.begin() + 2);\n\n      // vect contains 6 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 6 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 6 );\n#endif\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );\n\n      CompleteMovableStruct::reset();\n      vect.erase(vect.end() - 2, vect.end());\n\n      // vect contains 4 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );\n\n      CompleteMovableStruct::reset();\n      vect.erase(vect.begin());\n\n      // vect contains 3 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 3 );\n#endif\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 );\n\n      CompleteMovableStruct::reset();\n    }\n    //vect with 3 elements and v2 with 4 elements are now out of scope\n    CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 );\n  }\n}\n\nvoid MoveConstructorTest::move_traits_deq()\n{\n  {\n    MovableStruct::reset();\n    {\n      deque<MovableStruct> deq;\n      deq.push_back(MovableStruct());\n      deq.push_back(MovableStruct());\n      deq.push_back(MovableStruct());\n      deq.push_back(MovableStruct());\n\n      // deq contains 4 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );\n\n      // Following test violate requirements to sequiences (23.1.1 Table 67)\n      /*\n      deq.insert(deq.begin() + 2, deq.begin(), deq.end());\n      // deq contains 8 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 );\n      */\n\n      MovableStruct::reset();\n      deque<MovableStruct> d2 = deq;\n\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );\n\n      MovableStruct::reset();\n      deq.insert(deq.begin() + 2, d2.begin(), d2.end() );\n\n      // deq contains 8 elements\n      CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 2 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 2 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );\n#endif\n\n      MovableStruct::reset();\n      deq.erase(deq.begin() + 1, deq.begin() + 3 );\n\n      // deq contains 6 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 );\n#else\n      //Following check is highly deque implementation dependant so\n      //it might not always work...\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );\n#endif\n\n      MovableStruct::reset();\n      deq.erase(deq.end() - 3, deq.end() - 1);\n\n      // deq contains 4 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 );\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );\n#endif\n\n      MovableStruct::reset();\n      deq.erase(deq.begin());\n\n      // deq contains 3 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );\n#else\n      CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );\n#endif\n      CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 );\n\n      MovableStruct::reset();\n    }\n    //deq with 3 elements and d2 with 4 elements are now out of scope\n    CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 );\n  }\n}\n\nvoid MoveConstructorTest::move_traits_deq_complete()\n{\n  {\n    CompleteMovableStruct::reset();\n    {\n      deque<CompleteMovableStruct> deq;\n      deq.push_back(CompleteMovableStruct());\n      deq.push_back(CompleteMovableStruct());\n      deq.push_back(CompleteMovableStruct());\n      deq.push_back(CompleteMovableStruct());\n\n      // deq contains 4 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );\n\n      // Following test violate requirements to sequiences (23.1.1 Table 67)\n      /*\n      deq.insert(deq.begin() + 2, deq.begin(), deq.end());\n\n      // deq contains 8 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );\n      */\n\n      CompleteMovableStruct::reset();\n      deque<CompleteMovableStruct> d2 = deq;\n\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );\n\n      CompleteMovableStruct::reset();\n      deq.insert(deq.begin() + 2, d2.begin(), d2.end());\n\n      // deq contains 8 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 2 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 2 );\n#endif\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );\n\n      CompleteMovableStruct::reset();\n      deq.erase(deq.begin() + 1, deq.begin() + 3);\n\n      // deq contains 6 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 );\n#endif\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );\n\n      CompleteMovableStruct::reset();\n      deq.erase(deq.end() - 3, deq.end() - 1);\n\n      // deq contains 4 elements\n#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 );\n#else\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 );\n#endif\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );\n\n      CompleteMovableStruct::reset();\n      deq.erase(deq.begin());\n\n      // deq contains 3 elements\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 0 );\n      CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 );\n\n      CompleteMovableStruct::reset();\n    }\n    //deq with 3 elements and v2 with 4 elements are now out of scope\n    CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 );\n  }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/neq_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass NeqTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(NeqTest);\n  CPPUNIT_TEST(negate0);\n  CPPUNIT_TEST(nequal0);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void negate0();\n  void nequal0();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(NeqTest);\n\n//\n// tests implementation\n//\nvoid NeqTest::negate0()\n{\n  int input [3] = { 1, 2, 3 };\n\n  int output[3];\n  transform((int*)input, (int*)input + 3, (int*)output, negate<int>());\n\n  CPPUNIT_ASSERT(output[0]==-1);\n  CPPUNIT_ASSERT(output[1]==-2);\n  CPPUNIT_ASSERT(output[2]==-3);\n}\nvoid NeqTest::nequal0()\n{\n  int input1 [4] = { 1, 7, 2, 2 };\n  int input2 [4] = { 1, 6, 2, 3 };\n\n  int output [4];\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, not_equal_to<int>());\n\n  CPPUNIT_ASSERT(output[0]==0);\n  CPPUNIT_ASSERT(output[1]==1);\n  CPPUNIT_ASSERT(output[2]==0);\n  CPPUNIT_ASSERT(output[3]==1);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/new_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <new>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/nthelm_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass NthElemTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(NthElemTest);\n  CPPUNIT_TEST(nthelem0);\n  CPPUNIT_TEST(nthelem1);\n  CPPUNIT_TEST(nthelem2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void nthelem0();\n  void nthelem1();\n  void nthelem2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(NthElemTest);\n\n//\n// tests implementation\n//\nvoid NthElemTest::nthelem0()\n{\n  int numbers[7] = { 5, 2, 4, 1, 0, 3 ,77};\n  nth_element(numbers, numbers + 3, numbers + 6);\n\n  CPPUNIT_ASSERT(numbers[0]==1);\n  CPPUNIT_ASSERT(numbers[1]==0);\n  CPPUNIT_ASSERT(numbers[2]==2);\n  CPPUNIT_ASSERT(numbers[3]==3);\n  CPPUNIT_ASSERT(numbers[4]==4);\n  CPPUNIT_ASSERT(numbers[5]==5);\n}\nvoid NthElemTest::nthelem1()\n{\n  //6 8 5 1 7 4 1 5 2 6\n  //1 1 4 2 5 5 6 7 8 6\n  int numbers[10] = { 6, 8, 5, 1, 7, 4, 1, 5, 2, 6 };\n\n  vector <int> v1(numbers, numbers+10);\n  nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end());\n\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==4);\n  CPPUNIT_ASSERT(v1[3]==2);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==5);\n  CPPUNIT_ASSERT(v1[6]==6);\n  CPPUNIT_ASSERT(v1[7]==7);\n  CPPUNIT_ASSERT(v1[8]==8);\n  CPPUNIT_ASSERT(v1[9]==6);\n}\nvoid NthElemTest::nthelem2()\n{\n  //4 5 4 2 1 7 4 3 1 6\n  //6 7 4 4 5 4 3 2 1 1\n\n  int numbers[10] = { 4, 5, 4, 2, 1, 7, 4, 3, 1, 6 };\n  vector <int> v1(numbers, numbers+10);\n  nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end(), greater<int>());\n\n  CPPUNIT_ASSERT(v1[0]==6);\n  CPPUNIT_ASSERT(v1[1]==7);\n  CPPUNIT_ASSERT(v1[2]==4);\n  CPPUNIT_ASSERT(v1[3]==4);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==4);\n  CPPUNIT_ASSERT(v1[6]==3);\n  CPPUNIT_ASSERT(v1[7]==2);\n  CPPUNIT_ASSERT(v1[8]==1);\n  CPPUNIT_ASSERT(v1[9]==1);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/num_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <sstream>\n#  include <stdexcept>\n\n#  include \"complete_digits.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nstruct ref_locale {\n  const char *name;\n  const char *decimal_point;\n  const char *thousands_sep;\n};\n\nstatic const ref_locale tested_locales[] = {\n//{  name,         decimal_point, thousands_sepy_thousands_sep},\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  { \"fr_FR\",       \",\",           \"\\xa0\"},\n  { \"ru_RU.koi8r\", \",\",           \".\"},\n  { \"en_GB\",       \".\",           \",\"},\n  { \"en_US\",       \".\",           \",\"},\n#  endif\n  { \"C\",           \".\",           \",\"},\n};\n\n//\n// tests implementation\n//\nvoid LocaleTest::_num_put_get( const locale& loc, const ref_locale* prl ) {\n  const ref_locale& rl = *prl;\n  CPPUNIT_ASSERT( has_facet<numpunct<char> >(loc) );\n  numpunct<char> const& npct = use_facet<numpunct<char> >(loc);\n  CPPUNIT_ASSERT( npct.decimal_point() == *rl.decimal_point );\n\n  float val = 1234.56f;\n  ostringstream fostr;\n  fostr.imbue(loc);\n  fostr << val;\n\n  string ref = \"1\";\n  if (!npct.grouping().empty()) {\n    ref += npct.thousands_sep();\n  }\n  ref += \"234\";\n  ref += npct.decimal_point();\n  ref += \"56\";\n  //cout << \"In \" << loc.name() << \" 1234.56 is written: \" << fostr.str() << endl;\n  CPPUNIT_ASSERT( fostr.str() == ref );\n\n  val = 12345678.9f;\n  ref = \"1\";\n  ref += npct.decimal_point();\n  ref += \"23457e+\";\n  string digits = \"7\";\n  complete_digits(digits);\n  ref += digits;\n  fostr.str(\"\");\n  fostr << val;\n  CPPUNIT_ASSERT( fostr.str() == ref );\n\n  val = 1000000000.0f;\n  fostr.str(\"\");\n  fostr << val;\n  digits = \"9\";\n  complete_digits(digits);\n  CPPUNIT_ASSERT( fostr.str() == string(\"1e+\") + digits );\n\n  val = 1234.0f;\n  ref = \"1\";\n  if (!npct.grouping().empty()) {\n    ref += npct.thousands_sep();\n  }\n  ref += \"234\";\n  fostr.str(\"\");\n  fostr << val;\n  CPPUNIT_ASSERT( fostr.str() == ref );\n\n  val = 10000001.0f;\n  fostr.str(\"\");\n  fostr << val;\n  digits = \"7\";\n  complete_digits(digits);\n  CPPUNIT_ASSERT( fostr.str() == string(\"1e+\") + digits );\n\n  if (npct.grouping().size() == 1 && npct.grouping()[0] == 3) {\n    int ival = 1234567890;\n    fostr.str(\"\");\n    fostr << ival;\n    ref = \"1\";\n    ref += npct.thousands_sep();\n    ref += \"234\";\n    ref += npct.thousands_sep();\n    ref += \"567\";\n    ref += npct.thousands_sep();\n    ref += \"890\";\n    CPPUNIT_ASSERT( fostr.str() == ref );\n  }\n\n#if defined (__BORLANDC__)\n  num_put<char> const& nput = use_facet<num_put<char> >(loc);\n  typedef numeric_limits<double> limd;\n  fostr.setf(ios_base::uppercase | ios_base::showpos);\n\n  if (limd::has_infinity) {\n    double infinity = limd::infinity();\n    fostr.str(\"\");\n    nput.put(fostr, fostr, ' ', infinity);\n    CPPUNIT_ASSERT( fostr.str() == string(\"+Inf\") );\n  }\n\n  if (limd::has_quiet_NaN) {\n    /* Ignore FPU exceptions */\n    unsigned int _float_control_word = _control87(0, 0);\n    _control87(EM_INVALID|EM_INEXACT, MCW_EM);\n    double qnan = limd::quiet_NaN();\n    /* Reset floating point control word */\n    _clear87();\n    _control87(_float_control_word, MCW_EM);\n    fostr.str(\"\");\n    nput.put(fostr, fostr, ' ', qnan);\n    CPPUNIT_ASSERT( fostr.str() == string(\"+NaN\") );\n  }\n#endif\n}\n\ntypedef void (LocaleTest::*_Test) (const locale&, const ref_locale*);\nstatic void test_supported_locale(LocaleTest& inst, _Test __test) {\n  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);\n  for (size_t i = 0; i < n; ++i) {\n    locale loc;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try\n#  endif\n    {\n      locale tmp(tested_locales[i].name);\n      loc = tmp;\n    }\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n#  endif\n    CPPUNIT_MESSAGE( loc.name().c_str() );\n    (inst.*__test)(loc, tested_locales + i);\n\n    {\n      locale tmp(locale::classic(), tested_locales[i].name, locale::numeric);\n      loc = tmp;\n    }\n    (inst.*__test)(loc, tested_locales + i);\n\n    {\n      locale tmp(locale::classic(), new numpunct_byname<char>(tested_locales[i].name));\n      loc = tmp;\n    }\n    (inst.*__test)(loc, tested_locales + i);\n  }\n}\n\nvoid LocaleTest::num_put_get()\n{ test_supported_locale(*this, &LocaleTest::_num_put_get); }\n\nvoid LocaleTest::numpunct_by_name()\n{\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#    if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new numpunct_byname<char>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new numpunct_byname<char>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_NUMERIC=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new numpunct_byname<char>(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), \"C\", locale::numeric);\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" facet.\n    locale loc(locale::classic(), \"\", locale::numeric);\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new numpunct_byname<char>(\"C\"));\n    numpunct<char> const& cfacet_byname = use_facet<numpunct<char> >(loc);\n    numpunct<char> const& cfacet = use_facet<numpunct<char> >(locale::classic());\n\n    CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );\n    CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );\n    if (!cfacet.grouping().empty())\n      CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );\n#    if !defined (STLPORT) || !defined (__GLIBC__)\n    CPPUNIT_CHECK( cfacet_byname.truename() == cfacet.truename() );\n    CPPUNIT_CHECK( cfacet_byname.falsename() == cfacet.falsename() );\n#    endif\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" locale facet.\n    locale loc(locale::classic(), new numpunct_byname<char>(\"\"));\n  }\n  catch (runtime_error const& e) {\n    CPPUNIT_MESSAGE( e.what() );\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#      if defined (STLPORT) || !defined (__GNUC__)\n  try {\n    locale loc(locale::classic(), new numpunct_byname<wchar_t>(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#      endif\n\n  try {\n    locale loc(locale::classic(), new numpunct_byname<wchar_t>(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/num_put_get_test.cpp",
    "content": "#include <limits>\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <iomanip>\n#  include <string>\n#  include <sstream>\n#  include <cstdio>\n/*\n#  include <iostream>\n#  include <ieee754.h>\n*/\n\n#  include \"complete_digits.h\"\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// TestCase class\n//\nclass NumPutGetTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(NumPutGetTest);\n#  if defined (__BORLANDC__)\n  /* Ignore FPU exceptions, set FPU precision to 64 bits */\n  unsigned int _float_control_word = _control87(0, 0);\n  _control87(PC_64|MCW_EM|IC_AFFINE, MCW_PC|MCW_EM|MCW_IC);\n#  endif\n  CPPUNIT_TEST(num_put_float);\n  CPPUNIT_TEST(num_put_integer);\n  CPPUNIT_TEST(num_get_float);\n  CPPUNIT_TEST(num_get_integer);\n  CPPUNIT_TEST(inhex);\n  CPPUNIT_TEST(pointer);\n  CPPUNIT_TEST(fix_float_long);\n  CPPUNIT_TEST(custom_numpunct);\n#  if defined (__BORLANDC__)\n  /* Reset floating point control word */\n  _clear87();\n  _control87(_float_control_word, MCW_PC|MCW_EM|MCW_IC);\n#  endif\n  CPPUNIT_TEST_SUITE_END();\n\nprivate:\n  void num_put_float();\n  void num_put_integer();\n  void num_get_float();\n  void num_get_integer();\n  void inhex();\n  void pointer();\n  void fix_float_long();\n  void custom_numpunct();\n\n  static bool check_float(float val, float ref)\n  {\n    float epsilon = numeric_limits<float>::epsilon();\n    return val <= ref + epsilon && val >= ref - epsilon;\n  }\n\n  static bool check_double(double val, double ref)\n  {\n    double epsilon = numeric_limits<double>::epsilon();\n    return val <= ref + epsilon && val >= ref - epsilon;\n  }\n\n  static string reset_stream(ostringstream &ostr)\n  {\n    string tmp = ostr.str();\n    ostr.str(\"\");\n    return tmp;\n  }\n\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  template <class F>\n  void check_get_float( F v )\n  {\n    F in_val_d = v;\n    typedef numeric_limits<F> limits;\n    {\n      stringstream str;\n\n      str << \"1E+\" << limits::max_exponent10;\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << \"-1E+\" << limits::max_exponent10;\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != -limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << \"1E\" << limits::min_exponent10;\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != F(0.0) );\n    }\n    {\n      stringstream str;\n\n      str << \"1E+\" << (limits::max_exponent10 + 1);\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d == limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << \"-1E+\" << (limits::max_exponent10 + 1);\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d == -limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << \"1E\" << (limits::min_exponent10 - 1);\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= limits::min() );\n    }\n#if !defined (__MINGW32__)\n    {\n      stringstream str;\n\n      str << limits::max();\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_CHECK( str.str() != \"inf\" );\n      CPPUNIT_CHECK( str.str() != \"-inf\" );\n      CPPUNIT_CHECK( str.str() != \"nan\" );\n      CPPUNIT_CHECK( str.str() != \"-nan\" );\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      //str.str(\"\");\n      //str << limits::max_exponent10;\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      str >> in_val_d;\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << fixed << limits::max();\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_CHECK( str.str() != \"inf\" );\n      CPPUNIT_CHECK( str.str() != \"-inf\" );\n      CPPUNIT_CHECK( str.str() != \"nan\" );\n      CPPUNIT_CHECK( str.str() != \"-nan\" );\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      //str.str(\"\");\n      //str << limits::max_exponent10;\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      str >> in_val_d;\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != limits::infinity() );\n    }\n    {\n      stringstream str;\n\n      str << scientific << setprecision(50) << limits::max();\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_CHECK( str.str() != \"inf\" );\n      CPPUNIT_CHECK( str.str() != \"-inf\" );\n      CPPUNIT_CHECK( str.str() != \"nan\" );\n      CPPUNIT_CHECK( str.str() != \"-nan\" );\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      //str.str(\"\");\n      //str << limits::max_exponent10;\n      //CPPUNIT_MESSAGE( str.str().c_str() );\n\n      str >> in_val_d;\n\n      CPPUNIT_ASSERT(!str.fail());\n      CPPUNIT_ASSERT(str.eof());\n      CPPUNIT_CHECK( in_val_d == in_val_d );\n      CPPUNIT_CHECK( in_val_d != limits::infinity() );\n    }\n#endif\n    {\n      stringstream str;\n\n      str << limits::infinity();\n\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == \"inf\" );\n    }\n    {\n      stringstream str;\n\n      str << -limits::infinity();\n\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == \"-inf\" );\n    }\n    {\n      stringstream str;\n\n      str << limits::quiet_NaN();\n\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( !limits::has_quiet_NaN || str.str() == \"nan\" );\n    }\n    {\n      stringstream str;\n\n      str << \"0.\" << string(limits::max_exponent10, '0') << \"1e\" << (limits::max_exponent10 + 1);\n      CPPUNIT_ASSERT( !str.fail() );\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( str.eof() );\n      CPPUNIT_CHECK( in_val_d == 1 );\n    }\n    {\n      stringstream str;\n\n      str << \"1\" << string(-(limits::min_exponent10 - 1), '0') << \"e\" << (limits::min_exponent10 - 1);\n      CPPUNIT_ASSERT( !str.fail() );\n\n      str >> in_val_d;\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( str.eof() );\n      CPPUNIT_CHECK( in_val_d == 1 );\n    }\n#  if defined (_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x530)\n    // The following tests are showing that simply changing stream\n    // precision lead to different result. Do not seems to be a real\n    // problem, simply rounding approximation but additional study should\n    // be done after 5.2 release.\n    {\n      stringstream str;\n      str << setprecision(limits::digits10 + 2) << limits::max();\n\n      CPPUNIT_MESSAGE(str.str().c_str());\n      CPPUNIT_ASSERT( !str.fail() );\n\n      F val;\n      str >> val;\n\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( limits::infinity() > val );\n    }\n    {\n      stringstream str;\n      str << setprecision(limits::digits10 + 1) << limits::max();\n\n      CPPUNIT_MESSAGE(str.str().c_str());\n      CPPUNIT_ASSERT( !str.fail() );\n\n      F val;\n      str >> val;\n\n      CPPUNIT_ASSERT( !str.fail() );\n      CPPUNIT_ASSERT( limits::infinity() > val );\n    }\n#  endif\n  }\n#else\n#  define __check_get_float( F ) \\\n  void check_get_float( F v ) \\\n  { \\\n    F in_val_d = v; \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"1E+\" << numeric_limits<F>::max_exponent10; \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d != numeric_limits<F>::infinity() ); \\\n    } \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"-1E+\" << numeric_limits<F>::max_exponent10; \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d != -numeric_limits<F>::infinity() ); \\\n    } \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"1E\" << numeric_limits<F>::min_exponent10; \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d != F(0.0) ); \\\n    } \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"1E+\" << (numeric_limits<F>::max_exponent10 + 1); \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d == numeric_limits<F>::infinity() ); \\\n    } \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"-1E+\" << (numeric_limits<F>::max_exponent10 + 1); \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d == -numeric_limits<F>::infinity() ); \\\n    } \\\n    { \\\n      stringstream str; \\\n \\\n      str << \"1E\" << (numeric_limits<F>::min_exponent10 - 1); \\\n \\\n      str >> in_val_d; \\\n      CPPUNIT_ASSERT(!str.fail()); \\\n      CPPUNIT_ASSERT(str.eof()); \\\n      CPPUNIT_CHECK( in_val_d == in_val_d ); \\\n      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= numeric_limits<F>::min() ); \\\n    } \\\n  }\n\n  __check_get_float( float )\n  __check_get_float( double )\n#  if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n  __check_get_float( long double )\n#  endif\n#  undef __check_get_float\n#endif // _STLP_NO_MEMBER_TEMPLATES\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(NumPutGetTest);\n\n#if defined (_MSC_VER)\n#  pragma warning (disable : 4056)\n#  pragma warning (disable : 4756)\n#endif\n\n//\n// tests implementation\n//\nvoid NumPutGetTest::num_put_float()\n{\n  {\n    string output, digits;\n\n    {\n      ostringstream ostr;\n      ostr << 1.23457e+17f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      digits = \"17\";\n      complete_digits(digits);\n      CPPUNIT_CHECK(output == string(\"1.23457e+\") + digits );\n    }\n    \n    {\n      ostringstream ostr;\n      ostr << setprecision(200) << 1.23457e+17f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK( output.size() < 200 );\n    }\n    \n    {\n      ostringstream ostr;\n      ostr << setprecision(200) << numeric_limits<float>::min();\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK( output.size() < 200 );\n    }\n    \n    {\n      ostringstream ostr;\n      ostr << fixed << 1.23457e+17f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output.size() == 25);\n      CPPUNIT_CHECK(output.substr(0, 5) == \"12345\");\n      CPPUNIT_CHECK(output.substr(18) == \".000000\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << 1.23457e+17f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output.size() == 26);\n      CPPUNIT_CHECK(output.substr(0, 6) == \"+12345\");\n      CPPUNIT_CHECK(output.substr(19) == \".000000\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(100) << 1.23457e+17f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output.size() == 120);\n      CPPUNIT_CHECK(output.substr(0, 6) == \"+12345\");\n      CPPUNIT_CHECK(output.substr(19) == \".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" );\n    }\n\n    {\n      ostringstream ostr;\n      ostr << scientific << setprecision(8) << 0.12345678f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      digits = \"1\";\n      complete_digits(digits);\n      CPPUNIT_CHECK(output == string(\"1.23456780e-\") + digits );\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output == \"000000000000000000000.12345678\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output == \"0000000000000000000+0.12345678\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(8) << setw(30) << left << setfill('0') << 0.12345678f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output == \"+0.123456780000000000000000000\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(8) << setw(30) << internal << setfill('0') << 0.12345678f;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output == \"+00000000000000000000.12345678\");\n    }\n\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(100) << 1.234567e+17;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output.size() == 120);\n      CPPUNIT_CHECK(output.substr(0, 6) == \"+12345\");\n      CPPUNIT_CHECK(output.substr(19) == \".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" );\n    }\n\n#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n    {\n      ostringstream ostr;\n      ostr << fixed << showpos << setprecision(100) << 1.234567e+17l;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK(output.size() == 120);\n      CPPUNIT_CHECK(output.substr(0, 6) == \"+12345\");\n      CPPUNIT_CHECK(output.substr(19) == \".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" );\n    }\n#endif\n\n    {\n      ostringstream ostr;\n      ostr << scientific << setprecision(50) << 0.0;\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      CPPUNIT_CHECK( output == \"0.00000000000000000000000000000000000000000000000000e+00\" );\n    }\n    {\n      ostringstream ostr;\n      ostr << fixed << setprecision(100) << numeric_limits<float>::max();\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      //CPPUNIT_MESSAGE( output.c_str() );\n    }\n\n    {\n      ostringstream ostr;\n      ostr << setprecision(100) << numeric_limits<double>::max();\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      //CPPUNIT_MESSAGE( output.c_str() );\n    }\n\n#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n    {\n      ostringstream ostr;\n      ostr << setprecision(100) << numeric_limits<long double>::max();\n      CPPUNIT_ASSERT(ostr.good());\n      output = reset_stream(ostr);\n      //CPPUNIT_MESSAGE( output.c_str() );\n    }\n#endif\n\n    //{\n    //  ostringstream ostr;\n    //  ostr << setprecision(-numeric_limits<float>::min_exponent10 + numeric_limits<float>::digits10 + 9) << numeric_limits<float>::min();\n    //  CPPUNIT_ASSERT(ostr.good());\n    //  output = reset_stream(ostr);\n    //  //CPPUNIT_MESSAGE( output.c_str() );\n    //}\n\n    //{\n    //  ostringstream ostr;\n    //  ostr << setprecision(-numeric_limits<double>::min_exponent10 + numeric_limits<double>::digits10) << numeric_limits<double>::min();\n    //  CPPUNIT_ASSERT(ostr.good());\n    //  output = reset_stream(ostr);\n    //  //CPPUNIT_MESSAGE( output.c_str() );\n    //}\n\n//#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n//    {\n//      ostringstream ostr;\n//      ostr << setprecision(-numeric_limits<long double>::min_exponent10 + numeric_limits<long double>::digits10) << numeric_limits<long double>::min();\n//      CPPUNIT_ASSERT(ostr.good());\n//      output = reset_stream(ostr);\n//      CPPUNIT_MESSAGE( output.c_str() );\n//    }\n//#endif\n  }\n\n  {\n    ostringstream str;\n\n    str.setf(ios::fixed, ios::floatfield);\n    str << 1.0e+5;\n    // cerr << str.str() << endl;\n    CPPUNIT_CHECK( str.str() == \"100000.000000\" );\n\n    reset_stream(str);\n    str.precision(0);\n    str << 1.0e+5;\n    CPPUNIT_CHECK( str.str() == \"100000\" );\n\n    reset_stream(str);\n    str.precision(4);\n    str << 1.0e+5;\n    CPPUNIT_CHECK( str.str() == \"100000.0000\" );\n\n    reset_stream(str);\n    str.precision(0);\n    str << 1.0e+83;\n    CPPUNIT_CHECK( str.str().size() == 84 );\n    //printf(\"\\nC result: %.0f\\n\", 1.0e+83);\n    //CPPUNIT_MESSAGE( str.str().c_str() );\n    //CPPUNIT_CHECK( str.str() == \"100000000000000000000000000000000000000000000000000000000000000000000000000000000000\" );\n\n    // cerr.setf(ios::fixed, ios::floatfield);\n    // cerr << DBL_MAX << endl;\n    // cerr << 1.0e+37 << endl;\n  }\n}\n\n#define CHECK_COMPLETE(type, val, base, showbase, showpos, casing, width, adjust, expected) \\\n{ \\\n  type tmp = val; \\\n  ostringstream ostr; \\\n  ostr << base << showbase << showpos << casing << setw(width) << adjust << tmp; \\\n  CPPUNIT_CHECK( ostr.str() == expected ); \\\n}\n\n#define CHECK(type, val, base, expected) \\\n  CHECK_COMPLETE(type, val, base, noshowbase, noshowpos, nouppercase, 0, right, expected)\n\nvoid NumPutGetTest::num_put_integer()\n{\n  //octal outputs\n  {\n    CHECK(short, 0, oct, \"0\")\n    CHECK(short, 1, oct, \"1\")\n    CHECK(short, 12345, oct, \"30071\")\n    if (sizeof(short) == 2) {\n      CHECK(short, -1, oct, \"177777\")\n      CHECK(short, -12345, oct, \"147707\")\n    }\n\n    CHECK(unsigned short, 0, oct, \"0\")\n    CHECK(unsigned short, 12345, oct, \"30071\")\n\n    CHECK(int, 0, oct, \"0\")\n    CHECK(int, 12345678, oct, \"57060516\")\n    if (sizeof(int) == 4) {\n      CHECK(int, -1, oct, \"37777777777\")\n      CHECK(int, -12345678, oct, \"37720717262\")\n    }\n\n    CHECK(unsigned int, 0, oct, \"0\")\n    CHECK(unsigned int, 12345678, oct, \"57060516\")\n\n    CHECK(long, 0, oct, \"0\")\n    CHECK(long, 12345678, oct, \"57060516\")\n    if (sizeof(long) == 4) {\n      CHECK(long, -1, oct, \"37777777777\")\n      CHECK(long, -12345678, oct, \"37720717262\")\n    }\n\n    CHECK(unsigned long, 0, oct, \"0\")\n    CHECK(unsigned long, 12345678, oct, \"57060516\")\n\n#if defined (STLPORT) && defined (_STLP_LONG_LONG)\n    CHECK(_STLP_LONG_LONG, 0, oct, \"0\")\n    CHECK(_STLP_LONG_LONG, 12345678, oct, \"57060516\")\n    if (sizeof(_STLP_LONG_LONG) == 8) {\n      CHECK(_STLP_LONG_LONG, -1, oct, \"1777777777777777777777\")\n      CHECK(_STLP_LONG_LONG, -12345678, oct, \"1777777777777720717262\")\n    }\n\n    CHECK(unsigned _STLP_LONG_LONG, 0, oct, \"0\")\n    CHECK(unsigned _STLP_LONG_LONG, 12345678, oct, \"57060516\")\n#endif\n\n    //Even with showbase, 0 value gives \"0\" (see printf documentation)\n    CHECK_COMPLETE(short, 0, oct, showbase, noshowpos, nouppercase, 0, right, \"0\")\n    CHECK_COMPLETE(short, 0, oct, showbase, showpos, nouppercase, 6, right, \"     0\")\n\n    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, right, \"    01\")\n    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, left, \"01    \")\n    CHECK_COMPLETE(short, 1, oct, showbase, showpos, nouppercase, 6, internal, \"    01\")\n  }\n\n  //decimal outputs\n  {\n    CHECK(short, 0, dec, \"0\")\n    CHECK(short, -1, dec, \"-1\")\n    CHECK(short, 12345, dec, \"12345\")\n    CHECK(short, -12345, dec, \"-12345\")\n\n    CHECK(unsigned short, 0, dec, \"0\")\n    CHECK(unsigned short, 12345, dec, \"12345\")\n\n    CHECK(int, 0, dec, \"0\")\n    CHECK(int, -1, dec, \"-1\")\n    CHECK(int, 12345678, dec, \"12345678\")\n    CHECK(int, -12345678, dec, \"-12345678\")\n\n    CHECK(unsigned int, 0, dec, \"0\")\n    CHECK(unsigned int, 12345678, dec, \"12345678\")\n\n    CHECK(long, 0, dec, \"0\")\n    CHECK(long, -1, dec, \"-1\")\n    CHECK(long, 12345678, dec, \"12345678\")\n    CHECK(long, -12345678, dec, \"-12345678\")\n\n    CHECK(unsigned long, 0, dec, \"0\")\n    CHECK(unsigned long, 12345678, dec, \"12345678\")\n#if defined (STLPORT) && defined (_STLP_LONG_LONG)\n    CHECK(_STLP_LONG_LONG, 0, dec, \"0\")\n    CHECK(_STLP_LONG_LONG, -1, dec, \"-1\")\n    CHECK(_STLP_LONG_LONG, 12345678, dec, \"12345678\")\n    CHECK(_STLP_LONG_LONG, -12345678, dec, \"-12345678\")\n\n    CHECK(unsigned _STLP_LONG_LONG, 0, dec, \"0\")\n    CHECK(unsigned _STLP_LONG_LONG, 12345678, dec, \"12345678\")\n#endif\n\n    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 0, right, \"+0\")\n    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 6, right, \"    +0\")\n    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, right, \"    +1\")\n    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, left, \"+1    \")\n    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, internal, \"+    1\")\n  }\n\n  //hexadecimal outputs\n  {\n    CHECK(short, 0, hex, \"0\")\n    CHECK(short, 12345, hex, \"3039\")\n    if (sizeof(short) == 2) {\n      CHECK(short, -1, hex, \"ffff\")\n      CHECK(short, -12345, hex, \"cfc7\")\n    }\n\n    CHECK(unsigned short, 0, hex, \"0\")\n    CHECK(unsigned short, 12345, hex, \"3039\")\n\n    CHECK(int, 0, hex, \"0\")\n    CHECK(int, 12345678, hex, \"bc614e\")\n    if (sizeof(int) == 4) {\n      CHECK(int, -1, hex, \"ffffffff\")\n      CHECK(int, -12345678, hex, \"ff439eb2\")\n    }\n\n    CHECK(unsigned int, 0, hex, \"0\")\n    CHECK(unsigned int, 12345678, hex, \"bc614e\")\n\n    CHECK(long, 0, hex, \"0\")\n    CHECK(long, 12345678, hex, \"bc614e\")\n    if (sizeof(long) == 4) {\n      CHECK(long, -1, hex, \"ffffffff\")\n      CHECK(long, -12345678, hex, \"ff439eb2\")\n    }\n\n    CHECK(unsigned long, 0, hex, \"0\")\n    CHECK(unsigned long, 12345678, hex, \"bc614e\")\n#if defined (STLPORT) && defined (_STLP_LONG_LONG)\n    CHECK(_STLP_LONG_LONG, 0, hex, \"0\")\n    CHECK(_STLP_LONG_LONG, 12345678, hex, \"bc614e\")\n    if (sizeof(_STLP_LONG_LONG) == 8) {\n      CHECK(_STLP_LONG_LONG, -1, hex, \"ffffffffffffffff\")\n      CHECK(_STLP_LONG_LONG, -12345678, hex, \"ffffffffff439eb2\")\n    }\n\n    CHECK(unsigned _STLP_LONG_LONG, 0, hex, \"0\")\n    CHECK(unsigned _STLP_LONG_LONG, 12345678, hex, \"bc614e\")\n#endif\n\n    //Even with showbase, 0 value gives \"0\" output (see printf documentation)\n    CHECK_COMPLETE(short, 0, hex, showbase, showpos, nouppercase, 0, right, \"0\")\n    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, right, \"     0\")\n    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, internal, \"     0\")\n\n    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, right, \"   0x1\")\n    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, left, \"0x1   \")\n    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, internal, \"0x   1\")\n    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, uppercase, 6, left, \"0X1   \")\n    CHECK_COMPLETE(short, 1, hex, showbase, showpos, uppercase, 6, internal, \"0X   1\")\n  }\n}\n\nvoid NumPutGetTest::num_get_float()\n{\n  float in_val;\n\n  istringstream istr;\n\n  istr.str(\"1.2345\");\n  istr >> in_val;\n  CPPUNIT_ASSERT(!istr.fail());\n  CPPUNIT_ASSERT(istr.eof());\n  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));\n  istr.clear();\n\n  istr.str(\"-1.2345\");\n  istr >> in_val;\n  CPPUNIT_ASSERT(!istr.fail());\n  CPPUNIT_ASSERT(istr.eof());\n  CPPUNIT_ASSERT(check_float(in_val, -1.2345f));\n  istr.clear();\n\n  istr.str(\"+1.2345\");\n  istr >> in_val;\n  CPPUNIT_ASSERT(!istr.fail());\n  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));\n  istr.clear();\n\n  istr.str(\"000000000000001.234500000000\");\n  istr >> in_val;\n  CPPUNIT_ASSERT(!istr.fail());\n  CPPUNIT_ASSERT(istr.eof());\n  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));\n  istr.clear();\n\n  istr.str(\"1.2345e+04\");\n  istr >> in_val;\n  CPPUNIT_ASSERT(!istr.fail());\n  CPPUNIT_ASSERT(istr.eof());\n  CPPUNIT_ASSERT(check_float(in_val, 12345.0f));\n  istr.clear();\n\n  CPPUNIT_MESSAGE( \"float\" );\n  check_get_float( 0.0F );\n  CPPUNIT_MESSAGE( \"double\" );\n  check_get_float( 0.0 );\n#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n  CPPUNIT_MESSAGE( \"long double\" );\n  check_get_float( 0.0L );\n#endif\n  {\n    stringstream str;\n\n    str << \"1e\" << numeric_limits<double>::max_exponent10;\n    CPPUNIT_ASSERT(!str.fail());\n\n    float val;\n    str >> val;\n    CPPUNIT_ASSERT(!str.fail());\n    CPPUNIT_ASSERT(str.eof());\n    CPPUNIT_ASSERT( numeric_limits<double>::max_exponent10 <= numeric_limits<float>::max_exponent10 ||\n                    val == numeric_limits<float>::infinity() );\n  }\n  {\n    stringstream str;\n\n    str << \"1e\" << numeric_limits<double>::min_exponent10;\n    CPPUNIT_ASSERT(!str.fail());\n\n    float val;\n    str >> val;\n    CPPUNIT_ASSERT(!str.fail());\n    CPPUNIT_ASSERT(str.eof());\n    CPPUNIT_ASSERT( numeric_limits<double>::min_exponent10 >= numeric_limits<float>::min_exponent10 ||\n                    val == 0.0f );\n  }\n#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n  {\n    stringstream str;\n\n    str << \"1e\" << numeric_limits<long double>::max_exponent10;\n    CPPUNIT_ASSERT(!str.fail());\n\n    double val;\n    str >> val;\n    CPPUNIT_ASSERT(!str.fail());\n    CPPUNIT_ASSERT(str.eof());\n    CPPUNIT_ASSERT( numeric_limits<long double>::max_exponent10 <= numeric_limits<double>::max_exponent10 ||\n                    val == numeric_limits<double>::infinity() );\n  }\n  {\n    stringstream str;\n\n    str << \"1e\" << numeric_limits<long double>::min_exponent10;\n    CPPUNIT_ASSERT(!str.fail());\n\n    double val;\n    str >> val;\n    CPPUNIT_ASSERT(!str.fail());\n    CPPUNIT_ASSERT(str.eof());\n    CPPUNIT_ASSERT( numeric_limits<long double>::min_exponent10 >= numeric_limits<double>::min_exponent10 ||\n                    val == 0.0 );\n  }\n  {\n    const char* p = \"2.718281828459045235360287471352662497757247093e0\";\n    std::stringstream s;\n    s << p;\n    long double x;\n    s >> x;\n    CPPUNIT_ASSERT( x > 2.70l && x < 2.72l );\n  }\n#endif\n}\n\nvoid NumPutGetTest::num_get_integer()\n{\n  //octal input\n  {\n    istringstream istr;\n    istr.str(\"30071\");\n    short val;\n    istr >> oct >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 12345 );\n    istr.clear();\n\n    if (sizeof(short) == 2) {\n      istr.str(\"177777\");\n      istr >> oct >> val;\n      CPPUNIT_ASSERT( !istr.fail() );\n      CPPUNIT_ASSERT( istr.eof() );\n      CPPUNIT_ASSERT( val == -1 );\n      istr.clear();\n    }\n  }\n\n  //decimal input\n  {\n    istringstream istr;\n    istr.str(\"10000\");\n    short val = -1;\n    istr >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 10000 );\n    istr.clear();\n\n    istr.str(\"+10000\");\n    val = -1;\n    istr >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 10000 );\n    istr.clear();\n\n    if (sizeof(short) == 2) {\n      val = -1;\n      istr.str(\"10000000\");\n      istr >> val;\n      CPPUNIT_ASSERT( istr.fail() );\n      CPPUNIT_ASSERT( istr.eof() );\n      CPPUNIT_ASSERT( val == -1 );\n      istr.clear();\n    }\n\n    val = -1;\n    istr.str(\"0x0\");\n    istr >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( !istr.eof() );\n    CPPUNIT_ASSERT( val == 0 );\n    istr.clear();\n\n    val = -1;\n    istr.str(\"000001\");\n    istr >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 1 );\n    istr.clear();\n  }\n\n  //hexadecimal input\n  {\n    istringstream istr;\n    istr.str(\"3039\");\n    short val = -1;\n    istr >> hex >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 12345 );\n    istr.clear();\n\n    istr.str(\"x3039\");\n    val = -1;\n    istr >> hex >> val;\n    CPPUNIT_ASSERT( istr.fail() );\n    CPPUNIT_ASSERT( !istr.eof() );\n    CPPUNIT_ASSERT( val == -1 );\n    istr.clear();\n\n    istr.str(\"03039\");\n    val = -1;\n    istr >> hex >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 12345 );\n    istr.clear();\n\n    istr.str(\"0x3039\");\n    istr >> hex >> val;\n    CPPUNIT_ASSERT( !istr.fail() );\n    CPPUNIT_ASSERT( istr.eof() );\n    CPPUNIT_ASSERT( val == 12345 );\n    istr.clear();\n\n    if (sizeof(short) == 2) {\n      val = -1;\n      istr.str(\"cfc7\");\n      istr >> hex >> val;\n      CPPUNIT_ASSERT( !istr.fail() );\n      CPPUNIT_ASSERT( istr.eof() );\n      CPPUNIT_ASSERT( val == -12345 );\n      istr.clear();\n    }\n  }\n}\n\nvoid NumPutGetTest::inhex()\n{\n  {\n    ostringstream s;\n    s << hex << 0;\n    CPPUNIT_CHECK( s.str() == \"0\" );\n  }\n  {\n    ostringstream s;\n    s << hex << 0xff;\n    CPPUNIT_CHECK( s.str() == \"ff\" );\n  }\n  {\n    ostringstream s;\n    s << hex << setw( 4 ) << 0xff;\n    CPPUNIT_CHECK( s.str() == \"  ff\" );\n  }\n  {\n    ostringstream s;\n    s << hex << setw( 4 ) << 0;\n    CPPUNIT_CHECK( s.str() == \"   0\" );\n  }\n  {\n    ostringstream s;\n    s << hex << showbase << 0;\n    CPPUNIT_CHECK( s.str() == \"0\" );\n  }\n  {\n    ostringstream s;\n    s << hex << showbase << 0xff;\n    CPPUNIT_CHECK( s.str() == \"0xff\" );\n  }\n  {\n    ostringstream s;\n    s << hex << showbase << setw( 4 ) << 0xff;\n    CPPUNIT_CHECK( s.str() == \"0xff\" );\n  }\n  { // special case for regression (partially duplicate CHECK_COMPLETE above):\n    ostringstream s;\n    s.setf( ios_base::internal, ios_base::adjustfield );\n    s << hex << showbase << setw(8+2) << 0;\n    CPPUNIT_CHECK( s.str() == \"         0\" );\n  }\n}\n\nvoid NumPutGetTest::pointer()\n{\n  // Problem with printing pointer to null\n\n  /*\n   * Really C's formatting not help here, due to:\n   *\n   * p  The argument shall be a pointer to void. The value of\n   *    the pointer is converted to a sequence of printable characters,\n   *    in an implementation-defined manner.\n   */\n  {\n    /*\n    char buf[128];\n    void *p = (void *)0xff00;\n    sprintf( buf, \"%p\", p );\n    // cerr << buf << endl;\n    // Hmmm, I see 0xff00 on box with 32-bits address; pointer like 'unsigned hex'? \n    if ( sizeof( p ) == 2 ) {\n      CPPUNIT_ASSERT( strcmp( buf, \"0xff00\" ) == 0 );\n    } else if ( sizeof( p ) == 4 ) {\n      CPPUNIT_ASSERT( strcmp( buf, \"0x0000ff00\" ) == 0 );\n    } else if ( sizeof( p ) == 8 ) {\n      CPPUNIT_ASSERT( strcmp( buf, \"0x000000000000ff00\" ) == 0 );\n    } else {\n      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );\n    }\n    */\n  }\n  {\n    /*\n    char buf[128];\n    void *p = 0;\n    */\n    // sprintf( buf, \"%p\", p );\n    /* Cool. \"%p\" print '(nil)'; \"%#x\" print '0' */\n    // sprintf( buf, \"%#x\", (unsigned)p );\n    // cerr << buf << endl;\n  }\n  {\n    ostringstream s;\n    void *p = (void *)0xff00;\n    s << p;\n    CPPUNIT_ASSERT( s.good() );\n    if ( sizeof( p ) == 2 ) {\n      CPPUNIT_ASSERT( s.str() == \"0xff00\" );\n    } else if ( sizeof( p ) == 4 ) {\n      CPPUNIT_ASSERT( s.str() == \"0x0000ff00\" ); // this pass\n    } else if ( sizeof( p ) == 8 ) {\n      CPPUNIT_ASSERT( s.str() == \"0x000000000000ff00\" );\n    } else {\n      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );\n    }\n  }\n  {\n    ostringstream s;\n    void *p = 0;\n    s << p;\n    CPPUNIT_ASSERT( s.good() );\n    if ( sizeof( p ) == 2 ) {\n      CPPUNIT_ASSERT( s.str() == \"0x0000\" );\n    } else if ( sizeof( p ) == 4 ) {\n      CPPUNIT_ASSERT( s.str() == \"0x00000000\" ); // but this will fail, if follow %p\n    } else if ( sizeof( p ) == 8 ) {\n      CPPUNIT_ASSERT( s.str() == \"0x0000000000000000\" );\n    } else {\n      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );\n    }\n  }\n}\n\nvoid NumPutGetTest::fix_float_long()\n{\n  ostringstream str;\n\n  str.setf(ios::fixed, ios::floatfield);\n  str << 1.0e+5;\n  CPPUNIT_CHECK( str.str() == \"100000.000000\" );\n\n  reset_stream(str);\n  str.precision(0);\n  str << 1.0e+5;\n  CPPUNIT_CHECK( str.str() == \"100000\" );\n\n  reset_stream(str);\n  str.precision(4);\n  str << 1.0e+5;\n  CPPUNIT_CHECK( str.str() == \"100000.0000\" );\n\n  reset_stream(str);\n  str.precision(0);\n  str << 1.0e+83;\n  {\n    istringstream istr( str.str() );\n    double f;\n    istr >> f;\n    CPPUNIT_CHECK( !istr.fail() );\n    if ( int(numeric_limits<double>::digits10) < 83 ) {\n      double delta = 1.0;\n      for ( int ee = 83 - int(numeric_limits<double>::digits10); ee > 0; --ee ) {\n        delta *= 10.0;\n      }\n      // we may loss some digits here, but not more than mantissa:\n      CPPUNIT_CHECK( (f > (1.0e+83 - delta)) && (f < (1.0e+83 + delta)) );\n    } else {\n      CPPUNIT_CHECK( check_double(f, 1.0e+83) );\n    }\n  }\n\n#if 0 // #ifndef _STLP_NO_LONG_DOUBLE\n  reset_stream(str);\n  str.precision(0);\n  str << 1.0e+83l;\n  {\n    istringstream istr( str.str() );\n    long double f;\n    istr >> f;\n    CPPUNIT_CHECK( !istr.fail() );\n    if ( int(numeric_limits<long double>::digits10) < 83 ) {\n      long double delta = 1.0l;\n      for ( int ee = 83 - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {\n        delta *= 10.0l;\n      }\n      // we may loss some digits here, but not more than mantissa:\n      cerr << \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" << endl;\n      cerr << str.str() << endl;\n      cerr << delta << endl;\n      cerr << f << endl;\n      CPPUNIT_CHECK( (f > (1.0e+83l - delta)) && (f < (1.0e+83l + delta)) );\n    } else {\n      CPPUNIT_CHECK( check_double(f, 1.0e+83l) );\n    }\n  }\n#endif\n\n  reset_stream(str);\n  str.precision(0);\n  str << numeric_limits<double>::max();\n  {\n    istringstream istr( str.str() );\n    double f;\n    istr >> f;\n    CPPUNIT_CHECK( !istr.fail() );\n    if ( int(numeric_limits<double>::digits10) < int(numeric_limits<double>::max_exponent10) ) {\n      double delta = 9.0;\n      for ( int ee = int(numeric_limits<double>::max_exponent10) - int(numeric_limits<double>::digits10); ee > 0; --ee ) {\n        delta *= 10.0;\n      }\n      // we may loss some digits here, but not more than mantissa:\n      CPPUNIT_CHECK( (f > (numeric_limits<double>::max() - delta)) );\n    }\n  }\n\n#if 0 // #ifndef _STLP_NO_LONG_DOUBLE\n  reset_stream(str);\n  str.precision(0);\n  str << numeric_limits<long double>::max();\n  {\n    istringstream istr( str.str() );\n    long double f;\n    istr >> f;\n    CPPUNIT_CHECK( !istr.fail() );\n    if ( int(numeric_limits<long double>::digits10) < int(numeric_limits<long double>::max_exponent10) ) {\n      long double delta = 1.0l;\n      for ( int ee = int(numeric_limits<long double>::max_exponent10) - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {\n        delta *= 10.0l;\n      }\n      // we may loss some digits here, but not more than mantissa:\n      CPPUNIT_CHECK( (f > (numeric_limits<long double>::max() - delta)) );\n    }\n  }\n#endif\n}\n\nclass CommaSepNumPunct : public numpunct<char> {\n  char do_thousands_sep() const { return ','; }\n  string do_grouping() const { return string(\"\\1\\2\\3\") + (char)CHAR_MAX; }\n};\n\n#define CHECK2(val, expected) \\\n  os.str(\"\"); os << fixed << setprecision(3) << showpos << val; \\\n  CPPUNIT_ASSERT( os.str() == expected )\n\nvoid NumPutGetTest::custom_numpunct()\n{\n    ostringstream os;\n    locale loc(os.getloc(), new CommaSepNumPunct());\n    os.imbue(loc);\n\n    CHECK2(1, \"+1\");\n    CHECK2(10, \"+1,0\");\n    CHECK2(100, \"+10,0\");\n    CHECK2(1000, \"+1,00,0\");\n\n    CHECK2(1.234, \"+1.234\");\n    CHECK2(123.456, \"+12,3.456\");\n    CHECK2(1234.567, \"+1,23,4.567\");\n    CHECK2(12345.678, \"+12,34,5.678\");\n    CHECK2(123456.789, \"+123,45,6.789\");\n    CHECK2(1234567.891, \"+1,234,56,7.891\");\n    CHECK2(123456789.123, \"+123,456,78,9.123\");\n    //CHECK2(100000000000000000000000000000.0, \"+100000000000000000000000,000,00,0.000\");\n    CHECK2(numeric_limits<double>::infinity(), \"+inf\");\n\n    CHECK2(-1.234, \"-1.234\");\n    CHECK2(-123.456, \"-12,3.456\");\n    CHECK2(-1234.567, \"-1,23,4.567\");\n    CHECK2(-12345.678, \"-12,34,5.678\");\n    CHECK2(-123456.789, \"-123,45,6.789\");\n    CHECK2(-1234567.891, \"-1,234,56,7.891\");\n    CHECK2(-123456789.123, \"-123,456,78,9.123\");\n    //CHECK2(-100000000000000000000000000000.0, \"-100000000000000000000000,000,00,0.000\");\n    CHECK2(-numeric_limits<double>::infinity(), \"-inf\");\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/numeric_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <numeric>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ostmit_test.cpp",
    "content": "#include <iterator>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#include <string>\n#include <sstream>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass OstreamIteratorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(OstreamIteratorTest);\n  CPPUNIT_TEST(ostmit0);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void ostmit0();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(OstreamIteratorTest);\n\n//\n// tests implementation\n//\nvoid OstreamIteratorTest::ostmit0()\n{\n  // not necessary, tested in copy_test\n  int array [] = { 1, 5, 2, 4 };\n\n  const char* text = \"hello\";\n\n  ostringstream os;\n\n  ostream_iterator<char> iter(os);\n  copy(text, text + 5, iter);\n  CPPUNIT_ASSERT(os.good());\n  os << ' ';\n  CPPUNIT_ASSERT(os.good());\n\n  ostream_iterator<int> iter2(os);\n  copy(array, array + 4, iter2);\n  CPPUNIT_ASSERT(os.good());\n  CPPUNIT_ASSERT(os.str() == \"hello 1524\");\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ostream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <ostream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/pair_test.cpp",
    "content": "#include <utility>\n#include <vector>\n#include <algorithm>\n#include <string>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nclass PairTest : public CPPUNIT_NS::TestCase\n{\n    CPPUNIT_TEST_SUITE(PairTest);\n    CPPUNIT_TEST(pair0);\n    CPPUNIT_TEST(init);\n    CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void pair0();\n    void init();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PairTest);\n\nvoid PairTest::pair0()\n{\n  pair<int, int> p = make_pair(1, 10);\n\n  CPPUNIT_ASSERT(p.first==1);\n  CPPUNIT_ASSERT(p.second==10);\n}\n\nvoid PairTest::init()\n{\n  pair<int, string> PAIR_ARRAY[] = { pair<int, string>(0, \"0\") };\n\n  int PAIR_ARRAY_SIZE = sizeof(PAIR_ARRAY) > 0 ? sizeof(PAIR_ARRAY) / sizeof(PAIR_ARRAY[0]) : 0;\n\n\n  for ( int i = 0; i < PAIR_ARRAY_SIZE; i++ ) {\n    CPPUNIT_CHECK( PAIR_ARRAY[i].first == 0 );\n    CPPUNIT_CHECK( PAIR_ARRAY[i].second == \"0\" );\n    PAIR_ARRAY[i].second = \"1\";\n  }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/partial_test.cpp",
    "content": "#include <numeric>\n#include <vector>\n#include <algorithm>\n#include <functional>\n\n#if defined (STLPORT) && defined (_STLP_DEBUG) && defined (_STLP_DEBUG_MODE_THROWS)\n#  define _STLP_DO_CHECK_BAD_PREDICATE\n#  include <stdexcept>\n#endif\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass PartialTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(PartialTest);\n  CPPUNIT_TEST(parsrt0);\n  CPPUNIT_TEST(parsrt1);\n  CPPUNIT_TEST(parsrt2);\n  CPPUNIT_TEST(parsrtc0);\n  CPPUNIT_TEST(parsrtc1);\n  CPPUNIT_TEST(parsrtc2);\n#if defined (_STLP_DO_CHECK_BAD_PREDICATE)\n  CPPUNIT_TEST(bad_predicate_detected);\n#endif\n  CPPUNIT_TEST(partsum0);\n  CPPUNIT_TEST(partsum1);\n  CPPUNIT_TEST(partsum2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void parsrt0();\n  void parsrt1();\n  void parsrt2();\n  void parsrtc0();\n  void parsrtc1();\n  void parsrtc2();\n  void partsum0();\n  void partsum1();\n  void partsum2();\n  void bad_predicate_detected();\n\n  static bool str_compare(const char* a_, const char* b_)\n  {\n    return strcmp(a_, b_) < 0 ? 1 : 0;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PartialTest);\n\n//\n// tests implementation\n//\nvoid PartialTest::parsrt0()\n{\n  int numbers[6] = { 5, 2, 4, 3, 1, 6 };\n\n  partial_sort((int*)numbers, (int*)numbers + 3, (int*)numbers + 6);\n\n  // 1 2 3 5 4 6\n  CPPUNIT_ASSERT(numbers[0]==1);\n  CPPUNIT_ASSERT(numbers[1]==2);\n  CPPUNIT_ASSERT(numbers[2]==3);\n  CPPUNIT_ASSERT(numbers[3]==5);\n  CPPUNIT_ASSERT(numbers[4]==4);\n  CPPUNIT_ASSERT(numbers[5]==6);\n}\n\nvoid PartialTest::parsrt1()\n{\n  // 8 8 5 3 7 6 5 3 2 4\n  // 2 3 3 4 5 8 8 7 6 5\n  int numbers[10] ={ 8, 8, 5, 3, 7, 6, 5, 3, 2, 4 };\n\n  vector <int> v1(numbers, numbers+10);\n  partial_sort(v1.begin(), v1.begin() + v1.size() / 2, v1.end());\n\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==3);\n  CPPUNIT_ASSERT(v1[2]==3);\n  CPPUNIT_ASSERT(v1[3]==4);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==8);\n  CPPUNIT_ASSERT(v1[6]==8);\n  CPPUNIT_ASSERT(v1[7]==7);\n  CPPUNIT_ASSERT(v1[8]==6);\n  CPPUNIT_ASSERT(v1[9]==5);\n}\n\nvoid PartialTest::parsrt2()\n{\n  char const* names[] = { \"aa\", \"ff\", \"dd\", \"ee\", \"cc\", \"bb\" };\n\n  const unsigned nameSize = sizeof(names) / sizeof(names[0]);\n  vector <char const*> v1(nameSize);\n  for(size_t i = 0; i < v1.size(); i++)\n    v1[i] = names[i];\n\n  partial_sort(v1.begin(), v1.begin() + nameSize / 2, v1.end(), str_compare);\n\n  // aa bb cc ff ee dd\n  CPPUNIT_ASSERT( strcmp(v1[0], \"aa\") == 0 );\n  CPPUNIT_ASSERT( v1[0] == names[0] );\n  CPPUNIT_ASSERT( strcmp(v1[1], \"bb\") == 0 );\n  CPPUNIT_ASSERT( v1[1] == names[5] );\n  CPPUNIT_ASSERT( strcmp(v1[2], \"cc\") == 0 );\n  CPPUNIT_ASSERT( v1[2] == names[4] );\n  CPPUNIT_ASSERT( strcmp(v1[3], \"ff\") == 0 );\n  CPPUNIT_ASSERT( v1[3] == names[1] );\n  CPPUNIT_ASSERT( strcmp(v1[4], \"ee\") == 0 );\n  CPPUNIT_ASSERT( v1[4] == names[3] );\n  CPPUNIT_ASSERT( strcmp(v1[5], \"dd\") == 0 );\n  CPPUNIT_ASSERT( v1[5] == names[2] );\n}\n\nvoid PartialTest::parsrtc0()\n{\n  int numbers[6] = { 5, 2, 4, 3, 1, 6 };\n\n  int result[3];\n  partial_sort_copy((int*)numbers, (int*)numbers + 6, (int*)result, (int*)result + 3);\n  //1 2 3\n  CPPUNIT_ASSERT(result[0]==1);\n  CPPUNIT_ASSERT(result[1]==2);\n  CPPUNIT_ASSERT(result[2]==3);\n}\n\nvoid PartialTest::parsrtc1()\n{\n  int numbers[10] ={ 3, 0, 4, 3, 2, 8, 2, 7, 7, 5 };\n\n  //3 0 4 3 2 8 2 7 7 5\n  //0 2 2 3 3\n\n  vector <int> v1(numbers, numbers+10);\n  vector <int> result(5);\n\n  partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end());\n  CPPUNIT_ASSERT(result[0]==0);\n  CPPUNIT_ASSERT(result[1]==2);\n  CPPUNIT_ASSERT(result[2]==2);\n  CPPUNIT_ASSERT(result[3]==3);\n  CPPUNIT_ASSERT(result[4]==3);\n}\n\nvoid PartialTest::parsrtc2()\n{\n  char const* names[] = { \"aa\", \"ff\", \"dd\", \"ee\", \"cc\", \"bb\" };\n\n  const unsigned nameSize = sizeof(names) / sizeof(names[0]);\n  vector <char const*> v1(nameSize);\n  for(size_t i = 0; i < v1.size(); i++)\n    v1[i] = names[i];\n  vector <char const*> result(3);\n  partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end(), str_compare);\n\n  // aa bb cc\n  CPPUNIT_ASSERT( strcmp( result[0], \"aa\" ) == 0 );\n  CPPUNIT_ASSERT( result[0] == names[0] );\n  CPPUNIT_ASSERT( strcmp( result[1], \"bb\" ) == 0 );\n  CPPUNIT_ASSERT( result[1] == names[5] );\n  CPPUNIT_ASSERT( strcmp( result[2], \"cc\" ) == 0 );\n  CPPUNIT_ASSERT( result[2] == names[4] );\n}\n\n#if defined (_STLP_DO_CHECK_BAD_PREDICATE)\nvoid PartialTest::bad_predicate_detected()\n{\n  int numbers[] = { 0, 0, 1, 0, 0, 1, 0, 0 };\n  const size_t s = sizeof(numbers) / sizeof(numbers[0]);\n\n  try {\n    partial_sort(numbers, numbers + s / 2, numbers + s, less_equal<int>());\n\n    //Here is means that no exception has been raised\n    CPPUNIT_ASSERT( false );\n  }\n  catch (runtime_error const&)\n  { /*OK bad predicate has been detected.*/ }\n\n  try {\n    vector<int> result(s);\n    partial_sort_copy(numbers, numbers + s, result.begin(), result.end(), less_equal<int>());\n\n    //Here is means that no exception has been raised\n    CPPUNIT_ASSERT( false );\n  }\n  catch (runtime_error const&)\n  { /*OK bad predicate has been detected.*/ }\n}\n#endif\n\nvoid PartialTest::partsum0()\n{\n  int numbers[6] = { 1, 2, 3, 4, 5, 6 };\n\n  int result[6];\n  partial_sum((int*)numbers, (int*)numbers + 6, (int*)result);\n\n  // 1 3 6 10 15 21\n  CPPUNIT_ASSERT(result[0]==1);\n  CPPUNIT_ASSERT(result[1]==3);\n  CPPUNIT_ASSERT(result[2]==6);\n  CPPUNIT_ASSERT(result[3]==10);\n  CPPUNIT_ASSERT(result[4]==15);\n  CPPUNIT_ASSERT(result[5]==21);\n}\n\nvoid PartialTest::partsum1()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector <int> v2(v1.size());\n  partial_sum(v1.begin(), v1.end(), v2.begin());\n\n  // 0 1 3 6 10 15 21 28 36 45\n  CPPUNIT_ASSERT(v2[0]==0);\n  CPPUNIT_ASSERT(v2[1]==1);\n  CPPUNIT_ASSERT(v2[2]==3);\n  CPPUNIT_ASSERT(v2[3]==6);\n  CPPUNIT_ASSERT(v2[4]==10);\n  CPPUNIT_ASSERT(v2[5]==15);\n  CPPUNIT_ASSERT(v2[6]==21);\n  CPPUNIT_ASSERT(v2[7]==28);\n  CPPUNIT_ASSERT(v2[8]==36);\n  CPPUNIT_ASSERT(v2[9]==45);\n}\n\nvoid PartialTest::partsum2()\n{\n  vector <int> v1(5);\n  __iota(v1.begin(), v1.end(), 1);\n  vector <int> v2(v1.size());\n  partial_sum(v1.begin(), v1.end(), v2.begin(), multiplies<int>());\n  // 1 2 6 24 120\n  CPPUNIT_ASSERT(v2[0]==1);\n  CPPUNIT_ASSERT(v2[1]==2);\n  CPPUNIT_ASSERT(v2[2]==6);\n  CPPUNIT_ASSERT(v2[3]==24);\n  CPPUNIT_ASSERT(v2[4]==120);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/partition_test.cpp",
    "content": "#include <algorithm>\n#include <vector>\n#include <cstdlib>\n#include <iterator>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass PartitionTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(PartitionTest);\n  CPPUNIT_TEST(ptition0);\n  CPPUNIT_TEST(ptition1);\n  CPPUNIT_TEST(stblptn0);\n  CPPUNIT_TEST(stblptn1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void ptition0();\n  void ptition1();\n  void stblptn0();\n  void stblptn1();\n\n  struct less_n {\n    less_n(int limit, size_t &nb_calls)\n      : _limit(limit), _nb_calls(nb_calls) {}\n\n    bool operator() (int a_) const {\n      ++_nb_calls;\n      return a_ < _limit;\n    }\n\n    int _limit;\n    size_t &_nb_calls;\n\n  private:\n    //explicitely defined as private to avoid warnings:\n    less_n& operator = (less_n const&);\n  };\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PartitionTest);\n\n//\n// tests implementation\n//\nvoid PartitionTest::stblptn0()\n{\n  int numbers[6] = { 10, 5, 11, 20, 6, -2 };\n\n  size_t nb_pred_calls = 0;\n  stable_partition((int*)numbers, (int*)numbers + 6, less_n(10, nb_pred_calls));\n  // 5 6 -2 10 11 20\n  CPPUNIT_ASSERT(numbers[0]==5);\n  CPPUNIT_ASSERT(numbers[1]==6);\n  CPPUNIT_ASSERT(numbers[2]==-2);\n  CPPUNIT_ASSERT(numbers[3]==10);\n  CPPUNIT_ASSERT(numbers[4]==11);\n  CPPUNIT_ASSERT(numbers[5]==20);\n\n  //Complexity check:\n  CPPUNIT_ASSERT( nb_pred_calls == sizeof(numbers) / sizeof(numbers[0]) );\n}\nvoid PartitionTest::stblptn1()\n{\n  //5 5 2 10 0 12 5 0 0 19\n  //5 5 2 10 0 5 0 0 12 19\n  int numbers[] = { 5, 5, 2, 10, 0, 12, 5, 0, 0, 19 };\n  vector <int> v1(numbers, numbers+10);\n\n  size_t nb_pred_calls = 0;\n  stable_partition(v1.begin(), v1.end(), less_n(11, nb_pred_calls));\n\n  CPPUNIT_ASSERT(v1[0]==5);\n  CPPUNIT_ASSERT(v1[1]==5);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==10);\n  CPPUNIT_ASSERT(v1[4]==0);\n  CPPUNIT_ASSERT(v1[5]==5);\n  CPPUNIT_ASSERT(v1[6]==0);\n  CPPUNIT_ASSERT(v1[7]==0);\n  CPPUNIT_ASSERT(v1[8]==12);\n  CPPUNIT_ASSERT(v1[9]==19);\n  CPPUNIT_ASSERT( nb_pred_calls == v1.size() );\n}\nvoid PartitionTest::ptition0()\n{\n  int numbers[6] = { 6, 12, 3, 10, 1, 20 };\n  size_t nb_pred_calls = 0;\n  // 6 1 3 10 12 20\n  partition((int*)numbers, (int*)numbers + 6, less_n(10, nb_pred_calls));\n  CPPUNIT_ASSERT(numbers[0]==6);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==3);\n  CPPUNIT_ASSERT(numbers[3]==10);\n  CPPUNIT_ASSERT(numbers[4]==12);\n  CPPUNIT_ASSERT(numbers[5]==20);\n\n  CPPUNIT_ASSERT( nb_pred_calls == sizeof(numbers) / sizeof(numbers[0]) );\n}\nvoid PartitionTest::ptition1()\n{\n  // 19 3 11 14 10 19 8 17 9 6\n  // 6 3 9 8 10 19 14 17 11 19\n\n  int numbers[10] ={ 19, 3, 11, 14, 10, 19, 8, 17, 9, 6 };\n\n  vector <int> v1(numbers, numbers+10);\n  size_t nb_pred_calls = 0;\n  partition(v1.begin(), v1.end(), less_n(11, nb_pred_calls));\n\n  CPPUNIT_ASSERT(v1[0]==6);\n  CPPUNIT_ASSERT(v1[1]==3);\n  CPPUNIT_ASSERT(v1[2]==9);\n  CPPUNIT_ASSERT(v1[3]==8);\n  CPPUNIT_ASSERT(v1[4]==10);\n  CPPUNIT_ASSERT(v1[5]==19);\n  CPPUNIT_ASSERT(v1[6]==14);\n  CPPUNIT_ASSERT(v1[7]==17);\n  CPPUNIT_ASSERT(v1[8]==11);\n  CPPUNIT_ASSERT(v1[9]==19);\n  CPPUNIT_ASSERT( nb_pred_calls == v1.size() );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/perm_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <numeric>\n#include <iterator>\n#include <functional>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass PermTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(PermTest);\n  CPPUNIT_TEST(nextprm0);\n  CPPUNIT_TEST(nextprm1);\n  CPPUNIT_TEST(nextprm2);\n  CPPUNIT_TEST(prevprm0);\n  CPPUNIT_TEST(prevprm1);\n  CPPUNIT_TEST(prevprm2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void nextprm0();\n  void nextprm1();\n  void nextprm2();\n  void prevprm0();\n  void prevprm1();\n  void prevprm2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PermTest);\n\n//\n// tests implementation\n//\nvoid PermTest::prevprm0()\n{\n  int v1[3] = { 0, 1, 2 };\n  prev_permutation(v1, v1 + 3);\n\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==0);\n}\nvoid PermTest::prevprm1()\n{\n  vector <int> v1(3);\n  __iota(v1.begin(), v1.end(), 0);\n\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==0);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==2);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);//\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==0);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n}\nvoid PermTest::prevprm2()\n{\n  vector <int> v1(3);\n  __iota(v1.begin(), v1.end(), 0);\n\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==2);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==0);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==1);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==2);\n  prev_permutation(v1.begin(), v1.end(), greater<int>());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n}\nvoid PermTest::nextprm0()\n{\n  int v1[3] = { 0, 1, 2 };\n  next_permutation(v1, v1 + 3);\n\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==1);\n}\nvoid PermTest::nextprm1()\n{\n  vector <int> v1(3);\n  __iota(v1.begin(), v1.end(), 0);\n\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==1);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==2);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==1);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==2);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==0);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==1);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==0);\n  CPPUNIT_ASSERT(v1[2]==2);\n  next_permutation(v1.begin(), v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==0);\n}\nvoid PermTest::nextprm2()\n{\n  vector <char> v1(3);\n  __iota(v1.begin(), v1.end(), 'A');\n\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='A');\n  CPPUNIT_ASSERT(v1[1]=='C');\n  CPPUNIT_ASSERT(v1[2]=='B');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='B');\n  CPPUNIT_ASSERT(v1[1]=='A');\n  CPPUNIT_ASSERT(v1[2]=='C');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='B');\n  CPPUNIT_ASSERT(v1[1]=='C');\n  CPPUNIT_ASSERT(v1[2]=='A');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='C');\n  CPPUNIT_ASSERT(v1[1]=='A');\n  CPPUNIT_ASSERT(v1[2]=='B');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='C');\n  CPPUNIT_ASSERT(v1[1]=='B');\n  CPPUNIT_ASSERT(v1[2]=='A');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='A');\n  CPPUNIT_ASSERT(v1[1]=='B');\n  CPPUNIT_ASSERT(v1[2]=='C');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='A');\n  CPPUNIT_ASSERT(v1[1]=='C');\n  CPPUNIT_ASSERT(v1[2]=='B');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='B');\n  CPPUNIT_ASSERT(v1[1]=='A');\n  CPPUNIT_ASSERT(v1[2]=='C');\n  next_permutation(v1.begin(), v1.end(), less<char>());\n  CPPUNIT_ASSERT(v1[0]=='B');\n  CPPUNIT_ASSERT(v1[1]=='C');\n  CPPUNIT_ASSERT(v1[2]=='A');\n\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/plusminus_test.cpp",
    "content": "#include <numeric>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass PlusMinusTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(PlusMinusTest);\n  CPPUNIT_TEST(plus0);\n  CPPUNIT_TEST(minus0);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void plus0();\n  void minus0();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PlusMinusTest);\n\n//\n// tests implementation\n//\nvoid PlusMinusTest::plus0()\n{\n  int input1 [4] = { 1, 6, 11, 8 };\n  int input2 [4] = { 1, 5, 2, 3 };\n\n  int total = inner_product(input1, input1 + 4, input2, 0, plus<int>(), multiplies <int>());\n\n  CPPUNIT_ASSERT(total==77);\n}\nvoid PlusMinusTest::minus0()\n{\n  int input1 [4] = { 1, 5, 7, 8 };\n  int input2 [4] = { 1, 4, 8, 3 };\n\n  int output [4];\n\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, minus<int>());\n  CPPUNIT_ASSERT(output[0]==0);\n  CPPUNIT_ASSERT(output[1]==1);\n  CPPUNIT_ASSERT(output[2]==-1);\n  CPPUNIT_ASSERT(output[3]==5);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ptr2_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass Ptr2Test : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(Ptr2Test);\n  CPPUNIT_TEST(ptrbin1);\n  CPPUNIT_TEST(ptrbin2);\n  CPPUNIT_TEST(ptrun1);\n  CPPUNIT_TEST(ptrun2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void ptrbin1();\n  void ptrbin2();\n  void ptrun1();\n  void ptrun2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(Ptr2Test);\n\n//\n// tests implementation\n//\nstatic int sum(int x_, int y_)\n{\n  return x_ + y_;\n}\nbool even(int n_)\n{\n  return(n_ % 2) == 0;\n}\nvoid Ptr2Test::ptrbin1()\n{\n  int input1 [4] = { 7, 2, 3, 5 };\n  int input2 [4] = { 1, 5, 5, 8 };\n\n  int output [4];\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, pointer_to_binary_function<int, int, int>(sum));\n\n  CPPUNIT_ASSERT(output[0]==8);\n  CPPUNIT_ASSERT(output[1]==7);\n  CPPUNIT_ASSERT(output[2]==8);\n  CPPUNIT_ASSERT(output[3]==13);\n}\nvoid Ptr2Test::ptrbin2()\n{\n  int input1 [4] = { 7, 2, 3, 5 };\n  int input2 [4] = { 1, 5, 5, 8 };\n\n  int output [4];\n  transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, ptr_fun(sum));\n\n  CPPUNIT_ASSERT(output[0]==8);\n  CPPUNIT_ASSERT(output[1]==7);\n  CPPUNIT_ASSERT(output[2]==8);\n  CPPUNIT_ASSERT(output[3]==13);\n}\nvoid Ptr2Test::ptrun1()\n{\n  int array [3] = { 1, 2, 3 };\n\n  int* p = find_if((int*)array, (int*)array + 3, pointer_to_unary_function<int, bool>(even));\n  CPPUNIT_ASSERT(p != array+3);\n  CPPUNIT_ASSERT(*p==2);\n}\nvoid Ptr2Test::ptrun2()\n{\n  int array [3] = { 1, 2, 3 };\n\n  int* p = find_if((int*)array, (int*)array + 3, ptr_fun(even));\n  CPPUNIT_ASSERT(p != array+3);\n  CPPUNIT_ASSERT(*p==2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/ptrspec_test.cpp",
    "content": "#include <vector>\n#include <list>\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <slist>\n#endif\n#include <deque>\n#include <set>\n#include <iterator>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass PtrSpecTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(PtrSpecTest);\n  CPPUNIT_TEST(ptr_specialization_test);\n  CPPUNIT_TEST(function_pointer);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  /// this seems to be compile only test but...\n  void ptr_specialization_test();\n  void function_pointer();\n\n  template <class _Tp>\n  struct unary_pred {\n    bool operator () (_Tp *__ptr) const {\n     return *__ptr == 0;\n    }\n  };\n\n  template <class _Tp>\n  struct binary_pred {\n    bool operator () (_Tp *__first, _Tp *__second) const {\n      return *__first < *__second;\n    }\n  };\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest);\n\n#define TEST_INSTANCIATE_CONTAINER(cont) \\\n  template class cont<int*>; \\\n  template class cont<int const*>; \\\n  template class cont<int volatile*>; \\\n  template class cont<int const volatile*>\n\n#if !defined(_MSC_VER) || (_MSC_VER > 1200)  // excluding MSVC 6.0\nTEST_INSTANCIATE_CONTAINER(vector);\nTEST_INSTANCIATE_CONTAINER(list);\n#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\nTEST_INSTANCIATE_CONTAINER(slist);\n#  endif\nTEST_INSTANCIATE_CONTAINER(deque);\nTEST_INSTANCIATE_CONTAINER(set);\nTEST_INSTANCIATE_CONTAINER(multiset);\n#endif\n\n//Function to test pointer to function support:\nvoid FTypeInstance() {}\n\n//Class to test pointer to member method support:\nclass AClass {\npublic:\n  void func() {}\n};\n\n//\n// tests implementation\n//\nvoid PtrSpecTest::ptr_specialization_test()\n{\n  int *int_array[] = {0, 0, 0};\n  int const* cint_array[] = {0, 0, 0};\n\n  {\n    vector<void*> void_vect;\n    deque<void*> void_deque;\n    list<void*> void_list;\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n    slist<void*> void_slist;\n#endif\n  }\n\n  {\n    typedef void (*FType)();\n    vector<FType> func_vector;\n    func_vector.push_back(&FTypeInstance);\n  }\n\n#if !defined(__GNUC__) || (__GNUC__ > 2)\n  {\n    typedef void (AClass::*MFType)();\n    vector<MFType> mem_func_vector;\n    mem_func_vector.push_back(&AClass::func);\n  }\n#endif\n\n  vector<int*> pint_vect;\n  vector<int*> pint_vect2;\n  vector<int const*> pcint_vect;\n  list<int*> pint_list;\n  list<int*> pint_list2;\n  list<int const*> pcint_list;\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  slist<int*> pint_slist;\n  slist<int*> pint_slist2;\n  slist<int const*> pcint_slist;\n#endif\n  deque<int*> pint_deque;\n  deque<int*> pint_deque2;\n  deque<int const*> pcint_deque;\n\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  vector<int*> pint_vect_from_list(pint_list.begin(), pint_list.end());\n#endif\n  pint_vect.insert(pint_vect.end(), pint_vect2.begin(), pint_vect2.end());\n  pint_vect.insert(pint_vect.end(), int_array, int_array + 3);\n  pint_vect2.insert(pint_vect2.end(), int_array, int_array + 3);\n  pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);\n  pcint_vect.insert(pcint_vect.end(), cint_array, cint_array + 3);\n#if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)\n  pcint_vect.insert(pcint_vect.end(), pint_vect2.begin(), pint_vect2.end());\n#endif\n  pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  pint_vect.insert(pint_vect.end(), pint_list.begin(), pint_list.end());\n  pcint_vect.insert(pcint_vect.end(), pint_list.begin(), pint_list.end());\n  pcint_vect.insert(pcint_vect.end(), pcint_list.begin(), pcint_list.end());\n  pint_vect.assign(pint_list.begin(), pint_list.end());\n  pcint_vect.assign(pint_list.begin(), pint_list.end());\n#endif\n  pint_vect.assign(int_array, int_array + 3);\n  pcint_vect.assign(int_array, int_array + 3);\n  pcint_vect.assign(cint_array, cint_array + 3);\n  copy(int_array, int_array + 3, back_inserter(pint_vect));\n\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  pint_list.sort(binary_pred<int>());\n  pcint_list.sort(binary_pred<int const>());\n  pint_list.unique(binary_pred<int>());\n  pcint_list.unique(binary_pred<int const>());\n  pint_list.merge(pint_list, binary_pred<int>());\n  pcint_list.merge(pcint_list, binary_pred<int const>());\n  pint_list.remove_if(unary_pred<int>());\n  pcint_list.remove_if(unary_pred<int const>());\n#endif\n\n  copy(int_array, int_array + 3, back_inserter(pint_list));\n  copy(int_array, int_array + 3, back_inserter(pint_list2));\n  pint_list.insert(pint_list.end(), pint_list2.begin(), pint_list2.end());\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end());\n#endif\n#if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)\n  pint_list.insert(pint_list.end(), pint_vect.begin(), pint_vect.end());\n  pcint_list.insert(pcint_list.end(), pint_vect.begin(), pint_vect.end());\n  pcint_list.insert(pcint_list.end(), pcint_vect.begin(), pcint_vect.end());\n  list<int*> pint_list_from_vect(pint_vect.begin(), pint_vect.end());\n  pint_list.assign(pint_vect.begin(), pint_vect.end());\n  pcint_list.assign(pint_vect.begin(), pint_vect.end());\n#endif\n  pint_list.insert(pint_list.begin(), int_array, int_array + 3);\n  pint_list.insert(pint_list.end(), int_array, int_array + 3);\n  pcint_list.insert(pcint_list.end(), int_array, int_array + 3);\n  pcint_list.insert(pcint_list.end(), cint_array, cint_array + 3);\n  pint_list.assign(int_array, int_array + 3);\n  pcint_list.assign(int_array, int_array + 3);\n  pcint_list.assign(cint_array, cint_array + 3);\n  //pint_list.assign(pcint_vect.begin(), pcint_vect.end());\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  copy(int_array, int_array + 3, front_inserter(pint_slist));\n  copy(int_array, int_array + 3, front_inserter(pint_slist2));\n  pint_slist.insert(pint_slist.end(), pint_slist2.begin(), pint_slist2.end());\n#  if defined (_STLP_MEMBER_TEMPLATES)\n  pcint_slist.insert(pcint_slist.end(), pint_slist.begin(), pint_slist.end());\n#  endif\n#  if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES)\n  pint_slist.insert(pint_slist.end(), pint_vect.begin(), pint_vect.end());\n  pcint_slist.insert(pcint_slist.end(), pint_vect.begin(), pint_vect.end());\n  pcint_slist.insert(pcint_slist.end(), pcint_vect.begin(), pcint_vect.end());\n  slist<int*> pint_slist_from_vect(pint_vect.begin(), pint_vect.end());\n  pint_slist.assign(pint_vect.begin(), pint_vect.end());\n  pcint_slist.assign(pint_vect.begin(), pint_vect.end());\n#  endif\n  pint_slist.insert(pint_slist.end(), int_array, int_array + 3);\n  pcint_slist.insert(pcint_slist.end(), int_array, int_array + 3);\n  pcint_slist.insert(pcint_slist.end(), cint_array, cint_array + 3);\n  pint_slist.assign(int_array, int_array + 3);\n  pcint_slist.assign(int_array, int_array + 3);\n  pcint_slist.assign(cint_array, cint_array + 3);\n  //pint_slist.assign(pcint_vect.begin(), pcint_vect.end());\n#endif\n\n  copy(int_array, int_array + 3, back_inserter(pint_deque));\n  copy(int_array, int_array + 3, back_inserter(pint_deque2));\n  pint_deque.insert(pint_deque.end(), pint_deque2.begin(), pint_deque2.end());\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end());\n#endif\n#if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)\n  pint_deque.insert(pint_deque.end(), pint_vect.begin(), pint_vect.end());\n  pcint_deque.insert(pcint_deque.end(), pint_vect.begin(), pint_vect.end());\n  pcint_deque.insert(pcint_deque.end(), pcint_vect.begin(), pcint_vect.end());\n  deque<int*> pint_deque_from_vect(pint_vect.begin(), pint_vect.end());\n  pint_deque.assign(pint_vect.begin(), pint_vect.end());\n  pcint_deque.assign(pint_vect.begin(), pint_vect.end());\n#endif\n  pint_deque.insert(pint_deque.end(), int_array, int_array + 3);\n  pcint_deque.insert(pcint_deque.end(), int_array, int_array + 3);\n  pcint_deque.insert(pcint_deque.end(), cint_array, cint_array + 3);\n  pint_deque.assign(int_array, int_array + 3);\n  pcint_deque.assign(int_array, int_array + 3);\n  pcint_deque.assign(cint_array, cint_array + 3);\n}\n\ntypedef void (*Func)(int);\nvoid f1(int) {}\n\nvoid PtrSpecTest::function_pointer()\n{\n  vector<Func> fs;\n  fs.push_back(&f1);\n  CPPUNIT_ASSERT( !fs.empty() );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/queue_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <queue>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/queue_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <list>\n#include <deque>\n#include <queue>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass QueueTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(QueueTest);\n  CPPUNIT_TEST(pqueue1);\n  CPPUNIT_TEST(queue1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void pqueue1();\n  void queue1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(QueueTest);\n\n//\n// tests implementation\n//\nvoid QueueTest::pqueue1()\n{\n  priority_queue<int, deque<int>, less<int> > q;\n  q.push(42);\n  q.push(101);\n  q.push(69);\n\n  CPPUNIT_ASSERT( q.top()==101 );\n  q.pop();\n  CPPUNIT_ASSERT( q.top()==69 );\n  q.pop();\n  CPPUNIT_ASSERT( q.top()==42 );\n  q.pop();\n\n  CPPUNIT_ASSERT(q.empty());\n}\nvoid QueueTest::queue1()\n{\n  queue<int, list<int> > q;\n  q.push(42);\n  q.push(101);\n  q.push(69);\n\n  CPPUNIT_ASSERT( q.front()==42 );\n  q.pop();\n  CPPUNIT_ASSERT( q.front()==101 );\n  q.pop();\n  CPPUNIT_ASSERT( q.front()==69 );\n  q.pop();\n\n  CPPUNIT_ASSERT(q.empty());\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/rawriter_test.cpp",
    "content": "#include <algorithm>\n#include <iterator>\n#include <memory>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nclass X\n{\n  public:\n    X(int i_ = 0) : i(i_) {}\n    ~X() {}\n    operator int() const { return i; }\n\n  private:\n    int i;\n};\n\n\n//\n// TestCase class\n//\nclass RawriterTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(RawriterTest);\n  CPPUNIT_TEST(rawiter1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void rawiter1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RawriterTest);\n\n//\n// tests implementation\n//\nvoid RawriterTest::rawiter1()\n{\n  allocator<X> a;\n  typedef X* x_pointer;\n  x_pointer save_p, p;\n  p = a.allocate(5);\n  save_p=p;\n  raw_storage_iterator<X*, X> r(p);\n  int i;\n  for(i = 0; i < 5; i++)\n    *r++ = X(i);\n\n  CPPUNIT_ASSERT(*p++ == 0);\n  CPPUNIT_ASSERT(*p++ == 1);\n  CPPUNIT_ASSERT(*p++ == 2);\n  CPPUNIT_ASSERT(*p++ == 3);\n  CPPUNIT_ASSERT(*p++ == 4);\n\n//#if defined (STLPORT) || defined (__GNUC__)\n  a.deallocate(save_p, 5);\n/*\n#else\n  a.deallocate(save_p);\n#endif\n*/\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/reference_wrapper_test.cpp",
    "content": "#include <functional>\n\n#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT)\n\n#include <typeinfo>\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nclass RefWrapperTest :\n    public CPPUNIT_NS::TestCase\n{\n    CPPUNIT_TEST_SUITE(RefWrapperTest);\n    CPPUNIT_TEST(ref);\n    CPPUNIT_TEST(cref);\n    CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void ref();\n    void cref();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest);\n\nvoid RefWrapperTest::ref()\n{\n  typedef std::tr1::reference_wrapper<int> rr_type;\n\n  CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) );\n  CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) );\n\n  int i = 1;\n  int j = 2;\n\n  rr_type r1 = std::tr1::ref(i);\n\n  CPPUNIT_CHECK( r1.get() == 1 );\n\n  r1 = std::tr1::ref(j);\n\n  CPPUNIT_CHECK( r1.get() == 2 );\n\n  i = 3;\n\n  CPPUNIT_CHECK( r1.get() == 2 );\n\n  j = 4;\n\n  CPPUNIT_CHECK( r1.get() == 4 );\n\n  r1.get() = 5;\n\n  CPPUNIT_CHECK( j == 5 );\n}\n\nvoid RefWrapperTest::cref()\n{\n  typedef std::tr1::reference_wrapper<const int> crr_type;\n\n  CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) );\n  CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) );\n\n  int i = 1;\n  int j = 2;\n\n  crr_type r1 = std::tr1::cref(i);\n\n  CPPUNIT_CHECK( r1.get() == 1 );\n\n  r1 = std::tr1::cref(j);\n\n  CPPUNIT_CHECK( r1.get() == 2 );\n\n  i = 3;\n\n  CPPUNIT_CHECK( r1.get() == 2 );\n\n  j = 4;\n\n  CPPUNIT_CHECK( r1.get() == 4 );\n}\n\n#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/resolve_name.cpp",
    "content": "#define _STLP_DO_IMPORT_CSTD_FUNCTIONS\n#include <cmath>\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n\nnamespace NS1 {\n\nbool f()\n{\n  double d( 1.0 );\n\n  d = sqrt( d );\n  d = ::sqrt( d );\n  d = std::sqrt( d );\n  return d == 1.0;\n}\n\n}\n\nnamespace {\n\nbool g()\n{\n  double d( 1.0 );\n\n  d = sqrt( d );\n  d = ::sqrt( d );\n  d = std::sqrt( d );\n  return d == 1.0;\n}\n\n}\n\n// VC6 consider call to sqrt ambiguous as soon as using namespace std has\n// been invoked.\n#if !defined (STLPORT) || !defined (_STLP_MSVC) || (_STLP_MSVC >= 1300)\nusing namespace std;\n#endif\n\nbool h()\n{\n  double d( 1.0 );\n\n  d = sqrt( d );\n  d = ::sqrt( d );\n  d = std::sqrt( d );\n  return d == 1.0;\n}\n\nstruct sq\n{\n  sq() {}\n\n  double sqroot( double x ) {\n    using std::sqrt;\n    return sqrt(x);\n  }\n};\n\n#endif\n\n\n#if 0 // Do nothing, this should be compiled only\n\n#include \"cppunit/cppunit_proxy.h\"\n\nclass ResolveNameTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ResolveNameTest);\n  CPPUNIT_TEST(cstyle);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void cstyle();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ResolveNameTest);\n\nvoid ResolveNameTest::cstyle()\n{\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/reviter_test.cpp",
    "content": "#include <vector>\n#include <list>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ReviterTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ReviterTest);\n  CPPUNIT_TEST(reviter1);\n  CPPUNIT_TEST(reviter2);\n  CPPUNIT_TEST(revbit1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void reviter1();\n  void reviter2();\n  void revbit1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ReviterTest);\n\n//\n// tests implementation\n//\nvoid ReviterTest::reviter1()\n{\n  int array [] = { 1, 5, 2, 3 };\n\n  vector<int> v(array, array + 4);\n  typedef vector<int>::reverse_iterator reviter;\n  reviter r(v.rend());\n  r--;\n\n  CPPUNIT_ASSERT(*r-- == 1);\n  CPPUNIT_ASSERT(*r-- == 5);\n  CPPUNIT_ASSERT(*r-- == 2);\n  CPPUNIT_ASSERT(*r == 3);\n  CPPUNIT_ASSERT(r==v.rbegin());\n}\nvoid ReviterTest::reviter2()\n{\n  int array [] = { 1, 5, 2, 3 };\n\n  vector<int> v(array, array + 4);\n  vector<int>::reverse_iterator r;\n  r = v.rbegin();\n  CPPUNIT_ASSERT(*r++ == 3);\n  CPPUNIT_ASSERT(*r++ == 2);\n  CPPUNIT_ASSERT(*r++ == 5);\n  CPPUNIT_ASSERT(*r++ == 1);\n  CPPUNIT_ASSERT(r==v.rend());\n}\nvoid ReviterTest::revbit1()\n{\n  int array [] = { 1, 5, 2, 3 };\n\n  list<int> v(array, array + 4);\n  list<int>::reverse_iterator r(v.rbegin());\n  CPPUNIT_ASSERT(*r++ == 3);\n  CPPUNIT_ASSERT(*r++ == 2);\n  CPPUNIT_ASSERT(*r++ == 5);\n  CPPUNIT_ASSERT(*r++ == 1);\n  CPPUNIT_ASSERT(r==v.rend());\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/rm_cp_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass RmCpTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(RmCpTest);\n  CPPUNIT_TEST(remcopy1);\n  CPPUNIT_TEST(remcpif1);\n  CPPUNIT_TEST(remif1);\n  CPPUNIT_TEST(remove1);\n  CPPUNIT_TEST(repcpif1);\n  CPPUNIT_TEST(replace0);\n  CPPUNIT_TEST(replace1);\n  CPPUNIT_TEST(replcpy1);\n  CPPUNIT_TEST(replif1);\n  CPPUNIT_TEST(revcopy1);\n  CPPUNIT_TEST(reverse1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void remcopy1();\n  void remcpif1();\n  void remif1();\n  void remove1();\n  void repcpif1();\n  void replace0();\n  void replace1();\n  void replcpy1();\n  void replif1();\n  void revcopy1();\n  void reverse1();\n\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RmCpTest);\n\nstatic bool odd(int a_)\n{\n  return (a_ % 2) != 0;\n}\n//\n// tests implementation\n//\n\nvoid RmCpTest::reverse1()\n{\n  int numbers[6] = { 0, 1, 2, 3, 4, 5 };\n\n  reverse(numbers, numbers + 6);\n  CPPUNIT_ASSERT(numbers[0]==5);\n  CPPUNIT_ASSERT(numbers[1]==4);\n  CPPUNIT_ASSERT(numbers[2]==3);\n  CPPUNIT_ASSERT(numbers[3]==2);\n  CPPUNIT_ASSERT(numbers[4]==1);\n  CPPUNIT_ASSERT(numbers[5]==0);\n}\n\nvoid RmCpTest::revcopy1()\n{\n  int numbers[6] = { 0, 1, 2, 3, 4, 5 };\n\n  int result[6];\n  reverse_copy((int*)numbers, (int*)numbers + 6, (int*)result);\n  // 5 4 3 2 1 0\n  CPPUNIT_ASSERT(result[0]==5);\n  CPPUNIT_ASSERT(result[1]==4);\n  CPPUNIT_ASSERT(result[2]==3);\n  CPPUNIT_ASSERT(result[3]==2);\n  CPPUNIT_ASSERT(result[4]==1);\n  CPPUNIT_ASSERT(result[5]==0);\n}\n\nvoid RmCpTest::replif1()\n{\n  vector <int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i % 5;\n\n  replace_if(v1.begin(), v1.end(), odd, 42);\n\n  // 0 42 2 42 4 0 42 2 42 4\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==42);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==42);\n  CPPUNIT_ASSERT(v1[4]==4);\n  CPPUNIT_ASSERT(v1[5]==0);\n  CPPUNIT_ASSERT(v1[6]==42);\n  CPPUNIT_ASSERT(v1[7]==2);\n  CPPUNIT_ASSERT(v1[8]==42);\n  CPPUNIT_ASSERT(v1[9]==4);\n}\n\nvoid RmCpTest::replcpy1()\n{\n  int numbers[6] = { 0, 1, 2, 0, 1, 2 };\n  int result[6] = { 0, 0, 0, 0, 0, 0 };\n\n  replace_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2, 42);\n  CPPUNIT_ASSERT(result[0]==0);\n  CPPUNIT_ASSERT(result[1]==1);\n  CPPUNIT_ASSERT(result[2]==42);\n  CPPUNIT_ASSERT(result[3]==0);\n  CPPUNIT_ASSERT(result[4]==1);\n  CPPUNIT_ASSERT(result[5]==42);\n}\n\nvoid RmCpTest::replace0()\n{\n  int numbers[6] = { 0, 1, 2, 0, 1, 2 };\n\n  replace(numbers, numbers + 6, 2, 42);\n\n  // 0 1 42 0 1 42\n  CPPUNIT_ASSERT(numbers[0]==0);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==42);\n  CPPUNIT_ASSERT(numbers[3]==0);\n  CPPUNIT_ASSERT(numbers[4]==1);\n  CPPUNIT_ASSERT(numbers[5]==42);\n}\n\nvoid RmCpTest::replace1()\n{\n  vector <int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i % 5;\n  replace(v1.begin(), v1.end(), 2, 42);\n\n  // 0 1 2 3 4 0 1 2 3 4\n  // 0 1 42 3 4 0 1 42 3 4\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==42);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==4);\n  CPPUNIT_ASSERT(v1[5]==0);\n  CPPUNIT_ASSERT(v1[6]==1);\n  CPPUNIT_ASSERT(v1[7]==42);\n  CPPUNIT_ASSERT(v1[8]==3);\n  CPPUNIT_ASSERT(v1[9]==4);\n}\n\nvoid RmCpTest::repcpif1()\n{\n  vector <int> v1(10);\n  for (int i = 0; (size_t)i < v1.size(); ++i)\n    v1[i] = i % 5;\n  vector <int> v2(v1.size());\n\n  // 0 1 2 3 4 0 1 2 3 4\n  // 0 1 2 3 4 0 1 2 3 4\n  // 0 42 2 42 4 0 42 2 42 4\n  replace_copy_if(v1.begin(), v1.end(), v2.begin(), odd, 42);\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==4);\n  CPPUNIT_ASSERT(v1[5]==0);\n  CPPUNIT_ASSERT(v1[6]==1);\n  CPPUNIT_ASSERT(v1[7]==2);\n  CPPUNIT_ASSERT(v1[8]==3);\n  CPPUNIT_ASSERT(v1[9]==4);\n\n  CPPUNIT_ASSERT(v2[0]==0);\n  CPPUNIT_ASSERT(v2[1]==42);\n  CPPUNIT_ASSERT(v2[2]==2);\n  CPPUNIT_ASSERT(v2[3]==42);\n  CPPUNIT_ASSERT(v2[4]==4);\n  CPPUNIT_ASSERT(v2[5]==0);\n  CPPUNIT_ASSERT(v2[6]==42);\n  CPPUNIT_ASSERT(v2[7]==2);\n  CPPUNIT_ASSERT(v2[8]==42);\n  CPPUNIT_ASSERT(v2[9]==4);\n}\n\nvoid RmCpTest::remove1()\n{\n  int numbers[6] = { 1, 2, 3, 1, 2, 3 };\n  remove((int*)numbers, (int*)numbers + 6, 1);\n\n  // 2 3 2 3 2 3\n  CPPUNIT_ASSERT(numbers[0]==2);\n  CPPUNIT_ASSERT(numbers[1]==3);\n  CPPUNIT_ASSERT(numbers[2]==2);\n  CPPUNIT_ASSERT(numbers[3]==3);\n  CPPUNIT_ASSERT(numbers[4]==2);\n  CPPUNIT_ASSERT(numbers[5]==3);\n}\n\nvoid RmCpTest::remif1()\n{\n  int numbers[6] = { 0, 0, 1, 1, 2, 2 };\n\n  remove_if((int*)numbers, (int*)numbers + 6, odd);\n\n  // 0 0 2 2 2 2\n  CPPUNIT_ASSERT(numbers[0]==0);\n  CPPUNIT_ASSERT(numbers[1]==0);\n  CPPUNIT_ASSERT(numbers[2]==2);\n  CPPUNIT_ASSERT(numbers[3]==2);\n  CPPUNIT_ASSERT(numbers[4]==2);\n  CPPUNIT_ASSERT(numbers[5]==2);\n}\n\nvoid RmCpTest::remcopy1()\n{\n  int numbers[6] = { 1, 2, 3, 1, 2, 3 };\n  int result[6] = { 0, 0, 0, 0, 0, 0 };\n\n  remove_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2);\n\n  CPPUNIT_ASSERT(result[0]==1);\n  CPPUNIT_ASSERT(result[1]==3);\n  CPPUNIT_ASSERT(result[2]==1);\n  CPPUNIT_ASSERT(result[3]==3);\n  CPPUNIT_ASSERT(result[4]==0);\n  CPPUNIT_ASSERT(result[5]==0);\n}\n\nvoid RmCpTest::remcpif1()\n{\n  int numbers[6] = { 1, 2, 3, 1, 2, 3 };\n  int result[6] = { 0, 0, 0, 0, 0, 0 };\n\n  remove_copy_if((int*)numbers, (int*)numbers + 6, (int*)result, odd);\n\n  // 2 2 0 0 0 0\n  CPPUNIT_ASSERT(result[0]==2);\n  CPPUNIT_ASSERT(result[1]==2);\n  CPPUNIT_ASSERT(result[2]==0);\n  CPPUNIT_ASSERT(result[3]==0);\n  CPPUNIT_ASSERT(result[4]==0);\n  CPPUNIT_ASSERT(result[5]==0);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/rndshf_test.cpp",
    "content": "#include <numeric>\n#include <vector>\n#include <algorithm>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass RndShuffleTest : public CPPUNIT_NS::TestCase\n{\n  class MyRandomGenerator\n  {\n    public:\n      unsigned long operator()(unsigned long n_)\n        {\n        return rand() % n_;\n        }\n  };\n  CPPUNIT_TEST_SUITE(RndShuffleTest);\n  CPPUNIT_TEST(rndshuf0);\n  CPPUNIT_TEST(rndshuf2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void rndshuf0();\n  void rndshuf2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RndShuffleTest);\n\n//\n// tests implementation\n//\nvoid RndShuffleTest::rndshuf0()\n{\n  int numbers[6] = { 1, 2, 3, 4, 5, 6 };\n\n  random_shuffle(numbers, numbers + 6);\n\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 1)==1);\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 2)==1);\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 3)==1);\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 4)==1);\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 5)==1);\n  CPPUNIT_ASSERT(count(numbers, numbers+6, 6)==1);\n}\nvoid RndShuffleTest::rndshuf2()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n\n  MyRandomGenerator r;\n  for(int i = 0; i < 3; i++)\n  {\n    random_shuffle(v1.begin(), v1.end(), r);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 0)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 1)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 2)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 3)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 4)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 5)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 6)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 7)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 8)==1);\n    CPPUNIT_ASSERT(count(v1.begin(), v1.end(), 9)==1);\n  }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/rope_test.cpp",
    "content": "//Small header to get STLport numerous defines:\n#include <utility>\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <rope>\n\n#  if !defined (_STLP_USE_NO_IOSTREAMS)\n#    include <sstream>\n#  endif\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n// #include <stdlib.h> // for rand etc\n\n#if defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass RopeTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(RopeTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS) || defined (_STLP_USE_NO_IOSTREAMS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(io);\n#if defined (_STLP_USE_NO_IOSTREAMS)\n  CPPUNIT_STOP_IGNORE;\n#endif\n  CPPUNIT_TEST(find1);\n  CPPUNIT_TEST(find2);\n  CPPUNIT_TEST(construct_from_char);\n  CPPUNIT_TEST(bug_report);\n#if !defined (_STLP_MEMBER_TEMPLATES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(test_saved_rope_iterators);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void io();\n  void find1();\n  void find2();\n  void construct_from_char();\n  void bug_report();\n  void test_saved_rope_iterators();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RopeTest);\n\n//\n// tests implementation\n//\nvoid RopeTest::io()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && !defined (_STLP_USE_NO_IOSTREAMS) \n  char const* cstr = \"rope test string\";\n  crope rstr(cstr);\n\n  {\n    ostringstream ostr;\n    ostr << rstr;\n\n    CPPUNIT_ASSERT( ostr );\n    CPPUNIT_ASSERT( ostr.str() == cstr );\n  }\n#endif\n}\n\nvoid RopeTest::find1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) \n  crope r(\"Fuzzy Wuzzy was a bear\");\n  crope::size_type n = r.find( \"hair\" );\n  CPPUNIT_ASSERT( n == crope::npos );\n\n  n = r.find(\"ear\");\n\n  CPPUNIT_ASSERT( n == (r.size() - 3) );\n#endif\n}\n\nvoid RopeTest::find2()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) \n  crope r(\"Fuzzy Wuzzy was a bear\");\n  crope::size_type n = r.find( 'e' );\n  CPPUNIT_ASSERT( n == (r.size() - 3) );\n#endif\n}\n\nvoid RopeTest::construct_from_char()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) \n  crope r('1');\n  char const* s = r.c_str();\n  CPPUNIT_ASSERT( '1' == s[0] && '\\0' == s[1] );\n#endif\n}\n\n// Test used for a bug report from Peter Hercek\nvoid RopeTest::bug_report()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) \n  //first create a rope bigger than crope::_S_copy_max = 23\n  // so that any string addition is added to a new leaf\n  crope evilRope(\"12345678901234567890123_\");\n  //crope* pSevenCharRope( new TRope(\"1234567\") );\n  crope sevenCharRope0(\"12345678\");\n  crope sevenCharRope1(\"1234567\");\n  // add _Rope_RopeRep<c,a>::_S_alloc_granularity-1 = 7 characters\n  evilRope += \"1234567\"; // creates a new leaf\n  crope sevenCharRope2(\"1234567\");\n  // add one more character to the leaf\n  evilRope += '8'; // here is the write beyond the allocated memory\n  CPPUNIT_ASSERT( strcmp(sevenCharRope2.c_str(), \"1234567\") == 0 );\n#endif\n}\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\nconst char str[] = \"ilcpsklryvmcpjnbpbwllsrehfmxrkecwitrsglrexvtjmxypu\\\nnbqfgxmuvgfajclfvenhyuhuorjosamibdnjdbeyhkbsomblto\\\nuujdrbwcrrcgbflqpottpegrwvgajcrgwdlpgitydvhedtusip\\\npyvxsuvbvfenodqasajoyomgsqcpjlhbmdahyviuemkssdslde\\\nbesnnngpesdntrrvysuipywatpfoelthrowhfexlwdysvspwlk\\\nfblfdf\";\n\ncrope create_rope( int len )\n{\n   int l = len/2;\n   crope result;\n   if(l <= 2)\n   {\n      static int j = 0;\n      for(int i = 0; i < len; ++i)\n      {\n         // char c = 'a' + rand() % ('z' - 'a');\n         result.append(1, /* c */ str[j++] );\n         j %= sizeof(str);\n      }\n   }\n   else\n   {\n      result = create_rope(len/2);\n      result.append(create_rope(len/2));\n   }\n   return result;\n}\n\n#endif\n\nvoid RopeTest::test_saved_rope_iterators()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \\\n    defined (_STLP_MEMBER_TEMPLATES)\n   //\n   // Try and create a rope with a complex tree structure:\n   //\n   // srand(0);\n   crope r = create_rope(300);\n   string expected(r.begin(), r.end());\n   CPPUNIT_ASSERT(expected.size() == r.size());\n   CPPUNIT_ASSERT(equal(expected.begin(), expected.end(), r.begin()));\n   crope::const_iterator i(r.begin()), j(r.end());\n   int pos = 0;\n   while(i != j)\n   {\n      crope::const_iterator k;\n      // This initial read triggers the bug:\n      CPPUNIT_ASSERT(*i);\n      k = i;\n      int newpos = pos;\n      // Now make sure that i is incremented into the next leaf:\n      while(i != j)\n      {\n         CPPUNIT_ASSERT(*i == expected[newpos]);\n         ++i;\n         ++newpos;\n      }\n      // Back up from stored value and continue:\n      i = k;\n      ++i;\n      ++pos;\n   }\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/rotate_test.cpp",
    "content": "#include <numeric>\n#include <vector>\n#include <algorithm>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass RotateTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(RotateTest);\n  CPPUNIT_TEST(rotate0);\n  CPPUNIT_TEST(rotate1);\n  CPPUNIT_TEST(rotcopy0);\n  CPPUNIT_TEST(rotcopy1);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void rotate0();\n  void rotate1();\n  void rotcopy0();\n  void rotcopy1();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(RotateTest);\n\n//\n// tests implementation\n//\nvoid RotateTest::rotate0()\n{\n  int numbers[6] = { 0, 1, 2, 3, 4, 5 };\n  // 3 4 5 0 1 2\n  rotate((int*)numbers, numbers + 3, numbers + 6);\n  CPPUNIT_ASSERT(numbers[0]==3);\n  CPPUNIT_ASSERT(numbers[1]==4);\n  CPPUNIT_ASSERT(numbers[2]==5);\n  CPPUNIT_ASSERT(numbers[3]==0);\n  CPPUNIT_ASSERT(numbers[4]==1);\n  CPPUNIT_ASSERT(numbers[5]==2);\n}\nvoid RotateTest::rotate1()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n\n  rotate(v1.begin(), v1.begin()+1, v1.end());\n  CPPUNIT_ASSERT(v1[0]==1);\n  CPPUNIT_ASSERT(v1[1]==2);\n  CPPUNIT_ASSERT(v1[2]==3);\n  CPPUNIT_ASSERT(v1[3]==4);\n  CPPUNIT_ASSERT(v1[4]==5);\n  CPPUNIT_ASSERT(v1[5]==6);\n  CPPUNIT_ASSERT(v1[6]==7);\n  CPPUNIT_ASSERT(v1[7]==8);\n  CPPUNIT_ASSERT(v1[8]==9);\n  CPPUNIT_ASSERT(v1[9]==0);\n\n  rotate(v1.begin(), v1.begin()+2, v1.end());\n  CPPUNIT_ASSERT(v1[0]==3);\n  CPPUNIT_ASSERT(v1[1]==4);\n  CPPUNIT_ASSERT(v1[2]==5);\n  CPPUNIT_ASSERT(v1[3]==6);\n  CPPUNIT_ASSERT(v1[4]==7);\n  CPPUNIT_ASSERT(v1[5]==8);\n  CPPUNIT_ASSERT(v1[6]==9);\n  CPPUNIT_ASSERT(v1[7]==0);\n  CPPUNIT_ASSERT(v1[8]==1);\n  CPPUNIT_ASSERT(v1[9]==2);\n\n  rotate(v1.begin(), v1.begin()+7, v1.end());\n  CPPUNIT_ASSERT(v1[0]==0);\n  CPPUNIT_ASSERT(v1[1]==1);\n  CPPUNIT_ASSERT(v1[2]==2);\n  CPPUNIT_ASSERT(v1[3]==3);\n  CPPUNIT_ASSERT(v1[4]==4);\n  CPPUNIT_ASSERT(v1[5]==5);\n  CPPUNIT_ASSERT(v1[6]==6);\n  CPPUNIT_ASSERT(v1[7]==7);\n  CPPUNIT_ASSERT(v1[8]==8);\n  CPPUNIT_ASSERT(v1[9]==9);\n\n}\nvoid RotateTest::rotcopy0()\n{\n  int numbers[6] = { 0, 1, 2, 3, 4, 5 };\n\n  int result[6];\n  rotate_copy((int*)numbers, (int*)numbers + 3, (int*)numbers + 6, (int*)result);\n  // 3 4 5 0 1 2\n  CPPUNIT_ASSERT(result[0]==3);\n  CPPUNIT_ASSERT(result[1]==4);\n  CPPUNIT_ASSERT(result[2]==5);\n  CPPUNIT_ASSERT(result[3]==0);\n  CPPUNIT_ASSERT(result[4]==1);\n  CPPUNIT_ASSERT(result[5]==2);\n}\nvoid RotateTest::rotcopy1()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector <int> v2(v1.size());\n\n  rotate_copy(v1.begin(), v1.begin()+1, v1.end(), v2.begin());\n  CPPUNIT_ASSERT(v2[0]==1);\n  CPPUNIT_ASSERT(v2[1]==2);\n  CPPUNIT_ASSERT(v2[2]==3);\n  CPPUNIT_ASSERT(v2[3]==4);\n  CPPUNIT_ASSERT(v2[4]==5);\n  CPPUNIT_ASSERT(v2[5]==6);\n  CPPUNIT_ASSERT(v2[6]==7);\n  CPPUNIT_ASSERT(v2[7]==8);\n  CPPUNIT_ASSERT(v2[8]==9);\n  CPPUNIT_ASSERT(v2[9]==0);\n\n  rotate_copy(v1.begin(), v1.begin()+3, v1.end(), v2.begin());\n  CPPUNIT_ASSERT(v2[0]==3);\n  CPPUNIT_ASSERT(v2[1]==4);\n  CPPUNIT_ASSERT(v2[2]==5);\n  CPPUNIT_ASSERT(v2[3]==6);\n  CPPUNIT_ASSERT(v2[4]==7);\n  CPPUNIT_ASSERT(v2[5]==8);\n  CPPUNIT_ASSERT(v2[6]==9);\n  CPPUNIT_ASSERT(v2[7]==0);\n  CPPUNIT_ASSERT(v2[8]==1);\n  CPPUNIT_ASSERT(v2[9]==2);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/search_test.cpp",
    "content": "#include <vector>\n#include <numeric>\n#include <algorithm>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SearchTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SearchTest);\n  CPPUNIT_TEST(search0);\n  CPPUNIT_TEST(search1);\n  CPPUNIT_TEST(search2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void search0();\n  void search1();\n  void search2();\n\n  static bool str_equal(const char* a_, const char* b_)\n  {\n    return strcmp(a_, b_) == 0 ? 1 : 0;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SearchTest);\n\n//\n// tests implementation\n//\nvoid SearchTest::search0()\n{\n  int v1[6] = { 1, 1, 2, 3, 5, 8 };\n  int v2[6] = { 0, 1, 2, 3, 4, 5 };\n  int v3[2] = { 3, 4 };\n\n  int* location;\n  location = search((int*)v1, (int*)v1 + 6, (int*)v3, (int*)v3 + 2);\n  CPPUNIT_ASSERT(location == v1 + 6);\n\n  location = search((int*)v2, (int*)v2 + 6, (int*)v3, (int*)v3 + 2);\n  CPPUNIT_ASSERT(location != v2 + 6);\n  CPPUNIT_ASSERT(location - v2 == 3);\n}\nvoid SearchTest::search1()\n{\n  typedef vector <int> IntVec;\n  IntVec v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  IntVec v2(3);\n  __iota(v2.begin(), v2.end(), 50);\n\n  IntVec::iterator location;\n  location = search(v1.begin(), v1.end(), v2.begin(), v2.end());\n\n  CPPUNIT_ASSERT(location == v1.end());\n\n  __iota(v2.begin(), v2.end(), 4);\n\n  location = search(v1.begin(), v1.end(), v2.begin(), v2.end());\n\n  CPPUNIT_ASSERT(location != v1.end());\n  CPPUNIT_ASSERT(location - v1.begin() == 4);\n}\nvoid SearchTest::search2()\n{\n  char const* grades[] = { \"A\", \"B\", \"C\", \"D\", \"F\" };\n  char const* letters[] = { \"Q\", \"E\", \"D\" };\n  const unsigned gradeCount = sizeof(grades) / sizeof(grades[0]);\n  const unsigned letterCount = sizeof(letters) / sizeof(letters[0]);\n  char const** location = search((char const**)grades, (char const**)grades + gradeCount, (char const**)letters, (char const**)letters + letterCount, str_equal);\n\n  CPPUNIT_ASSERT(location == grades + gradeCount);\n\n  copy((char const**)grades + 1, (char const**)grades + 1 + letterCount, (char const**)letters);\n  location = search((char const**)grades, (char const**)grades + gradeCount, (char const**)letters, (char const**)letters + letterCount, str_equal);\n\n  CPPUNIT_ASSERT(location != grades + gradeCount);\n  CPPUNIT_ASSERT(location - grades == 1);\n\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/set_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <set>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/set_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <set>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SetTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SetTest);\n  CPPUNIT_TEST(set1);\n  CPPUNIT_TEST(set2);\n  CPPUNIT_TEST(erase);\n  CPPUNIT_TEST(insert);\n  CPPUNIT_TEST(find);\n  CPPUNIT_TEST(bounds);\n  CPPUNIT_TEST(specialized_less);\n  CPPUNIT_TEST(implementation_check);\n  CPPUNIT_TEST(allocator_with_state);\n  CPPUNIT_TEST(reverse_iterator_test);\n#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(template_methods);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void set1();\n  void set2();\n  void erase();\n  void insert();\n  void find();\n  void bounds();\n  void specialized_less();\n  void implementation_check();\n  void allocator_with_state();\n  void reverse_iterator_test();\n  void template_methods();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SetTest);\n\n\n//\n// tests implementation\n//\nvoid SetTest::set1()\n{\n  set<int, less<int> > s;\n  CPPUNIT_ASSERT (s.count(42) == 0);\n  s.insert(42);\n  CPPUNIT_ASSERT (s.count(42) == 1);\n  s.insert(42);\n  CPPUNIT_ASSERT (s.count(42) == 1);\n  size_t count = s.erase(42);\n  CPPUNIT_ASSERT (count == 1);\n}\n\nvoid SetTest::set2()\n{\n  typedef set<int, less<int> > int_set;\n  int_set s;\n  pair<int_set::iterator, bool> p = s.insert(42);\n  CPPUNIT_ASSERT (p.second == true);\n  p = s.insert(42);\n  CPPUNIT_ASSERT (p.second == false);\n\n  int array1 [] = { 1, 3, 6, 7 };\n  s.insert(array1, array1 + 4);\n  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 5);\n\n  int_set s2;\n  s2.swap(s);\n  CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 5);\n  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);\n\n  int_set s3;\n  s3.swap(s);\n  s3.swap(s2);\n  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);\n  CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 0);\n  CPPUNIT_ASSERT (distance(s3.begin(), s3.end()) == 5);\n}\n\nvoid SetTest::erase()\n{\n  set<int, less<int> > s;\n  s.insert(1);\n  s.erase(s.begin());\n  CPPUNIT_ASSERT( s.empty() );\n\n  size_t nb = s.erase(1);\n  CPPUNIT_ASSERT(nb == 0);\n}\n\nvoid SetTest::insert()\n{\n  set<int> s;\n  set<int>::iterator i = s.insert( s.end(), 0 );\n  CPPUNIT_ASSERT( *i == 0 );\n}\n\nvoid SetTest::find()\n{\n  set<int> s;\n\n  CPPUNIT_ASSERT( s.find(0) == s.end() );\n\n  set<int> const& crs = s;\n\n  CPPUNIT_ASSERT( crs.find(0) == crs.end() );\n}\n\nvoid SetTest::bounds()\n{\n  int array1 [] = { 1, 3, 6, 7 };\n  set<int> s(array1, array1 + sizeof(array1) / sizeof(array1[0]));\n  set<int> const& crs = s;\n\n  set<int>::iterator sit;\n  set<int>::const_iterator scit;\n  pair<set<int>::iterator, set<int>::iterator> pit;\n  pair<set<int>::const_iterator, set<int>::const_iterator> pcit;\n\n  //Check iterator on mutable set\n  sit = s.lower_bound(2);\n  CPPUNIT_ASSERT( sit != s.end() );\n  CPPUNIT_ASSERT( *sit == 3 );\n\n  sit = s.upper_bound(5);\n  CPPUNIT_ASSERT( sit != s.end() );\n  CPPUNIT_ASSERT( *sit == 6 );\n\n  pit = s.equal_range(6);\n  CPPUNIT_ASSERT( pit.first != pit.second );\n  CPPUNIT_ASSERT( pit.first != s.end() );\n  CPPUNIT_ASSERT( *pit.first == 6 );\n  CPPUNIT_ASSERT( pit.second != s.end() );\n  CPPUNIT_ASSERT( *pit.second == 7 );\n\n  pit = s.equal_range(4);\n  CPPUNIT_ASSERT( pit.first == pit.second );\n  CPPUNIT_ASSERT( pit.first != s.end() );\n  CPPUNIT_ASSERT( *pit.first == 6 );\n  CPPUNIT_ASSERT( pit.second != s.end() );\n  CPPUNIT_ASSERT( *pit.second == 6 );\n\n  //Check const_iterator on mutable set\n  scit = s.lower_bound(2);\n  CPPUNIT_ASSERT( scit != s.end() );\n  CPPUNIT_ASSERT( *scit == 3 );\n\n  scit = s.upper_bound(5);\n  CPPUNIT_ASSERT( scit != s.end() );\n  CPPUNIT_ASSERT( *scit == 6 );\n\n#ifdef _STLP_MEMBER_TEMPLATES\n  pcit = s.equal_range(6);\n  CPPUNIT_ASSERT( pcit.first != pcit.second );\n  CPPUNIT_ASSERT( pcit.first != s.end() );\n  CPPUNIT_ASSERT( *pcit.first == 6 );\n  CPPUNIT_ASSERT( pcit.second != s.end() );\n  CPPUNIT_ASSERT( *pcit.second == 7 );\n#endif\n\n  //Check const_iterator on const set\n  scit = crs.lower_bound(2);\n  CPPUNIT_ASSERT( scit != crs.end() );\n  CPPUNIT_ASSERT( *scit == 3 );\n\n  scit = crs.upper_bound(5);\n  CPPUNIT_ASSERT( scit != crs.end() );\n  CPPUNIT_ASSERT( *scit == 6 );\n\n  pcit = crs.equal_range(6);\n  CPPUNIT_ASSERT( pcit.first != pcit.second );\n  CPPUNIT_ASSERT( pcit.first != crs.end() );\n  CPPUNIT_ASSERT( *pcit.first == 6 );\n  CPPUNIT_ASSERT( pcit.second != crs.end() );\n  CPPUNIT_ASSERT( *pcit.second == 7 );\n}\n\n\nclass SetTestClass {\npublic:\n  SetTestClass (int data) : _data(data)\n  {}\n\n  int data() const {\n    return _data;\n  }\n\nprivate:\n  int _data;\n};\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#endif\n#if defined (STLPORT)\n  _STLP_TEMPLATE_NULL\n#else\n  template <>\n#endif\n  struct less<SetTestClass> {\n    bool operator () (SetTestClass const& lhs, SetTestClass const& rhs) const {\n      return lhs.data() < rhs.data();\n    }\n  };\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n}\n#endif\n\nvoid SetTest::specialized_less()\n{\n  set<SetTestClass> s;\n  s.insert(SetTestClass(1));\n  s.insert(SetTestClass(3));\n  s.insert(SetTestClass(2));\n  s.insert(SetTestClass(0));\n\n  set<SetTestClass>::iterator sit(s.begin()), sitEnd(s.end());\n  int i = 0;\n  for (; sit != sitEnd; ++sit, ++i) {\n    CPPUNIT_ASSERT( sit->data() == i );\n  }\n}\n\nvoid SetTest::implementation_check()\n{\n  set<int> tree;\n  tree.insert(1);\n  set<int>::iterator it = tree.begin();\n  int const& int_ref = *it++;\n  CPPUNIT_ASSERT( int_ref == 1 );\n\n  CPPUNIT_ASSERT( it == tree.end() );\n  CPPUNIT_ASSERT( it != tree.begin() );\n\n  set<int>::const_iterator cit = tree.begin();\n  int const& int_cref = *cit++;\n  CPPUNIT_ASSERT( int_cref == 1 );\n}\n\nvoid SetTest::reverse_iterator_test()\n{\n  set<int> tree;\n  tree.insert(1);\n  tree.insert(2);\n\n  {\n    set<int>::reverse_iterator rit(tree.rbegin());\n    CPPUNIT_ASSERT( *(rit++) == 2 );\n    CPPUNIT_ASSERT( *(rit++) == 1 );\n    CPPUNIT_ASSERT( rit == tree.rend() );\n  }\n\n  {\n    set<int> const& ctree = tree;\n    set<int>::const_reverse_iterator rit(ctree.rbegin());\n    CPPUNIT_ASSERT( *(rit++) == 2 );\n    CPPUNIT_ASSERT( *(rit++) == 1 );\n    CPPUNIT_ASSERT( rit == ctree.rend() );\n  }\n}\n\nvoid SetTest::allocator_with_state()\n{\n  char buf1[1024];\n  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n  int i;\n  typedef set<int, less<int>, StackAllocator<int> > SetInt;\n  less<int> intLess;\n\n  {\n    SetInt sint1(intLess, stack1);\n    for (i = 0; i < 5; ++i)\n      sint1.insert(i);\n    SetInt sint1Cpy(sint1);\n\n    SetInt sint2(intLess, stack2);\n    for (; i < 10; ++i)\n      sint2.insert(i);\n    SetInt sint2Cpy(sint2);\n\n    sint1.swap(sint2);\n\n    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( sint1 == sint2Cpy );\n    CPPUNIT_ASSERT( sint2 == sint1Cpy );\n    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    SetInt sint1(intLess, stack1);\n    SetInt sint1Cpy(sint1);\n\n    SetInt sint2(intLess, stack2);\n    for (i = 0; i < 10; ++i)\n      sint2.insert(i);\n    SetInt sint2Cpy(sint2);\n\n    sint1.swap(sint2);\n\n    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( sint1 == sint2Cpy );\n    CPPUNIT_ASSERT( sint2 == sint1Cpy );\n    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    SetInt sint1(intLess, stack1);\n    for (i = 0; i < 10; ++i)\n      sint1.insert(i);\n    SetInt sint1Cpy(sint1);\n\n    SetInt sint2(intLess, stack2);\n    SetInt sint2Cpy(sint2);\n\n    sint1.swap(sint2);\n\n    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( sint1 == sint2Cpy );\n    CPPUNIT_ASSERT( sint2 == sint1Cpy );\n    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n}\n\nstruct Key\n{\n  Key() : m_data(0) {}\n  explicit Key(int data) : m_data(data) {}\n\n  int m_data;\n};\n\nstruct KeyCmp\n{\n  bool operator () (Key lhs, Key rhs) const\n  { return lhs.m_data < rhs.m_data; }\n\n  bool operator () (Key lhs, int rhs) const\n  { return lhs.m_data < rhs; }\n\n  bool operator () (int lhs, Key rhs) const\n  { return lhs < rhs.m_data; }\n};\n\nstruct KeyCmpPtr\n{\n  bool operator () (Key const volatile *lhs, Key const volatile *rhs) const\n  { return (*lhs).m_data < (*rhs).m_data; }\n\n  bool operator () (Key const volatile *lhs, int rhs) const\n  { return (*lhs).m_data < rhs; }\n\n  bool operator () (int lhs, Key const volatile *rhs) const\n  { return lhs < (*rhs).m_data; }\n};\n\nvoid SetTest::template_methods()\n{\n#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)\n  {\n    typedef set<Key, KeyCmp> KeySet;\n    KeySet keySet;\n    keySet.insert(Key(1));\n    keySet.insert(Key(2));\n    keySet.insert(Key(3));\n    keySet.insert(Key(4));\n\n    CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );\n    CPPUNIT_ASSERT( keySet.count(1) == 1 );\n    CPPUNIT_ASSERT( keySet.count(5) == 0 );\n\n    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );\n\n    KeySet const& ckeySet = keySet;\n    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );\n  }\n\n  {\n    typedef set<Key*, KeyCmpPtr> KeySet;\n    KeySet keySet;\n    Key key1(1), key2(2), key3(3), key4(4);\n    keySet.insert(&key1);\n    keySet.insert(&key2);\n    keySet.insert(&key3);\n    keySet.insert(&key4);\n\n    CPPUNIT_ASSERT( keySet.count(1) == 1 );\n    CPPUNIT_ASSERT( keySet.count(5) == 0 );\n\n    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );\n\n    KeySet const& ckeySet = keySet;\n    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );\n  }\n  {\n    typedef multiset<Key, KeyCmp> KeySet;\n    KeySet keySet;\n    keySet.insert(Key(1));\n    keySet.insert(Key(2));\n    keySet.insert(Key(3));\n    keySet.insert(Key(4));\n\n    CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );\n    CPPUNIT_ASSERT( keySet.count(1) == 1 );\n    CPPUNIT_ASSERT( keySet.count(5) == 0 );\n\n    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );\n\n    KeySet const& ckeySet = keySet;\n    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );\n  }\n\n  {\n    typedef multiset<Key const volatile*, KeyCmpPtr> KeySet;\n    KeySet keySet;\n    Key key1(1), key2(2), key3(3), key4(4);\n    keySet.insert(&key1);\n    keySet.insert(&key2);\n    keySet.insert(&key3);\n    keySet.insert(&key4);\n\n    CPPUNIT_ASSERT( keySet.count(1) == 1 );\n    CPPUNIT_ASSERT( keySet.count(5) == 0 );\n\n    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );\n    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );\n\n    KeySet const& ckeySet = keySet;\n    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );\n    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );\n  }\n#endif\n}\n\n#if !defined (STLPORT) || \\\n    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n#  if !defined (__DMC__)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  set<IncompleteClass> instances;\n  typedef set<IncompleteClass>::iterator it;\n  multiset<IncompleteClass> minstances;\n  typedef multiset<IncompleteClass>::iterator mit;\n};\n#  endif\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/setdiff_test.cpp",
    "content": "#include <numeric>\n#include <string>\n#include <iterator>\n#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SetDifferenceTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SetDifferenceTest);\n  CPPUNIT_TEST(setdiff0);\n  CPPUNIT_TEST(setdiff1);\n  CPPUNIT_TEST(setdiff2);\n  CPPUNIT_TEST(setsymd0);\n  CPPUNIT_TEST(setsymd1);\n  CPPUNIT_TEST(setsymd2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void setdiff0();\n  void setdiff1();\n  void setdiff2();\n  void setsymd0();\n  void setsymd1();\n  void setsymd2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SetDifferenceTest);\n\n//\n// tests implementation\n//\nvoid SetDifferenceTest::setsymd0()\n{\n  int v1[3] = { 13, 18, 23 };\n  int v2[4] = { 10, 13, 17, 23 };\n  int result[4] = { 0, 0, 0, 0 };\n\n  set_symmetric_difference((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);\n  CPPUNIT_ASSERT(result[0]==10);\n  CPPUNIT_ASSERT(result[1]==17);\n  CPPUNIT_ASSERT(result[2]==18);\n  CPPUNIT_ASSERT(result[3]==0);\n}\n\nvoid SetDifferenceTest::setsymd1()\n{\n  vector<int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector<int> v2(10);\n  __iota(v2.begin(), v2.end(), 7);\n\n  vector<int> diff;\n  set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(diff));\n  CPPUNIT_ASSERT( diff.size() == 14 );\n  int int_res[] = {0, 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16};\n  for (int i = 0; i < 14; ++i) {\n    CPPUNIT_ASSERT( diff[i] == int_res[i] );\n  }\n}\n\nvoid SetDifferenceTest::setsymd2()\n{\n  const char* word1 = \"ABCDEFGHIJKLMNO\";\n  const char* word2 = \"LMNOPQRSTUVWXYZ\";\n\n  string diff;\n  set_symmetric_difference(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2),\n                           back_inserter(diff), less<char>());\n  CPPUNIT_ASSERT( diff.size() == 22 );\n  char char_res[] = \"ABCDEFGHIJKPQRSTUVWXYZ\";\n  for (int i = 0; i < 22; ++i) {\n    CPPUNIT_ASSERT( diff[i] == char_res[i] );\n  }\n}\n\nvoid SetDifferenceTest::setdiff0()\n{\n  int v1[3] = { 13, 18, 23 };\n  int v2[4] = { 10, 13, 17, 23 };\n  int result[4] = { 0, 0, 0, 0 };\n  //18 0 0 0\n  //10 17 23 0\n\n  set_difference((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);\n  CPPUNIT_ASSERT( result[0] == 18 );\n  CPPUNIT_ASSERT( result[1] == 0 );\n  CPPUNIT_ASSERT( result[2] == 0 );\n  CPPUNIT_ASSERT( result[3] == 0 );\n\n  set_difference((int*)v2, (int*)v2 + 4, (int*)v1, (int*)v1 + 2, (int*)result);\n  CPPUNIT_ASSERT( result[0] == 10 );\n  CPPUNIT_ASSERT( result[1] == 17 );\n  CPPUNIT_ASSERT( result[2] == 23 );\n  CPPUNIT_ASSERT( result[3] == 0 );\n}\n\nvoid SetDifferenceTest::setdiff1()\n{\n  vector<int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector<int> v2(10);\n  __iota(v2.begin(), v2.end(), 7);\n\n  vector<int> diff;\n  set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(diff));\n  CPPUNIT_ASSERT( diff.size() == 7 );\n  for (int i = 0; i < 7; ++i) {\n    CPPUNIT_ASSERT( diff[i] == i );\n  }\n}\n\nvoid SetDifferenceTest::setdiff2()\n{\n  const char* word1 = \"ABCDEFGHIJKLMNO\";\n  const char* word2 = \"LMNOPQRSTUVWXYZ\";\n\n  string diff;\n  set_difference(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2), back_inserter(diff), less<char>());\n  CPPUNIT_ASSERT( diff.size() == 11 );\n  for (int i = 0; i < 11; ++i) {\n    CPPUNIT_ASSERT( diff[i] == ('A' + i) );\n  }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/setinter_test.cpp",
    "content": "#include <numeric>\n#include <string>\n#include <iterator>\n#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SetIntersectionTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SetIntersectionTest);\n  CPPUNIT_TEST(setintr0);\n  CPPUNIT_TEST(setintr1);\n  CPPUNIT_TEST(setintr2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void setintr0();\n  void setintr1();\n  void setintr2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SetIntersectionTest);\n\n//\n// tests implementation\n//\nvoid SetIntersectionTest::setintr0()\n{\n  int v1[3] = { 13, 18, 23 };\n  int v2[4] = { 10, 13, 17, 23 };\n  int result[4] = { 0, 0, 0, 0 };\n\n  set_intersection((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);\n\n  CPPUNIT_ASSERT(result[0]==13);\n  CPPUNIT_ASSERT(result[1]==23);\n  CPPUNIT_ASSERT(result[2]==0);\n  CPPUNIT_ASSERT(result[3]==0);\n}\n\nvoid SetIntersectionTest::setintr1()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector <int> v2(10);\n  __iota(v2.begin(), v2.end(), 7);\n\n  vector<int> inter;\n  set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(inter));\n  CPPUNIT_ASSERT( inter.size() == 3 );\n  CPPUNIT_ASSERT( inter[0] == 7 );\n  CPPUNIT_ASSERT( inter[1] == 8 );\n  CPPUNIT_ASSERT( inter[2] == 9 );\n}\n\nvoid SetIntersectionTest::setintr2()\n{\n  const char* word1 = \"ABCDEFGHIJKLMNO\";\n  const char* word2 = \"LMNOPQRSTUVWXYZ\";\n\n  string inter;\n  set_intersection(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2),\n                   back_inserter(inter), less<char>());\n  CPPUNIT_ASSERT( inter.size() == 4 );\n  CPPUNIT_ASSERT( inter[0] == 'L' );\n  CPPUNIT_ASSERT( inter[1] == 'M' );\n  CPPUNIT_ASSERT( inter[2] == 'N' );\n  CPPUNIT_ASSERT( inter[3] == 'O' );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/setjmp_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <setjmp.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/setjmp_header_test2.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n\n/*\n * Sometimes, if native setjmp.h was included first, the setjmp functions\n * situated in global namespace, not in vendor's std. This may confuse\n * following csetjmp\n */\n#include <setjmp.h>\n#include <csetjmp>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/setunion_test.cpp",
    "content": "#include <numeric>\n#include <string>\n#include <iterator>\n#include <vector>\n#include <algorithm>\n#include <functional>\n\n#include \"iota.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SetUnionTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SetUnionTest);\n  CPPUNIT_TEST(setunon0);\n  CPPUNIT_TEST(setunon1);\n  CPPUNIT_TEST(setunon2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void setunon0();\n  void setunon1();\n  void setunon2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SetUnionTest);\n\n//\n// tests implementation\n//\nvoid SetUnionTest::setunon0()\n{\n  int v1[3] = { 13, 18, 23 };\n  int v2[4] = { 10, 13, 17, 23 };\n  int result[7] = { 0, 0, 0, 0, 0, 0, 0 };\n\n  set_union((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);\n\n  CPPUNIT_ASSERT(result[0]==10);\n  CPPUNIT_ASSERT(result[1]==13);\n  CPPUNIT_ASSERT(result[2]==17);\n  CPPUNIT_ASSERT(result[3]==18);\n  CPPUNIT_ASSERT(result[4]==23);\n  CPPUNIT_ASSERT(result[5]==0);\n  CPPUNIT_ASSERT(result[6]==0);\n}\n\nvoid SetUnionTest::setunon1()\n{\n  vector <int> v1(10);\n  __iota(v1.begin(), v1.end(), 0);\n  vector <int> v2(10);\n  __iota(v2.begin(), v2.end(), 7);\n\n  vector<int> diff;\n  set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(diff));\n  CPPUNIT_ASSERT( diff.size() == 17 );\n  for (int i = 0; i < 17; ++i) {\n    CPPUNIT_ASSERT( diff[i] == i );\n  }\n}\n\nvoid SetUnionTest::setunon2()\n{\n  const char* word1 = \"ABCDEFGHIJKLMNO\";\n  const char* word2 = \"LMNOPQRSTUVWXYZ\";\n\n  string diff;\n  set_union(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2),\n            back_inserter(diff), less<char>());\n  CPPUNIT_ASSERT( diff.size() == 26 );\n  for (int i = 0; i < 26; ++i) {\n    CPPUNIT_ASSERT( diff[i] == ('A' + i) );\n  }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/shared_ptr_test.cpp",
    "content": "#include <memory>\n\n#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT)\n\n// #include <typeinfo>\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\nclass SharedPtrTest :\n    public CPPUNIT_NS::TestCase\n{\n    CPPUNIT_TEST_SUITE(SharedPtrTest);\n    CPPUNIT_TEST(shared_from_this);\n    CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void shared_from_this();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SharedPtrTest);\n\nstruct X;\n\nstruct X :\n    public std::tr1::enable_shared_from_this<X>\n{\n};\n\nvoid SharedPtrTest::shared_from_this()\n{\n  std::tr1::shared_ptr<X> p( new X );\n  std::tr1::shared_ptr<X> q = p->shared_from_this();\n\n  CPPUNIT_CHECK( p == q );\n  CPPUNIT_CHECK( !(p < q) && !(q < p) ); // p and q share ownership\n}\n\n#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/signal_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <signal.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/slist_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <algorithm>\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n#  include <slist>\n#  if !defined (_STLP_USE_NO_IOSTREAMS)\n#    include <sstream>\n#  endif\n#  include <iterator>\n#  include <functional>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n#if !defined (STLPORT) && defined(__GNUC__)\nusing namespace __gnu_cxx;\n#endif\n\n//\n// TestCase class\n//\nclass SlistTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SlistTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS) || defined (_STLP_USE_NO_IOSTREAMS) \n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(slist1);\n#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS) \n  CPPUNIT_STOP_IGNORE;\n#endif\n  CPPUNIT_TEST(erase);\n  CPPUNIT_TEST(insert);\n  CPPUNIT_TEST(splice);\n  CPPUNIT_TEST(allocator_with_state);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void slist1();\n  void erase();\n  void insert();\n  void splice();\n  void allocator_with_state();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SlistTest);\n\n//\n// tests implementation\n//\nvoid SlistTest::slist1()\n{\n#if defined (STLPORT) && !defined (_STLP_USE_NO_IOSTREAMS) && !defined (_STLP_NO_EXTENSIONS)\n/*\noriginal: xlxtss\nreversed: sstxlx\nremoved: sstl\nuniqued: stl\nsorted: lst\n*/\n\n  char array [] = { 'x', 'l', 'x', 't', 's', 's' };\n  ostringstream os;\n  ostream_iterator<char> o(os,\"\");\n  slist<char> str(array+0, array + 6);\n  slist<char>::iterator i;\n  //Check const_iterator construction from iterator\n  slist<char>::const_iterator ci(i);\n  slist<char>::const_iterator ci2(ci);\n//  cout << \"reversed: \";\n  str.reverse();\n  for(i = str.begin(); i != str.end(); i++)\n    os << *i;\n  stringbuf* buff=os.rdbuf();\n  string result=buff->str();\n  CPPUNIT_ASSERT(!strcmp(result.c_str(),\"sstxlx\"));\n\n  //cout << \"removed: \";\n  str.remove('x');\n  ostringstream os2;\n  for(i = str.begin(); i != str.end(); i++)\n    os2 << *i;\n  buff=os2.rdbuf();\n  result=buff->str();\n  CPPUNIT_ASSERT(!strcmp(result.c_str(),\"sstl\"));\n\n\n  //cout << \"uniqued: \";\n  str.unique();\n  ostringstream os3;\n  for(i = str.begin(); i != str.end(); i++)\n    os3 << *i;\n  buff=os3.rdbuf();\n  result=buff->str();\n  CPPUNIT_ASSERT(!strcmp(result.c_str(),\"stl\"));\n\n  //cout << \"sorted: \";\n  str.sort();\n  ostringstream os4;\n  for(i = str.begin(); i != str.end(); i++)\n    os4 << *i;\n  buff = os4.rdbuf();\n  result = buff->str();\n  CPPUNIT_ASSERT(!strcmp(result.c_str(),\"lst\"));\n\n  //A small compilation time check to be activated from time to time:\n#  if 0\n  {\n    slist<char>::iterator sl_char_ite;\n    slist<int>::iterator sl_int_ite;\n    CPPUNIT_ASSERT( sl_char_ite != sl_int_ite );\n  }\n#  endif\n#endif\n}\n\nvoid SlistTest::erase()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int array[] = { 0, 1, 2, 3, 4 };\n  slist<int> sl(array, array + 5);\n  slist<int>::iterator slit;\n\n  slit = sl.erase(sl.begin());\n  CPPUNIT_ASSERT( *slit == 1);\n\n  ++slit++; ++slit;\n  slit = sl.erase(sl.begin(), slit);\n  CPPUNIT_ASSERT( *slit == 3 );\n\n  sl.assign(array, array + 5);\n\n  slit = sl.erase_after(sl.begin());\n  CPPUNIT_ASSERT( *slit == 2 );\n\n  slit = sl.begin(); ++slit; ++slit;\n  slit = sl.erase_after(sl.begin(), slit);\n  CPPUNIT_ASSERT( *slit == 3 );\n\n  sl.erase_after(sl.before_begin());\n  CPPUNIT_ASSERT( sl.front() == 3 );\n#endif\n}\n\nvoid SlistTest::insert()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int array[] = { 0, 1, 2, 3, 4 };\n\n  //insert\n  {\n    slist<int> sl;\n\n    sl.insert(sl.begin(), 5);\n    CPPUNIT_ASSERT( sl.front() == 5 );\n    CPPUNIT_ASSERT( sl.size() == 1 );\n\n    //debug mode check:\n    //sl.insert(sl.before_begin(), array, array + 5);\n\n    sl.insert(sl.begin(), array, array + 5);\n    CPPUNIT_ASSERT( sl.size() == 6 );\n    int i;\n    slist<int>::iterator slit(sl.begin());\n    for (i = 0; slit != sl.end(); ++slit, ++i) {\n      CPPUNIT_ASSERT( *slit == i );\n    }\n  }\n\n  //insert_after\n  {\n    slist<int> sl;\n\n    //debug check:\n    //sl.insert_after(sl.begin(), 5);\n\n    sl.insert_after(sl.before_begin(), 5);\n    CPPUNIT_ASSERT( sl.front() == 5 );\n    CPPUNIT_ASSERT( sl.size() == 1 );\n\n    sl.insert_after(sl.before_begin(), array, array + 5);\n    CPPUNIT_ASSERT( sl.size() == 6 );\n    int i;\n    slist<int>::iterator slit(sl.begin());\n    for (i = 0; slit != sl.end(); ++slit, ++i) {\n      CPPUNIT_ASSERT( *slit == i );\n    }\n  }\n#endif\n}\n\nvoid SlistTest::splice()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int array[] = { 0, 1, 2, 3, 4 };\n\n  //splice\n  {\n    slist<int> sl1(array, array + 5);\n    slist<int> sl2(array, array + 5);\n    slist<int>::iterator slit;\n\n    //a no op:\n    sl1.splice(sl1.begin(), sl1, sl1.begin());\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    slit = sl1.begin(); ++slit;\n    //a no op:\n    sl1.splice(slit, sl1, sl1.begin());\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    sl1.splice(sl1.end(), sl1, sl1.begin());\n    slit = sl1.begin();\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *(slit++) == 2 );\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *(slit++) == 4 );\n    CPPUNIT_ASSERT( *slit == 0 );\n    sl1.splice(sl1.begin(), sl1, slit);\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    sl1.splice(sl1.begin(), sl2);\n    size_t i;\n    for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) {\n      if (i == 5) i = 0;\n      CPPUNIT_ASSERT( *slit == array[i] );\n    }\n\n    slit = sl1.begin();\n    advance(slit, 5);\n    CPPUNIT_ASSERT( *slit == 0 );\n    sl2.splice(sl2.begin(), sl1, sl1.begin(), slit);\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    slit = sl1.begin(); ++slit;\n    sl1.splice(sl1.begin(), sl1, slit, sl1.end());\n    slit = sl1.begin();\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *(slit++) == 2 );\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *(slit++) == 4 );\n    CPPUNIT_ASSERT( *slit == 0 );\n\n    // a no op\n    sl2.splice(sl2.end(), sl2, sl2.begin(), sl2.end());\n    for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) {\n      CPPUNIT_ASSERT( i < 5 );\n      CPPUNIT_ASSERT( *slit == array[i] );\n    }\n\n    slit = sl2.begin();\n    advance(slit, 3);\n    sl2.splice(sl2.end(), sl2, sl2.begin(), slit);\n    slit = sl2.begin();\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *(slit++) == 4 );\n    CPPUNIT_ASSERT( *(slit++) == 0 );\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *slit == 2 );\n  }\n\n  //splice_after\n  {\n    slist<int> sl1(array, array + 5);\n    slist<int> sl2(array, array + 5);\n    slist<int>::iterator slit;\n\n    //a no op:\n    sl1.splice_after(sl1.begin(), sl1, sl1.begin());\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    sl1.splice_after(sl1.before_begin(), sl1, sl1.begin());\n    slit = sl1.begin();\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *(slit++) == 0 );\n    CPPUNIT_ASSERT( *(slit++) == 2 );\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *slit == 4 );\n    sl1.splice_after(sl1.before_begin(), sl1, sl1.begin());\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    sl1.splice_after(sl1.before_begin(), sl2);\n    size_t i;\n    for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) {\n      if (i == 5) i = 0;\n      CPPUNIT_ASSERT( *slit == array[i] );\n    }\n\n    slit = sl1.begin();\n    advance(slit, 4);\n    CPPUNIT_ASSERT( *slit == 4 );\n    sl2.splice_after(sl2.before_begin(), sl1, sl1.before_begin(), slit);\n    CPPUNIT_ASSERT( sl1 == sl2 );\n\n    sl1.splice_after(sl1.before_begin(), sl1, sl1.begin(), sl1.previous(sl1.end()));\n    slit = sl1.begin();\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *(slit++) == 2 );\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *(slit++) == 4 );\n    CPPUNIT_ASSERT( *slit == 0 );\n\n    // a no op\n    sl2.splice_after(sl2.before_begin(), sl2, sl2.before_begin(), sl2.previous(sl2.end()));\n    for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) {\n      CPPUNIT_ASSERT( i < 5 );\n      CPPUNIT_ASSERT( *slit == array[i] );\n    }\n\n    slit = sl2.begin();\n    advance(slit, 2);\n    sl2.splice_after(sl2.previous(sl2.end()), sl2, sl2.before_begin(), slit);\n    slit = sl2.begin();\n    CPPUNIT_ASSERT( *(slit++) == 3 );\n    CPPUNIT_ASSERT( *(slit++) == 4 );\n    CPPUNIT_ASSERT( *(slit++) == 0 );\n    CPPUNIT_ASSERT( *(slit++) == 1 );\n    CPPUNIT_ASSERT( *slit == 2 );\n  }\n#endif\n}\n\n\nvoid SlistTest::allocator_with_state()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  char buf1[1024];\n  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n  typedef slist<int, StackAllocator<int> > SlistInt;\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint1Cpy(slint1);\n\n    SlistInt slint2(10, 1, stack2);\n    SlistInt slint2Cpy(slint2);\n\n    slint1.swap(slint2);\n\n    CPPUNIT_ASSERT( slint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( slint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( slint1 == slint2Cpy );\n    CPPUNIT_ASSERT( slint2 == slint1Cpy );\n    CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    SlistInt slint1(stack1);\n    SlistInt slint1Cpy(slint1);\n\n    SlistInt slint2(10, 1, stack2);\n    SlistInt slint2Cpy(slint2);\n\n    slint1.swap(slint2);\n\n    CPPUNIT_ASSERT( slint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( slint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( slint1 == slint2Cpy );\n    CPPUNIT_ASSERT( slint2 == slint1Cpy );\n    CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint1Cpy(slint1);\n\n    SlistInt slint2(stack2);\n    SlistInt slint2Cpy(slint2);\n\n    slint1.swap(slint2);\n\n    CPPUNIT_ASSERT( slint1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( slint2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( slint1 == slint2Cpy );\n    CPPUNIT_ASSERT( slint2 == slint1Cpy );\n    CPPUNIT_ASSERT( slint1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( slint2.get_allocator() == stack1 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice(iterator, slist)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    slint1.splice(slint1.begin(), slint2);\n    CPPUNIT_ASSERT( slint1.size() == 20 );\n    CPPUNIT_ASSERT( slint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice(iterator, slist, iterator)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    slint1.splice(slint1.begin(), slint2, slint2.begin());\n    CPPUNIT_ASSERT( slint1.size() == 11 );\n    CPPUNIT_ASSERT( slint2.size() == 9 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice(iterator, slist, iterator, iterator)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    SlistInt::iterator lit(slint2.begin());\n    advance(lit, 5);\n    slint1.splice(slint1.begin(), slint2, slint2.begin(), lit);\n    CPPUNIT_ASSERT( slint1.size() == 15 );\n    CPPUNIT_ASSERT( slint2.size() == 5 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice_after(iterator, slist)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    slint1.splice_after(slint1.before_begin(), slint2);\n    CPPUNIT_ASSERT( slint1.size() == 20 );\n    CPPUNIT_ASSERT( slint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice_after(iterator, slist, iterator)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin());\n    CPPUNIT_ASSERT( slint1.size() == 11 );\n    CPPUNIT_ASSERT( slint2.size() == 9 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //splice_after(iterator, slist, iterator, iterator)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    SlistInt::iterator lit(slint2.begin());\n    advance(lit, 4);\n    slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin(), lit);\n    CPPUNIT_ASSERT( slint1.size() == 15 );\n    CPPUNIT_ASSERT( slint2.size() == 5 );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  //merge(slist)\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    SlistInt slintref(stack2);\n    slintref.insert_after(slintref.before_begin(), 10, 1);\n    slintref.insert_after(slintref.before_begin(), 10, 0);\n\n    slint1.merge(slint2);\n    CPPUNIT_ASSERT( slint1.size() == 20 );\n    CPPUNIT_ASSERT( slint1 == slintref );\n    CPPUNIT_ASSERT( slint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n\n  //merge(slist, predicate)\n#  if (!defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)) && \\\n      (!defined (_MSC_VER) || (_MSC_VER >= 1300))\n  {\n    SlistInt slint1(10, 0, stack1);\n    SlistInt slint2(10, 1, stack2);\n\n    SlistInt slintref(stack2);\n    slintref.insert_after(slintref.before_begin(), 10, 0);\n    slintref.insert_after(slintref.before_begin(), 10, 1);\n\n    slint1.merge(slint2, greater<int>());\n    CPPUNIT_ASSERT( slint1.size() == 20 );\n    CPPUNIT_ASSERT( slint1 == slintref );\n    CPPUNIT_ASSERT( slint2.empty() );\n  }\n  CPPUNIT_CHECK( stack1.ok() );\n  CPPUNIT_CHECK( stack2.ok() );\n\n  //sort\n  {\n    //This is rather a compile time test.\n    //We check that sort implementation is correct when list is instanciated\n    //with an allocator that do not have a default constructor.\n    SlistInt slint1(stack1);\n    slint1.push_front(1);\n    slint1.insert_after(slint1.before_begin(), 10, 0);\n    greater<int> gt;\n    slint1.sort(gt);\n    CPPUNIT_ASSERT( slint1.front() == 1 );\n    slint1.sort();\n    SlistInt::iterator slit(slint1.begin());\n    advance(slit, 10);\n    CPPUNIT_ASSERT( *slit == 1 );\n  }\n#  endif\n#endif\n}\n\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \\\n    (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION))\n#  if !defined (__DMC__)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  slist<IncompleteClass> instances;\n  typedef slist<IncompleteClass>::iterator it;\n};\n#  endif\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/sort_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <functional>\n\n#if defined (STLPORT) && defined (_STLP_DEBUG) && defined (_STLP_DEBUG_MODE_THROWS)\n#  define _STLP_DO_CHECK_BAD_PREDICATE\n#  include <stdexcept>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SortTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SortTest);\n  CPPUNIT_TEST(sort1);\n  CPPUNIT_TEST(sort2);\n  CPPUNIT_TEST(sort3);\n  CPPUNIT_TEST(sort4);\n  CPPUNIT_TEST(stblsrt1);\n  CPPUNIT_TEST(stblsrt2);\n#if defined (_STLP_DO_CHECK_BAD_PREDICATE)\n  CPPUNIT_TEST(bad_predicate_detected);\n#endif\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void sort1();\n  void sort2();\n  void sort3();\n  void sort4();\n  void stblsrt1();\n  void stblsrt2();\n  void bad_predicate_detected();\n\n  static bool string_less(const char* a_, const char* b_)\n  {\n    return strcmp(a_, b_) < 0 ? 1 : 0;\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SortTest);\n\n//\n// tests implementation\n//\nvoid SortTest::stblsrt1()\n{\n  //Check that stable_sort do sort\n  int numbers[6] = { 1, 50, -10, 11, 42, 19 };\n  stable_sort(numbers, numbers + 6);\n  //-10 1 11 19 42 50\n  CPPUNIT_ASSERT(numbers[0]==-10);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==11);\n  CPPUNIT_ASSERT(numbers[3]==19);\n  CPPUNIT_ASSERT(numbers[4]==42);\n  CPPUNIT_ASSERT(numbers[5]==50);\n\n  char const* letters[6] = {\"bb\", \"aa\", \"ll\", \"dd\", \"qq\", \"cc\" };\n  stable_sort(letters, letters + 6, string_less);\n  // aa bb cc dd ll qq\n  CPPUNIT_ASSERT( strcmp(letters[0], \"aa\") == 0 );\n  CPPUNIT_ASSERT( strcmp(letters[1], \"bb\") == 0 );\n  CPPUNIT_ASSERT( strcmp(letters[2], \"cc\") == 0 );\n  CPPUNIT_ASSERT( strcmp(letters[3], \"dd\") == 0 );\n  CPPUNIT_ASSERT( strcmp(letters[4], \"ll\") == 0 );\n  CPPUNIT_ASSERT( strcmp(letters[5], \"qq\") == 0 );\n}\n\nstruct Data {\n  Data(int index, int value)\n    : m_index(index), m_value(value) {}\n\n  bool operator == (const Data& other) const\n  { return m_index == other.m_index && m_value == other.m_value; }\n  bool operator < (const Data& other) const\n  { return m_value < other.m_value; }\n\nprivate:\n  int m_index, m_value;\n};\n\nvoid SortTest::stblsrt2()\n{\n  //Check that stable_sort is stable:\n  Data datas[] = {\n    Data(0, 10),\n    Data(1, 8),\n    Data(2, 6),\n    Data(3, 6),\n    Data(4, 6),\n    Data(5, 4),\n    Data(6, 9)\n  };\n  stable_sort(datas, datas + 7);\n\n  CPPUNIT_ASSERT( datas[0] == Data(5, 4) );\n  CPPUNIT_ASSERT( datas[1] == Data(2, 6) );\n  CPPUNIT_ASSERT( datas[2] == Data(3, 6) );\n  CPPUNIT_ASSERT( datas[3] == Data(4, 6) );\n  CPPUNIT_ASSERT( datas[4] == Data(1, 8) );\n  CPPUNIT_ASSERT( datas[5] == Data(6, 9) );\n  CPPUNIT_ASSERT( datas[6] == Data(0, 10) );\n}\n\nvoid SortTest::sort1()\n{\n  int numbers[6] = { 1, 50, -10, 11, 42, 19 };\n\n  sort(numbers, numbers + 6);\n  // -10 1 11 19 42 50\n  CPPUNIT_ASSERT(numbers[0]==-10);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==11);\n  CPPUNIT_ASSERT(numbers[3]==19);\n  CPPUNIT_ASSERT(numbers[4]==42);\n  CPPUNIT_ASSERT(numbers[5]==50);\n}\n\nvoid SortTest::sort2()\n{\n  int numbers[] = { 1, 50, -10, 11, 42, 19 };\n\n  int count = sizeof(numbers) / sizeof(numbers[0]);\n  sort(numbers, numbers + count, greater<int>());\n\n  //  50 42 19 11 1 -10\n  CPPUNIT_ASSERT(numbers[5]==-10);\n  CPPUNIT_ASSERT(numbers[4]==1);\n  CPPUNIT_ASSERT(numbers[3]==11);\n  CPPUNIT_ASSERT(numbers[2]==19);\n  CPPUNIT_ASSERT(numbers[1]==42);\n  CPPUNIT_ASSERT(numbers[0]==50);\n}\n\nvoid SortTest::sort3()\n{\n  vector<bool> boolVector;\n\n  boolVector.push_back( true );\n  boolVector.push_back( false );\n\n  sort( boolVector.begin(), boolVector.end() );\n\n  CPPUNIT_ASSERT(boolVector[0]==false);\n  CPPUNIT_ASSERT(boolVector[1]==true);\n}\n\n/*\n * A small utility class to check a potential compiler bug\n * that can result in a bad sort algorithm behavior. The type\n * _Tp of the SortTestFunc has to be SortTestAux without any\n * reference qualifier.\n */\nstruct SortTestAux {\n  SortTestAux (bool &b) : _b(b)\n  {}\n\n  SortTestAux (SortTestAux const&other) : _b(other._b) {\n    _b = true;\n  }\n\n  bool &_b;\n\nprivate:\n  //explicitely defined as private to avoid warnings:\n  SortTestAux& operator = (SortTestAux const&);\n};\n\ntemplate <class _Tp>\nvoid SortTestFunc (_Tp) {\n}\n\nvoid SortTest::sort4()\n{\n  bool copy_constructor_called = false;\n  SortTestAux instance(copy_constructor_called);\n  SortTestAux &r_instance = instance;\n  SortTestAux const& rc_instance = instance;\n\n  SortTestFunc(r_instance);\n  CPPUNIT_ASSERT(copy_constructor_called);\n  copy_constructor_called = false;\n  SortTestFunc(rc_instance);\n  CPPUNIT_ASSERT(copy_constructor_called);\n}\n\n#if defined (_STLP_DO_CHECK_BAD_PREDICATE)\nvoid SortTest::bad_predicate_detected()\n{\n  int numbers[] = { 0, 0, 1, 0, 0, 1, 0, 0 };\n  try {\n    sort(numbers, numbers + sizeof(numbers) / sizeof(numbers[0]), less_equal<int>());\n\n    //Here is means that no exception has been raised\n    CPPUNIT_ASSERT( false );\n  }\n  catch (runtime_error const&)\n  { /*OK bad predicate has been detected.*/ }\n\n  try {\n    stable_sort(numbers, numbers + sizeof(numbers) / sizeof(numbers[0]), less_equal<int>());\n\n    //Here is means that no exception has been raised\n    CPPUNIT_ASSERT( false );\n  }\n  catch (runtime_error const&)\n  { /*OK bad predicate has been detected.*/ }\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/sstream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <sstream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/sstream_test.cpp",
    "content": "#include <string>\n#include \"math_aux.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n#  include <memory>\n\n#  include \"full_streambuf.h\"\n\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// TestCase class\n//\nclass SstreamTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SstreamTest);\n  CPPUNIT_TEST(output);\n  CPPUNIT_TEST(input);\n  CPPUNIT_TEST(input_char);\n  CPPUNIT_TEST(io);\n  CPPUNIT_TEST(err);\n  CPPUNIT_TEST(err_long);\n  CPPUNIT_TEST(maxint);\n  CPPUNIT_TEST(init_in);\n  CPPUNIT_TEST(init_out);\n  CPPUNIT_TEST(buf);\n  CPPUNIT_TEST(rdbuf);\n  CPPUNIT_TEST(streambuf_output);\n  CPPUNIT_TEST(seek);\n  CPPUNIT_TEST(seekp);\n  CPPUNIT_TEST(seek_gp);\n  CPPUNIT_TEST(tellp);\n  CPPUNIT_TEST(negative);\n  CPPUNIT_TEST_SUITE_END();\n\n  protected:\n    void output();\n    void input();\n    void input_char();\n    void io();\n    void err();\n    void err_long();\n    void maxint();\n    void init_in();\n    void init_out();\n    void buf();\n    void rdbuf();\n    void streambuf_output();\n    void seek();\n    void seekp();\n    void seek_gp();\n    void tellp();\n    void negative();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SstreamTest);\n\n//\n// tests implementation\n//\nvoid SstreamTest::output()\n{\n  {\n    ostringstream s;\n\n    s << 1 << '\\n' << 2.0 << '\\n' << \"abcd\\n\" << \"ghk lm\\n\" << \"abcd ef\";\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( s.str() == \"1\\n2\\nabcd\\nghk lm\\nabcd ef\" );\n  }\n\n  //Following tests are mostly used to reveal problem with the MSVC /Wp64 option\n  //used to track 64 bits portability issue:\n  {\n    ostringstream s;\n    size_t i = 0;\n    s << i;\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( s.str() == \"0\" );\n  }\n  {\n    ostringstream s;\n    ptrdiff_t i = 0;\n    s << i;\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( s.str() == \"0\" );\n  }\n}\n\nvoid SstreamTest::input()\n{\n  {\n    istringstream s( \"1\\n2\\nabcd\\nghk lm\\nabcd ef\" );\n    int i = 0;\n    s >> i;\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( i == 1 );\n    double d = 0.0;\n    s >> d;\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( d == 2.0 );\n    string str;\n    s >> str;\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( str == \"abcd\" );\n    char c;\n    s.get(c); // extract newline, that not extracted by operator >>\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( c == '\\n' );\n    getline( s, str );\n    CPPUNIT_ASSERT( s.good() );\n    CPPUNIT_ASSERT( str == \"ghk lm\" );\n    getline( s, str );\n    CPPUNIT_ASSERT( s.eof() );\n    CPPUNIT_ASSERT( str == \"abcd ef\" );\n  }\n  {\n    istringstream s(\"0\");\n    size_t i = 1;\n    s >> i;\n    CPPUNIT_ASSERT( !s.fail() );\n    CPPUNIT_ASSERT( s.eof() );\n    CPPUNIT_ASSERT( i == 0 );\n  }\n}\n\nvoid SstreamTest::input_char()\n{\n  char buf[16] = { 0, '1', '2', '3' };\n  istringstream s( \"0\" );\n  s >> buf;\n\n  CPPUNIT_ASSERT( buf[0] == '0' );\n  CPPUNIT_ASSERT( buf[1] == 0 );\n  CPPUNIT_ASSERT( buf[2] == '2' );\n}\n\n\nvoid SstreamTest::io()\n{\n  stringstream s;\n  s << 1 << '\\n' << 2.0 << '\\n' << \"abcd\\n\" << \"ghk lm\\n\" << \"abcd ef\";\n  CPPUNIT_ASSERT( s.good() );\n\n  int i = 0;\n  s >> i;\n  CPPUNIT_ASSERT( i == 1 );\n  CPPUNIT_ASSERT( s.good() );\n  double d = 0.0;\n  s >> d;\n  CPPUNIT_ASSERT( d == 2.0 );\n  CPPUNIT_ASSERT( s.good() );\n  string str;\n  s >> str;\n  CPPUNIT_ASSERT( str == \"abcd\" );\n  CPPUNIT_ASSERT( s.good() );\n  char c;\n  s.get(c); // extract newline, that not extracted by operator >>\n  CPPUNIT_ASSERT( s.good() );\n  CPPUNIT_ASSERT( c == '\\n' );\n  getline( s, str );\n  CPPUNIT_ASSERT( s.good() );\n  CPPUNIT_ASSERT( str == \"ghk lm\" );\n  getline( s, str );\n  CPPUNIT_ASSERT( str == \"abcd ef\" );\n  CPPUNIT_ASSERT( s.eof() );\n}\n\nvoid SstreamTest::err()\n{\n  stringstream s( \"9\" );\n\n  int i = 0;\n  s >> i;\n  CPPUNIT_ASSERT( !s.fail() );\n  CPPUNIT_ASSERT( i == 9 );\n  s >> i;\n  CPPUNIT_ASSERT( s.fail() );\n  CPPUNIT_ASSERT( s.eof() );\n  CPPUNIT_ASSERT( i == 9 );\n}\n\nvoid SstreamTest::err_long()\n{\n  stringstream s( \"9\" );\n\n  long i = 0;\n  s >> i;\n  CPPUNIT_ASSERT( !s.fail() );\n  CPPUNIT_ASSERT( i == 9 );\n  s >> i;\n  CPPUNIT_ASSERT( s.fail() );\n  CPPUNIT_ASSERT( s.eof() );\n  CPPUNIT_ASSERT( i == 9 );\n}\n\nvoid SstreamTest::maxint()\n{\n  stringstream s;\n\n  s << INT_MAX << \" \" << UINT_MAX << \" \" << LONG_MAX << \" \" << ULONG_MAX << \" \"\n    << INT_MIN << \" \" << LONG_MIN;\n  CPPUNIT_ASSERT( s.good() );\n\n  int i = 0;\n  unsigned int u = 0;\n  long l = 0;\n  unsigned long ul = 0;\n\n  s >> i >> u >> l >> ul;\n  CPPUNIT_ASSERT( s.good() );\n  CPPUNIT_ASSERT( i == INT_MAX );\n  CPPUNIT_ASSERT( u == UINT_MAX );\n  CPPUNIT_ASSERT( l == LONG_MAX );\n  CPPUNIT_ASSERT( ul == ULONG_MAX );\n\n  s >> i >> l;\n  CPPUNIT_ASSERT( !s.fail() );\n  CPPUNIT_ASSERT( i == INT_MIN );\n  CPPUNIT_ASSERT( l == LONG_MIN );\n}\n\nvoid SstreamTest::init_in()\n{\n  istringstream is( \"12345\" );\n  int n;\n\n  is >> n;\n  CPPUNIT_ASSERT( !is.fail() );\n  CPPUNIT_ASSERT( n == 12345 );\n\n  istringstream dis( \"1.2345\" );\n  double d;\n\n  dis >> d;\n  CPPUNIT_ASSERT( !dis.fail() );\n  CPPUNIT_ASSERT( are_equals(d, 1.2345) );\n\n  istringstream fis( \"1.2345\" );\n  float f;\n\n  fis >> f;\n  CPPUNIT_ASSERT( !fis.fail() );\n  CPPUNIT_ASSERT( are_equals(f, 1.2345f) );\n}\n\nvoid SstreamTest::init_out()\n{\n  ostringstream os( \"12345\" );\n  CPPUNIT_ASSERT( os.str() == \"12345\" );\n\n  os << 67;\n  CPPUNIT_ASSERT( os.good() );\n\n  // This satisfy to the Standard:\n  // CPPUNIT_ASSERT( os.str() == \"67345\" );\n  // But we don't know the reason, why standard state that.\n\n  /*\n   * 27.7.1.1: ... then copies the content of str into the basic_sringbuf\n   * underlying character sequence and initializes the input and output\n   * sequences according to which. If which & ios_base::out is true, initializes\n   * the output sequence with underlying sequence. ...\n   *\n   * I can treat this as 'like output was performed', and then I should bump\n   * put pointer... Looks like more useful then my previous treatment.\n   *\n   *          - ptr\n   */\n\n  CPPUNIT_ASSERT( os.str() == \"1234567\" );\n  \n\n  os.str( \"89ab\" );\n  CPPUNIT_ASSERT( os.str() == \"89ab\" );\n\n  os << 10;\n  CPPUNIT_ASSERT( os.good() );\n  // CPPUNIT_ASSERT( os.str() == \"10ab\" );\n  CPPUNIT_ASSERT( os.str() == \"89ab10\" );\n}\n\nvoid SstreamTest::buf()\n{\n  stringstream ss;\n\n  ss << \"1234567\\n89\\n\";\n  char buf[10];\n  buf[7] = 'x';\n  ss.get( buf, 10 );\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( buf[0] == '1' );\n  CPPUNIT_ASSERT( buf[1] == '2' );\n  CPPUNIT_ASSERT( buf[2] == '3' );\n  CPPUNIT_ASSERT( buf[3] == '4' );\n  CPPUNIT_ASSERT( buf[4] == '5' );\n  CPPUNIT_ASSERT( buf[5] == '6' );\n  CPPUNIT_ASSERT( buf[6] == '7' ); // 27.6.1.3 paragraph 10, paragraph 7\n  CPPUNIT_ASSERT( buf[7] == 0 ); // 27.6.1.3 paragraph 8\n  char c;\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '\\n' ); // 27.6.1.3 paragraph 10, paragraph 7\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '8' );\n}\n\nvoid SstreamTest::rdbuf()\n{\n  stringstream ss;\n\n  ss << \"1234567\\n89\\n\";\n\n  ostringstream os;\n  ss.get( *os.rdbuf(), '\\n' );\n  CPPUNIT_ASSERT( !ss.fail() );\n  char c;\n  ss.get(c);\n  CPPUNIT_ASSERT( !ss.fail() );\n  CPPUNIT_ASSERT( c == '\\n' ); // 27.6.1.3 paragraph 12\n  CPPUNIT_ASSERT( os.str() == \"1234567\" );\n}\n\nvoid SstreamTest::streambuf_output()\n{\n  {\n    istringstream in(\"01234567890123456789\");\n    CPPUNIT_ASSERT( in );\n\n    full_streambuf full_buf(10);\n    ostream out(&full_buf);\n    CPPUNIT_ASSERT( out );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out );\n    CPPUNIT_ASSERT( in );\n    //out is good we can check what has been extracted:\n    CPPUNIT_ASSERT( full_buf.str() == \"0123456789\" );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.fail() );\n    CPPUNIT_ASSERT( in );\n\n    ostringstream ostr;\n    ostr << in.rdbuf();\n    CPPUNIT_ASSERT( ostr );\n    CPPUNIT_ASSERT( in );\n    CPPUNIT_ASSERT( ostr.str() == \"0123456789\" );\n  }\n\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  {\n    //If the output stream buffer throws:\n    istringstream in(\"01234567890123456789\");\n    CPPUNIT_ASSERT( in );\n\n    full_streambuf full_buf(10, true);\n    ostream out(&full_buf);\n    CPPUNIT_ASSERT( out );\n\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.bad() );\n    CPPUNIT_ASSERT( in );\n    //out is bad we have no guaranty on what has been extracted:\n    //CPPUNIT_ASSERT( full_buf.str() == \"0123456789\" );\n\n    out.clear();\n    out << in.rdbuf();\n    CPPUNIT_ASSERT( out.fail() && out.bad() );\n    CPPUNIT_ASSERT( in );\n\n    ostringstream ostr;\n    ostr << in.rdbuf();\n    CPPUNIT_ASSERT( ostr );\n    CPPUNIT_ASSERT( in );\n    CPPUNIT_ASSERT( ostr.str() == \"01234567890123456789\" );\n  }\n#  endif\n}\n\nvoid SstreamTest::seek()\n{\n  stringstream s( \"0123456789\" );\n\n  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(0) );\n  s.seekg( 6, ios::beg );\n  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(6) );\n  s.seekg( -3, ios::cur );\n  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(3) );\n\n  istringstream is( \"0123456789\" );\n  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(0) );\n  is.seekg( 6, ios::beg );\n  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(6) );\n  is.seekg( -3, ios::cur );\n  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(3) );\n}\n\nvoid SstreamTest::seekp()\n{\n  ostringstream s;\n\n  s << \"1234567\";\n  CPPUNIT_CHECK( s.tellp() == stringstream::pos_type(7) );\n  CPPUNIT_CHECK( s.str() == \"1234567\" );\n  s.seekp( 0 );\n  s << \"X\";\n  CPPUNIT_CHECK( s.str() == \"X234567\" );\n  s.seekp( 0, ios::beg );\n  s << \"Y\";\n  CPPUNIT_CHECK( s.str() == \"Y234567\" );\n}\n\nvoid SstreamTest::seek_gp()\n{\n  stringstream ss( \"1\" );\n\n  /* ISO/IEC 14882 2003 (and 1998 too) assume change as get as put positions\n     with seekg and seekp (27.6.1.3, par 38; 27.6.2.4 par 2),\n     but this contradict to common practice and proposed draft N2588\n     (27.6.1.3, par 41; 27.6.2.5, par 4)\n\n     Now STLport implement (i.e. change behaviour ) the draft's point of view.\n   */\n\n  ss.seekg( 0, ios::beg );\n  ss.seekp( 0, ios::end );\n  \n  ss << \"2\";\n\n  string str;\n\n  ss >> str;\n\n  /*  CPPUNIT_CHECK( str == \"2\" ); --- according ISO/IEC 14882 2003 */\n  CPPUNIT_CHECK( str == \"12\" );\n}\n\nvoid SstreamTest::tellp()\n{\n  {\n    ostringstream o( \"1\" );\n\n    o << \"23456\";\n\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(6) );\n    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(6) );\n  }\n  {\n    ostringstream o;\n\n    o << \"123456\";\n\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(6) );\n    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(6) );\n  }\n  {\n    ostringstream o( \"1\" );\n\n    o << \"23456789\";\n\n    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(9) );\n    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(9) );\n  }\n}\n\n\ntemplate < class T >\nstring to_string( const T& v )\n{\n  ostringstream oss;\n  oss << v;\n  return oss.str();\n}\n\nvoid SstreamTest::negative()\n{\n  CPPUNIT_CHECK( to_string<int>(-1) == \"-1\" );\n  CPPUNIT_CHECK( to_string<long>(-1) == \"-1\" );\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stack_allocator.h",
    "content": "#ifndef STLPORT_UNIT_TEST_STACK_ALLOCATOR_H\n#define STLPORT_UNIT_TEST_STACK_ALLOCATOR_H\n\n#include <algorithm>\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n//For bad_alloc:\n#  include <new>\n#endif\n\n#undef __STD\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n#  define __STD std::\n#else\n#  define __STD\n#endif\n\nstruct State {\n  char *m_beg, *m_end, *m_cur;\n  bool m_isOk, m_swaped;\n  int m_nbAlloc;\n\n  //The following members are shared among all StackAllocator instance created from\n  //a reference StackAllocator instance:\n  char **m_sharedCur;\n  bool *m_sharedOk;\n  int *m_sharedNbAlloc;\n\n#if defined (__DMC__)\n  State(){}\n#endif\n\n  State(char *beg, char *end)\n    : m_beg(beg), m_end(end), m_cur(m_beg), m_isOk(true), m_swaped(false), m_nbAlloc(0),\n      m_sharedCur(&m_cur), m_sharedOk(&m_isOk), m_sharedNbAlloc(&m_nbAlloc) {}\n\n  State(const State& other)\n  : m_beg(other.m_beg), m_end(other.m_end), m_cur(0),\n    m_isOk(true), m_swaped(other.m_swaped), m_nbAlloc(0),\n    m_sharedCur(other.m_sharedCur), m_sharedOk(other.m_sharedOk),\n    m_sharedNbAlloc(other.m_sharedNbAlloc) {}\n};\n\n/* This allocator is not thread safe:\n */\ntemplate <class _Tp>\nstruct StackAllocator\n#if defined (STLPORT) && \\\n    defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)\n  //Special Borland workaround that have problem with function\n  //overloading when one of the overloaded version is a template\n  //one. This is the case for the std::swap function.\n  : public __STD __stlport_class<StackAllocator<_Tp> >\n#endif\n{\n  typedef _Tp        value_type;\n  typedef value_type *       pointer;\n  typedef const _Tp* const_pointer;\n  typedef _Tp&       reference;\n  typedef const _Tp& const_reference;\n  typedef size_t     size_type;\n  typedef ptrdiff_t  difference_type;\n\n#if defined (__DMC__)\n  StackAllocator(){}\n#endif\n\n  StackAllocator(char *beg, char *end)\n    : m_state(beg, end) {}\n\n  const State& getState() const { return m_state; }\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  template <class _OtherTp>\n  StackAllocator(StackAllocator<_OtherTp> const& other)\n    : m_state(other.getState()) {}\n#else\n  StackAllocator(const State& state)\n    : m_state(state) {}\n#endif\n\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATE_CLASSES)\n  template <class _Other>\n  struct rebind {\n    typedef StackAllocator<_Other> other;\n  };\n#endif\n\n  _Tp* allocate(size_type n, void* = 0) {\n    if (n == 0)\n      return 0;\n\n    ++(*m_state.m_sharedNbAlloc);\n\n    if (*m_state.m_sharedCur + (n * sizeof(_Tp)) < m_state.m_end) {\n      char *ret = *m_state.m_sharedCur;\n      *m_state.m_sharedCur += n * sizeof(_Tp);\n      return reinterpret_cast<_Tp*>(ret);\n    }\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    throw __STD bad_alloc();\n#  if defined (__DMC__)\n    return 0;\n#  endif\n#else\n    return 0;\n#endif\n  }\n\n#if defined (STLPORT) && \\\n    defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)\n  //Necessary extension to make StackAllocator a real STLport allocator\n  //implementation:\n  _Tp* _M_allocate(size_type n, size_type &new_n) {\n    new_n = n;\n    return allocate(n);\n  }\n#endif\n\n  void deallocate(pointer p, size_type n) {\n    if (p == 0)\n      return;\n\n    --(*m_state.m_sharedNbAlloc);\n\n    if ((char*)p == (*m_state.m_sharedCur - n * sizeof(_Tp))) {\n      *m_state.m_sharedCur -= n * sizeof(_Tp);\n    }\n\n    if ((char*)p < m_state.m_beg || (char*)p >= m_state.m_end) {\n      //An object has been returned to the bad allocator instance:\n      *m_state.m_sharedOk = false;\n    }\n  }\n\n  pointer address(reference __x) const {return &__x;}\n  const_pointer address(const_reference __x) const { return &__x; }\n  size_type max_size() const { return m_state.m_end - *m_state.m_sharedCur; }\n  void construct(pointer __p, const_reference __val) { new(__p) _Tp(__val);  }\n  void destroy(pointer __p) { __p->~_Tp(); }\n\n  bool ok() const { return m_state.m_isOk && (m_state.m_nbAlloc == 0); }\n  void reset () {\n    m_state.m_cur = m_state.m_beg;\n    m_state.m_isOk = true;\n    m_state.m_swaped = false;\n  }\n  bool swaped() const { return m_state.m_swaped; }\n  void swap(StackAllocator &other) {\n    __STD swap(m_state, other.m_state);\n    m_state.m_swaped = true;\n    other.m_state.m_swaped = true;\n  }\n#if defined (STLPORT) && \\\n    defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)\n  void _M_swap_workaround(StackAllocator& __x) { swap(__x); }\n#endif\n\n  //2 StackAllocator instance are identical if they are built on top\n  //of the same buffer.\n  bool operator == (StackAllocator const& other) const\n  { return m_state.m_beg == other.m_state.m_beg; }\n\n  bool operator != (StackAllocator const& other) const\n  { return !(*this == other); }\n\nprivate:\n  State m_state;\n};\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#endif\n\n#  if defined (STLPORT) && (defined (_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) || !defined (_STLP_MEMBER_TEMPLATES))\ntemplate <class _Tp1, class _Tp2>\ninline StackAllocator<_Tp2>&\n__stl_alloc_rebind(StackAllocator<_Tp1>& __a, const _Tp2*) {  return (StackAllocator<_Tp2>&)(__a); }\ntemplate <class _Tp1, class _Tp2>\ninline StackAllocator<_Tp2>\n__stl_alloc_create(const StackAllocator<_Tp1>& __a, const _Tp2*) { return StackAllocator<_Tp2>(__a.getState()); }\n#  endif\n\n#  if !defined (STLPORT) || defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)\n  template <class _Tp>\n  inline void swap(StackAllocator<_Tp>& __a, StackAllocator<_Tp>& __b)\n  { __a.swap(__b); }\n#  elif !defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)\n//The following overloads depends on instanciation, if new unit tests are written\n//with new StackAllocator instanciations associated swap overload should also be\n//written\ninline void swap(StackAllocator<int>& __a, StackAllocator<int>& __b)\n{ __a.swap(__b); }\ninline void swap(StackAllocator<char>& __a, StackAllocator<char>& __b)\n{ __a.swap(__b); }\ninline void swap(StackAllocator<pair<const int, int> >& __a,\n                 StackAllocator<pair<const int, int> >& __b)\n{ __a.swap(__b); }\n#  endif\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\n}\n#endif\n\n#undef __STD\n\n#endif //STLPORT_UNIT_TEST_STACK_ALLOCATOR_H\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stack_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stack>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stack_test.cpp",
    "content": "#include <algorithm>\n#include <list>\n#include <queue>\n#include <deque>\n#include <stack>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass StackTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(StackTest);\n  CPPUNIT_TEST(stack1);\n  CPPUNIT_TEST(stack2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void stack1();\n  void stack2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(StackTest);\n\n//\n// tests implementation\n//\nvoid StackTest::stack1()\n{\n  stack<int, deque<int> > s;\n  s.push(42);\n  s.push(101);\n  s.push(69);\n  CPPUNIT_ASSERT(s.top()==69);\n  s.pop();\n  CPPUNIT_ASSERT(s.top()==101);\n  s.pop();\n  CPPUNIT_ASSERT(s.top()==42);\n  s.pop();\n  CPPUNIT_ASSERT(s.empty());\n}\nvoid StackTest::stack2()\n{\n  stack<int, list<int> > s;\n  s.push(42);\n  s.push(101);\n  s.push(69);\n  CPPUNIT_ASSERT(s.top()==69);\n  s.pop();\n  CPPUNIT_ASSERT(s.top()==101);\n  s.pop();\n  CPPUNIT_ASSERT(s.top()==42);\n  s.pop();\n  CPPUNIT_ASSERT(s.empty());\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stdarg_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stdarg.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stddef_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stddef.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stdexcept_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stdexcept>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stdio_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stdio.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stdlib_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <stdlib.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/stldbg_include.cpp",
    "content": "/*\n * This is compile-time test for situation below not happen.\n * STLport use many defines and auxilary structures, namespaces and templates\n * that included via _prolog.h. After preprocessor phase we may see:\n *\n * extern \"C\" {\n *\n * namespace std { }\n *\n *\n * This is bad, but acceptable. But in STLPORT_DEBUG mode we can see\n *\n * extern \"C\" {\n *\n * namespace std {\n * namespace private {\n *\n * template <class _Dummy>\n * class __stl_debug_engine {\n *\n * \n * This lead to compile-time error.\n * [This due to sys/types.h contains\n *\n *  __BEGIN_DECLS\n *  #include <bits/types.h>\n *\n * \n * i.e. include other headers within extern \"C\" { scope. Bad, but this is fact.]\n *\n * Origin of problem: STLport provide proxy-headers as for C++ headers, as for C\n * headers. For C headers, we shouldn't expose C++ constructions, because system\n * headers may include each other by unexpected way (from STLport point of view).\n *\n *           - ptr, 2007-04-05\n */\n\n#ifdef __unix\n# include <sys/types.h>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/streambuf_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <streambuf>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/string_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <string.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/string_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <string>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/string_test.cpp",
    "content": "//To make GLib C++ closer to STLport behavior we need this macro:\n//Only mandatory when building unit tests without STLport, do not change\n//anything when building with STLport\n#define _GLIBCXX_FULLY_DYNAMIC_STRING\n\n//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <vector>\n#include <deque>\n#include <string>\n#include <algorithm>\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <sstream>\n#endif\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n#  include <stdexcept>\n#endif\n\n#if !defined (STLPORT) || defined (_STLP_THREADS)\n#  if defined (STLPORT) && defined (_STLP_PTHREADS) || \\\n      defined (__GNUC__) && !defined (__MINGW32__)\n#    define USE_PTHREAD_API\n#    include <pthread.h>\n#  endif\n\n#  if defined (STLPORT) && defined (_STLP_WIN32THREADS) || \\\n      defined (__GNUC__) && defined (__MINGW32__) || \\\n      defined (_MSC_VER)\n#    define USE_WINDOWS_API\n#    include <windows.h>\n#  endif\n#endif\n\n#include \"stack_allocator.h\"\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass StringTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(StringTest);\n  CPPUNIT_TEST(constructor);\n  CPPUNIT_TEST(trivial_char_compare);\n  CPPUNIT_TEST(reserve);\n  CPPUNIT_TEST(assign);\n  CPPUNIT_TEST(erase);\n  CPPUNIT_TEST(data);\n  CPPUNIT_TEST(c_str);\n  CPPUNIT_TEST(null_char);\n  CPPUNIT_TEST(insert);\n  CPPUNIT_TEST(replace);\n  CPPUNIT_TEST(resize);\n  CPPUNIT_TEST(short_string);\n  CPPUNIT_TEST(find);\n  CPPUNIT_TEST(bogus_edge_find);\n  CPPUNIT_TEST(rfind);\n  CPPUNIT_TEST(find_last_of);\n  CPPUNIT_TEST(find_last_not_of);\n  CPPUNIT_TEST(copy);\n#if !defined (USE_PTHREAD_API) && !defined (USE_WINDOWS_API)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(mt);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(short_string_optim_bug);\n  CPPUNIT_TEST(compare);\n  CPPUNIT_TEST(template_expression);\n#if defined (STLPORT) && ((defined (_STLP_MSVC) && (_STLP_MSVC < 1300)) || \\\n   (defined(__GNUC__) && defined(_STLP_USE_TEMPLATE_EXPRESSION) && \\\n    ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)) ) )\n#  define TE_TMP_TEST_IGNORED\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(te_tmp);\n#if defined (TE_TMP_TEST_IGNORED)\n  CPPUNIT_STOP_IGNORE;\n#endif\n  CPPUNIT_TEST(oper_tmp);\n#if defined (STLPORT) && defined (_STLP_NO_WCHAR_T)\n  CPPUNIT_IGNORE;\n#endif\n#if defined (__CYGWIN__) && !defined (STLPORT)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(template_wexpression);\n  CPPUNIT_STOP_IGNORE;\n#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(io);\n  CPPUNIT_STOP_IGNORE;\n#if defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(allocator_with_state);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(capacity);\n  CPPUNIT_TEST(concat24);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void constructor();\n  void trivial_char_compare();\n  void reserve();\n  void erase();\n  void data();\n  void c_str();\n  void null_char();\n  void insert();\n  void replace();\n  void resize();\n  void short_string();\n  void find();\n  void bogus_edge_find();\n  void rfind();\n  void find_last_of();\n  void find_last_not_of();\n  void copy();\n  void assign();\n  void mt();\n  void short_string_optim_bug();\n  void compare();\n  void template_expression();\n  void te_tmp();\n  void oper_tmp();\n  void template_wexpression();\n  void io();\n  void allocator_with_state();\n  void capacity();\n  void concat24();\n\n  static string func(const string& par) {\n    string tmp( par );\n    return tmp;\n  }\n\n#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API)\n#  if defined (USE_PTHREAD_API)\n  static void* f(void*)\n#  else\n  static DWORD __stdcall f(void*)\n#  endif\n  {\n    string s( \"qyweyuewunfkHBUKGYUGL,wehbYGUW^(@T@H!BALWD:h^&@#*@(#:JKHWJ:CND\" );\n\n    for ( int i = 0; i < 2000000; ++i ) {\n      string sx = func( s );\n    }\n\n    return 0;\n  }\n#endif\n\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(StringTest);\n\n//\n// tests implementation\n//\nvoid StringTest::constructor()\n{\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    string s((size_t)-1, 'a');\n    CPPUNIT_FAIL;\n  }\n  catch (length_error const&) {\n  }\n  catch (...) {\n    //Expected exception is length_error:\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid StringTest::trivial_char_compare()\n{\n  string s( \"message\" );\n\n  CPPUNIT_CHECK( s == \"message\" );\n  CPPUNIT_CHECK( \"message\" == s );\n}\n\nvoid StringTest::reserve()\n{\n  string s;\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    s.reserve(s.max_size() + 1);\n    CPPUNIT_FAIL;\n  }\n  catch (length_error const&) {\n  }\n  catch (...) {\n    //Expected exception is length_error:\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid StringTest::mt()\n{\n#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API)\n  const int nth = 2;\n#  if defined (USE_PTHREAD_API)\n  pthread_t t[nth];\n\n  for ( int i = 0; i < nth; ++i ) {\n    pthread_create( &t[i], 0, f, 0 );\n  }\n\n  for ( int i = 0; i < nth; ++i ) {\n    pthread_join( t[i], 0 );\n  }\n#  endif // PTHREAD\n\n#  if defined (USE_WINDOWS_API)\n  //DWORD start = GetTickCount();\n\n  HANDLE t[nth];\n\n  int i; // VC6 not support in-loop scope of cycle var\n  for ( i = 0; i < nth; ++i ) {\n    t[i] = CreateThread(NULL, 0, f, 0, 0, NULL);\n  }\n\n  if (WaitForMultipleObjects(nth, t, TRUE, INFINITE) == WAIT_FAILED) {\n    // On some platforms (evc3/evc4) WaitForMultipleObjects() with fWaitAll == TRUE\n    // is not supported. We then wait with a loop on each thread:\n    for ( i = 0; i < nth; ++i ) {\n      WaitForSingleObject(t[i], INFINITE);\n    }\n  }\n\n  /*\n  DWORD duration = GetTickCount() - start;\n  ostringstream ostr;\n  ostr << \"Duration: \" << duration << endl;\n  CPPUNIT_MESSAGE(ostr.str().c_str());\n  */\n#  endif\n#endif\n}\n\nvoid StringTest::short_string()\n{\n  string const ref_short_str1(\"str1\"), ref_short_str2(\"str2\");\n  string short_str1(ref_short_str1), short_str2(ref_short_str2);\n  string const ref_long_str1(\"str                                                  1\");\n  string const ref_long_str2(\"str                                                  2\");\n  string long_str1(ref_long_str1), long_str2(ref_long_str2);\n\n  CPPUNIT_ASSERT(short_str1 == ref_short_str1);\n  CPPUNIT_ASSERT(long_str1 == ref_long_str1);\n\n  {\n    string str1(short_str1);\n    str1 = long_str1;\n    CPPUNIT_ASSERT(str1 == ref_long_str1);\n  }\n\n  {\n    string str1(long_str1);\n    str1 = short_str1;\n    CPPUNIT_ASSERT(str1 == ref_short_str1);\n  }\n\n  {\n    short_str1.swap(short_str2);\n    CPPUNIT_ASSERT((short_str1 == ref_short_str2) && (short_str2 == ref_short_str1));\n    short_str1.swap(short_str2);\n  }\n\n  {\n    long_str1.swap(long_str2);\n    CPPUNIT_ASSERT((long_str1 == ref_long_str2) && (long_str2 == ref_long_str1));\n    long_str1.swap(long_str2);\n  }\n\n  {\n    short_str1.swap(long_str1);\n    CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));\n    short_str1.swap(long_str1);\n  }\n\n  {\n    long_str1.swap(short_str1);\n    CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));\n    long_str1.swap(short_str1);\n  }\n\n  {\n    string a(256, 'a');\n    string b(256, 'b');\n    const char* as = a.c_str();\n    const char* bs = b.c_str();\n    swap(a, b);\n    CPPUNIT_ASSERT( a.c_str() == bs );\n    CPPUNIT_ASSERT( b.c_str() == as );\n  }\n\n  {\n    //This is to test move constructor\n    vector<string> str_vect;\n    str_vect.push_back(short_str1);\n    str_vect.push_back(long_str1);\n    str_vect.push_back(short_str2);\n    str_vect.push_back(long_str2);\n    CPPUNIT_ASSERT((str_vect[0] == ref_short_str1) &&\n                   (str_vect[1] == ref_long_str1) &&\n                   (str_vect[2] == ref_short_str2) &&\n                   (str_vect[3] == ref_long_str2));\n  }\n}\n\nvoid StringTest::erase()\n{\n  char const* c_str = \"Hello, World!\";\n  string str(c_str);\n  CPPUNIT_ASSERT( str == c_str );\n\n  str.erase(str.begin() + 1, str.end() - 1); // Erase all but first and last.\n\n  size_t i;\n  for (i = 0; i < str.size(); ++i) {\n    switch ( i ) {\n      case 0:\n        CPPUNIT_ASSERT( str[i] == 'H' );\n        break;\n      case 1:\n        CPPUNIT_ASSERT( str[i] == '!' );\n        break;\n      default:\n        CPPUNIT_FAIL;\n    }\n  }\n\n  str.insert(1, c_str);\n  str.erase(str.begin()); // Erase first element.\n  str.erase(str.end() - 1); // Erase last element.\n  CPPUNIT_ASSERT( str == c_str );\n  str.clear(); // Erase all.\n  CPPUNIT_ASSERT( str.empty() );\n\n  str = c_str;\n  CPPUNIT_ASSERT( str == c_str );\n\n  str.erase(1, str.size() - 1); // Erase all but first and last.\n  for (i = 0; i < str.size(); i++) {\n    switch ( i ) {\n      case 0:\n        CPPUNIT_ASSERT( str[i] == 'H' );\n        break;\n      case 1:\n        CPPUNIT_ASSERT( str[i] == '!' );\n        break;\n      default:\n        CPPUNIT_FAIL;\n    }\n  }\n\n  str.erase(1);\n  CPPUNIT_ASSERT( str == \"H\" );\n}\n\nvoid StringTest::data()\n{\n  string xx;\n\n  CPPUNIT_ASSERT( xx.data() != 0 );  // ISO-IEC-14882:1998(E), 21.3.6, paragraph 3\n#if 0\n  /* This test really not required: in ISO-IEC-14882:1998(E) paragraph 3 stated:\n   * '... and can have zero added to it', again: 'CAN', but not 'MUST'.\n   * That's why I am comment this test. But I don't remove it due to I had\n   * unevident problem with misinterpretation of data() return (i.e. data()\n   * and c_str() provide different functionality!) and expect that this is\n   * more-or-less common pitfall.\n   *    - ptr\n   */\n  string low( \"2004-01-01\" );\n  // Blocks A and B should follow each other.\n  // Block A:\n  xx = \"123456\";\n  xx += low;\n  if ( strcmp( xx.data(), \"1234562004-01-01\" ) != 0 ) {\n    return -1;\n  }\n  // End of block A\n\n  // Block B:\n  xx = \"1234\";\n  xx += \";\";\n\n  if ( strcmp( xx.data(), \"1234;\" ) != 0 ) {\n    return -1;\n  }\n  // End of block B\n#endif\n}\n\nvoid StringTest::c_str()\n{\n  string low( \"2004-01-01\" );\n  string xx;\n  string yy;\n\n  CPPUNIT_ASSERT( *(yy.c_str()) == '\\0' ); // ISO-IEC-14882:1998(E), 21.3.6, paragraph 1\n\n  // Blocks A and B should follow each other.\n  // Block A:\n  xx = \"123456\";\n  xx += low;\n  CPPUNIT_ASSERT( strcmp( xx.c_str(), \"1234562004-01-01\" ) == 0 );\n  // End of block A\n\n  // Block B:\n  xx = \"1234\";\n  xx += \";\";\n  CPPUNIT_ASSERT( strcmp( xx.c_str(), \"1234;\" ) == 0 );\n  // End of block B\n}\n\nvoid StringTest::null_char()\n{\n  // ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), 21.3.4 ('... the const version')\n  const string s( \"123456\" );\n\n  CPPUNIT_CHECK( s[s.size()] == '\\0' );\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    //Check is only here to avoid warning about value of expression not used\n    CPPUNIT_CHECK( s.at(s.size()) == '\\0' );\n    CPPUNIT_FAIL;\n  }\n  catch (out_of_range const&) {\n    CPPUNIT_ASSERT( true );\n  }\n  catch ( ... ) {\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid StringTest::insert()\n{\n  string strorg = \"This is test string for string calls\";\n  string str;\n  /*\n   * In case of reallocation there is no auto reference problem\n   * so we reserve a big enough string to be sure to test this\n   * particular point.\n   */\n  str.reserve(100);\n  str = strorg;\n\n  //test self insertion:\n  str.insert(10, str.c_str() + 5, 15);\n  CPPUNIT_ASSERT( str == \"This is teis test string st string for string calls\" );\n\n  str = strorg;\n  str.insert(15, str.c_str() + 5, 25);\n  CPPUNIT_ASSERT( str == \"This is test stis test string for stringring for string calls\" );\n\n  str = strorg;\n  str.insert(0, str.c_str() + str.size() - 4, 4);\n  CPPUNIT_ASSERT( str == \"allsThis is test string for string calls\" );\n\n  str = strorg;\n  str.insert(0, str.c_str() + str.size() / 2 - 1, str.size() / 2 + 1);\n  CPPUNIT_ASSERT( str == \"ng for string callsThis is test string for string calls\" );\n\n  str = strorg;\n  string::iterator b = str.begin();\n  string::const_iterator s = str.begin() + str.size() / 2 - 1;\n  string::const_iterator e = str.end();\n  str.insert( b, s, e );\n  CPPUNIT_ASSERT( str == \"ng for string callsThis is test string for string calls\" );\n\n  str = strorg;\n  str.insert(str.begin(), str.begin() + str.size() / 2 - 1, str.end());\n  CPPUNIT_ASSERT( str == \"ng for string callsThis is test string for string calls\" );\n\n#ifdef _STLP_MEMBER_TEMPLATES\n  vector<int> int_vect;\n  //Just a compile time test:\n  str.insert(str.end(), int_vect.begin(), int_vect.end());\n#endif\n\n  string str0;\n  str0.insert(str0.begin(), 5, '0');\n  CPPUNIT_ASSERT( str0 == \"00000\" );\n\n  string str1;\n  {\n    string::size_type pos = 0, nb = 2;\n    str1.insert(pos, nb, '1');\n  }\n  CPPUNIT_ASSERT( str1 == \"11\" );\n\n  str0.insert(0, str1);\n  CPPUNIT_ASSERT( str0 == \"1100000\" );\n\n  string str2(\"2345\");\n  str0.insert(str0.size(), str2, 1, 2);\n  CPPUNIT_ASSERT( str0 == \"110000034\" );\n\n  str1.insert(str1.begin() + 1, 2, '2');\n  CPPUNIT_ASSERT( str1 == \"1221\" );\n\n  str1.insert(2, \"333333\", 3);\n  CPPUNIT_ASSERT( str1 == \"1233321\" );\n\n  str1.insert(4, \"4444\");\n  CPPUNIT_ASSERT( str1 == \"12334444321\" );\n\n  str1.insert(str1.begin() + 6, '5');\n  CPPUNIT_ASSERT( str1 == \"123344544321\" );\n}\n\nvoid StringTest::replace()\n{\n  /*\n   * This test case is for the non template basic_string::replace method,\n   * this is why we play with the const iterators and reference to guaranty\n   * that the right method is called.\n   */\n  const string v( \"78\" );\n  string s( \"123456\" );\n  string const& cs = s;\n\n  string::iterator i = s.begin() + 1;\n  s.replace(i, i + 3, v.begin(), v.end());\n  CPPUNIT_ASSERT( s == \"17856\" );\n\n  s = \"123456\";\n  i = s.begin() + 1;\n  s.replace(i, i + 1, v.begin(), v.end());\n  CPPUNIT_ASSERT( s == \"1783456\" );\n\n  s = \"123456\";\n  i = s.begin() + 1;\n  string::const_iterator ci = s.begin() + 1;\n  s.replace(i, i + 3, ci + 3, cs.end());\n  CPPUNIT_ASSERT( s == \"15656\" );\n\n  s = \"123456\";\n  i = s.begin() + 1;\n  ci = s.begin() + 1;\n  s.replace(i, i + 3, ci, ci + 2);\n  CPPUNIT_ASSERT( s == \"12356\" );\n\n  s = \"123456\";\n  i = s.begin() + 1;\n  ci = s.begin() + 1;\n  s.replace(i, i + 3, ci + 1, cs.end());\n  CPPUNIT_ASSERT( s == \"1345656\" );\n\n  s = \"123456\";\n  i = s.begin();\n  ci = s.begin() + 1;\n  s.replace(i, i, ci, ci + 1);\n  CPPUNIT_CHECK( s == \"2123456\" );\n\n  s = \"123456\";\n  s.replace(s.begin() + 4, s.end(), cs.begin(), cs.end());\n  CPPUNIT_ASSERT( s == \"1234123456\" );\n\n  /*\n   * This is the test for the template replace method.\n   */\n  s = \"123456\";\n  string::iterator b = s.begin() + 4;\n  string::iterator e = s.end();\n  string::const_iterator rb = s.begin();\n  string::const_iterator re = s.end();\n  s.replace(b, e, rb, re);\n  CPPUNIT_ASSERT( s == \"1234123456\" );\n\n  s = \"123456\";\n  s.replace(s.begin() + 4, s.end(), s.begin(), s.end());\n  CPPUNIT_ASSERT( s == \"1234123456\" );\n\n  string strorg(\"This is test string for string calls\");\n  string str = strorg;\n  str.replace(5, 15, str.c_str(), 10);\n  CPPUNIT_ASSERT( str == \"This This is tefor string calls\" );\n\n  str = strorg;\n  str.replace(5, 5, str.c_str(), 10);\n  CPPUNIT_ASSERT( str == \"This This is test string for string calls\" );\n\n#if (defined (STLPORT) && defined(_STLP_MEMBER_TEMPLATES)) || ( !defined (STLPORT) && !defined(__GNUC__) )\n  deque<char> cdeque;\n  cdeque.push_back('I');\n  str.replace(str.begin(), str.begin() + 11, cdeque.begin(), cdeque.end());\n  CPPUNIT_ASSERT( str == \"Is test string for string calls\" );\n#endif\n}\n\nvoid StringTest::resize()\n{\n  string s;\n\n  s.resize(0);\n\n  CPPUNIT_ASSERT( *s.c_str() == 0 );\n\n  s = \"1234567\";\n\n  s.resize(0);\n  CPPUNIT_ASSERT( *s.c_str() == 0 );\n\n  s = \"1234567\";\n  s.resize(1);\n  CPPUNIT_ASSERT( s.size() == 1 );\n  CPPUNIT_ASSERT( *s.c_str() == '1' );\n  CPPUNIT_ASSERT( *(s.c_str() + 1) == 0 );\n\n  s = \"1234567\";\n  s.resize(10);\n  CPPUNIT_ASSERT( s.size() == 10 );\n  CPPUNIT_ASSERT( s[6] == '7' );\n  CPPUNIT_ASSERT( s[7] == 0 );\n  CPPUNIT_ASSERT( s[8] == 0 );\n  CPPUNIT_ASSERT( s[9] == 0 );\n}\n\nvoid StringTest::find()\n{\n  string s(\"one two three one two three\");\n  CPPUNIT_ASSERT( s.find(\"one\") == 0 );\n  CPPUNIT_ASSERT( s.find('t') == 4 );\n  CPPUNIT_ASSERT( s.find('t', 5) == 8 );\n  //We are trying to get a const reference to the npos string static member to\n  //force the compiler to allocate memory for this variable. It is used to reveal\n  //a bug of STLport which was simply declaring npos without instanciating it.\n#if defined (STLPORT) && defined (_STLP_STATIC_CONST_INIT_BUG)\n  string::size_type const& npos_local = string::npos;\n#else\n#  define npos_local string::npos\n#endif\n  CPPUNIT_ASSERT( s.find(\"four\") == npos_local );\n  CPPUNIT_ASSERT( s.find(\"one\", string::npos) == npos_local );\n\n  CPPUNIT_ASSERT( s.find_first_of(\"abcde\") == 2 );\n\n  CPPUNIT_ASSERT( s.find_first_not_of(\"enotw \") == 9 );\n\n  string empty;\n  CPPUNIT_ASSERT( s.substr(s.find(empty), empty.size()) == empty );\n}\n\nvoid StringTest::bogus_edge_find()\n{\n  /* ISO/IEC 14882 2003, 21.3.6.1 basic_string::find [lib.string::find]\n   *\n   * size_type find(const basic_string<charT,traits,Allocator>& str,\n   *                size_type pos = 0) const;\n   * Effects: Determines the lowest position xpos, if possible, such that\n   * both of the following conditions obtain:\n   *    pos <= xpos and xpos + str.size() <= size();\n   *    at(xpos+I) == str.at(I) for all elements I of the string controlled by str.\n   * Returns: xpos if the function can determine such a value for xpos. Otherwise,\n   * returns npos.\n   * Notes: Uses traits::eq().\n   *\n   * ===\n   * So, from formal point of view \n   *   string s; string::size_type p = s.find( \"\", 0, 0 );\n   * should return 0 in p, i.e. position out-of-bound of string, so \n   * code like following is bad:\n   * string s; \n   *  \n   * string::size_type p = s.find( \"\", 0, 0 ); \n   *\n   * ... \n   *\n   * if ( p != string::npos ) { // normal \n   *   char ch = s[p]; // Arghhhhhhhhhh \n   * }\n   *\n   * People near Standard commete has opinion opposite to my. Even if it looks\n   * like bogus behaviour for me, it should be fixed.\n   */\n\n  {\n    string s;\n    string::size_type p = s.find( \"\", 0, 0 );\n\n    /* CPPUNIT_CHECK( p == string::npos ); */\n    CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it?\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.find( \"\", 0, 0 );\n\n    CPPUNIT_CHECK( p == 0 );\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.find( \"\", 1, 0 );\n\n    CPPUNIT_CHECK( p == 1 );\n  }\n  {\n    string s( \"\" );\n    string::size_type p = s.find( \"\", 1, 0 );\n\n    CPPUNIT_CHECK( p == string::npos );\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.find( \"\", 3, 0 );\n\n    CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it?\n  }\n  {\n    string s;\n    string::size_type p = s.rfind( \"\", 0, 0 );\n\n    /* CPPUNIT_CHECK( p == string::npos ); */\n    CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it?\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.rfind( \"\", 0, 0 );\n\n    CPPUNIT_CHECK( p == 0 );\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.rfind( \"\", 1, 0 );\n\n    CPPUNIT_CHECK( p == 1 );\n  }\n  {\n    string s( \"\" );\n    string::size_type p = s.rfind( \"\", 1, 0 );\n\n    CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it?\n  }\n  {\n    string s( \"123\" );\n    string::size_type p = s.rfind( \"\", 3, 0 );\n\n    CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it?\n  }\n}\n\nvoid StringTest::rfind()\n{\n  // 21.3.6.2\n  string s(\"one two three one two three\");\n\n  CPPUNIT_ASSERT( s.rfind(\"two\") == 18 );\n  CPPUNIT_ASSERT( s.rfind(\"two\", 0) == string::npos );\n  CPPUNIT_ASSERT( s.rfind(\"two\", 11) == 4 );\n  CPPUNIT_ASSERT( s.rfind('w') == 19 );\n\n  string test( \"aba\" );\n\n  CPPUNIT_CHECK( test.rfind( \"a\", 2, 1 ) == 2 );\n  CPPUNIT_CHECK( test.rfind( \"a\", 1, 1 ) == 0 );\n  CPPUNIT_CHECK( test.rfind( \"a\", 0, 1 ) == 0 );\n\n  CPPUNIT_CHECK( test.rfind( 'a', 2 ) == 2 );\n  CPPUNIT_CHECK( test.rfind( 'a', 1 ) == 0 );\n  CPPUNIT_CHECK( test.rfind( 'a', 0 ) == 0 );\n}\n\nvoid StringTest::find_last_of()\n{\n  // 21.3.6.4\n  string s(\"one two three one two three\");\n\n  CPPUNIT_ASSERT( s.find_last_of(\"abcde\") == 26 );\n\n  string test( \"aba\" );\n\n  CPPUNIT_CHECK( test.find_last_of( \"a\", 2, 1 ) == 2 );\n  CPPUNIT_CHECK( test.find_last_of( \"a\", 1, 1 ) == 0 );\n  CPPUNIT_CHECK( test.find_last_of( \"a\", 0, 1 ) == 0 );\n\n  CPPUNIT_CHECK( test.find_last_of( 'a', 2 ) == 2 );\n  CPPUNIT_CHECK( test.find_last_of( 'a', 1 ) == 0 );\n  CPPUNIT_CHECK( test.find_last_of( 'a', 0 ) == 0 );\n}\n\nvoid StringTest::find_last_not_of()\n{\n  // 21.3.6.6\n  string s(\"one two three one two three\");\n\n  CPPUNIT_ASSERT( s.find_last_not_of(\"ehortw \") == 15 );\n\n  string test( \"aba\" );\n\n  CPPUNIT_CHECK( test.find_last_not_of( \"a\", 2, 1 ) == 1 );\n  CPPUNIT_CHECK( test.find_last_not_of( \"b\", 2, 1 ) == 2 );\n  CPPUNIT_CHECK( test.find_last_not_of( \"a\", 1, 1 ) == 1 );\n  CPPUNIT_CHECK( test.find_last_not_of( \"b\", 1, 1 ) == 0 );\n  CPPUNIT_CHECK( test.find_last_not_of( \"a\", 0, 1 ) == string::npos );\n  CPPUNIT_CHECK( test.find_last_not_of( \"b\", 0, 1 ) == 0 );\n\n  CPPUNIT_CHECK( test.find_last_not_of( 'a', 2 ) == 1 );\n  CPPUNIT_CHECK( test.find_last_not_of( 'b', 2 ) == 2 );\n  CPPUNIT_CHECK( test.find_last_not_of( 'a', 1 ) == 1 );\n  CPPUNIT_CHECK( test.find_last_not_of( 'b', 1 ) == 0 );\n  CPPUNIT_CHECK( test.find_last_not_of( 'a', 0 ) == string::npos );\n  CPPUNIT_CHECK( test.find_last_not_of( 'b', 0 ) == 0 );\n}\n\nvoid StringTest::copy()\n{\n  string s(\"foo\");\n  char dest[4];\n  dest[0] = dest[1] = dest[2] = dest[3] = 1;\n  s.copy(dest, 4);\n  int pos = 0;\n  CPPUNIT_ASSERT( dest[pos++] == 'f' );\n  CPPUNIT_ASSERT( dest[pos++] == 'o' );\n  CPPUNIT_ASSERT( dest[pos++] == 'o' );\n  CPPUNIT_ASSERT( dest[pos++] == 1 );\n\n  dest[0] = dest[1] = dest[2] = dest[3] = 1;\n  s.copy(dest, 4, 2);\n  pos = 0;\n  CPPUNIT_ASSERT( dest[pos++] == 'o' );\n  CPPUNIT_ASSERT( dest[pos++] == 1 );\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    s.copy(dest, 4, 5);\n    CPPUNIT_FAIL;\n  }\n  catch (out_of_range const&) {\n  }\n  catch ( ... ) {\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid StringTest::assign()\n{\n  string s;\n  char const* cstr = \"test string for assign\";\n\n  s.assign(cstr, cstr + 22);\n  CPPUNIT_ASSERT( s == \"test string for assign\" );\n\n  string s2(\"other test string\");\n  s.assign(s2);\n  CPPUNIT_ASSERT( s == s2 );\n\n  static string str1;\n  static string str2;\n\n  // short string optim:\n  str1 = \"123456\";\n  // longer than short string:\n  str2 = \"1234567890123456789012345678901234567890\";\n\n  CPPUNIT_ASSERT(str1[5] == '6');\n  CPPUNIT_ASSERT(str2[29] == '0');\n}\n\n/* This test is to check if string properly supports the short string\n * optimization. It has been found out that eMbedded Visual C++ 3.0 and .NET\n * compilers for the ARM platform fail to pass structs and classes of certain\n * size per value. This seems to be a known compiler bug. For other processors\n * (e.g. x86) the error doesn't occur.\n * (The ARM compiler creates a temporary object from teststr on the stack, to\n * pass it to the helper function. It uses the copy constructor for this.\n * After this the temporary object is copied to another place on the stack.\n * The result is that the _M_finish pointer then points to the wrong buffer\n * end and the size of the short string is incorrectly calculated.)\n */\nvoid StringTest::short_string_optim_bug()\n{\n   string teststr(\"shortest\");\n\n   bool short_string_optim_bug_helper(string teststr);\n\n   CPPUNIT_ASSERT(true == short_string_optim_bug_helper(teststr));\n}\n\nbool short_string_optim_bug_helper(string teststr)\n{\n   size_t ss = teststr.size();\n   return (ss == 8);\n}\n\nvoid StringTest::compare()\n{\n  string str1(\"abcdef\");\n  string str2;\n\n  str2 = \"abcdef\";\n  CPPUNIT_ASSERT( str1.compare(str2) == 0 );\n  str2 = \"abcde\";\n  CPPUNIT_ASSERT( str1.compare(str2) > 0 );\n  str2 = \"abcdefg\";\n  CPPUNIT_ASSERT( str1.compare(str2) < 0 );\n\n  CPPUNIT_ASSERT( str1.compare(\"abcdef\") == 0 );\n  CPPUNIT_ASSERT( str1.compare(\"abcde\") > 0 );\n  CPPUNIT_ASSERT( str1.compare(\"abcdefg\") < 0 );\n\n  str2 = \"cde\";\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2) == 0 );\n  str2 = \"cd\";\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2) > 0 );\n  str2 = \"cdef\";\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2) < 0 );\n\n  str2 = \"abcdef\";\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 3) == 0 );\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 2) > 0 );\n  CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 4) < 0 );\n\n  CPPUNIT_ASSERT( str1.compare(2, 3, \"cdefgh\", 3) == 0 );\n  CPPUNIT_ASSERT( str1.compare(2, 3, \"cdefgh\", 2) > 0 );\n  CPPUNIT_ASSERT( str1.compare(2, 3, \"cdefgh\", 4) < 0 );\n}\n\n/*\nclass mystring : public string {\npublic:\n  mystring() {}\n  mystring(string const& s) : string(s) {}\n\n  mystring& operator = (string const& s) {\n    string::operator = (s);\n    return *this;\n  };\n};\n*/\n\nvoid StringTest::template_expression()\n{\n  string one(\"one\"), two(\"two\"), three(\"three\");\n  string space(1, ' ');\n\n  // check availability of [un]equality operators\n  {\n      // string-string\n      one == two;\n      one != two;\n      // string-literal\n      one == \"two\";\n      one != \"two\";\n      // literal-string\n      \"one\" == two;\n      \"one\" != two;\n      // strsum-string\n      (one + two) == three;\n      (one + two) != three;\n      // string-strsum\n      one == (two + three);\n      one != (two + three);\n      // strsum-literal\n      (one + two) == \"three\";\n      (one + two) != \"three\";\n      // literal-strsum\n      \"one\" == (two + three);\n      \"one\" != (two + three);\n      // strsum-strsum\n      (one + two) == (two + three);\n      (one + two) != (two + three);\n  }\n\n  {\n    string result(one + ' ' + two + ' ' + three);\n    CPPUNIT_CHECK( result == \"one two three\" );\n  }\n\n  {\n    string result(one + ' ' + two + ' ' + three, 4);\n    CPPUNIT_CHECK( result == \"two three\" );\n  }\n\n  {\n    string result(one + ' ' + two + ' ' + three, 4, 3);\n    CPPUNIT_CHECK( result == \"two\" );\n  }\n\n  //2 members expressions:\n  CPPUNIT_CHECK( (' ' + one) == \" one\" );\n  CPPUNIT_CHECK( (one + ' ') == \"one \" );\n  CPPUNIT_CHECK( (one + \" two\") == \"one two\" );\n  CPPUNIT_CHECK( (\"one \" + two) == \"one two\" );\n  CPPUNIT_CHECK( (one + space) == \"one \" );\n\n  //3 members expressions:\n  CPPUNIT_CHECK( ((one + space) + \"two\") == \"one two\" );\n  CPPUNIT_CHECK( (\"one\" + (space + two)) == \"one two\" );\n  CPPUNIT_CHECK( ((one + space) + two) == \"one two\" );\n  CPPUNIT_CHECK( (one + (space + two)) == \"one two\" );\n  CPPUNIT_CHECK( ((one + space) + 't') == \"one t\" );\n  CPPUNIT_CHECK( ('o' + (space + two)) == \"o two\" );\n\n  //4 members expressions:\n  CPPUNIT_CHECK( ((one + space) + (two + space)) == \"one two \" );\n\n  //special operators\n  {\n    string result;\n    result = one + space + two;\n    CPPUNIT_CHECK( result == \"one two\" );\n\n    result += space + three;\n    CPPUNIT_CHECK( result == \"one two three\" );\n  }\n\n  //special append method\n  {\n    string result;\n    //Use reserve to avoid reallocation and really test auto-referencing problems:\n    result.reserve(64);\n\n    result.append(one + space + two);\n    CPPUNIT_CHECK( result == \"one two\" );\n\n    result.append(space + result + space + three);\n    CPPUNIT_CHECK( result == \"one two one two three\" );\n\n    result = \"one two\";\n    result.append(space + three, 1, 2);\n    CPPUNIT_ASSERT( result == \"one twoth\" );\n\n    result.append(space + result);\n    CPPUNIT_CHECK( result == \"one twoth one twoth\" );\n  }\n\n  //special assign method\n  {\n    string result;\n    //Use reserve to avoid reallocation and really test auto-referencing problems:\n    result.reserve(64);\n\n    result.assign(one + space + two + space + three);\n    CPPUNIT_CHECK( result == \"one two three\" );\n\n    result.assign(one + space + two + space + three, 3, 5);\n    CPPUNIT_CHECK( result == \" two \" );\n\n    result.assign(one + result + three);\n    CPPUNIT_CHECK( result == \"one two three\" );\n  }\n\n  {\n    CPPUNIT_CHECK( !(one + ' ' + two).empty() );\n\n    char result = (one + ' ' + two)[3];\n    CPPUNIT_CHECK( result == ' ' );\n\n    result = (one + ' ' + two).at(3);\n    CPPUNIT_CHECK( result == ' ' );\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try {\n      result = (one + ' ' + two).at(10);\n      CPPUNIT_FAIL;\n    }\n    catch (out_of_range const&) {\n      CPPUNIT_ASSERT( result == ' ' );\n    }\n    catch (...) {\n      CPPUNIT_FAIL;\n    }\n#endif\n  }\n\n  /*\n  mystring a(\"ing\");\n  //gcc failed to compile following expression when template expressions are activated.\n  //MSVC sees no problem. gcc limitation or MSVC is too cool ??\n  mystring b = \"str\" + a;\n  */\n}\n\n#if !defined (TE_TMP_TEST_IGNORED)\nclass superstring\n{\n  public:\n    superstring() :\n      s(\"super\")\n    {}\n\n    superstring( const string& str ) :\n      s( str )\n    {}\n\n  superstring operator / (const string& str )\n    { return superstring( s + \"/\" + str ); }\n\n  superstring operator / (const char* str )\n    { return superstring( s + \"/\" + str ); }\n\n  private:\n    string s;\n};\n#endif\n\nvoid StringTest::te_tmp()\n{\n#if !defined (TE_TMP_TEST_IGNORED)\n  superstring s;\n  string more( \"more\" );\n  string less( \"less\" );\n\n  superstring r = s / (more + less);\n#endif\n}\n\nclass mypath\n{\n  public:\n    mypath( const string& s ) :\n        p( s )\n      { }\n\n    const mypath& operator / ( const string& );\n    const string& str() const\n      { return p; }\n \n  private:\n    string p;\n};\n\nconst mypath& mypath::operator /( const string& s )\n{\n  p += '/';\n  p += s;\n  return *this;\n}\n\nvoid StringTest::oper_tmp()\n{\n  string s1( \"path1\" );\n  string s2( \".ext\" );\n\n  string& rs1 = s1;\n  string& rs2 = s2;\n\n  CPPUNIT_CHECK( (mypath( string( \"/root\" ) ) / (rs1 + rs2)).str() == \"/root/path1.ext\" );\n}\n\nvoid StringTest::template_wexpression()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n#  if !defined (__CYGWIN__) || defined (STLPORT)\n  wstring one(L\"one\"), two(L\"two\"), three(L\"three\");\n  wstring space(L\" \");\n\n  {\n    wstring result(one + L' ' + two + L' ' + three);\n    CPPUNIT_CHECK( result == L\"one two three\" );\n  }\n\n  {\n    wstring result(one + L' ' + two + L' ' + three, 4);\n    CPPUNIT_CHECK( result == L\"two three\" );\n  }\n\n  {\n    wstring result(one + L' ' + two + L' ' + three, 4, 3);\n    CPPUNIT_CHECK( result == L\"two\" );\n  }\n\n  //2 members expressions:\n  CPPUNIT_CHECK( (L' ' + one) == L\" one\" );\n  CPPUNIT_CHECK( (one + L' ') == L\"one \" );\n  CPPUNIT_CHECK( (one + L\" two\") == L\"one two\" );\n  CPPUNIT_CHECK( (L\"one \" + two) == L\"one two\" );\n  CPPUNIT_CHECK( (one + space) == L\"one \" );\n\n  //3 members expressions:\n  CPPUNIT_CHECK( ((one + space) + L\"two\") == L\"one two\" );\n  CPPUNIT_CHECK( (L\"one\" + (space + two)) == L\"one two\" );\n  CPPUNIT_CHECK( ((one + space) + two) == L\"one two\" );\n  CPPUNIT_CHECK( (one + (space + two)) == L\"one two\" );\n  CPPUNIT_CHECK( ((one + space) + L't') == L\"one t\" );\n  CPPUNIT_CHECK( (L'o' + (space + two)) == L\"o two\" );\n\n  //4 members expressions:\n  CPPUNIT_CHECK( ((one + space) + (two + space)) == L\"one two \" );\n\n  //special operators\n  {\n    wstring result;\n    result = one + space + two;\n    CPPUNIT_CHECK( result == L\"one two\" );\n\n    result += space + three;\n    CPPUNIT_CHECK( result == L\"one two three\" );\n  }\n\n  //special append method\n  {\n    wstring result;\n    //Use reserve to avoid reallocation and really test auto-referencing problems:\n    result.reserve(64);\n\n    result.append(one + space + two);\n    CPPUNIT_CHECK( result == L\"one two\" );\n\n    result.append(space + result + space + three);\n    CPPUNIT_CHECK( result == L\"one two one two three\" );\n\n    result = L\"one two\";\n    result.append(space + three, 1, 2);\n    CPPUNIT_ASSERT( result == L\"one twoth\" );\n\n    result.append(space + result);\n    CPPUNIT_CHECK( result == L\"one twoth one twoth\" );\n  }\n\n  //special assign method\n  {\n    wstring result;\n    //Use reserve to avoid reallocation and really test auto-referencing problems:\n    result.reserve(64);\n\n    result.assign(one + space + two + space + three);\n    CPPUNIT_CHECK( result == L\"one two three\" );\n\n    result.assign(one + space + two + space + three, 3, 5);\n    CPPUNIT_CHECK( result == L\" two \" );\n\n    result.assign(one + result + three);\n    CPPUNIT_CHECK( result == L\"one two three\" );\n  }\n\n  {\n    CPPUNIT_CHECK( !(one + L' ' + two).empty() );\n\n    wchar_t result = (one + L' ' + two)[3];\n    CPPUNIT_CHECK( result == L' ' );\n\n    result = (one + L' ' + two).at(3);\n    CPPUNIT_CHECK( result == L' ' );\n\n#    if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try {\n      result = (one + L' ' + two).at(10);\n      CPPUNIT_FAIL;\n    }\n    catch (out_of_range const&) {\n      CPPUNIT_ASSERT( result == L' ' );\n    }\n    catch (...) {\n      CPPUNIT_FAIL;\n    }\n#    endif\n  }\n#  endif\n#endif\n}\n\nvoid StringTest::io()\n{\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n  string str(\"STLport\");\n  {\n    ostringstream ostr;\n    ostr << str;\n    CPPUNIT_ASSERT( ostr.good() );\n    CPPUNIT_ASSERT( ostr.str() == str );\n  }\n  {\n    istringstream istr(str);\n    string istr_content;\n    istr >> istr_content;\n    CPPUNIT_ASSERT( !istr.fail() && istr.eof() );\n    CPPUNIT_ASSERT( istr_content == str );\n  }\n  {\n    istringstream istr(str);\n    istr.width(3);\n    string istr_content;\n    istr >> istr_content;\n    CPPUNIT_ASSERT( !istr.fail() && !istr.eof() );\n    CPPUNIT_ASSERT( istr_content == \"STL\" );\n  }\n#endif\n}\n\nvoid StringTest::allocator_with_state()\n{\n#if !(defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO)) \n\n  char buf1[1024];\n  StackAllocator<char> stack1(buf1, buf1 + sizeof(buf1));\n\n  char buf2[1024];\n  StackAllocator<char> stack2(buf2, buf2 + sizeof(buf2));\n\n  typedef basic_string<char, char_traits<char>, StackAllocator<char> > StackString;\n  {\n    StackString str1(\"string stack1\", stack1);\n    StackString str1Cpy(str1);\n\n    StackString str2(\"string stack2\", stack2);\n    StackString str2Cpy(str2);\n\n    str1.swap(str2);\n\n    CPPUNIT_ASSERT( str1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( str2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( str1 == str2Cpy );\n    CPPUNIT_ASSERT( str2 == str1Cpy );\n    CPPUNIT_ASSERT( str1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( str2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n  {\n    StackString str1(\"longer string from stack1 allocator instance for dynamic allocation\", stack1);\n    StackString str1Cpy(str1);\n\n    StackString str2(\"longer string from stack2 allocator instance for dynamic allocation\", stack2);\n    StackString str2Cpy(str2);\n\n    str1.swap(str2);\n\n    CPPUNIT_ASSERT( str1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( str2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( str1 == str2Cpy );\n    CPPUNIT_ASSERT( str2 == str1Cpy );\n    CPPUNIT_ASSERT( str1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( str2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n\n  {\n    StackString str1(\"string stack1\", stack1);\n    StackString str1Cpy(str1);\n\n    StackString str2(\"longer string from stack2 allocator instance for dynamic allocation\", stack2);\n    StackString str2Cpy(str2);\n\n    str1.swap(str2);\n\n    CPPUNIT_ASSERT( str1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( str2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( str1 == str2Cpy );\n    CPPUNIT_ASSERT( str2 == str1Cpy );\n    CPPUNIT_ASSERT( str1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( str2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n\n\n  {\n    StackString str1(\"longer string from stack1 allocator instance for dynamic allocation\", stack1);\n    StackString str1Cpy(str1);\n\n    StackString str2(\"string stack2\", stack2);\n    StackString str2Cpy(str2);\n\n    str1.swap(str2);\n\n    CPPUNIT_ASSERT( str1.get_allocator().swaped() );\n    CPPUNIT_ASSERT( str2.get_allocator().swaped() );\n\n    CPPUNIT_ASSERT( str1 == str2Cpy );\n    CPPUNIT_ASSERT( str2 == str1Cpy );\n    CPPUNIT_ASSERT( str1.get_allocator() == stack2 );\n    CPPUNIT_ASSERT( str2.get_allocator() == stack1 );\n  }\n  CPPUNIT_ASSERT( stack1.ok() );\n  CPPUNIT_ASSERT( stack2.ok() );\n  stack1.reset(); stack2.reset();\n#endif\n}\n\nvoid StringTest::capacity()\n{\n  string s;\n\n  CPPUNIT_CHECK( s.capacity() > 0 );\n  CPPUNIT_CHECK( s.capacity() < s.max_size() );\n  CPPUNIT_CHECK( s.capacity() >= s.size() );\n\n#ifndef _STLP_SHORT_STRING_SZ\n#  define _STLP_SHORT_STRING_SZ 16 // see stlport/stl/_string_base.h\n#endif\n\n  for ( int i = 0; i < _STLP_SHORT_STRING_SZ + 2; ++i ) {\n    s += ' ';\n    CPPUNIT_CHECK( s.capacity() > 0 );\n    CPPUNIT_CHECK( s.capacity() < s.max_size() );\n    CPPUNIT_CHECK( s.capacity() >= s.size() );\n  }\n}\n\nvoid StringTest::concat24()\n{\n  string s = string( \"123456789012345678901234\" ) + string( \"123456789012345678901234\" );\n\n  CPPUNIT_CHECK( s.length() == 48 );\n  CPPUNIT_CHECK( s[23] == '4' );\n  CPPUNIT_CHECK( s[24] == '1' );\n  CPPUNIT_CHECK( s[47] == '4' );\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/strstream_buffer_read_test.cpp",
    "content": "/*\n * Note: Strstreams are really broken in STLport. But strstreams are \n * obsolete, and even if ones was mentioned in D7.1--D7.4 of \n * Standard, we have no wish to spent time with repair ones.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <strstream>\n\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nclass StrstreamBufferTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(StrstreamBufferTest);\n  CPPUNIT_TEST(read_from_buffer);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void read_from_buffer();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(StrstreamBufferTest);\n\nvoid StrstreamBufferTest::read_from_buffer()\n{\n  char hello[] = \"Hello\";\n  strstream stream(hello, sizeof(hello), ios_base::in);\n  char cur;\n  stream >> cur;\n  CPPUNIT_ASSERT(cur == 'H'); \n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/strstream_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#if !defined (_STLP_NO_IOSTREAMS)\n#  include <strstream>\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/strstream_test.cpp",
    "content": "#include <string>\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <strstream>\n#  include <limits>\n\n#  include \"cppunit/cppunit_proxy.h\"\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\n//\n// TestCase class\n//\nclass StrstreamTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(StrstreamTest);\n  CPPUNIT_TEST(input);\n  CPPUNIT_TEST_SUITE_END();\n\nprivate:\n  void input();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(StrstreamTest);\n\n//\n// tests implementation\n//\nvoid StrstreamTest::input()\n{\n#  if defined (STLPORT) && defined (_STLP_LONG_LONG)\n  {\n    istrstream is(\"652208307\");\n    _STLP_LONG_LONG rval = 0;\n    is >> rval;\n    CPPUNIT_ASSERT( rval == 652208307 );\n  }\n  {\n    istrstream is(\"-652208307\");\n    _STLP_LONG_LONG rval = 0;\n    is >> rval;\n    CPPUNIT_ASSERT( rval == -652208307 );\n  }\n}\n#  endif\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/swap_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <vector>\n#include <queue>\n\n#if 0 /* temporary: investigation of problem with swap */\n#include <iostream>\n#include <typeinfo>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass SwapTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(SwapTest);\n  CPPUNIT_TEST(swap1);\n  CPPUNIT_TEST(swprnge1);\n  CPPUNIT_TEST(swap_container_non_spec);\n#if defined (STLPORT) && \\\n   !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) && !defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(swap_container_spec);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void swap1();\n  void swprnge1();\n  void swap_container_non_spec();\n  void swap_container_spec();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(SwapTest);\n\n//\n// tests implementation\n//\nvoid SwapTest::swap1()\n{\n  int a = 42;\n  int b = 19;\n  swap(a, b);\n\n  CPPUNIT_ASSERT(a==19);\n  CPPUNIT_ASSERT(b==42);\n}\n\nvoid SwapTest::swprnge1()\n{\n  char word1[] = \"World\";\n  char word2[] = \"Hello\";\n  swap_ranges((char*)word1, (char*)word1 + ::strlen(word1), (char*)word2);\n  CPPUNIT_ASSERT(!strcmp(word1, \"Hello\"));\n  CPPUNIT_ASSERT(!strcmp(word2, \"World\"));\n}\n\nclass Obj\n{\n  public:\n    Obj() :\n        v( 0 )\n      { }\n    Obj( const Obj& ) :\n        v( 1 )\n      { }\n\n    Obj& operator =( const Obj& )\n      { v = 2; return *this; }\n\n    int v;\n};\n\n/*\n * Following two tests check the corectness of specialization of swap():\n * for containers with container::swap method swap( a, b ) should\n * use a.swap( b ), but don't try to do this substitution for container\n * without swap method (in this case swap should be made via explicit members\n * exchange; this assume usage of temporary object)\n *\n */\nvoid SwapTest::swap_container_non_spec()\n{\n  queue<Obj> v1;\n  queue<Obj> v2;\n\n  v1.push( Obj() );\n  v1.back().v = -1;\n  v1.push( Obj() );\n  v1.back().v = -2;\n\n  v2.push( Obj() );\n  v2.back().v = 10;  \n  v2.push( Obj() );\n  v2.back().v = 11;\n  v2.push( Obj() );\n  v2.back().v = 12;\n\n  CPPUNIT_CHECK( v1.size() == 2 );\n  CPPUNIT_CHECK( v2.size() == 3 );\n\n  swap( v1, v2 ); // this shouldn't try make it as v1.swap( v2 ), no queue::swap method!\n\n  CPPUNIT_CHECK( v1.size() == 3 );\n  CPPUNIT_CHECK( v2.size() == 2 );\n\n  // either copy constructor or assignment operator\n  CPPUNIT_CHECK( v1.front().v == 1 || v1.front().v == 2 );\n  CPPUNIT_CHECK( v1.back().v == 1 || v1.back().v == 2 );\n  CPPUNIT_CHECK( v2.front().v == 1 || v2.front().v == 2 );\n  CPPUNIT_CHECK( v2.back().v == 1 || v2.back().v == 2 );\n}\n\nvoid SwapTest::swap_container_spec()\n{\n#if 0 /* temporary: investigation of problem with swap */\n  if ( typeid(/* _STLP_PRIV */ _SwapImplemented<vector<Obj> >::_Ret) == typeid(_STLP_PRIV __false_type) ) {\n    cerr << \"false type\" << endl;\n  } else if ( typeid(/* _STLP_PRIV */ _SwapImplemented<vector<Obj> >::_Ret) == typeid(_STLP_PRIV __true_type) ) {\n    cerr << \"true type\" << endl;\n  } else {\n    cerr << \"unknown type\" << endl;\n  }\n#endif /* end of temporary */\n#if !defined (STLPORT) || \\\n     defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) || defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)\n  vector<Obj> v1;\n  vector<Obj> v2;\n\n  v1.push_back( Obj() );\n  v1.push_back( Obj() );\n\n  v1[0].v = -1;\n  v1[1].v = -2;\n\n  v2.push_back( Obj() );\n  v2.push_back( Obj() );\n  v2.push_back( Obj() );\n\n  v2[0].v = 10;\n  v2[1].v = 11;\n  v2[2].v = 12;\n\n  CPPUNIT_CHECK( v1.size() == 2 );\n  CPPUNIT_CHECK( v2.size() == 3 );\n\n  swap( v1, v2 ); // this should has effect v1.swap( v2 )\n\n  CPPUNIT_CHECK( v1.size() == 3 );\n  CPPUNIT_CHECK( v2.size() == 2 );\n\n  CPPUNIT_CHECK( v1[0].v == 10 );\n  CPPUNIT_CHECK( v1[1].v == 11 );\n  CPPUNIT_CHECK( v1[2].v == 12 );\n\n  CPPUNIT_CHECK( v2[0].v == -1 );\n  CPPUNIT_CHECK( v2[1].v == -2 );\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/test_errno.cpp",
    "content": "//We are including stdlib.h and stddef.h first because under MSVC\n//those headers contains a errno macro definition without the underlying value\n//definition.\n#include <stdlib.h>\n#include <stddef.h>\n\n#include <errno.h>\n#include <errno.h> // not typo, check errno def/undef/redef\n\n#ifndef _STLP_WCE\n\n#include \"cppunit/cppunit_proxy.h\"\n\n//\n// TestCase class\n//\nclass ErrnoTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ErrnoTest);\n  CPPUNIT_TEST(check);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void check();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ErrnoTest);\n\nvoid ErrnoTest::check()\n{\n  //We are using ERANGE as it is part of the C++ ISO (see Table 26 in section 19.3)\n  //Using ERANGE improve the test as it means that the native errno.h file has really\n  //been included.\n  errno = ERANGE;\n\n  CPPUNIT_ASSERT( errno == ERANGE );\n  errno = 0;\n\n/* Note: in common, you can't write ::errno or std::errno,\n * due to errno in most cases is just a macro, that frequently\n * (in MT environment errno is a per-thread value) expand to something like\n * (*__errno_location()). I don't know way how masquerade such\n * things: name of macro can't include ::.\n *\n *                - ptr, 2005-03-30\n */\n# if 0\n  if ( ::errno != 0 ) {\n    return 1;\n  }\n  if ( std::errno != 0 ) {\n    return 1;\n  }\n# endif\n}\n#endif // _STLP_WCE\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/time_facets_test.cpp",
    "content": "#include \"locale_test.h\"\n\n#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)\n#  include <locale>\n#  include <sstream>\n#  include <memory>\n#  include <stdexcept>\n\n#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  endif\n\nstatic const char* tested_locales[] = {\n// name,\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n   \"fr_FR\",\n   \"ru_RU.koi8r\",\n   \"en_GB\",\n   \"en_US\",\n#  endif\n   \"\",\n   \"C\"\n};\n\nvoid LocaleTest::_time_put_get( const locale& loc )\n{\n  {\n    typedef time_put<char, ostreambuf_iterator<char, char_traits<char> > > time_put_facet;\n    CPPUNIT_ASSERT( has_facet<time_put_facet>(loc) );\n    const time_put_facet& tmp = use_facet<time_put_facet>(loc);\n\n    struct tm xmas = { 0, 0, 12, 25, 11, 93 };\n    ostringstream ostr;\n    ostr.imbue(loc);\n    string format = \"%B %d %Y\";\n\n    time_put_facet::iter_type ret = tmp.put(ostr, ostr, ' ', &xmas, format.data(), format.data() + format.size());\n    CPPUNIT_ASSERT( !ret.failed() );\n\n    /*\n     * In other words, user conformation is required for reliable parsing\n     * of user-entered dates and times, but machine-generated formats can be\n     * parsed reliably. This allows parsers to be aggressive about interpreting\n     * user variations on standard format.\n     *\n     *                                             ISO/IEC 14882, 22.2.5.1\n     */\n    typedef time_get<char, istreambuf_iterator<char, char_traits<char> > > time_get_facet;\n    CPPUNIT_ASSERT( has_facet<time_get_facet>(loc) );\n    const time_get_facet& tmg = use_facet<time_get_facet>(loc);\n    basic_ios<char> io(0);\n    io.imbue(loc);\n\n    istringstream istr( ostr.str() );\n    istreambuf_iterator<char, char_traits<char> > i( istr );\n    istreambuf_iterator<char, char_traits<char> > e;\n    ios_base::iostate err = ios_base::goodbit;\n    struct tm other = { 15, 20, 9, 14, 7, 105 };\n\n    i = tmg.get_monthname( i, e, io, err, &other );\n    CPPUNIT_ASSERT( err == ios_base::goodbit );\n    CPPUNIT_ASSERT( other.tm_mon == xmas.tm_mon );\n\n    ++i; ++i; ++i; ++i; // skip day of month and spaces around it\n    i = tmg.get_year( i, e, io, err, &other );\n\n    CPPUNIT_ASSERT( err == ios_base::eofbit );\n    CPPUNIT_ASSERT( other.tm_year == xmas.tm_year );\n\n    ostringstream ostrX;\n    ostrX.imbue(loc);\n    format = \"%x %X\";\n\n    ret = tmp.put(ostrX, ostrX, ' ', &xmas, format.data(), format.data() + format.size());\n    CPPUNIT_ASSERT( !ret.failed() );\n\n    istringstream istrX( ostrX.str() );\n    istreambuf_iterator<char, char_traits<char> > j( istrX );\n\n    err = ios_base::goodbit;\n\n    struct tm yet_more = { 15, 20, 9, 14, 7, 105 };\n\n    j = tmg.get_date( j, e, io, err, &yet_more );\n\n    CPPUNIT_ASSERT( err == ios_base::goodbit );\n\n    CPPUNIT_ASSERT( yet_more.tm_sec != xmas.tm_sec );\n    CPPUNIT_ASSERT( yet_more.tm_min != xmas.tm_min );\n    CPPUNIT_ASSERT( yet_more.tm_hour != xmas.tm_hour );\n    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );\n    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );\n    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );\n\n    ++j; // skip space\n\n    j = tmg.get_time( j, e, io, err, &yet_more );\n\n    CPPUNIT_ASSERT( err == ios_base::eofbit || err == ios_base::goodbit );\n\n    CPPUNIT_ASSERT( yet_more.tm_sec == xmas.tm_sec );\n    CPPUNIT_ASSERT( yet_more.tm_min == xmas.tm_min );\n    CPPUNIT_ASSERT( yet_more.tm_hour == xmas.tm_hour );\n    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );\n    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );\n    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );\n  }\n#  if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n  {\n    typedef time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > > time_put_facet;\n    CPPUNIT_ASSERT( has_facet<time_put_facet>(loc) );\n    const time_put_facet& tmp = use_facet<time_put_facet>(loc);\n\n    struct tm xmas = { 0, 0, 12, 25, 11, 93 };\n    wostringstream ostr;\n    ostr.imbue(loc);\n    wstring format = L\"%B %d %Y\";\n\n    time_put_facet::iter_type ret = tmp.put(ostr, ostr, ' ', &xmas, format.data(), format.data() + format.size());\n    CPPUNIT_ASSERT( !ret.failed() );\n\n    /*\n     * In other words, user conformation is required for reliable parsing\n     * of user-entered dates and times, but machine-generated formats can be\n     * parsed reliably. This allows parsers to be aggressive about interpreting\n     * user variations on standard format.\n     *\n     *                                             ISO/IEC 14882, 22.2.5.1\n     */\n    typedef time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > > time_get_facet;\n    CPPUNIT_ASSERT( has_facet<time_get_facet>(loc) );\n    const time_get_facet& tmg = use_facet<time_get_facet>(loc);\n    // Intentional instantiation with char to show a bug in a previous STLport version.\n    basic_ios<char> io(0);\n    io.imbue(loc);\n\n    wistringstream istr( ostr.str() );\n    istreambuf_iterator<wchar_t, char_traits<wchar_t> > i( istr );\n    istreambuf_iterator<wchar_t, char_traits<wchar_t> > e;\n    ios_base::iostate err = ios_base::goodbit;\n    struct tm other = { 15, 20, 9, 14, 7, 105 };\n\n    i = tmg.get_monthname( i, e, io, err, &other );\n    CPPUNIT_ASSERT( err == ios_base::goodbit );\n    CPPUNIT_ASSERT( other.tm_mon == xmas.tm_mon );\n\n    ++i; ++i; ++i; ++i; // skip day of month and spaces around it\n    i = tmg.get_year( i, e, io, err, &other );\n\n    CPPUNIT_ASSERT( err == ios_base::eofbit );\n    CPPUNIT_ASSERT( other.tm_year == xmas.tm_year );\n\n    wostringstream ostrX;\n    ostrX.imbue(loc);\n    format = L\"%x %X\";\n\n    ret = tmp.put(ostrX, ostrX, ' ', &xmas, format.data(), format.data() + format.size());\n    CPPUNIT_ASSERT( !ret.failed() );\n\n    wistringstream istrX( ostrX.str() );\n    istreambuf_iterator<wchar_t, char_traits<wchar_t> > j( istrX );\n\n    err = ios_base::goodbit;\n\n    struct tm yet_more = { 15, 20, 9, 14, 7, 105 };\n\n    j = tmg.get_date( j, e, io, err, &yet_more );\n\n    CPPUNIT_ASSERT( err == ios_base::goodbit );\n\n    CPPUNIT_ASSERT( yet_more.tm_sec != xmas.tm_sec );\n    CPPUNIT_ASSERT( yet_more.tm_min != xmas.tm_min );\n    CPPUNIT_ASSERT( yet_more.tm_hour != xmas.tm_hour );\n    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );\n    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );\n    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );\n\n    ++j; // skip space\n\n    j = tmg.get_time( j, e, io, err, &yet_more );\n\n    CPPUNIT_ASSERT( err == ios_base::eofbit || err == ios_base::goodbit );\n\n    CPPUNIT_ASSERT( yet_more.tm_sec == xmas.tm_sec );\n    CPPUNIT_ASSERT( yet_more.tm_min == xmas.tm_min );\n    CPPUNIT_ASSERT( yet_more.tm_hour == xmas.tm_hour );\n    CPPUNIT_ASSERT( yet_more.tm_mday == xmas.tm_mday );\n    CPPUNIT_ASSERT( yet_more.tm_mon == xmas.tm_mon );\n    CPPUNIT_ASSERT( yet_more.tm_year == xmas.tm_year );\n  }\n#  endif\n}\n\ntypedef void (LocaleTest::*_Test) (const locale&);\nstatic void test_supported_locale(LocaleTest& inst, _Test __test) {\n  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);\n  for (size_t i = 0; i < n; ++i) {\n    locale loc;\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    try\n#  endif\n    {\n      locale tmp(tested_locales[i]);\n      loc = tmp;\n    }\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n    catch (runtime_error const&) {\n      //This locale is not supported.\n      continue;\n    }\n#  endif\n    CPPUNIT_MESSAGE( loc.name().c_str() );\n    (inst.*__test)(loc);\n\n    {\n      locale tmp(locale::classic(), tested_locales[i], locale::time);\n      loc = tmp;\n    }\n    (inst.*__test)(loc);\n\n    {\n      typedef time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > > time_put_facet;\n      locale tmp0(locale::classic(), new time_put_facet(tested_locales[i]));\n      typedef time_get_byname<char, istreambuf_iterator<char, char_traits<char> > > time_get_facet;\n      locale tmp1(tmp0, new time_get_facet(tested_locales[i]));\n      loc = tmp1;\n    }\n    (inst.*__test)(loc);\n  }\n}\n\nvoid LocaleTest::time_put_get()\n{ test_supported_locale(*this, &LocaleTest::_time_put_get); }\n\nvoid LocaleTest::time_by_name()\n{\n#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  /*\n   * Check of the 22.1.1.2.7 standard point. Construction of a locale\n   * instance from a null pointer or an unknown name should result in\n   * a runtime_error exception.\n   */\n#    if defined (STLPORT) || !defined (_MSC_VER) || (_MSC_VER > 1400)\n  try {\n    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#    endif\n\n  try {\n    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_TIME=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new time_put_byname<char, ostreambuf_iterator<char, char_traits<char> > >(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    string veryLongFacetName(\"LC_TIME=\");\n    veryLongFacetName.append(512, '?');\n    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(veryLongFacetName.c_str()));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const& /* e */) {\n    //CPPUNIT_MESSAGE( e.what() );\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), \"C\", locale::time);\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" facet.\n    locale loc(locale::classic(), \"\", locale::time);\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(\"C\"));\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    // On platform without real localization support we should rely on the \"C\" locale facet.\n    locale loc(locale::classic(), new time_get_byname<char, istreambuf_iterator<char, char_traits<char> > >(\"\"));\n  }\n  catch (runtime_error const& /* e */) {\n    /* CPPUNIT_MESSAGE( e.what() ); */\n    CPPUNIT_FAIL;\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)\n  try {\n    locale loc(locale::classic(), new time_put_byname<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n    }\n\n  try {\n    locale loc(locale::classic(), new time_put_byname<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new time_get_byname<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(static_cast<char const*>(0)));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n  try {\n    locale loc(locale::classic(), new time_get_byname<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(\"yasli_language\"));\n    CPPUNIT_FAIL;\n  }\n  catch (runtime_error const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n\n#    endif\n#  endif\n}\n\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/time_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <time.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/times_test.cpp",
    "content": "#include <algorithm>\n#include <numeric>\n#include <functional>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass TimesTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(TimesTest);\n  CPPUNIT_TEST(times);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void times();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(TimesTest);\n\n//\n// tests implementation\n//\nvoid TimesTest::times()\n{\n  int input [4] = { 1, 5, 7, 2 };\n  int total = accumulate(input, input + 4, 1, multiplies<int>());\n  CPPUNIT_ASSERT(total==70);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/transform_test.cpp",
    "content": "#include <string>\n#include <iterator>\n#include <vector>\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass TransformTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(TransformTest);\n  CPPUNIT_TEST(trnsfrm1);\n  CPPUNIT_TEST(trnsfrm2);\n  CPPUNIT_TEST(self_str);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void trnsfrm1();\n  void trnsfrm2();\n  void self_str();\n\n  static int negate_int(int a_) {\n    return -a_;\n  }\n  static char map_char(char a_, int b_) {\n    return char(a_ + b_);\n  }\n  static char shift( char c ) {\n    return char(((int)c + 1) % 256);\n  }\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(TransformTest);\n\n//\n// tests implementation\n//\nvoid TransformTest::trnsfrm1()\n{\n  int numbers[6] = { -5, -1, 0, 1, 6, 11 };\n\n  int result[6];\n  transform((int*)numbers, (int*)numbers + 6, (int*)result, negate_int);\n\n  CPPUNIT_ASSERT(result[0]==5);\n  CPPUNIT_ASSERT(result[1]==1);\n  CPPUNIT_ASSERT(result[2]==0);\n  CPPUNIT_ASSERT(result[3]==-1);\n  CPPUNIT_ASSERT(result[4]==-6);\n  CPPUNIT_ASSERT(result[5]==-11);\n}\nvoid TransformTest::trnsfrm2()\n{\n#if defined (__MVS__)\n  int trans[] = {-11, 4, -6, -6, -18, 0, 18, -14, 6, 0, -1, -59};\n#else\n  int trans[] = {-4, 4, -6, -6, -10, 0, 10, -6, 6, 0, -1, -77};\n#endif\n  char n[] = \"Larry Mullen\";\n  const size_t count = ::strlen(n);\n\n  string res;\n  transform(n, n + count, trans, back_inserter(res), map_char);\n  CPPUNIT_ASSERT( res == \"Hello World!\" )\n}\n\nvoid TransformTest::self_str()\n{\n  string s( \"0123456789abcdefg\" );\n  string r( \"123456789:bcdefgh\" );\n  transform( s.begin(), s.end(), s.begin(), shift );\n  CPPUNIT_ASSERT( s == r );\n}\n\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/type_traits_test.cpp",
    "content": "#include <algorithm>\n#include <vector>\n#include <string>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if defined (_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass TypeTraitsTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(TypeTraitsTest);\n#if !defined (STLPORT)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(manips);\n  CPPUNIT_TEST(integer);\n  CPPUNIT_TEST(rational);\n  CPPUNIT_TEST(pointer_type);\n#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(reference_type);\n#if defined (STLPORT)\n  CPPUNIT_STOP_IGNORE;\n#endif\n  CPPUNIT_TEST(both_pointer_type);\n  CPPUNIT_TEST(ok_to_use_memcpy);\n  CPPUNIT_TEST(ok_to_use_memmove);\n  CPPUNIT_TEST(trivial_destructor);\n  CPPUNIT_TEST(is_POD);\n  CPPUNIT_TEST(stlport_class);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void manips();\n  void integer();\n  void rational();\n  void pointer_type();\n  void reference_type();\n  void both_pointer_type();\n  void ok_to_use_memcpy();\n  void ok_to_use_memmove();\n  void trivial_destructor();\n  void is_POD();\n  void stlport_class();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(TypeTraitsTest);\n\n#if defined (STLPORT)\n\n#  if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)\n// libstdc++ sometimes exposed its own __true_type type in global\n// namespace resulting in an ambiguity.\n#    define __true_type std::__true_type\n#    define __false_type std::__false_type\n#  endif\n\nint type_to_value(__true_type)\n{ return 1; }\nint type_to_value(__false_type)\n{ return 0; }\n\nint* int_pointer;\nint const* int_const_pointer;\nint volatile* int_volatile_pointer;\nint const volatile* int_const_volatile_pointer;\nint int_val = 0;\nint const int_const_val = 0;\nint volatile int_volatile_val = 0;\nint & int_ref = int_val;\nint const& int_const_ref = int_val;\nint const volatile& int_const_volatile_ref = int_val;\n\n//A type that represent any type:\nstruct any_type\n{\n  //Dummy operations to forbid to compilers with intrinsic\n  //type traits support to consider this type as a POD.\n  any_type() : m_data(1) {}\n  any_type(const any_type&) : m_data(2) {}\n  any_type& operator = (const any_type&)\n  { m_data = 3; return *this; }\n  ~any_type() { m_data = 0; }\n\n  size_t m_data;\n};\n\nany_type any;\nany_type* any_pointer;\nany_type const* any_const_pointer;\nany_type volatile* any_volatile_pointer;\nany_type const volatile* any_const_volatile_pointer;\n\n//A type that represent any pod type\nstruct any_pod_type\n{};\n\n#  if defined (_STLP_USE_BOOST_SUPPORT)\n//Mandatory for compilers without without partial template specialization.\nBOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(any_pod_type)\n#  endif\n\nany_pod_type any_pod;\nany_pod_type* any_pod_pointer;\nany_pod_type const* any_pod_const_pointer;\nany_pod_type volatile* any_pod_volatile_pointer;\nany_pod_type const volatile* any_pod_const_volatile_pointer;\n\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<any_pod_type> {\n    typedef __true_type has_trivial_default_constructor;\n    typedef __true_type has_trivial_copy_constructor;\n    typedef __true_type has_trivial_assignment_operator;\n    typedef __true_type has_trivial_destructor;\n    typedef __true_type is_POD_type;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n\nstruct base\n{};\nstruct derived : public base\n{};\n\n//\n// tests implementation\n//\ntemplate <typename _Src, typename _Dst>\nint is_convertible(_Src, _Dst) {\n#  if !defined(__BORLANDC__)\n  typedef typename _IsConvertible<_Src, _Dst>::_Ret _Ret;\n#  else\n  enum { _Is = _IsConvertible<_Src, _Dst>::value };\n  typedef typename __bool2type<_Is>::_Ret _Ret;\n#  endif\n  return type_to_value(_Ret());\n}\n\ntemplate <typename _Src, typename _Dst>\nint is_cv_convertible(_Src, _Dst) {\n#  if !defined(__BORLANDC__)\n  typedef typename _IsCVConvertible<_Src, _Dst>::_Ret _Ret;\n#  else\n  enum { _Is = _IsCVConvertible<_Src, _Dst>::value };\n  typedef typename __bool2type<_Is>::_Ret _Ret;\n#  endif\n  return type_to_value(_Ret());\n}\n#endif\n\nvoid TypeTraitsTest::manips()\n{\n#if defined (STLPORT)\n  {\n    typedef __bool2type<0>::_Ret _ZeroRet;\n    CPPUNIT_ASSERT( type_to_value(_ZeroRet()) == 0 );\n    typedef __bool2type<1>::_Ret _OneRet;\n    CPPUNIT_ASSERT( type_to_value(_OneRet()) == 1 );\n    typedef __bool2type<65456873>::_Ret _AnyRet;\n    CPPUNIT_ASSERT( type_to_value(_AnyRet()) == 1 );\n  }\n\n  {\n    CPPUNIT_ASSERT( __type2bool<__true_type>::_Ret == 1 );\n    CPPUNIT_ASSERT( __type2bool<__false_type>::_Ret == 0 );\n    CPPUNIT_ASSERT( __type2bool<any_type>::_Ret == 1 );\n  }\n\n  {\n    typedef _Not<__true_type>::_Ret _NotTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_NotTrueRet()) == 0 );\n    typedef _Not<__false_type>::_Ret _NotFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_NotFalseRet()) == 1 );\n  }\n\n  {\n    typedef _Land2<__true_type, __true_type>::_Ret _TrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 );\n    typedef _Land2<__true_type, __false_type>::_Ret _TrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 0 );\n    typedef _Land2<__false_type, __true_type>::_Ret _FalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 0 );\n    typedef _Land2<__false_type, __false_type>::_Ret _FalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 );\n  }\n\n  {\n    typedef _Land3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 );\n    typedef _Land3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 0 );\n    typedef _Land3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 0 );\n    typedef _Land3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 0 );\n    typedef _Land3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 0 );\n    typedef _Land3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 0 );\n    typedef _Land3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 0 );\n    typedef _Land3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 );\n  }\n\n  {\n    typedef _Lor2<__true_type, __true_type>::_Ret _TrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 );\n    typedef _Lor2<__true_type, __false_type>::_Ret _TrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 1 );\n    typedef _Lor2<__false_type, __true_type>::_Ret _FalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 1 );\n    typedef _Lor2<__false_type, __false_type>::_Ret _FalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 );\n  }\n\n  {\n    typedef _Lor3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 );\n    typedef _Lor3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 1 );\n    typedef _Lor3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 1 );\n    typedef _Lor3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 1 );\n    typedef _Lor3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 1 );\n    typedef _Lor3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 1 );\n    typedef _Lor3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 1 );\n    typedef _Lor3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet;\n    CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 );\n  }\n\n  {\n    typedef __select<1, __true_type, __false_type>::_Ret _SelectFirstRet;\n    CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 );\n    typedef __select<0, __true_type, __false_type>::_Ret _SelectSecondRet;\n    CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 );\n#  if defined (__BORLANDC__)\n    typedef __selectT<__true_type, __true_type, __false_type>::_Ret _SelectFirstRet;\n    CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 );\n    typedef __selectT<__false_type, __true_type, __false_type>::_Ret _SelectSecondRet;\n    CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 );\n#  endif\n  }\n\n  {\n    base b;\n    derived d;\n    const derived cd = d;\n    base *pb = &b;\n    derived *pd = &d;\n    derived const *pcd = pd;\n    CPPUNIT_CHECK( is_convertible(any, b) == 0 );\n    CPPUNIT_CHECK( is_convertible(d, b) == 1 );\n    CPPUNIT_CHECK( is_convertible(cd, b) == 1 );\n    // _IsCVConvertible only needs to work for pointer type:\n    //CPPUNIT_CHECK( is_cv_convertible(d, b) == 1 );\n    //CPPUNIT_CHECK( is_cv_convertible(cd, b) == 0 );\n\n    //_IsConvertible do not need to work for pointers:\n    //CPPUNIT_CHECK( is_convertible(pd, pb) == 1 );\n    //CPPUNIT_CHECK( is_convertible(pcd, pb) == 1 );\n\n    CPPUNIT_CHECK( is_cv_convertible(pd, pb) == 1 );\n    CPPUNIT_CHECK( is_cv_convertible(pcd, pb) == 0 );\n  }\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Type>\nint is_integer(_Type) {\n  typedef typename _IsIntegral<_Type>::_Ret _Ret;\n  return type_to_value(_Ret());\n}\n#endif\n\nvoid TypeTraitsTest::integer()\n{\n#if defined (STLPORT)\n  CPPUNIT_ASSERT( is_integer(bool()) == 1 );\n  CPPUNIT_ASSERT( is_integer(char()) == 1 );\n  typedef signed char signed_char;\n  CPPUNIT_ASSERT( is_integer(signed_char()) == 1 );\n  typedef unsigned char unsigned_char;\n  CPPUNIT_ASSERT( is_integer(unsigned_char()) == 1 );\n#  if defined (_STLP_HAS_WCHAR_T)\n  CPPUNIT_ASSERT( is_integer(wchar_t()) == 1 );\n#  endif\n  CPPUNIT_ASSERT( is_integer(short()) == 1 );\n  typedef unsigned short unsigned_short;\n  CPPUNIT_ASSERT( is_integer(unsigned_short()) == 1 );\n  CPPUNIT_ASSERT( is_integer(int()) == 1 );\n  typedef unsigned int unsigned_int;\n  CPPUNIT_ASSERT( is_integer(unsigned_int()) == 1 );\n  CPPUNIT_ASSERT( is_integer(long()) == 1 );\n  typedef unsigned long unsigned_long;\n  CPPUNIT_ASSERT( is_integer(unsigned_long()) == 1 );\n#  if defined (_STLP_LONG_LONG)\n  typedef _STLP_LONG_LONG long_long;\n  CPPUNIT_ASSERT( is_integer(long_long()) == 1 );\n  typedef unsigned _STLP_LONG_LONG unsigned_long_long;\n  CPPUNIT_ASSERT( is_integer(unsigned_long_long()) == 1 );\n#  endif\n  CPPUNIT_ASSERT( is_integer(float()) == 0 );\n  CPPUNIT_ASSERT( is_integer(double()) == 0 );\n#  if !defined ( _STLP_NO_LONG_DOUBLE )\n  typedef long double long_double;\n  CPPUNIT_ASSERT( is_integer(long_double()) == 0 );\n#  endif\n  CPPUNIT_ASSERT( is_integer(any) == 0 );\n  CPPUNIT_ASSERT( is_integer(any_pointer) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Type>\nint is_rational(_Type) {\n  typedef typename _IsRational<_Type>::_Ret _Ret;\n  return type_to_value(_Ret());\n}\n#endif\n\nvoid TypeTraitsTest::rational()\n{\n#if defined (STLPORT)\n  CPPUNIT_ASSERT( is_rational(bool()) == 0 );\n  CPPUNIT_ASSERT( is_rational(char()) == 0 );\n  typedef signed char signed_char;\n  CPPUNIT_ASSERT( is_rational(signed_char()) == 0 );\n  typedef unsigned char unsigned_char;\n  CPPUNIT_ASSERT( is_rational(unsigned_char()) == 0 );\n#  if defined (_STLP_HAS_WCHAR_T)\n  CPPUNIT_ASSERT( is_rational(wchar_t()) == 0 );\n#  endif\n  CPPUNIT_ASSERT( is_rational(short()) == 0 );\n  typedef unsigned short unsigned_short;\n  CPPUNIT_ASSERT( is_rational(unsigned_short()) == 0 );\n  CPPUNIT_ASSERT( is_rational(int()) == 0 );\n  typedef unsigned int unsigned_int;\n  CPPUNIT_ASSERT( is_rational(unsigned_int()) == 0 );\n  CPPUNIT_ASSERT( is_rational(long()) == 0 );\n  typedef unsigned long unsigned_long;\n  CPPUNIT_ASSERT( is_rational(unsigned_long()) == 0 );\n#  if defined (_STLP_LONG_LONG)\n  typedef _STLP_LONG_LONG long_long;\n  CPPUNIT_ASSERT( is_rational(long_long()) == 0 );\n  typedef unsigned _STLP_LONG_LONG unsigned_long_long;\n  CPPUNIT_ASSERT( is_rational(unsigned_long_long()) == 0 );\n#  endif\n  CPPUNIT_ASSERT( is_rational(float()) == 1 );\n  CPPUNIT_ASSERT( is_rational(double()) == 1 );\n#  if !defined ( _STLP_NO_LONG_DOUBLE )\n  typedef long double long_double;\n  CPPUNIT_ASSERT( is_rational(long_double()) == 1 );\n#  endif\n  CPPUNIT_ASSERT( is_rational(any) == 0 );\n  CPPUNIT_ASSERT( is_rational(any_pointer) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Type>\nint is_pointer_type(_Type) {\n  return type_to_value(_IsPtrType<_Type>::_Ret());\n}\n#endif\n\nvoid TypeTraitsTest::pointer_type()\n{\n#if defined (STLPORT)\n  CPPUNIT_ASSERT( is_pointer_type(int_val) == 0 );\n  CPPUNIT_ASSERT( is_pointer_type(int_pointer) == 1 );\n  CPPUNIT_ASSERT( is_pointer_type(int_const_pointer) == 1 );\n  CPPUNIT_ASSERT( is_pointer_type(int_volatile_pointer) == 1 );\n  CPPUNIT_ASSERT( is_pointer_type(int_const_volatile_pointer) == 1 );\n  CPPUNIT_ASSERT( is_pointer_type(int_ref) == 0 );\n  CPPUNIT_ASSERT( is_pointer_type(int_const_ref) == 0 );\n  CPPUNIT_ASSERT( is_pointer_type(any) == 0 );\n  CPPUNIT_ASSERT( is_pointer_type(any_pointer) == 1 );\n#endif\n}\n\nvoid TypeTraitsTest::reference_type()\n{\n#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  CPPUNIT_ASSERT( type_to_value(_IsRefType<int>::_Ret()) == 0 );\n  CPPUNIT_ASSERT( type_to_value(_IsRefType<int*>::_Ret()) == 0 );\n  CPPUNIT_ASSERT( type_to_value(_IsRefType<int&>::_Ret()) == 1 );\n  CPPUNIT_ASSERT( type_to_value(_IsRefType<int const&>::_Ret()) == 1 );\n  CPPUNIT_ASSERT( type_to_value(_IsRefType<int const volatile&>::_Ret()) == 1 );\n\n  CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __true_type(), __true_type())._Answer()) == 1 );\n  CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __false_type(), __false_type())._Answer()) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp1, typename _Tp2>\nint are_both_pointer_type (_Tp1, _Tp2) {\n  return type_to_value(_BothPtrType<_Tp1, _Tp2>::_Answer());\n}\n#endif\n\nvoid TypeTraitsTest::both_pointer_type()\n{\n#if defined (STLPORT)\n  CPPUNIT_CHECK( are_both_pointer_type(int_val, int_val) == 0 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_pointer, int_pointer) == 1 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_const_pointer, int_const_pointer) == 1 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_volatile_pointer, int_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_const_volatile_pointer, int_const_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_ref, int_ref) == 0 );\n  CPPUNIT_CHECK( are_both_pointer_type(int_const_ref, int_const_ref) == 0 );\n  CPPUNIT_CHECK( are_both_pointer_type(any, any) == 0 );\n  CPPUNIT_CHECK( are_both_pointer_type(any_pointer, any_pointer) == 1 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp1, typename _Tp2>\nint is_ok_to_use_memcpy(_Tp1 val1, _Tp2 val2) {\n  return type_to_value(_UseTrivialCopy(val1, val2)._Answer());\n}\n#endif\n\nvoid TypeTraitsTest::ok_to_use_memcpy()\n{\n#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_volatile_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, any_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, int_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_const_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, int_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_const_pointer) == 0 );\n  vector<float> **pvf = 0;\n  vector<int> **pvi = 0;\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(pvf, pvi) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memcpy(pvi, pvf) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp1, typename _Tp2>\nint is_ok_to_use_memmove(_Tp1 val1, _Tp2 val2) {\n  return type_to_value(_UseTrivialUCopy(val1, val2)._Answer());\n}\n#endif\n\nvoid TypeTraitsTest::ok_to_use_memmove()\n{\n#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_volatile_pointer, int_const_volatile_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, any_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, int_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_const_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, int_pointer) == 0 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_pointer) == 1 );\n  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_const_pointer) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp>\nint has_trivial_destructor(_Tp) {\n  typedef typename __type_traits<_Tp>::has_trivial_destructor _TrivialDestructor;\n  return type_to_value(_TrivialDestructor());\n}\n\nstruct DestructorMonitor\n{\n  ~DestructorMonitor()\n  { ++nb_destructor_call; }\n\n  static size_t nb_destructor_call;\n};\n\nsize_t DestructorMonitor::nb_destructor_call = 0;\n\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<DestructorMonitor> {\n    typedef __true_type has_trivial_default_constructor;\n    typedef __true_type has_trivial_copy_constructor;\n    typedef __true_type has_trivial_assignment_operator;\n    typedef __true_type has_trivial_destructor;\n    typedef __true_type is_POD_type;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\nvoid TypeTraitsTest::trivial_destructor()\n{\n#if defined (STLPORT)\n  CPPUNIT_CHECK( has_trivial_destructor(int_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(int_const_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(int_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(int_const_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(any) == 0 );\n  CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(any_pod) == 1 );\n  CPPUNIT_CHECK( has_trivial_destructor(string()) == 0 );\n\n  //Check of the meta information impact in a container implementation\n  {\n    vector<DestructorMonitor> v(10);\n    DestructorMonitor::nb_destructor_call = 0;\n  }\n  CPPUNIT_CHECK( DestructorMonitor::nb_destructor_call == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp>\nint is_POD_type(_Tp) {\n  typedef typename __type_traits<_Tp>::is_POD_type _IsPODType;\n  return type_to_value(_IsPODType());\n}\n#endif\n\nvoid TypeTraitsTest::is_POD()\n{\n#if defined (STLPORT)\n  CPPUNIT_CHECK( is_POD_type(int_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(int_const_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(int_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(int_const_volatile_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(any) == 0 );\n  CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 );\n  CPPUNIT_CHECK( is_POD_type(any_pod) == 1 );\n  CPPUNIT_CHECK( is_POD_type(string()) == 0 );\n#endif\n}\n\n#if defined (STLPORT)\ntemplate <typename _Tp>\nint is_stlport_class(_Tp) {\n  typedef _IsSTLportClass<_Tp> _STLportClass;\n#    if !defined (__BORLANDC__)\n  typedef typename _STLportClass::_Ret _Is;\n#    else\n  typedef typename __bool2type<_STLportClass::_Is>::_Ret _Is;\n#    endif\n  return type_to_value(_Is());\n}\n#endif\n\nvoid TypeTraitsTest::stlport_class()\n{\n#if defined (STLPORT)\n  CPPUNIT_CHECK( is_stlport_class(allocator<char>()) == 1 );\n#  if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)\n  CPPUNIT_CHECK( is_stlport_class(string()) == 1 );\n#  endif\n  CPPUNIT_CHECK( is_stlport_class(any) == 0 );\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/typeinfo_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <typeinfo>\n\n#if 0 /* !defined (_STLP_NO_RTTI) && !defined (_STLP_NO_TYPEINFO) */\n/* SourceForge: STLport bug report 1721844\n * type_info is not a member of stlp_std\n */\nclass A {};\n\nvoid type_info_header_test()\n{\n  const std::type_info& ti = typeid(A);\n}\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/unary.h",
    "content": "#ifndef _unary_h\n#define _unary_h\n#include <cmath>\n#include <cfloat>\n#include <functional>    //*TY 12/26/1998 - added to get unary_function\n\n#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)\nusing std::unary_function;\n#endif\n\nstruct odd : public unary_function<int, bool> {\n  bool operator()(int n_) const { return(n_ % 2) == 1; }\n};\n\nstruct positive : public unary_function<int, bool> {\n  bool operator()(int n_) const { return n_ >= 0; }\n};\n\nstruct square_root : public unary_function<double, double> {\n  double operator()(double x_) const\n  { return ::sqrt(x_); }\n};\n#endif // _unary_h\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/unary_test.cpp",
    "content": "#include <vector>\n#include \"unary.h\"\n#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass UnaryTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(UnaryTest);\n#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(ucompos1);\n  CPPUNIT_TEST(ucompos2);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(unegate1);\n  CPPUNIT_TEST(unegate2);\n#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(unegate3);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void ucompos1();\n  void ucompos2();\n  void unegate1();\n  void unegate2();\n  void unegate3();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(UnaryTest);\n\n//\n// tests implementation\n//\nvoid UnaryTest::unegate1()\n{\n  int array [3] = { 1, 2, 3 };\n  //unary_negate<odd>::argument_type arg_val = 0;\n  int* p = find_if((int*)array, (int*)array + 3, unary_negate<odd>(odd()));\n  CPPUNIT_ASSERT((p != array + 3));\n  CPPUNIT_ASSERT(*p==2);\n}\nvoid UnaryTest::unegate2()\n{\n  int array [3] = { 1, 2, 3 };\n  int* p = find_if((int*)array, (int*)array + 3, not1(odd()));\n  CPPUNIT_ASSERT(p != array + 3);\n  CPPUNIT_ASSERT(*p==2);\n}\n\nbool test_func(int param) {\n  return param < 3;\n}\nvoid UnaryTest::unegate3()\n{\n#if !defined (STLPORT) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n  int array [3] = { 1, 2, 3 };\n  int* p = find_if((int*)array, (int*)array + 3, not1(ptr_fun(test_func)));\n  CPPUNIT_ASSERT(p != array + 3);\n  CPPUNIT_ASSERT(*p==3);\n#endif\n}\n\nvoid UnaryTest::ucompos1()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int input [3] = { -1, -4, -16 };\n\n  double output[3];\n  transform((int*)input, (int*)input + 3, output, unary_compose<square_root, negate<int> >(square_root(), negate<int>()));\n\n  CPPUNIT_ASSERT(output[0]==1);\n  CPPUNIT_ASSERT(output[1]==2);\n  CPPUNIT_ASSERT(output[2]==4);\n#endif\n}\nvoid UnaryTest::ucompos2()\n{\n#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)\n  int input [3] = { -1, -4, -16 };\n\n  double output [3];\n  transform((int*)input, (int*)input + 3, output, compose1(square_root(), negate<int>()));\n\n  CPPUNIT_ASSERT(output[0]==1);\n  CPPUNIT_ASSERT(output[1]==2);\n  CPPUNIT_ASSERT(output[2]==4);\n#endif\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/uninitialized_test.cpp",
    "content": "#include <memory>\n#include <vector>\n#include <list>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass UninitializedTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(UninitializedTest);\n  CPPUNIT_TEST(copy_test);\n  //CPPUNIT_TEST(fill_test);\n  //CPPUNIT_TEST(fill_n_test);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void copy_test();\n  void fill_test();\n  void fill_n_test();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(UninitializedTest);\n\nstruct NotTrivialCopyStruct {\n  NotTrivialCopyStruct() : member(0) {}\n  NotTrivialCopyStruct(NotTrivialCopyStruct const&) : member(1) {}\n\n  int member;\n};\n\nstruct TrivialCopyStruct {\n  TrivialCopyStruct() : member(0) {}\n  TrivialCopyStruct(TrivialCopyStruct const&) : member(1) {}\n\n  int member;\n};\n\nstruct TrivialInitStruct {\n  TrivialInitStruct()\n  { ++nbConstructorCalls; }\n\n  static size_t nbConstructorCalls;\n};\n\nsize_t TrivialInitStruct::nbConstructorCalls = 0;\n\n#if defined (STLPORT)\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<TrivialCopyStruct> {\n     typedef __false_type has_trivial_default_constructor;\n     //This is a wrong declaration just to check that internaly a simple memcpy is called:\n     typedef __true_type has_trivial_copy_constructor;\n     typedef __true_type has_trivial_assignment_operator;\n     typedef __true_type has_trivial_destructor;\n     typedef __false_type is_POD_type;\n  };\n\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<TrivialInitStruct> {\n     //This is a wrong declaration just to check that internaly no initialization is done:\n     typedef __true_type has_trivial_default_constructor;\n     typedef __true_type has_trivial_copy_constructor;\n     typedef __true_type has_trivial_assignment_operator;\n     typedef __true_type has_trivial_destructor;\n     typedef __false_type is_POD_type;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\nstruct base {};\nstruct derived : public base {};\n\n//\n// tests implementation\n//\nvoid UninitializedTest::copy_test()\n{\n  {\n    //Random iterators\n    {\n      vector<NotTrivialCopyStruct> src(10);\n      vector<NotTrivialCopyStruct> dst(10);\n      uninitialized_copy(src.begin(), src.end(), dst.begin());\n      vector<NotTrivialCopyStruct>::const_iterator it(dst.begin()), end(dst.end());\n      for (; it != end; ++it) {\n        CPPUNIT_ASSERT( (*it).member == 1 );\n      }\n    }\n    {\n      /** Note: we use static arrays here so the iterators are always\n      pointers, even in debug mode. */\n      size_t const count = 10;\n      TrivialCopyStruct src[count];\n      TrivialCopyStruct dst[count];\n\n      TrivialCopyStruct* it = src + 0;\n      TrivialCopyStruct* end = src + count;\n      for (; it != end; ++it) {\n        (*it).member = 0;\n      }\n\n      uninitialized_copy(src+0, src+count, dst+0);\n      for (it = dst+0, end = dst+count; it != end; ++it) {\n#if defined (STLPORT)\n        /* If the member is 1, it means that library has not found any\n        optimization oportunity and called the regular copy-ctor instead. */\n        CPPUNIT_ASSERT( (*it).member == 0 );\n#else\n        CPPUNIT_ASSERT( (*it).member == 1 );\n#endif\n      }\n    }\n  }\n\n  {\n    //Bidirectional iterator\n    {\n      vector<NotTrivialCopyStruct> src(10);\n      list<NotTrivialCopyStruct> dst(10);\n\n      list<NotTrivialCopyStruct>::iterator it(dst.begin()), end(dst.end());\n      for (; it != end; ++it) {\n        (*it).member = -1;\n      }\n\n      uninitialized_copy(src.begin(), src.end(), dst.begin());\n\n      for (it = dst.begin(); it != end; ++it) {\n        CPPUNIT_ASSERT( (*it).member == 1 );\n      }\n    }\n\n    {\n      list<NotTrivialCopyStruct> src(10);\n      vector<NotTrivialCopyStruct> dst(10);\n\n      vector<NotTrivialCopyStruct>::iterator it(dst.begin()), end(dst.end());\n      for (; it != end; ++it) {\n        (*it).member = -1;\n      }\n\n      uninitialized_copy(src.begin(), src.end(), dst.begin());\n\n      for (it = dst.begin(); it != end; ++it) {\n        CPPUNIT_ASSERT( (*it).member == 1 );\n      }\n    }\n  }\n\n  {\n    //Using containers of native types:\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n    {\n      vector<int> src;\n      int i;\n      for (i = -5; i < 6; ++i) {\n        src.push_back(i);\n      }\n\n      //Building a vector result in a uninitialized_copy call internally\n      vector<unsigned int> dst(src.begin(), src.end());\n      vector<unsigned int>::const_iterator it(dst.begin());\n      for (i = -5; i < 6; ++i, ++it) {\n        CPPUNIT_ASSERT( *it == (unsigned int)i );\n      }\n    }\n\n    {\n      vector<char> src;\n      char i;\n      for (i = -5; i < 6; ++i) {\n        src.push_back(i);\n      }\n\n      //Building a vector result in a uninitialized_copy call internally\n      vector<unsigned int> dst(src.begin(), src.end());\n      vector<unsigned int>::const_iterator it(dst.begin());\n      for (i = -5; i < 6; ++i, ++it) {\n        CPPUNIT_ASSERT( *it == (unsigned int)i );\n      }\n    }\n\n    {\n      vector<int> src;\n      int i;\n      for (i = -5; i < 6; ++i) {\n        src.push_back(i);\n      }\n\n      //Building a vector result in a uninitialized_copy call internally\n      vector<float> dst(src.begin(), src.end());\n      vector<float>::const_iterator it(dst.begin());\n      for (i = -5; i < 6; ++i, ++it) {\n        CPPUNIT_ASSERT( *it == (float)i );\n      }\n    }\n\n    {\n      vector<vector<float>*> src(10);\n      vector<vector<float>*> dst(src.begin(), src.end());\n    }\n\n    {\n      derived d;\n      //base *pb = &d;\n      derived *pd = &d;\n      //base **ppb = &pd;\n      vector<derived*> src(10, pd);\n      vector<base*> dst(src.begin(), src.end());\n      vector<base*>::iterator it(dst.begin()), end(dst.end());\n      for (; it != end; ++it) {\n        CPPUNIT_ASSERT( (*it) == pd );\n      }\n    }\n#endif\n  }\n\n  {\n    //Vector initialization:\n    vector<TrivialInitStruct> vect(10);\n    //Just 1 constructor call for the default value:\n    CPPUNIT_ASSERT( TrivialInitStruct::nbConstructorCalls == 1  );\n  }\n}\n\n/*\nvoid UninitializedTest::fill_test()\n{\n}\n\nvoid UninitializedTest::fill_n_test()\n{\n}\n*/\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/unique_test.cpp",
    "content": "#include <algorithm>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass UniqueTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(UniqueTest);\n  CPPUNIT_TEST(uniqcpy1);\n  CPPUNIT_TEST(uniqcpy2);\n  CPPUNIT_TEST(unique1);\n  CPPUNIT_TEST(unique2);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void uniqcpy1();\n  void uniqcpy2();\n  void unique1();\n  void unique2();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(UniqueTest);\n\nstatic bool str_equal(const char* a_, const char* b_)\n{ return *a_ == *b_; }\n//\n// tests implementation\n//\nvoid UniqueTest::unique1()\n{\n  int numbers[8] = { 0, 1, 1, 2, 2, 2, 3, 4 };\n  unique((int*)numbers, (int*)numbers + 8);\n  // 0 1 2 3 4 2 3 4\n  CPPUNIT_ASSERT(numbers[0]==0);\n  CPPUNIT_ASSERT(numbers[1]==1);\n  CPPUNIT_ASSERT(numbers[2]==2);\n  CPPUNIT_ASSERT(numbers[3]==3);\n  CPPUNIT_ASSERT(numbers[4]==4);\n  CPPUNIT_ASSERT(numbers[5]==2);\n  CPPUNIT_ASSERT(numbers[6]==3);\n  CPPUNIT_ASSERT(numbers[7]==4);\n}\n\nvoid UniqueTest::unique2()\n{\n  const char* labels[] = {\"Q\", \"Q\", \"W\", \"W\", \"E\", \"E\", \"R\", \"T\", \"T\", \"Y\", \"Y\"};\n\n  const unsigned count = sizeof(labels) / sizeof(labels[0]);\n\n  unique((const char**)labels, (const char**)labels + count, str_equal);\n\n  // QWERTY\n  CPPUNIT_ASSERT(*labels[0] == 'Q');\n  CPPUNIT_ASSERT(*labels[1] == 'W');\n  CPPUNIT_ASSERT(*labels[2] == 'E');\n  CPPUNIT_ASSERT(*labels[3] == 'R');\n  CPPUNIT_ASSERT(*labels[4] == 'T');\n  CPPUNIT_ASSERT(*labels[5] == 'Y');\n\n}\n\nvoid UniqueTest::uniqcpy1()\n{\n  int numbers[8] = { 0, 1, 1, 2, 2, 2, 3, 4 };\n  int result[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };\n\n  unique_copy((int*)numbers, (int*)numbers + 8, (int*)result);\n\n  // 0 1 2 3 4 0 0 0\n  CPPUNIT_ASSERT(result[0]==0);\n  CPPUNIT_ASSERT(result[1]==1);\n  CPPUNIT_ASSERT(result[2]==2);\n  CPPUNIT_ASSERT(result[3]==3);\n  CPPUNIT_ASSERT(result[4]==4);\n  CPPUNIT_ASSERT(result[5]==0);\n  CPPUNIT_ASSERT(result[6]==0);\n  CPPUNIT_ASSERT(result[7]==0);\n}\n\nvoid UniqueTest::uniqcpy2()\n{\n  const char* labels[] = {\"Q\", \"Q\", \"W\", \"W\", \"E\", \"E\", \"R\", \"T\", \"T\", \"Y\", \"Y\"};\n  const char **plabels = (const char**)labels;\n\n  const size_t count = sizeof(labels) / sizeof(labels[0]);\n  const char* uCopy[count];\n  const char **puCopy = &uCopy[0];\n  fill(puCopy, puCopy + count, \"\");\n\n  unique_copy(plabels, plabels + count, puCopy, str_equal);\n\n  //QWERTY\n  CPPUNIT_ASSERT(*uCopy[0] == 'Q');\n  CPPUNIT_ASSERT(*uCopy[1] == 'W');\n  CPPUNIT_ASSERT(*uCopy[2] == 'E');\n  CPPUNIT_ASSERT(*uCopy[3] == 'R');\n  CPPUNIT_ASSERT(*uCopy[4] == 'T');\n  CPPUNIT_ASSERT(*uCopy[5] == 'Y');\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/unordered_test.cpp",
    "content": "#include <vector>\n#include <algorithm>\n#include <string>\n#if defined (STLPORT)\n#  include <unordered_map>\n#  include <unordered_set>\n#endif\n\n//#include <iostream>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#  if defined (STLPORT)\nusing namespace std::tr1;\n#  endif\n#endif\n\n//\n// TestCase class\n//\nclass UnorderedTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(UnorderedTest);\n#if !defined (STLPORT) \n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(uset);\n  CPPUNIT_TEST(umultiset);\n  CPPUNIT_TEST(umap);\n  CPPUNIT_TEST(umultimap);\n  CPPUNIT_TEST(user_case);\n  CPPUNIT_TEST(hash_policy);\n  CPPUNIT_TEST(buckets);\n  CPPUNIT_TEST(equal_range);\n  CPPUNIT_EXPLICIT_TEST(benchmark1);\n  CPPUNIT_EXPLICIT_TEST(benchmark2);\n#if !defined (_STLP_USE_CONTAINERS_EXTENSION)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(template_methods);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void uset();\n  void umultiset();\n  void umap();\n  void umultimap();\n  void user_case();\n  void hash_policy();\n  void buckets();\n  void equal_range();\n  void benchmark1();\n  void benchmark2();\n  void template_methods();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(UnorderedTest);\n\nconst int NB_ELEMS = 2000;\n\n//\n// tests implementation\n//\nvoid UnorderedTest::uset()\n{\n#if defined (STLPORT)\n  typedef unordered_set<int, hash<int>, equal_to<int> > usettype;\n  usettype us;\n\n  //Small compilation check of the copy constructor:\n  usettype us2(us);\n  //And assignment operator\n  us = us2;\n\n  int i;\n  pair<usettype::iterator, bool> ret;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    ret = us.insert(i);\n    CPPUNIT_ASSERT( ret.second );\n    CPPUNIT_ASSERT( *ret.first == i );\n\n    ret = us.insert(i);\n    CPPUNIT_ASSERT( !ret.second );\n    CPPUNIT_ASSERT( *ret.first == i );\n  }\n\n  vector<int> us_val;\n\n  usettype::local_iterator lit, litEnd;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    lit = us.begin(us.bucket(i));\n    litEnd = us.end(us.bucket(i));\n\n    usettype::size_type bucket_pos = us.bucket(*lit);\n    for (; lit != litEnd; ++lit) {\n      CPPUNIT_ASSERT( us.bucket(*lit) == bucket_pos );\n      us_val.push_back(*lit);\n    }\n  }\n\n  //A compilation time check to uncomment from time to time\n  {\n    //usettype::iterator it;\n    //CPPUNIT_ASSERT( it != lit );\n  }\n\n  sort(us_val.begin(), us_val.end());\n  for (i = 0; i < NB_ELEMS; ++i) {\n    CPPUNIT_ASSERT( us_val[i] == i );\n  }\n#endif\n}\n\nvoid UnorderedTest::umultiset()\n{\n#if defined (STLPORT)\n  typedef unordered_multiset<int, hash<int>, equal_to<int> > usettype;\n  usettype us;\n\n  int i;\n  usettype::iterator ret;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    ret = us.insert(i);\n    CPPUNIT_ASSERT( *ret == i );\n\n    ret = us.insert(i);\n    CPPUNIT_ASSERT( *ret == i );\n  }\n\n  CPPUNIT_ASSERT( us.size() == 2 * NB_ELEMS );\n  vector<int> us_val;\n\n  usettype::local_iterator lit, litEnd;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    lit = us.begin(us.bucket(i));\n    litEnd = us.end(us.bucket(i));\n\n    usettype::size_type bucket_pos = us.bucket(*lit);\n    for (; lit != litEnd; ++lit) {\n      CPPUNIT_ASSERT( us.bucket(*lit) == bucket_pos );\n      us_val.push_back(*lit);\n    }\n  }\n\n  sort(us_val.begin(), us_val.end());\n  for (i = 0; i < NB_ELEMS; ++i) {\n    CPPUNIT_ASSERT( us_val[2 * i] == i );\n    CPPUNIT_ASSERT( us_val[2 * i + 1] == i );\n  }\n#endif\n}\n\nvoid UnorderedTest::umap()\n{\n#if defined (STLPORT)\n  typedef unordered_map<int, int, hash<int>, equal_to<int> > umaptype;\n  umaptype us;\n\n  //Compilation check of the [] operator:\n  umaptype us2;\n  us[0] = us2[0];\n  us.clear();\n\n  {\n    //An other compilation check\n    typedef unordered_map<int, umaptype> uumaptype;\n    uumaptype uus;\n    umaptype const& uref = uus[0];\n    umaptype ucopy = uus[0];\n    ucopy = uref;\n    //Avoids warning:\n    //(void*)&uref;\n  }\n\n  int i;\n  pair<umaptype::iterator, bool> ret;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    umaptype::value_type p1(i, i);\n    ret = us.insert(p1);\n    CPPUNIT_ASSERT( ret.second );\n    CPPUNIT_ASSERT( *ret.first == p1 );\n\n    umaptype::value_type p2(i, i + 1);\n    ret = us.insert(p2);\n    CPPUNIT_ASSERT( !ret.second );\n    CPPUNIT_ASSERT( *ret.first == p1 );\n  }\n\n  {\n    //Lets look for some values to see if everything is normal:\n    umaptype::iterator umit;\n    for (int j = 0; j < NB_ELEMS; j += NB_ELEMS / 100) {\n      umit = us.find(j);\n\n      CPPUNIT_ASSERT( umit != us.end() );\n      CPPUNIT_ASSERT( (*umit).second == j );\n    }\n  }\n\n  CPPUNIT_ASSERT( us.size() == (size_t)NB_ELEMS );\n  vector<pair<int, int> > us_val;\n\n  umaptype::local_iterator lit, litEnd;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    lit = us.begin(us.bucket(i));\n    litEnd = us.end(us.bucket(i));\n\n    umaptype::size_type bucket_pos = us.bucket((*lit).first);\n    for (; lit != litEnd; ++lit) {\n      CPPUNIT_ASSERT( us.bucket((*lit).first) == bucket_pos );\n      us_val.push_back(make_pair((*lit).first, (*lit).second));\n    }\n  }\n\n  sort(us_val.begin(), us_val.end());\n  for (i = 0; i < NB_ELEMS; ++i) {\n    CPPUNIT_ASSERT( us_val[i] == make_pair(i, i) );\n  }\n#endif\n}\n\nvoid UnorderedTest::umultimap()\n{\n#if defined (STLPORT)\n  typedef unordered_multimap<int, int, hash<int>, equal_to<int> > umaptype;\n  umaptype us;\n\n  int i;\n  umaptype::iterator ret;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    umaptype::value_type p(i, i);\n    ret = us.insert(p);\n    CPPUNIT_ASSERT( *ret == p );\n\n    ret = us.insert(p);\n    CPPUNIT_ASSERT( *ret == p );\n  }\n\n  CPPUNIT_ASSERT( us.size() == 2 * NB_ELEMS );\n  typedef pair<int, int> ptype;\n  vector<ptype> us_val;\n\n  umaptype::local_iterator lit, litEnd;\n  for (i = 0; i < NB_ELEMS; ++i) {\n    lit = us.begin(us.bucket(i));\n    litEnd = us.end(us.bucket(i));\n\n    umaptype::size_type bucket_pos = us.bucket((*lit).first);\n    for (; lit != litEnd; ++lit) {\n      CPPUNIT_ASSERT( us.bucket((*lit).first) == bucket_pos );\n      us_val.push_back(ptype((*lit).first, (*lit).second));\n    }\n  }\n\n  sort(us_val.begin(), us_val.end());\n  for (i = 0; i < NB_ELEMS; ++i) {\n    ptype p(i, i);\n    CPPUNIT_ASSERT( us_val[i * 2] == p );\n    CPPUNIT_ASSERT( us_val[i * 2 + 1] == p );\n  }\n#endif\n}\n\nvoid UnorderedTest::user_case()\n{\n#if defined (STLPORT)\n  typedef unordered_map<int, string> UnorderedMap1;\n  typedef unordered_map<int, UnorderedMap1> UnorderedMap2;\n\n  UnorderedMap1 foo;\n  UnorderedMap2 bar;\n\n  foo.insert(UnorderedMap1::value_type(1, string(\"test1\")));\n  foo.insert(UnorderedMap1::value_type(2, string(\"test2\")));\n  foo.insert(UnorderedMap1::value_type(3, string(\"test3\")));\n  foo.insert(UnorderedMap1::value_type(4, string(\"test4\")));\n  foo.insert(UnorderedMap1::value_type(5, string(\"test5\")));\n\n  bar.insert(UnorderedMap2::value_type(0, foo));\n  UnorderedMap2::iterator it = bar.find(0);\n  CPPUNIT_ASSERT( it != bar.end() );\n\n  UnorderedMap1 &body = it->second;\n  UnorderedMap1::iterator cur = body.find(3);\n  CPPUNIT_ASSERT( cur != body.end() );\n\n  body.erase(body.begin(), body.end());\n  CPPUNIT_ASSERT( body.empty() );\n#endif\n}\n\nvoid UnorderedTest::hash_policy()\n{\n#if defined (STLPORT)\n  unordered_set<int> int_uset;\n\n  CPPUNIT_ASSERT( int_uset.max_load_factor() == 1.0f );\n  CPPUNIT_ASSERT( int_uset.load_factor() == 0.0f );\n\n  size_t nbInserts = int_uset.bucket_count() - 1;\n  for (int i = 0; (size_t)i < nbInserts; ++i) {\n    int_uset.insert(i);\n  }\n  CPPUNIT_ASSERT( int_uset.size() == nbInserts );\n\n  int_uset.max_load_factor(0.5f);\n  int_uset.rehash(0);\n  CPPUNIT_ASSERT( int_uset.load_factor() < int_uset.max_load_factor() );\n\n  size_t bucketsHint = int_uset.bucket_count() + 1;\n  int_uset.rehash(bucketsHint);\n  CPPUNIT_ASSERT( int_uset.bucket_count() >= bucketsHint );\n\n  CPPUNIT_ASSERT( int_uset.key_eq()(10, 10) );\n  CPPUNIT_ASSERT( int_uset.hash_function()(10) == 10 );\n#endif\n}\n\nvoid UnorderedTest::buckets()\n{\n#if defined (STLPORT) \n  unordered_set<int> int_uset;\n\n  CPPUNIT_ASSERT( int_uset.bucket_count() < int_uset.max_bucket_count() );\n\n  int i;\n  size_t nbBuckets = int_uset.bucket_count();\n  size_t nbInserts = int_uset.bucket_count() - 1;\n  for (i = 0; (size_t)i < nbInserts; ++i) {\n    int_uset.insert(i);\n  }\n  CPPUNIT_ASSERT( nbBuckets == int_uset.bucket_count() );\n\n  size_t bucketSizes = 0;\n  for (i = 0; (size_t)i < nbBuckets; ++i) {\n    bucketSizes += int_uset.bucket_size(i);\n  }\n  CPPUNIT_ASSERT( bucketSizes == int_uset.size() );\n#endif\n}\n\nvoid UnorderedTest::equal_range()\n{\n#if defined (STLPORT)\n  typedef unordered_multiset<size_t> umset;\n  {\n    //General test\n    umset iumset;\n    iumset.max_load_factor(10.0f);\n\n    size_t nbBuckets = iumset.bucket_count();\n\n    for (size_t i = 0; i < nbBuckets; ++i) {\n      iumset.insert(i);\n      iumset.insert(i + nbBuckets);\n      iumset.insert(i + 2 * nbBuckets);\n      iumset.insert(i + 3 * nbBuckets);\n      iumset.insert(i + 4 * nbBuckets);\n    }\n\n    CPPUNIT_ASSERT( nbBuckets == iumset.bucket_count() );\n    CPPUNIT_ASSERT( iumset.size() == 5 * nbBuckets );\n\n    pair<umset::iterator, umset::iterator> p = iumset.equal_range(1);\n    CPPUNIT_ASSERT( p.first != p.second );\n\n    size_t nbElems = iumset.size();\n    nbElems -= distance(p.first, p.second);\n    for (umset::iterator j = p.first; j != p.second;) {\n      iumset.erase(j++);\n    }\n\n    CPPUNIT_ASSERT( nbElems == iumset.size() );\n\n    p = iumset.equal_range(2);\n    CPPUNIT_ASSERT( p.first != p.second );\n    nbElems -= distance(p.first, p.second);\n    iumset.erase(p.first, p.second);\n    CPPUNIT_ASSERT( nbElems == iumset.size() );\n  }\n\n  {\n    //More specific test that tries to put many values in the same bucket\n    umset iumset;\n\n    size_t i;\n    //We are going to add at least 20 values, to get a stable hash container while doing that\n    //we force a large number of buckets:\n    iumset.rehash(193);\n\n    size_t nbBuckets = iumset.bucket_count();\n    const size_t targetedBucket = nbBuckets / 2;\n\n    //Lets put 10 values in the targeted bucket:\n    for (i = 0; i < 10; ++i) {\n      iumset.insert(targetedBucket + (i * nbBuckets));\n    }\n\n    //We put again 10 values in the targeted bucket and in reverse order:\n    for (i = 9; i <= 10; --i) {\n      iumset.insert(targetedBucket + (i * nbBuckets));\n    }\n\n    //Now we put some more elements until hash container is resized:\n    i = 0;\n    while (iumset.bucket_count() == nbBuckets) {\n      iumset.insert(i++);\n    }\n\n    //CPPUNIT_ASSERT( iumset.bucket_size(targetedBucket) == 21 );\n\n    pair<umset::iterator, umset::iterator> p = iumset.equal_range(targetedBucket);\n    CPPUNIT_ASSERT( p.first != p.second );\n    CPPUNIT_ASSERT( distance(p.first, p.second) == 3 );\n\n    // Now we remove some elements until hash container is resized:\n    nbBuckets = iumset.bucket_count();\n    while (iumset.bucket_count() == nbBuckets &&\n           !iumset.empty()) {\n      iumset.erase(iumset.begin());\n    }\n    CPPUNIT_ASSERT( iumset.load_factor() <= iumset.max_load_factor() );\n\n    // Adding an element back shouldn't change number of buckets:\n    nbBuckets = iumset.bucket_count();\n    iumset.insert(0);\n    CPPUNIT_ASSERT( iumset.bucket_count() == nbBuckets );\n  }\n\n  {\n    srand(0);\n    for (int runs = 0; runs < 2; ++runs) {\n      size_t magic = rand();\n      umset hum;\n      size_t c = 0;\n      for (int i = 0; i < 10000; ++i) {\n        if ((rand() % 500) == 0) {\n          hum.insert(magic);\n          ++c;\n        }\n        else {\n          size_t r;\n          while ((r = rand()) == magic)\n            ;\n          hum.insert(r);\n        }\n\n        /*\n        if ((float)(hum.size() + 1) / (float)hum.bucket_count() > hum.max_load_factor()) {\n          cout << \"Hash container dump: Nb elems: \" << hum.size() << \", Nb buckets: \" << hum.bucket_count() << \"\\n\";\n          for (size_t b = 0; b < hum.bucket_count(); ++b) {\n            if (hum.bucket_size(b) != 0) {\n              umset::local_iterator litBegin(hum.begin(b)), litEnd(hum.end(b));\n              cout << \"B\" << b << \": \";\n              for (umset::local_iterator lit = litBegin; lit != litEnd; ++lit) {\n                if (lit != litBegin) {\n                  cout << \" - \";\n                }\n                cout << *lit;\n              }\n              cout << \"\\n\";\n            }\n          }\n          cout << endl;\n        }\n        */\n      }\n      CPPUNIT_ASSERT( hum.count(magic) == c );\n    }\n  }\n#endif\n}\n\nvoid UnorderedTest::benchmark1()\n{\n#if defined (STLPORT)\n  typedef unordered_multiset<size_t> umset;\n\n  const size_t target = 500000;\n  umset iumset;\n  iumset.max_load_factor(10);\n  size_t i;\n  for (i = 0; i < target; ++i) {\n    iumset.insert(i);\n  }\n\n  for (i = 0; i < target; ++i) {\n    iumset.erase(i);\n  }\n#endif\n}\n\nvoid UnorderedTest::benchmark2()\n{\n#if defined (STLPORT)\n  typedef unordered_multiset<size_t> umset;\n\n  const size_t target = 500000;\n  umset iumset;\n  iumset.max_load_factor(10);\n  size_t i;\n  for (i = 0; i < target; ++i) {\n    iumset.insert(target - i);\n  }\n\n  for (i = 0; i < target; ++i) {\n    iumset.erase(target - i);\n  }\n#endif\n}\n\nstruct Key\n{\n  Key() : m_data(0) {}\n  explicit Key(int data) : m_data(data) {}\n\n  int m_data;\n\n#if defined (__DMC__) // slist<_Tp,_Alloc>::remove error\n  bool operator==(const Key&) const;\n#endif\n};\n\nstruct KeyHash\n{\n  size_t operator () (Key key) const\n  { return (size_t)key.m_data; }\n\n  size_t operator () (int data) const\n  { return (size_t)data; }\n};\n\nstruct KeyEqual\n{\n  bool operator () (Key lhs, Key rhs) const\n  { return lhs.m_data == rhs.m_data; }\n\n  bool operator () (Key lhs, int rhs) const\n  { return lhs.m_data == rhs; }\n\n  bool operator () (int lhs, Key rhs) const\n  { return lhs == rhs.m_data; }\n};\n\nstruct KeyHashPtr\n{\n  size_t operator () (Key const volatile *key) const\n  { return (size_t)key->m_data; }\n\n  size_t operator () (int data) const\n  { return (size_t)data; }\n};\n\nstruct KeyEqualPtr\n{\n  bool operator () (Key const volatile *lhs, Key const volatile *rhs) const\n  { return lhs->m_data == rhs->m_data; }\n\n  bool operator () (Key const volatile *lhs, int rhs) const\n  { return lhs->m_data == rhs; }\n\n  bool operator () (int lhs, Key const volatile *rhs) const\n  { return lhs == rhs->m_data; }\n};\n\nvoid UnorderedTest::template_methods()\n{\n#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)\n  {\n    typedef unordered_set<Key, KeyHash, KeyEqual> Container;\n    Container cont;\n    cont.insert(Key(1));\n    cont.insert(Key(2));\n    cont.insert(Key(3));\n    cont.insert(Key(4));\n\n    CPPUNIT_ASSERT( cont.count(Key(1)) == 1 );\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.bucket(2) == ccont.bucket(2) );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );\n  }\n\n  {\n    typedef unordered_set<Key*, KeyHashPtr, KeyEqualPtr> Container;\n    Container cont;\n    Key key1(1), key2(2), key3(3), key4(4);\n    cont.insert(&key1);\n    cont.insert(&key2);\n    cont.insert(&key3);\n    cont.insert(&key4);\n\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.bucket(2) == ccont.bucket(2) );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );\n  }\n  {\n    typedef unordered_multiset<Key, KeyHash, KeyEqual> Container;\n    Container cont;\n    cont.insert(Key(1));\n    cont.insert(Key(2));\n    cont.insert(Key(1));\n    cont.insert(Key(2));\n\n    CPPUNIT_ASSERT( cont.count(Key(1)) == 2 );\n    CPPUNIT_ASSERT( cont.count(1) == 2 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(1) != make_pair(cont.end(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.bucket(2) == ccont.bucket(2) );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.end(), ccont.end()) );\n  }\n\n  {\n    typedef unordered_multiset<Key const volatile*, KeyHashPtr, KeyEqualPtr> Container;\n    Container cont;\n    Key key1(1), key2(2), key3(3), key4(4);\n    cont.insert(&key1);\n    cont.insert(&key2);\n    cont.insert(&key3);\n    cont.insert(&key4);\n\n    CPPUNIT_ASSERT( cont.count(1) == 1 );\n    CPPUNIT_ASSERT( cont.count(5) == 0 );\n\n    CPPUNIT_ASSERT( cont.find(2) != cont.end() );\n    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );\n\n    Container const& ccont = cont;\n    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );\n    CPPUNIT_ASSERT( ccont.bucket(2) == ccont.bucket(2) );\n    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );\n  }\n#endif\n}\n\n#if defined (STLPORT) && \\\n    (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION))\n#  if !defined (__DMC__)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  unordered_set<IncompleteClass> usinstances;\n  typedef unordered_set<IncompleteClass>::iterator usit;\n  unordered_multiset<IncompleteClass> usminstances;\n  typedef unordered_multiset<IncompleteClass>::iterator usmit;\n\n  unordered_map<IncompleteClass, IncompleteClass> uminstances;\n  typedef unordered_map<IncompleteClass, IncompleteClass>::iterator umit;\n  unordered_multimap<IncompleteClass, IncompleteClass> umminstances;\n  typedef unordered_multimap<IncompleteClass, IncompleteClass>::iterator ummit;\n};\n#  endif\n#endif\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/utility_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <utility>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/valarray_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <valarray>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/valarray_test.cpp",
    "content": "#include <valarray>\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass ValarrayTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(ValarrayTest);\n  CPPUNIT_TEST(transcendentals);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void transcendentals();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(ValarrayTest);\n\n//\n// tests implementation\n//\n// For the moment this test is just a complitation test\n// everyone is welcome to do a real good unit test for\n// valarray functionality.\nvoid ValarrayTest::transcendentals()\n{\n#ifdef __SUNPRO_CC\n  using std::abs;\n#endif\n  {\n    valarray<double> darray;\n    valarray<double> tmp;\n    tmp = abs(darray);\n    tmp = acos(darray);\n    tmp = asin(darray);\n    tmp = atan(darray);\n    tmp = atan2(darray, tmp);\n    tmp = atan2(1.0, darray);\n    tmp = atan2(darray, 1.0);\n    tmp = cos(darray);\n    tmp = cosh(darray);\n    tmp = sin(darray);\n    tmp = sinh(darray);\n    tmp = tan(darray);\n#if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n    tmp = tanh(darray);\n#endif\n    tmp = exp(darray);\n    tmp = log(darray);\n    tmp = log10(darray);\n    tmp = pow(darray, tmp);\n    tmp = pow(1.0, darray);\n    tmp = pow(darray, 1.0);\n    tmp = sqrt(darray);\n  }\n  {\n    valarray<float> farray;\n    valarray<float> tmp;\n    tmp = abs(farray);\n    tmp = acos(farray);\n    tmp = asin(farray);\n    tmp = atan(farray);\n    tmp = atan2(farray, tmp);\n    tmp = atan2(1.0f, farray);\n    tmp = atan2(farray, 1.0f);\n    tmp = cos(farray);\n    tmp = cosh(farray);\n    tmp = sin(farray);\n    tmp = sinh(farray);\n    tmp = tan(farray);\n#if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n    tmp = tanh(farray);\n#endif\n    tmp = exp(farray);\n    tmp = log(farray);\n    tmp = log10(farray);\n    tmp = pow(farray, tmp);\n    tmp = pow(1.0f, farray);\n    tmp = pow(farray, 1.0f);\n    tmp = sqrt(farray);\n  }\n#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)\n  {\n    valarray<long double> ldarray;\n    valarray<long double> tmp;\n    tmp = abs(ldarray);\n    tmp = acos(ldarray);\n    tmp = asin(ldarray);\n    tmp = atan(ldarray);\n    tmp = atan2(ldarray, tmp);\n    tmp = atan2(1.0l, ldarray);\n    tmp = atan2(ldarray, 1.0l);\n    tmp = cos(ldarray);\n    tmp = cosh(ldarray);\n    tmp = sin(ldarray);\n    tmp = sinh(ldarray);\n    tmp = tan(ldarray);\n#  if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)\n    tmp = tanh(ldarray);\n#  endif\n    tmp = exp(ldarray);\n    tmp = log(ldarray);\n    tmp = log10(ldarray);\n    tmp = pow(ldarray, tmp);\n    tmp = pow(1.0l, ldarray);\n    tmp = pow(ldarray, 1.0l);\n    tmp = sqrt(ldarray);\n  }\n#endif\n  valarray<double> v0(2, 10);\n  valarray<double> v1(v0[slice(0, 1, 5)]);\n  v0[slice(0, 1, 5)] = 5;\n  valarray<double> v2(v0[gslice()]);\n  //valarray<double> v3(v0[valarray<bool>()]);\n  valarray<double> v4(v0[valarray<size_t>()]);\n}\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/vector_header_test.cpp",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <vector>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/vector_test.cpp",
    "content": "//Has to be first for StackAllocator swap overload to be taken\n//into account (at least using GCC 4.0.1)\n#include \"stack_allocator.h\"\n\n#include <vector>\n#include <algorithm>\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n# include <stdexcept>\n#endif\n\n#include \"cppunit/cppunit_proxy.h\"\n\n#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)\nusing namespace std;\n#endif\n\n//\n// TestCase class\n//\nclass VectorTest : public CPPUNIT_NS::TestCase\n{\n  CPPUNIT_TEST_SUITE(VectorTest);\n  CPPUNIT_TEST(vec_test_1);\n  CPPUNIT_TEST(vec_test_2);\n  CPPUNIT_TEST(vec_test_3);\n  CPPUNIT_TEST(vec_test_4);\n  CPPUNIT_TEST(vec_test_5);\n  CPPUNIT_TEST(vec_test_6);\n  CPPUNIT_TEST(vec_test_7);\n  CPPUNIT_TEST(capacity);\n  CPPUNIT_TEST(at);\n  CPPUNIT_TEST(pointer);\n  CPPUNIT_TEST(auto_ref);\n  CPPUNIT_TEST(allocator_with_state);\n  CPPUNIT_TEST(iterators);\n#if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES)\n  CPPUNIT_IGNORE;\n#endif\n  CPPUNIT_TEST(optimizations_check);\n  CPPUNIT_TEST(assign_check);\n  CPPUNIT_STOP_IGNORE;\n  CPPUNIT_TEST(ebo);\n  CPPUNIT_TEST_SUITE_END();\n\nprotected:\n  void vec_test_1();\n  void vec_test_2();\n  void vec_test_3();\n  void vec_test_4();\n  void vec_test_5();\n  void vec_test_6();\n  void vec_test_7();\n  void capacity();\n  void at();\n  void pointer();\n  void auto_ref();\n  void allocator_with_state();\n  void iterators();\n  void optimizations_check();\n  void assign_check();\n  void ebo();\n};\n\nCPPUNIT_TEST_SUITE_REGISTRATION(VectorTest);\n\n//\n// tests implementation\n//\nvoid VectorTest::vec_test_1()\n{\n  vector<int> v1; // Empty vector of integers.\n\n  CPPUNIT_ASSERT( v1.empty() == true );\n  CPPUNIT_ASSERT( v1.size() == 0 );\n\n  // CPPUNIT_ASSERT( v1.max_size() == INT_MAX / sizeof(int) );\n  // cout << \"max_size = \" << v1.max_size() << endl;\n  v1.push_back(42); // Add an integer to the vector.\n\n  CPPUNIT_ASSERT( v1.size() == 1 );\n\n  CPPUNIT_ASSERT( v1[0] == 42 );\n\n  {\n    vector<vector<int> > vect(10);\n    vector<vector<int> >::iterator it(vect.begin()), end(vect.end());\n    for (; it != end; ++it) {\n      CPPUNIT_ASSERT( (*it).empty() );\n      CPPUNIT_ASSERT( (*it).size() == 0 );\n      CPPUNIT_ASSERT( (*it).capacity() == 0 );\n      CPPUNIT_ASSERT( (*it).begin() == (*it).end() );\n    }\n  }\n}\n\nvoid VectorTest::vec_test_2()\n{\n  vector<double> v1; // Empty vector of doubles.\n  v1.push_back(32.1);\n  v1.push_back(40.5);\n  vector<double> v2; // Another empty vector of doubles.\n  v2.push_back(3.56);\n\n  CPPUNIT_ASSERT( v1.size() == 2 );\n  CPPUNIT_ASSERT( v1[0] == 32.1 );\n  CPPUNIT_ASSERT( v1[1] == 40.5 );\n\n  CPPUNIT_ASSERT( v2.size() == 1 );\n  CPPUNIT_ASSERT( v2[0] == 3.56 );\n  size_t v1Cap = v1.capacity();\n  size_t v2Cap = v2.capacity();\n\n  v1.swap(v2); // Swap the vector's contents.\n\n  CPPUNIT_ASSERT( v1.size() == 1 );\n  CPPUNIT_ASSERT( v1.capacity() == v2Cap );\n  CPPUNIT_ASSERT( v1[0] == 3.56 );\n\n  CPPUNIT_ASSERT( v2.size() == 2 );\n  CPPUNIT_ASSERT( v2.capacity() == v1Cap );\n  CPPUNIT_ASSERT( v2[0] == 32.1 );\n  CPPUNIT_ASSERT( v2[1] == 40.5 );\n\n  v2 = v1; // Assign one vector to another.\n\n  CPPUNIT_ASSERT( v2.size() == 1 );\n  CPPUNIT_ASSERT( v2[0] == 3.56 );\n}\n\nvoid VectorTest::vec_test_3()\n{\n  typedef vector<char> vec_type;\n\n  vec_type v1; // Empty vector of characters.\n  v1.push_back('h');\n  v1.push_back('i');\n\n  CPPUNIT_ASSERT( v1.size() == 2 );\n  CPPUNIT_ASSERT( v1[0] == 'h' );\n  CPPUNIT_ASSERT( v1[1] == 'i' );\n\n  vec_type v2(v1.begin(), v1.end());\n  v2[1] = 'o'; // Replace second character.\n\n  CPPUNIT_ASSERT( v2.size() == 2 );\n  CPPUNIT_ASSERT( v2[0] == 'h' );\n  CPPUNIT_ASSERT( v2[1] == 'o' );\n\n  CPPUNIT_ASSERT( (v1 == v2) == false );\n\n  CPPUNIT_ASSERT( (v1 < v2) == true );\n}\n\nvoid VectorTest::vec_test_4()\n{\n  vector<int> v(4);\n\n  v[0] = 1;\n  v[1] = 4;\n  v[2] = 9;\n  v[3] = 16;\n\n  CPPUNIT_ASSERT( v.front() == 1 );\n  CPPUNIT_ASSERT( v.back() == 16 );\n\n  v.push_back(25);\n\n  CPPUNIT_ASSERT( v.back() == 25 );\n  CPPUNIT_ASSERT( v.size() == 5 );\n\n  v.pop_back();\n\n  CPPUNIT_ASSERT( v.back() == 16 );\n  CPPUNIT_ASSERT( v.size() == 4 );\n}\n\nvoid VectorTest::vec_test_5()\n{\n  int array [] = { 1, 4, 9, 16 };\n\n  vector<int> v(array, array + 4);\n\n  CPPUNIT_ASSERT( v.size() == 4 );\n\n  CPPUNIT_ASSERT( v[0] == 1 );\n  CPPUNIT_ASSERT( v[1] == 4 );\n  CPPUNIT_ASSERT( v[2] == 9 );\n  CPPUNIT_ASSERT( v[3] == 16 );\n}\n\nvoid VectorTest::vec_test_6()\n{\n  int array [] = { 1, 4, 9, 16, 25, 36 };\n\n  vector<int> v(array, array + 6);\n  vector<int>::iterator vit;\n\n  CPPUNIT_ASSERT( v.size() == 6 );\n  CPPUNIT_ASSERT( v[0] == 1 );\n  CPPUNIT_ASSERT( v[1] == 4 );\n  CPPUNIT_ASSERT( v[2] == 9 );\n  CPPUNIT_ASSERT( v[3] == 16 );\n  CPPUNIT_ASSERT( v[4] == 25 );\n  CPPUNIT_ASSERT( v[5] == 36 );\n\n  vit = v.erase( v.begin() ); // Erase first element.\n  CPPUNIT_ASSERT( *vit == 4 );\n\n  CPPUNIT_ASSERT( v.size() == 5 );\n  CPPUNIT_ASSERT( v[0] == 4 );\n  CPPUNIT_ASSERT( v[1] == 9 );\n  CPPUNIT_ASSERT( v[2] == 16 );\n  CPPUNIT_ASSERT( v[3] == 25 );\n  CPPUNIT_ASSERT( v[4] == 36 );\n\n  vit = v.erase(v.end() - 1); // Erase last element.\n  CPPUNIT_ASSERT( vit == v.end() );\n\n  CPPUNIT_ASSERT( v.size() == 4 );\n  CPPUNIT_ASSERT( v[0] == 4 );\n  CPPUNIT_ASSERT( v[1] == 9 );\n  CPPUNIT_ASSERT( v[2] == 16 );\n  CPPUNIT_ASSERT( v[3] == 25 );\n\n\n  v.erase(v.begin() + 1, v.end() - 1); // Erase all but first and last.\n\n  CPPUNIT_ASSERT( v.size() == 2 );\n  CPPUNIT_ASSERT( v[0] == 4 );\n  CPPUNIT_ASSERT( v[1] == 25 );\n\n}\n\nvoid VectorTest::vec_test_7()\n{\n  int array1 [] = { 1, 4, 25 };\n  int array2 [] = { 9, 16 };\n\n  vector<int> v(array1, array1 + 3);\n  vector<int>::iterator vit;\n  vit = v.insert(v.begin(), 0); // Insert before first element.\n  CPPUNIT_ASSERT( *vit == 0 );\n\n  vit = v.insert(v.end(), 36);  // Insert after last element.\n  CPPUNIT_ASSERT( *vit == 36 );\n\n  CPPUNIT_ASSERT( v.size() == 5 );\n  CPPUNIT_ASSERT( v[0] == 0 );\n  CPPUNIT_ASSERT( v[1] == 1 );\n  CPPUNIT_ASSERT( v[2] == 4 );\n  CPPUNIT_ASSERT( v[3] == 25 );\n  CPPUNIT_ASSERT( v[4] == 36 );\n\n  // Insert contents of array2 before fourth element.\n  v.insert(v.begin() + 3, array2, array2 + 2);\n\n  CPPUNIT_ASSERT( v.size() == 7 );\n\n  CPPUNIT_ASSERT( v[0] == 0 );\n  CPPUNIT_ASSERT( v[1] == 1 );\n  CPPUNIT_ASSERT( v[2] == 4 );\n  CPPUNIT_ASSERT( v[3] == 9 );\n  CPPUNIT_ASSERT( v[4] == 16 );\n  CPPUNIT_ASSERT( v[5] == 25 );\n  CPPUNIT_ASSERT( v[6] == 36 );\n\n  v.clear();\n  CPPUNIT_ASSERT( v.empty() );\n\n  v.insert(v.begin(), 5, 10);\n  CPPUNIT_ASSERT( v.size() == 5 );\n  CPPUNIT_ASSERT( v[0] == 10 );\n  CPPUNIT_ASSERT( v[1] == 10 );\n  CPPUNIT_ASSERT( v[2] == 10 );\n  CPPUNIT_ASSERT( v[3] == 10 );\n  CPPUNIT_ASSERT( v[4] == 10 );\n\n  /*\n  {\n    vector<float> vf(2.0f, 3.0f);\n    CPPUNIT_ASSERT( vf.size() == 2 );\n    CPPUNIT_ASSERT( vf.front() == 3.0f );\n    CPPUNIT_ASSERT( vf.back() == 3.0f );\n  }\n  */\n}\n\nstruct TestStruct\n{\n  unsigned int a[3];\n};\n\nvoid VectorTest::capacity()\n{\n  {\n    vector<int> v;\n\n    CPPUNIT_ASSERT( v.capacity() == 0 );\n    v.push_back(42);\n    CPPUNIT_ASSERT( v.capacity() >= 1 );\n    v.reserve(5000);\n    CPPUNIT_ASSERT( v.capacity() >= 5000 );\n  }\n\n  {\n    //Test that used to generate an assertion when using __debug_alloc.\n    vector<TestStruct> va;\n    va.reserve(1);\n    va.reserve(2);\n  }\n}\n\nvoid VectorTest::at() {\n  vector<int> v;\n  vector<int> const& cv = v;\n\n  v.push_back(10);\n  CPPUNIT_ASSERT( v.at(0) == 10 );\n  v.at(0) = 20;\n  CPPUNIT_ASSERT( cv.at(0) == 20 );\n\n#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)\n  try {\n    v.at(1) = 20;\n    CPPUNIT_FAIL;\n  }\n  catch (out_of_range const&) {\n  }\n  catch (...) {\n    CPPUNIT_FAIL;\n  }\n#endif\n}\n\nvoid VectorTest::pointer()\n{\n  vector<int *> v1;\n  vector<int *> v2 = v1;\n  vector<int *> v3;\n\n  v3.insert( v3.end(), v1.begin(), v1.end() );\n}\n\nvoid VectorTest::auto_ref()\n{\n  vector<int> ref;\n  for (int i = 0; i < 5; ++i) {\n    ref.push_back(i);\n  }\n\n  vector<vector<int> > v_v_int(1, ref);\n  v_v_int.push_back(v_v_int[0]);\n  v_v_int.push_back(ref);\n  v_v_int.push_back(v_v_int[0]);\n  v_v_int.push_back(v_v_int[0]);\n  v_v_int.push_back(ref);\n\n  vector<vector<int> >::iterator vvit(v_v_int.begin()), vvitEnd(v_v_int.end());\n  for (; vvit != vvitEnd; ++vvit) {\n    CPPUNIT_ASSERT( *vvit == ref );\n  }\n\n  /*\n   * Forbidden by the Standard:\n  v_v_int.insert(v_v_int.end(), v_v_int.begin(), v_v_int.end());\n  for (vvit = v_v_int.begin(), vvitEnd = v_v_int.end();\n       vvit != vvitEnd; ++vvit) {\n    CPPUNIT_ASSERT( *vvit == ref );\n  }\n   */\n}\n\nvoid VectorTest::allocator_with_state()\n  {\n    char buf1[1024];\n    StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));\n\n    char buf2[1024];\n    StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));\n\n    {\n      typedef vector<int, StackAllocator<int> > VectorInt;\n      VectorInt vint1(10, 0, stack1);\n      VectorInt vint1Cpy(vint1);\n\n      VectorInt vint2(10, 1, stack2);\n      VectorInt vint2Cpy(vint2);\n\n      vint1.swap(vint2);\n\n      CPPUNIT_ASSERT( vint1.get_allocator().swaped() );\n      CPPUNIT_ASSERT( vint2.get_allocator().swaped() );\n\n      CPPUNIT_ASSERT( vint1 == vint2Cpy );\n      CPPUNIT_ASSERT( vint2 == vint1Cpy );\n      CPPUNIT_ASSERT( vint1.get_allocator() == stack2 );\n      CPPUNIT_ASSERT( vint2.get_allocator() == stack1 );\n    }\n    CPPUNIT_ASSERT( stack1.ok() );\n    CPPUNIT_ASSERT( stack2.ok() );\n  }\n\nstruct Point {\n  int x, y;\n};\n\nstruct PointEx : public Point {\n  PointEx() : builtFromBase(false) {}\n  PointEx(const Point&) : builtFromBase(true) {}\n\n  bool builtFromBase;\n};\n\n#if defined (STLPORT)\n#  if defined (_STLP_USE_NAMESPACES)\nnamespace std {\n#  endif\n  _STLP_TEMPLATE_NULL\n  struct __type_traits<PointEx> {\n    typedef __false_type has_trivial_default_constructor;\n    typedef __true_type has_trivial_copy_constructor;\n    typedef __true_type has_trivial_assignment_operator;\n    typedef __true_type has_trivial_destructor;\n    typedef __true_type is_POD_type;\n  };\n#  if defined (_STLP_USE_NAMESPACES)\n}\n#  endif\n#endif\n\n//This test check that vector implementation do not over optimize\n//operation as PointEx copy constructor is trivial\nvoid VectorTest::optimizations_check()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  vector<Point> v1(1);\n  CPPUNIT_ASSERT( v1.size() == 1 );\n\n  vector<PointEx> v2(v1.begin(), v1.end());\n  CPPUNIT_ASSERT( v2.size() == 1 );\n  CPPUNIT_ASSERT( v2[0].builtFromBase == true );\n#endif\n}\n\nvoid VectorTest::assign_check()\n{\n#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)\n  vector<int> v(3,1);\n  int array[] = { 1, 2, 3, 4, 5 };\n  \n  v.assign( array, array + 5 );\n  CPPUNIT_CHECK( v[4] == 5 );\n  CPPUNIT_CHECK( v[0] == 1 );\n  CPPUNIT_CHECK( v[1] == 2 );\n#endif\n}\n\nvoid VectorTest::iterators()\n{\n  vector<int> vint(10, 0);\n  vector<int> const& crvint = vint;\n\n  CPPUNIT_ASSERT( vint.begin() == vint.begin() );\n  CPPUNIT_ASSERT( crvint.begin() == vint.begin() );\n  CPPUNIT_ASSERT( vint.begin() == crvint.begin() );\n  CPPUNIT_ASSERT( crvint.begin() == crvint.begin() );\n\n  CPPUNIT_ASSERT( vint.begin() != vint.end() );\n  CPPUNIT_ASSERT( crvint.begin() != vint.end() );\n  CPPUNIT_ASSERT( vint.begin() != crvint.end() );\n  CPPUNIT_ASSERT( crvint.begin() != crvint.end() );\n\n  CPPUNIT_ASSERT( vint.rbegin() == vint.rbegin() );\n  // Not Standard:\n  //CPPUNIT_ASSERT( vint.rbegin() == crvint.rbegin() );\n  //CPPUNIT_ASSERT( crvint.rbegin() == vint.rbegin() );\n  CPPUNIT_ASSERT( crvint.rbegin() == crvint.rbegin() );\n\n  CPPUNIT_ASSERT( vint.rbegin() != vint.rend() );\n  // Not Standard:\n  //CPPUNIT_ASSERT( vint.rbegin() != crvint.rend() );\n  //CPPUNIT_ASSERT( crvint.rbegin() != vint.rend() );\n  CPPUNIT_ASSERT( crvint.rbegin() != crvint.rend() );\n}\n\n\n#if !defined (STLPORT) || \\\n    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)\n/* Simple compilation test: Check that nested types like iterator\n * can be access even if type used to instanciate container is not\n * yet completely defined.\n */\nclass IncompleteClass\n{\n  vector<IncompleteClass> instances;\n  typedef vector<IncompleteClass>::iterator it;\n};\n#endif\n\n#if defined (STLPORT)\n#  define NOTHROW _STLP_NOTHROW\n#else\n#  define NOTHROW throw()\n#endif\n\n/* This allocator implementation purpose is simply to break some\n * internal STLport mecanism specific to the STLport own allocator\n * implementation. */\ntemplate <class _Tp>\nstruct NotSTLportAllocator : public allocator<_Tp> {\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATE_CLASSES)\n  template <class _Tp1> struct rebind {\n    typedef NotSTLportAllocator<_Tp1> other;\n  };\n#endif\n  NotSTLportAllocator() NOTHROW {}\n#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)\n  template <class _Tp1> NotSTLportAllocator(const NotSTLportAllocator<_Tp1>&) NOTHROW {}\n#endif\n  NotSTLportAllocator(const NotSTLportAllocator<_Tp>&) NOTHROW {}\n  ~NotSTLportAllocator() NOTHROW {}\n};\n\n/* This test check a potential issue with empty base class\n * optimization. Some compilers (VC6) do not implement it\n * correctly resulting ina wrong behavior. */\nvoid VectorTest::ebo()\n{\n  // We use heap memory as test failure can corrupt vector internal\n  // representation making executable crash on vector destructor invocation.\n  // We prefer a simple memory leak, internal corruption should be reveal\n  // by size or capacity checks.\n  typedef vector<int, NotSTLportAllocator<int> > V;\n  V *pv1 = new V(1, 1);\n  V *pv2 = new V(10, 2);\n\n  size_t v1Capacity = pv1->capacity();\n  size_t v2Capacity = pv2->capacity();\n\n  pv1->swap(*pv2);\n\n  CPPUNIT_ASSERT( pv1->size() == 10 );\n  CPPUNIT_ASSERT( pv1->capacity() == v2Capacity );\n  CPPUNIT_ASSERT( (*pv1)[5] == 2 );\n\n  CPPUNIT_ASSERT( pv2->size() == 1 );\n  CPPUNIT_ASSERT( pv2->capacity() == v1Capacity );\n  CPPUNIT_ASSERT( (*pv2)[0] == 1 );\n\n  delete pv2;\n  delete pv1;\n}\n\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/wchar_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <wchar.h>\n"
  },
  {
    "path": "tests/device/test-gnustl-full/unit/wctype_header_test.c",
    "content": "/* This test purpose is simply to check Standard header independancy that\n * is to say that the header can be included alone without any previous\n * include.\n * Additionnaly, for C Standard headers that STLport expose, it can also be\n * used to check that files included by those headers are compatible with\n * pure C compilers.\n */\n#include <wctype.h>\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n# Test -1: Throw in exec, catch in exec covered elsewhere\n\n# Test 0: Throw in lib, catch in lib\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test0_foo\nLOCAL_SRC_FILES := test0_foo.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := Lib_catching_lib_throwing\nLOCAL_SRC_FILES := test0_main.cpp\nLOCAL_SHARED_LIBRARIES := test0_foo\ninclude $(BUILD_EXECUTABLE)\n\n# Test 1: Throw in lib, catch in exec\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test1_foo\nLOCAL_SRC_FILES := test1_foo.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_catching_lib_throwing\nLOCAL_SRC_FILES := test1_main.cpp\nLOCAL_SHARED_LIBRARIES := test1_foo\ninclude $(BUILD_EXECUTABLE)\n\n# Test 2: Throw in exec, catch in lib\n# Note: Symbol lookup from lib at exec fixed in bionic after android-14\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test2_foo\nLOCAL_SRC_FILES := test2_foo.cpp\n# This is required to rely on dynamic loader to resolve foo defined in exec\nLOCAL_ALLOW_UNDEFINED_SYMBOLS := true\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_throwing_lib_catching\nLOCAL_SRC_FILES := test2_main.cpp\nLOCAL_SHARED_LIBRARIES := test2_foo\ninclude $(BUILD_EXECUTABLE)\n\n#\n# 3 libs cases\n#\n\n# Test 3: Throw in lib2, catch in exec\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test3_bar\nLOCAL_SRC_FILES := test3_bar.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test3_foo\nLOCAL_SRC_FILES := test3_foo.cpp\nLOCAL_SHARED_LIBRARIES := test3_bar\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_catching_lib2_throwing\nLOCAL_SRC_FILES := test3_main.cpp\nLOCAL_SHARED_LIBRARIES := test3_foo test3_bar\ninclude $(BUILD_EXECUTABLE)\n\n# Test 4: Throw in lib2, catch in lib1\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test4_bar\nLOCAL_SRC_FILES := test4_bar.cpp\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test4_foo\nLOCAL_SRC_FILES := test4_foo.cpp\nLOCAL_SHARED_LIBRARIES := test4_bar\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := Lib1_catching_lib2_throwing\nLOCAL_SRC_FILES := test4_main.cpp\nLOCAL_SHARED_LIBRARIES := test4_foo test4_bar\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_shared\nAPP_CPPFLAGS := -fexceptions\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test0_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nint foo(void)\n{\n    try {\n        throw std::runtime_error(\"OK: Throw in lib, catch in lib!\");\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test0_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int foo();\n\nint main(void)\n{\n    return foo();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test1_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid foo(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib, catch in exec!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test1_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nint main(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test2_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nextern int bar(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test2_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int bar();\n\nvoid foo(void)\n{\n    throw std::runtime_error(\"OK: Throw in main, catch in lib!\");\n}\n\nint main(void)\n{\n    return bar();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test3_bar.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid bar(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib2, catch in exec!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test3_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void bar(void);\n\nvoid foo(void)\n{\n   bar();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test3_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nint main(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test4_bar.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid bar(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib2, catch in lib1!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test4_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int bar(void);\n\nint foo(void)\n{\n    try {\n        bar();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/jni/test4_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int foo();\n\nint main(void)\n{\n    return foo();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/properties.json",
    "content": "{\n    \"adbrunner-options\": {\n        \"exec_throwing_lib_catching\": {\"min-api-level\": 18}\n    }\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_shared-exception/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if subtest == 'exec_throwing_lib_catching' and device_platform < 19:\n        # The pre-KitKat linker didn't search the main executable for symbols,\n        # so running this test on an older device will result in:\n        #\n        #     could not load needed library 'libtest2_foo.so' for\n        #     './exec_throwing_lib_catching' (reloc_library[1306]:  2349 cannot\n        #     locate '_Z3foov'...\n        return device_platform\n    return None\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\n# Test -1: Throw in exec, catch in exec covered elsewhere\n\n# Test 0: Throw in lib, catch in lib\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test0_foo\nLOCAL_SRC_FILES := test0_foo.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := Lib_catching_lib_throwing\nLOCAL_SRC_FILES := test0_main.cpp\nLOCAL_STATIC_LIBRARIES := test0_foo\ninclude $(BUILD_EXECUTABLE)\n\n# Test 1: Throw in lib, catch in exec\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test1_foo\nLOCAL_SRC_FILES := test1_foo.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_catching_lib_throwing\nLOCAL_SRC_FILES := test1_main.cpp\nLOCAL_STATIC_LIBRARIES := test1_foo\ninclude $(BUILD_EXECUTABLE)\n\n# Test 2: Throw in exec, catch in lib\n# Note: Symbol lookup from lib at exec fixed in bionic after android-14\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test2_foo\nLOCAL_SRC_FILES := test2_foo.cpp\n# This is required to rely on dynamic loader to resolve foo defined in exec\nLOCAL_ALLOW_UNDEFINED_SYMBOLS := true\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_throwing_lib_catching\nLOCAL_SRC_FILES := test2_main.cpp\nLOCAL_STATIC_LIBRARIES := test2_foo\ninclude $(BUILD_EXECUTABLE)\n\n#\n# 3 libs cases\n#\n\n# Test 3: Throw in lib2, catch in exec\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test3_bar\nLOCAL_SRC_FILES := test3_bar.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test3_foo\nLOCAL_SRC_FILES := test3_foo.cpp\nLOCAL_STATIC_LIBRARIES := test3_bar\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := exec_catching_lib2_throwing\nLOCAL_SRC_FILES := test3_main.cpp\nLOCAL_STATIC_LIBRARIES := test3_foo test3_bar\ninclude $(BUILD_EXECUTABLE)\n\n# Test 4: Throw in lib2, catch in lib1\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test4_bar\nLOCAL_SRC_FILES := test4_bar.cpp\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test4_foo\nLOCAL_SRC_FILES := test4_foo.cpp\nLOCAL_STATIC_LIBRARIES := test4_bar\ninclude $(BUILD_STATIC_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := Lib1_catching_lib2_throwing\nLOCAL_SRC_FILES := test4_main.cpp\nLOCAL_STATIC_LIBRARIES := test4_foo test4_bar\ninclude $(BUILD_EXECUTABLE)\n\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := gnustl_static\nAPP_CPPFLAGS := -fexceptions\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test0_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nint foo(void)\n{\n    try {\n        throw std::runtime_error(\"OK: Throw in lib, catch in lib!\");\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test0_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int foo();\n\nint main(void)\n{\n    return foo();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test1_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid foo(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib, catch in exec!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test1_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nint main(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test2_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nextern int bar(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test2_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int bar();\n\nvoid foo(void)\n{\n    throw std::runtime_error(\"OK: Throw in main, catch in lib!\");\n}\n\nint main(void)\n{\n    return bar();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test3_bar.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid bar(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib2, catch in exec!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test3_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void bar(void);\n\nvoid foo(void)\n{\n   bar();\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test3_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern void foo();\n\nint main(void)\n{\n    try {\n        foo();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test4_bar.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nvoid bar(void)\n{\n    throw std::runtime_error(\"OK: Throw in lib2, catch in lib1!\");\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test4_foo.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int bar(void);\n\nint foo(void)\n{\n    try {\n        bar();\n        std::printf(\"KO: Exception was not thrown!\\n\");\n        return 1;\n    }\n    catch (std::exception &ex)\n    {\n        std::printf(\"%s\\n\", ex.what());\n    }\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-gnustl_static-exception/jni/test4_main.cpp",
    "content": "/*\n * Copyright (C) 2010 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include <stdexcept>\n#include <cstdlib>\n#include <cstdio>\n\nextern int foo();\n\nint main(void)\n{\n    return foo();\n}\n"
  },
  {
    "path": "tests/device/test-googletest-full/jni/Android.mk",
    "content": "# Just import the modules from GoogleTest\n# The APP_MODULES declaration in Application.mk will force the\n# build of those we're interested in.\n\n$(call import-module,third_party/googletest)\n"
  },
  {
    "path": "tests/device/test-googletest-full/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_MODULES := googletest_unittest\nAPP_STL := gnustl_static\nAPP_PLATFORM := android-9\n"
  },
  {
    "path": "tests/device/test-googletest-full/properties.json",
    "content": "{\n    \"broken-run\": \"gtest_all_test\",\n    \"long\": true\n}\n"
  },
  {
    "path": "tests/device/test-googletest-gnustl/jni/Android.mk",
    "content": "# Just import the modules for GoogleTest\n# The APP_MODULES declaration in Application.mk selects which\n# ones to build.\n$(call import-module,third_party/googletest)\n"
  },
  {
    "path": "tests/device/test-googletest-gnustl/jni/Application.mk",
    "content": "APP_ABI := all\n\n# This is a different with test-googletest-stlport:\n# target API level 9 since it allows the use of clone() and regex()\n# in the GoogleTest implementation.\n#\nAPP_PLATFORM := android-9\n\nAPP_MODULES := \\\n    googletest_sample_1 \\\n    googletest_sample_2 \\\n    googletest_sample_3 \\\n    googletest_sample_4 \\\n    googletest_sample_5 \\\n    googletest_sample_6 \\\n    googletest_sample_7 \\\n    googletest_sample_8 \\\n    googletest_sample_9 \\\n\nAPP_STL := gnustl_shared\n"
  },
  {
    "path": "tests/device/test-libc++/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_static\nLOCAL_SRC_FILES := test_1.cc\nLOCAL_STATIC_LIBRARIES := libc++_static\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_shared\nLOCAL_SRC_FILES := test_1.cc\nLOCAL_SHARED_LIBRARIES := libc++_shared\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,cxx-stl/llvm-libc++)\n"
  },
  {
    "path": "tests/device/test-libc++/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := none\nLIBCXX_FORCE_REBUILD := true\n"
  },
  {
    "path": "tests/device/test-libc++/jni/test_1.cc",
    "content": "// -*- C++ -*-\n//===-------------------- support/android/wchar_support.c ------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <locale>\n\nint main(void) {\n  // TODO(digit): This imbue is required, otherwise a crash will happen\n  // at runtime, with the following stack trace:\n  //\n  //   #0  0x00069ae0 in std::(anonymous namespace)::default_terminate () at jni/../../../../gabi++/src/terminate.cc:57\n  //   #1  0x00069e48 in std::terminate () at jni/../../../../gabi++/src/terminate.cc:123\n  //   #2  0x00067d44 in __cxxabiv1::call_terminate (unwind_exception=0x1827470) at jni/../../../../gabi++/src/helper_func_internal.cc:58\n  //   #3  0x00066bf8 in (anonymous namespace)::throwException (header=0x1827438) at jni/../../../../gabi++/src/cxxabi.cc:126\n  //   #4  0x00066e64 in __cxxabiv1::__cxa_throw (thrown_exc=0x18274c8, tinfo=0x7fa00, dest=0x69c10 <std::bad_cast::~bad_cast()>)\n  //       at jni/../../../../gabi++/src/cxxabi.cc:190\n  //   #5  0x00010be0 in std::__1::locale::__imp::use_facet (this=0x80b28, id=28) at jni/../../../libcxx/src/locale.cpp:426\n  //   #6  0x00010f50 in std::__1::locale::use_facet (this=0xbe980ab4, x=...) at jni/../../../libcxx/src/locale.cpp:568\n  //   #7  0x00009e88 in use_facet<std::__1::ctype<char> > (__l=<optimized out>) at jni/../../../libcxx/include/__locale:172\n  //   #8  widen (__c=10 '\\n', this=0x80084) at jni/../../../libcxx/include/ios:726\n  //   #9  std::__1::endl<char, std::__1::char_traits<char> > (__os=...) at jni/../../../libcxx/include/ostream:1181\n  //   #10 0x00009ad0 in operator<< (\n  //   __pf=0x9e20 <std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, this=0x80080) at jni/../../../libcxx/include/ostream:306\n  //   #11 main () at jni/test_1.cc:22\n  //\n  // The issue seems to be that on #9, the id retrieved through\n  // locale::id::__get() reaches 28, which is an invalid index in the\n  // facets_ vector defined in locale.cpp:124 and populated in\n  // locale::__imp::__imp(size_t) in the same source file.\n  //\n  // Not sure if a libc++ bug or something else. Investigate.\n  std::cout.imbue(std::locale(\"C\"));\n  std::cout << \"Hello World\" << std::endl;\n  return 0;\n}\n"
  },
  {
    "path": "tests/device/test-libc++/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'armeabi':\n        # I have no interest in supporting rebuilding libc++ for ARM5.\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/test-libc++-shared/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_shared\nLOCAL_SRC_FILES := test_1.cc\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-libc++-shared/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_shared\n"
  },
  {
    "path": "tests/device/test-libc++-shared/jni/test_1.cc",
    "content": "// -*- C++ -*-\n//===-------------------- support/android/wchar_support.c ------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <locale>\n\nint main(void) {\n  // TODO(digit): This imbue is required, otherwise a crash will happen\n  // at runtime, with the following stack trace:\n  //\n  //   #0  0x00069ae0 in std::(anonymous namespace)::default_terminate () at jni/../../../../gabi++/src/terminate.cc:57\n  //   #1  0x00069e48 in std::terminate () at jni/../../../../gabi++/src/terminate.cc:123\n  //   #2  0x00067d44 in __cxxabiv1::call_terminate (unwind_exception=0x1827470) at jni/../../../../gabi++/src/helper_func_internal.cc:58\n  //   #3  0x00066bf8 in (anonymous namespace)::throwException (header=0x1827438) at jni/../../../../gabi++/src/cxxabi.cc:126\n  //   #4  0x00066e64 in __cxxabiv1::__cxa_throw (thrown_exc=0x18274c8, tinfo=0x7fa00, dest=0x69c10 <std::bad_cast::~bad_cast()>)\n  //       at jni/../../../../gabi++/src/cxxabi.cc:190\n  //   #5  0x00010be0 in std::__1::locale::__imp::use_facet (this=0x80b28, id=28) at jni/../../../libcxx/src/locale.cpp:426\n  //   #6  0x00010f50 in std::__1::locale::use_facet (this=0xbe980ab4, x=...) at jni/../../../libcxx/src/locale.cpp:568\n  //   #7  0x00009e88 in use_facet<std::__1::ctype<char> > (__l=<optimized out>) at jni/../../../libcxx/include/__locale:172\n  //   #8  widen (__c=10 '\\n', this=0x80084) at jni/../../../libcxx/include/ios:726\n  //   #9  std::__1::endl<char, std::__1::char_traits<char> > (__os=...) at jni/../../../libcxx/include/ostream:1181\n  //   #10 0x00009ad0 in operator<< (\n  //   __pf=0x9e20 <std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, this=0x80080) at jni/../../../libcxx/include/ostream:306\n  //   #11 main () at jni/test_1.cc:22\n  //\n  // The issue seems to be that on #9, the id retrieved through\n  // locale::id::__get() reaches 28, which is an invalid index in the\n  // facets_ vector defined in locale.cpp:124 and populated in\n  // locale::__imp::__imp(size_t) in the same source file.\n  //\n  // Not sure if a libc++ bug or something else. Investigate.\n  std::cout.imbue(std::locale(\"C\"));\n  std::cout << \"Hello World\" << std::endl;\n  return 0;\n}\n"
  },
  {
    "path": "tests/device/test-libc++-shared-full/DATA",
    "content": "# run-tests.sh looks for this file to check if additional data is needed to run tests in this project\n# Format:\n#   <test-pattern> <datapath-pattern-relative-to-$NDK>\n#\ninput.output___file.streams___fstreams___ifstream.cons___move    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\ninput.output___file.streams___fstreams___ifstream.cons___pointer sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\ninput.output___file.streams___fstreams___ifstream.cons___string  sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\n\ninput.output___file.streams___fstreams___filebuf.virtuals___pbackfail sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/filebuf.virtuals/underflow.dat\ninput.output___file.streams___fstreams___filebuf.virtuals___underflow sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/filebuf.virtuals/underflow*.dat\n\ninput.output___file.streams___fstreams___ifstream.members___close        sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___open_pointer sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___open_string  sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___rdbuf        sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\n\ninput.output___file.streams___fstreams___ifstream.assign___member_swap    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/*.dat\ninput.output___file.streams___fstreams___ifstream.assign___move_assign    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/test.dat\ninput.output___file.streams___fstreams___ifstream.assign___nonmember_swap sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/*.dat\n\nlocalization___locales___locale.convenience___conversions___conversions.buffer__pbackfail sources/cxx-stl/llvm-libc++/libcxx/test/localization/locales/locale.convenience/conversions/conversions.buffer/underflow.dat\nlocalization___locales___locale.convenience___conversions___conversions.buffer__underflow sources/cxx-stl/llvm-libc++/libcxx/test/localization/locales/locale.convenience/conversions/conversions.buffer/*.dat\n"
  },
  {
    "path": "tests/device/test-libc++-shared-full/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nlibcxx-test-path := $(abspath $(NDK)/sources/cxx-stl/llvm-libc++/libcxx/test)\n\ndefine ev-gen-test\n__test := $1\ninclude $(CLEAR_VARS)\nLOCAL_SRC_FILES := $(libcxx-test-path)/$$(__test).pass.cpp\nLOCAL_MODULE := $$(subst /,___,$$(__test))\n\n# armeabi and mips needs libatomic to provide \"__atomic_is_lock_free\"\nifneq (,$(filter armeabi mips,$(TARGET_ARCH_ABI)))\nLOCAL_LDLIBS += -latomic\nendif\n\n# Enable RTTI and exception handling for some tests\nLOCAL_CPP_FEATURES := rtti exceptions\n\n# The following are for compiling libc++ tests only.  Regular code doesn't need them\nLOCAL_C_INCLUDES += $(libcxx-test-path)/support\nLOCAL_CPPFLAGS += -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS\n# Add -UNDEBUG because some libc++ tests use assert() which become nothing when -DNDEBUG\n# is defined in toolchains/*clang*/setup.mk for release build.  Interestingly there\n# is real work done inside some assert, so removing assert() isn't an option.\n#\nLOCAL_CPPFLAGS += -UNDEBUG\n\ninclude $(BUILD_EXECUTABLE)\nendef\n\n# The following black list contain test can't be compiled under various\n# configuration\n\nblack_list_all :=\n\nblack_list_clang3_4 := \\\n    utilities/tuple/tuple.tuple/TupleFunction\n\nifeq ($(__shared),true)\nifeq ($(TARGET_ARCH_ABI),x86)\n#   ToDo: Disabe the following test due to undefined 'scalbln'.  GCC compiles fine.\nblack_list_clang3_4 += \\\n    depr/depr.c.headers/math_h \\\n    numerics/c.math/cmath\nendif\nendif\n\n# gcc4.8 fails atomic_flag_test_and_set_explicit and test_and_set for x86, x86_64, mips, mips64\nblack_list_gcc4_8 := \\\n    atomics/atomics.flag/atomic_flag_test_and_set_explicit \\\n    atomics/atomics.flag/test_and_set \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible \\\n    utilities/utility/pairs/pairs.pair/copy_ctor\n\n# gcc4.9 segfault on size_size_string_size_size for armeabi\nblack_list_gcc4_9 := \\\n    $(black_list_gcc4_8) \\\n    strings/basic.string/string.ops/string_compare/size_size_string_size_size \\\n    utilities/tuple/tuple.tuple/TupleFunction\n\n# gcc4.6 fails all atomics\nblack_list_gcc4_6 := \\\n    $(black_list_gcc4_8) \\\n    atomics/atomics.fences/atomic_signal_fence \\\n    atomics/atomics.fences/atomic_thread_fence \\\n    atomics/atomics.flag/atomic_flag_clear_explicit \\\n    atomics/atomics.flag/atomic_flag_clear \\\n    atomics/atomics.flag/atomic_flag_test_and_set_explicit \\\n    atomics/atomics.flag/atomic_flag_test_and_set \\\n    atomics/atomics.flag/clear \\\n    atomics/atomics.flag/default \\\n    atomics/atomics.flag/init \\\n    atomics/atomics.flag/test_and_set \\\n    atomics/atomics.general/nothing_to_do \\\n    atomics/atomics.lockfree/lockfree \\\n    atomics/atomics.order/kill_dependency \\\n    atomics/atomics.order/memory_order \\\n    atomics/atomics.syn/nothing_to_do \\\n    atomics/atomics.types.generic/address \\\n    atomics/atomics.types.generic/bool \\\n    atomics/atomics.types.generic/cstdint_typedefs \\\n    atomics/atomics.types.generic/integral \\\n    atomics/atomics.types.generic/integral_typedefs \\\n    atomics/atomics.types.operations/atomics.types.operations.arith/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.general/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.pointer/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_init \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_is_lock_free \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_load_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_load \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_store_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_store \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init \\\n    atomics/atomics.types.operations/atomics.types.operations.templ/nothing_to_do \\\n    atomics/atomics.types.operations/nothing_to_do \\\n    atomics/version \\\n\n\n# Compute the back_list in this particular configuration: \"all | compiler | arch\"\n\nblack_list := $(black_list_all)\n\nifeq (clang3.4,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_clang3_4)\nelse\nifeq (clang3.3,$(NDK_TOOLCHAIN_VERSION))\n$(error clang3.3 is not tested against libc++.  Please upgrade to clang3.4 or after, or use gcc4.8)\nelse\nifeq (4.8,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_8)\nelse\nifeq (4.9,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_9)\nelse\nifeq (4.6,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_6)\nendif\nendif\nendif\nendif\nendif\n\n# Function  gen-test\ngen-test = \\\n    $(if $(strip $(filter-out $(black_list), $1)), $(eval $(call ev-gen-test, $1)))\n\n# All tests\n\n$(call gen-test, algorithms/alg.c.library/tested_elsewhere)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_backward)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.fill/fill_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.fill/fill)\n$(call gen-test, algorithms/alg.modifying.operations/alg.generate/generate_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.generate/generate)\n$(call gen-test, algorithms/alg.modifying.operations/alg.move/move_backward)\n$(call gen-test, algorithms/alg.modifying.operations/alg.move/move)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/is_partitioned)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition_point)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/stable_partition)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_urng)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace)\n$(call gen-test, algorithms/alg.modifying.operations/alg.reverse/reverse_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.reverse/reverse)\n$(call gen-test, algorithms/alg.modifying.operations/alg.rotate/rotate_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.rotate/rotate)\n$(call gen-test, algorithms/alg.modifying.operations/alg.swap/iter_swap)\n$(call gen-test, algorithms/alg.modifying.operations/alg.swap/swap_ranges)\n$(call gen-test, algorithms/alg.modifying.operations/alg.transform/binary_transform)\n$(call gen-test, algorithms/alg.modifying.operations/alg.transform/unary_transform)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_copy_pred)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_pred)\n$(call gen-test, algorithms/alg.modifying.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.nonmodifying/alg.adjacent.find/adjacent_find)\n$(call gen-test, algorithms/alg.nonmodifying/alg.adjacent.find/adjacent_find_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.all_of/all_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.any_of/any_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.count/count_if)\n$(call gen-test, algorithms/alg.nonmodifying/alg.count/count)\n$(call gen-test, algorithms/alg.nonmodifying/alg.equal/equal)\n$(call gen-test, algorithms/alg.nonmodifying/alg.equal/equal_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.end/find_end)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.end/find_end_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find_if_not)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find_if)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.first.of/find_first_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.first.of/find_first_of_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.foreach/test)\n$(call gen-test, algorithms/alg.nonmodifying/alg.is_permutation/is_permutation)\n$(call gen-test, algorithms/alg.nonmodifying/alg.is_permutation/is_permutation_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.none_of/none_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_n)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_n_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_pred)\n$(call gen-test, algorithms/alg.nonmodifying/mismatch/mismatch)\n$(call gen-test, algorithms/alg.nonmodifying/mismatch/mismatch_pred)\n$(call gen-test, algorithms/alg.nonmodifying/nothing_to_do)\n$(call gen-test, algorithms/algorithms.general/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/binary.search/binary_search_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/binary.search/binary_search)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/equal.range/equal_range_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/equal.range/equal_range)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/lower.bound/lower_bound_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/lower.bound/lower_bound)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/upper.bound/upper_bound_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/upper.bound/upper_bound)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_until_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_until)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/make.heap/make_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/make.heap/make_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/pop.heap/pop_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/pop.heap/pop_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/push.heap/push_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/push.heap/push_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/sort.heap/sort_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/sort.heap/sort_heap)\n$(call gen-test, algorithms/alg.sorting/alg.lex.comparison/lexicographical_compare_comp)\n$(call gen-test, algorithms/alg.sorting/alg.lex.comparison/lexicographical_compare)\n$(call gen-test, algorithms/alg.sorting/alg.merge/inplace_merge_comp)\n$(call gen-test, algorithms/alg.sorting/alg.merge/inplace_merge)\n$(call gen-test, algorithms/alg.sorting/alg.merge/merge_comp)\n$(call gen-test, algorithms/alg.sorting/alg.merge/merge)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min)\n$(call gen-test, algorithms/alg.sorting/alg.nth.element/nth_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.nth.element/nth_element)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/next_permutation_comp)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/next_permutation)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/prev_permutation_comp)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/prev_permutation)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/includes/includes_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/includes/includes)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.difference/set_difference_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.difference/set_difference)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.intersection/set_intersection_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.intersection/set_intersection)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/set_symmetric_difference_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/set_symmetric_difference)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.union/set_union_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.union/set_union)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_until_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_until)\n$(call gen-test, algorithms/alg.sorting/alg.sort/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort.copy/partial_sort_copy_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort.copy/partial_sort_copy)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort/partial_sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort/partial_sort)\n$(call gen-test, algorithms/alg.sorting/alg.sort/sort/sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/sort/sort)\n$(call gen-test, algorithms/alg.sorting/alg.sort/stable.sort/stable_sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/stable.sort/stable_sort)\n$(call gen-test, algorithms/alg.sorting/nothing_to_do)\n$(call gen-test, algorithms/version)\n$(call gen-test, atomics/atomics.fences/atomic_signal_fence)\n$(call gen-test, atomics/atomics.fences/atomic_thread_fence)\n$(call gen-test, atomics/atomics.flag/atomic_flag_clear_explicit)\n$(call gen-test, atomics/atomics.flag/atomic_flag_clear)\n$(call gen-test, atomics/atomics.flag/atomic_flag_test_and_set_explicit)\n$(call gen-test, atomics/atomics.flag/atomic_flag_test_and_set)\n$(call gen-test, atomics/atomics.flag/clear)\n$(call gen-test, atomics/atomics.flag/default)\n$(call gen-test, atomics/atomics.flag/init)\n$(call gen-test, atomics/atomics.flag/test_and_set)\n$(call gen-test, atomics/atomics.general/nothing_to_do)\n$(call gen-test, atomics/atomics.lockfree/lockfree)\n$(call gen-test, atomics/atomics.order/kill_dependency)\n$(call gen-test, atomics/atomics.order/memory_order)\n$(call gen-test, atomics/atomics.syn/nothing_to_do)\n$(call gen-test, atomics/atomics.types.generic/address)\n$(call gen-test, atomics/atomics.types.generic/bool)\n$(call gen-test, atomics/atomics.types.generic/cstdint_typedefs)\n$(call gen-test, atomics/atomics.types.generic/integral)\n$(call gen-test, atomics/atomics.types.generic/integral_typedefs)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.arith/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.general/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.pointer/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_init)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_is_lock_free)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_load_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_load)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_store_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_store)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.templ/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/nothing_to_do)\n$(call gen-test, atomics/version)\n$(call gen-test, containers/associative/map/compare)\n$(call gen-test, containers/associative/map/map.access/at)\n$(call gen-test, containers/associative/map/map.access/empty)\n$(call gen-test, containers/associative/map/map.access/index_key)\n$(call gen-test, containers/associative/map/map.access/index_rv_key)\n$(call gen-test, containers/associative/map/map.access/index_tuple)\n$(call gen-test, containers/associative/map/map.access/iterator)\n$(call gen-test, containers/associative/map/map.access/max_size)\n$(call gen-test, containers/associative/map/map.access/size)\n$(call gen-test, containers/associative/map/map.cons/alloc)\n$(call gen-test, containers/associative/map/map.cons/assign_initializer_list)\n$(call gen-test, containers/associative/map/map.cons/compare_alloc)\n$(call gen-test, containers/associative/map/map.cons/compare)\n$(call gen-test, containers/associative/map/map.cons/copy_alloc)\n$(call gen-test, containers/associative/map/map.cons/copy_assign)\n$(call gen-test, containers/associative/map/map.cons/copy)\n$(call gen-test, containers/associative/map/map.cons/default_noexcept)\n$(call gen-test, containers/associative/map/map.cons/default)\n$(call gen-test, containers/associative/map/map.cons/default_recursive)\n$(call gen-test, containers/associative/map/map.cons/dtor_noexcept)\n$(call gen-test, containers/associative/map/map.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/map/map.cons/initializer_list_compare)\n$(call gen-test, containers/associative/map/map.cons/initializer_list)\n$(call gen-test, containers/associative/map/map.cons/iter_iter_comp_alloc)\n$(call gen-test, containers/associative/map/map.cons/iter_iter_comp)\n$(call gen-test, containers/associative/map/map.cons/iter_iter)\n$(call gen-test, containers/associative/map/map.cons/move_alloc)\n$(call gen-test, containers/associative/map/map.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/map/map.cons/move_assign)\n$(call gen-test, containers/associative/map/map.cons/move_noexcept)\n$(call gen-test, containers/associative/map/map.cons/move)\n$(call gen-test, containers/associative/map/map.modifiers/clear)\n$(call gen-test, containers/associative/map/map.modifiers/emplace_hint)\n$(call gen-test, containers/associative/map/map.modifiers/emplace)\n$(call gen-test, containers/associative/map/map.modifiers/erase_iter_iter)\n$(call gen-test, containers/associative/map/map.modifiers/erase_iter)\n$(call gen-test, containers/associative/map/map.modifiers/erase_key)\n$(call gen-test, containers/associative/map/map.modifiers/insert_cv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_initializer_list)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_cv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_iter)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_rv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_rv)\n$(call gen-test, containers/associative/map/map.ops/count)\n$(call gen-test, containers/associative/map/map.ops/equal_range)\n$(call gen-test, containers/associative/map/map.ops/find)\n$(call gen-test, containers/associative/map/map.ops/lower_bound)\n$(call gen-test, containers/associative/map/map.ops/upper_bound)\n$(call gen-test, containers/associative/map/map.special/member_swap)\n$(call gen-test, containers/associative/map/map.special/non_member_swap)\n$(call gen-test, containers/associative/map/map.special/swap_noexcept)\n$(call gen-test, containers/associative/map/types)\n$(call gen-test, containers/associative/map/version)\n$(call gen-test, containers/associative/multimap/empty)\n$(call gen-test, containers/associative/multimap/iterator)\n$(call gen-test, containers/associative/multimap/max_size)\n$(call gen-test, containers/associative/multimap/multimap.cons/alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/assign_initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.cons/compare_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/compare)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy_assign)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy)\n$(call gen-test, containers/associative/multimap/multimap.cons/default_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/default)\n$(call gen-test, containers/associative/multimap/multimap.cons/dtor_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list_compare)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter_comp_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter_comp)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_assign)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/move)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/clear)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/emplace_hint)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/emplace)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_key)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_cv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_cv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_rv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_rv)\n$(call gen-test, containers/associative/multimap/multimap.ops/count)\n$(call gen-test, containers/associative/multimap/multimap.ops/equal_range)\n$(call gen-test, containers/associative/multimap/multimap.ops/find)\n$(call gen-test, containers/associative/multimap/multimap.ops/lower_bound)\n$(call gen-test, containers/associative/multimap/multimap.ops/upper_bound)\n$(call gen-test, containers/associative/multimap/multimap.special/member_swap)\n$(call gen-test, containers/associative/multimap/multimap.special/non_member_swap)\n$(call gen-test, containers/associative/multimap/multimap.special/swap_noexcept)\n$(call gen-test, containers/associative/multimap/scary)\n$(call gen-test, containers/associative/multimap/size)\n$(call gen-test, containers/associative/multimap/types)\n$(call gen-test, containers/associative/multiset/clear)\n$(call gen-test, containers/associative/multiset/count)\n$(call gen-test, containers/associative/multiset/emplace_hint)\n$(call gen-test, containers/associative/multiset/emplace)\n$(call gen-test, containers/associative/multiset/empty)\n$(call gen-test, containers/associative/multiset/equal_range)\n$(call gen-test, containers/associative/multiset/erase_iter_iter)\n$(call gen-test, containers/associative/multiset/erase_iter)\n$(call gen-test, containers/associative/multiset/erase_key)\n$(call gen-test, containers/associative/multiset/find)\n$(call gen-test, containers/associative/multiset/insert_cv)\n$(call gen-test, containers/associative/multiset/insert_initializer_list)\n$(call gen-test, containers/associative/multiset/insert_iter_cv)\n$(call gen-test, containers/associative/multiset/insert_iter_iter)\n$(call gen-test, containers/associative/multiset/insert_iter_rv)\n$(call gen-test, containers/associative/multiset/insert_rv)\n$(call gen-test, containers/associative/multiset/iterator)\n$(call gen-test, containers/associative/multiset/lower_bound)\n$(call gen-test, containers/associative/multiset/max_size)\n$(call gen-test, containers/associative/multiset/multiset.cons/alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/assign_initializer_list)\n$(call gen-test, containers/associative/multiset/multiset.cons/compare_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/compare)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy_assign)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy)\n$(call gen-test, containers/associative/multiset/multiset.cons/default_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/default)\n$(call gen-test, containers/associative/multiset/multiset.cons/dtor_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list_compare)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter_comp)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_assign)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/move)\n$(call gen-test, containers/associative/multiset/multiset.special/member_swap)\n$(call gen-test, containers/associative/multiset/multiset.special/non_member_swap)\n$(call gen-test, containers/associative/multiset/multiset.special/swap_noexcept)\n$(call gen-test, containers/associative/multiset/scary)\n$(call gen-test, containers/associative/multiset/size)\n$(call gen-test, containers/associative/multiset/types)\n$(call gen-test, containers/associative/multiset/upper_bound)\n$(call gen-test, containers/associative/set/clear)\n$(call gen-test, containers/associative/set/count)\n$(call gen-test, containers/associative/set/emplace_hint)\n$(call gen-test, containers/associative/set/emplace)\n$(call gen-test, containers/associative/set/empty)\n$(call gen-test, containers/associative/set/equal_range)\n$(call gen-test, containers/associative/set/erase_iter_iter)\n$(call gen-test, containers/associative/set/erase_iter)\n$(call gen-test, containers/associative/set/erase_key)\n$(call gen-test, containers/associative/set/find)\n$(call gen-test, containers/associative/set/insert_cv)\n$(call gen-test, containers/associative/set/insert_initializer_list)\n$(call gen-test, containers/associative/set/insert_iter_cv)\n$(call gen-test, containers/associative/set/insert_iter_iter)\n$(call gen-test, containers/associative/set/insert_iter_rv)\n$(call gen-test, containers/associative/set/insert_rv)\n$(call gen-test, containers/associative/set/iterator)\n$(call gen-test, containers/associative/set/lower_bound)\n$(call gen-test, containers/associative/set/max_size)\n$(call gen-test, containers/associative/set/set.cons/alloc)\n$(call gen-test, containers/associative/set/set.cons/assign_initializer_list)\n$(call gen-test, containers/associative/set/set.cons/compare_alloc)\n$(call gen-test, containers/associative/set/set.cons/compare)\n$(call gen-test, containers/associative/set/set.cons/copy_alloc)\n$(call gen-test, containers/associative/set/set.cons/copy_assign)\n$(call gen-test, containers/associative/set/set.cons/copy)\n$(call gen-test, containers/associative/set/set.cons/default_noexcept)\n$(call gen-test, containers/associative/set/set.cons/default)\n$(call gen-test, containers/associative/set/set.cons/dtor_noexcept)\n$(call gen-test, containers/associative/set/set.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/set/set.cons/initializer_list_compare)\n$(call gen-test, containers/associative/set/set.cons/initializer_list)\n$(call gen-test, containers/associative/set/set.cons/iter_iter_alloc)\n$(call gen-test, containers/associative/set/set.cons/iter_iter_comp)\n$(call gen-test, containers/associative/set/set.cons/iter_iter)\n$(call gen-test, containers/associative/set/set.cons/move_alloc)\n$(call gen-test, containers/associative/set/set.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/set/set.cons/move_assign)\n$(call gen-test, containers/associative/set/set.cons/move_noexcept)\n$(call gen-test, containers/associative/set/set.cons/move)\n$(call gen-test, containers/associative/set/set.special/member_swap)\n$(call gen-test, containers/associative/set/set.special/non_member_swap)\n$(call gen-test, containers/associative/set/set.special/swap_noexcept)\n$(call gen-test, containers/associative/set/size)\n$(call gen-test, containers/associative/set/types)\n$(call gen-test, containers/associative/set/upper_bound)\n$(call gen-test, containers/associative/set/version)\n$(call gen-test, containers/associative/tree_balance_after_insert)\n$(call gen-test, containers/associative/tree_left_rotate)\n$(call gen-test, containers/associative/tree_remove)\n$(call gen-test, containers/associative/tree_right_rotate)\n$(call gen-test, containers/container.adaptors/nothing_to_do)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_cont_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_rcont_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_copy_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_move_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/assign_copy)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/assign_move)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp_container)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp_rcontainer)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp_cont)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp_rcont)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/emplace)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/empty)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/pop)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/push)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/push_rvalue)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/size)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/swap)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/top)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.special/swap)\n$(call gen-test, containers/container.adaptors/priority.queue/types)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_container_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_queue_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_rcontainer_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_rqueue_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_container)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_rcontainer)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/assign_copy)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/assign_move)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/back_const)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/back)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/emplace)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/empty)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/front_const)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/front)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/pop)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/push)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/push_rv)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/size)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/swap)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/types)\n$(call gen-test, containers/container.adaptors/queue/queue.ops/eq)\n$(call gen-test, containers/container.adaptors/queue/queue.ops/lt)\n$(call gen-test, containers/container.adaptors/queue/queue.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.special/swap)\n$(call gen-test, containers/container.adaptors/queue/version)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_container_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_copy_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_rcontainer_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_rqueue_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_container)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_rcontainer)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/assign_copy)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/assign_move)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/emplace)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/empty)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/pop)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/push)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/push_rv)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/size)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/swap)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/top_const)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/top)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/types)\n$(call gen-test, containers/container.adaptors/stack/stack.ops/eq)\n$(call gen-test, containers/container.adaptors/stack/stack.ops/lt)\n$(call gen-test, containers/container.adaptors/stack/stack.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.special/swap)\n$(call gen-test, containers/container.adaptors/stack/version)\n$(call gen-test, containers/container.requirements/associative.reqmts/associative.reqmts.except/nothing_to_do)\n$(call gen-test, containers/container.requirements/associative.reqmts/nothing_to_do)\n$(call gen-test, containers/container.requirements/container.requirements.dataraces/nothing_to_do)\n$(call gen-test, containers/container.requirements/container.requirements.general/nothing_to_do)\n$(call gen-test, containers/container.requirements/nothing_to_do)\n$(call gen-test, containers/container.requirements/sequence.reqmts/nothing_to_do)\n$(call gen-test, containers/container.requirements/unord.req/nothing_to_do)\n$(call gen-test, containers/container.requirements/unord.req/unord.req.except/nothing_to_do)\n$(call gen-test, containers/containers.general/nothing_to_do)\n$(call gen-test, containers/nothing_to_do)\n$(call gen-test, containers/sequences/array/array.cons/default)\n$(call gen-test, containers/sequences/array/array.cons/initializer_list)\n$(call gen-test, containers/sequences/array/array.data/data_const)\n$(call gen-test, containers/sequences/array/array.data/data)\n$(call gen-test, containers/sequences/array/array.fill/fill)\n$(call gen-test, containers/sequences/array/array.size/size)\n$(call gen-test, containers/sequences/array/array.special/swap)\n$(call gen-test, containers/sequences/array/array.swap/swap)\n$(call gen-test, containers/sequences/array/array.tuple/get_const)\n$(call gen-test, containers/sequences/array/array.tuple/get)\n$(call gen-test, containers/sequences/array/array.tuple/get_rv)\n$(call gen-test, containers/sequences/array/array.tuple/tuple_element)\n$(call gen-test, containers/sequences/array/array.tuple/tuple_size)\n$(call gen-test, containers/sequences/array/array.zero/tested_elsewhere)\n$(call gen-test, containers/sequences/array/at)\n$(call gen-test, containers/sequences/array/begin)\n$(call gen-test, containers/sequences/array/front_back)\n$(call gen-test, containers/sequences/array/indexing)\n$(call gen-test, containers/sequences/array/iterators)\n$(call gen-test, containers/sequences/array/types)\n$(call gen-test, containers/sequences/array/version)\n$(call gen-test, containers/sequences/deque/deque.capacity/access)\n$(call gen-test, containers/sequences/deque/deque.capacity/resize_size)\n$(call gen-test, containers/sequences/deque/deque.capacity/resize_size_value)\n$(call gen-test, containers/sequences/deque/deque.capacity/shrink_to_fit)\n$(call gen-test, containers/sequences/deque/deque.cons/alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_size_value)\n$(call gen-test, containers/sequences/deque/deque.cons/copy_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/copy)\n$(call gen-test, containers/sequences/deque/deque.cons/default_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/default)\n$(call gen-test, containers/sequences/deque/deque.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/iter_iter_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/iter_iter)\n$(call gen-test, containers/sequences/deque/deque.cons/move_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/move_assign)\n$(call gen-test, containers/sequences/deque/deque.cons/move_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/move)\n$(call gen-test, containers/sequences/deque/deque.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/op_equal)\n$(call gen-test, containers/sequences/deque/deque.cons/size)\n$(call gen-test, containers/sequences/deque/deque.cons/size_value_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/size_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace)\n$(call gen-test, containers/sequences/deque/deque.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/erase_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_rvalue)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_size_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/pop_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/pop_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front_rvalue)\n$(call gen-test, containers/sequences/deque/deque.special/copy_backward)\n$(call gen-test, containers/sequences/deque/deque.special/copy)\n$(call gen-test, containers/sequences/deque/deque.special/move_backward)\n$(call gen-test, containers/sequences/deque/deque.special/move)\n$(call gen-test, containers/sequences/deque/deque.special/swap_noexcept)\n$(call gen-test, containers/sequences/deque/deque.special/swap)\n$(call gen-test, containers/sequences/deque/iterators)\n$(call gen-test, containers/sequences/deque/types)\n$(call gen-test, containers/sequences/deque/version)\n$(call gen-test, containers/sequences/dynarray/dynarray.cons/alloc)\n$(call gen-test, containers/sequences/dynarray/dynarray.cons/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.data/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.mutate/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/at)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/begin_end)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/capacity)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/front_back)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/indexing)\n$(call gen-test, containers/sequences/dynarray/dynarray.traits/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.zero/default)\n$(call gen-test, containers/sequences/dynarray/nothing_to_do)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.access/front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_copy)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_move)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_op_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/copy_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/copy)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default_recursive)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/init_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/range_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size_value_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.iter/before_begin)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.iter/iterators)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/clear)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/emplace_after)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/emplace_front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/pop_front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_const)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/resize_size)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/merge)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/merge_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/remove_if)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/remove)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/reverse)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/sort)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/sort_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_flist)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_one)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/unique)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/unique_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/equal)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/member_swap)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/non_member_swap)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/relational)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/swap_noexcept)\n$(call gen-test, containers/sequences/forwardlist/max_size)\n$(call gen-test, containers/sequences/forwardlist/types)\n$(call gen-test, containers/sequences/forwardlist/version)\n$(call gen-test, containers/sequences/list/db_back)\n$(call gen-test, containers/sequences/list/db_cback)\n$(call gen-test, containers/sequences/list/db_cfront)\n$(call gen-test, containers/sequences/list/db_front)\n$(call gen-test, containers/sequences/list/db_iterators_6)\n$(call gen-test, containers/sequences/list/db_iterators_7)\n$(call gen-test, containers/sequences/list/db_iterators_8)\n$(call gen-test, containers/sequences/list/db_iterators_9)\n$(call gen-test, containers/sequences/list/iterators)\n$(call gen-test, containers/sequences/list/list.capacity/resize_size)\n$(call gen-test, containers/sequences/list/list.capacity/resize_size_value)\n$(call gen-test, containers/sequences/list/list.cons/assign_copy)\n$(call gen-test, containers/sequences/list/list.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/assign_move)\n$(call gen-test, containers/sequences/list/list.cons/copy_alloc)\n$(call gen-test, containers/sequences/list/list.cons/copy)\n$(call gen-test, containers/sequences/list/list.cons/default_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/default)\n$(call gen-test, containers/sequences/list/list.cons/default_stack_alloc)\n$(call gen-test, containers/sequences/list/list.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/list/list.cons/initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/input_iterator)\n$(call gen-test, containers/sequences/list/list.cons/move_alloc)\n$(call gen-test, containers/sequences/list/list.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/move_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/move)\n$(call gen-test, containers/sequences/list/list.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/size_type)\n$(call gen-test, containers/sequences/list/list.cons/size_value_alloc)\n$(call gen-test, containers/sequences/list/list.modifiers/clear)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace_back)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace_front)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_db1)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_db2)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_rvalue)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_size_value)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_value)\n$(call gen-test, containers/sequences/list/list.modifiers/pop_back)\n$(call gen-test, containers/sequences/list/list.modifiers/pop_front)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front_rvalue)\n$(call gen-test, containers/sequences/list/list.ops/merge_comp)\n$(call gen-test, containers/sequences/list/list.ops/merge)\n$(call gen-test, containers/sequences/list/list.ops/remove_if)\n$(call gen-test, containers/sequences/list/list.ops/remove)\n$(call gen-test, containers/sequences/list/list.ops/reverse)\n$(call gen-test, containers/sequences/list/list.ops/sort_comp)\n$(call gen-test, containers/sequences/list/list.ops/sort)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list_iter_iter)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list_iter)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list)\n$(call gen-test, containers/sequences/list/list.ops/unique)\n$(call gen-test, containers/sequences/list/list.ops/unique_pred)\n$(call gen-test, containers/sequences/list/list.special/db_swap_1)\n$(call gen-test, containers/sequences/list/list.special/swap_noexcept)\n$(call gen-test, containers/sequences/list/list.special/swap)\n$(call gen-test, containers/sequences/list/types)\n$(call gen-test, containers/sequences/list/version)\n$(call gen-test, containers/sequences/nothing_to_do)\n$(call gen-test, containers/sequences/vector.bool/assign_copy)\n$(call gen-test, containers/sequences/vector.bool/assign_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/assign_move)\n$(call gen-test, containers/sequences/vector.bool/capacity)\n$(call gen-test, containers/sequences/vector.bool/construct_default)\n$(call gen-test, containers/sequences/vector.bool/construct_iter_iter_alloc)\n$(call gen-test, containers/sequences/vector.bool/construct_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/construct_size)\n$(call gen-test, containers/sequences/vector.bool/construct_size_value_alloc)\n$(call gen-test, containers/sequences/vector.bool/construct_size_value)\n$(call gen-test, containers/sequences/vector.bool/copy_alloc)\n$(call gen-test, containers/sequences/vector.bool/copy)\n$(call gen-test, containers/sequences/vector.bool/default_noexcept)\n$(call gen-test, containers/sequences/vector.bool/dtor_noexcept)\n$(call gen-test, containers/sequences/vector.bool/emplace_back)\n$(call gen-test, containers/sequences/vector.bool/emplace)\n$(call gen-test, containers/sequences/vector.bool/erase_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/erase_iter)\n$(call gen-test, containers/sequences/vector.bool/find)\n$(call gen-test, containers/sequences/vector.bool/initializer_list_alloc)\n$(call gen-test, containers/sequences/vector.bool/initializer_list)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_size_value)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_value)\n$(call gen-test, containers/sequences/vector.bool/iterators)\n$(call gen-test, containers/sequences/vector.bool/move_alloc)\n$(call gen-test, containers/sequences/vector.bool/move_assign_noexcept)\n$(call gen-test, containers/sequences/vector.bool/move_noexcept)\n$(call gen-test, containers/sequences/vector.bool/move)\n$(call gen-test, containers/sequences/vector.bool/op_equal_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/push_back)\n$(call gen-test, containers/sequences/vector.bool/reserve)\n$(call gen-test, containers/sequences/vector.bool/resize_size)\n$(call gen-test, containers/sequences/vector.bool/resize_size_value)\n$(call gen-test, containers/sequences/vector.bool/shrink_to_fit)\n$(call gen-test, containers/sequences/vector.bool/swap_noexcept)\n$(call gen-test, containers/sequences/vector.bool/swap)\n$(call gen-test, containers/sequences/vector.bool/types)\n$(call gen-test, containers/sequences/vector.bool/vector_bool)\n$(call gen-test, containers/sequences/vector/asan)\n$(call gen-test, containers/sequences/vector/const_value_type)\n$(call gen-test, containers/sequences/vector/db_back)\n$(call gen-test, containers/sequences/vector/db_cback)\n$(call gen-test, containers/sequences/vector/db_cfront)\n$(call gen-test, containers/sequences/vector/db_cindex)\n$(call gen-test, containers/sequences/vector/db_front)\n$(call gen-test, containers/sequences/vector/db_index)\n$(call gen-test, containers/sequences/vector/db_iterators_2)\n$(call gen-test, containers/sequences/vector/db_iterators_3)\n$(call gen-test, containers/sequences/vector/db_iterators_4)\n$(call gen-test, containers/sequences/vector/db_iterators_5)\n$(call gen-test, containers/sequences/vector/db_iterators_6)\n$(call gen-test, containers/sequences/vector/db_iterators_7)\n$(call gen-test, containers/sequences/vector/db_iterators_8)\n$(call gen-test, containers/sequences/vector/iterators)\n$(call gen-test, containers/sequences/vector/types)\n$(call gen-test, containers/sequences/vector/vector.capacity/capacity)\n$(call gen-test, containers/sequences/vector/vector.capacity/reserve)\n$(call gen-test, containers/sequences/vector/vector.capacity/resize_size)\n$(call gen-test, containers/sequences/vector/vector.capacity/resize_size_value)\n$(call gen-test, containers/sequences/vector/vector.capacity/shrink_to_fit)\n$(call gen-test, containers/sequences/vector/vector.capacity/swap)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_copy)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_move)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_default)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_iter_iter_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size_value_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size_value)\n$(call gen-test, containers/sequences/vector/vector.cons/copy_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/copy)\n$(call gen-test, containers/sequences/vector/vector.cons/default_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/default.recursive)\n$(call gen-test, containers/sequences/vector/vector.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/initializer_list)\n$(call gen-test, containers/sequences/vector/vector.cons/move_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/move_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/move)\n$(call gen-test, containers/sequences/vector/vector.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.data/data_const)\n$(call gen-test, containers/sequences/vector/vector.data/data)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace_extra)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_db1)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_db2)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_rvalue)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_size_value)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_value)\n$(call gen-test, containers/sequences/vector/vector.modifiers/pop_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/vector/vector.special/db_swap_1)\n$(call gen-test, containers/sequences/vector/vector.special/swap_noexcept)\n$(call gen-test, containers/sequences/vector/vector.special/swap)\n$(call gen-test, containers/sequences/vector/version)\n$(call gen-test, containers/unord/next_prime)\n$(call gen-test, containers/unord/unord.map/bucket_count)\n$(call gen-test, containers/unord/unord.map/bucket)\n$(call gen-test, containers/unord/unord.map/bucket_size)\n$(call gen-test, containers/unord/unord.map/compare)\n$(call gen-test, containers/unord/unord.map/count)\n$(call gen-test, containers/unord/unord.map/db_iterators_7)\n$(call gen-test, containers/unord/unord.map/db_iterators_8)\n$(call gen-test, containers/unord/unord.map/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.map/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.map/eq)\n$(call gen-test, containers/unord/unord.map/equal_range_const)\n$(call gen-test, containers/unord/unord.map/equal_range_non_const)\n$(call gen-test, containers/unord/unord.map/find_const)\n$(call gen-test, containers/unord/unord.map/find_non_const)\n$(call gen-test, containers/unord/unord.map/iterators)\n$(call gen-test, containers/unord/unord.map/load_factor)\n$(call gen-test, containers/unord/unord.map/local_iterators)\n$(call gen-test, containers/unord/unord.map/max_bucket_count)\n$(call gen-test, containers/unord/unord.map/max_load_factor)\n$(call gen-test, containers/unord/unord.map/max_size)\n$(call gen-test, containers/unord/unord.map/rehash)\n$(call gen-test, containers/unord/unord.map/reserve)\n$(call gen-test, containers/unord/unord.map/swap_member)\n$(call gen-test, containers/unord/unord.map/types)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/clear)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/emplace_hint)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/emplace)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_const_iter)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_db1)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_db2)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_key)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_range)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_init)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_range)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_rvalue)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/copy)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/default)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/at)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/index)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/index_tuple)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.map/version)\n$(call gen-test, containers/unord/unord.multimap/bucket_count)\n$(call gen-test, containers/unord/unord.multimap/bucket)\n$(call gen-test, containers/unord/unord.multimap/bucket_size)\n$(call gen-test, containers/unord/unord.multimap/count)\n$(call gen-test, containers/unord/unord.multimap/db_iterators_7)\n$(call gen-test, containers/unord/unord.multimap/db_iterators_8)\n$(call gen-test, containers/unord/unord.multimap/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.multimap/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.multimap/eq)\n$(call gen-test, containers/unord/unord.multimap/equal_range_const)\n$(call gen-test, containers/unord/unord.multimap/equal_range_non_const)\n$(call gen-test, containers/unord/unord.multimap/find_const)\n$(call gen-test, containers/unord/unord.multimap/find_non_const)\n$(call gen-test, containers/unord/unord.multimap/iterators)\n$(call gen-test, containers/unord/unord.multimap/load_factor)\n$(call gen-test, containers/unord/unord.multimap/local_iterators)\n$(call gen-test, containers/unord/unord.multimap/max_bucket_count)\n$(call gen-test, containers/unord/unord.multimap/max_load_factor)\n$(call gen-test, containers/unord/unord.multimap/max_size)\n$(call gen-test, containers/unord/unord.multimap/rehash)\n$(call gen-test, containers/unord/unord.multimap/reserve)\n$(call gen-test, containers/unord/unord.multimap/scary)\n$(call gen-test, containers/unord/unord.multimap/swap_member)\n$(call gen-test, containers/unord/unord.multimap/types)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/copy)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/default)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/clear)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/emplace)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_const_iter)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_db1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_db2)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_key)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_rvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.multiset/bucket_count)\n$(call gen-test, containers/unord/unord.multiset/bucket)\n$(call gen-test, containers/unord/unord.multiset/bucket_size)\n$(call gen-test, containers/unord/unord.multiset/clear)\n$(call gen-test, containers/unord/unord.multiset/count)\n$(call gen-test, containers/unord/unord.multiset/db_iterators_7)\n$(call gen-test, containers/unord/unord.multiset/db_iterators_8)\n$(call gen-test, containers/unord/unord.multiset/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.multiset/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.multiset/emplace_hint)\n$(call gen-test, containers/unord/unord.multiset/emplace)\n$(call gen-test, containers/unord/unord.multiset/eq)\n$(call gen-test, containers/unord/unord.multiset/equal_range_const)\n$(call gen-test, containers/unord/unord.multiset/equal_range_non_const)\n$(call gen-test, containers/unord/unord.multiset/erase_const_iter)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_db1)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_db2)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.multiset/erase_key)\n$(call gen-test, containers/unord/unord.multiset/erase_range)\n$(call gen-test, containers/unord/unord.multiset/find_const)\n$(call gen-test, containers/unord/unord.multiset/find_non_const)\n$(call gen-test, containers/unord/unord.multiset/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_init)\n$(call gen-test, containers/unord/unord.multiset/insert_range)\n$(call gen-test, containers/unord/unord.multiset/insert_rvalue)\n$(call gen-test, containers/unord/unord.multiset/iterators)\n$(call gen-test, containers/unord/unord.multiset/load_factor)\n$(call gen-test, containers/unord/unord.multiset/local_iterators)\n$(call gen-test, containers/unord/unord.multiset/max_bucket_count)\n$(call gen-test, containers/unord/unord.multiset/max_load_factor)\n$(call gen-test, containers/unord/unord.multiset/max_size)\n$(call gen-test, containers/unord/unord.multiset/rehash)\n$(call gen-test, containers/unord/unord.multiset/reserve)\n$(call gen-test, containers/unord/unord.multiset/scary)\n$(call gen-test, containers/unord/unord.multiset/swap_member)\n$(call gen-test, containers/unord/unord.multiset/types)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/copy)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/default)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.set/bucket_count)\n$(call gen-test, containers/unord/unord.set/bucket)\n$(call gen-test, containers/unord/unord.set/bucket_size)\n$(call gen-test, containers/unord/unord.set/clear)\n$(call gen-test, containers/unord/unord.set/count)\n$(call gen-test, containers/unord/unord.set/db_iterators_7)\n$(call gen-test, containers/unord/unord.set/db_iterators_8)\n$(call gen-test, containers/unord/unord.set/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.set/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.set/emplace_hint)\n$(call gen-test, containers/unord/unord.set/emplace)\n$(call gen-test, containers/unord/unord.set/eq)\n$(call gen-test, containers/unord/unord.set/equal_range_const)\n$(call gen-test, containers/unord/unord.set/equal_range_non_const)\n$(call gen-test, containers/unord/unord.set/erase_const_iter)\n$(call gen-test, containers/unord/unord.set/erase_iter_db1)\n$(call gen-test, containers/unord/unord.set/erase_iter_db2)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.set/erase_key)\n$(call gen-test, containers/unord/unord.set/erase_range)\n$(call gen-test, containers/unord/unord.set/find_const)\n$(call gen-test, containers/unord/unord.set/find_non_const)\n$(call gen-test, containers/unord/unord.set/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.set/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.set/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.set/insert_init)\n$(call gen-test, containers/unord/unord.set/insert_range)\n$(call gen-test, containers/unord/unord.set/insert_rvalue)\n$(call gen-test, containers/unord/unord.set/iterators)\n$(call gen-test, containers/unord/unord.set/load_factor)\n$(call gen-test, containers/unord/unord.set/local_iterators)\n$(call gen-test, containers/unord/unord.set/max_bucket_count)\n$(call gen-test, containers/unord/unord.set/max_load_factor)\n$(call gen-test, containers/unord/unord.set/max_size)\n$(call gen-test, containers/unord/unord.set/rehash)\n$(call gen-test, containers/unord/unord.set/reserve)\n$(call gen-test, containers/unord/unord.set/swap_member)\n$(call gen-test, containers/unord/unord.set/types)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/copy)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/default)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.set/version)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/assignment)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/convert_assignment)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/convert)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/copy)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/pointer)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/assign_from_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_from_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_to_auto_ptr)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_to_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/arrow)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/deref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/release)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/reset)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/element_type)\n$(call gen-test, depr/depr.auto.ptr/nothing_to_do)\n$(call gen-test, depr/depr.c.headers/assert_h)\n$(call gen-test, depr/depr.c.headers/ciso646)\n$(call gen-test, depr/depr.c.headers/complex.h)\n$(call gen-test, depr/depr.c.headers/ctype_h)\n$(call gen-test, depr/depr.c.headers/errno_h)\n$(call gen-test, depr/depr.c.headers/fenv_h)\n$(call gen-test, depr/depr.c.headers/float_h)\n$(call gen-test, depr/depr.c.headers/inttypes_h)\n$(call gen-test, depr/depr.c.headers/iso646_h)\n$(call gen-test, depr/depr.c.headers/limits_h)\n$(call gen-test, depr/depr.c.headers/locale_h)\n$(call gen-test, depr/depr.c.headers/math_h)\n$(call gen-test, depr/depr.c.headers/setjmp_h)\n$(call gen-test, depr/depr.c.headers/signal_h)\n$(call gen-test, depr/depr.c.headers/stdarg_h)\n$(call gen-test, depr/depr.c.headers/stdbool_h)\n$(call gen-test, depr/depr.c.headers/stddef_h)\n$(call gen-test, depr/depr.c.headers/stdint_h)\n$(call gen-test, depr/depr.c.headers/stdio_h)\n$(call gen-test, depr/depr.c.headers/stdlib_h)\n$(call gen-test, depr/depr.c.headers/string_h)\n$(call gen-test, depr/depr.c.headers/tgmath_h)\n$(call gen-test, depr/depr.c.headers/time_h)\n$(call gen-test, depr/depr.c.headers/uchar_h)\n$(call gen-test, depr/depr.c.headers/wchar_h)\n$(call gen-test, depr/depr.c.headers/wctype_h)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/pointer_to_binary_function)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/pointer_to_unary_function)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/ptr_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/ptr_fun2)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/nothing_to_do)\n$(call gen-test, depr/depr.function.objects/depr.base/binary_function)\n$(call gen-test, depr/depr.function.objects/depr.base/unary_function)\n$(call gen-test, depr/depr.function.objects/nothing_to_do)\n$(call gen-test, depr/depr.ios.members/io_state)\n$(call gen-test, depr/depr.ios.members/open_mode)\n$(call gen-test, depr/depr.ios.members/seek_dir)\n$(call gen-test, depr/depr.ios.members/streamoff)\n$(call gen-test, depr/depr.ios.members/streampos)\n$(call gen-test, depr/depr.lib.binders/depr.lib.bind.1st/bind1st)\n$(call gen-test, depr/depr.lib.binders/depr.lib.bind.2nd/bind2nd)\n$(call gen-test, depr/depr.lib.binders/depr.lib.binder.1st/binder1st)\n$(call gen-test, depr/depr.lib.binders/depr.lib.binder.2nd/binder2nd)\n$(call gen-test, depr/depr.lib.binders/nothing_to_do)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/ccp)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/ccp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/cp)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/cp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/types)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons/cp_size_mode)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/types)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/ccp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cp_size_cp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cscp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cucp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/custom_alloc)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/scp_size_scp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/ucp_size_ucp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/overflow)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/pbackfail)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/seekoff)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/seekpos)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/setbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/underflow)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/types)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.cons/cp_size_mode)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.dest/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/str)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/types)\n$(call gen-test, depr/depr.str.strstreams/version)\n$(call gen-test, depr/exception.unexpected/nothing_to_do)\n$(call gen-test, depr/exception.unexpected/set.unexpected/get_unexpected)\n$(call gen-test, depr/exception.unexpected/set.unexpected/set_unexpected)\n$(call gen-test, depr/exception.unexpected/unexpected.handler/unexpected_handler)\n$(call gen-test, depr/exception.unexpected/unexpected/unexpected)\n$(call gen-test, depr/nothing_to_do)\n$(call gen-test, diagnostics/assertions/cassert)\n$(call gen-test, diagnostics/diagnostics.general/nothing_to_do)\n$(call gen-test, diagnostics/errno/cerrno)\n$(call gen-test, diagnostics/nothing_to_do)\n$(call gen-test, diagnostics/std.exceptions/domain.error/domain_error)\n$(call gen-test, diagnostics/std.exceptions/invalid.argument/invalid_argument)\n$(call gen-test, diagnostics/std.exceptions/length.error/length_error)\n$(call gen-test, diagnostics/std.exceptions/logic.error/logic_error)\n$(call gen-test, diagnostics/std.exceptions/out.of.range/out_of_range)\n$(call gen-test, diagnostics/std.exceptions/overflow.error/overflow_error)\n$(call gen-test, diagnostics/std.exceptions/range.error/range_error)\n$(call gen-test, diagnostics/std.exceptions/runtime.error/runtime_error)\n$(call gen-test, diagnostics/std.exceptions/underflow.error/underflow_error)\n$(call gen-test, diagnostics/std.exceptions/version)\n$(call gen-test, diagnostics/syserr/errc)\n$(call gen-test, diagnostics/syserr/syserr.compare/eq_error_code_error_code)\n$(call gen-test, diagnostics/syserr/syserr.errcat/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.derived/message)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/default_ctor)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/eq)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/neq)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.overview/error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/default_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/equivalent_error_code_int)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/equivalent_int_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcode/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/default)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/ErrorCodeEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/assign)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/clear)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/ErrorCodeEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/make_error_code)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/bool)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/category)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/default_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/message)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/value)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/default)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/ErrorConditionEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/assign)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/clear)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/ErrorConditionEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.nonmembers/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.nonmembers/make_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/bool)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/category)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/message)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/value)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.hash/error_code)\n$(call gen-test, diagnostics/syserr/syserr.syserr/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_const_char_pointer)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_const_char_pointer)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/version)\n$(call gen-test, extensions/hash/specializations)\n$(call gen-test, extensions/nothing_to_do)\n$(call gen-test, input.output/file.streams/c.files/cinttypes)\n$(call gen-test, input.output/file.streams/c.files/cstdio)\n$(call gen-test, input.output/file.streams/c.files/version_ccstdio)\n$(call gen-test, input.output/file.streams/c.files/version_cinttypes)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/filebuf/types)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/overflow)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/pbackfail)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/seekoff)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/underflow)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/fstream/types)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/ifstream/types)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/ofstream/types)\n$(call gen-test, input.output/file.streams/fstreams/version)\n$(call gen-test, input.output/file.streams/nothing_to_do)\n$(call gen-test, input.output/input.output.general/nothing_to_do)\n$(call gen-test, input.output/iostream.format/ext.manip/get_money)\n$(call gen-test, input.output/iostream.format/ext.manip/get_time)\n$(call gen-test, input.output/iostream.format/ext.manip/put_money)\n$(call gen-test, input.output/iostream.format/ext.manip/put_time)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.cons/move)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.dest/nothing_to_do)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/types)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/basic_ios)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/ios_base)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/istream)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/signed_char)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/signed_char_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/unsigned_char)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/unsigned_char_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/wchar_t_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/bool)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/double)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/float)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/int)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long_double)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/short)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_int)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_long_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_short)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.reqmts/tested_elsewhere)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/nothing_to_do)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.cons/move)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream_sentry/ctor)\n$(call gen-test, input.output/iostream.format/input.streams/istream.manip/ws)\n$(call gen-test, input.output/iostream.format/input.streams/istream.rvalue/rvalue)\n$(call gen-test, input.output/iostream.format/input.streams/istream/types)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/getline_pointer_size_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/getline_pointer_size)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_streambuf_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/ignore)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/peek)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/putback)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/read)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/readsome)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/seekg_off)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/seekg)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/sync)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/tellg)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/unget)\n$(call gen-test, input.output/iostream.format/input.streams/version)\n$(call gen-test, input.output/iostream.format/nothing_to_do)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.cons/move)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/nothing_to_do)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.reqmts/tested_elsewhere)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/bool)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/double)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/float)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/int)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long_double)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/short)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_int)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_long_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_short)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/basic_ios)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_to_wide)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_to_wide_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/CharT)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/CharT_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/signed_char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/signed_char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/unsigned_char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/unsigned_char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/ios_base)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/ostream)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/endl)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/ends)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/flush)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.rvalue/CharT_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/seekp2)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/seekp)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/tellp)\n$(call gen-test, input.output/iostream.format/output.streams/ostream_sentry/construct)\n$(call gen-test, input.output/iostream.format/output.streams/ostream_sentry/destruct)\n$(call gen-test, input.output/iostream.format/output.streams/ostream/types)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/flush)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/put)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/write)\n$(call gen-test, input.output/iostream.format/output.streams/version)\n$(call gen-test, input.output/iostream.format/quoted.manip/quoted)\n$(call gen-test, input.output/iostream.format/std.manip/resetiosflags)\n$(call gen-test, input.output/iostream.format/std.manip/setbase)\n$(call gen-test, input.output/iostream.format/std.manip/setfill)\n$(call gen-test, input.output/iostream.format/std.manip/setiosflags)\n$(call gen-test, input.output/iostream.format/std.manip/setprecision)\n$(call gen-test, input.output/iostream.format/std.manip/setw)\n$(call gen-test, input.output/iostream.format/std.manip/version)\n$(call gen-test, input.output/iostream.forward/iosfwd)\n$(call gen-test, input.output/iostream.forward/version)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cerr)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cin)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/clog)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cout)\n$(call gen-test, input.output/iostream.objects/version)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcerr)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcin)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wclog)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcout)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.members/state)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/addition)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/ctor_int)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/difference)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/eq_int)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/offset)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/streamsize)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/subtraction)\n$(call gen-test, input.output/iostreams.base/fpos/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/flags_fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/flags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/precision)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/precision_streamsize)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/setf_fmtflags_mask)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/setf_fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/unsetf_mask)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/width)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/width_streamsize)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.callback/register_callback)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.cons/dtor)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.locales/getloc)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.locales/imbue)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/iword)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/pword)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/xalloc)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.members.static/sync_with_stdio)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_failure/ctor_char_pointer_error_code)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_failure/ctor_string_error_code)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_fmtflags/fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_Init/tested_elsewhere)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_iostate/iostate)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_openmode/openmode)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_seekdir/seekdir)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios.base/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.cons/ctor_streambuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/copyfmt)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/fill_char_type)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/fill)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/imbue)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/move)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/narow)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/rdbuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/rdbuf_streambuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/set_rdbuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/swap)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/tie_ostream)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/tie)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/widen)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/bad)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/bool)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/clear)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/eof)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/exceptions_iostate)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/exceptions)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/fail)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/good)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/not)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/rdstate)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/setstate)\n$(call gen-test, input.output/iostreams.base/ios/types)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/internal)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/left)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/right)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/dec)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/hex)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/oct)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/iostream_category)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/make_error_code)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/make_error_condition)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/defaultfloat)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/fixed)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/hexfloat)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/scientific)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/boolalpha)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noboolalpha)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowbase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowpoint)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowpos)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noskipws)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/nounitbuf)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/nouppercase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showbase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showpoint)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showpos)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/skipws)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/unitbuf)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/uppercase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/stream.types/streamoff)\n$(call gen-test, input.output/iostreams.base/stream.types/streamsize)\n$(call gen-test, input.output/iostreams.base/version)\n$(call gen-test, input.output/iostreams.requirements/iostream.limits.imbue/tested_elsewhere)\n$(call gen-test, input.output/iostreams.requirements/iostreams.limits.pos/nothing_to_do)\n$(call gen-test, input.output/iostreams.requirements/iostreams.threadsafety/nothing_to_do)\n$(call gen-test, input.output/iostreams.requirements/nothing_to_do)\n$(call gen-test, input.output/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf.reqts/tested_elsewhere)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.cons/copy)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.cons/default)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubseekoff)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubseekpos)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubsetbuf)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubsync)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.locales/locales)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/in_avail)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sbumpc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sgetc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sgetn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/snextc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.pback/sputbackc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.pback/sungetc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.put/sputc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.put/sputn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.assign/assign)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.assign/swap)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.get.area/gbump)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.get.area/setg)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.put.area/pbump)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.put.area/setp)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.buffer/tested_elsewhere)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/showmanyc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/uflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/underflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/xsgetn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.locales/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.pback/pbackfail)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/overflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn)\n$(call gen-test, input.output/stream.buffers/streambuf/types)\n$(call gen-test, input.output/stream.buffers/version)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/move)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/default)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/move)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/string)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.members/str)\n$(call gen-test, input.output/string.streams/istringstream/types)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/move)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/default)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/move)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/string)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.members/str)\n$(call gen-test, input.output/string.streams/ostringstream/types)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/member_swap)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/move)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/default)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/move)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/string)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.members/str)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/overflow)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/pbackfail)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/seekoff)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/seekpos)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/setbuf)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/underflow)\n$(call gen-test, input.output/string.streams/stringbuf/types)\n$(call gen-test, input.output/string.streams/stringstream.cons/default)\n$(call gen-test, input.output/string.streams/stringstream.cons/move2)\n$(call gen-test, input.output/string.streams/stringstream.cons/move)\n$(call gen-test, input.output/string.streams/stringstream.cons/string)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/move)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/stringstream.members/str)\n$(call gen-test, input.output/string.streams/stringstream/types)\n$(call gen-test, input.output/string.streams/version)\n$(call gen-test, iterators/iterator.primitives/iterator.basic/iterator)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/advance)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/distance)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/next)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/prev)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/const_pointer)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/empty)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/iterator)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/pointer)\n$(call gen-test, iterators/iterator.primitives/nothing_to_do)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/input_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/output_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag)\n$(call gen-test, iterators/iterator.range/begin-end)\n$(call gen-test, iterators/iterator.requirements/bidirectional.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/forward.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/input.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/iterator.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/iterator.requirements.general/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/output.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/random.access.iterators/nothing_to_do)\n$(call gen-test, iterators/iterators.general/nothing_to_do)\n$(call gen-test, iterators/iterator.synopsis/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.cons/container)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.cons/container)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.cons/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iterator/types)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/make_move_iterator)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/minus)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/plus)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_eq)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gte)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gt)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_lte)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_lt)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_neq)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/convert)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/default)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/iter)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.conv/tested_elsewhere)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.decr/post)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.decr/pre)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.opEQ/move_iterator)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.incr/post)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.incr/pre)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.index/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.ref/op_arrow)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.star/op_star)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.requirements/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iterator/types)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/default)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/iter)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.conv/tested_elsewhere)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opdiff/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opEQEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opEQ/reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op!EQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgtEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgt/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opindex/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opltEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.oplt/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op--/post)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op--/pre)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opsum/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.requirements/nothing_to_do)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/istream)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/proxy)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/streambuf)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_equal/equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/arrow)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/post_increment)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/pre_increment)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op++/dereference)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_opEQEQ/equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op!EQ/not_equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_proxy/proxy)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/types)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/copy)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/default)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/istream)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/dereference)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/equal)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/post_increment)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/pre_increment)\n$(call gen-test, iterators/stream.iterators/istream.iterator/types)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_array)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_non_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_array)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_non_const)\n$(call gen-test, iterators/stream.iterators/nothing_to_do)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons/ostream)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons/streambuf)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/assign_c)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/deref)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/increment)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/types)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/copy)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delem)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/assign_t)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/dereference)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/increment)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/types)\n$(call gen-test, iterators/version)\n$(call gen-test, language.support/cstdint/cstdint.syn/cstdint)\n$(call gen-test, language.support/cstdint/version)\n$(call gen-test, language.support/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.badlength/bad_array_length)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.handler/new_handler)\n$(call gen-test, language.support/support.dynamic/alloc.errors/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/alloc.errors/set.new.handler/get_new_handler)\n$(call gen-test, language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.placement/new_array)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.placement/new)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_nothrow)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/version)\n$(call gen-test, language.support/support.exception/bad.exception/bad_exception)\n$(call gen-test, language.support/support.exception/exception/exception)\n$(call gen-test, language.support/support.exception/exception.terminate/nothing_to_do)\n$(call gen-test, language.support/support.exception/exception.terminate/set.terminate/get_terminate)\n$(call gen-test, language.support/support.exception/exception.terminate/set.terminate/set_terminate)\n$(call gen-test, language.support/support.exception/exception.terminate/terminate.handler/terminate_handler)\n$(call gen-test, language.support/support.exception/exception.terminate/terminate/terminate)\n$(call gen-test, language.support/support.exception/except.nested/assign)\n$(call gen-test, language.support/support.exception/except.nested/ctor_copy)\n$(call gen-test, language.support/support.exception/except.nested/ctor_default)\n$(call gen-test, language.support/support.exception/except.nested/rethrow_if_nested)\n$(call gen-test, language.support/support.exception/except.nested/rethrow_nested)\n$(call gen-test, language.support/support.exception/except.nested/throw_with_nested)\n$(call gen-test, language.support/support.exception/propagation/current_exception)\n$(call gen-test, language.support/support.exception/propagation/exception_ptr)\n$(call gen-test, language.support/support.exception/propagation/make_exception_ptr)\n$(call gen-test, language.support/support.exception/propagation/rethrow_exception)\n$(call gen-test, language.support/support.exception/uncaught/uncaught_exception)\n$(call gen-test, language.support/support.exception/version)\n$(call gen-test, language.support/support.general/nothing_to_do)\n$(call gen-test, language.support/support.initlist/support.initlist.access/access)\n$(call gen-test, language.support/support.initlist/support.initlist.cons/default)\n$(call gen-test, language.support/support.initlist/support.initlist.range/begin_end)\n$(call gen-test, language.support/support.initlist/types)\n$(call gen-test, language.support/support.initlist/version)\n$(call gen-test, language.support/support.limits/c.limits/cfloat)\n$(call gen-test, language.support/support.limits/c.limits/climits)\n$(call gen-test, language.support/support.limits/c.limits/version_cfloat)\n$(call gen-test, language.support/support.limits/c.limits/version_climits)\n$(call gen-test, language.support/support.limits/limits/denorm.style/check_values)\n$(call gen-test, language.support/support.limits/limits/is_specialized)\n$(call gen-test, language.support/support.limits/limits/numeric.limits/default)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/const_data_members)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/denorm_min)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/digits10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/digits)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/epsilon)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_denorm_loss)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_denorm)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_infinity)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/infinity)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_bounded)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_exact)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_iec559)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_integer)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_modulo)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_signed)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/lowest)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_digits10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_exponent10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_exponent)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min_exponent10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min_exponent)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/quiet_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/radix)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/round_error)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/round_style)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/signaling_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/tinyness_before)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/traps)\n$(call gen-test, language.support/support.limits/limits/numeric.special/nothing_to_do)\n$(call gen-test, language.support/support.limits/limits/round.style/check_values)\n$(call gen-test, language.support/support.limits/limits/version)\n$(call gen-test, language.support/support.limits/nothing_to_do)\n$(call gen-test, language.support/support.rtti/bad.cast/bad_cast)\n$(call gen-test, language.support/support.rtti/bad.typeid/bad_typeid)\n$(call gen-test, language.support/support.rtti/type.info/type_info_hash)\n$(call gen-test, language.support/support.rtti/type.info/type_info)\n$(call gen-test, language.support/support.rtti/version)\n$(call gen-test, language.support/support.runtime/csetjmp)\n$(call gen-test, language.support/support.runtime/csignal)\n$(call gen-test, language.support/support.runtime/cstdarg)\n$(call gen-test, language.support/support.runtime/cstdbool)\n$(call gen-test, language.support/support.runtime/cstdlib)\n$(call gen-test, language.support/support.runtime/ctime)\n$(call gen-test, language.support/support.runtime/version_csetjmp)\n$(call gen-test, language.support/support.runtime/version_csignal)\n$(call gen-test, language.support/support.runtime/version_cstdarg)\n$(call gen-test, language.support/support.runtime/version_cstdbool)\n$(call gen-test, language.support/support.runtime/version_cstdlib)\n$(call gen-test, language.support/support.runtime/version_ctime)\n$(call gen-test, language.support/support.start.term/quick_exit)\n$(call gen-test, language.support/support.types/max_align_t)\n$(call gen-test, language.support/support.types/null)\n$(call gen-test, language.support/support.types/nullptr_t)\n$(call gen-test, language.support/support.types/offsetof)\n$(call gen-test, language.support/support.types/ptrdiff_t)\n$(call gen-test, language.support/support.types/size_t)\n$(call gen-test, language.support/support.types/version)\n$(call gen-test, localization/c.locales/clocale)\n$(call gen-test, localization/c.locales/version)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/compare)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/hash)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/transform)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/types)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/ctor)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/compare)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/hash)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/transform)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/types)\n$(call gen-test, localization/locale.categories/category.collate/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.ctype/ctype_base)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.dtor/dtor)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/ctor)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/table)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/types)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/codecvt_base)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/utf_sanity_check)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/types)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/ctor)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/types)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages.byname/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/ctor)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/locale.messages.members/not_testable)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/locale.messages.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/messages_base)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/types)\n$(call gen-test, localization/locale.categories/category.messages/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_string_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/types)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/frac_digits)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/negative_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/positive_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/curr_symbol)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/decimal_point)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/frac_digits)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/grouping)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/negative_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/neg_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/pos_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/positive_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/thousands_sep)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/money_base)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/types)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_string_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/types)\n$(call gen-test, localization/locale.categories/category.monetary/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/ctor)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_bool)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_pointer)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_unsigned_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_unsigned_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/types)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/ctor)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_bool)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_pointer)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_int)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_short)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/test_min_max)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/types)\n$(call gen-test, localization/locale.categories/category.numeric/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/date_order)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/date_order_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_date)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_date_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_monthname)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_one)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_one_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_time)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_time_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_weekday)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_weekday_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_year)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_year_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/ctor)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/date_order)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_date)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_date_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_many)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_one)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_time)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_time_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_year)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/time_base)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/types)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put.byname/put1)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/ctor)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.members/put1)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.members/put2)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/types)\n$(call gen-test, localization/locale.categories/category.time/nothing_to_do)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/decimal_point)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/ctor)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/decimal_point)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/falsename)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/grouping)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/thousands_sep)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/truename)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/types)\n$(call gen-test, localization/locale.categories/facet.numpunct/nothing_to_do)\n$(call gen-test, localization/locale.categories/facets.examples/nothing_to_do)\n$(call gen-test, localization/locale.categories/__scan_keyword)\n$(call gen-test, localization/locales/locale.convenience/classification/isalnum)\n$(call gen-test, localization/locales/locale.convenience/classification/isalpha)\n$(call gen-test, localization/locales/locale.convenience/classification/iscntrl)\n$(call gen-test, localization/locales/locale.convenience/classification/isdigit)\n$(call gen-test, localization/locales/locale.convenience/classification/isgraph)\n$(call gen-test, localization/locales/locale.convenience/classification/islower)\n$(call gen-test, localization/locales/locale.convenience/classification/isprint)\n$(call gen-test, localization/locales/locale.convenience/classification/ispunct)\n$(call gen-test, localization/locales/locale.convenience/classification/isspace)\n$(call gen-test, localization/locales/locale.convenience/classification/isupper)\n$(call gen-test, localization/locales/locale.convenience/classification/isxdigit)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/ctor)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/overflow)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/pbackfail)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/rdbuf)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/seekoff)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/test)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/underflow)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.character/tolower)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.character/toupper)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/converted)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_codecvt)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_codecvt_state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_err_string)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/from_bytes)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/to_bytes)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/types)\n$(call gen-test, localization/locales/locale.convenience/conversions/nothing_to_do)\n$(call gen-test, localization/locales/locale.convenience/nothing_to_do)\n$(call gen-test, localization/locales/locale.global.templates/has_facet)\n$(call gen-test, localization/locales/locale.global.templates/use_facet)\n$(call gen-test, localization/locales/locale/locale.cons/assign)\n$(call gen-test, localization/locales/locale/locale.cons/char_pointer)\n$(call gen-test, localization/locales/locale/locale.cons/copy)\n$(call gen-test, localization/locales/locale/locale.cons/default)\n$(call gen-test, localization/locales/locale/locale.cons/locale_char_pointer_cat)\n$(call gen-test, localization/locales/locale/locale.cons/locale_facetptr)\n$(call gen-test, localization/locales/locale/locale.cons/locale_locale_cat)\n$(call gen-test, localization/locales/locale/locale.cons/locale_string_cat)\n$(call gen-test, localization/locales/locale/locale.cons/string)\n$(call gen-test, localization/locales/locale/locale.members/combine)\n$(call gen-test, localization/locales/locale/locale.members/name)\n$(call gen-test, localization/locales/locale/locale.operators/compare)\n$(call gen-test, localization/locales/locale/locale.operators/eq)\n$(call gen-test, localization/locales/locale/locale.statics/classic)\n$(call gen-test, localization/locales/locale/locale.statics/global)\n$(call gen-test, localization/locales/locale/locale.types/locale.category/category)\n$(call gen-test, localization/locales/locale/locale.types/locale.facet/facet)\n$(call gen-test, localization/locales/locale/locale.types/locale.id/id)\n$(call gen-test, localization/locales/locale/locale.types/nothing_to_do)\n$(call gen-test, localization/locales/locale/nothing_to_do)\n$(call gen-test, localization/locales/nothing_to_do)\n$(call gen-test, localization/locale.stdcvt/codecvt_mode)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_unshift)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_unshift)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_unshift)\n$(call gen-test, localization/locale.stdcvt/version)\n$(call gen-test, localization/locale.syn/nothing_to_do)\n$(call gen-test, localization/localization.general/nothing_to_do)\n$(call gen-test, localization/version)\n$(call gen-test, nothing_to_do)\n$(call gen-test, numerics/cfenv/cfenv.syn/cfenv)\n$(call gen-test, numerics/cfenv/version)\n$(call gen-test, numerics/c.math/cmath)\n$(call gen-test, numerics/c.math/ctgmath)\n$(call gen-test, numerics/c.math/tgmath_h)\n$(call gen-test, numerics/c.math/version_cmath)\n$(call gen-test, numerics/complex.number/ccmplx/ccomplex)\n$(call gen-test, numerics/complex.number/cmplx.over/arg)\n$(call gen-test, numerics/complex.number/cmplx.over/conj)\n$(call gen-test, numerics/complex.number/cmplx.over/imag)\n$(call gen-test, numerics/complex.number/cmplx.over/norm)\n$(call gen-test, numerics/complex.number/cmplx.over/pow)\n$(call gen-test, numerics/complex.number/cmplx.over/proj)\n$(call gen-test, numerics/complex.number/cmplx.over/real)\n$(call gen-test, numerics/complex.number/complex.literals/literals1)\n$(call gen-test, numerics/complex.number/complex.literals/literals2)\n$(call gen-test, numerics/complex.number/complex.literals/literals)\n$(call gen-test, numerics/complex.number/complex.member.ops/assignment_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/assignment_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/divide_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/divide_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/minus_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/minus_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/plus_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/plus_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/times_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/times_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.members/construct)\n$(call gen-test, numerics/complex.number/complex.members/real_imag)\n$(call gen-test, numerics/complex.number/complex.ops/complex_divide_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_divide_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_equals_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_minus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_minus_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_not_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_not_equals_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_plus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_plus_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_times_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_times_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_divide_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_minus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_not_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_plus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_times_complex)\n$(call gen-test, numerics/complex.number/complex.ops/stream_input)\n$(call gen-test, numerics/complex.number/complex.ops/stream_output)\n$(call gen-test, numerics/complex.number/complex.ops/unary_minus)\n$(call gen-test, numerics/complex.number/complex.ops/unary_plus)\n$(call gen-test, numerics/complex.number/complex.special/double_float_explicit)\n$(call gen-test, numerics/complex.number/complex.special/double_float_implicit)\n$(call gen-test, numerics/complex.number/complex.special/double_long_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/float_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/float_long_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_double_implicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_float_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_float_implicit)\n$(call gen-test, numerics/complex.number/complex.synopsis/nothing_to_do)\n$(call gen-test, numerics/complex.number/complex.transcendentals/acosh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/acos)\n$(call gen-test, numerics/complex.number/complex.transcendentals/asinh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/asin)\n$(call gen-test, numerics/complex.number/complex.transcendentals/atanh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/atan)\n$(call gen-test, numerics/complex.number/complex.transcendentals/cosh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/cos)\n$(call gen-test, numerics/complex.number/complex.transcendentals/exp)\n$(call gen-test, numerics/complex.number/complex.transcendentals/log10)\n$(call gen-test, numerics/complex.number/complex.transcendentals/log)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_complex_complex)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_complex_scalar)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_scalar_complex)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sinh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sin)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sqrt)\n$(call gen-test, numerics/complex.number/complex.transcendentals/tanh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/tan)\n$(call gen-test, numerics/complex.number/complex/types)\n$(call gen-test, numerics/complex.number/complex.value.ops/abs)\n$(call gen-test, numerics/complex.number/complex.value.ops/arg)\n$(call gen-test, numerics/complex.number/complex.value.ops/conj)\n$(call gen-test, numerics/complex.number/complex.value.ops/imag)\n$(call gen-test, numerics/complex.number/complex.value.ops/norm)\n$(call gen-test, numerics/complex.number/complex.value.ops/polar)\n$(call gen-test, numerics/complex.number/complex.value.ops/proj)\n$(call gen-test, numerics/complex.number/complex.value.ops/real)\n$(call gen-test, numerics/complex.number/layout)\n$(call gen-test, numerics/complex.number/version)\n$(call gen-test, numerics/nothing_to_do)\n$(call gen-test, numerics/numarray/class.gslice/gslice.access/tested_elsewhere)\n$(call gen-test, numerics/numarray/class.gslice/gslice.cons/default)\n$(call gen-test, numerics/numarray/class.gslice/gslice.cons/start_size_stride)\n$(call gen-test, numerics/numarray/class.gslice/nothing_to_do)\n$(call gen-test, numerics/numarray/class.slice/cons.slice/default)\n$(call gen-test, numerics/numarray/class.slice/cons.slice/start_size_stride)\n$(call gen-test, numerics/numarray/class.slice/nothing_to_do)\n$(call gen-test, numerics/numarray/class.slice/slice.access/tested_elsewhere)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.assign/gslice_array)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.gslice.array/types)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.assign/indirect_array)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.indirect.array/types)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.assign/mask_array)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.mask.array/types)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.assign/slice_array)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.assign/valarray)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/and)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/or)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.fill/assign_value)\n$(call gen-test, numerics/numarray/template.slice.array/types)\n$(call gen-test, numerics/numarray/template.valarray/types)\n$(call gen-test, numerics/numarray/template.valarray/valarray.access/access)\n$(call gen-test, numerics/numarray/template.valarray/valarray.access/const_access)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/copy_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/gslice_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/indirect_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/initializer_list_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/mask_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/move_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/slice_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/value_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/and_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/and_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/divide_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/divide_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/minus_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/minus_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/modulo_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/modulo_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/or_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/or_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/plus_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/plus_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_left_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_left_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_right_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_right_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/times_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/times_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/xor_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/xor_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/copy)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/default)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/gslice_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/indirect_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/initializer_list)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/mask_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/move)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/pointer_size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/slice_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/value_size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/apply_cref)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/apply_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/cshift)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/max)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/min)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/resize)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/shift)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/sum)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/swap)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/gslice_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/gslice_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/indirect_array_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/indirect_array_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/slice_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/slice_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/valarray_bool_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/valarray_bool_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/bit_not)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/negate)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/not)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/plus)\n$(call gen-test, numerics/numarray/valarray.nonmembers/nothing_to_do)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.special/swap)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/abs_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/acos_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/asin_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/cosh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/cos_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/exp_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/log10_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/log_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sinh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sin_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sqrt_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/tanh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/tan_valarray)\n$(call gen-test, numerics/numarray/valarray.range/begin_const)\n$(call gen-test, numerics/numarray/valarray.range/begin_non_const)\n$(call gen-test, numerics/numarray/valarray.range/end_const)\n$(call gen-test, numerics/numarray/valarray.range/end_non_const)\n$(call gen-test, numerics/numarray/valarray.syn/nothing_to_do)\n$(call gen-test, numerics/numarray/version)\n$(call gen-test, numerics/numeric.ops/accumulate/accumulate_op)\n$(call gen-test, numerics/numeric.ops/accumulate/accumulate)\n$(call gen-test, numerics/numeric.ops/adjacent.difference/adjacent_difference_op)\n$(call gen-test, numerics/numeric.ops/adjacent.difference/adjacent_difference)\n$(call gen-test, numerics/numeric.ops/inner.product/inner_product_comp)\n$(call gen-test, numerics/numeric.ops/inner.product/inner_product)\n$(call gen-test, numerics/numeric.ops/numeric.iota/iota)\n$(call gen-test, numerics/numeric.ops/partial.sum/partial_sum_op)\n$(call gen-test, numerics/numeric.ops/partial.sum/partial_sum)\n$(call gen-test, numerics/numeric.ops/version)\n$(call gen-test, numerics/numeric.requirements/nothing_to_do)\n$(call gen-test, numerics/numerics.general/nothing_to_do)\n$(call gen-test, numerics/rand/nothing_to_do)\n$(call gen-test, numerics/rand/rand.adapt/nothing_to_do)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/values)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/values)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/values)\n$(call gen-test, numerics/rand/rand.device/ctor)\n$(call gen-test, numerics/rand/rand.device/entropy)\n$(call gen-test, numerics/rand/rand.device/eval)\n$(call gen-test, numerics/rand/rand.dis/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/ctor_int_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/ctor_int_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_init)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_init)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/ctor_int_int)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/ctor_int_int)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/types)\n$(call gen-test, numerics/rand/rand.eng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/values)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/values)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/values)\n$(call gen-test, numerics/rand/rand.predef/default_random_engine)\n$(call gen-test, numerics/rand/rand.predef/knuth_b)\n$(call gen-test, numerics/rand/rand.predef/minstd_rand0)\n$(call gen-test, numerics/rand/rand.predef/minstd_rand)\n$(call gen-test, numerics/rand/rand.predef/mt19937_64)\n$(call gen-test, numerics/rand/rand.predef/mt19937)\n$(call gen-test, numerics/rand/rand.predef/ranlux24_base)\n$(call gen-test, numerics/rand/rand.predef/ranlux24)\n$(call gen-test, numerics/rand/rand.predef/ranlux48_base)\n$(call gen-test, numerics/rand/rand.predef/ranlux48)\n$(call gen-test, numerics/rand/rand.req/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.adapt/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.dst/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.eng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.genl/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.seedseq/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.urng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.synopsis/version)\n$(call gen-test, numerics/rand/rand.util/nothing_to_do)\n$(call gen-test, numerics/rand/rand.util/rand.util.canonical/generate_canonical)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/default)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/generate)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/initializer_list)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/iterator)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/types)\n$(call gen-test, re/nothing_to_do)\n$(call gen-test, re/re.alg/nothing_to_do)\n$(call gen-test, re/re.alg/re.alg.match/awk)\n$(call gen-test, re/re.alg/re.alg.match/basic)\n$(call gen-test, re/re.alg/re.alg.match/ecma)\n$(call gen-test, re/re.alg/re.alg.match/egrep)\n$(call gen-test, re/re.alg/re.alg.match/extended)\n$(call gen-test, re/re.alg/re.alg.match/grep)\n$(call gen-test, re/re.alg/re.alg.match/lookahead_capture)\n$(call gen-test, re/re.alg/re.alg.match/parse_curly_brackets)\n$(call gen-test, re/re.alg/re.alg.replace/test1)\n$(call gen-test, re/re.alg/re.alg.replace/test2)\n$(call gen-test, re/re.alg/re.alg.replace/test3)\n$(call gen-test, re/re.alg/re.alg.replace/test4)\n$(call gen-test, re/re.alg/re.alg.replace/test5)\n$(call gen-test, re/re.alg/re.alg.replace/test6)\n$(call gen-test, re/re.alg/re.alg.search/awk)\n$(call gen-test, re/re.alg/re.alg.search/backup)\n$(call gen-test, re/re.alg/re.alg.search/basic)\n$(call gen-test, re/re.alg/re.alg.search/ecma)\n$(call gen-test, re/re.alg/re.alg.search/egrep)\n$(call gen-test, re/re.alg/re.alg.search/extended)\n$(call gen-test, re/re.alg/re.alg.search/grep)\n$(call gen-test, re/re.alg/re.alg.search/lookahead)\n$(call gen-test, re/re.alg/re.alg.search/no_update_pos)\n$(call gen-test, re/re.alg/re.except/nothing_to_do)\n$(call gen-test, re/re.badexp/regex_error)\n$(call gen-test, re/re.const/nothing_to_do)\n$(call gen-test, re/re.const/re.err/error_type)\n$(call gen-test, re/re.const/re.matchflag/match_flag_type)\n$(call gen-test, re/re.const/re.synopt/syntax_option_type)\n$(call gen-test, re/re.def/defns.regex.collating.element/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.finite.state.machine/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.format.specifier/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.matched/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.primary.equivalence.class/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.regular.expression/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.subexpression/nothing_to_do)\n$(call gen-test, re/re.def/nothing_to_do)\n$(call gen-test, re/re.general/nothing_to_do)\n$(call gen-test, re/re.grammar/nothing_to_do)\n$(call gen-test, re/re.iter/nothing_to_do)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.cnstr/cnstr)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.cnstr/default)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.comp/tested_elsewhere)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.deref/deref)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.incr/post)\n$(call gen-test, re/re.iter/re.regiter/types)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/array)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/default)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/init)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/int)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/vector)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.comp/equal)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.deref/deref)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.incr/post)\n$(call gen-test, re/re.iter/re.tokiter/types)\n$(call gen-test, re/re.regex/re.regex.assign/assign.il)\n$(call gen-test, re/re.regex/re.regex.assign/assign_iter_iter_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign)\n$(call gen-test, re/re.regex/re.regex.assign/assign_ptr_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign_ptr_size_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign_string_flag)\n$(call gen-test, re/re.regex/re.regex.assign/copy)\n$(call gen-test, re/re.regex/re.regex.assign/il)\n$(call gen-test, re/re.regex/re.regex.assign/ptr)\n$(call gen-test, re/re.regex/re.regex.assign/string)\n$(call gen-test, re/re.regex/re.regex.const/constants)\n$(call gen-test, re/re.regex/re.regex.construct/awk_oct)\n$(call gen-test, re/re.regex/re.regex.construct/bad_escape)\n$(call gen-test, re/re.regex/re.regex.construct/copy)\n$(call gen-test, re/re.regex/re.regex.construct/default)\n$(call gen-test, re/re.regex/re.regex.construct/il_flg)\n$(call gen-test, re/re.regex/re.regex.construct/iter_iter_flg)\n$(call gen-test, re/re.regex/re.regex.construct/iter_iter)\n$(call gen-test, re/re.regex/re.regex.construct/ptr_flg)\n$(call gen-test, re/re.regex/re.regex.construct/ptr)\n$(call gen-test, re/re.regex/re.regex.construct/ptr_size_flg)\n$(call gen-test, re/re.regex/re.regex.construct/string_flg)\n$(call gen-test, re/re.regex/re.regex.construct/string)\n$(call gen-test, re/re.regex/re.regex.locale/imbue)\n$(call gen-test, re/re.regex/re.regex.nonmemb/nothing_to_do)\n$(call gen-test, re/re.regex/re.regex.nonmemb/re.regex.nmswap/swap)\n$(call gen-test, re/re.regex/re.regex.operations/tested_elsewhere)\n$(call gen-test, re/re.regex/re.regex.swap/swap)\n$(call gen-test, re/re.regex/types)\n$(call gen-test, re/re.req/nothing_to_do)\n$(call gen-test, re/re.results/re.results.acc/begin_end)\n$(call gen-test, re/re.results/re.results.acc/cbegin_cend)\n$(call gen-test, re/re.results/re.results.acc/index)\n$(call gen-test, re/re.results/re.results.acc/length)\n$(call gen-test, re/re.results/re.results.acc/position)\n$(call gen-test, re/re.results/re.results.acc/prefix)\n$(call gen-test, re/re.results/re.results.acc/str)\n$(call gen-test, re/re.results/re.results.acc/suffix)\n$(call gen-test, re/re.results/re.results.all/get_allocator)\n$(call gen-test, re/re.results/re.results.const/allocator)\n$(call gen-test, re/re.results/re.results.const/default)\n$(call gen-test, re/re.results/re.results.form/form1)\n$(call gen-test, re/re.results/re.results.form/form2)\n$(call gen-test, re/re.results/re.results.form/form3)\n$(call gen-test, re/re.results/re.results.form/form4)\n$(call gen-test, re/re.results/re.results.nonmember/equal)\n$(call gen-test, re/re.results/re.results.size/empty)\n$(call gen-test, re/re.results/re.results.size/max_size)\n$(call gen-test, re/re.results/re.results.state/ready)\n$(call gen-test, re/re.results/re.results.swap/member_swap)\n$(call gen-test, re/re.results/re.results.swap/non_member_swap)\n$(call gen-test, re/re.results/types)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_string_type)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_sub_match)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_value_type_ptr)\n$(call gen-test, re/re.submatch/re.submatch.members/default)\n$(call gen-test, re/re.submatch/re.submatch.members/length)\n$(call gen-test, re/re.submatch/re.submatch.members/operator_string)\n$(call gen-test, re/re.submatch/re.submatch.members/str)\n$(call gen-test, re/re.submatch/re.submatch.op/compare)\n$(call gen-test, re/re.submatch/re.submatch.op/stream)\n$(call gen-test, re/re.submatch/types)\n$(call gen-test, re/re.syn/cmatch)\n$(call gen-test, re/re.syn/cregex_iterator)\n$(call gen-test, re/re.syn/cregex_token_iterator)\n$(call gen-test, re/re.syn/csub_match)\n$(call gen-test, re/re.syn/regex)\n$(call gen-test, re/re.syn/smatch)\n$(call gen-test, re/re.syn/sregex_iterator)\n$(call gen-test, re/re.syn/sregex_token_iterator)\n$(call gen-test, re/re.syn/ssub_match)\n$(call gen-test, re/re.syn/wcmatch)\n$(call gen-test, re/re.syn/wcregex_iterator)\n$(call gen-test, re/re.syn/wcregex_token_iterator)\n$(call gen-test, re/re.syn/wcsub_match)\n$(call gen-test, re/re.syn/wregex)\n$(call gen-test, re/re.syn/wsmatch)\n$(call gen-test, re/re.syn/wsregex_iterator)\n$(call gen-test, re/re.syn/wsregex_token_iterator)\n$(call gen-test, re/re.syn/wssub_match)\n$(call gen-test, re/re.traits/default)\n$(call gen-test, re/re.traits/getloc)\n$(call gen-test, re/re.traits/imbue)\n$(call gen-test, re/re.traits/isctype)\n$(call gen-test, re/re.traits/length)\n$(call gen-test, re/re.traits/lookup_classname)\n$(call gen-test, re/re.traits/lookup_collatename)\n$(call gen-test, re/re.traits/lookup_collatename.xlocale)\n$(call gen-test, re/re.traits/transform)\n$(call gen-test, re/re.traits/transform_primary)\n$(call gen-test, re/re.traits/translate_nocase)\n$(call gen-test, re/re.traits/translate)\n$(call gen-test, re/re.traits/types)\n$(call gen-test, re/re.traits/value)\n$(call gen-test, strings/basic.string.hash/strings)\n$(call gen-test, strings/basic.string.literals/literal1)\n$(call gen-test, strings/basic.string.literals/literal2)\n$(call gen-test, strings/basic.string.literals/literal3)\n$(call gen-test, strings/basic.string.literals/literal)\n$(call gen-test, strings/basic.string/string.access/at)\n$(call gen-test, strings/basic.string/string.access/back)\n$(call gen-test, strings/basic.string/string.access/db_back)\n$(call gen-test, strings/basic.string/string.access/db_cback)\n$(call gen-test, strings/basic.string/string.access/db_cfront)\n$(call gen-test, strings/basic.string/string.access/db_cindex)\n$(call gen-test, strings/basic.string/string.access/db_front)\n$(call gen-test, strings/basic.string/string.access/db_index)\n$(call gen-test, strings/basic.string/string.access/front)\n$(call gen-test, strings/basic.string/string.access/index)\n$(call gen-test, strings/basic.string/string.capacity/capacity)\n$(call gen-test, strings/basic.string/string.capacity/clear)\n$(call gen-test, strings/basic.string/string.capacity/empty)\n$(call gen-test, strings/basic.string/string.capacity/length)\n$(call gen-test, strings/basic.string/string.capacity/max_size)\n$(call gen-test, strings/basic.string/string.capacity/reserve)\n$(call gen-test, strings/basic.string/string.capacity/resize_size_char)\n$(call gen-test, strings/basic.string/string.capacity/resize_size)\n$(call gen-test, strings/basic.string/string.capacity/shrink_to_fit)\n$(call gen-test, strings/basic.string/string.capacity/size)\n$(call gen-test, strings/basic.string/string.cons/alloc)\n$(call gen-test, strings/basic.string/string.cons/char_assignment)\n$(call gen-test, strings/basic.string/string.cons/copy_alloc)\n$(call gen-test, strings/basic.string/string.cons/copy_assignment)\n$(call gen-test, strings/basic.string/string.cons/copy)\n$(call gen-test, strings/basic.string/string.cons/default_noexcept)\n$(call gen-test, strings/basic.string/string.cons/dtor_noexcept)\n$(call gen-test, strings/basic.string/string.cons/initializer_list_assignment)\n$(call gen-test, strings/basic.string/string.cons/initializer_list)\n$(call gen-test, strings/basic.string/string.cons/iter_alloc)\n$(call gen-test, strings/basic.string/string.cons/move_alloc)\n$(call gen-test, strings/basic.string/string.cons/move_assignment)\n$(call gen-test, strings/basic.string/string.cons/move_assign_noexcept)\n$(call gen-test, strings/basic.string/string.cons/move_noexcept)\n$(call gen-test, strings/basic.string/string.cons/move)\n$(call gen-test, strings/basic.string/string.cons/pointer_alloc)\n$(call gen-test, strings/basic.string/string.cons/pointer_assignment)\n$(call gen-test, strings/basic.string/string.cons/pointer_size_alloc)\n$(call gen-test, strings/basic.string/string.cons/size_char_alloc)\n$(call gen-test, strings/basic.string/string.cons/substr)\n$(call gen-test, strings/basic.string/string.iterators/begin)\n$(call gen-test, strings/basic.string/string.iterators/cbegin)\n$(call gen-test, strings/basic.string/string.iterators/cend)\n$(call gen-test, strings/basic.string/string.iterators/crbegin)\n$(call gen-test, strings/basic.string/string.iterators/crend)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_2)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_3)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_4)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_5)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_6)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_7)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_8)\n$(call gen-test, strings/basic.string/string.iterators/end)\n$(call gen-test, strings/basic.string/string.iterators/iterators)\n$(call gen-test, strings/basic.string/string.iterators/rbegin)\n$(call gen-test, strings/basic.string/string.iterators/rend)\n$(call gen-test, strings/basic.string/string.modifiers/nothing_to_do)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/iterator)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/push_back)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/iterator)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/rv_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_copy/copy)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_db1)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_db2)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db1)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db2)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db3)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db4)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/pop_back)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/char)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_swap/swap)\n$(call gen-test, strings/basic.string/string.nonmembers/nothing_to_do)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_delim)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_delim_rv)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_rv)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/stream_extract)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/stream_insert)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/char_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_char)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string.special/swap_noexcept)\n$(call gen-test, strings/basic.string/string.nonmembers/string.special/swap)\n$(call gen-test, strings/basic.string/string.ops/nothing_to_do)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/c_str)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/data)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/get_allocator)\n$(call gen-test, strings/basic.string/string.ops/string_compare/pointer)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_pointer)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_string)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_string_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_compare/string)\n$(call gen-test, strings/basic.string/string.ops/string_find/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_substr/substr)\n$(call gen-test, strings/basic.string/string.require/nothing_to_do)\n$(call gen-test, strings/basic.string/types)\n$(call gen-test, strings/char.traits/char.traits.require/nothing_to_do)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/nothing_to_do)\n$(call gen-test, strings/char.traits/char.traits.typedefs/nothing_to_do)\n$(call gen-test, strings/char.traits/nothing_to_do)\n$(call gen-test, strings/c.strings/cctype)\n$(call gen-test, strings/c.strings/cstring)\n$(call gen-test, strings/c.strings/cuchar)\n$(call gen-test, strings/c.strings/cwchar)\n$(call gen-test, strings/c.strings/cwctype)\n$(call gen-test, strings/c.strings/version_cctype)\n$(call gen-test, strings/c.strings/version_cstring)\n$(call gen-test, strings/c.strings/version_cuchar)\n$(call gen-test, strings/c.strings/version_cwchar)\n$(call gen-test, strings/c.strings/version_cwctype)\n$(call gen-test, strings/string.classes/typedefs)\n$(call gen-test, strings/string.conversions/stod)\n$(call gen-test, strings/string.conversions/stof)\n$(call gen-test, strings/string.conversions/stoi)\n$(call gen-test, strings/string.conversions/stold)\n$(call gen-test, strings/string.conversions/stoll)\n$(call gen-test, strings/string.conversions/stol)\n$(call gen-test, strings/string.conversions/stoull)\n$(call gen-test, strings/string.conversions/stoul)\n$(call gen-test, strings/string.conversions/to_string)\n$(call gen-test, strings/string.conversions/to_wstring)\n$(call gen-test, strings/strings.general/nothing_to_do)\n$(call gen-test, strings/version)\n$(call gen-test, support/nothing_to_do)\n$(call gen-test, thread/futures/futures.async/async)\n$(call gen-test, thread/futures/futures.errors/default_error_condition)\n$(call gen-test, thread/futures/futures.errors/equivalent_error_code_int)\n$(call gen-test, thread/futures/futures.errors/equivalent_int_error_condition)\n$(call gen-test, thread/futures/futures.errors/future_category)\n$(call gen-test, thread/futures/futures.errors/make_error_code)\n$(call gen-test, thread/futures/futures.errors/make_error_condition)\n$(call gen-test, thread/futures/futures.future_error/code)\n$(call gen-test, thread/futures/futures.future_error/types)\n$(call gen-test, thread/futures/futures.future_error/what)\n$(call gen-test, thread/futures/futures.overview/future_errc)\n$(call gen-test, thread/futures/futures.overview/future_status)\n$(call gen-test, thread/futures/futures.overview/is_error_code_enum_future_errc)\n$(call gen-test, thread/futures/futures.overview/launch)\n$(call gen-test, thread/futures/futures.promise/alloc_ctor)\n$(call gen-test, thread/futures/futures.promise/default)\n$(call gen-test, thread/futures/futures.promise/dtor)\n$(call gen-test, thread/futures/futures.promise/get_future)\n$(call gen-test, thread/futures/futures.promise/move_assign)\n$(call gen-test, thread/futures/futures.promise/move_ctor)\n$(call gen-test, thread/futures/futures.promise/set_exception_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_exception)\n$(call gen-test, thread/futures/futures.promise/set_lvalue_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_lvalue)\n$(call gen-test, thread/futures/futures.promise/set_rvalue_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_rvalue)\n$(call gen-test, thread/futures/futures.promise/set_value_at_thread_exit_const)\n$(call gen-test, thread/futures/futures.promise/set_value_at_thread_exit_void)\n$(call gen-test, thread/futures/futures.promise/set_value_const)\n$(call gen-test, thread/futures/futures.promise/set_value_void)\n$(call gen-test, thread/futures/futures.promise/swap)\n$(call gen-test, thread/futures/futures.promise/uses_allocator)\n$(call gen-test, thread/futures/futures.shared_future/copy_assign)\n$(call gen-test, thread/futures/futures.shared_future/copy_ctor)\n$(call gen-test, thread/futures/futures.shared_future/ctor_future)\n$(call gen-test, thread/futures/futures.shared_future/default)\n$(call gen-test, thread/futures/futures.shared_future/dtor)\n$(call gen-test, thread/futures/futures.shared_future/get)\n$(call gen-test, thread/futures/futures.shared_future/move_assign)\n$(call gen-test, thread/futures/futures.shared_future/move_ctor)\n$(call gen-test, thread/futures/futures.shared_future/wait_for)\n$(call gen-test, thread/futures/futures.shared_future/wait)\n$(call gen-test, thread/futures/futures.shared_future/wait_until)\n$(call gen-test, thread/futures/futures.state/nothing_to_do)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/assign_move)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_default)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_func_alloc)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_func)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_move)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/dtor)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/get_future)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/make_ready_at_thread_exit)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/operator)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/reset)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/swap)\n$(call gen-test, thread/futures/futures.tas/futures.task.nonmembers/swap)\n$(call gen-test, thread/futures/futures.tas/futures.task.nonmembers/uses_allocator)\n$(call gen-test, thread/futures/futures.tas/types)\n$(call gen-test, thread/futures/futures.unique_future/default)\n$(call gen-test, thread/futures/futures.unique_future/dtor)\n$(call gen-test, thread/futures/futures.unique_future/get)\n$(call gen-test, thread/futures/futures.unique_future/move_assign)\n$(call gen-test, thread/futures/futures.unique_future/move_ctor)\n$(call gen-test, thread/futures/futures.unique_future/share)\n$(call gen-test, thread/futures/futures.unique_future/wait_for)\n$(call gen-test, thread/futures/futures.unique_future/wait)\n$(call gen-test, thread/futures/futures.unique_future/wait_until)\n$(call gen-test, thread/futures/version)\n$(call gen-test, thread/macro)\n$(call gen-test, thread/thread.condition/cv_status)\n$(call gen-test, thread/thread.condition/notify_all_at_thread_exit)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/default)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/destructor)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/notify_all)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/notify_one)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait.exception)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for.exception)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_until)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_until_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/default)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/destructor)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/native_handle)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/notify_all)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/notify_one)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_for)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_for_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_until)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_until_pred)\n$(call gen-test, thread/thread.condition/version)\n$(call gen-test, thread/thread.general/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.lock.algorithm/lock)\n$(call gen-test, thread/thread.mutex/thread.lock.algorithm/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/types)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/default)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_assign)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_ctor)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_defer_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/unlock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/member_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/nonmember_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/release)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/op_bool)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/owns_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/types)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/types)\n$(call gen-test, thread/thread.mutex/thread.lock/types)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.general/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/native_handle)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/native_handle)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/nothing_to_do) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/default) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.once/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.once/thread.once.callonce/call_once)\n$(call gen-test, thread/thread.mutex/thread.once/thread.once.onceflag/default)\n$(call gen-test, thread/thread.mutex/version)\n$(call gen-test, thread/thread.req/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.exception/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.basic/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.general/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.req/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.timed/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.native/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.paramname/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.timing/nothing_to_do)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.assign/move)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/default)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/F)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/move)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.destr/dtor)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/assign)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/copy)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/default)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/eq)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/lt)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/stream)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/thread_id)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/detach)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/get_id)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/joinable)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/join)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/native_handle)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/swap)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.static/hardware_concurrency)\n$(call gen-test, thread/thread.threads/thread.thread.class/types)\n$(call gen-test, thread/thread.threads/thread.thread.this/get_id)\n$(call gen-test, thread/thread.threads/thread.thread.this/sleep_for)\n$(call gen-test, thread/thread.threads/thread.thread.this/sleep_until)\n$(call gen-test, thread/thread.threads/thread.thread.this/yield)\n$(call gen-test, thread/thread.threads/version)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/allocs)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/converting_copy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/converting_move)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/copy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/default)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/allocate_size_hint)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/allocate_size)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/construct)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/deallocate)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/destroy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/inner_allocator)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/max_size)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/outer_allocator)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/allocator_pointers)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/inner_allocator_type)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap)\n$(call gen-test, utilities/allocator.adaptor/scoped.adaptor.operators/eq)\n$(call gen-test, utilities/allocator.adaptor/types)\n$(call gen-test, utilities/date.time/tested_elsewhere)\n$(call gen-test, utilities/function.objects/arithmetic.operations/divides)\n$(call gen-test, utilities/function.objects/arithmetic.operations/minus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/modulus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/multiplies)\n$(call gen-test, utilities/function.objects/arithmetic.operations/negate)\n$(call gen-test, utilities/function.objects/arithmetic.operations/plus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/transparent)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/copy)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/nested)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.place/placeholders)\n$(call gen-test, utilities/function.objects/bind/func.bind/nothing_to_do)\n$(call gen-test, utilities/function.objects/bind/nothing_to_do)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_and)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_not)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_or)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_xor)\n$(call gen-test, utilities/function.objects/bitwise.operations/transparent)\n$(call gen-test, utilities/function.objects/comparisons/equal_to)\n$(call gen-test, utilities/function.objects/comparisons/greater_equal)\n$(call gen-test, utilities/function.objects/comparisons/greater)\n$(call gen-test, utilities/function.objects/comparisons/less_equal)\n$(call gen-test, utilities/function.objects/comparisons/less)\n$(call gen-test, utilities/function.objects/comparisons/not_equal_to)\n$(call gen-test, utilities/function.objects/comparisons/transparent)\n$(call gen-test, utilities/function.objects/func.def/nothing_to_do)\n$(call gen-test, utilities/function.objects/func.memfn/member_data)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_const)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_const_volatile)\n$(call gen-test, utilities/function.objects/func.memfn/member_function)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_volatile)\n$(call gen-test, utilities/function.objects/func.require/binary_function)\n$(call gen-test, utilities/function.objects/func.require/invoke)\n$(call gen-test, utilities/function.objects/func.require/unary_function)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_EQEQ)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/types)\n$(call gen-test, utilities/function.objects/func.wrap/nothing_to_do)\n$(call gen-test, utilities/function.objects/logical.operations/logical_and)\n$(call gen-test, utilities/function.objects/logical.operations/logical_not)\n$(call gen-test, utilities/function.objects/logical.operations/logical_or)\n$(call gen-test, utilities/function.objects/logical.operations/transparent)\n$(call gen-test, utilities/function.objects/negators/binary_negate)\n$(call gen-test, utilities/function.objects/negators/not1)\n$(call gen-test, utilities/function.objects/negators/not2)\n$(call gen-test, utilities/function.objects/negators/unary_negate)\n$(call gen-test, utilities/function.objects/refwrap/binary)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.access/conversion)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.assign/copy_assign)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.const/copy_ctor)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.const/type_ctor)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/cref_1)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/cref_2)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/ref_1)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/ref_2)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0)\n$(call gen-test, utilities/function.objects/refwrap/type)\n$(call gen-test, utilities/function.objects/refwrap/unary)\n$(call gen-test, utilities/function.objects/refwrap/weak_result)\n$(call gen-test, utilities/function.objects/unord.hash/enum)\n$(call gen-test, utilities/function.objects/unord.hash/floating)\n$(call gen-test, utilities/function.objects/unord.hash/integral)\n$(call gen-test, utilities/function.objects/unord.hash/pointer)\n$(call gen-test, utilities/function.objects/version)\n$(call gen-test, utilities/intseq/intseq.general/integer_seq)\n$(call gen-test, utilities/intseq/intseq.intseq/integer_seq)\n$(call gen-test, utilities/intseq/intseq.make/make_integer_seq)\n$(call gen-test, utilities/intseq/nothing_to_do)\n$(call gen-test, utilities/memory/allocator.tag/allocator_arg)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/allocate_hint)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/allocate)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/construct)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/deallocate)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/destroy)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/max_size)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/const_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/difference_type)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/size_type)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/void_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator_type)\n$(call gen-test, utilities/memory/allocator.traits/rebind_traits)\n$(call gen-test, utilities/memory/allocator.traits/value_type)\n$(call gen-test, utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere)\n$(call gen-test, utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator)\n$(call gen-test, utilities/memory/allocator.uses/nothing_to_do)\n$(call gen-test, utilities/memory/c.malloc/nothing_to_do)\n$(call gen-test, utilities/memory/default.allocator/allocator.globals/eq)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/address)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/allocate)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/construct)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/max_size)\n$(call gen-test, utilities/memory/default.allocator/allocator_pointers)\n$(call gen-test, utilities/memory/default.allocator/allocator_types)\n$(call gen-test, utilities/memory/default.allocator/allocator_void)\n$(call gen-test, utilities/memory/pointer.traits/difference_type)\n$(call gen-test, utilities/memory/pointer.traits/element_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer)\n$(call gen-test, utilities/memory/pointer.traits/pointer_to)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.functions/pointer_to)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/difference_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/element_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/rebind)\n$(call gen-test, utilities/memory/pointer.traits/rebind)\n$(call gen-test, utilities/memory/ptr.align/align)\n$(call gen-test, utilities/memory/specialized.algorithms/nothing_to_do)\n$(call gen-test, utilities/memory/specialized.algorithms/specialized.addressof/addressof)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill)\n$(call gen-test, utilities/memory/storage.iterator/raw_storag_iterator)\n$(call gen-test, utilities/memory/temporary.buffer/temporary_buffer)\n$(call gen-test, utilities/memory/unique.ptr/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.create/make_unique.array)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.create/make_unique.single)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/pointer_type)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/cmp_nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/eq)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/rel)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/swap)\n$(call gen-test, utilities/memory/util.dynamic.safety/declare_no_pointers)\n$(call gen-test, utilities/memory/util.dynamic.safety/declare_reachable)\n$(call gen-test, utilities/memory/util.dynamic.safety/get_pointer_safety)\n$(call gen-test, utilities/memory/util.smartptr/nothing_to_do)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_is_lock_free)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/types)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/cmp_nullptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/types)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap)\n$(call gen-test, utilities/memory/version)\n$(call gen-test, utilities/meta/meta.hel/integral_constant)\n$(call gen-test, utilities/meta/meta.rel/is_base_of)\n$(call gen-test, utilities/meta/meta.rel/is_convertible)\n$(call gen-test, utilities/meta/meta.rel/is_same)\n$(call gen-test, utilities/meta/meta.rqmts/nothing_to_do)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.arr/remove_all_extents)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.arr/remove_extent)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_const)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_cv)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_volatile)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_const)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_cv)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_volatile)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/aligned_storage)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/aligned_union)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/common_type)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/conditional)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/decay)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/enable_if)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/result_of)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/underlying_type)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ptr/add_pointer)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ptr/remove_pointer)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/remove_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.sign/make_signed)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.sign/make_unsigned)\n$(call gen-test, utilities/meta/meta.trans/nothing_to_do)\n$(call gen-test, utilities/meta/meta.type.synop/nothing_to_do)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/array)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/class)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/enum)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/floating_point)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/function)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/integral)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/lvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/member_function_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/member_object_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/nullptr)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/rvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/union)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/void)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/array)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/class)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/enum)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/floating_point)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/function)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/integral)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/lvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/member_function_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/member_object_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/rvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/union)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/void)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/__has_operator_addressof)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_abstract)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_const)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_empty)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_final)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_literal_type)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_pod)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_polymorphic)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_signed)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_standard_layout)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivial)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_unsigned)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_volatile)\n$(call gen-test, utilities/meta/meta.unary/nothing_to_do)\n$(call gen-test, utilities/meta/meta.unary.prop.query/alignment_of)\n$(call gen-test, utilities/meta/meta.unary.prop.query/extent)\n$(call gen-test, utilities/meta/meta.unary.prop.query/rank)\n$(call gen-test, utilities/meta/version)\n$(call gen-test, utilities/nothing_to_do)\n$(call gen-test, utilities/optional/optional.bad_optional_access/char_pointer)\n$(call gen-test, utilities/optional/optional.bad_optional_access/copy_assign)\n$(call gen-test, utilities/optional/optional.bad_optional_access/copy_ctor)\n$(call gen-test, utilities/optional/optional.bad_optional_access/default)\n$(call gen-test, utilities/optional/optional.bad_optional_access/derive)\n$(call gen-test, utilities/optional/optional.bad_optional_access/string)\n$(call gen-test, utilities/optional/optional.comp_with_t/equal)\n$(call gen-test, utilities/optional/optional.comp_with_t/less_than)\n$(call gen-test, utilities/optional/optional.defs/tested_elsewhere)\n$(call gen-test, utilities/optional/optional.general/nothing_to_do)\n$(call gen-test, utilities/optional/optional.hash/hash)\n$(call gen-test, utilities/optional/optional.inplace/in_place_t)\n$(call gen-test, utilities/optional/optional.nullops/eqaul)\n$(call gen-test, utilities/optional/optional.nullops/less_than)\n$(call gen-test, utilities/optional/optional.nullopt/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/assign_value)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/copy)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/emplace_initializer_list)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/emplace)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/move)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/const_T)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/copy)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/default)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/initializer_list)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/in_place_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/move)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/rvalue_T)\n$(call gen-test, utilities/optional/optional.object/optional.object.dtor/dtor)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/bool)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/dereference_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/dereference)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/op_arrow_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/op_arrow)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_or_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_or)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value)\n$(call gen-test, utilities/optional/optional.object/optional.object.swap/swap)\n$(call gen-test, utilities/optional/optional.object/types)\n$(call gen-test, utilities/optional/optional.relops/equal)\n$(call gen-test, utilities/optional/optional.relops/less_than)\n$(call gen-test, utilities/optional/optional.specalg/make_optional)\n$(call gen-test, utilities/optional/optional.specalg/swap)\n$(call gen-test, utilities/optional/optional.syn/optional_includes_initializer_list)\n$(call gen-test, utilities/optional/version)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_add)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_divide)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_multiply)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_subtract)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_greater_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_greater)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_less_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_less)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_not_equal)\n$(call gen-test, utilities/ratio/ratio.ratio/ratio)\n$(call gen-test, utilities/ratio/ratio.si/nothing_to_do)\n$(call gen-test, utilities/ratio/typedefs)\n$(call gen-test, utilities/ratio/version)\n$(call gen-test, utilities/template.bitset/bitset.cons/char_ptr_ctor)\n$(call gen-test, utilities/template.bitset/bitset.cons/default)\n$(call gen-test, utilities/template.bitset/bitset.cons/string_ctor)\n$(call gen-test, utilities/template.bitset/bitset.cons/ull_ctor)\n$(call gen-test, utilities/template.bitset/bitset.hash/bitset)\n$(call gen-test, utilities/template.bitset/bitset.members/all)\n$(call gen-test, utilities/template.bitset/bitset.members/any)\n$(call gen-test, utilities/template.bitset/bitset.members/count)\n$(call gen-test, utilities/template.bitset/bitset.members/flip_all)\n$(call gen-test, utilities/template.bitset/bitset.members/flip_one)\n$(call gen-test, utilities/template.bitset/bitset.members/index_const)\n$(call gen-test, utilities/template.bitset/bitset.members/index)\n$(call gen-test, utilities/template.bitset/bitset.members/left_shift_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/left_shift)\n$(call gen-test, utilities/template.bitset/bitset.members/none)\n$(call gen-test, utilities/template.bitset/bitset.members/not_all)\n$(call gen-test, utilities/template.bitset/bitset.members/op_and_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_eq_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_or_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_xor_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/reset_all)\n$(call gen-test, utilities/template.bitset/bitset.members/reset_one)\n$(call gen-test, utilities/template.bitset/bitset.members/right_shift_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/right_shift)\n$(call gen-test, utilities/template.bitset/bitset.members/set_all)\n$(call gen-test, utilities/template.bitset/bitset.members/set_one)\n$(call gen-test, utilities/template.bitset/bitset.members/size)\n$(call gen-test, utilities/template.bitset/bitset.members/test)\n$(call gen-test, utilities/template.bitset/bitset.members/to_string)\n$(call gen-test, utilities/template.bitset/bitset.members/to_ullong)\n$(call gen-test, utilities/template.bitset/bitset.members/to_ulong)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_and)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_not)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_or)\n$(call gen-test, utilities/template.bitset/bitset.operators/stream_in)\n$(call gen-test, utilities/template.bitset/bitset.operators/stream_out)\n$(call gen-test, utilities/template.bitset/includes)\n$(call gen-test, utilities/template.bitset/version)\n$(call gen-test, utilities/time/hours)\n$(call gen-test, utilities/time/microseconds)\n$(call gen-test, utilities/time/milliseconds)\n$(call gen-test, utilities/time/minutes)\n$(call gen-test, utilities/time/nanoseconds)\n$(call gen-test, utilities/time/seconds)\n$(call gen-test, utilities/time/time.clock/nothing_to_do)\n$(call gen-test, utilities/time/time.clock.req/nothing_to_do)\n$(call gen-test, utilities/time/time.clock/time.clock.hires/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.hires/now)\n$(call gen-test, utilities/time/time.clock/time.clock.steady/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.steady/now)\n$(call gen-test, utilities/time/time.clock/time.clock.system/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.system/from_time_t)\n$(call gen-test, utilities/time/time.clock/time.clock.system/now)\n$(call gen-test, utilities/time/time.clock/time.clock.system/rep_signed)\n$(call gen-test, utilities/time/time.clock/time.clock.system/to_time_t)\n$(call gen-test, utilities/time/time.duration/default_ratio)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_divideEQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_-EQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_+EQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_--int)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_++int)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_modEQduration)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_modEQrep)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_--)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_-)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_+)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_++)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_timesEQ)\n$(call gen-test, utilities/time/time.duration/time.duration.cast/duration_cast)\n$(call gen-test, utilities/time/time.duration/time.duration.comparisons/op_equal)\n$(call gen-test, utilities/time/time.duration/time.duration.comparisons/op_less)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_exact)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_inexact)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_int_to_float)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_overflow)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/default)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/rep02)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/rep)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals1)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals2)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_divide_duration)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_divide_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_mod_duration)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_mod_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_-)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_+)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_times_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.observer/tested_elsewhere)\n$(call gen-test, utilities/time/time.duration/time.duration.special/max)\n$(call gen-test, utilities/time/time.duration/time.duration.special/min)\n$(call gen-test, utilities/time/time.duration/time.duration.special/zero)\n$(call gen-test, utilities/time/time.duration/types)\n$(call gen-test, utilities/time/time.point/default_duration)\n$(call gen-test, utilities/time/time.point/time.point.arithmetic/op_-EQ)\n$(call gen-test, utilities/time/time.point/time.point.arithmetic/op_+EQ)\n$(call gen-test, utilities/time/time.point/time.point.cast/time_point_cast)\n$(call gen-test, utilities/time/time.point/time.point.comparisons/op_equal)\n$(call gen-test, utilities/time/time.point/time.point.comparisons/op_less)\n$(call gen-test, utilities/time/time.point/time.point.cons/convert)\n$(call gen-test, utilities/time/time.point/time.point.cons/default)\n$(call gen-test, utilities/time/time.point/time.point.cons/duration)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_-duration)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_+)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_-time_point)\n$(call gen-test, utilities/time/time.point/time.point.observer/tested_elsewhere)\n$(call gen-test, utilities/time/time.point/time.point.special/max)\n$(call gen-test, utilities/time/time.point/time.point.special/min)\n$(call gen-test, utilities/time/time.traits/nothing_to_do)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/max)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/min)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/zero)\n$(call gen-test, utilities/time/time.traits/time.traits.is_fp/treat_as_floating_point)\n$(call gen-test, utilities/time/time.traits/time.traits.specializations/duration)\n$(call gen-test, utilities/time/time.traits/time.traits.specializations/time_point)\n$(call gen-test, utilities/time/version)\n$(call gen-test, utilities/tuple/tuple.general/nothing_to_do)\n$(call gen-test, utilities/tuple/tuple.general/tuple.smartptr)\n$(call gen-test, utilities/tuple/tuple.tuple/empty_member)\n$(call gen-test, utilities/tuple/tuple.tuple/TupleFunction)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_const_Types)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/const_Types)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/default)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/UTypes)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/make_tuple)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/tie)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/tuple_cat)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_const)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_non_const)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_rv)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.helper/tuple_element)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.helper/tuple_size)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.rel/eq)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.rel/lt)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.special/non_member_swap)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.swap/member_swap)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.traits/uses_allocator)\n$(call gen-test, utilities/tuple/version)\n$(call gen-test, utilities/type.index/type.index.hash/hash)\n$(call gen-test, utilities/type.index/type.index.members/ctor)\n$(call gen-test, utilities/type.index/type.index.members/eq)\n$(call gen-test, utilities/type.index/type.index.members/hash_code)\n$(call gen-test, utilities/type.index/type.index.members/lt)\n$(call gen-test, utilities/type.index/type.index.members/name)\n$(call gen-test, utilities/type.index/type.index.overview/copy_assign)\n$(call gen-test, utilities/type.index/type.index.overview/copy_ctor)\n$(call gen-test, utilities/type.index/type.index.synopsis/hash_type_index)\n$(call gen-test, utilities/type.index/version)\n$(call gen-test, utilities/utilities.general/nothing_to_do)\n$(call gen-test, utilities/utility/declval/declval)\n$(call gen-test, utilities/utility/exchange/exchange)\n$(call gen-test, utilities/utility/forward/forward)\n$(call gen-test, utilities/utility/forward/move_copy)\n$(call gen-test, utilities/utility/forward/move_if_noexcept)\n$(call gen-test, utilities/utility/forward/move_only)\n$(call gen-test, utilities/utility/operators/rel_ops)\n$(call gen-test, utilities/utility/pairs/nothing_to_do)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_const)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_non_const)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_rv)\n$(call gen-test, utilities/utility/pairs/pair.astuple/pairs.by.type)\n$(call gen-test, utilities/utility/pairs/pair.astuple/tuple_element)\n$(call gen-test, utilities/utility/pairs/pair.astuple/tuple_size)\n$(call gen-test, utilities/utility/pairs/pair.piecewise/piecewise_construct)\n$(call gen-test, utilities/utility/pairs/pairs.general/nothing_to_do)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_const_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_rv_pair)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/const_first_const_second)\n$(call gen-test, utilities/utility/pairs/pairs.pair/const_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/copy_ctor)\n$(call gen-test, utilities/utility/pairs/pairs.pair/default)\n$(call gen-test, utilities/utility/pairs/pairs.pair/piecewise)\n$(call gen-test, utilities/utility/pairs/pairs.pair/rv_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/swap)\n$(call gen-test, utilities/utility/pairs/pairs.pair/types)\n$(call gen-test, utilities/utility/pairs/pairs.pair/U_V)\n$(call gen-test, utilities/utility/pairs/pairs.spec/comparison)\n$(call gen-test, utilities/utility/pairs/pairs.spec/make_pair)\n$(call gen-test, utilities/utility/pairs/pairs.spec/non_member_swap)\n$(call gen-test, utilities/utility.requirements/allocator.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/hash.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/nullablepointer.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/swappable.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/utility.arg.requirements/nothing_to_do)\n$(call gen-test, utilities/utility/utility.swap/swap_array)\n$(call gen-test, utilities/utility/utility.swap/swap)\n$(call gen-test, utilities/utility/version)\n"
  },
  {
    "path": "tests/device/test-libc++-shared-full/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_shared\n"
  },
  {
    "path": "tests/device/test-libc++-shared-full/properties.json",
    "content": "{\n    \"broken\": true,\n    \"long\": true\n}\n"
  },
  {
    "path": "tests/device/test-libc++-shared-full/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    return toolchain\n"
  },
  {
    "path": "tests/device/test-libc++-static/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_1_static\nLOCAL_SRC_FILES := test_1.cc\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-libc++-static/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_static\n"
  },
  {
    "path": "tests/device/test-libc++-static/jni/test_1.cc",
    "content": "// -*- C++ -*-\n//===-------------------- support/android/wchar_support.c ------------------===//\n//\n//                     The LLVM Compiler Infrastructure\n//\n// This file is dual licensed under the MIT and the University of Illinois Open\n// Source Licenses. See LICENSE.TXT for details.\n//\n//===----------------------------------------------------------------------===//\n\n#include <iostream>\n#include <locale>\n\nint main(void) {\n  // TODO(digit): This imbue is required, otherwise a crash will happen\n  // at runtime, with the following stack trace:\n  //\n  //   #0  0x00069ae0 in std::(anonymous namespace)::default_terminate () at jni/../../../../gabi++/src/terminate.cc:57\n  //   #1  0x00069e48 in std::terminate () at jni/../../../../gabi++/src/terminate.cc:123\n  //   #2  0x00067d44 in __cxxabiv1::call_terminate (unwind_exception=0x1827470) at jni/../../../../gabi++/src/helper_func_internal.cc:58\n  //   #3  0x00066bf8 in (anonymous namespace)::throwException (header=0x1827438) at jni/../../../../gabi++/src/cxxabi.cc:126\n  //   #4  0x00066e64 in __cxxabiv1::__cxa_throw (thrown_exc=0x18274c8, tinfo=0x7fa00, dest=0x69c10 <std::bad_cast::~bad_cast()>)\n  //       at jni/../../../../gabi++/src/cxxabi.cc:190\n  //   #5  0x00010be0 in std::__1::locale::__imp::use_facet (this=0x80b28, id=28) at jni/../../../libcxx/src/locale.cpp:426\n  //   #6  0x00010f50 in std::__1::locale::use_facet (this=0xbe980ab4, x=...) at jni/../../../libcxx/src/locale.cpp:568\n  //   #7  0x00009e88 in use_facet<std::__1::ctype<char> > (__l=<optimized out>) at jni/../../../libcxx/include/__locale:172\n  //   #8  widen (__c=10 '\\n', this=0x80084) at jni/../../../libcxx/include/ios:726\n  //   #9  std::__1::endl<char, std::__1::char_traits<char> > (__os=...) at jni/../../../libcxx/include/ostream:1181\n  //   #10 0x00009ad0 in operator<< (\n  //   __pf=0x9e20 <std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, this=0x80080) at jni/../../../libcxx/include/ostream:306\n  //   #11 main () at jni/test_1.cc:22\n  //\n  // The issue seems to be that on #9, the id retrieved through\n  // locale::id::__get() reaches 28, which is an invalid index in the\n  // facets_ vector defined in locale.cpp:124 and populated in\n  // locale::__imp::__imp(size_t) in the same source file.\n  //\n  // Not sure if a libc++ bug or something else. Investigate.\n  std::cout.imbue(std::locale(\"C\"));\n  std::cout << \"Hello World\" << std::endl;\n  return 0;\n}\n"
  },
  {
    "path": "tests/device/test-libc++-static/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if subtest == 'test_1_static' and abi == 'mips':\n        return abi, 'http://b/24673473'\n    return None, None\n"
  },
  {
    "path": "tests/device/test-libc++-static-full/DATA",
    "content": "# run-tests.sh looks for this file to check if additional data is needed to run tests in this project\n# Format:\n#   <test-pattern> <datapath-pattern-relative-to-$NDK>\n#\ninput.output___file.streams___fstreams___ifstream.cons___move    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\ninput.output___file.streams___fstreams___ifstream.cons___pointer sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\ninput.output___file.streams___fstreams___ifstream.cons___string  sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.cons/test.dat\n\ninput.output___file.streams___fstreams___filebuf.virtuals___pbackfail sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/filebuf.virtuals/underflow.dat\ninput.output___file.streams___fstreams___filebuf.virtuals___underflow sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/filebuf.virtuals/underflow*.dat\n\ninput.output___file.streams___fstreams___ifstream.members___close        sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___open_pointer sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___open_string  sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\ninput.output___file.streams___fstreams___ifstream.members___rdbuf        sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.members/test.dat\n\ninput.output___file.streams___fstreams___ifstream.assign___member_swap    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/*.dat\ninput.output___file.streams___fstreams___ifstream.assign___move_assign    sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/test.dat\ninput.output___file.streams___fstreams___ifstream.assign___nonmember_swap sources/cxx-stl/llvm-libc++/libcxx/test/input.output/file.streams/fstreams/ifstream.assign/*.dat\n\nlocalization___locales___locale.convenience___conversions___conversions.buffer__pbackfail sources/cxx-stl/llvm-libc++/libcxx/test/localization/locales/locale.convenience/conversions/conversions.buffer/underflow.dat\nlocalization___locales___locale.convenience___conversions___conversions.buffer__underflow sources/cxx-stl/llvm-libc++/libcxx/test/localization/locales/locale.convenience/conversions/conversions.buffer/*.dat\n"
  },
  {
    "path": "tests/device/test-libc++-static-full/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\nlibcxx-test-path := $(abspath $(NDK)/sources/cxx-stl/llvm-libc++/libcxx/test)\n\ndefine ev-gen-test\n__test := $1\ninclude $(CLEAR_VARS)\nLOCAL_SRC_FILES := $(libcxx-test-path)/$$(__test).pass.cpp\nLOCAL_MODULE := $$(subst /,___,$$(__test))\n\n# armeabi and mips needs libatomic to provide \"__atomic_is_lock_free\"\nifneq (,$(filter armeabi mips,$(TARGET_ARCH_ABI)))\nLOCAL_LDLIBS += -latomic\nendif\n\n# Enable RTTI and exception handling for some tests\nLOCAL_CPP_FEATURES := rtti exceptions\n\n# The following are for compiling libc++ tests only.  Regular code doesn't need them\nLOCAL_C_INCLUDES += $(libcxx-test-path)/support\nLOCAL_CPPFLAGS += -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS\n# Add -UNDEBUG because some libc++ tests use assert() which become nothing when -DNDEBUG\n# is defined in toolchains/*clang*/setup.mk for release build.  Interestingly there\n# is real work done inside some assert, so removing assert() isn't an option.\n#\nLOCAL_CPPFLAGS += -UNDEBUG\n\ninclude $(BUILD_EXECUTABLE)\nendef\n\n# The following black list contain test can't be compiled under various\n# configuration\n\nblack_list_all :=\n\nblack_list_clang3_4 := \\\n    utilities/tuple/tuple.tuple/TupleFunction\n\n# gcc4.8 fails atomic_flag_test_and_set_explicit and test_and_set for x86, x86_64, mips, mips64\nblack_list_gcc4_8 := \\\n    atomics/atomics.flag/atomic_flag_test_and_set_explicit \\\n    atomics/atomics.flag/test_and_set \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable \\\n    utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible \\\n    utilities/utility/pairs/pairs.pair/copy_ctor\n\n# gcc4.9 segfault on size_size_string_size_size for armeabi\nblack_list_gcc4_9 := \\\n    $(black_list_gcc4_8) \\\n    strings/basic.string/string.ops/string_compare/size_size_string_size_size \\\n    utilities/tuple/tuple.tuple/TupleFunction\n\n# gcc4.6 fails all atomics\nblack_list_gcc4_6 := \\\n    $(black_list_gcc4_8) \\\n    atomics/atomics.fences/atomic_signal_fence \\\n    atomics/atomics.fences/atomic_thread_fence \\\n    atomics/atomics.flag/atomic_flag_clear_explicit \\\n    atomics/atomics.flag/atomic_flag_clear \\\n    atomics/atomics.flag/atomic_flag_test_and_set_explicit \\\n    atomics/atomics.flag/atomic_flag_test_and_set \\\n    atomics/atomics.flag/clear \\\n    atomics/atomics.flag/default \\\n    atomics/atomics.flag/init \\\n    atomics/atomics.flag/test_and_set \\\n    atomics/atomics.general/nothing_to_do \\\n    atomics/atomics.lockfree/lockfree \\\n    atomics/atomics.order/kill_dependency \\\n    atomics/atomics.order/memory_order \\\n    atomics/atomics.syn/nothing_to_do \\\n    atomics/atomics.types.generic/address \\\n    atomics/atomics.types.generic/bool \\\n    atomics/atomics.types.generic/cstdint_typedefs \\\n    atomics/atomics.types.generic/integral \\\n    atomics/atomics.types.generic/integral_typedefs \\\n    atomics/atomics.types.operations/atomics.types.operations.arith/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.general/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.pointer/nothing_to_do \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_init \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_is_lock_free \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_load_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_load \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_store_explicit \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_store \\\n    atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init \\\n    atomics/atomics.types.operations/atomics.types.operations.templ/nothing_to_do \\\n    atomics/atomics.types.operations/nothing_to_do \\\n    atomics/version \\\n\n\n# Compute the back_list in this particular configuration: \"all | compiler | arch\"\n\nblack_list := $(black_list_all)\n\nifeq (clang3.4,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_clang3_4)\nelse\nifeq (clang3.3,$(NDK_TOOLCHAIN_VERSION))\n$(error clang3.3 is not tested against libc++.  Please upgrade to clang3.4 or after, or use gcc4.8)\nelse\nifeq (4.8,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_8)\nelse\nifeq (4.9,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_9)\nelse\nifeq (4.6,$(NDK_TOOLCHAIN_VERSION))\nblack_list += $(black_list_gcc4_6)\nendif\nendif\nendif\nendif\nendif\n\n# Function  gen-test\ngen-test = \\\n    $(if $(strip $(filter-out $(black_list), $1)), $(eval $(call ev-gen-test, $1)))\n\n# All tests\n\n$(call gen-test, algorithms/alg.c.library/tested_elsewhere)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_backward)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.copy/copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.fill/fill_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.fill/fill)\n$(call gen-test, algorithms/alg.modifying.operations/alg.generate/generate_n)\n$(call gen-test, algorithms/alg.modifying.operations/alg.generate/generate)\n$(call gen-test, algorithms/alg.modifying.operations/alg.move/move_backward)\n$(call gen-test, algorithms/alg.modifying.operations/alg.move/move)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/is_partitioned)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/partition_point)\n$(call gen-test, algorithms/alg.modifying.operations/alg.partitions/stable_partition)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand)\n$(call gen-test, algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_urng)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.remove/remove)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_copy_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace_if)\n$(call gen-test, algorithms/alg.modifying.operations/alg.replace/replace)\n$(call gen-test, algorithms/alg.modifying.operations/alg.reverse/reverse_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.reverse/reverse)\n$(call gen-test, algorithms/alg.modifying.operations/alg.rotate/rotate_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.rotate/rotate)\n$(call gen-test, algorithms/alg.modifying.operations/alg.swap/iter_swap)\n$(call gen-test, algorithms/alg.modifying.operations/alg.swap/swap_ranges)\n$(call gen-test, algorithms/alg.modifying.operations/alg.transform/binary_transform)\n$(call gen-test, algorithms/alg.modifying.operations/alg.transform/unary_transform)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_copy)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_copy_pred)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique)\n$(call gen-test, algorithms/alg.modifying.operations/alg.unique/unique_pred)\n$(call gen-test, algorithms/alg.modifying.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.nonmodifying/alg.adjacent.find/adjacent_find)\n$(call gen-test, algorithms/alg.nonmodifying/alg.adjacent.find/adjacent_find_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.all_of/all_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.any_of/any_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.count/count_if)\n$(call gen-test, algorithms/alg.nonmodifying/alg.count/count)\n$(call gen-test, algorithms/alg.nonmodifying/alg.equal/equal)\n$(call gen-test, algorithms/alg.nonmodifying/alg.equal/equal_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.end/find_end)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.end/find_end_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find_if_not)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find_if)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find/find)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.first.of/find_first_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.find.first.of/find_first_of_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.foreach/test)\n$(call gen-test, algorithms/alg.nonmodifying/alg.is_permutation/is_permutation)\n$(call gen-test, algorithms/alg.nonmodifying/alg.is_permutation/is_permutation_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.none_of/none_of)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_n)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_n_pred)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search)\n$(call gen-test, algorithms/alg.nonmodifying/alg.search/search_pred)\n$(call gen-test, algorithms/alg.nonmodifying/mismatch/mismatch)\n$(call gen-test, algorithms/alg.nonmodifying/mismatch/mismatch_pred)\n$(call gen-test, algorithms/alg.nonmodifying/nothing_to_do)\n$(call gen-test, algorithms/algorithms.general/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/binary.search/binary_search_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/binary.search/binary_search)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/equal.range/equal_range_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/equal.range/equal_range)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/lower.bound/lower_bound_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/lower.bound/lower_bound)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/upper.bound/upper_bound_comp)\n$(call gen-test, algorithms/alg.sorting/alg.binary.search/upper.bound/upper_bound)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_until_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/is.heap/is_heap_until)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/make.heap/make_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/make.heap/make_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/pop.heap/pop_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/pop.heap/pop_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/push.heap/push_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/push.heap/push_heap)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/sort.heap/sort_heap_comp)\n$(call gen-test, algorithms/alg.sorting/alg.heap.operations/sort.heap/sort_heap)\n$(call gen-test, algorithms/alg.sorting/alg.lex.comparison/lexicographical_compare_comp)\n$(call gen-test, algorithms/alg.sorting/alg.lex.comparison/lexicographical_compare)\n$(call gen-test, algorithms/alg.sorting/alg.merge/inplace_merge_comp)\n$(call gen-test, algorithms/alg.sorting/alg.merge/inplace_merge)\n$(call gen-test, algorithms/alg.sorting/alg.merge/merge_comp)\n$(call gen-test, algorithms/alg.sorting/alg.merge/merge)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/max)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_element)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_init_list_comp)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax_init_list)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/minmax)\n$(call gen-test, algorithms/alg.sorting/alg.min.max/min)\n$(call gen-test, algorithms/alg.sorting/alg.nth.element/nth_element_comp)\n$(call gen-test, algorithms/alg.sorting/alg.nth.element/nth_element)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/next_permutation_comp)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/next_permutation)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/prev_permutation_comp)\n$(call gen-test, algorithms/alg.sorting/alg.permutation.generators/prev_permutation)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/includes/includes_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/includes/includes)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.difference/set_difference_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.difference/set_difference)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.intersection/set_intersection_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.intersection/set_intersection)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/set_symmetric_difference_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/set_symmetric_difference)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.union/set_union_comp)\n$(call gen-test, algorithms/alg.sorting/alg.set.operations/set.union/set_union)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_until_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/is.sorted/is_sorted_until)\n$(call gen-test, algorithms/alg.sorting/alg.sort/nothing_to_do)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort.copy/partial_sort_copy_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort.copy/partial_sort_copy)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort/partial_sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/partial.sort/partial_sort)\n$(call gen-test, algorithms/alg.sorting/alg.sort/sort/sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/sort/sort)\n$(call gen-test, algorithms/alg.sorting/alg.sort/stable.sort/stable_sort_comp)\n$(call gen-test, algorithms/alg.sorting/alg.sort/stable.sort/stable_sort)\n$(call gen-test, algorithms/alg.sorting/nothing_to_do)\n$(call gen-test, algorithms/version)\n$(call gen-test, atomics/atomics.fences/atomic_signal_fence)\n$(call gen-test, atomics/atomics.fences/atomic_thread_fence)\n$(call gen-test, atomics/atomics.flag/atomic_flag_clear_explicit)\n$(call gen-test, atomics/atomics.flag/atomic_flag_clear)\n$(call gen-test, atomics/atomics.flag/atomic_flag_test_and_set_explicit)\n$(call gen-test, atomics/atomics.flag/atomic_flag_test_and_set)\n$(call gen-test, atomics/atomics.flag/clear)\n$(call gen-test, atomics/atomics.flag/default)\n$(call gen-test, atomics/atomics.flag/init)\n$(call gen-test, atomics/atomics.flag/test_and_set)\n$(call gen-test, atomics/atomics.general/nothing_to_do)\n$(call gen-test, atomics/atomics.lockfree/lockfree)\n$(call gen-test, atomics/atomics.order/kill_dependency)\n$(call gen-test, atomics/atomics.order/memory_order)\n$(call gen-test, atomics/atomics.syn/nothing_to_do)\n$(call gen-test, atomics/atomics.types.generic/address)\n$(call gen-test, atomics/atomics.types.generic/bool)\n$(call gen-test, atomics/atomics.types.generic/cstdint_typedefs)\n$(call gen-test, atomics/atomics.types.generic/integral)\n$(call gen-test, atomics/atomics.types.generic/integral_typedefs)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.arith/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.general/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.pointer/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_init)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_is_lock_free)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_load_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_load)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_store_explicit)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_store)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init)\n$(call gen-test, atomics/atomics.types.operations/atomics.types.operations.templ/nothing_to_do)\n$(call gen-test, atomics/atomics.types.operations/nothing_to_do)\n$(call gen-test, atomics/version)\n$(call gen-test, containers/associative/map/compare)\n$(call gen-test, containers/associative/map/map.access/at)\n$(call gen-test, containers/associative/map/map.access/empty)\n$(call gen-test, containers/associative/map/map.access/index_key)\n$(call gen-test, containers/associative/map/map.access/index_rv_key)\n$(call gen-test, containers/associative/map/map.access/index_tuple)\n$(call gen-test, containers/associative/map/map.access/iterator)\n$(call gen-test, containers/associative/map/map.access/max_size)\n$(call gen-test, containers/associative/map/map.access/size)\n$(call gen-test, containers/associative/map/map.cons/alloc)\n$(call gen-test, containers/associative/map/map.cons/assign_initializer_list)\n$(call gen-test, containers/associative/map/map.cons/compare_alloc)\n$(call gen-test, containers/associative/map/map.cons/compare)\n$(call gen-test, containers/associative/map/map.cons/copy_alloc)\n$(call gen-test, containers/associative/map/map.cons/copy_assign)\n$(call gen-test, containers/associative/map/map.cons/copy)\n$(call gen-test, containers/associative/map/map.cons/default_noexcept)\n$(call gen-test, containers/associative/map/map.cons/default)\n$(call gen-test, containers/associative/map/map.cons/default_recursive)\n$(call gen-test, containers/associative/map/map.cons/dtor_noexcept)\n$(call gen-test, containers/associative/map/map.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/map/map.cons/initializer_list_compare)\n$(call gen-test, containers/associative/map/map.cons/initializer_list)\n$(call gen-test, containers/associative/map/map.cons/iter_iter_comp_alloc)\n$(call gen-test, containers/associative/map/map.cons/iter_iter_comp)\n$(call gen-test, containers/associative/map/map.cons/iter_iter)\n$(call gen-test, containers/associative/map/map.cons/move_alloc)\n$(call gen-test, containers/associative/map/map.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/map/map.cons/move_assign)\n$(call gen-test, containers/associative/map/map.cons/move_noexcept)\n$(call gen-test, containers/associative/map/map.cons/move)\n$(call gen-test, containers/associative/map/map.modifiers/clear)\n$(call gen-test, containers/associative/map/map.modifiers/emplace_hint)\n$(call gen-test, containers/associative/map/map.modifiers/emplace)\n$(call gen-test, containers/associative/map/map.modifiers/erase_iter_iter)\n$(call gen-test, containers/associative/map/map.modifiers/erase_iter)\n$(call gen-test, containers/associative/map/map.modifiers/erase_key)\n$(call gen-test, containers/associative/map/map.modifiers/insert_cv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_initializer_list)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_cv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_iter)\n$(call gen-test, containers/associative/map/map.modifiers/insert_iter_rv)\n$(call gen-test, containers/associative/map/map.modifiers/insert_rv)\n$(call gen-test, containers/associative/map/map.ops/count)\n$(call gen-test, containers/associative/map/map.ops/equal_range)\n$(call gen-test, containers/associative/map/map.ops/find)\n$(call gen-test, containers/associative/map/map.ops/lower_bound)\n$(call gen-test, containers/associative/map/map.ops/upper_bound)\n$(call gen-test, containers/associative/map/map.special/member_swap)\n$(call gen-test, containers/associative/map/map.special/non_member_swap)\n$(call gen-test, containers/associative/map/map.special/swap_noexcept)\n$(call gen-test, containers/associative/map/types)\n$(call gen-test, containers/associative/map/version)\n$(call gen-test, containers/associative/multimap/empty)\n$(call gen-test, containers/associative/multimap/iterator)\n$(call gen-test, containers/associative/multimap/max_size)\n$(call gen-test, containers/associative/multimap/multimap.cons/alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/assign_initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.cons/compare_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/compare)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy_assign)\n$(call gen-test, containers/associative/multimap/multimap.cons/copy)\n$(call gen-test, containers/associative/multimap/multimap.cons/default_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/default)\n$(call gen-test, containers/associative/multimap/multimap.cons/dtor_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list_compare)\n$(call gen-test, containers/associative/multimap/multimap.cons/initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter_comp_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter_comp)\n$(call gen-test, containers/associative/multimap/multimap.cons/iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_alloc)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_assign)\n$(call gen-test, containers/associative/multimap/multimap.cons/move_noexcept)\n$(call gen-test, containers/associative/multimap/multimap.cons/move)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/clear)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/emplace_hint)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/emplace)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/erase_key)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_cv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_initializer_list)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_cv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_iter)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_iter_rv)\n$(call gen-test, containers/associative/multimap/multimap.modifiers/insert_rv)\n$(call gen-test, containers/associative/multimap/multimap.ops/count)\n$(call gen-test, containers/associative/multimap/multimap.ops/equal_range)\n$(call gen-test, containers/associative/multimap/multimap.ops/find)\n$(call gen-test, containers/associative/multimap/multimap.ops/lower_bound)\n$(call gen-test, containers/associative/multimap/multimap.ops/upper_bound)\n$(call gen-test, containers/associative/multimap/multimap.special/member_swap)\n$(call gen-test, containers/associative/multimap/multimap.special/non_member_swap)\n$(call gen-test, containers/associative/multimap/multimap.special/swap_noexcept)\n$(call gen-test, containers/associative/multimap/scary)\n$(call gen-test, containers/associative/multimap/size)\n$(call gen-test, containers/associative/multimap/types)\n$(call gen-test, containers/associative/multiset/clear)\n$(call gen-test, containers/associative/multiset/count)\n$(call gen-test, containers/associative/multiset/emplace_hint)\n$(call gen-test, containers/associative/multiset/emplace)\n$(call gen-test, containers/associative/multiset/empty)\n$(call gen-test, containers/associative/multiset/equal_range)\n$(call gen-test, containers/associative/multiset/erase_iter_iter)\n$(call gen-test, containers/associative/multiset/erase_iter)\n$(call gen-test, containers/associative/multiset/erase_key)\n$(call gen-test, containers/associative/multiset/find)\n$(call gen-test, containers/associative/multiset/insert_cv)\n$(call gen-test, containers/associative/multiset/insert_initializer_list)\n$(call gen-test, containers/associative/multiset/insert_iter_cv)\n$(call gen-test, containers/associative/multiset/insert_iter_iter)\n$(call gen-test, containers/associative/multiset/insert_iter_rv)\n$(call gen-test, containers/associative/multiset/insert_rv)\n$(call gen-test, containers/associative/multiset/iterator)\n$(call gen-test, containers/associative/multiset/lower_bound)\n$(call gen-test, containers/associative/multiset/max_size)\n$(call gen-test, containers/associative/multiset/multiset.cons/alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/assign_initializer_list)\n$(call gen-test, containers/associative/multiset/multiset.cons/compare_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/compare)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy_assign)\n$(call gen-test, containers/associative/multiset/multiset.cons/copy)\n$(call gen-test, containers/associative/multiset/multiset.cons/default_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/default)\n$(call gen-test, containers/associative/multiset/multiset.cons/dtor_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list_compare)\n$(call gen-test, containers/associative/multiset/multiset.cons/initializer_list)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter_comp)\n$(call gen-test, containers/associative/multiset/multiset.cons/iter_iter)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_alloc)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_assign)\n$(call gen-test, containers/associative/multiset/multiset.cons/move_noexcept)\n$(call gen-test, containers/associative/multiset/multiset.cons/move)\n$(call gen-test, containers/associative/multiset/multiset.special/member_swap)\n$(call gen-test, containers/associative/multiset/multiset.special/non_member_swap)\n$(call gen-test, containers/associative/multiset/multiset.special/swap_noexcept)\n$(call gen-test, containers/associative/multiset/scary)\n$(call gen-test, containers/associative/multiset/size)\n$(call gen-test, containers/associative/multiset/types)\n$(call gen-test, containers/associative/multiset/upper_bound)\n$(call gen-test, containers/associative/set/clear)\n$(call gen-test, containers/associative/set/count)\n$(call gen-test, containers/associative/set/emplace_hint)\n$(call gen-test, containers/associative/set/emplace)\n$(call gen-test, containers/associative/set/empty)\n$(call gen-test, containers/associative/set/equal_range)\n$(call gen-test, containers/associative/set/erase_iter_iter)\n$(call gen-test, containers/associative/set/erase_iter)\n$(call gen-test, containers/associative/set/erase_key)\n$(call gen-test, containers/associative/set/find)\n$(call gen-test, containers/associative/set/insert_cv)\n$(call gen-test, containers/associative/set/insert_initializer_list)\n$(call gen-test, containers/associative/set/insert_iter_cv)\n$(call gen-test, containers/associative/set/insert_iter_iter)\n$(call gen-test, containers/associative/set/insert_iter_rv)\n$(call gen-test, containers/associative/set/insert_rv)\n$(call gen-test, containers/associative/set/iterator)\n$(call gen-test, containers/associative/set/lower_bound)\n$(call gen-test, containers/associative/set/max_size)\n$(call gen-test, containers/associative/set/set.cons/alloc)\n$(call gen-test, containers/associative/set/set.cons/assign_initializer_list)\n$(call gen-test, containers/associative/set/set.cons/compare_alloc)\n$(call gen-test, containers/associative/set/set.cons/compare)\n$(call gen-test, containers/associative/set/set.cons/copy_alloc)\n$(call gen-test, containers/associative/set/set.cons/copy_assign)\n$(call gen-test, containers/associative/set/set.cons/copy)\n$(call gen-test, containers/associative/set/set.cons/default_noexcept)\n$(call gen-test, containers/associative/set/set.cons/default)\n$(call gen-test, containers/associative/set/set.cons/dtor_noexcept)\n$(call gen-test, containers/associative/set/set.cons/initializer_list_compare_alloc)\n$(call gen-test, containers/associative/set/set.cons/initializer_list_compare)\n$(call gen-test, containers/associative/set/set.cons/initializer_list)\n$(call gen-test, containers/associative/set/set.cons/iter_iter_alloc)\n$(call gen-test, containers/associative/set/set.cons/iter_iter_comp)\n$(call gen-test, containers/associative/set/set.cons/iter_iter)\n$(call gen-test, containers/associative/set/set.cons/move_alloc)\n$(call gen-test, containers/associative/set/set.cons/move_assign_noexcept)\n$(call gen-test, containers/associative/set/set.cons/move_assign)\n$(call gen-test, containers/associative/set/set.cons/move_noexcept)\n$(call gen-test, containers/associative/set/set.cons/move)\n$(call gen-test, containers/associative/set/set.special/member_swap)\n$(call gen-test, containers/associative/set/set.special/non_member_swap)\n$(call gen-test, containers/associative/set/set.special/swap_noexcept)\n$(call gen-test, containers/associative/set/size)\n$(call gen-test, containers/associative/set/types)\n$(call gen-test, containers/associative/set/upper_bound)\n$(call gen-test, containers/associative/set/version)\n$(call gen-test, containers/associative/tree_balance_after_insert)\n$(call gen-test, containers/associative/tree_left_rotate)\n$(call gen-test, containers/associative/tree_remove)\n$(call gen-test, containers/associative/tree_right_rotate)\n$(call gen-test, containers/container.adaptors/nothing_to_do)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_cont_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_comp_rcont_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_copy_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons.alloc/ctor_move_alloc)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/assign_copy)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/assign_move)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp_container)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_comp_rcontainer)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp_cont)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter_comp_rcont)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_iter)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/emplace)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/empty)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/pop)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/push)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/push_rvalue)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/size)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/swap)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.members/top)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/priority.queue/priqueue.special/swap)\n$(call gen-test, containers/container.adaptors/priority.queue/types)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_container_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_queue_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_rcontainer_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons.alloc/ctor_rqueue_alloc)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_container)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/ctor_rcontainer)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/assign_copy)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/assign_move)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/back_const)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/back)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/emplace)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/empty)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/front_const)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/front)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/pop)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/push)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/push_rv)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/size)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/swap)\n$(call gen-test, containers/container.adaptors/queue/queue.defn/types)\n$(call gen-test, containers/container.adaptors/queue/queue.ops/eq)\n$(call gen-test, containers/container.adaptors/queue/queue.ops/lt)\n$(call gen-test, containers/container.adaptors/queue/queue.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/queue/queue.special/swap)\n$(call gen-test, containers/container.adaptors/queue/version)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_container_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_copy_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_rcontainer_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons.alloc/ctor_rqueue_alloc)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_container)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_copy)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_default)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_move)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/ctor_rcontainer)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/default_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/dtor_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/move_assign_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.cons/move_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/assign_copy)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/assign_move)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/emplace)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/empty)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/pop)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/push)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/push_rv)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/size)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/swap)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/top_const)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/top)\n$(call gen-test, containers/container.adaptors/stack/stack.defn/types)\n$(call gen-test, containers/container.adaptors/stack/stack.ops/eq)\n$(call gen-test, containers/container.adaptors/stack/stack.ops/lt)\n$(call gen-test, containers/container.adaptors/stack/stack.special/swap_noexcept)\n$(call gen-test, containers/container.adaptors/stack/stack.special/swap)\n$(call gen-test, containers/container.adaptors/stack/version)\n$(call gen-test, containers/container.requirements/associative.reqmts/associative.reqmts.except/nothing_to_do)\n$(call gen-test, containers/container.requirements/associative.reqmts/nothing_to_do)\n$(call gen-test, containers/container.requirements/container.requirements.dataraces/nothing_to_do)\n$(call gen-test, containers/container.requirements/container.requirements.general/nothing_to_do)\n$(call gen-test, containers/container.requirements/nothing_to_do)\n$(call gen-test, containers/container.requirements/sequence.reqmts/nothing_to_do)\n$(call gen-test, containers/container.requirements/unord.req/nothing_to_do)\n$(call gen-test, containers/container.requirements/unord.req/unord.req.except/nothing_to_do)\n$(call gen-test, containers/containers.general/nothing_to_do)\n$(call gen-test, containers/nothing_to_do)\n$(call gen-test, containers/sequences/array/array.cons/default)\n$(call gen-test, containers/sequences/array/array.cons/initializer_list)\n$(call gen-test, containers/sequences/array/array.data/data_const)\n$(call gen-test, containers/sequences/array/array.data/data)\n$(call gen-test, containers/sequences/array/array.fill/fill)\n$(call gen-test, containers/sequences/array/array.size/size)\n$(call gen-test, containers/sequences/array/array.special/swap)\n$(call gen-test, containers/sequences/array/array.swap/swap)\n$(call gen-test, containers/sequences/array/array.tuple/get_const)\n$(call gen-test, containers/sequences/array/array.tuple/get)\n$(call gen-test, containers/sequences/array/array.tuple/get_rv)\n$(call gen-test, containers/sequences/array/array.tuple/tuple_element)\n$(call gen-test, containers/sequences/array/array.tuple/tuple_size)\n$(call gen-test, containers/sequences/array/array.zero/tested_elsewhere)\n$(call gen-test, containers/sequences/array/at)\n$(call gen-test, containers/sequences/array/begin)\n$(call gen-test, containers/sequences/array/front_back)\n$(call gen-test, containers/sequences/array/indexing)\n$(call gen-test, containers/sequences/array/iterators)\n$(call gen-test, containers/sequences/array/types)\n$(call gen-test, containers/sequences/array/version)\n$(call gen-test, containers/sequences/deque/deque.capacity/access)\n$(call gen-test, containers/sequences/deque/deque.capacity/resize_size)\n$(call gen-test, containers/sequences/deque/deque.capacity/resize_size_value)\n$(call gen-test, containers/sequences/deque/deque.capacity/shrink_to_fit)\n$(call gen-test, containers/sequences/deque/deque.cons/alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.cons/assign_size_value)\n$(call gen-test, containers/sequences/deque/deque.cons/copy_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/copy)\n$(call gen-test, containers/sequences/deque/deque.cons/default_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/default)\n$(call gen-test, containers/sequences/deque/deque.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/iter_iter_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/iter_iter)\n$(call gen-test, containers/sequences/deque/deque.cons/move_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/move_assign)\n$(call gen-test, containers/sequences/deque/deque.cons/move_noexcept)\n$(call gen-test, containers/sequences/deque/deque.cons/move)\n$(call gen-test, containers/sequences/deque/deque.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.cons/op_equal)\n$(call gen-test, containers/sequences/deque/deque.cons/size)\n$(call gen-test, containers/sequences/deque/deque.cons/size_value_alloc)\n$(call gen-test, containers/sequences/deque/deque.cons/size_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/emplace)\n$(call gen-test, containers/sequences/deque/deque.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/erase_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_iter_iter)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_rvalue)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_size_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/insert_value)\n$(call gen-test, containers/sequences/deque/deque.modifiers/pop_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/pop_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front)\n$(call gen-test, containers/sequences/deque/deque.modifiers/push_front_rvalue)\n$(call gen-test, containers/sequences/deque/deque.special/copy_backward)\n$(call gen-test, containers/sequences/deque/deque.special/copy)\n$(call gen-test, containers/sequences/deque/deque.special/move_backward)\n$(call gen-test, containers/sequences/deque/deque.special/move)\n$(call gen-test, containers/sequences/deque/deque.special/swap_noexcept)\n$(call gen-test, containers/sequences/deque/deque.special/swap)\n$(call gen-test, containers/sequences/deque/iterators)\n$(call gen-test, containers/sequences/deque/types)\n$(call gen-test, containers/sequences/deque/version)\n$(call gen-test, containers/sequences/dynarray/dynarray.cons/alloc)\n$(call gen-test, containers/sequences/dynarray/dynarray.cons/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.data/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.mutate/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/at)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/begin_end)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/capacity)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/front_back)\n$(call gen-test, containers/sequences/dynarray/dynarray.overview/indexing)\n$(call gen-test, containers/sequences/dynarray/dynarray.traits/default)\n$(call gen-test, containers/sequences/dynarray/dynarray.zero/default)\n$(call gen-test, containers/sequences/dynarray/nothing_to_do)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.access/front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_copy)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_move)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_op_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/assign_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/copy_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/copy)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/default_recursive)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/init_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move_noexcept)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/move)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/range_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size_value_alloc)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.cons/size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.iter/before_begin)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.iter/iterators)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/clear)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/emplace_after)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/emplace_front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_const)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_rv)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/pop_front)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_const)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/push_front_rv)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/resize_size)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/merge)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/merge_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/remove_if)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/remove)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/reverse)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/sort)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/sort_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_flist)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_one)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/splice_after_range)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/unique)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.ops/unique_pred)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/equal)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/member_swap)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/non_member_swap)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/relational)\n$(call gen-test, containers/sequences/forwardlist/forwardlist.spec/swap_noexcept)\n$(call gen-test, containers/sequences/forwardlist/max_size)\n$(call gen-test, containers/sequences/forwardlist/types)\n$(call gen-test, containers/sequences/forwardlist/version)\n$(call gen-test, containers/sequences/list/db_back)\n$(call gen-test, containers/sequences/list/db_cback)\n$(call gen-test, containers/sequences/list/db_cfront)\n$(call gen-test, containers/sequences/list/db_front)\n$(call gen-test, containers/sequences/list/db_iterators_6)\n$(call gen-test, containers/sequences/list/db_iterators_7)\n$(call gen-test, containers/sequences/list/db_iterators_8)\n$(call gen-test, containers/sequences/list/db_iterators_9)\n$(call gen-test, containers/sequences/list/iterators)\n$(call gen-test, containers/sequences/list/list.capacity/resize_size)\n$(call gen-test, containers/sequences/list/list.capacity/resize_size_value)\n$(call gen-test, containers/sequences/list/list.cons/assign_copy)\n$(call gen-test, containers/sequences/list/list.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/assign_move)\n$(call gen-test, containers/sequences/list/list.cons/copy_alloc)\n$(call gen-test, containers/sequences/list/list.cons/copy)\n$(call gen-test, containers/sequences/list/list.cons/default_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/default)\n$(call gen-test, containers/sequences/list/list.cons/default_stack_alloc)\n$(call gen-test, containers/sequences/list/list.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/list/list.cons/initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/input_iterator)\n$(call gen-test, containers/sequences/list/list.cons/move_alloc)\n$(call gen-test, containers/sequences/list/list.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/move_noexcept)\n$(call gen-test, containers/sequences/list/list.cons/move)\n$(call gen-test, containers/sequences/list/list.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/list/list.cons/size_type)\n$(call gen-test, containers/sequences/list/list.cons/size_value_alloc)\n$(call gen-test, containers/sequences/list/list.modifiers/clear)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace_back)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace_front)\n$(call gen-test, containers/sequences/list/list.modifiers/emplace)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_db1)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_db2)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/erase_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_rvalue)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_size_value)\n$(call gen-test, containers/sequences/list/list.modifiers/insert_iter_value)\n$(call gen-test, containers/sequences/list/list.modifiers/pop_back)\n$(call gen-test, containers/sequences/list/list.modifiers/pop_front)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back)\n$(call gen-test, containers/sequences/list/list.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front_exception_safety)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front)\n$(call gen-test, containers/sequences/list/list.modifiers/push_front_rvalue)\n$(call gen-test, containers/sequences/list/list.ops/merge_comp)\n$(call gen-test, containers/sequences/list/list.ops/merge)\n$(call gen-test, containers/sequences/list/list.ops/remove_if)\n$(call gen-test, containers/sequences/list/list.ops/remove)\n$(call gen-test, containers/sequences/list/list.ops/reverse)\n$(call gen-test, containers/sequences/list/list.ops/sort_comp)\n$(call gen-test, containers/sequences/list/list.ops/sort)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list_iter_iter)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list_iter)\n$(call gen-test, containers/sequences/list/list.ops/splice_pos_list)\n$(call gen-test, containers/sequences/list/list.ops/unique)\n$(call gen-test, containers/sequences/list/list.ops/unique_pred)\n$(call gen-test, containers/sequences/list/list.special/db_swap_1)\n$(call gen-test, containers/sequences/list/list.special/swap_noexcept)\n$(call gen-test, containers/sequences/list/list.special/swap)\n$(call gen-test, containers/sequences/list/types)\n$(call gen-test, containers/sequences/list/version)\n$(call gen-test, containers/sequences/nothing_to_do)\n$(call gen-test, containers/sequences/vector.bool/assign_copy)\n$(call gen-test, containers/sequences/vector.bool/assign_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/assign_move)\n$(call gen-test, containers/sequences/vector.bool/capacity)\n$(call gen-test, containers/sequences/vector.bool/construct_default)\n$(call gen-test, containers/sequences/vector.bool/construct_iter_iter_alloc)\n$(call gen-test, containers/sequences/vector.bool/construct_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/construct_size)\n$(call gen-test, containers/sequences/vector.bool/construct_size_value_alloc)\n$(call gen-test, containers/sequences/vector.bool/construct_size_value)\n$(call gen-test, containers/sequences/vector.bool/copy_alloc)\n$(call gen-test, containers/sequences/vector.bool/copy)\n$(call gen-test, containers/sequences/vector.bool/default_noexcept)\n$(call gen-test, containers/sequences/vector.bool/dtor_noexcept)\n$(call gen-test, containers/sequences/vector.bool/emplace_back)\n$(call gen-test, containers/sequences/vector.bool/emplace)\n$(call gen-test, containers/sequences/vector.bool/erase_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/erase_iter)\n$(call gen-test, containers/sequences/vector.bool/find)\n$(call gen-test, containers/sequences/vector.bool/initializer_list_alloc)\n$(call gen-test, containers/sequences/vector.bool/initializer_list)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_size_value)\n$(call gen-test, containers/sequences/vector.bool/insert_iter_value)\n$(call gen-test, containers/sequences/vector.bool/iterators)\n$(call gen-test, containers/sequences/vector.bool/move_alloc)\n$(call gen-test, containers/sequences/vector.bool/move_assign_noexcept)\n$(call gen-test, containers/sequences/vector.bool/move_noexcept)\n$(call gen-test, containers/sequences/vector.bool/move)\n$(call gen-test, containers/sequences/vector.bool/op_equal_initializer_list)\n$(call gen-test, containers/sequences/vector.bool/push_back)\n$(call gen-test, containers/sequences/vector.bool/reserve)\n$(call gen-test, containers/sequences/vector.bool/resize_size)\n$(call gen-test, containers/sequences/vector.bool/resize_size_value)\n$(call gen-test, containers/sequences/vector.bool/shrink_to_fit)\n$(call gen-test, containers/sequences/vector.bool/swap_noexcept)\n$(call gen-test, containers/sequences/vector.bool/swap)\n$(call gen-test, containers/sequences/vector.bool/types)\n$(call gen-test, containers/sequences/vector.bool/vector_bool)\n$(call gen-test, containers/sequences/vector/asan)\n$(call gen-test, containers/sequences/vector/const_value_type)\n$(call gen-test, containers/sequences/vector/db_back)\n$(call gen-test, containers/sequences/vector/db_cback)\n$(call gen-test, containers/sequences/vector/db_cfront)\n$(call gen-test, containers/sequences/vector/db_cindex)\n$(call gen-test, containers/sequences/vector/db_front)\n$(call gen-test, containers/sequences/vector/db_index)\n$(call gen-test, containers/sequences/vector/db_iterators_2)\n$(call gen-test, containers/sequences/vector/db_iterators_3)\n$(call gen-test, containers/sequences/vector/db_iterators_4)\n$(call gen-test, containers/sequences/vector/db_iterators_5)\n$(call gen-test, containers/sequences/vector/db_iterators_6)\n$(call gen-test, containers/sequences/vector/db_iterators_7)\n$(call gen-test, containers/sequences/vector/db_iterators_8)\n$(call gen-test, containers/sequences/vector/iterators)\n$(call gen-test, containers/sequences/vector/types)\n$(call gen-test, containers/sequences/vector/vector.capacity/capacity)\n$(call gen-test, containers/sequences/vector/vector.capacity/reserve)\n$(call gen-test, containers/sequences/vector/vector.capacity/resize_size)\n$(call gen-test, containers/sequences/vector/vector.capacity/resize_size_value)\n$(call gen-test, containers/sequences/vector/vector.capacity/shrink_to_fit)\n$(call gen-test, containers/sequences/vector/vector.capacity/swap)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_copy)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.cons/assign_move)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_default)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_iter_iter_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size_value_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/construct_size_value)\n$(call gen-test, containers/sequences/vector/vector.cons/copy_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/copy)\n$(call gen-test, containers/sequences/vector/vector.cons/default_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/default.recursive)\n$(call gen-test, containers/sequences/vector/vector.cons/dtor_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/initializer_list_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/initializer_list)\n$(call gen-test, containers/sequences/vector/vector.cons/move_alloc)\n$(call gen-test, containers/sequences/vector/vector.cons/move_assign_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/move_noexcept)\n$(call gen-test, containers/sequences/vector/vector.cons/move)\n$(call gen-test, containers/sequences/vector/vector.cons/op_equal_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.data/data_const)\n$(call gen-test, containers/sequences/vector/vector.data/data)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace_extra)\n$(call gen-test, containers/sequences/vector/vector.modifiers/emplace)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_db1)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_db2)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/erase_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_initializer_list)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_iter_iter)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_rvalue)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_size_value)\n$(call gen-test, containers/sequences/vector/vector.modifiers/insert_iter_value)\n$(call gen-test, containers/sequences/vector/vector.modifiers/pop_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back_exception_safety)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back)\n$(call gen-test, containers/sequences/vector/vector.modifiers/push_back_rvalue)\n$(call gen-test, containers/sequences/vector/vector.special/db_swap_1)\n$(call gen-test, containers/sequences/vector/vector.special/swap_noexcept)\n$(call gen-test, containers/sequences/vector/vector.special/swap)\n$(call gen-test, containers/sequences/vector/version)\n$(call gen-test, containers/unord/next_prime)\n$(call gen-test, containers/unord/unord.map/bucket_count)\n$(call gen-test, containers/unord/unord.map/bucket)\n$(call gen-test, containers/unord/unord.map/bucket_size)\n$(call gen-test, containers/unord/unord.map/compare)\n$(call gen-test, containers/unord/unord.map/count)\n$(call gen-test, containers/unord/unord.map/db_iterators_7)\n$(call gen-test, containers/unord/unord.map/db_iterators_8)\n$(call gen-test, containers/unord/unord.map/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.map/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.map/eq)\n$(call gen-test, containers/unord/unord.map/equal_range_const)\n$(call gen-test, containers/unord/unord.map/equal_range_non_const)\n$(call gen-test, containers/unord/unord.map/find_const)\n$(call gen-test, containers/unord/unord.map/find_non_const)\n$(call gen-test, containers/unord/unord.map/iterators)\n$(call gen-test, containers/unord/unord.map/load_factor)\n$(call gen-test, containers/unord/unord.map/local_iterators)\n$(call gen-test, containers/unord/unord.map/max_bucket_count)\n$(call gen-test, containers/unord/unord.map/max_load_factor)\n$(call gen-test, containers/unord/unord.map/max_size)\n$(call gen-test, containers/unord/unord.map/rehash)\n$(call gen-test, containers/unord/unord.map/reserve)\n$(call gen-test, containers/unord/unord.map/swap_member)\n$(call gen-test, containers/unord/unord.map/types)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/clear)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/emplace_hint)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/emplace)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_const_iter)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_db1)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_db2)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_key)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/erase_range)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_init)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_range)\n$(call gen-test, containers/unord/unord.map/unorder.map.modifiers/insert_rvalue)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/copy)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/default)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/init_size)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/move)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/range_size)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.map/unord.map.cnstr/size)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/at)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/index)\n$(call gen-test, containers/unord/unord.map/unord.map.elem/index_tuple)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.map/unord.map.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.map/version)\n$(call gen-test, containers/unord/unord.multimap/bucket_count)\n$(call gen-test, containers/unord/unord.multimap/bucket)\n$(call gen-test, containers/unord/unord.multimap/bucket_size)\n$(call gen-test, containers/unord/unord.multimap/count)\n$(call gen-test, containers/unord/unord.multimap/db_iterators_7)\n$(call gen-test, containers/unord/unord.multimap/db_iterators_8)\n$(call gen-test, containers/unord/unord.multimap/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.multimap/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.multimap/eq)\n$(call gen-test, containers/unord/unord.multimap/equal_range_const)\n$(call gen-test, containers/unord/unord.multimap/equal_range_non_const)\n$(call gen-test, containers/unord/unord.multimap/find_const)\n$(call gen-test, containers/unord/unord.multimap/find_non_const)\n$(call gen-test, containers/unord/unord.multimap/iterators)\n$(call gen-test, containers/unord/unord.multimap/load_factor)\n$(call gen-test, containers/unord/unord.multimap/local_iterators)\n$(call gen-test, containers/unord/unord.multimap/max_bucket_count)\n$(call gen-test, containers/unord/unord.multimap/max_load_factor)\n$(call gen-test, containers/unord/unord.multimap/max_size)\n$(call gen-test, containers/unord/unord.multimap/rehash)\n$(call gen-test, containers/unord/unord.multimap/reserve)\n$(call gen-test, containers/unord/unord.multimap/scary)\n$(call gen-test, containers/unord/unord.multimap/swap_member)\n$(call gen-test, containers/unord/unord.multimap/types)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/copy)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/default)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/init_size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/move)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/range_size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.cnstr/size)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/clear)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/emplace)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_const_iter)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_db1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_db2)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_key)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/erase_range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_init)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_range)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.modifiers/insert_rvalue)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.multimap/unord.multimap.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.multiset/bucket_count)\n$(call gen-test, containers/unord/unord.multiset/bucket)\n$(call gen-test, containers/unord/unord.multiset/bucket_size)\n$(call gen-test, containers/unord/unord.multiset/clear)\n$(call gen-test, containers/unord/unord.multiset/count)\n$(call gen-test, containers/unord/unord.multiset/db_iterators_7)\n$(call gen-test, containers/unord/unord.multiset/db_iterators_8)\n$(call gen-test, containers/unord/unord.multiset/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.multiset/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.multiset/emplace_hint)\n$(call gen-test, containers/unord/unord.multiset/emplace)\n$(call gen-test, containers/unord/unord.multiset/eq)\n$(call gen-test, containers/unord/unord.multiset/equal_range_const)\n$(call gen-test, containers/unord/unord.multiset/equal_range_non_const)\n$(call gen-test, containers/unord/unord.multiset/erase_const_iter)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_db1)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_db2)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.multiset/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.multiset/erase_key)\n$(call gen-test, containers/unord/unord.multiset/erase_range)\n$(call gen-test, containers/unord/unord.multiset/find_const)\n$(call gen-test, containers/unord/unord.multiset/find_non_const)\n$(call gen-test, containers/unord/unord.multiset/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.multiset/insert_init)\n$(call gen-test, containers/unord/unord.multiset/insert_range)\n$(call gen-test, containers/unord/unord.multiset/insert_rvalue)\n$(call gen-test, containers/unord/unord.multiset/iterators)\n$(call gen-test, containers/unord/unord.multiset/load_factor)\n$(call gen-test, containers/unord/unord.multiset/local_iterators)\n$(call gen-test, containers/unord/unord.multiset/max_bucket_count)\n$(call gen-test, containers/unord/unord.multiset/max_load_factor)\n$(call gen-test, containers/unord/unord.multiset/max_size)\n$(call gen-test, containers/unord/unord.multiset/rehash)\n$(call gen-test, containers/unord/unord.multiset/reserve)\n$(call gen-test, containers/unord/unord.multiset/scary)\n$(call gen-test, containers/unord/unord.multiset/swap_member)\n$(call gen-test, containers/unord/unord.multiset/types)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/copy)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/default)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/init_size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/move)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/range_size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.cnstr/size)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.multiset/unord.multiset.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.set/bucket_count)\n$(call gen-test, containers/unord/unord.set/bucket)\n$(call gen-test, containers/unord/unord.set/bucket_size)\n$(call gen-test, containers/unord/unord.set/clear)\n$(call gen-test, containers/unord/unord.set/count)\n$(call gen-test, containers/unord/unord.set/db_iterators_7)\n$(call gen-test, containers/unord/unord.set/db_iterators_8)\n$(call gen-test, containers/unord/unord.set/db_local_iterators_7)\n$(call gen-test, containers/unord/unord.set/db_local_iterators_8)\n$(call gen-test, containers/unord/unord.set/emplace_hint)\n$(call gen-test, containers/unord/unord.set/emplace)\n$(call gen-test, containers/unord/unord.set/eq)\n$(call gen-test, containers/unord/unord.set/equal_range_const)\n$(call gen-test, containers/unord/unord.set/equal_range_non_const)\n$(call gen-test, containers/unord/unord.set/erase_const_iter)\n$(call gen-test, containers/unord/unord.set/erase_iter_db1)\n$(call gen-test, containers/unord/unord.set/erase_iter_db2)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db1)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db2)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db3)\n$(call gen-test, containers/unord/unord.set/erase_iter_iter_db4)\n$(call gen-test, containers/unord/unord.set/erase_key)\n$(call gen-test, containers/unord/unord.set/erase_range)\n$(call gen-test, containers/unord/unord.set/find_const)\n$(call gen-test, containers/unord/unord.set/find_non_const)\n$(call gen-test, containers/unord/unord.set/insert_const_lvalue)\n$(call gen-test, containers/unord/unord.set/insert_hint_const_lvalue)\n$(call gen-test, containers/unord/unord.set/insert_hint_rvalue)\n$(call gen-test, containers/unord/unord.set/insert_init)\n$(call gen-test, containers/unord/unord.set/insert_range)\n$(call gen-test, containers/unord/unord.set/insert_rvalue)\n$(call gen-test, containers/unord/unord.set/iterators)\n$(call gen-test, containers/unord/unord.set/load_factor)\n$(call gen-test, containers/unord/unord.set/local_iterators)\n$(call gen-test, containers/unord/unord.set/max_bucket_count)\n$(call gen-test, containers/unord/unord.set/max_load_factor)\n$(call gen-test, containers/unord/unord.set/max_size)\n$(call gen-test, containers/unord/unord.set/rehash)\n$(call gen-test, containers/unord/unord.set/reserve)\n$(call gen-test, containers/unord/unord.set/swap_member)\n$(call gen-test, containers/unord/unord.set/types)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_copy)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_init)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/assign_move)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/copy_alloc)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/copy)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/default_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/default)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/dtor_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/init_size)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_alloc)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_assign_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/move)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/range_size)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash_equal_allocator)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash_equal)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size_hash)\n$(call gen-test, containers/unord/unord.set/unord.set.cnstr/size)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/db_swap_1)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/swap_noexcept)\n$(call gen-test, containers/unord/unord.set/unord.set.swap/swap_non_member)\n$(call gen-test, containers/unord/unord.set/version)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/assignment)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/convert_assignment)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/convert)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/copy)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.cons/pointer)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/assign_from_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_from_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_to_auto_ptr)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.conv/convert_to_auto_ptr_ref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/arrow)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/deref)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/release)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/auto.ptr.members/reset)\n$(call gen-test, depr/depr.auto.ptr/auto.ptr/element_type)\n$(call gen-test, depr/depr.auto.ptr/nothing_to_do)\n$(call gen-test, depr/depr.c.headers/assert_h)\n$(call gen-test, depr/depr.c.headers/ciso646)\n$(call gen-test, depr/depr.c.headers/complex.h)\n$(call gen-test, depr/depr.c.headers/ctype_h)\n$(call gen-test, depr/depr.c.headers/errno_h)\n$(call gen-test, depr/depr.c.headers/fenv_h)\n$(call gen-test, depr/depr.c.headers/float_h)\n$(call gen-test, depr/depr.c.headers/inttypes_h)\n$(call gen-test, depr/depr.c.headers/iso646_h)\n$(call gen-test, depr/depr.c.headers/limits_h)\n$(call gen-test, depr/depr.c.headers/locale_h)\n$(call gen-test, depr/depr.c.headers/math_h)\n$(call gen-test, depr/depr.c.headers/setjmp_h)\n$(call gen-test, depr/depr.c.headers/signal_h)\n$(call gen-test, depr/depr.c.headers/stdarg_h)\n$(call gen-test, depr/depr.c.headers/stdbool_h)\n$(call gen-test, depr/depr.c.headers/stddef_h)\n$(call gen-test, depr/depr.c.headers/stdint_h)\n$(call gen-test, depr/depr.c.headers/stdio_h)\n$(call gen-test, depr/depr.c.headers/stdlib_h)\n$(call gen-test, depr/depr.c.headers/string_h)\n$(call gen-test, depr/depr.c.headers/tgmath_h)\n$(call gen-test, depr/depr.c.headers/time_h)\n$(call gen-test, depr/depr.c.headers/uchar_h)\n$(call gen-test, depr/depr.c.headers/wchar_h)\n$(call gen-test, depr/depr.c.headers/wctype_h)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/pointer_to_binary_function)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/pointer_to_unary_function)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/ptr_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.function.pointer.adaptors/ptr_fun2)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun1_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/const_mem_fun_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun1_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref1)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_ref_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/depr.member.pointer.adaptors/mem_fun_t)\n$(call gen-test, depr/depr.function.objects/depr.adaptors/nothing_to_do)\n$(call gen-test, depr/depr.function.objects/depr.base/binary_function)\n$(call gen-test, depr/depr.function.objects/depr.base/unary_function)\n$(call gen-test, depr/depr.function.objects/nothing_to_do)\n$(call gen-test, depr/depr.ios.members/io_state)\n$(call gen-test, depr/depr.ios.members/open_mode)\n$(call gen-test, depr/depr.ios.members/seek_dir)\n$(call gen-test, depr/depr.ios.members/streamoff)\n$(call gen-test, depr/depr.ios.members/streampos)\n$(call gen-test, depr/depr.lib.binders/depr.lib.bind.1st/bind1st)\n$(call gen-test, depr/depr.lib.binders/depr.lib.bind.2nd/bind2nd)\n$(call gen-test, depr/depr.lib.binders/depr.lib.binder.1st/binder1st)\n$(call gen-test, depr/depr.lib.binders/depr.lib.binder.2nd/binder2nd)\n$(call gen-test, depr/depr.lib.binders/nothing_to_do)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/ccp)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/ccp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/cp)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.cons/cp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/depr.istrstream.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.istrstream/types)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons/cp_size_mode)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/depr.ostrstream.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.ostrstream/types)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/ccp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cp_size_cp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cscp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/cucp_size)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/custom_alloc)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/scp_size_scp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.cons/ucp_size_ucp)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.members/str)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/overflow)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/pbackfail)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/seekoff)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/seekpos)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/setbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/depr.strstreambuf.virtuals/underflow)\n$(call gen-test, depr/depr.str.strstreams/depr.strstreambuf/types)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.cons/cp_size_mode)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.cons/default)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.dest/rdbuf)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/freeze)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/pcount)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/depr.strstream.oper/str)\n$(call gen-test, depr/depr.str.strstreams/depr.strstream/types)\n$(call gen-test, depr/depr.str.strstreams/version)\n$(call gen-test, depr/exception.unexpected/nothing_to_do)\n$(call gen-test, depr/exception.unexpected/set.unexpected/get_unexpected)\n$(call gen-test, depr/exception.unexpected/set.unexpected/set_unexpected)\n$(call gen-test, depr/exception.unexpected/unexpected.handler/unexpected_handler)\n$(call gen-test, depr/exception.unexpected/unexpected/unexpected)\n$(call gen-test, depr/nothing_to_do)\n$(call gen-test, diagnostics/assertions/cassert)\n$(call gen-test, diagnostics/diagnostics.general/nothing_to_do)\n$(call gen-test, diagnostics/errno/cerrno)\n$(call gen-test, diagnostics/nothing_to_do)\n$(call gen-test, diagnostics/std.exceptions/domain.error/domain_error)\n$(call gen-test, diagnostics/std.exceptions/invalid.argument/invalid_argument)\n$(call gen-test, diagnostics/std.exceptions/length.error/length_error)\n$(call gen-test, diagnostics/std.exceptions/logic.error/logic_error)\n$(call gen-test, diagnostics/std.exceptions/out.of.range/out_of_range)\n$(call gen-test, diagnostics/std.exceptions/overflow.error/overflow_error)\n$(call gen-test, diagnostics/std.exceptions/range.error/range_error)\n$(call gen-test, diagnostics/std.exceptions/runtime.error/runtime_error)\n$(call gen-test, diagnostics/std.exceptions/underflow.error/underflow_error)\n$(call gen-test, diagnostics/std.exceptions/version)\n$(call gen-test, diagnostics/syserr/errc)\n$(call gen-test, diagnostics/syserr/syserr.compare/eq_error_code_error_code)\n$(call gen-test, diagnostics/syserr/syserr.errcat/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.derived/message)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/default_ctor)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/eq)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.nonvirtuals/neq)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.overview/error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/default_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/equivalent_error_code_int)\n$(call gen-test, diagnostics/syserr/syserr.errcat/syserr.errcat.virtuals/equivalent_int_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcode/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/default)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/ErrorCodeEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.constructors/int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/assign)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/clear)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.modifiers/ErrorCodeEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/make_error_code)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.nonmembers/stream_inserter)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/bool)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/category)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/default_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/message)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.observers/value)\n$(call gen-test, diagnostics/syserr/syserr.errcode/syserr.errcode.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/default)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/ErrorConditionEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.constructors/int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/assign)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/clear)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.modifiers/ErrorConditionEnum)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.nonmembers/lt)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.nonmembers/make_error_condition)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/bool)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/category)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/message)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.observers/value)\n$(call gen-test, diagnostics/syserr/syserr.errcondition/syserr.errcondition.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.hash/error_code)\n$(call gen-test, diagnostics/syserr/syserr.syserr/nothing_to_do)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_const_char_pointer)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_const_char_pointer)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string)\n$(call gen-test, diagnostics/syserr/syserr.syserr/syserr.syserr.overview/nothing_to_do)\n$(call gen-test, diagnostics/syserr/version)\n$(call gen-test, extensions/hash/specializations)\n$(call gen-test, extensions/nothing_to_do)\n$(call gen-test, input.output/file.streams/c.files/cinttypes)\n$(call gen-test, input.output/file.streams/c.files/cstdio)\n$(call gen-test, input.output/file.streams/c.files/version_ccstdio)\n$(call gen-test, input.output/file.streams/c.files/version_cinttypes)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/filebuf/types)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/overflow)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/pbackfail)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/seekoff)\n$(call gen-test, input.output/file.streams/fstreams/filebuf.virtuals/underflow)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/fstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/fstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/fstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/fstream/types)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/ifstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/ifstream/types)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/member_swap)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/move_assign)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.assign/nonmember_swap)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/default)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/move)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/pointer)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.cons/string)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/close)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/open_pointer)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/open_string)\n$(call gen-test, input.output/file.streams/fstreams/ofstream.members/rdbuf)\n$(call gen-test, input.output/file.streams/fstreams/ofstream/types)\n$(call gen-test, input.output/file.streams/fstreams/version)\n$(call gen-test, input.output/file.streams/nothing_to_do)\n$(call gen-test, input.output/input.output.general/nothing_to_do)\n$(call gen-test, input.output/iostream.format/ext.manip/get_money)\n$(call gen-test, input.output/iostream.format/ext.manip/get_time)\n$(call gen-test, input.output/iostream.format/ext.manip/put_money)\n$(call gen-test, input.output/iostream.format/ext.manip/put_time)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.cons/move)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/iostream.dest/nothing_to_do)\n$(call gen-test, input.output/iostream.format/input.streams/iostreamclass/types)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/basic_ios)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/ios_base)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/istream)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/signed_char)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/signed_char_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/unsigned_char)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/unsigned_char_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream_extractors/wchar_t_pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/bool)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/double)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/float)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/int)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long_double)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/pointer)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/short)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_int)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_long_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_long)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.arithmetic/unsigned_short)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/istream.formatted.reqmts/tested_elsewhere)\n$(call gen-test, input.output/iostream.format/input.streams/istream.formatted/nothing_to_do)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.cons/move)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream/istream_sentry/ctor)\n$(call gen-test, input.output/iostream.format/input.streams/istream.manip/ws)\n$(call gen-test, input.output/iostream.format/input.streams/istream.rvalue/rvalue)\n$(call gen-test, input.output/iostream.format/input.streams/istream/types)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/getline_pointer_size_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/getline_pointer_size)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_pointer_size)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_streambuf_chart)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/get_streambuf)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/ignore)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/peek)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/putback)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/read)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/readsome)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/seekg_off)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/seekg)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/sync)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/tellg)\n$(call gen-test, input.output/iostream.format/input.streams/istream.unformatted/unget)\n$(call gen-test, input.output/iostream.format/input.streams/version)\n$(call gen-test, input.output/iostream.format/nothing_to_do)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.assign/member_swap)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.assign/move_assign)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.cons/move)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.cons/streambuf)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/nothing_to_do)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.formatted.reqmts/tested_elsewhere)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/bool)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/double)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/float)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/int)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long_double)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/short)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_int)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_long_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_long)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/unsigned_short)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/basic_ios)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_to_wide)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/char_to_wide_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/CharT)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/CharT_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/signed_char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/signed_char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/unsigned_char)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.character/unsigned_char_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/ios_base)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/ostream)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/streambuf)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/endl)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/ends)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.manip/flush)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.rvalue/CharT_pointer)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/seekp2)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/seekp)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.seeks/tellp)\n$(call gen-test, input.output/iostream.format/output.streams/ostream_sentry/construct)\n$(call gen-test, input.output/iostream.format/output.streams/ostream_sentry/destruct)\n$(call gen-test, input.output/iostream.format/output.streams/ostream/types)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/flush)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/put)\n$(call gen-test, input.output/iostream.format/output.streams/ostream.unformatted/write)\n$(call gen-test, input.output/iostream.format/output.streams/version)\n$(call gen-test, input.output/iostream.format/quoted.manip/quoted)\n$(call gen-test, input.output/iostream.format/std.manip/resetiosflags)\n$(call gen-test, input.output/iostream.format/std.manip/setbase)\n$(call gen-test, input.output/iostream.format/std.manip/setfill)\n$(call gen-test, input.output/iostream.format/std.manip/setiosflags)\n$(call gen-test, input.output/iostream.format/std.manip/setprecision)\n$(call gen-test, input.output/iostream.format/std.manip/setw)\n$(call gen-test, input.output/iostream.format/std.manip/version)\n$(call gen-test, input.output/iostream.forward/iosfwd)\n$(call gen-test, input.output/iostream.forward/version)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cerr)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cin)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/clog)\n$(call gen-test, input.output/iostream.objects/narrow.stream.objects/cout)\n$(call gen-test, input.output/iostream.objects/version)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcerr)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcin)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wclog)\n$(call gen-test, input.output/iostream.objects/wide.stream.objects/wcout)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.members/state)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/addition)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/ctor_int)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/difference)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/eq_int)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/offset)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/streamsize)\n$(call gen-test, input.output/iostreams.base/fpos/fpos.operations/subtraction)\n$(call gen-test, input.output/iostreams.base/fpos/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/flags_fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/flags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/precision)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/precision_streamsize)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/setf_fmtflags_mask)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/setf_fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/unsetf_mask)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/width)\n$(call gen-test, input.output/iostreams.base/ios.base/fmtflags.state/width_streamsize)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.callback/register_callback)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.cons/dtor)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.locales/getloc)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.locales/imbue)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/iword)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/pword)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.base.storage/xalloc)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.members.static/sync_with_stdio)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_failure/ctor_char_pointer_error_code)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_failure/ctor_string_error_code)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_fmtflags/fmtflags)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_Init/tested_elsewhere)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_iostate/iostate)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_openmode/openmode)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/ios_seekdir/seekdir)\n$(call gen-test, input.output/iostreams.base/ios.base/ios.types/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios.base/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.cons/ctor_streambuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/copyfmt)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/fill_char_type)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/fill)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/imbue)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/move)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/narow)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/rdbuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/rdbuf_streambuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/set_rdbuf)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/swap)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/tie_ostream)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/tie)\n$(call gen-test, input.output/iostreams.base/ios/basic.ios.members/widen)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/bad)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/bool)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/clear)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/eof)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/exceptions_iostate)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/exceptions)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/fail)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/good)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/not)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/rdstate)\n$(call gen-test, input.output/iostreams.base/ios/iostate.flags/setstate)\n$(call gen-test, input.output/iostreams.base/ios/types)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/internal)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/left)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/adjustfield.manip/right)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/dec)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/hex)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/basefield.manip/oct)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/iostream_category)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/make_error_code)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/error.reporting/make_error_condition)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/defaultfloat)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/fixed)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/hexfloat)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/floatfield.manip/scientific)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/boolalpha)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noboolalpha)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowbase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowpoint)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noshowpos)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/noskipws)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/nounitbuf)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/nouppercase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showbase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showpoint)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/showpos)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/skipws)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/unitbuf)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/fmtflags.manip/uppercase)\n$(call gen-test, input.output/iostreams.base/std.ios.manip/nothing_to_do)\n$(call gen-test, input.output/iostreams.base/stream.types/streamoff)\n$(call gen-test, input.output/iostreams.base/stream.types/streamsize)\n$(call gen-test, input.output/iostreams.base/version)\n$(call gen-test, input.output/iostreams.requirements/iostream.limits.imbue/tested_elsewhere)\n$(call gen-test, input.output/iostreams.requirements/iostreams.limits.pos/nothing_to_do)\n$(call gen-test, input.output/iostreams.requirements/iostreams.threadsafety/nothing_to_do)\n$(call gen-test, input.output/iostreams.requirements/nothing_to_do)\n$(call gen-test, input.output/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf.reqts/tested_elsewhere)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.cons/copy)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.cons/default)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubseekoff)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubseekpos)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubsetbuf)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.buffer/pubsync)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.locales/locales)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/in_avail)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sbumpc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sgetc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/sgetn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.get/snextc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.pback/sputbackc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.pback/sungetc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.put/sputc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.members/streambuf.pub.put/sputn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.assign/assign)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.assign/swap)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.get.area/gbump)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.get.area/setg)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.put.area/pbump)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.protected/streambuf.put.area/setp)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.buffer/tested_elsewhere)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/showmanyc)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/uflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/underflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.get/xsgetn)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.locales/nothing_to_do)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.pback/pbackfail)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/overflow)\n$(call gen-test, input.output/stream.buffers/streambuf/streambuf.virtuals/streambuf.virt.put/xsputn)\n$(call gen-test, input.output/stream.buffers/streambuf/types)\n$(call gen-test, input.output/stream.buffers/version)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/move)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/default)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/move)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.cons/string)\n$(call gen-test, input.output/string.streams/istringstream/istringstream.members/str)\n$(call gen-test, input.output/string.streams/istringstream/types)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/move)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/default)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/move)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.cons/string)\n$(call gen-test, input.output/string.streams/ostringstream/ostringstream.members/str)\n$(call gen-test, input.output/string.streams/ostringstream/types)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/member_swap)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/move)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/default)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/move)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.cons/string)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.members/str)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/overflow)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/pbackfail)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/seekoff)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/seekpos)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/setbuf)\n$(call gen-test, input.output/string.streams/stringbuf/stringbuf.virtuals/underflow)\n$(call gen-test, input.output/string.streams/stringbuf/types)\n$(call gen-test, input.output/string.streams/stringstream.cons/default)\n$(call gen-test, input.output/string.streams/stringstream.cons/move2)\n$(call gen-test, input.output/string.streams/stringstream.cons/move)\n$(call gen-test, input.output/string.streams/stringstream.cons/string)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/member_swap)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/move)\n$(call gen-test, input.output/string.streams/stringstream.cons/stringstream.assign/nonmember_swap)\n$(call gen-test, input.output/string.streams/stringstream.members/str)\n$(call gen-test, input.output/string.streams/stringstream/types)\n$(call gen-test, input.output/string.streams/version)\n$(call gen-test, iterators/iterator.primitives/iterator.basic/iterator)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/advance)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/distance)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/next)\n$(call gen-test, iterators/iterator.primitives/iterator.operations/prev)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/const_pointer)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/empty)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/iterator)\n$(call gen-test, iterators/iterator.primitives/iterator.traits/pointer)\n$(call gen-test, iterators/iterator.primitives/nothing_to_do)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/input_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/output_iterator_tag)\n$(call gen-test, iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag)\n$(call gen-test, iterators/iterator.range/begin-end)\n$(call gen-test, iterators/iterator.requirements/bidirectional.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/forward.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/input.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/iterator.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/iterator.requirements.general/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/output.iterators/nothing_to_do)\n$(call gen-test, iterators/iterator.requirements/random.access.iterators/nothing_to_do)\n$(call gen-test, iterators/iterators.general/nothing_to_do)\n$(call gen-test, iterators/iterator.synopsis/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.cons/container)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/back.insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/back.insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.cons/container)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/front.insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/front.insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iterator/types)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/inserter/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.cons/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op_astrk/test)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.opEQ/lv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.opEQ/rv_value)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/insert.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/insert.iterators/insert.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/insert.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iterator/types)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/make_move_iterator)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/minus)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.nonmember/plus)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_eq)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gte)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gt)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_lte)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_lt)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_neq)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/convert)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/default)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.const/iter)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.conv/tested_elsewhere)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.decr/post)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.decr/pre)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.+EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.opEQ/move_iterator)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.incr/post)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.incr/pre)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.index/difference_type)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.ref/op_arrow)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.star/op_star)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/move.iter.requirements/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/move.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iterator/types)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/nothing_to_do)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/default)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/iter)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.cons/reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.conv/tested_elsewhere)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opdiff/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op-EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op+EQ/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opEQEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opEQ/reverse_iterator)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op!EQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgtEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opgt/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opindex/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opltEQ/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.oplt/test)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op--/post)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op++/post)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op--/pre)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op++/pre)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opsum/difference_type)\n$(call gen-test, iterators/predef.iterators/reverse.iterators/reverse.iter.requirements/nothing_to_do)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/istream)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/proxy)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/streambuf)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_equal/equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/arrow)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/post_increment)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op_astrk/pre_increment)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op++/dereference)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_opEQEQ/equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_op!EQ/not_equal)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator_proxy/proxy)\n$(call gen-test, iterators/stream.iterators/istreambuf.iterator/types)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/copy)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/default)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.cons/istream)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/dereference)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/equal)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/post_increment)\n$(call gen-test, iterators/stream.iterators/istream.iterator/istream.iterator.ops/pre_increment)\n$(call gen-test, iterators/stream.iterators/istream.iterator/types)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_array)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/begin_non_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_array)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_const)\n$(call gen-test, iterators/stream.iterators/iterator.range/end_non_const)\n$(call gen-test, iterators/stream.iterators/nothing_to_do)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons/ostream)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.cons/streambuf)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/assign_c)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/deref)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/increment)\n$(call gen-test, iterators/stream.iterators/ostreambuf.iterator/types)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/copy)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delem)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/assign_t)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/dereference)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/increment)\n$(call gen-test, iterators/stream.iterators/ostream.iterator/types)\n$(call gen-test, iterators/version)\n$(call gen-test, language.support/cstdint/cstdint.syn/cstdint)\n$(call gen-test, language.support/cstdint/version)\n$(call gen-test, language.support/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/alloc.errors/bad.alloc/bad_alloc)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.badlength/bad_array_length)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.badlength/bad_array_new_length)\n$(call gen-test, language.support/support.dynamic/alloc.errors/new.handler/new_handler)\n$(call gen-test, language.support/support.dynamic/alloc.errors/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/alloc.errors/set.new.handler/get_new_handler)\n$(call gen-test, language.support/support.dynamic/alloc.errors/set.new.handler/set_new_handler)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.array/new_array_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.dataraces/not_testable)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.placement/new_array)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.placement/new)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_nothrow)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new)\n$(call gen-test, language.support/support.dynamic/new.delete/new.delete.single/new_replace)\n$(call gen-test, language.support/support.dynamic/new.delete/nothing_to_do)\n$(call gen-test, language.support/support.dynamic/version)\n$(call gen-test, language.support/support.exception/bad.exception/bad_exception)\n$(call gen-test, language.support/support.exception/exception/exception)\n$(call gen-test, language.support/support.exception/exception.terminate/nothing_to_do)\n$(call gen-test, language.support/support.exception/exception.terminate/set.terminate/get_terminate)\n$(call gen-test, language.support/support.exception/exception.terminate/set.terminate/set_terminate)\n$(call gen-test, language.support/support.exception/exception.terminate/terminate.handler/terminate_handler)\n$(call gen-test, language.support/support.exception/exception.terminate/terminate/terminate)\n$(call gen-test, language.support/support.exception/except.nested/assign)\n$(call gen-test, language.support/support.exception/except.nested/ctor_copy)\n$(call gen-test, language.support/support.exception/except.nested/ctor_default)\n$(call gen-test, language.support/support.exception/except.nested/rethrow_if_nested)\n$(call gen-test, language.support/support.exception/except.nested/rethrow_nested)\n$(call gen-test, language.support/support.exception/except.nested/throw_with_nested)\n$(call gen-test, language.support/support.exception/propagation/current_exception)\n$(call gen-test, language.support/support.exception/propagation/exception_ptr)\n$(call gen-test, language.support/support.exception/propagation/make_exception_ptr)\n$(call gen-test, language.support/support.exception/propagation/rethrow_exception)\n$(call gen-test, language.support/support.exception/uncaught/uncaught_exception)\n$(call gen-test, language.support/support.exception/version)\n$(call gen-test, language.support/support.general/nothing_to_do)\n$(call gen-test, language.support/support.initlist/support.initlist.access/access)\n$(call gen-test, language.support/support.initlist/support.initlist.cons/default)\n$(call gen-test, language.support/support.initlist/support.initlist.range/begin_end)\n$(call gen-test, language.support/support.initlist/types)\n$(call gen-test, language.support/support.initlist/version)\n$(call gen-test, language.support/support.limits/c.limits/cfloat)\n$(call gen-test, language.support/support.limits/c.limits/climits)\n$(call gen-test, language.support/support.limits/c.limits/version_cfloat)\n$(call gen-test, language.support/support.limits/c.limits/version_climits)\n$(call gen-test, language.support/support.limits/limits/denorm.style/check_values)\n$(call gen-test, language.support/support.limits/limits/is_specialized)\n$(call gen-test, language.support/support.limits/limits/numeric.limits/default)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/const_data_members)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/denorm_min)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/digits10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/digits)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/epsilon)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_denorm_loss)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_denorm)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_infinity)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/infinity)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_bounded)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_exact)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_iec559)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_integer)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_modulo)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/is_signed)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/lowest)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_digits10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_exponent10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max_exponent)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/max)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min_exponent10)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min_exponent)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/min)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/quiet_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/radix)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/round_error)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/round_style)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/signaling_NaN)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/tinyness_before)\n$(call gen-test, language.support/support.limits/limits/numeric.limits.members/traps)\n$(call gen-test, language.support/support.limits/limits/numeric.special/nothing_to_do)\n$(call gen-test, language.support/support.limits/limits/round.style/check_values)\n$(call gen-test, language.support/support.limits/limits/version)\n$(call gen-test, language.support/support.limits/nothing_to_do)\n$(call gen-test, language.support/support.rtti/bad.cast/bad_cast)\n$(call gen-test, language.support/support.rtti/bad.typeid/bad_typeid)\n$(call gen-test, language.support/support.rtti/type.info/type_info_hash)\n$(call gen-test, language.support/support.rtti/type.info/type_info)\n$(call gen-test, language.support/support.rtti/version)\n$(call gen-test, language.support/support.runtime/csetjmp)\n$(call gen-test, language.support/support.runtime/csignal)\n$(call gen-test, language.support/support.runtime/cstdarg)\n$(call gen-test, language.support/support.runtime/cstdbool)\n$(call gen-test, language.support/support.runtime/cstdlib)\n$(call gen-test, language.support/support.runtime/ctime)\n$(call gen-test, language.support/support.runtime/version_csetjmp)\n$(call gen-test, language.support/support.runtime/version_csignal)\n$(call gen-test, language.support/support.runtime/version_cstdarg)\n$(call gen-test, language.support/support.runtime/version_cstdbool)\n$(call gen-test, language.support/support.runtime/version_cstdlib)\n$(call gen-test, language.support/support.runtime/version_ctime)\n$(call gen-test, language.support/support.start.term/quick_exit)\n$(call gen-test, language.support/support.types/max_align_t)\n$(call gen-test, language.support/support.types/null)\n$(call gen-test, language.support/support.types/nullptr_t)\n$(call gen-test, language.support/support.types/offsetof)\n$(call gen-test, language.support/support.types/ptrdiff_t)\n$(call gen-test, language.support/support.types/size_t)\n$(call gen-test, language.support/support.types/version)\n$(call gen-test, localization/c.locales/clocale)\n$(call gen-test, localization/c.locales/version)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/compare)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/hash)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/transform)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate.byname/types)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/ctor)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/compare)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/hash)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.members/transform)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/locale.collate.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.collate/locale.collate/types)\n$(call gen-test, localization/locale.categories/category.collate/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.ctype/ctype_base)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.dtor/dtor)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/ctor)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/table)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.members/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/facet.ctype.special/types)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt.byname/ctor_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/codecvt_base)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/ctor_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/utf_sanity_check)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_always_noconv)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_encoding)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_in)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_max_length)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_out)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/wchar_t_unshift)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char16_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char32_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_char)\n$(call gen-test, localization/locale.categories/category.ctype/locale.codecvt/types_wchar_t)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/types)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype.byname/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/ctor)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/is_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/is_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/narrow_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/narrow_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/scan_is)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/scan_not)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/tolower_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/tolower_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/toupper_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/toupper_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/widen_1)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.members/widen_many)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/locale.ctype.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.ctype/locale.ctype/types)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages.byname/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/ctor)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/locale.messages.members/not_testable)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/locale.messages.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/messages_base)\n$(call gen-test, localization/locale.categories/category.messages/locale.messages/types)\n$(call gen-test, localization/locale.categories/category.messages/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_zh_CN)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_string_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/locale.money.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.get/types)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/frac_digits)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/grouping)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/negative_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/positive_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/curr_symbol)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/decimal_point)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/frac_digits)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/grouping)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/negative_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/neg_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/pos_format)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/positive_sign)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/thousands_sep)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/money_base)\n$(call gen-test, localization/locale.categories/category.monetary/locale.moneypunct/types)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/ctor)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_string_en_US)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/locale.money.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.monetary/locale.money.put/types)\n$(call gen-test, localization/locale.categories/category.monetary/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/ctor)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_bool)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_pointer)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_unsigned_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_unsigned_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.numeric/locale.nm.put/types)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/ctor)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_bool)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_double)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_pointer)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_int)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_long_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_long)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_unsigned_short)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/test_min_max)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/facet.num.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.numeric/locale.num.get/types)\n$(call gen-test, localization/locale.categories/category.numeric/nothing_to_do)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/date_order)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/date_order_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_date)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_date_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_monthname)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_one)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_one_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_time)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_time_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_weekday)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_weekday_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_year)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get.byname/get_year_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/ctor)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/date_order)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_date)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_date_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_many)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_one)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_time)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_time_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday_wide)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_year)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/locale.time.get.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/time_base)\n$(call gen-test, localization/locale.categories/category.time/locale.time.get/types)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put.byname/put1)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/ctor)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.members/put1)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.members/put2)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/locale.time.put.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/category.time/locale.time.put/types)\n$(call gen-test, localization/locale.categories/category.time/nothing_to_do)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/decimal_point)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/ctor)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/decimal_point)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/falsename)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/grouping)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/thousands_sep)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.members/truename)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/facet.numpunct.virtuals/tested_elsewhere)\n$(call gen-test, localization/locale.categories/facet.numpunct/locale.numpunct/types)\n$(call gen-test, localization/locale.categories/facet.numpunct/nothing_to_do)\n$(call gen-test, localization/locale.categories/facets.examples/nothing_to_do)\n$(call gen-test, localization/locale.categories/__scan_keyword)\n$(call gen-test, localization/locales/locale.convenience/classification/isalnum)\n$(call gen-test, localization/locales/locale.convenience/classification/isalpha)\n$(call gen-test, localization/locales/locale.convenience/classification/iscntrl)\n$(call gen-test, localization/locales/locale.convenience/classification/isdigit)\n$(call gen-test, localization/locales/locale.convenience/classification/isgraph)\n$(call gen-test, localization/locales/locale.convenience/classification/islower)\n$(call gen-test, localization/locales/locale.convenience/classification/isprint)\n$(call gen-test, localization/locales/locale.convenience/classification/ispunct)\n$(call gen-test, localization/locales/locale.convenience/classification/isspace)\n$(call gen-test, localization/locales/locale.convenience/classification/isupper)\n$(call gen-test, localization/locales/locale.convenience/classification/isxdigit)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/ctor)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/overflow)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/pbackfail)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/rdbuf)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/seekoff)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/test)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.buffer/underflow)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.character/tolower)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.character/toupper)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/converted)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_codecvt)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_codecvt_state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/ctor_err_string)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/from_bytes)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/state)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/to_bytes)\n$(call gen-test, localization/locales/locale.convenience/conversions/conversions.string/types)\n$(call gen-test, localization/locales/locale.convenience/conversions/nothing_to_do)\n$(call gen-test, localization/locales/locale.convenience/nothing_to_do)\n$(call gen-test, localization/locales/locale.global.templates/has_facet)\n$(call gen-test, localization/locales/locale.global.templates/use_facet)\n$(call gen-test, localization/locales/locale/locale.cons/assign)\n$(call gen-test, localization/locales/locale/locale.cons/char_pointer)\n$(call gen-test, localization/locales/locale/locale.cons/copy)\n$(call gen-test, localization/locales/locale/locale.cons/default)\n$(call gen-test, localization/locales/locale/locale.cons/locale_char_pointer_cat)\n$(call gen-test, localization/locales/locale/locale.cons/locale_facetptr)\n$(call gen-test, localization/locales/locale/locale.cons/locale_locale_cat)\n$(call gen-test, localization/locales/locale/locale.cons/locale_string_cat)\n$(call gen-test, localization/locales/locale/locale.cons/string)\n$(call gen-test, localization/locales/locale/locale.members/combine)\n$(call gen-test, localization/locales/locale/locale.members/name)\n$(call gen-test, localization/locales/locale/locale.operators/compare)\n$(call gen-test, localization/locales/locale/locale.operators/eq)\n$(call gen-test, localization/locales/locale/locale.statics/classic)\n$(call gen-test, localization/locales/locale/locale.statics/global)\n$(call gen-test, localization/locales/locale/locale.types/locale.category/category)\n$(call gen-test, localization/locales/locale/locale.types/locale.facet/facet)\n$(call gen-test, localization/locales/locale/locale.types/locale.id/id)\n$(call gen-test, localization/locales/locale/locale.types/nothing_to_do)\n$(call gen-test, localization/locales/locale/nothing_to_do)\n$(call gen-test, localization/locales/nothing_to_do)\n$(call gen-test, localization/locale.stdcvt/codecvt_mode)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf16_unshift)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_unshift)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_always_noconv)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_encoding)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_in)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_max_length)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_out)\n$(call gen-test, localization/locale.stdcvt/codecvt_utf8_utf16_unshift)\n$(call gen-test, localization/locale.stdcvt/version)\n$(call gen-test, localization/locale.syn/nothing_to_do)\n$(call gen-test, localization/localization.general/nothing_to_do)\n$(call gen-test, localization/version)\n$(call gen-test, nothing_to_do)\n$(call gen-test, numerics/cfenv/cfenv.syn/cfenv)\n$(call gen-test, numerics/cfenv/version)\n$(call gen-test, numerics/c.math/cmath)\n$(call gen-test, numerics/c.math/ctgmath)\n$(call gen-test, numerics/c.math/tgmath_h)\n$(call gen-test, numerics/c.math/version_cmath)\n$(call gen-test, numerics/complex.number/ccmplx/ccomplex)\n$(call gen-test, numerics/complex.number/cmplx.over/arg)\n$(call gen-test, numerics/complex.number/cmplx.over/conj)\n$(call gen-test, numerics/complex.number/cmplx.over/imag)\n$(call gen-test, numerics/complex.number/cmplx.over/norm)\n$(call gen-test, numerics/complex.number/cmplx.over/pow)\n$(call gen-test, numerics/complex.number/cmplx.over/proj)\n$(call gen-test, numerics/complex.number/cmplx.over/real)\n$(call gen-test, numerics/complex.number/complex.literals/literals1)\n$(call gen-test, numerics/complex.number/complex.literals/literals2)\n$(call gen-test, numerics/complex.number/complex.literals/literals)\n$(call gen-test, numerics/complex.number/complex.member.ops/assignment_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/assignment_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/divide_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/divide_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/minus_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/minus_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/plus_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/plus_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.member.ops/times_equal_complex)\n$(call gen-test, numerics/complex.number/complex.member.ops/times_equal_scalar)\n$(call gen-test, numerics/complex.number/complex.members/construct)\n$(call gen-test, numerics/complex.number/complex.members/real_imag)\n$(call gen-test, numerics/complex.number/complex.ops/complex_divide_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_divide_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_equals_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_minus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_minus_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_not_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_not_equals_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_plus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_plus_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/complex_times_complex)\n$(call gen-test, numerics/complex.number/complex.ops/complex_times_scalar)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_divide_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_minus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_not_equals_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_plus_complex)\n$(call gen-test, numerics/complex.number/complex.ops/scalar_times_complex)\n$(call gen-test, numerics/complex.number/complex.ops/stream_input)\n$(call gen-test, numerics/complex.number/complex.ops/stream_output)\n$(call gen-test, numerics/complex.number/complex.ops/unary_minus)\n$(call gen-test, numerics/complex.number/complex.ops/unary_plus)\n$(call gen-test, numerics/complex.number/complex.special/double_float_explicit)\n$(call gen-test, numerics/complex.number/complex.special/double_float_implicit)\n$(call gen-test, numerics/complex.number/complex.special/double_long_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/float_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/float_long_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_double_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_double_implicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_float_explicit)\n$(call gen-test, numerics/complex.number/complex.special/long_double_float_implicit)\n$(call gen-test, numerics/complex.number/complex.synopsis/nothing_to_do)\n$(call gen-test, numerics/complex.number/complex.transcendentals/acosh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/acos)\n$(call gen-test, numerics/complex.number/complex.transcendentals/asinh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/asin)\n$(call gen-test, numerics/complex.number/complex.transcendentals/atanh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/atan)\n$(call gen-test, numerics/complex.number/complex.transcendentals/cosh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/cos)\n$(call gen-test, numerics/complex.number/complex.transcendentals/exp)\n$(call gen-test, numerics/complex.number/complex.transcendentals/log10)\n$(call gen-test, numerics/complex.number/complex.transcendentals/log)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_complex_complex)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_complex_scalar)\n$(call gen-test, numerics/complex.number/complex.transcendentals/pow_scalar_complex)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sinh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sin)\n$(call gen-test, numerics/complex.number/complex.transcendentals/sqrt)\n$(call gen-test, numerics/complex.number/complex.transcendentals/tanh)\n$(call gen-test, numerics/complex.number/complex.transcendentals/tan)\n$(call gen-test, numerics/complex.number/complex/types)\n$(call gen-test, numerics/complex.number/complex.value.ops/abs)\n$(call gen-test, numerics/complex.number/complex.value.ops/arg)\n$(call gen-test, numerics/complex.number/complex.value.ops/conj)\n$(call gen-test, numerics/complex.number/complex.value.ops/imag)\n$(call gen-test, numerics/complex.number/complex.value.ops/norm)\n$(call gen-test, numerics/complex.number/complex.value.ops/polar)\n$(call gen-test, numerics/complex.number/complex.value.ops/proj)\n$(call gen-test, numerics/complex.number/complex.value.ops/real)\n$(call gen-test, numerics/complex.number/layout)\n$(call gen-test, numerics/complex.number/version)\n$(call gen-test, numerics/nothing_to_do)\n$(call gen-test, numerics/numarray/class.gslice/gslice.access/tested_elsewhere)\n$(call gen-test, numerics/numarray/class.gslice/gslice.cons/default)\n$(call gen-test, numerics/numarray/class.gslice/gslice.cons/start_size_stride)\n$(call gen-test, numerics/numarray/class.gslice/nothing_to_do)\n$(call gen-test, numerics/numarray/class.slice/cons.slice/default)\n$(call gen-test, numerics/numarray/class.slice/cons.slice/start_size_stride)\n$(call gen-test, numerics/numarray/class.slice/nothing_to_do)\n$(call gen-test, numerics/numarray/class.slice/slice.access/tested_elsewhere)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.assign/gslice_array)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.gslice.array/gslice.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.gslice.array/types)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.assign/indirect_array)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.indirect.array/indirect.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.indirect.array/types)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.assign/mask_array)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.assign/valarray)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/and)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/or)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.mask.array/mask.array.fill/assign_value)\n$(call gen-test, numerics/numarray/template.mask.array/types)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.assign/slice_array)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.assign/valarray)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/addition)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/and)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/divide)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/modulo)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/multiply)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/or)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/shift_left)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/shift_right)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/subtraction)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.comp.assign/xor)\n$(call gen-test, numerics/numarray/template.slice.array/slice.arr.fill/assign_value)\n$(call gen-test, numerics/numarray/template.slice.array/types)\n$(call gen-test, numerics/numarray/template.valarray/types)\n$(call gen-test, numerics/numarray/template.valarray/valarray.access/access)\n$(call gen-test, numerics/numarray/template.valarray/valarray.access/const_access)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/copy_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/gslice_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/indirect_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/initializer_list_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/mask_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/move_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/slice_array_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.assign/value_assign)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/and_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/and_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/divide_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/divide_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/minus_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/minus_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/modulo_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/modulo_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/or_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/or_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/plus_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/plus_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_left_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_left_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_right_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/shift_right_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/times_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/times_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/xor_valarray)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cassign/xor_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/copy)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/default)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/gslice_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/indirect_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/initializer_list)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/mask_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/move)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/pointer_size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/slice_array)\n$(call gen-test, numerics/numarray/template.valarray/valarray.cons/value_size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/apply_cref)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/apply_value)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/cshift)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/max)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/min)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/resize)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/shift)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/size)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/sum)\n$(call gen-test, numerics/numarray/template.valarray/valarray.members/swap)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/gslice_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/gslice_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/indirect_array_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/indirect_array_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/slice_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/slice_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/valarray_bool_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.sub/valarray_bool_non_const)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/bit_not)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/negate)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/not)\n$(call gen-test, numerics/numarray/template.valarray/valarray.unary/plus)\n$(call gen-test, numerics/numarray/valarray.nonmembers/nothing_to_do)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/and_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/divide_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/minus_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/modulo_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/or_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/plus_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_left_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/shift_right_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/times_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.binary/xor_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/and_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/greater_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/less_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/not_equal_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.comparison/or_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.special/swap)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/abs_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/acos_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/asin_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/atan_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/cosh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/cos_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/exp_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/log10_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/log_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_value)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/pow_value_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sinh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sin_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/sqrt_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/tanh_valarray)\n$(call gen-test, numerics/numarray/valarray.nonmembers/valarray.transcend/tan_valarray)\n$(call gen-test, numerics/numarray/valarray.range/begin_const)\n$(call gen-test, numerics/numarray/valarray.range/begin_non_const)\n$(call gen-test, numerics/numarray/valarray.range/end_const)\n$(call gen-test, numerics/numarray/valarray.range/end_non_const)\n$(call gen-test, numerics/numarray/valarray.syn/nothing_to_do)\n$(call gen-test, numerics/numarray/version)\n$(call gen-test, numerics/numeric.ops/accumulate/accumulate_op)\n$(call gen-test, numerics/numeric.ops/accumulate/accumulate)\n$(call gen-test, numerics/numeric.ops/adjacent.difference/adjacent_difference_op)\n$(call gen-test, numerics/numeric.ops/adjacent.difference/adjacent_difference)\n$(call gen-test, numerics/numeric.ops/inner.product/inner_product_comp)\n$(call gen-test, numerics/numeric.ops/inner.product/inner_product)\n$(call gen-test, numerics/numeric.ops/numeric.iota/iota)\n$(call gen-test, numerics/numeric.ops/partial.sum/partial_sum_op)\n$(call gen-test, numerics/numeric.ops/partial.sum/partial_sum)\n$(call gen-test, numerics/numeric.ops/version)\n$(call gen-test, numerics/numeric.requirements/nothing_to_do)\n$(call gen-test, numerics/numerics.general/nothing_to_do)\n$(call gen-test, numerics/rand/nothing_to_do)\n$(call gen-test, numerics/rand/rand.adapt/nothing_to_do)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.disc/values)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.ibits/values)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/assign)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_engine_copy)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_engine_move)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/ctor_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/default)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/discard)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/eval)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/io)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/seed_result_type)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/seed_sseq)\n$(call gen-test, numerics/rand/rand.adapt/rand.adapt.shuf/values)\n$(call gen-test, numerics/rand/rand.device/ctor)\n$(call gen-test, numerics/rand/rand.device/entropy)\n$(call gen-test, numerics/rand/rand.device/eval)\n$(call gen-test, numerics/rand/rand.dis/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/ctor_int_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/ctor_int_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.cauchy/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.f/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/ctor_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/ctor_double_double)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_init)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_init)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.discrete/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_default)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_init_func)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/nothing_to_do)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/ctor_int_int)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/ctor_int_int)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/ctor_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/get_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/io)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/max)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/min)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_assign)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_copy)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_ctor)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_eq)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/param_types)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/set_param)\n$(call gen-test, numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/types)\n$(call gen-test, numerics/rand/rand.eng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.lcong/values)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.mers/values)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/assign)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/copy)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/ctor_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/ctor_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/default)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/discard)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/eval)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/io)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/seed_result_type)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/seed_sseq)\n$(call gen-test, numerics/rand/rand.eng/rand.eng.sub/values)\n$(call gen-test, numerics/rand/rand.predef/default_random_engine)\n$(call gen-test, numerics/rand/rand.predef/knuth_b)\n$(call gen-test, numerics/rand/rand.predef/minstd_rand0)\n$(call gen-test, numerics/rand/rand.predef/minstd_rand)\n$(call gen-test, numerics/rand/rand.predef/mt19937_64)\n$(call gen-test, numerics/rand/rand.predef/mt19937)\n$(call gen-test, numerics/rand/rand.predef/ranlux24_base)\n$(call gen-test, numerics/rand/rand.predef/ranlux24)\n$(call gen-test, numerics/rand/rand.predef/ranlux48_base)\n$(call gen-test, numerics/rand/rand.predef/ranlux48)\n$(call gen-test, numerics/rand/rand.req/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.adapt/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.dst/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.eng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.genl/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.seedseq/nothing_to_do)\n$(call gen-test, numerics/rand/rand.req/rand.req.urng/nothing_to_do)\n$(call gen-test, numerics/rand/rand.synopsis/version)\n$(call gen-test, numerics/rand/rand.util/nothing_to_do)\n$(call gen-test, numerics/rand/rand.util/rand.util.canonical/generate_canonical)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/default)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/generate)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/initializer_list)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/iterator)\n$(call gen-test, numerics/rand/rand.util/rand.util.seedseq/types)\n$(call gen-test, re/nothing_to_do)\n$(call gen-test, re/re.alg/nothing_to_do)\n$(call gen-test, re/re.alg/re.alg.match/awk)\n$(call gen-test, re/re.alg/re.alg.match/basic)\n$(call gen-test, re/re.alg/re.alg.match/ecma)\n$(call gen-test, re/re.alg/re.alg.match/egrep)\n$(call gen-test, re/re.alg/re.alg.match/extended)\n$(call gen-test, re/re.alg/re.alg.match/grep)\n$(call gen-test, re/re.alg/re.alg.match/lookahead_capture)\n$(call gen-test, re/re.alg/re.alg.match/parse_curly_brackets)\n$(call gen-test, re/re.alg/re.alg.replace/test1)\n$(call gen-test, re/re.alg/re.alg.replace/test2)\n$(call gen-test, re/re.alg/re.alg.replace/test3)\n$(call gen-test, re/re.alg/re.alg.replace/test4)\n$(call gen-test, re/re.alg/re.alg.replace/test5)\n$(call gen-test, re/re.alg/re.alg.replace/test6)\n$(call gen-test, re/re.alg/re.alg.search/awk)\n$(call gen-test, re/re.alg/re.alg.search/backup)\n$(call gen-test, re/re.alg/re.alg.search/basic)\n$(call gen-test, re/re.alg/re.alg.search/ecma)\n$(call gen-test, re/re.alg/re.alg.search/egrep)\n$(call gen-test, re/re.alg/re.alg.search/extended)\n$(call gen-test, re/re.alg/re.alg.search/grep)\n$(call gen-test, re/re.alg/re.alg.search/lookahead)\n$(call gen-test, re/re.alg/re.alg.search/no_update_pos)\n$(call gen-test, re/re.alg/re.except/nothing_to_do)\n$(call gen-test, re/re.badexp/regex_error)\n$(call gen-test, re/re.const/nothing_to_do)\n$(call gen-test, re/re.const/re.err/error_type)\n$(call gen-test, re/re.const/re.matchflag/match_flag_type)\n$(call gen-test, re/re.const/re.synopt/syntax_option_type)\n$(call gen-test, re/re.def/defns.regex.collating.element/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.finite.state.machine/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.format.specifier/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.matched/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.primary.equivalence.class/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.regular.expression/nothing_to_do)\n$(call gen-test, re/re.def/defns.regex.subexpression/nothing_to_do)\n$(call gen-test, re/re.def/nothing_to_do)\n$(call gen-test, re/re.general/nothing_to_do)\n$(call gen-test, re/re.grammar/nothing_to_do)\n$(call gen-test, re/re.iter/nothing_to_do)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.cnstr/cnstr)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.cnstr/default)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.comp/tested_elsewhere)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.deref/deref)\n$(call gen-test, re/re.iter/re.regiter/re.regiter.incr/post)\n$(call gen-test, re/re.iter/re.regiter/types)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/array)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/default)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/init)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/int)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.cnstr/vector)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.comp/equal)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.deref/deref)\n$(call gen-test, re/re.iter/re.tokiter/re.tokiter.incr/post)\n$(call gen-test, re/re.iter/re.tokiter/types)\n$(call gen-test, re/re.regex/re.regex.assign/assign.il)\n$(call gen-test, re/re.regex/re.regex.assign/assign_iter_iter_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign)\n$(call gen-test, re/re.regex/re.regex.assign/assign_ptr_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign_ptr_size_flag)\n$(call gen-test, re/re.regex/re.regex.assign/assign_string_flag)\n$(call gen-test, re/re.regex/re.regex.assign/copy)\n$(call gen-test, re/re.regex/re.regex.assign/il)\n$(call gen-test, re/re.regex/re.regex.assign/ptr)\n$(call gen-test, re/re.regex/re.regex.assign/string)\n$(call gen-test, re/re.regex/re.regex.const/constants)\n$(call gen-test, re/re.regex/re.regex.construct/awk_oct)\n$(call gen-test, re/re.regex/re.regex.construct/bad_escape)\n$(call gen-test, re/re.regex/re.regex.construct/copy)\n$(call gen-test, re/re.regex/re.regex.construct/default)\n$(call gen-test, re/re.regex/re.regex.construct/il_flg)\n$(call gen-test, re/re.regex/re.regex.construct/iter_iter_flg)\n$(call gen-test, re/re.regex/re.regex.construct/iter_iter)\n$(call gen-test, re/re.regex/re.regex.construct/ptr_flg)\n$(call gen-test, re/re.regex/re.regex.construct/ptr)\n$(call gen-test, re/re.regex/re.regex.construct/ptr_size_flg)\n$(call gen-test, re/re.regex/re.regex.construct/string_flg)\n$(call gen-test, re/re.regex/re.regex.construct/string)\n$(call gen-test, re/re.regex/re.regex.locale/imbue)\n$(call gen-test, re/re.regex/re.regex.nonmemb/nothing_to_do)\n$(call gen-test, re/re.regex/re.regex.nonmemb/re.regex.nmswap/swap)\n$(call gen-test, re/re.regex/re.regex.operations/tested_elsewhere)\n$(call gen-test, re/re.regex/re.regex.swap/swap)\n$(call gen-test, re/re.regex/types)\n$(call gen-test, re/re.req/nothing_to_do)\n$(call gen-test, re/re.results/re.results.acc/begin_end)\n$(call gen-test, re/re.results/re.results.acc/cbegin_cend)\n$(call gen-test, re/re.results/re.results.acc/index)\n$(call gen-test, re/re.results/re.results.acc/length)\n$(call gen-test, re/re.results/re.results.acc/position)\n$(call gen-test, re/re.results/re.results.acc/prefix)\n$(call gen-test, re/re.results/re.results.acc/str)\n$(call gen-test, re/re.results/re.results.acc/suffix)\n$(call gen-test, re/re.results/re.results.all/get_allocator)\n$(call gen-test, re/re.results/re.results.const/allocator)\n$(call gen-test, re/re.results/re.results.const/default)\n$(call gen-test, re/re.results/re.results.form/form1)\n$(call gen-test, re/re.results/re.results.form/form2)\n$(call gen-test, re/re.results/re.results.form/form3)\n$(call gen-test, re/re.results/re.results.form/form4)\n$(call gen-test, re/re.results/re.results.nonmember/equal)\n$(call gen-test, re/re.results/re.results.size/empty)\n$(call gen-test, re/re.results/re.results.size/max_size)\n$(call gen-test, re/re.results/re.results.state/ready)\n$(call gen-test, re/re.results/re.results.swap/member_swap)\n$(call gen-test, re/re.results/re.results.swap/non_member_swap)\n$(call gen-test, re/re.results/types)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_string_type)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_sub_match)\n$(call gen-test, re/re.submatch/re.submatch.members/compare_value_type_ptr)\n$(call gen-test, re/re.submatch/re.submatch.members/default)\n$(call gen-test, re/re.submatch/re.submatch.members/length)\n$(call gen-test, re/re.submatch/re.submatch.members/operator_string)\n$(call gen-test, re/re.submatch/re.submatch.members/str)\n$(call gen-test, re/re.submatch/re.submatch.op/compare)\n$(call gen-test, re/re.submatch/re.submatch.op/stream)\n$(call gen-test, re/re.submatch/types)\n$(call gen-test, re/re.syn/cmatch)\n$(call gen-test, re/re.syn/cregex_iterator)\n$(call gen-test, re/re.syn/cregex_token_iterator)\n$(call gen-test, re/re.syn/csub_match)\n$(call gen-test, re/re.syn/regex)\n$(call gen-test, re/re.syn/smatch)\n$(call gen-test, re/re.syn/sregex_iterator)\n$(call gen-test, re/re.syn/sregex_token_iterator)\n$(call gen-test, re/re.syn/ssub_match)\n$(call gen-test, re/re.syn/wcmatch)\n$(call gen-test, re/re.syn/wcregex_iterator)\n$(call gen-test, re/re.syn/wcregex_token_iterator)\n$(call gen-test, re/re.syn/wcsub_match)\n$(call gen-test, re/re.syn/wregex)\n$(call gen-test, re/re.syn/wsmatch)\n$(call gen-test, re/re.syn/wsregex_iterator)\n$(call gen-test, re/re.syn/wsregex_token_iterator)\n$(call gen-test, re/re.syn/wssub_match)\n$(call gen-test, re/re.traits/default)\n$(call gen-test, re/re.traits/getloc)\n$(call gen-test, re/re.traits/imbue)\n$(call gen-test, re/re.traits/isctype)\n$(call gen-test, re/re.traits/length)\n$(call gen-test, re/re.traits/lookup_classname)\n$(call gen-test, re/re.traits/lookup_collatename)\n$(call gen-test, re/re.traits/lookup_collatename.xlocale)\n$(call gen-test, re/re.traits/transform)\n$(call gen-test, re/re.traits/transform_primary)\n$(call gen-test, re/re.traits/translate_nocase)\n$(call gen-test, re/re.traits/translate)\n$(call gen-test, re/re.traits/types)\n$(call gen-test, re/re.traits/value)\n$(call gen-test, strings/basic.string.hash/strings)\n$(call gen-test, strings/basic.string.literals/literal1)\n$(call gen-test, strings/basic.string.literals/literal2)\n$(call gen-test, strings/basic.string.literals/literal3)\n$(call gen-test, strings/basic.string.literals/literal)\n$(call gen-test, strings/basic.string/string.access/at)\n$(call gen-test, strings/basic.string/string.access/back)\n$(call gen-test, strings/basic.string/string.access/db_back)\n$(call gen-test, strings/basic.string/string.access/db_cback)\n$(call gen-test, strings/basic.string/string.access/db_cfront)\n$(call gen-test, strings/basic.string/string.access/db_cindex)\n$(call gen-test, strings/basic.string/string.access/db_front)\n$(call gen-test, strings/basic.string/string.access/db_index)\n$(call gen-test, strings/basic.string/string.access/front)\n$(call gen-test, strings/basic.string/string.access/index)\n$(call gen-test, strings/basic.string/string.capacity/capacity)\n$(call gen-test, strings/basic.string/string.capacity/clear)\n$(call gen-test, strings/basic.string/string.capacity/empty)\n$(call gen-test, strings/basic.string/string.capacity/length)\n$(call gen-test, strings/basic.string/string.capacity/max_size)\n$(call gen-test, strings/basic.string/string.capacity/reserve)\n$(call gen-test, strings/basic.string/string.capacity/resize_size_char)\n$(call gen-test, strings/basic.string/string.capacity/resize_size)\n$(call gen-test, strings/basic.string/string.capacity/shrink_to_fit)\n$(call gen-test, strings/basic.string/string.capacity/size)\n$(call gen-test, strings/basic.string/string.cons/alloc)\n$(call gen-test, strings/basic.string/string.cons/char_assignment)\n$(call gen-test, strings/basic.string/string.cons/copy_alloc)\n$(call gen-test, strings/basic.string/string.cons/copy_assignment)\n$(call gen-test, strings/basic.string/string.cons/copy)\n$(call gen-test, strings/basic.string/string.cons/default_noexcept)\n$(call gen-test, strings/basic.string/string.cons/dtor_noexcept)\n$(call gen-test, strings/basic.string/string.cons/initializer_list_assignment)\n$(call gen-test, strings/basic.string/string.cons/initializer_list)\n$(call gen-test, strings/basic.string/string.cons/iter_alloc)\n$(call gen-test, strings/basic.string/string.cons/move_alloc)\n$(call gen-test, strings/basic.string/string.cons/move_assignment)\n$(call gen-test, strings/basic.string/string.cons/move_assign_noexcept)\n$(call gen-test, strings/basic.string/string.cons/move_noexcept)\n$(call gen-test, strings/basic.string/string.cons/move)\n$(call gen-test, strings/basic.string/string.cons/pointer_alloc)\n$(call gen-test, strings/basic.string/string.cons/pointer_assignment)\n$(call gen-test, strings/basic.string/string.cons/pointer_size_alloc)\n$(call gen-test, strings/basic.string/string.cons/size_char_alloc)\n$(call gen-test, strings/basic.string/string.cons/substr)\n$(call gen-test, strings/basic.string/string.iterators/begin)\n$(call gen-test, strings/basic.string/string.iterators/cbegin)\n$(call gen-test, strings/basic.string/string.iterators/cend)\n$(call gen-test, strings/basic.string/string.iterators/crbegin)\n$(call gen-test, strings/basic.string/string.iterators/crend)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_2)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_3)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_4)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_5)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_6)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_7)\n$(call gen-test, strings/basic.string/string.iterators/db_iterators_8)\n$(call gen-test, strings/basic.string/string.iterators/end)\n$(call gen-test, strings/basic.string/string.iterators/iterators)\n$(call gen-test, strings/basic.string/string.iterators/rbegin)\n$(call gen-test, strings/basic.string/string.iterators/rend)\n$(call gen-test, strings/basic.string/string.modifiers/nothing_to_do)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/iterator)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/push_back)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_append/string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/iterator)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/rv_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_assign/string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_copy/copy)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_db1)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_db2)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db1)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db2)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db3)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db4)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/pop_back)\n$(call gen-test, strings/basic.string/string.modifiers/string_erase/size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/iter_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_insert/size_string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/char)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_op_plus_equal/string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/iter_iter_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_pointer)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_pointer_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_size_char)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_string)\n$(call gen-test, strings/basic.string/string.modifiers/string_replace/size_size_string_size_size)\n$(call gen-test, strings/basic.string/string.modifiers/string_swap/swap)\n$(call gen-test, strings/basic.string/string.nonmembers/nothing_to_do)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_delim)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_delim_rv)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/get_line_rv)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/stream_extract)\n$(call gen-test, strings/basic.string/string.nonmembers/string.io/stream_insert)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/char_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op!EQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_operatorEQEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgtEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opgt/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_opltEQ/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_oplt/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/pointer_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_char)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_pointer)\n$(call gen-test, strings/basic.string/string.nonmembers/string_op+/string_string)\n$(call gen-test, strings/basic.string/string.nonmembers/string.special/swap_noexcept)\n$(call gen-test, strings/basic.string/string.nonmembers/string.special/swap)\n$(call gen-test, strings/basic.string/string.ops/nothing_to_do)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/c_str)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/data)\n$(call gen-test, strings/basic.string/string.ops/string.accessors/get_allocator)\n$(call gen-test, strings/basic.string/string.ops/string_compare/pointer)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_pointer)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_string)\n$(call gen-test, strings/basic.string/string.ops/string_compare/size_size_string_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_compare/string)\n$(call gen-test, strings/basic.string/string.ops/string_find/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.not.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.first.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.not.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find.last.of/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_find/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/char_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/pointer_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/pointer_size_size)\n$(call gen-test, strings/basic.string/string.ops/string_rfind/string_size)\n$(call gen-test, strings/basic.string/string.ops/string_substr/substr)\n$(call gen-test, strings/basic.string/string.require/nothing_to_do)\n$(call gen-test, strings/basic.string/types)\n$(call gen-test, strings/char.traits/char.traits.require/nothing_to_do)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.char/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/assign2)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/assign3)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/compare)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/copy)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eq_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/eq)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/find)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/length)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/lt)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/move)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/not_eof)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/to_char_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/to_int_type)\n$(call gen-test, strings/char.traits/char.traits.specializations/char.traits.specializations.wchar.t/types)\n$(call gen-test, strings/char.traits/char.traits.specializations/nothing_to_do)\n$(call gen-test, strings/char.traits/char.traits.typedefs/nothing_to_do)\n$(call gen-test, strings/char.traits/nothing_to_do)\n$(call gen-test, strings/c.strings/cctype)\n$(call gen-test, strings/c.strings/cstring)\n$(call gen-test, strings/c.strings/cuchar)\n$(call gen-test, strings/c.strings/cwchar)\n$(call gen-test, strings/c.strings/cwctype)\n$(call gen-test, strings/c.strings/version_cctype)\n$(call gen-test, strings/c.strings/version_cstring)\n$(call gen-test, strings/c.strings/version_cuchar)\n$(call gen-test, strings/c.strings/version_cwchar)\n$(call gen-test, strings/c.strings/version_cwctype)\n$(call gen-test, strings/string.classes/typedefs)\n$(call gen-test, strings/string.conversions/stod)\n$(call gen-test, strings/string.conversions/stof)\n$(call gen-test, strings/string.conversions/stoi)\n$(call gen-test, strings/string.conversions/stold)\n$(call gen-test, strings/string.conversions/stoll)\n$(call gen-test, strings/string.conversions/stol)\n$(call gen-test, strings/string.conversions/stoull)\n$(call gen-test, strings/string.conversions/stoul)\n$(call gen-test, strings/string.conversions/to_string)\n$(call gen-test, strings/string.conversions/to_wstring)\n$(call gen-test, strings/strings.general/nothing_to_do)\n$(call gen-test, strings/version)\n$(call gen-test, support/nothing_to_do)\n$(call gen-test, thread/futures/futures.async/async)\n$(call gen-test, thread/futures/futures.errors/default_error_condition)\n$(call gen-test, thread/futures/futures.errors/equivalent_error_code_int)\n$(call gen-test, thread/futures/futures.errors/equivalent_int_error_condition)\n$(call gen-test, thread/futures/futures.errors/future_category)\n$(call gen-test, thread/futures/futures.errors/make_error_code)\n$(call gen-test, thread/futures/futures.errors/make_error_condition)\n$(call gen-test, thread/futures/futures.future_error/code)\n$(call gen-test, thread/futures/futures.future_error/types)\n$(call gen-test, thread/futures/futures.future_error/what)\n$(call gen-test, thread/futures/futures.overview/future_errc)\n$(call gen-test, thread/futures/futures.overview/future_status)\n$(call gen-test, thread/futures/futures.overview/is_error_code_enum_future_errc)\n$(call gen-test, thread/futures/futures.overview/launch)\n$(call gen-test, thread/futures/futures.promise/alloc_ctor)\n$(call gen-test, thread/futures/futures.promise/default)\n$(call gen-test, thread/futures/futures.promise/dtor)\n$(call gen-test, thread/futures/futures.promise/get_future)\n$(call gen-test, thread/futures/futures.promise/move_assign)\n$(call gen-test, thread/futures/futures.promise/move_ctor)\n$(call gen-test, thread/futures/futures.promise/set_exception_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_exception)\n$(call gen-test, thread/futures/futures.promise/set_lvalue_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_lvalue)\n$(call gen-test, thread/futures/futures.promise/set_rvalue_at_thread_exit)\n$(call gen-test, thread/futures/futures.promise/set_rvalue)\n$(call gen-test, thread/futures/futures.promise/set_value_at_thread_exit_const)\n$(call gen-test, thread/futures/futures.promise/set_value_at_thread_exit_void)\n$(call gen-test, thread/futures/futures.promise/set_value_const)\n$(call gen-test, thread/futures/futures.promise/set_value_void)\n$(call gen-test, thread/futures/futures.promise/swap)\n$(call gen-test, thread/futures/futures.promise/uses_allocator)\n$(call gen-test, thread/futures/futures.shared_future/copy_assign)\n$(call gen-test, thread/futures/futures.shared_future/copy_ctor)\n$(call gen-test, thread/futures/futures.shared_future/ctor_future)\n$(call gen-test, thread/futures/futures.shared_future/default)\n$(call gen-test, thread/futures/futures.shared_future/dtor)\n$(call gen-test, thread/futures/futures.shared_future/get)\n$(call gen-test, thread/futures/futures.shared_future/move_assign)\n$(call gen-test, thread/futures/futures.shared_future/move_ctor)\n$(call gen-test, thread/futures/futures.shared_future/wait_for)\n$(call gen-test, thread/futures/futures.shared_future/wait)\n$(call gen-test, thread/futures/futures.shared_future/wait_until)\n$(call gen-test, thread/futures/futures.state/nothing_to_do)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/assign_move)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_default)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_func_alloc)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_func)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/ctor_move)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/dtor)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/get_future)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/make_ready_at_thread_exit)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/operator)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/reset)\n$(call gen-test, thread/futures/futures.tas/futures.task.members/swap)\n$(call gen-test, thread/futures/futures.tas/futures.task.nonmembers/swap)\n$(call gen-test, thread/futures/futures.tas/futures.task.nonmembers/uses_allocator)\n$(call gen-test, thread/futures/futures.tas/types)\n$(call gen-test, thread/futures/futures.unique_future/default)\n$(call gen-test, thread/futures/futures.unique_future/dtor)\n$(call gen-test, thread/futures/futures.unique_future/get)\n$(call gen-test, thread/futures/futures.unique_future/move_assign)\n$(call gen-test, thread/futures/futures.unique_future/move_ctor)\n$(call gen-test, thread/futures/futures.unique_future/share)\n$(call gen-test, thread/futures/futures.unique_future/wait_for)\n$(call gen-test, thread/futures/futures.unique_future/wait)\n$(call gen-test, thread/futures/futures.unique_future/wait_until)\n$(call gen-test, thread/futures/version)\n$(call gen-test, thread/macro)\n$(call gen-test, thread/thread.condition/cv_status)\n$(call gen-test, thread/thread.condition/notify_all_at_thread_exit)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/default)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/destructor)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/notify_all)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/notify_one)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait.exception)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for.exception)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_for_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_until)\n$(call gen-test, thread/thread.condition/thread.condition.condvarany/wait_until_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/default)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/destructor)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/native_handle)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/notify_all)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/notify_one)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_for)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_for_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_pred)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_until)\n$(call gen-test, thread/thread.condition/thread.condition.condvar/wait_until_pred)\n$(call gen-test, thread/thread.condition/version)\n$(call gen-test, thread/thread.general/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.lock.algorithm/lock)\n$(call gen-test, thread/thread.mutex/thread.lock.algorithm/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.guard/types)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/default)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_assign)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_ctor)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_defer_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/unlock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/member_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/nonmember_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/release)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/op_bool)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/owns_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.shared/types)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock)\n$(call gen-test, thread/thread.mutex/thread.lock/thread.lock.unique/types)\n$(call gen-test, thread/thread.mutex/thread.lock/types)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.general/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/native_handle)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/native_handle)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/nothing_to_do) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/default) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until) # path-change\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/default)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock)\n$(call gen-test, thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until)\n$(call gen-test, thread/thread.mutex/thread.once/nothing_to_do)\n$(call gen-test, thread/thread.mutex/thread.once/thread.once.callonce/call_once)\n$(call gen-test, thread/thread.mutex/thread.once/thread.once.onceflag/default)\n$(call gen-test, thread/thread.mutex/version)\n$(call gen-test, thread/thread.req/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.exception/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.basic/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.general/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.req/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.lockable/thread.req.lockable.timed/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.native/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.paramname/nothing_to_do)\n$(call gen-test, thread/thread.req/thread.req.timing/nothing_to_do)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.algorithm/swap)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.assign/move)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/default)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/F)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.constr/move)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.destr/dtor)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/assign)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/copy)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/default)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/eq)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/lt)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/stream)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.id/thread_id)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/detach)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/get_id)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/joinable)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/join)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/native_handle)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.member/swap)\n$(call gen-test, thread/thread.threads/thread.thread.class/thread.thread.static/hardware_concurrency)\n$(call gen-test, thread/thread.threads/thread.thread.class/types)\n$(call gen-test, thread/thread.threads/thread.thread.this/get_id)\n$(call gen-test, thread/thread.threads/thread.thread.this/sleep_for)\n$(call gen-test, thread/thread.threads/thread.thread.this/sleep_until)\n$(call gen-test, thread/thread.threads/thread.thread.this/yield)\n$(call gen-test, thread/thread.threads/version)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/allocs)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/converting_copy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/converting_move)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/copy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.cnstr/default)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/allocate_size_hint)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/allocate_size)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/construct)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/deallocate)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/destroy)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/inner_allocator)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/max_size)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/outer_allocator)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/allocator_pointers)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/inner_allocator_type)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment)\n$(call gen-test, utilities/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap)\n$(call gen-test, utilities/allocator.adaptor/scoped.adaptor.operators/eq)\n$(call gen-test, utilities/allocator.adaptor/types)\n$(call gen-test, utilities/date.time/tested_elsewhere)\n$(call gen-test, utilities/function.objects/arithmetic.operations/divides)\n$(call gen-test, utilities/function.objects/arithmetic.operations/minus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/modulus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/multiplies)\n$(call gen-test, utilities/function.objects/arithmetic.operations/negate)\n$(call gen-test, utilities/function.objects/arithmetic.operations/plus)\n$(call gen-test, utilities/function.objects/arithmetic.operations/transparent)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/copy)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.bind/nested)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder)\n$(call gen-test, utilities/function.objects/bind/func.bind/func.bind.place/placeholders)\n$(call gen-test, utilities/function.objects/bind/func.bind/nothing_to_do)\n$(call gen-test, utilities/function.objects/bind/nothing_to_do)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_and)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_not)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_or)\n$(call gen-test, utilities/function.objects/bitwise.operations/bit_xor)\n$(call gen-test, utilities/function.objects/bitwise.operations/transparent)\n$(call gen-test, utilities/function.objects/comparisons/equal_to)\n$(call gen-test, utilities/function.objects/comparisons/greater_equal)\n$(call gen-test, utilities/function.objects/comparisons/greater)\n$(call gen-test, utilities/function.objects/comparisons/less_equal)\n$(call gen-test, utilities/function.objects/comparisons/less)\n$(call gen-test, utilities/function.objects/comparisons/not_equal_to)\n$(call gen-test, utilities/function.objects/comparisons/transparent)\n$(call gen-test, utilities/function.objects/func.def/nothing_to_do)\n$(call gen-test, utilities/function.objects/func.memfn/member_data)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_const)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_const_volatile)\n$(call gen-test, utilities/function.objects/func.memfn/member_function)\n$(call gen-test, utilities/function.objects/func.memfn/member_function_volatile)\n$(call gen-test, utilities/function.objects/func.require/binary_function)\n$(call gen-test, utilities/function.objects/func.require/invoke)\n$(call gen-test, utilities/function.objects/func.require/unary_function)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_EQEQ)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type)\n$(call gen-test, utilities/function.objects/func.wrap/func.wrap.func/types)\n$(call gen-test, utilities/function.objects/func.wrap/nothing_to_do)\n$(call gen-test, utilities/function.objects/logical.operations/logical_and)\n$(call gen-test, utilities/function.objects/logical.operations/logical_not)\n$(call gen-test, utilities/function.objects/logical.operations/logical_or)\n$(call gen-test, utilities/function.objects/logical.operations/transparent)\n$(call gen-test, utilities/function.objects/negators/binary_negate)\n$(call gen-test, utilities/function.objects/negators/not1)\n$(call gen-test, utilities/function.objects/negators/not2)\n$(call gen-test, utilities/function.objects/negators/unary_negate)\n$(call gen-test, utilities/function.objects/refwrap/binary)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.access/conversion)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.assign/copy_assign)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.const/copy_ctor)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.const/type_ctor)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/cref_1)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/cref_2)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/ref_1)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.helpers/ref_2)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke)\n$(call gen-test, utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0)\n$(call gen-test, utilities/function.objects/refwrap/type)\n$(call gen-test, utilities/function.objects/refwrap/unary)\n$(call gen-test, utilities/function.objects/refwrap/weak_result)\n$(call gen-test, utilities/function.objects/unord.hash/enum)\n$(call gen-test, utilities/function.objects/unord.hash/floating)\n$(call gen-test, utilities/function.objects/unord.hash/integral)\n$(call gen-test, utilities/function.objects/unord.hash/pointer)\n$(call gen-test, utilities/function.objects/version)\n$(call gen-test, utilities/intseq/intseq.general/integer_seq)\n$(call gen-test, utilities/intseq/intseq.intseq/integer_seq)\n$(call gen-test, utilities/intseq/intseq.make/make_integer_seq)\n$(call gen-test, utilities/intseq/nothing_to_do)\n$(call gen-test, utilities/memory/allocator.tag/allocator_arg)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/allocate_hint)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/allocate)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/construct)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/deallocate)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/destroy)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/max_size)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/const_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/difference_type)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/size_type)\n$(call gen-test, utilities/memory/allocator.traits/allocator.traits.types/void_pointer)\n$(call gen-test, utilities/memory/allocator.traits/allocator_type)\n$(call gen-test, utilities/memory/allocator.traits/rebind_traits)\n$(call gen-test, utilities/memory/allocator.traits/value_type)\n$(call gen-test, utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere)\n$(call gen-test, utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator)\n$(call gen-test, utilities/memory/allocator.uses/nothing_to_do)\n$(call gen-test, utilities/memory/c.malloc/nothing_to_do)\n$(call gen-test, utilities/memory/default.allocator/allocator.globals/eq)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/address)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/allocate)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/construct)\n$(call gen-test, utilities/memory/default.allocator/allocator.members/max_size)\n$(call gen-test, utilities/memory/default.allocator/allocator_pointers)\n$(call gen-test, utilities/memory/default.allocator/allocator_types)\n$(call gen-test, utilities/memory/default.allocator/allocator_void)\n$(call gen-test, utilities/memory/pointer.traits/difference_type)\n$(call gen-test, utilities/memory/pointer.traits/element_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer)\n$(call gen-test, utilities/memory/pointer.traits/pointer_to)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.functions/pointer_to)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/difference_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/element_type)\n$(call gen-test, utilities/memory/pointer.traits/pointer.traits.types/rebind)\n$(call gen-test, utilities/memory/pointer.traits/rebind)\n$(call gen-test, utilities/memory/ptr.align/align)\n$(call gen-test, utilities/memory/specialized.algorithms/nothing_to_do)\n$(call gen-test, utilities/memory/specialized.algorithms/specialized.addressof/addressof)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n)\n$(call gen-test, utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill)\n$(call gen-test, utilities/memory/storage.iterator/raw_storag_iterator)\n$(call gen-test, utilities/memory/temporary.buffer/temporary_buffer)\n$(call gen-test, utilities/memory/unique.ptr/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.create/make_unique.array)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.create/make_unique.single)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/pointer_type)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/cmp_nullptr)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/eq)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/rel)\n$(call gen-test, utilities/memory/unique.ptr/unique.ptr.special/swap)\n$(call gen-test, utilities/memory/util.dynamic.safety/declare_no_pointers)\n$(call gen-test, utilities/memory/util.dynamic.safety/declare_reachable)\n$(call gen-test, utilities/memory/util.dynamic.safety/get_pointer_safety)\n$(call gen-test, utilities/memory/util.smartptr/nothing_to_do)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_is_lock_free)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/types)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/cmp_nullptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.io/io)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/types)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr)\n$(call gen-test, utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap)\n$(call gen-test, utilities/memory/version)\n$(call gen-test, utilities/meta/meta.hel/integral_constant)\n$(call gen-test, utilities/meta/meta.rel/is_base_of)\n$(call gen-test, utilities/meta/meta.rel/is_convertible)\n$(call gen-test, utilities/meta/meta.rel/is_same)\n$(call gen-test, utilities/meta/meta.rqmts/nothing_to_do)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.arr/remove_all_extents)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.arr/remove_extent)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_const)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_cv)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/add_volatile)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_const)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_cv)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.cv/remove_volatile)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/aligned_storage)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/aligned_union)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/common_type)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/conditional)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/decay)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/enable_if)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/result_of)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.other/underlying_type)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ptr/add_pointer)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ptr/remove_pointer)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.ref/remove_ref)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.sign/make_signed)\n$(call gen-test, utilities/meta/meta.trans/meta.trans.sign/make_unsigned)\n$(call gen-test, utilities/meta/meta.trans/nothing_to_do)\n$(call gen-test, utilities/meta/meta.type.synop/nothing_to_do)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/array)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/class)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/enum)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/floating_point)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/function)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/integral)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/lvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/member_function_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/member_object_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/nullptr)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/rvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/union)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.cat/void)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/array)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/class)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/enum)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/floating_point)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/function)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/integral)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/lvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/member_function_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/member_object_pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/pointer)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/rvalue_ref)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/union)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.comp/void)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/__has_operator_addressof)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_abstract)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_const)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_empty)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_final)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_literal_type)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_nothrow_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_pod)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_polymorphic)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_signed)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_standard_layout)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_default_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_trivial)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_unsigned)\n$(call gen-test, utilities/meta/meta.unary/meta.unary.prop/is_volatile)\n$(call gen-test, utilities/meta/meta.unary/nothing_to_do)\n$(call gen-test, utilities/meta/meta.unary.prop.query/alignment_of)\n$(call gen-test, utilities/meta/meta.unary.prop.query/extent)\n$(call gen-test, utilities/meta/meta.unary.prop.query/rank)\n$(call gen-test, utilities/meta/version)\n$(call gen-test, utilities/nothing_to_do)\n$(call gen-test, utilities/optional/optional.bad_optional_access/char_pointer)\n$(call gen-test, utilities/optional/optional.bad_optional_access/copy_assign)\n$(call gen-test, utilities/optional/optional.bad_optional_access/copy_ctor)\n$(call gen-test, utilities/optional/optional.bad_optional_access/default)\n$(call gen-test, utilities/optional/optional.bad_optional_access/derive)\n$(call gen-test, utilities/optional/optional.bad_optional_access/string)\n$(call gen-test, utilities/optional/optional.comp_with_t/equal)\n$(call gen-test, utilities/optional/optional.comp_with_t/less_than)\n$(call gen-test, utilities/optional/optional.defs/tested_elsewhere)\n$(call gen-test, utilities/optional/optional.general/nothing_to_do)\n$(call gen-test, utilities/optional/optional.hash/hash)\n$(call gen-test, utilities/optional/optional.inplace/in_place_t)\n$(call gen-test, utilities/optional/optional.nullops/eqaul)\n$(call gen-test, utilities/optional/optional.nullops/less_than)\n$(call gen-test, utilities/optional/optional.nullopt/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/assign_value)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/copy)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/emplace_initializer_list)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/emplace)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/move)\n$(call gen-test, utilities/optional/optional.object/optional.object.assign/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/const_T)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/copy)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/default)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/initializer_list)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/in_place_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/move)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/nullopt_t)\n$(call gen-test, utilities/optional/optional.object/optional.object.ctor/rvalue_T)\n$(call gen-test, utilities/optional/optional.object/optional.object.dtor/dtor)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/bool)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/dereference_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/dereference)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/op_arrow_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/op_arrow)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_or_const)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value_or)\n$(call gen-test, utilities/optional/optional.object/optional.object.observe/value)\n$(call gen-test, utilities/optional/optional.object/optional.object.swap/swap)\n$(call gen-test, utilities/optional/optional.object/types)\n$(call gen-test, utilities/optional/optional.relops/equal)\n$(call gen-test, utilities/optional/optional.relops/less_than)\n$(call gen-test, utilities/optional/optional.specalg/make_optional)\n$(call gen-test, utilities/optional/optional.specalg/swap)\n$(call gen-test, utilities/optional/optional.syn/optional_includes_initializer_list)\n$(call gen-test, utilities/optional/version)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_add)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_divide)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_multiply)\n$(call gen-test, utilities/ratio/ratio.arithmetic/ratio_subtract)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_greater_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_greater)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_less_equal)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_less)\n$(call gen-test, utilities/ratio/ratio.comparison/ratio_not_equal)\n$(call gen-test, utilities/ratio/ratio.ratio/ratio)\n$(call gen-test, utilities/ratio/ratio.si/nothing_to_do)\n$(call gen-test, utilities/ratio/typedefs)\n$(call gen-test, utilities/ratio/version)\n$(call gen-test, utilities/template.bitset/bitset.cons/char_ptr_ctor)\n$(call gen-test, utilities/template.bitset/bitset.cons/default)\n$(call gen-test, utilities/template.bitset/bitset.cons/string_ctor)\n$(call gen-test, utilities/template.bitset/bitset.cons/ull_ctor)\n$(call gen-test, utilities/template.bitset/bitset.hash/bitset)\n$(call gen-test, utilities/template.bitset/bitset.members/all)\n$(call gen-test, utilities/template.bitset/bitset.members/any)\n$(call gen-test, utilities/template.bitset/bitset.members/count)\n$(call gen-test, utilities/template.bitset/bitset.members/flip_all)\n$(call gen-test, utilities/template.bitset/bitset.members/flip_one)\n$(call gen-test, utilities/template.bitset/bitset.members/index_const)\n$(call gen-test, utilities/template.bitset/bitset.members/index)\n$(call gen-test, utilities/template.bitset/bitset.members/left_shift_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/left_shift)\n$(call gen-test, utilities/template.bitset/bitset.members/none)\n$(call gen-test, utilities/template.bitset/bitset.members/not_all)\n$(call gen-test, utilities/template.bitset/bitset.members/op_and_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_eq_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_or_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/op_xor_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/reset_all)\n$(call gen-test, utilities/template.bitset/bitset.members/reset_one)\n$(call gen-test, utilities/template.bitset/bitset.members/right_shift_eq)\n$(call gen-test, utilities/template.bitset/bitset.members/right_shift)\n$(call gen-test, utilities/template.bitset/bitset.members/set_all)\n$(call gen-test, utilities/template.bitset/bitset.members/set_one)\n$(call gen-test, utilities/template.bitset/bitset.members/size)\n$(call gen-test, utilities/template.bitset/bitset.members/test)\n$(call gen-test, utilities/template.bitset/bitset.members/to_string)\n$(call gen-test, utilities/template.bitset/bitset.members/to_ullong)\n$(call gen-test, utilities/template.bitset/bitset.members/to_ulong)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_and)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_not)\n$(call gen-test, utilities/template.bitset/bitset.operators/op_or)\n$(call gen-test, utilities/template.bitset/bitset.operators/stream_in)\n$(call gen-test, utilities/template.bitset/bitset.operators/stream_out)\n$(call gen-test, utilities/template.bitset/includes)\n$(call gen-test, utilities/template.bitset/version)\n$(call gen-test, utilities/time/hours)\n$(call gen-test, utilities/time/microseconds)\n$(call gen-test, utilities/time/milliseconds)\n$(call gen-test, utilities/time/minutes)\n$(call gen-test, utilities/time/nanoseconds)\n$(call gen-test, utilities/time/seconds)\n$(call gen-test, utilities/time/time.clock/nothing_to_do)\n$(call gen-test, utilities/time/time.clock.req/nothing_to_do)\n$(call gen-test, utilities/time/time.clock/time.clock.hires/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.hires/now)\n$(call gen-test, utilities/time/time.clock/time.clock.steady/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.steady/now)\n$(call gen-test, utilities/time/time.clock/time.clock.system/consistency)\n$(call gen-test, utilities/time/time.clock/time.clock.system/from_time_t)\n$(call gen-test, utilities/time/time.clock/time.clock.system/now)\n$(call gen-test, utilities/time/time.clock/time.clock.system/rep_signed)\n$(call gen-test, utilities/time/time.clock/time.clock.system/to_time_t)\n$(call gen-test, utilities/time/time.duration/default_ratio)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_divideEQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_-EQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_+EQ)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_--int)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_++int)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_modEQduration)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_modEQrep)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_--)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_-)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_+)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_++)\n$(call gen-test, utilities/time/time.duration/time.duration.arithmetic/op_timesEQ)\n$(call gen-test, utilities/time/time.duration/time.duration.cast/duration_cast)\n$(call gen-test, utilities/time/time.duration/time.duration.comparisons/op_equal)\n$(call gen-test, utilities/time/time.duration/time.duration.comparisons/op_less)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_exact)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_inexact)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_int_to_float)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/convert_overflow)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/default)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/rep02)\n$(call gen-test, utilities/time/time.duration/time.duration.cons/rep)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals1)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals2)\n$(call gen-test, utilities/time/time.duration/time.duration.literals/literals)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_divide_duration)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_divide_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_mod_duration)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_mod_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_-)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_+)\n$(call gen-test, utilities/time/time.duration/time.duration.nonmember/op_times_rep)\n$(call gen-test, utilities/time/time.duration/time.duration.observer/tested_elsewhere)\n$(call gen-test, utilities/time/time.duration/time.duration.special/max)\n$(call gen-test, utilities/time/time.duration/time.duration.special/min)\n$(call gen-test, utilities/time/time.duration/time.duration.special/zero)\n$(call gen-test, utilities/time/time.duration/types)\n$(call gen-test, utilities/time/time.point/default_duration)\n$(call gen-test, utilities/time/time.point/time.point.arithmetic/op_-EQ)\n$(call gen-test, utilities/time/time.point/time.point.arithmetic/op_+EQ)\n$(call gen-test, utilities/time/time.point/time.point.cast/time_point_cast)\n$(call gen-test, utilities/time/time.point/time.point.comparisons/op_equal)\n$(call gen-test, utilities/time/time.point/time.point.comparisons/op_less)\n$(call gen-test, utilities/time/time.point/time.point.cons/convert)\n$(call gen-test, utilities/time/time.point/time.point.cons/default)\n$(call gen-test, utilities/time/time.point/time.point.cons/duration)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_-duration)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_+)\n$(call gen-test, utilities/time/time.point/time.point.nonmember/op_-time_point)\n$(call gen-test, utilities/time/time.point/time.point.observer/tested_elsewhere)\n$(call gen-test, utilities/time/time.point/time.point.special/max)\n$(call gen-test, utilities/time/time.point/time.point.special/min)\n$(call gen-test, utilities/time/time.traits/nothing_to_do)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/max)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/min)\n$(call gen-test, utilities/time/time.traits/time.traits.duration_values/zero)\n$(call gen-test, utilities/time/time.traits/time.traits.is_fp/treat_as_floating_point)\n$(call gen-test, utilities/time/time.traits/time.traits.specializations/duration)\n$(call gen-test, utilities/time/time.traits/time.traits.specializations/time_point)\n$(call gen-test, utilities/time/version)\n$(call gen-test, utilities/tuple/tuple.general/nothing_to_do)\n$(call gen-test, utilities/tuple/tuple.general/tuple.smartptr)\n$(call gen-test, utilities/tuple/tuple.tuple/empty_member)\n$(call gen-test, utilities/tuple/tuple.tuple/TupleFunction)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.assign/move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_const_Types)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/const_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/const_Types)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/convert_copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/convert_move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/copy)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/default)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/move_pair)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/move)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.cnstr/UTypes)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/make_tuple)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/tie)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.creation/tuple_cat)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_const)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_non_const)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/get_rv)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.elem/tuple.by.type)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.helper/tuple_element)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.helper/tuple_size)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.rel/eq)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.rel/lt)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.special/non_member_swap)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.swap/member_swap)\n$(call gen-test, utilities/tuple/tuple.tuple/tuple.traits/uses_allocator)\n$(call gen-test, utilities/tuple/version)\n$(call gen-test, utilities/type.index/type.index.hash/hash)\n$(call gen-test, utilities/type.index/type.index.members/ctor)\n$(call gen-test, utilities/type.index/type.index.members/eq)\n$(call gen-test, utilities/type.index/type.index.members/hash_code)\n$(call gen-test, utilities/type.index/type.index.members/lt)\n$(call gen-test, utilities/type.index/type.index.members/name)\n$(call gen-test, utilities/type.index/type.index.overview/copy_assign)\n$(call gen-test, utilities/type.index/type.index.overview/copy_ctor)\n$(call gen-test, utilities/type.index/type.index.synopsis/hash_type_index)\n$(call gen-test, utilities/type.index/version)\n$(call gen-test, utilities/utilities.general/nothing_to_do)\n$(call gen-test, utilities/utility/declval/declval)\n$(call gen-test, utilities/utility/exchange/exchange)\n$(call gen-test, utilities/utility/forward/forward)\n$(call gen-test, utilities/utility/forward/move_copy)\n$(call gen-test, utilities/utility/forward/move_if_noexcept)\n$(call gen-test, utilities/utility/forward/move_only)\n$(call gen-test, utilities/utility/operators/rel_ops)\n$(call gen-test, utilities/utility/pairs/nothing_to_do)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_const)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_non_const)\n$(call gen-test, utilities/utility/pairs/pair.astuple/get_rv)\n$(call gen-test, utilities/utility/pairs/pair.astuple/pairs.by.type)\n$(call gen-test, utilities/utility/pairs/pair.astuple/tuple_element)\n$(call gen-test, utilities/utility/pairs/pair.astuple/tuple_size)\n$(call gen-test, utilities/utility/pairs/pair.piecewise/piecewise_construct)\n$(call gen-test, utilities/utility/pairs/pairs.general/nothing_to_do)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_const_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_rv_pair)\n$(call gen-test, utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/const_first_const_second)\n$(call gen-test, utilities/utility/pairs/pairs.pair/const_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/copy_ctor)\n$(call gen-test, utilities/utility/pairs/pairs.pair/default)\n$(call gen-test, utilities/utility/pairs/pairs.pair/piecewise)\n$(call gen-test, utilities/utility/pairs/pairs.pair/rv_pair_U_V)\n$(call gen-test, utilities/utility/pairs/pairs.pair/swap)\n$(call gen-test, utilities/utility/pairs/pairs.pair/types)\n$(call gen-test, utilities/utility/pairs/pairs.pair/U_V)\n$(call gen-test, utilities/utility/pairs/pairs.spec/comparison)\n$(call gen-test, utilities/utility/pairs/pairs.spec/make_pair)\n$(call gen-test, utilities/utility/pairs/pairs.spec/non_member_swap)\n$(call gen-test, utilities/utility.requirements/allocator.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/hash.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/nullablepointer.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/swappable.requirements/nothing_to_do)\n$(call gen-test, utilities/utility.requirements/utility.arg.requirements/nothing_to_do)\n$(call gen-test, utilities/utility/utility.swap/swap_array)\n$(call gen-test, utilities/utility/utility.swap/swap)\n$(call gen-test, utilities/utility/version)\n"
  },
  {
    "path": "tests/device/test-libc++-static-full/jni/Application.mk",
    "content": "APP_ABI := all\nAPP_STL := c++_static\n"
  },
  {
    "path": "tests/device/test-libc++-static-full/properties.json",
    "content": "{\n    \"broken\": true,\n    \"long\": true\n}\n"
  },
  {
    "path": "tests/device/test-libc++-static-full/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    return toolchain\n"
  },
  {
    "path": "tests/device/test-openmp/common.mk",
    "content": "CTESTS :=   \\\n\topenmp  \\\n\topenmp2 \\\n\tfib     \\\n\nCFLAGS  := -fopenmp\nLDFLAGS := -fopenmp\n\nCFLAGS  += -Wall -Wextra -Werror\n"
  },
  {
    "path": "tests/device/test-openmp/host/.gitignore",
    "content": "bin/\nobj/\n"
  },
  {
    "path": "tests/device/test-openmp/host/GNUmakefile",
    "content": "MYDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))\n\nifneq (__clang__,$(shell echo __clang__ | $(CC) -x c -E - | tail -n 1))\n\n.PHONY: test\ntest:\n\t@echo \"SKIP: clang doesn't support OpenMP\"\n\nelse\n\ninclude $(MYDIR)/../common.mk\n\nCFLAGS += -I../jni\n\ndefine add-test-rule\n.PHONY: test\ntest: test-$(1)\n\n.PHONY: test-$(1)\ntest-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk SRCFILES=$(1).c CFLAGS=\"$(CFLAGS)\" LDFLAGS=\"$(LDFLAGS)\" TARGETNAME=test-$(1)\n\n.PHONY: clean-$(1)\nclean-$(1):\n\t@+$(MAKE) -f $(MYDIR)/test.mk clean SRCFILES=$(1).c\n\n.PHONY: clean\nclean: clean-$(1)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n\nendif\n"
  },
  {
    "path": "tests/device/test-openmp/host/test.mk",
    "content": "include $(or $(NDK),../../../..)/tests/onhost.mk\n"
  },
  {
    "path": "tests/device/test-openmp/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\ninclude $(LOCAL_PATH)/../common.mk\n\ndefine add-test-rule\ninclude $$(CLEAR_VARS)\nLOCAL_MODULE := $(1)\nLOCAL_SRC_FILES := $(1).c\nLOCAL_CFLAGS := $$(CFLAGS)\nLOCAL_LDFLAGS := $$(LDFLAGS)\ninclude $$(BUILD_EXECUTABLE)\nendef\n\n$(foreach __t,$(CTESTS),\\\n    $(eval $(call add-test-rule,$(__t)))\\\n)\n"
  },
  {
    "path": "tests/device/test-openmp/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/test-openmp/jni/fib.c",
    "content": "#if defined(__clang__)\nint main() { return 0; }\n#else /* !__clang__ */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <omp.h>\n#include <unistd.h>\n#include <sys/time.h>\n\n#define NMAX 33 //41\nint Fibonacci(int n)\n{   int x, y;\n    if (n < 2)\n        return n;\n    else {\n        x = Fibonacci(n - 1);\n        y = Fibonacci(n - 2);\n        return (x + y);\n}    }\nint FibonacciTask(int n)\n{   int x, y;\n    if (n < 2)\n        return n;\n    else {\n#pragma omp task shared(x)\n        x = Fibonacci(n - 1);\n#pragma omp task shared(y)\n        y = Fibonacci(n - 2);\n#pragma omp taskwait\n        return (x + y);\n }    }\n\nint main()\n{\n    int FibNumber[NMAX] = {0};\n    struct timeval time_start, time_end;\n    int i = 0;\n\n#if 0\n#if __ANDROID__ && __arm__\n    if (access(\"/proc/sys/fs/binfmt_misc/arm\", F_OK) == 0) {\n        printf(\"We're running in emulated ARM mode.\\n\"\n               \"For some reason OMP-enabled binary cause crash in such ARM emulator.\\n\"\n               \"To avoid it, just skip this test here.\\n\");\n        return 0;\n    }\n#endif /* __ANDROID__ && __arm__ */\n#endif\n\n    // openmp related print message\n    printf(\"CPU_ONLN= %ld\\n\", sysconf(_SC_NPROCESSORS_ONLN));\n    printf(\"Number of CPUs=%d\\n\", omp_get_num_procs());\n    printf(\"Number of max threads=%d\\n\", omp_get_max_threads());\n    printf(\"Number of executing thread=%d\\n\", omp_get_thread_num());\n    printf(\"Number of threads=%d\\n\", omp_get_num_threads());\n    omp_set_num_threads( omp_get_num_procs()  );\n    gettimeofday(&time_start, NULL);\n\n#pragma omp parallel\n    {\n#pragma omp single private(i)\n        for(i = 1; i < NMAX; i++) {\n            FibNumber[i] = FibonacciTask(i);\n        }\n    }\n\n    gettimeofday(&time_end, NULL);\n    time_end.tv_usec = time_end.tv_usec-time_start.tv_usec;\n    time_end.tv_sec = time_end.tv_sec-time_start.tv_sec;\n    time_end.tv_usec += (time_end.tv_sec*1000000);\n    printf(\"Execution time of The Fibonacci Numbers with OpenMP : %lf sec\\n\", time_end.tv_usec / 1000000.0);\n    for(i = 0; i < NMAX; i++)\n        printf(\"%d \", FibNumber[i]);\n    printf(\"\\n-------------------------------\\n\");\n    return 0;\n}\n\n#endif /* !__clang__ */\n"
  },
  {
    "path": "tests/device/test-openmp/jni/openmp.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <omp.h>\n\nint main()\n{\n    int iam = 0, np = 1;\n\n    if (!getenv(\"OMP_NUM_THREADS\"))\n        omp_set_num_threads(4);\n\n  #pragma omp parallel default(shared) private(iam, np)\n    {\n      #if defined(_OPENMP)\n        np = omp_get_num_threads();\n        iam = omp_get_thread_num();\n      #endif\n        printf(\"Hello from thread %d out of %d\\n\", iam, np);\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-openmp/jni/openmp2.c",
    "content": "#include <stdio.h>\n#include <stdlib.h>\n#include <omp.h>\n#include <unistd.h>\n\nint main ()\n{\n    int nthreads, tid;\n    printf(\"SC_NPROCESSORS_ONLN: %ld\\n\", sysconf (_SC_NPROCESSORS_ONLN));\n    printf(\"SC_NPROCESSORS_CONF: %ld\\n\", sysconf (_SC_NPROCESSORS_CONF));\n  #pragma omp parallel default(shared) private(nthreads, tid)\n    /* Fork a team of threads giving them their own copies of variables */\n    {\n      /* Obtain thread number */\n        tid = omp_get_thread_num();\n        printf(\"Hello World from thread = %d\\n\", tid);\n      /* Only master thread does this */\n        if (tid == 0)\n        {\n            nthreads = omp_get_num_threads();\n            printf(\"Number of threads = %d\\n\", nthreads);\n        }\n    }  /* All threads join master thread and disband */\n\n  return 0;\n}\n"
  },
  {
    "path": "tests/device/test-openmp/properties.json",
    "content": "{\"broken-toolchain-version\": [\"clang3.6\", \"clang3.7\", \"clang3.8\"]}\n"
  },
  {
    "path": "tests/device/test-openmp/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if toolchain == 'clang':\n        return toolchain, 'http://b/25937032'\n    return None, None\n"
  },
  {
    "path": "tests/device/test-shaderc-gnustl/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := shaderc_test\nLOCAL_CPP_EXTENSION := .cc\nLOCAL_SRC_FILES := shaderc.cc\nLOCAL_CFLAGS := -std=c++11\nLOCAL_STATIC_LIBRARIES := shaderc\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,third_party/shaderc)\n"
  },
  {
    "path": "tests/device/test-shaderc-gnustl/jni/Application.mk",
    "content": "APP_STL := gnustl_static\n"
  },
  {
    "path": "tests/device/test-shaderc-gnustl/jni/shaderc.cc",
    "content": "/*\n * Copyright (C) 2016 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <shaderc/shaderc.hpp>\n#include <iostream>\n\nint main() {\n  shaderc::Compiler compiler;\n  if (!compiler.IsValid()) return -1;\n\n  static const char* source_text =\n      \"#version 310 es\\n\"\n      \"layout(location = 0) in highp vec4 vtxColor;\\n\"\n      \"layout(location = 0) out highp vec4 outColor;\\n\"\n      \"void main() {\\n\"\n      \"   outColor = vtxColor;\\n\"\n      \"}\";\n\n  shaderc::SpvCompilationResult result =\n      compiler.CompileGlslToSpv(source_text, strlen(source_text),\n                       shaderc_glsl_fragment_shader, \"input.glsl\");\n\n  if (0u != result.GetNumErrors()) {\n    std::cerr << result.GetErrorMessage() << std::endl;\n    return -1;\n  }\n  if (0u != result.GetNumWarnings()) {\n    std::cerr << result.GetErrorMessage() << std::endl;\n    return -1;\n  }\n  if (shaderc_compilation_status_success != result.GetCompilationStatus()) {\n    std::cerr << \"Bad compilation result\" << std::endl;\n    return -1;\n  }\n  if (result.cbegin() == result.cend()) {\n    std::cerr << \"No data returned\" << std::endl;\n    return -1;\n  }\n  std::cout << \"Success\" << std::endl;\n  return 0;\n}\n\n"
  },
  {
    "path": "tests/device/test-shaderc-gnustl/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/device/test-shaderc-gnustl/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'armeabi':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/test-shaderc-libc++/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := shaderc_test\nLOCAL_CPP_EXTENSION := .cc\nLOCAL_SRC_FILES := shaderc.cc\nLOCAL_CFLAGS := -std=c++11\nLOCAL_STATIC_LIBRARIES := shaderc\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,third_party/shaderc)\n"
  },
  {
    "path": "tests/device/test-shaderc-libc++/jni/Application.mk",
    "content": "APP_STL := c++_static\n"
  },
  {
    "path": "tests/device/test-shaderc-libc++/jni/shaderc.cc",
    "content": "/*\n * Copyright (C) 2016 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#include <shaderc/shaderc.hpp>\n#include <iostream>\n\nint main() {\n  shaderc::Compiler compiler;\n  if (!compiler.IsValid()) return -1;\n\n  static const char* source_text =\n      \"#version 310 es\\n\"\n      \"layout(location = 0) in highp vec4 vtxColor;\\n\"\n      \"layout(location = 0) out highp vec4 outColor;\\n\"\n      \"void main() {\\n\"\n      \"   outColor = vtxColor;\\n\"\n      \"}\";\n\n  shaderc::SpvCompilationResult result =\n      compiler.CompileGlslToSpv(source_text, strlen(source_text),\n                       shaderc_glsl_fragment_shader, \"input.glsl\");\n\n  if (0u != result.GetNumErrors()) {\n    std::cerr << result.GetErrorMessage() << std::endl;\n    return -1;\n  }\n  if (0u != result.GetNumWarnings()) {\n    std::cerr << result.GetErrorMessage() << std::endl;\n    return -1;\n  }\n  if (shaderc_compilation_status_success != result.GetCompilationStatus()) {\n    std::cerr << \"Bad compilation result\" << std::endl;\n    return -1;\n  }\n  if (result.cbegin() == result.cend()) {\n    std::cerr << \"No data returned\" << std::endl;\n    return -1;\n  }\n  std::cout << \"Success\" << std::endl;\n  return 0;\n}\n\n"
  },
  {
    "path": "tests/device/test-shaderc-libc++/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/device/test-shaderc-libc++/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'armeabi':\n        return abi\n    return None\n"
  },
  {
    "path": "tests/device/test-vulkan/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := vulkan\nLOCAL_SRC_FILES := instance.cpp\nLOCAL_CFLAGS := -std=c++11 -DVK_PROTOTYPES\nLOCAL_LDLIBS := -lvulkan\nLOCAL_SHARED_LIBRARIES := VkLayer_device_limits\nLOCAL_SHARED_LIBRARIES += VkLayer_draw_state\nLOCAL_SHARED_LIBRARIES += VkLayer_image\nLOCAL_SHARED_LIBRARIES += VkLayer_mem_tracker\nLOCAL_SHARED_LIBRARIES += VkLayer_object_tracker\nLOCAL_SHARED_LIBRARIES += VkLayer_param_checker\nLOCAL_SHARED_LIBRARIES += VkLayer_swapchain\nLOCAL_SHARED_LIBRARIES += VkLayer_threading\nLOCAL_SHARED_LIBRARIES += VkLayer_unique_objects\n#LOCAL_STATIC_LIBRARIES := libshaderc_$(APP_STL)\ninclude $(BUILD_EXECUTABLE)\n\n$(call import-module,third_party/vulkan)\n"
  },
  {
    "path": "tests/device/test-vulkan/jni/Application.mk",
    "content": "APP_PLATFORM := android-24\nAPP_STL := gnustl_shared\n"
  },
  {
    "path": "tests/device/test-vulkan/jni/instance.cpp",
    "content": "/*\n * Vulkan Samples\n *\n * Copyright (C) 2015-2016 Valve Corporation\n * Copyright (C) 2015-2016 LunarG, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n/*\nVULKAN_SAMPLE_SHORT_DESCRIPTION\ncreate and destroy Vulkan instance\n*/\n\n#include <iostream>\n#include <sstream>\n#include <vulkan/vulkan.h>\n\n#define APP_SHORT_NAME \"vulkansamples_instance\"\n\nint main() {\n\n    /* VULKAN_KEY_START */\n\n    // initialize the VkApplicationInfo structure\n    VkApplicationInfo app_info = {};\n    app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;\n    app_info.pNext = NULL;\n    app_info.pApplicationName = APP_SHORT_NAME;\n    app_info.applicationVersion = 1;\n    app_info.pEngineName = APP_SHORT_NAME;\n    app_info.engineVersion = 1;\n    app_info.apiVersion = VK_MAKE_VERSION(1, 0, 0);\n\n    // initialize the VkInstanceCreateInfo structure\n    VkInstanceCreateInfo inst_info = {};\n    inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;\n    inst_info.pNext = NULL;\n    inst_info.flags = 0;\n    inst_info.pApplicationInfo = &app_info;\n    inst_info.enabledExtensionCount = 0;\n    inst_info.ppEnabledExtensionNames = NULL;\n    inst_info.enabledLayerCount = 0;\n    inst_info.ppEnabledLayerNames = NULL;\n\n    VkInstance inst;\n    VkResult res;\n\n    res = vkCreateInstance(&inst_info, NULL, &inst);\n    if (res == VK_ERROR_INCOMPATIBLE_DRIVER) {\n        std::cout << \"cannot find a compatible Vulkan ICD\\n\";\n        return(-1);\n    } else if (res) {\n        std::cout << \"unknown error\\n\";\n        return(-1);\n    }\n\n    vkDestroyInstance(inst, NULL);\n\n    /* VULKAN_KEY_END */\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-vulkan/properties.json",
    "content": "{\n    \"broken\": true\n}\n"
  },
  {
    "path": "tests/device/test-vulkan/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    # Vulkan support wasn't added until android-24\n    if device_platform < 24:\n        return device_platform\n\n    return None\n"
  },
  {
    "path": "tests/device/test-wait/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_wait-dynamic\nLOCAL_SRC_FILES := test_wait.c\ninclude $(BUILD_EXECUTABLE)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_wait-static\nLOCAL_SRC_FILES := test_wait.c\nLOCAL_CFLAGS := -DSTATIC=1\nLOCAL_LDFLAGS += -static -Wl,--eh-frame-hdr\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-wait/jni/Application.mk",
    "content": "APP_ABI := all\n"
  },
  {
    "path": "tests/device/test-wait/jni/test_wait.c",
    "content": "/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <sys/types.h>\n#include <sys/wait.h>\n\n#define CHILD_EXIT_CODE  111\n\ntypedef int (*wait_call_function)(pid_t child_pid);\n\nstatic int check_wait_call(const char* title,\n                           wait_call_function wait_func,\n                           int expected_exit_code) {\n  printf(\"Testing %s(): \", title);\n  int cpid = fork();\n  if (cpid < 0) {\n    fprintf(stderr, \"ERROR: fork() failed: %s\\n\", strerror(errno));\n    return -1;\n  }\n\n  if (cpid == 0) {  /* in the chid process */\n    printf(\"Child created pid=%d parent_pid=%d\\n\", getpid(), getppid());\n    exit(expected_exit_code);\n  }\n\n  /* in the parent process */\n  printf(\"Parent waiting for child with pid=%d\\n\", cpid);\n  int exit_code = wait_func(cpid);\n  if (exit_code < 0)\n    return -1;\n\n  if (exit_code != expected_exit_code) {\n    fprintf(stderr, \"ERROR: Child exited with code %d, expected %d\\n\",\n            exit_code, expected_exit_code);\n    return -1;\n  }\n  printf(\"Testing %s(): OK\\n\", title);\n  return 0;\n}\n\n// To be called by check_wait_call() to check wait().\nstatic int check_wait(pid_t child_pid) {\n  int status = 0;\n  pid_t ret = wait(&status);\n  if (ret != child_pid) {\n    fprintf(stderr, \"ERROR: wait() returned %d, expected %d\\n\", ret, child_pid);\n    return -1;\n  }\n  return WEXITSTATUS(status);\n}\n\n// To be called by check_wait_call() to check waitpid()\nstatic int check_waitpid(pid_t child_pid) {\n  int status = 0;\n  pid_t ret = waitpid((pid_t)-1, &status, 0);\n  if (ret != child_pid) {\n    fprintf(stderr, \"ERROR: waitpid() returned %d, expected %d\\n\", ret, child_pid);\n    return -1;\n  }\n  return WEXITSTATUS(status);\n}\n\n// To be called by check_wait_call() to check wait3()\nstatic int check_wait3(pid_t child_pid) {\n  int status = 0;\n  struct rusage ru;\n  pid_t ret = wait3(&status, 0, &ru);\n  if (ret != child_pid) {\n    fprintf(stderr, \"ERROR: wait3() returned %d, expected %d\\n\", ret, child_pid);\n    return -1;\n  }\n  return WEXITSTATUS(status);\n}\n\n// To be called by check_wait_call() to check wait3()\nstatic int check_wait4(pid_t child_pid) {\n  int status = 0;\n  struct rusage ru;\n  pid_t ret = wait4(-1, &status, 0, &ru);\n  if (ret != child_pid) {\n    fprintf(stderr, \"ERROR: wait4() returned %d, expected %d\\n\", ret, child_pid);\n    return -1;\n  }\n  return WEXITSTATUS(status);\n}\n\nint main(int argc, char *argv[]) {\n  printf(\"Testing for API level %d\\n\", __ANDROID_API__);\n  if (check_wait_call(\"wait\", check_wait, CHILD_EXIT_CODE + 0) < 0 ||\n      check_wait_call(\"waitpid\", check_waitpid, CHILD_EXIT_CODE + 1) < 0 ||\n      check_wait_call(\"wait3\", check_wait3, CHILD_EXIT_CODE + 2) < 0 ||\n      check_wait_call(\"wait4\", check_wait4, CHILD_EXIT_CODE + 3) < 0) {\n    return 1;\n  }\n\n  return EXIT_SUCCESS;\n}\n\n"
  },
  {
    "path": "tests/device/test-wait/test_config.py",
    "content": "def match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if subtest == 'test_wait-static' and abi == 'x86':\n        return abi, 'http://b/24507500'\n    return None, None\n"
  },
  {
    "path": "tests/device/test-yasm/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test-yasm\nLOCAL_SRC_FILES := \\\n   test-yasm.c \\\n   print_hello.asm\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/test-yasm/jni/Application.mk",
    "content": "APP_ABI := x86\n"
  },
  {
    "path": "tests/device/test-yasm/jni/print_hello.asm",
    "content": "section .rodata\n  fmt db \"Hello, %s!\", 10, 0\n\nsection .text\n  global  print_hello\n  extern printf\n\n  print_hello:\n    sub  esp, 28\n    mov  eax, [esp+32]\n    mov  [esp], dword fmt\n    mov  [esp+4], eax\n    call printf\n    add  esp, 28\n    ret\n"
  },
  {
    "path": "tests/device/test-yasm/jni/test-yasm.c",
    "content": "void print_hello(char *s);\nint main()\n{\n    print_hello(\"Android\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/device/test-yasm/test_config.py",
    "content": "def match_unsupported(abi, platform, device_platform, toolchain, subtest=None):\n    if abi not in ('x86', 'x86_64'):\n        return abi\n    return None\n\ndef match_broken(abi, platform, device_platform, toolchain, subtest=None):\n    if abi == 'x86_64':\n        return abi, 'http://b/24620865'\n    return None, None\n"
  },
  {
    "path": "tests/device/whole-static-libs/jni/Android.mk",
    "content": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := foo\nLOCAL_SRC_FILES := foo.c foo2.c\ninclude $(BUILD_STATIC_LIBRARY)\n\n# The GNU linker will strip un-needed object files from executables even whe\n# --whole-archive is used. However, it won't do it for shared libraries, so\n# create an intermediate one, called 'bar' that includes 'foo' as a whole\n# static library.\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := bar20E739C8DF824EB4B2216F6F07E6C597\nLOCAL_WHOLE_STATIC_LIBRARIES := foo\ninclude $(BUILD_SHARED_LIBRARY)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := test_whole_static_libs\nLOCAL_SRC_FILES := main.c\nLOCAL_LDLIBS := -ldl\ninclude $(BUILD_EXECUTABLE)\n"
  },
  {
    "path": "tests/device/whole-static-libs/jni/Application.mk",
    "content": "APP_ABI := all"
  },
  {
    "path": "tests/device/whole-static-libs/jni/foo.c",
    "content": "/* This function is called from main() */\nint foo(int x)\n{\n    return x + 42;\n}\n"
  },
  {
    "path": "tests/device/whole-static-libs/jni/foo2.c",
    "content": "/* This function is not called from main() but should still be included\n * in the final executable due to our use of LOCAL_WHOLE_STATIC_LIBRARIES.\n * main() will dlopen() itself to look for the function symbol.\n */\nint foo2(int x)\n{\n    return x*2;\n}\n"
  },
  {
    "path": "tests/device/whole-static-libs/jni/main.c",
    "content": "/* A small program used to check that LOCAL_WHOLE_STATIC_LIBRARIES builds\n * and works properly. Here, we check that the 'foo2' function which is\n * never called from main is still included in the final executable\n * image.\n */\n#include <stdio.h>\n#include <unistd.h>\n#include <dlfcn.h>\n\nint main(int argc, char *argv[])\n{\n    void*  lib;\n    lib = dlopen(\"libbar20E739C8DF824EB4B2216F6F07E6C597.so\", RTLD_NOW);\n    if (lib == NULL) {\n        fprintf(stderr, \"Could not dlopen(\\\"libbar.so\\\"): %s\\n\", dlerror());\n        return 1;\n    }\n    if (dlsym(lib, \"foo2\") == NULL) {\n        fprintf(stderr, \"Symbol 'foo2' is missing from shared library!!\\n\");\n        return 2;\n    }\n    dlclose(lib);\n    return 0;\n}\n"
  },
  {
    "path": "tests/filters.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nimport fnmatch\n\n\nclass TestFilter(object):\n    def __init__(self, patterns):\n        self.early_filters = []\n        self.late_filters = []\n        for pattern in patterns:\n            self.add_filter(pattern)\n\n    def filter(self, test_name):\n        filter_set = self.early_filters\n        if '.' in test_name:\n            filter_set = self.late_filters\n        if len(filter_set) == 0:\n            return True\n        return any(f(test_name) for f in filter_set)\n\n    def add_filter(self, pattern):\n        \"\"\"Adds a filter function based on the provided pattern.\n\n        There are two types of filters we need to handle.\n\n        1) Filters we can apply before running the test.\n        2) Filters that cannot be run applied before running the test.\n\n        We cannot apply all filters at a high level because we do not know all\n        of the subtests until we begin running the test. The test cases for\n        each device test are determined by searching for binaries in\n        $OUT/libs/$ABI, and that list cannot be determined without building the\n        test.\n\n        Test filters that include a '.' will be split into two filters: one\n        that filters on the whole test, and another that filters on the\n        specific test case. This is done so foo will be built but bar will not\n        if the case is 'foo.b*'. In this example, the resulting filters would\n        be:\n\n            Pass early filter if test name == 'foo'\n            Pass late filter if case name matches 'foo.b*'\n\n        This is still imperfect. While this does save us significant time in\n        being able to skip building tests we don't care about, we have to\n        specify them enough to do so. For example, *.foo will build everything.\n        Also, if we have tests 'foo.bar_qux' and 'baz.bar_quux', we can't\n        simply specify '*bar_*', but have to use '*.bar_*'.\n        \"\"\"\n        # Note that the way we split the patterns does allow more than one '.'\n        # to appear in the full test name. The early pattern will never contain\n        # a '.', i.e. the early filter pattern for 'foo.bar.*' is 'foo'.\n        early_pattern = pattern.split('.')[0]\n        late_pattern = pattern\n        if '.' not in pattern:\n            late_pattern = pattern + '.*'\n\n        self._add_early_filter(early_pattern)\n        self._add_late_filter(late_pattern)\n\n    def _make_filter_function(self, pattern):\n        # pylint: disable=no-self-use\n        def func(test_name):\n            return fnmatch.fnmatch(test_name, pattern)\n        return func\n\n    def _add_early_filter(self, pattern):\n        self.early_filters.append(self._make_filter_function(pattern))\n\n    def _add_late_filter(self, pattern):\n        self.late_filters.append(self._make_filter_function(pattern))\n\n    @classmethod\n    def from_string(cls, filter_string):\n        return cls(filter_string.split(',') if filter_string else [])\n"
  },
  {
    "path": "tests/lib/awk.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'open3'\nrequire 'rbconfig'\n\nrequire_relative 'log'\nrequire_relative 'tests'\n\nclass AwkTests < Tests\n  def initialize(ndk, options = {})\n    super(ndk, options.merge(type: 'build'))\n\n    @tests = Dir.glob(File.join(@ndk, 'tests', 'awk', '*')).sort\n\n    case RUBY_PLATFORM\n    when /linux/\n      tag = 'linux'\n    when /darwin/\n      tag = 'darwin'\n    when /(cygwin|mingw|win32)/\n      tag = 'windows'\n    else\n      raise \"Unknown RUBY_PLATFORM: #{RUBY_PLATFORM}\"\n    end\n\n    if RUBY_PLATFORM =~ /linux/\n      ft = `file -b /bin/ls`.chomp\n      if ft =~ /64-bit/\n        harch = 'x86_64'\n      elsif ft =~ /32-bit/\n        harch = 'x86'\n      else\n        harch = RbConfig::CONFIG['host_cpu']\n      end\n    else\n      harch = RbConfig::CONFIG['host_cpu']\n      harch = 'x86' if harch =~ /^i\\d86$/\n    end\n    archs = [harch]\n    archs << 'x86' if harch == 'x86_64'\n\n    archs.each do |arch|\n      if tag == 'windows' && arch == 'x86'\n        host_tag = 'windows'\n      else\n        host_tag = \"#{tag}-#{arch}\"\n      end\n      awk = File.join(@ndk, 'prebuilt', host_tag, 'bin', \"awk#{\".exe\" if RUBY_PLATFORM =~ /(cygwin|mingw|win32)/}\")\n      @awk = awk if @awk.nil? && File.exists?(awk)\n    end\n    raise \"Can't find 'awk' in #{@ndk}\" if @awk.nil?\n  end\n\n  def run\n    @tests.each do |t|\n      sname = File.basename(t)\n      Log.notice \"RUN awk test: #{sname}\"\n\n      script = File.join(@ndk, 'build', 'awk', \"#{sname}.awk\")\n      raise \"Missing AWK script: #{script}\" unless File.exists?(script)\n\n      Dir.glob(File.join(@ndk, 'tests', 'awk', sname, '*.in')).sort.each do |input|\n        output = input.gsub(/\\.in$/, '.out')\n        raise \"Missing AWK output file: #{output}\" unless File.exists?(output)\n\n        cmd = \"#{@awk} -f \\\"#{script}\\\"\"\n        Log.info \"## COMMAND: #{cmd} < #{input}\"\n        os,es,st = Open3.capture3(cmd, stdin_data: File.read(input))\n        raise es unless st.success?\n        raise \"AWK test #{sname} failed\" if (os <=> File.read(output)) != 0\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "tests/lib/log.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'time'\nrequire 'fileutils'\n\nclass Log\n  @@loggers = []\n  @@mtx = Mutex.new\n\n  @@print_timestamps = true\n\n  def self.timestamps=(v)\n    @@print_timestamps = v\n  end\n\n  def self.add(logger)\n    @@mtx.synchronize do\n      @@loggers << logger\n    end\n  end\n\n  FATAL   = 0\n  ERROR   = 1\n  WARNING = 2\n  NOTICE  = 3\n  INFO    = 4\n  DEBUG   = 5\n\n  [:debug, :info, :notice, :warning, :error, :fatal].each do |sym|\n    define_singleton_method(sym) do |msg, options = {}|\n      level = Log.const_get(sym.to_s.upcase)\n      ls = []\n      @@mtx.synchronize do\n        ls = @@loggers.select { |l| l.level >= level }\n      end\n      ls.each do |l|\n        message = \"\"\n        prefix = \"\"\n        prefix << Time.now.utc.strftime('%Y-%m-%d %H:%M:%S.%3N UTC: ') if @@print_timestamps\n        message << prefix unless options[:noprefix]\n        case level\n        when FATAL\n          message << \"FATAL: \"\n        when ERROR\n          message << \"ERROR: \"\n        when WARNING\n          message << \"WARNING: \"\n        end\n        message << msg\n        l.log(message, level, options)\n      end\n    end\n  end\nend\n\nclass Logger\n  class PureVirtualMethodCalled < Exception; end\n\n  attr_reader :level\n\n  def initialize(level = Log::DEBUG)\n    @level = level\n  end\n\n  def log(msg, level, options)\n    raise PureVirtualMethodCalled.new\n  end\nend\n\nclass StdLogger < Logger\n  def initialize(level = Log::DEBUG)\n    super(level)\n    @mtx = Mutex.new\n  end\n\n  def log(msg, l, options)\n    @mtx.synchronize do\n      STDOUT.write msg\n      STDOUT.write \"\\n\" unless options[:nonewline]\n      STDOUT.flush\n    end\n  end\nend\n\nclass FileLogger < Logger\n  def initialize(file, level = Log::DEBUG)\n    super(level)\n    @file = file\n    FileUtils.mkdir_p File.dirname(file)\n  end\n\n  def log(msg, l, options)\n    File.open(@file, \"a\") do |f|\n      f.flock(File::LOCK_EX)\n      f.write msg\n      f.write \"\\n\" unless options[:nonewline]\n    end\n  end\nend\n"
  },
  {
    "path": "tests/lib/mro.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'json'\n\nclass MRO\n  def self.prefix=(p)\n    @@prefix = p\n  end\n\n  def self.dump(obj)\n    $stdout.puts \"#{@@prefix}#{obj.to_json}\" if @@prefix\n  end\nend\n"
  },
  {
    "path": "tests/lib/project.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'fileutils'\nrequire 'open3'\nrequire 'json'\nrequire 'securerandom'\n\nrequire_relative 'log'\nrequire_relative 'mro'\n\nclass Project\n  attr_reader :path, :name\n\n  WINDOWS = RUBY_PLATFORM =~ /(cygwin|mingw|win32)/ ? true : false\n\n  CMAKE_MINIMUM_VERSION = '3.2'\n\n  class MkdirFailed < Exception; end\n\n  def initialize(path, ndk, options = {})\n    raise \"No such directory: #{path}\" unless File.directory?(path)\n\n    @ndkbuild = File.join(ndk, \"ndk-build#{'.cmd' if WINDOWS}\")\n    raise \"Wrong NDK path: #{ndk}\" unless File.executable?(@ndkbuild)\n\n    @ndk = ndk\n    @path = path\n    @name = File.basename(@path)\n    @options = options\n\n    @type = options[:type] || 'unknown'\n\n    @outdir = options[:outdir]\n    @tmpdir = File.join(@outdir, @type, @name)\n\n    @jobs = options[:jobs] || 1\n\n    @adb = options[:adb]\n\n    propf = File.join(path, 'properties.json')\n    if File.exists?(propf)\n      @properties = JSON.parse(File.read(propf))\n    else\n      @properties = {}\n    end\n\n    @display_type = case @type\n                    when 'samples'\n                      'sample'\n                    else\n                      \"#{@type} test\"\n                    end\n\n    @emutag = options[:emutag]\n    @abis   = options[:abis]\n\n    @stimeout = @properties['single-run-timeout'] || options[:stimeout]\n\n    @last_notice = Time.now\n  end\n\n  def gnumake\n    if @gnumake.nil?\n      case RUBY_PLATFORM\n      when /linux/\n        tag = 'linux'\n      when /darwin/\n        tag = 'darwin'\n      when /(cygwin|mingw|win32)/\n        tag = 'windows'\n      else\n        raise \"Unknown RUBY_PLATFORM: #{RUBY_PLATFORM}\"\n      end\n\n      if RUBY_PLATFORM =~ /linux/\n        ft = `file -b /bin/ls`.chomp\n        if ft =~ /64-bit/\n          harch = 'x86_64'\n        elsif ft =~ /32-bit/\n          harch = 'x86'\n        else\n          harch = RbConfig::CONFIG['host_cpu']\n        end\n      else\n        harch = RbConfig::CONFIG['host_cpu']\n        harch = 'x86' if harch =~ /^i\\d86$/\n      end\n      archs = [harch]\n      archs << 'x86' if harch == 'x86_64'\n\n      archs.each do |arch|\n        if tag == 'windows' && arch == 'x86'\n          host_tag = 'windows'\n        else\n          host_tag = \"#{tag}-#{arch}\"\n        end\n        make = File.join(@ndk, 'prebuilt', host_tag, 'bin', \"make#{\".exe\" if RUBY_PLATFORM =~ /(cygwin|mingw|win32)/}\")\n        next unless File.exists?(make)\n        @gnumake = make\n        break\n      end\n      raise \"Can't find 'make' in #{@ndk}\" if @gnumake.nil?\n    end\n\n    @gnumake\n  end\n\n  def cmake\n    if @cmake.nil?\n      ENV['PATH'].split(':').each do |p|\n        exe = File.join(p, \"cmake#{'.exe' if WINDOWS}\")\n        next if !File.executable?(exe)\n        @cmake = exe\n        break\n      end\n      raise \"Can't find CMake in PATH\" if @cmake.nil?\n    end\n    @cmake\n  end\n\n  def cleanup\n    FileUtils.rm_rf tmpdir\n  end\n\n  def tmpdir(options = {})\n    return @tmpdir if options[:pie].nil?\n    File.join(@tmpdir, \"target#{\"+PIE\" if options[:pie]}\")\n  end\n\n  def broken?\n    return true if @properties['broken'].to_s =~ /^(true|yes|1)/i\n\n    if !@options[:toolchain_version].nil?\n      if @options[:toolchain_version] =~ /^([^\\d-]+)/\n        tt = $1\n        tvt = @properties['broken-toolchain-type'] || []\n        tvt = [tvt] unless tvt.is_a?(Array)\n        tvt.each do |t|\n          return true if t == tt\n        end\n      end\n\n      tvs = @properties['broken-toolchain-version'] || []\n      tvs = [tvs] unless tvs.is_a?(Array)\n      tvs.each do |t|\n        return true if t == @options[:toolchain_version]\n      end\n    end\n\n    false\n  end\n\n  def long?\n    @properties['long'].to_s =~ /^(true|yes|1)/i ? true : false\n  end\n\n  def has_script?(name, dir = nil)\n    File.send(WINDOWS ? 'exists?' : 'executable?', File.join(dir || path, name))\n  end\n\n  def has_onhost_script?(dir = nil)\n    has_script?('run-on-host', dir)\n  end\n\n  def has_build_script?(dir = nil)\n    has_script?('build', dir)\n  end\n\n  def has_cmakelists?(dir = nil)\n    File.exists?(File.join(dir || path, 'CMakeLists.txt'))\n  end\n\n  def copy_cmakelists(dir)\n    src = File.join(path, 'CMakeLists.txt')\n    dst = File.join(dir, File.basename(src))\n    return unless File.exists?(src)\n\n    content = File.read(src).split(\"\\n\").map(&:chomp)\n\n    File.open(dst, 'w') do |bf|\n      if content.select { |line| line =~ /^\\s*cmake_minimum_required\\s*\\(/i }.empty?\n        bf.puts \"cmake_minimum_required(VERSION #{CMAKE_MINIMUM_VERSION} FATAL_ERROR)\"\n        bf.puts ''\n      end\n\n      bf.write content.join(\"\\n\")\n\n      if content.select { |line| line =~ /^\\s*enable_testing\\s*\\(/i }.empty?\n        bf.puts ''\n        bf.puts 'if(ANDROID)'\n        bf.puts '    install(TARGETS ${TARGET}'\n        bf.puts '            RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin'\n        bf.puts '            LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib'\n        bf.puts '    )'\n        bf.puts '    foreach(__extLibrary ${ANDROID_PREBUILT_LIBRARIES})'\n        bf.puts '        install(FILES ${__extLibrary} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)'\n        bf.puts '    endforeach()'\n        bf.puts 'else()'\n        bf.puts '    enable_testing()'\n        bf.puts '    add_test(NAME ${TARGET} COMMAND $<TARGET_FILE:${TARGET}>)'\n        bf.puts 'endif()'\n      end\n    end\n  end\n\n  def host_compilers(options = {})\n    if @host_compilers.nil?\n      ccs = []\n\n      %w[cc gcc gcc-4.9 gcc-5 gcc-6 clang clang-3.6 clang-3.7 clang-3.8].each do |cc|\n        found = false\n        ENV['PATH'].split(':').each do |p|\n          next if !File.executable?(File.join(p, cc))\n          found = true\n          break\n        end\n        next unless found\n\n        if preprocess(cc, \"__clang__\") != \"__clang__\"\n          type = :clang\n          version = preprocess(cc, \"__clang_version__\")\n        elsif preprocess(cc, \"__GNUC__\") != \"__GNUC__\"\n          type = :gcc\n          version = preprocess(cc, \"__VERSION__\")\n        else\n          raise \"Can't detect type of #{cc}\"\n        end\n\n        ccs << {exe: cc, type: type, version: version} if ccs.select { |x| x[:type] == type && x[:version] == version }.empty?\n      end\n\n      @host_compilers = ccs\n    end\n\n    ccs = @host_compilers.dup\n    ccs.select! { |x| x[:type] == options[:type] } unless options[:type].nil?\n    ccs.select! { |x| x[:version] == options[:version] } unless options[:version].nil?\n    ccs\n  end\n\n  def elapsed(seconds)\n    s = seconds.to_i % 60\n    m = (seconds.to_i / 60) % 60\n    h = seconds.to_i / 3600\n    \"%d:%02d:%02d\" % [h,m,s]\n  end\n  private :elapsed\n\n  def log_info(msg)\n    Log.info msg\n  end\n  private :log_info\n\n  def log_notice(msg)\n    Log.notice msg\n    @last_notice = Time.now\n  end\n  private :log_notice\n\n  def preprocess(cc, str)\n    o,e,s = Open3.capture3(\"#{cc} -x c -E -\", stdin_data: str)\n    raise \"Can't preprocess '#{str}' with #{cc}: #{e}\" unless s.success?\n    o.split(\"\\n\").reject { |line| line =~ /^#/ }.join(\"\\n\")\n  end\n  private :preprocess\n\n  def run_cmd(cmd, options = {}, &block)\n    log_info \"## COMMAND: #{cmd}\"\n    log_info \"## CWD: #{Dir.pwd}\"\n\n    env = options[:env] || {}\n    env['JOBS'] = @jobs.to_s\n\n    Open3.popen3(env, cmd) do |i,o,e,t|\n      [i,o,e].each { |io| io.sync = true }\n\n      ot = Thread.start do\n        while line = o.gets.chomp rescue nil\n          if !options[:mroprefix].nil? && line =~ /^#{options[:mroprefix]}/\n            begin\n              line.sub!(/^#{options[:mroprefix]}/, '')\n              obj = JSON.parse(line)\n              yield obj\n            rescue\n              Log.warning \"Can't handle MRO output: #{line}\"\n            end\n            next\n          end\n          log_info \"   > #{line}\"\n        end\n      end\n\n      mkdir_error = false\n      et = Thread.start do\n        while line = e.gets.chomp rescue nil\n          log_info \"   * #{line}\"\n          mkdir_error = true if options[:track_mkdir_errors] && line =~ /^mkdir:/\n        end\n      end\n\n      wt = Thread.start do\n        lt = Time.now\n        while ot.alive? || et.alive?\n          sleep 5\n          now = Time.now\n          next if now - @last_notice < 30\n          log_notice \"## STILL RUNNING (#{elapsed(now - lt)})\"\n        end\n      end\n\n      i.close\n      ot.join\n      et.join\n      wt.kill\n\n      errmsg = options[:errmsg] || \"'#{cmd}' failed\"\n      raise MkdirFailed.new(errmsg) if mkdir_error && !t.value.success?\n      raise errmsg unless t.value.success?\n    end\n\n  end\n  private :run_cmd\n\n  def run_build_cmd(cmd, dir, env = {})\n    FileUtils.cd(dir) do\n      run_cmd cmd, env: env, errmsg: \"Build of project #{name} failed\", track_mkdir_errors: true\n    end\n  end\n  private :run_build_cmd\n\n  def run_on_host\n    # If there is 'host/GNUmakefile', that means this test is capable to run on host too.\n    # In this case, before we build test with NDK build system, we build and run it on host,\n    # ensuring there is no errors in this test running on host OS.\n    # For maximum coverage, we use wide range of C/C++ compilers and test with all of them\n    # we can found on host\n    # Requirements for on-host tests:\n    # - there should be host/GNUmakefile or CMakeLists.txt file in test directory\n    # - that GNUmakefile should support 'test' target, which build and run test on host\n    # - that GNUmakefile should allow redefining of CC and CXX variables and use them for\n    #   test build\n\n    # Allow on-host testing on Linux/Darwin hosts only\n    return if RUBY_PLATFORM !~ /(linux|darwin)/\n    # Disable on-host testing if there is no host/GNUmakefile or CMakeLists.txt\n    return if !File.exists?(File.join(path, 'host', 'GNUmakefile')) && !has_cmakelists?\n    # Disable on-host testing if it was explicitly requested\n    return if ENV['DISABLE_ONHOST_TESTING'] == 'yes'\n\n    dos = @properties['onhost-disabled-os'] || []\n    dos = [dos] unless dos.is_a?(Array)\n    dos.each do |os|\n      return if RUBY_PLATFORM =~ /#{os}/\n    end\n\n    log_notice \"HST #{@display_type} [#{name}]\"\n\n    cctype = nil\n    if @options[:toolchain_version]\n      cctype = @options[:toolchain_version] =~ /^clang/ ? :clang : :gcc\n    end\n\n    ccs = host_compilers(type: cctype)\n    ccs = [{exe: 'cc'}] if ccs.empty?\n\n    ccs.map { |e| e[:exe] }.each do |cc|\n      dcc = @properties['onhost-disabled-cc'] || []\n      dcc = [dcc] unless dcc.is_a?(Array)\n      next if dcc.select { |d| d == cc }.size > 0\n\n      dir = File.join(tmpdir, \"host-#{cc}\")\n      FileUtils.rm_rf dir\n      FileUtils.mkdir_p File.dirname(dir)\n      FileUtils.cp_r path, dir\n\n      script = File.join(dir, 'run-on-host')\n\n      if !has_onhost_script?\n        copy_cmakelists(dir)\n\n        File.open(script, 'w') do |bf|\n          bf.puts '#!/bin/sh'\n          bf.puts 'run()'\n          bf.puts '{'\n          bf.puts '    echo \"## COMMAND: $@\"'\n          bf.puts '    \"$@\"'\n          bf.puts '}'\n          if has_cmakelists?(dir)\n            bf.puts \"run rm -Rf #{dir}/cmake-build || exit 1\"\n            bf.puts \"run mkdir -p #{dir}/cmake-build || exit 1\"\n            bf.puts \"run cd #{dir}/cmake-build || exit 1\"\n            bf.puts \"run cmake -DCMAKE_C_COMPILER=#{cc} -DCMAKE_CXX_COMPILER=#{cc} #{dir} || exit 1\"\n            bf.puts \"run #{gnumake} -j#{@jobs} VERBOSE=1 || exit 1\"\n            bf.puts \"run #{gnumake} test VERBOSE=1 || exit 1\"\n          elsif File.exists?(File.join(dir, 'host', 'GNUmakefile'))\n            bf.puts \"exec #{gnumake} -C #{File.join(dir, 'host')} -B -j#{@jobs} test CC=#{cc}\"\n          else\n            raise \"Don't know how to run on-host testing for this test!\"\n          end\n          bf.puts \"exit 0\"\n        end\n        FileUtils.chmod 0755, script\n      end\n\n      max_attempts = 5\n      attempt = 1\n      begin\n        run_cmd script, errmsg: \"On-host test of #{name} failed\", track_mkdir_errors: true\n      rescue MkdirFailed\n        attempt += 1\n        raise \"On-host testing of project #{name} failed\" if attempt > max_attempts\n        log_info \"WARNING: On-host testing of '#{name}' failed due to 'mkdir' error; trying again (attempt ##{attempt})\"\n        retry\n      end\n\n      FileUtils.rm_rf dir\n    end\n\n    log_info \"== OK: all on-host tests PASSED\"\n  rescue => e\n    log_info \"ERROR: #{e.message}\"\n    log_notice \"   ---> FAILURE: HOST TEST    [#{name}]\"\n    MRO.dump event: \"build-failed\", path: path\n    raise\n  end\n  private :run_on_host\n\n  def variants(options = {})\n    v = \"\"\n    v << \" #{@options[:toolchain_version]}\" unless @options[:toolchain_version].nil?\n    v << \" +PIE\" if options[:pie]\n    v\n  end\n  private :variants\n\n  def buildfunc_with_generic_script(dir, script, options)\n    proc do\n      if WINDOWS\n        shell = ENV['SHELL']\n        # NB: cygwin shell is required!\n        o,e,s = Open3.capture3(\"cygpath -m #{shell}\")\n        raise \"Can't convert cygwin path to native: #{e}\" unless s.success?\n        shell = o.chomp\n        cmd = \"#{shell} #{script}\"\n      else\n        cmd = script\n      end\n      env = {}\n      env['V'] = '1'\n      env['APP_PIE'] = (options[:pie] ? true : false).to_s unless options[:pie].nil?\n      run_build_cmd cmd, dir, env\n    end\n  end\n  private :buildfunc_with_generic_script\n\n  def buildfunc_with_cmake(dir, options)\n    copy_cmakelists(dir)\n    proc do\n      args = [cmake]\n      args << \"-DCMAKE_TOOLCHAIN_FILE=#{File.join(@ndk, 'cmake', 'toolchain.cmake')}\"\n      args << \"-DANDROID_TOOLCHAIN_VERSION=#{@options[:toolchain_version]}\" unless @options[:toolchain_version].nil?\n      args << \"-DANDROID_APP_PIE=#{options[:pie]}\" unless options[:pie].nil?\n      %w[armeabi armeabi-v7a armeabi-v7a-hard x86 mips arm64-v8a x86_64 mips64].each do |abi|\n        log_notice \"BLD #{@display_type} [#{name}]#{variants(options)}: #{abi}\"\n\n        blddir = File.join(dir, 'cmake-build', abi)\n        tmpinstalldir = File.join(dir, 'cmake-install', abi)\n        installdir = File.join(dir, 'libs', abi)\n\n        aargs = args.dup\n        aargs << \"-DCMAKE_INSTALL_PREFIX=#{tmpinstalldir}\"\n        aargs << \"-DANDROID_ABI=#{abi}\"\n        aargs << dir\n\n        FileUtils.rm_rf blddir\n        FileUtils.rm_rf tmpinstalldir\n        FileUtils.rm_rf installdir\n        FileUtils.mkdir_p blddir\n\n        run_build_cmd aargs.join(' '), blddir\n        run_build_cmd \"#{gnumake} -j#{@jobs} VERBOSE=1\", blddir\n        run_build_cmd \"#{gnumake} install VERBOSE=1\", blddir\n\n        bins = []\n        bins += Dir.glob(File.join(tmpinstalldir, 'bin', '*')) if File.directory?(File.join(tmpinstalldir, 'bin'))\n        bins += Dir.glob(File.join(tmpinstalldir, 'lib', 'lib*.so')) if File.directory?(File.join(tmpinstalldir, 'lib'))\n        bins.each do |bin|\n          FileUtils.mkdir_p installdir\n          FileUtils.cp bin, installdir\n        end\n      end\n    end\n  end\n  private :buildfunc_with_cmake\n\n  def buildfunc_with_ndkbuild(dir, options)\n    proc do\n      args = [@ndkbuild]\n      args << '-B'\n      args << \"-j#{@jobs}\"\n      args << 'V=1'\n      args << \"APP_PIE=#{options[:pie]}\" unless options[:pie].nil?\n      run_build_cmd args.join(' '), dir\n    end\n  end\n  private :buildfunc_with_ndkbuild\n\n  def buildfunc(dir, options)\n    genscript = File.join(dir, 'build')\n    if has_script?('build.sh', dir) && !has_script?(File.basename(genscript), dir)\n      FileUtils.mv File.join(dir, 'build.sh'), genscript\n    end\n\n    if has_script?(File.basename(genscript), dir)\n      buildfunc_with_generic_script(dir, genscript, options)\n    elsif has_cmakelists?(dir)\n      buildfunc_with_cmake(dir, options)\n    else\n      buildfunc_with_ndkbuild(dir, options)\n    end\n  end\n  private :buildfunc\n\n  def build(options = {})\n    log_notice \"BLD #{@display_type} [#{name}]#{variants(options)}\"\n\n    dstdir = tmpdir(pie: options[:pie])\n\n    FileUtils.rm_rf dstdir\n    FileUtils.mkdir_p File.dirname(dstdir)\n    FileUtils.cp_r path, dstdir\n\n    bldfunc = buildfunc(dstdir, options)\n\n    max_attempts = 5\n    attempt = 1\n    begin\n      bldfunc.call\n    rescue MkdirFailed\n      attempt += 1\n      raise \"Build of project #{name} failed\" if attempt > max_attempts\n      log_info \"WARNING: Build of '#{name}' failed due to 'mkdir' error; trying again (attempt ##{attempt})\"\n      retry\n    end\n\n    MRO.dump event: \"build-success\", path: path, pie: options[:pie]\n  rescue => e\n    log_info \"ERROR: #{e.message}\"\n    log_notice \"   ---> FAILURE: TARGET BUILD [#{name}]\"\n    MRO.dump event: \"build-failed\", path: path, pie: options[:pie]\n    raise\n  end\n  private :build\n\n  def run_on_device(options = {})\n    abi = options[:abi]\n    pie = options[:pie]\n\n    dstdir = tmpdir(pie: pie)\n\n    logprefix = \"#{@display_type} [#{name}]#{variants(options)}\"\n\n    binaries = Dir.glob(File.join(dstdir, 'libs', abi, '*')).sort\n    executables = binaries.reject { |e| e =~ /\\.so$/ }\n\n    broken = @properties['broken-run']\n    broken = [broken] unless broken.is_a?(Array)\n    executables.select! { |e| !broken.include?(File.basename(e)) }\n\n    if executables.empty?\n      log_notice \"SKP #{logprefix}: no #{abi} binaries\"\n      return\n    end\n\n    logprefix << \": #{abi}\"\n\n    log_notice \"BEG #{logprefix}\"\n\n    fields = {path: path, name: name, abi: abi}\n\n    objdirs = [\n      File.join(@ndk, 'sources', 'crystax', 'libs', abi),\n      File.join(dstdir, 'obj', 'local', abi),\n    ].select { |e| File.directory?(e) }\n\n    cmdslist = File.join(dstdir, \"executables-#{abi}.txt\")\n    FileUtils.mkdir_p File.dirname(cmdslist)\n    File.open(cmdslist, \"w\") do |f|\n      executables.each do |e|\n        eopts = @properties['adbrunner-options'][File.basename(e)] rescue nil?\n        eopts = {} unless eopts.is_a?(Hash)\n\n        line = e.dup\n        line << \" ADBRUNNER-OPTIONS:#{eopts.to_json}\" unless eopts.empty?\n\n        f.puts line\n      end\n    end\n\n    mroprefix = \"CRYSTAX-MRO-#{SecureRandom.uuid.gsub('-', '')}\"\n\n    args = []\n    args << \"ruby\"\n    #args << File.join(@ndk, 'prebuilt', hosttag, 'bin', 'ruby')\n    args << File.join(@ndk, 'tools', 'adbrunner')\n    args << \"--verbose\"\n    args << \"--keep-going\" if @options[:keep_going]\n    args << \"--no-print-timestamps\"\n    args << \"--adb=#{@adb}\" unless @adb.nil?\n    args << \"--ndk=#{@ndk}\"\n    args << \"--abi=#{abi}\"\n    args << \"--timeout=#{@stimeout}\"\n    args << \"--emulator-tag=#{@emutag}\" if !@emutag.nil?\n    args << \"--device-path=/data/local/tmp/ndk-tests\"\n    args << \"--run-on-all-devices\"\n    if pie\n      args << \"--pie\"\n    else\n      args << \"--no-pie\"\n    end\n    args << \"--mro-prefix=#{mroprefix}\"\n    args << \"--symbols-directories=#{objdirs.join(',')}\"\n    args << \"--ld-library-path=#{File.join(dstdir, 'libs', abi)}\"\n    args << \"@#{cmdslist}\"\n\n    skipreason = nil\n\n    run_cmd args.join(' '), errmsg: \"Test #{name} failed\", mroprefix: mroprefix do |obj|\n      case obj[\"event\"]\n      when \"skip\"\n        num = obj[\"number\"].to_i\n        total = obj[\"total\"].to_i\n        w = total.to_s.length\n        cnt = \"%#{w}d/%#{w}d\" % [num, total]\n        # Log only first SKIP event\n        log_notice \"SKP #{logprefix} [#{cnt}] #{obj[\"reason\"]}\" #if obj[\"reason\"] != skipreason\n      when \"run\"\n        num = obj[\"number\"].to_i\n        total = obj[\"total\"].to_i\n        w = total.to_s.length\n        cnt = \"%#{w}d/%#{w}d\" % [num, total]\n        log_notice \"RUN #{logprefix} [#{cnt}] android-#{obj[\"apilevel\"]} '#{obj[\"devmodel\"]}'\"\n      when \"fail\"\n        exe = obj[\"exe\"]\n        argv = obj[\"args\"]\n        rc = obj[\"exitcode\"]\n        log_notice \"   ---> FAILURE: TARGET TEST  [#{name}] \\\"#{([File.basename(exe)] + argv).join(' ')}\\\": $?=#{rc}\"\n      when \"pause\"\n        log_notice \"RUN #{logprefix} [paused]\"\n      when \"timeout\"\n        log_notice \"   ---> FAILURE: TARGET TEST  [#{name}] TIMEOUT: #{obj[\"timeout\"]} seconds\"\n      end\n\n      skipreason = obj[\"event\"] == \"skip\" ? obj[\"reason\"] : nil\n    end\n\n    MRO.dump fields.merge({event: \"test-success\", pie: pie})\n  rescue => e\n    log_info \"ERROR: #{e.message}\"\n    MRO.dump fields.merge({event: \"test-failed\", pie: pie})\n    raise\n  end\n  private :run_on_device\n\n  def test\n    if broken?\n      log_notice \"SKP #{@display_type} [#{name}]: no build for #{@options[:toolchain_version]}\"\n      return\n    end\n\n    if long? && !@options[:full_testing] && (@options[:tests].nil? || !@options[:tests].include?(name))\n      log_notice \"SKP #{@display_type} [#{name}]: this is long test, but we're running in quick mode\"\n      return\n    end\n\n    run_on_host\n\n    fails = 0\n\n    pies = []\n    if @options[:pie].nil?\n      pies << false if @type == 'device'\n      pies << true\n    else\n      pies << @options[:pie]\n    end\n\n    # clang don't support non-PIE binaries\n    pies.select! { |p| p } if @options[:toolchain_version].to_s =~ /^clang/\n    pies << true if pies.empty?\n\n    pies.each do |pie|\n      begin\n        build pie: pie\n      rescue => err\n        raise unless @options[:keep_going]\n        fails += 1\n      end\n\n      next if @type != 'device'\n\n      Dir.glob(File.join(tmpdir(pie: pie), 'libs', '*'))\n        .select { |e| File.directory?(e) }\n        .map { |e| File.basename(e) }\n        .sort\n        .each do |abi|\n        next if !@abis.nil? && !@abis.include?(abi)\n        # 64-bit targets don't support non-PIE executables\n        next if !pie && ['arm64-v8a', 'x86_64', 'mips64'].include?(abi)\n\n        begin\n          run_on_device abi: abi, pie: pie\n        rescue => err\n          raise unless @options[:keep_going]\n          fails += 1\n        end\n      end\n    end\n\n    raise \"Testing of #{name} failed\" if fails > 0\n  end\nend\n"
  },
  {
    "path": "tests/lib/samples.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire_relative 'log'\nrequire_relative 'project'\nrequire_relative 'tests'\n\nclass SamplesTests < Tests\n  def initialize(ndk, options = {})\n    super ndk, options.merge(type: 'samples')\n\n    dirs = []\n    if !File.exists?(File.join(ndk, 'RELEASE.TXT'))\n      # This is a development work directory, we will take the samples\n      # directly from development/ndk.\n      devndk = File.join(File.dirname(ndk), 'development', 'ndk')\n      dirs << File.join(devndk, 'samples')\n      Dir.glob(File.join(devndk, 'platforms', 'android-*', 'samples')).each do |dir|\n        dirs << dir\n      end\n    end\n    dirs << File.join(ndk, 'samples')\n\n    @tests = []\n    dirs.each do |dir|\n      Dir.glob(File.join(dir, '*')).each do |p|\n        @tests << p unless @tests.map { |e| File.basename(e) }.include?(File.basename(p))\n      end\n    end\n    @tests.sort! { |a,b| File.basename(a) <=> File.basename(b) }\n  end\nend\n"
  },
  {
    "path": "tests/lib/standalone.rb",
    "content": "# Copyright (c) 2011-2018 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'open3'\n\nrequire_relative 'log'\nrequire_relative 'mro'\n\nclass StandaloneTests\n  attr_reader :type\n\n  def initialize(ndk, options = {})\n    @type = :standalone\n\n    @ndk = ndk\n    @options = options\n\n    @abis = options[:abis] || ['armeabi-v7a', 'armeabi-v7a-hard', 'x86', 'mips', 'arm64-v8a', 'x86_64', 'mips64']\n\n    @toolchain_version = options[:toolchain_version]\n    raise \"No toolchain version passed\" if @toolchain_version.nil?\n\n    @outdir = File.join(options[:outdir], 'standalone')\n  end\n\n  def elapsed(seconds)\n    s = seconds.to_i % 60\n    m = (seconds.to_i / 60) % 60\n    h = seconds.to_i / 3600\n    \"%d:%02d:%02d\" % [h,m,s]\n  end\n  private :elapsed\n\n  def log_info(msg)\n    Log.info msg\n  end\n  private :log_info\n\n  def log_notice(msg)\n    Log.notice msg\n    @last_notice = Time.now\n  end\n  private :log_notice\n\n  def run_cmd(cmd)\n    log_info \"## COMMAND: #{cmd}\"\n    log_info \"## CWD: #{Dir.pwd}\"\n\n    Open3.popen3(cmd) do |i,o,e,t|\n      [i,o,e].each { |io| io.sync = true }\n\n      ot = Thread.start do\n        while line = o.gets.chomp rescue nil\n          log_info \"   > #{line}\"\n        end\n      end\n\n      et = Thread.start do\n        while line = e.gets.chomp rescue nil\n          log_info \"   * #{line}\"\n        end\n      end\n\n      wt = Thread.start do\n        lt = Time.now\n        while ot.alive? || et.alive?\n          sleep 5\n          now = Time.now\n          next if now - @last_notice < 30\n          log_notice \"## STILL RUNNING (#{elapsed(now - lt)})\"\n        end\n      end\n\n      i.close\n      ot.join\n      et.join\n      wt.kill\n\n      t.join\n\n      raise \"#{File.basename(cmd.split(/\\s+/).first)} failed\" unless t.value.success?\n    end\n  end\n  private :run_cmd\n\n  def tmpdir(abi, cxxstdlib)\n    File.join(@outdir, abi, cxxstdlib)\n  end\n  private :tmpdir\n\n\n  def run\n    ruby = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])\n\n    log_notice \"Starting standalone tests\"\n    run_cmd \"#{ruby} #{@ndk}/tests/standalone/run-standalone-tests.rb\"\n  end\nend\n"
  },
  {
    "path": "tests/lib/tests.rb",
    "content": "# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire_relative 'project'\n\nclass Tests\n  attr_reader :type\n\n  def initialize(ndk, options = {})\n    @ndk = ndk\n    @options = options\n    @type = options[:type]\n    @tests = Dir.glob(File.join(@ndk, 'tests', @type, '*')).sort\n  end\n\n  def run\n    fails = 0\n    @tests.each do |t|\n      next if @options[:tests] && !@options[:tests].include?(File.basename(t))\n\n      proj = Project.new(t, @ndk, @options)\n      begin\n        proj.test\n      rescue\n        raise unless @options[:keep_going]\n        fails += 1\n      else\n        proj.cleanup\n      end\n    end\n\n    raise \"Testing failed\" if fails > 0\n  end\nend\n\nclass BuildTests < Tests\n  def initialize(ndk, options = {})\n    super(ndk, options.merge(type: 'build'))\n  end\nend\n\nclass DeviceTests < Tests\n  def initialize(ndk, options = {})\n    super(ndk, options.merge(type: 'device'))\n  end\nend\n"
  },
  {
    "path": "tests/ndk.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Interface to NDK build information.\"\"\"\nimport os\nimport re\nimport sys\n\nimport util\n\n\nTHIS_DIR = os.path.dirname(os.path.realpath(__file__))\nNDK_ROOT = os.path.realpath(os.path.join(THIS_DIR, '..'))\n\n\ndef get_host_tag():\n    if sys.platform.startswith('linux'):\n        return 'linux-x86_64'\n    elif sys.platform == 'darwin':\n        return 'darwin-x86_64'\n    elif sys.platform == 'win32':\n        host_tag = 'windows-x86_64'\n        test_path = os.path.join(os.environ['NDK'], 'prebuilt', host_tag)\n        if not os.path.exists(test_path):\n            host_tag = 'windows'\n        return host_tag\n\n\ndef get_tool(tool):\n    ext = ''\n    if sys.platform == 'win32':\n        ext = '.exe'\n\n    host_tag = get_host_tag()\n    prebuilt_path = os.path.join(os.environ['NDK'], 'prebuilt', host_tag)\n    return os.path.join(prebuilt_path, 'bin', tool) + ext\n\n\ndef build(build_flags):\n    ndk_build_path = os.path.join(os.environ['NDK'], 'ndk-build')\n    if os.name == 'nt':\n        ndk_build_path += '.cmd'\n    return util.call_output([ndk_build_path] + build_flags)\n\n\ndef expand_app_abi(abi):\n    all32 = ('armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', 'mips', 'x86')\n    all64 = ('arm64-v8a', 'mips64', 'x86_64')\n    all_abis = all32 + all64\n    if abi == 'all':\n        return all_abis\n    elif abi == 'all32':\n        return all32\n    elif abi == 'all64':\n        return all64\n    return re.split(r'\\s+', abi)\n"
  },
  {
    "path": "tests/onhost-functions.mk",
    "content": "ifneq (yes,$(shell which grep >/dev/null 2>&1 && echo yes))\n$(error No 'grep' tool found)\nendif\n\nifneq (yes,$(shell which awk >/dev/null 2>&1 && echo yes))\n$(error No 'awk' tool found)\nendif\n\nempty :=\nspace := $(empty) $(empty)\ncomma := ,\n\ndefine check-function\n$(if $(strip $(2)),,$(error INTERNAL ERROR: function '$(1)' is broken!))\nendef\n\ndefine not\n$(if $(strip $(1)),,yes)\nendef\n\ndefine is-empty\n$(if $(strip $(1)),,yes)\nendef\n\ndefine head\n$(firstword $(1))\nendef\n\n$(call check-function,head,$(filter a,$(call head,a b c)))\n\ndefine tail\n$(wordlist 2,$(words $(1)),$(1))\nendef\n\n$(call check-function,tail,$(filter 2,$(words $(call tail,a b c))))\n$(call check-function,tail,$(filter b,$(word 1,$(call tail,a b c))))\n$(call check-function,tail,$(filter c,$(word 2,$(call tail,a b c))))\n\ndefine str.eq\n$(or $(call is-empty,$(1) $(2)),$(if $(call is-empty,$(2)),,$(if $(strip $(subst $(1),,$(2))),,yes)))\nendef\n\n$(call check-function,str.eq,$(call str.eq,asd,asd))\n$(call check-function,str.eq,$(call str.eq,amaimiblaend12,amaimiblaend12))\n$(call check-function,str.eq,$(call str.eq,,))\n$(call check-function,str.eq,$(call not,$(call str.eq,asd,dsa)))\n$(call check-function,str.eq,$(call not,$(call str.eq,km92uenijna,)))\n$(call check-function,str.eq,$(call not,$(call str.eq,,lakjoiln)))\n\ndefine str.le\n$(or $(call is-empty,$(1)),$(if $(call is-empty,$(2)),,$(call str.eq,$(word 1,$(sort $(1) $(2))),$(1))))\nendef\n\n$(call check-function,str.le,$(call str.le,,,))\n$(call check-function,str.le,$(call str.le,,abc))\n$(call check-function,str.le,$(call str.le,abc,abc))\n$(call check-function,str.le,$(call str.le,abc,bbc))\n$(call check-function,str.le,$(call str.le,1,1))\n$(call check-function,str.le,$(call str.le,1,2))\n$(call check-function,str.le,$(call not,$(call str.le,abc,)))\n$(call check-function,str.le,$(call not,$(call str.le,bbc,abc)))\n$(call check-function,str.le,$(call not,$(call str.le,9,5)))\n\ndefine num.mklist-impl\n$(strip \\\n    $(subst 0,0 ,\\\n    $(subst 1,1 ,\\\n    $(subst 2,2 ,\\\n    $(subst 3,3 ,\\\n    $(subst 4,4 ,\\\n    $(subst 5,5 ,\\\n    $(subst 6,6 ,\\\n    $(subst 7,7 ,\\\n    $(subst 8,8 ,\\\n    $(subst 9,9 ,\\\n    $(1)\\\n    ))))))))))\\\n)\nendef\n\ndefine check-isnum\n$(strip \\\n    $(if $(filter 1,$(words $(1))),,$(error Usage: call num.isnum,number))\\\n    $(if $(filter-out 0 1 2 3 4 5 6 7 8 9,$(call num.mklist-impl,$(1))),$(error passed values is not a number: '$(1)'))\\\n)\nendef\n\ndefine num.mklist\n$(strip \\\n    $(if $(filter 1,$(words $(1))),,$(error Usage: call num.mklist,number))\\\n    $(call check-isnum,$(1))\\\n    $(call num.mklist-impl,$(1))\\\n)\nendef\n\n$(call check-function,num.mklist,$(filter 3,$(words $(call num.mklist,975))))\n$(call check-function,num.mklist,$(filter 9,$(word 1,$(call num.mklist,975))))\n$(call check-function,num.mklist,$(filter 7,$(word 2,$(call num.mklist,975))))\n$(call check-function,num.mklist,$(filter 5,$(word 3,$(call num.mklist,975))))\n$(call check-function,num.mklist,$(filter 3,$(words $(call num.mklist,975))))\n\ndefine num.le\n$(strip \\\n    $(if $(and $(filter 1,$(words $(1))),$(filter 1,$(words $(2)))),,$(error Usage: call num.le,number1,number2))\\\n    $(call check-isnum,$(1))\\\n    $(call check-isnum,$(2))\\\n    $(if $(call str.eq,$(words $(call num.mklist,$(1))),$(words $(call num.mklist,$(2)))),\\\n        $(call str.le,$(strip $(1)),$(strip $(2))),\\\n        $(call str.le,$(words $(call num.mklist,$(1))),$(words $(call num.mklist,$(2))))\\\n    )\\\n)\nendef\n\n$(call check-function,num.le,$(call num.le,0,0))\n$(call check-function,num.le,$(call num.le,0,1))\n$(call check-function,num.le,$(call num.le,1,1))\n$(call check-function,num.le,$(call num.le,1,2))\n$(call check-function,num.le,$(call num.le,1,11))\n$(call check-function,num.le,$(call num.le,2,10))\n$(call check-function,num.le,$(call num.le,57818273,57818274))\n$(call check-function,num.le,$(call num.le,57818273,178182740))\n$(call check-function,num.le,$(call not,$(call num.le,1,0)))\n$(call check-function,num.le,$(call not,$(call num.le,10,5)))\n$(call check-function,num.le,$(call not,$(call num.le,178182740,57818273)))\n\ndefine num.gt\n$(strip \\\n    $(if $(and $(filter 1,$(words $(1))),$(filter 1,$(words $(2)))),,$(error Usage: call num.gt,number1,number2))\\\n    $(call not,$(call num.le,$(1),$(2)))\\\n)\nendef\n\ndefine num.eq\n$(strip \\\n    $(if $(and $(filter 1,$(words $(1))),$(filter 1,$(words $(2)))),,$(error Usage: call num.eq,number1,number2))\\\n    $(call check-isnum,$(1))\\\n    $(call check-isnum,$(2))\\\n    $(call str.eq,$(strip $(1)),$(strip $(2)))\\\n)\nendef\n\ndefine num.ge\n$(or $(call num.gt,$(1),$(2)),$(call num.eq,$(1),$(2)))\nendef\n\ndefine num.lt\n$(and $(call num.le,$(1),$(2)),$(call not,$(call num.eq,$(1),$(2))))\nendef\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 < $2\ndefine is-version-less\n$(strip \\\n    $(if $(and $(filter 2,$(words $(subst ., ,$(1)))),$(filter 2,$(words $(subst ., ,$(2))))),,\\\n        $(error Usage: call is-version-less,major1.minor1,major2.minor2)\\\n    )\\\n    $(or \\\n        $(call num.lt,$(word 1,$(subst ., ,$(1))),$(word 1,$(subst ., ,$(2)))),\\\n        $(and \\\n            $(call num.eq,$(word 1,$(subst ., ,$(1))),$(word 1,$(subst ., ,$(2)))),\\\n            $(call num.lt,$(word 2,$(subst ., ,$(1))),$(word 2,$(subst ., ,$(2))))\\\n        )\\\n    )\\\n)\nendef\n\n$(call check-function,is-version-less,$(call is-version-less,1.0,1.1))\n$(call check-function,is-version-less,$(call is-version-less,1.9,2.1))\n$(call check-function,is-version-less,$(call is-version-less,2.9,2.10))\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 != $2\ndefine is-version-not-equal\n$(if $(strip $(filter-out $(2),$(1))),yes)\nendef\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 == $2\ndefine is-version-equal\n$(if $(call is-version-not-equal,$(1)),,yes)\nendef\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 <= $2\ndefine is-version-less-or-equal\n$(or $(call is-version-equal,$(1),$(2)),$(call is-version-less,$(1),$(2)))\nendef\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 > $2\ndefine is-version-greater\n$(if $(call is-version-less-or-equal,$(1),$(2)),,yes)\nendef\n\n# $1: major.minor\n# $2: major.minor\n# return: true if $1 >= $2\ndefine is-version-greater-or-equal\n$(if $(call is-version-less,$(1),$(2)),,yes)\nendef\n\ndowncase = $(strip \\\n$(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,\\\n$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,\\\n$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,\\\n$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))))\n\ndefine is-true\n$(if $(filter 1 yes true on,$(call downcase,$(1))),yes)\nendef\n\ndefine preprocess\n$(strip $(if $(and $(strip $(1)),$(strip $(2))),\\\n    $(shell echo $(2) | $(1) -x c -E - | tail -n 1),\\\n    $(error Usage: call preprocess,compiler,string)\\\n))\nendef\n\ndefine cc-type\n$(strip $(if $(strip $(1)),\\\n    $(if $(filter-out __GNUC__,$(call preprocess,$(1),__GNUC__)),\\\n        $(if $(filter __clang__,$(call preprocess,$(1),__clang__)),gcc,clang),\\\n        $(error Cannot detect type of compiler '$(1)')\\\n    ),\\\n    $(error Usage: call cc-type,compiler)\\\n))\nendef\n\ndefine is-gcc\n$(if $(and $(strip $(1)),$(filter gcc,$(call cc-type,$(1)))),yes)\nendef\n\ndefine is-clang\n$(if $(and $(strip $(1)),$(filter clang,$(call cc-type,$(1)))),yes)\nendef\n\ndefine gcc-major-version\n$(strip $(if $(call is-gcc,$(1)),\\\n    $(call preprocess,$(1),__GNUC__)\\\n))\nendef\n\ndefine gcc-minor-version\n$(strip $(if $(call is-gcc,$(1)),\\\n    $(call preprocess,$(1),__GNUC_MINOR__)\\\n))\nendef\n\ndefine gcc-version\n$(strip $(if $(strip $(1)),\\\n    $(call gcc-major-version,$(1)).$(call gcc-minor-version,$(1)),\\\n    $(error Usage: call gcc-version,cc)\\\n))\nendef\n\ndefine clang-major-version\n$(strip $(if $(call is-clang,$(1)),\\\n    $(call preprocess,$(1),__clang_major__)\\\n))\nendef\n\ndefine clang-minor-version\n$(strip $(if $(call is-clang,$(1)),\\\n    $(call preprocess,$(1),__clang_minor__)\\\n))\nendef\n\ndefine clang-version\n$(strip $(if $(strip $(1)),\\\n    $(call clang-major-version,$(1)).$(call clang-minor-version,$(1)),\\\n    $(error Usage: call clang-version,cc)\\\n))\nendef\n\ndefine cc-version\n$(strip $(if $(strip $(1)),\\\n    $(or \\\n        $(if $(call is-gcc,$(1)),$(call gcc-version,$(1))),\\\n        $(if $(call is-clang,$(1)),$(call clang-version,$(1))),\\\n        $(error Unknown compiler: '$(1)')\\\n    ),\\\n    $(error Usage: call cc-version,cc)\\\n))\nendef\n\ndefine c++11\n$(strip \\\n    $(if \\\n        $(and \\\n            $(call is-gcc,$(CC)),\\\n            $(filter 4,$(call gcc-major-version,$(CC))),\\\n            $(filter 6,$(call gcc-minor-version,$(CC)))\\\n        ),\\\n        c++0x,\\\n        c++11\\\n    )\\\n)\nendef\n\ndefine host-os\n$(shell uname -s | tr '[A-Z]' '[a-z]')\nendef\n\ndefine is-host-os-linux\n$(if $(filter linux,$(call host-os)),yes)\nendef\n\ndefine is-host-os-darwin\n$(if $(filter darwin,$(call host-os)),yes)\nendef\n\ndefine objc-runtime\n$(if $(or $(and $(call is-clang,$(CC)),$(call is-host-os-darwin)),$(call is-old-apple-gcc,$(CC))),next,gnu)\nendef\n\nc-sources-masks = %.c\nc++-sources-masks = %.cpp %.cc\nobjective-c-sources-masks = %.m\nobjective-c++-sources-masks = %.mm\n\nall-sources-masks = $(c-sources-masks) $(c++-sources-masks) $(objective-c-sources-masks) $(objective-c++-sources-masks)\n\ndefine has-c-sources\n$(if $(filter $(c-sources-masks) $(objective-c-sources-masks),$(SRCFILES)),yes)\nendef\n\ndefine has-objective-c-sources\n$(if $(filter $(objective-c-sources-masks) $(objective-c++-sources-masks),$(SRCFILES)),yes)\nendef\n\ndefine has-c++-sources\n$(if $(filter $(c++-sources-masks) $(objective-c++-sources-masks),$(SRCFILES)),yes)\nendef\n\n# $1: regexp\n# $2: string\ndefine match\n$(shell echo $(2) | grep -iq $(1) && echo yes)\nendef\n\ndefine is-old-macosx\n$(strip $(and \\\n    $(call is-host-os-darwin),\\\n    $(shell test $$(sw_vers -productVersion | awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}') -lt 100900 && echo yes)\\\n))\nendef\n\ndefine is-old-apple-gcc\n$(strip $(and \\\n    $(call is-host-os-darwin),\\\n    $(call is-gcc,$(1)),\\\n    $(filter 4.2,$(call gcc-major-version,$(1)).$(call gcc-minor-version,$(1)))\\\n))\nendef\n\ndefine is-old-apple-clang\n$(strip $(and \\\n    $(call is-host-os-darwin),\\\n    $(call is-clang,$(1)),\\\n    $(call is-version-less,$(call clang-version,$(1)),3.0)\\\n))\nendef\n\ndefine is-not-old-apple-clang\n$(if $(call is-old-apple-clang,$(1)),,yes)\nendef\n\ndefine is-apple-clang\n$(if $(filter __apple_build_version__,$(call preprocess,$(1),__apple_build_version__)),,yes)\nendef\n\ndefine is-not-apple-clang\n$(if $(call is-apple-clang,$(1)),,yes)\nendef\n\nONHOST_FUNCTIONS_INCLUDED_65010bdaed29436187034ed331bd56e9 := yes\n"
  },
  {
    "path": "tests/onhost.mk",
    "content": "ifeq (,$(strip $(ONHOST_FUNCTIONS_INCLUDED_65010bdaed29436187034ed331bd56e9)))\ninclude $(dir $(lastword $(MAKEFILE_LIST)))/onhost-functions.mk\nendif\n\n#=======================================================================================================================\n\n# $1: source file\ndefine objfile\n$(OBJDIR)/$(1).o\nendef\n\n# $1: source file\ndefine language\n$(strip $(or \\\n    $(if $(filter $(c-sources-masks),            $(1)),c),\\\n    $(if $(filter $(c++-sources-masks),          $(1)),c++),\\\n    $(if $(filter $(objective-c-sources-masks),  $(1)),objective-c),\\\n    $(if $(filter $(objective-c++-sources-masks),$(1)),objective-c++),\\\n    $(error Can not detect language: '$(1)')\\\n))\nendef\n\n# $1: source file\ndefine compiler-flags\n$(strip $(or \\\n    $(if $(filter c,            $(call language,$(1))),$(CFLAGS)),\\\n    $(if $(filter c++,          $(call language,$(1))),$(CXXFLAGS)),\\\n    $(if $(filter objective-c,  $(call language,$(1))),$(OBJCFLAGS) $(CFLAGS)),\\\n    $(if $(filter objective-c++,$(call language,$(1))),$(OBJCFLAGS) $(CXXFLAGS)),\\\n    $(error Unknown language: '$(call language,$(1))')\\\n))\nendef\n\n#=======================================================================================================================\n\nCC ?= cc\n\nifeq (,$(strip $(SRCFILES)))\n$(error SRCFILES are not defined)\nendif\n\nifeq (,$(strip $(VPATH)))\nVPATH := ../jni\nendif\n\nifeq (,$(strip $(CFLAGS)))\nCFLAGS := $(space)\nendif\n\nifeq (,$(strip $(CXXFLAGS)))\nCXXFLAGS := $(CFLAGS)\nendif\n\nifeq (,$(filter -std=%,$(CFLAGS) $(CXXFLAGS)))\nCXXFLAGS += -std=$(if $(call is-old-macosx),c++98,$(c++11))\nendif\n\nifneq (,$(and $(call is-clang,$(CC)),$(call is-not-old-apple-clang,$(CC)),$(if $(filter -stdlib=%,$(CXXFLAGS)),,yes)))\nCXXFLAGS += -stdlib=libc++\nLDFLAGS  += -stdlib=libc++\nendif\n\nOBJCFLAGS := -f$(objc-runtime)-runtime\nOBJCFLAGS += $(if $(call is-clang,$(CC)),-fblocks)\n\nOBJDIR := obj/$(CC)\nOBJFILES := $(foreach __f,$(filter $(all-sources-masks),$(SRCFILES)),$(call objfile,$(__f)))\n\nTARGETDIR := bin/$(CC)\nTARGETNAME := $(or $(strip $(TARGETNAME)),$(if $(filter 1,$(words $(SRCFILES))),$(addsuffix .bin,$(SRCFILES)),test))\nTARGET := $(TARGETDIR)/$(TARGETNAME)\n\n.PHONY: test\ntest: do-test\n\n.PHONY: clean\nclean:\n\t@rm -Rf $(TARGETDIR) $(OBJDIR)\n\t@rmdir $$(dirname $(TARGETDIR)) 2>/dev/null || true\n\t@rmdir $$(dirname $(OBJDIR)) 2>/dev/null || true\n\noverride SKIP := $(or \\\n    $(strip $(if \\\n        $(or \\\n            $(and \\\n                $(call is-gcc,$(CC)),\\\n                $(call is-version-less,$(call gcc-version,$(CC)),4.6)\\\n            ),\\\n            $(and \\\n                $(call is-clang,$(CC)),\\\n                $(call is-version-less,$(call clang-version,$(CC)),$(if $(call is-apple-clang,$(CC)),4.0,3.3))\\\n            )\\\n        ),\\\n        '$(CC)' is too old ($(call cc-type,$(CC))-$(call cc-version,$(CC))) \\\n    )),\\\n    $(strip $(if \\\n        $(and \\\n            $(call is-host-os-darwin),\\\n            $(call has-objective-c-sources),\\\n            $(or \\\n                $(call is-not-apple-clang,$(CC)),\\\n                $(call is-version-less,$(call clang-version,$(CC)),5.0)\\\n            )\\\n        ),\\\n        '$(CC)' do not support modern Objective-C \\\n    ))\\\n)\n\nifneq (,$(strip $(SKIP)))\n\n.PHONY: do-test\ndo-test:\n\t@echo \"SKIP on-host testing: $(SKIP)\"\n\nelse\n\n.PHONY: test\ndo-test: $(TARGET)\n\t$(if $(call is-true,$(BUILD_ONLY)),true,$(strip $(LAUNCHER) $(realpath $(TARGET))))\n\n$(TARGET): $(OBJFILES) | $(dir $(TARGET))\n\t$(strip \\\n\t\t$(CC) \\\n\t\t$(if $(has-objective-c-sources),\\\n\t\t\t-f$(objc-runtime)-runtime \\\n\t\t)\\\n\t\t$(LDFLAGS) \\\n\t\t-o $@ $^ \\\n\t\t$(LDLIBS) \\\n\t\t$(if $(has-c++-sources),\\\n\t\t\t-lstdc++ \\\n\t\t)\\\n\t\t$(if $(has-objective-c-sources),\\\n\t\t\t$(if $(filter next,$(objc-runtime)),\\\n\t\t\t\t-framework CoreFoundation \\\n\t\t\t\t-framework Foundation \\\n\t\t\t)\\\n\t\t\t$(if $(and $(call is-clang,$(CC)),$(filter gnu,$(objc-runtime))),\\\n\t\t\t\t-lBlocksRuntime \\\n\t\t\t)\\\n\t\t\t-lobjc \\\n\t\t)\\\n\t\t$(if $(call is-host-os-linux),\\\n\t\t\t-lpthread -lrt \\\n\t\t)\\\n\t\t-lm -ldl \\\n\t)\n\n$(dir $(TARGET)):\n\tmkdir -p $@\n\ndefine add-compile-rule\n$$(call objfile,$(1)): $(1) | $$(dir $$(call objfile,$(1))) $$(PRETEST)\n\t$$(strip \\\n\t\t$$(CC) -x $$(call language,$(1)) \\\n\t\t$$(if $$(filter -O%,$$(call compiler-flags,$(1))),,-O0) \\\n\t\t$$(call compiler-flags,$(1)) \\\n\t\t-c -o $$@ $$^ \\\n\t)\n\nifneq (yes,$$(mkdir_rule_created.$$(dir $$(call objfile,$(1)))))\n\n$$(dir $$(call objfile,$(1))):\n\tmkdir -p $$@\n\n$$(eval mkdir_rule_created.$$(dir $$(call objfile,$(1))) := yes)\nendif\n\nendef\n\n$(foreach __f,$(SRCFILES),\\\n    $(eval $(call add-compile-rule,$(__f)))\\\n)\n\nendif\n"
  },
  {
    "path": "tests/prepare-buildbot-emulators.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Installs an SDK and creates emulators for buildbot testing.\"\"\"\nfrom __future__ import print_function\n\nimport os\nimport platform\nimport shutil\nimport subprocess\n\n\nDEVICES = {\n    '10': ['x86'],\n    '16': ['armeabi-v7a', 'mips', 'x86'],\n    '23': ['armeabi-v7a', 'x86', 'x86_64'],\n}\n\n\ndef get_sdk():\n    os_name = platform.system().lower()\n    ext = 'tgz'\n    if os_name == 'darwin':\n        os_name = 'macosx'\n        ext = 'zip'\n\n    url = 'http://dl.google.com/android/android-sdk_r24.3.4-{}.{}'.format(\n        os_name, ext)\n\n    package_name = os.path.basename(url)\n    if os.path.exists(package_name):\n        os.remove(package_name)\n\n    sdk_dir = 'android-sdk-' + os_name\n    if os.path.exists(sdk_dir):\n        shutil.rmtree(sdk_dir)\n\n    subprocess.check_call(['curl', '-O', url])\n    if ext == 'tgz':\n        subprocess.check_call(['tar', 'xf', package_name])\n    else:\n        subprocess.check_call(['unzip', package_name])\n\n    if os.path.exists(package_name):\n        os.remove(package_name)\n\n    return sdk_dir\n\n\ndef install_components(sdk_manager):\n    packages = [\n        'platform-tools',\n    ]\n\n    for api, abis in DEVICES.items():\n        packages.append('android-' + api)\n        for abi in abis:\n            packages.append('sys-img-{}-android-{}'.format(abi, api))\n\n    print('Installing packages:')\n    print('\\n'.join(packages))\n\n    filter_arg = ','.join(packages)\n\n    cmd = [\n        sdk_manager, 'update', 'sdk', '--no-ui', '--all', '--filter',\n        filter_arg,\n    ]\n    subprocess.check_call(cmd)\n\n\ndef create_devices(sdk_manager):\n    for api, abis in DEVICES.items():\n        for abi in abis:\n            avd_name = '-'.join([abi, api])\n            api_name = 'android-' + api\n\n            print('Creating AVD for {}'.format(avd_name))\n\n            cmd = [\n                sdk_manager, 'create', 'avd', '--force', '--name', avd_name,\n                '--target', api_name, '--abi', abi,\n            ]\n            proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)\n            proc.communicate('no\\n')  # No custom hardware profile.\n\n\ndef main():\n    os.chdir(os.getenv('HOME'))\n\n    sdk_dir = get_sdk()\n    sdk_manager = os.path.join(sdk_dir, 'tools/android')\n    install_components(sdk_manager)\n    create_devices(sdk_manager)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tests/printers.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nfrom __future__ import print_function\n\nimport sys\n\nimport util\n\n\ndef format_stats_str(num_tests, stats, use_color):\n    pass_label = util.color_string('PASS', 'green') if use_color else 'PASS'\n    fail_label = util.color_string('FAIL', 'red') if use_color else 'FAIL'\n    skip_label = util.color_string('SKIP', 'yellow') if use_color else 'SKIP'\n    return '{pl} {p}/{t} {fl} {f}/{t} {sl} {s}/{t}'.format(\n        pl=pass_label, p=stats['pass'],\n        fl=fail_label, f=stats['fail'],\n        sl=skip_label, s=stats['skip'],\n        t=num_tests)\n\n\nclass Printer(object):\n    def print_result(self, result):\n        raise NotImplementedError\n\n    def print_summary(self, results, stats):\n        raise NotImplementedError\n\n\nclass FilePrinter(Printer):\n    def __init__(self, to_file, use_color=False, show_all=False):\n        self.file = to_file\n        self.use_color = use_color\n        self.show_all = show_all\n\n    def print_result(self, result):\n        print(result.to_string(colored=self.use_color), file=self.file)\n\n    def print_summary(self, results, stats):\n        print(file=self.file)\n        formatted = format_stats_str(stats.num_tests,\n                                     stats.global_stats, self.use_color)\n        print(formatted, file=self.file)\n        for suite, test_results in results.items():\n            stats_str = format_stats_str(len(test_results),\n                                         stats.suite_stats[suite],\n                                         self.use_color)\n            print(file=self.file)\n            print('{}: {}'.format(suite, stats_str), file=self.file)\n            for result in test_results:\n                if self.show_all or result.failed():\n                    print(result.to_string(colored=self.use_color),\n                          file=self.file)\n\n\nclass StdoutPrinter(FilePrinter):\n    def __init__(self, use_color=False, show_all=False):\n        super(StdoutPrinter, self).__init__(sys.stdout, use_color, show_all)\n"
  },
  {
    "path": "tests/run-all.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Runs all NDK tests.\n\nTODO: Handle default ABI case.\nThe old test script would build and test all ABIs listed in APP_ABI in a single\ninvocation if an explicit ABI was not given. Currently this will fall down over\nthat case. I've written most of the code to handle this, but I decided to\nfactor that for-each up several levels because it was going to make the device\ntests rather messy and I haven't finished doing that yet.\n\"\"\"\nfrom __future__ import print_function\n\nimport argparse\nimport atexit\nimport inspect\nimport os\nimport re\nimport shutil\nimport site\nimport sys\nimport tempfile\n\n\nSUPPORTED_ABIS = (\n    'armeabi',\n    'armeabi-v7a',\n    'armeabi-v7a-hard',\n    'arm64-v8a',\n    'mips',\n    'mips64',\n    'x86',\n    'x86_64',\n)\n\n\n# TODO(danalbert): How much time do we actually save by not running these?\nLONG_TESTS = (\n    'test-gnustl-full',\n    'test-gnustl_shared-exception-full',\n    'test-gnustl_static-exception-full',\n    'test-googletest-full',\n    'test-libc++-shared-full',\n    'test-libc++-static-full',\n)\n\n\ndef is_valid_platform_version(version_string):\n    match = re.match(r'^android-(\\d+)$', version_string)\n    if not match:\n        return False\n\n    # We don't support anything before Gingerbread.\n    version = int(match.group(1))\n    return version >= 9\n\n\ndef android_platform_version(version_string):\n    if is_valid_platform_version(version_string):\n        return version_string\n    else:\n        raise argparse.ArgumentTypeError(\n            'Platform version must match the format \"android-VERSION\", where '\n            'VERSION >= 9.')\n\n\nclass ArgParser(argparse.ArgumentParser):\n    def __init__(self):\n        super(ArgParser, self).__init__(\n            description=inspect.getdoc(sys.modules[__name__]))\n\n        self.add_argument(\n            'ndk', metavar='NDK', type=os.path.realpath,\n            help='Path to NDK under test.')\n\n        self.add_argument(\n            '--abi', choices=SUPPORTED_ABIS, required=True,\n            help=('Run tests against the specified ABI.'))\n        self.add_argument(\n            '--platform', default=None, type=android_platform_version,\n            help=('Run tests against the specified platform version. Defaults '\n                  'to the contents of APP_PLATFORM in jni/Application.mk'))\n        self.add_argument(\n            '--toolchain', default='clang', choices=('4.9', 'clang'),\n            help='Toolchain for building tests. Defaults to clang.')\n\n        self.add_argument(\n            '--show-commands', action='store_true',\n            help='Show build commands for each test.')\n        self.add_argument(\n            '--suite', default=None,\n            choices=('awk', 'build', 'device'),\n            help=('Run only the chosen test suite.'))\n\n        self.add_argument(\n            '--filter', help='Only run tests that match the given pattern.')\n        self.add_argument(\n            '--show-all', action='store_true',\n            help='Show all test results, not just failures.')\n\n        self.add_argument(\n            '--out-dir',\n            help='Path to build tests to. Will not be removed upon exit.')\n\n\ndef main():\n    orig_cwd = os.getcwd()\n\n    args = ArgParser().parse_args()\n    ndk_path = args.ndk\n\n    # We need to do this here rather than at the top because we load the module\n    # from a path that is given on the command line. We load it from the NDK\n    # given on the command line so this script can be run even without a full\n    # platform checkout.\n    site.addsitedir(os.path.join(ndk_path, 'python-packages'))\n\n    import printers\n    import runners\n\n    out_dir = args.out_dir\n    if out_dir is not None:\n        if not os.path.isabs(out_dir):\n            out_dir = os.path.join(orig_cwd, out_dir)\n        if os.path.exists(out_dir):\n            shutil.rmtree(out_dir)\n        os.makedirs(out_dir)\n    else:\n        out_dir = tempfile.mkdtemp()\n        atexit.register(lambda: shutil.rmtree(out_dir))\n\n    suites = ['awk', 'build', 'device']\n    if args.suite:\n        suites = [args.suite]\n\n    use_color = sys.stdin.isatty() and os.name != 'nt'\n    printer = printers.StdoutPrinter(use_color=use_color,\n                                     show_all=args.show_all)\n    good, _ = runners.run_single_configuration(\n        ndk_path, out_dir, printer, args.abi, args.toolchain, args.platform,\n        args.show_commands, suites=suites, test_filter=args.filter)\n    sys.exit(not good)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tests/run-boost-tests",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2016 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'optparse'\nrequire 'securerandom'\nrequire 'open3'\nrequire 'pathname'\nrequire_relative 'lib/log'\n\nEncoding.default_external = Encoding::UTF_8\nENV['LANG'] = 'en_US.UTF-8'\nENV['LC_ALL'] = ENV['LANG']\n\nmodule Enumerable\n    def deep_freeze\n        unless self.is_a? String\n            frozen = self.dup.each do |key, value|\n                if (value.is_a?(Enumerable) && !value.is_a?(String))\n                    value.deep_freeze\n                else\n                    value.freeze\n                end\n            end\n            self.replace(frozen)\n        end\n        self.freeze\n    end\nend\n\nclass Hash\n    def deep_freeze\n        frozen = self.dup.each do |key, value|\n            if (value.is_a?(Enumerable) && !value.is_a?(String))\n                value.deep_freeze\n            else\n                value.freeze\n            end\n        end\n        self.replace(frozen)\n        self.freeze\n    end\nend\n\nOPTIONS = {}\nOPTIONS[:testdir] = File.join(ENV['HOME'], '.crystax', 'boost')\nOPTIONS[:ndk] = File.expand_path('../..', __FILE__)\nOPTIONS[:stdlib] = 'gnu'\nOPTIONS[:lines_num_threshold] = 5000\n\noptparser = OptionParser.new do |o|\n    o.banner = <<-EOF\nTest Boost libraries with CrystaX NDK.\n\nThis requires a temporary NDK installation containing toolchain binaries for all target architectures.\n\nBy default, this will try with the current NDK directory, unless you use the --ndk-dir=<path> option.\n    EOF\n\n    o.separator \"\\nCommon options:\\n\\n\"\n\n    o.on(\"-h\", \"--help\", \"Show help screen and exit\") do\n        puts optparser\n        exit 0\n    end\n\n    OPTIONS[:verbose] = false\n    o.on(\"-v\", \"--[no-]verbose\", \"Enable verbose mode [#{OPTIONS[:verbose]}]\") do |v|\n        OPTIONS[:verbose] = v\n    end\n\n    begin\n        case RUBY_PLATFORM\n        when /linux/\n            numcpus = File.read(\"/proc/cpuinfo\").split(\"\\n\").select { |l| l =~ /^processor\\b/ }.size\n        when /darwin/\n            numcpus = `sysctl -n hw.ncpu`.chomp.to_i\n        end\n        OPTIONS[:jobs] = numcpus * 2\n    rescue\n        OPTIONS[:jobs] = 1\n    end\n    o.on(\"-jN\", \"--jobs=N\", Integer, \"Use specified number of build jobs\") do |j|\n        OPTIONS[:jobs] = j\n    end\n\n    OPTIONS[:log] = ENV['NDK_LOGFILE'] || File.join(OPTIONS[:testdir], 'test.log')\n    o.on(\"-l\", \"--log=FILE\", \"Log file [#{OPTIONS[:log]}]\") do |l|\n        OPTIONS[:log] = File.expand_path(l)\n    end\n\n    OPTIONS[:print_timestamps] = true\n    o.on(\"--[no-]print-timestamps\", \"Print timestamps in log [#{OPTIONS[:print_timestamps]}]\") do |p|\n        OPTIONS[:print_timestamps] = p\n    end\n\n    o.separator \"\\nRequired parameters:\\n\\n\"\n\n    o.on(\"--runner=RUNNER\", \"Explicit runner name\") do |r|\n        OPTIONS[:runner] = r\n    end\n\n    o.separator \"\\nOptional parameters:\\n\\n\"\n\n    o.on(\"--ndk-dir=PATH\", \"Specify NDK root path for the build [#{OPTIONS[:ndk]}]\") do |p|\n        OPTIONS[:ndk] = File.expand_path(p)\n    end\n\n    o.on(\"--test-dir=PATH\", \"Specify test directory [#{OPTIONS[:testdir]}]\") do |p|\n        OPTIONS[:testdir] = File.expand_path(p)\n    end\n\n    OPTIONS[:abis] = ['armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', 'x86', 'mips', 'arm64-v8a', 'x86_64', 'mips64']\n    o.on(\"--abis=LIST\", Array, \"Specify list of target ABIs [#{OPTIONS[:abis].join(',')}]\") do |a|\n        OPTIONS[:abis] = a\n    end\n\n    OPTIONS[:adb] = 'adb'\n    o.on(\"--adb=PATH\", \"Specify which adb to use [#{OPTIONS[:adb]}]\") do |p|\n        OPTIONS[:adb] = File.expand_path(p)\n    end\n\n    o.on(\"--libraries=LIST\", Array, \"Explicit list of libraries to test [all]\") do |l|\n        OPTIONS[:libraries] = l\n    end\n\n    OPTIONS[:device_path] = \"/data/local/tmp/boost-#{SecureRandom.uuid}\"\n    o.on(\"--device-path=PATH\", \"Path on device where to push files [#{OPTIONS[:device_path]}]\") do |p|\n        OPTIONS[:device_path] = p\n    end\n\n    OPTIONS[:pie] = true\n    o.on(\"--[no-]pie\", \"Produce PIE-enabled binaries to test [#{OPTIONS[:pie]}]\") do |p|\n        OPTIONS[:pie] = false\n    end\n\n    OPTIONS[:fetch_sources] = true\n    o.on(\"--skip-fetch-sources\", \"Skip fetch&update of Boost sources [#{!OPTIONS[:fetch_sources]}]\") do\n        OPTIONS[:fetch_sources] = false\n    end\n\n    OPTIONS[:publish] = false\n    o.on(\"--publish-results\", \"Publish test results, uploading them to the public FTP [#{OPTIONS[:publish]}]\") do\n        OPTIONS[:publish] = true\n    end\n\n    OPTIONS[:toolchain_versions] = Dir.glob(File.join(OPTIONS[:ndk], 'build', 'core', 'toolchains', '*')).select do |e|\n        File.directory?(e) && File.exists?(File.join(e, 'setup.mk')) && File.exists?(File.join(e, 'config.mk'))\n    end.map { |e| File.basename(e) }.reject do |e|\n    end.reject do |e|\n        # Reject aaa-bbb-ccc-clang toolchains. All clang toolchains must end with version number,\n        # such as arm-linux-androideabi-clang3.8\n        File.basename(e) =~ /clang$/\n    end.map do |e|\n        e.sub(/^.*-([^-]+)$/, '\\1')\n    end.sort.uniq.map { |e| e.sub(/^(\\d.*)$/, 'gcc\\1') }.select { |e| e =~ /^(gcc|clang)/ }\n\n    o.on(\"--toolchain-versions=LIST\", Array, \"Toolchain versions [#{OPTIONS[:toolchain_versions].join(',')}]\") do |l|\n        OPTIONS[:toolchain_versions] = l\n    end\n\n    OPTIONS[:tag] = 'master'\n    o.on(\"--tag=TAG\", \"Boost tag to test ('master' or 'develop') [#{OPTIONS[:tag]}]\") do |t|\n        OPTIONS[:tag] = t\n    end\n\n    OPTIONS[:timeout] = 15\n    o.on(\"--timeout=VALUE\", \"Timeout for one separate test in minutes [#{OPTIONS[:timeout]}]\") do |t|\n        OPTIONS[:timeout] = t\n    end\n\n    o.on(\"--std=STD\", \"Use specified C++ standard to build tests\") do |s|\n        OPTIONS[:std] = s\n    end\n\n    o.on(\"--stdlib=STDLIB\", \"Use specified C++ Standard Library to build tests [#{OPTIONS[:stdlib]}]\") do |s|\n        OPTIONS[:stdlib] = s\n    end\n\n    o.on(\"--emulator-tag=TAG\", \"Run tests only on emulators matching specified tag\") do |t|\n        OPTIONS[:emulator_tag] = t\n    end\n\n    o.on(\"--runner-comment-header=FILE\", \"Header of runner comment\") do |h|\n        OPTIONS[:runner_comment_header] = File.expand_path(h)\n    end\n\n    o.on(\"--runner-comment-footer=FILE\", \"Footer of runner comment\") do |f|\n        OPTIONS[:runner_comment_footer] = File.expand_path(f)\n    end\n\n    OPTIONS[:boost_url] = 'https://github.com/boostorg/boost'\n    o.on(\"--boost-url=URL\", \"Use alternative git URL for Boost sources [#{OPTIONS[:boost_url]}]\") do |u|\n        OPTIONS[:boost_url] = u\n    end\n\n    OPTIONS[:boost_build_url] = 'https://github.com/boostorg/build.git'\n    o.on(\"--boost-build-url=URL\", \"Use alternative git URL for Boost.Build sources [#{OPTIONS[:boost_build_url]}]\") do |u|\n        OPTIONS[:boost_build_url] = u\n    end\n\n    OPTIONS[:boost_regression_url] = 'https://github.com/boostorg/regression.git'\n    o.on(\"--boost-regression-url=URL\", \"Use alternative git URL for Boost.Regression sources [#{OPTIONS[:boost_regression_url]}]\") do |u|\n        OPTIONS[:boost_regression_url] = u\n    end\n\n    o.on(\"--lines-num-threshold=N\", Integer) do |n|\n        OPTIONS[:lines_num_threshold] = n\n    end\n\nend\noptparser.parse!(ARGV)\n\nif !ARGV.empty?\n    $stderr.puts \"ERROR: Unknown options: #{ARGV.join(\" \")}\"\n    $stderr.puts \"\"\n    $stderr.puts optparser\n    exit 1\nend\n\nOPTIONS.deep_freeze\n\nif OPTIONS[:runner].nil?\n    $stderr.puts \"ERROR: Runner name is not specified\"\n    $stderr.puts \"\"\n    $stderr.puts optparser\n    exit 1\nend\n\ncase OPTIONS[:tag]\nwhen 'master', 'develop'\n    # OK\nelse\n    $stderr.puts \"ERROR: Wrong tag value: '#{OPTIONS[:tag]}'\"\n    exit 1\nend\n\ncase OPTIONS[:stdlib]\nwhen 'gnu', 'llvm'\n    # OK\nelse\n    $stderr.puts \"ERROR: Wrong 'stdlib': '#{OPTIONS[:stdlib]}'\"\n    exit 1\nend\n\nif OPTIONS[:lines_num_threshold] <= 0\n    $stderr.puts \"ERROR: Wrong lines-num-threshold value: '#{OPTIONS[:lines_num_threshold]}'\"\n    exit 1\nend\n\nREGRESSION_DIR = File.join(OPTIONS[:testdir], OPTIONS[:tag], 'regression')\n\nBOOST_SRCDIR    = File.join(OPTIONS[:testdir], OPTIONS[:tag], 'src', 'boost')\nBOOST_BB_SRCDIR = File.join(OPTIONS[:testdir], OPTIONS[:tag], 'src', 'boost_bb')\nBOOST_RR_SRCDIR = File.join(OPTIONS[:testdir], OPTIONS[:tag], 'src', 'boost_rr')\n\nWLOG = \"/tmp/wrappers-#{SecureRandom.uuid}.log\"\nat_exit { FileUtils.rm_f WLOG }\nFileUtils.rm_f WLOG\nFileUtils.touch WLOG\n\nFileUtils.mkdir_p OPTIONS[:testdir]\n\nLog.timestamps = OPTIONS[:print_timestamps]\n\nLog.add StdLogger.new(OPTIONS[:verbose] ? Log::DEBUG : Log::NOTICE)\nLog.add FileLogger.new(OPTIONS[:log], Log::DEBUG) if OPTIONS[:log]\n\ndef elapsed(seconds)\n    s = seconds % 60\n    m = (seconds / 60) % 60\n    h = seconds / 3600\n    \"%d:%02d:%02d\" % [h,m,s]\nend\n\ndef run(*args, &block)\n    env = args.first.is_a?(Hash) ? args.shift : {}\n    options = args.last.is_a?(Hash) ? args.pop : {}\n    cmd = args.map { |a| a =~ /\\s+/ ? \"'#{a}'\" : a }.join(' ')\n    Log.info \"## COMMAND: #{cmd}\"\n    Open3.popen3(env, *args, options) do |i,o,e,t|\n        if block_given?\n            yield i,o,e\n        else\n            i.close\n            {o => '>', e => '*'}.map do |io,s|\n                Thread.start do\n                    while line = io.gets.chomp rescue nil\n                        Log.info \"   #{s} #{line}\"\n                    end\n                end\n            end.each(&:join)\n        end\n        t.join\n        raise \"'#{cmd}' failed with exit code #{t.value.to_i}\" unless t.value.success?\n    end\nend\n\ndef fetch(url, dir, branch)\n    Log.info \"=== Fetching #{url} to #{dir} (branch #{branch})\"\n\n    FileUtils.mkdir_p(dir) if !File.directory?(dir)\n    FileUtils.cd(dir) do\n        run 'git', 'init' unless File.exists?(File.join(dir, '.git'))\n        run 'git', 'config', 'remote.origin.url', url\n        run 'git', 'config', 'remote.origin.fetch', '+refs/heads/*:refs/remotes/origin/*'\n        run 'git', 'fetch', '--prune', 'origin'\n        run 'git', 'reset', '--hard'\n        run 'git', 'clean', '-ffddx'\n        ['git reset --hard', 'git clean -ffddx'].each do |cmd|\n            run 'git', 'submodule', 'foreach', '--recursive', cmd\n        end\n\n        sha1, e, s = Open3.capture3(\"git rev-parse --verify origin/#{branch}\")\n        raise e unless s.success?\n        sha1.chomp!\n        raise \"Can't detect SHA1 of branch #{branch}\" if sha1.empty?\n\n        run 'git', 'checkout', '-q', '-f', sha1\n        run 'git', 'branch', '-D', branch rescue nil\n\n        run 'git', 'checkout', '-b', branch\n        run 'git', 'submodule', 'init'\n        run 'git', 'submodule', 'sync', '--recursive'\n        run 'git', 'submodule', 'update', '--recursive'\n    end\nend\n\ndef rm_rf(path)\n    if File.directory?(path)\n        run(\"rm -Rfv #{path}\") do |i,o,e|\n            i.close\n\n            ot = Thread.start do\n                cnt = 0\n                total = 0\n                while !o.gets.nil?\n                    cnt += 1\n                    next if cnt < OPTIONS[:lines_num_threshold]\n\n                    total += cnt\n                    cnt = 0\n                    Log.info \"#{total} files removed\"\n                end\n                Log.info \"#{total + cnt} files removed\" if cnt > 0\n            end\n\n            et = Thread.start do\n                while line = e.gets\n                    Log.info \"   * #{line}\"\n                end\n            end\n\n            ot.join\n            et.join\n        end\n    else\n        FileUtils.rm_rf path\n    end\nend\n\ndef fetch_boost_impl(url, dir, branch, name)\n    max_attempts = 6\n    max_attempts.times do |i|\n        attempt = i + 1\n        begin\n            Log.notice \"Fetching #{name} sources (attempt ##{attempt})\"\n            fetch url, dir, branch\n            return true\n        rescue => err\n            Log.warning \"Can't fetch #{url} to #{dir} (attempt ##{attempt}): #{err.message}\"\n            rm_rf dir\n            sleep attempt * 30\n        end\n    end\n    raise \"Can't fetch #{url} to #{dir} with #{max_attempts} attempts due to continuous errors\"\nend\n\ndef fetch_boost(dir)\n    fetch_boost_impl OPTIONS[:boost_url], dir, OPTIONS[:tag], \"Boost\"\nend\n\ndef fetch_boost_bb(dir)\n    fetch_boost_impl OPTIONS[:boost_build_url], dir, 'develop', \"Boost.Build\"\nend\n\ndef fetch_boost_rr(dir)\n    fetch_boost_impl OPTIONS[:boost_regression_url], dir, 'develop', \"Boost.Regression\"\nend\n\ndef fetch_all\n    if OPTIONS[:fetch_sources]\n        fetch_boost BOOST_SRCDIR\n        fetch_boost_bb BOOST_BB_SRCDIR\n        fetch_boost_rr BOOST_RR_SRCDIR\n    else\n        raise \"Boost sources are not fetched\" unless File.directory?(BOOST_SRCDIR)\n        raise \"Boost.Build sources are not fetched\" unless File.directory?(BOOST_BB_SRCDIR)\n        raise \"Boost.Regression sources are not fetched\" unless File.directory?(BOOST_RR_SRCDIR)\n    end\nend\n\ndef generate_toolchain(abi, type, version, dir)\n    apilevel = ['arm64-v8a', 'x86_64', 'mips64'].include?(abi) ? 21 : 9\n\n    tcname = case abi\n             when /^armeabi/\n                 'arm-linux-androideabi'\n             when /^arm64/\n                 'aarch64-linux-android'\n             when 'mips'\n                 'mipsel-linux-android'\n             when 'mips64'\n                 'mips64el-linux-android'\n             when 'x86', 'x86_64'\n                 abi\n             else\n                 raise \"Unknown ABI: #{abi}\"\n             end\n\n    tcprefix = case abi\n               when 'x86'\n                   'i686-linux-android'\n               when 'x86_64'\n                   'x86_64-linux-android'\n               else\n                   tcname\n               end\n\n    llvmtripple = case abi\n                  when 'armeabi'\n                      'armv5te-none-linux-androideabi'\n                  when /^armeabi-v7a/\n                      'armv7-none-linux-androideabi'\n                  when /^arm64/\n                      'aarch64-none-linux-android'\n                  when 'x86'\n                      'i686-none-linux-android'\n                  when 'x86_64'\n                      'x86_64-none-linux-android'\n                  when 'mips'\n                      'mipsel-none-linux-android'\n                  when 'mips64'\n                      'mips64el-none-linux-android'\n                  else\n                      raise \"Unknown ABI: #{abi}\"\n                  end\n\n    arch = case abi\n           when /^armeabi/\n               'arm'\n           when /^arm64/\n               'arm64'\n           else\n               abi\n           end\n\n    flags = []\n    ldflags = []\n    case abi\n    when 'armeabi'\n        flags += ['-march=armv5te', '-mtune=xscale', '-msoft-float']\n    when 'armeabi-v7a'\n        flags += ['-march=armv7-a', '-mfpu=vfpv3-d16', '-mfloat-abi=softfp']\n        ldflags << '-Wl,--fix-cortex-a8'\n    when 'armeabi-v7a-hard'\n        flags += ['-march=armv7-a', '-mfpu=vfpv3-d16', '-mhard-float']\n        ldflags << '-Wl,--fix-cortex-a8'\n        ldflags << '-Wl,--no-warn-mismatch'\n    when 'x86'\n        flags << '-m32'\n    when 'x86_64'\n        flags << '-m64'\n    when 'mips'\n        flags += ['-mabi=32', '-mips32']\n    when 'mips64'\n        flags += ['-mabi=64', '-mips64r6']\n    end\n\n    case RUBY_PLATFORM\n    when /linux/\n        hostos = 'linux'\n    when /darwin/\n        hostos = 'darwin'\n    else\n        raise \"Unsupported host platform: #{RUBY_PLATFORM}\"\n    end\n\n    hosttag = \"%s-%s\" % [hostos, `uname -m`.chomp]\n\n    case type\n    when :gcc\n        gcc_version = version\n        llvm_version = `/bin/bash -c 'source #{OPTIONS[:ndk]}/build/instruments/dev-defaults.sh && echo $DEFAULT_LLVM_VERSION'`.split(\"\\n\").first\n\n        gnulibcxx_version = gcc_version\n        llvmlibcxx_version = llvm_version\n\n        gcctcpath = File.join(OPTIONS[:ndk], 'toolchains', \"#{tcname}-#{gcc_version}\", 'prebuilt', hosttag)\n        ccs = ['gcc', 'g++']\n    when :clang\n        llvm_version = version\n        gcc_version = `/bin/bash -c 'source #{OPTIONS[:ndk]}/build/instruments/dev-defaults.sh && echo $DEFAULT_GCC_VERSION'`.split(\"\\n\").first\n\n        gnulibcxx_version = gcc_version\n        llvmlibcxx_version = llvm_version\n\n        gcctcpath = File.join(OPTIONS[:ndk], 'toolchains', \"#{tcname}-#{gcc_version}\", 'prebuilt', hosttag)\n        llvmtcpath = File.join(OPTIONS[:ndk], 'toolchains', \"llvm-#{llvm_version}\", 'prebuilt', hosttag)\n        ccs = ['clang', 'clang++']\n\n        flags << \"-fno-integrated-as\"\n    else\n        raise \"Unknown toolchain type: #{type.inspect}\"\n    end\n\n    sysroot       = File.join(OPTIONS[:ndk], 'platforms', \"android-#{apilevel}\", \"arch-#{arch}\")\n    libcrystax    = File.join(OPTIONS[:ndk], 'sources', 'crystax')\n    gnulibcxx     = File.join(OPTIONS[:ndk], 'sources', 'cxx-stl', 'gnu-libstdc++', gnulibcxx_version)\n    llvmlibcxx    = File.join(OPTIONS[:ndk], 'sources', 'cxx-stl', 'llvm-libc++', llvmlibcxx_version)\n    llvmlibcxxabi = File.join(OPTIONS[:ndk], 'sources', 'cxx-stl', 'llvm-libc++abi')\n    compilerrt    = File.join(OPTIONS[:ndk], 'sources', 'android', 'compiler-rt')\n\n    flags << \"--sysroot=#{sysroot}\"\n    flags << \"-fPIC\"\n    if OPTIONS[:pie]\n        flags << \"-fPIE\"\n        ldflags << \"-pie\"\n    end\n\n    flags << '-g'\n\n    ldlibs = []\n    case OPTIONS[:stdlib]\n    when 'gnu'\n        libcxx_incdirs = [\n            File.join(gnulibcxx, 'include'),\n            File.join(gnulibcxx, 'include', 'backward'),\n            File.join(gnulibcxx, 'libs', abi, 'include'),\n        ]\n        libcxx_libdir = File.join(gnulibcxx, 'libs', abi)\n        ldlibs << 'gnustl_shared'\n    when 'llvm'\n        libcxx_incdirs = [\n            File.join(llvmlibcxx, 'libcxx', 'include'),\n            File.join(llvmlibcxxabi, 'libcxxabi', 'include'),\n        ]\n        libcxx_libdir = File.join(llvmlibcxx, 'libs', abi)\n        ldlibs << 'c++_shared'\n    end\n\n    ldlibs << 'compiler_rt_static' if type == :clang\n\n    ccs.each do |cc|\n        tool = File.join(dir, \"#{cc}-#{version}\")\n        FileUtils.mkdir_p File.dirname(tool)\n        File.open(tool, 'w') do |f|\n            f.puts <<-EOF\n#!/usr/bin/env ruby\n\nrequire 'fileutils'\n\nLINKER = !ARGV.include?('-c') && !ARGV.include?('-emit-pth')\n\n# Remove any wrong input parameters\n$args = ARGV.reject { |a| ['-m32', '-m64', '-pthread', '-lpthread', '-lutil', '-lrt'].include?(a) }\n\n$target = nil\nif LINKER\n    next_arg_is_target = false\n    $args.each do |a|\n        $target = a if next_arg_is_target\n        next_arg_is_target = (a == '-o')\n    end\nend\n\n$flags = []\n\n$flags += #{flags.inspect}\n\ndef add_libpath(d)\n    $flags << ('-L%s' % d)\n    File.open('%s.ldlp' % $target, 'a') do |f|\n        f.puts d\n    end unless $target.nil?\nend\n\nif LINKER\n    $flags += #{ldflags.inspect}\n\n    FileUtils.rm_f('%s.ldlp' % $target) unless $target.nil?\n\n    add_libpath '#{File.join(libcrystax, 'libs', abi)}'\n    add_libpath '#{libcxx_libdir}'\n\n    $flags << '-L#{File.join(compilerrt, 'libs', abi)}'\nelse\n    $flags += [#{libcxx_incdirs.map { |e| \"'#{e}'\" }.join(',')}].map { |e| '-I%s' % e }\n    $flags << '-Wno-long-long'\nend\n\n$args = $flags + $args\n$args += #{ldlibs.map { |l| \"-l#{l}\" }.inspect} if LINKER && !$target.nil?\n\ndef run(*a)\n    File.open('#{WLOG}', 'a') do |f|\n        f.flock(File::LOCK_EX)\n        f.puts '## COMMAND: %s' % a.join(' ')\n    end\n    Kernel.exec(*a)\nend\n\n            EOF\n\n            case type\n            when :gcc\n                exe = File.join(gcctcpath, 'bin', \"#{tcprefix}-#{cc}\")\n                f.puts \"run('#{exe}', *$args)\"\n            when :clang\n                exe = File.join(llvmtcpath, 'bin', cc)\n                f.puts \"run('#{exe}', '-target', '#{llvmtripple}', '-gcc-toolchain', '#{gcctcpath}', *$args)\"\n            else\n                raise \"Wrong toolchain type: #{type.inspect}\"\n            end\n        end\n\n        FileUtils.chmod \"a+x\", tool\n    end\n\n    ['ar', 'as'].each do |t|\n        tool = File.join(dir, t)\n        FileUtils.mkdir_p File.dirname(tool)\n        File.open(tool, 'w') do |f|\n            f.puts <<-EOF\n#!/usr/bin/env ruby\n\ndef run(*a)\n    File.open('#{WLOG}', 'a') do |f|\n        f.flock(File::LOCK_EX)\n        f.puts '## COMMAND: %s' % a.join(' ')\n    end\n    Kernel.exec(*a)\nend\n\n            EOF\n\n            case type\n            when :gcc\n                f.puts \"run '#{File.join(gcctcpath, 'bin', \"#{tcprefix}-#{t}\")}', *ARGV\"\n            when :clang\n                f.puts \"run '#{File.join(llvmtcpath, 'bin', \"llvm-#{t}\")}', *ARGV\"\n            else\n                raise \"Wrong toolchain type: #{type.inspect}\"\n            end\n        end\n\n        FileUtils.chmod \"a+x\", tool\n    end\n\n    ['ranlib', 'strip'].each do |t|\n        tool = File.join(dir, t)\n        FileUtils.mkdir_p File.dirname(tool)\n        File.open(tool, 'w') do |f|\n            f.puts <<-EOF\n#!/usr/bin/env ruby\n\ndef run(*a)\n    File.open('#{WLOG}', 'a') do |f|\n        f.flock(File::LOCK_EX)\n        f.puts '## COMMAND: %s' % a.join(' ')\n    end\n    Kernel.exec(*a)\nend\n\nrun '#{File.join(gcctcpath ,'bin', \"#{tcprefix}-#{t}\")}', *ARGV\n            EOF\n        end\n\n        FileUtils.chmod \"a+x\", tool\n    end\nend\n\ndef generate_adbrunner(abi, dir, strip)\n    libdir = File.join(dir, 'lib')\n    FileUtils.rm_rf libdir\n\n    adbrunner = File.join(dir, 'adbrunner')\n\n    FileUtils.mkdir_p File.dirname(adbrunner)\n    File.open(adbrunner, 'w') do |f|\n        f.puts <<-EOF\n#!/usr/bin/env ruby\n\nskip = ['bcp-test']\n\nexe = File.basename(ARGV.first) rescue nil\n\nFile.open('#{WLOG}', 'a') do |f|\n    f.flock(File::LOCK_EX)\n    f.puts '## COMMAND: %s' % ([$0] + ARGV).join(' ')\n\n    if skip.include?(exe)\n        f.puts \"SKIP running %s on Android\" % exe\n        exit 0\n    end\nend\n\nKernel.exec('#{File.join(OPTIONS[:ndk], 'tools', 'adbrunner')}',\n    #{\"'--emulator-tag=#{OPTIONS[:emulator_tag]}',\" unless OPTIONS[:emulator_tag].nil?}\n    '--no-print-timestamps',\n    '--log=#{WLOG}',\n    '--abi=#{abi}',\n    '--adb=#{OPTIONS[:adb]}',\n    '--timeout=#{OPTIONS[:timeout]*60 - 5}',\n    '--strip=#{strip}',\n    '--strip-dir=#{libdir}',\n    '--#{'no-' unless OPTIONS[:pie]}pie',\n    '--verbose-errors',\n    *ARGV)\n        EOF\n    end\n\n    FileUtils.chmod \"a+x\", adbrunner\nend\n\ndef copy_boost(dir)\n    # WARNING! This is intentionally just 'rm', not 'rm -rf'.\n    # This is needed to remove $DIR if it's symlink.\n    # Thus, we try to remove it and ignore any errors.\n    # In case it's symlink - it will be removed.\n    # In case it's directory - nothing will happen.\n    FileUtils.rm_f dir rescue nil\n\n    FileUtils.mkdir_p dir\n    run 'rsync', '-a', \"#{BOOST_SRCDIR}/\", dir\nend\n\ndef copy_boost_bb(dir)\n    FileUtils.mkdir_p dir\n    run 'rsync', '-a', \"#{BOOST_BB_SRCDIR}/\", dir\nend\n\ndef copy_boost_rr(dir)\n    FileUtils.mkdir_p dir\n    run 'rsync', '-a', \"#{BOOST_RR_SRCDIR}/\", dir\nend\n\nPJL = \"/tmp/process_jam_log.#{SecureRandom.uuid}\"\nat_exit { FileUtils.rm_f PJL }\n$HOST_PJL = nil\n\ndef cleanup_pjl(dir)\n    Dir.glob(File.join(dir, 'build', 'bin', '**', 'process_jam_log')).select do |e|\n        File.file?(e)\n    end.each do |f|\n        FileUtils.rm_f f\n    end\n    return if $HOST_PJL.nil?\n\n    pjl = File.join(dir, 'stage', 'bin', $HOST_PJL)\n    FileUtils.mkdir_p File.dirname(pjl)\n    FileUtils.cp PJL, pjl\nend\n\ndef prepare_boost_tools(dir)\n    FileUtils.mkdir_p dir\n\n    runpy = File.join(dir, 'run.py')\n    FileUtils.rm_f runpy\n    FileUtils.cp File.join(BOOST_RR_SRCDIR, 'testing', 'src', 'run.py'), runpy\n    FileUtils.chmod 'a+x', runpy\n\n    boost_bb = File.join(dir, 'boost_bb')\n    copy_boost_bb boost_bb\n\n    boost_rr = File.join(dir, 'boost_regression')\n    copy_boost_rr boost_rr\n\n    [\n        'collect_and_upload_logs.py',\n        'process_jam_log.py',\n        'regression.py',\n    ].each do |t|\n        FileUtils.rm_f File.join(dir, t)\n        FileUtils.cp File.join(boost_rr, 'testing', 'src', t), dir\n    end\n\n    $HOST_PJL = nil\n    cleanup_pjl boost_rr\n\n    FileUtils.rm_f File.join(dir, 'user-config.jam')\n    FileUtils.cd(dir) do\n        run runpy, '--use-local', \"--tag=#{OPTIONS[:tag]}\", \"--bjam-options=-j#{OPTIONS[:jobs]}\", 'setup'\n    end\n\n    $HOST_PJL = Dir.glob(File.join(boost_rr, 'stage', 'bin', '**', 'process_jam_log')).select do |e|\n        File.file?(e)\n    end.map do |f|\n        Pathname.new(f).relative_path_from(Pathname.new(File.join(boost_rr, 'stage', 'bin'))).to_s\n    end.first\n    raise \"Can't find just built process_jam_log\" if $HOST_PJL.nil?\n\n    FileUtils.rm_f PJL\n    FileUtils.cp File.join(boost_rr, 'stage', 'bin', $HOST_PJL), PJL\nend\n\ndef generate_runner_comment(comment, configjam, compilers)\n    FileUtils.mkdir_p File.dirname(comment)\n    File.open(comment, 'w') do |f|\n        File.open(OPTIONS[:runner_comment_header], 'r') do |r|\n            while line = r.gets\n                f.puts line\n            end\n        end unless OPTIONS[:runner_comment_header].nil?\n\n        uname, e, s = Open3.capture3('uname -a')\n        raise e unless s.success?\n\n        f.puts <<-EOF\n<p>\n<pre>\n$ uname -a\n#{uname}\n</pre>\n<pre>\n$ cat user-config.jam\n#{File.read(configjam)}\n</pre>\n</p>\n        EOF\n\n        f.puts '<pre>'\n        compilers.each do |cc|\n            f.puts \"$ #{cc} --version\"\n            f.puts `#{cc} --version 2>&1`.split(\"\\n\").select { |l| !l.empty? }.join(\"\\n\")\n            f.puts \"\"\n        end\n        f.puts '</pre>'\n\n        File.open(OPTIONS[:runner_comment_footer], 'r') do |r|\n            while line = r.gets\n                f.puts line\n            end\n        end unless OPTIONS[:runner_comment_footer].nil?\n    end\nend\n\ndef test_for_abi(abi, testdir)\n    Log.notice \"Run regression testing [#{abi}]\"\n\n    FileUtils.mkdir_p testdir\n\n    srcdir = File.join(testdir, 'test')\n    FileUtils.mkdir_p srcdir\n\n    configjam = File.join(testdir, 'config.jam')\n    FileUtils.rm_f configjam\n\n    File.open(configjam, \"a\") do |f|\n        f.puts \"import python ;\"\n        # This is needed for library check scripts, running on host machine\n        # Here we just specify \"using python\" and rely on usual Python auto-detecting\n        # technique implemented in the Boost scripts\n        f.puts \"using python ;\"\n\n        Dir.glob(File.join(OPTIONS[:ndk], 'sources/python/*')).map do |e|\n            File.basename(e)\n        end.each do |python_version|\n            dir = File.join(OPTIONS[:ndk], 'sources/python', python_version)\n            # This line needed to specify target python - i.e. Python-for-Android\n            # This Python implementation will be used for target tests - i.e. for Boost.Python\n            f.puts \"using python : #{python_version} : #{dir} : #{dir}/include/python : #{dir}/libs/#{abi} : <target-os>android ;\"\n        end\n    end\n\n    toolsets = []\n    toolsets_path = []\n    cxxbins = []\n    strip = nil\n\n    OPTIONS[:toolchain_versions].each do |tv|\n        if tv =~ /^clang/\n            ttype = :clang\n            tversion = tv.sub(/^clang-?/, '')\n            cxxbin = \"clang++-#{tversion}\"\n        else\n            ttype = :gcc\n            tversion = tv.sub(/^gcc-?/, '')\n            cxxbin = \"g++-#{tversion}\"\n        end\n\n        # clang toolchains don't support armeabi good\n        next if ttype == :clang && abi == 'armeabi'\n\n        toolset = \"#{ttype}-#{tversion}\"\n\n        targetbin = File.join(testdir, toolset)\n        FileUtils.rm_rf targetbin\n\n        # Generate toolchain wrappers\n        generate_toolchain abi, ttype, tversion, targetbin\n\n        toolsets << toolset\n        toolsets_path << targetbin\n\n        File.open(configjam, \"a\") do |f|\n            f.puts \"using #{ttype} : #{tversion} : #{targetbin}/#{cxxbin} ;\"\n        end\n\n        cxxbins << File.join(targetbin, cxxbin)\n\n        strip = File.join(targetbin, 'strip') if strip.nil? && File.executable?(File.join(targetbin, 'strip'))\n    end\n\n    raise \"No C++ compilers detected\" if cxxbins.empty?\n    raise \"Can't detect 'strip' for #{abi}\" if strip.nil?\n\n    generate_adbrunner abi, testdir, strip\n\n    copy_boost File.join(srcdir, 'boost_root')\n    prepare_boost_tools srcdir\n\n    comment = File.join(srcdir, 'comment.html')\n    generate_runner_comment comment, configjam, cxxbins\n\n    runpy = [\n        File.join(srcdir, 'run.py'),\n        '--use-local',\n        '--platform=Android',\n        \"--tag=#{OPTIONS[:tag]}\",\n        \"--runner=#{OPTIONS[:runner]}\",\n        \"--toolsets=#{toolsets.join(',')}\",\n    ]\n\n    bjam_options = [\n        \"-j#{OPTIONS[:jobs]}\",\n        \"-m64\",\n        \"variant=release\",\n        \"link=static,shared\",\n        \"runtime-link=shared\",\n        \"threading=multi\",\n        \"target-os=android\",\n        \"testing.launcher=#{File.join(testdir, 'adbrunner')}\",\n    ]\n\n    bjam_options << \"cxxflags='-std=#{OPTIONS[:std]}'\" unless OPTIONS[:std].nil?\n\n    bjam_options << \"binary-format=elf\"\n\n    case abi\n    when /^armeabi/, 'x86', 'mips'\n        bjam_options << \"address-model=32\"\n    when /^arm64/, 'x86_64', 'mips64'\n        bjam_options << \"address-model=64\"\n    else\n        raise \"Can't detect address model for abi '#{abi}'\"\n    end\n\n    case abi\n    when /^armeabi/, /^arm64/\n        bjam_options << \"architecture=arm\"\n        bjam_options << \"abi=aapcs\"\n    when 'x86', 'x86_64'\n        bjam_options << \"architecture=x86\"\n        bjam_options << \"abi=sysv\"\n    when 'mips'\n        bjam_options << \"architecture=mips1\"\n        bjam_options << \"abi=o32\"\n    when 'mips64'\n        bjam_options << \"architecture=mips1\"\n        bjam_options << \"abi=o64\"\n    end\n\n    resultsdir = File.join(srcdir, 'results')\n    if File.directory?(resultsdir)\n        # Remove this directory, but keep *.zip\n        tmpresults = File.join(srcdir, \"results.#{SecureRandom.uuid}\")\n        FileUtils.rm_rf tmpresults\n        FileUtils.mkdir_p File.dirname(tmpresults)\n        FileUtils.mv resultsdir, tmpresults\n        FileUtils.mkdir_p resultsdir\n        Dir.glob(File.join(tmpresults, '*.zip')).each do |zip|\n            FileUtils.mv zip, resultsdir\n        end\n\n        rm_rf tmpresults\n    else\n        FileUtils.mkdir_p resultsdir\n    end\n\n    actions = ['test-run']\n    actions += ['test-process', 'collect-logs', 'upload-logs'] if OPTIONS[:publish]\n\n    userconfigjam = File.join(srcdir, 'user-config.jam')\n    at_exit { FileUtils.rm_f userconfigjam }\n    FileUtils.rm_f userconfigjam\n    FileUtils.cp configjam, userconfigjam\n\n    FileUtils.cd(srcdir) do\n        actions.each do |action|\n            Log.info \"=== run.py: #{action}\"\n\n            cleanup_pjl File.join(srcdir, 'boost_regression')\n\n            case action\n            when 'test-run'\n                args = runpy.dup\n                args += [\n                    \"--comment=#{comment}\",\n                    \"--timeout=#{OPTIONS[:timeout]}\",\n                    \"--bjam-options=#{bjam_options.join(' ')}\",\n                ]\n                args << \"--libraries=#{OPTIONS[:libraries].join(',')}\" unless OPTIONS[:libraries].nil?\n                args << action\n                run(*args)\n\n                bjamlog = File.join(resultsdir, 'bjam.log')\n                raise \"Can't find #{bjamlog} after finishing 'test-run'\" unless File.exists?(bjamlog)\n                bjamlast = `tail -n 20 #{bjamlog}`.split(\"\\n\").map(&:chomp).reject(&:empty?)\n                raise \"Bjam failed (see #{bjamlog} for full details):\\n#{bjamlast.join(\"\\n\")}\" if bjamlast.last.to_s =~ /^error:/\n            when 'test-process'\n                run(*runpy, '--verbose-log-processing', action) do |i,o,e|\n                    i.close\n\n                    wt = Thread.start do\n                        s = Time.now\n                        while true\n                            sleep 120\n                            Log.info \"test-process: #{elapsed(Time.now - s)}\"\n                        end\n                    end\n\n                    ot = Thread.start do\n                        cnt = 0\n                        total = 0\n                        while !o.gets.nil?\n                            cnt += 1\n                            next if cnt < OPTIONS[:lines_num_threshold]\n\n                            total += cnt\n                            cnt = 0\n                            Log.info \"#{total} lines processed\"\n                        end\n                        if cnt > 0\n                            total += cnt\n                            Log.info \"#{total} lines processed\"\n                        end\n                    end\n\n                    et = Thread.start do\n                        while line = e.gets.chomp rescue nil\n                            Log.info \"   * #{line}\" rescue nil\n                        end\n                    end\n\n                    ot.join\n                    et.join\n                    wt.kill\n                end\n            when 'collect-logs'\n                run(*runpy, action) do |i,o,e|\n                    i.close\n\n                    wt = Thread.start do\n                        s = Time.now\n                        while true\n                            sleep 120\n                            Log.info \"collect-logs: #{elapsed(Time.now - s)}\"\n                        end\n                    end\n\n                    ot = Thread.start do\n                        while line = o.gets.chomp rescue nil\n                            Log.info \"   > #{line}\" rescue nil\n                        end\n                    end\n\n                    et = Thread.start do\n                        cnt = 0\n                        total = 0\n                        while !e.gets.nil?\n                            cnt += 1\n                            next if cnt < OPTIONS[:lines_num_threshold]\n\n                            total += cnt\n                            cnt = 0\n                            Log.info \"#{total} logs collected\"\n                        end\n                        Log.info \"#{total + cnt} logs collected\" if cnt > 0\n                    end\n\n                    ot.join\n                    et.join\n                    wt.kill\n                end\n            else\n                run(*runpy, action)\n            end\n        end\n    end\nend\n\ndef test\n    fetch_all\n\n    wpid = nil\n    wth = Thread.start do\n        Open3.popen3(\"tail -F #{WLOG}\") do |i,o,e,t|\n            wpid = t.pid\n\n            i.close\n\n            ot = Thread.start do\n                while line = o.gets.chomp rescue nil\n                    Log.info line\n                end\n            end\n\n            et = Thread.start do\n                while line = e.gets.chomp rescue nil\n                    Log.error line\n                end\n            end\n\n            ot.join\n            et.join\n\n            t.join\n        end\n    end\n    at_exit do\n        Process.kill('KILL', wpid) rescue nil\n        wth.kill\n    end\n\n    OPTIONS[:abis].each do |abi|\n        test_for_abi abi, File.join(REGRESSION_DIR, abi)\n    end\nend\n\nbegin\n    start = Time.now\n    test\n    Log.notice \"=== DONE (took #{elapsed(Time.now - start)})\"\nrescue Interrupt\n    Log.info \"\\n\\nINTERRUPTED\"\n    exit 1\nrescue RuntimeError => err\n    Log.error err.message\n    exit 1\nend\n"
  },
  {
    "path": "tests/run-ndk-tests",
    "content": "#!/usr/bin/env ruby\n\n# Copyright (c) 2011-2015, 2017 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without modification, are\n# permitted provided that the following conditions are met:\n#\n#    1. Redistributions of source code must retain the above copyright notice, this list of\n#       conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above copyright notice, this list\n#       of conditions and the following disclaimer in the documentation and/or other materials\n#       provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR IMPLIED\n# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CrystaX OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation are those of the\n# authors and should not be interpreted as representing official policies, either expressed\n# or implied, of CrystaX.\n\nrequire 'optparse'\nrequire_relative 'lib/log'\nrequire_relative 'lib/awk'\nrequire_relative 'lib/samples'\nrequire_relative 'lib/tests'\nrequire_relative 'lib/standalone'\nrequire_relative 'lib/mro'\nrequire_relative 'lib/project'\n\nEncoding.default_external = Encoding::UTF_8\nENV['LANG'] = 'en_US.UTF-8'\nENV['LC_ALL'] = ENV['LANG']\n\n$stdout.sync = true\n$stderr.sync = true\n\nDRIVE = Project::WINDOWS ? \"C:\" : ''\n\noptions = {}\noptions[:verbose] = false\noptions[:outdir] = \"#{DRIVE}/tmp/ndk-#{ENV['USER']}/tests\"\noptions[:log] = File.join(options[:outdir], 'tests.log')\noptions[:keep_going] = false\noptions[:ndk] = ENV['NDK'] || File.expand_path(File.join(File.dirname(__FILE__), '..'))\nif ENV['ANDROID_SDK_ROOT']\n  options[:adb] = File.join(ENV['ANDROID_SDK_ROOT'], 'platform-tools', \"adb#{'.exe' if Project::WINDOWS}\")\nelse\n  options[:adb] = 'adb'\nend\noptions[:types] = ['awk', 'samples', 'build', 'device', 'standalone']\noptions[:stimeout] = 180\n\noptparser = OptionParser.new do |o|\n  o.separator \"Parameters:\"\n\n  o.on(\"-h\", \"--help\", \"Show help screen and exit\") do\n    puts optparser\n    exit 0\n  end\n\n  o.on(\"-v\", \"--[no-]verbose\", \"Enable verbose mode [#{options[:verbose]}]\") do |v|\n    options[:verbose] = v\n  end\n\n  o.on(\"--log=FILE\", \"Use this file for logging [#{options[:log]}]\") do |f|\n    options[:log] = f\n  end\n\n  options[:print_timestamps] = true\n  o.on(\"--[no-]print-timestamps\", \"Print timestamps in log [#{options[:print_timestamps]}]\") do |p|\n    options[:print_timestamps] = p\n  end\n\n  o.on(\"-k\", \"--[no-]keep-going\", \"Keep going even if some tests failed [#{options[:keep_going]}]\") do |k|\n    options[:keep_going] = k\n  end\n\n  o.on(\"--ndk=DIR\", \"Use specified directory as NDK root [#{options[:ndk]}]\") do |n|\n    options[:ndk] = n\n  end\n\n  o.on(\"--adb=PATH\", \"Use specified adb [#{options[:adb]}]\") do |a|\n    options[:adb] = a\n  end\n\n  o.on(\"-jN\", \"--jobs=N\", \"Build jobs [autodetect]\") do |j|\n    options[:jobs] = j\n  end\n\n  o.on(\"--tests=TESTS\", Array, \"Run only specified tests\") do |t|\n    options[:tests] = t\n  end\n\n  o.on(\"--out-dir=PATH\", \"Test output directory [#{options[:outdir]}]\") do |t|\n    options[:outdir] = t\n  end\n\n  o.on(\"--toolchain-version=V\", \"Specify toolchain version to test [all]\") do |v|\n    options[:toolchain_version] = v.sub(/^(\\d+\\.\\d+.*)$/, 'gcc\\1')\n  end\n\n  o.on(\"--types=LIST\", Array, \"Test types to run [#{options[:types].join(',')}]\") do |l|\n    options[:types] = l\n  end\n\n  o.on(\"--mro-prefix=PREFIX\", \"Machine-readable output prefix\") do |p|\n    options[:mroprefix] = p\n  end\n\n  o.on(\"--emulator-tag=TAG\", \"Run tests only on emulators having specified tag\") do |t|\n    options[:emutag] = t\n  end\n\n  o.on(\"--only-abis=LIST\", Array, \"Only test specified ABIs\") do |a|\n    options[:abis] = a\n  end\n\n  o.on(\"--single-test-timeout=TIMEOUT\", \"Timeout (in seconds) for running single test on device\") do |t|\n    options[:stimeout] = t\n  end\n\n  o.on(\"--[no-]pie\", \"Run only PIE-enabled (or only PIE-disabled) tests\") do |p|\n    options[:pie] = p\n  end\n\n  o.on(\"--full\", \"Run all tests, including those marked as 'long'\") do |f|\n    options[:full_testing] = f\n  end\nend\noptparser.parse!(ARGV)\n\nif !ARGV.empty?\n  $stderr.puts \"ERROR: Unknown options: #{ARGV.join(\" \")}\"\n  $stderr.puts optparser\n  exit 1\nend\n\nLog.timestamps = options[:print_timestamps]\n\nLog.add StdLogger.new(options[:verbose] ? Log::DEBUG : Log::NOTICE)\nLog.add FileLogger.new(options[:log], Log::DEBUG) if options[:log]\n\nMRO.prefix = options[:mroprefix]\n\ndef prepare_environment(options)\n  ENV['ANDROID_NDK_ROOT'] = nil\n  ENV['NDK'] = options[:ndk]\n  ENV['V'] = options[:verbose] ? '1' : '0'\n  ENV['NDK_TOOLCHAIN_VERSION'] = options[:toolchain_version].sub(/^(gcc|clang)-/, '\\1').sub(/^gcc/, '') rescue nil\n  ENV['NDK_LOGFILE'] = options[:log]\n  ENV['_NDK_TESTING_ALL_'] = 'all' if ENV['_NDK_TESTING_ALL_'].nil?\nend\n\ndef elapsed(seconds)\n  s = seconds % 60\n  m = (seconds / 60) % 60\n  h = seconds / 3600\n  \"%d:%02d:%02d\" % [h,m,s]\nend\n\ndef run_all(options)\n  started = Time.now\n\n  Log.notice \"=== START NDK TESTING\"\n\n  prepare_environment(options)\n\n  options[:types].select! { |t| ['build', 'device'].include?(t) } if options[:tests].is_a?(Array) && options[:tests].size > 0\n\n  fails = 0\n  options[:types].each do |type|\n    begin\n      tests = Object.const_get(\"#{type.capitalize}Tests\").new(options[:ndk], options)\n      tests.run\n    rescue\n      raise unless options[:keep_going]\n      fails += 1\n    end\n  end\n\n  raise \"Testing failed\" if fails > 0\nrescue Interrupt\n  Log.notice \"INTERRUPTED\"\n  exit 1\nrescue => e\n  Log.error e.message\n  #Log.error e.backtrace.join(\"\\n\")\n\n  exit 1\nensure\n  Log.notice \"=== DONE (took #{elapsed(Time.now - started)})\"\nend\n\nrun_all options\n"
  },
  {
    "path": "tests/runners.py",
    "content": "#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nfrom __future__ import print_function\n\nimport os\nimport subprocess\nimport sys\n\nimport adb  # pylint: disable=import-error\n\n# TODO(danalbert): Clean up our imports.\n# pylint: disable=relative-import\nimport filters\nimport printers\nimport ndk\nimport tests\nimport util\n\nfrom tests import AwkTest, BuildTest, DeviceTest\n# pylint: enable=relative-import\n\n\ndef get_device_abis(device):\n    # 64-bit devices list their ABIs differently than 32-bit devices. Check all\n    # the possible places for stashing ABI info and merge them.\n    abi_properties = [\n        'ro.product.cpu.abi',\n        'ro.product.cpu.abi2',\n        'ro.product.cpu.abilist',\n    ]\n    abis = set()\n    properties = device.get_props()\n    for abi_prop in abi_properties:\n        if abi_prop in properties:\n            abis.update(properties[abi_prop].split(','))\n\n    if 'armeabi-v7a' in abis:\n        abis.add('armeabi-v7a-hard')\n    return sorted(list(abis))\n\n\ndef check_adb_works_or_die(device, abi):\n    supported_abis = get_device_abis(device)\n    if abi is not None and abi not in supported_abis:\n        msg = ('The test device ({}) does not support the requested ABI '\n               '({}).\\nSupported ABIs: {}'.format(device.serial, abi,\n                                                  ', '.join(supported_abis)))\n        sys.exit(msg)\n\n\ndef can_use_asan(device, abi, api, toolchain):\n    # ASAN is currently only supported for 32-bit ARM and x86...\n    if not abi.startswith('armeabi') and not abi == 'x86':\n        return False\n\n    # From non-Windows (asan_device_setup is a shell script)...\n    if os.name == 'nt':\n        return False\n\n    # On KitKat and newer...\n    if api < 19:\n        return False\n\n    # When using clang...\n    if toolchain != 'clang':\n        return False\n\n    # On rooted devices.\n    if int(device.get_prop('ro.debuggable')) == 0:\n        return False\n\n    return True\n\n\ndef asan_device_setup():\n    path = os.path.join(\n        os.environ['NDK'], 'toolchains', 'llvm', 'prebuilt',\n        ndk.get_host_tag(), 'bin', 'asan_device_setup')\n    try:\n        # Don't want to use check_call because we want to keep this quiet\n        # unless there's a problem.\n        subprocess.check_output([path], stderr=subprocess.STDOUT)\n    except subprocess.CalledProcessError as ex:\n        print(ex.output)\n        raise ex\n\n\nclass ResultStats(object):\n    def __init__(self, suites, results):\n        self.num_tests = sum(len(s) for s in results.values())\n\n        zero_stats = {'pass': 0, 'skip': 0, 'fail': 0}\n        self.global_stats = dict(zero_stats)\n        self.suite_stats = {suite: dict(zero_stats) for suite in suites}\n        self._analyze_results(results)\n\n    def _analyze_results(self, results):\n        for suite, test_results in results.items():\n            for result in test_results:\n                if result.failed():\n                    self.suite_stats[suite]['fail'] += 1\n                    self.global_stats['fail'] += 1\n                elif result.passed():\n                    self.suite_stats[suite]['pass'] += 1\n                    self.global_stats['pass'] += 1\n                else:\n                    self.suite_stats[suite]['skip'] += 1\n                    self.global_stats['skip'] += 1\n\n\ndef run_single_configuration(ndk_path, out_dir, printer, abi, toolchain,\n                             build_api_level=None, verbose_ndk_build=False,\n                             suites=None, test_filter=None,\n                             device_serial=None):\n    \"\"\"Runs all the tests for the given configuration.\n\n    Sets up the necessary build flags and environment, checks that the device\n    under test is in working order and performs device setup (if running device\n    tests), and finally runs the tests for the selected suites.\n\n    Args:\n        ndk_path: Absolute path the the NDK being tested.\n        out_dir: Directory to use when building tests.\n        printer: Instance of printers.Printer that will be used to print test\n            results.\n        abi: ABI to test against.\n        toolchain: Toolchain to build with.\n        build_api_level: API level to build against. If None, will default to\n            the value set in the test's Application.mk, or ndk-build's default.\n        verbose_ndk_build: Show verbose output from ndk-build.\n        suites: Set of strings denoting which test suites to run. Possible\n            values are 'awk', 'build', and 'device'. If None, will run all\n            suites.\n        test_filter: Filter string for selecting a subset of tests.\n        device_serial: Serial number of the device to use for device tests. If\n            none, will try to find a device from ANDROID_SERIAL or a unique\n            attached device.\n\n    Returns:\n        True if all tests completed successfully, False if there were failures.\n    \"\"\"\n    if suites is None:\n        suites = ('awk', 'build', 'device')\n\n    os.chdir(os.path.dirname(os.path.realpath(__file__)))\n\n    # Defining _NDK_TESTING_ALL_=yes to put armeabi-v7a-hard in its own\n    # libs/armeabi-v7a-hard directory and tested separately from armeabi-v7a.\n    # Some tests are now compiled with both APP_ABI=armeabi-v7a and\n    # APP_ABI=armeabi-v7a-hard. Without _NDK_TESTING_ALL_=yes, tests may fail\n    # to install due to race condition on the same libs/armeabi-v7a\n    os.environ['_NDK_TESTING_ALL_'] = 'all'\n\n    os.environ['NDK'] = ndk_path\n\n    # For some reason we handle NDK_TOOLCHAIN_VERSION in _run_ndk_build_test...\n    # We also handle APP_ABI there (as well as here). This merits some cleanup.\n    ndk_build_flags = ['APP_ABI={}'.format(abi)]\n    if build_api_level is not None:\n        ndk_build_flags.append('APP_PLATFORM={}'.format(build_api_level))\n    if verbose_ndk_build:\n        ndk_build_flags.append('V=1')\n\n    # Do this early so we find any device issues now rather than after we've\n    # run all the build tests.\n    if 'device' in suites:\n        device = adb.get_device(device_serial)\n        check_adb_works_or_die(device, abi)\n        device_api_level = int(device.get_prop('ro.build.version.sdk'))\n\n        # PIE is required in L. All of the device tests are written toward the\n        # ndk-build defaults, so we need to inform the build that we need PIE\n        # if we're running on a newer device.\n        if device_api_level >= 21:\n            ndk_build_flags.append('APP_PIE=true')\n\n        os.environ['ANDROID_SERIAL'] = device.serial\n\n        if can_use_asan(device, abi, device_api_level, toolchain):\n            asan_device_setup()\n\n        # Do this as part of initialization rather than with a `mkdir -p` later\n        # because Gingerbread didn't actually support -p :(\n        device.shell_nocheck(['rm -r /data/local/tmp/ndk-tests 2>&1'])\n        device.shell(['mkdir /data/local/tmp/ndk-tests 2>&1'])\n\n    runner = tests.TestRunner(printer)\n    if 'awk' in suites:\n        runner.add_suite('awk', 'awk', AwkTest)\n    if 'build' in suites:\n        runner.add_suite('build', 'build', BuildTest, abi, build_api_level,\n                         toolchain, ndk_build_flags)\n    if 'device' in suites:\n        runner.add_suite('device', 'device', DeviceTest, abi, build_api_level,\n                         device, device_api_level, toolchain, ndk_build_flags)\n\n    test_filters = filters.TestFilter.from_string(test_filter)\n    results = runner.run(out_dir, test_filters)\n\n    stats = ResultStats(suites, results)\n\n    printer.print_summary(results, stats)\n    return stats.global_stats['fail'] == 0, results\n\n\ndef run_tests(ndk_path, device, abi, toolchain, out_dir, log_dir, test_filter):\n    print('Running {} {} tests for {}... '.format(toolchain, abi, device),\n          end='')\n    sys.stdout.flush()\n\n    toolchain_name = 'gcc' if toolchain == '4.9' else toolchain\n    log_file_name = '{}-{}-{}.log'.format(toolchain_name, abi, device.version)\n    with open(os.path.join(log_dir, log_file_name), 'w') as log_file:\n        printer = printers.FilePrinter(log_file)\n        good, details = run_single_configuration(\n            ndk_path, out_dir, printer, abi, toolchain,\n            device_serial=device.serial, test_filter=test_filter)\n        print('PASS' if good else 'FAIL')\n        return good, details\n\n\ndef run_for_fleet(ndk_path, fleet, out_dir, log_dir, test_filter,\n                  use_color=False):\n    # Note that we are duplicating some testing here.\n    #\n    # * The awk tests only need to be run once because they do not vary by\n    #   configuration.\n    # * The build tests only vary per-device by the PIE configuration, so we\n    #   only need to run them twice per ABI/toolchain.\n    # * The build tests are already run as a part of the build process.\n    results = []\n    details = {}\n    good = True\n    for version in fleet.get_versions():\n        details[version] = {}\n        for abi in fleet.get_abis(version):\n            details[version][abi] = {}\n            device = fleet.get_device(version, abi)\n            for toolchain in ('clang', '4.9'):\n                if device is None:\n                    results.append('android-{} {} {}: {}'.format(\n                        version, abi, toolchain, 'SKIP'))\n                    continue\n\n                details[version][abi][toolchain] = None\n\n                result, run_details = run_tests(\n                    ndk_path, device, abi, toolchain, out_dir, log_dir,\n                    test_filter)\n                pass_label = util.maybe_color('PASS', 'green', use_color)\n                fail_label = util.maybe_color('FAIL', 'red', use_color)\n                results.append('android-{} {} {}: {}'.format(\n                    version, abi, toolchain,\n                    pass_label if result else fail_label))\n                details[version][abi][toolchain] = run_details\n                if not result:\n                    good = False\n\n    print('\\n'.join(results))\n    return good, details\n"
  },
  {
    "path": "tests/standalone/basic-c-compile/main.c",
    "content": "/* Nothing fancy here, just checking that we can compile hello world */\n#include <stdio.h>\n\nint main(void) {\n    printf(\"Hello World!\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "tests/standalone/basic-cxx-compile/main.cpp",
    "content": "/* Nothing fancy here, just checking that we can compile hello world */\n#include <iostream>\n\nint main(void)\n{\n    std::cout << \"Hello World!\\n\" << std::endl;\n    return 0;\n}\n"
  },
  {
    "path": "tests/standalone/basic-objc-compile/main.m",
    "content": "#if !defined(__clang__)\n\nint main()\n{\n    return 0;\n}\n\n#else\n\n#import <stdio.h>\n\n#ifdef __APPLE__\n#import <Foundation/Foundation.h>\ntypedef NSObject Object;\n#else\n#import <objc/Object.h>\n#endif\n\n@interface BaseObject : Object\n+ (id) alloc;\n- (void) free;\n@end\n\n#ifdef __APPLE__\n\n@implementation BaseObject\n\n+ (id) alloc\n{\n    return [super alloc];\n}\n\n- (void) free\n{\n    [super dealloc];\n}\n\n@end /* BaseObject */\n\n#else\n\n#import <objc/runtime.h>\n\n@implementation BaseObject\n\n+ (id) alloc\n{\n    return class_createInstance(self, 0);\n}\n\n- (void) free\n{\n    object_dispose(self);\n}\n\n@end /* BaseObject */\n\n#endif\n\n@interface foo : BaseObject {\n    BOOL boolProperty;\n    id stringProperty;\n}\n\n@property (assign) BOOL boolProperty;\n@property (assign) id stringProperty;\n\n-(id) init;\n-(void) bar;\n\n@end\n\n@implementation foo\n\n@synthesize boolProperty;\n@synthesize stringProperty;\n\n-(id) init\n{\n    printf(\"%s\\n\", __PRETTY_FUNCTION__);\n    return self;\n}\n\n-(void) bar\n{\n    self.boolProperty = YES;\n    self.boolProperty = NO;\n    self.stringProperty = @\"\";\n    self.boolProperty = YES;\n}\n\n@end\n\nint test_objc()\n{\n    id obj = [[foo alloc] init];\n    [obj bar];\n    [obj free];\n    return 1;\n}\n\nint main()\n{\n    if (!test_objc())\n        return 1;\n\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "tests/standalone/basic-objcxx-compile/main.mm",
    "content": "#if !defined(__clang__)\n\nint main()\n{\n    return 0;\n}\n\n#else\n\n#import <stdio.h>\n\n#ifdef __APPLE__\n#import <Foundation/Foundation.h>\ntypedef NSObject Object;\n#else\n#import <objc/Object.h>\n#endif\n\n@interface BaseObject : Object\n+ (id) alloc;\n- (void) free;\n@end\n\n\n#ifdef __APPLE__\n\n@implementation BaseObject\n\n+ (id) alloc\n{\n    return [super alloc];\n}\n\n- (void) free\n{\n    [super dealloc];\n}\n\n@end /* BaseObject */\n\n#else\n\n#import <objc/runtime.h>\n\n@implementation BaseObject\n\n+ (id) alloc\n{\n    return class_createInstance(self, 0);\n}\n\n- (void) free\n{\n    object_dispose(self);\n}\n\n@end /* BaseObject */\n\n#endif\n\nclass Foo\n{\npublic:\n    Foo() {printf(\"%s\\n\", __PRETTY_FUNCTION__);}\n    ~Foo() {printf(\"%s\\n\", __PRETTY_FUNCTION__);}\n};\n\n@interface foo2 : BaseObject\n\n-(id) init;\n-(void) bar;\n\n@end\n\n@implementation foo2\n\n-(id) init\n{\n    printf(\"%s\\n\", __PRETTY_FUNCTION__);\n    return self;\n}\n\n-(void) bar\n{\n    printf(\"%s\\n\", __PRETTY_FUNCTION__);\n}\n\n@end\n\nextern \"C\"\nint test_objcpp()\n{\n    Foo cppobj;\n\n    id obj = [[foo2 alloc] init];\n    [obj bar];\n    [obj free];\n\n    return 1;\n}\n\n\nint main()\n{\n    if (!test_objcpp())\n        return 1;\n\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "tests/standalone/builtin-macros/run.sh",
    "content": "# This script is used to check all pre-defined built-in macros in a given\n# standalone toolchain. Call from tests/standalone/run.sh only.\n#\n\nmacro_assign () {\n    local _VARNAME=$1\n    local _VARVALUE=\"$2\"\n    eval macro_$_VARNAME=\\\"$_VARVALUE\\\"\n}\n\nmacro_val () {\n    eval echo -n \\\"\\$macro_$1\\\"\n}\n\n# Read all the built-in macros, and assign them to our own variables.\n# For cygwin/mingw, don't use $NULL defined in parent run.sh to NUL, because\n# NUL can't be used as input.  The non-existance /dev/null works well.\nMACRO_LINES=$($CC $CFLAGS -dM -E - < /dev/null | sort -u | tr ' ' '^^^' | tr '\"' '~')\n\nfor LINE in $MACRO_LINES; do\n    # for cygwin, it's important to remove trailing '\\r' as well\n    LINE=$(echo \"$LINE\" | tr '^^^' ' ' | tr '\\r' ' ')\n    VARNAME=$(echo \"$LINE\" | cut -d' ' -f 2)\n    VARVALUE=$(echo \"$LINE\" | cut -d' ' -f 3)\n\n    # Avoid macro names that contain parentheses.\n    echo \"$VARNAME\" | grep -q -v -e '('\n    if [ $? != 0 ]; then\n        continue\n    fi\n\n    macro_assign $VARNAME $VARVALUE\ndone\n\n# Now perform some checks\n\nFAILURES=0\nCOUNT=0\n\n# $1: variable name\n# $2: expected value\nmacro_expect () {\n\n    local VAL=$(macro_val $1)\n    if [ -z \"$VAL\" ]; then\n        echo \"Missing built-in macro definition: $1\"\n        return 1\n    fi\n    if [ \"$VAL\" != \"$2\" ]; then\n        echo \"Invalid built-in macro definition: '$VAL', expected '$2'\"\n        return 1\n    fi\n    return 0\n}\n\n# Check the definition of a given macro\n# $1: macro name\n# $2: expected value\n# $3: textual description for the check\nmacro_check () {\n    if [ -n \"$3\" ]; then\n        echo -n \"Checking $1 ($3): \"\n    else\n        echo -n \"Checking $1: \"\n    fi\n    macro_expect \"$1\" \"$2\"\n    if [ $? != 0 ]; then\n        FAILURES=$(( $FAILURES + 1 ))\n    else\n        echo \"ok\"\n    fi\n    COUNT=$(( $COUNT + 1 ))\n}\n\n# Check the definition of a given macro against multiple values\n# $1: macro name\n# $2+: list of acceptable values.\nmacro_multi_check () {\n    echo -n \"Checking $1: \"\n    local VAL=$(macro_val $1)\n    if [ -z \"$VAL\" ]; then\n      echo \"Missing built-in macro definition: $1\"\n      return 1\n    fi\n    local VAL2 FOUND\n    shift\n    for VAL2 in \"$@\"; do\n      if [ \"$VAL2\" = \"$VAL\" ]; then\n        FOUND=true\n        break\n      fi\n    done\n    if [ -z \"$FOUND\" ]; then\n      echo \"Invalid built-in macro definition: '$VAL', expected one of: $@\"\n      return 1\n    fi\n    return 0\n}\n\n# Check that a given macro is undefined\nmacro_check_undef () {\n    echo -n \"Checking undefined $1: \"\n    local VAL=\"$(macro_val $1)\"\n    if [ -n \"$VAL\" ]; then\n        echo \"KO: Unexpected value '$VAL' encounteded\"\n        FAILURES=$(( $FAILURES + 1 ))\n    else\n        echo \"ok\"\n    fi\n    COUNT=$(( $COUNT + 1 ))\n}\n\necho \"Checking built-in macros for: $CC $CFLAGS\"\n\n# All toolchains must define the following prebuilt macros.\nmacro_check __ANDROID__ 1   \"Android target system\"\nmacro_check __linux__ 1     \"Linux target system\"\nmacro_check __unix__ 1      \"Unix target system\"\nmacro_check __ELF__ 1       \"ELF target system\"\n\n# Either __pic__ or __PIC__ must be defined. Defining both is ok, not\n# having anyone of them defined is an error.\n#\n# The value should be 1 on all platforms, except x86 where it will be 2\n# (No idea why).\ncase $ABI in\n    x86) PICVAL=2;;\n    *) PICVAL=1;;\nesac\n\ncase $ABI in\n    armeabi-v7a|armeabi-v7a-hard)\n        macro_check __arm__ 1              \"ARM CPU architecture\"\n\tmacro_check_undef __LP64__         \"LP64 data model\"\n        macro_check __ARM_EABI__ 1         \"ARM EABI runtime\"\n        macro_check __ARMEL__ 1            \"ARM little-endian\"\n        macro_check __THUMB_INTERWORK__ 1  \"ARM thumb-interwork\"\n        macro_check __PIC__ 1              \"Position independent code (-fpic)\"\n        macro_check __WCHAR_TYPE__         \"unsigned\"\n        # all toolchains define __WCHAR_MAX__ as '4294967295U', and GCC 5 as '0xffffffffU'\n        macro_multi_check __WCHAR_MAX__    \"4294967295U\" \"0xffffffffU\"\n        # Clang doesn't define __WCHAR_MIN__ so don't check it\"\n\n        case $ABI in\n            armeabi)\n                macro_check __ARM_ARCH_5TE__ 1   \"ARMv5TE instructions (for armeabi)\"\n                macro_check __SOFTFP__ 1         \"ARM soft-floating point\"\n                ;;\n            armeabi-v7a)\n                macro_check __ARM_ARCH_7A__ 1    \"ARMv7-A instructions (for armeabi-v7a)\"\n\n                # This macro seems to be ill-named. It is only defined when we\n                # don't use -mfloat-abi=softfp or -mfloat-abi=hard. I can only\n                # assume it corresponds to -mfloat-abi=soft, which corresponds\n                # to all FP operations implemented (slowly) through software.\n                #\n                # Not to be confused with -mfloat-abi=softfp which indicates\n                # that the FPU is used for all FP operations, but that FP\n                # values are passsed in core registers between function calls,\n                # which is mandated by the armeabi-v7a definition.\n                #\n                macro_check_undef __SOFTFP__      \"ARM soft-floating point\"\n                ;;\n            armeabi-v7a-hard)\n                macro_check __ARM_ARCH_7A__ 1     \"ARMv7-A instructions (for armeabi-v7a)\"\n                macro_check __ARM_PCS_VFP   1     \"ARM hard-floating point\"\n                macro_check_undef __SOFTFP__      \"ARM soft-floating point\"\n                ;;\n        esac\n        ;;\n\n    x86)\n        macro_check __i386__ 1       \"x86 CPU architecture\"\n        macro_check_undef __LP64__   \"LP64 data model\"\n        macro_check __i686__ 1       \"i686 instruction set\"\n        macro_check __PIC__ 2        \"Position independent code (-fPIC)\"\n        macro_check __MMX__  1       \"MMX instruction set\"\n        macro_check __SSE__ 1        \"SSE instruction set\"\n        macro_check __SSE2__ 1       \"SSE2 instruction set\"\n        macro_check __SSE3__ 1       \"SSE3 instruction set\"\n        macro_check __SSE_MATH__ 1   \"Use SSE for math operations\"\n        macro_check __SSE2_MATH__ 1  \"Use SSE2 for math operations\"\n        # GCC defines is as 'long', and Clang as 'int'\n        macro_multi_check __WCHAR_TYPE__   \"long\" \"int\"\n        # GCC defines it with an L suffix, Clang doesn't.\n        macro_multi_check __WCHAR_MAX__    \"2147483647L\" \"2147483647\"\n        ;;\n\n    mips)\n        macro_check __mips__ 1          \"Mips CPU architecture\"\n        macro_check_undef __LP64__      \"LP64 data model\"\n        macro_check _MIPS_ARCH_MIPS32 1 \"Mips 32-bit ABI\"\n        macro_check __MIPSEL__ 1        \"Mips little-endian\"\n        macro_check __PIC__ 1           \"Position independent code (-fpic)\"\n        # GCC defines it as \"signed int\", and Clang as \"int\"\n        macro_multi_check __WCHAR_TYPE__   \"signed int\" \"int\"\n        macro_multi_check __WCHAR_MAX__    \"2147483647\" \"0x7fffffff\"\n        ;;\n    arm64-v8a)\n        macro_check __aarch64__ 1          \"ARM CPU architecture\"\n        macro_check __LP64__ 1             \"LP64 data model\"\n        macro_check __AARCH64EL__ 1        \"ARM AARCH64 little-endian runtime\"\n        macro_check __PIC__ 1              \"Position independent code (-fpic)\"\n        macro_check __WCHAR_TYPE__         \"unsigned\"\n        macro_multi_check __WCHAR_MAX__    \"4294967295U\" \"0xffffffffU\"\n        # Clang doesn't define __WCHAR_MIN__ so don't check it\"\n        ;;\n\n    x86_64)\n        macro_check __x86_64__ 1     \"x86_64 CPU architecture\"\n        macro_check __LP64__ 1       \"LP64 data model\"\n        macro_check __PIC__ 2        \"Position independent code (-fPIC)\"\n        macro_check __MMX__  1       \"MMX instruction set\"\n        macro_check __SSE__ 1        \"SSE instruction set\"\n        macro_check __SSE2__ 1       \"SSE2 instruction set\"\n        macro_check __SSE3__ 1       \"SSE3 instruction set\"\n        macro_check __SSE_MATH__ 1   \"Use SSE for math operations\"\n        macro_check __SSE2_MATH__ 1  \"Use SSE2 for math operations\"\n        #macro_check __SSSE3__ 1     \"SSSE3 instruction set\"\n        macro_check __WCHAR_TYPE__   \"int\"\n        macro_multi_check __WCHAR_MAX__  \"2147483647\" \"0x7fffffff\"\n        ;;\n\n    mips64)\n        macro_check __mips__ 1            \"Mips CPU architecture\"\n        macro_check __mips64 1            \"Mips 64-bit CPU architecture\"\n        macro_check __LP64__ 1            \"LP64 data model\"\n        macro_check __MIPSEL__ 1          \"Mips little-endian\"\n        macro_check __PIC__ 1             \"Position independent code (-fpic)\"\n        macro_check __WCHAR_TYPE__        \"int\"\n        macro_multi_check __WCHAR_MAX__   \"2147483647\" \"0x7fffffff\"\n        ;;\n    *)\n        echo \"Unknown ABI: $ABI\"\n        exit 1\nesac\n\nmacro_check \"__SIZEOF_SHORT__\"       \"2\"   \"short is 16-bit\"\nmacro_check \"__SIZEOF_INT__\"         \"4\"   \"int is 32-bit\"\nmacro_check \"__SIZEOF_FLOAT__\"       \"4\"   \"float is 32-bit\"\nmacro_check \"__SIZEOF_DOUBLE__\"      \"8\"   \"double is 64-bit\"\nif [ \"$ABI\" = \"${ABI%%64*}\" ]; then\n    macro_check \"__SIZEOF_LONG_DOUBLE__\" \"8\"   \"long double is 64-bit\"\n    macro_check \"__SIZEOF_POINTER__\"     \"4\"   \"pointers are 32-bit\"\nelse\n    macro_check \"__SIZEOF_LONG_DOUBLE__\" \"16\"   \"long double is 128-bit\"\n    macro_check \"__SIZEOF_POINTER__\"     \"8\"   \"pointers are 64-bit\"\nfi\nmacro_check \"__SIZEOF_LONG_LONG__\"   \"8\"   \"long long is 64-bit\"\nmacro_check \"__SIZEOF_WCHAR_T__\"     \"4\"   \"wchar_t is 32-bit\"\n\nif [ \"$FAILURES\" = 0 ]; then\n    echo \"$COUNT/$COUNT tests passed. Nice job.\"\n    exit 0\nfi\n\necho \"$FAILURES/$COUNT tests failed !!\"\nexit 1\n"
  },
  {
    "path": "tests/standalone/init-fini-arrays/README",
    "content": "This test is here to check that all constructors and destructors\nare placed in the .init_array and .fini_array sections. More precisely:\n\n  - The address of functions with __attribute__((constructor)) are placed in\n    the .init_array section.\n\n  - The address of functions with __attribute__((destructor)) are placed in\n    the .fini_array section\n\n  - The address of static C++ constructors are placed in the .init_array\n    section. There is no corresponding entry in the .fini_array for the\n    corresponding destructors. Instead, the constructor must call __cxa_atexit\n    to register the destructors manually.\n\nThe main idea is to check that there is no .ctors or .dtors section in the\ngenerated shared library.\n"
  },
  {
    "path": "tests/standalone/init-fini-arrays/foo.cpp",
    "content": "/* For details, see README */\n\nextern \"C\" {\n\nvoid __attribute__((constructor))\nmy_constructor(void)\n{\n    /* nothing */\n}\n\nvoid __attribute__((destructor))\nmy_destructor(void)\n{\n    /* nothing */\n}\n\n}\n\nclass Foo {\npublic:\n    Foo() : mValue(1) {}\n    ~Foo() { mValue = 0; }\nprivate:\n    int mValue;\n};\n\nstatic Foo foo;\n"
  },
  {
    "path": "tests/standalone/init-fini-arrays/run.sh",
    "content": "\n# See README for details.\n\nLIBFILE=libfoo.so\n\n# Compile shared library\n#\n\n$CXX $LDFLAGS $CXXFLAGS -shared -o $LIBFILE foo.cpp\nif [ $? != 0 ]; then\n    echo \"ERROR: Can't build shared library!\"\n    exit 1\nfi\n\n# Check that there is no .ctors section\n${PREFIX}readelf -S libfoo.so | grep -q -e .ctors\nif [ $? = 0 ]; then\n    echo \"ERROR: Shared library should not have a .ctors section!\"\n    exit 1\nfi\n\n# Check that there is no .dtors section\n${PREFIX}readelf -S libfoo.so | grep -q -e .dtors\nif [ $? = 0 ]; then\n    echo \"ERROR: Shared library should not have a .dtors section!\"\n    exit 1\nfi\n\n# Check that there is an .init_array section\n${PREFIX}readelf -S $LIBFILE | grep -q -e .init_array\nif [ $? != 0 ]; then\n    echo \"ERROR: Shared library is missing an .init_array section!\"\n    exit 1\nfi\n\n# Check that there is a .fini_array section\n${PREFIX}readelf -S $LIBFILE | grep -q -e .fini_array\nif [ $? != 0 ]; then\n    echo \"ERROR: Shared library is missing an .fini_array section!\"\n    exit 1\nfi\n\n# Everything's good\necho \"Shared library is ok.\"\nexit 0\n"
  },
  {
    "path": "tests/standalone/libcrystax-c-linked/main.c",
    "content": "#include <stdio.h>\n#include <crystax.h>\n\nint main(void)\n{\n    if (crystax_jvm() != NULL) {\n        printf(\"ERROR: crystax_jvm() returned not NULL pointer!\\n\");\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/standalone/libcrystax-cxx-linked/main.cpp",
    "content": "#include <iostream>\n#include <crystax.h>\n\nint main()\n{\n    if (crystax_jvm() != NULL) {\n        std::cerr << \"ERROR: crystax_jvm() returned not NULL pointer!\" << std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "tests/standalone/run-all.sh",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2014, 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# Copyright (c) 2014 CrystaX.\n# All rights reserved.\n# \n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n# \n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n# \n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n# \n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n# \n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n# \n\n# This simple script will create standalone toolchains for all supported\n# GCC and LLVM versions and for all supported CPU architectures and then\n# it will run all standalone tests.\n#\n\nPROGDIR=`dirname $0`\nNDK=`cd $PROGDIR/../.. && pwd`\nNDK_BUILDTOOLS_PATH=$NDK/build/instruments\n. $NDK/build/instruments/ndk-common.sh\n. $NDK/build/instruments/prebuilt-common.sh\n\nTAGS=$HOST_TAG\n\nwhile [ -n \"$1\" ]; do\n    opt=\"$1\"\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case \"$opt\" in\n        --help|-h|-\\?)\n            OPTION_HELP=yes\n            ;;\n        --32)\n            TAGS=$HOST_TAG32\n            ;;\n        --win-64)\n            TAGS=\"windows-x86_64\"\n            ;;\n        *)\n            echo \"Unrecognized option: \" \"$opt\"\n            exit 1\n            ;;\n    esac\n    shift\ndone\n\nif [ \"$OPTION_HELP\" = \"yes\" ] ; then\n    echo \"Usage: $0 [options]\"\n    echo \"\"\n    echo \"Valid options:\"\n    echo \"\"\n    echo \"    --help|-h|-?      Print this help\"\n    echo \"    --32              Use 32-bit tools\"\n    echo \"    --win-64          Run on win 64 machine\"\n    echo \"\"\n    exit 1\nfi\n\n\n#\n# Run standalone tests\n#\nSTANDALONE_TMPDIR=$NDK_TMPDIR\n\n# $1: Host tag\n# $2: API level\n# $3: Arch\n# $4: GCC version\nstandalone_path ()\n{\n    local TAG=$1\n    local API=$2\n    local ARCH=$3\n    local GCC_VERSION=$4\n\n    echo ${STANDALONE_TMPDIR}/android-ndk-api${API}-${ARCH}-${TAG}-${GCC_VERSION}\n}\n\n# $1: Host tag\n# $2: API level\n# $3: Arch\n# $4: GCC version\n# $5: LLVM version\nmake_standalone ()\n{\n    local TAG=$1\n    local API=$2\n    local ARCH=$3\n    local GCC_VERSION=$4\n    local LLVM_VERSION=$5\n\n    echo \"(cd $NDK && \\\n     ./build/instruments/make-standalone-toolchain.sh \\\n        --platform=android-$API \\\n        --install-dir=$(standalone_path $TAG $API $ARCH $GCC_VERSION) \\\n        --llvm-version=$LLVM_VERSION \\\n        --toolchain=$(get_toolchain_name_for_arch $ARCH $GCC_VERSION) \\\n        --system=$TAG)\"\n    (cd $NDK && \\\n     ./build/instruments/make-standalone-toolchain.sh \\\n        --platform=android-$API \\\n        --install-dir=$(standalone_path $TAG $API $ARCH $GCC_VERSION) \\\n        --llvm-version=$LLVM_VERSION \\\n        --toolchain=$(get_toolchain_name_for_arch $ARCH $GCC_VERSION) \\\n        --system=$TAG)\n}\n\ndump \"#\"\ndump \"# 32 bit architectures\"\ndump \"#\"\ndump \"\"\n\nfor API in $API_LEVELS; do\n\n    ARCHS=\"arm x86 mips\"\n    GCC_VERSION_LIST=$DEFAULT_GCC_VERSION_LIST\n    LLVM_VERSION_LIST=$DEFAULT_LLVM_VERSION_LIST\n\n    echo \"API level         = $API\"\n    echo \"ARCHS             = $ARCHS\"\n    echo \"GCC_VERSION_LIST  = $GCC_VERSION_LIST\"\n    echo \"LLVM_VERSION_LIST = $LLVM_VERSION_LIST\"\n    echo \"TAGS              = $TAGS\"\n    \n    for ARCH in $(commas_to_spaces $ARCHS); do\n        dump \"##\"\n        dump \"## [$ARCH]\"\n        dump \"##\"\n        dump \"\"\n        if [ \"$ARCH\" == \"x86\" -a \"$API\" -lt 10 ]; then\n            dump \"$ARCH does not supports API level $API\"\n            continue\n        fi\n        if [ \"$ARCH\" == \"mips\" -a \"$API\" -lt 15 ]; then\n            dump \"$ARCH does not supports API level $API\"\n            continue\n        fi\n        for GCC_VERSION in $GCC_VERSION_LIST; do\n            for LLVM_VERSION in $(commas_to_spaces $LLVM_VERSION_LIST); do\n                for TAG in $TAGS; do\n                    dump \"### [$TAG] Making $ARCH gcc-$GCC_VERSION/clang-$LLVM_VERSION standalone toolchain\"\n                    #echo \"make_standalone $TAG $API $ARCH $GCC_VERSION $LLVM_VERSION\"\n                    make_standalone $TAG $API $ARCH $GCC_VERSION $LLVM_VERSION\n                    dump \"### [$TAG] Testing $ARCH gcc-$GCC_VERSION standalone toolchain\"\n                    (cd $NDK && \\\n                        ./tests/standalone/run.sh --no-sysroot \\\n                        --prefix=$(standalone_path $TAG $API $ARCH $GCC_VERSION)/bin/$(get_default_toolchain_prefix_for_arch $ARCH)-gcc)\n                    dump \"### [$TAG] Testing $ARCH clang-$LLVM_VERSION with gcc-$GCC_VERSION standalone toolchain\"\n                    (cd $NDK && \\\n                        ./tests/standalone/run.sh --no-sysroot \\\n                        --prefix=$(standalone_path $TAG $API $ARCH $GCC_VERSION)/bin/clang)\n\t            rm -rf $(standalone_path $TAG $API $ARCH $GCC_VERSION)\n                done\n            done\n        done\n    done\ndone\n\ndump \"\"\ndump \"#\"\ndump \"# 64 bit architectures\"\ndump \"#\"\ndump \"\"\n\nAPI=L\nARCHS=\"arm64 x86_64 mips64\"\nGCC_VERSION_LIST=\"4.9\"\n\necho \"API level         = $API\"\necho \"ARCHS             = $ARCHS\"\necho \"GCC_VERSION_LIST  = $DEFAULT_GCC_VERSION_LIST\"\necho \"LLVM_VERSION_LIST = $LLVM_VERSION_LIST\"\necho \"TAGS              = $TAGS\"\n\n\nfor ARCH in $(commas_to_spaces $ARCHS); do\n    dump \"##\"\n    dump \"## [$ARCH]\"\n    dump \"##\"\n    dump \"\"\n    for GCC_VERSION in $GCC_VERSION_LIST; do\n        for LLVM_VERSION in $(commas_to_spaces $DEFAULT_LLVM_VERSION_LIST); do\n            for TAG in $TAGS; do\n                dump \"### [$TAG] Making $ARCH gcc-$GCC_VERSION/clang-$LLVM_VERSION standalone toolchain\"\n                #echo \"make_standalone $TAG $API $ARCH $GCC_VERSION $LLVM_VERSION\"\n                make_standalone $TAG $API $ARCH $GCC_VERSION $LLVM_VERSION\n                dump \"### [$TAG] Testing $ARCH gcc-$GCC_VERSION standalone toolchain\"\n                (cd $NDK && \\\n                    ./tests/standalone/run.sh --no-sysroot \\\n                    --prefix=$(standalone_path $TAG $API $ARCH $GCC_VERSION)/bin/$(get_default_toolchain_prefix_for_arch $ARCH)-gcc)\n                dump \"### [$TAG] Testing $ARCH clang-$LLVM_VERSION with gcc-$GCC_VERSION standalone toolchain\"\n                (cd $NDK && \\\n                    ./tests/standalone/run.sh --no-sysroot \\\n                    --prefix=$(standalone_path $TAG $API $ARCH $GCC_VERSION)/bin/clang)\n\t        rm -rf $(standalone_path $TAG $API $ARCH $GCC_VERSION)\n            done\n        done\n    done\ndone\n\n\n# clean up\n# todo: uncomment\n#rm -rf $STANDALONE_TMPDIR\n"
  },
  {
    "path": "tests/standalone/run-standalone-tests.rb",
    "content": "#!/usr/bin/env ruby\n#\n# This script runs all standalone tests for all supported toolchiains,\n# platforms and architectures.\n#\n#\n# Copyright (c) 2014, 2015, 2016, 2017, 2018 CrystaX.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#    1. Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#    2. Redistributions in binary form must reproduce the above\n#       copyright notice, this list of conditions and the following\n#       disclaimer in the documentation and/or other materials provided\n#       with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY CrystaX ''AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n# DISCLAIMED. IN NO EVENT SHALL CrystaX OR CONTRIBUTORS BE LIABLE\n# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#\n# The views and conclusions contained in the software and documentation\n# are those of the authors and should not be interpreted as representing\n# official policies, either expressed or implied, of CrystaX.\n#\n\nrequire 'optparse'\nrequire 'fileutils'\nrequire 'pathname'\n\ndef crew_dir(ndk_dir)\n  d = File.join(ndk_dir, 'crew.dir')\n  if not File.directory?(d)\n    d = File.join(ndk_dir, '..', '..', 'crew')\n  end\n  Pathname.new(d).realpath.to_s\nend\n\nNDK_DIR       = Pathname.new(__FILE__).realpath.dirname.dirname.dirname.to_s\nCREW_DIR      = crew_dir(NDK_DIR)\nCREW_CMD_EXT  = (RbConfig::CONFIG['EXEEXT'] == '.exe') ? \".cmd\" : \"\"\nCREW_CMD      = \"#{CREW_DIR}/crew#{CREW_CMD_EXT}\"\nPLATFORM_NAME = File.basename(`#{CREW_CMD} -W env --tools-dir`.strip)\nTMP_DIR       = `#{CREW_CMD} -W env --base-build-dir`.strip\n\n\nrequire_relative \"#{CREW_DIR}/library/arch.rb\"\nrequire_relative \"#{CREW_DIR}/library/toolchain.rb\"\n\n\nclass Ndk_data\n\n  attr_reader :default_stl_types, :llvm_versions, :tag, :compiler_types\n\n  def initialize\n    user = ENV['USER']\n\n    # ./test/standalone/run.sh will use the value of the variable as log file name\n    self.log_file = \"#{TMP_DIR}/tests/standalone.log\"\n    FileUtils.mkdir_p File.dirname(self.log_file)\n\n    @ndk_tmp_dir = \"#{TMP_DIR}/tmp\"\n    @default_stl_types = [\"gnustl\", \"libc++\"]\n    @llvm_versions = Toolchain::SUPPORTED_LLVM.map(&:version)\n    @compiler_types = [\"gcc\"] + @llvm_versions.map { |v| \"clang\" + v }\n  end\n\n  def log_file\n    ENV['NDK_LOGFILE']\n  end\n\n  def log_file=(file)\n    ENV['NDK_LOGFILE'] = file\n  end\n\n  def default_api_levels\n    api_levels = []\n    FileUtils.cd(\"#{NDK_DIR}/platforms\") { api_levels = Dir['*'].map { |s| s.split('-')[1].to_i } }\n    api_levels.sort\n  end\n\n  def allowed_api_levels(arch, apis)\n    apis.select { |api| api >= arch.min_api_level }\n  end\n\n  def standalone_path(api_level, arch, gcc_version, stl_type)\n    File.join(@ndk_tmp_dir, \"android-ndk-api-#{api_level}-#{arch.name}-#{gcc_version}-#{stl_type}\")\n  end\nend\n\n\nNDK_DATA = Ndk_data.new\n$num_tests_run = 0\n$num_tests_failed = 0\n\n\nclass StandaloneToolchain\n\n  attr_reader :arch, :gcc_version, :stl, :api_level, :install_dir_base, :prefix, :results\n\n  def initialize(arch, gcc_version, stl, api_level)\n    @arch        = arch\n    @gcc_version = gcc_version\n    @stl         = stl\n    @api_level   = api_level\n\n    @install_dir_base = NDK_DATA.standalone_path(api_level, arch, gcc_version, stl)\n    @prefix = arch.host\n\n    @results = Hash.new(0)\n\n    # todo: why?\n    log = nil\n\n    NDK_DATA.llvm_versions.each do |llvm_ver|\n      args = [\" --clean-install-dir\",\n              \" --install-dir=#{toolchain_dir(llvm_ver)}\",\n              \" --gcc-version=#{gcc_version}\",\n              \" --llvm-version=#{llvm_ver}\",\n              \" --stl=#{stl}\",\n              \" --arch=#{arch.name}\",\n              \" --platform=#{PLATFORM_NAME}\",\n              \" --api-level=#{api_level}\"\n             ]\n      cmd = \"#{CREW_CMD} -W -b make-standalone-toolchain #{args.join(' ')}\"\n      File.open(NDK_DATA.log_file, \"a\") do |log|\n        log.puts \"############################################\"\n        log.puts\n        log.puts \" Creating toolchain with command: #{cmd}\"\n        log.puts\n        log.puts \"############################################\"\n      end\n      `#{cmd}`\n      if $? != 0\n        abort(\"failed to make standalone toolchain with command: #{cmd}\")\n      end\n    end\n  end\n\n  def toolchain_dir(llvm_ver)\n    \"#{install_dir_base}-#{llvm_ver}\"\n  end\n\n  def clean\n    NDK_DATA.llvm_versions.each { |llvm_ver| FileUtils.rm_rf toolchain_dir(llvm_ver) }\n  end\n\n  def run_tests\n    # run tests with GCC toolchain\n    # since GCC compilers are the same for each LLVM version\n    # use first LLVM version to run GCC tests\n    # todo: test armeabi-v7a-hard too\n    cmd = \"./tests/standalone/run.sh --no-sysroot --prefix=#{toolchain_dir(NDK_DATA.llvm_versions[0])}/bin/#{prefix}-gcc --abi=#{arch.abis[0]}\"\n    results['gcc'] = run_test_cmd(cmd)\n    # run tests with LLVM toolchains\n    NDK_DATA.llvm_versions.each do |llvm_ver|\n      cmd = \"./tests/standalone/run.sh --no-sysroot --prefix=#{toolchain_dir(llvm_ver)}/bin/clang --abi=#{arch.abis[0]}\"\n      results['clang'+llvm_ver] = run_test_cmd(cmd)\n    end\n    results\n  end\n\n  def run_test_cmd(cmd)\n    num_failed = 0\n    FileUtils.cd(NDK_DIR) do\n      output = `#{cmd}`\n      r = (output.split(\"\\n\")[-1]).split\n      if r[-1] == 'Success.'\n        $num_tests_run += Integer((r[0].split(\"/\"))[0])\n      elsif r[2] == 'failed'\n        $num_tests_run += Integer(r[-1].delete(\".\"))\n        $num_tests_failed += num_failed = Integer(r[0])\n      else\n        abort(\"error: unexpected output from command: #{cmd}; output: #{output}\")\n      end\n    end\n    num_failed\n  end\nend\n\n\narchitectures = Arch::LIST.values\ngcc_versions  = Toolchain::SUPPORTED_GCC.map(&:version)\nstl_types     = NDK_DATA.default_stl_types\napi_levels    = NDK_DATA.default_api_levels\n\noptions = { clean: true }\nOptionParser.new do |opts|\n  opts.banner = \"Usage: #{$PROGRAM_NAME} [options]\"\n\n  opts.on(\"--api-levels=LIST\", String, \"List of API levels;\", \"#{api_levels}\") do |l|\n    api_levels = l.split(',').map { |s| s.to_i }\n  end\n\n  opts.on(\"--archs=LIST\", String, \"List of architectures;\", \"#{architectures.map(&:name).join(',')}\") do |l|\n    architectures = l.split(',').map { |a| Arch::LIST[a.to_sym] }\n  end\n\n  opts.on(\"--stl-types=LIST\", String, \"List of STL variants;\", \"#{stl_types}\") do |l|\n    stl_types = l.split(',')\n  end\n\n  opts.on(\"--gcc-versions=LIST\", String, \"List of GCC version;\", \"#{gcc_versions}\") do |l|\n    gcc_versions = l.split(',')\n  end\n\n  opts.on(\"--ndk-log-file=FILE\", String, \"Use the FILE as NDK's log file;\", \"#{NDK_DATA.log_file}\") do |f|\n    NDK_DATA.log_file = File.expand_path(f)\n  end\n\n  opts.on(\"--no-clean\", \"Do not remove toolchains after tests were run\") do |_|\n    options[:clean] = false\n  end\n\n  opts.on(\"-h\", \"--help\", \"Display this help and exit\") do\n    puts opts\n    # todo: exit with non zero code\n    exit\n  end\nend.parse!\n\nputs \"using tools for platform: #{PLATFORM_NAME}\"\narchitectures.each do |arch|\n  puts \"#{arch}\"\n  gcc_versions.each do |gccver|\n    puts \"  #{gccver}\"\n    stl_types.each do |stl|\n      print \"    #{stl}, API levels: \"\n      results = Hash[NDK_DATA.compiler_types.map { |v| [v, []] }]\n      NDK_DATA.allowed_api_levels(arch, api_levels).each do |apilev|\n        # create toolchain and run tests\n        toolchain = StandaloneToolchain.new(arch, gccver, stl, apilev)\n        # run_test returns a hash indexed by compiler type\n        # where each hash value is a number of failed tests\n        r = toolchain.run_tests\n        NDK_DATA.compiler_types.each do |compiler|\n          if r[compiler] > 0\n            results[compiler] = results[compiler] << [Integer(apilev), r[compiler]]\n          end\n        end\n        # remove toolchain if clean was requested\n        if options[:clean]\n          toolchain.clean\n        end\n        print \"#{apilev} \"\n      end\n      puts \"\"\n      # output results\n      NDK_DATA.compiler_types.each do |compiler|\n        print \"      #{compiler}: \"\n        if results[compiler].size == 0\n          puts \"OK\"\n        else\n          puts results[compiler].to_s\n        end\n      end\n      puts \"\"\n    end\n  end\nend\n\nputs \"Summary:\"\nputs \"    number of tests run:    #{$num_tests_run}\"\nputs \"    number of failed tests: #{$num_tests_failed}\"\n\nexit $num_tests_failed\n"
  },
  {
    "path": "tests/standalone/run.sh",
    "content": "#!/bin/sh\n#\n# Copyright (C) 2012, 2014, 2016, 2018 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n# This script is used to run a series of tests on a given standalone\n# toolchain. You need to define the following variables before calling it:\n#\n#   PREFIX    Full binary prefix to the toolchain binaries,\n#             e.g. '/path/to/toolchain/bin/arm-linux-androideabi-'\n#             This script will use ${PREFIX}gcc to invoke the compiler,\n#             ${PREFIX}ar for the archiver, etc...\n#\n#   CFLAGS    Compiler flags for C programs.\n#   CXXFLAGS  Compiler flags for C++ programs.\n#   LDFLAGS   Linker flags (passed to ${PREFIX}gcc, not ${PREFIX}ld)\n#\n\nPROGNAME=$(basename \"$0\")\nPROGDIR=$(dirname \"$0\")\nNDK_ROOT=$(cd \"$PROGDIR/../..\" && pwd)\nNDK_BUILDTOOLS_PATH=$NDK_ROOT/build/instruments\n. $NDK_ROOT/build/instruments/prebuilt-common.sh\n\npanic () {\n    echo \"ERROR: $@\" >&2; exit 1\n}\n\nfail_panic () {\n  if [ $? != 0 ]; then panic \"$@\"; fi\n}\n\n\n# Command-line processing\n#\n# Note: try to keep in alphabetical order, same for the --option cases below.\n#\nABI=\nHELP=\nLIST_TESTS=\nNO_SYSROOT=\nSYSROOT=\nTEST_SUBDIRS=\nVERBOSE=1\n\n# Parse options\nfor opt; do\n    optarg=`expr \"x$opt\" : 'x[^=]*=\\(.*\\)'`\n    case $opt in\n        --abi=*)\n            ABI=$optarg\n            ;;\n        --help|-h|-?)\n            HELP=true\n            ;;\n        --list)\n            LIST_TESTS=true\n            ;;\n        --no-sysroot)\n            NO_SYSROOT=true\n            ;;\n        --prefix=*)\n            PREFIX=$optarg\n            ;;\n        --quiet|-q)\n            VERBOSE=$(( $VERBOSE - 1 ))\n            ;;\n        --sysroot=*)\n            SYSROOT=$optarg\n            ;;\n        --verbose|-v)\n            VERBOSE=$(( $VERBOSE + 1 ))\n            ;;\n        -*)\n            panic \"Unknown option '$opt'. See --help for list of valid ones.\"\n            ;;\n        *)\n            TEST_SUBDIRS=$TEST_SUBDIRS\" \"$opt\n            ;;\n    esac\ndone\n\nif [ \"$HELP\" ]; then\n    echo \"Usage: $PROGNAME [options] [testname+]\"\n    echo \"\"\n    echo \"Run a set of unit tests to check that a given Android NDK toolchain works\"\n    echo \"as expected. Useful to catch regressions when generating new toolchain\"\n    echo \"binaries.\"\n    echo \"\"\n    echo \"You can pass the full path to the toolchain either with the --prefix\"\n    echo \"option, or by defining PREFIX in your environment before calling this script.\"\n    echo \"For example:\"\n    echo \"\"\n    echo \"  $PROGNAME --prefix=\\$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi\"\n    echo \"\"\n    echo \"The prefix can also be the full-path to the \\$TARGET-gcc or \\$TARGET-g++ program \"\n    echo \"\"\n    echo \"The script will automatically use an NDK-provided sysroot, but you can specify an\"\n    echo \"alternate one with the --sysroot=<path> option. You can also use --no-sysroot if\"\n    echo \"the toolchain already provides its own sysroot (e.g. if it is a standalone toolchain\"\n    echo \"generated with make-standalone-toolchain.sh).\"\n    echo \"\"\n    echo \"The target ABI is normally auto-detected from the toolchain, but you can specify an\"\n    echo \"alternative one with the --abi=<name> option. This is only useful on ARM, where the\"\n    echo \"default ABI is 'armeabi' targetting the ARMv5TE instruction set. If you want to check\"\n    echo \"the generation of ARMv7-A machine code, use the following:\"\n    echo \"\"\n    echo \"  --abi=armeabi-v7a\"\n    echo \"\"\n    echo \"When called without any arguments, the script will run all known toolchain tests.\"\n    echo \"You can restrict the list of tests by passing them on the command-line. Use --list\"\n    echo \"to display the list of all tests that are relevant for your current ABI.\"\n    echo \"\"\n    echo \"More information about each test can be displayed by using --verbose.\"\n    echo \"\"\n    echo \"Valid options:\"\n    echo \"\"\n    echo \"    --help|-h|-?        Print this message.\"\n    echo \"    --verbose|-v        Increase verbosity.\"\n    echo \"    --quiet|-q          Decrease verbosity.\"\n    echo \"    --list              List all available tests for current ABI.\"\n    echo \"    --prefix=<prefix>   Specify full toolchain binary prefix.\"\n    echo \"    --sysroot=<path>    Specify alternate sysroot.\"\n    echo \"    --no-sysroot        Do not use a sysroot.\"\n    echo \"    --abi=<name>        Specify target ABI name.\"\n    echo \"\"\n    exit 0\nfi\n\nTMPDIR=/tmp/ndk-$USER/tests/standalone\nmkdir -p \"$TMPDIR\" && rm -rf \"$TMPDIR/*\"\n\nBUILD_DIR=$TMPDIR/build\nmkdir -p \"$BUILD_DIR\"\n\nif [ -n \"$TMPLOG\" ] ; then\n    LOGFILE=$TMPLOG\nelse\n    echo 1 > /tmp/tmp_log_not_set\n    LOGFILE=$TMPDIR/log.txt\nfi\necho \"############################################\" >> $LOGFILE\necho \" $*\" >> $LOGFILE\necho \"############################################\" >> $LOGFILE\n\nif [ $VERBOSE -ge 3 ]; then\n    run () {\n        echo \"# COMMAND: $@\"\n        \"$@\"\n    }\nelif [ $VERBOSE -ge 2 ]; then\n    run () {\n        echo \"# COMMAND: $@\" >> $LOGFILE\n        \"$@\"\n    }\nelse\n    run () {\n        echo \"# COMMAND[$@]\" >> $LOGFILE\n        \"$@\" >> $LOGFILE 2>&1\n    }\nfi\n\nif [ $VERBOSE -ge 2 ]; then\n    run_script () {\n        $SHELL \"$@\"\n    }\nelse\n    run_script () {\n        $SHELL \"$@\" >> $LOGFILE 2>&1\n    }\nfi\n\nif [ $VERBOSE -ge 1 ]; then\n    dump () {\n        echo \"$@\"\n    }\nelse\n    dump () {\n        :  # nothing\n    }\nfi\n\nif [ \"$HOST_OS\" = \"cygwin\" -o \"$HOST_OS\" = \"windows\" ] ; then\n    NULL=\"NUL\"\nelse\n    NULL=\"/dev/null\"\nfi\n\n# Probe a given sub-directory and see if it contains valid test files.\n# $1: sub-directory path\n# Return: 0 on success, 1 otherwise\n#\n# This can also sets the following global variables:\n#   TEST_TYPE\n#   SCRIPT\n#   SOURCES\n#\nprobe_test_subdir ()\n{\n    local DIR=\"$1\"\n\n    TEST_TYPE=\n    SCRIPT=\n    SOURCES=\n\n    if [ -f \"$DIR/run.sh\" ]; then\n        TEST_TYPE=script\n        SCRIPT=run.sh\n\n    elif [ -f \"$DIR/run-$ABI.sh\" ]; then\n        TEST_TYPE=script\n        SCRIPT=run-$ABI.sh\n\n    elif [ -f \"$DIR/main.c\" ]; then\n        TEST_TYPE=c_executable\n        SOURCES=main.c\n\n    elif [ -f \"$DIR/main.cpp\" ]; then\n        TEST_TYPE=cxx_executable\n        SOURCES=main.cpp\n\n    elif [ -f \"$DIR/main.m\" ]; then\n        TEST_TYPE=objc_executable\n        SOURCES=main.m\n\n    elif [ -f \"$DIR/main.mm\" ]; then\n        TEST_TYPE=objcxx_executable\n        SOURCES=main.mm\n\n    else\n        return 1\n    fi\n\n    return 0\n}\n\n\n# Handle --list option now, then exit\nif [ -n \"$LIST_TESTS\" ]; then\n    echo \"List of available toolchain tests:\"\n    if [ -z \"$ABI\" ]; then\n        ABI=armeabi\n    fi\n    for TEST_SUBDIR in $(cd $PROGDIR && ls -d *); do\n        SUBDIR=$PROGDIR/$TEST_SUBDIR\n        if probe_test_subdir \"$SUBDIR\"; then\n            echo \"  $TEST_SUBDIR\"\n        fi\n    done\n    exit 0\nfi\n\nif [ -z \"$PREFIX\" ]; then\n    panic \"Please define PREFIX in your environment, or use --prefix=<prefix> option.\"\nfi\n\nCC=\nCXX=\nCC_TARGET=\nif [ \"$PREFIX\" = \"${PREFIX%clang}\" ]; then\n    # Test GCC\n    # Remove -gcc or -g++ from prefix if any\n    PREFIX=${PREFIX%-gcc}\n    PREFIX=${PREFIX%-g++}\n\n    # Add a trailing dash to the prefix, if there isn't any\n    PREFIX=${PREFIX%-}-\n\n    GCC=${PREFIX}gcc\n    if [ ! -f \"$GCC\" ]; then\n        panic \"Missing compiler, please fix your prefix definition: $GCC\"\n    fi\n\n    GCC=$(which $GCC 2>$NULL)\n    if [ -z \"$GCC\" -o ! -f \"$GCC\" ]; then\n        panic \"Bad compiler path: ${PREFIX}gcc\"\n    fi\n\n    # Remove trailing .exe if any\n    GCC=${GCC%${HOST_EXE}}\n\n    GCCDIR=$(dirname \"$GCC\")\n    GCCBASE=$(basename \"$GCC\")\n\n    GCCDIR=$(cd \"$GCCDIR\" && pwd)\n    GCC=$GCCDIR/$GCCBASE\n\n    PREFIX=${GCC%%gcc}\n\n    CC=${PREFIX}gcc\n    CXX=${PREFIX}g++\n    CC_TARGET=$($GCC -v 2>&1 | tr ' ' '\\n' | grep -e --target=)\n    CC_TARGET=${CC_TARGET##--target=}\n\n    GCC_VERSION=$($GCC -v 2>&1 | awk '/gcc version/ { print $3 }')\n    if [ \"$GCC_VERSION\" = \"4.6\" ]; then\n        LDFLAGS=\"$LDFLAGS -Wl,-z,muldefs\"\n    else\n        LDFLAGS=\"$LDFLAGS -lstdc++ -latomic\"\n    fi\nelse\n    # Test Clang\n    # Remove clang or clang++ from prefix if any\n    PREFIX=${PREFIX%clang}\n    PREFIX=${PREFIX%clang++}\n\n    CLANG=${PREFIX}clang\n    if [ ! -f \"$CLANG\" ]; then\n        panic \"Missing compiler, please fix your prefix definition: $CLANG\"\n    fi\n\n    CLANGDIR=$(dirname \"$CLANG\")\n    CLANGBASE=$(basename \"$CLANG\")\n\n    CLANGDIR=$(cd \"$CLANGDIR\" && pwd)\n    CLANG=$CLANGDIR/$CLANGBASE\n\n    PREFIX=${CLANG%%clang}\n\n    # Find *-ld in the same directory eventaully usable as ${PREFIX}-ld\n    GNU_LD=$(cd $CLANGDIR && ls *-ld${HOST_EXE})\n    GNU_LD=$CLANGDIR/$GNU_LD\n    if [ ! -f \"$GNU_LD\" ]; then\n        panic \"Missing linker in the same directory as clang/clang++: $CLANGDIR\"\n    fi\n\n    PREFIX=${GNU_LD%ld${HOST_EXE}}\n\n    CC=$CLANG\n    CXX=${CLANG%clang}clang++\n    CC_TARGET=$($CLANG -v 2>&1 | grep Target:)\n    CC_TARGET=${CC_TARGET##Target: }\n\n    CLANG_VERSION=$($CLANG -v 2>&1 | awk '/version/ { print $3 }')\n    if [ \"$CLANG_VERSION\" = \"3.4\" ]; then\n        OBJC_CFLAGS=\"-integrated-as\"\n    fi\n\n    LDFLAGS=\"$LDFLAGS -lstdc++ -latomic\"\nfi\n\nif [ -z \"$ABI\" ]; then\n    # Auto-detect target CPU architecture\n    dump \"Auto-detected target configuration: $CC_TARGET\"\n    case $CC_TARGET in\n        arm*-linux-androideabi)\n            ABI=armeabi\n            ARCH=arm\n            ;;\n        i686*-linux-android)\n            ABI=x86\n            ARCH=x86\n            ;;\n        mipsel*-linux-android)\n            ABI=mips\n            ARCH=mips\n            if [ \"$CLANG_VERSION\" = \"3.5\" ]; then\n                OBJC_CFLAGS=\"-fintegrated-as\"\n            fi\n            ;;\n        aarch64*-linux-android)\n            ABI=arm64-v8a\n            ARCH=arm64\n            ;;\n        x86_64*-linux-android)\n            ABI=x86_64\n            ARCH=x86_64\n            ;;\n        mips64el*-linux-android)\n            ABI=mips64\n            ARCH=mips64\n            if [ \"$CLANG_VERSION\" = \"3.5\" ]; then\n                OBJC_CFLAGS=\"-fintegrated-as\"\n            fi\n            ;;\n        *)\n            panic \"Unknown target architecture '$CC_TARGET', please use --abi=<name> to manually specify ABI.\"\n    esac\n    dump \"Auto-config: --abi=$ABI\"\nfi\n\nCOMMON_FLAGS=\n\n# Ensure ABI_<abi> is defined as a compiler macro when building test programs.\n# as a compiler macro when building all test programs.\nABI_MACRO=ABI_$(echo \"$ABI\" | tr '-' '_')\nCOMMON_FLAGS=$COMMON_FLAGS\" -D$ABI_MACRO=1\"\nif [ \"$ABI\" == \"armeabi-v7a\" ]; then\n    COMMON_FLAGS=$COMMON_FLAGS\" -march=armv7-a -mfloat-abi=softfp\"\nelif [ \"$ABI\" == \"armeabi-v7a-hard\" ]; then\n    COMMON_FLAGS=$COMMON_FLAGS\" -march=armv7-a -mhard-float -Wl,--no-warn-mismatch -lm_hard\"\nfi\n\nif [ -n \"$NO_SYSROOT\" ]; then\n    SYSROOT=\nelif [ -n \"$SYSROOT\" ]; then\n    if [ ! -d \"$SYSROOT\" ]; then\n        panic \"Sysroot directory does not exist: $SYSROOT\"\n    fi\n    # Sysroot must be absolute path\n    SYSROOT=$(cd $SYSROOT && pwd)\n    COMMON_FLAGS=$COMMON_FLAGS\" --sysroot=$SYSROOT\"\nelse\n    # Auto-detect sysroot\n    PLATFORM=\"android-\"$(get_default_api_level_for_arch $ARCH)\n    SYSROOT=$NDK_ROOT/platforms/$PLATFORM/arch-$ARCH\n    if [ ! -d \"$SYSROOT\" ]; then\n        panic \"Can't find sysroot file, use --sysroot to point to valid one: $SYSROOT\"\n    fi\n    if [ ! -f \"$SYSROOT/usr/lib/libc.so\" ]; then\n        panic \"Incomplete sysroot, use --sysroot to point to valid one: $SYSROOT\"\n    fi\n    if [ \"$HOST_OS\" = \"cygwin\" ]; then\n        SYSROOT=`cygpath -m $SYSROOT`\n    else\n        if [ \"$HOST_OS\" = \"windows\" -a \"$OSTYPE\" = \"msys\" ]; then\n            # use -W specific to MSys to get windows path\n            SYSROOT=$(cd $SYSROOT ; pwd -W)\n        fi\n    fi\n    dump \"Auto-config: --sysroot=$SYSROOT\"\n    COMMON_FLAGS=$COMMON_FLAGS\" --sysroot=$SYSROOT\"\nfi\n\nif [ -z \"$CXXFLAGS\" ]; then\n    CXXFLAGS=$CFLAGS\nfi\n\n# NOTE: We need to add -fno-exceptions, otherwise some toolchains compile\n#        with exception support by default, and the test programs fail to\n#        link due to an undefined reference to __gxx_personality_v0.\n#\n#        This symbol is normally part of libsupc++ which is not available\n#        if you don't have the GNU libstdc++ installed into your toolchain\n#        directory.\n#\n#        Affects the x86 and mips toolchains, but not the ARM one.\n#        Not sure if we want exceptions enabled by default or not.\n#\nCXXFLAGS=$CXXFLAGS\" -fno-exceptions\"\n\nCFLAGS=$COMMON_FLAGS\" \"$CFLAGS\nCXXFLAGS=$COMMON_FLAGS\" \"$CXXFLAGS\n\n# gccunwind library is needed only when we run tests on toolchain made with Libc++ as STL library\n# since we do not have simple way to test for STL type, just check if gccunwind library exists\nif [ -f \"$(dirname \"$PREFIX\")/../sysroot/usr/lib/libgccunwind.a\" ]; then\n    OBJC_LDFLAGS=\"-lgccunwind $OBJC_LDFLAGS\"\nfi\nOBJC_LDFLAGS=\"-lobjc $OBJC_LDFLAGS\"\n\nif [ -z \"$TEST_SUBDIRS\" ]; then\n    TEST_SUBDIRS=$(cd $PROGDIR && ls -d *)\nfi\n\nCOUNT=0\nFAILURES=0\nfor TEST_SUBDIR in $TEST_SUBDIRS; do\n    SUBDIR=$PROGDIR/$TEST_SUBDIR\n\n    if ! probe_test_subdir \"$SUBDIR\"; then\n        continue\n    fi\n\n    rm -rf \"$BUILD_DIR\"/* &&\n    cp -RL \"$SUBDIR\"/* \"$BUILD_DIR/\"\n    fail_panic \"Could not copy test files to $BUILD_DIR !?\"\n\n    dump_n \"Running $TEST_SUBDIR test... \"\n\n    case $TEST_TYPE in\n        script)\n            (\n                export PREFIX CC CXX CFLAGS CXXFLAGS LDFLAGS VERBOSE ABI NULL\n                run cd \"$BUILD_DIR\" && run_script $SCRIPT\n            )\n            RET=$?\n            ;;\n\n        c_executable)\n            (\n                run cd \"$BUILD_DIR\" && run $CC $CFLAGS -o $NULL $SOURCES $LDFLAGS\n            )\n            RET=$?\n            ;;\n \n        cxx_executable)\n            (\n                run cd \"$BUILD_DIR\" && run $CXX $CXXFLAGS -o $NULL $SOURCES $LDFLAGS\n            )\n            RET=$?\n            ;;\n \n        objc_executable)\n            (\n                run cd \"$BUILD_DIR\" && run $CC $CFLAGS $OBJC_CFLAGS -o $NULL $SOURCES $OBJC_LDFLAGS\n            )\n            RET=$?\n            ;;\n \n        objcxx_executable)\n            (\n                run cd \"$BUILD_DIR\" && run $CXX $CXXFLAGS $OBJC_CFLAGS -o $NULL $SOURCES $OBJC_LDFLAGS\n            )\n            RET=$?\n            ;;\n    esac\n\n    if [ \"$RET\" != 0 ]; then\n        dump \"KO\"\n        FAILURES=$(( $FAILURES + 1 ))\n    else\n        dump \"ok\"\n    fi\n    COUNT=$(( $COUNT + 1 ))\ndone\n\nif [ \"$FAILURES\" -eq 0 ]; then\n    dump \"$COUNT/$COUNT tests passed. Success.\"\n    exit 0\nelse\n    dump \"$FAILURES tests failed out of $COUNT.\"\n    exit 1\nfi\n"
  },
  {
    "path": "tests/test_filters.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nimport unittest\n\nfrom filters import TestFilter\n\n\nclass FilterTest(unittest.TestCase):\n    def test_filters(self):\n        filters = TestFilter.from_string('foo,ba*')\n        self.assertTrue(filters.filter('foo'))\n        self.assertTrue(filters.filter('bar'))\n        self.assertTrue(filters.filter('baz'))\n        self.assertFalse(filters.filter('qux'))\n\n        filters.add_filter('woodly.*')\n        filters.add_filter('doodly.b*')\n        filters.add_filter('qu*.b*')\n\n        self.assertTrue(filters.filter('foo'))\n        self.assertTrue(filters.filter('foo.bar'))\n\n        self.assertTrue(filters.filter('woodly.bar'))\n        self.assertFalse(filters.filter('woo.bar'))\n\n        self.assertTrue(filters.filter('doodly'))\n        self.assertTrue(filters.filter('doodly.baz'))\n        self.assertFalse(filters.filter('doodly.qux'))\n\n        self.assertTrue(filters.filter('qux'))\n        self.assertTrue(filters.filter('quux'))\n        self.assertTrue(filters.filter('qux.bar'))\n        self.assertTrue(filters.filter('quux.bar'))\n        self.assertFalse(filters.filter('qux.foo'))\n        self.assertFalse(filters.filter('qx.bar'))\n\n    def test_empty_filters(self):\n        filters = TestFilter.from_string('')\n        self.assertTrue(filters.filter('foo'))\n        self.assertTrue(filters.filter('foo.bar'))\n"
  },
  {
    "path": "tests/tests.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nfrom __future__ import print_function\n\nimport difflib\nimport filecmp\nimport glob\nimport imp\nimport multiprocessing\nimport os\nimport posixpath\nimport re\nimport shutil\nimport subprocess\n\nimport ndk\nimport util\n\n# pylint: disable=no-self-use\n\n\ndef _get_jobs_arg():\n    return '-j{}'.format(multiprocessing.cpu_count() * 2)\n\n\ndef _make_subtest_name(test, case):\n    return '.'.join([test, case])\n\n\ndef _scan_test_suite(suite_dir, test_class, *args):\n    tests = []\n    for dentry in os.listdir(suite_dir):\n        path = os.path.join(suite_dir, dentry)\n        if os.path.isdir(path):\n            tests.append(test_class.from_dir(path, *args))\n    return tests\n\n\nclass TestRunner(object):\n    def __init__(self, printer):\n        self.printer = printer\n        self.tests = {}\n\n    def add_suite(self, name, path, test_class, *args):\n        if name in self.tests:\n            raise KeyError('suite {} already exists'.format(name))\n        self.tests[name] = _scan_test_suite(path, test_class, *args)\n\n    def _fixup_expected_failure(self, result, config, bug):\n        if isinstance(result, Failure):\n            return ExpectedFailure(result.test_name, config, bug)\n        elif isinstance(result, Success):\n            return UnexpectedSuccess(result.test_name, config, bug)\n        else:  # Skipped, UnexpectedSuccess, or ExpectedFailure.\n            return result\n\n    def _run_test(self, test, out_dir, test_filters):\n        if not test_filters.filter(test.name):\n            return []\n\n        config = test.check_unsupported()\n        if config is not None:\n            message = 'test unsupported for {}'.format(config)\n            return [Skipped(test.name, message)]\n\n        config, bug = test.check_broken()\n        results = []\n        for result in test.run(out_dir, test_filters):\n            if config is not None:\n                # We need to check change each pass/fail to either an\n                # ExpectedFailure or an UnexpectedSuccess as necessary.\n                result = self._fixup_expected_failure(result, config, bug)\n            self.printer.print_result(result)\n            results.append(result)\n        return results\n\n    def run(self, out_dir, test_filters):\n        results = {suite: [] for suite in self.tests.keys()}\n        for suite, tests in self.tests.items():\n            test_results = []\n            for test in tests:\n                test_results.extend(self._run_test(test, out_dir,\n                                                   test_filters))\n            results[suite] = test_results\n        return results\n\n\nclass TestResult(object):\n    def __init__(self, test_name):\n        self.test_name = test_name\n\n    def __repr__(self):\n        return self.to_string(colored=False)\n\n    def passed(self):\n        raise NotImplementedError\n\n    def failed(self):\n        raise NotImplementedError\n\n    def to_string(self, colored=False):\n        raise NotImplementedError\n\n\nclass Failure(TestResult):\n    def __init__(self, test_name, message):\n        super(Failure, self).__init__(test_name)\n        self.message = message\n\n    def passed(self):\n        return False\n\n    def failed(self):\n        return True\n\n    def to_string(self, colored=False):\n        label = util.maybe_color('FAIL', 'red', colored)\n        return '{} {}: {}'.format(label, self.test_name, self.message)\n\n\nclass Success(TestResult):\n    def passed(self):\n        return True\n\n    def failed(self):\n        return False\n\n    def to_string(self, colored=False):\n        label = util.maybe_color('PASS', 'green', colored)\n        return '{} {}'.format(label, self.test_name)\n\n\nclass Skipped(TestResult):\n    def __init__(self, test_name, reason):\n        super(Skipped, self).__init__(test_name)\n        self.reason = reason\n\n    def passed(self):\n        return False\n\n    def failed(self):\n        return False\n\n    def to_string(self, colored=False):\n        label = util.maybe_color('SKIP', 'yellow', colored)\n        return '{} {}: {}'.format(label, self.test_name, self.reason)\n\n\nclass ExpectedFailure(TestResult):\n    def __init__(self, test_name, config, bug):\n        super(ExpectedFailure, self).__init__(test_name)\n        self.config = config\n        self.bug = bug\n\n    def passed(self):\n        return True\n\n    def failed(self):\n        return False\n\n    def to_string(self, colored=False):\n        label = util.maybe_color('KNOWN FAIL', 'yellow', colored)\n        return '{} {}: known failure for {} ({})'.format(\n            label, self.test_name, self.config, self.bug)\n\n\nclass UnexpectedSuccess(TestResult):\n    def __init__(self, test_name, config, bug):\n        super(UnexpectedSuccess, self).__init__(test_name)\n        self.config = config\n        self.bug = bug\n\n    def passed(self):\n        return False\n\n    def failed(self):\n        return True\n\n    def to_string(self, colored=False):\n        label = util.maybe_color('SHOULD FAIL', 'red', colored)\n        return '{} {}: unexpected success for {} ({})'.format(\n            label, self.test_name, self.config, self.bug)\n\n\nclass Test(object):\n    def __init__(self, name, test_dir):\n        self.name = name\n        self.test_dir = test_dir\n        self.config = self.get_test_config()\n\n    def get_test_config(self):\n        return TestConfig.from_test_dir(self.test_dir)\n\n    def run(self, out_dir, test_filters):\n        raise NotImplementedError\n\n    def check_broken(self):\n        return self.config.match_broken(self.abi, self.platform,\n                                        self.toolchain)\n\n    def check_unsupported(self):\n        return self.config.match_unsupported(self.abi, self.platform,\n                                             self.toolchain)\n\n    def check_subtest_broken(self, name):\n        return self.config.match_broken(self.abi, self.platform,\n                                        self.toolchain, subtest=name)\n\n    def check_subtest_unsupported(self, name):\n        return self.config.match_unsupported(self.abi, self.platform,\n                                             self.toolchain, subtest=name)\n\n\nclass AwkTest(Test):\n    def __init__(self, name, test_dir, script):\n        super(AwkTest, self).__init__(name, test_dir)\n        self.script = script\n\n    @classmethod\n    def from_dir(cls, test_dir):\n        test_name = os.path.basename(test_dir)\n        script_name = test_name + '.awk'\n        script = os.path.join(ndk.NDK_ROOT, 'build/awk', script_name)\n        if not os.path.isfile(script):\n            msg = '{} missing test script: {}'.format(test_name, script)\n            raise RuntimeError(msg)\n\n        # Check that all of our test cases are valid.\n        for test_case in glob.glob(os.path.join(test_dir, '*.in')):\n            golden_path = re.sub(r'\\.in$', '.out', test_case)\n            if not os.path.isfile(golden_path):\n                msg = '{} missing output: {}'.format(test_name, golden_path)\n                raise RuntimeError(msg)\n        return cls(test_name, test_dir, script)\n\n    # Awk tests only run in a single configuration. Disabling them per ABI,\n    # platform, or toolchain has no meaning. Stub out the checks.\n    def check_broken(self):\n        return None, None\n\n    def check_unsupported(self):\n        return None\n\n    def run(self, out_dir, test_filters):\n        for test_case in glob.glob(os.path.join(self.test_dir, '*.in')):\n            golden_path = re.sub(r'\\.in$', '.out', test_case)\n            result = self.run_case(out_dir, test_case, golden_path,\n                                   test_filters)\n            if result is not None:\n                yield result\n\n    def run_case(self, out_dir, test_case, golden_out_path, test_filters):\n        case_name = os.path.splitext(os.path.basename(test_case))[0]\n        name = _make_subtest_name(self.name, case_name)\n\n        if not test_filters.filter(name):\n            return None\n\n        out_path = os.path.join(out_dir, os.path.basename(golden_out_path))\n\n        with open(test_case, 'r') as test_in, open(out_path, 'w') as out_file:\n            awk_path = ndk.get_tool('awk')\n            print('{} -f {} < {} > {}'.format(\n                awk_path, self.script, test_case, out_path))\n            rc = subprocess.call([awk_path, '-f', self.script], stdin=test_in,\n                                 stdout=out_file)\n            if rc != 0:\n                return Failure(name, 'awk failed')\n\n        if filecmp.cmp(out_path, golden_out_path):\n            return Success(name)\n        else:\n            with open(out_path) as out_file:\n                out_lines = out_file.readlines()\n            with open(golden_out_path) as golden_out_file:\n                golden_lines = golden_out_file.readlines()\n            diff = ''.join(difflib.unified_diff(\n                golden_lines, out_lines, fromfile='expected', tofile='actual'))\n            message = 'output does not match expected:\\n\\n' + diff\n            return Failure(name, message)\n\n\ndef _prep_build_dir(src_dir, out_dir):\n    if os.path.exists(out_dir):\n        shutil.rmtree(out_dir)\n    shutil.copytree(src_dir, out_dir)\n\n\nclass TestConfig(object):\n    \"\"\"Describes the status of a test.\n\n    Each test directory can contain a \"test_config.py\" file that describes\n    the configurations a test is not expected to pass for. Previously this\n    information could be captured in one of two places: the Application.mk\n    file, or a BROKEN_BUILD/BROKEN_RUN file.\n\n    Application.mk was used to state that a test was only to be run for a\n    specific platform version, specific toolchain, or a set of ABIs.\n    Unfortunately Application.mk could only specify a single toolchain or\n    platform, not a set.\n\n    BROKEN_BUILD/BROKEN_RUN files were too general. An empty file meant the\n    test should always be skipped regardless of configuration. Any change that\n    would put a test in that situation should be reverted immediately. These\n    also didn't make it clear if the test was actually broken (and thus should\n    be fixed) or just not applicable.\n\n    A test_config.py file is more flexible. It is a Python module that defines\n    at least one function by the same name as one in TestConfig.NullTestConfig.\n    If a function is not defined the null implementation (not broken,\n    supported), will be used.\n    \"\"\"\n\n    class NullTestConfig(object):\n        def __init__(self):\n            pass\n\n        # pylint: disable=unused-argument\n        @staticmethod\n        def match_broken(abi, platform, toolchain, subtest=None):\n            \"\"\"Tests if a given configuration is known broken.\n\n            A broken test is a known failing test that should be fixed.\n\n            Any test with a non-empty broken section requires a \"bug\" entry\n            with a link to either an internal bug (http://b/BUG_NUMBER) or a\n            public bug (http://b.android.com/BUG_NUMBER).\n\n            These tests will still be built and run. If the test succeeds, it\n            will be reported as an error.\n\n            Returns: A tuple of (broken_configuration, bug) or (None, None).\n            \"\"\"\n            return None, None\n\n        @staticmethod\n        def match_unsupported(abi, platform, toolchain, subtest=None):\n            \"\"\"Tests if a given configuration is unsupported.\n\n            An unsupported test is a test that do not make sense to run for a\n            given configuration. Testing x86 assembler on MIPS, for example.\n\n            These tests will not be built or run.\n\n            Returns: The string unsupported_configuration or None.\n            \"\"\"\n            return None\n        # pylint: enable=unused-argument\n\n    def __init__(self, file_path):\n\n        # Note that this namespace isn't actually meaningful from our side;\n        # it's only what the loaded module's __name__ gets set to.\n        dirname = os.path.dirname(file_path)\n        namespace = '.'.join([dirname, 'test_config'])\n\n        try:\n            self.module = imp.load_source(namespace, file_path)\n        except IOError:\n            self.module = None\n\n        try:\n            self.match_broken = self.module.match_broken\n        except AttributeError:\n            self.match_broken = self.NullTestConfig.match_broken\n\n        try:\n            self.match_unsupported = self.module.match_unsupported\n        except AttributeError:\n            self.match_unsupported = self.NullTestConfig.match_unsupported\n\n    @classmethod\n    def from_test_dir(cls, test_dir):\n        path = os.path.join(test_dir, 'test_config.py')\n        return cls(path)\n\n\nclass DeviceTestConfig(TestConfig):\n    \"\"\"Specialization of test_config.py that includes device API level.\n\n    We need to mark some tests as broken or unsupported based on what device\n    they are running on, as opposed to just what they were built for.\n    \"\"\"\n    class NullTestConfig(object):\n        def __init__(self):\n            pass\n\n        # pylint: disable=unused-argument\n        @staticmethod\n        def match_broken(abi, platform, device_platform, toolchain,\n                         subtest=None):\n            return None, None\n\n        @staticmethod\n        def match_unsupported(abi, platform, device_platform, toolchain,\n                              subtest=None):\n            return None\n        # pylint: enable=unused-argument\n\n\ndef _run_build_sh_test(test_name, build_dir, test_dir, build_flags, abi,\n                       platform, toolchain):\n    _prep_build_dir(test_dir, build_dir)\n    with util.cd(build_dir):\n        build_cmd = ['bash', 'build.sh', _get_jobs_arg()] + build_flags\n        test_env = dict(os.environ)\n        if abi is not None:\n            test_env['APP_ABI'] = abi\n        if platform is not None:\n            test_env['APP_PLATFORM'] = platform\n        assert toolchain is not None\n        test_env['NDK_TOOLCHAIN_VERSION'] = toolchain\n        rc, out = util.call_output(build_cmd, env=test_env)\n        if rc == 0:\n            return Success(test_name)\n        else:\n            return Failure(test_name, out)\n\n\ndef _run_ndk_build_test(test_name, build_dir, test_dir, build_flags, abi,\n                        platform, toolchain):\n    _prep_build_dir(test_dir, build_dir)\n    with util.cd(build_dir):\n        args = [\n            'APP_ABI=' + abi,\n            'NDK_TOOLCHAIN_VERSION=' + toolchain,\n            _get_jobs_arg(),\n        ]\n        if platform is not None:\n            args.append('APP_PLATFORM=' + platform)\n        rc, out = ndk.build(build_flags + args)\n        if rc == 0:\n            return Success(test_name)\n        else:\n            return Failure(test_name, out)\n\n\nclass PythonBuildTest(Test):\n    \"\"\"A test that is implemented by test.py.\n\n    A test.py test has a test.py file in its root directory. This module\n    contains a run_test function which returns a tuple of `(boolean_success,\n    string_failure_message)` and takes the following kwargs (all of which\n    default to None):\n\n    abi: ABI to test as a string.\n    platform: Platform to build against as a string.\n    toolchain: Toolchain to use as a string.\n    build_flags: Additional build flags that should be passed to ndk-build if\n                 invoked as a list of strings.\n    \"\"\"\n    def __init__(self, name, test_dir, abi, platform, toolchain, build_flags):\n        super(PythonBuildTest, self).__init__(name, test_dir)\n        self.abi = abi\n        self.platform = platform\n        self.toolchain = toolchain\n        self.build_flags = build_flags\n\n    def run(self, out_dir, _):\n        build_dir = os.path.join(out_dir, self.name)\n        print('Building test: {}'.format(self.name))\n        _prep_build_dir(self.test_dir, build_dir)\n        with util.cd(build_dir):\n            module = imp.load_source('test', 'test.py')\n            success, failure_message = module.run_test(\n                abi=self.abi, platform=self.platform, toolchain=self.toolchain,\n                build_flags=self.build_flags)\n            if success:\n                yield Success(self.name)\n            else:\n                yield Failure(self.name, failure_message)\n\n\nclass ShellBuildTest(Test):\n    def __init__(self, name, test_dir, abi, platform, toolchain, build_flags):\n        super(ShellBuildTest, self).__init__(name, test_dir)\n        self.abi = abi\n        self.platform = platform\n        self.toolchain = toolchain\n        self.build_flags = build_flags\n\n    def run(self, out_dir, _):\n        build_dir = os.path.join(out_dir, self.name)\n        print('Building test: {}'.format(self.name))\n        if os.name == 'nt':\n            reason = 'build.sh tests are not supported on Windows'\n            yield Skipped(self.name, reason)\n        else:\n            yield _run_build_sh_test(self.name, build_dir, self.test_dir,\n                                     self.build_flags, self.abi, self.platform,\n                                     self.toolchain)\n\n\nclass NdkBuildTest(Test):\n    def __init__(self, name, test_dir, abi, platform, toolchain, build_flags):\n        super(NdkBuildTest, self).__init__(name, test_dir)\n        self.abi = abi\n        self.platform = platform\n        self.toolchain = toolchain\n        self.build_flags = build_flags\n\n    def run(self, out_dir, _):\n        build_dir = os.path.join(out_dir, self.name)\n        print('Building test: {}'.format(self.name))\n        yield _run_ndk_build_test(self.name, build_dir, self.test_dir,\n                                  self.build_flags, self.abi,\n                                  self.platform, self.toolchain)\n\n\nclass BuildTest(object):\n    @classmethod\n    def from_dir(cls, test_dir, abi, platform, toolchain, build_flags):\n        test_name = os.path.basename(test_dir)\n\n        if os.path.isfile(os.path.join(test_dir, 'test.py')):\n            return PythonBuildTest(test_name, test_dir, abi, platform,\n                                   toolchain, build_flags)\n        elif os.path.isfile(os.path.join(test_dir, 'build.sh')):\n            return ShellBuildTest(test_name, test_dir, abi, platform,\n                                  toolchain, build_flags)\n        else:\n            return NdkBuildTest(test_name, test_dir, abi, platform,\n                                toolchain, build_flags)\n\n\ndef _copy_test_to_device(device, build_dir, device_dir, abi, test_filters,\n                         test_name):\n    abi_dir = os.path.join(build_dir, 'libs', abi)\n    if not os.path.isdir(abi_dir):\n        raise RuntimeError('No libraries for {}'.format(abi))\n\n    test_cases = []\n    for test_file in os.listdir(abi_dir):\n        if test_file in ('gdbserver', 'gdb.setup'):\n            continue\n\n        file_is_lib = True\n        if not test_file.endswith('.so'):\n            file_is_lib = False\n            case_name = _make_subtest_name(test_name, test_file)\n            if not test_filters.filter(case_name):\n                continue\n            test_cases.append(test_file)\n\n        # TODO(danalbert): Libs with the same name will clobber each other.\n        # This was the case with the old shell based script too. I'm trying not\n        # to change too much in the translation.\n        lib_path = os.path.join(abi_dir, test_file)\n        print('Pushing {} to {}...'.format(lib_path, device_dir))\n        device.push(lib_path, device_dir)\n\n        # Binaries pushed from Windows may not have execute permissions.\n        if not file_is_lib:\n            file_path = posixpath.join(device_dir, test_file)\n            # Can't use +x because apparently old versions of Android didn't\n            # support that...\n            device.shell(['chmod', '777', file_path])\n\n        # TODO(danalbert): Sync data.\n        # The libc++ tests contain a DATA file that lists test names and their\n        # dependencies on file system data. These files need to be copied to\n        # the device.\n\n    if len(test_cases) == 0:\n        raise RuntimeError('Could not find any test executables.')\n\n    return test_cases\n\n\nclass DeviceTest(Test):\n    def __init__(self, name, test_dir, abi, platform, device, device_platform,\n                 toolchain, build_flags):\n        super(DeviceTest, self).__init__(name, test_dir)\n        self.abi = abi\n        self.platform = platform\n        self.device = device\n        self.device_platform = device_platform\n        self.toolchain = toolchain\n        self.build_flags = build_flags\n\n    @classmethod\n    def from_dir(cls, test_dir, abi, platform, device, device_platform,\n                 toolchain, build_flags):\n        test_name = os.path.basename(test_dir)\n        return cls(test_name, test_dir, abi, platform, device, device_platform,\n                   toolchain, build_flags)\n\n    def get_test_config(self):\n        return DeviceTestConfig.from_test_dir(self.test_dir)\n\n    def check_broken(self):\n        return self.config.match_broken(self.abi, self.platform,\n                                        self.device_platform,\n                                        self.toolchain)\n\n    def check_unsupported(self):\n        return self.config.match_unsupported(self.abi, self.platform,\n                                             self.device_platform,\n                                             self.toolchain)\n\n    def check_subtest_broken(self, name):\n        return self.config.match_broken(self.abi, self.platform,\n                                        self.device_platform,\n                                        self.toolchain, subtest=name)\n\n    def check_subtest_unsupported(self, name):\n        return self.config.match_unsupported(self.abi, self.platform,\n                                             self.device_platform,\n                                             self.toolchain, subtest=name)\n\n    def run(self, out_dir, test_filters):\n        print('Building device test: {}'.format(self.name))\n        build_dir = os.path.join(out_dir, self.name)\n        build_result = _run_ndk_build_test(self.name, build_dir, self.test_dir,\n                                           self.build_flags, self.abi,\n                                           self.platform, self.toolchain)\n        if not build_result.passed():\n            yield build_result\n            return\n\n        device_dir = posixpath.join('/data/local/tmp/ndk-tests', self.name)\n\n        # We have to use `ls foo || mkdir foo` because Gingerbread was lacking\n        # `mkdir -p`, the -d check for directory existence, stat, dirname, and\n        # every other thing I could think of to implement this aside from ls.\n        self.device.shell(['ls {0} || mkdir {0}'.format(device_dir)])\n\n        try:\n            test_cases = _copy_test_to_device(\n                self.device, build_dir, device_dir, self.abi, test_filters,\n                self.name)\n            for case in test_cases:\n                case_name = _make_subtest_name(self.name, case)\n                if not test_filters.filter(case_name):\n                    continue\n\n                config = self.check_subtest_unsupported(case)\n                if config is not None:\n                    message = 'test unsupported for {}'.format(config)\n                    yield Skipped(case_name, message)\n                    continue\n\n                cmd = 'cd {} && LD_LIBRARY_PATH={} ./{} 2>&1'.format(\n                    device_dir, device_dir, case)\n                result, out, _ = self.device.shell_nocheck([cmd])\n\n                config, bug = self.check_subtest_broken(case)\n                if config is None:\n                    if result == 0:\n                        yield Success(case_name)\n                    else:\n                        yield Failure(case_name, out)\n                else:\n                    if result == 0:\n                        yield UnexpectedSuccess(case_name, config, bug)\n                    else:\n                        yield ExpectedFailure(case_name, config, bug)\n        finally:\n            self.device.shell_nocheck(['rm', '-r', device_dir])\n"
  },
  {
    "path": "tests/util.py",
    "content": "#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nimport contextlib\nimport os\nimport subprocess\n\n\ndef color_string(string, color):\n    colors = {\n        'green': '\\033[92m',\n        'red': '\\033[91m',\n        'yellow': '\\033[93m',\n    }\n    end_color = '\\033[0m'\n    return colors[color] + string + end_color\n\n\ndef maybe_color(text, color, do_color):\n    return color_string(text, color) if do_color else text\n\n\n@contextlib.contextmanager\ndef cd(path):\n    curdir = os.getcwd()\n    os.chdir(path)\n    try:\n        yield\n    finally:\n        os.chdir(curdir)\n\n\ndef call_output(cmd, *args, **kwargs):\n    \"\"\"Invoke the specified command and return exit code and output.\n\n    This is the missing subprocess.call_output, which is the combination of\n    subprocess.call and subprocess.check_output. Like call, it returns an exit\n    code rather than raising an exception. Like check_output, it returns the\n    output of the program. Unlike check_output, it returns the output even on\n    failure.\n\n    Returns: Tuple of (exit_code, output).\n    \"\"\"\n    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,\n                            stderr=subprocess.STDOUT, *args, **kwargs)\n    out, _ = proc.communicate()\n    return proc.returncode, out\n"
  },
  {
    "path": "tests/validate.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\"\"\"Runs the test suite over a set of devices.\"\"\"\nfrom __future__ import print_function\n\nimport argparse\nimport distutils.spawn\nimport os\nimport re\nimport shutil\nimport site\nimport subprocess\nimport sys\nimport tempfile\n\n\nTHIS_DIR = os.path.realpath(os.path.dirname(__file__))\n\n\nclass Device(object):\n    def __init__(self, serial, name, version, abis):\n        self.serial = serial\n        self.name = name\n        self.version = version\n        self.abis = abis\n        self.is_emulator = False  # TODO(danalbert): Identify these.\n\n    def __str__(self):\n        return 'android-{} {} {}'.format(self.version, self.name, self.serial)\n\n\nclass DeviceFleet(object):\n    def __init__(self):\n        self.devices = {\n            10: {\n                'armeabi': None,\n                'armeabi-v7a': None,\n                'armeabi-v7a-hard': None,\n            },\n            16: {\n                'armeabi': None,\n                'armeabi-v7a': None,\n                'armeabi-v7a-hard': None,\n                'x86': None,\n            },\n            23: {\n                'armeabi': None,\n                'armeabi-v7a': None,\n                'armeabi-v7a-hard': None,\n                'arm64-v8a': None,\n                'x86': None,\n                'x86_64': None,\n            },\n        }\n\n    def add_device(self, device):\n        if device.version not in self.devices:\n            print('Ignoring device for unwanted API level: {}'.format(device))\n            return\n\n        same_version = self.devices[device.version]\n        for abi, current_device in same_version.iteritems():\n            # This device can't fulfill this ABI.\n            if abi not in device.abis:\n                continue\n\n            # Anything is better than nothing.\n            if current_device is None:\n                self.devices[device.version][abi] = device\n                continue\n\n            # The emulator images have actually been changed over time, so the\n            # devices are more trustworthy.\n            if current_device.is_emulator and not device.is_emulator:\n                self.devices[device.version][abi] = device\n\n    def get_device(self, version, abi):\n        return self.devices[version][abi]\n\n    def get_missing(self):\n        missing = []\n        for version, abis in self.devices.iteritems():\n            for abi, device in abis.iteritems():\n                if device is None:\n                    missing.append('android-{} {}'.format(version, abi))\n        return missing\n\n    def get_versions(self):\n        return self.devices.keys()\n\n    def get_abis(self, version):\n        return self.devices[version].keys()\n\n\ndef get_device_abis(properties):\n    # 64-bit devices list their ABIs differently than 32-bit devices. Check all\n    # the possible places for stashing ABI info and merge them.\n    abi_properties = [\n        'ro.product.cpu.abi',\n        'ro.product.cpu.abi2',\n        'ro.product.cpu.abilist',\n    ]\n    abis = set()\n    for abi_prop in abi_properties:\n        if abi_prop in properties:\n            abis.update(properties[abi_prop].split(','))\n\n    if 'armeabi-v7a' in abis:\n        abis.add('armeabi-v7a-hard')\n    return sorted(list(abis))\n\n\ndef get_device_details(serial):\n    import adb  # pylint: disable=import-error\n    props = adb.get_device(serial).get_props()\n    name = props['ro.product.name']\n    version = int(props['ro.build.version.sdk'])\n    supported_abis = get_device_abis(props)\n    return Device(serial, name, version, supported_abis)\n\n\ndef find_devices():\n    \"\"\"Detects connected devices and returns a set for testing.\n\n    We get a list of devices by scanning the output of `adb devices`. We want\n    to run the tests for the cross product of the following configurations:\n\n    ABIs: {armeabi, armeabi-v7a, armeabi-v7a-hard, arm64-v8a, mips, mips64,\n           x86, x86_64}\n    Platform versions: {android-10, android-16, android-21}\n    Toolchains: {clang, gcc}\n\n    Note that not all ABIs are available for every platform version. There are\n    no 64-bit ABIs before android-21, and there were no MIPS ABIs for\n    android-10.\n    \"\"\"\n    if distutils.spawn.find_executable('adb') is None:\n        raise RuntimeError('Could not find adb.')\n\n    # We could get the device name from `adb devices -l`, but we need to\n    # getprop to find other details anyway, and older devices don't report\n    # their names properly (nakasi on android-16, for example).\n    p = subprocess.Popen(['adb', 'devices'], stdout=subprocess.PIPE)\n    out, _ = p.communicate()\n    if p.returncode != 0:\n        raise RuntimeError('Failed to get list of devices from adb.')\n\n    # The first line of `adb devices` just says \"List of attached devices\", so\n    # skip that.\n    fleet = DeviceFleet()\n    for line in out.split('\\n')[1:]:\n        if not line.strip():\n            continue\n\n        serial, _ = re.split(r'\\s+', line, maxsplit=1)\n\n        if 'offline' in line:\n            print('Ignoring offline device: ' + serial)\n            continue\n        if 'unauthorized' in line:\n            print('Ignoring unauthorized device: ' + serial)\n            continue\n\n        device = get_device_details(serial)\n        print('Found device {}'.format(device))\n        fleet.add_device(device)\n\n    return fleet\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        'ndk', metavar='NDK', type=os.path.realpath, help='NDK to validate.')\n    parser.add_argument(\n        '--filter', help='Only run tests that match the given pattern.')\n    parser.add_argument(\n        '--log-dir', type=os.path.realpath, default='test-logs',\n        help='Directory to store test logs.')\n\n    return parser.parse_args()\n\n\ndef get_aggregate_results(details):\n    tests = {}\n    for version, abis in details.iteritems():\n        for abi, toolchains in abis.iteritems():\n            for toolchain, results in toolchains.iteritems():\n                for suite, test_results in results.iteritems():\n                    for test in test_results:\n                        if test.failed():\n                            name = '.'.join([suite, test.test_name])\n                            if name not in tests:\n                                tests[name] = []\n                            tests[name].append((version, abi, toolchain, test))\n    return tests\n\n\ndef print_aggregate_details(details, use_color):\n    tests = get_aggregate_results(details)\n    for test_name, configs in tests.iteritems():\n        # We might be printing a lot of crap here, so let's be obvious about\n        # where each test starts.\n        print('BEGIN TEST RESULT: ' + test_name)\n        print('=' * 80)\n\n        for version, abi, toolchain, result in configs:\n            print('FAILED {} {} {}:'.format(toolchain, abi, version))\n            print(result.to_string(colored=use_color))\n\n\ndef main():\n    args = parse_args()\n\n    os.chdir(THIS_DIR)\n\n    # We need to do this here rather than at the top because we load the module\n    # from a path that is given on the command line. We load it from the NDK\n    # given on the command line so this script can be run even without a full\n    # platform checkout.\n    site.addsitedir(os.path.join(args.ndk, 'python-packages'))\n\n    ndk_build_path = os.path.join(args.ndk, 'ndk-build')\n    if os.name == 'nt':\n        ndk_build_path += '.cmd'\n    if not os.path.exists(ndk_build_path):\n        sys.exit(ndk_build_path + ' does not exist.')\n\n    fleet = find_devices()\n    missing_configs = fleet.get_missing()\n    if len(missing_configs):\n        print('Missing configurations: {}'.format(', '.join(missing_configs)))\n\n    if os.path.exists(args.log_dir):\n        shutil.rmtree(args.log_dir)\n    os.makedirs(args.log_dir)\n\n    use_color = sys.stdin.isatty() and os.name != 'nt'\n    out_dir = tempfile.mkdtemp()\n    try:\n        import runners  # pylint: disable=relative-import\n        good, details = runners.run_for_fleet(\n            args.ndk, fleet, out_dir, args.log_dir, args.filter, use_color)\n    finally:\n        shutil.rmtree(out_dir)\n\n    print_aggregate_details(details, use_color)\n\n    sys.exit(not good)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/adbrunner",
    "content": "#!/usr/bin/env ruby\n\nrequire 'optparse'\nrequire 'fileutils'\nrequire 'timeout'\nrequire 'securerandom'\nrequire 'open3'\nrequire 'json'\nrequire 'pathname'\nrequire 'digest'\n\nEncoding.default_external = Encoding::UTF_8\nENV['LANG'] = 'en_US.UTF-8'\nENV['LC_ALL'] = ENV['LANG']\n\nWINDOWS = RUBY_PLATFORM =~ /(cygwin|mingw|win32)/ ? true : false\n\nMYPID = Process.pid\nCHILDREN = []\n\nROOTDIR = File.join(ENV['HOME'], '.crystax', 'adbrunner')\n\nSTDOUT_PREFIX = \"   > \"\nSTDERR_PREFIX = \"   * \"\n\nOPTIONS = {}\nOPTIONS[:ndk] = File.dirname(File.dirname(__FILE__))\nOPTIONS[:adb] = \"adb\"\nOPTIONS[:devpath] = '/data/local/tmp/adbrunner'\nOPTIONS[:lockdir] = File.join(ROOTDIR, 'lock')\nOPTIONS[:stripdir] = File.join(ROOTDIR, 'stripped')\nOPTIONS[:timeout] = 3153600000 # 100 years\nOPTIONS[:pie] = true\nOPTIONS[:device_lock_timeout] = 1\nOPTIONS[:print_timestamps] = true\nOPTIONS[:verbose_errors] = false\n\noptparser = OptionParser.new do |o|\n  o.banner = \"Usage: #{$0} [options] executable [exe-options]\"\n\n  o.separator \"\\nCommon options:\"\n\n  o.on(\"-h\", \"--help\", \"Show help screen and exit\") do\n    puts o\n    exit 0\n  end\n\n  o.on(\"-v\", \"--[no-]verbose\", \"Enable verbose logging\") do |v|\n    OPTIONS[:verbose] = v\n  end\n\n  o.on(\"-l\", \"--log=FILE\", \"Use specified file for logging [stdout]\") do |f|\n    OPTIONS[:log] = f\n  end\n\n  o.separator \"\\nRequired options:\"\n\n  o.on(\"--abi=ABI\", \"Target ABI\") do |a|\n    OPTIONS[:abi] = a\n  end\n\n  o.separator \"\\nBehavior options:\"\n\n  o.on(\"-k\", \"--[no-]keep-going\", \"If specified, don't exit on first fail. \",\n       \"Instead, run remaining executables and fail\",\n       \"when all of them are finished\") do |k|\n    OPTIONS[:keepgoing] = k\n  end\n\n  o.on(\"-a\", \"--run-on-all-devices\", \"If specified, run on all compatible devices\",\n       \"(default: run on first compatible device)\") do |r|\n    OPTIONS[:run_on_all_devices] = r\n  end\n\n  o.on(\"--[no-]print-timestamps\", \"Print timestamps in log [#{OPTIONS[:print_timestamps]}]\") do |p|\n    OPTIONS[:print_timestamps] = p\n  end\n\n  o.separator \"\\nTimeout options:\"\n\n  o.on(\"--timeout=VALUE\", Integer, \"Timeout (in seconds) for execution [#{OPTIONS[:timeout]}]\") do |t|\n    OPTIONS[:timeout] = [t, 0].max\n  end\n\n  o.on(\"--device-lock-timeout=VALUE\", Numeric, \"Timeout (in seconds) for device lock [#{OPTIONS[:device_lock_timeout]}]\") do |t|\n    OPTIONS[:device_lock_timeout] = t\n  end\n\n  o.separator \"\\nPath options:\"\n\n  o.on(\"--ndk=PATH\", \"Path to NDK [autodetect]\") do |p|\n    OPTIONS[:ndk] = p\n  end\n\n  o.on(\"--adb=PATH\", \"Path to adb [autodetect]\") do |a|\n    OPTIONS[:adb] = a\n  end\n\n  o.on(\"--strip=PATH\", \"Full path to the 'strip' utility needed for stripping\",\n       \"binaries before uploading them to device/emulator [autodetect]\") do |s|\n    OPTIONS[:strip] = s\n  end\n\n  o.on(\"--device-path=PATH\", \"Root path on device used for uploading binaries\",\n       \"[#{OPTIONS[:devpath]}]\") do |d|\n    OPTIONS[:devpath] = d\n  end\n\n  o.on(\"--lock-directory=PATH\", \"Directory used for lock files [#{OPTIONS[:lockdir]}]\") do |d|\n    OPTIONS[:lockdir] = d\n  end\n\n  o.on(\"--strip-directory=PATH\", \"Directory used for storing stripped binaries [#{OPTIONS[:stripdir]}]\") do |d|\n    OPTIONS[:stripdir] = d\n  end\n\n  o.on(\"--symbols-directories=LIST\", Array, \"Directories where unstripped binaries lays.\",\n       \"This option need to specified only if adbrunner\",\n       \"takes already stripped binaries.\") do |l|\n    OPTIONS[:symdirs] = l.map { |p| File.expand_path(p) }\n  end\n\n  o.on(\"-L\", \"--libpath=PATHS\", Array, \"Load shared libraries from specified path to device\") do |l|\n    OPTIONS[:ld_library_path] = l.map { |x| x.split(':') }.flatten\n  end\n\n  o.on(\"--ld-library-path=PATHS\", Array, \"The same as --libpath option (kept for compatibility)\") do |l|\n    OPTIONS[:ld_library_path] = l.map { |x| x.split(':') }.flatten\n  end\n\n  o.separator \"\\nAdditional options:\"\n\n  # TODO: autodetect it.\n  # This is possible by running `readelf -a file` and checking \"Type:\" field in the output\n  # For non-PIE binaries, type is \"EXEC (Executable file)\"\n  # For PIE binaries, type is \"DYN (Shared object file)\"\n  o.on(\"--[no-]pie\", \"Indicate that executable was built with (or without) -fPIE option [#{OPTIONS[:pie]}]\") do |p|\n    OPTIONS[:pie] = p\n  end\n\n  o.on(\"--emulator-tag=TAG\", \"Run tests only on emulators having specified tag\") do |tag|\n    OPTIONS[:emutag] = tag\n  end\n\n  o.on(\"--mro-prefix=PREFIX\", \"Enabled machine-readable output prefixed with PREFIX\") do |p|\n    OPTIONS[:mroprefix] = p\n  end\n\n  o.on(\"--args-path-prefixes=LIST\", Array, \"Prefixes for command line arguments indicating paths\") do |l|\n    OPTIONS[:args_path_prefixes] = l\n  end\n\n  o.on(\"--min-api-level=N\", Integer, \"Minimal API level of device to run these tests on [autodetect]\") do |l|\n    OPTIONS[:min_api_level] = l\n  end\n\n  o.on(\"--[no-]verbose-errors\", \"Print verbose output on fail [#{OPTIONS[:verbose_errors]}]\") do |v|\n    OPTIONS[:verbose_errors] = v\n  end\n\nend\nENV['POSIXLY_CORRECT'] = '1'\noptparser.parse!(ARGV)\n\nif OPTIONS[:abi].nil?\n  $stderr.puts \"ERROR: No ABI specified\"\n  $stderr.puts optparser\n  exit 1\nend\n\nif OPTIONS[:devpath].nil?\n  $stderr.puts \"ERROR: No device path specified\"\n  $stderr.puts optparser\n  exit 1\nend\n\ncmds = []\n\nOPTIONS[:runfrom] = ARGV.shift.sub(/^@/, '') if ARGV.first.to_s =~ /^@/\n\nif !OPTIONS[:runfrom].nil?\n  File.open(OPTIONS[:runfrom], 'r') do |f|\n    while line = f.gets.chomp.strip rescue nil\n      next if line.empty?\n      cmds << line.split(/\\s+/)\n    end\n  end\nelse\n  cmds << ARGV.dup unless ARGV.empty?\n  ARGV.clear\nend\n\nif cmds.empty?\n  $stderr.puts \"ERROR: No executable specified\"\n  $stderr.puts optparser\n  exit 1\nend\n\nif !ARGV.empty?\n  $stderr.puts \"ERROR: Extra arguments in command line\"\n  $stderr.puts optparser\n  exit 1\nend\n\nCMDS = cmds\n\nVERBOSE = OPTIONS[:verbose]\nABI = OPTIONS[:abi]\nADB = OPTIONS[:adb]\nNDK = OPTIONS[:ndk]\nLOG = OPTIONS[:log]\nPIE = OPTIONS[:pie]\nTIMEOUT = OPTIONS[:timeout]\nLOCKDIR = OPTIONS[:lockdir]\nSTRIPDIR = OPTIONS[:stripdir]\nDEVPATH = OPTIONS[:devpath]\nEMUTAG  = OPTIONS[:emutag]\nDEVICE_LOCK_TIMEOUT = OPTIONS[:device_lock_timeout]\nPRINT_TIMESTAMPS = OPTIONS[:print_timestamps]\nRUN_ON_ALL_DEVICES = OPTIONS[:run_on_all_devices]\nKEEPGOING = OPTIONS[:keepgoing]\nMROPREFIX = OPTIONS[:mroprefix]\nSYMDIRS = OPTIONS[:symdirs]\nARGS_PATH_PREFIXES = OPTIONS[:args_path_prefixes]\nVERBOSE_ERRORS = OPTIONS[:verbose_errors]\n\nif OPTIONS[:min_api_level].nil?\n  case ABI\n  when /^armeabi/, 'x86', 'mips'\n    OPTIONS[:min_api_level] = 9\n  when /^arm64/, 'x86_64', 'mips64'\n    OPTIONS[:min_api_level] = 21\n  else\n    raise \"Unknown ABI: '#{ABI.inspect}'\"\n  end\nend\nMIN_API_LEVEL = OPTIONS[:min_api_level]\n\nOPTIONS[:ld_library_path] ||= []\n['LD_LIBRARY_PATH', 'DYLD_LIBRARY_PATH'].each do |e|\n  OPTIONS[:ld_library_path] += ENV[e].split(':') unless ENV[e].nil?\nend\nLD_LIBRARY_PATH = OPTIONS[:ld_library_path]\n\nif OPTIONS[:strip].nil?\n  case ABI\n  when /^armeabi/\n    toolchain_name = \"arm-linux-androideabi\"\n  when /^arm64/\n    toolchain_name = \"aarch64-linux-android\"\n  when \"mips\"\n    toolchain_name = \"mipsel-linux-android\"\n  when \"mips64\"\n    toolchain_name = \"mips64el-linux-android\"\n  when \"x86\"\n    toolchain_name = \"x86\"\n  when \"x86_64\"\n    toolchain_name = \"x86_64\"\n  else\n    raise \"Unknown ABI: #{ABI.inspect}\"\n  end\n\n  case ABI\n  when 'x86'\n    toolchain_prefix = \"i686-linux-android\"\n  when 'x86_64'\n    toolchain_prefix = \"x86_64-linux-android\"\n  else\n    toolchain_prefix = toolchain_name\n  end\n\n  toolchain_version = Dir.glob(File.join(NDK, 'toolchains', \"#{toolchain_name}-*\")).reject do |e|\n    e =~ /-clang\\d+\\.\\d+$/\n  end.map do |e|\n    File.basename(e).sub(/^#{toolchain_name}-/, '').split('.').map(&:to_i)\n  end.sort do |a,b|\n    a <=> b\n  end.last.join('.')\n\n  case RUBY_PLATFORM\n  when /darwin/\n    host_tag = \"darwin\"\n  when /linux/\n    host_tag = \"linux\"\n  when /(cygwin|mingw|win32)/\n    host_tag = \"windows\"\n  end\n\n  case RUBY_PLATFORM\n  when /^x86_64-/\n    host_tag << \"-x86_64\"\n  else\n    host_tag << \"-x86\" unless host_tag == \"windows\"\n  end\n\n  strip = File.join(NDK, \"toolchains\", \"#{toolchain_name}-#{toolchain_version}\",\n                    \"prebuilt\", host_tag, \"bin\", \"#{toolchain_prefix}-strip\")\n  OPTIONS[:strip] = strip if File.executable?(strip)\nend\nSTRIP = OPTIONS[:strip]\n\n$stdin.sync = true\n$stdout.sync = true\n$stderr.sync = true\n\nclass AdbError < Exception\n  def initialize(operation, msg)\n    @operation = operation\n    @msg = msg\n  end\n\n  def operation\n    @operation\n  end\n\n  def message\n    \"ADB FAILED (#{@operation}): #{@msg}\"\n  end\nend\n\nclass AdbShellCommandFailed < Exception\n  def initialize(cmd, rc)\n    @cmd = cmd\n    @rc = rc\n  end\n\n  def exitcode\n    @rc\n  end\n\n  def message\n    \"RUN [$?=#{@rc}]: #{@cmd}\"\n  end\nend\n\nclass MRO\n  def self.dump(object)\n    return if MROPREFIX.nil? || MROPREFIX.empty?\n    $stdout.puts \"%s%s\" % [MROPREFIX, object.to_json.to_s]\n  end\nend\n\ndef log(msg, options = {})\n  do_log = proc do |f|\n    prefix = \"## ADBRUNNER.#{MYPID} \"\n    prefix << Time.now.utc.strftime('%Y-%m-%d %H:%M:%S.%3N UTC ') if PRINT_TIMESTAMPS\n    prefix << \"[%s] \" % ENV['ANDROID_SERIAL'] if ENV['ANDROID_SERIAL']\n    f.puts \"#{prefix}#{msg}\"\n  end\n  if LOG\n    File.open(LOG, \"a\") { |f| do_log.call(f) }\n  else\n    do_log.call($stdout)\n  end\nend\n\ndef killall\n  CHILDREN.each do |child|\n    Process.kill('KILL', WINDOWS ? child : -Process.getpgid(child)) rescue nil\n  end\nend\n\ndef run(*args, &block)\n  options = args.last.is_a?(Hash) ? args.pop : {}\n  cmd = args.join(' ')\n  log \"## COMMAND: #{cmd}\" if options[:verbose]\n\n  pid = nil\n  status = nil\n\n  th = Thread.start do\n    po = {}\n    po[:pgroup] = true unless WINDOWS\n    Open3.popen3(*args, po) do |i,o,e,t|\n      pid = t.pid\n      CHILDREN << pid\n\n      [i,o,e].each { |io| io.sync = true }\n\n      if block_given?\n        yield i,o,e,t\n      else\n        i.close\n\n        {o => STDOUT_PREFIX, e => STDERR_PREFIX}.map do |io,prefix|\n          Thread.start do\n            while line = io.gets.chomp rescue nil\n              log \"#{prefix}#{line}\"\n            end\n          end\n        end.each(&:join)\n\n        raise \"'#{cmd}' failed: #{t.value.to_i}\" if !t.value.success?\n      end\n      status = t.value\n    end\n  end\n\n  begin\n    Timeout.timeout(options[:timeout]) { th.join }\n  rescue Timeout::Error => err\n    log \"WARNING: '#{cmd}' timed out (#{options[:timeout]} seconds)\"\n    ['TERM', 'KILL'].each do |sig|\n      Process.kill(sig, WINDOWS ? pid : -Process.getpgid(pid)) rescue nil unless pid.nil?\n    end\n    th.kill\n    raise err\n  end\n\n  status\nensure\n  Process.kill('KILL', WINDOWS ? pid : -Process.getpgid(pid)) rescue nil unless pid.nil?\n  CHILDREN.reject! { |c| c == pid } unless pid.nil?\nend\n\ndef strip(src, dst = nil)\n  return src if !STRIP && dst.nil?\n\n  if dst.nil?\n    d = Digest::SHA256.new\n    d.update src\n    dst = File.join(STRIPDIR, ABI, \"#{File.basename(src)}.#{d.hexdigest}\")\n  end\n\n  checksum = File.read(\"#{dst}.sha256\") rescue nil\n\n  if File.exists?(dst) && File.mtime(dst) > File.mtime(src) && !checksum.nil? && sha256(src) == checksum\n    return dst\n  end\n\n  log \"COPY: #{src} -> #{dst}\"\n  FileUtils.rm_f dst\n  FileUtils.mkdir_p File.dirname(dst)\n  FileUtils.cp src, dst\n\n  if STRIP\n    log \"STRIP: #{dst}\"\n    run STRIP, '--strip-unneeded', dst\n  end\n\n  File.open(\"#{dst}.sha256\", \"w\") do |f|\n    f.write sha256(src)\n  end if File.basename(src) =~ /^lib.+\\.so(\\..+)?$/\n\n  dst\nend\n\ndef crystax_ndk_version\n  reltxt = File.join(NDK, 'RELEASE.TXT')\n  return \"develop\" unless File.exists?(reltxt)\n  File.read(reltxt).split(\"\\n\").first.chomp.sub(/^crystax-ndk-(\\d+)\\.(\\d+)\\.(\\d+)/, 'v\\1.\\2.\\3')\nrescue\n  \"unknown\"\nend\n\ndef adb_devices\n  devices = []\n\n  err = \"\"\n  run ADB, 'devices', timeout: 5 do |i,o,e,t|\n    i.close\n\n    out = \"\"\n    while true\n      rs = []\n      rs << o unless o.eof?\n      rs << e unless e.eof?\n      break if rs.empty?\n\n      ios, = IO.select(rs)\n      ios.each do |io|\n        c = io.read_nonblock(4096) rescue nil\n        next if c.nil?\n\n        case io\n        when e\n          err << c\n        when o\n          out << c\n        end\n      end\n    end\n\n    out.split(\"\\n\").map(&:chomp).each do |line|\n      next unless line =~ /^([^\\t]+)\\tdevice$/\n      devices << $1\n    end\n\n    raise AdbError.new('devices', err) unless t.value.success?\n  end\n\n  fd = []\n  devices.each do |id|\n    begin\n      props = adb_getprop(id)\n\n      next if !EMUTAG.nil? && props['crystax.emulator.tag'] != EMUTAG\n      next if props['sys.boot_completed'] != \"1\"\n\n      apilevel = props['ro.build.version.sdk'].to_i rescue 0\n      next if apilevel == 0\n      next if apilevel <= 15 && PIE\n      next if apilevel >= 21 && !PIE\n\n      next if !MIN_API_LEVEL.nil? && apilevel < MIN_API_LEVEL\n\n      devabilist = []\n      devabilist += props['ro.product.cpu.abilist'].split(',') rescue []\n      if devabilist.empty?\n        devabi1 = props['ro.product.cpu.abi'].to_s rescue ''\n        devabi2 = props['ro.product.cpu.abi2'].to_s rescue ''\n        devabilist << devabi1 unless devabi1.empty?\n        devabilist << devabi2 unless devabi2.empty?\n      end\n      devabilist << \"armeabi\" if devabilist.empty?\n      devabilist << \"armeabi-v7a-hard\" if devabilist.include?(\"armeabi-v7a\")\n\n      if id =~ /^emulator\\b/\n        devmodel = id\n      else\n        devmodel = props['ro.product.model'].to_s rescue ''\n        devmodel = id if devmodel.empty?\n      end\n\n      devmainabi = devabilist.first\n      devabilist.each do |devabi|\n        # Skip incompatible ABI\n        next if devabi != ABI\n\n        # Special case: Dell Venue x86 tablet specify 'ro.product.cpu.abi=x86' and 'ro.product.cpu.abi2=armeabi-v7a'.\n        # However, only non-PIE-enabled armeabi-v7a binaries supported, even though for x86 binaries usual\n        # rules applied - i.e. PIE binaries works starting from android-16 and non-PIE binaries works only up to android-19.\n        next if PIE && devabi =~ /^armeabi-v7a/ && devmainabi == 'x86'\n\n        fd << {id: id, model: devmodel, apilevel: apilevel}\n      end\n    rescue AdbError => e\n      log e.message\n      next\n    end\n  end\n\n  fd\nrescue Timeout::Error\n  log \"WARNING: 'adb devices' timed out\"\n  []\nrescue AdbError => e\n  log e.message\n  []\nend\n\ndef adb_getprop(devid, propname = nil)\n  tag = \"EXITCODE#{SecureRandom.uuid.gsub('-', '')}\"\n\n  operation = \"getprop\"\n  operation << \" #{propname}\" unless propname.nil?\n\n  os = []\n  es = []\n  run ADB, '-s', devid, 'shell', \"#{operation} ; echo #{tag}:$?\", timeout: 5, verbose: VERBOSE do |i,o,e,t|\n    i.close\n\n    out = \"\"\n    err = \"\"\n    while true\n      rs = []\n      rs << o unless o.eof?\n      rs << e unless e.eof?\n      break if rs.empty?\n\n      ios, = IO.select(rs)\n      ios.each do |io|\n        c = io.read_nonblock(4096) rescue nil\n        next if c.nil?\n\n        case io\n        when e\n          err << c\n        when o\n          out << c\n        end\n      end\n    end\n\n    os = out.split(\"\\n\").map(&:chomp).map { |line| line.chop! while line[-1] == \"\\r\"; line }\n    es = err.split(\"\\n\").map(&:chomp).map { |line| line.chop! while line[-1] == \"\\r\"; line }\n\n    raise AdbError.new(operation, es.join(\"\\n\")) unless t.value.success?\n  end\n\n  last = os.last\n  raise AdbError.new(operation, \"no tag in stdout: #{os.inspect}\") unless last =~ /#{tag}:(\\d+)$/\n  raise AdbError.new(operation, \"exit code: #{$1}\") unless $1.to_i == 0\n\n  last.sub!(/#{tag}:.*$/, '')\n  os = os[0..-2]\n  os << last unless last.empty?\n\n  if propname.nil?\n    value = {}\n    os.each do |l|\n      next unless l =~ /^\\s*\\[([^\\]]+)\\]\\s*:\\s*\\[([^\\]]*)\\]\\s*$/\n      value[$1] = $2\n    end\n  #log \"[#{devid}]: #{value.inspect}\" if VERBOSE\n  else\n    value = os.join(\"\\n\")\n    log \"[#{devid}] #{propname}: #{value.inspect}\" if VERBOSE\n  end\n  value\nrescue Timeout::Error\n  raise AdbError.new(\"getprop #{propname}\".strip, \"timeout\")\nend\n\ndef adb_rm(devid, files)\n    run ADB, '-s', devid, 'shell', \"rm -r #{files}\", timeout: 10, verbose: VERBOSE do |i,o,e,t|\n  i.close\n\n  while true\n    rs = []\n    rs << o unless o.eof?\n    rs << e unless e.eof?\n    break if rs.empty?\n\n    ios, = IO.select(rs)\n    ios.each do |io|\n      io.read_nonblock(4096) rescue nil\n    end\n  end\n\n  t.value\nend\nrescue Timeout::Error\n  nil\nend\n\ndef adb_shell(devid, cmd, options = {})\n  log \"RUN:  #{cmd}\"\n\n  tag = \"EXITCODE#{SecureRandom.uuid.gsub('-', '')}\"\n\n  os = []\n  es = []\n  run ADB, '-s', devid, 'shell', \"#{cmd} ; echo #{tag}:$?\" do |i,o,e,t|\n\n    have_tag = false\n\n    opl = \"\"\n    epl = \"\"\n    while true\n      rs = []\n      rs << o unless o.eof?\n      rs << e unless e.eof?\n      break if rs.empty?\n\n      ios, = IO.select([$stdin] + rs)\n      ios.each do |io|\n        c = io.read_nonblock(4096) rescue nil\n        next if c.nil?\n\n        case io\n        when $stdin\n          i.write_nonblock c\n        when o\n          lines = (opl + c).lines\n          if lines.last !~ /\\n$/\n            opl = lines.last\n            lines = lines[0..-2]\n          else\n            opl = \"\"\n          end\n          lines.each do |line|\n            line.chomp!\n            line.chop! while line[-1] == \"\\r\"\n            os << line\n\n            logline = line.dup\n            if logline =~ /#{tag}:.*$/\n              have_tag = true\n              logline.sub!(/#{tag}:.*$/, '')\n              log \"#{STDOUT_PREFIX}#{logline}\" unless logline.empty?\n              $stdout.puts logline if !LOG.nil? && !logline.empty?\n            else\n              log \"#{STDOUT_PREFIX}#{logline}\"\n              $stdout.puts logline if !LOG.nil?\n            end\n          end\n        when e\n          lines = (epl + c).lines\n          if lines.last !~ /\\n$/\n            epl = lines.last\n            lines = lines[0..-2]\n          else\n            epl = \"\"\n          end\n          lines.each do |line|\n            line.chomp!\n            line.chop! while line[-1] == \"\\r\"\n            log \"#{STDERR_PREFIX}#{line}\"\n            es << line\n          end\n        end\n      end\n    end\n\n    i.close\n\n    raise AdbError.new('shell', es.join(\"\\n\")) unless t.value.success?\n  end\n\n  raise AdbError.new('shell', os.join(\"\\n\")) if os.first =~ /Text file busy/\n  raise AdbError.new('shell', \"no tag in stdout: #{os.inspect}\") if os.last !~ /#{tag}:(\\d+)$/\n  rc = $1.to_i\n  raise AdbShellCommandFailed.new(cmd, rc) if rc != 0 && !options[:nothrow]\n  rc\nend\n\ndef adb_pull(devid, src, dst)\n  log \"PULL: #{src} -> #{dst}\"\n\n  run ADB, '-s', devid, 'pull', src, dst do |i,o,e,t|\n    i.close\n\n    lt = Time.now\n\n    wt = Thread.start do\n      while true\n        sleep 5\n        next if Time.now - lt < 60\n        log \"WARNING: pull '#{src}' -> '#{dst}' timed out (60 seconds)\"\n      end\n    end\n\n    [o,e].map do |io|\n      Thread.start do\n        while line = io.gets\n          lt = Time.now\n          log line\n        end\n      end\n    end.each(&:join)\n\n    wt.kill\n\n    raise AdbError.new('pull', \"Can't pull #{src} to #{dst}\") unless t.value.success?\n  end\nrescue Timeout::Error\n  raise AdbError.new('pull', \"Pull of #{src} to #{dst} timed out\")\nend\n\ndef adb_push(devid, src, dst)\n  raise \"No such file or directory: #{src}\" unless File.exists?(src)\n\n  if File.directory?(src) && adb_shell(devid, \"mkdir -p #{dst}\", nothrow: true) != 0\n    raise AdbError.new('push', \"Can't create #{dst}\")\n  end\n\n  log \"PUSH: #{src} -> #{dst}\"\n\n  run ADB, '-s', devid, 'push', src, dst do |i,o,e,t|\n    i.close\n\n    lt = Time.now\n\n    wt = Thread.start do\n      while true\n        sleep 5\n        next if Time.now - lt < 60\n        log \"WARNING: push '#{src}' -> '#{dst}' timed out (60 seconds)\"\n      end\n    end\n\n    [o,e].map do |io|\n      Thread.start do\n        while line = io.gets\n          lt = Time.now\n          log line\n        end\n      end\n    end.each(&:join)\n\n    wt.kill\n\n    raise AdbError.new('push', \"Can't push #{src} to #{dst}\") unless t.value.success?\n  end\nrescue Timeout::Error\n  raise AdbError.new('push', \"Push of #{src} to #{dst} timed out\")\nend\n\ndef adb_logcat(devid, tag, file)\n  tagfound = false\n  FileUtils.mkdir_p File.dirname(file)\n  File.open(file, \"w\") do |f|\n    run ADB, '-s', devid, 'logcat', '-v', 'threadtime', '-d', timeout: 30 do |i,o,e,t|\n      ot = Thread.start do\n        while line = o.gets\n          if line.chomp =~ /\\b#{tag}\\b/\n            tagfound = true\n            next\n          end\n          next unless tagfound\n\n          f.puts line\n        end\n      end\n\n      et = Thread.start do\n        while line = e.gets\n          next unless tagfound\n          f.puts line\n        end\n      end\n\n      i.close\n      ot.join\n      et.join\n\n      raise AdbError.new('logcat', \"Can't get logcat\") unless t.value.success?\n    end\n  end\nrescue Timeout::Error\n  nil\nend\n\ndef sha256(file)\n  d = Digest::SHA256.new\n  File.open(file, 'rb') do |f|\n    while buf = f.read(16*1024*1024)\n      d.update buf\n    end\n  end\n  d.hexdigest\nend\n\ndef do_run_test(attempt, devid, tag, exe, args)\n  devpath = File.join(DEVPATH, ABI)\n  dsttmppath  = File.join(devpath, 'tmp')\n  dstlibpath  = File.join(devpath, 'lib')\n  dstpath = File.join(devpath, SecureRandom.uuid)\n  dstbinpath  = File.join(dstpath, 'bin')\n  dstdatapath = File.join(dstpath, 'data')\n\n  dstdirs = []\n  dstdirs << dsttmppath\n  dstdirs << dstlibpath\n  dstdirs << dstpath\n  dstdirs << dstbinpath\n  dstdirs << dstdatapath\n\n  adb_shell devid, dstdirs.map { |e| \"mkdir -p #{e}\" }.join(\" && \")\n\n  binaries = [exe]\n\n  %w{crystax gnustl_shared c++_shared objc}.each do |lib|\n    knownlib = File.join(File.dirname(exe), \"lib#{lib}.so\")\n    next unless File.exists?(knownlib)\n    binaries << knownlib unless binaries.include?(knownlib)\n  end\n\n  if exe.length > 35\n    targetexe = \"exe#{SecureRandom.uuid.gsub('-', '')}\"\n  else\n    targetexe = File.basename(exe)\n  end\n\n  libdirs = []\n  libdirs += File.read(\"#{exe}.ldlp\").split(\"\\n\").map(&:chomp) rescue []\n  libdirs += LD_LIBRARY_PATH\n  libdirs.each do |dir|\n    ['lib*.so', 'lib*.so.*'].each do |wildcard|\n      Dir.glob(File.join(dir, wildcard)).each do |lib|\n        binaries << lib unless binaries.include?(lib)\n      end\n    end\n  end\n\n  binaries.reject! { |b| b =~ /\\.ldlp$/ }\n\n  binaries.each do |e|\n    raise \"No such file or directory: #{e}\" unless File.exists?(e)\n\n    be = (e == exe) ? targetexe : File.basename(e)\n\n    islib = be =~ /^lib.+\\.so(\\..+)?$/\n    dbe = \"#{islib ? dstlibpath : dstbinpath}/#{be}\"\n\n    cs = islib ? sha256(e) : nil\n    needpush = !islib || adb_shell(devid, \"grep -q -x #{cs} #{dbe}.sha256 2>/dev/null\", nothrow: true) != 0\n    next unless needpush\n\n    tmpf = strip(e)\n    begin\n      adb_push devid, tmpf, dbe\n      if islib\n        adb_shell devid, \"echo #{cs} >#{dbe}.sha256\"\n      else\n        adb_shell devid, \"chmod 0755 #{dbe}\"\n      end\n    ensure\n      FileUtils.rm_f tmpf if tmpf != e && !islib\n    end\n  end\n\n  pushed = {}\n\n  newargs = []\n  args.each do |arg|\n    prefix = ARGS_PATH_PREFIXES.select { |p| arg =~ /^(-#{p}|--#{p}=)/ }.first rescue nil\n    arg = arg.sub(/^(-#{prefix}|--#{prefix}=)/, '') unless prefix.nil?\n\n    if File.exists?(arg)\n      dstfile = File.join(dstdatapath, File.basename(arg))\n      adb_push devid, arg, dstfile if pushed[arg] != dstfile\n      pushed[arg] = dstfile\n      arg = dstfile if arg =~ /^\\//\n    end\n    arg = \"'#{arg}'\" if arg =~ /\\s+/\n    newarg = \"#{prefix}#{arg}\"\n    newargs << newarg\n  end\n\n  env = {}\n  env['LD_LIBRARY_PATH'] = dstlibpath\n  env['TMPDIR'] = dsttmppath\n\n  adb_shell devid, \"log #{tag} && cd #{dstdatapath} && #{env.map { |k,v| \"#{k}=#{v}\" }.join(' ')} #{dstbinpath}/#{targetexe} #{newargs.join(' ')}\"\n                                                                                      rescue AdbShellCommandFailed => err\n                                                                                        log err.message\n\n                                                                                        logerr = proc do |msg|\n                                                                                          log \"#{STDERR_PREFIX}#{msg}\"\n                                                                                          $stderr.puts msg if VERBOSE_ERRORS\n                                                                                        end\n\n                                                                                        logerr.call \"\"\n                                                                                        logerr.call \"\"\n                                                                                        logerr.call \"=== BEGIN OF ENVIRONMENT ===\"\n                                                                                        logerr.call \"CMD: #{exe} #{args.join(' ')}\"\n                                                                                        logerr.call \"PWD: #{dstbinpath}\"\n                                                                                        logerr.call \"NDK: #{NDK} - CrystaX NDK #{crystax_ndk_version}\"\n                                                                                        logerr.call \"=== END OF ENVIRONMENT ===\"\n\n                                                                                        lf = File.join(ROOTDIR, \"logcat\", \"#{SecureRandom.uuid}.log\")\n                                                                                        at_exit { FileUtils.rm_f lf }\n\n                                                                                        adb_logcat devid, tag, lf\n\n                                                                                        File.open(lf, \"r\") do |f|\n                                                                                          logerr.call \"\"\n                                                                                          logerr.call \"=== BEGIN OF LOGCAT ===\"\n                                                                                          while line = f.gets\n                                                                                            logerr.call line\n                                                                                          end\n                                                                                          logerr.call \"=== END OF LOGCAT ===\"\n                                                                                        end rescue nil\n\n                                                                                        # Prepare temporary directory where all unstripped binaries would be accumulated\n                                                                                        symdirs = SYMDIRS || [File.dirname(exe)] + LD_LIBRARY_PATH\n                                                                                        if symdirs.size == 1 && targetexe == File.basename(exe)\n                                                                                          symdir = symdirs.first\n                                                                                        else\n                                                                                          symdir = File.join(ROOTDIR, \"symbols\", \"#{File.basename(exe)}-#{SecureRandom.uuid}\")\n                                                                                          at_exit { FileUtils.rm_rf symdir }\n\n                                                                                          FileUtils.rm_rf symdir\n                                                                                          FileUtils.mkdir_p symdir\n                                                                                          symdirs.each do |dir|\n                                                                                            Dir.glob(File.join(dir, '*')).select { |e| File.file?(e) }.each do |src|\n                                                                                              next if src =~ /\\.a$/\n\n                                                                                              relpath = Pathname.new(src).relative_path_from(Pathname.new(dir)).to_s\n                                                                                              dst = File.join(symdir, relpath)\n\n                                                                                              if exe != targetexe && File.basename(dst) == File.basename(exe)\n                                                                                                FileUtils.rm_f File.join(File.dirname(dst), targetexe)\n                                                                                                FileUtils.cp src, File.join(File.dirname(dst), targetexe)\n                                                                                              end\n\n                                                                                              next if File.exists?(dst)\n\n                                                                                              FileUtils.mkdir_p File.dirname(dst)\n                                                                                              FileUtils.cp src, dst\n                                                                                            end\n                                                                                          end\n                                                                                        end\n\n                                                                                        run File.join(NDK, 'ndk-stack'), '-sym', symdir, '-dump', lf, timeout: 30 do |i,o,e,t|\n                                                                                          logerr.call \"\"\n                                                                                          logerr.call \"=== BEGIN OF NDK-STACK ===\"\n\n                                                                                          i.close\n\n                                                                                          [o,e].map do |io|\n                                                                                            Thread.start do\n                                                                                              while line = io.gets rescue nil\n                                                                                                logerr.call line\n                                                                                              end\n                                                                                            end\n                                                                                          end.each(&:join)\n\n                                                                                          Process.kill(9, t.pid) rescue nil\n\n                                                                                          logerr.call \"=== END OF NDK-STACK ===\"\n                                                                                        end rescue nil\n\n                                                                                        FileUtils.rm_rf symdir if symdir != symdirs.first\n                                                                                        FileUtils.rm_f lf\n\n                                                                                        err.exitcode\n                                                                                      ensure\n                                                                                        adb_rm devid, dstpath\n                                                                                                  end\n\n                                                                                                  def run_test(attempt, devid, devmodel, exe, args)\n                                                                                                    ENV['ANDROID_SERIAL'] = devid\n\n                                                                                                    tms = Time.now\n\n                                                                                                    FileUtils.mkdir_p LOCKDIR\n                                                                                                    File.open(File.join(LOCKDIR, \"#{devid}.lock\"), \"w\") do |f|\n                                                                                                      begin\n                                                                                                        log \"LOCK  (attempt ##{attempt}): #{args.dup.unshift(exe).join(' ')}\"\n                                                                                                        Timeout.timeout(DEVICE_LOCK_TIMEOUT) { f.flock(File::LOCK_EX) }\n                                                                                                      rescue Timeout::Error => e\n                                                                                                        log \"LOCK  (attempt ##{attempt}): BUSY\"\n                                                                                                        raise e\n                                                                                                      end\n\n                                                                                                      log \"START (attempt ##{attempt}): #{args.dup.unshift(exe).join(\" \")}\"\n\n                                                                                                      tag = \"LOGCAT-TAG-#{SecureRandom.uuid.gsub('-', '')}\"\n                                                                                                      rc = do_run_test(attempt, devid, tag, exe, args)\n\n                                                                                                      log \"EXIT: #{rc} (took #{time_range(Time.now - tms)} on '#{devmodel}')\"\n                                                                                                      rc\n                                                                                                    end\n                                                                                                  end\n\n                                                                                                  def time_range(v)\n                                                                                                    seconds = v % 60\n                                                                                                    minutes = (v % 3600) / 60\n                                                                                                    hours   = v / 3600\n                                                                                                    \"%d:%02d:%02d\" % [hours, minutes, seconds]\n                                                                                                  end\n\n                                                                                                  started_at = Time.now\n\n                                                                                                  begin\n                                                                                                    fails = 0\n\n                                                                                                    # Get list of devices\n                                                                                                    devices = adb_devices\n\n                                                                                                    cmdnum = 0\n                                                                                                    CMDS.each do |cmd|\n                                                                                                      cmdnum += 1\n\n                                                                                                      cmdoptions = {}\n                                                                                                      cmdoptions = JSON.parse(cmd.pop.sub(/^ADBRUNNER-OPTIONS:/, '')) rescue {} if cmd.size > 1 && cmd.last =~ /^ADBRUNNER-OPTIONS:/\n\n                                                                                                      cmdminapilevel = cmdoptions['min-api-level'].to_i rescue 0\n\n                                                                                                      started_at = Time.now\n                                                                                                      Timeout.timeout(TIMEOUT) do\n                                                                                                        log \"EXEC: #{cmd.join(' ')}\"\n\n                                                                                                        exe = cmd.shift\n                                                                                                        args = cmd\n\n                                                                                                        mrofields = {number: cmdnum, total: CMDS.size, exe: exe, args: args}\n\n                                                                                                        paused = false\n\n                                                                                                        attempt = 0\n                                                                                                        while true\n                                                                                                          attempt += 1\n\n                                                                                                          rc = nil\n                                                                                                          devices.sort { |a,b| a[:apilevel] <=> b[:apilevel] }.each do |d|\n                                                                                                            next if cmdminapilevel != 0 && d[:apilevel] < cmdminapilevel\n                                                                                                            begin\n                                                                                                              rc = nil\n                                                                                                              paused = false if paused\n\n                                                                                                              id = d[:id]\n                                                                                                              devmodel = d[:model]\n                                                                                                              apilevel = d[:apilevel]\n\n                                                                                                              MRO.dump mrofields.merge({event: \"run\", attempt: attempt, devmodel: devmodel, apilevel: apilevel})\n\n                                                                                                              rc = run_test(attempt, id, devmodel, exe, args)\n                                                                                                              if rc != 0\n                                                                                                                MRO.dump mrofields.merge({event: \"fail\", exitcode: rc})\n                                                                                                                fails += 1\n                                                                                                                exit rc unless KEEPGOING\n                                                                                                              end\n\n                                                                                                              # Here we have result of execution on device (either positive or negative)\n                                                                                                              # so we stop trying other compatible devices unless --run-on-all-devices option was specified\n                                                                                                              # and promote this result as result of whole run\n                                                                                                              break if !RUN_ON_ALL_DEVICES\n                                                                                                            rescue Timeout::Error\n                                                                                                            # Ignore. Just switch to next device\n                                                                                                            rescue AdbError => e\n                                                                                                              log e.message\n                                                                                                              # Refresh list of devices\n                                                                                                              devices = adb_devices\n                                                                                                            end\n                                                                                                          end\n\n                                                                                                          # Switch to next CMD if current one was executed and exited with any exit code\n                                                                                                          break if !rc.nil?\n\n                                                                                                          if EMUTAG.nil?\n                                                                                                            MRO.dump mrofields.merge({event: \"skip\", reason: \"no compatible device/emulator\"})\n                                                                                                            log \"EXIT: no suitable device/emulator\"\n                                                                                                            break\n                                                                                                          end\n\n                                                                                                          if !paused\n                                                                                                            MRO.dump mrofields.merge({event: \"pause\"})\n                                                                                                            paused = true\n                                                                                                          end\n\n                                                                                                          log \"WAIT: no suitable device/emulator (#{time_range(Time.now - started_at)} elapsed); will try bit later\"\n                                                                                                          sleep 10\n\n                                                                                                          # Refresh list of devices\n                                                                                                          devices = adb_devices\n                                                                                                        end\n                                                                                                      end\n                                                                                                    end\n\n                                                                                                    exit fails\n                                                                                                  rescue Interrupt\n                                                                                                    $stderr.puts \"\\n\\nINTERRUPTED\"\n                                                                                                    exit 1\n                                                                                                  rescue Timeout::Error\n                                                                                                    tmout = (Time.now - started_at).to_i\n                                                                                                    MRO.dump event: \"timeout\", timeout: tmout\n\n                                                                                                    log \"TIMEOUT (#{time_range(tmout)} from start)\"\n                                                                                                    exit 1\n                                                                                                  rescue RuntimeError => e\n                                                                                                    $stderr.puts \"FATAL: #{e.message}\"\n                                                                                                    $stderr.puts e.backtrace.join(\"\\n\")\n                                                                                                    exit 1\n                                                                                                  ensure\n                                                                                                    killall\n                                                                                                  end\n"
  },
  {
    "path": "tools/deploy-posix-environment",
    "content": "#!/usr/bin/env bash\n\nerror()\n{\n    echo \"*** ERROR: $@\" 1>&2\n}\n\nHOST_OS=$(uname -s | tr '[A-Z]' '[a-z]')\ncase $HOST_OS in\n    linux|darwin)\n        ;;\n    *)\n        error \"Host OS '$HOST_OS' is not supported\"\n        exit 1\nesac\n\nHOST_ARCH=$(uname -m)\ncase $HOST_ARCH in\n    x86_64)\n        ;;\n    *)\n        error \"Host CPU architecture '$HOST_ARCH' is not supported\"\n        exit 1\nesac\n\nSED=\nfor sed in gsed sed; do\n    $sed --version 2>/dev/null | head -n 1 | grep -q GNU || continue\n    SED=$sed\n    break\ndone\nif [ -z \"$SED\" ]; then\n    error \"No GNU sed found!\"\n    exit 1\nfi\n\nNDK=$(cd $(dirname $0)/.. && pwd)\nDEPLOY_ROOT=/data/local/tmp/posix\nSSHD_PORT=10022\nANDROID_SERIAL=\n\nusage()\n{\n    echo \"Usage: $0 [options]\"\n    echo \"\"\n    echo \"Optional parameters:\"\n    echo \"\"\n    echo \"  -h,--help                  Show this screen and exit\"\n    echo \"\"\n    echo \"  -s,--device-id=ID          Device ID to deploy to [autodetect]\"\n    echo \"  -r,--root=PATH             Deploy to this root folder on device\"\n    echo \"                             [$DEPLOY_ROOT]\"\n    echo \"  -p,--sshd-port=PORT        Port for SSH to listen for [$SSHD_PORT]\"\n    echo \"  -n,--ndk=PATH              Path to the NDK\"\n    echo \"                             [$NDK]\"\n    echo \"\"\n}\n\nwhile [ -n \"$1\" ]; do\n    arg=\"$1\"\n    shift\n    argval=$(expr \"x$arg\" : \"^x[^=]*=\\(.*\\)$\")\n    case $arg in\n        -h|--help)\n            usage\n            exit 0\n            ;;\n        -s|--device-id)\n            ANDROID_SERIAL=\"$1\"\n            shift\n            ;;\n        --device-id=*)\n            ANDROID_SERIAL=\"$argval\"\n            ;;\n        -r|--root)\n            DEPLOY_ROOT=\"$1\"\n            shift\n            ;;\n        --root=*)\n            DEPLOY_ROOT=\"$argval\"\n            ;;\n        -p|--sshd-port)\n            SSHD_PORT=\"$1\"\n            shift\n            ;;\n        --sshd-port=*)\n            SSHD_PORT=\"$argval\"\n            ;;\n        -n|--ndk)\n            NDK=\"$1\"\n            shift\n            ;;\n        --ndk=*)\n            NDK=\"$argval\"\n            ;;\n        -*)\n            error \"Unknown option: '$arg'\"\n            usage 1>&2\n            exit 1\n            ;;\n        *)\n            usage 1>&2\n            exit 1\n    esac\ndone\n\nif [ -z \"$NDK\" -o -z \"$DEPLOY_ROOT\" -o -z \"$SSHD_PORT\" ]; then\n    usage 1>&2\n    exit 1\nfi\n\necho $SSHD_PORT | grep -q '^[1-9][0-9]*$'\nif [ $? -ne 0 ]; then\n    error \"Wrong SSHD port value: '$SSHD_PORT'\"\n    usage 1>&2\n    exit 1\nfi\n\nif [ -z \"$ANDROID_SERIAL\" ]; then\n    ANDROID_SERIAL=$(adb devices | grep '^[^\\s][^\\s]*\\s\\s*device$' | head -n 1 | cut -f 1)\n    if [ -z \"$ANDROID_SERIAL\" ]; then\n        error \"Can't detect Android device for deploy\"\n        exit 1\n    fi\n    echo \"=== Auto-detected Android device '$ANDROID_SERIAL'\"\nfi\nexport ANDROID_SERIAL\n\nDEFAULT_GCC_VERSION=$(bash -c 'source '$NDK'/build/instruments/dev-defaults.sh && echo $DEFAULT_GCC_VERSION' 2>/dev/null)\nif [ -z \"$DEFAULT_GCC_VERSION\" ]; then\n    error \"Can't detect default GCC version\"\n    exit 1\nfi\n\nrun()\n{\n    echo \"## COMMAND: $@\"\n    \"$@\"\n}\n\ndevice_abi()\n{\n    adb shell getprop ro.product.cpu.abi | $SED 's,[[:cntrl:]]*,,g'\n}\n\nadb_shell()\n{\n    run adb shell \"$@\"\n}\n\nadb_push()\n{\n    run adb push \"$@\"\n}\n\nset_sshd_config_value()\n{\n    local file=$1\n    local name=$2\n    local value=$3\n\n    if [ -z \"$file\" -o -z \"$name\" -o -z \"$value\" ]; then\n        error \"Usage: set_sshd_config_value file name value\"\n        return 1\n    fi\n\n    local warnstr='# deploy-posix-environment customized settings:'\n    grep -q \"^$warnstr$\" $file\n    if [ $? -ne 0 ]; then\n        echo \"\" >>$file || return 1\n        echo \"$warnstr\" >>$file || return 1\n    fi\n\n    $SED -i \"s|^\\($name\\>.*\\)$|#\\1|g\" $file || return 1\n    echo \"$name $value\" >>$file || return 1\n    return 0\n}\n\nDEVABI=$(device_abi)\nif [ -z \"$DEVABI\" ]; then\n    error \"Can't detect main ABI for device '$ANDROID_SERIAL'\"\n    exit 1\nfi\n\ncase $DEVABI in\n    armeabi-v7a)\n        DEVARCH=arm\n        ;;\n    arm64*)\n        DEVARCH=arm64\n        ;;\n    x86|x86_64|mips|mips64)\n        DEVARCH=$DEVABI\n        ;;\n    *)\n        error \"Unsupported device CPU ABI: '$DEVABI'\"\n        exit 1\nesac\n\ncase $DEVARCH in\n    arm)\n        TCPREFIX=arm-linux-androideabi\n        ;;\n    arm64)\n        TCPREFIX=aarch64-linux-android\n        ;;\n    mips)\n        TCPREFIX=mipsel-linux-android\n        ;;\n    mips64)\n        TCPREFIX=mips64el-linux-android\n        ;;\n    x86)\n        TCPREFIX=i686-linux-android\n        ;;\n    x86_64)\n        TCPREFIX=x86_64-linux-android\n        ;;\nesac\n\ncase $DEVARCH in\n    x86|x86_64)\n        TCNAME=$DEVARCH\n        ;;\n    *)\n        TCNAME=$TCPREFIX\nesac\n\ncase $DEVABI in\n    armeabi*)\n        ABI=armeabi-v7a-hard\n        ;;\n    *)\n        ABI=$DEVABI\nesac\n\nSTRIP=$NDK/toolchains/${TCNAME}-6/prebuilt/${HOST_OS}-${HOST_ARCH}/bin/${TCPREFIX}-strip\nif [ ! -x \"$STRIP\" ]; then\n    error \"No 'strip' tool found for CPU architecture '$DEVARCH'\"\n    exit 1\nfi\n\ndetect_package_root()\n{\n    local NAME=$1\n\n    local ROOT=\"$NDK/packages/$NAME\"\n    local VERSION=$(ls -1 $ROOT/ | sort | uniq | tail -n 1)\n    if [ -z \"$VERSION\" ]; then\n        error \"Can't detect version of package '$NAME'\"\n        return 1\n    fi\n\n    echo \"$ROOT/$VERSION/$ABI\"\n}\n\nRTAG=$(uuidgen | $SED 's,-,,g')\n\ntrap \"rm -Rf /tmp/*.$RTAG\" EXIT INT QUIT ABRT TERM\n\nstrip_debug_info()\n{\n    local src=\"$1\"\n    local dst=\"/tmp/$(basename $src)-$(uuidgen | $SED 's,-,,g').$RTAG\"\n\n    rm -f $dst 1>&2 || return 1\n    mkdir -p $(dirname $dst) 1>&2 || return 1\n    cp -f $src $dst 1>&2 || exit 1\n    $STRIP --strip-unneeded $dst 1>&2 || return 1\n\n    echo $dst\n}\n\ncreate_directories()\n{\n    local d\n    for d in bin etc lib libexec run sbin; do\n        adb_shell mkdir -p $DEPLOY_ROOT/$d/ || return 1\n        adb_shell chmod 0755 $DEPLOY_ROOT/$d/ || return 1\n    done\n    adb_shell mkdir -p $DEPLOY_ROOT/tmp/ || return 1\n    adb_shell chmod 0777 $DEPLOY_ROOT/tmp/ || return 1\n}\n\ndeploy_libcrystax()\n{\n    local srcf=$(strip_debug_info $NDK/sources/crystax/libs/$ABI/libcrystax.so)\n    test -n \"$srcf\" || return 1\n    local dstf=$DEPLOY_ROOT/lib/libcrystax.so\n    adb_push $srcf $dstf || return 1\n    rm -f $srcf\n    adb_shell chmod 0644 $dstf || return 1\n}\n\ndeploy_gnu_libstdcxx()\n{\n    local srcf=$(strip_debug_info $NDK/sources/cxx-stl/gnu-libstdc++/$DEFAULT_GCC_VERSION/libs/$ABI/libgnustl_shared.so)\n    test -n \"$srcf\" || return 1\n    local dstf=$DEPLOY_ROOT/lib/libgnustl_shared.so\n    adb_push $srcf $dstf || return 1\n    rm -f $srcf\n    adb_shell chmod 0644 $dstf || return 1\n}\n\ndeploy_bash()\n{\n    local PACKAGE_ROOT=$(detect_package_root bash)\n    test -n \"$PACKAGE_ROOT\" || return 1\n\n    local srcf=$(strip_debug_info $PACKAGE_ROOT/bash)\n    test -n \"$srcf\" || return 1\n\n    local dstf=$DEPLOY_ROOT/bin/bash\n\n    adb_push $srcf $dstf || return 1\n    adb_shell chmod 0755 $dstf || return 1\n    rm -f $srcf\n}\n\ndeploy_gnu_coreutils()\n{\n    local PACKAGE_ROOT=$(detect_package_root gnu-coreutils)\n    test -n \"$PACKAGE_ROOT\" || return 1\n\n    local srcf=$(strip_debug_info $PACKAGE_ROOT/coreutils)\n    test -n \"$srcf\" || return 1\n\n    local dstf=$DEPLOY_ROOT/bin/coreutils\n\n    adb_push $srcf $dstf || return 1\n    adb_shell chmod 0755 $dstf || return 1\n    rm -f $srcf\n\n    local MKCOREUTILS=/tmp/mkcoreutils.$RTAG\n    echo \"cd $DEPLOY_ROOT/bin/ || exit 1\" >$MKCOREUTILS\n\n    # This list is retrieved from output of \"coreutils --help\" on device\n    local COREUTILS=\"\\\n        [ base32 base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date \\\n        dd df dir dircolors dirname du echo env expand expr factor false fmt fold ginstall groups \\\n        head id join kill link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup \\\n        nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir \\\n        runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split \\\n        stat stdbuf stty sum sync tac tail tee test timeout touch tr true truncate tsort tty \\\n        uname unexpand uniq unlink users vdir wc who whoami yes\"\n\n    local u\n    for u in $COREUTILS; do\n        echo \"rm -f $u || exit 1\" >>$MKCOREUTILS\n        echo \"ln -s coreutils $u || exit 1\" >>$MKCOREUTILS\n    done\n\n    adb_push $MKCOREUTILS $DEPLOY_ROOT/tmp/mkcoreutils || return 1\n    adb_shell \"/system/bin/sh $DEPLOY_ROOT/tmp/mkcoreutils\" || return 1\n    adb_shell rm -f $DEPLOY_ROOT/mkcoreutils || return 1\n}\n\ndeploy_binfiles()\n{\n    local PACKAGE_NAME=$1\n    if [ -z \"$PACKAGE_NAME\" ]; then\n        echo \"Usage: deploy_binfiles package-name\" 1>&2\n        return 1\n    fi\n\n    local PACKAGE_ROOT=$(detect_package_root $PACKAGE_NAME)\n    test -n \"$PACKAGE_ROOT\" || return 1\n\n    local f\n    for f in $PACKAGE_ROOT/*; do\n        local srcf=$(strip_debug_info $f)\n        test -n \"$srcf\" || return 1\n        local dstf=$DEPLOY_ROOT/bin/$(basename $f)\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n}\n\ndeploy_net_tools()\n{\n    local NET_TOOLS_ROOT=$(detect_package_root net-tools)\n    test -n \"$NET_TOOLS_ROOT\" || return 1\n\n    local srcf\n    local dstf\n    local basef\n    local f\n    for f in $NET_TOOLS_ROOT/*; do\n        srcf=$(strip_debug_info $f)\n        test -n \"$srcf\" || return 1\n        basef=$(basename $f)\n        case $basef in\n            hostname|netstat)\n                dstf=$DEPLOY_ROOT/bin/$basef\n                ;;\n            *)\n                dstf=$DEPLOY_ROOT/sbin/$basef\n        esac\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n\n    for f in dnsdomainname domainname nisdomainname ypdomainname; do\n        adb_shell \"rm -f $DEPLOY_ROOT/bin/$f\" || return 1\n        adb_shell \"ln -s hostname $DEPLOY_ROOT/bin/$f\" || return 1\n    done\n}\n\ndeploy_openssh()\n{\n    local OPENSSH_ROOT=$(detect_package_root openssh)\n    test -n \"$OPENSSH_ROOT\" || return 1\n\n    local srcf\n    local dstf\n    local f\n    for f in $OPENSSH_ROOT/bin/* $OPENSSH_ROOT/sbin/* $OPENSSH_ROOT/libexec/*; do\n        srcf=$(strip_debug_info $f)\n        test -n \"$srcf\" || return 1\n        dstf=$DEPLOY_ROOT/$(echo $f | $SED \"s,$OPENSSH_ROOT/,,\")\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n\n    for f in $OPENSSH_ROOT/etc/*; do\n        srcf=/tmp/$(basename $f).$RTAG\n        dstf=$DEPLOY_ROOT/$(echo $f | $SED \"s,$OPENSSH_ROOT/,,\")\n        cat $f | $SED \"s,\\$DEPLOY_ROOT,$DEPLOY_ROOT,g\" >$srcf || return 1\n        case $f in\n            */sshd_config)\n                set_sshd_config_value $srcf Port $SSHD_PORT || return 1\n                set_sshd_config_value $srcf PasswordAuthentication no || return 1\n                set_sshd_config_value $srcf UsePrivilegeSeparation no || return 1\n                set_sshd_config_value $srcf UseDNS no || return 1\n                set_sshd_config_value $srcf AllowAgentForwarding yes || return 1\n                set_sshd_config_value $srcf PermitTTY yes || return 1\n                set_sshd_config_value $srcf AuthorizedKeysFile \"$DEPLOY_ROOT/.ssh/authorized_keys\" || return 1\n                #set_sshd_config_value $srcf PidFile \"$DEPLOY_ROOT/run/sshd.pid\" || return 1\n                #set_sshd_config_value $srcf LogLevel DEBUG3 || return 1\n                #for t in rsa dsa ecdsa ed25519; do\n                #    HOST_KEY=$DEPLOY_ROOT/etc/ssh_host_${t}_key\n                #    echo \"HostKey $HOST_KEY\" >>$srcf || return 1\n                #done\n        esac\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0644 $dstf || return 1\n        rm -f $srcf\n    done\n}\n\ndeploy_ncurses()\n{\n    local NCURSES_ROOT=$(detect_package_root ncurses)\n    test -n \"$NCURSES_ROOT\" || return 1\n\n    local srcf\n    local dstf\n    local f\n    for f in $NCURSES_ROOT/bin/*; do\n        srcf=$(strip_debug_info $f)\n        dstf=$DEPLOY_ROOT/bin/$(echo $f | sed \"s,^$NCURSES_ROOT/bin/,,\")\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n\n    dstf=$DEPLOY_ROOT/tmp/ncurses-share.tar.gz\n    adb_push $NCURSES_ROOT/share.tar.gz $dstf || return 1\n    adb_shell \"cd $DEPLOY_ROOT && LD_LIBRARY_PATH=$DEPLOY_ROOT/lib $DEPLOY_ROOT/bin/tar xvf $dstf\" || return 1\n    adb_shell rm -f $dstf || return 1\n}\n\ndeploy_procps_ng()\n{\n    local PROCPS_NG_ROOT=$(detect_package_root procps-ng)\n    test -n \"$PROCPS_NG_ROOT\" || return 1\n\n    local srcf=$PROCPS_NG_ROOT/procps-ng.tar.gz\n    local dstf=$DEPLOY_ROOT/tmp/$(basename $srcf)\n    adb_push $srcf $dstf || return 1\n    adb_shell \"cd $DEPLOY_ROOT && LD_LIBRARY_PATH=$DEPLOY_ROOT/lib $DEPLOY_ROOT/bin/tar xvf $dstf\" || return 1\n    adb_shell rm -f $dstf || return 1\n}\n\ndeploy_vim()\n{\n    local VIM_ROOT=$(detect_package_root vim)\n    test -n \"$VIM_ROOT\" || return 1\n\n    local srcf=$VIM_ROOT/vim.tar.gz\n    local dstf=$DEPLOY_ROOT/tmp/$(basename $srcf)\n    adb_push $srcf $dstf || return 1\n    adb_shell \"cd $DEPLOY_ROOT && LD_LIBRARY_PATH=$DEPLOY_ROOT/lib $DEPLOY_ROOT/bin/tar xvf $dstf\" || return 1\n    adb_shell rm -f $dstf || return 1\n}\n\ndeploy_x264()\n{\n    local X264_ROOT=$(detect_package_root x264)\n    test -n \"$X264_ROOT\" || return 1\n\n    local srcf\n    local dstf\n    local f\n    for f in $X264_ROOT/bin/* $X264_ROOT/lib/lib*.so; do\n        srcf=$(strip_debug_info $f)\n        dstf=$(echo $f | sed \"s,^$X264_ROOT/,$DEPLOY_ROOT/,\")\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n}\n\ndeploy_ffmpeg()\n{\n    deploy_x264 || return 1\n\n    local FFMPEG_ROOT=$(detect_package_root ffmpeg)\n    test -n \"$FFMPEG_ROOT\" || return 1\n\n    local srcf\n    local dstf\n    local f\n    for f in $FFMPEG_ROOT/bin/* $FFMPEG_ROOT/lib/lib*.so; do\n        srcf=$(strip_debug_info $f)\n        dstf=$(echo $f | sed \"s,^$FFMPEG_ROOT/,$DEPLOY_ROOT/,\")\n        adb_shell mkdir -p $(dirname $dstf) || return 1\n        adb_push $srcf $dstf || return 1\n        adb_shell chmod 0755 $dstf || return 1\n        rm -f $srcf\n    done\n}\n\ndeploy_bash_configs()\n{\n    local BASHRC=/tmp/bashrc.$RTAG\n    cat >$BASHRC <<EOF\nexport SHELL=\\$HOME/bin/bash\n\nTMP=\\$HOME/tmp\nTMPDIR=\\$TMP\nexport TMP TMPDIR\n\nexport EDITOR=vim\nexport PAGER=less\n\nexport TERMINFO=\\$HOME/share/terminfo\n\nexport VIMRUNTIME=\\$HOME/share/vim\n\nexport LD_LIBRARY_PATH=\\$HOME/lib\n\nexport PATH=\\$HOME/bin:\\$HOME/sbin:\\$PATH\nEOF\n    test $? -eq 0 || return 1\n\n    adb_push $BASHRC $DEPLOY_ROOT/.bashrc || return 1\n    rm -f $BASHRC\n\n    local BASH_PROFILE=/tmp/bash_profile.$RTAG\n    cat >$BASH_PROFILE <<EOF\nif [ \"\\$HOME\" != \"$DEPLOY_ROOT\" ]; then\n    echo \"*** ERROR: HOME doesn't point to $DEPLOY_ROOT!\" 1>&2\n    echo \"*** ERROR: Re-run Bash again with HOME=$DEPLOY_ROOT!\" 1>&2\n    exit 1\nfi\n\ntest -e ~/.bashrc && source ~/.bashrc\n\numask 0022\n\nalias mv='mv -i'\nalias cp='cp -i'\nalias ll='ls --color=auto -FAl'\nalias tf='tail -F'\nalias pg='ps auxw | grep -v grep | grep'\n\nexport HISTCONTROL=ignoreboth:erasedups\n\ncd \\$HOME\nEOF\n    test $? -eq 0 || return 1\n\n    adb_push $BASH_PROFILE $DEPLOY_ROOT/.bash_profile || return 1\n    rm -f $BASH_PROFILE\n}\n\nrun_sshd()\n{\n    local BASH=\"HOME=$DEPLOY_ROOT $DEPLOY_ROOT/bin/bash --login\"\n\n    local t\n    for t in rsa dsa ecdsa ed25519; do\n        local HOST_KEY=$DEPLOY_ROOT/etc/ssh_host_${t}_key\n        adb_shell \"$BASH -c 'test -f $HOST_KEY || $DEPLOY_ROOT/bin/ssh-keygen -t $t -N \\\"\\\" -f $HOST_KEY'\" || return 1\n    done\n\n    adb_shell \"$BASH -c '                                               \\\n        kill \\`cat $DEPLOY_ROOT/run/sshd.pid 2>/dev/null\\` 2>/dev/null; \\\n        export HOME=$DEPLOY_ROOT &&                                     \\\n        $DEPLOY_ROOT/sbin/sshd -x $DEPLOY_ROOT &&                       \\\n        true'\" || return 1\n}\n\ncreate_directories   || exit 1\ndeploy_libcrystax    || exit 1\ndeploy_gnu_libstdcxx || exit 1\ndeploy_bash          || exit 1\ndeploy_gnu_coreutils || exit 1\n\nfor p in              \\\n        cpulimit      \\\n        gnu-grep      \\\n        gnu-less      \\\n        gnu-sed       \\\n        gnu-tar       \\\n        gnu-which     \\\n        gnu-zip       \\\n        htop          \\\n        info-unzip    \\\n        info-zip      \\\n        ; do\n    deploy_binfiles $p || exit 1\ndone\n\ndeploy_openssh      || exit 1\ndeploy_net_tools    || exit 1\ndeploy_ncurses      || exit 1\ndeploy_procps_ng    || exit 1\ndeploy_vim          || exit 1\ndeploy_ffmpeg       || exit 1\ndeploy_bash_configs || exit 1\n\nrun_sshd || exit 1\n"
  }
]